diff --git a/.github/workflows/package-smoke-test.yaml b/.github/workflows/package-smoke-test.yaml index 5bfa92368..d1265d3ed 100644 --- a/.github/workflows/package-smoke-test.yaml +++ b/.github/workflows/package-smoke-test.yaml @@ -66,82 +66,10 @@ jobs: - name: Run installation type detection tests run: bash packages/cli/scripts/test-installation-type.sh - standalone-agent-test: - runs-on: blacksmith-2vcpu-ubuntu-2404 - timeout-minutes: 5 - name: Standalone Agent Test - steps: - - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install - - - name: Build packages - run: bun run build - - - name: Run standalone agent test - run: bun run test:standalone - - integration-test: + testing-apps-test: runs-on: blacksmith-2vcpu-ubuntu-2404 timeout-minutes: 10 - name: SDK Integration Test Suite - env: - AGENTUITY_API_URL: https://api.agentuity.com - AGENTUITY_USER_ID: ${{ vars.AGENTUITY_USER_ID }} - AGENTUITY_CLOUD_ORG_ID: ${{ vars.AGENTUITY_CLOUD_ORG_ID }} - AGENTUITY_REGION: usc - steps: - - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install - - - name: Prepare SDK for testing - run: bash scripts/prepare-sdk-for-testing.sh - - - name: Install SDK in integration-suite - run: bash scripts/install-sdk-tarballs.sh apps/testing/integration-suite - - - name: Setup test credentials - run: | - # Generate CLI API key for authentication - APIKEY=$(curl $AGENTUITY_API_URL/cli/auth/short-token -H 'Content-Type: application/json' --data "{\"secret\":\"${{ secrets.AGENTUITY_APITOKEN_SHARED_SECRET }}\",\"userId\":\"${{ env.AGENTUITY_USER_ID }}\"}" | jq -r '.data.apiKey') - echo "::add-mask::${APIKEY}" - echo "AGENTUITY_CLI_API_KEY=${APIKEY}" >> $GITHUB_ENV - - # Set SDK key for integration-suite tests - echo "AGENTUITY_SDK_KEY=${{ secrets.INTEGRATION_SUITE_AGENTUITY_SDK_KEY }}" >> $GITHUB_ENV - - # Set OpenAI API key for embedding operations - echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> $GITHUB_ENV - - - name: Run integration test suite - run: bash apps/testing/integration-suite/scripts/ci-test.sh - - cloud-deployment-test: - runs-on: blacksmith-2vcpu-ubuntu-2404 - timeout-minutes: 15 - name: Cloud Deployment Tests - env: - AGENTUITY_API_URL: https://api.agentuity.com - AGENTUITY_APP_URL: https://app.agentuity.com - AGENTUITY_TRANSPORT_URL: https://catalyst-usc.agentuity.cloud - AGENTUITY_CATALYST_URL: https://catalyst-usc.agentuity.cloud - AGENTUITY_STREAM_URL: https://streams-usc.agentuity.cloud - AGENTUITY_KEYVALUE_URL: https://catalyst-usc.agentuity.cloud - AGENTUITY_SANDBOX_URL: https://catalyst-usc.agentuity.cloud - AGENTUITY_OBJECTSTORE_URL: https://catalyst-usc.agentuity.cloud - AGENTUITY_VECTOR_URL: https://catalyst-usc.agentuity.cloud - AGENTUITY_LOG_LEVEL: error - AGENTUITY_REGION: usc - AGENTUITY_USER_ID: ${{ vars.AGENTUITY_USER_ID }} + name: Testing Apps (local tests) steps: - uses: actions/checkout@v4 @@ -151,79 +79,17 @@ jobs: - name: Install dependencies run: bun install - - name: Prepare SDK for testing - run: bash scripts/prepare-sdk-for-testing.sh - - - name: Install SDK in cloud-deployment - run: bash scripts/install-sdk-tarballs.sh apps/testing/cloud-deployment - - - name: Setup test credentials - run: | - # Generate CLI API key for cloud operations - APIKEY=$(curl $AGENTUITY_API_URL/cli/auth/short-token -H 'Content-Type: application/json' --data "{\"secret\":\"${{ secrets.AGENTUITY_APITOKEN_SHARED_SECRET }}\",\"userId\":\"${{ env.AGENTUITY_USER_ID }}\"}" | jq -r '.data.apiKey') - echo "::add-mask::${APIKEY}" - echo "AGENTUITY_CLI_API_KEY=${APIKEY}" >> $GITHUB_ENV - - # Set SDK key for runtime operations - echo "AGENTUITY_SDK_KEY=${{ secrets.CLOUD_DEPLOYMENT_AGENTUITY_SDK_KEY }}" >> $GITHUB_ENV - - # Set OpenAI API key for embedding operations - echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> $GITHUB_ENV - - - name: Create .env file for app runtime - run: | - cd apps/testing/cloud-deployment - cat > .env << EOF - AGENTUITY_SDK_KEY=${{ secrets.CLOUD_DEPLOYMENT_AGENTUITY_SDK_KEY }} - OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - AGENTUITY_API_URL=$AGENTUITY_API_URL - AGENTUITY_APP_URL=$AGENTUITY_APP_URL - AGENTUITY_TRANSPORT_URL=$AGENTUITY_TRANSPORT_URL - AGENTUITY_CATALYST_URL=$AGENTUITY_CATALYST_URL - AGENTUITY_STREAM_URL=$AGENTUITY_STREAM_URL - AGENTUITY_KEYVALUE_URL=$AGENTUITY_KEYVALUE_URL - AGENTUITY_SANDBOX_URL=$AGENTUITY_SANDBOX_URL - AGENTUITY_OBJECTSTORE_URL=$AGENTUITY_OBJECTSTORE_URL - AGENTUITY_VECTOR_URL=$AGENTUITY_VECTOR_URL - AGENTUITY_LOG_LEVEL=$AGENTUITY_LOG_LEVEL - AGENTUITY_REGION=$AGENTUITY_REGION - EOF - - - name: Run cloud deployment tests - run: bash scripts/test-cloud-deployment.sh - - # TODO: Re-enable after artifact storage quota resets (disabled 2026-02-01) - # - name: Upload deployment logs - # if: failure() - # uses: actions/upload-artifact@v4 - # with: - # name: deployment-logs - # path: ~/.config/agentuity/logs/ - # if-no-files-found: ignore - # retention-days: 1 - - - name: Cleanup - if: always() - run: rm -rf apps/testing/cloud-deployment/.env - - template-integration-test: - runs-on: blacksmith-2vcpu-ubuntu-2404 - timeout-minutes: 30 - name: Template Integration Tests - steps: - - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 + - name: Run standalone-backend tests + run: cd apps/testing/standalone-backend && bun test - - name: Install dependencies - run: bun install + - name: Run oauth tests + run: cd apps/testing/oauth && bun test - - name: Build packages - run: bun run build + - name: Run e2e-web tests + run: cd apps/testing/e2e-web && bun test - - name: Run template integration tests - run: bun scripts/test-templates.ts --skip-outdated + - name: Run integration-suite tests + run: cd apps/testing/integration-suite && bun test sandbox-cli-test: runs-on: blacksmith-2vcpu-ubuntu-2404 @@ -256,36 +122,6 @@ jobs: - name: Run sandbox CLI tests run: bash scripts/test-sandbox.sh - storage-cli-test: - runs-on: blacksmith-2vcpu-ubuntu-2404 - timeout-minutes: 10 - name: Storage CLI Tests - env: - AGENTUITY_API_URL: https://api.agentuity.com - AGENTUITY_USER_ID: ${{ vars.AGENTUITY_USER_ID }} - AGENTUITY_CLOUD_ORG_ID: ${{ vars.AGENTUITY_CLOUD_ORG_ID }} - AGENTUITY_REGION: usc - steps: - - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install - - - name: Build packages - run: bun run build - - - name: Setup test credentials - run: | - # Generate CLI API key for authentication - APIKEY=$(curl $AGENTUITY_API_URL/cli/auth/short-token -H 'Content-Type: application/json' --data "{\"secret\":\"${{ secrets.AGENTUITY_APITOKEN_SHARED_SECRET }}\",\"userId\":\"${{ env.AGENTUITY_USER_ID }}\"}" | jq -r '.data.apiKey') - echo "::add-mask::${APIKEY}" - echo "AGENTUITY_CLI_API_KEY=${APIKEY}" >> $GITHUB_ENV - - - name: Run storage CLI tests - run: bun scripts/test-storage.ts queue-sdk-test: runs-on: blacksmith-2vcpu-ubuntu-2404 @@ -347,48 +183,10 @@ jobs: - name: Run queue CLI tests run: bash scripts/test-queue.sh - playwright-e2e-test: - runs-on: blacksmith-4vcpu-ubuntu-2204 - timeout-minutes: 15 - name: Playwright E2E Smoke Test - steps: - - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install - - - name: Install Playwright browsers - run: bunx playwright install --with-deps chromium - - - name: Prepare SDK for testing - timeout-minutes: 5 - run: bash scripts/prepare-sdk-for-testing.sh --packages-only - - - name: Install SDK in e2e-web - run: bash scripts/install-sdk-tarballs.sh apps/testing/e2e-web - - # No explicit build step needed: playwright.config.ts webServer starts - # "bun run dev" which compiles on-the-fly via Vite. A production build - # would be redundant since e2e tests run against the dev server. - - name: Run Playwright E2E tests - run: bun run test:e2e - - # TODO: Re-enable after artifact storage quota resets (disabled 2026-02-01) - # - name: Upload Playwright report - # uses: actions/upload-artifact@v4 - # if: always() - # with: - # name: playwright-report - # path: playwright-report/ - # retention-days: 1 - framework-demo-test: - runs-on: blacksmith-4vcpu-ubuntu-2204 - timeout-minutes: 15 - name: Framework Integration Tests (TanStack & Next.js) + runs-on: blacksmith-2vcpu-ubuntu-2404 + timeout-minutes: 30 + name: Framework Demo Tests steps: - uses: actions/checkout@v4 @@ -398,30 +196,11 @@ jobs: - name: Install dependencies run: bun install - - name: Install Playwright browsers - run: bunx playwright install --with-deps chromium + - name: Build packages + run: bun run build - - name: Prepare SDK for testing - run: bash scripts/prepare-sdk-for-testing.sh + - name: Install Playwright + run: bunx playwright install --with-deps chromium - - name: Install SDK in framework demo apps - run: | - # Install in main app (frontend packages) - bash scripts/install-sdk-tarballs.sh apps/testing/tanstack-start - bash scripts/install-sdk-tarballs.sh apps/testing/nextjs-app - # Install in agentuity subfolders (runtime packages) - bash scripts/install-sdk-tarballs.sh apps/testing/tanstack-start/agentuity - bash scripts/install-sdk-tarballs.sh apps/testing/nextjs-app/agentuity - - - name: Run Framework Demo tests - timeout-minutes: 8 - run: bash scripts/test-framework-demos.sh --skip-build - - # TODO: Re-enable after artifact storage quota resets (disabled 2026-02-01) - # - name: Upload Playwright report - # uses: actions/upload-artifact@v4 - # if: always() - # with: - # name: framework-demo-playwright-report - # path: playwright-report/ - # retention-days: 1 + - name: Run framework demo tests + run: bash scripts/test-framework-demos.sh diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index ac09822f8..000000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -bun.lock -**/.agentuity/* -packages/cli/test-interop/go-common -*.sh -**/generated/*.ts \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index edcfaba14..000000000 --- a/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "trailingComma": "es5", - "useTabs": true, - "tabWidth": 3, - "printWidth": 100, - "semi": true, - "singleQuote": true -} diff --git a/apps/docs/src/generated/env.d.ts b/apps/docs/src/generated/env.d.ts deleted file mode 100644 index 53b894fe0..000000000 --- a/apps/docs/src/generated/env.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -// @generated -// AUTO-GENERATED from local .env files -// This file is auto-generated by the build tool - do not edit manually - -declare global { - namespace NodeJS { - interface ProcessEnv { - readonly AGENTUITY_ORG_ID: string; - readonly AGENTUITY_SDK_KEY: string; - readonly AGENT_BEARER_TOKEN: string; - readonly DATABASE_URL: string; - readonly S3_ACCESS_KEY_ID: string; - readonly S3_BUCKET: string; - readonly S3_ENDPOINT: string; - readonly S3_SECRET_ACCESS_KEY: string; - readonly SANDBOX_SNAPSHOT_ID: string; - } - } -} - -// Vite-compatible environment types -// Only includes variables with VITE_, AGENTUITY_PUBLIC_, or PUBLIC_ prefix -interface ImportMetaEnv { - // No VITE_*, AGENTUITY_PUBLIC_*, or PUBLIC_* prefixed variables found -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} - -export {}; - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! diff --git a/apps/testing/auth-package-app/.agents/agentuity/sdk/agent/AGENTS.md b/apps/testing/auth-package-app/.agents/agentuity/sdk/agent/AGENTS.md deleted file mode 100644 index 3c5330d3c..000000000 --- a/apps/testing/auth-package-app/.agents/agentuity/sdk/agent/AGENTS.md +++ /dev/null @@ -1,308 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `routes.ts` - Route registry for API, WebSocket, and SSE endpoints -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - const user = await ctx.kv.get('user:123'); - await ctx.kv.delete('user:123'); - const keys = await ctx.kv.list('user:*'); - return user; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) - - diff --git a/apps/testing/auth-package-app/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/auth-package-app/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index e6c32b3fb..000000000 --- a/apps/testing/auth-package-app/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,367 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with strongly-typed route definitions and schema types -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your routes: - -```typescript -import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes'; -``` - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import myAgent from '@agent/my-agent'; - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse((c, stream) => { - stream.writeSSE({ data: 'Hello', event: 'message' }); - stream.writeSSE({ data: 'World', event: 'message' }); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/auth-package-app/.agents/agentuity/sdk/web/AGENTS.md b/apps/testing/auth-package-app/.agents/agentuity/sdk/web/AGENTS.md deleted file mode 100644 index 2a6eb0da5..000000000 --- a/apps/testing/auth-package-app/.agents/agentuity/sdk/web/AGENTS.md +++ /dev/null @@ -1,511 +0,0 @@ -# Web Folder Guide - -This folder contains your React-based web application that communicates with your Agentuity agents. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with type-safe API, WebSocket, and SSE route definitions -- `registry.ts` - Agent registry with input/output types - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your components: - -```typescript -// Routes are typed automatically via module augmentation -import { useAPI } from '@agentuity/react'; - -// The route 'GET /api/users' is fully typed -const { data } = useAPI('GET /api/users'); -``` - -## Directory Structure - -Required files: - -- **App.tsx** (required) - Main React application component -- **frontend.tsx** (required) - Frontend entry point with client-side rendering -- **index.html** (required) - HTML template -- **public/** (optional) - Static assets (images, CSS, JS files) - -Example structure: - -``` -src/web/ -├── App.tsx -├── frontend.tsx -├── index.html -└── public/ - ├── styles.css - ├── logo.svg - └── script.js -``` - -## Creating the Web App - -### App.tsx - Main Component - -```typescript -import { AgentuityProvider, useAPI } from '@agentuity/react'; -import { useState } from 'react'; - -function HelloForm() { - const [name, setName] = useState('World'); - const { invoke, isLoading, data: greeting } = useAPI('POST /api/hello'); - - return ( -
- setName(e.target.value)} - disabled={isLoading} - /> - - - -
{greeting ?? 'Waiting for response'}
-
- ); -} - -export function App() { - return ( - -
-

Welcome to Agentuity

- -
-
- ); -} -``` - -### frontend.tsx - Entry Point - -```typescript -import { createRoot } from 'react-dom/client'; -import { App } from './App'; - -const root = document.getElementById('root'); -if (!root) throw new Error('Root element not found'); - -createRoot(root).render(); -``` - -### index.html - HTML Template - -```html - - - - - - My Agentuity App - - -
- - - -``` - -## React Hooks - -All hooks from `@agentuity/react` must be used within an `AgentuityProvider`. **Always use these hooks instead of raw `fetch()` calls** - they provide type safety, automatic error handling, and integration with the Agentuity platform. - -### useAPI - Type-Safe API Calls - -The primary hook for making HTTP requests. **Use this instead of `fetch()`.** - -```typescript -import { useAPI } from '@agentuity/react'; - -function MyComponent() { - // GET requests auto-execute and return refetch - const { data, isLoading, error, refetch } = useAPI('GET /api/users'); - - // POST/PUT/DELETE return invoke for manual execution - const { invoke, data: result, isLoading: saving } = useAPI('POST /api/users'); - - const handleCreate = async () => { - // Input is fully typed from route schema! - await invoke({ name: 'Alice', email: 'alice@example.com' }); - }; - - return ( -
- - {result &&

Created: {result.name}

} -
- ); -} -``` - -**useAPI Return Values:** - -| Property | Type | Description | -| ------------ | ------------------------ | ----------------------------------------- | -| `data` | `T \| undefined` | Response data (typed from route schema) | -| `error` | `Error \| null` | Error if request failed | -| `isLoading` | `boolean` | True during initial load | -| `isFetching` | `boolean` | True during any fetch (including refetch) | -| `isSuccess` | `boolean` | True if last request succeeded | -| `isError` | `boolean` | True if last request failed | -| `invoke` | `(input?) => Promise` | Manual trigger (POST/PUT/DELETE) | -| `refetch` | `() => Promise` | Refetch data (GET) | -| `reset` | `() => void` | Reset state to initial | - -### useAPI Options - -```typescript -// GET with query parameters and caching -const { data } = useAPI({ - route: 'GET /api/search', - query: { q: 'react', limit: '10' }, - staleTime: 5000, // Cache for 5 seconds - refetchInterval: 10000, // Auto-refetch every 10 seconds - enabled: true, // Set to false to disable auto-fetch -}); - -// POST with callbacks -const { invoke } = useAPI({ - route: 'POST /api/users', - onSuccess: (data) => console.log('Created:', data), - onError: (error) => console.error('Failed:', error), -}); - -// Streaming responses with onChunk -const { invoke } = useAPI({ - route: 'POST /api/stream', - onChunk: (chunk) => console.log('Received chunk:', chunk), - delimiter: '\n', // Split stream by newlines (default) -}); - -// Custom headers -const { data } = useAPI({ - route: 'GET /api/protected', - headers: { 'X-Custom-Header': 'value' }, -}); -``` - -### useWebsocket - WebSocket Connection - -For bidirectional real-time communication. Automatically handles reconnection. - -```typescript -import { useWebsocket } from '@agentuity/react'; - -function ChatComponent() { - const { isConnected, data, send, messages, clearMessages, error, reset } = useWebsocket('/api/chat'); - - return ( -
-

Status: {isConnected ? 'Connected' : 'Disconnected'}

- -
- {messages.map((msg, i) => ( -

{JSON.stringify(msg)}

- ))} -
- -
- ); -} -``` - -**useWebsocket Return Values:** - -| Property | Type | Description | -| --------------- | ---------------- | ---------------------------------------- | -| `isConnected` | `boolean` | True when WebSocket is connected | -| `data` | `T \| undefined` | Most recent message received | -| `messages` | `T[]` | Array of all received messages | -| `send` | `(data) => void` | Send a message (typed from route schema) | -| `clearMessages` | `() => void` | Clear the messages array | -| `close` | `() => void` | Close the connection | -| `error` | `Error \| null` | Error if connection failed | -| `isError` | `boolean` | True if there's an error | -| `reset` | `() => void` | Reset state and reconnect | -| `readyState` | `number` | WebSocket ready state | - -### useEventStream - Server-Sent Events - -For server-to-client streaming (one-way). Use when server pushes updates to client. - -```typescript -import { useEventStream } from '@agentuity/react'; - -function NotificationsComponent() { - const { isConnected, data, error, close, reset } = useEventStream('/api/notifications'); - - return ( -
-

Connected: {isConnected ? 'Yes' : 'No'}

- {error &&

Error: {error.message}

} -

Latest: {JSON.stringify(data)}

- -
- ); -} -``` - -**useEventStream Return Values:** - -| Property | Type | Description | -| ------------- | ---------------- | ---------------------------------- | -| `isConnected` | `boolean` | True when EventSource is connected | -| `data` | `T \| undefined` | Most recent event data | -| `error` | `Error \| null` | Error if connection failed | -| `isError` | `boolean` | True if there's an error | -| `close` | `() => void` | Close the connection | -| `reset` | `() => void` | Reset state and reconnect | -| `readyState` | `number` | EventSource ready state | - -### useAgentuity - Access Context - -Access the Agentuity context for base URL and configuration. - -```typescript -import { useAgentuity } from '@agentuity/react'; - -function MyComponent() { - const { baseUrl } = useAgentuity(); - - return

API Base: {baseUrl}

; -} -``` - -### useAuth - Authentication State - -Access and manage authentication state. - -```typescript -import { useAuth } from '@agentuity/react'; - -function AuthStatus() { - const { isAuthenticated, authHeader, setAuthHeader, authLoading } = useAuth(); - - const handleLogin = async (token: string) => { - setAuthHeader?.(`Bearer ${token}`); - }; - - const handleLogout = () => { - setAuthHeader?.(null); - }; - - if (authLoading) return

Loading...

; - - return ( -
- {isAuthenticated ? ( - - ) : ( - - )} -
- ); -} -``` - -**useAuth Return Values:** - -| Property | Type | Description | -| ----------------- | ------------------- | ------------------------------------------- | -| `isAuthenticated` | `boolean` | True if user has auth token and not loading | -| `authHeader` | `string \| null` | Current auth header (e.g., "Bearer ...") | -| `setAuthHeader` | `(token) => void` | Set auth header (null to clear) | -| `authLoading` | `boolean` | True during auth state changes | -| `setAuthLoading` | `(loading) => void` | Set auth loading state | - -## Complete Example - -```typescript -import { AgentuityProvider, useAPI, useWebsocket } from '@agentuity/react'; -import { useEffect, useState } from 'react'; - -function Dashboard() { - const [count, setCount] = useState(0); - const { invoke, data: agentResult } = useAPI('POST /api/process'); - const { isConnected, send, data: wsMessage } = useWebsocket('/api/live'); - - useEffect(() => { - if (isConnected) { - const interval = setInterval(() => { - send({ ping: Date.now() }); - }, 1000); - return () => clearInterval(interval); - } - }, [isConnected, send]); - - return ( -
-

My Agentuity App

- -
-

Count: {count}

- -
- -
- -

{JSON.stringify(agentResult)}

-
- -
- WebSocket: - {isConnected ? JSON.stringify(wsMessage) : 'Not connected'} -
-
- ); -} - -export function App() { - return ( - - - - ); -} -``` - -## Static Assets - -Place static files in the **public/** folder: - -``` -src/web/public/ -├── logo.svg -├── styles.css -└── script.js -``` - -Reference them in your HTML or components: - -```html - - - -``` - -```typescript -// In React components -Logo -``` - -## Styling - -### Inline Styles - -```typescript -
- Styled content -
-``` - -### CSS Files - -Create `public/styles.css`: - -```css -body { - background-color: #09090b; - color: #fff; - font-family: sans-serif; -} -``` - -Import in `index.html`: - -```html - -``` - -### Style Tag in Component - -```typescript -
- - -
-``` - -## RPC-Style API Client - -For non-React contexts (like utility functions or event handlers), use `createClient`: - -```typescript -import { createClient } from '@agentuity/react'; - -// Create a typed client (uses global baseUrl and auth from AgentuityProvider) -const api = createClient(); - -// Type-safe RPC-style calls - routes become nested objects -// Route 'GET /api/users' becomes api.users.get() -// Route 'POST /api/users' becomes api.users.post() -// Route 'GET /api/users/:id' becomes api.users.id.get({ id: '123' }) - -async function fetchData() { - const users = await api.users.get(); - const newUser = await api.users.post({ name: 'Alice', email: 'alice@example.com' }); - const user = await api.users.id.get({ id: '123' }); - return { users, newUser, user }; -} -``` - -**When to use `createClient` vs `useAPI`:** - -| Use Case | Recommendation | -| ------------------------- | -------------- | -| React component rendering | `useAPI` hook | -| Event handlers | Either works | -| Utility functions | `createClient` | -| Non-React code | `createClient` | -| Need loading/error state | `useAPI` hook | -| Need caching/refetch | `useAPI` hook | - -## Best Practices - -- Wrap your app with **AgentuityProvider** for hooks to work -- **Always use `useAPI` instead of `fetch()`** for type safety and error handling -- Use **useAPI** for type-safe HTTP requests (GET, POST, PUT, DELETE) -- Use **useWebsocket** for bidirectional real-time communication -- Use **useEventStream** for server-to-client streaming -- Use **useAuth** for authentication state management -- Handle loading and error states in UI -- Place reusable components in separate files -- Keep static assets in the **public/** folder - -## Rules - -- **App.tsx** must export a function named `App` -- **frontend.tsx** must render the `App` component to `#root` -- **index.html** must have a `
` -- Routes are typed via module augmentation from `src/generated/routes.ts` -- The web app is served at `/` by default -- Static files in `public/` are served at `/public/*` -- Module script tag: `` -- **Never use raw `fetch()` calls** - always use `useAPI` or `createClient` - - diff --git a/apps/testing/auth-package-app/.gitignore b/apps/testing/auth-package-app/.gitignore deleted file mode 100644 index a1609616b..000000000 --- a/apps/testing/auth-package-app/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# Agentuity build files -.agentuity/ - -# Dependencies -node_modules/ - -# Environment files -.env -.env.local -.env.* - -# Auto-generated AGENTS.md files in source directories -src/web/AGENTS.md -src/api/AGENTS.md -src/agent/AGENTS.md - -# Output -out -dist -*.tgz - -# Code coverage -coverage -*.lcov - -# Logs -/logs -*.log - -# Caches -.eslintcache -.cache -*.tsbuildinfo - -# IDE -.idea -.DS_Store - -# Auth test artifacts -cookies.txt -dev.db -*.db diff --git a/apps/testing/auth-package-app/AGENTS.md b/apps/testing/auth-package-app/AGENTS.md deleted file mode 100644 index b923811a0..000000000 --- a/apps/testing/auth-package-app/AGENTS.md +++ /dev/null @@ -1,64 +0,0 @@ -# Agent Guidelines for ag-auth-test-app - -## Commands - -- **Build**: `bun run build` (compiles your application) -- **Dev**: `bun run dev` (starts development server) -- **Typecheck**: `bun run typecheck` (runs TypeScript type checking) -- **Deploy**: `bun run deploy` (deploys your app to the Agentuity cloud) - -## Agent-Friendly CLI - -The Agentuity CLI is designed to be agent-friendly with programmatic interfaces, structured output, and comprehensive introspection. - -Read the [AGENTS.md](./node_modules/@agentuity/cli/AGENTS.md) file in the Agentuity CLI for more information on how to work with this project. - -## Instructions - -- This project uses Bun instead of NodeJS and TypeScript for all source code -- This is an Agentuity Agent project - -## Web Frontend (src/web/) - -The `src/web/` folder contains your React frontend, which is automatically bundled by the Agentuity build system. - -**File Structure:** - -- `index.html` - Main HTML file with ` - - -
- - diff --git a/apps/testing/auth-package-app/src/web/public/.gitkeep b/apps/testing/auth-package-app/src/web/public/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/auth-package-app/src/web/public/favicon.ico b/apps/testing/auth-package-app/src/web/public/favicon.ico deleted file mode 100644 index 21f46e6f5..000000000 Binary files a/apps/testing/auth-package-app/src/web/public/favicon.ico and /dev/null differ diff --git a/apps/testing/auth-package-app/tsconfig.json b/apps/testing/auth-package-app/tsconfig.json deleted file mode 100644 index 94bb39acb..000000000 --- a/apps/testing/auth-package-app/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, - "paths": { - "@agent/*": ["./src/agent/*"], - "@api/*": ["./src/api/*"], - "@agentuity/frontend": ["./node_modules/@agentuity/frontend"] - } - }, - "include": ["src/**/*", "app.ts"] -} diff --git a/apps/testing/cloud-deployment/.gitignore b/apps/testing/cloud-deployment/.gitignore deleted file mode 100644 index 641f3f0f3..000000000 --- a/apps/testing/cloud-deployment/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Build output -.agentuity/ -dist/ - -# Dependencies -node_modules/ - -# Environment files (contain secrets) -.env -.env.* - -# Local project config (use agentuity.json for CI) -agentuity.local.json - -# Logs -*.log - -# OS -.DS_Store diff --git a/apps/testing/cloud-deployment/README.md b/apps/testing/cloud-deployment/README.md deleted file mode 100644 index 2a71edd45..000000000 --- a/apps/testing/cloud-deployment/README.md +++ /dev/null @@ -1,189 +0,0 @@ -# Cloud Deployment Integration Tests - -End-to-end integration tests for the Agentuity CLI cloud deployment commands. - -## What It Tests - -- ✅ CLI authentication (`auth whoami`) -- ✅ Project deployment (`cloud deploy`) -- ✅ Deployment management (`cloud deployment list`, `show`, `remove`, `undeploy`) -- ✅ Deployment rollback (`cloud deployment rollback`) -- ✅ Agent management (`cloud agent list`, `get`) -- ✅ Session tracking (`cloud session get`, `list`, `logs`) -- ✅ Real HTTP invocation of deployed agents -- ✅ Cloud infrastructure interaction - -## Architecture - -This test suite is **standalone** with its own minimal agents: - -``` -cloud-deployment/ -├── agentuity.json # Project config (CI) -├── agentuity.local.json # Project config (local) -├── src/ -│ └── agent/ -│ └── simple/ # Simple test agent -├── app.ts # Server entry point -├── tsconfig.json # TypeScript config -├── package.json # Build and test scripts -└── scripts/ - ├── test-deployment.sh # Main test script - └── test-lib.sh # Shared utilities -``` - -## Prerequisites - -### Local Testing - -1. **Authenticated CLI**: - - ```bash - bun ../../packages/cli/bin/cli.ts auth login - ``` - -2. **Project Configuration**: - - `agentuity.json` - CI project (used in GitHub Actions) - - `agentuity.local.json` - Your local project (used with `profile=local`) - - Create your own project ID in `agentuity.local.json` if empty - -3. **Environment variables** (set via `.env` or export): - - `AGENTUITY_SDK_KEY` - SDK key for runtime operations - - `OPENAI_API_KEY` - For vector embedding operations - -### CI Testing - -CI automatically sets up: - -- `AGENTUITY_CLI_API_KEY` - Generated from shared secret -- `AGENTUITY_SDK_KEY` - From GitHub secrets -- `OPENAI_API_KEY` - From GitHub secrets - -## Running Tests - -### Run Locally - -The `bun test` command will: - -1. Build the cloud-deployment app -2. Run the deployment tests - -```bash -cd sdk/apps/testing/cloud-deployment -bun test -``` - -Or run steps manually: - -```bash -bun run build # Build the app -bash scripts/test-deployment.sh # Run tests only -``` - -### Run in CI - -Tests run automatically in the `cloud-deployment-test` job in `.github/workflows/package-smoke-test.yaml`. - -## Test Flow - -1. **Pre-checks**: - - Verify CLI authentication - - Verify project config exists - -2. **Deployment**: - - Deploy project (creates first deployment) - - Deploy again (creates second deployment for rollback test) - -3. **Agent Operations**: - - List agents - - Get agent details by ID - -4. **Session Operations**: - - Invoke deployed agent endpoint - - Capture session ID from response headers - - Get session details - - List sessions (with filters) - - Get session logs - -5. **Rollback**: - - Rollback to previous deployment - - Verify rollback succeeded - -6. **Cleanup**: - - Remove specific deployment - - Undeploy all deployments - - Verify undeploy worked - -## Expected Output - -``` -========================================= - Deployment Commands Test -========================================= - -✓ Authenticated -✓ Project configuration found - -Test 1: List deployments... -✓ Deployment list command succeeded - -Test 2: Deploy project... -✓ Deploy command succeeded -Deployment ID: deploy_abc123 - -Test 2a: List agents... -✓ Agent list command succeeded -First Agent ID: agent_def456 - -Test 2b: Get agent details... -✓ Agent get command succeeded -✓ Agent details contain correct ID - -... (more tests) - -========================================= -✓ All deployment tests passed! -========================================= -``` - -## Troubleshooting - -### Authentication Failures - -``` -✗ Not authenticated. Please run: bun /cli.ts auth login -``` - -**Fix**: Run `bun ../../packages/cli/bin/cli.ts auth login` - -### No agentuity.json - -``` -✗ No agentuity.json file found -``` - -**Fix**: Ensure you're in the `cloud-deployment/` directory - -### Deployment Invoke Failures - -``` -⚠ Failed to invoke deployment after 3 attempts (skipping session tests) -``` - -**Known Issue**: Sometimes deployments return transient 500 errors immediately after provisioning. Tests will skip session validation but continue. - -### Missing SDK Key - -``` -ERROR: No AGENTUITY_SDK_KEY found in .env -``` - -**Fix**: Set `AGENTUITY_SDK_KEY` environment variable or create `.env` file in `cloud-deployment/` - -## Notes - -- Tests use the **same agents** as integration-suite -- Each test run creates real cloud deployments -- Cleanup (undeploy) happens automatically at end -- Tests take ~3-5 minutes to complete -- Network timeouts are handled gracefully diff --git a/apps/testing/cloud-deployment/agentuity.json b/apps/testing/cloud-deployment/agentuity.json deleted file mode 100644 index 07306bce0..000000000 --- a/apps/testing/cloud-deployment/agentuity.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "https://agentuity.dev/schema/cli/v1/agentuity.json", - "projectId": "proj_9c56c0a5d5345916b27a38a00beb752f", - "orgId": "org_38uEd1JNXIe89KMPaOwx1WJW43o", - "region": "usc", - "deployment": { - "resources": { - "memory": "500Mi", - "cpu": "500m", - "disk": "500Mi" - }, - "domains": [] - } -} diff --git a/apps/testing/cloud-deployment/app.ts b/apps/testing/cloud-deployment/app.ts deleted file mode 100644 index 0a6c1d67a..000000000 --- a/apps/testing/cloud-deployment/app.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createApp } from '@agentuity/runtime'; -import simple from './src/agent/simple/agent'; - -const app = await createApp({ - agents: [simple], -}); - -export default app; diff --git a/apps/testing/cloud-deployment/package.json b/apps/testing/cloud-deployment/package.json deleted file mode 100644 index 6814b0d2d..000000000 --- a/apps/testing/cloud-deployment/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "cloud-deployment-tests", - "version": "0.0.1", - "license": "Apache-2.0", - "private": true, - "type": "module", - "description": "Cloud deployment integration tests for Agentuity CLI", - "scripts": { - "build": "bun ../../../packages/cli/bin/cli.ts build --dir .", - "test": "bun run build && bash scripts/test-deployment.sh", - "test:deployment": "bash scripts/test-deployment.sh" - }, - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.11.3", - "react": "^19.2.3", - "react-dom": "^19.2.3" - }, - "devDependencies": { - "@types/bun": "^1.2.19", - "@types/react": "^19.2.8", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^4.6.0", - "vite": "^7.3.1" - } -} diff --git a/apps/testing/cloud-deployment/scripts/test-deployment.sh b/apps/testing/cloud-deployment/scripts/test-deployment.sh deleted file mode 100755 index 201e4db52..000000000 --- a/apps/testing/cloud-deployment/scripts/test-deployment.sh +++ /dev/null @@ -1,837 +0,0 @@ -#!/bin/bash - -# Test deployment commands (deploy, undeploy, list, rollback) -# Tests the full deployment workflow using the Agentuity CLI - -set -e - -# Get script directory and find CLI binary -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -source "$SCRIPT_DIR/test-lib.sh" - -BIN_SCRIPT="$SCRIPT_DIR/../../../../packages/cli/bin/cli.ts" - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Track test results -TEST_FAILED=false - -# Cleanup function -cleanup() { - local exit_code=$? - echo "" 2>/dev/null || true - echo "Cleaning up..." 2>/dev/null || true - - # Remove temp directory if set - if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then - rm -rf "$TEMP_DIR" - fi - - if [ $exit_code -ne 0 ] || [ "$TEST_FAILED" = true ]; then - echo -e "${RED}✗${NC} Deployment test failed" - exit 1 - fi -} - -trap cleanup EXIT INT TERM - -# Create temp directory for test artifacts -TEMP_DIR=$(mktemp -d) -echo "Test directory: $TEMP_DIR" -echo "" - -# Change to test-app directory -cd "$SCRIPT_DIR/.." - -echo "=========================================" -echo " Deployment Commands Test" -echo "=========================================" -echo "" - -# Check if user is authenticated -echo "Checking authentication..." -set +e -bun "$BIN_SCRIPT" auth whoami &> /dev/null -AUTH_CHECK=$? -set -e - -if [ $AUTH_CHECK -ne 0 ]; then - echo -e "${RED}✗${NC} Not authenticated. Please run: bun $BIN_SCRIPT auth login" - TEST_FAILED=true - exit 1 -fi -echo -e "${GREEN}✓${NC} Authenticated" -echo "" - -# Check if project exists (agentuity.json file) -if [ ! -f "agentuity.json" ]; then - echo -e "${RED}✗${NC} No agentuity.json file found. This test must be run from a project directory." - TEST_FAILED=true - exit 1 -fi -echo -e "${GREEN}✓${NC} Project configuration found" -echo "" - -# Test 1: List deployments (should work even with no deployments) -echo "Test 1: List deployments..." -set +e -DEPLOYMENT_LIST_OUTPUT="$TEMP_DIR/deployment-list.txt" -bun "$BIN_SCRIPT" cloud deployment list > "$DEPLOYMENT_LIST_OUTPUT" 2>&1 -DEPLOYMENT_LIST_EXIT=$? -set -e - -if [ $DEPLOYMENT_LIST_EXIT -eq 0 ]; then - echo -e "${GREEN}✓${NC} Deployment list command succeeded" - cat "$DEPLOYMENT_LIST_OUTPUT" -else - echo -e "${YELLOW}⚠${NC} Deployment list command failed (may be expected if project has no deployments)" - cat "$DEPLOYMENT_LIST_OUTPUT" -fi -echo "" - -# Test 2: Deploy the project -echo "Test 2: Deploy project..." -DEPLOY_OUTPUT="$TEMP_DIR/deploy.txt" -echo "Running: bun $BIN_SCRIPT cloud deploy" -echo "This may take a few minutes..." -echo "" - -set +e -bun "$BIN_SCRIPT" cloud deploy > "$DEPLOY_OUTPUT" 2>&1 -DEPLOY_EXIT=$? -set -e - -if [ $DEPLOY_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Deploy command failed" - cat "$DEPLOY_OUTPUT" - TEST_FAILED=true - exit 1 -fi - -echo -e "${GREEN}✓${NC} Deploy command succeeded" -cat "$DEPLOY_OUTPUT" -echo "" - -# Extract deployment ID from output (format: deploy_xxx) -DEPLOYMENT_ID=$(grep -oE 'deploy_[a-zA-Z0-9]+' "$DEPLOY_OUTPUT" | head -1 || echo "") -if [ -z "$DEPLOYMENT_ID" ]; then - echo -e "${YELLOW}⚠${NC} Could not extract deployment ID from output" -else - echo "Deployment ID: $DEPLOYMENT_ID" -fi -echo "" - -# Test 2a: List agents -echo "Test 2a: List agents..." -AGENT_LIST_OUTPUT="$TEMP_DIR/agent-list.txt" -set +e -bun "$BIN_SCRIPT" cloud agent list > "$AGENT_LIST_OUTPUT" 2>&1 -AGENT_LIST_EXIT=$? -set -e - -if [ $AGENT_LIST_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Agent list command failed" - cat "$AGENT_LIST_OUTPUT" - TEST_FAILED=true - exit 1 -fi - -echo -e "${GREEN}✓${NC} Agent list command succeeded" -cat "$AGENT_LIST_OUTPUT" - -# Extract first agent ID from output (format: agent_xxx) -AGENT_ID=$(grep -oE 'agent_[a-f0-9]{40}' "$AGENT_LIST_OUTPUT" | head -1 || echo "") -if [ -z "$AGENT_ID" ]; then - echo -e "${YELLOW}⚠${NC} Could not extract agent ID from output" -else - echo "First Agent ID: $AGENT_ID" -fi -echo "" - -# Test 2b: Get agent details -if [ -n "$AGENT_ID" ]; then - echo "Test 2b: Get agent details..." - AGENT_GET_OUTPUT="$TEMP_DIR/agent-get.txt" - set +e - bun "$BIN_SCRIPT" cloud agent get "$AGENT_ID" > "$AGENT_GET_OUTPUT" 2>&1 - AGENT_GET_EXIT=$? - set -e - - if [ $AGENT_GET_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Agent get command failed" - cat "$AGENT_GET_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} Agent get command succeeded" - cat "$AGENT_GET_OUTPUT" - - # Verify agent details contain the agent ID - if grep -q "$AGENT_ID" "$AGENT_GET_OUTPUT"; then - echo -e "${GREEN}✓${NC} Agent details contain correct ID" - else - echo -e "${RED}✗${NC} Agent details missing ID" - TEST_FAILED=true - exit 1 - fi - echo "" -fi - -# Test 3: Invoke deployment URL and capture session ID -echo "Test 3: Invoke deployment and capture session..." -if [ -z "$DEPLOYMENT_ID" ]; then - echo -e "${YELLOW}⚠${NC} No deployment ID to invoke, skipping session tests" -else - # Extract deployment URL from deploy output (look for https://*.agentuity.run) - DEPLOYMENT_URL=$(grep -oE 'https://[a-zA-Z0-9_.-]+\.agentuity\.(run|io)' "$DEPLOY_OUTPUT" | head -1 || echo "") - - if [ -z "$DEPLOYMENT_URL" ]; then - echo -e "${YELLOW}⚠${NC} Could not extract deployment URL from output" - else - echo "Deployment URL: $DEPLOYMENT_URL" - - # Test 3b: Fetch HTML page and verify CDN assets and analytics beacon - echo "" - echo "Test 3b: Verify CDN asset URLs and analytics beacon..." - HTML_OUTPUT="$TEMP_DIR/html-page.txt" - set +e - curl -s "$DEPLOYMENT_URL/" > "$HTML_OUTPUT" 2>&1 - HTML_EXIT=$? - set -e - - if [ $HTML_EXIT -eq 0 ]; then - # 3b-i: Verify beacon script is present with CDN URL (not dev fallback) - if grep -q "data-agentuity-beacon" "$HTML_OUTPUT"; then - echo -e "${GREEN}✓${NC} Analytics beacon marker (data-agentuity-beacon) found in HTML" - else - echo -e "${RED}✗${NC} Analytics beacon marker (data-agentuity-beacon) not found in HTML" - echo "HTML content (first 2000 chars):" - head -c 2000 "$HTML_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - # 3b-ii: Verify beacon src points to CDN, not dev fallback route - BEACON_SRC=$(grep -oE 'src="[^"]*agentuity-beacon[^"]*"' "$HTML_OUTPUT" | head -1 | sed 's/src="//;s/"$//' || echo "") - if [ -z "$BEACON_SRC" ]; then - echo -e "${RED}✗${NC} Could not extract beacon script src URL" - TEST_FAILED=true - exit 1 - fi - - echo "Beacon src: $BEACON_SRC" - if echo "$BEACON_SRC" | grep -q "cdn.agentuity.com"; then - echo -e "${GREEN}✓${NC} Beacon loads from CDN (cdn.agentuity.com)" - else - echo -e "${RED}✗${NC} Beacon does NOT load from CDN — got: $BEACON_SRC" - TEST_FAILED=true - exit 1 - fi - - # 3b-iii: Verify beacon is NOT using the dev fallback route - if grep -q "/_agentuity/webanalytics/analytics.js" "$HTML_OUTPUT"; then - echo -e "${RED}✗${NC} HTML contains dev-mode fallback route (/_agentuity/webanalytics/analytics.js) — should use CDN beacon" - TEST_FAILED=true - exit 1 - else - echo -e "${GREEN}✓${NC} No dev-mode fallback analytics route in HTML" - fi - - # 3b-iv: Fetch the beacon JS from CDN and verify it's accessible - echo "" - echo "Fetching beacon from CDN: $BEACON_SRC" - BEACON_FETCH_OUTPUT="$TEMP_DIR/beacon-fetch.txt" - set +e - BEACON_HTTP_CODE=$(curl -s -o "$BEACON_FETCH_OUTPUT" -w "%{http_code}" "$BEACON_SRC" 2>&1) - BEACON_FETCH_EXIT=$? - set -e - - if [ $BEACON_FETCH_EXIT -eq 0 ] && [ "$BEACON_HTTP_CODE" = "200" ]; then - echo -e "${GREEN}✓${NC} Beacon JS accessible from CDN (HTTP $BEACON_HTTP_CODE)" - else - echo -e "${RED}✗${NC} Failed to fetch beacon from CDN (HTTP $BEACON_HTTP_CODE, curl exit: $BEACON_FETCH_EXIT)" - TEST_FAILED=true - exit 1 - fi - - # Test 3c: Verify build assets (CSS/JS) load from CDN, not app origin - echo "" - echo "Test 3c: Verify build assets reference CDN..." - - # Extract CDN base URL from asset references in HTML - CDN_BASE_URL=$(grep -oE 'https://cdn\.agentuity\.com/[^"]+/client/' "$HTML_OUTPUT" | head -1 | sed 's|/$||' || echo "") - - if [ -z "$CDN_BASE_URL" ]; then - echo -e "${RED}✗${NC} No CDN asset URLs found in HTML (expected https://cdn.agentuity.com/.../client/)" - echo "Asset references found in HTML:" - grep -oE '(src|href)="[^"]*"' "$HTML_OUTPUT" || echo " (none)" - TEST_FAILED=true - exit 1 - fi - - echo "CDN Base URL: $CDN_BASE_URL" - echo -e "${GREEN}✓${NC} Build assets reference CDN" - - # 3c-i: Verify CSS asset loads from CDN (not relative /assets/ path) - CSS_URL=$(grep -oE 'href="https://cdn\.agentuity\.com/[^"]*\.css"' "$HTML_OUTPUT" | head -1 | sed 's/href="//;s/"$//' || echo "") - if [ -n "$CSS_URL" ]; then - echo "CSS asset: $CSS_URL" - set +e - CSS_HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$CSS_URL" 2>&1) - set -e - if [ "$CSS_HTTP_CODE" = "200" ]; then - echo -e "${GREEN}✓${NC} CSS asset accessible from CDN (HTTP $CSS_HTTP_CODE)" - else - echo -e "${RED}✗${NC} CSS asset not accessible from CDN (HTTP $CSS_HTTP_CODE)" - TEST_FAILED=true - exit 1 - fi - else - echo -e "${YELLOW}⚠${NC} No CSS asset found in HTML (may be expected for minimal projects)" - fi - - # 3c-ii: Verify JS asset loads from CDN - JS_URL=$(grep -oE 'src="https://cdn\.agentuity\.com/[^"]*\.js"' "$HTML_OUTPUT" | grep -v "agentuity-beacon" | head -1 | sed 's/src="//;s/"$//' || echo "") - if [ -n "$JS_URL" ]; then - echo "JS asset: $JS_URL" - set +e - JS_HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$JS_URL" 2>&1) - set -e - if [ "$JS_HTTP_CODE" = "200" ]; then - echo -e "${GREEN}✓${NC} JS asset accessible from CDN (HTTP $JS_HTTP_CODE)" - else - echo -e "${RED}✗${NC} JS asset not accessible from CDN (HTTP $JS_HTTP_CODE)" - TEST_FAILED=true - exit 1 - fi - else - echo -e "${YELLOW}⚠${NC} No JS asset found in HTML (may be expected for minimal projects)" - fi - - # 3c-iii: Verify public asset is accessible from CDN - PUBLIC_ASSET_URL="${CDN_BASE_URL}/test-asset.txt" - echo "" - echo "Fetching public asset: $PUBLIC_ASSET_URL" - - PUBLIC_ASSET_OUTPUT="$TEMP_DIR/public-asset.txt" - set +e - curl -s "$PUBLIC_ASSET_URL" > "$PUBLIC_ASSET_OUTPUT" 2>&1 - PUBLIC_ASSET_EXIT=$? - set -e - - if [ $PUBLIC_ASSET_EXIT -eq 0 ]; then - if grep -q "AGENTUITY_PUBLIC_ASSET_TEST_OK" "$PUBLIC_ASSET_OUTPUT"; then - echo -e "${GREEN}✓${NC} Public asset accessible from CDN with correct content" - else - echo -e "${YELLOW}⚠${NC} Public asset content mismatch (may not be uploaded to CDN)" - fi - else - echo -e "${YELLOW}⚠${NC} Could not fetch public asset from CDN (curl exit: $PUBLIC_ASSET_EXIT)" - fi - else - echo -e "${RED}✗${NC} Failed to fetch HTML page (curl exit: $HTML_EXIT)" - TEST_FAILED=true - exit 1 - fi - echo "" - - # Invoke the simple agent endpoint and capture session-id and x-deployment headers (with retries) - MAX_RETRIES=3 - RETRY_DELAY=5 - INVOKE_SUCCESS=false - - for attempt in $(seq 1 $MAX_RETRIES); do - if [ $attempt -gt 1 ]; then - echo "Retrying in ${RETRY_DELAY}s... (attempt $attempt/$MAX_RETRIES)" - sleep $RETRY_DELAY - fi - - set +e - RESPONSE=$(curl -s -i -X POST "$DEPLOYMENT_URL/agent/simple" \ - -H "Content-Type: application/json" \ - -d '{"name":"TestUser","age":30}' 2>&1) - INVOKE_EXIT=$? - set -e - - # Debug output - echo "Curl exit code: $INVOKE_EXIT" - - # Check if curl succeeded - if [ $INVOKE_EXIT -eq 0 ]; then - # Check if response is not an error page (look for HTTP 200) - if echo "$RESPONSE" | head -1 | grep -q "HTTP/2 200"; then - INVOKE_SUCCESS=true - break - else - HTTP_STATUS=$(echo "$RESPONSE" | head -1) - echo -e "${YELLOW}⚠${NC} Received non-200 response: $HTTP_STATUS" - if [ $attempt -eq $MAX_RETRIES ]; then - echo "Response body (first 500 chars):" - echo "$RESPONSE" | tail -c 500 - fi - fi - else - echo -e "${YELLOW}⚠${NC} Curl failed with exit code: $INVOKE_EXIT" - if [ $attempt -eq $MAX_RETRIES ]; then - echo "Response: $RESPONSE" - fi - fi - done - - # Check if any attempt succeeded - if [ "$INVOKE_SUCCESS" = false ]; then - # FIXME: Deployment sometimes returns 500 errors after provisioning - # This needs to be investigated and fixed on the backend - # For now, skip session tests instead of failing the entire test suite - echo -e "${YELLOW}⚠${NC} Failed to invoke deployment after $MAX_RETRIES attempts (skipping session tests)" - echo "FIXME: Investigation needed for transient 500 errors after deployment" - fi - - # Try to extract session ID from x-session-id header - SESSION_ID=$(echo "$RESPONSE" | grep -i "x-session-id:" | awk '{print $2}' | tr -d '\r\n' || echo "") - - # If SESSION_ID doesn't have sess_ prefix, add it - if [ -n "$SESSION_ID" ] && [[ ! "$SESSION_ID" =~ ^sess_ ]]; then - SESSION_ID="sess_$SESSION_ID" - fi - - # Extract x-deployment header - X_DEPLOYMENT=$(echo "$RESPONSE" | grep -i "x-deployment:" | awk '{print $2}' | tr -d '\r\n' || echo "") - set -e - - # Debug output - echo "Session ID extracted: ${SESSION_ID:-}" - echo "X-Deployment extracted: ${X_DEPLOYMENT:-}" - - # Only validate headers if invoke succeeded - if [ "$INVOKE_SUCCESS" = true ]; then - # Verify both headers are present - if [ -z "$SESSION_ID" ]; then - echo -e "${RED}✗${NC} x-session-id header not found in response" - echo "Response headers:" - echo "$RESPONSE" | head -20 - TEST_FAILED=true - exit 1 - fi - - if [ -z "$X_DEPLOYMENT" ]; then - echo -e "${RED}✗${NC} x-deployment header not found in response" - echo "Response headers:" - echo "$RESPONSE" | head -20 - TEST_FAILED=true - exit 1 - fi - fi - - if [ "$INVOKE_SUCCESS" = true ] && [ -n "$SESSION_ID" ]; then - echo -e "${GREEN}✓${NC} Deployment invoked successfully" - echo "Session ID: $SESSION_ID" - - # Verify x-deployment header matches our deployment - if [ -n "$X_DEPLOYMENT" ]; then - echo "X-Deployment Header: $X_DEPLOYMENT" - if [ "$X_DEPLOYMENT" = "$DEPLOYMENT_ID" ]; then - echo -e "${GREEN}✓${NC} X-Deployment header matches deployment ID" - else - echo -e "${RED}✗${NC} X-Deployment header mismatch (expected: $DEPLOYMENT_ID, got: $X_DEPLOYMENT)" - TEST_FAILED=true - exit 1 - fi - else - echo -e "${YELLOW}⚠${NC} X-Deployment header not found in response" - fi - echo "" - - # Wait for session data to be written (async event processing) - echo "Waiting for session data to be written (up to 15 seconds)..." - SESSION_FOUND=false - for i in {1..5}; do - sleep 3 - set +e - SESSION_CHECK=$(bun "$BIN_SCRIPT" cloud session get "$SESSION_ID" 2>&1) - SESSION_CHECK_EXIT=$? - set -e - - if [ $SESSION_CHECK_EXIT -eq 0 ]; then - SESSION_FOUND=true - break - fi - echo " Attempt $i/5: Session not found yet, retrying..." - done - - if [ "$SESSION_FOUND" = false ]; then - echo -e "${YELLOW}⚠${NC} Session not found after 15 seconds (async event may still be processing)" - echo "Skipping remaining session tests..." - else - echo -e "${GREEN}✓${NC} Session found in database" - echo "" - - # Test 3a: Get session details - echo "Test 3a: Get session details..." - SESSION_GET_OUTPUT="$TEMP_DIR/session-get.txt" - set +e - bun "$BIN_SCRIPT" cloud session get "$SESSION_ID" > "$SESSION_GET_OUTPUT" 2>&1 - SESSION_GET_EXIT=$? - set -e - - if [ $SESSION_GET_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Session get command failed" - cat "$SESSION_GET_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} Session get command succeeded" - cat "$SESSION_GET_OUTPUT" - - # Verify session ID matches - if grep -q "$SESSION_ID" "$SESSION_GET_OUTPUT"; then - echo -e "${GREEN}✓${NC} Session details contain correct ID" - else - echo -e "${RED}✗${NC} Session details missing ID" - TEST_FAILED=true - exit 1 - fi - echo "" - - # Test 3b: List sessions and verify our session appears - echo "Test 3b: List sessions..." - SESSION_LIST_OUTPUT="$TEMP_DIR/session-list.txt" - set +e - bun "$BIN_SCRIPT" cloud session list --count 20 > "$SESSION_LIST_OUTPUT" 2>&1 - SESSION_LIST_EXIT=$? - set -e - - if [ $SESSION_LIST_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Session list command failed" - cat "$SESSION_LIST_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} Session list command succeeded" - cat "$SESSION_LIST_OUTPUT" - - # Verify our session appears in the list - if grep -q "$SESSION_ID" "$SESSION_LIST_OUTPUT"; then - echo -e "${GREEN}✓${NC} Session $SESSION_ID appears in list" - else - echo -e "${YELLOW}⚠${NC} Session $SESSION_ID not found in list" - fi - echo "" - - # Test 3d: List sessions with filters - echo "Test 3d: Test session filters..." - - # Test success filter - SESSION_SUCCESS_OUTPUT="$TEMP_DIR/session-success.txt" - set +e - bun "$BIN_SCRIPT" cloud session list --count 5 --success > "$SESSION_SUCCESS_OUTPUT" 2>&1 - SUCCESS_FILTER_EXIT=$? - set -e - - if [ $SUCCESS_FILTER_EXIT -eq 0 ]; then - echo -e "${GREEN}✓${NC} Success filter works" - else - echo -e "${RED}✗${NC} Success filter failed" - cat "$SESSION_SUCCESS_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - # Test trigger filter - SESSION_TRIGGER_OUTPUT="$TEMP_DIR/session-trigger.txt" - set +e - bun "$BIN_SCRIPT" cloud session list --count 5 --trigger api > "$SESSION_TRIGGER_OUTPUT" 2>&1 - TRIGGER_FILTER_EXIT=$? - set -e - - if [ $TRIGGER_FILTER_EXIT -eq 0 ]; then - echo -e "${GREEN}✓${NC} Trigger filter works" - else - echo -e "${RED}✗${NC} Trigger filter failed" - cat "$SESSION_TRIGGER_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - # Test project filter (from directory context) - SESSION_PROJECT_OUTPUT="$TEMP_DIR/session-project.txt" - set +e - bun "$BIN_SCRIPT" cloud session list --count 5 > "$SESSION_PROJECT_OUTPUT" 2>&1 - PROJECT_FILTER_EXIT=$? - set -e - - if [ $PROJECT_FILTER_EXIT -eq 0 ]; then - echo -e "${GREEN}✓${NC} Project context filter works" - else - echo -e "${RED}✗${NC} Project context filter failed" - cat "$SESSION_PROJECT_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} All session filters validated" - echo "" - - # Test 3e: Get session logs - echo "Test 3e: Get session logs..." - SESSION_LOGS_OUTPUT="$TEMP_DIR/session-logs.txt" - set +e - bun "$BIN_SCRIPT" cloud session logs "$SESSION_ID" > "$SESSION_LOGS_OUTPUT" 2>&1 - SESSION_LOGS_EXIT=$? - set -e - - if [ $SESSION_LOGS_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Session logs command failed" - cat "$SESSION_LOGS_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} Session logs command succeeded" - cat "$SESSION_LOGS_OUTPUT" - echo "" - fi - else - echo -e "${YELLOW}⚠${NC} Skipping session tests due to deployment invoke failure" - fi - fi -fi - -# Test 4: List deployments again (should show the new deployment) -echo "Test 4: List deployments (after deploy)..." -DEPLOYMENT_LIST_OUTPUT2="$TEMP_DIR/deployment-list2.txt" -bun "$BIN_SCRIPT" cloud deployment list > "$DEPLOYMENT_LIST_OUTPUT2" 2>&1 - -if [ $? -ne 0 ]; then - echo -e "${RED}✗${NC} Deployment list command failed" - cat "$DEPLOYMENT_LIST_OUTPUT2" - TEST_FAILED=true - exit 1 -fi - -echo -e "${GREEN}✓${NC} Deployment list shows deployments" -cat "$DEPLOYMENT_LIST_OUTPUT2" -echo "" - -# Verify the deployment appears in the list -if [ -n "$DEPLOYMENT_ID" ]; then - if grep -q "$DEPLOYMENT_ID" "$DEPLOYMENT_LIST_OUTPUT2"; then - echo -e "${GREEN}✓${NC} Deployment $DEPLOYMENT_ID appears in list" - else - echo -e "${YELLOW}⚠${NC} Deployment $DEPLOYMENT_ID not found in list" - fi - echo "" -fi - -# Test 5: Show deployment details -echo "Test 5: Show deployment details..." -if [ -z "$DEPLOYMENT_ID" ]; then - echo -e "${YELLOW}⚠${NC} No deployment ID to show, skipping" -else - SHOW_OUTPUT="$TEMP_DIR/show.txt" - set +e - bun "$BIN_SCRIPT" cloud deployment show "$DEPLOYMENT_ID" > "$SHOW_OUTPUT" 2>&1 - SHOW_EXIT=$? - set -e - - if [ $SHOW_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Show deployment command failed" - cat "$SHOW_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} Show deployment command succeeded" - cat "$SHOW_OUTPUT" - - # Verify the output contains the deployment ID - if grep -q "$DEPLOYMENT_ID" "$SHOW_OUTPUT"; then - echo -e "${GREEN}✓${NC} Deployment details contain correct ID" - else - echo -e "${RED}✗${NC} Deployment details missing ID" - TEST_FAILED=true - exit 1 - fi -fi -echo "" - -# Test 6: Deploy a second time to test rollback -echo "Test 6: Deploy second time (for rollback test)..." -DEPLOY_OUTPUT2="$TEMP_DIR/deploy2.txt" -echo "Running second deploy..." -echo "" - -set +e -bun "$BIN_SCRIPT" cloud deploy > "$DEPLOY_OUTPUT2" 2>&1 -DEPLOY_EXIT2=$? -set -e - -if [ $DEPLOY_EXIT2 -ne 0 ]; then - echo -e "${RED}✗${NC} Second deploy command failed" - cat "$DEPLOY_OUTPUT2" - TEST_FAILED=true - exit 1 -fi - -echo -e "${GREEN}✓${NC} Second deploy command succeeded" -cat "$DEPLOY_OUTPUT2" -echo "" - -# Extract second deployment ID -DEPLOYMENT_ID2=$(grep -oE 'deploy_[a-zA-Z0-9]+' "$DEPLOY_OUTPUT2" | head -1 || echo "") -if [ -z "$DEPLOYMENT_ID2" ]; then - echo -e "${YELLOW}⚠${NC} Could not extract second deployment ID from output" -else - echo "Second Deployment ID: $DEPLOYMENT_ID2" -fi -echo "" - -# Test 7: Rollback to previous deployment -echo "Test 7: Rollback deployment..." -ROLLBACK_OUTPUT="$TEMP_DIR/rollback.txt" - -# We need to answer 'y' to the confirmation prompt -set +e -echo "y" | bun "$BIN_SCRIPT" cloud deployment rollback > "$ROLLBACK_OUTPUT" 2>&1 -ROLLBACK_EXIT=$? -set -e - -if [ $ROLLBACK_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Rollback command failed" - cat "$ROLLBACK_OUTPUT" - TEST_FAILED=true - exit 1 -fi - -echo -e "${GREEN}✓${NC} Rollback command succeeded" -cat "$ROLLBACK_OUTPUT" -echo "" - -# Verify rollback worked by checking active deployment -DEPLOYMENT_LIST_OUTPUT3="$TEMP_DIR/deployment-list3.txt" -bun "$BIN_SCRIPT" cloud deployment list > "$DEPLOYMENT_LIST_OUTPUT3" 2>&1 - -if [ -n "$DEPLOYMENT_ID" ]; then - # Check if first deployment is now active - if grep "$DEPLOYMENT_ID" "$DEPLOYMENT_LIST_OUTPUT3" | grep -q "Yes"; then - echo -e "${GREEN}✓${NC} Rollback successful - first deployment is active again" - else - echo -e "${YELLOW}⚠${NC} Could not verify rollback (first deployment may not be active)" - fi -fi -echo "" - -# Test 8: Remove a specific deployment -echo "Test 8: Remove specific deployment..." -if [ -z "$DEPLOYMENT_ID2" ]; then - echo -e "${YELLOW}⚠${NC} No second deployment ID to remove, skipping" -else - REMOVE_OUTPUT="$TEMP_DIR/remove.txt" - - set +e - bun "$BIN_SCRIPT" cloud deployment remove "$DEPLOYMENT_ID2" --force > "$REMOVE_OUTPUT" 2>&1 - REMOVE_EXIT=$? - set -e - - if [ $REMOVE_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Remove deployment command failed" - cat "$REMOVE_OUTPUT" - TEST_FAILED=true - exit 1 - fi - - echo -e "${GREEN}✓${NC} Remove deployment command succeeded" - cat "$REMOVE_OUTPUT" - echo "" -fi - -# Test 9: Undeploy (with --force to skip confirmation) -echo "Test 9: Undeploy..." -UNDEPLOY_OUTPUT="$TEMP_DIR/undeploy.txt" - -set +e -bun "$BIN_SCRIPT" cloud deployment undeploy --force > "$UNDEPLOY_OUTPUT" 2>&1 -UNDEPLOY_EXIT=$? -set -e - -if [ $UNDEPLOY_EXIT -ne 0 ]; then - echo -e "${RED}✗${NC} Undeploy command failed" - cat "$UNDEPLOY_OUTPUT" - TEST_FAILED=true - exit 1 -fi - -echo -e "${GREEN}✓${NC} Undeploy command succeeded" -cat "$UNDEPLOY_OUTPUT" -echo "" - -# Test 10: Verify undeploy worked -echo "Test 10: Verify undeploy..." -sleep 2 # Give the system time to process the undeploy - -DEPLOYMENT_LIST_OUTPUT4="$TEMP_DIR/deployment-list4.txt" -set +e -bun "$BIN_SCRIPT" cloud deployment list > "$DEPLOYMENT_LIST_OUTPUT4" 2>&1 -LIST_EXIT=$? -set -e - -if [ $LIST_EXIT -eq 0 ]; then - echo -e "${GREEN}✓${NC} Deployment list after undeploy" - cat "$DEPLOYMENT_LIST_OUTPUT4" - - # Check if the deployment is marked as inactive (Active column should show "No" or be blank) - if [ -n "$DEPLOYMENT_ID" ]; then - if grep "$DEPLOYMENT_ID" "$DEPLOYMENT_LIST_OUTPUT4" | grep -q "Yes"; then - echo -e "${RED}✗${NC} Deployment $DEPLOYMENT_ID is still marked as active!" - TEST_FAILED=true - exit 1 - else - echo -e "${GREEN}✓${NC} Deployment $DEPLOYMENT_ID is no longer active" - fi - fi - - # Verify that no deployment has the "latest" tag after undeploy - if grep -q "latest" "$DEPLOYMENT_LIST_OUTPUT4"; then - echo -e "${RED}✗${NC} 'latest' tag still exists after undeploy!" - TEST_FAILED=true - exit 1 - else - echo -e "${GREEN}✓${NC} 'latest' tag successfully removed after undeploy" - fi -else - echo -e "${YELLOW}⚠${NC} Deployment list command returned non-zero (may be expected after undeploy)" -fi -echo "" - -# Summary -echo "=========================================" -echo -e "${GREEN}✓ All deployment tests passed!${NC}" -echo "=========================================" -echo "" -echo "Tests completed:" -echo " ✓ List deployments" -echo " ✓ Deploy project (first deployment)" -echo " ✓ Verify analytics beacon loads from CDN (not dev fallback)" -echo " ✓ Verify build assets (CSS/JS) reference CDN URLs" -echo " ✓ Verify beacon JS accessible from CDN" -echo " ✓ Invoke deployment and capture session" -echo " ✓ Get session details" -echo " ✓ List sessions" -echo " ✓ Test session filters (success, trigger, project)" -echo " ✓ Get session logs" -echo " ✓ Verify deployment in list" -echo " ✓ Show deployment details" -echo " ✓ Deploy project (second deployment)" -echo " ✓ Rollback to previous deployment" -echo " ✓ Remove specific deployment" -echo " ✓ Undeploy project" -echo " ✓ Verify undeploy" -echo "" diff --git a/apps/testing/cloud-deployment/scripts/test-lib.sh b/apps/testing/cloud-deployment/scripts/test-lib.sh deleted file mode 100755 index 7ceb464b9..000000000 --- a/apps/testing/cloud-deployment/scripts/test-lib.sh +++ /dev/null @@ -1,315 +0,0 @@ -#!/bin/bash - -# Shared test library functions -# Source this file from test scripts to reuse common functionality - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -CLI_BIN_DIR="$(cd $SCRIPT_DIR/../../../../packages/cli/bin && pwd)" -LOCAL_CLI=$CLI_BIN_DIR/cli.ts -AGENTUITY_REGION=${AGENTUITY_REGION:-usc} - -profile=$(bun $CLI_BIN_DIR/cli.ts profile current) -if [ "$profile" = "local" ]; -then - AGENTUITY_REGION="local" -fi - -export AGENTUITY_REGION - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Default port -PORT="${PORT:-3500}" - -# Create temp directory using cross-platform approach -# TMPDIR is set on macOS, use /tmp as fallback for Linux -TEMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/agentuity-test.XXXXXX") - -# Track if we started the server -SERVER_STARTED=false -SERVER_PID="" -LOG_TAIL_PID="" - -# Enable verbose mode automatically in CI -VERBOSE="${VERBOSE:-false}" -if [ "$CI" = "true" ]; then - VERBOSE="true" -fi - -# Track if any errors occurred -TEST_FAILED=false - -# Cleanup function -cleanup() { - local exit_code=$? - echo "" 2>/dev/null || true - echo "Cleaning up..." 2>/dev/null || true - - # Stop log tail if running - if [ -n "$LOG_TAIL_PID" ]; then - kill "$LOG_TAIL_PID" 2>/dev/null || true - wait "$LOG_TAIL_PID" 2>/dev/null || true - fi - - # Dump server logs on failure - if [ $exit_code -ne 0 ] || [ "$TEST_FAILED" = true ]; then - if [ -n "$LOG_FILE" ] && [ -f "$LOG_FILE" ]; then - echo "" - echo -e "${RED}═══════════════════════════════════════════${NC}" - echo -e "${RED} Test Failed - Server Logs (last 100 lines)${NC}" - echo -e "${RED}═══════════════════════════════════════════${NC}" - tail -n 100 "$LOG_FILE" - echo -e "${RED}═══════════════════════════════════════════${NC}" - echo "" - fi - fi - - # Remove temp directory if set - if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then - rm -rf "$TEMP_DIR" - fi - - # Stop server if we started it - if [ "$SERVER_STARTED" = true ] && [ -n "$SERVER_PID" ]; then - echo "Stopping test server (PID: $SERVER_PID)..." - # Kill gravity processes first (they may be holding the port) - pkill -9 -f gravity 2>/dev/null || true - # Kill the server process - kill "$SERVER_PID" 2>/dev/null || true - wait "$SERVER_PID" 2>/dev/null || true - # Force kill any remaining processes on the port (cross-platform) - if command -v lsof &> /dev/null; then - lsof -ti:$PORT | xargs kill -9 2>/dev/null || true - elif command -v fuser &> /dev/null; then - fuser -k $PORT/tcp 2>/dev/null || true - fi - echo -e "${GREEN}✓${NC} Server stopped" - fi -} - -# Kill a process by PID with graceful shutdown -# Usage: kill_process PID [TIMEOUT_SECONDS] -kill_process() { - local pid=$1 - local timeout=${2:-5} - - if [ -z "$pid" ]; then - return - fi - - # Check if process exists - if ! kill -0 "$pid" 2>/dev/null; then - return - fi - - echo "Killing process (PID: $pid)..." - - # Try graceful shutdown with SIGTERM - kill -TERM "$pid" 2>/dev/null || true - - # Wait for graceful shutdown - local elapsed=0 - while [ $elapsed -lt $timeout ]; do - if ! kill -0 "$pid" 2>/dev/null; then - echo "Process terminated gracefully" - return - fi - sleep 1 - elapsed=$((elapsed + 1)) - done - - # Force kill if still running - echo "Process did not terminate gracefully, forcing..." - kill -9 "$pid" 2>/dev/null || true - sleep 1 - - if kill -0 "$pid" 2>/dev/null; then - echo -e "${YELLOW}Warning:${NC} Process $pid may still be running" - else - echo "Process killed" - fi -} - -# Check if server is already running -check_server() { - local code - code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$PORT/_health 2>/dev/null) - if [ $? -eq 0 ] && [ "$code" = "200" ]; then - echo "$code" - else - echo "000" - fi -} - -# Wait for server to be ready -wait_for_server() { - local max_attempts=30 - local attempt=0 - - echo "Waiting for server to be ready..." - while [ $attempt -lt $max_attempts ]; do - if [ "$(check_server)" != "000" ]; then - echo -e "${GREEN}✓${NC} Server is ready" - return 0 - fi - attempt=$((attempt + 1)) - sleep 1 - echo -n "." - done - - echo "" - echo -e "${RED}✗${NC} Server failed to start within 30 seconds" - return 1 -} - -# Start server if not already running -# Usage: start_server_if_needed -start_server_if_needed() { - echo "Checking if server is running on port $PORT..." - if [ "$(check_server)" != "000" ]; then - echo -e "${YELLOW}ℹ${NC} Server is already running" - else - echo "Starting test server..." - - # Get the original test-app directory (script is in test-app/scripts/) - ORIGINAL_DIR="$(cd "$(dirname "$0")/.." && pwd)" - - # Get current profile to determine which env file to use - CURRENT_PROFILE=$(bun $LOCAL_CLI profile current) - - # Check for profile-specific env file logic - # Only use .env.local if profile is "local", otherwise use .env - if [[ "$CURRENT_PROFILE" == "local" && -f "$ORIGINAL_DIR/.env.local" && -z "$CI" ]]; then - ENV_FILE="$ORIGINAL_DIR/.env.local" - USE_DEV_MODE="${USE_DEV_MODE:-true}" - echo "[TEST-LIB] Using .env file: $ENV_FILE (profile: $CURRENT_PROFILE)" - elif [ -f "$ORIGINAL_DIR/.env" ]; then - ENV_FILE="$ORIGINAL_DIR/.env" - echo "[TEST-LIB] Using .env file: $ENV_FILE (profile: $CURRENT_PROFILE)" - else - echo -e "${RED}✗${NC} No .env file found in $ORIGINAL_DIR" - if [ "$CURRENT_PROFILE" == "local" ]; then - echo "Please create .env.local with AGENTUITY_SDK_KEY for profile=local" - else - echo "Please create .env with AGENTUITY_SDK_KEY (current profile: $CURRENT_PROFILE)" - fi - exit 1 - fi - - # Log which SDK key is being used - if [ -f "$ENV_FILE" ]; then - SDK_KEY=$(grep "^AGENTUITY_SDK_KEY=" "$ENV_FILE" | cut -d= -f2-) - if [ -n "$SDK_KEY" ]; then - echo "[TEST-LIB] AGENTUITY_SDK_KEY from $ENV_FILE: ${SDK_KEY:0:10}..." - else - echo "[TEST-LIB] WARNING: No AGENTUITY_SDK_KEY found in $ENV_FILE" - fi - fi - - # Determine which build directory to use based on ISOLATED_BUILD and PORT - if [ -n "$ISOLATED_BUILD" ] && [ -n "$TEST_BUILD_ROOT" ]; then - # Use port-specific build directory from /tmp (build-3500, build-3501, etc.) - BUILD_DIR="$TEST_BUILD_ROOT/build-$PORT" - if [ ! -f "$BUILD_DIR/app.js" ]; then - echo -e "${RED}✗${NC} Built app not found at $BUILD_DIR/app.js" - echo "Please run build script to create port-specific builds" - exit 1 - fi - # Isolated builds should always use pre-built app, not dev mode - USE_DEV_MODE=false - echo "Using isolated build directory: $BUILD_DIR" - echo "Using env file: $ENV_FILE" - else - BUILD_DIR="$ORIGINAL_DIR/.agentuity" - if ! cd "$ORIGINAL_DIR"; then - echo -e "${RED}✗${NC} Failed to change directory to $ORIGINAL_DIR" - exit 1 - fi - fi - - echo "Using PORT: $PORT" - echo "Using ENV_FILE: $ENV_FILE" - - # Start server in background, redirecting output to temp log - LOG_FILE="$TEMP_DIR/server.log" - - # Check if we should use dev mode (for hot reload tests) or built app - if [ "$USE_DEV_MODE" = "true" ]; then - # Use dev command (with file watching and rebuilding) - echo "Starting in dev mode with hot reload..." - env bun run --env-file $ENV_FILE dev -- --no-public --port $PORT > "$LOG_FILE" 2>&1 & - else - # Run the pre-built app directly (--dev build has config baked in) - echo "Running pre-built app from $BUILD_DIR..." - echo "Command: NODE_ENV=production PORT=$PORT bun --env-file=$ENV_FILE $BUILD_DIR/app.js" - NODE_ENV=production PORT=$PORT bun --env-file=$ENV_FILE "$BUILD_DIR/app.js" > "$LOG_FILE" 2>&1 & - fi - - SERVER_PID=$! - SERVER_STARTED=true - - echo "Server starting on port $PORT (PID: $SERVER_PID, log: $LOG_FILE)..." - - # In verbose mode (CI or VERBOSE=true), tail logs in real-time - if [ "$VERBOSE" = "true" ]; then - echo "" - echo -e "${BLUE}═══════════════════════════════════════════${NC}" - echo -e "${BLUE} Real-time Server Logs (verbose mode)${NC}" - echo -e "${BLUE}═══════════════════════════════════════════${NC}" - tail -f "$LOG_FILE" & - LOG_TAIL_PID=$! - echo "" - fi - - # Wait for server to be ready - if ! wait_for_server; then - TEST_FAILED=true - echo "Server logs:" - cat "$LOG_FILE" - exit 1 - fi - fi - echo "" -} - -# Cross-platform SHA256 hash calculation -# Tries sha256sum (Linux) first, falls back to shasum (macOS) -sha256() { - if command -v sha256sum &> /dev/null; then - sha256sum | awk '{print $1}' - elif command -v shasum &> /dev/null; then - shasum -a 256 | awk '{print $1}' - else - echo "Error: Neither sha256sum nor shasum found" >&2 - return 1 - fi -} - -# Cross-platform base64 decode -# Tries different base64 decode flags: --decode (Linux), -d (macOS/Linux), -D (some systems) -b64decode() { - if base64 --decode <<< "" &> /dev/null 2>&1; then - base64 --decode - elif base64 -d <<< "" &> /dev/null 2>&1; then - base64 -d - elif base64 -D <<< "" &> /dev/null 2>&1; then - base64 -D - else - echo "Error: No compatible base64 decode option found" >&2 - return 1 - fi -} - -# Print test result message -print_result() { - if [ "$SERVER_STARTED" = true ]; then - echo -e "${YELLOW}Note:${NC} Server was started by this script and will be stopped on exit" - else - echo -e "${YELLOW}Note:${NC} Server was already running and will remain running" - fi -} diff --git a/apps/testing/cloud-deployment/src/agent/simple/agent.ts b/apps/testing/cloud-deployment/src/agent/simple/agent.ts deleted file mode 100644 index ac2143c65..000000000 --- a/apps/testing/cloud-deployment/src/agent/simple/agent.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -/** - * Simple agent for deployment testing - * Returns a greeting with the provided name and age - */ -const agent = createAgent('simple', { - description: 'A simple test agent that returns a greeting', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (_ctx, input) => { - return { - message: `Hello ${input.name}, you are ${input.age} years old!`, - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; diff --git a/apps/testing/cloud-deployment/src/generated/AGENTS.md b/apps/testing/cloud-deployment/src/generated/AGENTS.md deleted file mode 100644 index 8c9d8864a..000000000 --- a/apps/testing/cloud-deployment/src/generated/AGENTS.md +++ /dev/null @@ -1,23 +0,0 @@ -# AI Agent Instructions - -**CRITICAL:** Files in this directory are AUTO-GENERATED by the Agentuity build system. - -## Rules for AI Agents - -1. ❌ NEVER edit files in `src/generated/` -2. ❌ NEVER include `src/generated/` files in context when analyzing code -3. ❌ NEVER suggest changes to generated files -4. ✅ Ignore this directory when searching for user code -5. ✅ Direct users to modify source files in `src/agent/`, `src/api/`, `app.ts`, or `.env` files - -## What Gets Generated - -- `registry.ts` - Built from agent discovery in `src/agent/` -- `app.ts` - Entry point assembled from project configuration -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state) - -These files are regenerated on every `bun run build` or `bun run dev`. diff --git a/apps/testing/cloud-deployment/src/generated/README.md b/apps/testing/cloud-deployment/src/generated/README.md deleted file mode 100644 index 3f5928ce0..000000000 --- a/apps/testing/cloud-deployment/src/generated/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Generated Files - DO NOT EDIT - -This directory contains auto-generated TypeScript files created by the Agentuity build system. - -**These files are regenerated on every build.** Any manual changes will be overwritten. - -## Generated Files - -- `registry.ts` - Agent registry from `src/agent/**` -- `app.ts` - Application entry point -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state in `app.ts`) - -## Environment Variable Types - -The `env.d.ts` file provides TypeScript intellisense for your environment variables: - -- **ProcessEnv**: All variables from your `.env` files are typed as `string` -- **ImportMetaEnv**: Only `VITE_*`, `AGENTUITY_PUBLIC_*`, and `PUBLIC_*` prefixed variables (for client-side use) - -Files are merged based on build mode: -- **Development**: `.env.{profile}` → `.env.development` → `.env` (later files override) -- **Production**: `.env.{profile}` → `.env` → `.env.production` (later files override) - -## For Developers - -Do not modify these files. Instead: -- Add/modify agents in `src/agent/` -- Add/modify routes in `src/api/` -- Configure app in `app.ts` -- Add environment variables to `.env` files - -These files ARE version controlled to enable better tooling and type checking. diff --git a/apps/testing/cloud-deployment/src/generated/env.d.ts b/apps/testing/cloud-deployment/src/generated/env.d.ts deleted file mode 100644 index 95eb7de99..000000000 --- a/apps/testing/cloud-deployment/src/generated/env.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -// @generated -// AUTO-GENERATED from local .env files -// This file is auto-generated by the build tool - do not edit manually - -declare global { - namespace NodeJS { - interface ProcessEnv { - readonly AGENTUITY_PUBLIC_TEST_URL: string; - readonly AGENTUITY_SDK_KEY: string; - readonly MY_TEST_SECRET_KEY: string; - readonly PUBLIC_TEST_ENDPOINT: string; - readonly TEST_DATABASE_URL: string; - readonly VITE_TEST_API_URL: string; - } - } -} - -// Vite-compatible environment types -// Only includes variables with VITE_, AGENTUITY_PUBLIC_, or PUBLIC_ prefix -interface ImportMetaEnv { - readonly AGENTUITY_PUBLIC_TEST_URL: string; - readonly PUBLIC_TEST_ENDPOINT: string; - readonly VITE_TEST_API_URL: string; -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} - -export {}; - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! diff --git a/apps/testing/cloud-deployment/src/web/App.tsx b/apps/testing/cloud-deployment/src/web/App.tsx deleted file mode 100644 index 9ccdfe7aa..000000000 --- a/apps/testing/cloud-deployment/src/web/App.tsx +++ /dev/null @@ -1,77 +0,0 @@ -export function App() { - return ( -
-

Cloud Deployment Test

-

This page is used to verify analytics beacon injection in production deployments.

-
-

Analytics Status

-

Checking analytics config...

-

Checking beacon script...

-

Checking public asset...

-
- + +`); +}); + +const port = parseInt(process.env.PORT || '3000', 10); + +export default { + port, + fetch: app.fetch, +}; diff --git a/apps/testing/e2e-web/src/web/AnalyticsTestPage.tsx b/apps/testing/e2e-web/src/web/AnalyticsTestPage.tsx deleted file mode 100644 index 200aae429..000000000 --- a/apps/testing/e2e-web/src/web/AnalyticsTestPage.tsx +++ /dev/null @@ -1,275 +0,0 @@ -import { useEffect, useRef, useState } from 'react'; - -// Window.__AGENTUITY_ANALYTICS__ type is declared in @agentuity/frontend/analytics/types - -interface TestResult { - name: string; - status: 'pending' | 'pass' | 'fail'; - message?: string; -} - -export function AnalyticsTestPage() { - const [results, setResults] = useState([]); - const [consoleMessages, setConsoleMessages] = useState([]); - const originalDebugRef = useRef(null); - - const updateResult = (name: string, status: 'pass' | 'fail', message?: string) => { - setResults((prev) => prev.map((r) => (r.name === name ? { ...r, status, message } : r))); - }; - - const runTests = async () => { - const tests: TestResult[] = [ - { name: 'Analytics config injected', status: 'pending' }, - { name: 'Analytics enabled', status: 'pending' }, - { name: 'Dev mode detected', status: 'pending' }, - { name: 'Beacon API available', status: 'pending' }, - { name: 'Pageview event logged', status: 'pending' }, - { name: 'Custom event logged', status: 'pending' }, - { name: 'Click tracking works', status: 'pending' }, - ]; - setResults(tests); - setConsoleMessages([]); - - // Intercept console.debug to capture analytics logs - originalDebugRef.current = console.debug; - const capturedLogs: string[] = []; - console.debug = (...args: unknown[]) => { - const msg = args.map((a) => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '); - if (msg.includes('Agentuity Analytics')) { - capturedLogs.push(msg); - setConsoleMessages((prev) => [...prev, msg]); - } - originalDebugRef.current?.apply(console, args); - }; - - // Test 1: Analytics config injected - await new Promise((r) => setTimeout(r, 100)); - const config = window.__AGENTUITY_ANALYTICS__; - if (config) { - updateResult( - 'Analytics config injected', - 'pass', - `Found config with orgId: ${config.orgId || '(empty)'}` - ); - } else { - updateResult( - 'Analytics config injected', - 'fail', - 'window.__AGENTUITY_ANALYTICS__ not found' - ); - } - - // Test 2: Analytics enabled - if (config?.enabled) { - updateResult('Analytics enabled', 'pass'); - } else { - updateResult('Analytics enabled', 'fail', 'enabled=false or config missing'); - } - - // Test 3: Dev mode detected - if (config?.isDevmode) { - updateResult('Dev mode detected', 'pass', 'isDevmode=true (logs to console)'); - } else { - updateResult('Dev mode detected', 'fail', 'isDevmode=false (would send to server)'); - } - - // Test 4: Beacon API available - const beaconApi = window.agentuityAnalytics; - if (beaconApi && typeof beaconApi.track === 'function') { - updateResult('Beacon API available', 'pass', 'window.agentuityAnalytics.track() exists'); - } else { - updateResult('Beacon API available', 'fail', 'window.agentuityAnalytics not found'); - } - - // Test 5: Check for pageview event (should have fired on page load) - await new Promise((r) => setTimeout(r, 500)); - const hasPageview = capturedLogs.some((log) => log.includes('pageview')); - if (hasPageview) { - updateResult('Pageview event logged', 'pass', 'Found pageview in console'); - } else { - updateResult('Pageview event logged', 'fail', 'No pageview event found in console'); - } - - // Test 6: Custom event - if (beaconApi) { - beaconApi.track('test_custom_event', { testProp: 'testValue' }); - beaconApi.flush(); - await new Promise((r) => setTimeout(r, 200)); - const hasCustom = capturedLogs.some((log) => log.includes('test_custom_event')); - if (hasCustom) { - updateResult('Custom event logged', 'pass', 'Custom event appeared in console'); - } else { - updateResult('Custom event logged', 'fail', 'Custom event not found in console'); - } - } else { - updateResult('Custom event logged', 'fail', 'Beacon API not available'); - } - - // Test 7: Click tracking - simulate click on data-analytics element - const clickTestBtn = document.getElementById('analytics-click-test'); - if (clickTestBtn) { - clickTestBtn.click(); - await new Promise((r) => setTimeout(r, 200)); - const hasClick = capturedLogs.some( - (log) => log.includes('click') || log.includes('test_button_click') - ); - if (hasClick) { - updateResult('Click tracking works', 'pass', 'Click event logged'); - } else { - updateResult('Click tracking works', 'fail', 'Click event not found'); - } - } else { - updateResult('Click tracking works', 'fail', 'Test button not found'); - } - - // Restore console.debug - if (originalDebugRef.current) { - console.debug = originalDebugRef.current; - } - }; - - // biome-ignore lint/correctness/useExhaustiveDependencies: runTests is intentionally only called once on mount - useEffect(() => { - // Wait for analytics to initialize - const timer = setTimeout(runTests, 1000); - return () => { - clearTimeout(timer); - // Restore console.debug on unmount - if (originalDebugRef.current) { - console.debug = originalDebugRef.current; - originalDebugRef.current = null; - } - }; - }, []); - - const passCount = results.filter((r) => r.status === 'pass').length; - const failCount = results.filter((r) => r.status === 'fail').length; - const pendingCount = results.filter((r) => r.status === 'pending').length; - - return ( -
-

Analytics E2E Tests

-

- Testing that the analytics beacon loads and fires correctly in dev mode. -

- - {/* Hidden button for click tracking test */} - - - {/* Summary */} -
- ✓ {passCount} passed - ✗ {failCount} failed - ◌ {pendingCount} pending - -
- - {/* Test Results */} -
-

Test Results

- {results.map((result) => ( -
- - {result.status === 'pass' ? '✓' : result.status === 'fail' ? '✗' : '◌'} - - {result.name} - {result.message && ( - - {result.message} - - )} -
- ))} -
- - {/* Console Output */} -
-

- Console Output (Analytics Logs) -

-
-					{consoleMessages.length > 0
-						? consoleMessages.join('\n\n')
-						: '(waiting for analytics events...)'}
-				
-
- - {/* Navigation */} - -
- ); -} diff --git a/apps/testing/e2e-web/src/web/App.tsx b/apps/testing/e2e-web/src/web/App.tsx deleted file mode 100644 index 08cffb371..000000000 --- a/apps/testing/e2e-web/src/web/App.tsx +++ /dev/null @@ -1,533 +0,0 @@ -import { hc } from 'hono/client'; -import type { AppRouter } from '../api/router'; -import { type ChangeEvent, useState } from 'react'; -import { StreamsPage } from './StreamsPage'; -import { RpcPage } from './RpcPage'; -import { RpcTestPage } from './RpcTestPage'; -import { PathParamsPage } from './PathParamsPage'; -import { AnalyticsTestPage } from './AnalyticsTestPage'; -import { WebRTCTestPage } from './WebRTCTestPage'; - -const WORKBENCH_PATH = process.env.AGENTUITY_PUBLIC_WORKBENCH_PATH; - -export function App() { - // Simple client-side routing - const path = window.location.pathname; - - const client = hc(`${window.location.origin}/api`); - const [name, setName] = useState('World'); - const [greeting, setGreeting] = useState(null); - const [running, setRunning] = useState(false); - - const invoke = async (input: { name: string }) => { - setRunning(true); - try { - const res = await client.hello.$post({ json: input }); - if (!res.ok) { - throw new Error(`Request failed: ${res.status} ${res.statusText}`); - } - const data = await res.text(); - setGreeting(data); - } catch (err) { - setGreeting(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`); - } finally { - setRunning(false); - } - }; - - if (path === '/streams') { - return ; - } - - if (path === '/rpc') { - return ; - } - - if (path === '/rpc-test') { - return ; - } - - if (path === '/path-params') { - return ; - } - - if (path === '/analytics') { - return ; - } - - if (path === '/webrtc') { - return ; - } - - return ( -
-
-
- - -

Welcome to Agentuity

- -

- The Full-Stack Platform for AI Agents -

-
- -
-

- Try the Hello Agent -

- -
- ) => setName(e.currentTarget.value)} - placeholder="Enter your name" - type="text" - value={name} - /> - -
-
-
- -
-
- -
- {greeting ?? 'Waiting for request'} -
-
- -
-

Next Steps

- -
- {[ - { - key: 'customize-agent', - title: 'Customize your agent', - text: ( - <> - Edit src/agent/hello/agent.ts to change how your agent - responds. - - ), - }, - { - key: 'add-routes', - title: 'Add new API routes', - text: ( - <> - Create new files in src/web/ to expose more endpoints. - - ), - }, - { - key: 'update-frontend', - title: 'Update the frontend', - text: ( - <> - Modify src/web/App.tsx to build your custom UI. - - ), - }, - { - key: 'try-rpc', - title: ( - <> - Try{' '} - - RPC Client - - - ), - text: <>Test the new type-safe RPC client API., - }, - { - key: 'try-rpc-all', - title: ( - <> - Try{' '} - - RPC All Methods - - - ), - text: <>Test all RPC client methods (run, websocket, eventstream)., - }, - { - key: 'try-path-params', - title: ( - <> - Try{' '} - - Path & Query Params - - - ), - text: <>Test type-safe path and query parameters., - }, - { - key: 'try-analytics', - title: ( - <> - Try{' '} - - Analytics Tests - - - ), - text: <>Test analytics beacon loading and event firing., - }, - WORKBENCH_PATH - ? { - key: 'try-workbench', - title: ( - <> - Try{' '} - - Workbench - - - ), - text: <>A chat interface to test your agents in isolation., - } - : null, - ] - .filter(Boolean) - .map((step) => ( -
-
- -
- -
-

{step!.title}

-

{step!.text}

-
-
- ))} -
-
-
- - -
- ); -} diff --git a/apps/testing/e2e-web/src/web/PathParamsPage.tsx b/apps/testing/e2e-web/src/web/PathParamsPage.tsx deleted file mode 100644 index 3022de393..000000000 --- a/apps/testing/e2e-web/src/web/PathParamsPage.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import { useState } from 'react'; -import { hc } from 'hono/client'; -import type { AppRouter } from '../api/router'; - -export function PathParamsPage() { - const client = hc(`${window.location.origin}/api`); - const [userId, setUserId] = useState('123'); - const [orgId, setOrgId] = useState('org-456'); - const [memberId, setMemberId] = useState('user-789'); - const [searchQuery, setSearchQuery] = useState('test'); - const [searchLimit, setSearchLimit] = useState('5'); - - const [userResult, setUserResult] = useState(''); - const [memberResult, setMemberResult] = useState(''); - const [searchResult, setSearchResult] = useState(''); - const [error, setError] = useState(null); - - const testUserPathParam = async () => { - try { - setError(null); - const res = await client.users[':userId'].$get({ param: { userId } }); - if (!res.ok) { - throw new Error(`Request failed: ${res.status}`); - } - const result = await res.json(); - setUserResult(JSON.stringify(result, null, 2)); - } catch (err) { - setError(`User API Error: ${err instanceof Error ? err.message : String(err)}`); - } - }; - - const testMultiplePathParams = async () => { - try { - setError(null); - const res = await client.organizations[':orgId'].members[':memberId'].$get({ - param: { orgId, memberId }, - }); - if (!res.ok) { - throw new Error(`Request failed: ${res.status}`); - } - const result = await res.json(); - setMemberResult(JSON.stringify(result, null, 2)); - } catch (err) { - setError(`Member API Error: ${err instanceof Error ? err.message : String(err)}`); - } - }; - - const testQueryParams = async () => { - try { - setError(null); - const res = await client.search.$get({ query: { q: searchQuery, limit: searchLimit } }); - if (!res.ok) { - throw new Error(`Request failed: ${res.status}`); - } - const result = await res.json(); - setSearchResult(JSON.stringify(result, null, 2)); - } catch (err) { - setError(`Search API Error: ${err instanceof Error ? err.message : String(err)}`); - } - }; - - return ( -
-

Path & Query Params Test Page

- ← Back to Home - - {error && ( -
- {error} -
- )} - - {/* Single Path Param Test */} -
-

1. Single Path Param (/users/:userId)

-
- -
- -
-					{userResult || 'No result yet'}
-				
-
- - {/* Multiple Path Params Test */} -
-

2. Multiple Path Params (/organizations/:orgId/members/:memberId)

-
- - -
- -
-					{memberResult || 'No result yet'}
-				
-
- - {/* Query Params Test */} -
-

3. Query Params (/search?q=...&limit=...)

-
- - -
- -
-					{searchResult || 'No result yet'}
-				
-
-
- ); -} diff --git a/apps/testing/e2e-web/src/web/RpcPage.tsx b/apps/testing/e2e-web/src/web/RpcPage.tsx deleted file mode 100644 index d2cf3c20c..000000000 --- a/apps/testing/e2e-web/src/web/RpcPage.tsx +++ /dev/null @@ -1,419 +0,0 @@ -import { hc } from 'hono/client'; -import type { AppRouter } from '../api/router'; -import { type ChangeEvent, useState } from 'react'; - -export function RpcPage() { - const client = hc(`${window.location.origin}/api`); - const [name, setName] = useState('World'); - const [greeting, setGreeting] = useState(null); - const [running, setRunning] = useState(false); - const [error, setError] = useState(null); - - const handleInvoke = async () => { - setRunning(true); - setError(null); - try { - const res = await client.hello.$post({ json: { name } }); - const data = await res.text(); - setGreeting(data); - } catch (err) { - setError(err instanceof Error ? err.message : String(err)); - } finally { - setRunning(false); - } - }; - - return ( -
-
-
- - -

Hono Client Test

- -

- Testing hc() typed client -

- - - ← Back to Home - -
- -
-

- Try the Hono Client -

- -
- ) => setName(e.currentTarget.value)} - placeholder="Enter your name" - type="text" - value={name} - /> - -
-
-
- -
-
- - {error &&
{error}
} - -
- {greeting ?? 'Waiting for request'} -
-
- -
-

Hono Client Features

- -
- {[ - { - key: 'type-safe', - title: 'Type-safe API calls', - text: ( - <> - Types are inferred from your Hono router via{' '} - hc<AppRouter>() - - ), - }, - { - key: 'simple', - title: 'Simple API', - text: ( - <> - Use client.hello.$post({ json: ... }) for typed - requests - - ), - }, - { - key: 'websocket', - title: 'WebSocket support', - text: ( - <> - Use client.echo.$ws() for typed WebSocket connections - - ), - }, - ].map((step) => ( -
-
- -
- -
-

{step.title}

-

{step.text}

-
-
- ))} -
-
-
- - -
- ); -} diff --git a/apps/testing/e2e-web/src/web/RpcTestPage.tsx b/apps/testing/e2e-web/src/web/RpcTestPage.tsx deleted file mode 100644 index e85e385f7..000000000 --- a/apps/testing/e2e-web/src/web/RpcTestPage.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import { type ChangeEvent, useState } from 'react'; -import { hc } from 'hono/client'; -import type { AppRouter } from '../api/router'; - -export function RpcTestPage() { - const client = hc(`${window.location.origin}/api`); - const [name, setName] = useState('RPC'); - const [apiResult, setApiResult] = useState(''); - const [wsMessages, setWsMessages] = useState([]); - const [sseEvents, setSseEvents] = useState([]); - const [error, setError] = useState(null); - - const testAPI = async () => { - try { - const res = await client.hello.$post({ json: { name } }); - const result = await res.text(); - setApiResult(result); - } catch (err) { - setError(`API Error: ${err instanceof Error ? err.message : String(err)}`); - } - }; - - const testWebSocket = () => { - try { - setWsMessages([]); - setError(null); - - const ws = client.echo.$ws(); - - ws.addEventListener('open', () => { - setWsMessages((prev) => [...prev, 'Connected']); - ws.send(JSON.stringify({ message: `Hello from ${name}` })); - }); - - ws.addEventListener('message', (event: MessageEvent) => { - setWsMessages((prev) => [...prev, `Received: ${event.data}`]); - }); - - ws.addEventListener('error', () => { - setWsMessages((prev) => [...prev, 'Error occurred']); - }); - - ws.addEventListener('close', () => { - setWsMessages((prev) => [...prev, 'Disconnected']); - }); - } catch (err) { - setError(`WebSocket Error: ${err instanceof Error ? err.message : String(err)}`); - } - }; - - const testSSE = () => { - try { - setSseEvents([]); - - // SSE uses native EventSource — Hono doesn't have a typed SSE client - const baseUrl = window.location.origin; - const es = new EventSource(`${baseUrl}/api/events`); - - es.addEventListener('message', (event: MessageEvent) => { - setSseEvents((prev) => [...prev, event.data]); - }); - - es.addEventListener('error', () => { - setError('SSE error'); - es.close(); - }); - } catch (err) { - setError(`SSE Error: ${err instanceof Error ? err.message : String(err)}`); - } - }; - - return ( -
-

Hono Client Test Page

- ← Back to Home - - {error && ( -
- {error} -
- )} - -
- ) => setName(e.target.value)} - style={{ padding: '0.5rem', marginRight: '1rem' }} - data-testid="name-input" - /> -
- - {/* API Test */} -
-

1. API (hc client.$post)

- -
- {apiResult || 'No result yet'} -
-
- - {/* WebSocket Test */} -
-

2. WebSocket (hc client.$ws)

- -
- {wsMessages.map((msg, i) => ( - // biome-ignore lint/suspicious/noArrayIndexKey: messages are append-only with no stable id -
{msg}
- ))} -
-
- - {/* SSE Test */} -
-

3. Server-Sent Events (native EventSource)

- -
- {sseEvents.map((event, i) => ( - // biome-ignore lint/suspicious/noArrayIndexKey: events are append-only with no stable id -
{event}
- ))} -
-
-
- ); -} diff --git a/apps/testing/e2e-web/src/web/StreamsPage.tsx b/apps/testing/e2e-web/src/web/StreamsPage.tsx deleted file mode 100644 index b46fe2714..000000000 --- a/apps/testing/e2e-web/src/web/StreamsPage.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import { hc } from 'hono/client'; -import type { AppRouter } from '../api/router'; -import { useState, useEffect, useRef, useCallback } from 'react'; - -export function StreamsPage() { - const clientRef = useRef(hc(`${window.location.origin}/api`)); - const [message, setMessage] = useState(''); - - // WebSocket state - const [wsConnected, setWsConnected] = useState(false); - const [wsMessages, setWsMessages] = useState>([]); - const wsRef = useRef(null); - - // SSE state - const [sseConnected, setSseConnected] = useState(false); - const [sseData, setSseData] = useState<{ event: string; count: number } | null>(null); - - // Connect WebSocket on mount - useEffect(() => { - const ws = clientRef.current.echo.$ws(); - wsRef.current = ws; - - ws.addEventListener('open', () => setWsConnected(true)); - ws.addEventListener('close', () => setWsConnected(false)); - ws.addEventListener('message', (event: MessageEvent) => { - try { - const data = JSON.parse(event.data); - setWsMessages((prev) => [...prev, data]); - } catch { - // ignore parse errors - } - }); - - return () => { - ws.close(); - }; - }, []); - - // Connect SSE on mount - useEffect(() => { - const baseUrl = window.location.origin; - const es = new EventSource(`${baseUrl}/api/events`); - - es.addEventListener('open', () => setSseConnected(true)); - es.addEventListener('error', () => setSseConnected(false)); - es.addEventListener('message', (event: MessageEvent) => { - try { - const data = JSON.parse(event.data); - setSseData(data); - } catch { - // ignore parse errors - } - }); - - return () => { - es.close(); - }; - }, []); - - const handleSend = useCallback(() => { - if (message.trim() && wsRef.current?.readyState === WebSocket.OPEN) { - wsRef.current.send(JSON.stringify({ message })); - setMessage(''); - } - }, [message]); - - return ( -
-

WebSocket & EventStream Tests

- - {/* WebSocket Section */} -
-

WebSocket Echo

-
- Status: {wsConnected ? 'Connected' : 'Disconnected'} -
- -
- setMessage(e.target.value)} - onKeyDown={(e) => e.key === 'Enter' && handleSend()} - placeholder="Type a message..." - style={{ - flex: 1, - padding: '0.75rem', - background: '#09090b', - border: '1px solid #2b2b30', - borderRadius: '0.375rem', - color: '#fff', - }} - /> - -
- -
- {wsMessages.length === 0 ? ( -
No messages yet
- ) : ( - wsMessages.map((msg, i) => ( -
- {msg.echo} - - ({new Date(msg.timestamp).toLocaleTimeString()}) - -
- )) - )} -
-
- - {/* EventStream Section */} -
-

Server-Sent Events

-
- Status: {sseConnected ? 'Connected' : 'Disconnected'} -
- -
- {sseData ? ( -
- {sseData.event} - - Count: {sseData.count} - -
- ) : ( -
Waiting for events...
- )} -
-
-
- ); -} diff --git a/apps/testing/e2e-web/src/web/WebRTCTestPage.tsx b/apps/testing/e2e-web/src/web/WebRTCTestPage.tsx deleted file mode 100644 index 6275c2880..000000000 --- a/apps/testing/e2e-web/src/web/WebRTCTestPage.tsx +++ /dev/null @@ -1,860 +0,0 @@ -import { useCallback, useEffect, useRef, useState } from 'react'; -import { WebRTCManager, type WebRTCConnectionState } from '@agentuity/frontend'; -import type { RecordingHandle, RecordingState } from '@agentuity/core'; - -interface Message { - from: 'local' | 'remote'; - peerId?: string; - data: string; - timestamp: number; -} - -interface CursorPosition { - peerId: string; - x: number; - y: number; - color: string; -} - -const CURSOR_COLORS = [ - '#e91e63', - '#9c27b0', - '#673ab7', - '#3f51b5', - '#2196f3', - '#00bcd4', - '#009688', - '#4caf50', - '#ff9800', - '#ff5722', -]; - -export function WebRTCTestPage() { - const [roomId, setRoomId] = useState('e2e-test-room'); - const [state, setState] = useState('idle'); - const [peerId, setPeerId] = useState(null); - const [remotePeerIds, setRemotePeerIds] = useState([]); - const [messages, setMessages] = useState([]); - const [inputMessage, setInputMessage] = useState(''); - const [error, setError] = useState(null); - const [dataChannelOpen, setDataChannelOpen] = useState(false); - const [isScreenSharing, setIsScreenSharing] = useState(false); - const [recordingState, setRecordingState] = useState('inactive'); - const [recordingSize, setRecordingSize] = useState(null); - const [recordingMimeType, setRecordingMimeType] = useState(null); - - // Media options - const [enableVideo, setEnableVideo] = useState(false); - const [enableAudio, setEnableAudio] = useState(false); - const [isAudioMuted, setIsAudioMuted] = useState(false); - const [isVideoMuted, setIsVideoMuted] = useState(false); - const [autoReconnect, setAutoReconnect] = useState(true); - const [maxReconnectAttempts, setMaxReconnectAttempts] = useState(5); - const [reconnectAttempt, setReconnectAttempt] = useState(null); - const [reconnectStatus, setReconnectStatus] = useState< - 'idle' | 'reconnecting' | 'reconnected' | 'failed' - >('idle'); - - // Cursor tracking - const [remoteCursors, setRemoteCursors] = useState>(new Map()); - const [cursorChannelOpen, setCursorChannelOpen] = useState(false); - const peerColorsRef = useRef>(new Map()); - - // Store remote streams so we can apply them when video elements mount - const [remoteStreams, setRemoteStreams] = useState>(new Map()); - - const managerRef = useRef(null); - const localVideoRef = useRef(null); - const canvasRef = useRef(null); - const recordingHandleRef = useRef(null); - const checkPeerIdRef = useRef | null>(null); - - const connect = useCallback(() => { - // Clear any existing peer ID check interval - if (checkPeerIdRef.current) { - clearInterval(checkPeerIdRef.current); - checkPeerIdRef.current = null; - } - if (managerRef.current) { - managerRef.current.dispose(); - } - setError(null); - setReconnectStatus('idle'); - setReconnectAttempt(null); - - const signalUrl = `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}/api/webrtc/signal`; - - const mediaEnabled = enableVideo || enableAudio; - const mediaConstraints = mediaEnabled ? { video: enableVideo, audio: enableAudio } : false; - - const manager = new WebRTCManager({ - signalUrl, - roomId, - media: mediaConstraints, - autoReconnect, - maxReconnectAttempts, - dataChannels: [ - { label: 'chat', ordered: true }, - { label: 'cursors', ordered: false, maxRetransmits: 0 }, - ], - callbacks: { - onLocalStream: (stream) => { - console.log('[WebRTC] Local stream received'); - if (localVideoRef.current) { - localVideoRef.current.srcObject = stream; - } - }, - onRemoteStream: (remotePeerId, stream) => { - console.log('[WebRTC] Remote stream received from:', remotePeerId); - setRemoteStreams((prev) => { - const next = new Map(prev); - next.set(remotePeerId, stream); - return next; - }); - }, - onStateChange: (from, to, reason) => { - console.log(`[WebRTC] State: ${from} → ${to}`, reason); - setState(to); - }, - onConnect: () => { - console.log('[WebRTC] Connected!'); - }, - onDisconnect: (reason) => { - console.log('[WebRTC] Disconnected:', reason); - setDataChannelOpen(false); - setRemotePeerIds([]); - setIsScreenSharing(false); - }, - onPeerJoined: (id) => { - console.log('[WebRTC] Peer joined:', id); - setRemotePeerIds((prev) => (prev.includes(id) ? prev : [...prev, id])); - }, - onPeerLeft: (id) => { - console.log('[WebRTC] Peer left:', id); - setRemotePeerIds((prev) => prev.filter((p) => p !== id)); - setRemoteStreams((prev) => { - const next = new Map(prev); - next.delete(id); - return next; - }); - }, - onDataChannelOpen: (remotePeerId, label) => { - console.log('[WebRTC] Data channel opened:', label, 'with peer:', remotePeerId); - if (label === 'chat') { - setDataChannelOpen(true); - } - if (label === 'cursors') { - setCursorChannelOpen(true); - // Assign color to peer if not already assigned - if (!peerColorsRef.current.has(remotePeerId)) { - const colorIndex = peerColorsRef.current.size % CURSOR_COLORS.length; - const color = CURSOR_COLORS[colorIndex] ?? '#e91e63'; - peerColorsRef.current.set(remotePeerId, color); - } - } - }, - onDataChannelClose: (remotePeerId, label) => { - console.log('[WebRTC] Data channel closed:', label, 'with peer:', remotePeerId); - if (label === 'chat') { - const manager = managerRef.current; - if (manager) { - const labels = manager.getDataChannelLabels(); - if (!labels.includes('chat')) { - setDataChannelOpen(false); - } - } - } - if (label === 'cursors') { - // Remove cursor when peer's channel closes - setRemoteCursors((prev) => { - const next = new Map(prev); - next.delete(remotePeerId); - return next; - }); - } - }, - onDataChannelMessage: (remotePeerId, label, data) => { - if (label === 'chat') { - console.log('[WebRTC] Chat message from:', remotePeerId, data); - setMessages((prev) => [ - ...prev, - { - from: 'remote', - peerId: remotePeerId, - data: typeof data === 'string' ? data : JSON.stringify(data), - timestamp: Date.now(), - }, - ]); - } - if (label === 'cursors' && typeof data === 'object' && data !== null) { - const cursorData = data as { x: number; y: number }; - const color = peerColorsRef.current.get(remotePeerId) || '#999'; - setRemoteCursors((prev) => { - const next = new Map(prev); - next.set(remotePeerId, { - peerId: remotePeerId, - x: cursorData.x, - y: cursorData.y, - color, - }); - return next; - }); - } - }, - onDataChannelError: (remotePeerId, label, err) => { - console.error('[WebRTC] Data channel error:', label, err, 'peer:', remotePeerId); - setError(`Data channel error: ${err.message}`); - }, - onError: (err) => { - console.error('[WebRTC] Error:', err); - setError(err.message); - }, - onScreenShareStart: () => { - setIsScreenSharing(true); - }, - onScreenShareStop: () => { - setIsScreenSharing(false); - }, - onReconnecting: (attempt: number) => { - setReconnectAttempt(attempt); - setReconnectStatus('reconnecting'); - }, - onReconnected: () => { - setReconnectStatus('reconnected'); - }, - onReconnectFailed: () => { - setReconnectStatus('failed'); - }, - }, - }); - - managerRef.current = manager; - manager.connect(); - - checkPeerIdRef.current = setInterval(() => { - const managerState = manager.getState(); - if (managerState.peerId) { - setPeerId(managerState.peerId); - if (checkPeerIdRef.current) { - clearInterval(checkPeerIdRef.current); - checkPeerIdRef.current = null; - } - } - }, 100); - }, [roomId, enableVideo, enableAudio, autoReconnect, maxReconnectAttempts]); - - const toggleAudioMute = useCallback(() => { - if (managerRef.current) { - const newMuted = !isAudioMuted; - managerRef.current.muteAudio(newMuted); - setIsAudioMuted(newMuted); - } - }, [isAudioMuted]); - - const toggleVideoMute = useCallback(() => { - if (managerRef.current) { - const newMuted = !isVideoMuted; - managerRef.current.muteVideo(newMuted); - setIsVideoMuted(newMuted); - } - }, [isVideoMuted]); - - const startScreenShare = useCallback(async () => { - if (!managerRef.current) return; - try { - await managerRef.current.startScreenShare(); - managerRef.current.sendJSON('chat', { type: 'screen-share', active: true }); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - setError(message); - } - }, []); - - const stopScreenShare = useCallback(async () => { - if (!managerRef.current) return; - try { - await managerRef.current.stopScreenShare(); - managerRef.current.sendJSON('chat', { type: 'screen-share', active: false }); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - setError(message); - } - }, []); - - const startRecording = useCallback(() => { - if (!managerRef.current) return; - const handle = managerRef.current.startRecording('local'); - if (!handle) { - setError('Recording failed'); - return; - } - recordingHandleRef.current = handle; - setRecordingState(handle.state); - setRecordingSize(null); - setRecordingMimeType(null); - }, []); - - const stopRecording = useCallback(async () => { - const handle = recordingHandleRef.current; - if (!handle) return; - try { - const blob = await handle.stop(); - setRecordingState('inactive'); - setRecordingSize(blob.size); - setRecordingMimeType(blob.type); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - console.error('Recording stop failed:', message); - setError(message); - setRecordingState('inactive'); - setRecordingSize(null); - setRecordingMimeType(null); - } finally { - recordingHandleRef.current = null; - } - }, []); - - const forceWebSocketClose = useCallback(() => { - const manager = managerRef.current as unknown as { ws?: WebSocket } | null; - manager?.ws?.close(); - }, []); - - // Test utility: Set an invalid signal URL to force reconnection failures - const setInvalidSignalUrl = useCallback(() => { - const manager = managerRef.current as unknown as { options?: { signalUrl?: string } } | null; - if (manager?.options) { - manager.options.signalUrl = 'ws://invalid-host-that-will-not-resolve.local:12345/signal'; - } - }, []); - - // Handle canvas mouse movement - const handleCanvasMouseMove = useCallback( - (e: React.MouseEvent) => { - if (!managerRef.current || !cursorChannelOpen) return; - - const canvas = canvasRef.current; - if (!canvas) return; - - const rect = canvas.getBoundingClientRect(); - const x = ((e.clientX - rect.left) / rect.width) * 100; - const y = ((e.clientY - rect.top) / rect.height) * 100; - - managerRef.current.sendJSON('cursors', { x, y }); - }, - [cursorChannelOpen] - ); - - // Draw cursors on canvas - const drawCanvas = useCallback(() => { - const canvas = canvasRef.current; - if (!canvas) return; - - const ctx = canvas.getContext('2d'); - if (!ctx) return; - - // Clear canvas - ctx.fillStyle = '#1a1a2e'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - // Draw grid - ctx.strokeStyle = '#333'; - ctx.lineWidth = 1; - for (let i = 0; i <= 10; i++) { - const x = (canvas.width / 10) * i; - const y = (canvas.height / 10) * i; - ctx.beginPath(); - ctx.moveTo(x, 0); - ctx.lineTo(x, canvas.height); - ctx.stroke(); - ctx.beginPath(); - ctx.moveTo(0, y); - ctx.lineTo(canvas.width, y); - ctx.stroke(); - } - - // Draw title - ctx.fillStyle = '#666'; - ctx.font = '14px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('Move your cursor here to share position', canvas.width / 2, 20); - - // Draw remote cursors - remoteCursors.forEach((cursor) => { - const x = (cursor.x / 100) * canvas.width; - const y = (cursor.y / 100) * canvas.height; - - // Draw cursor pointer - ctx.fillStyle = cursor.color; - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + 12, y + 10); - ctx.lineTo(x + 4, y + 10); - ctx.lineTo(x + 4, y + 18); - ctx.lineTo(x, y + 14); - ctx.closePath(); - ctx.fill(); - - // Draw peer label - ctx.fillStyle = cursor.color; - ctx.font = 'bold 10px system-ui'; - ctx.textAlign = 'left'; - const label = cursor.peerId.slice(5, 15); - ctx.fillText(label, x + 14, y + 14); - }); - }, [remoteCursors]); - - useEffect(() => { - drawCanvas(); - }, [drawCanvas]); - - const disconnect = useCallback(() => { - // Clear peer ID check interval - if (checkPeerIdRef.current) { - clearInterval(checkPeerIdRef.current); - checkPeerIdRef.current = null; - } - if (managerRef.current) { - managerRef.current.dispose(); - managerRef.current = null; - } - setState('idle'); - setPeerId(null); - setRemotePeerIds([]); - setRemoteStreams(new Map()); - setDataChannelOpen(false); - setCursorChannelOpen(false); - setRemoteCursors(new Map()); - setIsScreenSharing(false); - setRecordingState('inactive'); - setRecordingSize(null); - setRecordingMimeType(null); - recordingHandleRef.current = null; - setReconnectStatus('idle'); - setReconnectAttempt(null); - }, []); - - const sendMessage = useCallback(() => { - if (!managerRef.current || !inputMessage.trim()) return; - - const success = managerRef.current.sendString('chat', inputMessage); - if (success) { - setMessages((prev) => [ - ...prev, - { from: 'local', data: inputMessage, timestamp: Date.now() }, - ]); - setInputMessage(''); - } - }, [inputMessage]); - - const sendJSON = useCallback(() => { - if (!managerRef.current) return; - - const data = { type: 'ping', timestamp: Date.now() }; - const success = managerRef.current.sendJSON('chat', data); - if (success) { - setMessages((prev) => [ - ...prev, - { from: 'local', data: JSON.stringify(data), timestamp: Date.now() }, - ]); - } - }, []); - - useEffect(() => { - return () => { - // Clean up peer ID check interval - if (checkPeerIdRef.current) { - clearInterval(checkPeerIdRef.current); - checkPeerIdRef.current = null; - } - if (managerRef.current) { - managerRef.current.dispose(); - } - }; - }, []); - - return ( -
-

WebRTC Data Channel Test

- -
- -
- - {state !== 'idle' && ( -
- - -
- )} - -
- - -
- -
- - -
- -
- {state === 'idle' ? ( - - ) : ( - - )} -
- -
-
- State: {state} -
-
- My Peer ID: {peerId || 'N/A'} -
-
- Remote Peers:{' '} - {remotePeerIds.length > 0 ? remotePeerIds.join(', ') : 'Waiting...'} -
-
- Data Channel: {dataChannelOpen ? 'Open' : 'Closed'} -
-
- Screen Share: {isScreenSharing ? 'On' : 'Off'} -
-
- Reconnect: {reconnectStatus} -
- {reconnectAttempt !== null && ( -
- Reconnect Attempt: {reconnectAttempt} -
- )} - {error && ( -
- Error: {error} -
- )} -
- - {/* Cursor Tracking Canvas */} - {state !== 'idle' && ( -
-

Cursor Tracking

-

- Move your mouse over the canvas to share your cursor position with peers. - {remoteCursors.size > 0 && - ` (${remoteCursors.size} remote cursor${remoteCursors.size > 1 ? 's' : ''})`} -

- -
- )} - - {/* Video Section */} - {(enableVideo || enableAudio) && state !== 'idle' && ( -
-

Media

-
- {/* Local Video */} -
-
You
- -
- {enableAudio && ( - - )} - {enableVideo && ( - - )} -
-
- - -
-
- - -
-
-
- Recording: {recordingState} -
-
- Recording Size:{' '} - {recordingSize !== null ? `${recordingSize} bytes` : 'N/A'} -
-
- Recording MIME: {recordingMimeType ?? 'N/A'} -
-
-
- - {/* Remote Videos */} - {remotePeerIds.map((remotePeerId) => ( -
-
- {remotePeerId.slice(0, 15)}... -
- -
- ))} -
-
- )} - - {dataChannelOpen && ( -
-
- setInputMessage(e.target.value)} - onKeyDown={(e) => e.key === 'Enter' && sendMessage()} - placeholder="Type a message..." - data-testid="message-input" - style={{ flex: 1, padding: '0.5rem' }} - /> - - -
-
- )} - -
-

Messages

- {messages.length === 0 ? ( -

No messages yet

- ) : ( - messages.map((msg) => ( -
- {msg.from === 'local' ? 'You' : `Remote (${msg.peerId})`}:{' '} - {msg.data} -
- )) - )} -
-
- ); -} diff --git a/apps/testing/e2e-web/src/web/frontend.tsx b/apps/testing/e2e-web/src/web/frontend.tsx deleted file mode 100644 index 8ac670d50..000000000 --- a/apps/testing/e2e-web/src/web/frontend.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/** - * This file is the entry point for the React app, it sets up the root - * element and renders the App component to the DOM. - * - * It is included in `src/index.html`. - */ - -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import { AgentuityProvider } from '@agentuity/react'; -import { App } from './App'; - -const elem = document.getElementById('root')!; -const app = ( - - - - - -); - -if (import.meta.hot) { - // With hot module reloading, `import.meta.hot.data` is persisted. - import.meta.hot.data.root ??= createRoot(elem); - const root = import.meta.hot.data.root; - root.render(app); -} else { - // The hot module reloading API is not available in production. - createRoot(elem).render(app); -} diff --git a/apps/testing/e2e-web/src/web/index.html b/apps/testing/e2e-web/src/web/index.html deleted file mode 100644 index f30d9f260..000000000 --- a/apps/testing/e2e-web/src/web/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Agentuity + Bun + React - - - -
- - diff --git a/apps/testing/e2e-web/src/web/public/.gitkeep b/apps/testing/e2e-web/src/web/public/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/e2e-web/src/web/public/favicon.ico b/apps/testing/e2e-web/src/web/public/favicon.ico deleted file mode 100644 index 21f46e6f5..000000000 Binary files a/apps/testing/e2e-web/src/web/public/favicon.ico and /dev/null differ diff --git a/apps/testing/e2e-web/test/index.test.ts b/apps/testing/e2e-web/test/index.test.ts new file mode 100644 index 000000000..e9e143c1f --- /dev/null +++ b/apps/testing/e2e-web/test/index.test.ts @@ -0,0 +1,53 @@ +import { describe, test, expect } from 'bun:test'; +import app from '../src/server'; + +describe('e2e-web', () => { + test('GET / returns HTML page', async () => { + const res = await app.fetch(new Request('http://localhost/')); + expect(res.status).toBe(200); + const body = await res.text(); + expect(body).toContain('E2E Test App'); + expect(body).toContain('echo-btn'); + }); + + test('GET /api/health returns status', async () => { + const res = await app.fetch(new Request('http://localhost/api/health')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.status).toBe('ok'); + }); + + test('POST /api/echo returns body', async () => { + const res = await app.fetch( + new Request('http://localhost/api/echo', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ message: 'test' }), + }) + ); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.echo.message).toBe('test'); + }); + + test('GET /api/counter returns a number', async () => { + const res = await app.fetch(new Request('http://localhost/api/counter')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(typeof body.count).toBe('number'); + }); +}); + +describe.skip('deploy', () => { + test('agentuity build produces valid output', async () => { + // TODO: Verify launch.json, Procfile + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify + }); + + test('deployed app serves HTML and API', async () => { + // TODO: Hit /, /api/health, /api/echo on deployed URL + }); +}); diff --git a/apps/testing/e2e-web/tsconfig.json b/apps/testing/e2e-web/tsconfig.json index 99c01358a..d4ca1840b 100644 --- a/apps/testing/e2e-web/tsconfig.json +++ b/apps/testing/e2e-web/tsconfig.json @@ -1,15 +1,15 @@ { - "extends": "../../../tsconfig.base.json", "compilerOptions": { - "jsx": "react-jsx", - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "types": ["bun-types"], - "outDir": "./.agentuity", - "rootDir": ".", - "paths": { - "@agentuity/frontend": ["./node_modules/@agentuity/frontend"] - } + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "skipLibCheck": true, + "outDir": "dist", + "rootDir": "src", + "types": ["bun"] }, - "include": ["src/**/*", "app.ts"], - "exclude": ["node_modules", ".agentuity"] + "include": ["src"], + "exclude": ["node_modules", "dist", "test"] } diff --git a/apps/testing/integration-suite/.agents/agentuity/sdk/agent/AGENTS.md b/apps/testing/integration-suite/.agents/agentuity/sdk/agent/AGENTS.md deleted file mode 100644 index 19d5cf9a4..000000000 --- a/apps/testing/integration-suite/.agents/agentuity/sdk/agent/AGENTS.md +++ /dev/null @@ -1,307 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('users', 'user:123', { name: 'Alice', age: 30 }); - const result = await ctx.kv.get('users', 'user:123'); - await ctx.kv.delete('users', 'user:123'); - const keys = await ctx.kv.getKeys('users'); - return result.exists ? result.data : null; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('state', 'processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) - - diff --git a/apps/testing/integration-suite/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/integration-suite/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index efc057686..000000000 --- a/apps/testing/integration-suite/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,360 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import myAgent from '@agent/my-agent'; - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse((c, stream) => { - stream.writeSSE({ data: 'Hello', event: 'message' }); - stream.writeSSE({ data: 'World', event: 'message' }); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/integration-suite/.agents/agentuity/sdk/web/AGENTS.md b/apps/testing/integration-suite/.agents/agentuity/sdk/web/AGENTS.md deleted file mode 100644 index 85886016d..000000000 --- a/apps/testing/integration-suite/.agents/agentuity/sdk/web/AGENTS.md +++ /dev/null @@ -1,349 +0,0 @@ -# Web Folder Guide - -This folder contains your React-based web application that communicates with your Agentuity agents. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with input/output types - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -For type-safe API calls, use Hono's `hc()` client: - -```typescript -import { hc } from 'hono/client'; -import type { AppType } from '../api/router'; - -const client = hc('/'); -``` - -## Directory Structure - -Required files: - -- **App.tsx** (required) - Main React application component -- **frontend.tsx** (required) - Frontend entry point with client-side rendering -- **index.html** (required) - HTML template -- **public/** (optional) - Static assets (images, CSS, JS files) - -Example structure: - -``` -src/web/ -├── App.tsx -├── frontend.tsx -├── index.html -└── public/ - ├── styles.css - ├── logo.svg - └── script.js -``` - -## Creating the Web App - -### App.tsx - Main Component - -```typescript -import { AgentuityProvider } from '@agentuity/react'; -import { hc } from 'hono/client'; -import type { AppType } from '../api/router'; -import { useState } from 'react'; - -const client = hc('/'); - -function HelloForm() { - const [name, setName] = useState('World'); - const [greeting, setGreeting] = useState(null); - const [isLoading, setIsLoading] = useState(false); - - const handleSubmit = async () => { - setIsLoading(true); - const res = await client.api.hello.$post({ json: { name } }); - const data = await res.json(); - setGreeting(data.greeting); - setIsLoading(false); - }; - - return ( -
- setName(e.target.value)} - disabled={isLoading} - /> - - - -
{greeting ?? 'Waiting for response'}
-
- ); -} - -export function App() { - return ( - -
-

Welcome to Agentuity

- -
-
- ); -} -``` - -### frontend.tsx - Entry Point - -```typescript -import { createRoot } from 'react-dom/client'; -import { App } from './App'; - -const root = document.getElementById('root'); -if (!root) throw new Error('Root element not found'); - -createRoot(root).render(); -``` - -### index.html - HTML Template - -```html - - - - - - My Agentuity App - - -
- - - -``` - -## Type-Safe API Calls - -Use Hono's `hc()` client for type-safe API calls. The types are derived directly from your router. - -```typescript -import { hc } from 'hono/client'; -import type { AppType } from '../api/router'; - -// Create a typed client -const client = hc('/'); - -// All routes are fully typed -const res = await client.api.users.$get(); -const users = await res.json(); - -const res2 = await client.api.users.$post({ json: { name: 'Alice', email: 'alice@example.com' } }); -const created = await res2.json(); -``` - -For WebSocket and SSE, use the native browser APIs or `WebSocketManager`/`EventStreamManager` from `@agentuity/frontend`. - -## React Hooks - -`@agentuity/react` provides hooks for context, auth, WebRTC, and analytics. All hooks must be used within an `AgentuityProvider`. - -### useAgentuity - Access Context - -Access the Agentuity context for base URL and configuration. - -```typescript -import { useAgentuity } from '@agentuity/react'; - -function MyComponent() { - const { baseUrl } = useAgentuity(); - - return

API Base: {baseUrl}

; -} -``` - -### useAuth - Authentication State - -Access and manage authentication state. - -```typescript -import { useAuth } from '@agentuity/react'; - -function AuthStatus() { - const { isAuthenticated, authHeader, setAuthHeader, authLoading } = useAuth(); - - const handleLogin = async (token: string) => { - setAuthHeader?.(`Bearer ${token}`); - }; - - const handleLogout = () => { - setAuthHeader?.(null); - }; - - if (authLoading) return

Loading...

; - - return ( -
- {isAuthenticated ? ( - - ) : ( - - )} -
- ); -} -``` - -**useAuth Return Values:** - -| Property | Type | Description | -| ----------------- | ------------------- | ------------------------------------------- | -| `isAuthenticated` | `boolean` | True if user has auth token and not loading | -| `authHeader` | `string \| null` | Current auth header (e.g., "Bearer ...") | -| `setAuthHeader` | `(token) => void` | Set auth header (null to clear) | -| `authLoading` | `boolean` | True during auth state changes | -| `setAuthLoading` | `(loading) => void` | Set auth loading state | - -## Complete Example - -```typescript -import { AgentuityProvider } from '@agentuity/react'; -import { hc } from 'hono/client'; -import type { AppType } from '../api/router'; -import { useState } from 'react'; - -const client = hc('/'); - -function Dashboard() { - const [count, setCount] = useState(0); - const [result, setResult] = useState(null); - - const handleProcess = async () => { - const res = await client.api.process.$post({ json: { name: 'Jeff', age: 30 } }); - setResult(await res.json()); - }; - - return ( -
-

My Agentuity App

- -
-

Count: {count}

- -
- -
- -

{JSON.stringify(result)}

-
-
- ); -} - -export function App() { - return ( - - - - ); -} -``` - -## Static Assets - -Place static files in the **public/** folder: - -``` -src/web/public/ -├── logo.svg -├── styles.css -└── script.js -``` - -Reference them in your HTML or components: - -```html - - - -``` - -```typescript -// In React components -Logo -``` - -## Styling - -### Inline Styles - -```typescript -
- Styled content -
-``` - -### CSS Files - -Create `public/styles.css`: - -```css -body { - background-color: #09090b; - color: #fff; - font-family: sans-serif; -} -``` - -Import in `index.html`: - -```html - -``` - -### Style Tag in Component - -```typescript -
- - -
-``` - -## Best Practices - -- Wrap your app with **AgentuityProvider** for auth and context -- Use **hc()** from `hono/client` for type-safe API calls -- Use **useAuth** for authentication state management -- Handle loading and error states in UI -- Place reusable components in separate files -- Keep static assets in the **public/** folder - -## Rules - -- **App.tsx** must export a function named `App` -- **frontend.tsx** must render the `App` component to `#root` -- **index.html** must have a `
` -- Route types are derived from your Hono router via `hc()` -- The web app is served at `/` by default -- Static files in `public/` are served at `/public/*` -- Module script tag: `` - - diff --git a/apps/testing/integration-suite/.gitignore b/apps/testing/integration-suite/.gitignore deleted file mode 100644 index cfafb8803..000000000 --- a/apps/testing/integration-suite/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.agentuity -agentuity.*.json -.env* diff --git a/apps/testing/integration-suite/AGENTS.md b/apps/testing/integration-suite/AGENTS.md deleted file mode 100644 index 60983bf48..000000000 --- a/apps/testing/integration-suite/AGENTS.md +++ /dev/null @@ -1,907 +0,0 @@ -# Integration Suite - Agent Guidelines - -## Overview - -This is a comprehensive integration test suite for the Agentuity SDK. It runs continuously as a single server instance on port 3500, executing tests via HTTP/SSE endpoints with real-time streaming results. - -**Location**: `sdk/apps/testing/integration-suite/` - -## Commands - -- **Build**: `bun run build` - Bundles the app to `.agentuity/` -- **Typecheck**: `bun run typecheck` - Runs TypeScript validation -- **Run Server**: `cd .agentuity && bun run app.js` - Starts test server on port 3500 -- **Run Tests**: `curl http://localhost:3500/api/test/run?suite=&concurrency=10` - -## Architecture - -### Test Execution Model - -- **Single Server**: App starts once, stays running, executes tests on demand -- **SSE Streaming**: `GET /api/test/run` streams real-time test results -- **Query Parameters**: - - `suite=` - Filter by suite name - - `test=` - Filter by test name - - `concurrency=` - Parallel execution (default: 10) -- **Event Types**: `start`, `progress`, `complete` -- **Concurrent Execution**: Tests run in parallel with Promise.allSettled for resilience -- **Isolation**: Each test uses `uniqueId()` for unique keys/namespaces to prevent cross-contamination - -### Directory Structure - -``` -integration-suite/ -├── src/ -│ ├── agent/ # All test agents -│ │ ├── basic/ # Basic agent tests -│ │ ├── routing/ # HTTP routing tests -│ │ ├── storage/ # Storage service tests -│ │ │ ├── kv/ # KeyValue storage -│ │ │ ├── stream/ # Stream storage -│ │ │ └── vector/ # Vector storage -│ │ └── session/ # Session/thread tests -│ ├── test/ # Test definitions -│ │ ├── suite.ts # TestSuite class -│ │ ├── helpers/ # Test utilities -│ │ │ ├── index.ts # Assertions, uniqueId -│ │ │ └── kv.ts # KV-specific helpers -│ │ ├── basic-agents.ts # Basic agent tests -│ │ ├── routing-agents.ts # Routing tests -│ │ ├── storage-kv.ts # KV tests -│ │ ├── storage-stream.ts # Stream tests -│ │ ├── storage-vector.ts # Vector tests -│ │ └── session-basic.ts # Session/thread tests -│ └── api/ # API routes -│ └── index.ts # Test execution API -├── app.ts # Main entry point -├── package.json -├── tsconfig.json # Path aliases configured -└── agentuity.json -``` - -### Path Aliases - -**ALWAYS use path aliases for imports:** - -```typescript -// ✅ CORRECT -import myAgent from '@agents/storage/kv/crud'; -import { test } from '@test/suite'; - -// ❌ WRONG -import myAgent from '../agent/storage/kv/crud'; -import { test } from './suite'; -``` - -**Configured in tsconfig.json**: - -```json -{ - "compilerOptions": { - "paths": { - "@agents/*": ["./src/agent/*"], - "@test/*": ["./src/test/*"] - } - } -} -``` - -### Nested Directory Structure - -**Agents CAN and SHOULD use nested directories for logical organization:** - -``` -src/agent/ -├── basic/ # Grouped by feature -│ ├── basic-simple.ts -│ └── basic-async.ts -└── storage/ # Nested grouping - ├── kv/ - │ ├── crud.ts - │ └── types.ts - └── stream/ - ├── crud.ts - └── metadata.ts -``` - -**Important**: We fixed a bundler bug in `sdk/packages/cli/src/cmd/build/plugin.ts` (line 418) that prevented nested directories. The fix checks if a directory OR any subdirectory contains agents (recursive check with `startsWith`). - -## Test Patterns - -### Test Registration - -Tests are registered with the `test()` function from `@test/suite`: - -```typescript -import { test } from '@test/suite'; -import { assertEqual, assertDefined } from '@test/helpers'; -import myAgent from '@agents/my-agent'; - -test('suite-name', 'test-name', async () => { - const result = await myAgent.run({ input: 'data' }); - assertEqual(result.success, true); -}); -``` - -### Agent Execution - -**ALWAYS use `agent.run()` - NOT `agent.handler()`:** - -```typescript -// ✅ CORRECT - Provides full context automatically -const result = await myAgent.run({ input: 'data' }); - -// ❌ WRONG - Requires manual context creation -await myAgent.handler(ctx, { input: 'data' }); -``` - -### Test Isolation - -**Use `uniqueId()` for all keys, namespaces, and identifiers:** - -```typescript -import { uniqueId } from '@test/helpers'; - -test('storage-kv', 'set', async () => { - const key = uniqueId('kv-set'); // e.g., "kv-set-1733501234567-abc123" - const namespace = uniqueId('ns'); // e.g., "ns-1733501234567-def456" - - await kvAgent.run({ operation: 'set', key, namespace, value: 'data' }); -}); -``` - -### Test File Structure - -```typescript -/** - * Test Suite Name - * - * Description of what this suite tests - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined, uniqueId } from '@test/helpers'; -import agent1 from '@agents/category/agent1'; -import agent2 from '@agents/category/agent2'; - -// Test: Description -test('suite-name', 'test-name', async () => { - // Setup - const key = uniqueId('test'); - - // Execute - const result = await agent1.run({ operation: 'action', key }); - - // Assert - assertEqual(result.success, true); - assertDefined(result.data); -}); -``` - -### Assertions Available - -```typescript -import { - assert, // assert(condition, message) - assertEqual, // assertEqual(actual, expected, message?) - assertDeepEqual, // assertDeepEqual(actual, expected, message?) - assertDefined, // assertDefined(value, message?) - assertTruthy, // assertTruthy(value, message?) - assertFalsy, // assertFalsy(value, message?) - assertThrows, // assertThrows(fn, message?) - uniqueId, // uniqueId(prefix?) - Generate unique ID -} from '@test/helpers'; -``` - -## SDK API Learnings - -### KeyValue Storage - -**API**: `ctx.kv.set()`, `ctx.kv.get()`, `ctx.kv.delete()`, `ctx.kv.has()` - -**Important Patterns**: - -```typescript -// Method signatures -await ctx.kv.set(namespace, key, value, params?); -const result = await ctx.kv.get(namespace, key); // Returns DataResult -await ctx.kv.delete(namespace, key); - -// DataResult structure -interface DataResult { - exists: boolean; - data?: T; - contentType?: string; -} - -// Usage -const result = await ctx.kv.get('namespace', 'key'); -if (result.exists) { - console.log(result.data); // Type-safe! -} -``` - -**Gotchas**: - -- Values are stored as `Uint8Array` and returned stringified after `agent.run()` JSON serialization -- Use `decodeKVValue()` helper from `@test/helpers/kv` to decode stringified Uint8Arrays -- Object storage requires explicit `contentType: 'application/json'` parameter -- Object serialization through `agent.run()` is complex - test in unit tests instead - -### Stream Storage - -**API**: `ctx.stream.create()`, `stream.write()`, `stream.close()`, `stream.getReader()`, `ctx.stream.download()`, `ctx.stream.list()` - -**Important Patterns**: - -```typescript -// Create, write, close pattern -const stream = await ctx.stream.create(name, { - contentType: 'text/plain', - metadata: { key: 'value' }, -}); -await stream.write('data'); -await stream.close(); - -// Read back -const reader = stream.getReader(); -const chunks: Uint8Array[] = []; -for await (const chunk of reader as any) { - chunks.push(chunk); -} - -// Download by ID -const readable = await ctx.stream.download(streamId); - -// List streams -const result = await ctx.stream.list({ - name: 'filter', - metadata: { key: 'value' }, - limit: 100, - offset: 0, -}); -``` - -**Gotchas**: - -- Must `close()` stream before reading -- ReadableStream iteration requires `for await (const chunk of stream)` pattern -- Chunks must be accumulated into single Uint8Array and decoded with TextDecoder -- Content types preserved: `text/plain`, `application/octet-stream`, `application/json` -- `stream.getReader()` vs `ctx.stream.download(id)` - reader for same stream, download for stored stream - -### Vector Storage - -**API**: `ctx.vector.upsert()`, `ctx.vector.search()`, `ctx.vector.get()`, `ctx.vector.getMany()`, `ctx.vector.delete()`, `ctx.vector.exists()` - -**Important Patterns**: - -```typescript -// Upsert with document text (auto-embedded) -const results = await ctx.vector.upsert(namespace, - { key: 'doc1', document: 'Text to embed', metadata: { category: 'tech' } } -); - -// Upsert with pre-computed embeddings -await ctx.vector.upsert(namespace, - { key: 'doc2', embeddings: [0.1, 0.2, ...], metadata: { type: 'manual' } } -); - -// Semantic search -const results = await ctx.vector.search(namespace, { - query: 'natural language query', - limit: 10, - similarity: 0.7, // 0.0-1.0, higher = more similar - metadata: { category: 'tech' } // Filter by metadata -}); - -// Get by key -const result = await ctx.vector.get(namespace, key); -if (result.exists) { - console.log(result.data); // VectorSearchResultWithDocument -} - -// Delete -const deletedCount = await ctx.vector.delete(namespace, ...keys); -``` - -**Gotchas**: - -- Upsert accepts either `document` (string) OR `embeddings` (number[]), not both -- Search uses natural language queries with automatic embedding -- Similarity threshold is 0.0-1.0 (1.0 = exact match) -- Get/getMany return `VectorResult` with `exists` field for type safety -- Delete returns count of deleted vectors - -### Session & Thread - -**API**: `ctx.session.id`, `ctx.session.state`, `ctx.thread.id`, `ctx.thread.state`, `ctx.session.addEventListener()`, `ctx.thread.addEventListener()` - -**Important Patterns**: - -```typescript -// Access IDs -const sessionId = ctx.session.id; // sess_* -const threadId = ctx.thread.id; // thrd_* - -// Session state (scoped to request) -ctx.session.state.set('key', 'value'); -const value = ctx.session.state.get('key'); - -// Thread state (persists across sessions) -ctx.thread.state.set('conversationCount', 5); -const count = ctx.thread.state.get('conversationCount'); - -// Event listeners -ctx.session.addEventListener('completed', (eventName, session) => { - console.log('Session completed:', session.id); -}); - -ctx.thread.addEventListener('destroyed', (eventName, thread) => { - console.log('Thread destroyed:', thread.id); -}); - -// Thread operations -const isEmpty = ctx.thread.empty(); // Check if thread has data -await ctx.thread.destroy(); // Manually destroy thread -``` - -**Gotchas**: - -- **`agent.run()` shares session context** - all calls in same test use same session/thread -- Session IDs start with `sess_`, thread IDs start with `thrd_` -- Session state is Map scoped to the session (request-level) -- Thread state persists across sessions within same thread (conversation-level) -- Event listeners: `'completed'` for session, `'destroyed'` for thread -- State persistence within shared context (not isolated per agent call in tests) - -### Error Handling & StructuredError - -**API**: `StructuredError(tag, message?)<{ shape }>()` - -**Important Patterns**: - -```typescript -import { StructuredError } from '@agentuity/core'; - -// Define custom error with shape -const ValidationError = StructuredError('ValidationError', 'Validation failed')<{ - field: string; - reason: string; -}>(); - -const NotFoundError = StructuredError('NotFoundError', 'Resource not found')<{ - resource: string; - id: string; -}>(); - -// Throw with data -throw new ValidationError({ field: 'email', reason: 'Invalid format' }); - -// Try-catch in handler -try { - throw new ValidationError({ field: 'age', reason: 'Must be positive' }); -} catch (error) { - ctx.logger.warn('Validation failed', { error }); - return { success: false, message: 'Handled error' }; -} - -// Access properties directly on error instance -const error = new ValidationError({ field: 'name', reason: 'Required' }); -console.log(error.field); // 'name' - NOT error.data.field -console.log(error.reason); // 'Required' -``` - -**Gotchas**: - -- StructuredError properties are directly on the error instance (not nested in `.data` property) -- Pattern: `StructuredError(tag, defaultMessage)<{ shape }>()` - note the two call signatures -- Schema validation errors are automatically thrown by the runtime -- Try-catch in agent handlers allows graceful error handling -- Errors can be caught and transformed into success responses with error details - -### Eval Framework - -**API**: `agent.createEval(name, config)` - -**Important Patterns**: - -```typescript -import { createAgent } from '@agentuity/runtime'; - -const myAgent = createAgent('my-agent', { - schema: { - input: s.object({ value: s.number() }), - output: s.object({ result: s.number() }), - }, - handler: async (ctx, input) => { - return { result: input.value * 2 }; - }, -}); - -// Create eval with binary pass/fail -myAgent.createEval('check-positive', { - description: 'Ensures result is greater than zero', - handler: async (ctx, input, output) => { - return { - success: true, - passed: output.result > 0, - metadata: { - reason: output.result > 0 ? 'Pass' : 'Fail', - }, - }; - }, -}); - -// Create eval with score (0.0-1.0) -myAgent.createEval('accuracy-score', { - description: 'Scores accuracy of result', - handler: async (ctx, input, output) => { - const expected = input.value * 2; - const accuracy = output.result === expected ? 1.0 : 0.0; - - return { - success: true, - score: accuracy, - metadata: { - reason: `Expected ${expected}, got ${output.result}`, - }, - }; - }, -}); -``` - -**Gotchas**: - -- Evals run automatically on every agent execution -- Eval result format requires `success: true` and `metadata: { reason, ... }` -- Binary results use `passed: boolean` -- Score results use `score: number` (0.0-1.0 range) -- Eval handler receives: `(ctx, input, output)` for agents with input/output -- Evals are executed in production and logged with structured telemetry -- Multiple evals can be attached to a single agent - -### Schema Validation - -**API**: Schema types from `@agentuity/schema` - -**Important Patterns**: - -```typescript -import { s } from '@agentuity/schema'; - -// Basic types -s.string(); -s.number(); -s.boolean(); -s.any(); - -// Optional fields -s.string().optional(); -s.number().optional(); - -// Arrays -s.array(s.string()); -s.array(s.object({ id: s.string(), count: s.number() })); - -// Objects -s.object({ - name: s.string(), - age: s.number(), - active: s.boolean().optional(), -}); - -// Nested objects -s.object({ - user: s.object({ - profile: s.object({ - email: s.string(), - }), - }), -}); - -// Union types -s.union(s.string(), s.number()); -s.union(s.string(), s.boolean(), s.null()); - -// Record (dynamic keys) -s.record(s.string(), s.any()); -s.record(s.string(), s.number()); -``` - -**Gotchas**: - -- Default values: Handle in destructuring (e.g., `{ field = defaultValue } = input`) -- Union types take multiple args, not an array: `s.union(a, b)` not `s.union([a, b])` -- Record types need two args: `s.record(keyType, valueType)` not `s.record(valueType)` -- Validation happens automatically before handler is called -- Missing required fields throw validation errors -- Wrong types throw validation errors -- Nested objects are fully supported (unlimited depth) - -### WaitUntil & Background Tasks - -**API**: `ctx.waitUntil(promise | function)` - -**Important Patterns**: - -```typescript -// Schedule async background task -ctx.waitUntil(async () => { - await someAsyncWork(); - ctx.logger.info('Background work complete'); -}); - -// Schedule promise-based task -ctx.waitUntil( - someAsyncOperation().then(() => { - ctx.logger.info('Promise-based task complete'); - }) -); - -// Schedule synchronous function -ctx.waitUntil(() => { - ctx.logger.info('Sync task complete'); -}); - -// Multiple tasks -ctx.waitUntil(task1()); -ctx.waitUntil(task2()); -ctx.waitUntil(task3()); -``` - -**Gotchas**: - -- Background tasks execute **after** the response is sent to the client -- Main request succeeds even if background task throws an error -- Errors in background tasks are logged but don't affect response -- Can call `waitUntil()` multiple times within a single agent execution -- **Limitation in tests**: Once `waitUntilAll()` is called (after agent completes), cannot call `waitUntil()` again in shared session context -- Use for cleanup, logging, analytics, or async operations that don't block response - -### Event System - -**API**: `agent.addEventListener()`, `ctx.session.addEventListener()`, `ctx.thread.addEventListener()`, `removeEventListener()` - -**Important Patterns**: - -```typescript -// Agent event listeners -agent.addEventListener('started', (eventName, agent, ctx) => { - console.log(`${agent.metadata.name} started`); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - console.log(`${agent.metadata.name} completed`); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - console.error(`${agent.metadata.name} failed:`, error.message); -}); - -// Session event listeners (inside handler) -ctx.session.addEventListener('completed', (eventName, session) => { - console.log(`Session ${session.id} completed`); -}); - -// Thread event listeners (inside handler) -ctx.thread.addEventListener('destroyed', (eventName, thread) => { - console.log(`Thread ${thread.id} destroyed`); -}); - -// Remove event listener -const listener = (eventName, agent, ctx) => { - /* ... */ -}; -agent.addEventListener('started', listener); -agent.removeEventListener('started', listener); - -// Multiple listeners for same event -agent.addEventListener('started', listener1); -agent.addEventListener('started', listener2); -agent.addEventListener('started', listener3); -``` - -**Available Events**: - -- **Agent Events**: `'started'`, `'completed'`, `'errored'` -- **Session Events**: `'completed'` -- **Thread Events**: `'destroyed'` - -**Gotchas**: - -- Event listeners registered during handler execution may not fire for current execution -- `started` event fires before handler runs, so listeners added in handler won't catch it -- Session `completed` event fires after response is sent -- Thread `destroyed` event only fires when `ctx.thread.destroy()` is called -- Event listener callbacks can be async (return Promise or void) -- Multiple listeners for same event all fire in registration order -- Use `removeEventListener()` with exact same function reference to remove - -## Schema Patterns - -### Common Mistakes - -```typescript -// ❌ WRONG - s.record() requires TWO arguments -s.record(s.string()); - -// ✅ CORRECT -s.record(s.string(), s.string()); // key type, value type - -// ❌ WRONG - s.union() takes args, not array -s.union([s.string(), s.number()]); - -// ✅ CORRECT -s.union(s.string(), s.number()); -``` - -### Agent Schema Pattern - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const myAgent = createAgent('my-agent-name', { - description: 'What this agent does', - schema: { - input: s.object({ - operation: s.string(), - key: s.string().optional(), - value: s.any().optional(), - }), - output: s.object({ - success: s.boolean(), - data: s.any().optional(), - }), - }, - handler: async (ctx, input) => { - // Handler logic - return { success: true }; - }, -}); - -export default myAgent; -``` - -## Web Dashboard - -The integration suite includes a React-based web dashboard for running and visualizing tests. - -**Access**: Start the server and navigate to `http://localhost:3500/` - -**Features**: - -- View all test suites and tests organized hierarchically -- Run individual tests, entire suites, or all tests -- Real-time streaming of test results via SSE -- Visual indicators for pass/fail status -- Error messages and stack traces for failures -- Test duration tracking -- Summary statistics (total, passed, failed, duration) - -**Implementation**: - -- Dashboard: `src/web/index.html` - Single HTML file with embedded React -- API endpoint: `GET /api/test/list` - Returns grouped test suites -- SSE endpoint: `GET /api/test/run` - Streams test execution results -- Styling: TailwindCSS via CDN -- React: Loaded via CDN (development build for debugging) - -**File Structure**: - -``` -src/web/ -└── index.html # React dashboard (auto-served at /) -``` - -## Development Workflow - -### Adding New Tests - -1. **Create Agent(s)**: Add to `src/agent//` with logical grouping -2. **Create Test File**: Add to `src/test/` with descriptive name -3. **Import Tests**: Add import to `app.ts` to register tests -4. **Verify**: Run typecheck, build, and tests -5. **View in Dashboard**: Open http://localhost:3500/ to see and run tests - -```bash -# Typecheck -bun run typecheck - -# Build -bun run build - -# Start server -cd .agentuity && bun run app.js & - -# Run specific suite -curl "http://localhost:3500/api/test/run?suite=storage-kv" - -# Run all tests -curl "http://localhost:3500/api/test/run?concurrency=10" -``` - -### Running Tests - -```bash -# Start server in background -cd .agentuity && bun run app.js 2>&1 & -APP_PID=$! -sleep 5 - -# Run tests via curl -curl -s "http://localhost:3500/api/test/run?concurrency=10" | grep -E '(event:|summary)' - -# Kill server -kill $APP_PID -``` - -### Test Output Format - -**SSE Events**: - -``` -event: start -data: {"type":"start","total":65} - -event: progress -data: {"type":"progress","test":"suite:test-name","passed":true,"duration":5.2} - -event: complete -data: {"type":"complete","summary":{"total":65,"passed":65,"failed":0,"duration":369.2}} -``` - -## Common Patterns - -### Handling Async Iterations - -```typescript -// Reading streams/readers -const chunks: Uint8Array[] = []; -for await (const chunk of reader as any) { - chunks.push(chunk); -} - -// Combine chunks -const combinedChunks = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0)); -let offset = 0; -for (const chunk of chunks) { - combinedChunks.set(chunk, offset); - offset += chunk.length; -} - -// Decode to string -const text = new TextDecoder().decode(combinedChunks); -``` - -### Agent Variable Naming - -Each agent export must have a unique variable name: - -```typescript -// ✅ CORRECT -const kvCrudAgent = createAgent('storage-kv-crud', { ... }); -const streamCrudAgent = createAgent('storage-stream-crud', { ... }); - -// ❌ WRONG - collision! -const agent = createAgent('storage-kv-crud', { ... }); -const agent = createAgent('storage-stream-crud', { ... }); -``` - -### Multiple Operations in One Agent - -```typescript -const myAgent = createAgent('my-agent', { - schema: { - input: s.object({ - operation: s.string(), // Switch on this - // ... operation-specific fields - }), - output: s.object({ - operation: s.string(), - success: s.boolean(), - // ... operation-specific results - }), - }, - handler: async (ctx, input) => { - const { operation } = input; - - switch (operation) { - case 'create': - // Handle create - return { operation, success: true }; - - case 'delete': - // Handle delete - return { operation, success: true }; - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); -``` - -## Debugging - -### Enable Verbose Output - -```bash -# Check what tests are registered -curl "http://localhost:3500/api/test/list" - -# Get all suite names -curl "http://localhost:3500/api/test/suites" - -# Run specific test -curl "http://localhost:3500/api/test/run?suite=storage-kv&test=set" -``` - -### Common Issues - -**Tests not appearing**: - -- Check that test file is imported in `app.ts` -- Verify `test()` function is called (not just defined) -- Rebuild: `bun run build` - -**Agent not found**: - -- Check path alias usage (`@agents/` prefix) -- Verify agent is exported as default -- Rebuild to regenerate registry - -**Type errors**: - -- Run `bun run typecheck` to see all errors -- Check schema definitions match usage -- Verify import paths are correct - -## Test Coverage - -As of Phase 8 completion: - -- **125 total tests** across 12 suites -- **8 basic agent tests** - Core agent functionality -- **12 routing tests** - HTTP methods, params, headers -- **10 KV storage tests** - CRUD, types, concurrent ops -- **12 stream storage tests** - Create, write, read, metadata -- **12 vector storage tests** - Upsert, search, filters -- **11 session tests** - IDs, state, events, persistence -- **6 waitUntil tests** - Background task scheduling -- **15 error handling tests** - Validation errors, StructuredError, propagation -- **15 schema validation tests** - Types, optional fields, nested objects, unions, arrays -- **5 eval framework tests** - Eval creation, execution, scoring -- **8 event system tests** - Agent/session/thread events, listeners, removal -- **11 server resilience tests** - Error handling, crash prevention, fault tolerance - -**Execution Time**: ~475ms for all 125 tests with concurrency 10 - -## Key Learnings Summary - -1. **Path Aliases**: Always use `@agents/*` and `@test/*` - never relative paths -2. **Nested Directories**: Fully supported after bundler fix - organize logically -3. **Test Isolation**: Use `uniqueId()` for all keys/namespaces to prevent cross-contamination -4. **Agent Execution**: Always use `agent.run()`, never `agent.handler()` -5. **Session Context**: `agent.run()` shares session/thread context across all calls in same test -6. **Schema Gotchas**: `s.record(k, v)` needs 2 args, `s.union(a, b)` takes args not array -7. **API Naming**: `ctx.stream` not `ctx.streams`, `ctx.kv`, `ctx.vector` (singular) -8. **Type Safety**: Use `exists` field checks for KV/Vector results -9. **Streaming**: Must accumulate chunks and decode with TextDecoder -10. **No Debug Logs**: Don't add `console.log` to production code - removed from app.ts -11. **WaitUntil**: Background tasks run after response; errors don't fail request; can't call after waitUntilAll -12. **StructuredError**: Pattern is `StructuredError(tag, message)<{ shape }>()` - properties on error instance -13. **Eval Results**: Require `success: true`, `metadata: { reason }`, plus `passed` or `score` -14. **Event System**: Agent events (`started`, `completed`, `errored`), session events (`completed`), thread events (`destroyed`); listeners registered during handler may not fire for current execution; use `removeEventListener()` with same function reference - -## Future Enhancements - -- [ ] Add Phase 3.2: Thread Management Tests (thread persistence across requests) -- [ ] Add Phase 4: Lifecycle & Hooks Tests (waitUntil, app hooks) -- [ ] Add Phase 5: Error Handling Tests (validation, structured errors) -- [ ] Add Phase 6: Communication Tests (email, SMS, events, WebSocket, SSE) -- [ ] Add Phase 7: Advanced Tests (evals, workbench components) -- [ ] Performance benchmarking suite -- [ ] CI/CD integration with automated test runs -- [ ] HTML report generation diff --git a/apps/testing/integration-suite/README.md b/apps/testing/integration-suite/README.md deleted file mode 100644 index e5a4d1d34..000000000 --- a/apps/testing/integration-suite/README.md +++ /dev/null @@ -1,161 +0,0 @@ -# Integration Suite - -End-to-end integration testing suite for the Agentuity SDK. - -**📋 [Read STATUS.md](./STATUS.md) for complete overview, current status, and future work.** -**📖 [Read AGENTS.md](./AGENTS.md) for testing patterns, API reference, and best practices.** - -## Overview - -This app provides comprehensive integration tests for all SDK functionality. Tests run in a single server instance and can be triggered via HTTP endpoints with real-time SSE streaming of results. - -**Current Status**: 199 tests passing (100%) - -## Quick Start - -```bash -# Install dependencies (from SDK root) -cd sdk -bun install - -# Build the integration suite -cd apps/testing/integration-suite -bun run build - -# Run the server -bun run dev -``` - -Server starts on port 3600 (configured in `agentuity.json`). - -## Running Tests - -### Trigger All Tests - -```bash -curl http://localhost:3600/api/test/run -``` - -### Filter by Suite - -```bash -curl http://localhost:3600/api/test/run?suite=basic -``` - -### Filter by Test Name - -```bash -curl http://localhost:3600/api/test/run?test=simple -``` - -### Control Concurrency - -```bash -curl http://localhost:3600/api/test/run?concurrency=20 -``` - -### Watch SSE Stream - -```bash -curl -N http://localhost:3600/api/test/run -``` - -The `-N` flag disables buffering so you see results in real-time. - -## API Endpoints - -- `GET /health` - Health check -- `GET /api/test/run` - Run tests with SSE streaming -- `GET /api/test/suites` - List available test suites -- `GET /api/test/list` - List all tests (optional `?suite=` filter) - -## SSE Event Format - -### Start Event - -``` -event: start -data: {"type":"start","summary":{"total":10,"passed":0,"failed":0,"duration":0}} -``` - -### Progress Event - -``` -event: progress -data: {"type":"progress","test":"basic:simple","passed":true,"duration":12.5} -``` - -### Error Event - -``` -event: progress -data: {"type":"progress","test":"basic:failing","passed":false,"error":"Assertion failed","stack":"...","duration":5.2} -``` - -### Complete Event - -``` -event: complete -data: {"type":"complete","summary":{"total":10,"passed":8,"failed":2,"duration":125.7}} -``` - -## Test Structure - -Tests are organized by suite and registered using the `test()` function: - -```typescript -import { test } from '../test/suite'; - -test('basic', 'simple', async () => { - // Your test code here -}); -``` - -## Test Isolation - -Each test should use unique IDs to ensure isolation: - -```typescript -import { uniqueId } from '../test/helpers'; - -test('storage', 'kv-set', async () => { - const key = uniqueId('kv-test'); - // Use key in test... -}); -``` - -## Adding New Tests - -1. Create agent/API/web route in appropriate directory -2. Create test file that registers tests with `test()` function -3. Import test file in app.ts or let bundler auto-discover -4. Rebuild and run - -## Project Structure - -``` -src/ -├── agent/ # Agent-based tests -├── api/ # API-only tests -├── web/ # React component tests -└── test/ # Test infrastructure - ├── suite.ts # Test registry - ├── route.ts # SSE endpoint - └── helpers/ # Test utilities -``` - -## Development - -- **Build**: `bun run build` - Compiles the app -- **Dev**: `bun run dev` - Runs the compiled app -- **Typecheck**: `bun run typecheck` - Type checking only - -## CI/CD Integration - -Parse SSE events to determine test success: - -```bash -curl -N http://localhost:3600/api/test/run | \ - grep "event: complete" -A 1 | \ - grep "failed\":0" && echo "Tests passed" || echo "Tests failed" -``` diff --git a/apps/testing/integration-suite/STATUS.md b/apps/testing/integration-suite/STATUS.md deleted file mode 100644 index 9dfb918ae..000000000 --- a/apps/testing/integration-suite/STATUS.md +++ /dev/null @@ -1,762 +0,0 @@ -# Integration Suite - Complete Status - -**Last Updated**: December 10, 2024 -**Status**: ✅ COMPLETE - 227 tests passing (100%) - ---- - -## Quick Summary - -Successfully completed integration-suite port with: - -- **227 tests passing** (100% success rate, up from 71 with 6 failures) -- **54 new tests** migrated from legacy shell scripts -- **6 core bugs fixed** (KV JSON parsing, vector dimensions) -- **CI integration working** (tests now run in GitHub Actions) -- **Unit test organization** ✅ COMPLETE - Package-level tests properly organized -- **Thread persistence** ✅ COMPLETE - Cross-agent thread state sharing -- **WebSocket** ✅ COMPLETE - Real-time bidirectional communication -- **SSE** ✅ COMPLETE - Server-sent event streaming -- **Cloud deployment tests** ✅ COMPLETE - End-to-end CLI deployment testing (separate suite) -- **Ready for production** - ---- - -## Unit Test Organization (December 10, 2024) - -Successfully completed package-level test organization: - -### Runtime Package (`packages/runtime/test/`) - -**Created `lifecycle/` subdirectory:** - -- `lifecycle/waituntil.test.ts` - 8 comprehensive unit tests for `ctx.waitUntil()` background tasks -- Tests cover: async/sync tasks, error handling, promise support, execution order, nested calls - -**Reorganized `communication/` subdirectory:** - -- Moved `router.email.test.ts` → `communication/email.test.ts` -- 12 existing tests for email parsing and routing -- Better organization for future communication features (SMS, WebSocket, SSE) - -### CLI Package (`packages/cli/test/`) - -**Created `build/` subdirectory:** - -- Moved `build-api-integration.test.ts` → `build/api-integration.test.ts` -- 2 tests for build system metadata and API integration - -**Created `config/` subdirectory:** - -- Moved `env-util.test.ts` → `config/env-util.test.ts` -- 30 comprehensive tests for secret detection and environment variable handling - -### Test Results - -All package tests passing: - -- **Runtime**: 170 tests passing (17 test files) -- **CLI**: 284 tests passing (23 test files) -- **Total**: 454+ package-level unit tests -- **Typecheck**: ✅ All packages pass -- **Lint**: ✅ No errors or warnings - ---- - -## Thread Persistence Tests (December 10, 2024) - -Successfully implemented comprehensive thread persistence testing: - -### New Agents Created - -**State Writer Agent** (`src/agent/state/writer-agent.ts`): - -- Writes arbitrary key-value pairs to thread state -- Used to test cross-agent data sharing -- Endpoint: `POST /api/agent/state-writer` - -**State Reader Agent** (`src/agent/state/reader-agent.ts`): - -- Reads thread state written by other agents -- Returns all keys in thread state -- Endpoint: `POST /api/agent/state-reader` - -### New Tests Added (4 tests) - -1. **Cross-agent state sharing** - Writer agent saves data, reader agent retrieves it from same thread -2. **Multiple agents thread state** - Multiple agents write different keys, reader sees all -3. **Thread state across agent switches** - State persists when switching between different agent types -4. **Complex object persistence** - Nested objects (user profiles, metadata) persist correctly - -### Test Results - -HTTP State Persistence Suite: - -- **Total**: 12 tests (up from 8) -- **Passing**: 12/12 (100%) -- **Coverage**: Thread persistence, session isolation, cross-agent sharing, complex objects -- **Execution time**: ~16 seconds - -### Key Capabilities Validated - -✅ Thread state persists across HTTP requests with same cookie -✅ Session state does NOT persist (request-scoped isolation) -✅ Different agents can read/write to same thread state -✅ Complex nested objects serialize/deserialize correctly -✅ Thread IDs remain consistent across requests -✅ Multiple concurrent threads maintain isolation - ---- - -## WebSocket Tests (December 10, 2024) - -Successfully implemented comprehensive real-time WebSocket testing: - -### WebSocket Endpoints Created - -**Echo Endpoint** (`/api/ws/echo`): - -- Simple echo server that mirrors back any message received -- Used for basic connectivity and message exchange testing - -**Broadcast Endpoint** (`/api/ws/broadcast`): - -- Broadcasts messages to all connected clients -- Tests multi-client scenarios and client management - -**Counter Endpoint** (`/api/ws/counter`): - -- Stateful WebSocket with increment/decrement/reset operations -- Tests stateful connections and JSON message exchange - -### WebSocket Client Helper - -Created `WebSocketTestClient` class with: - -- Connection management (`connect()`, `close()`, `isConnected()`) -- Message sending (`send()` for strings and JSON) -- Message receiving (`receive()`, `receiveJSON()` with timeouts) -- Queue management for handling multiple messages - -### Tests Added (12 tests) - -1. **Basic connection** - Connect and disconnect lifecycle -2. **Echo single message** - Send and receive one message -3. **Echo multiple messages** - Send and receive multiple messages in order -4. **JSON message exchange** - Send and parse JSON objects -5. **Counter increment** - Increment stateful counter -6. **Counter decrement** - Decrement stateful counter -7. **Counter reset** - Reset counter to zero -8. **Broadcast multiple clients** - Multiple clients receive broadcast messages -9. **Broadcast client disconnect** - Cleanup when client disconnects -10. **Large message handling** - Handle 10KB messages -11. **Rapid message exchange** - 50 messages sent rapidly maintain order -12. **Connection persistence** - Connection stays active across time - -### Test Results - -WebSocket Suite: - -- **Total**: 12 tests -- **Passing**: 12/12 (100%) -- **Coverage**: Connection lifecycle, message exchange, broadcast, stateful connections -- **Execution time**: ~2.3 seconds - -### Key Capabilities Validated - -✅ WebSocket connections establish and close properly -✅ Messages are echoed back correctly (single and multiple) -✅ JSON messages serialize/deserialize properly -✅ Stateful connections maintain state across messages -✅ Broadcast works with multiple concurrent clients -✅ Client disconnect cleanup prevents memory leaks -✅ Large messages (10KB+) handled correctly -✅ Rapid message exchanges maintain order -✅ Connections persist over time (2+ seconds) - ---- - -## SSE (Server-Sent Events) Tests (December 10, 2024) - -Successfully implemented comprehensive server-to-client event streaming: - -### SSE Endpoints Created - -**Simple Endpoint** (`/api/sse/simple`): - -- Sends 3 sequential messages for basic testing -- Tests connection lifecycle and message reception - -**Events Endpoint** (`/api/sse/events`): - -- Named events with types: `start`, `update`, `complete` -- Tests event type handling and filtering - -**Counter Endpoint** (`/api/sse/counter`): - -- Parameterized via query params (`count`, `delay`) -- Tests configurable streaming behavior - -**Long-lived Endpoint** (`/api/sse/long-lived`): - -- Duration-based streaming (configurable via `duration` param) -- Tests connection persistence over time - -**Abort Test Endpoint** (`/api/sse/abort-test`): - -- Detects client disconnection via `onAbort` -- Tests cleanup when client closes connection - -### SSE Client Helper - -Created fetch-based `SSETestClient` (EventSource not available in Bun): - -- Manual text/event-stream parsing -- Message queueing and event type filtering -- Timeout support for message reception -- Event listener registration for named events -- Connection lifecycle management - -### Tests Added (12 tests) - -1. **Basic connection** - Connect, receive messages, disconnect -2. **Receive multiple messages** - Wait for N messages at once -3. **Named events** - Event type filtering and handlers -4. **Receive specific event** - Wait for particular event type -5. **Query parameters** - Configure stream via URL params -6. **JSON data parsing** - Parse JSON message data -7. **Long-lived connection** - Streams lasting 500ms+ -8. **Connection persistence** - Connection stays active across time -9. **Event ordering** - Messages arrive in correct order -10. **Pending messages** - Retrieve all queued messages -11. **Client abort** - Graceful disconnect handling -12. **Multiple sequential connections** - Independent connection instances - -### Test Results - -SSE Suite: - -- **Total**: 12 tests -- **Passing**: 12/12 (100%) -- **Coverage**: Event streaming, named events, long-lived connections, client abort -- **Execution time**: ~1.4 seconds - -### Key Capabilities Validated - -✅ SSE connections establish and stream correctly -✅ Multiple messages received in sequential order -✅ Named events (start/update/complete) work properly -✅ Query parameters control stream behavior -✅ JSON message data serialization/deserialization -✅ Long-lived connections (500ms+) remain active -✅ Connection persistence verified -✅ Event stream ordering maintained -✅ Client abort detection and cleanup -✅ Sequential connections are independent - ---- - -## What We Have Now - -### Test Coverage (227 tests) - -| Suite | Tests | What It Tests | -| ------------------ | ----- | -------------------------------------------------------- | -| Basic Agents | 8 | Core agent functionality | -| Routing | 12 | HTTP methods, params, headers | -| KV Storage | 10 | CRUD, types, concurrency | -| Stream Storage | 12 | Create, write, read, metadata | -| Vector Storage | 12 | Upsert, search, filters | -| Session/Thread | 11 | IDs, state, events, persistence | -| WaitUntil | 6 | Background task scheduling | -| Error Handling | 15 | Validation errors, StructuredError | -| Schema Validation | 15 | Types, optional fields, unions, arrays | -| Eval Framework | 5 | Eval creation, execution, scoring | -| Event System | 8 | Agent/session/thread events, listeners | -| Server Resilience | 11 | Error handling, fault tolerance | -| **Binary Storage** | 10 | ⭐ File uploads, PDFs, MD5 verification | -| **HTTP State** | 12 | ⭐ Cross-request thread persistence, cross-agent sharing | -| **CLI API Keys** | 6 | ⭐ Key management via CLI | -| **CLI Deployment** | 15 | ⭐ Cloud deployment workflow | -| **CLI Vector** | 11 | ⭐ Vector CLI operations | -| **WebSocket** | 12 | ⭐ Real-time bidirectional messaging | -| **SSE** | 12 | ⭐ Server-sent event streaming | - -### Key Files - -``` -integration-suite/ -├── STATUS.md ← YOU ARE HERE (read this first!) -├── AGENTS.md ← Testing patterns & API reference (comprehensive guide) -├── README.md ← Quick start -│ -├── src/agent/ ← Test agents (organized by feature) -├── src/test/ ← Test suites (199 tests) -├── src/test/helpers/ ← Shared utilities (cli, http, thread) -├── scripts/ci-test.sh ← CI test runner -└── .agentuity/ ← Built output (server runs here) -``` - ---- - -## Bugs Fixed - -### 1. KV JSON Parse Error (3 tests) - -**File**: `packages/runtime/src/services/local/keyvalue.ts` - -**Problem**: Buffer deserialization failures when retrieving numbers/booleans from SQLite - -```typescript -// Before: Would crash with "JSON Parse error" -const result = await ctx.kv.get(namespace, 'my-number'); -``` - -**Fix**: Added try-catch error handling with graceful Uint8Array fallback - -```typescript -try { - data = JSON.parse(text); -} catch { - data = new Uint8Array(row.value) as T; -} -``` - -### 2. Vector Dimension Mismatch (3 tests) - -**File**: `packages/runtime/src/services/local/vector.ts` - -**Problem**: Query embeddings defaulted to 128 dimensions, stored vectors were 1536 - -```typescript -// Before: Crashed with "Vectors must have the same dimension" -const queryEmbedding = simpleEmbedding(params.query); // 128 dims -const embedding = JSON.parse(row.embedding); // 1536 dims -const similarity = cosineSimilarity(queryEmbedding, embedding); // ERROR! -``` - -**Fix**: Auto-detect dimensions from stored vectors - -```typescript -// Detect dimensionality from first stored vector -const firstEmbedding = JSON.parse(rows[0].embedding); -const dimensions = firstEmbedding.length; - -// Generate query embedding with matching dimensions -const queryEmbedding = simpleEmbedding(params.query, dimensions); -``` - ---- - -## CI Integration Fixed - -### Problem - -Integration-suite tests were NOT running in GitHub Actions because: - -1. `AGENTUITY_SDK_KEY` was not set (required by `ci-test.sh`) -2. `OPENAI_API_KEY` was not set (required for embeddings) -3. Script exited early but didn't fail the build -4. Only unit tests (`.test.ts` files) were running - -### Solution - -**File**: `.github/workflows/build.yaml` - -```yaml -- name: Setup test credentials - run: | - # ... existing CLI key setup ... - - # Set SDK key for integration-suite tests - echo "AGENTUITY_SDK_KEY=${{ secrets.AGENTUITY_SDK_KEY }}" >> $GITHUB_ENV - - # Set OpenAI API key for embedding operations - echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> $GITHUB_ENV -``` - -**File**: `apps/testing/integration-suite/scripts/ci-test.sh` - -```bash -# Add OpenAI API key if available -if [ -n "$OPENAI_API_KEY" ]; then - echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> "$APP_DIR/.env" -fi -``` - -### Result - -✅ Integration-suite now runs against production Catalyst API in CI -✅ All 199 tests validate cloud integration on every PR/merge -✅ The 6 bugs we fixed would have been caught going forward - ---- - -## What's Next (Future Work) - -### Deferred - Low Priority - -**Dev Mode Reload Tests** (8-10 tests) - -- Requires running in dev mode with file watching -- Developer-facing, not production-critical -- Better as separate E2E suite or manual testing - -**Unit Test Migration** ✅ COMPLETE - -Package-level tests organized by responsibility: - -- Build metadata → `packages/cli/test/build/` (2 tests) -- Env/secrets → `packages/cli/test/config/` (30 tests) -- Lifecycle hooks → `packages/runtime/test/lifecycle/` (8 new tests) -- Email → `packages/runtime/test/communication/` (12 tests) - -### Future Enhancements - New Features - -**Thread Persistence** ✅ COMPLETE (December 10, 2024) - -- ✅ Test thread data across multiple HTTP requests -- ✅ Validate state sharing between different agents -- ✅ Complex object persistence -- ✅ Cross-agent communication via shared thread state - -**WebSocket** ✅ COMPLETE (December 10, 2024) - -- ✅ Real-time bidirectional messaging -- ✅ Connection lifecycle testing -- ✅ Broadcast and stateful connections -- ✅ Large message and rapid exchange handling - -**SSE (Server-Sent Events)** ✅ COMPLETE (December 10, 2024) - -- ✅ Event streaming tests with named events -- ✅ Long-lived connections (500ms+) -- ✅ Client abort detection and cleanup -- ✅ Query parameter configuration - -**Email & SMS** (3-4 hours) - -- Communication API tests -- Mock SMTP/SMS services -- Template rendering validation - -**Performance Benchmarking** (6-8 hours) - -- Load testing (100+ concurrent requests) -- Large payload handling (10MB+ files) -- Memory leak detection -- Response time percentiles - ---- - -## Cloud Deployment Tests (December 10, 2024) - -Successfully created separate **standalone** cloud deployment test suite: - -### Architecture - -**Location**: `sdk/apps/testing/cloud-deployment/` - -**Purpose**: End-to-end integration tests for CLI cloud deployment commands - -**Key Features**: - -- Standalone app with minimal test agent (no dependencies on integration-suite) -- Tests full deployment lifecycle -- Validates cloud infrastructure interaction -- Runs in CI with authentication -- Small footprint (13MB build vs 65MB) - -### What It Tests - -1. **Authentication** - CLI auth whoami verification -2. **Deployment** - cloud deploy, list, show, remove, undeploy -3. **Agent Management** - cloud agent list, get -4. **Session Tracking** - cloud session get, list, logs -5. **Rollback** - cloud deployment rollback to previous version -6. **HTTP Invocation** - Real requests to deployed agents -7. **Cleanup** - Automatic undeploy after tests - -### Running Cloud Deployment Tests - -**Local**: - -```bash -cd sdk/apps/testing/cloud-deployment -bun test -``` - -**CI**: Runs automatically in `cloud-deployment-test` job in `package-smoke-test.yaml` - -### Test Coverage - -- ✅ 10 test scenarios covering full deployment workflow -- ✅ ~3-5 minutes execution time -- ✅ Handles transient deployment errors gracefully -- ✅ Automatic cleanup (undeploy) -- ✅ Session capture and log verification - -### Key Differences from Integration Suite - -| Aspect | Integration Suite | Cloud Deployment Tests | -| ---------------- | ------------------------- | -------------------------- | -| **Focus** | SDK runtime APIs | CLI cloud commands | -| **Execution** | Local agent.run() | Real cloud deployments | -| **Scope** | Storage, sessions, agents | Deploy, rollback, sessions | -| **Duration** | ~70 seconds | ~3-5 minutes | -| **Network** | Local only | Real cloud infrastructure | -| **App Size** | 65MB (227 tests) | 13MB (1 simple agent) | -| **Dependencies** | Standalone | Standalone | - ---- - -## How to Use This Suite - -### Run All Tests (Local) - -```bash -cd sdk/apps/testing/integration-suite -bun run build -cd .agentuity -bun run app.js & -sleep 3 -curl "http://localhost:3500/api/test/run?concurrency=20" -``` - -### Run Specific Tests - -```bash -# Single suite -curl "http://localhost:3500/api/test/run?suite=storage-kv" - -# Single test -curl "http://localhost:3500/api/test/run?suite=storage-kv&test=set" -``` - -### View Web Dashboard - -```bash -cd .agentuity && bun run app.js -# Open http://localhost:3500/ in browser -``` - -### Verify Everything Works - -```bash -cd sdk -bun all # format, build, lint, typecheck, test -``` - ---- - -## Testing Patterns - -The integration-suite supports 4 testing patterns: - -### 1. Agent Logic Tests (Most Common) - -**Use**: Storage APIs, schemas, core agent functionality -**Method**: `agent.run()` - -```typescript -test('storage-kv', 'set', async () => { - const result = await kvAgent.run({ - operation: 'set', - key: uniqueId('test'), - value: 'data', - }); - assertEqual(result.success, true); -}); -``` - -### 2. HTTP Client Tests - -**Use**: Cross-request state, real HTTP flow, cookies -**Method**: `fetch()` with cookie jar - -```typescript -test('http-state', 'thread-persistence', async () => { - const client = new HttpClient(); - - // First request - creates thread - const res1 = await client.post('/agent/state', { count: 1 }); - const threadId = client.getThreadId(); - - // Second request - uses same thread - const res2 = await client.post('/agent/state', { count: 2 }); - assertEqual(res2.count, 2); // Thread state persisted -}); -``` - -### 3. CLI Subprocess Tests - -**Use**: Cloud deployment, CLI operations -**Method**: `Bun.$` subprocess execution - -```typescript -test('cli-deployment', 'deploy', async () => { - const result = await cliAgent.run({ - command: 'deploy', - agent: 'my-agent', - }); - assertEqual(result.success, true); - assertDefined(result.deploymentId); -}); -``` - -### 4. Unit Tests - -**Use**: Package-specific logic (build, config, etc.) -**Method**: Mocks/stubs -**Location**: In respective packages, not integration-suite - ---- - -## Critical Learnings - -### Test Isolation - -❌ **WRONG**: Shared keys cause test failures - -```typescript -await kvAgent.run({ key: 'test-key', value: 'data1' }); -await kvAgent.run({ key: 'test-key', value: 'data2' }); // Collision! -``` - -✅ **CORRECT**: Use `uniqueId()` for isolation - -```typescript -const key1 = uniqueId('test'); // 'test-1733501234567-abc123' -const key2 = uniqueId('test'); // 'test-1733501234568-def456' -``` - -### Session Context Sharing - -All `agent.run()` calls in the same test share session/thread context: - -```typescript -test('example', async () => { - await agent1.run({ data: 'A' }); // Session X, Thread Y - await agent2.run({ data: 'B' }); // Same Session X, Thread Y - // Both agents see same thread state! -}); -``` - -### KV Value Decoding - -KV values are Uint8Arrays that get stringified through `agent.run()`: - -```typescript -const result = await kvAgent.run({ operation: 'get', key }); -// result.value is a stringified Uint8Array -const decoded = decodeKVValue(result.value); // Use helper! -``` - -### Vector Dimensions - -Let the system auto-detect - don't hardcode: - -```typescript -// ✅ System auto-detects from stored vectors -await ctx.vector.search(namespace, { query: 'search text' }); - -// ❌ Don't manually create embeddings with fixed dimensions -const embedding = new Array(128).fill(0); // Might not match! -``` - -### StructuredError Properties - -Error properties are directly on the instance: - -```typescript -const error = new ValidationError({ field: 'email', reason: 'Invalid' }); -console.log(error.field); // ✅ 'email' -console.log(error.reason); // ✅ 'Invalid' -// NOT error.data.field! -``` - ---- - -## File Organization - -### Test Files (`src/test/`) - -- **Descriptive names**: `storage-kv.ts`, `cli-deployment.ts` -- **Suite grouping**: First param to `test()` groups related tests -- **Clear test names**: `test('storage-kv', 'set-and-get', ...)` - -### Agents (`src/agent/`) - -- **Feature-based folders**: `storage/kv/`, `cli/`, `state/` -- **Unique variable names**: `kvCrudAgent`, `streamCrudAgent` -- **Default exports**: `export default myAgent;` - -### Helpers (`src/test/helpers/`) - -- **Shared utilities**: `cli.ts`, `http-client.ts`, `kv.ts` -- **Reusable functions**: `uniqueId()`, `decodeKVValue()` - ---- - -## Performance - -- **Total Tests**: 199 -- **Execution Time**: ~70 seconds (concurrency 20) -- **Average per Test**: ~350ms -- **Pass Rate**: 100% - ---- - -## Next Session Quick Start - -1. **Read this document** (STATUS.md) to understand current state -2. **Check AGENTS.md** if you need testing pattern details -3. **Pick work from "What's Next" section** above -4. **Run tests to verify**: `bun all` -5. **Start coding**: Follow patterns in existing tests - ---- - -## Common Commands - -```bash -# Build and test everything -cd sdk && bun all - -# Run integration-suite server -cd sdk/apps/testing/integration-suite/.agentuity -bun run app.js - -# Run specific test suite -curl "http://localhost:3500/api/test/run?suite=storage-kv" - -# View test results in browser -open http://localhost:3500/ - -# Typecheck specific package -cd sdk/packages/runtime && bun run typecheck - -# Build integration-suite -cd sdk/apps/testing/integration-suite && bun run build -``` - ---- - -## Important Files - -### Must Read - -- **STATUS.md** (this file) - Complete status and guide -- **AGENTS.md** - Comprehensive testing patterns and API reference - -### Reference Only - -- **README.md** - Quick start guide -- **scripts/ci-test.sh** - CI test runner -- **package.json** - Scripts and dependencies - ---- - -**That's it!** Everything you need to know is in this document. Check AGENTS.md for detailed API patterns. - -**Status**: Ready for production ✅ diff --git a/apps/testing/integration-suite/agentuity.json b/apps/testing/integration-suite/agentuity.json deleted file mode 100644 index 72090e569..000000000 --- a/apps/testing/integration-suite/agentuity.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "https://agentuity.dev/schema/cli/v1/agentuity.json", - "projectId": "proj_60ab98d5d54bf72dd32d47f1e32968ef", - "orgId": "org_38uEd1JNXIe89KMPaOwx1WJW43o", - "region": "usc", - "deployment": { - "resources": { - "memory": "500Mi", - "cpu": "500m", - "disk": "500Mi" - }, - "domains": [] - } -} diff --git a/apps/testing/integration-suite/app.ts b/apps/testing/integration-suite/app.ts deleted file mode 100644 index 7bbc52a69..000000000 --- a/apps/testing/integration-suite/app.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { createApp } from '@agentuity/runtime'; -import { InMemoryThreadProvider } from './src/test/helpers/thread-provider'; -import { testSessionEventProvider } from './src/test/helpers/session-event-provider'; -import router from './src/api/router'; -import agents from './src/agent'; - -// Import test files to register tests -import './src/test/basic-agents'; -import './src/test/agent-nested'; -import './src/test/routing-agents'; -import './src/test/routing-subdirs'; -import './src/test/storage-kv'; -import './src/test/storage-stream'; -import './src/test/storage-vector'; -import './src/test/session-basic'; -import './src/test/lifecycle-waituntil'; -import './src/test/errors'; -import './src/test/schema-validation'; -import './src/test/events'; -import './src/test/resilience'; -import './src/test/storage-binary'; -import './src/test/http-state-persistence'; -import './src/test/cli-deployment'; -import './src/test/cli-apikey'; -import './src/test/cli-vector'; -import './src/test/cli-env-secrets'; -import './src/test/cli-org-env-secrets'; -import './src/test/websocket'; -import './src/test/sse'; -import './src/test/web-rendering'; -import './src/test/env-loading'; -import './src/test/middleware-patterns'; -import './src/test/evals'; -import './src/test/ai-sdk-gateway'; -import './src/test/session-agent-ids'; -import './src/test/sandbox-basic'; - -const threadProvider = new InMemoryThreadProvider(); - -const app = await createApp({ - router: { path: '/api', router }, - agents, - services: { - thread: threadProvider, - sessionEvent: testSessionEventProvider, - }, -}); - -// Log server URL for debugging -console.log(`[TEST-SUITE] Server started: ${app.server.url}`); -console.log(`[TEST-SUITE] Profile: ${process.env.AGENTUITY_PROFILE || 'default'}`); -console.log(`[TEST-SUITE] Region: ${process.env.AGENTUITY_REGION || 'default'}`); - -export default app; diff --git a/apps/testing/integration-suite/package.json b/apps/testing/integration-suite/package.json index a28573864..c8ccd8cee 100644 --- a/apps/testing/integration-suite/package.json +++ b/apps/testing/integration-suite/package.json @@ -5,31 +5,24 @@ "private": true, "type": "module", "scripts": { - "build": "bun ../../../packages/cli/bin/cli.ts build --dir . --dev", - "dev": "bun ../../../packages/cli/bin/cli.ts dev --dir .", - "test": "bash scripts/ci-test.sh", + "dev": "bun --hot src/index.ts", + "build": "bun build src/index.ts --outdir dist --target node", + "start": "node dist/index.js", + "test": "bun test", "typecheck": "bunx tsc --noEmit" }, "dependencies": { - "@agentuity/cli": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/workbench": "workspace:*", - "@agentuity/evals": "workspace:*", - "@ai-sdk/openai": "^3.0.0", - "ai": "^6.0.0", - "hono": "^4.7.13", - "react": "^19.2.1", - "react-dom": "^19.2.1" + "@agentuity/keyvalue": "workspace:*", + "@agentuity/vector": "workspace:*", + "@agentuity/queue": "workspace:*", + "@agentuity/email": "workspace:*", + "@agentuity/schedule": "workspace:*", + "@agentuity/task": "workspace:*", + "hono": "^4.7.13" }, "devDependencies": { "@types/bun": "latest", - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^4.5.2", - "vite": "^7.2.7" + "typescript": "^5" } } diff --git a/apps/testing/integration-suite/scripts/ci-test.sh b/apps/testing/integration-suite/scripts/ci-test.sh deleted file mode 100755 index 501a88f5c..000000000 --- a/apps/testing/integration-suite/scripts/ci-test.sh +++ /dev/null @@ -1,294 +0,0 @@ -#!/bin/bash -# Integration Suite Test Runner -# Expects SDK packages to be pre-installed from tarballs -# Run locally: bash scripts/ci-test.sh -# Run in CI: Same command (env vars differ) - -set -e - -# Cleanup .env file on exit (regardless of success/failure) -trap 'rm -f "$APP_DIR/.agentuity/.env"' EXIT - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -APP_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -PORT=3500 -TIMEOUT=60 - -# Colors -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' - -echo "===================================" -echo "Integration Suite - Test Runner" -echo "===================================" -echo "" - -# Load .env.local if it exists and AGENTUITY_SDK_KEY is not already set -if [ -z "$AGENTUITY_SDK_KEY" ] && [ -f "$APP_DIR/.env.local" ]; then - echo -e "${YELLOW}ℹ${NC} Loading environment from .env.local for local development" - export $(grep -v '^#' "$APP_DIR/.env.local" | xargs) -fi - -# Check for required secrets -if [ -z "$AGENTUITY_SDK_KEY" ]; then - echo -e "${RED}✗ ERROR:${NC} AGENTUITY_SDK_KEY not found" - echo "For local development, create .env.local with AGENTUITY_SDK_KEY" - echo "For CI, configure AGENTUITY_SDK_KEY as a GitHub Actions secret" - exit 1 -fi - -echo -e "${GREEN}✓${NC} API key configured" - -# Verify SDK packages are installed -echo "" -echo "Verifying SDK packages are installed..." -if [ ! -d "$APP_DIR/node_modules/@agentuity/core" ] || \ - [ ! -d "$APP_DIR/node_modules/@agentuity/runtime" ] || \ - [ ! -d "$APP_DIR/node_modules/@agentuity/cli" ]; then - echo -e "${RED}✗ ERROR:${NC} SDK packages not installed" - echo "Run: bash scripts/install-sdk-tarballs.sh apps/testing/integration-suite" - exit 1 -fi -echo -e "${GREEN}✓${NC} SDK packages installed" - -# Clean up .env file before build to remove any test-generated keys from previous runs -# These keys can pollute the Vite build (Vite's define feature can't handle some key patterns) -if [ -f "$APP_DIR/.env" ]; then - echo "Cleaning .env file (removing test-generated keys)..." - # Keep only essential keys, remove everything else - grep -E '^(AGENTUITY_SDK_KEY|AGENTUITY_REGION|OPENAI_API_KEY)=' "$APP_DIR/.env" > "$APP_DIR/.env.clean" 2>/dev/null || true - mv "$APP_DIR/.env.clean" "$APP_DIR/.env" -fi - -# Build the app -echo "" -echo "Building integration suite..." -cd "$APP_DIR" -bun run build - -# Copy web dashboard (CLI doesn't copy this in dev mode) -mkdir -p .agentuity/web -cp src/web/index.html .agentuity/web/ - -echo -e "${GREEN}✓${NC} Build complete" - -# Create .env file AFTER build (build clears .agentuity directory) -# This overwrites the .env.local copy with CI/test credentials -echo "AGENTUITY_SDK_KEY=$AGENTUITY_SDK_KEY" > "$APP_DIR/.agentuity/.env" - -# Set region (use environment variable if set, otherwise default to local for dev) -REGION="${AGENTUITY_REGION:-local}" -echo "AGENTUITY_REGION=$REGION" >> "$APP_DIR/.agentuity/.env" - -# Add OpenAI API key if available (required for vector embedding operations) -if [ -n "$OPENAI_API_KEY" ]; then - echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> "$APP_DIR/.agentuity/.env" - echo -e "${GREEN}✓${NC} OpenAI API key configured for vector operations" -fi - -# Also create .env in project directory for CLI commands (they run from project dir, not .agentuity) -# The CLI looks for SDK key in the project directory's .env file -echo "AGENTUITY_SDK_KEY=$AGENTUITY_SDK_KEY" > "$APP_DIR/.env" -echo "AGENTUITY_REGION=$REGION" >> "$APP_DIR/.env" -if [ -n "$OPENAI_API_KEY" ]; then - echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> "$APP_DIR/.env" -fi - -echo -e "${GREEN}✓${NC} Environment configured (region: $REGION)" - -# Set service URLs based on region (required for LLM patching) -# This mirrors what dev mode does in dev/index.ts - uses getServiceUrls() from @agentuity/server -echo "Computing service URLs for region: $REGION" -eval "$(bun "$SCRIPT_DIR/get-service-urls.ts")" -echo -e "${GREEN}✓${NC} Service URLs configured: $AGENTUITY_TRANSPORT_URL" - -# Start server in background -echo "" -echo "Starting test server on port $PORT..." -cd "$APP_DIR/.agentuity" -LOG_FILE="/tmp/integration-suite.log" -bun run app.js > "$LOG_FILE" 2>&1 & -SERVER_PID=$! -echo "Server PID: $SERVER_PID" -echo "Logs: $LOG_FILE" - -# Give server a moment to crash if there's a startup error -sleep 2 -if ! ps -p $SERVER_PID > /dev/null 2>&1; then - echo -e "${RED}✗ ERROR:${NC} Server crashed immediately after startup" - echo "" - echo "Server logs:" - cat "$LOG_FILE" - exit 1 -fi - -# Wait for server to be ready -echo "Waiting for server health check..." -ATTEMPTS=0 -while [ $ATTEMPTS -lt $TIMEOUT ]; do - if curl -s -f "http://127.0.0.1:$PORT/api/health" > /dev/null 2>&1; then - echo -e "${GREEN}✓${NC} Server is ready" - break - fi - sleep 1 - ATTEMPTS=$((ATTEMPTS + 1)) -done - -if [ $ATTEMPTS -eq $TIMEOUT ]; then - echo -e "${RED}✗ ERROR:${NC} Server failed to start within ${TIMEOUT}s" - echo "" - echo "Server logs:" - tail -50 /tmp/integration-suite.log - kill $SERVER_PID 2>/dev/null || true - exit 1 -fi - -# Track aggregate results -TOTAL=0 -PASSED=0 -FAILED=0 -DURATION=0 - -# Function to run tests and parse results -# Usage: run_tests -run_tests() { - local URL_PARAMS="$1" - local DESCRIPTION="$2" - local RESULT_FILE="/tmp/integration-suite-results.txt" - - echo "" - echo "$DESCRIPTION" - echo "" - - curl -s "http://127.0.0.1:$PORT/api/test/run?$URL_PARAMS" > "$RESULT_FILE" - - local RUN_TOTAL=0 - local RUN_PASSED=0 - local RUN_FAILED=0 - local RUN_DURATION=0 - - while IFS= read -r line; do - [ -z "$line" ] && continue - - if [[ "$line" =~ ^event:\ (.*)$ ]]; then - EVENT="${BASH_REMATCH[1]}" - continue - fi - - if [[ "$line" =~ ^data:\ (.*)$ ]]; then - DATA="${BASH_REMATCH[1]}" - - if echo "$DATA" | grep -q '"type":"progress"'; then - TEST_NAME=$(echo "$DATA" | grep -o '"test":"[^"]*"' | cut -d'"' -f4) - PASSED_FLAG=$(echo "$DATA" | grep -o '"passed":[^,}]*' | cut -d':' -f2) - - if [ "$PASSED_FLAG" = "true" ]; then - echo -e "${GREEN}✓${NC} $TEST_NAME" - else - echo -e "${RED}✗${NC} $TEST_NAME" - ERROR=$(echo "$DATA" | grep -o '"error":"[^"]*"' | cut -d'"' -f4 | head -c 200) - if [ -n "$ERROR" ]; then - echo " Error: $ERROR" - fi - - if echo "$DATA" | grep -q '"diagnostics"'; then - SESSION_ID=$(echo "$DATA" | grep -o '"sessionId":"[^"]*"' | cut -d'"' -f4) - STATUS_CODE=$(echo "$DATA" | grep -o '"statusCode":[0-9]*' | cut -d':' -f2) - METHOD=$(echo "$DATA" | grep -o '"method":"[^"]*"' | cut -d'"' -f4) - URL=$(echo "$DATA" | grep -o '"url":"[^"]*"' | cut -d'"' -f4 | head -c 100) - ERROR_TYPE=$(echo "$DATA" | grep -o '"errorType":"[^"]*"' | cut -d'"' -f4) - - echo -e " ${YELLOW}Diagnostics:${NC}" - if [ -n "$ERROR_TYPE" ]; then - echo " Type: $ERROR_TYPE" - fi - if [ -n "$STATUS_CODE" ]; then - echo " Status: $STATUS_CODE" - fi - if [ -n "$METHOD" ] && [ -n "$URL" ]; then - echo " Request: $METHOD $URL" - fi - if [ -n "$SESSION_ID" ]; then - echo -e " ${YELLOW}Session ID: $SESSION_ID${NC} (use this to find in backend logs)" - fi - fi - fi - fi - - if echo "$DATA" | grep -q '"type":"complete"'; then - RUN_TOTAL=$(echo "$DATA" | grep -o '"total":[0-9]*' | cut -d':' -f2) - RUN_PASSED=$(echo "$DATA" | grep -o '"passed":[0-9]*' | cut -d':' -f2) - RUN_FAILED=$(echo "$DATA" | grep -o '"failed":[0-9]*' | cut -d':' -f2) - RUN_DURATION=$(echo "$DATA" | grep -o '"duration":[0-9.]*' | cut -d':' -f2) - fi - fi - done < "$RESULT_FILE" - - rm -f "$RESULT_FILE" - - # Accumulate into global totals - TOTAL=$((TOTAL + RUN_TOTAL)) - PASSED=$((PASSED + RUN_PASSED)) - FAILED=$((FAILED + RUN_FAILED)) - DURATION=$(echo "$DURATION + $RUN_DURATION" | bc) -} - -# Phase 1: Run all tests EXCEPT CLI cloud tests at concurrency=10 -# CLI cloud tests (cli-deployment, cli-apikey, cli-vector, cli-env-secrets, cli-org-env-secrets) -# are excluded because they hit cloud APIs that can be flaky under high concurrency -run_tests "concurrency=10&exclude=cli-env-secrets,cli-org-env-secrets,cli-deployment,cli-apikey,cli-vector" "Running tests (concurrency=10, excluding CLI cloud tests)..." - -# Phase 2: Run CLI cloud tests at concurrency=3 -# These tests hit cloud APIs and are prone to flakiness at high concurrency -# Using concurrency=3 provides a balance between speed and reliability -run_tests "suite=cli-deployment,cli-apikey,cli-vector&concurrency=3" "Running CLI cloud tests (concurrency=3)..." - -# Phase 3: Run cli-env-secrets tests at concurrency=1 -# These tests interact with cloud APIs that can't handle high concurrency -run_tests "suite=cli-env-secrets&concurrency=1" "Running cli-env-secrets tests (concurrency=1)..." - -# Phase 4: Run cli-org-env-secrets tests at concurrency=1 -# These tests modify shared org-level state and need to run serially -run_tests "suite=cli-org-env-secrets&concurrency=1" "Running cli-org-env-secrets tests (concurrency=1)..." - -# Kill server -kill $SERVER_PID 2>/dev/null || true - -# Validate we got test results -if [ "$TOTAL" -eq 0 ]; then - echo -e "${RED}✗ ERROR:${NC} No test results received!" - echo "This usually means the test suite failed to start or crashed." - exit 1 -fi - -# Calculate duration in seconds -DURATION_SEC=$(echo "scale=2; $DURATION / 1000" | bc) - -# Print summary -echo "" -echo "╔════════════════════════════════════════════════════════════════╗" -echo "║ INTEGRATION SUITE - TEST RESULTS ║" -echo "╠════════════════════════════════════════════════════════════════╣" -printf "║ %-30s %30s ║\n" "Total Tests:" "$TOTAL" -printf "║ %-30s %30s ║\n" "Passed:" "$(printf "${GREEN}%s${NC}" "$PASSED")" -printf "║ %-30s %30s ║\n" "Failed:" "$(printf "${RED}%s${NC}" "$FAILED")" -printf "║ %-30s %30s ║\n" "Duration:" "${DURATION_SEC}s (${DURATION}ms)" -echo "╠════════════════════════════════════════════════════════════════╣" - -if [ "$FAILED" -gt 0 ]; then - printf "║ %-60s ║\n" "$(printf "${RED}✗ RESULT: FAILED - %s test(s) failed${NC}" "$FAILED")" - echo "╚════════════════════════════════════════════════════════════════╝" - echo "" - echo "Server logs (last 50 lines):" - echo "-----------------------------" - tail -50 "$LOG_FILE" 2>/dev/null || echo "(no logs available)" - echo "" - exit 1 -else - printf "║ %-60s ║\n" "$(printf "${GREEN}✓ RESULT: SUCCESS - All tests passed${NC}")" - echo "╚════════════════════════════════════════════════════════════════╝" - echo "" - exit 0 -fi diff --git a/apps/testing/integration-suite/scripts/get-service-urls.ts b/apps/testing/integration-suite/scripts/get-service-urls.ts deleted file mode 100755 index 267d86aa3..000000000 --- a/apps/testing/integration-suite/scripts/get-service-urls.ts +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bun -/** - * Helper script to compute service URLs from profile config - * Outputs environment variables that can be sourced by bash - */ - -import { getServiceUrls } from '../../../../packages/server/src/index'; - -async function main() { - // Load config to get region - let region = process.env.AGENTUITY_REGION; - - if (!region) { - // Default to local if no config - region = 'local'; - } - - // Get service URLs for the region - const serviceUrls = getServiceUrls(region); - - // Output as environment variable exports for bash - console.log(`export AGENTUITY_TRANSPORT_URL="${serviceUrls.catalyst}"`); - console.log(`export AGENTUITY_KEYVALUE_URL="${serviceUrls.keyvalue}"`); - console.log(`export AGENTUITY_SANDBOX_URL="${serviceUrls.sandbox}"`); - console.log(`export AGENTUITY_STREAM_URL="${serviceUrls.stream}"`); - console.log(`export AGENTUITY_VECTOR_URL="${serviceUrls.vector}"`); - console.log(`export AGENTUITY_CATALYST_URL="${serviceUrls.catalyst}"`); - console.log(`export AGENTUITY_OTLP_URL="${serviceUrls.otel}"`); -} - -main().catch((error) => { - console.error('Failed to get service URLs:', error); - process.exit(1); -}); diff --git a/apps/testing/integration-suite/src/agent/AGENTS.md b/apps/testing/integration-suite/src/agent/AGENTS.md deleted file mode 100644 index e2b9947a0..000000000 --- a/apps/testing/integration-suite/src/agent/AGENTS.md +++ /dev/null @@ -1,259 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with metadata, schema, and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── registry.generated.ts (auto-generated) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage -- **ctx.stream** - Stream management (create, list, delete) - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - const user = await ctx.kv.get('user:123'); - return user; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('output', { - metadata: { createdBy: 'my-agent' }, - contentType: 'text/plain', - }); - await stream.write('Hello from stream'); - await stream.close(); - return { streamId: stream.id, url: stream.url }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) diff --git a/apps/testing/integration-suite/src/agent/ai-sdk/gateway-check.ts b/apps/testing/integration-suite/src/agent/ai-sdk/gateway-check.ts deleted file mode 100644 index 6fa5f12ce..000000000 --- a/apps/testing/integration-suite/src/agent/ai-sdk/gateway-check.ts +++ /dev/null @@ -1,130 +0,0 @@ -/** - * AI SDK Gateway Check Agent - * - * Tests that the AI Gateway is properly configured and API keys are injected. - * This agent verifies issue #348: AI gateway not injecting API key - * - * The agent checks: - * 1. AGENTUITY_SDK_KEY is available in environment - * 2. AGENTUITY_TRANSPORT_URL is available in environment - * 3. createOpenAI() can be called without explicit apiKey (gateway injection) - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { createOpenAI } from '@ai-sdk/openai'; - -const aiSdkGatewayCheckAgent = createAgent('ai-sdk-gateway-check', { - description: 'Verifies AI Gateway configuration and API key injection (issue #348)', - schema: { - input: s.object({ - operation: s.string(), - }), - output: s.object({ - success: s.boolean(), - operation: s.string(), - hasSDKKey: s.boolean(), - hasTransportUrl: s.boolean(), - message: s.string(), - error: s.string().optional(), - }), - }, - handler: async (_ctx, input) => { - const { operation } = input; - - const hasSDKKey = !!process.env.AGENTUITY_SDK_KEY; - const hasTransportUrl = !!process.env.AGENTUITY_TRANSPORT_URL; - - switch (operation) { - case 'check-env': { - // Check if required environment variables are set - return { - success: hasSDKKey && hasTransportUrl, - operation, - hasSDKKey, - hasTransportUrl, - message: - hasSDKKey && hasTransportUrl - ? 'AI Gateway environment variables are configured' - : 'Missing required environment variables for AI Gateway', - }; - } - - case 'create-provider': { - // Test that createOpenAI() can be called without throwing - // This was the original issue in #348 - it would throw "API key is missing" - try { - // Create provider without explicit apiKey - gateway should inject it - const _openai = createOpenAI({}); - - // If we get here without error, the gateway injection is working - // (or the provider defers API key validation until actual request) - return { - success: true, - operation, - hasSDKKey, - hasTransportUrl, - message: - 'createOpenAI() succeeded without explicit apiKey - gateway injection working', - }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - - // Check if this is the specific API key missing error from issue #348 - const isApiKeyError = - errorMessage.includes('API key is missing') || - errorMessage.includes('OPENAI_API_KEY'); - - return { - success: false, - operation, - hasSDKKey, - hasTransportUrl, - message: isApiKeyError - ? 'REGRESSION: API key not injected by gateway (issue #348)' - : 'createOpenAI() failed with unexpected error', - error: errorMessage, - }; - } - } - - case 'create-model': { - // Test creating a model instance (doesn't make API call) - try { - const openai = createOpenAI({}); - const _model = openai('gpt-4o-mini'); - - // Model created successfully - return { - success: true, - operation, - hasSDKKey, - hasTransportUrl, - message: 'Model instance created successfully', - }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - return { - success: false, - operation, - hasSDKKey, - hasTransportUrl, - message: 'Failed to create model instance', - error: errorMessage, - }; - } - } - - default: - return { - success: false, - operation, - hasSDKKey, - hasTransportUrl, - message: `Unknown operation: ${operation}`, - }; - } - }, -}); - -export default aiSdkGatewayCheckAgent; diff --git a/apps/testing/integration-suite/src/agent/basic/basic-async.ts b/apps/testing/integration-suite/src/agent/basic/basic-async.ts deleted file mode 100644 index a71a90670..000000000 --- a/apps/testing/integration-suite/src/agent/basic/basic-async.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const asyncAgent = createAgent('async', { - description: 'Agent with async handler execution', - schema: { - input: s.object({ - delay: s.number(), - message: s.string(), - }), - output: s.object({ - result: s.string(), - elapsed: s.number(), - }), - }, - handler: async (_ctx, input) => { - const start = Date.now(); - - // Simulate async work - await new Promise((resolve) => setTimeout(resolve, input.delay)); - - const elapsed = Date.now() - start; - - return { - result: `Processed: ${input.message}`, - elapsed, - }; - }, -}); - -export default asyncAgent; diff --git a/apps/testing/integration-suite/src/agent/basic/basic-llm-call.ts b/apps/testing/integration-suite/src/agent/basic/basic-llm-call.ts deleted file mode 100644 index 122233cd6..000000000 --- a/apps/testing/integration-suite/src/agent/basic/basic-llm-call.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { openai } from '@ai-sdk/openai'; -import { generateText } from 'ai'; - -const llmCallAgent = createAgent('llm-call', { - description: 'Basic agent with input/output validation', - schema: { - input: s.object({ - question: s.string(), - }), - output: s.string(), - }, - handler: async (_ctx, { question }) => { - const { text } = await generateText({ - model: openai('gpt-4o'), - prompt: question, - }); - - return text; - }, -}); - -export default llmCallAgent; diff --git a/apps/testing/integration-suite/src/agent/basic/basic-no-input.ts b/apps/testing/integration-suite/src/agent/basic/basic-no-input.ts deleted file mode 100644 index e86a6929c..000000000 --- a/apps/testing/integration-suite/src/agent/basic/basic-no-input.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const noInputAgent = createAgent('no-input', { - description: 'Agent with no input schema (void input)', - schema: { - output: s.object({ - timestamp: s.number(), - random: s.number(), - }), - }, - handler: async (_ctx) => { - return { - timestamp: Date.now(), - random: Math.random(), - }; - }, -}); - -export default noInputAgent; diff --git a/apps/testing/integration-suite/src/agent/basic/basic-no-output.ts b/apps/testing/integration-suite/src/agent/basic/basic-no-output.ts deleted file mode 100644 index d41410523..000000000 --- a/apps/testing/integration-suite/src/agent/basic/basic-no-output.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const noOutputAgent = createAgent('no-output', { - description: 'Agent with void output (side effects only)', - schema: { - input: s.object({ - action: s.string(), - }), - }, - handler: async (ctx, input) => { - // Agent performs side effect but returns nothing - ctx.logger?.info('Action performed: %s', input.action); - }, -}); - -export default noOutputAgent; diff --git a/apps/testing/integration-suite/src/agent/basic/basic-simple.ts b/apps/testing/integration-suite/src/agent/basic/basic-simple.ts deleted file mode 100644 index bbbdf8cd9..000000000 --- a/apps/testing/integration-suite/src/agent/basic/basic-simple.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const simpleAgent = createAgent('simple', { - description: 'Basic agent with input/output validation', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.object({ - message: s.string(), - timestamp: s.number(), - }), - }, - handler: async (_ctx, input) => { - // Intentional delay for testing loading/streaming states in workbench UI - await Bun.sleep(3000); - - return { - message: `Hello, ${input.name}! You are ${input.age} years old.`, - timestamp: Date.now(), - }; - }, -}); - -export default simpleAgent; diff --git a/apps/testing/integration-suite/src/agent/cli/agent.ts b/apps/testing/integration-suite/src/agent/cli/agent.ts deleted file mode 100644 index 7223a7dbe..000000000 --- a/apps/testing/integration-suite/src/agent/cli/agent.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * CLI Deployment Agent - * - * Executes Agentuity CLI commands via subprocess for deployment operations. - * Tests the full deployment workflow: deploy, list, show, rollback, undeploy. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { runCLI, runCLIJSON } from '@test/helpers/cli'; - -const cliDeploymentAgent = createAgent('cli', { - description: 'Execute CLI commands for deployment, API keys, and other operations', - schema: { - input: s.object({ - command: s.string(), // 'deploy', 'undeploy', 'list', 'show', 'rollback', etc. - args: s.array(s.string()).optional(), // Additional arguments - expectJSON: s.boolean().optional(), // Whether to parse JSON output - }), - output: s.object({ - command: s.string(), - success: s.boolean(), - exitCode: s.number(), - stdout: s.string().optional(), - stderr: s.string().optional(), - json: s.any().optional(), // Parsed JSON if available - }), - }, - handler: async (_ctx, input) => { - const { command, args = [], expectJSON = false } = input; - - // Build full CLI arguments - const cliArgs = command.split(' ').concat(args); - - // Execute CLI - const result = expectJSON ? await runCLIJSON(cliArgs) : await runCLI(cliArgs); - - return { - command, - success: result.exitCode === 0, - exitCode: result.exitCode, - stdout: result.stdout, - stderr: result.stderr, - json: result.json, - }; - }, -}); - -export default cliDeploymentAgent; diff --git a/apps/testing/integration-suite/src/agent/env/sdk-key-check.ts b/apps/testing/integration-suite/src/agent/env/sdk-key-check.ts deleted file mode 100644 index 0586c70c1..000000000 --- a/apps/testing/integration-suite/src/agent/env/sdk-key-check.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -/** - * Agent to verify AGENTUITY_SDK_KEY is loaded from .env.local - * This reproduces the bug reported in https://github.com/agentuity/sdk/issues/222 - */ -const sdkKeyCheckAgent = createAgent('env-sdk-key-check', { - description: 'Verifies AGENTUITY_SDK_KEY is available in process.env', - schema: { - output: s.object({ - hasSdkKey: s.boolean(), - sdkKeyPrefix: s.string().optional(), - allEnvKeys: s.array(s.string()), - }), - }, - handler: async (ctx) => { - const sdkKey = process.env.AGENTUITY_SDK_KEY; - const hasSdkKey = !!sdkKey; - - // Return first 10 chars of key for verification (without exposing full key) - const sdkKeyPrefix = sdkKey ? sdkKey.substring(0, 10) : undefined; - - // Get all AGENTUITY_* env vars for debugging - const allEnvKeys = Object.keys(process.env) - .filter((key) => key.startsWith('AGENTUITY_')) - .sort(); - - ctx.logger.info('SDK Key Check:', { - hasSdkKey, - sdkKeyPrefix, - envKeysCount: allEnvKeys.length, - }); - - return { - hasSdkKey, - sdkKeyPrefix, - allEnvKeys, - }; - }, -}); - -export default sdkKeyCheckAgent; diff --git a/apps/testing/integration-suite/src/agent/errors/propagation.ts b/apps/testing/integration-suite/src/agent/errors/propagation.ts deleted file mode 100644 index 3bc7f87bd..000000000 --- a/apps/testing/integration-suite/src/agent/errors/propagation.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { StructuredError } from '@agentuity/core'; - -const ServiceUnavailableError = StructuredError( - 'ServiceUnavailableError', - 'Service temporarily unavailable' -)<{ - service: string; - retryAfter: number; -}>(); - -const errorPropagationAgent = createAgent('errors-propagation', { - description: 'Test error propagation patterns', - schema: { - input: s.object({ - operation: s.string(), - shouldFail: s.boolean().optional(), - }), - output: s.object({ - success: s.boolean(), - message: s.string(), - errorHandled: s.boolean().optional(), - }), - }, - handler: async (_ctx, input) => { - const { operation, shouldFail } = input; - - switch (operation) { - case 'nested-error': { - const innerFunction = () => { - if (shouldFail) { - throw new ServiceUnavailableError({ - service: 'database', - retryAfter: 60, - }); - } - return 'success'; - }; - - try { - const result = innerFunction(); - return { - success: true, - message: result, - errorHandled: false, - }; - } catch (error) { - return { - success: false, - message: error instanceof Error ? error.message : 'Unknown error', - errorHandled: true, - }; - } - } - - case 'async-error': { - const asyncFunction = async () => { - await new Promise((resolve) => setTimeout(resolve, 10)); - if (shouldFail) { - throw new Error('Async operation failed'); - } - return 'completed'; - }; - - try { - await asyncFunction(); - return { - success: true, - message: 'Async operation succeeded', - errorHandled: false, - }; - } catch (error) { - return { - success: false, - message: error instanceof Error ? error.message : 'Unknown error', - errorHandled: true, - }; - } - } - - case 'chain-errors': { - const step1 = () => { - if (shouldFail) { - throw new Error('Step 1 failed'); - } - }; - - const step2 = () => { - if (shouldFail) { - throw new Error('Step 2 failed'); - } - }; - - try { - step1(); - step2(); - return { - success: true, - message: 'All steps completed', - errorHandled: false, - }; - } catch (error) { - return { - success: false, - message: error instanceof Error ? error.message : 'Unknown error', - errorHandled: true, - }; - } - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default errorPropagationAgent; diff --git a/apps/testing/integration-suite/src/agent/errors/structured.ts b/apps/testing/integration-suite/src/agent/errors/structured.ts deleted file mode 100644 index addab7e2d..000000000 --- a/apps/testing/integration-suite/src/agent/errors/structured.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { StructuredError } from '@agentuity/core'; - -const CustomValidationError = StructuredError('CustomValidationError', 'Validation failed')<{ - field: string; - reason: string; -}>(); - -const CustomNotFoundError = StructuredError('CustomNotFoundError', 'Resource not found')<{ - resource: string; - id: string; -}>(); - -const errorStructuredAgent = createAgent('errors-structured', { - description: 'Test StructuredError patterns', - schema: { - input: s.object({ - operation: s.string(), - field: s.string().optional(), - resource: s.string().optional(), - id: s.string().optional(), - }), - output: s.object({ - success: s.boolean(), - message: s.string().optional(), - }), - }, - handler: async (ctx, input) => { - const { operation, field, resource, id } = input; - - switch (operation) { - case 'throw-validation-error': { - throw new CustomValidationError({ field: field || 'unknown', reason: 'Invalid value' }); - } - - case 'throw-not-found-error': { - throw new CustomNotFoundError({ - resource: resource || 'item', - id: id || 'unknown', - }); - } - - case 'throw-generic-error': { - throw new Error('Generic error message'); - } - - case 'try-catch-handling': { - try { - throw new CustomValidationError({ field: 'test', reason: 'Test error' }); - } catch (error) { - ctx.logger.warn('Caught error in handler', { - error: error instanceof Error ? error.message : String(error), - }); - return { - success: false, - message: 'Error caught and handled', - }; - } - } - - case 'success': { - return { - success: true, - message: 'No errors', - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default errorStructuredAgent; diff --git a/apps/testing/integration-suite/src/agent/errors/validation.ts b/apps/testing/integration-suite/src/agent/errors/validation.ts deleted file mode 100644 index 477b299f3..000000000 --- a/apps/testing/integration-suite/src/agent/errors/validation.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const errorValidationAgent = createAgent('errors-validation', { - description: 'Test schema validation error handling', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - email: s.string(), - active: s.boolean().optional(), - }), - output: s.object({ - success: s.boolean(), - message: s.string(), - data: s.object({ - name: s.string(), - age: s.number(), - email: s.string(), - active: s.boolean(), - }), - }), - }, - handler: async (_ctx, input) => { - const { name, age, email, active = true } = input; - - return { - success: true, - message: 'Validation passed', - data: { - name, - age, - email, - active, - }, - }; - }, -}); - -export default errorValidationAgent; diff --git a/apps/testing/integration-suite/src/agent/evals/basic.ts b/apps/testing/integration-suite/src/agent/evals/basic.ts deleted file mode 100644 index 89ff4ea52..000000000 --- a/apps/testing/integration-suite/src/agent/evals/basic.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { politeness } from '@agentuity/evals'; -import { openai } from '@ai-sdk/openai'; - -export const AgentInput = s.object({ - value: s.number(), -}); -export const AgentOutput = s.object({ - result: s.number(), - doubled: s.boolean(), -}); - -const evalsBasicAgent = createAgent('evals-basic', { - description: 'Agent with evals for testing', - schema: { - input: AgentInput, - output: AgentOutput, - }, - handler: async (_ctx, input) => { - const result = input.value * 2; - - return { - result, - doubled: true, - }; - }, -}); - -/** - * Example 1: Using preset eval with defaults - * The eval expects { request: string, context?: string } for input - * and { response: string } for output, so we need middleware to transform. - */ -export const politenessCheckCustom = evalsBasicAgent.createEval( - politeness({ - name: 'politeness-custom', - model: openai('gpt-4o-mini'), - threshold: 0.7, - middleware: { - transformInput: (input) => ({ request: `Calculate double of ${input.value}` }), - transformOutput: (output) => ({ - response: `Result: ${output.result}, Doubled: ${output.doubled}`, - }), - }, - }) -); - -/** - * Example 2: Inline eval without using preset evals - * This is simpler when you don't need the preset eval's LLM logic. - */ -export const anotherPolitenessEval = evalsBasicAgent.createEval(politeness()); - -/** - * Example 3: Eval that throws to test error handling - */ -export const throwingEval = evalsBasicAgent.createEval({ - name: 'throwing-eval', - description: 'Eval that throws to test error handling', - handler: async (_ctx, _input, _output) => { - throw new Error('Intentional eval error for testing'); - }, -}); - -export default evalsBasicAgent; diff --git a/apps/testing/integration-suite/src/agent/evals/eval.ts b/apps/testing/integration-suite/src/agent/evals/eval.ts deleted file mode 100644 index 56b4f31f3..000000000 --- a/apps/testing/integration-suite/src/agent/evals/eval.ts +++ /dev/null @@ -1,15 +0,0 @@ -import evalsBasicAgent from './basic'; - -evalsBasicAgent.createEval('separate-file-eval', { - description: 'Eval defined in separate eval.ts file', - handler: async (_ctx, _input, output) => { - const passed = output.doubled === true; - return { - success: true, - passed, - metadata: { - reason: passed ? 'Correctly doubled' : 'Not doubled', - }, - }; - }, -}); diff --git a/apps/testing/integration-suite/src/agent/evals/separate/agent.ts b/apps/testing/integration-suite/src/agent/evals/separate/agent.ts deleted file mode 100644 index d530e77c5..000000000 --- a/apps/testing/integration-suite/src/agent/evals/separate/agent.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export const SeparateEvalsInput = s.object({ - value: s.number(), -}); - -export const SeparateEvalsOutput = s.object({ - doubled: s.number(), -}); - -const separateEvalsAgent = createAgent('evals-separate', { - description: 'Agent with evals in a separate file', - schema: { - input: SeparateEvalsInput, - output: SeparateEvalsOutput, - }, - handler: async (_ctx, input) => { - return { - doubled: input.value * 2, - }; - }, -}); - -export default separateEvalsAgent; diff --git a/apps/testing/integration-suite/src/agent/evals/separate/eval.ts b/apps/testing/integration-suite/src/agent/evals/separate/eval.ts deleted file mode 100644 index b92821785..000000000 --- a/apps/testing/integration-suite/src/agent/evals/separate/eval.ts +++ /dev/null @@ -1,18 +0,0 @@ -import separateEvalsAgent from './agent'; - -separateEvalsAgent.createEval('doubles-correctly', { - description: 'Verifies the output is exactly double the input', - handler: async (_ctx, input, output) => { - const expected = input.value * 2; - const passed = output.doubled === expected; - return { - success: true, - passed, - metadata: { - reason: passed - ? `Correctly doubled ${input.value} to ${output.doubled}` - : `Expected ${expected}, got ${output.doubled}`, - }, - }; - }, -}); diff --git a/apps/testing/integration-suite/src/agent/evals/separate/index.ts b/apps/testing/integration-suite/src/agent/evals/separate/index.ts deleted file mode 100644 index 30547f0dc..000000000 --- a/apps/testing/integration-suite/src/agent/evals/separate/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './agent'; diff --git a/apps/testing/integration-suite/src/agent/events/agent-events.ts b/apps/testing/integration-suite/src/agent/events/agent-events.ts deleted file mode 100644 index 480c3db05..000000000 --- a/apps/testing/integration-suite/src/agent/events/agent-events.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agentEventsAgent = createAgent('events-agent', { - description: 'Tests agent event listeners (started, completed, errored)', - schema: { - input: s.object({ - eventType: s.string(), - shouldError: s.boolean().optional(), - }), - output: s.object({ - eventType: s.string(), - eventsReceived: s.array(s.string()), - success: s.boolean(), - }), - }, - handler: async (_ctx, input) => { - const eventsReceived: string[] = []; - - // Track which events fire during execution - const startedListener = () => { - eventsReceived.push('started'); - }; - const completedListener = () => { - eventsReceived.push('completed'); - }; - const erroredListener = () => { - eventsReceived.push('errored'); - }; - - // Register listeners on the agent itself - agentEventsAgent.addEventListener('started', startedListener); - agentEventsAgent.addEventListener('completed', completedListener); - agentEventsAgent.addEventListener('errored', erroredListener); - - if (input.shouldError) { - throw new Error('Intentional error for event testing'); - } - - return { - eventType: input.eventType, - eventsReceived, - success: true, - }; - }, -}); - -export default agentEventsAgent; diff --git a/apps/testing/integration-suite/src/agent/events/listener-removal.ts b/apps/testing/integration-suite/src/agent/events/listener-removal.ts deleted file mode 100644 index ddac4ef29..000000000 --- a/apps/testing/integration-suite/src/agent/events/listener-removal.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const listenerRemovalAgent = createAgent('events-removal', { - description: 'Tests event listener removal (removeEventListener)', - schema: { - input: s.object({ - operation: s.string(), - removeListener: s.boolean().optional(), - }), - output: s.object({ - operation: s.string(), - eventsReceived: s.array(s.string()), - success: s.boolean(), - }), - }, - handler: async (_ctx, input) => { - const eventsReceived: string[] = []; - - // Create a listener function - const startedListener = () => { - eventsReceived.push('started'); - }; - - // Add the listener - listenerRemovalAgent.addEventListener('started', startedListener); - - // Optionally remove it - if (input.removeListener) { - listenerRemovalAgent.removeEventListener('started', startedListener); - } - - return { - operation: input.operation, - eventsReceived, - success: true, - }; - }, -}); - -export default listenerRemovalAgent; diff --git a/apps/testing/integration-suite/src/agent/events/multiple-listeners.ts b/apps/testing/integration-suite/src/agent/events/multiple-listeners.ts deleted file mode 100644 index 24f1253d5..000000000 --- a/apps/testing/integration-suite/src/agent/events/multiple-listeners.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const multipleListenersAgent = createAgent('events-multiple', { - description: 'Tests multiple event listeners on same event', - schema: { - input: s.object({ - operation: s.string(), - }), - output: s.object({ - operation: s.string(), - listenersCalled: s.number(), - success: s.boolean(), - }), - }, - handler: async (_ctx, input) => { - let callCount = 0; - - // Add multiple listeners for the same event - const listener1 = () => { - callCount++; - }; - const listener2 = () => { - callCount++; - }; - const listener3 = () => { - callCount++; - }; - - multipleListenersAgent.addEventListener('started', listener1); - multipleListenersAgent.addEventListener('started', listener2); - multipleListenersAgent.addEventListener('started', listener3); - - return { - operation: input.operation, - listenersCalled: callCount, - success: true, - }; - }, -}); - -export default multipleListenersAgent; diff --git a/apps/testing/integration-suite/src/agent/events/session-events.ts b/apps/testing/integration-suite/src/agent/events/session-events.ts deleted file mode 100644 index 3d53dae97..000000000 --- a/apps/testing/integration-suite/src/agent/events/session-events.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const sessionEventsAgent = createAgent('events-session', { - description: 'Tests session event listeners (completed)', - schema: { - input: s.object({ - operation: s.string(), - }), - output: s.object({ - operation: s.string(), - eventsReceived: s.array(s.string()), - sessionId: s.string(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const eventsReceived: string[] = []; - - // Register session event listener - ctx.session.addEventListener('completed', (eventName, session) => { - eventsReceived.push(`${eventName}:${session.id}`); - }); - - return { - operation: input.operation, - eventsReceived, - sessionId: ctx.session.id, - success: true, - }; - }, -}); - -export default sessionEventsAgent; diff --git a/apps/testing/integration-suite/src/agent/events/thread-events.ts b/apps/testing/integration-suite/src/agent/events/thread-events.ts deleted file mode 100644 index 21a67a9ea..000000000 --- a/apps/testing/integration-suite/src/agent/events/thread-events.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const threadEventsAgent = createAgent('events-thread', { - description: 'Tests thread event listeners (destroyed)', - schema: { - input: s.object({ - operation: s.string(), - destroyThread: s.boolean().optional(), - }), - output: s.object({ - operation: s.string(), - eventsReceived: s.array(s.string()), - threadId: s.string(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const eventsReceived: string[] = []; - - // Register thread event listener - ctx.thread.addEventListener('destroyed', (eventName, thread) => { - eventsReceived.push(`${eventName}:${thread.id}`); - }); - - if (input.destroyThread) { - await ctx.thread.destroy(); - } - - return { - operation: input.operation, - eventsReceived, - threadId: ctx.thread.id, - success: true, - }; - }, -}); - -export default threadEventsAgent; diff --git a/apps/testing/integration-suite/src/agent/lifecycle/waituntil.ts b/apps/testing/integration-suite/src/agent/lifecycle/waituntil.ts deleted file mode 100644 index 0708b18a8..000000000 --- a/apps/testing/integration-suite/src/agent/lifecycle/waituntil.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const waitUntilAgent = createAgent('lifecycle-waituntil', { - description: 'WaitUntil background task testing', - schema: { - input: s.object({ - operation: s.string(), - taskData: s.string().optional(), - taskCount: s.number().optional(), - shouldError: s.boolean().optional(), - }), - output: s.object({ - operation: s.string(), - success: s.boolean(), - message: s.string().optional(), - taskScheduled: s.boolean().optional(), - }), - }, - handler: async (ctx, input) => { - const { operation, taskData, taskCount, shouldError } = input; - - switch (operation) { - case 'schedule-task': { - // Schedule a background task - ctx.waitUntil(async () => { - // Simulate background work - await new Promise((resolve) => setTimeout(resolve, 10)); - ctx.logger.info('Background task completed', { taskData }); - }); - - return { - operation, - success: true, - message: 'Background task scheduled', - taskScheduled: true, - }; - } - - case 'schedule-multiple': { - const count = taskCount || 3; - - // Schedule multiple background tasks - for (let i = 0; i < count; i++) { - ctx.waitUntil(async () => { - await new Promise((resolve) => setTimeout(resolve, 10)); - ctx.logger.info(`Background task ${i + 1} completed`); - }); - } - - return { - operation, - success: true, - message: `Scheduled ${count} background tasks`, - taskScheduled: true, - }; - } - - case 'schedule-with-error': { - // Schedule a task that will throw an error - ctx.waitUntil(async () => { - if (shouldError) { - throw new Error('Background task error'); - } - ctx.logger.info('Background task completed without error'); - }); - - return { - operation, - success: true, - message: 'Background task with potential error scheduled', - taskScheduled: true, - }; - } - - case 'schedule-promise': { - // Schedule a task using Promise directly - ctx.waitUntil( - new Promise((resolve) => { - setTimeout(() => { - ctx.logger.info('Promise-based task completed'); - resolve(); - }, 10); - }) - ); - - return { - operation, - success: true, - message: 'Promise-based task scheduled', - taskScheduled: true, - }; - } - - case 'schedule-sync-function': { - // Schedule a synchronous function - ctx.waitUntil(() => { - ctx.logger.info('Synchronous task completed'); - }); - - return { - operation, - success: true, - message: 'Synchronous task scheduled', - taskScheduled: true, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default waitUntilAgent; diff --git a/apps/testing/integration-suite/src/agent/resilience/crash-attempts.ts b/apps/testing/integration-suite/src/agent/resilience/crash-attempts.ts deleted file mode 100644 index 66cae72e3..000000000 --- a/apps/testing/integration-suite/src/agent/resilience/crash-attempts.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const crashAttemptsAgent = createAgent('resilience-crash-attempts', { - description: 'Tests various ways that should NOT crash the server', - schema: { - input: s.object({ - scenario: s.string(), - }), - output: s.object({ - scenario: s.string(), - survived: s.boolean(), - message: s.string(), - }), - }, - handler: async (ctx, input) => { - const { scenario } = input; - - switch (scenario) { - case 'sync-throw': { - // Synchronous throw in handler - should be caught by Hono error handler - throw new Error('Intentional synchronous throw'); - } - - case 'async-throw': { - // Async throw - should be caught - await new Promise((resolve) => setTimeout(resolve, 10)); - throw new Error('Intentional async throw'); - } - - case 'waituntil-throw': { - // Background task throws - should be caught by waitUntil error handler - ctx.waitUntil(async () => { - await new Promise((resolve) => setTimeout(resolve, 10)); - throw new Error('Intentional waitUntil throw'); - }); - return { - scenario, - survived: true, - message: 'Background task scheduled with throw', - }; - } - - case 'waituntil-sync-throw': { - // Synchronous throw in background task - ctx.waitUntil(() => { - throw new Error('Intentional sync waitUntil throw'); - }); - return { - scenario, - survived: true, - message: 'Sync background task scheduled with throw', - }; - } - - case 'unhandled-promise': { - // NOTE: We don't actually create an unhandled rejection here because - // the runtime correctly crashes on unhandled rejections (as it should). - // This is expected behavior - unhandled rejections indicate bugs. - return { - scenario, - survived: true, - message: 'Skipped: unhandled rejections correctly crash the server', - }; - } - - case 'nested-error': { - // Nested async errors - const causeError = async () => { - throw new Error('Inner error'); - }; - - try { - await causeError(); - } catch (err) { - throw new Error('Outer error wrapping inner', { cause: err }); - } - // Note: unreachable due to throw in catch, but needed for TypeScript - throw new Error('Unreachable'); - } - - case 'stack-overflow': { - // Careful stack overflow - limited recursion - let depth = 0; - const recurse = (): any => { - depth++; - if (depth > 1000) { - throw new Error('Recursion limit reached (prevented stack overflow)'); - } - return recurse(); - }; - - try { - recurse(); - } catch (_err) { - return { - scenario, - survived: true, - message: `Caught recursion at depth ${depth}`, - }; - } - // Note: unreachable due to throw in try, but needed for TypeScript - throw new Error('Unreachable'); - } - - case 'null-deref': { - // Null dereference - const obj: any = null; - const value = obj.property; // This will throw - return { - scenario, - survived: false, - message: `Got value: ${value}`, - }; - } - - case 'type-error': { - // Type errors - const num: any = 'not a number'; - const result = num.toFixed(2); // This will throw - return { - scenario, - survived: false, - message: `Result: ${result}`, - }; - } - - case 'multiple-waituntil-throws': { - // Multiple background tasks all throwing - for (let i = 0; i < 5; i++) { - ctx.waitUntil(async () => { - await new Promise((resolve) => setTimeout(resolve, i * 10)); - throw new Error(`Background task ${i} error`); - }); - } - return { - scenario, - survived: true, - message: 'Scheduled 5 background tasks that all throw', - }; - } - - case 'event-listener-throw': { - // Throw in event listener - ctx.session.addEventListener('completed', () => { - throw new Error('Event listener throw'); - }); - return { - scenario, - survived: true, - message: 'Registered event listener that throws', - }; - } - - case 'process-exit-attempt': { - // Attempt to call process.exit - should throw an error - try { - process.exit(1); - return { - scenario, - survived: false, - message: 'process.exit did not throw - server would have crashed!', - }; - } catch (err: any) { - return { - scenario, - survived: true, - message: `process.exit was blocked: ${err.message}`, - }; - } - } - - default: - return { - scenario, - survived: true, - message: 'Unknown scenario', - }; - } - }, -}); - -export default crashAttemptsAgent; diff --git a/apps/testing/integration-suite/src/agent/routing/routing-get.ts b/apps/testing/integration-suite/src/agent/routing/routing-get.ts deleted file mode 100644 index d864888b7..000000000 --- a/apps/testing/integration-suite/src/agent/routing/routing-get.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const getAgent = createAgent('routing-get', { - description: 'GET endpoint that reads query parameters', - schema: { - input: s.object({ - query: s.string(), - limit: s.number().optional(), - }), - output: s.object({ - query: s.string(), - limit: s.number(), - timestamp: s.number(), - }), - }, - handler: async (_ctx, input) => { - return { - query: input.query, - limit: input.limit ?? 10, - timestamp: Date.now(), - }; - }, -}); - -export default getAgent; diff --git a/apps/testing/integration-suite/src/agent/routing/routing-headers.ts b/apps/testing/integration-suite/src/agent/routing/routing-headers.ts deleted file mode 100644 index cae9931a7..000000000 --- a/apps/testing/integration-suite/src/agent/routing/routing-headers.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const headersAgent = createAgent('routing-headers', { - description: 'Agent that works with custom headers', - schema: { - input: s.object({ - message: s.string(), - }), - output: s.object({ - message: s.string(), - sessionId: s.string(), - timestamp: s.number(), - }), - }, - handler: async (ctx, input) => { - // Return session ID from context (acts like a custom header) - return { - message: input.message, - sessionId: ctx.sessionId, - timestamp: Date.now(), - }; - }, -}); - -export default headersAgent; diff --git a/apps/testing/integration-suite/src/agent/routing/routing-methods.ts b/apps/testing/integration-suite/src/agent/routing/routing-methods.ts deleted file mode 100644 index f313902c0..000000000 --- a/apps/testing/integration-suite/src/agent/routing/routing-methods.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const methodsAgent = createAgent('routing-methods', { - description: 'Agent that supports multiple HTTP methods', - schema: { - input: s.object({ - action: s.string(), - data: s.string().optional(), - }), - output: s.object({ - method: s.string(), - action: s.string(), - result: s.string(), - }), - }, - handler: async (_ctx, input) => { - // In a real scenario, we'd detect the HTTP method from context - // For now, we'll just echo back the action - return { - method: 'POST', // Default for agent calls - action: input.action, - result: `Processed: ${input.action}${input.data ? ` with data: ${input.data}` : ''}`, - }; - }, -}); - -export default methodsAgent; diff --git a/apps/testing/integration-suite/src/agent/routing/routing-params.ts b/apps/testing/integration-suite/src/agent/routing/routing-params.ts deleted file mode 100644 index a69c59a30..000000000 --- a/apps/testing/integration-suite/src/agent/routing/routing-params.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const paramsAgent = createAgent('routing-params', { - description: 'Agent for testing route parameters', - schema: { - input: s.object({ - id: s.string(), - action: s.string().optional(), - }), - output: s.object({ - id: s.string(), - action: s.string(), - found: s.boolean(), - }), - }, - handler: async (_ctx, input) => { - return { - id: input.id, - action: input.action ?? 'view', - found: true, - }; - }, -}); - -export default paramsAgent; diff --git a/apps/testing/integration-suite/src/agent/routing/routing-post.ts b/apps/testing/integration-suite/src/agent/routing/routing-post.ts deleted file mode 100644 index dd091b39d..000000000 --- a/apps/testing/integration-suite/src/agent/routing/routing-post.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const postAgent = createAgent('routing-post', { - description: 'POST endpoint that accepts JSON body', - schema: { - input: s.object({ - title: s.string(), - content: s.string(), - tags: s.array(s.string()).optional(), - }), - output: s.object({ - id: s.string(), - title: s.string(), - content: s.string(), - tags: s.array(s.string()), - created: s.number(), - }), - }, - handler: async (_ctx, input) => { - const id = `post-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; - - return { - id, - title: input.title, - content: input.content, - tags: input.tags ?? [], - created: Date.now(), - }; - }, -}); - -export default postAgent; diff --git a/apps/testing/integration-suite/src/agent/sandbox/basic.ts b/apps/testing/integration-suite/src/agent/sandbox/basic.ts deleted file mode 100644 index 78c06c051..000000000 --- a/apps/testing/integration-suite/src/agent/sandbox/basic.ts +++ /dev/null @@ -1,235 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const sandboxBasicAgent = createAgent('sandbox-basic', { - description: 'Sandbox service integration tests via ctx.sandbox', - schema: { - input: s.object({ - operation: s.string(), - sandboxId: s.string().optional(), - command: s.array(s.string()).optional(), - filePath: s.string().optional(), - fileContent: s.string().optional(), - dirPath: s.string().optional(), - recursive: s.boolean().optional(), - env: s.record(s.string(), s.string().nullable()).optional(), - }), - output: s.object({ - operation: s.string(), - success: s.boolean(), - sandboxId: s.string().optional(), - status: s.string().optional(), - exitCode: s.number().optional(), - executionId: s.string().optional(), - fileContent: s.string().optional(), - files: s - .array(s.object({ path: s.string(), size: s.number(), isDir: s.boolean() })) - .optional(), - env: s.record(s.string(), s.string()).optional(), - info: s - .object({ - sandboxId: s.string(), - status: s.string(), - }) - .optional(), - error: s.string().optional(), - errorTag: s.string().optional(), - statusCode: s.number().optional(), - errorMethod: s.string().optional(), - errorUrl: s.string().optional(), - sessionId: s.string().optional(), - }), - }, - handler: async (ctx, input) => { - const { operation, sandboxId } = input; - - try { - switch (operation) { - case 'create': { - const sb = await ctx.sandbox.create(); - return { - operation, - success: true, - sandboxId: sb.id, - status: sb.status, - }; - } - - case 'connect': { - if (!sandboxId) throw new Error('sandboxId required'); - const sb = await ctx.sandbox.connect(sandboxId); - return { - operation, - success: true, - sandboxId: sb.id, - status: sb.status, - }; - } - - case 'execute': { - if (!sandboxId) throw new Error('sandboxId required'); - const sb = await ctx.sandbox.connect(sandboxId); - const exec = await sb.execute({ - command: input.command || ['echo', 'hello'], - }); - return { - operation, - success: true, - sandboxId, - exitCode: exec.exitCode, - executionId: exec.executionId, - status: exec.status, - }; - } - - case 'write-file': { - if (!sandboxId) throw new Error('sandboxId required'); - if (!input.filePath || !input.fileContent) { - throw new Error('filePath and fileContent required'); - } - const sb = await ctx.sandbox.connect(sandboxId); - await sb.writeFiles([ - { - path: input.filePath, - content: Buffer.from(input.fileContent), - }, - ]); - return { operation, success: true, sandboxId }; - } - - case 'read-file': { - if (!sandboxId) throw new Error('sandboxId required'); - if (!input.filePath) throw new Error('filePath required'); - const sb = await ctx.sandbox.connect(sandboxId); - const stream = await sb.readFile(input.filePath); - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - const combined = new Uint8Array(chunks.reduce((sum, c) => sum + c.length, 0)); - let offset = 0; - for (const chunk of chunks) { - combined.set(chunk, offset); - offset += chunk.length; - } - return { - operation, - success: true, - sandboxId, - fileContent: new TextDecoder().decode(combined), - }; - } - - case 'list-files': { - if (!sandboxId) throw new Error('sandboxId required'); - const sb = await ctx.sandbox.connect(sandboxId); - const files = await sb.listFiles(input.dirPath); - return { - operation, - success: true, - sandboxId, - files: files.map((f) => ({ - path: f.path, - size: f.size, - isDir: f.isDir, - })), - }; - } - - case 'mkdir': { - if (!sandboxId) throw new Error('sandboxId required'); - if (!input.dirPath) throw new Error('dirPath required'); - const sb = await ctx.sandbox.connect(sandboxId); - await sb.mkDir(input.dirPath, input.recursive); - return { operation, success: true, sandboxId }; - } - - case 'rmfile': { - if (!sandboxId) throw new Error('sandboxId required'); - if (!input.filePath) throw new Error('filePath required'); - const sb = await ctx.sandbox.connect(sandboxId); - await sb.rmFile(input.filePath); - return { operation, success: true, sandboxId }; - } - - case 'rmdir': { - if (!sandboxId) throw new Error('sandboxId required'); - if (!input.dirPath) throw new Error('dirPath required'); - const sb = await ctx.sandbox.connect(sandboxId); - await sb.rmDir(input.dirPath, input.recursive); - return { operation, success: true, sandboxId }; - } - - case 'set-env': { - if (!sandboxId) throw new Error('sandboxId required'); - if (!input.env) throw new Error('env required'); - const sb = await ctx.sandbox.connect(sandboxId); - const env = await sb.setEnv(input.env); - return { operation, success: true, sandboxId, env }; - } - - case 'get': { - if (!sandboxId) throw new Error('sandboxId required'); - const info = await ctx.sandbox.get(sandboxId); - return { - operation, - success: true, - sandboxId, - info: { sandboxId: info.sandboxId, status: info.status }, - }; - } - - case 'pause': { - if (!sandboxId) throw new Error('sandboxId required'); - await ctx.sandbox.pause(sandboxId); - return { operation, success: true, sandboxId }; - } - - case 'resume': { - if (!sandboxId) throw new Error('sandboxId required'); - await ctx.sandbox.resume(sandboxId); - return { operation, success: true, sandboxId }; - } - - case 'destroy': { - if (!sandboxId) throw new Error('sandboxId required'); - await ctx.sandbox.destroy(sandboxId); - return { operation, success: true, sandboxId }; - } - - case 'run': { - const result = await ctx.sandbox.run({ - command: { exec: input.command || ['echo', 'hello from run'] }, - }); - return { - operation, - success: true, - sandboxId: result.sandboxId, - exitCode: result.exitCode, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - } catch (err) { - const e = err as Record; - return { - operation, - success: false, - sandboxId, - error: err instanceof Error ? err.message : String(err), - errorTag: typeof e._tag === 'string' ? e._tag : undefined, - statusCode: typeof e.statusCode === 'number' ? e.statusCode : undefined, - errorMethod: typeof e.method === 'string' ? e.method : undefined, - errorUrl: typeof e.url === 'string' ? e.url : undefined, - sessionId: typeof e.sessionId === 'string' ? e.sessionId : undefined, - }; - } - }, -}); - -export default sandboxBasicAgent; diff --git a/apps/testing/integration-suite/src/agent/schema/complex.ts b/apps/testing/integration-suite/src/agent/schema/complex.ts deleted file mode 100644 index 12e611978..000000000 --- a/apps/testing/integration-suite/src/agent/schema/complex.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const schemaComplexAgent = createAgent('schema-complex', { - description: 'Test complex nested schemas', - schema: { - input: s.object({ - operation: s.string(), - nested: s - .object({ - level1: s.object({ - level2: s.object({ - value: s.string(), - }), - }), - }) - .optional(), - union: s.union(s.string(), s.number()).optional(), - arrayOfObjects: s - .array( - s.object({ - id: s.string(), - count: s.number(), - }) - ) - .optional(), - record: s.record(s.string(), s.any()).optional(), - }), - output: s.object({ - success: s.boolean(), - operation: s.string(), - result: s.any().optional(), - }), - }, - handler: async (_ctx, input) => { - const { operation, nested, union, arrayOfObjects, record } = input; - - switch (operation) { - case 'nested-object': - return { - success: true, - operation, - result: nested?.level1.level2.value, - }; - - case 'union-string': - return { - success: true, - operation, - result: { value: union, type: typeof union }, - }; - - case 'union-number': - return { - success: true, - operation, - result: { value: union, type: typeof union }, - }; - - case 'array-of-objects': - return { - success: true, - operation, - result: { - count: arrayOfObjects?.length, - items: arrayOfObjects, - }, - }; - - case 'record-type': - return { - success: true, - operation, - result: record, - }; - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default schemaComplexAgent; diff --git a/apps/testing/integration-suite/src/agent/schema/optional.ts b/apps/testing/integration-suite/src/agent/schema/optional.ts deleted file mode 100644 index abf65ec6e..000000000 --- a/apps/testing/integration-suite/src/agent/schema/optional.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const schemaOptionalAgent = createAgent('schema-optional', { - description: 'Test optional fields and defaults', - schema: { - input: s.object({ - required: s.string(), - optional: s.string().optional(), - withDefault: s.number().optional(), - }), - output: s.object({ - success: s.boolean(), - received: s.object({ - required: s.string(), - optional: s.string().optional(), - withDefault: s.number(), - }), - }), - }, - handler: async (_ctx, input) => { - const { required, optional, withDefault = 42 } = input; - - return { - success: true, - received: { - required, - optional, - withDefault, - }, - }; - }, -}); - -export default schemaOptionalAgent; diff --git a/apps/testing/integration-suite/src/agent/schema/types.ts b/apps/testing/integration-suite/src/agent/schema/types.ts deleted file mode 100644 index 6c9165bdc..000000000 --- a/apps/testing/integration-suite/src/agent/schema/types.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const schemaTypesAgent = createAgent('schema-types', { - description: 'Test basic schema types', - schema: { - input: s.object({ - stringValue: s.string(), - numberValue: s.number(), - booleanValue: s.boolean(), - arrayValue: s.array(s.string()), - objectValue: s.object({ - nested: s.string(), - }), - }), - output: s.object({ - success: s.boolean(), - receivedTypes: s.object({ - string: s.string(), - number: s.string(), - boolean: s.string(), - array: s.string(), - object: s.string(), - }), - }), - }, - handler: async (_ctx, input) => { - return { - success: true, - receivedTypes: { - string: typeof input.stringValue, - number: typeof input.numberValue, - boolean: typeof input.booleanValue, - array: Array.isArray(input.arrayValue) ? 'array' : typeof input.arrayValue, - object: typeof input.objectValue, - }, - }; - }, -}); - -export default schemaTypesAgent; diff --git a/apps/testing/integration-suite/src/agent/session/agent-id-test.ts b/apps/testing/integration-suite/src/agent/session/agent-id-test.ts deleted file mode 100644 index d141133c4..000000000 --- a/apps/testing/integration-suite/src/agent/session/agent-id-test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Agent ID Test Agent - * - * A simple agent used to verify that agent IDs are correctly captured - * in session events. This agent returns its own metadata for verification. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agentIdTestAgent = createAgent('agent-id-test', { - description: 'Test agent for verifying agent ID capture in session events', - schema: { - input: s.object({ - message: s.string().optional(), - }), - output: s.object({ - success: s.boolean(), - agentName: s.string(), - agentId: s.string().optional(), - metadataId: s.string().optional(), - message: s.string().optional(), - }), - }, - handler: async (ctx, input) => { - ctx.logger.info('agent-id-test handler called with message: %s', input.message); - - // Return simple result - metadata can be checked via the agent object directly in tests - return { - success: true, - agentName: 'agent-id-test', - agentId: undefined, - metadataId: undefined, - message: input.message || 'Agent executed successfully', - }; - }, -}); - -export default agentIdTestAgent; diff --git a/apps/testing/integration-suite/src/agent/session/session-basic.ts b/apps/testing/integration-suite/src/agent/session/session-basic.ts deleted file mode 100644 index b68ba4ed8..000000000 --- a/apps/testing/integration-suite/src/agent/session/session-basic.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const sessionBasicAgent = createAgent('session-basic', { - description: 'Basic session ID and state access', - schema: { - input: s.object({ - operation: s.string(), - key: s.string().optional(), - value: s.any().optional(), - }), - output: s.object({ - operation: s.string(), - sessionId: s.string().optional(), - threadId: s.string().optional(), - value: s.any().optional(), - stateSize: s.number().optional(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const { operation, key, value } = input; - - switch (operation) { - case 'get-ids': { - return { - operation, - sessionId: ctx.session.id, - threadId: ctx.thread.id, - success: true, - }; - } - - case 'session-state-set': { - if (!key) throw new Error('Key required'); - ctx.session.state.set(key, value); - return { - operation, - success: true, - stateSize: ctx.session.state.size, - }; - } - - case 'session-state-get': { - if (!key) throw new Error('Key required'); - const retrieved = ctx.session.state.get(key); - return { - operation, - value: retrieved, - success: true, - }; - } - - case 'thread-state-set': { - if (!key) throw new Error('Key required'); - await ctx.thread.state.set(key, value); - const stateSize = await ctx.thread.state.size(); - return { - operation, - success: true, - stateSize, - }; - } - - case 'thread-state-get': { - if (!key) throw new Error('Key required'); - const retrieved = await ctx.thread.state.get(key); - return { - operation, - value: retrieved, - success: true, - }; - } - - case 'thread-empty': { - const isEmpty = await ctx.thread.empty(); - return { - operation, - value: isEmpty, - success: true, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default sessionBasicAgent; diff --git a/apps/testing/integration-suite/src/agent/session/session-events.ts b/apps/testing/integration-suite/src/agent/session/session-events.ts deleted file mode 100644 index b75e95e47..000000000 --- a/apps/testing/integration-suite/src/agent/session/session-events.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const sessionEventsAgent = createAgent('session-events', { - description: 'Session and thread event listeners', - schema: { - input: s.object({ - operation: s.string(), - testData: s.string().optional(), - }), - output: s.object({ - operation: s.string(), - success: s.boolean(), - message: s.string().optional(), - }), - }, - handler: async (ctx, input) => { - const { operation, testData } = input; - - switch (operation) { - case 'session-completed-listener': { - let completedCalled = false; - - ctx.session.addEventListener('completed', () => { - completedCalled = true; - }); - - // Use waitUntil to verify the event was called - ctx.waitUntil(async () => { - // Wait a bit for event to fire - await new Promise((resolve) => setTimeout(resolve, 100)); - if (!completedCalled) { - ctx.logger.warn('Session completed event was not called'); - } - }); - - return { - operation, - success: true, - message: 'Session completed listener registered', - }; - } - - case 'thread-destroyed-listener': { - ctx.thread.addEventListener('destroyed', () => { - ctx.logger.info('Thread destroyed event fired'); - }); - - return { - operation, - success: true, - message: 'Thread destroyed listener registered', - }; - } - - case 'session-state-persistence': { - // Set state that should only exist for this session - ctx.session.state.set('testData', testData); - - return { - operation, - success: true, - message: 'Session state set', - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default sessionEventsAgent; diff --git a/apps/testing/integration-suite/src/agent/state/agent.ts b/apps/testing/integration-suite/src/agent/state/agent.ts deleted file mode 100644 index 6596af694..000000000 --- a/apps/testing/integration-suite/src/agent/state/agent.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * State Persistence Agent - * - * Tests thread and session state persistence. - * Used for HTTP client tests to verify state across requests. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const statePersistenceAgent = createAgent('state', { - description: 'Test thread and session state persistence across requests', - schema: { - input: s.object({ - action: s.string(), // 'save', 'read', 'ids' - threadData: s.string().optional(), // Data to save in thread state - sessionData: s.string().optional(), // Data to save in session state - }), - output: s.object({ - action: s.string(), - success: s.boolean(), - sessionId: s.string().optional(), - threadId: s.string().optional(), - threadState: s.any().optional(), // Thread state contents - sessionState: s.any().optional(), // Session state contents - }), - }, - handler: async (ctx, input) => { - const { action, threadData, sessionData } = input; - - switch (action) { - case 'save': { - // Save to thread state (persists across requests) - if (threadData) { - await ctx.thread.state.set('testData', threadData); - - // Increment request counter in thread state - const requestCount = ((await ctx.thread.state.get('requestCount')) ?? 0) + 1; - await ctx.thread.state.set('requestCount', requestCount); - } - - // Save to session state (request-scoped) - if (sessionData) { - ctx.session.state.set('sessionData', sessionData); - } - - return { - action, - success: true, - sessionId: ctx.session.id, - threadId: ctx.thread.id, - threadState: { - testData: await ctx.thread.state.get('testData'), - requestCount: await ctx.thread.state.get('requestCount'), - }, - sessionState: { - sessionData: ctx.session.state.get('sessionData'), - }, - }; - } - - case 'read': { - // Read from thread state - const testData = await ctx.thread.state.get('testData'); - const requestCount = await ctx.thread.state.get('requestCount'); - - // Read from session state (should be empty in new request) - const sessionData = ctx.session.state.get('sessionData'); - - return { - action, - success: true, - sessionId: ctx.session.id, - threadId: ctx.thread.id, - threadState: { - testData, - requestCount, - }, - sessionState: { - sessionData, - }, - }; - } - - case 'ids': { - // Just return IDs without modifying state - return { - action, - success: true, - sessionId: ctx.session.id, - threadId: ctx.thread.id, - }; - } - - default: - throw new Error(`Unknown action: ${action}`); - } - }, -}); - -export default statePersistenceAgent; diff --git a/apps/testing/integration-suite/src/agent/state/reader-agent.ts b/apps/testing/integration-suite/src/agent/state/reader-agent.ts deleted file mode 100644 index 45d74f4ab..000000000 --- a/apps/testing/integration-suite/src/agent/state/reader-agent.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * State Reader Agent - * - * Reads thread state set by other agents. - * Used to test cross-agent thread state sharing. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const stateReaderAgent = createAgent('state-reader', { - description: 'Read thread state set by other agents', - schema: { - input: s.object({ - key: s.string(), // Key to read from thread state - }), - output: s.object({ - success: s.boolean(), - threadId: s.string(), - value: s.any().optional(), - allKeys: s.array(s.string()), - }), - }, - handler: async (ctx, input) => { - const { key } = input; - - // Get value for the requested key - const value = await ctx.thread.state.get(key); - - // Get all keys in thread state - const allKeys = await ctx.thread.state.keys(); - - return { - success: true, - threadId: ctx.thread.id, - value, - allKeys, - }; - }, -}); - -export default stateReaderAgent; diff --git a/apps/testing/integration-suite/src/agent/state/writer-agent.ts b/apps/testing/integration-suite/src/agent/state/writer-agent.ts deleted file mode 100644 index c777b2501..000000000 --- a/apps/testing/integration-suite/src/agent/state/writer-agent.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * State Writer Agent - * - * Writes thread state that can be read by other agents. - * Used to test cross-agent thread state sharing. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const stateWriterAgent = createAgent('state-writer', { - description: 'Write thread state for other agents to read', - schema: { - input: s.object({ - key: s.string(), // Key to write to thread state - value: s.any(), // Value to write - }), - output: s.object({ - success: s.boolean(), - threadId: s.string(), - key: s.string(), - value: s.any(), - }), - }, - handler: async (ctx, input) => { - const { key, value } = input; - - // Write to thread state - ctx.thread.state.set(key, value); - - return { - success: true, - threadId: ctx.thread.id, - key, - value, - }; - }, -}); - -export default stateWriterAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/binary/upload-download.ts b/apps/testing/integration-suite/src/agent/storage/binary/upload-download.ts deleted file mode 100644 index 1dc8a406b..000000000 --- a/apps/testing/integration-suite/src/agent/storage/binary/upload-download.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Binary Storage Agent - * - * Handles upload and download of binary data via Stream storage. - * Tests binary integrity with MD5 verification. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import crypto from 'crypto'; - -const binaryStorageAgent = createAgent('storage-binary-upload-download', { - description: 'Upload and download binary data with integrity verification', - schema: { - input: s.object({ - operation: s.string(), // 'upload', 'download', 'verify' - name: s.string().optional(), // Stream name - streamId: s.string().optional(), // Stream ID for download - data: s.string().optional(), // Binary data (base64-encoded) - contentType: s.string().optional(), // MIME type - md5: s.string().optional(), // Expected MD5 for verification - }), - output: s.object({ - operation: s.string(), - success: s.boolean(), - streamId: s.string().optional(), - name: s.string().optional(), - md5: s.string().optional(), // MD5 hash of data - data: s.string().optional(), // Downloaded data (base64-encoded) - contentType: s.string().optional(), - size: s.number().optional(), // Size in bytes - }), - }, - handler: async (ctx, input) => { - const { operation, name, streamId, data, contentType } = input; - - switch (operation) { - case 'upload': { - if (!name || data === undefined) { - throw new Error('Name and data required for upload'); - } - - // Decode base64 to Uint8Array - const binaryData = Buffer.from(data, 'base64'); - - // Calculate MD5 hash - const md5Hash = crypto.createHash('md5').update(binaryData).digest('hex'); - - // Create stream - const stream = await ctx.stream.create(name, { - contentType: contentType || 'application/octet-stream', - metadata: { - md5: md5Hash, - size: binaryData.length.toString(), - uploadedAt: new Date().toISOString(), - }, - ttl: 1800, - }); - - // Write data - await stream.write(binaryData); - - // Close stream - await stream.close(); - - return { - operation, - success: true, - streamId: stream.id as string, - name, - md5: md5Hash, - contentType: contentType || 'application/octet-stream', - size: binaryData.length, - }; - } - - case 'download': { - if (!streamId) { - throw new Error('Stream ID required for download'); - } - - // Download stream - const readable = await ctx.stream.download(streamId); - - // Read chunks - const chunks: Buffer[] = []; - let _idx = 0; - for await (const chunk of readable as any) { - // Normalize to Buffer - const buf = Buffer.isBuffer(chunk) - ? chunk - : chunk instanceof Uint8Array - ? Buffer.from(chunk) - : Buffer.from(chunk); - - chunks.push(buf); - _idx++; - } - - // Combine chunks - const combined = Buffer.concat(chunks); - - // Calculate MD5 hash - const md5Hash = crypto.createHash('md5').update(combined).digest('hex'); - - // Convert to base64 for JSON serialization - const dataBase64 = combined.toString('base64'); - - return { - operation, - success: true, - streamId, - md5: md5Hash, - data: dataBase64, - size: combined.length, - }; - } - - case 'verify': { - if (!data || !input.md5) { - throw new Error('Data and expected MD5 required for verification'); - } - - // Decode base64 to Buffer - const binaryData = Buffer.from(data, 'base64'); - - // Calculate MD5 hash - const actualMd5 = crypto.createHash('md5').update(binaryData).digest('hex'); - - return { - operation, - success: actualMd5 === input.md5, - md5: actualMd5, - size: binaryData.length, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default binaryStorageAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/kv/crud.ts b/apps/testing/integration-suite/src/agent/storage/kv/crud.ts deleted file mode 100644 index 8dba4ab8a..000000000 --- a/apps/testing/integration-suite/src/agent/storage/kv/crud.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const kvCrudAgent = createAgent('storage-kv-crud', { - description: 'KeyValue storage CRUD operations', - schema: { - input: s.object({ - operation: s.enum(['set', 'get', 'delete', 'has']), - key: s.string(), - value: s.string().optional(), - namespace: s.string().optional(), - ttl: s.number().optional(), - }), - output: s.object({ - operation: s.string(), - key: s.string(), - value: s.string().optional(), - exists: s.boolean().optional(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const { operation, key, value, namespace = 'test', ttl } = input; - - switch (operation) { - case 'set': - if (!value) throw new Error('Value required for set operation'); - await ctx.kv.set(namespace, key, value, ttl ? { ttl } : undefined); - return { operation, key, value, success: true }; - - case 'get': { - const result = await ctx.kv.get(namespace, key); - return { - operation, - key, - value: result.exists ? result.data : undefined, - exists: result.exists, - success: true, - }; - } - - case 'delete': - await ctx.kv.delete(namespace, key); - return { operation, key, success: true }; - - case 'has': { - const result = await ctx.kv.get(namespace, key); - return { operation, key, exists: result.exists, success: true }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default kvCrudAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/kv/isolation.ts b/apps/testing/integration-suite/src/agent/storage/kv/isolation.ts deleted file mode 100644 index 106c3d2c8..000000000 --- a/apps/testing/integration-suite/src/agent/storage/kv/isolation.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const kvIsolationAgent = createAgent('storage-kv-isolation', { - description: 'Test KV isolation between requests', - schema: { - input: s.object({ - key: s.string(), - value: s.string(), - namespace: s.string().optional(), - ttl: s.number().optional(), - }), - output: s.object({ - key: s.string(), - setValue: s.string(), - getValue: s.string().optional(), - sessionId: s.string(), - }), - }, - handler: async (ctx, input) => { - const { namespace = 'test', ttl } = input; - - // Set a value - await ctx.kv.set(namespace, input.key, input.value, ttl ? { ttl } : undefined); - - // Immediately get it back - const result = await ctx.kv.get(namespace, input.key); - - return { - key: input.key, - setValue: input.value, - getValue: result.exists ? result.data : undefined, - sessionId: ctx.sessionId, - }; - }, -}); - -export default kvIsolationAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/kv/types.ts b/apps/testing/integration-suite/src/agent/storage/kv/types.ts deleted file mode 100644 index 7869e931a..000000000 --- a/apps/testing/integration-suite/src/agent/storage/kv/types.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const kvTypesAgent = createAgent('storage-kv-types', { - description: 'KeyValue storage with different value types', - schema: { - input: s.object({ - operation: s.enum(['set-string', 'set-object', 'set-number', 'set-boolean', 'get']), - key: s.string(), - value: s.any().optional(), - namespace: s.string().optional(), - ttl: s.number().optional(), - }), - output: s.object({ - operation: s.string(), - key: s.string(), - value: s.any().optional(), - valueType: s.string().optional(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const { operation, key, value, namespace = 'test', ttl } = input; - - switch (operation) { - case 'set-string': - await ctx.kv.set(namespace, key, String(value), ttl ? { ttl } : undefined); - return { operation, key, value, valueType: 'string', success: true }; - - case 'set-object': - // Store object as JSON - await ctx.kv.set(namespace, key, value, { - contentType: 'application/json', - ...(ttl ? { ttl } : {}), - }); - return { operation, key, value, valueType: 'object', success: true }; - - case 'set-number': - await ctx.kv.set(namespace, key, Number(value), ttl ? { ttl } : undefined); - return { operation, key, value: Number(value), valueType: 'number', success: true }; - - case 'set-boolean': - await ctx.kv.set(namespace, key, Boolean(value), ttl ? { ttl } : undefined); - return { operation, key, value: Boolean(value), valueType: 'boolean', success: true }; - - case 'get': { - const result = await ctx.kv.get(namespace, key); - return { - operation, - key, - value: result.exists ? result.data : undefined, - valueType: result.exists ? typeof result.data : 'undefined', - success: true, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default kvTypesAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/stream/crud.ts b/apps/testing/integration-suite/src/agent/storage/stream/crud.ts deleted file mode 100644 index 81688bb63..000000000 --- a/apps/testing/integration-suite/src/agent/storage/stream/crud.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const streamCrudAgent = createAgent('storage-stream-crud', { - description: 'Stream storage CRUD operations', - schema: { - input: s.object({ - operation: s.string(), - name: s.string().optional(), - streamId: s.string().optional(), - data: s.string().optional(), - }), - output: s.object({ - operation: s.string(), - streamId: s.string().optional(), - url: s.string().optional(), - data: s.string().optional(), - sizeBytes: s.number().optional(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const { operation, name, streamId, data } = input; - - switch (operation) { - case 'create-write-close': { - if (!name) throw new Error('Name required for create operation'); - if (!data) throw new Error('Data required for write operation'); - - const stream = await ctx.stream.create(name, { ttl: 1800 }); - await stream.write(data); - await stream.close(); - - return { - operation, - streamId: stream.id, - url: stream.url, - success: true, - }; - } - - case 'create-write-read': { - if (!name) throw new Error('Name required for create operation'); - if (!data) throw new Error('Data required for write operation'); - - const stream = await ctx.stream.create(name, { ttl: 1800 }); - await stream.write(data); - await stream.close(); - - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - const textDecoder = new TextDecoder(); - - for await (const chunk of reader as any) { - chunks.push(chunk); - } - - const combinedChunks = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - combinedChunks.set(chunk, offset); - offset += chunk.length; - } - - const readData = textDecoder.decode(combinedChunks); - - return { - operation, - streamId: stream.id, - url: stream.url, - data: readData, - success: true, - }; - } - - case 'download': { - if (!streamId) throw new Error('Stream ID required for download'); - - const readable = await ctx.stream.download(streamId); - const chunks: Uint8Array[] = []; - const textDecoder = new TextDecoder(); - - for await (const chunk of readable as any) { - chunks.push(chunk); - } - - const combinedChunks = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - combinedChunks.set(chunk, offset); - offset += chunk.length; - } - - const downloadedData = textDecoder.decode(combinedChunks); - - return { - operation, - streamId, - data: downloadedData, - success: true, - }; - } - - case 'delete': { - if (!streamId) throw new Error('Stream ID required for delete'); - await ctx.stream.delete(streamId); - return { operation, streamId, success: true }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default streamCrudAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/stream/metadata.ts b/apps/testing/integration-suite/src/agent/storage/stream/metadata.ts deleted file mode 100644 index 950ddbbb0..000000000 --- a/apps/testing/integration-suite/src/agent/storage/stream/metadata.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const streamMetadataAgent = createAgent('storage-stream-metadata', { - description: 'Stream storage metadata operations', - schema: { - input: s.object({ - operation: s.string(), - name: s.string().optional(), - streamId: s.string().optional(), - metadata: s.record(s.string(), s.string()).optional(), - contentType: s.string().optional(), - limit: s.number().optional(), - offset: s.number().optional(), - }), - output: s.object({ - operation: s.string(), - streamId: s.string().optional(), - namespace: s.string().optional(), - url: s.string().optional(), - sizeBytes: s.number().optional(), - metadata: s.record(s.string(), s.string()).optional(), - streams: s - .array( - s.object({ - id: s.string(), - namespace: s.string(), - url: s.string(), - sizeBytes: s.number(), - metadata: s.record(s.string(), s.string()), - }) - ) - .optional(), - total: s.number().optional(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const { operation, name, streamId, metadata, contentType, limit, offset } = input; - - switch (operation) { - case 'create-with-metadata': { - if (!name) throw new Error('Name required for create operation'); - - const stream = await ctx.stream.create(name, { - metadata, - contentType, - ttl: 1800, - }); - - await stream.write('test data with metadata'); - await stream.close(); - - const info = await ctx.stream.get(stream.id); - - return { - operation, - streamId: info.id, - namespace: info.namespace, - url: info.url, - sizeBytes: info.sizeBytes, - metadata: info.metadata ?? undefined, - success: true, - }; - } - - case 'get': { - if (!streamId) throw new Error('Stream ID required for get operation'); - - const info = await ctx.stream.get(streamId); - - return { - operation, - streamId: info.id, - namespace: info.namespace, - url: info.url, - sizeBytes: info.sizeBytes, - metadata: info.metadata ?? undefined, - success: true, - }; - } - - case 'list': { - const result = await ctx.stream.list({ - namespace: name, - metadata, - limit, - offset, - }); - - return { - operation, - streams: result.streams.map((stream) => ({ - ...stream, - metadata: stream.metadata ?? {}, - })), - total: result.total, - success: true, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default streamMetadataAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/stream/types.ts b/apps/testing/integration-suite/src/agent/storage/stream/types.ts deleted file mode 100644 index 9c16633d0..000000000 --- a/apps/testing/integration-suite/src/agent/storage/stream/types.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const streamTypesAgent = createAgent('storage-stream-types', { - description: 'Stream storage with different data types', - schema: { - input: s.object({ - operation: s.string(), - name: s.string(), - data: s.union(s.string(), s.record(s.string(), s.any())).optional(), - }), - output: s.object({ - operation: s.string(), - streamId: s.string(), - url: s.string(), - data: s.union(s.string(), s.record(s.string(), s.any())).optional(), - contentType: s.string().optional(), - success: s.boolean(), - }), - }, - handler: async (ctx, input) => { - const { operation, name, data } = input; - - switch (operation) { - case 'write-string': { - if (typeof data !== 'string') throw new Error('String data required'); - - const stream = await ctx.stream.create(name, { - contentType: 'text/plain', - ttl: 1800, - }); - - await stream.write(data); - await stream.close(); - - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - for await (const chunk of reader as any) { - chunks.push(chunk); - } - - const combinedChunks = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - combinedChunks.set(chunk, offset); - offset += chunk.length; - } - - const readData = new TextDecoder().decode(combinedChunks); - - return { - operation, - streamId: stream.id, - url: stream.url, - data: readData, - contentType: 'text/plain', - success: true, - }; - } - - case 'write-binary': { - if (typeof data !== 'string') throw new Error('String data required for binary test'); - - const stream = await ctx.stream.create(name, { - contentType: 'application/octet-stream', - ttl: 1800, - }); - - const encoder = new TextEncoder(); - const binaryData = encoder.encode(data); - await stream.write(binaryData); - await stream.close(); - - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - for await (const chunk of reader as any) { - chunks.push(chunk); - } - - const combinedChunks = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - combinedChunks.set(chunk, offset); - offset += chunk.length; - } - - const readData = new TextDecoder().decode(combinedChunks); - - return { - operation, - streamId: stream.id, - url: stream.url, - data: readData, - contentType: 'application/octet-stream', - success: true, - }; - } - - case 'write-json': { - if (typeof data !== 'object') throw new Error('Object data required for JSON test'); - - const stream = await ctx.stream.create(name, { - contentType: 'application/json', - ttl: 1800, - }); - - await stream.write(data); - await stream.close(); - - const reader = stream.getReader(); - const chunks: Uint8Array[] = []; - for await (const chunk of reader as any) { - chunks.push(chunk); - } - - const combinedChunks = new Uint8Array( - chunks.reduce((acc, chunk) => acc + chunk.length, 0) - ); - let offset = 0; - for (const chunk of chunks) { - combinedChunks.set(chunk, offset); - offset += chunk.length; - } - - const readData = new TextDecoder().decode(combinedChunks); - const parsedData = JSON.parse(readData); - - return { - operation, - streamId: stream.id, - url: stream.url, - data: parsedData, - contentType: 'application/json', - success: true, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default streamTypesAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/vector/crud.ts b/apps/testing/integration-suite/src/agent/storage/vector/crud.ts deleted file mode 100644 index 390688379..000000000 --- a/apps/testing/integration-suite/src/agent/storage/vector/crud.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const vectorCrudAgent = createAgent('storage-vector-crud', { - description: 'Vector storage CRUD operations', - schema: { - input: s.object({ - operation: s.string(), - namespace: s.string(), - key: s.string().optional(), - keys: s.array(s.string()).optional(), - document: s.string().optional(), - metadata: s.record(s.string(), s.any()).optional(), - }), - output: s.object({ - operation: s.string(), - success: s.boolean(), - id: s.string().optional(), - ids: s.array(s.string()).optional(), - key: s.string().optional(), - exists: s.boolean().optional(), - deleted: s.number().optional(), - data: s.any().optional(), - }), - }, - handler: async (ctx, input) => { - const { operation, namespace, key, keys, document: _document, metadata } = input; - - switch (operation) { - case 'upsert-single': { - if (!key) throw new Error('Key required for upsert'); - - // Use pre-computed embeddings to bypass OpenAI API for testing - // This is a valid 1536-dimensional embedding vector (all zeros for simplicity) - const testEmbeddings = new Array(1536).fill(0.1); - - const results = await ctx.vector.upsert(namespace, { - key, - embeddings: testEmbeddings, - metadata, - }); - - const firstResult = results[0]; - if (!firstResult) throw new Error('No result returned from upsert'); - return { - operation, - success: true, - id: firstResult.id, - key: firstResult.key, - }; - } - - case 'upsert-multiple': { - if (!keys || keys.length === 0) throw new Error('Keys required for multiple upsert'); - - // Use pre-computed embeddings to bypass OpenAI API - // Create fresh array for each document to avoid shared reference issues - const docs = keys.map((k, i) => ({ - key: k, - embeddings: new Array(1536).fill(0.1), - metadata: { ...metadata, index: i }, - })); - - const results = await ctx.vector.upsert(namespace, ...docs); - - return { - operation, - success: true, - ids: results.map((r) => r.id), - }; - } - - case 'get': { - if (!key) throw new Error('Key required for get'); - - const result = await ctx.vector.get(namespace, key); - - return { - operation, - success: true, - exists: result.exists, - data: result.exists ? result.data : undefined, - }; - } - - case 'get-many': { - if (!keys || keys.length === 0) throw new Error('Keys required for getMany'); - - const results = await ctx.vector.getMany(namespace, ...keys); - - const data: Record = {}; - for (const [k, v] of results) { - data[k] = v; - } - - return { - operation, - success: true, - data, - }; - } - - case 'delete': { - if (!key) throw new Error('Key required for delete'); - - const deleted = await ctx.vector.delete(namespace, key); - - return { - operation, - success: true, - deleted, - }; - } - - case 'delete-many': { - if (!keys || keys.length === 0) throw new Error('Keys required for deleteMany'); - - const deleted = await ctx.vector.delete(namespace, ...keys); - - return { - operation, - success: true, - deleted, - }; - } - - case 'exists': { - const exists = await ctx.vector.exists(namespace); - - return { - operation, - success: true, - exists, - }; - } - - default: - throw new Error(`Unknown operation: ${operation}`); - } - }, -}); - -export default vectorCrudAgent; diff --git a/apps/testing/integration-suite/src/agent/storage/vector/search.ts b/apps/testing/integration-suite/src/agent/storage/vector/search.ts deleted file mode 100644 index 9bd9358f0..000000000 --- a/apps/testing/integration-suite/src/agent/storage/vector/search.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const vectorSearchAgent = createAgent('storage-vector-search', { - description: 'Vector storage search operations', - schema: { - input: s.object({ - namespace: s.string(), - query: s.string().optional(), - limit: s.number().optional(), - similarity: s.number().optional(), - metadata: s.record(s.string(), s.any()).optional(), - }), - output: s.object({ - success: s.boolean(), - results: s - .array( - s.object({ - id: s.string(), - key: s.string(), - similarity: s.number(), - metadata: s.record(s.string(), s.any()).optional(), - }) - ) - .optional(), - count: s.number(), - }), - }, - handler: async (ctx, input) => { - const { namespace, limit, similarity, metadata } = input; - - // Use static query text - will leverage embedding cache from upsert operations - const query = input.query || 'test document'; - - const results = await ctx.vector.search(namespace, { - query, - limit, - similarity, - metadata, - }); - - return { - success: true, - results: - results?.length > 0 - ? results.map((r) => ({ - id: r.id, - key: r.key, - similarity: r.similarity, - metadata: r.metadata || undefined, - })) - : [], - count: results?.length || 0, - }; - }, -}); - -export default vectorSearchAgent; diff --git a/apps/testing/integration-suite/src/agent/utils/helpers/agent.ts b/apps/testing/integration-suite/src/agent/utils/helpers/agent.ts deleted file mode 100644 index 32f2d15e9..000000000 --- a/apps/testing/integration-suite/src/agent/utils/helpers/agent.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -enum TransformType { - Uppercase = 'uppercase', - Lowercase = 'lowercase', - Capitalize = 'capitalize', - Reverse = 'reverse', -} - -type TransformResult = { - original: string; - transformed: string; - type: TransformType; -}; - -const helperAgent = createAgent('utils-string-helper', { - schema: { - input: s.object({ - text: s.string(), - transform: s.string(), - }), - output: s.object({ - result: s.string(), - metadata: s.any().optional(), - }), - }, - handler: async (_ctx, input) => { - let transformed: string; - let type: TransformType; - - switch (input.transform) { - case 'uppercase': - transformed = input.text.toUpperCase(); - type = TransformType.Uppercase; - break; - case 'lowercase': - transformed = input.text.toLowerCase(); - type = TransformType.Lowercase; - break; - case 'capitalize': - transformed = input.text.charAt(0).toUpperCase() + input.text.slice(1).toLowerCase(); - type = TransformType.Capitalize; - break; - case 'reverse': - transformed = input.text.split('').reverse().join(''); - type = TransformType.Reverse; - break; - default: - transformed = input.text; - type = TransformType.Uppercase; - } - - const metadata: TransformResult = { - original: input.text, - transformed, - type, - }; - - return { - result: transformed, - metadata, - }; - }, -}); - -export default helperAgent; diff --git a/apps/testing/integration-suite/src/agent/v1/data/agent.ts b/apps/testing/integration-suite/src/agent/v1/data/agent.ts deleted file mode 100644 index bea83c33c..000000000 --- a/apps/testing/integration-suite/src/agent/v1/data/agent.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -interface DataRecord { - id: string; - value: string; - timestamp: number; -} - -const dataAgent = createAgent('v1-data-processor', { - schema: { - input: s.object({ - operation: s.string(), - data: s.any().optional(), - }), - output: s.object({ - success: s.boolean(), - result: s.any().optional(), - }), - }, - handler: async (_ctx, input) => { - switch (input.operation) { - case 'create': { - const record: DataRecord = { - id: `rec_${Date.now()}`, - value: input.data || '', - timestamp: Date.now(), - }; - return { success: true, result: record }; - } - - case 'process': { - return { - success: true, - result: { - processed: true, - data: input.data, - }, - }; - } - - default: - return { success: false }; - } - }, -}); - -export default dataAgent; diff --git a/apps/testing/integration-suite/src/agent/websocket/echo-agent.ts b/apps/testing/integration-suite/src/agent/websocket/echo-agent.ts deleted file mode 100644 index a08ac31fe..000000000 --- a/apps/testing/integration-suite/src/agent/websocket/echo-agent.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * WebSocket Echo Agent - * - * Simple echo WebSocket that sends back any message it receives. - * Used for testing basic WebSocket functionality. - */ - -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const echoAgent = createAgent('websocket-echo', { - description: 'WebSocket echo server for testing', - schema: { - input: s - .object({ - // No input - this is a WebSocket handler - }) - .optional(), - output: s - .object({ - // No output - WebSocket connection - }) - .optional(), - }, - handler: async (ctx) => { - ctx.logger.info('Echo agent handler called (this should not be used for WebSocket)'); - return {}; - }, -}); - -export default echoAgent; diff --git a/apps/testing/integration-suite/src/api/AGENTS.md b/apps/testing/integration-suite/src/api/AGENTS.md deleted file mode 100644 index af1cd3d90..000000000 --- a/apps/testing/integration-suite/src/api/AGENTS.md +++ /dev/null @@ -1,273 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -const validator = createRouter.validator({ - input: createUserSchema, -}); - -router.post('/', validator, async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); -}); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly: - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent from the agents/ folder - const result = await c.agent.hello.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await c.agent.simple.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **Import agents directly** - Import and call agents directly instead of using c.var.agent -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -router.get('/', async (c) => { - try { - const result = await c.agent.myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- All agents are accessible via c.agent.{agentName} -- Validation should use @agentuity/schema or any Standard Schema compatible library -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default diff --git a/apps/testing/integration-suite/src/api/agent-ids/route.ts b/apps/testing/integration-suite/src/api/agent-ids/route.ts deleted file mode 100644 index 623f4ba42..000000000 --- a/apps/testing/integration-suite/src/api/agent-ids/route.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Agent IDs Test API Route - * - * Endpoints for testing that agent IDs are correctly captured in session events. - * - * POST /api/agent-ids/run - Calls an agent and returns the session ID - * GET /api/agent-ids/verify/:sessionId - Retrieves captured agentIds for a session - * GET /api/agent-ids/last - Gets the last completed session's agentIds - */ - -import { createRouter } from '@agentuity/runtime'; -import agentIdTestAgent from '@agents/session/agent-id-test'; -import { testSessionEventProvider } from '@test/helpers/session-event-provider'; - -const router = createRouter(); - -/** - * Run the test agent and return the session ID for later verification. - * The session ID can be used to check what agentIds were captured. - */ -router.post('/run', async (c) => { - const body = await c.req.json().catch(() => ({})); - const message = (body as { message?: string }).message || 'test'; - - // Get the session ID before calling the agent - const sessionId = c.var.sessionId; - - // Call the agent - const result = await agentIdTestAgent.run({ message }); - - return c.json({ - success: true, - sessionId, - agentResult: result, - }); -}); - -/** - * Verify the captured agentIds for a specific session. - */ -router.get('/verify/:sessionId', async (c) => { - const sessionId = c.req.param('sessionId'); - - const events = testSessionEventProvider.getSessionEvents(sessionId); - const completedEvent = testSessionEventProvider.getCompletedSession(sessionId); - const agentIds = testSessionEventProvider.getAgentIds(sessionId); - - return c.json({ - sessionId, - eventCount: events.length, - hasCompleteEvent: !!completedEvent, - agentIds: agentIds || [], - agentIdsCount: agentIds?.length || 0, - completedEvent: completedEvent - ? { - id: completedEvent.id, - threadId: completedEvent.threadId, - statusCode: completedEvent.statusCode, - agentIds: completedEvent.agentIds, - } - : null, - }); -}); - -/** - * Get the last completed session for quick verification. - */ -router.get('/last', async (c) => { - const completedEvent = testSessionEventProvider.getLastCompletedSession(); - - if (!completedEvent) { - return c.json({ error: 'No completed sessions found' }, 404); - } - - return c.json({ - sessionId: completedEvent.id, - threadId: completedEvent.threadId, - statusCode: completedEvent.statusCode, - agentIds: completedEvent.agentIds || [], - agentIdsCount: completedEvent.agentIds?.length || 0, - }); -}); - -/** - * Get all captured sessions for debugging. - */ -router.get('/all', async (c) => { - const sessions = testSessionEventProvider.getAllSessions(); - const eventCount = testSessionEventProvider.getEventCount(); - - return c.json({ - sessionCount: sessions.length, - eventCount, - sessions, - }); -}); - -/** - * Clear all captured events (useful for test isolation). - */ -router.delete('/clear', async (c) => { - testSessionEventProvider.clear(); - return c.json({ success: true, message: 'All captured events cleared' }); -}); - -export default router; diff --git a/apps/testing/integration-suite/src/api/auth/route.ts b/apps/testing/integration-suite/src/api/auth/route.ts deleted file mode 100644 index eb8214f7d..000000000 --- a/apps/testing/integration-suite/src/api/auth/route.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { createRouter } from '@agentuity/runtime'; - -interface LoginRequest { - username: string; - password: string; -} - -interface LoginResponse { - token: string; - expiresAt: number; -} - -const router = createRouter(); - -router.post('/login', async (c) => { - const body = (await c.req.json()) as LoginRequest; - - const response: LoginResponse = { - token: `token-${body.username}`, - expiresAt: Date.now() + 3600000, - }; - - return c.json(response); -}); - -router.post('/logout', async (c) => { - return c.json({ success: true }); -}); - -router.get('/verify', async (c) => { - const authHeader = c.req.header('Authorization'); - return c.json({ valid: !!authHeader }); -}); - -export default router; diff --git a/apps/testing/integration-suite/src/api/custom-name/foobar.ts b/apps/testing/integration-suite/src/api/custom-name/foobar.ts deleted file mode 100644 index 1b9f04d71..000000000 --- a/apps/testing/integration-suite/src/api/custom-name/foobar.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/custom', (c) => c.json({ source: 'foobar.ts', custom: true })); -router.post('/test', (c) => c.json({ created: true })); - -export default router; diff --git a/apps/testing/integration-suite/src/api/index.ts b/apps/testing/integration-suite/src/api/index.ts deleted file mode 100644 index ceb5b43ce..000000000 --- a/apps/testing/integration-suite/src/api/index.ts +++ /dev/null @@ -1,508 +0,0 @@ -import { createRouter, websocket, sse, type WebSocketConnection } from '@agentuity/runtime'; -import { generateText } from 'ai'; -import { createOpenAI } from '@ai-sdk/openai'; -import { testSuite } from '../test/suite'; -import statePersistenceAgent from '@agents/state/agent'; -import stateReaderAgent from '@agents/state/reader-agent'; -import stateWriterAgent from '@agents/state/writer-agent'; -import { mockDatabaseMiddleware } from '../lib/custom-middleware'; - -const router = createRouter(); - -// Add API-level middleware (applies to all routes under /api) -// This demonstrates the pattern from ops-center where middleware is in api/index.ts -router.use('*', mockDatabaseMiddleware('clickhouse')); -router.use('*', mockDatabaseMiddleware('postgres')); -router.use('*', async (c, next) => { - c.set('apiLevelData', 'set-in-api-index-ts'); - await next(); -}); - -// Test execution endpoint with SSE streaming -router.get('/test/run', async (c) => { - const suite = c.req.query('suite'); - const test = c.req.query('test'); - const exclude = c.req.query('exclude'); - const concurrencyStr = c.req.query('concurrency'); - const concurrency = concurrencyStr ? parseInt(concurrencyStr, 10) : 10; - - let tests = testSuite.getTests(suite, test); - - // Filter out excluded suites - if (exclude) { - const excludeSuites = exclude.split(',').map((s) => s.trim()); - tests = tests.filter((t) => !excludeSuites.includes(t.suite)); - } - - if (tests.length === 0) { - return c.json({ error: 'No tests found', suite, test }, 404); - } - - const stream = new ReadableStream({ - async start(controller) { - const encoder = new TextEncoder(); - const write = (event: string, data: any) => { - const message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; - controller.enqueue(encoder.encode(message)); - }; - - write('start', { type: 'start', total: tests.length }); - - let passed = 0; - let failed = 0; - let totalDuration = 0; - - for (let i = 0; i < tests.length; i += concurrency) { - const batch = tests.slice(i, i + concurrency); - const results = await Promise.allSettled(batch.map((t) => testSuite.runTest(t))); - - for (const result of results) { - const testResult = - result.status === 'fulfilled' - ? result.value - : { - name: 'unknown', - passed: false, - error: String(result.reason), - duration: 0, - diagnostics: undefined, - }; - - if (testResult.passed) passed++; - else failed++; - totalDuration += testResult.duration; - - write('progress', { - type: 'progress', - test: testResult.name, - passed: testResult.passed, - error: testResult.error, - stack: testResult.stack, - duration: testResult.duration, - // Include diagnostics for failed tests to help with debugging - ...(testResult.diagnostics && { diagnostics: testResult.diagnostics }), - }); - } - } - - write('complete', { - type: 'complete', - summary: { total: tests.length, passed, failed, duration: totalDuration }, - }); - - controller.close(); - }, - }); - - return new Response(stream, { - headers: { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - }, - }); -}); - -router.get('/test/suites', (c) => { - return c.json({ suites: testSuite.getSuites() }); -}); - -router.get('/test/list', (c) => { - const suite = c.req.query('suite'); - const tests = testSuite.getTests(suite); - - // Group tests by suite - const grouped = new Map(); - for (const t of tests) { - if (!grouped.has(t.suite)) { - grouped.set(t.suite, []); - } - grouped.get(t.suite)!.push({ name: t.name }); - } - - const suites = Array.from(grouped.entries()).map(([suiteName, suiteTests]) => ({ - name: suiteName, - tests: suiteTests, - count: suiteTests.length, - })); - - return c.json({ - total: tests.length, - suites, - }); -}); - -router.get('/health', (c) => { - return c.json({ status: 'ok', timestamp: new Date().toISOString() }); -}); - -// State persistence agent endpoints for HTTP tests -router.post('/agent/state', statePersistenceAgent.validator(), async (c) => { - const input = c.req.valid('json'); - const result = await statePersistenceAgent.run(input); - return c.json(result); -}); - -router.post('/agent/state-reader', stateReaderAgent.validator(), async (c) => { - const input = c.req.valid('json'); - const result = await stateReaderAgent.run(input); - return c.json(result); -}); - -router.post('/agent/state-writer', stateWriterAgent.validator(), async (c) => { - const input = c.req.valid('json'); - const result = await stateWriterAgent.run(input); - return c.json(result); -}); - -// WebSocket routes for testing -router.get( - '/ws/echo', - websocket((_c, ws) => { - // Echo back any message received - ws.onMessage((event) => { - ws.send((event as MessageEvent).data); - }); - }) -); - -// Shared broadcast clients list -// Note: This is intentionally module-level for broadcast functionality -// Tests close connections which removes them from the list -const broadcastClients: WebSocketConnection[] = []; - -router.get( - '/ws/broadcast', - websocket((_c, ws) => { - broadcastClients.push(ws); - - ws.onMessage((event) => { - for (const client of broadcastClients) { - try { - client.send((event as MessageEvent).data); - } catch (_error) { - // Ignore errors sending to closed connections - } - } - }); - - ws.onClose(() => { - const index = broadcastClients.indexOf(ws); - if (index > -1) { - broadcastClients.splice(index, 1); - } - }); - }) -); - -router.get( - '/ws/counter', - websocket((c, ws) => { - let count = 0; - - ws.onOpen(() => { - ws.send(JSON.stringify({ type: 'count', value: count })); - }); - - ws.onMessage((event) => { - try { - const data = JSON.parse((event as MessageEvent).data as string); - - if (data.action === 'increment') { - count++; - ws.send(JSON.stringify({ type: 'count', value: count })); - } else if (data.action === 'decrement') { - count--; - ws.send(JSON.stringify({ type: 'count', value: count })); - } else if (data.action === 'reset') { - count = 0; - ws.send(JSON.stringify({ type: 'count', value: count })); - } - } catch (error) { - // Ignore malformed JSON messages - c.var.logger?.error('Invalid JSON in WebSocket message:', error); - } - }); - }) -); - -// SSE (Server-Sent Events) routes for testing -router.get( - '/sse/simple', - sse(async (_c, stream) => { - // Send a few simple messages - stream.writeSSE({ data: 'Message 1' }); - await new Promise((resolve) => setTimeout(resolve, 10)); - stream.writeSSE({ data: 'Message 2' }); - await new Promise((resolve) => setTimeout(resolve, 10)); - stream.writeSSE({ data: 'Message 3' }); - }) -); - -router.get( - '/sse/events', - sse(async (_c, stream) => { - // Send events with event types - stream.writeSSE({ event: 'start', data: JSON.stringify({ timestamp: Date.now() }) }); - await new Promise((resolve) => setTimeout(resolve, 10)); - stream.writeSSE({ event: 'update', data: JSON.stringify({ progress: 50 }) }); - await new Promise((resolve) => setTimeout(resolve, 10)); - stream.writeSSE({ event: 'complete', data: JSON.stringify({ status: 'done' }) }); - }) -); - -router.get( - '/sse/counter', - sse(async (c, stream) => { - let count = parseInt(c.req.query('count') || '5', 10); - let delay = parseInt(c.req.query('delay') || '50', 10); - - // Validate and sanitize count - if (!Number.isFinite(count) || !Number.isInteger(count) || count < 0) { - count = 5; // Default - } - if (count > 1000) count = 1000; // Cap at 1000 - - // Validate and sanitize delay - if (!Number.isFinite(delay) || !Number.isInteger(delay) || delay < 0) { - delay = 50; // Default - } - if (delay > 5000) delay = 5000; // Cap at 5 seconds - - for (let i = 0; i < count; i++) { - stream.writeSSE({ data: JSON.stringify({ count: i, timestamp: Date.now() }) }); - await new Promise((resolve) => setTimeout(resolve, delay)); - } - }) -); - -router.get( - '/sse/long-lived', - sse(async (c, stream) => { - let duration = parseInt(c.req.query('duration') || '2000', 10); - - // Validate and sanitize duration - if (Number.isNaN(duration) || !Number.isFinite(duration) || duration < 0) { - duration = 2000; // Default to 2 seconds - } - if (duration > 30000) duration = 30000; // Cap at 30 seconds - - const interval = 100; - const startTime = Date.now(); - - while (Date.now() - startTime < duration) { - stream.writeSSE({ - data: JSON.stringify({ - elapsed: Date.now() - startTime, - message: 'Still alive', - }), - }); - await new Promise((resolve) => setTimeout(resolve, interval)); - } - - stream.writeSSE({ event: 'done', data: 'Completed' }); - }) -); - -router.get( - '/sse/abort-test', - sse(async (_c, stream) => { - let aborted = false; - - stream.onAbort(() => { - aborted = true; - }); - - for (let i = 0; i < 100; i++) { - if (aborted) { - break; - } - stream.writeSSE({ data: `Message ${i}` }); - await new Promise((resolve) => setTimeout(resolve, 50)); - } - }) -); - -// Test: SSE with async operations that consume ReadableStreams internally -// This tests the fix for https://github.com/agentuity/sdk/issues/471 -// AI SDK's generateText/generateObject use fetch() internally which returns -// a Response with a ReadableStream body. This test simulates that pattern. -router.get( - '/sse/async-fetch', - sse(async (_c, stream) => { - // Simulate what AI SDK's generateText does: - // 1. Make a fetch request (simulated with ReadableStream) - // 2. Consume the stream to get the result - // 3. Write result to SSE stream - const simulateFetch = async (): Promise => { - // Create a ReadableStream (simulating fetch response body) - const responseStream = new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode('simulated-ai-response')); - controller.close(); - }, - }); - - // Consume the stream (simulating .text() on fetch response) - const reader = responseStream.getReader(); - const chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - - // Decode and return - const combined = new Uint8Array(chunks.reduce((acc, c) => acc + c.length, 0)); - let offset = 0; - for (const chunk of chunks) { - combined.set(chunk, offset); - offset += chunk.length; - } - return new TextDecoder().decode(combined); - }; - - // This should NOT throw "ReadableStream has already been used" - const result1 = await simulateFetch(); - stream.writeSSE({ event: 'fetch-result', data: result1 }); - - // Do it again to verify multiple async stream operations work - const result2 = await simulateFetch(); - stream.writeSSE({ event: 'fetch-result', data: result2 }); - - stream.writeSSE({ event: 'complete', data: 'done' }); - }) -); - -// Test: SSE with error handling -// Verifies that errors in async handlers don't crash the server -router.get( - '/sse/error-handling', - sse(async (c, stream) => { - // Write initial message before error - stream.writeSSE({ event: 'start', data: 'starting' }); - await new Promise((resolve) => setTimeout(resolve, 10)); - - // Simulate an error that should be handled gracefully - const shouldError = c.req.query('error') === 'true'; - if (shouldError) { - throw new Error('Intentional test error'); - } - - stream.writeSSE({ event: 'complete', data: 'done' }); - }) -); - -// Test: SSE with real AI SDK generateText calls -// This tests the fix for https://github.com/agentuity/sdk/issues/471 -// Previously, generateText/generateObject failed with "ReadableStream has already been used" -// when called inside SSE handlers due to a Bun bug with OTEL-instrumented fetch. -router.get( - '/sse/generate-text', - sse(async (_c, stream) => { - stream.writeSSE({ event: 'start', data: 'starting AI SDK test' }); - - // Check if we have an API key - if not, skip the actual AI call - const hasApiKey = !!process.env.OPENAI_API_KEY; - - if (!hasApiKey) { - // Fallback: make real HTTP fetch calls to simulate what AI SDK does internally - // AI SDK uses ReadableStream.tee() internally, which triggers the Bun bug - // This tests the core fix (OTEL-instrumented fetch + tee() in streaming context) - for (let i = 0; i < 3; i++) { - try { - const response = await fetch('https://httpbin.org/post', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ index: i, test: 'sse-generate-text' }), - }); - - // Simulate what AI SDK does: tee() the response body stream - // This is the key operation that triggers the Bun bug with OTEL instrumentation - if (response.body) { - const [stream1, stream2] = response.body.tee(); - - // Consume the first stream (simulating AI SDK's internal processing) - const reader1 = stream1.getReader(); - const chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader1.read(); - if (done) break; - chunks.push(value); - } - - // Cancel the second stream (AI SDK might use it for retries/logging) - await stream2.cancel(); - - // Decode the response - const combined = new Uint8Array(chunks.reduce((acc, c) => acc + c.length, 0)); - let offset = 0; - for (const chunk of chunks) { - combined.set(chunk, offset); - offset += chunk.length; - } - const data = JSON.parse(new TextDecoder().decode(combined)); - - stream.writeSSE({ - event: 'result', - data: JSON.stringify({ index: i, success: true, origin: data.origin }), - }); - } else { - // Fallback if no body (shouldn't happen with httpbin) - const data = await response.json(); - stream.writeSSE({ - event: 'result', - data: JSON.stringify({ index: i, success: true, origin: data.origin }), - }); - } - } catch (error) { - stream.writeSSE({ - event: 'error', - data: JSON.stringify({ - index: i, - error: error instanceof Error ? error.message : 'Unknown error', - }), - }); - } - } - stream.writeSSE({ event: 'complete', data: 'done (simulated - no API key)' }); - return; - } - - // If we have an API key, use actual generateText - const openai = createOpenAI({ - apiKey: process.env.OPENAI_API_KEY, - }); - - try { - // First generateText call - const result1 = await generateText({ - model: openai('gpt-4o-mini'), - prompt: 'Say "test1" and nothing else', - maxOutputTokens: 10, - }); - stream.writeSSE({ - event: 'result', - data: JSON.stringify({ call: 1, text: result1.text }), - }); - - // Second generateText call (sequential - also failed before the fix) - const result2 = await generateText({ - model: openai('gpt-4o-mini'), - prompt: 'Say "test2" and nothing else', - maxOutputTokens: 10, - }); - stream.writeSSE({ - event: 'result', - data: JSON.stringify({ call: 2, text: result2.text }), - }); - - stream.writeSSE({ event: 'complete', data: 'done' }); - } catch (error) { - const message = error instanceof Error ? error.message : 'Unknown error'; - stream.writeSSE({ event: 'error', data: JSON.stringify({ error: message }) }); - } - }) -); - -export default router; diff --git a/apps/testing/integration-suite/src/api/middleware-test/route.ts b/apps/testing/integration-suite/src/api/middleware-test/route.ts deleted file mode 100644 index 26588f46c..000000000 --- a/apps/testing/integration-suite/src/api/middleware-test/route.ts +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Route for testing middleware patterns - * Tests both app.ts middleware and api/index.ts middleware - */ - -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/check-all', (c) => { - // Check app.ts middleware - const authUser = c.get('authUser'); - const requestId = c.get('requestId'); - const requestCount = c.get('requestCount'); - const appLevelData = c.get('appLevelData'); - - // Check api/index.ts middleware - const clickhouseClient = c.get('clickhouseClient'); - const postgresClient = c.get('postgresClient'); - const apiLevelData = c.get('apiLevelData'); - - return c.json({ - success: true, - appMiddleware: { - hasAuth: !!authUser, - authUser: authUser || null, - requestId: requestId || null, - requestCount: requestCount || null, - appLevelData: appLevelData || null, - }, - apiMiddleware: { - hasClickhouse: !!clickhouseClient, - hasPostgres: !!postgresClient, - apiLevelData: apiLevelData || null, - }, - }); -}); - -router.get('/query-database', async (c) => { - const clickhouse = c.get('clickhouseClient'); - const postgres = c.get('postgresClient'); - - if (!clickhouse || !postgres) { - return c.json( - { - error: 'Database clients not available', - hasClickhouse: !!clickhouse, - hasPostgres: !!postgres, - }, - 500 - ); - } - - // Test querying both databases - const [clickhouseResult, postgresResult] = await Promise.all([ - clickhouse.query('SELECT * FROM test_table'), - postgres.query('SELECT * FROM users'), - ]); - - return c.json({ - success: true, - clickhouse: { - connected: clickhouse.connected, - result: clickhouseResult, - }, - postgres: { - connected: postgres.connected, - result: postgresResult, - }, - }); -}); - -router.get('/check-auth', (c) => { - const user = c.get('authUser'); - - if (!user) { - return c.json({ error: 'Not authenticated' }, 401); - } - - return c.json({ - authenticated: true, - user: { - id: user.id, - email: user.email, - role: user.role, - }, - }); -}); - -router.get('/analytics-info', (c) => { - return c.json({ - requestId: c.get('requestId') || 'none', - requestCount: c.get('requestCount') || 0, - }); -}); - -export default router; diff --git a/apps/testing/integration-suite/src/api/my-service/index.ts b/apps/testing/integration-suite/src/api/my-service/index.ts deleted file mode 100644 index 7fe178490..000000000 --- a/apps/testing/integration-suite/src/api/my-service/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/status', (c) => c.json({ status: 'online', file: 'index.ts' })); -router.get('/info', (c) => c.json({ name: 'my-service', version: '1.0.0' })); - -export default router; diff --git a/apps/testing/integration-suite/src/api/users/profile/route.ts b/apps/testing/integration-suite/src/api/users/profile/route.ts deleted file mode 100644 index fe6cce9dc..000000000 --- a/apps/testing/integration-suite/src/api/users/profile/route.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { createRouter } from '@agentuity/runtime'; - -interface UserProfile { - id: string; - username: string; - email: string; - createdAt: number; -} - -type ProfileUpdate = Partial>; - -const router = createRouter(); - -router.get('/', async (c) => { - const profile: UserProfile = { - id: 'user-123', - username: 'testuser', - email: 'test@example.com', - createdAt: Date.now(), - }; - - return c.json(profile); -}); - -router.patch('/', async (c) => { - const updates = (await c.req.json()) as ProfileUpdate; - - const updatedProfile: UserProfile = { - id: 'user-123', - username: updates.username || 'testuser', - email: updates.email || 'test@example.com', - createdAt: Date.now() - 86400000, - }; - - return c.json(updatedProfile); -}); - -router.delete('/', async (c) => { - return c.json({ deleted: true }); -}); - -export default router; diff --git a/apps/testing/integration-suite/src/generated/AGENTS.md b/apps/testing/integration-suite/src/generated/AGENTS.md deleted file mode 100644 index 8c9d8864a..000000000 --- a/apps/testing/integration-suite/src/generated/AGENTS.md +++ /dev/null @@ -1,23 +0,0 @@ -# AI Agent Instructions - -**CRITICAL:** Files in this directory are AUTO-GENERATED by the Agentuity build system. - -## Rules for AI Agents - -1. ❌ NEVER edit files in `src/generated/` -2. ❌ NEVER include `src/generated/` files in context when analyzing code -3. ❌ NEVER suggest changes to generated files -4. ✅ Ignore this directory when searching for user code -5. ✅ Direct users to modify source files in `src/agent/`, `src/api/`, `app.ts`, or `.env` files - -## What Gets Generated - -- `registry.ts` - Built from agent discovery in `src/agent/` -- `app.ts` - Entry point assembled from project configuration -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state) - -These files are regenerated on every `bun run build` or `bun run dev`. diff --git a/apps/testing/integration-suite/src/generated/README.md b/apps/testing/integration-suite/src/generated/README.md deleted file mode 100644 index 3f5928ce0..000000000 --- a/apps/testing/integration-suite/src/generated/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Generated Files - DO NOT EDIT - -This directory contains auto-generated TypeScript files created by the Agentuity build system. - -**These files are regenerated on every build.** Any manual changes will be overwritten. - -## Generated Files - -- `registry.ts` - Agent registry from `src/agent/**` -- `app.ts` - Application entry point -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state in `app.ts`) - -## Environment Variable Types - -The `env.d.ts` file provides TypeScript intellisense for your environment variables: - -- **ProcessEnv**: All variables from your `.env` files are typed as `string` -- **ImportMetaEnv**: Only `VITE_*`, `AGENTUITY_PUBLIC_*`, and `PUBLIC_*` prefixed variables (for client-side use) - -Files are merged based on build mode: -- **Development**: `.env.{profile}` → `.env.development` → `.env` (later files override) -- **Production**: `.env.{profile}` → `.env` → `.env.production` (later files override) - -## For Developers - -Do not modify these files. Instead: -- Add/modify agents in `src/agent/` -- Add/modify routes in `src/api/` -- Configure app in `app.ts` -- Add environment variables to `.env` files - -These files ARE version controlled to enable better tooling and type checking. diff --git a/apps/testing/integration-suite/src/generated/env.d.ts b/apps/testing/integration-suite/src/generated/env.d.ts deleted file mode 100644 index 71126f067..000000000 --- a/apps/testing/integration-suite/src/generated/env.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -// @generated -// AUTO-GENERATED from local .env files -// This file is auto-generated by the build tool - do not edit manually - -declare global { - namespace NodeJS { - interface ProcessEnv { - readonly AGENTUITY_REGION: string; - readonly AGENTUITY_SDK_KEY: string; - } - } -} - -// Vite-compatible environment types -// Only includes variables with VITE_, AGENTUITY_PUBLIC_, or PUBLIC_ prefix -interface ImportMetaEnv { - // No VITE_*, AGENTUITY_PUBLIC_*, or PUBLIC_* prefixed variables found -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} - -export {}; - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! diff --git a/apps/testing/integration-suite/src/index.ts b/apps/testing/integration-suite/src/index.ts new file mode 100644 index 000000000..b3d60723a --- /dev/null +++ b/apps/testing/integration-suite/src/index.ts @@ -0,0 +1,71 @@ +/** + * Integration Suite + * + * A plain Hono backend that exercises all Agentuity services. + * Used for end-to-end integration testing of the service client packages. + * + * Each route group tests a different Agentuity service: + * - /api/kv — Key-Value store + * - /api/vector — Vector search + * - /api/queue — Queue operations + * - /api/health — Health check + */ + +import { Hono } from 'hono'; + +const app = new Hono(); + +app.get('/', (c) => { + return c.json({ + name: 'integration-suite', + description: 'Agentuity services integration tests', + services: ['keyvalue', 'vector', 'queue', 'email', 'schedule', 'task'], + }); +}); + +app.get('/api/health', (c) => { + return c.json({ status: 'ok', timestamp: new Date().toISOString() }); +}); + +// ── Key-Value ──────────────────────────────────────────────────────────────── + +app.post('/api/kv/set', async (c) => { + const { key, value } = await c.req.json(); + // TODO: Use @agentuity/keyvalue client + return c.json({ ok: true, key, value }); +}); + +app.get('/api/kv/get/:key', async (c) => { + const key = c.req.param('key'); + // TODO: Use @agentuity/keyvalue client + return c.json({ key, value: null }); +}); + +// ── Vector ─────────────────────────────────────────────────────────────────── + +app.post('/api/vector/upsert', async (c) => { + const body = await c.req.json(); + // TODO: Use @agentuity/vector client + return c.json({ ok: true, id: body.id }); +}); + +app.post('/api/vector/search', async (c) => { + const { query } = await c.req.json(); + // TODO: Use @agentuity/vector client + return c.json({ query, results: [] }); +}); + +// ── Queue ──────────────────────────────────────────────────────────────────── + +app.post('/api/queue/publish', async (c) => { + const body = await c.req.json(); + // TODO: Use @agentuity/queue client + return c.json({ ok: true, messageId: `msg_${Date.now()}` }); +}); + +const port = parseInt(process.env.PORT || '3000', 10); + +export default { + port, + fetch: app.fetch, +}; diff --git a/apps/testing/integration-suite/src/lib/custom-middleware.ts b/apps/testing/integration-suite/src/lib/custom-middleware.ts deleted file mode 100644 index 7b63db310..000000000 --- a/apps/testing/integration-suite/src/lib/custom-middleware.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Custom middleware helpers for testing - * Simulates real-world middleware like database clients, auth, etc. - */ - -import type { MiddlewareHandler } from 'hono'; - -// Simulate a database client -export interface MockDatabaseClient { - query: (sql: string) => Promise<{ rows: any[] }>; - connected: boolean; -} - -// Simulate an auth user -export interface MockAuthUser { - id: string; - email: string; - role: string; -} - -/** - * Middleware that adds a mock database client (simulates ClickHouse, Postgres, etc.) - */ -export function mockDatabaseMiddleware(name: string): MiddlewareHandler { - return async (c, next) => { - const client: MockDatabaseClient = { - connected: true, - query: async (sql: string) => { - return { - rows: [ - { - id: 1, - source: name, - query: sql, - timestamp: new Date().toISOString(), - }, - ], - }; - }, - }; - - c.set(`${name}Client` as any, client); - await next(); - }; -} - -/** - * Middleware that adds mock auth (simulates Clerk, Auth0, etc.) - */ -export function mockAuthMiddleware(): MiddlewareHandler { - return async (c, next) => { - const user: MockAuthUser = { - id: 'user-123', - email: 'test@example.com', - role: 'admin', - }; - - c.set('authUser' as any, user); - await next(); - }; -} - -/** - * Middleware that adds a custom header to all responses - */ -export function customHeaderMiddleware(headerName: string, headerValue: string): MiddlewareHandler { - return async (c, next) => { - await next(); - c.res.headers.set(headerName, headerValue); - }; -} - -/** - * Middleware that tracks request count (simulates analytics) - */ -let requestCount = 0; - -export function analyticsMiddleware(): MiddlewareHandler { - return async (c, next) => { - requestCount++; - c.set('requestId' as any, `req-${requestCount}`); - c.set('requestCount' as any, requestCount); - await next(); - }; -} - -export function getRequestCount(): number { - return requestCount; -} - -export function resetRequestCount(): void { - requestCount = 0; -} diff --git a/apps/testing/integration-suite/src/test/agent-nested.ts b/apps/testing/integration-suite/src/test/agent-nested.ts deleted file mode 100644 index ca1fc3ba0..000000000 --- a/apps/testing/integration-suite/src/test/agent-nested.ts +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Nested Agent Directory Tests - * - * Tests that agents in nested directories are properly discovered, - * registered, and can be executed with TypeScript support. - */ - -import { test } from '@test/suite'; -import { assertEqual, assertDefined, assert } from '@test/helpers'; -import dataAgent from '@agents/v1/data/agent'; -import helperAgent from '@agents/utils/helpers/agent'; - -// Test: V1 data agent - create operation -test('agent-nested', 'v1-data-create', async () => { - const result = await dataAgent.run({ - operation: 'create', - data: 'test-value', - }); - - assertEqual(result.success, true); - assertDefined(result.result); - assert(typeof result.result === 'object', 'Result should be an object'); - assert('id' in result.result, 'Result should have id field'); - assert('value' in result.result, 'Result should have value field'); - assert('timestamp' in result.result, 'Result should have timestamp field'); -}); - -// Test: V1 data agent - process operation -test('agent-nested', 'v1-data-process', async () => { - const testData = { key: 'value', count: 42 }; - const result = await dataAgent.run({ - operation: 'process', - data: testData, - }); - - assertEqual(result.success, true); - assertDefined(result.result); - assert(result.result.processed === true, 'Should be marked as processed'); - assert(result.result.data.key === 'value', 'Should preserve input data'); -}); - -// Test: V1 data agent - unknown operation -test('agent-nested', 'v1-data-unknown', async () => { - const result = await dataAgent.run({ - operation: 'unknown', - }); - - assertEqual(result.success, false); -}); - -// Test: Utils helper agent - uppercase transform -test('agent-nested', 'utils-helper-uppercase', async () => { - const result = await helperAgent.run({ - text: 'hello world', - transform: 'uppercase', - }); - - assertEqual(result.result, 'HELLO WORLD'); - assertDefined(result.metadata); - assert(result.metadata.type === 'uppercase', 'Type should be uppercase'); - assertEqual(result.metadata.original, 'hello world'); -}); - -// Test: Utils helper agent - lowercase transform -test('agent-nested', 'utils-helper-lowercase', async () => { - const result = await helperAgent.run({ - text: 'HELLO WORLD', - transform: 'lowercase', - }); - - assertEqual(result.result, 'hello world'); - assertEqual(result.metadata.type, 'lowercase'); -}); - -// Test: Utils helper agent - capitalize transform -test('agent-nested', 'utils-helper-capitalize', async () => { - const result = await helperAgent.run({ - text: 'hello world', - transform: 'capitalize', - }); - - assertEqual(result.result, 'Hello world'); - assertEqual(result.metadata.type, 'capitalize'); -}); - -// Test: Utils helper agent - reverse transform -test('agent-nested', 'utils-helper-reverse', async () => { - const result = await helperAgent.run({ - text: 'hello', - transform: 'reverse', - }); - - assertEqual(result.result, 'olleh'); - assertEqual(result.metadata.type, 'reverse'); -}); - -// Test: TypeScript interfaces work in nested agents -test('agent-nested', 'typescript-interfaces', async () => { - // The v1/data/agent.ts uses DataRecord interface - const createResult = await dataAgent.run({ - operation: 'create', - data: 'interface-test', - }); - - assertEqual(createResult.success, true); - - // The utils/helpers/agent.ts uses enums and type aliases - const transformResult = await helperAgent.run({ - text: 'enum-test', - transform: 'uppercase', - }); - - assertEqual(transformResult.result, 'ENUM-TEST'); - - // If we got here, TypeScript compilation worked correctly - assert(true, 'Nested agents with TypeScript types executed successfully'); -}); - -// Test: Agents can be imported using path aliases -test('agent-nested', 'path-alias-imports', async () => { - // Importing from @agents/v1/data/agent and @agents/utils/helpers/agent - // proves that nested path resolution works - - assertDefined(dataAgent, 'V1 data agent should be imported'); - assertDefined(helperAgent, 'Utils helper agent should be imported'); - - // Verify agents have correct metadata - assert(dataAgent.metadata.name === 'v1-data-processor', 'Data agent should have correct name'); - assert( - helperAgent.metadata.name === 'utils-string-helper', - 'Helper agent should have correct name' - ); -}); diff --git a/apps/testing/integration-suite/src/test/ai-sdk-gateway.ts b/apps/testing/integration-suite/src/test/ai-sdk-gateway.ts deleted file mode 100644 index d694f6f21..000000000 --- a/apps/testing/integration-suite/src/test/ai-sdk-gateway.ts +++ /dev/null @@ -1,91 +0,0 @@ -/** - * AI SDK Gateway Tests - * - * Tests for AI Gateway API key injection (issue #348) - * - * These tests verify that: - * 1. AGENTUITY_SDK_KEY and AGENTUITY_TRANSPORT_URL are loaded from .env - * 2. The AI SDK patches correctly inject the API key - * 3. createOpenAI() works without explicit apiKey when gateway is configured - */ - -import { test } from './suite'; -import { assert, assertEqual, assertTruthy } from './helpers'; -import aiSdkGatewayCheckAgent from '@agents/ai-sdk/gateway-check'; - -// Test: Environment variables are loaded for AI Gateway -test('ai-sdk-gateway', 'env-vars-loaded', async () => { - const result = await aiSdkGatewayCheckAgent.run({ operation: 'check-env' }); - - assertEqual(result.operation, 'check-env'); - - // In a properly configured environment, both should be true - // If running without cloud config, this test documents the expected behavior - if (result.hasSDKKey && result.hasTransportUrl) { - assertTruthy(result.success, 'Should succeed when env vars are present'); - assert( - result.message.includes('configured'), - 'Message should indicate configuration is correct' - ); - } else { - // Document which vars are missing (helpful for debugging) - console.log(`[ai-sdk-gateway] SDK Key present: ${result.hasSDKKey}`); - console.log(`[ai-sdk-gateway] Transport URL present: ${result.hasTransportUrl}`); - } -}); - -// Test: createOpenAI() works without explicit apiKey (issue #348 regression test) -test('ai-sdk-gateway', 'create-provider-no-apikey', async () => { - const result = await aiSdkGatewayCheckAgent.run({ operation: 'create-provider' }); - - assertEqual(result.operation, 'create-provider'); - - // This is the core test for issue #348 - // Before the fix: createOpenAI({}) would throw "API key is missing" - // After the fix: Gateway injects AGENTUITY_SDK_KEY as the apiKey - if (result.hasSDKKey && result.hasTransportUrl) { - assertTruthy( - result.success, - `createOpenAI should succeed with gateway injection: ${result.error || result.message}` - ); - assert(!result.error, `Should not have error when gateway is configured: ${result.error}`); - } else { - // Without gateway config, we expect it to fail with API key error - // This is expected behavior when not connected to cloud - console.log(`[ai-sdk-gateway] Skipping assertion - no gateway config`); - console.log(`[ai-sdk-gateway] Result: ${result.message}`); - } -}); - -// Test: Model instance can be created -test('ai-sdk-gateway', 'create-model-instance', async () => { - const result = await aiSdkGatewayCheckAgent.run({ operation: 'create-model' }); - - assertEqual(result.operation, 'create-model'); - - if (result.hasSDKKey && result.hasTransportUrl) { - assertTruthy( - result.success, - `Model creation should succeed: ${result.error || result.message}` - ); - } else { - console.log(`[ai-sdk-gateway] Skipping model test - no gateway config`); - } -}); - -// Test: Verify gateway environment check reports correct state -test('ai-sdk-gateway', 'env-check-consistency', async () => { - const result = await aiSdkGatewayCheckAgent.run({ operation: 'check-env' }); - - // Verify the result structure is correct - assertEqual(typeof result.success, 'boolean', 'success should be boolean'); - assertEqual(typeof result.hasSDKKey, 'boolean', 'hasSDKKey should be boolean'); - assertEqual(typeof result.hasTransportUrl, 'boolean', 'hasTransportUrl should be boolean'); - assertEqual(typeof result.message, 'string', 'message should be string'); - - // Success should only be true if both env vars are present - if (result.success) { - assertTruthy(result.hasSDKKey, 'hasSDKKey should be true when success is true'); - assertTruthy(result.hasTransportUrl, 'hasTransportUrl should be true when success is true'); - } -}); diff --git a/apps/testing/integration-suite/src/test/api-route.ts b/apps/testing/integration-suite/src/test/api-route.ts deleted file mode 100644 index 2e1fa2819..000000000 --- a/apps/testing/integration-suite/src/test/api-route.ts +++ /dev/null @@ -1,203 +0,0 @@ -/** - * Test execution API route with SSE streaming - * - * GET /api/test/run?suite=&test=&exclude=&concurrency= - * - * Parameters: - * - suite: Comma-separated list of suite names to run (e.g., "cli-deployment,cli-apikey") - * - test: Filter by test name - * - exclude: Comma-separated list of suite names to exclude - * - concurrency: Number of tests to run in parallel (default: 10) - * - * Streams test results as Server-Sent Events: - * - event: start - Test execution started - * - event: progress - Individual test result - * - event: complete - Final summary - */ - -import { createRouter } from '@agentuity/runtime'; -import { testSuite, type TestResult } from '../test/suite'; - -const router = createRouter(); - -interface SSEEvent { - type: 'start' | 'progress' | 'complete' | 'error'; - test?: string; - passed?: boolean; - error?: string; - stack?: string; - duration?: number; - summary?: { - total: number; - passed: number; - failed: number; - duration: number; - }; -} - -/** - * Format an SSE event - */ -function formatSSE(event: string, data: SSEEvent): string { - return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; -} - -/** - * Test execution endpoint with SSE streaming - */ -router.get('/api/test/run', async (c) => { - const suite = c.req.query('suite'); - const test = c.req.query('test'); - const exclude = c.req.query('exclude'); - const concurrencyStr = c.req.query('concurrency'); - const concurrency = concurrencyStr ? parseInt(concurrencyStr, 10) : 10; - - // Get matching tests - // Suite parameter can be comma-separated to include multiple suites - let tests: ReturnType = []; - if (suite) { - const suiteNames = suite.split(',').map((s) => s.trim()); - for (const suiteName of suiteNames) { - tests = tests.concat(testSuite.getTests(suiteName, test)); - } - } else { - tests = testSuite.getTests(undefined, test); - } - - // Optionally exclude certain suites - if (exclude) { - const excludeSuites = exclude.split(',').map((s) => s.trim()); - tests = tests.filter((t) => !excludeSuites.includes(t.suite)); - } - - if (tests.length === 0) { - return c.json( - { - error: 'No tests found matching criteria', - suite, - test, - }, - 404 - ); - } - - // Create SSE stream - const stream = new ReadableStream({ - async start(controller) { - const encoder = new TextEncoder(); - - // Send start event - const startEvent: SSEEvent = { - type: 'start', - summary: { - total: tests.length, - passed: 0, - failed: 0, - duration: 0, - }, - }; - controller.enqueue(encoder.encode(formatSSE('start', startEvent))); - - let passed = 0; - let failed = 0; - let totalDuration = 0; - - // Run tests in batches with concurrency limit - for (let i = 0; i < tests.length; i += concurrency) { - const batch = tests.slice(i, i + concurrency); - const results = await Promise.allSettled(batch.map((t) => testSuite.runTest(t))); - - // Stream each result as it completes - for (const result of results) { - let testResult: TestResult; - - if (result.status === 'fulfilled') { - testResult = result.value; - } else { - // Handle unexpected promise rejection - testResult = { - name: 'unknown', - passed: false, - error: String(result.reason), - duration: 0, - }; - } - - // Update counters - if (testResult.passed) { - passed++; - } else { - failed++; - } - totalDuration += testResult.duration; - - // Send progress event - const progressEvent: SSEEvent = { - type: 'progress', - test: testResult.name, - passed: testResult.passed, - error: testResult.error, - stack: testResult.stack, - duration: testResult.duration, - }; - controller.enqueue(encoder.encode(formatSSE('progress', progressEvent))); - } - } - - // Send complete event with summary - const completeEvent: SSEEvent = { - type: 'complete', - summary: { - total: tests.length, - passed, - failed, - duration: totalDuration, - }, - }; - controller.enqueue(encoder.encode(formatSSE('complete', completeEvent))); - - controller.close(); - }, - }); - - return new Response(stream, { - headers: { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - }, - }); -}); - -/** - * List available test suites - */ -router.get('/api/test/suites', (c) => { - const suites = testSuite.getSuites(); - return c.json({ suites }); -}); - -/** - * List all tests - */ -router.get('/api/test/list', (c) => { - const suite = c.req.query('suite'); - const tests = testSuite.getTests(suite); - - return c.json({ - total: tests.length, - tests: tests.map((t) => ({ - suite: t.suite, - name: t.name, - })), - }); -}); - -/** - * Health check endpoint - */ -router.get('/health', (c) => { - return c.json({ status: 'ok', timestamp: new Date().toISOString() }); -}); - -export default router; diff --git a/apps/testing/integration-suite/src/test/basic-agents.ts b/apps/testing/integration-suite/src/test/basic-agents.ts deleted file mode 100644 index 659162d79..000000000 --- a/apps/testing/integration-suite/src/test/basic-agents.ts +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Basic Agent Tests - * - * Tests core agent functionality: creation, execution, validation, async behavior - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined } from './helpers'; - -// Import agents to trigger registration -import simpleAgent from '@agents/basic/basic-simple'; -import asyncAgent from '@agents/basic/basic-async'; -import noInputAgent from '@agents/basic/basic-no-input'; -import noOutputAgent from '@agents/basic/basic-no-output'; - -// Helper to call agents -async function callAgent(agent: any, input?: any) { - // Use agent.run() which provides full context automatically - return agent.run(input); -} - -// Test: Simple agent with valid input -test('basic', 'simple-valid-input', async () => { - const result = await callAgent(simpleAgent, { name: 'Alice', age: 30 }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.message, 'Hello, Alice! You are 30 years old.'); - assert(typeof result.timestamp === 'number', 'Timestamp should be a number'); - assert(result.timestamp > 0, 'Timestamp should be positive'); -}); - -// Test: Simple agent metadata -test('basic', 'simple-metadata', async () => { - assertDefined(simpleAgent.metadata, 'Agent should have metadata'); - assertEqual(simpleAgent.metadata.name, 'simple'); - assertEqual(simpleAgent.metadata.description, 'Basic agent with input/output validation'); -}); - -// Test: Async agent with delay -test('basic', 'async-handler', async () => { - const delay = 10; // 10ms delay - const start = Date.now(); - const result = await callAgent(asyncAgent, { delay, message: 'Test' }); - const actualElapsed = Date.now() - start; - - assertDefined(result, 'Result should be defined'); - assertEqual(result.result, 'Processed: Test'); - assert( - result.elapsed >= delay, - `Elapsed time (${result.elapsed}) should be >= delay (${delay})` - ); - assert( - actualElapsed >= delay, - `Actual elapsed (${actualElapsed}) should be >= delay (${delay})` - ); -}); - -// Test: No-input agent -test('basic', 'no-input-agent', async () => { - const result = await callAgent(noInputAgent); - - assertDefined(result, 'Result should be defined'); - assert(typeof result.timestamp === 'number', 'Timestamp should be a number'); - assert(typeof result.random === 'number', 'Random should be a number'); - assert(result.random >= 0 && result.random < 1, 'Random should be between 0 and 1'); -}); - -// Test: No-output agent -test('basic', 'no-output-agent', async () => { - const result = await callAgent(noOutputAgent, { action: 'test-action' }); - - // Agent returns void/undefined - assert(result === undefined, 'Result should be undefined for void output'); -}); - -// Test: Agent has schemas defined -test('basic', 'agent-schemas-defined', async () => { - // Agents should have metadata with schemas - assertDefined(simpleAgent.metadata, 'Agent should have metadata'); - assertDefined(asyncAgent.metadata, 'Async agent should have metadata'); -}); - -// Test: Concurrent agent calls -test('basic', 'concurrent-execution', async () => { - const calls = Array.from({ length: 5 }, (_, i) => - callAgent(simpleAgent, { name: `User${i}`, age: 20 + i }) - ); - - const results = await Promise.all(calls); - - assertEqual(results.length, 5, 'Should have 5 results'); - - for (let i = 0; i < 5; i++) { - assertEqual(results[i].message, `Hello, User${i}! You are ${20 + i} years old.`); - } -}); - -// Test: Agent handler async behavior -test('basic', 'async-promise-handling', async () => { - // Verify that handlers properly handle promises - const result = await callAgent(asyncAgent, { delay: 1, message: 'async-test' }); - - assertDefined(result, 'Async result should be defined'); - assertEqual(result.result, 'Processed: async-test'); -}); diff --git a/apps/testing/integration-suite/src/test/cli-apikey.ts b/apps/testing/integration-suite/src/test/cli-apikey.ts deleted file mode 100644 index e1331ca7a..000000000 --- a/apps/testing/integration-suite/src/test/cli-apikey.ts +++ /dev/null @@ -1,167 +0,0 @@ -/** - * CLI API Key Tests - * - * Tests API key management via CLI commands: - * - List API keys - * - Create API key - * - Get API key details - * - Delete API key - * - Verify deletion - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined } from '@test/helpers'; -import cliAgent from '@agents/cli/agent'; -import { isAuthenticated } from '@test/helpers/cli'; - -// Test 1: List API keys command -test('cli-apikey', 'list-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - // Skip if not authenticated - return; - } - - const result = await cliAgent.run({ - command: 'cloud apikey list', - expectJSON: true, - }); - - // Should execute successfully - assertEqual( - result.exitCode, - 0, - `List command should exit 0. stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}"` - ); - - // Provide detailed diagnostics if JSON parsing failed - const jsonError = (result as any).jsonParseError; - assertDefined( - result.json, - `List command should return JSON. exitCode=${result.exitCode}, ` + - `stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}", ` + - `jsonParseError="${jsonError || 'none'}"` - ); - assert(Array.isArray(result.json), 'List command should return array'); - assert(result.json.length >= 0, 'List should return valid array'); -}); - -// Test 2: Create API key command structure -test('cli-apikey', 'create-command-structure', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - // Test with dry-run or invalid expiration to avoid creating real keys - const result = await cliAgent.run({ - command: 'cloud apikey create', - args: ['--name', 'test-key-never-created'], - }); - - // Command should execute (may fail validation, but structure is valid) - assert(result.stdout !== undefined, 'Create command should produce output'); -}); - -// Test 3: Get API key command structure -test('cli-apikey', 'get-command-structure', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - // Try to get a non-existent key - const result = await cliAgent.run({ - command: 'cloud apikey get', - args: ['apikey_nonexistent123'], - expectJSON: true, - }); - - // Should fail (key doesn't exist) but command structure is valid - assert( - result.stdout !== undefined || result.stderr !== undefined, - 'Get command should produce output' - ); -}); - -// Test 4: Delete API key command structure -test('cli-apikey', 'delete-command-structure', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - // Try to delete a non-existent key - const result = await cliAgent.run({ - command: 'cloud apikey delete', - args: ['apikey_nonexistent123', '--json'], - }); - - // Should execute (may fail, but command is valid) - assert( - result.stdout !== undefined || result.stderr !== undefined, - 'Delete command should produce output' - ); -}); - -// Test 5: JSON output parsing -test('cli-apikey', 'json-output-parsing', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud apikey list', - expectJSON: true, - }); - - // If succeeded, should have JSON - if (result.success) { - // JSON should be array or object - assert(result.json !== undefined, 'JSON output should be parsed'); - } -}); - -// Test 6: Help command -test('cli-apikey', 'help-command', async () => { - const result = await cliAgent.run({ - command: 'cloud apikey help', - }); - - // Help should succeed - assert( - result.stdout !== undefined, - `Help should produce output: exitCode=${result.exitCode}, stderr="${result.stderr?.slice(0, 200)}"` - ); - assert( - (result.stdout?.includes('apikey') || result.stdout?.includes('API')) ?? false, - `Help should mention API keys: stdout="${result.stdout?.slice(0, 200)}"` - ); -}); - -// Test 7: Expiration date validation -test('cli-apikey', 'expiration-validation', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - // Test with invalid expiration format - const result = await cliAgent.run({ - command: 'cloud apikey create', - args: ['--name', 'test', '--expires-at', 'invalid-date'], - }); - - // Should fail validation - assert( - result.exitCode !== 0 || result.stderr !== undefined, - 'Invalid expiration should be rejected' - ); -}); diff --git a/apps/testing/integration-suite/src/test/cli-deployment.ts b/apps/testing/integration-suite/src/test/cli-deployment.ts deleted file mode 100644 index a47f2411f..000000000 --- a/apps/testing/integration-suite/src/test/cli-deployment.ts +++ /dev/null @@ -1,273 +0,0 @@ -/** - * CLI Deployment Tests - * - * Tests the full deployment workflow via CLI commands: - * - Authentication check - * - Deploy project - * - List deployments - * - Show deployment details - * - Invoke deployment via HTTP - * - Session tracking - * - Rollback deployment - * - Remove deployment - * - Undeploy - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined } from '@test/helpers'; -import cliAgent from '@agents/cli/agent'; -import { isAuthenticated } from '@test/helpers/cli'; - -// Test 1: Check authentication -test('cli-deployment', 'auth-check', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - // Skip if not authenticated - return; - } - - const result = await cliAgent.run({ - command: 'auth whoami', - }); - - // Should succeed when authenticated - assertEqual(result.exitCode, 0, 'Auth whoami should exit 0 when authenticated'); - assertDefined(result.stdout, 'Whoami should output user info'); - assert( - result.stdout.includes('Name:') || result.stdout.includes('User ID:'), - 'Whoami should contain user details' - ); -}); - -// Test 2: List deployments (before deploy) -test('cli-deployment', 'list-before-deploy', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - // Skip if not authenticated - return; - } - - const result = await cliAgent.run({ - command: 'cloud deployment list', - expectJSON: true, - }); - - // Command should execute and produce output - assertDefined(result.stdout, 'List should output'); - - // If successful, validate JSON response - if (result.exitCode === 0) { - // Provide detailed diagnostics if JSON parsing failed - const jsonError = (result as any).jsonParseError; - assertDefined( - result.json, - `List should return JSON when successful. exitCode=${result.exitCode}, ` + - `stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}", ` + - `jsonParseError="${jsonError || 'none'}"` - ); - assert(Array.isArray(result.json), 'List should return array'); - } else { - // Command failed - ensure it's not a silent failure - assert( - result.stderr !== undefined || result.stdout.length > 0, - 'Failed command should output error message' - ); - } -}); - -// // Test 3: Deploy project -// test('cli-deployment', 'deploy-project', async () => { -// const authenticated = await isAuthenticated(); - -// if (!authenticated) { -// // Skip if not authenticated -// return; -// } - -// const result = await cliAgent.run({ -// command: 'cloud deploy', -// }); - -// // Deploy may fail in test environment, but should return a response -// assert(result.stdout !== undefined, 'Deploy should produce output'); -// }); - -// Note: Remaining CLI deployment tests require authentication and cloud environment -// These are placeholder tests that can be expanded when running against real environment - -// Test 4: List agents (requires successful deployment) -test('cli-deployment', 'list-agents', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud agent list', - expectJSON: true, - }); - - // Should return result - assert(result.stdout !== undefined, 'Agent list should produce output'); -}); - -// Test 5: List sessions -test('cli-deployment', 'list-sessions', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud session list', - args: ['--count', '5'], - expectJSON: true, - }); - - // Should return result - assert(result.stdout !== undefined, 'Session list should produce output'); -}); - -// Test 6: CLI path resolution -test('cli-deployment', 'cli-path-exists', async () => { - // Just verify we can execute the CLI - const result = await cliAgent.run({ - command: 'help', - }); - - assertEqual( - result.success, - true, - `CLI help failed: exitCode=${result.exitCode}, stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}"` - ); - assert( - (result.stdout?.includes('agentuity') || result.stdout?.includes('Commands')) ?? false, - 'Help output should contain CLI info' - ); -}); - -// Test 7: Profile command -test('cli-deployment', 'profile-current', async () => { - const result = await cliAgent.run({ - command: 'profile current', - }); - - assertEqual( - result.success, - true, - `CLI profile current failed: exitCode=${result.exitCode}, stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}"` - ); - assertDefined(result.stdout); - assert(result.stdout.trim().length > 0, 'Profile should return non-empty value'); -}); - -// Test 8: JSON output format -test('cli-deployment', 'json-output-format', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud deployment list', - expectJSON: true, - }); - - // If succeeded, should have JSON - if (result.success && result.stdout) { - assertDefined(result.json); - } -}); - -// Test 9: CLI error handling -test('cli-deployment', 'invalid-command-error', async () => { - const result = await cliAgent.run({ - command: 'cloud invalid-command-xyz', - }); - - assertEqual(result.success, false); - assert(result.exitCode !== 0, 'Invalid command should fail'); -}); - -// Test 10: Help command -test('cli-deployment', 'help-command', async () => { - const result = await cliAgent.run({ - command: 'cloud help', - }); - - assertEqual( - result.success, - true, - `CLI cloud help failed: exitCode=${result.exitCode}, stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}"` - ); - assert( - (result.stdout?.includes('cloud') || result.stdout?.includes('Commands')) ?? false, - 'Help should show cloud commands' - ); -}); - -// Placeholder tests for full deployment workflow -// These require authentication and will be expanded based on environment - -test('cli-deployment', 'deployment-workflow-placeholder-1', async () => { - // Full deploy → invoke → session tracking workflow - // Requires: Authentication, project context - assert(true, 'Placeholder for full deployment workflow'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-2', async () => { - // Rollback and verification workflow - assert(true, 'Placeholder for rollback workflow'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-3', async () => { - // Undeploy and cleanup workflow - assert(true, 'Placeholder for undeploy workflow'); -}); - -// Test: Deploy syncs env vars from local .env to cloud -test('cli-deployment', 'deploy-syncs-env-vars', async () => { - // TODO: Run cloud deploy and verify "Sync Env & Secrets" step runs - // Should sync local .env variables to cloud before deployment - assert(true, 'Placeholder for deploy env sync test'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-4', async () => { - // Agent operations - assert(true, 'Placeholder for agent operations'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-5', async () => { - // Session operations - assert(true, 'Placeholder for session operations'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-6', async () => { - // Deployment details - assert(true, 'Placeholder for deployment details'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-7', async () => { - // Multiple deployments - assert(true, 'Placeholder for multiple deployments'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-8', async () => { - // Session filters - assert(true, 'Placeholder for session filters'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-9', async () => { - // Session logs - assert(true, 'Placeholder for session logs'); -}); - -test('cli-deployment', 'deployment-workflow-placeholder-10', async () => { - // Deployment removal - assert(true, 'Placeholder for deployment removal'); -}); diff --git a/apps/testing/integration-suite/src/test/cli-env-pull.ts b/apps/testing/integration-suite/src/test/cli-env-pull.ts deleted file mode 100644 index 7a3dd1545..000000000 --- a/apps/testing/integration-suite/src/test/cli-env-pull.ts +++ /dev/null @@ -1,414 +0,0 @@ -/** - * CLI Environment Pull Tests - * - * Tests for `cloud env pull` command: - * - Cloud api_key overwrites local AGENTUITY_SDK_KEY (cloud is source of truth) - * - Local key is preserved when cloud has no api_key (fallback) - * - Cloud api_key is used when local doesn't exist - * - Works correctly with --org flag - * - * This tests the fix for the bug where local AGENTUITY_SDK_KEY was deleted - * when running `cloud env pull` if the cloud project didn't have an api_key. - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, uniqueId } from '@test/helpers'; -import cliAgent from '@agents/cli/agent'; -import { isAuthenticated, PROJECT_DIR } from '@test/helpers/cli'; -import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs'; -import { join } from 'path'; - -// Track all env vars created during tests for cleanup -const createdEnvVars: string[] = []; - -// Helper to create and track env var keys -function trackKey(key: string): string { - createdEnvVars.push(key); - return key; -} - -// Helper to read .env file and parse it -function readEnvFile(filePath: string): Record { - if (!existsSync(filePath)) { - return {}; - } - const content = readFileSync(filePath, 'utf-8'); - const env: Record = {}; - for (const line of content.split('\n')) { - const trimmed = line.trim(); - if (!trimmed || trimmed.startsWith('#')) continue; - const equalIndex = trimmed.indexOf('='); - if (equalIndex === -1) continue; - const key = trimmed.slice(0, equalIndex).trim(); - const value = trimmed.slice(equalIndex + 1).trim(); - // Remove surrounding quotes if present - const unquotedValue = - (value.startsWith('"') && value.endsWith('"')) || - (value.startsWith("'") && value.endsWith("'")) - ? value.slice(1, -1) - : value; - env[key] = unquotedValue; - } - return env; -} - -// Helper to write .env file -function writeEnvFile(filePath: string, env: Record): void { - const lines: string[] = []; - for (const [key, value] of Object.entries(env).sort()) { - lines.push(`${key}=${value}`); - } - writeFileSync(filePath, lines.join('\n') + '\n'); -} - -// Helper to backup and restore .env file -function backupEnvFile(): string { - const envPath = join(PROJECT_DIR, '.env'); - if (existsSync(envPath)) { - const backup = readFileSync(envPath, 'utf-8'); - return backup; - } - return ''; -} - -function restoreEnvFile(backup: string): void { - const envPath = join(PROJECT_DIR, '.env'); - if (backup) { - writeFileSync(envPath, backup); - } else if (existsSync(envPath)) { - // Remove file if there was no backup - unlinkSync(envPath); - } -} - -// Test: Cloud api_key overwrites local AGENTUITY_SDK_KEY (cloud is source of truth) -test('cli-env-pull', 'cloud-api-key-overwrites-local', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('PULL_TEST')); - const testValue = 'pull_test_value'; - const localSdkKey = 'local-sdk-key-should-be-overwritten-12345'; - - // Set up: Create a test env var in cloud - await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue}`, - }); - - // Backup current .env - const envBackup = backupEnvFile(); - - try { - // Set up local .env with local SDK key - const envPath = join(PROJECT_DIR, '.env'); - writeEnvFile(envPath, { - AGENTUITY_SDK_KEY: localSdkKey, - [testKey]: 'local_value_should_be_overwritten', - }); - - // Pull from cloud - const pullResult = await cliAgent.run({ - command: 'cloud env pull', - }); - - assert(pullResult.success, `Pull should succeed: ${pullResult.stderr}`); - - // Verify cloud env var was pulled - const envAfter = readEnvFile(envPath); - assertEqual(envAfter[testKey], testValue, 'Cloud env var should be pulled'); - - // If project has api_key, it should overwrite local (cloud is source of truth) - // If project doesn't have api_key, local should be preserved (fallback) - // We can't verify the exact value since it depends on the project, but we can check: - // 1. SDK key exists (either cloud or local) - // 2. It's not the local value if cloud has api_key (we'd need to know cloud value to verify) - // For now, just verify the key exists and the pull succeeded - assert( - envAfter.AGENTUITY_SDK_KEY !== undefined, - 'AGENTUITY_SDK_KEY should exist after pull (either cloud or local)' - ); - } finally { - // Restore original .env - restoreEnvFile(envBackup); - - // Cleanup cloud env var - await cliAgent.run({ - command: `cloud env delete ${testKey}`, - }); - } -}); - -// Test: Local AGENTUITY_SDK_KEY is preserved when cloud has no api_key -test('cli-env-pull', 'preserves-local-sdk-key-when-cloud-has-no-api-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('PULL_NO_API_KEY')); - const testValue = 'pull_test_value'; - const localSdkKey = 'local-sdk-key-no-cloud-api-key-67890'; - - // Set up: Create a test env var in cloud (but no api_key in project) - await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue}`, - }); - - // Backup current .env - const envBackup = backupEnvFile(); - - try { - // Set up local .env with local SDK key - const envPath = join(PROJECT_DIR, '.env'); - writeEnvFile(envPath, { - AGENTUITY_SDK_KEY: localSdkKey, - }); - - // Pull from cloud (project may not have api_key set) - const pullResult = await cliAgent.run({ - command: 'cloud env pull', - }); - - assert(pullResult.success, `Pull should succeed: ${pullResult.stderr}`); - - // Verify local SDK key is still preserved (this is the critical fix) - const envAfter = readEnvFile(envPath); - assertEqual( - envAfter.AGENTUITY_SDK_KEY, - localSdkKey, - 'Local AGENTUITY_SDK_KEY should be preserved even when cloud has no api_key' - ); - - // Verify cloud env var was pulled - assertEqual(envAfter[testKey], testValue, 'Cloud env var should be pulled'); - } finally { - // Restore original .env - restoreEnvFile(envBackup); - - // Cleanup cloud env var - await cliAgent.run({ - command: `cloud env delete ${testKey}`, - }); - } -}); - -// Test: Cloud api_key is used when local doesn't exist -test('cli-env-pull', 'uses-cloud-api-key-when-local-missing', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('PULL_CLOUD_KEY')); - const testValue = 'pull_test_value'; - - // Set up: Create a test env var in cloud - await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue}`, - }); - - // Backup current .env - const envBackup = backupEnvFile(); - - try { - // Set up local .env WITHOUT SDK key - const envPath = join(PROJECT_DIR, '.env'); - writeEnvFile(envPath, { - [testKey]: 'local_value', - }); - - // Pull from cloud - const pullResult = await cliAgent.run({ - command: 'cloud env pull', - }); - - assert(pullResult.success, `Pull should succeed: ${pullResult.stderr}`); - - // Verify cloud env var was pulled - const envAfter = readEnvFile(envPath); - assertEqual(envAfter[testKey], testValue, 'Cloud env var should be pulled'); - - // If project has api_key, it should be written to .env - // (We can't verify the exact value since it depends on the project, but we can check it exists) - // Note: This test may pass or fail depending on whether the project has an api_key - // The important thing is that it doesn't crash - } finally { - // Restore original .env - restoreEnvFile(envBackup); - - // Cleanup cloud env var - await cliAgent.run({ - command: `cloud env delete ${testKey}`, - }); - } -}); - -// Test: Local AGENTUITY_SDK_KEY is preserved when pulling from org -test('cli-env-pull', 'preserves-local-sdk-key-when-pulling-from-org', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('PULL_ORG_TEST')); - const testValue = 'pull_org_test_value'; - const localSdkKey = 'local-sdk-key-org-pull-abcde'; - - // Set up: Create a test env var in org - await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --org`, - }); - - // Backup current .env - const envBackup = backupEnvFile(); - - try { - // Set up local .env with local SDK key - const envPath = join(PROJECT_DIR, '.env'); - writeEnvFile(envPath, { - AGENTUITY_SDK_KEY: localSdkKey, - }); - - // Pull from org - const pullResult = await cliAgent.run({ - command: 'cloud env pull --org', - }); - - assert(pullResult.success, `Pull from org should succeed: ${pullResult.stderr}`); - - // Verify local SDK key is preserved (orgs don't have api_key, so this tests the fix) - const envAfter = readEnvFile(envPath); - assertEqual( - envAfter.AGENTUITY_SDK_KEY, - localSdkKey, - 'Local AGENTUITY_SDK_KEY should be preserved when pulling from org' - ); - - // Verify org env var was pulled - assertEqual(envAfter[testKey], testValue, 'Org env var should be pulled'); - } finally { - // Restore original .env - restoreEnvFile(envBackup); - - // Cleanup org env var - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); - } -}); - -// Test: Pull with --force overwrites local env vars and cloud api_key overwrites local SDK key -test('cli-env-pull', 'force-overwrites-env-and-cloud-api-key-overwrites-local', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('PULL_FORCE_TEST')); - const cloudValue = 'cloud_force_value'; - const localValue = 'local_force_value'; - const localSdkKey = 'local-sdk-key-force-xyz123'; - - // Set up: Create a test env var in cloud - await cliAgent.run({ - command: `cloud env set ${testKey} ${cloudValue}`, - }); - - // Backup current .env - const envBackup = backupEnvFile(); - - try { - // Set up local .env with local SDK key and local value - const envPath = join(PROJECT_DIR, '.env'); - writeEnvFile(envPath, { - AGENTUITY_SDK_KEY: localSdkKey, - [testKey]: localValue, - }); - - // Pull from cloud with --force - const pullResult = await cliAgent.run({ - command: 'cloud env pull --force', - }); - - assert(pullResult.success, `Pull with force should succeed: ${pullResult.stderr}`); - - const envAfter = readEnvFile(envPath); - - // Verify cloud value overwrote local value (force behavior) - assertEqual(envAfter[testKey], cloudValue, 'Cloud value should overwrite local with --force'); - - // Cloud api_key should overwrite local SDK key (cloud is source of truth) - // If project has api_key, it should be used; otherwise local is preserved - assert( - envAfter.AGENTUITY_SDK_KEY !== undefined, - 'AGENTUITY_SDK_KEY should exist after pull (either cloud or local)' - ); - } finally { - // Restore original .env - restoreEnvFile(envBackup); - - // Cleanup cloud env var - await cliAgent.run({ - command: `cloud env delete ${testKey}`, - }); - } -}); - -// Test: Pull creates .env file if it doesn't exist -test('cli-env-pull', 'creates-env-file-if-missing', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('PULL_CREATE_TEST')); - const testValue = 'pull_create_test_value'; - - // Set up: Create a test env var in cloud - await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue}`, - }); - - // Backup current .env - const envBackup = backupEnvFile(); - - try { - // Remove .env file if it exists - const envPath = join(PROJECT_DIR, '.env'); - if (existsSync(envPath)) { - unlinkSync(envPath); - } - - // Pull from cloud - const pullResult = await cliAgent.run({ - command: 'cloud env pull', - }); - - assert(pullResult.success, `Pull should succeed: ${pullResult.stderr}`); - - // Verify .env file was created - assert(existsSync(envPath), '.env file should be created'); - - // Verify cloud env var was pulled - const envAfter = readEnvFile(envPath); - assertEqual(envAfter[testKey], testValue, 'Cloud env var should be pulled'); - } finally { - // Restore original .env - restoreEnvFile(envBackup); - - // Cleanup cloud env var - await cliAgent.run({ - command: `cloud env delete ${testKey}`, - }); - } -}); - -// Final cleanup test - runs last to clean up any leftover env vars -test('cli-env-pull', 'zzz-cleanup-all-env-vars', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - // Delete all tracked env vars - for (const key of createdEnvVars) { - await cliAgent.run({ - command: `cloud env delete ${key}`, - }); - // Also try org scope in case some were created there - await cliAgent.run({ - command: `cloud env delete ${key} --org`, - }); - } - - // Clear the tracking array - createdEnvVars.length = 0; -}); diff --git a/apps/testing/integration-suite/src/test/cli-env-secrets.ts b/apps/testing/integration-suite/src/test/cli-env-secrets.ts deleted file mode 100644 index 418f37bbe..000000000 --- a/apps/testing/integration-suite/src/test/cli-env-secrets.ts +++ /dev/null @@ -1,865 +0,0 @@ -/** - * CLI Environment & Secrets Validation Tests - * - * Tests the validation rules for env commands: - * - Reserved AGENTUITY_* keys (except AGENTUITY_PUBLIC_*) are blocked - * - Public var prefixes (VITE_, AGENTUITY_PUBLIC_, PUBLIC_) cannot be secrets - * - AGENTUITY_PUBLIC_* keys ARE allowed as env vars - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, uniqueId } from '@test/helpers'; -import cliAgent from '@agents/cli/agent'; -import { isAuthenticated } from '@test/helpers/cli'; - -// Track all env vars created during tests for cleanup -const createdEnvVars: string[] = []; - -// Helper to create and track env var keys -function trackKey(key: string): string { - createdEnvVars.push(key); - return key; -} - -// Test: Reserved AGENTUITY_ key blocked for env set --secret -test('cli-env-secrets', 'env-set-secret-blocks-reserved-agentuity-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set AGENTUITY_SDK_KEY test_value --secret', - }); - - assertEqual(result.success, false, 'Should reject reserved AGENTUITY_ key'); - assert( - result.stderr?.includes('reserved for system use') || - result.stdout?.includes('reserved for system use') || - false, - 'Should mention reserved for system use' - ); -}); - -// Test: VITE_ prefix blocked as secret -test('cli-env-secrets', 'env-set-secret-blocks-vite-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set VITE_API_KEY test_value --secret', - }); - - assertEqual(result.success, false, 'Should reject VITE_ as secret'); - assert( - result.stderr?.includes('public variables as secrets') || - result.stdout?.includes('public variables as secrets') || - false, - 'Should mention public variables cannot be secrets' - ); -}); - -// Test: PUBLIC_ prefix blocked as secret -test('cli-env-secrets', 'env-set-secret-blocks-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set PUBLIC_URL test_value --secret', - }); - - assertEqual(result.success, false, 'Should reject PUBLIC_ as secret'); - assert( - result.stderr?.includes('public variables as secrets') || - result.stdout?.includes('public variables as secrets') || - false, - 'Should mention public variables cannot be secrets' - ); -}); - -// Test: AGENTUITY_PUBLIC_ prefix blocked as secret -test('cli-env-secrets', 'env-set-secret-blocks-agentuity-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set AGENTUITY_PUBLIC_KEY test_value --secret', - }); - - assertEqual(result.success, false, 'Should reject AGENTUITY_PUBLIC_ as secret'); - assert( - result.stderr?.includes('public variables as secrets') || - result.stdout?.includes('public variables as secrets') || - false, - 'Should mention public variables cannot be secrets' - ); -}); - -// Test: Reserved AGENTUITY_ key blocked for env set -test('cli-env-secrets', 'env-set-blocks-reserved-agentuity-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set AGENTUITY_SDK_KEY test_value', - }); - - assertEqual(result.success, false, 'Should reject reserved AGENTUITY_ key'); - assert( - result.stderr?.includes('reserved for system use') || - result.stdout?.includes('reserved for system use') || - false, - 'Should mention reserved for system use' - ); -}); - -// Test: Whitelisted AGENTUITY_AUTH_SECRET allowed for env set -test('cli-env-secrets', 'env-set-allows-whitelisted-agentuity-auth-secret', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testValue = `auth_secret_test_${Date.now()}`; - - // AGENTUITY_AUTH_SECRET is whitelisted, should be allowed - const result = await cliAgent.run({ - command: `cloud env set AGENTUITY_AUTH_SECRET ${testValue}`, - }); - - const output = (result.stdout || '') + (result.stderr || ''); - - // Should NOT be blocked as reserved - assert( - !output.includes('reserved for system use'), - 'Should NOT reject whitelisted AGENTUITY_AUTH_SECRET as reserved' - ); - - // Should succeed or at least get past validation - // Note: Due to _SECRET suffix, auto-detection may prompt and store as secret (default Y in non-TTY) - assert( - output.includes('set successfully') || output.includes('Setting') || result.success === true, - `Should allow AGENTUITY_AUTH_SECRET: ${output}` - ); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete AGENTUITY_AUTH_SECRET', - }); -}); - -// Test: Whitelisted AGENTUITY_AUTH_SECRET allowed for env set --secret -test('cli-env-secrets', 'env-set-secret-allows-whitelisted-agentuity-auth-secret', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testValue = `auth_secret_test_${Date.now()}`; - - // AGENTUITY_AUTH_SECRET is whitelisted, should be allowed as secret - const result = await cliAgent.run({ - command: `cloud env set AGENTUITY_AUTH_SECRET ${testValue} --secret`, - }); - - const output = (result.stdout || '') + (result.stderr || ''); - - // Should NOT be blocked as reserved - assert( - !output.includes('reserved for system use'), - 'Should NOT reject whitelisted AGENTUITY_AUTH_SECRET as reserved' - ); - - // Should succeed - assert( - output.includes('set successfully') || - output.includes('Setting secret') || - result.success === true, - `Should allow AGENTUITY_AUTH_SECRET as secret: ${output}` - ); - - // Verify it's stored as secret - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes('AGENTUITY_AUTH_SECRET')); - assert( - Boolean(keyLine && keyLine.includes('[secret]')), - `AGENTUITY_AUTH_SECRET should be listed as secret: ${keyLine || 'not found'}` - ); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete AGENTUITY_AUTH_SECRET', - }); -}); - -// Test: env list masks secrets by default -test('cli-env-secrets', 'env-list-masks-secrets-by-default', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('MASK_TEST')); - const testValue = 'super_secret_value_12345'; - - // Set a secret (--secret flag must be in command string) - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --secret`, - }); - assert( - Boolean(setResult.success || setResult.stdout?.includes('set successfully')), - `Set should succeed: ${setResult.stdout} ${setResult.stderr}` - ); - - // List without --no-mask - value should be masked - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert(Boolean(keyLine), `Key ${testKey} should be in list: ${listOutput}`); - assert(!keyLine!.includes(testValue), 'Full secret value should NOT appear (should be masked)'); - assert(keyLine!.includes('[secret]'), 'Should be marked as [secret]'); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: env list --no-mask shows full secret values -test('cli-env-secrets', 'env-list-no-mask-shows-secrets', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('NOMASK_TEST')); - const testValue = 'visible_secret_value_67890'; - - // Set a secret (--secret flag must be in command string) - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --secret`, - }); - assert( - Boolean(setResult.success || setResult.stdout?.includes('set successfully')), - `Set should succeed: ${setResult.stdout} ${setResult.stderr}` - ); - - // List with --no-mask - value should be visible - const listResult = await cliAgent.run({ - command: 'cloud env list --no-mask', - }); - - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert(Boolean(keyLine), `Key ${testKey} should be in list: ${listOutput}`); - assert(keyLine!.includes(testValue), 'Full secret value should appear with --no-mask'); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: AGENTUITY_PUBLIC_ allowed for env set and persists to cloud -test('cli-env-secrets', 'env-set-allows-agentuity-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(`AGENTUITY_PUBLIC_${uniqueId('TEST')}`); - const testValue = 'test_public_value'; - - // 1. Set the AGENTUITY_PUBLIC_ prefixed var - const setResult = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, testValue], - }); - - // Should succeed and not be blocked as reserved - const setOutput = (setResult.stdout || '') + (setResult.stderr || ''); - assert( - Boolean( - setResult.success || - setOutput.includes('Setting') || - setOutput.includes('set successfully') - ), - `Should allow AGENTUITY_PUBLIC_ as env var: ${setOutput}` - ); - assert( - !setOutput.includes('reserved for system use'), - 'Should not reject AGENTUITY_PUBLIC_ as reserved' - ); - - // 2. Get to verify it was actually added (more reliable than list) - const getResult = await cliAgent.run({ - command: 'cloud env get', - args: [testKey], - }); - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - assert( - Boolean(getResult.success || getOutput.includes(testValue)), - `Get should find ${testKey}: ${getOutput}` - ); - - // 3. Clean up - delete the test var - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: VITE_ allowed for env set -test('cli-env-secrets', 'env-set-allows-vite-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(`VITE_${uniqueId('TEST')}`); - const testValue = 'vite_test_value'; - - const result = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, testValue], - }); - - // Should get past validation - assert( - Boolean( - result.success || - result.stdout?.includes('Setting') || - result.stdout?.includes('set successfully') - ), - 'Should allow VITE_ as env var' - ); - - // Verify with list - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - assert(Boolean(listOutput.includes(testKey)), `List should include ${testKey}`); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: PUBLIC_ allowed for env set -test('cli-env-secrets', 'env-set-allows-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(`PUBLIC_${uniqueId('TEST')}`); - const testValue = 'public_test_value'; - - const result = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, testValue], - }); - - // Should get past validation - assert( - Boolean( - result.success || - result.stdout?.includes('Setting') || - result.stdout?.includes('set successfully') - ), - 'Should allow PUBLIC_ as env var' - ); - - // Verify with list - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - assert(Boolean(listOutput.includes(testKey)), `List should include ${testKey}`); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: Valid secret key should work (at least get past validation) -test('cli-env-secrets', 'env-set-secret-allows-valid-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('SECRET_KEY')); - const testValue = 'secret_test_value'; - - const result = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --secret`, - }); - - // Should get past validation to cloud operation - assert( - Boolean( - result.success || - result.stdout?.includes('Setting secret') || - result.stdout?.includes('set successfully') - ), - 'Should allow valid secret key' - ); - // Should NOT contain validation errors - assert( - !result.stderr?.includes('reserved for system use') && - !result.stdout?.includes('reserved for system use') && - !result.stderr?.includes('public variables as secrets') && - !result.stdout?.includes('public variables as secrets'), - 'Should not reject valid secret key' - ); - - // Verify with list - should show as [secret] - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert( - Boolean(keyLine && keyLine.includes('[secret]')), - `${testKey} should be listed as secret` - ); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: Auto-detection prompts and stores as secret (default Y in non-TTY) -test('cli-env-secrets', 'env-set-auto-detects-secret-by-key-name', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - // Key must end with _KEY to trigger auto-detection (pattern: /_KEY$/i) - // Use uniqueId in the value to avoid collisions, but keep key ending with _KEY - const testKey = trackKey(`TEST_${uniqueId('').toUpperCase()}_KEY`); - const testValue = `test_value_${Date.now()}`; - - // Key name pattern (_KEY suffix) should trigger auto-detection - const result = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, testValue], - }); - - // In non-TTY mode, confirm() returns true (default), so it stores as secret - const output = (result.stdout || '') + (result.stderr || ''); - assert(output.includes('looks like it should be a secret'), 'Should warn about secret-like key'); - // Should proceed with setting (as secret due to default Y) - assert( - output.includes('Setting secret') || output.includes('set successfully'), - 'Should proceed to set the value' - ); - - // Verify with list - should be stored as secret - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert( - Boolean(keyLine && keyLine.includes('[secret]')), - `${testKey} should be listed as secret` - ); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: Auto-detection prompts and stores as secret (default Y in non-TTY) -test('cli-env-secrets', 'env-set-auto-detects-secret-by-value', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('CONFIG_VAL')); - // Long alphanumeric value (32+ chars) should trigger auto-detection - const longValue = 'test_secret_abcdefghij1234567890xyz'; - - const result = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, longValue], - }); - - // In non-TTY mode, confirm() returns true (default), so it stores as secret - const output = (result.stdout || '') + (result.stderr || ''); - assert( - output.includes('looks like it should be a secret'), - 'Should warn about secret-like value' - ); - // Should proceed with setting (as secret due to default Y) - assert( - output.includes('Setting secret') || output.includes('set successfully'), - 'Should proceed to set the value' - ); - - // Verify with list - should be stored as secret - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert( - Boolean(keyLine && keyLine.includes('[secret]')), - `${testKey} should be listed as secret` - ); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: No auto-detection warning for normal env vars -test('cli-env-secrets', 'env-set-no-warning-for-normal-vars', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('NORMAL_VAR')); - const testValue = 'normal_value'; - - // Normal key and value should not trigger auto-detection - const result = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, testValue], - }); - - // Should NOT contain secret detection warning - assert( - !result.stdout?.includes('looks like it should be a secret') && - !result.stderr?.includes('looks like it should be a secret'), - 'Should not warn about normal env var' - ); - - // Should proceed to setting the variable - assert( - Boolean( - result.stdout?.includes('Setting') || - result.stdout?.includes('set successfully') || - result.success - ), - 'Should attempt to set the variable' - ); - - // Verify with list - should NOT be a secret - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert(Boolean(keyLine && !keyLine.includes('[secret]')), `${testKey} should NOT be a secret`); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: env get returns not found for non-existent key -test('cli-env-secrets', 'env-get-not-found', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env get NON_EXISTENT_KEY_12345', - }); - - assertEqual(result.success, false, 'Should fail for non-existent key'); - const output = (result.stdout || '') + (result.stderr || ''); - assert(output.includes('not found'), 'Should mention key not found'); -}); - -// Test: env delete returns not found for non-existent key -test('cli-env-secrets', 'env-delete-not-found', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env delete NON_EXISTENT_KEY_12345', - }); - - assertEqual(result.success, false, 'Should fail for non-existent key'); - const output = (result.stdout || '') + (result.stderr || ''); - assert( - output.includes('not found') || output.includes('No variables found'), - 'Should mention key not found' - ); -}); - -// Test: Full CRUD cycle - set, get, list, delete, verify deleted -test('cli-env-secrets', 'env-crud-cycle', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('CRUD_TEST')); - const testValue = 'crud_test_value'; - - // 1. Set - const setResult = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, testValue], - }); - assert(Boolean(setResult.success), `Set should succeed: ${setResult.stderr}`); - - // 2. Get - verify value - const getResult = await cliAgent.run({ - command: 'cloud env get', - args: [testKey], - }); - // Debug: Check all output - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - assert( - Boolean(getResult.success), - `Get should succeed: stdout=${getResult.stdout}, stderr=${getResult.stderr}, exitCode=${getResult.exitCode}` - ); - assert( - Boolean(getOutput.includes(testValue)), - `Get should return the value. output=[${getOutput}], testValue=[${testValue}]` - ); - - // 3. List - verify key appears - const listResult = await cliAgent.run({ - command: 'cloud env list', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - assert(Boolean(listOutput.includes(testKey)), 'List should include the key'); - - // 4. Delete - const deleteResult = await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); - assert(Boolean(deleteResult.success), `Delete should succeed: ${deleteResult.stderr}`); - - // 5. Verify deleted - get should fail - const verifyResult = await cliAgent.run({ - command: 'cloud env get', - args: [testKey], - }); - assertEqual(verifyResult.success, false, 'Get after delete should fail'); -}); - -// Test: Overwrite - set same key twice updates value -test('cli-env-secrets', 'env-set-overwrite', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('OVERWRITE_TEST')); - const value1 = 'first_value'; - const value2 = 'second_value'; - - // Set initial value - await cliAgent.run({ - command: 'cloud env set', - args: [testKey, value1], - }); - - // Overwrite with new value - const setResult = await cliAgent.run({ - command: 'cloud env set', - args: [testKey, value2], - }); - assert(Boolean(setResult.success), `Overwrite should succeed: ${setResult.stderr}`); - - // Get and verify new value - const getResult = await cliAgent.run({ - command: 'cloud env get', - args: [testKey], - }); - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - assert( - Boolean(getOutput.includes(value2)), - `Should return updated value. output: ${getOutput}, value2: ${value2}` - ); - assert(!getOutput.includes(value1), 'Should not contain old value'); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: Re-setting a secret without --secret flag should preserve secret status -test('cli-env-secrets', 'env-secret-preserves-status-on-update', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('SECRET_PRESERVE_TEST')); - const value1 = 'secret_value_1'; - const value2 = 'secret_value_2'; - - // Set as secret - const setSecretResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${value1} --secret`, - }); - assert( - Boolean(setSecretResult.success || setSecretResult.stdout?.includes('Secret')), - `Set as secret should succeed: ${setSecretResult.stderr}` - ); - - // Verify it's a secret - const listBefore = await cliAgent.run({ - command: 'cloud env list', - }); - const listBeforeOutput = (listBefore.stdout || '') + (listBefore.stderr || ''); - const linesBefore = listBeforeOutput.split('\n'); - const keyLineBefore = linesBefore.find((l) => l.includes(testKey)); - assert( - Boolean(keyLineBefore && keyLineBefore.includes('[secret]')), - `Should be listed as secret initially: ${keyLineBefore || 'key not found'}` - ); - - // Re-set same key with new value but WITHOUT --secret flag - await cliAgent.run({ - command: `cloud env set ${testKey} ${value2}`, - }); - - // Verify it's STILL a secret (secret status should be preserved) - const listAfter = await cliAgent.run({ - command: 'cloud env list', - }); - const listAfterOutput = (listAfter.stdout || '') + (listAfter.stderr || ''); - const linesAfter = listAfterOutput.split('\n'); - const keyLineAfter = linesAfter.find((l) => l.includes(testKey)); - assert( - Boolean(keyLineAfter && keyLineAfter.includes('[secret]')), - `Should still be a secret after update without --secret flag: ${keyLineAfter || 'key not found'}` - ); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: Reserved AGENTUITY_ key blocked for env delete -test('cli-env-secrets', 'env-delete-blocks-reserved-agentuity-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env delete AGENTUITY_SDK_KEY', - }); - - assertEqual(result.success, false, 'Should reject deleting reserved AGENTUITY_ key'); - assert( - result.stderr?.includes('reserved for system use') || - result.stdout?.includes('reserved for system use') || - false, - 'Should mention reserved for system use' - ); -}); - -// Test: Public vars with secret-like values are stored as env (not promoted to secret) -// This tests that VITE_* vars don't trigger the auto-detect secret prompt -test('cli-env-secrets', 'env-set-public-var-with-secret-value-stays-env', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(`VITE_TEST_${uniqueId('KEY')}`); - // Use a value that looks secret-like to humans but doesn't match known API key - // prefixes (sk_live_, ghp_, AKIA, etc.) that the server may auto-promote to secrets. - // Keep under 32 chars to avoid the generic long-string secret heuristic. - const secretLikeValue = 'my_secret_value_12345678'; // 24 chars, not a known secret pattern - - // Set a VITE_ var with a secret-like value (should NOT prompt, should stay as env) - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} "${secretLikeValue}"`, - }); - - // Should succeed (public vars skip auto-detect) - assert( - Boolean(setResult.success || setResult.stdout?.includes('set successfully')), - `Set should succeed: ${setResult.stdout} ${setResult.stderr}` - ); - - // Verify it's stored as env var, NOT as secret - const getResult = await cliAgent.run({ - command: `cloud env get ${testKey}`, - }); - - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - // Should NOT be marked as secret (output uses "(secret)" label) - assert(!getOutput.includes('(secret)'), 'Public var should NOT be marked as secret'); - // Value should be visible (not masked) - assert(getOutput.includes(secretLikeValue), 'Value should be visible (not masked)'); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Test: PUBLIC_ prefix with secret-like value stays as env -test('cli-env-secrets', 'env-set-public-prefix-with-secret-value-stays-env', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(`PUBLIC_TEST_${uniqueId('TOKEN')}`); - // Use a value that looks secret-like to humans but doesn't match known API key - // prefixes (sk_live_, ghp_, AKIA, etc.) that the server may auto-promote to secrets. - // Keep under 32 chars to avoid the generic long-string secret heuristic. - const secretLikeValue = 'my_secret_token_87654321'; // 24 chars, not a known secret pattern - - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} "${secretLikeValue}"`, - }); - - assert( - Boolean(setResult.success || setResult.stdout?.includes('set successfully')), - `Set should succeed: ${setResult.stdout} ${setResult.stderr}` - ); - - // Verify it's stored as env var, NOT as secret - const getResult = await cliAgent.run({ - command: `cloud env get ${testKey}`, - }); - - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - // Output uses "(secret)" label, not "[secret]" - assert(!getOutput.includes('(secret)'), 'PUBLIC_ var should NOT be marked as secret'); - - // Cleanup - await cliAgent.run({ - command: 'cloud env delete', - args: [testKey], - }); -}); - -// Final cleanup test - runs last to clean up any leftover env vars -test('cli-env-secrets', 'zzz-cleanup-all-env-vars', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - // Only delete env vars created by THIS test run (identified by testRunId) - // This prevents concurrent CI runs from interfering with each other - const keysToDelete = [...createdEnvVars]; - - if (keysToDelete.length === 0) { - return; - } - - // Delete all test env vars from this run in a single batch operation - await cliAgent.run({ - command: 'cloud env delete', - args: keysToDelete, - }); - - // Clear the tracking array - createdEnvVars.length = 0; -}); diff --git a/apps/testing/integration-suite/src/test/cli-org-env-secrets.ts b/apps/testing/integration-suite/src/test/cli-org-env-secrets.ts deleted file mode 100644 index 601d25d4a..000000000 --- a/apps/testing/integration-suite/src/test/cli-org-env-secrets.ts +++ /dev/null @@ -1,674 +0,0 @@ -/** - * CLI Organization Environment & Secrets Validation Tests - * - * Tests the org-level env commands with --org flag: - * - org-level env set/get/list/delete with --org flag - * - Reserved AGENTUITY_* keys (except AGENTUITY_PUBLIC_*) are blocked - * - Public var prefixes (VITE_, AGENTUITY_PUBLIC_, PUBLIC_) cannot be secrets - * - Org-level variables are accessible across projects - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, uniqueId } from '@test/helpers'; -import cliAgent from '@agents/cli/agent'; -import { isAuthenticated } from '@test/helpers/cli'; - -// Track all org env vars created during tests for cleanup -const createdOrgEnvVars: string[] = []; - -// Helper to create and track env var keys -function trackKey(key: string): string { - createdOrgEnvVars.push(key); - return key; -} - -// Test: org env set creates an org-level env variable -test('cli-org-env-secrets', 'org-env-set-creates-variable', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_ENV_TEST')); - const testValue = 'org_test_value'; - - console.log(`[DEBUG] Setting org env: ${testKey}=${testValue}`); - const result = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --org`, - }); - - const output = (result.stdout || '') + (result.stderr || ''); - console.log( - `[DEBUG] Set result - exitCode: ${result.exitCode}, stdout: ${result.stdout?.slice(0, 200)}, stderr: ${result.stderr?.slice(0, 200)}` - ); - - assert( - Boolean(result.success || output.includes('set successfully')), - `Org env set should succeed: ${output}` - ); - assert( - output.includes('Organization') || output.includes('org'), - 'Should indicate org-level operation' - ); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env set --secret creates an org-level secret -test('cli-org-env-secrets', 'org-env-set-secret-creates-secret', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_SECRET_TEST')); - const testValue = 'org_secret_value'; - - const result = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --secret --org`, - }); - - const output = (result.stdout || '') + (result.stderr || ''); - assert( - Boolean(result.success || output.includes('set successfully')), - `Org secret set should succeed: ${output}` - ); - assert( - output.includes('Organization') || output.includes('secret'), - 'Should indicate org-level secret operation' - ); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env get retrieves org-level variable -test('cli-org-env-secrets', 'org-env-get-retrieves-variable', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_GET_TEST')); - const testValue = 'org_get_test_value'; - - // Set the variable - console.log(`[DEBUG] get-test: Setting ${testKey}=${testValue}`); - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --org`, - }); - console.log( - `[DEBUG] get-test: Set result - exitCode: ${setResult.exitCode}, success: ${setResult.success}` - ); - console.log(`[DEBUG] get-test: Set stdout: ${setResult.stdout?.slice(0, 300)}`); - console.log(`[DEBUG] get-test: Set stderr: ${setResult.stderr?.slice(0, 300)}`); - - assert(setResult.success, `Set should succeed before get: ${setResult.stderr}`); - - // Get the variable - console.log(`[DEBUG] get-test: Getting ${testKey}`); - const getResult = await cliAgent.run({ - command: `cloud env get ${testKey} --org`, - }); - console.log( - `[DEBUG] get-test: Get result - exitCode: ${getResult.exitCode}, success: ${getResult.success}` - ); - console.log(`[DEBUG] get-test: Get stdout: ${getResult.stdout?.slice(0, 300)}`); - console.log(`[DEBUG] get-test: Get stderr: ${getResult.stderr?.slice(0, 300)}`); - - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - assert(getOutput.includes(testValue), `Should retrieve value: ${getOutput}`); - assert(getOutput.includes('[org]'), 'Should indicate org scope'); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env list shows org-level variables -test('cli-org-env-secrets', 'org-env-list-shows-variables', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_LIST_TEST')); - const testValue = 'org_list_test_value'; - - // Set the variable - console.log(`[DEBUG] Setting org env for list test: ${testKey}=${testValue}`); - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --org`, - }); - console.log( - `[DEBUG] Set result - exitCode: ${setResult.exitCode}, stdout: ${setResult.stdout?.slice(0, 300)}` - ); - console.log(`[DEBUG] Set stderr: ${setResult.stderr?.slice(0, 300)}`); - - assert(setResult.success, `Set should succeed before list: ${setResult.stderr}`); - - // List org variables - console.log('[DEBUG] Listing org variables'); - const listResult = await cliAgent.run({ - command: 'cloud env list --org', - }); - console.log( - `[DEBUG] List result - exitCode: ${listResult.exitCode}, stdout: ${listResult.stdout?.slice(0, 500)}` - ); - - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - assert(listOutput.includes(testKey), `Should list key: ${listOutput}`); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env delete removes org-level variable -test('cli-org-env-secrets', 'org-env-delete-removes-variable', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_DELETE_TEST')); - const testValue = 'org_delete_test_value'; - - // Set the variable - console.log(`[DEBUG] delete-test: Setting ${testKey}`); - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --org`, - }); - console.log( - `[DEBUG] delete-test: Set result - exitCode: ${setResult.exitCode}, success: ${setResult.success}, stdout: ${setResult.stdout?.slice(0, 200)}` - ); - - // Verify the variable was set before trying to delete - const verifyResult = await cliAgent.run({ - command: `cloud env get ${testKey} --org`, - }); - console.log( - `[DEBUG] delete-test: Verify after set - exitCode: ${verifyResult.exitCode}, success: ${verifyResult.success}` - ); - - // Delete the variable - console.log(`[DEBUG] delete-test: Deleting ${testKey}`); - const deleteResult = await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); - console.log( - `[DEBUG] delete-test: Delete result - exitCode: ${deleteResult.exitCode}, success: ${deleteResult.success}, stdout: ${deleteResult.stdout?.slice(0, 200)}` - ); - - const deleteOutput = (deleteResult.stdout || '') + (deleteResult.stderr || ''); - assert( - Boolean(deleteResult.success || deleteOutput.includes('deleted successfully')), - `Delete should succeed: ${deleteOutput}` - ); - - // Verify deleted - const getResult = await cliAgent.run({ - command: `cloud env get ${testKey} --org`, - }); - assertEqual(getResult.success, false, 'Get after delete should fail'); -}); - -// Test: org env list --no-mask shows unmasked secrets -test('cli-org-env-secrets', 'org-env-list-no-mask-shows-secrets', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_NOMASK_TEST')); - const testValue = 'visible_org_secret_12345'; - - // Set a secret - console.log(`[DEBUG] no-mask-test: Setting secret ${testKey}`); - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --secret --org`, - }); - console.log( - `[DEBUG] no-mask-test: Set result - exitCode: ${setResult.exitCode}, success: ${setResult.success}` - ); - console.log(`[DEBUG] no-mask-test: Set stdout: ${setResult.stdout?.slice(0, 300)}`); - - assert(setResult.success, `Set secret should succeed: ${setResult.stderr}`); - - // List with --no-mask - console.log(`[DEBUG] no-mask-test: Listing with --no-mask`); - const listResult = await cliAgent.run({ - command: 'cloud env list --org --no-mask', - }); - console.log(`[DEBUG] no-mask-test: List result - exitCode: ${listResult.exitCode}`); - console.log(`[DEBUG] no-mask-test: List stdout: ${listResult.stdout?.slice(0, 500)}`); - - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert(Boolean(keyLine), `Key ${testKey} should be in list: ${listOutput}`); - assert(keyLine!.includes(testValue), 'Full secret value should appear with --no-mask'); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env list masks secrets by default -test('cli-org-env-secrets', 'org-env-list-masks-secrets-by-default', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_MASK_TEST')); - const testValue = 'super_secret_org_value_12345'; - - // Set a secret - await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --secret --org`, - }); - - // List without --no-mask - const listResult = await cliAgent.run({ - command: 'cloud env list --org', - }); - - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - const lines = listOutput.split('\n'); - const keyLine = lines.find((l) => l.includes(testKey)); - assert(Boolean(keyLine), `Key ${testKey} should be in list: ${listOutput}`); - assert(!keyLine!.includes(testValue), 'Full secret value should NOT appear (should be masked)'); - assert(keyLine!.includes('[secret]'), 'Should be marked as [secret]'); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env set blocks reserved AGENTUITY_ key -test('cli-org-env-secrets', 'org-env-set-blocks-reserved-agentuity-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set AGENTUITY_SDK_KEY test_value --org', - }); - - assertEqual(result.success, false, 'Should reject reserved AGENTUITY_ key'); - assert( - result.stderr?.includes('reserved for system use') || - result.stdout?.includes('reserved for system use') || - false, - 'Should mention reserved for system use' - ); -}); - -// Test: org env set --secret blocks reserved AGENTUITY_ key -test('cli-org-env-secrets', 'org-env-set-secret-blocks-reserved-agentuity-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set AGENTUITY_SDK_KEY test_value --secret --org', - }); - - assertEqual(result.success, false, 'Should reject reserved AGENTUITY_ key'); - assert( - result.stderr?.includes('reserved for system use') || - result.stdout?.includes('reserved for system use') || - false, - 'Should mention reserved for system use' - ); -}); - -// Test: org env set --secret blocks VITE_ prefix -test('cli-org-env-secrets', 'org-env-set-secret-blocks-vite-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set VITE_API_KEY test_value --secret --org', - }); - - assertEqual(result.success, false, 'Should reject VITE_ as secret'); - assert( - result.stderr?.includes('public variables as secrets') || - result.stdout?.includes('public variables as secrets') || - false, - 'Should mention public variables cannot be secrets' - ); -}); - -// Test: org env set --secret blocks PUBLIC_ prefix -test('cli-org-env-secrets', 'org-env-set-secret-blocks-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set PUBLIC_URL test_value --secret --org', - }); - - assertEqual(result.success, false, 'Should reject PUBLIC_ as secret'); - assert( - result.stderr?.includes('public variables as secrets') || - result.stdout?.includes('public variables as secrets') || - false, - 'Should mention public variables cannot be secrets' - ); -}); - -// Test: org env set --secret blocks AGENTUITY_PUBLIC_ prefix -test('cli-org-env-secrets', 'org-env-set-secret-blocks-agentuity-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env set AGENTUITY_PUBLIC_KEY test_value --secret --org', - }); - - assertEqual(result.success, false, 'Should reject AGENTUITY_PUBLIC_ as secret'); - assert( - result.stderr?.includes('public variables as secrets') || - result.stdout?.includes('public variables as secrets') || - false, - 'Should mention public variables cannot be secrets' - ); -}); - -// Test: org env delete blocks reserved AGENTUITY_ key -test('cli-org-env-secrets', 'org-env-delete-blocks-reserved-agentuity-key', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const result = await cliAgent.run({ - command: 'cloud env delete AGENTUITY_SDK_KEY --org', - }); - - assertEqual(result.success, false, 'Should reject deleting reserved AGENTUITY_ key'); - assert( - result.stderr?.includes('reserved for system use') || - result.stdout?.includes('reserved for system use') || - false, - 'Should mention reserved for system use' - ); -}); - -// Test: org env set allows AGENTUITY_PUBLIC_ prefix -test('cli-org-env-secrets', 'org-env-set-allows-agentuity-public-prefix', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(`AGENTUITY_PUBLIC_${uniqueId('ORG_TEST')}`); - const testValue = 'org_public_test_value'; - - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${testValue} --org`, - }); - - const setOutput = (setResult.stdout || '') + (setResult.stderr || ''); - assert( - Boolean( - setResult.success || - setOutput.includes('Setting') || - setOutput.includes('set successfully') - ), - `Should allow AGENTUITY_PUBLIC_ as org env var: ${setOutput}` - ); - assert( - !setOutput.includes('reserved for system use'), - 'Should not reject AGENTUITY_PUBLIC_ as reserved' - ); - - // Verify it was set - const getResult = await cliAgent.run({ - command: `cloud env get ${testKey} --org`, - }); - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - assert( - Boolean(getResult.success || getOutput.includes(testValue)), - `Get should find ${testKey}: ${getOutput}` - ); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env overwrite updates existing value -test('cli-org-env-secrets', 'org-env-set-overwrite', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_OVERWRITE_TEST')); - const value1 = 'first_org_value'; - const value2 = 'second_org_value'; - - // Set initial value - await cliAgent.run({ - command: `cloud env set ${testKey} ${value1} --org`, - }); - - // Overwrite with new value - const setResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${value2} --org`, - }); - assert(Boolean(setResult.success), `Overwrite should succeed: ${setResult.stderr}`); - - // Get and verify new value - const getResult = await cliAgent.run({ - command: `cloud env get ${testKey} --org`, - }); - const getOutput = (getResult.stdout || '') + (getResult.stderr || ''); - assert(getOutput.includes(value2), `Should return updated value: ${getOutput}`); - assert(!getOutput.includes(value1), 'Should not contain old value'); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org secret to env conversion -test('cli-org-env-secrets', 'org-secret-to-env-conversion', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_CONVERT_TEST')); - const value = 'org_convert_test_value'; - - // Set as secret - const setSecretResult = await cliAgent.run({ - command: `cloud env set ${testKey} ${value} --secret --org`, - }); - assert( - Boolean(setSecretResult.success || setSecretResult.stdout?.includes('Secret')), - `Set as secret should succeed: ${setSecretResult.stderr}` - ); - - // Verify it's a secret - const listBefore = await cliAgent.run({ - command: 'cloud env list --org', - }); - const listBeforeOutput = (listBefore.stdout || '') + (listBefore.stderr || ''); - const linesBefore = listBeforeOutput.split('\n'); - const keyLineBefore = linesBefore.find((l) => l.includes(testKey)); - assert( - Boolean(keyLineBefore && keyLineBefore.includes('[secret]')), - `Should be listed as secret: ${keyLineBefore || 'key not found'}` - ); - - // Convert to regular env (no --secret flag) - await cliAgent.run({ - command: `cloud env set ${testKey} ${value} --org`, - }); - - // Verify it's now an env var - const listAfter = await cliAgent.run({ - command: 'cloud env list --org', - }); - const listAfterOutput = (listAfter.stdout || '') + (listAfter.stderr || ''); - const linesAfter = listAfterOutput.split('\n'); - const keyLineAfter = linesAfter.find((l) => l.includes(testKey)); - assert( - Boolean(keyLineAfter && !keyLineAfter.includes('[secret]')), - `Should now be a regular env var: ${keyLineAfter || 'key not found'}` - ); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env to secret conversion -test('cli-org-env-secrets', 'org-env-to-secret-conversion', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const testKey = trackKey(uniqueId('ORG_TOSECRET_TEST')); - const value = 'org_to_secret_value'; - - // Set as env var - await cliAgent.run({ - command: `cloud env set ${testKey} ${value} --org`, - }); - - // Verify it's an env var - const listBefore = await cliAgent.run({ - command: 'cloud env list --org', - }); - const listBeforeOutput = (listBefore.stdout || '') + (listBefore.stderr || ''); - const linesBefore = listBeforeOutput.split('\n'); - const keyLineBefore = linesBefore.find((l) => l.includes(testKey)); - assert( - Boolean(keyLineBefore && !keyLineBefore.includes('[secret]')), - `Should be listed as env var: ${keyLineBefore || 'key not found'}` - ); - - // Convert to secret - await cliAgent.run({ - command: `cloud env set ${testKey} ${value} --secret --org`, - }); - - // Verify it's now a secret - const listAfter = await cliAgent.run({ - command: 'cloud env list --org', - }); - const listAfterOutput = (listAfter.stdout || '') + (listAfter.stderr || ''); - const linesAfter = listAfterOutput.split('\n'); - const keyLineAfter = linesAfter.find((l) => l.includes(testKey)); - assert( - Boolean(keyLineAfter && keyLineAfter.includes('[secret]')), - `Should now be a secret: ${keyLineAfter || 'key not found'}` - ); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${testKey} --org`, - }); -}); - -// Test: org env list --secrets shows only secrets -test('cli-org-env-secrets', 'org-env-list-secrets-filter', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const envKey = trackKey(uniqueId('ORG_FILTER_ENV')); - const secretKey = trackKey(uniqueId('ORG_FILTER_SECRET')); - - // Set an env var and a secret - await cliAgent.run({ - command: `cloud env set ${envKey} env_value --org`, - }); - await cliAgent.run({ - command: `cloud env set ${secretKey} secret_value --secret --org`, - }); - - // List with --secrets filter - const listResult = await cliAgent.run({ - command: 'cloud env list --org --secrets', - }); - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - - assert(listOutput.includes(secretKey), `Should include secret: ${listOutput}`); - assert(!listOutput.includes(envKey), `Should not include env var: ${listOutput}`); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${envKey} --org`, - }); - await cliAgent.run({ - command: `cloud env delete ${secretKey} --org`, - }); -}); - -// Test: org env list --env-only shows only env vars -test('cli-org-env-secrets', 'org-env-list-env-only-filter', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - const envKey = trackKey(uniqueId('ORG_ENVONLY_ENV')); - const secretKey = trackKey(uniqueId('ORG_ENVONLY_SECRET')); - - // Set an env var and a secret - console.log(`[DEBUG] env-only-test: Setting env var ${envKey}`); - const setEnvResult = await cliAgent.run({ - command: `cloud env set ${envKey} env_value --org`, - }); - console.log( - `[DEBUG] env-only-test: Set env result - exitCode: ${setEnvResult.exitCode}, success: ${setEnvResult.success}` - ); - console.log(`[DEBUG] env-only-test: Set env stdout: ${setEnvResult.stdout?.slice(0, 300)}`); - - assert(setEnvResult.success, `Set env var should succeed: ${setEnvResult.stderr}`); - - console.log(`[DEBUG] env-only-test: Setting secret ${secretKey}`); - const setSecretResult = await cliAgent.run({ - command: `cloud env set ${secretKey} secret_value --secret --org`, - }); - console.log( - `[DEBUG] env-only-test: Set secret result - exitCode: ${setSecretResult.exitCode}, success: ${setSecretResult.success}` - ); - - assert(setSecretResult.success, `Set secret should succeed: ${setSecretResult.stderr}`); - - // List with --env-only filter - console.log(`[DEBUG] env-only-test: Listing with --env-only`); - const listResult = await cliAgent.run({ - command: 'cloud env list --org --env-only', - }); - console.log(`[DEBUG] env-only-test: List result - exitCode: ${listResult.exitCode}`); - console.log(`[DEBUG] env-only-test: List stdout: ${listResult.stdout?.slice(0, 500)}`); - - const listOutput = (listResult.stdout || '') + (listResult.stderr || ''); - - assert(listOutput.includes(envKey), `Should include env var: ${listOutput}`); - assert(!listOutput.includes(secretKey), `Should not include secret: ${listOutput}`); - - // Cleanup - await cliAgent.run({ - command: `cloud env delete ${envKey} --org`, - }); - await cliAgent.run({ - command: `cloud env delete ${secretKey} --org`, - }); -}); - -// Final cleanup test - runs last to clean up any leftover org env vars -test('cli-org-env-secrets', 'zzz-cleanup-all-org-env-vars', async () => { - const authenticated = await isAuthenticated(); - if (!authenticated) return; - - // Only delete org env vars created by THIS test run (identified by testRunId) - // This prevents concurrent CI runs from interfering with each other - const keysToDelete = [...createdOrgEnvVars]; - - if (keysToDelete.length === 0) { - return; - } - - // Delete all test org env vars from this run in a single batch operation - await cliAgent.run({ - command: `cloud env delete ${keysToDelete.join(' ')} --org`, - }); - - // Clear the tracking array - createdOrgEnvVars.length = 0; -}); diff --git a/apps/testing/integration-suite/src/test/cli-vector.ts b/apps/testing/integration-suite/src/test/cli-vector.ts deleted file mode 100644 index 725fc328b..000000000 --- a/apps/testing/integration-suite/src/test/cli-vector.ts +++ /dev/null @@ -1,314 +0,0 @@ -/** - * CLI Vector Tests - * - * Tests vector storage operations via CLI commands: - * - Upsert vectors (with document text, embeddings, file/stdin) - * - Search vectors - * - Get vectors - * - Delete vectors - * - Stats (namespace and all) - * - List namespaces - * - Delete namespace - */ - -import { test } from '@test/suite'; -import { assert, uniqueId } from '@test/helpers'; -import cliAgent from '@agents/cli/agent'; -import { isAuthenticated } from '@test/helpers/cli'; - -// Test 1: Vector help command -test('cli-vector', 'help-command', async () => { - const result = await cliAgent.run({ - command: 'cloud vector help', - }); - - // Help should produce output - assert(result.stdout !== undefined, 'Help should produce output'); -}); - -// Test 2: Upsert command -test('cli-vector', 'upsert-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - const key = uniqueId('vec-key'); - - const result = await cliAgent.run({ - command: 'cloud vector upsert', - args: [namespace, key, '--document', 'test document for vector storage'], - expectJSON: true, - }); - - // Command should succeed - assert( - result.exitCode === 0, - `Upsert command failed with exit code ${result.exitCode}. stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}"` - ); - - // Provide detailed diagnostics if JSON parsing failed - const jsonError = (result as any).jsonParseError; - assert( - result.json !== undefined, - `Upsert should return JSON output. exitCode=${result.exitCode}, ` + - `stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}", ` + - `jsonParseError="${jsonError || 'none'}"` - ); -}); - -// Test 3: Search command -test('cli-vector', 'search-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - const query = 'test query'; - - const result = await cliAgent.run({ - command: 'cloud vector search', - args: [namespace, query], - expectJSON: true, - }); - - // Command should succeed (empty results is fine for non-existent namespace) - assert(result.exitCode === 0, `Search command failed with exit code ${result.exitCode}`); - assert(result.json !== undefined, 'Search should return JSON output'); -}); - -// Test 4: Get command -test('cli-vector', 'get-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - const key = uniqueId('vec-key'); - - const result = await cliAgent.run({ - command: 'cloud vector get', - args: [namespace, key], - expectJSON: true, - }); - - // Command should succeed (not found is returned as JSON, not an error) - assert(result.exitCode === 0, `Get command failed with exit code ${result.exitCode}`); - assert(result.json !== undefined, 'Get should return JSON output'); -}); - -// Test 5: Delete command -test('cli-vector', 'delete-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - const key = uniqueId('vec-key'); - - const result = await cliAgent.run({ - command: 'cloud vector delete', - args: [namespace, key, '--confirm'], - expectJSON: true, - }); - - // Command should succeed (deleting non-existent key is idempotent) - assert(result.exitCode === 0, `Delete command failed with exit code ${result.exitCode}`); - assert(result.json !== undefined, 'Delete should return JSON output'); -}); - -// Test 6: Stats command - all namespaces -test('cli-vector', 'stats-all-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud vector stats', - expectJSON: true, - }); - - // Command should succeed or return valid error (API might not be available in all test environments) - // If exit code is 0, validate JSON structure - if (result.exitCode === 0) { - assert(result.json !== undefined, 'Stats should return JSON output'); - assert(typeof result.json === 'object', 'Stats JSON should be an object'); - } else { - // If the command fails, ensure there's some output explaining why - assert( - result.stdout !== undefined || result.stderr !== undefined, - 'Failed command should produce output' - ); - } -}); - -// Test 7: Stats command - specific namespace -test('cli-vector', 'stats-namespace-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - - const result = await cliAgent.run({ - command: 'cloud vector stats', - args: [namespace], - expectJSON: true, - }); - - // Command should succeed - assert( - result.exitCode === 0, - `Stats namespace command failed with exit code ${result.exitCode}. stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}"` - ); - - // Provide detailed diagnostics if JSON parsing failed - const jsonError = (result as any).jsonParseError; - assert( - result.json !== undefined, - `Stats namespace should return JSON output. exitCode=${result.exitCode}, ` + - `stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}", ` + - `jsonParseError="${jsonError || 'none'}"` - ); - assert(typeof result.json === 'object', 'Stats namespace JSON should be an object'); - assert('namespace' in result.json, 'Stats should include namespace field'); - assert('count' in result.json, 'Stats should include count field'); - assert('sum' in result.json, 'Stats should include sum field'); -}); - -// Test 8: List namespaces command -test('cli-vector', 'list-namespaces-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud vector list-namespaces', - expectJSON: true, - }); - - // Command should succeed or return valid error (API might not be available in all test environments) - if (result.exitCode === 0) { - // Provide detailed diagnostics if JSON parsing failed - const jsonError = (result as any).jsonParseError; - assert( - result.json !== undefined, - `List namespaces should return JSON output. exitCode=${result.exitCode}, ` + - `stdout="${result.stdout?.slice(0, 200)}", stderr="${result.stderr?.slice(0, 200)}", ` + - `jsonParseError="${jsonError || 'none'}"` - ); - assert(Array.isArray(result.json), 'List namespaces should return an array'); - } else { - // If the command fails, ensure there's some output explaining why - assert( - result.stdout !== undefined || result.stderr !== undefined, - 'Failed command should produce output' - ); - } -}); - -// Test 9: List namespaces alias (ns) -test('cli-vector', 'list-namespaces-alias-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const result = await cliAgent.run({ - command: 'cloud vector ns', - expectJSON: true, - }); - - // Command should succeed or return valid error (API might not be available in all test environments) - if (result.exitCode === 0) { - assert(result.json !== undefined, 'List namespaces alias should return JSON output'); - assert(Array.isArray(result.json), 'List namespaces alias should return an array'); - } else { - // If the command fails, ensure there's some output explaining why - assert( - result.stdout !== undefined || result.stderr !== undefined, - 'Failed command should produce output' - ); - } -}); - -// Test 10: Delete namespace command -test('cli-vector', 'delete-namespace-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - - const result = await cliAgent.run({ - command: 'cloud vector delete-namespace', - args: [namespace, '--confirm'], - expectJSON: true, - }); - - // Command should succeed - assert( - result.exitCode === 0, - `Delete namespace command failed with exit code ${result.exitCode}` - ); - - // JSON output should confirm deletion - assert(result.json !== undefined, 'Delete namespace should return JSON output'); - assert(typeof result.json === 'object', 'Delete namespace JSON should be an object'); - assert('success' in result.json, 'Delete namespace should include success field'); - assert('namespace' in result.json, 'Delete namespace should include namespace field'); -}); - -// Test 11: Upsert with metadata -test('cli-vector', 'upsert-with-metadata-command', async () => { - const authenticated = await isAuthenticated(); - - if (!authenticated) { - return; - } - - const namespace = uniqueId('vec-ns'); - const key = uniqueId('vec-key'); - - const result = await cliAgent.run({ - command: 'cloud vector upsert', - args: [namespace, key, '--document', 'test document', '--metadata', '{"category":"test"}'], - expectJSON: true, - }); - - // Command should succeed - assert( - result.exitCode === 0, - `Upsert with metadata command failed with exit code ${result.exitCode}` - ); - - // JSON output should contain the upserted key and success indication - assert(result.json !== undefined, 'Upsert with metadata should return JSON output'); - assert(typeof result.json === 'object', 'Upsert JSON should be an object'); - assert('success' in result.json, 'Upsert should include success field'); - // The key is inside results array, not at top level - assert('results' in result.json, 'Upsert should include results field'); - assert(Array.isArray(result.json.results), 'Upsert results should be an array'); - assert(result.json.results.length > 0, 'Upsert results should not be empty'); - assert( - result.json.results[0].key === key, - `Upsert key should match: expected ${key}, got ${result.json.results[0]?.key}` - ); -}); diff --git a/apps/testing/integration-suite/src/test/env-loading.ts b/apps/testing/integration-suite/src/test/env-loading.ts deleted file mode 100644 index 7f028b042..000000000 --- a/apps/testing/integration-suite/src/test/env-loading.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Environment Loading Tests - * - * Tests that verify environment variables (especially AGENTUITY_SDK_KEY) - * are correctly loaded from profile-specific .env files during dev mode. - * - * This reproduces the bug from https://github.com/agentuity/sdk/issues/222 - * where AGENTUITY_SDK_KEY wasn't being loaded from .env.local - */ - -import { test } from '@test/suite'; -import { assert, assertDefined, assertEqual } from '@test/helpers'; -import sdkKeyCheckAgent from '@agents/env/sdk-key-check'; - -// Test: SDK key is loaded from .env.local -test('env-loading', 'sdk-key-available', async () => { - const result = await sdkKeyCheckAgent.run(); - - // The AGENTUITY_SDK_KEY should be loaded from .env.local - assert(result.hasSdkKey, 'AGENTUITY_SDK_KEY should be set in process.env'); - assertDefined(result.sdkKeyPrefix, 'SDK key prefix should be available'); - - // Verify it's not empty - assert(result.sdkKeyPrefix.length > 0, 'SDK key should not be empty'); -}); - -// Test: Multiple AGENTUITY_* env vars are loaded -test('env-loading', 'agentuity-env-vars', async () => { - const result = await sdkKeyCheckAgent.run(); - - // Should have at least AGENTUITY_SDK_KEY and AGENTUITY_REGION - assert(result.allEnvKeys.length >= 2, 'Should have multiple AGENTUITY_* env vars'); - assert( - result.allEnvKeys.includes('AGENTUITY_SDK_KEY'), - 'AGENTUITY_SDK_KEY should be in env vars' - ); -}); - -// Test: Verify SDK key is accessible for patching -test('env-loading', 'sdk-key-for-patching', async () => { - const result = await sdkKeyCheckAgent.run(); - - // This is the critical check - the patching mechanism in - // sdk/packages/cli/src/cmd/build/patch/_util.ts checks process.env.AGENTUITY_SDK_KEY - assertEqual(result.hasSdkKey, true, 'SDK key must be available for AI SDK patching to work'); -}); diff --git a/apps/testing/integration-suite/src/test/errors.ts b/apps/testing/integration-suite/src/test/errors.ts deleted file mode 100644 index a6f2100ac..000000000 --- a/apps/testing/integration-suite/src/test/errors.ts +++ /dev/null @@ -1,180 +0,0 @@ -/** - * Error Handling Tests - * - * Tests error handling, validation errors, StructuredError patterns, and error propagation - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined, assertThrows } from './helpers'; - -import errorValidationAgent from '@agents/errors/validation'; -import errorStructuredAgent from '@agents/errors/structured'; -import errorPropagationAgent from '@agents/errors/propagation'; - -// Test: Valid input passes validation -test('errors', 'validation-success', async () => { - const result = await errorValidationAgent.run({ - name: 'John Doe', - age: 30, - email: 'john@example.com', - }); - - assertEqual(result.success, true); - assertEqual(result.data.name, 'John Doe'); - assertEqual(result.data.age, 30); -}); - -// Test: Missing required field throws error -test('errors', 'validation-missing-field', async () => { - await assertThrows(async () => { - await errorValidationAgent.run({ - name: 'John Doe', - age: 30, - } as any); - }, 'Should throw error for missing required field'); -}); - -// Test: Wrong type throws error -test('errors', 'validation-wrong-type', async () => { - await assertThrows(async () => { - await errorValidationAgent.run({ - name: 'John Doe', - age: 'thirty' as any, - email: 'john@example.com', - }); - }, 'Should throw error for wrong type'); -}); - -// Test: Optional field with default -test('errors', 'validation-optional-field', async () => { - const result = await errorValidationAgent.run({ - name: 'Jane Doe', - age: 25, - email: 'jane@example.com', - }); - - assertEqual(result.success, true); - assertEqual(result.data.active, true, 'Should use default value for optional field'); -}); - -// Test: StructuredError with custom data -test('errors', 'structured-error-validation', async () => { - await assertThrows(async () => { - await errorStructuredAgent.run({ - operation: 'throw-validation-error', - field: 'email', - }); - }, 'Should throw CustomValidationError'); -}); - -// Test: StructuredError not found pattern -test('errors', 'structured-error-not-found', async () => { - await assertThrows(async () => { - await errorStructuredAgent.run({ - operation: 'throw-not-found-error', - resource: 'user', - id: '123', - }); - }, 'Should throw CustomNotFoundError'); -}); - -// Test: Generic error -test('errors', 'generic-error', async () => { - await assertThrows(async () => { - await errorStructuredAgent.run({ - operation: 'throw-generic-error', - }); - }, 'Should throw generic Error'); -}); - -// Test: Try-catch in agent handler -test('errors', 'try-catch-handling', async () => { - const result = await errorStructuredAgent.run({ - operation: 'try-catch-handling', - }); - - assertEqual(result.success, false); - assertEqual(result.message, 'Error caught and handled'); -}); - -// Test: Success case (no error) -test('errors', 'no-error', async () => { - const result = await errorStructuredAgent.run({ - operation: 'success', - }); - - assertEqual(result.success, true); - assertEqual(result.message, 'No errors'); -}); - -// Test: Nested error propagation -test('errors', 'nested-error-propagation', async () => { - const result = await errorPropagationAgent.run({ - operation: 'nested-error', - shouldFail: true, - }); - - assertEqual(result.success, false); - assertDefined(result.message); - assertEqual(result.errorHandled, true); -}); - -// Test: Nested success (no error) -test('errors', 'nested-success', async () => { - const result = await errorPropagationAgent.run({ - operation: 'nested-error', - shouldFail: false, - }); - - assertEqual(result.success, true); - assertEqual(result.errorHandled, false); -}); - -// Test: Async error propagation -test('errors', 'async-error-propagation', async () => { - const result = await errorPropagationAgent.run({ - operation: 'async-error', - shouldFail: true, - }); - - assertEqual(result.success, false); - assertEqual(result.message, 'Async operation failed'); - assertEqual(result.errorHandled, true); -}); - -// Test: Async success -test('errors', 'async-success', async () => { - const result = await errorPropagationAgent.run({ - operation: 'async-error', - shouldFail: false, - }); - - assertEqual(result.success, true); - assertEqual(result.errorHandled, false); -}); - -// Test: Error chain handling -test('errors', 'chain-error', async () => { - const result = await errorPropagationAgent.run({ - operation: 'chain-errors', - shouldFail: true, - }); - - assertEqual(result.success, false); - assert( - result.message === 'Step 1 failed' || result.message === 'Step 2 failed', - 'Should catch error from chain' - ); - assertEqual(result.errorHandled, true); -}); - -// Test: Error chain success -test('errors', 'chain-success', async () => { - const result = await errorPropagationAgent.run({ - operation: 'chain-errors', - shouldFail: false, - }); - - assertEqual(result.success, true); - assertEqual(result.message, 'All steps completed'); -}); diff --git a/apps/testing/integration-suite/src/test/evals.ts b/apps/testing/integration-suite/src/test/evals.ts deleted file mode 100644 index 50f286af1..000000000 --- a/apps/testing/integration-suite/src/test/evals.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Evals Tests - * - * Tests eval framework functionality: execution, scoring, error handling - */ - -import { test } from './suite'; -import { assertEqual, assertDefined } from './helpers'; - -import evalsBasicAgent from '@agents/evals/basic'; -import evalsSeparateAgent from '@agents/evals/separate/agent'; - -// Test: Basic agent execution with evals attached -test('evals', 'agent-execution', async () => { - const result = await evalsBasicAgent.run({ value: 5 }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.result, 10, 'Result should be double the input'); - assertEqual(result.doubled, true, 'Doubled flag should be true'); -}); - -// Test: Agent with negative input -test('evals', 'negative-input', async () => { - const result = await evalsBasicAgent.run({ value: -3 }); - - assertEqual(result.result, -6, 'Negative values should also double'); - assertEqual(result.doubled, true); -}); - -// Test: Agent with zero input -test('evals', 'zero-input', async () => { - const result = await evalsBasicAgent.run({ value: 0 }); - - assertEqual(result.result, 0, 'Zero doubled is zero'); - assertEqual(result.doubled, true); -}); - -// Test: Agent with evals defined in separate eval.ts file -test('evals', 'separate-eval-file', async () => { - const result = await evalsSeparateAgent.run({ value: 7 }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.doubled, 14, 'Result should be double the input'); -}); - -// Test: Separate eval file - negative input -test('evals', 'separate-eval-file-negative', async () => { - const result = await evalsSeparateAgent.run({ value: -5 }); - - assertEqual(result.doubled, -10, 'Negative values should also double'); -}); diff --git a/apps/testing/integration-suite/src/test/events.ts b/apps/testing/integration-suite/src/test/events.ts deleted file mode 100644 index c4cf8e678..000000000 --- a/apps/testing/integration-suite/src/test/events.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Event System Tests - * - * Tests agent, session, and thread event listeners including: - * - Agent events (started, completed, errored) - * - Session events (completed) - * - Thread events (destroyed) - * - Listener registration and removal - * - Multiple listeners on same event - */ - -import { test } from '@test/suite'; -import { assert, assertEqual } from '@test/helpers'; -import agentEventsAgent from '@agents/events/agent-events'; -import sessionEventsAgent from '@agents/events/session-events'; -import threadEventsAgent from '@agents/events/thread-events'; -import listenerRemovalAgent from '@agents/events/listener-removal'; -import multipleListenersAgent from '@agents/events/multiple-listeners'; - -// Test: Agent event listeners can be registered -test('events', 'agent-listeners-register', async () => { - const result = await agentEventsAgent.run({ - eventType: 'register', - shouldError: false, - }); - - assertEqual(result.success, true); - assertEqual(result.eventType, 'register'); -}); - -// Test: Session event listeners receive completed event -test('events', 'session-completed-event', async () => { - const result = await sessionEventsAgent.run({ - operation: 'test-completed', - }); - - assertEqual(result.success, true); - assertEqual(result.operation, 'test-completed'); - assert(result.sessionId.startsWith('sess_'), 'Session ID should start with sess_'); -}); - -// Test: Thread event listeners receive destroyed event -test('events', 'thread-destroyed-event', async () => { - const result = await threadEventsAgent.run({ - operation: 'test-destroy', - destroyThread: true, - }); - - assertEqual(result.success, true); - assertEqual(result.operation, 'test-destroy'); - assert(result.threadId.startsWith('thrd_'), 'Thread ID should start with thrd_'); -}); - -// Test: Thread event listener without destruction -test('events', 'thread-no-destroy', async () => { - const result = await threadEventsAgent.run({ - operation: 'test-no-destroy', - destroyThread: false, - }); - - assertEqual(result.success, true); - assertEqual(result.operation, 'test-no-destroy'); -}); - -// Test: Event listeners can be removed -test('events', 'listener-removal', async () => { - const result = await listenerRemovalAgent.run({ - operation: 'test-removal', - removeListener: true, - }); - - assertEqual(result.success, true); - assertEqual(result.operation, 'test-removal'); -}); - -// Test: Event listeners remain when not removed -test('events', 'listener-kept', async () => { - const result = await listenerRemovalAgent.run({ - operation: 'test-kept', - removeListener: false, - }); - - assertEqual(result.success, true); - assertEqual(result.operation, 'test-kept'); -}); - -// Test: Multiple listeners can be registered for same event -test('events', 'multiple-listeners', async () => { - const result = await multipleListenersAgent.run({ - operation: 'test-multiple', - }); - - assertEqual(result.success, true); - assertEqual(result.operation, 'test-multiple'); - // Note: listenersCalled will be 0 because listeners are registered DURING execution - // and started event fires BEFORE handler runs - assert(result.listenersCalled >= 0, 'Listeners called should be non-negative'); -}); - -// Test: Event payloads contain correct data -test('events', 'event-payload-validation', async () => { - const result = await sessionEventsAgent.run({ - operation: 'validate-payload', - }); - - assertEqual(result.success, true); - assert(result.sessionId.length > 0, 'Session ID should not be empty'); -}); diff --git a/apps/testing/integration-suite/src/test/helpers/cli.ts b/apps/testing/integration-suite/src/test/helpers/cli.ts deleted file mode 100644 index 12f9a995b..000000000 --- a/apps/testing/integration-suite/src/test/helpers/cli.ts +++ /dev/null @@ -1,261 +0,0 @@ -/** - * CLI Helper - * - * Utilities for executing Agentuity CLI commands via subprocess. - * Uses Bun.spawn for subprocess execution with JSON output parsing. - */ - -import { resolve, join } from 'path'; -import { existsSync, readFileSync } from 'fs'; - -// Debug logging - only enabled in CI -const DEBUG = process.env.CI === 'true'; -const debug = (msg: string) => { - if (DEBUG) console.log(`[CLI] ${msg}`); -}; - -// Find monorepo root by walking up until we find package.json with workspaces -function findMonorepoRoot(startDir: string): string | null { - let currentDir = startDir; - while (true) { - const pkgPath = join(currentDir, 'package.json'); - if (existsSync(pkgPath)) { - try { - const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')); - if (pkg.workspaces) { - return currentDir; - } - } catch { - // Ignore parse errors, continue searching - } - } - const parent = resolve(currentDir, '..'); - if (parent === currentDir) break; // reached filesystem root - currentDir = parent; - } - return null; -} - -// Find project directory (directory containing agentuity.json) -function findProjectDir(startDir: string): string | null { - let currentDir = startDir; - while (true) { - const configPath = join(currentDir, 'agentuity.json'); - if (existsSync(configPath)) { - return currentDir; - } - const parent = resolve(currentDir, '..'); - if (parent === currentDir) break; // reached filesystem root - currentDir = parent; - } - return null; -} - -// Resolve CLI binary path - prioritizes installed CLI from node_modules -function resolveCliPath(): string { - // First check for CLI installed in node_modules (tarball install in CI) - // This is the correct path when SDK is installed from tarballs - const projectDir = findProjectDir(process.cwd()) || findProjectDir(import.meta.dir); - if (projectDir) { - const installedCliPath = join(projectDir, 'node_modules/@agentuity/cli/bin/cli.ts'); - if (existsSync(installedCliPath)) { - return installedCliPath; - } - } - - // Fall back to monorepo source (local development with workspace links) - const rootFromFile = findMonorepoRoot(import.meta.dir); - if (rootFromFile) { - const cliPath = join(rootFromFile, 'packages/cli/bin/cli.ts'); - if (existsSync(cliPath)) { - return cliPath; - } - } - - // Fall back to process.cwd() (built environment running from .agentuity) - const rootFromCwd = findMonorepoRoot(process.cwd()); - if (rootFromCwd) { - const cliPath = join(rootFromCwd, 'packages/cli/bin/cli.ts'); - if (existsSync(cliPath)) { - return cliPath; - } - } - - throw new Error( - `CLI not found. Searched in node_modules, from ${import.meta.dir} (root: ${rootFromFile}) and ${process.cwd()} (root: ${rootFromCwd})` - ); -} - -const CLI_PATH = resolveCliPath(); - -// Find the project directory containing agentuity.json -// This is needed because the test server runs from .agentuity/ but CLI needs the parent -export const PROJECT_DIR = - findProjectDir(process.cwd()) || findProjectDir(import.meta.dir) || process.cwd(); - -// Log CLI path once at startup (only in CI) -debug(`CLI_PATH: ${CLI_PATH}`); -debug(`PROJECT_DIR: ${PROJECT_DIR}`); - -export interface CLIResult { - stdout: string; - stderr: string; - exitCode: number; - json?: any; - jsonParseError?: string; // Captures JSON parsing errors for debugging -} - -/** - * Execute CLI command and return result - * Commands are run from the project directory (containing agentuity.json) - * Uses the profile from AGENTUITY_PROFILE env var if set, otherwise CLI defaults - * - * Note: We set environment variables to skip startup checks: - * - AGENTUITY_SKIP_LEGACY_CHECK=1 - Skip legacy CLI detection that could exit(1) - * - AGENTUITY_SKIP_VERSION_CHECK=1 - Skip version check network requests - */ -export async function runCLI(args: string[]): Promise { - // Create environment with skip flags (using env vars instead of CLI flags - // because Commander.js would fail on unknown options) - const env = { - ...process.env, - AGENTUITY_SKIP_LEGACY_CHECK: '1', - AGENTUITY_SKIP_VERSION_CHECK: '1', - }; - - try { - // Use Bun.spawn instead of Bun.$ for more reliable subprocess execution - // Bun.$ has issues with array argument expansion in some environments - const cmd = ['bun', CLI_PATH, ...args]; - - const proc = Bun.spawn(cmd, { - cwd: PROJECT_DIR, - env, - stdout: 'pipe', - stderr: 'pipe', - }); - - // Read stdout and stderr - const stdoutChunks: Uint8Array[] = []; - const stderrChunks: Uint8Array[] = []; - - if (proc.stdout) { - const reader = proc.stdout.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) break; - stdoutChunks.push(value); - } - } - - if (proc.stderr) { - const reader = proc.stderr.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) break; - stderrChunks.push(value); - } - } - - const exitCode = await proc.exited; - - // Combine chunks into strings - const stdoutBytes = new Uint8Array( - stdoutChunks.reduce((total, chunk) => total + chunk.length, 0) - ); - let stdoutOffset = 0; - for (const chunk of stdoutChunks) { - stdoutBytes.set(chunk, stdoutOffset); - stdoutOffset += chunk.length; - } - const stdout = new TextDecoder().decode(stdoutBytes); - - const stderrBytes = new Uint8Array( - stderrChunks.reduce((total, chunk) => total + chunk.length, 0) - ); - let stderrOffset = 0; - for (const chunk of stderrChunks) { - stderrBytes.set(chunk, stderrOffset); - stderrOffset += chunk.length; - } - const stderr = new TextDecoder().decode(stderrBytes); - - // Log failures in CI for debugging - if (exitCode !== 0) { - debug(`Command failed: ${args.join(' ')} (exit ${exitCode})`); - if (stderr) debug(`stderr: ${stderr.slice(0, 200)}`); - } - - return { stdout, stderr, exitCode }; - } catch (error: any) { - debug(`Error: ${error.message}`); - return { - stdout: '', - stderr: error.message || 'Unknown error', - exitCode: 1, - }; - } -} - -/** - * Execute CLI command and parse JSON output - */ -export async function runCLIJSON(args: string[]): Promise { - const result = await runCLI([...args, '--json']); - - if (result.exitCode === 0 && result.stdout) { - try { - result.json = JSON.parse(result.stdout); - } catch (e: any) { - // Capture JSON parsing error for debugging flaky tests - result.jsonParseError = `JSON parse failed: ${e.message}. Raw stdout (first 500 chars): ${result.stdout.slice(0, 500)}`; - debug(`JSON parse error for ${args.join(' ')}: ${result.jsonParseError}`); - } - } else if (result.exitCode === 0 && !result.stdout) { - // Command succeeded but no output - this is suspicious - result.jsonParseError = `Command succeeded (exit 0) but stdout is empty. stderr: ${result.stderr?.slice(0, 200) || '(none)'}`; - debug(`Empty stdout for ${args.join(' ')}: ${result.jsonParseError}`); - } - - return result; -} - -/** - * Check if user is authenticated - */ -export async function isAuthenticated(): Promise { - const result = await runCLI(['auth', 'whoami']); - return result.exitCode === 0; -} - -/** - * Get current profile - */ -export async function getCurrentProfile(): Promise { - const result = await runCLI(['profile', 'current']); - return result.stdout.trim(); -} - -/** - * Extract deployment ID from deploy output - */ -export function extractDeploymentId(output: string): string | null { - const match = output.match(/deploy_[a-zA-Z0-9]+/); - return match ? match[0] : null; -} - -/** - * Extract agent ID from output - */ -export function extractAgentId(output: string): string | null { - const match = output.match(/agent_[a-f0-9]{40}/); - return match ? match[0] : null; -} - -/** - * Extract session ID from output - */ -export function extractSessionId(output: string): string | null { - const match = output.match(/sess_[a-f0-9]+/); - return match ? match[0] : null; -} diff --git a/apps/testing/integration-suite/src/test/helpers/http-client.ts b/apps/testing/integration-suite/src/test/helpers/http-client.ts deleted file mode 100644 index 3255c7238..000000000 --- a/apps/testing/integration-suite/src/test/helpers/http-client.ts +++ /dev/null @@ -1,110 +0,0 @@ -/** - * HTTP Client Helper - * - * Provides HTTP client with cookie jar for testing state persistence. - */ - -/** - * Simple cookie jar for storing and sending cookies - */ -export class CookieJar { - private cookies: Map = new Map(); - - /** - * Parse and store a Set-Cookie header - */ - setCookie(cookieHeader: string) { - // Parse cookie: "name=value; Path=/; ..." - const parts = cookieHeader.split(';'); - const nameValue = parts[0]; - if (!nameValue) return; - - // Split only on first '=' to preserve '=' in cookie value - const equalIndex = nameValue.indexOf('='); - if (equalIndex === -1) { - return; - } - - const name = nameValue.slice(0, equalIndex).trim(); - const value = nameValue.slice(equalIndex + 1).trim(); - - if (name && value !== undefined) { - this.cookies.set(name, value); - } - } - - /** - * Get Cookie header value for request - */ - getCookieHeader(): string { - return Array.from(this.cookies.entries()) - .map(([name, value]) => `${name}=${value}`) - .join('; '); - } - - /** - * Get specific cookie value - */ - getCookie(name: string): string | undefined { - return this.cookies.get(name); - } - - /** - * Clear all cookies - */ - clear() { - this.cookies.clear(); - } - - /** - * Get all cookies - */ - getAll(): Map { - return new Map(this.cookies); - } -} - -/** - * Make HTTP request and store cookies in jar - */ -export async function httpRequest( - url: string, - options: RequestInit, - jar?: CookieJar -): Promise { - // Add cookies from jar if provided - if (jar && jar.getCookieHeader()) { - options.headers = { - ...options.headers, - Cookie: jar.getCookieHeader(), - }; - } - - // Make request - const response = await fetch(url, options); - - // Store cookies from response - if (jar) { - const setCookies = response.headers.getSetCookie(); - for (const cookie of setCookies) { - jar.setCookie(cookie); - } - } - - return response; -} - -/** - * Extract session ID from response headers - */ -export function getSessionId(response: Response): string | null { - return response.headers.get('x-session-id'); -} - -/** - * Extract thread ID from cookie jar (atid cookie) - */ -export function getThreadId(jar: CookieJar): string | null { - const threadId = jar.getCookie('atid'); - return threadId || null; -} diff --git a/apps/testing/integration-suite/src/test/helpers/index.ts b/apps/testing/integration-suite/src/test/helpers/index.ts deleted file mode 100644 index c1e27bd9c..000000000 --- a/apps/testing/integration-suite/src/test/helpers/index.ts +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Test helper utilities for the integration suite - */ - -/** - * Generate a unique ID for test isolation - * Includes a run ID to ensure uniqueness across different test runs - */ -let idCounter = 0; - -/** - * Unique identifier for this test run. - * Used to isolate test data between concurrent CI runs. - * Exported so cleanup functions can filter to only this run's data. - */ -export const testRunId = Math.random().toString(36).substring(2, 10); - -export function uniqueId(prefix = 'test'): string { - const timestamp = Date.now(); - const random = Math.random().toString(36).substring(2, 15); - const counter = (idCounter++).toString(36); - // Use underscores instead of hyphens for valid env var names - return `${prefix}_${testRunId}_${timestamp}_${counter}_${random}`; -} - -/** - * Assertion utility that throws on failure - */ -export function assert(condition: boolean, message: string): asserts condition { - if (!condition) { - throw new Error(`Assertion failed: ${message}`); - } -} - -/** - * Assert equality - */ -export function assertEqual(actual: T, expected: T, message?: string): void { - const msg = message || `Expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`; - assert(actual === expected, msg); -} - -/** - * Assert deep equality for objects - */ -export function assertDeepEqual(actual: T, expected: T, message?: string): void { - const msg = message || `Expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`; - assert(JSON.stringify(actual) === JSON.stringify(expected), msg); -} - -/** - * Assert that a value is defined (not null/undefined) - */ -export function assertDefined( - value: T | null | undefined, - message?: string -): asserts value is T { - const msg = message || `Expected value to be defined, got ${value}`; - assert(value !== null && value !== undefined, msg); -} - -/** - * Assert that a value is truthy - */ -export function assertTruthy(value: unknown, message?: string): void { - const msg = message || `Expected truthy value, got ${value}`; - assert(!!value, msg); -} - -/** - * Assert that a value is falsy - */ -export function assertFalsy(value: unknown, message?: string): void { - const msg = message || `Expected falsy value, got ${value}`; - assert(!value, msg); -} - -/** - * Assert that a function throws an error - */ -export async function assertThrows( - fn: () => void | Promise, - message?: string -): Promise { - let didThrow = false; - try { - await fn(); - } catch { - didThrow = true; - } - const msg = message || 'Expected function to throw an error'; - assert(didThrow, msg); -} - -/** - * Sleep for a given number of milliseconds - */ -export function sleep(ms: number): Promise { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -/** - * Create a cleanup function that tracks resources - */ -export class CleanupTracker { - private cleanupFns: Array<() => void | Promise> = []; - - add(fn: () => void | Promise): void { - this.cleanupFns.push(fn); - } - - async cleanup(): Promise { - for (const fn of this.cleanupFns.reverse()) { - try { - await fn(); - } catch (error) { - console.error('Cleanup error:', error); - } - } - this.cleanupFns = []; - } -} diff --git a/apps/testing/integration-suite/src/test/helpers/kv.ts b/apps/testing/integration-suite/src/test/helpers/kv.ts deleted file mode 100644 index b719164f4..000000000 --- a/apps/testing/integration-suite/src/test/helpers/kv.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Helper function to decode KV values that might be Uint8Array or stringified Uint8Array - */ -export function decodeKVValue(value: any): any { - // Handle Uint8Array directly - if (value instanceof Uint8Array) { - const text = new TextDecoder().decode(value); - return tryParseValue(text); - } - - // Handle stringified Uint8Array (e.g., "114,101,...") - must contain commas - if (typeof value === 'string' && value.includes(',') && /^\d+(,\d+)+$/.test(value)) { - const bytes = value.split(',').map((n) => parseInt(n, 10)); - const uint8 = new Uint8Array(bytes); - const text = new TextDecoder().decode(uint8); - return tryParseValue(text); - } - - // Handle regular strings (including numeric strings like "123") - if (typeof value === 'string') { - return tryParseValue(value); - } - - return value; -} - -function tryParseValue(text: string): any { - // Try to parse as number first (before JSON, since "123" is valid JSON) - const num = Number(text); - if (!Number.isNaN(num) && text.trim() !== '') { - return num; - } - - // Try to parse as JSON for objects/arrays - try { - return JSON.parse(text); - } catch { - // Return as string - return text; - } -} diff --git a/apps/testing/integration-suite/src/test/helpers/session-event-provider.ts b/apps/testing/integration-suite/src/test/helpers/session-event-provider.ts deleted file mode 100644 index 79500756d..000000000 --- a/apps/testing/integration-suite/src/test/helpers/session-event-provider.ts +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Test SessionEventProvider that captures session events for verification - * - * Used to verify that agentIds are correctly populated in session complete events. - */ - -import type { - SessionEventProvider, - SessionStartEvent, - SessionCompleteEvent, -} from '@agentuity/core'; - -export interface CapturedSessionEvent { - type: 'start' | 'complete'; - event: SessionStartEvent | SessionCompleteEvent; - timestamp: number; -} - -/** - * SessionEventProvider that captures events for testing verification - */ -export class TestSessionEventProvider implements SessionEventProvider { - private events: Map = new Map(); - private completedSessions: Map = new Map(); - - async start(event: SessionStartEvent): Promise { - const sessionId = event.id; - if (!this.events.has(sessionId)) { - this.events.set(sessionId, []); - } - this.events.get(sessionId)!.push({ - type: 'start', - event, - timestamp: Date.now(), - }); - } - - async complete(event: SessionCompleteEvent): Promise { - const sessionId = event.id; - if (!this.events.has(sessionId)) { - this.events.set(sessionId, []); - } - this.events.get(sessionId)!.push({ - type: 'complete', - event, - timestamp: Date.now(), - }); - - // Store completed session for easy lookup - this.completedSessions.set(sessionId, event); - } - - /** - * Get all events for a session - */ - getSessionEvents(sessionId: string): CapturedSessionEvent[] { - return this.events.get(sessionId) || []; - } - - /** - * Get the completed session event (if any) - */ - getCompletedSession(sessionId: string): SessionCompleteEvent | undefined { - return this.completedSessions.get(sessionId); - } - - /** - * Get agentIds from a completed session - */ - getAgentIds(sessionId: string): string[] | undefined { - const event = this.completedSessions.get(sessionId); - return event?.agentIds; - } - - /** - * Get all captured sessions - */ - getAllSessions(): string[] { - return [...this.events.keys()]; - } - - /** - * Get the most recently completed session - */ - getLastCompletedSession(): SessionCompleteEvent | undefined { - const sessions = [...this.completedSessions.values()]; - return sessions[sessions.length - 1]; - } - - /** - * Clear all captured events - */ - clear(): void { - this.events.clear(); - this.completedSessions.clear(); - } - - /** - * Get event count - */ - getEventCount(): number { - let count = 0; - for (const events of this.events.values()) { - count += events.length; - } - return count; - } -} - -// Singleton instance for use across tests -export const testSessionEventProvider = new TestSessionEventProvider(); diff --git a/apps/testing/integration-suite/src/test/helpers/sse-client.ts b/apps/testing/integration-suite/src/test/helpers/sse-client.ts deleted file mode 100644 index 13bf0e86d..000000000 --- a/apps/testing/integration-suite/src/test/helpers/sse-client.ts +++ /dev/null @@ -1,254 +0,0 @@ -/** - * SSE (Server-Sent Events) Client Helper for Tests - * - * Provides utilities for testing SSE endpoints. - * Uses fetch with text/event-stream parsing since EventSource isn't available in Bun runtime. - */ - -export interface SSEMessage { - event?: string; - data: string; - id?: string; -} - -export class SSETestClient { - private messages: SSEMessage[] = []; - private abortController: AbortController | null = null; - private connectionActive = false; - private eventListeners: Map void)[]> = new Map(); - - constructor(private url: string) {} - - /** - * Parse SSE message from text - */ - private parseSSEMessage(text: string): SSEMessage | null { - const lines = text.split('\n'); - const message: SSEMessage = { data: '' }; - - for (const line of lines) { - if (line.startsWith('event:')) { - message.event = line.slice(6).trim(); - } else if (line.startsWith('data:')) { - if (message.data) message.data += '\n'; - message.data += line.slice(5).trim(); - } else if (line.startsWith('id:')) { - message.id = line.slice(3).trim(); - } - } - - return message.data ? message : null; - } - - /** - * Connect to the SSE endpoint - */ - async connect(): Promise { - this.abortController = new AbortController(); - this.connectionActive = true; - - const response = await fetch(this.url, { - headers: { - Accept: 'text/event-stream', - }, - signal: this.abortController.signal, - }); - - if (!response.ok) { - throw new Error(`SSE connection failed: ${response.status}`); - } - - if (!response.body) { - throw new Error('SSE response has no body'); - } - - // Start reading the stream - this.readStream(response.body); - } - - /** - * Read and parse the SSE stream - */ - private async readStream(body: ReadableStream): Promise { - const reader = body.getReader(); - const decoder = new TextDecoder(); - let buffer = ''; - - try { - while (this.connectionActive) { - const { done, value } = await reader.read(); - - if (done) { - this.connectionActive = false; - break; - } - - buffer += decoder.decode(value, { stream: true }); - - // Split by double newline (SSE message separator) - const parts = buffer.split('\n\n'); - buffer = parts.pop() || ''; // Keep incomplete message in buffer - - for (const part of parts) { - if (!part.trim()) continue; - - const message = this.parseSSEMessage(part); - if (message) { - this.messages.push(message); - - // Call event listeners - const eventType = message.event || 'message'; - const listeners = this.eventListeners.get(eventType) || []; - for (const listener of listeners) { - try { - const data = JSON.parse(message.data); - listener(data); - } catch { - listener(message.data); - } - } - } - } - } - } catch (error) { - if (this.connectionActive) { - // Only throw if not deliberately closed - throw error; - } - } finally { - reader.releaseLock(); - } - } - - /** - * Listen for a specific event type - */ - addEventListener(eventType: string, handler?: (data: any) => void): void { - if (handler) { - if (!this.eventListeners.has(eventType)) { - this.eventListeners.set(eventType, []); - } - this.eventListeners.get(eventType)!.push(handler); - } else { - // Just register the event type so messages are captured - if (!this.eventListeners.has(eventType)) { - this.eventListeners.set(eventType, []); - } - } - } - - /** - * Wait for and receive the next message - */ - async receive(timeoutMs: number = 5000): Promise { - const startTime = Date.now(); - - while (this.messages.length === 0) { - if (Date.now() - startTime > timeoutMs) { - throw new Error(`Timeout waiting for SSE message after ${timeoutMs}ms`); - } - - // Wait a bit before checking again - await new Promise((resolve) => setTimeout(resolve, 10)); - } - - return this.messages.shift()!; - } - - /** - * Receive a message and parse data as JSON - */ - async receiveJSON(timeoutMs: number = 5000): Promise { - const message = await this.receive(timeoutMs); - return JSON.parse(message.data); - } - - /** - * Wait for a specific event type - */ - async receiveEvent(eventType: string, timeoutMs: number = 5000): Promise { - const startTime = Date.now(); - - while (true) { - // Check existing messages - const index = this.messages.findIndex((msg) => msg.event === eventType); - if (index !== -1) { - const message = this.messages.splice(index, 1)[0]; - if (message) return message; - } - - if (Date.now() - startTime > timeoutMs) { - throw new Error(`Timeout waiting for event '${eventType}' after ${timeoutMs}ms`); - } - - // Wait a bit before checking again - await new Promise((resolve) => setTimeout(resolve, 10)); - } - } - - /** - * Get all pending messages without waiting - */ - getPendingMessages(): SSEMessage[] { - const messages = [...this.messages]; - this.messages = []; - return messages; - } - - /** - * Wait for a specific number of messages - */ - async receiveMultiple(count: number, timeoutMs: number = 5000): Promise { - const startTime = Date.now(); - const collected: SSEMessage[] = []; - - while (collected.length < count) { - if (Date.now() - startTime > timeoutMs) { - throw new Error( - `Timeout waiting for ${count} messages (received ${collected.length}) after ${timeoutMs}ms` - ); - } - - if (this.messages.length > 0) { - collected.push(this.messages.shift()!); - } else { - await new Promise((resolve) => setTimeout(resolve, 10)); - } - } - - return collected; - } - - /** - * Close the SSE connection - */ - close(): void { - this.connectionActive = false; - if (this.abortController) { - this.abortController.abort(); - this.abortController = null; - } - } - - /** - * Check if the SSE connection is open - */ - isOpen(): boolean { - return this.connectionActive; - } -} - -/** - * Create an SSE client for testing - */ -export function createSSEClient(path: string, query?: Record): SSETestClient { - const baseUrl = 'http://localhost:3500'; - let url = `${baseUrl}${path}`; - - if (query) { - const params = new URLSearchParams(query); - url += `?${params.toString()}`; - } - - return new SSETestClient(url); -} diff --git a/apps/testing/integration-suite/src/test/helpers/thread-provider.ts b/apps/testing/integration-suite/src/test/helpers/thread-provider.ts deleted file mode 100644 index 12ab10d40..000000000 --- a/apps/testing/integration-suite/src/test/helpers/thread-provider.ts +++ /dev/null @@ -1,230 +0,0 @@ -/** - * In-Memory Thread Provider for Testing - * - * Provides thread persistence for testing without requiring WebSocket connection. - * Stores thread state in memory across requests. - */ - -import type { Thread, ThreadProvider, ThreadState } from '@agentuity/runtime'; -import type { Context } from 'hono'; -import { getCookie, setCookie } from 'hono/cookie'; - -const THREAD_COOKIE_NAME = 'atid'; -const THREAD_EXPIRY = 3600; // 1 hour - -class TestThreadState implements ThreadState { - #state: Map; - #dirty = false; - #loaded = true; // For testing, we're always "loaded" - - constructor(initialState?: Record) { - this.#state = new Map(Object.entries(initialState || {})); - } - - get loaded(): boolean { - return this.#loaded; - } - - get dirty(): boolean { - return this.#dirty; - } - - async get(key: string): Promise { - return this.#state.get(key) as T | undefined; - } - - async set(key: string, value: T): Promise { - this.#state.set(key, value); - this.#dirty = true; - } - - async has(key: string): Promise { - return this.#state.has(key); - } - - async delete(key: string): Promise { - this.#state.delete(key); - this.#dirty = true; - } - - async clear(): Promise { - this.#state.clear(); - this.#dirty = true; - } - - async entries(): Promise<[string, T][]> { - return Array.from(this.#state.entries()) as [string, T][]; - } - - async keys(): Promise { - return Array.from(this.#state.keys()); - } - - async values(): Promise { - return Array.from(this.#state.values()) as T[]; - } - - async size(): Promise { - return this.#state.size; - } - - async push(key: string, value: T, maxRecords?: number): Promise { - const existing = this.#state.get(key); - let arr: unknown[]; - if (Array.isArray(existing)) { - existing.push(value); - arr = existing; - } else if (existing === undefined) { - arr = [value]; - this.#state.set(key, arr); - } else { - throw new Error(`Cannot push to non-array value at key "${key}"`); - } - // Apply maxRecords limit - if (maxRecords !== undefined && arr.length > maxRecords) { - this.#state.set(key, arr.slice(arr.length - maxRecords)); - } - this.#dirty = true; - } - - // Test helpers - isDirty(): boolean { - return this.#dirty; - } - - getSerializedState(): string { - const obj: Record = {}; - for (const [key, value] of this.#state.entries()) { - obj[key] = value; - } - return JSON.stringify(obj); - } -} - -class TestThread implements Thread { - id: string; - state: TestThreadState; - private _metadata: Record; - private _metadataDirty = false; - private listeners = new Map<'destroyed', Set>(); - - constructor(id: string, initialState?: Record) { - this.id = id; - this._metadata = {}; - this.state = new TestThreadState(initialState); - } - - async getMetadata(): Promise> { - return { ...this._metadata }; - } - - async setMetadata(metadata: Record): Promise { - this._metadata = metadata; - this._metadataDirty = true; - } - - addEventListener(eventName: 'destroyed', callback: Function): void { - if (!this.listeners.has(eventName)) { - this.listeners.set(eventName, new Set()); - } - this.listeners.get(eventName)!.add(callback); - } - - removeEventListener(eventName: 'destroyed', callback: Function): void { - this.listeners.get(eventName)?.delete(callback); - } - - async fireEvent(eventName: 'destroyed'): Promise { - const callbacks = this.listeners.get(eventName); - if (callbacks) { - for (const callback of callbacks) { - await callback(eventName, this); - } - } - } - - async empty(): Promise { - const stateSize = await this.state.size(); - return stateSize === 0; - } - - async destroy(): Promise { - await this.state.clear(); - await this.fireEvent('destroyed'); - } - - // Test helpers - isDirty(): boolean { - return this.state.isDirty() || this._metadataDirty; - } - - getSerializedState(): string { - return this.state.getSerializedState(); - } -} - -/** - * In-memory thread storage for testing - */ -export class InMemoryThreadProvider implements ThreadProvider { - private threads = new Map>(); - - async initialize(): Promise { - // No initialization needed for in-memory storage - } - - async restore(ctx: Context): Promise { - // Get thread ID from cookie, or generate new one - let threadId = getCookie(ctx, THREAD_COOKIE_NAME); - - if (!threadId || !threadId.startsWith('thrd_')) { - // Must match runtime thread id constraints: min 32 chars including prefix, - // and [a-zA-Z0-9-] after 'thrd_'. - threadId = `thrd_${crypto.randomUUID().replaceAll('-', '')}`; - } - - // Set cookie for next request - setCookie(ctx, THREAD_COOKIE_NAME, threadId, { - path: '/', - maxAge: THREAD_EXPIRY, - httpOnly: false, - sameSite: 'Lax', - }); - - // Restore thread state from memory - const storedState = this.threads.get(threadId); - const thread = new TestThread(threadId, storedState); - - return thread; - } - - async save(thread: Thread): Promise { - if (thread instanceof TestThread && thread.isDirty()) { - // Save thread state to memory - const serialized = thread.getSerializedState(); - const state = JSON.parse(serialized); - this.threads.set(thread.id, state); - } - } - - async destroy(thread: Thread): Promise { - this.threads.delete(thread.id); - if (thread instanceof TestThread) { - await thread.destroy(); - } - } - - setThreadIDProvider(): void { - // Not needed for in-memory provider - } - - // Test helper: clear all threads - clearAll(): void { - this.threads.clear(); - } - - // Test helper: get thread count - getThreadCount(): number { - return this.threads.size; - } -} diff --git a/apps/testing/integration-suite/src/test/helpers/websocket-client.ts b/apps/testing/integration-suite/src/test/helpers/websocket-client.ts deleted file mode 100644 index e0216bd7a..000000000 --- a/apps/testing/integration-suite/src/test/helpers/websocket-client.ts +++ /dev/null @@ -1,120 +0,0 @@ -/** - * WebSocket Client Helper for Tests - * - * Provides utilities for testing WebSocket endpoints. - */ - -export class WebSocketTestClient { - private ws: WebSocket | null = null; - private messageQueue: any[] = []; - private closePromise: Promise | null = null; - private closeResolve: (() => void) | null = null; - - constructor(private url: string) {} - - /** - * Connect to the WebSocket server - */ - async connect(): Promise { - return new Promise((resolve, reject) => { - this.ws = new WebSocket(this.url); - - this.ws.onopen = () => { - resolve(); - }; - - this.ws.onerror = (error) => { - reject(error); - }; - - this.ws.onmessage = (event) => { - this.messageQueue.push(event.data); - }; - - // Setup close promise - this.closePromise = new Promise((res) => { - this.closeResolve = res; - }); - - this.ws.onclose = () => { - if (this.closeResolve) { - this.closeResolve(); - } - }; - }); - } - - /** - * Send a message to the WebSocket server - */ - send(data: string | object): void { - if (!this.ws) { - throw new Error('WebSocket not connected'); - } - - const message = typeof data === 'string' ? data : JSON.stringify(data); - this.ws.send(message); - } - - /** - * Wait for and receive the next message - */ - async receive(timeoutMs: number = 5000): Promise { - const startTime = Date.now(); - - while (this.messageQueue.length === 0) { - if (Date.now() - startTime > timeoutMs) { - throw new Error(`Timeout waiting for message after ${timeoutMs}ms`); - } - - // Wait a bit before checking again - await new Promise((resolve) => setTimeout(resolve, 10)); - } - - return this.messageQueue.shift(); - } - - /** - * Receive a message and parse as JSON - */ - async receiveJSON(timeoutMs: number = 5000): Promise { - const message = await this.receive(timeoutMs); - return JSON.parse(message); - } - - /** - * Get all pending messages without waiting - */ - getPendingMessages(): any[] { - const messages = [...this.messageQueue]; - this.messageQueue = []; - return messages; - } - - /** - * Close the WebSocket connection - */ - async close(): Promise { - if (this.ws) { - this.ws.close(); - await this.closePromise; - this.ws = null; - } - } - - /** - * Check if the WebSocket is connected - */ - isConnected(): boolean { - return this.ws !== null && this.ws.readyState === WebSocket.OPEN; - } -} - -/** - * Create a WebSocket client for testing - */ -export function createWebSocketClient(path: string): WebSocketTestClient { - const baseUrl = 'ws://localhost:3500'; - const url = `${baseUrl}${path}`; - return new WebSocketTestClient(url); -} diff --git a/apps/testing/integration-suite/src/test/http-state-persistence.ts b/apps/testing/integration-suite/src/test/http-state-persistence.ts deleted file mode 100644 index b27d5efc1..000000000 --- a/apps/testing/integration-suite/src/test/http-state-persistence.ts +++ /dev/null @@ -1,561 +0,0 @@ -/** - * HTTP State Persistence Tests - * - * Tests thread and session state persistence across HTTP requests with cookies. - * These tests use the real HTTP server (port 3500) instead of agent.run(). - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined, uniqueId } from '@test/helpers'; -import { CookieJar, httpRequest, getSessionId, getThreadId } from '@test/helpers/http-client'; - -const BASE_URL = 'http://localhost:3500/api'; - -// Test 1: Save thread state via HTTP POST -test('http-state-persistence', 'save-thread-state', async () => { - const jar = new CookieJar(); - const testData = uniqueId('thread-data'); - - // First request: save data - const response = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData, - }), - }, - jar - ); - - assertEqual(response.status, 200); - - const result = await response.json(); - assertEqual(result.success, true); - assertEqual(result.threadState.testData, testData); - assertEqual(result.threadState.requestCount, 1); - - // Verify session ID in headers - const sessionId = getSessionId(response); - assertDefined(sessionId); - - // Verify thread ID in cookies - const threadId = getThreadId(jar); - assertDefined(threadId); -}); - -// Test 2: Restore thread state in second request with same cookie -test('http-state-persistence', 'restore-thread-state', async () => { - const jar = new CookieJar(); - const testData = uniqueId('thread-data'); - - // First request: save data - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData, - }), - }, - jar - ); - - // Second request: read data with same cookies - const response2 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'read', - }), - }, - jar - ); - - assertEqual(response2.status, 200); - - const result2 = await response2.json(); - assertEqual(result2.success, true); - assertEqual(result2.threadState.testData, testData); // Thread state restored! - assertEqual(result2.threadState.requestCount, 1); // Counter persisted -}); - -// Test 3: Session state does NOT persist across requests -test('http-state-persistence', 'session-state-not-persisted', async () => { - const jar = new CookieJar(); - const sessionData = uniqueId('session-data'); - - // First request: save session data - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - sessionData: sessionData, - }), - }, - jar - ); - - // Second request: session state should be empty - const response2 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'read', - }), - }, - jar - ); - - const result2 = await response2.json(); - assertEqual(result2.success, true); - assertEqual(result2.sessionState.sessionData, undefined); // Session state NOT persisted -}); - -// Test 4: Thread state persists across multiple requests -test('http-state-persistence', 'multiple-requests-same-thread', async () => { - const jar = new CookieJar(); - const testData = uniqueId('thread-data'); - - // First request - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData, - }), - }, - jar - ); - - // Second request (increments counter) - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData, - }), - }, - jar - ); - - // Third request (increments counter again) - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData, - }), - }, - jar - ); - - // Fourth request: verify counter - const response4 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'read', - }), - }, - jar - ); - - const result4 = await response4.json(); - assertEqual(result4.threadState.requestCount, 3); // Counter incremented 3 times -}); - -// Test 5: Different cookies = different thread state -test('http-state-persistence', 'different-cookies-different-threads', async () => { - const jar1 = new CookieJar(); - const jar2 = new CookieJar(); - const testData1 = uniqueId('thread-1'); - const testData2 = uniqueId('thread-2'); - - // First jar: save data - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData1, - }), - }, - jar1 - ); - - // Second jar: save different data - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: testData2, - }), - }, - jar2 - ); - - // Read from first jar - const response1 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'read', - }), - }, - jar1 - ); - - // Read from second jar - const response2 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'read', - }), - }, - jar2 - ); - - const result1 = await response1.json(); - const result2 = await response2.json(); - - // Each jar should have its own thread data - assertEqual(result1.threadState.testData, testData1); - assertEqual(result2.threadState.testData, testData2); -}); - -// Test 6: Session ID header present -test('http-state-persistence', 'session-id-header-present', async () => { - const jar = new CookieJar(); - - // Make request - const response = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'ids', - }), - }, - jar - ); - - const sessionId = getSessionId(response); - assertDefined(sessionId); - assert(sessionId.startsWith('sess_'), 'Session ID should start with sess_'); -}); - -// Test 7: Thread ID remains same across requests with cookie -test('http-state-persistence', 'thread-id-same', async () => { - const jar = new CookieJar(); - - // First request - const response1 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'ids', - }), - }, - jar - ); - - const result1 = await response1.json(); - const threadId1 = result1.threadId; - assertDefined(threadId1); - - // Second request with same cookie - const response2 = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'ids', - }), - }, - jar - ); - - const result2 = await response2.json(); - const threadId2 = result2.threadId; - - // Thread IDs should be the same - assertEqual(threadId1, threadId2); -}); - -// Test 8: Cookie jar extraction works -test('http-state-persistence', 'cookie-jar-extraction', async () => { - const jar = new CookieJar(); - - // Make request - await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'ids', - }), - }, - jar - ); - - // Verify thread ID cookie was stored - const threadId = getThreadId(jar); - assertDefined(threadId); - assert(threadId.startsWith('thrd_'), 'Thread ID should start with thrd_'); - - // Verify cookies are accessible - const cookies = jar.getAll(); - assert(cookies.size > 0, 'Cookie jar should have cookies'); -}); - -// Test 9: Cross-agent thread state sharing (writer -> reader) -test('http-state-persistence', 'cross-agent-state-sharing', async () => { - const jar = new CookieJar(); - const testData = uniqueId('cross-agent-data'); - - // Writer agent: Save data to thread state - const writeResponse = await httpRequest( - `${BASE_URL}/agent/state-writer`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'sharedData', - value: testData, - }), - }, - jar - ); - - assertEqual(writeResponse.status, 200); - const writeResult = await writeResponse.json(); - assertEqual(writeResult.success, true); - const threadId = writeResult.threadId; - - // Reader agent: Read data from same thread (same cookie) - const readResponse = await httpRequest( - `${BASE_URL}/agent/state-reader`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'sharedData', - }), - }, - jar - ); - - assertEqual(readResponse.status, 200); - const readResult = await readResponse.json(); - assertEqual(readResult.success, true); - assertEqual(readResult.threadId, threadId); // Same thread - assertEqual(readResult.value, testData); // Data shared across agents! - assert(readResult.allKeys.includes('sharedData'), 'Reader should see sharedData key'); -}); - -// Test 10: Multiple agents can write and read thread state -test('http-state-persistence', 'multiple-agents-thread-state', async () => { - const jar = new CookieJar(); - - // First agent writes - await httpRequest( - `${BASE_URL}/agent/state-writer`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'key1', - value: 'value1', - }), - }, - jar - ); - - // Second agent writes different key - await httpRequest( - `${BASE_URL}/agent/state-writer`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'key2', - value: 'value2', - }), - }, - jar - ); - - // Third agent writes yet another key - await httpRequest( - `${BASE_URL}/agent/state-writer`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'key3', - value: { nested: 'object', count: 42 }, - }), - }, - jar - ); - - // Reader can see all keys - const readResponse = await httpRequest( - `${BASE_URL}/agent/state-reader`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'key3', - }), - }, - jar - ); - - const readResult = await readResponse.json(); - assertEqual(readResult.success, true); - assertEqual(readResult.value.nested, 'object'); - assertEqual(readResult.value.count, 42); - assert(readResult.allKeys.includes('key1'), 'Should have key1'); - assert(readResult.allKeys.includes('key2'), 'Should have key2'); - assert(readResult.allKeys.includes('key3'), 'Should have key3'); - assertEqual(readResult.allKeys.length >= 3, true, 'Should have at least 3 keys'); -}); - -// Test 11: Thread state persists across agent switches -test('http-state-persistence', 'thread-state-across-agent-switches', async () => { - const jar = new CookieJar(); - const testValue = uniqueId('switch-test'); - - // Use writer agent - await httpRequest( - `${BASE_URL}/agent/state-writer`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'persistentData', - value: testValue, - }), - }, - jar - ); - - // Use original state agent - const stateResponse = await httpRequest( - `${BASE_URL}/agent/state`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - action: 'save', - threadData: 'original-agent-data', - }), - }, - jar - ); - - const stateResult = await stateResponse.json(); - assertEqual(stateResult.success, true); - - // Use reader agent - should see data from writer - const readResponse = await httpRequest( - `${BASE_URL}/agent/state-reader`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'persistentData', - }), - }, - jar - ); - - const readResult = await readResponse.json(); - assertEqual(readResult.success, true); - assertEqual(readResult.value, testValue); // Data persists across agent switches - assert(readResult.allKeys.includes('testData'), 'Should have original agent data'); - assert(readResult.allKeys.includes('requestCount'), 'Should have request counter'); -}); - -// Test 12: Complex object persistence across agents -test('http-state-persistence', 'complex-object-persistence', async () => { - const jar = new CookieJar(); - const complexData = { - user: { id: 123, name: 'Alice', roles: ['admin', 'user'] }, - metadata: { createdAt: new Date().toISOString(), version: '1.0' }, - settings: { theme: 'dark', notifications: true }, - }; - - // Writer stores complex object - await httpRequest( - `${BASE_URL}/agent/state-writer`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'userProfile', - value: complexData, - }), - }, - jar - ); - - // Reader retrieves complex object - const readResponse = await httpRequest( - `${BASE_URL}/agent/state-reader`, - { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - key: 'userProfile', - }), - }, - jar - ); - - const readResult = await readResponse.json(); - assertEqual(readResult.success, true); - assertEqual(readResult.value.user.name, 'Alice'); - assertEqual(readResult.value.user.roles[0], 'admin'); - assertEqual(readResult.value.settings.theme, 'dark'); - assertEqual(readResult.value.metadata.version, '1.0'); -}); diff --git a/apps/testing/integration-suite/src/test/lifecycle-waituntil.ts b/apps/testing/integration-suite/src/test/lifecycle-waituntil.ts deleted file mode 100644 index 8ac91e14f..000000000 --- a/apps/testing/integration-suite/src/test/lifecycle-waituntil.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Lifecycle WaitUntil Tests - * - * Tests background task scheduling with ctx.waitUntil() - */ - -import { test } from './suite'; -import { assertEqual, assertDefined } from './helpers'; - -import waitUntilAgent from '@agents/lifecycle/waituntil'; - -// Test: Schedule basic background task -test('lifecycle', 'waituntil-basic', async () => { - const result = await waitUntilAgent.run({ - operation: 'schedule-task', - taskData: 'test-data', - }); - - assertEqual(result.success, true); - assertEqual(result.taskScheduled, true); - assertDefined(result.message); -}); - -// Test: Schedule multiple background tasks -test('lifecycle', 'waituntil-multiple', async () => { - const result = await waitUntilAgent.run({ - operation: 'schedule-multiple', - taskCount: 5, - }); - - assertEqual(result.success, true); - assertEqual(result.taskScheduled, true); - assertEqual(result.message, 'Scheduled 5 background tasks'); -}); - -// Test: Background task with error (should not fail main request) -test('lifecycle', 'waituntil-error-handling', async () => { - const result = await waitUntilAgent.run({ - operation: 'schedule-with-error', - shouldError: true, - }); - - // Main request should succeed even if background task errors - assertEqual(result.success, true); - assertEqual(result.taskScheduled, true); -}); - -// Test: Background task without error -test('lifecycle', 'waituntil-no-error', async () => { - const result = await waitUntilAgent.run({ - operation: 'schedule-with-error', - shouldError: false, - }); - - assertEqual(result.success, true); - assertEqual(result.taskScheduled, true); -}); - -// Test: Schedule promise-based task -test('lifecycle', 'waituntil-promise', async () => { - const result = await waitUntilAgent.run({ - operation: 'schedule-promise', - }); - - assertEqual(result.success, true); - assertEqual(result.taskScheduled, true); -}); - -// Test: Schedule synchronous function -test('lifecycle', 'waituntil-sync', async () => { - const result = await waitUntilAgent.run({ - operation: 'schedule-sync-function', - }); - - assertEqual(result.success, true); - assertEqual(result.taskScheduled, true); -}); diff --git a/apps/testing/integration-suite/src/test/middleware-patterns.ts b/apps/testing/integration-suite/src/test/middleware-patterns.ts deleted file mode 100644 index 24bfda238..000000000 --- a/apps/testing/integration-suite/src/test/middleware-patterns.ts +++ /dev/null @@ -1,182 +0,0 @@ -/** - * Middleware Patterns Test Suite - * - * Tests that validate custom middleware works correctly when added in: - * 1. app.ts (global middleware) - * 2. src/api/index.ts (API-level middleware) - * - * This addresses GitHub Issue #250 and validates the pattern is correct. - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined } from '@test/helpers'; -import { resetRequestCount } from '../lib/custom-middleware'; - -// Test: App-level middleware is available in routes -test('middleware-patterns', 'app-level-middleware-available', async () => { - // Reset request count for clean test - resetRequestCount(); - - const response = await fetch('http://localhost:3500/api/middleware-test/check-all'); - const data = await response.json(); - - assertEqual(response.status, 200); - assertEqual(data.success, true); - - // Verify app.ts middleware - assertEqual(data.appMiddleware.hasAuth, true); - assertDefined(data.appMiddleware.authUser); - assertEqual(data.appMiddleware.authUser.id, 'user-123'); - assertEqual(data.appMiddleware.authUser.email, 'test@example.com'); - assertEqual(data.appMiddleware.authUser.role, 'admin'); - assertEqual(data.appMiddleware.appLevelData, 'set-in-app-ts'); - assertDefined(data.appMiddleware.requestId); - assert(data.appMiddleware.requestCount > 0, 'Request count should be greater than 0'); -}); - -// Test: API-level middleware (from index.ts) is available in routes -test('middleware-patterns', 'api-level-middleware-available', async () => { - const response = await fetch('http://localhost:3500/api/middleware-test/check-all'); - const data = await response.json(); - - assertEqual(response.status, 200); - assertEqual(data.success, true); - - // Verify api/index.ts middleware - assertEqual(data.apiMiddleware.hasClickhouse, true); - assertEqual(data.apiMiddleware.hasPostgres, true); - assertEqual(data.apiMiddleware.apiLevelData, 'set-in-api-index-ts'); -}); - -// Test: Both app.ts and api/index.ts middleware work together -test('middleware-patterns', 'both-middleware-layers-work', async () => { - const response = await fetch('http://localhost:3500/api/middleware-test/check-all'); - const data = await response.json(); - - assertEqual(response.status, 200); - - // Both layers should be present - assertEqual(data.appMiddleware.hasAuth, true); - assertEqual(data.apiMiddleware.hasClickhouse, true); - assertEqual(data.apiMiddleware.hasPostgres, true); - - // Custom data from both layers - assertEqual(data.appMiddleware.appLevelData, 'set-in-app-ts'); - assertEqual(data.apiMiddleware.apiLevelData, 'set-in-api-index-ts'); -}); - -// Test: Database clients from middleware are functional -test('middleware-patterns', 'database-clients-functional', async () => { - const response = await fetch('http://localhost:3500/api/middleware-test/query-database'); - const data = await response.json(); - - assertEqual(response.status, 200); - assertEqual(data.success, true); - - // Check ClickHouse client - assertEqual(data.clickhouse.connected, true); - assertDefined(data.clickhouse.result); - assertEqual(data.clickhouse.result.rows.length, 1); - assertEqual(data.clickhouse.result.rows[0].source, 'clickhouse'); - - // Check Postgres client - assertEqual(data.postgres.connected, true); - assertDefined(data.postgres.result); - assertEqual(data.postgres.result.rows.length, 1); - assertEqual(data.postgres.result.rows[0].source, 'postgres'); -}); - -// Test: Auth middleware provides user info -test('middleware-patterns', 'auth-middleware-provides-user', async () => { - const response = await fetch('http://localhost:3500/api/middleware-test/check-auth'); - const data = await response.json(); - - assertEqual(response.status, 200); - assertEqual(data.authenticated, true); - assertDefined(data.user); - assertEqual(data.user.id, 'user-123'); - assertEqual(data.user.email, 'test@example.com'); - assertEqual(data.user.role, 'admin'); -}); - -// Test: Analytics middleware tracks requests -test('middleware-patterns', 'analytics-middleware-tracks-requests', async () => { - resetRequestCount(); - - // Make first request - const response1 = await fetch('http://localhost:3500/api/middleware-test/analytics-info'); - const data1 = await response1.json(); - - assertEqual(response1.status, 200); - assertDefined(data1.requestId); - assert(data1.requestId.startsWith('req-'), 'Request ID should start with req-'); - const count1 = data1.requestCount; - - // Make second request - const response2 = await fetch('http://localhost:3500/api/middleware-test/analytics-info'); - const data2 = await response2.json(); - - assertEqual(response2.status, 200); - const count2 = data2.requestCount; - - // Second request should have higher count - assert(count2 > count1, `Request count should increase (${count1} -> ${count2})`); -}); - -// Test: Middleware applies to all /api/* routes (not just specific ones) -test('middleware-patterns', 'middleware-applies-to-all-api-routes', async () => { - // Test on the health endpoint (different route) - const response = await fetch('http://localhost:3500/api/health'); - const data = await response.json(); - - assertEqual(response.status, 200); - - // Analytics middleware should have run (creates requestId) - // We can't check c.get() from outside, but we know it ran if response succeeded - // and we got a valid JSON response - assertEqual(data.status, 'ok'); - assertDefined(data.timestamp); -}); - -// Test: Routes mounted separately still get middleware -test('middleware-patterns', 'separate-route-files-get-middleware', async () => { - /** - * This is the key test for Issue #250 - * Routes in separate files (like /api/middleware-test/route.ts) - * should still get middleware from api/index.ts - */ - - const response = await fetch('http://localhost:3500/api/middleware-test/check-all'); - const data = await response.json(); - - assertEqual(response.status, 200); - - // This route is in a separate file, but should still have: - // 1. App-level middleware (from app.ts) - assertEqual(data.appMiddleware.hasAuth, true); - - // 2. API-level middleware (from api/index.ts) - assertEqual(data.apiMiddleware.hasClickhouse, true); - assertEqual(data.apiMiddleware.hasPostgres, true); - - // This proves the architecture works correctly -}); - -// Test: Middleware order is correct (app.ts runs before api/index.ts middleware) -test('middleware-patterns', 'middleware-execution-order', async () => { - /** - * Middleware should execute in order: - * 1. App-level middleware (app.ts) - * 2. API-level middleware (api/index.ts) - * 3. Route handler - */ - - const response = await fetch('http://localhost:3500/api/middleware-test/check-all'); - const data = await response.json(); - - assertEqual(response.status, 200); - - // Both should be present, proving order doesn't break anything - assertDefined(data.appMiddleware.authUser); - assertDefined(data.apiMiddleware.apiLevelData); -}); diff --git a/apps/testing/integration-suite/src/test/resilience.ts b/apps/testing/integration-suite/src/test/resilience.ts deleted file mode 100644 index 0e8d441c4..000000000 --- a/apps/testing/integration-suite/src/test/resilience.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Server Resilience Tests - * - * Tests that various error scenarios do NOT crash the server. - * Each test attempts to cause a crash in different ways and verifies - * the server handles it gracefully. - */ - -import { test } from '@test/suite'; -import { assert, assertEqual } from '@test/helpers'; -import crashAttemptsAgent from '@agents/resilience/crash-attempts'; - -// Test: Synchronous throw in handler -test('resilience', 'sync-throw-caught', async () => { - try { - await crashAttemptsAgent.run({ scenario: 'sync-throw' }); - throw new Error('Should have thrown'); - } catch (err: any) { - // Should catch the error, not crash - assert(err.message.includes('Intentional synchronous throw'), 'Should catch sync throw'); - } -}); - -// Test: Async throw in handler -test('resilience', 'async-throw-caught', async () => { - try { - await crashAttemptsAgent.run({ scenario: 'async-throw' }); - throw new Error('Should have thrown'); - } catch (err: any) { - assert(err.message.includes('Intentional async throw'), 'Should catch async throw'); - } -}); - -// Test: Background task throws -test('resilience', 'waituntil-throw-survives', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'waituntil-throw' }); - assertEqual(result.survived, true); - assert(result.message.includes('Background task'), 'Background task was scheduled'); -}); - -// Test: Sync background task throws -test('resilience', 'waituntil-sync-throw-survives', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'waituntil-sync-throw' }); - assertEqual(result.survived, true); - assert(result.message.includes('Sync background'), 'Sync background task was scheduled'); -}); - -// Test: Unhandled promise rejection (skipped - would crash server as expected) -test('resilience', 'unhandled-promise-note', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'unhandled-promise' }); - assertEqual(result.survived, true); - assert(result.message.includes('Skipped'), 'Test documents expected behavior'); -}); - -// Test: Nested errors -test('resilience', 'nested-error-caught', async () => { - try { - await crashAttemptsAgent.run({ scenario: 'nested-error' }); - throw new Error('Should have thrown'); - } catch (err: any) { - assert(err.message.includes('Outer error'), 'Should catch nested error'); - } -}); - -// Test: Stack overflow protection -test('resilience', 'stack-overflow-caught', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'stack-overflow' }); - assertEqual(result.survived, true); - assert(result.message.includes('Caught recursion'), 'Recursion was caught'); -}); - -// Test: Null dereference -test('resilience', 'null-deref-caught', async () => { - try { - await crashAttemptsAgent.run({ scenario: 'null-deref' }); - throw new Error('Should have thrown'); - } catch (err: any) { - assert(err.message.includes('null'), 'Should catch null dereference'); - } -}); - -// Test: Type error -test('resilience', 'type-error-caught', async () => { - try { - await crashAttemptsAgent.run({ scenario: 'type-error' }); - throw new Error('Should have thrown'); - } catch (err: any) { - assert( - err.message.includes('not a function') || err.message.includes('toFixed'), - 'Should catch type error' - ); - } -}); - -// Test: Multiple background tasks all throwing -test('resilience', 'multiple-waituntil-throws-survives', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'multiple-waituntil-throws' }); - assertEqual(result.survived, true); - assert(result.message.includes('5 background tasks'), 'Multiple background tasks scheduled'); -}); - -// Test: Event listener throws -test('resilience', 'event-listener-throw-survives', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'event-listener-throw' }); - assertEqual(result.survived, true); - assert(result.message.toLowerCase().includes('event listener'), 'Event listener was registered'); -}); - -// Test: process.exit is blocked -test('resilience', 'process-exit-blocked', async () => { - const result = await crashAttemptsAgent.run({ scenario: 'process-exit-attempt' }); - assertEqual(result.survived, true); - assert(result.message.includes('blocked'), 'process.exit was blocked'); -}); diff --git a/apps/testing/integration-suite/src/test/routing-agents.ts b/apps/testing/integration-suite/src/test/routing-agents.ts deleted file mode 100644 index 6dada0832..000000000 --- a/apps/testing/integration-suite/src/test/routing-agents.ts +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Routing & HTTP Tests - * - * Tests HTTP routing, methods, query params, headers, and request handling - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined } from './helpers'; - -// Import agents -import getAgent from '@agents/routing/routing-get'; -import postAgent from '@agents/routing/routing-post'; -import methodsAgent from '@agents/routing/routing-methods'; -import headersAgent from '@agents/routing/routing-headers'; -import paramsAgent from '@agents/routing/routing-params'; - -// Helper to call agents -async function callAgent(agent: any, input?: any) { - // Use agent.run() which provides full context automatically - return agent.run(input); -} - -// Test: GET agent with query parameters -test('routing', 'get-with-query-params', async () => { - const result = await callAgent(getAgent, { query: 'test search', limit: 20 }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.query, 'test search'); - assertEqual(result.limit, 20); - assert(typeof result.timestamp === 'number', 'Timestamp should be a number'); -}); - -// Test: GET agent with default limit -test('routing', 'get-default-params', async () => { - const result = await callAgent(getAgent, { query: 'test' }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.query, 'test'); - assertEqual(result.limit, 10, 'Should use default limit of 10'); -}); - -// Test: POST agent with JSON body -test('routing', 'post-json-body', async () => { - const result = await callAgent(postAgent, { - title: 'Test Post', - content: 'This is a test post', - tags: ['test', 'example'], - }); - - assertDefined(result, 'Result should be defined'); - assert(result.id.startsWith('post-'), 'ID should have post- prefix'); - assertEqual(result.title, 'Test Post'); - assertEqual(result.content, 'This is a test post'); - assertEqual(result.tags.length, 2); - assertEqual(result.tags[0], 'test'); - assertEqual(result.tags[1], 'example'); -}); - -// Test: POST agent with optional fields -test('routing', 'post-optional-fields', async () => { - const result = await callAgent(postAgent, { - title: 'Minimal Post', - content: 'Just the basics', - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.tags.length, 0, 'Tags should be empty array when not provided'); -}); - -// Test: Multiple HTTP methods -test('routing', 'multiple-methods', async () => { - const result = await callAgent(methodsAgent, { - action: 'create', - data: 'test data', - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.action, 'create'); - assertEqual(result.method, 'POST'); - assert(result.result.includes('test data'), 'Result should include data'); -}); - -// Test: Custom headers via context -test('routing', 'custom-headers', async () => { - const result = await callAgent(headersAgent, { - message: 'Hello with headers', - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.message, 'Hello with headers'); - assertDefined(result.sessionId, 'Should have session ID from context'); - assert(typeof result.sessionId === 'string', 'Session ID should be a string'); - assert(result.sessionId.length > 0, 'Session ID should not be empty'); - assert(typeof result.timestamp === 'number', 'Timestamp should be a number'); -}); - -// Test: Route parameters -test('routing', 'route-params', async () => { - const result = await callAgent(paramsAgent, { - id: 'user-123', - action: 'edit', - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.id, 'user-123'); - assertEqual(result.action, 'edit'); - assertEqual(result.found, true); -}); - -// Test: Route params with defaults -test('routing', 'route-params-defaults', async () => { - const result = await callAgent(paramsAgent, { - id: 'user-456', - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.id, 'user-456'); - assertEqual(result.action, 'view', 'Should use default action'); -}); - -// Test: Content-Type handling (via agent metadata) -test('routing', 'content-type-json', async () => { - // All our agents return JSON by default - const result = await callAgent(postAgent, { - title: 'JSON Test', - content: 'Testing JSON content type', - }); - - assertDefined(result, 'Result should be defined'); - assert(typeof result === 'object', 'Result should be an object (JSON)'); -}); - -// Test: Response status codes (implicit via agent success) -test('routing', 'successful-response', async () => { - // All successful agent calls should implicitly return 200 - const result = await callAgent(getAgent, { query: 'success test' }); - - assertDefined(result, 'Successful agent should return result'); -}); - -// Test: Concurrent routing requests -test('routing', 'concurrent-requests', async () => { - const requests = [ - callAgent(getAgent, { query: 'req1' }), - callAgent(getAgent, { query: 'req2' }), - callAgent(postAgent, { title: 'Post 1', content: 'Content 1' }), - callAgent(postAgent, { title: 'Post 2', content: 'Content 2' }), - ]; - - const results = await Promise.all(requests); - - assertEqual(results.length, 4, 'All requests should complete'); - assertEqual(results[0].query, 'req1'); - assertEqual(results[1].query, 'req2'); - assertEqual(results[2].title, 'Post 1'); - assertEqual(results[3].title, 'Post 2'); -}); - -// Test: Query parameter type coercion -test('routing', 'query-param-types', async () => { - // Numbers should be properly typed - const result = await callAgent(getAgent, { query: 'test', limit: 25 }); - - assert(typeof result.limit === 'number', 'Limit should be a number'); - assertEqual(result.limit, 25); -}); diff --git a/apps/testing/integration-suite/src/test/routing-subdirs.ts b/apps/testing/integration-suite/src/test/routing-subdirs.ts deleted file mode 100644 index 5eed8a9ad..000000000 --- a/apps/testing/integration-suite/src/test/routing-subdirs.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Subdirectory API Route Tests - * - * Tests that subdirectory routes are properly discovered, mounted, - * and accessible at their expected paths with TypeScript support. - */ - -import { test } from '@test/suite'; -import { assertEqual, assertDefined, assert } from '@test/helpers'; - -// Test: Subdirectory route mounted at /api/auth -test('routing-subdirs', 'auth-login', async () => { - const response = await fetch('http://localhost:3500/api/auth/login', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username: 'testuser', password: 'testpass' }), - }); - - assertEqual(response.status, 200); - - const data = (await response.json()) as { token: string; expiresAt: number }; - assertDefined(data.token); - assert(data.token.startsWith('token-'), 'Token should start with "token-"'); - assert(data.expiresAt > Date.now(), 'ExpiresAt should be in the future'); -}); - -// Test: Subdirectory route logout endpoint -test('routing-subdirs', 'auth-logout', async () => { - const response = await fetch('http://localhost:3500/api/auth/logout', { - method: 'POST', - }); - - assertEqual(response.status, 200); - - const data = (await response.json()) as { success: boolean }; - assertEqual(data.success, true); -}); - -// Test: Subdirectory route verify endpoint -test('routing-subdirs', 'auth-verify', async () => { - const response = await fetch('http://localhost:3500/api/auth/verify', { - headers: { Authorization: 'Bearer test-token' }, - }); - - assertEqual(response.status, 200); - - const data = (await response.json()) as { valid: boolean }; - assertEqual(data.valid, true); -}); - -// Test: Nested subdirectory route at /api/users/profile -test('routing-subdirs', 'nested-profile-get', async () => { - const response = await fetch('http://localhost:3500/api/users/profile'); - - assertEqual(response.status, 200); - - const data = (await response.json()) as { - id: string; - username: string; - email: string; - createdAt: number; - }; - - assertDefined(data.id); - assertEqual(data.username, 'testuser'); - assertEqual(data.email, 'test@example.com'); - assert(data.createdAt > 0, 'CreatedAt should be a valid timestamp'); -}); - -// Test: Nested subdirectory PATCH endpoint -test('routing-subdirs', 'nested-profile-patch', async () => { - const response = await fetch('http://localhost:3500/api/users/profile', { - method: 'PATCH', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username: 'updateduser', email: 'updated@example.com' }), - }); - - assertEqual(response.status, 200); - - const data = (await response.json()) as { - id: string; - username: string; - email: string; - }; - - assertEqual(data.username, 'updateduser'); - assertEqual(data.email, 'updated@example.com'); -}); - -// Test: Nested subdirectory DELETE endpoint -test('routing-subdirs', 'nested-profile-delete', async () => { - const response = await fetch('http://localhost:3500/api/users/profile', { - method: 'DELETE', - }); - - assertEqual(response.status, 200); - - const data = (await response.json()) as { deleted: boolean }; - assertEqual(data.deleted, true); -}); - -// Test: TypeScript interfaces work in route files -test('routing-subdirs', 'typescript-interfaces', async () => { - // This test validates that routes with TypeScript interfaces compile and run - // The auth/route.ts and users/profile/route.ts both use interfaces extensively - - const authResponse = await fetch('http://localhost:3500/api/auth/login', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username: 'typetest', password: 'pass' }), - }); - - assertEqual(authResponse.status, 200); - - const profileResponse = await fetch('http://localhost:3500/api/users/profile'); - assertEqual(profileResponse.status, 200); - - // If we got here, TypeScript compilation and runtime worked correctly - assert(true, 'Routes with TypeScript interfaces executed successfully'); -}); - -// Test: Different HTTP methods on same path -test('routing-subdirs', 'multiple-methods-same-path', async () => { - // GET /api/users/profile - const getResponse = await fetch('http://localhost:3500/api/users/profile'); - assertEqual(getResponse.status, 200); - - // PATCH /api/users/profile - const patchResponse = await fetch('http://localhost:3500/api/users/profile', { - method: 'PATCH', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username: 'patchtest' }), - }); - assertEqual(patchResponse.status, 200); - - // DELETE /api/users/profile - const deleteResponse = await fetch('http://localhost:3500/api/users/profile', { - method: 'DELETE', - }); - assertEqual(deleteResponse.status, 200); - - // All methods should coexist on same path - assert(true, 'Multiple HTTP methods work on same route path'); -}); diff --git a/apps/testing/integration-suite/src/test/sandbox-basic.ts b/apps/testing/integration-suite/src/test/sandbox-basic.ts deleted file mode 100644 index ff8ea7020..000000000 --- a/apps/testing/integration-suite/src/test/sandbox-basic.ts +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Sandbox Service Tests - * - * Single test that exercises the full sandbox lifecycle sequentially. - * Tests run concurrently in batches so shared module state is unreliable. - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined, assertTruthy } from './helpers'; - -import sandboxAgent from '@agents/sandbox/basic'; - -type AgentResult = Awaited>; - -/** - * Assert agent call succeeded. On failure, throws an error with structured - * diagnostic fields (statusCode, method, url, sessionId) so the test suite's - * extractDiagnostics can surface them in CI output. - */ -function assertSuccess(result: AgentResult, label: string): void { - if (result.success) return; - const err = new Error(`Assertion failed: ${label}: ${result.error}`); - const diagnostics: Record = {}; - if (result.statusCode != null) diagnostics.statusCode = result.statusCode; - if (result.errorMethod) diagnostics.method = result.errorMethod; - if (result.errorUrl) diagnostics.url = result.errorUrl; - if (result.sessionId) diagnostics.sessionId = result.sessionId; - if (result.errorTag) diagnostics.errorType = result.errorTag; - Object.assign(err, diagnostics); - throw err; -} - -test('sandbox', 'lifecycle', async () => { - // Create - const create = await sandboxAgent.run({ operation: 'create' }); - assertSuccess(create, 'Create'); - assertDefined(create.sandboxId, 'Sandbox ID should be defined'); - const id = create.sandboxId!; - - // Get info - const get = await sandboxAgent.run({ operation: 'get', sandboxId: id }); - assertSuccess(get, 'Get'); - assertEqual(get.info!.sandboxId, id); - - // Connect - const conn = await sandboxAgent.run({ operation: 'connect', sandboxId: id }); - assertSuccess(conn, 'Connect'); - assertEqual(conn.sandboxId, id); - - // Execute - const exec = await sandboxAgent.run({ - operation: 'execute', - sandboxId: id, - command: ['echo', 'hello'], - }); - assertSuccess(exec, 'Execute'); - assertEqual(exec.exitCode, 0, `Exit code: ${exec.exitCode}`); - - // Write + read file - const write = await sandboxAgent.run({ - operation: 'write-file', - sandboxId: id, - filePath: 'test.txt', - fileContent: 'hello', - }); - assertSuccess(write, 'WriteFile'); - - const read = await sandboxAgent.run({ - operation: 'read-file', - sandboxId: id, - filePath: 'test.txt', - }); - assertSuccess(read, 'ReadFile'); - assertEqual(read.fileContent, 'hello', `Content: ${read.fileContent}`); - - // List files - const list = await sandboxAgent.run({ operation: 'list-files', sandboxId: id }); - assertSuccess(list, 'ListFiles'); - assert(list.files!.length > 0, 'Should have files'); - - // Mkdir - const mkdir = await sandboxAgent.run({ - operation: 'mkdir', - sandboxId: id, - dirPath: 'sub/nested', - recursive: true, - }); - assertSuccess(mkdir, 'Mkdir'); - - // Set env + verify in execution - const env = await sandboxAgent.run({ - operation: 'set-env', - sandboxId: id, - env: { MY_VAR: 'val' }, - }); - assertSuccess(env, 'SetEnv'); - assertEqual(env.env!.MY_VAR, 'val'); - - const printenv = await sandboxAgent.run({ - operation: 'execute', - sandboxId: id, - command: ['printenv', 'MY_VAR'], - }); - assertSuccess(printenv, 'Printenv'); - assertEqual(printenv.exitCode, 0, `Printenv exit: ${printenv.exitCode}`); - - // Remove file + dir - const rmf = await sandboxAgent.run({ - operation: 'rmfile', - sandboxId: id, - filePath: 'test.txt', - }); - assertSuccess(rmf, 'Rmfile'); - - const rmd = await sandboxAgent.run({ - operation: 'rmdir', - sandboxId: id, - dirPath: 'sub', - recursive: true, - }); - assertSuccess(rmd, 'Rmdir'); - - // Pause + resume - const pause = await sandboxAgent.run({ operation: 'pause', sandboxId: id }); - assertSuccess(pause, 'Pause'); - - const afterPause = await sandboxAgent.run({ operation: 'get', sandboxId: id }); - assertSuccess(afterPause, 'GetAfterPause'); - assertTruthy( - afterPause.info?.status === 'paused' || afterPause.info?.status === 'suspended', - `Should be paused, got: ${afterPause.info?.status}` - ); - - const resume = await sandboxAgent.run({ operation: 'resume', sandboxId: id }); - assertSuccess(resume, 'Resume'); - - // Run (one-shot, independent sandbox) - const run = await sandboxAgent.run({ operation: 'run', command: ['echo', 'oneshot'] }); - assertSuccess(run, 'Run'); - assertEqual(run.exitCode, 0, `Run exit: ${run.exitCode}`); - - // Destroy - const destroy = await sandboxAgent.run({ operation: 'destroy', sandboxId: id }); - assertSuccess(destroy, 'Destroy'); -}); diff --git a/apps/testing/integration-suite/src/test/schema-validation.ts b/apps/testing/integration-suite/src/test/schema-validation.ts deleted file mode 100644 index abfdf56f4..000000000 --- a/apps/testing/integration-suite/src/test/schema-validation.ts +++ /dev/null @@ -1,211 +0,0 @@ -/** - * Schema Validation Tests - * - * Tests various schema patterns: types, optional fields, defaults, nested objects, unions, arrays - */ - -import { test } from './suite'; -import { assertEqual, assertDefined, assertThrows } from './helpers'; - -import schemaTypesAgent from '@agents/schema/types'; -import schemaOptionalAgent from '@agents/schema/optional'; -import schemaComplexAgent from '@agents/schema/complex'; - -// Test: Basic types validation -test('schema', 'basic-types', async () => { - const result = await schemaTypesAgent.run({ - stringValue: 'hello', - numberValue: 123, - booleanValue: true, - arrayValue: ['a', 'b', 'c'], - objectValue: { nested: 'value' }, - }); - - assertEqual(result.success, true); - assertEqual(result.receivedTypes.string, 'string'); - assertEqual(result.receivedTypes.number, 'number'); - assertEqual(result.receivedTypes.boolean, 'boolean'); - assertEqual(result.receivedTypes.array, 'array'); - assertEqual(result.receivedTypes.object, 'object'); -}); - -// Test: String type validation -test('schema', 'string-type', async () => { - const result = await schemaTypesAgent.run({ - stringValue: 'test string', - numberValue: 0, - booleanValue: false, - arrayValue: [], - objectValue: { nested: '' }, - }); - - assertEqual(result.receivedTypes.string, 'string'); -}); - -// Test: Number type validation -test('schema', 'number-type', async () => { - const result = await schemaTypesAgent.run({ - stringValue: '', - numberValue: 999.99, - booleanValue: true, - arrayValue: [], - objectValue: { nested: '' }, - }); - - assertEqual(result.receivedTypes.number, 'number'); -}); - -// Test: Array type validation -test('schema', 'array-type', async () => { - const result = await schemaTypesAgent.run({ - stringValue: '', - numberValue: 0, - booleanValue: false, - arrayValue: ['one', 'two', 'three'], - objectValue: { nested: '' }, - }); - - assertEqual(result.receivedTypes.array, 'array'); -}); - -// Test: Optional field omitted -test('schema', 'optional-omitted', async () => { - const result = await schemaOptionalAgent.run({ - required: 'present', - }); - - assertEqual(result.success, true); - assertEqual(result.received.required, 'present'); - assertEqual(result.received.optional, undefined); - assertEqual(result.received.withDefault, 42, 'Should use default value'); -}); - -// Test: Optional field provided -test('schema', 'optional-provided', async () => { - const result = await schemaOptionalAgent.run({ - required: 'present', - optional: 'also present', - withDefault: 100, - }); - - assertEqual(result.success, true); - assertEqual(result.received.optional, 'also present'); - assertEqual(result.received.withDefault, 100); -}); - -// Test: Nested object schema -test('schema', 'nested-object', async () => { - const result = await schemaComplexAgent.run({ - operation: 'nested-object', - nested: { - level1: { - level2: { - value: 'deeply nested', - }, - }, - }, - }); - - assertEqual(result.success, true); - assertEqual(result.result, 'deeply nested'); -}); - -// Test: Union type with string -test('schema', 'union-string', async () => { - const result = await schemaComplexAgent.run({ - operation: 'union-string', - union: 'string value', - }); - - assertEqual(result.success, true); - assertEqual(result.result.value, 'string value'); - assertEqual(result.result.type, 'string'); -}); - -// Test: Union type with number -test('schema', 'union-number', async () => { - const result = await schemaComplexAgent.run({ - operation: 'union-number', - union: 456, - }); - - assertEqual(result.success, true); - assertEqual(result.result.value, 456); - assertEqual(result.result.type, 'number'); -}); - -// Test: Array of objects -test('schema', 'array-of-objects', async () => { - const result = await schemaComplexAgent.run({ - operation: 'array-of-objects', - arrayOfObjects: [ - { id: 'item-1', count: 10 }, - { id: 'item-2', count: 20 }, - { id: 'item-3', count: 30 }, - ], - }); - - assertEqual(result.success, true); - assertEqual(result.result.count, 3); - assertDefined(result.result.items); -}); - -// Test: Empty array -test('schema', 'empty-array', async () => { - const result = await schemaComplexAgent.run({ - operation: 'array-of-objects', - arrayOfObjects: [], - }); - - assertEqual(result.success, true); - assertEqual(result.result.count, 0); -}); - -// Test: Record type -test('schema', 'record-type', async () => { - const result = await schemaComplexAgent.run({ - operation: 'record-type', - record: { - key1: 'value1', - key2: 123, - key3: true, - }, - }); - - assertEqual(result.success, true); - assertDefined(result.result); - assertEqual(result.result.key1, 'value1'); -}); - -// Test: Empty record -test('schema', 'empty-record', async () => { - const result = await schemaComplexAgent.run({ - operation: 'record-type', - record: {}, - }); - - assertEqual(result.success, true); - assertDefined(result.result); -}); - -// Test: Missing required nested field throws -test('schema', 'missing-nested-required', async () => { - await assertThrows(async () => { - await schemaComplexAgent.run({ - operation: 'nested-object', - nested: { - level1: {} as any, - }, - }); - }, 'Should throw for missing nested required field'); -}); - -// Test: Invalid array item type throws -test('schema', 'invalid-array-item', async () => { - await assertThrows(async () => { - await schemaComplexAgent.run({ - operation: 'array-of-objects', - arrayOfObjects: [{ id: 'valid', count: 10 }, { id: 'invalid' } as any], - }); - }, 'Should throw for invalid array item'); -}); diff --git a/apps/testing/integration-suite/src/test/session-agent-ids.ts b/apps/testing/integration-suite/src/test/session-agent-ids.ts deleted file mode 100644 index 573ad9085..000000000 --- a/apps/testing/integration-suite/src/test/session-agent-ids.ts +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Session Agent IDs Tests - * - * Tests that agent IDs are correctly captured and included in session events. - * This validates the fix for the empty agent_ids array issue. - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined, sleep } from './helpers'; -import { testSessionEventProvider } from './helpers/session-event-provider'; - -import agentIdTestAgent from '@agents/session/agent-id-test'; - -// Test: Agent execution captures agent ID in session event -test('session-agent-ids', 'agent-run-captures-id', async () => { - // Clear previous events for isolation - testSessionEventProvider.clear(); - - // Run the agent - const result = await agentIdTestAgent.run({ message: 'test-capture' }); - - assertEqual(result.success, true, 'Agent should succeed'); - assertEqual(result.agentName, 'agent-id-test', 'Agent name should match'); - - // The agentIds may or may not be populated depending on metadata availability - // In dev mode without metadata file, they will be empty - // In production with metadata, they should be populated - // The key thing is the infrastructure is working - the session event was captured -}); - -// Test: Session event provider captures events -test('session-agent-ids', 'session-events-captured', async () => { - // Clear previous events - testSessionEventProvider.clear(); - - // Run agent - await agentIdTestAgent.run({ message: 'event-capture-test' }); - - // Wait a brief moment for events to be processed - await sleep(50); - - // Check that events were captured - const eventCount = testSessionEventProvider.getEventCount(); - - // We should have at least some events (start and/or complete) - // The exact count depends on whether session events are sent in this context - assert(eventCount >= 0, 'Event count should be non-negative'); -}); - -// Test: Multiple agent calls in same context share session -test('session-agent-ids', 'multiple-agents-same-session', async () => { - testSessionEventProvider.clear(); - - // Run multiple agents - const result1 = await agentIdTestAgent.run({ message: 'call-1' }); - const result2 = await agentIdTestAgent.run({ message: 'call-2' }); - - assertEqual(result1.success, true, 'First call should succeed'); - assertEqual(result2.success, true, 'Second call should succeed'); - - // Both calls should be in the same session context - // (agent.run() shares session context within the same test) -}); - -// Test: Agent metadata is accessible -test('session-agent-ids', 'agent-metadata-accessible', async () => { - // Verify we can access agent metadata - assertDefined(agentIdTestAgent.metadata, 'Agent should have metadata'); - assertEqual(agentIdTestAgent.metadata.name, 'agent-id-test', 'Agent name should match'); - - // The id and agentId fields may be empty in dev mode without metadata file - // but they should exist as properties - assert('id' in agentIdTestAgent.metadata, 'Metadata should have id field'); - assert('agentId' in agentIdTestAgent.metadata, 'Metadata should have agentId field'); -}); - -// Test: Session event provider tracks sessions -test('session-agent-ids', 'provider-tracks-sessions', async () => { - testSessionEventProvider.clear(); - - // Run agent - await agentIdTestAgent.run({ message: 'tracking-test' }); - - // The session list should exist (may be empty in some contexts) - const sessions = testSessionEventProvider.getAllSessions(); - assert(Array.isArray(sessions), 'Sessions should be an array'); -}); - -// Test: Agent IDs are captured in session complete event -// This test uses HTTP to ensure proper session lifecycle and avoid parallel test interference -test('session-agent-ids', 'agentIds-in-complete-event', async () => { - // Clear captured events first - await fetch('http://localhost:3500/api/agent-ids/clear', { method: 'DELETE' }); - - // Call the API endpoint which runs the agent in a proper HTTP context - const runResponse = await fetch('http://localhost:3500/api/agent-ids/run', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ message: 'capture-ids-http-test' }), - }); - - const runResult = (await runResponse.json()) as { - success: boolean; - sessionId: string; - }; - assertEqual(runResult.success, true, 'API call should succeed'); - assertDefined(runResult.sessionId, 'Should have session ID'); - - // Wait for session complete event to be processed - await sleep(100); - - // Verify the captured session via API - const verifyResponse = await fetch( - `http://localhost:3500/api/agent-ids/verify/${runResult.sessionId}` - ); - const verifyResult = (await verifyResponse.json()) as { - sessionId: string; - eventCount: number; - hasCompleteEvent: boolean; - agentIds: string[]; - agentIdsCount: number; - }; - - // Should have captured the session complete event - assertEqual(verifyResult.hasCompleteEvent, true, 'Should have complete event'); - assertEqual(verifyResult.sessionId, runResult.sessionId, 'Session IDs should match'); - - // agentIds MUST be defined and have exactly 2 entries - assert(Array.isArray(verifyResult.agentIds), 'agentIds must be an array'); - assertEqual( - verifyResult.agentIds.length, - 2, - `agentIds should have 2 entries (got ${verifyResult.agentIds.length}): ${JSON.stringify(verifyResult.agentIds)}` - ); - - // Each ID should be a non-empty string - for (const id of verifyResult.agentIds) { - assert(typeof id === 'string' && id.length > 0, 'Agent ID should be non-empty string'); - } -}); - -// Test: Clear functionality works -test('session-agent-ids', 'clear-events-works', async () => { - // Ensure there might be some events - await agentIdTestAgent.run({ message: 'before-clear' }); - - // Clear - testSessionEventProvider.clear(); - - // After clear, counts should be zero - const sessions = testSessionEventProvider.getAllSessions(); - const eventCount = testSessionEventProvider.getEventCount(); - - assertEqual(sessions.length, 0, 'Sessions should be empty after clear'); - assertEqual(eventCount, 0, 'Event count should be zero after clear'); -}); diff --git a/apps/testing/integration-suite/src/test/session-basic.ts b/apps/testing/integration-suite/src/test/session-basic.ts deleted file mode 100644 index cf1d6b535..000000000 --- a/apps/testing/integration-suite/src/test/session-basic.ts +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Session & Thread Tests - * - * Tests session ID generation, thread persistence, state management, and event listeners - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined } from './helpers'; - -import sessionBasicAgent from '@agents/session/session-basic'; -import sessionEventsAgent from '@agents/session/session-events'; - -// Test: Get session and thread IDs -test('session', 'get-ids', async () => { - const result = await sessionBasicAgent.run({ - operation: 'get-ids', - }); - - assertEqual(result.success, true); - assertDefined(result.sessionId, 'Session ID should be defined'); - assertDefined(result.threadId, 'Thread ID should be defined'); - assert(result.sessionId!.startsWith('sess_'), 'Session ID should start with sess_'); - assert(result.threadId!.startsWith('thrd_'), 'Thread ID should start with thrd_'); -}); - -// Test: Session IDs are consistent within same context -test('session', 'session-id-consistency', async () => { - const result1 = await sessionBasicAgent.run({ operation: 'get-ids' }); - const result2 = await sessionBasicAgent.run({ operation: 'get-ids' }); - - assertDefined(result1.sessionId); - assertDefined(result2.sessionId); - // agent.run() shares session context, so IDs will be the same - assertEqual( - result1.sessionId, - result2.sessionId, - 'Session IDs should be consistent in same test context' - ); -}); - -// Test: Session state set and get -test('session', 'session-state', async () => { - const setResult = await sessionBasicAgent.run({ - operation: 'session-state-set', - key: 'testKey', - value: 'testValue', - }); - - assertEqual(setResult.success, true); - assertEqual(setResult.stateSize, 1); - - const getResult = await sessionBasicAgent.run({ - operation: 'session-state-get', - key: 'testKey', - }); - - assertEqual(getResult.success, true); - // Session state persists within same test context (shared session) - assertEqual(getResult.value, 'testValue', 'Session state should persist in same context'); -}); - -// Test: Thread state set and get -test('session', 'thread-state-set', async () => { - const result = await sessionBasicAgent.run({ - operation: 'thread-state-set', - key: 'threadKey', - value: 'threadValue', - }); - - assertEqual(result.success, true); - assertDefined(result.stateSize); -}); - -// Test: Thread state get -test('session', 'thread-state-get', async () => { - const result = await sessionBasicAgent.run({ - operation: 'thread-state-get', - key: 'threadKey', - }); - - assertEqual(result.success, true); - // Thread state is also scoped, won't persist across different runs without cookies -}); - -// Test: Thread empty check -test('session', 'thread-empty', async () => { - const result = await sessionBasicAgent.run({ - operation: 'thread-empty', - }); - - assertEqual(result.success, true); - assertDefined(result.value); -}); - -// Test: Session completed event listener -test('session', 'session-completed-listener', async () => { - const result = await sessionEventsAgent.run({ - operation: 'session-completed-listener', - }); - - assertEqual(result.success, true); - assertDefined(result.message); -}); - -// Test: Thread destroyed event listener -test('session', 'thread-destroyed-listener', async () => { - const result = await sessionEventsAgent.run({ - operation: 'thread-destroyed-listener', - }); - - assertEqual(result.success, true); - assertDefined(result.message); -}); - -// Test: Concurrent calls share session context -test('session', 'concurrent-sessions', async () => { - const results = await Promise.all([ - sessionBasicAgent.run({ operation: 'get-ids' }), - sessionBasicAgent.run({ operation: 'get-ids' }), - sessionBasicAgent.run({ operation: 'get-ids' }), - ]); - - const sessionIds = results.map((r) => r.sessionId); - - // All calls in same test share the session context - const uniqueIds = new Set(sessionIds); - assertEqual(uniqueIds.size, 1, 'All calls should share same session in test context'); -}); - -// Test: Session state persistence within context -test('session', 'session-state-persistence', async () => { - // Set state in first call - await sessionBasicAgent.run({ - operation: 'session-state-set', - key: 'persistent', - value: 'value1', - }); - - // Get in second call (same session context) - const result = await sessionBasicAgent.run({ - operation: 'session-state-get', - key: 'persistent', - }); - - // Should find the value since it's the same session context - assertEqual(result.value, 'value1', 'Session state should persist in same context'); -}); - -// Test: Multiple state operations in sequence -test('session', 'multiple-state-ops', async () => { - const results = await Promise.all([ - sessionBasicAgent.run({ - operation: 'thread-state-set', - key: 'key1', - value: 'val1', - }), - sessionBasicAgent.run({ - operation: 'thread-state-set', - key: 'key2', - value: 'val2', - }), - sessionBasicAgent.run({ - operation: 'thread-state-set', - key: 'key3', - value: 'val3', - }), - ]); - - results.forEach((result, i) => { - assertEqual(result.success, true, `Operation ${i} should succeed`); - }); -}); diff --git a/apps/testing/integration-suite/src/test/sse.ts b/apps/testing/integration-suite/src/test/sse.ts deleted file mode 100644 index 1690ab645..000000000 --- a/apps/testing/integration-suite/src/test/sse.ts +++ /dev/null @@ -1,423 +0,0 @@ -/** - * SSE (Server-Sent Events) Tests - * - * Tests server-to-client event streaming via SSE. - * These tests use real SSE connections to the integration suite server. - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined } from '@test/helpers'; -import { createSSEClient } from '@test/helpers/sse-client'; - -// Test 1: Basic SSE connection and message reception -test('sse', 'basic-connection', async () => { - const client = createSSEClient('/api/sse/simple'); - - await client.connect(); - assert(client.isOpen(), 'SSE connection should be open'); - - // Receive the three messages - const msg1 = await client.receive(); - const msg2 = await client.receive(); - const msg3 = await client.receive(); - - assertEqual(msg1.data, 'Message 1'); - assertEqual(msg2.data, 'Message 2'); - assertEqual(msg3.data, 'Message 3'); - - client.close(); - assert(!client.isOpen(), 'SSE connection should be closed'); -}); - -// Test 2: Receive multiple messages at once -test('sse', 'receive-multiple-messages', async () => { - const client = createSSEClient('/api/sse/simple'); - - await client.connect(); - - // Wait for all 3 messages - const messages = await client.receiveMultiple(3); - - assertEqual(messages.length, 3); - assertEqual(messages[0]?.data, 'Message 1'); - assertEqual(messages[1]?.data, 'Message 2'); - assertEqual(messages[2]?.data, 'Message 3'); - - client.close(); -}); - -// Test 3: Named events -test('sse', 'named-events', async () => { - const client = createSSEClient('/api/sse/events'); - - // Setup event listeners - const startEvents: any[] = []; - const updateEvents: any[] = []; - const completeEvents: any[] = []; - - client.addEventListener('start', (data) => startEvents.push(data)); - client.addEventListener('update', (data) => updateEvents.push(data)); - client.addEventListener('complete', (data) => completeEvents.push(data)); - - await client.connect(); - - // Wait for events to arrive - await new Promise((resolve) => setTimeout(resolve, 100)); - - // Verify events were captured - assertEqual(startEvents.length, 1); - assertEqual(updateEvents.length, 1); - assertEqual(completeEvents.length, 1); - - assertDefined(startEvents[0].timestamp); - assertEqual(updateEvents[0].progress, 50); - assertEqual(completeEvents[0].status, 'done'); - - client.close(); -}); - -// Test 4: Receive specific event type -test('sse', 'receive-specific-event', async () => { - const client = createSSEClient('/api/sse/events'); - - client.addEventListener('start'); - client.addEventListener('update'); - client.addEventListener('complete'); - - await client.connect(); - - // Wait specifically for the 'complete' event - const completeMsg = await client.receiveEvent('complete'); - - assertEqual(completeMsg.event, 'complete'); - const data = JSON.parse(completeMsg.data); - assertEqual(data.status, 'done'); - - client.close(); -}); - -// Test 5: Counter with query parameters -test('sse', 'query-parameters', async () => { - const client = createSSEClient('/api/sse/counter', { count: '3', delay: '20' }); - - await client.connect(); - - // Receive 3 counter messages - const messages = await client.receiveMultiple(3); - - assertEqual(messages.length, 3); - - const data0 = JSON.parse(messages[0]?.data ?? '{}'); - const data1 = JSON.parse(messages[1]?.data ?? '{}'); - const data2 = JSON.parse(messages[2]?.data ?? '{}'); - - assertEqual(data0.count, 0); - assertEqual(data1.count, 1); - assertEqual(data2.count, 2); - - client.close(); -}); - -// Test 6: JSON data parsing -test('sse', 'json-data-parsing', async () => { - const client = createSSEClient('/api/sse/counter', { count: '2', delay: '10' }); - - await client.connect(); - - // Receive and parse JSON - const data1 = await client.receiveJSON(); - const data2 = await client.receiveJSON(); - - assertEqual(data1.count, 0); - assertDefined(data1.timestamp); - - assertEqual(data2.count, 1); - assertDefined(data2.timestamp); - - client.close(); -}); - -// Test 7: Long-lived connection -test('sse', 'long-lived-connection', async () => { - const client = createSSEClient('/api/sse/long-lived', { duration: '500', delay: '10' }); - - await client.connect(); - - // Connection should stay open and receive multiple messages - const messages: any[] = []; - const startTime = Date.now(); - - while (Date.now() - startTime < 600) { - try { - const msg = await client.receive(100); - messages.push(msg); - } catch { - // Timeout is ok - stream might have ended - break; - } - } - - // Should have received multiple messages over the duration - assert(messages.length >= 3, `Should receive at least 3 messages, got ${messages.length}`); - - // Filter out the 'done' event message - const dataMessages = messages.filter((m) => !m.event || m.event !== 'done'); - - // Check that messages were sent over time - const firstData = JSON.parse(dataMessages[0].data); - const lastData = JSON.parse(dataMessages[dataMessages.length - 1].data); - - assert(lastData.elapsed > firstData.elapsed, 'Messages should span time'); - - client.close(); -}); - -// Test 8: Connection persistence -test('sse', 'connection-persistence', async () => { - const client = createSSEClient('/api/sse/counter', { count: '5', delay: '100' }); - - await client.connect(); - - // Receive first message - const msg1 = await client.receive(); - assertDefined(msg1); - - // Wait 300ms - await new Promise((resolve) => setTimeout(resolve, 300)); - - // Connection should still be active - assert(client.isOpen(), 'Connection should still be open'); - - // Receive more messages - const msg2 = await client.receive(); - assertDefined(msg2); - - client.close(); -}); - -// Test 9: Event stream ordering -test('sse', 'event-ordering', async () => { - const client = createSSEClient('/api/sse/counter', { count: '10', delay: '5' }); - - await client.connect(); - - const messages = await client.receiveMultiple(10); - - // Verify messages are in order - for (let i = 0; i < 10; i++) { - const msg = messages[i]; - if (!msg) throw new Error(`Missing message at index ${i}`); - const data = JSON.parse(msg.data); - assertEqual(data.count, i, `Message ${i} should have count ${i}`); - } - - client.close(); -}); - -// Test 10: Pending messages retrieval -test('sse', 'pending-messages', async () => { - const client = createSSEClient('/api/sse/simple'); - - await client.connect(); - - // Wait for messages to arrive - await new Promise((resolve) => setTimeout(resolve, 100)); - - // Get all pending messages at once - const pending = client.getPendingMessages(); - - assertEqual(pending.length, 3); - assertEqual(pending[0]?.data, 'Message 1'); - assertEqual(pending[1]?.data, 'Message 2'); - assertEqual(pending[2]?.data, 'Message 3'); - - // Pending messages should be cleared - const morePending = client.getPendingMessages(); - assertEqual(morePending.length, 0); - - client.close(); -}); - -// Test 11: Client abort handling -test('sse', 'client-abort', async () => { - const client = createSSEClient('/api/sse/abort-test'); - - await client.connect(); - - // Receive a few messages - const msg1 = await client.receive(); - const msg2 = await client.receive(); - - assertDefined(msg1); - assertDefined(msg2); - - // Close the connection (abort from client side) - client.close(); - assert(!client.isOpen(), 'Connection should be closed'); - - // Server should detect abort and stop sending - // (We can't directly test server behavior, but connection closes cleanly) -}); - -// Test 12: Multiple sequential connections -test('sse', 'multiple-sequential-connections', async () => { - // First connection - const client1 = createSSEClient('/api/sse/simple'); - await client1.connect(); - const msg1 = await client1.receive(); - assertEqual(msg1.data, 'Message 1'); - client1.close(); - - // Second connection - const client2 = createSSEClient('/api/sse/simple'); - await client2.connect(); - const msg2 = await client2.receive(); - assertEqual(msg2.data, 'Message 1'); - client2.close(); - - // Third connection - const client3 = createSSEClient('/api/sse/simple'); - await client3.connect(); - const msg3 = await client3.receive(); - assertEqual(msg3.data, 'Message 1'); - client3.close(); -}); - -// Test 13: Async operations that consume ReadableStreams -// This tests the fix for https://github.com/agentuity/sdk/issues/471 -// AI SDK's generateText/generateObject use fetch() internally which creates -// a Response with a ReadableStream body that must be consumed. -test('sse', 'async-fetch-operations', async () => { - const client = createSSEClient('/api/sse/async-fetch'); - - // Setup event listeners - const fetchResults: string[] = []; - let completed = false; - - client.addEventListener('fetch-result', (data) => fetchResults.push(data)); - client.addEventListener('complete', () => { - completed = true; - }); - - await client.connect(); - - // Wait for events to arrive - await new Promise((resolve) => setTimeout(resolve, 200)); - - // Verify fetch results were received (this would fail before the fix) - assertEqual(fetchResults.length, 2, 'Should receive 2 fetch results'); - assertEqual(fetchResults[0], 'simulated-ai-response'); - assertEqual(fetchResults[1], 'simulated-ai-response'); - assert(completed, 'Should receive complete event'); - - client.close(); -}); - -// Test 14: Error handling in SSE handlers -// Verifies that errors in handlers don't crash the server -test('sse', 'error-handling-graceful', async () => { - // Test normal case (no error) - const client1 = createSSEClient('/api/sse/error-handling'); - - const events1: string[] = []; - client1.addEventListener('start', () => events1.push('start')); - client1.addEventListener('complete', () => events1.push('complete')); - - await client1.connect(); - await new Promise((resolve) => setTimeout(resolve, 100)); - - assertEqual(events1.length, 2, 'Should receive start and complete events'); - assertEqual(events1[0], 'start'); - assertEqual(events1[1], 'complete'); - - client1.close(); -}); - -// Test 15: Error handling - server doesn't crash on error -test('sse', 'error-handling-with-error', async () => { - // Test with error - server should not crash, should receive start event - const client = createSSEClient('/api/sse/error-handling', { error: 'true' }); - - const events: string[] = []; - client.addEventListener('start', () => events.push('start')); - client.addEventListener('complete', () => events.push('complete')); - - await client.connect(); - await new Promise((resolve) => setTimeout(resolve, 100)); - - // Should receive start event before error occurs - assert(events.includes('start'), 'Should receive start event before error'); - // Complete event should NOT be received because handler throws - assert(!events.includes('complete'), 'Should not receive complete event after error'); - - client.close(); -}); - -// Test 16: Real HTTP fetch calls inside SSE (simulates AI SDK pattern) -// This tests the fix for https://github.com/agentuity/sdk/issues/471 -// AI SDK's generateText/generateObject use fetch() internally. When running inside -// SSE handlers with OTEL instrumentation, this caused "ReadableStream has already been used" -// errors. The fix runs SSE handlers in ROOT_CONTEXT to bypass OTEL instrumentation. -test('sse', 'generate-text-pattern', async () => { - const client = createSSEClient('/api/sse/generate-text'); - - const results: any[] = []; - let completed = false; - let completedMessage = ''; - let completeResolver: (() => void) | null = null; - const completePromise = new Promise((resolve) => { - completeResolver = resolve; - }); - - client.addEventListener('start', () => {}); - client.addEventListener('result', (data) => results.push(data)); - client.addEventListener('error', (data) => results.push({ error: data })); - client.addEventListener('complete', (data) => { - completed = true; - completedMessage = data; - completeResolver?.(); - }); - - await client.connect(); - - // Wait for complete event with a generous timeout for CI (httpbin can be slow) - // Use Promise.race to either get the complete event or timeout after 60 seconds - const timeoutPromise = new Promise<'timeout'>((resolve) => - setTimeout(() => resolve('timeout'), 60000) - ); - const result = await Promise.race([ - completePromise.then(() => 'complete' as const), - timeoutPromise, - ]); - - client.close(); - - // If we got results but timed out waiting for complete, that's still a pass - // (the important thing is that the fetch+tee didn't throw "ReadableStream already used") - if (result === 'timeout') { - // If we received at least one result, the fix is working - stream didn't crash - if (results.length > 0) { - // Success - we got results even if we didn't get the complete event - return; - } - throw new Error('Timeout waiting for SSE events - no results received'); - } - - // Should have received results (either from AI SDK or httpbin fallback) - assert(results.length > 0, `Should receive at least 1 result, got ${results.length}`); - - // Should have completed successfully - assert(completed, 'Should receive complete event'); - assert( - completedMessage.startsWith('done'), - `Complete message should start with 'done': ${completedMessage}` - ); - - // Check that no errors occurred (unless network issues) - const errors = results.filter((r) => r.error); - // Allow some network errors but not all results being errors - assert( - errors.length < results.length, - `Most results should succeed, but got ${errors.length} errors out of ${results.length} results` - ); -}); diff --git a/apps/testing/integration-suite/src/test/storage-binary.ts b/apps/testing/integration-suite/src/test/storage-binary.ts deleted file mode 100644 index b1bb8c540..000000000 --- a/apps/testing/integration-suite/src/test/storage-binary.ts +++ /dev/null @@ -1,454 +0,0 @@ -/** - * Binary Storage Tests - * - * Tests binary data upload/download with integrity verification: - * - Random binary data (various sizes) - * - Null bytes and high bytes - * - PDF files - * - Content-Type preservation - * - MD5 hash verification - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined, uniqueId } from '@test/helpers'; -import binaryStorageAgent from '@agents/storage/binary/upload-download'; -import crypto from 'crypto'; - -// Helper: Generate random binary data -function generateRandomBytes(size: number): Uint8Array { - return crypto.randomBytes(size); -} - -// Helper: Calculate MD5 hash -function md5(data: Uint8Array): string { - return crypto.createHash('md5').update(data).digest('hex'); -} - -// Helper: Create minimal PDF -function createMinimalPDF(): Uint8Array { - const pdf = `%PDF-1.4 -1 0 obj -<< /Type /Catalog /Pages 2 0 R >> -endobj -2 0 obj -<< /Type /Pages /Kids [3 0 R] /Count 1 >> -endobj -3 0 obj -<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R >> -endobj -4 0 obj -<< /Length 44 >> -stream -BT -/F1 12 Tf -100 700 Td -(Test PDF) Tj -ET -endstream -endobj -xref -0 5 -0000000000 65535 f -0000000009 00000 n -0000000058 00000 n -0000000115 00000 n -0000000214 00000 n -trailer -<< /Size 5 /Root 1 0 R >> -startxref -306 -%%EOF`; - return new TextEncoder().encode(pdf); -} - -// Test 1: Random binary data (1KB) -test('storage-binary', 'random-1kb', async () => { - const name = uniqueId('binary-1kb'); - const data = generateRandomBytes(1024); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - contentType: 'application/octet-stream', - }); - - assertEqual(uploadResult.success, true); - assertEqual(uploadResult.md5, expectedMd5); - assertEqual(uploadResult.size, 1024); - assertDefined(uploadResult.streamId); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.success, true); - assertEqual(downloadResult.md5, expectedMd5); - assertEqual(downloadResult.size, 1024); - - // Verify data matches - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - assert(downloadedData.length === data.length, 'Data length mismatch'); - assert( - downloadedData.every((byte, i) => byte === data[i]), - 'Data content mismatch' - ); -}); - -// Test 2: Random binary data (10KB) -test('storage-binary', 'random-10kb', async () => { - const name = uniqueId('binary-10kb'); - const data = generateRandomBytes(10 * 1024); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.success, true); - assertEqual(uploadResult.md5, expectedMd5); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); -}); - -// Test 3: Random binary data (100KB) -test('storage-binary', 'random-100kb', async () => { - const name = uniqueId('binary-100kb'); - const data = generateRandomBytes(100 * 1024); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download and verify - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); -}); - -// Test 4: Null bytes (0x00) -test('storage-binary', 'null-bytes', async () => { - const name = uniqueId('binary-nulls'); - const data = new Uint8Array([0x00, 0x00, 0x00, 0x00, 0x00]); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - - // Verify exact bytes - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - assert( - downloadedData.every((byte) => byte === 0x00), - 'Null bytes corrupted' - ); -}); - -// Test 5: High bytes (0xFF) -test('storage-binary', 'high-bytes', async () => { - const name = uniqueId('binary-highs'); - const data = new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff]); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - - // Verify exact bytes - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - assert( - downloadedData.every((byte) => byte === 0xff), - 'High bytes corrupted' - ); -}); - -// Test 6: Mixed problematic bytes -test('storage-binary', 'problematic-bytes', async () => { - const name = uniqueId('binary-problematic'); - const data = new Uint8Array([0x00, 0x01, 0x02, 0xff, 0xfe, 0xfd, 0x80, 0x7f, 0x00, 0xff]); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - - // Verify byte-by-byte - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - assert(downloadedData.length === data.length, 'Byte count mismatch'); - assert( - downloadedData.every((byte, i) => byte === data[i]), - 'Byte-by-byte mismatch' - ); -}); - -// Test 7: PDF upload/download -test('storage-binary', 'pdf-upload', async () => { - const name = uniqueId('binary-pdf'); - const data = createMinimalPDF(); - const expectedMd5 = md5(data); - - // Upload with PDF content type - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - contentType: 'application/pdf', - }); - - assertEqual(uploadResult.success, true); - assertEqual(uploadResult.md5, expectedMd5); - assertEqual(uploadResult.contentType, 'application/pdf'); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - - // Verify PDF structure - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - const text = new TextDecoder().decode(downloadedData); - assert(text.startsWith('%PDF-1.4'), 'PDF header missing'); - assert(text.includes('%%EOF'), 'PDF footer missing'); -}); - -// Test 8: PDF with binary content -test('storage-binary', 'pdf-binary-content', async () => { - const name = uniqueId('binary-pdf-complex'); - - // Create PDF with some binary-like content in stream - const pdfBytes = createMinimalPDF(); - const expectedMd5 = md5(pdfBytes); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(pdfBytes).toString('base64'), - contentType: 'application/pdf', - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download and verify integrity - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - assertEqual(downloadResult.size, pdfBytes.length); -}); - -// Test 9: Content-Type preservation (octet-stream) -test('storage-binary', 'content-type-octet-stream', async () => { - const name = uniqueId('binary-octet'); - const data = generateRandomBytes(256); - - // Upload with default content type - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - contentType: 'application/octet-stream', - }); - - assertEqual(uploadResult.contentType, 'application/octet-stream'); -}); - -// Test 10: Content-Type preservation (PDF) -test('storage-binary', 'content-type-pdf', async () => { - const name = uniqueId('binary-pdf-type'); - const data = createMinimalPDF(); - - // Upload with PDF content type - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - contentType: 'application/pdf', - }); - - assertEqual(uploadResult.contentType, 'application/pdf'); -}); - -// Test 11: Large binary file (1MB) -test('storage-binary', 'large-1mb', async () => { - const name = uniqueId('binary-1mb'); - const data = generateRandomBytes(1024 * 1024); // 1MB - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - assertEqual(uploadResult.size, 1024 * 1024); - - // Download and verify - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - assertEqual(downloadResult.size, 1024 * 1024); -}); - -// Test 12: Empty binary data -test('storage-binary', 'empty-data', async () => { - const name = uniqueId('binary-empty'); - const data = new Uint8Array(0); - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - assertEqual(uploadResult.size, 0); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - assertEqual(downloadResult.size, 0); -}); - -// Test 13: Single byte -test('storage-binary', 'single-byte', async () => { - const name = uniqueId('binary-single'); - const data = new Uint8Array([0x42]); // 'B' - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - - // Verify exact byte - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - assertEqual(downloadedData[0], 0x42); -}); - -// Test 14: Alternating bit pattern -test('storage-binary', 'bit-pattern', async () => { - const name = uniqueId('binary-pattern'); - const data = new Uint8Array([0xaa, 0x55, 0xaa, 0x55]); // Alternating bits - const expectedMd5 = md5(data); - - // Upload - const uploadResult = await binaryStorageAgent.run({ - operation: 'upload', - name, - data: Buffer.from(data).toString('base64'), - }); - - assertEqual(uploadResult.md5, expectedMd5); - - // Download - const downloadResult = await binaryStorageAgent.run({ - operation: 'download', - streamId: uploadResult.streamId, - }); - - assertEqual(downloadResult.md5, expectedMd5); - - // Verify pattern preserved - assertDefined(downloadResult.data); - const downloadedData = Buffer.from(downloadResult.data, 'base64'); - assert( - downloadedData.every((byte, i) => byte === data[i]), - 'Bit pattern corrupted' - ); -}); diff --git a/apps/testing/integration-suite/src/test/storage-kv.ts b/apps/testing/integration-suite/src/test/storage-kv.ts deleted file mode 100644 index a67258aa9..000000000 --- a/apps/testing/integration-suite/src/test/storage-kv.ts +++ /dev/null @@ -1,347 +0,0 @@ -/** - * KeyValue Storage Tests - * - * Tests KV storage CRUD operations, types, and isolation - */ - -import { test } from './suite'; -import { assertEqual, assertDefined, uniqueId } from './helpers'; -import { decodeKVValue } from './helpers/kv'; - -// Import agents -import kvCrudAgent from '@agents/storage/kv/crud'; -import kvTypesAgent from '@agents/storage/kv/types'; -import kvIsolationAgent from '@agents/storage/kv/isolation'; - -// Test: KV Set operation -test('storage-kv', 'set', async () => { - const key = uniqueId('kv-set'); - const namespace = 'testing'; - const result = await kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: 'test-value', - ttl: 1800, - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.operation, 'set'); - assertEqual(result.key, key); - assertEqual(result.value, 'test-value'); - assertEqual(result.success, true); -}); - -// Test: KV Get operation -test('storage-kv', 'get', async () => { - const key = uniqueId('kv-get'); - const namespace = 'testing'; - - // Set a value first - await kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: 'retrieved-value', - ttl: 1800, - }); - - // Get it back - const result = await kvCrudAgent.run({ - operation: 'get', - key, - namespace, - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.operation, 'get'); - assertEqual(decodeKVValue(result.value), 'retrieved-value'); - assertEqual(result.success, true); -}); - -// Test: KV Get non-existent key -test('storage-kv', 'get-missing', async () => { - const key = uniqueId('kv-missing'); - const namespace = 'testing'; - - const result = await kvCrudAgent.run({ - operation: 'get', - key, - namespace, - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.operation, 'get'); - assertEqual(result.value, undefined, 'Non-existent key should return undefined'); - assertEqual(result.success, true); -}); - -// Test: KV Delete operation -test('storage-kv', 'delete', async () => { - const key = uniqueId('kv-delete'); - const namespace = 'testing'; - - // Set a value - await kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: 'to-be-deleted', - ttl: 1800, - }); - - // Delete it - const deleteResult = await kvCrudAgent.run({ - operation: 'delete', - key, - namespace, - }); - assertEqual(deleteResult.success, true); - - // Verify it's gone - const getResult = await kvCrudAgent.run({ - operation: 'get', - key, - namespace, - }); - - // Check exists flag instead of value - assertEqual( - getResult.exists, - false, - `Deleted key should not exist (exists=${getResult.exists}, value=${getResult.value})` - ); -}); - -// Test: KV Has operation -test('storage-kv', 'has', async () => { - const key = uniqueId('kv-has'); - const namespace = 'testing'; - - // Check non-existent key - const notExistsResult = await kvCrudAgent.run({ - operation: 'has', - key, - namespace, - }); - - assertEqual(notExistsResult.exists, false, 'Non-existent key should return false'); - - // Set a value - await kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: 'exists', - ttl: 1800, - }); - - // Check existing key - const existsResult = await kvCrudAgent.run({ - operation: 'has', - key, - namespace, - }); - - assertEqual(existsResult.exists, true, 'Existing key should return true'); -}); - -// Test: KV String type -test('storage-kv', 'type-string', async () => { - const key = uniqueId('kv-string'); - const namespace = 'testing'; - - await kvTypesAgent.run({ - operation: 'set-string', - key, - namespace, - value: 'hello world', - ttl: 1800, - }); - - const result = await kvTypesAgent.run({ - operation: 'get', - key, - namespace, - }); - - assertEqual(decodeKVValue(result.value), 'hello world'); -}); - -// Test: KV Object type (skipped - complex serialization) -// Objects require proper content-type handling which agent.run() serializes -// This is better tested in unit tests for the storage layer - -// Test: KV Number type -test('storage-kv', 'type-number', async () => { - const key = uniqueId('kv-number'); - const namespace = 'testing'; - - await kvTypesAgent.run({ - operation: 'set-number', - key, - namespace, - value: 123, - ttl: 1800, - }); - - const result = await kvTypesAgent.run({ - operation: 'get', - key, - namespace, - }); - - const decoded = decodeKVValue(result.value); - assertEqual(decoded, 123); - assertEqual(typeof decoded, 'number'); -}); - -// Test: KV Boolean type (true) -test('storage-kv', 'type-boolean-true', async () => { - const key = uniqueId('kv-bool-true'); - const namespace = 'testing'; - - await kvTypesAgent.run({ - operation: 'set-boolean', - key, - namespace, - value: true, - ttl: 1800, - }); - - const result = await kvTypesAgent.run({ - operation: 'get', - key, - namespace, - }); - - const decoded = decodeKVValue(result.value); - assertEqual(decoded, true); - assertEqual(typeof decoded, 'boolean'); -}); - -// Test: KV Boolean type (false) -test('storage-kv', 'type-boolean-false', async () => { - const key = uniqueId('kv-bool-false'); - const namespace = 'testing'; - - await kvTypesAgent.run({ - operation: 'set-boolean', - key, - namespace, - value: false, - ttl: 1800, - }); - - const result = await kvTypesAgent.run({ - operation: 'get', - key, - namespace, - }); - - const decoded = decodeKVValue(result.value); - assertEqual(decoded, false); - assertEqual(typeof decoded, 'boolean'); -}); - -// Test: KV Isolation between calls -test('storage-kv', 'isolation', async () => { - const baseKey = uniqueId('kv-isolation'); - const namespace = 'testing'; - - // Make two concurrent calls with different keys - const [result1, result2] = await Promise.all([ - kvIsolationAgent.run({ - key: `${baseKey}-1`, - namespace, - value: 'value-1', - ttl: 1800, - }), - kvIsolationAgent.run({ - key: `${baseKey}-2`, - namespace, - value: 'value-2', - ttl: 1800, - }), - ]); - - // Each should get back its own value - assertEqual(result1.setValue, 'value-1'); - assertEqual(decodeKVValue(result1.getValue), 'value-1'); - - assertEqual(result2.setValue, 'value-2'); - assertEqual(decodeKVValue(result2.getValue), 'value-2'); - - // Session IDs will be the same since both run() calls are from the same test context - // This is fine - isolation is at the storage level via unique keys - assertDefined(result1.sessionId, 'Should have session ID'); - assertDefined(result2.sessionId, 'Should have session ID'); -}); - -// Test: KV Overwrite value -test('storage-kv', 'overwrite', async () => { - const key = uniqueId('kv-overwrite'); - const namespace = 'testing'; - - // Set initial value - await kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: 'original', - ttl: 1800, - }); - - // Overwrite it - await kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: 'updated', - ttl: 1800, - }); - - // Verify new value - const result = await kvCrudAgent.run({ - operation: 'get', - key, - namespace, - }); - - assertEqual(decodeKVValue(result.value), 'updated', 'Value should be overwritten'); -}); - -// Test: KV Concurrent operations -test('storage-kv', 'concurrent-operations', async () => { - const keys = Array.from({ length: 5 }, (_, i) => uniqueId(`kv-concurrent-${i}`)); - const namespace = 'testing'; - - // Set multiple values concurrently - await Promise.all( - keys.map((key, i) => - kvCrudAgent.run({ - operation: 'set', - key, - namespace, - value: `value-${i}`, - ttl: 1800, - }) - ) - ); - - // Get them all back concurrently - const results = await Promise.all( - keys.map((key) => - kvCrudAgent.run({ - operation: 'get', - key, - namespace, - }) - ) - ); - - // Verify all values - results.forEach((result, i) => { - assertEqual(decodeKVValue(result.value), `value-${i}`, `Concurrent value ${i} should match`); - }); -}); diff --git a/apps/testing/integration-suite/src/test/storage-stream.ts b/apps/testing/integration-suite/src/test/storage-stream.ts deleted file mode 100644 index 3cfd37c6e..000000000 --- a/apps/testing/integration-suite/src/test/storage-stream.ts +++ /dev/null @@ -1,263 +0,0 @@ -/** - * Stream Storage Tests - * - * Tests Stream storage operations including create, write, read, metadata, and types - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined } from './helpers'; - -import streamCrudAgent from '@agents/storage/stream/crud'; -import streamMetadataAgent from '@agents/storage/stream/metadata'; -import streamTypesAgent from '@agents/storage/stream/types'; - -// Test: Create stream, write, and close -test('storage-stream', 'create-write-close', async () => { - const name = 'testing'; - - const result = await streamCrudAgent.run({ - operation: 'create-write-close', - name, - data: 'Hello, Stream!', - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.operation, 'create-write-close'); - assertDefined(result.streamId, 'Stream ID should be defined'); - assertDefined(result.url, 'Stream URL should be defined'); - assertEqual(result.success, true); -}); - -// Test: Create, write, and read back data -test('storage-stream', 'create-write-read', async () => { - const name = 'testing'; - const testData = 'Test data for reading'; - - const result = await streamCrudAgent.run({ - operation: 'create-write-read', - name, - data: testData, - }); - - assertDefined(result, 'Result should be defined'); - assertEqual(result.operation, 'create-write-read'); - assertEqual(result.data, testData, 'Read data should match written data'); - assertEqual(result.success, true); -}); - -// Test: Download stream by ID -test('storage-stream', 'download', async () => { - const name = 'testing'; - const testData = 'Data to download'; - - const createResult = await streamCrudAgent.run({ - operation: 'create-write-close', - name, - data: testData, - }); - - assertDefined(createResult.streamId, 'Stream ID should exist'); - - const downloadResult = await streamCrudAgent.run({ - operation: 'download', - streamId: createResult.streamId, - }); - - assertEqual(downloadResult.data, testData, 'Downloaded data should match'); - assertEqual(downloadResult.success, true); -}); - -// Test: Delete stream -test('storage-stream', 'delete', async () => { - const name = 'testing'; - - const createResult = await streamCrudAgent.run({ - operation: 'create-write-close', - name, - data: 'To be deleted', - }); - - assertDefined(createResult.streamId); - - const deleteResult = await streamCrudAgent.run({ - operation: 'delete', - streamId: createResult.streamId, - }); - - assertEqual(deleteResult.success, true); -}); - -// Test: Create stream with metadata -test('storage-stream', 'metadata', async () => { - const name = 'testing'; - const metadata = { - author: 'test-user', - version: '1.0', - category: 'test', - }; - - const result = await streamMetadataAgent.run({ - operation: 'create-with-metadata', - name, - metadata, - contentType: 'text/plain', - }); - - assertDefined(result.streamId); - assertEqual(result.namespace, name); - assertDefined(result.metadata); - assertEqual(result.metadata?.author, 'test-user'); - assertEqual(result.metadata?.version, '1.0'); - assertEqual(result.metadata?.category, 'test'); - assertEqual(result.success, true); -}); - -// Test: Get stream info -test('storage-stream', 'get-info', async () => { - const name = 'testing'; - - const createResult = await streamCrudAgent.run({ - operation: 'create-write-close', - name, - data: 'Info test data', - }); - - assertDefined(createResult.streamId); - - const infoResult = await streamMetadataAgent.run({ - operation: 'get', - streamId: createResult.streamId, - }); - - assertEqual(infoResult.streamId, createResult.streamId); - assertEqual(infoResult.namespace, name); - assertDefined(infoResult.url); - assertDefined(infoResult.sizeBytes); - assert(infoResult.sizeBytes! > 0, 'Size should be greater than 0'); - assertEqual(infoResult.success, true); -}); - -// Test: List streams -test('storage-stream', 'list', async () => { - const baseName = 'testing'; - - await Promise.all([ - streamCrudAgent.run({ - operation: 'create-write-close', - name: `${baseName}-1`, - data: 'List test 1', - }), - streamCrudAgent.run({ - operation: 'create-write-close', - name: `${baseName}-2`, - data: 'List test 2', - }), - ]); - - const listResult = await streamMetadataAgent.run({ - operation: 'list', - }); - - assertDefined(listResult.streams); - assertDefined(listResult.total); - assert(listResult.total! >= 0, 'Total should be at least 0'); - assertEqual(listResult.success, true); -}); - -// Test: String type stream -test('storage-stream', 'type-string', async () => { - const name = 'testing'; - const testString = 'Hello, World!'; - - const result = await streamTypesAgent.run({ - operation: 'write-string', - name, - data: testString, - }); - - assertEqual(result.data, testString); - assertEqual(result.contentType, 'text/plain'); - assertEqual(result.success, true); -}); - -// Test: Binary type stream -test('storage-stream', 'type-binary', async () => { - const name = 'testing'; - const testData = 'Binary data test'; - - const result = await streamTypesAgent.run({ - operation: 'write-binary', - name, - data: testData, - }); - - assertEqual(result.data, testData); - assertEqual(result.contentType, 'application/octet-stream'); - assertEqual(result.success, true); -}); - -// Test: JSON object stream -test('storage-stream', 'type-json', async () => { - const name = 'testing'; - const testObject = { - id: 123, - name: 'Test Object', - active: true, - }; - - const result = await streamTypesAgent.run({ - operation: 'write-json', - name, - data: testObject, - }); - - assertDefined(result.data); - assertEqual(typeof result.data, 'object'); - assertEqual((result.data as any).id, 123); - assertEqual((result.data as any).name, 'Test Object'); - assertEqual((result.data as any).active, true); - assertEqual(result.contentType, 'application/json'); - assertEqual(result.success, true); -}); - -// Test: Concurrent stream operations -test('storage-stream', 'concurrent-operations', async () => { - const names = Array.from({ length: 5 }, () => 'testing'); - - const results = await Promise.all( - names.map((name, i) => - streamCrudAgent.run({ - operation: 'create-write-close', - name, - data: `Concurrent data ${i}`, - }) - ) - ); - - results.forEach((result, i) => { - assertDefined(result.streamId, `Stream ${i} should have ID`); - assertEqual(result.success, true, `Stream ${i} should succeed`); - }); -}); - -// Test: Stream size validation -test('storage-stream', 'size-validation', async () => { - const name = 'testing'; - const testData = 'A'.repeat(100); - - const createResult = await streamCrudAgent.run({ - operation: 'create-write-close', - name, - data: testData, - }); - - assertDefined(createResult.streamId); - - const infoResult = await streamMetadataAgent.run({ - operation: 'get', - streamId: createResult.streamId, - }); - - assertDefined(infoResult.sizeBytes); - assertEqual(infoResult.sizeBytes, 100, 'Size should match data length'); -}); diff --git a/apps/testing/integration-suite/src/test/storage-vector.ts b/apps/testing/integration-suite/src/test/storage-vector.ts deleted file mode 100644 index 26328ea52..000000000 --- a/apps/testing/integration-suite/src/test/storage-vector.ts +++ /dev/null @@ -1,284 +0,0 @@ -/** - * Vector Storage Tests - * - * Tests Vector storage operations including upsert, search, get, and delete - */ - -import { test } from './suite'; -import { assert, assertEqual, assertDefined, uniqueId } from './helpers'; - -import vectorCrudAgent from '@agents/storage/vector/crud'; -import vectorSearchAgent from '@agents/storage/vector/search'; - -// Test: Upsert single vector -test('storage-vector', 'upsert-single', async () => { - const namespace = uniqueId('vector-ns'); - const key = uniqueId('vector-key'); - - const result = await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key, - // No document - agent uses static default for cache efficiency - metadata: { category: 'tech', topic: 'ml' }, - }); - - assertEqual(result.operation, 'upsert-single'); - assertEqual(result.success, true); - assertDefined(result.id, 'Should have ID'); - assertEqual(result.key, key); -}); - -// Test: Upsert multiple vectors -test('storage-vector', 'upsert-multiple', async () => { - const namespace = uniqueId('vector-ns'); - const keys = [uniqueId('vec-1'), uniqueId('vec-2'), uniqueId('vec-3')]; - - const result = await vectorCrudAgent.run({ - operation: 'upsert-multiple', - namespace, - keys, - metadata: { batch: 'test' }, - }); - - assertEqual(result.success, true); - assertDefined(result.ids); - assertEqual(result.ids!.length, 3, 'Should have 3 IDs'); -}); - -// Test: Get vector by key -test('storage-vector', 'get', async () => { - const namespace = uniqueId('vector-ns'); - const key = uniqueId('vector-key'); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key, - // No document - uses static default - metadata: { test: 'get' }, - }); - - const result = await vectorCrudAgent.run({ - operation: 'get', - namespace, - key, - }); - - assertEqual(result.success, true); - assertEqual(result.exists, true); - assertDefined(result.data); -}); - -// Test: Get non-existent vector -test('storage-vector', 'get-missing', async () => { - const namespace = uniqueId('vector-ns'); - const key = uniqueId('missing-key'); - - const result = await vectorCrudAgent.run({ - operation: 'get', - namespace, - key, - }); - - assertEqual(result.success, true); - assertEqual(result.exists, false); -}); - -// Test: Get many vectors -test('storage-vector', 'get-many', async () => { - const namespace = uniqueId('vector-ns'); - const keys = [uniqueId('vec-1'), uniqueId('vec-2')]; - - await vectorCrudAgent.run({ - operation: 'upsert-multiple', - namespace, - keys, - }); - - const result = await vectorCrudAgent.run({ - operation: 'get-many', - namespace, - keys, - }); - - assertEqual(result.success, true); - assertDefined(result.data); -}); - -// Test: Search vectors -test('storage-vector', 'search-basic', async () => { - const namespace = uniqueId('vector-ns'); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key: uniqueId('doc-1'), - // Uses static default document - metadata: { category: 'furniture' }, - }); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key: uniqueId('doc-2'), - // Uses static default document - metadata: { category: 'furniture' }, - }); - - const result = await vectorSearchAgent.run({ - namespace, - // No query - uses static default for cache efficiency - limit: 5, - }); - - assertEqual(result.success, true); - assertDefined(result.results); - assert(result.count >= 0, 'Should have count'); -}); - -// Test: Search with similarity threshold -test('storage-vector', 'search-similarity', async () => { - const namespace = uniqueId('vector-ns'); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key: uniqueId('doc'), - // Uses static default document - }); - - const result = await vectorSearchAgent.run({ - namespace, - // No query - uses static default - limit: 10, - similarity: 0.5, - }); - - assertEqual(result.success, true); - assertDefined(result.results); -}); - -// Test: Search with metadata filter -test('storage-vector', 'search-metadata-filter', async () => { - const namespace = uniqueId('vector-ns'); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key: uniqueId('doc-1'), - // Uses static default document - metadata: { inStock: true, category: 'electronics' }, - }); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key: uniqueId('doc-2'), - // Uses static default document - metadata: { inStock: false, category: 'electronics' }, - }); - - const result = await vectorSearchAgent.run({ - namespace, - // No query - uses static default - metadata: { inStock: true }, - }); - - assertEqual(result.success, true); - assertDefined(result.results); -}); - -// Test: Delete vector -test('storage-vector', 'delete', async () => { - const namespace = uniqueId('vector-ns'); - const key = uniqueId('to-delete'); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key, - // Uses static default document - }); - - const deleteResult = await vectorCrudAgent.run({ - operation: 'delete', - namespace, - key, - }); - - assertEqual(deleteResult.success, true); - assertEqual(deleteResult.deleted, 1); - - const getResult = await vectorCrudAgent.run({ - operation: 'get', - namespace, - key, - }); - - assertEqual(getResult.exists, false); -}); - -// Test: Delete many vectors -test('storage-vector', 'delete-many', async () => { - const namespace = uniqueId('vector-ns'); - const keys = [uniqueId('vec-1'), uniqueId('vec-2'), uniqueId('vec-3')]; - - await vectorCrudAgent.run({ - operation: 'upsert-multiple', - namespace, - keys, - }); - - const result = await vectorCrudAgent.run({ - operation: 'delete-many', - namespace, - keys, - }); - - assertEqual(result.success, true); - assertEqual(result.deleted, 3); -}); - -// Test: Namespace exists -test('storage-vector', 'namespace-exists', async () => { - const namespace = uniqueId('vector-ns'); - - await vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key: uniqueId('key'), - // Uses static default document - }); - - const result = await vectorCrudAgent.run({ - operation: 'exists', - namespace, - }); - - assertEqual(result.success, true); - assertEqual(result.exists, true); -}); - -// Test: Concurrent vector operations -test('storage-vector', 'concurrent-operations', async () => { - const namespace = uniqueId('vector-ns'); - const keys = Array.from({ length: 5 }, (_, i) => uniqueId(`concurrent-${i}`)); - - const results = await Promise.all( - keys.map((key, i) => - vectorCrudAgent.run({ - operation: 'upsert-single', - namespace, - key, - // Uses static default document for all - leverages cache - metadata: { index: i }, - }) - ) - ); - - results.forEach((result, i) => { - assertEqual(result.success, true, `Operation ${i} should succeed`); - assertDefined(result.id, `Operation ${i} should have ID`); - }); -}); diff --git a/apps/testing/integration-suite/src/test/suite.ts b/apps/testing/integration-suite/src/test/suite.ts deleted file mode 100644 index a411ddaf9..000000000 --- a/apps/testing/integration-suite/src/test/suite.ts +++ /dev/null @@ -1,218 +0,0 @@ -/** - * Test suite registry and definitions - */ - -/** - * Diagnostic information for failed tests, especially from service calls - */ -export interface TestDiagnostics { - /** Session ID from x-session-id header for correlating with backend logs */ - sessionId?: string; - /** HTTP status code if the error came from an HTTP request */ - statusCode?: number; - /** HTTP method used (GET, POST, PUT, DELETE, etc.) */ - method?: string; - /** URL that was called when the error occurred */ - url?: string; - /** Error type/class name */ - errorType?: string; -} - -export interface TestResult { - name: string; - passed: boolean; - error?: string; - stack?: string; - duration: number; - /** Additional diagnostic info for debugging failed tests */ - diagnostics?: TestDiagnostics; -} - -export type TestFunction = () => Promise | void; - -export interface TestDefinition { - name: string; - suite: string; - fn: TestFunction; -} - -export class TestSuite { - private tests: Map = new Map(); - - /** - * Register a test - */ - register(suite: string, name: string, fn: TestFunction): void { - const key = `${suite}:${name}`; - this.tests.set(key, { name, suite, fn }); - } - - /** - * Get all tests, optionally filtered by suite and/or name - */ - getTests(suite?: string, name?: string): TestDefinition[] { - let tests = Array.from(this.tests.values()); - - if (suite) { - tests = tests.filter((t) => t.suite === suite); - } - - if (name) { - tests = tests.filter((t) => t.name === name); - } - - return tests; - } - - /** - * Get all suite names - */ - getSuites(): string[] { - const suites = new Set(); - for (const test of this.tests.values()) { - suites.add(test.suite); - } - return Array.from(suites); - } - - /** - * Extract diagnostic information from an error, especially for ServiceException - */ - private extractDiagnostics(error: unknown): TestDiagnostics | undefined { - if (!(error instanceof Error)) { - return undefined; - } - - const diagnostics: TestDiagnostics = { - errorType: error.constructor.name, - }; - - // Check for ServiceException-like structured errors with known properties - // ServiceException has: statusCode, method, url, sessionId - const e = error as unknown as Record; - - if (typeof e.sessionId === 'string') { - diagnostics.sessionId = e.sessionId; - } - if (typeof e.statusCode === 'number') { - diagnostics.statusCode = e.statusCode; - } - if (typeof e.method === 'string') { - diagnostics.method = e.method; - } - if (typeof e.url === 'string') { - diagnostics.url = e.url; - } - - // Only return diagnostics if we found something useful - if ( - diagnostics.sessionId || - diagnostics.statusCode || - diagnostics.method || - diagnostics.url - ) { - return diagnostics; - } - - // Still return errorType for any Error - return { errorType: diagnostics.errorType }; - } - - /** - * Run a single test and return the result - */ - async runTest(test: TestDefinition): Promise { - const startTime = performance.now(); - try { - await test.fn(); - const duration = performance.now() - startTime; - return { - name: `${test.suite}:${test.name}`, - passed: true, - duration, - }; - } catch (error) { - const duration = performance.now() - startTime; - const diagnostics = this.extractDiagnostics(error); - return { - name: `${test.suite}:${test.name}`, - passed: false, - error: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - duration, - diagnostics, - }; - } - } - - /** - * Run all tests matching the filter criteria - */ - async runAll( - suite?: string, - name?: string, - concurrency = 10 - ): Promise<{ results: TestResult[]; summary: TestSummary }> { - const tests = this.getTests(suite, name); - - // Run tests in batches to limit concurrency - const results: TestResult[] = []; - for (let i = 0; i < tests.length; i += concurrency) { - const batch = tests.slice(i, i + concurrency); - const batchResults = await Promise.allSettled(batch.map((t) => this.runTest(t))); - - // Extract results from settled promises - for (const result of batchResults) { - if (result.status === 'fulfilled') { - results.push(result.value); - } else { - // This shouldn't happen since runTest catches all errors, - // but handle it just in case - results.push({ - name: 'unknown', - passed: false, - error: String(result.reason), - duration: 0, - }); - } - } - } - - const summary = this.summarize(results); - return { results, summary }; - } - - /** - * Create a summary of test results - */ - private summarize(results: TestResult[]): TestSummary { - const passed = results.filter((r) => r.passed).length; - const failed = results.filter((r) => !r.passed).length; - const total = results.length; - const totalDuration = results.reduce((sum, r) => sum + r.duration, 0); - - return { - total, - passed, - failed, - duration: totalDuration, - }; - } -} - -export interface TestSummary { - total: number; - passed: number; - failed: number; - duration: number; -} - -// Global test suite instance -export const testSuite = new TestSuite(); - -/** - * Register a test (convenience function) - */ -export function test(suite: string, name: string, fn: TestFunction): void { - testSuite.register(suite, name, fn); -} diff --git a/apps/testing/integration-suite/src/test/web-rendering.ts b/apps/testing/integration-suite/src/test/web-rendering.ts deleted file mode 100644 index 86e76a902..000000000 --- a/apps/testing/integration-suite/src/test/web-rendering.ts +++ /dev/null @@ -1,255 +0,0 @@ -/** - * Web Frontend Rendering Tests - * - * Tests that verify: - * 1. Web frontend renders correctly - * 2. Assets are served with correct MIME types - * 3. SPA fallback works for client-side routes - * 4. SPA fallback doesn't catch asset requests (CRITICAL REGRESSION TEST) - * 5. Relative paths in HTML are transformed correctly (dev mode only) - * - * Note: Some tests are dev-mode specific and will be skipped in production builds. - */ - -import { test } from '@test/suite'; -import { assert, assertEqual } from '@test/helpers'; - -// Check if we're in dev mode with Vite -const isDev = process.env.DEV === 'true'; - -// Test: Root HTML loads correctly -test('web-rendering', 'root-html-loads', async () => { - const res = await fetch('http://127.0.0.1:3500/'); - - // In dev mode without Vite running, this may return 500 - // Skip test if server isn't properly configured - if (res.status === 500) { - // Dev mode but Vite not running - skip - return; - } - - assertEqual(res.status, 200); - const html = await res.text(); - - // Verify root div exists (works in both dev and prod) - assert(html.includes('
'), 'Should have root div'); - - if (isDev) { - // Dev mode: Verify Vite client script is injected - assert(html.includes('/@vite/client'), 'Should include Vite client script in dev mode'); - - // Verify React refresh is injected - assert( - html.includes('@react-refresh') || html.includes('RefreshRuntime'), - 'Should include React refresh in dev mode' - ); - } -}); - -// Test: Relative paths transformed to absolute (dev mode only) -test('web-rendering', 'relative-paths-transformed', async () => { - if (!isDev) { - // Skip in production mode - uses bundled assets - return; - } - - const res = await fetch('http://127.0.0.1:3500/'); - const html = await res.text(); - - // Original HTML has src="./frontend.tsx" - // Should be transformed to src="/src/web/frontend.tsx" in dev mode - assert( - html.includes('src="/src/web/frontend.tsx"'), - 'Should transform ./frontend.tsx to /src/web/frontend.tsx' - ); -}); - -// Test: Frontend module loads with JavaScript MIME type (dev mode only) -test('web-rendering', 'frontend-module-loads', async () => { - if (!isDev) { - // Skip in production mode - uses bundled assets - return; - } - - const res = await fetch('http://127.0.0.1:3500/src/web/frontend.tsx'); - assertEqual(res.status, 200); - - const contentType = res.headers.get('content-type'); - assert( - contentType?.includes('javascript') ?? false, - `Should have JavaScript MIME type, got: ${contentType}` - ); - - const content = await res.text(); - assert(content.length > 0, 'Should have content'); - assert(content.includes('import'), 'Should be transformed JavaScript with imports'); -}); - -// Test: App component loads with JavaScript MIME type (dev mode only) -test('web-rendering', 'app-component-loads', async () => { - if (!isDev) { - // Skip in production mode - uses bundled assets - return; - } - - const res = await fetch('http://127.0.0.1:3500/src/web/App.tsx'); - assertEqual(res.status, 200); - - const contentType = res.headers.get('content-type'); - assert( - contentType?.includes('javascript') ?? false, - `Should have JavaScript MIME type, got: ${contentType}` - ); - - const content = await res.text(); - assert(content.includes('import'), 'Should be transformed JavaScript'); -}); - -// Test: SPA fallback works for client-side routes (CRITICAL) -test('web-rendering', 'spa-fallback-routes', async () => { - // Test various SPA routes (no file extensions) - // These should return HTML, not 404 - const routes = ['/dashboard', '/users', '/settings/profile', '/app/nested/route']; - - for (const route of routes) { - const res = await fetch('http://127.0.0.1:3500' + route); - - // In production with static files, these routes might 404 if no SPA routing is set up - // What we're testing is that IF they return 200, they return HTML (not caught by asset 404) - if (res.status === 200) { - const contentType = res.headers.get('content-type'); - assert( - contentType?.includes('text/html') ?? false, - `Route ${route} should return HTML, got: ${contentType}` - ); - - const html = await res.text(); - assert(html.includes('
'), `Route ${route} should return index.html`); - } - } -}); - -// Test: Asset requests return 404 (not caught by SPA fallback) -test('web-rendering', 'asset-404-not-caught', async () => { - // Asset requests with extensions should 404, not return HTML - const assetPaths = [ - '/nonexistent.js', - '/missing.tsx', - '/fake.css', - '/image.png', - '/data.json', - '/script.mjs', - ]; - - for (const path of assetPaths) { - const res = await fetch('http://127.0.0.1:3500' + path); - assertEqual(res.status, 404, `Asset ${path} should return 404`); - - const contentType = res.headers.get('content-type'); - // Should NOT return HTML for asset requests - assert( - !(contentType?.includes('text/html') ?? false), - `Asset ${path} should not return HTML, got: ${contentType}` - ); - } -}); - -// Test: Vite HMR websocket available (dev mode only) -test('web-rendering', 'vite-hmr-available', async () => { - if (!isDev) { - // Skip in production mode - return; - } - - const res = await fetch('http://127.0.0.1:3500/@vite/client'); - assertEqual(res.status, 200); - - const contentType = res.headers.get('content-type'); - assert(contentType?.includes('javascript') ?? false, 'Vite client should be JavaScript'); -}); - -// Test: Static public assets work -test('web-rendering', 'public-assets-load', async () => { - // Note: This test will fail if no public assets exist - // We're just verifying the proxy route works - const res = await fetch('http://127.0.0.1:3500/public/favicon.ico', { - redirect: 'manual', // Don't follow redirects - }); - - // Either 200 (exists) or 404 (doesn't exist) - both are fine - // What we DON'T want is HTML (SPA fallback catching it) - const contentType = res.headers.get('content-type'); - if (res.status === 200) { - assert(!(contentType?.includes('text/html') ?? false), 'Public asset should not return HTML'); - } -}); - -// Test: API routes return 404 (not caught by SPA fallback) -test('web-rendering', 'api-404-not-caught', async () => { - const res = await fetch('http://127.0.0.1:3500/api/nonexistent'); - assertEqual(res.status, 404); - - const contentType = res.headers.get('content-type'); - // API 404s should not return HTML - assert(!(contentType?.includes('text/html') ?? false), 'API 404 should not return HTML'); -}); - -// Test: Frontend script does NOT have async attribute (GitHub issue #327) -// The async attribute causes a race condition where React components execute -// before the Vite preamble sets window.__vite_plugin_react_preamble_installed__ -test('web-rendering', 'no-async-on-frontend-script', async () => { - if (!isDev) { - // Skip in production mode - uses bundled assets without this issue - return; - } - - const res = await fetch('http://127.0.0.1:3500/'); - if (res.status !== 200) { - // Dev mode but Vite not running - skip - return; - } - - const html = await res.text(); - - // Check that frontend.tsx script does NOT have async attribute - // Pattern: src="...frontend.tsx" followed by optional attributes then > - // Should NOT match: src="/src/web/frontend.tsx" async> - const hasAsyncFrontend = /src="[^"]*frontend\.tsx"[^>]*\basync\b/i.test(html); - assert( - !hasAsyncFrontend, - 'Frontend script should NOT have async attribute (causes preamble race condition)' - ); -}); - -// Test: Vite preamble script comes before app script (GitHub issue #327) -test('web-rendering', 'preamble-before-app-script', async () => { - if (!isDev) { - // Skip in production mode - return; - } - - const res = await fetch('http://127.0.0.1:3500/'); - if (res.status !== 200) { - return; - } - - const html = await res.text(); - - // Find positions of key scripts - const viteClientPos = html.indexOf('/@vite/client'); - const reactRefreshPos = html.indexOf('@react-refresh'); - const frontendPos = html.indexOf('frontend.tsx'); - - // Vite client should exist and come before frontend - assert(viteClientPos !== -1, 'Vite client script should exist'); - assert(frontendPos !== -1, 'Frontend script should exist'); - assert(viteClientPos < frontendPos, 'Vite client should come before frontend script'); - - // React refresh (preamble) should exist and come before frontend - if (reactRefreshPos !== -1) { - assert( - reactRefreshPos < frontendPos, - 'React refresh preamble should come before frontend script' - ); - } -}); diff --git a/apps/testing/integration-suite/src/test/websocket.ts b/apps/testing/integration-suite/src/test/websocket.ts deleted file mode 100644 index 356b3bbc9..000000000 --- a/apps/testing/integration-suite/src/test/websocket.ts +++ /dev/null @@ -1,278 +0,0 @@ -/** - * WebSocket Tests - * - * Tests real-time bidirectional communication via WebSocket. - * These tests use real WebSocket connections to the integration suite server. - */ - -import { test } from '@test/suite'; -import { assert, assertEqual, assertDefined, uniqueId } from '@test/helpers'; -import { createWebSocketClient } from '@test/helpers/websocket-client'; - -const suiteId = uniqueId('websocket'); - -// Test 1: Basic WebSocket connection -test(suiteId, uniqueId('basic-connection'), async () => { - const client = createWebSocketClient('/api/ws/echo'); - - await client.connect(); - assert(client.isConnected(), 'WebSocket should be connected'); - - await client.close(); - assert(!client.isConnected(), 'WebSocket should be disconnected'); -}); - -// Test 2: Echo server - single message -test(suiteId, uniqueId('echo-single-message'), async () => { - const client = createWebSocketClient('/api/ws/echo'); - - await client.connect(); - - // Send message - client.send('Hello, WebSocket!'); - - // Receive echo - const echo = await client.receive(); - assertEqual(echo, 'Hello, WebSocket!'); - - await client.close(); -}); - -// Test 3: Echo server - multiple messages -test(suiteId, uniqueId('echo-multiple-messages'), async () => { - const client = createWebSocketClient('/api/ws/echo'); - - await client.connect(); - - // Send multiple messages - client.send('Message 1'); - client.send('Message 2'); - client.send('Message 3'); - - // Receive echoes in order - const echo1 = await client.receive(); - const echo2 = await client.receive(); - const echo3 = await client.receive(); - - assertEqual(echo1, 'Message 1'); - assertEqual(echo2, 'Message 2'); - assertEqual(echo3, 'Message 3'); - - await client.close(); -}); - -// Test 4: JSON message exchange -test(suiteId, uniqueId('json-message-exchange'), async () => { - const client = createWebSocketClient('/api/ws/echo'); - - await client.connect(); - - // Send JSON object - const payload = { type: 'test', data: { id: 123, name: 'Alice' } }; - client.send(payload); - - // Receive and parse JSON - const response = await client.receiveJSON(); - assertEqual(response.type, 'test'); - assertEqual(response.data.id, 123); - assertEqual(response.data.name, 'Alice'); - - await client.close(); -}); - -// Test 5: Counter WebSocket - increment -test(suiteId, uniqueId('counter-increment'), async () => { - const client = createWebSocketClient('/api/ws/counter'); - - await client.connect(); - - // Should receive initial count on connection - const initial = await client.receiveJSON(); - assertEqual(initial.type, 'count'); - assertDefined(initial.value); - - // Increment counter - client.send({ action: 'increment' }); - const response1 = await client.receiveJSON(); - assertEqual(response1.type, 'count'); - assertEqual(response1.value, initial.value + 1); - - // Increment again - client.send({ action: 'increment' }); - const response2 = await client.receiveJSON(); - assertEqual(response2.value, initial.value + 2); - - await client.close(); -}); - -// Test 6: Counter WebSocket - decrement -test(suiteId, uniqueId('counter-decrement'), async () => { - const client = createWebSocketClient('/api/ws/counter'); - - await client.connect(); - - // Get initial count - const initial = await client.receiveJSON(); - - // Decrement counter - client.send({ action: 'decrement' }); - const response = await client.receiveJSON(); - assertEqual(response.value, initial.value - 1); - - await client.close(); -}); - -// Test 7: Counter WebSocket - reset -test(suiteId, uniqueId('counter-reset'), async () => { - const client = createWebSocketClient('/api/ws/counter'); - - await client.connect(); - - // Get initial count - await client.receiveJSON(); - - // Increment a few times - client.send({ action: 'increment' }); - await client.receiveJSON(); - client.send({ action: 'increment' }); - await client.receiveJSON(); - - // Reset - client.send({ action: 'reset' }); - const response = await client.receiveJSON(); - assertEqual(response.value, 0); - - await client.close(); -}); - -// Test 8: Broadcast - multiple clients -// DISABLED: This test has issues with WebSocket broadcast in test environment -// The broadcast endpoint works but tests fail - needs investigation of server-side WebSocket.send() -/* -test(suiteId, uniqueId('broadcast-multiple-clients'), async () => { - const client1 = createWebSocketClient('/api/ws/broadcast'); - const client2 = createWebSocketClient('/api/ws/broadcast'); - const client3 = createWebSocketClient('/api/ws/broadcast'); - - await client1.connect(); - await client2.connect(); - await client3.connect(); - - await new Promise((resolve) => setTimeout(resolve, 100)); - - client1.send('Broadcast from client 1'); - - const msg1 = await client1.receive(5000); - const msg2 = await client2.receive(5000); - const msg3 = await client3.receive(5000); - - assertEqual(msg1, 'Broadcast from client 1'); - assertEqual(msg2, 'Broadcast from client 1'); - assertEqual(msg3, 'Broadcast from client 1'); - - await client1.close(); - await client2.close(); - await client3.close(); -}); -*/ - -// Test 9: Broadcast - client disconnect -// DISABLED: This test has issues with WebSocket broadcast in test environment -/* -test(suiteId, uniqueId('broadcast-client-disconnect'), async () => { - const client1 = createWebSocketClient('/api/ws/broadcast'); - const client2 = createWebSocketClient('/api/ws/broadcast'); - - await client1.connect(); - await client2.connect(); - - await new Promise((resolve) => setTimeout(resolve, 100)); - - client1.send('Initial test'); - const init1 = await client1.receive(2000); - const init2 = await client2.receive(2000); - assertEqual(init1, 'Initial test'); - assertEqual(init2, 'Initial test'); - - await client2.close(); - await new Promise((resolve) => setTimeout(resolve, 300)); - - client1.send('After disconnect'); - const msg = await client1.receive(3000); - assertEqual(msg, 'After disconnect'); - - await client1.close(); -}); -*/ - -// Test 10: Large message handling -test(suiteId, uniqueId('large-message-handling'), async () => { - const client = createWebSocketClient('/api/ws/echo'); - - await client.connect(); - - // Create a large message (10KB) - const largeMessage = 'x'.repeat(10 * 1024); - client.send(largeMessage); - - const echo = await client.receive(); - assertEqual(echo.length, largeMessage.length); - assertEqual(echo, largeMessage); - - await client.close(); -}); - -// Test 11: Rapid message exchange -test(suiteId, uniqueId('rapid-message-exchange'), async () => { - const client = createWebSocketClient('/api/ws/echo'); - - await client.connect(); - - // Send 50 messages rapidly - const messageCount = 50; - for (let i = 0; i < messageCount; i++) { - client.send(`Message ${i}`); - } - - // Receive all echoes - const received: string[] = []; - for (let i = 0; i < messageCount; i++) { - const msg = await client.receive(); - received.push(msg); - } - - // Verify all messages received in order - assertEqual(received.length, messageCount); - for (let i = 0; i < messageCount; i++) { - assertEqual(received[i], `Message ${i}`); - } - - await client.close(); -}); - -// Test 12: Connection persistence -test(suiteId, uniqueId('connection-persistence'), async () => { - const client = createWebSocketClient('/api/ws/counter'); - - await client.connect(); - - // Get initial count - const initial = await client.receiveJSON(); - - // Increment - client.send({ action: 'increment' }); - await client.receiveJSON(); - - // Wait 2 seconds - await new Promise((resolve) => setTimeout(resolve, 2000)); - - // Connection should still be active - assert(client.isConnected(), 'Connection should still be active after 2 seconds'); - - // Increment again - client.send({ action: 'increment' }); - const response = await client.receiveJSON(); - assertEqual(response.value, initial.value + 2); - - await client.close(); -}); diff --git a/apps/testing/integration-suite/src/types/middleware.d.ts b/apps/testing/integration-suite/src/types/middleware.d.ts deleted file mode 100644 index 9adbe914f..000000000 --- a/apps/testing/integration-suite/src/types/middleware.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Type declarations for custom middleware variables - * This extends the Hono ContextVariableMap to add our custom types - */ - -import type { MockDatabaseClient, MockAuthUser } from '../lib/custom-middleware'; - -declare module 'hono' { - interface ContextVariableMap { - // Database clients - clickhouseClient?: MockDatabaseClient; - postgresClient?: MockDatabaseClient; - - // Auth - authUser?: MockAuthUser; - - // Analytics - requestId?: string; - requestCount?: number; - - // App-level custom data - appLevelData?: string; - - // API-level custom data - apiLevelData?: string; - } -} diff --git a/apps/testing/integration-suite/src/web/AGENTS.md b/apps/testing/integration-suite/src/web/AGENTS.md deleted file mode 100644 index d8975fc8d..000000000 --- a/apps/testing/integration-suite/src/web/AGENTS.md +++ /dev/null @@ -1,284 +0,0 @@ -# Web Folder Guide - -This folder contains your React-based web application that communicates with your Agentuity agents. - -## Directory Structure - -Required files: - -- **App.tsx** (required) - Main React application component -- **frontend.tsx** (required) - Frontend entry point with client-side rendering -- **index.html** (required) - HTML template -- **public/** (optional) - Static assets (images, CSS, JS files) - -Example structure: - -``` -src/web/ -├── App.tsx -├── frontend.tsx -├── index.html -└── public/ - ├── styles.css - ├── logo.svg - └── script.js -``` - -## Creating the Web App - -### App.tsx - Main Component - -```typescript -import { AgentuityProvider, useAgent } from '@agentuity/react'; -import { useState } from 'react'; - -export function App() { - const [name, setName] = useState('World'); - const { run, running, data: greeting } = useAgent('hello'); - - return ( -
- -

Welcome to Agentuity

- - setName(e.target.value)} - disabled={running} - /> - - - -
{greeting ?? 'Waiting for response'}
-
-
- ); -} -``` - -### frontend.tsx - Entry Point - -```typescript -import { createRoot } from 'react-dom/client'; -import { App } from './App'; - -const root = document.getElementById('root'); -if (!root) throw new Error('Root element not found'); - -createRoot(root).render(); -``` - -### index.html - HTML Template - -```html - - - - - - My Agentuity App - - -
- - - -``` - -## React Hooks - -### useAgent - Call Agents - -```typescript -import { useAgent } from '@agentuity/react'; - -function MyComponent() { - const { run, running, data, error } = useAgent('myAgent'); - - return ( - - ); -} -``` - -### useAgentWebsocket - WebSocket Connection - -```typescript -import { useAgentWebsocket } from '@agentuity/react'; - -function MyComponent() { - const { connected, send, data } = useAgentWebsocket('websocket'); - - return ( -
-

Status: {connected ? 'Connected' : 'Disconnected'}

- -

Received: {data}

-
- ); -} -``` - -### useAgentEventStream - Server-Sent Events - -```typescript -import { useAgentEventStream } from '@agentuity/react'; - -function MyComponent() { - const { connected, data, error } = useAgentEventStream('sse'); - - return ( -
-

Connected: {connected ? 'Yes' : 'No'}

- {error &&

Error: {error.message}

} -

Data: {data}

-
- ); -} -``` - -## Complete Example - -```typescript -import { AgentuityProvider, useAgent, useAgentWebsocket } from '@agentuity/react'; -import { useEffect, useState } from 'react'; - -export function App() { - const [count, setCount] = useState(0); - const { run, data: agentResult } = useAgent('simple'); - const { connected, send, data: wsMessage } = useAgentWebsocket('websocket'); - - useEffect(() => { - // Send WebSocket message every second - const interval = setInterval(() => { - send(`Message at ${new Date().toISOString()}`); - }, 1000); - return () => clearInterval(interval); - }, [send]); - - return ( -
- -

My Agentuity App

- -
-

Count: {count}

- -
- -
- -

{agentResult}

-
- -
- WebSocket: - {connected ? JSON.stringify(wsMessage) : 'Not connected'} -
-
-
- ); -} -``` - -## Static Assets - -Place static files in the **public/** folder: - -``` -src/web/public/ -├── logo.svg -├── styles.css -└── script.js -``` - -Reference them in your HTML or components: - -```html - - - -``` - -```typescript -// In React components -Logo -``` - -## Styling - -### Inline Styles - -```typescript -
- Styled content -
-``` - -### CSS Files - -Create `public/styles.css`: - -```css -body { - background-color: #09090b; - color: #fff; - font-family: sans-serif; -} -``` - -Import in `index.html`: - -```html - -``` - -### Style Tag in Component - -```typescript -
- - -
-``` - -## Best Practices - -- Wrap your app with **AgentuityProvider** for hooks to work -- Use **useAgent** for one-off agent calls -- Use **useAgentWebsocket** for bidirectional real-time communication -- Use **useAgentEventStream** for server-to-client streaming -- Place reusable components in separate files -- Keep static assets in the **public/** folder -- Use TypeScript for type safety -- Handle loading and error states in UI - -## Rules - -- **App.tsx** must export a function named `App` -- **frontend.tsx** must render the `App` component to `#root` -- **index.html** must have a `
` -- All agents are accessible via `useAgent('agentName')` -- The web app is served at `/` by default -- Static files in `public/` are served at `/public/*` -- Module script tag: `` diff --git a/apps/testing/integration-suite/src/web/App.tsx b/apps/testing/integration-suite/src/web/App.tsx deleted file mode 100644 index 23c3b92ff..000000000 --- a/apps/testing/integration-suite/src/web/App.tsx +++ /dev/null @@ -1,697 +0,0 @@ -import { useState, useEffect } from 'react'; - -interface TestInfo { - name: string; -} - -interface SuiteInfo { - name: string; - tests: TestInfo[]; - count: number; -} - -interface TestResult { - test: string; - passed: boolean; - error?: string; - stack?: string; - duration: number; -} - -interface Summary { - total: number; - passed: number; - failed: number; - duration: number; -} - -function formatDuration(ms: number): string { - if (ms < 1000) { - return `${ms.toFixed(0)}ms`; - } else if (ms < 60000) { - return `${(ms / 1000).toFixed(1)}s`; - } else { - const minutes = Math.floor(ms / 60000); - const seconds = Math.floor((ms % 60000) / 1000); - return `${minutes}m ${seconds}s`; - } -} - -export function App() { - const [suites, setSuites] = useState([]); - const [loading, setLoading] = useState(true); - const [running, setRunning] = useState(false); - const [results, setResults] = useState>(new Map()); - const [summary, setSummary] = useState(null); - const [expandedSuites, setExpandedSuites] = useState>(new Set()); - const [lastActivity, setLastActivity] = useState(''); - - useEffect(() => { - fetch('/api/test/list') - .then((res) => res.json()) - .then((data: { suites: SuiteInfo[] }) => { - setSuites(data.suites); - setLoading(false); - }) - .catch((err) => { - console.error('Failed to load tests:', err); - setLoading(false); - }); - }, []); - - const runTests = (suite?: string, test?: string) => { - setRunning(true); - setResults(new Map()); - setSummary(null); - setLastActivity(''); - - // Auto-expand all suites when running all tests - if (!suite && !test) { - setExpandedSuites(new Set(suites.map((s) => s.name))); - } - - const params = new URLSearchParams(); - if (suite) params.set('suite', suite); - if (test) params.set('test', test); - params.set('concurrency', '10'); - - const url = `/api/test/run?${params.toString()}`; - const eventSource = new EventSource(url); - - eventSource.addEventListener('progress', (e: Event) => { - const data = JSON.parse((e as MessageEvent).data); - setLastActivity(data.test); - setResults((prev) => { - const next = new Map(prev); - next.set(data.test, { - test: data.test, - passed: data.passed, - error: data.error, - stack: data.stack, - duration: data.duration, - }); - - // Check if suite is complete and all passed - const suiteName = data.test.split(':')[0]; - const suiteInfo = suites.find((s) => s.name === suiteName); - if (suiteInfo) { - const suiteTests = suiteInfo.tests.map((t) => `${suiteName}:${t.name}`); - const suiteComplete = suiteTests.every((testKey) => next.has(testKey)); - const allPassed = suiteTests.every((testKey) => next.get(testKey)?.passed); - - // Auto-collapse suite if all tests passed - if (suiteComplete && allPassed) { - setExpandedSuites((prevExpanded) => { - const nextExpanded = new Set(prevExpanded); - nextExpanded.delete(suiteName); - return nextExpanded; - }); - } - } - - return next; - }); - }); - - eventSource.addEventListener('complete', (e: Event) => { - const data = JSON.parse((e as MessageEvent).data); - setSummary(data.summary); - setRunning(false); - eventSource.close(); - }); - - eventSource.onerror = () => { - setRunning(false); - eventSource.close(); - }; - }; - - const toggleSuite = (suiteName: string) => { - setExpandedSuites((prev) => { - const next = new Set(prev); - if (next.has(suiteName)) { - next.delete(suiteName); - } else { - next.add(suiteName); - } - return next; - }); - }; - - const getTestResult = (suite: string, test: string) => { - return results.get(`${suite}:${test}`); - }; - - if (loading) { - return ( -
- Loading tests... -
- ); - } - - return ( -
-
- {/* Header */} -
- - -

- Integration Test Suite -

- -

- Comprehensive SDK Validation & Testing -

- -
-
- -
- - {/* Live Activity Indicator */} - {running && lastActivity && ( -
-
- - {lastActivity} - -
- )} -
- - {/* Summary */} - {summary && ( -
-

- Test Results -

-
-
-
- Total -
-
- {summary.total} -
-
-
-
- Passed -
-
- {summary.passed} -
-
-
-
- Failed -
-
- {summary.failed} -
-
-
-
- Duration -
-
- {formatDuration(summary.duration)} -
-
-
-
- )} - - {/* Test Suites */} -
- {suites.map((suite) => { - const isExpanded = expandedSuites.has(suite.name); - const suiteResults = suite.tests - .map((t) => getTestResult(suite.name, t.name)) - .filter((r) => r !== undefined); - const suitePassed = suiteResults.filter((r) => r?.passed).length; - const suiteFailed = suiteResults.filter((r) => !r?.passed).length; - - return ( -
- {/* Suite Header */} -
-
- -

- {suite.name} -

- - {suite.count} tests - - {suiteResults.length > 0 && ( -
- {suitePassed > 0 && ( - ✓ {suitePassed} - )} - {suiteFailed > 0 && ( - ✗ {suiteFailed} - )} -
- )} -
- -
- - {/* Suite Tests */} - {isExpanded && ( -
- {suite.tests.map((test) => { - const result = getTestResult(suite.name, test.name); - const testKey = `${suite.name}:${test.name}`; - const isRecentlyCompleted = lastActivity === testKey; - const isRunningNow = running && !result; - - return ( -
-
- {/* Status Icon */} -
- {isRunningNow ? ( -
- - ⋯ - -
- ) : result ? ( - result.passed ? ( -
- - ✓ - -
- ) : ( -
- - ✗ - -
- ) - ) : ( -
- )} -
- - {/* Test Name and Error */} -
-
- {test.name} -
- {result?.error && ( -
-
- Error: -
-
{result.error}
- {result.stack && ( -
- - Stack trace - -
-																				{result.stack}
-																			
-
- )} -
- )} -
- - {/* Duration */} - {result && ( -
- {formatDuration(result.duration)} -
- )} -
- - -
- ); - })} -
- )} -
- ); - })} -
-
- - -
- ); -} diff --git a/apps/testing/integration-suite/src/web/frontend.tsx b/apps/testing/integration-suite/src/web/frontend.tsx deleted file mode 100644 index 96c7debb6..000000000 --- a/apps/testing/integration-suite/src/web/frontend.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import { App } from './App'; - -const elem = document.getElementById('root')!; -const app = ( - - - -); - -if (import.meta.hot) { - import.meta.hot.data.root ??= createRoot(elem); - const root = import.meta.hot.data.root; - root.render(app); -} else { - createRoot(elem).render(app); -} diff --git a/apps/testing/integration-suite/src/web/index.html b/apps/testing/integration-suite/src/web/index.html deleted file mode 100644 index 92ace0611..000000000 --- a/apps/testing/integration-suite/src/web/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - Agentuity Integration Test Suite - - - - -
- - diff --git a/apps/testing/integration-suite/test/index.test.ts b/apps/testing/integration-suite/test/index.test.ts new file mode 100644 index 000000000..d2dfc5d01 --- /dev/null +++ b/apps/testing/integration-suite/test/index.test.ts @@ -0,0 +1,114 @@ +import { describe, test, expect } from 'bun:test'; +import app from '../src/index'; + +describe('integration-suite', () => { + test('GET / lists available services', async () => { + const res = await app.fetch(new Request('http://localhost/')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.name).toBe('integration-suite'); + expect(body.services).toContain('keyvalue'); + expect(body.services).toContain('vector'); + }); + + test('GET /api/health returns ok', async () => { + const res = await app.fetch(new Request('http://localhost/api/health')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.status).toBe('ok'); + }); +}); + +describe('api routes exist', () => { + test('POST /api/kv/set', async () => { + const res = await app.fetch( + new Request('http://localhost/api/kv/set', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ key: 'test', value: 'hello' }), + }) + ); + expect(res.status).toBe(200); + }); + + test('GET /api/kv/get/:key', async () => { + const res = await app.fetch(new Request('http://localhost/api/kv/get/test')); + expect(res.status).toBe(200); + }); + + test('POST /api/vector/upsert', async () => { + const res = await app.fetch( + new Request('http://localhost/api/vector/upsert', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id: 'doc1', text: 'hello world' }), + }) + ); + expect(res.status).toBe(200); + }); + + test('POST /api/vector/search', async () => { + const res = await app.fetch( + new Request('http://localhost/api/vector/search', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query: 'hello' }), + }) + ); + expect(res.status).toBe(200); + }); + + test('POST /api/queue/publish', async () => { + const res = await app.fetch( + new Request('http://localhost/api/queue/publish', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ topic: 'test', data: { foo: 'bar' } }), + }) + ); + expect(res.status).toBe(200); + }); +}); + +describe.skip('services integration (requires AGENTUITY_SDK_KEY)', () => { + // These tests require a deployed environment with real Agentuity services. + // Enable once the backend supports launch.json-based deployments. + + test('keyvalue: set and get round-trip', async () => { + // TODO: Set a key, get it back, verify value matches + }); + + test('vector: upsert and search', async () => { + // TODO: Upsert a document, search for it, verify result + }); + + test('queue: publish and consume', async () => { + // TODO: Publish a message, verify it was received + }); + + test('email: send test email', async () => { + // TODO: Send via @agentuity/email, verify no error + }); + + test('schedule: create and list', async () => { + // TODO: Create a schedule, list it back + }); + + test('task: create and poll', async () => { + // TODO: Create a task, poll for completion + }); +}); + +describe.skip('deploy', () => { + test('agentuity build produces valid output', async () => { + // TODO: Verify launch.json + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify + }); + + test('deployed app health check passes', async () => { + // TODO: Hit /api/health on deployed URL + }); +}); diff --git a/apps/testing/integration-suite/tsconfig.json b/apps/testing/integration-suite/tsconfig.json index 6d19ce10d..a77c116e6 100644 --- a/apps/testing/integration-suite/tsconfig.json +++ b/apps/testing/integration-suite/tsconfig.json @@ -1,13 +1,10 @@ { - "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "./.agentuity", - "rootDir": ".", - "allowImportingTsExtensions": true, - "noEmit": true, - "jsx": "react-jsx", - "lib": ["ESNext", "DOM"], - "types": ["bun-types"], + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, "skipLibCheck": true, "paths": { "@agents/*": ["./src/agent/*"], diff --git a/apps/testing/nextjs-app/.gitignore b/apps/testing/nextjs-app/.gitignore deleted file mode 100644 index add327756..000000000 --- a/apps/testing/nextjs-app/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.next -node_modules -agentuity/.agentuity diff --git a/apps/testing/nextjs-app/README.md b/apps/testing/nextjs-app/README.md deleted file mode 100644 index 6b32f25ee..000000000 --- a/apps/testing/nextjs-app/README.md +++ /dev/null @@ -1,136 +0,0 @@ -# Next.js + Agentuity Integration Demo - -This application demonstrates type-safe integration between Next.js App Router frontend and Agentuity agent backend. - -## Architecture - -``` -nextjs-app/ -├── app/ # Next.js App Router (port 3001) -│ ├── components/ -│ │ └── EchoDemo.tsx # Client component using useAPI hook -│ ├── layout.tsx # Root layout -│ └── page.tsx # Home page -├── agentuity/ # Agentuity agent backend (port 3500) -│ ├── src/ -│ │ ├── agent/echo/agent.ts # Echo agent with typed schemas -│ │ ├── api/index.ts # API routes -│ │ └── generated/routes.ts # Auto-generated type definitions -│ └── app.ts -├── next.config.ts # API rewrites to backend -└── tsconfig.json # TypeScript path aliases -``` - -## Key Integration Points - -### 1. API Rewrites (next.config.ts) - -Next.js rewrites `/api/*` requests to the Agentuity backend: - -```typescript -const nextConfig: NextConfig = { - async rewrites() { - return [ - { - source: '/api/:path*', - destination: 'http://localhost:3500/api/:path*', - }, - ]; - }, -}; -``` - -### 2. Type-Safe Routes (tsconfig.json paths) - -Path aliases enable importing generated route types: - -```json -{ - "paths": { - "@agentuity/routes": ["./agentuity/src/generated/routes.ts"] - } -} -``` - -### 3. Client Component (EchoDemo.tsx) - -The `useAPI` hook provides full type inference with the `'use client'` directive: - -```tsx -'use client'; - -import { useAPI, AgentuityProvider } from '@agentuity/react'; -import '@agentuity/routes'; // Side-effect import for type augmentation - -function EchoDemoInner() { - // TypeScript knows: input = { message: string }, output = { echo: string, timestamp: string } - const { data, invoke, isLoading, error } = useAPI('POST /api/echo'); - - return ; -} - -export default function EchoDemo() { - return ( - - - - ); -} -``` - -### 4. Echo Agent (agent.ts) - -Typed agent with input/output schemas: - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export const EchoInput = s.object({ - message: s.string(), -}); - -export const EchoOutput = s.object({ - echo: s.string(), - timestamp: s.string(), -}); - -const agent = createAgent('echo', { - schema: { input: EchoInput, output: EchoOutput }, - handler: async (ctx, { message }) => ({ - echo: message, - timestamp: new Date().toISOString(), - }), -}); -``` - -## Development - -```bash -# Install dependencies (from SDK root) -bun install - -# Build agent backend (generates routes.ts) -bun run build:agent - -# Run both frontend and backend concurrently -bun run dev -``` - -- Frontend: http://localhost:3001 -- Backend: http://localhost:3500 -- Workbench: http://localhost:3500/workbench - -## Type Safety Flow - -1. Agent schemas defined in `agent.ts` using `@agentuity/schema` -2. Build generates `routes.ts` with `declare module '@agentuity/frontend'` -3. Frontend imports `@agentuity/routes` (side-effect import) -4. `useAPI('POST /api/echo')` infers types from RouteRegistry augmentation -5. TypeScript validates `invoke({ message })` and `data.echo` at compile time - -## Next.js Specific Notes - -- Use `'use client'` directive for components using `useAPI` hook -- The `AgentuityProvider` must wrap any component using Agentuity hooks -- API rewrites only work in development; for production, configure your deployment platform diff --git a/apps/testing/nextjs-app/agentuity/.agents/agentuity/sdk/agent/AGENTS.md b/apps/testing/nextjs-app/agentuity/.agents/agentuity/sdk/agent/AGENTS.md deleted file mode 100644 index 3c5330d3c..000000000 --- a/apps/testing/nextjs-app/agentuity/.agents/agentuity/sdk/agent/AGENTS.md +++ /dev/null @@ -1,308 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `routes.ts` - Route registry for API, WebSocket, and SSE endpoints -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - const user = await ctx.kv.get('user:123'); - await ctx.kv.delete('user:123'); - const keys = await ctx.kv.list('user:*'); - return user; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) - - diff --git a/apps/testing/nextjs-app/agentuity/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/nextjs-app/agentuity/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index e6c32b3fb..000000000 --- a/apps/testing/nextjs-app/agentuity/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,367 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with strongly-typed route definitions and schema types -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your routes: - -```typescript -import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes'; -``` - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import myAgent from '@agent/my-agent'; - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse((c, stream) => { - stream.writeSSE({ data: 'Hello', event: 'message' }); - stream.writeSSE({ data: 'World', event: 'message' }); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/nextjs-app/agentuity/.agentuity/app.js b/apps/testing/nextjs-app/agentuity/.agentuity/app.js deleted file mode 100644 index e94ce9615..000000000 --- a/apps/testing/nextjs-app/agentuity/.agentuity/app.js +++ /dev/null @@ -1,168630 +0,0 @@ -// @bun -var __create = Object.create; -var __getProtoOf = Object.getPrototypeOf; -var __defProp = Object.defineProperty; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __toESM = (mod2, isNodeMode, target) => { - target = mod2 != null ? __create(__getProtoOf(mod2)) : {}; - const to = isNodeMode || !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target; - for (let key of __getOwnPropNames(mod2)) - if (!__hasOwnProp.call(to, key)) - __defProp(to, key, { - get: () => mod2[key], - enumerable: true - }); - return to; -}; -var __moduleCache = /* @__PURE__ */ new WeakMap; -var __toCommonJS = (from) => { - var entry = __moduleCache.get(from), desc; - if (entry) - return entry; - entry = __defProp({}, "__esModule", { value: true }); - if (from && typeof from === "object" || typeof from === "function") - __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, { - get: () => from[key], - enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable - })); - __moduleCache.set(from, entry); - return entry; -}; -var __commonJS = (cb, mod2) => () => (mod2 || cb((mod2 = { exports: {} }).exports, mod2), mod2.exports); -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { - get: all[name], - enumerable: true, - configurable: true, - set: (newValue) => all[name] = () => newValue - }); -}; -var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res); -var __require = import.meta.require; - -// ../../../../packages/core/dist/json.js -function safeStringify(obj, space) { - const visited = new WeakSet; - function replacer(_key, value) { - if (typeof value === "bigint") { - return value.toString(); - } - if (typeof value === "object" && value !== null) { - if (visited.has(value)) { - return "[Circular]"; - } - visited.add(value); - return value; - } - return value; - } - return JSON.stringify(obj, replacer, space); -} - -// ../../../../packages/core/dist/error.js -function StructuredError(tag, defaultMessage) { - function createErrorClass() { - const tagArgsSym = Symbol.for(`@StructuredError:tag:${tag}`); - - class Tagged extends RichError { - _tag = tag; - static defaultMessage = defaultMessage; - constructor(args) { - const safeArgs = args && typeof args === "object" ? (() => { - const { _tag: _discard, ...rest } = args; - return rest; - })() : args; - const finalArgs = safeArgs && typeof safeArgs === "object" ? { ...safeArgs, message: safeArgs.message ?? defaultMessage } : defaultMessage ? { message: defaultMessage } : safeArgs; - super(finalArgs); - try { - Object.defineProperty(this, "name", { value: tag, configurable: true }); - } catch { - this.name = tag; - } - Object.defineProperty(this, _structuredSym, { - value: true, - enumerable: false, - writable: false - }); - Object.defineProperty(this, tagArgsSym, { - value: safeArgs, - enumerable: false, - writable: true - }); - } - } - try { - Object.defineProperty(Tagged, "name", { value: String(tag) }); - } catch { - Tagged.name = tag; - } - return Tagged; - } - const baseClass = createErrorClass(); - const callable = new Proxy(baseClass, { - apply(_target, _thisArg, _args) { - return createErrorClass(); - } - }); - return callable; -} -var util, _argsSym, _causeSym, _metaSym, _structuredSym, spacer = " ", RichError; -var init_error = __esm(() => { - if (typeof process !== "undefined" && process.versions?.node) { - try { - util = __require("util"); - } catch {} - } - _argsSym = Symbol("@@RichError:plainArgs"); - _causeSym = Symbol("@@RichError:cause"); - _metaSym = Symbol("@@RichError:meta"); - _structuredSym = Symbol.for("@@StructuredError"); - RichError = class RichError extends Error { - [_argsSym]; - [_causeSym]; - [_metaSym]; - constructor(args) { - const message = args?.message ?? undefined; - const cause = args?.cause ?? undefined; - if (cause !== undefined) { - super(message, { cause }); - } else { - super(message); - } - Object.setPrototypeOf(this, new.target.prototype); - if (typeof Error.captureStackTrace === "function") { - Error.captureStackTrace(this, new.target); - } else { - if (!this.stack) { - this.stack = new Error(message).stack; - } - } - if (args && typeof args === "object") { - const { cause: _c, message: _m, ...rest } = args; - if (Object.keys(rest).length > 0) { - Object.assign(this, rest); - this[_argsSym] = rest; - } - if (cause !== undefined) { - this[_causeSym] = cause; - } - } - Object.defineProperty(this, _argsSym, { - value: this[_argsSym], - enumerable: false, - writable: true - }); - Object.defineProperty(this, _causeSym, { - value: this[_causeSym], - enumerable: false, - writable: true - }); - Object.defineProperty(this, _metaSym, { - value: this[_metaSym] ?? {}, - enumerable: false, - writable: true - }); - } - get plainArgs() { - return this[_argsSym]; - } - get cause() { - return this[_causeSym]; - } - prettyPrint(space = 2) { - const lines = []; - const visited = new Set; - let cur = this; - let depth = 0; - while (cur && cur instanceof Error && !visited.has(cur)) { - const curAny = cur; - visited.add(cur); - const header = `${cur.name}${curAny._tag && curAny._tag !== cur.name ? ` (${String(curAny._tag)})` : ""}${depth === 0 ? "" : " [cause]"}`; - const msg = cur.message !== undefined && cur.message !== "" ? `: ${cur.message}` : ""; - lines.push(header + msg); - if (cur.stack) { - lines.push(""); - lines.push(spacer + "stack trace:"); - const stackLines = String(cur.stack).split(` -`).slice(1); - if (stackLines.length > 0) { - let s = stackLines.map((s2) => spacer + spacer + s2.trim()); - if (s[s.length - 1].includes("processTicksAndRejections")) { - s = s.slice(0, s.length - 1); - } - lines.push(...s); - } - } - if (curAny[_argsSym]) { - let argsStr; - if (util?.formatWithOptions) { - argsStr = util.formatWithOptions({ - depth: 10, - sorted: true, - showHidden: false, - showProxy: false, - maxArrayLength: 10, - maxStringLength: 80 - spacer.length * 2 - }, curAny[_argsSym]); - } else { - argsStr = safeStringify(curAny[_argsSym]); - } - argsStr = argsStr.replace(/^{/, "").replace(/}$/, ""); - const jsonlines = argsStr.split(` -`).filter(Boolean).map((l) => spacer + spacer + l + ` -`).join(""); - lines.push(""); - lines.push(spacer + `context: -` + jsonlines); - } - const c = cur.cause ?? curAny[_causeSym]; - if (c && !(c instanceof Error)) { - lines.push(spacer + "cause: " + safeStringify(c, space)); - } - cur = c instanceof Error ? c : undefined; - depth += 1; - if (cur) - lines.push("-- caused by --"); - } - return lines.join(` -`); - } - toJSON() { - const output = {}; - if (this[_argsSym]) { - Object.assign(output, this[_argsSym]); - } - for (const k of Object.keys(this)) { - output[k] = this[k]; - } - output.name = this.name; - if (this.message !== undefined) - output.message = this.message; - if (this.stack !== undefined) - output.stack = this.stack; - if (this.cause !== undefined) { - if (this.cause instanceof Error) { - output.cause = { - name: this.cause.name, - message: this.cause.message, - stack: this.cause.stack - }; - } else { - output.cause = this.cause; - } - } - return output; - } - toString() { - return this.prettyPrint(2); - } - [util?.inspect?.custom || Symbol.for("nodejs.util.inspect.custom")](_depth, _options) { - return this.prettyPrint(); - } - }; -}); - -// ../../../../packages/core/dist/services/exception.js -var ServiceException; -var init_exception = __esm(() => { - init_error(); - ServiceException = StructuredError("ServiceException")(); -}); - -// ../../../../packages/core/dist/services/_util.js -async function toServiceException(method, url, response) { - const sessionId = response.headers.get("x-session-id"); - switch (response.status) { - case 401: - case 403: - return new ServiceException({ - message: "Unauthorized", - method, - url, - statusCode: response.status, - sessionId - }); - case 404: - return new ServiceException({ - message: "Not Found", - method, - url, - statusCode: response.status, - sessionId - }); - default: - } - const ct = response.headers.get("content-type"); - if (ct?.includes("json")) { - try { - const payload = await response.json(); - if (payload.error) { - return new ServiceException({ - message: payload.error, - method, - url, - statusCode: response.status, - sessionId - }); - } - if (payload.message) { - return new ServiceException({ - message: payload.message, - method, - url, - statusCode: response.status, - sessionId - }); - } - return new ServiceException({ - message: JSON.stringify(payload), - method, - url, - statusCode: response.status, - sessionId - }); - } catch {} - } - try { - const body = await response.text(); - return new ServiceException({ - message: body, - method, - url, - statusCode: response.status, - sessionId - }); - } catch {} - return new ServiceException({ - message: response.statusText, - method, - url, - statusCode: response.status, - sessionId - }); -} -async function toPayload(data) { - if (data === undefined || data === null) { - return ["", textContentType]; - } - switch (typeof data) { - case "string": - if (data.charAt(0) === "{" && data.charAt(data.length - 1) === "}" || data.charAt(0) === "[" && data.charAt(data.length - 1) === "]") { - try { - JSON.parse(data); - return [data, jsonContentType]; - } catch {} - } - return [data, textContentType]; - case "boolean": - case "number": - return [JSON.stringify(data), jsonContentType]; - case "object": { - if (data instanceof ArrayBuffer) { - return [data, binaryContentType]; - } - if (data instanceof Uint8Array) { - return [data.buffer, binaryContentType]; - } - if (data instanceof ReadableStream) { - return [data, binaryContentType]; - } - if (data instanceof Promise) { - return toPayload(await data); - } - if (data instanceof Function) { - return toPayload(data()); - } - return [safeStringify(data), jsonContentType]; - } - } - return ["", textContentType]; -} -async function fromResponse(response) { - const rawContentType = response.headers.get("content-type") ?? ""; - const contentType = rawContentType.toLowerCase(); - if (!contentType || contentType.includes("json")) { - return await response.json(); - } - if (contentType.startsWith("text/")) { - const text = await response.text(); - if (text.trim().startsWith("{") || text.trim().startsWith("[")) { - try { - return JSON.parse(text); - } catch {} - } - return text; - } - return await response.arrayBuffer(); -} -var buildUrl = (base, path, subpath, query) => { - path = path.startsWith("/") ? path : `/${path}`; - let url = base.replace(/\/$/, "") + path; - if (subpath) { - subpath = subpath.startsWith("/") ? subpath : `/${subpath}`; - url += subpath; - } - if (query) { - url += `?${query.toString()}`; - } - return url; -}, binaryContentType = "application/octet-stream", textContentType = "text/plain", jsonContentType = "application/json"; -var init__util = __esm(() => { - init_exception(); -}); - -// ../../../../packages/core/dist/services/keyvalue.js -class KeyValueStorageService { - #adapter; - #baseUrl; - constructor(baseUrl, adapter) { - this.#adapter = adapter; - this.#baseUrl = baseUrl; - } - async get(name, key) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/${encodeURIComponent(name)}/${encodeURIComponent(key)}`); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url, { - method: "GET", - signal, - telemetry: { - name: "agentuity.keyvalue.get", - attributes: { - name, - key - } - } - }); - if (res.ok) { - return { - data: res.data, - contentType: res.response.headers.get("content-type") ?? "application/octet-stream", - exists: true - }; - } - if (res.response.status === 404) { - return { exists: false }; - } - throw await toServiceException("GET", url, res.response); - } - async set(name, key, value, params) { - let ttlstr = ""; - if (params?.ttl) { - if (params.ttl < 60) { - throw new KeyValueInvalidTTLError({ - message: `ttl for keyvalue set must be at least 60 seconds, got ${params.ttl}` - }); - } - ttlstr = `/${params.ttl}`; - } - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/${encodeURIComponent(name)}/${encodeURIComponent(key)}${ttlstr}`); - const [body, contentType] = await toPayload(value); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url, { - method: "PUT", - signal, - body, - contentType: params?.contentType || contentType, - telemetry: { - name: "agentuity.keyvalue.set", - attributes: { - name, - key, - ttl: ttlstr - } - } - }); - if (res.ok) { - return; - } - throw await toServiceException("PUT", url, res.response); - } - async delete(name, key) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/${encodeURIComponent(name)}/${encodeURIComponent(key)}`); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url, { - method: "DELETE", - signal, - telemetry: { - name: "agentuity.keyvalue.delete", - attributes: { - name, - key - } - } - }); - if (res.ok) { - return; - } - throw await toServiceException("DELETE", url, res.response); - } - async getStats(name) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/stats/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url, { - method: "GET", - signal, - telemetry: { - name: "agentuity.keyvalue.getStats", - attributes: { name } - } - }); - if (res.ok) { - return res.data; - } - throw await toServiceException("GET", url, res.response); - } - async getAllStats() { - const url = buildUrl(this.#baseUrl, "/kv/2025-03-17/stats"); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url, { - method: "GET", - signal, - telemetry: { - name: "agentuity.keyvalue.getAllStats", - attributes: {} - } - }); - if (res.ok) { - return res.data; - } - throw await toServiceException("GET", url, res.response); - } - async getNamespaces() { - const stats = await this.getAllStats(); - return Object.keys(stats); - } - async search(name, keyword) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/search/${encodeURIComponent(name)}/${encodeURIComponent(keyword)}`); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url, { - method: "GET", - signal, - telemetry: { - name: "agentuity.keyvalue.search", - attributes: { name, keyword } - } - }); - if (res.ok) { - return res.data; - } - throw await toServiceException("GET", url, res.response); - } - async getKeys(name) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/keys/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url, { - method: "GET", - signal, - telemetry: { - name: "agentuity.keyvalue.getKeys", - attributes: { name } - } - }); - if (res.ok) { - return res.data; - } - throw await toServiceException("GET", url, res.response); - } - async deleteNamespace(name) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url, { - method: "DELETE", - signal, - telemetry: { - name: "agentuity.keyvalue.deleteNamespace", - attributes: { name } - } - }); - if (res.ok) { - return; - } - throw await toServiceException("DELETE", url, res.response); - } - async createNamespace(name) { - const url = buildUrl(this.#baseUrl, `/kv/2025-03-17/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url, { - method: "POST", - signal, - telemetry: { - name: "agentuity.keyvalue.createNamespace", - attributes: { name } - } - }); - if (res.ok) { - return; - } - throw await toServiceException("POST", url, res.response); - } -} -var KeyValueInvalidTTLError; -var init_keyvalue = __esm(() => { - init__util(); - init_error(); - KeyValueInvalidTTLError = StructuredError("KeyValueInvalidTTLError"); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/core.js -function $constructor(name, initializer, params) { - function init(inst, def) { - if (!inst._zod) { - Object.defineProperty(inst, "_zod", { - value: { - def, - constr: _, - traits: new Set - }, - enumerable: false - }); - } - if (inst._zod.traits.has(name)) { - return; - } - inst._zod.traits.add(name); - initializer(inst, def); - const proto = _.prototype; - const keys = Object.keys(proto); - for (let i = 0;i < keys.length; i++) { - const k = keys[i]; - if (!(k in inst)) { - inst[k] = proto[k].bind(inst); - } - } - } - const Parent = params?.Parent ?? Object; - - class Definition extends Parent { - } - Object.defineProperty(Definition, "name", { value: name }); - function _(def) { - var _a; - const inst = params?.Parent ? new Definition : this; - init(inst, def); - (_a = inst._zod).deferred ?? (_a.deferred = []); - for (const fn of inst._zod.deferred) { - fn(); - } - return inst; - } - Object.defineProperty(_, "init", { value: init }); - Object.defineProperty(_, Symbol.hasInstance, { - value: (inst) => { - if (params?.Parent && inst instanceof params.Parent) - return true; - return inst?._zod?.traits?.has(name); - } - }); - Object.defineProperty(_, "name", { value: name }); - return _; -} -function config(newConfig) { - if (newConfig) - Object.assign(globalConfig, newConfig); - return globalConfig; -} -var NEVER, $brand, $ZodAsyncError, $ZodEncodeError, globalConfig; -var init_core = __esm(() => { - NEVER = Object.freeze({ - status: "aborted" - }); - $brand = Symbol("zod_brand"); - $ZodAsyncError = class $ZodAsyncError extends Error { - constructor() { - super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); - } - }; - $ZodEncodeError = class $ZodEncodeError extends Error { - constructor(name) { - super(`Encountered unidirectional transform during encode: ${name}`); - this.name = "ZodEncodeError"; - } - }; - globalConfig = {}; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/util.js -var exports_util = {}; -__export(exports_util, { - unwrapMessage: () => unwrapMessage, - uint8ArrayToHex: () => uint8ArrayToHex, - uint8ArrayToBase64url: () => uint8ArrayToBase64url, - uint8ArrayToBase64: () => uint8ArrayToBase64, - stringifyPrimitive: () => stringifyPrimitive, - slugify: () => slugify, - shallowClone: () => shallowClone, - safeExtend: () => safeExtend, - required: () => required, - randomString: () => randomString, - propertyKeyTypes: () => propertyKeyTypes, - promiseAllObject: () => promiseAllObject, - primitiveTypes: () => primitiveTypes, - prefixIssues: () => prefixIssues, - pick: () => pick, - partial: () => partial, - parsedType: () => parsedType, - optionalKeys: () => optionalKeys, - omit: () => omit, - objectClone: () => objectClone, - numKeys: () => numKeys, - nullish: () => nullish, - normalizeParams: () => normalizeParams, - mergeDefs: () => mergeDefs, - merge: () => merge, - jsonStringifyReplacer: () => jsonStringifyReplacer, - joinValues: () => joinValues, - issue: () => issue, - isPlainObject: () => isPlainObject, - isObject: () => isObject, - hexToUint8Array: () => hexToUint8Array, - getSizableOrigin: () => getSizableOrigin, - getParsedType: () => getParsedType, - getLengthableOrigin: () => getLengthableOrigin, - getEnumValues: () => getEnumValues, - getElementAtPath: () => getElementAtPath, - floatSafeRemainder: () => floatSafeRemainder, - finalizeIssue: () => finalizeIssue, - extend: () => extend, - escapeRegex: () => escapeRegex, - esc: () => esc, - defineLazy: () => defineLazy, - createTransparentProxy: () => createTransparentProxy, - cloneDef: () => cloneDef, - clone: () => clone, - cleanRegex: () => cleanRegex, - cleanEnum: () => cleanEnum, - captureStackTrace: () => captureStackTrace, - cached: () => cached, - base64urlToUint8Array: () => base64urlToUint8Array, - base64ToUint8Array: () => base64ToUint8Array, - assignProp: () => assignProp, - assertNotEqual: () => assertNotEqual, - assertNever: () => assertNever, - assertIs: () => assertIs, - assertEqual: () => assertEqual, - assert: () => assert, - allowsEval: () => allowsEval, - aborted: () => aborted, - NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES, - Class: () => Class, - BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES -}); -function assertEqual(val) { - return val; -} -function assertNotEqual(val) { - return val; -} -function assertIs(_arg) {} -function assertNever(_x) { - throw new Error("Unexpected value in exhaustive check"); -} -function assert(_) {} -function getEnumValues(entries) { - const numericValues = Object.values(entries).filter((v) => typeof v === "number"); - const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v); - return values; -} -function joinValues(array, separator = "|") { - return array.map((val) => stringifyPrimitive(val)).join(separator); -} -function jsonStringifyReplacer(_, value) { - if (typeof value === "bigint") - return value.toString(); - return value; -} -function cached(getter) { - const set = false; - return { - get value() { - if (!set) { - const value = getter(); - Object.defineProperty(this, "value", { value }); - return value; - } - throw new Error("cached value already set"); - } - }; -} -function nullish(input) { - return input === null || input === undefined; -} -function cleanRegex(source) { - const start = source.startsWith("^") ? 1 : 0; - const end = source.endsWith("$") ? source.length - 1 : source.length; - return source.slice(start, end); -} -function floatSafeRemainder(val, step) { - const valDecCount = (val.toString().split(".")[1] || "").length; - const stepString = step.toString(); - let stepDecCount = (stepString.split(".")[1] || "").length; - if (stepDecCount === 0 && /\d?e-\d?/.test(stepString)) { - const match = stepString.match(/\d?e-(\d?)/); - if (match?.[1]) { - stepDecCount = Number.parseInt(match[1]); - } - } - const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount; - const valInt = Number.parseInt(val.toFixed(decCount).replace(".", "")); - const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", "")); - return valInt % stepInt / 10 ** decCount; -} -function defineLazy(object, key, getter) { - let value = undefined; - Object.defineProperty(object, key, { - get() { - if (value === EVALUATING) { - return; - } - if (value === undefined) { - value = EVALUATING; - value = getter(); - } - return value; - }, - set(v) { - Object.defineProperty(object, key, { - value: v - }); - }, - configurable: true - }); -} -function objectClone(obj) { - return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj)); -} -function assignProp(target, prop, value) { - Object.defineProperty(target, prop, { - value, - writable: true, - enumerable: true, - configurable: true - }); -} -function mergeDefs(...defs) { - const mergedDescriptors = {}; - for (const def of defs) { - const descriptors = Object.getOwnPropertyDescriptors(def); - Object.assign(mergedDescriptors, descriptors); - } - return Object.defineProperties({}, mergedDescriptors); -} -function cloneDef(schema) { - return mergeDefs(schema._zod.def); -} -function getElementAtPath(obj, path) { - if (!path) - return obj; - return path.reduce((acc, key) => acc?.[key], obj); -} -function promiseAllObject(promisesObj) { - const keys = Object.keys(promisesObj); - const promises = keys.map((key) => promisesObj[key]); - return Promise.all(promises).then((results) => { - const resolvedObj = {}; - for (let i = 0;i < keys.length; i++) { - resolvedObj[keys[i]] = results[i]; - } - return resolvedObj; - }); -} -function randomString(length = 10) { - const chars = "abcdefghijklmnopqrstuvwxyz"; - let str = ""; - for (let i = 0;i < length; i++) { - str += chars[Math.floor(Math.random() * chars.length)]; - } - return str; -} -function esc(str) { - return JSON.stringify(str); -} -function slugify(input) { - return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, ""); -} -function isObject(data) { - return typeof data === "object" && data !== null && !Array.isArray(data); -} -function isPlainObject(o) { - if (isObject(o) === false) - return false; - const ctor = o.constructor; - if (ctor === undefined) - return true; - if (typeof ctor !== "function") - return true; - const prot = ctor.prototype; - if (isObject(prot) === false) - return false; - if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) { - return false; - } - return true; -} -function shallowClone(o) { - if (isPlainObject(o)) - return { ...o }; - if (Array.isArray(o)) - return [...o]; - return o; -} -function numKeys(data) { - let keyCount = 0; - for (const key in data) { - if (Object.prototype.hasOwnProperty.call(data, key)) { - keyCount++; - } - } - return keyCount; -} -function escapeRegex(str) { - return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); -} -function clone(inst, def, params) { - const cl = new inst._zod.constr(def ?? inst._zod.def); - if (!def || params?.parent) - cl._zod.parent = inst; - return cl; -} -function normalizeParams(_params) { - const params = _params; - if (!params) - return {}; - if (typeof params === "string") - return { error: () => params }; - if (params?.message !== undefined) { - if (params?.error !== undefined) - throw new Error("Cannot specify both `message` and `error` params"); - params.error = params.message; - } - delete params.message; - if (typeof params.error === "string") - return { ...params, error: () => params.error }; - return params; -} -function createTransparentProxy(getter) { - let target; - return new Proxy({}, { - get(_, prop, receiver) { - target ?? (target = getter()); - return Reflect.get(target, prop, receiver); - }, - set(_, prop, value, receiver) { - target ?? (target = getter()); - return Reflect.set(target, prop, value, receiver); - }, - has(_, prop) { - target ?? (target = getter()); - return Reflect.has(target, prop); - }, - deleteProperty(_, prop) { - target ?? (target = getter()); - return Reflect.deleteProperty(target, prop); - }, - ownKeys(_) { - target ?? (target = getter()); - return Reflect.ownKeys(target); - }, - getOwnPropertyDescriptor(_, prop) { - target ?? (target = getter()); - return Reflect.getOwnPropertyDescriptor(target, prop); - }, - defineProperty(_, prop, descriptor) { - target ?? (target = getter()); - return Reflect.defineProperty(target, prop, descriptor); - } - }); -} -function stringifyPrimitive(value) { - if (typeof value === "bigint") - return value.toString() + "n"; - if (typeof value === "string") - return `"${value}"`; - return `${value}`; -} -function optionalKeys(shape) { - return Object.keys(shape).filter((k) => { - return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional"; - }); -} -function pick(schema, mask) { - const currDef = schema._zod.def; - const checks = currDef.checks; - const hasChecks = checks && checks.length > 0; - if (hasChecks) { - throw new Error(".pick() cannot be used on object schemas containing refinements"); - } - const def = mergeDefs(schema._zod.def, { - get shape() { - const newShape = {}; - for (const key in mask) { - if (!(key in currDef.shape)) { - throw new Error(`Unrecognized key: "${key}"`); - } - if (!mask[key]) - continue; - newShape[key] = currDef.shape[key]; - } - assignProp(this, "shape", newShape); - return newShape; - }, - checks: [] - }); - return clone(schema, def); -} -function omit(schema, mask) { - const currDef = schema._zod.def; - const checks = currDef.checks; - const hasChecks = checks && checks.length > 0; - if (hasChecks) { - throw new Error(".omit() cannot be used on object schemas containing refinements"); - } - const def = mergeDefs(schema._zod.def, { - get shape() { - const newShape = { ...schema._zod.def.shape }; - for (const key in mask) { - if (!(key in currDef.shape)) { - throw new Error(`Unrecognized key: "${key}"`); - } - if (!mask[key]) - continue; - delete newShape[key]; - } - assignProp(this, "shape", newShape); - return newShape; - }, - checks: [] - }); - return clone(schema, def); -} -function extend(schema, shape) { - if (!isPlainObject(shape)) { - throw new Error("Invalid input to extend: expected a plain object"); - } - const checks = schema._zod.def.checks; - const hasChecks = checks && checks.length > 0; - if (hasChecks) { - const existingShape = schema._zod.def.shape; - for (const key in shape) { - if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) { - throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead."); - } - } - } - const def = mergeDefs(schema._zod.def, { - get shape() { - const _shape = { ...schema._zod.def.shape, ...shape }; - assignProp(this, "shape", _shape); - return _shape; - } - }); - return clone(schema, def); -} -function safeExtend(schema, shape) { - if (!isPlainObject(shape)) { - throw new Error("Invalid input to safeExtend: expected a plain object"); - } - const def = mergeDefs(schema._zod.def, { - get shape() { - const _shape = { ...schema._zod.def.shape, ...shape }; - assignProp(this, "shape", _shape); - return _shape; - } - }); - return clone(schema, def); -} -function merge(a, b) { - const def = mergeDefs(a._zod.def, { - get shape() { - const _shape = { ...a._zod.def.shape, ...b._zod.def.shape }; - assignProp(this, "shape", _shape); - return _shape; - }, - get catchall() { - return b._zod.def.catchall; - }, - checks: [] - }); - return clone(a, def); -} -function partial(Class, schema, mask) { - const currDef = schema._zod.def; - const checks = currDef.checks; - const hasChecks = checks && checks.length > 0; - if (hasChecks) { - throw new Error(".partial() cannot be used on object schemas containing refinements"); - } - const def = mergeDefs(schema._zod.def, { - get shape() { - const oldShape = schema._zod.def.shape; - const shape = { ...oldShape }; - if (mask) { - for (const key in mask) { - if (!(key in oldShape)) { - throw new Error(`Unrecognized key: "${key}"`); - } - if (!mask[key]) - continue; - shape[key] = Class ? new Class({ - type: "optional", - innerType: oldShape[key] - }) : oldShape[key]; - } - } else { - for (const key in oldShape) { - shape[key] = Class ? new Class({ - type: "optional", - innerType: oldShape[key] - }) : oldShape[key]; - } - } - assignProp(this, "shape", shape); - return shape; - }, - checks: [] - }); - return clone(schema, def); -} -function required(Class, schema, mask) { - const def = mergeDefs(schema._zod.def, { - get shape() { - const oldShape = schema._zod.def.shape; - const shape = { ...oldShape }; - if (mask) { - for (const key in mask) { - if (!(key in shape)) { - throw new Error(`Unrecognized key: "${key}"`); - } - if (!mask[key]) - continue; - shape[key] = new Class({ - type: "nonoptional", - innerType: oldShape[key] - }); - } - } else { - for (const key in oldShape) { - shape[key] = new Class({ - type: "nonoptional", - innerType: oldShape[key] - }); - } - } - assignProp(this, "shape", shape); - return shape; - } - }); - return clone(schema, def); -} -function aborted(x, startIndex = 0) { - if (x.aborted === true) - return true; - for (let i = startIndex;i < x.issues.length; i++) { - if (x.issues[i]?.continue !== true) { - return true; - } - } - return false; -} -function prefixIssues(path, issues) { - return issues.map((iss) => { - var _a; - (_a = iss).path ?? (_a.path = []); - iss.path.unshift(path); - return iss; - }); -} -function unwrapMessage(message) { - return typeof message === "string" ? message : message?.message; -} -function finalizeIssue(iss, ctx, config2) { - const full = { ...iss, path: iss.path ?? [] }; - if (!iss.message) { - const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input"; - full.message = message; - } - delete full.inst; - delete full.continue; - if (!ctx?.reportInput) { - delete full.input; - } - return full; -} -function getSizableOrigin(input) { - if (input instanceof Set) - return "set"; - if (input instanceof Map) - return "map"; - if (input instanceof File) - return "file"; - return "unknown"; -} -function getLengthableOrigin(input) { - if (Array.isArray(input)) - return "array"; - if (typeof input === "string") - return "string"; - return "unknown"; -} -function parsedType(data) { - const t = typeof data; - switch (t) { - case "number": { - return Number.isNaN(data) ? "nan" : "number"; - } - case "object": { - if (data === null) { - return "null"; - } - if (Array.isArray(data)) { - return "array"; - } - const obj = data; - if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) { - return obj.constructor.name; - } - } - } - return t; -} -function issue(...args) { - const [iss, input, inst] = args; - if (typeof iss === "string") { - return { - message: iss, - code: "custom", - input, - inst - }; - } - return { ...iss }; -} -function cleanEnum(obj) { - return Object.entries(obj).filter(([k, _]) => { - return Number.isNaN(Number.parseInt(k, 10)); - }).map((el) => el[1]); -} -function base64ToUint8Array(base64) { - const binaryString = atob(base64); - const bytes = new Uint8Array(binaryString.length); - for (let i = 0;i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return bytes; -} -function uint8ArrayToBase64(bytes) { - let binaryString = ""; - for (let i = 0;i < bytes.length; i++) { - binaryString += String.fromCharCode(bytes[i]); - } - return btoa(binaryString); -} -function base64urlToUint8Array(base64url) { - const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/"); - const padding = "=".repeat((4 - base64.length % 4) % 4); - return base64ToUint8Array(base64 + padding); -} -function uint8ArrayToBase64url(bytes) { - return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); -} -function hexToUint8Array(hex) { - const cleanHex = hex.replace(/^0x/, ""); - if (cleanHex.length % 2 !== 0) { - throw new Error("Invalid hex string length"); - } - const bytes = new Uint8Array(cleanHex.length / 2); - for (let i = 0;i < cleanHex.length; i += 2) { - bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16); - } - return bytes; -} -function uint8ArrayToHex(bytes) { - return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join(""); -} - -class Class { - constructor(..._args) {} -} -var EVALUATING, captureStackTrace, allowsEval, getParsedType = (data) => { - const t = typeof data; - switch (t) { - case "undefined": - return "undefined"; - case "string": - return "string"; - case "number": - return Number.isNaN(data) ? "nan" : "number"; - case "boolean": - return "boolean"; - case "function": - return "function"; - case "bigint": - return "bigint"; - case "symbol": - return "symbol"; - case "object": - if (Array.isArray(data)) { - return "array"; - } - if (data === null) { - return "null"; - } - if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { - return "promise"; - } - if (typeof Map !== "undefined" && data instanceof Map) { - return "map"; - } - if (typeof Set !== "undefined" && data instanceof Set) { - return "set"; - } - if (typeof Date !== "undefined" && data instanceof Date) { - return "date"; - } - if (typeof File !== "undefined" && data instanceof File) { - return "file"; - } - return "object"; - default: - throw new Error(`Unknown data type: ${t}`); - } -}, propertyKeyTypes, primitiveTypes, NUMBER_FORMAT_RANGES, BIGINT_FORMAT_RANGES; -var init_util = __esm(() => { - EVALUATING = Symbol("evaluating"); - captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {}; - allowsEval = cached(() => { - if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) { - return false; - } - try { - const F = Function; - new F(""); - return true; - } catch (_) { - return false; - } - }); - propertyKeyTypes = new Set(["string", "number", "symbol"]); - primitiveTypes = new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]); - NUMBER_FORMAT_RANGES = { - safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], - int32: [-2147483648, 2147483647], - uint32: [0, 4294967295], - float32: [-340282346638528860000000000000000000000, 340282346638528860000000000000000000000], - float64: [-Number.MAX_VALUE, Number.MAX_VALUE] - }; - BIGINT_FORMAT_RANGES = { - int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")], - uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")] - }; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/errors.js -function flattenError(error, mapper = (issue2) => issue2.message) { - const fieldErrors = {}; - const formErrors = []; - for (const sub of error.issues) { - if (sub.path.length > 0) { - fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || []; - fieldErrors[sub.path[0]].push(mapper(sub)); - } else { - formErrors.push(mapper(sub)); - } - } - return { formErrors, fieldErrors }; -} -function formatError(error, mapper = (issue2) => issue2.message) { - const fieldErrors = { _errors: [] }; - const processError = (error2) => { - for (const issue2 of error2.issues) { - if (issue2.code === "invalid_union" && issue2.errors.length) { - issue2.errors.map((issues) => processError({ issues })); - } else if (issue2.code === "invalid_key") { - processError({ issues: issue2.issues }); - } else if (issue2.code === "invalid_element") { - processError({ issues: issue2.issues }); - } else if (issue2.path.length === 0) { - fieldErrors._errors.push(mapper(issue2)); - } else { - let curr = fieldErrors; - let i = 0; - while (i < issue2.path.length) { - const el = issue2.path[i]; - const terminal = i === issue2.path.length - 1; - if (!terminal) { - curr[el] = curr[el] || { _errors: [] }; - } else { - curr[el] = curr[el] || { _errors: [] }; - curr[el]._errors.push(mapper(issue2)); - } - curr = curr[el]; - i++; - } - } - } - }; - processError(error); - return fieldErrors; -} -function treeifyError(error, mapper = (issue2) => issue2.message) { - const result = { errors: [] }; - const processError = (error2, path = []) => { - var _a, _b; - for (const issue2 of error2.issues) { - if (issue2.code === "invalid_union" && issue2.errors.length) { - issue2.errors.map((issues) => processError({ issues }, issue2.path)); - } else if (issue2.code === "invalid_key") { - processError({ issues: issue2.issues }, issue2.path); - } else if (issue2.code === "invalid_element") { - processError({ issues: issue2.issues }, issue2.path); - } else { - const fullpath = [...path, ...issue2.path]; - if (fullpath.length === 0) { - result.errors.push(mapper(issue2)); - continue; - } - let curr = result; - let i = 0; - while (i < fullpath.length) { - const el = fullpath[i]; - const terminal = i === fullpath.length - 1; - if (typeof el === "string") { - curr.properties ?? (curr.properties = {}); - (_a = curr.properties)[el] ?? (_a[el] = { errors: [] }); - curr = curr.properties[el]; - } else { - curr.items ?? (curr.items = []); - (_b = curr.items)[el] ?? (_b[el] = { errors: [] }); - curr = curr.items[el]; - } - if (terminal) { - curr.errors.push(mapper(issue2)); - } - i++; - } - } - } - }; - processError(error); - return result; -} -function toDotPath(_path) { - const segs = []; - const path = _path.map((seg) => typeof seg === "object" ? seg.key : seg); - for (const seg of path) { - if (typeof seg === "number") - segs.push(`[${seg}]`); - else if (typeof seg === "symbol") - segs.push(`[${JSON.stringify(String(seg))}]`); - else if (/[^\w$]/.test(seg)) - segs.push(`[${JSON.stringify(seg)}]`); - else { - if (segs.length) - segs.push("."); - segs.push(seg); - } - } - return segs.join(""); -} -function prettifyError(error) { - const lines = []; - const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length); - for (const issue2 of issues) { - lines.push(`\u2716 ${issue2.message}`); - if (issue2.path?.length) - lines.push(` \u2192 at ${toDotPath(issue2.path)}`); - } - return lines.join(` -`); -} -var initializer = (inst, def) => { - inst.name = "$ZodError"; - Object.defineProperty(inst, "_zod", { - value: inst._zod, - enumerable: false - }); - Object.defineProperty(inst, "issues", { - value: def, - enumerable: false - }); - inst.message = JSON.stringify(def, jsonStringifyReplacer, 2); - Object.defineProperty(inst, "toString", { - value: () => inst.message, - enumerable: false - }); -}, $ZodError, $ZodRealError; -var init_errors = __esm(() => { - init_core(); - init_util(); - $ZodError = $constructor("$ZodError", initializer); - $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error }); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/parse.js -var _parse = (_Err) => (schema, value, _ctx, _params) => { - const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false }; - const result = schema._zod.run({ value, issues: [] }, ctx); - if (result instanceof Promise) { - throw new $ZodAsyncError; - } - if (result.issues.length) { - const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); - captureStackTrace(e, _params?.callee); - throw e; - } - return result.value; -}, parse, _parseAsync = (_Err) => async (schema, value, _ctx, params) => { - const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; - let result = schema._zod.run({ value, issues: [] }, ctx); - if (result instanceof Promise) - result = await result; - if (result.issues.length) { - const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); - captureStackTrace(e, params?.callee); - throw e; - } - return result.value; -}, parseAsync, _safeParse = (_Err) => (schema, value, _ctx) => { - const ctx = _ctx ? { ..._ctx, async: false } : { async: false }; - const result = schema._zod.run({ value, issues: [] }, ctx); - if (result instanceof Promise) { - throw new $ZodAsyncError; - } - return result.issues.length ? { - success: false, - error: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) - } : { success: true, data: result.value }; -}, safeParse, _safeParseAsync = (_Err) => async (schema, value, _ctx) => { - const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; - let result = schema._zod.run({ value, issues: [] }, ctx); - if (result instanceof Promise) - result = await result; - return result.issues.length ? { - success: false, - error: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) - } : { success: true, data: result.value }; -}, safeParseAsync, _encode = (_Err) => (schema, value, _ctx) => { - const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; - return _parse(_Err)(schema, value, ctx); -}, encode, _decode = (_Err) => (schema, value, _ctx) => { - return _parse(_Err)(schema, value, _ctx); -}, decode, _encodeAsync = (_Err) => async (schema, value, _ctx) => { - const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; - return _parseAsync(_Err)(schema, value, ctx); -}, encodeAsync, _decodeAsync = (_Err) => async (schema, value, _ctx) => { - return _parseAsync(_Err)(schema, value, _ctx); -}, decodeAsync, _safeEncode = (_Err) => (schema, value, _ctx) => { - const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; - return _safeParse(_Err)(schema, value, ctx); -}, safeEncode, _safeDecode = (_Err) => (schema, value, _ctx) => { - return _safeParse(_Err)(schema, value, _ctx); -}, safeDecode, _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => { - const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; - return _safeParseAsync(_Err)(schema, value, ctx); -}, safeEncodeAsync, _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { - return _safeParseAsync(_Err)(schema, value, _ctx); -}, safeDecodeAsync; -var init_parse = __esm(() => { - init_core(); - init_errors(); - init_util(); - parse = /* @__PURE__ */ _parse($ZodRealError); - parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError); - safeParse = /* @__PURE__ */ _safeParse($ZodRealError); - safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError); - encode = /* @__PURE__ */ _encode($ZodRealError); - decode = /* @__PURE__ */ _decode($ZodRealError); - encodeAsync = /* @__PURE__ */ _encodeAsync($ZodRealError); - decodeAsync = /* @__PURE__ */ _decodeAsync($ZodRealError); - safeEncode = /* @__PURE__ */ _safeEncode($ZodRealError); - safeDecode = /* @__PURE__ */ _safeDecode($ZodRealError); - safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync($ZodRealError); - safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/regexes.js -var exports_regexes = {}; -__export(exports_regexes, { - xid: () => xid, - uuid7: () => uuid7, - uuid6: () => uuid6, - uuid4: () => uuid4, - uuid: () => uuid, - uppercase: () => uppercase, - unicodeEmail: () => unicodeEmail, - undefined: () => _undefined, - ulid: () => ulid, - time: () => time, - string: () => string, - sha512_hex: () => sha512_hex, - sha512_base64url: () => sha512_base64url, - sha512_base64: () => sha512_base64, - sha384_hex: () => sha384_hex, - sha384_base64url: () => sha384_base64url, - sha384_base64: () => sha384_base64, - sha256_hex: () => sha256_hex, - sha256_base64url: () => sha256_base64url, - sha256_base64: () => sha256_base64, - sha1_hex: () => sha1_hex, - sha1_base64url: () => sha1_base64url, - sha1_base64: () => sha1_base64, - rfc5322Email: () => rfc5322Email, - number: () => number, - null: () => _null, - nanoid: () => nanoid, - md5_hex: () => md5_hex, - md5_base64url: () => md5_base64url, - md5_base64: () => md5_base64, - mac: () => mac, - lowercase: () => lowercase, - ksuid: () => ksuid, - ipv6: () => ipv6, - ipv4: () => ipv4, - integer: () => integer, - idnEmail: () => idnEmail, - html5Email: () => html5Email, - hostname: () => hostname, - hex: () => hex, - guid: () => guid, - extendedDuration: () => extendedDuration, - emoji: () => emoji, - email: () => email, - e164: () => e164, - duration: () => duration, - domain: () => domain, - datetime: () => datetime, - date: () => date, - cuid2: () => cuid2, - cuid: () => cuid, - cidrv6: () => cidrv6, - cidrv4: () => cidrv4, - browserEmail: () => browserEmail, - boolean: () => boolean, - bigint: () => bigint, - base64url: () => base64url, - base64: () => base64 -}); -function emoji() { - return new RegExp(_emoji, "u"); -} -function timeSource(args) { - const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`; - const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`; - return regex; -} -function time(args) { - return new RegExp(`^${timeSource(args)}$`); -} -function datetime(args) { - const time2 = timeSource({ precision: args.precision }); - const opts = ["Z"]; - if (args.local) - opts.push(""); - if (args.offset) - opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`); - const timeRegex = `${time2}(?:${opts.join("|")})`; - return new RegExp(`^${dateSource}T(?:${timeRegex})$`); -} -function fixedBase64(bodyLength, padding) { - return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`); -} -function fixedBase64url(length) { - return new RegExp(`^[A-Za-z0-9_-]{${length}}$`); -} -var cuid, cuid2, ulid, xid, ksuid, nanoid, duration, extendedDuration, guid, uuid = (version) => { - if (!version) - return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/; - return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); -}, uuid4, uuid6, uuid7, email, html5Email, rfc5322Email, unicodeEmail, idnEmail, browserEmail, _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`, ipv4, ipv6, mac = (delimiter) => { - const escapedDelim = escapeRegex(delimiter ?? ":"); - return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`); -}, cidrv4, cidrv6, base64, base64url, hostname, domain, e164, dateSource = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`, date, string = (params) => { - const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`; - return new RegExp(`^${regex}$`); -}, bigint, integer, number, boolean, _null, _undefined, lowercase, uppercase, hex, md5_hex, md5_base64, md5_base64url, sha1_hex, sha1_base64, sha1_base64url, sha256_hex, sha256_base64, sha256_base64url, sha384_hex, sha384_base64, sha384_base64url, sha512_hex, sha512_base64, sha512_base64url; -var init_regexes = __esm(() => { - init_util(); - cuid = /^[cC][^\s-]{8,}$/; - cuid2 = /^[0-9a-z]+$/; - ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; - xid = /^[0-9a-vA-V]{20}$/; - ksuid = /^[A-Za-z0-9]{27}$/; - nanoid = /^[a-zA-Z0-9_-]{21}$/; - duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; - extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; - guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/; - uuid4 = /* @__PURE__ */ uuid(4); - uuid6 = /* @__PURE__ */ uuid(6); - uuid7 = /* @__PURE__ */ uuid(7); - email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; - html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; - rfc5322Email = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u; - idnEmail = unicodeEmail; - browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; - ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; - ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/; - cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/; - cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; - base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; - base64url = /^[A-Za-z0-9_-]*$/; - hostname = /^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/; - domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; - e164 = /^\+[1-9]\d{6,14}$/; - date = /* @__PURE__ */ new RegExp(`^${dateSource}$`); - bigint = /^-?\d+n?$/; - integer = /^-?\d+$/; - number = /^-?\d+(?:\.\d+)?$/; - boolean = /^(?:true|false)$/i; - _null = /^null$/i; - _undefined = /^undefined$/i; - lowercase = /^[^A-Z]*$/; - uppercase = /^[^a-z]*$/; - hex = /^[0-9a-fA-F]*$/; - md5_hex = /^[0-9a-fA-F]{32}$/; - md5_base64 = /* @__PURE__ */ fixedBase64(22, "=="); - md5_base64url = /* @__PURE__ */ fixedBase64url(22); - sha1_hex = /^[0-9a-fA-F]{40}$/; - sha1_base64 = /* @__PURE__ */ fixedBase64(27, "="); - sha1_base64url = /* @__PURE__ */ fixedBase64url(27); - sha256_hex = /^[0-9a-fA-F]{64}$/; - sha256_base64 = /* @__PURE__ */ fixedBase64(43, "="); - sha256_base64url = /* @__PURE__ */ fixedBase64url(43); - sha384_hex = /^[0-9a-fA-F]{96}$/; - sha384_base64 = /* @__PURE__ */ fixedBase64(64, ""); - sha384_base64url = /* @__PURE__ */ fixedBase64url(64); - sha512_hex = /^[0-9a-fA-F]{128}$/; - sha512_base64 = /* @__PURE__ */ fixedBase64(86, "=="); - sha512_base64url = /* @__PURE__ */ fixedBase64url(86); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/checks.js -function handleCheckPropertyResult(result, payload, property) { - if (result.issues.length) { - payload.issues.push(...prefixIssues(property, result.issues)); - } -} -var $ZodCheck, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckBigIntFormat, $ZodCheckMaxSize, $ZodCheckMinSize, $ZodCheckSizeEquals, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckProperty, $ZodCheckMimeType, $ZodCheckOverwrite; -var init_checks = __esm(() => { - init_core(); - init_regexes(); - init_util(); - $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { - var _a; - inst._zod ?? (inst._zod = {}); - inst._zod.def = def; - (_a = inst._zod).onattach ?? (_a.onattach = []); - }); - numericOriginMap = { - number: "number", - bigint: "bigint", - object: "date" - }; - $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => { - $ZodCheck.init(inst, def); - const origin = numericOriginMap[typeof def.value]; - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY; - if (def.value < curr) { - if (def.inclusive) - bag.maximum = def.value; - else - bag.exclusiveMaximum = def.value; - } - }); - inst._zod.check = (payload) => { - if (def.inclusive ? payload.value <= def.value : payload.value < def.value) { - return; - } - payload.issues.push({ - origin, - code: "too_big", - maximum: typeof def.value === "object" ? def.value.getTime() : def.value, - input: payload.value, - inclusive: def.inclusive, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => { - $ZodCheck.init(inst, def); - const origin = numericOriginMap[typeof def.value]; - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY; - if (def.value > curr) { - if (def.inclusive) - bag.minimum = def.value; - else - bag.exclusiveMinimum = def.value; - } - }); - inst._zod.check = (payload) => { - if (def.inclusive ? payload.value >= def.value : payload.value > def.value) { - return; - } - payload.issues.push({ - origin, - code: "too_small", - minimum: typeof def.value === "object" ? def.value.getTime() : def.value, - input: payload.value, - inclusive: def.inclusive, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => { - $ZodCheck.init(inst, def); - inst._zod.onattach.push((inst2) => { - var _a; - (_a = inst2._zod.bag).multipleOf ?? (_a.multipleOf = def.value); - }); - inst._zod.check = (payload) => { - if (typeof payload.value !== typeof def.value) - throw new Error("Cannot mix number and bigint in multiple_of check."); - const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0; - if (isMultiple) - return; - payload.issues.push({ - origin: typeof payload.value, - code: "not_multiple_of", - divisor: def.value, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => { - $ZodCheck.init(inst, def); - def.format = def.format || "float64"; - const isInt = def.format?.includes("int"); - const origin = isInt ? "int" : "number"; - const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format]; - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.format = def.format; - bag.minimum = minimum; - bag.maximum = maximum; - if (isInt) - bag.pattern = integer; - }); - inst._zod.check = (payload) => { - const input = payload.value; - if (isInt) { - if (!Number.isInteger(input)) { - payload.issues.push({ - expected: origin, - format: def.format, - code: "invalid_type", - continue: false, - input, - inst - }); - return; - } - if (!Number.isSafeInteger(input)) { - if (input > 0) { - payload.issues.push({ - input, - code: "too_big", - maximum: Number.MAX_SAFE_INTEGER, - note: "Integers must be within the safe integer range.", - inst, - origin, - inclusive: true, - continue: !def.abort - }); - } else { - payload.issues.push({ - input, - code: "too_small", - minimum: Number.MIN_SAFE_INTEGER, - note: "Integers must be within the safe integer range.", - inst, - origin, - inclusive: true, - continue: !def.abort - }); - } - return; - } - } - if (input < minimum) { - payload.issues.push({ - origin: "number", - input, - code: "too_small", - minimum, - inclusive: true, - inst, - continue: !def.abort - }); - } - if (input > maximum) { - payload.issues.push({ - origin: "number", - input, - code: "too_big", - maximum, - inclusive: true, - inst, - continue: !def.abort - }); - } - }; - }); - $ZodCheckBigIntFormat = /* @__PURE__ */ $constructor("$ZodCheckBigIntFormat", (inst, def) => { - $ZodCheck.init(inst, def); - const [minimum, maximum] = BIGINT_FORMAT_RANGES[def.format]; - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.format = def.format; - bag.minimum = minimum; - bag.maximum = maximum; - }); - inst._zod.check = (payload) => { - const input = payload.value; - if (input < minimum) { - payload.issues.push({ - origin: "bigint", - input, - code: "too_small", - minimum, - inclusive: true, - inst, - continue: !def.abort - }); - } - if (input > maximum) { - payload.issues.push({ - origin: "bigint", - input, - code: "too_big", - maximum, - inclusive: true, - inst, - continue: !def.abort - }); - } - }; - }); - $ZodCheckMaxSize = /* @__PURE__ */ $constructor("$ZodCheckMaxSize", (inst, def) => { - var _a; - $ZodCheck.init(inst, def); - (_a = inst._zod.def).when ?? (_a.when = (payload) => { - const val = payload.value; - return !nullish(val) && val.size !== undefined; - }); - inst._zod.onattach.push((inst2) => { - const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY; - if (def.maximum < curr) - inst2._zod.bag.maximum = def.maximum; - }); - inst._zod.check = (payload) => { - const input = payload.value; - const size = input.size; - if (size <= def.maximum) - return; - payload.issues.push({ - origin: getSizableOrigin(input), - code: "too_big", - maximum: def.maximum, - inclusive: true, - input, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckMinSize = /* @__PURE__ */ $constructor("$ZodCheckMinSize", (inst, def) => { - var _a; - $ZodCheck.init(inst, def); - (_a = inst._zod.def).when ?? (_a.when = (payload) => { - const val = payload.value; - return !nullish(val) && val.size !== undefined; - }); - inst._zod.onattach.push((inst2) => { - const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY; - if (def.minimum > curr) - inst2._zod.bag.minimum = def.minimum; - }); - inst._zod.check = (payload) => { - const input = payload.value; - const size = input.size; - if (size >= def.minimum) - return; - payload.issues.push({ - origin: getSizableOrigin(input), - code: "too_small", - minimum: def.minimum, - inclusive: true, - input, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckSizeEquals = /* @__PURE__ */ $constructor("$ZodCheckSizeEquals", (inst, def) => { - var _a; - $ZodCheck.init(inst, def); - (_a = inst._zod.def).when ?? (_a.when = (payload) => { - const val = payload.value; - return !nullish(val) && val.size !== undefined; - }); - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.minimum = def.size; - bag.maximum = def.size; - bag.size = def.size; - }); - inst._zod.check = (payload) => { - const input = payload.value; - const size = input.size; - if (size === def.size) - return; - const tooBig = size > def.size; - payload.issues.push({ - origin: getSizableOrigin(input), - ...tooBig ? { code: "too_big", maximum: def.size } : { code: "too_small", minimum: def.size }, - inclusive: true, - exact: true, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => { - var _a; - $ZodCheck.init(inst, def); - (_a = inst._zod.def).when ?? (_a.when = (payload) => { - const val = payload.value; - return !nullish(val) && val.length !== undefined; - }); - inst._zod.onattach.push((inst2) => { - const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY; - if (def.maximum < curr) - inst2._zod.bag.maximum = def.maximum; - }); - inst._zod.check = (payload) => { - const input = payload.value; - const length = input.length; - if (length <= def.maximum) - return; - const origin = getLengthableOrigin(input); - payload.issues.push({ - origin, - code: "too_big", - maximum: def.maximum, - inclusive: true, - input, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => { - var _a; - $ZodCheck.init(inst, def); - (_a = inst._zod.def).when ?? (_a.when = (payload) => { - const val = payload.value; - return !nullish(val) && val.length !== undefined; - }); - inst._zod.onattach.push((inst2) => { - const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY; - if (def.minimum > curr) - inst2._zod.bag.minimum = def.minimum; - }); - inst._zod.check = (payload) => { - const input = payload.value; - const length = input.length; - if (length >= def.minimum) - return; - const origin = getLengthableOrigin(input); - payload.issues.push({ - origin, - code: "too_small", - minimum: def.minimum, - inclusive: true, - input, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => { - var _a; - $ZodCheck.init(inst, def); - (_a = inst._zod.def).when ?? (_a.when = (payload) => { - const val = payload.value; - return !nullish(val) && val.length !== undefined; - }); - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.minimum = def.length; - bag.maximum = def.length; - bag.length = def.length; - }); - inst._zod.check = (payload) => { - const input = payload.value; - const length = input.length; - if (length === def.length) - return; - const origin = getLengthableOrigin(input); - const tooBig = length > def.length; - payload.issues.push({ - origin, - ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length }, - inclusive: true, - exact: true, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => { - var _a, _b; - $ZodCheck.init(inst, def); - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.format = def.format; - if (def.pattern) { - bag.patterns ?? (bag.patterns = new Set); - bag.patterns.add(def.pattern); - } - }); - if (def.pattern) - (_a = inst._zod).check ?? (_a.check = (payload) => { - def.pattern.lastIndex = 0; - if (def.pattern.test(payload.value)) - return; - payload.issues.push({ - origin: "string", - code: "invalid_format", - format: def.format, - input: payload.value, - ...def.pattern ? { pattern: def.pattern.toString() } : {}, - inst, - continue: !def.abort - }); - }); - else - (_b = inst._zod).check ?? (_b.check = () => {}); - }); - $ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => { - $ZodCheckStringFormat.init(inst, def); - inst._zod.check = (payload) => { - def.pattern.lastIndex = 0; - if (def.pattern.test(payload.value)) - return; - payload.issues.push({ - origin: "string", - code: "invalid_format", - format: "regex", - input: payload.value, - pattern: def.pattern.toString(), - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => { - def.pattern ?? (def.pattern = lowercase); - $ZodCheckStringFormat.init(inst, def); - }); - $ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => { - def.pattern ?? (def.pattern = uppercase); - $ZodCheckStringFormat.init(inst, def); - }); - $ZodCheckIncludes = /* @__PURE__ */ $constructor("$ZodCheckIncludes", (inst, def) => { - $ZodCheck.init(inst, def); - const escapedRegex = escapeRegex(def.includes); - const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex); - def.pattern = pattern; - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.patterns ?? (bag.patterns = new Set); - bag.patterns.add(pattern); - }); - inst._zod.check = (payload) => { - if (payload.value.includes(def.includes, def.position)) - return; - payload.issues.push({ - origin: "string", - code: "invalid_format", - format: "includes", - includes: def.includes, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckStartsWith = /* @__PURE__ */ $constructor("$ZodCheckStartsWith", (inst, def) => { - $ZodCheck.init(inst, def); - const pattern = new RegExp(`^${escapeRegex(def.prefix)}.*`); - def.pattern ?? (def.pattern = pattern); - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.patterns ?? (bag.patterns = new Set); - bag.patterns.add(pattern); - }); - inst._zod.check = (payload) => { - if (payload.value.startsWith(def.prefix)) - return; - payload.issues.push({ - origin: "string", - code: "invalid_format", - format: "starts_with", - prefix: def.prefix, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckEndsWith = /* @__PURE__ */ $constructor("$ZodCheckEndsWith", (inst, def) => { - $ZodCheck.init(inst, def); - const pattern = new RegExp(`.*${escapeRegex(def.suffix)}$`); - def.pattern ?? (def.pattern = pattern); - inst._zod.onattach.push((inst2) => { - const bag = inst2._zod.bag; - bag.patterns ?? (bag.patterns = new Set); - bag.patterns.add(pattern); - }); - inst._zod.check = (payload) => { - if (payload.value.endsWith(def.suffix)) - return; - payload.issues.push({ - origin: "string", - code: "invalid_format", - format: "ends_with", - suffix: def.suffix, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckProperty = /* @__PURE__ */ $constructor("$ZodCheckProperty", (inst, def) => { - $ZodCheck.init(inst, def); - inst._zod.check = (payload) => { - const result = def.schema._zod.run({ - value: payload.value[def.property], - issues: [] - }, {}); - if (result instanceof Promise) { - return result.then((result2) => handleCheckPropertyResult(result2, payload, def.property)); - } - handleCheckPropertyResult(result, payload, def.property); - return; - }; - }); - $ZodCheckMimeType = /* @__PURE__ */ $constructor("$ZodCheckMimeType", (inst, def) => { - $ZodCheck.init(inst, def); - const mimeSet = new Set(def.mime); - inst._zod.onattach.push((inst2) => { - inst2._zod.bag.mime = def.mime; - }); - inst._zod.check = (payload) => { - if (mimeSet.has(payload.value.type)) - return; - payload.issues.push({ - code: "invalid_value", - values: def.mime, - input: payload.value.type, - inst, - continue: !def.abort - }); - }; - }); - $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (inst, def) => { - $ZodCheck.init(inst, def); - inst._zod.check = (payload) => { - payload.value = def.tx(payload.value); - }; - }); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/doc.js -class Doc { - constructor(args = []) { - this.content = []; - this.indent = 0; - if (this) - this.args = args; - } - indented(fn) { - this.indent += 1; - fn(this); - this.indent -= 1; - } - write(arg) { - if (typeof arg === "function") { - arg(this, { execution: "sync" }); - arg(this, { execution: "async" }); - return; - } - const content = arg; - const lines = content.split(` -`).filter((x) => x); - const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length)); - const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x); - for (const line of dedented) { - this.content.push(line); - } - } - compile() { - const F = Function; - const args = this?.args; - const content = this?.content ?? [``]; - const lines = [...content.map((x) => ` ${x}`)]; - return new F(...args, lines.join(` -`)); - } -} - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/versions.js -var version; -var init_versions = __esm(() => { - version = { - major: 4, - minor: 3, - patch: 5 - }; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/schemas.js -function isValidBase64(data) { - if (data === "") - return true; - if (data.length % 4 !== 0) - return false; - try { - atob(data); - return true; - } catch { - return false; - } -} -function isValidBase64URL(data) { - if (!base64url.test(data)) - return false; - const base642 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/"); - const padded = base642.padEnd(Math.ceil(base642.length / 4) * 4, "="); - return isValidBase64(padded); -} -function isValidJWT(token, algorithm = null) { - try { - const tokensParts = token.split("."); - if (tokensParts.length !== 3) - return false; - const [header] = tokensParts; - if (!header) - return false; - const parsedHeader = JSON.parse(atob(header)); - if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT") - return false; - if (!parsedHeader.alg) - return false; - if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm)) - return false; - return true; - } catch { - return false; - } -} -function handleArrayResult(result, final, index) { - if (result.issues.length) { - final.issues.push(...prefixIssues(index, result.issues)); - } - final.value[index] = result.value; -} -function handlePropertyResult(result, final, key, input, isOptionalOut) { - if (result.issues.length) { - if (isOptionalOut && !(key in input)) { - return; - } - final.issues.push(...prefixIssues(key, result.issues)); - } - if (result.value === undefined) { - if (key in input) { - final.value[key] = undefined; - } - } else { - final.value[key] = result.value; - } -} -function normalizeDef(def) { - const keys = Object.keys(def.shape); - for (const k of keys) { - if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) { - throw new Error(`Invalid element at key "${k}": expected a Zod schema`); - } - } - const okeys = optionalKeys(def.shape); - return { - ...def, - keys, - keySet: new Set(keys), - numKeys: keys.length, - optionalKeys: new Set(okeys) - }; -} -function handleCatchall(proms, input, payload, ctx, def, inst) { - const unrecognized = []; - const keySet = def.keySet; - const _catchall = def.catchall._zod; - const t = _catchall.def.type; - const isOptionalOut = _catchall.optout === "optional"; - for (const key in input) { - if (keySet.has(key)) - continue; - if (t === "never") { - unrecognized.push(key); - continue; - } - const r = _catchall.run({ value: input[key], issues: [] }, ctx); - if (r instanceof Promise) { - proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut))); - } else { - handlePropertyResult(r, payload, key, input, isOptionalOut); - } - } - if (unrecognized.length) { - payload.issues.push({ - code: "unrecognized_keys", - keys: unrecognized, - input, - inst - }); - } - if (!proms.length) - return payload; - return Promise.all(proms).then(() => { - return payload; - }); -} -function handleUnionResults(results, final, inst, ctx) { - for (const result of results) { - if (result.issues.length === 0) { - final.value = result.value; - return final; - } - } - const nonaborted = results.filter((r) => !aborted(r)); - if (nonaborted.length === 1) { - final.value = nonaborted[0].value; - return nonaborted[0]; - } - final.issues.push({ - code: "invalid_union", - input: final.value, - inst, - errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) - }); - return final; -} -function handleExclusiveUnionResults(results, final, inst, ctx) { - const successes = results.filter((r) => r.issues.length === 0); - if (successes.length === 1) { - final.value = successes[0].value; - return final; - } - if (successes.length === 0) { - final.issues.push({ - code: "invalid_union", - input: final.value, - inst, - errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) - }); - } else { - final.issues.push({ - code: "invalid_union", - input: final.value, - inst, - errors: [], - inclusive: false - }); - } - return final; -} -function mergeValues(a, b) { - if (a === b) { - return { valid: true, data: a }; - } - if (a instanceof Date && b instanceof Date && +a === +b) { - return { valid: true, data: a }; - } - if (isPlainObject(a) && isPlainObject(b)) { - const bKeys = Object.keys(b); - const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1); - const newObj = { ...a, ...b }; - for (const key of sharedKeys) { - const sharedValue = mergeValues(a[key], b[key]); - if (!sharedValue.valid) { - return { - valid: false, - mergeErrorPath: [key, ...sharedValue.mergeErrorPath] - }; - } - newObj[key] = sharedValue.data; - } - return { valid: true, data: newObj }; - } - if (Array.isArray(a) && Array.isArray(b)) { - if (a.length !== b.length) { - return { valid: false, mergeErrorPath: [] }; - } - const newArray = []; - for (let index = 0;index < a.length; index++) { - const itemA = a[index]; - const itemB = b[index]; - const sharedValue = mergeValues(itemA, itemB); - if (!sharedValue.valid) { - return { - valid: false, - mergeErrorPath: [index, ...sharedValue.mergeErrorPath] - }; - } - newArray.push(sharedValue.data); - } - return { valid: true, data: newArray }; - } - return { valid: false, mergeErrorPath: [] }; -} -function handleIntersectionResults(result, left, right) { - const unrecKeys = new Map; - let unrecIssue; - for (const iss of left.issues) { - if (iss.code === "unrecognized_keys") { - unrecIssue ?? (unrecIssue = iss); - for (const k of iss.keys) { - if (!unrecKeys.has(k)) - unrecKeys.set(k, {}); - unrecKeys.get(k).l = true; - } - } else { - result.issues.push(iss); - } - } - for (const iss of right.issues) { - if (iss.code === "unrecognized_keys") { - for (const k of iss.keys) { - if (!unrecKeys.has(k)) - unrecKeys.set(k, {}); - unrecKeys.get(k).r = true; - } - } else { - result.issues.push(iss); - } - } - const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k); - if (bothKeys.length && unrecIssue) { - result.issues.push({ ...unrecIssue, keys: bothKeys }); - } - if (aborted(result)) - return result; - const merged = mergeValues(left.value, right.value); - if (!merged.valid) { - throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`); - } - result.value = merged.data; - return result; -} -function handleTupleResult(result, final, index) { - if (result.issues.length) { - final.issues.push(...prefixIssues(index, result.issues)); - } - final.value[index] = result.value; -} -function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) { - if (keyResult.issues.length) { - if (propertyKeyTypes.has(typeof key)) { - final.issues.push(...prefixIssues(key, keyResult.issues)); - } else { - final.issues.push({ - code: "invalid_key", - origin: "map", - input, - inst, - issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())) - }); - } - } - if (valueResult.issues.length) { - if (propertyKeyTypes.has(typeof key)) { - final.issues.push(...prefixIssues(key, valueResult.issues)); - } else { - final.issues.push({ - origin: "map", - code: "invalid_element", - input, - inst, - key, - issues: valueResult.issues.map((iss) => finalizeIssue(iss, ctx, config())) - }); - } - } - final.value.set(keyResult.value, valueResult.value); -} -function handleSetResult(result, final) { - if (result.issues.length) { - final.issues.push(...result.issues); - } - final.value.add(result.value); -} -function handleOptionalResult(result, input) { - if (result.issues.length && input === undefined) { - return { issues: [], value: undefined }; - } - return result; -} -function handleDefaultResult(payload, def) { - if (payload.value === undefined) { - payload.value = def.defaultValue; - } - return payload; -} -function handleNonOptionalResult(payload, inst) { - if (!payload.issues.length && payload.value === undefined) { - payload.issues.push({ - code: "invalid_type", - expected: "nonoptional", - input: payload.value, - inst - }); - } - return payload; -} -function handlePipeResult(left, next, ctx) { - if (left.issues.length) { - left.aborted = true; - return left; - } - return next._zod.run({ value: left.value, issues: left.issues }, ctx); -} -function handleCodecAResult(result, def, ctx) { - if (result.issues.length) { - result.aborted = true; - return result; - } - const direction = ctx.direction || "forward"; - if (direction === "forward") { - const transformed = def.transform(result.value, result); - if (transformed instanceof Promise) { - return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx)); - } - return handleCodecTxResult(result, transformed, def.out, ctx); - } else { - const transformed = def.reverseTransform(result.value, result); - if (transformed instanceof Promise) { - return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx)); - } - return handleCodecTxResult(result, transformed, def.in, ctx); - } -} -function handleCodecTxResult(left, value, nextSchema, ctx) { - if (left.issues.length) { - left.aborted = true; - return left; - } - return nextSchema._zod.run({ value, issues: left.issues }, ctx); -} -function handleReadonlyResult(payload) { - payload.value = Object.freeze(payload.value); - return payload; -} -function handleRefineResult(result, payload, input, inst) { - if (!result) { - const _iss = { - code: "custom", - input, - inst, - path: [...inst._zod.def.path ?? []], - continue: !inst._zod.def.abort - }; - if (inst._zod.def.params) - _iss.params = inst._zod.def.params; - payload.issues.push(issue(_iss)); - } -} -var $ZodType, $ZodString, $ZodStringFormat, $ZodGUID, $ZodUUID, $ZodEmail, $ZodURL, $ZodEmoji, $ZodNanoID, $ZodCUID, $ZodCUID2, $ZodULID, $ZodXID, $ZodKSUID, $ZodISODateTime, $ZodISODate, $ZodISOTime, $ZodISODuration, $ZodIPv4, $ZodIPv6, $ZodMAC, $ZodCIDRv4, $ZodCIDRv6, $ZodBase64, $ZodBase64URL, $ZodE164, $ZodJWT, $ZodCustomStringFormat, $ZodNumber, $ZodNumberFormat, $ZodBoolean, $ZodBigInt, $ZodBigIntFormat, $ZodSymbol, $ZodUndefined, $ZodNull, $ZodAny, $ZodUnknown, $ZodNever, $ZodVoid, $ZodDate, $ZodArray, $ZodObject, $ZodObjectJIT, $ZodUnion, $ZodXor, $ZodDiscriminatedUnion, $ZodIntersection, $ZodTuple, $ZodRecord, $ZodMap, $ZodSet, $ZodEnum, $ZodLiteral, $ZodFile, $ZodTransform, $ZodOptional, $ZodExactOptional, $ZodNullable, $ZodDefault, $ZodPrefault, $ZodNonOptional, $ZodSuccess, $ZodCatch, $ZodNaN, $ZodPipe, $ZodCodec, $ZodReadonly, $ZodTemplateLiteral, $ZodFunction, $ZodPromise, $ZodLazy, $ZodCustom; -var init_schemas = __esm(() => { - init_checks(); - init_core(); - init_parse(); - init_regexes(); - init_util(); - init_versions(); - init_util(); - $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { - var _a; - inst ?? (inst = {}); - inst._zod.def = def; - inst._zod.bag = inst._zod.bag || {}; - inst._zod.version = version; - const checks = [...inst._zod.def.checks ?? []]; - if (inst._zod.traits.has("$ZodCheck")) { - checks.unshift(inst); - } - for (const ch of checks) { - for (const fn of ch._zod.onattach) { - fn(inst); - } - } - if (checks.length === 0) { - (_a = inst._zod).deferred ?? (_a.deferred = []); - inst._zod.deferred?.push(() => { - inst._zod.run = inst._zod.parse; - }); - } else { - const runChecks = (payload, checks2, ctx) => { - let isAborted = aborted(payload); - let asyncResult; - for (const ch of checks2) { - if (ch._zod.def.when) { - const shouldRun = ch._zod.def.when(payload); - if (!shouldRun) - continue; - } else if (isAborted) { - continue; - } - const currLen = payload.issues.length; - const _ = ch._zod.check(payload); - if (_ instanceof Promise && ctx?.async === false) { - throw new $ZodAsyncError; - } - if (asyncResult || _ instanceof Promise) { - asyncResult = (asyncResult ?? Promise.resolve()).then(async () => { - await _; - const nextLen = payload.issues.length; - if (nextLen === currLen) - return; - if (!isAborted) - isAborted = aborted(payload, currLen); - }); - } else { - const nextLen = payload.issues.length; - if (nextLen === currLen) - continue; - if (!isAborted) - isAborted = aborted(payload, currLen); - } - } - if (asyncResult) { - return asyncResult.then(() => { - return payload; - }); - } - return payload; - }; - const handleCanaryResult = (canary, payload, ctx) => { - if (aborted(canary)) { - canary.aborted = true; - return canary; - } - const checkResult = runChecks(payload, checks, ctx); - if (checkResult instanceof Promise) { - if (ctx.async === false) - throw new $ZodAsyncError; - return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx)); - } - return inst._zod.parse(checkResult, ctx); - }; - inst._zod.run = (payload, ctx) => { - if (ctx.skipChecks) { - return inst._zod.parse(payload, ctx); - } - if (ctx.direction === "backward") { - const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true }); - if (canary instanceof Promise) { - return canary.then((canary2) => { - return handleCanaryResult(canary2, payload, ctx); - }); - } - return handleCanaryResult(canary, payload, ctx); - } - const result = inst._zod.parse(payload, ctx); - if (result instanceof Promise) { - if (ctx.async === false) - throw new $ZodAsyncError; - return result.then((result2) => runChecks(result2, checks, ctx)); - } - return runChecks(result, checks, ctx); - }; - } - defineLazy(inst, "~standard", () => ({ - validate: (value) => { - try { - const r = safeParse(inst, value); - return r.success ? { value: r.data } : { issues: r.error?.issues }; - } catch (_) { - return safeParseAsync(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues }); - } - }, - vendor: "zod", - version: 1 - })); - }); - $ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string(inst._zod.bag); - inst._zod.parse = (payload, _) => { - if (def.coerce) - try { - payload.value = String(payload.value); - } catch (_2) {} - if (typeof payload.value === "string") - return payload; - payload.issues.push({ - expected: "string", - code: "invalid_type", - input: payload.value, - inst - }); - return payload; - }; - }); - $ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => { - $ZodCheckStringFormat.init(inst, def); - $ZodString.init(inst, def); - }); - $ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => { - def.pattern ?? (def.pattern = guid); - $ZodStringFormat.init(inst, def); - }); - $ZodUUID = /* @__PURE__ */ $constructor("$ZodUUID", (inst, def) => { - if (def.version) { - const versionMap = { - v1: 1, - v2: 2, - v3: 3, - v4: 4, - v5: 5, - v6: 6, - v7: 7, - v8: 8 - }; - const v = versionMap[def.version]; - if (v === undefined) - throw new Error(`Invalid UUID version: "${def.version}"`); - def.pattern ?? (def.pattern = uuid(v)); - } else - def.pattern ?? (def.pattern = uuid()); - $ZodStringFormat.init(inst, def); - }); - $ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => { - def.pattern ?? (def.pattern = email); - $ZodStringFormat.init(inst, def); - }); - $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => { - $ZodStringFormat.init(inst, def); - inst._zod.check = (payload) => { - try { - const trimmed = payload.value.trim(); - const url = new URL(trimmed); - if (def.hostname) { - def.hostname.lastIndex = 0; - if (!def.hostname.test(url.hostname)) { - payload.issues.push({ - code: "invalid_format", - format: "url", - note: "Invalid hostname", - pattern: def.hostname.source, - input: payload.value, - inst, - continue: !def.abort - }); - } - } - if (def.protocol) { - def.protocol.lastIndex = 0; - if (!def.protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol)) { - payload.issues.push({ - code: "invalid_format", - format: "url", - note: "Invalid protocol", - pattern: def.protocol.source, - input: payload.value, - inst, - continue: !def.abort - }); - } - } - if (def.normalize) { - payload.value = url.href; - } else { - payload.value = trimmed; - } - return; - } catch (_) { - payload.issues.push({ - code: "invalid_format", - format: "url", - input: payload.value, - inst, - continue: !def.abort - }); - } - }; - }); - $ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => { - def.pattern ?? (def.pattern = emoji()); - $ZodStringFormat.init(inst, def); - }); - $ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => { - def.pattern ?? (def.pattern = nanoid); - $ZodStringFormat.init(inst, def); - }); - $ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => { - def.pattern ?? (def.pattern = cuid); - $ZodStringFormat.init(inst, def); - }); - $ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => { - def.pattern ?? (def.pattern = cuid2); - $ZodStringFormat.init(inst, def); - }); - $ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => { - def.pattern ?? (def.pattern = ulid); - $ZodStringFormat.init(inst, def); - }); - $ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => { - def.pattern ?? (def.pattern = xid); - $ZodStringFormat.init(inst, def); - }); - $ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => { - def.pattern ?? (def.pattern = ksuid); - $ZodStringFormat.init(inst, def); - }); - $ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => { - def.pattern ?? (def.pattern = datetime(def)); - $ZodStringFormat.init(inst, def); - }); - $ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => { - def.pattern ?? (def.pattern = date); - $ZodStringFormat.init(inst, def); - }); - $ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => { - def.pattern ?? (def.pattern = time(def)); - $ZodStringFormat.init(inst, def); - }); - $ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => { - def.pattern ?? (def.pattern = duration); - $ZodStringFormat.init(inst, def); - }); - $ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => { - def.pattern ?? (def.pattern = ipv4); - $ZodStringFormat.init(inst, def); - inst._zod.bag.format = `ipv4`; - }); - $ZodIPv6 = /* @__PURE__ */ $constructor("$ZodIPv6", (inst, def) => { - def.pattern ?? (def.pattern = ipv6); - $ZodStringFormat.init(inst, def); - inst._zod.bag.format = `ipv6`; - inst._zod.check = (payload) => { - try { - new URL(`http://[${payload.value}]`); - } catch { - payload.issues.push({ - code: "invalid_format", - format: "ipv6", - input: payload.value, - inst, - continue: !def.abort - }); - } - }; - }); - $ZodMAC = /* @__PURE__ */ $constructor("$ZodMAC", (inst, def) => { - def.pattern ?? (def.pattern = mac(def.delimiter)); - $ZodStringFormat.init(inst, def); - inst._zod.bag.format = `mac`; - }); - $ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => { - def.pattern ?? (def.pattern = cidrv4); - $ZodStringFormat.init(inst, def); - }); - $ZodCIDRv6 = /* @__PURE__ */ $constructor("$ZodCIDRv6", (inst, def) => { - def.pattern ?? (def.pattern = cidrv6); - $ZodStringFormat.init(inst, def); - inst._zod.check = (payload) => { - const parts = payload.value.split("/"); - try { - if (parts.length !== 2) - throw new Error; - const [address, prefix] = parts; - if (!prefix) - throw new Error; - const prefixNum = Number(prefix); - if (`${prefixNum}` !== prefix) - throw new Error; - if (prefixNum < 0 || prefixNum > 128) - throw new Error; - new URL(`http://[${address}]`); - } catch { - payload.issues.push({ - code: "invalid_format", - format: "cidrv6", - input: payload.value, - inst, - continue: !def.abort - }); - } - }; - }); - $ZodBase64 = /* @__PURE__ */ $constructor("$ZodBase64", (inst, def) => { - def.pattern ?? (def.pattern = base64); - $ZodStringFormat.init(inst, def); - inst._zod.bag.contentEncoding = "base64"; - inst._zod.check = (payload) => { - if (isValidBase64(payload.value)) - return; - payload.issues.push({ - code: "invalid_format", - format: "base64", - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => { - def.pattern ?? (def.pattern = base64url); - $ZodStringFormat.init(inst, def); - inst._zod.bag.contentEncoding = "base64url"; - inst._zod.check = (payload) => { - if (isValidBase64URL(payload.value)) - return; - payload.issues.push({ - code: "invalid_format", - format: "base64url", - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => { - def.pattern ?? (def.pattern = e164); - $ZodStringFormat.init(inst, def); - }); - $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => { - $ZodStringFormat.init(inst, def); - inst._zod.check = (payload) => { - if (isValidJWT(payload.value, def.alg)) - return; - payload.issues.push({ - code: "invalid_format", - format: "jwt", - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodCustomStringFormat = /* @__PURE__ */ $constructor("$ZodCustomStringFormat", (inst, def) => { - $ZodStringFormat.init(inst, def); - inst._zod.check = (payload) => { - if (def.fn(payload.value)) - return; - payload.issues.push({ - code: "invalid_format", - format: def.format, - input: payload.value, - inst, - continue: !def.abort - }); - }; - }); - $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.pattern = inst._zod.bag.pattern ?? number; - inst._zod.parse = (payload, _ctx) => { - if (def.coerce) - try { - payload.value = Number(payload.value); - } catch (_) {} - const input = payload.value; - if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) { - return payload; - } - const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : undefined : undefined; - payload.issues.push({ - expected: "number", - code: "invalid_type", - input, - inst, - ...received ? { received } : {} - }); - return payload; - }; - }); - $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => { - $ZodCheckNumberFormat.init(inst, def); - $ZodNumber.init(inst, def); - }); - $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.pattern = boolean; - inst._zod.parse = (payload, _ctx) => { - if (def.coerce) - try { - payload.value = Boolean(payload.value); - } catch (_) {} - const input = payload.value; - if (typeof input === "boolean") - return payload; - payload.issues.push({ - expected: "boolean", - code: "invalid_type", - input, - inst - }); - return payload; - }; - }); - $ZodBigInt = /* @__PURE__ */ $constructor("$ZodBigInt", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.pattern = bigint; - inst._zod.parse = (payload, _ctx) => { - if (def.coerce) - try { - payload.value = BigInt(payload.value); - } catch (_) {} - if (typeof payload.value === "bigint") - return payload; - payload.issues.push({ - expected: "bigint", - code: "invalid_type", - input: payload.value, - inst - }); - return payload; - }; - }); - $ZodBigIntFormat = /* @__PURE__ */ $constructor("$ZodBigIntFormat", (inst, def) => { - $ZodCheckBigIntFormat.init(inst, def); - $ZodBigInt.init(inst, def); - }); - $ZodSymbol = /* @__PURE__ */ $constructor("$ZodSymbol", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (typeof input === "symbol") - return payload; - payload.issues.push({ - expected: "symbol", - code: "invalid_type", - input, - inst - }); - return payload; - }; - }); - $ZodUndefined = /* @__PURE__ */ $constructor("$ZodUndefined", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.pattern = _undefined; - inst._zod.values = new Set([undefined]); - inst._zod.optin = "optional"; - inst._zod.optout = "optional"; - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (typeof input === "undefined") - return payload; - payload.issues.push({ - expected: "undefined", - code: "invalid_type", - input, - inst - }); - return payload; - }; - }); - $ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.pattern = _null; - inst._zod.values = new Set([null]); - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (input === null) - return payload; - payload.issues.push({ - expected: "null", - code: "invalid_type", - input, - inst - }); - return payload; - }; - }); - $ZodAny = /* @__PURE__ */ $constructor("$ZodAny", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload) => payload; - }); - $ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload) => payload; - }); - $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, _ctx) => { - payload.issues.push({ - expected: "never", - code: "invalid_type", - input: payload.value, - inst - }); - return payload; - }; - }); - $ZodVoid = /* @__PURE__ */ $constructor("$ZodVoid", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (typeof input === "undefined") - return payload; - payload.issues.push({ - expected: "void", - code: "invalid_type", - input, - inst - }); - return payload; - }; - }); - $ZodDate = /* @__PURE__ */ $constructor("$ZodDate", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, _ctx) => { - if (def.coerce) { - try { - payload.value = new Date(payload.value); - } catch (_err) {} - } - const input = payload.value; - const isDate = input instanceof Date; - const isValidDate = isDate && !Number.isNaN(input.getTime()); - if (isValidDate) - return payload; - payload.issues.push({ - expected: "date", - code: "invalid_type", - input, - ...isDate ? { received: "Invalid Date" } : {}, - inst - }); - return payload; - }; - }); - $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - if (!Array.isArray(input)) { - payload.issues.push({ - expected: "array", - code: "invalid_type", - input, - inst - }); - return payload; - } - payload.value = Array(input.length); - const proms = []; - for (let i = 0;i < input.length; i++) { - const item = input[i]; - const result = def.element._zod.run({ - value: item, - issues: [] - }, ctx); - if (result instanceof Promise) { - proms.push(result.then((result2) => handleArrayResult(result2, payload, i))); - } else { - handleArrayResult(result, payload, i); - } - } - if (proms.length) { - return Promise.all(proms).then(() => payload); - } - return payload; - }; - }); - $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => { - $ZodType.init(inst, def); - const desc = Object.getOwnPropertyDescriptor(def, "shape"); - if (!desc?.get) { - const sh = def.shape; - Object.defineProperty(def, "shape", { - get: () => { - const newSh = { ...sh }; - Object.defineProperty(def, "shape", { - value: newSh - }); - return newSh; - } - }); - } - const _normalized = cached(() => normalizeDef(def)); - defineLazy(inst._zod, "propValues", () => { - const shape = def.shape; - const propValues = {}; - for (const key in shape) { - const field = shape[key]._zod; - if (field.values) { - propValues[key] ?? (propValues[key] = new Set); - for (const v of field.values) - propValues[key].add(v); - } - } - return propValues; - }); - const isObject2 = isObject; - const catchall = def.catchall; - let value; - inst._zod.parse = (payload, ctx) => { - value ?? (value = _normalized.value); - const input = payload.value; - if (!isObject2(input)) { - payload.issues.push({ - expected: "object", - code: "invalid_type", - input, - inst - }); - return payload; - } - payload.value = {}; - const proms = []; - const shape = value.shape; - for (const key of value.keys) { - const el = shape[key]; - const isOptionalOut = el._zod.optout === "optional"; - const r = el._zod.run({ value: input[key], issues: [] }, ctx); - if (r instanceof Promise) { - proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut))); - } else { - handlePropertyResult(r, payload, key, input, isOptionalOut); - } - } - if (!catchall) { - return proms.length ? Promise.all(proms).then(() => payload) : payload; - } - return handleCatchall(proms, input, payload, ctx, _normalized.value, inst); - }; - }); - $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) => { - $ZodObject.init(inst, def); - const superParse = inst._zod.parse; - const _normalized = cached(() => normalizeDef(def)); - const generateFastpass = (shape) => { - const doc = new Doc(["shape", "payload", "ctx"]); - const normalized = _normalized.value; - const parseStr = (key) => { - const k = esc(key); - return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`; - }; - doc.write(`const input = payload.value;`); - const ids = Object.create(null); - let counter = 0; - for (const key of normalized.keys) { - ids[key] = `key_${counter++}`; - } - doc.write(`const newResult = {};`); - for (const key of normalized.keys) { - const id = ids[key]; - const k = esc(key); - const schema = shape[key]; - const isOptionalOut = schema?._zod?.optout === "optional"; - doc.write(`const ${id} = ${parseStr(key)};`); - if (isOptionalOut) { - doc.write(` - if (${id}.issues.length) { - if (${k} in input) { - payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${k}, ...iss.path] : [${k}] - }))); - } - } - - if (${id}.value === undefined) { - if (${k} in input) { - newResult[${k}] = undefined; - } - } else { - newResult[${k}] = ${id}.value; - } - - `); - } else { - doc.write(` - if (${id}.issues.length) { - payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ - ...iss, - path: iss.path ? [${k}, ...iss.path] : [${k}] - }))); - } - - if (${id}.value === undefined) { - if (${k} in input) { - newResult[${k}] = undefined; - } - } else { - newResult[${k}] = ${id}.value; - } - - `); - } - } - doc.write(`payload.value = newResult;`); - doc.write(`return payload;`); - const fn = doc.compile(); - return (payload, ctx) => fn(shape, payload, ctx); - }; - let fastpass; - const isObject2 = isObject; - const jit = !globalConfig.jitless; - const allowsEval2 = allowsEval; - const fastEnabled = jit && allowsEval2.value; - const catchall = def.catchall; - let value; - inst._zod.parse = (payload, ctx) => { - value ?? (value = _normalized.value); - const input = payload.value; - if (!isObject2(input)) { - payload.issues.push({ - expected: "object", - code: "invalid_type", - input, - inst - }); - return payload; - } - if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) { - if (!fastpass) - fastpass = generateFastpass(def.shape); - payload = fastpass(payload, ctx); - if (!catchall) - return payload; - return handleCatchall([], input, payload, ctx, value, inst); - } - return superParse(payload, ctx); - }; - }); - $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : undefined); - defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : undefined); - defineLazy(inst._zod, "values", () => { - if (def.options.every((o) => o._zod.values)) { - return new Set(def.options.flatMap((option) => Array.from(option._zod.values))); - } - return; - }); - defineLazy(inst._zod, "pattern", () => { - if (def.options.every((o) => o._zod.pattern)) { - const patterns = def.options.map((o) => o._zod.pattern); - return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`); - } - return; - }); - const single = def.options.length === 1; - const first = def.options[0]._zod.run; - inst._zod.parse = (payload, ctx) => { - if (single) { - return first(payload, ctx); - } - let async = false; - const results = []; - for (const option of def.options) { - const result = option._zod.run({ - value: payload.value, - issues: [] - }, ctx); - if (result instanceof Promise) { - results.push(result); - async = true; - } else { - if (result.issues.length === 0) - return result; - results.push(result); - } - } - if (!async) - return handleUnionResults(results, payload, inst, ctx); - return Promise.all(results).then((results2) => { - return handleUnionResults(results2, payload, inst, ctx); - }); - }; - }); - $ZodXor = /* @__PURE__ */ $constructor("$ZodXor", (inst, def) => { - $ZodUnion.init(inst, def); - def.inclusive = false; - const single = def.options.length === 1; - const first = def.options[0]._zod.run; - inst._zod.parse = (payload, ctx) => { - if (single) { - return first(payload, ctx); - } - let async = false; - const results = []; - for (const option of def.options) { - const result = option._zod.run({ - value: payload.value, - issues: [] - }, ctx); - if (result instanceof Promise) { - results.push(result); - async = true; - } else { - results.push(result); - } - } - if (!async) - return handleExclusiveUnionResults(results, payload, inst, ctx); - return Promise.all(results).then((results2) => { - return handleExclusiveUnionResults(results2, payload, inst, ctx); - }); - }; - }); - $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUnion", (inst, def) => { - def.inclusive = false; - $ZodUnion.init(inst, def); - const _super = inst._zod.parse; - defineLazy(inst._zod, "propValues", () => { - const propValues = {}; - for (const option of def.options) { - const pv = option._zod.propValues; - if (!pv || Object.keys(pv).length === 0) - throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`); - for (const [k, v] of Object.entries(pv)) { - if (!propValues[k]) - propValues[k] = new Set; - for (const val of v) { - propValues[k].add(val); - } - } - } - return propValues; - }); - const disc = cached(() => { - const opts = def.options; - const map = new Map; - for (const o of opts) { - const values = o._zod.propValues?.[def.discriminator]; - if (!values || values.size === 0) - throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`); - for (const v of values) { - if (map.has(v)) { - throw new Error(`Duplicate discriminator value "${String(v)}"`); - } - map.set(v, o); - } - } - return map; - }); - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - if (!isObject(input)) { - payload.issues.push({ - code: "invalid_type", - expected: "object", - input, - inst - }); - return payload; - } - const opt = disc.value.get(input?.[def.discriminator]); - if (opt) { - return opt._zod.run(payload, ctx); - } - if (def.unionFallback) { - return _super(payload, ctx); - } - payload.issues.push({ - code: "invalid_union", - errors: [], - note: "No matching discriminator", - discriminator: def.discriminator, - input, - path: [def.discriminator], - inst - }); - return payload; - }; - }); - $ZodIntersection = /* @__PURE__ */ $constructor("$ZodIntersection", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - const left = def.left._zod.run({ value: input, issues: [] }, ctx); - const right = def.right._zod.run({ value: input, issues: [] }, ctx); - const async = left instanceof Promise || right instanceof Promise; - if (async) { - return Promise.all([left, right]).then(([left2, right2]) => { - return handleIntersectionResults(payload, left2, right2); - }); - } - return handleIntersectionResults(payload, left, right); - }; - }); - $ZodTuple = /* @__PURE__ */ $constructor("$ZodTuple", (inst, def) => { - $ZodType.init(inst, def); - const items = def.items; - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - if (!Array.isArray(input)) { - payload.issues.push({ - input, - inst, - expected: "tuple", - code: "invalid_type" - }); - return payload; - } - payload.value = []; - const proms = []; - const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== "optional"); - const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex; - if (!def.rest) { - const tooBig = input.length > items.length; - const tooSmall = input.length < optStart - 1; - if (tooBig || tooSmall) { - payload.issues.push({ - ...tooBig ? { code: "too_big", maximum: items.length, inclusive: true } : { code: "too_small", minimum: items.length }, - input, - inst, - origin: "array" - }); - return payload; - } - } - let i = -1; - for (const item of items) { - i++; - if (i >= input.length) { - if (i >= optStart) - continue; - } - const result = item._zod.run({ - value: input[i], - issues: [] - }, ctx); - if (result instanceof Promise) { - proms.push(result.then((result2) => handleTupleResult(result2, payload, i))); - } else { - handleTupleResult(result, payload, i); - } - } - if (def.rest) { - const rest = input.slice(items.length); - for (const el of rest) { - i++; - const result = def.rest._zod.run({ - value: el, - issues: [] - }, ctx); - if (result instanceof Promise) { - proms.push(result.then((result2) => handleTupleResult(result2, payload, i))); - } else { - handleTupleResult(result, payload, i); - } - } - } - if (proms.length) - return Promise.all(proms).then(() => payload); - return payload; - }; - }); - $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - if (!isPlainObject(input)) { - payload.issues.push({ - expected: "record", - code: "invalid_type", - input, - inst - }); - return payload; - } - const proms = []; - const values = def.keyType._zod.values; - if (values) { - payload.value = {}; - const recordKeys = new Set; - for (const key of values) { - if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") { - recordKeys.add(typeof key === "number" ? key.toString() : key); - const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); - if (result instanceof Promise) { - proms.push(result.then((result2) => { - if (result2.issues.length) { - payload.issues.push(...prefixIssues(key, result2.issues)); - } - payload.value[key] = result2.value; - })); - } else { - if (result.issues.length) { - payload.issues.push(...prefixIssues(key, result.issues)); - } - payload.value[key] = result.value; - } - } - } - let unrecognized; - for (const key in input) { - if (!recordKeys.has(key)) { - unrecognized = unrecognized ?? []; - unrecognized.push(key); - } - } - if (unrecognized && unrecognized.length > 0) { - payload.issues.push({ - code: "unrecognized_keys", - input, - inst, - keys: unrecognized - }); - } - } else { - payload.value = {}; - for (const key of Reflect.ownKeys(input)) { - if (key === "__proto__") - continue; - let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); - if (keyResult instanceof Promise) { - throw new Error("Async schemas not supported in object keys currently"); - } - const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length && keyResult.issues.some((iss) => iss.code === "invalid_type" && iss.expected === "number"); - if (checkNumericKey) { - const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx); - if (retryResult instanceof Promise) { - throw new Error("Async schemas not supported in object keys currently"); - } - if (retryResult.issues.length === 0) { - keyResult = retryResult; - } - } - if (keyResult.issues.length) { - if (def.mode === "loose") { - payload.value[key] = input[key]; - } else { - payload.issues.push({ - code: "invalid_key", - origin: "record", - issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())), - input: key, - path: [key], - inst - }); - } - continue; - } - const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); - if (result instanceof Promise) { - proms.push(result.then((result2) => { - if (result2.issues.length) { - payload.issues.push(...prefixIssues(key, result2.issues)); - } - payload.value[keyResult.value] = result2.value; - })); - } else { - if (result.issues.length) { - payload.issues.push(...prefixIssues(key, result.issues)); - } - payload.value[keyResult.value] = result.value; - } - } - } - if (proms.length) { - return Promise.all(proms).then(() => payload); - } - return payload; - }; - }); - $ZodMap = /* @__PURE__ */ $constructor("$ZodMap", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - if (!(input instanceof Map)) { - payload.issues.push({ - expected: "map", - code: "invalid_type", - input, - inst - }); - return payload; - } - const proms = []; - payload.value = new Map; - for (const [key, value] of input) { - const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); - const valueResult = def.valueType._zod.run({ value, issues: [] }, ctx); - if (keyResult instanceof Promise || valueResult instanceof Promise) { - proms.push(Promise.all([keyResult, valueResult]).then(([keyResult2, valueResult2]) => { - handleMapResult(keyResult2, valueResult2, payload, key, input, inst, ctx); - })); - } else { - handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx); - } - } - if (proms.length) - return Promise.all(proms).then(() => payload); - return payload; - }; - }); - $ZodSet = /* @__PURE__ */ $constructor("$ZodSet", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - const input = payload.value; - if (!(input instanceof Set)) { - payload.issues.push({ - input, - inst, - expected: "set", - code: "invalid_type" - }); - return payload; - } - const proms = []; - payload.value = new Set; - for (const item of input) { - const result = def.valueType._zod.run({ value: item, issues: [] }, ctx); - if (result instanceof Promise) { - proms.push(result.then((result2) => handleSetResult(result2, payload))); - } else - handleSetResult(result, payload); - } - if (proms.length) - return Promise.all(proms).then(() => payload); - return payload; - }; - }); - $ZodEnum = /* @__PURE__ */ $constructor("$ZodEnum", (inst, def) => { - $ZodType.init(inst, def); - const values = getEnumValues(def.entries); - const valuesSet = new Set(values); - inst._zod.values = valuesSet; - inst._zod.pattern = new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === "string" ? escapeRegex(o) : o.toString()).join("|")})$`); - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (valuesSet.has(input)) { - return payload; - } - payload.issues.push({ - code: "invalid_value", - values, - input, - inst - }); - return payload; - }; - }); - $ZodLiteral = /* @__PURE__ */ $constructor("$ZodLiteral", (inst, def) => { - $ZodType.init(inst, def); - if (def.values.length === 0) { - throw new Error("Cannot create literal schema with no valid values"); - } - const values = new Set(def.values); - inst._zod.values = values; - inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join("|")})$`); - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (values.has(input)) { - return payload; - } - payload.issues.push({ - code: "invalid_value", - values: def.values, - input, - inst - }); - return payload; - }; - }); - $ZodFile = /* @__PURE__ */ $constructor("$ZodFile", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, _ctx) => { - const input = payload.value; - if (input instanceof File) - return payload; - payload.issues.push({ - expected: "file", - code: "invalid_type", - input, - inst - }); - return payload; - }; - }); - $ZodTransform = /* @__PURE__ */ $constructor("$ZodTransform", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - throw new $ZodEncodeError(inst.constructor.name); - } - const _out = def.transform(payload.value, payload); - if (ctx.async) { - const output = _out instanceof Promise ? _out : Promise.resolve(_out); - return output.then((output2) => { - payload.value = output2; - return payload; - }); - } - if (_out instanceof Promise) { - throw new $ZodAsyncError; - } - payload.value = _out; - return payload; - }; - }); - $ZodOptional = /* @__PURE__ */ $constructor("$ZodOptional", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.optin = "optional"; - inst._zod.optout = "optional"; - defineLazy(inst._zod, "values", () => { - return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined; - }); - defineLazy(inst._zod, "pattern", () => { - const pattern = def.innerType._zod.pattern; - return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : undefined; - }); - inst._zod.parse = (payload, ctx) => { - if (def.innerType._zod.optin === "optional") { - const result = def.innerType._zod.run(payload, ctx); - if (result instanceof Promise) - return result.then((r) => handleOptionalResult(r, payload.value)); - return handleOptionalResult(result, payload.value); - } - if (payload.value === undefined) { - return payload; - } - return def.innerType._zod.run(payload, ctx); - }; - }); - $ZodExactOptional = /* @__PURE__ */ $constructor("$ZodExactOptional", (inst, def) => { - $ZodOptional.init(inst, def); - defineLazy(inst._zod, "values", () => def.innerType._zod.values); - defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern); - inst._zod.parse = (payload, ctx) => { - return def.innerType._zod.run(payload, ctx); - }; - }); - $ZodNullable = /* @__PURE__ */ $constructor("$ZodNullable", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); - defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); - defineLazy(inst._zod, "pattern", () => { - const pattern = def.innerType._zod.pattern; - return pattern ? new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : undefined; - }); - defineLazy(inst._zod, "values", () => { - return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined; - }); - inst._zod.parse = (payload, ctx) => { - if (payload.value === null) - return payload; - return def.innerType._zod.run(payload, ctx); - }; - }); - $ZodDefault = /* @__PURE__ */ $constructor("$ZodDefault", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.optin = "optional"; - defineLazy(inst._zod, "values", () => def.innerType._zod.values); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - return def.innerType._zod.run(payload, ctx); - } - if (payload.value === undefined) { - payload.value = def.defaultValue; - return payload; - } - const result = def.innerType._zod.run(payload, ctx); - if (result instanceof Promise) { - return result.then((result2) => handleDefaultResult(result2, def)); - } - return handleDefaultResult(result, def); - }; - }); - $ZodPrefault = /* @__PURE__ */ $constructor("$ZodPrefault", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.optin = "optional"; - defineLazy(inst._zod, "values", () => def.innerType._zod.values); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - return def.innerType._zod.run(payload, ctx); - } - if (payload.value === undefined) { - payload.value = def.defaultValue; - } - return def.innerType._zod.run(payload, ctx); - }; - }); - $ZodNonOptional = /* @__PURE__ */ $constructor("$ZodNonOptional", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "values", () => { - const v = def.innerType._zod.values; - return v ? new Set([...v].filter((x) => x !== undefined)) : undefined; - }); - inst._zod.parse = (payload, ctx) => { - const result = def.innerType._zod.run(payload, ctx); - if (result instanceof Promise) { - return result.then((result2) => handleNonOptionalResult(result2, inst)); - } - return handleNonOptionalResult(result, inst); - }; - }); - $ZodSuccess = /* @__PURE__ */ $constructor("$ZodSuccess", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - throw new $ZodEncodeError("ZodSuccess"); - } - const result = def.innerType._zod.run(payload, ctx); - if (result instanceof Promise) { - return result.then((result2) => { - payload.value = result2.issues.length === 0; - return payload; - }); - } - payload.value = result.issues.length === 0; - return payload; - }; - }); - $ZodCatch = /* @__PURE__ */ $constructor("$ZodCatch", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); - defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); - defineLazy(inst._zod, "values", () => def.innerType._zod.values); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - return def.innerType._zod.run(payload, ctx); - } - const result = def.innerType._zod.run(payload, ctx); - if (result instanceof Promise) { - return result.then((result2) => { - payload.value = result2.value; - if (result2.issues.length) { - payload.value = def.catchValue({ - ...payload, - error: { - issues: result2.issues.map((iss) => finalizeIssue(iss, ctx, config())) - }, - input: payload.value - }); - payload.issues = []; - } - return payload; - }); - } - payload.value = result.value; - if (result.issues.length) { - payload.value = def.catchValue({ - ...payload, - error: { - issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config())) - }, - input: payload.value - }); - payload.issues = []; - } - return payload; - }; - }); - $ZodNaN = /* @__PURE__ */ $constructor("$ZodNaN", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, _ctx) => { - if (typeof payload.value !== "number" || !Number.isNaN(payload.value)) { - payload.issues.push({ - input: payload.value, - inst, - expected: "nan", - code: "invalid_type" - }); - return payload; - } - return payload; - }; - }); - $ZodPipe = /* @__PURE__ */ $constructor("$ZodPipe", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "values", () => def.in._zod.values); - defineLazy(inst._zod, "optin", () => def.in._zod.optin); - defineLazy(inst._zod, "optout", () => def.out._zod.optout); - defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - const right = def.out._zod.run(payload, ctx); - if (right instanceof Promise) { - return right.then((right2) => handlePipeResult(right2, def.in, ctx)); - } - return handlePipeResult(right, def.in, ctx); - } - const left = def.in._zod.run(payload, ctx); - if (left instanceof Promise) { - return left.then((left2) => handlePipeResult(left2, def.out, ctx)); - } - return handlePipeResult(left, def.out, ctx); - }; - }); - $ZodCodec = /* @__PURE__ */ $constructor("$ZodCodec", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "values", () => def.in._zod.values); - defineLazy(inst._zod, "optin", () => def.in._zod.optin); - defineLazy(inst._zod, "optout", () => def.out._zod.optout); - defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); - inst._zod.parse = (payload, ctx) => { - const direction = ctx.direction || "forward"; - if (direction === "forward") { - const left = def.in._zod.run(payload, ctx); - if (left instanceof Promise) { - return left.then((left2) => handleCodecAResult(left2, def, ctx)); - } - return handleCodecAResult(left, def, ctx); - } else { - const right = def.out._zod.run(payload, ctx); - if (right instanceof Promise) { - return right.then((right2) => handleCodecAResult(right2, def, ctx)); - } - return handleCodecAResult(right, def, ctx); - } - }; - }); - $ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues); - defineLazy(inst._zod, "values", () => def.innerType._zod.values); - defineLazy(inst._zod, "optin", () => def.innerType?._zod?.optin); - defineLazy(inst._zod, "optout", () => def.innerType?._zod?.optout); - inst._zod.parse = (payload, ctx) => { - if (ctx.direction === "backward") { - return def.innerType._zod.run(payload, ctx); - } - const result = def.innerType._zod.run(payload, ctx); - if (result instanceof Promise) { - return result.then(handleReadonlyResult); - } - return handleReadonlyResult(result); - }; - }); - $ZodTemplateLiteral = /* @__PURE__ */ $constructor("$ZodTemplateLiteral", (inst, def) => { - $ZodType.init(inst, def); - const regexParts = []; - for (const part of def.parts) { - if (typeof part === "object" && part !== null) { - if (!part._zod.pattern) { - throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`); - } - const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern; - if (!source) - throw new Error(`Invalid template literal part: ${part._zod.traits}`); - const start = source.startsWith("^") ? 1 : 0; - const end = source.endsWith("$") ? source.length - 1 : source.length; - regexParts.push(source.slice(start, end)); - } else if (part === null || primitiveTypes.has(typeof part)) { - regexParts.push(escapeRegex(`${part}`)); - } else { - throw new Error(`Invalid template literal part: ${part}`); - } - } - inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`); - inst._zod.parse = (payload, _ctx) => { - if (typeof payload.value !== "string") { - payload.issues.push({ - input: payload.value, - inst, - expected: "string", - code: "invalid_type" - }); - return payload; - } - inst._zod.pattern.lastIndex = 0; - if (!inst._zod.pattern.test(payload.value)) { - payload.issues.push({ - input: payload.value, - inst, - code: "invalid_format", - format: def.format ?? "template_literal", - pattern: inst._zod.pattern.source - }); - return payload; - } - return payload; - }; - }); - $ZodFunction = /* @__PURE__ */ $constructor("$ZodFunction", (inst, def) => { - $ZodType.init(inst, def); - inst._def = def; - inst._zod.def = def; - inst.implement = (func) => { - if (typeof func !== "function") { - throw new Error("implement() must be called with a function"); - } - return function(...args) { - const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args; - const result = Reflect.apply(func, this, parsedArgs); - if (inst._def.output) { - return parse(inst._def.output, result); - } - return result; - }; - }; - inst.implementAsync = (func) => { - if (typeof func !== "function") { - throw new Error("implementAsync() must be called with a function"); - } - return async function(...args) { - const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args; - const result = await Reflect.apply(func, this, parsedArgs); - if (inst._def.output) { - return await parseAsync(inst._def.output, result); - } - return result; - }; - }; - inst._zod.parse = (payload, _ctx) => { - if (typeof payload.value !== "function") { - payload.issues.push({ - code: "invalid_type", - expected: "function", - input: payload.value, - inst - }); - return payload; - } - const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === "promise"; - if (hasPromiseOutput) { - payload.value = inst.implementAsync(payload.value); - } else { - payload.value = inst.implement(payload.value); - } - return payload; - }; - inst.input = (...args) => { - const F = inst.constructor; - if (Array.isArray(args[0])) { - return new F({ - type: "function", - input: new $ZodTuple({ - type: "tuple", - items: args[0], - rest: args[1] - }), - output: inst._def.output - }); - } - return new F({ - type: "function", - input: args[0], - output: inst._def.output - }); - }; - inst.output = (output) => { - const F = inst.constructor; - return new F({ - type: "function", - input: inst._def.input, - output - }); - }; - return inst; - }); - $ZodPromise = /* @__PURE__ */ $constructor("$ZodPromise", (inst, def) => { - $ZodType.init(inst, def); - inst._zod.parse = (payload, ctx) => { - return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx)); - }; - }); - $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => { - $ZodType.init(inst, def); - defineLazy(inst._zod, "innerType", () => def.getter()); - defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern); - defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues); - defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? undefined); - defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? undefined); - inst._zod.parse = (payload, ctx) => { - const inner = inst._zod.innerType; - return inner._zod.run(payload, ctx); - }; - }); - $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => { - $ZodCheck.init(inst, def); - $ZodType.init(inst, def); - inst._zod.parse = (payload, _) => { - return payload; - }; - inst._zod.check = (payload) => { - const input = payload.value; - const r = def.fn(input); - if (r instanceof Promise) { - return r.then((r2) => handleRefineResult(r2, payload, input, inst)); - } - handleRefineResult(r, payload, input, inst); - return; - }; - }); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ar.js -function ar_default() { - return { - localeError: error() - }; -} -var error = () => { - const Sizable = { - string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, - file: { unit: "\u0628\u0627\u064A\u062A", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, - array: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, - set: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0645\u062F\u062E\u0644", - email: "\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A", - url: "\u0631\u0627\u0628\u0637", - emoji: "\u0625\u064A\u0645\u0648\u062C\u064A", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", - date: "\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO", - time: "\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", - duration: "\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO", - ipv4: "\u0639\u0646\u0648\u0627\u0646 IPv4", - ipv6: "\u0639\u0646\u0648\u0627\u0646 IPv6", - cidrv4: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4", - cidrv6: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6", - base64: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded", - base64url: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded", - json_string: "\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON", - e164: "\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164", - jwt: "JWT", - template_literal: "\u0645\u062F\u062E\u0644" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue2.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; - } - return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${stringifyPrimitive(issue2.values[0])}`; - return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"}`; - return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 "${issue2.prefix}"`; - if (_issue.format === "ends_with") - return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`; - } - case "not_multiple_of": - return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue2.divisor}`; - case "unrecognized_keys": - return `\u0645\u0639\u0631\u0641${issue2.keys.length > 1 ? "\u0627\u062A" : ""} \u063A\u0631\u064A\u0628${issue2.keys.length > 1 ? "\u0629" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; - case "invalid_key": - return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; - case "invalid_union": - return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; - case "invalid_element": - return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; - default: - return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; - } - }; -}; -var init_ar = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/az.js -function az_default() { - return { - localeError: error2() - }; -} -var error2 = () => { - const Sizable = { - string: { unit: "simvol", verb: "olmal\u0131d\u0131r" }, - file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, - array: { unit: "element", verb: "olmal\u0131d\u0131r" }, - set: { unit: "element", verb: "olmal\u0131d\u0131r" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "email address", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO datetime", - date: "ISO date", - time: "ISO time", - duration: "ISO duration", - ipv4: "IPv4 address", - ipv6: "IPv6 address", - cidrv4: "IPv4 range", - cidrv6: "IPv6 range", - base64: "base64-encoded string", - base64url: "base64url-encoded string", - json_string: "JSON string", - e164: "E.164 number", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${issue2.expected}, daxil olan ${received}`; - } - return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${stringifyPrimitive(issue2.values[0])}`; - return `Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`; - return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Yanl\u0131\u015F m\u0259tn: "${_issue.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`; - if (_issue.format === "ends_with") - return `Yanl\u0131\u015F m\u0259tn: "${_issue.suffix}" il\u0259 bitm\u0259lidir`; - if (_issue.format === "includes") - return `Yanl\u0131\u015F m\u0259tn: "${_issue.includes}" daxil olmal\u0131d\u0131r`; - if (_issue.format === "regex") - return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`; - return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Yanl\u0131\u015F \u0259d\u0259d: ${issue2.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`; - case "unrecognized_keys": - return `Tan\u0131nmayan a\xE7ar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`; - case "invalid_union": - return "Yanl\u0131\u015F d\u0259y\u0259r"; - case "invalid_element": - return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`; - default: - return `Yanl\u0131\u015F d\u0259y\u0259r`; - } - }; -}; -var init_az = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/be.js -function getBelarusianPlural(count, one, few, many) { - const absCount = Math.abs(count); - const lastDigit = absCount % 10; - const lastTwoDigits = absCount % 100; - if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { - return many; - } - if (lastDigit === 1) { - return one; - } - if (lastDigit >= 2 && lastDigit <= 4) { - return few; - } - return many; -} -function be_default() { - return { - localeError: error3() - }; -} -var error3 = () => { - const Sizable = { - string: { - unit: { - one: "\u0441\u0456\u043C\u0432\u0430\u043B", - few: "\u0441\u0456\u043C\u0432\u0430\u043B\u044B", - many: "\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E" - }, - verb: "\u043C\u0435\u0446\u044C" - }, - array: { - unit: { - one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", - few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", - many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" - }, - verb: "\u043C\u0435\u0446\u044C" - }, - set: { - unit: { - one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", - few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", - many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" - }, - verb: "\u043C\u0435\u0446\u044C" - }, - file: { - unit: { - one: "\u0431\u0430\u0439\u0442", - few: "\u0431\u0430\u0439\u0442\u044B", - many: "\u0431\u0430\u0439\u0442\u0430\u045E" - }, - verb: "\u043C\u0435\u0446\u044C" - } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0443\u0432\u043E\u0434", - email: "email \u0430\u0434\u0440\u0430\u0441", - url: "URL", - emoji: "\u044D\u043C\u043E\u0434\u0437\u0456", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441", - date: "ISO \u0434\u0430\u0442\u0430", - time: "ISO \u0447\u0430\u0441", - duration: "ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C", - ipv4: "IPv4 \u0430\u0434\u0440\u0430\u0441", - ipv6: "IPv6 \u0430\u0434\u0440\u0430\u0441", - cidrv4: "IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", - cidrv6: "IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", - base64: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64", - base64url: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url", - json_string: "JSON \u0440\u0430\u0434\u043E\u043A", - e164: "\u043D\u0443\u043C\u0430\u0440 E.164", - jwt: "JWT", - template_literal: "\u0443\u0432\u043E\u0434" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u043B\u0456\u043A", - array: "\u043C\u0430\u0441\u0456\u045E" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue2.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; - } - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - const maxValue = Number(issue2.maximum); - const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); - return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.maximum.toString()} ${unit}`; - } - return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - const minValue = Number(issue2.minimum); - const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); - return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.minimum.toString()} ${unit}`; - } - return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; - case "unrecognized_keys": - return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue2.keys.length > 1 ? "\u043A\u043B\u044E\u0447\u044B" : "\u043A\u043B\u044E\u0447"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; - case "invalid_union": - return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"; - case "invalid_element": - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue2.origin}`; - default: - return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`; - } - }; -}; -var init_be = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/bg.js -function bg_default() { - return { - localeError: error4() - }; -} -var error4 = () => { - const Sizable = { - string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, - file: { unit: "\u0431\u0430\u0439\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, - array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, - set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0432\u0445\u043E\u0434", - email: "\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441", - url: "URL", - emoji: "\u0435\u043C\u043E\u0434\u0436\u0438", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u0432\u0440\u0435\u043C\u0435", - date: "ISO \u0434\u0430\u0442\u0430", - time: "ISO \u0432\u0440\u0435\u043C\u0435", - duration: "ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442", - ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", - ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", - cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", - cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", - base64: "base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", - base64url: "base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", - json_string: "JSON \u043D\u0438\u0437", - e164: "E.164 \u043D\u043E\u043C\u0435\u0440", - jwt: "JWT", - template_literal: "\u0432\u0445\u043E\u0434" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0447\u0438\u0441\u043B\u043E", - array: "\u043C\u0430\u0441\u0438\u0432" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; - } - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${stringifyPrimitive(issue2.values[0])}`; - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430"}`; - return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`; - let invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D"; - if (_issue.format === "emoji") - invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; - if (_issue.format === "datetime") - invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; - if (_issue.format === "date") - invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; - if (_issue.format === "time") - invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; - if (_issue.format === "duration") - invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; - return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue2.divisor}`; - case "unrecognized_keys": - return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue2.keys.length > 1 ? "\u0438" : ""} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u043E\u0432\u0435" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; - case "invalid_union": - return "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434"; - case "invalid_element": - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue2.origin}`; - default: - return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`; - } - }; -}; -var init_bg = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ca.js -function ca_default() { - return { - localeError: error5() - }; -} -var error5 = () => { - const Sizable = { - string: { unit: "car\xE0cters", verb: "contenir" }, - file: { unit: "bytes", verb: "contenir" }, - array: { unit: "elements", verb: "contenir" }, - set: { unit: "elements", verb: "contenir" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "entrada", - email: "adre\xE7a electr\xF2nica", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "data i hora ISO", - date: "data ISO", - time: "hora ISO", - duration: "durada ISO", - ipv4: "adre\xE7a IPv4", - ipv6: "adre\xE7a IPv6", - cidrv4: "rang IPv4", - cidrv6: "rang IPv6", - base64: "cadena codificada en base64", - base64url: "cadena codificada en base64url", - json_string: "cadena JSON", - e164: "n\xFAmero E.164", - jwt: "JWT", - template_literal: "entrada" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Tipus inv\xE0lid: s'esperava instanceof ${issue2.expected}, s'ha rebut ${received}`; - } - return `Tipus inv\xE0lid: s'esperava ${expected}, s'ha rebut ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Valor inv\xE0lid: s'esperava ${stringifyPrimitive(issue2.values[0])}`; - return `Opci\xF3 inv\xE0lida: s'esperava una de ${joinValues(issue2.values, " o ")}`; - case "too_big": { - const adj = issue2.inclusive ? "com a m\xE0xim" : "menys de"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} contingu\xE9s ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`; - return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} fos ${adj} ${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? "com a m\xEDnim" : "m\xE9s de"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Massa petit: s'esperava que ${issue2.origin} contingu\xE9s ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Massa petit: s'esperava que ${issue2.origin} fos ${adj} ${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Format inv\xE0lid: ha de comen\xE7ar amb "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `Format inv\xE0lid: ha d'acabar amb "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Format inv\xE0lid: ha d'incloure "${_issue.includes}"`; - if (_issue.format === "regex") - return `Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${_issue.pattern}`; - return `Format inv\xE0lid per a ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${issue2.divisor}`; - case "unrecognized_keys": - return `Clau${issue2.keys.length > 1 ? "s" : ""} no reconeguda${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Clau inv\xE0lida a ${issue2.origin}`; - case "invalid_union": - return "Entrada inv\xE0lida"; - case "invalid_element": - return `Element inv\xE0lid a ${issue2.origin}`; - default: - return `Entrada inv\xE0lida`; - } - }; -}; -var init_ca = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/cs.js -function cs_default() { - return { - localeError: error6() - }; -} -var error6 = () => { - const Sizable = { - string: { unit: "znak\u016F", verb: "m\xEDt" }, - file: { unit: "bajt\u016F", verb: "m\xEDt" }, - array: { unit: "prvk\u016F", verb: "m\xEDt" }, - set: { unit: "prvk\u016F", verb: "m\xEDt" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "regul\xE1rn\xED v\xFDraz", - email: "e-mailov\xE1 adresa", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "datum a \u010Das ve form\xE1tu ISO", - date: "datum ve form\xE1tu ISO", - time: "\u010Das ve form\xE1tu ISO", - duration: "doba trv\xE1n\xED ISO", - ipv4: "IPv4 adresa", - ipv6: "IPv6 adresa", - cidrv4: "rozsah IPv4", - cidrv6: "rozsah IPv6", - base64: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64", - base64url: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64url", - json_string: "\u0159et\u011Bzec ve form\xE1tu JSON", - e164: "\u010D\xEDslo E.164", - jwt: "JWT", - template_literal: "vstup" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u010D\xEDslo", - string: "\u0159et\u011Bzec", - function: "funkce", - array: "pole" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${issue2.expected}, obdr\u017Eeno ${received}`; - } - return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${expected}, obdr\u017Eeno ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${stringifyPrimitive(issue2.values[0])}`; - return `Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "prvk\u016F"}`; - } - return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "prvk\u016F"}`; - } - return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${_issue.includes}"`; - if (_issue.format === "regex") - return `Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${_issue.pattern}`; - return `Neplatn\xFD form\xE1t ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${issue2.divisor}`; - case "unrecognized_keys": - return `Nezn\xE1m\xE9 kl\xED\u010De: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Neplatn\xFD kl\xED\u010D v ${issue2.origin}`; - case "invalid_union": - return "Neplatn\xFD vstup"; - case "invalid_element": - return `Neplatn\xE1 hodnota v ${issue2.origin}`; - default: - return `Neplatn\xFD vstup`; - } - }; -}; -var init_cs = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/da.js -function da_default() { - return { - localeError: error7() - }; -} -var error7 = () => { - const Sizable = { - string: { unit: "tegn", verb: "havde" }, - file: { unit: "bytes", verb: "havde" }, - array: { unit: "elementer", verb: "indeholdt" }, - set: { unit: "elementer", verb: "indeholdt" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "e-mailadresse", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO dato- og klokkesl\xE6t", - date: "ISO-dato", - time: "ISO-klokkesl\xE6t", - duration: "ISO-varighed", - ipv4: "IPv4-omr\xE5de", - ipv6: "IPv6-omr\xE5de", - cidrv4: "IPv4-spektrum", - cidrv6: "IPv6-spektrum", - base64: "base64-kodet streng", - base64url: "base64url-kodet streng", - json_string: "JSON-streng", - e164: "E.164-nummer", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN", - string: "streng", - number: "tal", - boolean: "boolean", - array: "liste", - object: "objekt", - set: "s\xE6t", - file: "fil" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Ugyldigt input: forventede instanceof ${issue2.expected}, fik ${received}`; - } - return `Ugyldigt input: forventede ${expected}, fik ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Ugyldig v\xE6rdi: forventede ${stringifyPrimitive(issue2.values[0])}`; - return `Ugyldigt valg: forventede en af f\xF8lgende ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - if (sizing) - return `For stor: forventede ${origin ?? "value"} ${sizing.verb} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`; - return `For stor: forventede ${origin ?? "value"} havde ${adj} ${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - if (sizing) { - return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; - } - return `For lille: forventede ${origin} havde ${adj} ${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Ugyldig streng: skal starte med "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Ugyldig streng: skal ende med "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Ugyldig streng: skal indeholde "${_issue.includes}"`; - if (_issue.format === "regex") - return `Ugyldig streng: skal matche m\xF8nsteret ${_issue.pattern}`; - return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Ugyldigt tal: skal v\xE6re deleligt med ${issue2.divisor}`; - case "unrecognized_keys": - return `${issue2.keys.length > 1 ? "Ukendte n\xF8gler" : "Ukendt n\xF8gle"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Ugyldig n\xF8gle i ${issue2.origin}`; - case "invalid_union": - return "Ugyldigt input: matcher ingen af de tilladte typer"; - case "invalid_element": - return `Ugyldig v\xE6rdi i ${issue2.origin}`; - default: - return `Ugyldigt input`; - } - }; -}; -var init_da = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/de.js -function de_default() { - return { - localeError: error8() - }; -} -var error8 = () => { - const Sizable = { - string: { unit: "Zeichen", verb: "zu haben" }, - file: { unit: "Bytes", verb: "zu haben" }, - array: { unit: "Elemente", verb: "zu haben" }, - set: { unit: "Elemente", verb: "zu haben" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "Eingabe", - email: "E-Mail-Adresse", - url: "URL", - emoji: "Emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO-Datum und -Uhrzeit", - date: "ISO-Datum", - time: "ISO-Uhrzeit", - duration: "ISO-Dauer", - ipv4: "IPv4-Adresse", - ipv6: "IPv6-Adresse", - cidrv4: "IPv4-Bereich", - cidrv6: "IPv6-Bereich", - base64: "Base64-codierter String", - base64url: "Base64-URL-codierter String", - json_string: "JSON-String", - e164: "E.164-Nummer", - jwt: "JWT", - template_literal: "Eingabe" - }; - const TypeDictionary = { - nan: "NaN", - number: "Zahl", - array: "Array" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Ung\xFCltige Eingabe: erwartet instanceof ${issue2.expected}, erhalten ${received}`; - } - return `Ung\xFCltige Eingabe: erwartet ${expected}, erhalten ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Ung\xFCltige Eingabe: erwartet ${stringifyPrimitive(issue2.values[0])}`; - return `Ung\xFCltige Option: erwartet eine von ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`; - return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ist`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} hat`; - } - return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ist`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Ung\xFCltiger String: muss mit "${_issue.prefix}" beginnen`; - if (_issue.format === "ends_with") - return `Ung\xFCltiger String: muss mit "${_issue.suffix}" enden`; - if (_issue.format === "includes") - return `Ung\xFCltiger String: muss "${_issue.includes}" enthalten`; - if (_issue.format === "regex") - return `Ung\xFCltiger String: muss dem Muster ${_issue.pattern} entsprechen`; - return `Ung\xFCltig: ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Ung\xFCltige Zahl: muss ein Vielfaches von ${issue2.divisor} sein`; - case "unrecognized_keys": - return `${issue2.keys.length > 1 ? "Unbekannte Schl\xFCssel" : "Unbekannter Schl\xFCssel"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Ung\xFCltiger Schl\xFCssel in ${issue2.origin}`; - case "invalid_union": - return "Ung\xFCltige Eingabe"; - case "invalid_element": - return `Ung\xFCltiger Wert in ${issue2.origin}`; - default: - return `Ung\xFCltige Eingabe`; - } - }; -}; -var init_de = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/en.js -function en_default() { - return { - localeError: error9() - }; -} -var error9 = () => { - const Sizable = { - string: { unit: "characters", verb: "to have" }, - file: { unit: "bytes", verb: "to have" }, - array: { unit: "items", verb: "to have" }, - set: { unit: "items", verb: "to have" }, - map: { unit: "entries", verb: "to have" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "email address", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO datetime", - date: "ISO date", - time: "ISO time", - duration: "ISO duration", - ipv4: "IPv4 address", - ipv6: "IPv6 address", - mac: "MAC address", - cidrv4: "IPv4 range", - cidrv6: "IPv6 range", - base64: "base64-encoded string", - base64url: "base64url-encoded string", - json_string: "JSON string", - e164: "E.164 number", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - return `Invalid input: expected ${expected}, received ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; - return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Too big: expected ${issue2.origin ?? "value"} to have ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`; - return `Too big: expected ${issue2.origin ?? "value"} to be ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Invalid string: must start with "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `Invalid string: must end with "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Invalid string: must include "${_issue.includes}"`; - if (_issue.format === "regex") - return `Invalid string: must match pattern ${_issue.pattern}`; - return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Invalid number: must be a multiple of ${issue2.divisor}`; - case "unrecognized_keys": - return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Invalid key in ${issue2.origin}`; - case "invalid_union": - return "Invalid input"; - case "invalid_element": - return `Invalid value in ${issue2.origin}`; - default: - return `Invalid input`; - } - }; -}; -var init_en = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/eo.js -function eo_default() { - return { - localeError: error10() - }; -} -var error10 = () => { - const Sizable = { - string: { unit: "karaktrojn", verb: "havi" }, - file: { unit: "bajtojn", verb: "havi" }, - array: { unit: "elementojn", verb: "havi" }, - set: { unit: "elementojn", verb: "havi" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "enigo", - email: "retadreso", - url: "URL", - emoji: "emo\u011Dio", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO-datotempo", - date: "ISO-dato", - time: "ISO-tempo", - duration: "ISO-da\u016Dro", - ipv4: "IPv4-adreso", - ipv6: "IPv6-adreso", - cidrv4: "IPv4-rango", - cidrv6: "IPv6-rango", - base64: "64-ume kodita karaktraro", - base64url: "URL-64-ume kodita karaktraro", - json_string: "JSON-karaktraro", - e164: "E.164-nombro", - jwt: "JWT", - template_literal: "enigo" - }; - const TypeDictionary = { - nan: "NaN", - number: "nombro", - array: "tabelo", - null: "senvalora" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Nevalida enigo: atendi\u011Dis instanceof ${issue2.expected}, ricevi\u011Dis ${received}`; - } - return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Nevalida enigo: atendi\u011Dis ${stringifyPrimitive(issue2.values[0])}`; - return `Nevalida opcio: atendi\u011Dis unu el ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementojn"}`; - return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} havu ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} estu ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Nevalida karaktraro: devas komenci\u011Di per "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Nevalida karaktraro: devas fini\u011Di per "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`; - if (_issue.format === "regex") - return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`; - return `Nevalida ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Nevalida nombro: devas esti oblo de ${issue2.divisor}`; - case "unrecognized_keys": - return `Nekonata${issue2.keys.length > 1 ? "j" : ""} \u015Dlosilo${issue2.keys.length > 1 ? "j" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Nevalida \u015Dlosilo en ${issue2.origin}`; - case "invalid_union": - return "Nevalida enigo"; - case "invalid_element": - return `Nevalida valoro en ${issue2.origin}`; - default: - return `Nevalida enigo`; - } - }; -}; -var init_eo = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/es.js -function es_default() { - return { - localeError: error11() - }; -} -var error11 = () => { - const Sizable = { - string: { unit: "caracteres", verb: "tener" }, - file: { unit: "bytes", verb: "tener" }, - array: { unit: "elementos", verb: "tener" }, - set: { unit: "elementos", verb: "tener" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "entrada", - email: "direcci\xF3n de correo electr\xF3nico", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "fecha y hora ISO", - date: "fecha ISO", - time: "hora ISO", - duration: "duraci\xF3n ISO", - ipv4: "direcci\xF3n IPv4", - ipv6: "direcci\xF3n IPv6", - cidrv4: "rango IPv4", - cidrv6: "rango IPv6", - base64: "cadena codificada en base64", - base64url: "URL codificada en base64", - json_string: "cadena JSON", - e164: "n\xFAmero E.164", - jwt: "JWT", - template_literal: "entrada" - }; - const TypeDictionary = { - nan: "NaN", - string: "texto", - number: "n\xFAmero", - boolean: "booleano", - array: "arreglo", - object: "objeto", - set: "conjunto", - file: "archivo", - date: "fecha", - bigint: "n\xFAmero grande", - symbol: "s\xEDmbolo", - undefined: "indefinido", - null: "nulo", - function: "funci\xF3n", - map: "mapa", - record: "registro", - tuple: "tupla", - enum: "enumeraci\xF3n", - union: "uni\xF3n", - literal: "literal", - promise: "promesa", - void: "vac\xEDo", - never: "nunca", - unknown: "desconocido", - any: "cualquiera" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Entrada inv\xE1lida: se esperaba instanceof ${issue2.expected}, recibido ${received}`; - } - return `Entrada inv\xE1lida: se esperaba ${expected}, recibido ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Entrada inv\xE1lida: se esperaba ${stringifyPrimitive(issue2.values[0])}`; - return `Opci\xF3n inv\xE1lida: se esperaba una de ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - if (sizing) - return `Demasiado grande: se esperaba que ${origin ?? "valor"} tuviera ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`; - return `Demasiado grande: se esperaba que ${origin ?? "valor"} fuera ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - if (sizing) { - return `Demasiado peque\xF1o: se esperaba que ${origin} tuviera ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Demasiado peque\xF1o: se esperaba que ${origin} fuera ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Cadena inv\xE1lida: debe comenzar con "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Cadena inv\xE1lida: debe terminar en "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Cadena inv\xE1lida: debe incluir "${_issue.includes}"`; - if (_issue.format === "regex") - return `Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${_issue.pattern}`; - return `Inv\xE1lido ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${issue2.divisor}`; - case "unrecognized_keys": - return `Llave${issue2.keys.length > 1 ? "s" : ""} desconocida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Llave inv\xE1lida en ${TypeDictionary[issue2.origin] ?? issue2.origin}`; - case "invalid_union": - return "Entrada inv\xE1lida"; - case "invalid_element": - return `Valor inv\xE1lido en ${TypeDictionary[issue2.origin] ?? issue2.origin}`; - default: - return `Entrada inv\xE1lida`; - } - }; -}; -var init_es = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/fa.js -function fa_default() { - return { - localeError: error12() - }; -} -var error12 = () => { - const Sizable = { - string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, - file: { unit: "\u0628\u0627\u06CC\u062A", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, - array: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, - set: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0648\u0631\u0648\u062F\u06CC", - email: "\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644", - url: "URL", - emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", - date: "\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648", - time: "\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", - duration: "\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", - ipv4: "IPv4 \u0622\u062F\u0631\u0633", - ipv6: "IPv6 \u0622\u062F\u0631\u0633", - cidrv4: "IPv4 \u062F\u0627\u0645\u0646\u0647", - cidrv6: "IPv6 \u062F\u0627\u0645\u0646\u0647", - base64: "base64-encoded \u0631\u0634\u062A\u0647", - base64url: "base64url-encoded \u0631\u0634\u062A\u0647", - json_string: "JSON \u0631\u0634\u062A\u0647", - e164: "E.164 \u0639\u062F\u062F", - jwt: "JWT", - template_literal: "\u0648\u0631\u0648\u062F\u06CC" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0639\u062F\u062F", - array: "\u0622\u0631\u0627\u06CC\u0647" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue2.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; - } - return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; - } - case "invalid_value": - if (issue2.values.length === 1) { - return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${stringifyPrimitive(issue2.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`; - } - return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${joinValues(issue2.values, "|")} \u0645\u06CC\u200C\u0628\u0648\u062F`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`; - } - return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0628\u0627\u0634\u062F`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`; - } - return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0628\u0627\u0634\u062F`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`; - } - if (_issue.format === "ends_with") { - return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`; - } - if (_issue.format === "includes") { - return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${_issue.includes}" \u0628\u0627\u0634\u062F`; - } - if (_issue.format === "regex") { - return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`; - } - return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; - } - case "not_multiple_of": - return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue2.divisor} \u0628\u0627\u0634\u062F`; - case "unrecognized_keys": - return `\u06A9\u0644\u06CC\u062F${issue2.keys.length > 1 ? "\u0647\u0627\u06CC" : ""} \u0646\u0627\u0634\u0646\u0627\u0633: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue2.origin}`; - case "invalid_union": - return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; - case "invalid_element": - return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue2.origin}`; - default: - return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; - } - }; -}; -var init_fa = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/fi.js -function fi_default() { - return { - localeError: error13() - }; -} -var error13 = () => { - const Sizable = { - string: { unit: "merkki\xE4", subject: "merkkijonon" }, - file: { unit: "tavua", subject: "tiedoston" }, - array: { unit: "alkiota", subject: "listan" }, - set: { unit: "alkiota", subject: "joukon" }, - number: { unit: "", subject: "luvun" }, - bigint: { unit: "", subject: "suuren kokonaisluvun" }, - int: { unit: "", subject: "kokonaisluvun" }, - date: { unit: "", subject: "p\xE4iv\xE4m\xE4\xE4r\xE4n" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "s\xE4\xE4nn\xF6llinen lauseke", - email: "s\xE4hk\xF6postiosoite", - url: "URL-osoite", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO-aikaleima", - date: "ISO-p\xE4iv\xE4m\xE4\xE4r\xE4", - time: "ISO-aika", - duration: "ISO-kesto", - ipv4: "IPv4-osoite", - ipv6: "IPv6-osoite", - cidrv4: "IPv4-alue", - cidrv6: "IPv6-alue", - base64: "base64-koodattu merkkijono", - base64url: "base64url-koodattu merkkijono", - json_string: "JSON-merkkijono", - e164: "E.164-luku", - jwt: "JWT", - template_literal: "templaattimerkkijono" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Virheellinen tyyppi: odotettiin instanceof ${issue2.expected}, oli ${received}`; - } - return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Virheellinen sy\xF6te: t\xE4ytyy olla ${stringifyPrimitive(issue2.values[0])}`; - return `Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Liian suuri: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.maximum.toString()} ${sizing.unit}`.trim(); - } - return `Liian suuri: arvon t\xE4ytyy olla ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Liian pieni: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.minimum.toString()} ${sizing.unit}`.trim(); - } - return `Liian pieni: arvon t\xE4ytyy olla ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Virheellinen sy\xF6te: t\xE4ytyy alkaa "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Virheellinen sy\xF6te: t\xE4ytyy loppua "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${_issue.includes}"`; - if (_issue.format === "regex") { - return `Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${_issue.pattern}`; - } - return `Virheellinen ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Virheellinen luku: t\xE4ytyy olla luvun ${issue2.divisor} monikerta`; - case "unrecognized_keys": - return `${issue2.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return "Virheellinen avain tietueessa"; - case "invalid_union": - return "Virheellinen unioni"; - case "invalid_element": - return "Virheellinen arvo joukossa"; - default: - return `Virheellinen sy\xF6te`; - } - }; -}; -var init_fi = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/fr.js -function fr_default() { - return { - localeError: error14() - }; -} -var error14 = () => { - const Sizable = { - string: { unit: "caract\xE8res", verb: "avoir" }, - file: { unit: "octets", verb: "avoir" }, - array: { unit: "\xE9l\xE9ments", verb: "avoir" }, - set: { unit: "\xE9l\xE9ments", verb: "avoir" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "entr\xE9e", - email: "adresse e-mail", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "date et heure ISO", - date: "date ISO", - time: "heure ISO", - duration: "dur\xE9e ISO", - ipv4: "adresse IPv4", - ipv6: "adresse IPv6", - cidrv4: "plage IPv4", - cidrv6: "plage IPv6", - base64: "cha\xEEne encod\xE9e en base64", - base64url: "cha\xEEne encod\xE9e en base64url", - json_string: "cha\xEEne JSON", - e164: "num\xE9ro E.164", - jwt: "JWT", - template_literal: "entr\xE9e" - }; - const TypeDictionary = { - nan: "NaN", - number: "nombre", - array: "tableau" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Entr\xE9e invalide : instanceof ${issue2.expected} attendu, ${received} re\xE7u`; - } - return `Entr\xE9e invalide : ${expected} attendu, ${received} re\xE7u`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Entr\xE9e invalide : ${stringifyPrimitive(issue2.values[0])} attendu`; - return `Option invalide : une valeur parmi ${joinValues(issue2.values, "|")} attendue`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Trop grand : ${issue2.origin ?? "valeur"} doit ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xE9l\xE9ment(s)"}`; - return `Trop grand : ${issue2.origin ?? "valeur"} doit \xEAtre ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Trop petit : ${issue2.origin} doit ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Trop petit : ${issue2.origin} doit \xEAtre ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; - if (_issue.format === "regex") - return `Cha\xEEne invalide : doit correspondre au mod\xE8le ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`; - } - case "not_multiple_of": - return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; - case "unrecognized_keys": - return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Cl\xE9 invalide dans ${issue2.origin}`; - case "invalid_union": - return "Entr\xE9e invalide"; - case "invalid_element": - return `Valeur invalide dans ${issue2.origin}`; - default: - return `Entr\xE9e invalide`; - } - }; -}; -var init_fr = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/fr-CA.js -function fr_CA_default() { - return { - localeError: error15() - }; -} -var error15 = () => { - const Sizable = { - string: { unit: "caract\xE8res", verb: "avoir" }, - file: { unit: "octets", verb: "avoir" }, - array: { unit: "\xE9l\xE9ments", verb: "avoir" }, - set: { unit: "\xE9l\xE9ments", verb: "avoir" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "entr\xE9e", - email: "adresse courriel", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "date-heure ISO", - date: "date ISO", - time: "heure ISO", - duration: "dur\xE9e ISO", - ipv4: "adresse IPv4", - ipv6: "adresse IPv6", - cidrv4: "plage IPv4", - cidrv6: "plage IPv6", - base64: "cha\xEEne encod\xE9e en base64", - base64url: "cha\xEEne encod\xE9e en base64url", - json_string: "cha\xEEne JSON", - e164: "num\xE9ro E.164", - jwt: "JWT", - template_literal: "entr\xE9e" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Entr\xE9e invalide : attendu instanceof ${issue2.expected}, re\xE7u ${received}`; - } - return `Entr\xE9e invalide : attendu ${expected}, re\xE7u ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Entr\xE9e invalide : attendu ${stringifyPrimitive(issue2.values[0])}`; - return `Option invalide : attendu l'une des valeurs suivantes ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "\u2264" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} ait ${adj}${issue2.maximum.toString()} ${sizing.unit}`; - return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} soit ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? "\u2265" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Trop petit : attendu que ${issue2.origin} ait ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Trop petit : attendu que ${issue2.origin} soit ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; - if (_issue.format === "regex") - return `Cha\xEEne invalide : doit correspondre au motif ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`; - } - case "not_multiple_of": - return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; - case "unrecognized_keys": - return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Cl\xE9 invalide dans ${issue2.origin}`; - case "invalid_union": - return "Entr\xE9e invalide"; - case "invalid_element": - return `Valeur invalide dans ${issue2.origin}`; - default: - return `Entr\xE9e invalide`; - } - }; -}; -var init_fr_CA = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/he.js -function he_default() { - return { - localeError: error16() - }; -} -var error16 = () => { - const TypeNames = { - string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" }, - number: { label: "\u05DE\u05E1\u05E4\u05E8", gender: "m" }, - boolean: { label: "\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9", gender: "m" }, - bigint: { label: "BigInt", gender: "m" }, - date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA", gender: "m" }, - array: { label: "\u05DE\u05E2\u05E8\u05DA", gender: "m" }, - object: { label: "\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8", gender: "m" }, - null: { label: "\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)", gender: "m" }, - undefined: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)", gender: "m" }, - symbol: { label: "\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)", gender: "m" }, - function: { label: "\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4", gender: "f" }, - map: { label: "\u05DE\u05E4\u05D4 (Map)", gender: "f" }, - set: { label: "\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)", gender: "f" }, - file: { label: "\u05E7\u05D5\u05D1\u05E5", gender: "m" }, - promise: { label: "Promise", gender: "m" }, - NaN: { label: "NaN", gender: "m" }, - unknown: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2", gender: "m" }, - value: { label: "\u05E2\u05E8\u05DA", gender: "m" } - }; - const Sizable = { - string: { unit: "\u05EA\u05D5\u05D5\u05D9\u05DD", shortLabel: "\u05E7\u05E6\u05E8", longLabel: "\u05D0\u05E8\u05D5\u05DA" }, - file: { unit: "\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, - array: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, - set: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, - number: { unit: "", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" } - }; - const typeEntry = (t) => t ? TypeNames[t] : undefined; - const typeLabel = (t) => { - const e = typeEntry(t); - if (e) - return e.label; - return t ?? TypeNames.unknown.label; - }; - const withDefinite = (t) => `\u05D4${typeLabel(t)}`; - const verbFor = (t) => { - const e = typeEntry(t); - const gender = e?.gender ?? "m"; - return gender === "f" ? "\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA" : "\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA"; - }; - const getSizing = (origin) => { - if (!origin) - return null; - return Sizable[origin] ?? null; - }; - const FormatDictionary = { - regex: { label: "\u05E7\u05DC\u05D8", gender: "m" }, - email: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC", gender: "f" }, - url: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA", gender: "f" }, - emoji: { label: "\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9", gender: "m" }, - uuid: { label: "UUID", gender: "m" }, - nanoid: { label: "nanoid", gender: "m" }, - guid: { label: "GUID", gender: "m" }, - cuid: { label: "cuid", gender: "m" }, - cuid2: { label: "cuid2", gender: "m" }, - ulid: { label: "ULID", gender: "m" }, - xid: { label: "XID", gender: "m" }, - ksuid: { label: "KSUID", gender: "m" }, - datetime: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO", gender: "m" }, - date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA ISO", gender: "m" }, - time: { label: "\u05D6\u05DE\u05DF ISO", gender: "m" }, - duration: { label: "\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO", gender: "m" }, - ipv4: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv4", gender: "f" }, - ipv6: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv6", gender: "f" }, - cidrv4: { label: "\u05D8\u05D5\u05D5\u05D7 IPv4", gender: "m" }, - cidrv6: { label: "\u05D8\u05D5\u05D5\u05D7 IPv6", gender: "m" }, - base64: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64", gender: "f" }, - base64url: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA", gender: "f" }, - json_string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON", gender: "f" }, - e164: { label: "\u05DE\u05E1\u05E4\u05E8 E.164", gender: "m" }, - jwt: { label: "JWT", gender: "m" }, - ends_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, - includes: { label: "\u05E7\u05DC\u05D8", gender: "m" }, - lowercase: { label: "\u05E7\u05DC\u05D8", gender: "m" }, - starts_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, - uppercase: { label: "\u05E7\u05DC\u05D8", gender: "m" } - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expectedKey = issue2.expected; - const expected = TypeDictionary[expectedKey ?? ""] ?? typeLabel(expectedKey); - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue2.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; - } - return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; - } - case "invalid_value": { - if (issue2.values.length === 1) { - return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${stringifyPrimitive(issue2.values[0])}`; - } - const stringified = issue2.values.map((v) => stringifyPrimitive(v)); - if (issue2.values.length === 2) { - return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`; - } - const lastValue = stringified[stringified.length - 1]; - const restValues = stringified.slice(0, -1).join(", "); - return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`; - } - case "too_big": { - const sizing = getSizing(issue2.origin); - const subject = withDefinite(issue2.origin ?? "value"); - if (issue2.origin === "string") { - return `${sizing?.longLabel ?? "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.maximum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA" : "\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim(); - } - if (issue2.origin === "number") { - const comparison = issue2.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue2.maximum}`; - return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; - } - if (issue2.origin === "array" || issue2.origin === "set") { - const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; - const comparison = issue2.inclusive ? `${issue2.maximum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA` : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue2.maximum} ${sizing?.unit ?? ""}`; - return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); - } - const adj = issue2.inclusive ? "<=" : "<"; - const be = verbFor(issue2.origin ?? "value"); - if (sizing?.unit) { - return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; - } - return `${sizing?.longLabel ?? "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const sizing = getSizing(issue2.origin); - const subject = withDefinite(issue2.origin ?? "value"); - if (issue2.origin === "string") { - return `${sizing?.shortLabel ?? "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.minimum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim(); - } - if (issue2.origin === "number") { - const comparison = issue2.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue2.minimum}`; - return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; - } - if (issue2.origin === "array" || issue2.origin === "set") { - const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; - if (issue2.minimum === 1 && issue2.inclusive) { - const singularPhrase = issue2.origin === "set" ? "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3" : "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3"; - return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`; - } - const comparison = issue2.inclusive ? `${issue2.minimum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8` : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue2.minimum} ${sizing?.unit ?? ""}`; - return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); - } - const adj = issue2.inclusive ? ">=" : ">"; - const be = verbFor(issue2.origin ?? "value"); - if (sizing?.unit) { - return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `${sizing?.shortLabel ?? "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`; - const nounEntry = FormatDictionary[_issue.format]; - const noun = nounEntry?.label ?? _issue.format; - const gender = nounEntry?.gender ?? "m"; - const adjective = gender === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF"; - return `${noun} \u05DC\u05D0 ${adjective}`; - } - case "not_multiple_of": - return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue2.divisor}`; - case "unrecognized_keys": - return `\u05DE\u05E4\u05EA\u05D7${issue2.keys.length > 1 ? "\u05D5\u05EA" : ""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue2.keys.length > 1 ? "\u05D9\u05DD" : "\u05D4"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": { - return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`; - } - case "invalid_union": - return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"; - case "invalid_element": { - const place = withDefinite(issue2.origin ?? "array"); - return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`; - } - default: - return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`; - } - }; -}; -var init_he = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/hu.js -function hu_default() { - return { - localeError: error17() - }; -} -var error17 = () => { - const Sizable = { - string: { unit: "karakter", verb: "legyen" }, - file: { unit: "byte", verb: "legyen" }, - array: { unit: "elem", verb: "legyen" }, - set: { unit: "elem", verb: "legyen" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "bemenet", - email: "email c\xEDm", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO id\u0151b\xE9lyeg", - date: "ISO d\xE1tum", - time: "ISO id\u0151", - duration: "ISO id\u0151intervallum", - ipv4: "IPv4 c\xEDm", - ipv6: "IPv6 c\xEDm", - cidrv4: "IPv4 tartom\xE1ny", - cidrv6: "IPv6 tartom\xE1ny", - base64: "base64-k\xF3dolt string", - base64url: "base64url-k\xF3dolt string", - json_string: "JSON string", - e164: "E.164 sz\xE1m", - jwt: "JWT", - template_literal: "bemenet" - }; - const TypeDictionary = { - nan: "NaN", - number: "sz\xE1m", - array: "t\xF6mb" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${issue2.expected}, a kapott \xE9rt\xE9k ${received}`; - } - return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${expected}, a kapott \xE9rt\xE9k ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${stringifyPrimitive(issue2.values[0])}`; - return `\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `T\xFAl nagy: ${issue2.origin ?? "\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elem"}`; - return `T\xFAl nagy: a bemeneti \xE9rt\xE9k ${issue2.origin ?? "\xE9rt\xE9k"} t\xFAl nagy: ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} m\xE9rete t\xFAl kicsi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} t\xFAl kicsi ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\xC9rv\xE9nytelen string: "${_issue.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`; - if (_issue.format === "ends_with") - return `\xC9rv\xE9nytelen string: "${_issue.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`; - if (_issue.format === "includes") - return `\xC9rv\xE9nytelen string: "${_issue.includes}" \xE9rt\xE9ket kell tartalmaznia`; - if (_issue.format === "regex") - return `\xC9rv\xE9nytelen string: ${_issue.pattern} mint\xE1nak kell megfelelnie`; - return `\xC9rv\xE9nytelen ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\xC9rv\xE9nytelen sz\xE1m: ${issue2.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`; - case "unrecognized_keys": - return `Ismeretlen kulcs${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\xC9rv\xE9nytelen kulcs ${issue2.origin}`; - case "invalid_union": - return "\xC9rv\xE9nytelen bemenet"; - case "invalid_element": - return `\xC9rv\xE9nytelen \xE9rt\xE9k: ${issue2.origin}`; - default: - return `\xC9rv\xE9nytelen bemenet`; - } - }; -}; -var init_hu = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/hy.js -function getArmenianPlural(count, one, many) { - return Math.abs(count) === 1 ? one : many; -} -function withDefiniteArticle(word) { - if (!word) - return ""; - const vowels = ["\u0561", "\u0565", "\u0568", "\u056B", "\u0578", "\u0578\u0582", "\u0585"]; - const lastChar = word[word.length - 1]; - return word + (vowels.includes(lastChar) ? "\u0576" : "\u0568"); -} -function hy_default() { - return { - localeError: error18() - }; -} -var error18 = () => { - const Sizable = { - string: { - unit: { - one: "\u0576\u0577\u0561\u0576", - many: "\u0576\u0577\u0561\u0576\u0576\u0565\u0580" - }, - verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" - }, - file: { - unit: { - one: "\u0562\u0561\u0575\u0569", - many: "\u0562\u0561\u0575\u0569\u0565\u0580" - }, - verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" - }, - array: { - unit: { - one: "\u057F\u0561\u0580\u0580", - many: "\u057F\u0561\u0580\u0580\u0565\u0580" - }, - verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" - }, - set: { - unit: { - one: "\u057F\u0561\u0580\u0580", - many: "\u057F\u0561\u0580\u0580\u0565\u0580" - }, - verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" - } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0574\u0578\u0582\u057F\u0584", - email: "\u0567\u056C. \u0570\u0561\u057D\u0581\u0565", - url: "URL", - emoji: "\u0567\u0574\u0578\u057B\u056B", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574", - date: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E", - time: "ISO \u056A\u0561\u0574", - duration: "ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576", - ipv4: "IPv4 \u0570\u0561\u057D\u0581\u0565", - ipv6: "IPv6 \u0570\u0561\u057D\u0581\u0565", - cidrv4: "IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", - cidrv6: "IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", - base64: "base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", - base64url: "base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", - json_string: "JSON \u057F\u0578\u0572", - e164: "E.164 \u0570\u0561\u0574\u0561\u0580", - jwt: "JWT", - template_literal: "\u0574\u0578\u0582\u057F\u0584" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0569\u056B\u057E", - array: "\u0566\u0561\u0576\u0563\u057E\u0561\u056E" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue2.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; - } - return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${stringifyPrimitive(issue2.values[1])}`; - return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - const maxValue = Number(issue2.maximum); - const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many); - return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.maximum.toString()} ${unit}`; - } - return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - const minValue = Number(issue2.minimum); - const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many); - return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.minimum.toString()} ${unit}`; - } - return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056C\u056B\u0576\u056B ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${_issue.prefix}"-\u0578\u057E`; - if (_issue.format === "ends_with") - return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${_issue.suffix}"-\u0578\u057E`; - if (_issue.format === "includes") - return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`; - return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue2.divisor}-\u056B`; - case "unrecognized_keys": - return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue2.keys.length > 1 ? "\u0576\u0565\u0580" : ""}. ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; - case "invalid_union": - return "\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574"; - case "invalid_element": - return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; - default: - return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`; - } - }; -}; -var init_hy = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/id.js -function id_default() { - return { - localeError: error19() - }; -} -var error19 = () => { - const Sizable = { - string: { unit: "karakter", verb: "memiliki" }, - file: { unit: "byte", verb: "memiliki" }, - array: { unit: "item", verb: "memiliki" }, - set: { unit: "item", verb: "memiliki" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "alamat email", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "tanggal dan waktu format ISO", - date: "tanggal format ISO", - time: "jam format ISO", - duration: "durasi format ISO", - ipv4: "alamat IPv4", - ipv6: "alamat IPv6", - cidrv4: "rentang alamat IPv4", - cidrv6: "rentang alamat IPv6", - base64: "string dengan enkode base64", - base64url: "string dengan enkode base64url", - json_string: "string JSON", - e164: "angka E.164", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Input tidak valid: diharapkan instanceof ${issue2.expected}, diterima ${received}`; - } - return `Input tidak valid: diharapkan ${expected}, diterima ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Input tidak valid: diharapkan ${stringifyPrimitive(issue2.values[0])}`; - return `Pilihan tidak valid: diharapkan salah satu dari ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} memiliki ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`; - return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} menjadi ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Terlalu kecil: diharapkan ${issue2.origin} memiliki ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Terlalu kecil: diharapkan ${issue2.origin} menjadi ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `String tidak valid: harus dimulai dengan "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `String tidak valid: harus berakhir dengan "${_issue.suffix}"`; - if (_issue.format === "includes") - return `String tidak valid: harus menyertakan "${_issue.includes}"`; - if (_issue.format === "regex") - return `String tidak valid: harus sesuai pola ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} tidak valid`; - } - case "not_multiple_of": - return `Angka tidak valid: harus kelipatan dari ${issue2.divisor}`; - case "unrecognized_keys": - return `Kunci tidak dikenali ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Kunci tidak valid di ${issue2.origin}`; - case "invalid_union": - return "Input tidak valid"; - case "invalid_element": - return `Nilai tidak valid di ${issue2.origin}`; - default: - return `Input tidak valid`; - } - }; -}; -var init_id = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/is.js -function is_default() { - return { - localeError: error20() - }; -} -var error20 = () => { - const Sizable = { - string: { unit: "stafi", verb: "a\xF0 hafa" }, - file: { unit: "b\xE6ti", verb: "a\xF0 hafa" }, - array: { unit: "hluti", verb: "a\xF0 hafa" }, - set: { unit: "hluti", verb: "a\xF0 hafa" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "gildi", - email: "netfang", - url: "vefsl\xF3\xF0", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO dagsetning og t\xEDmi", - date: "ISO dagsetning", - time: "ISO t\xEDmi", - duration: "ISO t\xEDmalengd", - ipv4: "IPv4 address", - ipv6: "IPv6 address", - cidrv4: "IPv4 range", - cidrv6: "IPv6 range", - base64: "base64-encoded strengur", - base64url: "base64url-encoded strengur", - json_string: "JSON strengur", - e164: "E.164 t\xF6lugildi", - jwt: "JWT", - template_literal: "gildi" - }; - const TypeDictionary = { - nan: "NaN", - number: "n\xFAmer", - array: "fylki" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera instanceof ${issue2.expected}`; - } - return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera ${expected}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Rangt gildi: gert r\xE1\xF0 fyrir ${stringifyPrimitive(issue2.values[0])}`; - return `\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} hafi ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "hluti"}`; - return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} s\xE9 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} hafi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} s\xE9 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${_issue.includes}"`; - if (_issue.format === "regex") - return `\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${_issue.pattern}`; - return `Rangt ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${issue2.divisor}`; - case "unrecognized_keys": - return `\xD3\xFEekkt ${issue2.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Rangur lykill \xED ${issue2.origin}`; - case "invalid_union": - return "Rangt gildi"; - case "invalid_element": - return `Rangt gildi \xED ${issue2.origin}`; - default: - return `Rangt gildi`; - } - }; -}; -var init_is = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/it.js -function it_default() { - return { - localeError: error21() - }; -} -var error21 = () => { - const Sizable = { - string: { unit: "caratteri", verb: "avere" }, - file: { unit: "byte", verb: "avere" }, - array: { unit: "elementi", verb: "avere" }, - set: { unit: "elementi", verb: "avere" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "indirizzo email", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "data e ora ISO", - date: "data ISO", - time: "ora ISO", - duration: "durata ISO", - ipv4: "indirizzo IPv4", - ipv6: "indirizzo IPv6", - cidrv4: "intervallo IPv4", - cidrv6: "intervallo IPv6", - base64: "stringa codificata in base64", - base64url: "URL codificata in base64", - json_string: "stringa JSON", - e164: "numero E.164", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN", - number: "numero", - array: "vettore" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Input non valido: atteso instanceof ${issue2.expected}, ricevuto ${received}`; - } - return `Input non valido: atteso ${expected}, ricevuto ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Input non valido: atteso ${stringifyPrimitive(issue2.values[0])}`; - return `Opzione non valida: atteso uno tra ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Troppo grande: ${issue2.origin ?? "valore"} deve avere ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementi"}`; - return `Troppo grande: ${issue2.origin ?? "valore"} deve essere ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Troppo piccolo: ${issue2.origin} deve avere ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Troppo piccolo: ${issue2.origin} deve essere ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Stringa non valida: deve iniziare con "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Stringa non valida: deve terminare con "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Stringa non valida: deve includere "${_issue.includes}"`; - if (_issue.format === "regex") - return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`; - return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Numero non valido: deve essere un multiplo di ${issue2.divisor}`; - case "unrecognized_keys": - return `Chiav${issue2.keys.length > 1 ? "i" : "e"} non riconosciut${issue2.keys.length > 1 ? "e" : "a"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Chiave non valida in ${issue2.origin}`; - case "invalid_union": - return "Input non valido"; - case "invalid_element": - return `Valore non valido in ${issue2.origin}`; - default: - return `Input non valido`; - } - }; -}; -var init_it = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ja.js -function ja_default() { - return { - localeError: error22() - }; -} -var error22 = () => { - const Sizable = { - string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" }, - file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" }, - array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }, - set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u5165\u529B\u5024", - email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9", - url: "URL", - emoji: "\u7D75\u6587\u5B57", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO\u65E5\u6642", - date: "ISO\u65E5\u4ED8", - time: "ISO\u6642\u523B", - duration: "ISO\u671F\u9593", - ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9", - ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9", - cidrv4: "IPv4\u7BC4\u56F2", - cidrv6: "IPv6\u7BC4\u56F2", - base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", - base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", - json_string: "JSON\u6587\u5B57\u5217", - e164: "E.164\u756A\u53F7", - jwt: "JWT", - template_literal: "\u5165\u529B\u5024" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u6570\u5024", - array: "\u914D\u5217" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue2.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; - } - return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue2.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`; - return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue2.values, "\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - case "too_big": { - const adj = issue2.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${sizing.unit ?? "\u8981\u7D20"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - } - case "too_small": { - const adj = issue2.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - if (_issue.format === "ends_with") - return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - if (_issue.format === "includes") - return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - if (_issue.format === "regex") - return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u7121\u52B9\u306A\u6570\u5024: ${issue2.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; - case "unrecognized_keys": - return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue2.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue2.keys, "\u3001")}`; - case "invalid_key": - return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`; - case "invalid_union": - return "\u7121\u52B9\u306A\u5165\u529B"; - case "invalid_element": - return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`; - default: - return `\u7121\u52B9\u306A\u5165\u529B`; - } - }; -}; -var init_ja = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ka.js -function ka_default() { - return { - localeError: error23() - }; -} -var error23 = () => { - const Sizable = { - string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, - file: { unit: "\u10D1\u10D0\u10D8\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, - array: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, - set: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0", - email: "\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", - url: "URL", - emoji: "\u10D4\u10DB\u10DD\u10EF\u10D8", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD", - date: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8", - time: "\u10D3\u10E0\u10DD", - duration: "\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0", - ipv4: "IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", - ipv6: "IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", - cidrv4: "IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", - cidrv6: "IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", - base64: "base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", - base64url: "base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", - json_string: "JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", - e164: "E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8", - jwt: "JWT", - template_literal: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8", - string: "\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", - boolean: "\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8", - function: "\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0", - array: "\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue2.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; - } - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${stringifyPrimitive(issue2.values[0])}`; - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${joinValues(issue2.values, "|")}-\u10D3\u10D0\u10DC`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; - return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.prefix}"-\u10D8\u10D7`; - } - if (_issue.format === "ends_with") - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.suffix}"-\u10D8\u10D7`; - if (_issue.format === "includes") - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 "${_issue.includes}"-\u10E1`; - if (_issue.format === "regex") - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`; - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue2.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`; - case "unrecognized_keys": - return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue2.keys.length > 1 ? "\u10D4\u10D1\u10D8" : "\u10D8"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue2.origin}-\u10E8\u10D8`; - case "invalid_union": - return "\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"; - case "invalid_element": - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue2.origin}-\u10E8\u10D8`; - default: - return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`; - } - }; -}; -var init_ka = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/km.js -function km_default() { - return { - localeError: error24() - }; -} -var error24 = () => { - const Sizable = { - string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, - file: { unit: "\u1794\u17C3", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, - array: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, - set: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B", - email: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B", - url: "URL", - emoji: "\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO", - date: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO", - time: "\u1798\u17C9\u17C4\u1784 ISO", - duration: "\u179A\u1799\u17C8\u1796\u17C1\u179B ISO", - ipv4: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", - ipv6: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", - cidrv4: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", - cidrv6: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", - base64: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64", - base64url: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url", - json_string: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON", - e164: "\u179B\u17C1\u1781 E.164", - jwt: "JWT", - template_literal: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u179B\u17C1\u1781", - array: "\u17A2\u17B6\u179A\u17C1 (Array)", - null: "\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue2.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; - } - return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${stringifyPrimitive(issue2.values[0])}`; - return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u1792\u17B6\u178F\u17BB"}`; - return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`; - return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue2.divisor}`; - case "unrecognized_keys": - return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; - case "invalid_union": - return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; - case "invalid_element": - return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; - default: - return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; - } - }; -}; -var init_km = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/kh.js -function kh_default() { - return km_default(); -} -var init_kh = __esm(() => { - init_km(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ko.js -function ko_default() { - return { - localeError: error25() - }; -} -var error25 = () => { - const Sizable = { - string: { unit: "\uBB38\uC790", verb: "to have" }, - file: { unit: "\uBC14\uC774\uD2B8", verb: "to have" }, - array: { unit: "\uAC1C", verb: "to have" }, - set: { unit: "\uAC1C", verb: "to have" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\uC785\uB825", - email: "\uC774\uBA54\uC77C \uC8FC\uC18C", - url: "URL", - emoji: "\uC774\uBAA8\uC9C0", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \uB0A0\uC9DC\uC2DC\uAC04", - date: "ISO \uB0A0\uC9DC", - time: "ISO \uC2DC\uAC04", - duration: "ISO \uAE30\uAC04", - ipv4: "IPv4 \uC8FC\uC18C", - ipv6: "IPv6 \uC8FC\uC18C", - cidrv4: "IPv4 \uBC94\uC704", - cidrv6: "IPv6 \uBC94\uC704", - base64: "base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", - base64url: "base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", - json_string: "JSON \uBB38\uC790\uC5F4", - e164: "E.164 \uBC88\uD638", - jwt: "JWT", - template_literal: "\uC785\uB825" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue2.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; - } - return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${stringifyPrimitive(issue2.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`; - return `\uC798\uBABB\uB41C \uC635\uC158: ${joinValues(issue2.values, "\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`; - case "too_big": { - const adj = issue2.inclusive ? "\uC774\uD558" : "\uBBF8\uB9CC"; - const suffix = adj === "\uBBF8\uB9CC" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; - const sizing = getSizing(issue2.origin); - const unit = sizing?.unit ?? "\uC694\uC18C"; - if (sizing) - return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()}${unit} ${adj}${suffix}`; - return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()} ${adj}${suffix}`; - } - case "too_small": { - const adj = issue2.inclusive ? "\uC774\uC0C1" : "\uCD08\uACFC"; - const suffix = adj === "\uC774\uC0C1" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; - const sizing = getSizing(issue2.origin); - const unit = sizing?.unit ?? "\uC694\uC18C"; - if (sizing) { - return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()}${unit} ${adj}${suffix}`; - } - return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()} ${adj}${suffix}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`; - } - if (_issue.format === "ends_with") - return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`; - if (_issue.format === "includes") - return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`; - if (_issue.format === "regex") - return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`; - return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue2.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`; - case "unrecognized_keys": - return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\uC798\uBABB\uB41C \uD0A4: ${issue2.origin}`; - case "invalid_union": - return `\uC798\uBABB\uB41C \uC785\uB825`; - case "invalid_element": - return `\uC798\uBABB\uB41C \uAC12: ${issue2.origin}`; - default: - return `\uC798\uBABB\uB41C \uC785\uB825`; - } - }; -}; -var init_ko = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/lt.js -function getUnitTypeFromNumber(number2) { - const abs = Math.abs(number2); - const last = abs % 10; - const last2 = abs % 100; - if (last2 >= 11 && last2 <= 19 || last === 0) - return "many"; - if (last === 1) - return "one"; - return "few"; -} -function lt_default() { - return { - localeError: error26() - }; -} -var capitalizeFirstCharacter = (text) => { - return text.charAt(0).toUpperCase() + text.slice(1); -}, error26 = () => { - const Sizable = { - string: { - unit: { - one: "simbolis", - few: "simboliai", - many: "simboli\u0173" - }, - verb: { - smaller: { - inclusive: "turi b\u016Bti ne ilgesn\u0117 kaip", - notInclusive: "turi b\u016Bti trumpesn\u0117 kaip" - }, - bigger: { - inclusive: "turi b\u016Bti ne trumpesn\u0117 kaip", - notInclusive: "turi b\u016Bti ilgesn\u0117 kaip" - } - } - }, - file: { - unit: { - one: "baitas", - few: "baitai", - many: "bait\u0173" - }, - verb: { - smaller: { - inclusive: "turi b\u016Bti ne didesnis kaip", - notInclusive: "turi b\u016Bti ma\u017Eesnis kaip" - }, - bigger: { - inclusive: "turi b\u016Bti ne ma\u017Eesnis kaip", - notInclusive: "turi b\u016Bti didesnis kaip" - } - } - }, - array: { - unit: { - one: "element\u0105", - few: "elementus", - many: "element\u0173" - }, - verb: { - smaller: { - inclusive: "turi tur\u0117ti ne daugiau kaip", - notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" - }, - bigger: { - inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", - notInclusive: "turi tur\u0117ti daugiau kaip" - } - } - }, - set: { - unit: { - one: "element\u0105", - few: "elementus", - many: "element\u0173" - }, - verb: { - smaller: { - inclusive: "turi tur\u0117ti ne daugiau kaip", - notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" - }, - bigger: { - inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", - notInclusive: "turi tur\u0117ti daugiau kaip" - } - } - } - }; - function getSizing(origin, unitType, inclusive, targetShouldBe) { - const result = Sizable[origin] ?? null; - if (result === null) - return result; - return { - unit: result.unit[unitType], - verb: result.verb[targetShouldBe][inclusive ? "inclusive" : "notInclusive"] - }; - } - const FormatDictionary = { - regex: "\u012Fvestis", - email: "el. pa\u0161to adresas", - url: "URL", - emoji: "jaustukas", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO data ir laikas", - date: "ISO data", - time: "ISO laikas", - duration: "ISO trukm\u0117", - ipv4: "IPv4 adresas", - ipv6: "IPv6 adresas", - cidrv4: "IPv4 tinklo prefiksas (CIDR)", - cidrv6: "IPv6 tinklo prefiksas (CIDR)", - base64: "base64 u\u017Ekoduota eilut\u0117", - base64url: "base64url u\u017Ekoduota eilut\u0117", - json_string: "JSON eilut\u0117", - e164: "E.164 numeris", - jwt: "JWT", - template_literal: "\u012Fvestis" - }; - const TypeDictionary = { - nan: "NaN", - number: "skai\u010Dius", - bigint: "sveikasis skai\u010Dius", - string: "eilut\u0117", - boolean: "login\u0117 reik\u0161m\u0117", - undefined: "neapibr\u0117\u017Eta reik\u0161m\u0117", - function: "funkcija", - symbol: "simbolis", - array: "masyvas", - object: "objektas", - null: "nulin\u0117 reik\u0161m\u0117" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue2.expected}`; - } - return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Privalo b\u016Bti ${stringifyPrimitive(issue2.values[0])}`; - return `Privalo b\u016Bti vienas i\u0161 ${joinValues(issue2.values, "|")} pasirinkim\u0173`; - case "too_big": { - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.maximum)), issue2.inclusive ?? false, "smaller"); - if (sizing?.verb) - return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} ${sizing.verb} ${issue2.maximum.toString()} ${sizing.unit ?? "element\u0173"}`; - const adj = issue2.inclusive ? "ne didesnis kaip" : "ma\u017Eesnis kaip"; - return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.maximum.toString()} ${sizing?.unit}`; - } - case "too_small": { - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.minimum)), issue2.inclusive ?? false, "bigger"); - if (sizing?.verb) - return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} ${sizing.verb} ${issue2.minimum.toString()} ${sizing.unit ?? "element\u0173"}`; - const adj = issue2.inclusive ? "ne ma\u017Eesnis kaip" : "didesnis kaip"; - return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.minimum.toString()} ${sizing?.unit}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Eilut\u0117 privalo prasid\u0117ti "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `Eilut\u0117 privalo pasibaigti "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Eilut\u0117 privalo \u012Ftraukti "${_issue.includes}"`; - if (_issue.format === "regex") - return `Eilut\u0117 privalo atitikti ${_issue.pattern}`; - return `Neteisingas ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Skai\u010Dius privalo b\u016Bti ${issue2.divisor} kartotinis.`; - case "unrecognized_keys": - return `Neatpa\u017Eint${issue2.keys.length > 1 ? "i" : "as"} rakt${issue2.keys.length > 1 ? "ai" : "as"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return "Rastas klaidingas raktas"; - case "invalid_union": - return "Klaidinga \u012Fvestis"; - case "invalid_element": { - const origin = TypeDictionary[issue2.origin] ?? issue2.origin; - return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`; - } - default: - return "Klaidinga \u012Fvestis"; - } - }; -}; -var init_lt = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/mk.js -function mk_default() { - return { - localeError: error27() - }; -} -var error27 = () => { - const Sizable = { - string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, - file: { unit: "\u0431\u0430\u0458\u0442\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, - array: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, - set: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0432\u043D\u0435\u0441", - email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430", - url: "URL", - emoji: "\u0435\u043C\u043E\u045F\u0438", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435", - date: "ISO \u0434\u0430\u0442\u0443\u043C", - time: "ISO \u0432\u0440\u0435\u043C\u0435", - duration: "ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435", - ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441\u0430", - ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441\u0430", - cidrv4: "IPv4 \u043E\u043F\u0441\u0435\u0433", - cidrv6: "IPv6 \u043E\u043F\u0441\u0435\u0433", - base64: "base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", - base64url: "base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", - json_string: "JSON \u043D\u0438\u0437\u0430", - e164: "E.164 \u0431\u0440\u043E\u0458", - jwt: "JWT", - template_literal: "\u0432\u043D\u0435\u0441" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0431\u0440\u043E\u0458", - array: "\u043D\u0438\u0437\u0430" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue2.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; - } - return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; - return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438"}`; - return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`; - return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue2.divisor}`; - case "unrecognized_keys": - return `${issue2.keys.length > 1 ? "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438" : "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue2.origin}`; - case "invalid_union": - return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"; - case "invalid_element": - return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue2.origin}`; - default: - return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`; - } - }; -}; -var init_mk = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ms.js -function ms_default() { - return { - localeError: error28() - }; -} -var error28 = () => { - const Sizable = { - string: { unit: "aksara", verb: "mempunyai" }, - file: { unit: "bait", verb: "mempunyai" }, - array: { unit: "elemen", verb: "mempunyai" }, - set: { unit: "elemen", verb: "mempunyai" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "alamat e-mel", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "tarikh masa ISO", - date: "tarikh ISO", - time: "masa ISO", - duration: "tempoh ISO", - ipv4: "alamat IPv4", - ipv6: "alamat IPv6", - cidrv4: "julat IPv4", - cidrv6: "julat IPv6", - base64: "string dikodkan base64", - base64url: "string dikodkan base64url", - json_string: "string JSON", - e164: "nombor E.164", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN", - number: "nombor" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Input tidak sah: dijangka instanceof ${issue2.expected}, diterima ${received}`; - } - return `Input tidak sah: dijangka ${expected}, diterima ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Input tidak sah: dijangka ${stringifyPrimitive(issue2.values[0])}`; - return `Pilihan tidak sah: dijangka salah satu daripada ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`; - return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} adalah ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Terlalu kecil: dijangka ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Terlalu kecil: dijangka ${issue2.origin} adalah ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `String tidak sah: mesti bermula dengan "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `String tidak sah: mesti berakhir dengan "${_issue.suffix}"`; - if (_issue.format === "includes") - return `String tidak sah: mesti mengandungi "${_issue.includes}"`; - if (_issue.format === "regex") - return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} tidak sah`; - } - case "not_multiple_of": - return `Nombor tidak sah: perlu gandaan ${issue2.divisor}`; - case "unrecognized_keys": - return `Kunci tidak dikenali: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Kunci tidak sah dalam ${issue2.origin}`; - case "invalid_union": - return "Input tidak sah"; - case "invalid_element": - return `Nilai tidak sah dalam ${issue2.origin}`; - default: - return `Input tidak sah`; - } - }; -}; -var init_ms = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/nl.js -function nl_default() { - return { - localeError: error29() - }; -} -var error29 = () => { - const Sizable = { - string: { unit: "tekens", verb: "heeft" }, - file: { unit: "bytes", verb: "heeft" }, - array: { unit: "elementen", verb: "heeft" }, - set: { unit: "elementen", verb: "heeft" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "invoer", - email: "emailadres", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO datum en tijd", - date: "ISO datum", - time: "ISO tijd", - duration: "ISO duur", - ipv4: "IPv4-adres", - ipv6: "IPv6-adres", - cidrv4: "IPv4-bereik", - cidrv6: "IPv6-bereik", - base64: "base64-gecodeerde tekst", - base64url: "base64 URL-gecodeerde tekst", - json_string: "JSON string", - e164: "E.164-nummer", - jwt: "JWT", - template_literal: "invoer" - }; - const TypeDictionary = { - nan: "NaN", - number: "getal" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Ongeldige invoer: verwacht instanceof ${issue2.expected}, ontving ${received}`; - } - return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Ongeldige invoer: verwacht ${stringifyPrimitive(issue2.values[0])}`; - return `Ongeldige optie: verwacht \xE9\xE9n van ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - const longName = issue2.origin === "date" ? "laat" : issue2.origin === "string" ? "lang" : "groot"; - if (sizing) - return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementen"} ${sizing.verb}`; - return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} is`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - const shortName = issue2.origin === "date" ? "vroeg" : issue2.origin === "string" ? "kort" : "klein"; - if (sizing) { - return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`; - } - return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} is`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Ongeldige tekst: moet met "${_issue.prefix}" beginnen`; - } - if (_issue.format === "ends_with") - return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`; - if (_issue.format === "includes") - return `Ongeldige tekst: moet "${_issue.includes}" bevatten`; - if (_issue.format === "regex") - return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`; - return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Ongeldig getal: moet een veelvoud van ${issue2.divisor} zijn`; - case "unrecognized_keys": - return `Onbekende key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Ongeldige key in ${issue2.origin}`; - case "invalid_union": - return "Ongeldige invoer"; - case "invalid_element": - return `Ongeldige waarde in ${issue2.origin}`; - default: - return `Ongeldige invoer`; - } - }; -}; -var init_nl = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/no.js -function no_default() { - return { - localeError: error30() - }; -} -var error30 = () => { - const Sizable = { - string: { unit: "tegn", verb: "\xE5 ha" }, - file: { unit: "bytes", verb: "\xE5 ha" }, - array: { unit: "elementer", verb: "\xE5 inneholde" }, - set: { unit: "elementer", verb: "\xE5 inneholde" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "input", - email: "e-postadresse", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO dato- og klokkeslett", - date: "ISO-dato", - time: "ISO-klokkeslett", - duration: "ISO-varighet", - ipv4: "IPv4-omr\xE5de", - ipv6: "IPv6-omr\xE5de", - cidrv4: "IPv4-spekter", - cidrv6: "IPv6-spekter", - base64: "base64-enkodet streng", - base64url: "base64url-enkodet streng", - json_string: "JSON-streng", - e164: "E.164-nummer", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN", - number: "tall", - array: "liste" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Ugyldig input: forventet instanceof ${issue2.expected}, fikk ${received}`; - } - return `Ugyldig input: forventet ${expected}, fikk ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Ugyldig verdi: forventet ${stringifyPrimitive(issue2.values[0])}`; - return `Ugyldig valg: forventet en av ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`; - return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 ha ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Ugyldig streng: m\xE5 starte med "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Ugyldig streng: m\xE5 ende med "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Ugyldig streng: m\xE5 inneholde "${_issue.includes}"`; - if (_issue.format === "regex") - return `Ugyldig streng: m\xE5 matche m\xF8nsteret ${_issue.pattern}`; - return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Ugyldig tall: m\xE5 v\xE6re et multiplum av ${issue2.divisor}`; - case "unrecognized_keys": - return `${issue2.keys.length > 1 ? "Ukjente n\xF8kler" : "Ukjent n\xF8kkel"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Ugyldig n\xF8kkel i ${issue2.origin}`; - case "invalid_union": - return "Ugyldig input"; - case "invalid_element": - return `Ugyldig verdi i ${issue2.origin}`; - default: - return `Ugyldig input`; - } - }; -}; -var init_no = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ota.js -function ota_default() { - return { - localeError: error31() - }; -} -var error31 = () => { - const Sizable = { - string: { unit: "harf", verb: "olmal\u0131d\u0131r" }, - file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, - array: { unit: "unsur", verb: "olmal\u0131d\u0131r" }, - set: { unit: "unsur", verb: "olmal\u0131d\u0131r" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "giren", - email: "epostag\xE2h", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO heng\xE2m\u0131", - date: "ISO tarihi", - time: "ISO zaman\u0131", - duration: "ISO m\xFCddeti", - ipv4: "IPv4 ni\u015F\xE2n\u0131", - ipv6: "IPv6 ni\u015F\xE2n\u0131", - cidrv4: "IPv4 menzili", - cidrv6: "IPv6 menzili", - base64: "base64-\u015Fifreli metin", - base64url: "base64url-\u015Fifreli metin", - json_string: "JSON metin", - e164: "E.164 say\u0131s\u0131", - jwt: "JWT", - template_literal: "giren" - }; - const TypeDictionary = { - nan: "NaN", - number: "numara", - array: "saf", - null: "gayb" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `F\xE2sit giren: umulan instanceof ${issue2.expected}, al\u0131nan ${received}`; - } - return `F\xE2sit giren: umulan ${expected}, al\u0131nan ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `F\xE2sit giren: umulan ${stringifyPrimitive(issue2.values[0])}`; - return `F\xE2sit tercih: m\xFBteberler ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"} sahip olmal\u0131yd\u0131.`; - return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} olmal\u0131yd\u0131.`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`; - } - return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} olmal\u0131yd\u0131.`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `F\xE2sit metin: "${_issue.prefix}" ile ba\u015Flamal\u0131.`; - if (_issue.format === "ends_with") - return `F\xE2sit metin: "${_issue.suffix}" ile bitmeli.`; - if (_issue.format === "includes") - return `F\xE2sit metin: "${_issue.includes}" ihtiv\xE2 etmeli.`; - if (_issue.format === "regex") - return `F\xE2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`; - return `F\xE2sit ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `F\xE2sit say\u0131: ${issue2.divisor} kat\u0131 olmal\u0131yd\u0131.`; - case "unrecognized_keys": - return `Tan\u0131nmayan anahtar ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `${issue2.origin} i\xE7in tan\u0131nmayan anahtar var.`; - case "invalid_union": - return "Giren tan\u0131namad\u0131."; - case "invalid_element": - return `${issue2.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`; - default: - return `K\u0131ymet tan\u0131namad\u0131.`; - } - }; -}; -var init_ota = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ps.js -function ps_default() { - return { - localeError: error32() - }; -} -var error32 = () => { - const Sizable = { - string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, - file: { unit: "\u0628\u0627\u06CC\u067C\u0633", verb: "\u0648\u0644\u0631\u064A" }, - array: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, - set: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0648\u0631\u0648\u062F\u064A", - email: "\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9", - url: "\u06CC\u0648 \u0622\u0631 \u0627\u0644", - emoji: "\u0627\u06CC\u0645\u0648\u062C\u064A", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A", - date: "\u0646\u06D0\u067C\u0647", - time: "\u0648\u062E\u062A", - duration: "\u0645\u0648\u062F\u0647", - ipv4: "\u062F IPv4 \u067E\u062A\u0647", - ipv6: "\u062F IPv6 \u067E\u062A\u0647", - cidrv4: "\u062F IPv4 \u0633\u0627\u062D\u0647", - cidrv6: "\u062F IPv6 \u0633\u0627\u062D\u0647", - base64: "base64-encoded \u0645\u062A\u0646", - base64url: "base64url-encoded \u0645\u062A\u0646", - json_string: "JSON \u0645\u062A\u0646", - e164: "\u062F E.164 \u0634\u0645\u06D0\u0631\u0647", - jwt: "JWT", - template_literal: "\u0648\u0631\u0648\u062F\u064A" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0639\u062F\u062F", - array: "\u0627\u0631\u06D0" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue2.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; - } - return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; - } - case "invalid_value": - if (issue2.values.length === 1) { - return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${stringifyPrimitive(issue2.values[0])} \u0648\u0627\u06CC`; - } - return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${joinValues(issue2.values, "|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`; - } - return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0648\u064A`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`; - } - return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0648\u064A`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`; - } - if (_issue.format === "ends_with") { - return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`; - } - if (_issue.format === "includes") { - return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${_issue.includes}" \u0648\u0644\u0631\u064A`; - } - if (_issue.format === "regex") { - return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`; - } - return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`; - } - case "not_multiple_of": - return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue2.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`; - case "unrecognized_keys": - return `\u0646\u0627\u0633\u0645 ${issue2.keys.length > 1 ? "\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647" : "\u06A9\u0644\u06CC\u0689"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; - case "invalid_union": - return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; - case "invalid_element": - return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; - default: - return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; - } - }; -}; -var init_ps = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/pl.js -function pl_default() { - return { - localeError: error33() - }; -} -var error33 = () => { - const Sizable = { - string: { unit: "znak\xF3w", verb: "mie\u0107" }, - file: { unit: "bajt\xF3w", verb: "mie\u0107" }, - array: { unit: "element\xF3w", verb: "mie\u0107" }, - set: { unit: "element\xF3w", verb: "mie\u0107" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "wyra\u017Cenie", - email: "adres email", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "data i godzina w formacie ISO", - date: "data w formacie ISO", - time: "godzina w formacie ISO", - duration: "czas trwania ISO", - ipv4: "adres IPv4", - ipv6: "adres IPv6", - cidrv4: "zakres IPv4", - cidrv6: "zakres IPv6", - base64: "ci\u0105g znak\xF3w zakodowany w formacie base64", - base64url: "ci\u0105g znak\xF3w zakodowany w formacie base64url", - json_string: "ci\u0105g znak\xF3w w formacie JSON", - e164: "liczba E.164", - jwt: "JWT", - template_literal: "wej\u015Bcie" - }; - const TypeDictionary = { - nan: "NaN", - number: "liczba", - array: "tablica" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue2.expected}, otrzymano ${received}`; - } - return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${stringifyPrimitive(issue2.values[0])}`; - return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element\xF3w"}`; - } - return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "element\xF3w"}`; - } - return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${_issue.includes}"`; - if (_issue.format === "regex") - return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`; - return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue2.divisor}`; - case "unrecognized_keys": - return `Nierozpoznane klucze${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Nieprawid\u0142owy klucz w ${issue2.origin}`; - case "invalid_union": - return "Nieprawid\u0142owe dane wej\u015Bciowe"; - case "invalid_element": - return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue2.origin}`; - default: - return `Nieprawid\u0142owe dane wej\u015Bciowe`; - } - }; -}; -var init_pl = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/pt.js -function pt_default() { - return { - localeError: error34() - }; -} -var error34 = () => { - const Sizable = { - string: { unit: "caracteres", verb: "ter" }, - file: { unit: "bytes", verb: "ter" }, - array: { unit: "itens", verb: "ter" }, - set: { unit: "itens", verb: "ter" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "padr\xE3o", - email: "endere\xE7o de e-mail", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "data e hora ISO", - date: "data ISO", - time: "hora ISO", - duration: "dura\xE7\xE3o ISO", - ipv4: "endere\xE7o IPv4", - ipv6: "endere\xE7o IPv6", - cidrv4: "faixa de IPv4", - cidrv6: "faixa de IPv6", - base64: "texto codificado em base64", - base64url: "URL codificada em base64", - json_string: "texto JSON", - e164: "n\xFAmero E.164", - jwt: "JWT", - template_literal: "entrada" - }; - const TypeDictionary = { - nan: "NaN", - number: "n\xFAmero", - null: "nulo" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Tipo inv\xE1lido: esperado instanceof ${issue2.expected}, recebido ${received}`; - } - return `Tipo inv\xE1lido: esperado ${expected}, recebido ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Entrada inv\xE1lida: esperado ${stringifyPrimitive(issue2.values[0])}`; - return `Op\xE7\xE3o inv\xE1lida: esperada uma das ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Muito grande: esperado que ${issue2.origin ?? "valor"} tivesse ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`; - return `Muito grande: esperado que ${issue2.origin ?? "valor"} fosse ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Muito pequeno: esperado que ${issue2.origin} tivesse ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Muito pequeno: esperado que ${issue2.origin} fosse ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Texto inv\xE1lido: deve come\xE7ar com "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Texto inv\xE1lido: deve terminar com "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Texto inv\xE1lido: deve incluir "${_issue.includes}"`; - if (_issue.format === "regex") - return `Texto inv\xE1lido: deve corresponder ao padr\xE3o ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} inv\xE1lido`; - } - case "not_multiple_of": - return `N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${issue2.divisor}`; - case "unrecognized_keys": - return `Chave${issue2.keys.length > 1 ? "s" : ""} desconhecida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Chave inv\xE1lida em ${issue2.origin}`; - case "invalid_union": - return "Entrada inv\xE1lida"; - case "invalid_element": - return `Valor inv\xE1lido em ${issue2.origin}`; - default: - return `Campo inv\xE1lido`; - } - }; -}; -var init_pt = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ru.js -function getRussianPlural(count, one, few, many) { - const absCount = Math.abs(count); - const lastDigit = absCount % 10; - const lastTwoDigits = absCount % 100; - if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { - return many; - } - if (lastDigit === 1) { - return one; - } - if (lastDigit >= 2 && lastDigit <= 4) { - return few; - } - return many; -} -function ru_default() { - return { - localeError: error35() - }; -} -var error35 = () => { - const Sizable = { - string: { - unit: { - one: "\u0441\u0438\u043C\u0432\u043E\u043B", - few: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", - many: "\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432" - }, - verb: "\u0438\u043C\u0435\u0442\u044C" - }, - file: { - unit: { - one: "\u0431\u0430\u0439\u0442", - few: "\u0431\u0430\u0439\u0442\u0430", - many: "\u0431\u0430\u0439\u0442" - }, - verb: "\u0438\u043C\u0435\u0442\u044C" - }, - array: { - unit: { - one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", - few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", - many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" - }, - verb: "\u0438\u043C\u0435\u0442\u044C" - }, - set: { - unit: { - one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", - few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", - many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" - }, - verb: "\u0438\u043C\u0435\u0442\u044C" - } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0432\u0432\u043E\u0434", - email: "email \u0430\u0434\u0440\u0435\u0441", - url: "URL", - emoji: "\u044D\u043C\u043E\u0434\u0437\u0438", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F", - date: "ISO \u0434\u0430\u0442\u0430", - time: "ISO \u0432\u0440\u0435\u043C\u044F", - duration: "ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C", - ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", - ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", - cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", - cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", - base64: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64", - base64url: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url", - json_string: "JSON \u0441\u0442\u0440\u043E\u043A\u0430", - e164: "\u043D\u043E\u043C\u0435\u0440 E.164", - jwt: "JWT", - template_literal: "\u0432\u0432\u043E\u0434" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0447\u0438\u0441\u043B\u043E", - array: "\u043C\u0430\u0441\u0441\u0438\u0432" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; - } - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${stringifyPrimitive(issue2.values[0])}`; - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - const maxValue = Number(issue2.maximum); - const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); - return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.maximum.toString()} ${unit}`; - } - return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - const minValue = Number(issue2.minimum); - const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); - return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.minimum.toString()} ${unit}`; - } - return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; - case "unrecognized_keys": - return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue2.keys.length > 1 ? "\u044B\u0435" : "\u044B\u0439"} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0438" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; - case "invalid_union": - return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"; - case "invalid_element": - return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue2.origin}`; - default: - return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`; - } - }; -}; -var init_ru = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/sl.js -function sl_default() { - return { - localeError: error36() - }; -} -var error36 = () => { - const Sizable = { - string: { unit: "znakov", verb: "imeti" }, - file: { unit: "bajtov", verb: "imeti" }, - array: { unit: "elementov", verb: "imeti" }, - set: { unit: "elementov", verb: "imeti" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "vnos", - email: "e-po\u0161tni naslov", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO datum in \u010Das", - date: "ISO datum", - time: "ISO \u010Das", - duration: "ISO trajanje", - ipv4: "IPv4 naslov", - ipv6: "IPv6 naslov", - cidrv4: "obseg IPv4", - cidrv6: "obseg IPv6", - base64: "base64 kodiran niz", - base64url: "base64url kodiran niz", - json_string: "JSON niz", - e164: "E.164 \u0161tevilka", - jwt: "JWT", - template_literal: "vnos" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0161tevilo", - array: "tabela" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue2.expected}, prejeto ${received}`; - } - return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Neveljaven vnos: pri\u010Dakovano ${stringifyPrimitive(issue2.values[0])}`; - return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} imelo ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementov"}`; - return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} imelo ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Neveljaven niz: mora se za\u010Deti z "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `Neveljaven niz: mora se kon\u010Dati z "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Neveljaven niz: mora vsebovati "${_issue.includes}"`; - if (_issue.format === "regex") - return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`; - return `Neveljaven ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue2.divisor}`; - case "unrecognized_keys": - return `Neprepoznan${issue2.keys.length > 1 ? "i klju\u010Di" : " klju\u010D"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Neveljaven klju\u010D v ${issue2.origin}`; - case "invalid_union": - return "Neveljaven vnos"; - case "invalid_element": - return `Neveljavna vrednost v ${issue2.origin}`; - default: - return "Neveljaven vnos"; - } - }; -}; -var init_sl = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/sv.js -function sv_default() { - return { - localeError: error37() - }; -} -var error37 = () => { - const Sizable = { - string: { unit: "tecken", verb: "att ha" }, - file: { unit: "bytes", verb: "att ha" }, - array: { unit: "objekt", verb: "att inneh\xE5lla" }, - set: { unit: "objekt", verb: "att inneh\xE5lla" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "regulj\xE4rt uttryck", - email: "e-postadress", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO-datum och tid", - date: "ISO-datum", - time: "ISO-tid", - duration: "ISO-varaktighet", - ipv4: "IPv4-intervall", - ipv6: "IPv6-intervall", - cidrv4: "IPv4-spektrum", - cidrv6: "IPv6-spektrum", - base64: "base64-kodad str\xE4ng", - base64url: "base64url-kodad str\xE4ng", - json_string: "JSON-str\xE4ng", - e164: "E.164-nummer", - jwt: "JWT", - template_literal: "mall-literal" - }; - const TypeDictionary = { - nan: "NaN", - number: "antal", - array: "lista" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Ogiltig inmatning: f\xF6rv\xE4ntat instanceof ${issue2.expected}, fick ${received}`; - } - return `Ogiltig inmatning: f\xF6rv\xE4ntat ${expected}, fick ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Ogiltig inmatning: f\xF6rv\xE4ntat ${stringifyPrimitive(issue2.values[0])}`; - return `Ogiltigt val: f\xF6rv\xE4ntade en av ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `F\xF6r stor(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`; - } - return `F\xF6r stor(t): f\xF6rv\xE4ntat ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `Ogiltig str\xE4ng: m\xE5ste sluta med "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${_issue.includes}"`; - if (_issue.format === "regex") - return `Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${_issue.pattern}"`; - return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Ogiltigt tal: m\xE5ste vara en multipel av ${issue2.divisor}`; - case "unrecognized_keys": - return `${issue2.keys.length > 1 ? "Ok\xE4nda nycklar" : "Ok\xE4nd nyckel"}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Ogiltig nyckel i ${issue2.origin ?? "v\xE4rdet"}`; - case "invalid_union": - return "Ogiltig input"; - case "invalid_element": - return `Ogiltigt v\xE4rde i ${issue2.origin ?? "v\xE4rdet"}`; - default: - return `Ogiltig input`; - } - }; -}; -var init_sv = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ta.js -function ta_default() { - return { - localeError: error38() - }; -} -var error38 = () => { - const Sizable = { - string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, - file: { unit: "\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, - array: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, - set: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1", - email: "\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", - date: "ISO \u0BA4\u0BC7\u0BA4\u0BBF", - time: "ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", - duration: "ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1", - ipv4: "IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", - ipv6: "IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", - cidrv4: "IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", - cidrv6: "IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", - base64: "base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD", - base64url: "base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD", - json_string: "JSON \u0B9A\u0BB0\u0BAE\u0BCD", - e164: "E.164 \u0B8E\u0BA3\u0BCD", - jwt: "JWT", - template_literal: "input" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0B8E\u0BA3\u0BCD", - array: "\u0B85\u0BA3\u0BBF", - null: "\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue2.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; - } - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${stringifyPrimitive(issue2.values[0])}`; - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${joinValues(issue2.values, "|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - } - return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - } - return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - if (_issue.format === "ends_with") - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - if (_issue.format === "includes") - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - if (_issue.format === "regex") - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue2.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; - case "unrecognized_keys": - return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue2.keys.length > 1 ? "\u0B95\u0BB3\u0BCD" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`; - case "invalid_union": - return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1"; - case "invalid_element": - return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`; - default: - return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`; - } - }; -}; -var init_ta = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/th.js -function th_default() { - return { - localeError: error39() - }; -} -var error39 = () => { - const Sizable = { - string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, - file: { unit: "\u0E44\u0E1A\u0E15\u0E4C", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, - array: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, - set: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19", - email: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25", - url: "URL", - emoji: "\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", - date: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO", - time: "\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", - duration: "\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", - ipv4: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4", - ipv6: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6", - cidrv4: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4", - cidrv6: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6", - base64: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64", - base64url: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL", - json_string: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON", - e164: "\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)", - jwt: "\u0E42\u0E17\u0E40\u0E04\u0E19 JWT", - template_literal: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02", - array: "\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)", - null: "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue2.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; - } - return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${stringifyPrimitive(issue2.values[0])}`; - return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19" : "\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`; - return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? "\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22" : "\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "${_issue.prefix}"`; - } - if (_issue.format === "ends_with") - return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "${_issue.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`; - if (_issue.format === "regex") - return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`; - return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue2.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`; - case "unrecognized_keys": - return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; - case "invalid_union": - return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49"; - case "invalid_element": - return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; - default: - return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`; - } - }; -}; -var init_th = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/tr.js -function tr_default() { - return { - localeError: error40() - }; -} -var error40 = () => { - const Sizable = { - string: { unit: "karakter", verb: "olmal\u0131" }, - file: { unit: "bayt", verb: "olmal\u0131" }, - array: { unit: "\xF6\u011Fe", verb: "olmal\u0131" }, - set: { unit: "\xF6\u011Fe", verb: "olmal\u0131" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "girdi", - email: "e-posta adresi", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO tarih ve saat", - date: "ISO tarih", - time: "ISO saat", - duration: "ISO s\xFCre", - ipv4: "IPv4 adresi", - ipv6: "IPv6 adresi", - cidrv4: "IPv4 aral\u0131\u011F\u0131", - cidrv6: "IPv6 aral\u0131\u011F\u0131", - base64: "base64 ile \u015Fifrelenmi\u015F metin", - base64url: "base64url ile \u015Fifrelenmi\u015F metin", - json_string: "JSON dizesi", - e164: "E.164 say\u0131s\u0131", - jwt: "JWT", - template_literal: "\u015Eablon dizesi" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Ge\xE7ersiz de\u011Fer: beklenen instanceof ${issue2.expected}, al\u0131nan ${received}`; - } - return `Ge\xE7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Ge\xE7ersiz de\u011Fer: beklenen ${stringifyPrimitive(issue2.values[0])}`; - return `Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xF6\u011Fe"}`; - return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Ge\xE7ersiz metin: "${_issue.prefix}" ile ba\u015Flamal\u0131`; - if (_issue.format === "ends_with") - return `Ge\xE7ersiz metin: "${_issue.suffix}" ile bitmeli`; - if (_issue.format === "includes") - return `Ge\xE7ersiz metin: "${_issue.includes}" i\xE7ermeli`; - if (_issue.format === "regex") - return `Ge\xE7ersiz metin: ${_issue.pattern} desenine uymal\u0131`; - return `Ge\xE7ersiz ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Ge\xE7ersiz say\u0131: ${issue2.divisor} ile tam b\xF6l\xFCnebilmeli`; - case "unrecognized_keys": - return `Tan\u0131nmayan anahtar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `${issue2.origin} i\xE7inde ge\xE7ersiz anahtar`; - case "invalid_union": - return "Ge\xE7ersiz de\u011Fer"; - case "invalid_element": - return `${issue2.origin} i\xE7inde ge\xE7ersiz de\u011Fer`; - default: - return `Ge\xE7ersiz de\u011Fer`; - } - }; -}; -var init_tr = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/uk.js -function uk_default() { - return { - localeError: error41() - }; -} -var error41 = () => { - const Sizable = { - string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, - file: { unit: "\u0431\u0430\u0439\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, - array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, - set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456", - email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438", - url: "URL", - emoji: "\u0435\u043C\u043E\u0434\u0437\u0456", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO", - date: "\u0434\u0430\u0442\u0430 ISO", - time: "\u0447\u0430\u0441 ISO", - duration: "\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO", - ipv4: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv4", - ipv6: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv6", - cidrv4: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4", - cidrv6: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6", - base64: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64", - base64url: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url", - json_string: "\u0440\u044F\u0434\u043E\u043A JSON", - e164: "\u043D\u043E\u043C\u0435\u0440 E.164", - jwt: "JWT", - template_literal: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0447\u0438\u0441\u043B\u043E", - array: "\u043C\u0430\u0441\u0438\u0432" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue2.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; - } - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432"}`; - return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} \u0431\u0443\u0434\u0435 ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue2.divisor}`; - case "unrecognized_keys": - return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0456" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; - case "invalid_union": - return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"; - case "invalid_element": - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue2.origin}`; - default: - return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`; - } - }; -}; -var init_uk = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ua.js -function ua_default() { - return uk_default(); -} -var init_ua = __esm(() => { - init_uk(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/ur.js -function ur_default() { - return { - localeError: error42() - }; -} -var error42 = () => { - const Sizable = { - string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" }, - file: { unit: "\u0628\u0627\u0626\u0679\u0633", verb: "\u06C1\u0648\u0646\u0627" }, - array: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" }, - set: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0627\u0646 \u067E\u0679", - email: "\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633", - url: "\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644", - emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", - uuid: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", - uuidv4: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4", - uuidv6: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6", - nanoid: "\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC", - guid: "\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", - cuid: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", - cuid2: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2", - ulid: "\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC", - xid: "\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC", - ksuid: "\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", - datetime: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645", - date: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E", - time: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A", - duration: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A", - ipv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633", - ipv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633", - cidrv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C", - cidrv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C", - base64: "\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", - base64url: "\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", - json_string: "\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF", - e164: "\u0627\u06CC 164 \u0646\u0645\u0628\u0631", - jwt: "\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC", - template_literal: "\u0627\u0646 \u067E\u0679" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u0646\u0645\u0628\u0631", - array: "\u0622\u0631\u06D2", - null: "\u0646\u0644" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue2.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; - } - return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${stringifyPrimitive(issue2.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; - return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${joinValues(issue2.values, "|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0627\u0635\u0631"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; - return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${adj}${issue2.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u06D2 ${adj}${issue2.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; - } - return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u0627 ${adj}${issue2.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; - } - if (_issue.format === "ends_with") - return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; - if (_issue.format === "includes") - return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; - if (_issue.format === "regex") - return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; - return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue2.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; - case "unrecognized_keys": - return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue2.keys.length > 1 ? "\u0632" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; - case "invalid_key": - return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`; - case "invalid_union": - return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"; - case "invalid_element": - return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`; - default: - return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`; - } - }; -}; -var init_ur = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/uz.js -function uz_default() { - return { - localeError: error43() - }; -} -var error43 = () => { - const Sizable = { - string: { unit: "belgi", verb: "bo\u2018lishi kerak" }, - file: { unit: "bayt", verb: "bo\u2018lishi kerak" }, - array: { unit: "element", verb: "bo\u2018lishi kerak" }, - set: { unit: "element", verb: "bo\u2018lishi kerak" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "kirish", - email: "elektron pochta manzili", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO sana va vaqti", - date: "ISO sana", - time: "ISO vaqt", - duration: "ISO davomiylik", - ipv4: "IPv4 manzil", - ipv6: "IPv6 manzil", - mac: "MAC manzil", - cidrv4: "IPv4 diapazon", - cidrv6: "IPv6 diapazon", - base64: "base64 kodlangan satr", - base64url: "base64url kodlangan satr", - json_string: "JSON satr", - e164: "E.164 raqam", - jwt: "JWT", - template_literal: "kirish" - }; - const TypeDictionary = { - nan: "NaN", - number: "raqam", - array: "massiv" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue2.expected}, qabul qilingan ${received}`; - } - return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `Noto\u2018g\u2018ri kirish: kutilgan ${stringifyPrimitive(issue2.values[0])}`; - return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()} ${sizing.unit} ${sizing.verb}`; - return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`; - } - return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Noto\u2018g\u2018ri satr: "${_issue.prefix}" bilan boshlanishi kerak`; - if (_issue.format === "ends_with") - return `Noto\u2018g\u2018ri satr: "${_issue.suffix}" bilan tugashi kerak`; - if (_issue.format === "includes") - return `Noto\u2018g\u2018ri satr: "${_issue.includes}" ni o\u2018z ichiga olishi kerak`; - if (_issue.format === "regex") - return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`; - return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `Noto\u2018g\u2018ri raqam: ${issue2.divisor} ning karralisi bo\u2018lishi kerak`; - case "unrecognized_keys": - return `Noma\u2019lum kalit${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `${issue2.origin} dagi kalit noto\u2018g\u2018ri`; - case "invalid_union": - return "Noto\u2018g\u2018ri kirish"; - case "invalid_element": - return `${issue2.origin} da noto\u2018g\u2018ri qiymat`; - default: - return `Noto\u2018g\u2018ri kirish`; - } - }; -}; -var init_uz = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/vi.js -function vi_default() { - return { - localeError: error44() - }; -} -var error44 = () => { - const Sizable = { - string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" }, - file: { unit: "byte", verb: "c\xF3" }, - array: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" }, - set: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u0111\u1EA7u v\xE0o", - email: "\u0111\u1ECBa ch\u1EC9 email", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ng\xE0y gi\u1EDD ISO", - date: "ng\xE0y ISO", - time: "gi\u1EDD ISO", - duration: "kho\u1EA3ng th\u1EDDi gian ISO", - ipv4: "\u0111\u1ECBa ch\u1EC9 IPv4", - ipv6: "\u0111\u1ECBa ch\u1EC9 IPv6", - cidrv4: "d\u1EA3i IPv4", - cidrv6: "d\u1EA3i IPv6", - base64: "chu\u1ED7i m\xE3 h\xF3a base64", - base64url: "chu\u1ED7i m\xE3 h\xF3a base64url", - json_string: "chu\u1ED7i JSON", - e164: "s\u1ED1 E.164", - jwt: "JWT", - template_literal: "\u0111\u1EA7u v\xE0o" - }; - const TypeDictionary = { - nan: "NaN", - number: "s\u1ED1", - array: "m\u1EA3ng" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue2.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; - } - return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${stringifyPrimitive(issue2.values[0])}`; - return `T\xF9y ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\xE1c gi\xE1 tr\u1ECB ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "ph\u1EA7n t\u1EED"}`; - return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${_issue.suffix}"`; - if (_issue.format === "includes") - return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${_issue.includes}"`; - if (_issue.format === "regex") - return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`; - return `${FormatDictionary[_issue.format] ?? issue2.format} kh\xF4ng h\u1EE3p l\u1EC7`; - } - case "not_multiple_of": - return `S\u1ED1 kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\xE0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue2.divisor}`; - case "unrecognized_keys": - return `Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; - case "invalid_union": - return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"; - case "invalid_element": - return `Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; - default: - return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7`; - } - }; -}; -var init_vi = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/zh-CN.js -function zh_CN_default() { - return { - localeError: error45() - }; -} -var error45 = () => { - const Sizable = { - string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" }, - file: { unit: "\u5B57\u8282", verb: "\u5305\u542B" }, - array: { unit: "\u9879", verb: "\u5305\u542B" }, - set: { unit: "\u9879", verb: "\u5305\u542B" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u8F93\u5165", - email: "\u7535\u5B50\u90AE\u4EF6", - url: "URL", - emoji: "\u8868\u60C5\u7B26\u53F7", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO\u65E5\u671F\u65F6\u95F4", - date: "ISO\u65E5\u671F", - time: "ISO\u65F6\u95F4", - duration: "ISO\u65F6\u957F", - ipv4: "IPv4\u5730\u5740", - ipv6: "IPv6\u5730\u5740", - cidrv4: "IPv4\u7F51\u6BB5", - cidrv6: "IPv6\u7F51\u6BB5", - base64: "base64\u7F16\u7801\u5B57\u7B26\u4E32", - base64url: "base64url\u7F16\u7801\u5B57\u7B26\u4E32", - json_string: "JSON\u5B57\u7B26\u4E32", - e164: "E.164\u53F7\u7801", - jwt: "JWT", - template_literal: "\u8F93\u5165" - }; - const TypeDictionary = { - nan: "NaN", - number: "\u6570\u5B57", - array: "\u6570\u7EC4", - null: "\u7A7A\u503C(null)" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue2.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; - } - return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${stringifyPrimitive(issue2.values[0])}`; - return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u4E2A\u5143\u7D20"}`; - return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.prefix}" \u5F00\u5934`; - if (_issue.format === "ends_with") - return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.suffix}" \u7ED3\u5C3E`; - if (_issue.format === "includes") - return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`; - return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue2.divisor} \u7684\u500D\u6570`; - case "unrecognized_keys": - return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `${issue2.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`; - case "invalid_union": - return "\u65E0\u6548\u8F93\u5165"; - case "invalid_element": - return `${issue2.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`; - default: - return `\u65E0\u6548\u8F93\u5165`; - } - }; -}; -var init_zh_CN = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/zh-TW.js -function zh_TW_default() { - return { - localeError: error46() - }; -} -var error46 = () => { - const Sizable = { - string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" }, - file: { unit: "\u4F4D\u5143\u7D44", verb: "\u64C1\u6709" }, - array: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" }, - set: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u8F38\u5165", - email: "\u90F5\u4EF6\u5730\u5740", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "ISO \u65E5\u671F\u6642\u9593", - date: "ISO \u65E5\u671F", - time: "ISO \u6642\u9593", - duration: "ISO \u671F\u9593", - ipv4: "IPv4 \u4F4D\u5740", - ipv6: "IPv6 \u4F4D\u5740", - cidrv4: "IPv4 \u7BC4\u570D", - cidrv6: "IPv6 \u7BC4\u570D", - base64: "base64 \u7DE8\u78BC\u5B57\u4E32", - base64url: "base64url \u7DE8\u78BC\u5B57\u4E32", - json_string: "JSON \u5B57\u4E32", - e164: "E.164 \u6578\u503C", - jwt: "JWT", - template_literal: "\u8F38\u5165" - }; - const TypeDictionary = { - nan: "NaN" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue2.expected}\uFF0C\u4F46\u6536\u5230 ${received}`; - } - return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${stringifyPrimitive(issue2.values[0])}`; - return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u500B\u5143\u7D20"}`; - return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) { - return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()} ${sizing.unit}`; - } - return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") { - return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.prefix}" \u958B\u982D`; - } - if (_issue.format === "ends_with") - return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.suffix}" \u7D50\u5C3E`; - if (_issue.format === "includes") - return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`; - return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue2.divisor} \u7684\u500D\u6578`; - case "unrecognized_keys": - return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue2.keys.length > 1 ? "\u5011" : ""}\uFF1A${joinValues(issue2.keys, "\u3001")}`; - case "invalid_key": - return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`; - case "invalid_union": - return "\u7121\u6548\u7684\u8F38\u5165\u503C"; - case "invalid_element": - return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`; - default: - return `\u7121\u6548\u7684\u8F38\u5165\u503C`; - } - }; -}; -var init_zh_TW = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/yo.js -function yo_default() { - return { - localeError: error47() - }; -} -var error47 = () => { - const Sizable = { - string: { unit: "\xE0mi", verb: "n\xED" }, - file: { unit: "bytes", verb: "n\xED" }, - array: { unit: "nkan", verb: "n\xED" }, - set: { unit: "nkan", verb: "n\xED" } - }; - function getSizing(origin) { - return Sizable[origin] ?? null; - } - const FormatDictionary = { - regex: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9", - email: "\xE0d\xEDr\u1EB9\u0301s\xEC \xECm\u1EB9\u0301l\xEC", - url: "URL", - emoji: "emoji", - uuid: "UUID", - uuidv4: "UUIDv4", - uuidv6: "UUIDv6", - nanoid: "nanoid", - guid: "GUID", - cuid: "cuid", - cuid2: "cuid2", - ulid: "ULID", - xid: "XID", - ksuid: "KSUID", - datetime: "\xE0k\xF3k\xF2 ISO", - date: "\u1ECDj\u1ECD\u0301 ISO", - time: "\xE0k\xF3k\xF2 ISO", - duration: "\xE0k\xF3k\xF2 t\xF3 p\xE9 ISO", - ipv4: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv4", - ipv6: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv6", - cidrv4: "\xE0gb\xE8gb\xE8 IPv4", - cidrv6: "\xE0gb\xE8gb\xE8 IPv6", - base64: "\u1ECD\u0300r\u1ECD\u0300 t\xED a k\u1ECD\u0301 n\xED base64", - base64url: "\u1ECD\u0300r\u1ECD\u0300 base64url", - json_string: "\u1ECD\u0300r\u1ECD\u0300 JSON", - e164: "n\u1ECD\u0301mb\xE0 E.164", - jwt: "JWT", - template_literal: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9" - }; - const TypeDictionary = { - nan: "NaN", - number: "n\u1ECD\u0301mb\xE0", - array: "akop\u1ECD" - }; - return (issue2) => { - switch (issue2.code) { - case "invalid_type": { - const expected = TypeDictionary[issue2.expected] ?? issue2.expected; - const receivedType = parsedType(issue2.input); - const received = TypeDictionary[receivedType] ?? receivedType; - if (/^[A-Z]/.test(issue2.expected)) { - return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${issue2.expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; - } - return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; - } - case "invalid_value": - if (issue2.values.length === 1) - return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${stringifyPrimitive(issue2.values[0])}`; - return `\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${joinValues(issue2.values, "|")}`; - case "too_big": { - const adj = issue2.inclusive ? "<=" : "<"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin ?? "iye"} ${sizing.verb} ${adj}${issue2.maximum} ${sizing.unit}`; - return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.maximum}`; - } - case "too_small": { - const adj = issue2.inclusive ? ">=" : ">"; - const sizing = getSizing(issue2.origin); - if (sizing) - return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum} ${sizing.unit}`; - return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.minimum}`; - } - case "invalid_format": { - const _issue = issue2; - if (_issue.format === "starts_with") - return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\xFA "${_issue.prefix}"`; - if (_issue.format === "ends_with") - return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${_issue.suffix}"`; - if (_issue.format === "includes") - return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${_issue.includes}"`; - if (_issue.format === "regex") - return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`; - return `A\u1E63\xEC\u1E63e: ${FormatDictionary[_issue.format] ?? issue2.format}`; - } - case "not_multiple_of": - return `N\u1ECD\u0301mb\xE0 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \xE8y\xE0 p\xEDp\xEDn ti ${issue2.divisor}`; - case "unrecognized_keys": - return `B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${joinValues(issue2.keys, ", ")}`; - case "invalid_key": - return `B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; - case "invalid_union": - return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; - case "invalid_element": - return `Iye a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; - default: - return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; - } - }; -}; -var init_yo = __esm(() => { - init_util(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/locales/index.js -var exports_locales = {}; -__export(exports_locales, { - zhTW: () => zh_TW_default, - zhCN: () => zh_CN_default, - yo: () => yo_default, - vi: () => vi_default, - uz: () => uz_default, - ur: () => ur_default, - uk: () => uk_default, - ua: () => ua_default, - tr: () => tr_default, - th: () => th_default, - ta: () => ta_default, - sv: () => sv_default, - sl: () => sl_default, - ru: () => ru_default, - pt: () => pt_default, - ps: () => ps_default, - pl: () => pl_default, - ota: () => ota_default, - no: () => no_default, - nl: () => nl_default, - ms: () => ms_default, - mk: () => mk_default, - lt: () => lt_default, - ko: () => ko_default, - km: () => km_default, - kh: () => kh_default, - ka: () => ka_default, - ja: () => ja_default, - it: () => it_default, - is: () => is_default, - id: () => id_default, - hy: () => hy_default, - hu: () => hu_default, - he: () => he_default, - frCA: () => fr_CA_default, - fr: () => fr_default, - fi: () => fi_default, - fa: () => fa_default, - es: () => es_default, - eo: () => eo_default, - en: () => en_default, - de: () => de_default, - da: () => da_default, - cs: () => cs_default, - ca: () => ca_default, - bg: () => bg_default, - be: () => be_default, - az: () => az_default, - ar: () => ar_default -}); -var init_locales = __esm(() => { - init_ar(); - init_az(); - init_be(); - init_bg(); - init_ca(); - init_cs(); - init_da(); - init_de(); - init_en(); - init_eo(); - init_es(); - init_fa(); - init_fi(); - init_fr(); - init_fr_CA(); - init_he(); - init_hu(); - init_hy(); - init_id(); - init_is(); - init_it(); - init_ja(); - init_ka(); - init_kh(); - init_km(); - init_ko(); - init_lt(); - init_mk(); - init_ms(); - init_nl(); - init_no(); - init_ota(); - init_ps(); - init_pl(); - init_pt(); - init_ru(); - init_sl(); - init_sv(); - init_ta(); - init_th(); - init_tr(); - init_ua(); - init_uk(); - init_ur(); - init_uz(); - init_vi(); - init_zh_CN(); - init_zh_TW(); - init_yo(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/registries.js -class $ZodRegistry { - constructor() { - this._map = new WeakMap; - this._idmap = new Map; - } - add(schema, ..._meta) { - const meta = _meta[0]; - this._map.set(schema, meta); - if (meta && typeof meta === "object" && "id" in meta) { - this._idmap.set(meta.id, schema); - } - return this; - } - clear() { - this._map = new WeakMap; - this._idmap = new Map; - return this; - } - remove(schema) { - const meta = this._map.get(schema); - if (meta && typeof meta === "object" && "id" in meta) { - this._idmap.delete(meta.id); - } - this._map.delete(schema); - return this; - } - get(schema) { - const p = schema._zod.parent; - if (p) { - const pm = { ...this.get(p) ?? {} }; - delete pm.id; - const f = { ...pm, ...this._map.get(schema) }; - return Object.keys(f).length ? f : undefined; - } - return this._map.get(schema); - } - has(schema) { - return this._map.has(schema); - } -} -function registry() { - return new $ZodRegistry; -} -var _a, $output, $input, globalRegistry; -var init_registries = __esm(() => { - $output = Symbol("ZodOutput"); - $input = Symbol("ZodInput"); - (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry()); - globalRegistry = globalThis.__zod_globalRegistry; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/api.js -function _string(Class2, params) { - return new Class2({ - type: "string", - ...normalizeParams(params) - }); -} -function _coercedString(Class2, params) { - return new Class2({ - type: "string", - coerce: true, - ...normalizeParams(params) - }); -} -function _email(Class2, params) { - return new Class2({ - type: "string", - format: "email", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _guid(Class2, params) { - return new Class2({ - type: "string", - format: "guid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _uuid(Class2, params) { - return new Class2({ - type: "string", - format: "uuid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _uuidv4(Class2, params) { - return new Class2({ - type: "string", - format: "uuid", - check: "string_format", - abort: false, - version: "v4", - ...normalizeParams(params) - }); -} -function _uuidv6(Class2, params) { - return new Class2({ - type: "string", - format: "uuid", - check: "string_format", - abort: false, - version: "v6", - ...normalizeParams(params) - }); -} -function _uuidv7(Class2, params) { - return new Class2({ - type: "string", - format: "uuid", - check: "string_format", - abort: false, - version: "v7", - ...normalizeParams(params) - }); -} -function _url(Class2, params) { - return new Class2({ - type: "string", - format: "url", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _emoji2(Class2, params) { - return new Class2({ - type: "string", - format: "emoji", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _nanoid(Class2, params) { - return new Class2({ - type: "string", - format: "nanoid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _cuid(Class2, params) { - return new Class2({ - type: "string", - format: "cuid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _cuid2(Class2, params) { - return new Class2({ - type: "string", - format: "cuid2", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _ulid(Class2, params) { - return new Class2({ - type: "string", - format: "ulid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _xid(Class2, params) { - return new Class2({ - type: "string", - format: "xid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _ksuid(Class2, params) { - return new Class2({ - type: "string", - format: "ksuid", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _ipv4(Class2, params) { - return new Class2({ - type: "string", - format: "ipv4", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _ipv6(Class2, params) { - return new Class2({ - type: "string", - format: "ipv6", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _mac(Class2, params) { - return new Class2({ - type: "string", - format: "mac", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _cidrv4(Class2, params) { - return new Class2({ - type: "string", - format: "cidrv4", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _cidrv6(Class2, params) { - return new Class2({ - type: "string", - format: "cidrv6", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _base64(Class2, params) { - return new Class2({ - type: "string", - format: "base64", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _base64url(Class2, params) { - return new Class2({ - type: "string", - format: "base64url", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _e164(Class2, params) { - return new Class2({ - type: "string", - format: "e164", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _jwt(Class2, params) { - return new Class2({ - type: "string", - format: "jwt", - check: "string_format", - abort: false, - ...normalizeParams(params) - }); -} -function _isoDateTime(Class2, params) { - return new Class2({ - type: "string", - format: "datetime", - check: "string_format", - offset: false, - local: false, - precision: null, - ...normalizeParams(params) - }); -} -function _isoDate(Class2, params) { - return new Class2({ - type: "string", - format: "date", - check: "string_format", - ...normalizeParams(params) - }); -} -function _isoTime(Class2, params) { - return new Class2({ - type: "string", - format: "time", - check: "string_format", - precision: null, - ...normalizeParams(params) - }); -} -function _isoDuration(Class2, params) { - return new Class2({ - type: "string", - format: "duration", - check: "string_format", - ...normalizeParams(params) - }); -} -function _number(Class2, params) { - return new Class2({ - type: "number", - checks: [], - ...normalizeParams(params) - }); -} -function _coercedNumber(Class2, params) { - return new Class2({ - type: "number", - coerce: true, - checks: [], - ...normalizeParams(params) - }); -} -function _int(Class2, params) { - return new Class2({ - type: "number", - check: "number_format", - abort: false, - format: "safeint", - ...normalizeParams(params) - }); -} -function _float32(Class2, params) { - return new Class2({ - type: "number", - check: "number_format", - abort: false, - format: "float32", - ...normalizeParams(params) - }); -} -function _float64(Class2, params) { - return new Class2({ - type: "number", - check: "number_format", - abort: false, - format: "float64", - ...normalizeParams(params) - }); -} -function _int32(Class2, params) { - return new Class2({ - type: "number", - check: "number_format", - abort: false, - format: "int32", - ...normalizeParams(params) - }); -} -function _uint32(Class2, params) { - return new Class2({ - type: "number", - check: "number_format", - abort: false, - format: "uint32", - ...normalizeParams(params) - }); -} -function _boolean(Class2, params) { - return new Class2({ - type: "boolean", - ...normalizeParams(params) - }); -} -function _coercedBoolean(Class2, params) { - return new Class2({ - type: "boolean", - coerce: true, - ...normalizeParams(params) - }); -} -function _bigint(Class2, params) { - return new Class2({ - type: "bigint", - ...normalizeParams(params) - }); -} -function _coercedBigint(Class2, params) { - return new Class2({ - type: "bigint", - coerce: true, - ...normalizeParams(params) - }); -} -function _int64(Class2, params) { - return new Class2({ - type: "bigint", - check: "bigint_format", - abort: false, - format: "int64", - ...normalizeParams(params) - }); -} -function _uint64(Class2, params) { - return new Class2({ - type: "bigint", - check: "bigint_format", - abort: false, - format: "uint64", - ...normalizeParams(params) - }); -} -function _symbol(Class2, params) { - return new Class2({ - type: "symbol", - ...normalizeParams(params) - }); -} -function _undefined2(Class2, params) { - return new Class2({ - type: "undefined", - ...normalizeParams(params) - }); -} -function _null2(Class2, params) { - return new Class2({ - type: "null", - ...normalizeParams(params) - }); -} -function _any(Class2) { - return new Class2({ - type: "any" - }); -} -function _unknown(Class2) { - return new Class2({ - type: "unknown" - }); -} -function _never(Class2, params) { - return new Class2({ - type: "never", - ...normalizeParams(params) - }); -} -function _void(Class2, params) { - return new Class2({ - type: "void", - ...normalizeParams(params) - }); -} -function _date(Class2, params) { - return new Class2({ - type: "date", - ...normalizeParams(params) - }); -} -function _coercedDate(Class2, params) { - return new Class2({ - type: "date", - coerce: true, - ...normalizeParams(params) - }); -} -function _nan(Class2, params) { - return new Class2({ - type: "nan", - ...normalizeParams(params) - }); -} -function _lt(value, params) { - return new $ZodCheckLessThan({ - check: "less_than", - ...normalizeParams(params), - value, - inclusive: false - }); -} -function _lte(value, params) { - return new $ZodCheckLessThan({ - check: "less_than", - ...normalizeParams(params), - value, - inclusive: true - }); -} -function _gt(value, params) { - return new $ZodCheckGreaterThan({ - check: "greater_than", - ...normalizeParams(params), - value, - inclusive: false - }); -} -function _gte(value, params) { - return new $ZodCheckGreaterThan({ - check: "greater_than", - ...normalizeParams(params), - value, - inclusive: true - }); -} -function _positive(params) { - return _gt(0, params); -} -function _negative(params) { - return _lt(0, params); -} -function _nonpositive(params) { - return _lte(0, params); -} -function _nonnegative(params) { - return _gte(0, params); -} -function _multipleOf(value, params) { - return new $ZodCheckMultipleOf({ - check: "multiple_of", - ...normalizeParams(params), - value - }); -} -function _maxSize(maximum, params) { - return new $ZodCheckMaxSize({ - check: "max_size", - ...normalizeParams(params), - maximum - }); -} -function _minSize(minimum, params) { - return new $ZodCheckMinSize({ - check: "min_size", - ...normalizeParams(params), - minimum - }); -} -function _size(size, params) { - return new $ZodCheckSizeEquals({ - check: "size_equals", - ...normalizeParams(params), - size - }); -} -function _maxLength(maximum, params) { - const ch = new $ZodCheckMaxLength({ - check: "max_length", - ...normalizeParams(params), - maximum - }); - return ch; -} -function _minLength(minimum, params) { - return new $ZodCheckMinLength({ - check: "min_length", - ...normalizeParams(params), - minimum - }); -} -function _length(length, params) { - return new $ZodCheckLengthEquals({ - check: "length_equals", - ...normalizeParams(params), - length - }); -} -function _regex(pattern, params) { - return new $ZodCheckRegex({ - check: "string_format", - format: "regex", - ...normalizeParams(params), - pattern - }); -} -function _lowercase(params) { - return new $ZodCheckLowerCase({ - check: "string_format", - format: "lowercase", - ...normalizeParams(params) - }); -} -function _uppercase(params) { - return new $ZodCheckUpperCase({ - check: "string_format", - format: "uppercase", - ...normalizeParams(params) - }); -} -function _includes(includes, params) { - return new $ZodCheckIncludes({ - check: "string_format", - format: "includes", - ...normalizeParams(params), - includes - }); -} -function _startsWith(prefix, params) { - return new $ZodCheckStartsWith({ - check: "string_format", - format: "starts_with", - ...normalizeParams(params), - prefix - }); -} -function _endsWith(suffix, params) { - return new $ZodCheckEndsWith({ - check: "string_format", - format: "ends_with", - ...normalizeParams(params), - suffix - }); -} -function _property(property, schema, params) { - return new $ZodCheckProperty({ - check: "property", - property, - schema, - ...normalizeParams(params) - }); -} -function _mime(types, params) { - return new $ZodCheckMimeType({ - check: "mime_type", - mime: types, - ...normalizeParams(params) - }); -} -function _overwrite(tx) { - return new $ZodCheckOverwrite({ - check: "overwrite", - tx - }); -} -function _normalize(form) { - return _overwrite((input) => input.normalize(form)); -} -function _trim() { - return _overwrite((input) => input.trim()); -} -function _toLowerCase() { - return _overwrite((input) => input.toLowerCase()); -} -function _toUpperCase() { - return _overwrite((input) => input.toUpperCase()); -} -function _slugify() { - return _overwrite((input) => slugify(input)); -} -function _array(Class2, element, params) { - return new Class2({ - type: "array", - element, - ...normalizeParams(params) - }); -} -function _union(Class2, options, params) { - return new Class2({ - type: "union", - options, - ...normalizeParams(params) - }); -} -function _xor(Class2, options, params) { - return new Class2({ - type: "union", - options, - inclusive: false, - ...normalizeParams(params) - }); -} -function _discriminatedUnion(Class2, discriminator, options, params) { - return new Class2({ - type: "union", - options, - discriminator, - ...normalizeParams(params) - }); -} -function _intersection(Class2, left, right) { - return new Class2({ - type: "intersection", - left, - right - }); -} -function _tuple(Class2, items, _paramsOrRest, _params) { - const hasRest = _paramsOrRest instanceof $ZodType; - const params = hasRest ? _params : _paramsOrRest; - const rest = hasRest ? _paramsOrRest : null; - return new Class2({ - type: "tuple", - items, - rest, - ...normalizeParams(params) - }); -} -function _record(Class2, keyType, valueType, params) { - return new Class2({ - type: "record", - keyType, - valueType, - ...normalizeParams(params) - }); -} -function _map(Class2, keyType, valueType, params) { - return new Class2({ - type: "map", - keyType, - valueType, - ...normalizeParams(params) - }); -} -function _set(Class2, valueType, params) { - return new Class2({ - type: "set", - valueType, - ...normalizeParams(params) - }); -} -function _enum(Class2, values, params) { - const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; - return new Class2({ - type: "enum", - entries, - ...normalizeParams(params) - }); -} -function _nativeEnum(Class2, entries, params) { - return new Class2({ - type: "enum", - entries, - ...normalizeParams(params) - }); -} -function _literal(Class2, value, params) { - return new Class2({ - type: "literal", - values: Array.isArray(value) ? value : [value], - ...normalizeParams(params) - }); -} -function _file(Class2, params) { - return new Class2({ - type: "file", - ...normalizeParams(params) - }); -} -function _transform(Class2, fn) { - return new Class2({ - type: "transform", - transform: fn - }); -} -function _optional(Class2, innerType) { - return new Class2({ - type: "optional", - innerType - }); -} -function _nullable(Class2, innerType) { - return new Class2({ - type: "nullable", - innerType - }); -} -function _default(Class2, innerType, defaultValue) { - return new Class2({ - type: "default", - innerType, - get defaultValue() { - return typeof defaultValue === "function" ? defaultValue() : shallowClone(defaultValue); - } - }); -} -function _nonoptional(Class2, innerType, params) { - return new Class2({ - type: "nonoptional", - innerType, - ...normalizeParams(params) - }); -} -function _success(Class2, innerType) { - return new Class2({ - type: "success", - innerType - }); -} -function _catch(Class2, innerType, catchValue) { - return new Class2({ - type: "catch", - innerType, - catchValue: typeof catchValue === "function" ? catchValue : () => catchValue - }); -} -function _pipe(Class2, in_, out) { - return new Class2({ - type: "pipe", - in: in_, - out - }); -} -function _readonly(Class2, innerType) { - return new Class2({ - type: "readonly", - innerType - }); -} -function _templateLiteral(Class2, parts, params) { - return new Class2({ - type: "template_literal", - parts, - ...normalizeParams(params) - }); -} -function _lazy(Class2, getter) { - return new Class2({ - type: "lazy", - getter - }); -} -function _promise(Class2, innerType) { - return new Class2({ - type: "promise", - innerType - }); -} -function _custom(Class2, fn, _params) { - const norm = normalizeParams(_params); - norm.abort ?? (norm.abort = true); - const schema = new Class2({ - type: "custom", - check: "custom", - fn, - ...norm - }); - return schema; -} -function _refine(Class2, fn, _params) { - const schema = new Class2({ - type: "custom", - check: "custom", - fn, - ...normalizeParams(_params) - }); - return schema; -} -function _superRefine(fn) { - const ch = _check((payload) => { - payload.addIssue = (issue2) => { - if (typeof issue2 === "string") { - payload.issues.push(issue(issue2, payload.value, ch._zod.def)); - } else { - const _issue = issue2; - if (_issue.fatal) - _issue.continue = false; - _issue.code ?? (_issue.code = "custom"); - _issue.input ?? (_issue.input = payload.value); - _issue.inst ?? (_issue.inst = ch); - _issue.continue ?? (_issue.continue = !ch._zod.def.abort); - payload.issues.push(issue(_issue)); - } - }; - return fn(payload.value, payload); - }); - return ch; -} -function _check(fn, params) { - const ch = new $ZodCheck({ - check: "custom", - ...normalizeParams(params) - }); - ch._zod.check = fn; - return ch; -} -function describe(description) { - const ch = new $ZodCheck({ check: "describe" }); - ch._zod.onattach = [ - (inst) => { - const existing = globalRegistry.get(inst) ?? {}; - globalRegistry.add(inst, { ...existing, description }); - } - ]; - ch._zod.check = () => {}; - return ch; -} -function meta(metadata) { - const ch = new $ZodCheck({ check: "meta" }); - ch._zod.onattach = [ - (inst) => { - const existing = globalRegistry.get(inst) ?? {}; - globalRegistry.add(inst, { ...existing, ...metadata }); - } - ]; - ch._zod.check = () => {}; - return ch; -} -function _stringbool(Classes, _params) { - const params = normalizeParams(_params); - let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"]; - let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"]; - if (params.case !== "sensitive") { - truthyArray = truthyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v); - falsyArray = falsyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v); - } - const truthySet = new Set(truthyArray); - const falsySet = new Set(falsyArray); - const _Codec = Classes.Codec ?? $ZodCodec; - const _Boolean = Classes.Boolean ?? $ZodBoolean; - const _String = Classes.String ?? $ZodString; - const stringSchema = new _String({ type: "string", error: params.error }); - const booleanSchema = new _Boolean({ type: "boolean", error: params.error }); - const codec = new _Codec({ - type: "pipe", - in: stringSchema, - out: booleanSchema, - transform: (input, payload) => { - let data = input; - if (params.case !== "sensitive") - data = data.toLowerCase(); - if (truthySet.has(data)) { - return true; - } else if (falsySet.has(data)) { - return false; - } else { - payload.issues.push({ - code: "invalid_value", - expected: "stringbool", - values: [...truthySet, ...falsySet], - input: payload.value, - inst: codec, - continue: false - }); - return {}; - } - }, - reverseTransform: (input, _payload) => { - if (input === true) { - return truthyArray[0] || "true"; - } else { - return falsyArray[0] || "false"; - } - }, - error: params.error - }); - return codec; -} -function _stringFormat(Class2, format, fnOrRegex, _params = {}) { - const params = normalizeParams(_params); - const def = { - ...normalizeParams(_params), - check: "string_format", - type: "string", - format, - fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val), - ...params - }; - if (fnOrRegex instanceof RegExp) { - def.pattern = fnOrRegex; - } - const inst = new Class2(def); - return inst; -} -var TimePrecision; -var init_api = __esm(() => { - init_checks(); - init_registries(); - init_schemas(); - init_util(); - TimePrecision = { - Any: null, - Minute: -1, - Second: 0, - Millisecond: 3, - Microsecond: 6 - }; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/to-json-schema.js -function initializeContext(params) { - let target = params?.target ?? "draft-2020-12"; - if (target === "draft-4") - target = "draft-04"; - if (target === "draft-7") - target = "draft-07"; - return { - processors: params.processors ?? {}, - metadataRegistry: params?.metadata ?? globalRegistry, - target, - unrepresentable: params?.unrepresentable ?? "throw", - override: params?.override ?? (() => {}), - io: params?.io ?? "output", - counter: 0, - seen: new Map, - cycles: params?.cycles ?? "ref", - reused: params?.reused ?? "inline", - external: params?.external ?? undefined - }; -} -function process2(schema, ctx, _params = { path: [], schemaPath: [] }) { - var _a2; - const def = schema._zod.def; - const seen = ctx.seen.get(schema); - if (seen) { - seen.count++; - const isCycle = _params.schemaPath.includes(schema); - if (isCycle) { - seen.cycle = _params.path; - } - return seen.schema; - } - const result = { schema: {}, count: 1, cycle: undefined, path: _params.path }; - ctx.seen.set(schema, result); - const overrideSchema = schema._zod.toJSONSchema?.(); - if (overrideSchema) { - result.schema = overrideSchema; - } else { - const params = { - ..._params, - schemaPath: [..._params.schemaPath, schema], - path: _params.path - }; - if (schema._zod.processJSONSchema) { - schema._zod.processJSONSchema(ctx, result.schema, params); - } else { - const _json = result.schema; - const processor = ctx.processors[def.type]; - if (!processor) { - throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`); - } - processor(schema, ctx, _json, params); - } - const parent = schema._zod.parent; - if (parent) { - if (!result.ref) - result.ref = parent; - process2(parent, ctx, params); - ctx.seen.get(parent).isParent = true; - } - } - const meta2 = ctx.metadataRegistry.get(schema); - if (meta2) - Object.assign(result.schema, meta2); - if (ctx.io === "input" && isTransforming(schema)) { - delete result.schema.examples; - delete result.schema.default; - } - if (ctx.io === "input" && result.schema._prefault) - (_a2 = result.schema).default ?? (_a2.default = result.schema._prefault); - delete result.schema._prefault; - const _result = ctx.seen.get(schema); - return _result.schema; -} -function extractDefs(ctx, schema) { - const root = ctx.seen.get(schema); - if (!root) - throw new Error("Unprocessed schema. This is a bug in Zod."); - const idToSchema = new Map; - for (const entry of ctx.seen.entries()) { - const id = ctx.metadataRegistry.get(entry[0])?.id; - if (id) { - const existing = idToSchema.get(id); - if (existing && existing !== entry[0]) { - throw new Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`); - } - idToSchema.set(id, entry[0]); - } - } - const makeURI = (entry) => { - const defsSegment = ctx.target === "draft-2020-12" ? "$defs" : "definitions"; - if (ctx.external) { - const externalId = ctx.external.registry.get(entry[0])?.id; - const uriGenerator = ctx.external.uri ?? ((id2) => id2); - if (externalId) { - return { ref: uriGenerator(externalId) }; - } - const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`; - entry[1].defId = id; - return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` }; - } - if (entry[1] === root) { - return { ref: "#" }; - } - const uriPrefix = `#`; - const defUriPrefix = `${uriPrefix}/${defsSegment}/`; - const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`; - return { defId, ref: defUriPrefix + defId }; - }; - const extractToDef = (entry) => { - if (entry[1].schema.$ref) { - return; - } - const seen = entry[1]; - const { ref, defId } = makeURI(entry); - seen.def = { ...seen.schema }; - if (defId) - seen.defId = defId; - const schema2 = seen.schema; - for (const key in schema2) { - delete schema2[key]; - } - schema2.$ref = ref; - }; - if (ctx.cycles === "throw") { - for (const entry of ctx.seen.entries()) { - const seen = entry[1]; - if (seen.cycle) { - throw new Error("Cycle detected: " + `#/${seen.cycle?.join("/")}/` + '\n\nSet the `cycles` parameter to `"ref"` to resolve cyclical schemas with defs.'); - } - } - } - for (const entry of ctx.seen.entries()) { - const seen = entry[1]; - if (schema === entry[0]) { - extractToDef(entry); - continue; - } - if (ctx.external) { - const ext = ctx.external.registry.get(entry[0])?.id; - if (schema !== entry[0] && ext) { - extractToDef(entry); - continue; - } - } - const id = ctx.metadataRegistry.get(entry[0])?.id; - if (id) { - extractToDef(entry); - continue; - } - if (seen.cycle) { - extractToDef(entry); - continue; - } - if (seen.count > 1) { - if (ctx.reused === "ref") { - extractToDef(entry); - continue; - } - } - } -} -function finalize(ctx, schema) { - const root = ctx.seen.get(schema); - if (!root) - throw new Error("Unprocessed schema. This is a bug in Zod."); - const flattenRef = (zodSchema) => { - const seen = ctx.seen.get(zodSchema); - if (seen.ref === null) - return; - const schema2 = seen.def ?? seen.schema; - const _cached = { ...schema2 }; - const ref = seen.ref; - seen.ref = null; - if (ref) { - flattenRef(ref); - const refSeen = ctx.seen.get(ref); - const refSchema = refSeen.schema; - if (refSchema.$ref && (ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0")) { - schema2.allOf = schema2.allOf ?? []; - schema2.allOf.push(refSchema); - } else { - Object.assign(schema2, refSchema); - } - Object.assign(schema2, _cached); - const isParentRef = zodSchema._zod.parent === ref; - if (isParentRef) { - for (const key in schema2) { - if (key === "$ref" || key === "allOf") - continue; - if (!(key in _cached)) { - delete schema2[key]; - } - } - } - if (refSchema.$ref) { - for (const key in schema2) { - if (key === "$ref" || key === "allOf") - continue; - if (key in refSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(refSeen.def[key])) { - delete schema2[key]; - } - } - } - } - const parent = zodSchema._zod.parent; - if (parent && parent !== ref) { - flattenRef(parent); - const parentSeen = ctx.seen.get(parent); - if (parentSeen?.schema.$ref) { - schema2.$ref = parentSeen.schema.$ref; - if (parentSeen.def) { - for (const key in schema2) { - if (key === "$ref" || key === "allOf") - continue; - if (key in parentSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(parentSeen.def[key])) { - delete schema2[key]; - } - } - } - } - } - ctx.override({ - zodSchema, - jsonSchema: schema2, - path: seen.path ?? [] - }); - }; - for (const entry of [...ctx.seen.entries()].reverse()) { - flattenRef(entry[0]); - } - const result = {}; - if (ctx.target === "draft-2020-12") { - result.$schema = "https://json-schema.org/draft/2020-12/schema"; - } else if (ctx.target === "draft-07") { - result.$schema = "http://json-schema.org/draft-07/schema#"; - } else if (ctx.target === "draft-04") { - result.$schema = "http://json-schema.org/draft-04/schema#"; - } else if (ctx.target === "openapi-3.0") {} else {} - if (ctx.external?.uri) { - const id = ctx.external.registry.get(schema)?.id; - if (!id) - throw new Error("Schema is missing an `id` property"); - result.$id = ctx.external.uri(id); - } - Object.assign(result, root.def ?? root.schema); - const defs = ctx.external?.defs ?? {}; - for (const entry of ctx.seen.entries()) { - const seen = entry[1]; - if (seen.def && seen.defId) { - defs[seen.defId] = seen.def; - } - } - if (ctx.external) {} else { - if (Object.keys(defs).length > 0) { - if (ctx.target === "draft-2020-12") { - result.$defs = defs; - } else { - result.definitions = defs; - } - } - } - try { - const finalized = JSON.parse(JSON.stringify(result)); - Object.defineProperty(finalized, "~standard", { - value: { - ...schema["~standard"], - jsonSchema: { - input: createStandardJSONSchemaMethod(schema, "input", ctx.processors), - output: createStandardJSONSchemaMethod(schema, "output", ctx.processors) - } - }, - enumerable: false, - writable: false - }); - return finalized; - } catch (_err) { - throw new Error("Error converting schema to JSON."); - } -} -function isTransforming(_schema, _ctx) { - const ctx = _ctx ?? { seen: new Set }; - if (ctx.seen.has(_schema)) - return false; - ctx.seen.add(_schema); - const def = _schema._zod.def; - if (def.type === "transform") - return true; - if (def.type === "array") - return isTransforming(def.element, ctx); - if (def.type === "set") - return isTransforming(def.valueType, ctx); - if (def.type === "lazy") - return isTransforming(def.getter(), ctx); - if (def.type === "promise" || def.type === "optional" || def.type === "nonoptional" || def.type === "nullable" || def.type === "readonly" || def.type === "default" || def.type === "prefault") { - return isTransforming(def.innerType, ctx); - } - if (def.type === "intersection") { - return isTransforming(def.left, ctx) || isTransforming(def.right, ctx); - } - if (def.type === "record" || def.type === "map") { - return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx); - } - if (def.type === "pipe") { - return isTransforming(def.in, ctx) || isTransforming(def.out, ctx); - } - if (def.type === "object") { - for (const key in def.shape) { - if (isTransforming(def.shape[key], ctx)) - return true; - } - return false; - } - if (def.type === "union") { - for (const option of def.options) { - if (isTransforming(option, ctx)) - return true; - } - return false; - } - if (def.type === "tuple") { - for (const item of def.items) { - if (isTransforming(item, ctx)) - return true; - } - if (def.rest && isTransforming(def.rest, ctx)) - return true; - return false; - } - return false; -} -var createToJSONSchemaMethod = (schema, processors = {}) => (params) => { - const ctx = initializeContext({ ...params, processors }); - process2(schema, ctx); - extractDefs(ctx, schema); - return finalize(ctx, schema); -}, createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => { - const { libraryOptions, target } = params ?? {}; - const ctx = initializeContext({ ...libraryOptions ?? {}, target, io, processors }); - process2(schema, ctx); - extractDefs(ctx, schema); - return finalize(ctx, schema); -}; -var init_to_json_schema = __esm(() => { - init_registries(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js -function toJSONSchema(input, params) { - if ("_idmap" in input) { - const registry2 = input; - const ctx2 = initializeContext({ ...params, processors: allProcessors }); - const defs = {}; - for (const entry of registry2._idmap.entries()) { - const [_, schema] = entry; - process2(schema, ctx2); - } - const schemas = {}; - const external = { - registry: registry2, - uri: params?.uri, - defs - }; - ctx2.external = external; - for (const entry of registry2._idmap.entries()) { - const [key, schema] = entry; - extractDefs(ctx2, schema); - schemas[key] = finalize(ctx2, schema); - } - if (Object.keys(defs).length > 0) { - const defsSegment = ctx2.target === "draft-2020-12" ? "$defs" : "definitions"; - schemas.__shared = { - [defsSegment]: defs - }; - } - return { schemas }; - } - const ctx = initializeContext({ ...params, processors: allProcessors }); - process2(input, ctx); - extractDefs(ctx, input); - return finalize(ctx, input); -} -var formatMap, stringProcessor = (schema, ctx, _json, _params) => { - const json = _json; - json.type = "string"; - const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag; - if (typeof minimum === "number") - json.minLength = minimum; - if (typeof maximum === "number") - json.maxLength = maximum; - if (format) { - json.format = formatMap[format] ?? format; - if (json.format === "") - delete json.format; - if (format === "time") { - delete json.format; - } - } - if (contentEncoding) - json.contentEncoding = contentEncoding; - if (patterns && patterns.size > 0) { - const regexes = [...patterns]; - if (regexes.length === 1) - json.pattern = regexes[0].source; - else if (regexes.length > 1) { - json.allOf = [ - ...regexes.map((regex) => ({ - ...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {}, - pattern: regex.source - })) - ]; - } - } -}, numberProcessor = (schema, ctx, _json, _params) => { - const json = _json; - const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag; - if (typeof format === "string" && format.includes("int")) - json.type = "integer"; - else - json.type = "number"; - if (typeof exclusiveMinimum === "number") { - if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { - json.minimum = exclusiveMinimum; - json.exclusiveMinimum = true; - } else { - json.exclusiveMinimum = exclusiveMinimum; - } - } - if (typeof minimum === "number") { - json.minimum = minimum; - if (typeof exclusiveMinimum === "number" && ctx.target !== "draft-04") { - if (exclusiveMinimum >= minimum) - delete json.minimum; - else - delete json.exclusiveMinimum; - } - } - if (typeof exclusiveMaximum === "number") { - if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { - json.maximum = exclusiveMaximum; - json.exclusiveMaximum = true; - } else { - json.exclusiveMaximum = exclusiveMaximum; - } - } - if (typeof maximum === "number") { - json.maximum = maximum; - if (typeof exclusiveMaximum === "number" && ctx.target !== "draft-04") { - if (exclusiveMaximum <= maximum) - delete json.maximum; - else - delete json.exclusiveMaximum; - } - } - if (typeof multipleOf === "number") - json.multipleOf = multipleOf; -}, booleanProcessor = (_schema, _ctx, json, _params) => { - json.type = "boolean"; -}, bigintProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("BigInt cannot be represented in JSON Schema"); - } -}, symbolProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Symbols cannot be represented in JSON Schema"); - } -}, nullProcessor = (_schema, ctx, json, _params) => { - if (ctx.target === "openapi-3.0") { - json.type = "string"; - json.nullable = true; - json.enum = [null]; - } else { - json.type = "null"; - } -}, undefinedProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Undefined cannot be represented in JSON Schema"); - } -}, voidProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Void cannot be represented in JSON Schema"); - } -}, neverProcessor = (_schema, _ctx, json, _params) => { - json.not = {}; -}, anyProcessor = (_schema, _ctx, _json, _params) => {}, unknownProcessor = (_schema, _ctx, _json, _params) => {}, dateProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Date cannot be represented in JSON Schema"); - } -}, enumProcessor = (schema, _ctx, json, _params) => { - const def = schema._zod.def; - const values = getEnumValues(def.entries); - if (values.every((v) => typeof v === "number")) - json.type = "number"; - if (values.every((v) => typeof v === "string")) - json.type = "string"; - json.enum = values; -}, literalProcessor = (schema, ctx, json, _params) => { - const def = schema._zod.def; - const vals = []; - for (const val of def.values) { - if (val === undefined) { - if (ctx.unrepresentable === "throw") { - throw new Error("Literal `undefined` cannot be represented in JSON Schema"); - } else {} - } else if (typeof val === "bigint") { - if (ctx.unrepresentable === "throw") { - throw new Error("BigInt literals cannot be represented in JSON Schema"); - } else { - vals.push(Number(val)); - } - } else { - vals.push(val); - } - } - if (vals.length === 0) {} else if (vals.length === 1) { - const val = vals[0]; - json.type = val === null ? "null" : typeof val; - if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { - json.enum = [val]; - } else { - json.const = val; - } - } else { - if (vals.every((v) => typeof v === "number")) - json.type = "number"; - if (vals.every((v) => typeof v === "string")) - json.type = "string"; - if (vals.every((v) => typeof v === "boolean")) - json.type = "boolean"; - if (vals.every((v) => v === null)) - json.type = "null"; - json.enum = vals; - } -}, nanProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("NaN cannot be represented in JSON Schema"); - } -}, templateLiteralProcessor = (schema, _ctx, json, _params) => { - const _json = json; - const pattern = schema._zod.pattern; - if (!pattern) - throw new Error("Pattern not found in template literal"); - _json.type = "string"; - _json.pattern = pattern.source; -}, fileProcessor = (schema, _ctx, json, _params) => { - const _json = json; - const file = { - type: "string", - format: "binary", - contentEncoding: "binary" - }; - const { minimum, maximum, mime } = schema._zod.bag; - if (minimum !== undefined) - file.minLength = minimum; - if (maximum !== undefined) - file.maxLength = maximum; - if (mime) { - if (mime.length === 1) { - file.contentMediaType = mime[0]; - Object.assign(_json, file); - } else { - Object.assign(_json, file); - _json.anyOf = mime.map((m) => ({ contentMediaType: m })); - } - } else { - Object.assign(_json, file); - } -}, successProcessor = (_schema, _ctx, json, _params) => { - json.type = "boolean"; -}, customProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Custom types cannot be represented in JSON Schema"); - } -}, functionProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Function types cannot be represented in JSON Schema"); - } -}, transformProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Transforms cannot be represented in JSON Schema"); - } -}, mapProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Map cannot be represented in JSON Schema"); - } -}, setProcessor = (_schema, ctx, _json, _params) => { - if (ctx.unrepresentable === "throw") { - throw new Error("Set cannot be represented in JSON Schema"); - } -}, arrayProcessor = (schema, ctx, _json, params) => { - const json = _json; - const def = schema._zod.def; - const { minimum, maximum } = schema._zod.bag; - if (typeof minimum === "number") - json.minItems = minimum; - if (typeof maximum === "number") - json.maxItems = maximum; - json.type = "array"; - json.items = process2(def.element, ctx, { ...params, path: [...params.path, "items"] }); -}, objectProcessor = (schema, ctx, _json, params) => { - const json = _json; - const def = schema._zod.def; - json.type = "object"; - json.properties = {}; - const shape = def.shape; - for (const key in shape) { - json.properties[key] = process2(shape[key], ctx, { - ...params, - path: [...params.path, "properties", key] - }); - } - const allKeys = new Set(Object.keys(shape)); - const requiredKeys = new Set([...allKeys].filter((key) => { - const v = def.shape[key]._zod; - if (ctx.io === "input") { - return v.optin === undefined; - } else { - return v.optout === undefined; - } - })); - if (requiredKeys.size > 0) { - json.required = Array.from(requiredKeys); - } - if (def.catchall?._zod.def.type === "never") { - json.additionalProperties = false; - } else if (!def.catchall) { - if (ctx.io === "output") - json.additionalProperties = false; - } else if (def.catchall) { - json.additionalProperties = process2(def.catchall, ctx, { - ...params, - path: [...params.path, "additionalProperties"] - }); - } -}, unionProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - const isExclusive = def.inclusive === false; - const options = def.options.map((x, i) => process2(x, ctx, { - ...params, - path: [...params.path, isExclusive ? "oneOf" : "anyOf", i] - })); - if (isExclusive) { - json.oneOf = options; - } else { - json.anyOf = options; - } -}, intersectionProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - const a = process2(def.left, ctx, { - ...params, - path: [...params.path, "allOf", 0] - }); - const b = process2(def.right, ctx, { - ...params, - path: [...params.path, "allOf", 1] - }); - const isSimpleIntersection = (val) => ("allOf" in val) && Object.keys(val).length === 1; - const allOf = [ - ...isSimpleIntersection(a) ? a.allOf : [a], - ...isSimpleIntersection(b) ? b.allOf : [b] - ]; - json.allOf = allOf; -}, tupleProcessor = (schema, ctx, _json, params) => { - const json = _json; - const def = schema._zod.def; - json.type = "array"; - const prefixPath = ctx.target === "draft-2020-12" ? "prefixItems" : "items"; - const restPath = ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems"; - const prefixItems = def.items.map((x, i) => process2(x, ctx, { - ...params, - path: [...params.path, prefixPath, i] - })); - const rest = def.rest ? process2(def.rest, ctx, { - ...params, - path: [...params.path, restPath, ...ctx.target === "openapi-3.0" ? [def.items.length] : []] - }) : null; - if (ctx.target === "draft-2020-12") { - json.prefixItems = prefixItems; - if (rest) { - json.items = rest; - } - } else if (ctx.target === "openapi-3.0") { - json.items = { - anyOf: prefixItems - }; - if (rest) { - json.items.anyOf.push(rest); - } - json.minItems = prefixItems.length; - if (!rest) { - json.maxItems = prefixItems.length; - } - } else { - json.items = prefixItems; - if (rest) { - json.additionalItems = rest; - } - } - const { minimum, maximum } = schema._zod.bag; - if (typeof minimum === "number") - json.minItems = minimum; - if (typeof maximum === "number") - json.maxItems = maximum; -}, recordProcessor = (schema, ctx, _json, params) => { - const json = _json; - const def = schema._zod.def; - json.type = "object"; - const keyType = def.keyType; - const keyBag = keyType._zod.bag; - const patterns = keyBag?.patterns; - if (def.mode === "loose" && patterns && patterns.size > 0) { - const valueSchema = process2(def.valueType, ctx, { - ...params, - path: [...params.path, "patternProperties", "*"] - }); - json.patternProperties = {}; - for (const pattern of patterns) { - json.patternProperties[pattern.source] = valueSchema; - } - } else { - if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") { - json.propertyNames = process2(def.keyType, ctx, { - ...params, - path: [...params.path, "propertyNames"] - }); - } - json.additionalProperties = process2(def.valueType, ctx, { - ...params, - path: [...params.path, "additionalProperties"] - }); - } - const keyValues = keyType._zod.values; - if (keyValues) { - const validKeyValues = [...keyValues].filter((v) => typeof v === "string" || typeof v === "number"); - if (validKeyValues.length > 0) { - json.required = validKeyValues; - } - } -}, nullableProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - const inner = process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - if (ctx.target === "openapi-3.0") { - seen.ref = def.innerType; - json.nullable = true; - } else { - json.anyOf = [inner, { type: "null" }]; - } -}, nonoptionalProcessor = (schema, ctx, _json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; -}, defaultProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; - json.default = JSON.parse(JSON.stringify(def.defaultValue)); -}, prefaultProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; - if (ctx.io === "input") - json._prefault = JSON.parse(JSON.stringify(def.defaultValue)); -}, catchProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; - let catchValue; - try { - catchValue = def.catchValue(undefined); - } catch { - throw new Error("Dynamic catch values are not supported in JSON Schema"); - } - json.default = catchValue; -}, pipeProcessor = (schema, ctx, _json, params) => { - const def = schema._zod.def; - const innerType = ctx.io === "input" ? def.in._zod.def.type === "transform" ? def.out : def.in : def.out; - process2(innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = innerType; -}, readonlyProcessor = (schema, ctx, json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; - json.readOnly = true; -}, promiseProcessor = (schema, ctx, _json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; -}, optionalProcessor = (schema, ctx, _json, params) => { - const def = schema._zod.def; - process2(def.innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = def.innerType; -}, lazyProcessor = (schema, ctx, _json, params) => { - const innerType = schema._zod.innerType; - process2(innerType, ctx, params); - const seen = ctx.seen.get(schema); - seen.ref = innerType; -}, allProcessors; -var init_json_schema_processors = __esm(() => { - init_to_json_schema(); - init_util(); - formatMap = { - guid: "uuid", - url: "uri", - datetime: "date-time", - json_string: "json-string", - regex: "" - }; - allProcessors = { - string: stringProcessor, - number: numberProcessor, - boolean: booleanProcessor, - bigint: bigintProcessor, - symbol: symbolProcessor, - null: nullProcessor, - undefined: undefinedProcessor, - void: voidProcessor, - never: neverProcessor, - any: anyProcessor, - unknown: unknownProcessor, - date: dateProcessor, - enum: enumProcessor, - literal: literalProcessor, - nan: nanProcessor, - template_literal: templateLiteralProcessor, - file: fileProcessor, - success: successProcessor, - custom: customProcessor, - function: functionProcessor, - transform: transformProcessor, - map: mapProcessor, - set: setProcessor, - array: arrayProcessor, - object: objectProcessor, - union: unionProcessor, - intersection: intersectionProcessor, - tuple: tupleProcessor, - record: recordProcessor, - nullable: nullableProcessor, - nonoptional: nonoptionalProcessor, - default: defaultProcessor, - prefault: prefaultProcessor, - catch: catchProcessor, - pipe: pipeProcessor, - readonly: readonlyProcessor, - promise: promiseProcessor, - optional: optionalProcessor, - lazy: lazyProcessor - }; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/json-schema-generator.js -class JSONSchemaGenerator { - get metadataRegistry() { - return this.ctx.metadataRegistry; - } - get target() { - return this.ctx.target; - } - get unrepresentable() { - return this.ctx.unrepresentable; - } - get override() { - return this.ctx.override; - } - get io() { - return this.ctx.io; - } - get counter() { - return this.ctx.counter; - } - set counter(value) { - this.ctx.counter = value; - } - get seen() { - return this.ctx.seen; - } - constructor(params) { - let normalizedTarget = params?.target ?? "draft-2020-12"; - if (normalizedTarget === "draft-4") - normalizedTarget = "draft-04"; - if (normalizedTarget === "draft-7") - normalizedTarget = "draft-07"; - this.ctx = initializeContext({ - processors: allProcessors, - target: normalizedTarget, - ...params?.metadata && { metadata: params.metadata }, - ...params?.unrepresentable && { unrepresentable: params.unrepresentable }, - ...params?.override && { override: params.override }, - ...params?.io && { io: params.io } - }); - } - process(schema, _params = { path: [], schemaPath: [] }) { - return process2(schema, this.ctx, _params); - } - emit(schema, _params) { - if (_params) { - if (_params.cycles) - this.ctx.cycles = _params.cycles; - if (_params.reused) - this.ctx.reused = _params.reused; - if (_params.external) - this.ctx.external = _params.external; - } - extractDefs(this.ctx, schema); - const result = finalize(this.ctx, schema); - const { "~standard": _, ...plainResult } = result; - return plainResult; - } -} -var init_json_schema_generator = __esm(() => { - init_json_schema_processors(); - init_to_json_schema(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/json-schema.js -var exports_json_schema = {}; -var init_json_schema = () => {}; - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/core/index.js -var exports_core2 = {}; -__export(exports_core2, { - version: () => version, - util: () => exports_util, - treeifyError: () => treeifyError, - toJSONSchema: () => toJSONSchema, - toDotPath: () => toDotPath, - safeParseAsync: () => safeParseAsync, - safeParse: () => safeParse, - safeEncodeAsync: () => safeEncodeAsync, - safeEncode: () => safeEncode, - safeDecodeAsync: () => safeDecodeAsync, - safeDecode: () => safeDecode, - registry: () => registry, - regexes: () => exports_regexes, - process: () => process2, - prettifyError: () => prettifyError, - parseAsync: () => parseAsync, - parse: () => parse, - meta: () => meta, - locales: () => exports_locales, - isValidJWT: () => isValidJWT, - isValidBase64URL: () => isValidBase64URL, - isValidBase64: () => isValidBase64, - initializeContext: () => initializeContext, - globalRegistry: () => globalRegistry, - globalConfig: () => globalConfig, - formatError: () => formatError, - flattenError: () => flattenError, - finalize: () => finalize, - extractDefs: () => extractDefs, - encodeAsync: () => encodeAsync, - encode: () => encode, - describe: () => describe, - decodeAsync: () => decodeAsync, - decode: () => decode, - createToJSONSchemaMethod: () => createToJSONSchemaMethod, - createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod, - config: () => config, - clone: () => clone, - _xor: () => _xor, - _xid: () => _xid, - _void: () => _void, - _uuidv7: () => _uuidv7, - _uuidv6: () => _uuidv6, - _uuidv4: () => _uuidv4, - _uuid: () => _uuid, - _url: () => _url, - _uppercase: () => _uppercase, - _unknown: () => _unknown, - _union: () => _union, - _undefined: () => _undefined2, - _ulid: () => _ulid, - _uint64: () => _uint64, - _uint32: () => _uint32, - _tuple: () => _tuple, - _trim: () => _trim, - _transform: () => _transform, - _toUpperCase: () => _toUpperCase, - _toLowerCase: () => _toLowerCase, - _templateLiteral: () => _templateLiteral, - _symbol: () => _symbol, - _superRefine: () => _superRefine, - _success: () => _success, - _stringbool: () => _stringbool, - _stringFormat: () => _stringFormat, - _string: () => _string, - _startsWith: () => _startsWith, - _slugify: () => _slugify, - _size: () => _size, - _set: () => _set, - _safeParseAsync: () => _safeParseAsync, - _safeParse: () => _safeParse, - _safeEncodeAsync: () => _safeEncodeAsync, - _safeEncode: () => _safeEncode, - _safeDecodeAsync: () => _safeDecodeAsync, - _safeDecode: () => _safeDecode, - _regex: () => _regex, - _refine: () => _refine, - _record: () => _record, - _readonly: () => _readonly, - _property: () => _property, - _promise: () => _promise, - _positive: () => _positive, - _pipe: () => _pipe, - _parseAsync: () => _parseAsync, - _parse: () => _parse, - _overwrite: () => _overwrite, - _optional: () => _optional, - _number: () => _number, - _nullable: () => _nullable, - _null: () => _null2, - _normalize: () => _normalize, - _nonpositive: () => _nonpositive, - _nonoptional: () => _nonoptional, - _nonnegative: () => _nonnegative, - _never: () => _never, - _negative: () => _negative, - _nativeEnum: () => _nativeEnum, - _nanoid: () => _nanoid, - _nan: () => _nan, - _multipleOf: () => _multipleOf, - _minSize: () => _minSize, - _minLength: () => _minLength, - _min: () => _gte, - _mime: () => _mime, - _maxSize: () => _maxSize, - _maxLength: () => _maxLength, - _max: () => _lte, - _map: () => _map, - _mac: () => _mac, - _lte: () => _lte, - _lt: () => _lt, - _lowercase: () => _lowercase, - _literal: () => _literal, - _length: () => _length, - _lazy: () => _lazy, - _ksuid: () => _ksuid, - _jwt: () => _jwt, - _isoTime: () => _isoTime, - _isoDuration: () => _isoDuration, - _isoDateTime: () => _isoDateTime, - _isoDate: () => _isoDate, - _ipv6: () => _ipv6, - _ipv4: () => _ipv4, - _intersection: () => _intersection, - _int64: () => _int64, - _int32: () => _int32, - _int: () => _int, - _includes: () => _includes, - _guid: () => _guid, - _gte: () => _gte, - _gt: () => _gt, - _float64: () => _float64, - _float32: () => _float32, - _file: () => _file, - _enum: () => _enum, - _endsWith: () => _endsWith, - _encodeAsync: () => _encodeAsync, - _encode: () => _encode, - _emoji: () => _emoji2, - _email: () => _email, - _e164: () => _e164, - _discriminatedUnion: () => _discriminatedUnion, - _default: () => _default, - _decodeAsync: () => _decodeAsync, - _decode: () => _decode, - _date: () => _date, - _custom: () => _custom, - _cuid2: () => _cuid2, - _cuid: () => _cuid, - _coercedString: () => _coercedString, - _coercedNumber: () => _coercedNumber, - _coercedDate: () => _coercedDate, - _coercedBoolean: () => _coercedBoolean, - _coercedBigint: () => _coercedBigint, - _cidrv6: () => _cidrv6, - _cidrv4: () => _cidrv4, - _check: () => _check, - _catch: () => _catch, - _boolean: () => _boolean, - _bigint: () => _bigint, - _base64url: () => _base64url, - _base64: () => _base64, - _array: () => _array, - _any: () => _any, - TimePrecision: () => TimePrecision, - NEVER: () => NEVER, - JSONSchemaGenerator: () => JSONSchemaGenerator, - JSONSchema: () => exports_json_schema, - Doc: () => Doc, - $output: () => $output, - $input: () => $input, - $constructor: () => $constructor, - $brand: () => $brand, - $ZodXor: () => $ZodXor, - $ZodXID: () => $ZodXID, - $ZodVoid: () => $ZodVoid, - $ZodUnknown: () => $ZodUnknown, - $ZodUnion: () => $ZodUnion, - $ZodUndefined: () => $ZodUndefined, - $ZodUUID: () => $ZodUUID, - $ZodURL: () => $ZodURL, - $ZodULID: () => $ZodULID, - $ZodType: () => $ZodType, - $ZodTuple: () => $ZodTuple, - $ZodTransform: () => $ZodTransform, - $ZodTemplateLiteral: () => $ZodTemplateLiteral, - $ZodSymbol: () => $ZodSymbol, - $ZodSuccess: () => $ZodSuccess, - $ZodStringFormat: () => $ZodStringFormat, - $ZodString: () => $ZodString, - $ZodSet: () => $ZodSet, - $ZodRegistry: () => $ZodRegistry, - $ZodRecord: () => $ZodRecord, - $ZodRealError: () => $ZodRealError, - $ZodReadonly: () => $ZodReadonly, - $ZodPromise: () => $ZodPromise, - $ZodPrefault: () => $ZodPrefault, - $ZodPipe: () => $ZodPipe, - $ZodOptional: () => $ZodOptional, - $ZodObjectJIT: () => $ZodObjectJIT, - $ZodObject: () => $ZodObject, - $ZodNumberFormat: () => $ZodNumberFormat, - $ZodNumber: () => $ZodNumber, - $ZodNullable: () => $ZodNullable, - $ZodNull: () => $ZodNull, - $ZodNonOptional: () => $ZodNonOptional, - $ZodNever: () => $ZodNever, - $ZodNanoID: () => $ZodNanoID, - $ZodNaN: () => $ZodNaN, - $ZodMap: () => $ZodMap, - $ZodMAC: () => $ZodMAC, - $ZodLiteral: () => $ZodLiteral, - $ZodLazy: () => $ZodLazy, - $ZodKSUID: () => $ZodKSUID, - $ZodJWT: () => $ZodJWT, - $ZodIntersection: () => $ZodIntersection, - $ZodISOTime: () => $ZodISOTime, - $ZodISODuration: () => $ZodISODuration, - $ZodISODateTime: () => $ZodISODateTime, - $ZodISODate: () => $ZodISODate, - $ZodIPv6: () => $ZodIPv6, - $ZodIPv4: () => $ZodIPv4, - $ZodGUID: () => $ZodGUID, - $ZodFunction: () => $ZodFunction, - $ZodFile: () => $ZodFile, - $ZodExactOptional: () => $ZodExactOptional, - $ZodError: () => $ZodError, - $ZodEnum: () => $ZodEnum, - $ZodEncodeError: () => $ZodEncodeError, - $ZodEmoji: () => $ZodEmoji, - $ZodEmail: () => $ZodEmail, - $ZodE164: () => $ZodE164, - $ZodDiscriminatedUnion: () => $ZodDiscriminatedUnion, - $ZodDefault: () => $ZodDefault, - $ZodDate: () => $ZodDate, - $ZodCustomStringFormat: () => $ZodCustomStringFormat, - $ZodCustom: () => $ZodCustom, - $ZodCodec: () => $ZodCodec, - $ZodCheckUpperCase: () => $ZodCheckUpperCase, - $ZodCheckStringFormat: () => $ZodCheckStringFormat, - $ZodCheckStartsWith: () => $ZodCheckStartsWith, - $ZodCheckSizeEquals: () => $ZodCheckSizeEquals, - $ZodCheckRegex: () => $ZodCheckRegex, - $ZodCheckProperty: () => $ZodCheckProperty, - $ZodCheckOverwrite: () => $ZodCheckOverwrite, - $ZodCheckNumberFormat: () => $ZodCheckNumberFormat, - $ZodCheckMultipleOf: () => $ZodCheckMultipleOf, - $ZodCheckMinSize: () => $ZodCheckMinSize, - $ZodCheckMinLength: () => $ZodCheckMinLength, - $ZodCheckMimeType: () => $ZodCheckMimeType, - $ZodCheckMaxSize: () => $ZodCheckMaxSize, - $ZodCheckMaxLength: () => $ZodCheckMaxLength, - $ZodCheckLowerCase: () => $ZodCheckLowerCase, - $ZodCheckLessThan: () => $ZodCheckLessThan, - $ZodCheckLengthEquals: () => $ZodCheckLengthEquals, - $ZodCheckIncludes: () => $ZodCheckIncludes, - $ZodCheckGreaterThan: () => $ZodCheckGreaterThan, - $ZodCheckEndsWith: () => $ZodCheckEndsWith, - $ZodCheckBigIntFormat: () => $ZodCheckBigIntFormat, - $ZodCheck: () => $ZodCheck, - $ZodCatch: () => $ZodCatch, - $ZodCUID2: () => $ZodCUID2, - $ZodCUID: () => $ZodCUID, - $ZodCIDRv6: () => $ZodCIDRv6, - $ZodCIDRv4: () => $ZodCIDRv4, - $ZodBoolean: () => $ZodBoolean, - $ZodBigIntFormat: () => $ZodBigIntFormat, - $ZodBigInt: () => $ZodBigInt, - $ZodBase64URL: () => $ZodBase64URL, - $ZodBase64: () => $ZodBase64, - $ZodAsyncError: () => $ZodAsyncError, - $ZodArray: () => $ZodArray, - $ZodAny: () => $ZodAny -}); -var init_core2 = __esm(() => { - init_util(); - init_regexes(); - init_locales(); - init_json_schema_processors(); - init_json_schema_generator(); - init_json_schema(); - init_core(); - init_parse(); - init_errors(); - init_schemas(); - init_checks(); - init_versions(); - init_registries(); - init_api(); - init_to_json_schema(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/checks.js -var exports_checks2 = {}; -__export(exports_checks2, { - uppercase: () => _uppercase, - trim: () => _trim, - toUpperCase: () => _toUpperCase, - toLowerCase: () => _toLowerCase, - startsWith: () => _startsWith, - slugify: () => _slugify, - size: () => _size, - regex: () => _regex, - property: () => _property, - positive: () => _positive, - overwrite: () => _overwrite, - normalize: () => _normalize, - nonpositive: () => _nonpositive, - nonnegative: () => _nonnegative, - negative: () => _negative, - multipleOf: () => _multipleOf, - minSize: () => _minSize, - minLength: () => _minLength, - mime: () => _mime, - maxSize: () => _maxSize, - maxLength: () => _maxLength, - lte: () => _lte, - lt: () => _lt, - lowercase: () => _lowercase, - length: () => _length, - includes: () => _includes, - gte: () => _gte, - gt: () => _gt, - endsWith: () => _endsWith -}); -var init_checks2 = __esm(() => { - init_core2(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/iso.js -var exports_iso = {}; -__export(exports_iso, { - time: () => time2, - duration: () => duration2, - datetime: () => datetime2, - date: () => date2, - ZodISOTime: () => ZodISOTime, - ZodISODuration: () => ZodISODuration, - ZodISODateTime: () => ZodISODateTime, - ZodISODate: () => ZodISODate -}); -function datetime2(params) { - return _isoDateTime(ZodISODateTime, params); -} -function date2(params) { - return _isoDate(ZodISODate, params); -} -function time2(params) { - return _isoTime(ZodISOTime, params); -} -function duration2(params) { - return _isoDuration(ZodISODuration, params); -} -var ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration; -var init_iso = __esm(() => { - init_core2(); - init_schemas2(); - ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => { - $ZodISODateTime.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => { - $ZodISODate.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => { - $ZodISOTime.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => { - $ZodISODuration.init(inst, def); - ZodStringFormat.init(inst, def); - }); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/errors.js -var initializer2 = (inst, issues) => { - $ZodError.init(inst, issues); - inst.name = "ZodError"; - Object.defineProperties(inst, { - format: { - value: (mapper) => formatError(inst, mapper) - }, - flatten: { - value: (mapper) => flattenError(inst, mapper) - }, - addIssue: { - value: (issue2) => { - inst.issues.push(issue2); - inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); - } - }, - addIssues: { - value: (issues2) => { - inst.issues.push(...issues2); - inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); - } - }, - isEmpty: { - get() { - return inst.issues.length === 0; - } - } - }); -}, ZodError, ZodRealError; -var init_errors2 = __esm(() => { - init_core2(); - init_core2(); - init_util(); - ZodError = $constructor("ZodError", initializer2); - ZodRealError = $constructor("ZodError", initializer2, { - Parent: Error - }); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/parse.js -var parse3, parseAsync2, safeParse2, safeParseAsync2, encode2, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2; -var init_parse2 = __esm(() => { - init_core2(); - init_errors2(); - parse3 = /* @__PURE__ */ _parse(ZodRealError); - parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); - safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError); - safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError); - encode2 = /* @__PURE__ */ _encode(ZodRealError); - decode2 = /* @__PURE__ */ _decode(ZodRealError); - encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError); - decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError); - safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError); - safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); - safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); - safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/schemas.js -var exports_schemas2 = {}; -__export(exports_schemas2, { - xor: () => xor, - xid: () => xid2, - void: () => _void2, - uuidv7: () => uuidv7, - uuidv6: () => uuidv6, - uuidv4: () => uuidv4, - uuid: () => uuid2, - url: () => url, - unknown: () => unknown, - union: () => union, - undefined: () => _undefined3, - ulid: () => ulid2, - uint64: () => uint64, - uint32: () => uint32, - tuple: () => tuple, - transform: () => transform, - templateLiteral: () => templateLiteral, - symbol: () => symbol, - superRefine: () => superRefine, - success: () => success, - stringbool: () => stringbool, - stringFormat: () => stringFormat, - string: () => string2, - strictObject: () => strictObject, - set: () => set, - refine: () => refine, - record: () => record, - readonly: () => readonly, - promise: () => promise, - preprocess: () => preprocess, - prefault: () => prefault, - pipe: () => pipe, - partialRecord: () => partialRecord, - optional: () => optional, - object: () => object, - number: () => number2, - nullish: () => nullish2, - nullable: () => nullable, - null: () => _null3, - nonoptional: () => nonoptional, - never: () => never, - nativeEnum: () => nativeEnum, - nanoid: () => nanoid2, - nan: () => nan, - meta: () => meta2, - map: () => map, - mac: () => mac2, - looseRecord: () => looseRecord, - looseObject: () => looseObject, - literal: () => literal, - lazy: () => lazy, - ksuid: () => ksuid2, - keyof: () => keyof, - jwt: () => jwt, - json: () => json, - ipv6: () => ipv62, - ipv4: () => ipv42, - intersection: () => intersection, - int64: () => int64, - int32: () => int32, - int: () => int, - instanceof: () => _instanceof, - httpUrl: () => httpUrl, - hostname: () => hostname2, - hex: () => hex2, - hash: () => hash, - guid: () => guid2, - function: () => _function, - float64: () => float64, - float32: () => float32, - file: () => file, - exactOptional: () => exactOptional, - enum: () => _enum2, - emoji: () => emoji2, - email: () => email2, - e164: () => e1642, - discriminatedUnion: () => discriminatedUnion, - describe: () => describe2, - date: () => date3, - custom: () => custom, - cuid2: () => cuid22, - cuid: () => cuid3, - codec: () => codec, - cidrv6: () => cidrv62, - cidrv4: () => cidrv42, - check: () => check, - catch: () => _catch2, - boolean: () => boolean2, - bigint: () => bigint2, - base64url: () => base64url2, - base64: () => base642, - array: () => array, - any: () => any, - _function: () => _function, - _default: () => _default2, - _ZodString: () => _ZodString, - ZodXor: () => ZodXor, - ZodXID: () => ZodXID, - ZodVoid: () => ZodVoid, - ZodUnknown: () => ZodUnknown, - ZodUnion: () => ZodUnion, - ZodUndefined: () => ZodUndefined, - ZodUUID: () => ZodUUID, - ZodURL: () => ZodURL, - ZodULID: () => ZodULID, - ZodType: () => ZodType, - ZodTuple: () => ZodTuple, - ZodTransform: () => ZodTransform, - ZodTemplateLiteral: () => ZodTemplateLiteral, - ZodSymbol: () => ZodSymbol, - ZodSuccess: () => ZodSuccess, - ZodStringFormat: () => ZodStringFormat, - ZodString: () => ZodString, - ZodSet: () => ZodSet, - ZodRecord: () => ZodRecord, - ZodReadonly: () => ZodReadonly, - ZodPromise: () => ZodPromise, - ZodPrefault: () => ZodPrefault, - ZodPipe: () => ZodPipe, - ZodOptional: () => ZodOptional, - ZodObject: () => ZodObject, - ZodNumberFormat: () => ZodNumberFormat, - ZodNumber: () => ZodNumber, - ZodNullable: () => ZodNullable, - ZodNull: () => ZodNull, - ZodNonOptional: () => ZodNonOptional, - ZodNever: () => ZodNever, - ZodNanoID: () => ZodNanoID, - ZodNaN: () => ZodNaN, - ZodMap: () => ZodMap, - ZodMAC: () => ZodMAC, - ZodLiteral: () => ZodLiteral, - ZodLazy: () => ZodLazy, - ZodKSUID: () => ZodKSUID, - ZodJWT: () => ZodJWT, - ZodIntersection: () => ZodIntersection, - ZodIPv6: () => ZodIPv6, - ZodIPv4: () => ZodIPv4, - ZodGUID: () => ZodGUID, - ZodFunction: () => ZodFunction, - ZodFile: () => ZodFile, - ZodExactOptional: () => ZodExactOptional, - ZodEnum: () => ZodEnum, - ZodEmoji: () => ZodEmoji, - ZodEmail: () => ZodEmail, - ZodE164: () => ZodE164, - ZodDiscriminatedUnion: () => ZodDiscriminatedUnion, - ZodDefault: () => ZodDefault, - ZodDate: () => ZodDate, - ZodCustomStringFormat: () => ZodCustomStringFormat, - ZodCustom: () => ZodCustom, - ZodCodec: () => ZodCodec, - ZodCatch: () => ZodCatch, - ZodCUID2: () => ZodCUID2, - ZodCUID: () => ZodCUID, - ZodCIDRv6: () => ZodCIDRv6, - ZodCIDRv4: () => ZodCIDRv4, - ZodBoolean: () => ZodBoolean, - ZodBigIntFormat: () => ZodBigIntFormat, - ZodBigInt: () => ZodBigInt, - ZodBase64URL: () => ZodBase64URL, - ZodBase64: () => ZodBase64, - ZodArray: () => ZodArray, - ZodAny: () => ZodAny -}); -function string2(params) { - return _string(ZodString, params); -} -function email2(params) { - return _email(ZodEmail, params); -} -function guid2(params) { - return _guid(ZodGUID, params); -} -function uuid2(params) { - return _uuid(ZodUUID, params); -} -function uuidv4(params) { - return _uuidv4(ZodUUID, params); -} -function uuidv6(params) { - return _uuidv6(ZodUUID, params); -} -function uuidv7(params) { - return _uuidv7(ZodUUID, params); -} -function url(params) { - return _url(ZodURL, params); -} -function httpUrl(params) { - return _url(ZodURL, { - protocol: /^https?$/, - hostname: exports_regexes.domain, - ...exports_util.normalizeParams(params) - }); -} -function emoji2(params) { - return _emoji2(ZodEmoji, params); -} -function nanoid2(params) { - return _nanoid(ZodNanoID, params); -} -function cuid3(params) { - return _cuid(ZodCUID, params); -} -function cuid22(params) { - return _cuid2(ZodCUID2, params); -} -function ulid2(params) { - return _ulid(ZodULID, params); -} -function xid2(params) { - return _xid(ZodXID, params); -} -function ksuid2(params) { - return _ksuid(ZodKSUID, params); -} -function ipv42(params) { - return _ipv4(ZodIPv4, params); -} -function mac2(params) { - return _mac(ZodMAC, params); -} -function ipv62(params) { - return _ipv6(ZodIPv6, params); -} -function cidrv42(params) { - return _cidrv4(ZodCIDRv4, params); -} -function cidrv62(params) { - return _cidrv6(ZodCIDRv6, params); -} -function base642(params) { - return _base64(ZodBase64, params); -} -function base64url2(params) { - return _base64url(ZodBase64URL, params); -} -function e1642(params) { - return _e164(ZodE164, params); -} -function jwt(params) { - return _jwt(ZodJWT, params); -} -function stringFormat(format, fnOrRegex, _params = {}) { - return _stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params); -} -function hostname2(_params) { - return _stringFormat(ZodCustomStringFormat, "hostname", exports_regexes.hostname, _params); -} -function hex2(_params) { - return _stringFormat(ZodCustomStringFormat, "hex", exports_regexes.hex, _params); -} -function hash(alg, params) { - const enc = params?.enc ?? "hex"; - const format = `${alg}_${enc}`; - const regex = exports_regexes[format]; - if (!regex) - throw new Error(`Unrecognized hash format: ${format}`); - return _stringFormat(ZodCustomStringFormat, format, regex, params); -} -function number2(params) { - return _number(ZodNumber, params); -} -function int(params) { - return _int(ZodNumberFormat, params); -} -function float32(params) { - return _float32(ZodNumberFormat, params); -} -function float64(params) { - return _float64(ZodNumberFormat, params); -} -function int32(params) { - return _int32(ZodNumberFormat, params); -} -function uint32(params) { - return _uint32(ZodNumberFormat, params); -} -function boolean2(params) { - return _boolean(ZodBoolean, params); -} -function bigint2(params) { - return _bigint(ZodBigInt, params); -} -function int64(params) { - return _int64(ZodBigIntFormat, params); -} -function uint64(params) { - return _uint64(ZodBigIntFormat, params); -} -function symbol(params) { - return _symbol(ZodSymbol, params); -} -function _undefined3(params) { - return _undefined2(ZodUndefined, params); -} -function _null3(params) { - return _null2(ZodNull, params); -} -function any() { - return _any(ZodAny); -} -function unknown() { - return _unknown(ZodUnknown); -} -function never(params) { - return _never(ZodNever, params); -} -function _void2(params) { - return _void(ZodVoid, params); -} -function date3(params) { - return _date(ZodDate, params); -} -function array(element, params) { - return _array(ZodArray, element, params); -} -function keyof(schema) { - const shape = schema._zod.def.shape; - return _enum2(Object.keys(shape)); -} -function object(shape, params) { - const def = { - type: "object", - shape: shape ?? {}, - ...exports_util.normalizeParams(params) - }; - return new ZodObject(def); -} -function strictObject(shape, params) { - return new ZodObject({ - type: "object", - shape, - catchall: never(), - ...exports_util.normalizeParams(params) - }); -} -function looseObject(shape, params) { - return new ZodObject({ - type: "object", - shape, - catchall: unknown(), - ...exports_util.normalizeParams(params) - }); -} -function union(options, params) { - return new ZodUnion({ - type: "union", - options, - ...exports_util.normalizeParams(params) - }); -} -function xor(options, params) { - return new ZodXor({ - type: "union", - options, - inclusive: false, - ...exports_util.normalizeParams(params) - }); -} -function discriminatedUnion(discriminator, options, params) { - return new ZodDiscriminatedUnion({ - type: "union", - options, - discriminator, - ...exports_util.normalizeParams(params) - }); -} -function intersection(left, right) { - return new ZodIntersection({ - type: "intersection", - left, - right - }); -} -function tuple(items, _paramsOrRest, _params) { - const hasRest = _paramsOrRest instanceof $ZodType; - const params = hasRest ? _params : _paramsOrRest; - const rest = hasRest ? _paramsOrRest : null; - return new ZodTuple({ - type: "tuple", - items, - rest, - ...exports_util.normalizeParams(params) - }); -} -function record(keyType, valueType, params) { - return new ZodRecord({ - type: "record", - keyType, - valueType, - ...exports_util.normalizeParams(params) - }); -} -function partialRecord(keyType, valueType, params) { - const k = clone(keyType); - k._zod.values = undefined; - return new ZodRecord({ - type: "record", - keyType: k, - valueType, - ...exports_util.normalizeParams(params) - }); -} -function looseRecord(keyType, valueType, params) { - return new ZodRecord({ - type: "record", - keyType, - valueType, - mode: "loose", - ...exports_util.normalizeParams(params) - }); -} -function map(keyType, valueType, params) { - return new ZodMap({ - type: "map", - keyType, - valueType, - ...exports_util.normalizeParams(params) - }); -} -function set(valueType, params) { - return new ZodSet({ - type: "set", - valueType, - ...exports_util.normalizeParams(params) - }); -} -function _enum2(values, params) { - const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; - return new ZodEnum({ - type: "enum", - entries, - ...exports_util.normalizeParams(params) - }); -} -function nativeEnum(entries, params) { - return new ZodEnum({ - type: "enum", - entries, - ...exports_util.normalizeParams(params) - }); -} -function literal(value, params) { - return new ZodLiteral({ - type: "literal", - values: Array.isArray(value) ? value : [value], - ...exports_util.normalizeParams(params) - }); -} -function file(params) { - return _file(ZodFile, params); -} -function transform(fn) { - return new ZodTransform({ - type: "transform", - transform: fn - }); -} -function optional(innerType) { - return new ZodOptional({ - type: "optional", - innerType - }); -} -function exactOptional(innerType) { - return new ZodExactOptional({ - type: "optional", - innerType - }); -} -function nullable(innerType) { - return new ZodNullable({ - type: "nullable", - innerType - }); -} -function nullish2(innerType) { - return optional(nullable(innerType)); -} -function _default2(innerType, defaultValue) { - return new ZodDefault({ - type: "default", - innerType, - get defaultValue() { - return typeof defaultValue === "function" ? defaultValue() : exports_util.shallowClone(defaultValue); - } - }); -} -function prefault(innerType, defaultValue) { - return new ZodPrefault({ - type: "prefault", - innerType, - get defaultValue() { - return typeof defaultValue === "function" ? defaultValue() : exports_util.shallowClone(defaultValue); - } - }); -} -function nonoptional(innerType, params) { - return new ZodNonOptional({ - type: "nonoptional", - innerType, - ...exports_util.normalizeParams(params) - }); -} -function success(innerType) { - return new ZodSuccess({ - type: "success", - innerType - }); -} -function _catch2(innerType, catchValue) { - return new ZodCatch({ - type: "catch", - innerType, - catchValue: typeof catchValue === "function" ? catchValue : () => catchValue - }); -} -function nan(params) { - return _nan(ZodNaN, params); -} -function pipe(in_, out) { - return new ZodPipe({ - type: "pipe", - in: in_, - out - }); -} -function codec(in_, out, params) { - return new ZodCodec({ - type: "pipe", - in: in_, - out, - transform: params.decode, - reverseTransform: params.encode - }); -} -function readonly(innerType) { - return new ZodReadonly({ - type: "readonly", - innerType - }); -} -function templateLiteral(parts, params) { - return new ZodTemplateLiteral({ - type: "template_literal", - parts, - ...exports_util.normalizeParams(params) - }); -} -function lazy(getter) { - return new ZodLazy({ - type: "lazy", - getter - }); -} -function promise(innerType) { - return new ZodPromise({ - type: "promise", - innerType - }); -} -function _function(params) { - return new ZodFunction({ - type: "function", - input: Array.isArray(params?.input) ? tuple(params?.input) : params?.input ?? array(unknown()), - output: params?.output ?? unknown() - }); -} -function check(fn) { - const ch = new $ZodCheck({ - check: "custom" - }); - ch._zod.check = fn; - return ch; -} -function custom(fn, _params) { - return _custom(ZodCustom, fn ?? (() => true), _params); -} -function refine(fn, _params = {}) { - return _refine(ZodCustom, fn, _params); -} -function superRefine(fn) { - return _superRefine(fn); -} -function _instanceof(cls, params = {}) { - const inst = new ZodCustom({ - type: "custom", - check: "custom", - fn: (data) => data instanceof cls, - abort: true, - ...exports_util.normalizeParams(params) - }); - inst._zod.bag.Class = cls; - inst._zod.check = (payload) => { - if (!(payload.value instanceof cls)) { - payload.issues.push({ - code: "invalid_type", - expected: cls.name, - input: payload.value, - inst, - path: [...inst._zod.def.path ?? []] - }); - } - }; - return inst; -} -function json(params) { - const jsonSchema = lazy(() => { - return union([string2(params), number2(), boolean2(), _null3(), array(jsonSchema), record(string2(), jsonSchema)]); - }); - return jsonSchema; -} -function preprocess(fn, schema) { - return pipe(transform(fn), schema); -} -var ZodType, _ZodString, ZodString, ZodStringFormat, ZodEmail, ZodGUID, ZodUUID, ZodURL, ZodEmoji, ZodNanoID, ZodCUID, ZodCUID2, ZodULID, ZodXID, ZodKSUID, ZodIPv4, ZodMAC, ZodIPv6, ZodCIDRv4, ZodCIDRv6, ZodBase64, ZodBase64URL, ZodE164, ZodJWT, ZodCustomStringFormat, ZodNumber, ZodNumberFormat, ZodBoolean, ZodBigInt, ZodBigIntFormat, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodDate, ZodArray, ZodObject, ZodUnion, ZodXor, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodEnum, ZodLiteral, ZodFile, ZodTransform, ZodOptional, ZodExactOptional, ZodNullable, ZodDefault, ZodPrefault, ZodNonOptional, ZodSuccess, ZodCatch, ZodNaN, ZodPipe, ZodCodec, ZodReadonly, ZodTemplateLiteral, ZodLazy, ZodPromise, ZodFunction, ZodCustom, describe2, meta2, stringbool = (...args) => _stringbool({ - Codec: ZodCodec, - Boolean: ZodBoolean, - String: ZodString -}, ...args); -var init_schemas2 = __esm(() => { - init_core2(); - init_core2(); - init_json_schema_processors(); - init_to_json_schema(); - init_checks2(); - init_iso(); - init_parse2(); - ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { - $ZodType.init(inst, def); - Object.assign(inst["~standard"], { - jsonSchema: { - input: createStandardJSONSchemaMethod(inst, "input"), - output: createStandardJSONSchemaMethod(inst, "output") - } - }); - inst.toJSONSchema = createToJSONSchemaMethod(inst, {}); - inst.def = def; - inst.type = def.type; - Object.defineProperty(inst, "_def", { value: def }); - inst.check = (...checks2) => { - return inst.clone(exports_util.mergeDefs(def, { - checks: [ - ...def.checks ?? [], - ...checks2.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch) - ] - }), { - parent: true - }); - }; - inst.with = inst.check; - inst.clone = (def2, params) => clone(inst, def2, params); - inst.brand = () => inst; - inst.register = (reg, meta2) => { - reg.add(inst, meta2); - return inst; - }; - inst.parse = (data, params) => parse3(inst, data, params, { callee: inst.parse }); - inst.safeParse = (data, params) => safeParse2(inst, data, params); - inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); - inst.safeParseAsync = async (data, params) => safeParseAsync2(inst, data, params); - inst.spa = inst.safeParseAsync; - inst.encode = (data, params) => encode2(inst, data, params); - inst.decode = (data, params) => decode2(inst, data, params); - inst.encodeAsync = async (data, params) => encodeAsync2(inst, data, params); - inst.decodeAsync = async (data, params) => decodeAsync2(inst, data, params); - inst.safeEncode = (data, params) => safeEncode2(inst, data, params); - inst.safeDecode = (data, params) => safeDecode2(inst, data, params); - inst.safeEncodeAsync = async (data, params) => safeEncodeAsync2(inst, data, params); - inst.safeDecodeAsync = async (data, params) => safeDecodeAsync2(inst, data, params); - inst.refine = (check, params) => inst.check(refine(check, params)); - inst.superRefine = (refinement) => inst.check(superRefine(refinement)); - inst.overwrite = (fn) => inst.check(_overwrite(fn)); - inst.optional = () => optional(inst); - inst.exactOptional = () => exactOptional(inst); - inst.nullable = () => nullable(inst); - inst.nullish = () => optional(nullable(inst)); - inst.nonoptional = (params) => nonoptional(inst, params); - inst.array = () => array(inst); - inst.or = (arg) => union([inst, arg]); - inst.and = (arg) => intersection(inst, arg); - inst.transform = (tx) => pipe(inst, transform(tx)); - inst.default = (def2) => _default2(inst, def2); - inst.prefault = (def2) => prefault(inst, def2); - inst.catch = (params) => _catch2(inst, params); - inst.pipe = (target) => pipe(inst, target); - inst.readonly = () => readonly(inst); - inst.describe = (description) => { - const cl = inst.clone(); - globalRegistry.add(cl, { description }); - return cl; - }; - Object.defineProperty(inst, "description", { - get() { - return globalRegistry.get(inst)?.description; - }, - configurable: true - }); - inst.meta = (...args) => { - if (args.length === 0) { - return globalRegistry.get(inst); - } - const cl = inst.clone(); - globalRegistry.add(cl, args[0]); - return cl; - }; - inst.isOptional = () => inst.safeParse(undefined).success; - inst.isNullable = () => inst.safeParse(null).success; - inst.apply = (fn) => fn(inst); - return inst; - }); - _ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => { - $ZodString.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => stringProcessor(inst, ctx, json, params); - const bag = inst._zod.bag; - inst.format = bag.format ?? null; - inst.minLength = bag.minimum ?? null; - inst.maxLength = bag.maximum ?? null; - inst.regex = (...args) => inst.check(_regex(...args)); - inst.includes = (...args) => inst.check(_includes(...args)); - inst.startsWith = (...args) => inst.check(_startsWith(...args)); - inst.endsWith = (...args) => inst.check(_endsWith(...args)); - inst.min = (...args) => inst.check(_minLength(...args)); - inst.max = (...args) => inst.check(_maxLength(...args)); - inst.length = (...args) => inst.check(_length(...args)); - inst.nonempty = (...args) => inst.check(_minLength(1, ...args)); - inst.lowercase = (params) => inst.check(_lowercase(params)); - inst.uppercase = (params) => inst.check(_uppercase(params)); - inst.trim = () => inst.check(_trim()); - inst.normalize = (...args) => inst.check(_normalize(...args)); - inst.toLowerCase = () => inst.check(_toLowerCase()); - inst.toUpperCase = () => inst.check(_toUpperCase()); - inst.slugify = () => inst.check(_slugify()); - }); - ZodString = /* @__PURE__ */ $constructor("ZodString", (inst, def) => { - $ZodString.init(inst, def); - _ZodString.init(inst, def); - inst.email = (params) => inst.check(_email(ZodEmail, params)); - inst.url = (params) => inst.check(_url(ZodURL, params)); - inst.jwt = (params) => inst.check(_jwt(ZodJWT, params)); - inst.emoji = (params) => inst.check(_emoji2(ZodEmoji, params)); - inst.guid = (params) => inst.check(_guid(ZodGUID, params)); - inst.uuid = (params) => inst.check(_uuid(ZodUUID, params)); - inst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params)); - inst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params)); - inst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params)); - inst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params)); - inst.guid = (params) => inst.check(_guid(ZodGUID, params)); - inst.cuid = (params) => inst.check(_cuid(ZodCUID, params)); - inst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params)); - inst.ulid = (params) => inst.check(_ulid(ZodULID, params)); - inst.base64 = (params) => inst.check(_base64(ZodBase64, params)); - inst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params)); - inst.xid = (params) => inst.check(_xid(ZodXID, params)); - inst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params)); - inst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params)); - inst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params)); - inst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params)); - inst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params)); - inst.e164 = (params) => inst.check(_e164(ZodE164, params)); - inst.datetime = (params) => inst.check(datetime2(params)); - inst.date = (params) => inst.check(date2(params)); - inst.time = (params) => inst.check(time2(params)); - inst.duration = (params) => inst.check(duration2(params)); - }); - ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => { - $ZodStringFormat.init(inst, def); - _ZodString.init(inst, def); - }); - ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => { - $ZodEmail.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => { - $ZodGUID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => { - $ZodUUID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => { - $ZodURL.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => { - $ZodEmoji.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => { - $ZodNanoID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => { - $ZodCUID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => { - $ZodCUID2.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => { - $ZodULID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => { - $ZodXID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => { - $ZodKSUID.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => { - $ZodIPv4.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodMAC = /* @__PURE__ */ $constructor("ZodMAC", (inst, def) => { - $ZodMAC.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => { - $ZodIPv6.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => { - $ZodCIDRv4.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => { - $ZodCIDRv6.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => { - $ZodBase64.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => { - $ZodBase64URL.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => { - $ZodE164.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => { - $ZodJWT.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat", (inst, def) => { - $ZodCustomStringFormat.init(inst, def); - ZodStringFormat.init(inst, def); - }); - ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => { - $ZodNumber.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => numberProcessor(inst, ctx, json, params); - inst.gt = (value, params) => inst.check(_gt(value, params)); - inst.gte = (value, params) => inst.check(_gte(value, params)); - inst.min = (value, params) => inst.check(_gte(value, params)); - inst.lt = (value, params) => inst.check(_lt(value, params)); - inst.lte = (value, params) => inst.check(_lte(value, params)); - inst.max = (value, params) => inst.check(_lte(value, params)); - inst.int = (params) => inst.check(int(params)); - inst.safe = (params) => inst.check(int(params)); - inst.positive = (params) => inst.check(_gt(0, params)); - inst.nonnegative = (params) => inst.check(_gte(0, params)); - inst.negative = (params) => inst.check(_lt(0, params)); - inst.nonpositive = (params) => inst.check(_lte(0, params)); - inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params)); - inst.step = (value, params) => inst.check(_multipleOf(value, params)); - inst.finite = () => inst; - const bag = inst._zod.bag; - inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null; - inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null; - inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5); - inst.isFinite = true; - inst.format = bag.format ?? null; - }); - ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => { - $ZodNumberFormat.init(inst, def); - ZodNumber.init(inst, def); - }); - ZodBoolean = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => { - $ZodBoolean.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => booleanProcessor(inst, ctx, json, params); - }); - ZodBigInt = /* @__PURE__ */ $constructor("ZodBigInt", (inst, def) => { - $ZodBigInt.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => bigintProcessor(inst, ctx, json, params); - inst.gte = (value, params) => inst.check(_gte(value, params)); - inst.min = (value, params) => inst.check(_gte(value, params)); - inst.gt = (value, params) => inst.check(_gt(value, params)); - inst.gte = (value, params) => inst.check(_gte(value, params)); - inst.min = (value, params) => inst.check(_gte(value, params)); - inst.lt = (value, params) => inst.check(_lt(value, params)); - inst.lte = (value, params) => inst.check(_lte(value, params)); - inst.max = (value, params) => inst.check(_lte(value, params)); - inst.positive = (params) => inst.check(_gt(BigInt(0), params)); - inst.negative = (params) => inst.check(_lt(BigInt(0), params)); - inst.nonpositive = (params) => inst.check(_lte(BigInt(0), params)); - inst.nonnegative = (params) => inst.check(_gte(BigInt(0), params)); - inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params)); - const bag = inst._zod.bag; - inst.minValue = bag.minimum ?? null; - inst.maxValue = bag.maximum ?? null; - inst.format = bag.format ?? null; - }); - ZodBigIntFormat = /* @__PURE__ */ $constructor("ZodBigIntFormat", (inst, def) => { - $ZodBigIntFormat.init(inst, def); - ZodBigInt.init(inst, def); - }); - ZodSymbol = /* @__PURE__ */ $constructor("ZodSymbol", (inst, def) => { - $ZodSymbol.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => symbolProcessor(inst, ctx, json, params); - }); - ZodUndefined = /* @__PURE__ */ $constructor("ZodUndefined", (inst, def) => { - $ZodUndefined.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => undefinedProcessor(inst, ctx, json, params); - }); - ZodNull = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => { - $ZodNull.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => nullProcessor(inst, ctx, json, params); - }); - ZodAny = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => { - $ZodAny.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => anyProcessor(inst, ctx, json, params); - }); - ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => { - $ZodUnknown.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => unknownProcessor(inst, ctx, json, params); - }); - ZodNever = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => { - $ZodNever.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => neverProcessor(inst, ctx, json, params); - }); - ZodVoid = /* @__PURE__ */ $constructor("ZodVoid", (inst, def) => { - $ZodVoid.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => voidProcessor(inst, ctx, json, params); - }); - ZodDate = /* @__PURE__ */ $constructor("ZodDate", (inst, def) => { - $ZodDate.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => dateProcessor(inst, ctx, json, params); - inst.min = (value, params) => inst.check(_gte(value, params)); - inst.max = (value, params) => inst.check(_lte(value, params)); - const c = inst._zod.bag; - inst.minDate = c.minimum ? new Date(c.minimum) : null; - inst.maxDate = c.maximum ? new Date(c.maximum) : null; - }); - ZodArray = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => { - $ZodArray.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => arrayProcessor(inst, ctx, json, params); - inst.element = def.element; - inst.min = (minLength, params) => inst.check(_minLength(minLength, params)); - inst.nonempty = (params) => inst.check(_minLength(1, params)); - inst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params)); - inst.length = (len, params) => inst.check(_length(len, params)); - inst.unwrap = () => inst.element; - }); - ZodObject = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => { - $ZodObjectJIT.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => objectProcessor(inst, ctx, json, params); - exports_util.defineLazy(inst, "shape", () => { - return def.shape; - }); - inst.keyof = () => _enum2(Object.keys(inst._zod.def.shape)); - inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall }); - inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() }); - inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() }); - inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() }); - inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined }); - inst.extend = (incoming) => { - return exports_util.extend(inst, incoming); - }; - inst.safeExtend = (incoming) => { - return exports_util.safeExtend(inst, incoming); - }; - inst.merge = (other) => exports_util.merge(inst, other); - inst.pick = (mask) => exports_util.pick(inst, mask); - inst.omit = (mask) => exports_util.omit(inst, mask); - inst.partial = (...args) => exports_util.partial(ZodOptional, inst, args[0]); - inst.required = (...args) => exports_util.required(ZodNonOptional, inst, args[0]); - }); - ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => { - $ZodUnion.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params); - inst.options = def.options; - }); - ZodXor = /* @__PURE__ */ $constructor("ZodXor", (inst, def) => { - ZodUnion.init(inst, def); - $ZodXor.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params); - inst.options = def.options; - }); - ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => { - ZodUnion.init(inst, def); - $ZodDiscriminatedUnion.init(inst, def); - }); - ZodIntersection = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => { - $ZodIntersection.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => intersectionProcessor(inst, ctx, json, params); - }); - ZodTuple = /* @__PURE__ */ $constructor("ZodTuple", (inst, def) => { - $ZodTuple.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => tupleProcessor(inst, ctx, json, params); - inst.rest = (rest) => inst.clone({ - ...inst._zod.def, - rest - }); - }); - ZodRecord = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => { - $ZodRecord.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => recordProcessor(inst, ctx, json, params); - inst.keyType = def.keyType; - inst.valueType = def.valueType; - }); - ZodMap = /* @__PURE__ */ $constructor("ZodMap", (inst, def) => { - $ZodMap.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => mapProcessor(inst, ctx, json, params); - inst.keyType = def.keyType; - inst.valueType = def.valueType; - inst.min = (...args) => inst.check(_minSize(...args)); - inst.nonempty = (params) => inst.check(_minSize(1, params)); - inst.max = (...args) => inst.check(_maxSize(...args)); - inst.size = (...args) => inst.check(_size(...args)); - }); - ZodSet = /* @__PURE__ */ $constructor("ZodSet", (inst, def) => { - $ZodSet.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => setProcessor(inst, ctx, json, params); - inst.min = (...args) => inst.check(_minSize(...args)); - inst.nonempty = (params) => inst.check(_minSize(1, params)); - inst.max = (...args) => inst.check(_maxSize(...args)); - inst.size = (...args) => inst.check(_size(...args)); - }); - ZodEnum = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => { - $ZodEnum.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => enumProcessor(inst, ctx, json, params); - inst.enum = def.entries; - inst.options = Object.values(def.entries); - const keys = new Set(Object.keys(def.entries)); - inst.extract = (values, params) => { - const newEntries = {}; - for (const value of values) { - if (keys.has(value)) { - newEntries[value] = def.entries[value]; - } else - throw new Error(`Key ${value} not found in enum`); - } - return new ZodEnum({ - ...def, - checks: [], - ...exports_util.normalizeParams(params), - entries: newEntries - }); - }; - inst.exclude = (values, params) => { - const newEntries = { ...def.entries }; - for (const value of values) { - if (keys.has(value)) { - delete newEntries[value]; - } else - throw new Error(`Key ${value} not found in enum`); - } - return new ZodEnum({ - ...def, - checks: [], - ...exports_util.normalizeParams(params), - entries: newEntries - }); - }; - }); - ZodLiteral = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => { - $ZodLiteral.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => literalProcessor(inst, ctx, json, params); - inst.values = new Set(def.values); - Object.defineProperty(inst, "value", { - get() { - if (def.values.length > 1) { - throw new Error("This schema contains multiple valid literal values. Use `.values` instead."); - } - return def.values[0]; - } - }); - }); - ZodFile = /* @__PURE__ */ $constructor("ZodFile", (inst, def) => { - $ZodFile.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => fileProcessor(inst, ctx, json, params); - inst.min = (size, params) => inst.check(_minSize(size, params)); - inst.max = (size, params) => inst.check(_maxSize(size, params)); - inst.mime = (types, params) => inst.check(_mime(Array.isArray(types) ? types : [types], params)); - }); - ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => { - $ZodTransform.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => transformProcessor(inst, ctx, json, params); - inst._zod.parse = (payload, _ctx) => { - if (_ctx.direction === "backward") { - throw new $ZodEncodeError(inst.constructor.name); - } - payload.addIssue = (issue2) => { - if (typeof issue2 === "string") { - payload.issues.push(exports_util.issue(issue2, payload.value, def)); - } else { - const _issue = issue2; - if (_issue.fatal) - _issue.continue = false; - _issue.code ?? (_issue.code = "custom"); - _issue.input ?? (_issue.input = payload.value); - _issue.inst ?? (_issue.inst = inst); - payload.issues.push(exports_util.issue(_issue)); - } - }; - const output = def.transform(payload.value, payload); - if (output instanceof Promise) { - return output.then((output2) => { - payload.value = output2; - return payload; - }); - } - payload.value = output; - return payload; - }; - }); - ZodOptional = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => { - $ZodOptional.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => { - $ZodExactOptional.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodNullable = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => { - $ZodNullable.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => nullableProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodDefault = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => { - $ZodDefault.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => defaultProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - inst.removeDefault = inst.unwrap; - }); - ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => { - $ZodPrefault.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => prefaultProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => { - $ZodNonOptional.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => nonoptionalProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodSuccess = /* @__PURE__ */ $constructor("ZodSuccess", (inst, def) => { - $ZodSuccess.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => successProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodCatch = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => { - $ZodCatch.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => catchProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - inst.removeCatch = inst.unwrap; - }); - ZodNaN = /* @__PURE__ */ $constructor("ZodNaN", (inst, def) => { - $ZodNaN.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => nanProcessor(inst, ctx, json, params); - }); - ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => { - $ZodPipe.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => pipeProcessor(inst, ctx, json, params); - inst.in = def.in; - inst.out = def.out; - }); - ZodCodec = /* @__PURE__ */ $constructor("ZodCodec", (inst, def) => { - ZodPipe.init(inst, def); - $ZodCodec.init(inst, def); - }); - ZodReadonly = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => { - $ZodReadonly.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => readonlyProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => { - $ZodTemplateLiteral.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => templateLiteralProcessor(inst, ctx, json, params); - }); - ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => { - $ZodLazy.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => lazyProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.getter(); - }); - ZodPromise = /* @__PURE__ */ $constructor("ZodPromise", (inst, def) => { - $ZodPromise.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => promiseProcessor(inst, ctx, json, params); - inst.unwrap = () => inst._zod.def.innerType; - }); - ZodFunction = /* @__PURE__ */ $constructor("ZodFunction", (inst, def) => { - $ZodFunction.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => functionProcessor(inst, ctx, json, params); - }); - ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => { - $ZodCustom.init(inst, def); - ZodType.init(inst, def); - inst._zod.processJSONSchema = (ctx, json, params) => customProcessor(inst, ctx, json, params); - }); - describe2 = describe; - meta2 = meta; -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/compat.js -function setErrorMap(map2) { - config({ - customError: map2 - }); -} -function getErrorMap() { - return config().customError; -} -var ZodIssueCode, ZodFirstPartyTypeKind; -var init_compat = __esm(() => { - init_core2(); - ZodIssueCode = { - invalid_type: "invalid_type", - too_big: "too_big", - too_small: "too_small", - invalid_format: "invalid_format", - not_multiple_of: "not_multiple_of", - unrecognized_keys: "unrecognized_keys", - invalid_union: "invalid_union", - invalid_key: "invalid_key", - invalid_element: "invalid_element", - invalid_value: "invalid_value", - custom: "custom" - }; - (function(ZodFirstPartyTypeKind2) {})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {})); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/from-json-schema.js -function detectVersion(schema, defaultTarget) { - const $schema = schema.$schema; - if ($schema === "https://json-schema.org/draft/2020-12/schema") { - return "draft-2020-12"; - } - if ($schema === "http://json-schema.org/draft-07/schema#") { - return "draft-7"; - } - if ($schema === "http://json-schema.org/draft-04/schema#") { - return "draft-4"; - } - return defaultTarget ?? "draft-2020-12"; -} -function resolveRef(ref, ctx) { - if (!ref.startsWith("#")) { - throw new Error("External $ref is not supported, only local refs (#/...) are allowed"); - } - const path = ref.slice(1).split("/").filter(Boolean); - if (path.length === 0) { - return ctx.rootSchema; - } - const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions"; - if (path[0] === defsKey) { - const key = path[1]; - if (!key || !ctx.defs[key]) { - throw new Error(`Reference not found: ${ref}`); - } - return ctx.defs[key]; - } - throw new Error(`Reference not found: ${ref}`); -} -function convertBaseSchema(schema, ctx) { - if (schema.not !== undefined) { - if (typeof schema.not === "object" && Object.keys(schema.not).length === 0) { - return z.never(); - } - throw new Error("not is not supported in Zod (except { not: {} } for never)"); - } - if (schema.unevaluatedItems !== undefined) { - throw new Error("unevaluatedItems is not supported"); - } - if (schema.unevaluatedProperties !== undefined) { - throw new Error("unevaluatedProperties is not supported"); - } - if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) { - throw new Error("Conditional schemas (if/then/else) are not supported"); - } - if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) { - throw new Error("dependentSchemas and dependentRequired are not supported"); - } - if (schema.$ref) { - const refPath = schema.$ref; - if (ctx.refs.has(refPath)) { - return ctx.refs.get(refPath); - } - if (ctx.processing.has(refPath)) { - return z.lazy(() => { - if (!ctx.refs.has(refPath)) { - throw new Error(`Circular reference not resolved: ${refPath}`); - } - return ctx.refs.get(refPath); - }); - } - ctx.processing.add(refPath); - const resolved = resolveRef(refPath, ctx); - const zodSchema2 = convertSchema(resolved, ctx); - ctx.refs.set(refPath, zodSchema2); - ctx.processing.delete(refPath); - return zodSchema2; - } - if (schema.enum !== undefined) { - const enumValues = schema.enum; - if (ctx.version === "openapi-3.0" && schema.nullable === true && enumValues.length === 1 && enumValues[0] === null) { - return z.null(); - } - if (enumValues.length === 0) { - return z.never(); - } - if (enumValues.length === 1) { - return z.literal(enumValues[0]); - } - if (enumValues.every((v) => typeof v === "string")) { - return z.enum(enumValues); - } - const literalSchemas = enumValues.map((v) => z.literal(v)); - if (literalSchemas.length < 2) { - return literalSchemas[0]; - } - return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]); - } - if (schema.const !== undefined) { - return z.literal(schema.const); - } - const type = schema.type; - if (Array.isArray(type)) { - const typeSchemas = type.map((t) => { - const typeSchema = { ...schema, type: t }; - return convertBaseSchema(typeSchema, ctx); - }); - if (typeSchemas.length === 0) { - return z.never(); - } - if (typeSchemas.length === 1) { - return typeSchemas[0]; - } - return z.union(typeSchemas); - } - if (!type) { - return z.any(); - } - let zodSchema; - switch (type) { - case "string": { - let stringSchema = z.string(); - if (schema.format) { - const format = schema.format; - if (format === "email") { - stringSchema = stringSchema.check(z.email()); - } else if (format === "uri" || format === "uri-reference") { - stringSchema = stringSchema.check(z.url()); - } else if (format === "uuid" || format === "guid") { - stringSchema = stringSchema.check(z.uuid()); - } else if (format === "date-time") { - stringSchema = stringSchema.check(z.iso.datetime()); - } else if (format === "date") { - stringSchema = stringSchema.check(z.iso.date()); - } else if (format === "time") { - stringSchema = stringSchema.check(z.iso.time()); - } else if (format === "duration") { - stringSchema = stringSchema.check(z.iso.duration()); - } else if (format === "ipv4") { - stringSchema = stringSchema.check(z.ipv4()); - } else if (format === "ipv6") { - stringSchema = stringSchema.check(z.ipv6()); - } else if (format === "mac") { - stringSchema = stringSchema.check(z.mac()); - } else if (format === "cidr") { - stringSchema = stringSchema.check(z.cidrv4()); - } else if (format === "cidr-v6") { - stringSchema = stringSchema.check(z.cidrv6()); - } else if (format === "base64") { - stringSchema = stringSchema.check(z.base64()); - } else if (format === "base64url") { - stringSchema = stringSchema.check(z.base64url()); - } else if (format === "e164") { - stringSchema = stringSchema.check(z.e164()); - } else if (format === "jwt") { - stringSchema = stringSchema.check(z.jwt()); - } else if (format === "emoji") { - stringSchema = stringSchema.check(z.emoji()); - } else if (format === "nanoid") { - stringSchema = stringSchema.check(z.nanoid()); - } else if (format === "cuid") { - stringSchema = stringSchema.check(z.cuid()); - } else if (format === "cuid2") { - stringSchema = stringSchema.check(z.cuid2()); - } else if (format === "ulid") { - stringSchema = stringSchema.check(z.ulid()); - } else if (format === "xid") { - stringSchema = stringSchema.check(z.xid()); - } else if (format === "ksuid") { - stringSchema = stringSchema.check(z.ksuid()); - } - } - if (typeof schema.minLength === "number") { - stringSchema = stringSchema.min(schema.minLength); - } - if (typeof schema.maxLength === "number") { - stringSchema = stringSchema.max(schema.maxLength); - } - if (schema.pattern) { - stringSchema = stringSchema.regex(new RegExp(schema.pattern)); - } - zodSchema = stringSchema; - break; - } - case "number": - case "integer": { - let numberSchema = type === "integer" ? z.number().int() : z.number(); - if (typeof schema.minimum === "number") { - numberSchema = numberSchema.min(schema.minimum); - } - if (typeof schema.maximum === "number") { - numberSchema = numberSchema.max(schema.maximum); - } - if (typeof schema.exclusiveMinimum === "number") { - numberSchema = numberSchema.gt(schema.exclusiveMinimum); - } else if (schema.exclusiveMinimum === true && typeof schema.minimum === "number") { - numberSchema = numberSchema.gt(schema.minimum); - } - if (typeof schema.exclusiveMaximum === "number") { - numberSchema = numberSchema.lt(schema.exclusiveMaximum); - } else if (schema.exclusiveMaximum === true && typeof schema.maximum === "number") { - numberSchema = numberSchema.lt(schema.maximum); - } - if (typeof schema.multipleOf === "number") { - numberSchema = numberSchema.multipleOf(schema.multipleOf); - } - zodSchema = numberSchema; - break; - } - case "boolean": { - zodSchema = z.boolean(); - break; - } - case "null": { - zodSchema = z.null(); - break; - } - case "object": { - const shape = {}; - const properties = schema.properties || {}; - const requiredSet = new Set(schema.required || []); - for (const [key, propSchema] of Object.entries(properties)) { - const propZodSchema = convertSchema(propSchema, ctx); - shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional(); - } - if (schema.propertyNames) { - const keySchema = convertSchema(schema.propertyNames, ctx); - const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === "object" ? convertSchema(schema.additionalProperties, ctx) : z.any(); - if (Object.keys(shape).length === 0) { - zodSchema = z.record(keySchema, valueSchema); - break; - } - const objectSchema2 = z.object(shape).passthrough(); - const recordSchema = z.looseRecord(keySchema, valueSchema); - zodSchema = z.intersection(objectSchema2, recordSchema); - break; - } - if (schema.patternProperties) { - const patternProps = schema.patternProperties; - const patternKeys = Object.keys(patternProps); - const looseRecords = []; - for (const pattern of patternKeys) { - const patternValue = convertSchema(patternProps[pattern], ctx); - const keySchema = z.string().regex(new RegExp(pattern)); - looseRecords.push(z.looseRecord(keySchema, patternValue)); - } - const schemasToIntersect = []; - if (Object.keys(shape).length > 0) { - schemasToIntersect.push(z.object(shape).passthrough()); - } - schemasToIntersect.push(...looseRecords); - if (schemasToIntersect.length === 0) { - zodSchema = z.object({}).passthrough(); - } else if (schemasToIntersect.length === 1) { - zodSchema = schemasToIntersect[0]; - } else { - let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]); - for (let i = 2;i < schemasToIntersect.length; i++) { - result = z.intersection(result, schemasToIntersect[i]); - } - zodSchema = result; - } - break; - } - const objectSchema = z.object(shape); - if (schema.additionalProperties === false) { - zodSchema = objectSchema.strict(); - } else if (typeof schema.additionalProperties === "object") { - zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx)); - } else { - zodSchema = objectSchema.passthrough(); - } - break; - } - case "array": { - const prefixItems = schema.prefixItems; - const items = schema.items; - if (prefixItems && Array.isArray(prefixItems)) { - const tupleItems = prefixItems.map((item) => convertSchema(item, ctx)); - const rest = items && typeof items === "object" && !Array.isArray(items) ? convertSchema(items, ctx) : undefined; - if (rest) { - zodSchema = z.tuple(tupleItems).rest(rest); - } else { - zodSchema = z.tuple(tupleItems); - } - if (typeof schema.minItems === "number") { - zodSchema = zodSchema.check(z.minLength(schema.minItems)); - } - if (typeof schema.maxItems === "number") { - zodSchema = zodSchema.check(z.maxLength(schema.maxItems)); - } - } else if (Array.isArray(items)) { - const tupleItems = items.map((item) => convertSchema(item, ctx)); - const rest = schema.additionalItems && typeof schema.additionalItems === "object" ? convertSchema(schema.additionalItems, ctx) : undefined; - if (rest) { - zodSchema = z.tuple(tupleItems).rest(rest); - } else { - zodSchema = z.tuple(tupleItems); - } - if (typeof schema.minItems === "number") { - zodSchema = zodSchema.check(z.minLength(schema.minItems)); - } - if (typeof schema.maxItems === "number") { - zodSchema = zodSchema.check(z.maxLength(schema.maxItems)); - } - } else if (items !== undefined) { - const element = convertSchema(items, ctx); - let arraySchema = z.array(element); - if (typeof schema.minItems === "number") { - arraySchema = arraySchema.min(schema.minItems); - } - if (typeof schema.maxItems === "number") { - arraySchema = arraySchema.max(schema.maxItems); - } - zodSchema = arraySchema; - } else { - zodSchema = z.array(z.any()); - } - break; - } - default: - throw new Error(`Unsupported type: ${type}`); - } - if (schema.description) { - zodSchema = zodSchema.describe(schema.description); - } - if (schema.default !== undefined) { - zodSchema = zodSchema.default(schema.default); - } - return zodSchema; -} -function convertSchema(schema, ctx) { - if (typeof schema === "boolean") { - return schema ? z.any() : z.never(); - } - let baseSchema = convertBaseSchema(schema, ctx); - const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined; - if (schema.anyOf && Array.isArray(schema.anyOf)) { - const options = schema.anyOf.map((s) => convertSchema(s, ctx)); - const anyOfUnion = z.union(options); - baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion; - } - if (schema.oneOf && Array.isArray(schema.oneOf)) { - const options = schema.oneOf.map((s) => convertSchema(s, ctx)); - const oneOfUnion = z.xor(options); - baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion; - } - if (schema.allOf && Array.isArray(schema.allOf)) { - if (schema.allOf.length === 0) { - baseSchema = hasExplicitType ? baseSchema : z.any(); - } else { - let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx); - const startIdx = hasExplicitType ? 0 : 1; - for (let i = startIdx;i < schema.allOf.length; i++) { - result = z.intersection(result, convertSchema(schema.allOf[i], ctx)); - } - baseSchema = result; - } - } - if (schema.nullable === true && ctx.version === "openapi-3.0") { - baseSchema = z.nullable(baseSchema); - } - if (schema.readOnly === true) { - baseSchema = z.readonly(baseSchema); - } - const extraMeta = {}; - const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"]; - for (const key of coreMetadataKeys) { - if (key in schema) { - extraMeta[key] = schema[key]; - } - } - const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"]; - for (const key of contentMetadataKeys) { - if (key in schema) { - extraMeta[key] = schema[key]; - } - } - for (const key of Object.keys(schema)) { - if (!RECOGNIZED_KEYS.has(key)) { - extraMeta[key] = schema[key]; - } - } - if (Object.keys(extraMeta).length > 0) { - ctx.registry.add(baseSchema, extraMeta); - } - return baseSchema; -} -function fromJSONSchema(schema, params) { - if (typeof schema === "boolean") { - return schema ? z.any() : z.never(); - } - const version2 = detectVersion(schema, params?.defaultTarget); - const defs = schema.$defs || schema.definitions || {}; - const ctx = { - version: version2, - defs, - refs: new Map, - processing: new Set, - rootSchema: schema, - registry: params?.registry ?? globalRegistry - }; - return convertSchema(schema, ctx); -} -var z, RECOGNIZED_KEYS; -var init_from_json_schema = __esm(() => { - init_registries(); - init_checks2(); - init_iso(); - init_schemas2(); - z = { - ...exports_schemas2, - ...exports_checks2, - iso: exports_iso - }; - RECOGNIZED_KEYS = new Set([ - "$schema", - "$ref", - "$defs", - "definitions", - "$id", - "id", - "$comment", - "$anchor", - "$vocabulary", - "$dynamicRef", - "$dynamicAnchor", - "type", - "enum", - "const", - "anyOf", - "oneOf", - "allOf", - "not", - "properties", - "required", - "additionalProperties", - "patternProperties", - "propertyNames", - "minProperties", - "maxProperties", - "items", - "prefixItems", - "additionalItems", - "minItems", - "maxItems", - "uniqueItems", - "contains", - "minContains", - "maxContains", - "minLength", - "maxLength", - "pattern", - "format", - "minimum", - "maximum", - "exclusiveMinimum", - "exclusiveMaximum", - "multipleOf", - "description", - "default", - "contentEncoding", - "contentMediaType", - "contentSchema", - "unevaluatedItems", - "unevaluatedProperties", - "if", - "then", - "else", - "dependentSchemas", - "dependentRequired", - "nullable", - "readOnly" - ]); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/coerce.js -var exports_coerce = {}; -__export(exports_coerce, { - string: () => string3, - number: () => number3, - date: () => date4, - boolean: () => boolean3, - bigint: () => bigint3 -}); -function string3(params) { - return _coercedString(ZodString, params); -} -function number3(params) { - return _coercedNumber(ZodNumber, params); -} -function boolean3(params) { - return _coercedBoolean(ZodBoolean, params); -} -function bigint3(params) { - return _coercedBigint(ZodBigInt, params); -} -function date4(params) { - return _coercedDate(ZodDate, params); -} -var init_coerce = __esm(() => { - init_core2(); - init_schemas2(); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/v4/classic/external.js -var exports_external = {}; -__export(exports_external, { - xor: () => xor, - xid: () => xid2, - void: () => _void2, - uuidv7: () => uuidv7, - uuidv6: () => uuidv6, - uuidv4: () => uuidv4, - uuid: () => uuid2, - util: () => exports_util, - url: () => url, - uppercase: () => _uppercase, - unknown: () => unknown, - union: () => union, - undefined: () => _undefined3, - ulid: () => ulid2, - uint64: () => uint64, - uint32: () => uint32, - tuple: () => tuple, - trim: () => _trim, - treeifyError: () => treeifyError, - transform: () => transform, - toUpperCase: () => _toUpperCase, - toLowerCase: () => _toLowerCase, - toJSONSchema: () => toJSONSchema, - templateLiteral: () => templateLiteral, - symbol: () => symbol, - superRefine: () => superRefine, - success: () => success, - stringbool: () => stringbool, - stringFormat: () => stringFormat, - string: () => string2, - strictObject: () => strictObject, - startsWith: () => _startsWith, - slugify: () => _slugify, - size: () => _size, - setErrorMap: () => setErrorMap, - set: () => set, - safeParseAsync: () => safeParseAsync2, - safeParse: () => safeParse2, - safeEncodeAsync: () => safeEncodeAsync2, - safeEncode: () => safeEncode2, - safeDecodeAsync: () => safeDecodeAsync2, - safeDecode: () => safeDecode2, - registry: () => registry, - regexes: () => exports_regexes, - regex: () => _regex, - refine: () => refine, - record: () => record, - readonly: () => readonly, - property: () => _property, - promise: () => promise, - prettifyError: () => prettifyError, - preprocess: () => preprocess, - prefault: () => prefault, - positive: () => _positive, - pipe: () => pipe, - partialRecord: () => partialRecord, - parseAsync: () => parseAsync2, - parse: () => parse3, - overwrite: () => _overwrite, - optional: () => optional, - object: () => object, - number: () => number2, - nullish: () => nullish2, - nullable: () => nullable, - null: () => _null3, - normalize: () => _normalize, - nonpositive: () => _nonpositive, - nonoptional: () => nonoptional, - nonnegative: () => _nonnegative, - never: () => never, - negative: () => _negative, - nativeEnum: () => nativeEnum, - nanoid: () => nanoid2, - nan: () => nan, - multipleOf: () => _multipleOf, - minSize: () => _minSize, - minLength: () => _minLength, - mime: () => _mime, - meta: () => meta2, - maxSize: () => _maxSize, - maxLength: () => _maxLength, - map: () => map, - mac: () => mac2, - lte: () => _lte, - lt: () => _lt, - lowercase: () => _lowercase, - looseRecord: () => looseRecord, - looseObject: () => looseObject, - locales: () => exports_locales, - literal: () => literal, - length: () => _length, - lazy: () => lazy, - ksuid: () => ksuid2, - keyof: () => keyof, - jwt: () => jwt, - json: () => json, - iso: () => exports_iso, - ipv6: () => ipv62, - ipv4: () => ipv42, - intersection: () => intersection, - int64: () => int64, - int32: () => int32, - int: () => int, - instanceof: () => _instanceof, - includes: () => _includes, - httpUrl: () => httpUrl, - hostname: () => hostname2, - hex: () => hex2, - hash: () => hash, - guid: () => guid2, - gte: () => _gte, - gt: () => _gt, - globalRegistry: () => globalRegistry, - getErrorMap: () => getErrorMap, - function: () => _function, - fromJSONSchema: () => fromJSONSchema, - formatError: () => formatError, - float64: () => float64, - float32: () => float32, - flattenError: () => flattenError, - file: () => file, - exactOptional: () => exactOptional, - enum: () => _enum2, - endsWith: () => _endsWith, - encodeAsync: () => encodeAsync2, - encode: () => encode2, - emoji: () => emoji2, - email: () => email2, - e164: () => e1642, - discriminatedUnion: () => discriminatedUnion, - describe: () => describe2, - decodeAsync: () => decodeAsync2, - decode: () => decode2, - date: () => date3, - custom: () => custom, - cuid2: () => cuid22, - cuid: () => cuid3, - core: () => exports_core2, - config: () => config, - coerce: () => exports_coerce, - codec: () => codec, - clone: () => clone, - cidrv6: () => cidrv62, - cidrv4: () => cidrv42, - check: () => check, - catch: () => _catch2, - boolean: () => boolean2, - bigint: () => bigint2, - base64url: () => base64url2, - base64: () => base642, - array: () => array, - any: () => any, - _function: () => _function, - _default: () => _default2, - _ZodString: () => _ZodString, - ZodXor: () => ZodXor, - ZodXID: () => ZodXID, - ZodVoid: () => ZodVoid, - ZodUnknown: () => ZodUnknown, - ZodUnion: () => ZodUnion, - ZodUndefined: () => ZodUndefined, - ZodUUID: () => ZodUUID, - ZodURL: () => ZodURL, - ZodULID: () => ZodULID, - ZodType: () => ZodType, - ZodTuple: () => ZodTuple, - ZodTransform: () => ZodTransform, - ZodTemplateLiteral: () => ZodTemplateLiteral, - ZodSymbol: () => ZodSymbol, - ZodSuccess: () => ZodSuccess, - ZodStringFormat: () => ZodStringFormat, - ZodString: () => ZodString, - ZodSet: () => ZodSet, - ZodRecord: () => ZodRecord, - ZodRealError: () => ZodRealError, - ZodReadonly: () => ZodReadonly, - ZodPromise: () => ZodPromise, - ZodPrefault: () => ZodPrefault, - ZodPipe: () => ZodPipe, - ZodOptional: () => ZodOptional, - ZodObject: () => ZodObject, - ZodNumberFormat: () => ZodNumberFormat, - ZodNumber: () => ZodNumber, - ZodNullable: () => ZodNullable, - ZodNull: () => ZodNull, - ZodNonOptional: () => ZodNonOptional, - ZodNever: () => ZodNever, - ZodNanoID: () => ZodNanoID, - ZodNaN: () => ZodNaN, - ZodMap: () => ZodMap, - ZodMAC: () => ZodMAC, - ZodLiteral: () => ZodLiteral, - ZodLazy: () => ZodLazy, - ZodKSUID: () => ZodKSUID, - ZodJWT: () => ZodJWT, - ZodIssueCode: () => ZodIssueCode, - ZodIntersection: () => ZodIntersection, - ZodISOTime: () => ZodISOTime, - ZodISODuration: () => ZodISODuration, - ZodISODateTime: () => ZodISODateTime, - ZodISODate: () => ZodISODate, - ZodIPv6: () => ZodIPv6, - ZodIPv4: () => ZodIPv4, - ZodGUID: () => ZodGUID, - ZodFunction: () => ZodFunction, - ZodFirstPartyTypeKind: () => ZodFirstPartyTypeKind, - ZodFile: () => ZodFile, - ZodExactOptional: () => ZodExactOptional, - ZodError: () => ZodError, - ZodEnum: () => ZodEnum, - ZodEmoji: () => ZodEmoji, - ZodEmail: () => ZodEmail, - ZodE164: () => ZodE164, - ZodDiscriminatedUnion: () => ZodDiscriminatedUnion, - ZodDefault: () => ZodDefault, - ZodDate: () => ZodDate, - ZodCustomStringFormat: () => ZodCustomStringFormat, - ZodCustom: () => ZodCustom, - ZodCodec: () => ZodCodec, - ZodCatch: () => ZodCatch, - ZodCUID2: () => ZodCUID2, - ZodCUID: () => ZodCUID, - ZodCIDRv6: () => ZodCIDRv6, - ZodCIDRv4: () => ZodCIDRv4, - ZodBoolean: () => ZodBoolean, - ZodBigIntFormat: () => ZodBigIntFormat, - ZodBigInt: () => ZodBigInt, - ZodBase64URL: () => ZodBase64URL, - ZodBase64: () => ZodBase64, - ZodArray: () => ZodArray, - ZodAny: () => ZodAny, - TimePrecision: () => TimePrecision, - NEVER: () => NEVER, - $output: () => $output, - $input: () => $input, - $brand: () => $brand -}); -var init_external = __esm(() => { - init_core2(); - init_core2(); - init_en(); - init_core2(); - init_json_schema_processors(); - init_from_json_schema(); - init_locales(); - init_iso(); - init_iso(); - init_coerce(); - init_schemas2(); - init_checks2(); - init_errors2(); - init_parse2(); - init_compat(); - config(en_default()); -}); - -// ../../../../node_modules/.bun/zod@4.3.5/node_modules/zod/index.js -var init_zod = __esm(() => { - init_external(); - init_external(); -}); - -// ../../../../packages/core/dist/services/session.js -var SessionStartEventSchema, SessionCompleteEventSchema, SessionStartEventDelayedSchema, SessionCompleteEventDelayedSchema; -var init_session = __esm(() => { - init_zod(); - SessionStartEventSchema = exports_external.object({ - id: exports_external.string().describe("the session id"), - threadId: exports_external.string().optional().describe("the thread id (optional, can be set in complete)"), - orgId: exports_external.string().describe("the organization id"), - projectId: exports_external.string().describe("the project id"), - deploymentId: exports_external.string().optional().describe("the deployment id"), - routeId: exports_external.string().describe("the route id"), - environment: exports_external.string().describe("the environment (AGENTUITY_ENVIRONMENT)"), - devmode: exports_external.boolean().describe("true if running in devmode"), - url: exports_external.string().describe("the url for the session event"), - method: exports_external.string().describe("the method for the session event"), - trigger: exports_external.enum(["agent", "api", "email", "sms", "cron", "manual", "discord", "websocket"]).describe("how the session was triggered"), - metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("optional unencrypted key-value metadata") - }).describe("The event to record a session started"); - SessionCompleteEventSchema = exports_external.object({ - id: exports_external.string().describe("the session id"), - threadId: exports_external.string().nullable().describe("the thread id (null if thread has no data)"), - error: exports_external.string().optional().describe("the optional error message if the session failed"), - agentIds: exports_external.array(exports_external.string()).optional().describe("optional array of ids for the agents that executed for the session"), - statusCode: exports_external.number().describe("the HTTP status code"), - userData: exports_external.string().optional().describe("optional JSON string of session state data"), - metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("optional unencrypted key-value metadata") - }).describe("The event to record a session completed successfully"); - SessionStartEventDelayedSchema = exports_external.intersection(SessionStartEventSchema, exports_external.object({ timestamp: exports_external.number().int().describe("the event timestamp in epoch") })); - SessionCompleteEventDelayedSchema = exports_external.intersection(SessionCompleteEventSchema, exports_external.object({ timestamp: exports_external.number().int().describe("the event timestamp in epoch") })); -}); - -// ../../../../packages/core/dist/services/stream.js -class StreamImpl { - id; - url; - #writable; - #compressed; - #adapter; - #sink; - #closed = false; - constructor(id, url2, compressed, sink, writable, adapter) { - this.id = id; - this.url = url2; - this.#compressed = compressed; - this.#adapter = adapter; - this.#sink = sink; - this.#writable = writable; - } - get bytesWritten() { - return this.#sink.total; - } - get compressed() { - return this.#compressed; - } - get locked() { - return this.#writable.locked; - } - async write(chunk) { - let binaryChunk; - if (chunk instanceof Uint8Array) { - binaryChunk = chunk; - } else if (typeof chunk === "string") { - binaryChunk = encoder.encode(chunk); - } else if (chunk instanceof ArrayBuffer) { - binaryChunk = new Uint8Array(chunk); - } else if (typeof chunk === "object" && chunk !== null) { - binaryChunk = encoder.encode(safeStringify(chunk)); - } else { - binaryChunk = encoder.encode(String(chunk)); - } - await this.#sink.write(binaryChunk); - } - async close() { - if (this.#closed) { - return; - } - this.#closed = true; - try { - await this.#sink.close(); - } catch (error48) { - if (error48 instanceof TypeError && (error48.message.includes("closed") || error48.message.includes("errored") || error48.message.includes("Cannot close"))) { - return; - } - if (error48 instanceof TypeError && error48.message.includes("locked")) { - return; - } - throw error48; - } - } - abort(reason) { - return this.#writable.abort(reason); - } - getWriter() { - return this.#writable.getWriter(); - } - getReader() { - const url2 = this.url; - const adapter = this.#adapter; - let ac = null; - return new NativeReadableStream({ - async start(controller) { - try { - ac = new AbortController; - const res = await adapter.invoke(url2, { - method: "GET", - signal: ac.signal, - binary: true - }); - const response = res.response; - if (!res.ok) { - controller.error(new ReadStreamFailedError({ - status: response.status, - message: `Failed to read stream: ${response.status} ${response.statusText}` - })); - return; - } - if (!response.body) { - controller.error(new ReadStreamFailedError({ - status: response.status, - message: "Response body was null" - })); - return; - } - const reader = response.body.getReader(); - try { - while (true) { - const { done, value } = await reader.read(); - if (done) - break; - if (value) - controller.enqueue(value); - } - controller.close(); - } catch (error48) { - controller.error(error48); - } - } catch (error48) { - controller.error(error48); - } - }, - cancel(reason) { - if (ac) { - ac.abort(reason); - ac = null; - } - } - }); - } -} -function isCompressionAvailable() { - return typeof NativeCompressionStream !== "undefined" && NativeCompressionStream !== null; -} - -class UnderlyingSinkState { - adapter; - total = 0; - closed = false; - url; - props; - compressionEnabled = false; - writable = null; - constructor(url2, adapter, props) { - this.url = url2; - this.adapter = adapter; - this.props = props; - } - async start() { - this.compressionEnabled = !!(this.props?.compress && isCompressionAvailable()); - this.writable = new NativeWritableStream({ - write: async (chunk) => { - await this.write(chunk); - }, - close: async () => { - await this.close(); - }, - abort: async (reason) => { - await this.abort(reason); - } - }); - return this.writable; - } - async write(chunk) { - if (this.closed) { - return; - } - this.total += chunk.length; - const appendUrl = `${this.url}/append`; - const signal = AbortSignal.timeout(30000); - const res = await this.adapter.invoke(appendUrl, { - method: "POST", - headers: { - "Content-Type": "application/octet-stream" - }, - body: chunk, - signal - }); - if (!res.ok) { - throw new StreamAPIError({ - status: res.response.status, - message: `Append request failed: ${res.response.status} ${res.response.statusText}` - }); - } - } - async close() { - if (this.closed) { - return; - } - this.closed = true; - const completeUrl = `${this.url}/complete`; - const signal = AbortSignal.timeout(60000); - const headers = {}; - if (this.compressionEnabled) { - headers["X-Compress"] = "gzip"; - } - const res = await this.adapter.invoke(completeUrl, { - method: "POST", - headers, - signal - }); - if (!res.ok) { - throw new StreamAPIError({ - status: res.response.status, - message: `Complete request failed: ${res.response.status} ${res.response.statusText}` - }); - } - } - async abort(_reason) { - this.closed = true; - } -} - -class StreamStorageService { - #adapter; - #baseUrl; - constructor(baseUrl, adapter) { - this.#adapter = adapter; - this.#baseUrl = baseUrl; - } - async create(name, props) { - if (!name || name.length < 1 || name.length > 254) { - throw new StreamNameInvalidError; - } - const url2 = this.#baseUrl; - const signal = AbortSignal.timeout(1e4); - const attributes = { - name - }; - if (!props?.contentType) { - props = props ?? {}; - props.contentType = "application/octet-stream"; - } - if (props?.metadata) { - attributes["metadata"] = JSON.stringify(props.metadata); - } - if (props?.contentType) { - attributes["stream.content_type"] = props.contentType; - } - const body = JSON.stringify({ - name, - ...props?.metadata && { metadata: props.metadata }, - ...props?.contentType && { contentType: props.contentType } - }); - const res = await this.#adapter.invoke(url2, { - method: "POST", - body, - contentType: "application/json", - signal, - telemetry: { - name: "agentuity.stream.create", - attributes - } - }); - if (res.ok) { - const streamUrl = buildUrl(this.#baseUrl, res.data.id); - const sink = new UnderlyingSinkState(streamUrl, this.#adapter, props); - const writable = await sink.start(); - const stream = new StreamImpl(res.data.id, streamUrl, sink.compressionEnabled, sink, writable, this.#adapter); - return stream; - } - throw await toServiceException("POST", url2, res.response); - } - async list(params) { - const attributes = {}; - if (params?.limit !== undefined) { - if (params.limit <= 0 || params.limit > 1000) { - throw new StreamLimitInvalidError; - } - attributes["limit"] = String(params.limit); - } - if (params?.offset !== undefined) { - attributes["offset"] = String(params.offset); - } - if (params?.name) { - attributes["name"] = params.name; - } - if (params?.metadata) { - attributes["metadata"] = JSON.stringify(params.metadata); - } - const requestBody = {}; - if (params?.name) { - requestBody.name = params.name; - } - if (params?.metadata) { - requestBody.metadata = params.metadata; - } - if (params?.limit) { - requestBody.limit = params.limit; - } - if (params?.offset) { - requestBody.offset = params.offset; - } - const signal = AbortSignal.timeout(30000); - const url2 = buildUrl(this.#baseUrl, "list"); - const res = await this.#adapter.invoke(url2, { - method: "POST", - signal, - body: JSON.stringify(requestBody), - contentType: "application/json", - telemetry: { - name: "agentuity.stream.list", - attributes - } - }); - if (res.ok) { - return { - success: res.data.success, - message: res.data.message, - streams: res.data.streams.map((s) => ({ - id: s.id, - name: s.name, - metadata: s.metadata, - url: s.url, - sizeBytes: s.size_bytes - })), - total: res.data.total - }; - } - throw await toServiceException("POST", url2, res.response); - } - async get(id) { - if (!id || typeof id !== "string" || id.trim().length === 0) { - throw new StreamIDRequiredError; - } - const signal = AbortSignal.timeout(30000); - const url2 = buildUrl(this.#baseUrl, id, "info"); - const res = await this.#adapter.invoke(url2, { - method: "POST", - signal, - body: "{}", - contentType: "application/json", - telemetry: { - name: "agentuity.stream.get", - attributes: { - "stream.id": id - } - } - }); - if (res.ok) { - return { - id: res.data.id, - name: res.data.name, - metadata: res.data.metadata, - url: res.data.url, - sizeBytes: res.data.size_bytes - }; - } - throw await toServiceException("POST", url2, res.response); - } - async download(id) { - if (!id || typeof id !== "string" || id.trim().length === 0) { - throw new StreamIDRequiredError; - } - const signal = AbortSignal.timeout(300000); - const url2 = buildUrl(this.#baseUrl, id); - const res = await this.#adapter.invoke(url2, { - method: "GET", - signal, - binary: true, - telemetry: { - name: "agentuity.stream.download", - attributes: { - "stream.id": id - } - } - }); - if (res.ok && res.response.body) { - return res.response.body; - } - throw await toServiceException("GET", url2, res.response); - } - async delete(id) { - if (!id || typeof id !== "string" || id.trim().length === 0) { - throw new StreamIDRequiredError; - } - const signal = AbortSignal.timeout(30000); - const url2 = buildUrl(this.#baseUrl, id); - const res = await this.#adapter.invoke(url2, { - method: "DELETE", - signal, - telemetry: { - name: "agentuity.stream.delete", - attributes: { - "stream.id": id - } - } - }); - if (res.ok) { - return; - } - throw await toServiceException("DELETE", url2, res.response); - } -} -var isNode, streamWeb, NativeWritableStream, NativeReadableStream, NativeCompressionStream, encoder, ReadStreamFailedError, StreamAPIError, StreamNameInvalidError, StreamLimitInvalidError, StreamIDRequiredError; -var init_stream = __esm(() => { - init__util(); - init_error(); - isNode = typeof process !== "undefined" && process.versions != null && process.versions.node != null; - streamWeb = isNode ? __require("stream/web") : globalThis; - NativeWritableStream = streamWeb.WritableStream; - NativeReadableStream = streamWeb.ReadableStream; - NativeCompressionStream = streamWeb.CompressionStream ?? globalThis.CompressionStream; - encoder = new TextEncoder; - ReadStreamFailedError = StructuredError("ReadStreamFailedError")(); - StreamAPIError = StructuredError("StreamAPIError")(); - StreamNameInvalidError = StructuredError("StreamNameInvalidError", "Stream name must be between 1 and 254 characters"); - StreamLimitInvalidError = StructuredError("StreamLimitInvalidError", "Stream limit must be greater than 0 and less than or equal to 1000"); - StreamIDRequiredError = StructuredError("StreamIDRequiredError", "Stream id is required and must be a non-empty string"); -}); - -// ../../../../packages/core/dist/services/vector.js -class VectorStorageService { - #adapter; - #baseUrl; - constructor(baseUrl, adapter) { - this.#adapter = adapter; - this.#baseUrl = baseUrl; - } - async upsert(name, ...documents) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - if (!documents || documents.length === 0) { - throw new VectorStorageDocumentRequiredError; - } - for (const doc2 of documents) { - if (!doc2.key || typeof doc2.key !== "string" || doc2.key.trim().length === 0) { - throw new VectorStorageDocumentKeyMissingError; - } - if (!("embeddings" in doc2) && !("document" in doc2)) { - throw new VectorStorageInvalidError; - } - if ("embeddings" in doc2 && doc2.embeddings) { - if (!Array.isArray(doc2.embeddings) || doc2.embeddings.length === 0) { - throw new VectorStorageEmbeddingInvalidError; - } - } - if ("document" in doc2 && doc2.document) { - if (typeof doc2.document !== "string" || doc2.document.trim().length === 0) { - throw new VectorStorageDocumentInvalidError; - } - } - } - const url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url2, { - method: "PUT", - body: safeStringify(documents), - contentType: "application/json", - signal, - telemetry: { - name: "agentuity.vector.upsert", - attributes: { - name, - count: String(documents.length) - } - } - }); - if (res.ok) { - if (res.data.success) { - return res.data.data.map((o, index) => ({ - key: documents[index].key, - id: o.id - })); - } - throw new VectorStorageResponseError({ - status: res.response.status, - message: res.data.message - }); - } - throw await toServiceException("PUT", url2, res.response); - } - async get(name, key) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - if (!key || typeof key !== "string" || key.trim().length === 0) { - throw new VectorStorageKeyRequiredError; - } - const url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/${encodeURIComponent(name)}/${encodeURIComponent(key)}`); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url2, { - method: "GET", - signal, - telemetry: { - name: "agentuity.vector.get", - attributes: { - name, - key - } - } - }); - if (res.response.status === 404) { - return { exists: false }; - } - if (res.ok) { - if (res.data.success) { - return { - data: res.data.data, - exists: true - }; - } - throw new VectorStorageResponseError({ - status: res.response.status, - message: res.data.message - }); - } - throw await toServiceException("GET", url2, res.response); - } - async getMany(name, ...keys) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - if (keys.length === 0) { - return new Map; - } - for (const key of keys) { - if (!key || typeof key !== "string" || key.trim().length === 0) { - throw new VectorStorageKeysError; - } - } - const results = await Promise.all(keys.map((key) => this.get(name, key))); - const resultMap = new Map; - results.forEach((result, index) => { - if (result.exists) { - resultMap.set(keys[index], result.data); - } - }); - return resultMap; - } - async search(name, params) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - if (!params.query || typeof params.query !== "string" || params.query.trim().length === 0) { - throw new VectorStorageQueryError; - } - if (params.limit !== undefined) { - if (typeof params.limit !== "number" || params.limit <= 0) { - throw new VectorStorageLimitError; - } - } - if (params.similarity !== undefined) { - if (typeof params.similarity !== "number" || params.similarity < 0 || params.similarity > 1) { - throw new VectorStorageSimilarityError; - } - } - if (params.metadata !== undefined) { - if (typeof params.metadata !== "object" || params.metadata === null) { - throw new VectorStorageMetadataError; - } - } - const url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/search/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(30000); - const attributes = { - name, - query: params.query - }; - if (params.limit !== undefined) { - attributes.limit = String(params.limit); - } - if (params.similarity !== undefined) { - attributes.similarity = String(params.similarity); - } - const res = await this.#adapter.invoke(url2, { - method: "POST", - body: safeStringify(params), - contentType: "application/json", - signal, - telemetry: { - name: "agentuity.vector.search", - attributes - } - }); - if (res.response.status === 404) { - return []; - } - if (res.ok) { - if (res.data.success) { - return res.data.data; - } - throw new VectorStorageResponseError({ - status: res.response.status, - message: res.data.message - }); - } - throw await toServiceException("POST", url2, res.response); - } - async delete(name, ...keys) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - if (keys.length === 0) { - return 0; - } - for (const key of keys) { - if (!key || typeof key !== "string" || key.trim().length === 0) { - throw new VectorStorageKeysError; - } - } - const signal = AbortSignal.timeout(30000); - let url2; - let body; - if (keys.length === 1) { - url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/${encodeURIComponent(name)}/${encodeURIComponent(keys[0])}`); - } else { - url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/${encodeURIComponent(name)}`); - body = safeStringify({ keys }); - } - const res = await this.#adapter.invoke(url2, { - method: "DELETE", - ...body && { body, contentType: "application/json" }, - signal, - telemetry: { - name: "agentuity.vector.delete", - attributes: { - name, - count: String(keys.length) - } - } - }); - if (res.response.status === 404) { - return 0; - } - if (res.ok) { - if (res.data.success) { - return res.data.data; - } - throw new VectorStorageResponseError({ - status: res.response.status, - message: res.data.message - }); - } - throw await toServiceException("DELETE", url2, res.response); - } - async exists(name) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - try { - await this.search(name, { query: "_exists_check_", limit: 1 }); - return true; - } catch (error48) { - if (error48 instanceof Error) { - const statusMatch = error48.message.match(/(\d{3})/); - if (statusMatch && statusMatch[1] === "404") { - return false; - } - } - throw error48; - } - } - async getStats(name) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - const url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/stats/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url2, { - method: "GET", - signal, - telemetry: { - name: "agentuity.vector.getStats", - attributes: { - name - } - } - }); - if (res.ok) { - return res.data; - } - if (res.response.status === 404) { - return { sum: 0, count: 0 }; - } - throw await toServiceException("GET", url2, res.response); - } - async getAllStats() { - const url2 = buildUrl(this.#baseUrl, "/vector/2025-03-17/stats"); - const signal = AbortSignal.timeout(1e4); - const res = await this.#adapter.invoke(url2, { - method: "GET", - signal, - telemetry: { - name: "agentuity.vector.getAllStats", - attributes: {} - } - }); - if (res.ok) { - return res.data; - } - throw await toServiceException("GET", url2, res.response); - } - async getNamespaces() { - const stats = await this.getAllStats(); - return Object.keys(stats); - } - async deleteNamespace(name) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new VectorStorageNameRequiredError; - } - const url2 = buildUrl(this.#baseUrl, `/vector/2025-03-17/${encodeURIComponent(name)}`); - const signal = AbortSignal.timeout(30000); - const res = await this.#adapter.invoke(url2, { - method: "DELETE", - signal, - telemetry: { - name: "agentuity.vector.deleteNamespace", - attributes: { - name - } - } - }); - if (res.response.status === 404) { - return; - } - if (res.ok) { - if (res.data.success) { - return; - } - throw new VectorStorageResponseError({ - status: res.response.status, - message: res.data.message - }); - } - throw await toServiceException("DELETE", url2, res.response); - } -} -var VectorStorageNameRequiredError, VectorStorageKeyRequiredError, VectorStorageKeysError, VectorStorageQueryError, VectorStorageLimitError, VectorStorageSimilarityError, VectorStorageMetadataError, VectorStorageDocumentRequiredError, VectorStorageDocumentKeyMissingError, VectorStorageInvalidError, VectorStorageEmbeddingInvalidError, VectorStorageDocumentInvalidError, VectorStorageResponseError; -var init_vector = __esm(() => { - init__util(); - init_error(); - VectorStorageNameRequiredError = StructuredError("VectorStorageNameRequiredError", "Vector storage name is required and must be a non-empty string"); - VectorStorageKeyRequiredError = StructuredError("VectorStorageKeyRequiredError", "Vector storage key is required and must be a non-empty string"); - VectorStorageKeysError = StructuredError("VectorStorageKeysError", "Vector storage requires all keys to be non-empty strings"); - VectorStorageQueryError = StructuredError("VectorStorageQueryError", "Vector storage query property is required and must be a non-empty string"); - VectorStorageLimitError = StructuredError("VectorStorageLimitError", "Vector storage limit property must be positive number"); - VectorStorageSimilarityError = StructuredError("VectorStorageSimilarityError", "Vector storage similarity property must be a number between 0.0 and 1.0"); - VectorStorageMetadataError = StructuredError("VectorStorageMetadataError", "Vector storage metadata property must be a valid object"); - VectorStorageDocumentRequiredError = StructuredError("VectorStorageDocumentRequiredError", "Vector storage requires at least one document for this method"); - VectorStorageDocumentKeyMissingError = StructuredError("VectorStorageDocumentKeyMissingError", "Vector storage requires each document to have a non-empty key"); - VectorStorageInvalidError = StructuredError("VectorStorageInvalidError", "Vector storage requires each document to have either embeddings or document property"); - VectorStorageEmbeddingInvalidError = StructuredError("VectorStorageEmbeddingInvalidError", "Vector storage requires each embeddings property to have a non-empty array of numbers"); - VectorStorageDocumentInvalidError = StructuredError("VectorStorageDocumentInvalidError", "Vector storage requires each document property to have a non-empty string value"); - VectorStorageResponseError = StructuredError("VectorStorageResponseError")(); -}); - -// ../../../../packages/core/dist/services/evalrun.js -var EvalRunStartEventSchema, EvalRunCompleteEventSchema, EvalRunStartEventDelayedSchema, EvalRunCompleteEventDelayedSchema; -var init_evalrun = __esm(() => { - init_zod(); - EvalRunStartEventSchema = exports_external.object({ - id: exports_external.string().describe("the eval run id"), - sessionId: exports_external.string().describe("the session id"), - evalId: exports_external.string().describe("the evaluation record id (evalid_...)"), - evalIdentifier: exports_external.string().describe("the stable eval identifier (eval_...)"), - orgId: exports_external.string().describe("the organization id"), - projectId: exports_external.string().describe("the project id"), - devmode: exports_external.boolean().describe("true if running in devmode"), - deploymentId: exports_external.string().optional().describe("the deployment id"), - spanId: exports_external.string().optional().describe("the span id") - }).describe("The event to record an eval run started"); - EvalRunCompleteEventSchema = exports_external.object({ - id: exports_external.string().describe("the eval run id"), - error: exports_external.string().optional().describe("the optional error message if the eval run failed"), - result: exports_external.any().optional().describe("the eval run result") - }).describe("The event to record an eval run completed"); - EvalRunStartEventDelayedSchema = exports_external.intersection(EvalRunStartEventSchema, exports_external.object({ timestamp: exports_external.number().describe("the event timestamp in epoch") })); - EvalRunCompleteEventDelayedSchema = exports_external.intersection(EvalRunCompleteEventSchema, exports_external.object({ timestamp: exports_external.number().describe("the event timestamp in epoch") })); -}); - -// ../../../../packages/core/dist/string.js -function toCamelCase(str) { - const result = str.replace(/[-_\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : "").replace(/^(.)/, (char) => char.toLowerCase()); - return /^\d/.test(result) ? `_${result}` : result; -} - -// ../../../../packages/core/dist/index.js -var init_dist = __esm(() => { - init_error(); - init_exception(); - init_keyvalue(); - init_session(); - init_stream(); - init_vector(); - init_evalrun(); - init__util(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/platform/node/globalThis.js -var require_globalThis = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - exports._globalThis = typeof globalThis === "object" ? globalThis : global; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/platform/node/index.js -var require_node = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { - return m[k]; - } }); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_globalThis(), exports); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/platform/index.js -var require_platform = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { - return m[k]; - } }); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_node(), exports); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/version.js -var require_version = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "1.9.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/internal/semver.js -var require_semver = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isCompatible = exports._makeCompatibilityCheck = undefined; - var version_1 = require_version(); - var re = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; - function _makeCompatibilityCheck(ownVersion) { - const acceptedVersions = new Set([ownVersion]); - const rejectedVersions = new Set; - const myVersionMatch = ownVersion.match(re); - if (!myVersionMatch) { - return () => false; - } - const ownVersionParsed = { - major: +myVersionMatch[1], - minor: +myVersionMatch[2], - patch: +myVersionMatch[3], - prerelease: myVersionMatch[4] - }; - if (ownVersionParsed.prerelease != null) { - return function isExactmatch(globalVersion) { - return globalVersion === ownVersion; - }; - } - function _reject(v) { - rejectedVersions.add(v); - return false; - } - function _accept(v) { - acceptedVersions.add(v); - return true; - } - return function isCompatible(globalVersion) { - if (acceptedVersions.has(globalVersion)) { - return true; - } - if (rejectedVersions.has(globalVersion)) { - return false; - } - const globalVersionMatch = globalVersion.match(re); - if (!globalVersionMatch) { - return _reject(globalVersion); - } - const globalVersionParsed = { - major: +globalVersionMatch[1], - minor: +globalVersionMatch[2], - patch: +globalVersionMatch[3], - prerelease: globalVersionMatch[4] - }; - if (globalVersionParsed.prerelease != null) { - return _reject(globalVersion); - } - if (ownVersionParsed.major !== globalVersionParsed.major) { - return _reject(globalVersion); - } - if (ownVersionParsed.major === 0) { - if (ownVersionParsed.minor === globalVersionParsed.minor && ownVersionParsed.patch <= globalVersionParsed.patch) { - return _accept(globalVersion); - } - return _reject(globalVersion); - } - if (ownVersionParsed.minor <= globalVersionParsed.minor) { - return _accept(globalVersion); - } - return _reject(globalVersion); - }; - } - exports._makeCompatibilityCheck = _makeCompatibilityCheck; - exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/internal/global-utils.js -var require_global_utils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.unregisterGlobal = exports.getGlobal = exports.registerGlobal = undefined; - var platform_1 = require_platform(); - var version_1 = require_version(); - var semver_1 = require_semver(); - var major = version_1.VERSION.split(".")[0]; - var GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(`opentelemetry.js.api.${major}`); - var _global = platform_1._globalThis; - function registerGlobal(type, instance, diag, allowOverride = false) { - var _a2; - const api2 = _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a2 = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a2 !== undefined ? _a2 : { - version: version_1.VERSION - }; - if (!allowOverride && api2[type]) { - const err = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${type}`); - diag.error(err.stack || err.message); - return false; - } - if (api2.version !== version_1.VERSION) { - const err = new Error(`@opentelemetry/api: Registration of version v${api2.version} for ${type} does not match previously registered API v${version_1.VERSION}`); - diag.error(err.stack || err.message); - return false; - } - api2[type] = instance; - diag.debug(`@opentelemetry/api: Registered a global for ${type} v${version_1.VERSION}.`); - return true; - } - exports.registerGlobal = registerGlobal; - function getGlobal(type) { - var _a2, _b; - const globalVersion = (_a2 = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a2 === undefined ? undefined : _a2.version; - if (!globalVersion || !(0, semver_1.isCompatible)(globalVersion)) { - return; - } - return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === undefined ? undefined : _b[type]; - } - exports.getGlobal = getGlobal; - function unregisterGlobal(type, diag) { - diag.debug(`@opentelemetry/api: Unregistering a global for ${type} v${version_1.VERSION}.`); - const api2 = _global[GLOBAL_OPENTELEMETRY_API_KEY]; - if (api2) { - delete api2[type]; - } - } - exports.unregisterGlobal = unregisterGlobal; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/ComponentLogger.js -var require_ComponentLogger = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DiagComponentLogger = undefined; - var global_utils_1 = require_global_utils(); - - class DiagComponentLogger { - constructor(props) { - this._namespace = props.namespace || "DiagComponentLogger"; - } - debug(...args) { - return logProxy("debug", this._namespace, args); - } - error(...args) { - return logProxy("error", this._namespace, args); - } - info(...args) { - return logProxy("info", this._namespace, args); - } - warn(...args) { - return logProxy("warn", this._namespace, args); - } - verbose(...args) { - return logProxy("verbose", this._namespace, args); - } - } - exports.DiagComponentLogger = DiagComponentLogger; - function logProxy(funcName, namespace, args) { - const logger = (0, global_utils_1.getGlobal)("diag"); - if (!logger) { - return; - } - args.unshift(namespace); - return logger[funcName](...args); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/types.js -var require_types = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DiagLogLevel = undefined; - var DiagLogLevel; - (function(DiagLogLevel2) { - DiagLogLevel2[DiagLogLevel2["NONE"] = 0] = "NONE"; - DiagLogLevel2[DiagLogLevel2["ERROR"] = 30] = "ERROR"; - DiagLogLevel2[DiagLogLevel2["WARN"] = 50] = "WARN"; - DiagLogLevel2[DiagLogLevel2["INFO"] = 60] = "INFO"; - DiagLogLevel2[DiagLogLevel2["DEBUG"] = 70] = "DEBUG"; - DiagLogLevel2[DiagLogLevel2["VERBOSE"] = 80] = "VERBOSE"; - DiagLogLevel2[DiagLogLevel2["ALL"] = 9999] = "ALL"; - })(DiagLogLevel = exports.DiagLogLevel || (exports.DiagLogLevel = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/internal/logLevelLogger.js -var require_logLevelLogger = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createLogLevelDiagLogger = undefined; - var types_1 = require_types(); - function createLogLevelDiagLogger(maxLevel, logger) { - if (maxLevel < types_1.DiagLogLevel.NONE) { - maxLevel = types_1.DiagLogLevel.NONE; - } else if (maxLevel > types_1.DiagLogLevel.ALL) { - maxLevel = types_1.DiagLogLevel.ALL; - } - logger = logger || {}; - function _filterFunc(funcName, theLevel) { - const theFunc = logger[funcName]; - if (typeof theFunc === "function" && maxLevel >= theLevel) { - return theFunc.bind(logger); - } - return function() {}; - } - return { - error: _filterFunc("error", types_1.DiagLogLevel.ERROR), - warn: _filterFunc("warn", types_1.DiagLogLevel.WARN), - info: _filterFunc("info", types_1.DiagLogLevel.INFO), - debug: _filterFunc("debug", types_1.DiagLogLevel.DEBUG), - verbose: _filterFunc("verbose", types_1.DiagLogLevel.VERBOSE) - }; - } - exports.createLogLevelDiagLogger = createLogLevelDiagLogger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/diag.js -var require_diag = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DiagAPI = undefined; - var ComponentLogger_1 = require_ComponentLogger(); - var logLevelLogger_1 = require_logLevelLogger(); - var types_1 = require_types(); - var global_utils_1 = require_global_utils(); - var API_NAME = "diag"; - - class DiagAPI { - constructor() { - function _logProxy(funcName) { - return function(...args) { - const logger = (0, global_utils_1.getGlobal)("diag"); - if (!logger) - return; - return logger[funcName](...args); - }; - } - const self2 = this; - const setLogger = (logger, optionsOrLogLevel = { logLevel: types_1.DiagLogLevel.INFO }) => { - var _a2, _b, _c; - if (logger === self2) { - const err = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); - self2.error((_a2 = err.stack) !== null && _a2 !== undefined ? _a2 : err.message); - return false; - } - if (typeof optionsOrLogLevel === "number") { - optionsOrLogLevel = { - logLevel: optionsOrLogLevel - }; - } - const oldLogger = (0, global_utils_1.getGlobal)("diag"); - const newLogger = (0, logLevelLogger_1.createLogLevelDiagLogger)((_b = optionsOrLogLevel.logLevel) !== null && _b !== undefined ? _b : types_1.DiagLogLevel.INFO, logger); - if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) { - const stack = (_c = new Error().stack) !== null && _c !== undefined ? _c : ""; - oldLogger.warn(`Current logger will be overwritten from ${stack}`); - newLogger.warn(`Current logger will overwrite one already registered from ${stack}`); - } - return (0, global_utils_1.registerGlobal)("diag", newLogger, self2, true); - }; - self2.setLogger = setLogger; - self2.disable = () => { - (0, global_utils_1.unregisterGlobal)(API_NAME, self2); - }; - self2.createComponentLogger = (options) => { - return new ComponentLogger_1.DiagComponentLogger(options); - }; - self2.verbose = _logProxy("verbose"); - self2.debug = _logProxy("debug"); - self2.info = _logProxy("info"); - self2.warn = _logProxy("warn"); - self2.error = _logProxy("error"); - } - static instance() { - if (!this._instance) { - this._instance = new DiagAPI; - } - return this._instance; - } - } - exports.DiagAPI = DiagAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/internal/baggage-impl.js -var require_baggage_impl = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaggageImpl = undefined; - - class BaggageImpl { - constructor(entries) { - this._entries = entries ? new Map(entries) : new Map; - } - getEntry(key) { - const entry = this._entries.get(key); - if (!entry) { - return; - } - return Object.assign({}, entry); - } - getAllEntries() { - return Array.from(this._entries.entries()).map(([k, v]) => [k, v]); - } - setEntry(key, entry) { - const newBaggage = new BaggageImpl(this._entries); - newBaggage._entries.set(key, entry); - return newBaggage; - } - removeEntry(key) { - const newBaggage = new BaggageImpl(this._entries); - newBaggage._entries.delete(key); - return newBaggage; - } - removeEntries(...keys) { - const newBaggage = new BaggageImpl(this._entries); - for (const key of keys) { - newBaggage._entries.delete(key); - } - return newBaggage; - } - clear() { - return new BaggageImpl; - } - } - exports.BaggageImpl = BaggageImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.js -var require_symbol = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.baggageEntryMetadataSymbol = undefined; - exports.baggageEntryMetadataSymbol = Symbol("BaggageEntryMetadata"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/utils.js -var require_utils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.baggageEntryMetadataFromString = exports.createBaggage = undefined; - var diag_1 = require_diag(); - var baggage_impl_1 = require_baggage_impl(); - var symbol_1 = require_symbol(); - var diag = diag_1.DiagAPI.instance(); - function createBaggage(entries = {}) { - return new baggage_impl_1.BaggageImpl(new Map(Object.entries(entries))); - } - exports.createBaggage = createBaggage; - function baggageEntryMetadataFromString(str) { - if (typeof str !== "string") { - diag.error(`Cannot create baggage metadata from unknown type: ${typeof str}`); - str = ""; - } - return { - __TYPE__: symbol_1.baggageEntryMetadataSymbol, - toString() { - return str; - } - }; - } - exports.baggageEntryMetadataFromString = baggageEntryMetadataFromString; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/context.js -var require_context = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ROOT_CONTEXT = exports.createContextKey = undefined; - function createContextKey(description) { - return Symbol.for(description); - } - exports.createContextKey = createContextKey; - - class BaseContext { - constructor(parentContext) { - const self2 = this; - self2._currentContext = parentContext ? new Map(parentContext) : new Map; - self2.getValue = (key) => self2._currentContext.get(key); - self2.setValue = (key, value) => { - const context = new BaseContext(self2._currentContext); - context._currentContext.set(key, value); - return context; - }; - self2.deleteValue = (key) => { - const context = new BaseContext(self2._currentContext); - context._currentContext.delete(key); - return context; - }; - } - } - exports.ROOT_CONTEXT = new BaseContext; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js -var require_consoleLogger = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DiagConsoleLogger = undefined; - var consoleMap = [ - { n: "error", c: "error" }, - { n: "warn", c: "warn" }, - { n: "info", c: "info" }, - { n: "debug", c: "debug" }, - { n: "verbose", c: "trace" } - ]; - - class DiagConsoleLogger { - constructor() { - function _consoleFunc(funcName) { - return function(...args) { - if (console) { - let theFunc = console[funcName]; - if (typeof theFunc !== "function") { - theFunc = console.log; - } - if (typeof theFunc === "function") { - return theFunc.apply(console, args); - } - } - }; - } - for (let i = 0;i < consoleMap.length; i++) { - this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c); - } - } - } - exports.DiagConsoleLogger = DiagConsoleLogger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js -var require_NoopMeter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createNoopMeter = exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = exports.NOOP_OBSERVABLE_GAUGE_METRIC = exports.NOOP_OBSERVABLE_COUNTER_METRIC = exports.NOOP_UP_DOWN_COUNTER_METRIC = exports.NOOP_HISTOGRAM_METRIC = exports.NOOP_GAUGE_METRIC = exports.NOOP_COUNTER_METRIC = exports.NOOP_METER = exports.NoopObservableUpDownCounterMetric = exports.NoopObservableGaugeMetric = exports.NoopObservableCounterMetric = exports.NoopObservableMetric = exports.NoopHistogramMetric = exports.NoopGaugeMetric = exports.NoopUpDownCounterMetric = exports.NoopCounterMetric = exports.NoopMetric = exports.NoopMeter = undefined; - - class NoopMeter { - constructor() {} - createGauge(_name, _options) { - return exports.NOOP_GAUGE_METRIC; - } - createHistogram(_name, _options) { - return exports.NOOP_HISTOGRAM_METRIC; - } - createCounter(_name, _options) { - return exports.NOOP_COUNTER_METRIC; - } - createUpDownCounter(_name, _options) { - return exports.NOOP_UP_DOWN_COUNTER_METRIC; - } - createObservableGauge(_name, _options) { - return exports.NOOP_OBSERVABLE_GAUGE_METRIC; - } - createObservableCounter(_name, _options) { - return exports.NOOP_OBSERVABLE_COUNTER_METRIC; - } - createObservableUpDownCounter(_name, _options) { - return exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; - } - addBatchObservableCallback(_callback, _observables) {} - removeBatchObservableCallback(_callback) {} - } - exports.NoopMeter = NoopMeter; - - class NoopMetric { - } - exports.NoopMetric = NoopMetric; - - class NoopCounterMetric extends NoopMetric { - add(_value, _attributes) {} - } - exports.NoopCounterMetric = NoopCounterMetric; - - class NoopUpDownCounterMetric extends NoopMetric { - add(_value, _attributes) {} - } - exports.NoopUpDownCounterMetric = NoopUpDownCounterMetric; - - class NoopGaugeMetric extends NoopMetric { - record(_value, _attributes) {} - } - exports.NoopGaugeMetric = NoopGaugeMetric; - - class NoopHistogramMetric extends NoopMetric { - record(_value, _attributes) {} - } - exports.NoopHistogramMetric = NoopHistogramMetric; - - class NoopObservableMetric { - addCallback(_callback) {} - removeCallback(_callback) {} - } - exports.NoopObservableMetric = NoopObservableMetric; - - class NoopObservableCounterMetric extends NoopObservableMetric { - } - exports.NoopObservableCounterMetric = NoopObservableCounterMetric; - - class NoopObservableGaugeMetric extends NoopObservableMetric { - } - exports.NoopObservableGaugeMetric = NoopObservableGaugeMetric; - - class NoopObservableUpDownCounterMetric extends NoopObservableMetric { - } - exports.NoopObservableUpDownCounterMetric = NoopObservableUpDownCounterMetric; - exports.NOOP_METER = new NoopMeter; - exports.NOOP_COUNTER_METRIC = new NoopCounterMetric; - exports.NOOP_GAUGE_METRIC = new NoopGaugeMetric; - exports.NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric; - exports.NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric; - exports.NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric; - exports.NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric; - exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric; - function createNoopMeter() { - return exports.NOOP_METER; - } - exports.createNoopMeter = createNoopMeter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/Metric.js -var require_Metric = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ValueType = undefined; - var ValueType; - (function(ValueType2) { - ValueType2[ValueType2["INT"] = 0] = "INT"; - ValueType2[ValueType2["DOUBLE"] = 1] = "DOUBLE"; - })(ValueType = exports.ValueType || (exports.ValueType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.js -var require_TextMapPropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultTextMapSetter = exports.defaultTextMapGetter = undefined; - exports.defaultTextMapGetter = { - get(carrier, key) { - if (carrier == null) { - return; - } - return carrier[key]; - }, - keys(carrier) { - if (carrier == null) { - return []; - } - return Object.keys(carrier); - } - }; - exports.defaultTextMapSetter = { - set(carrier, key, value) { - if (carrier == null) { - return; - } - carrier[key] = value; - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js -var require_NoopContextManager = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopContextManager = undefined; - var context_1 = require_context(); - - class NoopContextManager { - active() { - return context_1.ROOT_CONTEXT; - } - with(_context, fn, thisArg, ...args) { - return fn.call(thisArg, ...args); - } - bind(_context, target) { - return target; - } - enable() { - return this; - } - disable() { - return this; - } - } - exports.NoopContextManager = NoopContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/context.js -var require_context2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ContextAPI = undefined; - var NoopContextManager_1 = require_NoopContextManager(); - var global_utils_1 = require_global_utils(); - var diag_1 = require_diag(); - var API_NAME = "context"; - var NOOP_CONTEXT_MANAGER = new NoopContextManager_1.NoopContextManager; - - class ContextAPI { - constructor() {} - static getInstance() { - if (!this._instance) { - this._instance = new ContextAPI; - } - return this._instance; - } - setGlobalContextManager(contextManager) { - return (0, global_utils_1.registerGlobal)(API_NAME, contextManager, diag_1.DiagAPI.instance()); - } - active() { - return this._getContextManager().active(); - } - with(context, fn, thisArg, ...args) { - return this._getContextManager().with(context, fn, thisArg, ...args); - } - bind(context, target) { - return this._getContextManager().bind(context, target); - } - _getContextManager() { - return (0, global_utils_1.getGlobal)(API_NAME) || NOOP_CONTEXT_MANAGER; - } - disable() { - this._getContextManager().disable(); - (0, global_utils_1.unregisterGlobal)(API_NAME, diag_1.DiagAPI.instance()); - } - } - exports.ContextAPI = ContextAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/trace_flags.js -var require_trace_flags = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceFlags = undefined; - var TraceFlags; - (function(TraceFlags2) { - TraceFlags2[TraceFlags2["NONE"] = 0] = "NONE"; - TraceFlags2[TraceFlags2["SAMPLED"] = 1] = "SAMPLED"; - })(TraceFlags = exports.TraceFlags || (exports.TraceFlags = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.js -var require_invalid_span_constants = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.INVALID_SPAN_CONTEXT = exports.INVALID_TRACEID = exports.INVALID_SPANID = undefined; - var trace_flags_1 = require_trace_flags(); - exports.INVALID_SPANID = "0000000000000000"; - exports.INVALID_TRACEID = "00000000000000000000000000000000"; - exports.INVALID_SPAN_CONTEXT = { - traceId: exports.INVALID_TRACEID, - spanId: exports.INVALID_SPANID, - traceFlags: trace_flags_1.TraceFlags.NONE - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/NonRecordingSpan.js -var require_NonRecordingSpan = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NonRecordingSpan = undefined; - var invalid_span_constants_1 = require_invalid_span_constants(); - - class NonRecordingSpan { - constructor(_spanContext = invalid_span_constants_1.INVALID_SPAN_CONTEXT) { - this._spanContext = _spanContext; - } - spanContext() { - return this._spanContext; - } - setAttribute(_key, _value) { - return this; - } - setAttributes(_attributes) { - return this; - } - addEvent(_name, _attributes) { - return this; - } - addLink(_link) { - return this; - } - addLinks(_links) { - return this; - } - setStatus(_status) { - return this; - } - updateName(_name) { - return this; - } - end(_endTime) {} - isRecording() { - return false; - } - recordException(_exception, _time) {} - } - exports.NonRecordingSpan = NonRecordingSpan; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/context-utils.js -var require_context_utils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSpanContext = exports.setSpanContext = exports.deleteSpan = exports.setSpan = exports.getActiveSpan = exports.getSpan = undefined; - var context_1 = require_context(); - var NonRecordingSpan_1 = require_NonRecordingSpan(); - var context_2 = require_context2(); - var SPAN_KEY = (0, context_1.createContextKey)("OpenTelemetry Context Key SPAN"); - function getSpan(context) { - return context.getValue(SPAN_KEY) || undefined; - } - exports.getSpan = getSpan; - function getActiveSpan() { - return getSpan(context_2.ContextAPI.getInstance().active()); - } - exports.getActiveSpan = getActiveSpan; - function setSpan(context, span) { - return context.setValue(SPAN_KEY, span); - } - exports.setSpan = setSpan; - function deleteSpan(context) { - return context.deleteValue(SPAN_KEY); - } - exports.deleteSpan = deleteSpan; - function setSpanContext(context, spanContext) { - return setSpan(context, new NonRecordingSpan_1.NonRecordingSpan(spanContext)); - } - exports.setSpanContext = setSpanContext; - function getSpanContext(context) { - var _a2; - return (_a2 = getSpan(context)) === null || _a2 === undefined ? undefined : _a2.spanContext(); - } - exports.getSpanContext = getSpanContext; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.js -var require_spancontext_utils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.wrapSpanContext = exports.isSpanContextValid = exports.isValidSpanId = exports.isValidTraceId = undefined; - var invalid_span_constants_1 = require_invalid_span_constants(); - var NonRecordingSpan_1 = require_NonRecordingSpan(); - var VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i; - var VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i; - function isValidTraceId(traceId) { - return VALID_TRACEID_REGEX.test(traceId) && traceId !== invalid_span_constants_1.INVALID_TRACEID; - } - exports.isValidTraceId = isValidTraceId; - function isValidSpanId(spanId) { - return VALID_SPANID_REGEX.test(spanId) && spanId !== invalid_span_constants_1.INVALID_SPANID; - } - exports.isValidSpanId = isValidSpanId; - function isSpanContextValid(spanContext) { - return isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId); - } - exports.isSpanContextValid = isSpanContextValid; - function wrapSpanContext(spanContext) { - return new NonRecordingSpan_1.NonRecordingSpan(spanContext); - } - exports.wrapSpanContext = wrapSpanContext; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js -var require_NoopTracer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopTracer = undefined; - var context_1 = require_context2(); - var context_utils_1 = require_context_utils(); - var NonRecordingSpan_1 = require_NonRecordingSpan(); - var spancontext_utils_1 = require_spancontext_utils(); - var contextApi = context_1.ContextAPI.getInstance(); - - class NoopTracer { - startSpan(name, options, context = contextApi.active()) { - const root = Boolean(options === null || options === undefined ? undefined : options.root); - if (root) { - return new NonRecordingSpan_1.NonRecordingSpan; - } - const parentFromContext = context && (0, context_utils_1.getSpanContext)(context); - if (isSpanContext(parentFromContext) && (0, spancontext_utils_1.isSpanContextValid)(parentFromContext)) { - return new NonRecordingSpan_1.NonRecordingSpan(parentFromContext); - } else { - return new NonRecordingSpan_1.NonRecordingSpan; - } - } - startActiveSpan(name, arg2, arg3, arg4) { - let opts; - let ctx; - let fn; - if (arguments.length < 2) { - return; - } else if (arguments.length === 2) { - fn = arg2; - } else if (arguments.length === 3) { - opts = arg2; - fn = arg3; - } else { - opts = arg2; - ctx = arg3; - fn = arg4; - } - const parentContext = ctx !== null && ctx !== undefined ? ctx : contextApi.active(); - const span = this.startSpan(name, opts, parentContext); - const contextWithSpanSet = (0, context_utils_1.setSpan)(parentContext, span); - return contextApi.with(contextWithSpanSet, fn, undefined, span); - } - } - exports.NoopTracer = NoopTracer; - function isSpanContext(spanContext) { - return typeof spanContext === "object" && typeof spanContext["spanId"] === "string" && typeof spanContext["traceId"] === "string" && typeof spanContext["traceFlags"] === "number"; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js -var require_ProxyTracer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProxyTracer = undefined; - var NoopTracer_1 = require_NoopTracer(); - var NOOP_TRACER = new NoopTracer_1.NoopTracer; - - class ProxyTracer { - constructor(_provider, name, version2, options) { - this._provider = _provider; - this.name = name; - this.version = version2; - this.options = options; - } - startSpan(name, options, context) { - return this._getTracer().startSpan(name, options, context); - } - startActiveSpan(_name, _options, _context, _fn) { - const tracer = this._getTracer(); - return Reflect.apply(tracer.startActiveSpan, tracer, arguments); - } - _getTracer() { - if (this._delegate) { - return this._delegate; - } - const tracer = this._provider.getDelegateTracer(this.name, this.version, this.options); - if (!tracer) { - return NOOP_TRACER; - } - this._delegate = tracer; - return this._delegate; - } - } - exports.ProxyTracer = ProxyTracer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js -var require_NoopTracerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopTracerProvider = undefined; - var NoopTracer_1 = require_NoopTracer(); - - class NoopTracerProvider { - getTracer(_name, _version, _options) { - return new NoopTracer_1.NoopTracer; - } - } - exports.NoopTracerProvider = NoopTracerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js -var require_ProxyTracerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProxyTracerProvider = undefined; - var ProxyTracer_1 = require_ProxyTracer(); - var NoopTracerProvider_1 = require_NoopTracerProvider(); - var NOOP_TRACER_PROVIDER = new NoopTracerProvider_1.NoopTracerProvider; - - class ProxyTracerProvider { - getTracer(name, version2, options) { - var _a2; - return (_a2 = this.getDelegateTracer(name, version2, options)) !== null && _a2 !== undefined ? _a2 : new ProxyTracer_1.ProxyTracer(this, name, version2, options); - } - getDelegate() { - var _a2; - return (_a2 = this._delegate) !== null && _a2 !== undefined ? _a2 : NOOP_TRACER_PROVIDER; - } - setDelegate(delegate) { - this._delegate = delegate; - } - getDelegateTracer(name, version2, options) { - var _a2; - return (_a2 = this._delegate) === null || _a2 === undefined ? undefined : _a2.getTracer(name, version2, options); - } - } - exports.ProxyTracerProvider = ProxyTracerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js -var require_SamplingResult = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SamplingDecision = undefined; - var SamplingDecision; - (function(SamplingDecision2) { - SamplingDecision2[SamplingDecision2["NOT_RECORD"] = 0] = "NOT_RECORD"; - SamplingDecision2[SamplingDecision2["RECORD"] = 1] = "RECORD"; - SamplingDecision2[SamplingDecision2["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; - })(SamplingDecision = exports.SamplingDecision || (exports.SamplingDecision = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/span_kind.js -var require_span_kind = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanKind = undefined; - var SpanKind; - (function(SpanKind2) { - SpanKind2[SpanKind2["INTERNAL"] = 0] = "INTERNAL"; - SpanKind2[SpanKind2["SERVER"] = 1] = "SERVER"; - SpanKind2[SpanKind2["CLIENT"] = 2] = "CLIENT"; - SpanKind2[SpanKind2["PRODUCER"] = 3] = "PRODUCER"; - SpanKind2[SpanKind2["CONSUMER"] = 4] = "CONSUMER"; - })(SpanKind = exports.SpanKind || (exports.SpanKind = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/status.js -var require_status = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanStatusCode = undefined; - var SpanStatusCode; - (function(SpanStatusCode2) { - SpanStatusCode2[SpanStatusCode2["UNSET"] = 0] = "UNSET"; - SpanStatusCode2[SpanStatusCode2["OK"] = 1] = "OK"; - SpanStatusCode2[SpanStatusCode2["ERROR"] = 2] = "ERROR"; - })(SpanStatusCode = exports.SpanStatusCode || (exports.SpanStatusCode = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-validators.js -var require_tracestate_validators = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateValue = exports.validateKey = undefined; - var VALID_KEY_CHAR_RANGE = "[_0-9a-z-*/]"; - var VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`; - var VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`; - var VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`); - var VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/; - var INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/; - function validateKey(key) { - return VALID_KEY_REGEX.test(key); - } - exports.validateKey = validateKey; - function validateValue(value) { - return VALID_VALUE_BASE_REGEX.test(value) && !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value); - } - exports.validateValue = validateValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-impl.js -var require_tracestate_impl = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceStateImpl = undefined; - var tracestate_validators_1 = require_tracestate_validators(); - var MAX_TRACE_STATE_ITEMS = 32; - var MAX_TRACE_STATE_LEN = 512; - var LIST_MEMBERS_SEPARATOR = ","; - var LIST_MEMBER_KEY_VALUE_SPLITTER = "="; - - class TraceStateImpl { - constructor(rawTraceState) { - this._internalState = new Map; - if (rawTraceState) - this._parse(rawTraceState); - } - set(key, value) { - const traceState = this._clone(); - if (traceState._internalState.has(key)) { - traceState._internalState.delete(key); - } - traceState._internalState.set(key, value); - return traceState; - } - unset(key) { - const traceState = this._clone(); - traceState._internalState.delete(key); - return traceState; - } - get(key) { - return this._internalState.get(key); - } - serialize() { - return this._keys().reduce((agg, key) => { - agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + this.get(key)); - return agg; - }, []).join(LIST_MEMBERS_SEPARATOR); - } - _parse(rawTraceState) { - if (rawTraceState.length > MAX_TRACE_STATE_LEN) - return; - this._internalState = rawTraceState.split(LIST_MEMBERS_SEPARATOR).reverse().reduce((agg, part) => { - const listMember = part.trim(); - const i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER); - if (i !== -1) { - const key = listMember.slice(0, i); - const value = listMember.slice(i + 1, part.length); - if ((0, tracestate_validators_1.validateKey)(key) && (0, tracestate_validators_1.validateValue)(value)) { - agg.set(key, value); - } else {} - } - return agg; - }, new Map); - if (this._internalState.size > MAX_TRACE_STATE_ITEMS) { - this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, MAX_TRACE_STATE_ITEMS)); - } - } - _keys() { - return Array.from(this._internalState.keys()).reverse(); - } - _clone() { - const traceState = new TraceStateImpl; - traceState._internalState = new Map(this._internalState); - return traceState; - } - } - exports.TraceStateImpl = TraceStateImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace/internal/utils.js -var require_utils2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createTraceState = undefined; - var tracestate_impl_1 = require_tracestate_impl(); - function createTraceState(rawTraceState) { - return new tracestate_impl_1.TraceStateImpl(rawTraceState); - } - exports.createTraceState = createTraceState; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/context-api.js -var require_context_api = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.context = undefined; - var context_1 = require_context2(); - exports.context = context_1.ContextAPI.getInstance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/diag-api.js -var require_diag_api = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.diag = undefined; - var diag_1 = require_diag(); - exports.diag = diag_1.DiagAPI.instance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/NoopMeterProvider.js -var require_NoopMeterProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NOOP_METER_PROVIDER = exports.NoopMeterProvider = undefined; - var NoopMeter_1 = require_NoopMeter(); - - class NoopMeterProvider { - getMeter(_name, _version, _options) { - return NoopMeter_1.NOOP_METER; - } - } - exports.NoopMeterProvider = NoopMeterProvider; - exports.NOOP_METER_PROVIDER = new NoopMeterProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/metrics.js -var require_metrics = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricsAPI = undefined; - var NoopMeterProvider_1 = require_NoopMeterProvider(); - var global_utils_1 = require_global_utils(); - var diag_1 = require_diag(); - var API_NAME = "metrics"; - - class MetricsAPI { - constructor() {} - static getInstance() { - if (!this._instance) { - this._instance = new MetricsAPI; - } - return this._instance; - } - setGlobalMeterProvider(provider) { - return (0, global_utils_1.registerGlobal)(API_NAME, provider, diag_1.DiagAPI.instance()); - } - getMeterProvider() { - return (0, global_utils_1.getGlobal)(API_NAME) || NoopMeterProvider_1.NOOP_METER_PROVIDER; - } - getMeter(name, version2, options) { - return this.getMeterProvider().getMeter(name, version2, options); - } - disable() { - (0, global_utils_1.unregisterGlobal)(API_NAME, diag_1.DiagAPI.instance()); - } - } - exports.MetricsAPI = MetricsAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics-api.js -var require_metrics_api = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.metrics = undefined; - var metrics_1 = require_metrics(); - exports.metrics = metrics_1.MetricsAPI.getInstance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation/NoopTextMapPropagator.js -var require_NoopTextMapPropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopTextMapPropagator = undefined; - - class NoopTextMapPropagator { - inject(_context, _carrier) {} - extract(context, _carrier) { - return context; - } - fields() { - return []; - } - } - exports.NoopTextMapPropagator = NoopTextMapPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/baggage/context-helpers.js -var require_context_helpers = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.deleteBaggage = exports.setBaggage = exports.getActiveBaggage = exports.getBaggage = undefined; - var context_1 = require_context2(); - var context_2 = require_context(); - var BAGGAGE_KEY = (0, context_2.createContextKey)("OpenTelemetry Baggage Key"); - function getBaggage(context) { - return context.getValue(BAGGAGE_KEY) || undefined; - } - exports.getBaggage = getBaggage; - function getActiveBaggage() { - return getBaggage(context_1.ContextAPI.getInstance().active()); - } - exports.getActiveBaggage = getActiveBaggage; - function setBaggage(context, baggage) { - return context.setValue(BAGGAGE_KEY, baggage); - } - exports.setBaggage = setBaggage; - function deleteBaggage(context) { - return context.deleteValue(BAGGAGE_KEY); - } - exports.deleteBaggage = deleteBaggage; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/propagation.js -var require_propagation = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PropagationAPI = undefined; - var global_utils_1 = require_global_utils(); - var NoopTextMapPropagator_1 = require_NoopTextMapPropagator(); - var TextMapPropagator_1 = require_TextMapPropagator(); - var context_helpers_1 = require_context_helpers(); - var utils_1 = require_utils(); - var diag_1 = require_diag(); - var API_NAME = "propagation"; - var NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator_1.NoopTextMapPropagator; - - class PropagationAPI { - constructor() { - this.createBaggage = utils_1.createBaggage; - this.getBaggage = context_helpers_1.getBaggage; - this.getActiveBaggage = context_helpers_1.getActiveBaggage; - this.setBaggage = context_helpers_1.setBaggage; - this.deleteBaggage = context_helpers_1.deleteBaggage; - } - static getInstance() { - if (!this._instance) { - this._instance = new PropagationAPI; - } - return this._instance; - } - setGlobalPropagator(propagator) { - return (0, global_utils_1.registerGlobal)(API_NAME, propagator, diag_1.DiagAPI.instance()); - } - inject(context, carrier, setter = TextMapPropagator_1.defaultTextMapSetter) { - return this._getGlobalPropagator().inject(context, carrier, setter); - } - extract(context, carrier, getter = TextMapPropagator_1.defaultTextMapGetter) { - return this._getGlobalPropagator().extract(context, carrier, getter); - } - fields() { - return this._getGlobalPropagator().fields(); - } - disable() { - (0, global_utils_1.unregisterGlobal)(API_NAME, diag_1.DiagAPI.instance()); - } - _getGlobalPropagator() { - return (0, global_utils_1.getGlobal)(API_NAME) || NOOP_TEXT_MAP_PROPAGATOR; - } - } - exports.PropagationAPI = PropagationAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/propagation-api.js -var require_propagation_api = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.propagation = undefined; - var propagation_1 = require_propagation(); - exports.propagation = propagation_1.PropagationAPI.getInstance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/api/trace.js -var require_trace = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceAPI = undefined; - var global_utils_1 = require_global_utils(); - var ProxyTracerProvider_1 = require_ProxyTracerProvider(); - var spancontext_utils_1 = require_spancontext_utils(); - var context_utils_1 = require_context_utils(); - var diag_1 = require_diag(); - var API_NAME = "trace"; - - class TraceAPI { - constructor() { - this._proxyTracerProvider = new ProxyTracerProvider_1.ProxyTracerProvider; - this.wrapSpanContext = spancontext_utils_1.wrapSpanContext; - this.isSpanContextValid = spancontext_utils_1.isSpanContextValid; - this.deleteSpan = context_utils_1.deleteSpan; - this.getSpan = context_utils_1.getSpan; - this.getActiveSpan = context_utils_1.getActiveSpan; - this.getSpanContext = context_utils_1.getSpanContext; - this.setSpan = context_utils_1.setSpan; - this.setSpanContext = context_utils_1.setSpanContext; - } - static getInstance() { - if (!this._instance) { - this._instance = new TraceAPI; - } - return this._instance; - } - setGlobalTracerProvider(provider) { - const success2 = (0, global_utils_1.registerGlobal)(API_NAME, this._proxyTracerProvider, diag_1.DiagAPI.instance()); - if (success2) { - this._proxyTracerProvider.setDelegate(provider); - } - return success2; - } - getTracerProvider() { - return (0, global_utils_1.getGlobal)(API_NAME) || this._proxyTracerProvider; - } - getTracer(name, version2) { - return this.getTracerProvider().getTracer(name, version2); - } - disable() { - (0, global_utils_1.unregisterGlobal)(API_NAME, diag_1.DiagAPI.instance()); - this._proxyTracerProvider = new ProxyTracerProvider_1.ProxyTracerProvider; - } - } - exports.TraceAPI = TraceAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace-api.js -var require_trace_api = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.trace = undefined; - var trace_1 = require_trace(); - exports.trace = trace_1.TraceAPI.getInstance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/index.js -var require_src = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.trace = exports.propagation = exports.metrics = exports.diag = exports.context = exports.INVALID_SPAN_CONTEXT = exports.INVALID_TRACEID = exports.INVALID_SPANID = exports.isValidSpanId = exports.isValidTraceId = exports.isSpanContextValid = exports.createTraceState = exports.TraceFlags = exports.SpanStatusCode = exports.SpanKind = exports.SamplingDecision = exports.ProxyTracerProvider = exports.ProxyTracer = exports.defaultTextMapSetter = exports.defaultTextMapGetter = exports.ValueType = exports.createNoopMeter = exports.DiagLogLevel = exports.DiagConsoleLogger = exports.ROOT_CONTEXT = exports.createContextKey = exports.baggageEntryMetadataFromString = undefined; - var utils_1 = require_utils(); - Object.defineProperty(exports, "baggageEntryMetadataFromString", { enumerable: true, get: function() { - return utils_1.baggageEntryMetadataFromString; - } }); - var context_1 = require_context(); - Object.defineProperty(exports, "createContextKey", { enumerable: true, get: function() { - return context_1.createContextKey; - } }); - Object.defineProperty(exports, "ROOT_CONTEXT", { enumerable: true, get: function() { - return context_1.ROOT_CONTEXT; - } }); - var consoleLogger_1 = require_consoleLogger(); - Object.defineProperty(exports, "DiagConsoleLogger", { enumerable: true, get: function() { - return consoleLogger_1.DiagConsoleLogger; - } }); - var types_1 = require_types(); - Object.defineProperty(exports, "DiagLogLevel", { enumerable: true, get: function() { - return types_1.DiagLogLevel; - } }); - var NoopMeter_1 = require_NoopMeter(); - Object.defineProperty(exports, "createNoopMeter", { enumerable: true, get: function() { - return NoopMeter_1.createNoopMeter; - } }); - var Metric_1 = require_Metric(); - Object.defineProperty(exports, "ValueType", { enumerable: true, get: function() { - return Metric_1.ValueType; - } }); - var TextMapPropagator_1 = require_TextMapPropagator(); - Object.defineProperty(exports, "defaultTextMapGetter", { enumerable: true, get: function() { - return TextMapPropagator_1.defaultTextMapGetter; - } }); - Object.defineProperty(exports, "defaultTextMapSetter", { enumerable: true, get: function() { - return TextMapPropagator_1.defaultTextMapSetter; - } }); - var ProxyTracer_1 = require_ProxyTracer(); - Object.defineProperty(exports, "ProxyTracer", { enumerable: true, get: function() { - return ProxyTracer_1.ProxyTracer; - } }); - var ProxyTracerProvider_1 = require_ProxyTracerProvider(); - Object.defineProperty(exports, "ProxyTracerProvider", { enumerable: true, get: function() { - return ProxyTracerProvider_1.ProxyTracerProvider; - } }); - var SamplingResult_1 = require_SamplingResult(); - Object.defineProperty(exports, "SamplingDecision", { enumerable: true, get: function() { - return SamplingResult_1.SamplingDecision; - } }); - var span_kind_1 = require_span_kind(); - Object.defineProperty(exports, "SpanKind", { enumerable: true, get: function() { - return span_kind_1.SpanKind; - } }); - var status_1 = require_status(); - Object.defineProperty(exports, "SpanStatusCode", { enumerable: true, get: function() { - return status_1.SpanStatusCode; - } }); - var trace_flags_1 = require_trace_flags(); - Object.defineProperty(exports, "TraceFlags", { enumerable: true, get: function() { - return trace_flags_1.TraceFlags; - } }); - var utils_2 = require_utils2(); - Object.defineProperty(exports, "createTraceState", { enumerable: true, get: function() { - return utils_2.createTraceState; - } }); - var spancontext_utils_1 = require_spancontext_utils(); - Object.defineProperty(exports, "isSpanContextValid", { enumerable: true, get: function() { - return spancontext_utils_1.isSpanContextValid; - } }); - Object.defineProperty(exports, "isValidTraceId", { enumerable: true, get: function() { - return spancontext_utils_1.isValidTraceId; - } }); - Object.defineProperty(exports, "isValidSpanId", { enumerable: true, get: function() { - return spancontext_utils_1.isValidSpanId; - } }); - var invalid_span_constants_1 = require_invalid_span_constants(); - Object.defineProperty(exports, "INVALID_SPANID", { enumerable: true, get: function() { - return invalid_span_constants_1.INVALID_SPANID; - } }); - Object.defineProperty(exports, "INVALID_TRACEID", { enumerable: true, get: function() { - return invalid_span_constants_1.INVALID_TRACEID; - } }); - Object.defineProperty(exports, "INVALID_SPAN_CONTEXT", { enumerable: true, get: function() { - return invalid_span_constants_1.INVALID_SPAN_CONTEXT; - } }); - var context_api_1 = require_context_api(); - Object.defineProperty(exports, "context", { enumerable: true, get: function() { - return context_api_1.context; - } }); - var diag_api_1 = require_diag_api(); - Object.defineProperty(exports, "diag", { enumerable: true, get: function() { - return diag_api_1.diag; - } }); - var metrics_api_1 = require_metrics_api(); - Object.defineProperty(exports, "metrics", { enumerable: true, get: function() { - return metrics_api_1.metrics; - } }); - var propagation_api_1 = require_propagation_api(); - Object.defineProperty(exports, "propagation", { enumerable: true, get: function() { - return propagation_api_1.propagation; - } }); - var trace_api_1 = require_trace_api(); - Object.defineProperty(exports, "trace", { enumerable: true, get: function() { - return trace_api_1.trace; - } }); - exports.default = { - context: context_api_1.context, - diag: diag_api_1.diag, - metrics: metrics_api_1.metrics, - propagation: propagation_api_1.propagation, - trace: trace_api_1.trace - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/url.js -var splitPath = (path) => { - const paths = path.split("/"); - if (paths[0] === "") { - paths.shift(); - } - return paths; -}, splitRoutingPath = (routePath) => { - const { groups, path } = extractGroupsFromPath(routePath); - const paths = splitPath(path); - return replaceGroupMarks(paths, groups); -}, extractGroupsFromPath = (path) => { - const groups = []; - path = path.replace(/\{[^}]+\}/g, (match, index) => { - const mark = `@${index}`; - groups.push([mark, match]); - return mark; - }); - return { groups, path }; -}, replaceGroupMarks = (paths, groups) => { - for (let i = groups.length - 1;i >= 0; i--) { - const [mark] = groups[i]; - for (let j = paths.length - 1;j >= 0; j--) { - if (paths[j].includes(mark)) { - paths[j] = paths[j].replace(mark, groups[i][1]); - break; - } - } - } - return paths; -}, patternCache, getPattern = (label, next) => { - if (label === "*") { - return "*"; - } - const match = label.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/); - if (match) { - const cacheKey = `${label}#${next}`; - if (!patternCache[cacheKey]) { - if (match[2]) { - patternCache[cacheKey] = next && next[0] !== ":" && next[0] !== "*" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)]; - } else { - patternCache[cacheKey] = [label, match[1], true]; - } - } - return patternCache[cacheKey]; - } - return null; -}, tryDecode = (str, decoder) => { - try { - return decoder(str); - } catch { - return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => { - try { - return decoder(match); - } catch { - return match; - } - }); - } -}, tryDecodeURI = (str) => tryDecode(str, decodeURI), getPath = (request) => { - const url2 = request.url; - const start = url2.indexOf("/", url2.indexOf(":") + 4); - let i = start; - for (;i < url2.length; i++) { - const charCode = url2.charCodeAt(i); - if (charCode === 37) { - const queryIndex = url2.indexOf("?", i); - const path = url2.slice(start, queryIndex === -1 ? undefined : queryIndex); - return tryDecodeURI(path.includes("%25") ? path.replace(/%25/g, "%2525") : path); - } else if (charCode === 63) { - break; - } - } - return url2.slice(start, i); -}, getPathNoStrict = (request) => { - const result = getPath(request); - return result.length > 1 && result.at(-1) === "/" ? result.slice(0, -1) : result; -}, mergePath = (base, sub, ...rest) => { - if (rest.length) { - sub = mergePath(sub, ...rest); - } - return `${base?.[0] === "/" ? "" : "/"}${base}${sub === "/" ? "" : `${base?.at(-1) === "/" ? "" : "/"}${sub?.[0] === "/" ? sub.slice(1) : sub}`}`; -}, checkOptionalParameter = (path) => { - if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(":")) { - return null; - } - const segments = path.split("/"); - const results = []; - let basePath = ""; - segments.forEach((segment) => { - if (segment !== "" && !/\:/.test(segment)) { - basePath += "/" + segment; - } else if (/\:/.test(segment)) { - if (/\?/.test(segment)) { - if (results.length === 0 && basePath === "") { - results.push("/"); - } else { - results.push(basePath); - } - const optionalSegment = segment.replace("?", ""); - basePath += "/" + optionalSegment; - results.push(basePath); - } else { - basePath += "/" + segment; - } - } - }); - return results.filter((v, i, a) => a.indexOf(v) === i); -}, _decodeURI = (value) => { - if (!/[%+]/.test(value)) { - return value; - } - if (value.indexOf("+") !== -1) { - value = value.replace(/\+/g, " "); - } - return value.indexOf("%") !== -1 ? tryDecode(value, decodeURIComponent_) : value; -}, _getQueryParam = (url2, key, multiple) => { - let encoded; - if (!multiple && key && !/[%+]/.test(key)) { - let keyIndex2 = url2.indexOf("?", 8); - if (keyIndex2 === -1) { - return; - } - if (!url2.startsWith(key, keyIndex2 + 1)) { - keyIndex2 = url2.indexOf(`&${key}`, keyIndex2 + 1); - } - while (keyIndex2 !== -1) { - const trailingKeyCode = url2.charCodeAt(keyIndex2 + key.length + 1); - if (trailingKeyCode === 61) { - const valueIndex = keyIndex2 + key.length + 2; - const endIndex = url2.indexOf("&", valueIndex); - return _decodeURI(url2.slice(valueIndex, endIndex === -1 ? undefined : endIndex)); - } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) { - return ""; - } - keyIndex2 = url2.indexOf(`&${key}`, keyIndex2 + 1); - } - encoded = /[%+]/.test(url2); - if (!encoded) { - return; - } - } - const results = {}; - encoded ??= /[%+]/.test(url2); - let keyIndex = url2.indexOf("?", 8); - while (keyIndex !== -1) { - const nextKeyIndex = url2.indexOf("&", keyIndex + 1); - let valueIndex = url2.indexOf("=", keyIndex); - if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) { - valueIndex = -1; - } - let name = url2.slice(keyIndex + 1, valueIndex === -1 ? nextKeyIndex === -1 ? undefined : nextKeyIndex : valueIndex); - if (encoded) { - name = _decodeURI(name); - } - keyIndex = nextKeyIndex; - if (name === "") { - continue; - } - let value; - if (valueIndex === -1) { - value = ""; - } else { - value = url2.slice(valueIndex + 1, nextKeyIndex === -1 ? undefined : nextKeyIndex); - if (encoded) { - value = _decodeURI(value); - } - } - if (multiple) { - if (!(results[name] && Array.isArray(results[name]))) { - results[name] = []; - } - results[name].push(value); - } else { - results[name] ??= value; - } - } - return key ? results[key] : results; -}, getQueryParam, getQueryParams = (url2, key) => { - return _getQueryParam(url2, key, true); -}, decodeURIComponent_; -var init_url = __esm(() => { - patternCache = {}; - getQueryParam = _getQueryParam; - decodeURIComponent_ = decodeURIComponent; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/cookie.js -var algorithm, getCryptoKey = async (secret) => { - const secretBuf = typeof secret === "string" ? new TextEncoder().encode(secret) : secret; - return await crypto.subtle.importKey("raw", secretBuf, algorithm, false, ["sign", "verify"]); -}, makeSignature = async (value, secret) => { - const key = await getCryptoKey(secret); - const signature = await crypto.subtle.sign(algorithm.name, key, new TextEncoder().encode(value)); - return btoa(String.fromCharCode(...new Uint8Array(signature))); -}, verifySignature = async (base64Signature, value, secret) => { - try { - const signatureBinStr = atob(base64Signature); - const signature = new Uint8Array(signatureBinStr.length); - for (let i = 0, len = signatureBinStr.length;i < len; i++) { - signature[i] = signatureBinStr.charCodeAt(i); - } - return await crypto.subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value)); - } catch { - return false; - } -}, validCookieNameRegEx, validCookieValueRegEx, parse5 = (cookie, name) => { - if (name && cookie.indexOf(name) === -1) { - return {}; - } - const pairs = cookie.trim().split(";"); - const parsedCookie = {}; - for (let pairStr of pairs) { - pairStr = pairStr.trim(); - const valueStartPos = pairStr.indexOf("="); - if (valueStartPos === -1) { - continue; - } - const cookieName = pairStr.substring(0, valueStartPos).trim(); - if (name && name !== cookieName || !validCookieNameRegEx.test(cookieName)) { - continue; - } - let cookieValue = pairStr.substring(valueStartPos + 1).trim(); - if (cookieValue.startsWith('"') && cookieValue.endsWith('"')) { - cookieValue = cookieValue.slice(1, -1); - } - if (validCookieValueRegEx.test(cookieValue)) { - parsedCookie[cookieName] = cookieValue.indexOf("%") !== -1 ? tryDecode(cookieValue, decodeURIComponent_) : cookieValue; - if (name) { - break; - } - } - } - return parsedCookie; -}, parseSigned = async (cookie, secret, name) => { - const parsedCookie = {}; - const secretKey = await getCryptoKey(secret); - for (const [key, value] of Object.entries(parse5(cookie, name))) { - const signatureStartPos = value.lastIndexOf("."); - if (signatureStartPos < 1) { - continue; - } - const signedValue = value.substring(0, signatureStartPos); - const signature = value.substring(signatureStartPos + 1); - if (signature.length !== 44 || !signature.endsWith("=")) { - continue; - } - const isVerified = await verifySignature(signature, signedValue, secretKey); - parsedCookie[key] = isVerified ? signedValue : false; - } - return parsedCookie; -}, _serialize = (name, value, opt = {}) => { - let cookie = `${name}=${value}`; - if (name.startsWith("__Secure-") && !opt.secure) { - throw new Error("__Secure- Cookie must have Secure attributes"); - } - if (name.startsWith("__Host-")) { - if (!opt.secure) { - throw new Error("__Host- Cookie must have Secure attributes"); - } - if (opt.path !== "/") { - throw new Error('__Host- Cookie must have Path attributes with "/"'); - } - if (opt.domain) { - throw new Error("__Host- Cookie must not have Domain attributes"); - } - } - if (opt && typeof opt.maxAge === "number" && opt.maxAge >= 0) { - if (opt.maxAge > 34560000) { - throw new Error("Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration."); - } - cookie += `; Max-Age=${opt.maxAge | 0}`; - } - if (opt.domain && opt.prefix !== "host") { - cookie += `; Domain=${opt.domain}`; - } - if (opt.path) { - cookie += `; Path=${opt.path}`; - } - if (opt.expires) { - if (opt.expires.getTime() - Date.now() > 34560000000) { - throw new Error("Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future."); - } - cookie += `; Expires=${opt.expires.toUTCString()}`; - } - if (opt.httpOnly) { - cookie += "; HttpOnly"; - } - if (opt.secure) { - cookie += "; Secure"; - } - if (opt.sameSite) { - cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`; - } - if (opt.priority) { - cookie += `; Priority=${opt.priority.charAt(0).toUpperCase() + opt.priority.slice(1)}`; - } - if (opt.partitioned) { - if (!opt.secure) { - throw new Error("Partitioned Cookie must have Secure attributes"); - } - cookie += "; Partitioned"; - } - return cookie; -}, serializeSigned = async (name, value, secret, opt = {}) => { - const signature = await makeSignature(value, secret); - value = `${value}.${signature}`; - value = encodeURIComponent(value); - return _serialize(name, value, opt); -}; -var init_cookie = __esm(() => { - init_url(); - algorithm = { name: "HMAC", hash: "SHA-256" }; - validCookieNameRegEx = /^[\w!#$%&'*.^`|~+-]+$/; - validCookieValueRegEx = /^[ !#-:<-[\]-~]*$/; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/cookie/index.js -var getCookie = (c, key, prefix) => { - const cookie = c.req.raw.headers.get("Cookie"); - if (typeof key === "string") { - if (!cookie) { - return; - } - let finalKey = key; - if (prefix === "secure") { - finalKey = "__Secure-" + key; - } else if (prefix === "host") { - finalKey = "__Host-" + key; - } - const obj2 = parse5(cookie, finalKey); - return obj2[finalKey]; - } - if (!cookie) { - return {}; - } - const obj = parse5(cookie); - return obj; -}, getSignedCookie = async (c, secret, key, prefix) => { - const cookie = c.req.raw.headers.get("Cookie"); - if (typeof key === "string") { - if (!cookie) { - return; - } - let finalKey = key; - if (prefix === "secure") { - finalKey = "__Secure-" + key; - } else if (prefix === "host") { - finalKey = "__Host-" + key; - } - const obj2 = await parseSigned(cookie, secret, finalKey); - return obj2[finalKey]; - } - if (!cookie) { - return {}; - } - const obj = await parseSigned(cookie, secret); - return obj; -}, generateSignedCookie = async (name, value, secret, opt) => { - let cookie; - if (opt?.prefix === "secure") { - cookie = await serializeSigned("__Secure-" + name, value, secret, { - path: "/", - ...opt, - secure: true - }); - } else if (opt?.prefix === "host") { - cookie = await serializeSigned("__Host-" + name, value, secret, { - ...opt, - path: "/", - secure: true, - domain: undefined - }); - } else { - cookie = await serializeSigned(name, value, secret, { path: "/", ...opt }); - } - return cookie; -}, setSignedCookie = async (c, name, value, secret, opt) => { - const cookie = await generateSignedCookie(name, value, secret, opt); - c.header("set-cookie", cookie, { append: true }); -}; -var init_cookie2 = __esm(() => { - init_cookie(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/http-exception.js -var HTTPException; -var init_http_exception = __esm(() => { - HTTPException = class extends Error { - res; - status; - constructor(status = 500, options) { - super(options?.message, { cause: options?.cause }); - this.res = options?.res; - this.status = status; - } - getResponse() { - if (this.res) { - const newResponse = new Response(this.res.body, { - status: this.status, - headers: this.res.headers - }); - return newResponse; - } - return new Response(this.message, { - status: this.status - }); - } - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/crypto.js -var init_crypto = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/buffer.js -var bufferToFormData = (arrayBuffer, contentType) => { - const response = new Response(arrayBuffer, { - headers: { - "Content-Type": contentType - } - }); - return response.formData(); -}; -var init_buffer = __esm(() => { - init_crypto(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/validator/validator.js -var jsonRegex, multipartRegex, urlencodedRegex, validator = (target, validationFunc) => { - return async (c, next) => { - let value = {}; - const contentType = c.req.header("Content-Type"); - switch (target) { - case "json": - if (!contentType || !jsonRegex.test(contentType)) { - break; - } - try { - value = await c.req.json(); - } catch { - const message = "Malformed JSON in request body"; - throw new HTTPException(400, { message }); - } - break; - case "form": { - if (!contentType || !(multipartRegex.test(contentType) || urlencodedRegex.test(contentType))) { - break; - } - let formData; - if (c.req.bodyCache.formData) { - formData = await c.req.bodyCache.formData; - } else { - try { - const arrayBuffer = await c.req.arrayBuffer(); - formData = await bufferToFormData(arrayBuffer, contentType); - c.req.bodyCache.formData = formData; - } catch (e) { - let message = "Malformed FormData request."; - message += e instanceof Error ? ` ${e.message}` : ` ${String(e)}`; - throw new HTTPException(400, { message }); - } - } - const form = {}; - formData.forEach((value2, key) => { - if (key.endsWith("[]")) { - (form[key] ??= []).push(value2); - } else if (Array.isArray(form[key])) { - form[key].push(value2); - } else if (key in form) { - form[key] = [form[key], value2]; - } else { - form[key] = value2; - } - }); - value = form; - break; - } - case "query": - value = Object.fromEntries(Object.entries(c.req.queries()).map(([k, v]) => { - return v.length === 1 ? [k, v[0]] : [k, v]; - })); - break; - case "param": - value = c.req.param(); - break; - case "header": - value = c.req.header(); - break; - case "cookie": - value = getCookie(c); - break; - } - const res = await validationFunc(value, c); - if (res instanceof Response) { - return res; - } - c.req.addValidatedData(target, res); - return await next(); - }; -}; -var init_validator = __esm(() => { - init_cookie2(); - init_http_exception(); - init_buffer(); - jsonRegex = /^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/; - multipartRegex = /^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/; - urlencodedRegex = /^application\/x-www-form-urlencoded(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/validator/index.js -var init_validator2 = __esm(() => { - init_validator(); -}); - -// ../../../../packages/runtime/dist/_config.js -import { readFileSync, existsSync } from "fs"; -import { join } from "path"; -function init() { - if (inited) { - return; - } - const f = join(import.meta.dir, isProduction() ? "package.json" : "/../package.json"); - if (existsSync(f)) { - try { - const pkg = JSON.parse(readFileSync(f, "utf-8")); - appName = pkg.name; - appVersion = pkg.version; - } catch {} - } - inited = true; -} -function getSDKVersion() { - return process.env.AGENTUITY_CLOUD_SDK_VERSION ?? "unknown"; -} -function getAppName() { - init(); - return appName ?? "unknown"; -} -function getAppVersion() { - init(); - return appVersion ?? "unknown"; -} -function getOrganizationId() { - return process.env.AGENTUITY_CLOUD_ORG_ID; -} -function getProjectId() { - return process.env.AGENTUITY_CLOUD_PROJECT_ID; -} -function getDeploymentId() { - return process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID; -} -function isDevMode() { - return process.env.AGENTUITY_SDK_DEV_MODE === "true"; -} -function isProduction() { - return getEnvironment() === "production" && !isDevMode(); -} -function getCLIVersion() { - return process.env.AGENTUITY_CLI_VERSION ?? "unknown"; -} -function getEnvironment() { - return process.env.AGENTUITY_ENVIRONMENT || "development"; -} -function isAuthenticated() { - return !!process.env.AGENTUITY_SDK_KEY; -} -var appName, appVersion, inited = false, AGENT_RUNTIME, INTERNAL_AGENT, CURRENT_AGENT, AGENT_IDS; -var init__config = __esm(() => { - AGENT_RUNTIME = Symbol("AGENT_RUNTIME"); - INTERNAL_AGENT = Symbol("INTERNAL_AGENT"); - CURRENT_AGENT = Symbol("CURRENT_AGENT"); - AGENT_IDS = Symbol("AGENT_IDS"); -}); - -// ../../../../packages/server/dist/api/api.js -class APIClient { - #baseUrl; - #apiKey; - #config; - #logger; - constructor(baseUrl, logger, apiKeyOrConfig, config2) { - this.#baseUrl = baseUrl; - this.#logger = logger; - if (typeof apiKeyOrConfig === "string") { - this.#apiKey = apiKeyOrConfig; - this.#config = config2; - } else { - this.#apiKey = undefined; - this.#config = apiKeyOrConfig; - } - if (!this.#apiKey && process.env.AGENTUITY_SDK_KEY) { - this.#apiKey = process.env.AGENTUITY_SDK_KEY; - } - } - async get(endpoint, responseSchema, signal) { - return this.request("GET", endpoint, responseSchema, undefined, undefined, signal); - } - async post(endpoint, body, responseSchema, bodySchema, signal) { - return this.request("POST", endpoint, responseSchema, body, bodySchema, signal); - } - async put(endpoint, body, responseSchema, bodySchema, signal) { - return this.request("PUT", endpoint, responseSchema, body, bodySchema, signal); - } - async delete(endpoint, responseSchema, signal) { - return this.request("DELETE", endpoint, responseSchema, undefined, undefined, signal); - } - async patch(endpoint, body, responseSchema, bodySchema, signal) { - return this.request("PATCH", endpoint, responseSchema, body, bodySchema, signal); - } - async rawGet(endpoint, signal) { - return this.#makeRequest("GET", endpoint, undefined, signal); - } - async rawPost(endpoint, body, contentType, signal) { - return this.#makeRequest("POST", endpoint, body, signal, contentType); - } - async request(method, endpoint, responseSchema, body, bodySchema, signal) { - if (body !== undefined && bodySchema) { - const validationResult = bodySchema.safeParse(body); - if (!validationResult.success) { - throw new ValidationInputError({ - url: endpoint, - issues: toIssues(validationResult.error.issues) - }); - } - } - const response = await this.#makeRequest(method, endpoint, body, signal); - let data; - if (response.status === 204 || response.headers.get("content-length") === "0") { - data = null; - } else { - const text = await response.text(); - if (text === "") { - data = null; - } else { - const contentType = response.headers.get("content-type"); - if (contentType?.includes("application/json")) { - data = JSON.parse(text); - } else { - data = text; - } - } - } - if (responseSchema) { - const validationResult = responseSchema.safeParse(data); - if (!validationResult.success) { - throw new ValidationOutputError({ - url: endpoint, - issues: toIssues(validationResult.error.issues), - sessionId: response.headers.get("x-session-id") - }); - } - return validationResult.data; - } - return; - } - async#makeRequest(method, endpoint, body, signal, contentType) { - this.#logger.trace("sending %s to %s%s", method, this.#baseUrl, endpoint); - const maxRetries = this.#config?.maxRetries ?? 3; - const baseDelayMs = this.#config?.retryDelayMs ?? 100; - const url2 = `${this.#baseUrl}${endpoint}`; - const headers = { - "Content-Type": contentType ?? "application/json" - }; - if (!contentType || contentType === "application/json") { - headers["Accept"] = "application/json"; - } - if (this.#config?.userAgent) { - headers["User-Agent"] = this.#config.userAgent; - } - if (this.#apiKey) { - headers["Authorization"] = `Bearer ${this.#apiKey}`; - } - if (this.#config?.headers) { - Object.keys(this.#config.headers).forEach((key) => headers[key] = this.#config.headers[key]); - } - const canRetry = !(body instanceof ReadableStream); - for (let attempt = 0;attempt <= maxRetries; attempt++) { - try { - let response; - try { - let requestBody; - if (body !== undefined) { - if (contentType && contentType !== "application/json") { - requestBody = body; - } else { - requestBody = JSON.stringify(body); - } - } - response = await fetch(url2, { - method, - headers, - body: requestBody, - signal - }); - } catch (ex) { - this.#logger.debug("fetch returned an error trying to access: %s. %s", url2, ex); - const _ex = ex; - let retryable = false; - if (_ex.code === "ConnectionRefused" || _ex.code === "ECONNREFUSED") { - retryable = true; - } else if (_ex.name === "TypeError" || ex instanceof TypeError) { - retryable = true; - } - if (retryable) { - response = new Response(null, { status: 503 }); - } else { - throw new APIError({ - url: url2, - status: 0, - cause: ex - }); - } - } - const sessionId = response.headers.get("x-session-id"); - const retryableStatuses = [409, 501, 503]; - if (canRetry && retryableStatuses.includes(response.status) && attempt < maxRetries) { - let delayMs = this.#getRetryDelay(attempt, baseDelayMs); - if (response.status === 409) { - const rateLimitDelay = this.#getRateLimitDelay(response); - if (rateLimitDelay !== null) { - delayMs = rateLimitDelay; - this.#logger.debug(`Got 409 sending to ${url2} with rate limit headers, waiting ${delayMs}ms (attempt ${attempt + 1}/${maxRetries + 1}, will delay ${delayMs}ms), sessionId: ${sessionId ?? null}`); - } else { - this.#logger.debug(`Got 409 sending to ${url2}, retrying with backoff ${delayMs}ms (attempt ${attempt + 1}/${maxRetries + 1}, will delay ${delayMs}ms), sessionId: ${sessionId ?? null}`); - } - } else { - this.#logger.debug(`Got ${response.status} sending to ${url2}, retrying (attempt ${attempt + 1}/${maxRetries + 1}, will delay ${delayMs}ms), sessionId: ${sessionId ?? null}`); - } - await this.#sleep(delayMs); - this.#logger.debug(`after sleep for ${url2}, sessionId: ${sessionId ?? null}`); - continue; - } - if (!response.ok) { - const responseBody = await response.text(); - const contentType2 = response.headers.get("content-type"); - let errorData; - const isJsonResponse = contentType2?.includes("application/json") || contentType2?.includes("+json"); - if (isJsonResponse) { - try { - errorData = APIErrorSchema.parse(JSON.parse(responseBody)); - } catch (parseEx) { - this.#logger.debug("Failed to parse JSON error response from API: %s (url: %s, sessionId: %s)", parseEx, url2, sessionId); - } - } else { - this.#logger.debug("Received non-JSON error response (content-type: %s), skipping structured error parsing (url: %s, sessionId: %s)", contentType2 ?? "unknown", url2, sessionId); - } - const sanitizedHeaders = { ...headers }; - for (const key in sanitizedHeaders) { - const lk = key.toLowerCase(); - if (lk === "authorization" || lk === "x-api-key" || lk.includes("secret") || lk.includes("key") || lk.includes("token")) { - sanitizedHeaders[key] = "REDACTED"; - } - } - this.#logger.debug("API Error Details:"); - this.#logger.debug(" URL:", url2); - this.#logger.debug(" Method:", method); - this.#logger.debug(" Status:", response.status, response.statusText); - this.#logger.debug(" Headers:", JSON.stringify(sanitizedHeaders, null, 2)); - this.#logger.debug(" Response:", responseBody); - if (errorData?.code === "UPGRADE_REQUIRED") { - if (this.#config?.skipVersionCheck) { - this.#logger.debug("Skipping version check (configured to skip)"); - throw new UpgradeRequiredError({ sessionId }); - } - throw new UpgradeRequiredError({ sessionId }); - } - if (typeof errorData?.error === "object" && errorData?.error?.name === "ZodError" && errorData.error.issues) { - throw new ValidationOutputError({ - url: url2, - issues: errorData.error.issues, - sessionId - }); - } - if (errorData?.message) { - throw new APIError({ - url: url2, - status: response.status, - message: typeof errorData.error === "string" ? errorData.error : errorData.message ?? "The API encountered an unexpected error attempting to reach the service.", - sessionId - }); - } - throw new APIError({ - message: this.#getStatusAwareErrorMessage(response.status, isJsonResponse ?? false), - url: url2, - status: response.status, - sessionId - }); - } - this.#logger.debug("%s succeeded with status: %d", url2, response.status); - if (response.status === 204 || response.headers.get("content-length") === "0") { - return new Response(null, { status: 204 }); - } - return response; - } catch (error48) { - this.#logger.debug("error sending to %s: %s", url2, error48); - const isRetryable = this.#isRetryableError(error48); - if (isRetryable && attempt < maxRetries) { - this.#logger.debug(`Connection error, retrying (attempt ${attempt + 1}/${maxRetries + 1}):`, error48); - await this.#sleep(this.#getRetryDelay(attempt, baseDelayMs)); - continue; - } - throw error48; - } - } - this.#logger.debug("max retries trying: %s", url2); - throw new MaxRetriesError; - } - #isRetryableError(error48) { - if (error48 && typeof error48 === "object") { - const err = error48; - return err.code === "ECONNRESET" || err.code === "ETIMEDOUT" || err.code === "ECONNREFUSED" || err.code === "ENOTFOUND"; - } - return false; - } - #getRetryDelay(attempt, baseDelayMs) { - const exponentialDelay = baseDelayMs * Math.pow(2, attempt); - const jitter = 0.5 + Math.random() * 0.5; - return Math.floor(exponentialDelay * jitter); - } - #sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); - } - #getRateLimitDelay(response) { - const retryAfter = response.headers.get("Retry-After"); - if (retryAfter) { - const seconds = parseInt(retryAfter, 10); - if (!isNaN(seconds)) { - return seconds * 1000; - } - const retryDate = new Date(retryAfter); - if (!isNaN(retryDate.getTime())) { - const delayMs = retryDate.getTime() - Date.now(); - return Math.max(0, delayMs); - } - } - const rateLimitReset = response.headers.get("X-RateLimit-Reset"); - if (rateLimitReset) { - const resetTime = parseInt(rateLimitReset, 10); - if (!isNaN(resetTime)) { - const delayMs = resetTime * 1000 - Date.now(); - return Math.max(0, delayMs); - } - } - const rateLimitRetryAfter = response.headers.get("X-RateLimit-Retry-After"); - if (rateLimitRetryAfter) { - const seconds = parseInt(rateLimitRetryAfter, 10); - if (!isNaN(seconds)) { - return seconds * 1000; - } - } - return null; - } - #getStatusAwareErrorMessage(status, isJsonResponse) { - switch (status) { - case 400: - return "The API request was invalid (HTTP 400). Please check your request parameters."; - case 401: - return "Authentication failed (HTTP 401). Please check your credentials or try logging in again."; - case 403: - return "Access denied (HTTP 403). You do not have permission to perform this action."; - case 404: - return isJsonResponse ? "The requested resource was not found (HTTP 404)." : "The API endpoint was not found (HTTP 404). Please verify your API URL configuration is correct."; - case 409: - return "A conflict occurred (HTTP 409). The resource may already exist or be in use."; - case 429: - return "Too many requests (HTTP 429). Please wait a moment and try again."; - case 500: - return "The API server encountered an internal error (HTTP 500). Please try again later."; - case 502: - return "The API service is temporarily unavailable (HTTP 502). Please try again later."; - case 503: - return "The API service is currently unavailable (HTTP 503). Please try again later."; - case 504: - return "The API request timed out (HTTP 504). Please try again later."; - default: - return `The API returned an unexpected error (HTTP ${status}).`; - } - } -} -var ZodIssuesSchema, toIssues = (issues) => { - return issues.map((issue2) => ({ - code: issue2.code, - input: issue2.input, - path: issue2.path.map((x) => typeof x === "number" ? x : String(x)), - message: issue2.message - })); -}, APIErrorSchema, APIError, ValidationInputError, ValidationOutputError, UpgradeRequiredError, MaxRetriesError, APIResponseSchema = (dataSchema) => exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true), - data: dataSchema - }) -]), APIResponseSchemaOptionalData = (dataSchema) => exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true), - data: dataSchema.optional() - }) -]), APIResponseSchemaNoData = () => exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true) - }) -]); -var init_api2 = __esm(() => { - init_zod(); - init_dist(); - ZodIssuesSchema = exports_external.array(exports_external.object({ - code: exports_external.string(), - input: exports_external.unknown().optional(), - path: exports_external.array(exports_external.union([exports_external.string(), exports_external.number()])), - message: exports_external.string() - })); - APIErrorSchema = exports_external.object({ - success: exports_external.boolean(), - code: exports_external.string().optional(), - message: exports_external.string().optional(), - error: exports_external.union([ - exports_external.string(), - exports_external.object({ - name: exports_external.string().optional(), - issues: ZodIssuesSchema.optional() - }) - ]).optional(), - details: exports_external.record(exports_external.string(), exports_external.unknown()).optional() - }); - APIError = StructuredError("APIErrorResponse")(); - ValidationInputError = StructuredError("ValidationInputError", "There was an error validating the API input data.")(); - ValidationOutputError = StructuredError("ValidationOutputError", "There was an unexpected error validating the API response data.")(); - UpgradeRequiredError = StructuredError("UpgradeRequiredError", "Upgrade required to continue. Please see https://agentuity.dev/CLI/installation to download the latest version of the SDK.")(); - MaxRetriesError = StructuredError("MaxRetriesError", "Max Retries attempted and continued failures exhausted."); -}); - -// ../../../../packages/server/dist/api/apikey/create.js -var APIKeyCreateResponseSchema, APIKeyCreateFullResponseSchema; -var init_create = __esm(() => { - init_zod(); - init_api2(); - APIKeyCreateResponseSchema = exports_external.object({ - id: exports_external.string().describe("the API key id"), - value: exports_external.string().describe("the API key value") - }); - APIKeyCreateFullResponseSchema = APIResponseSchema(APIKeyCreateResponseSchema); -}); - -// ../../../../packages/server/dist/api/apikey/delete.js -var APIKeyDeleteResponseSchema; -var init_delete = __esm(() => { - init_zod(); - init_api2(); - APIKeyDeleteResponseSchema = APIResponseSchema(exports_external.number().describe("number of rows affected")); -}); - -// ../../../../packages/server/dist/api/apikey/get.js -var APIKeyDetailSchema, APIKeyGetResponseSchema; -var init_get = __esm(() => { - init_zod(); - init_api2(); - APIKeyDetailSchema = exports_external.object({ - id: exports_external.string().describe("the API key id"), - name: exports_external.string().describe("the API key name"), - orgId: exports_external.string().describe("the organization id"), - type: exports_external.string().describe("the API key type"), - expiresAt: exports_external.string().datetime().nullable().describe("the expiration date"), - lastUsedAt: exports_external.string().datetime().nullable().optional().describe("the last used date"), - createdAt: exports_external.string().datetime().describe("the creation date"), - project: exports_external.object({ - id: exports_external.string().describe("the project id"), - name: exports_external.string().describe("the project name") - }).nullable().optional().describe("the associated project") - }); - APIKeyGetResponseSchema = APIResponseSchema(APIKeyDetailSchema); -}); - -// ../../../../packages/server/dist/api/apikey/list.js -var APIKeySchema, APIKeyListResponseArray, APIKeyListResponseSchema; -var init_list = __esm(() => { - init_zod(); - init_api2(); - APIKeySchema = exports_external.object({ - id: exports_external.string().describe("the API key id"), - name: exports_external.string().describe("the API key name"), - orgId: exports_external.string().describe("the organization id"), - type: exports_external.string().describe("the API key type"), - expiresAt: exports_external.string().datetime().nullable().describe("the expiration date"), - lastUsedAt: exports_external.string().datetime().nullable().optional().describe("the last used date"), - createdAt: exports_external.string().datetime().describe("the creation date"), - project: exports_external.object({ - id: exports_external.string().describe("the project id"), - name: exports_external.string().describe("the project name") - }).nullable().optional().describe("the associated project") - }); - APIKeyListResponseArray = exports_external.array(APIKeySchema); - APIKeyListResponseSchema = APIResponseSchema(APIKeyListResponseArray); -}); - -// ../../../../packages/server/dist/api/apikey/index.js -var init_apikey = __esm(() => { - init_create(); - init_delete(); - init_get(); - init_list(); -}); - -// ../../../../packages/server/dist/api/db/index.js -var init_db = () => {}; - -// ../../../../packages/server/dist/api/org/util.js -var OrgResponseError, OrgResourceResponseError; -var init_util2 = __esm(() => { - init_dist(); - OrgResponseError = StructuredError("OrgResponseError"); - OrgResourceResponseError = StructuredError("OrgResourceResponseError"); -}); - -// ../../../../packages/server/dist/api/org/list.js -var ListOrganizationsResponse, ListOrganizationsResponseSchema; -var init_list2 = __esm(() => { - init_zod(); - init_api2(); - ListOrganizationsResponse = exports_external.array(exports_external.object({ - id: exports_external.string().describe("the unique id for the organization"), - name: exports_external.string().describe("the name of the organization") - })); - ListOrganizationsResponseSchema = APIResponseSchema(ListOrganizationsResponse); -}); - -// ../../../../packages/server/dist/api/org/resources.js -var OrgS3Resource, OrgDBResource, OrgResourceListResponse, OrgResourceListResponseSchema; -var init_resources = __esm(() => { - init_zod(); - init_api2(); - OrgS3Resource = exports_external.object({ - bucket_name: exports_external.string().describe("the S3 bucket name"), - access_key: exports_external.string().nullable().optional().describe("the S3 access key"), - secret_key: exports_external.string().nullable().optional().describe("the S3 secret key"), - region: exports_external.string().nullable().optional().describe("the S3 region"), - endpoint: exports_external.string().nullable().optional().describe("the S3 endpoint"), - cloud_region: exports_external.string().describe("the cloud region where this resource is provisioned") - }); - OrgDBResource = exports_external.object({ - name: exports_external.string().describe("the database name"), - username: exports_external.string().nullable().optional().describe("the database username"), - password: exports_external.string().nullable().optional().describe("the database password"), - url: exports_external.string().nullable().optional().describe("the full database connection URL"), - cloud_region: exports_external.string().describe("the cloud region where this resource is provisioned") - }); - OrgResourceListResponse = exports_external.object({ - s3: exports_external.array(OrgS3Resource), - db: exports_external.array(OrgDBResource) - }); - OrgResourceListResponseSchema = APIResponseSchema(OrgResourceListResponse); -}); - -// ../../../../packages/server/dist/api/org/index.js -var init_org = __esm(() => { - init_list2(); - init_resources(); - init_util2(); -}); - -// ../../../../packages/server/dist/api/project/agent.js -var AgentSchema, AgentListResponseSchema, AgentGetResponseSchema; -var init_agent = __esm(() => { - init_zod(); - init_api2(); - AgentSchema = exports_external.object({ - id: exports_external.string().describe("Agent ID (same as identifier)"), - name: exports_external.string().describe("Agent name"), - description: exports_external.string().nullable().describe("Agent description"), - identifier: exports_external.string().describe("Agent identifier"), - deploymentId: exports_external.string().nullable().describe("Deployment ID"), - devmode: exports_external.boolean().describe("Whether agent is in development mode"), - metadata: exports_external.record(exports_external.string(), exports_external.unknown()).nullable().describe("Agent metadata"), - createdAt: exports_external.string().describe("Creation timestamp"), - updatedAt: exports_external.string().describe("Last update timestamp"), - evals: exports_external.array(exports_external.object({ - id: exports_external.string().describe("Evaluation ID"), - name: exports_external.string().describe("Evaluation name"), - description: exports_external.string().nullable().describe("Evaluation description"), - identifier: exports_external.string().nullable().describe("Evaluation identifier"), - devmode: exports_external.boolean().describe("Whether evaluation is in development mode"), - createdAt: exports_external.string().describe("Creation timestamp"), - updatedAt: exports_external.string().describe("Last update timestamp") - })).describe("Associated evaluations") - }); - AgentListResponseSchema = APIResponseSchema(exports_external.array(AgentSchema)); - AgentGetResponseSchema = APIResponseSchema(exports_external.array(AgentSchema)); -}); - -// ../../../../packages/server/dist/api/project/create.js -var CreateProjectRequestSchema, CreateProjectResponse, CreateProjectResponseSchema; -var init_create2 = __esm(() => { - init_zod(); - init_api2(); - CreateProjectRequestSchema = exports_external.object({ - name: exports_external.string().max(255).min(1).describe("the name of the new project"), - description: exports_external.string().max(255).min(0).optional().describe("the description of the project"), - tags: exports_external.array(exports_external.string()).optional().describe("tags for the project"), - orgId: exports_external.string().max(255).min(1).describe("the organization id to create the project in"), - cloudRegion: exports_external.string().describe("the cloud region to create the project"), - domains: exports_external.array(exports_external.string()).optional().describe("the custom domains for this project") - }); - CreateProjectResponse = exports_external.object({ - id: exports_external.string().describe("the unique id for the project"), - sdkKey: exports_external.string().describe("the SDK key for the project") - }); - CreateProjectResponseSchema = APIResponseSchema(CreateProjectResponse); -}); - -// ../../../../packages/server/dist/api/project/delete.js -var ProjectDeleteRequestSchema, ProjectDeleteResponseSchema; -var init_delete2 = __esm(() => { - init_zod(); - init_api2(); - ProjectDeleteRequestSchema = exports_external.object({ ids: exports_external.array(exports_external.string()) }); - ProjectDeleteResponseSchema = APIResponseSchema(exports_external.array(exports_external.string())); -}); - -// ../../../../packages/server/dist/api/project/deploy.js -var Resources, Mode, DeploymentConfig, BaseFileFields, EvalSchema, BaseAgentFields, AgentSchema2, BuildMetadataSchema, CreateProjectDeployment, CreateProjectDeploymentSchema, DeploymentInstructionsObject, DeploymentInstructionsSchema, DeploymentCompleteObject, DeploymentCompleteObjectSchema, DeploymentStateValue, DeploymentStatusObject, DeploymentStatusObjectSchema, ClientDiagnosticsErrorSchema, ClientDiagnosticsTimingSchema, ClientDiagnosticsSchema, DeploymentFailPayloadSchema, DeploymentFailResponseObject, DeploymentFailResponseSchema; -var init_deploy = __esm(() => { - init_zod(); - init_api2(); - Resources = exports_external.object({ - memory: exports_external.string().default("500Mi").describe("The memory requirements"), - cpu: exports_external.string().default("500m").describe("The CPU requirements"), - disk: exports_external.string().default("500Mi").describe("The disk requirements") - }); - Mode = exports_external.object({ - type: exports_external.enum(["on-demand", "provisioned"]).default("on-demand").describe("on-demand or provisioned"), - idle: exports_external.string().optional().describe("duration in seconds if on-demand") - }); - DeploymentConfig = exports_external.object({ - resources: Resources.optional().describe("the resource requirements for your deployed project"), - mode: Mode.optional().describe("the provisioning mode for the project"), - dependencies: exports_external.array(exports_external.string().describe("APT dependencies to install prior to launching your project")).optional(), - domains: exports_external.array(exports_external.string().describe("the custom domain")).optional() - }); - BaseFileFields = { - filename: exports_external.string().describe("the relative path for the file"), - version: exports_external.string().describe("the SHA256 content of the file") - }; - EvalSchema = exports_external.object({ - ...BaseFileFields, - id: exports_external.string().describe("the unique calculated id for the eval"), - identifier: exports_external.string().describe("the unique id for eval for the project across deployments"), - name: exports_external.string().describe("the name of the eval"), - description: exports_external.string().optional().describe("the eval description"), - agentIdentifier: exports_external.string().describe("the identifier of the agent"), - projectId: exports_external.string().describe("the project id") - }); - BaseAgentFields = { - ...BaseFileFields, - id: exports_external.string().describe("the unique calculated id for the agent"), - agentId: exports_external.string().describe("the unique id for agent for the project across deployments"), - projectId: exports_external.string().describe("the project id"), - name: exports_external.string().describe("the name of the agent"), - description: exports_external.string().optional().describe("the agent description"), - evals: exports_external.array(EvalSchema).optional().describe("the evals for the agent"), - schema: exports_external.object({ - input: exports_external.string().optional().describe("JSON schema for input (stringified JSON)"), - output: exports_external.string().optional().describe("JSON schema for output (stringified JSON)") - }).optional().describe("input and output JSON schemas for the agent") - }; - AgentSchema2 = exports_external.object({ - ...BaseAgentFields - }); - BuildMetadataSchema = exports_external.object({ - routes: exports_external.array(exports_external.object({ - id: exports_external.string().describe("the unique calculated id for the route"), - filename: exports_external.string().describe("the relative path for the file"), - path: exports_external.string().describe("the route path"), - method: exports_external.enum(["get", "post", "put", "delete", "patch"]).describe("the HTTP method"), - version: exports_external.string().describe("the SHA256 content of the file"), - type: exports_external.enum(["api", "sms", "email", "cron", "websocket", "sse", "stream"]), - agentIds: exports_external.array(exports_external.string()).optional().describe("the agent ids associated with this route"), - config: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("type specific configuration"), - schema: exports_external.object({ - input: exports_external.string().optional().describe("JSON schema for input (stringified JSON)"), - output: exports_external.string().optional().describe("JSON schema for output (stringified JSON)") - }).optional().describe("input and output JSON schemas for the route") - })), - agents: exports_external.array(AgentSchema2), - assets: exports_external.array(exports_external.object({ - filename: exports_external.string().describe("the relative path for the file"), - kind: exports_external.string().describe("the type of asset"), - contentType: exports_external.string().describe("the content-type for the file"), - contentEncoding: exports_external.string().optional().describe("the content-encoding for the file"), - size: exports_external.number().describe("the size in bytes for the file") - })), - project: exports_external.object({ - id: exports_external.string().describe("the project id"), - name: exports_external.string().describe("the name of the project (from package.json)"), - version: exports_external.string().optional().describe("the version of the project (from package.json)"), - description: exports_external.string().optional().describe("the description of the project (from package.json)"), - keywords: exports_external.array(exports_external.string()).optional().describe("the keywords from package.json"), - orgId: exports_external.string().describe("the organization id for the project") - }), - deployment: exports_external.intersection(DeploymentConfig, exports_external.object({ - id: exports_external.string().describe("the deployment id"), - date: exports_external.string().describe("the date the deployment was created in UTC format"), - git: exports_external.object({ - repo: exports_external.string().optional().describe("the repository name"), - commit: exports_external.string().optional().describe("the git commit sha"), - message: exports_external.string().optional().describe("the git commit message"), - branch: exports_external.string().optional().describe("the git branch"), - tags: exports_external.array(exports_external.string()).optional().describe("the tags for the current branch"), - pr: exports_external.string().optional().describe("the pull request number"), - provider: exports_external.string().optional().describe("the CI provider"), - trigger: exports_external.string().default("cli").optional().describe("the trigger that caused the build"), - url: exports_external.string().url().optional().describe("the url to the commit for the CI provider"), - buildUrl: exports_external.string().url().optional().describe("the url to the build for the CI provider"), - event: exports_external.enum(["pull_request", "push", "manual", "workflow"]).default("manual").optional().describe("The type of Git-related event that triggered the deployment: pull_request (A pull request or merge request was opened, updated, or merged), push (A commit was pushed directly to a branch), manual (A deployment was triggered manually via CLI or a button), workflow (A deployment was triggered by an automated workflow, such as a CI pipeline)"), - pull_request: exports_external.object({ - number: exports_external.number(), - url: exports_external.string().optional() - }).optional().describe("This is only present when the deployment was triggered via a pull request.") - }).optional().describe("git commit information"), - build: exports_external.object({ - bun: exports_external.string().describe("the version of bun that was used to build the deployment"), - agentuity: exports_external.string().describe("the version of the agentuity runtime"), - arch: exports_external.string().describe("the machine architecture"), - platform: exports_external.string().describe("the machine os platform") - }) - })) - }); - CreateProjectDeployment = exports_external.object({ - id: exports_external.string().describe("the unique id for the deployment"), - orgId: exports_external.string().describe("the organization id"), - publicKey: exports_external.string().describe("the public key to use for encrypting the deployment"), - buildLogsStreamURL: exports_external.string().optional().describe("the URL for streaming build logs (PUT to write, GET to read)") - }); - CreateProjectDeploymentSchema = APIResponseSchema(CreateProjectDeployment); - DeploymentInstructionsObject = exports_external.object({ - deployment: exports_external.string().describe("the url for uploading the encrypted deployment archive"), - assets: exports_external.record(exports_external.string().describe("the asset id"), exports_external.string().describe("the url for the asset upload")).describe("the upload metadata for public assets") - }); - DeploymentInstructionsSchema = APIResponseSchema(DeploymentInstructionsObject); - DeploymentCompleteObject = exports_external.object({ - streamId: exports_external.string().optional().describe("the stream id for warmup logs"), - publicUrls: exports_external.object({ - latest: exports_external.string().url().describe("the public url for the latest deployment"), - deployment: exports_external.string().url().describe("the public url for this deployment"), - custom: exports_external.array(exports_external.string().describe("the custom domain")) - }).describe("the map of public urls") - }); - DeploymentCompleteObjectSchema = APIResponseSchema(DeploymentCompleteObject); - DeploymentStateValue = exports_external.enum([ - "pending", - "building", - "deploying", - "failed", - "completed" - ]); - DeploymentStatusObject = exports_external.object({ - state: DeploymentStateValue.describe("the current deployment state") - }); - DeploymentStatusObjectSchema = APIResponseSchema(DeploymentStatusObject); - ClientDiagnosticsErrorSchema = exports_external.object({ - type: exports_external.enum(["file", "general"]), - scope: exports_external.enum(["typescript", "ast", "build", "bundler", "validation", "deploy"]), - path: exports_external.string().optional(), - line: exports_external.number().optional(), - column: exports_external.number().optional(), - message: exports_external.string(), - code: exports_external.string().optional() - }); - ClientDiagnosticsTimingSchema = exports_external.object({ - name: exports_external.string(), - startedAt: exports_external.string(), - completedAt: exports_external.string(), - durationMs: exports_external.number() - }); - ClientDiagnosticsSchema = exports_external.object({ - success: exports_external.boolean(), - errors: exports_external.array(ClientDiagnosticsErrorSchema), - warnings: exports_external.array(ClientDiagnosticsErrorSchema), - diagnostics: exports_external.array(ClientDiagnosticsTimingSchema), - error: exports_external.string().optional() - }); - DeploymentFailPayloadSchema = exports_external.object({ - error: exports_external.string().optional(), - diagnostics: ClientDiagnosticsSchema.optional() - }); - DeploymentFailResponseObject = exports_external.object({ - state: exports_external.literal("failed") - }); - DeploymentFailResponseSchema = APIResponseSchema(DeploymentFailResponseObject); -}); - -// ../../../../packages/server/dist/api/project/deployment.js -var DeploymentMetadataSchema, DeploymentSchema, DeploymentListResponseSchema, DeploymentGetResponseSchema, DeploymentActionResponseSchema, DeploymentLogSchema, DeploymentLogsResponseSchema; -var init_deployment = __esm(() => { - init_zod(); - init_api2(); - DeploymentMetadataSchema = exports_external.object({ - git: exports_external.object({ - repo: exports_external.string().optional(), - commit: exports_external.string().optional(), - message: exports_external.string().optional(), - branch: exports_external.string().optional(), - tags: exports_external.array(exports_external.string()).optional(), - pr: exports_external.string().optional(), - provider: exports_external.string().optional(), - trigger: exports_external.string().optional(), - url: exports_external.string().optional(), - buildUrl: exports_external.string().optional(), - event: exports_external.string().optional(), - pull_request: exports_external.object({ - number: exports_external.number(), - url: exports_external.string().optional() - }).optional() - }).optional(), - build: exports_external.object({ - bun: exports_external.string().optional(), - agentuity: exports_external.string().optional(), - arch: exports_external.string().optional(), - platform: exports_external.string().optional() - }).optional() - }); - DeploymentSchema = exports_external.object({ - id: exports_external.string(), - state: exports_external.string().optional(), - message: exports_external.string().nullable().optional(), - tags: exports_external.array(exports_external.string()), - active: exports_external.boolean(), - createdAt: exports_external.string(), - updatedAt: exports_external.string().nullable().optional(), - metadata: DeploymentMetadataSchema.optional(), - customDomains: exports_external.array(exports_external.string()).nullable().optional(), - cloudRegion: exports_external.string().nullable().optional(), - resourceDb: exports_external.string().nullable().optional(), - resourceStorage: exports_external.string().nullable().optional(), - deploymentLogsURL: exports_external.string().nullable().optional(), - buildLogsURL: exports_external.string().nullable().optional() - }); - DeploymentListResponseSchema = APIResponseSchema(exports_external.array(DeploymentSchema)); - DeploymentGetResponseSchema = APIResponseSchema(DeploymentSchema); - DeploymentActionResponseSchema = APIResponseSchemaOptionalData(exports_external.object({ activeDeploymentId: exports_external.string().optional() })); - DeploymentLogSchema = exports_external.object({ - body: exports_external.string(), - severity: exports_external.string(), - timestamp: exports_external.string(), - spanId: exports_external.string(), - traceId: exports_external.string(), - serviceName: exports_external.string() - }); - DeploymentLogsResponseSchema = APIResponseSchema(exports_external.array(DeploymentLogSchema)); -}); - -// ../../../../packages/server/dist/api/project/env-delete.js -var _ProjectEnvDeleteRequestSchema, ProjectEnvDeleteResponseSchema; -var init_env_delete = __esm(() => { - init_zod(); - init_api2(); - _ProjectEnvDeleteRequestSchema = exports_external.object({ - id: exports_external.string().describe("the project id"), - env: exports_external.array(exports_external.string()).optional().describe("environment variable keys to delete"), - secrets: exports_external.array(exports_external.string()).optional().describe("secret keys to delete") - }); - ProjectEnvDeleteResponseSchema = APIResponseSchemaNoData(); -}); - -// ../../../../packages/server/dist/api/project/get.js -var _ProjectGetRequestSchema, ProjectSchema, ProjectGetResponseSchema; -var init_get2 = __esm(() => { - init_zod(); - init_api2(); - _ProjectGetRequestSchema = exports_external.object({ - id: exports_external.string().describe("the project id"), - mask: exports_external.boolean().default(true).optional().describe("if the secrets should be returned masked"), - keys: exports_external.boolean().default(true).optional().describe("if the project keys should be returned") - }); - ProjectSchema = exports_external.object({ - id: exports_external.string().describe("the project id"), - name: exports_external.string().describe("the project name"), - description: exports_external.string().nullable().optional().describe("the project description"), - tags: exports_external.array(exports_external.string()).nullable().optional().describe("the project tags"), - orgId: exports_external.string().describe("the organization id"), - cloudRegion: exports_external.string().nullable().optional().describe("the cloud region"), - api_key: exports_external.string().optional().describe("the SDK api key for the project"), - env: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("the environment key/values"), - secrets: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("the secrets key/values") - }); - ProjectGetResponseSchema = APIResponseSchema(ProjectSchema); -}); - -// ../../../../packages/server/dist/api/project/env-update.js -var _ProjectEnvUpdateRequestSchema, ProjectEnvUpdateResponseSchema; -var init_env_update = __esm(() => { - init_zod(); - init_api2(); - _ProjectEnvUpdateRequestSchema = exports_external.object({ - id: exports_external.string().describe("the project id"), - env: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("environment variables to set/update"), - secrets: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("secrets to set/update") - }); - ProjectEnvUpdateResponseSchema = APIResponseSchema(exports_external.object({ - id: exports_external.string().describe("the project id"), - orgId: exports_external.string().describe("the organization id"), - api_key: exports_external.string().optional().describe("the SDK api key for the project"), - env: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("the environment key/values"), - secrets: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("the secrets key/values") - }).optional()); -}); - -// ../../../../packages/server/dist/api/project/exists.js -var _ProjectExistsRequestSchema, ProjectExistsResponseSchema; -var init_exists = __esm(() => { - init_zod(); - init_api2(); - _ProjectExistsRequestSchema = exports_external.object({ - name: exports_external.string().max(255).min(1).describe("the name of the new project"), - organization_id: exports_external.string().max(255).min(1).describe("the organization id to create the project in") - }); - ProjectExistsResponseSchema = APIResponseSchema(exports_external.boolean()); -}); - -// ../../../../packages/server/dist/api/project/list.js -var ProjectListResponse, ProjectListResponseSchema; -var init_list3 = __esm(() => { - init_zod(); - init_api2(); - ProjectListResponse = exports_external.array(exports_external.object({ - id: exports_external.string().describe("the project id"), - name: exports_external.string().describe("the project name"), - description: exports_external.string().optional().describe("the project description"), - orgId: exports_external.string().describe("the organization id that this project is registered with"), - orgName: exports_external.string().describe("the organization name"), - cloudRegion: exports_external.string().nullable().optional().describe("the cloud region"), - latestDeploymentId: exports_external.string().nullable().describe("the latest deployment id") - })); - ProjectListResponseSchema = APIResponseSchema(ProjectListResponse); -}); - -// ../../../../packages/server/dist/api/project/index.js -var init_project = __esm(() => { - init_agent(); - init_create2(); - init_delete2(); - init_deploy(); - init_deployment(); - init_env_delete(); - init_env_update(); - init_exists(); - init_get2(); - init_list3(); -}); - -// ../../../../packages/server/dist/api/region/list.js -var ListRegionsResponse, ListRegionsResponseSchema; -var init_list4 = __esm(() => { - init_zod(); - init_api2(); - ListRegionsResponse = exports_external.array(exports_external.object({ - region: exports_external.string().describe("the region identifier"), - description: exports_external.string().describe("the human-readable description of the region") - })); - ListRegionsResponseSchema = APIResponseSchema(ListRegionsResponse); -}); - -// ../../../../packages/server/dist/api/region/resources.js -var ResourceListResponse, ResourceListResponseSchema; -var init_resources2 = __esm(() => { - init_zod(); - init_api2(); - ResourceListResponse = exports_external.object({ - s3: exports_external.array(exports_external.object({ - bucket_name: exports_external.string().describe("the S3 bucket name"), - access_key: exports_external.string().nullable().optional().describe("the S3 access key"), - secret_key: exports_external.string().nullable().optional().describe("the S3 secret key"), - region: exports_external.string().nullable().optional().describe("the S3 region"), - endpoint: exports_external.string().nullable().optional().describe("the S3 endpoint"), - cname: exports_external.string().nullable().optional().describe("the S3 CNAME"), - env: exports_external.record(exports_external.string(), exports_external.string()).describe("environment variables for the resource") - })), - db: exports_external.array(exports_external.object({ - name: exports_external.string().describe("the database name"), - username: exports_external.string().nullable().optional().describe("the database username"), - password: exports_external.string().nullable().optional().describe("the database password"), - url: exports_external.string().nullable().optional().describe("the full database connection URL"), - env: exports_external.record(exports_external.string(), exports_external.string()).describe("environment variables for the resource") - })), - redis: exports_external.object({ - url: exports_external.string().describe("the Redis connection URL") - }).optional() - }); - ResourceListResponseSchema = APIResponseSchema(ResourceListResponse); -}); - -// ../../../../packages/server/dist/api/region/create.js -var ResourceSpec, CreateResourcesRequest, CreatedResource, CreateResourcesResponse, CreateResourcesResponseSchema; -var init_create3 = __esm(() => { - init_zod(); - init_api2(); - ResourceSpec = exports_external.object({ - type: exports_external.enum(["db", "s3"]).describe("the resource type"), - name: exports_external.string().optional().describe("optional custom name for db") - }); - CreateResourcesRequest = exports_external.object({ - resources: exports_external.array(ResourceSpec).describe("list of resources to create") - }); - CreatedResource = exports_external.object({ - type: exports_external.string().describe("the resource type"), - name: exports_external.string().describe("the resource name"), - env: exports_external.record(exports_external.string(), exports_external.string()).describe("environment variables for the resource") - }); - CreateResourcesResponse = exports_external.object({ - created: exports_external.array(CreatedResource) - }); - CreateResourcesResponseSchema = APIResponseSchema(CreateResourcesResponse); -}); - -// ../../../../packages/server/dist/api/region/delete.js -var DeleteResourceSpec, DeleteResourcesRequest, DeletedResource, DeleteResourcesResponse, DeleteResourcesResponseSchema; -var init_delete3 = __esm(() => { - init_zod(); - init_api2(); - DeleteResourceSpec = exports_external.object({ - type: exports_external.enum(["db", "s3"]).describe("the resource type"), - name: exports_external.string().describe("the resource name (bucket_name for S3, db_name for DB)") - }); - DeleteResourcesRequest = exports_external.object({ - resources: exports_external.array(DeleteResourceSpec).describe("list of resources to delete") - }); - DeletedResource = exports_external.object({ - type: exports_external.string().describe("the resource type"), - name: exports_external.string().describe("the resource name"), - env_keys: exports_external.array(exports_external.string()).describe("environment variable keys to remove") - }); - DeleteResourcesResponse = exports_external.object({ - deleted: exports_external.array(DeletedResource).describe("list of deleted resources") - }); - DeleteResourcesResponseSchema = APIResponseSchema(DeleteResourcesResponse); -}); - -// ../../../../packages/server/dist/api/region/index.js -var init_region = __esm(() => { - init_list4(); - init_resources2(); - init_create3(); - init_delete3(); -}); - -// ../../../../packages/server/dist/api/sandbox/util.js -function writeAndDrain(writable, chunk) { - return new Promise((resolve, reject) => { - let needsDrain; - try { - needsDrain = !writable.write(chunk); - } catch (err) { - reject(err); - return; - } - if (needsDrain) { - const cleanup = () => { - writable.removeListener("drain", onDrain); - writable.removeListener("error", onError); - }; - const onDrain = () => { - cleanup(); - resolve(); - }; - const onError = (err) => { - cleanup(); - reject(err); - }; - writable.once("drain", onDrain); - writable.once("error", onError); - } else { - resolve(); - } - }); -} -var SandboxResponseError, API_VERSION = "2025-03-17"; -var init_util3 = __esm(() => { - init_dist(); - SandboxResponseError = StructuredError("SandboxResponseError")(); -}); - -// ../../../../packages/server/dist/api/sandbox/create.js -async function sandboxCreate(client, params = {}) { - const { options = {}, orgId } = params; - const body = {}; - if (options.resources) { - body.resources = options.resources; - } - if (options.env) { - body.env = options.env; - } - if (options.network) { - body.network = options.network; - } - if (options.stream) { - body.stream = options.stream; - } - if (options.timeout) { - body.timeout = options.timeout; - } - if (options.command) { - body.command = { - exec: options.command.exec, - mode: options.command.mode, - files: options.command.files?.map((f) => ({ - path: f.path, - content: f.content.toString("base64") - })) - }; - } - if (options.snapshot) { - body.snapshot = options.snapshot; - } - if (options.dependencies && options.dependencies.length > 0) { - body.dependencies = options.dependencies; - } - if (options.metadata) { - body.metadata = options.metadata; - } - const queryParams = new URLSearchParams; - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `/sandbox/${API_VERSION}${queryString ? `?${queryString}` : ""}`; - const resp = await client.post(url2, body, SandboxCreateResponseSchema, SandboxCreateRequestSchema); - if (resp.success) { - return resp.data; - } - throw new SandboxResponseError({ message: resp.message }); -} -var SandboxCreateRequestSchema, SandboxCreateDataSchema, SandboxCreateResponseSchema; -var init_create4 = __esm(() => { - init_zod(); - init_api2(); - init_util3(); - SandboxCreateRequestSchema = exports_external.object({ - resources: exports_external.object({ - memory: exports_external.string().optional().describe('Memory limit (e.g., "512Mi", "1Gi")'), - cpu: exports_external.string().optional().describe('CPU limit (e.g., "0.5", "1")'), - disk: exports_external.string().optional().describe('Disk size limit (e.g., "1Gi", "10Gi")') - }).optional().describe("Resource constraints for the sandbox"), - env: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("Environment variables to set in the sandbox"), - network: exports_external.object({ - enabled: exports_external.boolean().optional().describe("Whether network access is enabled") - }).optional().describe("Network configuration for the sandbox"), - stream: exports_external.object({ - stdout: exports_external.string().optional().describe("Stream ID for stdout output"), - stderr: exports_external.string().optional().describe("Stream ID for stderr output"), - stdin: exports_external.string().optional().describe("Stream ID for stdin input"), - timestamps: exports_external.boolean().optional().describe("Whether to include timestamps in output") - }).optional().describe("Stream configuration for I/O redirection"), - timeout: exports_external.object({ - idle: exports_external.string().optional().describe('Idle timeout duration (e.g., "5m", "1h")'), - execution: exports_external.string().optional().describe('Maximum execution time (e.g., "30m", "2h")') - }).optional().describe("Timeout settings for the sandbox"), - command: exports_external.object({ - exec: exports_external.array(exports_external.string()).describe("Command and arguments to execute"), - files: exports_external.array(exports_external.object({ - path: exports_external.string().describe("Path to the file relative to the sandbox workspace"), - content: exports_external.string().describe("Base64-encoded file content") - })).optional().describe("Files to write before execution"), - mode: exports_external.enum(["oneshot", "interactive"]).optional().describe("Execution mode: oneshot runs once, interactive keeps running") - }).optional().describe("Initial command to run in the sandbox"), - snapshot: exports_external.string().optional().describe("Snapshot ID to restore the sandbox from"), - dependencies: exports_external.array(exports_external.string()).optional().describe("Apt packages to install when creating the sandbox"), - metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("Optional user-defined metadata to associate with the sandbox") - }).describe("Request body for creating a new sandbox"); - SandboxCreateDataSchema = exports_external.object({ - sandboxId: exports_external.string().describe("Unique identifier for the created sandbox"), - status: exports_external.enum(["creating", "idle", "running", "terminated", "failed"]).describe("Current status of the sandbox"), - stdoutStreamId: exports_external.string().optional().describe("Stream ID for reading stdout"), - stdoutStreamUrl: exports_external.string().optional().describe("URL for streaming stdout output"), - stderrStreamId: exports_external.string().optional().describe("Stream ID for reading stderr"), - stderrStreamUrl: exports_external.string().optional().describe("URL for streaming stderr output") - }).describe("Response data from sandbox creation"); - SandboxCreateResponseSchema = APIResponseSchema(SandboxCreateDataSchema); -}); - -// ../../../../packages/server/dist/api/sandbox/files.js -async function sandboxWriteFiles(client, params) { - const { sandboxId, files, orgId, signal } = params; - const body = { - files: files.map((f) => ({ - path: f.path, - content: f.content.toString("base64") - })) - }; - const queryParams = new URLSearchParams; - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `/fs/${API_VERSION}/${sandboxId}${queryString ? `?${queryString}` : ""}`; - const resp = await client.post(url2, body, WriteFilesResponseSchema, WriteFilesRequestSchema, signal); - if (resp.success) { - return { - filesWritten: resp.data?.filesWritten ?? resp.filesWritten ?? 0 - }; - } - throw new SandboxResponseError({ message: resp.message, sandboxId }); -} -async function sandboxReadFile(client, params) { - const { sandboxId, path, orgId, signal } = params; - const queryParams = new URLSearchParams; - queryParams.set("path", path); - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `/fs/${API_VERSION}/${sandboxId}?${queryString}`; - const response = await client.rawGet(url2, signal); - if (!response.ok) { - const text = await response.text().catch(() => "Unknown error"); - throw new SandboxResponseError({ - message: `Failed to read file: ${response.status} ${text}`, - sandboxId - }); - } - if (!response.body) { - throw new SandboxResponseError({ - message: "No response body", - sandboxId - }); - } - return response.body; -} -var FileToWriteSchema, WriteFilesRequestSchema, WriteFilesDataSchema, WriteFilesResponseSchema, MkDirRequestSchema, MkDirResponseSchema, RmDirRequestSchema, RmDirResponseSchema, RmFileRequestSchema, RmFileResponseSchema, FileInfoSchema, ListFilesDataSchema, ListFilesResponseSchema, UploadArchiveResponseSchema, SetEnvRequestSchema, SetEnvDataSchema, SetEnvResponseSchema; -var init_files = __esm(() => { - init_zod(); - init_util3(); - FileToWriteSchema = exports_external.object({ - path: exports_external.string().describe("Path to the file relative to the sandbox workspace"), - content: exports_external.string().describe("Base64-encoded file content") - }); - WriteFilesRequestSchema = exports_external.object({ - files: exports_external.array(FileToWriteSchema).describe("Array of files to write") - }).describe("Request body for writing files to a sandbox"); - WriteFilesDataSchema = exports_external.object({ - filesWritten: exports_external.number().describe("Number of files successfully written") - }).describe("Response data from writing files"); - WriteFilesResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true), - data: WriteFilesDataSchema.optional(), - filesWritten: exports_external.number().optional() - }) - ]); - MkDirRequestSchema = exports_external.object({ - path: exports_external.string().describe("Path to the directory to create"), - recursive: exports_external.boolean().optional().describe("Create parent directories if needed") - }).describe("Request body for creating a directory"); - MkDirResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true) - }) - ]); - RmDirRequestSchema = exports_external.object({ - path: exports_external.string().describe("Path to the directory to remove"), - recursive: exports_external.boolean().optional().describe("Remove directory and all contents") - }).describe("Request body for removing a directory"); - RmDirResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true) - }) - ]); - RmFileRequestSchema = exports_external.object({ - path: exports_external.string().describe("Path to the file to remove") - }).describe("Request body for removing a file"); - RmFileResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true) - }) - ]); - FileInfoSchema = exports_external.object({ - path: exports_external.string().describe("File path relative to the listed directory"), - size: exports_external.number().describe("File size in bytes"), - isDir: exports_external.boolean().describe("Whether the entry is a directory"), - mode: exports_external.string().describe('Unix permissions as octal string (e.g., "0644")'), - modTime: exports_external.string().describe("Modification time in RFC3339 format") - }); - ListFilesDataSchema = exports_external.object({ - files: exports_external.array(FileInfoSchema).describe("Array of file information") - }); - ListFilesResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true), - data: ListFilesDataSchema - }) - ]); - UploadArchiveResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true) - }) - ]); - SetEnvRequestSchema = exports_external.object({ - env: exports_external.record(exports_external.string(), exports_external.string().nullable()).describe("Environment variables to set (null to delete)") - }); - SetEnvDataSchema = exports_external.object({ - env: exports_external.record(exports_external.string(), exports_external.string()).describe("Current environment variables after update") - }); - SetEnvResponseSchema = exports_external.discriminatedUnion("success", [ - exports_external.object({ - success: exports_external.literal(false), - message: exports_external.string().describe("the error message") - }), - exports_external.object({ - success: exports_external.literal(true), - data: SetEnvDataSchema - }) - ]); -}); - -// ../../../../packages/server/dist/api/sandbox/execute.js -async function sandboxExecute(client, params) { - const { sandboxId, options, orgId, signal } = params; - const body = { - command: options.command - }; - if (options.files) { - body.files = options.files.map((f) => ({ - path: f.path, - content: f.content.toString("base64") - })); - } - if (options.timeout) { - body.timeout = options.timeout; - } - if (options.stream) { - body.stream = options.stream; - } - const queryParams = new URLSearchParams; - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `/sandbox/${API_VERSION}/${sandboxId}/execute${queryString ? `?${queryString}` : ""}`; - const resp = await client.post(url2, body, ExecuteResponseSchema, ExecuteRequestSchema, signal ?? options.signal); - if (resp.success) { - return { - executionId: resp.data.executionId, - status: resp.data.status, - exitCode: resp.data.exitCode, - durationMs: resp.data.durationMs, - stdoutStreamUrl: resp.data.stdoutStreamUrl, - stderrStreamUrl: resp.data.stderrStreamUrl - }; - } - throw new SandboxResponseError({ message: resp.message, sandboxId }); -} -var ExecuteRequestSchema, ExecuteDataSchema, ExecuteResponseSchema; -var init_execute = __esm(() => { - init_zod(); - init_api2(); - init_util3(); - init_files(); - ExecuteRequestSchema = exports_external.object({ - command: exports_external.array(exports_external.string()).describe("Command and arguments to execute"), - files: exports_external.array(FileToWriteSchema).optional().describe("Files to write before execution"), - timeout: exports_external.string().optional().describe('Execution timeout (e.g., "30s", "5m")'), - stream: exports_external.object({ - stdout: exports_external.string().optional().describe("Stream ID for stdout output"), - stderr: exports_external.string().optional().describe("Stream ID for stderr output"), - timestamps: exports_external.boolean().optional().describe("Whether to include timestamps in output") - }).optional().describe("Stream configuration for output redirection") - }).describe("Request body for executing a command in a sandbox"); - ExecuteDataSchema = exports_external.object({ - executionId: exports_external.string().describe("Unique identifier for the execution"), - status: exports_external.enum(["queued", "running", "completed", "failed", "timeout", "cancelled"]).describe("Current status of the execution"), - exitCode: exports_external.number().optional().describe("Exit code of the executed command"), - durationMs: exports_external.number().optional().describe("Execution duration in milliseconds"), - stdoutStreamUrl: exports_external.string().optional().describe("URL for streaming stdout output"), - stderrStreamUrl: exports_external.string().optional().describe("URL for streaming stderr output") - }).describe("Response data from command execution"); - ExecuteResponseSchema = APIResponseSchema(ExecuteDataSchema); -}); - -// ../../../../packages/server/dist/api/sandbox/get.js -async function sandboxGet(client, params) { - const { sandboxId, orgId } = params; - const queryParams = new URLSearchParams; - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `/sandbox/${API_VERSION}/${sandboxId}${queryString ? `?${queryString}` : ""}`; - const resp = await client.get(url2, SandboxGetResponseSchema); - if (resp.success) { - return { - sandboxId: resp.data.sandboxId, - status: resp.data.status, - createdAt: resp.data.createdAt, - region: resp.data.region, - snapshotId: resp.data.snapshotId, - snapshotTag: resp.data.snapshotTag, - executions: resp.data.executions, - stdoutStreamUrl: resp.data.stdoutStreamUrl, - stderrStreamUrl: resp.data.stderrStreamUrl, - dependencies: resp.data.dependencies, - metadata: resp.data.metadata, - resources: resp.data.resources - }; - } - throw new SandboxResponseError({ message: resp.message, sandboxId }); -} -var SandboxResourcesSchema, SandboxInfoDataSchema, SandboxGetResponseSchema; -var init_get3 = __esm(() => { - init_zod(); - init_api2(); - init_util3(); - SandboxResourcesSchema = exports_external.object({ - memory: exports_external.string().optional().describe('Memory limit (e.g., "512Mi", "1Gi")'), - cpu: exports_external.string().optional().describe('CPU limit in millicores (e.g., "500m", "1000m")'), - disk: exports_external.string().optional().describe('Disk limit (e.g., "1Gi", "10Gi")') - }).describe("Resource limits for the sandbox"); - SandboxInfoDataSchema = exports_external.object({ - sandboxId: exports_external.string().describe("Unique identifier for the sandbox"), - status: exports_external.enum(["creating", "idle", "running", "terminated", "failed"]).describe("Current status of the sandbox"), - createdAt: exports_external.string().describe("ISO timestamp when the sandbox was created"), - region: exports_external.string().optional().describe("Region where the sandbox is running"), - snapshotId: exports_external.string().optional().describe("Snapshot ID this sandbox was created from"), - snapshotTag: exports_external.string().optional().describe("Snapshot tag this sandbox was created from"), - executions: exports_external.number().describe("Total number of executions in this sandbox"), - stdoutStreamUrl: exports_external.string().optional().describe("URL for streaming stdout output"), - stderrStreamUrl: exports_external.string().optional().describe("URL for streaming stderr output"), - dependencies: exports_external.array(exports_external.string()).optional().describe("Apt packages installed in the sandbox"), - metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("User-defined metadata associated with the sandbox"), - resources: SandboxResourcesSchema.optional().describe("Resource limits for this sandbox") - }).describe("Detailed information about a sandbox"); - SandboxGetResponseSchema = APIResponseSchema(SandboxInfoDataSchema); -}); - -// ../../../../packages/server/dist/api/sandbox/list.js -async function sandboxList(client, params) { - const queryParams = new URLSearchParams; - if (params?.orgId) { - queryParams.set("orgId", params.orgId); - } - if (params?.projectId) { - queryParams.set("projectId", params.projectId); - } - if (params?.snapshotId) { - queryParams.set("snapshotId", params.snapshotId); - } - if (params?.status) { - queryParams.set("status", params.status); - } - if (params?.limit !== undefined) { - queryParams.set("limit", params.limit.toString()); - } - if (params?.offset !== undefined) { - queryParams.set("offset", params.offset.toString()); - } - const queryString = queryParams.toString(); - const url2 = `/sandbox/${API_VERSION}${queryString ? `?${queryString}` : ""}`; - const resp = await client.get(url2, ListSandboxesResponseSchema); - if (resp.success) { - return { - sandboxes: resp.data.sandboxes.map((s) => ({ - sandboxId: s.sandboxId, - status: s.status, - createdAt: s.createdAt, - region: s.region, - snapshotId: s.snapshotId, - snapshotTag: s.snapshotTag, - executions: s.executions, - stdoutStreamUrl: s.stdoutStreamUrl, - stderrStreamUrl: s.stderrStreamUrl - })), - total: resp.data.total - }; - } - throw new SandboxResponseError({ message: resp.message }); -} -var SandboxInfoSchema, ListSandboxesDataSchema, ListSandboxesResponseSchema; -var init_list5 = __esm(() => { - init_zod(); - init_api2(); - init_util3(); - SandboxInfoSchema = exports_external.object({ - sandboxId: exports_external.string().describe("Unique identifier for the sandbox"), - status: exports_external.enum(["creating", "idle", "running", "terminated", "failed"]).describe("Current status of the sandbox"), - createdAt: exports_external.string().describe("ISO timestamp when the sandbox was created"), - region: exports_external.string().optional().describe("Region where the sandbox is running"), - snapshotId: exports_external.string().optional().describe("Snapshot ID this sandbox was created from"), - snapshotTag: exports_external.string().optional().describe("Snapshot tag this sandbox was created from"), - executions: exports_external.number().describe("Total number of executions in this sandbox"), - stdoutStreamUrl: exports_external.string().optional().describe("URL for streaming stdout output"), - stderrStreamUrl: exports_external.string().optional().describe("URL for streaming stderr output") - }).describe("Summary information about a sandbox"); - ListSandboxesDataSchema = exports_external.object({ - sandboxes: exports_external.array(SandboxInfoSchema).describe("List of sandbox entries"), - total: exports_external.number().describe("Total number of sandboxes matching the query") - }).describe("Paginated list of sandboxes"); - ListSandboxesResponseSchema = APIResponseSchema(ListSandboxesDataSchema); -}); - -// ../../../../packages/server/dist/api/sandbox/destroy.js -async function sandboxDestroy(client, params) { - const { sandboxId, orgId } = params; - const queryParams = new URLSearchParams; - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `/sandbox/${API_VERSION}/${sandboxId}${queryString ? `?${queryString}` : ""}`; - const resp = await client.delete(url2, DestroyResponseSchema); - if (resp.success) { - return; - } - throw new SandboxResponseError({ message: resp.message, sandboxId }); -} -var DestroyResponseSchema; -var init_destroy = __esm(() => { - init_api2(); - init_util3(); - DestroyResponseSchema = APIResponseSchemaNoData(); -}); - -// ../../../../packages/server/dist/config.js -function resolveRegion(region) { - const resolved = region ?? process.env.AGENTUITY_REGION; - if (!resolved) { - throw new Error("Region is required but not provided. Set the AGENTUITY_REGION environment variable or pass region as a parameter."); - } - return resolved; -} -function getServiceUrls(region) { - const resolvedRegion = resolveRegion(region); - const transportUrl = process.env.AGENTUITY_TRANSPORT_URL || buildRegionalURL(resolvedRegion, "catalyst"); - return { - keyvalue: process.env.AGENTUITY_KEYVALUE_URL || transportUrl, - stream: process.env.AGENTUITY_STREAM_URL || buildRegionalURL(resolvedRegion, "streams"), - vector: process.env.AGENTUITY_VECTOR_URL || transportUrl, - catalyst: process.env.AGENTUITY_CATALYST_URL || transportUrl, - otel: process.env.AGENTUITY_OTLP_URL || buildRegionalURL(resolvedRegion, "otel"), - sandbox: process.env.AGENTUITY_SANDBOX_URL || transportUrl - }; -} -function getDomainSuffix(region) { - if (region === "local") { - return "agentuity.io"; - } - return "agentuity.cloud"; -} -function buildRegionalURL(region, hostname3) { - const suffix = getDomainSuffix(region); - if (suffix === "agentuity.io") { - return `https://${hostname3}.${suffix}`; - } - return `https://${hostname3}-${region}.${suffix}`; -} - -// ../../../../packages/server/dist/api/sandbox/run.js -async function sandboxRun(client, params) { - const { options, orgId, region, apiKey, signal, stdin, stdout, stderr, logger } = params; - const started = Date.now(); - let stdinStreamId; - let stdinStreamUrl; - if (stdin && region && apiKey) { - const streamResult = await createStdinStream(region, apiKey, orgId, logger); - stdinStreamId = streamResult.id; - stdinStreamUrl = streamResult.url; - logger?.debug("created stdin stream: %s", stdinStreamId); - } - const createResponse = await sandboxCreate(client, { - options: { - ...options, - command: { - exec: options.command.exec, - files: options.command.files, - mode: "oneshot" - }, - stream: { - ...options.stream, - stdin: stdinStreamId - } - }, - orgId - }); - const sandboxId = createResponse.sandboxId; - const stdoutStreamUrl = createResponse.stdoutStreamUrl; - const stderrStreamUrl = createResponse.stderrStreamUrl; - logger?.debug("sandbox created: %s, stdoutUrl: %s, stderrUrl: %s", sandboxId, stdoutStreamUrl ?? "none", stderrStreamUrl ?? "none"); - const abortController = new AbortController; - const streamPromises = []; - try { - if (stdin && stdinStreamUrl && apiKey) { - const stdinPromise = streamStdinToUrl(stdin, stdinStreamUrl, apiKey, abortController.signal, logger); - streamPromises.push(stdinPromise); - } - const isCombinedOutput = stdoutStreamUrl && stderrStreamUrl && stdoutStreamUrl === stderrStreamUrl; - if (isCombinedOutput) { - if (stdout) { - logger?.debug("using combined output stream (stdout === stderr)"); - const combinedPromise = streamUrlToWritable(stdoutStreamUrl, stdout, abortController.signal, logger); - streamPromises.push(combinedPromise); - } - } else { - if (stdoutStreamUrl && stdout) { - const stdoutPromise = streamUrlToWritable(stdoutStreamUrl, stdout, abortController.signal, logger); - streamPromises.push(stdoutPromise); - } - if (stderrStreamUrl && stderr) { - const stderrPromise = streamUrlToWritable(stderrStreamUrl, stderr, abortController.signal, logger); - streamPromises.push(stderrPromise); - } - } - let attempts = 0; - let finalStatus = null; - while (attempts < MAX_POLL_ATTEMPTS) { - if (signal?.aborted) { - abortController.abort(); - throw new SandboxResponseError({ - message: "Sandbox execution cancelled", - sandboxId - }); - } - await sleep(POLL_INTERVAL_MS); - attempts++; - try { - const sandboxInfo = await sandboxGet(client, { sandboxId, orgId }); - if (sandboxInfo.status === "terminated") { - finalStatus = "terminated"; - break; - } - if (sandboxInfo.status === "failed") { - finalStatus = "failed"; - break; - } - } catch { - continue; - } - } - logger?.debug("waiting for streams to complete..."); - await Promise.allSettled(streamPromises); - logger?.debug("streams completed"); - if (finalStatus === "terminated") { - return { - sandboxId, - exitCode: 0, - durationMs: Date.now() - started - }; - } - if (finalStatus === "failed") { - return { - sandboxId, - exitCode: 1, - durationMs: Date.now() - started - }; - } - throw new SandboxResponseError({ - message: "Sandbox execution polling timed out", - sandboxId - }); - } catch (error48) { - abortController.abort(); - try { - await sandboxDestroy(client, { sandboxId, orgId }); - } catch {} - throw error48; - } -} -async function createStdinStream(region, apiKey, orgId, logger) { - const urls = getServiceUrls(region); - const streamBaseUrl = urls.stream; - const queryParams = new URLSearchParams; - if (orgId) { - queryParams.set("orgId", orgId); - } - const queryString = queryParams.toString(); - const url2 = `${streamBaseUrl}${queryString ? `?${queryString}` : ""}`; - logger?.trace("creating stdin stream: %s", url2); - const response = await fetch(url2, { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${apiKey}` - }, - body: JSON.stringify({ - name: `sandbox-stdin-${Date.now()}` - }) - }); - if (!response.ok) { - throw new Error(`Failed to create stdin stream: ${response.status} ${response.statusText}`); - } - const data = await response.json(); - logger?.debug("created stdin stream: %s", data.id); - const putQueryString = orgId ? `?orgId=${encodeURIComponent(orgId)}` : ""; - return { - id: data.id, - url: `${streamBaseUrl}/${data.id}${putQueryString}` - }; -} -async function streamStdinToUrl(stdin, url2, apiKey, signal, logger) { - try { - logger?.debug("streaming stdin to: %s", url2); - let controllerClosed = false; - const webStream = new ReadableStream({ - start(controller) { - stdin.on("data", (chunk) => { - if (!signal.aborted && !controllerClosed) { - controller.enqueue(chunk); - } - }); - stdin.on("end", () => { - if (!controllerClosed) { - controllerClosed = true; - controller.close(); - } - }); - stdin.on("error", (err) => { - if (!controllerClosed) { - controllerClosed = true; - controller.error(err); - } - }); - signal.addEventListener("abort", () => { - if (!controllerClosed) { - controllerClosed = true; - controller.close(); - } - }); - } - }); - const response = await fetch(url2, { - method: "PUT", - headers: { - Authorization: `Bearer ${apiKey}` - }, - body: webStream, - signal, - duplex: "half" - }); - if (!response.ok) { - logger?.debug("stdin stream PUT failed: %d", response.status); - } else { - logger?.debug("stdin stream completed"); - } - } catch (err) { - if (err instanceof Error && err.name === "AbortError") { - logger?.debug("stdin stream aborted (expected on completion)"); - } else { - logger?.debug("stdin stream error: %s", err); - } - } -} -async function streamUrlToWritable(url2, writable, signal, logger) { - try { - logger?.debug("fetching stream: %s", url2); - const response = await fetch(url2, { signal }); - logger?.debug("stream response status: %d", response.status); - if (!response.ok || !response.body) { - logger?.debug("stream response not ok or no body"); - return; - } - const reader = response.body.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) { - logger?.debug("stream EOF"); - break; - } - if (value) { - logger?.debug("stream chunk: %d bytes", value.length); - await writeAndDrain(writable, value); - } - } - } catch (err) { - if (err instanceof Error && err.name === "AbortError") { - logger?.debug("stream aborted"); - return; - } - logger?.debug("stream error: %s", err); - } -} -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} -var POLL_INTERVAL_MS = 500, MAX_POLL_ATTEMPTS = 7200; -var init_run = __esm(() => { - init_create4(); - init_destroy(); - init_get3(); - init_util3(); -}); - -// ../../../../packages/server/dist/api/sandbox/index.js -var init_sandbox = __esm(() => { - init_create4(); - init_execute(); - init_get3(); - init_list5(); - init_destroy(); - init_run(); - init_files(); -}); - -// ../../../../packages/server/dist/api/session/index.js -var init_session2 = () => {}; - -// ../../../../packages/server/dist/api/thread/index.js -var init_thread = () => {}; - -// ../../../../packages/server/dist/api/user/whoami.js -var OrganizationSchema, WhoamiResponse, WhoamiResponseSchema; -var init_whoami = __esm(() => { - init_zod(); - init_api2(); - OrganizationSchema = exports_external.object({ - id: exports_external.string().describe("the unique id for the organization"), - name: exports_external.string().describe("the name of the organization") - }); - WhoamiResponse = exports_external.object({ - firstName: exports_external.string().describe("the first name of the user"), - lastName: exports_external.string().describe("the last name of the user"), - organizations: exports_external.array(OrganizationSchema).describe("the organizations the user is a member of") - }); - WhoamiResponseSchema = APIResponseSchema(WhoamiResponse); -}); - -// ../../../../packages/server/dist/api/user/index.js -var init_user = __esm(() => { - init_whoami(); -}); - -// ../../../../packages/server/dist/api/index.js -var init_api3 = __esm(() => { - init_api2(); - init_apikey(); - init_db(); - init_org(); - init_project(); - init_region(); - init_sandbox(); - init_session2(); - init_thread(); - init_user(); -}); - -// ../../../../packages/server/dist/server.js -function redact(input, prefix = 4, suffix = 4, mask = "*") { - if (!input) - return ""; - if (input.length <= prefix + suffix) { - return mask.repeat(input.length); - } - const start = input.slice(0, prefix); - const end = input.slice(-suffix); - const hiddenLength = input.length - prefix - suffix; - return start + mask.repeat(hiddenLength) + end; -} - -class ServerFetchAdapter { - #config; - #logger; - constructor(config2, logger) { - this.#config = config2; - this.#logger = logger; - } - async _invoke(url2, options) { - const headers = { - ...options.headers, - ...this.#config.headers - }; - if (options.contentType) { - headers["Content-Type"] = options.contentType; - } else if (typeof options.body === "string" || options.body instanceof Uint8Array || options.body instanceof ArrayBuffer) { - headers["Content-Type"] = "application/octet-stream"; - } - const method = options.method ?? "POST"; - this.#logger.trace("sending %s to %s with headers: %s", method, url2, redactHeaders(headers)); - const res = await fetch(url2, { - method, - body: options.body, - headers, - signal: options.signal, - ...options.duplex ? { duplex: options.duplex } : {} - }); - if (res.ok) { - switch (res.status) { - case 100: - case 101: - case 102: - case 204: - case 304: - return { - ok: true, - data: undefined, - response: res - }; - default: - break; - } - if (options?.binary) { - return { - ok: true, - data: undefined, - response: res - }; - } - const data = await fromResponse(res); - return { - ok: true, - data, - response: res - }; - } - if (res.status === 404) { - return { - ok: false, - response: res - }; - } - const err = await toServiceException(method, url2, res); - throw err; - } - async invoke(url2, options = { method: "POST" }) { - if (this.#config.onBefore) { - let result = undefined; - let err = undefined; - await this.#config.onBefore(url2, options, async () => { - try { - result = await this._invoke(url2, options); - if (this.#config.onAfter) { - await this.#config.onAfter(url2, options, result); - } - } catch (ex) { - err = ex; - if (this.#config.onAfter && err instanceof ServiceException) { - await this.#config.onAfter(url2, options, { - ok: false, - response: new Response(err.message, { - status: err.statusCode - }) - }, err); - } - } - }); - if (err) { - throw err; - } - return result; - } else { - return await this._invoke(url2, options); - } - } -} -function createServerFetchAdapter(config2, logger) { - return new ServerFetchAdapter(config2, logger); -} -var sensitiveHeaders, redactHeaders = (kv) => { - const values = []; - for (const k of Object.keys(kv)) { - const _k = k.toLowerCase(); - const v = kv[k]; - if (sensitiveHeaders.has(_k)) { - if (_k === "authorization" && v.startsWith("Bearer ")) { - values.push(`${_k}=Bearer ${redact(v.substring(7))}`); - } else { - values.push(`${_k}=${redact(v)}`); - } - } else { - values.push(`${_k}=${v}`); - } - } - return "[" + values.join(",") + "]"; -}; -var init_server = __esm(() => { - init_dist(); - sensitiveHeaders = new Set(["authorization", "x-api-key"]); -}); - -// ../../../../packages/schema/dist/base.js -function createIssue(message, path) { - return path ? { message, path } : { message }; -} -function success2(value) { - return { value }; -} -function failure(issues) { - return { issues }; -} -function createParseMethods() { - return { - parse(value) { - const result = this["~standard"].validate(value); - if (result instanceof Promise) { - throw new Error("Async validation not supported in parse()"); - } - if (result.issues) { - throw new ValidationError(result.issues); - } - return result.value; - }, - safeParse(value) { - const result = this["~standard"].validate(value); - if (result instanceof Promise) { - throw new Error("Async validation not supported in safeParse()"); - } - if (result.issues) { - return { success: false, error: new ValidationError(result.issues) }; - } - return { success: true, data: result.value }; - } - }; -} -var SCHEMA_KIND, ValidationError; -var init_base = __esm(() => { - SCHEMA_KIND = Symbol.for("@agentuity/schema-kind"); - ValidationError = class ValidationError extends Error { - issues; - constructor(issues) { - const message = issues.map((issue2) => { - const path = issue2.path ? `[${issue2.path.map((p) => typeof p === "object" ? p.key : p).join(".")}]` : ""; - return path ? `${path}: ${issue2.message}` : issue2.message; - }).join(` -`); - super(message); - this.name = "ValidationError"; - this.issues = issues; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, ValidationError); - } - } - toString() { - return `${this.name}: ${this.message}`; - } - }; -}); - -// ../../../../packages/schema/dist/utils/nullable.js -var exports_nullable = {}; -__export(exports_nullable, { - nullable: () => nullable2, - NullableSchema: () => NullableSchema -}); -function nullable2(schema) { - return new NullableSchema(schema); -} -var NullableSchema; -var init_nullable = __esm(() => { - init_base(); - NullableSchema = class NullableSchema { - [SCHEMA_KIND] = "NullableSchema"; - schema; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value === null) { - return success2(null); - } - return this.schema["~standard"].validate(value); - }, - types: undefined - }; - parseMethods = createParseMethods(); - constructor(schema) { - this.schema = schema; - } - describe(description) { - this.description = description; - return this; - } - optional() { - const { optional: optional2 } = (init_optional(), __toCommonJS(exports_optional)); - return optional2(this); - } - nullable() { - return this; - } - parse = this.parseMethods.parse; - safeParse = this.parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/utils/optional.js -var exports_optional = {}; -__export(exports_optional, { - optional: () => optional2, - OptionalSchema: () => OptionalSchema -}); -function optional2(schema) { - return new OptionalSchema(schema); -} -var OptionalSchema; -var init_optional = __esm(() => { - init_base(); - OptionalSchema = class OptionalSchema { - [SCHEMA_KIND] = "OptionalSchema"; - schema; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value === undefined) { - return success2(undefined); - } - return this.schema["~standard"].validate(value); - }, - types: undefined - }; - parseMethods = createParseMethods(); - constructor(schema) { - this.schema = schema; - } - describe(description) { - this.description = description; - return this; - } - optional() { - return this; - } - nullable() { - const { nullable: nullable3 } = (init_nullable(), __toCommonJS(exports_nullable)); - return nullable3(this); - } - parse = this.parseMethods.parse; - safeParse = this.parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/string.js -function string4() { - return new StringSchema; -} -var parseMethods, StringSchema; -var init_string = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods = createParseMethods(); - StringSchema = class StringSchema { - [SCHEMA_KIND] = "StringSchema"; - description; - _min; - _max; - _email; - _url; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (typeof value !== "string") { - return failure([createIssue(`Expected string, got ${typeof value}`)]); - } - if (this._min !== undefined && value.length < this._min) { - return failure([ - createIssue(`String must be at least ${this._min} characters, got ${value.length}`) - ]); - } - if (this._max !== undefined && value.length > this._max) { - return failure([ - createIssue(`String must be at most ${this._max} characters, got ${value.length}`) - ]); - } - if (this._email) { - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - if (!emailRegex.test(value)) { - return failure([createIssue(`Invalid email format`)]); - } - } - if (this._url) { - try { - new URL(value); - } catch { - return failure([createIssue(`Invalid URL format`)]); - } - } - return success2(value); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - min(length) { - const clone2 = this._clone(); - clone2._min = length; - return clone2; - } - max(length) { - const clone2 = this._clone(); - clone2._max = length; - return clone2; - } - email() { - const clone2 = this._clone(); - clone2._email = true; - return clone2; - } - url() { - const clone2 = this._clone(); - clone2._url = true; - return clone2; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - _clone() { - const clone2 = new StringSchema; - clone2.description = this.description; - clone2._min = this._min; - clone2._max = this._max; - clone2._email = this._email; - clone2._url = this._url; - return clone2; - } - parse = parseMethods.parse; - safeParse = parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/number.js -function number4() { - return new NumberSchema; -} -var parseMethods2, NumberSchema; -var init_number = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods2 = createParseMethods(); - NumberSchema = class NumberSchema { - [SCHEMA_KIND] = "NumberSchema"; - description; - _finite = false; - _min; - _max; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (typeof value !== "number" || Number.isNaN(value)) { - return failure([createIssue(`Expected number, got ${typeof value}`)]); - } - if (this._finite && !Number.isFinite(value)) { - return failure([createIssue("Expected finite number (not Infinity or -Infinity)")]); - } - if (this._min !== undefined && value < this._min) { - return failure([createIssue(`Expected number >= ${this._min}, got ${value}`)]); - } - if (this._max !== undefined && value > this._max) { - return failure([createIssue(`Expected number <= ${this._max}, got ${value}`)]); - } - return success2(value); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - finite() { - const clone2 = this._clone(); - clone2._finite = true; - return clone2; - } - min(value) { - const clone2 = this._clone(); - clone2._min = value; - return clone2; - } - max(value) { - const clone2 = this._clone(); - clone2._max = value; - return clone2; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - _clone() { - const clone2 = new NumberSchema; - clone2.description = this.description; - clone2._finite = this._finite; - clone2._min = this._min; - clone2._max = this._max; - return clone2; - } - parse = parseMethods2.parse; - safeParse = parseMethods2.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/boolean.js -function boolean4() { - return new BooleanSchema; -} -var parseMethods3, BooleanSchema; -var init_boolean = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods3 = createParseMethods(); - BooleanSchema = class BooleanSchema { - [SCHEMA_KIND] = "BooleanSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (typeof value !== "boolean") { - return failure([createIssue(`Expected boolean, got ${typeof value}`)]); - } - return success2(value); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods3.parse; - safeParse = parseMethods3.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/null.js -function null_() { - return new NullSchema; -} -var parseMethods4, NullSchema; -var init_null = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods4 = createParseMethods(); - NullSchema = class NullSchema { - [SCHEMA_KIND] = "NullSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value !== null) { - return failure([createIssue(`Expected null, got ${typeof value}`)]); - } - return success2(value); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods4.parse; - safeParse = parseMethods4.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/undefined.js -function undefined_() { - return new UndefinedSchema; -} -var parseMethods5, UndefinedSchema; -var init_undefined = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods5 = createParseMethods(); - UndefinedSchema = class UndefinedSchema { - [SCHEMA_KIND] = "UndefinedSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value !== undefined) { - return failure([createIssue(`Expected undefined, got ${typeof value}`)]); - } - return success2(value); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods5.parse; - safeParse = parseMethods5.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/unknown.js -function unknown2() { - return new UnknownSchema; -} -var parseMethods6, UnknownSchema; -var init_unknown = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods6 = createParseMethods(); - UnknownSchema = class UnknownSchema { - [SCHEMA_KIND] = "UnknownSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => success2(value), - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods6.parse; - safeParse = parseMethods6.safeParse; - }; -}); - -// ../../../../packages/schema/dist/primitives/any.js -function any2() { - return new AnySchema; -} -var parseMethods7, AnySchema; -var init_any = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods7 = createParseMethods(); - AnySchema = class AnySchema { - [SCHEMA_KIND] = "AnySchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => success2(value), - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods7.parse; - safeParse = parseMethods7.safeParse; - }; -}); - -// ../../../../packages/schema/dist/complex/object.js -function object2(shape) { - return new ObjectSchema(shape); -} -var ObjectSchema; -var init_object = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - ObjectSchema = class ObjectSchema { - shape; - [SCHEMA_KIND] = "ObjectSchema"; - description; - parseMethods = createParseMethods(); - constructor(shape) { - this.shape = shape; - } - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value === null) { - return failure([createIssue("Expected object, got null")]); - } - if (Array.isArray(value)) { - return failure([createIssue("Expected object, got array")]); - } - if (typeof value !== "object") { - return failure([createIssue(`Expected object, got ${typeof value}`)]); - } - const result = {}; - const issues = []; - for (const [key, schema] of Object.entries(this.shape)) { - const fieldValue = value[key]; - const validation = schema["~standard"].validate(fieldValue); - if (validation instanceof Promise) { - throw new Error("Async validation not supported"); - } - if (validation.issues) { - for (const issue2 of validation.issues) { - issues.push(createIssue(issue2.message, issue2.path ? [key, ...issue2.path] : [key])); - } - } else { - result[key] = validation.value; - } - } - if (issues.length > 0) { - return failure(issues); - } - return success2(result); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - pick(keys) { - const newShape = {}; - for (const key of keys) { - if (key in this.shape) { - newShape[key] = this.shape[key]; - } - } - return new ObjectSchema(newShape); - } - omit(keys) { - const keysSet = new Set(keys); - const newShape = {}; - for (const [key, schema] of Object.entries(this.shape)) { - if (!keysSet.has(key)) { - newShape[key] = schema; - } - } - return new ObjectSchema(newShape); - } - partial() { - const newShape = {}; - for (const [key, schema] of Object.entries(this.shape)) { - newShape[key] = optional2(schema); - } - return new ObjectSchema(newShape); - } - extend(extension) { - const newShape = { ...this.shape, ...extension }; - return new ObjectSchema(newShape); - } - parse = this.parseMethods.parse; - safeParse = this.parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/complex/array.js -function array2(itemSchema) { - return new ArraySchema(itemSchema); -} -var ArraySchema; -var init_array = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - ArraySchema = class ArraySchema { - itemSchema; - [SCHEMA_KIND] = "ArraySchema"; - description; - parseMethods = createParseMethods(); - constructor(itemSchema) { - this.itemSchema = itemSchema; - } - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value === null) { - return failure([createIssue("Expected array, got null")]); - } - if (!Array.isArray(value)) { - return failure([createIssue(`Expected array, got ${typeof value}`)]); - } - const result = []; - const issues = []; - for (let i = 0;i < value.length; i++) { - const validation = this.itemSchema["~standard"].validate(value[i]); - if (validation instanceof Promise) { - throw new Error("Async validation not supported"); - } - if (validation.issues) { - for (const issue2 of validation.issues) { - issues.push(createIssue(issue2.message, issue2.path ? [i, ...issue2.path] : [i])); - } - } else { - result.push(validation.value); - } - } - if (issues.length > 0) { - return failure(issues); - } - return success2(result); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = this.parseMethods.parse; - safeParse = this.parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/complex/record.js -function record2(keySchema, valueSchema) { - return new RecordSchema(keySchema, valueSchema); -} -var RecordSchema; -var init_record = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - RecordSchema = class RecordSchema { - keySchema; - valueSchema; - [SCHEMA_KIND] = "RecordSchema"; - description; - recordParseMethods = createParseMethods(); - constructor(keySchema, valueSchema) { - this.keySchema = keySchema; - this.valueSchema = valueSchema; - } - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value === null) { - return failure([createIssue("Expected record, got null")]); - } - if (Array.isArray(value)) { - return failure([createIssue("Expected record, got array")]); - } - if (typeof value !== "object") { - return failure([createIssue(`Expected record, got ${typeof value}`)]); - } - const result = {}; - const issues = []; - for (const [key, val] of Object.entries(value)) { - const keyValidation = this.keySchema["~standard"].validate(key); - if (keyValidation instanceof Promise) { - throw new Error("Async validation not supported"); - } - if (keyValidation.issues) { - for (const issue2 of keyValidation.issues) { - issues.push(createIssue(`Invalid key "${key}": ${issue2.message}`, [key])); - } - continue; - } - const valueValidation = this.valueSchema["~standard"].validate(val); - if (valueValidation instanceof Promise) { - throw new Error("Async validation not supported"); - } - if (valueValidation.issues) { - for (const issue2 of valueValidation.issues) { - issues.push(createIssue(issue2.message, issue2.path ? [key, ...issue2.path] : [key])); - } - } else { - result[key] = valueValidation.value; - } - } - if (issues.length > 0) { - return failure(issues); - } - return success2(result); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = this.recordParseMethods.parse; - safeParse = this.recordParseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/utils/literal.js -function literal2(value) { - return new LiteralSchema(value); -} -var LiteralSchema; -var init_literal = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - LiteralSchema = class LiteralSchema { - value; - [SCHEMA_KIND] = "LiteralSchema"; - description; - parseMethods = createParseMethods(); - constructor(value) { - this.value = value; - } - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (input) => { - if (input !== this.value) { - return failure([ - createIssue(`Expected literal value ${JSON.stringify(this.value)}, got ${JSON.stringify(input)}`) - ]); - } - return success2(this.value); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = this.parseMethods.parse; - safeParse = this.parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/utils/union.js -function union2(...schemas3) { - return new UnionSchema(schemas3); -} -var UnionSchema; -var init_union = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - UnionSchema = class UnionSchema { - schemas; - [SCHEMA_KIND] = "UnionSchema"; - description; - parseMethods = createParseMethods(); - constructor(schemas3) { - this.schemas = schemas3; - } - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - const allIssues = []; - for (const schema of this.schemas) { - const result = schema["~standard"].validate(value); - if (result instanceof Promise) { - throw new Error("Async validation not supported"); - } - if (!result.issues) { - return result; - } - allIssues.push(...result.issues); - } - return failure([ - createIssue(`Value did not match any of the union types (${allIssues.length} validation errors)`) - ]); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = this.parseMethods.parse; - safeParse = this.parseMethods.safeParse; - }; -}); - -// ../../../../packages/schema/dist/json-schema.js -function isSchemaType(schema, typeName) { - return schema?.[SCHEMA_KIND] === typeName; -} -function toJSONSchema2(schema) { - const result = {}; - if (schema.description) { - result.description = schema.description; - } - if (isSchemaType(schema, "StringSchema") || isSchemaType(schema, "CoerceStringSchema")) { - result.type = "string"; - return result; - } - if (isSchemaType(schema, "NumberSchema") || isSchemaType(schema, "CoerceNumberSchema")) { - result.type = "number"; - return result; - } - if (isSchemaType(schema, "BooleanSchema") || isSchemaType(schema, "CoerceBooleanSchema")) { - result.type = "boolean"; - return result; - } - if (isSchemaType(schema, "NullSchema")) { - result.type = "null"; - return result; - } - if (isSchemaType(schema, "UndefinedSchema")) { - return {}; - } - if (isSchemaType(schema, "LiteralSchema")) { - const value = schema.value; - result.const = value; - if (typeof value === "string") { - result.type = "string"; - } else if (typeof value === "number") { - result.type = "number"; - } else if (typeof value === "boolean") { - result.type = "boolean"; - } - return result; - } - if (isSchemaType(schema, "ObjectSchema")) { - result.type = "object"; - const shape = schema.shape; - result.properties = {}; - result.required = []; - for (const [key, fieldSchema] of Object.entries(shape)) { - result.properties[key] = toJSONSchema2(fieldSchema); - if (!isSchemaType(fieldSchema, "OptionalSchema")) { - result.required.push(key); - } - } - if (result.required.length === 0) { - delete result.required; - } - return result; - } - if (isSchemaType(schema, "ArraySchema")) { - result.type = "array"; - const itemSchema = schema.itemSchema; - result.items = toJSONSchema2(itemSchema); - return result; - } - if (isSchemaType(schema, "OptionalSchema")) { - const innerSchema = schema.schema; - const innerJSON = toJSONSchema2(innerSchema); - return innerJSON; - } - if (isSchemaType(schema, "NullableSchema")) { - const innerSchema = schema.schema; - const innerJSON = toJSONSchema2(innerSchema); - return { - anyOf: [innerJSON, { type: "null" }], - ...schema.description && { description: schema.description } - }; - } - if (isSchemaType(schema, "UnionSchema")) { - const schemas3 = schema.schemas; - result.anyOf = schemas3.map((schema2) => toJSONSchema2(schema2)); - return result; - } - if (isSchemaType(schema, "RecordSchema")) { - result.type = "object"; - const valueSchema = schema.valueSchema; - if (valueSchema) { - result.additionalProperties = toJSONSchema2(valueSchema); - } - return result; - } - if (isSchemaType(schema, "UnknownSchema") || isSchemaType(schema, "AnySchema")) { - return result; - } - if (isSchemaType(schema, "CoerceDateSchema")) { - result.type = "string"; - result.format = "date-time"; - return result; - } - return result; -} -function fromJSONSchema2(jsonSchema) { - if (jsonSchema.const !== undefined) { - const schema = literal2(jsonSchema.const); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - if (jsonSchema.anyOf && Array.isArray(jsonSchema.anyOf)) { - if (jsonSchema.anyOf.length === 2) { - const nullIndex = jsonSchema.anyOf.findIndex((s) => s.type === "null"); - if (nullIndex !== -1) { - const otherIndex = nullIndex === 0 ? 1 : 0; - const innerSchema = fromJSONSchema2(jsonSchema.anyOf[otherIndex]); - const schema2 = nullable2(innerSchema); - if (jsonSchema.description) { - schema2.describe(jsonSchema.description); - } - return schema2; - } - } - const schemas3 = jsonSchema.anyOf.map((s) => fromJSONSchema2(s)); - const schema = union2(...schemas3); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - if (jsonSchema.oneOf && Array.isArray(jsonSchema.oneOf)) { - const schemas3 = jsonSchema.oneOf.map((s) => fromJSONSchema2(s)); - const schema = union2(...schemas3); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - if (jsonSchema.enum && Array.isArray(jsonSchema.enum)) { - const schemas3 = jsonSchema.enum.map((value) => literal2(value)); - const schema = union2(...schemas3); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - switch (jsonSchema.type) { - case "string": { - const schema = string4(); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - case "number": - case "integer": { - const schema = number4(); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - case "boolean": { - const schema = boolean4(); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - case "null": { - const schema = null_(); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - case "array": { - if (!jsonSchema.items) { - throw new Error("Array type must have items property"); - } - const itemSchema = fromJSONSchema2(jsonSchema.items); - const schema = array2(itemSchema); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - case "object": { - if (!jsonSchema.properties) { - const schema2 = object2({}); - if (jsonSchema.description) { - schema2.describe(jsonSchema.description); - } - return schema2; - } - const shape = {}; - const requiredFields = new Set(jsonSchema.required || []); - for (const [key, propSchema] of Object.entries(jsonSchema.properties)) { - let fieldSchema = fromJSONSchema2(propSchema); - if (!requiredFields.has(key)) { - fieldSchema = optional2(fieldSchema); - } - shape[key] = fieldSchema; - } - const schema = object2(shape); - if (jsonSchema.description) { - schema.describe(jsonSchema.description); - } - return schema; - } - default: { - if (jsonSchema.properties) { - return fromJSONSchema2({ ...jsonSchema, type: "object" }); - } - if (jsonSchema.items) { - return fromJSONSchema2({ ...jsonSchema, type: "array" }); - } - return string4(); - } - } -} -var init_json_schema2 = __esm(() => { - init_base(); - init_string(); - init_number(); - init_boolean(); - init_null(); - init_object(); - init_array(); - init_literal(); - init_optional(); - init_nullable(); - init_union(); -}); - -// ../../../../packages/schema/dist/coerce/string.js -function coerceString() { - return new CoerceStringSchema; -} -var parseMethods8, CoerceStringSchema; -var init_string2 = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods8 = createParseMethods(); - CoerceStringSchema = class CoerceStringSchema { - [SCHEMA_KIND] = "CoerceStringSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - return success2(String(value)); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods8.parse; - safeParse = parseMethods8.safeParse; - }; -}); - -// ../../../../packages/schema/dist/coerce/number.js -function coerceNumber() { - return new CoerceNumberSchema; -} -var parseMethods9, CoerceNumberSchema; -var init_number2 = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods9 = createParseMethods(); - CoerceNumberSchema = class CoerceNumberSchema { - [SCHEMA_KIND] = "CoerceNumberSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (typeof value === "number") { - if (Number.isNaN(value)) { - return failure([createIssue("Cannot coerce NaN to number")]); - } - return success2(value); - } - const coerced = Number(value); - if (Number.isNaN(coerced)) { - return failure([createIssue(`Cannot coerce ${typeof value} to number`)]); - } - return success2(coerced); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods9.parse; - safeParse = parseMethods9.safeParse; - }; -}); - -// ../../../../packages/schema/dist/coerce/boolean.js -function coerceBoolean() { - return new CoerceBooleanSchema; -} -var parseMethods10, CoerceBooleanSchema; -var init_boolean2 = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods10 = createParseMethods(); - CoerceBooleanSchema = class CoerceBooleanSchema { - [SCHEMA_KIND] = "CoerceBooleanSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - return success2(Boolean(value)); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods10.parse; - safeParse = parseMethods10.safeParse; - }; -}); - -// ../../../../packages/schema/dist/coerce/date.js -function coerceDate() { - return new CoerceDateSchema; -} -var parseMethods11, CoerceDateSchema; -var init_date = __esm(() => { - init_base(); - init_optional(); - init_nullable(); - parseMethods11 = createParseMethods(); - CoerceDateSchema = class CoerceDateSchema { - [SCHEMA_KIND] = "CoerceDateSchema"; - description; - "~standard" = { - version: 1, - vendor: "agentuity", - validate: (value) => { - if (value instanceof Date) { - if (isNaN(value.getTime())) { - return failure([createIssue("Invalid date")]); - } - return success2(value); - } - const coerced = new Date(value); - if (isNaN(coerced.getTime())) { - return failure([createIssue(`Cannot coerce ${typeof value} to date`)]); - } - return success2(coerced); - }, - types: undefined - }; - describe(description) { - this.description = description; - return this; - } - optional() { - return optional2(this); - } - nullable() { - return nullable2(this); - } - parse = parseMethods11.parse; - safeParse = parseMethods11.safeParse; - }; -}); - -// ../../../../packages/schema/dist/index.js -function enumSchema(values) { - return union2(...values.map((v) => literal2(v))); -} -var s; -var init_dist2 = __esm(() => { - init_json_schema2(); - init_string(); - init_number(); - init_boolean(); - init_null(); - init_undefined(); - init_unknown(); - init_any(); - init_object(); - init_array(); - init_record(); - init_literal(); - init_optional(); - init_nullable(); - init_union(); - init_json_schema2(); - init_string2(); - init_number2(); - init_boolean2(); - init_date(); - s = { - string: string4, - number: number4, - boolean: boolean4, - null: null_, - undefined: undefined_, - unknown: unknown2, - any: any2, - object: object2, - array: array2, - record: record2, - literal: literal2, - optional: optional2, - nullable: nullable2, - union: union2, - enum: enumSchema, - toJSONSchema: toJSONSchema2, - fromJSONSchema: fromJSONSchema2, - coerce: { - string: coerceString, - number: coerceNumber, - boolean: coerceBoolean, - date: coerceDate - } - }; -}); - -// ../../../../packages/server/dist/schema.js -var toJSONSchema3 = (schema) => { - if (schema?.["~standard"]?.vendor === "agentuity") { - return toJSONSchema2(schema); - } - if (schema?._def?.typeName || schema?._def?.type) { - try { - return exports_external.toJSONSchema(schema); - } catch { - return {}; - } - } - return {}; -}; -var init_schema = __esm(() => { - init_zod(); - init_dist2(); -}); - -// ../../../../packages/server/dist/runtime-bootstrap.js -function bootstrapRuntimeEnv(options = {}) { - const profile = options.profile || process.env.AGENTUITY_PROFILE || "local"; - if ((profile === "local" || true) && !process.env.AGENTUITY_REGION) { - process.env.AGENTUITY_REGION = "local"; - } - if (!process.env.AGENTUITY_PROFILE) { - process.env.AGENTUITY_PROFILE = profile; - } - const region2 = process.env.AGENTUITY_REGION; - const serviceUrls = getServiceUrls(region2); - if (!process.env.AGENTUITY_TRANSPORT_URL) { - process.env.AGENTUITY_TRANSPORT_URL = serviceUrls.catalyst; - } - if (!process.env.AGENTUITY_KEYVALUE_URL) { - process.env.AGENTUITY_KEYVALUE_URL = serviceUrls.keyvalue; - } - if (!process.env.AGENTUITY_SANDBOX_URL) { - process.env.AGENTUITY_SANDBOX_URL = serviceUrls.sandbox; - } - if (!process.env.AGENTUITY_STREAM_URL) { - process.env.AGENTUITY_STREAM_URL = serviceUrls.stream; - } - if (!process.env.AGENTUITY_VECTOR_URL) { - process.env.AGENTUITY_VECTOR_URL = serviceUrls.vector; - } - if (!process.env.AGENTUITY_CATALYST_URL) { - process.env.AGENTUITY_CATALYST_URL = serviceUrls.catalyst; - } - if (!process.env.AGENTUITY_OTLP_URL) { - process.env.AGENTUITY_OTLP_URL = serviceUrls.otel; - } -} -var init_runtime_bootstrap = () => {}; - -// ../../../../packages/server/dist/index.js -var init_dist3 = __esm(() => { - init_server(); - init_schema(); - init_runtime_bootstrap(); - init_api3(); -}); - -// ../../../../packages/runtime/dist/services/sandbox/http.js -async function withSpan(name, attributes, fn) { - const tracer = import_api27.trace.getTracer(TRACER_NAME); - const currentContext = import_api27.context.active(); - const span = tracer.startSpan(name, { attributes, kind: import_api27.SpanKind.CLIENT }, currentContext); - const spanContext = import_api27.trace.setSpan(currentContext, span); - try { - const result = await import_api27.context.with(spanContext, fn); - span.setStatus({ code: import_api27.SpanStatusCode.OK }); - return result; - } catch (err) { - const e = err; - span.recordException(e); - span.setStatus({ code: import_api27.SpanStatusCode.ERROR, message: e?.message ?? String(err) }); - throw err; - } finally { - span.end(); - } -} -function createStreamReader(id, baseUrl) { - const streamId = id ?? ""; - const url2 = streamId ? `${baseUrl}/${streamId}` : ""; - return { - id: streamId, - url: url2, - readonly: true, - getReader() { - if (!url2) { - return new ReadableStream({ - start(controller) { - controller.close(); - } - }); - } - return new ReadableStream({ - async start(controller) { - try { - const response = await fetch(url2); - if (!response.ok || !response.body) { - controller.close(); - return; - } - const reader = response.body.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) - break; - controller.enqueue(value); - } - controller.close(); - } catch { - controller.close(); - } - } - }); - } - }; -} -function createSandboxInstance(client, sandboxId, status, streamBaseUrl, stdoutStreamId, stderrStreamId) { - const interleaved = !!(stdoutStreamId && stderrStreamId && stdoutStreamId === stderrStreamId); - return { - id: sandboxId, - status, - stdout: createStreamReader(stdoutStreamId, streamBaseUrl), - stderr: createStreamReader(stderrStreamId, streamBaseUrl), - interleaved, - async execute(options) { - return withSpan("agentuity.sandbox.execute", { - "sandbox.id": sandboxId, - "sandbox.command": options.command?.join(" ") ?? "" - }, () => sandboxExecute(client, { sandboxId, options, signal: options.signal })); - }, - async writeFiles(files) { - await withSpan("agentuity.sandbox.writeFiles", { - "sandbox.id": sandboxId, - "sandbox.files.count": files.length - }, () => sandboxWriteFiles(client, { sandboxId, files })); - }, - async readFile(path) { - return withSpan("agentuity.sandbox.readFile", { - "sandbox.id": sandboxId, - "sandbox.file.path": path - }, () => sandboxReadFile(client, { sandboxId, path })); - }, - async destroy() { - await withSpan("agentuity.sandbox.destroy", { "sandbox.id": sandboxId }, () => sandboxDestroy(client, { sandboxId })); - } - }; -} - -class HTTPSandboxService { - client; - streamBaseUrl; - constructor(client, streamBaseUrl) { - this.client = client; - this.streamBaseUrl = streamBaseUrl; - } - async run(options) { - return withSpan("agentuity.sandbox.run", { - "sandbox.command": options.command?.exec?.join(" ") ?? "", - "sandbox.mode": "oneshot" - }, () => sandboxRun(this.client, { options })); - } - async create(options) { - return withSpan("agentuity.sandbox.create", { - "sandbox.network": options?.network?.enabled ?? false, - "sandbox.snapshot": options?.snapshot ?? "" - }, async () => { - const response = await sandboxCreate(this.client, { options }); - return createSandboxInstance(this.client, response.sandboxId, response.status, this.streamBaseUrl, response.stdoutStreamId, response.stderrStreamId); - }); - } - async get(sandboxId) { - return withSpan("agentuity.sandbox.get", { "sandbox.id": sandboxId }, () => sandboxGet(this.client, { sandboxId })); - } - async list(params) { - return withSpan("agentuity.sandbox.list", { - "sandbox.status": params?.status ?? "", - "sandbox.limit": params?.limit ?? 50 - }, () => sandboxList(this.client, params)); - } - async destroy(sandboxId) { - return withSpan("agentuity.sandbox.destroy", { "sandbox.id": sandboxId }, () => sandboxDestroy(this.client, { sandboxId })); - } -} -var import_api27, TRACER_NAME = "agentuity.sandbox"; -var init_http = __esm(() => { - init_dist3(); - import_api27 = __toESM(require_src(), 1); -}); - -// ../../../../packages/runtime/dist/services/sandbox/index.js -var init_sandbox2 = __esm(() => { - init_http(); -}); - -// ../../../../packages/runtime/dist/services/session/composite.js -class CompositeSessionEventProvider { - providers; - constructor(...providers) { - this.providers = providers; - } - async start(event) { - await Promise.all(this.providers.map((p) => p.start(event))); - } - async complete(event) { - await Promise.all(this.providers.map((p) => p.complete(event))); - } -} - -// ../../../../packages/runtime/dist/logger/util.js -import { formatWithOptions, inspect } from "util"; -function buildContextString(context2) { - if (context2) { - const contextStr = context2 && Object.keys(context2).length > 0 ? Object.entries(context2).map(([key, value]) => { - try { - return `${key}=${typeof value === "object" ? safeStringify(value) : value}`; - } catch { - return `${key}=[object Object]`; - } - }).join(" ") : ""; - return contextStr; - } - return ""; -} -function formatMessage(displayContext, context2, message, args) { - const contextStr = displayContext ? buildContextString(context2) : null; - let _message; - if (typeof message === "string") { - _message = message; - } else if (typeof message === "number" || typeof message === "boolean") { - _message = String(message); - } else if (message === null) { - _message = "null"; - } else if (message === undefined) { - _message = "undefined"; - } else { - _message = inspect(message, { depth: null, colors: false }); - } - let formattedMessage; - try { - if (args.length > 0) { - formattedMessage = formatWithOptions({ depth: null }, _message, ...args); - } else { - formattedMessage = _message; - } - } catch { - formattedMessage = `${_message} ${args.map((arg) => { - try { - return typeof arg === "object" ? safeStringify(arg) : String(arg); - } catch { - return "[object Object]"; - } - }).join(" ")}`; - } - return `${formattedMessage}${contextStr ? ` [${contextStr}]` : ""}`; -} -var init_util4 = __esm(() => { - init_dist(); -}); - -// ../../../../packages/runtime/dist/logger/internal.js -class InternalLogger { - config; - constructor() { - this.config = this.loadConfig(); - } - loadConfig() { - const envLevel = process.env.AGENTUITY_SDK_LOG_LEVEL?.toLowerCase(); - const validLevels = ["debug", "info", "warn", "error", "silent"]; - const level = validLevels.includes(envLevel) ? envLevel : "silent"; - return { - level, - context: { - "@agentuity/source": "sdk-internal", - "@agentuity/timestamp": new Date().toISOString() - } - }; - } - shouldLog(level) { - if (this.config.level === "silent") - return false; - const levelPriority = { - debug: 0, - info: 1, - warn: 2, - error: 3, - silent: 4 - }; - return levelPriority[level] >= levelPriority[this.config.level]; - } - formatMessage(message, ...args) { - const formattedMessage = formatMessage(false, this.config.context, message, args); - return `${cyan}[INTERNAL]${reset} ${formattedMessage}`; - } - debug(message, ...args) { - if (this.shouldLog("debug")) { - console.debug(this.formatMessage(message, ...args)); - } - } - info(message, ...args) { - if (this.shouldLog("info")) { - console.info(this.formatMessage(message, ...args)); - } - } - warn(message, ...args) { - if (this.shouldLog("warn")) { - console.warn(this.formatMessage(message, ...args)); - } - } - error(message, ...args) { - if (this.shouldLog("error")) { - console.error(this.formatMessage(message, ...args)); - } - } - updateConfig(config2) { - this.config = { ...this.config, ...config2 }; - } - getConfig() { - return { ...this.config }; - } - isEnabled() { - return this.config.level !== "silent"; - } - child(context2) { - const childLogger = new InternalLogger; - childLogger.updateConfig({ - ...this.config, - context: { - ...this.config.context, - ...context2 - } - }); - return childLogger; - } -} -var cyan = "\x1B[1;96m", reset = "\x1B[0m", internalLogger, internal; -var init_internal = __esm(() => { - init_util4(); - internalLogger = new InternalLogger; - internal = { - debug: (message, ...args) => internalLogger.debug(message, ...args), - info: (message, ...args) => internalLogger.info(message, ...args), - warn: (message, ...args) => internalLogger.warn(message, ...args), - error: (message, ...args) => internalLogger.error(message, ...args), - updateConfig: (config2) => internalLogger.updateConfig(config2), - getConfig: () => internalLogger.getConfig(), - isEnabled: () => internalLogger.isEnabled(), - child: (context2) => internalLogger.child(context2) - }; -}); - -// ../../../../packages/runtime/dist/services/session/http.js -class HTTPSessionEventProvider { - apiClient; - logger; - constructor(client, logger) { - this.apiClient = client; - this.logger = logger; - } - canSendStartEvent(event) { - if (!event.orgId || !event.projectId) { - internal.info("[session-http] skipping start event - missing required fields: orgId=%s, projectId=%s", event.orgId ?? "missing", event.projectId ?? "missing"); - return false; - } - return true; - } - async start(event) { - if (!this.canSendStartEvent(event)) { - return; - } - internal.info("[session-http] sending start event: %s", event.id); - this.logger.debug("Sending session start event: %s", event.id); - const resp = await this.apiClient.post("/session/2025-03-17", { ...event, timestamp: Date.now() }, APIResponseSchemaNoData(), SessionStartEventDelayedSchema); - if (resp.success) { - internal.info("[session-http] start event sent successfully: %s", event.id); - this.logger.debug("Session start event sent successfully: %s", event.id); - this.startedSessions.add(event.id); - return; - } - internal.info("[session-http] start event failed: %s - %s", event.id, resp.message); - throw new SessionResponseError({ message: resp.message }); - } - startedSessions = new Set; - async complete(event) { - if (!this.startedSessions.has(event.id)) { - internal.info("[session-http] skipping complete event - no matching start: %s", event.id); - return; - } - this.startedSessions.delete(event.id); - internal.info("[session-http] sending complete event: %s, userData: %s", event.id, event.userData ? `${event.userData.length} bytes` : "none"); - this.logger.debug("Sending session complete event: %s", event.id); - const resp = await this.apiClient.put("/session/2025-03-17", { ...event, timestamp: Date.now() }, APIResponseSchemaNoData(), SessionCompleteEventDelayedSchema); - if (resp.success) { - internal.info("[session-http] complete event sent successfully: %s", event.id); - this.logger.debug("Session complete event sent successfully: %s", event.id); - return; - } - internal.info("[session-http] complete event failed: %s - %s", event.id, resp.message); - throw new SessionResponseError({ message: resp.message }); - } -} -var SessionResponseError; -var init_http2 = __esm(() => { - init_dist3(); - init_dist(); - init_internal(); - SessionResponseError = StructuredError("SessionResponseError"); -}); - -// ../../../../packages/runtime/dist/services/session/json.js -import { join as join2 } from "path"; -import { randomUUID } from "crypto"; - -class JSONSessionEventProvider { - directory; - constructor(directory) { - this.directory = directory; - } - makeFilename(type) { - return join2(this.directory, `session-${type}.${Date.now()}${randomUUID()}.json`); - } - async start(event) { - const filename = this.makeFilename("start"); - const payload = JSON.stringify({ ...event, timestamp: new Date }) + ` -`; - await Bun.file(filename).write(payload); - } - async complete(event) { - const filename = this.makeFilename("complete"); - const payload = JSON.stringify({ ...event, timestamp: new Date }) + ` -`; - await Bun.file(filename).write(payload); - } -} -var init_json = () => {}; - -// ../../../../packages/runtime/dist/services/session/local.js -class LocalSessionEventProvider { - async start(event) { - internal.info("[session-local] start event (no-op): %s", event.id); - } - async complete(event) { - internal.info("[session-local] complete event (no-op): %s, userData: %s", event.id, event.userData ? `${event.userData.length} bytes` : "none"); - } -} -var init_local = __esm(() => { - init_internal(); -}); - -// ../../../../packages/runtime/dist/services/session/index.js -var init_session3 = __esm(() => { - init_http2(); - init_json(); - init_local(); -}); - -// ../../../../packages/runtime/dist/services/evalrun/http.js -class HTTPEvalRunEventProvider { - apiClient; - logger; - baseUrl; - constructor(client, logger, baseUrl) { - this.apiClient = client; - this.logger = logger; - this.baseUrl = baseUrl; - } - async start(event) { - const endpoint = "/evalrun/2025-03-17"; - const fullUrl = `${this.baseUrl}${endpoint}`; - const payload = { ...event, timestamp: Date.now() }; - internal.info("[EVALRUN HTTP] ========== START PAYLOAD =========="); - internal.info("[EVALRUN HTTP] id: %s", payload.id); - internal.info("[EVALRUN HTTP] evalId: %s", payload.evalId); - internal.info("[EVALRUN HTTP] evalIdentifier: %s", payload.evalIdentifier); - internal.info("[EVALRUN HTTP] sessionId: %s", payload.sessionId); - internal.info("[EVALRUN HTTP] orgId: %s", payload.orgId); - internal.info("[EVALRUN HTTP] projectId: %s", payload.projectId); - internal.info("[EVALRUN HTTP] devmode: %s", payload.devmode); - internal.info("[EVALRUN HTTP] deploymentId: %s", payload.deploymentId); - internal.info("[EVALRUN HTTP] spanId: %s", payload.spanId); - internal.info("[EVALRUN HTTP] URL: POST %s", fullUrl); - internal.info("[EVALRUN HTTP] ============================================"); - try { - const resp = await this.apiClient.post(endpoint, payload, APIResponseSchemaNoData(), EvalRunStartEventDelayedSchema); - if (resp.success) { - this.logger.debug("[EVALRUN HTTP] Start event sent successfully: %s", event.id); - return; - } - const errorMsg = resp.message || "Unknown error"; - this.logger.error("[EVALRUN HTTP] Start event failed: %s, error: %s", event.id, errorMsg); - throw new EvalRunResponseError({ message: errorMsg }); - } catch (error48) { - this.logger.error("[EVALRUN HTTP] Start event exception: %s, error: %s", event.id, error48 instanceof Error ? error48.message : String(error48)); - if ((error48 instanceof ValidationInputError || error48 instanceof ValidationOutputError) && error48.issues?.length) { - this.logger.error("[EVALRUN HTTP] Validation issues: %s", JSON.stringify(error48.issues, null, 2)); - } - throw error48; - } - } - async complete(event) { - const endpoint = "/evalrun/2025-03-17"; - const fullUrl = `${this.baseUrl}${endpoint}`; - this.logger.debug("[EVALRUN HTTP] Sending eval run complete event: %s", event.id); - this.logger.debug("[EVALRUN HTTP] URL: %s %s", "PUT", fullUrl); - this.logger.debug("[EVALRUN HTTP] Base URL: %s", this.baseUrl); - try { - const resp = await this.apiClient.put(endpoint, { ...event, timestamp: Date.now() }, APIResponseSchemaNoData(), EvalRunCompleteEventDelayedSchema); - if (resp.success) { - this.logger.debug("[EVALRUN HTTP] Complete event sent successfully: %s", event.id); - return; - } - const errorMsg = resp.message || "Unknown error"; - this.logger.error("[EVALRUN HTTP] Complete event failed: %s, error: %s", event.id, errorMsg); - throw new EvalRunResponseError({ message: errorMsg }); - } catch (error48) { - this.logger.error("[EVALRUN HTTP] Complete event exception: %s, error: %s", event.id, error48 instanceof Error ? error48.message : String(error48)); - throw error48; - } - } -} -var EvalRunResponseError; -var init_http3 = __esm(() => { - init_dist3(); - init_dist(); - init_internal(); - EvalRunResponseError = StructuredError("EvalRunResponseError"); -}); - -// ../../../../packages/runtime/dist/services/evalrun/local.js -class LocalEvalRunEventProvider { - async start(event) { - console.log("EvalRun started:", event); - } - async complete(event) { - console.log("EvalRun completed:", event); - } -} - -// ../../../../packages/runtime/dist/services/evalrun/json.js -class JSONEvalRunEventProvider { - exportDir; - constructor(exportDir) { - this.exportDir = exportDir; - } - async start(event) { - const data = { - type: "evalrun_start", - timestamp: Date.now(), - ...event - }; - const filename = `${this.exportDir}/evalrun-${event.id}-start.json`; - await Bun.write(filename, JSON.stringify(data, null, 2)); - } - async complete(event) { - const data = { - type: "evalrun_complete", - timestamp: Date.now(), - ...event - }; - const filename = `${this.exportDir}/evalrun-${event.id}-complete.json`; - await Bun.write(filename, JSON.stringify(data, null, 2)); - } -} - -// ../../../../packages/runtime/dist/services/evalrun/composite.js -class CompositeEvalRunEventProvider { - providers; - constructor(...providers) { - this.providers = providers; - } - async start(event) { - await Promise.allSettled(this.providers.map((provider) => provider.start(event))); - } - async complete(event) { - await Promise.allSettled(this.providers.map((provider) => provider.complete(event))); - } -} - -// ../../../../packages/runtime/dist/services/evalrun/index.js -var init_evalrun2 = __esm(() => { - init_http3(); -}); - -// ../../../../packages/runtime/dist/_events.js -class GlobalEventBus { - eventListeners = new Map; - addEventListener(eventName, callback) { - let callbacks = this.eventListeners.get(eventName); - if (!callbacks) { - callbacks = new Set; - this.eventListeners.set(eventName, callbacks); - } - callbacks.add(callback); - } - removeEventListener(eventName, callback) { - const callbacks = this.eventListeners.get(eventName); - if (!callbacks) - return; - callbacks.delete(callback); - } - async fireEvent(eventName, ...args) { - const callbacks = this.eventListeners.get(eventName); - if (!callbacks || callbacks.size === 0) - return; - for (const callback of callbacks) { - try { - await callback(eventName, ...args); - } catch (error48) { - internal.error(`Error in event listener for '${eventName}':`, error48); - } - } - } - clearAllListeners() { - this.eventListeners.clear(); - } -} -function addEventListener2(eventName, callback) { - globalEventBus.addEventListener(eventName, callback); -} -function removeEventListener(eventName, callback) { - globalEventBus.removeEventListener(eventName, callback); -} -async function fireEvent(eventName, ...args) { - await globalEventBus.fireEvent(eventName, ...args); -} -var globalEventBus; -var init__events = __esm(() => { - init_internal(); - globalEventBus = new GlobalEventBus; -}); - -// ../../../../node_modules/.bun/@traceloop+ai-semantic-conventions@0.21.0/node_modules/@traceloop/ai-semantic-conventions/dist/src/SemanticAttributes.js -var require_SemanticAttributes = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceloopSpanKindValues = exports.LLMRequestTypeValues = exports.EventAttributes = exports.Events = exports.SpanAttributes = undefined; - exports.SpanAttributes = { - LLM_SYSTEM: "gen_ai.system", - LLM_REQUEST_MODEL: "gen_ai.request.model", - LLM_REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens", - LLM_REQUEST_TEMPERATURE: "gen_ai.request.temperature", - LLM_REQUEST_TOP_P: "gen_ai.request.top_p", - LLM_PROMPTS: "gen_ai.prompt", - LLM_COMPLETIONS: "gen_ai.completion", - LLM_INPUT_MESSAGES: "gen_ai.input.messages", - LLM_OUTPUT_MESSAGES: "gen_ai.output.messages", - LLM_RESPONSE_MODEL: "gen_ai.response.model", - LLM_USAGE_PROMPT_TOKENS: "gen_ai.usage.prompt_tokens", - LLM_USAGE_COMPLETION_TOKENS: "gen_ai.usage.completion_tokens", - GEN_AI_AGENT_NAME: "gen_ai.agent.name", - LLM_REQUEST_TYPE: "llm.request.type", - LLM_USAGE_TOTAL_TOKENS: "llm.usage.total_tokens", - LLM_TOP_K: "llm.top_k", - LLM_FREQUENCY_PENALTY: "llm.frequency_penalty", - LLM_PRESENCE_PENALTY: "llm.presence_penalty", - LLM_CHAT_STOP_SEQUENCES: "llm.chat.stop_sequences", - LLM_REQUEST_FUNCTIONS: "llm.request.functions", - VECTOR_DB_VENDOR: "db.system", - VECTOR_DB_QUERY_TOP_K: "db.vector.query.top_k", - VECTOR_DB_TABLE_NAME: "db.vector.table_name", - VECTOR_DB_ADD_COUNT: "db.vector.add.count", - VECTOR_DB_DELETE_SELECTOR: "db.vector.delete.selector", - VECTOR_DB_DELETE_COUNT: "db.vector.delete.count", - VECTOR_DB_GET_SELECTOR: "db.vector.get.selector", - VECTOR_DB_GET_COUNT: "db.vector.get.count", - VECTOR_DB_GET_INCLUDE_METADATA: "db.vector.get.include_metadata", - VECTOR_DB_GET_INCLUDE_VALUES: "db.vector.get.include_values", - TRACELOOP_SPAN_KIND: "traceloop.span.kind", - TRACELOOP_WORKFLOW_NAME: "traceloop.workflow.name", - TRACELOOP_ENTITY_NAME: "traceloop.entity.name", - TRACELOOP_ENTITY_PATH: "traceloop.entity.path", - TRACELOOP_ENTITY_VERSION: "traceloop.entity.version", - TRACELOOP_ASSOCIATION_PROPERTIES: "traceloop.association.properties", - TRACELOOP_ENTITY_INPUT: "traceloop.entity.input", - TRACELOOP_ENTITY_OUTPUT: "traceloop.entity.output", - MCP_RESPONSE_VALUE: "mcp.response.value", - MCP_REQUEST_ID: "mcp.request.id" - }; - exports.Events = { - DB_QUERY_EMBEDDINGS: "db.query.embeddings", - DB_QUERY_RESULT: "db.query.result" - }; - exports.EventAttributes = { - DB_QUERY_EMBEDDINGS_VECTOR: "db.query.embeddings.vector", - DB_QUERY_RESULT_ID: "db.query.result.id", - DB_QUERY_RESULT_SCORE: "db.query.result.score", - DB_QUERY_RESULT_DISTANCE: "db.query.result.distance", - DB_QUERY_RESULT_METADATA: "db.query.result.metadata", - DB_QUERY_RESULT_VECTOR: "db.query.result.vector", - DB_QUERY_RESULT_DOCUMENT: "db.query.result.document", - VECTOR_DB_QUERY_TOP_K: "db.vector.query.top_k", - VECTOR_DB_QUERY_INCLUDE_VALUES: "db.vector.query.include_values", - VECTOR_DB_QUERY_INCLUDE_METADATA: "db.vector.query.include_metadata", - VECTOR_DB_QUERY_ID: "db.vector.query.id", - VECTOR_DB_QUERY_EMBEDDINGS_VECTOR: "db.vector.query.embeddings.vector", - VECTOR_DB_QUERY_METADATA_FILTER: "db.vector.query.metadata_filter", - VECTOR_DB_QUERY_RESULT_NAMESPACE: "db.vector.query.result.namespace", - VECTOR_DB_QUERY_RESULT_READ_UNITS_CONSUMED: "db.vector.query.result.read_units", - VECTOR_DB_QUERY_RESULT_MATCHES_LENGTH: "db.vector.query.result.matches_length", - VECTOR_DB_QUERY_RESULT_SCORE: "db.vector.query.result.{i}.score", - VECTOR_DB_QUERY_RESULT_ID: "db.vector.query.result.{i}.id", - VECTOR_DB_QUERY_RESULT_VALUES: "db.vector.query.result.{i}.values", - VECTOR_DB_QUERY_RESULT_SPARSE_INDICES: "db.vector.query.result.{i}.sparse.indices", - VECTOR_DB_QUERY_RESULT_SPARSE_VALUES: "db.vector.query.result.{i}.sparse.values", - VECTOR_DB_QUERY_RESULT_METADATA: "db.vector.query.result.{i}.metadata" - }; - var LLMRequestTypeValues; - (function(LLMRequestTypeValues2) { - LLMRequestTypeValues2["COMPLETION"] = "completion"; - LLMRequestTypeValues2["CHAT"] = "chat"; - LLMRequestTypeValues2["RERANK"] = "rerank"; - LLMRequestTypeValues2["UNKNOWN"] = "unknown"; - })(LLMRequestTypeValues || (exports.LLMRequestTypeValues = LLMRequestTypeValues = {})); - var TraceloopSpanKindValues; - (function(TraceloopSpanKindValues2) { - TraceloopSpanKindValues2["WORKFLOW"] = "workflow"; - TraceloopSpanKindValues2["TASK"] = "task"; - TraceloopSpanKindValues2["AGENT"] = "agent"; - TraceloopSpanKindValues2["TOOL"] = "tool"; - TraceloopSpanKindValues2["SESSION"] = "session"; - TraceloopSpanKindValues2["UNKNOWN"] = "unknown"; - })(TraceloopSpanKindValues || (exports.TraceloopSpanKindValues = TraceloopSpanKindValues = {})); -}); - -// ../../../../node_modules/.bun/@traceloop+ai-semantic-conventions@0.21.0/node_modules/@traceloop/ai-semantic-conventions/dist/src/index.js -var require_src2 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CONTEXT_KEY_ALLOW_TRACE_CONTENT = undefined; - var api_1 = require_src(); - __exportStar(require_SemanticAttributes(), exports); - exports.CONTEXT_KEY_ALLOW_TRACE_CONTENT = (0, api_1.createContextKey)("allow_trace_content"); -}); - -// ../../../../packages/runtime/dist/_tokens.js -class TokenSpanProcessor { - onStart(_span, _context) { - return; - } - onEnd(span) { - if (inAgentContext() && inHTTPContext()) { - const ctx = getHTTPContext(); - const tokenLine = ctx.res.headers.get(TOKENS_HEADER) ?? undefined; - const tokens = parseTokenHeader(tokenLine); - let mutated = false; - if (span.name.startsWith(AI_SDK_SPAN_PREFIX) && AI_SDK_MODEL_NAME in span.attributes) { - const model = span.attributes[AI_SDK_MODEL_NAME].toString(); - let totalTokens = tokens.get(model) ?? 0; - if (AI_SDK_USAGE_PROMPT_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[AI_SDK_USAGE_PROMPT_TOKENS]); - } - if (AI_SDK_USAGE_COMPLETION_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[AI_SDK_USAGE_COMPLETION_TOKENS]); - } - if (totalTokens > 0) { - tokens.set(model, totalTokens); - mutated = true; - } - } else if (import_ai_semantic_conventions.SpanAttributes.LLM_SYSTEM in span.attributes && import_ai_semantic_conventions.SpanAttributes.LLM_RESPONSE_MODEL in span.attributes) { - const model = span.attributes[import_ai_semantic_conventions.SpanAttributes.LLM_RESPONSE_MODEL].toString(); - let totalTokens = tokens.get(model) ?? 0; - if (import_ai_semantic_conventions.SpanAttributes.LLM_USAGE_PROMPT_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[import_ai_semantic_conventions.SpanAttributes.LLM_USAGE_PROMPT_TOKENS]); - } - if (import_ai_semantic_conventions.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[import_ai_semantic_conventions.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]); - } - if (totalTokens > 0) { - tokens.set(model, totalTokens); - mutated = true; - } - } - if (mutated) { - ctx.header(TOKENS_HEADER, serializeTokenHeader(tokens)); - } - } - } - forceFlush() { - return Promise.resolve(); - } - shutdown() { - return Promise.resolve(); - } -} -var import_ai_semantic_conventions, TOKENS_HEADER = "x-agentuity-tokens", DURATION_HEADER = "x-agentuity-duration", AI_SDK_SPAN_PREFIX = "ai.", AI_SDK_MODEL_NAME = "ai.model.id", AI_SDK_USAGE_PROMPT_TOKENS = "ai.usage.promptTokens", AI_SDK_USAGE_COMPLETION_TOKENS = "ai.usage.completionTokens", parseTokenHeader = (val) => { - const kv = new Map; - if (val) { - const tok = val.split(" "); - for (const entry of tok) { - const [name, count] = entry.split(":"); - if (name) { - kv.set(name, parseInt(count ?? "0") ?? 0); - } - } - } - return kv; -}, serializeTokenHeader = (kv) => { - const lines = []; - for (const [k, v] of kv) { - lines.push(`${k}:${v}`); - } - return lines.join(" "); -}, getTokenValue = (val) => { - if (val) { - const v = val.valueOf(); - switch (typeof v) { - case "number": - return v; - case "string": - return parseInt(v, 10); - default: - } - } - return 0; -}; -var init__tokens = __esm(() => { - init__context(); - import_ai_semantic_conventions = __toESM(require_src2(), 1); -}); - -// ../../../../packages/runtime/dist/_server.js -function getRouter() { - return globalRouterInstance; -} -function setGlobalRouter(router) { - globalRouterInstance = router; -} -function getLogger() { - return globalLogger; -} -function setGlobalLogger(logger) { - globalLogger = logger; -} -function getTracer() { - return globalTracer; -} -function setGlobalTracer(tracer) { - globalTracer = tracer; -} -function getSpanProcessors() { - return spanProcessors; -} -function privateContext(c) { - return c; -} -var globalRouterInstance = null, globalLogger = null, globalTracer = null, spanProcessors; -var init__server = __esm(() => { - init__tokens(); - spanProcessors = [new TokenSpanProcessor]; -}); - -// ../../../../packages/runtime/dist/app.js -var exports_app = {}; -__export(exports_app, { - setAppConfig: () => setAppConfig, - runShutdown: () => runShutdown, - getAppState: () => getAppState, - getAppConfig: () => getAppConfig, - getApp: () => getApp, - fireEvent: () => fireEvent, - createApp: () => createApp -}); -function getApp() { - return null; -} -async function createApp(config2) { - const state = config2?.setup ? await config2.setup() : {}; - globalThis.__AGENTUITY_APP_STATE__ = state; - globalThis.__AGENTUITY_APP_CONFIG__ = config2; - const shutdown = config2?.shutdown; - if (shutdown) { - globalThis.__AGENTUITY_SHUTDOWN__ = shutdown; - } - const logger = { - trace: (...args) => { - const gl = getLogger(); - if (gl) - gl.trace(...args); - }, - debug: (...args) => { - const gl = getLogger(); - if (gl) - gl.debug(...args); - }, - info: (...args) => { - const gl = getLogger(); - if (gl) - gl.info(...args); - else - console.log("[INFO]", ...args); - }, - warn: (...args) => { - const gl = getLogger(); - if (gl) - gl.warn(...args); - else - console.warn("[WARN]", ...args); - }, - error: (...args) => { - const gl = getLogger(); - if (gl) - gl.error(...args); - else - console.error("[ERROR]", ...args); - }, - fatal: (...args) => { - const gl = getLogger(); - if (gl) - return gl.fatal(...args); - console.error("[FATAL]", ...args); - throw new Error("Fatal error"); - }, - child: (bindings) => { - const gl = getLogger(); - return gl ? gl.child(bindings) : logger; - } - }; - const port = process.env.PORT || "3500"; - const server = { - url: `http://127.0.0.1:${port}` - }; - const globalRouter = getRouter(); - if (!globalRouter) { - throw new Error("Router is not available. Ensure router is initialized before calling createApp(). This typically happens during bundling or when the entry file has not properly set up the router."); - } - const router = globalRouter; - return { - state, - shutdown, - config: config2, - router, - server, - logger, - addEventListener: addEventListener2, - removeEventListener - }; -} -function getAppState() { - return globalThis.__AGENTUITY_APP_STATE__ || {}; -} -function getAppConfig() { - return globalThis.__AGENTUITY_APP_CONFIG__; -} -function setAppConfig(config2) { - if (config2 === undefined) { - delete globalThis.__AGENTUITY_APP_CONFIG__; - } else { - globalThis.__AGENTUITY_APP_CONFIG__ = config2; - } -} -async function runShutdown() { - const shutdown = globalThis.__AGENTUITY_SHUTDOWN__; - if (shutdown) { - const state = getAppState(); - await shutdown(state); - } -} -var init_app = __esm(() => { - init__events(); - init__events(); - init__server(); -}); - -// ../../../../packages/runtime/dist/session.js -import { timingSafeEqual } from "crypto"; -function parseThreadData(raw) { - if (!raw) { - return {}; - } - try { - const parsed = JSON.parse(raw); - if (parsed && typeof parsed === "object" && (("state" in parsed) || ("metadata" in parsed))) { - return { - flatStateJson: parsed.state ? JSON.stringify(parsed.state) : undefined, - metadata: parsed.metadata && typeof parsed.metadata === "object" ? parsed.metadata : undefined - }; - } - return { flatStateJson: raw }; - } catch { - return { flatStateJson: raw }; - } -} -async function fireThreadEvent(thread2, eventName) { - const listeners = threadEventListeners.get(thread2); - if (!listeners) - return; - const callbacks = listeners.get(eventName); - if (!callbacks || callbacks.size === 0) - return; - for (const callback of callbacks) { - try { - await callback(eventName, thread2); - } catch (error48) { - internal.error(`Error in thread event listener for '${eventName}':`, error48); - } - } -} -async function fireSessionEvent(session2, eventName) { - const listeners = sessionEventListeners.get(session2); - if (!listeners) - return; - const callbacks = listeners.get(eventName); - if (!callbacks || callbacks.size === 0) - return; - for (const callback of callbacks) { - try { - await callback(eventName, session2); - } catch (error48) { - internal.error(`Error in session event listener for '${eventName}':`, error48); - } - } -} -function generateId(prefix) { - const arr = new Uint8Array(16); - crypto.getRandomValues(arr); - return `${prefix}${prefix ? "_" : ""}${arr.toHex()}`; -} -function isValidThreadId(threadId) { - if (!threadId.startsWith("thrd_")) { - return false; - } - if (threadId.length < 32 || threadId.length > 64) { - return false; - } - const validThreadIdCharacters = /^[a-zA-Z0-9]+$/; - if (!validThreadIdCharacters.test(threadId.substring(5))) { - return false; - } - return true; -} -function validateThreadIdOrThrow(threadId) { - if (!threadId) { - throw new Error(`the ThreadIDProvider returned an empty thread id for getThreadId`); - } - if (!threadId.startsWith("thrd_")) { - throw new Error(`the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must start with the prefix 'thrd_'.`); - } - if (threadId.length > 64) { - throw new Error(`the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must be less than 64 characters long.`); - } - if (threadId.length < 32) { - throw new Error(`the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must be at least 32 characters long.`); - } - const validThreadIdCharacters = /^[a-zA-Z0-9]+$/; - if (!validThreadIdCharacters.test(threadId.substring(5))) { - throw new Error(`the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must contain only characters that match the regular expression [a-zA-Z0-9].`); - } -} -function isSecureConnection(ctx) { - const forwardedProto = ctx.req.header("x-forwarded-proto"); - if (forwardedProto) { - return forwardedProto === "https"; - } - try { - if (ctx.req.url) { - const url2 = new URL(ctx.req.url); - return url2.protocol === "https:"; - } - } catch {} - return false; -} -async function signThreadId(threadId, secret) { - const hasher = new Bun.CryptoHasher("sha256", secret); - hasher.update(threadId); - const signatureBase64 = hasher.digest("base64"); - return `${threadId};${signatureBase64}`; -} -async function verifySignedThreadId(signedValue, secret) { - const parts = signedValue.split(";"); - if (parts.length !== 2) { - return; - } - const [threadId, providedSignature] = parts; - if (!threadId || !providedSignature) { - return; - } - if (!isValidThreadId(threadId)) { - return; - } - const expectedSigned = await signThreadId(threadId, secret); - const expectedSignature = expectedSigned.split(";")[1]; - if (!expectedSignature) { - return; - } - if (providedSignature.length !== expectedSignature.length) { - return; - } - try { - const providedBuffer = Buffer.from(providedSignature, "base64"); - const expectedBuffer = Buffer.from(expectedSignature, "base64"); - if (timingSafeEqual(providedBuffer, expectedBuffer)) { - return threadId; - } - } catch { - return; - } - return; -} - -class DefaultThreadIDProvider { - getSecret() { - return process.env.AGENTUITY_SDK_KEY || "agentuity"; - } - async getThreadId(_appState, ctx) { - let threadId; - const secret = this.getSecret(); - const headerValue = ctx.req.header("x-thread-id"); - if (headerValue) { - const verifiedThreadId = await verifySignedThreadId(headerValue, secret); - if (verifiedThreadId) { - threadId = verifiedThreadId; - } - } - if (!threadId) { - const cookieValue = await getSignedCookie(ctx, secret, "atid"); - if (cookieValue && typeof cookieValue === "string" && isValidThreadId(cookieValue)) { - threadId = cookieValue; - } - } - threadId = threadId || generateId("thrd"); - await setSignedCookie(ctx, "atid", threadId, secret, { - httpOnly: true, - secure: isSecureConnection(ctx), - sameSite: "Lax", - path: "/", - maxAge: 604800 - }); - const signedHeader = await signThreadId(threadId, secret); - ctx.header("x-thread-id", signedHeader); - return threadId; - } -} - -class LazyThreadState { - #status = "idle"; - #state = new Map; - #pendingOperations = []; - #initialStateJson; - #restoreFn; - #loadingPromise = null; - constructor(restoreFn) { - this.#restoreFn = restoreFn; - } - get loaded() { - return this.#status === "loaded"; - } - get dirty() { - if (this.#status === "pending-writes") { - return this.#pendingOperations.length > 0; - } - if (this.#status === "loaded") { - const currentJson = JSON.stringify(Object.fromEntries(this.#state)); - return currentJson !== this.#initialStateJson; - } - return false; - } - async ensureLoaded() { - if (this.#status === "loaded") { - return; - } - if (this.#loadingPromise) { - await this.#loadingPromise; - return; - } - this.#loadingPromise = (async () => { - try { - await this.doLoad(); - } finally { - this.#loadingPromise = null; - } - })(); - await this.#loadingPromise; - } - async doLoad() { - const { state } = await this.#restoreFn(); - this.#state = new Map(state); - this.#initialStateJson = JSON.stringify(Object.fromEntries(this.#state)); - for (const op of this.#pendingOperations) { - switch (op.op) { - case "clear": - this.#state.clear(); - break; - case "set": - if (op.key !== undefined) { - this.#state.set(op.key, op.value); - } - break; - case "delete": - if (op.key !== undefined) { - this.#state.delete(op.key); - } - break; - case "push": - if (op.key !== undefined) { - const existing = this.#state.get(op.key); - if (Array.isArray(existing)) { - existing.push(op.value); - if (op.maxRecords !== undefined && existing.length > op.maxRecords) { - existing.splice(0, existing.length - op.maxRecords); - } - } else if (existing === undefined) { - this.#state.set(op.key, [op.value]); - } - } - break; - } - } - this.#pendingOperations = []; - this.#status = "loaded"; - } - async get(key) { - await this.ensureLoaded(); - return this.#state.get(key); - } - async set(key, value) { - if (this.#status === "loaded") { - this.#state.set(key, value); - } else { - this.#pendingOperations.push({ op: "set", key, value }); - if (this.#status === "idle") { - this.#status = "pending-writes"; - } - } - } - async has(key) { - await this.ensureLoaded(); - return this.#state.has(key); - } - async delete(key) { - if (this.#status === "loaded") { - this.#state.delete(key); - } else { - this.#pendingOperations.push({ op: "delete", key }); - if (this.#status === "idle") { - this.#status = "pending-writes"; - } - } - } - async clear() { - if (this.#status === "loaded") { - this.#state.clear(); - } else { - this.#pendingOperations = [{ op: "clear" }]; - if (this.#status === "idle") { - this.#status = "pending-writes"; - } - } - } - async entries() { - await this.ensureLoaded(); - return Array.from(this.#state.entries()); - } - async keys() { - await this.ensureLoaded(); - return Array.from(this.#state.keys()); - } - async values() { - await this.ensureLoaded(); - return Array.from(this.#state.values()); - } - async size() { - await this.ensureLoaded(); - return this.#state.size; - } - async push(key, value, maxRecords) { - if (this.#status === "loaded") { - const existing = this.#state.get(key); - if (Array.isArray(existing)) { - existing.push(value); - if (maxRecords !== undefined && existing.length > maxRecords) { - existing.splice(0, existing.length - maxRecords); - } - } else if (existing === undefined) { - this.#state.set(key, [value]); - } else { - throw new Error(`Cannot push to non-array value at key "${key}"`); - } - } else { - const op = { op: "push", key, value }; - if (maxRecords !== undefined) { - op.maxRecords = maxRecords; - } - this.#pendingOperations.push(op); - if (this.#status === "idle") { - this.#status = "pending-writes"; - } - } - } - getStatus() { - return this.#status; - } - getPendingOperations() { - return [...this.#pendingOperations]; - } - async getSerializedState() { - await this.ensureLoaded(); - return Object.fromEntries(this.#state); - } -} - -class DefaultThread { - id; - state; - #metadata = null; - #metadataDirty = false; - #metadataLoadPromise = null; - provider; - #restoreFn; - #restoredMetadata; - constructor(provider, id, restoreFn, initialMetadata) { - this.provider = provider; - this.id = id; - this.#restoreFn = restoreFn; - this.#restoredMetadata = initialMetadata; - this.state = new LazyThreadState(restoreFn); - } - async ensureMetadataLoaded() { - if (this.#metadata !== null) { - return; - } - if (this.#restoredMetadata !== undefined) { - this.#metadata = this.#restoredMetadata; - return; - } - if (this.#metadataLoadPromise) { - await this.#metadataLoadPromise; - return; - } - this.#metadataLoadPromise = (async () => { - try { - await this.doLoadMetadata(); - } finally { - this.#metadataLoadPromise = null; - } - })(); - await this.#metadataLoadPromise; - } - async doLoadMetadata() { - const { metadata } = await this.#restoreFn(); - this.#metadata = metadata; - } - async getMetadata() { - await this.ensureMetadataLoaded(); - return { ...this.#metadata }; - } - async setMetadata(metadata) { - this.#metadata = metadata; - this.#metadataDirty = true; - } - addEventListener(eventName, callback) { - let listeners = threadEventListeners.get(this); - if (!listeners) { - listeners = new Map; - threadEventListeners.set(this, listeners); - } - let callbacks = listeners.get(eventName); - if (!callbacks) { - callbacks = new Set; - listeners.set(eventName, callbacks); - } - callbacks.add(callback); - } - removeEventListener(eventName, callback) { - const listeners = threadEventListeners.get(this); - if (!listeners) - return; - const callbacks = listeners.get(eventName); - if (!callbacks) - return; - callbacks.delete(callback); - } - async fireEvent(eventName) { - await fireThreadEvent(this, eventName); - } - async destroy() { - await this.provider.destroy(this); - } - async empty() { - const stateSize = await this.state.size(); - const meta3 = this.#metadata ?? this.#restoredMetadata ?? {}; - return stateSize === 0 && Object.keys(meta3).length === 0; - } - needsSave() { - return this.state.dirty || this.#metadataDirty; - } - getSaveMode() { - const stateStatus = this.state.getStatus(); - if (stateStatus === "idle" && !this.#metadataDirty) { - return "none"; - } - if (stateStatus === "pending-writes") { - return "merge"; - } - if (stateStatus === "loaded" && (this.state.dirty || this.#metadataDirty)) { - return "full"; - } - if (this.#metadataDirty) { - return "merge"; - } - return "none"; - } - getPendingOperations() { - return this.state.getPendingOperations(); - } - getMetadataForSave() { - if (this.#metadataDirty && this.#metadata) { - return this.#metadata; - } - return; - } - async getSerializedState() { - const state = await this.state.getSerializedState(); - const meta3 = this.#metadata ?? this.#restoredMetadata ?? {}; - const hasState = Object.keys(state).length > 0; - const hasMetadata = Object.keys(meta3).length > 0; - if (!hasState && !hasMetadata) { - return ""; - } - const data = {}; - if (hasState) { - data.state = state; - } - if (hasMetadata) { - data.metadata = meta3; - } - return JSON.stringify(data); - } -} - -class DefaultSession { - id; - thread; - state; - metadata; - constructor(thread2, id, metadata) { - this.id = id; - this.thread = thread2; - this.state = new Map; - this.metadata = metadata || {}; - } - addEventListener(eventName, callback) { - let listeners = sessionEventListeners.get(this); - if (!listeners) { - listeners = new Map; - sessionEventListeners.set(this, listeners); - } - let callbacks = listeners.get(eventName); - if (!callbacks) { - callbacks = new Set; - listeners.set(eventName, callbacks); - } - callbacks.add(callback); - } - removeEventListener(eventName, callback) { - const listeners = sessionEventListeners.get(this); - if (!listeners) - return; - const callbacks = listeners.get(eventName); - if (!callbacks) - return; - callbacks.delete(callback); - } - async fireEvent(eventName) { - await fireSessionEvent(this, eventName); - } - serializeUserData() { - if (this.state.size === 0) { - return; - } - try { - const obj = Object.fromEntries(this.state); - const json3 = JSON.stringify(obj); - const sizeInBytes = new TextEncoder().encode(json3).length; - if (sizeInBytes > 1048576) { - console.error(`Session ${this.id} user_data exceeds 1MB limit (${sizeInBytes} bytes), data will not be persisted`); - return; - } - return json3; - } catch (err) { - console.error(`Failed to serialize session ${this.id} user_data:`, err); - return; - } - } -} - -class ThreadWebSocketClient { - ws = null; - authenticated = false; - pendingRequests = new Map; - reconnectAttempts = 0; - maxReconnectAttempts; - apiKey; - wsUrl; - wsConnecting = null; - reconnectTimer = null; - isDisposed = false; - initialConnectResolve = null; - initialConnectReject = null; - connectionTimeoutMs; - requestTimeoutMs; - reconnectBaseDelayMs; - reconnectMaxDelayMs; - constructor(apiKey, wsUrl, options = {}) { - this.apiKey = apiKey; - this.wsUrl = wsUrl; - this.connectionTimeoutMs = options.connectionTimeoutMs ?? 1e4; - this.requestTimeoutMs = options.requestTimeoutMs ?? 1e4; - this.reconnectBaseDelayMs = options.reconnectBaseDelayMs ?? 1000; - this.reconnectMaxDelayMs = options.reconnectMaxDelayMs ?? 30000; - this.maxReconnectAttempts = options.maxReconnectAttempts ?? 5; - } - async connect() { - return new Promise((resolve, reject) => { - if (this.reconnectAttempts === 0) { - this.initialConnectResolve = resolve; - this.initialConnectReject = reject; - } - const connectionTimeout = setTimeout(() => { - this.cleanup(); - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(new Error(`WebSocket connection timeout (${this.connectionTimeoutMs}ms)`)); - }, this.connectionTimeoutMs); - try { - this.ws = new WebSocket(this.wsUrl); - this.ws.addEventListener("open", () => { - this.ws?.send(JSON.stringify({ authorization: this.apiKey })); - }); - this.ws.addEventListener("message", (event) => { - try { - const message = JSON.parse(event.data); - if ("success" in message && !this.authenticated) { - clearTimeout(connectionTimeout); - if (message.success) { - this.authenticated = true; - this.reconnectAttempts = 0; - const resolveFn = this.initialConnectResolve || resolve; - this.initialConnectResolve = null; - this.initialConnectReject = null; - resolveFn(); - } else { - const err = new Error(`WebSocket authentication failed: ${message.error || "Unknown error"}`); - this.cleanup(); - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(err); - } - return; - } - if ("id" in message && this.pendingRequests.has(message.id)) { - const pending = this.pendingRequests.get(message.id); - this.pendingRequests.delete(message.id); - if (message.success) { - pending.resolve(message.data); - } else { - pending.reject(new Error(message.error || "Request failed")); - } - } - } catch {} - }); - this.ws.addEventListener("error", (_event) => { - clearTimeout(connectionTimeout); - if (!this.authenticated) { - if (this.reconnectAttempts >= this.maxReconnectAttempts || this.isDisposed) { - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(new Error(`WebSocket error`)); - } - } - }); - this.ws.addEventListener("close", () => { - clearTimeout(connectionTimeout); - const wasAuthenticated = this.authenticated; - this.authenticated = false; - for (const [id, pending] of this.pendingRequests) { - pending.reject(new Error("WebSocket connection closed")); - this.pendingRequests.delete(id); - } - if (this.isDisposed) { - if (!wasAuthenticated && this.initialConnectReject) { - this.initialConnectReject(new Error("WebSocket closed before authentication")); - this.initialConnectResolve = null; - this.initialConnectReject = null; - } - return; - } - if (this.reconnectAttempts < this.maxReconnectAttempts) { - this.reconnectAttempts++; - const delay = Math.min(this.reconnectBaseDelayMs * Math.pow(2, this.reconnectAttempts), this.reconnectMaxDelayMs); - internal.info(`WebSocket disconnected, attempting reconnection ${this.reconnectAttempts}/${this.maxReconnectAttempts} in ${delay}ms`); - this.reconnectTimer = setTimeout(() => { - this.reconnectTimer = null; - this.wsConnecting = this.connect().catch(() => { - this.wsConnecting = null; - }); - }, delay); - } else { - internal.error(`WebSocket disconnected after ${this.reconnectAttempts} attempts, giving up`); - if (!wasAuthenticated && this.initialConnectReject) { - this.initialConnectReject(new Error(`WebSocket closed before authentication after ${this.reconnectAttempts} attempts`)); - this.initialConnectResolve = null; - this.initialConnectReject = null; - } - } - }); - } catch (err) { - clearTimeout(connectionTimeout); - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(err); - } - }); - } - async restore(threadId) { - if (this.wsConnecting) { - await this.wsConnecting; - } - if (!this.authenticated || !this.ws) { - throw new Error("WebSocket not connected or authenticated"); - } - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { resolve, reject }); - const message = { - id: requestId, - action: "restore", - data: { thread_id: threadId } - }; - this.ws.send(JSON.stringify(message)); - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error("Request timeout")); - } - }, this.requestTimeoutMs); - }); - } - async save(threadId, userData, threadMetadata) { - if (this.wsConnecting) { - await this.wsConnecting; - } - if (!this.authenticated || !this.ws) { - throw new Error("WebSocket not connected or authenticated"); - } - const sizeInBytes = new TextEncoder().encode(userData).length; - if (sizeInBytes > 1048576) { - console.error(`Thread ${threadId} user_data exceeds 1MB limit (${sizeInBytes} bytes), data will not be persisted`); - return; - } - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { - resolve: () => resolve(), - reject - }); - const data = { - thread_id: threadId, - user_data: userData - }; - if (threadMetadata && Object.keys(threadMetadata).length > 0) { - data.metadata = threadMetadata; - } - const message = { - id: requestId, - action: "save", - data - }; - this.ws.send(JSON.stringify(message)); - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error("Request timeout")); - } - }, this.requestTimeoutMs); - }); - } - async delete(threadId) { - if (this.wsConnecting) { - await this.wsConnecting; - } - if (!this.authenticated || !this.ws) { - throw new Error("WebSocket not connected or authenticated"); - } - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { - resolve: () => resolve(), - reject - }); - const message = { - id: requestId, - action: "delete", - data: { thread_id: threadId } - }; - this.ws.send(JSON.stringify(message)); - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error("Request timeout")); - } - }, this.requestTimeoutMs); - }); - } - async merge(threadId, operations, metadata) { - if (this.wsConnecting) { - await this.wsConnecting; - } - if (!this.authenticated || !this.ws) { - throw new Error("WebSocket not connected or authenticated"); - } - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { - resolve: () => resolve(), - reject - }); - const data = { - thread_id: threadId, - operations - }; - if (metadata && Object.keys(metadata).length > 0) { - data.metadata = metadata; - } - const message = { - id: requestId, - action: "merge", - data - }; - this.ws.send(JSON.stringify(message)); - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error("Request timeout")); - } - }, this.requestTimeoutMs); - }); - } - cleanup() { - this.isDisposed = true; - if (this.reconnectTimer) { - clearTimeout(this.reconnectTimer); - this.reconnectTimer = null; - } - if (this.ws) { - this.ws.close(); - this.ws = null; - } - this.authenticated = false; - this.pendingRequests.clear(); - this.reconnectAttempts = 0; - this.wsConnecting = null; - this.initialConnectResolve = null; - this.initialConnectReject = null; - } -} - -class DefaultThreadProvider { - appState = null; - wsClient = null; - wsConnecting = null; - threadIDProvider = null; - async initialize(appState) { - this.appState = appState; - this.threadIDProvider = new DefaultThreadIDProvider; - const apiKey = process.env.AGENTUITY_SDK_KEY; - if (apiKey) { - const serviceUrls = getServiceUrls(process.env.AGENTUITY_REGION ?? "usc"); - const catalystUrl = serviceUrls.catalyst; - const wsUrl = new URL("/thread/ws", catalystUrl.replace(/^http/, "ws")); - internal.debug("connecting to %s", wsUrl); - this.wsClient = new ThreadWebSocketClient(apiKey, wsUrl.toString()); - this.wsConnecting = this.wsClient.connect().then(() => { - this.wsConnecting = null; - }).catch((err) => { - internal.error("Failed to connect to thread WebSocket:", err); - this.wsClient = null; - this.wsConnecting = null; - }); - } - } - setThreadIDProvider(provider) { - this.threadIDProvider = provider; - } - async restore(ctx) { - const threadId = await this.threadIDProvider.getThreadId(this.appState, ctx); - validateThreadIdOrThrow(threadId); - internal.info("[thread] creating lazy thread %s (no eager restore)", threadId); - const restoreFn = async () => { - internal.info("[thread] lazy loading state for thread %s", threadId); - if (this.wsConnecting) { - internal.info("[thread] waiting for WebSocket connection"); - await this.wsConnecting; - } - if (!this.wsClient) { - internal.info("[thread] no WebSocket client available, returning empty state"); - return { state: new Map, metadata: {} }; - } - try { - const restoredData = await this.wsClient.restore(threadId); - if (restoredData) { - internal.info("[thread] restored state: %d bytes", restoredData.length); - const { flatStateJson, metadata } = parseThreadData(restoredData); - const state = new Map; - if (flatStateJson) { - try { - const data = JSON.parse(flatStateJson); - for (const [key, value] of Object.entries(data)) { - state.set(key, value); - } - } catch { - internal.info("[thread] failed to parse state JSON"); - } - } - return { state, metadata: metadata || {} }; - } - internal.info("[thread] no existing state found"); - return { state: new Map, metadata: {} }; - } catch (err) { - internal.info("[thread] WebSocket restore failed: %s", err); - return { state: new Map, metadata: {} }; - } - }; - const thread2 = new DefaultThread(this, threadId, restoreFn); - await fireEvent("thread.created", thread2); - return thread2; - } - async save(thread2) { - if (thread2 instanceof DefaultThread) { - const saveMode = thread2.getSaveMode(); - internal.info("[thread] DefaultThreadProvider.save() - thread %s, saveMode: %s, hasWsClient: %s", thread2.id, saveMode, !!this.wsClient); - if (saveMode === "none") { - internal.info("[thread] skipping save - no changes"); - return; - } - if (this.wsConnecting) { - internal.info("[thread] waiting for WebSocket connection"); - await this.wsConnecting; - } - if (!this.wsClient) { - internal.info("[thread] no WebSocket client available, skipping save"); - return; - } - try { - if (saveMode === "merge") { - const operations = thread2.getPendingOperations(); - const metadata = thread2.getMetadataForSave(); - internal.info("[thread] sending merge command with %d operations", operations.length); - await this.wsClient.merge(thread2.id, operations, metadata); - internal.info("[thread] WebSocket merge completed"); - } else if (saveMode === "full") { - const serialized = await thread2.getSerializedState(); - internal.info("[thread] saving to WebSocket, serialized length: %d", serialized.length); - const metadata = thread2.getMetadataForSave(); - await this.wsClient.save(thread2.id, serialized, metadata); - internal.info("[thread] WebSocket save completed"); - } - } catch (err) { - internal.info("[thread] WebSocket save/merge failed: %s", err); - } - } - } - async destroy(thread2) { - if (thread2 instanceof DefaultThread) { - try { - if (this.wsConnecting) { - await this.wsConnecting; - } - if (this.wsClient) { - try { - await this.wsClient.delete(thread2.id); - } catch { - internal.debug(`Thread ${thread2.id} not found in remote storage (already deleted or never persisted)`); - } - } - await thread2.fireEvent("destroyed"); - await fireEvent("thread.destroyed", thread2); - } finally { - threadEventListeners.delete(thread2); - } - } - } -} - -class DefaultSessionProvider { - sessions = new Map; - async initialize(_appState) {} - async restore(thread2, sessionId) { - internal.info("[session] restoring session %s for thread %s", sessionId, thread2.id); - let session2 = this.sessions.get(sessionId); - if (!session2) { - session2 = new DefaultSession(thread2, sessionId); - this.sessions.set(sessionId, session2); - internal.info("[session] created new session, firing session.started"); - await fireEvent("session.started", session2); - } else { - internal.info("[session] found existing session"); - } - return session2; - } - async save(session2) { - if (session2 instanceof DefaultSession) { - internal.info("[session] DefaultSessionProvider.save() - firing completed event for session %s", session2.id); - try { - await session2.fireEvent("completed"); - internal.info("[session] session.fireEvent completed, firing app event"); - await fireEvent("session.completed", session2); - internal.info("[session] session.completed app event fired"); - } finally { - this.sessions.delete(session2.id); - sessionEventListeners.delete(session2); - } - } - } -} -var threadEventListeners, sessionEventListeners; -var init_session4 = __esm(() => { - init_cookie2(); - init_app(); - init_dist3(); - init_internal(); - threadEventListeners = new WeakMap; - sessionEventListeners = new WeakMap; -}); - -// ../../../../packages/runtime/dist/services/local/_db.js -import { Database } from "bun:sqlite"; -import { mkdirSync, existsSync as existsSync2 } from "fs"; -import { homedir } from "os"; -import { join as join3 } from "path"; -function getLocalDB() { - if (dbInstance) { - return dbInstance; - } - const configDir = join3(homedir(), ".config", "agentuity"); - if (!existsSync2(configDir)) { - mkdirSync(configDir, { recursive: true }); - } - const dbPath = join3(configDir, "local.db"); - dbInstance = new Database(dbPath); - initializeTables(dbInstance); - cleanupOrphanedProjects(dbInstance); - return dbInstance; -} -function initializeTables(db2) { - db2.run(` - CREATE TABLE IF NOT EXISTS kv_storage ( - project_path TEXT NOT NULL, - name TEXT NOT NULL, - key TEXT NOT NULL, - value BLOB NOT NULL, - content_type TEXT NOT NULL DEFAULT 'application/octet-stream', - expires_at INTEGER, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL, - PRIMARY KEY (project_path, name, key) - ) - `); - db2.run(` - CREATE INDEX IF NOT EXISTS idx_kv_expires - ON kv_storage(expires_at) - WHERE expires_at IS NOT NULL - `); - db2.run(` - CREATE TABLE IF NOT EXISTS stream_storage ( - project_path TEXT NOT NULL, - id TEXT PRIMARY KEY, - name TEXT NOT NULL, - metadata TEXT, - content_type TEXT NOT NULL DEFAULT 'application/octet-stream', - data BLOB, - size_bytes INTEGER NOT NULL DEFAULT 0, - created_at INTEGER NOT NULL - ) - `); - db2.run(` - CREATE INDEX IF NOT EXISTS idx_stream_name - ON stream_storage(project_path, name) - `); - db2.run(` - CREATE INDEX IF NOT EXISTS idx_stream_metadata - ON stream_storage(metadata) - `); - db2.run(` - CREATE TABLE IF NOT EXISTS vector_storage ( - project_path TEXT NOT NULL, - name TEXT NOT NULL, - id TEXT PRIMARY KEY, - key TEXT NOT NULL, - embedding TEXT NOT NULL, - document TEXT, - metadata TEXT, - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL, - UNIQUE (project_path, name, key) - ) - `); - db2.run(` - CREATE INDEX IF NOT EXISTS idx_vector_lookup - ON vector_storage(project_path, name, key) - `); - db2.run(` - CREATE INDEX IF NOT EXISTS idx_vector_name - ON vector_storage(project_path, name) - `); -} -function cleanupOrphanedProjects(db2) { - const currentProjectPath = process.cwd(); - const kvPaths = db2.query("SELECT DISTINCT project_path FROM kv_storage").all(); - const streamPaths = db2.query("SELECT DISTINCT project_path FROM stream_storage").all(); - const vectorPaths = db2.query("SELECT DISTINCT project_path FROM vector_storage").all(); - const allPaths = new Set; - [...kvPaths, ...streamPaths, ...vectorPaths].forEach((row) => { - allPaths.add(row.project_path); - }); - const pathsToDelete = []; - for (const path of allPaths) { - if (path !== currentProjectPath && !existsSync2(path)) { - pathsToDelete.push(path); - } - } - if (pathsToDelete.length > 0) { - const placeholders = pathsToDelete.map(() => "?").join(", "); - const deleteKv = db2.prepare(`DELETE FROM kv_storage WHERE project_path IN (${placeholders})`); - const deleteStream = db2.prepare(`DELETE FROM stream_storage WHERE project_path IN (${placeholders})`); - const deleteVector = db2.prepare(`DELETE FROM vector_storage WHERE project_path IN (${placeholders})`); - deleteKv.run(...pathsToDelete); - deleteStream.run(...pathsToDelete); - deleteVector.run(...pathsToDelete); - console.log(`[LocalDB] Cleaned up data for ${pathsToDelete.length} orphaned project(s)`); - } -} -var dbInstance = null; -var init__db = () => {}; - -// ../../../../packages/runtime/dist/services/thread/local.js -class LocalThreadProvider { - appState = null; - threadIDProvider = new DefaultThreadIDProvider; - db = null; - async initialize(appState) { - this.appState = appState; - this.db = getLocalDB(); - this.db.run(` - CREATE TABLE IF NOT EXISTS threads ( - id TEXT PRIMARY KEY, - state TEXT NOT NULL, - updated_at INTEGER NOT NULL - ) - `); - } - setThreadIDProvider(provider) { - this.threadIDProvider = provider; - } - async restore(ctx) { - if (this.appState === null || this.db === null) { - throw new Error("LocalThreadProvider.restore called before initialize(): appState/db not set; call initialize(appState) first"); - } - const threadId = await this.threadIDProvider.getThreadId(this.appState, ctx); - validateThreadIdOrThrow(threadId); - const restoreFn = async () => { - if (!this.db) { - return { state: new Map, metadata: {} }; - } - const row = this.db.query("SELECT state FROM threads WHERE id = ?").get(threadId); - const { flatStateJson, metadata } = parseThreadData(row?.state); - const state = new Map; - if (flatStateJson) { - try { - const data = JSON.parse(flatStateJson); - for (const [key, value] of Object.entries(data)) { - state.set(key, value); - } - } catch {} - } - return { state, metadata: metadata || {} }; - }; - return new DefaultThread(this, threadId, restoreFn); - } - async save(thread2) { - if (!this.db || !(thread2 instanceof DefaultThread)) { - return; - } - const saveMode = thread2.getSaveMode(); - if (saveMode === "none") { - return; - } - const now = Date.now(); - if (saveMode === "merge") { - const operations = thread2.getPendingOperations(); - const metadata = thread2.getMetadataForSave(); - const row = this.db.query("SELECT state FROM threads WHERE id = ?").get(thread2.id); - const { flatStateJson, metadata: existingMetadata } = parseThreadData(row?.state); - const state = {}; - if (flatStateJson) { - try { - Object.assign(state, JSON.parse(flatStateJson)); - } catch {} - } - for (const op of operations) { - switch (op.op) { - case "clear": - for (const key of Object.keys(state)) { - delete state[key]; - } - break; - case "set": - if (op.key !== undefined) { - state[op.key] = op.value; - } - break; - case "delete": - if (op.key !== undefined) { - delete state[op.key]; - } - break; - case "push": - if (op.key !== undefined) { - const existing = state[op.key]; - let arr; - if (Array.isArray(existing)) { - existing.push(op.value); - arr = existing; - } else if (existing === undefined) { - arr = [op.value]; - state[op.key] = arr; - } else { - continue; - } - if (op.maxRecords !== undefined && arr.length > op.maxRecords) { - state[op.key] = arr.slice(arr.length - op.maxRecords); - } - } - break; - } - } - const finalMetadata = metadata || existingMetadata || {}; - const hasState = Object.keys(state).length > 0; - const hasMetadata = Object.keys(finalMetadata).length > 0; - let stateJson = ""; - if (hasState || hasMetadata) { - const data = {}; - if (hasState) - data.state = state; - if (hasMetadata) - data.metadata = finalMetadata; - stateJson = JSON.stringify(data); - } - this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?) - ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread2.id, stateJson, now, stateJson, now]); - } else { - const stateJson = await thread2.getSerializedState(); - this.db.run(`INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?) - ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, [thread2.id, stateJson, now, stateJson, now]); - } - } - async destroy(thread2) { - if (!this.db) { - return; - } - this.db.run("DELETE FROM threads WHERE id = ?", [thread2.id]); - } -} -var init_local2 = __esm(() => { - init_session4(); - init__db(); -}); - -// ../../../../packages/runtime/dist/otel/http.js -function injectTraceContextToHeaders(headers = {}) { - let _headers; - if (headers instanceof Headers) { - _headers = {}; - headers.forEach((v, k) => { - _headers[k] = v; - }); - } else { - _headers = { ...headers }; - } - const carrier = { ..._headers }; - const currentContext = import_api28.context.active(); - import_api28.propagation.inject(currentContext, carrier); - return carrier; -} -function extractTraceContextFromRequest(req) { - const carrier = {}; - req.headers.forEach((value, key) => { - carrier[key.toLowerCase()] = value; - }); - const activeContext = import_api28.context.active(); - return import_api28.propagation.extract(activeContext, carrier); -} -var import_api28; -var init_http4 = __esm(() => { - import_api28 = __toESM(require_src(), 1); -}); - -// ../../../../packages/runtime/dist/services/local/_util.js -import { resolve } from "path"; -function normalizeProjectPath(cwd = process.cwd()) { - return resolve(cwd); -} -function simpleEmbedding(text, dimensions = 128) { - const vec = new Array(dimensions).fill(0); - const normalized = text.toLowerCase(); - for (let i = 0;i < normalized.length; i++) { - const charCode = normalized.charCodeAt(i); - vec[i % dimensions] += Math.sin(charCode * (i + 1)); - vec[i * 2 % dimensions] += Math.cos(charCode); - } - const magnitude = Math.sqrt(vec.reduce((sum, v) => sum + v * v, 0)); - return magnitude > 0 ? vec.map((v) => v / magnitude) : vec; -} -function cosineSimilarity(a, b) { - if (a.length !== b.length) { - throw new InvalidVectorError; - } - const dot = a.reduce((sum, ai, i) => sum + ai * (b[i] ?? 0), 0); - const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0)); - const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0)); - return normA > 0 && normB > 0 ? dot / (normA * normB) : 0; -} -function now() { - return Date.now(); -} -var InvalidVectorError; -var init__util2 = __esm(() => { - init_dist(); - InvalidVectorError = StructuredError("InvalidVectorError", "Vectors must have the same dimension"); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/compose.js -var compose = (middleware, onError, onNotFound) => { - return (context3, next) => { - let index = -1; - return dispatch(0); - async function dispatch(i) { - if (i <= index) { - throw new Error("next() called multiple times"); - } - index = i; - let res; - let isError = false; - let handler; - if (middleware[i]) { - handler = middleware[i][0][0]; - context3.req.routeIndex = i; - } else { - handler = i === middleware.length && next || undefined; - } - if (handler) { - try { - res = await handler(context3, () => dispatch(i + 1)); - } catch (err) { - if (err instanceof Error && onError) { - context3.error = err; - res = await onError(err, context3); - isError = true; - } else { - throw err; - } - } - } else { - if (context3.finalized === false && onNotFound) { - res = await onNotFound(context3); - } - } - if (res && (context3.finalized === false || isError)) { - context3.res = res; - } - return context3; - } - }; -}; -var init_compose = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/request/constants.js -var GET_MATCH_RESULT; -var init_constants = __esm(() => { - GET_MATCH_RESULT = /* @__PURE__ */ Symbol(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/body.js -async function parseFormData(request, options) { - const formData = await request.formData(); - if (formData) { - return convertFormDataToBodyData(formData, options); - } - return {}; -} -function convertFormDataToBodyData(formData, options) { - const form = /* @__PURE__ */ Object.create(null); - formData.forEach((value, key) => { - const shouldParseAllValues = options.all || key.endsWith("[]"); - if (!shouldParseAllValues) { - form[key] = value; - } else { - handleParsingAllValues(form, key, value); - } - }); - if (options.dot) { - Object.entries(form).forEach(([key, value]) => { - const shouldParseDotValues = key.includes("."); - if (shouldParseDotValues) { - handleParsingNestedValues(form, key, value); - delete form[key]; - } - }); - } - return form; -} -var parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => { - const { all = false, dot = false } = options; - const headers = request instanceof HonoRequest ? request.raw.headers : request.headers; - const contentType = headers.get("Content-Type"); - if (contentType?.startsWith("multipart/form-data") || contentType?.startsWith("application/x-www-form-urlencoded")) { - return parseFormData(request, { all, dot }); - } - return {}; -}, handleParsingAllValues = (form, key, value) => { - if (form[key] !== undefined) { - if (Array.isArray(form[key])) { - form[key].push(value); - } else { - form[key] = [form[key], value]; - } - } else { - if (!key.endsWith("[]")) { - form[key] = value; - } else { - form[key] = [value]; - } - } -}, handleParsingNestedValues = (form, key, value) => { - let nestedForm = form; - const keys = key.split("."); - keys.forEach((key2, index) => { - if (index === keys.length - 1) { - nestedForm[key2] = value; - } else { - if (!nestedForm[key2] || typeof nestedForm[key2] !== "object" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) { - nestedForm[key2] = /* @__PURE__ */ Object.create(null); - } - nestedForm = nestedForm[key2]; - } - }); -}; -var init_body = __esm(() => { - init_request(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/request.js -var tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_), HonoRequest; -var init_request = __esm(() => { - init_http_exception(); - init_constants(); - init_body(); - init_url(); - HonoRequest = class { - raw; - #validatedData; - #matchResult; - routeIndex = 0; - path; - bodyCache = {}; - constructor(request, path = "/", matchResult = [[]]) { - this.raw = request; - this.path = path; - this.#matchResult = matchResult; - this.#validatedData = {}; - } - param(key) { - return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams(); - } - #getDecodedParam(key) { - const paramKey = this.#matchResult[0][this.routeIndex][1][key]; - const param = this.#getParamValue(paramKey); - return param && /\%/.test(param) ? tryDecodeURIComponent(param) : param; - } - #getAllDecodedParams() { - const decoded = {}; - const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]); - for (const key of keys) { - const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]); - if (value !== undefined) { - decoded[key] = /\%/.test(value) ? tryDecodeURIComponent(value) : value; - } - } - return decoded; - } - #getParamValue(paramKey) { - return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey; - } - query(key) { - return getQueryParam(this.url, key); - } - queries(key) { - return getQueryParams(this.url, key); - } - header(name) { - if (name) { - return this.raw.headers.get(name) ?? undefined; - } - const headerData = {}; - this.raw.headers.forEach((value, key) => { - headerData[key] = value; - }); - return headerData; - } - async parseBody(options) { - return this.bodyCache.parsedBody ??= await parseBody(this, options); - } - #cachedBody = (key) => { - const { bodyCache, raw } = this; - const cachedBody = bodyCache[key]; - if (cachedBody) { - return cachedBody; - } - const anyCachedKey = Object.keys(bodyCache)[0]; - if (anyCachedKey) { - return bodyCache[anyCachedKey].then((body) => { - if (anyCachedKey === "json") { - body = JSON.stringify(body); - } - return new Response(body)[key](); - }); - } - return bodyCache[key] = raw[key](); - }; - json() { - return this.#cachedBody("text").then((text) => JSON.parse(text)); - } - text() { - return this.#cachedBody("text"); - } - arrayBuffer() { - return this.#cachedBody("arrayBuffer"); - } - blob() { - return this.#cachedBody("blob"); - } - formData() { - return this.#cachedBody("formData"); - } - addValidatedData(target, data) { - this.#validatedData[target] = data; - } - valid(target) { - return this.#validatedData[target]; - } - get url() { - return this.raw.url; - } - get method() { - return this.raw.method; - } - get [GET_MATCH_RESULT]() { - return this.#matchResult; - } - get matchedRoutes() { - return this.#matchResult[0].map(([[, route]]) => route); - } - get routePath() { - return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path; - } - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/html.js -var HtmlEscapedCallbackPhase, raw = (value, callbacks) => { - const escapedString = new String(value); - escapedString.isEscaped = true; - escapedString.callbacks = callbacks; - return escapedString; -}, resolveCallback = async (str, phase, preserveCallbacks, context3, buffer) => { - if (typeof str === "object" && !(str instanceof String)) { - if (!(str instanceof Promise)) { - str = str.toString(); - } - if (str instanceof Promise) { - str = await str; - } - } - const callbacks = str.callbacks; - if (!callbacks?.length) { - return Promise.resolve(str); - } - if (buffer) { - buffer[0] += str; - } else { - buffer = [str]; - } - const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context: context3 }))).then((res) => Promise.all(res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context3, buffer))).then(() => buffer[0])); - if (preserveCallbacks) { - return raw(await resStr, callbacks); - } else { - return resStr; - } -}; -var init_html = __esm(() => { - HtmlEscapedCallbackPhase = { - Stringify: 1, - BeforeStream: 2, - Stream: 3 - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/context.js -var TEXT_PLAIN = "text/plain; charset=UTF-8", setDefaultContentType = (contentType, headers) => { - return { - "Content-Type": contentType, - ...headers - }; -}, Context = class { - #rawRequest; - #req; - env = {}; - #var; - finalized = false; - error; - #status; - #executionCtx; - #res; - #layout; - #renderer; - #notFoundHandler; - #preparedHeaders; - #matchResult; - #path; - constructor(req, options) { - this.#rawRequest = req; - if (options) { - this.#executionCtx = options.executionCtx; - this.env = options.env; - this.#notFoundHandler = options.notFoundHandler; - this.#path = options.path; - this.#matchResult = options.matchResult; - } - } - get req() { - this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult); - return this.#req; - } - get event() { - if (this.#executionCtx && "respondWith" in this.#executionCtx) { - return this.#executionCtx; - } else { - throw Error("This context has no FetchEvent"); - } - } - get executionCtx() { - if (this.#executionCtx) { - return this.#executionCtx; - } else { - throw Error("This context has no ExecutionContext"); - } - } - get res() { - return this.#res ||= new Response(null, { - headers: this.#preparedHeaders ??= new Headers - }); - } - set res(_res) { - if (this.#res && _res) { - _res = new Response(_res.body, _res); - for (const [k, v] of this.#res.headers.entries()) { - if (k === "content-type") { - continue; - } - if (k === "set-cookie") { - const cookies = this.#res.headers.getSetCookie(); - _res.headers.delete("set-cookie"); - for (const cookie of cookies) { - _res.headers.append("set-cookie", cookie); - } - } else { - _res.headers.set(k, v); - } - } - } - this.#res = _res; - this.finalized = true; - } - render = (...args) => { - this.#renderer ??= (content) => this.html(content); - return this.#renderer(...args); - }; - setLayout = (layout) => this.#layout = layout; - getLayout = () => this.#layout; - setRenderer = (renderer) => { - this.#renderer = renderer; - }; - header = (name, value, options) => { - if (this.finalized) { - this.#res = new Response(this.#res.body, this.#res); - } - const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers; - if (value === undefined) { - headers.delete(name); - } else if (options?.append) { - headers.append(name, value); - } else { - headers.set(name, value); - } - }; - status = (status) => { - this.#status = status; - }; - set = (key, value) => { - this.#var ??= /* @__PURE__ */ new Map; - this.#var.set(key, value); - }; - get = (key) => { - return this.#var ? this.#var.get(key) : undefined; - }; - get var() { - if (!this.#var) { - return {}; - } - return Object.fromEntries(this.#var); - } - #newResponse(data, arg, headers) { - const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers; - if (typeof arg === "object" && "headers" in arg) { - const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers); - for (const [key, value] of argHeaders) { - if (key.toLowerCase() === "set-cookie") { - responseHeaders.append(key, value); - } else { - responseHeaders.set(key, value); - } - } - } - if (headers) { - for (const [k, v] of Object.entries(headers)) { - if (typeof v === "string") { - responseHeaders.set(k, v); - } else { - responseHeaders.delete(k); - for (const v2 of v) { - responseHeaders.append(k, v2); - } - } - } - } - const status = typeof arg === "number" ? arg : arg?.status ?? this.#status; - return new Response(data, { status, headers: responseHeaders }); - } - newResponse = (...args) => this.#newResponse(...args); - body = (data, arg, headers) => this.#newResponse(data, arg, headers); - text = (text, arg, headers) => { - return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers)); - }; - json = (object3, arg, headers) => { - return this.#newResponse(JSON.stringify(object3), arg, setDefaultContentType("application/json", headers)); - }; - html = (html, arg, headers) => { - const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType("text/html; charset=UTF-8", headers)); - return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html); - }; - redirect = (location, status) => { - const locationString = String(location); - this.header("Location", !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString)); - return this.newResponse(null, status ?? 302); - }; - notFound = () => { - this.#notFoundHandler ??= () => new Response; - return this.#notFoundHandler(this); - }; -}; -var init_context = __esm(() => { - init_request(); - init_html(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router.js -var METHOD_NAME_ALL = "ALL", METHOD_NAME_ALL_LOWERCASE = "all", METHODS, MESSAGE_MATCHER_IS_ALREADY_BUILT = "Can not add a route since the matcher is already built.", UnsupportedPathError; -var init_router = __esm(() => { - METHODS = ["get", "post", "put", "delete", "options", "patch"]; - UnsupportedPathError = class extends Error { - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/constants.js -var COMPOSED_HANDLER = "__COMPOSED_HANDLER"; -var init_constants2 = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/hono-base.js -var notFoundHandler = (c) => { - return c.text("404 Not Found", 404); -}, errorHandler = (err, c) => { - if ("getResponse" in err) { - const res = err.getResponse(); - return c.newResponse(res.body, res); - } - console.error(err); - return c.text("Internal Server Error", 500); -}, Hono = class _Hono { - get; - post; - put; - delete; - options; - patch; - all; - on; - use; - router; - getPath; - _basePath = "/"; - #path = "/"; - routes = []; - constructor(options = {}) { - const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE]; - allMethods.forEach((method) => { - this[method] = (args1, ...args) => { - if (typeof args1 === "string") { - this.#path = args1; - } else { - this.#addRoute(method, this.#path, args1); - } - args.forEach((handler) => { - this.#addRoute(method, this.#path, handler); - }); - return this; - }; - }); - this.on = (method, path, ...handlers) => { - for (const p of [path].flat()) { - this.#path = p; - for (const m of [method].flat()) { - handlers.map((handler) => { - this.#addRoute(m.toUpperCase(), this.#path, handler); - }); - } - } - return this; - }; - this.use = (arg1, ...handlers) => { - if (typeof arg1 === "string") { - this.#path = arg1; - } else { - this.#path = "*"; - handlers.unshift(arg1); - } - handlers.forEach((handler) => { - this.#addRoute(METHOD_NAME_ALL, this.#path, handler); - }); - return this; - }; - const { strict, ...optionsWithoutStrict } = options; - Object.assign(this, optionsWithoutStrict); - this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict; - } - #clone() { - const clone2 = new _Hono({ - router: this.router, - getPath: this.getPath - }); - clone2.errorHandler = this.errorHandler; - clone2.#notFoundHandler = this.#notFoundHandler; - clone2.routes = this.routes; - return clone2; - } - #notFoundHandler = notFoundHandler; - errorHandler = errorHandler; - route(path, app) { - const subApp = this.basePath(path); - app.routes.map((r) => { - let handler; - if (app.errorHandler === errorHandler) { - handler = r.handler; - } else { - handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res; - handler[COMPOSED_HANDLER] = r.handler; - } - subApp.#addRoute(r.method, r.path, handler); - }); - return this; - } - basePath(path) { - const subApp = this.#clone(); - subApp._basePath = mergePath(this._basePath, path); - return subApp; - } - onError = (handler) => { - this.errorHandler = handler; - return this; - }; - notFound = (handler) => { - this.#notFoundHandler = handler; - return this; - }; - mount(path, applicationHandler, options) { - let replaceRequest; - let optionHandler; - if (options) { - if (typeof options === "function") { - optionHandler = options; - } else { - optionHandler = options.optionHandler; - if (options.replaceRequest === false) { - replaceRequest = (request) => request; - } else { - replaceRequest = options.replaceRequest; - } - } - } - const getOptions = optionHandler ? (c) => { - const options2 = optionHandler(c); - return Array.isArray(options2) ? options2 : [options2]; - } : (c) => { - let executionContext = undefined; - try { - executionContext = c.executionCtx; - } catch {} - return [c.env, executionContext]; - }; - replaceRequest ||= (() => { - const mergedPath = mergePath(this._basePath, path); - const pathPrefixLength = mergedPath === "/" ? 0 : mergedPath.length; - return (request) => { - const url2 = new URL(request.url); - url2.pathname = url2.pathname.slice(pathPrefixLength) || "/"; - return new Request(url2, request); - }; - })(); - const handler = async (c, next) => { - const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c)); - if (res) { - return res; - } - await next(); - }; - this.#addRoute(METHOD_NAME_ALL, mergePath(path, "*"), handler); - return this; - } - #addRoute(method, path, handler) { - method = method.toUpperCase(); - path = mergePath(this._basePath, path); - const r = { basePath: this._basePath, path, method, handler }; - this.router.add(method, path, [handler, r]); - this.routes.push(r); - } - #handleError(err, c) { - if (err instanceof Error) { - return this.errorHandler(err, c); - } - throw err; - } - #dispatch(request, executionCtx, env, method) { - if (method === "HEAD") { - return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, "GET")))(); - } - const path = this.getPath(request, { env }); - const matchResult = this.router.match(method, path); - const c = new Context(request, { - path, - matchResult, - env, - executionCtx, - notFoundHandler: this.#notFoundHandler - }); - if (matchResult[0].length === 1) { - let res; - try { - res = matchResult[0][0][0][0](c, async () => { - c.res = await this.#notFoundHandler(c); - }); - } catch (err) { - return this.#handleError(err, c); - } - return res instanceof Promise ? res.then((resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c); - } - const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler); - return (async () => { - try { - const context3 = await composed(c); - if (!context3.finalized) { - throw new Error("Context is not finalized. Did you forget to return a Response object or `await next()`?"); - } - return context3.res; - } catch (err) { - return this.#handleError(err, c); - } - })(); - } - fetch = (request, ...rest) => { - return this.#dispatch(request, rest[1], rest[0], request.method); - }; - request = (input, requestInit, Env, executionCtx) => { - if (input instanceof Request) { - return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx); - } - input = input.toString(); - return this.fetch(new Request(/^https?:\/\//.test(input) ? input : `http://localhost${mergePath("/", input)}`, requestInit), Env, executionCtx); - }; - fire = () => { - addEventListener("fetch", (event) => { - event.respondWith(this.#dispatch(event.request, event, undefined, event.request.method)); - }); - }; -}; -var init_hono_base = __esm(() => { - init_compose(); - init_context(); - init_router(); - init_constants2(); - init_url(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/matcher.js -function match(method, path) { - const matchers = this.buildAllMatchers(); - const match2 = (method2, path2) => { - const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; - const staticMatch = matcher[2][path2]; - if (staticMatch) { - return staticMatch; - } - const match3 = path2.match(matcher[0]); - if (!match3) { - return [[], emptyParam]; - } - const index = match3.indexOf("", 1); - return [matcher[1][index], match3]; - }; - this.match = match2; - return match2(method, path); -} -var emptyParam; -var init_matcher = __esm(() => { - init_router(); - emptyParam = []; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/node.js -function compareKey(a, b) { - if (a.length === 1) { - return b.length === 1 ? a < b ? -1 : 1 : -1; - } - if (b.length === 1) { - return 1; - } - if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) { - return 1; - } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) { - return -1; - } - if (a === LABEL_REG_EXP_STR) { - return 1; - } else if (b === LABEL_REG_EXP_STR) { - return -1; - } - return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length; -} -var LABEL_REG_EXP_STR = "[^/]+", ONLY_WILDCARD_REG_EXP_STR = ".*", TAIL_WILDCARD_REG_EXP_STR = "(?:|/.*)", PATH_ERROR, regExpMetaChars, Node = class _Node { - #index; - #varIndex; - #children = /* @__PURE__ */ Object.create(null); - insert(tokens, index, paramMap, context3, pathErrorCheckOnly) { - if (tokens.length === 0) { - if (this.#index !== undefined) { - throw PATH_ERROR; - } - if (pathErrorCheckOnly) { - return; - } - this.#index = index; - return; - } - const [token, ...restTokens] = tokens; - const pattern = token === "*" ? restTokens.length === 0 ? ["", "", ONLY_WILDCARD_REG_EXP_STR] : ["", "", LABEL_REG_EXP_STR] : token === "/*" ? ["", "", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/); - let node; - if (pattern) { - const name = pattern[1]; - let regexpStr = pattern[2] || LABEL_REG_EXP_STR; - if (name && pattern[2]) { - if (regexpStr === ".*") { - throw PATH_ERROR; - } - regexpStr = regexpStr.replace(/^\((?!\?:)(?=[^)]+\)$)/, "(?:"); - if (/\((?!\?:)/.test(regexpStr)) { - throw PATH_ERROR; - } - } - node = this.#children[regexpStr]; - if (!node) { - if (Object.keys(this.#children).some((k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR)) { - throw PATH_ERROR; - } - if (pathErrorCheckOnly) { - return; - } - node = this.#children[regexpStr] = new _Node; - if (name !== "") { - node.#varIndex = context3.varIndex++; - } - } - if (!pathErrorCheckOnly && name !== "") { - paramMap.push([name, node.#varIndex]); - } - } else { - node = this.#children[token]; - if (!node) { - if (Object.keys(this.#children).some((k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR)) { - throw PATH_ERROR; - } - if (pathErrorCheckOnly) { - return; - } - node = this.#children[token] = new _Node; - } - } - node.insert(restTokens, index, paramMap, context3, pathErrorCheckOnly); - } - buildRegExpStr() { - const childKeys = Object.keys(this.#children).sort(compareKey); - const strList = childKeys.map((k) => { - const c = this.#children[k]; - return (typeof c.#varIndex === "number" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\${k}` : k) + c.buildRegExpStr(); - }); - if (typeof this.#index === "number") { - strList.unshift(`#${this.#index}`); - } - if (strList.length === 0) { - return ""; - } - if (strList.length === 1) { - return strList[0]; - } - return "(?:" + strList.join("|") + ")"; - } -}; -var init_node = __esm(() => { - PATH_ERROR = /* @__PURE__ */ Symbol(); - regExpMetaChars = new Set(".\\+*[^]$()"); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/trie.js -var Trie = class { - #context = { varIndex: 0 }; - #root = new Node; - insert(path, index, pathErrorCheckOnly) { - const paramAssoc = []; - const groups = []; - for (let i = 0;; ) { - let replaced = false; - path = path.replace(/\{[^}]+\}/g, (m) => { - const mark = `@\\${i}`; - groups[i] = [mark, m]; - i++; - replaced = true; - return mark; - }); - if (!replaced) { - break; - } - } - const tokens = path.match(/(?::[^\/]+)|(?:\/\*$)|./g) || []; - for (let i = groups.length - 1;i >= 0; i--) { - const [mark] = groups[i]; - for (let j = tokens.length - 1;j >= 0; j--) { - if (tokens[j].indexOf(mark) !== -1) { - tokens[j] = tokens[j].replace(mark, groups[i][1]); - break; - } - } - } - this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly); - return paramAssoc; - } - buildRegExp() { - let regexp = this.#root.buildRegExpStr(); - if (regexp === "") { - return [/^$/, [], []]; - } - let captureIndex = 0; - const indexReplacementMap = []; - const paramReplacementMap = []; - regexp = regexp.replace(/#(\d+)|@(\d+)|\.\*\$/g, (_, handlerIndex, paramIndex) => { - if (handlerIndex !== undefined) { - indexReplacementMap[++captureIndex] = Number(handlerIndex); - return "$()"; - } - if (paramIndex !== undefined) { - paramReplacementMap[Number(paramIndex)] = ++captureIndex; - return ""; - } - return ""; - }); - return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap]; - } -}; -var init_trie = __esm(() => { - init_node(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/router.js -function buildWildcardRegExp(path) { - return wildcardRegExpCache[path] ??= new RegExp(path === "*" ? "" : `^${path.replace(/\/\*$|([.\\+*[^\]$()])/g, (_, metaChar) => metaChar ? `\\${metaChar}` : "(?:|/.*)")}$`); -} -function clearWildcardRegExpCache() { - wildcardRegExpCache = /* @__PURE__ */ Object.create(null); -} -function buildMatcherFromPreprocessedRoutes(routes) { - const trie = new Trie; - const handlerData = []; - if (routes.length === 0) { - return nullMatcher; - } - const routesWithStaticPathFlag = routes.map((route) => [!/\*|\/:/.test(route[0]), ...route]).sort(([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length); - const staticMap = /* @__PURE__ */ Object.create(null); - for (let i = 0, j = -1, len = routesWithStaticPathFlag.length;i < len; i++) { - const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i]; - if (pathErrorCheckOnly) { - staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam]; - } else { - j++; - } - let paramAssoc; - try { - paramAssoc = trie.insert(path, j, pathErrorCheckOnly); - } catch (e) { - throw e === PATH_ERROR ? new UnsupportedPathError(path) : e; - } - if (pathErrorCheckOnly) { - continue; - } - handlerData[j] = handlers.map(([h, paramCount]) => { - const paramIndexMap = /* @__PURE__ */ Object.create(null); - paramCount -= 1; - for (;paramCount >= 0; paramCount--) { - const [key, value] = paramAssoc[paramCount]; - paramIndexMap[key] = value; - } - return [h, paramIndexMap]; - }); - } - const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp(); - for (let i = 0, len = handlerData.length;i < len; i++) { - for (let j = 0, len2 = handlerData[i].length;j < len2; j++) { - const map2 = handlerData[i][j]?.[1]; - if (!map2) { - continue; - } - const keys = Object.keys(map2); - for (let k = 0, len3 = keys.length;k < len3; k++) { - map2[keys[k]] = paramReplacementMap[map2[keys[k]]]; - } - } - } - const handlerMap = []; - for (const i in indexReplacementMap) { - handlerMap[i] = handlerData[indexReplacementMap[i]]; - } - return [regexp, handlerMap, staticMap]; -} -function findMiddleware(middleware, path) { - if (!middleware) { - return; - } - for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) { - if (buildWildcardRegExp(k).test(path)) { - return [...middleware[k]]; - } - } - return; -} -var nullMatcher, wildcardRegExpCache, RegExpRouter = class { - name = "RegExpRouter"; - #middleware; - #routes; - constructor() { - this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) }; - this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) }; - } - add(method, path, handler) { - const middleware = this.#middleware; - const routes = this.#routes; - if (!middleware || !routes) { - throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT); - } - if (!middleware[method]) { - [middleware, routes].forEach((handlerMap) => { - handlerMap[method] = /* @__PURE__ */ Object.create(null); - Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => { - handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]]; - }); - }); - } - if (path === "/*") { - path = "*"; - } - const paramCount = (path.match(/\/:/g) || []).length; - if (/\*$/.test(path)) { - const re = buildWildcardRegExp(path); - if (method === METHOD_NAME_ALL) { - Object.keys(middleware).forEach((m) => { - middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || []; - }); - } else { - middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || []; - } - Object.keys(middleware).forEach((m) => { - if (method === METHOD_NAME_ALL || method === m) { - Object.keys(middleware[m]).forEach((p) => { - re.test(p) && middleware[m][p].push([handler, paramCount]); - }); - } - }); - Object.keys(routes).forEach((m) => { - if (method === METHOD_NAME_ALL || method === m) { - Object.keys(routes[m]).forEach((p) => re.test(p) && routes[m][p].push([handler, paramCount])); - } - }); - return; - } - const paths = checkOptionalParameter(path) || [path]; - for (let i = 0, len = paths.length;i < len; i++) { - const path2 = paths[i]; - Object.keys(routes).forEach((m) => { - if (method === METHOD_NAME_ALL || method === m) { - routes[m][path2] ||= [ - ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || [] - ]; - routes[m][path2].push([handler, paramCount - len + i + 1]); - } - }); - } - } - match = match; - buildAllMatchers() { - const matchers = /* @__PURE__ */ Object.create(null); - Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => { - matchers[method] ||= this.#buildMatcher(method); - }); - this.#middleware = this.#routes = undefined; - clearWildcardRegExpCache(); - return matchers; - } - #buildMatcher(method) { - const routes = []; - let hasOwnRoute = method === METHOD_NAME_ALL; - [this.#middleware, this.#routes].forEach((r) => { - const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : []; - if (ownRoute.length !== 0) { - hasOwnRoute ||= true; - routes.push(...ownRoute); - } else if (method !== METHOD_NAME_ALL) { - routes.push(...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])); - } - }); - if (!hasOwnRoute) { - return null; - } else { - return buildMatcherFromPreprocessedRoutes(routes); - } - } -}; -var init_router2 = __esm(() => { - init_router(); - init_url(); - init_matcher(); - init_node(); - init_trie(); - nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)]; - wildcardRegExpCache = /* @__PURE__ */ Object.create(null); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/prepared-router.js -var PreparedRegExpRouter = class { - name = "PreparedRegExpRouter"; - #matchers; - #relocateMap; - constructor(matchers, relocateMap) { - this.#matchers = matchers; - this.#relocateMap = relocateMap; - } - #addWildcard(method, handlerData) { - const matcher = this.#matchers[method]; - matcher[1].forEach((list5) => list5 && list5.push(handlerData)); - Object.values(matcher[2]).forEach((list5) => list5[0].push(handlerData)); - } - #addPath(method, path, handler, indexes, map2) { - const matcher = this.#matchers[method]; - if (!map2) { - matcher[2][path][0].push([handler, {}]); - } else { - indexes.forEach((index) => { - if (typeof index === "number") { - matcher[1][index].push([handler, map2]); - } else { - matcher[2][index || path][0].push([handler, map2]); - } - }); - } - } - add(method, path, handler) { - if (!this.#matchers[method]) { - const all = this.#matchers[METHOD_NAME_ALL]; - const staticMap = {}; - for (const key in all[2]) { - staticMap[key] = [all[2][key][0].slice(), emptyParam]; - } - this.#matchers[method] = [ - all[0], - all[1].map((list5) => Array.isArray(list5) ? list5.slice() : 0), - staticMap - ]; - } - if (path === "/*" || path === "*") { - const handlerData = [handler, {}]; - if (method === METHOD_NAME_ALL) { - for (const m in this.#matchers) { - this.#addWildcard(m, handlerData); - } - } else { - this.#addWildcard(method, handlerData); - } - return; - } - const data = this.#relocateMap[path]; - if (!data) { - throw new Error(`Path ${path} is not registered`); - } - for (const [indexes, map2] of data) { - if (method === METHOD_NAME_ALL) { - for (const m in this.#matchers) { - this.#addPath(m, path, handler, indexes, map2); - } - } else { - this.#addPath(method, path, handler, indexes, map2); - } - } - } - buildAllMatchers() { - return this.#matchers; - } - match = match; -}; -var init_prepared_router = __esm(() => { - init_router(); - init_matcher(); - init_router2(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/index.js -var init_reg_exp_router = __esm(() => { - init_router2(); - init_prepared_router(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/smart-router/router.js -var SmartRouter = class { - name = "SmartRouter"; - #routers = []; - #routes = []; - constructor(init2) { - this.#routers = init2.routers; - } - add(method, path, handler) { - if (!this.#routes) { - throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT); - } - this.#routes.push([method, path, handler]); - } - match(method, path) { - if (!this.#routes) { - throw new Error("Fatal error"); - } - const routers = this.#routers; - const routes = this.#routes; - const len = routers.length; - let i = 0; - let res; - for (;i < len; i++) { - const router = routers[i]; - try { - for (let i2 = 0, len2 = routes.length;i2 < len2; i2++) { - router.add(...routes[i2]); - } - res = router.match(method, path); - } catch (e) { - if (e instanceof UnsupportedPathError) { - continue; - } - throw e; - } - this.match = router.match.bind(router); - this.#routers = [router]; - this.#routes = undefined; - break; - } - if (i === len) { - throw new Error("Fatal error"); - } - this.name = `SmartRouter + ${this.activeRouter.name}`; - return res; - } - get activeRouter() { - if (this.#routes || this.#routers.length !== 1) { - throw new Error("No active router has been determined yet."); - } - return this.#routers[0]; - } -}; -var init_router3 = __esm(() => { - init_router(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/smart-router/index.js -var init_smart_router = __esm(() => { - init_router3(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/trie-router/node.js -var emptyParams, Node2 = class _Node2 { - #methods; - #children; - #patterns; - #order = 0; - #params = emptyParams; - constructor(method, handler, children) { - this.#children = children || /* @__PURE__ */ Object.create(null); - this.#methods = []; - if (method && handler) { - const m = /* @__PURE__ */ Object.create(null); - m[method] = { handler, possibleKeys: [], score: 0 }; - this.#methods = [m]; - } - this.#patterns = []; - } - insert(method, path, handler) { - this.#order = ++this.#order; - let curNode = this; - const parts = splitRoutingPath(path); - const possibleKeys = []; - for (let i = 0, len = parts.length;i < len; i++) { - const p = parts[i]; - const nextP = parts[i + 1]; - const pattern = getPattern(p, nextP); - const key = Array.isArray(pattern) ? pattern[0] : p; - if (key in curNode.#children) { - curNode = curNode.#children[key]; - if (pattern) { - possibleKeys.push(pattern[1]); - } - continue; - } - curNode.#children[key] = new _Node2; - if (pattern) { - curNode.#patterns.push(pattern); - possibleKeys.push(pattern[1]); - } - curNode = curNode.#children[key]; - } - curNode.#methods.push({ - [method]: { - handler, - possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i), - score: this.#order - } - }); - return curNode; - } - #getHandlerSets(node, method, nodeParams, params) { - const handlerSets = []; - for (let i = 0, len = node.#methods.length;i < len; i++) { - const m = node.#methods[i]; - const handlerSet = m[method] || m[METHOD_NAME_ALL]; - const processedSet = {}; - if (handlerSet !== undefined) { - handlerSet.params = /* @__PURE__ */ Object.create(null); - handlerSets.push(handlerSet); - if (nodeParams !== emptyParams || params && params !== emptyParams) { - for (let i2 = 0, len2 = handlerSet.possibleKeys.length;i2 < len2; i2++) { - const key = handlerSet.possibleKeys[i2]; - const processed = processedSet[handlerSet.score]; - handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key]; - processedSet[handlerSet.score] = true; - } - } - } - } - return handlerSets; - } - search(method, path) { - const handlerSets = []; - this.#params = emptyParams; - const curNode = this; - let curNodes = [curNode]; - const parts = splitPath(path); - const curNodesQueue = []; - for (let i = 0, len = parts.length;i < len; i++) { - const part = parts[i]; - const isLast = i === len - 1; - const tempNodes = []; - for (let j = 0, len2 = curNodes.length;j < len2; j++) { - const node = curNodes[j]; - const nextNode = node.#children[part]; - if (nextNode) { - nextNode.#params = node.#params; - if (isLast) { - if (nextNode.#children["*"]) { - handlerSets.push(...this.#getHandlerSets(nextNode.#children["*"], method, node.#params)); - } - handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params)); - } else { - tempNodes.push(nextNode); - } - } - for (let k = 0, len3 = node.#patterns.length;k < len3; k++) { - const pattern = node.#patterns[k]; - const params = node.#params === emptyParams ? {} : { ...node.#params }; - if (pattern === "*") { - const astNode = node.#children["*"]; - if (astNode) { - handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params)); - astNode.#params = params; - tempNodes.push(astNode); - } - continue; - } - const [key, name, matcher] = pattern; - if (!part && !(matcher instanceof RegExp)) { - continue; - } - const child = node.#children[key]; - const restPathString = parts.slice(i).join("/"); - if (matcher instanceof RegExp) { - const m = matcher.exec(restPathString); - if (m) { - params[name] = m[0]; - handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params)); - if (Object.keys(child.#children).length) { - child.#params = params; - const componentCount = m[0].match(/\//)?.length ?? 0; - const targetCurNodes = curNodesQueue[componentCount] ||= []; - targetCurNodes.push(child); - } - continue; - } - } - if (matcher === true || matcher.test(part)) { - params[name] = part; - if (isLast) { - handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params)); - if (child.#children["*"]) { - handlerSets.push(...this.#getHandlerSets(child.#children["*"], method, params, node.#params)); - } - } else { - child.#params = params; - tempNodes.push(child); - } - } - } - } - curNodes = tempNodes.concat(curNodesQueue.shift() ?? []); - } - if (handlerSets.length > 1) { - handlerSets.sort((a, b) => { - return a.score - b.score; - }); - } - return [handlerSets.map(({ handler, params }) => [handler, params])]; - } -}; -var init_node2 = __esm(() => { - init_router(); - init_url(); - emptyParams = /* @__PURE__ */ Object.create(null); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/trie-router/router.js -var TrieRouter = class { - name = "TrieRouter"; - #node; - constructor() { - this.#node = new Node2; - } - add(method, path, handler) { - const results = checkOptionalParameter(path); - if (results) { - for (let i = 0, len = results.length;i < len; i++) { - this.#node.insert(method, results[i], handler); - } - return; - } - this.#node.insert(method, path, handler); - } - match(method, path) { - return this.#node.search(method, path); - } -}; -var init_router4 = __esm(() => { - init_url(); - init_node2(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/router/trie-router/index.js -var init_trie_router = __esm(() => { - init_router4(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/hono.js -var Hono2; -var init_hono = __esm(() => { - init_hono_base(); - init_reg_exp_router(); - init_smart_router(); - init_trie_router(); - Hono2 = class extends Hono { - constructor(options = {}) { - super(options); - this.router = options.router ?? new SmartRouter({ - routers: [new RegExpRouter, new TrieRouter] - }); - } - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/index.js -var init_dist4 = __esm(() => { - init_hono(); -}); - -// ../../../../packages/runtime/dist/_util.js -function returnResponse(ctx, result) { - if (result instanceof ReadableStream) - return ctx.body(result); - if (result instanceof Response) - return result; - if (typeof result === "string") - return ctx.text(result); - if (typeof result === "number" || typeof result === "boolean") - return ctx.text(String(result)); - return ctx.json(result); -} - -// ../../../../packages/runtime/dist/router.js -var createRouter = () => { - const router = new Hono2; - const _router = router; - for (const method of ["get", "put", "post", "delete", "options", "patch"]) { - const _originalInvoker = _router[method].bind(router); - _router[method] = (path, ...args) => { - if (args.length === 0) { - return _originalInvoker(path); - } - let handlerIndex = args.length - 1; - while (handlerIndex >= 0 && typeof args[handlerIndex] !== "function") { - handlerIndex--; - } - if (handlerIndex < 0) { - return _originalInvoker(path, ...args); - } - const handler = args[handlerIndex]; - if (handler.length === 2) { - return _originalInvoker(path, ...args); - } - const wrapper = async (c) => { - let result = handler(c); - if (result instanceof Promise) - result = await result; - if (result instanceof Response) - return result; - return returnResponse(c, result); - }; - const newArgs = [...args]; - newArgs[handlerIndex] = wrapper; - return _originalInvoker(path, ...newArgs); - }; - } - _router.websocket = (path, ..._args) => { - throw new Error(`router.websocket() is deprecated and has been removed. - -` + `Migration: Use the websocket middleware instead: - -` + ` import { createRouter, websocket } from '@agentuity/runtime'; - -` + ` const router = createRouter(); - -` + ` // Before (deprecated): -` + ` // router.websocket('${path}', (c) => (ws) => { ... }); - -` + ` // After: -` + ` router.get('${path}', websocket((c, ws) => { -` + ` ws.onMessage((event) => { -` + ` ws.send('Echo: ' + event.data); -` + ` }); -` + ` }));`); - }; - _router.sse = (path, ..._args) => { - throw new Error(`router.sse() is deprecated and has been removed. - -` + `Migration: Use the sse middleware instead: - -` + ` import { createRouter, sse } from '@agentuity/runtime'; - -` + ` const router = createRouter(); - -` + ` // Before (deprecated): -` + ` // router.sse('${path}', (c) => async (stream) => { ... }); - -` + ` // After: -` + ` router.get('${path}', sse((c, stream) => { -` + ` stream.writeSSE({ data: 'Hello', event: 'message' }); -` + ` }));`); - }; - _router.stream = (path, ..._args) => { - throw new Error(`router.stream() is deprecated and has been removed. - -` + `Migration: Use the stream middleware instead: - -` + ` import { createRouter, stream } from '@agentuity/runtime'; - -` + ` const router = createRouter(); - -` + ` // Before (deprecated): -` + ` // router.stream('${path}', (c) => new ReadableStream({ ... })); - -` + ` // After: -` + ` router.post('${path}', stream((c) => { -` + ` return new ReadableStream({ -` + ` start(controller) { -` + ` controller.enqueue('data\\n'); -` + ` controller.close(); -` + ` } -` + ` }); -` + ` }));`); - }; - _router.cron = (schedule, ..._args) => { - throw new Error(`router.cron() is deprecated and has been removed. - -` + `Migration: Use the cron middleware instead: - -` + ` import { createRouter, cron } from '@agentuity/runtime'; - -` + ` const router = createRouter(); - -` + ` // Before (deprecated): -` + ` // router.cron('${schedule}', (c) => { ... }); - -` + ` // After: -` + ` router.post('/your-cron-path', cron('${schedule}', (c) => { -` + ` return { status: 'complete' }; -` + ` }));`); - }; - return router; -}; -var init_router5 = __esm(() => { - init_dist4(); -}); - -// ../../../../packages/runtime/dist/services/local/_router.js -function createLocalStorageRouter(db2, projectPath) { - const router = createRouter(); - router.get("/_agentuity/local/health", (c) => c.text("OK")); - router.get("/_agentuity/local/stream/:id", async (c) => { - const id = c.req.param("id"); - const query = db2.query(` - SELECT data, content_type - FROM stream_storage - WHERE project_path = ? AND id = ? - `); - const row = query.get(projectPath, id); - if (!row) { - return c.notFound(); - } - if (!row.data) { - return c.json({ error: "Stream not finalized" }, 400); - } - return c.body(new Uint8Array(row.data), 200, { - "Content-Type": row.content_type - }); - }); - return router; -} -var init__router = __esm(() => { - init_router5(); -}); - -// ../../../../packages/runtime/dist/services/local/keyvalue.js -class LocalKeyValueStorage { - #db; - #projectPath; - constructor(db2, projectPath) { - this.#db = db2; - this.#projectPath = projectPath; - } - async get(name, key) { - const query = this.#db.query(` - SELECT value, content_type, expires_at - FROM kv_storage - WHERE project_path = ? AND name = ? AND key = ? - `); - const row = query.get(this.#projectPath, name, key); - if (!row) { - return { exists: false }; - } - if (row.expires_at && row.expires_at < now()) { - await this.delete(name, key); - return { exists: false }; - } - let data; - if (row.content_type === "application/json") { - try { - const text = row.value.toString("utf-8"); - data = JSON.parse(text); - } catch { - data = new Uint8Array(row.value); - } - } else if (row.content_type.startsWith("text/")) { - data = row.value.toString("utf-8"); - } else { - data = new Uint8Array(row.value); - } - return { - data, - contentType: row.content_type, - exists: true - }; - } - async set(name, key, value, params) { - if (params?.ttl && params.ttl < 60) { - throw new Error(`ttl must be at least 60 seconds, got ${params.ttl}`); - } - let buffer; - let contentType = params?.contentType || "application/octet-stream"; - if (typeof value === "string") { - buffer = Buffer.from(value, "utf-8"); - if (!params?.contentType) { - contentType = "text/plain"; - } - } else if (value instanceof Uint8Array) { - buffer = Buffer.from(value); - } else if (value instanceof ArrayBuffer) { - buffer = Buffer.from(new Uint8Array(value)); - } else if (typeof value === "number" || typeof value === "boolean" || typeof value === "object") { - buffer = Buffer.from(JSON.stringify(value), "utf-8"); - contentType = "application/json"; - } else { - buffer = Buffer.from(String(value), "utf-8"); - } - const expiresAt = params?.ttl ? now() + params.ttl * 1000 : null; - const timestamp = now(); - const stmt = this.#db.prepare(` - INSERT INTO kv_storage (project_path, name, key, value, content_type, expires_at, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT(project_path, name, key) - DO UPDATE SET - value = excluded.value, - content_type = excluded.content_type, - expires_at = excluded.expires_at, - updated_at = excluded.updated_at - `); - stmt.run(this.#projectPath, name, key, buffer, contentType, expiresAt, timestamp, timestamp); - } - async delete(name, key) { - const stmt = this.#db.prepare(` - DELETE FROM kv_storage - WHERE project_path = ? AND name = ? AND key = ? - `); - stmt.run(this.#projectPath, name, key); - } - async getStats(_name) { - throw new Error("getStats not implemented for local storage"); - } - async getAllStats() { - throw new Error("getAllStats not implemented for local storage"); - } - async getNamespaces() { - throw new Error("getNamespaces not implemented for local storage"); - } - async search(_name, _keyword) { - throw new Error("search not implemented for local storage"); - } - async getKeys(_name) { - throw new Error("getKeys not implemented for local storage"); - } - async deleteNamespace(_name) { - throw new Error("deleteNamespace not implemented for local storage"); - } - async createNamespace(_name) { - throw new Error("createNamespace not implemented for local storage"); - } -} -var init_keyvalue2 = __esm(() => { - init__util2(); -}); - -// ../../../../packages/runtime/dist/services/local/stream.js -import { join as join4 } from "path"; -import { homedir as homedir2 } from "os"; -import { randomUUID as randomUUID2 } from "crypto"; -import { mkdirSync as mkdirSync2, existsSync as existsSync3, unlinkSync } from "fs"; -import { openSync, writeSync, closeSync, readFileSync as readFileSync2 } from "fs"; - -class LocalStreamStorage { - #db; - #projectPath; - #serverUrl; - #tempDir; - constructor(db2, projectPath, serverUrl) { - this.#db = db2; - this.#projectPath = projectPath; - this.#serverUrl = serverUrl; - this.#tempDir = join4(homedir2(), ".config", "agentuity", "streams"); - if (!existsSync3(this.#tempDir)) { - mkdirSync2(this.#tempDir, { recursive: true }); - } - } - async create(name, props) { - if (!name || name.length < 1 || name.length > 254) { - throw new Error("Stream name must be between 1 and 254 characters"); - } - const id = randomUUID2(); - const timestamp = now(); - const metadata = props?.metadata ? JSON.stringify(props.metadata) : null; - const stmt = this.#db.prepare(` - INSERT INTO stream_storage ( - project_path, id, name, metadata, content_type, created_at - ) - VALUES (?, ?, ?, ?, ?, ?) - `); - stmt.run(this.#projectPath, id, name, metadata, props?.contentType || "application/octet-stream", timestamp); - const url2 = `${this.#serverUrl}/_agentuity/local/stream/${id}`; - return new LocalStream(id, url2, this.#db, this.#projectPath, this.#tempDir, props?.compress ?? false); - } - async list(params) { - if (params?.limit && (params.limit <= 0 || params.limit > 1000)) { - throw new Error("limit must be between 1 and 1000"); - } - let query = ` - SELECT id, name, metadata, size_bytes - FROM stream_storage - WHERE project_path = ? - `; - const queryParams = [this.#projectPath]; - if (params?.name) { - query += ` AND name = ?`; - queryParams.push(params.name); - } - if (params?.metadata) { - for (const [key, value] of Object.entries(params.metadata)) { - query += ` AND metadata LIKE ?`; - queryParams.push(`%"${key}":"${value}"%`); - } - } - const countQuery = this.#db.query(query.replace("SELECT id, name, metadata, size_bytes", "SELECT COUNT(*) as count")); - const { count } = countQuery.get(...queryParams); - query += ` ORDER BY created_at DESC`; - if (params?.limit) { - query += ` LIMIT ${params.limit}`; - } - if (params?.offset) { - query += ` OFFSET ${params.offset}`; - } - const stmt = this.#db.query(query); - const rows = stmt.all(...queryParams); - const streams = rows.map((row) => ({ - id: row.id, - name: row.name, - metadata: row.metadata ? JSON.parse(row.metadata) : {}, - url: `${this.#serverUrl}/_agentuity/local/stream/${row.id}`, - sizeBytes: row.size_bytes - })); - return { - success: true, - streams, - total: count - }; - } - async get(id) { - if (!id?.trim()) { - throw new Error("Stream id is required"); - } - const stmt = this.#db.query(` - SELECT id, name, metadata, size_bytes - FROM stream_storage - WHERE project_path = ? AND id = ? - `); - const row = stmt.get(this.#projectPath, id); - if (!row) { - throw new Error(`Stream not found: ${id}`); - } - const metadata = row.metadata ? JSON.parse(row.metadata) : {}; - const url2 = `${this.#serverUrl}/_agentuity/local/stream/${id}`; - return { - id: row.id, - name: row.name, - metadata, - url: url2, - sizeBytes: row.size_bytes - }; - } - async download(id) { - if (!id?.trim()) { - throw new Error("Stream id is required"); - } - const stmt = this.#db.query(` - SELECT data FROM stream_storage - WHERE project_path = ? AND id = ? - `); - const row = stmt.get(this.#projectPath, id); - if (!row || !row.data) { - throw new Error(`Stream not found or empty: ${id}`); - } - const buffer = row.data; - return new ReadableStream({ - start(controller) { - controller.enqueue(new Uint8Array(buffer)); - controller.close(); - } - }); - } - async delete(id) { - if (!id?.trim()) { - throw new Error("Stream id is required"); - } - const stmt = this.#db.prepare(` - DELETE FROM stream_storage - WHERE project_path = ? AND id = ? - `); - stmt.run(this.#projectPath, id); - } -} -var LocalStream; -var init_stream2 = __esm(() => { - init__util2(); - LocalStream = class LocalStream extends WritableStream { - id; - url; - #db; - #projectPath; - #compressed; - #tempFilePath; - #fileHandle = null; - #bytesWritten = 0; - #closed = false; - constructor(id, url2, db2, projectPath, tempDir, compressed) { - super({ - write: async (chunk) => { - await this.#writeToFile(chunk); - }, - close: async () => { - await this.#persist(); - } - }); - this.id = id; - this.url = url2; - this.#db = db2; - this.#projectPath = projectPath; - this.#compressed = compressed; - this.#tempFilePath = join4(tempDir, `${id}.tmp`); - this.#fileHandle = openSync(this.#tempFilePath, "w"); - } - get bytesWritten() { - return this.#bytesWritten; - } - get compressed() { - return this.#compressed; - } - async write(chunk) { - if (this.#closed) { - throw new Error("Stream is closed"); - } - let binary; - if (chunk instanceof Uint8Array) { - binary = chunk; - } else if (typeof chunk === "string") { - binary = new TextEncoder().encode(chunk); - } else if (chunk instanceof ArrayBuffer) { - binary = new Uint8Array(chunk); - } else if (typeof chunk === "object") { - binary = new TextEncoder().encode(JSON.stringify(chunk)); - } else { - binary = new TextEncoder().encode(String(chunk)); - } - await this.#writeToFile(binary); - } - async close() { - if (this.#closed) { - return; - } - this.#closed = true; - if (this.#fileHandle !== null) { - closeSync(this.#fileHandle); - this.#fileHandle = null; - } - await this.#persist(); - } - getReader() { - const db2 = this.#db; - const projectPath = this.#projectPath; - const id = this.id; - return new ReadableStream({ - start(controller) { - const query = db2.query(` - SELECT data FROM stream_storage - WHERE project_path = ? AND id = ? - `); - const row = query.get(projectPath, id); - if (!row || !row.data) { - controller.error(new Error("Stream not found or not finalized")); - return; - } - controller.enqueue(new Uint8Array(row.data)); - controller.close(); - } - }); - } - async#writeToFile(chunk) { - if (this.#fileHandle === null) { - throw new Error("File handle is closed"); - } - const written = writeSync(this.#fileHandle, chunk); - this.#bytesWritten += written; - } - async#persist() { - let data = readFileSync2(this.#tempFilePath); - if (this.#compressed) { - const { gzipSync } = await import("zlib"); - data = gzipSync(data); - } - const stmt = this.#db.prepare(` - UPDATE stream_storage - SET data = ?, size_bytes = ? - WHERE project_path = ? AND id = ? - `); - stmt.run(data, this.#bytesWritten, this.#projectPath, this.id); - try { - unlinkSync(this.#tempFilePath); - } catch {} - } - }; -}); - -// ../../../../packages/runtime/dist/services/local/vector.js -import { randomUUID as randomUUID3 } from "crypto"; - -class LocalVectorStorage { - #db; - #projectPath; - constructor(db2, projectPath) { - this.#db = db2; - this.#projectPath = projectPath; - } - async upsert(name, ...documents) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - if (documents.length === 0) { - throw new Error("At least one document is required"); - } - const results = []; - const stmt = this.#db.prepare(` - INSERT INTO vector_storage ( - project_path, name, id, key, embedding, document, metadata, created_at, updated_at - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT(project_path, name, key) - DO UPDATE SET - embedding = excluded.embedding, - document = excluded.document, - metadata = excluded.metadata, - updated_at = excluded.updated_at - `); - for (const doc2 of documents) { - if (!doc2.key?.trim()) { - throw new Error("Each document must have a non-empty key"); - } - let embedding; - if ("embeddings" in doc2 && doc2.embeddings) { - if (!Array.isArray(doc2.embeddings) || doc2.embeddings.length === 0) { - throw new Error("Embeddings must be a non-empty array"); - } - embedding = doc2.embeddings; - } else if ("document" in doc2 && doc2.document) { - if (!doc2.document?.trim()) { - throw new Error("Document text must be non-empty"); - } - embedding = simpleEmbedding(doc2.document); - } else { - throw new Error("Each document must have either embeddings or document text"); - } - const id = randomUUID3(); - const timestamp = now(); - const embeddingJson = JSON.stringify(embedding); - const documentText = "document" in doc2 ? doc2.document : null; - const metadata = doc2.metadata ? JSON.stringify(doc2.metadata) : null; - stmt.run(this.#projectPath, name, id, doc2.key, embeddingJson, documentText ?? null, metadata ?? null, timestamp, timestamp); - const row = this.#db.prepare("SELECT id FROM vector_storage WHERE project_path = ? AND name = ? AND key = ?").get(this.#projectPath, name, doc2.key); - const actualId = row?.id ?? id; - results.push({ key: doc2.key, id: actualId }); - } - return results; - } - async get(name, key) { - if (!name?.trim() || !key?.trim()) { - throw new Error("Vector storage name and key are required"); - } - const query = this.#db.query(` - SELECT id, key, embedding, document, metadata - FROM vector_storage - WHERE project_path = ? AND name = ? AND key = ? - `); - const row = query.get(this.#projectPath, name, key); - if (!row) { - return { exists: false }; - } - return { - exists: true, - data: { - id: row.id, - key: row.key, - embeddings: JSON.parse(row.embedding), - document: row.document || undefined, - metadata: row.metadata ? JSON.parse(row.metadata) : undefined, - similarity: 1 - } - }; - } - async getMany(name, ...keys) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - if (keys.length === 0) { - return new Map; - } - const results = await Promise.all(keys.map(async (key) => { - const result = await this.get(name, key); - return { key, result }; - })); - const map2 = new Map; - for (const { key, result } of results) { - if (result.exists) { - map2.set(key, result.data); - } - } - return map2; - } - async search(name, params) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - if (!params.query?.trim()) { - throw new Error("Query is required"); - } - const query = this.#db.query(` - SELECT id, key, embedding, metadata - FROM vector_storage - WHERE project_path = ? AND name = ? - `); - const rows = query.all(this.#projectPath, name); - const row = rows[0]; - if (!row) { - return []; - } - const firstEmbedding = JSON.parse(row.embedding); - const dimensions = firstEmbedding.length; - const queryEmbedding = simpleEmbedding(params.query, dimensions); - const results = []; - for (const row2 of rows) { - const embedding = JSON.parse(row2.embedding); - const similarity = cosineSimilarity(queryEmbedding, embedding); - if (params.similarity !== undefined && similarity < params.similarity) { - continue; - } - if (params.metadata) { - const rowMetadata = row2.metadata ? JSON.parse(row2.metadata) : {}; - const matches = Object.entries(params.metadata).every(([key, value]) => rowMetadata[key] === value); - if (!matches) { - continue; - } - } - results.push({ - id: row2.id, - key: row2.key, - metadata: row2.metadata ? JSON.parse(row2.metadata) : undefined, - similarity - }); - } - results.sort((a, b) => b.similarity - a.similarity); - const limit = params.limit || 10; - return results.slice(0, limit); - } - async delete(name, ...keys) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - if (keys.length === 0) { - return 0; - } - const placeholders = keys.map(() => "?").join(", "); - const stmt = this.#db.prepare(` - DELETE FROM vector_storage - WHERE project_path = ? AND name = ? AND key IN (${placeholders}) - `); - const result = stmt.run(this.#projectPath, name, ...keys); - return result.changes; - } - async exists(name) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - const query = this.#db.query(` - SELECT COUNT(*) as count - FROM vector_storage - WHERE project_path = ? AND name = ? - `); - const { count } = query.get(this.#projectPath, name); - return count > 0; - } - async getStats(name) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - const countQuery = this.#db.query(` - SELECT COUNT(*) as count, - MIN(created_at) as created_at, MAX(updated_at) as last_used - FROM vector_storage - WHERE project_path = ? AND name = ? - `); - const stats = countQuery.get(this.#projectPath, name); - if (stats.count === 0) { - return { sum: 0, count: 0 }; - } - const sampleQuery = this.#db.query(` - SELECT key, embedding, document, metadata, created_at, updated_at - FROM vector_storage - WHERE project_path = ? AND name = ? - LIMIT 20 - `); - const samples = sampleQuery.all(this.#projectPath, name); - const encoder2 = new TextEncoder; - let totalSum = 0; - const sampledResults = {}; - for (const sample of samples) { - const embeddingBytes = encoder2.encode(sample.embedding).length; - const documentBytes = sample.document ? encoder2.encode(sample.document).length : 0; - const size = embeddingBytes + documentBytes; - totalSum += size; - sampledResults[sample.key] = { - embedding: JSON.parse(sample.embedding), - document: sample.document || undefined, - size, - metadata: sample.metadata ? JSON.parse(sample.metadata) : undefined, - firstUsed: sample.created_at, - lastUsed: sample.updated_at - }; - } - const estimatedSum = stats.count <= samples.length ? totalSum : Math.round(totalSum / samples.length * stats.count); - return { - sum: estimatedSum, - count: stats.count, - createdAt: stats.created_at || undefined, - lastUsed: stats.last_used || undefined, - sampledResults - }; - } - async getAllStats() { - const query = this.#db.query(` - SELECT name, embedding, document - FROM vector_storage - WHERE project_path = ? - `); - const rows = query.all(this.#projectPath); - const encoder2 = new TextEncoder; - const namespaceStats = new Map; - for (const row of rows) { - const embeddingBytes = encoder2.encode(row.embedding).length; - const documentBytes = row.document ? encoder2.encode(row.document).length : 0; - const size = embeddingBytes + documentBytes; - const existing = namespaceStats.get(row.name); - if (existing) { - existing.sum += size; - existing.count += 1; - } else { - namespaceStats.set(row.name, { sum: size, count: 1 }); - } - } - const timestampQuery = this.#db.query(` - SELECT name, MIN(created_at) as created_at, MAX(updated_at) as last_used - FROM vector_storage - WHERE project_path = ? - GROUP BY name - `); - const timestamps = timestampQuery.all(this.#projectPath); - for (const ts of timestamps) { - const stats = namespaceStats.get(ts.name); - if (stats) { - stats.createdAt = ts.created_at || undefined; - stats.lastUsed = ts.last_used || undefined; - } - } - const results = {}; - for (const [name, stats] of namespaceStats) { - results[name] = stats; - } - return results; - } - async getNamespaces() { - const query = this.#db.query(` - SELECT DISTINCT name - FROM vector_storage - WHERE project_path = ? - `); - const rows = query.all(this.#projectPath); - return rows.map((row) => row.name); - } - async deleteNamespace(name) { - if (!name?.trim()) { - throw new Error("Vector storage name is required"); - } - const stmt = this.#db.prepare(` - DELETE FROM vector_storage - WHERE project_path = ? AND name = ? - `); - stmt.run(this.#projectPath, name); - } -} -var init_vector2 = __esm(() => { - init__util2(); -}); - -// ../../../../packages/runtime/dist/services/local/index.js -var init_local3 = __esm(() => { - init__db(); - init__util2(); - init__router(); - init_keyvalue2(); - init_stream2(); - init_vector2(); -}); - -// ../../../../packages/runtime/dist/_services.js -var exports__services = {}; -__export(exports__services, { - registerServices: () => registerServices, - getThreadProvider: () => getThreadProvider, - getSessionProvider: () => getSessionProvider, - getSessionEventProvider: () => getSessionEventProvider, - getServices: () => getServices, - getLocalRouter: () => getLocalRouter, - getEvalRunEventProvider: () => getEvalRunEventProvider, - createServices: () => createServices -}); -function createServices(logger, config2, serverUrl) { - const authenticated = isAuthenticated(); - const useLocal = config2?.services?.useLocal ?? false; - adapter = createFetchAdapter(logger); - const shouldUseLocal = useLocal || !authenticated || process.env.AGENTUITY_FORCE_LOCAL_SERVICES === "true"; - if (shouldUseLocal) { - const db2 = getLocalDB(); - const projectPath = normalizeProjectPath(); - if (!serverUrl) { - throw new ServerUrlMissingError; - } - logger.info("Using local services (development only)"); - kv = config2?.services?.keyvalue || new LocalKeyValueStorage(db2, projectPath); - stream = config2?.services?.stream || new LocalStreamStorage(db2, projectPath, serverUrl); - vector = config2?.services?.vector || new LocalVectorStorage(db2, projectPath); - session2 = config2?.services?.session || new DefaultSessionProvider; - thread2 = config2?.services?.thread || new LocalThreadProvider; - sessionEvent = config2?.services?.sessionEvent ? new CompositeSessionEventProvider(new LocalSessionEventProvider, config2.services.sessionEvent) : new LocalSessionEventProvider; - evalRunEvent = config2?.services?.evalRunEvent ? new CompositeEvalRunEventProvider(new LocalEvalRunEventProvider, config2.services.evalRunEvent) : new LocalEvalRunEventProvider; - localRouter = createLocalStorageRouter(db2, projectPath); - return { localRouter }; - } - localRouter = null; - const catalystUrl = getCatalystBaseUrl(); - const streamBaseUrl = getStreamBaseUrl(); - kv = config2?.services?.keyvalue || new KeyValueStorageService(getKvBaseUrl(), adapter); - stream = config2?.services?.stream || new StreamStorageService(streamBaseUrl, adapter); - vector = config2?.services?.vector || new VectorStorageService(getVectorBaseUrl(), adapter); - sandbox2 = new HTTPSandboxService(new APIClient(catalystUrl, logger), streamBaseUrl); - session2 = config2?.services?.session || new DefaultSessionProvider; - thread2 = config2?.services?.thread || new DefaultThreadProvider; - sessionEvent = isProduction() && process.env.AGENTUITY_CLOUD_EXPORT_DIR ? new JSONSessionEventProvider(process.env.AGENTUITY_CLOUD_EXPORT_DIR) : new HTTPSessionEventProvider(new APIClient(catalystUrl, logger), logger); - if (config2?.services?.sessionEvent) { - sessionEvent = new CompositeSessionEventProvider(sessionEvent, config2.services.sessionEvent); - } - logger.debug("[SERVICES] Initializing eval run provider - region: %s, catalystBaseUrl: %s, isProduction: %s", getRegion(), catalystUrl, isProduction()); - evalRunEvent = isProduction() && process.env.AGENTUITY_CLOUD_EXPORT_DIR ? new JSONEvalRunEventProvider(process.env.AGENTUITY_CLOUD_EXPORT_DIR) : new HTTPEvalRunEventProvider(new APIClient(catalystUrl, logger), logger, catalystUrl); - if (config2?.services?.evalRunEvent) { - evalRunEvent = new CompositeEvalRunEventProvider(evalRunEvent, config2.services.evalRunEvent); - } - return {}; -} -function getThreadProvider() { - return thread2; -} -function getSessionProvider() { - return session2; -} -function getLocalRouter() { - return localRouter; -} -function getSessionEventProvider() { - return sessionEvent; -} -function getEvalRunEventProvider() { - return evalRunEvent; -} -function getServices() { - return { kv, stream, vector, sandbox: sandbox2 }; -} -function registerServices(o, includeAgents = false) { - Object.defineProperty(o, "kv", { - get: () => kv, - enumerable: false, - configurable: false - }); - Object.defineProperty(o, "stream", { - get: () => stream, - enumerable: false, - configurable: false - }); - Object.defineProperty(o, "vector", { - get: () => vector, - enumerable: false, - configurable: false - }); - Object.defineProperty(o, "sandbox", { - get: () => sandbox2, - enumerable: false, - configurable: false - }); - if (includeAgents) { - let cachedRegistry; - Object.defineProperty(o, "agent", { - get: () => { - if (!cachedRegistry) { - cachedRegistry = populateAgentsRegistry(o); - } - return cachedRegistry; - }, - enumerable: false, - configurable: false - }); - } -} -var import_api29, userAgent, getSdkKey = () => process.env.AGENTUITY_SDK_KEY, getBearerKey = () => `Bearer ${getSdkKey()}`, getRegion = () => process.env.AGENTUITY_REGION ?? "usc", getLazyServiceUrls = () => getServiceUrls(getRegion()), getKvBaseUrl = () => getLazyServiceUrls().keyvalue, getStreamBaseUrl = () => getLazyServiceUrls().stream, getVectorBaseUrl = () => getLazyServiceUrls().vector, getCatalystBaseUrl = () => getLazyServiceUrls().catalyst, adapter, createFetchAdapter = (logger) => createServerFetchAdapter({ - headers: { - Authorization: getBearerKey(), - "User-Agent": userAgent - }, - onBefore: async (url2, options, callback) => { - logger.debug("before request: %s with options: %s", url2, options); - if (!options.telemetry) { - return callback(); - } - options.headers = { ...options.headers, ...injectTraceContextToHeaders() }; - const tracer = getTracer() ?? import_api29.trace.getTracer("agentuity"); - const currentContext = import_api29.context.active(); - const span = tracer.startSpan(options.telemetry.name, { attributes: options.telemetry.attributes, kind: import_api29.SpanKind.CLIENT }, currentContext); - const spanContext = import_api29.trace.setSpan(currentContext, span); - try { - await import_api29.context.with(spanContext, callback); - span.setStatus({ code: import_api29.SpanStatusCode.OK }); - } catch (err) { - const e = err; - span.recordException(e); - span.setStatus({ code: import_api29.SpanStatusCode.ERROR, message: e?.message ?? String(err) }); - throw err; - } finally { - span.end(); - } - }, - onAfter: async (url2, options, result, err) => { - logger.debug("after request: %s (%d) => %s", url2, result.response.status, err); - if (err) { - return; - } - const span = import_api29.trace.getSpan(import_api29.context.active()); - switch (options.telemetry?.name) { - case "agentuity.keyvalue.get": { - if (result.response.status === 404) { - span?.addEvent("miss"); - } else if (result.response.ok) { - span?.addEvent("hit"); - } - break; - } - case "agentuity.stream.create": { - if (result.response.ok) { - const res = result.data; - span?.setAttributes({ - "stream.id": res.id, - "stream.url": `${getStreamBaseUrl()}/${res.id}` - }); - } - break; - } - case "agentuity.stream.list": { - const response = result.data; - if (response && span) { - span.setAttributes({ - "stream.count": response.streams.length, - "stream.total": response.total - }); - } - break; - } - case "agentuity.vector.upsert": { - if (result.response.ok) { - const data = result.data; - span?.setAttributes({ - "vector.count": data.length - }); - } - break; - } - case "agentuity.vector.search": { - if (result.response.ok) { - const data = result.data; - span?.setAttributes({ - "vector.results": data.length - }); - } - break; - } - case "agentuity.vector.get": { - if (result.response.status === 404) { - span?.addEvent("miss"); - } else if (result.response.ok) { - span?.addEvent("hit"); - } - break; - } - } - } -}, logger), kv, stream, vector, sandbox2, session2, thread2, sessionEvent, evalRunEvent, localRouter = null, ServerUrlMissingError; -var init__services = __esm(() => { - init_dist(); - init_dist3(); - init_sandbox2(); - init_session3(); - init_evalrun2(); - init_local2(); - init_http4(); - init__server(); - init_agent2(); - init__config(); - init_session4(); - init_local3(); - import_api29 = __toESM(require_src(), 1); - userAgent = `Agentuity SDK/${getSDKVersion()}`; - ServerUrlMissingError = StructuredError("ServerUrlMissingError", "serverUrl is required when using local services"); -}); - -// ../../../../packages/runtime/dist/_context.js -import { AsyncLocalStorage } from "async_hooks"; -var RequestAgentContext, agentAsyncLocalStorage, httpAsyncLocalStorage, inAgentContext = () => { - const context4 = agentAsyncLocalStorage.getStore(); - return !!context4; -}, inHTTPContext = () => { - const context4 = httpAsyncLocalStorage.getStore(); - return !!context4; -}, AgentContextNotAvailableError, getAgentContext = () => { - const context4 = agentAsyncLocalStorage.getStore(); - if (!context4) { - throw new AgentContextNotAvailableError; - } - return context4; -}, HTTPContextNotAvailableError, getHTTPContext = () => { - const context4 = httpAsyncLocalStorage.getStore(); - if (!context4) { - throw new HTTPContextNotAvailableError; - } - return context4; -}, getAgentAsyncLocalStorage = () => agentAsyncLocalStorage, setupRequestAgentContext = (ctxObject, args, next) => { - const ctx = new RequestAgentContext(args); - Object.defineProperty(ctxObject, "executionCtx", { - get() { - return { - waitUntil: (promise2) => { - args.handler.waitUntil(promise2); - }, - passThroughOnException: () => {}, - props: {} - }; - }, - configurable: true - }); - return agentAsyncLocalStorage.run(ctx, async () => { - const result = await next(); - return result; - }); -}, runInHTTPContext = async (ctx, next) => { - return httpAsyncLocalStorage.run(ctx, next); -}; -var init__context = __esm(() => { - init_dist(); - init__config(); - init__services(); - RequestAgentContext = class RequestAgentContext { - agent; - logger; - sessionId; - tracer; - kv; - stream; - vector; - sandbox; - state; - session; - thread; - config; - app; - current; - [AGENT_RUNTIME]; - handler; - _initialAuth; - get auth() { - if (inHTTPContext()) { - try { - const httpCtx = httpAsyncLocalStorage.getStore(); - if (httpCtx?.var && "auth" in httpCtx.var) { - return httpCtx.var.auth ?? null; - } - } catch {} - } - return this._initialAuth; - } - set auth(value) { - this._initialAuth = value; - } - constructor(args) { - this.agent = args.agent; - this.logger = args.logger; - this.sessionId = args.sessionId; - this.tracer = args.tracer; - this.thread = args.thread; - this.session = args.session; - this.config = args.config; - this.app = args.app; - this._initialAuth = args.auth ?? null; - this[AGENT_RUNTIME] = args.runtime; - this.state = new Map; - this.handler = args.handler; - registerServices(this, false); - } - waitUntil(callback) { - this.handler.waitUntil(callback); - } - }; - agentAsyncLocalStorage = new AsyncLocalStorage; - httpAsyncLocalStorage = new AsyncLocalStorage; - AgentContextNotAvailableError = StructuredError("AgentContextNotAvailableError", "AgentContext is not available"); - HTTPContextNotAvailableError = StructuredError("HTTPContextNotAvailableError", "HTTPContext is not available"); -}); - -// ../../../../packages/runtime/dist/_validation.js -async function validateSchema(schema, value) { - const result = await schema["~standard"].validate(value); - if ("issues" in result && result.issues) { - return { success: false, issues: Array.from(result.issues) }; - } - return { success: true, data: result.value }; -} -function formatValidationIssues(issues) { - return issues.map((issue2) => { - const path = issue2.path?.map((p) => typeof p === "object" ? p.key : p).join(".") || ""; - return path ? `${path}: ${issue2.message}` : issue2.message; - }).join(", "); -} - -// ../../../../packages/runtime/dist/_metadata.js -import { join as join5 } from "path"; -import { existsSync as existsSync4, readFileSync as readFileSync3 } from "fs"; -function getMetadataPath() { - if (process.env.AGENTUITY_PROJECT_DIR) { - const devPath2 = join5(process.env.AGENTUITY_PROJECT_DIR, ".agentuity", "agentuity.metadata.json"); - if (existsSync4(devPath2)) { - return devPath2; - } - } - const productionPath = join5(process.cwd(), "agentuity.metadata.json"); - if (existsSync4(productionPath)) { - return productionPath; - } - const devPath = join5(process.cwd(), ".agentuity", "agentuity.metadata.json"); - if (existsSync4(devPath)) { - return devPath; - } - return productionPath; -} -function loadBuildMetadata() { - if (_metadataCache !== null) { - internal.info("[metadata] loadBuildMetadata: returning cached value (exists: %s)", _metadataCache !== undefined); - return _metadataCache; - } - const metadataPath = getMetadataPath(); - internal.info("[metadata] loadBuildMetadata: checking path %s", metadataPath); - internal.info("[metadata] loadBuildMetadata: cwd=%s", process.cwd()); - if (!existsSync4(metadataPath)) { - internal.info("[metadata] agentuity.metadata.json not found at %s", metadataPath); - _metadataCache = undefined; - return; - } - try { - internal.info("[metadata] loadBuildMetadata: file exists, reading..."); - const content = readFileSync3(metadataPath, "utf-8"); - const metadata = JSON.parse(content); - _metadataCache = metadata; - let totalEvals = 0; - for (const agent2 of metadata.agents ?? []) { - totalEvals += agent2.evals?.length ?? 0; - } - internal.info("[metadata] loaded agentuity.metadata.json: %d agents, %d routes, %d total evals", metadata.agents?.length ?? 0, metadata.routes?.length ?? 0, totalEvals); - for (const agent2 of metadata.agents ?? []) { - internal.info("[metadata] agent: %s (evals: %d)", agent2.name, agent2.evals?.length ?? 0); - } - return metadata; - } catch (err) { - internal.info("[metadata] failed to load agentuity.metadata.json: %s", err); - _metadataCache = undefined; - return; - } -} -function ensureAgentMaps() { - if (_agentsByName !== null) { - internal.info(`[metadata] ensureAgentMaps: already initialized, skipping`); - return; - } - internal.info(`[metadata] ensureAgentMaps: initializing agent and eval maps`); - _agentsByName = new Map; - _agentsByAgentId = new Map; - _evalsByAgentName = new Map; - _evalsByAgentId = new Map; - const metadata = loadBuildMetadata(); - if (!metadata?.agents) { - internal.info(`[metadata] ensureAgentMaps: no metadata or no agents found`); - return; - } - internal.info(`[metadata] ensureAgentMaps: processing ${metadata.agents.length} agents`); - for (const agent2 of metadata.agents) { - if (agent2.name) { - _agentsByName.set(agent2.name, agent2); - } - if (agent2.agentId) { - _agentsByAgentId.set(agent2.agentId, agent2); - } - if (agent2.evals && agent2.evals.length > 0) { - const evalsByName = new Map; - for (const evalMeta of agent2.evals) { - if (evalMeta.name) { - evalsByName.set(evalMeta.name, evalMeta); - internal.info(`[metadata] Indexed eval: agent='${agent2.name}' eval='${evalMeta.name}' identifier='${evalMeta.identifier}'`); - } - } - if (agent2.name) { - _evalsByAgentName.set(agent2.name, evalsByName); - } - if (agent2.agentId) { - _evalsByAgentId.set(agent2.agentId, evalsByName); - } - } else { - internal.info(`[metadata] Agent '${agent2.name}' has no evals`); - } - } - internal.info(`[metadata] Eval maps built: ${_evalsByAgentName?.size ?? 0} agents with evals`); -} -function getAgentMetadataByName(agentName) { - ensureAgentMaps(); - if (_agentsByName?.size === 0 && !_agentReloadAttempted) { - _agentReloadAttempted = true; - internal.info(`[metadata] getAgentMetadataByName: agent map is empty, attempting cache clear and reload`); - clearMetadataCache(); - ensureAgentMaps(); - internal.info(`[metadata] getAgentMetadataByName: after reload, agent map size: ${_agentsByName?.size ?? 0}`); - } - return _agentsByName?.get(agentName); -} -function getAgentMetadataByAgentId(agentId) { - ensureAgentMaps(); - return _agentsByAgentId?.get(agentId); -} -function getEvalMetadata(agentName, evalName) { - ensureAgentMaps(); - if (_evalsByAgentName?.size === 0 && !_evalReloadAttempted) { - _evalReloadAttempted = true; - internal.info(`[metadata] getEvalMetadata: eval map is empty, attempting cache clear and reload`); - clearMetadataCache(); - ensureAgentMaps(); - internal.info(`[metadata] getEvalMetadata: after reload, eval map size: ${_evalsByAgentName?.size ?? 0}`); - } - const agentEvals = _evalsByAgentName?.get(agentName); - internal.info(`[metadata] getEvalMetadata('${agentName}', '${evalName}'): agentEvals=${agentEvals ? `Map(${agentEvals.size})` : "undefined"}`); - if (agentEvals) { - internal.info(`[metadata] Available evals for agent '${agentName}': [${[...agentEvals.keys()].join(", ")}]`); - } - if (!agentEvals) { - internal.info(`[metadata] Available agents in eval map: [${[..._evalsByAgentName?.keys() ?? []].join(", ")}]`); - } - const result = agentEvals?.get(evalName); - internal.info(`[metadata] getEvalMetadata result: ${result ? `found identifier=${result.identifier}` : "not found"}`); - return result; -} -function hasMetadata() { - return loadBuildMetadata() !== undefined; -} -async function ensureAgentsImported() { - if (_agentsImported) { - return; - } - const metadata = loadBuildMetadata(); - if (!metadata?.agents?.length) { - _agentsImported = true; - return; - } - internal.info("[metadata] ensureAgentsImported: importing %d agents", metadata.agents.length); - for (const agent2 of metadata.agents) { - if (!agent2.filename) { - continue; - } - try { - const absolutePath = join5(process.cwd(), agent2.filename); - internal.info("[metadata] importing agent: %s from %s", agent2.name, absolutePath); - await import(absolutePath); - } catch (err) { - internal.info("[metadata] failed to import agent %s: %s", agent2.name, err); - } - } - _agentsImported = true; -} -function clearMetadataCache() { - internal.info("[metadata] clearMetadataCache: clearing all caches"); - _metadataCache = null; - _agentsByName = null; - _agentsByAgentId = null; - _evalsByAgentName = null; - _evalsByAgentId = null; -} -var _metadataCache = null, _agentsByName = null, _agentsByAgentId = null, _evalsByAgentName = null, _evalsByAgentId = null, _evalReloadAttempted = false, _agentReloadAttempted = false, _agentsImported = false; -var init__metadata = __esm(() => { - init_internal(); -}); - -// ../../../../packages/runtime/dist/agent.js -function getGlobalRuntimeState() { - return { - agents, - agentConfigs, - agentEventListeners - }; -} -function getAgentRuntime(ctx) { - return ctx[AGENT_RUNTIME]; -} -async function fireAgentEvent(runtime, agent2, eventName, context5, data) { - const listeners = runtime.agentEventListeners.get(agent2); - if (listeners) { - const callbacks = listeners.get(eventName); - if (callbacks && callbacks.size > 0) { - for (const callback of callbacks) { - try { - if (eventName === "errored" && data) { - await callback(eventName, agent2, context5, data); - } else if (eventName === "started" || eventName === "completed") { - await callback(eventName, agent2, context5); - } - } catch (error48) { - internal.error(`Error in agent event listener for '${eventName}':`, error48); - } - } - } - } - if (eventName === "errored" && data) { - await fireEvent("agent.errored", agent2, context5, data); - } else if (eventName === "started") { - await fireEvent("agent.started", agent2, context5); - } else if (eventName === "completed") { - await fireEvent("agent.completed", agent2, context5); - } -} -function createAgent(name, config2) { - const inputSchema = config2.schema?.input; - const outputSchema = config2.schema?.output; - const evalsArray = []; - const handler = async (input) => { - let validatedInput = undefined; - if (inputSchema) { - const inputResult = await inputSchema["~standard"].validate(input); - if (inputResult.issues) { - throw new ValidationError2({ - issues: inputResult.issues, - message: `Input validation failed: ${inputResult.issues.map((i) => i.message).join(", ")}` - }); - } - validatedInput = inputResult.value; - } - const agentCtx = getAgentContext(); - agentCtx[CURRENT_AGENT] = agent2; - agentCtx.current = agent2.metadata; - const attrs = { - "@agentuity/agentId": agent2.metadata.id, - "@agentuity/agentInstanceId": agent2.metadata.agentId, - "@agentuity/agentDescription": agent2.metadata.description, - "@agentuity/agentName": agent2.metadata.name, - "@agentuity/threadId": agentCtx.thread.id - }; - const activeSpan = import_api30.trace.getActiveSpan(); - if (activeSpan) { - activeSpan.setAttributes(attrs); - } - if (inHTTPContext()) { - const honoCtx = privateContext(getHTTPContext()); - if (honoCtx.var.agentIds) { - if (agent2.metadata.id) - honoCtx.var.agentIds.add(agent2.metadata.id); - if (agent2.metadata.agentId) - honoCtx.var.agentIds.add(agent2.metadata.agentId); - } - } else { - const agentIds = agentCtx[AGENT_IDS]; - if (agentIds) { - if (agent2.metadata.id) - agentIds.add(agent2.metadata.id); - if (agent2.metadata.agentId) - agentIds.add(agent2.metadata.agentId); - } - } - agentCtx.logger = agentCtx.logger.child(attrs); - const runtime = getAgentRuntime(agentCtx); - await fireAgentEvent(runtime, agent2, "started", agentCtx); - try { - const result = await (async () => { - if (agentCtx.tracer && inHTTPContext()) { - const honoCtx = getHTTPContext(); - return runWithSpan(agentCtx.tracer, agent2, honoCtx, async () => inputSchema ? await config2.handler(agentCtx, validatedInput) : await config2.handler(agentCtx)); - } else { - return inputSchema ? await config2.handler(agentCtx, validatedInput) : await config2.handler(agentCtx); - } - })(); - let validatedOutput = result; - if (outputSchema && !config2.schema?.stream) { - const outputResult = await outputSchema["~standard"].validate(result); - if (outputResult.issues) { - throw new ValidationError2({ - issues: outputResult.issues, - message: `Output validation failed: ${outputResult.issues.map((i) => i.message).join(", ")}` - }); - } - validatedOutput = outputResult.value; - } - agentCtx.state.set("_evalInput", validatedInput); - agentCtx.state.set("_evalOutput", validatedOutput); - await fireAgentEvent(runtime, agent2, "completed", agentCtx); - return validatedOutput; - } catch (error48) { - await fireAgentEvent(runtime, agent2, "errored", agentCtx, error48); - throw error48; - } - }; - const createEval = (evalNameOrConfig, evalConfig) => { - if (typeof evalNameOrConfig !== "string" && "name" in evalNameOrConfig) { - const presetConfig = evalNameOrConfig; - const evalName2 = presetConfig.name; - internal.debug(`createEval called for agent "${name || "unknown"}": registering preset eval "${evalName2}"`); - const evalType2 = { - metadata: { - identifier: evalName2, - name: evalName2, - description: presetConfig.description || "" - }, - handler: presetConfig.handler - }; - if (inputSchema) { - evalType2.inputSchema = inputSchema; - } - if (outputSchema) { - evalType2.outputSchema = outputSchema; - } - evalsArray.push(evalType2); - internal.debug(`Added preset eval "${evalName2}" to agent "${name || "unknown"}". Total evals: ${evalsArray.length}`); - return evalType2; - } - if (typeof evalNameOrConfig !== "string" || !evalConfig) { - throw new Error("Invalid arguments: expected (name: string, config) or (config: PresetEvalConfig)"); - } - const evalName = evalNameOrConfig; - internal.debug(`createEval called for agent "${name || "unknown"}": registering eval "${evalName}"`); - const evalMetadata = evalConfig.metadata || {}; - const evalType = { - metadata: { - id: evalMetadata.id || undefined, - identifier: evalMetadata.identifier || undefined, - version: evalMetadata.version || undefined, - filename: evalMetadata.filename || "", - name: evalName, - description: evalConfig.description || "" - }, - handler: evalConfig.handler - }; - if (inputSchema) { - evalType.inputSchema = inputSchema; - } - if (outputSchema) { - evalType.outputSchema = outputSchema; - } - evalsArray.push(evalType); - internal.debug(`Added eval "${evalName}" to agent "${name || "unknown"}". Total evals: ${evalsArray.length}`); - return evalType; - }; - let metadata = { - name, - description: config2.description, - id: "", - agentId: "", - filename: "", - version: "", - inputSchemaCode: "", - outputSchemaCode: "", - ...config2.metadata - }; - if (!metadata.id || !metadata.agentId) { - const fileMetadata = getAgentMetadataByName(name); - if (fileMetadata) { - internal.info('[agent] loaded metadata for "%s" from file: id=%s, agentId=%s', name, fileMetadata.id, fileMetadata.agentId); - metadata = { - ...metadata, - id: fileMetadata.id || metadata.id, - agentId: fileMetadata.agentId || metadata.agentId, - filename: fileMetadata.filename || metadata.filename, - version: fileMetadata.version || metadata.version - }; - } - } - if (!metadata.id && !metadata.agentId && getProjectId()) { - throw new Error(`Agent "${name}" has no metadata IDs (id and agentId are empty). ` + `This will result in empty agent_ids in session events. ` + `Ensure agentuity.metadata.json exists in the runtime directory ` + `(checked: ${process.cwd()}/agentuity.metadata.json and ${process.cwd()}/.agentuity/agentuity.metadata.json). ` + `Run 'agentuity build' to generate the metadata file.`); - } - const agent2 = { - handler, - metadata, - evals: evalsArray, - createEval, - setup: config2.setup, - shutdown: config2.shutdown - }; - agent2.addEventListener = (eventName, callback) => { - const agentForListeners = agent2; - const callbackForListeners = callback; - let listeners = agentEventListeners.get(agentForListeners); - if (!listeners) { - listeners = new Map; - agentEventListeners.set(agentForListeners, listeners); - } - let callbacks = listeners.get(eventName); - if (!callbacks) { - callbacks = new Set; - listeners.set(eventName, callbacks); - } - callbacks.add(callbackForListeners); - }; - agent2.addEventListener("completed", async (_event, _agent, ctx) => { - const agentEvals = _agent?.evals || evalsArray; - internal.debug(`Checking evals: agent=${_agent.metadata?.name}, evalsArray.length=${evalsArray?.length || 0}, agent.evals.length=${_agent?.evals?.length || 0}`); - if (agentEvals && agentEvals.length > 0) { - internal.info(`Executing ${agentEvals.length} eval(s) after agent run`); - const validatedInput = ctx.state.get("_evalInput"); - const validatedOutput = ctx.state.get("_evalOutput"); - let agentRunSpanId; - try { - const httpCtx = getHTTPContext(); - const _httpCtx = privateContext(httpCtx); - agentRunSpanId = _httpCtx.var.agentRunSpanId; - } catch {} - for (const evalItem of agentEvals) { - const evalName = evalItem.metadata.name || "unnamed"; - const agentName = _agent?.metadata?.name || name; - ctx.waitUntil((async () => { - internal.info(`[EVALRUN] Starting eval run tracking for '${evalName}'`); - const evalRunId = generateId("evalrun"); - internal.info(`[EVALRUN] Looking up eval metadata: agentName='${agentName}', evalName='${evalName}'`); - const evalMeta = getEvalMetadata(agentName, evalName); - internal.info(`[EVALRUN] Eval metadata lookup result:`, { - found: !!evalMeta, - identifier: evalMeta?.identifier, - id: evalMeta?.id, - filename: evalMeta?.filename - }); - const evalId = evalMeta?.id || ""; - const evalIdentifier = evalMeta?.identifier || ""; - internal.info(`[EVALRUN] Resolved evalId='${evalId}', evalIdentifier='${evalIdentifier}'`); - ctx.logger.debug("Starting eval run with metadata", { - evalName, - agentName, - evalRunId, - evalId, - evalMetaFromFile: !!evalMeta, - evalMetadata: evalItem.metadata - }); - const activeSpan = ctx.tracer ? import_api30.trace.getActiveSpan() : undefined; - if (activeSpan) { - activeSpan.setAttributes({ - "eval.name": evalName, - "eval.id": evalId, - "eval.runId": evalRunId, - "eval.description": evalMeta?.description || evalItem.metadata.description || "", - "eval.filename": evalMeta?.filename || evalItem.metadata.filename || "" - }); - } - const orgId = getOrganizationId(); - const projectId = getProjectId(); - const devMode = isDevMode() ?? false; - const evalRunEventProvider = getEvalRunEventProvider(); - const shouldSendEvalRunEvents = orgId && projectId && evalId !== "" && evalIdentifier !== ""; - internal.info(`[EVALRUN] Checking conditions for eval '${evalName}':`, { - orgId, - projectId, - evalId, - evalIdentifier, - devMode, - hasEvalRunEventProvider: !!evalRunEventProvider, - shouldSendEvalRunEvents - }); - if (!shouldSendEvalRunEvents) { - const reasons = []; - if (!orgId) - reasons.push("missing orgId"); - if (!projectId) - reasons.push("missing projectId"); - if (!evalId || evalId === "") - reasons.push("empty evalId"); - if (!evalIdentifier || evalIdentifier === "") - reasons.push("empty evalIdentifier"); - internal.info(`[EVALRUN] Skipping eval run events for '${evalName}': ${reasons.join(", ")}`); - } - try { - internal.debug(`Executing eval: ${evalName}`); - if (shouldSendEvalRunEvents && evalRunEventProvider) { - internal.info(`[EVALRUN] Sending start event for eval '${evalName}' (id: ${evalRunId}, evalId: ${evalId})`); - try { - const deploymentId = getDeploymentId(); - if (!agentRunSpanId) { - internal.warn(`[EVALRUN] agentRunSpanId not available for eval '${evalName}' (id: ${evalRunId}). This may occur if waitUntil runs outside AsyncLocalStorage context.`); - } - const startEvent = { - id: evalRunId, - sessionId: ctx.sessionId, - evalId, - evalIdentifier, - orgId, - projectId, - devmode: Boolean(devMode), - deploymentId: deploymentId || undefined, - spanId: agentRunSpanId - }; - internal.debug("[EVALRUN] Start event payload: %s", JSON.stringify(startEvent, null, 2)); - await evalRunEventProvider.start(startEvent); - internal.info(`[EVALRUN] Start event sent successfully for eval '${evalName}' (id: ${evalRunId})`); - } catch (error48) { - internal.error(`[EVALRUN] Error sending eval run start event for '${evalName}' (id: ${evalRunId})`, { - error: error48 - }); - } - } else if (shouldSendEvalRunEvents && !evalRunEventProvider) { - internal.warn(`[EVALRUN] Conditions met but no evalRunEventProvider available for '${evalName}'`); - } else { - internal.debug(`[EVALRUN] Not sending start event for '${evalName}': shouldSendEvalRunEvents=${shouldSendEvalRunEvents}, hasProvider=${!!evalRunEventProvider}`); - } - let evalValidatedInput = validatedInput; - if (evalItem.inputSchema) { - const evalInputResult = await evalItem.inputSchema["~standard"].validate(validatedInput); - if (evalInputResult.issues) { - throw new ValidationError2({ - issues: evalInputResult.issues, - message: `Eval input validation failed: ${evalInputResult.issues.map((i) => i.message).join(", ")}` - }); - } - evalValidatedInput = evalInputResult.value; - } - let evalValidatedOutput = validatedOutput; - if (evalItem.outputSchema) { - const evalOutputResult = await evalItem.outputSchema["~standard"].validate(validatedOutput); - if (evalOutputResult.issues) { - throw new ValidationError2({ - issues: evalOutputResult.issues, - message: `Eval output validation failed: ${evalOutputResult.issues.map((i) => i.message).join(", ")}` - }); - } - evalValidatedOutput = evalOutputResult.value; - } - const evalContext = ctx; - let handlerResult; - if (inputSchema && outputSchema) { - handlerResult = await evalItem.handler(evalContext, evalValidatedInput, evalValidatedOutput); - } else if (inputSchema) { - handlerResult = await evalItem.handler(evalContext, evalValidatedInput); - } else if (outputSchema) { - handlerResult = await evalItem.handler(evalContext, evalValidatedOutput); - } else { - handlerResult = await evalItem.handler(evalContext); - } - const result = { - success: true, - ...handlerResult - }; - if (result.score !== undefined) { - internal.info(`Eval '${evalName}' pass: ${result.passed}, score: ${result.score}`, result.metadata); - } else { - internal.info(`Eval '${evalName}' pass: ${result.passed}`, result.metadata); - } - if (shouldSendEvalRunEvents && evalRunEventProvider) { - internal.info(`[EVALRUN] Sending complete event for eval '${evalName}' (id: ${evalRunId})`); - try { - await evalRunEventProvider.complete({ - id: evalRunId, - result - }); - internal.info(`[EVALRUN] Complete event sent successfully for eval '${evalName}' (id: ${evalRunId})`); - } catch (error48) { - internal.error(`[EVALRUN] Error sending eval run complete event for '${evalName}' (id: ${evalRunId})`, { - error: error48 - }); - } - } - internal.debug(`Eval '${evalName}' completed successfully`); - } catch (error48) { - const errorMessage = error48 instanceof Error ? error48.message : String(error48); - internal.error(`Error executing eval '${evalName}'`, { error: error48 }); - if (shouldSendEvalRunEvents && evalRunEventProvider) { - internal.info(`[EVALRUN] Sending complete event (error) for eval '${evalName}' (id: ${evalRunId})`); - try { - await evalRunEventProvider.complete({ - id: evalRunId, - error: errorMessage, - result: { - success: false, - passed: false, - error: errorMessage, - metadata: {} - } - }); - internal.info(`[EVALRUN] Complete event (error) sent successfully for eval '${evalName}' (id: ${evalRunId})`); - } catch (eventError) { - internal.error(`[EVALRUN] Error sending eval run complete event (error) for '${evalName}' (id: ${evalRunId})`, { error: eventError }); - } - } - } - })()); - } - } - }); - agent2.removeEventListener = (eventName, callback) => { - const agentForListeners = agent2; - const callbackForListeners = callback; - const listeners = agentEventListeners.get(agentForListeners); - if (!listeners) - return; - const callbacks = listeners.get(eventName); - if (!callbacks) - return; - callbacks.delete(callbackForListeners); - }; - if (inputSchema) { - agent2.inputSchema = inputSchema; - } - if (outputSchema) { - agent2.outputSchema = outputSchema; - } - if (config2.schema?.stream) { - agent2.stream = config2.schema.stream; - } - agent2.validator = (override) => { - const effectiveInputSchema = override?.input ?? inputSchema; - const effectiveOutputSchema = override ? override.output : outputSchema; - const buildInputValidator = (schema) => validator("json", async (value, c) => { - if (schema) { - const result = await validateSchema(schema, value); - if (!result.success) { - return c.json({ - error: "Validation failed", - message: formatValidationIssues(result.issues), - issues: result.issues - }, 400); - } - return result.data; - } - return value; - }); - if (!effectiveOutputSchema) { - return buildInputValidator(effectiveInputSchema); - } - const outputValidator = async (c, next) => { - await next(); - const res = c.res; - if (!res) - return; - if (config2.schema?.stream) { - return; - } - const contentType = res.headers.get("Content-Type") ?? ""; - if (!contentType.toLowerCase().includes("application/json")) { - return; - } - let responseBody; - try { - const cloned = res.clone(); - responseBody = await cloned.json(); - } catch { - const OutputValidationError = StructuredError("OutputValidationError")(); - throw new OutputValidationError({ - message: "Output validation failed: response is not valid JSON", - issues: [] - }); - } - const result = await validateSchema(effectiveOutputSchema, responseBody); - if (!result.success) { - const OutputValidationError = StructuredError("OutputValidationError")(); - throw new OutputValidationError({ - message: `Output validation failed: ${formatValidationIssues(result.issues)}`, - issues: result.issues - }); - } - c.res = new Response(JSON.stringify(result.data), { - status: res.status, - headers: res.headers - }); - }; - if (!effectiveInputSchema) { - return outputValidator; - } - const inputMiddleware = buildInputValidator(effectiveInputSchema); - const composed = async (c, next) => { - const result = await inputMiddleware(c, async () => { - await outputValidator(c, next); - }); - return result; - }; - return composed; - }; - agents.set(name, agent2); - const runner = { - metadata, - validator: agent2.validator, - inputSchema, - outputSchema, - stream: config2.schema?.stream || false, - createEval, - addEventListener: agent2.addEventListener, - removeEventListener: agent2.removeEventListener, - run: inputSchema ? async (input) => { - return await agent2.handler(input); - } : async () => { - return await agent2.handler(); - }, - [INTERNAL_AGENT]: agent2 - }; - return runner; -} -var import_api30, agents, agentEventListeners, agentConfigs, setAgentConfig = (name, config2) => { - agentConfigs.set(name, config2); -}, getAgentConfig = (name) => { - return agentConfigs.get(name); -}, ValidationError2, runWithSpan = async (tracer, agent2, ctx, handler) => { - const currentContext = import_api30.context.active(); - const span = tracer.startSpan("agent.run", {}, currentContext); - span.setAttributes({ - "@agentuity/agentId": agent2.metadata.id, - "@agentuity/agentInstanceId": agent2.metadata.agentId, - "@agentuity/agentDescription": agent2.metadata.description, - "@agentuity/agentName": agent2.metadata.name, - "@agentuity/threadId": ctx.var.thread.id - }); - const spanId = span.spanContext().spanId; - const _ctx = privateContext(ctx); - _ctx.set("agentRunSpanId", spanId); - try { - const spanContext = import_api30.trace.setSpan(currentContext, span); - return await import_api30.context.with(spanContext, handler); - } catch (error48) { - span.recordException(error48); - span.setStatus({ code: import_api30.SpanStatusCode.ERROR }); - throw error48; - } finally { - span.end(); - } -}, createAgentRunner = (agent2, ctx) => { - const tracer = ctx.var.tracer; - if (agent2.inputSchema) { - return { - metadata: agent2.metadata, - run: async (input) => { - return runWithSpan(tracer, agent2, ctx, async () => await agent2.handler(input)); - } - }; - } else { - return { - metadata: agent2.metadata, - run: async () => { - return runWithSpan(tracer, agent2, ctx, async () => await agent2.handler()); - } - }; - } -}, populateAgentsRegistry = (ctx) => { - const agentsObj = {}; - const ownershipMap = new Map; - for (const [name, agentFn] of agents) { - const runner = createAgentRunner(agentFn, ctx); - const key = toCamelCase(name); - if (!key) { - internal.warn(`Agent name "${name}" converts to empty camelCase key. Skipping.`); - continue; - } - const existingOwner = ownershipMap.get(key); - if (existingOwner && existingOwner !== name) { - internal.error(`Agent registry collision: "${name}" conflicts with "${existingOwner}" (both map to camelCase key "${key}")`); - throw new Error(`Agent registry collision detected for key "${key}"`); - } - agentsObj[key] = runner; - ownershipMap.set(key, name); - } - return agentsObj; -}, createAgentMiddleware = (agentName) => { - return async (ctx, next) => { - const agentsObj = populateAgentsRegistry(ctx); - if (agentName) { - const agentKey = toCamelCase(agentName); - const agent2 = agentsObj[agentKey]; - const _ctx = privateContext(ctx); - if (agent2?.metadata?.id) { - _ctx.var.agentIds.add(agent2.metadata.id); - } - if (agent2?.metadata?.agentId) { - _ctx.var.agentIds.add(agent2.metadata.agentId); - } - } - const sessionId = ctx.var.sessionId; - const thread3 = ctx.var.thread; - const session3 = ctx.var.session; - const config2 = agentName ? getAgentConfig(agentName) : undefined; - const app = ctx.var.app; - const args = { - agent: agentsObj, - logger: ctx.var.logger, - tracer: ctx.var.tracer, - sessionId, - session: session3, - thread: thread3, - handler: ctx.var.waitUntilHandler, - config: config2 || {}, - app: app || {}, - runtime: getGlobalRuntimeState(), - auth: ctx.var.auth ?? null - }; - return setupRequestAgentContext(ctx, args, next); - }; -}, getAgents = () => agents, runAgentSetups = async (appState) => { - for (const [name, agent2] of agents.entries()) { - if (agent2.setup) { - const config2 = await agent2.setup(appState); - setAgentConfig(name, config2); - } - } -}; -var init_agent2 = __esm(() => { - init_dist(); - init_validator2(); - init__config(); - init__context(); - init_internal(); - init__events(); - init__server(); - init_session4(); - init__services(); - init__config(); - init__metadata(); - import_api30 = __toESM(require_src(), 1); - agents = new Map; - agentEventListeners = new WeakMap; - agentConfigs = new Map; - ValidationError2 = StructuredError("ValidationError")(); -}); - -// ../../../../packages/runtime/dist/cors.js -function safeOrigin(url2) { - if (!url2) - return; - try { - return new URL(url2).origin; - } catch { - return; - } -} -function parseOriginLike(value) { - const trimmed = value.trim(); - if (!trimmed) - return; - if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(trimmed)) { - return safeOrigin(trimmed); - } - return safeOrigin(`https://${trimmed}`); -} -function buildEnvTrustedOrigins() { - const agentuityURL = process.env.AGENTUITY_BASE_URL; - const cloudDomains = process.env.AGENTUITY_CLOUD_DOMAINS; - const devTrustedDomains = process.env.AUTH_TRUSTED_DOMAINS; - const origins = new Set; - const agentuityOrigin = safeOrigin(agentuityURL); - if (agentuityOrigin) - origins.add(agentuityOrigin); - if (cloudDomains) { - for (const raw2 of cloudDomains.split(",")) { - const origin = parseOriginLike(raw2); - if (origin) - origins.add(origin); - } - } - if (devTrustedDomains) { - for (const raw2 of devTrustedDomains.split(",")) { - const origin = parseOriginLike(raw2); - if (origin) - origins.add(origin); - } - } - return origins; -} -function createTrustedCorsOrigin(options) { - const baseOrigins = buildEnvTrustedOrigins(); - if (options?.allowedOrigins) { - for (const raw2 of options.allowedOrigins) { - const origin = parseOriginLike(raw2); - if (origin) - baseOrigins.add(origin); - } - } - return (origin, c) => { - const allowed = new Set(baseOrigins); - const requestOrigin = safeOrigin(c.req.url); - if (requestOrigin) - allowed.add(requestOrigin); - return allowed.has(origin) ? origin : undefined; - }; -} - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/factory/index.js -var Factory = class { - initApp; - #defaultAppOptions; - constructor(init2) { - this.initApp = init2?.initApp; - this.#defaultAppOptions = init2?.defaultAppOptions; - } - createApp = (options) => { - const app = new Hono2(options && this.#defaultAppOptions ? { ...this.#defaultAppOptions, ...options } : options ?? this.#defaultAppOptions); - if (this.initApp) { - this.initApp(app); - } - return app; - }; - createMiddleware = (middleware) => middleware; - createHandlers = (...handlers) => { - return handlers.filter((handler) => handler !== undefined); - }; -}, createMiddleware = (middleware) => middleware; -var init_factory = __esm(() => { - init_hono(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/middleware/cors/index.js -var cors = (options) => { - const defaults = { - origin: "*", - allowMethods: ["GET", "HEAD", "PUT", "POST", "DELETE", "PATCH"], - allowHeaders: [], - exposeHeaders: [] - }; - const opts = { - ...defaults, - ...options - }; - const findAllowOrigin = ((optsOrigin) => { - if (typeof optsOrigin === "string") { - if (optsOrigin === "*") { - return () => optsOrigin; - } else { - return (origin) => optsOrigin === origin ? origin : null; - } - } else if (typeof optsOrigin === "function") { - return optsOrigin; - } else { - return (origin) => optsOrigin.includes(origin) ? origin : null; - } - })(opts.origin); - const findAllowMethods = ((optsAllowMethods) => { - if (typeof optsAllowMethods === "function") { - return optsAllowMethods; - } else if (Array.isArray(optsAllowMethods)) { - return () => optsAllowMethods; - } else { - return () => []; - } - })(opts.allowMethods); - return async function cors2(c, next) { - function set2(key, value) { - c.res.headers.set(key, value); - } - const allowOrigin = await findAllowOrigin(c.req.header("origin") || "", c); - if (allowOrigin) { - set2("Access-Control-Allow-Origin", allowOrigin); - } - if (opts.credentials) { - set2("Access-Control-Allow-Credentials", "true"); - } - if (opts.exposeHeaders?.length) { - set2("Access-Control-Expose-Headers", opts.exposeHeaders.join(",")); - } - if (c.req.method === "OPTIONS") { - if (opts.origin !== "*") { - set2("Vary", "Origin"); - } - if (opts.maxAge != null) { - set2("Access-Control-Max-Age", opts.maxAge.toString()); - } - const allowMethods = await findAllowMethods(c.req.header("origin") || "", c); - if (allowMethods.length) { - set2("Access-Control-Allow-Methods", allowMethods.join(",")); - } - let headers = opts.allowHeaders; - if (!headers?.length) { - const requestHeaders = c.req.header("Access-Control-Request-Headers"); - if (requestHeaders) { - headers = requestHeaders.split(/\s*,\s*/); - } - } - if (headers?.length) { - set2("Access-Control-Allow-Headers", headers.join(",")); - c.res.headers.append("Vary", "Access-Control-Request-Headers"); - } - c.res.headers.delete("Content-Length"); - c.res.headers.delete("Content-Type"); - return new Response(null, { - headers: c.res.headers, - status: 204, - statusText: "No Content" - }); - } - await next(); - if (opts.origin !== "*") { - c.header("Vary", "Origin", { append: true }); - } - }; -}; -var init_cors = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/compress.js -var COMPRESSIBLE_CONTENT_TYPE_REGEX; -var init_compress = __esm(() => { - COMPRESSIBLE_CONTENT_TYPE_REGEX = /^\s*(?:text\/(?!event-stream(?:[;\s]|$))[^;\s]+|application\/(?:javascript|json|xml|xml-dtd|ecmascript|dart|postscript|rtf|tar|toml|vnd\.dart|vnd\.ms-fontobject|vnd\.ms-opentype|wasm|x-httpd-php|x-javascript|x-ns-proxy-autoconfig|x-sh|x-tar|x-virtualbox-hdd|x-virtualbox-ova|x-virtualbox-ovf|x-virtualbox-vbox|x-virtualbox-vdi|x-virtualbox-vhd|x-virtualbox-vmdk|x-www-form-urlencoded)|font\/(?:otf|ttf)|image\/(?:bmp|vnd\.adobe\.photoshop|vnd\.microsoft\.icon|vnd\.ms-dds|x-icon|x-ms-bmp)|message\/rfc822|model\/gltf-binary|x-shader\/x-fragment|x-shader\/x-vertex|[^;\s]+?\+(?:json|text|xml|yaml))(?:[;\s]|$)/i; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/middleware/compress/index.js -var ENCODING_TYPES, cacheControlNoTransformRegExp, compress = (options) => { - const threshold = options?.threshold ?? 1024; - return async function compress2(ctx, next) { - await next(); - const contentLength = ctx.res.headers.get("Content-Length"); - if (ctx.res.headers.has("Content-Encoding") || ctx.res.headers.has("Transfer-Encoding") || ctx.req.method === "HEAD" || contentLength && Number(contentLength) < threshold || !shouldCompress(ctx.res) || !shouldTransform(ctx.res)) { - return; - } - const accepted = ctx.req.header("Accept-Encoding"); - const encoding = options?.encoding ?? ENCODING_TYPES.find((encoding2) => accepted?.includes(encoding2)); - if (!encoding || !ctx.res.body) { - return; - } - const stream2 = new CompressionStream(encoding); - ctx.res = new Response(ctx.res.body.pipeThrough(stream2), ctx.res); - ctx.res.headers.delete("Content-Length"); - ctx.res.headers.set("Content-Encoding", encoding); - }; -}, shouldCompress = (res) => { - const type = res.headers.get("Content-Type"); - return type && COMPRESSIBLE_CONTENT_TYPE_REGEX.test(type); -}, shouldTransform = (res) => { - const cacheControl = res.headers.get("Cache-Control"); - return !cacheControl || !cacheControlNoTransformRegExp.test(cacheControl); -}; -var init_compress2 = __esm(() => { - init_compress(); - ENCODING_TYPES = ["gzip", "deflate"]; - cacheControlNoTransformRegExp = /(?:^|,)\s*?no-transform\s*?(?:,|$)/i; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/suppress-tracing.js -var require_suppress_tracing = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isTracingSuppressed = exports.unsuppressTracing = exports.suppressTracing = undefined; - var api_1 = require_src(); - var SUPPRESS_TRACING_KEY = (0, api_1.createContextKey)("OpenTelemetry SDK Context Key SUPPRESS_TRACING"); - function suppressTracing(context5) { - return context5.setValue(SUPPRESS_TRACING_KEY, true); - } - exports.suppressTracing = suppressTracing; - function unsuppressTracing(context5) { - return context5.deleteValue(SUPPRESS_TRACING_KEY); - } - exports.unsuppressTracing = unsuppressTracing; - function isTracingSuppressed(context5) { - return context5.getValue(SUPPRESS_TRACING_KEY) === true; - } - exports.isTracingSuppressed = isTracingSuppressed; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/constants.js -var require_constants = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BAGGAGE_MAX_TOTAL_LENGTH = exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = exports.BAGGAGE_MAX_NAME_VALUE_PAIRS = exports.BAGGAGE_HEADER = exports.BAGGAGE_ITEMS_SEPARATOR = exports.BAGGAGE_PROPERTIES_SEPARATOR = exports.BAGGAGE_KEY_PAIR_SEPARATOR = undefined; - exports.BAGGAGE_KEY_PAIR_SEPARATOR = "="; - exports.BAGGAGE_PROPERTIES_SEPARATOR = ";"; - exports.BAGGAGE_ITEMS_SEPARATOR = ","; - exports.BAGGAGE_HEADER = "baggage"; - exports.BAGGAGE_MAX_NAME_VALUE_PAIRS = 180; - exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096; - exports.BAGGAGE_MAX_TOTAL_LENGTH = 8192; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/utils.js -var require_utils3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseKeyPairsIntoRecord = exports.parsePairKeyValue = exports.getKeyPairs = exports.serializeKeyPairs = undefined; - var api_1 = require_src(); - var constants_1 = require_constants(); - function serializeKeyPairs(keyPairs) { - return keyPairs.reduce((hValue, current) => { - const value = `${hValue}${hValue !== "" ? constants_1.BAGGAGE_ITEMS_SEPARATOR : ""}${current}`; - return value.length > constants_1.BAGGAGE_MAX_TOTAL_LENGTH ? hValue : value; - }, ""); - } - exports.serializeKeyPairs = serializeKeyPairs; - function getKeyPairs(baggage) { - return baggage.getAllEntries().map(([key, value]) => { - let entry = `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`; - if (value.metadata !== undefined) { - entry += constants_1.BAGGAGE_PROPERTIES_SEPARATOR + value.metadata.toString(); - } - return entry; - }); - } - exports.getKeyPairs = getKeyPairs; - function parsePairKeyValue(entry) { - if (!entry) - return; - const metadataSeparatorIndex = entry.indexOf(constants_1.BAGGAGE_PROPERTIES_SEPARATOR); - const keyPairPart = metadataSeparatorIndex === -1 ? entry : entry.substring(0, metadataSeparatorIndex); - const separatorIndex = keyPairPart.indexOf(constants_1.BAGGAGE_KEY_PAIR_SEPARATOR); - if (separatorIndex <= 0) - return; - const rawKey = keyPairPart.substring(0, separatorIndex).trim(); - const rawValue = keyPairPart.substring(separatorIndex + 1).trim(); - if (!rawKey || !rawValue) - return; - let key; - let value; - try { - key = decodeURIComponent(rawKey); - value = decodeURIComponent(rawValue); - } catch { - return; - } - let metadata; - if (metadataSeparatorIndex !== -1 && metadataSeparatorIndex < entry.length - 1) { - const metadataString = entry.substring(metadataSeparatorIndex + 1); - metadata = (0, api_1.baggageEntryMetadataFromString)(metadataString); - } - return { key, value, metadata }; - } - exports.parsePairKeyValue = parsePairKeyValue; - function parseKeyPairsIntoRecord(value) { - const result = {}; - if (typeof value === "string" && value.length > 0) { - value.split(constants_1.BAGGAGE_ITEMS_SEPARATOR).forEach((entry) => { - const keyPair = parsePairKeyValue(entry); - if (keyPair !== undefined && keyPair.value.length > 0) { - result[keyPair.key] = keyPair.value; - } - }); - } - return result; - } - exports.parseKeyPairsIntoRecord = parseKeyPairsIntoRecord; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/propagation/W3CBaggagePropagator.js -var require_W3CBaggagePropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.W3CBaggagePropagator = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing(); - var constants_1 = require_constants(); - var utils_1 = require_utils3(); - - class W3CBaggagePropagator { - inject(context5, carrier, setter) { - const baggage = api_1.propagation.getBaggage(context5); - if (!baggage || (0, suppress_tracing_1.isTracingSuppressed)(context5)) - return; - const keyPairs = (0, utils_1.getKeyPairs)(baggage).filter((pair) => { - return pair.length <= constants_1.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS; - }).slice(0, constants_1.BAGGAGE_MAX_NAME_VALUE_PAIRS); - const headerValue = (0, utils_1.serializeKeyPairs)(keyPairs); - if (headerValue.length > 0) { - setter.set(carrier, constants_1.BAGGAGE_HEADER, headerValue); - } - } - extract(context5, carrier, getter) { - const headerValue = getter.get(carrier, constants_1.BAGGAGE_HEADER); - const baggageString = Array.isArray(headerValue) ? headerValue.join(constants_1.BAGGAGE_ITEMS_SEPARATOR) : headerValue; - if (!baggageString) - return context5; - const baggage = {}; - if (baggageString.length === 0) { - return context5; - } - const pairs = baggageString.split(constants_1.BAGGAGE_ITEMS_SEPARATOR); - pairs.forEach((entry) => { - const keyPair = (0, utils_1.parsePairKeyValue)(entry); - if (keyPair) { - const baggageEntry = { value: keyPair.value }; - if (keyPair.metadata) { - baggageEntry.metadata = keyPair.metadata; - } - baggage[keyPair.key] = baggageEntry; - } - }); - if (Object.entries(baggage).length === 0) { - return context5; - } - return api_1.propagation.setBaggage(context5, api_1.propagation.createBaggage(baggage)); - } - fields() { - return [constants_1.BAGGAGE_HEADER]; - } - } - exports.W3CBaggagePropagator = W3CBaggagePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/anchored-clock.js -var require_anchored_clock = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AnchoredClock = undefined; - - class AnchoredClock { - _monotonicClock; - _epochMillis; - _performanceMillis; - constructor(systemClock, monotonicClock) { - this._monotonicClock = monotonicClock; - this._epochMillis = systemClock.now(); - this._performanceMillis = monotonicClock.now(); - } - now() { - const delta = this._monotonicClock.now() - this._performanceMillis; - return this._epochMillis + delta; - } - } - exports.AnchoredClock = AnchoredClock; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/attributes.js -var require_attributes = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isAttributeValue = exports.isAttributeKey = exports.sanitizeAttributes = undefined; - var api_1 = require_src(); - function sanitizeAttributes(attributes) { - const out = {}; - if (typeof attributes !== "object" || attributes == null) { - return out; - } - for (const key in attributes) { - if (!Object.prototype.hasOwnProperty.call(attributes, key)) { - continue; - } - if (!isAttributeKey(key)) { - api_1.diag.warn(`Invalid attribute key: ${key}`); - continue; - } - const val = attributes[key]; - if (!isAttributeValue(val)) { - api_1.diag.warn(`Invalid attribute value set for key: ${key}`); - continue; - } - if (Array.isArray(val)) { - out[key] = val.slice(); - } else { - out[key] = val; - } - } - return out; - } - exports.sanitizeAttributes = sanitizeAttributes; - function isAttributeKey(key) { - return typeof key === "string" && key !== ""; - } - exports.isAttributeKey = isAttributeKey; - function isAttributeValue(val) { - if (val == null) { - return true; - } - if (Array.isArray(val)) { - return isHomogeneousAttributeValueArray(val); - } - return isValidPrimitiveAttributeValueType(typeof val); - } - exports.isAttributeValue = isAttributeValue; - function isHomogeneousAttributeValueArray(arr) { - let type; - for (const element of arr) { - if (element == null) - continue; - const elementType = typeof element; - if (elementType === type) { - continue; - } - if (!type) { - if (isValidPrimitiveAttributeValueType(elementType)) { - type = elementType; - continue; - } - return false; - } - return false; - } - return true; - } - function isValidPrimitiveAttributeValueType(valType) { - switch (valType) { - case "number": - case "boolean": - case "string": - return true; - } - return false; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/logging-error-handler.js -var require_logging_error_handler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.loggingErrorHandler = undefined; - var api_1 = require_src(); - function loggingErrorHandler() { - return (ex) => { - api_1.diag.error(stringifyException(ex)); - }; - } - exports.loggingErrorHandler = loggingErrorHandler; - function stringifyException(ex) { - if (typeof ex === "string") { - return ex; - } else { - return JSON.stringify(flattenException(ex)); - } - } - function flattenException(ex) { - const result = {}; - let current = ex; - while (current !== null) { - Object.getOwnPropertyNames(current).forEach((propertyName) => { - if (result[propertyName]) - return; - const value = current[propertyName]; - if (value) { - result[propertyName] = String(value); - } - }); - current = Object.getPrototypeOf(current); - } - return result; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/global-error-handler.js -var require_global_error_handler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.globalErrorHandler = exports.setGlobalErrorHandler = undefined; - var logging_error_handler_1 = require_logging_error_handler(); - var delegateHandler = (0, logging_error_handler_1.loggingErrorHandler)(); - function setGlobalErrorHandler(handler) { - delegateHandler = handler; - } - exports.setGlobalErrorHandler = setGlobalErrorHandler; - function globalErrorHandler(ex) { - try { - delegateHandler(ex); - } catch {} - } - exports.globalErrorHandler = globalErrorHandler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/environment.js -var require_environment = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getStringListFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = exports.getNumberFromEnv = undefined; - var api_1 = require_src(); - var util_1 = __require("util"); - function getNumberFromEnv(key) { - const raw2 = process.env[key]; - if (raw2 == null || raw2.trim() === "") { - return; - } - const value = Number(raw2); - if (isNaN(value)) { - api_1.diag.warn(`Unknown value ${(0, util_1.inspect)(raw2)} for ${key}, expected a number, using defaults`); - return; - } - return value; - } - exports.getNumberFromEnv = getNumberFromEnv; - function getStringFromEnv(key) { - const raw2 = process.env[key]; - if (raw2 == null || raw2.trim() === "") { - return; - } - return raw2; - } - exports.getStringFromEnv = getStringFromEnv; - function getBooleanFromEnv(key) { - const raw2 = process.env[key]?.trim().toLowerCase(); - if (raw2 == null || raw2 === "") { - return false; - } - if (raw2 === "true") { - return true; - } else if (raw2 === "false") { - return false; - } else { - api_1.diag.warn(`Unknown value ${(0, util_1.inspect)(raw2)} for ${key}, expected 'true' or 'false', falling back to 'false' (default)`); - return false; - } - } - exports.getBooleanFromEnv = getBooleanFromEnv; - function getStringListFromEnv(key) { - return getStringFromEnv(key)?.split(",").map((v) => v.trim()).filter((s2) => s2 !== ""); - } - exports.getStringListFromEnv = getStringListFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/globalThis.js -var require_globalThis2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - exports._globalThis = globalThis; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/version.js -var require_version2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "2.3.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/internal/utils.js -var require_utils4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createConstMap = undefined; - function createConstMap(values) { - let res = {}; - const len = values.length; - for (let lp = 0;lp < len; lp++) { - const val = values[lp]; - if (val) { - res[String(val).toUpperCase().replace(/[-.]/g, "_")] = val; - } - } - return res; - } - exports.createConstMap = createConstMap; -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/trace/SemanticAttributes.js -var require_SemanticAttributes2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SEMATTRS_NET_HOST_CARRIER_ICC = exports.SEMATTRS_NET_HOST_CARRIER_MNC = exports.SEMATTRS_NET_HOST_CARRIER_MCC = exports.SEMATTRS_NET_HOST_CARRIER_NAME = exports.SEMATTRS_NET_HOST_CONNECTION_SUBTYPE = exports.SEMATTRS_NET_HOST_CONNECTION_TYPE = exports.SEMATTRS_NET_HOST_NAME = exports.SEMATTRS_NET_HOST_PORT = exports.SEMATTRS_NET_HOST_IP = exports.SEMATTRS_NET_PEER_NAME = exports.SEMATTRS_NET_PEER_PORT = exports.SEMATTRS_NET_PEER_IP = exports.SEMATTRS_NET_TRANSPORT = exports.SEMATTRS_FAAS_INVOKED_REGION = exports.SEMATTRS_FAAS_INVOKED_PROVIDER = exports.SEMATTRS_FAAS_INVOKED_NAME = exports.SEMATTRS_FAAS_COLDSTART = exports.SEMATTRS_FAAS_CRON = exports.SEMATTRS_FAAS_TIME = exports.SEMATTRS_FAAS_DOCUMENT_NAME = exports.SEMATTRS_FAAS_DOCUMENT_TIME = exports.SEMATTRS_FAAS_DOCUMENT_OPERATION = exports.SEMATTRS_FAAS_DOCUMENT_COLLECTION = exports.SEMATTRS_FAAS_EXECUTION = exports.SEMATTRS_FAAS_TRIGGER = exports.SEMATTRS_EXCEPTION_ESCAPED = exports.SEMATTRS_EXCEPTION_STACKTRACE = exports.SEMATTRS_EXCEPTION_MESSAGE = exports.SEMATTRS_EXCEPTION_TYPE = exports.SEMATTRS_DB_SQL_TABLE = exports.SEMATTRS_DB_MONGODB_COLLECTION = exports.SEMATTRS_DB_REDIS_DATABASE_INDEX = exports.SEMATTRS_DB_HBASE_NAMESPACE = exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_DC = exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_ID = exports.SEMATTRS_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT = exports.SEMATTRS_DB_CASSANDRA_IDEMPOTENCE = exports.SEMATTRS_DB_CASSANDRA_TABLE = exports.SEMATTRS_DB_CASSANDRA_CONSISTENCY_LEVEL = exports.SEMATTRS_DB_CASSANDRA_PAGE_SIZE = exports.SEMATTRS_DB_CASSANDRA_KEYSPACE = exports.SEMATTRS_DB_MSSQL_INSTANCE_NAME = exports.SEMATTRS_DB_OPERATION = exports.SEMATTRS_DB_STATEMENT = exports.SEMATTRS_DB_NAME = exports.SEMATTRS_DB_JDBC_DRIVER_CLASSNAME = exports.SEMATTRS_DB_USER = exports.SEMATTRS_DB_CONNECTION_STRING = exports.SEMATTRS_DB_SYSTEM = exports.SEMATTRS_AWS_LAMBDA_INVOKED_ARN = undefined; - exports.SEMATTRS_MESSAGING_DESTINATION_KIND = exports.SEMATTRS_MESSAGING_DESTINATION = exports.SEMATTRS_MESSAGING_SYSTEM = exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES = exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS = exports.SEMATTRS_AWS_DYNAMODB_SCANNED_COUNT = exports.SEMATTRS_AWS_DYNAMODB_COUNT = exports.SEMATTRS_AWS_DYNAMODB_TOTAL_SEGMENTS = exports.SEMATTRS_AWS_DYNAMODB_SEGMENT = exports.SEMATTRS_AWS_DYNAMODB_SCAN_FORWARD = exports.SEMATTRS_AWS_DYNAMODB_TABLE_COUNT = exports.SEMATTRS_AWS_DYNAMODB_EXCLUSIVE_START_TABLE = exports.SEMATTRS_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES = exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES = exports.SEMATTRS_AWS_DYNAMODB_SELECT = exports.SEMATTRS_AWS_DYNAMODB_INDEX_NAME = exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTES_TO_GET = exports.SEMATTRS_AWS_DYNAMODB_LIMIT = exports.SEMATTRS_AWS_DYNAMODB_PROJECTION = exports.SEMATTRS_AWS_DYNAMODB_CONSISTENT_READ = exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY = exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY = exports.SEMATTRS_AWS_DYNAMODB_ITEM_COLLECTION_METRICS = exports.SEMATTRS_AWS_DYNAMODB_CONSUMED_CAPACITY = exports.SEMATTRS_AWS_DYNAMODB_TABLE_NAMES = exports.SEMATTRS_HTTP_CLIENT_IP = exports.SEMATTRS_HTTP_ROUTE = exports.SEMATTRS_HTTP_SERVER_NAME = exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED = exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH = exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED = exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH = exports.SEMATTRS_HTTP_USER_AGENT = exports.SEMATTRS_HTTP_FLAVOR = exports.SEMATTRS_HTTP_STATUS_CODE = exports.SEMATTRS_HTTP_SCHEME = exports.SEMATTRS_HTTP_HOST = exports.SEMATTRS_HTTP_TARGET = exports.SEMATTRS_HTTP_URL = exports.SEMATTRS_HTTP_METHOD = exports.SEMATTRS_CODE_LINENO = exports.SEMATTRS_CODE_FILEPATH = exports.SEMATTRS_CODE_NAMESPACE = exports.SEMATTRS_CODE_FUNCTION = exports.SEMATTRS_THREAD_NAME = exports.SEMATTRS_THREAD_ID = exports.SEMATTRS_ENDUSER_SCOPE = exports.SEMATTRS_ENDUSER_ROLE = exports.SEMATTRS_ENDUSER_ID = exports.SEMATTRS_PEER_SERVICE = undefined; - exports.DBSYSTEMVALUES_FILEMAKER = exports.DBSYSTEMVALUES_DERBY = exports.DBSYSTEMVALUES_FIREBIRD = exports.DBSYSTEMVALUES_ADABAS = exports.DBSYSTEMVALUES_CACHE = exports.DBSYSTEMVALUES_EDB = exports.DBSYSTEMVALUES_FIRSTSQL = exports.DBSYSTEMVALUES_INGRES = exports.DBSYSTEMVALUES_HANADB = exports.DBSYSTEMVALUES_MAXDB = exports.DBSYSTEMVALUES_PROGRESS = exports.DBSYSTEMVALUES_HSQLDB = exports.DBSYSTEMVALUES_CLOUDSCAPE = exports.DBSYSTEMVALUES_HIVE = exports.DBSYSTEMVALUES_REDSHIFT = exports.DBSYSTEMVALUES_POSTGRESQL = exports.DBSYSTEMVALUES_DB2 = exports.DBSYSTEMVALUES_ORACLE = exports.DBSYSTEMVALUES_MYSQL = exports.DBSYSTEMVALUES_MSSQL = exports.DBSYSTEMVALUES_OTHER_SQL = exports.SemanticAttributes = exports.SEMATTRS_MESSAGE_UNCOMPRESSED_SIZE = exports.SEMATTRS_MESSAGE_COMPRESSED_SIZE = exports.SEMATTRS_MESSAGE_ID = exports.SEMATTRS_MESSAGE_TYPE = exports.SEMATTRS_RPC_JSONRPC_ERROR_MESSAGE = exports.SEMATTRS_RPC_JSONRPC_ERROR_CODE = exports.SEMATTRS_RPC_JSONRPC_REQUEST_ID = exports.SEMATTRS_RPC_JSONRPC_VERSION = exports.SEMATTRS_RPC_GRPC_STATUS_CODE = exports.SEMATTRS_RPC_METHOD = exports.SEMATTRS_RPC_SERVICE = exports.SEMATTRS_RPC_SYSTEM = exports.SEMATTRS_MESSAGING_KAFKA_TOMBSTONE = exports.SEMATTRS_MESSAGING_KAFKA_PARTITION = exports.SEMATTRS_MESSAGING_KAFKA_CLIENT_ID = exports.SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP = exports.SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY = exports.SEMATTRS_MESSAGING_RABBITMQ_ROUTING_KEY = exports.SEMATTRS_MESSAGING_CONSUMER_ID = exports.SEMATTRS_MESSAGING_OPERATION = exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES = exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES = exports.SEMATTRS_MESSAGING_CONVERSATION_ID = exports.SEMATTRS_MESSAGING_MESSAGE_ID = exports.SEMATTRS_MESSAGING_URL = exports.SEMATTRS_MESSAGING_PROTOCOL_VERSION = exports.SEMATTRS_MESSAGING_PROTOCOL = exports.SEMATTRS_MESSAGING_TEMP_DESTINATION = undefined; - exports.FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD = exports.FaasDocumentOperationValues = exports.FAASDOCUMENTOPERATIONVALUES_DELETE = exports.FAASDOCUMENTOPERATIONVALUES_EDIT = exports.FAASDOCUMENTOPERATIONVALUES_INSERT = exports.FaasTriggerValues = exports.FAASTRIGGERVALUES_OTHER = exports.FAASTRIGGERVALUES_TIMER = exports.FAASTRIGGERVALUES_PUBSUB = exports.FAASTRIGGERVALUES_HTTP = exports.FAASTRIGGERVALUES_DATASOURCE = exports.DbCassandraConsistencyLevelValues = exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL = exports.DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL = exports.DBCASSANDRACONSISTENCYLEVELVALUES_ANY = exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE = exports.DBCASSANDRACONSISTENCYLEVELVALUES_THREE = exports.DBCASSANDRACONSISTENCYLEVELVALUES_TWO = exports.DBCASSANDRACONSISTENCYLEVELVALUES_ONE = exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM = exports.DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM = exports.DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM = exports.DBCASSANDRACONSISTENCYLEVELVALUES_ALL = exports.DbSystemValues = exports.DBSYSTEMVALUES_COCKROACHDB = exports.DBSYSTEMVALUES_MEMCACHED = exports.DBSYSTEMVALUES_ELASTICSEARCH = exports.DBSYSTEMVALUES_GEODE = exports.DBSYSTEMVALUES_NEO4J = exports.DBSYSTEMVALUES_DYNAMODB = exports.DBSYSTEMVALUES_COSMOSDB = exports.DBSYSTEMVALUES_COUCHDB = exports.DBSYSTEMVALUES_COUCHBASE = exports.DBSYSTEMVALUES_REDIS = exports.DBSYSTEMVALUES_MONGODB = exports.DBSYSTEMVALUES_HBASE = exports.DBSYSTEMVALUES_CASSANDRA = exports.DBSYSTEMVALUES_COLDFUSION = exports.DBSYSTEMVALUES_H2 = exports.DBSYSTEMVALUES_VERTICA = exports.DBSYSTEMVALUES_TERADATA = exports.DBSYSTEMVALUES_SYBASE = exports.DBSYSTEMVALUES_SQLITE = exports.DBSYSTEMVALUES_POINTBASE = exports.DBSYSTEMVALUES_PERVASIVE = exports.DBSYSTEMVALUES_NETEZZA = exports.DBSYSTEMVALUES_MARIADB = exports.DBSYSTEMVALUES_INTERBASE = exports.DBSYSTEMVALUES_INSTANTDB = exports.DBSYSTEMVALUES_INFORMIX = undefined; - exports.MESSAGINGOPERATIONVALUES_RECEIVE = exports.MessagingDestinationKindValues = exports.MESSAGINGDESTINATIONKINDVALUES_TOPIC = exports.MESSAGINGDESTINATIONKINDVALUES_QUEUE = exports.HttpFlavorValues = exports.HTTPFLAVORVALUES_QUIC = exports.HTTPFLAVORVALUES_SPDY = exports.HTTPFLAVORVALUES_HTTP_2_0 = exports.HTTPFLAVORVALUES_HTTP_1_1 = exports.HTTPFLAVORVALUES_HTTP_1_0 = exports.NetHostConnectionSubtypeValues = exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_NR = exports.NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN = exports.NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_GSM = exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP = exports.NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD = exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE = exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B = exports.NETHOSTCONNECTIONSUBTYPEVALUES_IDEN = exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT = exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A = exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0 = exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA = exports.NETHOSTCONNECTIONSUBTYPEVALUES_UMTS = exports.NETHOSTCONNECTIONSUBTYPEVALUES_EDGE = exports.NETHOSTCONNECTIONSUBTYPEVALUES_GPRS = exports.NetHostConnectionTypeValues = exports.NETHOSTCONNECTIONTYPEVALUES_UNKNOWN = exports.NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE = exports.NETHOSTCONNECTIONTYPEVALUES_CELL = exports.NETHOSTCONNECTIONTYPEVALUES_WIRED = exports.NETHOSTCONNECTIONTYPEVALUES_WIFI = exports.NetTransportValues = exports.NETTRANSPORTVALUES_OTHER = exports.NETTRANSPORTVALUES_INPROC = exports.NETTRANSPORTVALUES_PIPE = exports.NETTRANSPORTVALUES_UNIX = exports.NETTRANSPORTVALUES_IP = exports.NETTRANSPORTVALUES_IP_UDP = exports.NETTRANSPORTVALUES_IP_TCP = exports.FaasInvokedProviderValues = exports.FAASINVOKEDPROVIDERVALUES_GCP = exports.FAASINVOKEDPROVIDERVALUES_AZURE = exports.FAASINVOKEDPROVIDERVALUES_AWS = undefined; - exports.MessageTypeValues = exports.MESSAGETYPEVALUES_RECEIVED = exports.MESSAGETYPEVALUES_SENT = exports.RpcGrpcStatusCodeValues = exports.RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED = exports.RPCGRPCSTATUSCODEVALUES_DATA_LOSS = exports.RPCGRPCSTATUSCODEVALUES_UNAVAILABLE = exports.RPCGRPCSTATUSCODEVALUES_INTERNAL = exports.RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED = exports.RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE = exports.RPCGRPCSTATUSCODEVALUES_ABORTED = exports.RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION = exports.RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED = exports.RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED = exports.RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS = exports.RPCGRPCSTATUSCODEVALUES_NOT_FOUND = exports.RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED = exports.RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT = exports.RPCGRPCSTATUSCODEVALUES_UNKNOWN = exports.RPCGRPCSTATUSCODEVALUES_CANCELLED = exports.RPCGRPCSTATUSCODEVALUES_OK = exports.MessagingOperationValues = exports.MESSAGINGOPERATIONVALUES_PROCESS = undefined; - var utils_1 = require_utils4(); - var TMP_AWS_LAMBDA_INVOKED_ARN = "aws.lambda.invoked_arn"; - var TMP_DB_SYSTEM = "db.system"; - var TMP_DB_CONNECTION_STRING = "db.connection_string"; - var TMP_DB_USER = "db.user"; - var TMP_DB_JDBC_DRIVER_CLASSNAME = "db.jdbc.driver_classname"; - var TMP_DB_NAME = "db.name"; - var TMP_DB_STATEMENT = "db.statement"; - var TMP_DB_OPERATION = "db.operation"; - var TMP_DB_MSSQL_INSTANCE_NAME = "db.mssql.instance_name"; - var TMP_DB_CASSANDRA_KEYSPACE = "db.cassandra.keyspace"; - var TMP_DB_CASSANDRA_PAGE_SIZE = "db.cassandra.page_size"; - var TMP_DB_CASSANDRA_CONSISTENCY_LEVEL = "db.cassandra.consistency_level"; - var TMP_DB_CASSANDRA_TABLE = "db.cassandra.table"; - var TMP_DB_CASSANDRA_IDEMPOTENCE = "db.cassandra.idempotence"; - var TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT = "db.cassandra.speculative_execution_count"; - var TMP_DB_CASSANDRA_COORDINATOR_ID = "db.cassandra.coordinator.id"; - var TMP_DB_CASSANDRA_COORDINATOR_DC = "db.cassandra.coordinator.dc"; - var TMP_DB_HBASE_NAMESPACE = "db.hbase.namespace"; - var TMP_DB_REDIS_DATABASE_INDEX = "db.redis.database_index"; - var TMP_DB_MONGODB_COLLECTION = "db.mongodb.collection"; - var TMP_DB_SQL_TABLE = "db.sql.table"; - var TMP_EXCEPTION_TYPE = "exception.type"; - var TMP_EXCEPTION_MESSAGE = "exception.message"; - var TMP_EXCEPTION_STACKTRACE = "exception.stacktrace"; - var TMP_EXCEPTION_ESCAPED = "exception.escaped"; - var TMP_FAAS_TRIGGER = "faas.trigger"; - var TMP_FAAS_EXECUTION = "faas.execution"; - var TMP_FAAS_DOCUMENT_COLLECTION = "faas.document.collection"; - var TMP_FAAS_DOCUMENT_OPERATION = "faas.document.operation"; - var TMP_FAAS_DOCUMENT_TIME = "faas.document.time"; - var TMP_FAAS_DOCUMENT_NAME = "faas.document.name"; - var TMP_FAAS_TIME = "faas.time"; - var TMP_FAAS_CRON = "faas.cron"; - var TMP_FAAS_COLDSTART = "faas.coldstart"; - var TMP_FAAS_INVOKED_NAME = "faas.invoked_name"; - var TMP_FAAS_INVOKED_PROVIDER = "faas.invoked_provider"; - var TMP_FAAS_INVOKED_REGION = "faas.invoked_region"; - var TMP_NET_TRANSPORT = "net.transport"; - var TMP_NET_PEER_IP = "net.peer.ip"; - var TMP_NET_PEER_PORT = "net.peer.port"; - var TMP_NET_PEER_NAME = "net.peer.name"; - var TMP_NET_HOST_IP = "net.host.ip"; - var TMP_NET_HOST_PORT = "net.host.port"; - var TMP_NET_HOST_NAME = "net.host.name"; - var TMP_NET_HOST_CONNECTION_TYPE = "net.host.connection.type"; - var TMP_NET_HOST_CONNECTION_SUBTYPE = "net.host.connection.subtype"; - var TMP_NET_HOST_CARRIER_NAME = "net.host.carrier.name"; - var TMP_NET_HOST_CARRIER_MCC = "net.host.carrier.mcc"; - var TMP_NET_HOST_CARRIER_MNC = "net.host.carrier.mnc"; - var TMP_NET_HOST_CARRIER_ICC = "net.host.carrier.icc"; - var TMP_PEER_SERVICE = "peer.service"; - var TMP_ENDUSER_ID = "enduser.id"; - var TMP_ENDUSER_ROLE = "enduser.role"; - var TMP_ENDUSER_SCOPE = "enduser.scope"; - var TMP_THREAD_ID = "thread.id"; - var TMP_THREAD_NAME = "thread.name"; - var TMP_CODE_FUNCTION = "code.function"; - var TMP_CODE_NAMESPACE = "code.namespace"; - var TMP_CODE_FILEPATH = "code.filepath"; - var TMP_CODE_LINENO = "code.lineno"; - var TMP_HTTP_METHOD = "http.method"; - var TMP_HTTP_URL = "http.url"; - var TMP_HTTP_TARGET = "http.target"; - var TMP_HTTP_HOST = "http.host"; - var TMP_HTTP_SCHEME = "http.scheme"; - var TMP_HTTP_STATUS_CODE = "http.status_code"; - var TMP_HTTP_FLAVOR = "http.flavor"; - var TMP_HTTP_USER_AGENT = "http.user_agent"; - var TMP_HTTP_REQUEST_CONTENT_LENGTH = "http.request_content_length"; - var TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED = "http.request_content_length_uncompressed"; - var TMP_HTTP_RESPONSE_CONTENT_LENGTH = "http.response_content_length"; - var TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED = "http.response_content_length_uncompressed"; - var TMP_HTTP_SERVER_NAME = "http.server_name"; - var TMP_HTTP_ROUTE = "http.route"; - var TMP_HTTP_CLIENT_IP = "http.client_ip"; - var TMP_AWS_DYNAMODB_TABLE_NAMES = "aws.dynamodb.table_names"; - var TMP_AWS_DYNAMODB_CONSUMED_CAPACITY = "aws.dynamodb.consumed_capacity"; - var TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS = "aws.dynamodb.item_collection_metrics"; - var TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY = "aws.dynamodb.provisioned_read_capacity"; - var TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY = "aws.dynamodb.provisioned_write_capacity"; - var TMP_AWS_DYNAMODB_CONSISTENT_READ = "aws.dynamodb.consistent_read"; - var TMP_AWS_DYNAMODB_PROJECTION = "aws.dynamodb.projection"; - var TMP_AWS_DYNAMODB_LIMIT = "aws.dynamodb.limit"; - var TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET = "aws.dynamodb.attributes_to_get"; - var TMP_AWS_DYNAMODB_INDEX_NAME = "aws.dynamodb.index_name"; - var TMP_AWS_DYNAMODB_SELECT = "aws.dynamodb.select"; - var TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES = "aws.dynamodb.global_secondary_indexes"; - var TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES = "aws.dynamodb.local_secondary_indexes"; - var TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE = "aws.dynamodb.exclusive_start_table"; - var TMP_AWS_DYNAMODB_TABLE_COUNT = "aws.dynamodb.table_count"; - var TMP_AWS_DYNAMODB_SCAN_FORWARD = "aws.dynamodb.scan_forward"; - var TMP_AWS_DYNAMODB_SEGMENT = "aws.dynamodb.segment"; - var TMP_AWS_DYNAMODB_TOTAL_SEGMENTS = "aws.dynamodb.total_segments"; - var TMP_AWS_DYNAMODB_COUNT = "aws.dynamodb.count"; - var TMP_AWS_DYNAMODB_SCANNED_COUNT = "aws.dynamodb.scanned_count"; - var TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS = "aws.dynamodb.attribute_definitions"; - var TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES = "aws.dynamodb.global_secondary_index_updates"; - var TMP_MESSAGING_SYSTEM = "messaging.system"; - var TMP_MESSAGING_DESTINATION = "messaging.destination"; - var TMP_MESSAGING_DESTINATION_KIND = "messaging.destination_kind"; - var TMP_MESSAGING_TEMP_DESTINATION = "messaging.temp_destination"; - var TMP_MESSAGING_PROTOCOL = "messaging.protocol"; - var TMP_MESSAGING_PROTOCOL_VERSION = "messaging.protocol_version"; - var TMP_MESSAGING_URL = "messaging.url"; - var TMP_MESSAGING_MESSAGE_ID = "messaging.message_id"; - var TMP_MESSAGING_CONVERSATION_ID = "messaging.conversation_id"; - var TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES = "messaging.message_payload_size_bytes"; - var TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES = "messaging.message_payload_compressed_size_bytes"; - var TMP_MESSAGING_OPERATION = "messaging.operation"; - var TMP_MESSAGING_CONSUMER_ID = "messaging.consumer_id"; - var TMP_MESSAGING_RABBITMQ_ROUTING_KEY = "messaging.rabbitmq.routing_key"; - var TMP_MESSAGING_KAFKA_MESSAGE_KEY = "messaging.kafka.message_key"; - var TMP_MESSAGING_KAFKA_CONSUMER_GROUP = "messaging.kafka.consumer_group"; - var TMP_MESSAGING_KAFKA_CLIENT_ID = "messaging.kafka.client_id"; - var TMP_MESSAGING_KAFKA_PARTITION = "messaging.kafka.partition"; - var TMP_MESSAGING_KAFKA_TOMBSTONE = "messaging.kafka.tombstone"; - var TMP_RPC_SYSTEM = "rpc.system"; - var TMP_RPC_SERVICE = "rpc.service"; - var TMP_RPC_METHOD = "rpc.method"; - var TMP_RPC_GRPC_STATUS_CODE = "rpc.grpc.status_code"; - var TMP_RPC_JSONRPC_VERSION = "rpc.jsonrpc.version"; - var TMP_RPC_JSONRPC_REQUEST_ID = "rpc.jsonrpc.request_id"; - var TMP_RPC_JSONRPC_ERROR_CODE = "rpc.jsonrpc.error_code"; - var TMP_RPC_JSONRPC_ERROR_MESSAGE = "rpc.jsonrpc.error_message"; - var TMP_MESSAGE_TYPE = "message.type"; - var TMP_MESSAGE_ID = "message.id"; - var TMP_MESSAGE_COMPRESSED_SIZE = "message.compressed_size"; - var TMP_MESSAGE_UNCOMPRESSED_SIZE = "message.uncompressed_size"; - exports.SEMATTRS_AWS_LAMBDA_INVOKED_ARN = TMP_AWS_LAMBDA_INVOKED_ARN; - exports.SEMATTRS_DB_SYSTEM = TMP_DB_SYSTEM; - exports.SEMATTRS_DB_CONNECTION_STRING = TMP_DB_CONNECTION_STRING; - exports.SEMATTRS_DB_USER = TMP_DB_USER; - exports.SEMATTRS_DB_JDBC_DRIVER_CLASSNAME = TMP_DB_JDBC_DRIVER_CLASSNAME; - exports.SEMATTRS_DB_NAME = TMP_DB_NAME; - exports.SEMATTRS_DB_STATEMENT = TMP_DB_STATEMENT; - exports.SEMATTRS_DB_OPERATION = TMP_DB_OPERATION; - exports.SEMATTRS_DB_MSSQL_INSTANCE_NAME = TMP_DB_MSSQL_INSTANCE_NAME; - exports.SEMATTRS_DB_CASSANDRA_KEYSPACE = TMP_DB_CASSANDRA_KEYSPACE; - exports.SEMATTRS_DB_CASSANDRA_PAGE_SIZE = TMP_DB_CASSANDRA_PAGE_SIZE; - exports.SEMATTRS_DB_CASSANDRA_CONSISTENCY_LEVEL = TMP_DB_CASSANDRA_CONSISTENCY_LEVEL; - exports.SEMATTRS_DB_CASSANDRA_TABLE = TMP_DB_CASSANDRA_TABLE; - exports.SEMATTRS_DB_CASSANDRA_IDEMPOTENCE = TMP_DB_CASSANDRA_IDEMPOTENCE; - exports.SEMATTRS_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT = TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT; - exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_ID = TMP_DB_CASSANDRA_COORDINATOR_ID; - exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_DC = TMP_DB_CASSANDRA_COORDINATOR_DC; - exports.SEMATTRS_DB_HBASE_NAMESPACE = TMP_DB_HBASE_NAMESPACE; - exports.SEMATTRS_DB_REDIS_DATABASE_INDEX = TMP_DB_REDIS_DATABASE_INDEX; - exports.SEMATTRS_DB_MONGODB_COLLECTION = TMP_DB_MONGODB_COLLECTION; - exports.SEMATTRS_DB_SQL_TABLE = TMP_DB_SQL_TABLE; - exports.SEMATTRS_EXCEPTION_TYPE = TMP_EXCEPTION_TYPE; - exports.SEMATTRS_EXCEPTION_MESSAGE = TMP_EXCEPTION_MESSAGE; - exports.SEMATTRS_EXCEPTION_STACKTRACE = TMP_EXCEPTION_STACKTRACE; - exports.SEMATTRS_EXCEPTION_ESCAPED = TMP_EXCEPTION_ESCAPED; - exports.SEMATTRS_FAAS_TRIGGER = TMP_FAAS_TRIGGER; - exports.SEMATTRS_FAAS_EXECUTION = TMP_FAAS_EXECUTION; - exports.SEMATTRS_FAAS_DOCUMENT_COLLECTION = TMP_FAAS_DOCUMENT_COLLECTION; - exports.SEMATTRS_FAAS_DOCUMENT_OPERATION = TMP_FAAS_DOCUMENT_OPERATION; - exports.SEMATTRS_FAAS_DOCUMENT_TIME = TMP_FAAS_DOCUMENT_TIME; - exports.SEMATTRS_FAAS_DOCUMENT_NAME = TMP_FAAS_DOCUMENT_NAME; - exports.SEMATTRS_FAAS_TIME = TMP_FAAS_TIME; - exports.SEMATTRS_FAAS_CRON = TMP_FAAS_CRON; - exports.SEMATTRS_FAAS_COLDSTART = TMP_FAAS_COLDSTART; - exports.SEMATTRS_FAAS_INVOKED_NAME = TMP_FAAS_INVOKED_NAME; - exports.SEMATTRS_FAAS_INVOKED_PROVIDER = TMP_FAAS_INVOKED_PROVIDER; - exports.SEMATTRS_FAAS_INVOKED_REGION = TMP_FAAS_INVOKED_REGION; - exports.SEMATTRS_NET_TRANSPORT = TMP_NET_TRANSPORT; - exports.SEMATTRS_NET_PEER_IP = TMP_NET_PEER_IP; - exports.SEMATTRS_NET_PEER_PORT = TMP_NET_PEER_PORT; - exports.SEMATTRS_NET_PEER_NAME = TMP_NET_PEER_NAME; - exports.SEMATTRS_NET_HOST_IP = TMP_NET_HOST_IP; - exports.SEMATTRS_NET_HOST_PORT = TMP_NET_HOST_PORT; - exports.SEMATTRS_NET_HOST_NAME = TMP_NET_HOST_NAME; - exports.SEMATTRS_NET_HOST_CONNECTION_TYPE = TMP_NET_HOST_CONNECTION_TYPE; - exports.SEMATTRS_NET_HOST_CONNECTION_SUBTYPE = TMP_NET_HOST_CONNECTION_SUBTYPE; - exports.SEMATTRS_NET_HOST_CARRIER_NAME = TMP_NET_HOST_CARRIER_NAME; - exports.SEMATTRS_NET_HOST_CARRIER_MCC = TMP_NET_HOST_CARRIER_MCC; - exports.SEMATTRS_NET_HOST_CARRIER_MNC = TMP_NET_HOST_CARRIER_MNC; - exports.SEMATTRS_NET_HOST_CARRIER_ICC = TMP_NET_HOST_CARRIER_ICC; - exports.SEMATTRS_PEER_SERVICE = TMP_PEER_SERVICE; - exports.SEMATTRS_ENDUSER_ID = TMP_ENDUSER_ID; - exports.SEMATTRS_ENDUSER_ROLE = TMP_ENDUSER_ROLE; - exports.SEMATTRS_ENDUSER_SCOPE = TMP_ENDUSER_SCOPE; - exports.SEMATTRS_THREAD_ID = TMP_THREAD_ID; - exports.SEMATTRS_THREAD_NAME = TMP_THREAD_NAME; - exports.SEMATTRS_CODE_FUNCTION = TMP_CODE_FUNCTION; - exports.SEMATTRS_CODE_NAMESPACE = TMP_CODE_NAMESPACE; - exports.SEMATTRS_CODE_FILEPATH = TMP_CODE_FILEPATH; - exports.SEMATTRS_CODE_LINENO = TMP_CODE_LINENO; - exports.SEMATTRS_HTTP_METHOD = TMP_HTTP_METHOD; - exports.SEMATTRS_HTTP_URL = TMP_HTTP_URL; - exports.SEMATTRS_HTTP_TARGET = TMP_HTTP_TARGET; - exports.SEMATTRS_HTTP_HOST = TMP_HTTP_HOST; - exports.SEMATTRS_HTTP_SCHEME = TMP_HTTP_SCHEME; - exports.SEMATTRS_HTTP_STATUS_CODE = TMP_HTTP_STATUS_CODE; - exports.SEMATTRS_HTTP_FLAVOR = TMP_HTTP_FLAVOR; - exports.SEMATTRS_HTTP_USER_AGENT = TMP_HTTP_USER_AGENT; - exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH = TMP_HTTP_REQUEST_CONTENT_LENGTH; - exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED = TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED; - exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH = TMP_HTTP_RESPONSE_CONTENT_LENGTH; - exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED = TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED; - exports.SEMATTRS_HTTP_SERVER_NAME = TMP_HTTP_SERVER_NAME; - exports.SEMATTRS_HTTP_ROUTE = TMP_HTTP_ROUTE; - exports.SEMATTRS_HTTP_CLIENT_IP = TMP_HTTP_CLIENT_IP; - exports.SEMATTRS_AWS_DYNAMODB_TABLE_NAMES = TMP_AWS_DYNAMODB_TABLE_NAMES; - exports.SEMATTRS_AWS_DYNAMODB_CONSUMED_CAPACITY = TMP_AWS_DYNAMODB_CONSUMED_CAPACITY; - exports.SEMATTRS_AWS_DYNAMODB_ITEM_COLLECTION_METRICS = TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS; - exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY = TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY; - exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY = TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY; - exports.SEMATTRS_AWS_DYNAMODB_CONSISTENT_READ = TMP_AWS_DYNAMODB_CONSISTENT_READ; - exports.SEMATTRS_AWS_DYNAMODB_PROJECTION = TMP_AWS_DYNAMODB_PROJECTION; - exports.SEMATTRS_AWS_DYNAMODB_LIMIT = TMP_AWS_DYNAMODB_LIMIT; - exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTES_TO_GET = TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET; - exports.SEMATTRS_AWS_DYNAMODB_INDEX_NAME = TMP_AWS_DYNAMODB_INDEX_NAME; - exports.SEMATTRS_AWS_DYNAMODB_SELECT = TMP_AWS_DYNAMODB_SELECT; - exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES = TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES; - exports.SEMATTRS_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES = TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES; - exports.SEMATTRS_AWS_DYNAMODB_EXCLUSIVE_START_TABLE = TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE; - exports.SEMATTRS_AWS_DYNAMODB_TABLE_COUNT = TMP_AWS_DYNAMODB_TABLE_COUNT; - exports.SEMATTRS_AWS_DYNAMODB_SCAN_FORWARD = TMP_AWS_DYNAMODB_SCAN_FORWARD; - exports.SEMATTRS_AWS_DYNAMODB_SEGMENT = TMP_AWS_DYNAMODB_SEGMENT; - exports.SEMATTRS_AWS_DYNAMODB_TOTAL_SEGMENTS = TMP_AWS_DYNAMODB_TOTAL_SEGMENTS; - exports.SEMATTRS_AWS_DYNAMODB_COUNT = TMP_AWS_DYNAMODB_COUNT; - exports.SEMATTRS_AWS_DYNAMODB_SCANNED_COUNT = TMP_AWS_DYNAMODB_SCANNED_COUNT; - exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS = TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS; - exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES = TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES; - exports.SEMATTRS_MESSAGING_SYSTEM = TMP_MESSAGING_SYSTEM; - exports.SEMATTRS_MESSAGING_DESTINATION = TMP_MESSAGING_DESTINATION; - exports.SEMATTRS_MESSAGING_DESTINATION_KIND = TMP_MESSAGING_DESTINATION_KIND; - exports.SEMATTRS_MESSAGING_TEMP_DESTINATION = TMP_MESSAGING_TEMP_DESTINATION; - exports.SEMATTRS_MESSAGING_PROTOCOL = TMP_MESSAGING_PROTOCOL; - exports.SEMATTRS_MESSAGING_PROTOCOL_VERSION = TMP_MESSAGING_PROTOCOL_VERSION; - exports.SEMATTRS_MESSAGING_URL = TMP_MESSAGING_URL; - exports.SEMATTRS_MESSAGING_MESSAGE_ID = TMP_MESSAGING_MESSAGE_ID; - exports.SEMATTRS_MESSAGING_CONVERSATION_ID = TMP_MESSAGING_CONVERSATION_ID; - exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES = TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES; - exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES = TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES; - exports.SEMATTRS_MESSAGING_OPERATION = TMP_MESSAGING_OPERATION; - exports.SEMATTRS_MESSAGING_CONSUMER_ID = TMP_MESSAGING_CONSUMER_ID; - exports.SEMATTRS_MESSAGING_RABBITMQ_ROUTING_KEY = TMP_MESSAGING_RABBITMQ_ROUTING_KEY; - exports.SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY = TMP_MESSAGING_KAFKA_MESSAGE_KEY; - exports.SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP = TMP_MESSAGING_KAFKA_CONSUMER_GROUP; - exports.SEMATTRS_MESSAGING_KAFKA_CLIENT_ID = TMP_MESSAGING_KAFKA_CLIENT_ID; - exports.SEMATTRS_MESSAGING_KAFKA_PARTITION = TMP_MESSAGING_KAFKA_PARTITION; - exports.SEMATTRS_MESSAGING_KAFKA_TOMBSTONE = TMP_MESSAGING_KAFKA_TOMBSTONE; - exports.SEMATTRS_RPC_SYSTEM = TMP_RPC_SYSTEM; - exports.SEMATTRS_RPC_SERVICE = TMP_RPC_SERVICE; - exports.SEMATTRS_RPC_METHOD = TMP_RPC_METHOD; - exports.SEMATTRS_RPC_GRPC_STATUS_CODE = TMP_RPC_GRPC_STATUS_CODE; - exports.SEMATTRS_RPC_JSONRPC_VERSION = TMP_RPC_JSONRPC_VERSION; - exports.SEMATTRS_RPC_JSONRPC_REQUEST_ID = TMP_RPC_JSONRPC_REQUEST_ID; - exports.SEMATTRS_RPC_JSONRPC_ERROR_CODE = TMP_RPC_JSONRPC_ERROR_CODE; - exports.SEMATTRS_RPC_JSONRPC_ERROR_MESSAGE = TMP_RPC_JSONRPC_ERROR_MESSAGE; - exports.SEMATTRS_MESSAGE_TYPE = TMP_MESSAGE_TYPE; - exports.SEMATTRS_MESSAGE_ID = TMP_MESSAGE_ID; - exports.SEMATTRS_MESSAGE_COMPRESSED_SIZE = TMP_MESSAGE_COMPRESSED_SIZE; - exports.SEMATTRS_MESSAGE_UNCOMPRESSED_SIZE = TMP_MESSAGE_UNCOMPRESSED_SIZE; - exports.SemanticAttributes = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_AWS_LAMBDA_INVOKED_ARN, - TMP_DB_SYSTEM, - TMP_DB_CONNECTION_STRING, - TMP_DB_USER, - TMP_DB_JDBC_DRIVER_CLASSNAME, - TMP_DB_NAME, - TMP_DB_STATEMENT, - TMP_DB_OPERATION, - TMP_DB_MSSQL_INSTANCE_NAME, - TMP_DB_CASSANDRA_KEYSPACE, - TMP_DB_CASSANDRA_PAGE_SIZE, - TMP_DB_CASSANDRA_CONSISTENCY_LEVEL, - TMP_DB_CASSANDRA_TABLE, - TMP_DB_CASSANDRA_IDEMPOTENCE, - TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT, - TMP_DB_CASSANDRA_COORDINATOR_ID, - TMP_DB_CASSANDRA_COORDINATOR_DC, - TMP_DB_HBASE_NAMESPACE, - TMP_DB_REDIS_DATABASE_INDEX, - TMP_DB_MONGODB_COLLECTION, - TMP_DB_SQL_TABLE, - TMP_EXCEPTION_TYPE, - TMP_EXCEPTION_MESSAGE, - TMP_EXCEPTION_STACKTRACE, - TMP_EXCEPTION_ESCAPED, - TMP_FAAS_TRIGGER, - TMP_FAAS_EXECUTION, - TMP_FAAS_DOCUMENT_COLLECTION, - TMP_FAAS_DOCUMENT_OPERATION, - TMP_FAAS_DOCUMENT_TIME, - TMP_FAAS_DOCUMENT_NAME, - TMP_FAAS_TIME, - TMP_FAAS_CRON, - TMP_FAAS_COLDSTART, - TMP_FAAS_INVOKED_NAME, - TMP_FAAS_INVOKED_PROVIDER, - TMP_FAAS_INVOKED_REGION, - TMP_NET_TRANSPORT, - TMP_NET_PEER_IP, - TMP_NET_PEER_PORT, - TMP_NET_PEER_NAME, - TMP_NET_HOST_IP, - TMP_NET_HOST_PORT, - TMP_NET_HOST_NAME, - TMP_NET_HOST_CONNECTION_TYPE, - TMP_NET_HOST_CONNECTION_SUBTYPE, - TMP_NET_HOST_CARRIER_NAME, - TMP_NET_HOST_CARRIER_MCC, - TMP_NET_HOST_CARRIER_MNC, - TMP_NET_HOST_CARRIER_ICC, - TMP_PEER_SERVICE, - TMP_ENDUSER_ID, - TMP_ENDUSER_ROLE, - TMP_ENDUSER_SCOPE, - TMP_THREAD_ID, - TMP_THREAD_NAME, - TMP_CODE_FUNCTION, - TMP_CODE_NAMESPACE, - TMP_CODE_FILEPATH, - TMP_CODE_LINENO, - TMP_HTTP_METHOD, - TMP_HTTP_URL, - TMP_HTTP_TARGET, - TMP_HTTP_HOST, - TMP_HTTP_SCHEME, - TMP_HTTP_STATUS_CODE, - TMP_HTTP_FLAVOR, - TMP_HTTP_USER_AGENT, - TMP_HTTP_REQUEST_CONTENT_LENGTH, - TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED, - TMP_HTTP_RESPONSE_CONTENT_LENGTH, - TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED, - TMP_HTTP_SERVER_NAME, - TMP_HTTP_ROUTE, - TMP_HTTP_CLIENT_IP, - TMP_AWS_DYNAMODB_TABLE_NAMES, - TMP_AWS_DYNAMODB_CONSUMED_CAPACITY, - TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS, - TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY, - TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY, - TMP_AWS_DYNAMODB_CONSISTENT_READ, - TMP_AWS_DYNAMODB_PROJECTION, - TMP_AWS_DYNAMODB_LIMIT, - TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET, - TMP_AWS_DYNAMODB_INDEX_NAME, - TMP_AWS_DYNAMODB_SELECT, - TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES, - TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES, - TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE, - TMP_AWS_DYNAMODB_TABLE_COUNT, - TMP_AWS_DYNAMODB_SCAN_FORWARD, - TMP_AWS_DYNAMODB_SEGMENT, - TMP_AWS_DYNAMODB_TOTAL_SEGMENTS, - TMP_AWS_DYNAMODB_COUNT, - TMP_AWS_DYNAMODB_SCANNED_COUNT, - TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS, - TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES, - TMP_MESSAGING_SYSTEM, - TMP_MESSAGING_DESTINATION, - TMP_MESSAGING_DESTINATION_KIND, - TMP_MESSAGING_TEMP_DESTINATION, - TMP_MESSAGING_PROTOCOL, - TMP_MESSAGING_PROTOCOL_VERSION, - TMP_MESSAGING_URL, - TMP_MESSAGING_MESSAGE_ID, - TMP_MESSAGING_CONVERSATION_ID, - TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES, - TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES, - TMP_MESSAGING_OPERATION, - TMP_MESSAGING_CONSUMER_ID, - TMP_MESSAGING_RABBITMQ_ROUTING_KEY, - TMP_MESSAGING_KAFKA_MESSAGE_KEY, - TMP_MESSAGING_KAFKA_CONSUMER_GROUP, - TMP_MESSAGING_KAFKA_CLIENT_ID, - TMP_MESSAGING_KAFKA_PARTITION, - TMP_MESSAGING_KAFKA_TOMBSTONE, - TMP_RPC_SYSTEM, - TMP_RPC_SERVICE, - TMP_RPC_METHOD, - TMP_RPC_GRPC_STATUS_CODE, - TMP_RPC_JSONRPC_VERSION, - TMP_RPC_JSONRPC_REQUEST_ID, - TMP_RPC_JSONRPC_ERROR_CODE, - TMP_RPC_JSONRPC_ERROR_MESSAGE, - TMP_MESSAGE_TYPE, - TMP_MESSAGE_ID, - TMP_MESSAGE_COMPRESSED_SIZE, - TMP_MESSAGE_UNCOMPRESSED_SIZE - ]); - var TMP_DBSYSTEMVALUES_OTHER_SQL = "other_sql"; - var TMP_DBSYSTEMVALUES_MSSQL = "mssql"; - var TMP_DBSYSTEMVALUES_MYSQL = "mysql"; - var TMP_DBSYSTEMVALUES_ORACLE = "oracle"; - var TMP_DBSYSTEMVALUES_DB2 = "db2"; - var TMP_DBSYSTEMVALUES_POSTGRESQL = "postgresql"; - var TMP_DBSYSTEMVALUES_REDSHIFT = "redshift"; - var TMP_DBSYSTEMVALUES_HIVE = "hive"; - var TMP_DBSYSTEMVALUES_CLOUDSCAPE = "cloudscape"; - var TMP_DBSYSTEMVALUES_HSQLDB = "hsqldb"; - var TMP_DBSYSTEMVALUES_PROGRESS = "progress"; - var TMP_DBSYSTEMVALUES_MAXDB = "maxdb"; - var TMP_DBSYSTEMVALUES_HANADB = "hanadb"; - var TMP_DBSYSTEMVALUES_INGRES = "ingres"; - var TMP_DBSYSTEMVALUES_FIRSTSQL = "firstsql"; - var TMP_DBSYSTEMVALUES_EDB = "edb"; - var TMP_DBSYSTEMVALUES_CACHE = "cache"; - var TMP_DBSYSTEMVALUES_ADABAS = "adabas"; - var TMP_DBSYSTEMVALUES_FIREBIRD = "firebird"; - var TMP_DBSYSTEMVALUES_DERBY = "derby"; - var TMP_DBSYSTEMVALUES_FILEMAKER = "filemaker"; - var TMP_DBSYSTEMVALUES_INFORMIX = "informix"; - var TMP_DBSYSTEMVALUES_INSTANTDB = "instantdb"; - var TMP_DBSYSTEMVALUES_INTERBASE = "interbase"; - var TMP_DBSYSTEMVALUES_MARIADB = "mariadb"; - var TMP_DBSYSTEMVALUES_NETEZZA = "netezza"; - var TMP_DBSYSTEMVALUES_PERVASIVE = "pervasive"; - var TMP_DBSYSTEMVALUES_POINTBASE = "pointbase"; - var TMP_DBSYSTEMVALUES_SQLITE = "sqlite"; - var TMP_DBSYSTEMVALUES_SYBASE = "sybase"; - var TMP_DBSYSTEMVALUES_TERADATA = "teradata"; - var TMP_DBSYSTEMVALUES_VERTICA = "vertica"; - var TMP_DBSYSTEMVALUES_H2 = "h2"; - var TMP_DBSYSTEMVALUES_COLDFUSION = "coldfusion"; - var TMP_DBSYSTEMVALUES_CASSANDRA = "cassandra"; - var TMP_DBSYSTEMVALUES_HBASE = "hbase"; - var TMP_DBSYSTEMVALUES_MONGODB = "mongodb"; - var TMP_DBSYSTEMVALUES_REDIS = "redis"; - var TMP_DBSYSTEMVALUES_COUCHBASE = "couchbase"; - var TMP_DBSYSTEMVALUES_COUCHDB = "couchdb"; - var TMP_DBSYSTEMVALUES_COSMOSDB = "cosmosdb"; - var TMP_DBSYSTEMVALUES_DYNAMODB = "dynamodb"; - var TMP_DBSYSTEMVALUES_NEO4J = "neo4j"; - var TMP_DBSYSTEMVALUES_GEODE = "geode"; - var TMP_DBSYSTEMVALUES_ELASTICSEARCH = "elasticsearch"; - var TMP_DBSYSTEMVALUES_MEMCACHED = "memcached"; - var TMP_DBSYSTEMVALUES_COCKROACHDB = "cockroachdb"; - exports.DBSYSTEMVALUES_OTHER_SQL = TMP_DBSYSTEMVALUES_OTHER_SQL; - exports.DBSYSTEMVALUES_MSSQL = TMP_DBSYSTEMVALUES_MSSQL; - exports.DBSYSTEMVALUES_MYSQL = TMP_DBSYSTEMVALUES_MYSQL; - exports.DBSYSTEMVALUES_ORACLE = TMP_DBSYSTEMVALUES_ORACLE; - exports.DBSYSTEMVALUES_DB2 = TMP_DBSYSTEMVALUES_DB2; - exports.DBSYSTEMVALUES_POSTGRESQL = TMP_DBSYSTEMVALUES_POSTGRESQL; - exports.DBSYSTEMVALUES_REDSHIFT = TMP_DBSYSTEMVALUES_REDSHIFT; - exports.DBSYSTEMVALUES_HIVE = TMP_DBSYSTEMVALUES_HIVE; - exports.DBSYSTEMVALUES_CLOUDSCAPE = TMP_DBSYSTEMVALUES_CLOUDSCAPE; - exports.DBSYSTEMVALUES_HSQLDB = TMP_DBSYSTEMVALUES_HSQLDB; - exports.DBSYSTEMVALUES_PROGRESS = TMP_DBSYSTEMVALUES_PROGRESS; - exports.DBSYSTEMVALUES_MAXDB = TMP_DBSYSTEMVALUES_MAXDB; - exports.DBSYSTEMVALUES_HANADB = TMP_DBSYSTEMVALUES_HANADB; - exports.DBSYSTEMVALUES_INGRES = TMP_DBSYSTEMVALUES_INGRES; - exports.DBSYSTEMVALUES_FIRSTSQL = TMP_DBSYSTEMVALUES_FIRSTSQL; - exports.DBSYSTEMVALUES_EDB = TMP_DBSYSTEMVALUES_EDB; - exports.DBSYSTEMVALUES_CACHE = TMP_DBSYSTEMVALUES_CACHE; - exports.DBSYSTEMVALUES_ADABAS = TMP_DBSYSTEMVALUES_ADABAS; - exports.DBSYSTEMVALUES_FIREBIRD = TMP_DBSYSTEMVALUES_FIREBIRD; - exports.DBSYSTEMVALUES_DERBY = TMP_DBSYSTEMVALUES_DERBY; - exports.DBSYSTEMVALUES_FILEMAKER = TMP_DBSYSTEMVALUES_FILEMAKER; - exports.DBSYSTEMVALUES_INFORMIX = TMP_DBSYSTEMVALUES_INFORMIX; - exports.DBSYSTEMVALUES_INSTANTDB = TMP_DBSYSTEMVALUES_INSTANTDB; - exports.DBSYSTEMVALUES_INTERBASE = TMP_DBSYSTEMVALUES_INTERBASE; - exports.DBSYSTEMVALUES_MARIADB = TMP_DBSYSTEMVALUES_MARIADB; - exports.DBSYSTEMVALUES_NETEZZA = TMP_DBSYSTEMVALUES_NETEZZA; - exports.DBSYSTEMVALUES_PERVASIVE = TMP_DBSYSTEMVALUES_PERVASIVE; - exports.DBSYSTEMVALUES_POINTBASE = TMP_DBSYSTEMVALUES_POINTBASE; - exports.DBSYSTEMVALUES_SQLITE = TMP_DBSYSTEMVALUES_SQLITE; - exports.DBSYSTEMVALUES_SYBASE = TMP_DBSYSTEMVALUES_SYBASE; - exports.DBSYSTEMVALUES_TERADATA = TMP_DBSYSTEMVALUES_TERADATA; - exports.DBSYSTEMVALUES_VERTICA = TMP_DBSYSTEMVALUES_VERTICA; - exports.DBSYSTEMVALUES_H2 = TMP_DBSYSTEMVALUES_H2; - exports.DBSYSTEMVALUES_COLDFUSION = TMP_DBSYSTEMVALUES_COLDFUSION; - exports.DBSYSTEMVALUES_CASSANDRA = TMP_DBSYSTEMVALUES_CASSANDRA; - exports.DBSYSTEMVALUES_HBASE = TMP_DBSYSTEMVALUES_HBASE; - exports.DBSYSTEMVALUES_MONGODB = TMP_DBSYSTEMVALUES_MONGODB; - exports.DBSYSTEMVALUES_REDIS = TMP_DBSYSTEMVALUES_REDIS; - exports.DBSYSTEMVALUES_COUCHBASE = TMP_DBSYSTEMVALUES_COUCHBASE; - exports.DBSYSTEMVALUES_COUCHDB = TMP_DBSYSTEMVALUES_COUCHDB; - exports.DBSYSTEMVALUES_COSMOSDB = TMP_DBSYSTEMVALUES_COSMOSDB; - exports.DBSYSTEMVALUES_DYNAMODB = TMP_DBSYSTEMVALUES_DYNAMODB; - exports.DBSYSTEMVALUES_NEO4J = TMP_DBSYSTEMVALUES_NEO4J; - exports.DBSYSTEMVALUES_GEODE = TMP_DBSYSTEMVALUES_GEODE; - exports.DBSYSTEMVALUES_ELASTICSEARCH = TMP_DBSYSTEMVALUES_ELASTICSEARCH; - exports.DBSYSTEMVALUES_MEMCACHED = TMP_DBSYSTEMVALUES_MEMCACHED; - exports.DBSYSTEMVALUES_COCKROACHDB = TMP_DBSYSTEMVALUES_COCKROACHDB; - exports.DbSystemValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_DBSYSTEMVALUES_OTHER_SQL, - TMP_DBSYSTEMVALUES_MSSQL, - TMP_DBSYSTEMVALUES_MYSQL, - TMP_DBSYSTEMVALUES_ORACLE, - TMP_DBSYSTEMVALUES_DB2, - TMP_DBSYSTEMVALUES_POSTGRESQL, - TMP_DBSYSTEMVALUES_REDSHIFT, - TMP_DBSYSTEMVALUES_HIVE, - TMP_DBSYSTEMVALUES_CLOUDSCAPE, - TMP_DBSYSTEMVALUES_HSQLDB, - TMP_DBSYSTEMVALUES_PROGRESS, - TMP_DBSYSTEMVALUES_MAXDB, - TMP_DBSYSTEMVALUES_HANADB, - TMP_DBSYSTEMVALUES_INGRES, - TMP_DBSYSTEMVALUES_FIRSTSQL, - TMP_DBSYSTEMVALUES_EDB, - TMP_DBSYSTEMVALUES_CACHE, - TMP_DBSYSTEMVALUES_ADABAS, - TMP_DBSYSTEMVALUES_FIREBIRD, - TMP_DBSYSTEMVALUES_DERBY, - TMP_DBSYSTEMVALUES_FILEMAKER, - TMP_DBSYSTEMVALUES_INFORMIX, - TMP_DBSYSTEMVALUES_INSTANTDB, - TMP_DBSYSTEMVALUES_INTERBASE, - TMP_DBSYSTEMVALUES_MARIADB, - TMP_DBSYSTEMVALUES_NETEZZA, - TMP_DBSYSTEMVALUES_PERVASIVE, - TMP_DBSYSTEMVALUES_POINTBASE, - TMP_DBSYSTEMVALUES_SQLITE, - TMP_DBSYSTEMVALUES_SYBASE, - TMP_DBSYSTEMVALUES_TERADATA, - TMP_DBSYSTEMVALUES_VERTICA, - TMP_DBSYSTEMVALUES_H2, - TMP_DBSYSTEMVALUES_COLDFUSION, - TMP_DBSYSTEMVALUES_CASSANDRA, - TMP_DBSYSTEMVALUES_HBASE, - TMP_DBSYSTEMVALUES_MONGODB, - TMP_DBSYSTEMVALUES_REDIS, - TMP_DBSYSTEMVALUES_COUCHBASE, - TMP_DBSYSTEMVALUES_COUCHDB, - TMP_DBSYSTEMVALUES_COSMOSDB, - TMP_DBSYSTEMVALUES_DYNAMODB, - TMP_DBSYSTEMVALUES_NEO4J, - TMP_DBSYSTEMVALUES_GEODE, - TMP_DBSYSTEMVALUES_ELASTICSEARCH, - TMP_DBSYSTEMVALUES_MEMCACHED, - TMP_DBSYSTEMVALUES_COCKROACHDB - ]); - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL = "all"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM = "each_quorum"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM = "quorum"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM = "local_quorum"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE = "one"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO = "two"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE = "three"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE = "local_one"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY = "any"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL = "serial"; - var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL = "local_serial"; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_ALL = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_ONE = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_TWO = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_THREE = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_ANY = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL; - exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL = TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL; - exports.DbCassandraConsistencyLevelValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL, - TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL - ]); - var TMP_FAASTRIGGERVALUES_DATASOURCE = "datasource"; - var TMP_FAASTRIGGERVALUES_HTTP = "http"; - var TMP_FAASTRIGGERVALUES_PUBSUB = "pubsub"; - var TMP_FAASTRIGGERVALUES_TIMER = "timer"; - var TMP_FAASTRIGGERVALUES_OTHER = "other"; - exports.FAASTRIGGERVALUES_DATASOURCE = TMP_FAASTRIGGERVALUES_DATASOURCE; - exports.FAASTRIGGERVALUES_HTTP = TMP_FAASTRIGGERVALUES_HTTP; - exports.FAASTRIGGERVALUES_PUBSUB = TMP_FAASTRIGGERVALUES_PUBSUB; - exports.FAASTRIGGERVALUES_TIMER = TMP_FAASTRIGGERVALUES_TIMER; - exports.FAASTRIGGERVALUES_OTHER = TMP_FAASTRIGGERVALUES_OTHER; - exports.FaasTriggerValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_FAASTRIGGERVALUES_DATASOURCE, - TMP_FAASTRIGGERVALUES_HTTP, - TMP_FAASTRIGGERVALUES_PUBSUB, - TMP_FAASTRIGGERVALUES_TIMER, - TMP_FAASTRIGGERVALUES_OTHER - ]); - var TMP_FAASDOCUMENTOPERATIONVALUES_INSERT = "insert"; - var TMP_FAASDOCUMENTOPERATIONVALUES_EDIT = "edit"; - var TMP_FAASDOCUMENTOPERATIONVALUES_DELETE = "delete"; - exports.FAASDOCUMENTOPERATIONVALUES_INSERT = TMP_FAASDOCUMENTOPERATIONVALUES_INSERT; - exports.FAASDOCUMENTOPERATIONVALUES_EDIT = TMP_FAASDOCUMENTOPERATIONVALUES_EDIT; - exports.FAASDOCUMENTOPERATIONVALUES_DELETE = TMP_FAASDOCUMENTOPERATIONVALUES_DELETE; - exports.FaasDocumentOperationValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_FAASDOCUMENTOPERATIONVALUES_INSERT, - TMP_FAASDOCUMENTOPERATIONVALUES_EDIT, - TMP_FAASDOCUMENTOPERATIONVALUES_DELETE - ]); - var TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD = "alibaba_cloud"; - var TMP_FAASINVOKEDPROVIDERVALUES_AWS = "aws"; - var TMP_FAASINVOKEDPROVIDERVALUES_AZURE = "azure"; - var TMP_FAASINVOKEDPROVIDERVALUES_GCP = "gcp"; - exports.FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD = TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD; - exports.FAASINVOKEDPROVIDERVALUES_AWS = TMP_FAASINVOKEDPROVIDERVALUES_AWS; - exports.FAASINVOKEDPROVIDERVALUES_AZURE = TMP_FAASINVOKEDPROVIDERVALUES_AZURE; - exports.FAASINVOKEDPROVIDERVALUES_GCP = TMP_FAASINVOKEDPROVIDERVALUES_GCP; - exports.FaasInvokedProviderValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD, - TMP_FAASINVOKEDPROVIDERVALUES_AWS, - TMP_FAASINVOKEDPROVIDERVALUES_AZURE, - TMP_FAASINVOKEDPROVIDERVALUES_GCP - ]); - var TMP_NETTRANSPORTVALUES_IP_TCP = "ip_tcp"; - var TMP_NETTRANSPORTVALUES_IP_UDP = "ip_udp"; - var TMP_NETTRANSPORTVALUES_IP = "ip"; - var TMP_NETTRANSPORTVALUES_UNIX = "unix"; - var TMP_NETTRANSPORTVALUES_PIPE = "pipe"; - var TMP_NETTRANSPORTVALUES_INPROC = "inproc"; - var TMP_NETTRANSPORTVALUES_OTHER = "other"; - exports.NETTRANSPORTVALUES_IP_TCP = TMP_NETTRANSPORTVALUES_IP_TCP; - exports.NETTRANSPORTVALUES_IP_UDP = TMP_NETTRANSPORTVALUES_IP_UDP; - exports.NETTRANSPORTVALUES_IP = TMP_NETTRANSPORTVALUES_IP; - exports.NETTRANSPORTVALUES_UNIX = TMP_NETTRANSPORTVALUES_UNIX; - exports.NETTRANSPORTVALUES_PIPE = TMP_NETTRANSPORTVALUES_PIPE; - exports.NETTRANSPORTVALUES_INPROC = TMP_NETTRANSPORTVALUES_INPROC; - exports.NETTRANSPORTVALUES_OTHER = TMP_NETTRANSPORTVALUES_OTHER; - exports.NetTransportValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_NETTRANSPORTVALUES_IP_TCP, - TMP_NETTRANSPORTVALUES_IP_UDP, - TMP_NETTRANSPORTVALUES_IP, - TMP_NETTRANSPORTVALUES_UNIX, - TMP_NETTRANSPORTVALUES_PIPE, - TMP_NETTRANSPORTVALUES_INPROC, - TMP_NETTRANSPORTVALUES_OTHER - ]); - var TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI = "wifi"; - var TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED = "wired"; - var TMP_NETHOSTCONNECTIONTYPEVALUES_CELL = "cell"; - var TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE = "unavailable"; - var TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN = "unknown"; - exports.NETHOSTCONNECTIONTYPEVALUES_WIFI = TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI; - exports.NETHOSTCONNECTIONTYPEVALUES_WIRED = TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED; - exports.NETHOSTCONNECTIONTYPEVALUES_CELL = TMP_NETHOSTCONNECTIONTYPEVALUES_CELL; - exports.NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE = TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE; - exports.NETHOSTCONNECTIONTYPEVALUES_UNKNOWN = TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN; - exports.NetHostConnectionTypeValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI, - TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED, - TMP_NETHOSTCONNECTIONTYPEVALUES_CELL, - TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE, - TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN - ]); - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS = "gprs"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE = "edge"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS = "umts"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA = "cdma"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0 = "evdo_0"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A = "evdo_a"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT = "cdma2000_1xrtt"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA = "hsdpa"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA = "hsupa"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA = "hspa"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN = "iden"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B = "evdo_b"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE = "lte"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD = "ehrpd"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP = "hspap"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM = "gsm"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA = "td_scdma"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN = "iwlan"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR = "nr"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA = "nrnsa"; - var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA = "lte_ca"; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_GPRS = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_EDGE = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_UMTS = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0 = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_IDEN = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_GSM = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_NR = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA; - exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA = TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA; - exports.NetHostConnectionSubtypeValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA, - TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA - ]); - var TMP_HTTPFLAVORVALUES_HTTP_1_0 = "1.0"; - var TMP_HTTPFLAVORVALUES_HTTP_1_1 = "1.1"; - var TMP_HTTPFLAVORVALUES_HTTP_2_0 = "2.0"; - var TMP_HTTPFLAVORVALUES_SPDY = "SPDY"; - var TMP_HTTPFLAVORVALUES_QUIC = "QUIC"; - exports.HTTPFLAVORVALUES_HTTP_1_0 = TMP_HTTPFLAVORVALUES_HTTP_1_0; - exports.HTTPFLAVORVALUES_HTTP_1_1 = TMP_HTTPFLAVORVALUES_HTTP_1_1; - exports.HTTPFLAVORVALUES_HTTP_2_0 = TMP_HTTPFLAVORVALUES_HTTP_2_0; - exports.HTTPFLAVORVALUES_SPDY = TMP_HTTPFLAVORVALUES_SPDY; - exports.HTTPFLAVORVALUES_QUIC = TMP_HTTPFLAVORVALUES_QUIC; - exports.HttpFlavorValues = { - HTTP_1_0: TMP_HTTPFLAVORVALUES_HTTP_1_0, - HTTP_1_1: TMP_HTTPFLAVORVALUES_HTTP_1_1, - HTTP_2_0: TMP_HTTPFLAVORVALUES_HTTP_2_0, - SPDY: TMP_HTTPFLAVORVALUES_SPDY, - QUIC: TMP_HTTPFLAVORVALUES_QUIC - }; - var TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE = "queue"; - var TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC = "topic"; - exports.MESSAGINGDESTINATIONKINDVALUES_QUEUE = TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE; - exports.MESSAGINGDESTINATIONKINDVALUES_TOPIC = TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC; - exports.MessagingDestinationKindValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE, - TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC - ]); - var TMP_MESSAGINGOPERATIONVALUES_RECEIVE = "receive"; - var TMP_MESSAGINGOPERATIONVALUES_PROCESS = "process"; - exports.MESSAGINGOPERATIONVALUES_RECEIVE = TMP_MESSAGINGOPERATIONVALUES_RECEIVE; - exports.MESSAGINGOPERATIONVALUES_PROCESS = TMP_MESSAGINGOPERATIONVALUES_PROCESS; - exports.MessagingOperationValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_MESSAGINGOPERATIONVALUES_RECEIVE, - TMP_MESSAGINGOPERATIONVALUES_PROCESS - ]); - var TMP_RPCGRPCSTATUSCODEVALUES_OK = 0; - var TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED = 1; - var TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN = 2; - var TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT = 3; - var TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED = 4; - var TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND = 5; - var TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS = 6; - var TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED = 7; - var TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED = 8; - var TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION = 9; - var TMP_RPCGRPCSTATUSCODEVALUES_ABORTED = 10; - var TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE = 11; - var TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED = 12; - var TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL = 13; - var TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE = 14; - var TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS = 15; - var TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED = 16; - exports.RPCGRPCSTATUSCODEVALUES_OK = TMP_RPCGRPCSTATUSCODEVALUES_OK; - exports.RPCGRPCSTATUSCODEVALUES_CANCELLED = TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED; - exports.RPCGRPCSTATUSCODEVALUES_UNKNOWN = TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN; - exports.RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT = TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT; - exports.RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED = TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED; - exports.RPCGRPCSTATUSCODEVALUES_NOT_FOUND = TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND; - exports.RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS = TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS; - exports.RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED = TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED; - exports.RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED = TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED; - exports.RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION = TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION; - exports.RPCGRPCSTATUSCODEVALUES_ABORTED = TMP_RPCGRPCSTATUSCODEVALUES_ABORTED; - exports.RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE = TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE; - exports.RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED = TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED; - exports.RPCGRPCSTATUSCODEVALUES_INTERNAL = TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL; - exports.RPCGRPCSTATUSCODEVALUES_UNAVAILABLE = TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE; - exports.RPCGRPCSTATUSCODEVALUES_DATA_LOSS = TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS; - exports.RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED = TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED; - exports.RpcGrpcStatusCodeValues = { - OK: TMP_RPCGRPCSTATUSCODEVALUES_OK, - CANCELLED: TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED, - UNKNOWN: TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN, - INVALID_ARGUMENT: TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT, - DEADLINE_EXCEEDED: TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED, - NOT_FOUND: TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND, - ALREADY_EXISTS: TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS, - PERMISSION_DENIED: TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED, - RESOURCE_EXHAUSTED: TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED, - FAILED_PRECONDITION: TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION, - ABORTED: TMP_RPCGRPCSTATUSCODEVALUES_ABORTED, - OUT_OF_RANGE: TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE, - UNIMPLEMENTED: TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED, - INTERNAL: TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL, - UNAVAILABLE: TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE, - DATA_LOSS: TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS, - UNAUTHENTICATED: TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED - }; - var TMP_MESSAGETYPEVALUES_SENT = "SENT"; - var TMP_MESSAGETYPEVALUES_RECEIVED = "RECEIVED"; - exports.MESSAGETYPEVALUES_SENT = TMP_MESSAGETYPEVALUES_SENT; - exports.MESSAGETYPEVALUES_RECEIVED = TMP_MESSAGETYPEVALUES_RECEIVED; - exports.MessageTypeValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_MESSAGETYPEVALUES_SENT, - TMP_MESSAGETYPEVALUES_RECEIVED - ]); -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/trace/index.js -var require_trace2 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_SemanticAttributes2(), exports); -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/resource/SemanticResourceAttributes.js -var require_SemanticResourceAttributes = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SEMRESATTRS_K8S_STATEFULSET_NAME = exports.SEMRESATTRS_K8S_STATEFULSET_UID = exports.SEMRESATTRS_K8S_DEPLOYMENT_NAME = exports.SEMRESATTRS_K8S_DEPLOYMENT_UID = exports.SEMRESATTRS_K8S_REPLICASET_NAME = exports.SEMRESATTRS_K8S_REPLICASET_UID = exports.SEMRESATTRS_K8S_CONTAINER_NAME = exports.SEMRESATTRS_K8S_POD_NAME = exports.SEMRESATTRS_K8S_POD_UID = exports.SEMRESATTRS_K8S_NAMESPACE_NAME = exports.SEMRESATTRS_K8S_NODE_UID = exports.SEMRESATTRS_K8S_NODE_NAME = exports.SEMRESATTRS_K8S_CLUSTER_NAME = exports.SEMRESATTRS_HOST_IMAGE_VERSION = exports.SEMRESATTRS_HOST_IMAGE_ID = exports.SEMRESATTRS_HOST_IMAGE_NAME = exports.SEMRESATTRS_HOST_ARCH = exports.SEMRESATTRS_HOST_TYPE = exports.SEMRESATTRS_HOST_NAME = exports.SEMRESATTRS_HOST_ID = exports.SEMRESATTRS_FAAS_MAX_MEMORY = exports.SEMRESATTRS_FAAS_INSTANCE = exports.SEMRESATTRS_FAAS_VERSION = exports.SEMRESATTRS_FAAS_ID = exports.SEMRESATTRS_FAAS_NAME = exports.SEMRESATTRS_DEVICE_MODEL_NAME = exports.SEMRESATTRS_DEVICE_MODEL_IDENTIFIER = exports.SEMRESATTRS_DEVICE_ID = exports.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT = exports.SEMRESATTRS_CONTAINER_IMAGE_TAG = exports.SEMRESATTRS_CONTAINER_IMAGE_NAME = exports.SEMRESATTRS_CONTAINER_RUNTIME = exports.SEMRESATTRS_CONTAINER_ID = exports.SEMRESATTRS_CONTAINER_NAME = exports.SEMRESATTRS_AWS_LOG_STREAM_ARNS = exports.SEMRESATTRS_AWS_LOG_STREAM_NAMES = exports.SEMRESATTRS_AWS_LOG_GROUP_ARNS = exports.SEMRESATTRS_AWS_LOG_GROUP_NAMES = exports.SEMRESATTRS_AWS_EKS_CLUSTER_ARN = exports.SEMRESATTRS_AWS_ECS_TASK_REVISION = exports.SEMRESATTRS_AWS_ECS_TASK_FAMILY = exports.SEMRESATTRS_AWS_ECS_TASK_ARN = exports.SEMRESATTRS_AWS_ECS_LAUNCHTYPE = exports.SEMRESATTRS_AWS_ECS_CLUSTER_ARN = exports.SEMRESATTRS_AWS_ECS_CONTAINER_ARN = exports.SEMRESATTRS_CLOUD_PLATFORM = exports.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE = exports.SEMRESATTRS_CLOUD_REGION = exports.SEMRESATTRS_CLOUD_ACCOUNT_ID = exports.SEMRESATTRS_CLOUD_PROVIDER = undefined; - exports.CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE = exports.CLOUDPLATFORMVALUES_AZURE_APP_SERVICE = exports.CLOUDPLATFORMVALUES_AZURE_FUNCTIONS = exports.CLOUDPLATFORMVALUES_AZURE_AKS = exports.CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES = exports.CLOUDPLATFORMVALUES_AZURE_VM = exports.CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK = exports.CLOUDPLATFORMVALUES_AWS_LAMBDA = exports.CLOUDPLATFORMVALUES_AWS_EKS = exports.CLOUDPLATFORMVALUES_AWS_ECS = exports.CLOUDPLATFORMVALUES_AWS_EC2 = exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC = exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS = exports.CloudProviderValues = exports.CLOUDPROVIDERVALUES_GCP = exports.CLOUDPROVIDERVALUES_AZURE = exports.CLOUDPROVIDERVALUES_AWS = exports.CLOUDPROVIDERVALUES_ALIBABA_CLOUD = exports.SemanticResourceAttributes = exports.SEMRESATTRS_WEBENGINE_DESCRIPTION = exports.SEMRESATTRS_WEBENGINE_VERSION = exports.SEMRESATTRS_WEBENGINE_NAME = exports.SEMRESATTRS_TELEMETRY_AUTO_VERSION = exports.SEMRESATTRS_TELEMETRY_SDK_VERSION = exports.SEMRESATTRS_TELEMETRY_SDK_LANGUAGE = exports.SEMRESATTRS_TELEMETRY_SDK_NAME = exports.SEMRESATTRS_SERVICE_VERSION = exports.SEMRESATTRS_SERVICE_INSTANCE_ID = exports.SEMRESATTRS_SERVICE_NAMESPACE = exports.SEMRESATTRS_SERVICE_NAME = exports.SEMRESATTRS_PROCESS_RUNTIME_DESCRIPTION = exports.SEMRESATTRS_PROCESS_RUNTIME_VERSION = exports.SEMRESATTRS_PROCESS_RUNTIME_NAME = exports.SEMRESATTRS_PROCESS_OWNER = exports.SEMRESATTRS_PROCESS_COMMAND_ARGS = exports.SEMRESATTRS_PROCESS_COMMAND_LINE = exports.SEMRESATTRS_PROCESS_COMMAND = exports.SEMRESATTRS_PROCESS_EXECUTABLE_PATH = exports.SEMRESATTRS_PROCESS_EXECUTABLE_NAME = exports.SEMRESATTRS_PROCESS_PID = exports.SEMRESATTRS_OS_VERSION = exports.SEMRESATTRS_OS_NAME = exports.SEMRESATTRS_OS_DESCRIPTION = exports.SEMRESATTRS_OS_TYPE = exports.SEMRESATTRS_K8S_CRONJOB_NAME = exports.SEMRESATTRS_K8S_CRONJOB_UID = exports.SEMRESATTRS_K8S_JOB_NAME = exports.SEMRESATTRS_K8S_JOB_UID = exports.SEMRESATTRS_K8S_DAEMONSET_NAME = exports.SEMRESATTRS_K8S_DAEMONSET_UID = undefined; - exports.TelemetrySdkLanguageValues = exports.TELEMETRYSDKLANGUAGEVALUES_WEBJS = exports.TELEMETRYSDKLANGUAGEVALUES_RUBY = exports.TELEMETRYSDKLANGUAGEVALUES_PYTHON = exports.TELEMETRYSDKLANGUAGEVALUES_PHP = exports.TELEMETRYSDKLANGUAGEVALUES_NODEJS = exports.TELEMETRYSDKLANGUAGEVALUES_JAVA = exports.TELEMETRYSDKLANGUAGEVALUES_GO = exports.TELEMETRYSDKLANGUAGEVALUES_ERLANG = exports.TELEMETRYSDKLANGUAGEVALUES_DOTNET = exports.TELEMETRYSDKLANGUAGEVALUES_CPP = exports.OsTypeValues = exports.OSTYPEVALUES_Z_OS = exports.OSTYPEVALUES_SOLARIS = exports.OSTYPEVALUES_AIX = exports.OSTYPEVALUES_HPUX = exports.OSTYPEVALUES_DRAGONFLYBSD = exports.OSTYPEVALUES_OPENBSD = exports.OSTYPEVALUES_NETBSD = exports.OSTYPEVALUES_FREEBSD = exports.OSTYPEVALUES_DARWIN = exports.OSTYPEVALUES_LINUX = exports.OSTYPEVALUES_WINDOWS = exports.HostArchValues = exports.HOSTARCHVALUES_X86 = exports.HOSTARCHVALUES_PPC64 = exports.HOSTARCHVALUES_PPC32 = exports.HOSTARCHVALUES_IA64 = exports.HOSTARCHVALUES_ARM64 = exports.HOSTARCHVALUES_ARM32 = exports.HOSTARCHVALUES_AMD64 = exports.AwsEcsLaunchtypeValues = exports.AWSECSLAUNCHTYPEVALUES_FARGATE = exports.AWSECSLAUNCHTYPEVALUES_EC2 = exports.CloudPlatformValues = exports.CLOUDPLATFORMVALUES_GCP_APP_ENGINE = exports.CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS = exports.CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE = exports.CLOUDPLATFORMVALUES_GCP_CLOUD_RUN = undefined; - var utils_1 = require_utils4(); - var TMP_CLOUD_PROVIDER = "cloud.provider"; - var TMP_CLOUD_ACCOUNT_ID = "cloud.account.id"; - var TMP_CLOUD_REGION = "cloud.region"; - var TMP_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - var TMP_CLOUD_PLATFORM = "cloud.platform"; - var TMP_AWS_ECS_CONTAINER_ARN = "aws.ecs.container.arn"; - var TMP_AWS_ECS_CLUSTER_ARN = "aws.ecs.cluster.arn"; - var TMP_AWS_ECS_LAUNCHTYPE = "aws.ecs.launchtype"; - var TMP_AWS_ECS_TASK_ARN = "aws.ecs.task.arn"; - var TMP_AWS_ECS_TASK_FAMILY = "aws.ecs.task.family"; - var TMP_AWS_ECS_TASK_REVISION = "aws.ecs.task.revision"; - var TMP_AWS_EKS_CLUSTER_ARN = "aws.eks.cluster.arn"; - var TMP_AWS_LOG_GROUP_NAMES = "aws.log.group.names"; - var TMP_AWS_LOG_GROUP_ARNS = "aws.log.group.arns"; - var TMP_AWS_LOG_STREAM_NAMES = "aws.log.stream.names"; - var TMP_AWS_LOG_STREAM_ARNS = "aws.log.stream.arns"; - var TMP_CONTAINER_NAME = "container.name"; - var TMP_CONTAINER_ID = "container.id"; - var TMP_CONTAINER_RUNTIME = "container.runtime"; - var TMP_CONTAINER_IMAGE_NAME = "container.image.name"; - var TMP_CONTAINER_IMAGE_TAG = "container.image.tag"; - var TMP_DEPLOYMENT_ENVIRONMENT = "deployment.environment"; - var TMP_DEVICE_ID = "device.id"; - var TMP_DEVICE_MODEL_IDENTIFIER = "device.model.identifier"; - var TMP_DEVICE_MODEL_NAME = "device.model.name"; - var TMP_FAAS_NAME = "faas.name"; - var TMP_FAAS_ID = "faas.id"; - var TMP_FAAS_VERSION = "faas.version"; - var TMP_FAAS_INSTANCE = "faas.instance"; - var TMP_FAAS_MAX_MEMORY = "faas.max_memory"; - var TMP_HOST_ID = "host.id"; - var TMP_HOST_NAME = "host.name"; - var TMP_HOST_TYPE = "host.type"; - var TMP_HOST_ARCH = "host.arch"; - var TMP_HOST_IMAGE_NAME = "host.image.name"; - var TMP_HOST_IMAGE_ID = "host.image.id"; - var TMP_HOST_IMAGE_VERSION = "host.image.version"; - var TMP_K8S_CLUSTER_NAME = "k8s.cluster.name"; - var TMP_K8S_NODE_NAME = "k8s.node.name"; - var TMP_K8S_NODE_UID = "k8s.node.uid"; - var TMP_K8S_NAMESPACE_NAME = "k8s.namespace.name"; - var TMP_K8S_POD_UID = "k8s.pod.uid"; - var TMP_K8S_POD_NAME = "k8s.pod.name"; - var TMP_K8S_CONTAINER_NAME = "k8s.container.name"; - var TMP_K8S_REPLICASET_UID = "k8s.replicaset.uid"; - var TMP_K8S_REPLICASET_NAME = "k8s.replicaset.name"; - var TMP_K8S_DEPLOYMENT_UID = "k8s.deployment.uid"; - var TMP_K8S_DEPLOYMENT_NAME = "k8s.deployment.name"; - var TMP_K8S_STATEFULSET_UID = "k8s.statefulset.uid"; - var TMP_K8S_STATEFULSET_NAME = "k8s.statefulset.name"; - var TMP_K8S_DAEMONSET_UID = "k8s.daemonset.uid"; - var TMP_K8S_DAEMONSET_NAME = "k8s.daemonset.name"; - var TMP_K8S_JOB_UID = "k8s.job.uid"; - var TMP_K8S_JOB_NAME = "k8s.job.name"; - var TMP_K8S_CRONJOB_UID = "k8s.cronjob.uid"; - var TMP_K8S_CRONJOB_NAME = "k8s.cronjob.name"; - var TMP_OS_TYPE = "os.type"; - var TMP_OS_DESCRIPTION = "os.description"; - var TMP_OS_NAME = "os.name"; - var TMP_OS_VERSION = "os.version"; - var TMP_PROCESS_PID = "process.pid"; - var TMP_PROCESS_EXECUTABLE_NAME = "process.executable.name"; - var TMP_PROCESS_EXECUTABLE_PATH = "process.executable.path"; - var TMP_PROCESS_COMMAND = "process.command"; - var TMP_PROCESS_COMMAND_LINE = "process.command_line"; - var TMP_PROCESS_COMMAND_ARGS = "process.command_args"; - var TMP_PROCESS_OWNER = "process.owner"; - var TMP_PROCESS_RUNTIME_NAME = "process.runtime.name"; - var TMP_PROCESS_RUNTIME_VERSION = "process.runtime.version"; - var TMP_PROCESS_RUNTIME_DESCRIPTION = "process.runtime.description"; - var TMP_SERVICE_NAME = "service.name"; - var TMP_SERVICE_NAMESPACE = "service.namespace"; - var TMP_SERVICE_INSTANCE_ID = "service.instance.id"; - var TMP_SERVICE_VERSION = "service.version"; - var TMP_TELEMETRY_SDK_NAME = "telemetry.sdk.name"; - var TMP_TELEMETRY_SDK_LANGUAGE = "telemetry.sdk.language"; - var TMP_TELEMETRY_SDK_VERSION = "telemetry.sdk.version"; - var TMP_TELEMETRY_AUTO_VERSION = "telemetry.auto.version"; - var TMP_WEBENGINE_NAME = "webengine.name"; - var TMP_WEBENGINE_VERSION = "webengine.version"; - var TMP_WEBENGINE_DESCRIPTION = "webengine.description"; - exports.SEMRESATTRS_CLOUD_PROVIDER = TMP_CLOUD_PROVIDER; - exports.SEMRESATTRS_CLOUD_ACCOUNT_ID = TMP_CLOUD_ACCOUNT_ID; - exports.SEMRESATTRS_CLOUD_REGION = TMP_CLOUD_REGION; - exports.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE = TMP_CLOUD_AVAILABILITY_ZONE; - exports.SEMRESATTRS_CLOUD_PLATFORM = TMP_CLOUD_PLATFORM; - exports.SEMRESATTRS_AWS_ECS_CONTAINER_ARN = TMP_AWS_ECS_CONTAINER_ARN; - exports.SEMRESATTRS_AWS_ECS_CLUSTER_ARN = TMP_AWS_ECS_CLUSTER_ARN; - exports.SEMRESATTRS_AWS_ECS_LAUNCHTYPE = TMP_AWS_ECS_LAUNCHTYPE; - exports.SEMRESATTRS_AWS_ECS_TASK_ARN = TMP_AWS_ECS_TASK_ARN; - exports.SEMRESATTRS_AWS_ECS_TASK_FAMILY = TMP_AWS_ECS_TASK_FAMILY; - exports.SEMRESATTRS_AWS_ECS_TASK_REVISION = TMP_AWS_ECS_TASK_REVISION; - exports.SEMRESATTRS_AWS_EKS_CLUSTER_ARN = TMP_AWS_EKS_CLUSTER_ARN; - exports.SEMRESATTRS_AWS_LOG_GROUP_NAMES = TMP_AWS_LOG_GROUP_NAMES; - exports.SEMRESATTRS_AWS_LOG_GROUP_ARNS = TMP_AWS_LOG_GROUP_ARNS; - exports.SEMRESATTRS_AWS_LOG_STREAM_NAMES = TMP_AWS_LOG_STREAM_NAMES; - exports.SEMRESATTRS_AWS_LOG_STREAM_ARNS = TMP_AWS_LOG_STREAM_ARNS; - exports.SEMRESATTRS_CONTAINER_NAME = TMP_CONTAINER_NAME; - exports.SEMRESATTRS_CONTAINER_ID = TMP_CONTAINER_ID; - exports.SEMRESATTRS_CONTAINER_RUNTIME = TMP_CONTAINER_RUNTIME; - exports.SEMRESATTRS_CONTAINER_IMAGE_NAME = TMP_CONTAINER_IMAGE_NAME; - exports.SEMRESATTRS_CONTAINER_IMAGE_TAG = TMP_CONTAINER_IMAGE_TAG; - exports.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT = TMP_DEPLOYMENT_ENVIRONMENT; - exports.SEMRESATTRS_DEVICE_ID = TMP_DEVICE_ID; - exports.SEMRESATTRS_DEVICE_MODEL_IDENTIFIER = TMP_DEVICE_MODEL_IDENTIFIER; - exports.SEMRESATTRS_DEVICE_MODEL_NAME = TMP_DEVICE_MODEL_NAME; - exports.SEMRESATTRS_FAAS_NAME = TMP_FAAS_NAME; - exports.SEMRESATTRS_FAAS_ID = TMP_FAAS_ID; - exports.SEMRESATTRS_FAAS_VERSION = TMP_FAAS_VERSION; - exports.SEMRESATTRS_FAAS_INSTANCE = TMP_FAAS_INSTANCE; - exports.SEMRESATTRS_FAAS_MAX_MEMORY = TMP_FAAS_MAX_MEMORY; - exports.SEMRESATTRS_HOST_ID = TMP_HOST_ID; - exports.SEMRESATTRS_HOST_NAME = TMP_HOST_NAME; - exports.SEMRESATTRS_HOST_TYPE = TMP_HOST_TYPE; - exports.SEMRESATTRS_HOST_ARCH = TMP_HOST_ARCH; - exports.SEMRESATTRS_HOST_IMAGE_NAME = TMP_HOST_IMAGE_NAME; - exports.SEMRESATTRS_HOST_IMAGE_ID = TMP_HOST_IMAGE_ID; - exports.SEMRESATTRS_HOST_IMAGE_VERSION = TMP_HOST_IMAGE_VERSION; - exports.SEMRESATTRS_K8S_CLUSTER_NAME = TMP_K8S_CLUSTER_NAME; - exports.SEMRESATTRS_K8S_NODE_NAME = TMP_K8S_NODE_NAME; - exports.SEMRESATTRS_K8S_NODE_UID = TMP_K8S_NODE_UID; - exports.SEMRESATTRS_K8S_NAMESPACE_NAME = TMP_K8S_NAMESPACE_NAME; - exports.SEMRESATTRS_K8S_POD_UID = TMP_K8S_POD_UID; - exports.SEMRESATTRS_K8S_POD_NAME = TMP_K8S_POD_NAME; - exports.SEMRESATTRS_K8S_CONTAINER_NAME = TMP_K8S_CONTAINER_NAME; - exports.SEMRESATTRS_K8S_REPLICASET_UID = TMP_K8S_REPLICASET_UID; - exports.SEMRESATTRS_K8S_REPLICASET_NAME = TMP_K8S_REPLICASET_NAME; - exports.SEMRESATTRS_K8S_DEPLOYMENT_UID = TMP_K8S_DEPLOYMENT_UID; - exports.SEMRESATTRS_K8S_DEPLOYMENT_NAME = TMP_K8S_DEPLOYMENT_NAME; - exports.SEMRESATTRS_K8S_STATEFULSET_UID = TMP_K8S_STATEFULSET_UID; - exports.SEMRESATTRS_K8S_STATEFULSET_NAME = TMP_K8S_STATEFULSET_NAME; - exports.SEMRESATTRS_K8S_DAEMONSET_UID = TMP_K8S_DAEMONSET_UID; - exports.SEMRESATTRS_K8S_DAEMONSET_NAME = TMP_K8S_DAEMONSET_NAME; - exports.SEMRESATTRS_K8S_JOB_UID = TMP_K8S_JOB_UID; - exports.SEMRESATTRS_K8S_JOB_NAME = TMP_K8S_JOB_NAME; - exports.SEMRESATTRS_K8S_CRONJOB_UID = TMP_K8S_CRONJOB_UID; - exports.SEMRESATTRS_K8S_CRONJOB_NAME = TMP_K8S_CRONJOB_NAME; - exports.SEMRESATTRS_OS_TYPE = TMP_OS_TYPE; - exports.SEMRESATTRS_OS_DESCRIPTION = TMP_OS_DESCRIPTION; - exports.SEMRESATTRS_OS_NAME = TMP_OS_NAME; - exports.SEMRESATTRS_OS_VERSION = TMP_OS_VERSION; - exports.SEMRESATTRS_PROCESS_PID = TMP_PROCESS_PID; - exports.SEMRESATTRS_PROCESS_EXECUTABLE_NAME = TMP_PROCESS_EXECUTABLE_NAME; - exports.SEMRESATTRS_PROCESS_EXECUTABLE_PATH = TMP_PROCESS_EXECUTABLE_PATH; - exports.SEMRESATTRS_PROCESS_COMMAND = TMP_PROCESS_COMMAND; - exports.SEMRESATTRS_PROCESS_COMMAND_LINE = TMP_PROCESS_COMMAND_LINE; - exports.SEMRESATTRS_PROCESS_COMMAND_ARGS = TMP_PROCESS_COMMAND_ARGS; - exports.SEMRESATTRS_PROCESS_OWNER = TMP_PROCESS_OWNER; - exports.SEMRESATTRS_PROCESS_RUNTIME_NAME = TMP_PROCESS_RUNTIME_NAME; - exports.SEMRESATTRS_PROCESS_RUNTIME_VERSION = TMP_PROCESS_RUNTIME_VERSION; - exports.SEMRESATTRS_PROCESS_RUNTIME_DESCRIPTION = TMP_PROCESS_RUNTIME_DESCRIPTION; - exports.SEMRESATTRS_SERVICE_NAME = TMP_SERVICE_NAME; - exports.SEMRESATTRS_SERVICE_NAMESPACE = TMP_SERVICE_NAMESPACE; - exports.SEMRESATTRS_SERVICE_INSTANCE_ID = TMP_SERVICE_INSTANCE_ID; - exports.SEMRESATTRS_SERVICE_VERSION = TMP_SERVICE_VERSION; - exports.SEMRESATTRS_TELEMETRY_SDK_NAME = TMP_TELEMETRY_SDK_NAME; - exports.SEMRESATTRS_TELEMETRY_SDK_LANGUAGE = TMP_TELEMETRY_SDK_LANGUAGE; - exports.SEMRESATTRS_TELEMETRY_SDK_VERSION = TMP_TELEMETRY_SDK_VERSION; - exports.SEMRESATTRS_TELEMETRY_AUTO_VERSION = TMP_TELEMETRY_AUTO_VERSION; - exports.SEMRESATTRS_WEBENGINE_NAME = TMP_WEBENGINE_NAME; - exports.SEMRESATTRS_WEBENGINE_VERSION = TMP_WEBENGINE_VERSION; - exports.SEMRESATTRS_WEBENGINE_DESCRIPTION = TMP_WEBENGINE_DESCRIPTION; - exports.SemanticResourceAttributes = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_CLOUD_PROVIDER, - TMP_CLOUD_ACCOUNT_ID, - TMP_CLOUD_REGION, - TMP_CLOUD_AVAILABILITY_ZONE, - TMP_CLOUD_PLATFORM, - TMP_AWS_ECS_CONTAINER_ARN, - TMP_AWS_ECS_CLUSTER_ARN, - TMP_AWS_ECS_LAUNCHTYPE, - TMP_AWS_ECS_TASK_ARN, - TMP_AWS_ECS_TASK_FAMILY, - TMP_AWS_ECS_TASK_REVISION, - TMP_AWS_EKS_CLUSTER_ARN, - TMP_AWS_LOG_GROUP_NAMES, - TMP_AWS_LOG_GROUP_ARNS, - TMP_AWS_LOG_STREAM_NAMES, - TMP_AWS_LOG_STREAM_ARNS, - TMP_CONTAINER_NAME, - TMP_CONTAINER_ID, - TMP_CONTAINER_RUNTIME, - TMP_CONTAINER_IMAGE_NAME, - TMP_CONTAINER_IMAGE_TAG, - TMP_DEPLOYMENT_ENVIRONMENT, - TMP_DEVICE_ID, - TMP_DEVICE_MODEL_IDENTIFIER, - TMP_DEVICE_MODEL_NAME, - TMP_FAAS_NAME, - TMP_FAAS_ID, - TMP_FAAS_VERSION, - TMP_FAAS_INSTANCE, - TMP_FAAS_MAX_MEMORY, - TMP_HOST_ID, - TMP_HOST_NAME, - TMP_HOST_TYPE, - TMP_HOST_ARCH, - TMP_HOST_IMAGE_NAME, - TMP_HOST_IMAGE_ID, - TMP_HOST_IMAGE_VERSION, - TMP_K8S_CLUSTER_NAME, - TMP_K8S_NODE_NAME, - TMP_K8S_NODE_UID, - TMP_K8S_NAMESPACE_NAME, - TMP_K8S_POD_UID, - TMP_K8S_POD_NAME, - TMP_K8S_CONTAINER_NAME, - TMP_K8S_REPLICASET_UID, - TMP_K8S_REPLICASET_NAME, - TMP_K8S_DEPLOYMENT_UID, - TMP_K8S_DEPLOYMENT_NAME, - TMP_K8S_STATEFULSET_UID, - TMP_K8S_STATEFULSET_NAME, - TMP_K8S_DAEMONSET_UID, - TMP_K8S_DAEMONSET_NAME, - TMP_K8S_JOB_UID, - TMP_K8S_JOB_NAME, - TMP_K8S_CRONJOB_UID, - TMP_K8S_CRONJOB_NAME, - TMP_OS_TYPE, - TMP_OS_DESCRIPTION, - TMP_OS_NAME, - TMP_OS_VERSION, - TMP_PROCESS_PID, - TMP_PROCESS_EXECUTABLE_NAME, - TMP_PROCESS_EXECUTABLE_PATH, - TMP_PROCESS_COMMAND, - TMP_PROCESS_COMMAND_LINE, - TMP_PROCESS_COMMAND_ARGS, - TMP_PROCESS_OWNER, - TMP_PROCESS_RUNTIME_NAME, - TMP_PROCESS_RUNTIME_VERSION, - TMP_PROCESS_RUNTIME_DESCRIPTION, - TMP_SERVICE_NAME, - TMP_SERVICE_NAMESPACE, - TMP_SERVICE_INSTANCE_ID, - TMP_SERVICE_VERSION, - TMP_TELEMETRY_SDK_NAME, - TMP_TELEMETRY_SDK_LANGUAGE, - TMP_TELEMETRY_SDK_VERSION, - TMP_TELEMETRY_AUTO_VERSION, - TMP_WEBENGINE_NAME, - TMP_WEBENGINE_VERSION, - TMP_WEBENGINE_DESCRIPTION - ]); - var TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD = "alibaba_cloud"; - var TMP_CLOUDPROVIDERVALUES_AWS = "aws"; - var TMP_CLOUDPROVIDERVALUES_AZURE = "azure"; - var TMP_CLOUDPROVIDERVALUES_GCP = "gcp"; - exports.CLOUDPROVIDERVALUES_ALIBABA_CLOUD = TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD; - exports.CLOUDPROVIDERVALUES_AWS = TMP_CLOUDPROVIDERVALUES_AWS; - exports.CLOUDPROVIDERVALUES_AZURE = TMP_CLOUDPROVIDERVALUES_AZURE; - exports.CLOUDPROVIDERVALUES_GCP = TMP_CLOUDPROVIDERVALUES_GCP; - exports.CloudProviderValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD, - TMP_CLOUDPROVIDERVALUES_AWS, - TMP_CLOUDPROVIDERVALUES_AZURE, - TMP_CLOUDPROVIDERVALUES_GCP - ]); - var TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS = "alibaba_cloud_ecs"; - var TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC = "alibaba_cloud_fc"; - var TMP_CLOUDPLATFORMVALUES_AWS_EC2 = "aws_ec2"; - var TMP_CLOUDPLATFORMVALUES_AWS_ECS = "aws_ecs"; - var TMP_CLOUDPLATFORMVALUES_AWS_EKS = "aws_eks"; - var TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA = "aws_lambda"; - var TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK = "aws_elastic_beanstalk"; - var TMP_CLOUDPLATFORMVALUES_AZURE_VM = "azure_vm"; - var TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES = "azure_container_instances"; - var TMP_CLOUDPLATFORMVALUES_AZURE_AKS = "azure_aks"; - var TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS = "azure_functions"; - var TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE = "azure_app_service"; - var TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE = "gcp_compute_engine"; - var TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN = "gcp_cloud_run"; - var TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE = "gcp_kubernetes_engine"; - var TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS = "gcp_cloud_functions"; - var TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE = "gcp_app_engine"; - exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS = TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS; - exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC = TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC; - exports.CLOUDPLATFORMVALUES_AWS_EC2 = TMP_CLOUDPLATFORMVALUES_AWS_EC2; - exports.CLOUDPLATFORMVALUES_AWS_ECS = TMP_CLOUDPLATFORMVALUES_AWS_ECS; - exports.CLOUDPLATFORMVALUES_AWS_EKS = TMP_CLOUDPLATFORMVALUES_AWS_EKS; - exports.CLOUDPLATFORMVALUES_AWS_LAMBDA = TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA; - exports.CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK = TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK; - exports.CLOUDPLATFORMVALUES_AZURE_VM = TMP_CLOUDPLATFORMVALUES_AZURE_VM; - exports.CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES = TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES; - exports.CLOUDPLATFORMVALUES_AZURE_AKS = TMP_CLOUDPLATFORMVALUES_AZURE_AKS; - exports.CLOUDPLATFORMVALUES_AZURE_FUNCTIONS = TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS; - exports.CLOUDPLATFORMVALUES_AZURE_APP_SERVICE = TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE; - exports.CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE = TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE; - exports.CLOUDPLATFORMVALUES_GCP_CLOUD_RUN = TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN; - exports.CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE = TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE; - exports.CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS = TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS; - exports.CLOUDPLATFORMVALUES_GCP_APP_ENGINE = TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE; - exports.CloudPlatformValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS, - TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC, - TMP_CLOUDPLATFORMVALUES_AWS_EC2, - TMP_CLOUDPLATFORMVALUES_AWS_ECS, - TMP_CLOUDPLATFORMVALUES_AWS_EKS, - TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA, - TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK, - TMP_CLOUDPLATFORMVALUES_AZURE_VM, - TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES, - TMP_CLOUDPLATFORMVALUES_AZURE_AKS, - TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS, - TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE, - TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE, - TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN, - TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE, - TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS, - TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE - ]); - var TMP_AWSECSLAUNCHTYPEVALUES_EC2 = "ec2"; - var TMP_AWSECSLAUNCHTYPEVALUES_FARGATE = "fargate"; - exports.AWSECSLAUNCHTYPEVALUES_EC2 = TMP_AWSECSLAUNCHTYPEVALUES_EC2; - exports.AWSECSLAUNCHTYPEVALUES_FARGATE = TMP_AWSECSLAUNCHTYPEVALUES_FARGATE; - exports.AwsEcsLaunchtypeValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_AWSECSLAUNCHTYPEVALUES_EC2, - TMP_AWSECSLAUNCHTYPEVALUES_FARGATE - ]); - var TMP_HOSTARCHVALUES_AMD64 = "amd64"; - var TMP_HOSTARCHVALUES_ARM32 = "arm32"; - var TMP_HOSTARCHVALUES_ARM64 = "arm64"; - var TMP_HOSTARCHVALUES_IA64 = "ia64"; - var TMP_HOSTARCHVALUES_PPC32 = "ppc32"; - var TMP_HOSTARCHVALUES_PPC64 = "ppc64"; - var TMP_HOSTARCHVALUES_X86 = "x86"; - exports.HOSTARCHVALUES_AMD64 = TMP_HOSTARCHVALUES_AMD64; - exports.HOSTARCHVALUES_ARM32 = TMP_HOSTARCHVALUES_ARM32; - exports.HOSTARCHVALUES_ARM64 = TMP_HOSTARCHVALUES_ARM64; - exports.HOSTARCHVALUES_IA64 = TMP_HOSTARCHVALUES_IA64; - exports.HOSTARCHVALUES_PPC32 = TMP_HOSTARCHVALUES_PPC32; - exports.HOSTARCHVALUES_PPC64 = TMP_HOSTARCHVALUES_PPC64; - exports.HOSTARCHVALUES_X86 = TMP_HOSTARCHVALUES_X86; - exports.HostArchValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_HOSTARCHVALUES_AMD64, - TMP_HOSTARCHVALUES_ARM32, - TMP_HOSTARCHVALUES_ARM64, - TMP_HOSTARCHVALUES_IA64, - TMP_HOSTARCHVALUES_PPC32, - TMP_HOSTARCHVALUES_PPC64, - TMP_HOSTARCHVALUES_X86 - ]); - var TMP_OSTYPEVALUES_WINDOWS = "windows"; - var TMP_OSTYPEVALUES_LINUX = "linux"; - var TMP_OSTYPEVALUES_DARWIN = "darwin"; - var TMP_OSTYPEVALUES_FREEBSD = "freebsd"; - var TMP_OSTYPEVALUES_NETBSD = "netbsd"; - var TMP_OSTYPEVALUES_OPENBSD = "openbsd"; - var TMP_OSTYPEVALUES_DRAGONFLYBSD = "dragonflybsd"; - var TMP_OSTYPEVALUES_HPUX = "hpux"; - var TMP_OSTYPEVALUES_AIX = "aix"; - var TMP_OSTYPEVALUES_SOLARIS = "solaris"; - var TMP_OSTYPEVALUES_Z_OS = "z_os"; - exports.OSTYPEVALUES_WINDOWS = TMP_OSTYPEVALUES_WINDOWS; - exports.OSTYPEVALUES_LINUX = TMP_OSTYPEVALUES_LINUX; - exports.OSTYPEVALUES_DARWIN = TMP_OSTYPEVALUES_DARWIN; - exports.OSTYPEVALUES_FREEBSD = TMP_OSTYPEVALUES_FREEBSD; - exports.OSTYPEVALUES_NETBSD = TMP_OSTYPEVALUES_NETBSD; - exports.OSTYPEVALUES_OPENBSD = TMP_OSTYPEVALUES_OPENBSD; - exports.OSTYPEVALUES_DRAGONFLYBSD = TMP_OSTYPEVALUES_DRAGONFLYBSD; - exports.OSTYPEVALUES_HPUX = TMP_OSTYPEVALUES_HPUX; - exports.OSTYPEVALUES_AIX = TMP_OSTYPEVALUES_AIX; - exports.OSTYPEVALUES_SOLARIS = TMP_OSTYPEVALUES_SOLARIS; - exports.OSTYPEVALUES_Z_OS = TMP_OSTYPEVALUES_Z_OS; - exports.OsTypeValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_OSTYPEVALUES_WINDOWS, - TMP_OSTYPEVALUES_LINUX, - TMP_OSTYPEVALUES_DARWIN, - TMP_OSTYPEVALUES_FREEBSD, - TMP_OSTYPEVALUES_NETBSD, - TMP_OSTYPEVALUES_OPENBSD, - TMP_OSTYPEVALUES_DRAGONFLYBSD, - TMP_OSTYPEVALUES_HPUX, - TMP_OSTYPEVALUES_AIX, - TMP_OSTYPEVALUES_SOLARIS, - TMP_OSTYPEVALUES_Z_OS - ]); - var TMP_TELEMETRYSDKLANGUAGEVALUES_CPP = "cpp"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET = "dotnet"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG = "erlang"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_GO = "go"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA = "java"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS = "nodejs"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_PHP = "php"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON = "python"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY = "ruby"; - var TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS = "webjs"; - exports.TELEMETRYSDKLANGUAGEVALUES_CPP = TMP_TELEMETRYSDKLANGUAGEVALUES_CPP; - exports.TELEMETRYSDKLANGUAGEVALUES_DOTNET = TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET; - exports.TELEMETRYSDKLANGUAGEVALUES_ERLANG = TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG; - exports.TELEMETRYSDKLANGUAGEVALUES_GO = TMP_TELEMETRYSDKLANGUAGEVALUES_GO; - exports.TELEMETRYSDKLANGUAGEVALUES_JAVA = TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA; - exports.TELEMETRYSDKLANGUAGEVALUES_NODEJS = TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS; - exports.TELEMETRYSDKLANGUAGEVALUES_PHP = TMP_TELEMETRYSDKLANGUAGEVALUES_PHP; - exports.TELEMETRYSDKLANGUAGEVALUES_PYTHON = TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON; - exports.TELEMETRYSDKLANGUAGEVALUES_RUBY = TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY; - exports.TELEMETRYSDKLANGUAGEVALUES_WEBJS = TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS; - exports.TelemetrySdkLanguageValues = /* @__PURE__ */ (0, utils_1.createConstMap)([ - TMP_TELEMETRYSDKLANGUAGEVALUES_CPP, - TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET, - TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG, - TMP_TELEMETRYSDKLANGUAGEVALUES_GO, - TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA, - TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS, - TMP_TELEMETRYSDKLANGUAGEVALUES_PHP, - TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON, - TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY, - TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS - ]); -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/resource/index.js -var require_resource = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_SemanticResourceAttributes(), exports); -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.js -var require_stable_attributes = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_EXCEPTION_TYPE = exports.ATTR_EXCEPTION_STACKTRACE = exports.ATTR_EXCEPTION_MESSAGE = exports.ATTR_EXCEPTION_ESCAPED = exports.ERROR_TYPE_VALUE_OTHER = exports.ATTR_ERROR_TYPE = exports.DOTNET_GC_HEAP_GENERATION_VALUE_POH = exports.DOTNET_GC_HEAP_GENERATION_VALUE_LOH = exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN2 = exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN1 = exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN0 = exports.ATTR_DOTNET_GC_HEAP_GENERATION = exports.DB_SYSTEM_NAME_VALUE_POSTGRESQL = exports.DB_SYSTEM_NAME_VALUE_MYSQL = exports.DB_SYSTEM_NAME_VALUE_MICROSOFT_SQL_SERVER = exports.DB_SYSTEM_NAME_VALUE_MARIADB = exports.ATTR_DB_SYSTEM_NAME = exports.ATTR_DB_STORED_PROCEDURE_NAME = exports.ATTR_DB_RESPONSE_STATUS_CODE = exports.ATTR_DB_QUERY_TEXT = exports.ATTR_DB_QUERY_SUMMARY = exports.ATTR_DB_OPERATION_NAME = exports.ATTR_DB_OPERATION_BATCH_SIZE = exports.ATTR_DB_NAMESPACE = exports.ATTR_DB_COLLECTION_NAME = exports.ATTR_CODE_STACKTRACE = exports.ATTR_CODE_LINE_NUMBER = exports.ATTR_CODE_FUNCTION_NAME = exports.ATTR_CODE_FILE_PATH = exports.ATTR_CODE_COLUMN_NUMBER = exports.ATTR_CLIENT_PORT = exports.ATTR_CLIENT_ADDRESS = exports.ATTR_ASPNETCORE_USER_IS_AUTHENTICATED = exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_SUCCESS = exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_FAILURE = exports.ATTR_ASPNETCORE_ROUTING_MATCH_STATUS = exports.ATTR_ASPNETCORE_ROUTING_IS_FALLBACK = exports.ATTR_ASPNETCORE_REQUEST_IS_UNHANDLED = exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_REQUEST_CANCELED = exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_GLOBAL_LIMITER = exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ENDPOINT_LIMITER = exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ACQUIRED = exports.ATTR_ASPNETCORE_RATE_LIMITING_RESULT = exports.ATTR_ASPNETCORE_RATE_LIMITING_POLICY = exports.ATTR_ASPNETCORE_DIAGNOSTICS_HANDLER_TYPE = exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_UNHANDLED = exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_SKIPPED = exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_HANDLED = exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_ABORTED = exports.ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT = undefined; - exports.OTEL_STATUS_CODE_VALUE_ERROR = exports.ATTR_OTEL_STATUS_CODE = exports.ATTR_OTEL_SCOPE_VERSION = exports.ATTR_OTEL_SCOPE_NAME = exports.NETWORK_TYPE_VALUE_IPV6 = exports.NETWORK_TYPE_VALUE_IPV4 = exports.ATTR_NETWORK_TYPE = exports.NETWORK_TRANSPORT_VALUE_UNIX = exports.NETWORK_TRANSPORT_VALUE_UDP = exports.NETWORK_TRANSPORT_VALUE_TCP = exports.NETWORK_TRANSPORT_VALUE_QUIC = exports.NETWORK_TRANSPORT_VALUE_PIPE = exports.ATTR_NETWORK_TRANSPORT = exports.ATTR_NETWORK_PROTOCOL_VERSION = exports.ATTR_NETWORK_PROTOCOL_NAME = exports.ATTR_NETWORK_PEER_PORT = exports.ATTR_NETWORK_PEER_ADDRESS = exports.ATTR_NETWORK_LOCAL_PORT = exports.ATTR_NETWORK_LOCAL_ADDRESS = exports.JVM_THREAD_STATE_VALUE_WAITING = exports.JVM_THREAD_STATE_VALUE_TIMED_WAITING = exports.JVM_THREAD_STATE_VALUE_TERMINATED = exports.JVM_THREAD_STATE_VALUE_RUNNABLE = exports.JVM_THREAD_STATE_VALUE_NEW = exports.JVM_THREAD_STATE_VALUE_BLOCKED = exports.ATTR_JVM_THREAD_STATE = exports.ATTR_JVM_THREAD_DAEMON = exports.JVM_MEMORY_TYPE_VALUE_NON_HEAP = exports.JVM_MEMORY_TYPE_VALUE_HEAP = exports.ATTR_JVM_MEMORY_TYPE = exports.ATTR_JVM_MEMORY_POOL_NAME = exports.ATTR_JVM_GC_NAME = exports.ATTR_JVM_GC_ACTION = exports.ATTR_HTTP_ROUTE = exports.ATTR_HTTP_RESPONSE_STATUS_CODE = exports.ATTR_HTTP_RESPONSE_HEADER = exports.ATTR_HTTP_REQUEST_RESEND_COUNT = exports.ATTR_HTTP_REQUEST_METHOD_ORIGINAL = exports.HTTP_REQUEST_METHOD_VALUE_TRACE = exports.HTTP_REQUEST_METHOD_VALUE_PUT = exports.HTTP_REQUEST_METHOD_VALUE_POST = exports.HTTP_REQUEST_METHOD_VALUE_PATCH = exports.HTTP_REQUEST_METHOD_VALUE_OPTIONS = exports.HTTP_REQUEST_METHOD_VALUE_HEAD = exports.HTTP_REQUEST_METHOD_VALUE_GET = exports.HTTP_REQUEST_METHOD_VALUE_DELETE = exports.HTTP_REQUEST_METHOD_VALUE_CONNECT = exports.HTTP_REQUEST_METHOD_VALUE_OTHER = exports.ATTR_HTTP_REQUEST_METHOD = exports.ATTR_HTTP_REQUEST_HEADER = undefined; - exports.ATTR_USER_AGENT_ORIGINAL = exports.ATTR_URL_SCHEME = exports.ATTR_URL_QUERY = exports.ATTR_URL_PATH = exports.ATTR_URL_FULL = exports.ATTR_URL_FRAGMENT = exports.ATTR_TELEMETRY_SDK_VERSION = exports.ATTR_TELEMETRY_SDK_NAME = exports.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS = exports.TELEMETRY_SDK_LANGUAGE_VALUE_SWIFT = exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUST = exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUBY = exports.TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON = exports.TELEMETRY_SDK_LANGUAGE_VALUE_PHP = exports.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS = exports.TELEMETRY_SDK_LANGUAGE_VALUE_JAVA = exports.TELEMETRY_SDK_LANGUAGE_VALUE_GO = exports.TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG = exports.TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET = exports.TELEMETRY_SDK_LANGUAGE_VALUE_CPP = exports.ATTR_TELEMETRY_SDK_LANGUAGE = exports.SIGNALR_TRANSPORT_VALUE_WEB_SOCKETS = exports.SIGNALR_TRANSPORT_VALUE_SERVER_SENT_EVENTS = exports.SIGNALR_TRANSPORT_VALUE_LONG_POLLING = exports.ATTR_SIGNALR_TRANSPORT = exports.SIGNALR_CONNECTION_STATUS_VALUE_TIMEOUT = exports.SIGNALR_CONNECTION_STATUS_VALUE_NORMAL_CLOSURE = exports.SIGNALR_CONNECTION_STATUS_VALUE_APP_SHUTDOWN = exports.ATTR_SIGNALR_CONNECTION_STATUS = exports.ATTR_SERVICE_VERSION = exports.ATTR_SERVICE_NAME = exports.ATTR_SERVER_PORT = exports.ATTR_SERVER_ADDRESS = exports.ATTR_OTEL_STATUS_DESCRIPTION = exports.OTEL_STATUS_CODE_VALUE_OK = undefined; - exports.ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT = "aspnetcore.diagnostics.exception.result"; - exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_ABORTED = "aborted"; - exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_HANDLED = "handled"; - exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_SKIPPED = "skipped"; - exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_UNHANDLED = "unhandled"; - exports.ATTR_ASPNETCORE_DIAGNOSTICS_HANDLER_TYPE = "aspnetcore.diagnostics.handler.type"; - exports.ATTR_ASPNETCORE_RATE_LIMITING_POLICY = "aspnetcore.rate_limiting.policy"; - exports.ATTR_ASPNETCORE_RATE_LIMITING_RESULT = "aspnetcore.rate_limiting.result"; - exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ACQUIRED = "acquired"; - exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ENDPOINT_LIMITER = "endpoint_limiter"; - exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_GLOBAL_LIMITER = "global_limiter"; - exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_REQUEST_CANCELED = "request_canceled"; - exports.ATTR_ASPNETCORE_REQUEST_IS_UNHANDLED = "aspnetcore.request.is_unhandled"; - exports.ATTR_ASPNETCORE_ROUTING_IS_FALLBACK = "aspnetcore.routing.is_fallback"; - exports.ATTR_ASPNETCORE_ROUTING_MATCH_STATUS = "aspnetcore.routing.match_status"; - exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_FAILURE = "failure"; - exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_SUCCESS = "success"; - exports.ATTR_ASPNETCORE_USER_IS_AUTHENTICATED = "aspnetcore.user.is_authenticated"; - exports.ATTR_CLIENT_ADDRESS = "client.address"; - exports.ATTR_CLIENT_PORT = "client.port"; - exports.ATTR_CODE_COLUMN_NUMBER = "code.column.number"; - exports.ATTR_CODE_FILE_PATH = "code.file.path"; - exports.ATTR_CODE_FUNCTION_NAME = "code.function.name"; - exports.ATTR_CODE_LINE_NUMBER = "code.line.number"; - exports.ATTR_CODE_STACKTRACE = "code.stacktrace"; - exports.ATTR_DB_COLLECTION_NAME = "db.collection.name"; - exports.ATTR_DB_NAMESPACE = "db.namespace"; - exports.ATTR_DB_OPERATION_BATCH_SIZE = "db.operation.batch.size"; - exports.ATTR_DB_OPERATION_NAME = "db.operation.name"; - exports.ATTR_DB_QUERY_SUMMARY = "db.query.summary"; - exports.ATTR_DB_QUERY_TEXT = "db.query.text"; - exports.ATTR_DB_RESPONSE_STATUS_CODE = "db.response.status_code"; - exports.ATTR_DB_STORED_PROCEDURE_NAME = "db.stored_procedure.name"; - exports.ATTR_DB_SYSTEM_NAME = "db.system.name"; - exports.DB_SYSTEM_NAME_VALUE_MARIADB = "mariadb"; - exports.DB_SYSTEM_NAME_VALUE_MICROSOFT_SQL_SERVER = "microsoft.sql_server"; - exports.DB_SYSTEM_NAME_VALUE_MYSQL = "mysql"; - exports.DB_SYSTEM_NAME_VALUE_POSTGRESQL = "postgresql"; - exports.ATTR_DOTNET_GC_HEAP_GENERATION = "dotnet.gc.heap.generation"; - exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN0 = "gen0"; - exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN1 = "gen1"; - exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN2 = "gen2"; - exports.DOTNET_GC_HEAP_GENERATION_VALUE_LOH = "loh"; - exports.DOTNET_GC_HEAP_GENERATION_VALUE_POH = "poh"; - exports.ATTR_ERROR_TYPE = "error.type"; - exports.ERROR_TYPE_VALUE_OTHER = "_OTHER"; - exports.ATTR_EXCEPTION_ESCAPED = "exception.escaped"; - exports.ATTR_EXCEPTION_MESSAGE = "exception.message"; - exports.ATTR_EXCEPTION_STACKTRACE = "exception.stacktrace"; - exports.ATTR_EXCEPTION_TYPE = "exception.type"; - var ATTR_HTTP_REQUEST_HEADER = (key) => `http.request.header.${key}`; - exports.ATTR_HTTP_REQUEST_HEADER = ATTR_HTTP_REQUEST_HEADER; - exports.ATTR_HTTP_REQUEST_METHOD = "http.request.method"; - exports.HTTP_REQUEST_METHOD_VALUE_OTHER = "_OTHER"; - exports.HTTP_REQUEST_METHOD_VALUE_CONNECT = "CONNECT"; - exports.HTTP_REQUEST_METHOD_VALUE_DELETE = "DELETE"; - exports.HTTP_REQUEST_METHOD_VALUE_GET = "GET"; - exports.HTTP_REQUEST_METHOD_VALUE_HEAD = "HEAD"; - exports.HTTP_REQUEST_METHOD_VALUE_OPTIONS = "OPTIONS"; - exports.HTTP_REQUEST_METHOD_VALUE_PATCH = "PATCH"; - exports.HTTP_REQUEST_METHOD_VALUE_POST = "POST"; - exports.HTTP_REQUEST_METHOD_VALUE_PUT = "PUT"; - exports.HTTP_REQUEST_METHOD_VALUE_TRACE = "TRACE"; - exports.ATTR_HTTP_REQUEST_METHOD_ORIGINAL = "http.request.method_original"; - exports.ATTR_HTTP_REQUEST_RESEND_COUNT = "http.request.resend_count"; - var ATTR_HTTP_RESPONSE_HEADER = (key) => `http.response.header.${key}`; - exports.ATTR_HTTP_RESPONSE_HEADER = ATTR_HTTP_RESPONSE_HEADER; - exports.ATTR_HTTP_RESPONSE_STATUS_CODE = "http.response.status_code"; - exports.ATTR_HTTP_ROUTE = "http.route"; - exports.ATTR_JVM_GC_ACTION = "jvm.gc.action"; - exports.ATTR_JVM_GC_NAME = "jvm.gc.name"; - exports.ATTR_JVM_MEMORY_POOL_NAME = "jvm.memory.pool.name"; - exports.ATTR_JVM_MEMORY_TYPE = "jvm.memory.type"; - exports.JVM_MEMORY_TYPE_VALUE_HEAP = "heap"; - exports.JVM_MEMORY_TYPE_VALUE_NON_HEAP = "non_heap"; - exports.ATTR_JVM_THREAD_DAEMON = "jvm.thread.daemon"; - exports.ATTR_JVM_THREAD_STATE = "jvm.thread.state"; - exports.JVM_THREAD_STATE_VALUE_BLOCKED = "blocked"; - exports.JVM_THREAD_STATE_VALUE_NEW = "new"; - exports.JVM_THREAD_STATE_VALUE_RUNNABLE = "runnable"; - exports.JVM_THREAD_STATE_VALUE_TERMINATED = "terminated"; - exports.JVM_THREAD_STATE_VALUE_TIMED_WAITING = "timed_waiting"; - exports.JVM_THREAD_STATE_VALUE_WAITING = "waiting"; - exports.ATTR_NETWORK_LOCAL_ADDRESS = "network.local.address"; - exports.ATTR_NETWORK_LOCAL_PORT = "network.local.port"; - exports.ATTR_NETWORK_PEER_ADDRESS = "network.peer.address"; - exports.ATTR_NETWORK_PEER_PORT = "network.peer.port"; - exports.ATTR_NETWORK_PROTOCOL_NAME = "network.protocol.name"; - exports.ATTR_NETWORK_PROTOCOL_VERSION = "network.protocol.version"; - exports.ATTR_NETWORK_TRANSPORT = "network.transport"; - exports.NETWORK_TRANSPORT_VALUE_PIPE = "pipe"; - exports.NETWORK_TRANSPORT_VALUE_QUIC = "quic"; - exports.NETWORK_TRANSPORT_VALUE_TCP = "tcp"; - exports.NETWORK_TRANSPORT_VALUE_UDP = "udp"; - exports.NETWORK_TRANSPORT_VALUE_UNIX = "unix"; - exports.ATTR_NETWORK_TYPE = "network.type"; - exports.NETWORK_TYPE_VALUE_IPV4 = "ipv4"; - exports.NETWORK_TYPE_VALUE_IPV6 = "ipv6"; - exports.ATTR_OTEL_SCOPE_NAME = "otel.scope.name"; - exports.ATTR_OTEL_SCOPE_VERSION = "otel.scope.version"; - exports.ATTR_OTEL_STATUS_CODE = "otel.status_code"; - exports.OTEL_STATUS_CODE_VALUE_ERROR = "ERROR"; - exports.OTEL_STATUS_CODE_VALUE_OK = "OK"; - exports.ATTR_OTEL_STATUS_DESCRIPTION = "otel.status_description"; - exports.ATTR_SERVER_ADDRESS = "server.address"; - exports.ATTR_SERVER_PORT = "server.port"; - exports.ATTR_SERVICE_NAME = "service.name"; - exports.ATTR_SERVICE_VERSION = "service.version"; - exports.ATTR_SIGNALR_CONNECTION_STATUS = "signalr.connection.status"; - exports.SIGNALR_CONNECTION_STATUS_VALUE_APP_SHUTDOWN = "app_shutdown"; - exports.SIGNALR_CONNECTION_STATUS_VALUE_NORMAL_CLOSURE = "normal_closure"; - exports.SIGNALR_CONNECTION_STATUS_VALUE_TIMEOUT = "timeout"; - exports.ATTR_SIGNALR_TRANSPORT = "signalr.transport"; - exports.SIGNALR_TRANSPORT_VALUE_LONG_POLLING = "long_polling"; - exports.SIGNALR_TRANSPORT_VALUE_SERVER_SENT_EVENTS = "server_sent_events"; - exports.SIGNALR_TRANSPORT_VALUE_WEB_SOCKETS = "web_sockets"; - exports.ATTR_TELEMETRY_SDK_LANGUAGE = "telemetry.sdk.language"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_CPP = "cpp"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET = "dotnet"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG = "erlang"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_GO = "go"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_JAVA = "java"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS = "nodejs"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_PHP = "php"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON = "python"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUBY = "ruby"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUST = "rust"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_SWIFT = "swift"; - exports.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS = "webjs"; - exports.ATTR_TELEMETRY_SDK_NAME = "telemetry.sdk.name"; - exports.ATTR_TELEMETRY_SDK_VERSION = "telemetry.sdk.version"; - exports.ATTR_URL_FRAGMENT = "url.fragment"; - exports.ATTR_URL_FULL = "url.full"; - exports.ATTR_URL_PATH = "url.path"; - exports.ATTR_URL_QUERY = "url.query"; - exports.ATTR_URL_SCHEME = "url.scheme"; - exports.ATTR_USER_AGENT_ORIGINAL = "user_agent.original"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_metrics.js -var require_stable_metrics = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.METRIC_SIGNALR_SERVER_ACTIVE_CONNECTIONS = exports.METRIC_KESTREL_UPGRADED_CONNECTIONS = exports.METRIC_KESTREL_TLS_HANDSHAKE_DURATION = exports.METRIC_KESTREL_REJECTED_CONNECTIONS = exports.METRIC_KESTREL_QUEUED_REQUESTS = exports.METRIC_KESTREL_QUEUED_CONNECTIONS = exports.METRIC_KESTREL_CONNECTION_DURATION = exports.METRIC_KESTREL_ACTIVE_TLS_HANDSHAKES = exports.METRIC_KESTREL_ACTIVE_CONNECTIONS = exports.METRIC_JVM_THREAD_COUNT = exports.METRIC_JVM_MEMORY_USED_AFTER_LAST_GC = exports.METRIC_JVM_MEMORY_USED = exports.METRIC_JVM_MEMORY_LIMIT = exports.METRIC_JVM_MEMORY_COMMITTED = exports.METRIC_JVM_GC_DURATION = exports.METRIC_JVM_CPU_TIME = exports.METRIC_JVM_CPU_RECENT_UTILIZATION = exports.METRIC_JVM_CPU_COUNT = exports.METRIC_JVM_CLASS_UNLOADED = exports.METRIC_JVM_CLASS_LOADED = exports.METRIC_JVM_CLASS_COUNT = exports.METRIC_HTTP_SERVER_REQUEST_DURATION = exports.METRIC_HTTP_CLIENT_REQUEST_DURATION = exports.METRIC_DOTNET_TIMER_COUNT = exports.METRIC_DOTNET_THREAD_POOL_WORK_ITEM_COUNT = exports.METRIC_DOTNET_THREAD_POOL_THREAD_COUNT = exports.METRIC_DOTNET_THREAD_POOL_QUEUE_LENGTH = exports.METRIC_DOTNET_PROCESS_MEMORY_WORKING_SET = exports.METRIC_DOTNET_PROCESS_CPU_TIME = exports.METRIC_DOTNET_PROCESS_CPU_COUNT = exports.METRIC_DOTNET_MONITOR_LOCK_CONTENTIONS = exports.METRIC_DOTNET_JIT_COMPILED_METHODS = exports.METRIC_DOTNET_JIT_COMPILED_IL_SIZE = exports.METRIC_DOTNET_JIT_COMPILATION_TIME = exports.METRIC_DOTNET_GC_PAUSE_TIME = exports.METRIC_DOTNET_GC_LAST_COLLECTION_MEMORY_COMMITTED_SIZE = exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_SIZE = exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_FRAGMENTATION_SIZE = exports.METRIC_DOTNET_GC_HEAP_TOTAL_ALLOCATED = exports.METRIC_DOTNET_GC_COLLECTIONS = exports.METRIC_DOTNET_EXCEPTIONS = exports.METRIC_DOTNET_ASSEMBLY_COUNT = exports.METRIC_DB_CLIENT_OPERATION_DURATION = exports.METRIC_ASPNETCORE_ROUTING_MATCH_ATTEMPTS = exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUESTS = exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_LEASE_DURATION = exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_TIME_IN_QUEUE = exports.METRIC_ASPNETCORE_RATE_LIMITING_QUEUED_REQUESTS = exports.METRIC_ASPNETCORE_RATE_LIMITING_ACTIVE_REQUEST_LEASES = exports.METRIC_ASPNETCORE_DIAGNOSTICS_EXCEPTIONS = undefined; - exports.METRIC_SIGNALR_SERVER_CONNECTION_DURATION = undefined; - exports.METRIC_ASPNETCORE_DIAGNOSTICS_EXCEPTIONS = "aspnetcore.diagnostics.exceptions"; - exports.METRIC_ASPNETCORE_RATE_LIMITING_ACTIVE_REQUEST_LEASES = "aspnetcore.rate_limiting.active_request_leases"; - exports.METRIC_ASPNETCORE_RATE_LIMITING_QUEUED_REQUESTS = "aspnetcore.rate_limiting.queued_requests"; - exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_TIME_IN_QUEUE = "aspnetcore.rate_limiting.request.time_in_queue"; - exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_LEASE_DURATION = "aspnetcore.rate_limiting.request_lease.duration"; - exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUESTS = "aspnetcore.rate_limiting.requests"; - exports.METRIC_ASPNETCORE_ROUTING_MATCH_ATTEMPTS = "aspnetcore.routing.match_attempts"; - exports.METRIC_DB_CLIENT_OPERATION_DURATION = "db.client.operation.duration"; - exports.METRIC_DOTNET_ASSEMBLY_COUNT = "dotnet.assembly.count"; - exports.METRIC_DOTNET_EXCEPTIONS = "dotnet.exceptions"; - exports.METRIC_DOTNET_GC_COLLECTIONS = "dotnet.gc.collections"; - exports.METRIC_DOTNET_GC_HEAP_TOTAL_ALLOCATED = "dotnet.gc.heap.total_allocated"; - exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_FRAGMENTATION_SIZE = "dotnet.gc.last_collection.heap.fragmentation.size"; - exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_SIZE = "dotnet.gc.last_collection.heap.size"; - exports.METRIC_DOTNET_GC_LAST_COLLECTION_MEMORY_COMMITTED_SIZE = "dotnet.gc.last_collection.memory.committed_size"; - exports.METRIC_DOTNET_GC_PAUSE_TIME = "dotnet.gc.pause.time"; - exports.METRIC_DOTNET_JIT_COMPILATION_TIME = "dotnet.jit.compilation.time"; - exports.METRIC_DOTNET_JIT_COMPILED_IL_SIZE = "dotnet.jit.compiled_il.size"; - exports.METRIC_DOTNET_JIT_COMPILED_METHODS = "dotnet.jit.compiled_methods"; - exports.METRIC_DOTNET_MONITOR_LOCK_CONTENTIONS = "dotnet.monitor.lock_contentions"; - exports.METRIC_DOTNET_PROCESS_CPU_COUNT = "dotnet.process.cpu.count"; - exports.METRIC_DOTNET_PROCESS_CPU_TIME = "dotnet.process.cpu.time"; - exports.METRIC_DOTNET_PROCESS_MEMORY_WORKING_SET = "dotnet.process.memory.working_set"; - exports.METRIC_DOTNET_THREAD_POOL_QUEUE_LENGTH = "dotnet.thread_pool.queue.length"; - exports.METRIC_DOTNET_THREAD_POOL_THREAD_COUNT = "dotnet.thread_pool.thread.count"; - exports.METRIC_DOTNET_THREAD_POOL_WORK_ITEM_COUNT = "dotnet.thread_pool.work_item.count"; - exports.METRIC_DOTNET_TIMER_COUNT = "dotnet.timer.count"; - exports.METRIC_HTTP_CLIENT_REQUEST_DURATION = "http.client.request.duration"; - exports.METRIC_HTTP_SERVER_REQUEST_DURATION = "http.server.request.duration"; - exports.METRIC_JVM_CLASS_COUNT = "jvm.class.count"; - exports.METRIC_JVM_CLASS_LOADED = "jvm.class.loaded"; - exports.METRIC_JVM_CLASS_UNLOADED = "jvm.class.unloaded"; - exports.METRIC_JVM_CPU_COUNT = "jvm.cpu.count"; - exports.METRIC_JVM_CPU_RECENT_UTILIZATION = "jvm.cpu.recent_utilization"; - exports.METRIC_JVM_CPU_TIME = "jvm.cpu.time"; - exports.METRIC_JVM_GC_DURATION = "jvm.gc.duration"; - exports.METRIC_JVM_MEMORY_COMMITTED = "jvm.memory.committed"; - exports.METRIC_JVM_MEMORY_LIMIT = "jvm.memory.limit"; - exports.METRIC_JVM_MEMORY_USED = "jvm.memory.used"; - exports.METRIC_JVM_MEMORY_USED_AFTER_LAST_GC = "jvm.memory.used_after_last_gc"; - exports.METRIC_JVM_THREAD_COUNT = "jvm.thread.count"; - exports.METRIC_KESTREL_ACTIVE_CONNECTIONS = "kestrel.active_connections"; - exports.METRIC_KESTREL_ACTIVE_TLS_HANDSHAKES = "kestrel.active_tls_handshakes"; - exports.METRIC_KESTREL_CONNECTION_DURATION = "kestrel.connection.duration"; - exports.METRIC_KESTREL_QUEUED_CONNECTIONS = "kestrel.queued_connections"; - exports.METRIC_KESTREL_QUEUED_REQUESTS = "kestrel.queued_requests"; - exports.METRIC_KESTREL_REJECTED_CONNECTIONS = "kestrel.rejected_connections"; - exports.METRIC_KESTREL_TLS_HANDSHAKE_DURATION = "kestrel.tls_handshake.duration"; - exports.METRIC_KESTREL_UPGRADED_CONNECTIONS = "kestrel.upgraded_connections"; - exports.METRIC_SIGNALR_SERVER_ACTIVE_CONNECTIONS = "signalr.server.active_connections"; - exports.METRIC_SIGNALR_SERVER_CONNECTION_DURATION = "signalr.server.connection.duration"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/stable_events.js -var require_stable_events = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EVENT_EXCEPTION = undefined; - exports.EVENT_EXCEPTION = "exception"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+semantic-conventions@1.38.0/node_modules/@opentelemetry/semantic-conventions/build/src/index.js -var require_src3 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_trace2(), exports); - __exportStar(require_resource(), exports); - __exportStar(require_stable_attributes(), exports); - __exportStar(require_stable_metrics(), exports); - __exportStar(require_stable_events(), exports); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/semconv.js -var require_semconv = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_PROCESS_RUNTIME_NAME = undefined; - exports.ATTR_PROCESS_RUNTIME_NAME = "process.runtime.name"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/sdk-info.js -var require_sdk_info = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SDK_INFO = undefined; - var version_1 = require_version2(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv(); - exports.SDK_INFO = { - [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: "opentelemetry", - [semconv_1.ATTR_PROCESS_RUNTIME_NAME]: "node", - [semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE]: semantic_conventions_1.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS, - [semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION]: version_1.VERSION - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/index.js -var require_node2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.otperformance = exports.SDK_INFO = exports._globalThis = exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = undefined; - var environment_1 = require_environment(); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return environment_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return environment_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return environment_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return environment_1.getStringListFromEnv; - } }); - var globalThis_1 = require_globalThis2(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return globalThis_1._globalThis; - } }); - var sdk_info_1 = require_sdk_info(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return sdk_info_1.SDK_INFO; - } }); - exports.otperformance = performance; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/index.js -var require_platform2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getStringFromEnv = exports.getBooleanFromEnv = exports.otperformance = exports._globalThis = exports.SDK_INFO = undefined; - var node_1 = require_node2(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return node_1.SDK_INFO; - } }); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return node_1._globalThis; - } }); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return node_1.otperformance; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return node_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return node_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return node_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return node_1.getStringListFromEnv; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/time.js -var require_time = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addHrTimes = exports.isTimeInput = exports.isTimeInputHrTime = exports.hrTimeToMicroseconds = exports.hrTimeToMilliseconds = exports.hrTimeToNanoseconds = exports.hrTimeToTimeStamp = exports.hrTimeDuration = exports.timeInputToHrTime = exports.hrTime = exports.getTimeOrigin = exports.millisToHrTime = undefined; - var platform_1 = require_platform2(); - var NANOSECOND_DIGITS = 9; - var NANOSECOND_DIGITS_IN_MILLIS = 6; - var MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS); - var SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS); - function millisToHrTime(epochMillis) { - const epochSeconds = epochMillis / 1000; - const seconds = Math.trunc(epochSeconds); - const nanos = Math.round(epochMillis % 1000 * MILLISECONDS_TO_NANOSECONDS); - return [seconds, nanos]; - } - exports.millisToHrTime = millisToHrTime; - function getTimeOrigin() { - return platform_1.otperformance.timeOrigin; - } - exports.getTimeOrigin = getTimeOrigin; - function hrTime(performanceNow) { - const timeOrigin = millisToHrTime(platform_1.otperformance.timeOrigin); - const now2 = millisToHrTime(typeof performanceNow === "number" ? performanceNow : platform_1.otperformance.now()); - return addHrTimes(timeOrigin, now2); - } - exports.hrTime = hrTime; - function timeInputToHrTime(time3) { - if (isTimeInputHrTime(time3)) { - return time3; - } else if (typeof time3 === "number") { - if (time3 < platform_1.otperformance.timeOrigin) { - return hrTime(time3); - } else { - return millisToHrTime(time3); - } - } else if (time3 instanceof Date) { - return millisToHrTime(time3.getTime()); - } else { - throw TypeError("Invalid input type"); - } - } - exports.timeInputToHrTime = timeInputToHrTime; - function hrTimeDuration(startTime, endTime) { - let seconds = endTime[0] - startTime[0]; - let nanos = endTime[1] - startTime[1]; - if (nanos < 0) { - seconds -= 1; - nanos += SECOND_TO_NANOSECONDS; - } - return [seconds, nanos]; - } - exports.hrTimeDuration = hrTimeDuration; - function hrTimeToTimeStamp(time3) { - const precision = NANOSECOND_DIGITS; - const tmp = `${"0".repeat(precision)}${time3[1]}Z`; - const nanoString = tmp.substring(tmp.length - precision - 1); - const date5 = new Date(time3[0] * 1000).toISOString(); - return date5.replace("000Z", nanoString); - } - exports.hrTimeToTimeStamp = hrTimeToTimeStamp; - function hrTimeToNanoseconds(time3) { - return time3[0] * SECOND_TO_NANOSECONDS + time3[1]; - } - exports.hrTimeToNanoseconds = hrTimeToNanoseconds; - function hrTimeToMilliseconds(time3) { - return time3[0] * 1000 + time3[1] / 1e6; - } - exports.hrTimeToMilliseconds = hrTimeToMilliseconds; - function hrTimeToMicroseconds(time3) { - return time3[0] * 1e6 + time3[1] / 1000; - } - exports.hrTimeToMicroseconds = hrTimeToMicroseconds; - function isTimeInputHrTime(value) { - return Array.isArray(value) && value.length === 2 && typeof value[0] === "number" && typeof value[1] === "number"; - } - exports.isTimeInputHrTime = isTimeInputHrTime; - function isTimeInput(value) { - return isTimeInputHrTime(value) || typeof value === "number" || value instanceof Date; - } - exports.isTimeInput = isTimeInput; - function addHrTimes(time1, time22) { - const out = [time1[0] + time22[0], time1[1] + time22[1]]; - if (out[1] >= SECOND_TO_NANOSECONDS) { - out[1] -= SECOND_TO_NANOSECONDS; - out[0] += 1; - } - return out; - } - exports.addHrTimes = addHrTimes; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/timer-util.js -var require_timer_util = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.unrefTimer = undefined; - function unrefTimer(timer) { - if (typeof timer !== "number") { - timer.unref(); - } - } - exports.unrefTimer = unrefTimer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/ExportResult.js -var require_ExportResult = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExportResultCode = undefined; - var ExportResultCode; - (function(ExportResultCode2) { - ExportResultCode2[ExportResultCode2["SUCCESS"] = 0] = "SUCCESS"; - ExportResultCode2[ExportResultCode2["FAILED"] = 1] = "FAILED"; - })(ExportResultCode = exports.ExportResultCode || (exports.ExportResultCode = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/propagation/composite.js -var require_composite = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompositePropagator = undefined; - var api_1 = require_src(); - - class CompositePropagator { - _propagators; - _fields; - constructor(config2 = {}) { - this._propagators = config2.propagators ?? []; - this._fields = Array.from(new Set(this._propagators.map((p) => typeof p.fields === "function" ? p.fields() : []).reduce((x, y) => x.concat(y), []))); - } - inject(context5, carrier, setter) { - for (const propagator of this._propagators) { - try { - propagator.inject(context5, carrier, setter); - } catch (err) { - api_1.diag.warn(`Failed to inject with ${propagator.constructor.name}. Err: ${err.message}`); - } - } - } - extract(context5, carrier, getter) { - return this._propagators.reduce((ctx, propagator) => { - try { - return propagator.extract(ctx, carrier, getter); - } catch (err) { - api_1.diag.warn(`Failed to extract with ${propagator.constructor.name}. Err: ${err.message}`); - } - return ctx; - }, context5); - } - fields() { - return this._fields.slice(); - } - } - exports.CompositePropagator = CompositePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/internal/validators.js -var require_validators = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateValue = exports.validateKey = undefined; - var VALID_KEY_CHAR_RANGE = "[_0-9a-z-*/]"; - var VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`; - var VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`; - var VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`); - var VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/; - var INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/; - function validateKey(key) { - return VALID_KEY_REGEX.test(key); - } - exports.validateKey = validateKey; - function validateValue(value) { - return VALID_VALUE_BASE_REGEX.test(value) && !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value); - } - exports.validateValue = validateValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/TraceState.js -var require_TraceState = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceState = undefined; - var validators_1 = require_validators(); - var MAX_TRACE_STATE_ITEMS = 32; - var MAX_TRACE_STATE_LEN = 512; - var LIST_MEMBERS_SEPARATOR = ","; - var LIST_MEMBER_KEY_VALUE_SPLITTER = "="; - - class TraceState { - _internalState = new Map; - constructor(rawTraceState) { - if (rawTraceState) - this._parse(rawTraceState); - } - set(key, value) { - const traceState = this._clone(); - if (traceState._internalState.has(key)) { - traceState._internalState.delete(key); - } - traceState._internalState.set(key, value); - return traceState; - } - unset(key) { - const traceState = this._clone(); - traceState._internalState.delete(key); - return traceState; - } - get(key) { - return this._internalState.get(key); - } - serialize() { - return this._keys().reduce((agg, key) => { - agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + this.get(key)); - return agg; - }, []).join(LIST_MEMBERS_SEPARATOR); - } - _parse(rawTraceState) { - if (rawTraceState.length > MAX_TRACE_STATE_LEN) - return; - this._internalState = rawTraceState.split(LIST_MEMBERS_SEPARATOR).reverse().reduce((agg, part) => { - const listMember = part.trim(); - const i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER); - if (i !== -1) { - const key = listMember.slice(0, i); - const value = listMember.slice(i + 1, part.length); - if ((0, validators_1.validateKey)(key) && (0, validators_1.validateValue)(value)) { - agg.set(key, value); - } else {} - } - return agg; - }, new Map); - if (this._internalState.size > MAX_TRACE_STATE_ITEMS) { - this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, MAX_TRACE_STATE_ITEMS)); - } - } - _keys() { - return Array.from(this._internalState.keys()).reverse(); - } - _clone() { - const traceState = new TraceState; - traceState._internalState = new Map(this._internalState); - return traceState; - } - } - exports.TraceState = TraceState; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/W3CTraceContextPropagator.js -var require_W3CTraceContextPropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.W3CTraceContextPropagator = exports.parseTraceParent = exports.TRACE_STATE_HEADER = exports.TRACE_PARENT_HEADER = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing(); - var TraceState_1 = require_TraceState(); - exports.TRACE_PARENT_HEADER = "traceparent"; - exports.TRACE_STATE_HEADER = "tracestate"; - var VERSION = "00"; - var VERSION_PART = "(?!ff)[\\da-f]{2}"; - var TRACE_ID_PART = "(?![0]{32})[\\da-f]{32}"; - var PARENT_ID_PART = "(?![0]{16})[\\da-f]{16}"; - var FLAGS_PART = "[\\da-f]{2}"; - var TRACE_PARENT_REGEX = new RegExp(`^\\s?(${VERSION_PART})-(${TRACE_ID_PART})-(${PARENT_ID_PART})-(${FLAGS_PART})(-.*)?\\s?$`); - function parseTraceParent(traceParent) { - const match2 = TRACE_PARENT_REGEX.exec(traceParent); - if (!match2) - return null; - if (match2[1] === "00" && match2[5]) - return null; - return { - traceId: match2[2], - spanId: match2[3], - traceFlags: parseInt(match2[4], 16) - }; - } - exports.parseTraceParent = parseTraceParent; - - class W3CTraceContextPropagator { - inject(context5, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context5); - if (!spanContext || (0, suppress_tracing_1.isTracingSuppressed)(context5) || !(0, api_1.isSpanContextValid)(spanContext)) - return; - const traceParent = `${VERSION}-${spanContext.traceId}-${spanContext.spanId}-0${Number(spanContext.traceFlags || api_1.TraceFlags.NONE).toString(16)}`; - setter.set(carrier, exports.TRACE_PARENT_HEADER, traceParent); - if (spanContext.traceState) { - setter.set(carrier, exports.TRACE_STATE_HEADER, spanContext.traceState.serialize()); - } - } - extract(context5, carrier, getter) { - const traceParentHeader = getter.get(carrier, exports.TRACE_PARENT_HEADER); - if (!traceParentHeader) - return context5; - const traceParent = Array.isArray(traceParentHeader) ? traceParentHeader[0] : traceParentHeader; - if (typeof traceParent !== "string") - return context5; - const spanContext = parseTraceParent(traceParent); - if (!spanContext) - return context5; - spanContext.isRemote = true; - const traceStateHeader = getter.get(carrier, exports.TRACE_STATE_HEADER); - if (traceStateHeader) { - const state = Array.isArray(traceStateHeader) ? traceStateHeader.join(",") : traceStateHeader; - spanContext.traceState = new TraceState_1.TraceState(typeof state === "string" ? state : undefined); - } - return api_1.trace.setSpanContext(context5, spanContext); - } - fields() { - return [exports.TRACE_PARENT_HEADER, exports.TRACE_STATE_HEADER]; - } - } - exports.W3CTraceContextPropagator = W3CTraceContextPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/rpc-metadata.js -var require_rpc_metadata = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getRPCMetadata = exports.deleteRPCMetadata = exports.setRPCMetadata = exports.RPCType = undefined; - var api_1 = require_src(); - var RPC_METADATA_KEY = (0, api_1.createContextKey)("OpenTelemetry SDK Context Key RPC_METADATA"); - var RPCType; - (function(RPCType2) { - RPCType2["HTTP"] = "http"; - })(RPCType = exports.RPCType || (exports.RPCType = {})); - function setRPCMetadata(context5, meta3) { - return context5.setValue(RPC_METADATA_KEY, meta3); - } - exports.setRPCMetadata = setRPCMetadata; - function deleteRPCMetadata(context5) { - return context5.deleteValue(RPC_METADATA_KEY); - } - exports.deleteRPCMetadata = deleteRPCMetadata; - function getRPCMetadata(context5) { - return context5.getValue(RPC_METADATA_KEY); - } - exports.getRPCMetadata = getRPCMetadata; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/lodash.merge.js -var require_lodash_merge = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isPlainObject = undefined; - var objectTag = "[object Object]"; - var nullTag = "[object Null]"; - var undefinedTag = "[object Undefined]"; - var funcProto = Function.prototype; - var funcToString = funcProto.toString; - var objectCtorString = funcToString.call(Object); - var getPrototypeOf = Object.getPrototypeOf; - var objectProto = Object.prototype; - var hasOwnProperty = objectProto.hasOwnProperty; - var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - var nativeObjectToString = objectProto.toString; - function isPlainObject2(value) { - if (!isObjectLike(value) || baseGetTag(value) !== objectTag) { - return false; - } - const proto = getPrototypeOf(value); - if (proto === null) { - return true; - } - const Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) === objectCtorString; - } - exports.isPlainObject = isPlainObject2; - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - function getRawTag(value) { - const isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - let unmasked = false; - try { - value[symToStringTag] = undefined; - unmasked = true; - } catch {} - const result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - function objectToString(value) { - return nativeObjectToString.call(value); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/merge.js -var require_merge = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.merge = undefined; - var lodash_merge_1 = require_lodash_merge(); - var MAX_LEVEL = 20; - function merge2(...args) { - let result = args.shift(); - const objects = new WeakMap; - while (args.length > 0) { - result = mergeTwoObjects(result, args.shift(), 0, objects); - } - return result; - } - exports.merge = merge2; - function takeValue(value) { - if (isArray(value)) { - return value.slice(); - } - return value; - } - function mergeTwoObjects(one, two, level = 0, objects) { - let result; - if (level > MAX_LEVEL) { - return; - } - level++; - if (isPrimitive(one) || isPrimitive(two) || isFunction(two)) { - result = takeValue(two); - } else if (isArray(one)) { - result = one.slice(); - if (isArray(two)) { - for (let i = 0, j = two.length;i < j; i++) { - result.push(takeValue(two[i])); - } - } else if (isObject2(two)) { - const keys = Object.keys(two); - for (let i = 0, j = keys.length;i < j; i++) { - const key = keys[i]; - result[key] = takeValue(two[key]); - } - } - } else if (isObject2(one)) { - if (isObject2(two)) { - if (!shouldMerge(one, two)) { - return two; - } - result = Object.assign({}, one); - const keys = Object.keys(two); - for (let i = 0, j = keys.length;i < j; i++) { - const key = keys[i]; - const twoValue = two[key]; - if (isPrimitive(twoValue)) { - if (typeof twoValue === "undefined") { - delete result[key]; - } else { - result[key] = twoValue; - } - } else { - const obj1 = result[key]; - const obj2 = twoValue; - if (wasObjectReferenced(one, key, objects) || wasObjectReferenced(two, key, objects)) { - delete result[key]; - } else { - if (isObject2(obj1) && isObject2(obj2)) { - const arr1 = objects.get(obj1) || []; - const arr2 = objects.get(obj2) || []; - arr1.push({ obj: one, key }); - arr2.push({ obj: two, key }); - objects.set(obj1, arr1); - objects.set(obj2, arr2); - } - result[key] = mergeTwoObjects(result[key], twoValue, level, objects); - } - } - } - } else { - result = two; - } - } - return result; - } - function wasObjectReferenced(obj, key, objects) { - const arr = objects.get(obj[key]) || []; - for (let i = 0, j = arr.length;i < j; i++) { - const info = arr[i]; - if (info.key === key && info.obj === obj) { - return true; - } - } - return false; - } - function isArray(value) { - return Array.isArray(value); - } - function isFunction(value) { - return typeof value === "function"; - } - function isObject2(value) { - return !isPrimitive(value) && !isArray(value) && !isFunction(value) && typeof value === "object"; - } - function isPrimitive(value) { - return typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "undefined" || value instanceof Date || value instanceof RegExp || value === null; - } - function shouldMerge(one, two) { - if (!(0, lodash_merge_1.isPlainObject)(one) || !(0, lodash_merge_1.isPlainObject)(two)) { - return false; - } - return true; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/timeout.js -var require_timeout = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.callWithTimeout = exports.TimeoutError = undefined; - - class TimeoutError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, TimeoutError.prototype); - } - } - exports.TimeoutError = TimeoutError; - function callWithTimeout(promise2, timeout) { - let timeoutHandle; - const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) { - timeoutHandle = setTimeout(function timeoutHandler() { - reject(new TimeoutError("Operation timed out.")); - }, timeout); - }); - return Promise.race([promise2, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle); - return result; - }, (reason) => { - clearTimeout(timeoutHandle); - throw reason; - }); - } - exports.callWithTimeout = callWithTimeout; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/url.js -var require_url = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isUrlIgnored = exports.urlMatches = undefined; - function urlMatches(url2, urlToMatch) { - if (typeof urlToMatch === "string") { - return url2 === urlToMatch; - } else { - return !!url2.match(urlToMatch); - } - } - exports.urlMatches = urlMatches; - function isUrlIgnored(url2, ignoredUrls) { - if (!ignoredUrls) { - return false; - } - for (const ignoreUrl of ignoredUrls) { - if (urlMatches(url2, ignoreUrl)) { - return true; - } - } - return false; - } - exports.isUrlIgnored = isUrlIgnored; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/promise.js -var require_promise = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Deferred = undefined; - - class Deferred { - _promise; - _resolve; - _reject; - constructor() { - this._promise = new Promise((resolve2, reject) => { - this._resolve = resolve2; - this._reject = reject; - }); - } - get promise() { - return this._promise; - } - resolve(val) { - this._resolve(val); - } - reject(err) { - this._reject(err); - } - } - exports.Deferred = Deferred; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/callback.js -var require_callback = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindOnceFuture = undefined; - var promise_1 = require_promise(); - - class BindOnceFuture { - _isCalled = false; - _deferred = new promise_1.Deferred; - _callback; - _that; - constructor(callback, that) { - this._callback = callback; - this._that = that; - } - get isCalled() { - return this._isCalled; - } - get promise() { - return this._deferred.promise; - } - call(...args) { - if (!this._isCalled) { - this._isCalled = true; - try { - Promise.resolve(this._callback.call(this._that, ...args)).then((val) => this._deferred.resolve(val), (err) => this._deferred.reject(err)); - } catch (err) { - this._deferred.reject(err); - } - } - return this._deferred.promise; - } - } - exports.BindOnceFuture = BindOnceFuture; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/configuration.js -var require_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.diagLogLevelFromString = undefined; - var api_1 = require_src(); - var logLevelMap = { - ALL: api_1.DiagLogLevel.ALL, - VERBOSE: api_1.DiagLogLevel.VERBOSE, - DEBUG: api_1.DiagLogLevel.DEBUG, - INFO: api_1.DiagLogLevel.INFO, - WARN: api_1.DiagLogLevel.WARN, - ERROR: api_1.DiagLogLevel.ERROR, - NONE: api_1.DiagLogLevel.NONE - }; - function diagLogLevelFromString(value) { - if (value == null) { - return; - } - const resolvedLogLevel = logLevelMap[value.toUpperCase()]; - if (resolvedLogLevel == null) { - api_1.diag.warn(`Unknown log level "${value}", expected one of ${Object.keys(logLevelMap)}, using default`); - return api_1.DiagLogLevel.INFO; - } - return resolvedLogLevel; - } - exports.diagLogLevelFromString = diagLogLevelFromString; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/internal/exporter.js -var require_exporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._export = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing(); - function _export(exporter, arg) { - return new Promise((resolve2) => { - api_1.context.with((0, suppress_tracing_1.suppressTracing)(api_1.context.active()), () => { - exporter.export(arg, (result) => { - resolve2(result); - }); - }); - }); - } - exports._export = _export; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/index.js -var require_src4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.internal = exports.diagLogLevelFromString = exports.BindOnceFuture = exports.urlMatches = exports.isUrlIgnored = exports.callWithTimeout = exports.TimeoutError = exports.merge = exports.TraceState = exports.unsuppressTracing = exports.suppressTracing = exports.isTracingSuppressed = exports.setRPCMetadata = exports.getRPCMetadata = exports.deleteRPCMetadata = exports.RPCType = exports.parseTraceParent = exports.W3CTraceContextPropagator = exports.TRACE_STATE_HEADER = exports.TRACE_PARENT_HEADER = exports.CompositePropagator = exports.otperformance = exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = exports._globalThis = exports.SDK_INFO = exports.parseKeyPairsIntoRecord = exports.ExportResultCode = exports.unrefTimer = exports.timeInputToHrTime = exports.millisToHrTime = exports.isTimeInputHrTime = exports.isTimeInput = exports.hrTimeToTimeStamp = exports.hrTimeToNanoseconds = exports.hrTimeToMilliseconds = exports.hrTimeToMicroseconds = exports.hrTimeDuration = exports.hrTime = exports.getTimeOrigin = exports.addHrTimes = exports.loggingErrorHandler = exports.setGlobalErrorHandler = exports.globalErrorHandler = exports.sanitizeAttributes = exports.isAttributeValue = exports.AnchoredClock = exports.W3CBaggagePropagator = undefined; - var W3CBaggagePropagator_1 = require_W3CBaggagePropagator(); - Object.defineProperty(exports, "W3CBaggagePropagator", { enumerable: true, get: function() { - return W3CBaggagePropagator_1.W3CBaggagePropagator; - } }); - var anchored_clock_1 = require_anchored_clock(); - Object.defineProperty(exports, "AnchoredClock", { enumerable: true, get: function() { - return anchored_clock_1.AnchoredClock; - } }); - var attributes_1 = require_attributes(); - Object.defineProperty(exports, "isAttributeValue", { enumerable: true, get: function() { - return attributes_1.isAttributeValue; - } }); - Object.defineProperty(exports, "sanitizeAttributes", { enumerable: true, get: function() { - return attributes_1.sanitizeAttributes; - } }); - var global_error_handler_1 = require_global_error_handler(); - Object.defineProperty(exports, "globalErrorHandler", { enumerable: true, get: function() { - return global_error_handler_1.globalErrorHandler; - } }); - Object.defineProperty(exports, "setGlobalErrorHandler", { enumerable: true, get: function() { - return global_error_handler_1.setGlobalErrorHandler; - } }); - var logging_error_handler_1 = require_logging_error_handler(); - Object.defineProperty(exports, "loggingErrorHandler", { enumerable: true, get: function() { - return logging_error_handler_1.loggingErrorHandler; - } }); - var time_1 = require_time(); - Object.defineProperty(exports, "addHrTimes", { enumerable: true, get: function() { - return time_1.addHrTimes; - } }); - Object.defineProperty(exports, "getTimeOrigin", { enumerable: true, get: function() { - return time_1.getTimeOrigin; - } }); - Object.defineProperty(exports, "hrTime", { enumerable: true, get: function() { - return time_1.hrTime; - } }); - Object.defineProperty(exports, "hrTimeDuration", { enumerable: true, get: function() { - return time_1.hrTimeDuration; - } }); - Object.defineProperty(exports, "hrTimeToMicroseconds", { enumerable: true, get: function() { - return time_1.hrTimeToMicroseconds; - } }); - Object.defineProperty(exports, "hrTimeToMilliseconds", { enumerable: true, get: function() { - return time_1.hrTimeToMilliseconds; - } }); - Object.defineProperty(exports, "hrTimeToNanoseconds", { enumerable: true, get: function() { - return time_1.hrTimeToNanoseconds; - } }); - Object.defineProperty(exports, "hrTimeToTimeStamp", { enumerable: true, get: function() { - return time_1.hrTimeToTimeStamp; - } }); - Object.defineProperty(exports, "isTimeInput", { enumerable: true, get: function() { - return time_1.isTimeInput; - } }); - Object.defineProperty(exports, "isTimeInputHrTime", { enumerable: true, get: function() { - return time_1.isTimeInputHrTime; - } }); - Object.defineProperty(exports, "millisToHrTime", { enumerable: true, get: function() { - return time_1.millisToHrTime; - } }); - Object.defineProperty(exports, "timeInputToHrTime", { enumerable: true, get: function() { - return time_1.timeInputToHrTime; - } }); - var timer_util_1 = require_timer_util(); - Object.defineProperty(exports, "unrefTimer", { enumerable: true, get: function() { - return timer_util_1.unrefTimer; - } }); - var ExportResult_1 = require_ExportResult(); - Object.defineProperty(exports, "ExportResultCode", { enumerable: true, get: function() { - return ExportResult_1.ExportResultCode; - } }); - var utils_1 = require_utils3(); - Object.defineProperty(exports, "parseKeyPairsIntoRecord", { enumerable: true, get: function() { - return utils_1.parseKeyPairsIntoRecord; - } }); - var platform_1 = require_platform2(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return platform_1.SDK_INFO; - } }); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return platform_1._globalThis; - } }); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return platform_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return platform_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return platform_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return platform_1.getStringListFromEnv; - } }); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return platform_1.otperformance; - } }); - var composite_1 = require_composite(); - Object.defineProperty(exports, "CompositePropagator", { enumerable: true, get: function() { - return composite_1.CompositePropagator; - } }); - var W3CTraceContextPropagator_1 = require_W3CTraceContextPropagator(); - Object.defineProperty(exports, "TRACE_PARENT_HEADER", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.TRACE_PARENT_HEADER; - } }); - Object.defineProperty(exports, "TRACE_STATE_HEADER", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.TRACE_STATE_HEADER; - } }); - Object.defineProperty(exports, "W3CTraceContextPropagator", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.W3CTraceContextPropagator; - } }); - Object.defineProperty(exports, "parseTraceParent", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.parseTraceParent; - } }); - var rpc_metadata_1 = require_rpc_metadata(); - Object.defineProperty(exports, "RPCType", { enumerable: true, get: function() { - return rpc_metadata_1.RPCType; - } }); - Object.defineProperty(exports, "deleteRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.deleteRPCMetadata; - } }); - Object.defineProperty(exports, "getRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.getRPCMetadata; - } }); - Object.defineProperty(exports, "setRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.setRPCMetadata; - } }); - var suppress_tracing_1 = require_suppress_tracing(); - Object.defineProperty(exports, "isTracingSuppressed", { enumerable: true, get: function() { - return suppress_tracing_1.isTracingSuppressed; - } }); - Object.defineProperty(exports, "suppressTracing", { enumerable: true, get: function() { - return suppress_tracing_1.suppressTracing; - } }); - Object.defineProperty(exports, "unsuppressTracing", { enumerable: true, get: function() { - return suppress_tracing_1.unsuppressTracing; - } }); - var TraceState_1 = require_TraceState(); - Object.defineProperty(exports, "TraceState", { enumerable: true, get: function() { - return TraceState_1.TraceState; - } }); - var merge_1 = require_merge(); - Object.defineProperty(exports, "merge", { enumerable: true, get: function() { - return merge_1.merge; - } }); - var timeout_1 = require_timeout(); - Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function() { - return timeout_1.TimeoutError; - } }); - Object.defineProperty(exports, "callWithTimeout", { enumerable: true, get: function() { - return timeout_1.callWithTimeout; - } }); - var url_1 = require_url(); - Object.defineProperty(exports, "isUrlIgnored", { enumerable: true, get: function() { - return url_1.isUrlIgnored; - } }); - Object.defineProperty(exports, "urlMatches", { enumerable: true, get: function() { - return url_1.urlMatches; - } }); - var callback_1 = require_callback(); - Object.defineProperty(exports, "BindOnceFuture", { enumerable: true, get: function() { - return callback_1.BindOnceFuture; - } }); - var configuration_1 = require_configuration(); - Object.defineProperty(exports, "diagLogLevelFromString", { enumerable: true, get: function() { - return configuration_1.diagLogLevelFromString; - } }); - var exporter_1 = require_exporter(); - exports.internal = { - _export: exporter_1._export - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/stream.js -var init_stream3 = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/streaming/utils.js -var init_utils = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/streaming/stream.js -var init_stream4 = __esm(() => { - init_stream3(); - init_utils(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/streaming/sse.js -var init_sse = __esm(() => { - init_html(); - init_stream3(); - init_utils(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/streaming/text.js -var init_text = __esm(() => { - init_context(); - init_streaming(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/streaming/index.js -var init_streaming = __esm(() => { - init_stream4(); - init_sse(); - init_text(); -}); - -// ../../../../packages/runtime/dist/handlers/sse.js -var STREAM_DONE_PROMISE_KEY = "_streamDonePromise", IS_STREAMING_RESPONSE_KEY = "_isStreamingResponse"; -var init_sse2 = __esm(() => { - init_streaming(); -}); - -// ../../../../packages/runtime/dist/_waituntil.js -var exports__waituntil = {}; -__export(exports__waituntil, { - hasWaitUntilPending: () => hasWaitUntilPending, - default: () => WaitUntilHandler -}); -function hasWaitUntilPending() { - internal.debug("hasWaitUntilPending called: %d", running); - return running > 0; -} - -class WaitUntilHandler { - promises; - tracer; - started; - hasCalledWaitUntilAll = false; - constructor(tracer) { - this.tracer = tracer; - this.promises = []; - } - waitUntil(promise2) { - if (this.hasCalledWaitUntilAll) { - throw new WaitUntilInvalidStateError; - } - running++; - internal.debug("wait until called, running: %d", running); - const currentContext = import_api31.context.active(); - const executingPromise = (async () => { - if (this.started === undefined) { - this.started = Date.now(); - } - const span = this.tracer.startSpan("waitUntil", {}, currentContext); - const spanContext = import_api31.trace.setSpan(currentContext, span); - try { - internal.debug("starting waituntil"); - await import_api31.context.with(spanContext, async () => { - const resolvedPromise = typeof promise2 === "function" ? promise2() : promise2; - return await Promise.resolve(resolvedPromise); - }); - internal.debug("completed waituntil"); - span.setStatus({ code: import_api31.SpanStatusCode.OK }); - } catch (ex) { - span.recordException(ex); - span.setStatus({ code: import_api31.SpanStatusCode.ERROR }); - internal.error("Background task error: %s", ex); - } finally { - span.end(); - } - })(); - this.promises.push(executingPromise); - } - hasPending() { - return this.promises.length > 0; - } - async waitUntilAll(logger, sessionId) { - internal.debug(`\uD83D\uDD0D waitUntilAll() called for session ${sessionId} (count: %d)`, running); - if (this.hasCalledWaitUntilAll) { - throw new WaitUntilAllInvalidStateError; - } - this.hasCalledWaitUntilAll = true; - if (this.promises.length === 0) { - internal.debug("No promises to wait for, executing evals directly"); - return; - } - internal.debug(`\u23F3 Waiting for ${this.promises.length} promises to complete...`); - try { - const results = await Promise.allSettled(this.promises); - const duration3 = Date.now() - this.started; - const failures = results.filter((r) => r.status === "rejected"); - if (failures.length > 0) { - logger.error("%d background task(s) failed during execution", failures.length); - } - internal.debug("\u2705 All promises completed, marking session completed (duration %dms)", duration3); - } catch (ex) { - logger.error("error sending session completed", ex); - } finally { - running -= this.promises.length; - this.promises.length = 0; - } - } -} -var import_api31, running = 0, WaitUntilInvalidStateError, WaitUntilAllInvalidStateError; -var init__waituntil = __esm(() => { - init_internal(); - init_dist(); - import_api31 = __toESM(require_src(), 1); - WaitUntilInvalidStateError = StructuredError("WaitUntilInvalidStateError", "waitUntil cannot be called after waitUntilAll has been called"); - WaitUntilAllInvalidStateError = StructuredError("WaitUntilAllInvalidStateError", "waitUntilAll can only be called once per instance"); -}); - -// ../../../../packages/runtime/dist/middleware.js -function installContextPropertyHelpers(c) { - for (const property of AGENT_CONTEXT_PROPERTIES) { - if (Object.prototype.hasOwnProperty.call(c, property)) { - continue; - } - Object.defineProperty(c, property, { - get() { - throw new Error(`In route handlers, use c.var.${property} instead of c.${property}. ` + `The property '${property}' is available on AgentContext (for agent handlers) ` + `but must be accessed via c.var in HonoContext (route handlers).`); - }, - configurable: true, - enumerable: false - }); - } -} -function createBaseMiddleware(config2) { - return createMiddleware(async (c, next) => { - c.set("logger", config2.logger); - c.set("tracer", config2.tracer); - c.set("meter", config2.meter); - const { getServices: getServices2 } = await Promise.resolve().then(() => (init__services(), exports__services)); - const { getAppState: getAppState2 } = await Promise.resolve().then(() => (init_app(), exports_app)); - c.set("app", getAppState2()); - const services = getServices2(); - c.set("kv", services.kv); - c.set("stream", services.stream); - c.set("vector", services.vector); - c.set("sandbox", services.sandbox); - installContextPropertyHelpers(c); - const isWebSocket = c.req.header("upgrade")?.toLowerCase() === "websocket"; - const skipLogging = c.req.path.startsWith("/_agentuity/"); - const started = performance.now(); - if (!skipLogging) { - config2.logger.debug("%s %s started", c.req.method, c.req.path); - } - await runInHTTPContext(c, next); - if (!isWebSocket) { - const endTime = performance.now(); - const duration3 = ((endTime - started) / 1000).toFixed(1); - c.header(DURATION_HEADER, `${duration3}s`); - const deploymentId = getDeploymentId(); - if (deploymentId) { - c.header(DEPLOYMENT_HEADER, deploymentId); - } - } - if (!skipLogging && !isWebSocket) { - config2.logger.debug("%s %s completed (%d) in %sms", c.req.method, c.req.path, c.res.status, Number(performance.now() - started).toFixed(2)); - } - }); -} -function createCorsMiddleware(staticOptions) { - return createMiddleware(async (c, next) => { - const appConfig = getAppConfig(); - const appCors = appConfig?.cors; - const corsOptions = { - ...appCors, - ...staticOptions - }; - const { sameOrigin, allowedOrigins, ...honoCorsOptions } = corsOptions; - let originHandler; - if (sameOrigin) { - originHandler = createTrustedCorsOrigin({ allowedOrigins }); - } else if (honoCorsOptions.origin !== undefined) { - originHandler = honoCorsOptions.origin; - } else { - originHandler = (origin) => origin; - } - const requiredAllowHeaders = [THREAD_HEADER]; - const requiredExposeHeaders = [ - TOKENS_HEADER, - DURATION_HEADER, - THREAD_HEADER, - SESSION_HEADER, - DEPLOYMENT_HEADER - ]; - const defaultAllowHeaders = [ - "Content-Type", - "Authorization", - "Accept", - "Origin", - "X-Requested-With" - ]; - const defaultExposeHeaders = ["Content-Length"]; - const corsMiddleware = cors({ - ...honoCorsOptions, - origin: originHandler, - allowHeaders: [ - ...honoCorsOptions.allowHeaders ?? defaultAllowHeaders, - ...requiredAllowHeaders - ], - allowMethods: honoCorsOptions.allowMethods ?? [ - "POST", - "GET", - "OPTIONS", - "HEAD", - "PUT", - "DELETE", - "PATCH" - ], - exposeHeaders: [ - ...honoCorsOptions.exposeHeaders ?? defaultExposeHeaders, - ...requiredExposeHeaders - ], - maxAge: honoCorsOptions.maxAge ?? 600, - credentials: honoCorsOptions.credentials ?? true - }); - return corsMiddleware(c, next); - }); -} -function createOtelMiddleware() { - return createMiddleware(async (c, next) => { - if (OTEL_SESSION_SKIP_PATHS.has(c.req.path)) { - return next(); - } - const { getThreadProvider: getThreadProvider2, getSessionProvider: getSessionProvider2 } = await Promise.resolve().then(() => (init__services(), exports__services)); - const WaitUntilHandler2 = (await Promise.resolve().then(() => (init__waituntil(), exports__waituntil))).default; - const extractedContext = extractTraceContextFromRequest(c.req.raw); - const method = c.req.method; - const url2 = new URL(c.req.url); - const threadProvider = getThreadProvider2(); - const sessionProvider = getSessionProvider2(); - await import_api32.context.with(extractedContext, async () => { - const tracer = import_api32.trace.getTracer("http-server"); - await tracer.startActiveSpan(`HTTP ${method}`, { - kind: import_api32.SpanKind.SERVER, - attributes: { - "http.method": method, - "http.host": url2.host, - "http.user_agent": c.req.header("user-agent") || "", - "http.path": url2.pathname - } - }, async (span) => { - const sctx = span.spanContext(); - const sessionId = sctx?.traceId ? `sess_${sctx.traceId}` : generateId("sess"); - let traceState = sctx.traceState ?? new import_core19.TraceState; - const projectId = getProjectId(); - const orgId = getOrganizationId(); - const deploymentId = getDeploymentId(); - const isDevMode2 = isDevMode(); - internal.info("[session] config: orgId=%s, projectId=%s, deploymentId=%s, isDevMode=%s", orgId ?? "NOT SET (AGENTUITY_CLOUD_ORG_ID)", projectId ?? "NOT SET (AGENTUITY_CLOUD_PROJECT_ID)", deploymentId ?? "none", isDevMode2); - if (projectId) - traceState = traceState.set("pid", projectId); - if (orgId) - traceState = traceState.set("oid", orgId); - if (isDevMode2) - traceState = traceState.set("d", "1"); - import_api32.trace.setSpan(import_api32.context.active(), import_api32.trace.wrapSpanContext({ - ...sctx, - traceState - })); - const thread3 = await threadProvider.restore(c); - const session3 = await sessionProvider.restore(thread3, sessionId); - const handler = new WaitUntilHandler2(tracer); - c.set("sessionId", sessionId); - c.set("thread", thread3); - c.set("session", session3); - c.set("waitUntilHandler", handler); - const agentIds = new Set; - c.set("agentIds", agentIds); - c.set("trigger", "api"); - const sessionEventProvider = getSessionEventProvider(); - if (sessionEventProvider) { - try { - const routeId = c.var?.routeId || ""; - await sessionEventProvider.start({ - id: sessionId, - threadId: thread3.id, - orgId: orgId || "", - projectId: projectId || "", - deploymentId: deploymentId || undefined, - devmode: isDevMode2, - trigger: "api", - routeId, - environment: getEnvironment(), - url: c.req.path, - method: c.req.method - }); - } catch (_ex) {} - } - const finalizeSession = async (statusCode) => { - internal.info("[session] saving session %s (thread: %s)", sessionId, thread3.id); - await sessionProvider.save(session3); - internal.info("[session] session saved, now saving thread"); - await threadProvider.save(thread3); - internal.info("[session] thread saved"); - if (sessionEventProvider) { - try { - const userData = session3.serializeUserData(); - internal.info("[session] sending session complete event, userData: %s", userData ? `${userData.length} bytes` : "none"); - const agentIdsSet = c.get("agentIds"); - const agentIds2 = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - internal.info("[session] agentIds: %o", agentIds2); - const isEmpty = await thread3.empty(); - await sessionEventProvider.complete({ - id: sessionId, - threadId: isEmpty ? null : thread3.id, - statusCode: statusCode ?? c.res?.status ?? 200, - agentIds: agentIds2?.length ? agentIds2 : undefined, - userData - }); - internal.info("[session] session complete event sent"); - } catch (ex) { - internal.info("[session] session complete event failed: %s", ex); - } - } - }; - try { - await next(); - const streamDone = c.get(STREAM_DONE_PROMISE_KEY); - const isStreaming = Boolean(c.get(IS_STREAMING_RESPONSE_KEY)); - if (isStreaming && streamDone) { - internal.info("[session] deferring session/thread save until streaming completes (session %s)", sessionId); - handler.waitUntil(async () => { - try { - await streamDone; - internal.info("[session] stream completed, now saving session/thread (session %s)", sessionId); - } catch (ex) { - internal.info("[session] stream ended with error, still saving state: %s", ex); - } - await finalizeSession(); - }); - span.setStatus({ code: import_api32.SpanStatusCode.OK }); - } else { - await finalizeSession(); - span.setStatus({ code: import_api32.SpanStatusCode.OK }); - } - } catch (ex) { - if (ex instanceof Error) { - span.recordException(ex); - } - span.setStatus({ - code: import_api32.SpanStatusCode.ERROR, - message: ex.message ?? String(ex) - }); - throw ex; - } finally { - const headers = {}; - import_api32.propagation.inject(import_api32.context.active(), headers); - for (const key of Object.keys(headers)) { - c.header(key, headers[key]); - } - const traceId = sctx?.traceId || sessionId.replace(/^sess_/, ""); - c.header(SESSION_HEADER, `sess_${traceId}`); - span.end(); - } - }); - }); - }); -} -function createCompressionMiddleware(staticConfig, configResolver) { - return createMiddleware(async (c, next) => { - const appConfig = configResolver ? configResolver() : getAppConfig(); - const appCompressionConfig = appConfig?.compression; - if (appCompressionConfig === false || staticConfig?.enabled === false) { - return next(); - } - const config2 = { - ...typeof appCompressionConfig === "object" ? appCompressionConfig : {}, - ...staticConfig - }; - const { enabled = true, threshold = 1024, filter, honoOptions } = config2; - if (!enabled) { - return next(); - } - const upgrade = c.req.header("upgrade"); - if (upgrade && upgrade.toLowerCase() === "websocket") { - return next(); - } - const acceptEncoding = c.req.header("accept-encoding"); - if (!acceptEncoding) { - return next(); - } - if (filter && !filter(c)) { - return next(); - } - const compressMiddleware = compress({ - threshold, - ...honoOptions - }); - await compressMiddleware(c, next); - }); -} -function createWebSessionMiddleware() { - return createMiddleware(async (c, next) => { - const { getThreadProvider: getThreadProvider2 } = await Promise.resolve().then(() => (init__services(), exports__services)); - const secret = getSessionSecret(); - const threadProvider = getThreadProvider2(); - const thread3 = await threadProvider.restore(c); - const isSecure = c.req.url.startsWith("https://"); - await setSignedCookie(c, "atid_a", thread3.id, secret, { - httpOnly: false, - secure: isSecure, - sameSite: "Lax", - path: "/", - maxAge: 604800 - }); - c.set("_webThreadId", thread3.id); - await next(); - }); -} -function getSessionSecret() { - return process.env.AGENTUITY_SDK_KEY || "agentuity"; -} -var import_api32, import_core19, SESSION_HEADER = "x-session-id", THREAD_HEADER = "x-thread-id", DEPLOYMENT_HEADER = "x-deployment", OTEL_SESSION_SKIP_PATHS, AGENT_CONTEXT_PROPERTIES; -var init_middleware = __esm(() => { - init_factory(); - init_cors(); - init_compress2(); - init_cookie2(); - init_app(); - init_session4(); - init__context(); - init__tokens(); - init_http4(); - init__config(); - init__services(); - init_internal(); - init_sse2(); - import_api32 = __toESM(require_src(), 1); - import_core19 = __toESM(require_src4(), 1); - OTEL_SESSION_SKIP_PATHS = new Set([ - "/_agentuity/workbench/ws", - "/_agentuity/workbench/sample", - "/_agentuity/workbench/state", - "/_agentuity/workbench/metadata.json", - "/_agentuity/webanalytics/analytics.js", - "/_agentuity/webanalytics/session.js" - ]); - AGENT_CONTEXT_PROPERTIES = [ - "logger", - "tracer", - "sessionId", - "kv", - "stream", - "vector", - "sandbox", - "state", - "thread", - "session", - "config", - "app", - "waitUntil" - ]; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/default-service-name.js -var require_default_service_name = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - var DEFAULT_SERVICE_NAME = typeof process === "object" && typeof process.argv0 === "string" && process.argv0.length > 0 ? `unknown_service:${process.argv0}` : "unknown_service"; - function defaultServiceName() { - return DEFAULT_SERVICE_NAME; - } - exports.defaultServiceName = defaultServiceName; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/utils.js -var require_utils5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isPromiseLike = undefined; - var isPromiseLike = (val) => { - return val !== null && typeof val === "object" && typeof val.then === "function"; - }; - exports.isPromiseLike = isPromiseLike; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/ResourceImpl.js -var require_ResourceImpl = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultResource = exports.emptyResource = exports.resourceFromDetectedResource = exports.resourceFromAttributes = undefined; - var api_1 = require_src(); - var core_1 = require_src4(); - var semantic_conventions_1 = require_src3(); - var default_service_name_1 = require_default_service_name(); - var utils_1 = require_utils5(); - - class ResourceImpl { - _rawAttributes; - _asyncAttributesPending = false; - _schemaUrl; - _memoizedAttributes; - static FromAttributeList(attributes, options) { - const res = new ResourceImpl({}, options); - res._rawAttributes = guardedRawAttributes(attributes); - res._asyncAttributesPending = attributes.filter(([_, val]) => (0, utils_1.isPromiseLike)(val)).length > 0; - return res; - } - constructor(resource, options) { - const attributes = resource.attributes ?? {}; - this._rawAttributes = Object.entries(attributes).map(([k, v]) => { - if ((0, utils_1.isPromiseLike)(v)) { - this._asyncAttributesPending = true; - } - return [k, v]; - }); - this._rawAttributes = guardedRawAttributes(this._rawAttributes); - this._schemaUrl = validateSchemaUrl(options?.schemaUrl); - } - get asyncAttributesPending() { - return this._asyncAttributesPending; - } - async waitForAsyncAttributes() { - if (!this.asyncAttributesPending) { - return; - } - for (let i = 0;i < this._rawAttributes.length; i++) { - const [k, v] = this._rawAttributes[i]; - this._rawAttributes[i] = [k, (0, utils_1.isPromiseLike)(v) ? await v : v]; - } - this._asyncAttributesPending = false; - } - get attributes() { - if (this.asyncAttributesPending) { - api_1.diag.error("Accessing resource attributes before async attributes settled"); - } - if (this._memoizedAttributes) { - return this._memoizedAttributes; - } - const attrs = {}; - for (const [k, v] of this._rawAttributes) { - if ((0, utils_1.isPromiseLike)(v)) { - api_1.diag.debug(`Unsettled resource attribute ${k} skipped`); - continue; - } - if (v != null) { - attrs[k] ??= v; - } - } - if (!this._asyncAttributesPending) { - this._memoizedAttributes = attrs; - } - return attrs; - } - getRawAttributes() { - return this._rawAttributes; - } - get schemaUrl() { - return this._schemaUrl; - } - merge(resource) { - if (resource == null) - return this; - const mergedSchemaUrl = mergeSchemaUrl(this, resource); - const mergedOptions = mergedSchemaUrl ? { schemaUrl: mergedSchemaUrl } : undefined; - return ResourceImpl.FromAttributeList([...resource.getRawAttributes(), ...this.getRawAttributes()], mergedOptions); - } - } - function resourceFromAttributes(attributes, options) { - return ResourceImpl.FromAttributeList(Object.entries(attributes), options); - } - exports.resourceFromAttributes = resourceFromAttributes; - function resourceFromDetectedResource(detectedResource, options) { - return new ResourceImpl(detectedResource, options); - } - exports.resourceFromDetectedResource = resourceFromDetectedResource; - function emptyResource() { - return resourceFromAttributes({}); - } - exports.emptyResource = emptyResource; - function defaultResource() { - return resourceFromAttributes({ - [semantic_conventions_1.ATTR_SERVICE_NAME]: (0, default_service_name_1.defaultServiceName)(), - [semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE], - [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME], - [semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION] - }); - } - exports.defaultResource = defaultResource; - function guardedRawAttributes(attributes) { - return attributes.map(([k, v]) => { - if ((0, utils_1.isPromiseLike)(v)) { - return [ - k, - v.catch((err) => { - api_1.diag.debug("promise rejection for resource attribute: %s - %s", k, err); - return; - }) - ]; - } - return [k, v]; - }); - } - function validateSchemaUrl(schemaUrl) { - if (typeof schemaUrl === "string" || schemaUrl === undefined) { - return schemaUrl; - } - api_1.diag.warn("Schema URL must be string or undefined, got %s. Schema URL will be ignored.", schemaUrl); - return; - } - function mergeSchemaUrl(old, updating) { - const oldSchemaUrl = old?.schemaUrl; - const updatingSchemaUrl = updating?.schemaUrl; - const isOldEmpty = oldSchemaUrl === undefined || oldSchemaUrl === ""; - const isUpdatingEmpty = updatingSchemaUrl === undefined || updatingSchemaUrl === ""; - if (isOldEmpty) { - return updatingSchemaUrl; - } - if (isUpdatingEmpty) { - return oldSchemaUrl; - } - if (oldSchemaUrl === updatingSchemaUrl) { - return oldSchemaUrl; - } - api_1.diag.warn('Schema URL merge conflict: old resource has "%s", updating resource has "%s". Resulting resource will have undefined Schema URL.', oldSchemaUrl, updatingSchemaUrl); - return; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detect-resources.js -var require_detect_resources = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.detectResources = undefined; - var api_1 = require_src(); - var ResourceImpl_1 = require_ResourceImpl(); - var detectResources = (config2 = {}) => { - const resources3 = (config2.detectors || []).map((d) => { - try { - const resource = (0, ResourceImpl_1.resourceFromDetectedResource)(d.detect(config2)); - api_1.diag.debug(`${d.constructor.name} found resource.`, resource); - return resource; - } catch (e) { - api_1.diag.debug(`${d.constructor.name} failed: ${e.message}`); - return (0, ResourceImpl_1.emptyResource)(); - } - }); - return resources3.reduce((acc, resource) => acc.merge(resource), (0, ResourceImpl_1.emptyResource)()); - }; - exports.detectResources = detectResources; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/EnvDetector.js -var require_EnvDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.envDetector = undefined; - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var core_1 = require_src4(); - - class EnvDetector { - _MAX_LENGTH = 255; - _COMMA_SEPARATOR = ","; - _LABEL_KEY_VALUE_SPLITTER = "="; - _ERROR_MESSAGE_INVALID_CHARS = "should be a ASCII string with a length greater than 0 and not exceed " + this._MAX_LENGTH + " characters."; - _ERROR_MESSAGE_INVALID_VALUE = "should be a ASCII string with a length not exceed " + this._MAX_LENGTH + " characters."; - detect(_config) { - const attributes = {}; - const rawAttributes = (0, core_1.getStringFromEnv)("OTEL_RESOURCE_ATTRIBUTES"); - const serviceName = (0, core_1.getStringFromEnv)("OTEL_SERVICE_NAME"); - if (rawAttributes) { - try { - const parsedAttributes = this._parseResourceAttributes(rawAttributes); - Object.assign(attributes, parsedAttributes); - } catch (e) { - api_1.diag.debug(`EnvDetector failed: ${e.message}`); - } - } - if (serviceName) { - attributes[semantic_conventions_1.ATTR_SERVICE_NAME] = serviceName; - } - return { attributes }; - } - _parseResourceAttributes(rawEnvAttributes) { - if (!rawEnvAttributes) - return {}; - const attributes = {}; - const rawAttributes = rawEnvAttributes.split(this._COMMA_SEPARATOR, -1); - for (const rawAttribute of rawAttributes) { - const keyValuePair = rawAttribute.split(this._LABEL_KEY_VALUE_SPLITTER, -1); - if (keyValuePair.length !== 2) { - continue; - } - let [key, value] = keyValuePair; - key = key.trim(); - value = value.trim().split(/^"|"$/).join(""); - if (!this._isValidAndNotEmpty(key)) { - throw new Error(`Attribute key ${this._ERROR_MESSAGE_INVALID_CHARS}`); - } - if (!this._isValid(value)) { - throw new Error(`Attribute value ${this._ERROR_MESSAGE_INVALID_VALUE}`); - } - attributes[key] = decodeURIComponent(value); - } - return attributes; - } - _isValid(name) { - return name.length <= this._MAX_LENGTH && this._isBaggageOctetString(name); - } - _isBaggageOctetString(str) { - for (let i = 0;i < str.length; i++) { - const ch = str.charCodeAt(i); - if (ch < 33 || ch === 44 || ch === 59 || ch === 92 || ch > 126) { - return false; - } - } - return true; - } - _isValidAndNotEmpty(str) { - return str.length > 0 && this._isValid(str); - } - } - exports.envDetector = new EnvDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/semconv.js -var require_semconv2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_WEBENGINE_VERSION = exports.ATTR_WEBENGINE_NAME = exports.ATTR_WEBENGINE_DESCRIPTION = exports.ATTR_SERVICE_NAMESPACE = exports.ATTR_SERVICE_INSTANCE_ID = exports.ATTR_PROCESS_RUNTIME_VERSION = exports.ATTR_PROCESS_RUNTIME_NAME = exports.ATTR_PROCESS_RUNTIME_DESCRIPTION = exports.ATTR_PROCESS_PID = exports.ATTR_PROCESS_OWNER = exports.ATTR_PROCESS_EXECUTABLE_PATH = exports.ATTR_PROCESS_EXECUTABLE_NAME = exports.ATTR_PROCESS_COMMAND_ARGS = exports.ATTR_PROCESS_COMMAND = exports.ATTR_OS_VERSION = exports.ATTR_OS_TYPE = exports.ATTR_K8S_POD_NAME = exports.ATTR_K8S_NAMESPACE_NAME = exports.ATTR_K8S_DEPLOYMENT_NAME = exports.ATTR_K8S_CLUSTER_NAME = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_IMAGE_VERSION = exports.ATTR_HOST_IMAGE_NAME = exports.ATTR_HOST_IMAGE_ID = exports.ATTR_HOST_ID = exports.ATTR_HOST_ARCH = exports.ATTR_CONTAINER_NAME = exports.ATTR_CONTAINER_IMAGE_TAGS = exports.ATTR_CONTAINER_IMAGE_NAME = exports.ATTR_CONTAINER_ID = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_AVAILABILITY_ZONE = exports.ATTR_CLOUD_ACCOUNT_ID = undefined; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_CONTAINER_ID = "container.id"; - exports.ATTR_CONTAINER_IMAGE_NAME = "container.image.name"; - exports.ATTR_CONTAINER_IMAGE_TAGS = "container.image.tags"; - exports.ATTR_CONTAINER_NAME = "container.name"; - exports.ATTR_HOST_ARCH = "host.arch"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_IMAGE_ID = "host.image.id"; - exports.ATTR_HOST_IMAGE_NAME = "host.image.name"; - exports.ATTR_HOST_IMAGE_VERSION = "host.image.version"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.ATTR_K8S_CLUSTER_NAME = "k8s.cluster.name"; - exports.ATTR_K8S_DEPLOYMENT_NAME = "k8s.deployment.name"; - exports.ATTR_K8S_NAMESPACE_NAME = "k8s.namespace.name"; - exports.ATTR_K8S_POD_NAME = "k8s.pod.name"; - exports.ATTR_OS_TYPE = "os.type"; - exports.ATTR_OS_VERSION = "os.version"; - exports.ATTR_PROCESS_COMMAND = "process.command"; - exports.ATTR_PROCESS_COMMAND_ARGS = "process.command_args"; - exports.ATTR_PROCESS_EXECUTABLE_NAME = "process.executable.name"; - exports.ATTR_PROCESS_EXECUTABLE_PATH = "process.executable.path"; - exports.ATTR_PROCESS_OWNER = "process.owner"; - exports.ATTR_PROCESS_PID = "process.pid"; - exports.ATTR_PROCESS_RUNTIME_DESCRIPTION = "process.runtime.description"; - exports.ATTR_PROCESS_RUNTIME_NAME = "process.runtime.name"; - exports.ATTR_PROCESS_RUNTIME_VERSION = "process.runtime.version"; - exports.ATTR_SERVICE_INSTANCE_ID = "service.instance.id"; - exports.ATTR_SERVICE_NAMESPACE = "service.namespace"; - exports.ATTR_WEBENGINE_DESCRIPTION = "webengine.description"; - exports.ATTR_WEBENGINE_NAME = "webengine.name"; - exports.ATTR_WEBENGINE_VERSION = "webengine.version"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/execAsync.js -var require_execAsync = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.execAsync = undefined; - var child_process = __require("child_process"); - var util3 = __require("util"); - exports.execAsync = util3.promisify(child_process.exec); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-darwin.js -var require_getMachineId_darwin = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var execAsync_1 = require_execAsync(); - var api_1 = require_src(); - async function getMachineId() { - try { - const result = await (0, execAsync_1.execAsync)('ioreg -rd1 -c "IOPlatformExpertDevice"'); - const idLine = result.stdout.split(` -`).find((line) => line.includes("IOPlatformUUID")); - if (!idLine) { - return; - } - const parts = idLine.split('" = "'); - if (parts.length === 2) { - return parts[1].slice(0, -1); - } - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-linux.js -var require_getMachineId_linux = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var fs_1 = __require("fs"); - var api_1 = require_src(); - async function getMachineId() { - const paths = ["/etc/machine-id", "/var/lib/dbus/machine-id"]; - for (const path of paths) { - try { - const result = await fs_1.promises.readFile(path, { encoding: "utf8" }); - return result.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-bsd.js -var require_getMachineId_bsd = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var fs_1 = __require("fs"); - var execAsync_1 = require_execAsync(); - var api_1 = require_src(); - async function getMachineId() { - try { - const result = await fs_1.promises.readFile("/etc/hostid", { encoding: "utf8" }); - return result.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - try { - const result = await (0, execAsync_1.execAsync)("kenv -q smbios.system.uuid"); - return result.stdout.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-win.js -var require_getMachineId_win = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var process3 = __require("process"); - var execAsync_1 = require_execAsync(); - var api_1 = require_src(); - async function getMachineId() { - const args = "QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid"; - let command = "%windir%\\System32\\REG.exe"; - if (process3.arch === "ia32" && "PROCESSOR_ARCHITEW6432" in process3.env) { - command = "%windir%\\sysnative\\cmd.exe /c " + command; - } - try { - const result = await (0, execAsync_1.execAsync)(`${command} ${args}`); - const parts = result.stdout.split("REG_SZ"); - if (parts.length === 2) { - return parts[1].trim(); - } - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-unsupported.js -var require_getMachineId_unsupported = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var api_1 = require_src(); - async function getMachineId() { - api_1.diag.debug("could not read machine-id: unsupported platform"); - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId.js -var require_getMachineId = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var process3 = __require("process"); - var getMachineIdImpl; - async function getMachineId() { - if (!getMachineIdImpl) { - switch (process3.platform) { - case "darwin": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_darwin()))).getMachineId; - break; - case "linux": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_linux()))).getMachineId; - break; - case "freebsd": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_bsd()))).getMachineId; - break; - case "win32": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_win()))).getMachineId; - break; - default: - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_unsupported()))).getMachineId; - break; - } - } - return getMachineIdImpl(); - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/utils.js -var require_utils6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalizeType = exports.normalizeArch = undefined; - var normalizeArch = (nodeArchString) => { - switch (nodeArchString) { - case "arm": - return "arm32"; - case "ppc": - return "ppc32"; - case "x64": - return "amd64"; - default: - return nodeArchString; - } - }; - exports.normalizeArch = normalizeArch; - var normalizeType = (nodePlatform) => { - switch (nodePlatform) { - case "sunos": - return "solaris"; - case "win32": - return "windows"; - default: - return nodePlatform; - } - }; - exports.normalizeType = normalizeType; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/HostDetector.js -var require_HostDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hostDetector = undefined; - var semconv_1 = require_semconv2(); - var os_1 = __require("os"); - var getMachineId_1 = require_getMachineId(); - var utils_1 = require_utils6(); - - class HostDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_HOST_NAME]: (0, os_1.hostname)(), - [semconv_1.ATTR_HOST_ARCH]: (0, utils_1.normalizeArch)((0, os_1.arch)()), - [semconv_1.ATTR_HOST_ID]: (0, getMachineId_1.getMachineId)() - }; - return { attributes }; - } - } - exports.hostDetector = new HostDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/OSDetector.js -var require_OSDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.osDetector = undefined; - var semconv_1 = require_semconv2(); - var os_1 = __require("os"); - var utils_1 = require_utils6(); - - class OSDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_OS_TYPE]: (0, utils_1.normalizeType)((0, os_1.platform)()), - [semconv_1.ATTR_OS_VERSION]: (0, os_1.release)() - }; - return { attributes }; - } - } - exports.osDetector = new OSDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ProcessDetector.js -var require_ProcessDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.processDetector = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv2(); - var os = __require("os"); - - class ProcessDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_PROCESS_PID]: process.pid, - [semconv_1.ATTR_PROCESS_EXECUTABLE_NAME]: process.title, - [semconv_1.ATTR_PROCESS_EXECUTABLE_PATH]: process.execPath, - [semconv_1.ATTR_PROCESS_COMMAND_ARGS]: [ - process.argv[0], - ...process.execArgv, - ...process.argv.slice(1) - ], - [semconv_1.ATTR_PROCESS_RUNTIME_VERSION]: process.versions.node, - [semconv_1.ATTR_PROCESS_RUNTIME_NAME]: "nodejs", - [semconv_1.ATTR_PROCESS_RUNTIME_DESCRIPTION]: "Node.js" - }; - if (process.argv.length > 1) { - attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1]; - } - try { - const userInfo = os.userInfo(); - attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username; - } catch (e) { - api_1.diag.debug(`error obtaining process owner: ${e}`); - } - return { attributes }; - } - } - exports.processDetector = new ProcessDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ServiceInstanceIdDetector.js -var require_ServiceInstanceIdDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = undefined; - var semconv_1 = require_semconv2(); - var crypto_1 = __require("crypto"); - - class ServiceInstanceIdDetector { - detect(_config) { - return { - attributes: { - [semconv_1.ATTR_SERVICE_INSTANCE_ID]: (0, crypto_1.randomUUID)() - } - }; - } - } - exports.serviceInstanceIdDetector = new ServiceInstanceIdDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/index.js -var require_node3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = undefined; - var HostDetector_1 = require_HostDetector(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return HostDetector_1.hostDetector; - } }); - var OSDetector_1 = require_OSDetector(); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return OSDetector_1.osDetector; - } }); - var ProcessDetector_1 = require_ProcessDetector(); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return ProcessDetector_1.processDetector; - } }); - var ServiceInstanceIdDetector_1 = require_ServiceInstanceIdDetector(); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return ServiceInstanceIdDetector_1.serviceInstanceIdDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/index.js -var require_platform3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = undefined; - var node_1 = require_node3(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return node_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return node_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return node_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return node_1.serviceInstanceIdDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/NoopDetector.js -var require_NoopDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.noopDetector = exports.NoopDetector = undefined; - - class NoopDetector { - detect() { - return { - attributes: {} - }; - } - } - exports.NoopDetector = NoopDetector; - exports.noopDetector = new NoopDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/index.js -var require_detectors = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.noopDetector = exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = exports.envDetector = undefined; - var EnvDetector_1 = require_EnvDetector(); - Object.defineProperty(exports, "envDetector", { enumerable: true, get: function() { - return EnvDetector_1.envDetector; - } }); - var platform_1 = require_platform3(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return platform_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return platform_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return platform_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return platform_1.serviceInstanceIdDetector; - } }); - var NoopDetector_1 = require_NoopDetector(); - Object.defineProperty(exports, "noopDetector", { enumerable: true, get: function() { - return NoopDetector_1.noopDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/index.js -var require_src5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = exports.emptyResource = exports.defaultResource = exports.resourceFromAttributes = exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = exports.envDetector = exports.detectResources = undefined; - var detect_resources_1 = require_detect_resources(); - Object.defineProperty(exports, "detectResources", { enumerable: true, get: function() { - return detect_resources_1.detectResources; - } }); - var detectors_1 = require_detectors(); - Object.defineProperty(exports, "envDetector", { enumerable: true, get: function() { - return detectors_1.envDetector; - } }); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return detectors_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return detectors_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return detectors_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return detectors_1.serviceInstanceIdDetector; - } }); - var ResourceImpl_1 = require_ResourceImpl(); - Object.defineProperty(exports, "resourceFromAttributes", { enumerable: true, get: function() { - return ResourceImpl_1.resourceFromAttributes; - } }); - Object.defineProperty(exports, "defaultResource", { enumerable: true, get: function() { - return ResourceImpl_1.defaultResource; - } }); - Object.defineProperty(exports, "emptyResource", { enumerable: true, get: function() { - return ResourceImpl_1.emptyResource; - } }); - var default_service_name_1 = require_default_service_name(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return default_service_name_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/esm/export/BatchSpanProcessorBase.js -class BatchSpanProcessorBase { - _maxExportBatchSize; - _maxQueueSize; - _scheduledDelayMillis; - _exportTimeoutMillis; - _exporter; - _isExporting = false; - _finishedSpans = []; - _timer; - _shutdownOnce; - _droppedSpansCount = 0; - constructor(exporter, config2) { - this._exporter = exporter; - this._maxExportBatchSize = typeof config2?.maxExportBatchSize === "number" ? config2.maxExportBatchSize : import_core20.getNumberFromEnv("OTEL_BSP_MAX_EXPORT_BATCH_SIZE") ?? 512; - this._maxQueueSize = typeof config2?.maxQueueSize === "number" ? config2.maxQueueSize : import_core20.getNumberFromEnv("OTEL_BSP_MAX_QUEUE_SIZE") ?? 2048; - this._scheduledDelayMillis = typeof config2?.scheduledDelayMillis === "number" ? config2.scheduledDelayMillis : import_core20.getNumberFromEnv("OTEL_BSP_SCHEDULE_DELAY") ?? 5000; - this._exportTimeoutMillis = typeof config2?.exportTimeoutMillis === "number" ? config2.exportTimeoutMillis : import_core20.getNumberFromEnv("OTEL_BSP_EXPORT_TIMEOUT") ?? 30000; - this._shutdownOnce = new import_core20.BindOnceFuture(this._shutdown, this); - if (this._maxExportBatchSize > this._maxQueueSize) { - import_api33.diag.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"); - this._maxExportBatchSize = this._maxQueueSize; - } - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - return this._shutdownOnce.promise; - } - return this._flushAll(); - } - onStart(_span, _parentContext) {} - onEnd(span) { - if (this._shutdownOnce.isCalled) { - return; - } - if ((span.spanContext().traceFlags & import_api33.TraceFlags.SAMPLED) === 0) { - return; - } - this._addToBuffer(span); - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return Promise.resolve().then(() => { - return this.onShutdown(); - }).then(() => { - return this._flushAll(); - }).then(() => { - return this._exporter.shutdown(); - }); - } - _addToBuffer(span) { - if (this._finishedSpans.length >= this._maxQueueSize) { - if (this._droppedSpansCount === 0) { - import_api33.diag.debug("maxQueueSize reached, dropping spans"); - } - this._droppedSpansCount++; - return; - } - if (this._droppedSpansCount > 0) { - import_api33.diag.warn(`Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`); - this._droppedSpansCount = 0; - } - this._finishedSpans.push(span); - this._maybeStartTimer(); - } - _flushAll() { - return new Promise((resolve2, reject) => { - const promises = []; - const count = Math.ceil(this._finishedSpans.length / this._maxExportBatchSize); - for (let i = 0, j = count;i < j; i++) { - promises.push(this._flushOneBatch()); - } - Promise.all(promises).then(() => { - resolve2(); - }).catch(reject); - }); - } - _flushOneBatch() { - this._clearTimer(); - if (this._finishedSpans.length === 0) { - return Promise.resolve(); - } - return new Promise((resolve2, reject) => { - const timer = setTimeout(() => { - reject(new Error("Timeout")); - }, this._exportTimeoutMillis); - import_api33.context.with(import_core20.suppressTracing(import_api33.context.active()), () => { - let spans; - if (this._finishedSpans.length <= this._maxExportBatchSize) { - spans = this._finishedSpans; - this._finishedSpans = []; - } else { - spans = this._finishedSpans.splice(0, this._maxExportBatchSize); - } - const doExport = () => this._exporter.export(spans, (result) => { - clearTimeout(timer); - if (result.code === import_core20.ExportResultCode.SUCCESS) { - resolve2(); - } else { - reject(result.error ?? new Error("BatchSpanProcessor: span export failed")); - } - }); - let pendingResources = null; - for (let i = 0, len = spans.length;i < len; i++) { - const span = spans[i]; - if (span.resource.asyncAttributesPending && span.resource.waitForAsyncAttributes) { - pendingResources ??= []; - pendingResources.push(span.resource.waitForAsyncAttributes()); - } - } - if (pendingResources === null) { - doExport(); - } else { - Promise.all(pendingResources).then(doExport, (err) => { - import_core20.globalErrorHandler(err); - reject(err); - }); - } - }); - }); - } - _maybeStartTimer() { - if (this._isExporting) - return; - const flush = () => { - this._isExporting = true; - this._flushOneBatch().finally(() => { - this._isExporting = false; - if (this._finishedSpans.length > 0) { - this._clearTimer(); - this._maybeStartTimer(); - } - }).catch((e) => { - this._isExporting = false; - import_core20.globalErrorHandler(e); - }); - }; - if (this._finishedSpans.length >= this._maxExportBatchSize) { - return flush(); - } - if (this._timer !== undefined) - return; - this._timer = setTimeout(() => flush(), this._scheduledDelayMillis); - if (typeof this._timer !== "number") { - this._timer.unref(); - } - } - _clearTimer() { - if (this._timer !== undefined) { - clearTimeout(this._timer); - this._timer = undefined; - } - } -} -var import_api33, import_core20; -var init_BatchSpanProcessorBase = __esm(() => { - import_api33 = __toESM(require_src(), 1); - import_core20 = __toESM(require_src4(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/node/export/BatchSpanProcessor.js -var BatchSpanProcessor; -var init_BatchSpanProcessor = __esm(() => { - init_BatchSpanProcessorBase(); - BatchSpanProcessor = class BatchSpanProcessor extends BatchSpanProcessorBase { - onShutdown() {} - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/node/index.js -var init_node3 = __esm(() => { - init_BatchSpanProcessor(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/index.js -var init_platform = __esm(() => { - init_node3(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/esm/export/SimpleSpanProcessor.js -class SimpleSpanProcessor { - _exporter; - _shutdownOnce; - _pendingExports; - constructor(exporter) { - this._exporter = exporter; - this._shutdownOnce = new import_core21.BindOnceFuture(this._shutdown, this); - this._pendingExports = new Set; - } - async forceFlush() { - await Promise.all(Array.from(this._pendingExports)); - if (this._exporter.forceFlush) { - await this._exporter.forceFlush(); - } - } - onStart(_span, _parentContext) {} - onEnd(span) { - if (this._shutdownOnce.isCalled) { - return; - } - if ((span.spanContext().traceFlags & import_api34.TraceFlags.SAMPLED) === 0) { - return; - } - const pendingExport = this._doExport(span).catch((err) => import_core21.globalErrorHandler(err)); - this._pendingExports.add(pendingExport); - pendingExport.finally(() => this._pendingExports.delete(pendingExport)); - } - async _doExport(span) { - if (span.resource.asyncAttributesPending) { - await span.resource.waitForAsyncAttributes?.(); - } - const result = await import_core21.internal._export(this._exporter, [span]); - if (result.code !== import_core21.ExportResultCode.SUCCESS) { - throw result.error ?? new Error(`SimpleSpanProcessor: span export failed (status ${result})`); - } - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return this._exporter.shutdown(); - } -} -var import_api34, import_core21; -var init_SimpleSpanProcessor = __esm(() => { - import_api34 = __toESM(require_src(), 1); - import_core21 = __toESM(require_src4(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/esm/index.js -var init_esm = __esm(() => { - init_platform(); - init_SimpleSpanProcessor(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/types/LogRecord.js -var require_LogRecord = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SeverityNumber = undefined; - var SeverityNumber; - (function(SeverityNumber2) { - SeverityNumber2[SeverityNumber2["UNSPECIFIED"] = 0] = "UNSPECIFIED"; - SeverityNumber2[SeverityNumber2["TRACE"] = 1] = "TRACE"; - SeverityNumber2[SeverityNumber2["TRACE2"] = 2] = "TRACE2"; - SeverityNumber2[SeverityNumber2["TRACE3"] = 3] = "TRACE3"; - SeverityNumber2[SeverityNumber2["TRACE4"] = 4] = "TRACE4"; - SeverityNumber2[SeverityNumber2["DEBUG"] = 5] = "DEBUG"; - SeverityNumber2[SeverityNumber2["DEBUG2"] = 6] = "DEBUG2"; - SeverityNumber2[SeverityNumber2["DEBUG3"] = 7] = "DEBUG3"; - SeverityNumber2[SeverityNumber2["DEBUG4"] = 8] = "DEBUG4"; - SeverityNumber2[SeverityNumber2["INFO"] = 9] = "INFO"; - SeverityNumber2[SeverityNumber2["INFO2"] = 10] = "INFO2"; - SeverityNumber2[SeverityNumber2["INFO3"] = 11] = "INFO3"; - SeverityNumber2[SeverityNumber2["INFO4"] = 12] = "INFO4"; - SeverityNumber2[SeverityNumber2["WARN"] = 13] = "WARN"; - SeverityNumber2[SeverityNumber2["WARN2"] = 14] = "WARN2"; - SeverityNumber2[SeverityNumber2["WARN3"] = 15] = "WARN3"; - SeverityNumber2[SeverityNumber2["WARN4"] = 16] = "WARN4"; - SeverityNumber2[SeverityNumber2["ERROR"] = 17] = "ERROR"; - SeverityNumber2[SeverityNumber2["ERROR2"] = 18] = "ERROR2"; - SeverityNumber2[SeverityNumber2["ERROR3"] = 19] = "ERROR3"; - SeverityNumber2[SeverityNumber2["ERROR4"] = 20] = "ERROR4"; - SeverityNumber2[SeverityNumber2["FATAL"] = 21] = "FATAL"; - SeverityNumber2[SeverityNumber2["FATAL2"] = 22] = "FATAL2"; - SeverityNumber2[SeverityNumber2["FATAL3"] = 23] = "FATAL3"; - SeverityNumber2[SeverityNumber2["FATAL4"] = 24] = "FATAL4"; - })(SeverityNumber = exports.SeverityNumber || (exports.SeverityNumber = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/NoopLogger.js -var require_NoopLogger = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NOOP_LOGGER = exports.NoopLogger = undefined; - - class NoopLogger { - emit(_logRecord) {} - } - exports.NoopLogger = NoopLogger; - exports.NOOP_LOGGER = new NoopLogger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/NoopLoggerProvider.js -var require_NoopLoggerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NOOP_LOGGER_PROVIDER = exports.NoopLoggerProvider = undefined; - var NoopLogger_1 = require_NoopLogger(); - - class NoopLoggerProvider { - getLogger(_name, _version, _options) { - return new NoopLogger_1.NoopLogger; - } - } - exports.NoopLoggerProvider = NoopLoggerProvider; - exports.NOOP_LOGGER_PROVIDER = new NoopLoggerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/ProxyLogger.js -var require_ProxyLogger = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProxyLogger = undefined; - var NoopLogger_1 = require_NoopLogger(); - - class ProxyLogger { - constructor(_provider, name, version2, options) { - this._provider = _provider; - this.name = name; - this.version = version2; - this.options = options; - } - emit(logRecord) { - this._getLogger().emit(logRecord); - } - _getLogger() { - if (this._delegate) { - return this._delegate; - } - const logger = this._provider._getDelegateLogger(this.name, this.version, this.options); - if (!logger) { - return NoopLogger_1.NOOP_LOGGER; - } - this._delegate = logger; - return this._delegate; - } - } - exports.ProxyLogger = ProxyLogger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/ProxyLoggerProvider.js -var require_ProxyLoggerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProxyLoggerProvider = undefined; - var NoopLoggerProvider_1 = require_NoopLoggerProvider(); - var ProxyLogger_1 = require_ProxyLogger(); - - class ProxyLoggerProvider { - getLogger(name, version2, options) { - var _a2; - return (_a2 = this._getDelegateLogger(name, version2, options)) !== null && _a2 !== undefined ? _a2 : new ProxyLogger_1.ProxyLogger(this, name, version2, options); - } - _getDelegate() { - var _a2; - return (_a2 = this._delegate) !== null && _a2 !== undefined ? _a2 : NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER; - } - _setDelegate(delegate) { - this._delegate = delegate; - } - _getDelegateLogger(name, version2, options) { - var _a2; - return (_a2 = this._delegate) === null || _a2 === undefined ? undefined : _a2.getLogger(name, version2, options); - } - } - exports.ProxyLoggerProvider = ProxyLoggerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/platform/node/globalThis.js -var require_globalThis3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - exports._globalThis = typeof globalThis === "object" ? globalThis : global; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/platform/node/index.js -var require_node4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - var globalThis_1 = require_globalThis3(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return globalThis_1._globalThis; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/platform/index.js -var require_platform4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - var node_1 = require_node4(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return node_1._globalThis; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/internal/global-utils.js -var require_global_utils2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.API_BACKWARDS_COMPATIBILITY_VERSION = exports.makeGetter = exports._global = exports.GLOBAL_LOGS_API_KEY = undefined; - var platform_1 = require_platform4(); - exports.GLOBAL_LOGS_API_KEY = Symbol.for("io.opentelemetry.js.api.logs"); - exports._global = platform_1._globalThis; - function makeGetter(requiredVersion, instance, fallback) { - return (version2) => version2 === requiredVersion ? instance : fallback; - } - exports.makeGetter = makeGetter; - exports.API_BACKWARDS_COMPATIBILITY_VERSION = 1; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/api/logs.js -var require_logs = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LogsAPI = undefined; - var global_utils_1 = require_global_utils2(); - var NoopLoggerProvider_1 = require_NoopLoggerProvider(); - var ProxyLoggerProvider_1 = require_ProxyLoggerProvider(); - - class LogsAPI { - constructor() { - this._proxyLoggerProvider = new ProxyLoggerProvider_1.ProxyLoggerProvider; - } - static getInstance() { - if (!this._instance) { - this._instance = new LogsAPI; - } - return this._instance; - } - setGlobalLoggerProvider(provider) { - if (global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]) { - return this.getLoggerProvider(); - } - global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY] = (0, global_utils_1.makeGetter)(global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION, provider, NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER); - this._proxyLoggerProvider._setDelegate(provider); - return provider; - } - getLoggerProvider() { - var _a2, _b; - return (_b = (_a2 = global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]) === null || _a2 === undefined ? undefined : _a2.call(global_utils_1._global, global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION)) !== null && _b !== undefined ? _b : this._proxyLoggerProvider; - } - getLogger(name, version2, options) { - return this.getLoggerProvider().getLogger(name, version2, options); - } - disable() { - delete global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]; - this._proxyLoggerProvider = new ProxyLoggerProvider_1.ProxyLoggerProvider; - } - } - exports.LogsAPI = LogsAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.207.0/node_modules/@opentelemetry/api-logs/build/src/index.js -var require_src6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.logs = exports.ProxyLoggerProvider = exports.ProxyLogger = exports.NoopLoggerProvider = exports.NOOP_LOGGER_PROVIDER = exports.NoopLogger = exports.NOOP_LOGGER = exports.SeverityNumber = undefined; - var LogRecord_1 = require_LogRecord(); - Object.defineProperty(exports, "SeverityNumber", { enumerable: true, get: function() { - return LogRecord_1.SeverityNumber; - } }); - var NoopLogger_1 = require_NoopLogger(); - Object.defineProperty(exports, "NOOP_LOGGER", { enumerable: true, get: function() { - return NoopLogger_1.NOOP_LOGGER; - } }); - Object.defineProperty(exports, "NoopLogger", { enumerable: true, get: function() { - return NoopLogger_1.NoopLogger; - } }); - var NoopLoggerProvider_1 = require_NoopLoggerProvider(); - Object.defineProperty(exports, "NOOP_LOGGER_PROVIDER", { enumerable: true, get: function() { - return NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER; - } }); - Object.defineProperty(exports, "NoopLoggerProvider", { enumerable: true, get: function() { - return NoopLoggerProvider_1.NoopLoggerProvider; - } }); - var ProxyLogger_1 = require_ProxyLogger(); - Object.defineProperty(exports, "ProxyLogger", { enumerable: true, get: function() { - return ProxyLogger_1.ProxyLogger; - } }); - var ProxyLoggerProvider_1 = require_ProxyLoggerProvider(); - Object.defineProperty(exports, "ProxyLoggerProvider", { enumerable: true, get: function() { - return ProxyLoggerProvider_1.ProxyLoggerProvider; - } }); - var logs_1 = require_logs(); - exports.logs = logs_1.LogsAPI.getInstance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/suppress-tracing.js -var require_suppress_tracing2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isTracingSuppressed = exports.unsuppressTracing = exports.suppressTracing = undefined; - var api_1 = require_src(); - var SUPPRESS_TRACING_KEY = (0, api_1.createContextKey)("OpenTelemetry SDK Context Key SUPPRESS_TRACING"); - function suppressTracing2(context8) { - return context8.setValue(SUPPRESS_TRACING_KEY, true); - } - exports.suppressTracing = suppressTracing2; - function unsuppressTracing(context8) { - return context8.deleteValue(SUPPRESS_TRACING_KEY); - } - exports.unsuppressTracing = unsuppressTracing; - function isTracingSuppressed(context8) { - return context8.getValue(SUPPRESS_TRACING_KEY) === true; - } - exports.isTracingSuppressed = isTracingSuppressed; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/constants.js -var require_constants2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BAGGAGE_MAX_TOTAL_LENGTH = exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = exports.BAGGAGE_MAX_NAME_VALUE_PAIRS = exports.BAGGAGE_HEADER = exports.BAGGAGE_ITEMS_SEPARATOR = exports.BAGGAGE_PROPERTIES_SEPARATOR = exports.BAGGAGE_KEY_PAIR_SEPARATOR = undefined; - exports.BAGGAGE_KEY_PAIR_SEPARATOR = "="; - exports.BAGGAGE_PROPERTIES_SEPARATOR = ";"; - exports.BAGGAGE_ITEMS_SEPARATOR = ","; - exports.BAGGAGE_HEADER = "baggage"; - exports.BAGGAGE_MAX_NAME_VALUE_PAIRS = 180; - exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096; - exports.BAGGAGE_MAX_TOTAL_LENGTH = 8192; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/utils.js -var require_utils7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseKeyPairsIntoRecord = exports.parsePairKeyValue = exports.getKeyPairs = exports.serializeKeyPairs = undefined; - var api_1 = require_src(); - var constants_1 = require_constants2(); - function serializeKeyPairs(keyPairs) { - return keyPairs.reduce((hValue, current) => { - const value = `${hValue}${hValue !== "" ? constants_1.BAGGAGE_ITEMS_SEPARATOR : ""}${current}`; - return value.length > constants_1.BAGGAGE_MAX_TOTAL_LENGTH ? hValue : value; - }, ""); - } - exports.serializeKeyPairs = serializeKeyPairs; - function getKeyPairs(baggage) { - return baggage.getAllEntries().map(([key, value]) => { - let entry = `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`; - if (value.metadata !== undefined) { - entry += constants_1.BAGGAGE_PROPERTIES_SEPARATOR + value.metadata.toString(); - } - return entry; - }); - } - exports.getKeyPairs = getKeyPairs; - function parsePairKeyValue(entry) { - const valueProps = entry.split(constants_1.BAGGAGE_PROPERTIES_SEPARATOR); - if (valueProps.length <= 0) - return; - const keyPairPart = valueProps.shift(); - if (!keyPairPart) - return; - const separatorIndex = keyPairPart.indexOf(constants_1.BAGGAGE_KEY_PAIR_SEPARATOR); - if (separatorIndex <= 0) - return; - const key = decodeURIComponent(keyPairPart.substring(0, separatorIndex).trim()); - const value = decodeURIComponent(keyPairPart.substring(separatorIndex + 1).trim()); - let metadata; - if (valueProps.length > 0) { - metadata = (0, api_1.baggageEntryMetadataFromString)(valueProps.join(constants_1.BAGGAGE_PROPERTIES_SEPARATOR)); - } - return { key, value, metadata }; - } - exports.parsePairKeyValue = parsePairKeyValue; - function parseKeyPairsIntoRecord(value) { - const result = {}; - if (typeof value === "string" && value.length > 0) { - value.split(constants_1.BAGGAGE_ITEMS_SEPARATOR).forEach((entry) => { - const keyPair = parsePairKeyValue(entry); - if (keyPair !== undefined && keyPair.value.length > 0) { - result[keyPair.key] = keyPair.value; - } - }); - } - return result; - } - exports.parseKeyPairsIntoRecord = parseKeyPairsIntoRecord; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/propagation/W3CBaggagePropagator.js -var require_W3CBaggagePropagator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.W3CBaggagePropagator = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing2(); - var constants_1 = require_constants2(); - var utils_1 = require_utils7(); - - class W3CBaggagePropagator { - inject(context8, carrier, setter) { - const baggage = api_1.propagation.getBaggage(context8); - if (!baggage || (0, suppress_tracing_1.isTracingSuppressed)(context8)) - return; - const keyPairs = (0, utils_1.getKeyPairs)(baggage).filter((pair) => { - return pair.length <= constants_1.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS; - }).slice(0, constants_1.BAGGAGE_MAX_NAME_VALUE_PAIRS); - const headerValue = (0, utils_1.serializeKeyPairs)(keyPairs); - if (headerValue.length > 0) { - setter.set(carrier, constants_1.BAGGAGE_HEADER, headerValue); - } - } - extract(context8, carrier, getter) { - const headerValue = getter.get(carrier, constants_1.BAGGAGE_HEADER); - const baggageString = Array.isArray(headerValue) ? headerValue.join(constants_1.BAGGAGE_ITEMS_SEPARATOR) : headerValue; - if (!baggageString) - return context8; - const baggage = {}; - if (baggageString.length === 0) { - return context8; - } - const pairs = baggageString.split(constants_1.BAGGAGE_ITEMS_SEPARATOR); - pairs.forEach((entry) => { - const keyPair = (0, utils_1.parsePairKeyValue)(entry); - if (keyPair) { - const baggageEntry = { value: keyPair.value }; - if (keyPair.metadata) { - baggageEntry.metadata = keyPair.metadata; - } - baggage[keyPair.key] = baggageEntry; - } - }); - if (Object.entries(baggage).length === 0) { - return context8; - } - return api_1.propagation.setBaggage(context8, api_1.propagation.createBaggage(baggage)); - } - fields() { - return [constants_1.BAGGAGE_HEADER]; - } - } - exports.W3CBaggagePropagator = W3CBaggagePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/anchored-clock.js -var require_anchored_clock2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AnchoredClock = undefined; - - class AnchoredClock { - _monotonicClock; - _epochMillis; - _performanceMillis; - constructor(systemClock, monotonicClock) { - this._monotonicClock = monotonicClock; - this._epochMillis = systemClock.now(); - this._performanceMillis = monotonicClock.now(); - } - now() { - const delta = this._monotonicClock.now() - this._performanceMillis; - return this._epochMillis + delta; - } - } - exports.AnchoredClock = AnchoredClock; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/attributes.js -var require_attributes2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isAttributeValue = exports.isAttributeKey = exports.sanitizeAttributes = undefined; - var api_1 = require_src(); - function sanitizeAttributes(attributes) { - const out = {}; - if (typeof attributes !== "object" || attributes == null) { - return out; - } - for (const key in attributes) { - if (!Object.prototype.hasOwnProperty.call(attributes, key)) { - continue; - } - if (!isAttributeKey(key)) { - api_1.diag.warn(`Invalid attribute key: ${key}`); - continue; - } - const val = attributes[key]; - if (!isAttributeValue(val)) { - api_1.diag.warn(`Invalid attribute value set for key: ${key}`); - continue; - } - if (Array.isArray(val)) { - out[key] = val.slice(); - } else { - out[key] = val; - } - } - return out; - } - exports.sanitizeAttributes = sanitizeAttributes; - function isAttributeKey(key) { - return typeof key === "string" && key !== ""; - } - exports.isAttributeKey = isAttributeKey; - function isAttributeValue(val) { - if (val == null) { - return true; - } - if (Array.isArray(val)) { - return isHomogeneousAttributeValueArray(val); - } - return isValidPrimitiveAttributeValueType(typeof val); - } - exports.isAttributeValue = isAttributeValue; - function isHomogeneousAttributeValueArray(arr) { - let type; - for (const element of arr) { - if (element == null) - continue; - const elementType = typeof element; - if (elementType === type) { - continue; - } - if (!type) { - if (isValidPrimitiveAttributeValueType(elementType)) { - type = elementType; - continue; - } - return false; - } - return false; - } - return true; - } - function isValidPrimitiveAttributeValueType(valType) { - switch (valType) { - case "number": - case "boolean": - case "string": - return true; - } - return false; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/logging-error-handler.js -var require_logging_error_handler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.loggingErrorHandler = undefined; - var api_1 = require_src(); - function loggingErrorHandler() { - return (ex) => { - api_1.diag.error(stringifyException(ex)); - }; - } - exports.loggingErrorHandler = loggingErrorHandler; - function stringifyException(ex) { - if (typeof ex === "string") { - return ex; - } else { - return JSON.stringify(flattenException(ex)); - } - } - function flattenException(ex) { - const result = {}; - let current = ex; - while (current !== null) { - Object.getOwnPropertyNames(current).forEach((propertyName) => { - if (result[propertyName]) - return; - const value = current[propertyName]; - if (value) { - result[propertyName] = String(value); - } - }); - current = Object.getPrototypeOf(current); - } - return result; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/global-error-handler.js -var require_global_error_handler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.globalErrorHandler = exports.setGlobalErrorHandler = undefined; - var logging_error_handler_1 = require_logging_error_handler2(); - var delegateHandler = (0, logging_error_handler_1.loggingErrorHandler)(); - function setGlobalErrorHandler(handler) { - delegateHandler = handler; - } - exports.setGlobalErrorHandler = setGlobalErrorHandler; - function globalErrorHandler3(ex) { - try { - delegateHandler(ex); - } catch {} - } - exports.globalErrorHandler = globalErrorHandler3; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/environment.js -var require_environment2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getStringListFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = exports.getNumberFromEnv = undefined; - var api_1 = require_src(); - var util_1 = __require("util"); - function getNumberFromEnv2(key) { - const raw2 = process.env[key]; - if (raw2 == null || raw2.trim() === "") { - return; - } - const value = Number(raw2); - if (isNaN(value)) { - api_1.diag.warn(`Unknown value ${(0, util_1.inspect)(raw2)} for ${key}, expected a number, using defaults`); - return; - } - return value; - } - exports.getNumberFromEnv = getNumberFromEnv2; - function getStringFromEnv(key) { - const raw2 = process.env[key]; - if (raw2 == null || raw2.trim() === "") { - return; - } - return raw2; - } - exports.getStringFromEnv = getStringFromEnv; - function getBooleanFromEnv(key) { - const raw2 = process.env[key]?.trim().toLowerCase(); - if (raw2 == null || raw2 === "") { - return false; - } - if (raw2 === "true") { - return true; - } else if (raw2 === "false") { - return false; - } else { - api_1.diag.warn(`Unknown value ${(0, util_1.inspect)(raw2)} for ${key}, expected 'true' or 'false', falling back to 'false' (default)`); - return false; - } - } - exports.getBooleanFromEnv = getBooleanFromEnv; - function getStringListFromEnv(key) { - return getStringFromEnv(key)?.split(",").map((v) => v.trim()).filter((s2) => s2 !== ""); - } - exports.getStringListFromEnv = getStringListFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/globalThis.js -var require_globalThis4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - exports._globalThis = typeof globalThis === "object" ? globalThis : global; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/performance.js -var require_performance = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.otperformance = undefined; - var perf_hooks_1 = __require("perf_hooks"); - exports.otperformance = perf_hooks_1.performance; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/version.js -var require_version3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "2.2.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/semconv.js -var require_semconv3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_PROCESS_RUNTIME_NAME = undefined; - exports.ATTR_PROCESS_RUNTIME_NAME = "process.runtime.name"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/sdk-info.js -var require_sdk_info2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SDK_INFO = undefined; - var version_1 = require_version3(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv3(); - exports.SDK_INFO = { - [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: "opentelemetry", - [semconv_1.ATTR_PROCESS_RUNTIME_NAME]: "node", - [semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE]: semantic_conventions_1.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS, - [semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION]: version_1.VERSION - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/index.js -var require_node5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SDK_INFO = exports.otperformance = exports._globalThis = exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = undefined; - var environment_1 = require_environment2(); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return environment_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return environment_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return environment_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return environment_1.getStringListFromEnv; - } }); - var globalThis_1 = require_globalThis4(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return globalThis_1._globalThis; - } }); - var performance_1 = require_performance(); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return performance_1.otperformance; - } }); - var sdk_info_1 = require_sdk_info2(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return sdk_info_1.SDK_INFO; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/index.js -var require_platform5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getStringFromEnv = exports.getBooleanFromEnv = exports.otperformance = exports._globalThis = exports.SDK_INFO = undefined; - var node_1 = require_node5(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return node_1.SDK_INFO; - } }); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return node_1._globalThis; - } }); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return node_1.otperformance; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return node_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return node_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return node_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return node_1.getStringListFromEnv; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/time.js -var require_time2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addHrTimes = exports.isTimeInput = exports.isTimeInputHrTime = exports.hrTimeToMicroseconds = exports.hrTimeToMilliseconds = exports.hrTimeToNanoseconds = exports.hrTimeToTimeStamp = exports.hrTimeDuration = exports.timeInputToHrTime = exports.hrTime = exports.getTimeOrigin = exports.millisToHrTime = undefined; - var platform_1 = require_platform5(); - var NANOSECOND_DIGITS = 9; - var NANOSECOND_DIGITS_IN_MILLIS = 6; - var MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS); - var SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS); - function millisToHrTime(epochMillis) { - const epochSeconds = epochMillis / 1000; - const seconds = Math.trunc(epochSeconds); - const nanos = Math.round(epochMillis % 1000 * MILLISECONDS_TO_NANOSECONDS); - return [seconds, nanos]; - } - exports.millisToHrTime = millisToHrTime; - function getTimeOrigin() { - let timeOrigin = platform_1.otperformance.timeOrigin; - if (typeof timeOrigin !== "number") { - const perf = platform_1.otperformance; - timeOrigin = perf.timing && perf.timing.fetchStart; - } - return timeOrigin; - } - exports.getTimeOrigin = getTimeOrigin; - function hrTime(performanceNow) { - const timeOrigin = millisToHrTime(getTimeOrigin()); - const now2 = millisToHrTime(typeof performanceNow === "number" ? performanceNow : platform_1.otperformance.now()); - return addHrTimes(timeOrigin, now2); - } - exports.hrTime = hrTime; - function timeInputToHrTime(time3) { - if (isTimeInputHrTime(time3)) { - return time3; - } else if (typeof time3 === "number") { - if (time3 < getTimeOrigin()) { - return hrTime(time3); - } else { - return millisToHrTime(time3); - } - } else if (time3 instanceof Date) { - return millisToHrTime(time3.getTime()); - } else { - throw TypeError("Invalid input type"); - } - } - exports.timeInputToHrTime = timeInputToHrTime; - function hrTimeDuration(startTime, endTime) { - let seconds = endTime[0] - startTime[0]; - let nanos = endTime[1] - startTime[1]; - if (nanos < 0) { - seconds -= 1; - nanos += SECOND_TO_NANOSECONDS; - } - return [seconds, nanos]; - } - exports.hrTimeDuration = hrTimeDuration; - function hrTimeToTimeStamp(time3) { - const precision = NANOSECOND_DIGITS; - const tmp = `${"0".repeat(precision)}${time3[1]}Z`; - const nanoString = tmp.substring(tmp.length - precision - 1); - const date5 = new Date(time3[0] * 1000).toISOString(); - return date5.replace("000Z", nanoString); - } - exports.hrTimeToTimeStamp = hrTimeToTimeStamp; - function hrTimeToNanoseconds(time3) { - return time3[0] * SECOND_TO_NANOSECONDS + time3[1]; - } - exports.hrTimeToNanoseconds = hrTimeToNanoseconds; - function hrTimeToMilliseconds(time3) { - return time3[0] * 1000 + time3[1] / 1e6; - } - exports.hrTimeToMilliseconds = hrTimeToMilliseconds; - function hrTimeToMicroseconds(time3) { - return time3[0] * 1e6 + time3[1] / 1000; - } - exports.hrTimeToMicroseconds = hrTimeToMicroseconds; - function isTimeInputHrTime(value) { - return Array.isArray(value) && value.length === 2 && typeof value[0] === "number" && typeof value[1] === "number"; - } - exports.isTimeInputHrTime = isTimeInputHrTime; - function isTimeInput(value) { - return isTimeInputHrTime(value) || typeof value === "number" || value instanceof Date; - } - exports.isTimeInput = isTimeInput; - function addHrTimes(time1, time22) { - const out = [time1[0] + time22[0], time1[1] + time22[1]]; - if (out[1] >= SECOND_TO_NANOSECONDS) { - out[1] -= SECOND_TO_NANOSECONDS; - out[0] += 1; - } - return out; - } - exports.addHrTimes = addHrTimes; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/timer-util.js -var require_timer_util2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.unrefTimer = undefined; - function unrefTimer(timer) { - if (typeof timer !== "number") { - timer.unref(); - } - } - exports.unrefTimer = unrefTimer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/ExportResult.js -var require_ExportResult2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExportResultCode = undefined; - var ExportResultCode3; - (function(ExportResultCode4) { - ExportResultCode4[ExportResultCode4["SUCCESS"] = 0] = "SUCCESS"; - ExportResultCode4[ExportResultCode4["FAILED"] = 1] = "FAILED"; - })(ExportResultCode3 = exports.ExportResultCode || (exports.ExportResultCode = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/propagation/composite.js -var require_composite2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompositePropagator = undefined; - var api_1 = require_src(); - - class CompositePropagator { - _propagators; - _fields; - constructor(config2 = {}) { - this._propagators = config2.propagators ?? []; - this._fields = Array.from(new Set(this._propagators.map((p) => typeof p.fields === "function" ? p.fields() : []).reduce((x, y) => x.concat(y), []))); - } - inject(context8, carrier, setter) { - for (const propagator of this._propagators) { - try { - propagator.inject(context8, carrier, setter); - } catch (err) { - api_1.diag.warn(`Failed to inject with ${propagator.constructor.name}. Err: ${err.message}`); - } - } - } - extract(context8, carrier, getter) { - return this._propagators.reduce((ctx, propagator) => { - try { - return propagator.extract(ctx, carrier, getter); - } catch (err) { - api_1.diag.warn(`Failed to extract with ${propagator.constructor.name}. Err: ${err.message}`); - } - return ctx; - }, context8); - } - fields() { - return this._fields.slice(); - } - } - exports.CompositePropagator = CompositePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/internal/validators.js -var require_validators2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateValue = exports.validateKey = undefined; - var VALID_KEY_CHAR_RANGE = "[_0-9a-z-*/]"; - var VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`; - var VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`; - var VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`); - var VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/; - var INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/; - function validateKey(key) { - return VALID_KEY_REGEX.test(key); - } - exports.validateKey = validateKey; - function validateValue(value) { - return VALID_VALUE_BASE_REGEX.test(value) && !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value); - } - exports.validateValue = validateValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/TraceState.js -var require_TraceState2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceState = undefined; - var validators_1 = require_validators2(); - var MAX_TRACE_STATE_ITEMS = 32; - var MAX_TRACE_STATE_LEN = 512; - var LIST_MEMBERS_SEPARATOR = ","; - var LIST_MEMBER_KEY_VALUE_SPLITTER = "="; - - class TraceState2 { - _internalState = new Map; - constructor(rawTraceState) { - if (rawTraceState) - this._parse(rawTraceState); - } - set(key, value) { - const traceState = this._clone(); - if (traceState._internalState.has(key)) { - traceState._internalState.delete(key); - } - traceState._internalState.set(key, value); - return traceState; - } - unset(key) { - const traceState = this._clone(); - traceState._internalState.delete(key); - return traceState; - } - get(key) { - return this._internalState.get(key); - } - serialize() { - return this._keys().reduce((agg, key) => { - agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + this.get(key)); - return agg; - }, []).join(LIST_MEMBERS_SEPARATOR); - } - _parse(rawTraceState) { - if (rawTraceState.length > MAX_TRACE_STATE_LEN) - return; - this._internalState = rawTraceState.split(LIST_MEMBERS_SEPARATOR).reverse().reduce((agg, part) => { - const listMember = part.trim(); - const i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER); - if (i !== -1) { - const key = listMember.slice(0, i); - const value = listMember.slice(i + 1, part.length); - if ((0, validators_1.validateKey)(key) && (0, validators_1.validateValue)(value)) { - agg.set(key, value); - } else {} - } - return agg; - }, new Map); - if (this._internalState.size > MAX_TRACE_STATE_ITEMS) { - this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, MAX_TRACE_STATE_ITEMS)); - } - } - _keys() { - return Array.from(this._internalState.keys()).reverse(); - } - _clone() { - const traceState = new TraceState2; - traceState._internalState = new Map(this._internalState); - return traceState; - } - } - exports.TraceState = TraceState2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/W3CTraceContextPropagator.js -var require_W3CTraceContextPropagator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.W3CTraceContextPropagator = exports.parseTraceParent = exports.TRACE_STATE_HEADER = exports.TRACE_PARENT_HEADER = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing2(); - var TraceState_1 = require_TraceState2(); - exports.TRACE_PARENT_HEADER = "traceparent"; - exports.TRACE_STATE_HEADER = "tracestate"; - var VERSION = "00"; - var VERSION_PART = "(?!ff)[\\da-f]{2}"; - var TRACE_ID_PART = "(?![0]{32})[\\da-f]{32}"; - var PARENT_ID_PART = "(?![0]{16})[\\da-f]{16}"; - var FLAGS_PART = "[\\da-f]{2}"; - var TRACE_PARENT_REGEX = new RegExp(`^\\s?(${VERSION_PART})-(${TRACE_ID_PART})-(${PARENT_ID_PART})-(${FLAGS_PART})(-.*)?\\s?$`); - function parseTraceParent(traceParent) { - const match2 = TRACE_PARENT_REGEX.exec(traceParent); - if (!match2) - return null; - if (match2[1] === "00" && match2[5]) - return null; - return { - traceId: match2[2], - spanId: match2[3], - traceFlags: parseInt(match2[4], 16) - }; - } - exports.parseTraceParent = parseTraceParent; - - class W3CTraceContextPropagator { - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - if (!spanContext || (0, suppress_tracing_1.isTracingSuppressed)(context8) || !(0, api_1.isSpanContextValid)(spanContext)) - return; - const traceParent = `${VERSION}-${spanContext.traceId}-${spanContext.spanId}-0${Number(spanContext.traceFlags || api_1.TraceFlags.NONE).toString(16)}`; - setter.set(carrier, exports.TRACE_PARENT_HEADER, traceParent); - if (spanContext.traceState) { - setter.set(carrier, exports.TRACE_STATE_HEADER, spanContext.traceState.serialize()); - } - } - extract(context8, carrier, getter) { - const traceParentHeader = getter.get(carrier, exports.TRACE_PARENT_HEADER); - if (!traceParentHeader) - return context8; - const traceParent = Array.isArray(traceParentHeader) ? traceParentHeader[0] : traceParentHeader; - if (typeof traceParent !== "string") - return context8; - const spanContext = parseTraceParent(traceParent); - if (!spanContext) - return context8; - spanContext.isRemote = true; - const traceStateHeader = getter.get(carrier, exports.TRACE_STATE_HEADER); - if (traceStateHeader) { - const state = Array.isArray(traceStateHeader) ? traceStateHeader.join(",") : traceStateHeader; - spanContext.traceState = new TraceState_1.TraceState(typeof state === "string" ? state : undefined); - } - return api_1.trace.setSpanContext(context8, spanContext); - } - fields() { - return [exports.TRACE_PARENT_HEADER, exports.TRACE_STATE_HEADER]; - } - } - exports.W3CTraceContextPropagator = W3CTraceContextPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/rpc-metadata.js -var require_rpc_metadata2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getRPCMetadata = exports.deleteRPCMetadata = exports.setRPCMetadata = exports.RPCType = undefined; - var api_1 = require_src(); - var RPC_METADATA_KEY = (0, api_1.createContextKey)("OpenTelemetry SDK Context Key RPC_METADATA"); - var RPCType; - (function(RPCType2) { - RPCType2["HTTP"] = "http"; - })(RPCType = exports.RPCType || (exports.RPCType = {})); - function setRPCMetadata(context8, meta3) { - return context8.setValue(RPC_METADATA_KEY, meta3); - } - exports.setRPCMetadata = setRPCMetadata; - function deleteRPCMetadata(context8) { - return context8.deleteValue(RPC_METADATA_KEY); - } - exports.deleteRPCMetadata = deleteRPCMetadata; - function getRPCMetadata(context8) { - return context8.getValue(RPC_METADATA_KEY); - } - exports.getRPCMetadata = getRPCMetadata; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/lodash.merge.js -var require_lodash_merge2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isPlainObject = undefined; - var objectTag = "[object Object]"; - var nullTag = "[object Null]"; - var undefinedTag = "[object Undefined]"; - var funcProto = Function.prototype; - var funcToString = funcProto.toString; - var objectCtorString = funcToString.call(Object); - var getPrototypeOf = Object.getPrototypeOf; - var objectProto = Object.prototype; - var hasOwnProperty = objectProto.hasOwnProperty; - var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - var nativeObjectToString = objectProto.toString; - function isPlainObject2(value) { - if (!isObjectLike(value) || baseGetTag(value) !== objectTag) { - return false; - } - const proto = getPrototypeOf(value); - if (proto === null) { - return true; - } - const Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) === objectCtorString; - } - exports.isPlainObject = isPlainObject2; - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - function getRawTag(value) { - const isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - let unmasked = false; - try { - value[symToStringTag] = undefined; - unmasked = true; - } catch {} - const result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - function objectToString(value) { - return nativeObjectToString.call(value); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/merge.js -var require_merge2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.merge = undefined; - var lodash_merge_1 = require_lodash_merge2(); - var MAX_LEVEL = 20; - function merge2(...args) { - let result = args.shift(); - const objects = new WeakMap; - while (args.length > 0) { - result = mergeTwoObjects(result, args.shift(), 0, objects); - } - return result; - } - exports.merge = merge2; - function takeValue(value) { - if (isArray(value)) { - return value.slice(); - } - return value; - } - function mergeTwoObjects(one, two, level = 0, objects) { - let result; - if (level > MAX_LEVEL) { - return; - } - level++; - if (isPrimitive(one) || isPrimitive(two) || isFunction(two)) { - result = takeValue(two); - } else if (isArray(one)) { - result = one.slice(); - if (isArray(two)) { - for (let i = 0, j = two.length;i < j; i++) { - result.push(takeValue(two[i])); - } - } else if (isObject2(two)) { - const keys = Object.keys(two); - for (let i = 0, j = keys.length;i < j; i++) { - const key = keys[i]; - result[key] = takeValue(two[key]); - } - } - } else if (isObject2(one)) { - if (isObject2(two)) { - if (!shouldMerge(one, two)) { - return two; - } - result = Object.assign({}, one); - const keys = Object.keys(two); - for (let i = 0, j = keys.length;i < j; i++) { - const key = keys[i]; - const twoValue = two[key]; - if (isPrimitive(twoValue)) { - if (typeof twoValue === "undefined") { - delete result[key]; - } else { - result[key] = twoValue; - } - } else { - const obj1 = result[key]; - const obj2 = twoValue; - if (wasObjectReferenced(one, key, objects) || wasObjectReferenced(two, key, objects)) { - delete result[key]; - } else { - if (isObject2(obj1) && isObject2(obj2)) { - const arr1 = objects.get(obj1) || []; - const arr2 = objects.get(obj2) || []; - arr1.push({ obj: one, key }); - arr2.push({ obj: two, key }); - objects.set(obj1, arr1); - objects.set(obj2, arr2); - } - result[key] = mergeTwoObjects(result[key], twoValue, level, objects); - } - } - } - } else { - result = two; - } - } - return result; - } - function wasObjectReferenced(obj, key, objects) { - const arr = objects.get(obj[key]) || []; - for (let i = 0, j = arr.length;i < j; i++) { - const info = arr[i]; - if (info.key === key && info.obj === obj) { - return true; - } - } - return false; - } - function isArray(value) { - return Array.isArray(value); - } - function isFunction(value) { - return typeof value === "function"; - } - function isObject2(value) { - return !isPrimitive(value) && !isArray(value) && !isFunction(value) && typeof value === "object"; - } - function isPrimitive(value) { - return typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "undefined" || value instanceof Date || value instanceof RegExp || value === null; - } - function shouldMerge(one, two) { - if (!(0, lodash_merge_1.isPlainObject)(one) || !(0, lodash_merge_1.isPlainObject)(two)) { - return false; - } - return true; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/timeout.js -var require_timeout2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.callWithTimeout = exports.TimeoutError = undefined; - - class TimeoutError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, TimeoutError.prototype); - } - } - exports.TimeoutError = TimeoutError; - function callWithTimeout(promise2, timeout) { - let timeoutHandle; - const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) { - timeoutHandle = setTimeout(function timeoutHandler() { - reject(new TimeoutError("Operation timed out.")); - }, timeout); - }); - return Promise.race([promise2, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle); - return result; - }, (reason) => { - clearTimeout(timeoutHandle); - throw reason; - }); - } - exports.callWithTimeout = callWithTimeout; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/url.js -var require_url2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isUrlIgnored = exports.urlMatches = undefined; - function urlMatches(url2, urlToMatch) { - if (typeof urlToMatch === "string") { - return url2 === urlToMatch; - } else { - return !!url2.match(urlToMatch); - } - } - exports.urlMatches = urlMatches; - function isUrlIgnored(url2, ignoredUrls) { - if (!ignoredUrls) { - return false; - } - for (const ignoreUrl of ignoredUrls) { - if (urlMatches(url2, ignoreUrl)) { - return true; - } - } - return false; - } - exports.isUrlIgnored = isUrlIgnored; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/promise.js -var require_promise2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Deferred = undefined; - - class Deferred { - _promise; - _resolve; - _reject; - constructor() { - this._promise = new Promise((resolve2, reject) => { - this._resolve = resolve2; - this._reject = reject; - }); - } - get promise() { - return this._promise; - } - resolve(val) { - this._resolve(val); - } - reject(err) { - this._reject(err); - } - } - exports.Deferred = Deferred; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/callback.js -var require_callback2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindOnceFuture = undefined; - var promise_1 = require_promise2(); - - class BindOnceFuture3 { - _callback; - _that; - _isCalled = false; - _deferred = new promise_1.Deferred; - constructor(_callback, _that) { - this._callback = _callback; - this._that = _that; - } - get isCalled() { - return this._isCalled; - } - get promise() { - return this._deferred.promise; - } - call(...args) { - if (!this._isCalled) { - this._isCalled = true; - try { - Promise.resolve(this._callback.call(this._that, ...args)).then((val) => this._deferred.resolve(val), (err) => this._deferred.reject(err)); - } catch (err) { - this._deferred.reject(err); - } - } - return this._deferred.promise; - } - } - exports.BindOnceFuture = BindOnceFuture3; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/configuration.js -var require_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.diagLogLevelFromString = undefined; - var api_1 = require_src(); - var logLevelMap = { - ALL: api_1.DiagLogLevel.ALL, - VERBOSE: api_1.DiagLogLevel.VERBOSE, - DEBUG: api_1.DiagLogLevel.DEBUG, - INFO: api_1.DiagLogLevel.INFO, - WARN: api_1.DiagLogLevel.WARN, - ERROR: api_1.DiagLogLevel.ERROR, - NONE: api_1.DiagLogLevel.NONE - }; - function diagLogLevelFromString(value) { - if (value == null) { - return; - } - const resolvedLogLevel = logLevelMap[value.toUpperCase()]; - if (resolvedLogLevel == null) { - api_1.diag.warn(`Unknown log level "${value}", expected one of ${Object.keys(logLevelMap)}, using default`); - return api_1.DiagLogLevel.INFO; - } - return resolvedLogLevel; - } - exports.diagLogLevelFromString = diagLogLevelFromString; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/internal/exporter.js -var require_exporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._export = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing2(); - function _export(exporter, arg) { - return new Promise((resolve2) => { - api_1.context.with((0, suppress_tracing_1.suppressTracing)(api_1.context.active()), () => { - exporter.export(arg, (result) => { - resolve2(result); - }); - }); - }); - } - exports._export = _export; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/index.js -var require_src7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.internal = exports.diagLogLevelFromString = exports.BindOnceFuture = exports.urlMatches = exports.isUrlIgnored = exports.callWithTimeout = exports.TimeoutError = exports.merge = exports.TraceState = exports.unsuppressTracing = exports.suppressTracing = exports.isTracingSuppressed = exports.setRPCMetadata = exports.getRPCMetadata = exports.deleteRPCMetadata = exports.RPCType = exports.parseTraceParent = exports.W3CTraceContextPropagator = exports.TRACE_STATE_HEADER = exports.TRACE_PARENT_HEADER = exports.CompositePropagator = exports.otperformance = exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = exports._globalThis = exports.SDK_INFO = exports.parseKeyPairsIntoRecord = exports.ExportResultCode = exports.unrefTimer = exports.timeInputToHrTime = exports.millisToHrTime = exports.isTimeInputHrTime = exports.isTimeInput = exports.hrTimeToTimeStamp = exports.hrTimeToNanoseconds = exports.hrTimeToMilliseconds = exports.hrTimeToMicroseconds = exports.hrTimeDuration = exports.hrTime = exports.getTimeOrigin = exports.addHrTimes = exports.loggingErrorHandler = exports.setGlobalErrorHandler = exports.globalErrorHandler = exports.sanitizeAttributes = exports.isAttributeValue = exports.AnchoredClock = exports.W3CBaggagePropagator = undefined; - var W3CBaggagePropagator_1 = require_W3CBaggagePropagator2(); - Object.defineProperty(exports, "W3CBaggagePropagator", { enumerable: true, get: function() { - return W3CBaggagePropagator_1.W3CBaggagePropagator; - } }); - var anchored_clock_1 = require_anchored_clock2(); - Object.defineProperty(exports, "AnchoredClock", { enumerable: true, get: function() { - return anchored_clock_1.AnchoredClock; - } }); - var attributes_1 = require_attributes2(); - Object.defineProperty(exports, "isAttributeValue", { enumerable: true, get: function() { - return attributes_1.isAttributeValue; - } }); - Object.defineProperty(exports, "sanitizeAttributes", { enumerable: true, get: function() { - return attributes_1.sanitizeAttributes; - } }); - var global_error_handler_1 = require_global_error_handler2(); - Object.defineProperty(exports, "globalErrorHandler", { enumerable: true, get: function() { - return global_error_handler_1.globalErrorHandler; - } }); - Object.defineProperty(exports, "setGlobalErrorHandler", { enumerable: true, get: function() { - return global_error_handler_1.setGlobalErrorHandler; - } }); - var logging_error_handler_1 = require_logging_error_handler2(); - Object.defineProperty(exports, "loggingErrorHandler", { enumerable: true, get: function() { - return logging_error_handler_1.loggingErrorHandler; - } }); - var time_1 = require_time2(); - Object.defineProperty(exports, "addHrTimes", { enumerable: true, get: function() { - return time_1.addHrTimes; - } }); - Object.defineProperty(exports, "getTimeOrigin", { enumerable: true, get: function() { - return time_1.getTimeOrigin; - } }); - Object.defineProperty(exports, "hrTime", { enumerable: true, get: function() { - return time_1.hrTime; - } }); - Object.defineProperty(exports, "hrTimeDuration", { enumerable: true, get: function() { - return time_1.hrTimeDuration; - } }); - Object.defineProperty(exports, "hrTimeToMicroseconds", { enumerable: true, get: function() { - return time_1.hrTimeToMicroseconds; - } }); - Object.defineProperty(exports, "hrTimeToMilliseconds", { enumerable: true, get: function() { - return time_1.hrTimeToMilliseconds; - } }); - Object.defineProperty(exports, "hrTimeToNanoseconds", { enumerable: true, get: function() { - return time_1.hrTimeToNanoseconds; - } }); - Object.defineProperty(exports, "hrTimeToTimeStamp", { enumerable: true, get: function() { - return time_1.hrTimeToTimeStamp; - } }); - Object.defineProperty(exports, "isTimeInput", { enumerable: true, get: function() { - return time_1.isTimeInput; - } }); - Object.defineProperty(exports, "isTimeInputHrTime", { enumerable: true, get: function() { - return time_1.isTimeInputHrTime; - } }); - Object.defineProperty(exports, "millisToHrTime", { enumerable: true, get: function() { - return time_1.millisToHrTime; - } }); - Object.defineProperty(exports, "timeInputToHrTime", { enumerable: true, get: function() { - return time_1.timeInputToHrTime; - } }); - var timer_util_1 = require_timer_util2(); - Object.defineProperty(exports, "unrefTimer", { enumerable: true, get: function() { - return timer_util_1.unrefTimer; - } }); - var ExportResult_1 = require_ExportResult2(); - Object.defineProperty(exports, "ExportResultCode", { enumerable: true, get: function() { - return ExportResult_1.ExportResultCode; - } }); - var utils_1 = require_utils7(); - Object.defineProperty(exports, "parseKeyPairsIntoRecord", { enumerable: true, get: function() { - return utils_1.parseKeyPairsIntoRecord; - } }); - var platform_1 = require_platform5(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return platform_1.SDK_INFO; - } }); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return platform_1._globalThis; - } }); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return platform_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return platform_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return platform_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return platform_1.getStringListFromEnv; - } }); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return platform_1.otperformance; - } }); - var composite_1 = require_composite2(); - Object.defineProperty(exports, "CompositePropagator", { enumerable: true, get: function() { - return composite_1.CompositePropagator; - } }); - var W3CTraceContextPropagator_1 = require_W3CTraceContextPropagator2(); - Object.defineProperty(exports, "TRACE_PARENT_HEADER", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.TRACE_PARENT_HEADER; - } }); - Object.defineProperty(exports, "TRACE_STATE_HEADER", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.TRACE_STATE_HEADER; - } }); - Object.defineProperty(exports, "W3CTraceContextPropagator", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.W3CTraceContextPropagator; - } }); - Object.defineProperty(exports, "parseTraceParent", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.parseTraceParent; - } }); - var rpc_metadata_1 = require_rpc_metadata2(); - Object.defineProperty(exports, "RPCType", { enumerable: true, get: function() { - return rpc_metadata_1.RPCType; - } }); - Object.defineProperty(exports, "deleteRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.deleteRPCMetadata; - } }); - Object.defineProperty(exports, "getRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.getRPCMetadata; - } }); - Object.defineProperty(exports, "setRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.setRPCMetadata; - } }); - var suppress_tracing_1 = require_suppress_tracing2(); - Object.defineProperty(exports, "isTracingSuppressed", { enumerable: true, get: function() { - return suppress_tracing_1.isTracingSuppressed; - } }); - Object.defineProperty(exports, "suppressTracing", { enumerable: true, get: function() { - return suppress_tracing_1.suppressTracing; - } }); - Object.defineProperty(exports, "unsuppressTracing", { enumerable: true, get: function() { - return suppress_tracing_1.unsuppressTracing; - } }); - var TraceState_1 = require_TraceState2(); - Object.defineProperty(exports, "TraceState", { enumerable: true, get: function() { - return TraceState_1.TraceState; - } }); - var merge_1 = require_merge2(); - Object.defineProperty(exports, "merge", { enumerable: true, get: function() { - return merge_1.merge; - } }); - var timeout_1 = require_timeout2(); - Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function() { - return timeout_1.TimeoutError; - } }); - Object.defineProperty(exports, "callWithTimeout", { enumerable: true, get: function() { - return timeout_1.callWithTimeout; - } }); - var url_1 = require_url2(); - Object.defineProperty(exports, "isUrlIgnored", { enumerable: true, get: function() { - return url_1.isUrlIgnored; - } }); - Object.defineProperty(exports, "urlMatches", { enumerable: true, get: function() { - return url_1.urlMatches; - } }); - var callback_1 = require_callback2(); - Object.defineProperty(exports, "BindOnceFuture", { enumerable: true, get: function() { - return callback_1.BindOnceFuture; - } }); - var configuration_1 = require_configuration2(); - Object.defineProperty(exports, "diagLogLevelFromString", { enumerable: true, get: function() { - return configuration_1.diagLogLevelFromString; - } }); - var exporter_1 = require_exporter2(); - exports.internal = { - _export: exporter_1._export - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/autoLoaderUtils.js -var require_autoLoaderUtils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.disableInstrumentations = exports.enableInstrumentations = undefined; - function enableInstrumentations(instrumentations, tracerProvider, meterProvider, loggerProvider) { - for (let i = 0, j = instrumentations.length;i < j; i++) { - const instrumentation = instrumentations[i]; - if (tracerProvider) { - instrumentation.setTracerProvider(tracerProvider); - } - if (meterProvider) { - instrumentation.setMeterProvider(meterProvider); - } - if (loggerProvider && instrumentation.setLoggerProvider) { - instrumentation.setLoggerProvider(loggerProvider); - } - if (!instrumentation.getConfig().enabled) { - instrumentation.enable(); - } - } - } - exports.enableInstrumentations = enableInstrumentations; - function disableInstrumentations(instrumentations) { - instrumentations.forEach((instrumentation) => instrumentation.disable()); - } - exports.disableInstrumentations = disableInstrumentations; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/autoLoader.js -var require_autoLoader = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.registerInstrumentations = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src6(); - var autoLoaderUtils_1 = require_autoLoaderUtils(); - function registerInstrumentations(options) { - const tracerProvider = options.tracerProvider || api_1.trace.getTracerProvider(); - const meterProvider = options.meterProvider || api_1.metrics.getMeterProvider(); - const loggerProvider = options.loggerProvider || api_logs_1.logs.getLoggerProvider(); - const instrumentations = options.instrumentations?.flat() ?? []; - (0, autoLoaderUtils_1.enableInstrumentations)(instrumentations, tracerProvider, meterProvider, loggerProvider); - return () => { - (0, autoLoaderUtils_1.disableInstrumentations)(instrumentations); - }; - } - exports.registerInstrumentations = registerInstrumentations; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/semver.js -var require_semver2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.satisfies = undefined; - var api_1 = require_src(); - var VERSION_REGEXP = /^(?:v)?(?(?0|[1-9]\d*)\.(?0|[1-9]\d*)\.(?0|[1-9]\d*))(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; - var RANGE_REGEXP = /^(?<|>|=|==|<=|>=|~|\^|~>)?\s*(?:v)?(?(?x|X|\*|0|[1-9]\d*)(?:\.(?x|X|\*|0|[1-9]\d*))?(?:\.(?x|X|\*|0|[1-9]\d*))?)(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; - var operatorResMap = { - ">": [1], - ">=": [0, 1], - "=": [0], - "<=": [-1, 0], - "<": [-1], - "!=": [-1, 1] - }; - function satisfies(version2, range, options) { - if (!_validateVersion(version2)) { - api_1.diag.error(`Invalid version: ${version2}`); - return false; - } - if (!range) { - return true; - } - range = range.replace(/([<>=~^]+)\s+/g, "$1"); - const parsedVersion = _parseVersion(version2); - if (!parsedVersion) { - return false; - } - const allParsedRanges = []; - const checkResult = _doSatisfies(parsedVersion, range, allParsedRanges, options); - if (checkResult && !options?.includePrerelease) { - return _doPreleaseCheck(parsedVersion, allParsedRanges); - } - return checkResult; - } - exports.satisfies = satisfies; - function _validateVersion(version2) { - return typeof version2 === "string" && VERSION_REGEXP.test(version2); - } - function _doSatisfies(parsedVersion, range, allParsedRanges, options) { - if (range.includes("||")) { - const ranges = range.trim().split("||"); - for (const r of ranges) { - if (_checkRange(parsedVersion, r, allParsedRanges, options)) { - return true; - } - } - return false; - } else if (range.includes(" - ")) { - range = replaceHyphen(range, options); - } else if (range.includes(" ")) { - const ranges = range.trim().replace(/\s{2,}/g, " ").split(" "); - for (const r of ranges) { - if (!_checkRange(parsedVersion, r, allParsedRanges, options)) { - return false; - } - } - return true; - } - return _checkRange(parsedVersion, range, allParsedRanges, options); - } - function _checkRange(parsedVersion, range, allParsedRanges, options) { - range = _normalizeRange(range, options); - if (range.includes(" ")) { - return _doSatisfies(parsedVersion, range, allParsedRanges, options); - } else { - const parsedRange = _parseRange(range); - allParsedRanges.push(parsedRange); - return _satisfies(parsedVersion, parsedRange); - } - } - function _satisfies(parsedVersion, parsedRange) { - if (parsedRange.invalid) { - return false; - } - if (!parsedRange.version || _isWildcard(parsedRange.version)) { - return true; - } - let comparisonResult = _compareVersionSegments(parsedVersion.versionSegments || [], parsedRange.versionSegments || []); - if (comparisonResult === 0) { - const versionPrereleaseSegments = parsedVersion.prereleaseSegments || []; - const rangePrereleaseSegments = parsedRange.prereleaseSegments || []; - if (!versionPrereleaseSegments.length && !rangePrereleaseSegments.length) { - comparisonResult = 0; - } else if (!versionPrereleaseSegments.length && rangePrereleaseSegments.length) { - comparisonResult = 1; - } else if (versionPrereleaseSegments.length && !rangePrereleaseSegments.length) { - comparisonResult = -1; - } else { - comparisonResult = _compareVersionSegments(versionPrereleaseSegments, rangePrereleaseSegments); - } - } - return operatorResMap[parsedRange.op]?.includes(comparisonResult); - } - function _doPreleaseCheck(parsedVersion, allParsedRanges) { - if (parsedVersion.prerelease) { - return allParsedRanges.some((r) => r.prerelease && r.version === parsedVersion.version); - } - return true; - } - function _normalizeRange(range, options) { - range = range.trim(); - range = replaceCaret(range, options); - range = replaceTilde(range); - range = replaceXRange(range, options); - range = range.trim(); - return range; - } - function isX(id) { - return !id || id.toLowerCase() === "x" || id === "*"; - } - function _parseVersion(versionString) { - const match2 = versionString.match(VERSION_REGEXP); - if (!match2) { - api_1.diag.error(`Invalid version: ${versionString}`); - return; - } - const version2 = match2.groups.version; - const prerelease = match2.groups.prerelease; - const build = match2.groups.build; - const versionSegments = version2.split("."); - const prereleaseSegments = prerelease?.split("."); - return { - op: undefined, - version: version2, - versionSegments, - versionSegmentCount: versionSegments.length, - prerelease, - prereleaseSegments, - prereleaseSegmentCount: prereleaseSegments ? prereleaseSegments.length : 0, - build - }; - } - function _parseRange(rangeString) { - if (!rangeString) { - return {}; - } - const match2 = rangeString.match(RANGE_REGEXP); - if (!match2) { - api_1.diag.error(`Invalid range: ${rangeString}`); - return { - invalid: true - }; - } - let op = match2.groups.op; - const version2 = match2.groups.version; - const prerelease = match2.groups.prerelease; - const build = match2.groups.build; - const versionSegments = version2.split("."); - const prereleaseSegments = prerelease?.split("."); - if (op === "==") { - op = "="; - } - return { - op: op || "=", - version: version2, - versionSegments, - versionSegmentCount: versionSegments.length, - prerelease, - prereleaseSegments, - prereleaseSegmentCount: prereleaseSegments ? prereleaseSegments.length : 0, - build - }; - } - function _isWildcard(s2) { - return s2 === "*" || s2 === "x" || s2 === "X"; - } - function _parseVersionString(v) { - const n = parseInt(v, 10); - return isNaN(n) ? v : n; - } - function _normalizeVersionType(a, b) { - if (typeof a === typeof b) { - if (typeof a === "number") { - return [a, b]; - } else if (typeof a === "string") { - return [a, b]; - } else { - throw new Error("Version segments can only be strings or numbers"); - } - } else { - return [String(a), String(b)]; - } - } - function _compareVersionStrings(v1, v2) { - if (_isWildcard(v1) || _isWildcard(v2)) { - return 0; - } - const [parsedV1, parsedV2] = _normalizeVersionType(_parseVersionString(v1), _parseVersionString(v2)); - if (parsedV1 > parsedV2) { - return 1; - } else if (parsedV1 < parsedV2) { - return -1; - } - return 0; - } - function _compareVersionSegments(v1, v2) { - for (let i = 0;i < Math.max(v1.length, v2.length); i++) { - const res = _compareVersionStrings(v1[i] || "0", v2[i] || "0"); - if (res !== 0) { - return res; - } - } - return 0; - } - var LETTERDASHNUMBER = "[a-zA-Z0-9-]"; - var NUMERICIDENTIFIER = "0|[1-9]\\d*"; - var NONNUMERICIDENTIFIER = `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`; - var GTLT = "((?:<|>)?=?)"; - var PRERELEASEIDENTIFIER = `(?:${NUMERICIDENTIFIER}|${NONNUMERICIDENTIFIER})`; - var PRERELEASE = `(?:-(${PRERELEASEIDENTIFIER}(?:\\.${PRERELEASEIDENTIFIER})*))`; - var BUILDIDENTIFIER = `${LETTERDASHNUMBER}+`; - var BUILD = `(?:\\+(${BUILDIDENTIFIER}(?:\\.${BUILDIDENTIFIER})*))`; - var XRANGEIDENTIFIER = `${NUMERICIDENTIFIER}|x|X|\\*`; - var XRANGEPLAIN = `[v=\\s]*(${XRANGEIDENTIFIER})` + `(?:\\.(${XRANGEIDENTIFIER})` + `(?:\\.(${XRANGEIDENTIFIER})` + `(?:${PRERELEASE})?${BUILD}?` + `)?)?`; - var XRANGE = `^${GTLT}\\s*${XRANGEPLAIN}$`; - var XRANGE_REGEXP = new RegExp(XRANGE); - var HYPHENRANGE = `^\\s*(${XRANGEPLAIN})` + `\\s+-\\s+` + `(${XRANGEPLAIN})` + `\\s*$`; - var HYPHENRANGE_REGEXP = new RegExp(HYPHENRANGE); - var LONETILDE = "(?:~>?)"; - var TILDE = `^${LONETILDE}${XRANGEPLAIN}$`; - var TILDE_REGEXP = new RegExp(TILDE); - var LONECARET = "(?:\\^)"; - var CARET = `^${LONECARET}${XRANGEPLAIN}$`; - var CARET_REGEXP = new RegExp(CARET); - function replaceTilde(comp) { - const r = TILDE_REGEXP; - return comp.replace(r, (_, M, m, p, pr) => { - let ret; - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; - } else if (isX(p)) { - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; - } else if (pr) { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; - } - return ret; - }); - } - function replaceCaret(comp, options) { - const r = CARET_REGEXP; - const z2 = options?.includePrerelease ? "-0" : ""; - return comp.replace(r, (_, M, m, p, pr) => { - let ret; - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = `>=${M}.0.0${z2} <${+M + 1}.0.0-0`; - } else if (isX(p)) { - if (M === "0") { - ret = `>=${M}.${m}.0${z2} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.0${z2} <${+M + 1}.0.0-0`; - } - } else if (pr) { - if (M === "0") { - if (m === "0") { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; - } else { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } - } else { - ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; - } - } else { - if (M === "0") { - if (m === "0") { - ret = `>=${M}.${m}.${p}${z2} <${M}.${m}.${+p + 1}-0`; - } else { - ret = `>=${M}.${m}.${p}${z2} <${M}.${+m + 1}.0-0`; - } - } else { - ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; - } - } - return ret; - }); - } - function replaceXRange(comp, options) { - const r = XRANGE_REGEXP; - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - const xM = isX(M); - const xm = xM || isX(m); - const xp = xm || isX(p); - const anyX = xp; - if (gtlt === "=" && anyX) { - gtlt = ""; - } - pr = options?.includePrerelease ? "-0" : ""; - if (xM) { - if (gtlt === ">" || gtlt === "<") { - ret = "<0.0.0-0"; - } else { - ret = "*"; - } - } else if (gtlt && anyX) { - if (xm) { - m = 0; - } - p = 0; - if (gtlt === ">") { - gtlt = ">="; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else { - m = +m + 1; - p = 0; - } - } else if (gtlt === "<=") { - gtlt = "<"; - if (xm) { - M = +M + 1; - } else { - m = +m + 1; - } - } - if (gtlt === "<") { - pr = "-0"; - } - ret = `${gtlt + M}.${m}.${p}${pr}`; - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; - } else if (xp) { - ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; - } - return ret; - }); - } - function replaceHyphen(comp, options) { - const r = HYPHENRANGE_REGEXP; - return comp.replace(r, (_, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { - if (isX(fM)) { - from = ""; - } else if (isX(fm)) { - from = `>=${fM}.0.0${options?.includePrerelease ? "-0" : ""}`; - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${options?.includePrerelease ? "-0" : ""}`; - } else if (fpr) { - from = `>=${from}`; - } else { - from = `>=${from}${options?.includePrerelease ? "-0" : ""}`; - } - if (isX(tM)) { - to = ""; - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0`; - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0`; - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}`; - } else if (options?.includePrerelease) { - to = `<${tM}.${tm}.${+tp + 1}-0`; - } else { - to = `<=${to}`; - } - return `${from} ${to}`.trim(); - }); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/shimmer.js -var require_shimmer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.massUnwrap = exports.unwrap = exports.massWrap = exports.wrap = undefined; - var logger = console.error.bind(console); - function defineProperty(obj, name, value) { - const enumerable = !!obj[name] && Object.prototype.propertyIsEnumerable.call(obj, name); - Object.defineProperty(obj, name, { - configurable: true, - enumerable, - writable: true, - value - }); - } - var wrap = (nodule, name, wrapper) => { - if (!nodule || !nodule[name]) { - logger("no original function " + String(name) + " to wrap"); - return; - } - if (!wrapper) { - logger("no wrapper function"); - logger(new Error().stack); - return; - } - const original = nodule[name]; - if (typeof original !== "function" || typeof wrapper !== "function") { - logger("original object and wrapper must be functions"); - return; - } - const wrapped = wrapper(original, name); - defineProperty(wrapped, "__original", original); - defineProperty(wrapped, "__unwrap", () => { - if (nodule[name] === wrapped) { - defineProperty(nodule, name, original); - } - }); - defineProperty(wrapped, "__wrapped", true); - defineProperty(nodule, name, wrapped); - return wrapped; - }; - exports.wrap = wrap; - var massWrap = (nodules, names, wrapper) => { - if (!nodules) { - logger("must provide one or more modules to patch"); - logger(new Error().stack); - return; - } else if (!Array.isArray(nodules)) { - nodules = [nodules]; - } - if (!(names && Array.isArray(names))) { - logger("must provide one or more functions to wrap on modules"); - return; - } - nodules.forEach((nodule) => { - names.forEach((name) => { - (0, exports.wrap)(nodule, name, wrapper); - }); - }); - }; - exports.massWrap = massWrap; - var unwrap = (nodule, name) => { - if (!nodule || !nodule[name]) { - logger("no function to unwrap."); - logger(new Error().stack); - return; - } - const wrapped = nodule[name]; - if (!wrapped.__unwrap) { - logger("no original to unwrap to -- has " + String(name) + " already been unwrapped?"); - } else { - wrapped.__unwrap(); - return; - } - }; - exports.unwrap = unwrap; - var massUnwrap = (nodules, names) => { - if (!nodules) { - logger("must provide one or more modules to patch"); - logger(new Error().stack); - return; - } else if (!Array.isArray(nodules)) { - nodules = [nodules]; - } - if (!(names && Array.isArray(names))) { - logger("must provide one or more functions to unwrap on modules"); - return; - } - nodules.forEach((nodule) => { - names.forEach((name) => { - (0, exports.unwrap)(nodule, name); - }); - }); - }; - exports.massUnwrap = massUnwrap; - function shimmer(options) { - if (options && options.logger) { - if (typeof options.logger !== "function") { - logger("new logger isn't a function, not replacing"); - } else { - logger = options.logger; - } - } - } - exports.default = shimmer; - shimmer.wrap = exports.wrap; - shimmer.massWrap = exports.massWrap; - shimmer.unwrap = exports.unwrap; - shimmer.massUnwrap = exports.massUnwrap; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/instrumentation.js -var require_instrumentation = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationAbstract = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src6(); - var shimmer = require_shimmer(); - - class InstrumentationAbstract { - instrumentationName; - instrumentationVersion; - _config = {}; - _tracer; - _meter; - _logger; - _diag; - constructor(instrumentationName, instrumentationVersion, config2) { - this.instrumentationName = instrumentationName; - this.instrumentationVersion = instrumentationVersion; - this.setConfig(config2); - this._diag = api_1.diag.createComponentLogger({ - namespace: instrumentationName - }); - this._tracer = api_1.trace.getTracer(instrumentationName, instrumentationVersion); - this._meter = api_1.metrics.getMeter(instrumentationName, instrumentationVersion); - this._logger = api_logs_1.logs.getLogger(instrumentationName, instrumentationVersion); - this._updateMetricInstruments(); - } - _wrap = shimmer.wrap; - _unwrap = shimmer.unwrap; - _massWrap = shimmer.massWrap; - _massUnwrap = shimmer.massUnwrap; - get meter() { - return this._meter; - } - setMeterProvider(meterProvider) { - this._meter = meterProvider.getMeter(this.instrumentationName, this.instrumentationVersion); - this._updateMetricInstruments(); - } - get logger() { - return this._logger; - } - setLoggerProvider(loggerProvider) { - this._logger = loggerProvider.getLogger(this.instrumentationName, this.instrumentationVersion); - } - getModuleDefinitions() { - const initResult = this.init() ?? []; - if (!Array.isArray(initResult)) { - return [initResult]; - } - return initResult; - } - _updateMetricInstruments() { - return; - } - getConfig() { - return this._config; - } - setConfig(config2) { - this._config = { - enabled: true, - ...config2 - }; - } - setTracerProvider(tracerProvider) { - this._tracer = tracerProvider.getTracer(this.instrumentationName, this.instrumentationVersion); - } - get tracer() { - return this._tracer; - } - _runSpanCustomizationHook(hookHandler, triggerName, span, info) { - if (!hookHandler) { - return; - } - try { - hookHandler(span, info); - } catch (e) { - this._diag.error(`Error running span customization hook due to exception in handler`, { triggerName }, e); - } - } - } - exports.InstrumentationAbstract = InstrumentationAbstract; -}); - -// ../../../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js -var require_ms = __commonJS((exports, module) => { - var s2 = 1000; - var m = s2 * 60; - var h = m * 60; - var d = h * 24; - var w = d * 7; - var y = d * 365.25; - module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === "string" && val.length > 0) { - return parse6(val); - } else if (type === "number" && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); - }; - function parse6(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match2 = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); - if (!match2) { - return; - } - var n = parseFloat(match2[1]); - var type = (match2[2] || "ms").toLowerCase(); - switch (type) { - case "years": - case "year": - case "yrs": - case "yr": - case "y": - return n * y; - case "weeks": - case "week": - case "w": - return n * w; - case "days": - case "day": - case "d": - return n * d; - case "hours": - case "hour": - case "hrs": - case "hr": - case "h": - return n * h; - case "minutes": - case "minute": - case "mins": - case "min": - case "m": - return n * m; - case "seconds": - case "second": - case "secs": - case "sec": - case "s": - return n * s2; - case "milliseconds": - case "millisecond": - case "msecs": - case "msec": - case "ms": - return n; - default: - return; - } - } - function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + "d"; - } - if (msAbs >= h) { - return Math.round(ms / h) + "h"; - } - if (msAbs >= m) { - return Math.round(ms / m) + "m"; - } - if (msAbs >= s2) { - return Math.round(ms / s2) + "s"; - } - return ms + "ms"; - } - function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, "day"); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, "hour"); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, "minute"); - } - if (msAbs >= s2) { - return plural(ms, msAbs, s2, "second"); - } - return ms + " ms"; - } - function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); - } -}); - -// ../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js -var require_common = __commonJS((exports, module) => { - function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require_ms(); - createDebug.destroy = destroy; - Object.keys(env).forEach((key) => { - createDebug[key] = env[key]; - }); - createDebug.names = []; - createDebug.skips = []; - createDebug.formatters = {}; - function selectColor(namespace) { - let hash2 = 0; - for (let i = 0;i < namespace.length; i++) { - hash2 = (hash2 << 5) - hash2 + namespace.charCodeAt(i); - hash2 |= 0; - } - return createDebug.colors[Math.abs(hash2) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - function debug(...args) { - if (!debug.enabled) { - return; - } - const self2 = debug; - const curr = Number(new Date); - const ms = curr - (prevTime || curr); - self2.diff = ms; - self2.prev = prevTime; - self2.curr = curr; - prevTime = curr; - args[0] = createDebug.coerce(args[0]); - if (typeof args[0] !== "string") { - args.unshift("%O"); - } - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match2, format) => { - if (match2 === "%%") { - return "%"; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === "function") { - const val = args[index]; - match2 = formatter.call(self2, val); - args.splice(index, 1); - index--; - } - return match2; - }); - createDebug.formatArgs.call(self2, args); - const logFn = self2.log || createDebug.log; - logFn.apply(self2, args); - } - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend2; - debug.destroy = createDebug.destroy; - Object.defineProperty(debug, "enabled", { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - return enabledCache; - }, - set: (v) => { - enableOverride = v; - } - }); - if (typeof createDebug.init === "function") { - createDebug.init(debug); - } - return debug; - } - function extend2(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - createDebug.names = []; - createDebug.skips = []; - const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean); - for (const ns of split) { - if (ns[0] === "-") { - createDebug.skips.push(ns.slice(1)); - } else { - createDebug.names.push(ns); - } - } - } - function matchesTemplate(search, template) { - let searchIndex = 0; - let templateIndex = 0; - let starIndex = -1; - let matchIndex = 0; - while (searchIndex < search.length) { - if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) { - if (template[templateIndex] === "*") { - starIndex = templateIndex; - matchIndex = searchIndex; - templateIndex++; - } else { - searchIndex++; - templateIndex++; - } - } else if (starIndex !== -1) { - templateIndex = starIndex + 1; - matchIndex++; - searchIndex = matchIndex; - } else { - return false; - } - } - while (templateIndex < template.length && template[templateIndex] === "*") { - templateIndex++; - } - return templateIndex === template.length; - } - function disable() { - const namespaces = [ - ...createDebug.names, - ...createDebug.skips.map((namespace) => "-" + namespace) - ].join(","); - createDebug.enable(""); - return namespaces; - } - function enabled(name) { - for (const skip of createDebug.skips) { - if (matchesTemplate(name, skip)) { - return false; - } - } - for (const ns of createDebug.names) { - if (matchesTemplate(name, ns)) { - return true; - } - } - return false; - } - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - function destroy() { - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - createDebug.enable(createDebug.load()); - return createDebug; - } - module.exports = setup; -}); - -// ../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js -var require_browser = __commonJS((exports, module) => { - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.storage = localstorage(); - exports.destroy = (() => { - let warned = false; - return () => { - if (!warned) { - warned = true; - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - }; - })(); - exports.colors = [ - "#0000CC", - "#0000FF", - "#0033CC", - "#0033FF", - "#0066CC", - "#0066FF", - "#0099CC", - "#0099FF", - "#00CC00", - "#00CC33", - "#00CC66", - "#00CC99", - "#00CCCC", - "#00CCFF", - "#3300CC", - "#3300FF", - "#3333CC", - "#3333FF", - "#3366CC", - "#3366FF", - "#3399CC", - "#3399FF", - "#33CC00", - "#33CC33", - "#33CC66", - "#33CC99", - "#33CCCC", - "#33CCFF", - "#6600CC", - "#6600FF", - "#6633CC", - "#6633FF", - "#66CC00", - "#66CC33", - "#9900CC", - "#9900FF", - "#9933CC", - "#9933FF", - "#99CC00", - "#99CC33", - "#CC0000", - "#CC0033", - "#CC0066", - "#CC0099", - "#CC00CC", - "#CC00FF", - "#CC3300", - "#CC3333", - "#CC3366", - "#CC3399", - "#CC33CC", - "#CC33FF", - "#CC6600", - "#CC6633", - "#CC9900", - "#CC9933", - "#CCCC00", - "#CCCC33", - "#FF0000", - "#FF0033", - "#FF0066", - "#FF0099", - "#FF00CC", - "#FF00FF", - "#FF3300", - "#FF3333", - "#FF3366", - "#FF3399", - "#FF33CC", - "#FF33FF", - "#FF6600", - "#FF6633", - "#FF9900", - "#FF9933", - "#FFCC00", - "#FFCC33" - ]; - function useColors() { - if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { - return true; - } - if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - let m; - return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); - } - function formatArgs(args) { - args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module.exports.humanize(this.diff); - if (!this.useColors) { - return; - } - const c = "color: " + this.color; - args.splice(1, 0, c, "color: inherit"); - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, (match2) => { - if (match2 === "%%") { - return; - } - index++; - if (match2 === "%c") { - lastC = index; - } - }); - args.splice(lastC, 0, c); - } - exports.log = console.debug || console.log || (() => {}); - function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem("debug", namespaces); - } else { - exports.storage.removeItem("debug"); - } - } catch (error48) {} - } - function load() { - let r; - try { - r = exports.storage.getItem("debug") || exports.storage.getItem("DEBUG"); - } catch (error48) {} - if (!r && typeof process !== "undefined" && "env" in process) { - r = process.env.DEBUG; - } - return r; - } - function localstorage() { - try { - return localStorage; - } catch (error48) {} - } - module.exports = require_common()(exports); - var { formatters } = module.exports; - formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (error48) { - return "[UnexpectedJSONParseError]: " + error48.message; - } - }; -}); - -// ../../../../node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js -var require_has_flag = __commonJS((exports, module) => { - module.exports = (flag, argv = process.argv) => { - const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--"; - const position = argv.indexOf(prefix + flag); - const terminatorPosition = argv.indexOf("--"); - return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); - }; -}); - -// ../../../../node_modules/.bun/supports-color@8.1.1/node_modules/supports-color/index.js -var require_supports_color = __commonJS((exports, module) => { - var os = __require("os"); - var tty = __require("tty"); - var hasFlag = require_has_flag(); - var { env } = process; - var flagForceColor; - if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) { - flagForceColor = 0; - } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) { - flagForceColor = 1; - } - function envForceColor() { - if ("FORCE_COLOR" in env) { - if (env.FORCE_COLOR === "true") { - return 1; - } - if (env.FORCE_COLOR === "false") { - return 0; - } - return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3); - } - } - function translateLevel(level) { - if (level === 0) { - return false; - } - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; - } - function supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) { - const noFlagForceColor = envForceColor(); - if (noFlagForceColor !== undefined) { - flagForceColor = noFlagForceColor; - } - const forceColor = sniffFlags ? flagForceColor : noFlagForceColor; - if (forceColor === 0) { - return 0; - } - if (sniffFlags) { - if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) { - return 3; - } - if (hasFlag("color=256")) { - return 2; - } - } - if (haveStream && !streamIsTTY && forceColor === undefined) { - return 0; - } - const min = forceColor || 0; - if (env.TERM === "dumb") { - return min; - } - if (process.platform === "win32") { - const osRelease = os.release().split("."); - if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } - return 1; - } - if ("CI" in env) { - if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE", "DRONE"].some((sign) => (sign in env)) || env.CI_NAME === "codeship") { - return 1; - } - return min; - } - if ("TEAMCITY_VERSION" in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; - } - if (env.COLORTERM === "truecolor") { - return 3; - } - if ("TERM_PROGRAM" in env) { - const version2 = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10); - switch (env.TERM_PROGRAM) { - case "iTerm.app": - return version2 >= 3 ? 3 : 2; - case "Apple_Terminal": - return 2; - } - } - if (/-256(color)?$/i.test(env.TERM)) { - return 2; - } - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { - return 1; - } - if ("COLORTERM" in env) { - return 1; - } - return min; - } - function getSupportLevel(stream3, options = {}) { - const level = supportsColor(stream3, { - streamIsTTY: stream3 && stream3.isTTY, - ...options - }); - return translateLevel(level); - } - module.exports = { - supportsColor: getSupportLevel, - stdout: getSupportLevel({ isTTY: tty.isatty(1) }), - stderr: getSupportLevel({ isTTY: tty.isatty(2) }) - }; -}); - -// ../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js -var require_node6 = __commonJS((exports, module) => { - var tty = __require("tty"); - var util3 = __require("util"); - exports.init = init2; - exports.log = log; - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.destroy = util3.deprecate(() => {}, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - exports.colors = [6, 2, 3, 4, 5, 1]; - try { - const supportsColor = require_supports_color(); - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } - } catch (error48) {} - exports.inspectOpts = Object.keys(process.env).filter((key) => { - return /^debug_/i.test(key); - }).reduce((obj, key) => { - const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === "null") { - val = null; - } else { - val = Number(val); - } - obj[prop] = val; - return obj; - }, {}); - function useColors() { - return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(process.stderr.fd); - } - function formatArgs(args) { - const { namespace: name, useColors: useColors2 } = this; - if (useColors2) { - const c = this.color; - const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c); - const prefix = ` ${colorCode};1m${name} \x1B[0m`; - args[0] = prefix + args[0].split(` -`).join(` -` + prefix); - args.push(colorCode + "m+" + module.exports.humanize(this.diff) + "\x1B[0m"); - } else { - args[0] = getDate() + name + " " + args[0]; - } - } - function getDate() { - if (exports.inspectOpts.hideDate) { - return ""; - } - return new Date().toISOString() + " "; - } - function log(...args) { - return process.stderr.write(util3.formatWithOptions(exports.inspectOpts, ...args) + ` -`); - } - function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - delete process.env.DEBUG; - } - } - function load() { - return process.env.DEBUG; - } - function init2(debug) { - debug.inspectOpts = {}; - const keys = Object.keys(exports.inspectOpts); - for (let i = 0;i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } - } - module.exports = require_common()(exports); - var { formatters } = module.exports; - formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util3.inspect(v, this.inspectOpts).split(` -`).map((str) => str.trim()).join(" "); - }; - formatters.O = function(v) { - this.inspectOpts.colors = this.useColors; - return util3.inspect(v, this.inspectOpts); - }; -}); - -// ../../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js -var require_src8 = __commonJS((exports, module) => { - if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) { - module.exports = require_browser(); - } else { - module.exports = require_node6(); - } -}); - -// ../../../../node_modules/.bun/module-details-from-path@1.0.4/node_modules/module-details-from-path/index.js -var require_module_details_from_path = __commonJS((exports, module) => { - var sep = __require("path").sep; - module.exports = function(file2) { - var segments = file2.split(sep); - var index = segments.lastIndexOf("node_modules"); - if (index === -1) - return; - if (!segments[index + 1]) - return; - var scoped = segments[index + 1][0] === "@"; - var name = scoped ? segments[index + 1] + "/" + segments[index + 2] : segments[index + 1]; - var offset = scoped ? 3 : 2; - var basedir = ""; - var lastBaseDirSegmentIndex = index + offset - 1; - for (var i = 0;i <= lastBaseDirSegmentIndex; i++) { - if (i === lastBaseDirSegmentIndex) { - basedir += segments[i]; - } else { - basedir += segments[i] + sep; - } - } - var path = ""; - var lastSegmentIndex = segments.length - 1; - for (var i2 = index + offset;i2 <= lastSegmentIndex; i2++) { - if (i2 === lastSegmentIndex) { - path += segments[i2]; - } else { - path += segments[i2] + sep; - } - } - return { - name, - basedir, - path - }; - }; -}); - -// ../../../../node_modules/.bun/require-in-the-middle@8.0.1/node_modules/require-in-the-middle/index.js -var require_require_in_the_middle = __commonJS((exports, module) => { - var path = __require("path"); - var Module = __require("module"); - var debug = require_src8()("require-in-the-middle"); - var moduleDetailsFromPath = require_module_details_from_path(); - module.exports = Hook; - module.exports.Hook = Hook; - var builtinModules; - var isCore; - if (Module.isBuiltin) { - isCore = Module.isBuiltin; - } else if (Module.builtinModules) { - isCore = (moduleName2) => { - if (moduleName2.startsWith("node:")) { - return true; - } - if (builtinModules === undefined) { - builtinModules = new Set(Module.builtinModules); - } - return builtinModules.has(moduleName2); - }; - } else { - throw new Error("'require-in-the-middle' requires Node.js >=v9.3.0 or >=v8.10.0"); - } - var normalize = /([/\\]index)?(\.js)?$/; - - class ExportsCache { - constructor() { - this._localCache = new Map; - this._kRitmExports = Symbol("RitmExports"); - } - has(filename, isBuiltin) { - if (this._localCache.has(filename)) { - return true; - } else if (!isBuiltin) { - const mod2 = __require.cache[filename]; - return !!(mod2 && (this._kRitmExports in mod2)); - } else { - return false; - } - } - get(filename, isBuiltin) { - const cachedExports = this._localCache.get(filename); - if (cachedExports !== undefined) { - return cachedExports; - } else if (!isBuiltin) { - const mod2 = __require.cache[filename]; - return mod2 && mod2[this._kRitmExports]; - } - } - set(filename, exports2, isBuiltin) { - if (isBuiltin) { - this._localCache.set(filename, exports2); - } else if (filename in __require.cache) { - __require.cache[filename][this._kRitmExports] = exports2; - } else { - debug('non-core module is unexpectedly not in require.cache: "%s"', filename); - this._localCache.set(filename, exports2); - } - } - } - function Hook(modules, options, onrequire) { - if (this instanceof Hook === false) - return new Hook(modules, options, onrequire); - if (typeof modules === "function") { - onrequire = modules; - modules = null; - options = null; - } else if (typeof options === "function") { - onrequire = options; - options = null; - } - if (typeof Module._resolveFilename !== "function") { - console.error("Error: Expected Module._resolveFilename to be a function (was: %s) - aborting!", typeof Module._resolveFilename); - console.error("Please report this error as an issue related to Node.js %s at https://github.com/nodejs/require-in-the-middle/issues", process.version); - return; - } - this._cache = new ExportsCache; - this._unhooked = false; - this._origRequire = Module.prototype.require; - const self2 = this; - const patching = new Set; - const internals = options ? options.internals === true : false; - const hasWhitelist = Array.isArray(modules); - debug("registering require hook"); - this._require = Module.prototype.require = function(id) { - if (self2._unhooked === true) { - debug("ignoring require call - module is soft-unhooked"); - return self2._origRequire.apply(this, arguments); - } - return patchedRequire.call(this, arguments, false); - }; - if (typeof process.getBuiltinModule === "function") { - this._origGetBuiltinModule = process.getBuiltinModule; - this._getBuiltinModule = process.getBuiltinModule = function(id) { - if (self2._unhooked === true) { - debug("ignoring process.getBuiltinModule call - module is soft-unhooked"); - return self2._origGetBuiltinModule.apply(this, arguments); - } - return patchedRequire.call(this, arguments, true); - }; - } - function patchedRequire(args, coreOnly) { - const id = args[0]; - const core2 = isCore(id); - let filename; - if (core2) { - filename = id; - if (id.startsWith("node:")) { - const idWithoutPrefix = id.slice(5); - if (isCore(idWithoutPrefix)) { - filename = idWithoutPrefix; - } - } - } else if (coreOnly) { - debug("call to process.getBuiltinModule with unknown built-in id"); - return self2._origGetBuiltinModule.apply(this, args); - } else { - try { - filename = Module._resolveFilename(id, this); - } catch (resolveErr) { - debug('Module._resolveFilename("%s") threw %j, calling original Module.require', id, resolveErr.message); - return self2._origRequire.apply(this, args); - } - } - let moduleName2, basedir; - debug("processing %s module require('%s'): %s", core2 === true ? "core" : "non-core", id, filename); - if (self2._cache.has(filename, core2) === true) { - debug("returning already patched cached module: %s", filename); - return self2._cache.get(filename, core2); - } - const isPatching = patching.has(filename); - if (isPatching === false) { - patching.add(filename); - } - const exports2 = coreOnly ? self2._origGetBuiltinModule.apply(this, args) : self2._origRequire.apply(this, args); - if (isPatching === true) { - debug("module is in the process of being patched already - ignoring: %s", filename); - return exports2; - } - patching.delete(filename); - if (core2 === true) { - if (hasWhitelist === true && modules.includes(filename) === false) { - debug("ignoring core module not on whitelist: %s", filename); - return exports2; - } - moduleName2 = filename; - } else if (hasWhitelist === true && modules.includes(filename)) { - const parsedPath = path.parse(filename); - moduleName2 = parsedPath.name; - basedir = parsedPath.dir; - } else { - const stat = moduleDetailsFromPath(filename); - if (stat === undefined) { - debug("could not parse filename: %s", filename); - return exports2; - } - moduleName2 = stat.name; - basedir = stat.basedir; - const fullModuleName = resolveModuleName(stat); - debug("resolved filename to module: %s (id: %s, resolved: %s, basedir: %s)", moduleName2, id, fullModuleName, basedir); - let matchFound = false; - if (hasWhitelist) { - if (!id.startsWith(".") && modules.includes(id)) { - moduleName2 = id; - matchFound = true; - } - if (!modules.includes(moduleName2) && !modules.includes(fullModuleName)) { - return exports2; - } - if (modules.includes(fullModuleName) && fullModuleName !== moduleName2) { - moduleName2 = fullModuleName; - matchFound = true; - } - } - if (!matchFound) { - let res; - try { - res = __require.resolve(moduleName2, { paths: [basedir] }); - } catch (e) { - debug("could not resolve module: %s", moduleName2); - self2._cache.set(filename, exports2, core2); - return exports2; - } - if (res !== filename) { - if (internals === true) { - moduleName2 = moduleName2 + path.sep + path.relative(basedir, filename); - debug("preparing to process require of internal file: %s", moduleName2); - } else { - debug("ignoring require of non-main module file: %s", res); - self2._cache.set(filename, exports2, core2); - return exports2; - } - } - } - } - self2._cache.set(filename, exports2, core2); - debug("calling require hook: %s", moduleName2); - const patchedExports = onrequire(exports2, moduleName2, basedir); - self2._cache.set(filename, patchedExports, core2); - debug("returning module: %s", moduleName2); - return patchedExports; - } - } - Hook.prototype.unhook = function() { - this._unhooked = true; - if (this._require === Module.prototype.require) { - Module.prototype.require = this._origRequire; - debug("require unhook successful"); - } else { - debug("require unhook unsuccessful"); - } - if (process.getBuiltinModule !== undefined) { - if (this._getBuiltinModule === process.getBuiltinModule) { - process.getBuiltinModule = this._origGetBuiltinModule; - debug("process.getBuiltinModule unhook successful"); - } else { - debug("process.getBuiltinModule unhook unsuccessful"); - } - } - }; - function resolveModuleName(stat) { - const normalizedPath = path.sep !== "/" ? stat.path.split(path.sep).join("/") : stat.path; - return path.posix.join(stat.name, normalizedPath).replace(normalize, ""); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/ModuleNameTrie.js -var require_ModuleNameTrie = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ModuleNameTrie = exports.ModuleNameSeparator = undefined; - exports.ModuleNameSeparator = "/"; - - class ModuleNameTrieNode { - hooks = []; - children = new Map; - } - - class ModuleNameTrie { - _trie = new ModuleNameTrieNode; - _counter = 0; - insert(hook) { - let trieNode = this._trie; - for (const moduleNamePart of hook.moduleName.split(exports.ModuleNameSeparator)) { - let nextNode = trieNode.children.get(moduleNamePart); - if (!nextNode) { - nextNode = new ModuleNameTrieNode; - trieNode.children.set(moduleNamePart, nextNode); - } - trieNode = nextNode; - } - trieNode.hooks.push({ hook, insertedId: this._counter++ }); - } - search(moduleName2, { maintainInsertionOrder, fullOnly } = {}) { - let trieNode = this._trie; - const results = []; - let foundFull = true; - for (const moduleNamePart of moduleName2.split(exports.ModuleNameSeparator)) { - const nextNode = trieNode.children.get(moduleNamePart); - if (!nextNode) { - foundFull = false; - break; - } - if (!fullOnly) { - results.push(...nextNode.hooks); - } - trieNode = nextNode; - } - if (fullOnly && foundFull) { - results.push(...trieNode.hooks); - } - if (results.length === 0) { - return []; - } - if (results.length === 1) { - return [results[0].hook]; - } - if (maintainInsertionOrder) { - results.sort((a, b) => a.insertedId - b.insertedId); - } - return results.map(({ hook }) => hook); - } - } - exports.ModuleNameTrie = ModuleNameTrie; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/RequireInTheMiddleSingleton.js -var require_RequireInTheMiddleSingleton = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RequireInTheMiddleSingleton = undefined; - var require_in_the_middle_1 = require_require_in_the_middle(); - var path = __require("path"); - var ModuleNameTrie_1 = require_ModuleNameTrie(); - var isMocha = [ - "afterEach", - "after", - "beforeEach", - "before", - "describe", - "it" - ].every((fn) => { - return typeof global[fn] === "function"; - }); - - class RequireInTheMiddleSingleton { - _moduleNameTrie = new ModuleNameTrie_1.ModuleNameTrie; - static _instance; - constructor() { - this._initialize(); - } - _initialize() { - new require_in_the_middle_1.Hook(null, { internals: true }, (exports2, name, basedir) => { - const normalizedModuleName = normalizePathSeparators(name); - const matches = this._moduleNameTrie.search(normalizedModuleName, { - maintainInsertionOrder: true, - fullOnly: basedir === undefined - }); - for (const { onRequire } of matches) { - exports2 = onRequire(exports2, name, basedir); - } - return exports2; - }); - } - register(moduleName2, onRequire) { - const hooked = { moduleName: moduleName2, onRequire }; - this._moduleNameTrie.insert(hooked); - return hooked; - } - static getInstance() { - if (isMocha) - return new RequireInTheMiddleSingleton; - return this._instance = this._instance ?? new RequireInTheMiddleSingleton; - } - } - exports.RequireInTheMiddleSingleton = RequireInTheMiddleSingleton; - function normalizePathSeparators(moduleNameOrPath) { - return path.sep !== ModuleNameTrie_1.ModuleNameSeparator ? moduleNameOrPath.split(path.sep).join(ModuleNameTrie_1.ModuleNameSeparator) : moduleNameOrPath; - } -}); - -// ../../../../node_modules/.bun/import-in-the-middle@2.0.1/node_modules/import-in-the-middle/lib/register.js -var require_register = __commonJS((exports) => { - var importHooks = []; - var setters = new WeakMap; - var getters = new WeakMap; - var specifiers = new Map; - var toHook = []; - var proxyHandler = { - set(target, name, value) { - return setters.get(target)[name](value); - }, - get(target, name) { - if (name === Symbol.toStringTag) { - return "Module"; - } - const getter = getters.get(target)[name]; - if (typeof getter === "function") { - return getter(); - } - }, - defineProperty(target, property, descriptor) { - if (!("value" in descriptor)) { - throw new Error("Getters/setters are not supported for exports property descriptors."); - } - return setters.get(target)[property](descriptor.value); - } - }; - function register(name, namespace, set2, get3, specifier) { - specifiers.set(name, specifier); - setters.set(namespace, set2); - getters.set(namespace, get3); - const proxy = new Proxy(namespace, proxyHandler); - importHooks.forEach((hook) => hook(name, proxy, specifier)); - toHook.push([name, proxy, specifier]); - } - var experimentalPatchInternals = false; - function getExperimentalPatchInternals() { - return experimentalPatchInternals; - } - function setExperimentalPatchInternals(value) { - experimentalPatchInternals = value; - } - exports.register = register; - exports.importHooks = importHooks; - exports.specifiers = specifiers; - exports.toHook = toHook; - exports.getExperimentalPatchInternals = getExperimentalPatchInternals; - exports.setExperimentalPatchInternals = setExperimentalPatchInternals; -}); - -// ../../../../node_modules/.bun/import-in-the-middle@2.0.1/node_modules/import-in-the-middle/index.js -var require_import_in_the_middle = __commonJS((exports, module) => { - var path = __require("path"); - var parse6 = require_module_details_from_path(); - var { fileURLToPath } = __require("url"); - var { MessageChannel } = __require("worker_threads"); - var { - importHooks, - specifiers, - toHook, - getExperimentalPatchInternals - } = require_register(); - function addHook(hook) { - importHooks.push(hook); - toHook.forEach(([name, namespace, specifier]) => hook(name, namespace, specifier)); - } - function removeHook(hook) { - const index = importHooks.indexOf(hook); - if (index > -1) { - importHooks.splice(index, 1); - } - } - function callHookFn(hookFn, namespace, name, baseDir) { - const newDefault = hookFn(namespace, name, baseDir); - if (newDefault && newDefault !== namespace) { - namespace.default = newDefault; - } - } - var sendModulesToLoader; - function createAddHookMessageChannel() { - const { port1, port2 } = new MessageChannel; - let pendingAckCount = 0; - let resolveFn; - sendModulesToLoader = (modules) => { - pendingAckCount++; - port1.postMessage(modules); - }; - port1.on("message", () => { - pendingAckCount--; - if (resolveFn && pendingAckCount <= 0) { - resolveFn(); - } - }).unref(); - function waitForAllMessagesAcknowledged() { - const timer = setInterval(() => {}, 1000); - const promise2 = new Promise((resolve2) => { - resolveFn = resolve2; - }).then(() => { - clearInterval(timer); - }); - if (pendingAckCount === 0) { - resolveFn(); - } - return promise2; - } - const addHookMessagePort = port2; - const registerOptions = { data: { addHookMessagePort, include: [] }, transferList: [addHookMessagePort] }; - return { registerOptions, addHookMessagePort, waitForAllMessagesAcknowledged }; - } - function Hook(modules, options, hookFn) { - if (this instanceof Hook === false) - return new Hook(modules, options, hookFn); - if (typeof modules === "function") { - hookFn = modules; - modules = null; - options = null; - } else if (typeof options === "function") { - hookFn = options; - options = null; - } - const internals = options ? options.internals === true : false; - if (sendModulesToLoader && Array.isArray(modules)) { - sendModulesToLoader(modules); - } - this._iitmHook = (name, namespace, specifier) => { - const filename = name; - const isBuiltin = name.startsWith("node:"); - let baseDir; - if (isBuiltin) { - name = name.replace(/^node:/, ""); - } else { - if (name.startsWith("file://")) { - try { - name = fileURLToPath(name); - } catch (e) {} - } - const details = parse6(name); - if (details) { - name = details.name; - baseDir = details.basedir; - } - } - if (modules) { - for (const moduleName2 of modules) { - if (moduleName2 === specifier) { - callHookFn(hookFn, namespace, name, baseDir); - } else if (moduleName2 === name) { - if (baseDir) { - if (internals) { - name = name + path.sep + path.relative(baseDir, fileURLToPath(filename)); - } else { - if (!getExperimentalPatchInternals() && !baseDir.endsWith(specifiers.get(filename))) - continue; - } - } - callHookFn(hookFn, namespace, name, baseDir); - } - } - } else { - callHookFn(hookFn, namespace, name, baseDir); - } - }; - addHook(this._iitmHook); - } - Hook.prototype.unhook = function() { - removeHook(this._iitmHook); - }; - module.exports = Hook; - module.exports.Hook = Hook; - module.exports.addHook = addHook; - module.exports.removeHook = removeHook; - module.exports.createAddHookMessageChannel = createAddHookMessageChannel; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/utils.js -var require_utils8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isWrapped = exports.safeExecuteInTheMiddleAsync = exports.safeExecuteInTheMiddle = undefined; - function safeExecuteInTheMiddle(execute, onFinish, preventThrowingError) { - let error48; - let result; - try { - result = execute(); - } catch (e) { - error48 = e; - } finally { - onFinish(error48, result); - if (error48 && !preventThrowingError) { - throw error48; - } - return result; - } - } - exports.safeExecuteInTheMiddle = safeExecuteInTheMiddle; - async function safeExecuteInTheMiddleAsync(execute, onFinish, preventThrowingError) { - let error48; - let result; - try { - result = await execute(); - } catch (e) { - error48 = e; - } finally { - onFinish(error48, result); - if (error48 && !preventThrowingError) { - throw error48; - } - return result; - } - } - exports.safeExecuteInTheMiddleAsync = safeExecuteInTheMiddleAsync; - function isWrapped(func) { - return typeof func === "function" && typeof func.__original === "function" && typeof func.__unwrap === "function" && func.__wrapped === true; - } - exports.isWrapped = isWrapped; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/instrumentation.js -var require_instrumentation2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationBase = undefined; - var path = __require("path"); - var util_1 = __require("util"); - var semver_1 = require_semver2(); - var shimmer_1 = require_shimmer(); - var instrumentation_1 = require_instrumentation(); - var RequireInTheMiddleSingleton_1 = require_RequireInTheMiddleSingleton(); - var import_in_the_middle_1 = require_import_in_the_middle(); - var api_1 = require_src(); - var require_in_the_middle_1 = require_require_in_the_middle(); - var fs_1 = __require("fs"); - var utils_1 = require_utils8(); - - class InstrumentationBase extends instrumentation_1.InstrumentationAbstract { - _modules; - _hooks = []; - _requireInTheMiddleSingleton = RequireInTheMiddleSingleton_1.RequireInTheMiddleSingleton.getInstance(); - _enabled = false; - constructor(instrumentationName, instrumentationVersion, config2) { - super(instrumentationName, instrumentationVersion, config2); - let modules = this.init(); - if (modules && !Array.isArray(modules)) { - modules = [modules]; - } - this._modules = modules || []; - if (this._config.enabled) { - this.enable(); - } - } - _wrap = (moduleExports, name, wrapper) => { - if ((0, utils_1.isWrapped)(moduleExports[name])) { - this._unwrap(moduleExports, name); - } - if (!util_1.types.isProxy(moduleExports)) { - return (0, shimmer_1.wrap)(moduleExports, name, wrapper); - } else { - const wrapped = (0, shimmer_1.wrap)(Object.assign({}, moduleExports), name, wrapper); - Object.defineProperty(moduleExports, name, { - value: wrapped - }); - return wrapped; - } - }; - _unwrap = (moduleExports, name) => { - if (!util_1.types.isProxy(moduleExports)) { - return (0, shimmer_1.unwrap)(moduleExports, name); - } else { - return Object.defineProperty(moduleExports, name, { - value: moduleExports[name] - }); - } - }; - _massWrap = (moduleExportsArray, names, wrapper) => { - if (!moduleExportsArray) { - api_1.diag.error("must provide one or more modules to patch"); - return; - } else if (!Array.isArray(moduleExportsArray)) { - moduleExportsArray = [moduleExportsArray]; - } - if (!(names && Array.isArray(names))) { - api_1.diag.error("must provide one or more functions to wrap on modules"); - return; - } - moduleExportsArray.forEach((moduleExports) => { - names.forEach((name) => { - this._wrap(moduleExports, name, wrapper); - }); - }); - }; - _massUnwrap = (moduleExportsArray, names) => { - if (!moduleExportsArray) { - api_1.diag.error("must provide one or more modules to patch"); - return; - } else if (!Array.isArray(moduleExportsArray)) { - moduleExportsArray = [moduleExportsArray]; - } - if (!(names && Array.isArray(names))) { - api_1.diag.error("must provide one or more functions to wrap on modules"); - return; - } - moduleExportsArray.forEach((moduleExports) => { - names.forEach((name) => { - this._unwrap(moduleExports, name); - }); - }); - }; - _warnOnPreloadedModules() { - this._modules.forEach((module2) => { - const { name } = module2; - try { - const resolvedModule = __require.resolve(name); - if (__require.cache[resolvedModule]) { - this._diag.warn(`Module ${name} has been loaded before ${this.instrumentationName} so it might not work, please initialize it before requiring ${name}`); - } - } catch {} - }); - } - _extractPackageVersion(baseDir) { - try { - const json3 = (0, fs_1.readFileSync)(path.join(baseDir, "package.json"), { - encoding: "utf8" - }); - const version2 = JSON.parse(json3).version; - return typeof version2 === "string" ? version2 : undefined; - } catch { - api_1.diag.warn("Failed extracting version", baseDir); - } - return; - } - _onRequire(module2, exports2, name, baseDir) { - if (!baseDir) { - if (typeof module2.patch === "function") { - module2.moduleExports = exports2; - if (this._enabled) { - this._diag.debug("Applying instrumentation patch for nodejs core module on require hook", { - module: module2.name - }); - return module2.patch(exports2); - } - } - return exports2; - } - const version2 = this._extractPackageVersion(baseDir); - module2.moduleVersion = version2; - if (module2.name === name) { - if (isSupported(module2.supportedVersions, version2, module2.includePrerelease)) { - if (typeof module2.patch === "function") { - module2.moduleExports = exports2; - if (this._enabled) { - this._diag.debug("Applying instrumentation patch for module on require hook", { - module: module2.name, - version: module2.moduleVersion, - baseDir - }); - return module2.patch(exports2, module2.moduleVersion); - } - } - } - return exports2; - } - const files = module2.files ?? []; - const normalizedName = path.normalize(name); - const supportedFileInstrumentations = files.filter((f) => f.name === normalizedName).filter((f) => isSupported(f.supportedVersions, version2, module2.includePrerelease)); - return supportedFileInstrumentations.reduce((patchedExports, file2) => { - file2.moduleExports = patchedExports; - if (this._enabled) { - this._diag.debug("Applying instrumentation patch for nodejs module file on require hook", { - module: module2.name, - version: module2.moduleVersion, - fileName: file2.name, - baseDir - }); - return file2.patch(patchedExports, module2.moduleVersion); - } - return patchedExports; - }, exports2); - } - enable() { - if (this._enabled) { - return; - } - this._enabled = true; - if (this._hooks.length > 0) { - for (const module2 of this._modules) { - if (typeof module2.patch === "function" && module2.moduleExports) { - this._diag.debug("Applying instrumentation patch for nodejs module on instrumentation enabled", { - module: module2.name, - version: module2.moduleVersion - }); - module2.patch(module2.moduleExports, module2.moduleVersion); - } - for (const file2 of module2.files) { - if (file2.moduleExports) { - this._diag.debug("Applying instrumentation patch for nodejs module file on instrumentation enabled", { - module: module2.name, - version: module2.moduleVersion, - fileName: file2.name - }); - file2.patch(file2.moduleExports, module2.moduleVersion); - } - } - } - return; - } - this._warnOnPreloadedModules(); - for (const module2 of this._modules) { - const hookFn = (exports2, name, baseDir) => { - if (!baseDir && path.isAbsolute(name)) { - const parsedPath = path.parse(name); - name = parsedPath.name; - baseDir = parsedPath.dir; - } - return this._onRequire(module2, exports2, name, baseDir); - }; - const onRequire = (exports2, name, baseDir) => { - return this._onRequire(module2, exports2, name, baseDir); - }; - const hook = path.isAbsolute(module2.name) ? new require_in_the_middle_1.Hook([module2.name], { internals: true }, onRequire) : this._requireInTheMiddleSingleton.register(module2.name, onRequire); - this._hooks.push(hook); - const esmHook = new import_in_the_middle_1.Hook([module2.name], { internals: false }, hookFn); - this._hooks.push(esmHook); - } - } - disable() { - if (!this._enabled) { - return; - } - this._enabled = false; - for (const module2 of this._modules) { - if (typeof module2.unpatch === "function" && module2.moduleExports) { - this._diag.debug("Removing instrumentation patch for nodejs module on instrumentation disabled", { - module: module2.name, - version: module2.moduleVersion - }); - module2.unpatch(module2.moduleExports, module2.moduleVersion); - } - for (const file2 of module2.files) { - if (file2.moduleExports) { - this._diag.debug("Removing instrumentation patch for nodejs module file on instrumentation disabled", { - module: module2.name, - version: module2.moduleVersion, - fileName: file2.name - }); - file2.unpatch(file2.moduleExports, module2.moduleVersion); - } - } - } - } - isEnabled() { - return this._enabled; - } - } - exports.InstrumentationBase = InstrumentationBase; - function isSupported(supportedVersions, version2, includePrerelease) { - if (typeof version2 === "undefined") { - return supportedVersions.includes("*"); - } - return supportedVersions.some((supportedVersion) => { - return (0, semver_1.satisfies)(version2, supportedVersion, { includePrerelease }); - }); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/normalize.js -var require_normalize = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalize = undefined; - var path_1 = __require("path"); - Object.defineProperty(exports, "normalize", { enumerable: true, get: function() { - return path_1.normalize; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/index.js -var require_node7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalize = exports.InstrumentationBase = undefined; - var instrumentation_1 = require_instrumentation2(); - Object.defineProperty(exports, "InstrumentationBase", { enumerable: true, get: function() { - return instrumentation_1.InstrumentationBase; - } }); - var normalize_1 = require_normalize(); - Object.defineProperty(exports, "normalize", { enumerable: true, get: function() { - return normalize_1.normalize; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/index.js -var require_platform6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalize = exports.InstrumentationBase = undefined; - var node_1 = require_node7(); - Object.defineProperty(exports, "InstrumentationBase", { enumerable: true, get: function() { - return node_1.InstrumentationBase; - } }); - Object.defineProperty(exports, "normalize", { enumerable: true, get: function() { - return node_1.normalize; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleDefinition.js -var require_instrumentationNodeModuleDefinition = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationNodeModuleDefinition = undefined; - - class InstrumentationNodeModuleDefinition { - name; - supportedVersions; - patch; - unpatch; - files; - constructor(name, supportedVersions, patch, unpatch, files) { - this.name = name; - this.supportedVersions = supportedVersions; - this.patch = patch; - this.unpatch = unpatch; - this.files = files || []; - } - } - exports.InstrumentationNodeModuleDefinition = InstrumentationNodeModuleDefinition; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleFile.js -var require_instrumentationNodeModuleFile = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationNodeModuleFile = undefined; - var index_1 = require_platform6(); - - class InstrumentationNodeModuleFile { - supportedVersions; - patch; - unpatch; - name; - constructor(name, supportedVersions, patch, unpatch) { - this.supportedVersions = supportedVersions; - this.patch = patch; - this.unpatch = unpatch; - this.name = (0, index_1.normalize)(name); - } - } - exports.InstrumentationNodeModuleFile = InstrumentationNodeModuleFile; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/semconvStability.js -var require_semconvStability = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.semconvStabilityFromStr = exports.SemconvStability = undefined; - var SemconvStability; - (function(SemconvStability2) { - SemconvStability2[SemconvStability2["STABLE"] = 1] = "STABLE"; - SemconvStability2[SemconvStability2["OLD"] = 2] = "OLD"; - SemconvStability2[SemconvStability2["DUPLICATE"] = 3] = "DUPLICATE"; - })(SemconvStability = exports.SemconvStability || (exports.SemconvStability = {})); - function semconvStabilityFromStr(namespace, str) { - let semconvStability = SemconvStability.OLD; - const entries = str?.split(",").map((v) => v.trim()).filter((s2) => s2 !== ""); - for (const entry of entries ?? []) { - if (entry.toLowerCase() === namespace + "/dup") { - semconvStability = SemconvStability.DUPLICATE; - break; - } else if (entry.toLowerCase() === namespace) { - semconvStability = SemconvStability.STABLE; - } - } - return semconvStability; - } - exports.semconvStabilityFromStr = semconvStabilityFromStr; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/index.js -var require_src9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.semconvStabilityFromStr = exports.SemconvStability = exports.safeExecuteInTheMiddleAsync = exports.safeExecuteInTheMiddle = exports.isWrapped = exports.InstrumentationNodeModuleFile = exports.InstrumentationNodeModuleDefinition = exports.InstrumentationBase = exports.registerInstrumentations = undefined; - var autoLoader_1 = require_autoLoader(); - Object.defineProperty(exports, "registerInstrumentations", { enumerable: true, get: function() { - return autoLoader_1.registerInstrumentations; - } }); - var index_1 = require_platform6(); - Object.defineProperty(exports, "InstrumentationBase", { enumerable: true, get: function() { - return index_1.InstrumentationBase; - } }); - var instrumentationNodeModuleDefinition_1 = require_instrumentationNodeModuleDefinition(); - Object.defineProperty(exports, "InstrumentationNodeModuleDefinition", { enumerable: true, get: function() { - return instrumentationNodeModuleDefinition_1.InstrumentationNodeModuleDefinition; - } }); - var instrumentationNodeModuleFile_1 = require_instrumentationNodeModuleFile(); - Object.defineProperty(exports, "InstrumentationNodeModuleFile", { enumerable: true, get: function() { - return instrumentationNodeModuleFile_1.InstrumentationNodeModuleFile; - } }); - var utils_1 = require_utils8(); - Object.defineProperty(exports, "isWrapped", { enumerable: true, get: function() { - return utils_1.isWrapped; - } }); - Object.defineProperty(exports, "safeExecuteInTheMiddle", { enumerable: true, get: function() { - return utils_1.safeExecuteInTheMiddle; - } }); - Object.defineProperty(exports, "safeExecuteInTheMiddleAsync", { enumerable: true, get: function() { - return utils_1.safeExecuteInTheMiddleAsync; - } }); - var semconvStability_1 = require_semconvStability(); - Object.defineProperty(exports, "SemconvStability", { enumerable: true, get: function() { - return semconvStability_1.SemconvStability; - } }); - Object.defineProperty(exports, "semconvStabilityFromStr", { enumerable: true, get: function() { - return semconvStability_1.semconvStabilityFromStr; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/semconv.js -var require_semconv4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_MESSAGING_SYSTEM = exports.ATTR_MESSAGING_OPERATION = undefined; - exports.ATTR_MESSAGING_OPERATION = "messaging.operation"; - exports.ATTR_MESSAGING_SYSTEM = "messaging.system"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/semconv-obsolete.js -var require_semconv_obsolete = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_MESSAGING_CONVERSATION_ID = exports.OLD_ATTR_MESSAGING_MESSAGE_ID = exports.MESSAGING_DESTINATION_KIND_VALUE_TOPIC = exports.ATTR_MESSAGING_URL = exports.ATTR_MESSAGING_PROTOCOL_VERSION = exports.ATTR_MESSAGING_PROTOCOL = exports.MESSAGING_OPERATION_VALUE_PROCESS = exports.ATTR_MESSAGING_RABBITMQ_ROUTING_KEY = exports.ATTR_MESSAGING_DESTINATION_KIND = exports.ATTR_MESSAGING_DESTINATION = undefined; - exports.ATTR_MESSAGING_DESTINATION = "messaging.destination"; - exports.ATTR_MESSAGING_DESTINATION_KIND = "messaging.destination_kind"; - exports.ATTR_MESSAGING_RABBITMQ_ROUTING_KEY = "messaging.rabbitmq.routing_key"; - exports.MESSAGING_OPERATION_VALUE_PROCESS = "process"; - exports.ATTR_MESSAGING_PROTOCOL = "messaging.protocol"; - exports.ATTR_MESSAGING_PROTOCOL_VERSION = "messaging.protocol_version"; - exports.ATTR_MESSAGING_URL = "messaging.url"; - exports.MESSAGING_DESTINATION_KIND_VALUE_TOPIC = "topic"; - exports.OLD_ATTR_MESSAGING_MESSAGE_ID = "messaging.message_id"; - exports.ATTR_MESSAGING_CONVERSATION_ID = "messaging.conversation_id"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/types.js -var require_types2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_CONFIG = exports.EndOperation = undefined; - var EndOperation; - (function(EndOperation2) { - EndOperation2["AutoAck"] = "auto ack"; - EndOperation2["Ack"] = "ack"; - EndOperation2["AckAll"] = "ackAll"; - EndOperation2["Reject"] = "reject"; - EndOperation2["Nack"] = "nack"; - EndOperation2["NackAll"] = "nackAll"; - EndOperation2["ChannelClosed"] = "channel closed"; - EndOperation2["ChannelError"] = "channel error"; - EndOperation2["InstrumentationTimeout"] = "instrumentation timeout"; - })(EndOperation = exports.EndOperation || (exports.EndOperation = {})); - exports.DEFAULT_CONFIG = { - consumeTimeoutMs: 1000 * 60, - useLinksForConsume: false - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/utils.js -var require_utils9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isConfirmChannelTracing = exports.unmarkConfirmChannelTracing = exports.markConfirmChannelTracing = exports.getConnectionAttributesFromUrl = exports.getConnectionAttributesFromServer = exports.normalizeExchange = exports.CONNECTION_ATTRIBUTES = exports.CHANNEL_CONSUME_TIMEOUT_TIMER = exports.CHANNEL_SPANS_NOT_ENDED = exports.MESSAGE_STORED_SPAN = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv4(); - var semconv_obsolete_1 = require_semconv_obsolete(); - exports.MESSAGE_STORED_SPAN = Symbol("opentelemetry.amqplib.message.stored-span"); - exports.CHANNEL_SPANS_NOT_ENDED = Symbol("opentelemetry.amqplib.channel.spans-not-ended"); - exports.CHANNEL_CONSUME_TIMEOUT_TIMER = Symbol("opentelemetry.amqplib.channel.consumer-timeout-timer"); - exports.CONNECTION_ATTRIBUTES = Symbol("opentelemetry.amqplib.connection.attributes"); - var IS_CONFIRM_CHANNEL_CONTEXT_KEY = (0, api_1.createContextKey)("opentelemetry.amqplib.channel.is-confirm-channel"); - var normalizeExchange = (exchangeName) => exchangeName !== "" ? exchangeName : ""; - exports.normalizeExchange = normalizeExchange; - var censorPassword = (url2) => { - return url2.replace(/:[^:@/]*@/, ":***@"); - }; - var getPort = (portFromUrl, resolvedProtocol) => { - return portFromUrl || (resolvedProtocol === "AMQP" ? 5672 : 5671); - }; - var getProtocol = (protocolFromUrl) => { - const resolvedProtocol = protocolFromUrl || "amqp"; - const noEndingColon = resolvedProtocol.endsWith(":") ? resolvedProtocol.substring(0, resolvedProtocol.length - 1) : resolvedProtocol; - return noEndingColon.toUpperCase(); - }; - var getHostname = (hostnameFromUrl) => { - return hostnameFromUrl || "localhost"; - }; - var extractConnectionAttributeOrLog = (url2, attributeKey, attributeValue, nameForLog) => { - if (attributeValue) { - return { [attributeKey]: attributeValue }; - } else { - api_1.diag.error(`amqplib instrumentation: could not extract connection attribute ${nameForLog} from user supplied url`, { - url: url2 - }); - return {}; - } - }; - var getConnectionAttributesFromServer = (conn) => { - const product = conn.serverProperties.product?.toLowerCase?.(); - if (product) { - return { - [semconv_1.ATTR_MESSAGING_SYSTEM]: product - }; - } else { - return {}; - } - }; - exports.getConnectionAttributesFromServer = getConnectionAttributesFromServer; - var getConnectionAttributesFromUrl = (url2) => { - const attributes = { - [semconv_obsolete_1.ATTR_MESSAGING_PROTOCOL_VERSION]: "0.9.1" - }; - url2 = url2 || "amqp://localhost"; - if (typeof url2 === "object") { - const connectOptions = url2; - const protocol = getProtocol(connectOptions?.protocol); - Object.assign(attributes, { - ...extractConnectionAttributeOrLog(url2, semconv_obsolete_1.ATTR_MESSAGING_PROTOCOL, protocol, "protocol") - }); - const hostname3 = getHostname(connectOptions?.hostname); - Object.assign(attributes, { - ...extractConnectionAttributeOrLog(url2, semconv_1.ATTR_NET_PEER_NAME, hostname3, "hostname") - }); - const port = getPort(connectOptions.port, protocol); - Object.assign(attributes, { - ...extractConnectionAttributeOrLog(url2, semconv_1.ATTR_NET_PEER_PORT, port, "port") - }); - } else { - const censoredUrl = censorPassword(url2); - attributes[semconv_obsolete_1.ATTR_MESSAGING_URL] = censoredUrl; - try { - const urlParts = new URL(censoredUrl); - const protocol = getProtocol(urlParts.protocol); - Object.assign(attributes, { - ...extractConnectionAttributeOrLog(censoredUrl, semconv_obsolete_1.ATTR_MESSAGING_PROTOCOL, protocol, "protocol") - }); - const hostname3 = getHostname(urlParts.hostname); - Object.assign(attributes, { - ...extractConnectionAttributeOrLog(censoredUrl, semconv_1.ATTR_NET_PEER_NAME, hostname3, "hostname") - }); - const port = getPort(urlParts.port ? parseInt(urlParts.port) : undefined, protocol); - Object.assign(attributes, { - ...extractConnectionAttributeOrLog(censoredUrl, semconv_1.ATTR_NET_PEER_PORT, port, "port") - }); - } catch (err) { - api_1.diag.error("amqplib instrumentation: error while extracting connection details from connection url", { - censoredUrl, - err - }); - } - } - return attributes; - }; - exports.getConnectionAttributesFromUrl = getConnectionAttributesFromUrl; - var markConfirmChannelTracing = (context8) => { - return context8.setValue(IS_CONFIRM_CHANNEL_CONTEXT_KEY, true); - }; - exports.markConfirmChannelTracing = markConfirmChannelTracing; - var unmarkConfirmChannelTracing = (context8) => { - return context8.deleteValue(IS_CONFIRM_CHANNEL_CONTEXT_KEY); - }; - exports.unmarkConfirmChannelTracing = unmarkConfirmChannelTracing; - var isConfirmChannelTracing = (context8) => { - return context8.getValue(IS_CONFIRM_CHANNEL_CONTEXT_KEY) === true; - }; - exports.isConfirmChannelTracing = isConfirmChannelTracing; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/version.js -var require_version4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-amqplib"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/amqplib.js -var require_amqplib = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AmqplibInstrumentation = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv4(); - var semconv_obsolete_1 = require_semconv_obsolete(); - var types_1 = require_types2(); - var utils_1 = require_utils9(); - var version_1 = require_version4(); - var supportedVersions = [">=0.5.5 <1"]; - - class AmqplibInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...types_1.DEFAULT_CONFIG, ...config2 }); - } - setConfig(config2 = {}) { - super.setConfig({ ...types_1.DEFAULT_CONFIG, ...config2 }); - } - init() { - const channelModelModuleFile = new instrumentation_1.InstrumentationNodeModuleFile("amqplib/lib/channel_model.js", supportedVersions, this.patchChannelModel.bind(this), this.unpatchChannelModel.bind(this)); - const callbackModelModuleFile = new instrumentation_1.InstrumentationNodeModuleFile("amqplib/lib/callback_model.js", supportedVersions, this.patchChannelModel.bind(this), this.unpatchChannelModel.bind(this)); - const connectModuleFile = new instrumentation_1.InstrumentationNodeModuleFile("amqplib/lib/connect.js", supportedVersions, this.patchConnect.bind(this), this.unpatchConnect.bind(this)); - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition("amqplib", supportedVersions, undefined, undefined, [channelModelModuleFile, connectModuleFile, callbackModelModuleFile]); - return module2; - } - patchConnect(moduleExports) { - moduleExports = this.unpatchConnect(moduleExports); - if (!(0, instrumentation_1.isWrapped)(moduleExports.connect)) { - this._wrap(moduleExports, "connect", this.getConnectPatch.bind(this)); - } - return moduleExports; - } - unpatchConnect(moduleExports) { - if ((0, instrumentation_1.isWrapped)(moduleExports.connect)) { - this._unwrap(moduleExports, "connect"); - } - return moduleExports; - } - patchChannelModel(moduleExports, moduleVersion) { - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.publish)) { - this._wrap(moduleExports.Channel.prototype, "publish", this.getPublishPatch.bind(this, moduleVersion)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.consume)) { - this._wrap(moduleExports.Channel.prototype, "consume", this.getConsumePatch.bind(this, moduleVersion)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.ack)) { - this._wrap(moduleExports.Channel.prototype, "ack", this.getAckPatch.bind(this, false, types_1.EndOperation.Ack)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.nack)) { - this._wrap(moduleExports.Channel.prototype, "nack", this.getAckPatch.bind(this, true, types_1.EndOperation.Nack)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.reject)) { - this._wrap(moduleExports.Channel.prototype, "reject", this.getAckPatch.bind(this, true, types_1.EndOperation.Reject)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.ackAll)) { - this._wrap(moduleExports.Channel.prototype, "ackAll", this.getAckAllPatch.bind(this, false, types_1.EndOperation.AckAll)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.nackAll)) { - this._wrap(moduleExports.Channel.prototype, "nackAll", this.getAckAllPatch.bind(this, true, types_1.EndOperation.NackAll)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.emit)) { - this._wrap(moduleExports.Channel.prototype, "emit", this.getChannelEmitPatch.bind(this)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.ConfirmChannel.prototype.publish)) { - this._wrap(moduleExports.ConfirmChannel.prototype, "publish", this.getConfirmedPublishPatch.bind(this, moduleVersion)); - } - return moduleExports; - } - unpatchChannelModel(moduleExports) { - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.publish)) { - this._unwrap(moduleExports.Channel.prototype, "publish"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.consume)) { - this._unwrap(moduleExports.Channel.prototype, "consume"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.ack)) { - this._unwrap(moduleExports.Channel.prototype, "ack"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.nack)) { - this._unwrap(moduleExports.Channel.prototype, "nack"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.reject)) { - this._unwrap(moduleExports.Channel.prototype, "reject"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.ackAll)) { - this._unwrap(moduleExports.Channel.prototype, "ackAll"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.nackAll)) { - this._unwrap(moduleExports.Channel.prototype, "nackAll"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.Channel.prototype.emit)) { - this._unwrap(moduleExports.Channel.prototype, "emit"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.ConfirmChannel.prototype.publish)) { - this._unwrap(moduleExports.ConfirmChannel.prototype, "publish"); - } - return moduleExports; - } - getConnectPatch(original) { - return function patchedConnect(url2, socketOptions, openCallback) { - return original.call(this, url2, socketOptions, function(err, conn) { - if (err == null) { - const urlAttributes = (0, utils_1.getConnectionAttributesFromUrl)(url2); - const serverAttributes = (0, utils_1.getConnectionAttributesFromServer)(conn); - conn[utils_1.CONNECTION_ATTRIBUTES] = { - ...urlAttributes, - ...serverAttributes - }; - } - openCallback.apply(this, arguments); - }); - }; - } - getChannelEmitPatch(original) { - const self2 = this; - return function emit(eventName) { - if (eventName === "close") { - self2.endAllSpansOnChannel(this, true, types_1.EndOperation.ChannelClosed, undefined); - const activeTimer = this[utils_1.CHANNEL_CONSUME_TIMEOUT_TIMER]; - if (activeTimer) { - clearInterval(activeTimer); - } - this[utils_1.CHANNEL_CONSUME_TIMEOUT_TIMER] = undefined; - } else if (eventName === "error") { - self2.endAllSpansOnChannel(this, true, types_1.EndOperation.ChannelError, undefined); - } - return original.apply(this, arguments); - }; - } - getAckAllPatch(isRejected, endOperation, original) { - const self2 = this; - return function ackAll(requeueOrEmpty) { - self2.endAllSpansOnChannel(this, isRejected, endOperation, requeueOrEmpty); - return original.apply(this, arguments); - }; - } - getAckPatch(isRejected, endOperation, original) { - const self2 = this; - return function ack(message, allUpToOrRequeue, requeue) { - const channel = this; - const requeueResolved = endOperation === types_1.EndOperation.Reject ? allUpToOrRequeue : requeue; - const spansNotEnded = channel[utils_1.CHANNEL_SPANS_NOT_ENDED] ?? []; - const msgIndex = spansNotEnded.findIndex((msgDetails) => msgDetails.msg === message); - if (msgIndex < 0) { - self2.endConsumerSpan(message, isRejected, endOperation, requeueResolved); - } else if (endOperation !== types_1.EndOperation.Reject && allUpToOrRequeue) { - for (let i = 0;i <= msgIndex; i++) { - self2.endConsumerSpan(spansNotEnded[i].msg, isRejected, endOperation, requeueResolved); - } - spansNotEnded.splice(0, msgIndex + 1); - } else { - self2.endConsumerSpan(message, isRejected, endOperation, requeueResolved); - spansNotEnded.splice(msgIndex, 1); - } - return original.apply(this, arguments); - }; - } - getConsumePatch(moduleVersion, original) { - const self2 = this; - return function consume(queue, onMessage, options) { - const channel = this; - if (!Object.prototype.hasOwnProperty.call(channel, utils_1.CHANNEL_SPANS_NOT_ENDED)) { - const { consumeTimeoutMs } = self2.getConfig(); - if (consumeTimeoutMs) { - const timer = setInterval(() => { - self2.checkConsumeTimeoutOnChannel(channel); - }, consumeTimeoutMs); - timer.unref(); - channel[utils_1.CHANNEL_CONSUME_TIMEOUT_TIMER] = timer; - } - channel[utils_1.CHANNEL_SPANS_NOT_ENDED] = []; - } - const patchedOnMessage = function(msg) { - if (!msg) { - return onMessage.call(this, msg); - } - const headers = msg.properties.headers ?? {}; - let parentContext = api_1.propagation.extract(api_1.ROOT_CONTEXT, headers); - const exchange = msg.fields?.exchange; - let links; - if (self2._config.useLinksForConsume) { - const parentSpanContext = parentContext ? api_1.trace.getSpan(parentContext)?.spanContext() : undefined; - parentContext = undefined; - if (parentSpanContext) { - links = [ - { - context: parentSpanContext - } - ]; - } - } - const span = self2.tracer.startSpan(`${queue} process`, { - kind: api_1.SpanKind.CONSUMER, - attributes: { - ...channel?.connection?.[utils_1.CONNECTION_ATTRIBUTES], - [semconv_obsolete_1.ATTR_MESSAGING_DESTINATION]: exchange, - [semconv_obsolete_1.ATTR_MESSAGING_DESTINATION_KIND]: semconv_obsolete_1.MESSAGING_DESTINATION_KIND_VALUE_TOPIC, - [semconv_obsolete_1.ATTR_MESSAGING_RABBITMQ_ROUTING_KEY]: msg.fields?.routingKey, - [semconv_1.ATTR_MESSAGING_OPERATION]: semconv_obsolete_1.MESSAGING_OPERATION_VALUE_PROCESS, - [semconv_obsolete_1.OLD_ATTR_MESSAGING_MESSAGE_ID]: msg?.properties.messageId, - [semconv_obsolete_1.ATTR_MESSAGING_CONVERSATION_ID]: msg?.properties.correlationId - }, - links - }, parentContext); - const { consumeHook } = self2.getConfig(); - if (consumeHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => consumeHook(span, { moduleVersion, msg }), (e) => { - if (e) { - api_1.diag.error("amqplib instrumentation: consumerHook error", e); - } - }, true); - } - if (!options?.noAck) { - channel[utils_1.CHANNEL_SPANS_NOT_ENDED].push({ - msg, - timeOfConsume: (0, core_1.hrTime)() - }); - msg[utils_1.MESSAGE_STORED_SPAN] = span; - } - const setContext = parentContext ? parentContext : api_1.ROOT_CONTEXT; - api_1.context.with(api_1.trace.setSpan(setContext, span), () => { - onMessage.call(this, msg); - }); - if (options?.noAck) { - self2.callConsumeEndHook(span, msg, false, types_1.EndOperation.AutoAck); - span.end(); - } - }; - arguments[1] = patchedOnMessage; - return original.apply(this, arguments); - }; - } - getConfirmedPublishPatch(moduleVersion, original) { - const self2 = this; - return function confirmedPublish(exchange, routingKey, content, options, callback) { - const channel = this; - const { span, modifiedOptions } = self2.createPublishSpan(self2, exchange, routingKey, channel, options); - const { publishHook } = self2.getConfig(); - if (publishHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => publishHook(span, { - moduleVersion, - exchange, - routingKey, - content, - options: modifiedOptions, - isConfirmChannel: true - }), (e) => { - if (e) { - api_1.diag.error("amqplib instrumentation: publishHook error", e); - } - }, true); - } - const patchedOnConfirm = function(err, ok) { - try { - callback?.call(this, err, ok); - } finally { - const { publishConfirmHook } = self2.getConfig(); - if (publishConfirmHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => publishConfirmHook(span, { - moduleVersion, - exchange, - routingKey, - content, - options, - isConfirmChannel: true, - confirmError: err - }), (e) => { - if (e) { - api_1.diag.error("amqplib instrumentation: publishConfirmHook error", e); - } - }, true); - } - if (err) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: "message confirmation has been nack'ed" - }); - } - span.end(); - } - }; - const markedContext = (0, utils_1.markConfirmChannelTracing)(api_1.context.active()); - const argumentsCopy = [...arguments]; - argumentsCopy[3] = modifiedOptions; - argumentsCopy[4] = api_1.context.bind((0, utils_1.unmarkConfirmChannelTracing)(api_1.trace.setSpan(markedContext, span)), patchedOnConfirm); - return api_1.context.with(markedContext, original.bind(this, ...argumentsCopy)); - }; - } - getPublishPatch(moduleVersion, original) { - const self2 = this; - return function publish(exchange, routingKey, content, options) { - if ((0, utils_1.isConfirmChannelTracing)(api_1.context.active())) { - return original.apply(this, arguments); - } else { - const channel = this; - const { span, modifiedOptions } = self2.createPublishSpan(self2, exchange, routingKey, channel, options); - const { publishHook } = self2.getConfig(); - if (publishHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => publishHook(span, { - moduleVersion, - exchange, - routingKey, - content, - options: modifiedOptions, - isConfirmChannel: false - }), (e) => { - if (e) { - api_1.diag.error("amqplib instrumentation: publishHook error", e); - } - }, true); - } - const argumentsCopy = [...arguments]; - argumentsCopy[3] = modifiedOptions; - const originalRes = original.apply(this, argumentsCopy); - span.end(); - return originalRes; - } - }; - } - createPublishSpan(self2, exchange, routingKey, channel, options) { - const normalizedExchange = (0, utils_1.normalizeExchange)(exchange); - const span = self2.tracer.startSpan(`publish ${normalizedExchange}`, { - kind: api_1.SpanKind.PRODUCER, - attributes: { - ...channel.connection[utils_1.CONNECTION_ATTRIBUTES], - [semconv_obsolete_1.ATTR_MESSAGING_DESTINATION]: exchange, - [semconv_obsolete_1.ATTR_MESSAGING_DESTINATION_KIND]: semconv_obsolete_1.MESSAGING_DESTINATION_KIND_VALUE_TOPIC, - [semconv_obsolete_1.ATTR_MESSAGING_RABBITMQ_ROUTING_KEY]: routingKey, - [semconv_obsolete_1.OLD_ATTR_MESSAGING_MESSAGE_ID]: options?.messageId, - [semconv_obsolete_1.ATTR_MESSAGING_CONVERSATION_ID]: options?.correlationId - } - }); - const modifiedOptions = options ?? {}; - modifiedOptions.headers = modifiedOptions.headers ?? {}; - api_1.propagation.inject(api_1.trace.setSpan(api_1.context.active(), span), modifiedOptions.headers); - return { span, modifiedOptions }; - } - endConsumerSpan(message, isRejected, operation, requeue) { - const storedSpan = message[utils_1.MESSAGE_STORED_SPAN]; - if (!storedSpan) - return; - if (isRejected !== false) { - storedSpan.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: operation !== types_1.EndOperation.ChannelClosed && operation !== types_1.EndOperation.ChannelError ? `${operation} called on message${requeue === true ? " with requeue" : requeue === false ? " without requeue" : ""}` : operation - }); - } - this.callConsumeEndHook(storedSpan, message, isRejected, operation); - storedSpan.end(); - message[utils_1.MESSAGE_STORED_SPAN] = undefined; - } - endAllSpansOnChannel(channel, isRejected, operation, requeue) { - const spansNotEnded = channel[utils_1.CHANNEL_SPANS_NOT_ENDED] ?? []; - spansNotEnded.forEach((msgDetails) => { - this.endConsumerSpan(msgDetails.msg, isRejected, operation, requeue); - }); - channel[utils_1.CHANNEL_SPANS_NOT_ENDED] = []; - } - callConsumeEndHook(span, msg, rejected, endOperation) { - const { consumeEndHook } = this.getConfig(); - if (!consumeEndHook) - return; - (0, instrumentation_1.safeExecuteInTheMiddle)(() => consumeEndHook(span, { msg, rejected, endOperation }), (e) => { - if (e) { - api_1.diag.error("amqplib instrumentation: consumerEndHook error", e); - } - }, true); - } - checkConsumeTimeoutOnChannel(channel) { - const currentTime = (0, core_1.hrTime)(); - const spansNotEnded = channel[utils_1.CHANNEL_SPANS_NOT_ENDED] ?? []; - let i; - const { consumeTimeoutMs } = this.getConfig(); - for (i = 0;i < spansNotEnded.length; i++) { - const currMessage = spansNotEnded[i]; - const timeFromConsume = (0, core_1.hrTimeDuration)(currMessage.timeOfConsume, currentTime); - if ((0, core_1.hrTimeToMilliseconds)(timeFromConsume) < consumeTimeoutMs) { - break; - } - this.endConsumerSpan(currMessage.msg, null, types_1.EndOperation.InstrumentationTimeout, true); - } - spansNotEnded.splice(0, i); - } - } - exports.AmqplibInstrumentation = AmqplibInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-amqplib@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-amqplib/build/src/index.js -var require_src10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EndOperation = exports.DEFAULT_CONFIG = exports.AmqplibInstrumentation = undefined; - var amqplib_1 = require_amqplib(); - Object.defineProperty(exports, "AmqplibInstrumentation", { enumerable: true, get: function() { - return amqplib_1.AmqplibInstrumentation; - } }); - var types_1 = require_types2(); - Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function() { - return types_1.DEFAULT_CONFIG; - } }); - Object.defineProperty(exports, "EndOperation", { enumerable: true, get: function() { - return types_1.EndOperation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-lambda@0.59.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/semconv.js -var require_semconv5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_FAAS_NAME = exports.ATTR_FAAS_COLDSTART = exports.ATTR_CLOUD_ACCOUNT_ID = undefined; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_FAAS_COLDSTART = "faas.coldstart"; - exports.ATTR_FAAS_NAME = "faas.name"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-lambda@0.59.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/semconv-obsolete.js -var require_semconv_obsolete2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_FAAS_ID = exports.ATTR_FAAS_EXECUTION = undefined; - exports.ATTR_FAAS_EXECUTION = "faas.execution"; - exports.ATTR_FAAS_ID = "faas.id"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-lambda@0.59.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/version.js -var require_version5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.59.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-aws-lambda"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-lambda@0.59.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/instrumentation.js -var require_instrumentation3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AwsLambdaInstrumentation = exports.AWS_HANDLER_STREAMING_RESPONSE = exports.AWS_HANDLER_STREAMING_SYMBOL = exports.lambdaMaxInitInMilliseconds = undefined; - var path = __require("path"); - var fs = __require("fs"); - var instrumentation_1 = require_src9(); - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv5(); - var semconv_obsolete_1 = require_semconv_obsolete2(); - var version_1 = require_version5(); - var headerGetter = { - keys(carrier) { - return Object.keys(carrier); - }, - get(carrier, key) { - return carrier[key]; - } - }; - exports.lambdaMaxInitInMilliseconds = 1e4; - exports.AWS_HANDLER_STREAMING_SYMBOL = Symbol.for("aws.lambda.runtime.handler.streaming"); - exports.AWS_HANDLER_STREAMING_RESPONSE = "response"; - - class AwsLambdaInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - const taskRoot = process.env.LAMBDA_TASK_ROOT; - const handlerDef = this.getConfig().lambdaHandler ?? process.env._HANDLER; - if (!taskRoot || !handlerDef) { - this._diag.debug("Skipping lambda instrumentation: no _HANDLER/lambdaHandler or LAMBDA_TASK_ROOT.", { taskRoot, handlerDef }); - return []; - } - const handler = path.basename(handlerDef); - const moduleRoot = handlerDef.substring(0, handlerDef.length - handler.length); - const [module2, functionName] = handler.split(".", 2); - let filename = path.resolve(taskRoot, moduleRoot, module2); - if (!filename.endsWith(".js")) { - try { - fs.statSync(`${filename}.js`); - filename += ".js"; - } catch (e) { - try { - fs.statSync(`${filename}.mjs`); - filename += ".mjs"; - } catch (e2) { - try { - fs.statSync(`${filename}.cjs`); - filename += ".cjs"; - } catch (e3) { - this._diag.warn("No handler file was able to resolved with one of the known extensions for the file", filename); - } - } - } - } - api_1.diag.debug("Instrumenting lambda handler", { - taskRoot, - handlerDef, - handler, - moduleRoot, - module: module2, - filename, - functionName - }); - const lambdaStartTime = this.getConfig().lambdaStartTime || Date.now() - Math.floor(1000 * process.uptime()); - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition(filename, ["*"], undefined, undefined, [ - new instrumentation_1.InstrumentationNodeModuleFile(module2, ["*"], (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports[functionName])) { - this._unwrap(moduleExports, functionName); - } - this._wrap(moduleExports, functionName, this._getHandler(lambdaStartTime)); - return moduleExports; - }, (moduleExports) => { - if (moduleExports == null) - return; - this._unwrap(moduleExports, functionName); - }) - ]) - ]; - } - _getHandler(handlerLoadStartTime) { - return (original) => { - const patchedHandler = this._getPatchHandler(original, handlerLoadStartTime); - if (this._isStreamingHandler(original)) { - for (const symbol2 of Object.getOwnPropertySymbols(original)) { - patchedHandler[symbol2] = original[symbol2]; - } - } - return patchedHandler; - }; - } - _getPatchHandler(original, lambdaStartTime) { - api_1.diag.debug("patch handler function"); - const plugin = this; - let requestHandledBefore = false; - let requestIsColdStart = true; - function _onRequest() { - if (requestHandledBefore) { - requestIsColdStart = false; - } else { - if (process.env.AWS_LAMBDA_INITIALIZATION_TYPE === "provisioned-concurrency") { - requestIsColdStart = false; - } else { - const passedTimeSinceHandlerLoad = Date.now() - lambdaStartTime; - const proactiveInitialization = passedTimeSinceHandlerLoad > exports.lambdaMaxInitInMilliseconds; - requestIsColdStart = !proactiveInitialization; - } - requestHandledBefore = true; - } - } - if (this._isStreamingHandler(original)) { - return function patchedStreamingHandler(event, responseStream, context8) { - _onRequest(); - const parent = plugin._determineParent(event, context8); - const span = plugin._createSpanForRequest(event, context8, requestIsColdStart, parent); - plugin._applyRequestHook(span, event, context8); - return api_1.context.with(api_1.trace.setSpan(parent, span), () => { - const maybePromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => original.apply(this, [event, responseStream, context8]), (error48) => { - if (error48 != null) { - plugin._applyResponseHook(span, error48); - plugin._endSpan(span, error48, () => {}); - } - }); - return plugin._handlePromiseResult(span, maybePromise); - }); - }; - } - return function patchedHandler(event, context8, callback) { - _onRequest(); - const parent = plugin._determineParent(event, context8); - const span = plugin._createSpanForRequest(event, context8, requestIsColdStart, parent); - plugin._applyRequestHook(span, event, context8); - return api_1.context.with(api_1.trace.setSpan(parent, span), () => { - const wrappedCallback = plugin._wrapCallback(callback, span); - const maybePromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => original.apply(this, [event, context8, wrappedCallback]), (error48) => { - if (error48 != null) { - plugin._applyResponseHook(span, error48); - plugin._endSpan(span, error48, () => {}); - } - }); - return plugin._handlePromiseResult(span, maybePromise); - }); - }; - } - _createSpanForRequest(event, context8, requestIsColdStart, parent) { - const name = context8.functionName; - return this.tracer.startSpan(name, { - kind: api_1.SpanKind.SERVER, - attributes: { - [semconv_obsolete_1.ATTR_FAAS_EXECUTION]: context8.awsRequestId, - [semconv_obsolete_1.ATTR_FAAS_ID]: context8.invokedFunctionArn, - [semconv_1.ATTR_CLOUD_ACCOUNT_ID]: AwsLambdaInstrumentation._extractAccountId(context8.invokedFunctionArn), - [semconv_1.ATTR_FAAS_COLDSTART]: requestIsColdStart, - ...AwsLambdaInstrumentation._extractOtherEventFields(event) - } - }, parent); - } - _applyRequestHook(span, event, context8) { - const { requestHook } = this.getConfig(); - if (requestHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => requestHook(span, { event, context: context8 }), (e) => { - if (e) - api_1.diag.error("aws-lambda instrumentation: requestHook error", e); - }, true); - } - } - _handlePromiseResult(span, maybePromise) { - if (typeof maybePromise?.then === "function") { - return maybePromise.then((value) => { - this._applyResponseHook(span, null, value); - return new Promise((resolve2) => this._endSpan(span, undefined, () => resolve2(value))); - }, (err) => { - this._applyResponseHook(span, err); - return new Promise((resolve2, reject) => this._endSpan(span, err, () => reject(err))); - }); - } - this._applyResponseHook(span, null, maybePromise); - this._endSpan(span, undefined, () => {}); - return maybePromise; - } - _determineParent(event, context8) { - const config2 = this.getConfig(); - return AwsLambdaInstrumentation._determineParent(event, context8, config2.eventContextExtractor || AwsLambdaInstrumentation._defaultEventContextExtractor); - } - _isStreamingHandler(handler) { - return handler[exports.AWS_HANDLER_STREAMING_SYMBOL] === exports.AWS_HANDLER_STREAMING_RESPONSE; - } - setTracerProvider(tracerProvider) { - super.setTracerProvider(tracerProvider); - this._traceForceFlusher = this._traceForceFlush(tracerProvider); - } - _traceForceFlush(tracerProvider) { - if (!tracerProvider) - return; - let currentProvider = tracerProvider; - if (typeof currentProvider.getDelegate === "function") { - currentProvider = currentProvider.getDelegate(); - } - if (typeof currentProvider.forceFlush === "function") { - return currentProvider.forceFlush.bind(currentProvider); - } - return; - } - setMeterProvider(meterProvider) { - super.setMeterProvider(meterProvider); - this._metricForceFlusher = this._metricForceFlush(meterProvider); - } - _metricForceFlush(meterProvider) { - if (!meterProvider) - return; - const currentProvider = meterProvider; - if (typeof currentProvider.forceFlush === "function") { - return currentProvider.forceFlush.bind(currentProvider); - } - return; - } - _wrapCallback(original, span) { - const plugin = this; - return function wrappedCallback(err, res) { - api_1.diag.debug("executing wrapped lookup callback function"); - plugin._applyResponseHook(span, err, res); - plugin._endSpan(span, err, () => { - api_1.diag.debug("executing original lookup callback function"); - return original.apply(this, [err, res]); - }); - }; - } - _endSpan(span, err, callback) { - if (err) { - span.recordException(err); - } - let errMessage; - if (typeof err === "string") { - errMessage = err; - } else if (err) { - errMessage = err.message; - } - if (errMessage) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: errMessage - }); - } - span.end(); - const flushers = []; - if (this._traceForceFlusher) { - flushers.push(this._traceForceFlusher()); - } else { - api_1.diag.debug("Spans may not be exported for the lambda function because we are not force flushing before callback."); - } - if (this._metricForceFlusher) { - flushers.push(this._metricForceFlusher()); - } else { - api_1.diag.debug("Metrics may not be exported for the lambda function because we are not force flushing before callback."); - } - Promise.all(flushers).then(callback, callback); - } - _applyResponseHook(span, err, res) { - const { responseHook } = this.getConfig(); - if (responseHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => responseHook(span, { err, res }), (e) => { - if (e) - api_1.diag.error("aws-lambda instrumentation: responseHook error", e); - }, true); - } - } - static _extractAccountId(arn) { - const parts = arn.split(":"); - if (parts.length >= 5) { - return parts[4]; - } - return; - } - static _defaultEventContextExtractor(event) { - const httpHeaders = event.headers || {}; - return api_1.propagation.extract(api_1.context.active(), httpHeaders, headerGetter); - } - static _extractOtherEventFields(event) { - const answer = {}; - const fullUrl = this._extractFullUrl(event); - if (fullUrl) { - answer[semantic_conventions_1.ATTR_URL_FULL] = fullUrl; - } - return answer; - } - static _extractFullUrl(event) { - if (!event.headers) { - return; - } - function findAny(event2, key1, key2) { - return event2.headers[key1] ?? event2.headers[key2]; - } - const host = findAny(event, "host", "Host"); - const proto = findAny(event, "x-forwarded-proto", "X-Forwarded-Proto"); - const port = findAny(event, "x-forwarded-port", "X-Forwarded-Port"); - if (!(proto && host && (event.path || event.rawPath))) { - return; - } - let answer = proto + "://" + host; - if (port) { - answer += ":" + port; - } - answer += event.path ?? event.rawPath; - if (event.queryStringParameters) { - let first = true; - for (const key in event.queryStringParameters) { - answer += first ? "?" : "&"; - answer += encodeURIComponent(key); - answer += "="; - answer += encodeURIComponent(event.queryStringParameters[key]); - first = false; - } - } - return answer; - } - static _determineParent(event, context8, eventContextExtractor) { - const extractedContext = (0, instrumentation_1.safeExecuteInTheMiddle)(() => eventContextExtractor(event, context8), (e) => { - if (e) - api_1.diag.error("aws-lambda instrumentation: eventContextExtractor error", e); - }, true); - if (api_1.trace.getSpan(extractedContext)?.spanContext()) { - return extractedContext; - } - return api_1.ROOT_CONTEXT; - } - } - exports.AwsLambdaInstrumentation = AwsLambdaInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-lambda@0.59.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-lambda/build/src/index.js -var require_src11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.lambdaMaxInitInMilliseconds = exports.AwsLambdaInstrumentation = undefined; - var instrumentation_1 = require_instrumentation3(); - Object.defineProperty(exports, "AwsLambdaInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.AwsLambdaInstrumentation; - } }); - Object.defineProperty(exports, "lambdaMaxInitInMilliseconds", { enumerable: true, get: function() { - return instrumentation_1.lambdaMaxInitInMilliseconds; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/enums.js -var require_enums = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["AWS_OPERATION"] = "aws.operation"; - AttributeNames2["CLOUD_REGION"] = "cloud.region"; - AttributeNames2["AWS_SERVICE_API"] = "aws.service.api"; - AttributeNames2["AWS_SERVICE_NAME"] = "aws.service.name"; - AttributeNames2["AWS_SERVICE_IDENTIFIER"] = "aws.service.identifier"; - AttributeNames2["AWS_REQUEST_ID"] = "aws.request.id"; - AttributeNames2["AWS_REQUEST_EXTENDED_ID"] = "aws.request.extended_id"; - AttributeNames2["AWS_SIGNATURE_VERSION"] = "aws.signature.version"; - AttributeNames2["AWS_S3_BUCKET"] = "aws.s3.bucket"; - AttributeNames2["AWS_KINESIS_STREAM_NAME"] = "aws.kinesis.stream.name"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/semconv.js -var require_semconv6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_MESSAGING_SYSTEM = exports.ATTR_MESSAGING_OPERATION_TYPE = exports.ATTR_MESSAGING_OPERATION = exports.ATTR_MESSAGING_MESSAGE_ID = exports.ATTR_MESSAGING_DESTINATION_NAME = exports.ATTR_MESSAGING_BATCH_MESSAGE_COUNT = exports.ATTR_HTTP_STATUS_CODE = exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = exports.ATTR_GEN_AI_TOKEN_TYPE = exports.ATTR_GEN_AI_SYSTEM = exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = exports.ATTR_GEN_AI_REQUEST_TOP_P = exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = exports.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES = exports.ATTR_GEN_AI_REQUEST_MODEL = exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = exports.ATTR_GEN_AI_OPERATION_NAME = exports.ATTR_FAAS_INVOKED_REGION = exports.ATTR_FAAS_INVOKED_PROVIDER = exports.ATTR_FAAS_INVOKED_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_OPERATION = exports.ATTR_DB_NAME = exports.ATTR_AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN = exports.ATTR_AWS_STEP_FUNCTIONS_ACTIVITY_ARN = exports.ATTR_AWS_SNS_TOPIC_ARN = exports.ATTR_AWS_SECRETSMANAGER_SECRET_ARN = exports.ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS = exports.ATTR_AWS_DYNAMODB_TABLE_NAMES = exports.ATTR_AWS_DYNAMODB_TABLE_COUNT = exports.ATTR_AWS_DYNAMODB_SELECT = exports.ATTR_AWS_DYNAMODB_SEGMENT = exports.ATTR_AWS_DYNAMODB_SCAN_FORWARD = exports.ATTR_AWS_DYNAMODB_SCANNED_COUNT = exports.ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY = exports.ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY = exports.ATTR_AWS_DYNAMODB_PROJECTION = exports.ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES = exports.ATTR_AWS_DYNAMODB_LIMIT = exports.ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS = exports.ATTR_AWS_DYNAMODB_INDEX_NAME = exports.ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES = exports.ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES = exports.ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE = exports.ATTR_AWS_DYNAMODB_COUNT = exports.ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY = exports.ATTR_AWS_DYNAMODB_CONSISTENT_READ = exports.ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS = undefined; - exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = exports.GEN_AI_TOKEN_TYPE_VALUE_OUTPUT = exports.GEN_AI_TOKEN_TYPE_VALUE_INPUT = exports.GEN_AI_SYSTEM_VALUE_AWS_BEDROCK = exports.GEN_AI_OPERATION_NAME_VALUE_CHAT = exports.DB_SYSTEM_VALUE_DYNAMODB = exports.ATTR_RPC_SYSTEM = exports.ATTR_RPC_SERVICE = exports.ATTR_RPC_METHOD = undefined; - exports.ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS = "aws.dynamodb.attribute_definitions"; - exports.ATTR_AWS_DYNAMODB_CONSISTENT_READ = "aws.dynamodb.consistent_read"; - exports.ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY = "aws.dynamodb.consumed_capacity"; - exports.ATTR_AWS_DYNAMODB_COUNT = "aws.dynamodb.count"; - exports.ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE = "aws.dynamodb.exclusive_start_table"; - exports.ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES = "aws.dynamodb.global_secondary_indexes"; - exports.ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES = "aws.dynamodb.global_secondary_index_updates"; - exports.ATTR_AWS_DYNAMODB_INDEX_NAME = "aws.dynamodb.index_name"; - exports.ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS = "aws.dynamodb.item_collection_metrics"; - exports.ATTR_AWS_DYNAMODB_LIMIT = "aws.dynamodb.limit"; - exports.ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES = "aws.dynamodb.local_secondary_indexes"; - exports.ATTR_AWS_DYNAMODB_PROJECTION = "aws.dynamodb.projection"; - exports.ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY = "aws.dynamodb.provisioned_read_capacity"; - exports.ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY = "aws.dynamodb.provisioned_write_capacity"; - exports.ATTR_AWS_DYNAMODB_SCANNED_COUNT = "aws.dynamodb.scanned_count"; - exports.ATTR_AWS_DYNAMODB_SCAN_FORWARD = "aws.dynamodb.scan_forward"; - exports.ATTR_AWS_DYNAMODB_SEGMENT = "aws.dynamodb.segment"; - exports.ATTR_AWS_DYNAMODB_SELECT = "aws.dynamodb.select"; - exports.ATTR_AWS_DYNAMODB_TABLE_COUNT = "aws.dynamodb.table_count"; - exports.ATTR_AWS_DYNAMODB_TABLE_NAMES = "aws.dynamodb.table_names"; - exports.ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS = "aws.dynamodb.total_segments"; - exports.ATTR_AWS_SECRETSMANAGER_SECRET_ARN = "aws.secretsmanager.secret.arn"; - exports.ATTR_AWS_SNS_TOPIC_ARN = "aws.sns.topic.arn"; - exports.ATTR_AWS_STEP_FUNCTIONS_ACTIVITY_ARN = "aws.step_functions.activity.arn"; - exports.ATTR_AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN = "aws.step_functions.state_machine.arn"; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_OPERATION = "db.operation"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_FAAS_INVOKED_NAME = "faas.invoked_name"; - exports.ATTR_FAAS_INVOKED_PROVIDER = "faas.invoked_provider"; - exports.ATTR_FAAS_INVOKED_REGION = "faas.invoked_region"; - exports.ATTR_GEN_AI_OPERATION_NAME = "gen_ai.operation.name"; - exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = "gen_ai.request.max_tokens"; - exports.ATTR_GEN_AI_REQUEST_MODEL = "gen_ai.request.model"; - exports.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES = "gen_ai.request.stop_sequences"; - exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = "gen_ai.request.temperature"; - exports.ATTR_GEN_AI_REQUEST_TOP_P = "gen_ai.request.top_p"; - exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = "gen_ai.response.finish_reasons"; - exports.ATTR_GEN_AI_SYSTEM = "gen_ai.system"; - exports.ATTR_GEN_AI_TOKEN_TYPE = "gen_ai.token.type"; - exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens"; - exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = "gen_ai.usage.output_tokens"; - exports.ATTR_HTTP_STATUS_CODE = "http.status_code"; - exports.ATTR_MESSAGING_BATCH_MESSAGE_COUNT = "messaging.batch.message_count"; - exports.ATTR_MESSAGING_DESTINATION_NAME = "messaging.destination.name"; - exports.ATTR_MESSAGING_MESSAGE_ID = "messaging.message.id"; - exports.ATTR_MESSAGING_OPERATION = "messaging.operation"; - exports.ATTR_MESSAGING_OPERATION_TYPE = "messaging.operation.type"; - exports.ATTR_MESSAGING_SYSTEM = "messaging.system"; - exports.ATTR_RPC_METHOD = "rpc.method"; - exports.ATTR_RPC_SERVICE = "rpc.service"; - exports.ATTR_RPC_SYSTEM = "rpc.system"; - exports.DB_SYSTEM_VALUE_DYNAMODB = "dynamodb"; - exports.GEN_AI_OPERATION_NAME_VALUE_CHAT = "chat"; - exports.GEN_AI_SYSTEM_VALUE_AWS_BEDROCK = "aws.bedrock"; - exports.GEN_AI_TOKEN_TYPE_VALUE_INPUT = "input"; - exports.GEN_AI_TOKEN_TYPE_VALUE_OUTPUT = "output"; - exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = "gen_ai.client.operation.duration"; - exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = "gen_ai.client.token.usage"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/MessageAttributes.js -var require_MessageAttributes = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addPropagationFieldsToAttributeNames = exports.extractPropagationContext = exports.injectPropagationContext = exports.contextGetter = exports.contextSetter = exports.MAX_MESSAGE_ATTRIBUTES = undefined; - var api_1 = require_src(); - exports.MAX_MESSAGE_ATTRIBUTES = 10; - - class ContextSetter { - set(carrier, key, value) { - carrier[key] = { - DataType: "String", - StringValue: value - }; - } - } - exports.contextSetter = new ContextSetter; - - class ContextGetter { - keys(carrier) { - if (carrier == null) { - return []; - } - return Object.keys(carrier); - } - get(carrier, key) { - return carrier?.[key]?.StringValue || carrier?.[key]?.Value; - } - } - exports.contextGetter = new ContextGetter; - var injectPropagationContext = (attributesMap) => { - const attributes = attributesMap ?? {}; - if (Object.keys(attributes).length + api_1.propagation.fields().length <= exports.MAX_MESSAGE_ATTRIBUTES) { - api_1.propagation.inject(api_1.context.active(), attributes, exports.contextSetter); - } else { - api_1.diag.warn("aws-sdk instrumentation: cannot set context propagation on SQS/SNS message due to maximum amount of MessageAttributes"); - } - return attributes; - }; - exports.injectPropagationContext = injectPropagationContext; - var extractPropagationContext = (message, sqsExtractContextPropagationFromPayload) => { - const propagationFields = api_1.propagation.fields(); - const hasPropagationFields = Object.keys(message.MessageAttributes || []).some((attr) => propagationFields.includes(attr)); - if (hasPropagationFields) { - return message.MessageAttributes; - } else if (sqsExtractContextPropagationFromPayload && message.Body) { - try { - const payload = JSON.parse(message.Body); - return payload.MessageAttributes; - } catch { - api_1.diag.debug("failed to parse SQS payload to extract context propagation, trace might be incomplete."); - } - } - return; - }; - exports.extractPropagationContext = extractPropagationContext; - var addPropagationFieldsToAttributeNames = (messageAttributeNames = [], propagationFields) => { - return messageAttributeNames.length ? Array.from(new Set([...messageAttributeNames, ...propagationFields])) : propagationFields; - }; - exports.addPropagationFieldsToAttributeNames = addPropagationFieldsToAttributeNames; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/sqs.js -var require_sqs = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SqsServiceExtension = undefined; - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv6(); - var MessageAttributes_1 = require_MessageAttributes(); - - class SqsServiceExtension { - requestPreSpanHook(request, _config) { - const queueUrl = this.extractQueueUrl(request.commandInput); - const queueName = this.extractQueueNameFromUrl(queueUrl); - let spanKind = api_1.SpanKind.CLIENT; - let spanName; - const spanAttributes = { - [semconv_1.ATTR_MESSAGING_SYSTEM]: "aws_sqs", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: queueName, - [semantic_conventions_1.ATTR_URL_FULL]: queueUrl - }; - let isIncoming = false; - switch (request.commandName) { - case "ReceiveMessage": - { - isIncoming = true; - spanKind = api_1.SpanKind.CONSUMER; - spanName = `${queueName} receive`; - spanAttributes[semconv_1.ATTR_MESSAGING_OPERATION_TYPE] = "receive"; - request.commandInput.MessageAttributeNames = (0, MessageAttributes_1.addPropagationFieldsToAttributeNames)(request.commandInput.MessageAttributeNames, api_1.propagation.fields()); - } - break; - case "SendMessage": - case "SendMessageBatch": - spanKind = api_1.SpanKind.PRODUCER; - spanName = `${queueName} send`; - break; - } - return { - isIncoming, - spanAttributes, - spanKind, - spanName - }; - } - requestPostSpanHook = (request) => { - switch (request.commandName) { - case "SendMessage": - { - const origMessageAttributes = request.commandInput["MessageAttributes"] ?? {}; - if (origMessageAttributes) { - request.commandInput["MessageAttributes"] = (0, MessageAttributes_1.injectPropagationContext)(origMessageAttributes); - } - } - break; - case "SendMessageBatch": - { - const entries = request.commandInput?.Entries; - if (Array.isArray(entries)) { - entries.forEach((messageParams) => { - messageParams.MessageAttributes = (0, MessageAttributes_1.injectPropagationContext)(messageParams.MessageAttributes ?? {}); - }); - } - } - break; - } - }; - responseHook = (response, span, _tracer, config2) => { - switch (response.request.commandName) { - case "SendMessage": - span.setAttribute(semconv_1.ATTR_MESSAGING_MESSAGE_ID, response?.data?.MessageId); - break; - case "SendMessageBatch": - break; - case "ReceiveMessage": { - const messages = response?.data?.Messages || []; - span.setAttribute(semconv_1.ATTR_MESSAGING_BATCH_MESSAGE_COUNT, messages.length); - for (const message of messages) { - const propagatedContext = api_1.propagation.extract(api_1.ROOT_CONTEXT, (0, MessageAttributes_1.extractPropagationContext)(message, config2.sqsExtractContextPropagationFromPayload), MessageAttributes_1.contextGetter); - const spanContext = api_1.trace.getSpanContext(propagatedContext); - if (spanContext) { - span.addLink({ - context: spanContext, - attributes: { - [semconv_1.ATTR_MESSAGING_MESSAGE_ID]: message.MessageId - } - }); - } - } - break; - } - } - }; - extractQueueUrl = (commandInput) => { - return commandInput?.QueueUrl; - }; - extractQueueNameFromUrl = (queueUrl) => { - if (!queueUrl) - return; - const segments = queueUrl.split("/"); - if (segments.length === 0) - return; - return segments[segments.length - 1]; - }; - } - exports.SqsServiceExtension = SqsServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/bedrock-runtime.js -var require_bedrock_runtime = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BedrockRuntimeServiceExtension = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - var core_1 = require_src7(); - - class BedrockRuntimeServiceExtension { - tokenUsage; - operationDuration; - _diag = api_1.diag; - updateMetricInstruments(meter) { - this.tokenUsage = meter.createHistogram(semconv_1.METRIC_GEN_AI_CLIENT_TOKEN_USAGE, { - unit: "{token}", - description: "Measures number of input and output tokens used", - valueType: api_1.ValueType.INT, - advice: { - explicitBucketBoundaries: [ - 1, - 4, - 16, - 64, - 256, - 1024, - 4096, - 16384, - 65536, - 262144, - 1048576, - 4194304, - 16777216, - 67108864 - ] - } - }); - this.operationDuration = meter.createHistogram(semconv_1.METRIC_GEN_AI_CLIENT_OPERATION_DURATION, { - unit: "s", - description: "GenAI operation duration", - advice: { - explicitBucketBoundaries: [ - 0.01, - 0.02, - 0.04, - 0.08, - 0.16, - 0.32, - 0.64, - 1.28, - 2.56, - 5.12, - 10.24, - 20.48, - 40.96, - 81.92 - ] - } - }); - } - requestPreSpanHook(request, config2, diag2) { - switch (request.commandName) { - case "Converse": - return this.requestPreSpanHookConverse(request, config2, diag2, false); - case "ConverseStream": - return this.requestPreSpanHookConverse(request, config2, diag2, true); - case "InvokeModel": - return this.requestPreSpanHookInvokeModel(request, config2, diag2, false); - case "InvokeModelWithResponseStream": - return this.requestPreSpanHookInvokeModel(request, config2, diag2, true); - } - return { - isIncoming: false - }; - } - requestPreSpanHookConverse(request, config2, diag2, isStream) { - let spanName = semconv_1.GEN_AI_OPERATION_NAME_VALUE_CHAT; - const spanAttributes = { - [semconv_1.ATTR_GEN_AI_SYSTEM]: semconv_1.GEN_AI_SYSTEM_VALUE_AWS_BEDROCK, - [semconv_1.ATTR_GEN_AI_OPERATION_NAME]: semconv_1.GEN_AI_OPERATION_NAME_VALUE_CHAT - }; - const modelId = request.commandInput.modelId; - if (modelId) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MODEL] = modelId; - if (spanName) { - spanName += ` ${modelId}`; - } - } - const inferenceConfig = request.commandInput.inferenceConfig; - if (inferenceConfig) { - const { maxTokens, temperature, topP, stopSequences } = inferenceConfig; - if (maxTokens !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = maxTokens; - } - if (temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = temperature; - } - if (topP !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = topP; - } - if (stopSequences !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = stopSequences; - } - } - return { - spanName, - isIncoming: false, - isStream, - spanAttributes - }; - } - requestPreSpanHookInvokeModel(request, config2, diag2, isStream) { - let spanName; - const spanAttributes = { - [semconv_1.ATTR_GEN_AI_SYSTEM]: semconv_1.GEN_AI_SYSTEM_VALUE_AWS_BEDROCK - }; - const modelId = request.commandInput?.modelId; - if (modelId) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MODEL] = modelId; - } - if (request.commandInput?.body) { - const requestBody = JSON.parse(request.commandInput.body); - if (modelId.includes("amazon.titan")) { - if (requestBody.textGenerationConfig?.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.textGenerationConfig.temperature; - } - if (requestBody.textGenerationConfig?.topP !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.textGenerationConfig.topP; - } - if (requestBody.textGenerationConfig?.maxTokenCount !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.textGenerationConfig.maxTokenCount; - } - if (requestBody.textGenerationConfig?.stopSequences !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = requestBody.textGenerationConfig.stopSequences; - } - } else if (modelId.includes("amazon.nova")) { - if (requestBody.inferenceConfig?.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.inferenceConfig.temperature; - } - if (requestBody.inferenceConfig?.top_p !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.inferenceConfig.top_p; - } - if (requestBody.inferenceConfig?.max_new_tokens !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.inferenceConfig.max_new_tokens; - } - if (requestBody.inferenceConfig?.stopSequences !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = requestBody.inferenceConfig.stopSequences; - } - } else if (modelId.includes("anthropic.claude")) { - if (requestBody.max_tokens !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.max_tokens; - } - if (requestBody.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.temperature; - } - if (requestBody.top_p !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.top_p; - } - if (requestBody.stop_sequences !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = requestBody.stop_sequences; - } - } else if (modelId.includes("meta.llama")) { - if (requestBody.max_gen_len !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.max_gen_len; - } - if (requestBody.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.temperature; - } - if (requestBody.top_p !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.top_p; - } - } else if (modelId.includes("cohere.command-r")) { - if (requestBody.max_tokens !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.max_tokens; - } - if (requestBody.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.temperature; - } - if (requestBody.p !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.p; - } - if (requestBody.message !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS] = Math.ceil(requestBody.message.length / 6); - } - if (requestBody.stop_sequences !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = requestBody.stop_sequences; - } - } else if (modelId.includes("cohere.command")) { - if (requestBody.max_tokens !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.max_tokens; - } - if (requestBody.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.temperature; - } - if (requestBody.p !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.p; - } - if (requestBody.prompt !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS] = Math.ceil(requestBody.prompt.length / 6); - } - if (requestBody.stop_sequences !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = requestBody.stop_sequences; - } - } else if (modelId.includes("mistral")) { - if (requestBody.prompt !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS] = Math.ceil(requestBody.prompt.length / 6); - } - if (requestBody.max_tokens !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = requestBody.max_tokens; - } - if (requestBody.temperature !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = requestBody.temperature; - } - if (requestBody.top_p !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = requestBody.top_p; - } - if (requestBody.stop !== undefined) { - spanAttributes[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = requestBody.stop; - } - } - } - return { - spanName, - isIncoming: false, - isStream, - spanAttributes - }; - } - responseHook(response, span, tracer, config2, startTime) { - if (!span.isRecording()) { - return; - } - switch (response.request.commandName) { - case "Converse": - return this.responseHookConverse(response, span, tracer, config2, startTime); - case "ConverseStream": - return this.responseHookConverseStream(response, span, tracer, config2, startTime); - case "InvokeModel": - return this.responseHookInvokeModel(response, span, tracer, config2); - case "InvokeModelWithResponseStream": - return this.responseHookInvokeModelWithResponseStream(response, span, tracer, config2); - } - } - responseHookConverse(response, span, tracer, config2, startTime) { - const { stopReason, usage } = response.data; - BedrockRuntimeServiceExtension.setStopReason(span, stopReason); - this.setUsage(response, span, usage, startTime); - } - responseHookConverseStream(response, span, tracer, config2, startTime) { - return { - ...response.data, - stream: this.wrapConverseStreamResponse(response, response.data.stream, span, startTime) - }; - } - async* wrapConverseStreamResponse(response, stream3, span, startTime) { - try { - let usage; - for await (const item of stream3) { - BedrockRuntimeServiceExtension.setStopReason(span, item.messageStop?.stopReason); - usage = item.metadata?.usage; - yield item; - } - this.setUsage(response, span, usage, startTime); - } finally { - span.end(); - } - } - static setStopReason(span, stopReason) { - if (stopReason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [stopReason]); - } - } - setUsage(response, span, usage, startTime) { - const sharedMetricAttrs = { - [semconv_1.ATTR_GEN_AI_SYSTEM]: semconv_1.GEN_AI_SYSTEM_VALUE_AWS_BEDROCK, - [semconv_1.ATTR_GEN_AI_OPERATION_NAME]: semconv_1.GEN_AI_OPERATION_NAME_VALUE_CHAT, - [semconv_1.ATTR_GEN_AI_REQUEST_MODEL]: response.request.commandInput.modelId - }; - const durationSecs = (0, core_1.hrTimeToMilliseconds)((0, core_1.hrTimeDuration)(startTime, (0, core_1.hrTime)())) / 1000; - this.operationDuration.record(durationSecs, sharedMetricAttrs); - if (usage) { - const { inputTokens, outputTokens } = usage; - if (inputTokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, inputTokens); - this.tokenUsage.record(inputTokens, { - ...sharedMetricAttrs, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: semconv_1.GEN_AI_TOKEN_TYPE_VALUE_INPUT - }); - } - if (outputTokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, outputTokens); - this.tokenUsage.record(outputTokens, { - ...sharedMetricAttrs, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: semconv_1.GEN_AI_TOKEN_TYPE_VALUE_OUTPUT - }); - } - } - } - responseHookInvokeModel(response, span, tracer, config2) { - const currentModelId = response.request.commandInput?.modelId; - if (response.data?.body) { - const decodedResponseBody = new TextDecoder().decode(response.data.body); - const responseBody = JSON.parse(decodedResponseBody); - if (currentModelId.includes("amazon.titan")) { - if (responseBody.inputTextTokenCount !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, responseBody.inputTextTokenCount); - } - if (responseBody.results?.[0]?.tokenCount !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, responseBody.results[0].tokenCount); - } - if (responseBody.results?.[0]?.completionReason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.results[0].completionReason - ]); - } - } else if (currentModelId.includes("amazon.nova")) { - if (responseBody.usage !== undefined) { - if (responseBody.usage.inputTokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, responseBody.usage.inputTokens); - } - if (responseBody.usage.outputTokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, responseBody.usage.outputTokens); - } - } - if (responseBody.stopReason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.stopReason - ]); - } - } else if (currentModelId.includes("anthropic.claude")) { - if (responseBody.usage?.input_tokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, responseBody.usage.input_tokens); - } - if (responseBody.usage?.output_tokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, responseBody.usage.output_tokens); - } - if (responseBody.stop_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.stop_reason - ]); - } - } else if (currentModelId.includes("meta.llama")) { - if (responseBody.prompt_token_count !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, responseBody.prompt_token_count); - } - if (responseBody.generation_token_count !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, responseBody.generation_token_count); - } - if (responseBody.stop_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.stop_reason - ]); - } - } else if (currentModelId.includes("cohere.command-r")) { - if (responseBody.text !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, Math.ceil(responseBody.text.length / 6)); - } - if (responseBody.finish_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.finish_reason - ]); - } - } else if (currentModelId.includes("cohere.command")) { - if (responseBody.generations?.[0]?.text !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, Math.ceil(responseBody.generations[0].text.length / 6)); - } - if (responseBody.generations?.[0]?.finish_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.generations[0].finish_reason - ]); - } - } else if (currentModelId.includes("mistral")) { - if (responseBody.outputs?.[0]?.text !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, Math.ceil(responseBody.outputs[0].text.length / 6)); - } - if (responseBody.outputs?.[0]?.stop_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - responseBody.outputs[0].stop_reason - ]); - } - } - } - } - async responseHookInvokeModelWithResponseStream(response, span, tracer, config2) { - const stream3 = response.data?.body; - const modelId = response.request.commandInput?.modelId; - if (!stream3 || !modelId) - return; - response.data.body = async function* () { - try { - for await (const chunk of stream3) { - const parsedChunk = this.parseChunk(chunk?.chunk?.bytes); - if (!parsedChunk) {} else if (modelId.includes("amazon.titan")) { - BedrockRuntimeServiceExtension.recordTitanAttributes(parsedChunk, span); - } else if (modelId.includes("anthropic.claude")) { - BedrockRuntimeServiceExtension.recordClaudeAttributes(parsedChunk, span); - } else if (modelId.includes("amazon.nova")) { - BedrockRuntimeServiceExtension.recordNovaAttributes(parsedChunk, span); - } else if (modelId.includes("meta.llama")) { - BedrockRuntimeServiceExtension.recordLlamaAttributes(parsedChunk, span); - } else if (modelId.includes("cohere.command-r")) { - BedrockRuntimeServiceExtension.recordCohereRAttributes(parsedChunk, span); - } else if (modelId.includes("cohere.command")) { - BedrockRuntimeServiceExtension.recordCohereAttributes(parsedChunk, span); - } else if (modelId.includes("mistral")) { - BedrockRuntimeServiceExtension.recordMistralAttributes(parsedChunk, span); - } - yield chunk; - } - } finally { - span.end(); - } - }.bind(this)(); - return response.data; - } - parseChunk(bytes) { - if (!bytes || !(bytes instanceof Uint8Array)) - return null; - try { - const str = Buffer.from(bytes).toString("utf-8"); - return JSON.parse(str); - } catch (err) { - this._diag.warn("Failed to parse streamed chunk", err); - return null; - } - } - static recordNovaAttributes(parsedChunk, span) { - if (parsedChunk.metadata?.usage !== undefined) { - if (parsedChunk.metadata?.usage.inputTokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, parsedChunk.metadata.usage.inputTokens); - } - if (parsedChunk.metadata?.usage.outputTokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, parsedChunk.metadata.usage.outputTokens); - } - } - if (parsedChunk.messageStop?.stopReason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.messageStop.stopReason - ]); - } - } - static recordClaudeAttributes(parsedChunk, span) { - if (parsedChunk.message?.usage?.input_tokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, parsedChunk.message.usage.input_tokens); - } - if (parsedChunk.message?.usage?.output_tokens !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, parsedChunk.message.usage.output_tokens); - } - if (parsedChunk.delta?.stop_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.delta.stop_reason - ]); - } - } - static recordTitanAttributes(parsedChunk, span) { - if (parsedChunk.inputTextTokenCount !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, parsedChunk.inputTextTokenCount); - } - if (parsedChunk.totalOutputTextTokenCount !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, parsedChunk.totalOutputTextTokenCount); - } - if (parsedChunk.completionReason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.completionReason - ]); - } - } - static recordLlamaAttributes(parsedChunk, span) { - if (parsedChunk.prompt_token_count !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, parsedChunk.prompt_token_count); - } - if (parsedChunk.generation_token_count !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, parsedChunk.generation_token_count); - } - if (parsedChunk.stop_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.stop_reason - ]); - } - } - static recordMistralAttributes(parsedChunk, span) { - if (parsedChunk.outputs?.[0]?.text !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, Math.ceil(parsedChunk.outputs[0].text.length / 6)); - } - if (parsedChunk.outputs?.[0]?.stop_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.outputs[0].stop_reason - ]); - } - } - static recordCohereAttributes(parsedChunk, span) { - if (parsedChunk.generations?.[0]?.text !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, Math.ceil(parsedChunk.generations[0].text.length / 6)); - } - if (parsedChunk.generations?.[0]?.finish_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.generations[0].finish_reason - ]); - } - } - static recordCohereRAttributes(parsedChunk, span) { - if (parsedChunk.text !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, Math.ceil(parsedChunk.text.length / 6)); - } - if (parsedChunk.finish_reason !== undefined) { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, [ - parsedChunk.finish_reason - ]); - } - } - } - exports.BedrockRuntimeServiceExtension = BedrockRuntimeServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/dynamodb.js -var require_dynamodb = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DynamodbServiceExtension = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - - class DynamodbServiceExtension { - toArray(values) { - return Array.isArray(values) ? values : [values]; - } - requestPreSpanHook(normalizedRequest, config2, diag2) { - const spanKind = api_1.SpanKind.CLIENT; - let spanName; - const isIncoming = false; - const operation = normalizedRequest.commandName; - const spanAttributes = { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_DYNAMODB, - [semconv_1.ATTR_DB_NAME]: normalizedRequest.commandInput?.TableName, - [semconv_1.ATTR_DB_OPERATION]: operation - }; - if (config2.dynamoDBStatementSerializer) { - try { - const sanitizedStatement = config2.dynamoDBStatementSerializer(operation, normalizedRequest.commandInput); - if (typeof sanitizedStatement === "string") { - spanAttributes[semconv_1.ATTR_DB_STATEMENT] = sanitizedStatement; - } - } catch (err) { - diag2.error("failed to sanitize DynamoDB statement", err); - } - } - if (normalizedRequest.commandInput?.TableName) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_TABLE_NAMES] = [ - normalizedRequest.commandInput.TableName - ]; - } else if (normalizedRequest.commandInput?.RequestItems) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_TABLE_NAMES] = Object.keys(normalizedRequest.commandInput.RequestItems); - } - if (operation === "CreateTable" || operation === "UpdateTable") { - if (normalizedRequest.commandInput?.ProvisionedThroughput) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY] = normalizedRequest.commandInput.ProvisionedThroughput.ReadCapacityUnits; - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY] = normalizedRequest.commandInput.ProvisionedThroughput.WriteCapacityUnits; - } - } - if (operation === "GetItem" || operation === "Scan" || operation === "Query") { - if (normalizedRequest.commandInput?.ConsistentRead) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_CONSISTENT_READ] = normalizedRequest.commandInput.ConsistentRead; - } - } - if (operation === "Query" || operation === "Scan") { - if (normalizedRequest.commandInput?.ProjectionExpression) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_PROJECTION] = normalizedRequest.commandInput.ProjectionExpression; - } - } - if (operation === "CreateTable") { - if (normalizedRequest.commandInput?.GlobalSecondaryIndexes) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES] = this.toArray(normalizedRequest.commandInput.GlobalSecondaryIndexes).map((x) => JSON.stringify(x)); - } - if (normalizedRequest.commandInput?.LocalSecondaryIndexes) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES] = this.toArray(normalizedRequest.commandInput.LocalSecondaryIndexes).map((x) => JSON.stringify(x)); - } - } - if (operation === "ListTables" || operation === "Query" || operation === "Scan") { - if (normalizedRequest.commandInput?.Limit) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_LIMIT] = normalizedRequest.commandInput.Limit; - } - } - if (operation === "ListTables") { - if (normalizedRequest.commandInput?.ExclusiveStartTableName) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE] = normalizedRequest.commandInput.ExclusiveStartTableName; - } - } - if (operation === "Query") { - if (normalizedRequest.commandInput?.ScanIndexForward) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_SCAN_FORWARD] = normalizedRequest.commandInput.ScanIndexForward; - } - if (normalizedRequest.commandInput?.IndexName) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_INDEX_NAME] = normalizedRequest.commandInput.IndexName; - } - if (normalizedRequest.commandInput?.Select) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_SELECT] = normalizedRequest.commandInput.Select; - } - } - if (operation === "Scan") { - if (normalizedRequest.commandInput?.Segment) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_SEGMENT] = normalizedRequest.commandInput?.Segment; - } - if (normalizedRequest.commandInput?.TotalSegments) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS] = normalizedRequest.commandInput?.TotalSegments; - } - if (normalizedRequest.commandInput?.IndexName) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_INDEX_NAME] = normalizedRequest.commandInput.IndexName; - } - if (normalizedRequest.commandInput?.Select) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_SELECT] = normalizedRequest.commandInput.Select; - } - } - if (operation === "UpdateTable") { - if (normalizedRequest.commandInput?.AttributeDefinitions) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS] = this.toArray(normalizedRequest.commandInput.AttributeDefinitions).map((x) => JSON.stringify(x)); - } - if (normalizedRequest.commandInput?.GlobalSecondaryIndexUpdates) { - spanAttributes[semconv_1.ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES] = this.toArray(normalizedRequest.commandInput.GlobalSecondaryIndexUpdates).map((x) => JSON.stringify(x)); - } - } - return { - isIncoming, - spanAttributes, - spanKind, - spanName - }; - } - responseHook(response, span, _tracer, _config) { - if (response.data?.ConsumedCapacity) { - span.setAttribute(semconv_1.ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY, toArray(response.data.ConsumedCapacity).map((x) => JSON.stringify(x))); - } - if (response.data?.ItemCollectionMetrics) { - span.setAttribute(semconv_1.ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS, this.toArray(response.data.ItemCollectionMetrics).map((x) => JSON.stringify(x))); - } - if (response.data?.TableNames) { - span.setAttribute(semconv_1.ATTR_AWS_DYNAMODB_TABLE_COUNT, response.data?.TableNames.length); - } - if (response.data?.Count) { - span.setAttribute(semconv_1.ATTR_AWS_DYNAMODB_COUNT, response.data?.Count); - } - if (response.data?.ScannedCount) { - span.setAttribute(semconv_1.ATTR_AWS_DYNAMODB_SCANNED_COUNT, response.data?.ScannedCount); - } - } - } - exports.DynamodbServiceExtension = DynamodbServiceExtension; - function toArray(values) { - return Array.isArray(values) ? values : [values]; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/secretsmanager.js -var require_secretsmanager = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SecretsManagerServiceExtension = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - - class SecretsManagerServiceExtension { - requestPreSpanHook(request, _config) { - const secretId = request.commandInput?.SecretId; - const spanKind = api_1.SpanKind.CLIENT; - let spanName; - const spanAttributes = {}; - if (typeof secretId === "string" && secretId.startsWith("arn:aws:secretsmanager:")) { - spanAttributes[semconv_1.ATTR_AWS_SECRETSMANAGER_SECRET_ARN] = secretId; - } - return { - isIncoming: false, - spanAttributes, - spanKind, - spanName - }; - } - responseHook(response, span, tracer, config2) { - const secretArn = response.data?.ARN; - if (secretArn) { - span.setAttribute(semconv_1.ATTR_AWS_SECRETSMANAGER_SECRET_ARN, secretArn); - } - } - } - exports.SecretsManagerServiceExtension = SecretsManagerServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/semconv-obsolete.js -var require_semconv_obsolete3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MESSAGING_OPERATION_VALUE_RECEIVE = exports.MESSAGING_DESTINATION_KIND_VALUE_TOPIC = exports.ATTR_MESSAGING_DESTINATION_KIND = exports.ATTR_MESSAGING_DESTINATION = exports.ATTR_FAAS_EXECUTION = undefined; - exports.ATTR_FAAS_EXECUTION = "faas.execution"; - exports.ATTR_MESSAGING_DESTINATION = "messaging.destination"; - exports.ATTR_MESSAGING_DESTINATION_KIND = "messaging.destination_kind"; - exports.MESSAGING_DESTINATION_KIND_VALUE_TOPIC = "topic"; - exports.MESSAGING_OPERATION_VALUE_RECEIVE = "receive"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/sns.js -var require_sns = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SnsServiceExtension = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - var semconv_obsolete_1 = require_semconv_obsolete3(); - var MessageAttributes_1 = require_MessageAttributes(); - - class SnsServiceExtension { - requestPreSpanHook(request, _config) { - let spanKind = api_1.SpanKind.CLIENT; - let spanName = `SNS ${request.commandName}`; - const spanAttributes = { - [semconv_1.ATTR_MESSAGING_SYSTEM]: "aws.sns" - }; - if (request.commandName === "Publish") { - spanKind = api_1.SpanKind.PRODUCER; - spanAttributes[semconv_obsolete_1.ATTR_MESSAGING_DESTINATION_KIND] = semconv_obsolete_1.MESSAGING_DESTINATION_KIND_VALUE_TOPIC; - const { TopicArn, TargetArn, PhoneNumber } = request.commandInput; - spanAttributes[semconv_obsolete_1.ATTR_MESSAGING_DESTINATION] = this.extractDestinationName(TopicArn, TargetArn, PhoneNumber); - spanAttributes["messaging.destination.name"] = TopicArn || TargetArn || PhoneNumber || "unknown"; - spanName = `${PhoneNumber ? "phone_number" : spanAttributes[semconv_obsolete_1.ATTR_MESSAGING_DESTINATION]} send`; - } - const topicArn = request.commandInput?.TopicArn; - if (topicArn) { - spanAttributes[semconv_1.ATTR_AWS_SNS_TOPIC_ARN] = topicArn; - } - return { - isIncoming: false, - spanAttributes, - spanKind, - spanName - }; - } - requestPostSpanHook(request) { - if (request.commandName === "Publish") { - const origMessageAttributes = request.commandInput["MessageAttributes"] ?? {}; - if (origMessageAttributes) { - request.commandInput["MessageAttributes"] = (0, MessageAttributes_1.injectPropagationContext)(origMessageAttributes); - } - } - } - responseHook(response, span, tracer, config2) { - const topicArn = response.data?.TopicArn; - if (topicArn) { - span.setAttribute(semconv_1.ATTR_AWS_SNS_TOPIC_ARN, topicArn); - } - } - extractDestinationName(topicArn, targetArn, phoneNumber) { - if (topicArn || targetArn) { - const arn = topicArn ?? targetArn; - try { - return arn.substring(arn.lastIndexOf(":") + 1); - } catch (err) { - return arn; - } - } else if (phoneNumber) { - return phoneNumber; - } else { - return "unknown"; - } - } - } - exports.SnsServiceExtension = SnsServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/stepfunctions.js -var require_stepfunctions = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.StepFunctionsServiceExtension = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - - class StepFunctionsServiceExtension { - requestPreSpanHook(request, _config) { - const stateMachineArn = request.commandInput?.stateMachineArn; - const activityArn = request.commandInput?.activityArn; - const spanKind = api_1.SpanKind.CLIENT; - const spanAttributes = {}; - if (stateMachineArn) { - spanAttributes[semconv_1.ATTR_AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN] = stateMachineArn; - } - if (activityArn) { - spanAttributes[semconv_1.ATTR_AWS_STEP_FUNCTIONS_ACTIVITY_ARN] = activityArn; - } - return { - isIncoming: false, - spanAttributes, - spanKind - }; - } - } - exports.StepFunctionsServiceExtension = StepFunctionsServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/lambda.js -var require_lambda = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LambdaServiceExtension = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - var semconv_obsolete_1 = require_semconv_obsolete3(); - var api_2 = require_src(); - - class LambdaCommands { - static Invoke = "Invoke"; - } - - class LambdaServiceExtension { - requestPreSpanHook(request, _config) { - const functionName = this.extractFunctionName(request.commandInput); - let spanAttributes = {}; - let spanName; - switch (request.commandName) { - case "Invoke": - spanAttributes = { - [semconv_1.ATTR_FAAS_INVOKED_NAME]: functionName, - [semconv_1.ATTR_FAAS_INVOKED_PROVIDER]: "aws" - }; - if (request.region) { - spanAttributes[semconv_1.ATTR_FAAS_INVOKED_REGION] = request.region; - } - spanName = `${functionName} ${LambdaCommands.Invoke}`; - break; - } - return { - isIncoming: false, - spanAttributes, - spanKind: api_1.SpanKind.CLIENT, - spanName - }; - } - requestPostSpanHook = (request) => { - switch (request.commandName) { - case LambdaCommands.Invoke: - { - if (request.commandInput) { - request.commandInput.ClientContext = injectLambdaPropagationContext(request.commandInput.ClientContext); - } - } - break; - } - }; - responseHook(response, span, tracer, config2) { - switch (response.request.commandName) { - case LambdaCommands.Invoke: - { - span.setAttribute(semconv_obsolete_1.ATTR_FAAS_EXECUTION, response.requestId); - } - break; - } - } - extractFunctionName = (commandInput) => { - return commandInput?.FunctionName; - }; - } - exports.LambdaServiceExtension = LambdaServiceExtension; - var injectLambdaPropagationContext = (clientContext) => { - try { - const propagatedContext = {}; - api_2.propagation.inject(api_2.context.active(), propagatedContext); - const parsedClientContext = clientContext ? JSON.parse(Buffer.from(clientContext, "base64").toString("utf8")) : {}; - const updatedClientContext = { - ...parsedClientContext, - custom: { - ...parsedClientContext.custom, - ...propagatedContext - } - }; - const encodedClientContext = Buffer.from(JSON.stringify(updatedClientContext)).toString("base64"); - if (encodedClientContext.length > 3583) { - api_1.diag.warn("lambda instrumentation: cannot set context propagation on lambda invoke parameters due to ClientContext length limitations."); - return clientContext; - } - return encodedClientContext; - } catch (e) { - api_1.diag.debug("lambda instrumentation: failed to set context propagation on ClientContext", e); - return clientContext; - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/s3.js -var require_s3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.S3ServiceExtension = undefined; - var api_1 = require_src(); - var enums_1 = require_enums(); - - class S3ServiceExtension { - requestPreSpanHook(request, _config) { - const bucketName = request.commandInput?.Bucket; - const spanKind = api_1.SpanKind.CLIENT; - const spanAttributes = {}; - if (bucketName) { - spanAttributes[enums_1.AttributeNames.AWS_S3_BUCKET] = bucketName; - } - const isIncoming = false; - return { - isIncoming, - spanAttributes, - spanKind - }; - } - } - exports.S3ServiceExtension = S3ServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/kinesis.js -var require_kinesis = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KinesisServiceExtension = undefined; - var api_1 = require_src(); - var enums_1 = require_enums(); - - class KinesisServiceExtension { - requestPreSpanHook(request, _config) { - const streamName = request.commandInput?.StreamName; - const spanKind = api_1.SpanKind.CLIENT; - const spanAttributes = {}; - if (streamName) { - spanAttributes[enums_1.AttributeNames.AWS_KINESIS_STREAM_NAME] = streamName; - } - const isIncoming = false; - return { - isIncoming, - spanAttributes, - spanKind - }; - } - } - exports.KinesisServiceExtension = KinesisServiceExtension; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/ServicesExtensions.js -var require_ServicesExtensions = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ServicesExtensions = undefined; - var sqs_1 = require_sqs(); - var bedrock_runtime_1 = require_bedrock_runtime(); - var dynamodb_1 = require_dynamodb(); - var secretsmanager_1 = require_secretsmanager(); - var sns_1 = require_sns(); - var stepfunctions_1 = require_stepfunctions(); - var lambda_1 = require_lambda(); - var s3_1 = require_s3(); - var kinesis_1 = require_kinesis(); - - class ServicesExtensions { - services = new Map; - constructor() { - this.registerServices(); - } - registerServices() { - this.services.set("SecretsManager", new secretsmanager_1.SecretsManagerServiceExtension); - this.services.set("SFN", new stepfunctions_1.StepFunctionsServiceExtension); - this.services.set("SQS", new sqs_1.SqsServiceExtension); - this.services.set("SNS", new sns_1.SnsServiceExtension); - this.services.set("DynamoDB", new dynamodb_1.DynamodbServiceExtension); - this.services.set("Lambda", new lambda_1.LambdaServiceExtension); - this.services.set("S3", new s3_1.S3ServiceExtension); - this.services.set("Kinesis", new kinesis_1.KinesisServiceExtension); - this.services.set("BedrockRuntime", new bedrock_runtime_1.BedrockRuntimeServiceExtension); - } - requestPreSpanHook(request, config2, diag2) { - const serviceExtension = this.services.get(request.serviceName); - if (!serviceExtension) - return { - isIncoming: false - }; - return serviceExtension.requestPreSpanHook(request, config2, diag2); - } - requestPostSpanHook(request) { - const serviceExtension = this.services.get(request.serviceName); - if (!serviceExtension?.requestPostSpanHook) - return; - return serviceExtension.requestPostSpanHook(request); - } - responseHook(response, span, tracer, config2, startTime) { - const serviceExtension = this.services.get(response.request.serviceName); - return serviceExtension?.responseHook?.(response, span, tracer, config2, startTime); - } - updateMetricInstruments(meter) { - for (const serviceExtension of this.services.values()) { - serviceExtension.updateMetricInstruments?.(meter); - } - } - } - exports.ServicesExtensions = ServicesExtensions; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/services/index.js -var require_services = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ServicesExtensions = undefined; - var ServicesExtensions_1 = require_ServicesExtensions(); - Object.defineProperty(exports, "ServicesExtensions", { enumerable: true, get: function() { - return ServicesExtensions_1.ServicesExtensions; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/version.js -var require_version6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.63.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-aws-sdk"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/utils.js -var require_utils10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.bindPromise = exports.extractAttributesFromNormalizedRequest = exports.normalizeV3Request = exports.removeSuffixFromStringIfExists = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv6(); - var enums_1 = require_enums(); - var removeSuffixFromStringIfExists = (str, suffixToRemove) => { - const suffixLength = suffixToRemove.length; - return str?.slice(-suffixLength) === suffixToRemove ? str.slice(0, str.length - suffixLength) : str; - }; - exports.removeSuffixFromStringIfExists = removeSuffixFromStringIfExists; - var normalizeV3Request = (serviceName, commandNameWithSuffix, commandInput, region2) => { - return { - serviceName: serviceName?.replace(/\s+/g, ""), - commandName: (0, exports.removeSuffixFromStringIfExists)(commandNameWithSuffix, "Command"), - commandInput, - region: region2 - }; - }; - exports.normalizeV3Request = normalizeV3Request; - var extractAttributesFromNormalizedRequest = (normalizedRequest) => { - return { - [semconv_1.ATTR_RPC_SYSTEM]: "aws-api", - [semconv_1.ATTR_RPC_METHOD]: normalizedRequest.commandName, - [semconv_1.ATTR_RPC_SERVICE]: normalizedRequest.serviceName, - [enums_1.AttributeNames.CLOUD_REGION]: normalizedRequest.region - }; - }; - exports.extractAttributesFromNormalizedRequest = extractAttributesFromNormalizedRequest; - var bindPromise = (target, contextForCallbacks, rebindCount = 1) => { - const origThen = target.then; - target.then = function(onFulfilled, onRejected) { - const newOnFulfilled = api_1.context.bind(contextForCallbacks, onFulfilled); - const newOnRejected = api_1.context.bind(contextForCallbacks, onRejected); - const patchedPromise = origThen.call(this, newOnFulfilled, newOnRejected); - return rebindCount > 1 ? (0, exports.bindPromise)(patchedPromise, contextForCallbacks, rebindCount - 1) : patchedPromise; - }; - return target; - }; - exports.bindPromise = bindPromise; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/propwrap.js -var require_propwrap = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.propwrap = undefined; - var __defProp2 = Object.defineProperty; - var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; - var __hasOwnProp2 = Object.prototype.hasOwnProperty; - var __getOwnPropNames2 = Object.getOwnPropertyNames; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (const key of __getOwnPropNames2(from)) { - if (!__hasOwnProp2.call(to, key) && key !== except) { - __defProp2(to, key, { - get: () => from[key], - enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable - }); - } - } - } - return to; - }; - var propwrap = (obj, subpath, wrapper) => { - const parts = subpath.split("."); - const namespaces = [obj]; - let namespace = obj; - let key; - let val; - for (let i = 0;i < parts.length; i++) { - key = parts[i]; - val = namespace[key]; - if (!val) { - throw new TypeError(`cannot wrap "${subpath}": ".${parts.slice(0, i).join(".")}" is ${typeof val}`); - } else if (i < parts.length - 1) { - if (typeof val !== "object") { - throw new TypeError(`cannot wrap "${subpath}": ".${parts.slice(0, i).join(".")}" is not an Object`); - } - namespace = val; - namespaces.push(namespace); - } - } - for (let i = parts.length - 1;i >= 0; i--) { - key = parts[i]; - namespace = namespaces[i]; - if (i === parts.length - 1) { - const orig = namespace[key]; - val = wrapper(orig); - } else { - val = namespaces[i + 1]; - } - const desc = __getOwnPropDesc2(namespace, key); - const wrappedNamespace = __defProp2({}, key, { - value: val, - enumerable: !desc || desc.enumerable - }); - __copyProps(wrappedNamespace, namespace, key); - namespaces[i] = wrappedNamespace; - } - return namespaces[0]; - }; - exports.propwrap = propwrap; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/aws-sdk.js -var require_aws_sdk = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AwsInstrumentation = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var enums_1 = require_enums(); - var services_1 = require_services(); - var version_1 = require_version6(); - var instrumentation_1 = require_src9(); - var utils_1 = require_utils10(); - var propwrap_1 = require_propwrap(); - var semconv_1 = require_semconv6(); - var semantic_conventions_1 = require_src3(); - var V3_CLIENT_CONFIG_KEY = Symbol("opentelemetry.instrumentation.aws-sdk.client.config"); - - class AwsInstrumentation extends instrumentation_1.InstrumentationBase { - static component = "aws-sdk"; - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - const v3MiddlewareStackFileOldVersions = new instrumentation_1.InstrumentationNodeModuleFile("@aws-sdk/middleware-stack/dist/cjs/MiddlewareStack.js", [">=3.1.0 <3.35.0"], this.patchV3ConstructStack.bind(this), this.unpatchV3ConstructStack.bind(this)); - const v3MiddlewareStackFileNewVersions = new instrumentation_1.InstrumentationNodeModuleFile("@aws-sdk/middleware-stack/dist-cjs/MiddlewareStack.js", [">=3.35.0"], this.patchV3ConstructStack.bind(this), this.unpatchV3ConstructStack.bind(this)); - const v3MiddlewareStack = new instrumentation_1.InstrumentationNodeModuleDefinition("@aws-sdk/middleware-stack", ["^3.1.0"], undefined, undefined, [v3MiddlewareStackFileOldVersions, v3MiddlewareStackFileNewVersions]); - const self2 = this; - const v3SmithyMiddlewareStack = new instrumentation_1.InstrumentationNodeModuleDefinition("@smithy/middleware-stack", [">=2.0.0"], (moduleExports, moduleVersion) => { - const newExports = (0, propwrap_1.propwrap)(moduleExports, "constructStack", (orig) => { - self2._diag.debug("propwrapping aws-sdk v3 constructStack"); - return self2._getV3ConstructStackPatch(moduleVersion, orig); - }); - return newExports; - }); - const v3SmithyClient = new instrumentation_1.InstrumentationNodeModuleDefinition("@aws-sdk/smithy-client", ["^3.1.0"], this.patchV3SmithyClient.bind(this), this.unpatchV3SmithyClient.bind(this)); - const v3NewSmithyClient = new instrumentation_1.InstrumentationNodeModuleDefinition("@smithy/smithy-client", [">=1.0.3"], this.patchV3SmithyClient.bind(this), this.unpatchV3SmithyClient.bind(this)); - return [ - v3MiddlewareStack, - v3SmithyMiddlewareStack, - v3SmithyClient, - v3NewSmithyClient - ]; - } - patchV3ConstructStack(moduleExports, moduleVersion) { - this._wrap(moduleExports, "constructStack", this._getV3ConstructStackPatch.bind(this, moduleVersion)); - return moduleExports; - } - unpatchV3ConstructStack(moduleExports) { - this._unwrap(moduleExports, "constructStack"); - return moduleExports; - } - patchV3SmithyClient(moduleExports) { - this._wrap(moduleExports.Client.prototype, "send", this._getV3SmithyClientSendPatch.bind(this)); - return moduleExports; - } - unpatchV3SmithyClient(moduleExports) { - this._unwrap(moduleExports.Client.prototype, "send"); - return moduleExports; - } - _startAwsV3Span(normalizedRequest, metadata) { - const name = metadata.spanName ?? `${normalizedRequest.serviceName}.${normalizedRequest.commandName}`; - const newSpan = this.tracer.startSpan(name, { - kind: metadata.spanKind ?? api_1.SpanKind.CLIENT, - attributes: { - ...(0, utils_1.extractAttributesFromNormalizedRequest)(normalizedRequest), - ...metadata.spanAttributes - } - }); - return newSpan; - } - _callUserPreRequestHook(span, request, moduleVersion) { - const { preRequestHook } = this.getConfig(); - if (preRequestHook) { - const requestInfo = { - moduleVersion, - request - }; - (0, instrumentation_1.safeExecuteInTheMiddle)(() => preRequestHook(span, requestInfo), (e) => { - if (e) - api_1.diag.error(`${AwsInstrumentation.component} instrumentation: preRequestHook error`, e); - }, true); - } - } - _callUserResponseHook(span, response) { - const { responseHook } = this.getConfig(); - if (!responseHook) - return; - const responseInfo = { - response - }; - (0, instrumentation_1.safeExecuteInTheMiddle)(() => responseHook(span, responseInfo), (e) => { - if (e) - api_1.diag.error(`${AwsInstrumentation.component} instrumentation: responseHook error`, e); - }, true); - } - _callUserExceptionResponseHook(span, request, err) { - const { exceptionHook } = this.getConfig(); - if (!exceptionHook) - return; - const requestInfo = { - request - }; - (0, instrumentation_1.safeExecuteInTheMiddle)(() => exceptionHook(span, requestInfo, err), (e) => { - if (e) - api_1.diag.error(`${AwsInstrumentation.component} instrumentation: exceptionHook error`, e); - }, true); - } - _getV3ConstructStackPatch(moduleVersion, original) { - const self2 = this; - return function constructStack(...args) { - const stack = original.apply(this, args); - self2.patchV3MiddlewareStack(moduleVersion, stack); - return stack; - }; - } - _getV3SmithyClientSendPatch(original) { - return function send(command, ...args) { - command[V3_CLIENT_CONFIG_KEY] = this.config; - return original.apply(this, [command, ...args]); - }; - } - patchV3MiddlewareStack(moduleVersion, middlewareStackToPatch) { - if (!(0, instrumentation_1.isWrapped)(middlewareStackToPatch.resolve)) { - this._wrap(middlewareStackToPatch, "resolve", this._getV3MiddlewareStackResolvePatch.bind(this, moduleVersion)); - } - this._wrap(middlewareStackToPatch, "clone", this._getV3MiddlewareStackClonePatch.bind(this, moduleVersion)); - this._wrap(middlewareStackToPatch, "concat", this._getV3MiddlewareStackClonePatch.bind(this, moduleVersion)); - } - _getV3MiddlewareStackClonePatch(moduleVersion, original) { - const self2 = this; - return function(...args) { - const newStack = original.apply(this, args); - self2.patchV3MiddlewareStack(moduleVersion, newStack); - return newStack; - }; - } - _getV3MiddlewareStackResolvePatch(moduleVersion, original) { - const self2 = this; - return function(_handler, awsExecutionContext) { - const origHandler = original.call(this, _handler, awsExecutionContext); - const patchedHandler = function(command) { - const clientConfig = command[V3_CLIENT_CONFIG_KEY]; - const regionPromise = clientConfig?.region?.(); - const serviceName = clientConfig?.serviceId ?? (0, utils_1.removeSuffixFromStringIfExists)(awsExecutionContext.clientName || "AWS", "Client"); - const commandName = awsExecutionContext.commandName ?? command.constructor?.name; - const normalizedRequest = (0, utils_1.normalizeV3Request)(serviceName, commandName, command.input, undefined); - const requestMetadata = self2.servicesExtensions.requestPreSpanHook(normalizedRequest, self2.getConfig(), self2._diag); - const startTime = (0, core_1.hrTime)(); - const span = self2._startAwsV3Span(normalizedRequest, requestMetadata); - const activeContextWithSpan = api_1.trace.setSpan(api_1.context.active(), span); - const handlerPromise = new Promise((resolve2, reject) => { - Promise.resolve(regionPromise).then((resolvedRegion) => { - normalizedRequest.region = resolvedRegion; - span.setAttribute(enums_1.AttributeNames.CLOUD_REGION, resolvedRegion); - }).catch((e) => { - api_1.diag.debug(`${AwsInstrumentation.component} instrumentation: failed to extract region from async function`, e); - }).finally(() => { - self2._callUserPreRequestHook(span, normalizedRequest, moduleVersion); - const resultPromise = api_1.context.with(activeContextWithSpan, () => { - self2.servicesExtensions.requestPostSpanHook(normalizedRequest); - return self2._callOriginalFunction(() => origHandler.call(this, command)); - }); - const promiseWithResponseLogic = resultPromise.then((response) => { - const requestId = response.output?.$metadata?.requestId; - if (requestId) { - span.setAttribute(enums_1.AttributeNames.AWS_REQUEST_ID, requestId); - } - const httpStatusCode = response.output?.$metadata?.httpStatusCode; - if (httpStatusCode) { - if (self2._semconvStability & instrumentation_1.SemconvStability.OLD) { - span.setAttribute(semconv_1.ATTR_HTTP_STATUS_CODE, httpStatusCode); - } - if (self2._semconvStability & instrumentation_1.SemconvStability.STABLE) { - span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, httpStatusCode); - } - } - const extendedRequestId = response.output?.$metadata?.extendedRequestId; - if (extendedRequestId) { - span.setAttribute(enums_1.AttributeNames.AWS_REQUEST_EXTENDED_ID, extendedRequestId); - } - const normalizedResponse = { - data: response.output, - request: normalizedRequest, - requestId - }; - const override = self2.servicesExtensions.responseHook(normalizedResponse, span, self2.tracer, self2.getConfig(), startTime); - if (override) { - response.output = override; - normalizedResponse.data = override; - } - self2._callUserResponseHook(span, normalizedResponse); - return response; - }).catch((err) => { - const requestId = err?.RequestId; - if (requestId) { - span.setAttribute(enums_1.AttributeNames.AWS_REQUEST_ID, requestId); - } - const httpStatusCode = err?.$metadata?.httpStatusCode; - if (httpStatusCode) { - if (self2._semconvStability & instrumentation_1.SemconvStability.OLD) { - span.setAttribute(semconv_1.ATTR_HTTP_STATUS_CODE, httpStatusCode); - } - if (self2._semconvStability & instrumentation_1.SemconvStability.STABLE) { - span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, httpStatusCode); - } - } - const extendedRequestId = err?.extendedRequestId; - if (extendedRequestId) { - span.setAttribute(enums_1.AttributeNames.AWS_REQUEST_EXTENDED_ID, extendedRequestId); - } - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - span.recordException(err); - self2._callUserExceptionResponseHook(span, normalizedRequest, err); - throw err; - }).finally(() => { - if (!requestMetadata.isStream) { - span.end(); - } - }); - promiseWithResponseLogic.then((res) => { - resolve2(res); - }).catch((err) => reject(err)); - }); - }); - return requestMetadata.isIncoming ? (0, utils_1.bindPromise)(handlerPromise, activeContextWithSpan, 2) : handlerPromise; - }; - return patchedHandler; - }; - } - _callOriginalFunction(originalFunction) { - if (this.getConfig().suppressInternalInstrumentation) { - return api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), originalFunction); - } else { - return originalFunction(); - } - } - _updateMetricInstruments() { - if (!this.servicesExtensions) { - this.servicesExtensions = new services_1.ServicesExtensions; - } - this.servicesExtensions.updateMetricInstruments(this.meter); - } - } - exports.AwsInstrumentation = AwsInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-aws-sdk@0.63.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-aws-sdk/build/src/index.js -var require_src12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AwsInstrumentation = undefined; - var aws_sdk_1 = require_aws_sdk(); - Object.defineProperty(exports, "AwsInstrumentation", { enumerable: true, get: function() { - return aws_sdk_1.AwsInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-bunyan@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-bunyan/build/src/version.js -var require_version7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.53.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-bunyan"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-bunyan@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-bunyan/build/src/OpenTelemetryBunyanStream.js -var require_OpenTelemetryBunyanStream = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OpenTelemetryBunyanStream = undefined; - var api_logs_1 = require_src6(); - var version_1 = require_version7(); - var DEFAULT_INSTRUMENTATION_SCOPE_NAME = version_1.PACKAGE_NAME; - var DEFAULT_INSTRUMENTATION_SCOPE_VERSION = version_1.PACKAGE_VERSION; - var TRACE = 10; - var DEBUG = 20; - var INFO = 30; - var WARN = 40; - var ERROR = 50; - var FATAL = 60; - var levelFromName = { - trace: TRACE, - debug: DEBUG, - info: INFO, - warn: WARN, - error: ERROR, - fatal: FATAL - }; - var nameFromLevel = {}; - Object.keys(levelFromName).forEach(function(name) { - nameFromLevel[levelFromName[name]] = name; - }); - var OTEL_SEV_NUM_FROM_BUNYAN_LEVEL = { - [TRACE]: api_logs_1.SeverityNumber.TRACE, - [DEBUG]: api_logs_1.SeverityNumber.DEBUG, - [INFO]: api_logs_1.SeverityNumber.INFO, - [WARN]: api_logs_1.SeverityNumber.WARN, - [ERROR]: api_logs_1.SeverityNumber.ERROR, - [FATAL]: api_logs_1.SeverityNumber.FATAL - }; - var EXTRA_SEV_NUMS = [ - api_logs_1.SeverityNumber.TRACE2, - api_logs_1.SeverityNumber.TRACE3, - api_logs_1.SeverityNumber.TRACE4, - api_logs_1.SeverityNumber.DEBUG2, - api_logs_1.SeverityNumber.DEBUG3, - api_logs_1.SeverityNumber.DEBUG4, - api_logs_1.SeverityNumber.INFO2, - api_logs_1.SeverityNumber.INFO3, - api_logs_1.SeverityNumber.INFO4, - api_logs_1.SeverityNumber.WARN2, - api_logs_1.SeverityNumber.WARN3, - api_logs_1.SeverityNumber.WARN4, - api_logs_1.SeverityNumber.ERROR2, - api_logs_1.SeverityNumber.ERROR3, - api_logs_1.SeverityNumber.ERROR4, - api_logs_1.SeverityNumber.FATAL2, - api_logs_1.SeverityNumber.FATAL3, - api_logs_1.SeverityNumber.FATAL4 - ]; - function severityNumberFromBunyanLevel(lvl) { - const sev = OTEL_SEV_NUM_FROM_BUNYAN_LEVEL[lvl]; - if (sev !== undefined) { - return sev; - } - const relativeLevelWeight = (lvl - 10) / (70 - 10); - const otelSevIdx = Math.floor(relativeLevelWeight * EXTRA_SEV_NUMS.length); - const cappedOTelIdx = Math.min(EXTRA_SEV_NUMS.length - 1, Math.max(0, otelSevIdx)); - const otelSevValue = EXTRA_SEV_NUMS[cappedOTelIdx]; - return otelSevValue; - } - - class OpenTelemetryBunyanStream { - _otelLogger; - constructor() { - this._otelLogger = api_logs_1.logs.getLogger(DEFAULT_INSTRUMENTATION_SCOPE_NAME, DEFAULT_INSTRUMENTATION_SCOPE_VERSION); - } - write(rec) { - const { - time: time3, - level, - msg, - v, - hostname: hostname3, - pid, - trace_id, - span_id, - trace_flags, - ...fields - } = rec; - let timestamp = undefined; - if (typeof time3.getTime === "function") { - timestamp = time3.getTime(); - } else { - fields.time = time3; - } - const otelRec = { - timestamp, - observedTimestamp: timestamp, - severityNumber: severityNumberFromBunyanLevel(level), - severityText: nameFromLevel[level], - body: msg, - attributes: fields - }; - this._otelLogger.emit(otelRec); - } - } - exports.OpenTelemetryBunyanStream = OpenTelemetryBunyanStream; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-bunyan@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-bunyan/build/src/instrumentation.js -var require_instrumentation4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BunyanInstrumentation = undefined; - var util_1 = __require("util"); - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var version_1 = require_version7(); - var OpenTelemetryBunyanStream_1 = require_OpenTelemetryBunyanStream(); - var api_logs_1 = require_src6(); - var DEFAULT_CONFIG = { - disableLogSending: false, - disableLogCorrelation: false - }; - - class BunyanInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config2 }); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("bunyan", [">=1.0.0 <2"], (module2) => { - const instrumentation = this; - const Logger = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - this._wrap(Logger.prototype, "_emit", this._getPatchedEmit()); - function LoggerTraced(...args) { - let inst; - let retval = undefined; - if (this instanceof LoggerTraced) { - inst = this; - Logger.apply(this, args); - } else { - inst = Logger(...args); - retval = inst; - } - if (args[1] === undefined) { - instrumentation._addStream(inst); - } - return retval; - } - (0, util_1.inherits)(LoggerTraced, Logger); - const patchedExports = Object.assign(LoggerTraced, Logger); - this._wrap(patchedExports, "createLogger", this._getPatchedCreateLogger()); - return patchedExports; - }) - ]; - } - setConfig(config2 = {}) { - super.setConfig({ ...DEFAULT_CONFIG, ...config2 }); - } - _getPatchedEmit() { - return (original) => { - const instrumentation = this; - return function patchedEmit(...args) { - const config2 = instrumentation.getConfig(); - if (!instrumentation.isEnabled() || config2.disableLogCorrelation) { - return original.apply(this, args); - } - const span = api_1.trace.getSpan(api_1.context.active()); - if (!span) { - return original.apply(this, args); - } - const spanContext = span.spanContext(); - if (!(0, api_1.isSpanContextValid)(spanContext)) { - return original.apply(this, args); - } - const record3 = args[0]; - record3["trace_id"] = spanContext.traceId; - record3["span_id"] = spanContext.spanId; - record3["trace_flags"] = `0${spanContext.traceFlags.toString(16)}`; - instrumentation._callHook(span, record3); - return original.apply(this, args); - }; - }; - } - _getPatchedCreateLogger() { - return (original) => { - const instrumentation = this; - return function patchedCreateLogger(...args) { - const logger = original(...args); - instrumentation._addStream(logger); - return logger; - }; - }; - } - _addStream(logger) { - const config2 = this.getConfig(); - if (!this.isEnabled() || config2.disableLogSending) { - return; - } - this._diag.debug("Adding OpenTelemetryBunyanStream to logger"); - let streamLevel = logger.level(); - if (config2.logSeverity) { - const bunyanLevel = bunyanLevelFromSeverity(config2.logSeverity); - streamLevel = bunyanLevel || streamLevel; - } - logger.addStream({ - type: "raw", - stream: new OpenTelemetryBunyanStream_1.OpenTelemetryBunyanStream, - level: streamLevel - }); - } - _callHook(span, record3) { - const { logHook } = this.getConfig(); - if (typeof logHook !== "function") { - return; - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => logHook(span, record3), (err) => { - if (err) { - this._diag.error("error calling logHook", err); - } - }, true); - } - } - exports.BunyanInstrumentation = BunyanInstrumentation; - function bunyanLevelFromSeverity(severity) { - if (severity >= api_logs_1.SeverityNumber.FATAL) { - return "fatal"; - } else if (severity >= api_logs_1.SeverityNumber.ERROR) { - return "error"; - } else if (severity >= api_logs_1.SeverityNumber.WARN) { - return "warn"; - } else if (severity >= api_logs_1.SeverityNumber.INFO) { - return "info"; - } else if (severity >= api_logs_1.SeverityNumber.DEBUG) { - return "debug"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE) { - return "trace"; - } - return; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-bunyan@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-bunyan/build/src/index.js -var require_src13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OpenTelemetryBunyanStream = exports.BunyanInstrumentation = undefined; - var instrumentation_1 = require_instrumentation4(); - Object.defineProperty(exports, "BunyanInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.BunyanInstrumentation; - } }); - var OpenTelemetryBunyanStream_1 = require_OpenTelemetryBunyanStream(); - Object.defineProperty(exports, "OpenTelemetryBunyanStream", { enumerable: true, get: function() { - return OpenTelemetryBunyanStream_1.OpenTelemetryBunyanStream; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cassandra-driver@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cassandra-driver/build/src/semconv.js -var require_semconv7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_VALUE_CASSANDRA = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_NAME = undefined; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_CASSANDRA = "cassandra"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cassandra-driver@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cassandra-driver/build/src/version.js -var require_version8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.53.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-cassandra-driver"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cassandra-driver@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cassandra-driver/build/src/instrumentation.js -var require_instrumentation5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CassandraDriverInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv7(); - var version_1 = require_version8(); - var supportedVersions = [">=4.4.0 <5"]; - - class CassandraDriverInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return new instrumentation_1.InstrumentationNodeModuleDefinition("cassandra-driver", supportedVersions, (driverModule) => { - const Client = driverModule.Client.prototype; - if ((0, instrumentation_1.isWrapped)(Client["_execute"])) { - this._unwrap(Client, "_execute"); - } - if ((0, instrumentation_1.isWrapped)(Client.batch)) { - this._unwrap(Client, "batch"); - } - if ((0, instrumentation_1.isWrapped)(Client.stream)) { - this._unwrap(Client, "stream"); - } - this._wrap(Client, "_execute", this._getPatchedExecute()); - this._wrap(Client, "batch", this._getPatchedBatch()); - this._wrap(Client, "stream", this._getPatchedStream()); - return driverModule; - }, (driverModule) => { - const Client = driverModule.Client.prototype; - if ((0, instrumentation_1.isWrapped)(Client["_execute"])) { - this._unwrap(Client, "_execute"); - } - if ((0, instrumentation_1.isWrapped)(Client.batch)) { - this._unwrap(Client, "batch"); - } - if ((0, instrumentation_1.isWrapped)(Client.stream)) { - this._unwrap(Client, "stream"); - } - }, [ - new instrumentation_1.InstrumentationNodeModuleFile("cassandra-driver/lib/request-execution.js", supportedVersions, (execution) => { - if ((0, instrumentation_1.isWrapped)(execution.prototype["_sendOnConnection"])) { - this._unwrap(execution.prototype, "_sendOnConnection"); - } - this._wrap(execution.prototype, "_sendOnConnection", this._getPatchedSendOnConnection()); - return execution; - }, (execution) => { - if (execution === undefined) - return; - this._unwrap(execution.prototype, "_sendOnConnection"); - }) - ]); - } - _getMaxQueryLength() { - return this.getConfig().maxQueryLength ?? 65536; - } - _shouldIncludeDbStatement() { - return this.getConfig().enhancedDatabaseReporting ?? false; - } - _getPatchedExecute() { - return (original) => { - const plugin = this; - return function patchedExecute(...args) { - const span = plugin.startSpan({ op: "execute", query: args[0] }, this); - const execContext = api_1.trace.setSpan(api_1.context.active(), span); - const execPromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return api_1.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (error48) => { - if (error48) { - failSpan(span, error48); - } - }); - const wrappedPromise = wrapPromise(span, execPromise, (span2, result) => { - plugin._callResponseHook(span2, result); - }); - return api_1.context.bind(execContext, wrappedPromise); - }; - }; - } - _getPatchedSendOnConnection() { - return (original) => { - return function patchedSendOnConnection(...args) { - const span = api_1.trace.getSpan(api_1.context.active()); - const conn = this["_connection"]; - if (span !== undefined && conn !== undefined) { - const port = parseInt(conn.port, 10); - span.setAttribute(semconv_1.ATTR_NET_PEER_NAME, conn.address); - if (!isNaN(port)) { - span.setAttribute(semconv_1.ATTR_NET_PEER_PORT, port); - } - } - return original.apply(this, args); - }; - }; - } - _getPatchedBatch() { - return (original) => { - const plugin = this; - return function patchedBatch(...args) { - const queries = Array.isArray(args[0]) ? args[0] : []; - const span = plugin.startSpan({ op: "batch", query: combineQueries(queries) }, this); - const batchContext = api_1.trace.setSpan(api_1.context.active(), span); - if (typeof args[args.length - 1] === "function") { - const originalCallback = args[args.length - 1]; - const patchedCallback = function(...cbArgs) { - const error48 = cbArgs[0]; - if (error48) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - } - span.end(); - return originalCallback.apply(this, cbArgs); - }; - args[args.length - 1] = patchedCallback; - return api_1.context.with(batchContext, () => { - return original.apply(this, args); - }); - } - const batchPromise = (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return original.apply(this, args); - }, (error48) => { - if (error48) { - failSpan(span, error48); - } - }); - const wrappedPromise = wrapPromise(span, batchPromise); - return api_1.context.bind(batchContext, wrappedPromise); - }; - }; - } - _getPatchedStream() { - return (original) => { - const plugin = this; - return function patchedStream(...args) { - const span = plugin.startSpan({ op: "stream" }, this); - const callback = args[3]; - const endSpan = (error48) => { - if (error48) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - } - span.end(); - }; - if (callback === undefined) { - args[3] = endSpan; - } else if (typeof callback === "function") { - const wrappedCallback = function(err) { - endSpan(err); - return callback.call(this, err); - }; - args[3] = wrappedCallback; - } - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return original.apply(this, args); - }, (error48) => { - if (error48) { - failSpan(span, error48); - } - }); - }; - }; - } - startSpan({ op, query }, client) { - const attributes = { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_CASSANDRA - }; - if (this._shouldIncludeDbStatement() && query !== undefined) { - const statement = truncateQuery(query, this._getMaxQueryLength()); - attributes[semconv_1.ATTR_DB_STATEMENT] = statement; - } - const user2 = client.options?.credentials?.username; - if (user2) { - attributes[semconv_1.ATTR_DB_USER] = user2; - } - if (client.keyspace) { - attributes[semconv_1.ATTR_DB_NAME] = client.keyspace; - } - return this.tracer.startSpan(`cassandra-driver.${op}`, { - kind: api_1.SpanKind.CLIENT, - attributes - }); - } - _callResponseHook(span, response) { - const { responseHook } = this.getConfig(); - if (!responseHook) { - return; - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => responseHook(span, { response }), (e) => { - if (e) { - this._diag.error("responseHook error", e); - } - }, true); - } - } - exports.CassandraDriverInstrumentation = CassandraDriverInstrumentation; - function failSpan(span, error48) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - } - function combineQueries(queries) { - return queries.map((query) => typeof query === "string" ? query : query.query).join(` -`); - } - function wrapPromise(span, promise2, successCallback) { - return promise2.then((result) => { - return new Promise((resolve2) => { - if (successCallback) { - successCallback(span, result); - } - span.end(); - resolve2(result); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - reject(error48); - }); - }); - } - function truncateQuery(query, maxQueryLength) { - return String(query).substring(0, maxQueryLength); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cassandra-driver@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cassandra-driver/build/src/index.js -var require_src14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CassandraDriverInstrumentation = undefined; - var instrumentation_1 = require_instrumentation5(); - Object.defineProperty(exports, "CassandraDriverInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.CassandraDriverInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-connect@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-connect/build/src/enums/AttributeNames.js -var require_AttributeNames = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConnectNames = exports.ConnectTypes = exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["CONNECT_TYPE"] = "connect.type"; - AttributeNames2["CONNECT_NAME"] = "connect.name"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); - var ConnectTypes; - (function(ConnectTypes2) { - ConnectTypes2["MIDDLEWARE"] = "middleware"; - ConnectTypes2["REQUEST_HANDLER"] = "request_handler"; - })(ConnectTypes = exports.ConnectTypes || (exports.ConnectTypes = {})); - var ConnectNames; - (function(ConnectNames2) { - ConnectNames2["MIDDLEWARE"] = "middleware"; - ConnectNames2["REQUEST_HANDLER"] = "request handler"; - })(ConnectNames = exports.ConnectNames || (exports.ConnectNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-connect@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-connect/build/src/version.js -var require_version9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.51.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-connect"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-connect@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-connect/build/src/internal-types.js -var require_internal_types = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._LAYERS_STORE_PROPERTY = undefined; - exports._LAYERS_STORE_PROPERTY = Symbol("opentelemetry.instrumentation-connect.request-route-stack"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-connect@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-connect/build/src/utils.js -var require_utils11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.generateRoute = exports.replaceCurrentStackRoute = exports.addNewStackLayer = undefined; - var api_1 = require_src(); - var internal_types_1 = require_internal_types(); - var addNewStackLayer = (request) => { - if (Array.isArray(request[internal_types_1._LAYERS_STORE_PROPERTY]) === false) { - Object.defineProperty(request, internal_types_1._LAYERS_STORE_PROPERTY, { - enumerable: false, - value: [] - }); - } - request[internal_types_1._LAYERS_STORE_PROPERTY].push("/"); - const stackLength = request[internal_types_1._LAYERS_STORE_PROPERTY].length; - return () => { - if (stackLength === request[internal_types_1._LAYERS_STORE_PROPERTY].length) { - request[internal_types_1._LAYERS_STORE_PROPERTY].pop(); - } else { - api_1.diag.warn("Connect: Trying to pop the stack multiple time"); - } - }; - }; - exports.addNewStackLayer = addNewStackLayer; - var replaceCurrentStackRoute = (request, newRoute) => { - if (newRoute) { - request[internal_types_1._LAYERS_STORE_PROPERTY].splice(-1, 1, newRoute); - } - }; - exports.replaceCurrentStackRoute = replaceCurrentStackRoute; - var generateRoute = (request) => { - return request[internal_types_1._LAYERS_STORE_PROPERTY].reduce((acc, sub) => acc.replace(/\/+$/, "") + sub); - }; - exports.generateRoute = generateRoute; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-connect@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-connect/build/src/instrumentation.js -var require_instrumentation6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConnectInstrumentation = exports.ANONYMOUS_NAME = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var AttributeNames_1 = require_AttributeNames(); - var version_1 = require_version9(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var utils_1 = require_utils11(); - exports.ANONYMOUS_NAME = "anonymous"; - - class ConnectInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("connect", [">=3.0.0 <4"], (moduleExports) => { - return this._patchConstructor(moduleExports); - }) - ]; - } - _patchApp(patchedApp) { - if (!(0, instrumentation_1.isWrapped)(patchedApp.use)) { - this._wrap(patchedApp, "use", this._patchUse.bind(this)); - } - if (!(0, instrumentation_1.isWrapped)(patchedApp.handle)) { - this._wrap(patchedApp, "handle", this._patchHandle.bind(this)); - } - } - _patchConstructor(original) { - const instrumentation = this; - return function(...args) { - const app = original.apply(this, args); - instrumentation._patchApp(app); - return app; - }; - } - _patchNext(next, finishSpan) { - return function nextFunction(err) { - const result = next.apply(this, [err]); - finishSpan(); - return result; - }; - } - _startSpan(routeName, middleWare) { - let connectType; - let connectName; - let connectTypeName; - if (routeName) { - connectType = AttributeNames_1.ConnectTypes.REQUEST_HANDLER; - connectTypeName = AttributeNames_1.ConnectNames.REQUEST_HANDLER; - connectName = routeName; - } else { - connectType = AttributeNames_1.ConnectTypes.MIDDLEWARE; - connectTypeName = AttributeNames_1.ConnectNames.MIDDLEWARE; - connectName = middleWare.name || exports.ANONYMOUS_NAME; - } - const spanName = `${connectTypeName} - ${connectName}`; - const options = { - attributes: { - [semantic_conventions_1.ATTR_HTTP_ROUTE]: routeName.length > 0 ? routeName : "/", - [AttributeNames_1.AttributeNames.CONNECT_TYPE]: connectType, - [AttributeNames_1.AttributeNames.CONNECT_NAME]: connectName - } - }; - return this.tracer.startSpan(spanName, options); - } - _patchMiddleware(routeName, middleWare) { - const instrumentation = this; - const isErrorMiddleware = middleWare.length === 4; - function patchedMiddleware() { - if (!instrumentation.isEnabled()) { - return middleWare.apply(this, arguments); - } - const [reqArgIdx, resArgIdx, nextArgIdx] = isErrorMiddleware ? [1, 2, 3] : [0, 1, 2]; - const req = arguments[reqArgIdx]; - const res = arguments[resArgIdx]; - const next = arguments[nextArgIdx]; - (0, utils_1.replaceCurrentStackRoute)(req, routeName); - const rpcMetadata = (0, core_1.getRPCMetadata)(api_1.context.active()); - if (routeName && rpcMetadata?.type === core_1.RPCType.HTTP) { - rpcMetadata.route = (0, utils_1.generateRoute)(req); - } - let spanName = ""; - if (routeName) { - spanName = `request handler - ${routeName}`; - } else { - spanName = `middleware - ${middleWare.name || exports.ANONYMOUS_NAME}`; - } - const span = instrumentation._startSpan(routeName, middleWare); - instrumentation._diag.debug("start span", spanName); - let spanFinished = false; - function finishSpan() { - if (!spanFinished) { - spanFinished = true; - instrumentation._diag.debug(`finishing span ${span.name}`); - span.end(); - } else { - instrumentation._diag.debug(`span ${span.name} - already finished`); - } - res.removeListener("close", finishSpan); - } - res.addListener("close", finishSpan); - arguments[nextArgIdx] = instrumentation._patchNext(next, finishSpan); - return middleWare.apply(this, arguments); - } - Object.defineProperty(patchedMiddleware, "length", { - value: middleWare.length, - writable: false, - configurable: true - }); - return patchedMiddleware; - } - _patchUse(original) { - const instrumentation = this; - return function(...args) { - const middleWare = args[args.length - 1]; - const routeName = args[args.length - 2] || ""; - args[args.length - 1] = instrumentation._patchMiddleware(routeName, middleWare); - return original.apply(this, args); - }; - } - _patchHandle(original) { - const instrumentation = this; - return function() { - const [reqIdx, outIdx] = [0, 2]; - const req = arguments[reqIdx]; - const out = arguments[outIdx]; - const completeStack = (0, utils_1.addNewStackLayer)(req); - if (typeof out === "function") { - arguments[outIdx] = instrumentation._patchOut(out, completeStack); - } - return original.apply(this, arguments); - }; - } - _patchOut(out, completeStack) { - return function nextFunction(...args) { - completeStack(); - return Reflect.apply(out, this, args); - }; - } - } - exports.ConnectInstrumentation = ConnectInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-connect@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-connect/build/src/index.js -var require_src15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConnectTypes = exports.ConnectNames = exports.AttributeNames = exports.ANONYMOUS_NAME = exports.ConnectInstrumentation = undefined; - var instrumentation_1 = require_instrumentation6(); - Object.defineProperty(exports, "ConnectInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.ConnectInstrumentation; - } }); - Object.defineProperty(exports, "ANONYMOUS_NAME", { enumerable: true, get: function() { - return instrumentation_1.ANONYMOUS_NAME; - } }); - var AttributeNames_1 = require_AttributeNames(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); - Object.defineProperty(exports, "ConnectNames", { enumerable: true, get: function() { - return AttributeNames_1.ConnectNames; - } }); - Object.defineProperty(exports, "ConnectTypes", { enumerable: true, get: function() { - return AttributeNames_1.ConnectTypes; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cucumber@0.23.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cucumber/build/src/types.js -var require_types3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["FEATURE_TAGS"] = "cucumber.feature.tags"; - AttributeNames2["FEATURE_LANGUAGE"] = "cucumber.feature.language"; - AttributeNames2["FEATURE_DESCRIPTION"] = "cucumber.feature.description"; - AttributeNames2["SCENARIO_TAGS"] = "cucumber.scenario.tags"; - AttributeNames2["SCENARIO_DESCRIPTION"] = "cucumber.scenario.description"; - AttributeNames2["STEP_TYPE"] = "cucumber.step.type"; - AttributeNames2["STEP_STATUS"] = "cucumber.step.status"; - AttributeNames2["STEP_ARGS"] = "cucumber.step.args"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cucumber@0.23.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cucumber/build/src/version.js -var require_version10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.23.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-cucumber"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cucumber@0.23.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cucumber/build/src/instrumentation.js -var require_instrumentation7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CucumberInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var types_1 = require_types3(); - var version_1 = require_version10(); - var hooks = ["Before", "BeforeStep", "AfterStep", "After"]; - var steps = ["Given", "When", "Then"]; - var supportedVersions = [">=8.0.0 <13"]; - - class CucumberInstrumentation extends instrumentation_1.InstrumentationBase { - module; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("@cucumber/cucumber", supportedVersions, (moduleExports) => { - this.module = moduleExports; - steps.forEach((step) => { - if ((0, instrumentation_1.isWrapped)(moduleExports[step])) { - this._unwrap(moduleExports, step); - } - this._wrap(moduleExports, step, this._getStepPatch(step)); - }); - hooks.forEach((hook) => { - if ((0, instrumentation_1.isWrapped)(moduleExports[hook])) { - this._unwrap(moduleExports, hook); - } - this._wrap(moduleExports, hook, this._getHookPatch(hook)); - }); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - [...hooks, ...steps].forEach((method) => { - this._unwrap(moduleExports, method); - }); - }, [ - new instrumentation_1.InstrumentationNodeModuleFile("@cucumber/cucumber/lib/runtime/test_case_runner.js", supportedVersions, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.default.prototype.run)) { - this._unwrap(moduleExports.default.prototype, "run"); - this._unwrap(moduleExports.default.prototype, "runStep"); - if ("runAttempt" in moduleExports.default.prototype) { - this._unwrap(moduleExports.default.prototype, "runAttempt"); - } - } - this._wrap(moduleExports.default.prototype, "run", this._getTestCaseRunPatch()); - this._wrap(moduleExports.default.prototype, "runStep", this._getTestCaseRunStepPatch()); - if ("runAttempt" in moduleExports.default.prototype) { - this._wrap(moduleExports.default.prototype, "runAttempt", this._getTestCaseRunAttemptPatch()); - } - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.default.prototype, "run"); - this._unwrap(moduleExports.default.prototype, "runStep"); - if ("runAttempt" in moduleExports.default.prototype) { - this._unwrap(moduleExports.default.prototype, "runAttempt"); - } - }) - ]) - ]; - } - static mapTags(tags) { - return tags.map((tag) => tag.name); - } - static setSpanToError(span, error48) { - span.recordException(error48); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48?.message ?? error48 - }); - } - setSpanToStepStatus(span, status, context8) { - if (!this.module) - return; - span.setAttribute(types_1.AttributeNames.STEP_STATUS, status); - if ([ - this.module.Status.UNDEFINED, - this.module.Status.AMBIGUOUS, - this.module.Status.FAILED - ].includes(status)) { - span.recordException(status); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: context8 || status - }); - } - } - _getTestCaseRunPatch() { - const instrumentation = this; - return function(original) { - return async function(...args) { - const gherkinDocument = this["gherkinDocument"]; - const { feature } = gherkinDocument; - const pickle = this["pickle"]; - const scenario = feature.children.find((node) => node?.scenario?.id === pickle.astNodeIds[0])?.scenario; - return instrumentation.tracer.startActiveSpan(`Feature: ${feature.name}. Scenario: ${pickle.name}`, { - kind: api_1.SpanKind.CLIENT, - attributes: { - [semantic_conventions_1.ATTR_CODE_FILE_PATH]: gherkinDocument.uri, - [semantic_conventions_1.ATTR_CODE_LINE_NUMBER]: scenario.location.line, - [semantic_conventions_1.ATTR_CODE_FUNCTION_NAME]: `${feature.name} ${scenario.name}`, - [types_1.AttributeNames.FEATURE_TAGS]: CucumberInstrumentation.mapTags(feature.tags), - [types_1.AttributeNames.FEATURE_LANGUAGE]: feature.language, - [types_1.AttributeNames.FEATURE_DESCRIPTION]: feature.description, - [types_1.AttributeNames.SCENARIO_TAGS]: CucumberInstrumentation.mapTags(scenario.tags), - [types_1.AttributeNames.SCENARIO_DESCRIPTION]: scenario.description - } - }, async (span) => { - try { - const status = await original.apply(this, args); - instrumentation.setSpanToStepStatus(span, status); - return status; - } catch (error48) { - CucumberInstrumentation.setSpanToError(span, error48); - throw error48; - } finally { - span.end(); - } - }); - }; - }; - } - _getTestCaseRunStepPatch() { - const instrumentation = this; - return function(original) { - return async function(...args) { - const [pickleStep] = args; - return instrumentation.tracer.startActiveSpan(pickleStep.text, { - kind: api_1.SpanKind.CLIENT, - attributes: { - [types_1.AttributeNames.STEP_TYPE]: pickleStep.type - } - }, async (span) => { - try { - const runStepResult = await original.apply(this, args); - const { result, error: error48 } = (() => { - if ("result" in runStepResult) { - return runStepResult; - } - return { - result: runStepResult, - error: undefined - }; - })(); - instrumentation.setSpanToStepStatus(span, result.status, result.message); - if (error48) { - CucumberInstrumentation.setSpanToError(span, error48); - } - return runStepResult; - } catch (error48) { - CucumberInstrumentation.setSpanToError(span, error48); - throw error48; - } finally { - span.end(); - } - }); - }; - }; - } - _getTestCaseRunAttemptPatch() { - const instrumentation = this; - return function(original) { - return async function(...args) { - const [attempt] = args; - return instrumentation.tracer.startActiveSpan(`Attempt #${attempt}`, { - kind: api_1.SpanKind.CLIENT, - attributes: {} - }, async (span) => { - try { - const result = await original.apply(this, args); - const worstResult = this.getWorstStepResult(); - instrumentation.setSpanToStepStatus(span, worstResult.status, worstResult.message); - return result; - } catch (error48) { - CucumberInstrumentation.setSpanToError(span, error48); - throw error48; - } finally { - span.end(); - } - }); - }; - }; - } - _getHookPatch(name) { - const instrumentation = this; - return function(original) { - return function(tagsOrOptions, code) { - if (typeof tagsOrOptions === "function") { - code = tagsOrOptions; - tagsOrOptions = {}; - } - function traceableCode(arg) { - if (!instrumentation.isEnabled()) - return code?.call(this, arg); - return instrumentation.tracer.startActiveSpan(name, { - kind: api_1.SpanKind.CLIENT - }, async (span) => { - try { - return await code?.call(this, arg); - } catch (error48) { - this.attach?.(JSON.stringify(span.spanContext())); - CucumberInstrumentation.setSpanToError(span, error48); - throw error48; - } finally { - span.end(); - } - }); - } - return original.call(this, tagsOrOptions, traceableCode); - }; - }; - } - _getStepPatch(name) { - const instrumentation = this; - return function(original) { - return function(pattern, options, code) { - if (typeof options === "function") { - code = options; - options = {}; - } - function traceableCode(...args) { - if (!instrumentation.isEnabled()) - return code?.apply(this, args); - return instrumentation.tracer.startActiveSpan(`${name}(${pattern.toString()})`, { - kind: api_1.SpanKind.CLIENT, - attributes: args.slice(0, -1).reduce((attrs, arg, index) => ({ - ...attrs, - [`${types_1.AttributeNames.STEP_ARGS}[${index}]`]: arg?.raw instanceof Function ? JSON.stringify(arg.raw()) : arg - }), {}) - }, async (span) => { - try { - return await code?.apply(this, args); - } catch (error48) { - this.attach?.(JSON.stringify(span.spanContext())); - CucumberInstrumentation.setSpanToError(span, error48); - throw error48; - } finally { - span.end(); - } - }); - } - Object.defineProperty(traceableCode, "length", { - value: code?.length - }); - return original.call(this, pattern, options, traceableCode); - }; - }; - } - } - exports.CucumberInstrumentation = CucumberInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-cucumber@0.23.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-cucumber/build/src/index.js -var require_src16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = exports.CucumberInstrumentation = undefined; - var instrumentation_1 = require_instrumentation7(); - Object.defineProperty(exports, "CucumberInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.CucumberInstrumentation; - } }); - var types_1 = require_types3(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return types_1.AttributeNames; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dataloader@0.25.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dataloader/build/src/version.js -var require_version11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.25.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-dataloader"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dataloader@0.25.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dataloader/build/src/instrumentation.js -var require_instrumentation8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DataloaderInstrumentation = undefined; - var instrumentation_1 = require_src9(); - var api_1 = require_src(); - var version_1 = require_version11(); - var MODULE_NAME = "dataloader"; - function extractModuleExports(module2) { - return module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - } - - class DataloaderInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition(MODULE_NAME, [">=2.0.0 <3"], (module2) => { - const dataloader = extractModuleExports(module2); - this._patchLoad(dataloader.prototype); - this._patchLoadMany(dataloader.prototype); - this._patchPrime(dataloader.prototype); - this._patchClear(dataloader.prototype); - this._patchClearAll(dataloader.prototype); - return this._getPatchedConstructor(dataloader); - }, (module2) => { - const dataloader = extractModuleExports(module2); - ["load", "loadMany", "prime", "clear", "clearAll"].forEach((method) => { - if ((0, instrumentation_1.isWrapped)(dataloader.prototype[method])) { - this._unwrap(dataloader.prototype, method); - } - }); - }) - ]; - } - shouldCreateSpans() { - const config2 = this.getConfig(); - const hasParentSpan = api_1.trace.getSpan(api_1.context.active()) !== undefined; - return hasParentSpan || !config2.requireParentSpan; - } - getSpanName(dataloader, operation) { - const dataloaderName = dataloader.name; - if (dataloaderName === undefined || dataloaderName === null) { - return `${MODULE_NAME}.${operation}`; - } - return `${MODULE_NAME}.${operation} ${dataloaderName}`; - } - _wrapBatchLoadFn(batchLoadFn) { - const instrumentation = this; - return function patchedBatchLoadFn(...args) { - if (!instrumentation.isEnabled() || !instrumentation.shouldCreateSpans()) { - return batchLoadFn.call(this, ...args); - } - const parent = api_1.context.active(); - const span = instrumentation.tracer.startSpan(instrumentation.getSpanName(this, "batch"), { links: this._batch?.spanLinks }, parent); - return api_1.context.with(api_1.trace.setSpan(parent, span), () => { - return batchLoadFn.apply(this, args).then((value) => { - span.end(); - return value; - }).catch((err) => { - span.recordException(err); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - span.end(); - throw err; - }); - }); - }; - } - _getPatchedConstructor(constructor) { - const instrumentation = this; - const prototype = constructor.prototype; - if (!instrumentation.isEnabled()) { - return constructor; - } - function PatchedDataloader(...args) { - if (typeof args[0] === "function") { - if ((0, instrumentation_1.isWrapped)(args[0])) { - instrumentation._unwrap(args, 0); - } - args[0] = instrumentation._wrapBatchLoadFn(args[0]); - } - return constructor.apply(this, args); - } - PatchedDataloader.prototype = prototype; - return PatchedDataloader; - } - _patchLoad(proto) { - if ((0, instrumentation_1.isWrapped)(proto.load)) { - this._unwrap(proto, "load"); - } - this._wrap(proto, "load", this._getPatchedLoad.bind(this)); - } - _getPatchedLoad(original) { - const instrumentation = this; - return function patchedLoad(...args) { - if (!instrumentation.shouldCreateSpans()) { - return original.call(this, ...args); - } - const parent = api_1.context.active(); - const span = instrumentation.tracer.startSpan(instrumentation.getSpanName(this, "load"), { kind: api_1.SpanKind.CLIENT }, parent); - return api_1.context.with(api_1.trace.setSpan(parent, span), () => { - const result = original.call(this, ...args).then((value) => { - span.end(); - return value; - }).catch((err) => { - span.recordException(err); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - span.end(); - throw err; - }); - const loader = this; - if (loader._batch) { - if (!loader._batch.spanLinks) { - loader._batch.spanLinks = []; - } - loader._batch.spanLinks.push({ context: span.spanContext() }); - } - return result; - }); - }; - } - _patchLoadMany(proto) { - if ((0, instrumentation_1.isWrapped)(proto.loadMany)) { - this._unwrap(proto, "loadMany"); - } - this._wrap(proto, "loadMany", this._getPatchedLoadMany.bind(this)); - } - _getPatchedLoadMany(original) { - const instrumentation = this; - return function patchedLoadMany(...args) { - if (!instrumentation.shouldCreateSpans()) { - return original.call(this, ...args); - } - const parent = api_1.context.active(); - const span = instrumentation.tracer.startSpan(instrumentation.getSpanName(this, "loadMany"), { kind: api_1.SpanKind.CLIENT }, parent); - return api_1.context.with(api_1.trace.setSpan(parent, span), () => { - return original.call(this, ...args).then((value) => { - span.end(); - return value; - }); - }); - }; - } - _patchPrime(proto) { - if ((0, instrumentation_1.isWrapped)(proto.prime)) { - this._unwrap(proto, "prime"); - } - this._wrap(proto, "prime", this._getPatchedPrime.bind(this)); - } - _getPatchedPrime(original) { - const instrumentation = this; - return function patchedPrime(...args) { - if (!instrumentation.shouldCreateSpans()) { - return original.call(this, ...args); - } - const parent = api_1.context.active(); - const span = instrumentation.tracer.startSpan(instrumentation.getSpanName(this, "prime"), { kind: api_1.SpanKind.CLIENT }, parent); - const ret = api_1.context.with(api_1.trace.setSpan(parent, span), () => { - return original.call(this, ...args); - }); - span.end(); - return ret; - }; - } - _patchClear(proto) { - if ((0, instrumentation_1.isWrapped)(proto.clear)) { - this._unwrap(proto, "clear"); - } - this._wrap(proto, "clear", this._getPatchedClear.bind(this)); - } - _getPatchedClear(original) { - const instrumentation = this; - return function patchedClear(...args) { - if (!instrumentation.shouldCreateSpans()) { - return original.call(this, ...args); - } - const parent = api_1.context.active(); - const span = instrumentation.tracer.startSpan(instrumentation.getSpanName(this, "clear"), { kind: api_1.SpanKind.CLIENT }, parent); - const ret = api_1.context.with(api_1.trace.setSpan(parent, span), () => { - return original.call(this, ...args); - }); - span.end(); - return ret; - }; - } - _patchClearAll(proto) { - if ((0, instrumentation_1.isWrapped)(proto.clearAll)) { - this._unwrap(proto, "clearAll"); - } - this._wrap(proto, "clearAll", this._getPatchedClearAll.bind(this)); - } - _getPatchedClearAll(original) { - const instrumentation = this; - return function patchedClearAll(...args) { - if (!instrumentation.shouldCreateSpans()) { - return original.call(this, ...args); - } - const parent = api_1.context.active(); - const span = instrumentation.tracer.startSpan(instrumentation.getSpanName(this, "clearAll"), { kind: api_1.SpanKind.CLIENT }, parent); - const ret = api_1.context.with(api_1.trace.setSpan(parent, span), () => { - return original.call(this, ...args); - }); - span.end(); - return ret; - }; - } - } - exports.DataloaderInstrumentation = DataloaderInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dataloader@0.25.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dataloader/build/src/index.js -var require_src17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DataloaderInstrumentation = undefined; - var instrumentation_1 = require_instrumentation8(); - Object.defineProperty(exports, "DataloaderInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.DataloaderInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dns@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dns/build/src/enums/AttributeNames.js -var require_AttributeNames2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["DNS_ERROR_NAME"] = "dns.error_name"; - AttributeNames2["DNS_ERROR_MESSAGE"] = "dns.error_message"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dns@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dns/build/src/utils.js -var require_utils12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isIgnored = exports.satisfiesPattern = exports.setLookupAttributes = exports.getOperationName = exports.getFamilyAttribute = exports.setError = undefined; - var api_1 = require_src(); - var AttributeNames_1 = require_AttributeNames2(); - var setError = (err, span) => { - const { message, name } = err; - const attributes = { - [AttributeNames_1.AttributeNames.DNS_ERROR_MESSAGE]: message, - [AttributeNames_1.AttributeNames.DNS_ERROR_NAME]: name - }; - span.setAttributes(attributes); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message - }); - }; - exports.setError = setError; - var getFamilyAttribute = (family, index) => { - return index ? `peer[${index}].ipv${family}` : `peer.ipv${family}`; - }; - exports.getFamilyAttribute = getFamilyAttribute; - var getOperationName = (funcName, service) => { - return service ? `dns.${service}/${funcName}` : `dns.${funcName}`; - }; - exports.getOperationName = getOperationName; - var setLookupAttributes = (span, address, family) => { - const attributes = {}; - const isObject2 = typeof address === "object"; - let addresses = address; - if (!isObject2) { - addresses = [{ address, family }]; - } else if (!(addresses instanceof Array)) { - addresses = [ - { - address: address.address, - family: address.family - } - ]; - } - addresses.forEach((_, i) => { - const peerAttrFormat = (0, exports.getFamilyAttribute)(_.family, i); - attributes[peerAttrFormat] = _.address; - }); - span.setAttributes(attributes); - }; - exports.setLookupAttributes = setLookupAttributes; - var satisfiesPattern = (constant, pattern) => { - if (typeof pattern === "string") { - return pattern === constant; - } else if (pattern instanceof RegExp) { - return pattern.test(constant); - } else if (typeof pattern === "function") { - return pattern(constant); - } else { - throw new TypeError("Pattern is in unsupported datatype"); - } - }; - exports.satisfiesPattern = satisfiesPattern; - var isIgnored = (constant, list5, onException) => { - if (!list5) { - return false; - } - if (!Array.isArray(list5)) { - list5 = [list5]; - } - try { - for (const pattern of list5) { - if ((0, exports.satisfiesPattern)(constant, pattern)) { - return true; - } - } - } catch (e) { - if (onException) { - onException(e); - } - } - return false; - }; - exports.isIgnored = isIgnored; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dns@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dns/build/src/version.js -var require_version12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.51.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-dns"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dns@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dns/build/src/instrumentation.js -var require_instrumentation9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DnsInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var utils = require_utils12(); - var version_1 = require_version12(); - - class DnsInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("dns", ["*"], (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.lookup)) { - this._unwrap(moduleExports, "lookup"); - } - this._wrap(moduleExports, "lookup", this._getLookup()); - this._wrap(moduleExports.promises, "lookup", this._getLookup()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports, "lookup"); - this._unwrap(moduleExports.promises, "lookup"); - }), - new instrumentation_1.InstrumentationNodeModuleDefinition("dns/promises", ["*"], (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.lookup)) { - this._unwrap(moduleExports, "lookup"); - } - this._wrap(moduleExports, "lookup", this._getLookup()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports, "lookup"); - }) - ]; - } - _getLookup() { - return (original) => { - return this._getPatchLookupFunction(original); - }; - } - _getPatchLookupFunction(original) { - const plugin = this; - return function patchedLookup(hostname3, ...args) { - if (utils.isIgnored(hostname3, plugin.getConfig().ignoreHostnames, (e) => api_1.diag.error("caught ignoreHostname error: ", e))) { - return original.apply(this, [hostname3, ...args]); - } - const argsCount = args.length; - api_1.diag.debug("wrap lookup callback function and starts span"); - const name = utils.getOperationName("lookup"); - const span = plugin.tracer.startSpan(name, { - kind: api_1.SpanKind.CLIENT - }); - const originalCallback = args[argsCount - 1]; - if (typeof originalCallback === "function") { - args[argsCount - 1] = plugin._wrapLookupCallback(originalCallback, span); - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => original.apply(this, [hostname3, ...args]), (error48) => { - if (error48 != null) { - utils.setError(error48, span); - span.end(); - } - }); - } else { - const promise2 = (0, instrumentation_1.safeExecuteInTheMiddle)(() => original.apply(this, [ - hostname3, - ...args - ]), (error48) => { - if (error48 != null) { - utils.setError(error48, span); - span.end(); - } - }); - promise2.then((result) => { - utils.setLookupAttributes(span, result); - span.end(); - }, (e) => { - utils.setError(e, span); - span.end(); - }); - return promise2; - } - }; - } - _wrapLookupCallback(original, span) { - return function wrappedLookupCallback(err, address, family) { - api_1.diag.debug("executing wrapped lookup callback function"); - if (err !== null) { - utils.setError(err, span); - } else { - utils.setLookupAttributes(span, address, family); - } - span.end(); - api_1.diag.debug("executing original lookup callback function"); - return original.apply(this, arguments); - }; - } - } - exports.DnsInstrumentation = DnsInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-dns@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-dns/build/src/index.js -var require_src18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DnsInstrumentation = undefined; - var instrumentation_1 = require_instrumentation9(); - Object.defineProperty(exports, "DnsInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.DnsInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/enums/ExpressLayerType.js -var require_ExpressLayerType = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExpressLayerType = undefined; - var ExpressLayerType; - (function(ExpressLayerType2) { - ExpressLayerType2["ROUTER"] = "router"; - ExpressLayerType2["MIDDLEWARE"] = "middleware"; - ExpressLayerType2["REQUEST_HANDLER"] = "request_handler"; - })(ExpressLayerType = exports.ExpressLayerType || (exports.ExpressLayerType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/enums/AttributeNames.js -var require_AttributeNames3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["EXPRESS_TYPE"] = "express.type"; - AttributeNames2["EXPRESS_NAME"] = "express.name"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/internal-types.js -var require_internal_types2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._LAYERS_STORE_PROPERTY = exports.kLayerPatched = undefined; - exports.kLayerPatched = Symbol("express-layer-patched"); - exports._LAYERS_STORE_PROPERTY = "__ot_middlewares"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/utils.js -var require_utils13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getActualMatchedRoute = exports.getConstructedRoute = exports.getLayerPath = exports.asErrorAndMessage = exports.isLayerIgnored = exports.getLayerMetadata = exports.getRouterPath = exports.storeLayerPath = undefined; - var ExpressLayerType_1 = require_ExpressLayerType(); - var AttributeNames_1 = require_AttributeNames3(); - var internal_types_1 = require_internal_types2(); - var storeLayerPath = (request, value) => { - if (Array.isArray(request[internal_types_1._LAYERS_STORE_PROPERTY]) === false) { - Object.defineProperty(request, internal_types_1._LAYERS_STORE_PROPERTY, { - enumerable: false, - value: [] - }); - } - if (value === undefined) - return { isLayerPathStored: false }; - request[internal_types_1._LAYERS_STORE_PROPERTY].push(value); - return { isLayerPathStored: true }; - }; - exports.storeLayerPath = storeLayerPath; - var getRouterPath = (path, layer) => { - const stackLayer = layer.handle?.stack?.[0]; - if (stackLayer?.route?.path) { - return `${path}${stackLayer.route.path}`; - } - if (stackLayer?.handle?.stack) { - return (0, exports.getRouterPath)(path, stackLayer); - } - return path; - }; - exports.getRouterPath = getRouterPath; - var getLayerMetadata = (route, layer, layerPath) => { - if (layer.name === "router") { - const maybeRouterPath = (0, exports.getRouterPath)("", layer); - const extractedRouterPath = maybeRouterPath ? maybeRouterPath : layerPath || route || "/"; - return { - attributes: { - [AttributeNames_1.AttributeNames.EXPRESS_NAME]: extractedRouterPath, - [AttributeNames_1.AttributeNames.EXPRESS_TYPE]: ExpressLayerType_1.ExpressLayerType.ROUTER - }, - name: `router - ${extractedRouterPath}` - }; - } else if (layer.name === "bound dispatch" || layer.name === "handle") { - return { - attributes: { - [AttributeNames_1.AttributeNames.EXPRESS_NAME]: (route || layerPath) ?? "request handler", - [AttributeNames_1.AttributeNames.EXPRESS_TYPE]: ExpressLayerType_1.ExpressLayerType.REQUEST_HANDLER - }, - name: `request handler${layer.path ? ` - ${route || layerPath}` : ""}` - }; - } else { - return { - attributes: { - [AttributeNames_1.AttributeNames.EXPRESS_NAME]: layer.name, - [AttributeNames_1.AttributeNames.EXPRESS_TYPE]: ExpressLayerType_1.ExpressLayerType.MIDDLEWARE - }, - name: `middleware - ${layer.name}` - }; - } - }; - exports.getLayerMetadata = getLayerMetadata; - var satisfiesPattern = (constant, pattern) => { - if (typeof pattern === "string") { - return pattern === constant; - } else if (pattern instanceof RegExp) { - return pattern.test(constant); - } else if (typeof pattern === "function") { - return pattern(constant); - } else { - throw new TypeError("Pattern is in unsupported datatype"); - } - }; - var isLayerIgnored = (name, type, config2) => { - if (Array.isArray(config2?.ignoreLayersType) && config2?.ignoreLayersType?.includes(type)) { - return true; - } - if (Array.isArray(config2?.ignoreLayers) === false) - return false; - try { - for (const pattern of config2.ignoreLayers) { - if (satisfiesPattern(name, pattern)) { - return true; - } - } - } catch (e) {} - return false; - }; - exports.isLayerIgnored = isLayerIgnored; - var asErrorAndMessage = (error48) => error48 instanceof Error ? [error48, error48.message] : [String(error48), String(error48)]; - exports.asErrorAndMessage = asErrorAndMessage; - var getLayerPath = (args) => { - const firstArg = args[0]; - if (Array.isArray(firstArg)) { - return firstArg.map((arg) => extractLayerPathSegment(arg) || "").join(","); - } - return extractLayerPathSegment(firstArg); - }; - exports.getLayerPath = getLayerPath; - var extractLayerPathSegment = (arg) => { - if (typeof arg === "string") { - return arg; - } - if (arg instanceof RegExp || typeof arg === "number") { - return arg.toString(); - } - return; - }; - function getConstructedRoute(req) { - const layersStore = Array.isArray(req[internal_types_1._LAYERS_STORE_PROPERTY]) ? req[internal_types_1._LAYERS_STORE_PROPERTY] : []; - const meaningfulPaths = layersStore.filter((path) => path !== "/" && path !== "/*"); - if (meaningfulPaths.length === 1 && meaningfulPaths[0] === "*") { - return "*"; - } - return meaningfulPaths.join("").replace(/\/{2,}/g, "/"); - } - exports.getConstructedRoute = getConstructedRoute; - function getActualMatchedRoute(req) { - const layersStore = Array.isArray(req[internal_types_1._LAYERS_STORE_PROPERTY]) ? req[internal_types_1._LAYERS_STORE_PROPERTY] : []; - if (layersStore.length === 0) { - return; - } - if (layersStore.every((path) => path === "/")) { - return req.originalUrl === "/" ? "/" : undefined; - } - const constructedRoute = getConstructedRoute(req); - if (constructedRoute === "*") { - return constructedRoute; - } - if (constructedRoute.includes("/") && (constructedRoute.includes(",") || constructedRoute.includes("\\") || constructedRoute.includes("*") || constructedRoute.includes("["))) { - return constructedRoute; - } - const normalizedRoute = constructedRoute.startsWith("/") ? constructedRoute : `/${constructedRoute}`; - const isValidRoute = normalizedRoute.length > 0 && (req.originalUrl === normalizedRoute || req.originalUrl.startsWith(normalizedRoute) || isRoutePattern(normalizedRoute)); - return isValidRoute ? normalizedRoute : undefined; - } - exports.getActualMatchedRoute = getActualMatchedRoute; - function isRoutePattern(route) { - return route.includes(":") || route.includes("*"); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/version.js -var require_version13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.56.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-express"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/instrumentation.js -var require_instrumentation10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExpressInstrumentation = undefined; - var core_1 = require_src7(); - var api_1 = require_src(); - var ExpressLayerType_1 = require_ExpressLayerType(); - var AttributeNames_1 = require_AttributeNames3(); - var utils_1 = require_utils13(); - var version_1 = require_version13(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var internal_types_1 = require_internal_types2(); - - class ExpressInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("express", [">=4.0.0 <6"], (moduleExports) => { - const isExpressWithRouterPrototype = typeof moduleExports?.Router?.prototype?.route === "function"; - const routerProto = isExpressWithRouterPrototype ? moduleExports.Router.prototype : moduleExports.Router; - if ((0, instrumentation_1.isWrapped)(routerProto.route)) { - this._unwrap(routerProto, "route"); - } - this._wrap(routerProto, "route", this._getRoutePatch()); - if ((0, instrumentation_1.isWrapped)(routerProto.use)) { - this._unwrap(routerProto, "use"); - } - this._wrap(routerProto, "use", this._getRouterUsePatch()); - if ((0, instrumentation_1.isWrapped)(moduleExports.application.use)) { - this._unwrap(moduleExports.application, "use"); - } - this._wrap(moduleExports.application, "use", this._getAppUsePatch(isExpressWithRouterPrototype)); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - const isExpressWithRouterPrototype = typeof moduleExports?.Router?.prototype?.route === "function"; - const routerProto = isExpressWithRouterPrototype ? moduleExports.Router.prototype : moduleExports.Router; - this._unwrap(routerProto, "route"); - this._unwrap(routerProto, "use"); - this._unwrap(moduleExports.application, "use"); - }) - ]; - } - _getRoutePatch() { - const instrumentation = this; - return function(original) { - return function route_trace(...args) { - const route = original.apply(this, args); - const layer = this.stack[this.stack.length - 1]; - instrumentation._applyPatch(layer, (0, utils_1.getLayerPath)(args)); - return route; - }; - }; - } - _getRouterUsePatch() { - const instrumentation = this; - return function(original) { - return function use(...args) { - const route = original.apply(this, args); - const layer = this.stack[this.stack.length - 1]; - instrumentation._applyPatch(layer, (0, utils_1.getLayerPath)(args)); - return route; - }; - }; - } - _getAppUsePatch(isExpressWithRouterPrototype) { - const instrumentation = this; - return function(original) { - return function use(...args) { - const router = isExpressWithRouterPrototype ? this.router : this._router; - const route = original.apply(this, args); - if (router) { - const layer = router.stack[router.stack.length - 1]; - instrumentation._applyPatch(layer, (0, utils_1.getLayerPath)(args)); - } - return route; - }; - }; - } - _applyPatch(layer, layerPath) { - const instrumentation = this; - if (layer[internal_types_1.kLayerPatched] === true) - return; - layer[internal_types_1.kLayerPatched] = true; - this._wrap(layer, "handle", (original) => { - if (original.length === 4) - return original; - const patched = function(req, res) { - const { isLayerPathStored } = (0, utils_1.storeLayerPath)(req, layerPath); - const constructedRoute = (0, utils_1.getConstructedRoute)(req); - const actualMatchedRoute = (0, utils_1.getActualMatchedRoute)(req); - const attributes = { - [semantic_conventions_1.ATTR_HTTP_ROUTE]: actualMatchedRoute - }; - const metadata = (0, utils_1.getLayerMetadata)(constructedRoute, layer, layerPath); - const type = metadata.attributes[AttributeNames_1.AttributeNames.EXPRESS_TYPE]; - const rpcMetadata = (0, core_1.getRPCMetadata)(api_1.context.active()); - if (rpcMetadata?.type === core_1.RPCType.HTTP) { - rpcMetadata.route = actualMatchedRoute; - } - if ((0, utils_1.isLayerIgnored)(metadata.name, type, instrumentation.getConfig())) { - if (type === ExpressLayerType_1.ExpressLayerType.MIDDLEWARE) { - req[internal_types_1._LAYERS_STORE_PROPERTY].pop(); - } - return original.apply(this, arguments); - } - if (api_1.trace.getSpan(api_1.context.active()) === undefined) { - return original.apply(this, arguments); - } - const spanName = instrumentation._getSpanName({ - request: req, - layerType: type, - route: constructedRoute - }, metadata.name); - const span = instrumentation.tracer.startSpan(spanName, { - attributes: Object.assign(attributes, metadata.attributes) - }); - const parentContext = api_1.context.active(); - let currentContext = api_1.trace.setSpan(parentContext, span); - const { requestHook } = instrumentation.getConfig(); - if (requestHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => requestHook(span, { - request: req, - layerType: type, - route: constructedRoute - }), (e) => { - if (e) { - api_1.diag.error("express instrumentation: request hook failed", e); - } - }, true); - } - let spanHasEnded = false; - if (metadata.attributes[AttributeNames_1.AttributeNames.EXPRESS_TYPE] === ExpressLayerType_1.ExpressLayerType.ROUTER) { - span.end(); - spanHasEnded = true; - currentContext = parentContext; - } - const onResponseFinish = () => { - if (spanHasEnded === false) { - spanHasEnded = true; - span.end(); - } - }; - const args = Array.from(arguments); - const callbackIdx = args.findIndex((arg) => typeof arg === "function"); - if (callbackIdx >= 0) { - arguments[callbackIdx] = function() { - const maybeError = arguments[0]; - const isError = ![undefined, null, "route", "router"].includes(maybeError); - if (!spanHasEnded && isError) { - const [error48, message] = (0, utils_1.asErrorAndMessage)(maybeError); - span.recordException(error48); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message - }); - } - if (spanHasEnded === false) { - spanHasEnded = true; - req.res?.removeListener("finish", onResponseFinish); - span.end(); - } - if (!(req.route && isError) && isLayerPathStored) { - req[internal_types_1._LAYERS_STORE_PROPERTY].pop(); - } - const callback = args[callbackIdx]; - return api_1.context.bind(parentContext, callback).apply(this, arguments); - }; - } - try { - return api_1.context.bind(currentContext, original).apply(this, arguments); - } catch (anyError) { - const [error48, message] = (0, utils_1.asErrorAndMessage)(anyError); - span.recordException(error48); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message - }); - throw anyError; - } finally { - if (!spanHasEnded) { - res.once("finish", onResponseFinish); - } - } - }; - for (const key in original) { - Object.defineProperty(patched, key, { - get() { - return original[key]; - }, - set(value) { - original[key] = value; - } - }); - } - return patched; - }); - } - _getSpanName(info, defaultName) { - const { spanNameHook } = this.getConfig(); - if (!(spanNameHook instanceof Function)) { - return defaultName; - } - try { - return spanNameHook(info, defaultName) ?? defaultName; - } catch (err) { - api_1.diag.error("express instrumentation: error calling span name rewrite hook", err); - return defaultName; - } - } - } - exports.ExpressInstrumentation = ExpressInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-express@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-express/build/src/index.js -var require_src19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = exports.ExpressLayerType = exports.ExpressInstrumentation = undefined; - var instrumentation_1 = require_instrumentation10(); - Object.defineProperty(exports, "ExpressInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.ExpressInstrumentation; - } }); - var ExpressLayerType_1 = require_ExpressLayerType(); - Object.defineProperty(exports, "ExpressLayerType", { enumerable: true, get: function() { - return ExpressLayerType_1.ExpressLayerType; - } }); - var AttributeNames_1 = require_AttributeNames3(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fastify@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fastify/build/src/constants.js -var require_constants3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hooksNamesToWrap = exports.spanRequestSymbol = undefined; - exports.spanRequestSymbol = Symbol("opentelemetry.instrumentation.fastify.request_active_span"); - exports.hooksNamesToWrap = new Set([ - "onTimeout", - "onRequest", - "preParsing", - "preValidation", - "preSerialization", - "preHandler", - "onSend", - "onResponse", - "onError" - ]); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fastify@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fastify/build/src/enums/AttributeNames.js -var require_AttributeNames4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FastifyNames = exports.FastifyTypes = exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["FASTIFY_NAME"] = "fastify.name"; - AttributeNames2["FASTIFY_TYPE"] = "fastify.type"; - AttributeNames2["HOOK_NAME"] = "hook.name"; - AttributeNames2["PLUGIN_NAME"] = "plugin.name"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); - var FastifyTypes; - (function(FastifyTypes2) { - FastifyTypes2["MIDDLEWARE"] = "middleware"; - FastifyTypes2["REQUEST_HANDLER"] = "request_handler"; - })(FastifyTypes = exports.FastifyTypes || (exports.FastifyTypes = {})); - var FastifyNames; - (function(FastifyNames2) { - FastifyNames2["MIDDLEWARE"] = "middleware"; - FastifyNames2["REQUEST_HANDLER"] = "request handler"; - })(FastifyNames = exports.FastifyNames || (exports.FastifyNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fastify@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fastify/build/src/utils.js -var require_utils14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.safeExecuteInTheMiddleMaybePromise = exports.endSpan = exports.startSpan = undefined; - var api_1 = require_src(); - var constants_1 = require_constants3(); - function startSpan(reply, tracer, spanName, spanAttributes = {}) { - const span = tracer.startSpan(spanName, { attributes: spanAttributes }); - const spans = reply[constants_1.spanRequestSymbol] || []; - spans.push(span); - Object.defineProperty(reply, constants_1.spanRequestSymbol, { - enumerable: false, - configurable: true, - value: spans - }); - return span; - } - exports.startSpan = startSpan; - function endSpan(reply, err) { - const spans = reply[constants_1.spanRequestSymbol] || []; - if (!spans.length) { - return; - } - spans.forEach((span) => { - if (err) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - span.recordException(err); - } - span.end(); - }); - delete reply[constants_1.spanRequestSymbol]; - } - exports.endSpan = endSpan; - function safeExecuteInTheMiddleMaybePromise(execute, onFinish, preventThrowingError) { - let error48; - let result = undefined; - try { - result = execute(); - if (isPromise(result)) { - result.then((res) => onFinish(undefined, res), (err) => onFinish(err)); - } - } catch (e) { - error48 = e; - } finally { - if (!isPromise(result)) { - onFinish(error48, result); - if (error48 && !preventThrowingError) { - throw error48; - } - } - return result; - } - } - exports.safeExecuteInTheMiddleMaybePromise = safeExecuteInTheMiddleMaybePromise; - function isPromise(val) { - return typeof val === "object" && val && typeof Object.getOwnPropertyDescriptor(val, "then")?.value === "function" || false; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fastify@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fastify/build/src/version.js -var require_version14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.52.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-fastify"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fastify@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fastify/build/src/instrumentation.js -var require_instrumentation11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FastifyInstrumentation = exports.ANONYMOUS_NAME = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var constants_1 = require_constants3(); - var AttributeNames_1 = require_AttributeNames4(); - var utils_1 = require_utils14(); - var version_1 = require_version14(); - exports.ANONYMOUS_NAME = "anonymous"; - - class FastifyInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("fastify", [">=3.0.0 <6"], (moduleExports) => { - return this._patchConstructor(moduleExports); - }) - ]; - } - _hookOnRequest() { - const instrumentation = this; - return function onRequest(request, reply, done) { - if (!instrumentation.isEnabled()) { - return done(); - } - instrumentation._wrap(reply, "send", instrumentation._patchSend()); - const anyRequest = request; - const rpcMetadata = (0, core_1.getRPCMetadata)(api_1.context.active()); - const routeName = anyRequest.routeOptions ? anyRequest.routeOptions.url : request.routerPath; - if (routeName && rpcMetadata?.type === core_1.RPCType.HTTP) { - rpcMetadata.route = routeName; - } - done(); - }; - } - _wrapHandler(pluginName, hookName, original, syncFunctionWithDone) { - const instrumentation = this; - this._diag.debug("Patching fastify route.handler function"); - return function(...args) { - if (!instrumentation.isEnabled()) { - return original.apply(this, args); - } - const name = original.name || pluginName || exports.ANONYMOUS_NAME; - const spanName = `${AttributeNames_1.FastifyNames.MIDDLEWARE} - ${name}`; - const reply = args[1]; - const span = (0, utils_1.startSpan)(reply, instrumentation.tracer, spanName, { - [AttributeNames_1.AttributeNames.FASTIFY_TYPE]: AttributeNames_1.FastifyTypes.MIDDLEWARE, - [AttributeNames_1.AttributeNames.PLUGIN_NAME]: pluginName, - [AttributeNames_1.AttributeNames.HOOK_NAME]: hookName - }); - const origDone = syncFunctionWithDone && args[args.length - 1]; - if (origDone) { - args[args.length - 1] = function(...doneArgs) { - (0, utils_1.endSpan)(reply); - origDone.apply(this, doneArgs); - }; - } - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return (0, utils_1.safeExecuteInTheMiddleMaybePromise)(() => { - return original.apply(this, args); - }, (err) => { - if (err instanceof Error) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - span.recordException(err); - } - if (!syncFunctionWithDone) { - (0, utils_1.endSpan)(reply); - } - }); - }); - }; - } - _wrapAddHook() { - const instrumentation = this; - this._diag.debug("Patching fastify server.addHook function"); - return function(original) { - return function wrappedAddHook(...args) { - const name = args[0]; - const handler = args[1]; - const pluginName = this.pluginName; - if (!constants_1.hooksNamesToWrap.has(name)) { - return original.apply(this, args); - } - const syncFunctionWithDone = typeof args[args.length - 1] === "function" && handler.constructor.name !== "AsyncFunction"; - return original.apply(this, [ - name, - instrumentation._wrapHandler(pluginName, name, handler, syncFunctionWithDone) - ]); - }; - }; - } - _patchConstructor(moduleExports) { - const instrumentation = this; - function fastify(...args) { - const app = moduleExports.fastify.apply(this, args); - app.addHook("onRequest", instrumentation._hookOnRequest()); - app.addHook("preHandler", instrumentation._hookPreHandler()); - instrumentation._wrap(app, "addHook", instrumentation._wrapAddHook()); - return app; - } - if (moduleExports.errorCodes !== undefined) { - fastify.errorCodes = moduleExports.errorCodes; - } - fastify.fastify = fastify; - fastify.default = fastify; - return fastify; - } - _patchSend() { - const instrumentation = this; - this._diag.debug("Patching fastify reply.send function"); - return function patchSend(original) { - return function send(...args) { - const maybeError = args[0]; - if (!instrumentation.isEnabled()) { - return original.apply(this, args); - } - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return original.apply(this, args); - }, (err) => { - if (!err && maybeError instanceof Error) { - err = maybeError; - } - (0, utils_1.endSpan)(this, err); - }); - }; - }; - } - _hookPreHandler() { - const instrumentation = this; - this._diag.debug("Patching fastify preHandler function"); - return function preHandler(request, reply, done) { - if (!instrumentation.isEnabled()) { - return done(); - } - const anyRequest = request; - const handler = anyRequest.routeOptions?.handler || anyRequest.context?.handler; - const handlerName = handler?.name.startsWith("bound ") ? handler.name.substring(6) : handler?.name; - const spanName = `${AttributeNames_1.FastifyNames.REQUEST_HANDLER} - ${handlerName || this.pluginName || exports.ANONYMOUS_NAME}`; - const spanAttributes = { - [AttributeNames_1.AttributeNames.PLUGIN_NAME]: this.pluginName, - [AttributeNames_1.AttributeNames.FASTIFY_TYPE]: AttributeNames_1.FastifyTypes.REQUEST_HANDLER, - [semantic_conventions_1.ATTR_HTTP_ROUTE]: anyRequest.routeOptions ? anyRequest.routeOptions.url : request.routerPath - }; - if (handlerName) { - spanAttributes[AttributeNames_1.AttributeNames.FASTIFY_NAME] = handlerName; - } - const span = (0, utils_1.startSpan)(reply, instrumentation.tracer, spanName, spanAttributes); - const { requestHook } = instrumentation.getConfig(); - if (requestHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => requestHook(span, { request }), (e) => { - if (e) { - instrumentation._diag.error("request hook failed", e); - } - }, true); - } - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - done(); - }); - }; - } - } - exports.FastifyInstrumentation = FastifyInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fastify@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fastify/build/src/index.js -var require_src20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FastifyTypes = exports.FastifyNames = exports.AttributeNames = exports.FastifyInstrumentation = undefined; - var instrumentation_1 = require_instrumentation11(); - Object.defineProperty(exports, "FastifyInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.FastifyInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames4(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); - Object.defineProperty(exports, "FastifyNames", { enumerable: true, get: function() { - return AttributeNames_1.FastifyNames; - } }); - Object.defineProperty(exports, "FastifyTypes", { enumerable: true, get: function() { - return AttributeNames_1.FastifyTypes; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fs@0.27.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fs/build/src/version.js -var require_version15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.27.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-fs"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fs@0.27.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fs/build/src/constants.js -var require_constants4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SYNC_FUNCTIONS = exports.CALLBACK_FUNCTIONS = exports.PROMISE_FUNCTIONS = undefined; - exports.PROMISE_FUNCTIONS = [ - "access", - "appendFile", - "chmod", - "chown", - "copyFile", - "cp", - "lchown", - "link", - "lstat", - "lutimes", - "mkdir", - "mkdtemp", - "open", - "opendir", - "readdir", - "readFile", - "readlink", - "realpath", - "rename", - "rm", - "rmdir", - "stat", - "symlink", - "truncate", - "unlink", - "utimes", - "writeFile" - ]; - exports.CALLBACK_FUNCTIONS = [ - "access", - "appendFile", - "chmod", - "chown", - "copyFile", - "cp", - "exists", - "lchown", - "link", - "lstat", - "lutimes", - "mkdir", - "mkdtemp", - "open", - "opendir", - "readdir", - "readFile", - "readlink", - "realpath", - "realpath.native", - "rename", - "rm", - "rmdir", - "stat", - "symlink", - "truncate", - "unlink", - "utimes", - "writeFile" - ]; - exports.SYNC_FUNCTIONS = [ - "accessSync", - "appendFileSync", - "chmodSync", - "chownSync", - "copyFileSync", - "cpSync", - "existsSync", - "lchownSync", - "linkSync", - "lstatSync", - "lutimesSync", - "mkdirSync", - "mkdtempSync", - "opendirSync", - "openSync", - "readdirSync", - "readFileSync", - "readlinkSync", - "realpathSync", - "realpathSync.native", - "renameSync", - "rmdirSync", - "rmSync", - "statSync", - "symlinkSync", - "truncateSync", - "unlinkSync", - "utimesSync", - "writeFileSync" - ]; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fs@0.27.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fs/build/src/utils.js -var require_utils15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.indexFs = exports.splitTwoLevels = undefined; - function splitTwoLevels(functionName) { - const memberParts = functionName.split("."); - if (memberParts.length > 1) { - if (memberParts.length !== 2) - throw Error(`Invalid member function name ${functionName}`); - return memberParts; - } else { - return [functionName]; - } - } - exports.splitTwoLevels = splitTwoLevels; - function indexFs(fs, member) { - if (!member) - throw new Error(JSON.stringify({ member })); - const splitResult = splitTwoLevels(member); - const [functionName1, functionName2] = splitResult; - if (functionName2) { - return { - objectToPatch: fs[functionName1], - functionNameToPatch: functionName2 - }; - } else { - return { - objectToPatch: fs, - functionNameToPatch: functionName1 - }; - } - } - exports.indexFs = indexFs; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fs@0.27.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fs/build/src/instrumentation.js -var require_instrumentation12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FsInstrumentation = undefined; - var api4 = require_src(); - var core_1 = require_src7(); - var instrumentation_1 = require_src9(); - var version_1 = require_version15(); - var constants_1 = require_constants4(); - var util_1 = __require("util"); - var utils_1 = require_utils15(); - function patchedFunctionWithOriginalProperties(patchedFunction, original) { - return Object.assign(patchedFunction, original); - } - - class FsInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("fs", ["*"], (fs) => { - for (const fName of constants_1.SYNC_FUNCTIONS) { - const { objectToPatch, functionNameToPatch } = (0, utils_1.indexFs)(fs, fName); - if ((0, instrumentation_1.isWrapped)(objectToPatch[functionNameToPatch])) { - this._unwrap(objectToPatch, functionNameToPatch); - } - this._wrap(objectToPatch, functionNameToPatch, this._patchSyncFunction.bind(this, fName)); - } - for (const fName of constants_1.CALLBACK_FUNCTIONS) { - const { objectToPatch, functionNameToPatch } = (0, utils_1.indexFs)(fs, fName); - if ((0, instrumentation_1.isWrapped)(objectToPatch[functionNameToPatch])) { - this._unwrap(objectToPatch, functionNameToPatch); - } - if (fName === "exists") { - this._wrap(objectToPatch, functionNameToPatch, this._patchExistsCallbackFunction.bind(this, fName)); - continue; - } - this._wrap(objectToPatch, functionNameToPatch, this._patchCallbackFunction.bind(this, fName)); - } - for (const fName of constants_1.PROMISE_FUNCTIONS) { - if ((0, instrumentation_1.isWrapped)(fs.promises[fName])) { - this._unwrap(fs.promises, fName); - } - this._wrap(fs.promises, fName, this._patchPromiseFunction.bind(this, fName)); - } - return fs; - }, (fs) => { - if (fs === undefined) - return; - for (const fName of constants_1.SYNC_FUNCTIONS) { - const { objectToPatch, functionNameToPatch } = (0, utils_1.indexFs)(fs, fName); - if ((0, instrumentation_1.isWrapped)(objectToPatch[functionNameToPatch])) { - this._unwrap(objectToPatch, functionNameToPatch); - } - } - for (const fName of constants_1.CALLBACK_FUNCTIONS) { - const { objectToPatch, functionNameToPatch } = (0, utils_1.indexFs)(fs, fName); - if ((0, instrumentation_1.isWrapped)(objectToPatch[functionNameToPatch])) { - this._unwrap(objectToPatch, functionNameToPatch); - } - } - for (const fName of constants_1.PROMISE_FUNCTIONS) { - if ((0, instrumentation_1.isWrapped)(fs.promises[fName])) { - this._unwrap(fs.promises, fName); - } - } - }), - new instrumentation_1.InstrumentationNodeModuleDefinition("fs/promises", ["*"], (fsPromises) => { - for (const fName of constants_1.PROMISE_FUNCTIONS) { - if ((0, instrumentation_1.isWrapped)(fsPromises[fName])) { - this._unwrap(fsPromises, fName); - } - this._wrap(fsPromises, fName, this._patchPromiseFunction.bind(this, fName)); - } - return fsPromises; - }, (fsPromises) => { - if (fsPromises === undefined) - return; - for (const fName of constants_1.PROMISE_FUNCTIONS) { - if ((0, instrumentation_1.isWrapped)(fsPromises[fName])) { - this._unwrap(fsPromises, fName); - } - } - }) - ]; - } - _patchSyncFunction(functionName, original) { - const instrumentation = this; - const patchedFunction = function(...args) { - const activeContext = api4.context.active(); - if (!instrumentation._shouldTrace(activeContext)) { - return original.apply(this, args); - } - if (instrumentation._runCreateHook(functionName, { - args - }) === false) { - return api4.context.with((0, core_1.suppressTracing)(activeContext), original, this, ...args); - } - const span = instrumentation.tracer.startSpan(`fs ${functionName}`); - try { - const res = api4.context.with((0, core_1.suppressTracing)(api4.trace.setSpan(activeContext, span)), original, this, ...args); - instrumentation._runEndHook(functionName, { args, span }); - return res; - } catch (error48) { - span.recordException(error48); - span.setStatus({ - message: error48.message, - code: api4.SpanStatusCode.ERROR - }); - instrumentation._runEndHook(functionName, { args, span, error: error48 }); - throw error48; - } finally { - span.end(); - } - }; - return patchedFunctionWithOriginalProperties(patchedFunction, original); - } - _patchCallbackFunction(functionName, original) { - const instrumentation = this; - const patchedFunction = function(...args) { - const activeContext = api4.context.active(); - if (!instrumentation._shouldTrace(activeContext)) { - return original.apply(this, args); - } - if (instrumentation._runCreateHook(functionName, { - args - }) === false) { - return api4.context.with((0, core_1.suppressTracing)(activeContext), original, this, ...args); - } - const lastIdx = args.length - 1; - const cb = args[lastIdx]; - if (typeof cb === "function") { - const span = instrumentation.tracer.startSpan(`fs ${functionName}`); - args[lastIdx] = api4.context.bind(activeContext, function(error48) { - if (error48) { - span.recordException(error48); - span.setStatus({ - message: error48.message, - code: api4.SpanStatusCode.ERROR - }); - } - instrumentation._runEndHook(functionName, { - args, - span, - error: error48 - }); - span.end(); - return cb.apply(this, arguments); - }); - try { - return api4.context.with((0, core_1.suppressTracing)(api4.trace.setSpan(activeContext, span)), original, this, ...args); - } catch (error48) { - span.recordException(error48); - span.setStatus({ - message: error48.message, - code: api4.SpanStatusCode.ERROR - }); - instrumentation._runEndHook(functionName, { - args, - span, - error: error48 - }); - span.end(); - throw error48; - } - } else { - return original.apply(this, args); - } - }; - return patchedFunctionWithOriginalProperties(patchedFunction, original); - } - _patchExistsCallbackFunction(functionName, original) { - const instrumentation = this; - const patchedFunction = function(...args) { - const activeContext = api4.context.active(); - if (!instrumentation._shouldTrace(activeContext)) { - return original.apply(this, args); - } - if (instrumentation._runCreateHook(functionName, { - args - }) === false) { - return api4.context.with((0, core_1.suppressTracing)(activeContext), original, this, ...args); - } - const lastIdx = args.length - 1; - const cb = args[lastIdx]; - if (typeof cb === "function") { - const span = instrumentation.tracer.startSpan(`fs ${functionName}`); - args[lastIdx] = api4.context.bind(activeContext, function() { - instrumentation._runEndHook(functionName, { - args, - span - }); - span.end(); - return cb.apply(this, arguments); - }); - try { - return api4.context.with((0, core_1.suppressTracing)(api4.trace.setSpan(activeContext, span)), original, this, ...args); - } catch (error48) { - span.recordException(error48); - span.setStatus({ - message: error48.message, - code: api4.SpanStatusCode.ERROR - }); - instrumentation._runEndHook(functionName, { - args, - span, - error: error48 - }); - span.end(); - throw error48; - } - } else { - return original.apply(this, args); - } - }; - const functionWithOriginalProperties = patchedFunctionWithOriginalProperties(patchedFunction, original); - const promisified = function(path) { - return new Promise((resolve2) => functionWithOriginalProperties(path, resolve2)); - }; - Object.defineProperty(promisified, "name", { value: functionName }); - Object.defineProperty(functionWithOriginalProperties, util_1.promisify.custom, { - value: promisified - }); - return functionWithOriginalProperties; - } - _patchPromiseFunction(functionName, original) { - const instrumentation = this; - const patchedFunction = async function(...args) { - const activeContext = api4.context.active(); - if (!instrumentation._shouldTrace(activeContext)) { - return original.apply(this, args); - } - if (instrumentation._runCreateHook(functionName, { - args - }) === false) { - return api4.context.with((0, core_1.suppressTracing)(activeContext), original, this, ...args); - } - const span = instrumentation.tracer.startSpan(`fs ${functionName}`); - try { - const res = await api4.context.with((0, core_1.suppressTracing)(api4.trace.setSpan(activeContext, span)), original, this, ...args); - instrumentation._runEndHook(functionName, { args, span }); - return res; - } catch (error48) { - span.recordException(error48); - span.setStatus({ - message: error48.message, - code: api4.SpanStatusCode.ERROR - }); - instrumentation._runEndHook(functionName, { args, span, error: error48 }); - throw error48; - } finally { - span.end(); - } - }; - return patchedFunctionWithOriginalProperties(patchedFunction, original); - } - _runCreateHook(...args) { - const { createHook } = this.getConfig(); - if (typeof createHook === "function") { - try { - return createHook(...args); - } catch (e) { - this._diag.error("caught createHook error", e); - } - } - return true; - } - _runEndHook(...args) { - const { endHook } = this.getConfig(); - if (typeof endHook === "function") { - try { - endHook(...args); - } catch (e) { - this._diag.error("caught endHook error", e); - } - } - } - _shouldTrace(context8) { - if ((0, core_1.isTracingSuppressed)(context8)) { - return false; - } - const { requireParentSpan } = this.getConfig(); - if (requireParentSpan) { - const parentSpan = api4.trace.getSpan(context8); - if (parentSpan == null) { - return false; - } - } - return true; - } - } - exports.FsInstrumentation = FsInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-fs@0.27.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-fs/build/src/index.js -var require_src21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FsInstrumentation = undefined; - var instrumentation_1 = require_instrumentation12(); - Object.defineProperty(exports, "FsInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.FsInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-generic-pool@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-generic-pool/build/src/version.js -var require_version16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.51.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-generic-pool"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-generic-pool@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-generic-pool/build/src/instrumentation.js -var require_instrumentation13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GenericPoolInstrumentation = undefined; - var api4 = require_src(); - var instrumentation_1 = require_src9(); - var version_1 = require_version16(); - var MODULE_NAME = "generic-pool"; - - class GenericPoolInstrumentation extends instrumentation_1.InstrumentationBase { - _isDisabled = false; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition(MODULE_NAME, [">=3.0.0 <4"], (moduleExports) => { - const Pool = moduleExports.Pool; - if ((0, instrumentation_1.isWrapped)(Pool.prototype.acquire)) { - this._unwrap(Pool.prototype, "acquire"); - } - this._wrap(Pool.prototype, "acquire", this._acquirePatcher.bind(this)); - return moduleExports; - }, (moduleExports) => { - const Pool = moduleExports.Pool; - this._unwrap(Pool.prototype, "acquire"); - return moduleExports; - }), - new instrumentation_1.InstrumentationNodeModuleDefinition(MODULE_NAME, [">=2.4.0 <3"], (moduleExports) => { - const Pool = moduleExports.Pool; - if ((0, instrumentation_1.isWrapped)(Pool.prototype.acquire)) { - this._unwrap(Pool.prototype, "acquire"); - } - this._wrap(Pool.prototype, "acquire", this._acquireWithCallbacksPatcher.bind(this)); - return moduleExports; - }, (moduleExports) => { - const Pool = moduleExports.Pool; - this._unwrap(Pool.prototype, "acquire"); - return moduleExports; - }), - new instrumentation_1.InstrumentationNodeModuleDefinition(MODULE_NAME, [">=2.0.0 <2.4"], (moduleExports) => { - this._isDisabled = false; - if ((0, instrumentation_1.isWrapped)(moduleExports.Pool)) { - this._unwrap(moduleExports, "Pool"); - } - this._wrap(moduleExports, "Pool", this._poolWrapper.bind(this)); - return moduleExports; - }, (moduleExports) => { - this._isDisabled = true; - return moduleExports; - }) - ]; - } - _acquirePatcher(original) { - const instrumentation = this; - return function wrapped_acquire(...args) { - const parent = api4.context.active(); - const span = instrumentation.tracer.startSpan("generic-pool.acquire", {}, parent); - return api4.context.with(api4.trace.setSpan(parent, span), () => { - return original.call(this, ...args).then((value) => { - span.end(); - return value; - }, (err) => { - span.recordException(err); - span.end(); - throw err; - }); - }); - }; - } - _poolWrapper(original) { - const instrumentation = this; - return function wrapped_pool() { - const pool = original.apply(this, arguments); - instrumentation._wrap(pool, "acquire", instrumentation._acquireWithCallbacksPatcher.bind(instrumentation)); - return pool; - }; - } - _acquireWithCallbacksPatcher(original) { - const instrumentation = this; - return function wrapped_acquire(cb, priority) { - if (instrumentation._isDisabled) { - return original.call(this, cb, priority); - } - const parent = api4.context.active(); - const span = instrumentation.tracer.startSpan("generic-pool.acquire", {}, parent); - return api4.context.with(api4.trace.setSpan(parent, span), () => { - original.call(this, (err, client) => { - span.end(); - if (cb) { - return cb(err, client); - } - }, priority); - }); - }; - } - } - exports.GenericPoolInstrumentation = GenericPoolInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-generic-pool@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-generic-pool/build/src/index.js -var require_src22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GenericPoolInstrumentation = undefined; - var instrumentation_1 = require_instrumentation13(); - Object.defineProperty(exports, "GenericPoolInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.GenericPoolInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/enum.js -var require_enum = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanNames = exports.TokenKind = exports.AllowedOperationTypes = undefined; - var AllowedOperationTypes; - (function(AllowedOperationTypes2) { - AllowedOperationTypes2["QUERY"] = "query"; - AllowedOperationTypes2["MUTATION"] = "mutation"; - AllowedOperationTypes2["SUBSCRIPTION"] = "subscription"; - })(AllowedOperationTypes = exports.AllowedOperationTypes || (exports.AllowedOperationTypes = {})); - var TokenKind; - (function(TokenKind2) { - TokenKind2["SOF"] = ""; - TokenKind2["EOF"] = ""; - TokenKind2["BANG"] = "!"; - TokenKind2["DOLLAR"] = "$"; - TokenKind2["AMP"] = "&"; - TokenKind2["PAREN_L"] = "("; - TokenKind2["PAREN_R"] = ")"; - TokenKind2["SPREAD"] = "..."; - TokenKind2["COLON"] = ":"; - TokenKind2["EQUALS"] = "="; - TokenKind2["AT"] = "@"; - TokenKind2["BRACKET_L"] = "["; - TokenKind2["BRACKET_R"] = "]"; - TokenKind2["BRACE_L"] = "{"; - TokenKind2["PIPE"] = "|"; - TokenKind2["BRACE_R"] = "}"; - TokenKind2["NAME"] = "Name"; - TokenKind2["INT"] = "Int"; - TokenKind2["FLOAT"] = "Float"; - TokenKind2["STRING"] = "String"; - TokenKind2["BLOCK_STRING"] = "BlockString"; - TokenKind2["COMMENT"] = "Comment"; - })(TokenKind = exports.TokenKind || (exports.TokenKind = {})); - var SpanNames; - (function(SpanNames2) { - SpanNames2["EXECUTE"] = "graphql.execute"; - SpanNames2["PARSE"] = "graphql.parse"; - SpanNames2["RESOLVE"] = "graphql.resolve"; - SpanNames2["VALIDATE"] = "graphql.validate"; - SpanNames2["SCHEMA_VALIDATE"] = "graphql.validateSchema"; - SpanNames2["SCHEMA_PARSE"] = "graphql.parseSchema"; - })(SpanNames = exports.SpanNames || (exports.SpanNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/enums/AttributeNames.js -var require_AttributeNames5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["SOURCE"] = "graphql.source"; - AttributeNames2["FIELD_NAME"] = "graphql.field.name"; - AttributeNames2["FIELD_PATH"] = "graphql.field.path"; - AttributeNames2["FIELD_TYPE"] = "graphql.field.type"; - AttributeNames2["OPERATION_TYPE"] = "graphql.operation.type"; - AttributeNames2["OPERATION_NAME"] = "graphql.operation.name"; - AttributeNames2["VARIABLES"] = "graphql.variables."; - AttributeNames2["ERROR_VALIDATION_NAME"] = "graphql.validation.error"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/symbols.js -var require_symbols = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTEL_GRAPHQL_DATA_SYMBOL = exports.OTEL_PATCHED_SYMBOL = undefined; - exports.OTEL_PATCHED_SYMBOL = Symbol.for("opentelemetry.patched"); - exports.OTEL_GRAPHQL_DATA_SYMBOL = Symbol.for("opentelemetry.graphql_data"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/internal-types.js -var require_internal_types3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OPERATION_NOT_SUPPORTED = undefined; - var symbols_1 = require_symbols(); - exports.OPERATION_NOT_SUPPORTED = "Operation$operationName$not" + " supported"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/utils.js -var require_utils16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.wrapFieldResolver = exports.wrapFields = exports.getSourceFromLocation = exports.getOperation = exports.endSpan = exports.addSpanSource = exports.addInputVariableAttributes = exports.isPromise = undefined; - var api4 = require_src(); - var enum_1 = require_enum(); - var AttributeNames_1 = require_AttributeNames5(); - var symbols_1 = require_symbols(); - var OPERATION_VALUES = Object.values(enum_1.AllowedOperationTypes); - var isPromise = (value) => { - return typeof value?.then === "function"; - }; - exports.isPromise = isPromise; - var isObjectLike = (value) => { - return typeof value == "object" && value !== null; - }; - function addInputVariableAttribute(span, key, variable) { - if (Array.isArray(variable)) { - variable.forEach((value, idx) => { - addInputVariableAttribute(span, `${key}.${idx}`, value); - }); - } else if (variable instanceof Object) { - Object.entries(variable).forEach(([nestedKey, value]) => { - addInputVariableAttribute(span, `${key}.${nestedKey}`, value); - }); - } else { - span.setAttribute(`${AttributeNames_1.AttributeNames.VARIABLES}${String(key)}`, variable); - } - } - function addInputVariableAttributes(span, variableValues) { - Object.entries(variableValues).forEach(([key, value]) => { - addInputVariableAttribute(span, key, value); - }); - } - exports.addInputVariableAttributes = addInputVariableAttributes; - function addSpanSource(span, loc, allowValues, start, end) { - const source = getSourceFromLocation(loc, allowValues, start, end); - span.setAttribute(AttributeNames_1.AttributeNames.SOURCE, source); - } - exports.addSpanSource = addSpanSource; - function createFieldIfNotExists(tracer, getConfig, contextValue, info, path) { - let field = getField(contextValue, path); - let spanAdded = false; - if (!field) { - spanAdded = true; - const parent = getParentField(contextValue, path); - field = { - parent, - span: createResolverSpan(tracer, getConfig, contextValue, info, path, parent.span), - error: null - }; - addField(contextValue, path, field); - } - return { spanAdded, field }; - } - function createResolverSpan(tracer, getConfig, contextValue, info, path, parentSpan) { - const attributes = { - [AttributeNames_1.AttributeNames.FIELD_NAME]: info.fieldName, - [AttributeNames_1.AttributeNames.FIELD_PATH]: path.join("."), - [AttributeNames_1.AttributeNames.FIELD_TYPE]: info.returnType.toString() - }; - const span = tracer.startSpan(`${enum_1.SpanNames.RESOLVE} ${attributes[AttributeNames_1.AttributeNames.FIELD_PATH]}`, { - attributes - }, parentSpan ? api4.trace.setSpan(api4.context.active(), parentSpan) : undefined); - const document2 = contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL].source; - const fieldNode = info.fieldNodes.find((fieldNode2) => fieldNode2.kind === "Field"); - if (fieldNode) { - addSpanSource(span, document2.loc, getConfig().allowValues, fieldNode.loc?.start, fieldNode.loc?.end); - } - return span; - } - function endSpan(span, error48) { - if (error48) { - span.recordException(error48); - } - span.end(); - } - exports.endSpan = endSpan; - function getOperation(document2, operationName) { - if (!document2 || !Array.isArray(document2.definitions)) { - return; - } - if (operationName) { - return document2.definitions.filter((definition) => OPERATION_VALUES.indexOf(definition?.operation) !== -1).find((definition) => operationName === definition?.name?.value); - } else { - return document2.definitions.find((definition) => OPERATION_VALUES.indexOf(definition?.operation) !== -1); - } - } - exports.getOperation = getOperation; - function addField(contextValue, path, field) { - return contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join(".")] = field; - } - function getField(contextValue, path) { - return contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join(".")]; - } - function getParentField(contextValue, path) { - for (let i = path.length - 1;i > 0; i--) { - const field = getField(contextValue, path.slice(0, i)); - if (field) { - return field; - } - } - return { - span: contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL].span - }; - } - function pathToArray(mergeItems, path) { - const flattened = []; - let curr = path; - while (curr) { - let key = curr.key; - if (mergeItems && typeof key === "number") { - key = "*"; - } - flattened.push(String(key)); - curr = curr.prev; - } - return flattened.reverse(); - } - function repeatBreak(i) { - return repeatChar(` -`, i); - } - function repeatSpace(i) { - return repeatChar(" ", i); - } - function repeatChar(char, to) { - let text = ""; - for (let i = 0;i < to; i++) { - text += char; - } - return text; - } - var KindsToBeRemoved = [ - enum_1.TokenKind.FLOAT, - enum_1.TokenKind.STRING, - enum_1.TokenKind.INT, - enum_1.TokenKind.BLOCK_STRING - ]; - function getSourceFromLocation(loc, allowValues = false, inputStart, inputEnd) { - let source = ""; - if (loc?.startToken) { - const start = typeof inputStart === "number" ? inputStart : loc.start; - const end = typeof inputEnd === "number" ? inputEnd : loc.end; - let next = loc.startToken.next; - let previousLine = 1; - while (next) { - if (next.start < start) { - next = next.next; - previousLine = next?.line; - continue; - } - if (next.end > end) { - next = next.next; - previousLine = next?.line; - continue; - } - let value = next.value || next.kind; - let space = ""; - if (!allowValues && KindsToBeRemoved.indexOf(next.kind) >= 0) { - value = "*"; - } - if (next.kind === enum_1.TokenKind.STRING) { - value = `"${value}"`; - } - if (next.kind === enum_1.TokenKind.EOF) { - value = ""; - } - if (next.line > previousLine) { - source += repeatBreak(next.line - previousLine); - previousLine = next.line; - space = repeatSpace(next.column - 1); - } else { - if (next.line === next.prev?.line) { - space = repeatSpace(next.start - (next.prev?.end || 0)); - } - } - source += space + value; - if (next) { - next = next.next; - } - } - } - return source; - } - exports.getSourceFromLocation = getSourceFromLocation; - function wrapFields(type, tracer, getConfig) { - if (!type || type[symbols_1.OTEL_PATCHED_SYMBOL]) { - return; - } - const fields = type.getFields(); - type[symbols_1.OTEL_PATCHED_SYMBOL] = true; - Object.keys(fields).forEach((key) => { - const field = fields[key]; - if (!field) { - return; - } - if (field.resolve) { - field.resolve = wrapFieldResolver(tracer, getConfig, field.resolve); - } - if (field.type) { - const unwrappedTypes = unwrapType(field.type); - for (const unwrappedType of unwrappedTypes) { - wrapFields(unwrappedType, tracer, getConfig); - } - } - }); - } - exports.wrapFields = wrapFields; - function unwrapType(type) { - if ("ofType" in type) { - return unwrapType(type.ofType); - } - if (isGraphQLUnionType(type)) { - return type.getTypes(); - } - if (isGraphQLObjectType(type)) { - return [type]; - } - return []; - } - function isGraphQLUnionType(type) { - return "getTypes" in type && typeof type.getTypes === "function"; - } - function isGraphQLObjectType(type) { - return "getFields" in type && typeof type.getFields === "function"; - } - var handleResolveSpanError = (resolveSpan, err, shouldEndSpan) => { - if (!shouldEndSpan) { - return; - } - resolveSpan.recordException(err); - resolveSpan.setStatus({ - code: api4.SpanStatusCode.ERROR, - message: err.message - }); - resolveSpan.end(); - }; - var handleResolveSpanSuccess = (resolveSpan, shouldEndSpan) => { - if (!shouldEndSpan) { - return; - } - resolveSpan.end(); - }; - function wrapFieldResolver(tracer, getConfig, fieldResolver, isDefaultResolver = false) { - if (wrappedFieldResolver[symbols_1.OTEL_PATCHED_SYMBOL] || typeof fieldResolver !== "function") { - return fieldResolver; - } - function wrappedFieldResolver(source, args, contextValue, info) { - if (!fieldResolver) { - return; - } - const config2 = getConfig(); - if (config2.ignoreTrivialResolveSpans && isDefaultResolver && (isObjectLike(source) || typeof source === "function")) { - const property = source[info.fieldName]; - if (typeof property !== "function") { - return fieldResolver.call(this, source, args, contextValue, info); - } - } - if (!contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL]) { - return fieldResolver.call(this, source, args, contextValue, info); - } - const path = pathToArray(config2.mergeItems, info && info.path); - const depth = path.filter((item) => typeof item === "string").length; - let field; - let shouldEndSpan = false; - if (config2.depth >= 0 && config2.depth < depth) { - field = getParentField(contextValue, path); - } else { - const newField = createFieldIfNotExists(tracer, getConfig, contextValue, info, path); - field = newField.field; - shouldEndSpan = newField.spanAdded; - } - return api4.context.with(api4.trace.setSpan(api4.context.active(), field.span), () => { - try { - const res = fieldResolver.call(this, source, args, contextValue, info); - if ((0, exports.isPromise)(res)) { - return res.then((r) => { - handleResolveSpanSuccess(field.span, shouldEndSpan); - return r; - }, (err) => { - handleResolveSpanError(field.span, err, shouldEndSpan); - throw err; - }); - } else { - handleResolveSpanSuccess(field.span, shouldEndSpan); - return res; - } - } catch (err) { - handleResolveSpanError(field.span, err, shouldEndSpan); - throw err; - } - }); - } - wrappedFieldResolver[symbols_1.OTEL_PATCHED_SYMBOL] = true; - return wrappedFieldResolver; - } - exports.wrapFieldResolver = wrapFieldResolver; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/version.js -var require_version17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.55.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-graphql"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/instrumentation.js -var require_instrumentation14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GraphQLInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var enum_1 = require_enum(); - var AttributeNames_1 = require_AttributeNames5(); - var symbols_1 = require_symbols(); - var internal_types_1 = require_internal_types3(); - var utils_1 = require_utils16(); - var version_1 = require_version17(); - var DEFAULT_CONFIG = { - mergeItems: false, - depth: -1, - allowValues: false, - ignoreResolveSpans: false - }; - var supportedVersions = [">=14.0.0 <17"]; - - class GraphQLInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config2 }); - } - setConfig(config2 = {}) { - super.setConfig({ ...DEFAULT_CONFIG, ...config2 }); - } - init() { - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition("graphql", supportedVersions); - module2.files.push(this._addPatchingExecute()); - module2.files.push(this._addPatchingParser()); - module2.files.push(this._addPatchingValidate()); - return module2; - } - _addPatchingExecute() { - return new instrumentation_1.InstrumentationNodeModuleFile("graphql/execution/execute.js", supportedVersions, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.execute)) { - this._unwrap(moduleExports, "execute"); - } - this._wrap(moduleExports, "execute", this._patchExecute(moduleExports.defaultFieldResolver)); - return moduleExports; - }, (moduleExports) => { - if (moduleExports) { - this._unwrap(moduleExports, "execute"); - } - }); - } - _addPatchingParser() { - return new instrumentation_1.InstrumentationNodeModuleFile("graphql/language/parser.js", supportedVersions, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.parse)) { - this._unwrap(moduleExports, "parse"); - } - this._wrap(moduleExports, "parse", this._patchParse()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports) { - this._unwrap(moduleExports, "parse"); - } - }); - } - _addPatchingValidate() { - return new instrumentation_1.InstrumentationNodeModuleFile("graphql/validation/validate.js", supportedVersions, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.validate)) { - this._unwrap(moduleExports, "validate"); - } - this._wrap(moduleExports, "validate", this._patchValidate()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports) { - this._unwrap(moduleExports, "validate"); - } - }); - } - _patchExecute(defaultFieldResolved) { - const instrumentation = this; - return function execute(original) { - return function patchExecute() { - let processedArgs; - if (arguments.length >= 2) { - const args = arguments; - processedArgs = instrumentation._wrapExecuteArgs(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], defaultFieldResolved); - } else { - const args = arguments[0]; - processedArgs = instrumentation._wrapExecuteArgs(args.schema, args.document, args.rootValue, args.contextValue, args.variableValues, args.operationName, args.fieldResolver, args.typeResolver, defaultFieldResolved); - } - const operation = (0, utils_1.getOperation)(processedArgs.document, processedArgs.operationName); - const span = instrumentation._createExecuteSpan(operation, processedArgs); - processedArgs.contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL] = { - source: processedArgs.document ? processedArgs.document || processedArgs.document[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL] : undefined, - span, - fields: {} - }; - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return original.apply(this, [ - processedArgs - ]); - }, (err, result) => { - instrumentation._handleExecutionResult(span, err, result); - }); - }); - }; - }; - } - _handleExecutionResult(span, err, result) { - const config2 = this.getConfig(); - if (result === undefined || err) { - (0, utils_1.endSpan)(span, err); - return; - } - if ((0, utils_1.isPromise)(result)) { - result.then((resultData) => { - if (typeof config2.responseHook !== "function") { - (0, utils_1.endSpan)(span); - return; - } - this._executeResponseHook(span, resultData); - }, (error48) => { - (0, utils_1.endSpan)(span, error48); - }); - } else { - if (typeof config2.responseHook !== "function") { - (0, utils_1.endSpan)(span); - return; - } - this._executeResponseHook(span, result); - } - } - _executeResponseHook(span, result) { - const { responseHook } = this.getConfig(); - if (!responseHook) { - return; - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - responseHook(span, result); - }, (err) => { - if (err) { - this._diag.error("Error running response hook", err); - } - (0, utils_1.endSpan)(span, undefined); - }, true); - } - _patchParse() { - const instrumentation = this; - return function parse(original) { - return function patchParse(source, options) { - return instrumentation._parse(this, original, source, options); - }; - }; - } - _patchValidate() { - const instrumentation = this; - return function validate(original) { - return function patchValidate(schema, documentAST, rules, options, typeInfo) { - return instrumentation._validate(this, original, schema, documentAST, rules, typeInfo, options); - }; - }; - } - _parse(obj, original, source, options) { - const config2 = this.getConfig(); - const span = this.tracer.startSpan(enum_1.SpanNames.PARSE); - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return original.call(obj, source, options); - }, (err, result) => { - if (result) { - const operation = (0, utils_1.getOperation)(result); - if (!operation) { - span.updateName(enum_1.SpanNames.SCHEMA_PARSE); - } else if (result.loc) { - (0, utils_1.addSpanSource)(span, result.loc, config2.allowValues); - } - } - (0, utils_1.endSpan)(span, err); - }); - }); - } - _validate(obj, original, schema, documentAST, rules, typeInfo, options) { - const span = this.tracer.startSpan(enum_1.SpanNames.VALIDATE, {}); - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return original.call(obj, schema, documentAST, rules, options, typeInfo); - }, (err, errors3) => { - if (!documentAST.loc) { - span.updateName(enum_1.SpanNames.SCHEMA_VALIDATE); - } - if (errors3 && errors3.length) { - span.recordException({ - name: AttributeNames_1.AttributeNames.ERROR_VALIDATION_NAME, - message: JSON.stringify(errors3) - }); - } - (0, utils_1.endSpan)(span, err); - }); - }); - } - _createExecuteSpan(operation, processedArgs) { - const config2 = this.getConfig(); - const span = this.tracer.startSpan(enum_1.SpanNames.EXECUTE, {}); - if (operation) { - const { operation: operationType, name: nameNode } = operation; - span.setAttribute(AttributeNames_1.AttributeNames.OPERATION_TYPE, operationType); - const operationName = nameNode?.value; - if (operationName) { - span.setAttribute(AttributeNames_1.AttributeNames.OPERATION_NAME, operationName); - span.updateName(`${operationType} ${operationName}`); - } else { - span.updateName(operationType); - } - } else { - let operationName = " "; - if (processedArgs.operationName) { - operationName = ` "${processedArgs.operationName}" `; - } - operationName = internal_types_1.OPERATION_NOT_SUPPORTED.replace("$operationName$", operationName); - span.setAttribute(AttributeNames_1.AttributeNames.OPERATION_NAME, operationName); - } - if (processedArgs.document?.loc) { - (0, utils_1.addSpanSource)(span, processedArgs.document.loc, config2.allowValues); - } - if (processedArgs.variableValues && config2.allowValues) { - (0, utils_1.addInputVariableAttributes)(span, processedArgs.variableValues); - } - return span; - } - _wrapExecuteArgs(schema, document2, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver, defaultFieldResolved) { - if (!contextValue) { - contextValue = {}; - } - if (contextValue[symbols_1.OTEL_GRAPHQL_DATA_SYMBOL] || this.getConfig().ignoreResolveSpans) { - return { - schema, - document: document2, - rootValue, - contextValue, - variableValues, - operationName, - fieldResolver, - typeResolver - }; - } - const isUsingDefaultResolver = fieldResolver == null; - const fieldResolverForExecute = fieldResolver ?? defaultFieldResolved; - fieldResolver = (0, utils_1.wrapFieldResolver)(this.tracer, () => this.getConfig(), fieldResolverForExecute, isUsingDefaultResolver); - if (schema) { - (0, utils_1.wrapFields)(schema.getQueryType(), this.tracer, () => this.getConfig()); - (0, utils_1.wrapFields)(schema.getMutationType(), this.tracer, () => this.getConfig()); - } - return { - schema, - document: document2, - rootValue, - contextValue, - variableValues, - operationName, - fieldResolver, - typeResolver - }; - } - } - exports.GraphQLInstrumentation = GraphQLInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-graphql@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-graphql/build/src/index.js -var require_src23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GraphQLInstrumentation = undefined; - var instrumentation_1 = require_instrumentation14(); - Object.defineProperty(exports, "GraphQLInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.GraphQLInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/semconv.js -var require_semconv8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RPC_GRPC_STATUS_CODE_VALUE_OK = exports.ATTR_RPC_GRPC_STATUS_CODE = exports.ATTR_RPC_SYSTEM = exports.ATTR_RPC_SERVICE = exports.ATTR_RPC_METHOD = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = undefined; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.ATTR_RPC_METHOD = "rpc.method"; - exports.ATTR_RPC_SERVICE = "rpc.service"; - exports.ATTR_RPC_SYSTEM = "rpc.system"; - exports.ATTR_RPC_GRPC_STATUS_CODE = "rpc.grpc.status_code"; - exports.RPC_GRPC_STATUS_CODE_VALUE_OK = 0; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/utils.js -var require_utils17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.metadataCapture = exports._extractMethodAndService = exports._methodIsIgnored = exports._grpcStatusCodeToSpanStatus = exports._grpcStatusCodeToOpenTelemetryStatusCode = exports.URI_REGEX = undefined; - var api_1 = require_src(); - exports.URI_REGEX = /(?:([A-Za-z0-9+.-]+):(?:\/\/)?)?(?[A-Za-z0-9+.-]+):(?[0-9+.-]+)$/; - var _grpcStatusCodeToOpenTelemetryStatusCode = (status) => { - if (status !== undefined && status === 0) { - return api_1.SpanStatusCode.UNSET; - } - return api_1.SpanStatusCode.ERROR; - }; - exports._grpcStatusCodeToOpenTelemetryStatusCode = _grpcStatusCodeToOpenTelemetryStatusCode; - var _grpcStatusCodeToSpanStatus = (status) => { - return { code: (0, exports._grpcStatusCodeToOpenTelemetryStatusCode)(status) }; - }; - exports._grpcStatusCodeToSpanStatus = _grpcStatusCodeToSpanStatus; - var _satisfiesPattern = (methodName, pattern) => { - if (typeof pattern === "string") { - return pattern.toLowerCase() === methodName.toLowerCase(); - } else if (pattern instanceof RegExp) { - return pattern.test(methodName); - } else if (typeof pattern === "function") { - return pattern(methodName); - } else { - return false; - } - }; - var _methodIsIgnored = (methodName, ignoredMethods) => { - if (!ignoredMethods) { - return false; - } - for (const pattern of ignoredMethods) { - if (_satisfiesPattern(methodName, pattern)) { - return true; - } - } - return false; - }; - exports._methodIsIgnored = _methodIsIgnored; - var _extractMethodAndService = (name) => { - const serviceMethod = name.replace(/^\//, "").split("/"); - const service = serviceMethod.shift() || ""; - const method = serviceMethod.join("/"); - return { - service, - method - }; - }; - exports._extractMethodAndService = _extractMethodAndService; - function metadataCapture(type, metadataToAdd) { - const normalizedMetadataAttributes = new Map(metadataToAdd.map((value) => [ - value.toLowerCase(), - value.toLowerCase().replace(/-/g, "_") - ])); - return (span, metadata) => { - for (const [capturedMetadata, normalizedMetadata] of normalizedMetadataAttributes) { - const metadataValues = metadata.get(capturedMetadata).flatMap((value) => typeof value === "string" ? value.toString() : []); - if (metadataValues === undefined || metadataValues.length === 0) { - continue; - } - const key = `rpc.${type}.metadata.${normalizedMetadata}`; - span.setAttribute(key, metadataValues); - } - }; - } - exports.metadataCapture = metadataCapture; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/enums/AttributeNames.js -var require_AttributeNames6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - exports.AttributeNames = { - GRPC_ERROR_NAME: "grpc.error_name", - GRPC_ERROR_MESSAGE: "grpc.error_message" - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/serverUtils.js -var require_serverUtils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.shouldNotTraceServerCall = exports.handleUntracedServerFunction = exports.handleServerFunction = exports.CALL_SPAN_ENDED = undefined; - var node_events_1 = __require("events"); - var api_1 = require_src(); - var utils_1 = require_utils17(); - var AttributeNames_1 = require_AttributeNames6(); - var semconv_1 = require_semconv8(); - exports.CALL_SPAN_ENDED = Symbol("opentelemetry call span ended"); - function serverStreamAndBidiHandler(span, call, original) { - let spanEnded = false; - const endSpan = () => { - if (!spanEnded) { - spanEnded = true; - span.end(); - } - }; - api_1.context.bind(api_1.context.active(), call); - call.on("finish", () => { - if (call[exports.CALL_SPAN_ENDED]) { - return; - } - call[exports.CALL_SPAN_ENDED] = true; - span.setStatus({ - code: api_1.SpanStatusCode.UNSET - }); - span.setAttribute(semconv_1.ATTR_RPC_GRPC_STATUS_CODE, semconv_1.RPC_GRPC_STATUS_CODE_VALUE_OK); - endSpan(); - }); - call.on(node_events_1.errorMonitor, (err) => { - if (call[exports.CALL_SPAN_ENDED]) { - return; - } - call[exports.CALL_SPAN_ENDED] = true; - span.setStatus({ - code: (0, utils_1._grpcStatusCodeToOpenTelemetryStatusCode)(err.code), - message: err.message - }); - span.setAttributes({ - [AttributeNames_1.AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames_1.AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - [semconv_1.ATTR_RPC_GRPC_STATUS_CODE]: err.code - }); - endSpan(); - }); - return original.call({}, call); - } - function clientStreamAndUnaryHandler(span, call, callback, original) { - const patchedCallback = (err, value) => { - if (err) { - if (err.code) { - span.setStatus({ - code: (0, utils_1._grpcStatusCodeToOpenTelemetryStatusCode)(err.code), - message: err.message - }); - span.setAttribute(semconv_1.ATTR_RPC_GRPC_STATUS_CODE, err.code); - } - span.setAttributes({ - [AttributeNames_1.AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames_1.AttributeNames.GRPC_ERROR_MESSAGE]: err.message - }); - } else { - span.setStatus({ code: api_1.SpanStatusCode.UNSET }); - span.setAttribute(semconv_1.ATTR_RPC_GRPC_STATUS_CODE, semconv_1.RPC_GRPC_STATUS_CODE_VALUE_OK); - } - span.end(); - return callback(err, value); - }; - api_1.context.bind(api_1.context.active(), call); - return original.call({}, call, patchedCallback); - } - function handleServerFunction(span, type, originalFunc, call, callback) { - switch (type) { - case "unary": - case "clientStream": - case "client_stream": - return clientStreamAndUnaryHandler(span, call, callback, originalFunc); - case "serverStream": - case "server_stream": - case "bidi": - return serverStreamAndBidiHandler(span, call, originalFunc); - default: - break; - } - } - exports.handleServerFunction = handleServerFunction; - function handleUntracedServerFunction(type, originalFunc, call, callback) { - switch (type) { - case "unary": - case "clientStream": - case "client_stream": - return originalFunc.call({}, call, callback); - case "serverStream": - case "server_stream": - case "bidi": - return originalFunc.call({}, call); - default: - break; - } - } - exports.handleUntracedServerFunction = handleUntracedServerFunction; - function shouldNotTraceServerCall(methodName, ignoreGrpcMethods) { - const parsedName = methodName.split("/"); - return (0, utils_1._methodIsIgnored)(parsedName[parsedName.length - 1] || methodName, ignoreGrpcMethods); - } - exports.shouldNotTraceServerCall = shouldNotTraceServerCall; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/clientUtils.js -var require_clientUtils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.setSpanContext = exports.extractMetadataOrSpliceDefault = exports.extractMetadataOrSplice = exports.getMetadataIndex = exports.makeGrpcClientRemoteCall = exports.patchResponseStreamEvents = exports.patchResponseMetadataEvent = exports.patchedCallback = exports.getMethodsToWrap = undefined; - var api_1 = require_src(); - var AttributeNames_1 = require_AttributeNames6(); - var semconv_1 = require_semconv8(); - var utils_1 = require_utils17(); - var events_1 = __require("events"); - function getMethodsToWrap(client, methods) { - const methodList = []; - Object.entries(methods).forEach(([name, { originalName }]) => { - if (!(0, utils_1._methodIsIgnored)(name, this.getConfig().ignoreGrpcMethods)) { - methodList.push(name); - if (originalName && client.prototype.hasOwnProperty(originalName) && name !== originalName) { - methodList.push(originalName); - } - } - }); - return methodList; - } - exports.getMethodsToWrap = getMethodsToWrap; - function patchedCallback(span, callback) { - const wrappedFn = (err, res) => { - if (err) { - if (err.code) { - span.setStatus((0, utils_1._grpcStatusCodeToSpanStatus)(err.code)); - span.setAttribute(semconv_1.ATTR_RPC_GRPC_STATUS_CODE, err.code); - } - span.setAttributes({ - [AttributeNames_1.AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames_1.AttributeNames.GRPC_ERROR_MESSAGE]: err.message - }); - } else { - span.setAttribute(semconv_1.ATTR_RPC_GRPC_STATUS_CODE, semconv_1.RPC_GRPC_STATUS_CODE_VALUE_OK); - } - span.end(); - callback(err, res); - }; - return api_1.context.bind(api_1.context.active(), wrappedFn); - } - exports.patchedCallback = patchedCallback; - function patchResponseMetadataEvent(span, call, metadataCapture) { - call.on("metadata", (responseMetadata) => { - metadataCapture.client.captureResponseMetadata(span, responseMetadata); - }); - } - exports.patchResponseMetadataEvent = patchResponseMetadataEvent; - function patchResponseStreamEvents(span, call) { - let spanEnded = false; - const endSpan = () => { - if (!spanEnded) { - span.end(); - spanEnded = true; - } - }; - api_1.context.bind(api_1.context.active(), call); - call.on(events_1.errorMonitor, (err) => { - if (spanEnded) { - return; - } - span.setStatus({ - code: (0, utils_1._grpcStatusCodeToOpenTelemetryStatusCode)(err.code), - message: err.message - }); - span.setAttributes({ - [AttributeNames_1.AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames_1.AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - [semconv_1.ATTR_RPC_GRPC_STATUS_CODE]: err.code - }); - endSpan(); - }); - call.on("status", (status) => { - if (spanEnded) { - return; - } - span.setStatus((0, utils_1._grpcStatusCodeToSpanStatus)(status.code)); - span.setAttribute(semconv_1.ATTR_RPC_GRPC_STATUS_CODE, status.code); - endSpan(); - }); - } - exports.patchResponseStreamEvents = patchResponseStreamEvents; - function makeGrpcClientRemoteCall(metadataCapture, original, args, metadata, self2) { - return (span) => { - if (!original.responseStream) { - const callbackFuncIndex = args.findIndex((arg) => { - return typeof arg === "function"; - }); - if (callbackFuncIndex !== -1) { - args[callbackFuncIndex] = patchedCallback(span, args[callbackFuncIndex]); - } - } - setSpanContext(metadata); - const call = original.apply(self2, args); - call.on("metadata", (responseMetadata) => { - metadataCapture.client.captureResponseMetadata(span, responseMetadata); - }); - if (original.responseStream) { - patchResponseStreamEvents(span, call); - } - return call; - }; - } - exports.makeGrpcClientRemoteCall = makeGrpcClientRemoteCall; - function getMetadataIndex(args) { - return args.findIndex((arg) => { - return arg && typeof arg === "object" && arg["internalRepr"] && typeof arg.getMap === "function"; - }); - } - exports.getMetadataIndex = getMetadataIndex; - function extractMetadataOrSplice(grpcLib, args, spliceIndex) { - let metadata; - const metadataIndex = getMetadataIndex(args); - if (metadataIndex === -1) { - metadata = new grpcLib.Metadata; - args.splice(spliceIndex, 0, metadata); - } else { - metadata = args[metadataIndex]; - } - return metadata; - } - exports.extractMetadataOrSplice = extractMetadataOrSplice; - function extractMetadataOrSpliceDefault(grpcClient, original, args) { - return extractMetadataOrSplice(grpcClient, args, original.requestStream ? 0 : 1); - } - exports.extractMetadataOrSpliceDefault = extractMetadataOrSpliceDefault; - function setSpanContext(metadata) { - api_1.propagation.inject(api_1.context.active(), metadata, { - set: (meta3, k, v) => meta3.set(k, v) - }); - } - exports.setSpanContext = setSpanContext; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/enums/AttributeValues.js -var require_AttributeValues = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeValues = undefined; - exports.AttributeValues = { - RPC_SYSTEM: "grpc" - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/version.js -var require_version18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.207.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/instrumentation.js -var require_instrumentation15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GrpcInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv8(); - var serverUtils_1 = require_serverUtils(); - var clientUtils_1 = require_clientUtils(); - var utils_1 = require_utils17(); - var AttributeValues_1 = require_AttributeValues(); - var version_1 = require_version18(); - - class GrpcInstrumentation extends instrumentation_1.InstrumentationBase { - _metadataCapture; - _semconvStability; - constructor(config2 = {}) { - super("@opentelemetry/instrumentation-grpc", version_1.VERSION, config2); - this._metadataCapture = this._createMetadataCapture(); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("@grpc/grpc-js", ["^1.0.0"], (moduleExports) => { - this._wrap(moduleExports.Server.prototype, "register", this._patchServer()); - this._wrap(moduleExports, "makeGenericClientConstructor", this._patchClient(moduleExports)); - this._wrap(moduleExports, "makeClientConstructor", this._patchClient(moduleExports)); - this._wrap(moduleExports, "loadPackageDefinition", this._patchLoadPackageDefinition(moduleExports)); - this._wrap(moduleExports.Client.prototype, "makeUnaryRequest", this._patchClientRequestMethod(moduleExports, false)); - this._wrap(moduleExports.Client.prototype, "makeClientStreamRequest", this._patchClientRequestMethod(moduleExports, false)); - this._wrap(moduleExports.Client.prototype, "makeServerStreamRequest", this._patchClientRequestMethod(moduleExports, true)); - this._wrap(moduleExports.Client.prototype, "makeBidiStreamRequest", this._patchClientRequestMethod(moduleExports, true)); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.Server.prototype, "register"); - this._unwrap(moduleExports, "makeClientConstructor"); - this._unwrap(moduleExports, "makeGenericClientConstructor"); - this._unwrap(moduleExports, "loadPackageDefinition"); - this._unwrap(moduleExports.Client.prototype, "makeUnaryRequest"); - this._unwrap(moduleExports.Client.prototype, "makeClientStreamRequest"); - this._unwrap(moduleExports.Client.prototype, "makeServerStreamRequest"); - this._unwrap(moduleExports.Client.prototype, "makeBidiStreamRequest"); - }) - ]; - } - setConfig(config2 = {}) { - super.setConfig(config2); - this._metadataCapture = this._createMetadataCapture(); - } - _patchServer() { - const instrumentation = this; - return (originalRegister) => { - const config2 = this.getConfig(); - instrumentation._diag.debug("patched gRPC server"); - return function register(name, handler, serialize2, deserialize, type) { - const originalRegisterResult = originalRegister.call(this, name, handler, serialize2, deserialize, type); - const handlerSet = this["handlers"].get(name); - instrumentation._wrap(handlerSet, "func", (originalFunc) => { - return function func(call, callback) { - const self2 = this; - if ((0, serverUtils_1.shouldNotTraceServerCall)(name, config2.ignoreGrpcMethods)) { - return (0, serverUtils_1.handleUntracedServerFunction)(type, originalFunc, call, callback); - } - const spanName = `grpc.${name.replace("/", "")}`; - const spanOptions = { - kind: api_1.SpanKind.SERVER - }; - instrumentation._diag.debug(`patch func: ${JSON.stringify(spanOptions)}`); - api_1.context.with(api_1.propagation.extract(api_1.ROOT_CONTEXT, call.metadata, { - get: (carrier, key) => carrier.get(key).map(String), - keys: (carrier) => Object.keys(carrier.getMap()) - }), () => { - const { service, method } = (0, utils_1._extractMethodAndService)(name); - const span = instrumentation.tracer.startSpan(spanName, spanOptions).setAttributes({ - [semconv_1.ATTR_RPC_SYSTEM]: AttributeValues_1.AttributeValues.RPC_SYSTEM, - [semconv_1.ATTR_RPC_METHOD]: method, - [semconv_1.ATTR_RPC_SERVICE]: service - }); - instrumentation._metadataCapture.server.captureRequestMetadata(span, call.metadata); - instrumentation._wrap(call, "sendMetadata", (originalSendMetadata) => (responseMetadata) => { - instrumentation._metadataCapture.server.captureResponseMetadata(span, responseMetadata); - originalSendMetadata.call(call, responseMetadata); - }); - api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - serverUtils_1.handleServerFunction.call(self2, span, type, originalFunc, call, callback); - }); - }); - }; - }); - return originalRegisterResult; - }; - }; - } - _patchClientRequestMethod(grpcLib, hasResponseStream) { - const instrumentation = this; - return (original) => { - instrumentation._diag.debug("patched makeClientStreamRequest on grpc client"); - return function makeClientStreamRequest() { - const method = arguments[0]; - const { name, service, methodAttributeValue } = instrumentation._splitMethodString(method); - if (method != null && (0, utils_1._methodIsIgnored)(methodAttributeValue, instrumentation.getConfig().ignoreGrpcMethods)) { - return original.apply(this, [...arguments]); - } - const modifiedArgs = [...arguments]; - const metadata = (0, clientUtils_1.extractMetadataOrSplice)(grpcLib, modifiedArgs, 4); - const span = instrumentation.createClientSpan(name, methodAttributeValue, service, metadata); - instrumentation.extractNetMetadata(this, span, instrumentation._semconvStability); - if (!hasResponseStream) { - const lastArgIndex = modifiedArgs.length - 1; - const callback = modifiedArgs[lastArgIndex]; - if (typeof callback === "function") { - modifiedArgs[lastArgIndex] = (0, clientUtils_1.patchedCallback)(span, callback); - } - } - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - (0, clientUtils_1.setSpanContext)(metadata); - const call = original.apply(this, [...modifiedArgs]); - (0, clientUtils_1.patchResponseMetadataEvent)(span, call, instrumentation._metadataCapture); - if (hasResponseStream) { - (0, clientUtils_1.patchResponseStreamEvents)(span, call); - } - return call; - }); - }; - }; - } - _patchClient(grpcClient) { - const instrumentation = this; - return (original) => { - instrumentation._diag.debug("patching client"); - return function makeClientConstructor(methods, serviceName, options) { - const client = original.call(this, methods, serviceName, options); - instrumentation._massWrap(client.prototype, clientUtils_1.getMethodsToWrap.call(instrumentation, client, methods), instrumentation._getPatchedClientMethods(grpcClient)); - return client; - }; - }; - } - _patchLoadPackageDefinition(grpcClient) { - const instrumentation = this; - instrumentation._diag.debug("patching loadPackageDefinition"); - return (original) => { - return function patchedLoadPackageDefinition(packageDef) { - const result = original.call(this, packageDef); - instrumentation._patchLoadedPackage(grpcClient, result); - return result; - }; - }; - } - _getPatchedClientMethods(grpcClient) { - const instrumentation = this; - return (original) => { - instrumentation._diag.debug("patch all client methods"); - function clientMethodTrace() { - const name = `grpc.${original.path.replace("/", "")}`; - const args = [...arguments]; - const metadata = clientUtils_1.extractMetadataOrSpliceDefault.call(instrumentation, grpcClient, original, args); - const { service, method } = (0, utils_1._extractMethodAndService)(original.path); - const span = instrumentation.tracer.startSpan(name, { kind: api_1.SpanKind.CLIENT }).setAttributes({ - [semconv_1.ATTR_RPC_SYSTEM]: "grpc", - [semconv_1.ATTR_RPC_METHOD]: method, - [semconv_1.ATTR_RPC_SERVICE]: service - }); - instrumentation.extractNetMetadata(this, span, instrumentation._semconvStability); - instrumentation._metadataCapture.client.captureRequestMetadata(span, metadata); - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => (0, clientUtils_1.makeGrpcClientRemoteCall)(instrumentation._metadataCapture, original, args, metadata, this)(span)); - } - Object.assign(clientMethodTrace, original); - return clientMethodTrace; - }; - } - _splitMethodString(method) { - if (method == null) { - return { name: "", service: "", methodAttributeValue: "" }; - } - const name = `grpc.${method.replace("/", "")}`; - const { service, method: methodAttributeValue } = (0, utils_1._extractMethodAndService)(method); - return { name, service, methodAttributeValue }; - } - createClientSpan(name, methodAttributeValue, service, metadata) { - const span = this.tracer.startSpan(name, { kind: api_1.SpanKind.CLIENT }).setAttributes({ - [semconv_1.ATTR_RPC_SYSTEM]: "grpc", - [semconv_1.ATTR_RPC_METHOD]: methodAttributeValue, - [semconv_1.ATTR_RPC_SERVICE]: service - }); - if (metadata != null) { - this._metadataCapture.client.captureRequestMetadata(span, metadata); - } - return span; - } - extractNetMetadata(client, span, semconvStability) { - const parsedUri = utils_1.URI_REGEX.exec(client.getChannel().getTarget()); - const hostname3 = parsedUri?.groups?.name; - const port = parseInt(parsedUri?.groups?.port ?? ""); - const oldAttributes = { - [semconv_1.ATTR_NET_PEER_NAME]: hostname3, - [semconv_1.ATTR_NET_PEER_PORT]: port - }; - const newAttributes = { - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: hostname3, - [semantic_conventions_1.ATTR_SERVER_PORT]: port - }; - switch (semconvStability) { - case instrumentation_1.SemconvStability.STABLE: - span.setAttributes(newAttributes); - break; - case instrumentation_1.SemconvStability.OLD: - span.setAttributes(oldAttributes); - break; - case instrumentation_1.SemconvStability.DUPLICATE: - span.setAttributes({ ...oldAttributes, ...newAttributes }); - break; - default: - span.setAttributes(oldAttributes); - } - } - _patchLoadedPackage(grpcClient, result) { - Object.values(result).forEach((service) => { - if (typeof service === "function") { - this._massWrap(service.prototype, clientUtils_1.getMethodsToWrap.call(this, service, service.service), this._getPatchedClientMethods.call(this, grpcClient)); - } else if (typeof service.format !== "string") { - this._patchLoadedPackage.call(this, grpcClient, service); - } - }); - } - _createMetadataCapture() { - const config2 = this.getConfig(); - return { - client: { - captureRequestMetadata: (0, utils_1.metadataCapture)("request", config2.metadataToSpanAttributes?.client?.requestMetadata ?? []), - captureResponseMetadata: (0, utils_1.metadataCapture)("response", config2.metadataToSpanAttributes?.client?.responseMetadata ?? []) - }, - server: { - captureRequestMetadata: (0, utils_1.metadataCapture)("request", config2.metadataToSpanAttributes?.server?.requestMetadata ?? []), - captureResponseMetadata: (0, utils_1.metadataCapture)("response", config2.metadataToSpanAttributes?.server?.responseMetadata ?? []) - } - }; - } - } - exports.GrpcInstrumentation = GrpcInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-grpc/build/src/index.js -var require_src24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GrpcInstrumentation = undefined; - var instrumentation_1 = require_instrumentation15(); - Object.defineProperty(exports, "GrpcInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.GrpcInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/version.js -var require_version19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-hapi"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/internal-types.js -var require_internal_types4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HapiLifecycleMethodNames = exports.HapiLayerType = exports.handlerPatched = exports.HapiComponentName = undefined; - exports.HapiComponentName = "@hapi/hapi"; - exports.handlerPatched = Symbol("hapi-handler-patched"); - exports.HapiLayerType = { - ROUTER: "router", - PLUGIN: "plugin", - EXT: "server.ext" - }; - exports.HapiLifecycleMethodNames = new Set([ - "onPreAuth", - "onCredentials", - "onPostAuth", - "onPreHandler", - "onPostHandler", - "onPreResponse", - "onRequest" - ]); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/semconv.js -var require_semconv9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_HTTP_METHOD = undefined; - exports.ATTR_HTTP_METHOD = "http.method"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/enums/AttributeNames.js -var require_AttributeNames7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["HAPI_TYPE"] = "hapi.type"; - AttributeNames2["PLUGIN_NAME"] = "hapi.plugin.name"; - AttributeNames2["EXT_TYPE"] = "server.ext.type"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/utils.js -var require_utils18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getPluginFromInput = exports.getExtMetadata = exports.getRouteMetadata = exports.isPatchableExtMethod = exports.isDirectExtInput = exports.isLifecycleExtEventObj = exports.isLifecycleExtType = exports.getPluginName = undefined; - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv9(); - var internal_types_1 = require_internal_types4(); - var AttributeNames_1 = require_AttributeNames7(); - var instrumentation_1 = require_src9(); - function getPluginName(plugin) { - if (plugin.name) { - return plugin.name; - } else { - return plugin.pkg.name; - } - } - exports.getPluginName = getPluginName; - var isLifecycleExtType = (variableToCheck) => { - return typeof variableToCheck === "string" && internal_types_1.HapiLifecycleMethodNames.has(variableToCheck); - }; - exports.isLifecycleExtType = isLifecycleExtType; - var isLifecycleExtEventObj = (variableToCheck) => { - const event = variableToCheck?.type; - return event !== undefined && (0, exports.isLifecycleExtType)(event); - }; - exports.isLifecycleExtEventObj = isLifecycleExtEventObj; - var isDirectExtInput = (variableToCheck) => { - return Array.isArray(variableToCheck) && variableToCheck.length <= 3 && (0, exports.isLifecycleExtType)(variableToCheck[0]) && typeof variableToCheck[1] === "function"; - }; - exports.isDirectExtInput = isDirectExtInput; - var isPatchableExtMethod = (variableToCheck) => { - return !Array.isArray(variableToCheck); - }; - exports.isPatchableExtMethod = isPatchableExtMethod; - var getRouteMetadata = (route, semconvStability, pluginName) => { - const attributes = { - [semantic_conventions_1.ATTR_HTTP_ROUTE]: route.path - }; - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - attributes[semconv_1.ATTR_HTTP_METHOD] = route.method; - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes[semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD] = route.method; - } - let name; - if (pluginName) { - attributes[AttributeNames_1.AttributeNames.HAPI_TYPE] = internal_types_1.HapiLayerType.PLUGIN; - attributes[AttributeNames_1.AttributeNames.PLUGIN_NAME] = pluginName; - name = `${pluginName}: route - ${route.path}`; - } else { - attributes[AttributeNames_1.AttributeNames.HAPI_TYPE] = internal_types_1.HapiLayerType.ROUTER; - name = `route - ${route.path}`; - } - return { attributes, name }; - }; - exports.getRouteMetadata = getRouteMetadata; - var getExtMetadata = (extPoint, pluginName) => { - if (pluginName) { - return { - attributes: { - [AttributeNames_1.AttributeNames.EXT_TYPE]: extPoint, - [AttributeNames_1.AttributeNames.HAPI_TYPE]: internal_types_1.HapiLayerType.EXT, - [AttributeNames_1.AttributeNames.PLUGIN_NAME]: pluginName - }, - name: `${pluginName}: ext - ${extPoint}` - }; - } - return { - attributes: { - [AttributeNames_1.AttributeNames.EXT_TYPE]: extPoint, - [AttributeNames_1.AttributeNames.HAPI_TYPE]: internal_types_1.HapiLayerType.EXT - }, - name: `ext - ${extPoint}` - }; - }; - exports.getExtMetadata = getExtMetadata; - var getPluginFromInput = (pluginObj) => { - if ("plugin" in pluginObj) { - if ("plugin" in pluginObj.plugin) { - return pluginObj.plugin.plugin; - } - return pluginObj.plugin; - } - return pluginObj; - }; - exports.getPluginFromInput = getPluginFromInput; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/instrumentation.js -var require_instrumentation16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HapiInstrumentation = undefined; - var api4 = require_src(); - var core_1 = require_src7(); - var instrumentation_1 = require_src9(); - var version_1 = require_version19(); - var internal_types_1 = require_internal_types4(); - var utils_1 = require_utils18(); - - class HapiInstrumentation extends instrumentation_1.InstrumentationBase { - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - return new instrumentation_1.InstrumentationNodeModuleDefinition(internal_types_1.HapiComponentName, [">=17.0.0 <22"], (module2) => { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - if (!(0, instrumentation_1.isWrapped)(moduleExports.server)) { - this._wrap(moduleExports, "server", this._getServerPatch.bind(this)); - } - if (!(0, instrumentation_1.isWrapped)(moduleExports.Server)) { - this._wrap(moduleExports, "Server", this._getServerPatch.bind(this)); - } - return moduleExports; - }, (module2) => { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - this._massUnwrap([moduleExports], ["server", "Server"]); - }); - } - _getServerPatch(original) { - const instrumentation = this; - const self2 = this; - return function server(opts) { - const newServer = original.apply(this, [opts]); - self2._wrap(newServer, "route", (originalRouter) => { - return instrumentation._getServerRoutePatch.bind(instrumentation)(originalRouter); - }); - self2._wrap(newServer, "ext", (originalExtHandler) => { - return instrumentation._getServerExtPatch.bind(instrumentation)(originalExtHandler); - }); - self2._wrap(newServer, "register", instrumentation._getServerRegisterPatch.bind(instrumentation)); - return newServer; - }; - } - _getServerRegisterPatch(original) { - const instrumentation = this; - return function register(pluginInput, options) { - if (Array.isArray(pluginInput)) { - for (const pluginObj of pluginInput) { - const plugin = (0, utils_1.getPluginFromInput)(pluginObj); - instrumentation._wrapRegisterHandler(plugin); - } - } else { - const plugin = (0, utils_1.getPluginFromInput)(pluginInput); - instrumentation._wrapRegisterHandler(plugin); - } - return original.apply(this, [pluginInput, options]); - }; - } - _getServerExtPatch(original, pluginName) { - const instrumentation = this; - return function ext(...args) { - if (Array.isArray(args[0])) { - const eventsList = args[0]; - for (let i = 0;i < eventsList.length; i++) { - const eventObj = eventsList[i]; - if ((0, utils_1.isLifecycleExtType)(eventObj.type)) { - const lifecycleEventObj = eventObj; - const handler = instrumentation._wrapExtMethods(lifecycleEventObj.method, eventObj.type, pluginName); - lifecycleEventObj.method = handler; - eventsList[i] = lifecycleEventObj; - } - } - return original.apply(this, args); - } else if ((0, utils_1.isDirectExtInput)(args)) { - const extInput = args; - const method = extInput[1]; - const handler = instrumentation._wrapExtMethods(method, extInput[0], pluginName); - return original.apply(this, [extInput[0], handler, extInput[2]]); - } else if ((0, utils_1.isLifecycleExtEventObj)(args[0])) { - const lifecycleEventObj = args[0]; - const handler = instrumentation._wrapExtMethods(lifecycleEventObj.method, lifecycleEventObj.type, pluginName); - lifecycleEventObj.method = handler; - return original.call(this, lifecycleEventObj); - } - return original.apply(this, args); - }; - } - _getServerRoutePatch(original, pluginName) { - const instrumentation = this; - return function route(route) { - if (Array.isArray(route)) { - for (let i = 0;i < route.length; i++) { - const newRoute = instrumentation._wrapRouteHandler.call(instrumentation, route[i], pluginName); - route[i] = newRoute; - } - } else { - route = instrumentation._wrapRouteHandler.call(instrumentation, route, pluginName); - } - return original.apply(this, [route]); - }; - } - _wrapRegisterHandler(plugin) { - const instrumentation = this; - const pluginName = (0, utils_1.getPluginName)(plugin); - const oldRegister = plugin.register; - const self2 = this; - const newRegisterHandler = function(server, options) { - self2._wrap(server, "route", (original) => { - return instrumentation._getServerRoutePatch.bind(instrumentation)(original, pluginName); - }); - self2._wrap(server, "ext", (originalExtHandler) => { - return instrumentation._getServerExtPatch.bind(instrumentation)(originalExtHandler, pluginName); - }); - return oldRegister.call(this, server, options); - }; - plugin.register = newRegisterHandler; - } - _wrapExtMethods(method, extPoint, pluginName) { - const instrumentation = this; - if (method instanceof Array) { - for (let i = 0;i < method.length; i++) { - method[i] = instrumentation._wrapExtMethods(method[i], extPoint); - } - return method; - } else if ((0, utils_1.isPatchableExtMethod)(method)) { - if (method[internal_types_1.handlerPatched] === true) - return method; - method[internal_types_1.handlerPatched] = true; - const newHandler = async function(...params) { - if (api4.trace.getSpan(api4.context.active()) === undefined) { - return await method.apply(this, params); - } - const metadata = (0, utils_1.getExtMetadata)(extPoint, pluginName); - const span = instrumentation.tracer.startSpan(metadata.name, { - attributes: metadata.attributes - }); - try { - return await api4.context.with(api4.trace.setSpan(api4.context.active(), span), method, undefined, ...params); - } catch (err) { - span.recordException(err); - span.setStatus({ - code: api4.SpanStatusCode.ERROR, - message: err.message - }); - throw err; - } finally { - span.end(); - } - }; - return newHandler; - } - return method; - } - _wrapRouteHandler(route, pluginName) { - const instrumentation = this; - if (route[internal_types_1.handlerPatched] === true) - return route; - route[internal_types_1.handlerPatched] = true; - const wrapHandler = (oldHandler) => { - return async function(...params) { - if (api4.trace.getSpan(api4.context.active()) === undefined) { - return await oldHandler.call(this, ...params); - } - const rpcMetadata = (0, core_1.getRPCMetadata)(api4.context.active()); - if (rpcMetadata?.type === core_1.RPCType.HTTP) { - rpcMetadata.route = route.path; - } - const metadata = (0, utils_1.getRouteMetadata)(route, instrumentation._semconvStability, pluginName); - const span = instrumentation.tracer.startSpan(metadata.name, { - attributes: metadata.attributes - }); - try { - return await api4.context.with(api4.trace.setSpan(api4.context.active(), span), () => oldHandler.call(this, ...params)); - } catch (err) { - span.recordException(err); - span.setStatus({ - code: api4.SpanStatusCode.ERROR, - message: err.message - }); - throw err; - } finally { - span.end(); - } - }; - }; - if (typeof route.handler === "function") { - route.handler = wrapHandler(route.handler); - } else if (typeof route.options === "function") { - const oldOptions = route.options; - route.options = function(server) { - const options = oldOptions(server); - if (typeof options.handler === "function") { - options.handler = wrapHandler(options.handler); - } - return options; - }; - } else if (typeof route.options?.handler === "function") { - route.options.handler = wrapHandler(route.options.handler); - } - return route; - } - } - exports.HapiInstrumentation = HapiInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-hapi@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-hapi/build/src/index.js -var require_src25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = exports.HapiInstrumentation = undefined; - var instrumentation_1 = require_instrumentation16(); - Object.defineProperty(exports, "HapiInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.HapiInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames7(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/version.js -var require_version20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.207.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/semconv.js -var require_semconv10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HTTP_FLAVOR_VALUE_HTTP_1_1 = exports.NET_TRANSPORT_VALUE_IP_UDP = exports.NET_TRANSPORT_VALUE_IP_TCP = exports.ATTR_NET_TRANSPORT = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_NET_PEER_IP = exports.ATTR_NET_HOST_PORT = exports.ATTR_NET_HOST_NAME = exports.ATTR_NET_HOST_IP = exports.ATTR_HTTP_USER_AGENT = exports.ATTR_HTTP_URL = exports.ATTR_HTTP_TARGET = exports.ATTR_HTTP_STATUS_CODE = exports.ATTR_HTTP_SERVER_NAME = exports.ATTR_HTTP_SCHEME = exports.ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED = exports.ATTR_HTTP_RESPONSE_CONTENT_LENGTH = exports.ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED = exports.ATTR_HTTP_REQUEST_CONTENT_LENGTH = exports.ATTR_HTTP_METHOD = exports.ATTR_HTTP_HOST = exports.ATTR_HTTP_FLAVOR = exports.ATTR_HTTP_CLIENT_IP = exports.USER_AGENT_SYNTHETIC_TYPE_VALUE_TEST = exports.USER_AGENT_SYNTHETIC_TYPE_VALUE_BOT = exports.ATTR_USER_AGENT_SYNTHETIC_TYPE = undefined; - exports.ATTR_USER_AGENT_SYNTHETIC_TYPE = "user_agent.synthetic.type"; - exports.USER_AGENT_SYNTHETIC_TYPE_VALUE_BOT = "bot"; - exports.USER_AGENT_SYNTHETIC_TYPE_VALUE_TEST = "test"; - exports.ATTR_HTTP_CLIENT_IP = "http.client_ip"; - exports.ATTR_HTTP_FLAVOR = "http.flavor"; - exports.ATTR_HTTP_HOST = "http.host"; - exports.ATTR_HTTP_METHOD = "http.method"; - exports.ATTR_HTTP_REQUEST_CONTENT_LENGTH = "http.request_content_length"; - exports.ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED = "http.request_content_length_uncompressed"; - exports.ATTR_HTTP_RESPONSE_CONTENT_LENGTH = "http.response_content_length"; - exports.ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED = "http.response_content_length_uncompressed"; - exports.ATTR_HTTP_SCHEME = "http.scheme"; - exports.ATTR_HTTP_SERVER_NAME = "http.server_name"; - exports.ATTR_HTTP_STATUS_CODE = "http.status_code"; - exports.ATTR_HTTP_TARGET = "http.target"; - exports.ATTR_HTTP_URL = "http.url"; - exports.ATTR_HTTP_USER_AGENT = "http.user_agent"; - exports.ATTR_NET_HOST_IP = "net.host.ip"; - exports.ATTR_NET_HOST_NAME = "net.host.name"; - exports.ATTR_NET_HOST_PORT = "net.host.port"; - exports.ATTR_NET_PEER_IP = "net.peer.ip"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.ATTR_NET_TRANSPORT = "net.transport"; - exports.NET_TRANSPORT_VALUE_IP_TCP = "ip_tcp"; - exports.NET_TRANSPORT_VALUE_IP_UDP = "ip_udp"; - exports.HTTP_FLAVOR_VALUE_HTTP_1_1 = "1.1"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/enums/AttributeNames.js -var require_AttributeNames8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["HTTP_ERROR_NAME"] = "http.error_name"; - AttributeNames2["HTTP_ERROR_MESSAGE"] = "http.error_message"; - AttributeNames2["HTTP_STATUS_TEXT"] = "http.status_text"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/internal-types.js -var require_internal_types5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_QUERY_STRINGS_TO_REDACT = exports.STR_REDACTED = exports.SYNTHETIC_BOT_NAMES = exports.SYNTHETIC_TEST_NAMES = undefined; - exports.SYNTHETIC_TEST_NAMES = ["alwayson"]; - exports.SYNTHETIC_BOT_NAMES = ["googlebot", "bingbot"]; - exports.STR_REDACTED = "REDACTED"; - exports.DEFAULT_QUERY_STRINGS_TO_REDACT = [ - "sig", - "Signature", - "AWSAccessKeyId", - "X-Goog-Signature" - ]; -}); - -// ../../../../node_modules/.bun/forwarded-parse@2.1.2/node_modules/forwarded-parse/lib/error.js -var require_error = __commonJS((exports, module) => { - var util3 = __require("util"); - function ParseError(message, input) { - Error.captureStackTrace(this, ParseError); - this.name = this.constructor.name; - this.message = message; - this.input = input; - } - util3.inherits(ParseError, Error); - module.exports = ParseError; -}); - -// ../../../../node_modules/.bun/forwarded-parse@2.1.2/node_modules/forwarded-parse/lib/ascii.js -var require_ascii = __commonJS((exports, module) => { - function isDelimiter(code) { - return code === 34 || code === 40 || code === 41 || code === 44 || code === 47 || code >= 58 && code <= 64 || code >= 91 && code <= 93 || code === 123 || code === 125; - } - function isTokenChar(code) { - return code === 33 || code >= 35 && code <= 39 || code === 42 || code === 43 || code === 45 || code === 46 || code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 94 && code <= 122 || code === 124 || code === 126; - } - function isPrint(code) { - return code >= 32 && code <= 126; - } - function isExtended(code) { - return code >= 128 && code <= 255; - } - module.exports = { - isDelimiter, - isTokenChar, - isExtended, - isPrint - }; -}); - -// ../../../../node_modules/.bun/forwarded-parse@2.1.2/node_modules/forwarded-parse/index.js -var require_forwarded_parse = __commonJS((exports, module) => { - var util3 = __require("util"); - var ParseError = require_error(); - var ascii = require_ascii(); - var isDelimiter = ascii.isDelimiter; - var isTokenChar = ascii.isTokenChar; - var isExtended = ascii.isExtended; - var isPrint = ascii.isPrint; - function decode3(str) { - return str.replace(/\\(.)/g, "$1"); - } - function unexpectedCharacterMessage(header, position) { - return util3.format("Unexpected character '%s' at index %d", header.charAt(position), position); - } - function parse6(header) { - var mustUnescape = false; - var isEscaping = false; - var inQuotes = false; - var forwarded = {}; - var output = []; - var start = -1; - var end = -1; - var parameter; - var code; - for (var i = 0;i < header.length; i++) { - code = header.charCodeAt(i); - if (parameter === undefined) { - if (i !== 0 && start === -1 && (code === 32 || code === 9)) { - continue; - } - if (isTokenChar(code)) { - if (start === -1) - start = i; - } else if (code === 61 && start !== -1) { - parameter = header.slice(start, i).toLowerCase(); - start = -1; - } else { - throw new ParseError(unexpectedCharacterMessage(header, i), header); - } - } else { - if (isEscaping && (code === 9 || isPrint(code) || isExtended(code))) { - isEscaping = false; - } else if (isTokenChar(code)) { - if (end !== -1) { - throw new ParseError(unexpectedCharacterMessage(header, i), header); - } - if (start === -1) - start = i; - } else if (isDelimiter(code) || isExtended(code)) { - if (inQuotes) { - if (code === 34) { - inQuotes = false; - end = i; - } else if (code === 92) { - if (start === -1) - start = i; - isEscaping = mustUnescape = true; - } else if (start === -1) { - start = i; - } - } else if (code === 34 && header.charCodeAt(i - 1) === 61) { - inQuotes = true; - } else if ((code === 44 || code === 59) && (start !== -1 || end !== -1)) { - if (start !== -1) { - if (end === -1) - end = i; - forwarded[parameter] = mustUnescape ? decode3(header.slice(start, end)) : header.slice(start, end); - } else { - forwarded[parameter] = ""; - } - if (code === 44) { - output.push(forwarded); - forwarded = {}; - } - parameter = undefined; - start = end = -1; - } else { - throw new ParseError(unexpectedCharacterMessage(header, i), header); - } - } else if (code === 32 || code === 9) { - if (end !== -1) - continue; - if (inQuotes) { - if (start === -1) - start = i; - } else if (start !== -1) { - end = i; - } else { - throw new ParseError(unexpectedCharacterMessage(header, i), header); - } - } else { - throw new ParseError(unexpectedCharacterMessage(header, i), header); - } - } - } - if (parameter === undefined || inQuotes || start === -1 && end === -1 || code === 32 || code === 9) { - throw new ParseError("Unexpected end of input", header); - } - if (start !== -1) { - if (end === -1) - end = i; - forwarded[parameter] = mustUnescape ? decode3(header.slice(start, end)) : header.slice(start, end); - } else { - forwarded[parameter] = ""; - } - output.push(forwarded); - return output; - } - module.exports = parse6; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/utils.js -var require_utils19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.headerCapture = exports.getIncomingStableRequestMetricAttributesOnResponse = exports.getIncomingRequestMetricAttributesOnResponse = exports.getIncomingRequestAttributesOnResponse = exports.getIncomingRequestMetricAttributes = exports.getIncomingRequestAttributes = exports.getRemoteClientAddress = exports.getOutgoingStableRequestMetricAttributesOnResponse = exports.getOutgoingRequestMetricAttributesOnResponse = exports.getOutgoingRequestAttributesOnResponse = exports.setAttributesFromHttpKind = exports.getOutgoingRequestMetricAttributes = exports.getOutgoingRequestAttributes = exports.extractHostnameAndPort = exports.isValidOptionsType = exports.getRequestInfo = exports.isCompressed = exports.setResponseContentLengthAttribute = exports.setRequestContentLengthAttribute = exports.setSpanWithError = exports.satisfiesPattern = exports.parseResponseStatus = exports.getAbsoluteUrl = undefined; - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv10(); - var core_1 = require_src7(); - var instrumentation_1 = require_src9(); - var url2 = __require("url"); - var AttributeNames_1 = require_AttributeNames8(); - var internal_types_1 = require_internal_types5(); - var internal_types_2 = require_internal_types5(); - var forwardedParse = require_forwarded_parse(); - var getAbsoluteUrl = (requestUrl, headers, fallbackProtocol = "http:", redactedQueryParams = Array.from(internal_types_2.DEFAULT_QUERY_STRINGS_TO_REDACT)) => { - const reqUrlObject = requestUrl || {}; - const protocol = reqUrlObject.protocol || fallbackProtocol; - const port = (reqUrlObject.port || "").toString(); - let path = reqUrlObject.path || "/"; - let host = reqUrlObject.host || reqUrlObject.hostname || headers.host || "localhost"; - if (host.indexOf(":") === -1 && port && port !== "80" && port !== "443") { - host += `:${port}`; - } - if (path.includes("?")) { - const parsedUrl = url2.parse(path); - const pathname = parsedUrl.pathname || ""; - const query = parsedUrl.query || ""; - const searchParams = new URLSearchParams(query); - const sensitiveParamsToRedact = redactedQueryParams || []; - for (const sensitiveParam of sensitiveParamsToRedact) { - if (searchParams.has(sensitiveParam) && searchParams.get(sensitiveParam) !== "") { - searchParams.set(sensitiveParam, internal_types_2.STR_REDACTED); - } - } - const redactedQuery = searchParams.toString(); - path = `${pathname}?${redactedQuery}`; - } - const authPart = reqUrlObject.auth ? `${internal_types_2.STR_REDACTED}:${internal_types_2.STR_REDACTED}@` : ""; - return `${protocol}//${authPart}${host}${path}`; - }; - exports.getAbsoluteUrl = getAbsoluteUrl; - var parseResponseStatus = (kind, statusCode) => { - const upperBound = kind === api_1.SpanKind.CLIENT ? 400 : 500; - if (statusCode && statusCode >= 100 && statusCode < upperBound) { - return api_1.SpanStatusCode.UNSET; - } - return api_1.SpanStatusCode.ERROR; - }; - exports.parseResponseStatus = parseResponseStatus; - var satisfiesPattern = (constant, pattern) => { - if (typeof pattern === "string") { - return pattern === constant; - } else if (pattern instanceof RegExp) { - return pattern.test(constant); - } else if (typeof pattern === "function") { - return pattern(constant); - } else { - throw new TypeError("Pattern is in unsupported datatype"); - } - }; - exports.satisfiesPattern = satisfiesPattern; - var setSpanWithError = (span, error48, semconvStability) => { - const message = error48.message; - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - span.setAttribute(AttributeNames_1.AttributeNames.HTTP_ERROR_NAME, error48.name); - span.setAttribute(AttributeNames_1.AttributeNames.HTTP_ERROR_MESSAGE, message); - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - span.setAttribute(semantic_conventions_1.ATTR_ERROR_TYPE, error48.name); - } - span.setStatus({ code: api_1.SpanStatusCode.ERROR, message }); - span.recordException(error48); - }; - exports.setSpanWithError = setSpanWithError; - var setRequestContentLengthAttribute = (request, attributes) => { - const length = getContentLength(request.headers); - if (length === null) - return; - if ((0, exports.isCompressed)(request.headers)) { - attributes[semconv_1.ATTR_HTTP_REQUEST_CONTENT_LENGTH] = length; - } else { - attributes[semconv_1.ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED] = length; - } - }; - exports.setRequestContentLengthAttribute = setRequestContentLengthAttribute; - var setResponseContentLengthAttribute = (response, attributes) => { - const length = getContentLength(response.headers); - if (length === null) - return; - if ((0, exports.isCompressed)(response.headers)) { - attributes[semconv_1.ATTR_HTTP_RESPONSE_CONTENT_LENGTH] = length; - } else { - attributes[semconv_1.ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED] = length; - } - }; - exports.setResponseContentLengthAttribute = setResponseContentLengthAttribute; - function getContentLength(headers) { - const contentLengthHeader = headers["content-length"]; - if (contentLengthHeader === undefined) - return null; - const contentLength = parseInt(contentLengthHeader, 10); - if (isNaN(contentLength)) - return null; - return contentLength; - } - var isCompressed = (headers) => { - const encoding = headers["content-encoding"]; - return !!encoding && encoding !== "identity"; - }; - exports.isCompressed = isCompressed; - function stringUrlToHttpOptions(stringUrl) { - const { hostname: hostname3, pathname, port, username, password, search, protocol, hash: hash2, href, origin, host } = new URL(stringUrl); - const options = { - protocol, - hostname: hostname3 && hostname3[0] === "[" ? hostname3.slice(1, -1) : hostname3, - hash: hash2, - search, - pathname, - path: `${pathname || ""}${search || ""}`, - href, - origin, - host - }; - if (port !== "") { - options.port = Number(port); - } - if (username || password) { - options.auth = `${decodeURIComponent(username)}:${decodeURIComponent(password)}`; - } - return options; - } - var getRequestInfo = (logger, options, extraOptions) => { - let pathname; - let origin; - let optionsParsed; - let invalidUrl = false; - if (typeof options === "string") { - try { - const convertedOptions = stringUrlToHttpOptions(options); - optionsParsed = convertedOptions; - pathname = convertedOptions.pathname || "/"; - } catch (e) { - invalidUrl = true; - logger.verbose("Unable to parse URL provided to HTTP request, using fallback to determine path. Original error:", e); - optionsParsed = { - path: options - }; - pathname = optionsParsed.path || "/"; - } - origin = `${optionsParsed.protocol || "http:"}//${optionsParsed.host}`; - if (extraOptions !== undefined) { - Object.assign(optionsParsed, extraOptions); - } - } else if (options instanceof url2.URL) { - optionsParsed = { - protocol: options.protocol, - hostname: typeof options.hostname === "string" && options.hostname.startsWith("[") ? options.hostname.slice(1, -1) : options.hostname, - path: `${options.pathname || ""}${options.search || ""}` - }; - if (options.port !== "") { - optionsParsed.port = Number(options.port); - } - if (options.username || options.password) { - optionsParsed.auth = `${options.username}:${options.password}`; - } - pathname = options.pathname; - origin = options.origin; - if (extraOptions !== undefined) { - Object.assign(optionsParsed, extraOptions); - } - } else { - optionsParsed = Object.assign({ protocol: options.host ? "http:" : undefined }, options); - const hostname3 = optionsParsed.host || (optionsParsed.port != null ? `${optionsParsed.hostname}${optionsParsed.port}` : optionsParsed.hostname); - origin = `${optionsParsed.protocol || "http:"}//${hostname3}`; - pathname = options.pathname; - if (!pathname && optionsParsed.path) { - try { - const parsedUrl = new URL(optionsParsed.path, origin); - pathname = parsedUrl.pathname || "/"; - } catch { - pathname = "/"; - } - } - } - const method = optionsParsed.method ? optionsParsed.method.toUpperCase() : "GET"; - return { origin, pathname, method, optionsParsed, invalidUrl }; - }; - exports.getRequestInfo = getRequestInfo; - var isValidOptionsType = (options) => { - if (!options) { - return false; - } - const type = typeof options; - return type === "string" || type === "object" && !Array.isArray(options); - }; - exports.isValidOptionsType = isValidOptionsType; - var extractHostnameAndPort = (requestOptions) => { - if (requestOptions.hostname && requestOptions.port) { - return { hostname: requestOptions.hostname, port: requestOptions.port }; - } - const matches = requestOptions.host?.match(/^([^:/ ]+)(:\d{1,5})?/) || null; - const hostname3 = requestOptions.hostname || (matches === null ? "localhost" : matches[1]); - let port = requestOptions.port; - if (!port) { - if (matches && matches[2]) { - port = matches[2].substring(1); - } else { - port = requestOptions.protocol === "https:" ? "443" : "80"; - } - } - return { hostname: hostname3, port }; - }; - exports.extractHostnameAndPort = extractHostnameAndPort; - var getOutgoingRequestAttributes = (requestOptions, options, semconvStability, enableSyntheticSourceDetection) => { - const hostname3 = options.hostname; - const port = options.port; - const method = requestOptions.method ?? "GET"; - const normalizedMethod = normalizeMethod(method); - const headers = requestOptions.headers || {}; - const userAgent2 = headers["user-agent"]; - const urlFull = (0, exports.getAbsoluteUrl)(requestOptions, headers, `${options.component}:`, options.redactedQueryParams); - const oldAttributes = { - [semconv_1.ATTR_HTTP_URL]: urlFull, - [semconv_1.ATTR_HTTP_METHOD]: method, - [semconv_1.ATTR_HTTP_TARGET]: requestOptions.path || "/", - [semconv_1.ATTR_NET_PEER_NAME]: hostname3, - [semconv_1.ATTR_HTTP_HOST]: headers.host ?? `${hostname3}:${port}` - }; - const newAttributes = { - [semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD]: normalizedMethod, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: hostname3, - [semantic_conventions_1.ATTR_SERVER_PORT]: Number(port), - [semantic_conventions_1.ATTR_URL_FULL]: urlFull, - [semantic_conventions_1.ATTR_USER_AGENT_ORIGINAL]: userAgent2 - }; - if (method !== normalizedMethod) { - newAttributes[semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD_ORIGINAL] = method; - } - if (enableSyntheticSourceDetection && userAgent2) { - newAttributes[semconv_1.ATTR_USER_AGENT_SYNTHETIC_TYPE] = getSyntheticType(userAgent2); - } - if (userAgent2 !== undefined) { - oldAttributes[semconv_1.ATTR_HTTP_USER_AGENT] = userAgent2; - } - switch (semconvStability) { - case instrumentation_1.SemconvStability.STABLE: - return Object.assign(newAttributes, options.hookAttributes); - case instrumentation_1.SemconvStability.OLD: - return Object.assign(oldAttributes, options.hookAttributes); - } - return Object.assign(oldAttributes, newAttributes, options.hookAttributes); - }; - exports.getOutgoingRequestAttributes = getOutgoingRequestAttributes; - var getOutgoingRequestMetricAttributes = (spanAttributes) => { - const metricAttributes = {}; - metricAttributes[semconv_1.ATTR_HTTP_METHOD] = spanAttributes[semconv_1.ATTR_HTTP_METHOD]; - metricAttributes[semconv_1.ATTR_NET_PEER_NAME] = spanAttributes[semconv_1.ATTR_NET_PEER_NAME]; - return metricAttributes; - }; - exports.getOutgoingRequestMetricAttributes = getOutgoingRequestMetricAttributes; - var setAttributesFromHttpKind = (kind, attributes) => { - if (kind) { - attributes[semconv_1.ATTR_HTTP_FLAVOR] = kind; - if (kind.toUpperCase() !== "QUIC") { - attributes[semconv_1.ATTR_NET_TRANSPORT] = semconv_1.NET_TRANSPORT_VALUE_IP_TCP; - } else { - attributes[semconv_1.ATTR_NET_TRANSPORT] = semconv_1.NET_TRANSPORT_VALUE_IP_UDP; - } - } - }; - exports.setAttributesFromHttpKind = setAttributesFromHttpKind; - var getSyntheticType = (userAgent2) => { - const userAgentString = String(userAgent2).toLowerCase(); - for (const name of internal_types_1.SYNTHETIC_TEST_NAMES) { - if (userAgentString.includes(name)) { - return semconv_1.USER_AGENT_SYNTHETIC_TYPE_VALUE_TEST; - } - } - for (const name of internal_types_1.SYNTHETIC_BOT_NAMES) { - if (userAgentString.includes(name)) { - return semconv_1.USER_AGENT_SYNTHETIC_TYPE_VALUE_BOT; - } - } - return; - }; - var getOutgoingRequestAttributesOnResponse = (response, semconvStability) => { - const { statusCode, statusMessage, httpVersion, socket } = response; - const oldAttributes = {}; - const stableAttributes = {}; - if (statusCode != null) { - stableAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE] = statusCode; - } - if (socket) { - const { remoteAddress, remotePort } = socket; - oldAttributes[semconv_1.ATTR_NET_PEER_IP] = remoteAddress; - oldAttributes[semconv_1.ATTR_NET_PEER_PORT] = remotePort; - stableAttributes[semantic_conventions_1.ATTR_NETWORK_PEER_ADDRESS] = remoteAddress; - stableAttributes[semantic_conventions_1.ATTR_NETWORK_PEER_PORT] = remotePort; - stableAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION] = response.httpVersion; - } - (0, exports.setResponseContentLengthAttribute)(response, oldAttributes); - if (statusCode) { - oldAttributes[semconv_1.ATTR_HTTP_STATUS_CODE] = statusCode; - oldAttributes[AttributeNames_1.AttributeNames.HTTP_STATUS_TEXT] = (statusMessage || "").toUpperCase(); - } - (0, exports.setAttributesFromHttpKind)(httpVersion, oldAttributes); - switch (semconvStability) { - case instrumentation_1.SemconvStability.STABLE: - return stableAttributes; - case instrumentation_1.SemconvStability.OLD: - return oldAttributes; - } - return Object.assign(oldAttributes, stableAttributes); - }; - exports.getOutgoingRequestAttributesOnResponse = getOutgoingRequestAttributesOnResponse; - var getOutgoingRequestMetricAttributesOnResponse = (spanAttributes) => { - const metricAttributes = {}; - metricAttributes[semconv_1.ATTR_NET_PEER_PORT] = spanAttributes[semconv_1.ATTR_NET_PEER_PORT]; - metricAttributes[semconv_1.ATTR_HTTP_STATUS_CODE] = spanAttributes[semconv_1.ATTR_HTTP_STATUS_CODE]; - metricAttributes[semconv_1.ATTR_HTTP_FLAVOR] = spanAttributes[semconv_1.ATTR_HTTP_FLAVOR]; - return metricAttributes; - }; - exports.getOutgoingRequestMetricAttributesOnResponse = getOutgoingRequestMetricAttributesOnResponse; - var getOutgoingStableRequestMetricAttributesOnResponse = (spanAttributes) => { - const metricAttributes = {}; - if (spanAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]) { - metricAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION] = spanAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]; - } - if (spanAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]) { - metricAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE] = spanAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]; - } - return metricAttributes; - }; - exports.getOutgoingStableRequestMetricAttributesOnResponse = getOutgoingStableRequestMetricAttributesOnResponse; - function parseHostHeader(hostHeader, proto) { - const parts = hostHeader.split(":"); - if (parts.length === 1) { - if (proto === "http") { - return { host: parts[0], port: "80" }; - } - if (proto === "https") { - return { host: parts[0], port: "443" }; - } - return { host: parts[0] }; - } - if (parts.length === 2) { - return { - host: parts[0], - port: parts[1] - }; - } - if (parts[0].startsWith("[")) { - if (parts[parts.length - 1].endsWith("]")) { - if (proto === "http") { - return { host: hostHeader, port: "80" }; - } - if (proto === "https") { - return { host: hostHeader, port: "443" }; - } - } else if (parts[parts.length - 2].endsWith("]")) { - return { - host: parts.slice(0, -1).join(":"), - port: parts[parts.length - 1] - }; - } - } - return { host: hostHeader }; - } - function getServerAddress(request, component) { - const forwardedHeader = request.headers["forwarded"]; - if (forwardedHeader) { - for (const entry of parseForwardedHeader(forwardedHeader)) { - if (entry.host) { - return parseHostHeader(entry.host, entry.proto); - } - } - } - const xForwardedHost = request.headers["x-forwarded-host"]; - if (typeof xForwardedHost === "string") { - if (typeof request.headers["x-forwarded-proto"] === "string") { - return parseHostHeader(xForwardedHost, request.headers["x-forwarded-proto"]); - } - if (Array.isArray(request.headers["x-forwarded-proto"])) { - return parseHostHeader(xForwardedHost, request.headers["x-forwarded-proto"][0]); - } - return parseHostHeader(xForwardedHost); - } else if (Array.isArray(xForwardedHost) && typeof xForwardedHost[0] === "string" && xForwardedHost[0].length > 0) { - if (typeof request.headers["x-forwarded-proto"] === "string") { - return parseHostHeader(xForwardedHost[0], request.headers["x-forwarded-proto"]); - } - if (Array.isArray(request.headers["x-forwarded-proto"])) { - return parseHostHeader(xForwardedHost[0], request.headers["x-forwarded-proto"][0]); - } - return parseHostHeader(xForwardedHost[0]); - } - const host = request.headers["host"]; - if (typeof host === "string" && host.length > 0) { - return parseHostHeader(host, component); - } - return null; - } - function getRemoteClientAddress(request) { - const forwardedHeader = request.headers["forwarded"]; - if (forwardedHeader) { - for (const entry of parseForwardedHeader(forwardedHeader)) { - if (entry.for) { - return removePortFromAddress(entry.for); - } - } - } - const xForwardedFor = request.headers["x-forwarded-for"]; - if (xForwardedFor) { - let xForwardedForVal; - if (typeof xForwardedFor === "string") { - xForwardedForVal = xForwardedFor; - } else if (Array.isArray(xForwardedFor)) { - xForwardedForVal = xForwardedFor[0]; - } - if (typeof xForwardedForVal === "string") { - xForwardedForVal = xForwardedForVal.split(",")[0].trim(); - return removePortFromAddress(xForwardedForVal); - } - } - const remote = request.socket.remoteAddress; - if (remote) { - return remote; - } - return null; - } - exports.getRemoteClientAddress = getRemoteClientAddress; - function removePortFromAddress(input) { - try { - const { hostname: address } = new URL(`http://${input}`); - if (address.startsWith("[") && address.endsWith("]")) { - return address.slice(1, -1); - } - return address; - } catch { - return input; - } - } - function getInfoFromIncomingMessage(component, request, logger) { - try { - if (request.headers.host) { - return new URL(request.url ?? "/", `${component}://${request.headers.host}`); - } else { - const unsafeParsedUrl = new URL(request.url ?? "/", `${component}://localhost`); - return { - pathname: unsafeParsedUrl.pathname, - search: unsafeParsedUrl.search, - toString: function() { - return unsafeParsedUrl.pathname + unsafeParsedUrl.search; - } - }; - } - } catch (e) { - logger.verbose("Unable to get URL from request", e); - return {}; - } - } - var getIncomingRequestAttributes = (request, options, logger) => { - const headers = request.headers; - const userAgent2 = headers["user-agent"]; - const ips = headers["x-forwarded-for"]; - const httpVersion = request.httpVersion; - const host = headers.host; - const hostname3 = host?.replace(/^(.*)(:[0-9]{1,5})/, "$1") || "localhost"; - const method = request.method; - const normalizedMethod = normalizeMethod(method); - const serverAddress = getServerAddress(request, options.component); - const serverName = options.serverName; - const remoteClientAddress = getRemoteClientAddress(request); - const newAttributes = { - [semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD]: normalizedMethod, - [semantic_conventions_1.ATTR_URL_SCHEME]: options.component, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: serverAddress?.host, - [semantic_conventions_1.ATTR_NETWORK_PEER_ADDRESS]: request.socket.remoteAddress, - [semantic_conventions_1.ATTR_NETWORK_PEER_PORT]: request.socket.remotePort, - [semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]: request.httpVersion, - [semantic_conventions_1.ATTR_USER_AGENT_ORIGINAL]: userAgent2 - }; - const parsedUrl = getInfoFromIncomingMessage(options.component, request, logger); - if (parsedUrl?.pathname != null) { - newAttributes[semantic_conventions_1.ATTR_URL_PATH] = parsedUrl.pathname; - } - if (parsedUrl.search) { - newAttributes[semantic_conventions_1.ATTR_URL_QUERY] = parsedUrl.search.slice(1); - } - if (remoteClientAddress != null) { - newAttributes[semantic_conventions_1.ATTR_CLIENT_ADDRESS] = remoteClientAddress; - } - if (serverAddress?.port != null) { - newAttributes[semantic_conventions_1.ATTR_SERVER_PORT] = Number(serverAddress.port); - } - if (method !== normalizedMethod) { - newAttributes[semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD_ORIGINAL] = method; - } - if (options.enableSyntheticSourceDetection && userAgent2) { - newAttributes[semconv_1.ATTR_USER_AGENT_SYNTHETIC_TYPE] = getSyntheticType(userAgent2); - } - const oldAttributes = { - [semconv_1.ATTR_HTTP_URL]: parsedUrl.toString(), - [semconv_1.ATTR_HTTP_HOST]: host, - [semconv_1.ATTR_NET_HOST_NAME]: hostname3, - [semconv_1.ATTR_HTTP_METHOD]: method, - [semconv_1.ATTR_HTTP_SCHEME]: options.component - }; - if (typeof ips === "string") { - oldAttributes[semconv_1.ATTR_HTTP_CLIENT_IP] = ips.split(",")[0]; - } - if (typeof serverName === "string") { - oldAttributes[semconv_1.ATTR_HTTP_SERVER_NAME] = serverName; - } - if (parsedUrl?.pathname) { - oldAttributes[semconv_1.ATTR_HTTP_TARGET] = parsedUrl?.pathname + parsedUrl?.search || "/"; - } - if (userAgent2 !== undefined) { - oldAttributes[semconv_1.ATTR_HTTP_USER_AGENT] = userAgent2; - } - (0, exports.setRequestContentLengthAttribute)(request, oldAttributes); - (0, exports.setAttributesFromHttpKind)(httpVersion, oldAttributes); - switch (options.semconvStability) { - case instrumentation_1.SemconvStability.STABLE: - return Object.assign(newAttributes, options.hookAttributes); - case instrumentation_1.SemconvStability.OLD: - return Object.assign(oldAttributes, options.hookAttributes); - } - return Object.assign(oldAttributes, newAttributes, options.hookAttributes); - }; - exports.getIncomingRequestAttributes = getIncomingRequestAttributes; - var getIncomingRequestMetricAttributes = (spanAttributes) => { - const metricAttributes = {}; - metricAttributes[semconv_1.ATTR_HTTP_SCHEME] = spanAttributes[semconv_1.ATTR_HTTP_SCHEME]; - metricAttributes[semconv_1.ATTR_HTTP_METHOD] = spanAttributes[semconv_1.ATTR_HTTP_METHOD]; - metricAttributes[semconv_1.ATTR_NET_HOST_NAME] = spanAttributes[semconv_1.ATTR_NET_HOST_NAME]; - metricAttributes[semconv_1.ATTR_HTTP_FLAVOR] = spanAttributes[semconv_1.ATTR_HTTP_FLAVOR]; - return metricAttributes; - }; - exports.getIncomingRequestMetricAttributes = getIncomingRequestMetricAttributes; - var getIncomingRequestAttributesOnResponse = (request, response, semconvStability) => { - const { socket } = request; - const { statusCode, statusMessage } = response; - const newAttributes = { - [semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]: statusCode - }; - const rpcMetadata = (0, core_1.getRPCMetadata)(api_1.context.active()); - const oldAttributes = {}; - if (socket) { - const { localAddress, localPort, remoteAddress, remotePort } = socket; - oldAttributes[semconv_1.ATTR_NET_HOST_IP] = localAddress; - oldAttributes[semconv_1.ATTR_NET_HOST_PORT] = localPort; - oldAttributes[semconv_1.ATTR_NET_PEER_IP] = remoteAddress; - oldAttributes[semconv_1.ATTR_NET_PEER_PORT] = remotePort; - } - oldAttributes[semconv_1.ATTR_HTTP_STATUS_CODE] = statusCode; - oldAttributes[AttributeNames_1.AttributeNames.HTTP_STATUS_TEXT] = (statusMessage || "").toUpperCase(); - if (rpcMetadata?.type === core_1.RPCType.HTTP && rpcMetadata.route !== undefined) { - oldAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE] = rpcMetadata.route; - newAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE] = rpcMetadata.route; - } - switch (semconvStability) { - case instrumentation_1.SemconvStability.STABLE: - return newAttributes; - case instrumentation_1.SemconvStability.OLD: - return oldAttributes; - } - return Object.assign(oldAttributes, newAttributes); - }; - exports.getIncomingRequestAttributesOnResponse = getIncomingRequestAttributesOnResponse; - var getIncomingRequestMetricAttributesOnResponse = (spanAttributes) => { - const metricAttributes = {}; - metricAttributes[semconv_1.ATTR_HTTP_STATUS_CODE] = spanAttributes[semconv_1.ATTR_HTTP_STATUS_CODE]; - metricAttributes[semconv_1.ATTR_NET_HOST_PORT] = spanAttributes[semconv_1.ATTR_NET_HOST_PORT]; - if (spanAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE] !== undefined) { - metricAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE] = spanAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE]; - } - return metricAttributes; - }; - exports.getIncomingRequestMetricAttributesOnResponse = getIncomingRequestMetricAttributesOnResponse; - var getIncomingStableRequestMetricAttributesOnResponse = (spanAttributes) => { - const metricAttributes = {}; - if (spanAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE] !== undefined) { - metricAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE] = spanAttributes[semantic_conventions_1.ATTR_HTTP_ROUTE]; - } - if (spanAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]) { - metricAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE] = spanAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]; - } - return metricAttributes; - }; - exports.getIncomingStableRequestMetricAttributesOnResponse = getIncomingStableRequestMetricAttributesOnResponse; - function headerCapture(type, headers) { - const normalizedHeaders = new Map; - for (let i = 0, len = headers.length;i < len; i++) { - const capturedHeader = headers[i].toLowerCase(); - normalizedHeaders.set(capturedHeader, capturedHeader.replace(/-/g, "_")); - } - return (span, getHeader) => { - for (const capturedHeader of normalizedHeaders.keys()) { - const value = getHeader(capturedHeader); - if (value === undefined) { - continue; - } - const normalizedHeader = normalizedHeaders.get(capturedHeader); - const key = `http.${type}.header.${normalizedHeader}`; - if (typeof value === "string") { - span.setAttribute(key, [value]); - } else if (Array.isArray(value)) { - span.setAttribute(key, value); - } else { - span.setAttribute(key, [value]); - } - } - }; - } - exports.headerCapture = headerCapture; - var KNOWN_METHODS = new Set([ - "GET", - "HEAD", - "POST", - "PUT", - "DELETE", - "CONNECT", - "OPTIONS", - "TRACE", - "PATCH" - ]); - function normalizeMethod(method) { - if (method == null) { - return "GET"; - } - const upper = method.toUpperCase(); - if (KNOWN_METHODS.has(upper)) { - return upper; - } - return "_OTHER"; - } - function parseForwardedHeader(header) { - try { - return forwardedParse(header); - } catch { - return []; - } - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/http.js -var require_http = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HttpInstrumentation = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var url2 = __require("url"); - var version_1 = require_version20(); - var instrumentation_1 = require_src9(); - var events_1 = __require("events"); - var semantic_conventions_1 = require_src3(); - var utils_1 = require_utils19(); - - class HttpInstrumentation extends instrumentation_1.InstrumentationBase { - _spanNotEnded = new WeakSet; - _headerCapture; - _semconvStability = instrumentation_1.SemconvStability.OLD; - constructor(config2 = {}) { - super("@opentelemetry/instrumentation-http", version_1.VERSION, config2); - this._headerCapture = this._createHeaderCapture(); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - _updateMetricInstruments() { - this._oldHttpServerDurationHistogram = this.meter.createHistogram("http.server.duration", { - description: "Measures the duration of inbound HTTP requests.", - unit: "ms", - valueType: api_1.ValueType.DOUBLE - }); - this._oldHttpClientDurationHistogram = this.meter.createHistogram("http.client.duration", { - description: "Measures the duration of outbound HTTP requests.", - unit: "ms", - valueType: api_1.ValueType.DOUBLE - }); - this._stableHttpServerDurationHistogram = this.meter.createHistogram(semantic_conventions_1.METRIC_HTTP_SERVER_REQUEST_DURATION, { - description: "Duration of HTTP server requests.", - unit: "s", - valueType: api_1.ValueType.DOUBLE, - advice: { - explicitBucketBoundaries: [ - 0.005, - 0.01, - 0.025, - 0.05, - 0.075, - 0.1, - 0.25, - 0.5, - 0.75, - 1, - 2.5, - 5, - 7.5, - 10 - ] - } - }); - this._stableHttpClientDurationHistogram = this.meter.createHistogram(semantic_conventions_1.METRIC_HTTP_CLIENT_REQUEST_DURATION, { - description: "Duration of HTTP client requests.", - unit: "s", - valueType: api_1.ValueType.DOUBLE, - advice: { - explicitBucketBoundaries: [ - 0.005, - 0.01, - 0.025, - 0.05, - 0.075, - 0.1, - 0.25, - 0.5, - 0.75, - 1, - 2.5, - 5, - 7.5, - 10 - ] - } - }); - } - _recordServerDuration(durationMs, oldAttributes, stableAttributes) { - if (this._semconvStability & instrumentation_1.SemconvStability.OLD) { - this._oldHttpServerDurationHistogram.record(durationMs, oldAttributes); - } - if (this._semconvStability & instrumentation_1.SemconvStability.STABLE) { - this._stableHttpServerDurationHistogram.record(durationMs / 1000, stableAttributes); - } - } - _recordClientDuration(durationMs, oldAttributes, stableAttributes) { - if (this._semconvStability & instrumentation_1.SemconvStability.OLD) { - this._oldHttpClientDurationHistogram.record(durationMs, oldAttributes); - } - if (this._semconvStability & instrumentation_1.SemconvStability.STABLE) { - this._stableHttpClientDurationHistogram.record(durationMs / 1000, stableAttributes); - } - } - setConfig(config2 = {}) { - super.setConfig(config2); - this._headerCapture = this._createHeaderCapture(); - } - init() { - return [this._getHttpsInstrumentation(), this._getHttpInstrumentation()]; - } - _getHttpInstrumentation() { - return new instrumentation_1.InstrumentationNodeModuleDefinition("http", ["*"], (moduleExports) => { - const isESM = moduleExports[Symbol.toStringTag] === "Module"; - if (!this.getConfig().disableOutgoingRequestInstrumentation) { - const patchedRequest = this._wrap(moduleExports, "request", this._getPatchOutgoingRequestFunction("http")); - const patchedGet = this._wrap(moduleExports, "get", this._getPatchOutgoingGetFunction(patchedRequest)); - if (isESM) { - moduleExports.default.request = patchedRequest; - moduleExports.default.get = patchedGet; - } - } - if (!this.getConfig().disableIncomingRequestInstrumentation) { - this._wrap(moduleExports.Server.prototype, "emit", this._getPatchIncomingRequestFunction("http")); - } - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - if (!this.getConfig().disableOutgoingRequestInstrumentation) { - this._unwrap(moduleExports, "request"); - this._unwrap(moduleExports, "get"); - } - if (!this.getConfig().disableIncomingRequestInstrumentation) { - this._unwrap(moduleExports.Server.prototype, "emit"); - } - }); - } - _getHttpsInstrumentation() { - return new instrumentation_1.InstrumentationNodeModuleDefinition("https", ["*"], (moduleExports) => { - const isESM = moduleExports[Symbol.toStringTag] === "Module"; - if (!this.getConfig().disableOutgoingRequestInstrumentation) { - const patchedRequest = this._wrap(moduleExports, "request", this._getPatchHttpsOutgoingRequestFunction("https")); - const patchedGet = this._wrap(moduleExports, "get", this._getPatchHttpsOutgoingGetFunction(patchedRequest)); - if (isESM) { - moduleExports.default.request = patchedRequest; - moduleExports.default.get = patchedGet; - } - } - if (!this.getConfig().disableIncomingRequestInstrumentation) { - this._wrap(moduleExports.Server.prototype, "emit", this._getPatchIncomingRequestFunction("https")); - } - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - if (!this.getConfig().disableOutgoingRequestInstrumentation) { - this._unwrap(moduleExports, "request"); - this._unwrap(moduleExports, "get"); - } - if (!this.getConfig().disableIncomingRequestInstrumentation) { - this._unwrap(moduleExports.Server.prototype, "emit"); - } - }); - } - _getPatchIncomingRequestFunction(component) { - return (original) => { - return this._incomingRequestFunction(component, original); - }; - } - _getPatchOutgoingRequestFunction(component) { - return (original) => { - return this._outgoingRequestFunction(component, original); - }; - } - _getPatchOutgoingGetFunction(clientRequest) { - return (_original) => { - return function outgoingGetRequest(options, ...args) { - const req = clientRequest(options, ...args); - req.end(); - return req; - }; - }; - } - _getPatchHttpsOutgoingRequestFunction(component) { - return (original) => { - const instrumentation = this; - return function httpsOutgoingRequest(options, ...args) { - if (component === "https" && typeof options === "object" && options?.constructor?.name !== "URL") { - options = Object.assign({}, options); - instrumentation._setDefaultOptions(options); - } - return instrumentation._getPatchOutgoingRequestFunction(component)(original)(options, ...args); - }; - }; - } - _setDefaultOptions(options) { - options.protocol = options.protocol || "https:"; - options.port = options.port || 443; - } - _getPatchHttpsOutgoingGetFunction(clientRequest) { - return (original) => { - const instrumentation = this; - return function httpsOutgoingRequest(options, ...args) { - return instrumentation._getPatchOutgoingGetFunction(clientRequest)(original)(options, ...args); - }; - }; - } - _traceClientRequest(request, span, startTime, oldMetricAttributes, stableMetricAttributes) { - if (this.getConfig().requestHook) { - this._callRequestHook(span, request); - } - let responseFinished = false; - request.prependListener("response", (response) => { - this._diag.debug("outgoingRequest on response()"); - if (request.listenerCount("response") <= 1) { - response.resume(); - } - const responseAttributes = (0, utils_1.getOutgoingRequestAttributesOnResponse)(response, this._semconvStability); - span.setAttributes(responseAttributes); - oldMetricAttributes = Object.assign(oldMetricAttributes, (0, utils_1.getOutgoingRequestMetricAttributesOnResponse)(responseAttributes)); - stableMetricAttributes = Object.assign(stableMetricAttributes, (0, utils_1.getOutgoingStableRequestMetricAttributesOnResponse)(responseAttributes)); - if (this.getConfig().responseHook) { - this._callResponseHook(span, response); - } - this._headerCapture.client.captureRequestHeaders(span, (header) => request.getHeader(header)); - this._headerCapture.client.captureResponseHeaders(span, (header) => response.headers[header]); - api_1.context.bind(api_1.context.active(), response); - const endHandler = () => { - this._diag.debug("outgoingRequest on end()"); - if (responseFinished) { - return; - } - responseFinished = true; - let status; - if (response.aborted && !response.complete) { - status = { code: api_1.SpanStatusCode.ERROR }; - } else { - status = { - code: (0, utils_1.parseResponseStatus)(api_1.SpanKind.CLIENT, response.statusCode) - }; - } - span.setStatus(status); - if (this.getConfig().applyCustomAttributesOnSpan) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => this.getConfig().applyCustomAttributesOnSpan(span, request, response), () => {}, true); - } - this._closeHttpSpan(span, api_1.SpanKind.CLIENT, startTime, oldMetricAttributes, stableMetricAttributes); - }; - response.on("end", endHandler); - response.on(events_1.errorMonitor, (error48) => { - this._diag.debug("outgoingRequest on error()", error48); - if (responseFinished) { - return; - } - responseFinished = true; - this._onOutgoingRequestError(span, oldMetricAttributes, stableMetricAttributes, startTime, error48); - }); - }); - request.on("close", () => { - this._diag.debug("outgoingRequest on request close()"); - if (request.aborted || responseFinished) { - return; - } - responseFinished = true; - this._closeHttpSpan(span, api_1.SpanKind.CLIENT, startTime, oldMetricAttributes, stableMetricAttributes); - }); - request.on(events_1.errorMonitor, (error48) => { - this._diag.debug("outgoingRequest on request error()", error48); - if (responseFinished) { - return; - } - responseFinished = true; - this._onOutgoingRequestError(span, oldMetricAttributes, stableMetricAttributes, startTime, error48); - }); - this._diag.debug("http.ClientRequest return request"); - return request; - } - _incomingRequestFunction(component, original) { - const instrumentation = this; - return function incomingRequest(event, ...args) { - if (event !== "request") { - return original.apply(this, [event, ...args]); - } - const request = args[0]; - const response = args[1]; - const method = request.method || "GET"; - instrumentation._diag.debug(`${component} instrumentation incomingRequest`); - if ((0, instrumentation_1.safeExecuteInTheMiddle)(() => instrumentation.getConfig().ignoreIncomingRequestHook?.(request), (e) => { - if (e != null) { - instrumentation._diag.error("caught ignoreIncomingRequestHook error: ", e); - } - }, true)) { - return api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => { - api_1.context.bind(api_1.context.active(), request); - api_1.context.bind(api_1.context.active(), response); - return original.apply(this, [event, ...args]); - }); - } - const headers = request.headers; - const spanAttributes = (0, utils_1.getIncomingRequestAttributes)(request, { - component, - serverName: instrumentation.getConfig().serverName, - hookAttributes: instrumentation._callStartSpanHook(request, instrumentation.getConfig().startIncomingSpanHook), - semconvStability: instrumentation._semconvStability, - enableSyntheticSourceDetection: instrumentation.getConfig().enableSyntheticSourceDetection || false - }, instrumentation._diag); - const spanOptions = { - kind: api_1.SpanKind.SERVER, - attributes: spanAttributes - }; - const startTime = (0, core_1.hrTime)(); - const oldMetricAttributes = (0, utils_1.getIncomingRequestMetricAttributes)(spanAttributes); - const stableMetricAttributes = { - [semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD]: spanAttributes[semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD], - [semantic_conventions_1.ATTR_URL_SCHEME]: spanAttributes[semantic_conventions_1.ATTR_URL_SCHEME] - }; - if (spanAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]) { - stableMetricAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION] = spanAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]; - } - const ctx = api_1.propagation.extract(api_1.ROOT_CONTEXT, headers); - const span = instrumentation._startHttpSpan(method, spanOptions, ctx); - const rpcMetadata = { - type: core_1.RPCType.HTTP, - span - }; - return api_1.context.with((0, core_1.setRPCMetadata)(api_1.trace.setSpan(ctx, span), rpcMetadata), () => { - api_1.context.bind(api_1.context.active(), request); - api_1.context.bind(api_1.context.active(), response); - if (instrumentation.getConfig().requestHook) { - instrumentation._callRequestHook(span, request); - } - if (instrumentation.getConfig().responseHook) { - instrumentation._callResponseHook(span, response); - } - instrumentation._headerCapture.server.captureRequestHeaders(span, (header) => request.headers[header]); - let hasError = false; - response.on("close", () => { - if (hasError) { - return; - } - instrumentation._onServerResponseFinish(request, response, span, oldMetricAttributes, stableMetricAttributes, startTime); - }); - response.on(events_1.errorMonitor, (err) => { - hasError = true; - instrumentation._onServerResponseError(span, oldMetricAttributes, stableMetricAttributes, startTime, err); - }); - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => original.apply(this, [event, ...args]), (error48) => { - if (error48) { - instrumentation._onServerResponseError(span, oldMetricAttributes, stableMetricAttributes, startTime, error48); - throw error48; - } - }); - }); - }; - } - _outgoingRequestFunction(component, original) { - const instrumentation = this; - return function outgoingRequest(options, ...args) { - if (!(0, utils_1.isValidOptionsType)(options)) { - return original.apply(this, [options, ...args]); - } - const extraOptions = typeof args[0] === "object" && (typeof options === "string" || options instanceof url2.URL) ? args.shift() : undefined; - const { method, invalidUrl, optionsParsed } = (0, utils_1.getRequestInfo)(instrumentation._diag, options, extraOptions); - if ((0, instrumentation_1.safeExecuteInTheMiddle)(() => instrumentation.getConfig().ignoreOutgoingRequestHook?.(optionsParsed), (e) => { - if (e != null) { - instrumentation._diag.error("caught ignoreOutgoingRequestHook error: ", e); - } - }, true)) { - return original.apply(this, [optionsParsed, ...args]); - } - const { hostname: hostname3, port } = (0, utils_1.extractHostnameAndPort)(optionsParsed); - const attributes = (0, utils_1.getOutgoingRequestAttributes)(optionsParsed, { - component, - port, - hostname: hostname3, - hookAttributes: instrumentation._callStartSpanHook(optionsParsed, instrumentation.getConfig().startOutgoingSpanHook), - redactedQueryParams: instrumentation.getConfig().redactedQueryParams - }, instrumentation._semconvStability, instrumentation.getConfig().enableSyntheticSourceDetection || false); - const startTime = (0, core_1.hrTime)(); - const oldMetricAttributes = (0, utils_1.getOutgoingRequestMetricAttributes)(attributes); - const stableMetricAttributes = { - [semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD]: attributes[semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD], - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: attributes[semantic_conventions_1.ATTR_SERVER_ADDRESS], - [semantic_conventions_1.ATTR_SERVER_PORT]: attributes[semantic_conventions_1.ATTR_SERVER_PORT] - }; - if (attributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]) { - stableMetricAttributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE] = attributes[semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]; - } - if (attributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]) { - stableMetricAttributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION] = attributes[semantic_conventions_1.ATTR_NETWORK_PROTOCOL_VERSION]; - } - const spanOptions = { - kind: api_1.SpanKind.CLIENT, - attributes - }; - const span = instrumentation._startHttpSpan(method, spanOptions); - const parentContext = api_1.context.active(); - const requestContext = api_1.trace.setSpan(parentContext, span); - if (!optionsParsed.headers) { - optionsParsed.headers = {}; - } else { - optionsParsed.headers = Object.assign({}, optionsParsed.headers); - } - api_1.propagation.inject(requestContext, optionsParsed.headers); - return api_1.context.with(requestContext, () => { - const cb = args[args.length - 1]; - if (typeof cb === "function") { - args[args.length - 1] = api_1.context.bind(parentContext, cb); - } - const request = (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - if (invalidUrl) { - return original.apply(this, [options, ...args]); - } else { - return original.apply(this, [optionsParsed, ...args]); - } - }, (error48) => { - if (error48) { - instrumentation._onOutgoingRequestError(span, oldMetricAttributes, stableMetricAttributes, startTime, error48); - throw error48; - } - }); - instrumentation._diag.debug(`${component} instrumentation outgoingRequest`); - api_1.context.bind(parentContext, request); - return instrumentation._traceClientRequest(request, span, startTime, oldMetricAttributes, stableMetricAttributes); - }); - }; - } - _onServerResponseFinish(request, response, span, oldMetricAttributes, stableMetricAttributes, startTime) { - const attributes = (0, utils_1.getIncomingRequestAttributesOnResponse)(request, response, this._semconvStability); - oldMetricAttributes = Object.assign(oldMetricAttributes, (0, utils_1.getIncomingRequestMetricAttributesOnResponse)(attributes)); - stableMetricAttributes = Object.assign(stableMetricAttributes, (0, utils_1.getIncomingStableRequestMetricAttributesOnResponse)(attributes)); - this._headerCapture.server.captureResponseHeaders(span, (header) => response.getHeader(header)); - span.setAttributes(attributes).setStatus({ - code: (0, utils_1.parseResponseStatus)(api_1.SpanKind.SERVER, response.statusCode) - }); - const route = attributes[semantic_conventions_1.ATTR_HTTP_ROUTE]; - if (route) { - span.updateName(`${request.method || "GET"} ${route}`); - } - if (this.getConfig().applyCustomAttributesOnSpan) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => this.getConfig().applyCustomAttributesOnSpan(span, request, response), () => {}, true); - } - this._closeHttpSpan(span, api_1.SpanKind.SERVER, startTime, oldMetricAttributes, stableMetricAttributes); - } - _onOutgoingRequestError(span, oldMetricAttributes, stableMetricAttributes, startTime, error48) { - (0, utils_1.setSpanWithError)(span, error48, this._semconvStability); - stableMetricAttributes[semantic_conventions_1.ATTR_ERROR_TYPE] = error48.name; - this._closeHttpSpan(span, api_1.SpanKind.CLIENT, startTime, oldMetricAttributes, stableMetricAttributes); - } - _onServerResponseError(span, oldMetricAttributes, stableMetricAttributes, startTime, error48) { - (0, utils_1.setSpanWithError)(span, error48, this._semconvStability); - stableMetricAttributes[semantic_conventions_1.ATTR_ERROR_TYPE] = error48.name; - this._closeHttpSpan(span, api_1.SpanKind.SERVER, startTime, oldMetricAttributes, stableMetricAttributes); - } - _startHttpSpan(name, options, ctx = api_1.context.active()) { - const requireParent = options.kind === api_1.SpanKind.CLIENT ? this.getConfig().requireParentforOutgoingSpans : this.getConfig().requireParentforIncomingSpans; - let span; - const currentSpan = api_1.trace.getSpan(ctx); - if (requireParent === true && (!currentSpan || !api_1.trace.isSpanContextValid(currentSpan.spanContext()))) { - span = api_1.trace.wrapSpanContext(api_1.INVALID_SPAN_CONTEXT); - } else if (requireParent === true && currentSpan?.spanContext().isRemote) { - span = currentSpan; - } else { - span = this.tracer.startSpan(name, options, ctx); - } - this._spanNotEnded.add(span); - return span; - } - _closeHttpSpan(span, spanKind, startTime, oldMetricAttributes, stableMetricAttributes) { - if (!this._spanNotEnded.has(span)) { - return; - } - span.end(); - this._spanNotEnded.delete(span); - const duration3 = (0, core_1.hrTimeToMilliseconds)((0, core_1.hrTimeDuration)(startTime, (0, core_1.hrTime)())); - if (spanKind === api_1.SpanKind.SERVER) { - this._recordServerDuration(duration3, oldMetricAttributes, stableMetricAttributes); - } else if (spanKind === api_1.SpanKind.CLIENT) { - this._recordClientDuration(duration3, oldMetricAttributes, stableMetricAttributes); - } - } - _callResponseHook(span, response) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => this.getConfig().responseHook(span, response), () => {}, true); - } - _callRequestHook(span, request) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => this.getConfig().requestHook(span, request), () => {}, true); - } - _callStartSpanHook(request, hookFunc) { - if (typeof hookFunc === "function") { - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => hookFunc(request), () => {}, true); - } - } - _createHeaderCapture() { - const config2 = this.getConfig(); - return { - client: { - captureRequestHeaders: (0, utils_1.headerCapture)("request", config2.headersToSpanAttributes?.client?.requestHeaders ?? []), - captureResponseHeaders: (0, utils_1.headerCapture)("response", config2.headersToSpanAttributes?.client?.responseHeaders ?? []) - }, - server: { - captureRequestHeaders: (0, utils_1.headerCapture)("request", config2.headersToSpanAttributes?.server?.requestHeaders ?? []), - captureResponseHeaders: (0, utils_1.headerCapture)("response", config2.headersToSpanAttributes?.server?.responseHeaders ?? []) - } - }; - } - } - exports.HttpInstrumentation = HttpInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-http/build/src/index.js -var require_src26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HttpInstrumentation = undefined; - var http_1 = require_http(); - Object.defineProperty(exports, "HttpInstrumentation", { enumerable: true, get: function() { - return http_1.HttpInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-ioredis@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-ioredis/build/src/semconv.js -var require_semconv11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_VALUE_REDIS = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_CONNECTION_STRING = undefined; - exports.ATTR_DB_CONNECTION_STRING = "db.connection_string"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_REDIS = "redis"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-ioredis@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-ioredis/build/src/utils.js -var require_utils20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.endSpan = undefined; - var api_1 = require_src(); - var endSpan = (span, err) => { - if (err) { - span.recordException(err); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - }; - exports.endSpan = endSpan; -}); - -// ../../../../node_modules/.bun/@opentelemetry+redis-common@0.38.2/node_modules/@opentelemetry/redis-common/build/src/index.js -var require_src27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultDbStatementSerializer = undefined; - var serializationSubsets = [ - { - regex: /^ECHO/i, - args: 0 - }, - { - regex: /^(LPUSH|MSET|PFA|PUBLISH|RPUSH|SADD|SET|SPUBLISH|XADD|ZADD)/i, - args: 1 - }, - { - regex: /^(HSET|HMSET|LSET|LINSERT)/i, - args: 2 - }, - { - regex: /^(ACL|BIT|B[LRZ]|CLIENT|CLUSTER|CONFIG|COMMAND|DECR|DEL|EVAL|EX|FUNCTION|GEO|GET|HINCR|HMGET|HSCAN|INCR|L[TRLM]|MEMORY|P[EFISTU]|RPOP|S[CDIMORSU]|XACK|X[CDGILPRT]|Z[CDILMPRS])/i, - args: -1 - } - ]; - var defaultDbStatementSerializer = (cmdName, cmdArgs) => { - if (Array.isArray(cmdArgs) && cmdArgs.length) { - const nArgsToSerialize = serializationSubsets.find(({ regex }) => { - return regex.test(cmdName); - })?.args ?? 0; - const argsToSerialize = nArgsToSerialize >= 0 ? cmdArgs.slice(0, nArgsToSerialize) : cmdArgs; - if (cmdArgs.length > argsToSerialize.length) { - argsToSerialize.push(`[${cmdArgs.length - nArgsToSerialize} other arguments]`); - } - return `${cmdName} ${argsToSerialize.join(" ")}`; - } - return cmdName; - }; - exports.defaultDbStatementSerializer = defaultDbStatementSerializer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-ioredis@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-ioredis/build/src/version.js -var require_version21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.55.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-ioredis"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-ioredis@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-ioredis/build/src/instrumentation.js -var require_instrumentation17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.IORedisInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv11(); - var instrumentation_2 = require_src9(); - var utils_1 = require_utils20(); - var redis_common_1 = require_src27(); - var version_1 = require_version21(); - var DEFAULT_CONFIG = { - requireParentSpan: true - }; - - class IORedisInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config2 }); - } - setConfig(config2 = {}) { - super.setConfig({ ...DEFAULT_CONFIG, ...config2 }); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("ioredis", [">=2.0.0 <6"], (module2, moduleVersion) => { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.sendCommand)) { - this._unwrap(moduleExports.prototype, "sendCommand"); - } - this._wrap(moduleExports.prototype, "sendCommand", this._patchSendCommand(moduleVersion)); - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.connect)) { - this._unwrap(moduleExports.prototype, "connect"); - } - this._wrap(moduleExports.prototype, "connect", this._patchConnection()); - return module2; - }, (module2) => { - if (module2 === undefined) - return; - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - this._unwrap(moduleExports.prototype, "sendCommand"); - this._unwrap(moduleExports.prototype, "connect"); - }) - ]; - } - _patchSendCommand(moduleVersion) { - return (original) => { - return this._traceSendCommand(original, moduleVersion); - }; - } - _patchConnection() { - return (original) => { - return this._traceConnection(original); - }; - } - _traceSendCommand(original, moduleVersion) { - const instrumentation = this; - return function(cmd) { - if (arguments.length < 1 || typeof cmd !== "object") { - return original.apply(this, arguments); - } - const config2 = instrumentation.getConfig(); - const dbStatementSerializer = config2.dbStatementSerializer || redis_common_1.defaultDbStatementSerializer; - const hasNoParentSpan = api_1.trace.getSpan(api_1.context.active()) === undefined; - if (config2.requireParentSpan === true && hasNoParentSpan) { - return original.apply(this, arguments); - } - const span = instrumentation.tracer.startSpan(cmd.name, { - kind: api_1.SpanKind.CLIENT, - attributes: { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_REDIS, - [semconv_1.ATTR_DB_STATEMENT]: dbStatementSerializer(cmd.name, cmd.args) - } - }); - const { requestHook } = config2; - if (requestHook) { - (0, instrumentation_2.safeExecuteInTheMiddle)(() => requestHook(span, { - moduleVersion, - cmdName: cmd.name, - cmdArgs: cmd.args - }), (e) => { - if (e) { - api_1.diag.error("ioredis instrumentation: request hook failed", e); - } - }, true); - } - const { host, port } = this.options; - span.setAttributes({ - [semconv_1.ATTR_NET_PEER_NAME]: host, - [semconv_1.ATTR_NET_PEER_PORT]: port, - [semconv_1.ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}` - }); - try { - const result = original.apply(this, arguments); - const origResolve = cmd.resolve; - cmd.resolve = function(result2) { - (0, instrumentation_2.safeExecuteInTheMiddle)(() => config2.responseHook?.(span, cmd.name, cmd.args, result2), (e) => { - if (e) { - api_1.diag.error("ioredis instrumentation: response hook failed", e); - } - }, true); - (0, utils_1.endSpan)(span, null); - origResolve(result2); - }; - const origReject = cmd.reject; - cmd.reject = function(err) { - (0, utils_1.endSpan)(span, err); - origReject(err); - }; - return result; - } catch (error48) { - (0, utils_1.endSpan)(span, error48); - throw error48; - } - }; - } - _traceConnection(original) { - const instrumentation = this; - return function() { - const hasNoParentSpan = api_1.trace.getSpan(api_1.context.active()) === undefined; - if (instrumentation.getConfig().requireParentSpan === true && hasNoParentSpan) { - return original.apply(this, arguments); - } - const span = instrumentation.tracer.startSpan("connect", { - kind: api_1.SpanKind.CLIENT, - attributes: { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_REDIS, - [semconv_1.ATTR_DB_STATEMENT]: "connect" - } - }); - const { host, port } = this.options; - span.setAttributes({ - [semconv_1.ATTR_NET_PEER_NAME]: host, - [semconv_1.ATTR_NET_PEER_PORT]: port, - [semconv_1.ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}` - }); - try { - const client = original.apply(this, arguments); - (0, utils_1.endSpan)(span, null); - return client; - } catch (error48) { - (0, utils_1.endSpan)(span, error48); - throw error48; - } - }; - } - } - exports.IORedisInstrumentation = IORedisInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-ioredis@0.55.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-ioredis/build/src/index.js -var require_src28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.IORedisInstrumentation = undefined; - var instrumentation_1 = require_instrumentation17(); - Object.defineProperty(exports, "IORedisInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.IORedisInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-kafkajs@0.17.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-kafkajs/build/src/internal-types.js -var require_internal_types6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EVENT_LISTENERS_SET = undefined; - exports.EVENT_LISTENERS_SET = Symbol("opentelemetry.instrumentation.kafkajs.eventListenersSet"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-kafkajs@0.17.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-kafkajs/build/src/propagator.js -var require_propagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.bufferTextMapGetter = undefined; - exports.bufferTextMapGetter = { - get(carrier, key) { - if (!carrier) { - return; - } - const keys = Object.keys(carrier); - for (const carrierKey of keys) { - if (carrierKey === key || carrierKey.toLowerCase() === key) { - return carrier[carrierKey]?.toString(); - } - } - return; - }, - keys(carrier) { - return carrier ? Object.keys(carrier) : []; - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-kafkajs@0.17.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-kafkajs/build/src/semconv.js -var require_semconv12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.METRIC_MESSAGING_PROCESS_DURATION = exports.METRIC_MESSAGING_CLIENT_SENT_MESSAGES = exports.METRIC_MESSAGING_CLIENT_OPERATION_DURATION = exports.METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES = exports.MESSAGING_SYSTEM_VALUE_KAFKA = exports.MESSAGING_OPERATION_TYPE_VALUE_SEND = exports.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = exports.MESSAGING_OPERATION_TYPE_VALUE_PROCESS = exports.ATTR_MESSAGING_SYSTEM = exports.ATTR_MESSAGING_OPERATION_TYPE = exports.ATTR_MESSAGING_OPERATION_NAME = exports.ATTR_MESSAGING_KAFKA_OFFSET = exports.ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE = exports.ATTR_MESSAGING_KAFKA_MESSAGE_KEY = exports.ATTR_MESSAGING_DESTINATION_PARTITION_ID = exports.ATTR_MESSAGING_DESTINATION_NAME = exports.ATTR_MESSAGING_BATCH_MESSAGE_COUNT = undefined; - exports.ATTR_MESSAGING_BATCH_MESSAGE_COUNT = "messaging.batch.message_count"; - exports.ATTR_MESSAGING_DESTINATION_NAME = "messaging.destination.name"; - exports.ATTR_MESSAGING_DESTINATION_PARTITION_ID = "messaging.destination.partition.id"; - exports.ATTR_MESSAGING_KAFKA_MESSAGE_KEY = "messaging.kafka.message.key"; - exports.ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE = "messaging.kafka.message.tombstone"; - exports.ATTR_MESSAGING_KAFKA_OFFSET = "messaging.kafka.offset"; - exports.ATTR_MESSAGING_OPERATION_NAME = "messaging.operation.name"; - exports.ATTR_MESSAGING_OPERATION_TYPE = "messaging.operation.type"; - exports.ATTR_MESSAGING_SYSTEM = "messaging.system"; - exports.MESSAGING_OPERATION_TYPE_VALUE_PROCESS = "process"; - exports.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = "receive"; - exports.MESSAGING_OPERATION_TYPE_VALUE_SEND = "send"; - exports.MESSAGING_SYSTEM_VALUE_KAFKA = "kafka"; - exports.METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES = "messaging.client.consumed.messages"; - exports.METRIC_MESSAGING_CLIENT_OPERATION_DURATION = "messaging.client.operation.duration"; - exports.METRIC_MESSAGING_CLIENT_SENT_MESSAGES = "messaging.client.sent.messages"; - exports.METRIC_MESSAGING_PROCESS_DURATION = "messaging.process.duration"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-kafkajs@0.17.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-kafkajs/build/src/version.js -var require_version22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.17.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-kafkajs"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-kafkajs@0.17.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-kafkajs/build/src/instrumentation.js -var require_instrumentation18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KafkaJsInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var internal_types_1 = require_internal_types6(); - var propagator_1 = require_propagator(); - var semconv_1 = require_semconv12(); - var version_1 = require_version22(); - function prepareCounter(meter, value, attributes) { - return (errorType) => { - meter.add(value, { - ...attributes, - ...errorType ? { [semantic_conventions_1.ATTR_ERROR_TYPE]: errorType } : {} - }); - }; - } - function prepareDurationHistogram(meter, value, attributes) { - return (errorType) => { - meter.record((Date.now() - value) / 1000, { - ...attributes, - ...errorType ? { [semantic_conventions_1.ATTR_ERROR_TYPE]: errorType } : {} - }); - }; - } - var HISTOGRAM_BUCKET_BOUNDARIES = [ - 0.005, - 0.01, - 0.025, - 0.05, - 0.075, - 0.1, - 0.25, - 0.5, - 0.75, - 1, - 2.5, - 5, - 7.5, - 10 - ]; - - class KafkaJsInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - _updateMetricInstruments() { - this._clientDuration = this.meter.createHistogram(semconv_1.METRIC_MESSAGING_CLIENT_OPERATION_DURATION, { advice: { explicitBucketBoundaries: HISTOGRAM_BUCKET_BOUNDARIES } }); - this._sentMessages = this.meter.createCounter(semconv_1.METRIC_MESSAGING_CLIENT_SENT_MESSAGES); - this._consumedMessages = this.meter.createCounter(semconv_1.METRIC_MESSAGING_CLIENT_CONSUMED_MESSAGES); - this._processDuration = this.meter.createHistogram(semconv_1.METRIC_MESSAGING_PROCESS_DURATION, { advice: { explicitBucketBoundaries: HISTOGRAM_BUCKET_BOUNDARIES } }); - } - init() { - const unpatch = (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.Kafka?.prototype.producer)) { - this._unwrap(moduleExports.Kafka.prototype, "producer"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.Kafka?.prototype.consumer)) { - this._unwrap(moduleExports.Kafka.prototype, "consumer"); - } - }; - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition("kafkajs", [">=0.3.0 <3"], (moduleExports) => { - unpatch(moduleExports); - this._wrap(moduleExports?.Kafka?.prototype, "producer", this._getProducerPatch()); - this._wrap(moduleExports?.Kafka?.prototype, "consumer", this._getConsumerPatch()); - return moduleExports; - }, unpatch); - return module2; - } - _getConsumerPatch() { - const instrumentation = this; - return (original) => { - return function consumer(...args) { - const newConsumer = original.apply(this, args); - if ((0, instrumentation_1.isWrapped)(newConsumer.run)) { - instrumentation._unwrap(newConsumer, "run"); - } - instrumentation._wrap(newConsumer, "run", instrumentation._getConsumerRunPatch()); - instrumentation._setKafkaEventListeners(newConsumer); - return newConsumer; - }; - }; - } - _setKafkaEventListeners(kafkaObj) { - if (kafkaObj[internal_types_1.EVENT_LISTENERS_SET]) - return; - if (kafkaObj.events?.REQUEST) { - kafkaObj.on(kafkaObj.events.REQUEST, this._recordClientDurationMetric.bind(this)); - } - kafkaObj[internal_types_1.EVENT_LISTENERS_SET] = true; - } - _recordClientDurationMetric(event) { - const [address, port] = event.payload.broker.split(":"); - this._clientDuration.record(event.payload.duration / 1000, { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: `${event.payload.apiName}`, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: address, - [semantic_conventions_1.ATTR_SERVER_PORT]: Number.parseInt(port, 10) - }); - } - _getProducerPatch() { - const instrumentation = this; - return (original) => { - return function consumer(...args) { - const newProducer = original.apply(this, args); - if ((0, instrumentation_1.isWrapped)(newProducer.sendBatch)) { - instrumentation._unwrap(newProducer, "sendBatch"); - } - instrumentation._wrap(newProducer, "sendBatch", instrumentation._getSendBatchPatch()); - if ((0, instrumentation_1.isWrapped)(newProducer.send)) { - instrumentation._unwrap(newProducer, "send"); - } - instrumentation._wrap(newProducer, "send", instrumentation._getSendPatch()); - if ((0, instrumentation_1.isWrapped)(newProducer.transaction)) { - instrumentation._unwrap(newProducer, "transaction"); - } - instrumentation._wrap(newProducer, "transaction", instrumentation._getProducerTransactionPatch()); - instrumentation._setKafkaEventListeners(newProducer); - return newProducer; - }; - }; - } - _getConsumerRunPatch() { - const instrumentation = this; - return (original) => { - return function run(...args) { - const config2 = args[0]; - if (config2?.eachMessage) { - if ((0, instrumentation_1.isWrapped)(config2.eachMessage)) { - instrumentation._unwrap(config2, "eachMessage"); - } - instrumentation._wrap(config2, "eachMessage", instrumentation._getConsumerEachMessagePatch()); - } - if (config2?.eachBatch) { - if ((0, instrumentation_1.isWrapped)(config2.eachBatch)) { - instrumentation._unwrap(config2, "eachBatch"); - } - instrumentation._wrap(config2, "eachBatch", instrumentation._getConsumerEachBatchPatch()); - } - return original.call(this, config2); - }; - }; - } - _getConsumerEachMessagePatch() { - const instrumentation = this; - return (original) => { - return function eachMessage(...args) { - const payload = args[0]; - const propagatedContext = api_1.propagation.extract(api_1.ROOT_CONTEXT, payload.message.headers, propagator_1.bufferTextMapGetter); - const span = instrumentation._startConsumerSpan({ - topic: payload.topic, - message: payload.message, - operationType: semconv_1.MESSAGING_OPERATION_TYPE_VALUE_PROCESS, - ctx: propagatedContext, - attributes: { - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition) - } - }); - const pendingMetrics = [ - prepareDurationHistogram(instrumentation._processDuration, Date.now(), { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "process", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: payload.topic, - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition) - }), - prepareCounter(instrumentation._consumedMessages, 1, { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "process", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: payload.topic, - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition) - }) - ]; - const eachMessagePromise = api_1.context.with(api_1.trace.setSpan(propagatedContext, span), () => { - return original.apply(this, args); - }); - return instrumentation._endSpansOnPromise([span], pendingMetrics, eachMessagePromise); - }; - }; - } - _getConsumerEachBatchPatch() { - return (original) => { - const instrumentation = this; - return function eachBatch(...args) { - const payload = args[0]; - const receivingSpan = instrumentation._startConsumerSpan({ - topic: payload.batch.topic, - message: undefined, - operationType: semconv_1.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE, - ctx: api_1.ROOT_CONTEXT, - attributes: { - [semconv_1.ATTR_MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length, - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition) - } - }); - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), receivingSpan), () => { - const startTime = Date.now(); - const spans = []; - const pendingMetrics = [ - prepareCounter(instrumentation._consumedMessages, payload.batch.messages.length, { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "process", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: payload.batch.topic, - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition) - }) - ]; - payload.batch.messages.forEach((message) => { - const propagatedContext = api_1.propagation.extract(api_1.ROOT_CONTEXT, message.headers, propagator_1.bufferTextMapGetter); - const spanContext = api_1.trace.getSpan(propagatedContext)?.spanContext(); - let origSpanLink; - if (spanContext) { - origSpanLink = { - context: spanContext - }; - } - spans.push(instrumentation._startConsumerSpan({ - topic: payload.batch.topic, - message, - operationType: semconv_1.MESSAGING_OPERATION_TYPE_VALUE_PROCESS, - link: origSpanLink, - attributes: { - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition) - } - })); - pendingMetrics.push(prepareDurationHistogram(instrumentation._processDuration, startTime, { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "process", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: payload.batch.topic, - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition) - })); - }); - const batchMessagePromise = original.apply(this, args); - spans.unshift(receivingSpan); - return instrumentation._endSpansOnPromise(spans, pendingMetrics, batchMessagePromise); - }); - }; - }; - } - _getProducerTransactionPatch() { - const instrumentation = this; - return (original) => { - return function transaction(...args) { - const transactionSpan = instrumentation.tracer.startSpan("transaction"); - const transactionPromise = original.apply(this, args); - transactionPromise.then((transaction) => { - const originalSend = transaction.send; - transaction.send = function send(...args2) { - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), transactionSpan), () => { - const patched = instrumentation._getSendPatch()(originalSend); - return patched.apply(this, args2).catch((err) => { - transactionSpan.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err?.message - }); - transactionSpan.recordException(err); - throw err; - }); - }); - }; - const originalSendBatch = transaction.sendBatch; - transaction.sendBatch = function sendBatch(...args2) { - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), transactionSpan), () => { - const patched = instrumentation._getSendBatchPatch()(originalSendBatch); - return patched.apply(this, args2).catch((err) => { - transactionSpan.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err?.message - }); - transactionSpan.recordException(err); - throw err; - }); - }); - }; - const originalCommit = transaction.commit; - transaction.commit = function commit(...args2) { - const originCommitPromise = originalCommit.apply(this, args2).then(() => { - transactionSpan.setStatus({ code: api_1.SpanStatusCode.OK }); - }); - return instrumentation._endSpansOnPromise([transactionSpan], [], originCommitPromise); - }; - const originalAbort = transaction.abort; - transaction.abort = function abort(...args2) { - const originAbortPromise = originalAbort.apply(this, args2); - return instrumentation._endSpansOnPromise([transactionSpan], [], originAbortPromise); - }; - }).catch((err) => { - transactionSpan.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err?.message - }); - transactionSpan.recordException(err); - transactionSpan.end(); - }); - return transactionPromise; - }; - }; - } - _getSendBatchPatch() { - const instrumentation = this; - return (original) => { - return function sendBatch(...args) { - const batch = args[0]; - const messages = batch.topicMessages || []; - const spans = []; - const pendingMetrics = []; - messages.forEach((topicMessage) => { - topicMessage.messages.forEach((message) => { - spans.push(instrumentation._startProducerSpan(topicMessage.topic, message)); - pendingMetrics.push(prepareCounter(instrumentation._sentMessages, 1, { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "send", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: topicMessage.topic, - ...message.partition !== undefined ? { - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(message.partition) - } : {} - })); - }); - }); - const origSendResult = original.apply(this, args); - return instrumentation._endSpansOnPromise(spans, pendingMetrics, origSendResult); - }; - }; - } - _getSendPatch() { - const instrumentation = this; - return (original) => { - return function send(...args) { - const record3 = args[0]; - const spans = record3.messages.map((message) => { - return instrumentation._startProducerSpan(record3.topic, message); - }); - const pendingMetrics = record3.messages.map((m) => prepareCounter(instrumentation._sentMessages, 1, { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "send", - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: record3.topic, - ...m.partition !== undefined ? { - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(m.partition) - } : {} - })); - const origSendResult = original.apply(this, args); - return instrumentation._endSpansOnPromise(spans, pendingMetrics, origSendResult); - }; - }; - } - _endSpansOnPromise(spans, pendingMetrics, sendPromise) { - return Promise.resolve(sendPromise).then((result) => { - pendingMetrics.forEach((m) => m()); - return result; - }).catch((reason) => { - let errorMessage; - let errorType = semantic_conventions_1.ERROR_TYPE_VALUE_OTHER; - if (typeof reason === "string" || reason === undefined) { - errorMessage = reason; - } else if (typeof reason === "object" && Object.prototype.hasOwnProperty.call(reason, "message")) { - errorMessage = reason.message; - errorType = reason.constructor.name; - } - pendingMetrics.forEach((m) => m(errorType)); - spans.forEach((span) => { - span.setAttribute(semantic_conventions_1.ATTR_ERROR_TYPE, errorType); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: errorMessage - }); - }); - throw reason; - }).finally(() => { - spans.forEach((span) => span.end()); - }); - } - _startConsumerSpan({ topic, message, operationType, ctx, link, attributes }) { - const operationName = operationType === semconv_1.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? "poll" : operationType; - const span = this.tracer.startSpan(`${operationName} ${topic}`, { - kind: operationType === semconv_1.MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? api_1.SpanKind.CLIENT : api_1.SpanKind.CONSUMER, - attributes: { - ...attributes, - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: topic, - [semconv_1.ATTR_MESSAGING_OPERATION_TYPE]: operationType, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: operationName, - [semconv_1.ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : undefined, - [semconv_1.ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : undefined, - [semconv_1.ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset - }, - links: link ? [link] : [] - }, ctx); - const { consumerHook } = this.getConfig(); - if (consumerHook && message) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => consumerHook(span, { topic, message }), (e) => { - if (e) - this._diag.error("consumerHook error", e); - }, true); - } - return span; - } - _startProducerSpan(topic, message) { - const span = this.tracer.startSpan(`send ${topic}`, { - kind: api_1.SpanKind.PRODUCER, - attributes: { - [semconv_1.ATTR_MESSAGING_SYSTEM]: semconv_1.MESSAGING_SYSTEM_VALUE_KAFKA, - [semconv_1.ATTR_MESSAGING_DESTINATION_NAME]: topic, - [semconv_1.ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : undefined, - [semconv_1.ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : undefined, - [semconv_1.ATTR_MESSAGING_DESTINATION_PARTITION_ID]: message.partition !== undefined ? String(message.partition) : undefined, - [semconv_1.ATTR_MESSAGING_OPERATION_NAME]: "send", - [semconv_1.ATTR_MESSAGING_OPERATION_TYPE]: semconv_1.MESSAGING_OPERATION_TYPE_VALUE_SEND - } - }); - message.headers = message.headers ?? {}; - api_1.propagation.inject(api_1.trace.setSpan(api_1.context.active(), span), message.headers); - const { producerHook } = this.getConfig(); - if (producerHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => producerHook(span, { topic, message }), (e) => { - if (e) - this._diag.error("producerHook error", e); - }, true); - } - return span; - } - } - exports.KafkaJsInstrumentation = KafkaJsInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-kafkajs@0.17.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-kafkajs/build/src/index.js -var require_src29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KafkaJsInstrumentation = undefined; - var instrumentation_1 = require_instrumentation18(); - Object.defineProperty(exports, "KafkaJsInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.KafkaJsInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-knex@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-knex/build/src/version.js -var require_version23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.52.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-knex"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-knex@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-knex/build/src/constants.js -var require_constants5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SUPPORTED_VERSIONS = exports.MODULE_NAME = undefined; - exports.MODULE_NAME = "knex"; - exports.SUPPORTED_VERSIONS = [ - ">=0.22.0 <4", - ">=0.10.0 <0.18.0", - ">=0.19.0 <0.22.0", - ">=0.18.0 <0.19.0" - ]; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-knex@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-knex/build/src/semconv.js -var require_semconv13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_NAME_VALUE_SQLITE = exports.ATTR_NET_TRANSPORT = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_SQL_TABLE = exports.ATTR_DB_OPERATION = exports.ATTR_DB_NAME = undefined; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_OPERATION = "db.operation"; - exports.ATTR_DB_SQL_TABLE = "db.sql.table"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.ATTR_NET_TRANSPORT = "net.transport"; - exports.DB_SYSTEM_NAME_VALUE_SQLITE = "sqlite"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-knex@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-knex/build/src/utils.js -var require_utils21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.extractTableName = exports.limitLength = exports.getName = exports.mapSystem = exports.otelExceptionFromKnexError = exports.getFormatter = undefined; - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv13(); - var getFormatter = (runner) => { - if (runner) { - if (runner.client) { - if (runner.client._formatQuery) { - return runner.client._formatQuery.bind(runner.client); - } else if (runner.client.SqlString) { - return runner.client.SqlString.format.bind(runner.client.SqlString); - } - } - if (runner.builder) { - return runner.builder.toString.bind(runner.builder); - } - } - return () => ""; - }; - exports.getFormatter = getFormatter; - function otelExceptionFromKnexError(err, message) { - if (!(err && err instanceof Error)) { - return err; - } - return { - message, - code: err.code, - stack: err.stack, - name: err.name - }; - } - exports.otelExceptionFromKnexError = otelExceptionFromKnexError; - var systemMap = new Map([ - ["sqlite3", semconv_1.DB_SYSTEM_NAME_VALUE_SQLITE], - ["pg", semantic_conventions_1.DB_SYSTEM_NAME_VALUE_POSTGRESQL] - ]); - var mapSystem = (knexSystem) => { - return systemMap.get(knexSystem) || knexSystem; - }; - exports.mapSystem = mapSystem; - var getName = (db2, operation, table) => { - if (operation) { - if (table) { - return `${operation} ${db2}.${table}`; - } - return `${operation} ${db2}`; - } - return db2; - }; - exports.getName = getName; - var limitLength = (str, maxLength) => { - if (typeof str === "string" && typeof maxLength === "number" && 0 < maxLength && maxLength < str.length) { - return str.substring(0, maxLength) + ".."; - } - return str; - }; - exports.limitLength = limitLength; - var extractTableName = (builder) => { - const table = builder?._single?.table; - if (typeof table === "object") { - return (0, exports.extractTableName)(table); - } - return table; - }; - exports.extractTableName = extractTableName; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-knex@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-knex/build/src/instrumentation.js -var require_instrumentation19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KnexInstrumentation = undefined; - var api4 = require_src(); - var version_1 = require_version23(); - var constants = require_constants5(); - var instrumentation_1 = require_src9(); - var utils = require_utils21(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv13(); - var contextSymbol = Symbol("opentelemetry.instrumentation-knex.context"); - var DEFAULT_CONFIG = { - maxQueryLength: 1022, - requireParentSpan: false - }; - - class KnexInstrumentation extends instrumentation_1.InstrumentationBase { - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config2 }); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - setConfig(config2 = {}) { - super.setConfig({ ...DEFAULT_CONFIG, ...config2 }); - } - init() { - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition(constants.MODULE_NAME, constants.SUPPORTED_VERSIONS); - module2.files.push(this.getClientNodeModuleFileInstrumentation("src"), this.getClientNodeModuleFileInstrumentation("lib"), this.getRunnerNodeModuleFileInstrumentation("src"), this.getRunnerNodeModuleFileInstrumentation("lib"), this.getRunnerNodeModuleFileInstrumentation("lib/execution")); - return module2; - } - getRunnerNodeModuleFileInstrumentation(basePath) { - return new instrumentation_1.InstrumentationNodeModuleFile(`knex/${basePath}/runner.js`, constants.SUPPORTED_VERSIONS, (Runner, moduleVersion) => { - this.ensureWrapped(Runner.prototype, "query", this.createQueryWrapper(moduleVersion)); - return Runner; - }, (Runner, moduleVersion) => { - this._unwrap(Runner.prototype, "query"); - return Runner; - }); - } - getClientNodeModuleFileInstrumentation(basePath) { - return new instrumentation_1.InstrumentationNodeModuleFile(`knex/${basePath}/client.js`, constants.SUPPORTED_VERSIONS, (Client) => { - this.ensureWrapped(Client.prototype, "queryBuilder", this.storeContext.bind(this)); - this.ensureWrapped(Client.prototype, "schemaBuilder", this.storeContext.bind(this)); - this.ensureWrapped(Client.prototype, "raw", this.storeContext.bind(this)); - return Client; - }, (Client) => { - this._unwrap(Client.prototype, "queryBuilder"); - this._unwrap(Client.prototype, "schemaBuilder"); - this._unwrap(Client.prototype, "raw"); - return Client; - }); - } - createQueryWrapper(moduleVersion) { - const instrumentation = this; - return function wrapQuery(original) { - return function wrapped_logging_method(query) { - const config2 = this.client.config; - const table = utils.extractTableName(this.builder); - const operation = query?.method; - const name = config2?.connection?.filename || config2?.connection?.database; - const { maxQueryLength } = instrumentation.getConfig(); - const attributes = { - "knex.version": moduleVersion - }; - const transport = config2?.connection?.filename === ":memory:" ? "inproc" : undefined; - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.OLD) { - Object.assign(attributes, { - [semconv_1.ATTR_DB_SYSTEM]: utils.mapSystem(config2.client), - [semconv_1.ATTR_DB_SQL_TABLE]: table, - [semconv_1.ATTR_DB_OPERATION]: operation, - [semconv_1.ATTR_DB_USER]: config2?.connection?.user, - [semconv_1.ATTR_DB_NAME]: name, - [semconv_1.ATTR_NET_PEER_NAME]: config2?.connection?.host, - [semconv_1.ATTR_NET_PEER_PORT]: config2?.connection?.port, - [semconv_1.ATTR_NET_TRANSPORT]: transport - }); - } - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.STABLE) { - Object.assign(attributes, { - [semantic_conventions_1.ATTR_DB_SYSTEM_NAME]: utils.mapSystem(config2.client), - [semantic_conventions_1.ATTR_DB_COLLECTION_NAME]: table, - [semantic_conventions_1.ATTR_DB_OPERATION_NAME]: operation, - [semantic_conventions_1.ATTR_DB_NAMESPACE]: name, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: config2?.connection?.host, - [semantic_conventions_1.ATTR_SERVER_PORT]: config2?.connection?.port - }); - } - if (maxQueryLength) { - const queryText = utils.limitLength(query?.sql, maxQueryLength); - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = queryText; - } - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.OLD) { - attributes[semconv_1.ATTR_DB_STATEMENT] = queryText; - } - } - const parentContext = this.builder[contextSymbol] || api4.context.active(); - const parentSpan = api4.trace.getSpan(parentContext); - const hasActiveParent = parentSpan && api4.trace.isSpanContextValid(parentSpan.spanContext()); - if (instrumentation._config.requireParentSpan && !hasActiveParent) { - return original.bind(this)(...arguments); - } - const span = instrumentation.tracer.startSpan(utils.getName(name, operation, table), { - kind: api4.SpanKind.CLIENT, - attributes - }, parentContext); - const spanContext = api4.trace.setSpan(api4.context.active(), span); - return api4.context.with(spanContext, original, this, ...arguments).then((result) => { - span.end(); - return result; - }).catch((err) => { - const formatter = utils.getFormatter(this); - const fullQuery = formatter(query.sql, query.bindings || []); - const message = err.message.replace(fullQuery + " - ", ""); - const exc = utils.otelExceptionFromKnexError(err, message); - span.recordException(exc); - span.setStatus({ code: api4.SpanStatusCode.ERROR, message }); - span.end(); - throw err; - }); - }; - }; - } - storeContext(original) { - return function wrapped_logging_method() { - const builder = original.apply(this, arguments); - Object.defineProperty(builder, contextSymbol, { - value: api4.context.active() - }); - return builder; - }; - } - ensureWrapped(obj, methodName, wrapper) { - if ((0, instrumentation_1.isWrapped)(obj[methodName])) { - this._unwrap(obj, methodName); - } - this._wrap(obj, methodName, wrapper); - } - } - exports.KnexInstrumentation = KnexInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-knex@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-knex/build/src/index.js -var require_src30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KnexInstrumentation = undefined; - var instrumentation_1 = require_instrumentation19(); - Object.defineProperty(exports, "KnexInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.KnexInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/types.js -var require_types4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KoaLayerType = undefined; - var KoaLayerType; - (function(KoaLayerType2) { - KoaLayerType2["ROUTER"] = "router"; - KoaLayerType2["MIDDLEWARE"] = "middleware"; - })(KoaLayerType = exports.KoaLayerType || (exports.KoaLayerType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/version.js -var require_version24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.56.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-koa"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/enums/AttributeNames.js -var require_AttributeNames9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["KOA_TYPE"] = "koa.type"; - AttributeNames2["KOA_NAME"] = "koa.name"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/utils.js -var require_utils22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isLayerIgnored = exports.getMiddlewareMetadata = undefined; - var types_1 = require_types4(); - var AttributeNames_1 = require_AttributeNames9(); - var semantic_conventions_1 = require_src3(); - var getMiddlewareMetadata = (context8, layer, isRouter, layerPath) => { - if (isRouter) { - return { - attributes: { - [AttributeNames_1.AttributeNames.KOA_NAME]: layerPath?.toString(), - [AttributeNames_1.AttributeNames.KOA_TYPE]: types_1.KoaLayerType.ROUTER, - [semantic_conventions_1.ATTR_HTTP_ROUTE]: layerPath?.toString() - }, - name: context8._matchedRouteName || `router - ${layerPath}` - }; - } else { - return { - attributes: { - [AttributeNames_1.AttributeNames.KOA_NAME]: layer.name ?? "middleware", - [AttributeNames_1.AttributeNames.KOA_TYPE]: types_1.KoaLayerType.MIDDLEWARE - }, - name: `middleware - ${layer.name}` - }; - } - }; - exports.getMiddlewareMetadata = getMiddlewareMetadata; - var isLayerIgnored = (type, config2) => { - return !!(Array.isArray(config2?.ignoreLayersType) && config2?.ignoreLayersType?.includes(type)); - }; - exports.isLayerIgnored = isLayerIgnored; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/internal-types.js -var require_internal_types7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.kLayerPatched = undefined; - exports.kLayerPatched = Symbol("koa-layer-patched"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/instrumentation.js -var require_instrumentation20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KoaInstrumentation = undefined; - var api4 = require_src(); - var instrumentation_1 = require_src9(); - var types_1 = require_types4(); - var version_1 = require_version24(); - var utils_1 = require_utils22(); - var core_1 = require_src7(); - var internal_types_1 = require_internal_types7(); - - class KoaInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return new instrumentation_1.InstrumentationNodeModuleDefinition("koa", [">=2.0.0 <4"], (module2) => { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - if (moduleExports == null) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.use)) { - this._unwrap(moduleExports.prototype, "use"); - } - this._wrap(moduleExports.prototype, "use", this._getKoaUsePatch.bind(this)); - return module2; - }, (module2) => { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.use)) { - this._unwrap(moduleExports.prototype, "use"); - } - }); - } - _getKoaUsePatch(original) { - const plugin = this; - return function use(middlewareFunction) { - let patchedFunction; - if (middlewareFunction.router) { - patchedFunction = plugin._patchRouterDispatch(middlewareFunction); - } else { - patchedFunction = plugin._patchLayer(middlewareFunction, false); - } - return original.apply(this, [patchedFunction]); - }; - } - _patchRouterDispatch(dispatchLayer) { - api4.diag.debug("Patching @koa/router dispatch"); - const router = dispatchLayer.router; - const routesStack = router?.stack ?? []; - for (const pathLayer of routesStack) { - const path = pathLayer.path; - const pathStack = pathLayer.stack; - for (let j = 0;j < pathStack.length; j++) { - const routedMiddleware = pathStack[j]; - pathStack[j] = this._patchLayer(routedMiddleware, true, path); - } - } - return dispatchLayer; - } - _patchLayer(middlewareLayer, isRouter, layerPath) { - const layerType = isRouter ? types_1.KoaLayerType.ROUTER : types_1.KoaLayerType.MIDDLEWARE; - if (middlewareLayer[internal_types_1.kLayerPatched] === true || (0, utils_1.isLayerIgnored)(layerType, this.getConfig())) - return middlewareLayer; - if (middlewareLayer.constructor.name === "GeneratorFunction" || middlewareLayer.constructor.name === "AsyncGeneratorFunction") { - api4.diag.debug("ignoring generator-based Koa middleware layer"); - return middlewareLayer; - } - middlewareLayer[internal_types_1.kLayerPatched] = true; - api4.diag.debug("patching Koa middleware layer"); - return async (context8, next) => { - const parent = api4.trace.getSpan(api4.context.active()); - if (parent === undefined) { - return middlewareLayer(context8, next); - } - const metadata = (0, utils_1.getMiddlewareMetadata)(context8, middlewareLayer, isRouter, layerPath); - const span = this.tracer.startSpan(metadata.name, { - attributes: metadata.attributes - }); - const rpcMetadata = (0, core_1.getRPCMetadata)(api4.context.active()); - if (rpcMetadata?.type === core_1.RPCType.HTTP && context8._matchedRoute) { - rpcMetadata.route = context8._matchedRoute.toString(); - } - const { requestHook } = this.getConfig(); - if (requestHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => requestHook(span, { - context: context8, - middlewareLayer, - layerType - }), (e) => { - if (e) { - api4.diag.error("koa instrumentation: request hook failed", e); - } - }, true); - } - const newContext = api4.trace.setSpan(api4.context.active(), span); - return api4.context.with(newContext, async () => { - try { - return await middlewareLayer(context8, next); - } catch (err) { - span.recordException(err); - throw err; - } finally { - span.end(); - } - }); - }; - } - } - exports.KoaInstrumentation = KoaInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-koa@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-koa/build/src/index.js -var require_src31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.KoaLayerType = exports.AttributeNames = exports.KoaInstrumentation = undefined; - var instrumentation_1 = require_instrumentation20(); - Object.defineProperty(exports, "KoaInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.KoaInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames9(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); - var types_1 = require_types4(); - Object.defineProperty(exports, "KoaLayerType", { enumerable: true, get: function() { - return types_1.KoaLayerType; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-lru-memoizer@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-lru-memoizer/build/src/version.js -var require_version25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.52.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-lru-memoizer"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-lru-memoizer@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-lru-memoizer/build/src/instrumentation.js -var require_instrumentation21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LruMemoizerInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var version_1 = require_version25(); - - class LruMemoizerInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("lru-memoizer", [">=1.3 <3"], (moduleExports) => { - const asyncMemoizer = function() { - const origMemoizer = moduleExports.apply(this, arguments); - return function() { - const modifiedArguments = [...arguments]; - const origCallback = modifiedArguments.pop(); - const callbackWithContext = typeof origCallback === "function" ? api_1.context.bind(api_1.context.active(), origCallback) : origCallback; - modifiedArguments.push(callbackWithContext); - return origMemoizer.apply(this, modifiedArguments); - }; - }; - asyncMemoizer.sync = moduleExports.sync; - return asyncMemoizer; - }, undefined) - ]; - } - } - exports.LruMemoizerInstrumentation = LruMemoizerInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-lru-memoizer@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-lru-memoizer/build/src/index.js -var require_src32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LruMemoizerInstrumentation = undefined; - var instrumentation_1 = require_instrumentation21(); - Object.defineProperty(exports, "LruMemoizerInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.LruMemoizerInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-memcached@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-memcached/build/src/semconv.js -var require_semconv14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_VALUE_MEMCACHED = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_OPERATION = undefined; - exports.ATTR_DB_OPERATION = "db.operation"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_MEMCACHED = "memcached"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-memcached@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-memcached/build/src/utils.js -var require_utils23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getPeerAttributes = undefined; - var semconv_1 = require_semconv14(); - var getPeerAttributes = (client, server, query) => { - if (!server) { - if (client.servers.length === 1) { - server = client.servers[0]; - } else { - let redundancy = client.redundancy && client.redundancy < client.servers.length; - const queryRedundancy = query.redundancyEnabled; - if (redundancy && queryRedundancy) { - redundancy = client.HashRing.range(query.key, client.redundancy + 1, true); - server = redundancy.shift(); - } else { - server = client.HashRing.get(query.key); - } - } - } - if (typeof server === "string") { - const [host, port] = server && server.split(":"); - if (host && port) { - const portNumber = parseInt(port, 10); - if (!isNaN(portNumber)) { - return { - [semconv_1.ATTR_NET_PEER_NAME]: host, - [semconv_1.ATTR_NET_PEER_PORT]: portNumber - }; - } - return { - [semconv_1.ATTR_NET_PEER_NAME]: host - }; - } - } - return {}; - }; - exports.getPeerAttributes = getPeerAttributes; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-memcached@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-memcached/build/src/version.js -var require_version26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.51.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-memcached"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-memcached@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-memcached/build/src/instrumentation.js -var require_instrumentation22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MemcachedInstrumentation = undefined; - var api4 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv14(); - var utils = require_utils23(); - var version_1 = require_version26(); - - class MemcachedInstrumentation extends instrumentation_1.InstrumentationBase { - static COMPONENT = "memcached"; - static COMMON_ATTRIBUTES = { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_MEMCACHED - }; - static DEFAULT_CONFIG = { - enhancedDatabaseReporting: false - }; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { - ...MemcachedInstrumentation.DEFAULT_CONFIG, - ...config2 - }); - } - setConfig(config2 = {}) { - super.setConfig({ ...MemcachedInstrumentation.DEFAULT_CONFIG, ...config2 }); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("memcached", [">=2.2.0 <3"], (moduleExports, moduleVersion) => { - this.ensureWrapped(moduleExports.prototype, "command", this.wrapCommand.bind(this, moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.prototype, "command"); - }) - ]; - } - wrapCommand(moduleVersion, original) { - const instrumentation = this; - return function(queryCompiler, server) { - if (typeof queryCompiler !== "function") { - return original.apply(this, arguments); - } - const span = instrumentation.tracer.startSpan("unknown memcached command", { - kind: api4.SpanKind.CLIENT, - attributes: { - "memcached.version": moduleVersion, - ...MemcachedInstrumentation.COMMON_ATTRIBUTES - } - }); - const parentContext = api4.context.active(); - const context8 = api4.trace.setSpan(parentContext, span); - return api4.context.with(context8, original, this, instrumentation.wrapQueryCompiler.call(instrumentation, queryCompiler, this, server, parentContext, span), server); - }; - } - wrapQueryCompiler(original, client, server, callbackContext, span) { - const instrumentation = this; - return function() { - const query = original.apply(this, arguments); - const callback = query.callback; - span.updateName(`memcached ${query.type}`); - span.setAttributes({ - "db.memcached.key": query.key, - "db.memcached.lifetime": query.lifetime, - [semconv_1.ATTR_DB_OPERATION]: query.type, - [semconv_1.ATTR_DB_STATEMENT]: instrumentation.getConfig().enhancedDatabaseReporting ? query.command : undefined, - ...utils.getPeerAttributes(client, server, query) - }); - query.callback = api4.context.bind(callbackContext, function(err) { - if (err) { - span.recordException(err); - span.setStatus({ - code: api4.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - if (typeof callback === "function") { - return callback.apply(this, arguments); - } - }); - return query; - }; - } - ensureWrapped(obj, methodName, wrapper) { - if ((0, instrumentation_1.isWrapped)(obj[methodName])) { - this._unwrap(obj, methodName); - } - this._wrap(obj, methodName, wrapper); - } - } - exports.MemcachedInstrumentation = MemcachedInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-memcached@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-memcached/build/src/index.js -var require_src33 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MemcachedInstrumentation = undefined; - var instrumentation_1 = require_instrumentation22(); - Object.defineProperty(exports, "MemcachedInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.MemcachedInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongodb@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongodb/build/src/semconv.js -var require_semconv15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = exports.DB_SYSTEM_VALUE_MONGODB = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_OPERATION = exports.ATTR_DB_NAME = exports.ATTR_DB_MONGODB_COLLECTION = exports.ATTR_DB_CONNECTION_STRING = undefined; - exports.ATTR_DB_CONNECTION_STRING = "db.connection_string"; - exports.ATTR_DB_MONGODB_COLLECTION = "db.mongodb.collection"; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_OPERATION = "db.operation"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_MONGODB = "mongodb"; - exports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = "db.client.connections.usage"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongodb@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongodb/build/src/internal-types.js -var require_internal_types8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MongodbCommandType = undefined; - var MongodbCommandType; - (function(MongodbCommandType2) { - MongodbCommandType2["CREATE_INDEXES"] = "createIndexes"; - MongodbCommandType2["FIND_AND_MODIFY"] = "findAndModify"; - MongodbCommandType2["IS_MASTER"] = "isMaster"; - MongodbCommandType2["COUNT"] = "count"; - MongodbCommandType2["AGGREGATE"] = "aggregate"; - MongodbCommandType2["UNKNOWN"] = "unknown"; - })(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongodb@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongodb/build/src/version.js -var require_version27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.60.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-mongodb"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongodb@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongodb/build/src/instrumentation.js -var require_instrumentation23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MongoDBInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv15(); - var internal_types_1 = require_internal_types8(); - var version_1 = require_version27(); - var DEFAULT_CONFIG = { - requireParentSpan: true - }; - - class MongoDBInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, { ...DEFAULT_CONFIG, ...config2 }); - } - setConfig(config2 = {}) { - super.setConfig({ ...DEFAULT_CONFIG, ...config2 }); - } - _updateMetricInstruments() { - this._connectionsUsage = this.meter.createUpDownCounter(semconv_1.METRIC_DB_CLIENT_CONNECTIONS_USAGE, { - description: "The number of connections that are currently in state described by the state attribute.", - unit: "{connection}" - }); - } - init() { - const { v3PatchConnection, v3UnpatchConnection } = this._getV3ConnectionPatches(); - const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches(); - const { v4PatchConnectionCallback, v4PatchConnectionPromise, v4UnpatchConnection } = this._getV4ConnectionPatches(); - const { v4PatchConnectionPool, v4UnpatchConnectionPool } = this._getV4ConnectionPoolPatches(); - const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches(); - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("mongodb", [">=3.3.0 <4"], undefined, undefined, [ - new instrumentation_1.InstrumentationNodeModuleFile("mongodb/lib/core/wireprotocol/index.js", [">=3.3.0 <4"], v3PatchConnection, v3UnpatchConnection) - ]), - new instrumentation_1.InstrumentationNodeModuleDefinition("mongodb", [">=4.0.0 <7"], undefined, undefined, [ - new instrumentation_1.InstrumentationNodeModuleFile("mongodb/lib/cmap/connection.js", [">=4.0.0 <6.4"], v4PatchConnectionCallback, v4UnpatchConnection), - new instrumentation_1.InstrumentationNodeModuleFile("mongodb/lib/cmap/connection.js", [">=6.4.0 <7"], v4PatchConnectionPromise, v4UnpatchConnection), - new instrumentation_1.InstrumentationNodeModuleFile("mongodb/lib/cmap/connection_pool.js", [">=4.0.0 <6.4"], v4PatchConnectionPool, v4UnpatchConnectionPool), - new instrumentation_1.InstrumentationNodeModuleFile("mongodb/lib/cmap/connect.js", [">=4.0.0 <7"], v4PatchConnect, v4UnpatchConnect), - new instrumentation_1.InstrumentationNodeModuleFile("mongodb/lib/sessions.js", [">=4.0.0 <7"], v4PatchSessions, v4UnpatchSessions) - ]) - ]; - } - _getV3ConnectionPatches() { - return { - v3PatchConnection: (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.insert)) { - this._unwrap(moduleExports, "insert"); - } - this._wrap(moduleExports, "insert", this._getV3PatchOperation("insert")); - if ((0, instrumentation_1.isWrapped)(moduleExports.remove)) { - this._unwrap(moduleExports, "remove"); - } - this._wrap(moduleExports, "remove", this._getV3PatchOperation("remove")); - if ((0, instrumentation_1.isWrapped)(moduleExports.update)) { - this._unwrap(moduleExports, "update"); - } - this._wrap(moduleExports, "update", this._getV3PatchOperation("update")); - if ((0, instrumentation_1.isWrapped)(moduleExports.command)) { - this._unwrap(moduleExports, "command"); - } - this._wrap(moduleExports, "command", this._getV3PatchCommand()); - if ((0, instrumentation_1.isWrapped)(moduleExports.query)) { - this._unwrap(moduleExports, "query"); - } - this._wrap(moduleExports, "query", this._getV3PatchFind()); - if ((0, instrumentation_1.isWrapped)(moduleExports.getMore)) { - this._unwrap(moduleExports, "getMore"); - } - this._wrap(moduleExports, "getMore", this._getV3PatchCursor()); - return moduleExports; - }, - v3UnpatchConnection: (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports, "insert"); - this._unwrap(moduleExports, "remove"); - this._unwrap(moduleExports, "update"); - this._unwrap(moduleExports, "command"); - this._unwrap(moduleExports, "query"); - this._unwrap(moduleExports, "getMore"); - } - }; - } - _getV4SessionsPatches() { - return { - v4PatchSessions: (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) { - this._unwrap(moduleExports, "acquire"); - } - this._wrap(moduleExports.ServerSessionPool.prototype, "acquire", this._getV4AcquireCommand()); - if ((0, instrumentation_1.isWrapped)(moduleExports.release)) { - this._unwrap(moduleExports, "release"); - } - this._wrap(moduleExports.ServerSessionPool.prototype, "release", this._getV4ReleaseCommand()); - return moduleExports; - }, - v4UnpatchSessions: (moduleExports) => { - if (moduleExports === undefined) - return; - if ((0, instrumentation_1.isWrapped)(moduleExports.acquire)) { - this._unwrap(moduleExports, "acquire"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.release)) { - this._unwrap(moduleExports, "release"); - } - } - }; - } - _getV4AcquireCommand() { - const instrumentation = this; - return (original) => { - return function patchAcquire() { - const nSessionsBeforeAcquire = this.sessions.length; - const session3 = original.call(this); - const nSessionsAfterAcquire = this.sessions.length; - if (nSessionsBeforeAcquire === nSessionsAfterAcquire) { - instrumentation._connectionsUsage.add(1, { - state: "used", - "pool.name": instrumentation._poolName - }); - } else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) { - instrumentation._connectionsUsage.add(-1, { - state: "idle", - "pool.name": instrumentation._poolName - }); - instrumentation._connectionsUsage.add(1, { - state: "used", - "pool.name": instrumentation._poolName - }); - } - return session3; - }; - }; - } - _getV4ReleaseCommand() { - const instrumentation = this; - return (original) => { - return function patchRelease(session3) { - const cmdPromise = original.call(this, session3); - instrumentation._connectionsUsage.add(-1, { - state: "used", - "pool.name": instrumentation._poolName - }); - instrumentation._connectionsUsage.add(1, { - state: "idle", - "pool.name": instrumentation._poolName - }); - return cmdPromise; - }; - }; - } - _getV4ConnectionPoolPatches() { - return { - v4PatchConnectionPool: (moduleExports) => { - const poolPrototype = moduleExports.ConnectionPool.prototype; - if ((0, instrumentation_1.isWrapped)(poolPrototype.checkOut)) { - this._unwrap(poolPrototype, "checkOut"); - } - this._wrap(poolPrototype, "checkOut", this._getV4ConnectionPoolCheckOut()); - return moduleExports; - }, - v4UnpatchConnectionPool: (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.ConnectionPool.prototype, "checkOut"); - } - }; - } - _getV4ConnectPatches() { - return { - v4PatchConnect: (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.connect)) { - this._unwrap(moduleExports, "connect"); - } - this._wrap(moduleExports, "connect", this._getV4ConnectCommand()); - return moduleExports; - }, - v4UnpatchConnect: (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports, "connect"); - } - }; - } - _getV4ConnectionPoolCheckOut() { - return (original) => { - return function patchedCheckout(callback) { - const patchedCallback = api_1.context.bind(api_1.context.active(), callback); - return original.call(this, patchedCallback); - }; - }; - } - _getV4ConnectCommand() { - const instrumentation = this; - return (original) => { - return function patchedConnect(options, callback) { - if (original.length === 1) { - const result = original.call(this, options); - if (result && typeof result.then === "function") { - result.then(() => instrumentation.setPoolName(options), () => { - return; - }); - } - return result; - } - const patchedCallback = function(err, conn) { - if (err || !conn) { - callback(err, conn); - return; - } - instrumentation.setPoolName(options); - callback(err, conn); - }; - return original.call(this, options, patchedCallback); - }; - }; - } - _getV4ConnectionPatches() { - return { - v4PatchConnectionCallback: (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) { - this._unwrap(moduleExports.Connection.prototype, "command"); - } - this._wrap(moduleExports.Connection.prototype, "command", this._getV4PatchCommandCallback()); - return moduleExports; - }, - v4PatchConnectionPromise: (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.Connection.prototype.command)) { - this._unwrap(moduleExports.Connection.prototype, "command"); - } - this._wrap(moduleExports.Connection.prototype, "command", this._getV4PatchCommandPromise()); - return moduleExports; - }, - v4UnpatchConnection: (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.Connection.prototype, "command"); - } - }; - } - _getV3PatchOperation(operationName) { - const instrumentation = this; - return (original) => { - return function patchedServerCommand(server, ns, ops, options, callback) { - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan); - const resultHandler = typeof options === "function" ? options : callback; - if (skipInstrumentation || typeof resultHandler !== "function" || typeof ops !== "object") { - if (typeof options === "function") { - return original.call(this, server, ns, ops, options); - } else { - return original.call(this, server, ns, ops, options, callback); - } - } - const span = instrumentation.tracer.startSpan(`mongodb.${operationName}`, { - kind: api_1.SpanKind.CLIENT - }); - instrumentation._populateV3Attributes(span, ns, server, ops[0], operationName); - const patchedCallback = instrumentation._patchEnd(span, resultHandler); - if (typeof options === "function") { - return original.call(this, server, ns, ops, patchedCallback); - } else { - return original.call(this, server, ns, ops, options, patchedCallback); - } - }; - }; - } - _getV3PatchCommand() { - const instrumentation = this; - return (original) => { - return function patchedServerCommand(server, ns, cmd, options, callback) { - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan); - const resultHandler = typeof options === "function" ? options : callback; - if (skipInstrumentation || typeof resultHandler !== "function" || typeof cmd !== "object") { - if (typeof options === "function") { - return original.call(this, server, ns, cmd, options); - } else { - return original.call(this, server, ns, cmd, options, callback); - } - } - const commandType = MongoDBInstrumentation._getCommandType(cmd); - const type = commandType === internal_types_1.MongodbCommandType.UNKNOWN ? "command" : commandType; - const span = instrumentation.tracer.startSpan(`mongodb.${type}`, { - kind: api_1.SpanKind.CLIENT - }); - const operation = commandType === internal_types_1.MongodbCommandType.UNKNOWN ? undefined : commandType; - instrumentation._populateV3Attributes(span, ns, server, cmd, operation); - const patchedCallback = instrumentation._patchEnd(span, resultHandler); - if (typeof options === "function") { - return original.call(this, server, ns, cmd, patchedCallback); - } else { - return original.call(this, server, ns, cmd, options, patchedCallback); - } - }; - }; - } - _getV4PatchCommandCallback() { - const instrumentation = this; - return (original) => { - return function patchedV4ServerCommand(ns, cmd, options, callback) { - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan); - const resultHandler = callback; - const commandType = Object.keys(cmd)[0]; - if (typeof cmd !== "object" || cmd.ismaster || cmd.hello) { - return original.call(this, ns, cmd, options, callback); - } - let span = undefined; - if (!skipInstrumentation) { - span = instrumentation.tracer.startSpan(`mongodb.${commandType}`, { - kind: api_1.SpanKind.CLIENT - }); - instrumentation._populateV4Attributes(span, this, ns, cmd, commandType); - } - const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType); - return original.call(this, ns, cmd, options, patchedCallback); - }; - }; - } - _getV4PatchCommandPromise() { - const instrumentation = this; - return (original) => { - return function patchedV4ServerCommand(...args) { - const [ns, cmd] = args; - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan); - const commandType = Object.keys(cmd)[0]; - const resultHandler = () => { - return; - }; - if (typeof cmd !== "object" || cmd.ismaster || cmd.hello) { - return original.apply(this, args); - } - let span = undefined; - if (!skipInstrumentation) { - span = instrumentation.tracer.startSpan(`mongodb.${commandType}`, { - kind: api_1.SpanKind.CLIENT - }); - instrumentation._populateV4Attributes(span, this, ns, cmd, commandType); - } - const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType); - const result = original.apply(this, args); - result.then((res) => patchedCallback(null, res), (err) => patchedCallback(err)); - return result; - }; - }; - } - _getV3PatchFind() { - const instrumentation = this; - return (original) => { - return function patchedServerCommand(server, ns, cmd, cursorState, options, callback) { - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan); - const resultHandler = typeof options === "function" ? options : callback; - if (skipInstrumentation || typeof resultHandler !== "function" || typeof cmd !== "object") { - if (typeof options === "function") { - return original.call(this, server, ns, cmd, cursorState, options); - } else { - return original.call(this, server, ns, cmd, cursorState, options, callback); - } - } - const span = instrumentation.tracer.startSpan("mongodb.find", { - kind: api_1.SpanKind.CLIENT - }); - instrumentation._populateV3Attributes(span, ns, server, cmd, "find"); - const patchedCallback = instrumentation._patchEnd(span, resultHandler); - if (typeof options === "function") { - return original.call(this, server, ns, cmd, cursorState, patchedCallback); - } else { - return original.call(this, server, ns, cmd, cursorState, options, patchedCallback); - } - }; - }; - } - _getV3PatchCursor() { - const instrumentation = this; - return (original) => { - return function patchedServerCommand(server, ns, cursorState, batchSize, options, callback) { - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan); - const resultHandler = typeof options === "function" ? options : callback; - if (skipInstrumentation || typeof resultHandler !== "function") { - if (typeof options === "function") { - return original.call(this, server, ns, cursorState, batchSize, options); - } else { - return original.call(this, server, ns, cursorState, batchSize, options, callback); - } - } - const span = instrumentation.tracer.startSpan("mongodb.getMore", { - kind: api_1.SpanKind.CLIENT - }); - instrumentation._populateV3Attributes(span, ns, server, cursorState.cmd, "getMore"); - const patchedCallback = instrumentation._patchEnd(span, resultHandler); - if (typeof options === "function") { - return original.call(this, server, ns, cursorState, batchSize, patchedCallback); - } else { - return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback); - } - }; - }; - } - static _getCommandType(command) { - if (command.createIndexes !== undefined) { - return internal_types_1.MongodbCommandType.CREATE_INDEXES; - } else if (command.findandmodify !== undefined) { - return internal_types_1.MongodbCommandType.FIND_AND_MODIFY; - } else if (command.ismaster !== undefined) { - return internal_types_1.MongodbCommandType.IS_MASTER; - } else if (command.count !== undefined) { - return internal_types_1.MongodbCommandType.COUNT; - } else if (command.aggregate !== undefined) { - return internal_types_1.MongodbCommandType.AGGREGATE; - } else { - return internal_types_1.MongodbCommandType.UNKNOWN; - } - } - _populateV4Attributes(span, connectionCtx, ns, command, operation) { - let host, port; - if (connectionCtx) { - const hostParts = typeof connectionCtx.address === "string" ? connectionCtx.address.split(":") : ""; - if (hostParts.length === 2) { - host = hostParts[0]; - port = hostParts[1]; - } - } - let commandObj; - if (command?.documents && command.documents[0]) { - commandObj = command.documents[0]; - } else if (command?.cursors) { - commandObj = command.cursors; - } else { - commandObj = command; - } - this._addAllSpanAttributes(span, ns.db, ns.collection, host, port, commandObj, operation); - } - _populateV3Attributes(span, ns, topology, command, operation) { - let host; - let port; - if (topology && topology.s) { - host = topology.s.options?.host ?? topology.s.host; - port = (topology.s.options?.port ?? topology.s.port)?.toString(); - if (host == null || port == null) { - const address = topology.description?.address; - if (address) { - const addressSegments = address.split(":"); - host = addressSegments[0]; - port = addressSegments[1]; - } - } - } - const [dbName, dbCollection] = ns.toString().split("."); - const commandObj = command?.query ?? command?.q ?? command; - this._addAllSpanAttributes(span, dbName, dbCollection, host, port, commandObj, operation); - } - _addAllSpanAttributes(span, dbName, dbCollection, host, port, commandObj, operation) { - span.setAttributes({ - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_MONGODB, - [semconv_1.ATTR_DB_NAME]: dbName, - [semconv_1.ATTR_DB_MONGODB_COLLECTION]: dbCollection, - [semconv_1.ATTR_DB_OPERATION]: operation, - [semconv_1.ATTR_DB_CONNECTION_STRING]: `mongodb://${host}:${port}/${dbName}` - }); - if (host && port) { - span.setAttribute(semconv_1.ATTR_NET_PEER_NAME, host); - const portNumber = parseInt(port, 10); - if (!isNaN(portNumber)) { - span.setAttribute(semconv_1.ATTR_NET_PEER_PORT, portNumber); - } - } - if (!commandObj) - return; - const { dbStatementSerializer: configDbStatementSerializer } = this.getConfig(); - const dbStatementSerializer = typeof configDbStatementSerializer === "function" ? configDbStatementSerializer : this._defaultDbStatementSerializer.bind(this); - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - const query = dbStatementSerializer(commandObj); - span.setAttribute(semconv_1.ATTR_DB_STATEMENT, query); - }, (err) => { - if (err) { - this._diag.error("Error running dbStatementSerializer hook", err); - } - }, true); - } - _getDefaultDbStatementReplacer() { - const seen = new WeakSet; - return (_key, value) => { - if (typeof value !== "object" || !value) - return "?"; - if (seen.has(value)) - return "[Circular]"; - seen.add(value); - return value; - }; - } - _defaultDbStatementSerializer(commandObj) { - const { enhancedDatabaseReporting } = this.getConfig(); - if (enhancedDatabaseReporting) { - return JSON.stringify(commandObj); - } - return JSON.stringify(commandObj, this._getDefaultDbStatementReplacer()); - } - _handleExecutionResult(span, result) { - const { responseHook } = this.getConfig(); - if (typeof responseHook === "function") { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - responseHook(span, { data: result }); - }, (err) => { - if (err) { - this._diag.error("Error running response hook", err); - } - }, true); - } - } - _patchEnd(span, resultHandler, connectionId, commandType) { - const activeContext = api_1.context.active(); - const instrumentation = this; - return function patchedEnd(...args) { - const error48 = args[0]; - if (span) { - if (error48 instanceof Error) { - span?.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - } else { - const result = args[1]; - instrumentation._handleExecutionResult(span, result); - } - span.end(); - } - return api_1.context.with(activeContext, () => { - if (commandType === "endSessions") { - instrumentation._connectionsUsage.add(-1, { - state: "idle", - "pool.name": instrumentation._poolName - }); - } - return resultHandler.apply(this, args); - }); - }; - } - setPoolName(options) { - const host = options.hostAddress?.host; - const port = options.hostAddress?.port; - const database = options.dbName; - const poolName = `mongodb://${host}:${port}/${database}`; - this._poolName = poolName; - } - _checkSkipInstrumentation(currentSpan) { - const requireParentSpan = this.getConfig().requireParentSpan; - const hasNoParentSpan = currentSpan === undefined; - return requireParentSpan === true && hasNoParentSpan; - } - } - exports.MongoDBInstrumentation = MongoDBInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongodb@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongodb/build/src/types.js -var require_types5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MongodbCommandType = undefined; - var MongodbCommandType; - (function(MongodbCommandType2) { - MongodbCommandType2["CREATE_INDEXES"] = "createIndexes"; - MongodbCommandType2["FIND_AND_MODIFY"] = "findAndModify"; - MongodbCommandType2["IS_MASTER"] = "isMaster"; - MongodbCommandType2["COUNT"] = "count"; - MongodbCommandType2["UNKNOWN"] = "unknown"; - })(MongodbCommandType = exports.MongodbCommandType || (exports.MongodbCommandType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongodb@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongodb/build/src/index.js -var require_src34 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MongodbCommandType = exports.MongoDBInstrumentation = undefined; - var instrumentation_1 = require_instrumentation23(); - Object.defineProperty(exports, "MongoDBInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.MongoDBInstrumentation; - } }); - var types_1 = require_types5(); - Object.defineProperty(exports, "MongodbCommandType", { enumerable: true, get: function() { - return types_1.MongodbCommandType; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongoose@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongoose/build/src/semconv.js -var require_semconv16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_OPERATION = exports.ATTR_DB_NAME = exports.ATTR_DB_MONGODB_COLLECTION = undefined; - exports.ATTR_DB_MONGODB_COLLECTION = "db.mongodb.collection"; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_OPERATION = "db.operation"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongoose@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongoose/build/src/utils.js -var require_utils24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.handleCallbackResponse = exports.handlePromiseResponse = exports.getAttributesFromCollection = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv16(); - function getAttributesFromCollection(collection) { - return { - [semconv_1.ATTR_DB_MONGODB_COLLECTION]: collection.name, - [semconv_1.ATTR_DB_NAME]: collection.conn.name, - [semconv_1.ATTR_DB_USER]: collection.conn.user, - [semconv_1.ATTR_NET_PEER_NAME]: collection.conn.host, - [semconv_1.ATTR_NET_PEER_PORT]: collection.conn.port - }; - } - exports.getAttributesFromCollection = getAttributesFromCollection; - function setErrorStatus(span, error48 = {}) { - span.recordException(error48); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: `${error48.message} ${error48.code ? ` -Mongoose Error Code: ${error48.code}` : ""}` - }); - } - function applyResponseHook(span, response, responseHook, moduleVersion = undefined) { - if (!responseHook) { - return; - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => responseHook(span, { moduleVersion, response }), (e) => { - if (e) { - api_1.diag.error("mongoose instrumentation: responseHook error", e); - } - }, true); - } - function handlePromiseResponse(execResponse, span, responseHook, moduleVersion = undefined) { - if (!(execResponse instanceof Promise)) { - applyResponseHook(span, execResponse, responseHook, moduleVersion); - span.end(); - return execResponse; - } - return execResponse.then((response) => { - applyResponseHook(span, response, responseHook, moduleVersion); - return response; - }).catch((err) => { - setErrorStatus(span, err); - throw err; - }).finally(() => span.end()); - } - exports.handlePromiseResponse = handlePromiseResponse; - function handleCallbackResponse(callback, exec, originalThis, span, args, responseHook, moduleVersion = undefined) { - let callbackArgumentIndex = 0; - if (args.length === 2) { - callbackArgumentIndex = 1; - } else if (args.length === 3) { - callbackArgumentIndex = 2; - } - args[callbackArgumentIndex] = (err, response) => { - if (err) { - setErrorStatus(span, err); - } else { - applyResponseHook(span, response, responseHook, moduleVersion); - } - span.end(); - return callback(err, response); - }; - return exec.apply(originalThis, args); - } - exports.handleCallbackResponse = handleCallbackResponse; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongoose@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongoose/build/src/version.js -var require_version28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-mongoose"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongoose@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongoose/build/src/mongoose.js -var require_mongoose = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MongooseInstrumentation = exports._STORED_PARENT_SPAN = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var utils_1 = require_utils24(); - var instrumentation_1 = require_src9(); - var version_1 = require_version28(); - var semconv_1 = require_semconv16(); - var contextCaptureFunctionsCommon = [ - "deleteOne", - "deleteMany", - "find", - "findOne", - "estimatedDocumentCount", - "countDocuments", - "distinct", - "where", - "$where", - "findOneAndUpdate", - "findOneAndDelete", - "findOneAndReplace" - ]; - var contextCaptureFunctions6 = [ - "remove", - "count", - "findOneAndRemove", - ...contextCaptureFunctionsCommon - ]; - var contextCaptureFunctions7 = [ - "count", - "findOneAndRemove", - ...contextCaptureFunctionsCommon - ]; - var contextCaptureFunctions8 = [...contextCaptureFunctionsCommon]; - function getContextCaptureFunctions(moduleVersion) { - if (!moduleVersion) { - return contextCaptureFunctionsCommon; - } else if (moduleVersion.startsWith("6.") || moduleVersion.startsWith("5.")) { - return contextCaptureFunctions6; - } else if (moduleVersion.startsWith("7.")) { - return contextCaptureFunctions7; - } else { - return contextCaptureFunctions8; - } - } - function instrumentRemove(moduleVersion) { - return moduleVersion && (moduleVersion.startsWith("5.") || moduleVersion.startsWith("6.")) || false; - } - exports._STORED_PARENT_SPAN = Symbol("stored-parent-span"); - - class MongooseInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition("mongoose", [">=5.9.7 <9"], this.patch.bind(this), this.unpatch.bind(this)); - return module2; - } - patch(module2, moduleVersion) { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - this._wrap(moduleExports.Model.prototype, "save", this.patchOnModelMethods("save", moduleVersion)); - moduleExports.Model.prototype.$save = moduleExports.Model.prototype.save; - if (instrumentRemove(moduleVersion)) { - this._wrap(moduleExports.Model.prototype, "remove", this.patchOnModelMethods("remove", moduleVersion)); - } - this._wrap(moduleExports.Query.prototype, "exec", this.patchQueryExec(moduleVersion)); - this._wrap(moduleExports.Aggregate.prototype, "exec", this.patchAggregateExec(moduleVersion)); - const contextCaptureFunctions = getContextCaptureFunctions(moduleVersion); - contextCaptureFunctions.forEach((funcName) => { - this._wrap(moduleExports.Query.prototype, funcName, this.patchAndCaptureSpanContext(funcName)); - }); - this._wrap(moduleExports.Model, "aggregate", this.patchModelAggregate()); - this._wrap(moduleExports.Model, "insertMany", this.patchModelStatic("insertMany", moduleVersion)); - this._wrap(moduleExports.Model, "bulkWrite", this.patchModelStatic("bulkWrite", moduleVersion)); - return moduleExports; - } - unpatch(module2, moduleVersion) { - const moduleExports = module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - const contextCaptureFunctions = getContextCaptureFunctions(moduleVersion); - this._unwrap(moduleExports.Model.prototype, "save"); - moduleExports.Model.prototype.$save = moduleExports.Model.prototype.save; - if (instrumentRemove(moduleVersion)) { - this._unwrap(moduleExports.Model.prototype, "remove"); - } - this._unwrap(moduleExports.Query.prototype, "exec"); - this._unwrap(moduleExports.Aggregate.prototype, "exec"); - contextCaptureFunctions.forEach((funcName) => { - this._unwrap(moduleExports.Query.prototype, funcName); - }); - this._unwrap(moduleExports.Model, "aggregate"); - this._unwrap(moduleExports.Model, "insertMany"); - this._unwrap(moduleExports.Model, "bulkWrite"); - } - patchAggregateExec(moduleVersion) { - const self2 = this; - return (originalAggregate) => { - return function exec(callback) { - if (self2.getConfig().requireParentSpan && api_1.trace.getSpan(api_1.context.active()) === undefined) { - return originalAggregate.apply(this, arguments); - } - const parentSpan = this[exports._STORED_PARENT_SPAN]; - const attributes = {}; - const { dbStatementSerializer } = self2.getConfig(); - if (dbStatementSerializer) { - attributes[semconv_1.ATTR_DB_STATEMENT] = dbStatementSerializer("aggregate", { - options: this.options, - aggregatePipeline: this._pipeline - }); - } - const span = self2._startSpan(this._model.collection, this._model?.modelName, "aggregate", attributes, parentSpan); - return self2._handleResponse(span, originalAggregate, this, arguments, callback, moduleVersion); - }; - }; - } - patchQueryExec(moduleVersion) { - const self2 = this; - return (originalExec) => { - return function exec(callback) { - if (self2.getConfig().requireParentSpan && api_1.trace.getSpan(api_1.context.active()) === undefined) { - return originalExec.apply(this, arguments); - } - const parentSpan = this[exports._STORED_PARENT_SPAN]; - const attributes = {}; - const { dbStatementSerializer } = self2.getConfig(); - if (dbStatementSerializer) { - attributes[semconv_1.ATTR_DB_STATEMENT] = dbStatementSerializer(this.op, { - condition: this._conditions, - updates: this._update, - options: this.options, - fields: this._fields - }); - } - const span = self2._startSpan(this.mongooseCollection, this.model.modelName, this.op, attributes, parentSpan); - return self2._handleResponse(span, originalExec, this, arguments, callback, moduleVersion); - }; - }; - } - patchOnModelMethods(op, moduleVersion) { - const self2 = this; - return (originalOnModelFunction) => { - return function method(options, callback) { - if (self2.getConfig().requireParentSpan && api_1.trace.getSpan(api_1.context.active()) === undefined) { - return originalOnModelFunction.apply(this, arguments); - } - const serializePayload = { document: this }; - if (options && !(options instanceof Function)) { - serializePayload.options = options; - } - const attributes = {}; - const { dbStatementSerializer } = self2.getConfig(); - if (dbStatementSerializer) { - attributes[semconv_1.ATTR_DB_STATEMENT] = dbStatementSerializer(op, serializePayload); - } - const span = self2._startSpan(this.constructor.collection, this.constructor.modelName, op, attributes); - if (options instanceof Function) { - callback = options; - options = undefined; - } - return self2._handleResponse(span, originalOnModelFunction, this, arguments, callback, moduleVersion); - }; - }; - } - patchModelStatic(op, moduleVersion) { - const self2 = this; - return (original) => { - return function patchedStatic(docsOrOps, options, callback) { - if (self2.getConfig().requireParentSpan && api_1.trace.getSpan(api_1.context.active()) === undefined) { - return original.apply(this, arguments); - } - if (typeof options === "function") { - callback = options; - options = undefined; - } - const serializePayload = {}; - switch (op) { - case "insertMany": - serializePayload.documents = docsOrOps; - break; - case "bulkWrite": - serializePayload.operations = docsOrOps; - break; - default: - serializePayload.document = docsOrOps; - break; - } - if (options !== undefined) { - serializePayload.options = options; - } - const attributes = {}; - const { dbStatementSerializer } = self2.getConfig(); - if (dbStatementSerializer) { - attributes[semconv_1.ATTR_DB_STATEMENT] = dbStatementSerializer(op, serializePayload); - } - const span = self2._startSpan(this.collection, this.modelName, op, attributes); - return self2._handleResponse(span, original, this, arguments, callback, moduleVersion); - }; - }; - } - patchModelAggregate() { - const self2 = this; - return (original) => { - return function captureSpanContext() { - const currentSpan = api_1.trace.getSpan(api_1.context.active()); - const aggregate = self2._callOriginalFunction(() => original.apply(this, arguments)); - if (aggregate) - aggregate[exports._STORED_PARENT_SPAN] = currentSpan; - return aggregate; - }; - }; - } - patchAndCaptureSpanContext(funcName) { - const self2 = this; - return (original) => { - return function captureSpanContext() { - this[exports._STORED_PARENT_SPAN] = api_1.trace.getSpan(api_1.context.active()); - return self2._callOriginalFunction(() => original.apply(this, arguments)); - }; - }; - } - _startSpan(collection, modelName, operation, attributes, parentSpan) { - return this.tracer.startSpan(`mongoose.${modelName}.${operation}`, { - kind: api_1.SpanKind.CLIENT, - attributes: { - ...attributes, - ...(0, utils_1.getAttributesFromCollection)(collection), - [semconv_1.ATTR_DB_OPERATION]: operation, - [semconv_1.ATTR_DB_SYSTEM]: "mongoose" - } - }, parentSpan ? api_1.trace.setSpan(api_1.context.active(), parentSpan) : undefined); - } - _handleResponse(span, exec, originalThis, args, callback, moduleVersion = undefined) { - const self2 = this; - if (callback instanceof Function) { - return self2._callOriginalFunction(() => (0, utils_1.handleCallbackResponse)(callback, exec, originalThis, span, args, self2.getConfig().responseHook, moduleVersion)); - } else { - const response = self2._callOriginalFunction(() => exec.apply(originalThis, args)); - return (0, utils_1.handlePromiseResponse)(response, span, self2.getConfig().responseHook, moduleVersion); - } - } - _callOriginalFunction(originalFunction) { - if (this.getConfig().suppressInternalInstrumentation) { - return api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), originalFunction); - } else { - return originalFunction(); - } - } - } - exports.MongooseInstrumentation = MongooseInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mongoose@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mongoose/build/src/index.js -var require_src35 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MongooseInstrumentation = undefined; - var mongoose_1 = require_mongoose(); - Object.defineProperty(exports, "MongooseInstrumentation", { enumerable: true, get: function() { - return mongoose_1.MongooseInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql2@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql2/build/src/semconv.js -var require_semconv17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_VALUE_MYSQL = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_NAME = exports.ATTR_DB_CONNECTION_STRING = undefined; - exports.ATTR_DB_CONNECTION_STRING = "db.connection_string"; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_MYSQL = "mysql"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sql-common@0.41.2+460773ef8ff1e07c/node_modules/@opentelemetry/sql-common/build/src/index.js -var require_src36 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addSqlCommenterComment = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - function hasValidSqlComment(query) { - const indexOpeningDashDashComment = query.indexOf("--"); - if (indexOpeningDashDashComment >= 0) { - return true; - } - const indexOpeningSlashComment = query.indexOf("/*"); - if (indexOpeningSlashComment < 0) { - return false; - } - const indexClosingSlashComment = query.indexOf("*/"); - return indexOpeningDashDashComment < indexClosingSlashComment; - } - function fixedEncodeURIComponent(str) { - return encodeURIComponent(str).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`); - } - function addSqlCommenterComment(span, query) { - if (typeof query !== "string" || query.length === 0) { - return query; - } - if (hasValidSqlComment(query)) { - return query; - } - const propagator = new core_1.W3CTraceContextPropagator; - const headers = {}; - propagator.inject(api_1.trace.setSpan(api_1.ROOT_CONTEXT, span), headers, api_1.defaultTextMapSetter); - const sortedKeys = Object.keys(headers).sort(); - if (sortedKeys.length === 0) { - return query; - } - const commentString = sortedKeys.map((key) => { - const encodedValue = fixedEncodeURIComponent(headers[key]); - return `${key}='${encodedValue}'`; - }).join(","); - return `${query} /*${commentString}*/`; - } - exports.addSqlCommenterComment = addSqlCommenterComment; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql2@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql2/build/src/utils.js -var require_utils25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getConnectionPrototypeToInstrument = exports.once = exports.getSpanName = exports.getQueryText = exports.getConnectionAttributes = undefined; - var semconv_1 = require_semconv17(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - function getConnectionAttributes(config2, dbSemconvStability, netSemconvStability) { - const { host, port, database, user: user2 } = getConfig(config2); - const attrs = {}; - if (dbSemconvStability & instrumentation_1.SemconvStability.OLD) { - attrs[semconv_1.ATTR_DB_CONNECTION_STRING] = getJDBCString(host, port, database); - attrs[semconv_1.ATTR_DB_NAME] = database; - attrs[semconv_1.ATTR_DB_USER] = user2; - } - if (dbSemconvStability & instrumentation_1.SemconvStability.STABLE) { - attrs[semantic_conventions_1.ATTR_DB_NAMESPACE] = database; - } - const portNumber = parseInt(port, 10); - if (netSemconvStability & instrumentation_1.SemconvStability.OLD) { - attrs[semconv_1.ATTR_NET_PEER_NAME] = host; - if (!isNaN(portNumber)) { - attrs[semconv_1.ATTR_NET_PEER_PORT] = portNumber; - } - } - if (netSemconvStability & instrumentation_1.SemconvStability.STABLE) { - attrs[semantic_conventions_1.ATTR_SERVER_ADDRESS] = host; - if (!isNaN(portNumber)) { - attrs[semantic_conventions_1.ATTR_SERVER_PORT] = portNumber; - } - } - return attrs; - } - exports.getConnectionAttributes = getConnectionAttributes; - function getConfig(config2) { - const { host, port, database, user: user2 } = config2 && config2.connectionConfig || config2 || {}; - return { host, port, database, user: user2 }; - } - function getJDBCString(host, port, database) { - let jdbcString = `jdbc:mysql://${host || "localhost"}`; - if (typeof port === "number") { - jdbcString += `:${port}`; - } - if (typeof database === "string") { - jdbcString += `/${database}`; - } - return jdbcString; - } - function getQueryText(query, format, values, maskStatement = false, maskStatementHook = defaultMaskingHook) { - const [querySql, queryValues] = typeof query === "string" ? [query, values] : [query.sql, hasValues(query) ? values || query.values : values]; - try { - if (maskStatement) { - return maskStatementHook(querySql); - } else if (format && queryValues) { - return format(querySql, queryValues); - } else { - return querySql; - } - } catch (e) { - return "Could not determine the query due to an error in masking or formatting"; - } - } - exports.getQueryText = getQueryText; - function defaultMaskingHook(query) { - return query.replace(/\b\d+\b/g, "?").replace(/(["'])(?:(?=(\\?))\2.)*?\1/g, "?"); - } - function hasValues(obj) { - return "values" in obj; - } - function getSpanName(query) { - const rawQuery = typeof query === "object" ? query.sql : query; - const firstSpace = rawQuery?.indexOf(" "); - if (typeof firstSpace === "number" && firstSpace !== -1) { - return rawQuery?.substring(0, firstSpace); - } - return rawQuery; - } - exports.getSpanName = getSpanName; - var once = (fn) => { - let called = false; - return (...args) => { - if (called) - return; - called = true; - return fn(...args); - }; - }; - exports.once = once; - function getConnectionPrototypeToInstrument(connection) { - const connectionPrototype = connection.prototype; - const basePrototype = Object.getPrototypeOf(connectionPrototype); - if (typeof basePrototype?.query === "function" && typeof basePrototype?.execute === "function") { - return basePrototype; - } - return connectionPrototype; - } - exports.getConnectionPrototypeToInstrument = getConnectionPrototypeToInstrument; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql2@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql2/build/src/version.js -var require_version29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-mysql2"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql2@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql2/build/src/instrumentation.js -var require_instrumentation24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MySQL2Instrumentation = undefined; - var api4 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv17(); - var sql_common_1 = require_src36(); - var utils_1 = require_utils25(); - var version_1 = require_version29(); - var semantic_conventions_1 = require_src3(); - var supportedVersions = [">=1.4.2 <4"]; - - class MySQL2Instrumentation extends instrumentation_1.InstrumentationBase { - _netSemconvStability; - _dbSemconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._setSemconvStabilityFromEnv(); - } - _setSemconvStabilityFromEnv() { - this._netSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - this._dbSemconvStability = (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - let format; - function setFormatFunction(moduleExports) { - if (!format && moduleExports.format) { - format = moduleExports.format; - } - } - const patch = (ConnectionPrototype) => { - if ((0, instrumentation_1.isWrapped)(ConnectionPrototype.query)) { - this._unwrap(ConnectionPrototype, "query"); - } - this._wrap(ConnectionPrototype, "query", this._patchQuery(format, false)); - if ((0, instrumentation_1.isWrapped)(ConnectionPrototype.execute)) { - this._unwrap(ConnectionPrototype, "execute"); - } - this._wrap(ConnectionPrototype, "execute", this._patchQuery(format, true)); - }; - const unpatch = (ConnectionPrototype) => { - this._unwrap(ConnectionPrototype, "query"); - this._unwrap(ConnectionPrototype, "execute"); - }; - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("mysql2", supportedVersions, (moduleExports) => { - setFormatFunction(moduleExports); - return moduleExports; - }, () => {}, [ - new instrumentation_1.InstrumentationNodeModuleFile("mysql2/promise.js", supportedVersions, (moduleExports) => { - setFormatFunction(moduleExports); - return moduleExports; - }, () => {}), - new instrumentation_1.InstrumentationNodeModuleFile("mysql2/lib/connection.js", supportedVersions, (moduleExports) => { - const ConnectionPrototype = (0, utils_1.getConnectionPrototypeToInstrument)(moduleExports); - patch(ConnectionPrototype); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - const ConnectionPrototype = (0, utils_1.getConnectionPrototypeToInstrument)(moduleExports); - unpatch(ConnectionPrototype); - }) - ]) - ]; - } - _patchQuery(format, isPrepared) { - return (originalQuery) => { - const thisPlugin = this; - return function query(query, _valuesOrCallback, _callback) { - let values; - if (Array.isArray(_valuesOrCallback)) { - values = _valuesOrCallback; - } else if (arguments[2]) { - values = [_valuesOrCallback]; - } - const { maskStatement, maskStatementHook, responseHook } = thisPlugin.getConfig(); - const attributes = (0, utils_1.getConnectionAttributes)(this.config, thisPlugin._dbSemconvStability, thisPlugin._netSemconvStability); - const dbQueryText = (0, utils_1.getQueryText)(query, format, values, maskStatement, maskStatementHook); - if (thisPlugin._dbSemconvStability & instrumentation_1.SemconvStability.OLD) { - attributes[semconv_1.ATTR_DB_SYSTEM] = semconv_1.DB_SYSTEM_VALUE_MYSQL; - attributes[semconv_1.ATTR_DB_STATEMENT] = dbQueryText; - } - if (thisPlugin._dbSemconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes[semantic_conventions_1.ATTR_DB_SYSTEM_NAME] = semantic_conventions_1.DB_SYSTEM_NAME_VALUE_MYSQL; - attributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = dbQueryText; - } - const span = thisPlugin.tracer.startSpan((0, utils_1.getSpanName)(query), { - kind: api4.SpanKind.CLIENT, - attributes - }); - if (!isPrepared && thisPlugin.getConfig().addSqlCommenterCommentToQueries) { - arguments[0] = query = typeof query === "string" ? (0, sql_common_1.addSqlCommenterComment)(span, query) : Object.assign(query, { - sql: (0, sql_common_1.addSqlCommenterComment)(span, query.sql) - }); - } - const endSpan = (0, utils_1.once)((err, results) => { - if (err) { - span.setStatus({ - code: api4.SpanStatusCode.ERROR, - message: err.message - }); - } else { - if (typeof responseHook === "function") { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - responseHook(span, { - queryResults: results - }); - }, (err2) => { - if (err2) { - thisPlugin._diag.warn("Failed executing responseHook", err2); - } - }, true); - } - } - span.end(); - }); - if (arguments.length === 1) { - if (typeof query.onResult === "function") { - thisPlugin._wrap(query, "onResult", thisPlugin._patchCallbackQuery(endSpan)); - } - const streamableQuery = originalQuery.apply(this, arguments); - streamableQuery.once("error", (err) => { - endSpan(err); - }).once("result", (results) => { - endSpan(undefined, results); - }); - return streamableQuery; - } - if (typeof arguments[1] === "function") { - thisPlugin._wrap(arguments, 1, thisPlugin._patchCallbackQuery(endSpan)); - } else if (typeof arguments[2] === "function") { - thisPlugin._wrap(arguments, 2, thisPlugin._patchCallbackQuery(endSpan)); - } - return originalQuery.apply(this, arguments); - }; - }; - } - _patchCallbackQuery(endSpan) { - return (originalCallback) => { - return function(err, results, fields) { - endSpan(err, results); - return originalCallback(...arguments); - }; - }; - } - } - exports.MySQL2Instrumentation = MySQL2Instrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql2@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql2/build/src/index.js -var require_src37 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MySQL2Instrumentation = undefined; - var instrumentation_1 = require_instrumentation24(); - Object.defineProperty(exports, "MySQL2Instrumentation", { enumerable: true, get: function() { - return instrumentation_1.MySQL2Instrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql/build/src/semconv.js -var require_semconv18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = exports.DB_SYSTEM_VALUE_MYSQL = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_NAME = exports.ATTR_DB_CONNECTION_STRING = undefined; - exports.ATTR_DB_CONNECTION_STRING = "db.connection_string"; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_MYSQL = "mysql"; - exports.METRIC_DB_CLIENT_CONNECTIONS_USAGE = "db.client.connections.usage"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql/build/src/AttributeNames.js -var require_AttributeNames10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["MYSQL_VALUES"] = "db.mysql.values"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql/build/src/utils.js -var require_utils26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getPoolName = exports.arrayStringifyHelper = exports.getSpanName = exports.getDbValues = exports.getDbStatement = exports.getConnectionAttributes = undefined; - var semconv_1 = require_semconv18(); - function getConnectionAttributes(config2) { - const { host, port, database, user: user2 } = getConfig(config2); - const portNumber = parseInt(port, 10); - if (!isNaN(portNumber)) { - return { - [semconv_1.ATTR_NET_PEER_NAME]: host, - [semconv_1.ATTR_NET_PEER_PORT]: portNumber, - [semconv_1.ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database), - [semconv_1.ATTR_DB_NAME]: database, - [semconv_1.ATTR_DB_USER]: user2 - }; - } - return { - [semconv_1.ATTR_NET_PEER_NAME]: host, - [semconv_1.ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database), - [semconv_1.ATTR_DB_NAME]: database, - [semconv_1.ATTR_DB_USER]: user2 - }; - } - exports.getConnectionAttributes = getConnectionAttributes; - function getConfig(config2) { - const { host, port, database, user: user2 } = config2 && config2.connectionConfig || config2 || {}; - return { host, port, database, user: user2 }; - } - function getJDBCString(host, port, database) { - let jdbcString = `jdbc:mysql://${host || "localhost"}`; - if (typeof port === "number") { - jdbcString += `:${port}`; - } - if (typeof database === "string") { - jdbcString += `/${database}`; - } - return jdbcString; - } - function getDbStatement(query) { - if (typeof query === "string") { - return query; - } else { - return query.sql; - } - } - exports.getDbStatement = getDbStatement; - function getDbValues(query, values) { - if (typeof query === "string") { - return arrayStringifyHelper(values); - } else { - return arrayStringifyHelper(values || query.values); - } - } - exports.getDbValues = getDbValues; - function getSpanName(query) { - const rawQuery = typeof query === "object" ? query.sql : query; - const firstSpace = rawQuery?.indexOf(" "); - if (typeof firstSpace === "number" && firstSpace !== -1) { - return rawQuery?.substring(0, firstSpace); - } - return rawQuery; - } - exports.getSpanName = getSpanName; - function arrayStringifyHelper(arr) { - if (arr) - return `[${arr.toString()}]`; - return ""; - } - exports.arrayStringifyHelper = arrayStringifyHelper; - function getPoolName(pool) { - const c = pool.config.connectionConfig; - let poolName = ""; - poolName += c.host ? `host: '${c.host}', ` : ""; - poolName += c.port ? `port: ${c.port}, ` : ""; - poolName += c.database ? `database: '${c.database}', ` : ""; - poolName += c.user ? `user: '${c.user}'` : ""; - if (!c.user) { - poolName = poolName.substring(0, poolName.length - 2); - } - return poolName.trim(); - } - exports.getPoolName = getPoolName; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql/build/src/version.js -var require_version30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.53.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-mysql"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql/build/src/instrumentation.js -var require_instrumentation25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MySQLInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv18(); - var AttributeNames_1 = require_AttributeNames10(); - var utils_1 = require_utils26(); - var version_1 = require_version30(); - - class MySQLInstrumentation extends instrumentation_1.InstrumentationBase { - static COMMON_ATTRIBUTES = { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_MYSQL - }; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - _updateMetricInstruments() { - this._connectionsUsage = this.meter.createUpDownCounter(semconv_1.METRIC_DB_CLIENT_CONNECTIONS_USAGE, { - description: "The number of connections that are currently in state described by the state attribute.", - unit: "{connection}" - }); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("mysql", [">=2.0.0 <3"], (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.createConnection)) { - this._unwrap(moduleExports, "createConnection"); - } - this._wrap(moduleExports, "createConnection", this._patchCreateConnection()); - if ((0, instrumentation_1.isWrapped)(moduleExports.createPool)) { - this._unwrap(moduleExports, "createPool"); - } - this._wrap(moduleExports, "createPool", this._patchCreatePool()); - if ((0, instrumentation_1.isWrapped)(moduleExports.createPoolCluster)) { - this._unwrap(moduleExports, "createPoolCluster"); - } - this._wrap(moduleExports, "createPoolCluster", this._patchCreatePoolCluster()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports, "createConnection"); - this._unwrap(moduleExports, "createPool"); - this._unwrap(moduleExports, "createPoolCluster"); - }) - ]; - } - _patchCreateConnection() { - return (originalCreateConnection) => { - const thisPlugin = this; - return function createConnection(_connectionUri) { - const originalResult = originalCreateConnection(...arguments); - thisPlugin._wrap(originalResult, "query", thisPlugin._patchQuery(originalResult)); - return originalResult; - }; - }; - } - _patchCreatePool() { - return (originalCreatePool) => { - const thisPlugin = this; - return function createPool(_config) { - const pool = originalCreatePool(...arguments); - thisPlugin._wrap(pool, "query", thisPlugin._patchQuery(pool)); - thisPlugin._wrap(pool, "getConnection", thisPlugin._patchGetConnection(pool)); - thisPlugin._wrap(pool, "end", thisPlugin._patchPoolEnd(pool)); - thisPlugin._setPoolcallbacks(pool, thisPlugin, ""); - return pool; - }; - }; - } - _patchPoolEnd(pool) { - return (originalPoolEnd) => { - const thisPlugin = this; - return function end(callback) { - const nAll = pool._allConnections.length; - const nFree = pool._freeConnections.length; - const nUsed = nAll - nFree; - const poolName = (0, utils_1.getPoolName)(pool); - thisPlugin._connectionsUsage.add(-nUsed, { - state: "used", - name: poolName - }); - thisPlugin._connectionsUsage.add(-nFree, { - state: "idle", - name: poolName - }); - originalPoolEnd.apply(pool, arguments); - }; - }; - } - _patchCreatePoolCluster() { - return (originalCreatePoolCluster) => { - const thisPlugin = this; - return function createPool(_config) { - const cluster = originalCreatePoolCluster(...arguments); - thisPlugin._wrap(cluster, "getConnection", thisPlugin._patchGetConnection(cluster)); - thisPlugin._wrap(cluster, "add", thisPlugin._patchAdd(cluster)); - return cluster; - }; - }; - } - _patchAdd(cluster) { - return (originalAdd) => { - const thisPlugin = this; - return function add(id, config2) { - if (!thisPlugin["_enabled"]) { - thisPlugin._unwrap(cluster, "add"); - return originalAdd.apply(cluster, arguments); - } - originalAdd.apply(cluster, arguments); - const nodes = cluster["_nodes"]; - if (nodes) { - const nodeId = typeof id === "object" ? "CLUSTER::" + cluster._lastId : String(id); - const pool = nodes[nodeId].pool; - thisPlugin._setPoolcallbacks(pool, thisPlugin, id); - } - }; - }; - } - _patchGetConnection(pool) { - return (originalGetConnection) => { - const thisPlugin = this; - return function getConnection(arg1, arg2, arg3) { - if (!thisPlugin["_enabled"]) { - thisPlugin._unwrap(pool, "getConnection"); - return originalGetConnection.apply(pool, arguments); - } - if (arguments.length === 1 && typeof arg1 === "function") { - const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg1); - return originalGetConnection.call(pool, patchFn); - } - if (arguments.length === 2 && typeof arg2 === "function") { - const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg2); - return originalGetConnection.call(pool, arg1, patchFn); - } - if (arguments.length === 3 && typeof arg3 === "function") { - const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg3); - return originalGetConnection.call(pool, arg1, arg2, patchFn); - } - return originalGetConnection.apply(pool, arguments); - }; - }; - } - _getConnectionCallbackPatchFn(cb) { - const thisPlugin = this; - const activeContext = api_1.context.active(); - return function(err, connection) { - if (connection) { - if (!(0, instrumentation_1.isWrapped)(connection.query)) { - thisPlugin._wrap(connection, "query", thisPlugin._patchQuery(connection)); - } - } - if (typeof cb === "function") { - api_1.context.with(activeContext, cb, this, err, connection); - } - }; - } - _patchQuery(connection) { - return (originalQuery) => { - const thisPlugin = this; - return function query(query, _valuesOrCallback, _callback) { - if (!thisPlugin["_enabled"]) { - thisPlugin._unwrap(connection, "query"); - return originalQuery.apply(connection, arguments); - } - const span = thisPlugin.tracer.startSpan((0, utils_1.getSpanName)(query), { - kind: api_1.SpanKind.CLIENT, - attributes: { - ...MySQLInstrumentation.COMMON_ATTRIBUTES, - ...(0, utils_1.getConnectionAttributes)(connection.config) - } - }); - span.setAttribute(semconv_1.ATTR_DB_STATEMENT, (0, utils_1.getDbStatement)(query)); - if (thisPlugin.getConfig().enhancedDatabaseReporting) { - let values; - if (Array.isArray(_valuesOrCallback)) { - values = _valuesOrCallback; - } else if (arguments[2]) { - values = [_valuesOrCallback]; - } - span.setAttribute(AttributeNames_1.AttributeNames.MYSQL_VALUES, (0, utils_1.getDbValues)(query, values)); - } - const cbIndex = Array.from(arguments).findIndex((arg) => typeof arg === "function"); - const parentContext = api_1.context.active(); - if (cbIndex === -1) { - const streamableQuery = api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return originalQuery.apply(connection, arguments); - }); - api_1.context.bind(parentContext, streamableQuery); - return streamableQuery.on("error", (err) => span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - })).on("end", () => { - span.end(); - }); - } else { - thisPlugin._wrap(arguments, cbIndex, thisPlugin._patchCallbackQuery(span, parentContext)); - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return originalQuery.apply(connection, arguments); - }); - } - }; - }; - } - _patchCallbackQuery(span, parentContext) { - return (originalCallback) => { - return function(err, results, fields) { - if (err) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - return api_1.context.with(parentContext, () => originalCallback(...arguments)); - }; - }; - } - _setPoolcallbacks(pool, thisPlugin, id) { - const poolName = id || (0, utils_1.getPoolName)(pool); - pool.on("connection", (connection) => { - thisPlugin._connectionsUsage.add(1, { - state: "idle", - name: poolName - }); - }); - pool.on("acquire", (connection) => { - thisPlugin._connectionsUsage.add(-1, { - state: "idle", - name: poolName - }); - thisPlugin._connectionsUsage.add(1, { - state: "used", - name: poolName - }); - }); - pool.on("release", (connection) => { - thisPlugin._connectionsUsage.add(-1, { - state: "used", - name: poolName - }); - thisPlugin._connectionsUsage.add(1, { - state: "idle", - name: poolName - }); - }); - } - } - exports.MySQLInstrumentation = MySQLInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-mysql@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-mysql/build/src/index.js -var require_src38 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MySQLInstrumentation = undefined; - var instrumentation_1 = require_instrumentation25(); - Object.defineProperty(exports, "MySQLInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.MySQLInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/version.js -var require_version31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-nestjs-core"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/semconv.js -var require_semconv19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_HTTP_URL = exports.ATTR_HTTP_METHOD = undefined; - exports.ATTR_HTTP_METHOD = "http.method"; - exports.ATTR_HTTP_URL = "http.url"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/enums/AttributeNames.js -var require_AttributeNames11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["VERSION"] = "nestjs.version"; - AttributeNames2["TYPE"] = "nestjs.type"; - AttributeNames2["MODULE"] = "nestjs.module"; - AttributeNames2["CONTROLLER"] = "nestjs.controller"; - AttributeNames2["CALLBACK"] = "nestjs.callback"; - AttributeNames2["PIPES"] = "nestjs.pipes"; - AttributeNames2["INTERCEPTORS"] = "nestjs.interceptors"; - AttributeNames2["GUARDS"] = "nestjs.guards"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/enums/NestType.js -var require_NestType = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NestType = undefined; - var NestType; - (function(NestType2) { - NestType2["APP_CREATION"] = "app_creation"; - NestType2["REQUEST_CONTEXT"] = "request_context"; - NestType2["REQUEST_HANDLER"] = "handler"; - })(NestType = exports.NestType || (exports.NestType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/enums/index.js -var require_enums2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NestType = exports.AttributeNames = undefined; - var AttributeNames_1 = require_AttributeNames11(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); - var NestType_1 = require_NestType(); - Object.defineProperty(exports, "NestType", { enumerable: true, get: function() { - return NestType_1.NestType; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/instrumentation.js -var require_instrumentation26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NestInstrumentation = undefined; - var api4 = require_src(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var version_1 = require_version31(); - var semconv_1 = require_semconv19(); - var enums_1 = require_enums2(); - var supportedVersions = [">=4.0.0 <12"]; - - class NestInstrumentation extends instrumentation_1.InstrumentationBase { - static COMPONENT = "@nestjs/core"; - static COMMON_ATTRIBUTES = { - component: NestInstrumentation.COMPONENT - }; - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition(NestInstrumentation.COMPONENT, supportedVersions); - module2.files.push(this.getNestFactoryFileInstrumentation(supportedVersions), this.getRouterExecutionContextFileInstrumentation(supportedVersions)); - return module2; - } - getNestFactoryFileInstrumentation(versions2) { - return new instrumentation_1.InstrumentationNodeModuleFile("@nestjs/core/nest-factory.js", versions2, (NestFactoryStatic, moduleVersion) => { - this.ensureWrapped(NestFactoryStatic.NestFactoryStatic.prototype, "create", createWrapNestFactoryCreate(this.tracer, moduleVersion)); - return NestFactoryStatic; - }, (NestFactoryStatic) => { - this._unwrap(NestFactoryStatic.NestFactoryStatic.prototype, "create"); - }); - } - getRouterExecutionContextFileInstrumentation(versions2) { - return new instrumentation_1.InstrumentationNodeModuleFile("@nestjs/core/router/router-execution-context.js", versions2, (RouterExecutionContext, moduleVersion) => { - this.ensureWrapped(RouterExecutionContext.RouterExecutionContext.prototype, "create", createWrapCreateHandler(this.tracer, moduleVersion, this._semconvStability)); - return RouterExecutionContext; - }, (RouterExecutionContext) => { - this._unwrap(RouterExecutionContext.RouterExecutionContext.prototype, "create"); - }); - } - ensureWrapped(obj, methodName, wrapper) { - if ((0, instrumentation_1.isWrapped)(obj[methodName])) { - this._unwrap(obj, methodName); - } - this._wrap(obj, methodName, wrapper); - } - } - exports.NestInstrumentation = NestInstrumentation; - function createWrapNestFactoryCreate(tracer, moduleVersion) { - return function wrapCreate(original) { - return function createWithTrace(nestModule) { - const span = tracer.startSpan("Create Nest App", { - attributes: { - ...NestInstrumentation.COMMON_ATTRIBUTES, - [enums_1.AttributeNames.TYPE]: enums_1.NestType.APP_CREATION, - [enums_1.AttributeNames.VERSION]: moduleVersion, - [enums_1.AttributeNames.MODULE]: nestModule.name - } - }); - const spanContext = api4.trace.setSpan(api4.context.active(), span); - return api4.context.with(spanContext, async () => { - try { - return await original.apply(this, arguments); - } catch (e) { - throw addError(span, e); - } finally { - span.end(); - } - }); - }; - }; - } - function createWrapCreateHandler(tracer, moduleVersion, semconvStability) { - return function wrapCreateHandler(original) { - return function createHandlerWithTrace(instance, callback) { - arguments[1] = createWrapHandler(tracer, moduleVersion, callback); - const handler = original.apply(this, arguments); - const callbackName = callback.name; - const instanceName = instance.constructor && instance.constructor.name ? instance.constructor.name : "UnnamedInstance"; - const spanName = callbackName ? `${instanceName}.${callbackName}` : instanceName; - return function(req, res, next) { - const attributes = { - ...NestInstrumentation.COMMON_ATTRIBUTES, - [enums_1.AttributeNames.VERSION]: moduleVersion, - [enums_1.AttributeNames.TYPE]: enums_1.NestType.REQUEST_CONTEXT, - [semantic_conventions_1.ATTR_HTTP_ROUTE]: req.route?.path || req.routeOptions?.url || req.routerPath, - [enums_1.AttributeNames.CONTROLLER]: instanceName, - [enums_1.AttributeNames.CALLBACK]: callbackName - }; - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - attributes[semconv_1.ATTR_HTTP_METHOD] = req.method; - attributes[semconv_1.ATTR_HTTP_URL] = req.originalUrl || req.url; - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes[semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD] = req.method; - attributes[semantic_conventions_1.ATTR_URL_FULL] = req.originalUrl || req.url; - } - const span = tracer.startSpan(spanName, { attributes }); - const spanContext = api4.trace.setSpan(api4.context.active(), span); - return api4.context.with(spanContext, async () => { - try { - return await handler.apply(this, arguments); - } catch (e) { - throw addError(span, e); - } finally { - span.end(); - } - }); - }; - }; - }; - } - function createWrapHandler(tracer, moduleVersion, handler) { - const spanName = handler.name || "anonymous nest handler"; - const options = { - attributes: { - ...NestInstrumentation.COMMON_ATTRIBUTES, - [enums_1.AttributeNames.VERSION]: moduleVersion, - [enums_1.AttributeNames.TYPE]: enums_1.NestType.REQUEST_HANDLER, - [enums_1.AttributeNames.CALLBACK]: handler.name - } - }; - const wrappedHandler = function() { - const span = tracer.startSpan(spanName, options); - const spanContext = api4.trace.setSpan(api4.context.active(), span); - return api4.context.with(spanContext, async () => { - try { - return await handler.apply(this, arguments); - } catch (e) { - throw addError(span, e); - } finally { - span.end(); - } - }); - }; - if (handler.name) { - Object.defineProperty(wrappedHandler, "name", { value: handler.name }); - } - Reflect.getMetadataKeys(handler).forEach((metadataKey) => { - Reflect.defineMetadata(metadataKey, Reflect.getMetadata(metadataKey, handler), wrappedHandler); - }); - return wrappedHandler; - } - var addError = (span, error48) => { - span.recordException(error48); - span.setStatus({ code: api4.SpanStatusCode.ERROR, message: error48.message }); - return error48; - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-nestjs-core@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-nestjs-core/build/src/index.js -var require_src39 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = exports.NestInstrumentation = undefined; - var instrumentation_1 = require_instrumentation26(); - Object.defineProperty(exports, "NestInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.NestInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames11(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/semconv.js -var require_semconv20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NET_TRANSPORT_VALUE_PIPE = exports.NET_TRANSPORT_VALUE_IP_TCP = exports.ATTR_NET_TRANSPORT = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_NET_PEER_IP = exports.ATTR_NET_HOST_PORT = exports.ATTR_NET_HOST_IP = undefined; - exports.ATTR_NET_HOST_IP = "net.host.ip"; - exports.ATTR_NET_HOST_PORT = "net.host.port"; - exports.ATTR_NET_PEER_IP = "net.peer.ip"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.ATTR_NET_TRANSPORT = "net.transport"; - exports.NET_TRANSPORT_VALUE_IP_TCP = "ip_tcp"; - exports.NET_TRANSPORT_VALUE_PIPE = "pipe"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/types.js -var require_types6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TLSAttributes = undefined; - var TLSAttributes; - (function(TLSAttributes2) { - TLSAttributes2["PROTOCOL"] = "tls.protocol"; - TLSAttributes2["AUTHORIZED"] = "tls.authorized"; - TLSAttributes2["CIPHER_NAME"] = "tls.cipher.name"; - TLSAttributes2["CIPHER_VERSION"] = "tls.cipher.version"; - TLSAttributes2["CERTIFICATE_FINGERPRINT"] = "tls.certificate.fingerprint"; - TLSAttributes2["CERTIFICATE_SERIAL_NUMBER"] = "tls.certificate.serialNumber"; - TLSAttributes2["CERTIFICATE_VALID_FROM"] = "tls.certificate.validFrom"; - TLSAttributes2["CERTIFICATE_VALID_TO"] = "tls.certificate.validTo"; - TLSAttributes2["ALPN_PROTOCOL"] = "tls.alpnProtocol"; - })(TLSAttributes = exports.TLSAttributes || (exports.TLSAttributes = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/internal-types.js -var require_internal_types9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SocketEvent = undefined; - var SocketEvent; - (function(SocketEvent2) { - SocketEvent2["CLOSE"] = "close"; - SocketEvent2["CONNECT"] = "connect"; - SocketEvent2["ERROR"] = "error"; - SocketEvent2["SECURE_CONNECT"] = "secureConnect"; - })(SocketEvent = exports.SocketEvent || (exports.SocketEvent = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/utils.js -var require_utils27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getNormalizedArgs = exports.IPC_TRANSPORT = undefined; - var semconv_1 = require_semconv20(); - var os_1 = __require("os"); - exports.IPC_TRANSPORT = (0, os_1.platform)() === "win32" ? semconv_1.NET_TRANSPORT_VALUE_PIPE : "unix"; - function getHost(args) { - return typeof args[1] === "string" ? args[1] : "localhost"; - } - function getNormalizedArgs(args) { - const opt = args[0]; - if (!opt) { - return; - } - switch (typeof opt) { - case "number": - return { - port: opt, - host: getHost(args) - }; - case "object": - if (Array.isArray(opt)) { - return getNormalizedArgs(opt); - } - return opt; - case "string": { - const maybePort = Number(opt); - if (maybePort >= 0) { - return { - port: maybePort, - host: getHost(args) - }; - } - return { - path: opt - }; - } - default: - return; - } - } - exports.getNormalizedArgs = getNormalizedArgs; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/version.js -var require_version32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.51.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-net"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/instrumentation.js -var require_instrumentation27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NetInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv20(); - var types_1 = require_types6(); - var internal_types_1 = require_internal_types9(); - var utils_1 = require_utils27(); - var version_1 = require_version32(); - var tls_1 = __require("tls"); - - class NetInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("net", ["*"], (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.Socket.prototype.connect)) { - this._unwrap(moduleExports.Socket.prototype, "connect"); - } - this._wrap(moduleExports.Socket.prototype, "connect", this._getPatchedConnect()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.Socket.prototype, "connect"); - }) - ]; - } - _getPatchedConnect() { - return (original) => { - const plugin = this; - return function patchedConnect(...args) { - const options = (0, utils_1.getNormalizedArgs)(args); - const span = this instanceof tls_1.TLSSocket ? plugin._startTLSSpan(options, this) : plugin._startSpan(options, this); - return (0, instrumentation_1.safeExecuteInTheMiddle)(() => original.apply(this, args), (error48) => { - if (error48 !== undefined) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - } - }); - }; - }; - } - _startSpan(options, socket) { - if (!options) { - return this._startGenericSpan(socket); - } - if (options.path) { - return this._startIpcSpan(options, socket); - } - return this._startTcpSpan(options, socket); - } - _startTLSSpan(options, socket) { - const tlsSpan = this.tracer.startSpan("tls.connect"); - const netSpan = api_1.context.with(api_1.trace.setSpan(api_1.context.active(), tlsSpan), () => { - return this._startSpan(options, socket); - }); - const otelTlsSpanListener = () => { - const peerCertificate = socket.getPeerCertificate(true); - const cipher = socket.getCipher(); - const protocol = socket.getProtocol(); - const attributes = { - [types_1.TLSAttributes.PROTOCOL]: String(protocol), - [types_1.TLSAttributes.AUTHORIZED]: String(socket.authorized), - [types_1.TLSAttributes.CIPHER_NAME]: cipher.name, - [types_1.TLSAttributes.CIPHER_VERSION]: cipher.version, - [types_1.TLSAttributes.CERTIFICATE_FINGERPRINT]: peerCertificate.fingerprint, - [types_1.TLSAttributes.CERTIFICATE_SERIAL_NUMBER]: peerCertificate.serialNumber, - [types_1.TLSAttributes.CERTIFICATE_VALID_FROM]: peerCertificate.valid_from, - [types_1.TLSAttributes.CERTIFICATE_VALID_TO]: peerCertificate.valid_to, - [types_1.TLSAttributes.ALPN_PROTOCOL]: "" - }; - if (socket.alpnProtocol) { - attributes[types_1.TLSAttributes.ALPN_PROTOCOL] = socket.alpnProtocol; - } - tlsSpan.setAttributes(attributes); - tlsSpan.end(); - }; - const otelTlsErrorListener = (e) => { - tlsSpan.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: e.message - }); - tlsSpan.end(); - }; - socket.prependOnceListener(internal_types_1.SocketEvent.SECURE_CONNECT, otelTlsSpanListener); - socket.once(internal_types_1.SocketEvent.ERROR, otelTlsErrorListener); - const otelTlsRemoveListeners = () => { - socket.removeListener(internal_types_1.SocketEvent.SECURE_CONNECT, otelTlsSpanListener); - socket.removeListener(internal_types_1.SocketEvent.ERROR, otelTlsErrorListener); - for (const event of SOCKET_EVENTS) { - socket.removeListener(event, otelTlsRemoveListeners); - } - }; - for (const event of [ - internal_types_1.SocketEvent.CLOSE, - internal_types_1.SocketEvent.ERROR, - internal_types_1.SocketEvent.SECURE_CONNECT - ]) { - socket.once(event, otelTlsRemoveListeners); - } - return netSpan; - } - _startGenericSpan(socket) { - const span = this.tracer.startSpan("connect"); - registerListeners(socket, span); - return span; - } - _startIpcSpan(options, socket) { - const span = this.tracer.startSpan("ipc.connect", { - attributes: { - [semconv_1.ATTR_NET_TRANSPORT]: utils_1.IPC_TRANSPORT, - [semconv_1.ATTR_NET_PEER_NAME]: options.path - } - }); - registerListeners(socket, span); - return span; - } - _startTcpSpan(options, socket) { - const span = this.tracer.startSpan("tcp.connect", { - attributes: { - [semconv_1.ATTR_NET_TRANSPORT]: semconv_1.NET_TRANSPORT_VALUE_IP_TCP, - [semconv_1.ATTR_NET_PEER_NAME]: options.host, - [semconv_1.ATTR_NET_PEER_PORT]: options.port - } - }); - registerListeners(socket, span, { hostAttributes: true }); - return span; - } - } - exports.NetInstrumentation = NetInstrumentation; - var SOCKET_EVENTS = [ - internal_types_1.SocketEvent.CLOSE, - internal_types_1.SocketEvent.CONNECT, - internal_types_1.SocketEvent.ERROR - ]; - function spanEndHandler(span) { - return () => { - span.end(); - }; - } - function spanErrorHandler(span) { - return (e) => { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: e.message - }); - }; - } - function registerListeners(socket, span, { hostAttributes = false } = {}) { - const setSpanError = spanErrorHandler(span); - const setSpanEnd = spanEndHandler(span); - const setHostAttributes = () => { - span.setAttributes({ - [semconv_1.ATTR_NET_PEER_IP]: socket.remoteAddress, - [semconv_1.ATTR_NET_HOST_IP]: socket.localAddress, - [semconv_1.ATTR_NET_HOST_PORT]: socket.localPort - }); - }; - socket.once(internal_types_1.SocketEvent.ERROR, setSpanError); - if (hostAttributes) { - socket.once(internal_types_1.SocketEvent.CONNECT, setHostAttributes); - } - const removeListeners = () => { - socket.removeListener(internal_types_1.SocketEvent.ERROR, setSpanError); - socket.removeListener(internal_types_1.SocketEvent.CONNECT, setHostAttributes); - for (const event of SOCKET_EVENTS) { - socket.removeListener(event, setSpanEnd); - socket.removeListener(event, removeListeners); - } - }; - for (const event of SOCKET_EVENTS) { - socket.once(event, setSpanEnd); - socket.once(event, removeListeners); - } - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-net@0.51.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-net/build/src/index.js -var require_src40 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TLSAttributes = exports.NetInstrumentation = undefined; - var instrumentation_1 = require_instrumentation27(); - Object.defineProperty(exports, "NetInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.NetInstrumentation; - } }); - var types_1 = require_types6(); - Object.defineProperty(exports, "TLSAttributes", { enumerable: true, get: function() { - return types_1.TLSAttributes; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-openai@0.5.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-openai/build/src/semconv.js -var require_semconv21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = exports.ATTR_GEN_AI_TOKEN_TYPE = exports.ATTR_GEN_AI_SYSTEM = exports.ATTR_GEN_AI_RESPONSE_MODEL = exports.ATTR_GEN_AI_RESPONSE_ID = exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = exports.ATTR_GEN_AI_REQUEST_TOP_P = exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = exports.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES = exports.ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY = exports.ATTR_GEN_AI_REQUEST_MODEL = exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = exports.ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY = exports.ATTR_GEN_AI_REQUEST_ENCODING_FORMATS = exports.ATTR_GEN_AI_OPERATION_NAME = exports.ATTR_EVENT_NAME = undefined; - exports.ATTR_EVENT_NAME = "event.name"; - exports.ATTR_GEN_AI_OPERATION_NAME = "gen_ai.operation.name"; - exports.ATTR_GEN_AI_REQUEST_ENCODING_FORMATS = "gen_ai.request.encoding_formats"; - exports.ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY = "gen_ai.request.frequency_penalty"; - exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = "gen_ai.request.max_tokens"; - exports.ATTR_GEN_AI_REQUEST_MODEL = "gen_ai.request.model"; - exports.ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY = "gen_ai.request.presence_penalty"; - exports.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES = "gen_ai.request.stop_sequences"; - exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = "gen_ai.request.temperature"; - exports.ATTR_GEN_AI_REQUEST_TOP_P = "gen_ai.request.top_p"; - exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = "gen_ai.response.finish_reasons"; - exports.ATTR_GEN_AI_RESPONSE_ID = "gen_ai.response.id"; - exports.ATTR_GEN_AI_RESPONSE_MODEL = "gen_ai.response.model"; - exports.ATTR_GEN_AI_SYSTEM = "gen_ai.system"; - exports.ATTR_GEN_AI_TOKEN_TYPE = "gen_ai.token.type"; - exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens"; - exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = "gen_ai.usage.output_tokens"; - exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = "gen_ai.client.operation.duration"; - exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = "gen_ai.client.token.usage"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-openai@0.5.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-openai/build/src/version.js -var require_version33 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.5.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-openai"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-openai@0.5.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-openai/build/src/utils.js -var require_utils28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getAttrsFromBaseURL = exports.getEnvBool = undefined; - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - function getEnvBool(name, diag_ = api_1.diag) { - const val = process.env[name]; - if (val === undefined || val === "") { - return; - } else if (typeof val !== "string") { - throw new Error(`invalid type for environment variable: ${typeof val} (${name}=${val})`); - } else { - const valLower = val.toLowerCase(); - if (valLower === "true") { - return true; - } else if (valLower === "false") { - return false; - } else { - diag_.warn(`invalid boolean value for environment variable: ${name}=${val}; ignoring`); - return; - } - } - } - exports.getEnvBool = getEnvBool; - var SERVER_PORT_FROM_URL_PROTOCOL = { - "https:": 443, - "http:": 80 - }; - function getAttrsFromBaseURL(baseURL, diag_ = api_1.diag) { - if (!baseURL) { - return; - } - let u; - try { - u = new URL(baseURL); - } catch (ex) { - diag_.debug(`could not determine server.{address,port} from baseURL: ${ex}`); - return; - } - return { - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: u.hostname, - [semantic_conventions_1.ATTR_SERVER_PORT]: u.port ? Number(u.port) : SERVER_PORT_FROM_URL_PROTOCOL[u.protocol] - }; - } - exports.getAttrsFromBaseURL = getAttrsFromBaseURL; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-openai@0.5.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-openai/build/src/instrumentation.js -var require_instrumentation28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OpenAIInstrumentation = undefined; - var perf_hooks_1 = __require("perf_hooks"); - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var api_logs_1 = require_src6(); - var semconv_1 = require_semconv21(); - var version_1 = require_version33(); - var utils_1 = require_utils28(); - var EVENT_GEN_AI_SYSTEM_MESSAGE = "gen_ai.system.message"; - var EVENT_GEN_AI_USER_MESSAGE = "gen_ai.user.message"; - var EVENT_GEN_AI_ASSISTANT_MESSAGE = "gen_ai.assistant.message"; - var EVENT_GEN_AI_TOOL_MESSAGE = "gen_ai.tool.message"; - var EVENT_GEN_AI_CHOICE = "gen_ai.choice"; - - class OpenAIInstrumentation extends instrumentation_1.InstrumentationBase { - _genaiClientOperationDuration; - _genaiClientTokenUsage; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - const cfg = this.getConfig(); - const envCC = (0, utils_1.getEnvBool)("OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT", this._diag); - if (envCC !== undefined) { - cfg.captureMessageContent = envCC; - } - } - setConfig(config2 = {}) { - const { captureMessageContent, ...validConfig } = config2; - validConfig.captureMessageContent = !!captureMessageContent; - super.setConfig(validConfig); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("openai", [">=4.19.0 <7"], (modExports) => { - this._wrap(modExports.OpenAI.Chat.Completions.prototype, "create", this._getPatchedChatCompletionsCreate()); - this._wrap(modExports.OpenAI.Embeddings.prototype, "create", this._getPatchedEmbeddingsCreate()); - return modExports; - }, (modExports) => { - this._unwrap(modExports.OpenAI.Chat.Completions.prototype, "create"); - this._unwrap(modExports.OpenAI.Embeddings.prototype, "create"); - }) - ]; - } - _updateMetricInstruments() { - this._genaiClientOperationDuration = this.meter.createHistogram(semconv_1.METRIC_GEN_AI_CLIENT_OPERATION_DURATION, { - description: "GenAI operation duration", - unit: "s", - advice: { - explicitBucketBoundaries: [ - 0.01, - 0.02, - 0.04, - 0.08, - 0.16, - 0.32, - 0.64, - 1.28, - 2.56, - 5.12, - 10.24, - 20.48, - 40.96, - 81.92 - ] - } - }); - this._genaiClientTokenUsage = this.meter.createHistogram(semconv_1.METRIC_GEN_AI_CLIENT_TOKEN_USAGE, { - description: "Measures number of input and output tokens used", - unit: "{token}", - advice: { - explicitBucketBoundaries: [ - 1, - 4, - 16, - 64, - 256, - 1024, - 4096, - 16384, - 65536, - 262144, - 1048576, - 4194304, - 16777216, - 67108864 - ] - } - }); - } - _getPatchedChatCompletionsCreate() { - const self2 = this; - return (original) => { - return function patchedCreate(...args) { - if (!self2.isEnabled) { - return original.apply(this, args); - } - self2._diag.debug("OpenAI.Chat.Completions.create args: %O", args); - const params = args[0]; - const config2 = self2.getConfig(); - const startNow = perf_hooks_1.performance.now(); - let startInfo; - try { - startInfo = self2._startChatCompletionsSpan(params, config2, this?._client?.baseURL); - } catch (err) { - self2._diag.error("unexpected error starting span:", err); - return original.apply(this, args); - } - const { span, ctx, commonAttrs } = startInfo; - const apiPromise = api_1.context.with(ctx, () => original.apply(this, args)); - if (isStreamPromise(params, apiPromise)) { - return apiPromise.then((stream3) => { - self2._wrap(stream3, "iterator", (origIterator) => { - return () => { - return self2._onChatCompletionsStreamIterator(origIterator(), span, startNow, config2, commonAttrs, ctx); - }; - }); - return stream3; - }); - } - apiPromise.then((result) => { - self2._onChatCompletionsCreateResult(span, startNow, commonAttrs, result, config2, ctx); - }).catch(self2._createAPIPromiseRejectionHandler(startNow, span, commonAttrs)); - return apiPromise; - }; - }; - } - _startChatCompletionsSpan(params, config2, baseURL) { - const commonAttrs = { - [semconv_1.ATTR_GEN_AI_OPERATION_NAME]: "chat", - [semconv_1.ATTR_GEN_AI_REQUEST_MODEL]: params.model, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }; - Object.assign(commonAttrs, (0, utils_1.getAttrsFromBaseURL)(baseURL, this._diag)); - const attrs = { - ...commonAttrs - }; - if (params.frequency_penalty != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_FREQUENCY_PENALTY] = params.frequency_penalty; - } - if (params.max_completion_tokens != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = params.max_completion_tokens; - } else if (params.max_tokens != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_MAX_TOKENS] = params.max_tokens; - } - if (params.presence_penalty != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_PRESENCE_PENALTY] = params.presence_penalty; - } - if (params.stop != null) { - if (Array.isArray(params.stop)) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = params.stop; - } else { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_STOP_SEQUENCES] = [params.stop]; - } - } - if (params.temperature != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_TEMPERATURE] = params.temperature; - } - if (params.top_p != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_TOP_P] = params.top_p; - } - const span = this.tracer.startSpan(`${attrs[semconv_1.ATTR_GEN_AI_OPERATION_NAME]} ${attrs[semconv_1.ATTR_GEN_AI_REQUEST_MODEL]}`, { - kind: api_1.SpanKind.CLIENT, - attributes: attrs - }); - const ctx = api_1.trace.setSpan(api_1.context.active(), span); - const timestamp = Date.now(); - params.messages.forEach((msg) => { - switch (msg.role) { - case "system": { - const body = {}; - if (config2.captureMessageContent) { - if (Array.isArray(msg.content)) { - body.content = msg.content.map((p) => p.text).join(""); - } else { - body.content = msg.content; - } - } - this.logger.emit({ - timestamp, - context: ctx, - severityNumber: api_logs_1.SeverityNumber.INFO, - attributes: { - [semconv_1.ATTR_EVENT_NAME]: EVENT_GEN_AI_SYSTEM_MESSAGE, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }, - body - }); - break; - } - case "user": { - const body = {}; - if (config2.captureMessageContent) { - if (Array.isArray(msg.content)) { - body.content = msg.content.filter(isTextContent).map((p) => p.text).join(""); - } else { - body.content = msg.content; - } - } - this.logger.emit({ - timestamp, - context: ctx, - severityNumber: api_logs_1.SeverityNumber.INFO, - attributes: { - [semconv_1.ATTR_EVENT_NAME]: EVENT_GEN_AI_USER_MESSAGE, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }, - body - }); - break; - } - case "assistant": { - const body = {}; - if (config2.captureMessageContent) { - if (msg.content) { - if (Array.isArray(msg.content)) { - body.content = msg.content.filter(isTextContent).map((p) => p.text).join(""); - } else { - body.content = msg.content; - } - } - body.tool_calls = msg.tool_calls?.map((tc) => { - const repr = { - id: tc.id, - type: tc.type - }; - if (tc.type === "function") { - repr.function = { - name: tc.function.name, - arguments: tc.function.arguments - }; - } - return repr; - }); - } else { - body.tool_calls = msg.tool_calls?.map((tc) => { - const repr = { - id: tc.id, - type: tc.type - }; - if (tc.type === "function") { - repr.function = { name: tc.function.name }; - } - return repr; - }); - } - this.logger.emit({ - timestamp, - context: ctx, - severityNumber: api_logs_1.SeverityNumber.INFO, - attributes: { - [semconv_1.ATTR_EVENT_NAME]: EVENT_GEN_AI_ASSISTANT_MESSAGE, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }, - body - }); - break; - } - case "tool": { - const body = { - id: msg.tool_call_id - }; - if (config2.captureMessageContent) { - if (Array.isArray(msg.content)) { - body.content = msg.content.map((p) => p.text).join(""); - } else { - body.content = msg.content; - } - } - this.logger.emit({ - timestamp, - context: ctx, - severityNumber: api_logs_1.SeverityNumber.INFO, - attributes: { - [semconv_1.ATTR_EVENT_NAME]: EVENT_GEN_AI_TOOL_MESSAGE, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }, - body - }); - break; - } - default: - this._diag.debug(`unknown message role in OpenAI.Chat.Completions.create: ${msg.role}`); - } - }); - return { span, ctx, commonAttrs }; - } - async* _onChatCompletionsStreamIterator(streamIter, span, startNow, config2, commonAttrs, ctx) { - let id; - let model; - const finishReasons = []; - const choices = []; - for await (const chunk of streamIter) { - yield chunk; - this._diag.debug("OpenAI.Chat.Completions.create stream chunk: %O", chunk); - const idx = chunk.choices[0]?.index ?? 0; - if (!choices[idx]) { - choices[idx] = {}; - } - if (config2.captureMessageContent) { - const contentPart = chunk.choices[0]?.delta?.content; - if (contentPart) { - if (!choices[idx].content) { - choices[idx].content = ""; - } - choices[idx].content += contentPart; - } - } - const toolCallPart = chunk.choices[0]?.delta?.tool_calls?.[0]; - if (toolCallPart) { - if (!choices[idx].toolCalls) { - choices[idx].toolCalls = []; - } - const toolCalls = choices[idx].toolCalls; - if (toolCallPart.id) { - const repr = { - id: toolCallPart.id, - type: toolCallPart.type - }; - if (toolCallPart.type === "function") { - repr.function = { - name: toolCallPart.function?.name, - arguments: toolCallPart.function?.arguments ?? "" - }; - } - toolCalls.push(repr); - } else if (toolCalls.length > 0) { - const lastPart = toolCalls[toolCalls.length - 1]; - if (lastPart.function !== undefined) { - lastPart.function.arguments += toolCallPart.function?.arguments ?? ""; - } - } - } - if (!id && chunk.id) { - id = chunk.id; - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_ID, id); - } - if (!model && chunk.model) { - model = chunk.model; - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_MODEL, model); - } - if (!finishReasons[idx]) { - const finishReason = chunk.choices[0]?.finish_reason; - if (finishReason) { - finishReasons[idx] = finishReason; - } - } - if (chunk.usage) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, chunk.usage.prompt_tokens); - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, chunk.usage.completion_tokens); - this._genaiClientTokenUsage.record(chunk.usage.prompt_tokens, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: model, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: "input" - }); - this._genaiClientTokenUsage.record(chunk.usage.completion_tokens, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: model, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: "output" - }); - } - } - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, finishReasons.filter((f) => f !== undefined)); - for (const [idx, choice] of choices.entries()) { - if (!choice) { - continue; - } - const message = {}; - if (config2.captureMessageContent && choice.content && choice.content.length > 0) { - message.content = choice.content; - } - if (choice.toolCalls && choice.toolCalls.length > 0) { - message.tool_calls = choice.toolCalls; - if (!config2.captureMessageContent) { - message.tool_calls.forEach((tc) => { - delete tc.function?.arguments; - }); - } - } - this.logger.emit({ - timestamp: Date.now(), - context: ctx, - severityNumber: api_logs_1.SeverityNumber.INFO, - attributes: { - [semconv_1.ATTR_EVENT_NAME]: EVENT_GEN_AI_CHOICE, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }, - body: { - finish_reason: finishReasons[idx], - index: idx, - message - } - }); - } - this._genaiClientOperationDuration.record((perf_hooks_1.performance.now() - startNow) / 1000, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: model - }); - span.end(); - } - _onChatCompletionsCreateResult(span, startNow, commonAttrs, result, config2, ctx) { - this._diag.debug("OpenAI.Chat.Completions.create result: %O", result); - try { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_FINISH_REASONS, result.choices.map((c) => c.finish_reason)); - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_ID, result.id); - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_MODEL, result.model); - if (result.usage) { - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, result.usage.prompt_tokens); - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, result.usage.completion_tokens); - } - result.choices.forEach((choice) => { - const message = {}; - if (config2.captureMessageContent) { - if (choice.message.content) { - message.content = choice.message.content; - } - if (choice.message.tool_calls) { - message.tool_calls = choice.message.tool_calls; - } - } else { - if (choice.message.tool_calls) { - message.tool_calls = choice.message.tool_calls.map((tc) => { - const repr = { - id: tc.id, - type: tc.type - }; - if (tc.type === "function") { - repr.function = { name: tc.function.name }; - } - return repr; - }); - } - } - this.logger.emit({ - timestamp: Date.now(), - context: ctx, - severityNumber: api_logs_1.SeverityNumber.INFO, - attributes: { - [semconv_1.ATTR_EVENT_NAME]: EVENT_GEN_AI_CHOICE, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }, - body: { - finish_reason: choice.finish_reason, - index: choice.index, - message - } - }); - }); - this._genaiClientOperationDuration.record((perf_hooks_1.performance.now() - startNow) / 1000, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.model - }); - if (result.usage) { - this._genaiClientTokenUsage.record(result.usage.prompt_tokens, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.model, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: "input" - }); - this._genaiClientTokenUsage.record(result.usage.completion_tokens, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.model, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: "output" - }); - } - } catch (err) { - this._diag.error("unexpected error getting telemetry from chat result:", err); - } - span.end(); - } - _createAPIPromiseRejectionHandler(startNow, span, commonAttrs) { - return (err) => { - this._diag.debug("OpenAI APIPromise rejection: %O", err); - const errorType = err?.constructor?.name; - this._genaiClientOperationDuration.record((perf_hooks_1.performance.now() - startNow) / 1000, { - ...commonAttrs, - "error.type": errorType - }); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - span.setAttribute("error.type", errorType); - span.end(); - }; - } - _getPatchedEmbeddingsCreate() { - const self2 = this; - return (original) => { - return function patchedCreate(...args) { - if (!self2.isEnabled) { - return original.apply(this, args); - } - self2._diag.debug("OpenAI.Chat.Embeddings.create args: %O", args); - const params = args[0]; - const startNow = perf_hooks_1.performance.now(); - let startInfo; - try { - startInfo = self2._startEmbeddingsSpan(params, this?._client?.baseURL); - } catch (err) { - self2._diag.error("unexpected error starting span:", err); - return original.apply(this, args); - } - const { span, ctx, commonAttrs } = startInfo; - const apiPromise = api_1.context.with(ctx, () => original.apply(this, args)); - apiPromise.then((result) => { - self2._onEmbeddingsCreateResult(span, startNow, commonAttrs, result); - }).catch(self2._createAPIPromiseRejectionHandler(startNow, span, commonAttrs)); - return apiPromise; - }; - }; - } - _startEmbeddingsSpan(params, baseURL) { - const commonAttrs = { - [semconv_1.ATTR_GEN_AI_OPERATION_NAME]: "embeddings", - [semconv_1.ATTR_GEN_AI_REQUEST_MODEL]: params.model, - [semconv_1.ATTR_GEN_AI_SYSTEM]: "openai" - }; - Object.assign(commonAttrs, (0, utils_1.getAttrsFromBaseURL)(baseURL, this._diag)); - const attrs = { - ...commonAttrs - }; - if (params.encoding_format != null) { - attrs[semconv_1.ATTR_GEN_AI_REQUEST_ENCODING_FORMATS] = [params.encoding_format]; - } - const span = this.tracer.startSpan(`${attrs[semconv_1.ATTR_GEN_AI_OPERATION_NAME]} ${attrs[semconv_1.ATTR_GEN_AI_REQUEST_MODEL]}`, { - kind: api_1.SpanKind.CLIENT, - attributes: attrs - }); - const ctx = api_1.trace.setSpan(api_1.context.active(), span); - return { span, ctx, commonAttrs }; - } - _onEmbeddingsCreateResult(span, startNow, commonAttrs, result) { - this._diag.debug("OpenAI.Embeddings.create result: %O", result); - try { - span.setAttribute(semconv_1.ATTR_GEN_AI_RESPONSE_MODEL, result.model); - this._genaiClientOperationDuration.record((perf_hooks_1.performance.now() - startNow) / 1000, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.model - }); - span.setAttribute(semconv_1.ATTR_GEN_AI_USAGE_INPUT_TOKENS, result.usage.prompt_tokens); - this._genaiClientTokenUsage.record(result.usage.prompt_tokens, { - ...commonAttrs, - [semconv_1.ATTR_GEN_AI_RESPONSE_MODEL]: result.model, - [semconv_1.ATTR_GEN_AI_TOKEN_TYPE]: "input" - }); - } catch (err) { - this._diag.error("unexpected error getting telemetry from embeddings result:", err); - } - span.end(); - } - } - exports.OpenAIInstrumentation = OpenAIInstrumentation; - function isTextContent(value) { - return value.type === "text"; - } - function isStreamPromise(params, value) { - if (params && params.stream) { - return true; - } - return false; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-openai@0.5.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-openai/build/src/index.js -var require_src41 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OpenAIInstrumentation = undefined; - var instrumentation_1 = require_instrumentation28(); - Object.defineProperty(exports, "OpenAIInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.OpenAIInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-oracledb@0.33.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-oracledb/build/src/semconv.js -var require_semconv22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_NAME_VALUE_ORACLE_DB = exports.ATTR_DB_USER = exports.ATTR_DB_OPERATION_PARAMETER = undefined; - var ATTR_DB_OPERATION_PARAMETER = (key) => `db.operation.parameter.${key}`; - exports.ATTR_DB_OPERATION_PARAMETER = ATTR_DB_OPERATION_PARAMETER; - exports.ATTR_DB_USER = "db.user"; - exports.DB_SYSTEM_NAME_VALUE_ORACLE_DB = "oracle.db"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-oracledb@0.33.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-oracledb/build/src/constants.js -var require_constants6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanNames = undefined; - var SpanNames; - (function(SpanNames2) { - SpanNames2["CONNECT"] = "oracledb.getConnection"; - SpanNames2["POOL_CONNECT"] = "oracledb.Pool.getConnection"; - SpanNames2["POOL_CREATE"] = "oracledb.createPool"; - SpanNames2["CONNECT_PROTOCOL_NEG"] = "oracledb.ProtocolMessage"; - SpanNames2["CONNECT_DATATYPE_NEG"] = "oracledb.DataTypeMessage"; - SpanNames2["CONNECT_AUTH_MSG"] = "oracledb.AuthMessage"; - SpanNames2["CONNECT_FAST_AUTH"] = "oracledb.FastAuthMessage"; - SpanNames2["EXECUTE_MSG"] = "oracledb.ExecuteMessage"; - SpanNames2["EXECUTE"] = "oracledb.Connection.execute"; - SpanNames2["EXECUTE_MANY"] = "oracledb.Connection.executeMany"; - SpanNames2["LOGOFF_MSG"] = "oracledb.LogOffMessage"; - SpanNames2["CONNECT_CLOSE"] = "oracledb.Connection.close"; - SpanNames2["CREATE_LOB"] = "oracledb.Connection.createLob"; - SpanNames2["LOB_MESSAGE"] = "oracledb.LobOpMessage"; - SpanNames2["LOB_GETDATA"] = "oracledb.Lob.getData"; - })(SpanNames = exports.SpanNames || (exports.SpanNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-oracledb@0.33.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-oracledb/build/src/OracleTelemetryTraceHandler.js -var require_OracleTelemetryTraceHandler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOracleTelemetryTraceHandlerClass = undefined; - var instrumentation_1 = require_src9(); - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv22(); - var OUT_BIND = 3003; - var constants_1 = require_constants6(); - function getTraceHandlerBaseClass(obj) { - try { - return obj.traceHandler.TraceHandlerBase; - } catch (err) { - api_1.diag.error("Failed to load oracledb module.", err); - return null; - } - } - function getOracleTelemetryTraceHandlerClass(obj) { - const traceHandlerBase = getTraceHandlerBaseClass(obj); - if (!traceHandlerBase) { - return; - } - - class OracleTelemetryTraceHandler extends traceHandlerBase { - _getTracer; - _instrumentConfig; - constructor(getTracer2, config2) { - super(); - this._getTracer = getTracer2; - this._instrumentConfig = config2; - } - _shouldSkipInstrumentation() { - return this._instrumentConfig.requireParentSpan === true && api_1.trace.getSpan(api_1.context.active()) === undefined; - } - _getDBNameSpace(instanceName, pdbName, serviceName) { - if (instanceName == null && pdbName == null && serviceName == null) { - return; - } - return `${instanceName ?? ""}|${pdbName ?? ""}|${serviceName ?? ""}`; - } - _getConnectionSpanAttributes(config2) { - return { - [semantic_conventions_1.ATTR_DB_SYSTEM_NAME]: semconv_1.DB_SYSTEM_NAME_VALUE_ORACLE_DB, - [semantic_conventions_1.ATTR_NETWORK_TRANSPORT]: config2.protocol, - [semconv_1.ATTR_DB_USER]: config2.user, - [semantic_conventions_1.ATTR_DB_NAMESPACE]: this._getDBNameSpace(config2.instanceName, config2.pdbName, config2.serviceName), - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: config2.hostName, - [semantic_conventions_1.ATTR_SERVER_PORT]: config2.port - }; - } - _isLobInstance(obj2) { - return typeof obj2 === "object" && obj2 !== null && Reflect.getPrototypeOf(obj2)?.constructor?.name === "Lob"; - } - _getValues(values) { - if (!values) - return; - const convertedValues = {}; - try { - if (Array.isArray(values)) { - values.forEach((value, index) => { - const extractedValue = this._extractValue(value); - if (extractedValue !== undefined) { - convertedValues[(0, semconv_1.ATTR_DB_OPERATION_PARAMETER)(`${index}`)] = extractedValue; - } - }); - } else if (values && typeof values === "object") { - for (const [paramName, value] of Object.entries(values)) { - const key = (0, semconv_1.ATTR_DB_OPERATION_PARAMETER)(paramName); - let inVal = value; - if (inVal && typeof inVal === "object") { - if (inVal.dir === OUT_BIND) { - convertedValues[key] = ""; - continue; - } - if ("val" in inVal) { - inVal = inVal.val; - } - } - const extractedValue = this._extractValue(inVal); - if (extractedValue !== undefined) { - convertedValues[key] = extractedValue; - } - } - } - } catch (e) { - api_1.diag.error("failed to stringify bind values:", values, e); - return; - } - return convertedValues; - } - _extractValue(value) { - if (value == null) { - return "null"; - } - if (value instanceof Buffer || this._isLobInstance(value)) { - return value.toString(); - } - if (typeof value === "object") { - return JSON.stringify(value); - } - return value.toString(); - } - _setCallLevelAttributes(span, callConfig, roundTrip = false) { - if (!callConfig) - return; - if (callConfig.statement) { - span.setAttribute(semantic_conventions_1.ATTR_DB_OPERATION_NAME, callConfig.statement.split(" ")[0].toUpperCase()); - if (this._instrumentConfig.dbStatementDump || this._instrumentConfig.enhancedDatabaseReporting) { - span.setAttribute(semantic_conventions_1.ATTR_DB_QUERY_TEXT, callConfig.statement); - if (this._instrumentConfig.enhancedDatabaseReporting && !roundTrip) { - const values = this._getValues(callConfig.values); - if (values) { - span.setAttributes(values); - } - } - } - } - } - _handleExecuteCustomRequest(span, traceContext) { - if (typeof this._instrumentConfig.requestHook === "function") { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - this._instrumentConfig.requestHook?.(span, { - connection: traceContext.connectLevelConfig, - inputArgs: traceContext.additionalConfig.args - }); - }, (err) => { - if (err) { - api_1.diag.error("Error running request hook", err); - } - }, true); - } - } - _handleExecuteCustomResult(span, traceContext) { - if (typeof this._instrumentConfig.responseHook === "function") { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - this._instrumentConfig.responseHook?.(span, { - data: traceContext.additionalConfig.result - }); - }, (err) => { - if (err) { - api_1.diag.error("Error running query hook", err); - } - }, true); - } - } - _updateSpanName(traceContext) { - const { connectLevelConfig, callLevelConfig, userContext, operation } = traceContext; - if (![ - constants_1.SpanNames.EXECUTE, - constants_1.SpanNames.EXECUTE_MANY, - constants_1.SpanNames.EXECUTE_MSG - ].includes(operation)) { - return; - } - const { instanceName, pdbName, serviceName } = connectLevelConfig; - const dbName = this._getDBNameSpace(instanceName, pdbName, serviceName); - const sqlCommand = callLevelConfig?.statement?.split(" ")[0].toUpperCase() || ""; - userContext.span.updateName(`${operation}:${sqlCommand}${dbName && ` ${dbName}`}`); - } - _updateFinalSpanAttributes(traceContext, roundTrip = false) { - const span = traceContext.userContext.span; - if (traceContext.connectLevelConfig) { - span.setAttributes(this._getConnectionSpanAttributes(traceContext.connectLevelConfig)); - } - if (traceContext.callLevelConfig) { - this._setCallLevelAttributes(span, traceContext.callLevelConfig, roundTrip); - } - if (traceContext.error) { - span.recordException(traceContext.error); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: traceContext.error.message - }); - } - } - setInstrumentConfig(config2 = {}) { - this._instrumentConfig = config2; - } - onEnterFn(traceContext) { - if (this._shouldSkipInstrumentation()) { - return; - } - const spanName = traceContext.operation; - const spanAttributes = traceContext.connectLevelConfig ? this._getConnectionSpanAttributes(traceContext.connectLevelConfig) : {}; - traceContext.userContext = { - span: this._getTracer().startSpan(spanName, { - kind: api_1.SpanKind.CLIENT, - attributes: spanAttributes - }) - }; - if (traceContext.fn) { - traceContext.fn = api_1.context.bind(api_1.trace.setSpan(api_1.context.active(), traceContext.userContext.span), traceContext.fn); - } - if (traceContext.operation === constants_1.SpanNames.EXECUTE) { - this._handleExecuteCustomRequest(traceContext.userContext.span, traceContext); - } - } - onExitFn(traceContext) { - if (!traceContext.userContext?.span) { - return; - } - this._updateFinalSpanAttributes(traceContext); - switch (traceContext.operation) { - case constants_1.SpanNames.EXECUTE: - this._handleExecuteCustomResult(traceContext.userContext.span, traceContext); - break; - default: - break; - } - this._updateSpanName(traceContext); - traceContext.userContext.span.end(); - } - onBeginRoundTrip(traceContext) { - if (this._shouldSkipInstrumentation()) { - return; - } - const spanName = traceContext.operation; - const spanAttrs = {}; - traceContext.userContext = { - span: this._getTracer().startSpan(spanName, { - kind: api_1.SpanKind.CLIENT, - attributes: spanAttrs - }) - }; - } - onEndRoundTrip(traceContext) { - if (!traceContext.userContext?.span) { - return; - } - this._updateFinalSpanAttributes(traceContext, true); - this._updateSpanName(traceContext); - traceContext.userContext.span.end(); - } - } - return OracleTelemetryTraceHandler; - } - exports.getOracleTelemetryTraceHandlerClass = getOracleTelemetryTraceHandlerClass; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-oracledb@0.33.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-oracledb/build/src/version.js -var require_version34 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.33.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-oracledb"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-oracledb@0.33.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-oracledb/build/src/instrumentation.js -var require_instrumentation29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OracleInstrumentation = undefined; - var instrumentation_1 = require_src9(); - var OracleTelemetryTraceHandler_1 = require_OracleTelemetryTraceHandler(); - var version_1 = require_version34(); - - class OracleInstrumentation extends instrumentation_1.InstrumentationBase { - _tmHandler; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - const moduleOracleDB = new instrumentation_1.InstrumentationNodeModuleDefinition("oracledb", [">= 6.7 < 7"], (moduleExports) => { - if (!moduleExports) { - return; - } - if (this._tmHandler) { - moduleExports.traceHandler.setTraceInstance(); - this._tmHandler = null; - } - const config2 = this.getConfig(); - const thClass = (0, OracleTelemetryTraceHandler_1.getOracleTelemetryTraceHandlerClass)(moduleExports); - if (thClass) { - const obj = new thClass(() => this.tracer, config2); - obj.enable(); - moduleExports.traceHandler.setTraceInstance(obj); - this._tmHandler = obj; - } - return moduleExports; - }, (moduleExports) => { - if (this._tmHandler) { - moduleExports.traceHandler.setTraceInstance(); - this._tmHandler = null; - } - }); - return [moduleOracleDB]; - } - setConfig(config2 = {}) { - super.setConfig(config2); - this._tmHandler?.setInstrumentConfig(this._config); - } - } - exports.OracleInstrumentation = OracleInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-oracledb@0.33.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-oracledb/build/src/index.js -var require_src42 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OracleInstrumentation = undefined; - var instrumentation_1 = require_instrumentation29(); - Object.defineProperty(exports, "OracleInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.OracleInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/internal-types.js -var require_internal_types10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EVENT_LISTENERS_SET = undefined; - exports.EVENT_LISTENERS_SET = Symbol("opentelemetry.instrumentation.pg.eventListenersSet"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/enums/AttributeNames.js -var require_AttributeNames12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["PG_VALUES"] = "db.postgresql.values"; - AttributeNames2["PG_PLAN"] = "db.postgresql.plan"; - AttributeNames2["IDLE_TIMEOUT_MILLIS"] = "db.postgresql.idle.timeout.millis"; - AttributeNames2["MAX_CLIENT"] = "db.postgresql.max.client"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/semconv.js -var require_semconv23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS = exports.METRIC_DB_CLIENT_CONNECTION_COUNT = exports.DB_SYSTEM_VALUE_POSTGRESQL = exports.DB_CLIENT_CONNECTION_STATE_VALUE_USED = exports.DB_CLIENT_CONNECTION_STATE_VALUE_IDLE = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_NAME = exports.ATTR_DB_CONNECTION_STRING = exports.ATTR_DB_CLIENT_CONNECTION_STATE = exports.ATTR_DB_CLIENT_CONNECTION_POOL_NAME = undefined; - exports.ATTR_DB_CLIENT_CONNECTION_POOL_NAME = "db.client.connection.pool.name"; - exports.ATTR_DB_CLIENT_CONNECTION_STATE = "db.client.connection.state"; - exports.ATTR_DB_CONNECTION_STRING = "db.connection_string"; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_CLIENT_CONNECTION_STATE_VALUE_IDLE = "idle"; - exports.DB_CLIENT_CONNECTION_STATE_VALUE_USED = "used"; - exports.DB_SYSTEM_VALUE_POSTGRESQL = "postgresql"; - exports.METRIC_DB_CLIENT_CONNECTION_COUNT = "db.client.connection.count"; - exports.METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS = "db.client.connection.pending_requests"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/enums/SpanNames.js -var require_SpanNames = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanNames = undefined; - var SpanNames; - (function(SpanNames2) { - SpanNames2["QUERY_PREFIX"] = "pg.query"; - SpanNames2["CONNECT"] = "pg.connect"; - SpanNames2["POOL_CONNECT"] = "pg-pool.connect"; - })(SpanNames = exports.SpanNames || (exports.SpanNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/utils.js -var require_utils29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isObjectWithTextString = exports.getErrorMessage = exports.patchClientConnectCallback = exports.patchCallbackPGPool = exports.updateCounter = exports.getPoolName = exports.patchCallback = exports.handleExecutionResult = exports.handleConfigQuery = exports.shouldSkipInstrumentation = exports.getSemanticAttributesFromPoolConnection = exports.getSemanticAttributesFromConnection = exports.getConnectionString = exports.parseAndMaskConnectionString = exports.parseNormalizedOperationName = exports.getQuerySpanName = undefined; - var api_1 = require_src(); - var AttributeNames_1 = require_AttributeNames12(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv23(); - var instrumentation_1 = require_src9(); - var SpanNames_1 = require_SpanNames(); - function getQuerySpanName(dbName, queryConfig) { - if (!queryConfig) - return SpanNames_1.SpanNames.QUERY_PREFIX; - const command = typeof queryConfig.name === "string" && queryConfig.name ? queryConfig.name : parseNormalizedOperationName(queryConfig.text); - return `${SpanNames_1.SpanNames.QUERY_PREFIX}:${command}${dbName ? ` ${dbName}` : ""}`; - } - exports.getQuerySpanName = getQuerySpanName; - function parseNormalizedOperationName(queryText) { - const indexOfFirstSpace = queryText.indexOf(" "); - let sqlCommand = indexOfFirstSpace === -1 ? queryText : queryText.slice(0, indexOfFirstSpace); - sqlCommand = sqlCommand.toUpperCase(); - return sqlCommand.endsWith(";") ? sqlCommand.slice(0, -1) : sqlCommand; - } - exports.parseNormalizedOperationName = parseNormalizedOperationName; - function parseAndMaskConnectionString(connectionString) { - try { - const url2 = new URL(connectionString); - url2.username = ""; - url2.password = ""; - return url2.toString(); - } catch (e) { - return "postgresql://localhost:5432/"; - } - } - exports.parseAndMaskConnectionString = parseAndMaskConnectionString; - function getConnectionString(params) { - if ("connectionString" in params && params.connectionString) { - return parseAndMaskConnectionString(params.connectionString); - } - const host = params.host || "localhost"; - const port = params.port || 5432; - const database = params.database || ""; - return `postgresql://${host}:${port}/${database}`; - } - exports.getConnectionString = getConnectionString; - function getPort(port) { - if (Number.isInteger(port)) { - return port; - } - return; - } - function getSemanticAttributesFromConnection(params, semconvStability) { - let attributes = {}; - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - attributes = { - ...attributes, - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_POSTGRESQL, - [semconv_1.ATTR_DB_NAME]: params.database, - [semconv_1.ATTR_DB_CONNECTION_STRING]: getConnectionString(params), - [semconv_1.ATTR_DB_USER]: params.user, - [semconv_1.ATTR_NET_PEER_NAME]: params.host, - [semconv_1.ATTR_NET_PEER_PORT]: getPort(params.port) - }; - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes = { - ...attributes, - [semantic_conventions_1.ATTR_DB_SYSTEM_NAME]: semantic_conventions_1.DB_SYSTEM_NAME_VALUE_POSTGRESQL, - [semantic_conventions_1.ATTR_DB_NAMESPACE]: params.namespace, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: params.host, - [semantic_conventions_1.ATTR_SERVER_PORT]: getPort(params.port) - }; - } - return attributes; - } - exports.getSemanticAttributesFromConnection = getSemanticAttributesFromConnection; - function getSemanticAttributesFromPoolConnection(params, semconvStability) { - let url2; - try { - url2 = params.connectionString ? new URL(params.connectionString) : undefined; - } catch (e) { - url2 = undefined; - } - let attributes = { - [AttributeNames_1.AttributeNames.IDLE_TIMEOUT_MILLIS]: params.idleTimeoutMillis, - [AttributeNames_1.AttributeNames.MAX_CLIENT]: params.maxClient - }; - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - attributes = { - ...attributes, - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_POSTGRESQL, - [semconv_1.ATTR_DB_NAME]: url2?.pathname.slice(1) ?? params.database, - [semconv_1.ATTR_DB_CONNECTION_STRING]: getConnectionString(params), - [semconv_1.ATTR_NET_PEER_NAME]: url2?.hostname ?? params.host, - [semconv_1.ATTR_NET_PEER_PORT]: Number(url2?.port) || getPort(params.port), - [semconv_1.ATTR_DB_USER]: url2?.username ?? params.user - }; - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes = { - ...attributes, - [semantic_conventions_1.ATTR_DB_SYSTEM_NAME]: semantic_conventions_1.DB_SYSTEM_NAME_VALUE_POSTGRESQL, - [semantic_conventions_1.ATTR_DB_NAMESPACE]: params.namespace, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: url2?.hostname ?? params.host, - [semantic_conventions_1.ATTR_SERVER_PORT]: Number(url2?.port) || getPort(params.port) - }; - } - return attributes; - } - exports.getSemanticAttributesFromPoolConnection = getSemanticAttributesFromPoolConnection; - function shouldSkipInstrumentation(instrumentationConfig) { - return instrumentationConfig.requireParentSpan === true && api_1.trace.getSpan(api_1.context.active()) === undefined; - } - exports.shouldSkipInstrumentation = shouldSkipInstrumentation; - function handleConfigQuery(tracer, instrumentationConfig, semconvStability, queryConfig) { - const { connectionParameters } = this; - const dbName = connectionParameters.database; - const spanName = getQuerySpanName(dbName, queryConfig); - const span = tracer.startSpan(spanName, { - kind: api_1.SpanKind.CLIENT, - attributes: getSemanticAttributesFromConnection(connectionParameters, semconvStability) - }); - if (!queryConfig) { - return span; - } - if (queryConfig.text) { - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - span.setAttribute(semconv_1.ATTR_DB_STATEMENT, queryConfig.text); - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - span.setAttribute(semantic_conventions_1.ATTR_DB_QUERY_TEXT, queryConfig.text); - } - } - if (instrumentationConfig.enhancedDatabaseReporting && Array.isArray(queryConfig.values)) { - try { - const convertedValues = queryConfig.values.map((value) => { - if (value == null) { - return "null"; - } else if (value instanceof Buffer) { - return value.toString(); - } else if (typeof value === "object") { - if (typeof value.toPostgres === "function") { - return value.toPostgres(); - } - return JSON.stringify(value); - } else { - return value.toString(); - } - }); - span.setAttribute(AttributeNames_1.AttributeNames.PG_VALUES, convertedValues); - } catch (e) { - api_1.diag.error("failed to stringify ", queryConfig.values, e); - } - } - if (typeof queryConfig.name === "string") { - span.setAttribute(AttributeNames_1.AttributeNames.PG_PLAN, queryConfig.name); - } - return span; - } - exports.handleConfigQuery = handleConfigQuery; - function handleExecutionResult(config2, span, pgResult) { - if (typeof config2.responseHook === "function") { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - config2.responseHook(span, { - data: pgResult - }); - }, (err) => { - if (err) { - api_1.diag.error("Error running response hook", err); - } - }, true); - } - } - exports.handleExecutionResult = handleExecutionResult; - function patchCallback(instrumentationConfig, span, cb, attributes, recordDuration) { - return function patchedCallback(err, res) { - if (err) { - if (Object.prototype.hasOwnProperty.call(err, "code")) { - attributes[semantic_conventions_1.ATTR_ERROR_TYPE] = err["code"]; - } - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - } else { - handleExecutionResult(instrumentationConfig, span, res); - } - recordDuration(); - span.end(); - cb.call(this, err, res); - }; - } - exports.patchCallback = patchCallback; - function getPoolName(pool) { - let poolName = ""; - poolName += (pool?.host ? `${pool.host}` : "unknown_host") + ":"; - poolName += (pool?.port ? `${pool.port}` : "unknown_port") + "/"; - poolName += pool?.database ? `${pool.database}` : "unknown_database"; - return poolName.trim(); - } - exports.getPoolName = getPoolName; - function updateCounter(poolName, pool, connectionCount, connectionPendingRequests, latestCounter) { - const all = pool.totalCount; - const pending = pool.waitingCount; - const idle = pool.idleCount; - const used = all - idle; - connectionCount.add(used - latestCounter.used, { - [semconv_1.ATTR_DB_CLIENT_CONNECTION_STATE]: semconv_1.DB_CLIENT_CONNECTION_STATE_VALUE_USED, - [semconv_1.ATTR_DB_CLIENT_CONNECTION_POOL_NAME]: poolName - }); - connectionCount.add(idle - latestCounter.idle, { - [semconv_1.ATTR_DB_CLIENT_CONNECTION_STATE]: semconv_1.DB_CLIENT_CONNECTION_STATE_VALUE_IDLE, - [semconv_1.ATTR_DB_CLIENT_CONNECTION_POOL_NAME]: poolName - }); - connectionPendingRequests.add(pending - latestCounter.pending, { - [semconv_1.ATTR_DB_CLIENT_CONNECTION_POOL_NAME]: poolName - }); - return { used, idle, pending }; - } - exports.updateCounter = updateCounter; - function patchCallbackPGPool(span, cb) { - return function patchedCallback(err, res, done) { - if (err) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - cb.call(this, err, res, done); - }; - } - exports.patchCallbackPGPool = patchCallbackPGPool; - function patchClientConnectCallback(span, cb) { - return function patchedClientConnectCallback(err) { - if (err) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - cb.apply(this, arguments); - }; - } - exports.patchClientConnectCallback = patchClientConnectCallback; - function getErrorMessage(e) { - return typeof e === "object" && e !== null && "message" in e ? String(e.message) : undefined; - } - exports.getErrorMessage = getErrorMessage; - function isObjectWithTextString(it) { - return typeof it === "object" && typeof it?.text === "string"; - } - exports.isObjectWithTextString = isObjectWithTextString; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/version.js -var require_version35 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.60.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-pg"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/instrumentation.js -var require_instrumentation30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PgInstrumentation = undefined; - var instrumentation_1 = require_src9(); - var api_1 = require_src(); - var internal_types_1 = require_internal_types10(); - var utils = require_utils29(); - var sql_common_1 = require_src36(); - var version_1 = require_version35(); - var SpanNames_1 = require_SpanNames(); - var core_1 = require_src7(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv23(); - function extractModuleExports(module2) { - return module2[Symbol.toStringTag] === "Module" ? module2.default : module2; - } - - class PgInstrumentation extends instrumentation_1.InstrumentationBase { - _connectionsCounter = { - used: 0, - idle: 0, - pending: 0 - }; - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._semconvStability = (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - _updateMetricInstruments() { - this._operationDuration = this.meter.createHistogram(semantic_conventions_1.METRIC_DB_CLIENT_OPERATION_DURATION, { - description: "Duration of database client operations.", - unit: "s", - valueType: api_1.ValueType.DOUBLE, - advice: { - explicitBucketBoundaries: [ - 0.001, - 0.005, - 0.01, - 0.05, - 0.1, - 0.5, - 1, - 5, - 10 - ] - } - }); - this._connectionsCounter = { - idle: 0, - pending: 0, - used: 0 - }; - this._connectionsCount = this.meter.createUpDownCounter(semconv_1.METRIC_DB_CLIENT_CONNECTION_COUNT, { - description: "The number of connections that are currently in state described by the state attribute.", - unit: "{connection}" - }); - this._connectionPendingRequests = this.meter.createUpDownCounter(semconv_1.METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS, { - description: "The number of current pending requests for an open connection.", - unit: "{connection}" - }); - } - init() { - const SUPPORTED_PG_VERSIONS = [">=8.0.3 <9"]; - const SUPPORTED_PG_POOL_VERSIONS = [">=2.0.0 <4"]; - const modulePgNativeClient = new instrumentation_1.InstrumentationNodeModuleFile("pg/lib/native/client.js", SUPPORTED_PG_VERSIONS, this._patchPgClient.bind(this), this._unpatchPgClient.bind(this)); - const modulePgClient = new instrumentation_1.InstrumentationNodeModuleFile("pg/lib/client.js", SUPPORTED_PG_VERSIONS, this._patchPgClient.bind(this), this._unpatchPgClient.bind(this)); - const modulePG = new instrumentation_1.InstrumentationNodeModuleDefinition("pg", SUPPORTED_PG_VERSIONS, (module2) => { - const moduleExports = extractModuleExports(module2); - this._patchPgClient(moduleExports.Client); - return module2; - }, (module2) => { - const moduleExports = extractModuleExports(module2); - this._unpatchPgClient(moduleExports.Client); - return module2; - }, [modulePgClient, modulePgNativeClient]); - const modulePGPool = new instrumentation_1.InstrumentationNodeModuleDefinition("pg-pool", SUPPORTED_PG_POOL_VERSIONS, (module2) => { - const moduleExports = extractModuleExports(module2); - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.connect)) { - this._unwrap(moduleExports.prototype, "connect"); - } - this._wrap(moduleExports.prototype, "connect", this._getPoolConnectPatch()); - return moduleExports; - }, (module2) => { - const moduleExports = extractModuleExports(module2); - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.connect)) { - this._unwrap(moduleExports.prototype, "connect"); - } - }); - return [modulePG, modulePGPool]; - } - _patchPgClient(module2) { - if (!module2) { - return; - } - const moduleExports = extractModuleExports(module2); - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.query)) { - this._unwrap(moduleExports.prototype, "query"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.connect)) { - this._unwrap(moduleExports.prototype, "connect"); - } - this._wrap(moduleExports.prototype, "query", this._getClientQueryPatch()); - this._wrap(moduleExports.prototype, "connect", this._getClientConnectPatch()); - return module2; - } - _unpatchPgClient(module2) { - const moduleExports = extractModuleExports(module2); - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.query)) { - this._unwrap(moduleExports.prototype, "query"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype.connect)) { - this._unwrap(moduleExports.prototype, "connect"); - } - return module2; - } - _getClientConnectPatch() { - const plugin = this; - return (original) => { - return function connect(callback) { - if (utils.shouldSkipInstrumentation(plugin.getConfig())) { - return original.call(this, callback); - } - const span = plugin.tracer.startSpan(SpanNames_1.SpanNames.CONNECT, { - kind: api_1.SpanKind.CLIENT, - attributes: utils.getSemanticAttributesFromConnection(this, plugin._semconvStability) - }); - if (callback) { - const parentSpan = api_1.trace.getSpan(api_1.context.active()); - callback = utils.patchClientConnectCallback(span, callback); - if (parentSpan) { - callback = api_1.context.bind(api_1.context.active(), callback); - } - } - const connectResult = api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return original.call(this, callback); - }); - return handleConnectResult(span, connectResult); - }; - }; - } - recordOperationDuration(attributes, startTime) { - const metricsAttributes = {}; - const keysToCopy = [ - semantic_conventions_1.ATTR_DB_NAMESPACE, - semantic_conventions_1.ATTR_ERROR_TYPE, - semantic_conventions_1.ATTR_SERVER_PORT, - semantic_conventions_1.ATTR_SERVER_ADDRESS, - semantic_conventions_1.ATTR_DB_OPERATION_NAME - ]; - if (this._semconvStability & instrumentation_1.SemconvStability.OLD) { - keysToCopy.push(semconv_1.ATTR_DB_SYSTEM); - } - if (this._semconvStability & instrumentation_1.SemconvStability.STABLE) { - keysToCopy.push(semantic_conventions_1.ATTR_DB_SYSTEM_NAME); - } - keysToCopy.forEach((key) => { - if (key in attributes) { - metricsAttributes[key] = attributes[key]; - } - }); - const durationSeconds = (0, core_1.hrTimeToMilliseconds)((0, core_1.hrTimeDuration)(startTime, (0, core_1.hrTime)())) / 1000; - this._operationDuration.record(durationSeconds, metricsAttributes); - } - _getClientQueryPatch() { - const plugin = this; - return (original) => { - this._diag.debug("Patching pg.Client.prototype.query"); - return function query(...args) { - if (utils.shouldSkipInstrumentation(plugin.getConfig())) { - return original.apply(this, args); - } - const startTime = (0, core_1.hrTime)(); - const arg0 = args[0]; - const firstArgIsString = typeof arg0 === "string"; - const firstArgIsQueryObjectWithText = utils.isObjectWithTextString(arg0); - const queryConfig = firstArgIsString ? { - text: arg0, - values: Array.isArray(args[1]) ? args[1] : undefined - } : firstArgIsQueryObjectWithText ? arg0 : undefined; - const attributes = { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_POSTGRESQL, - [semantic_conventions_1.ATTR_DB_NAMESPACE]: this.database, - [semantic_conventions_1.ATTR_SERVER_PORT]: this.connectionParameters.port, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: this.connectionParameters.host - }; - if (queryConfig?.text) { - attributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME] = utils.parseNormalizedOperationName(queryConfig?.text); - } - const recordDuration = () => { - plugin.recordOperationDuration(attributes, startTime); - }; - const instrumentationConfig = plugin.getConfig(); - const span = utils.handleConfigQuery.call(this, plugin.tracer, instrumentationConfig, plugin._semconvStability, queryConfig); - if (instrumentationConfig.addSqlCommenterCommentToQueries) { - if (firstArgIsString) { - args[0] = (0, sql_common_1.addSqlCommenterComment)(span, arg0); - } else if (firstArgIsQueryObjectWithText && !("name" in arg0)) { - args[0] = { - ...arg0, - text: (0, sql_common_1.addSqlCommenterComment)(span, arg0.text) - }; - } - } - if (args.length > 0) { - const parentSpan = api_1.trace.getSpan(api_1.context.active()); - if (typeof args[args.length - 1] === "function") { - args[args.length - 1] = utils.patchCallback(instrumentationConfig, span, args[args.length - 1], attributes, recordDuration); - if (parentSpan) { - args[args.length - 1] = api_1.context.bind(api_1.context.active(), args[args.length - 1]); - } - } else if (typeof queryConfig?.callback === "function") { - let callback = utils.patchCallback(plugin.getConfig(), span, queryConfig.callback, attributes, recordDuration); - if (parentSpan) { - callback = api_1.context.bind(api_1.context.active(), callback); - } - args[0].callback = callback; - } - } - const { requestHook } = instrumentationConfig; - if (typeof requestHook === "function" && queryConfig) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - const { database, host, port, user: user2 } = this.connectionParameters; - const connection = { database, host, port, user: user2 }; - requestHook(span, { - connection, - query: { - text: queryConfig.text, - values: queryConfig.values, - name: queryConfig.name - } - }); - }, (err) => { - if (err) { - plugin._diag.error("Error running query hook", err); - } - }, true); - } - let result; - try { - result = original.apply(this, args); - } catch (e) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: utils.getErrorMessage(e) - }); - span.end(); - throw e; - } - if (result instanceof Promise) { - return result.then((result2) => { - return new Promise((resolve2) => { - utils.handleExecutionResult(plugin.getConfig(), span, result2); - recordDuration(); - span.end(); - resolve2(result2); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - recordDuration(); - span.end(); - reject(error48); - }); - }); - } - return result; - }; - }; - } - _setPoolConnectEventListeners(pgPool) { - if (pgPool[internal_types_1.EVENT_LISTENERS_SET]) - return; - const poolName = utils.getPoolName(pgPool.options); - pgPool.on("connect", () => { - this._connectionsCounter = utils.updateCounter(poolName, pgPool, this._connectionsCount, this._connectionPendingRequests, this._connectionsCounter); - }); - pgPool.on("acquire", () => { - this._connectionsCounter = utils.updateCounter(poolName, pgPool, this._connectionsCount, this._connectionPendingRequests, this._connectionsCounter); - }); - pgPool.on("remove", () => { - this._connectionsCounter = utils.updateCounter(poolName, pgPool, this._connectionsCount, this._connectionPendingRequests, this._connectionsCounter); - }); - pgPool.on("release", () => { - this._connectionsCounter = utils.updateCounter(poolName, pgPool, this._connectionsCount, this._connectionPendingRequests, this._connectionsCounter); - }); - pgPool[internal_types_1.EVENT_LISTENERS_SET] = true; - } - _getPoolConnectPatch() { - const plugin = this; - return (originalConnect) => { - return function connect(callback) { - if (utils.shouldSkipInstrumentation(plugin.getConfig())) { - return originalConnect.call(this, callback); - } - const span = plugin.tracer.startSpan(SpanNames_1.SpanNames.POOL_CONNECT, { - kind: api_1.SpanKind.CLIENT, - attributes: utils.getSemanticAttributesFromPoolConnection(this.options, plugin._semconvStability) - }); - plugin._setPoolConnectEventListeners(this); - if (callback) { - const parentSpan = api_1.trace.getSpan(api_1.context.active()); - callback = utils.patchCallbackPGPool(span, callback); - if (parentSpan) { - callback = api_1.context.bind(api_1.context.active(), callback); - } - } - const connectResult = api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return originalConnect.call(this, callback); - }); - return handleConnectResult(span, connectResult); - }; - }; - } - } - exports.PgInstrumentation = PgInstrumentation; - function handleConnectResult(span, connectResult) { - if (!(connectResult instanceof Promise)) { - return connectResult; - } - const connectResultPromise = connectResult; - return api_1.context.bind(api_1.context.active(), connectResultPromise.then((result) => { - span.end(); - return result; - }).catch((error48) => { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: utils.getErrorMessage(error48) - }); - span.end(); - return Promise.reject(error48); - })); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pg@0.60.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pg/build/src/index.js -var require_src43 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = exports.PgInstrumentation = undefined; - var instrumentation_1 = require_instrumentation30(); - Object.defineProperty(exports, "PgInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.PgInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames12(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pino@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pino/build/src/version.js -var require_version36 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-pino"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pino@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pino/build/src/log-sending-utils.js -var require_log_sending_utils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTelPinoStream = exports.getTimeConverter = undefined; - var stream_1 = __require("stream"); - var api_logs_1 = require_src6(); - var version_1 = require_version36(); - var core_1 = require_src7(); - var DEFAULT_LEVELS = { - trace: 10, - debug: 20, - info: 30, - warn: 40, - error: 50, - fatal: 60 - }; - var OTEL_SEV_NUM_FROM_PINO_LEVEL = { - [DEFAULT_LEVELS.trace]: api_logs_1.SeverityNumber.TRACE, - [DEFAULT_LEVELS.debug]: api_logs_1.SeverityNumber.DEBUG, - [DEFAULT_LEVELS.info]: api_logs_1.SeverityNumber.INFO, - [DEFAULT_LEVELS.warn]: api_logs_1.SeverityNumber.WARN, - [DEFAULT_LEVELS.error]: api_logs_1.SeverityNumber.ERROR, - [DEFAULT_LEVELS.fatal]: api_logs_1.SeverityNumber.FATAL - }; - var EXTRA_SEV_NUMS = [ - api_logs_1.SeverityNumber.TRACE2, - api_logs_1.SeverityNumber.TRACE3, - api_logs_1.SeverityNumber.TRACE4, - api_logs_1.SeverityNumber.DEBUG2, - api_logs_1.SeverityNumber.DEBUG3, - api_logs_1.SeverityNumber.DEBUG4, - api_logs_1.SeverityNumber.INFO2, - api_logs_1.SeverityNumber.INFO3, - api_logs_1.SeverityNumber.INFO4, - api_logs_1.SeverityNumber.WARN2, - api_logs_1.SeverityNumber.WARN3, - api_logs_1.SeverityNumber.WARN4, - api_logs_1.SeverityNumber.ERROR2, - api_logs_1.SeverityNumber.ERROR3, - api_logs_1.SeverityNumber.ERROR4, - api_logs_1.SeverityNumber.FATAL2, - api_logs_1.SeverityNumber.FATAL3, - api_logs_1.SeverityNumber.FATAL4 - ]; - function severityNumberFromPinoLevel(lvl) { - const sev = OTEL_SEV_NUM_FROM_PINO_LEVEL[lvl]; - if (sev !== undefined) { - return sev; - } - const relativeLevelWeight = (lvl - 10) / (70 - 10); - const otelSevIdx = Math.floor(relativeLevelWeight * EXTRA_SEV_NUMS.length); - const cappedOTelIdx = Math.min(EXTRA_SEV_NUMS.length - 1, Math.max(0, otelSevIdx)); - const otelSevValue = EXTRA_SEV_NUMS[cappedOTelIdx]; - return otelSevValue; - } - function getTimeConverter(pinoLogger, pinoMod) { - const stdTimeFns = pinoMod.stdTimeFunctions; - const loggerTimeFn = pinoLogger[pinoMod.symbols.timeSym]; - if (loggerTimeFn === stdTimeFns.epochTime) { - return (time3) => time3; - } else if (loggerTimeFn === stdTimeFns.unixTime) { - return (time3) => time3 * 1000; - } else if (loggerTimeFn === stdTimeFns.isoTime) { - return (time3) => new Date(time3).getTime(); - } else if (loggerTimeFn === stdTimeFns.nullTime) { - return () => Date.now(); - } else { - return () => NaN; - } - } - exports.getTimeConverter = getTimeConverter; - - class OTelPinoStream extends stream_1.Writable { - constructor(options) { - super(); - this._messageKey = options.messageKey; - this._levels = options.levels; - this._otelTimestampFromTime = options.otelTimestampFromTime; - this._otelLogger = api_logs_1.logs.getLogger(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION); - } - _write(s2, _encoding, callback) { - if (!s2) { - return; - } - let recObj; - try { - recObj = JSON.parse(s2); - } catch (parseErr) { - this.emit("unknown", s2.toString(), parseErr); - callback(); - return; - } - if (recObj === null) { - this.emit("unknown", s2.toString(), "Null value ignored"); - callback(); - return; - } - if (typeof recObj !== "object") { - recObj = { - data: recObj - }; - } - const { - time: time3, - [this._messageKey]: body, - level, - hostname: hostname3, - pid, - trace_id, - span_id, - trace_flags, - ...attributes - } = recObj; - let timestamp = this._otelTimestampFromTime(time3); - if (isNaN(timestamp)) { - attributes["time"] = time3; - timestamp = Date.now(); - } - const timestampHrTime = (0, core_1.millisToHrTime)(timestamp); - const lastLevel = this.lastLevel; - const otelRec = { - timestamp: timestampHrTime, - observedTimestamp: timestampHrTime, - severityNumber: severityNumberFromPinoLevel(lastLevel), - severityText: this._levels.labels[lastLevel], - body, - attributes - }; - this._otelLogger.emit(otelRec); - callback(); - } - } - exports.OTelPinoStream = OTelPinoStream; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pino@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pino/build/src/instrumentation.js -var require_instrumentation31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PinoInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var version_1 = require_version36(); - var log_sending_utils_1 = require_log_sending_utils(); - var pinoVersions = [">=5.14.0 <11"]; - var DEFAULT_LOG_KEYS = { - traceId: "trace_id", - spanId: "span_id", - traceFlags: "trace_flags" - }; - - class PinoInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("pino", pinoVersions, (module2) => { - const isESM = module2[Symbol.toStringTag] === "Module"; - const moduleExports = isESM ? module2.default : module2; - const instrumentation = this; - const patchedPino = Object.assign((...args) => { - const config2 = instrumentation.getConfig(); - const isEnabled = instrumentation.isEnabled(); - const logger = moduleExports(...args); - const otelMixin = instrumentation._getMixinFunction(); - const mixinSym = moduleExports.symbols.mixinSym; - const origMixin = logger[mixinSym]; - if (origMixin === undefined) { - logger[mixinSym] = otelMixin; - } else { - logger[mixinSym] = (ctx, level, ...rest) => { - return Object.assign(otelMixin(ctx, level), origMixin(ctx, level, ...rest)); - }; - } - if (isEnabled && !config2.disableLogSending && typeof moduleExports.multistream === "function") { - const otelTimestampFromTime = (0, log_sending_utils_1.getTimeConverter)(logger, moduleExports); - const otelStream = new log_sending_utils_1.OTelPinoStream({ - messageKey: logger[moduleExports.symbols.messageKeySym], - levels: logger.levels, - otelTimestampFromTime - }); - otelStream[Symbol.for("pino.metadata")] = true; - otelStream.once("unknown", (line, err) => { - instrumentation._diag.warn("could not send pino log line (will only log first occurrence)", { line, err }); - }); - const origStream = logger[moduleExports.symbols.streamSym]; - logger[moduleExports.symbols.streamSym] = moduleExports.multistream([ - { level: 0, stream: origStream }, - { level: 0, stream: otelStream } - ], { levels: logger.levels.values }); - } - return logger; - }, moduleExports); - if (typeof patchedPino.pino === "function") { - patchedPino.pino = patchedPino; - } - if (typeof patchedPino.default === "function") { - patchedPino.default = patchedPino; - } - if (isESM) { - if (module2.pino) { - module2.pino = patchedPino; - } - module2.default = patchedPino; - } - return patchedPino; - }) - ]; - } - _callHook(span, record3, level) { - const { logHook } = this.getConfig(); - if (!logHook) { - return; - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => logHook(span, record3, level), (err) => { - if (err) { - api_1.diag.error("pino instrumentation: error calling logHook", err); - } - }, true); - } - _getMixinFunction() { - const instrumentation = this; - return function otelMixin(_context, level) { - if (!instrumentation.isEnabled() || instrumentation.getConfig().disableLogCorrelation) { - return {}; - } - const span = api_1.trace.getSpan(api_1.context.active()); - if (!span) { - return {}; - } - const spanContext = span.spanContext(); - if (!(0, api_1.isSpanContextValid)(spanContext)) { - return {}; - } - const logKeys = instrumentation.getConfig().logKeys ?? DEFAULT_LOG_KEYS; - const record3 = { - [logKeys.traceId]: spanContext.traceId, - [logKeys.spanId]: spanContext.spanId, - [logKeys.traceFlags]: `0${spanContext.traceFlags.toString(16)}` - }; - instrumentation._callHook(span, record3, level); - return record3; - }; - } - } - exports.PinoInstrumentation = PinoInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-pino@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-pino/build/src/index.js -var require_src44 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PinoInstrumentation = undefined; - var instrumentation_1 = require_instrumentation31(); - Object.defineProperty(exports, "PinoInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.PinoInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/version.js -var require_version37 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.56.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-redis"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/v2-v3/utils.js -var require_utils30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getTracedCreateStreamTrace = exports.getTracedCreateClient = exports.endSpan = undefined; - var api_1 = require_src(); - var endSpan = (span, err) => { - if (err) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - }; - exports.endSpan = endSpan; - var getTracedCreateClient = (original) => { - return function createClientTrace() { - const client = original.apply(this, arguments); - return api_1.context.bind(api_1.context.active(), client); - }; - }; - exports.getTracedCreateClient = getTracedCreateClient; - var getTracedCreateStreamTrace = (original) => { - return function create_stream_trace() { - if (!Object.prototype.hasOwnProperty.call(this, "stream")) { - Object.defineProperty(this, "stream", { - get() { - return this._patched_redis_stream; - }, - set(val) { - api_1.context.bind(api_1.context.active(), val); - this._patched_redis_stream = val; - } - }); - } - return original.apply(this, arguments); - }; - }; - exports.getTracedCreateStreamTrace = getTracedCreateStreamTrace; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/semconv.js -var require_semconv24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_VALUE_REDIS = exports.DB_SYSTEM_NAME_VALUE_REDIS = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_CONNECTION_STRING = undefined; - exports.ATTR_DB_CONNECTION_STRING = "db.connection_string"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_NAME_VALUE_REDIS = "redis"; - exports.DB_SYSTEM_VALUE_REDIS = "redis"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/v2-v3/instrumentation.js -var require_instrumentation32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RedisInstrumentationV2_V3 = undefined; - var instrumentation_1 = require_src9(); - var utils_1 = require_utils30(); - var version_1 = require_version37(); - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv24(); - var redis_common_1 = require_src27(); - - class RedisInstrumentationV2_V3 extends instrumentation_1.InstrumentationBase { - static COMPONENT = "redis"; - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._semconvStability = config2.semconvStability ? config2.semconvStability : (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - setConfig(config2 = {}) { - super.setConfig(config2); - this._semconvStability = config2.semconvStability ? config2.semconvStability : (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("redis", [">=2.6.0 <4"], (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.RedisClient.prototype["internal_send_command"])) { - this._unwrap(moduleExports.RedisClient.prototype, "internal_send_command"); - } - this._wrap(moduleExports.RedisClient.prototype, "internal_send_command", this._getPatchInternalSendCommand()); - if ((0, instrumentation_1.isWrapped)(moduleExports.RedisClient.prototype["create_stream"])) { - this._unwrap(moduleExports.RedisClient.prototype, "create_stream"); - } - this._wrap(moduleExports.RedisClient.prototype, "create_stream", this._getPatchCreateStream()); - if ((0, instrumentation_1.isWrapped)(moduleExports.createClient)) { - this._unwrap(moduleExports, "createClient"); - } - this._wrap(moduleExports, "createClient", this._getPatchCreateClient()); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - this._unwrap(moduleExports.RedisClient.prototype, "internal_send_command"); - this._unwrap(moduleExports.RedisClient.prototype, "create_stream"); - this._unwrap(moduleExports, "createClient"); - }) - ]; - } - _getPatchInternalSendCommand() { - const instrumentation = this; - return function internal_send_command(original) { - return function internal_send_command_trace(cmd) { - if (arguments.length !== 1 || typeof cmd !== "object") { - return original.apply(this, arguments); - } - const config2 = instrumentation.getConfig(); - const hasNoParentSpan = api_1.trace.getSpan(api_1.context.active()) === undefined; - if (config2.requireParentSpan === true && hasNoParentSpan) { - return original.apply(this, arguments); - } - const dbStatementSerializer = config2?.dbStatementSerializer || redis_common_1.defaultDbStatementSerializer; - const attributes = {}; - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.OLD) { - Object.assign(attributes, { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_REDIS, - [semconv_1.ATTR_DB_STATEMENT]: dbStatementSerializer(cmd.command, cmd.args) - }); - } - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.STABLE) { - Object.assign(attributes, { - [semantic_conventions_1.ATTR_DB_SYSTEM_NAME]: semconv_1.DB_SYSTEM_NAME_VALUE_REDIS, - [semantic_conventions_1.ATTR_DB_OPERATION_NAME]: cmd.command, - [semantic_conventions_1.ATTR_DB_QUERY_TEXT]: dbStatementSerializer(cmd.command, cmd.args) - }); - } - const span = instrumentation.tracer.startSpan(`${RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`, { - kind: api_1.SpanKind.CLIENT, - attributes - }); - if (this.connection_options) { - const connectionAttributes = {}; - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.OLD) { - Object.assign(connectionAttributes, { - [semconv_1.ATTR_NET_PEER_NAME]: this.connection_options.host, - [semconv_1.ATTR_NET_PEER_PORT]: this.connection_options.port - }); - } - if (instrumentation._semconvStability & instrumentation_1.SemconvStability.STABLE) { - Object.assign(connectionAttributes, { - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: this.connection_options.host, - [semantic_conventions_1.ATTR_SERVER_PORT]: this.connection_options.port - }); - } - span.setAttributes(connectionAttributes); - } - if (this.address && instrumentation._semconvStability & instrumentation_1.SemconvStability.OLD) { - span.setAttribute(semconv_1.ATTR_DB_CONNECTION_STRING, `redis://${this.address}`); - } - const originalCallback = arguments[0].callback; - if (originalCallback) { - const originalContext = api_1.context.active(); - arguments[0].callback = function callback(err, reply) { - if (config2?.responseHook) { - const responseHook = config2.responseHook; - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - responseHook(span, cmd.command, cmd.args, reply); - }, (err2) => { - if (err2) { - instrumentation._diag.error("Error executing responseHook", err2); - } - }, true); - } - (0, utils_1.endSpan)(span, err); - return api_1.context.with(originalContext, originalCallback, this, ...arguments); - }; - } - try { - return original.apply(this, arguments); - } catch (rethrow) { - (0, utils_1.endSpan)(span, rethrow); - throw rethrow; - } - }; - }; - } - _getPatchCreateClient() { - return function createClient(original) { - return (0, utils_1.getTracedCreateClient)(original); - }; - } - _getPatchCreateStream() { - return function createReadStream(original) { - return (0, utils_1.getTracedCreateStreamTrace)(original); - }; - } - } - exports.RedisInstrumentationV2_V3 = RedisInstrumentationV2_V3; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/v4-v5/utils.js -var require_utils31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getClientAttributes = undefined; - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv24(); - var instrumentation_1 = require_src9(); - function getClientAttributes(diag2, options, semconvStability) { - const attributes = {}; - if (semconvStability & instrumentation_1.SemconvStability.OLD) { - Object.assign(attributes, { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_REDIS, - [semconv_1.ATTR_NET_PEER_NAME]: options?.socket?.host, - [semconv_1.ATTR_NET_PEER_PORT]: options?.socket?.port, - [semconv_1.ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(diag2, options?.url) - }); - } - if (semconvStability & instrumentation_1.SemconvStability.STABLE) { - Object.assign(attributes, { - [semantic_conventions_1.ATTR_DB_SYSTEM_NAME]: semconv_1.DB_SYSTEM_NAME_VALUE_REDIS, - [semantic_conventions_1.ATTR_SERVER_ADDRESS]: options?.socket?.host, - [semantic_conventions_1.ATTR_SERVER_PORT]: options?.socket?.port - }); - } - return attributes; - } - exports.getClientAttributes = getClientAttributes; - function removeCredentialsFromDBConnectionStringAttribute(diag2, url2) { - if (typeof url2 !== "string" || !url2) { - return; - } - try { - const u = new URL(url2); - u.searchParams.delete("user_pwd"); - u.username = ""; - u.password = ""; - return u.href; - } catch (err) { - diag2.error("failed to sanitize redis connection url", err); - } - return; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/v4-v5/instrumentation.js -var require_instrumentation33 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RedisInstrumentationV4_V5 = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var utils_1 = require_utils31(); - var redis_common_1 = require_src27(); - var version_1 = require_version37(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv24(); - var OTEL_OPEN_SPANS = Symbol("opentelemetry.instrumentation.redis.open_spans"); - var MULTI_COMMAND_OPTIONS = Symbol("opentelemetry.instrumentation.redis.multi_command_options"); - - class RedisInstrumentationV4_V5 extends instrumentation_1.InstrumentationBase { - static COMPONENT = "redis"; - _semconvStability; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - this._semconvStability = config2.semconvStability ? config2.semconvStability : (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - setConfig(config2 = {}) { - super.setConfig(config2); - this._semconvStability = config2.semconvStability ? config2.semconvStability : (0, instrumentation_1.semconvStabilityFromStr)("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN); - } - init() { - return [ - this._getInstrumentationNodeModuleDefinition("@redis/client"), - this._getInstrumentationNodeModuleDefinition("@node-redis/client") - ]; - } - _getInstrumentationNodeModuleDefinition(basePackageName) { - const commanderModuleFile = new instrumentation_1.InstrumentationNodeModuleFile(`${basePackageName}/dist/lib/commander.js`, ["^1.0.0"], (moduleExports, moduleVersion) => { - const transformCommandArguments = moduleExports.transformCommandArguments; - if (!transformCommandArguments) { - this._diag.error("internal instrumentation error, missing transformCommandArguments function"); - return moduleExports; - } - const functionToPatch = moduleVersion?.startsWith("1.0.") ? "extendWithCommands" : "attachCommands"; - if ((0, instrumentation_1.isWrapped)(moduleExports?.[functionToPatch])) { - this._unwrap(moduleExports, functionToPatch); - } - this._wrap(moduleExports, functionToPatch, this._getPatchExtendWithCommands(transformCommandArguments)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.extendWithCommands)) { - this._unwrap(moduleExports, "extendWithCommands"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.attachCommands)) { - this._unwrap(moduleExports, "attachCommands"); - } - }); - const multiCommanderModule = new instrumentation_1.InstrumentationNodeModuleFile(`${basePackageName}/dist/lib/client/multi-command.js`, ["^1.0.0", "^5.0.0"], (moduleExports) => { - const redisClientMultiCommandPrototype = moduleExports?.default?.prototype; - if ((0, instrumentation_1.isWrapped)(redisClientMultiCommandPrototype?.exec)) { - this._unwrap(redisClientMultiCommandPrototype, "exec"); - } - this._wrap(redisClientMultiCommandPrototype, "exec", this._getPatchMultiCommandsExec()); - if ((0, instrumentation_1.isWrapped)(redisClientMultiCommandPrototype?.addCommand)) { - this._unwrap(redisClientMultiCommandPrototype, "addCommand"); - } - this._wrap(redisClientMultiCommandPrototype, "addCommand", this._getPatchMultiCommandsAddCommand()); - return moduleExports; - }, (moduleExports) => { - const redisClientMultiCommandPrototype = moduleExports?.default?.prototype; - if ((0, instrumentation_1.isWrapped)(redisClientMultiCommandPrototype?.exec)) { - this._unwrap(redisClientMultiCommandPrototype, "exec"); - } - if ((0, instrumentation_1.isWrapped)(redisClientMultiCommandPrototype?.addCommand)) { - this._unwrap(redisClientMultiCommandPrototype, "addCommand"); - } - }); - const clientIndexModule = new instrumentation_1.InstrumentationNodeModuleFile(`${basePackageName}/dist/lib/client/index.js`, ["^1.0.0", "^5.0.0"], (moduleExports) => { - const redisClientPrototype = moduleExports?.default?.prototype; - if (redisClientPrototype?.multi) { - if ((0, instrumentation_1.isWrapped)(redisClientPrototype?.multi)) { - this._unwrap(redisClientPrototype, "multi"); - } - this._wrap(redisClientPrototype, "multi", this._getPatchRedisClientMulti()); - } - if (redisClientPrototype?.MULTI) { - if ((0, instrumentation_1.isWrapped)(redisClientPrototype?.MULTI)) { - this._unwrap(redisClientPrototype, "MULTI"); - } - this._wrap(redisClientPrototype, "MULTI", this._getPatchRedisClientMulti()); - } - if ((0, instrumentation_1.isWrapped)(redisClientPrototype?.sendCommand)) { - this._unwrap(redisClientPrototype, "sendCommand"); - } - this._wrap(redisClientPrototype, "sendCommand", this._getPatchRedisClientSendCommand()); - this._wrap(redisClientPrototype, "connect", this._getPatchedClientConnect()); - return moduleExports; - }, (moduleExports) => { - const redisClientPrototype = moduleExports?.default?.prototype; - if ((0, instrumentation_1.isWrapped)(redisClientPrototype?.multi)) { - this._unwrap(redisClientPrototype, "multi"); - } - if ((0, instrumentation_1.isWrapped)(redisClientPrototype?.MULTI)) { - this._unwrap(redisClientPrototype, "MULTI"); - } - if ((0, instrumentation_1.isWrapped)(redisClientPrototype?.sendCommand)) { - this._unwrap(redisClientPrototype, "sendCommand"); - } - }); - return new instrumentation_1.InstrumentationNodeModuleDefinition(basePackageName, ["^1.0.0", "^5.0.0"], (moduleExports) => { - return moduleExports; - }, () => {}, [commanderModuleFile, multiCommanderModule, clientIndexModule]); - } - _getPatchExtendWithCommands(transformCommandArguments) { - const plugin = this; - return function extendWithCommandsPatchWrapper(original) { - return function extendWithCommandsPatch(config2) { - if (config2?.BaseClass?.name !== "RedisClient") { - return original.apply(this, arguments); - } - const origExecutor = config2.executor; - config2.executor = function(command, args) { - const redisCommandArguments = transformCommandArguments(command, args).args; - return plugin._traceClientCommand(origExecutor, this, arguments, redisCommandArguments); - }; - return original.apply(this, arguments); - }; - }; - } - _getPatchMultiCommandsExec() { - const plugin = this; - return function execPatchWrapper(original) { - return function execPatch() { - const execRes = original.apply(this, arguments); - if (typeof execRes?.then !== "function") { - plugin._diag.error("got non promise result when patching RedisClientMultiCommand.exec"); - return execRes; - } - return execRes.then((redisRes) => { - const openSpans = this[OTEL_OPEN_SPANS]; - plugin._endSpansWithRedisReplies(openSpans, redisRes); - return redisRes; - }).catch((err) => { - const openSpans = this[OTEL_OPEN_SPANS]; - if (!openSpans) { - plugin._diag.error("cannot find open spans to end for redis multi command"); - } else { - const replies = err.constructor.name === "MultiErrorReply" ? err.replies : new Array(openSpans.length).fill(err); - plugin._endSpansWithRedisReplies(openSpans, replies); - } - return Promise.reject(err); - }); - }; - }; - } - _getPatchMultiCommandsAddCommand() { - const plugin = this; - return function addCommandWrapper(original) { - return function addCommandPatch(args) { - return plugin._traceClientCommand(original, this, arguments, args); - }; - }; - } - _getPatchRedisClientMulti() { - return function multiPatchWrapper(original) { - return function multiPatch() { - const multiRes = original.apply(this, arguments); - multiRes[MULTI_COMMAND_OPTIONS] = this.options; - return multiRes; - }; - }; - } - _getPatchRedisClientSendCommand() { - const plugin = this; - return function sendCommandWrapper(original) { - return function sendCommandPatch(args) { - return plugin._traceClientCommand(original, this, arguments, args); - }; - }; - } - _getPatchedClientConnect() { - const plugin = this; - return function connectWrapper(original) { - return function patchedConnect() { - const options = this.options; - const attributes = (0, utils_1.getClientAttributes)(plugin._diag, options, plugin._semconvStability); - const span = plugin.tracer.startSpan(`${RedisInstrumentationV4_V5.COMPONENT}-connect`, { - kind: api_1.SpanKind.CLIENT, - attributes - }); - const res = api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return original.apply(this); - }); - return res.then((result) => { - span.end(); - return result; - }).catch((error48) => { - span.recordException(error48); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - return Promise.reject(error48); - }); - }; - }; - } - _traceClientCommand(origFunction, origThis, origArguments, redisCommandArguments) { - const hasNoParentSpan = api_1.trace.getSpan(api_1.context.active()) === undefined; - if (hasNoParentSpan && this.getConfig().requireParentSpan) { - return origFunction.apply(origThis, origArguments); - } - const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS]; - const commandName = redisCommandArguments[0]; - const commandArgs = redisCommandArguments.slice(1); - const dbStatementSerializer = this.getConfig().dbStatementSerializer || redis_common_1.defaultDbStatementSerializer; - const attributes = (0, utils_1.getClientAttributes)(this._diag, clientOptions, this._semconvStability); - if (this._semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes[semantic_conventions_1.ATTR_DB_OPERATION_NAME] = commandName; - } - try { - const dbStatement = dbStatementSerializer(commandName, commandArgs); - if (dbStatement != null) { - if (this._semconvStability & instrumentation_1.SemconvStability.OLD) { - attributes[semconv_1.ATTR_DB_STATEMENT] = dbStatement; - } - if (this._semconvStability & instrumentation_1.SemconvStability.STABLE) { - attributes[semantic_conventions_1.ATTR_DB_QUERY_TEXT] = dbStatement; - } - } - } catch (e) { - this._diag.error("dbStatementSerializer throw an exception", e, { - commandName - }); - } - const span = this.tracer.startSpan(`${RedisInstrumentationV4_V5.COMPONENT}-${commandName}`, { - kind: api_1.SpanKind.CLIENT, - attributes - }); - const res = api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => { - return origFunction.apply(origThis, origArguments); - }); - if (typeof res?.then === "function") { - res.then((redisRes) => { - this._endSpanWithResponse(span, commandName, commandArgs, redisRes, undefined); - }, (err) => { - this._endSpanWithResponse(span, commandName, commandArgs, null, err); - }); - } else { - const redisClientMultiCommand = res; - redisClientMultiCommand[OTEL_OPEN_SPANS] = redisClientMultiCommand[OTEL_OPEN_SPANS] || []; - redisClientMultiCommand[OTEL_OPEN_SPANS].push({ - span, - commandName, - commandArgs - }); - } - return res; - } - _endSpansWithRedisReplies(openSpans, replies) { - if (!openSpans) { - return this._diag.error("cannot find open spans to end for redis multi command"); - } - if (replies.length !== openSpans.length) { - return this._diag.error("number of multi command spans does not match response from redis"); - } - for (let i = 0;i < openSpans.length; i++) { - const { span, commandName, commandArgs } = openSpans[i]; - const currCommandRes = replies[i]; - const [res, err] = currCommandRes instanceof Error ? [null, currCommandRes] : [currCommandRes, undefined]; - this._endSpanWithResponse(span, commandName, commandArgs, res, err); - } - } - _endSpanWithResponse(span, commandName, commandArgs, response, error48) { - const { responseHook } = this.getConfig(); - if (!error48 && responseHook) { - try { - responseHook(span, commandName, commandArgs, response); - } catch (err) { - this._diag.error("responseHook throw an exception", err); - } - } - if (error48) { - span.recordException(error48); - span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error48?.message }); - } - span.end(); - } - } - exports.RedisInstrumentationV4_V5 = RedisInstrumentationV4_V5; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/redis.js -var require_redis = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RedisInstrumentation = undefined; - var instrumentation_1 = require_src9(); - var version_1 = require_version37(); - var instrumentation_2 = require_instrumentation32(); - var instrumentation_3 = require_instrumentation33(); - var DEFAULT_CONFIG = { - requireParentSpan: false - }; - - class RedisInstrumentation extends instrumentation_1.InstrumentationBase { - instrumentationV2_V3; - instrumentationV4_V5; - initialized = false; - constructor(config2 = {}) { - const resolvedConfig = { ...DEFAULT_CONFIG, ...config2 }; - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, resolvedConfig); - this.instrumentationV2_V3 = new instrumentation_2.RedisInstrumentationV2_V3(this.getConfig()); - this.instrumentationV4_V5 = new instrumentation_3.RedisInstrumentationV4_V5(this.getConfig()); - this.initialized = true; - } - setConfig(config2 = {}) { - const newConfig = { ...DEFAULT_CONFIG, ...config2 }; - super.setConfig(newConfig); - if (!this.initialized) { - return; - } - this.instrumentationV2_V3.setConfig(newConfig); - this.instrumentationV4_V5.setConfig(newConfig); - } - init() {} - getModuleDefinitions() { - return [ - ...this.instrumentationV2_V3.getModuleDefinitions(), - ...this.instrumentationV4_V5.getModuleDefinitions() - ]; - } - setTracerProvider(tracerProvider) { - super.setTracerProvider(tracerProvider); - if (!this.initialized) { - return; - } - this.instrumentationV2_V3.setTracerProvider(tracerProvider); - this.instrumentationV4_V5.setTracerProvider(tracerProvider); - } - enable() { - super.enable(); - if (!this.initialized) { - return; - } - this.instrumentationV2_V3.enable(); - this.instrumentationV4_V5.enable(); - } - disable() { - super.disable(); - if (!this.initialized) { - return; - } - this.instrumentationV2_V3.disable(); - this.instrumentationV4_V5.disable(); - } - } - exports.RedisInstrumentation = RedisInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-redis@0.56.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-redis/build/src/index.js -var require_src45 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RedisInstrumentation = undefined; - var redis_1 = require_redis(); - Object.defineProperty(exports, "RedisInstrumentation", { enumerable: true, get: function() { - return redis_1.RedisInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/types.js -var require_types7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LayerType = undefined; - var LayerType; - (function(LayerType2) { - LayerType2["MIDDLEWARE"] = "middleware"; - LayerType2["REQUEST_HANDLER"] = "request_handler"; - })(LayerType = exports.LayerType || (exports.LayerType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/enums/AttributeNames.js -var require_AttributeNames13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["TYPE"] = "restify.type"; - AttributeNames2["NAME"] = "restify.name"; - AttributeNames2["METHOD"] = "restify.method"; - AttributeNames2["VERSION"] = "restify.version"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/version.js -var require_version38 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.53.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-restify"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/constants.js -var require_constants7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MODULE_NAME = exports.RESTIFY_METHODS = exports.RESTIFY_MW_METHODS = undefined; - exports.RESTIFY_MW_METHODS = ["use", "pre"]; - exports.RESTIFY_METHODS = [ - "del", - "get", - "head", - "opts", - "post", - "put", - "patch" - ]; - exports.MODULE_NAME = "restify"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/utils.js -var require_utils32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isAsyncFunction = exports.isPromise = undefined; - var isPromise = (value) => { - return !!(value && typeof value.then === "function" && typeof value.catch === "function" && value.toString() === "[object Promise]"); - }; - exports.isPromise = isPromise; - var isAsyncFunction = (value) => { - return !!(value && typeof value === "function" && value.constructor?.name === "AsyncFunction"); - }; - exports.isAsyncFunction = isAsyncFunction; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/instrumentation.js -var require_instrumentation34 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RestifyInstrumentation = undefined; - var api4 = require_src(); - var types_1 = require_types7(); - var AttributeNames_1 = require_AttributeNames13(); - var version_1 = require_version38(); - var constants = require_constants7(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var utils_1 = require_utils32(); - var core_1 = require_src7(); - var supportedVersions = [">=4.1.0 <12"]; - - class RestifyInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - _moduleVersion; - _isDisabled = false; - init() { - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition(constants.MODULE_NAME, supportedVersions, (moduleExports, moduleVersion) => { - this._moduleVersion = moduleVersion; - return moduleExports; - }); - module2.files.push(new instrumentation_1.InstrumentationNodeModuleFile("restify/lib/server.js", supportedVersions, (moduleExports) => { - this._isDisabled = false; - const Server = moduleExports; - for (const name of constants.RESTIFY_METHODS) { - if ((0, instrumentation_1.isWrapped)(Server.prototype[name])) { - this._unwrap(Server.prototype, name); - } - this._wrap(Server.prototype, name, this._methodPatcher.bind(this)); - } - for (const name of constants.RESTIFY_MW_METHODS) { - if ((0, instrumentation_1.isWrapped)(Server.prototype[name])) { - this._unwrap(Server.prototype, name); - } - this._wrap(Server.prototype, name, this._middlewarePatcher.bind(this)); - } - return moduleExports; - }, (moduleExports) => { - this._isDisabled = true; - if (moduleExports) { - const Server = moduleExports; - for (const name of constants.RESTIFY_METHODS) { - this._unwrap(Server.prototype, name); - } - for (const name of constants.RESTIFY_MW_METHODS) { - this._unwrap(Server.prototype, name); - } - } - })); - return module2; - } - _middlewarePatcher(original, methodName) { - const instrumentation = this; - return function(...handler) { - return original.call(this, instrumentation._handlerPatcher({ type: types_1.LayerType.MIDDLEWARE, methodName }, handler)); - }; - } - _methodPatcher(original, methodName) { - const instrumentation = this; - return function(path, ...handler) { - return original.call(this, path, ...instrumentation._handlerPatcher({ type: types_1.LayerType.REQUEST_HANDLER, path, methodName }, handler)); - }; - } - _handlerPatcher(metadata, handler) { - if (Array.isArray(handler)) { - return handler.map((handler2) => this._handlerPatcher(metadata, handler2)); - } - if (typeof handler === "function") { - return (req, res, next) => { - if (this._isDisabled) { - return handler(req, res, next); - } - const route = typeof req.getRoute === "function" ? req.getRoute()?.path : req.route?.path; - const httpMetadata = (0, core_1.getRPCMetadata)(api4.context.active()); - if (httpMetadata?.type === core_1.RPCType.HTTP) { - httpMetadata.route = route; - } - const fnName = handler.name || undefined; - const spanName = metadata.type === types_1.LayerType.REQUEST_HANDLER ? `request handler - ${route}` : `middleware - ${fnName || "anonymous"}`; - const attributes = { - [AttributeNames_1.AttributeNames.NAME]: fnName, - [AttributeNames_1.AttributeNames.VERSION]: this._moduleVersion || "n/a", - [AttributeNames_1.AttributeNames.TYPE]: metadata.type, - [AttributeNames_1.AttributeNames.METHOD]: metadata.methodName, - [semantic_conventions_1.ATTR_HTTP_ROUTE]: route - }; - const span = this.tracer.startSpan(spanName, { - attributes - }, api4.context.active()); - const instrumentation = this; - const { requestHook } = instrumentation.getConfig(); - if (requestHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => { - return requestHook(span, { - request: req, - layerType: metadata.type - }); - }, (e) => { - if (e) { - instrumentation._diag.error("request hook failed", e); - } - }, true); - } - const patchedNext = (err) => { - span.end(); - next(err); - }; - patchedNext.ifError = next.ifError; - const wrapPromise = (promise2) => { - return promise2.then((value) => { - span.end(); - return value; - }).catch((err) => { - span.recordException(err); - span.end(); - throw err; - }); - }; - const newContext = api4.trace.setSpan(api4.context.active(), span); - return api4.context.with(newContext, (req2, res2, next2) => { - if ((0, utils_1.isAsyncFunction)(handler)) { - return wrapPromise(handler(req2, res2, next2)); - } - try { - const result = handler(req2, res2, next2); - if ((0, utils_1.isPromise)(result)) { - return wrapPromise(result); - } - span.end(); - return result; - } catch (err) { - span.recordException(err); - span.end(); - throw err; - } - }, this, req, res, patchedNext); - }; - } - return handler; - } - } - exports.RestifyInstrumentation = RestifyInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-restify@0.53.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-restify/build/src/index.js -var require_src46 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LayerType = exports.AttributeNames = exports.RestifyInstrumentation = undefined; - var instrumentation_1 = require_instrumentation34(); - Object.defineProperty(exports, "RestifyInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.RestifyInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames13(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); - var types_1 = require_types7(); - Object.defineProperty(exports, "LayerType", { enumerable: true, get: function() { - return types_1.LayerType; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/version.js -var require_version39 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.52.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-router"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/constants.js -var require_constants8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ROUTER_HANDLE_FN = exports.ROUTE_ROUTER_FN = exports.MODULE_NAME = undefined; - exports.MODULE_NAME = "router"; - exports.ROUTE_ROUTER_FN = `function router(req, res, next) { - router.handle(req, res, next) - }`; - exports.ROUTER_HANDLE_FN = `function handle(req, res, next) { - route.dispatch(req, res, next) - }`; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/utils.js -var require_utils33 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.once = exports.renameHttpSpan = exports.isInternal = undefined; - var constants = require_constants8(); - var isInternal = (fn) => { - if (fn.name === "handle" && fn.toString() === constants.ROUTER_HANDLE_FN) { - return true; - } - if (fn.name === "router" && fn.toString() === constants.ROUTE_ROUTER_FN) { - return true; - } - return false; - }; - exports.isInternal = isInternal; - var renameHttpSpan = (span, method, route) => { - if (typeof method === "string" && typeof route === "string" && span?.name?.startsWith("HTTP ")) { - span.updateName(`${method.toUpperCase()} ${route}`); - } - }; - exports.renameHttpSpan = renameHttpSpan; - var once = (fn) => { - let run = true; - return () => { - if (run) { - run = false; - fn(); - } - }; - }; - exports.once = once; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/enums/AttributeNames.js -var require_AttributeNames14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = undefined; - var AttributeNames; - (function(AttributeNames2) { - AttributeNames2["TYPE"] = "router.type"; - AttributeNames2["NAME"] = "router.name"; - AttributeNames2["METHOD"] = "router.method"; - AttributeNames2["VERSION"] = "router.version"; - })(AttributeNames = exports.AttributeNames || (exports.AttributeNames = {})); - exports.default = AttributeNames; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/enums/LayerType.js -var require_LayerType = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LayerType = undefined; - var LayerType; - (function(LayerType2) { - LayerType2["MIDDLEWARE"] = "middleware"; - LayerType2["REQUEST_HANDLER"] = "request_handler"; - })(LayerType = exports.LayerType || (exports.LayerType = {})); - exports.default = LayerType; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/instrumentation.js -var require_instrumentation35 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RouterInstrumentation = undefined; - var api4 = require_src(); - var instrumentation_1 = require_src9(); - var semantic_conventions_1 = require_src3(); - var version_1 = require_version39(); - var constants = require_constants8(); - var utils = require_utils33(); - var AttributeNames_1 = require_AttributeNames14(); - var LayerType_1 = require_LayerType(); - var supportedVersions = [">=1.0.0 <2"]; - - class RouterInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - _moduleVersion; - init() { - const module2 = new instrumentation_1.InstrumentationNodeModuleDefinition(constants.MODULE_NAME, supportedVersions, (moduleExports, moduleVersion) => { - this._moduleVersion = moduleVersion; - return moduleExports; - }); - module2.files.push(new instrumentation_1.InstrumentationNodeModuleFile("router/lib/layer.js", supportedVersions, (moduleExports) => { - const Layer = moduleExports; - if ((0, instrumentation_1.isWrapped)(Layer.prototype.handle_request)) { - this._unwrap(Layer.prototype, "handle_request"); - } - this._wrap(Layer.prototype, "handle_request", this._requestHandlerPatcher.bind(this)); - if ((0, instrumentation_1.isWrapped)(Layer.prototype.handle_error)) { - this._unwrap(Layer.prototype, "handle_error"); - } - this._wrap(Layer.prototype, "handle_error", this._errorHandlerPatcher.bind(this)); - return moduleExports; - }, (moduleExports) => { - const Layer = moduleExports; - this._unwrap(Layer.prototype, "handle_request"); - this._unwrap(Layer.prototype, "handle_error"); - return moduleExports; - })); - return module2; - } - _requestHandlerPatcher(original) { - const instrumentation = this; - return function wrapped_handle_request(req, res, next) { - if (utils.isInternal(this.handle) || this.handle.length > 3) { - return original.call(this, req, res, next); - } - const { context: context8, wrappedNext } = instrumentation._setupSpan(this, req, res, next); - return api4.context.with(context8, original, this, req, res, wrappedNext); - }; - } - _errorHandlerPatcher(original) { - const instrumentation = this; - return function wrapped_handle_request(error48, req, res, next) { - if (utils.isInternal(this.handle) || this.handle.length !== 4) { - return original.call(this, error48, req, res, next); - } - const { context: context8, wrappedNext } = instrumentation._setupSpan(this, req, res, next); - return api4.context.with(context8, original, this, error48, req, res, wrappedNext); - }; - } - _setupSpan(layer, req, res, next) { - const fnName = layer.handle.name || ""; - const type = layer.method ? LayerType_1.default.REQUEST_HANDLER : LayerType_1.default.MIDDLEWARE; - const route = req.baseUrl + (req.route?.path ?? "") || "/"; - const spanName = type === LayerType_1.default.REQUEST_HANDLER ? `request handler - ${route}` : `middleware - ${fnName}`; - const attributes = { - [AttributeNames_1.default.NAME]: fnName, - [AttributeNames_1.default.VERSION]: this._moduleVersion, - [AttributeNames_1.default.TYPE]: type, - [semantic_conventions_1.ATTR_HTTP_ROUTE]: route - }; - const parent = api4.context.active(); - const parentSpan = api4.trace.getSpan(parent); - const span = this.tracer.startSpan(spanName, { - attributes - }, parent); - const endSpan = utils.once(span.end.bind(span)); - utils.renameHttpSpan(parentSpan, layer.method, route); - res.prependOnceListener("finish", endSpan); - const wrappedNext = (err) => { - if (err) { - span.recordException(err); - } - endSpan(); - if (parent) { - return api4.context.with(parent, next, undefined, err); - } - return next(err); - }; - return { - context: api4.trace.setSpan(parent, span), - wrappedNext - }; - } - } - exports.RouterInstrumentation = RouterInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-router@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-router/build/src/index.js -var require_src47 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeNames = exports.RouterInstrumentation = undefined; - var instrumentation_1 = require_instrumentation35(); - Object.defineProperty(exports, "RouterInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.RouterInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames14(); - Object.defineProperty(exports, "AttributeNames", { enumerable: true, get: function() { - return AttributeNames_1.AttributeNames; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/metrics/baseCollector.js -var require_baseCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseCollector = undefined; - - class BaseCollector { - _config = {}; - constructor(config2 = {}) { - this._config = config2; - } - disable() { - this._config.enabled = false; - this.internalDisable(); - } - enable() { - this._config.enabled = true; - this.internalEnable(); - } - } - exports.BaseCollector = BaseCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/semconv.js -var require_semconv25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NODEJS_EVENTLOOP_STATE_VALUE_IDLE = exports.NODEJS_EVENTLOOP_STATE_VALUE_ACTIVE = exports.METRIC_V8JS_MEMORY_HEAP_USED = exports.METRIC_V8JS_MEMORY_HEAP_LIMIT = exports.METRIC_V8JS_GC_DURATION = exports.METRIC_NODEJS_EVENTLOOP_UTILIZATION = exports.METRIC_NODEJS_EVENTLOOP_TIME = exports.METRIC_NODEJS_EVENTLOOP_DELAY_STDDEV = exports.METRIC_NODEJS_EVENTLOOP_DELAY_P99 = exports.METRIC_NODEJS_EVENTLOOP_DELAY_P90 = exports.METRIC_NODEJS_EVENTLOOP_DELAY_P50 = exports.METRIC_NODEJS_EVENTLOOP_DELAY_MIN = exports.METRIC_NODEJS_EVENTLOOP_DELAY_MEAN = exports.METRIC_NODEJS_EVENTLOOP_DELAY_MAX = exports.ATTR_V8JS_HEAP_SPACE_NAME = exports.ATTR_V8JS_GC_TYPE = exports.ATTR_NODEJS_EVENTLOOP_STATE = undefined; - exports.ATTR_NODEJS_EVENTLOOP_STATE = "nodejs.eventloop.state"; - exports.ATTR_V8JS_GC_TYPE = "v8js.gc.type"; - exports.ATTR_V8JS_HEAP_SPACE_NAME = "v8js.heap.space.name"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_MAX = "nodejs.eventloop.delay.max"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_MEAN = "nodejs.eventloop.delay.mean"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_MIN = "nodejs.eventloop.delay.min"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_P50 = "nodejs.eventloop.delay.p50"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_P90 = "nodejs.eventloop.delay.p90"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_P99 = "nodejs.eventloop.delay.p99"; - exports.METRIC_NODEJS_EVENTLOOP_DELAY_STDDEV = "nodejs.eventloop.delay.stddev"; - exports.METRIC_NODEJS_EVENTLOOP_TIME = "nodejs.eventloop.time"; - exports.METRIC_NODEJS_EVENTLOOP_UTILIZATION = "nodejs.eventloop.utilization"; - exports.METRIC_V8JS_GC_DURATION = "v8js.gc.duration"; - exports.METRIC_V8JS_MEMORY_HEAP_LIMIT = "v8js.memory.heap.limit"; - exports.METRIC_V8JS_MEMORY_HEAP_USED = "v8js.memory.heap.used"; - exports.NODEJS_EVENTLOOP_STATE_VALUE_ACTIVE = "active"; - exports.NODEJS_EVENTLOOP_STATE_VALUE_IDLE = "idle"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/metrics/eventLoopUtilizationCollector.js -var require_eventLoopUtilizationCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EventLoopUtilizationCollector = undefined; - var node_perf_hooks_1 = __require("perf_hooks"); - var baseCollector_1 = require_baseCollector(); - var semconv_1 = require_semconv25(); - var { eventLoopUtilization: eventLoopUtilizationCollector } = node_perf_hooks_1.performance; - - class EventLoopUtilizationCollector extends baseCollector_1.BaseCollector { - _lastValue; - updateMetricInstruments(meter) { - meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_UTILIZATION, { - description: "Event loop utilization", - unit: "1" - }).addCallback(async (observableResult) => { - if (!this._config.enabled) - return; - const elu = eventLoopUtilizationCollector(this._lastValue); - observableResult.observe(elu.utilization); - this._lastValue = elu; - }); - } - internalDisable() {} - internalEnable() {} - } - exports.EventLoopUtilizationCollector = EventLoopUtilizationCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/metrics/eventLoopDelayCollector.js -var require_eventLoopDelayCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EventLoopDelayCollector = undefined; - var perf_hooks = __require("perf_hooks"); - var semconv_1 = require_semconv25(); - var baseCollector_1 = require_baseCollector(); - - class EventLoopDelayCollector extends baseCollector_1.BaseCollector { - _histogram; - constructor(config2 = {}) { - super(config2); - this._histogram = perf_hooks.monitorEventLoopDelay({ - resolution: config2.monitoringPrecision - }); - } - updateMetricInstruments(meter) { - const delayMin = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_MIN, { - description: "Event loop minimum delay.", - unit: "s" - }); - const delayMax = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_MAX, { - description: "Event loop maximum delay.", - unit: "s" - }); - const delayMean = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_MEAN, { - description: "Event loop mean delay.", - unit: "s" - }); - const delayStddev = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_STDDEV, { - description: "Event loop standard deviation delay.", - unit: "s" - }); - const delayp50 = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_P50, { - description: "Event loop 50 percentile delay.", - unit: "s" - }); - const delayp90 = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_P90, { - description: "Event loop 90 percentile delay.", - unit: "s" - }); - const delayp99 = meter.createObservableGauge(semconv_1.METRIC_NODEJS_EVENTLOOP_DELAY_P99, { - description: "Event loop 99 percentile delay.", - unit: "s" - }); - meter.addBatchObservableCallback(async (observableResult) => { - if (!this._config.enabled) - return; - const data = this.scrape(); - if (data === undefined) - return; - if (this._histogram.count < 5) - return; - observableResult.observe(delayMin, data.min); - observableResult.observe(delayMax, data.max); - observableResult.observe(delayMean, data.mean); - observableResult.observe(delayStddev, data.stddev); - observableResult.observe(delayp50, data.p50); - observableResult.observe(delayp90, data.p90); - observableResult.observe(delayp99, data.p99); - this._histogram.reset(); - }, [delayMin, delayMax, delayMean, delayStddev, delayp50, delayp90, delayp99]); - } - internalEnable() { - this._histogram.enable(); - } - internalDisable() { - this._histogram.disable(); - } - scrape() { - return { - min: this.checkNan(this._histogram.min / 1e9), - max: this.checkNan(this._histogram.max / 1e9), - mean: this.checkNan(this._histogram.mean / 1e9), - stddev: this.checkNan(this._histogram.stddev / 1e9), - p50: this.checkNan(this._histogram.percentile(50) / 1e9), - p90: this.checkNan(this._histogram.percentile(90) / 1e9), - p99: this.checkNan(this._histogram.percentile(99) / 1e9) - }; - } - checkNan(value) { - return isNaN(value) ? 0 : value; - } - } - exports.EventLoopDelayCollector = EventLoopDelayCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/metrics/gcCollector.js -var require_gcCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GCCollector = undefined; - var perf_hooks = __require("perf_hooks"); - var api_1 = require_src(); - var baseCollector_1 = require_baseCollector(); - var semconv_1 = require_semconv25(); - var DEFAULT_GC_DURATION_BUCKETS = [0.01, 0.1, 1, 10]; - var kinds = []; - kinds[perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR] = "major"; - kinds[perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR] = "minor"; - kinds[perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL] = "incremental"; - kinds[perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB] = "weakcb"; - - class GCCollector extends baseCollector_1.BaseCollector { - _gcDurationByKindHistogram; - _observer; - constructor(config2 = {}) { - super(config2); - this._observer = new perf_hooks.PerformanceObserver((list5) => { - if (!this._config.enabled) - return; - const entry = list5.getEntries()[0]; - const kind = entry.detail ? kinds[entry.detail.kind] : kinds[entry.kind]; - this._gcDurationByKindHistogram?.record(entry.duration / 1000, { - [semconv_1.ATTR_V8JS_GC_TYPE]: kind - }); - }); - } - updateMetricInstruments(meter) { - this._gcDurationByKindHistogram = meter.createHistogram(semconv_1.METRIC_V8JS_GC_DURATION, { - description: "Garbage collection duration by kind, one of major, minor, incremental or weakcb.", - unit: "s", - valueType: api_1.ValueType.DOUBLE, - advice: { - explicitBucketBoundaries: DEFAULT_GC_DURATION_BUCKETS - } - }); - } - internalEnable() { - this._observer.observe({ entryTypes: ["gc"] }); - } - internalDisable() { - this._observer.disconnect(); - } - } - exports.GCCollector = GCCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/metrics/heapSpacesSizeAndUsedCollector.js -var require_heapSpacesSizeAndUsedCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HeapSpacesSizeAndUsedCollector = undefined; - var v8 = __require("v8"); - var baseCollector_1 = require_baseCollector(); - var semconv_1 = require_semconv25(); - - class HeapSpacesSizeAndUsedCollector extends baseCollector_1.BaseCollector { - updateMetricInstruments(meter) { - const heapLimit = meter.createObservableGauge(semconv_1.METRIC_V8JS_MEMORY_HEAP_LIMIT, { - description: "Total heap memory size pre-allocated.", - unit: "By" - }); - const heapSpaceUsed = meter.createObservableGauge(semconv_1.METRIC_V8JS_MEMORY_HEAP_USED, { - description: "Heap Memory size allocated.", - unit: "By" - }); - const heapSpaceAvailable = meter.createObservableGauge("v8js.memory.heap.space.available_size", { - description: "Heap space available size.", - unit: "By" - }); - const heapSpacePhysical = meter.createObservableGauge("v8js.memory.heap.space.physical_size", { - description: "Committed size of a heap space.", - unit: "By" - }); - meter.addBatchObservableCallback((observableResult) => { - if (!this._config.enabled) - return; - const data = this.scrape(); - if (data === undefined) - return; - for (const space of data) { - const spaceName = space.space_name; - observableResult.observe(heapLimit, space.space_size, { - [semconv_1.ATTR_V8JS_HEAP_SPACE_NAME]: spaceName - }); - observableResult.observe(heapSpaceUsed, space.space_used_size, { - [semconv_1.ATTR_V8JS_HEAP_SPACE_NAME]: spaceName - }); - observableResult.observe(heapSpaceAvailable, space.space_available_size, { - [semconv_1.ATTR_V8JS_HEAP_SPACE_NAME]: spaceName - }); - observableResult.observe(heapSpacePhysical, space.physical_space_size, { - [semconv_1.ATTR_V8JS_HEAP_SPACE_NAME]: spaceName - }); - } - }, [heapLimit, heapSpaceUsed, heapSpaceAvailable, heapSpacePhysical]); - } - internalEnable() {} - internalDisable() {} - scrape() { - return v8.getHeapSpaceStatistics(); - } - } - exports.HeapSpacesSizeAndUsedCollector = HeapSpacesSizeAndUsedCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/metrics/eventLoopTimeCollector.js -var require_eventLoopTimeCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EventLoopTimeCollector = undefined; - var node_perf_hooks_1 = __require("perf_hooks"); - var baseCollector_1 = require_baseCollector(); - var semconv_1 = require_semconv25(); - var { eventLoopUtilization: eventLoopUtilizationCollector } = node_perf_hooks_1.performance; - - class EventLoopTimeCollector extends baseCollector_1.BaseCollector { - updateMetricInstruments(meter) { - const timeCounter = meter.createObservableCounter(semconv_1.METRIC_NODEJS_EVENTLOOP_TIME, { - description: "Cumulative duration of time the event loop has been in each state.", - unit: "s" - }); - meter.addBatchObservableCallback(async (observableResult) => { - if (!this._config.enabled) - return; - const data = this.scrape(); - if (data === undefined) - return; - observableResult.observe(timeCounter, data.active / 1000, { - [semconv_1.ATTR_NODEJS_EVENTLOOP_STATE]: semconv_1.NODEJS_EVENTLOOP_STATE_VALUE_ACTIVE - }); - observableResult.observe(timeCounter, data.idle / 1000, { - [semconv_1.ATTR_NODEJS_EVENTLOOP_STATE]: semconv_1.NODEJS_EVENTLOOP_STATE_VALUE_IDLE - }); - }, [timeCounter]); - } - internalDisable() {} - internalEnable() {} - scrape() { - return eventLoopUtilizationCollector(); - } - } - exports.EventLoopTimeCollector = EventLoopTimeCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/version.js -var require_version40 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.21.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-runtime-node"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/instrumentation.js -var require_instrumentation36 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RuntimeNodeInstrumentation = undefined; - var instrumentation_1 = require_src9(); - var eventLoopUtilizationCollector_1 = require_eventLoopUtilizationCollector(); - var eventLoopDelayCollector_1 = require_eventLoopDelayCollector(); - var gcCollector_1 = require_gcCollector(); - var heapSpacesSizeAndUsedCollector_1 = require_heapSpacesSizeAndUsedCollector(); - var eventLoopTimeCollector_1 = require_eventLoopTimeCollector(); - var version_1 = require_version40(); - var DEFAULT_CONFIG = { - monitoringPrecision: 10 - }; - - class RuntimeNodeInstrumentation extends instrumentation_1.InstrumentationBase { - _collectors = []; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, Object.assign({}, DEFAULT_CONFIG, config2)); - this._collectors = [ - new eventLoopUtilizationCollector_1.EventLoopUtilizationCollector(this._config), - new eventLoopTimeCollector_1.EventLoopTimeCollector(this._config), - new eventLoopDelayCollector_1.EventLoopDelayCollector(this._config), - new gcCollector_1.GCCollector(this._config), - new heapSpacesSizeAndUsedCollector_1.HeapSpacesSizeAndUsedCollector(this._config) - ]; - if (this._config.enabled) { - for (const collector of this._collectors) { - collector.enable(); - } - } - } - _updateMetricInstruments() { - if (!this._collectors) - return; - for (const collector of this._collectors) { - collector.updateMetricInstruments(this.meter); - } - } - init() {} - enable() { - super.enable(); - if (!this._collectors) - return; - for (const collector of this._collectors) { - collector.enable(); - } - } - disable() { - super.disable(); - for (const collector of this._collectors) { - collector.disable(); - } - } - } - exports.RuntimeNodeInstrumentation = RuntimeNodeInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-runtime-node@0.21.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-runtime-node/build/src/index.js -var require_src48 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RuntimeNodeInstrumentation = undefined; - var instrumentation_1 = require_instrumentation36(); - Object.defineProperty(exports, "RuntimeNodeInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.RuntimeNodeInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/semconv.js -var require_semconv26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_MESSAGING_SYSTEM = exports.ATTR_MESSAGING_OPERATION = undefined; - exports.ATTR_MESSAGING_OPERATION = "messaging.operation"; - exports.ATTR_MESSAGING_SYSTEM = "messaging.system"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/semconv-obsolete.js -var require_semconv_obsolete4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MESSAGING_DESTINATION_KIND_VALUE_TOPIC = exports.MESSAGING_OPERATION_VALUE_RECEIVE = exports.ATTR_MESSAGING_DESTINATION_KIND = exports.ATTR_MESSAGING_DESTINATION = undefined; - exports.ATTR_MESSAGING_DESTINATION = "messaging.destination"; - exports.ATTR_MESSAGING_DESTINATION_KIND = "messaging.destination_kind"; - exports.MESSAGING_OPERATION_VALUE_RECEIVE = "receive"; - exports.MESSAGING_DESTINATION_KIND_VALUE_TOPIC = "topic"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/AttributeNames.js -var require_AttributeNames15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SocketIoInstrumentationAttributes = undefined; - exports.SocketIoInstrumentationAttributes = { - SOCKET_IO_ROOMS: "messaging.socket.io.rooms", - SOCKET_IO_NAMESPACE: "messaging.socket.io.namespace", - SOCKET_IO_EVENT_NAME: "messaging.socket.io.event_name" - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/version.js -var require_version41 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.54.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-socket.io"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/utils.js -var require_utils34 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.extractRoomsAttributeValue = exports.normalizeConfig = exports.isPromise = undefined; - var isPromise = (value) => { - return typeof value?.then === "function"; - }; - exports.isPromise = isPromise; - var normalizeConfig = (config2) => { - config2 = Object.assign({}, config2); - if (!Array.isArray(config2.emitIgnoreEventList)) { - config2.emitIgnoreEventList = []; - } - if (!Array.isArray(config2.onIgnoreEventList)) { - config2.onIgnoreEventList = []; - } - return config2; - }; - exports.normalizeConfig = normalizeConfig; - var extractRoomsAttributeValue = (self2) => { - let rooms = self2.rooms || self2._rooms || self2.sockets?._rooms || self2.sockets?.rooms || []; - if (!Array.isArray(rooms)) { - rooms = Array.from(rooms); - } - if (rooms.length === 0 && self2.id) { - rooms.push(self2.id); - } - return rooms; - }; - exports.extractRoomsAttributeValue = extractRoomsAttributeValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/socket.io.js -var require_socket_io = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SocketIoInstrumentation = undefined; - var api_1 = require_src(); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv26(); - var semconv_obsolete_1 = require_semconv_obsolete4(); - var AttributeNames_1 = require_AttributeNames15(); - var version_1 = require_version41(); - var utils_1 = require_utils34(); - var reservedEvents = [ - "connect", - "connect_error", - "disconnect", - "disconnecting", - "newListener", - "removeListener" - ]; - - class SocketIoInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, (0, utils_1.normalizeConfig)(config2)); - } - init() { - const socketInstrumentation = new instrumentation_1.InstrumentationNodeModuleFile("socket.io/dist/socket.js", [">=3 <5"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.Socket?.prototype?.on)) { - this._unwrap(moduleExports.Socket.prototype, "on"); - } - this._wrap(moduleExports.Socket.prototype, "on", this._patchOn(moduleVersion)); - if ((0, instrumentation_1.isWrapped)(moduleExports?.Socket?.prototype?.emit)) { - this._unwrap(moduleExports.Socket.prototype, "emit"); - } - this._wrap(moduleExports.Socket.prototype, "emit", this._patchEmit(moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.Socket?.prototype?.on)) { - this._unwrap(moduleExports.Socket.prototype, "on"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.Socket?.prototype?.emit)) { - this._unwrap(moduleExports.Socket.prototype, "emit"); - } - return moduleExports; - }); - const broadcastOperatorInstrumentation = new instrumentation_1.InstrumentationNodeModuleFile("socket.io/dist/broadcast-operator.js", [">=4 <5"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.BroadcastOperator?.prototype?.emit)) { - this._unwrap(moduleExports.BroadcastOperator.prototype, "emit"); - } - this._wrap(moduleExports.BroadcastOperator.prototype, "emit", this._patchEmit(moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.BroadcastOperator?.prototype?.emit)) { - this._unwrap(moduleExports.BroadcastOperator.prototype, "emit"); - } - return moduleExports; - }); - const namespaceInstrumentation = new instrumentation_1.InstrumentationNodeModuleFile("socket.io/dist/namespace.js", ["<4"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.Namespace?.prototype?.emit)) { - this._unwrap(moduleExports.Namespace.prototype, "emit"); - } - this._wrap(moduleExports.Namespace.prototype, "emit", this._patchEmit(moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.Namespace?.prototype?.emit)) { - this._unwrap(moduleExports.Namespace.prototype, "emit"); - } - }); - const socketInstrumentationLegacy = new instrumentation_1.InstrumentationNodeModuleFile("socket.io/lib/socket.js", ["2"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype?.on)) { - this._unwrap(moduleExports.prototype, "on"); - } - this._wrap(moduleExports.prototype, "on", this._patchOn(moduleVersion)); - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype?.emit)) { - this._unwrap(moduleExports.prototype, "emit"); - } - this._wrap(moduleExports.prototype, "emit", this._patchEmit(moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype?.on)) { - this._unwrap(moduleExports.prototype, "on"); - } - if ((0, instrumentation_1.isWrapped)(moduleExports.prototype?.emit)) { - this._unwrap(moduleExports.prototype, "emit"); - } - return moduleExports; - }); - const namespaceInstrumentationLegacy = new instrumentation_1.InstrumentationNodeModuleFile("socket.io/lib/namespace.js", ["2"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.prototype?.emit)) { - this._unwrap(moduleExports.prototype, "emit"); - } - this._wrap(moduleExports.prototype, "emit", this._patchEmit(moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.prototype?.emit)) { - this._unwrap(moduleExports.prototype, "emit"); - } - }); - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition("socket.io", [">=3 <5"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.Server?.prototype?.on)) { - this._unwrap(moduleExports.Server.prototype, "on"); - } - this._wrap(moduleExports.Server.prototype, "on", this._patchOn(moduleVersion)); - return moduleExports; - }, (moduleExports) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.Server?.prototype?.on)) { - this._unwrap(moduleExports.Server.prototype, "on"); - } - return moduleExports; - }, [ - broadcastOperatorInstrumentation, - namespaceInstrumentation, - socketInstrumentation - ]), - new instrumentation_1.InstrumentationNodeModuleDefinition("socket.io", ["2"], (moduleExports, moduleVersion) => { - if (moduleExports === undefined || moduleExports === null) { - return moduleExports; - } - if (moduleVersion === undefined) { - return moduleExports; - } - if ((0, instrumentation_1.isWrapped)(moduleExports?.prototype?.on)) { - this._unwrap(moduleExports.prototype, "on"); - } - this._wrap(moduleExports.prototype, "on", this._patchOn(moduleVersion)); - return moduleExports; - }, (moduleExports, moduleVersion) => { - if ((0, instrumentation_1.isWrapped)(moduleExports?.prototype?.on)) { - this._unwrap(moduleExports.prototype, "on"); - } - return moduleExports; - }, [namespaceInstrumentationLegacy, socketInstrumentationLegacy]) - ]; - } - setConfig(config2 = {}) { - return super.setConfig((0, utils_1.normalizeConfig)(config2)); - } - _patchOn(moduleVersion) { - const self2 = this; - return (original) => { - return function(ev, originalListener) { - if (!self2.getConfig().traceReserved && reservedEvents.includes(ev)) { - return original.apply(this, arguments); - } - if (self2.getConfig().onIgnoreEventList?.includes(ev)) { - return original.apply(this, arguments); - } - const wrappedListener = function(...args) { - const eventName = ev; - const namespace = this.name || this.adapter?.nsp?.name; - const span = self2.tracer.startSpan(`${semconv_obsolete_1.MESSAGING_OPERATION_VALUE_RECEIVE} ${namespace}`, { - kind: api_1.SpanKind.CONSUMER, - attributes: { - [semconv_1.ATTR_MESSAGING_SYSTEM]: "socket.io", - [semconv_obsolete_1.ATTR_MESSAGING_DESTINATION]: namespace, - [semconv_1.ATTR_MESSAGING_OPERATION]: semconv_obsolete_1.MESSAGING_OPERATION_VALUE_RECEIVE, - [AttributeNames_1.SocketIoInstrumentationAttributes.SOCKET_IO_EVENT_NAME]: eventName - } - }); - const { onHook } = self2.getConfig(); - if (onHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => onHook(span, { moduleVersion, payload: args }), (e) => { - if (e) - self2._diag.error("onHook error", e); - }, true); - } - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => self2.endSpan(() => originalListener.apply(this, arguments), span)); - }; - return original.apply(this, [ev, wrappedListener]); - }; - }; - } - endSpan(traced, span) { - try { - const result = traced(); - if ((0, utils_1.isPromise)(result)) { - return result.then((value) => { - span.end(); - return value; - }, (err) => { - span.recordException(err); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: err?.message - }); - span.end(); - throw err; - }); - } else { - span.end(); - return result; - } - } catch (error48) { - span.recordException(error48); - span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error48?.message }); - span.end(); - throw error48; - } - } - _patchEmit(moduleVersion) { - const self2 = this; - return (original) => { - return function(ev, ...args) { - if (!self2.getConfig().traceReserved && reservedEvents.includes(ev)) { - return original.apply(this, arguments); - } - if (self2.getConfig().emitIgnoreEventList?.includes(ev)) { - return original.apply(this, arguments); - } - const messagingSystem = "socket.io"; - const eventName = ev; - const attributes = { - [semconv_1.ATTR_MESSAGING_SYSTEM]: messagingSystem, - [semconv_obsolete_1.ATTR_MESSAGING_DESTINATION_KIND]: semconv_obsolete_1.MESSAGING_DESTINATION_KIND_VALUE_TOPIC, - [AttributeNames_1.SocketIoInstrumentationAttributes.SOCKET_IO_EVENT_NAME]: eventName - }; - const rooms = (0, utils_1.extractRoomsAttributeValue)(this); - if (rooms.length) { - attributes[AttributeNames_1.SocketIoInstrumentationAttributes.SOCKET_IO_ROOMS] = rooms; - } - const namespace = this.name || this.adapter?.nsp?.name || this.sockets?.name; - if (namespace) { - attributes[AttributeNames_1.SocketIoInstrumentationAttributes.SOCKET_IO_NAMESPACE] = namespace; - attributes[semconv_obsolete_1.ATTR_MESSAGING_DESTINATION] = namespace; - } - const span = self2.tracer.startSpan(`send ${namespace}`, { - kind: api_1.SpanKind.PRODUCER, - attributes - }); - const { emitHook } = self2.getConfig(); - if (emitHook) { - (0, instrumentation_1.safeExecuteInTheMiddle)(() => emitHook(span, { moduleVersion, payload: args }), (e) => { - if (e) - self2._diag.error("emitHook error", e); - }, true); - } - try { - return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), () => original.apply(this, arguments)); - } catch (error48) { - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - throw error48; - } finally { - span.end(); - } - }; - }; - } - } - exports.SocketIoInstrumentation = SocketIoInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/types.js -var require_types8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultSocketIoPath = undefined; - exports.defaultSocketIoPath = "/socket.io/"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-socket.io@0.54.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-socket.io/build/src/index.js -var require_src49 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultSocketIoPath = exports.SocketIoInstrumentationAttributes = exports.SocketIoInstrumentation = undefined; - var socket_io_1 = require_socket_io(); - Object.defineProperty(exports, "SocketIoInstrumentation", { enumerable: true, get: function() { - return socket_io_1.SocketIoInstrumentation; - } }); - var AttributeNames_1 = require_AttributeNames15(); - Object.defineProperty(exports, "SocketIoInstrumentationAttributes", { enumerable: true, get: function() { - return AttributeNames_1.SocketIoInstrumentationAttributes; - } }); - var types_1 = require_types8(); - Object.defineProperty(exports, "defaultSocketIoPath", { enumerable: true, get: function() { - return types_1.defaultSocketIoPath; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-tedious@0.26.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-tedious/build/src/semconv.js -var require_semconv27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DB_SYSTEM_VALUE_MSSQL = exports.ATTR_NET_PEER_PORT = exports.ATTR_NET_PEER_NAME = exports.ATTR_DB_USER = exports.ATTR_DB_SYSTEM = exports.ATTR_DB_STATEMENT = exports.ATTR_DB_SQL_TABLE = exports.ATTR_DB_NAME = undefined; - exports.ATTR_DB_NAME = "db.name"; - exports.ATTR_DB_SQL_TABLE = "db.sql.table"; - exports.ATTR_DB_STATEMENT = "db.statement"; - exports.ATTR_DB_SYSTEM = "db.system"; - exports.ATTR_DB_USER = "db.user"; - exports.ATTR_NET_PEER_NAME = "net.peer.name"; - exports.ATTR_NET_PEER_PORT = "net.peer.port"; - exports.DB_SYSTEM_VALUE_MSSQL = "mssql"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-tedious@0.26.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-tedious/build/src/utils.js -var require_utils35 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.once = exports.getSpanName = undefined; - function getSpanName(operation, db2, sql, bulkLoadTable) { - if (operation === "execBulkLoad" && bulkLoadTable && db2) { - return `${operation} ${bulkLoadTable} ${db2}`; - } - if (operation === "callProcedure") { - if (db2) { - return `${operation} ${sql} ${db2}`; - } - return `${operation} ${sql}`; - } - if (db2) { - return `${operation} ${db2}`; - } - return `${operation}`; - } - exports.getSpanName = getSpanName; - var once = (fn) => { - let called = false; - return (...args) => { - if (called) - return; - called = true; - return fn(...args); - }; - }; - exports.once = once; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-tedious@0.26.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-tedious/build/src/version.js -var require_version42 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.26.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-tedious"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-tedious@0.26.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-tedious/build/src/instrumentation.js -var require_instrumentation37 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TediousInstrumentation = undefined; - var api4 = require_src(); - var events_1 = __require("events"); - var instrumentation_1 = require_src9(); - var semconv_1 = require_semconv27(); - var utils_1 = require_utils35(); - var version_1 = require_version42(); - var CURRENT_DATABASE = Symbol("opentelemetry.instrumentation-tedious.current-database"); - var PATCHED_METHODS = [ - "callProcedure", - "execSql", - "execSqlBatch", - "execBulkLoad", - "prepare", - "execute" - ]; - function setDatabase(databaseName) { - Object.defineProperty(this, CURRENT_DATABASE, { - value: databaseName, - writable: true - }); - } - - class TediousInstrumentation extends instrumentation_1.InstrumentationBase { - static COMPONENT = "tedious"; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return [ - new instrumentation_1.InstrumentationNodeModuleDefinition(TediousInstrumentation.COMPONENT, [">=1.11.0 <20"], (moduleExports) => { - const ConnectionPrototype = moduleExports.Connection.prototype; - for (const method of PATCHED_METHODS) { - if ((0, instrumentation_1.isWrapped)(ConnectionPrototype[method])) { - this._unwrap(ConnectionPrototype, method); - } - this._wrap(ConnectionPrototype, method, this._patchQuery(method)); - } - if ((0, instrumentation_1.isWrapped)(ConnectionPrototype.connect)) { - this._unwrap(ConnectionPrototype, "connect"); - } - this._wrap(ConnectionPrototype, "connect", this._patchConnect); - return moduleExports; - }, (moduleExports) => { - if (moduleExports === undefined) - return; - const ConnectionPrototype = moduleExports.Connection.prototype; - for (const method of PATCHED_METHODS) { - this._unwrap(ConnectionPrototype, method); - } - this._unwrap(ConnectionPrototype, "connect"); - }) - ]; - } - _patchConnect(original) { - return function patchedConnect() { - setDatabase.call(this, this.config?.options?.database); - this.removeListener("databaseChange", setDatabase); - this.on("databaseChange", setDatabase); - this.once("end", () => { - this.removeListener("databaseChange", setDatabase); - }); - return original.apply(this, arguments); - }; - } - _patchQuery(operation) { - return (originalMethod) => { - const thisPlugin = this; - function patchedMethod(request) { - if (!(request instanceof events_1.EventEmitter)) { - thisPlugin._diag.warn(`Unexpected invocation of patched ${operation} method. Span not recorded`); - return originalMethod.apply(this, arguments); - } - let procCount = 0; - let statementCount = 0; - const incrementStatementCount = () => statementCount++; - const incrementProcCount = () => procCount++; - const databaseName = this[CURRENT_DATABASE]; - const sql = ((request2) => { - if (request2.sqlTextOrProcedure === "sp_prepare" && request2.parametersByName?.stmt?.value) { - return request2.parametersByName.stmt.value; - } - return request2.sqlTextOrProcedure; - })(request); - const span = thisPlugin.tracer.startSpan((0, utils_1.getSpanName)(operation, databaseName, sql, request.table), { - kind: api4.SpanKind.CLIENT, - attributes: { - [semconv_1.ATTR_DB_SYSTEM]: semconv_1.DB_SYSTEM_VALUE_MSSQL, - [semconv_1.ATTR_DB_NAME]: databaseName, - [semconv_1.ATTR_NET_PEER_PORT]: this.config?.options?.port, - [semconv_1.ATTR_NET_PEER_NAME]: this.config?.server, - [semconv_1.ATTR_DB_USER]: this.config?.userName ?? this.config?.authentication?.options?.userName, - [semconv_1.ATTR_DB_STATEMENT]: sql, - [semconv_1.ATTR_DB_SQL_TABLE]: request.table - } - }); - const endSpan = (0, utils_1.once)((err) => { - request.removeListener("done", incrementStatementCount); - request.removeListener("doneInProc", incrementStatementCount); - request.removeListener("doneProc", incrementProcCount); - request.removeListener("error", endSpan); - this.removeListener("end", endSpan); - span.setAttribute("tedious.procedure_count", procCount); - span.setAttribute("tedious.statement_count", statementCount); - if (err) { - span.setStatus({ - code: api4.SpanStatusCode.ERROR, - message: err.message - }); - } - span.end(); - }); - request.on("done", incrementStatementCount); - request.on("doneInProc", incrementStatementCount); - request.on("doneProc", incrementProcCount); - request.once("error", endSpan); - this.on("end", endSpan); - if (typeof request.callback === "function") { - thisPlugin._wrap(request, "callback", thisPlugin._patchCallbackQuery(endSpan)); - } else { - thisPlugin._diag.error("Expected request.callback to be a function"); - } - return api4.context.with(api4.trace.setSpan(api4.context.active(), span), originalMethod, this, ...arguments); - } - Object.defineProperty(patchedMethod, "length", { - value: originalMethod.length, - writable: false - }); - return patchedMethod; - }; - } - _patchCallbackQuery(endSpan) { - return (originalCallback) => { - return function(err, rowCount, rows) { - endSpan(err); - return originalCallback.apply(this, arguments); - }; - }; - } - } - exports.TediousInstrumentation = TediousInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-tedious@0.26.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-tedious/build/src/index.js -var require_src50 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TediousInstrumentation = undefined; - var instrumentation_1 = require_instrumentation37(); - Object.defineProperty(exports, "TediousInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.TediousInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-undici@0.18.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-undici/build/src/version.js -var require_version43 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.18.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-undici"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-undici@0.18.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-undici/build/src/undici.js -var require_undici = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.UndiciInstrumentation = undefined; - var diagch = __require("diagnostics_channel"); - var url_1 = __require("url"); - var instrumentation_1 = require_src9(); - var api_1 = require_src(); - var core_1 = require_src7(); - var semantic_conventions_1 = require_src3(); - var version_1 = require_version43(); - - class UndiciInstrumentation extends instrumentation_1.InstrumentationBase { - _recordFromReq = new WeakMap; - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - return; - } - disable() { - super.disable(); - this._channelSubs.forEach((sub) => sub.unsubscribe()); - this._channelSubs.length = 0; - } - enable() { - super.enable(); - this._channelSubs = this._channelSubs || []; - if (this._channelSubs.length > 0) { - return; - } - this.subscribeToChannel("undici:request:create", this.onRequestCreated.bind(this)); - this.subscribeToChannel("undici:client:sendHeaders", this.onRequestHeaders.bind(this)); - this.subscribeToChannel("undici:request:headers", this.onResponseHeaders.bind(this)); - this.subscribeToChannel("undici:request:trailers", this.onDone.bind(this)); - this.subscribeToChannel("undici:request:error", this.onError.bind(this)); - } - _updateMetricInstruments() { - this._httpClientDurationHistogram = this.meter.createHistogram(semantic_conventions_1.METRIC_HTTP_CLIENT_REQUEST_DURATION, { - description: "Measures the duration of outbound HTTP requests.", - unit: "s", - valueType: api_1.ValueType.DOUBLE, - advice: { - explicitBucketBoundaries: [ - 0.005, - 0.01, - 0.025, - 0.05, - 0.075, - 0.1, - 0.25, - 0.5, - 0.75, - 1, - 2.5, - 5, - 7.5, - 10 - ] - } - }); - } - subscribeToChannel(diagnosticChannel, onMessage) { - const [major, minor] = process.version.replace("v", "").split(".").map((n) => Number(n)); - const useNewSubscribe = major > 18 || major === 18 && minor >= 19; - let unsubscribe; - if (useNewSubscribe) { - diagch.subscribe?.(diagnosticChannel, onMessage); - unsubscribe = () => diagch.unsubscribe?.(diagnosticChannel, onMessage); - } else { - const channel = diagch.channel(diagnosticChannel); - channel.subscribe(onMessage); - unsubscribe = () => channel.unsubscribe(onMessage); - } - this._channelSubs.push({ - name: diagnosticChannel, - unsubscribe - }); - } - parseRequestHeaders(request) { - const result = new Map; - if (Array.isArray(request.headers)) { - for (let i = 0;i < request.headers.length; i += 2) { - const key = request.headers[i]; - const value = request.headers[i + 1]; - if (typeof key === "string") { - result.set(key.toLowerCase(), value); - } - } - } else if (typeof request.headers === "string") { - const headers = request.headers.split(`\r -`); - for (const line of headers) { - if (!line) { - continue; - } - const colonIndex = line.indexOf(":"); - if (colonIndex === -1) { - continue; - } - const key = line.substring(0, colonIndex).toLowerCase(); - const value = line.substring(colonIndex + 1).trim(); - const allValues = result.get(key); - if (allValues && Array.isArray(allValues)) { - allValues.push(value); - } else if (allValues) { - result.set(key, [allValues, value]); - } else { - result.set(key, value); - } - } - } - return result; - } - onRequestCreated({ request }) { - const config2 = this.getConfig(); - const enabled = config2.enabled !== false; - const shouldIgnoreReq = (0, instrumentation_1.safeExecuteInTheMiddle)(() => !enabled || request.method === "CONNECT" || config2.ignoreRequestHook?.(request), (e) => e && this._diag.error("caught ignoreRequestHook error: ", e), true); - if (shouldIgnoreReq) { - return; - } - const startTime = (0, core_1.hrTime)(); - let requestUrl; - try { - requestUrl = new url_1.URL(request.path, request.origin); - } catch (err) { - this._diag.warn("could not determine url.full:", err); - return; - } - const urlScheme = requestUrl.protocol.replace(":", ""); - const requestMethod = this.getRequestMethod(request.method); - const attributes = { - [semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD]: requestMethod, - [semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD_ORIGINAL]: request.method, - [semantic_conventions_1.ATTR_URL_FULL]: requestUrl.toString(), - [semantic_conventions_1.ATTR_URL_PATH]: requestUrl.pathname, - [semantic_conventions_1.ATTR_URL_QUERY]: requestUrl.search, - [semantic_conventions_1.ATTR_URL_SCHEME]: urlScheme - }; - const schemePorts = { https: "443", http: "80" }; - const serverAddress = requestUrl.hostname; - const serverPort = requestUrl.port || schemePorts[urlScheme]; - attributes[semantic_conventions_1.ATTR_SERVER_ADDRESS] = serverAddress; - if (serverPort && !isNaN(Number(serverPort))) { - attributes[semantic_conventions_1.ATTR_SERVER_PORT] = Number(serverPort); - } - const headersMap = this.parseRequestHeaders(request); - const userAgentValues = headersMap.get("user-agent"); - if (userAgentValues) { - const userAgent2 = Array.isArray(userAgentValues) ? userAgentValues[userAgentValues.length - 1] : userAgentValues; - attributes[semantic_conventions_1.ATTR_USER_AGENT_ORIGINAL] = userAgent2; - } - const hookAttributes = (0, instrumentation_1.safeExecuteInTheMiddle)(() => config2.startSpanHook?.(request), (e) => e && this._diag.error("caught startSpanHook error: ", e), true); - if (hookAttributes) { - Object.entries(hookAttributes).forEach(([key, val]) => { - attributes[key] = val; - }); - } - const activeCtx = api_1.context.active(); - const currentSpan = api_1.trace.getSpan(activeCtx); - let span; - if (config2.requireParentforSpans && (!currentSpan || !api_1.trace.isSpanContextValid(currentSpan.spanContext()))) { - span = api_1.trace.wrapSpanContext(api_1.INVALID_SPAN_CONTEXT); - } else { - span = this.tracer.startSpan(requestMethod === "_OTHER" ? "HTTP" : requestMethod, { - kind: api_1.SpanKind.CLIENT, - attributes - }, activeCtx); - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => config2.requestHook?.(span, request), (e) => e && this._diag.error("caught requestHook error: ", e), true); - const requestContext = api_1.trace.setSpan(api_1.context.active(), span); - const addedHeaders = {}; - api_1.propagation.inject(requestContext, addedHeaders); - const headerEntries = Object.entries(addedHeaders); - for (let i = 0;i < headerEntries.length; i++) { - const [k, v] = headerEntries[i]; - if (typeof request.addHeader === "function") { - request.addHeader(k, v); - } else if (typeof request.headers === "string") { - request.headers += `${k}: ${v}\r -`; - } else if (Array.isArray(request.headers)) { - request.headers.push(k, v); - } - } - this._recordFromReq.set(request, { span, attributes, startTime }); - } - onRequestHeaders({ request, socket }) { - const record3 = this._recordFromReq.get(request); - if (!record3) { - return; - } - const config2 = this.getConfig(); - const { span } = record3; - const { remoteAddress, remotePort } = socket; - const spanAttributes = { - [semantic_conventions_1.ATTR_NETWORK_PEER_ADDRESS]: remoteAddress, - [semantic_conventions_1.ATTR_NETWORK_PEER_PORT]: remotePort - }; - if (config2.headersToSpanAttributes?.requestHeaders) { - const headersToAttribs = new Set(config2.headersToSpanAttributes.requestHeaders.map((n) => n.toLowerCase())); - const headersMap = this.parseRequestHeaders(request); - for (const [name, value] of headersMap.entries()) { - if (headersToAttribs.has(name)) { - const attrValue = Array.isArray(value) ? value.join(", ") : value; - spanAttributes[`http.request.header.${name}`] = attrValue; - } - } - } - span.setAttributes(spanAttributes); - } - onResponseHeaders({ request, response }) { - const record3 = this._recordFromReq.get(request); - if (!record3) { - return; - } - const { span, attributes } = record3; - const spanAttributes = { - [semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE]: response.statusCode - }; - const config2 = this.getConfig(); - (0, instrumentation_1.safeExecuteInTheMiddle)(() => config2.responseHook?.(span, { request, response }), (e) => e && this._diag.error("caught responseHook error: ", e), true); - const headersToAttribs = new Set; - if (config2.headersToSpanAttributes?.responseHeaders) { - config2.headersToSpanAttributes?.responseHeaders.forEach((name) => headersToAttribs.add(name.toLowerCase())); - } - for (let idx = 0;idx < response.headers.length; idx = idx + 2) { - const name = response.headers[idx].toString().toLowerCase(); - const value = response.headers[idx + 1]; - if (headersToAttribs.has(name)) { - spanAttributes[`http.response.header.${name}`] = value.toString(); - } - if (name === "content-length") { - const contentLength = Number(value.toString()); - if (!isNaN(contentLength)) { - spanAttributes["http.response.header.content-length"] = contentLength; - } - } - } - span.setAttributes(spanAttributes); - span.setStatus({ - code: response.statusCode >= 400 ? api_1.SpanStatusCode.ERROR : api_1.SpanStatusCode.UNSET - }); - record3.attributes = Object.assign(attributes, spanAttributes); - } - onDone({ request }) { - const record3 = this._recordFromReq.get(request); - if (!record3) { - return; - } - const { span, attributes, startTime } = record3; - span.end(); - this._recordFromReq.delete(request); - this.recordRequestDuration(attributes, startTime); - } - onError({ request, error: error48 }) { - const record3 = this._recordFromReq.get(request); - if (!record3) { - return; - } - const { span, attributes, startTime } = record3; - span.recordException(error48); - span.setStatus({ - code: api_1.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - this._recordFromReq.delete(request); - attributes[semantic_conventions_1.ATTR_ERROR_TYPE] = error48.message; - this.recordRequestDuration(attributes, startTime); - } - recordRequestDuration(attributes, startTime) { - const metricsAttributes = {}; - const keysToCopy = [ - semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, - semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD, - semantic_conventions_1.ATTR_SERVER_ADDRESS, - semantic_conventions_1.ATTR_SERVER_PORT, - semantic_conventions_1.ATTR_URL_SCHEME, - semantic_conventions_1.ATTR_ERROR_TYPE - ]; - keysToCopy.forEach((key) => { - if (key in attributes) { - metricsAttributes[key] = attributes[key]; - } - }); - const durationSeconds = (0, core_1.hrTimeToMilliseconds)((0, core_1.hrTimeDuration)(startTime, (0, core_1.hrTime)())) / 1000; - this._httpClientDurationHistogram.record(durationSeconds, metricsAttributes); - } - getRequestMethod(original) { - const knownMethods = { - CONNECT: true, - OPTIONS: true, - HEAD: true, - GET: true, - POST: true, - PUT: true, - PATCH: true, - DELETE: true, - TRACE: true - }; - if (original.toUpperCase() in knownMethods) { - return original.toUpperCase(); - } - return "_OTHER"; - } - } - exports.UndiciInstrumentation = UndiciInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-undici@0.18.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-undici/build/src/index.js -var require_src51 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.UndiciInstrumentation = undefined; - var undici_1 = require_undici(); - Object.defineProperty(exports, "UndiciInstrumentation", { enumerable: true, get: function() { - return undici_1.UndiciInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-winston@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-winston/build/src/version.js -var require_version44 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.52.0"; - exports.PACKAGE_NAME = "@opentelemetry/instrumentation-winston"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-winston@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-winston/build/src/instrumentation.js -var require_instrumentation38 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.WinstonInstrumentation = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src6(); - var instrumentation_1 = require_src9(); - var version_1 = require_version44(); - var winston3Versions = [">=3 <4"]; - var winstonPre3Versions = [">=1 <3"]; - - class WinstonInstrumentation extends instrumentation_1.InstrumentationBase { - constructor(config2 = {}) { - super(version_1.PACKAGE_NAME, version_1.PACKAGE_VERSION, config2); - } - init() { - const winstons3instrumentationNodeModuleDefinition = new instrumentation_1.InstrumentationNodeModuleDefinition("winston", winston3Versions, (moduleExports) => moduleExports, () => {}, [ - new instrumentation_1.InstrumentationNodeModuleFile("winston/lib/winston/logger.js", winston3Versions, (logger) => { - if ((0, instrumentation_1.isWrapped)(logger.prototype["write"])) { - this._unwrap(logger.prototype, "write"); - } - this._wrap(logger.prototype, "write", this._getPatchedWrite()); - if ((0, instrumentation_1.isWrapped)(logger.prototype["configure"])) { - this._unwrap(logger.prototype, "configure"); - } - this._wrap(logger.prototype, "configure", this._getPatchedConfigure()); - return logger; - }, (logger) => { - if (logger === undefined) - return; - this._unwrap(logger.prototype, "write"); - this._unwrap(logger.prototype, "configure"); - }) - ]); - const winstons2instrumentationNodeModuleDefinition = new instrumentation_1.InstrumentationNodeModuleDefinition("winston", winstonPre3Versions, (moduleExports) => moduleExports, () => {}, [ - new instrumentation_1.InstrumentationNodeModuleFile("winston/lib/winston/logger.js", winstonPre3Versions, (fileExports) => { - const proto = fileExports.Logger.prototype; - if ((0, instrumentation_1.isWrapped)(proto.log)) { - this._unwrap(proto, "log"); - } - this._wrap(proto, "log", this._getPatchedLog()); - return fileExports; - }, (fileExports) => { - if (fileExports === undefined) - return; - this._unwrap(fileExports.Logger.prototype, "log"); - }) - ]); - return [ - winstons3instrumentationNodeModuleDefinition, - winstons2instrumentationNodeModuleDefinition - ]; - } - _callHook(span, record3) { - const { logHook } = this.getConfig(); - if (!logHook) { - return; - } - (0, instrumentation_1.safeExecuteInTheMiddle)(() => logHook(span, record3), (err) => { - if (err) { - this._diag.error("error calling logHook", err); - } - }, true); - } - _getPatchedWrite() { - return (original) => { - const instrumentation = this; - return function patchedWrite(...args) { - const record3 = args[0]; - instrumentation._handleLogCorrelation(record3); - return original.apply(this, args); - }; - }; - } - _getPatchedLog() { - return (original) => { - const instrumentation = this; - return function patchedLog(...args) { - const record3 = {}; - instrumentation._handleLogCorrelation(record3); - let isDataInjected = false; - for (let i = args.length - 1;i >= 0; i--) { - if (typeof args[i] === "object") { - args[i] = Object.assign(args[i], record3); - isDataInjected = true; - break; - } - } - if (!isDataInjected) { - const insertAt = typeof args[args.length - 1] === "function" ? args.length - 1 : args.length; - args.splice(insertAt, 0, record3); - } - return original.apply(this, args); - }; - }; - } - _getPatchedConfigure() { - return (original) => { - const instrumentation = this; - return function patchedConfigure(...args) { - const config2 = instrumentation.getConfig(); - if (!config2.disableLogSending) { - if (args && args.length > 0) { - try { - const { OpenTelemetryTransportV3 } = (()=>{throw new Error("Cannot require module "+"@opentelemetry/winston-transport");})(); - const originalTransports = args[0].transports; - let newTransports = Array.isArray(originalTransports) ? originalTransports : []; - let transportOptions = {}; - if (config2.logSeverity) { - const winstonLevel = instrumentation._winstonLevelFromSeverity(config2.logSeverity, args[0].levels); - transportOptions = { level: winstonLevel }; - } - const openTelemetryTransport = new OpenTelemetryTransportV3(transportOptions); - if (originalTransports && !Array.isArray(originalTransports)) { - newTransports = [originalTransports]; - } - newTransports.push(openTelemetryTransport); - args[0].transports = newTransports; - } catch (err) { - instrumentation._diag.warn("@opentelemetry/winston-transport is not available, log records will not be automatically sent."); - } - } - } - return original.apply(this, args); - }; - }; - } - _handleLogCorrelation(record3) { - if (!this.getConfig().disableLogCorrelation) { - const span = api_1.trace.getSpan(api_1.context.active()); - if (span) { - const spanContext = span.spanContext(); - if ((0, api_1.isSpanContextValid)(spanContext)) { - const fields = { - trace_id: spanContext.traceId, - span_id: spanContext.spanId, - trace_flags: `0${spanContext.traceFlags.toString(16)}` - }; - const enhancedRecord = Object.assign(record3, fields); - this._callHook(span, enhancedRecord); - return enhancedRecord; - } - } - } - return record3; - } - _winstonLevelFromSeverity(severity, winstonLevels) { - if (winstonLevels) { - if (isNpmLevels(winstonLevels)) { - if (severity >= api_logs_1.SeverityNumber.ERROR) { - return "error"; - } else if (severity >= api_logs_1.SeverityNumber.WARN) { - return "warn"; - } else if (severity >= api_logs_1.SeverityNumber.INFO) { - return "info"; - } else if (severity >= api_logs_1.SeverityNumber.DEBUG3) { - return "http"; - } else if (severity >= api_logs_1.SeverityNumber.DEBUG2) { - return "verbose"; - } else if (severity >= api_logs_1.SeverityNumber.DEBUG) { - return "debug"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE) { - return "silly"; - } - } else if (isCliLevels(winstonLevels)) { - if (severity >= api_logs_1.SeverityNumber.ERROR) { - return "error"; - } else if (severity >= api_logs_1.SeverityNumber.WARN) { - return "warn"; - } else if (severity >= api_logs_1.SeverityNumber.INFO3) { - return "help"; - } else if (severity >= api_logs_1.SeverityNumber.INFO2) { - return "data"; - } else if (severity >= api_logs_1.SeverityNumber.INFO) { - return "info"; - } else if (severity >= api_logs_1.SeverityNumber.DEBUG) { - return "debug"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE4) { - return "prompt"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE3) { - return "verbose"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE2) { - return "input"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE) { - return "silly"; - } - } else if (isSyslogLevels(winstonLevels)) { - if (severity >= api_logs_1.SeverityNumber.FATAL2) { - return "emerg"; - } else if (severity >= api_logs_1.SeverityNumber.FATAL) { - return "alert"; - } else if (severity >= api_logs_1.SeverityNumber.ERROR2) { - return "crit"; - } else if (severity >= api_logs_1.SeverityNumber.ERROR) { - return "error"; - } else if (severity >= api_logs_1.SeverityNumber.WARN) { - return "warning"; - } else if (severity >= api_logs_1.SeverityNumber.INFO2) { - return "notice"; - } else if (severity >= api_logs_1.SeverityNumber.INFO) { - return "info"; - } else if (severity >= api_logs_1.SeverityNumber.TRACE) { - return "debug"; - } - } - this._diag.warn("failed to configure severity with existing winston levels"); - } - function isCliLevels(arg) { - return arg && arg.error !== undefined && arg.warn && arg.help && arg.data && arg.info && arg.debug && arg.prompt && arg.verbose && arg.input && arg.silly; - } - function isNpmLevels(arg) { - return arg && arg.error !== undefined && arg.warn && arg.info && arg.http && arg.verbose && arg.debug && arg.silly; - } - function isSyslogLevels(arg) { - return arg && arg.emerg !== undefined && arg.alert && arg.crit && arg.error && arg.warning && arg.notice && arg.info && arg.debug; - } - return; - } - } - exports.WinstonInstrumentation = WinstonInstrumentation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation-winston@0.52.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation-winston/build/src/index.js -var require_src52 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.WinstonInstrumentation = undefined; - var instrumentation_1 = require_instrumentation38(); - Object.defineProperty(exports, "WinstonInstrumentation", { enumerable: true, get: function() { - return instrumentation_1.WinstonInstrumentation; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-alibaba-cloud@0.31.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-alibaba-cloud/build/src/semconv.js -var require_semconv28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CLOUD_PROVIDER_VALUE_ALIBABA_CLOUD = exports.CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_ECS = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_ID = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_PLATFORM = exports.ATTR_CLOUD_AVAILABILITY_ZONE = exports.ATTR_CLOUD_ACCOUNT_ID = undefined; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - exports.ATTR_CLOUD_PLATFORM = "cloud.platform"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_ECS = "alibaba_cloud_ecs"; - exports.CLOUD_PROVIDER_VALUE_ALIBABA_CLOUD = "alibaba_cloud"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-alibaba-cloud@0.31.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-alibaba-cloud/build/src/detectors/AlibabaCloudEcsDetector.js -var require_AlibabaCloudEcsDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.alibabaCloudEcsDetector = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semconv_1 = require_semconv28(); - var http2 = __require("http"); - - class AlibabaCloudEcsDetector { - ALIBABA_CLOUD_IDMS_ENDPOINT = "100.100.100.200"; - ALIBABA_CLOUD_INSTANCE_IDENTITY_DOCUMENT_PATH = "/latest/dynamic/instance-identity/document"; - ALIBABA_CLOUD_INSTANCE_HOST_DOCUMENT_PATH = "/latest/meta-data/hostname"; - MILLISECONDS_TIME_OUT = 1000; - detect() { - const dataPromise = api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this._gatherData()); - const attrNames = [ - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_PLATFORM, - semconv_1.ATTR_CLOUD_ACCOUNT_ID, - semconv_1.ATTR_CLOUD_REGION, - semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE, - semconv_1.ATTR_HOST_ID, - semconv_1.ATTR_HOST_TYPE, - semconv_1.ATTR_HOST_NAME - ]; - const attributes = {}; - attrNames.forEach((name) => { - attributes[name] = dataPromise.then((data) => data[name]); - }); - return { attributes }; - } - async _gatherData() { - try { - const { "owner-account-id": accountId, "instance-id": instanceId, "instance-type": instanceType, "region-id": region2, "zone-id": availabilityZone } = await this._fetchIdentity(); - const hostname3 = await this._fetchHost(); - return { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_ALIBABA_CLOUD, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_ECS, - [semconv_1.ATTR_CLOUD_ACCOUNT_ID]: accountId, - [semconv_1.ATTR_CLOUD_REGION]: region2, - [semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE]: availabilityZone, - [semconv_1.ATTR_HOST_ID]: instanceId, - [semconv_1.ATTR_HOST_TYPE]: instanceType, - [semconv_1.ATTR_HOST_NAME]: hostname3 - }; - } catch (err) { - api_1.diag.debug(`${this.constructor.name}: did not detect resource: ${err?.message}`); - return {}; - } - } - async _fetchIdentity() { - const options = { - host: this.ALIBABA_CLOUD_IDMS_ENDPOINT, - path: this.ALIBABA_CLOUD_INSTANCE_IDENTITY_DOCUMENT_PATH, - method: "GET", - timeout: this.MILLISECONDS_TIME_OUT - }; - const identity = await this._fetchString(options); - return JSON.parse(identity); - } - async _fetchHost() { - const options = { - host: this.ALIBABA_CLOUD_IDMS_ENDPOINT, - path: this.ALIBABA_CLOUD_INSTANCE_HOST_DOCUMENT_PATH, - method: "GET", - timeout: this.MILLISECONDS_TIME_OUT - }; - return await this._fetchString(options); - } - async _fetchString(options) { - return new Promise((resolve2, reject) => { - const timeoutId = setTimeout(() => { - req.destroy(new Error("ECS metadata api request timed out.")); - }, this.MILLISECONDS_TIME_OUT); - const req = http2.request(options, (res) => { - clearTimeout(timeoutId); - const { statusCode } = res; - if (typeof statusCode !== "number" || !(statusCode >= 200 && statusCode < 300)) { - res.destroy(); - return reject(new Error(`Failed to load page, status code: ${statusCode}`)); - } - res.setEncoding("utf8"); - let rawData = ""; - res.on("data", (chunk) => rawData += chunk); - res.on("error", (err) => { - reject(err); - }); - res.on("end", () => { - resolve2(rawData); - }); - }); - req.on("error", (err) => { - clearTimeout(timeoutId); - reject(err); - }); - req.end(); - }); - } - } - exports.alibabaCloudEcsDetector = new AlibabaCloudEcsDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-alibaba-cloud@0.31.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-alibaba-cloud/build/src/detectors/index.js -var require_detectors2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.alibabaCloudEcsDetector = undefined; - var AlibabaCloudEcsDetector_1 = require_AlibabaCloudEcsDetector(); - Object.defineProperty(exports, "alibabaCloudEcsDetector", { enumerable: true, get: function() { - return AlibabaCloudEcsDetector_1.alibabaCloudEcsDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-alibaba-cloud@0.31.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-alibaba-cloud/build/src/index.js -var require_src53 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.alibabaCloudEcsDetector = undefined; - var detectors_1 = require_detectors2(); - Object.defineProperty(exports, "alibabaCloudEcsDetector", { enumerable: true, get: function() { - return detectors_1.alibabaCloudEcsDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/semconv.js -var require_semconv29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CLOUD_PROVIDER_VALUE_AWS = exports.CLOUD_PLATFORM_VALUE_AWS_LAMBDA = exports.CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK = exports.CLOUD_PLATFORM_VALUE_AWS_EKS = exports.CLOUD_PLATFORM_VALUE_AWS_ECS = exports.CLOUD_PLATFORM_VALUE_AWS_EC2 = exports.ATTR_SERVICE_NAMESPACE = exports.ATTR_SERVICE_INSTANCE_ID = exports.ATTR_K8S_CLUSTER_NAME = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_ID = exports.ATTR_FAAS_VERSION = exports.ATTR_FAAS_MAX_MEMORY = exports.ATTR_FAAS_INSTANCE = exports.ATTR_FAAS_NAME = exports.ATTR_CONTAINER_NAME = exports.ATTR_CONTAINER_ID = exports.ATTR_CLOUD_RESOURCE_ID = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_PLATFORM = exports.ATTR_CLOUD_AVAILABILITY_ZONE = exports.ATTR_CLOUD_ACCOUNT_ID = exports.ATTR_AWS_LOG_STREAM_NAMES = exports.ATTR_AWS_LOG_STREAM_ARNS = exports.ATTR_AWS_LOG_GROUP_NAMES = exports.ATTR_AWS_LOG_GROUP_ARNS = exports.ATTR_AWS_ECS_TASK_REVISION = exports.ATTR_AWS_ECS_TASK_FAMILY = exports.ATTR_AWS_ECS_TASK_ARN = exports.ATTR_AWS_ECS_LAUNCHTYPE = exports.ATTR_AWS_ECS_CONTAINER_ARN = exports.ATTR_AWS_ECS_CLUSTER_ARN = undefined; - exports.ATTR_AWS_ECS_CLUSTER_ARN = "aws.ecs.cluster.arn"; - exports.ATTR_AWS_ECS_CONTAINER_ARN = "aws.ecs.container.arn"; - exports.ATTR_AWS_ECS_LAUNCHTYPE = "aws.ecs.launchtype"; - exports.ATTR_AWS_ECS_TASK_ARN = "aws.ecs.task.arn"; - exports.ATTR_AWS_ECS_TASK_FAMILY = "aws.ecs.task.family"; - exports.ATTR_AWS_ECS_TASK_REVISION = "aws.ecs.task.revision"; - exports.ATTR_AWS_LOG_GROUP_ARNS = "aws.log.group.arns"; - exports.ATTR_AWS_LOG_GROUP_NAMES = "aws.log.group.names"; - exports.ATTR_AWS_LOG_STREAM_ARNS = "aws.log.stream.arns"; - exports.ATTR_AWS_LOG_STREAM_NAMES = "aws.log.stream.names"; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - exports.ATTR_CLOUD_PLATFORM = "cloud.platform"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_CLOUD_RESOURCE_ID = "cloud.resource_id"; - exports.ATTR_CONTAINER_ID = "container.id"; - exports.ATTR_CONTAINER_NAME = "container.name"; - exports.ATTR_FAAS_NAME = "faas.name"; - exports.ATTR_FAAS_INSTANCE = "faas.instance"; - exports.ATTR_FAAS_MAX_MEMORY = "faas.max_memory"; - exports.ATTR_FAAS_VERSION = "faas.version"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.ATTR_K8S_CLUSTER_NAME = "k8s.cluster.name"; - exports.ATTR_SERVICE_INSTANCE_ID = "service.instance.id"; - exports.ATTR_SERVICE_NAMESPACE = "service.namespace"; - exports.CLOUD_PLATFORM_VALUE_AWS_EC2 = "aws_ec2"; - exports.CLOUD_PLATFORM_VALUE_AWS_ECS = "aws_ecs"; - exports.CLOUD_PLATFORM_VALUE_AWS_EKS = "aws_eks"; - exports.CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK = "aws_elastic_beanstalk"; - exports.CLOUD_PLATFORM_VALUE_AWS_LAMBDA = "aws_lambda"; - exports.CLOUD_PROVIDER_VALUE_AWS = "aws"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/detectors/AwsBeanstalkDetector.js -var require_AwsBeanstalkDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsBeanstalkDetector = exports.AwsBeanstalkDetector = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv29(); - var fs = __require("fs"); - var util3 = __require("util"); - var DEFAULT_BEANSTALK_CONF_PATH = "/var/elasticbeanstalk/xray/environment.conf"; - var WIN_OS_BEANSTALK_CONF_PATH = "C:\\Program Files\\Amazon\\XRay\\environment.conf"; - - class AwsBeanstalkDetector { - BEANSTALK_CONF_PATH; - static readFileAsync = util3.promisify(fs.readFile); - static fileAccessAsync = util3.promisify(fs.access); - constructor() { - if (process.platform === "win32") { - this.BEANSTALK_CONF_PATH = WIN_OS_BEANSTALK_CONF_PATH; - } else { - this.BEANSTALK_CONF_PATH = DEFAULT_BEANSTALK_CONF_PATH; - } - } - detect() { - const dataPromise = api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this._gatherData()); - const attrNames = [ - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_PLATFORM, - semantic_conventions_1.ATTR_SERVICE_NAME, - semconv_1.ATTR_SERVICE_NAMESPACE, - semantic_conventions_1.ATTR_SERVICE_VERSION, - semconv_1.ATTR_SERVICE_INSTANCE_ID - ]; - const attributes = {}; - attrNames.forEach((name) => { - attributes[name] = dataPromise.then((data) => data[name]); - }); - return { attributes }; - } - async _gatherData() { - try { - await AwsBeanstalkDetector.fileAccessAsync(this.BEANSTALK_CONF_PATH, fs.constants.R_OK); - const rawData = await AwsBeanstalkDetector.readFileAsync(this.BEANSTALK_CONF_PATH, "utf8"); - const parsedData = JSON.parse(rawData); - return { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AWS, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK, - [semantic_conventions_1.ATTR_SERVICE_NAME]: semconv_1.CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK, - [semconv_1.ATTR_SERVICE_NAMESPACE]: parsedData.environment_name, - [semantic_conventions_1.ATTR_SERVICE_VERSION]: parsedData.version_label, - [semconv_1.ATTR_SERVICE_INSTANCE_ID]: parsedData.deployment_id - }; - } catch (e) { - api_1.diag.debug(`AwsBeanstalkDetector: did not detect resource: ${e.message}`); - return {}; - } - } - } - exports.AwsBeanstalkDetector = AwsBeanstalkDetector; - exports.awsBeanstalkDetector = new AwsBeanstalkDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/detectors/AwsEc2Detector.js -var require_AwsEc2Detector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsEc2Detector = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semconv_1 = require_semconv29(); - var http2 = __require("http"); - - class AwsEc2Detector { - AWS_IDMS_ENDPOINT = "169.254.169.254"; - AWS_INSTANCE_TOKEN_DOCUMENT_PATH = "/latest/api/token"; - AWS_INSTANCE_IDENTITY_DOCUMENT_PATH = "/latest/dynamic/instance-identity/document"; - AWS_INSTANCE_HOST_DOCUMENT_PATH = "/latest/meta-data/hostname"; - AWS_METADATA_TTL_HEADER = "X-aws-ec2-metadata-token-ttl-seconds"; - AWS_METADATA_TOKEN_HEADER = "X-aws-ec2-metadata-token"; - MILLISECOND_TIME_OUT = 5000; - detect() { - const dataPromise = api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this._gatherData()); - const attrNames = [ - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_PLATFORM, - semconv_1.ATTR_CLOUD_ACCOUNT_ID, - semconv_1.ATTR_CLOUD_REGION, - semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE, - semconv_1.ATTR_HOST_ID, - semconv_1.ATTR_HOST_TYPE, - semconv_1.ATTR_HOST_NAME - ]; - const attributes = {}; - attrNames.forEach((name) => { - attributes[name] = dataPromise.then((data) => data[name]); - }); - return { attributes }; - } - async _gatherData() { - try { - const token = await this._fetchToken(); - const { accountId, instanceId, instanceType, region: region2, availabilityZone } = await this._fetchIdentity(token); - const hostname3 = await this._fetchHost(token); - return { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AWS, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AWS_EC2, - [semconv_1.ATTR_CLOUD_ACCOUNT_ID]: accountId, - [semconv_1.ATTR_CLOUD_REGION]: region2, - [semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE]: availabilityZone, - [semconv_1.ATTR_HOST_ID]: instanceId, - [semconv_1.ATTR_HOST_TYPE]: instanceType, - [semconv_1.ATTR_HOST_NAME]: hostname3 - }; - } catch { - return {}; - } - } - async _fetchToken() { - const options = { - host: this.AWS_IDMS_ENDPOINT, - path: this.AWS_INSTANCE_TOKEN_DOCUMENT_PATH, - method: "PUT", - timeout: this.MILLISECOND_TIME_OUT, - headers: { - [this.AWS_METADATA_TTL_HEADER]: "60" - } - }; - return await this._fetchString(options); - } - async _fetchIdentity(token) { - const options = { - host: this.AWS_IDMS_ENDPOINT, - path: this.AWS_INSTANCE_IDENTITY_DOCUMENT_PATH, - method: "GET", - timeout: this.MILLISECOND_TIME_OUT, - headers: { - [this.AWS_METADATA_TOKEN_HEADER]: token - } - }; - const identity = await this._fetchString(options); - return JSON.parse(identity); - } - async _fetchHost(token) { - const options = { - host: this.AWS_IDMS_ENDPOINT, - path: this.AWS_INSTANCE_HOST_DOCUMENT_PATH, - method: "GET", - timeout: this.MILLISECOND_TIME_OUT, - headers: { - [this.AWS_METADATA_TOKEN_HEADER]: token - } - }; - return await this._fetchString(options); - } - async _fetchString(options) { - return new Promise((resolve2, reject) => { - const timeoutId = setTimeout(() => { - req.abort(); - reject(new Error("EC2 metadata api request timed out.")); - }, this.MILLISECOND_TIME_OUT); - const req = http2.request(options, (res) => { - clearTimeout(timeoutId); - const { statusCode } = res; - res.setEncoding("utf8"); - let rawData = ""; - res.on("data", (chunk) => rawData += chunk); - res.on("end", () => { - if (statusCode && statusCode >= 200 && statusCode < 300) { - try { - resolve2(rawData); - } catch (e) { - reject(e); - } - } else { - reject(new Error("Failed to load page, status code: " + statusCode)); - } - }); - }); - req.on("error", (err) => { - clearTimeout(timeoutId); - reject(err); - }); - req.end(); - }); - } - } - exports.awsEc2Detector = new AwsEc2Detector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/detectors/AwsEcsDetector.js -var require_AwsEcsDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsEcsDetector = exports.AwsEcsDetector = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semconv_1 = require_semconv29(); - var http2 = __require("http"); - var util3 = __require("util"); - var fs = __require("fs"); - var os = __require("os"); - var HTTP_TIMEOUT_IN_MS = 1000; - - class AwsEcsDetector { - static CONTAINER_ID_LENGTH = 64; - static CONTAINER_ID_LENGTH_MIN = 32; - static DEFAULT_CGROUP_PATH = "/proc/self/cgroup"; - static readFileAsync = util3.promisify(fs.readFile); - detect() { - const attributes = api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this._getAttributes()); - return { attributes }; - } - _getAttributes() { - if (!process.env.ECS_CONTAINER_METADATA_URI_V4 && !process.env.ECS_CONTAINER_METADATA_URI) { - api_1.diag.debug("AwsEcsDetector: Process is not on ECS"); - return {}; - } - const dataPromise = this._gatherData(); - const attrNames = [ - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_PLATFORM, - semconv_1.ATTR_CONTAINER_NAME, - semconv_1.ATTR_CONTAINER_ID, - semconv_1.ATTR_AWS_ECS_CONTAINER_ARN, - semconv_1.ATTR_AWS_ECS_CLUSTER_ARN, - semconv_1.ATTR_AWS_ECS_LAUNCHTYPE, - semconv_1.ATTR_AWS_ECS_TASK_ARN, - semconv_1.ATTR_AWS_ECS_TASK_FAMILY, - semconv_1.ATTR_AWS_ECS_TASK_REVISION, - semconv_1.ATTR_CLOUD_ACCOUNT_ID, - semconv_1.ATTR_CLOUD_REGION, - semconv_1.ATTR_CLOUD_RESOURCE_ID, - semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE, - semconv_1.ATTR_AWS_LOG_GROUP_NAMES, - semconv_1.ATTR_AWS_LOG_GROUP_ARNS, - semconv_1.ATTR_AWS_LOG_STREAM_NAMES, - semconv_1.ATTR_AWS_LOG_STREAM_ARNS - ]; - const attributes = {}; - attrNames.forEach((name) => { - attributes[name] = dataPromise.then((data) => data[name]); - }); - return attributes; - } - async _gatherData() { - try { - const data = { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AWS, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AWS_ECS, - [semconv_1.ATTR_CONTAINER_NAME]: os.hostname(), - [semconv_1.ATTR_CONTAINER_ID]: await this._getContainerId() - }; - const metadataUrl = process.env.ECS_CONTAINER_METADATA_URI_V4; - if (metadataUrl) { - const [containerMetadata, taskMetadata] = await Promise.all([ - AwsEcsDetector._getUrlAsJson(metadataUrl), - AwsEcsDetector._getUrlAsJson(`${metadataUrl}/task`) - ]); - AwsEcsDetector._addMetadataV4Attrs(data, containerMetadata, taskMetadata); - AwsEcsDetector._addLogAttrs(data, containerMetadata); - } - return data; - } catch { - return {}; - } - } - async _getContainerId() { - try { - const rawData = await AwsEcsDetector.readFileAsync(AwsEcsDetector.DEFAULT_CGROUP_PATH, "utf8"); - const lines = rawData.split(` -`).map((s2) => s2.trim()).filter(Boolean); - for (const line of lines) { - const id = this._extractPrimaryEcsContainerId(line); - if (id) - return id; - } - for (const line of lines) { - const id = this._extractLastSegmentContainerId(line); - if (id) - return id; - } - for (const line of lines) { - const id = this._extractLegacyContainerId(line); - if (id) - return id; - } - } catch (e) { - api_1.diag.debug("AwsEcsDetector failed to read container ID", e); - } - return; - } - _extractPrimaryEcsContainerId(line) { - const ecsPattern = /\/ecs\/[a-fA-F0-9-]+\/([a-fA-F0-9-]+)$/; - const match2 = line.match(ecsPattern); - if (match2 && match2[1] && match2[1].length >= AwsEcsDetector.CONTAINER_ID_LENGTH_MIN && match2[1].length <= AwsEcsDetector.CONTAINER_ID_LENGTH) { - return match2[1]; - } - return; - } - _extractLastSegmentContainerId(line) { - const parts = line.split("/"); - if (parts.length <= 1) - return; - const last = parts[parts.length - 1]; - if (last && last.length >= AwsEcsDetector.CONTAINER_ID_LENGTH_MIN && last.length <= AwsEcsDetector.CONTAINER_ID_LENGTH && /^[a-fA-F0-9-]+$/.test(last)) { - return last; - } - return; - } - _extractLegacyContainerId(line) { - if (line.length > AwsEcsDetector.CONTAINER_ID_LENGTH) { - return line.substring(line.length - AwsEcsDetector.CONTAINER_ID_LENGTH); - } - return; - } - static _addMetadataV4Attrs(data, containerMetadata, taskMetadata) { - const launchType = taskMetadata["LaunchType"]; - const taskArn = taskMetadata["TaskARN"]; - const baseArn = taskArn.substring(0, taskArn.lastIndexOf(":")); - const cluster = taskMetadata["Cluster"]; - const accountId = AwsEcsDetector._getAccountFromArn(taskArn); - const region2 = AwsEcsDetector._getRegionFromArn(taskArn); - const availabilityZone = taskMetadata?.AvailabilityZone; - const clusterArn = cluster.startsWith("arn:") ? cluster : `${baseArn}:cluster/${cluster}`; - const containerArn = containerMetadata["ContainerARN"]; - data[semconv_1.ATTR_AWS_ECS_CONTAINER_ARN] = containerArn; - data[semconv_1.ATTR_AWS_ECS_CLUSTER_ARN] = clusterArn; - data[semconv_1.ATTR_AWS_ECS_LAUNCHTYPE] = launchType?.toLowerCase(); - data[semconv_1.ATTR_AWS_ECS_TASK_ARN] = taskArn; - data[semconv_1.ATTR_AWS_ECS_TASK_FAMILY] = taskMetadata["Family"]; - data[semconv_1.ATTR_AWS_ECS_TASK_REVISION] = taskMetadata["Revision"]; - data[semconv_1.ATTR_CLOUD_ACCOUNT_ID] = accountId; - data[semconv_1.ATTR_CLOUD_REGION] = region2; - data[semconv_1.ATTR_CLOUD_RESOURCE_ID] = containerArn; - if (availabilityZone) { - data[semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE] = availabilityZone; - } - } - static _addLogAttrs(data, containerMetadata) { - if (containerMetadata["LogDriver"] !== "awslogs" || !containerMetadata["LogOptions"]) { - return; - } - const containerArn = containerMetadata["ContainerARN"]; - const logOptions = containerMetadata["LogOptions"]; - const logsRegion = logOptions["awslogs-region"] || AwsEcsDetector._getRegionFromArn(containerArn); - const awsAccount = AwsEcsDetector._getAccountFromArn(containerArn); - const logsGroupName = logOptions["awslogs-group"]; - const logsGroupArn = `arn:aws:logs:${logsRegion}:${awsAccount}:log-group:${logsGroupName}`; - const logsStreamName = logOptions["awslogs-stream"]; - const logsStreamArn = `arn:aws:logs:${logsRegion}:${awsAccount}:log-group:${logsGroupName}:log-stream:${logsStreamName}`; - data[semconv_1.ATTR_AWS_LOG_GROUP_NAMES] = [logsGroupName]; - data[semconv_1.ATTR_AWS_LOG_GROUP_ARNS] = [logsGroupArn]; - data[semconv_1.ATTR_AWS_LOG_STREAM_NAMES] = [logsStreamName]; - data[semconv_1.ATTR_AWS_LOG_STREAM_ARNS] = [logsStreamArn]; - } - static _getAccountFromArn(containerArn) { - const match2 = /arn:aws:ecs:[^:]+:([^:]+):.*/.exec(containerArn); - return match2[1]; - } - static _getRegionFromArn(containerArn) { - const match2 = /arn:aws:ecs:([^:]+):.*/.exec(containerArn); - return match2[1]; - } - static _getUrlAsJson(url2) { - return new Promise((resolve2, reject) => { - const request = http2.get(url2, (response) => { - if (response.statusCode && response.statusCode >= 400) { - reject(new Error(`Request to '${url2}' failed with status ${response.statusCode}`)); - } - let responseBody = ""; - response.on("data", (chunk) => responseBody += chunk.toString()); - response.on("end", () => resolve2(responseBody)); - request.on("error", reject); - }); - request.setTimeout(HTTP_TIMEOUT_IN_MS, () => { - request.destroy(); - }); - request.on("error", reject); - request.end(); - }).then((responseBodyRaw) => JSON.parse(responseBodyRaw)); - } - } - exports.AwsEcsDetector = AwsEcsDetector; - exports.awsEcsDetector = new AwsEcsDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/detectors/AwsEksDetector.js -var require_AwsEksDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsEksDetector = exports.AwsEksDetector = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semconv_1 = require_semconv29(); - var https = __require("https"); - var fs = __require("fs"); - var util3 = __require("util"); - var api_2 = require_src(); - - class AwsEksDetector { - K8S_SVC_URL = "kubernetes.default.svc"; - K8S_TOKEN_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/token"; - K8S_CERT_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"; - AUTH_CONFIGMAP_PATH = "/api/v1/namespaces/kube-system/configmaps/aws-auth"; - CW_CONFIGMAP_PATH = "/api/v1/namespaces/amazon-cloudwatch/configmaps/cluster-info"; - CONTAINER_ID_LENGTH = 64; - DEFAULT_CGROUP_PATH = "/proc/self/cgroup"; - TIMEOUT_MS = 2000; - UTF8_UNICODE = "utf8"; - static readFileAsync = util3.promisify(fs.readFile); - static fileAccessAsync = util3.promisify(fs.access); - detect() { - const dataPromise = api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this._gatherData()); - const attrNames = [ - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_PLATFORM, - semconv_1.ATTR_K8S_CLUSTER_NAME, - semconv_1.ATTR_CONTAINER_ID - ]; - const attributes = {}; - attrNames.forEach((name) => { - attributes[name] = dataPromise.then((data) => data[name]); - }); - return { attributes }; - } - async _gatherData() { - try { - await AwsEksDetector.fileAccessAsync(this.K8S_TOKEN_PATH); - const k8scert = await AwsEksDetector.readFileAsync(this.K8S_CERT_PATH); - if (!await this._isEks(k8scert)) { - return {}; - } - const containerId = await this._getContainerId(); - const clusterName = await this._getClusterName(k8scert); - return !containerId && !clusterName ? {} : { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AWS, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AWS_EKS, - [semconv_1.ATTR_K8S_CLUSTER_NAME]: clusterName || "", - [semconv_1.ATTR_CONTAINER_ID]: containerId || "" - }; - } catch (e) { - api_2.diag.debug("AwsEksDetector: Process is not running on K8S:", e.message); - return {}; - } - } - async _isEks(cert) { - const options = { - ca: cert, - headers: { - Authorization: await this._getK8sCredHeader() - }, - hostname: this.K8S_SVC_URL, - method: "GET", - path: this.AUTH_CONFIGMAP_PATH, - timeout: this.TIMEOUT_MS - }; - return !!await this._fetchString(options); - } - async _getClusterName(cert) { - const options = { - ca: cert, - headers: { - Authorization: await this._getK8sCredHeader() - }, - host: this.K8S_SVC_URL, - method: "GET", - path: this.CW_CONFIGMAP_PATH, - timeout: this.TIMEOUT_MS - }; - const response = await this._fetchString(options); - try { - return JSON.parse(response).data["cluster.name"]; - } catch (e) { - api_2.diag.debug("Cannot get cluster name on EKS", e); - } - return ""; - } - async _getK8sCredHeader() { - try { - const content = await AwsEksDetector.readFileAsync(this.K8S_TOKEN_PATH, this.UTF8_UNICODE); - return "Bearer " + content; - } catch (e) { - api_2.diag.debug("Unable to read Kubernetes client token.", e); - } - return ""; - } - async _getContainerId() { - try { - const rawData = await AwsEksDetector.readFileAsync(this.DEFAULT_CGROUP_PATH, this.UTF8_UNICODE); - const splitData = rawData.trim().split(` -`); - for (const str of splitData) { - if (str.length > this.CONTAINER_ID_LENGTH) { - return str.substring(str.length - this.CONTAINER_ID_LENGTH); - } - } - } catch (e) { - api_2.diag.debug(`AwsEksDetector failed to read container ID: ${e.message}`); - } - return; - } - async _fetchString(options) { - return await new Promise((resolve2, reject) => { - const timeoutId = setTimeout(() => { - req.abort(); - reject(new Error("EKS metadata api request timed out.")); - }, 2000); - const req = https.request(options, (res) => { - clearTimeout(timeoutId); - const { statusCode } = res; - res.setEncoding(this.UTF8_UNICODE); - let rawData = ""; - res.on("data", (chunk) => rawData += chunk); - res.on("end", () => { - if (statusCode && statusCode >= 200 && statusCode < 300) { - try { - resolve2(rawData); - } catch (e) { - reject(e); - } - } else { - reject(new Error("Failed to load page, status code: " + statusCode)); - } - }); - }); - req.on("error", (err) => { - clearTimeout(timeoutId); - reject(err); - }); - req.end(); - }); - } - } - exports.AwsEksDetector = AwsEksDetector; - exports.awsEksDetector = new AwsEksDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/detectors/AwsLambdaDetector.js -var require_AwsLambdaDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsLambdaDetector = exports.AwsLambdaDetector = undefined; - var semconv_1 = require_semconv29(); - - class AwsLambdaDetector { - detect() { - const executionEnv = process.env.AWS_EXECUTION_ENV; - if (!executionEnv?.startsWith("AWS_Lambda_")) { - return {}; - } - const region2 = process.env.AWS_REGION; - const functionName = process.env.AWS_LAMBDA_FUNCTION_NAME; - const functionVersion = process.env.AWS_LAMBDA_FUNCTION_VERSION; - const memorySize = process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE; - const logGroupName = process.env.AWS_LAMBDA_LOG_GROUP_NAME; - const logStreamName = process.env.AWS_LAMBDA_LOG_STREAM_NAME; - const attributes = { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AWS, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AWS_LAMBDA, - [semconv_1.ATTR_CLOUD_REGION]: region2, - [semconv_1.ATTR_FAAS_NAME]: functionName, - [semconv_1.ATTR_FAAS_VERSION]: functionVersion, - [semconv_1.ATTR_FAAS_MAX_MEMORY]: parseInt(memorySize) * 1024 * 1024 - }; - if (logGroupName) { - attributes[semconv_1.ATTR_AWS_LOG_GROUP_NAMES] = [logGroupName]; - } - if (logStreamName) { - attributes[semconv_1.ATTR_FAAS_INSTANCE] = logStreamName; - } - return { attributes }; - } - } - exports.AwsLambdaDetector = AwsLambdaDetector; - exports.awsLambdaDetector = new AwsLambdaDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/detectors/index.js -var require_detectors3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsLambdaDetector = exports.awsEksDetector = exports.awsEcsDetector = exports.awsEc2Detector = exports.awsBeanstalkDetector = undefined; - var AwsBeanstalkDetector_1 = require_AwsBeanstalkDetector(); - Object.defineProperty(exports, "awsBeanstalkDetector", { enumerable: true, get: function() { - return AwsBeanstalkDetector_1.awsBeanstalkDetector; - } }); - var AwsEc2Detector_1 = require_AwsEc2Detector(); - Object.defineProperty(exports, "awsEc2Detector", { enumerable: true, get: function() { - return AwsEc2Detector_1.awsEc2Detector; - } }); - var AwsEcsDetector_1 = require_AwsEcsDetector(); - Object.defineProperty(exports, "awsEcsDetector", { enumerable: true, get: function() { - return AwsEcsDetector_1.awsEcsDetector; - } }); - var AwsEksDetector_1 = require_AwsEksDetector(); - Object.defineProperty(exports, "awsEksDetector", { enumerable: true, get: function() { - return AwsEksDetector_1.awsEksDetector; - } }); - var AwsLambdaDetector_1 = require_AwsLambdaDetector(); - Object.defineProperty(exports, "awsLambdaDetector", { enumerable: true, get: function() { - return AwsLambdaDetector_1.awsLambdaDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-aws@2.9.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-aws/build/src/index.js -var require_src54 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.awsLambdaDetector = exports.awsEksDetector = exports.awsEcsDetector = exports.awsEc2Detector = exports.awsBeanstalkDetector = undefined; - var detectors_1 = require_detectors3(); - Object.defineProperty(exports, "awsBeanstalkDetector", { enumerable: true, get: function() { - return detectors_1.awsBeanstalkDetector; - } }); - Object.defineProperty(exports, "awsEc2Detector", { enumerable: true, get: function() { - return detectors_1.awsEc2Detector; - } }); - Object.defineProperty(exports, "awsEcsDetector", { enumerable: true, get: function() { - return detectors_1.awsEcsDetector; - } }); - Object.defineProperty(exports, "awsEksDetector", { enumerable: true, get: function() { - return detectors_1.awsEksDetector; - } }); - Object.defineProperty(exports, "awsLambdaDetector", { enumerable: true, get: function() { - return detectors_1.awsLambdaDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-container@0.7.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-container/build/src/detectors/utils.js -var require_utils36 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.extractContainerIdFromLine = exports.truncatePrefix = exports.HEX_STRING_REGEX = exports.DOCKER = exports.CRI_CONTAINERD = exports.CRIO = exports.MARKING_PREFIX = exports.HOSTNAME = exports.UTF8_UNICODE = exports.DEFAULT_CGROUP_V2_PATH = exports.DEFAULT_CGROUP_V1_PATH = exports.CONTAINER_ID_LENGTH = undefined; - exports.CONTAINER_ID_LENGTH = 64; - exports.DEFAULT_CGROUP_V1_PATH = "/proc/self/cgroup"; - exports.DEFAULT_CGROUP_V2_PATH = "/proc/self/mountinfo"; - exports.UTF8_UNICODE = "utf8"; - exports.HOSTNAME = "hostname"; - exports.MARKING_PREFIX = ["containers", "overlay-containers"]; - exports.CRIO = "crio-"; - exports.CRI_CONTAINERD = "cri-containerd-"; - exports.DOCKER = "docker-"; - exports.HEX_STRING_REGEX = /^[a-f0-9]+$/i; - function truncatePrefix(lastSection, prefix) { - return lastSection.substring(prefix.length); - } - exports.truncatePrefix = truncatePrefix; - function extractContainerIdFromLine(line) { - if (!line) { - return; - } - const sections = line.split("/"); - if (sections.length <= 1) { - return; - } - let lastSection = sections[sections.length - 1]; - const colonIndex = lastSection.lastIndexOf(":"); - if (colonIndex !== -1) { - lastSection = lastSection.substring(colonIndex + 1); - } - if (lastSection.startsWith(exports.CRIO)) { - lastSection = truncatePrefix(lastSection, exports.CRIO); - } else if (lastSection.startsWith(exports.DOCKER)) { - lastSection = truncatePrefix(lastSection, exports.DOCKER); - } else if (lastSection.startsWith(exports.CRI_CONTAINERD)) { - lastSection = truncatePrefix(lastSection, exports.CRI_CONTAINERD); - } - if (lastSection.includes(".")) { - lastSection = lastSection.split(".")[0]; - } - if (exports.HEX_STRING_REGEX.test(lastSection)) { - return lastSection; - } - return; - } - exports.extractContainerIdFromLine = extractContainerIdFromLine; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-container@0.7.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-container/build/src/semconv.js -var require_semconv30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_CONTAINER_ID = undefined; - exports.ATTR_CONTAINER_ID = "container.id"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-container@0.7.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-container/build/src/detectors/ContainerDetector.js -var require_ContainerDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.containerDetector = exports.ContainerDetector = undefined; - var fs = __require("fs"); - var util3 = __require("util"); - var api_1 = require_src(); - var core_1 = require_src7(); - var utils_1 = require_utils36(); - var semconv_1 = require_semconv30(); - - class ContainerDetector { - CONTAINER_ID_LENGTH = 64; - DEFAULT_CGROUP_V1_PATH = "/proc/self/cgroup"; - DEFAULT_CGROUP_V2_PATH = "/proc/self/mountinfo"; - UTF8_UNICODE = "utf8"; - HOSTNAME = "hostname"; - MARKING_PREFIX = ["containers", "overlay-containers"]; - CRIO = "crio-"; - CRI_CONTAINERD = "cri-containerd-"; - DOCKER = "docker-"; - HEX_STRING_REGEX = /^[a-f0-9]+$/i; - static readFileAsync = util3.promisify(fs.readFile); - detect() { - const attributes = { - [semconv_1.ATTR_CONTAINER_ID]: this._getContainerIdWithSuppressedTracing() - }; - return { attributes }; - } - async _getContainerIdWithSuppressedTracing() { - return api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this._getContainerId()); - } - async _getContainerIdV1() { - const rawData = await ContainerDetector.readFileAsync(this.DEFAULT_CGROUP_V1_PATH, this.UTF8_UNICODE); - const splitData = rawData.trim().split(` -`); - for (const line of splitData) { - const containerID = (0, utils_1.extractContainerIdFromLine)(line); - if (containerID) { - return containerID; - } - } - return; - } - async _getContainerIdV2() { - const rawData = await ContainerDetector.readFileAsync(this.DEFAULT_CGROUP_V2_PATH, this.UTF8_UNICODE); - const str = rawData.trim().split(` -`).find((s2) => s2.includes(this.HOSTNAME)); - if (!str) - return ""; - const strArray = str?.split("/") ?? []; - for (let i = 0;i < strArray.length - 1; i++) { - if (this.MARKING_PREFIX.includes(strArray[i]) && strArray[i + 1]?.length === this.CONTAINER_ID_LENGTH) { - return strArray[i + 1]; - } - } - return ""; - } - async _getContainerId() { - try { - const containerIdV1 = await this._getContainerIdV1(); - if (containerIdV1) { - return containerIdV1; - } - const containerIdV2 = await this._getContainerIdV2(); - if (containerIdV2) { - return containerIdV2; - } - } catch (e) { - if (e instanceof Error) { - const errorMessage = e.message; - api_1.diag.debug("Container Detector failed to read the Container ID: ", errorMessage); - } - } - return; - } - } - exports.ContainerDetector = ContainerDetector; - exports.containerDetector = new ContainerDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-container@0.7.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-container/build/src/detectors/index.js -var require_detectors4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.containerDetector = undefined; - var ContainerDetector_1 = require_ContainerDetector(); - Object.defineProperty(exports, "containerDetector", { enumerable: true, get: function() { - return ContainerDetector_1.containerDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-container@0.7.11+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-container/build/src/index.js -var require_src55 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.containerDetector = undefined; - var detectors_1 = require_detectors4(); - Object.defineProperty(exports, "containerDetector", { enumerable: true, get: function() { - return detectors_1.containerDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/semconv.js -var require_semconv31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CLOUD_PROVIDER_VALUE_GCP = exports.CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE = exports.CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE = exports.CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN = exports.CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS = exports.CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE = exports.ATTR_K8S_CLUSTER_NAME = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_ID = exports.ATTR_FAAS_VERSION = exports.ATTR_FAAS_NAME = exports.ATTR_FAAS_INSTANCE = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_PLATFORM = exports.ATTR_CLOUD_AVAILABILITY_ZONE = exports.ATTR_CLOUD_ACCOUNT_ID = undefined; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - exports.ATTR_CLOUD_PLATFORM = "cloud.platform"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_FAAS_INSTANCE = "faas.instance"; - exports.ATTR_FAAS_NAME = "faas.name"; - exports.ATTR_FAAS_VERSION = "faas.version"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.ATTR_K8S_CLUSTER_NAME = "k8s.cluster.name"; - exports.CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE = "gcp_app_engine"; - exports.CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS = "gcp_cloud_functions"; - exports.CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN = "gcp_cloud_run"; - exports.CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE = "gcp_compute_engine"; - exports.CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE = "gcp_kubernetes_engine"; - exports.CLOUD_PROVIDER_VALUE_GCP = "gcp"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/platform/node/default-service-name.js -var require_default_service_name2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - function defaultServiceName() { - return `unknown_service:${process.argv0}`; - } - exports.defaultServiceName = defaultServiceName; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/platform/node/index.js -var require_node8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - var default_service_name_1 = require_default_service_name2(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return default_service_name_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/platform/index.js -var require_platform7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - var node_1 = require_node8(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return node_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/utils.js -var require_utils37 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.identity = exports.isPromiseLike = undefined; - var isPromiseLike = (val) => { - return val !== null && typeof val === "object" && typeof val.then === "function"; - }; - exports.isPromiseLike = isPromiseLike; - function identity(_) { - return _; - } - exports.identity = identity; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/ResourceImpl.js -var require_ResourceImpl2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultResource = exports.emptyResource = exports.resourceFromDetectedResource = exports.resourceFromAttributes = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semantic_conventions_1 = require_src3(); - var platform_1 = require_platform7(); - var utils_1 = require_utils37(); - - class ResourceImpl { - _rawAttributes; - _asyncAttributesPending = false; - _schemaUrl; - _memoizedAttributes; - static FromAttributeList(attributes, options) { - const res = new ResourceImpl({}, options); - res._rawAttributes = guardedRawAttributes(attributes); - res._asyncAttributesPending = attributes.filter(([_, val]) => (0, utils_1.isPromiseLike)(val)).length > 0; - return res; - } - constructor(resource, options) { - const attributes = resource.attributes ?? {}; - this._rawAttributes = Object.entries(attributes).map(([k, v]) => { - if ((0, utils_1.isPromiseLike)(v)) { - this._asyncAttributesPending = true; - } - return [k, v]; - }); - this._rawAttributes = guardedRawAttributes(this._rawAttributes); - this._schemaUrl = validateSchemaUrl(options?.schemaUrl); - } - get asyncAttributesPending() { - return this._asyncAttributesPending; - } - async waitForAsyncAttributes() { - if (!this.asyncAttributesPending) { - return; - } - for (let i = 0;i < this._rawAttributes.length; i++) { - const [k, v] = this._rawAttributes[i]; - this._rawAttributes[i] = [k, (0, utils_1.isPromiseLike)(v) ? await v : v]; - } - this._asyncAttributesPending = false; - } - get attributes() { - if (this.asyncAttributesPending) { - api_1.diag.error("Accessing resource attributes before async attributes settled"); - } - if (this._memoizedAttributes) { - return this._memoizedAttributes; - } - const attrs = {}; - for (const [k, v] of this._rawAttributes) { - if ((0, utils_1.isPromiseLike)(v)) { - api_1.diag.debug(`Unsettled resource attribute ${k} skipped`); - continue; - } - if (v != null) { - attrs[k] ??= v; - } - } - if (!this._asyncAttributesPending) { - this._memoizedAttributes = attrs; - } - return attrs; - } - getRawAttributes() { - return this._rawAttributes; - } - get schemaUrl() { - return this._schemaUrl; - } - merge(resource) { - if (resource == null) - return this; - const mergedSchemaUrl = mergeSchemaUrl(this, resource); - const mergedOptions = mergedSchemaUrl ? { schemaUrl: mergedSchemaUrl } : undefined; - return ResourceImpl.FromAttributeList([...resource.getRawAttributes(), ...this.getRawAttributes()], mergedOptions); - } - } - function resourceFromAttributes(attributes, options) { - return ResourceImpl.FromAttributeList(Object.entries(attributes), options); - } - exports.resourceFromAttributes = resourceFromAttributes; - function resourceFromDetectedResource(detectedResource, options) { - return new ResourceImpl(detectedResource, options); - } - exports.resourceFromDetectedResource = resourceFromDetectedResource; - function emptyResource() { - return resourceFromAttributes({}); - } - exports.emptyResource = emptyResource; - function defaultResource() { - return resourceFromAttributes({ - [semantic_conventions_1.ATTR_SERVICE_NAME]: (0, platform_1.defaultServiceName)(), - [semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE], - [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME], - [semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION] - }); - } - exports.defaultResource = defaultResource; - function guardedRawAttributes(attributes) { - return attributes.map(([k, v]) => { - if ((0, utils_1.isPromiseLike)(v)) { - return [ - k, - v.catch((err) => { - api_1.diag.debug("promise rejection for resource attribute: %s - %s", k, err); - return; - }) - ]; - } - return [k, v]; - }); - } - function validateSchemaUrl(schemaUrl) { - if (typeof schemaUrl === "string" || schemaUrl === undefined) { - return schemaUrl; - } - api_1.diag.warn("Schema URL must be string or undefined, got %s. Schema URL will be ignored.", schemaUrl); - return; - } - function mergeSchemaUrl(old, updating) { - const oldSchemaUrl = old?.schemaUrl; - const updatingSchemaUrl = updating?.schemaUrl; - const isOldEmpty = oldSchemaUrl === undefined || oldSchemaUrl === ""; - const isUpdatingEmpty = updatingSchemaUrl === undefined || updatingSchemaUrl === ""; - if (isOldEmpty) { - return updatingSchemaUrl; - } - if (isUpdatingEmpty) { - return oldSchemaUrl; - } - if (oldSchemaUrl === updatingSchemaUrl) { - return oldSchemaUrl; - } - api_1.diag.warn('Schema URL merge conflict: old resource has "%s", updating resource has "%s". Resulting resource will have undefined Schema URL.', oldSchemaUrl, updatingSchemaUrl); - return; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detect-resources.js -var require_detect_resources2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.detectResources = undefined; - var api_1 = require_src(); - var ResourceImpl_1 = require_ResourceImpl2(); - var detectResources = (config2 = {}) => { - const resources3 = (config2.detectors || []).map((d) => { - try { - const resource = (0, ResourceImpl_1.resourceFromDetectedResource)(d.detect(config2)); - api_1.diag.debug(`${d.constructor.name} found resource.`, resource); - return resource; - } catch (e) { - api_1.diag.debug(`${d.constructor.name} failed: ${e.message}`); - return (0, ResourceImpl_1.emptyResource)(); - } - }); - return resources3.reduce((acc, resource) => acc.merge(resource), (0, ResourceImpl_1.emptyResource)()); - }; - exports.detectResources = detectResources; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/EnvDetector.js -var require_EnvDetector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.envDetector = undefined; - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var core_1 = require_src7(); - - class EnvDetector { - _MAX_LENGTH = 255; - _COMMA_SEPARATOR = ","; - _LABEL_KEY_VALUE_SPLITTER = "="; - _ERROR_MESSAGE_INVALID_CHARS = "should be a ASCII string with a length greater than 0 and not exceed " + this._MAX_LENGTH + " characters."; - _ERROR_MESSAGE_INVALID_VALUE = "should be a ASCII string with a length not exceed " + this._MAX_LENGTH + " characters."; - detect(_config) { - const attributes = {}; - const rawAttributes = (0, core_1.getStringFromEnv)("OTEL_RESOURCE_ATTRIBUTES"); - const serviceName = (0, core_1.getStringFromEnv)("OTEL_SERVICE_NAME"); - if (rawAttributes) { - try { - const parsedAttributes = this._parseResourceAttributes(rawAttributes); - Object.assign(attributes, parsedAttributes); - } catch (e) { - api_1.diag.debug(`EnvDetector failed: ${e.message}`); - } - } - if (serviceName) { - attributes[semantic_conventions_1.ATTR_SERVICE_NAME] = serviceName; - } - return { attributes }; - } - _parseResourceAttributes(rawEnvAttributes) { - if (!rawEnvAttributes) - return {}; - const attributes = {}; - const rawAttributes = rawEnvAttributes.split(this._COMMA_SEPARATOR, -1); - for (const rawAttribute of rawAttributes) { - const keyValuePair = rawAttribute.split(this._LABEL_KEY_VALUE_SPLITTER, -1); - if (keyValuePair.length !== 2) { - continue; - } - let [key, value] = keyValuePair; - key = key.trim(); - value = value.trim().split(/^"|"$/).join(""); - if (!this._isValidAndNotEmpty(key)) { - throw new Error(`Attribute key ${this._ERROR_MESSAGE_INVALID_CHARS}`); - } - if (!this._isValid(value)) { - throw new Error(`Attribute value ${this._ERROR_MESSAGE_INVALID_VALUE}`); - } - attributes[key] = decodeURIComponent(value); - } - return attributes; - } - _isValid(name) { - return name.length <= this._MAX_LENGTH && this._isBaggageOctetString(name); - } - _isBaggageOctetString(str) { - for (let i = 0;i < str.length; i++) { - const ch = str.charCodeAt(i); - if (ch < 33 || ch === 44 || ch === 59 || ch === 92 || ch > 126) { - return false; - } - } - return true; - } - _isValidAndNotEmpty(str) { - return str.length > 0 && this._isValid(str); - } - } - exports.envDetector = new EnvDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/semconv.js -var require_semconv32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_WEBENGINE_VERSION = exports.ATTR_WEBENGINE_NAME = exports.ATTR_WEBENGINE_DESCRIPTION = exports.ATTR_SERVICE_NAMESPACE = exports.ATTR_SERVICE_INSTANCE_ID = exports.ATTR_PROCESS_RUNTIME_VERSION = exports.ATTR_PROCESS_RUNTIME_NAME = exports.ATTR_PROCESS_RUNTIME_DESCRIPTION = exports.ATTR_PROCESS_PID = exports.ATTR_PROCESS_OWNER = exports.ATTR_PROCESS_EXECUTABLE_PATH = exports.ATTR_PROCESS_EXECUTABLE_NAME = exports.ATTR_PROCESS_COMMAND_ARGS = exports.ATTR_PROCESS_COMMAND = exports.ATTR_OS_VERSION = exports.ATTR_OS_TYPE = exports.ATTR_K8S_POD_NAME = exports.ATTR_K8S_NAMESPACE_NAME = exports.ATTR_K8S_DEPLOYMENT_NAME = exports.ATTR_K8S_CLUSTER_NAME = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_IMAGE_VERSION = exports.ATTR_HOST_IMAGE_NAME = exports.ATTR_HOST_IMAGE_ID = exports.ATTR_HOST_ID = exports.ATTR_HOST_ARCH = exports.ATTR_CONTAINER_NAME = exports.ATTR_CONTAINER_IMAGE_TAGS = exports.ATTR_CONTAINER_IMAGE_NAME = exports.ATTR_CONTAINER_ID = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_AVAILABILITY_ZONE = exports.ATTR_CLOUD_ACCOUNT_ID = undefined; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_CONTAINER_ID = "container.id"; - exports.ATTR_CONTAINER_IMAGE_NAME = "container.image.name"; - exports.ATTR_CONTAINER_IMAGE_TAGS = "container.image.tags"; - exports.ATTR_CONTAINER_NAME = "container.name"; - exports.ATTR_HOST_ARCH = "host.arch"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_IMAGE_ID = "host.image.id"; - exports.ATTR_HOST_IMAGE_NAME = "host.image.name"; - exports.ATTR_HOST_IMAGE_VERSION = "host.image.version"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.ATTR_K8S_CLUSTER_NAME = "k8s.cluster.name"; - exports.ATTR_K8S_DEPLOYMENT_NAME = "k8s.deployment.name"; - exports.ATTR_K8S_NAMESPACE_NAME = "k8s.namespace.name"; - exports.ATTR_K8S_POD_NAME = "k8s.pod.name"; - exports.ATTR_OS_TYPE = "os.type"; - exports.ATTR_OS_VERSION = "os.version"; - exports.ATTR_PROCESS_COMMAND = "process.command"; - exports.ATTR_PROCESS_COMMAND_ARGS = "process.command_args"; - exports.ATTR_PROCESS_EXECUTABLE_NAME = "process.executable.name"; - exports.ATTR_PROCESS_EXECUTABLE_PATH = "process.executable.path"; - exports.ATTR_PROCESS_OWNER = "process.owner"; - exports.ATTR_PROCESS_PID = "process.pid"; - exports.ATTR_PROCESS_RUNTIME_DESCRIPTION = "process.runtime.description"; - exports.ATTR_PROCESS_RUNTIME_NAME = "process.runtime.name"; - exports.ATTR_PROCESS_RUNTIME_VERSION = "process.runtime.version"; - exports.ATTR_SERVICE_INSTANCE_ID = "service.instance.id"; - exports.ATTR_SERVICE_NAMESPACE = "service.namespace"; - exports.ATTR_WEBENGINE_DESCRIPTION = "webengine.description"; - exports.ATTR_WEBENGINE_NAME = "webengine.name"; - exports.ATTR_WEBENGINE_VERSION = "webengine.version"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/execAsync.js -var require_execAsync2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.execAsync = undefined; - var child_process = __require("child_process"); - var util3 = __require("util"); - exports.execAsync = util3.promisify(child_process.exec); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-darwin.js -var require_getMachineId_darwin2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var execAsync_1 = require_execAsync2(); - var api_1 = require_src(); - async function getMachineId() { - try { - const result = await (0, execAsync_1.execAsync)('ioreg -rd1 -c "IOPlatformExpertDevice"'); - const idLine = result.stdout.split(` -`).find((line) => line.includes("IOPlatformUUID")); - if (!idLine) { - return; - } - const parts = idLine.split('" = "'); - if (parts.length === 2) { - return parts[1].slice(0, -1); - } - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-linux.js -var require_getMachineId_linux2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var fs_1 = __require("fs"); - var api_1 = require_src(); - async function getMachineId() { - const paths = ["/etc/machine-id", "/var/lib/dbus/machine-id"]; - for (const path of paths) { - try { - const result = await fs_1.promises.readFile(path, { encoding: "utf8" }); - return result.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-bsd.js -var require_getMachineId_bsd2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var fs_1 = __require("fs"); - var execAsync_1 = require_execAsync2(); - var api_1 = require_src(); - async function getMachineId() { - try { - const result = await fs_1.promises.readFile("/etc/hostid", { encoding: "utf8" }); - return result.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - try { - const result = await (0, execAsync_1.execAsync)("kenv -q smbios.system.uuid"); - return result.stdout.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-win.js -var require_getMachineId_win2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var process3 = __require("process"); - var execAsync_1 = require_execAsync2(); - var api_1 = require_src(); - async function getMachineId() { - const args = "QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid"; - let command = "%windir%\\System32\\REG.exe"; - if (process3.arch === "ia32" && "PROCESSOR_ARCHITEW6432" in process3.env) { - command = "%windir%\\sysnative\\cmd.exe /c " + command; - } - try { - const result = await (0, execAsync_1.execAsync)(`${command} ${args}`); - const parts = result.stdout.split("REG_SZ"); - if (parts.length === 2) { - return parts[1].trim(); - } - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-unsupported.js -var require_getMachineId_unsupported2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var api_1 = require_src(); - async function getMachineId() { - api_1.diag.debug("could not read machine-id: unsupported platform"); - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId.js -var require_getMachineId2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var process3 = __require("process"); - var getMachineIdImpl; - async function getMachineId() { - if (!getMachineIdImpl) { - switch (process3.platform) { - case "darwin": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_darwin2()))).getMachineId; - break; - case "linux": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_linux2()))).getMachineId; - break; - case "freebsd": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_bsd2()))).getMachineId; - break; - case "win32": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_win2()))).getMachineId; - break; - default: - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_unsupported2()))).getMachineId; - break; - } - } - return getMachineIdImpl(); - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/utils.js -var require_utils38 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalizeType = exports.normalizeArch = undefined; - var normalizeArch = (nodeArchString) => { - switch (nodeArchString) { - case "arm": - return "arm32"; - case "ppc": - return "ppc32"; - case "x64": - return "amd64"; - default: - return nodeArchString; - } - }; - exports.normalizeArch = normalizeArch; - var normalizeType = (nodePlatform) => { - switch (nodePlatform) { - case "sunos": - return "solaris"; - case "win32": - return "windows"; - default: - return nodePlatform; - } - }; - exports.normalizeType = normalizeType; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/HostDetector.js -var require_HostDetector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hostDetector = undefined; - var semconv_1 = require_semconv32(); - var os_1 = __require("os"); - var getMachineId_1 = require_getMachineId2(); - var utils_1 = require_utils38(); - - class HostDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_HOST_NAME]: (0, os_1.hostname)(), - [semconv_1.ATTR_HOST_ARCH]: (0, utils_1.normalizeArch)((0, os_1.arch)()), - [semconv_1.ATTR_HOST_ID]: (0, getMachineId_1.getMachineId)() - }; - return { attributes }; - } - } - exports.hostDetector = new HostDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/OSDetector.js -var require_OSDetector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.osDetector = undefined; - var semconv_1 = require_semconv32(); - var os_1 = __require("os"); - var utils_1 = require_utils38(); - - class OSDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_OS_TYPE]: (0, utils_1.normalizeType)((0, os_1.platform)()), - [semconv_1.ATTR_OS_VERSION]: (0, os_1.release)() - }; - return { attributes }; - } - } - exports.osDetector = new OSDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ProcessDetector.js -var require_ProcessDetector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.processDetector = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv32(); - var os = __require("os"); - - class ProcessDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_PROCESS_PID]: process.pid, - [semconv_1.ATTR_PROCESS_EXECUTABLE_NAME]: process.title, - [semconv_1.ATTR_PROCESS_EXECUTABLE_PATH]: process.execPath, - [semconv_1.ATTR_PROCESS_COMMAND_ARGS]: [ - process.argv[0], - ...process.execArgv, - ...process.argv.slice(1) - ], - [semconv_1.ATTR_PROCESS_RUNTIME_VERSION]: process.versions.node, - [semconv_1.ATTR_PROCESS_RUNTIME_NAME]: "nodejs", - [semconv_1.ATTR_PROCESS_RUNTIME_DESCRIPTION]: "Node.js" - }; - if (process.argv.length > 1) { - attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1]; - } - try { - const userInfo = os.userInfo(); - attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username; - } catch (e) { - api_1.diag.debug(`error obtaining process owner: ${e}`); - } - return { attributes }; - } - } - exports.processDetector = new ProcessDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ServiceInstanceIdDetector.js -var require_ServiceInstanceIdDetector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = undefined; - var semconv_1 = require_semconv32(); - var crypto_1 = __require("crypto"); - - class ServiceInstanceIdDetector { - detect(_config) { - return { - attributes: { - [semconv_1.ATTR_SERVICE_INSTANCE_ID]: (0, crypto_1.randomUUID)() - } - }; - } - } - exports.serviceInstanceIdDetector = new ServiceInstanceIdDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/index.js -var require_node9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = undefined; - var HostDetector_1 = require_HostDetector2(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return HostDetector_1.hostDetector; - } }); - var OSDetector_1 = require_OSDetector2(); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return OSDetector_1.osDetector; - } }); - var ProcessDetector_1 = require_ProcessDetector2(); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return ProcessDetector_1.processDetector; - } }); - var ServiceInstanceIdDetector_1 = require_ServiceInstanceIdDetector2(); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return ServiceInstanceIdDetector_1.serviceInstanceIdDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/index.js -var require_platform8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = undefined; - var node_1 = require_node9(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return node_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return node_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return node_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return node_1.serviceInstanceIdDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/NoopDetector.js -var require_NoopDetector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.noopDetector = exports.NoopDetector = undefined; - - class NoopDetector { - detect() { - return { - attributes: {} - }; - } - } - exports.NoopDetector = NoopDetector; - exports.noopDetector = new NoopDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/index.js -var require_detectors5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.noopDetector = exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = exports.envDetector = undefined; - var EnvDetector_1 = require_EnvDetector2(); - Object.defineProperty(exports, "envDetector", { enumerable: true, get: function() { - return EnvDetector_1.envDetector; - } }); - var platform_1 = require_platform8(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return platform_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return platform_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return platform_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return platform_1.serviceInstanceIdDetector; - } }); - var NoopDetector_1 = require_NoopDetector2(); - Object.defineProperty(exports, "noopDetector", { enumerable: true, get: function() { - return NoopDetector_1.noopDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/index.js -var require_src56 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = exports.emptyResource = exports.defaultResource = exports.resourceFromAttributes = exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = exports.envDetector = exports.detectResources = undefined; - var detect_resources_1 = require_detect_resources2(); - Object.defineProperty(exports, "detectResources", { enumerable: true, get: function() { - return detect_resources_1.detectResources; - } }); - var detectors_1 = require_detectors5(); - Object.defineProperty(exports, "envDetector", { enumerable: true, get: function() { - return detectors_1.envDetector; - } }); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return detectors_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return detectors_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return detectors_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return detectors_1.serviceInstanceIdDetector; - } }); - var ResourceImpl_1 = require_ResourceImpl2(); - Object.defineProperty(exports, "resourceFromAttributes", { enumerable: true, get: function() { - return ResourceImpl_1.resourceFromAttributes; - } }); - Object.defineProperty(exports, "defaultResource", { enumerable: true, get: function() { - return ResourceImpl_1.defaultResource; - } }); - Object.defineProperty(exports, "emptyResource", { enumerable: true, get: function() { - return ResourceImpl_1.emptyResource; - } }); - var platform_1 = require_platform7(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return platform_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/extend@3.0.2/node_modules/extend/index.js -var require_extend = __commonJS((exports, module) => { - var hasOwn = Object.prototype.hasOwnProperty; - var toStr = Object.prototype.toString; - var defineProperty = Object.defineProperty; - var gOPD = Object.getOwnPropertyDescriptor; - var isArray = function isArray(arr) { - if (typeof Array.isArray === "function") { - return Array.isArray(arr); - } - return toStr.call(arr) === "[object Array]"; - }; - var isPlainObject2 = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== "[object Object]") { - return false; - } - var hasOwnConstructor = hasOwn.call(obj, "constructor"); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - var key; - for (key in obj) {} - return typeof key === "undefined" || hasOwn.call(obj, key); - }; - var setProperty = function setProperty(target, options) { - if (defineProperty && options.name === "__proto__") { - defineProperty(target, options.name, { - enumerable: true, - configurable: true, - value: options.newValue, - writable: true - }); - } else { - target[options.name] = options.newValue; - } - }; - var getProperty = function getProperty(obj, name) { - if (name === "__proto__") { - if (!hasOwn.call(obj, name)) { - return; - } else if (gOPD) { - return gOPD(obj, name).value; - } - } - return obj[name]; - }; - module.exports = function extend() { - var options, name, src, copy, copyIsArray, clone2; - var target = arguments[0]; - var i = 1; - var length = arguments.length; - var deep = false; - if (typeof target === "boolean") { - deep = target; - target = arguments[1] || {}; - i = 2; - } - if (target == null || typeof target !== "object" && typeof target !== "function") { - target = {}; - } - for (;i < length; ++i) { - options = arguments[i]; - if (options != null) { - for (name in options) { - src = getProperty(target, name); - copy = getProperty(options, name); - if (target !== copy) { - if (deep && copy && (isPlainObject2(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone2 = src && isArray(src) ? src : []; - } else { - clone2 = src && isPlainObject2(src) ? src : {}; - } - setProperty(target, { name, newValue: extend(deep, clone2, copy) }); - } else if (typeof copy !== "undefined") { - setProperty(target, { name, newValue: copy }); - } - } - } - } - } - return target; - }; -}); - -// ../../../../node_modules/.bun/is-stream@2.0.1/node_modules/is-stream/index.js -var require_is_stream = __commonJS((exports, module) => { - var isStream = (stream3) => stream3 !== null && typeof stream3 === "object" && typeof stream3.pipe === "function"; - isStream.writable = (stream3) => isStream(stream3) && stream3.writable !== false && typeof stream3._write === "function" && typeof stream3._writableState === "object"; - isStream.readable = (stream3) => isStream(stream3) && stream3.readable !== false && typeof stream3._read === "function" && typeof stream3._readableState === "object"; - isStream.duplex = (stream3) => isStream.writable(stream3) && isStream.readable(stream3); - isStream.transform = (stream3) => isStream.duplex(stream3) && typeof stream3._transform === "function"; - module.exports = isStream; -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/package.json -var require_package = __commonJS((exports, module) => { - module.exports = { - name: "gaxios", - version: "6.7.1", - description: "A simple common HTTP client specifically for Google APIs and services.", - main: "build/src/index.js", - types: "build/src/index.d.ts", - files: [ - "build/src" - ], - scripts: { - lint: "gts check", - test: "c8 mocha build/test", - "presystem-test": "npm run compile", - "system-test": "mocha build/system-test --timeout 80000", - compile: "tsc -p .", - fix: "gts fix", - prepare: "npm run compile", - pretest: "npm run compile", - webpack: "webpack", - "prebrowser-test": "npm run compile", - "browser-test": "node build/browser-test/browser-test-runner.js", - docs: "compodoc src/", - "docs-test": "linkinator docs", - "predocs-test": "npm run docs", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - prelint: "cd samples; npm link ../; npm install", - clean: "gts clean", - precompile: "gts clean" - }, - repository: "googleapis/gaxios", - keywords: [ - "google" - ], - engines: { - node: ">=14" - }, - author: "Google, LLC", - license: "Apache-2.0", - devDependencies: { - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@compodoc/compodoc": "1.1.19", - "@types/cors": "^2.8.6", - "@types/express": "^4.16.1", - "@types/extend": "^3.0.1", - "@types/mocha": "^9.0.0", - "@types/multiparty": "0.0.36", - "@types/mv": "^2.1.0", - "@types/ncp": "^2.0.1", - "@types/node": "^20.0.0", - "@types/node-fetch": "^2.5.7", - "@types/sinon": "^17.0.0", - "@types/tmp": "0.2.6", - "@types/uuid": "^10.0.0", - "abort-controller": "^3.0.0", - assert: "^2.0.0", - browserify: "^17.0.0", - c8: "^8.0.0", - cheerio: "1.0.0-rc.10", - cors: "^2.8.5", - execa: "^5.0.0", - express: "^4.16.4", - "form-data": "^4.0.0", - gts: "^5.0.0", - "is-docker": "^2.0.0", - karma: "^6.0.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.0", - "karma-firefox-launcher": "^2.0.0", - "karma-mocha": "^2.0.0", - "karma-remap-coverage": "^0.1.5", - "karma-sourcemap-loader": "^0.4.0", - "karma-webpack": "5.0.0", - linkinator: "^3.0.0", - mocha: "^8.0.0", - multiparty: "^4.2.1", - mv: "^2.1.1", - ncp: "^2.0.0", - nock: "^13.0.0", - "null-loader": "^4.0.0", - puppeteer: "^19.0.0", - sinon: "^18.0.0", - "stream-browserify": "^3.0.0", - tmp: "0.2.3", - "ts-loader": "^8.0.0", - typescript: "^5.1.6", - webpack: "^5.35.0", - "webpack-cli": "^4.0.0" - }, - dependencies: { - extend: "^3.0.2", - "https-proxy-agent": "^7.0.1", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9", - uuid: "^9.0.1" - } - }; -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/build/src/util.js -var require_util = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.pkg = undefined; - exports.pkg = require_package(); -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/build/src/common.js -var require_common2 = __commonJS((exports) => { - var __importDefault = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - var _a2; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GaxiosError = exports.GAXIOS_ERROR_SYMBOL = undefined; - exports.defaultErrorRedactor = defaultErrorRedactor; - var url_1 = __require("url"); - var util_1 = require_util(); - var extend_1 = __importDefault(require_extend()); - exports.GAXIOS_ERROR_SYMBOL = Symbol.for(`${util_1.pkg.name}-gaxios-error`); - - class GaxiosError extends Error { - static [(_a2 = exports.GAXIOS_ERROR_SYMBOL, Symbol.hasInstance)](instance) { - if (instance && typeof instance === "object" && exports.GAXIOS_ERROR_SYMBOL in instance && instance[exports.GAXIOS_ERROR_SYMBOL] === util_1.pkg.version) { - return true; - } - return Function.prototype[Symbol.hasInstance].call(GaxiosError, instance); - } - constructor(message, config2, response, error48) { - var _b; - super(message); - this.config = config2; - this.response = response; - this.error = error48; - this[_a2] = util_1.pkg.version; - this.config = (0, extend_1.default)(true, {}, config2); - if (this.response) { - this.response.config = (0, extend_1.default)(true, {}, this.response.config); - } - if (this.response) { - try { - this.response.data = translateData(this.config.responseType, (_b = this.response) === null || _b === undefined ? undefined : _b.data); - } catch (_c) {} - this.status = this.response.status; - } - if (error48 && "code" in error48 && error48.code) { - this.code = error48.code; - } - if (config2.errorRedactor) { - config2.errorRedactor({ - config: this.config, - response: this.response - }); - } - } - } - exports.GaxiosError = GaxiosError; - function translateData(responseType, data) { - switch (responseType) { - case "stream": - return data; - case "json": - return JSON.parse(JSON.stringify(data)); - case "arraybuffer": - return JSON.parse(Buffer.from(data).toString("utf8")); - case "blob": - return JSON.parse(data.text()); - default: - return data; - } - } - function defaultErrorRedactor(data) { - const REDACT = "< - See `errorRedactor` option in `gaxios` for configuration>."; - function redactHeaders2(headers) { - if (!headers) - return; - for (const key of Object.keys(headers)) { - if (/^authentication$/i.test(key)) { - headers[key] = REDACT; - } - if (/^authorization$/i.test(key)) { - headers[key] = REDACT; - } - if (/secret/i.test(key)) { - headers[key] = REDACT; - } - } - } - function redactString(obj, key) { - if (typeof obj === "object" && obj !== null && typeof obj[key] === "string") { - const text = obj[key]; - if (/grant_type=/i.test(text) || /assertion=/i.test(text) || /secret/i.test(text)) { - obj[key] = REDACT; - } - } - } - function redactObject(obj) { - if (typeof obj === "object" && obj !== null) { - if ("grant_type" in obj) { - obj["grant_type"] = REDACT; - } - if ("assertion" in obj) { - obj["assertion"] = REDACT; - } - if ("client_secret" in obj) { - obj["client_secret"] = REDACT; - } - } - } - if (data.config) { - redactHeaders2(data.config.headers); - redactString(data.config, "data"); - redactObject(data.config.data); - redactString(data.config, "body"); - redactObject(data.config.body); - try { - const url2 = new url_1.URL("", data.config.url); - if (url2.searchParams.has("token")) { - url2.searchParams.set("token", REDACT); - } - if (url2.searchParams.has("client_secret")) { - url2.searchParams.set("client_secret", REDACT); - } - data.config.url = url2.toString(); - } catch (_b) {} - } - if (data.response) { - defaultErrorRedactor({ config: data.response.config }); - redactHeaders2(data.response.headers); - redactString(data.response, "data"); - redactObject(data.response.data); - } - return data; - } -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/build/src/retry.js -var require_retry = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getRetryConfig = getRetryConfig; - async function getRetryConfig(err) { - let config2 = getConfig(err); - if (!err || !err.config || !config2 && !err.config.retry) { - return { shouldRetry: false }; - } - config2 = config2 || {}; - config2.currentRetryAttempt = config2.currentRetryAttempt || 0; - config2.retry = config2.retry === undefined || config2.retry === null ? 3 : config2.retry; - config2.httpMethodsToRetry = config2.httpMethodsToRetry || [ - "GET", - "HEAD", - "PUT", - "OPTIONS", - "DELETE" - ]; - config2.noResponseRetries = config2.noResponseRetries === undefined || config2.noResponseRetries === null ? 2 : config2.noResponseRetries; - config2.retryDelayMultiplier = config2.retryDelayMultiplier ? config2.retryDelayMultiplier : 2; - config2.timeOfFirstRequest = config2.timeOfFirstRequest ? config2.timeOfFirstRequest : Date.now(); - config2.totalTimeout = config2.totalTimeout ? config2.totalTimeout : Number.MAX_SAFE_INTEGER; - config2.maxRetryDelay = config2.maxRetryDelay ? config2.maxRetryDelay : Number.MAX_SAFE_INTEGER; - const retryRanges = [ - [100, 199], - [408, 408], - [429, 429], - [500, 599] - ]; - config2.statusCodesToRetry = config2.statusCodesToRetry || retryRanges; - err.config.retryConfig = config2; - const shouldRetryFn = config2.shouldRetry || shouldRetryRequest; - if (!await shouldRetryFn(err)) { - return { shouldRetry: false, config: err.config }; - } - const delay = getNextRetryDelay(config2); - err.config.retryConfig.currentRetryAttempt += 1; - const backoff = config2.retryBackoff ? config2.retryBackoff(err, delay) : new Promise((resolve2) => { - setTimeout(resolve2, delay); - }); - if (config2.onRetryAttempt) { - config2.onRetryAttempt(err); - } - await backoff; - return { shouldRetry: true, config: err.config }; - } - function shouldRetryRequest(err) { - var _a2; - const config2 = getConfig(err); - if (err.name === "AbortError" || ((_a2 = err.error) === null || _a2 === undefined ? undefined : _a2.name) === "AbortError") { - return false; - } - if (!config2 || config2.retry === 0) { - return false; - } - if (!err.response && (config2.currentRetryAttempt || 0) >= config2.noResponseRetries) { - return false; - } - if (!err.config.method || config2.httpMethodsToRetry.indexOf(err.config.method.toUpperCase()) < 0) { - return false; - } - if (err.response && err.response.status) { - let isInRange = false; - for (const [min, max] of config2.statusCodesToRetry) { - const status = err.response.status; - if (status >= min && status <= max) { - isInRange = true; - break; - } - } - if (!isInRange) { - return false; - } - } - config2.currentRetryAttempt = config2.currentRetryAttempt || 0; - if (config2.currentRetryAttempt >= config2.retry) { - return false; - } - return true; - } - function getConfig(err) { - if (err && err.config && err.config.retryConfig) { - return err.config.retryConfig; - } - return; - } - function getNextRetryDelay(config2) { - var _a2; - const retryDelay = config2.currentRetryAttempt ? 0 : (_a2 = config2.retryDelay) !== null && _a2 !== undefined ? _a2 : 100; - const calculatedDelay = retryDelay + (Math.pow(config2.retryDelayMultiplier, config2.currentRetryAttempt) - 1) / 2 * 1000; - const maxAllowableDelay = config2.totalTimeout - (Date.now() - config2.timeOfFirstRequest); - return Math.min(calculatedDelay, maxAllowableDelay, config2.maxRetryDelay); - } -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/rng.js -var require_rng = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = rng; - var _crypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var rnds8Pool = new Uint8Array(256); - var poolPtr = rnds8Pool.length; - function rng() { - if (poolPtr > rnds8Pool.length - 16) { - _crypto.default.randomFillSync(rnds8Pool); - poolPtr = 0; - } - return rnds8Pool.slice(poolPtr, poolPtr += 16); - } -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/regex.js -var require_regex = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _default3 = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/validate.js -var require_validate = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _regex2 = _interopRequireDefault(require_regex()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function validate(uuid3) { - return typeof uuid3 === "string" && _regex2.default.test(uuid3); - } - var _default3 = validate; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/stringify.js -var require_stringify = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - exports.unsafeStringify = unsafeStringify; - var _validate = _interopRequireDefault(require_validate()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var byteToHex = []; - for (let i = 0;i < 256; ++i) { - byteToHex.push((i + 256).toString(16).slice(1)); - } - function unsafeStringify(arr, offset = 0) { - return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; - } - function stringify(arr, offset = 0) { - const uuid3 = unsafeStringify(arr, offset); - if (!(0, _validate.default)(uuid3)) { - throw TypeError("Stringified UUID is invalid"); - } - return uuid3; - } - var _default3 = stringify; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/v1.js -var require_v1 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _rng = _interopRequireDefault(require_rng()); - var _stringify = require_stringify(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var _nodeId; - var _clockseq; - var _lastMSecs = 0; - var _lastNSecs = 0; - function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || _rng.default)(); - if (node == null) { - node = _nodeId = [seedBytes[0] | 1, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - if (clockseq == null) { - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 16383; - } - } - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4; - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 16383; - } - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - if (nsecs >= 1e4) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - msecs += 12219292800000; - const tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296; - b[i++] = tl >>> 24 & 255; - b[i++] = tl >>> 16 & 255; - b[i++] = tl >>> 8 & 255; - b[i++] = tl & 255; - const tmh = msecs / 4294967296 * 1e4 & 268435455; - b[i++] = tmh >>> 8 & 255; - b[i++] = tmh & 255; - b[i++] = tmh >>> 24 & 15 | 16; - b[i++] = tmh >>> 16 & 255; - b[i++] = clockseq >>> 8 | 128; - b[i++] = clockseq & 255; - for (let n = 0;n < 6; ++n) { - b[i + n] = node[n]; - } - return buf || (0, _stringify.unsafeStringify)(b); - } - var _default3 = v1; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/parse.js -var require_parse = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _validate = _interopRequireDefault(require_validate()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function parse6(uuid3) { - if (!(0, _validate.default)(uuid3)) { - throw TypeError("Invalid UUID"); - } - let v; - const arr = new Uint8Array(16); - arr[0] = (v = parseInt(uuid3.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 255; - arr[2] = v >>> 8 & 255; - arr[3] = v & 255; - arr[4] = (v = parseInt(uuid3.slice(9, 13), 16)) >>> 8; - arr[5] = v & 255; - arr[6] = (v = parseInt(uuid3.slice(14, 18), 16)) >>> 8; - arr[7] = v & 255; - arr[8] = (v = parseInt(uuid3.slice(19, 23), 16)) >>> 8; - arr[9] = v & 255; - arr[10] = (v = parseInt(uuid3.slice(24, 36), 16)) / 1099511627776 & 255; - arr[11] = v / 4294967296 & 255; - arr[12] = v >>> 24 & 255; - arr[13] = v >>> 16 & 255; - arr[14] = v >>> 8 & 255; - arr[15] = v & 255; - return arr; - } - var _default3 = parse6; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/v35.js -var require_v35 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.URL = exports.DNS = undefined; - exports.default = v35; - var _stringify = require_stringify(); - var _parse2 = _interopRequireDefault(require_parse()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); - const bytes = []; - for (let i = 0;i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - return bytes; - } - var DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; - exports.DNS = DNS; - var URL2 = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; - exports.URL = URL2; - function v35(name, version2, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - var _namespace; - if (typeof value === "string") { - value = stringToBytes(value); - } - if (typeof namespace === "string") { - namespace = (0, _parse2.default)(namespace); - } - if (((_namespace = namespace) === null || _namespace === undefined ? undefined : _namespace.length) !== 16) { - throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)"); - } - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 15 | version2; - bytes[8] = bytes[8] & 63 | 128; - if (buf) { - offset = offset || 0; - for (let i = 0;i < 16; ++i) { - buf[offset + i] = bytes[i]; - } - return buf; - } - return (0, _stringify.unsafeStringify)(bytes); - } - try { - generateUUID.name = name; - } catch (err) {} - generateUUID.DNS = DNS; - generateUUID.URL = URL2; - return generateUUID; - } -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/md5.js -var require_md5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _crypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === "string") { - bytes = Buffer.from(bytes, "utf8"); - } - return _crypto.default.createHash("md5").update(bytes).digest(); - } - var _default3 = md5; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/v3.js -var require_v3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _v = _interopRequireDefault(require_v35()); - var _md = _interopRequireDefault(require_md5()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var v3 = (0, _v.default)("v3", 48, _md.default); - var _default3 = v3; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/native.js -var require_native = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _crypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var _default3 = { - randomUUID: _crypto.default.randomUUID - }; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/v4.js -var require_v4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _native = _interopRequireDefault(require_native()); - var _rng = _interopRequireDefault(require_rng()); - var _stringify = require_stringify(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function v4(options, buf, offset) { - if (_native.default.randomUUID && !buf && !options) { - return _native.default.randomUUID(); - } - options = options || {}; - const rnds = options.random || (options.rng || _rng.default)(); - rnds[6] = rnds[6] & 15 | 64; - rnds[8] = rnds[8] & 63 | 128; - if (buf) { - offset = offset || 0; - for (let i = 0;i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return (0, _stringify.unsafeStringify)(rnds); - } - var _default3 = v4; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/sha1.js -var require_sha1 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _crypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === "string") { - bytes = Buffer.from(bytes, "utf8"); - } - return _crypto.default.createHash("sha1").update(bytes).digest(); - } - var _default3 = sha1; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/v5.js -var require_v5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _v = _interopRequireDefault(require_v35()); - var _sha = _interopRequireDefault(require_sha1()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var v5 = (0, _v.default)("v5", 80, _sha.default); - var _default3 = v5; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/nil.js -var require_nil = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _default3 = "00000000-0000-0000-0000-000000000000"; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/version.js -var require_version45 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _validate = _interopRequireDefault(require_validate()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function version2(uuid3) { - if (!(0, _validate.default)(uuid3)) { - throw TypeError("Invalid UUID"); - } - return parseInt(uuid3.slice(14, 15), 16); - } - var _default3 = version2; - exports.default = _default3; -}); - -// ../../../../node_modules/.bun/uuid@9.0.1/node_modules/uuid/dist/index.js -var require_dist = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - Object.defineProperty(exports, "NIL", { - enumerable: true, - get: function() { - return _nil.default; - } - }); - Object.defineProperty(exports, "parse", { - enumerable: true, - get: function() { - return _parse2.default; - } - }); - Object.defineProperty(exports, "stringify", { - enumerable: true, - get: function() { - return _stringify.default; - } - }); - Object.defineProperty(exports, "v1", { - enumerable: true, - get: function() { - return _v.default; - } - }); - Object.defineProperty(exports, "v3", { - enumerable: true, - get: function() { - return _v2.default; - } - }); - Object.defineProperty(exports, "v4", { - enumerable: true, - get: function() { - return _v3.default; - } - }); - Object.defineProperty(exports, "v5", { - enumerable: true, - get: function() { - return _v4.default; - } - }); - Object.defineProperty(exports, "validate", { - enumerable: true, - get: function() { - return _validate.default; - } - }); - Object.defineProperty(exports, "version", { - enumerable: true, - get: function() { - return _version.default; - } - }); - var _v = _interopRequireDefault(require_v1()); - var _v2 = _interopRequireDefault(require_v3()); - var _v3 = _interopRequireDefault(require_v4()); - var _v4 = _interopRequireDefault(require_v5()); - var _nil = _interopRequireDefault(require_nil()); - var _version = _interopRequireDefault(require_version45()); - var _validate = _interopRequireDefault(require_validate()); - var _stringify = _interopRequireDefault(require_stringify()); - var _parse2 = _interopRequireDefault(require_parse()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/build/src/interceptor.js -var require_interceptor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GaxiosInterceptorManager = undefined; - - class GaxiosInterceptorManager extends Set { - } - exports.GaxiosInterceptorManager = GaxiosInterceptorManager; -}); - -// ../../../../node_modules/.bun/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js -var require_helpers = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k in mod2) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod2, k)) - __createBinding(result, mod2, k); - } - __setModuleDefault(result, mod2); - return result; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.req = exports.json = exports.toBuffer = undefined; - var http2 = __importStar(__require("http")); - var https = __importStar(__require("https")); - async function toBuffer(stream3) { - let length = 0; - const chunks = []; - for await (const chunk of stream3) { - length += chunk.length; - chunks.push(chunk); - } - return Buffer.concat(chunks, length); - } - exports.toBuffer = toBuffer; - async function json3(stream3) { - const buf = await toBuffer(stream3); - const str = buf.toString("utf8"); - try { - return JSON.parse(str); - } catch (_err) { - const err = _err; - err.message += ` (input: ${str})`; - throw err; - } - } - exports.json = json3; - function req(url2, opts = {}) { - const href = typeof url2 === "string" ? url2 : url2.href; - const req2 = (href.startsWith("https:") ? https : http2).request(url2, opts); - const promise2 = new Promise((resolve2, reject) => { - req2.once("response", resolve2).once("error", reject).end(); - }); - req2.then = promise2.then.bind(promise2); - return req2; - } - exports.req = req; -}); - -// ../../../../node_modules/.bun/agent-base@7.1.4/node_modules/agent-base/dist/index.js -var require_dist2 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k in mod2) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod2, k)) - __createBinding(result, mod2, k); - } - __setModuleDefault(result, mod2); - return result; - }; - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Agent = undefined; - var net = __importStar(__require("net")); - var http2 = __importStar(__require("http")); - var https_1 = __require("https"); - __exportStar(require_helpers(), exports); - var INTERNAL = Symbol("AgentBaseInternalState"); - - class Agent extends http2.Agent { - constructor(opts) { - super(opts); - this[INTERNAL] = {}; - } - isSecureEndpoint(options) { - if (options) { - if (typeof options.secureEndpoint === "boolean") { - return options.secureEndpoint; - } - if (typeof options.protocol === "string") { - return options.protocol === "https:"; - } - } - const { stack } = new Error; - if (typeof stack !== "string") - return false; - return stack.split(` -`).some((l) => l.indexOf("(https.js:") !== -1 || l.indexOf("node:https:") !== -1); - } - incrementSockets(name) { - if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) { - return null; - } - if (!this.sockets[name]) { - this.sockets[name] = []; - } - const fakeSocket = new net.Socket({ writable: false }); - this.sockets[name].push(fakeSocket); - this.totalSocketCount++; - return fakeSocket; - } - decrementSockets(name, socket) { - if (!this.sockets[name] || socket === null) { - return; - } - const sockets = this.sockets[name]; - const index = sockets.indexOf(socket); - if (index !== -1) { - sockets.splice(index, 1); - this.totalSocketCount--; - if (sockets.length === 0) { - delete this.sockets[name]; - } - } - } - getName(options) { - const secureEndpoint = this.isSecureEndpoint(options); - if (secureEndpoint) { - return https_1.Agent.prototype.getName.call(this, options); - } - return super.getName(options); - } - createSocket(req, options, cb) { - const connectOpts = { - ...options, - secureEndpoint: this.isSecureEndpoint(options) - }; - const name = this.getName(connectOpts); - const fakeSocket = this.incrementSockets(name); - Promise.resolve().then(() => this.connect(req, connectOpts)).then((socket) => { - this.decrementSockets(name, fakeSocket); - if (socket instanceof http2.Agent) { - try { - return socket.addRequest(req, connectOpts); - } catch (err) { - return cb(err); - } - } - this[INTERNAL].currentSocket = socket; - super.createSocket(req, options, cb); - }, (err) => { - this.decrementSockets(name, fakeSocket); - cb(err); - }); - } - createConnection() { - const socket = this[INTERNAL].currentSocket; - this[INTERNAL].currentSocket = undefined; - if (!socket) { - throw new Error("No socket was returned in the `connect()` function"); - } - return socket; - } - get defaultPort() { - return this[INTERNAL].defaultPort ?? (this.protocol === "https:" ? 443 : 80); - } - set defaultPort(v) { - if (this[INTERNAL]) { - this[INTERNAL].defaultPort = v; - } - } - get protocol() { - return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? "https:" : "http:"); - } - set protocol(v) { - if (this[INTERNAL]) { - this[INTERNAL].protocol = v; - } - } - } - exports.Agent = Agent; -}); - -// ../../../../node_modules/.bun/https-proxy-agent@7.0.6/node_modules/https-proxy-agent/dist/parse-proxy-response.js -var require_parse_proxy_response = __commonJS((exports) => { - var __importDefault = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseProxyResponse = undefined; - var debug_1 = __importDefault(require_src8()); - var debug = (0, debug_1.default)("https-proxy-agent:parse-proxy-response"); - function parseProxyResponse(socket) { - return new Promise((resolve2, reject) => { - let buffersLength = 0; - const buffers = []; - function read() { - const b = socket.read(); - if (b) - ondata(b); - else - socket.once("readable", read); - } - function cleanup() { - socket.removeListener("end", onend); - socket.removeListener("error", onerror); - socket.removeListener("readable", read); - } - function onend() { - cleanup(); - debug("onend"); - reject(new Error("Proxy connection ended before receiving CONNECT response")); - } - function onerror(err) { - cleanup(); - debug("onerror %o", err); - reject(err); - } - function ondata(b) { - buffers.push(b); - buffersLength += b.length; - const buffered = Buffer.concat(buffers, buffersLength); - const endOfHeaders = buffered.indexOf(`\r -\r -`); - if (endOfHeaders === -1) { - debug("have not received end of HTTP headers yet..."); - read(); - return; - } - const headerParts = buffered.slice(0, endOfHeaders).toString("ascii").split(`\r -`); - const firstLine = headerParts.shift(); - if (!firstLine) { - socket.destroy(); - return reject(new Error("No header received from proxy CONNECT response")); - } - const firstLineParts = firstLine.split(" "); - const statusCode = +firstLineParts[1]; - const statusText = firstLineParts.slice(2).join(" "); - const headers = {}; - for (const header of headerParts) { - if (!header) - continue; - const firstColon = header.indexOf(":"); - if (firstColon === -1) { - socket.destroy(); - return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`)); - } - const key = header.slice(0, firstColon).toLowerCase(); - const value = header.slice(firstColon + 1).trimStart(); - const current = headers[key]; - if (typeof current === "string") { - headers[key] = [current, value]; - } else if (Array.isArray(current)) { - current.push(value); - } else { - headers[key] = value; - } - } - debug("got proxy server response: %o %o", firstLine, headers); - cleanup(); - resolve2({ - connect: { - statusCode, - statusText, - headers - }, - buffered - }); - } - socket.on("error", onerror); - socket.on("end", onend); - read(); - }); - } - exports.parseProxyResponse = parseProxyResponse; -}); - -// ../../../../node_modules/.bun/https-proxy-agent@7.0.6/node_modules/https-proxy-agent/dist/index.js -var require_dist3 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k in mod2) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod2, k)) - __createBinding(result, mod2, k); - } - __setModuleDefault(result, mod2); - return result; - }; - var __importDefault = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HttpsProxyAgent = undefined; - var net = __importStar(__require("net")); - var tls = __importStar(__require("tls")); - var assert_1 = __importDefault(__require("assert")); - var debug_1 = __importDefault(require_src8()); - var agent_base_1 = require_dist2(); - var url_1 = __require("url"); - var parse_proxy_response_1 = require_parse_proxy_response(); - var debug = (0, debug_1.default)("https-proxy-agent"); - var setServernameFromNonIpHost = (options) => { - if (options.servername === undefined && options.host && !net.isIP(options.host)) { - return { - ...options, - servername: options.host - }; - } - return options; - }; - - class HttpsProxyAgent extends agent_base_1.Agent { - constructor(proxy, opts) { - super(opts); - this.options = { path: undefined }; - this.proxy = typeof proxy === "string" ? new url_1.URL(proxy) : proxy; - this.proxyHeaders = opts?.headers ?? {}; - debug("Creating new HttpsProxyAgent instance: %o", this.proxy.href); - const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ""); - const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80; - this.connectOpts = { - ALPNProtocols: ["http/1.1"], - ...opts ? omit2(opts, "headers") : null, - host, - port - }; - } - async connect(req, opts) { - const { proxy } = this; - if (!opts.host) { - throw new TypeError('No "host" provided'); - } - let socket; - if (proxy.protocol === "https:") { - debug("Creating `tls.Socket`: %o", this.connectOpts); - socket = tls.connect(setServernameFromNonIpHost(this.connectOpts)); - } else { - debug("Creating `net.Socket`: %o", this.connectOpts); - socket = net.connect(this.connectOpts); - } - const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders }; - const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host; - let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r -`; - if (proxy.username || proxy.password) { - const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`; - headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`; - } - headers.Host = `${host}:${opts.port}`; - if (!headers["Proxy-Connection"]) { - headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close"; - } - for (const name of Object.keys(headers)) { - payload += `${name}: ${headers[name]}\r -`; - } - const proxyResponsePromise = (0, parse_proxy_response_1.parseProxyResponse)(socket); - socket.write(`${payload}\r -`); - const { connect, buffered } = await proxyResponsePromise; - req.emit("proxyConnect", connect); - this.emit("proxyConnect", connect, req); - if (connect.statusCode === 200) { - req.once("socket", resume); - if (opts.secureEndpoint) { - debug("Upgrading socket connection to TLS"); - return tls.connect({ - ...omit2(setServernameFromNonIpHost(opts), "host", "path", "port"), - socket - }); - } - return socket; - } - socket.destroy(); - const fakeSocket = new net.Socket({ writable: false }); - fakeSocket.readable = true; - req.once("socket", (s2) => { - debug("Replaying proxy buffer for failed request"); - (0, assert_1.default)(s2.listenerCount("data") > 0); - s2.push(buffered); - s2.push(null); - }); - return fakeSocket; - } - } - HttpsProxyAgent.protocols = ["http", "https"]; - exports.HttpsProxyAgent = HttpsProxyAgent; - function resume(socket) { - socket.resume(); - } - function omit2(obj, ...keys) { - const ret = {}; - let key; - for (key in obj) { - if (!keys.includes(key)) { - ret[key] = obj[key]; - } - } - return ret; - } -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/build/src/gaxios.js -var require_gaxios = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k in mod2) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod2, k)) - __createBinding(result, mod2, k); - } - __setModuleDefault(result, mod2); - return result; - }; - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var __classPrivateFieldSet = exports && exports.__classPrivateFieldSet || function(receiver, state, value, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; - }; - var __importDefault = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - var _Gaxios_instances; - var _a2; - var _Gaxios_urlMayUseProxy; - var _Gaxios_applyRequestInterceptors; - var _Gaxios_applyResponseInterceptors; - var _Gaxios_prepareRequest; - var _Gaxios_proxyAgent; - var _Gaxios_getProxyAgent; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Gaxios = undefined; - var extend_1 = __importDefault(require_extend()); - var https_1 = __require("https"); - var node_fetch_1 = __importDefault(__require("node-fetch")); - var querystring_1 = __importDefault(__require("querystring")); - var is_stream_1 = __importDefault(require_is_stream()); - var url_1 = __require("url"); - var common_1 = require_common2(); - var retry_1 = require_retry(); - var stream_1 = __require("stream"); - var uuid_1 = require_dist(); - var interceptor_1 = require_interceptor(); - var fetch2 = hasFetch() ? window.fetch : node_fetch_1.default; - function hasWindow() { - return typeof window !== "undefined" && !!window; - } - function hasFetch() { - return hasWindow() && !!window.fetch; - } - function hasBuffer() { - return typeof Buffer !== "undefined"; - } - function hasHeader(options, header) { - return !!getHeader(options, header); - } - function getHeader(options, header) { - header = header.toLowerCase(); - for (const key of Object.keys((options === null || options === undefined ? undefined : options.headers) || {})) { - if (header === key.toLowerCase()) { - return options.headers[key]; - } - } - return; - } - - class Gaxios { - constructor(defaults) { - _Gaxios_instances.add(this); - this.agentCache = new Map; - this.defaults = defaults || {}; - this.interceptors = { - request: new interceptor_1.GaxiosInterceptorManager, - response: new interceptor_1.GaxiosInterceptorManager - }; - } - async request(opts = {}) { - opts = await __classPrivateFieldGet(this, _Gaxios_instances, "m", _Gaxios_prepareRequest).call(this, opts); - opts = await __classPrivateFieldGet(this, _Gaxios_instances, "m", _Gaxios_applyRequestInterceptors).call(this, opts); - return __classPrivateFieldGet(this, _Gaxios_instances, "m", _Gaxios_applyResponseInterceptors).call(this, this._request(opts)); - } - async _defaultAdapter(opts) { - const fetchImpl = opts.fetchImplementation || fetch2; - const res = await fetchImpl(opts.url, opts); - const data = await this.getResponseData(opts, res); - return this.translateResponse(opts, res, data); - } - async _request(opts = {}) { - var _b; - try { - let translatedResponse; - if (opts.adapter) { - translatedResponse = await opts.adapter(opts, this._defaultAdapter.bind(this)); - } else { - translatedResponse = await this._defaultAdapter(opts); - } - if (!opts.validateStatus(translatedResponse.status)) { - if (opts.responseType === "stream") { - let response = ""; - await new Promise((resolve2) => { - (translatedResponse === null || translatedResponse === undefined ? undefined : translatedResponse.data).on("data", (chunk) => { - response += chunk; - }); - (translatedResponse === null || translatedResponse === undefined ? undefined : translatedResponse.data).on("end", resolve2); - }); - translatedResponse.data = response; - } - throw new common_1.GaxiosError(`Request failed with status code ${translatedResponse.status}`, opts, translatedResponse); - } - return translatedResponse; - } catch (e) { - const err = e instanceof common_1.GaxiosError ? e : new common_1.GaxiosError(e.message, opts, undefined, e); - const { shouldRetry, config: config2 } = await (0, retry_1.getRetryConfig)(err); - if (shouldRetry && config2) { - err.config.retryConfig.currentRetryAttempt = config2.retryConfig.currentRetryAttempt; - opts.retryConfig = (_b = err.config) === null || _b === undefined ? undefined : _b.retryConfig; - return this._request(opts); - } - throw err; - } - } - async getResponseData(opts, res) { - switch (opts.responseType) { - case "stream": - return res.body; - case "json": { - let data = await res.text(); - try { - data = JSON.parse(data); - } catch (_b) {} - return data; - } - case "arraybuffer": - return res.arrayBuffer(); - case "blob": - return res.blob(); - case "text": - return res.text(); - default: - return this.getResponseDataFromContentType(res); - } - } - validateStatus(status) { - return status >= 200 && status < 300; - } - paramsSerializer(params) { - return querystring_1.default.stringify(params); - } - translateResponse(opts, res, data) { - const headers = {}; - res.headers.forEach((value, key) => { - headers[key] = value; - }); - return { - config: opts, - data, - headers, - status: res.status, - statusText: res.statusText, - request: { - responseURL: res.url - } - }; - } - async getResponseDataFromContentType(response) { - let contentType = response.headers.get("Content-Type"); - if (contentType === null) { - return response.text(); - } - contentType = contentType.toLowerCase(); - if (contentType.includes("application/json")) { - let data = await response.text(); - try { - data = JSON.parse(data); - } catch (_b) {} - return data; - } else if (contentType.match(/^text\//)) { - return response.text(); - } else { - return response.blob(); - } - } - async* getMultipartRequest(multipartOptions, boundary) { - const finale = `--${boundary}--`; - for (const currentPart of multipartOptions) { - const partContentType = currentPart.headers["Content-Type"] || "application/octet-stream"; - const preamble = `--${boundary}\r -Content-Type: ${partContentType}\r -\r -`; - yield preamble; - if (typeof currentPart.content === "string") { - yield currentPart.content; - } else { - yield* currentPart.content; - } - yield `\r -`; - } - yield finale; - } - } - exports.Gaxios = Gaxios; - _a2 = Gaxios, _Gaxios_instances = new WeakSet, _Gaxios_urlMayUseProxy = function _Gaxios_urlMayUseProxy(url2, noProxy = []) { - var _b, _c; - const candidate = new url_1.URL(url2); - const noProxyList = [...noProxy]; - const noProxyEnvList = ((_c = (_b = process.env.NO_PROXY) !== null && _b !== undefined ? _b : process.env.no_proxy) === null || _c === undefined ? undefined : _c.split(",")) || []; - for (const rule of noProxyEnvList) { - noProxyList.push(rule.trim()); - } - for (const rule of noProxyList) { - if (rule instanceof RegExp) { - if (rule.test(candidate.toString())) { - return false; - } - } else if (rule instanceof url_1.URL) { - if (rule.origin === candidate.origin) { - return false; - } - } else if (rule.startsWith("*.") || rule.startsWith(".")) { - const cleanedRule = rule.replace(/^\*\./, "."); - if (candidate.hostname.endsWith(cleanedRule)) { - return false; - } - } else if (rule === candidate.origin || rule === candidate.hostname || rule === candidate.href) { - return false; - } - } - return true; - }, _Gaxios_applyRequestInterceptors = async function _Gaxios_applyRequestInterceptors(options) { - let promiseChain = Promise.resolve(options); - for (const interceptor of this.interceptors.request.values()) { - if (interceptor) { - promiseChain = promiseChain.then(interceptor.resolved, interceptor.rejected); - } - } - return promiseChain; - }, _Gaxios_applyResponseInterceptors = async function _Gaxios_applyResponseInterceptors(response) { - let promiseChain = Promise.resolve(response); - for (const interceptor of this.interceptors.response.values()) { - if (interceptor) { - promiseChain = promiseChain.then(interceptor.resolved, interceptor.rejected); - } - } - return promiseChain; - }, _Gaxios_prepareRequest = async function _Gaxios_prepareRequest(options) { - var _b, _c, _d, _e; - const opts = (0, extend_1.default)(true, {}, this.defaults, options); - if (!opts.url) { - throw new Error("URL is required."); - } - const baseUrl = opts.baseUrl || opts.baseURL; - if (baseUrl) { - opts.url = baseUrl.toString() + opts.url; - } - opts.paramsSerializer = opts.paramsSerializer || this.paramsSerializer; - if (opts.params && Object.keys(opts.params).length > 0) { - let additionalQueryParams = opts.paramsSerializer(opts.params); - if (additionalQueryParams.startsWith("?")) { - additionalQueryParams = additionalQueryParams.slice(1); - } - const prefix = opts.url.toString().includes("?") ? "&" : "?"; - opts.url = opts.url + prefix + additionalQueryParams; - } - if (typeof options.maxContentLength === "number") { - opts.size = options.maxContentLength; - } - if (typeof options.maxRedirects === "number") { - opts.follow = options.maxRedirects; - } - opts.headers = opts.headers || {}; - if (opts.multipart === undefined && opts.data) { - const isFormData = typeof FormData === "undefined" ? false : (opts === null || opts === undefined ? undefined : opts.data) instanceof FormData; - if (is_stream_1.default.readable(opts.data)) { - opts.body = opts.data; - } else if (hasBuffer() && Buffer.isBuffer(opts.data)) { - opts.body = opts.data; - if (!hasHeader(opts, "Content-Type")) { - opts.headers["Content-Type"] = "application/json"; - } - } else if (typeof opts.data === "object") { - if (!isFormData) { - if (getHeader(opts, "content-type") === "application/x-www-form-urlencoded") { - opts.body = opts.paramsSerializer(opts.data); - } else { - if (!hasHeader(opts, "Content-Type")) { - opts.headers["Content-Type"] = "application/json"; - } - opts.body = JSON.stringify(opts.data); - } - } - } else { - opts.body = opts.data; - } - } else if (opts.multipart && opts.multipart.length > 0) { - const boundary = (0, uuid_1.v4)(); - opts.headers["Content-Type"] = `multipart/related; boundary=${boundary}`; - const bodyStream = new stream_1.PassThrough; - opts.body = bodyStream; - (0, stream_1.pipeline)(this.getMultipartRequest(opts.multipart, boundary), bodyStream, () => {}); - } - opts.validateStatus = opts.validateStatus || this.validateStatus; - opts.responseType = opts.responseType || "unknown"; - if (!opts.headers["Accept"] && opts.responseType === "json") { - opts.headers["Accept"] = "application/json"; - } - opts.method = opts.method || "GET"; - const proxy = opts.proxy || ((_b = process === null || process === undefined ? undefined : process.env) === null || _b === undefined ? undefined : _b.HTTPS_PROXY) || ((_c = process === null || process === undefined ? undefined : process.env) === null || _c === undefined ? undefined : _c.https_proxy) || ((_d = process === null || process === undefined ? undefined : process.env) === null || _d === undefined ? undefined : _d.HTTP_PROXY) || ((_e = process === null || process === undefined ? undefined : process.env) === null || _e === undefined ? undefined : _e.http_proxy); - const urlMayUseProxy = __classPrivateFieldGet(this, _Gaxios_instances, "m", _Gaxios_urlMayUseProxy).call(this, opts.url, opts.noProxy); - if (opts.agent) {} else if (proxy && urlMayUseProxy) { - const HttpsProxyAgent = await __classPrivateFieldGet(_a2, _a2, "m", _Gaxios_getProxyAgent).call(_a2); - if (this.agentCache.has(proxy)) { - opts.agent = this.agentCache.get(proxy); - } else { - opts.agent = new HttpsProxyAgent(proxy, { - cert: opts.cert, - key: opts.key - }); - this.agentCache.set(proxy, opts.agent); - } - } else if (opts.cert && opts.key) { - if (this.agentCache.has(opts.key)) { - opts.agent = this.agentCache.get(opts.key); - } else { - opts.agent = new https_1.Agent({ - cert: opts.cert, - key: opts.key - }); - this.agentCache.set(opts.key, opts.agent); - } - } - if (typeof opts.errorRedactor !== "function" && opts.errorRedactor !== false) { - opts.errorRedactor = common_1.defaultErrorRedactor; - } - return opts; - }, _Gaxios_getProxyAgent = async function _Gaxios_getProxyAgent() { - __classPrivateFieldSet(this, _a2, __classPrivateFieldGet(this, _a2, "f", _Gaxios_proxyAgent) || (await Promise.resolve().then(() => __importStar(require_dist3()))).HttpsProxyAgent, "f", _Gaxios_proxyAgent); - return __classPrivateFieldGet(this, _a2, "f", _Gaxios_proxyAgent); - }; - _Gaxios_proxyAgent = { value: undefined }; -}); - -// ../../../../node_modules/.bun/gaxios@6.7.1/node_modules/gaxios/build/src/index.js -var require_src57 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.instance = exports.Gaxios = exports.GaxiosError = undefined; - exports.request = request; - var gaxios_1 = require_gaxios(); - Object.defineProperty(exports, "Gaxios", { enumerable: true, get: function() { - return gaxios_1.Gaxios; - } }); - var common_1 = require_common2(); - Object.defineProperty(exports, "GaxiosError", { enumerable: true, get: function() { - return common_1.GaxiosError; - } }); - __exportStar(require_interceptor(), exports); - exports.instance = new gaxios_1.Gaxios; - async function request(opts) { - return exports.instance.request(opts); - } -}); - -// ../../../../node_modules/.bun/bignumber.js@9.3.1/node_modules/bignumber.js/bignumber.js -var require_bignumber = __commonJS((exports, module) => { - (function(globalObject) { - var BigNumber, isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, mathceil = Math.ceil, mathfloor = Math.floor, bignumberError = "[BigNumber Error] ", tooManyDigits = bignumberError + "Number primitive has more than 15 significant digits: ", BASE = 100000000000000, LOG_BASE = 14, MAX_SAFE_INTEGER = 9007199254740991, POWS_TEN = [1, 10, 100, 1000, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 10000000000, 100000000000, 1000000000000, 10000000000000], SQRT_BASE = 1e7, MAX = 1e9; - function clone2(configObject) { - var div, convertBase, parseNumeric, P = BigNumber2.prototype = { constructor: BigNumber2, toString: null, valueOf: null }, ONE = new BigNumber2(1), DECIMAL_PLACES = 20, ROUNDING_MODE = 4, TO_EXP_NEG = -7, TO_EXP_POS = 21, MIN_EXP = -1e7, MAX_EXP = 1e7, CRYPTO = false, MODULO_MODE = 1, POW_PRECISION = 0, FORMAT = { - prefix: "", - groupSize: 3, - secondaryGroupSize: 0, - groupSeparator: ",", - decimalSeparator: ".", - fractionGroupSize: 0, - fractionGroupSeparator: "\xA0", - suffix: "" - }, ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz", alphabetHasNormalDecimalDigits = true; - function BigNumber2(v, b) { - var alphabet, c, caseChanged, e, i, isNum, len, str, x = this; - if (!(x instanceof BigNumber2)) - return new BigNumber2(v, b); - if (b == null) { - if (v && v._isBigNumber === true) { - x.s = v.s; - if (!v.c || v.e > MAX_EXP) { - x.c = x.e = null; - } else if (v.e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = v.e; - x.c = v.c.slice(); - } - return; - } - if ((isNum = typeof v == "number") && v * 0 == 0) { - x.s = 1 / v < 0 ? (v = -v, -1) : 1; - if (v === ~~v) { - for (e = 0, i = v;i >= 10; i /= 10, e++) - ; - if (e > MAX_EXP) { - x.c = x.e = null; - } else { - x.e = e; - x.c = [v]; - } - return; - } - str = String(v); - } else { - if (!isNumeric.test(str = String(v))) - return parseNumeric(x, str, isNum); - x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; - } - if ((e = str.indexOf(".")) > -1) - str = str.replace(".", ""); - if ((i = str.search(/e/i)) > 0) { - if (e < 0) - e = i; - e += +str.slice(i + 1); - str = str.substring(0, i); - } else if (e < 0) { - e = str.length; - } - } else { - intCheck(b, 2, ALPHABET.length, "Base"); - if (b == 10 && alphabetHasNormalDecimalDigits) { - x = new BigNumber2(v); - return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); - } - str = String(v); - if (isNum = typeof v == "number") { - if (v * 0 != 0) - return parseNumeric(x, str, isNum, b); - x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; - if (BigNumber2.DEBUG && str.replace(/^0\.0*|\./, "").length > 15) { - throw Error(tooManyDigits + v); - } - } else { - x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; - } - alphabet = ALPHABET.slice(0, b); - e = i = 0; - for (len = str.length;i < len; i++) { - if (alphabet.indexOf(c = str.charAt(i)) < 0) { - if (c == ".") { - if (i > e) { - e = len; - continue; - } - } else if (!caseChanged) { - if (str == str.toUpperCase() && (str = str.toLowerCase()) || str == str.toLowerCase() && (str = str.toUpperCase())) { - caseChanged = true; - i = -1; - e = 0; - continue; - } - } - return parseNumeric(x, String(v), isNum, b); - } - } - isNum = false; - str = convertBase(str, b, 10, x.s); - if ((e = str.indexOf(".")) > -1) - str = str.replace(".", ""); - else - e = str.length; - } - for (i = 0;str.charCodeAt(i) === 48; i++) - ; - for (len = str.length;str.charCodeAt(--len) === 48; ) - ; - if (str = str.slice(i, ++len)) { - len -= i; - if (isNum && BigNumber2.DEBUG && len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { - throw Error(tooManyDigits + x.s * v); - } - if ((e = e - i - 1) > MAX_EXP) { - x.c = x.e = null; - } else if (e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = e; - x.c = []; - i = (e + 1) % LOG_BASE; - if (e < 0) - i += LOG_BASE; - if (i < len) { - if (i) - x.c.push(+str.slice(0, i)); - for (len -= LOG_BASE;i < len; ) { - x.c.push(+str.slice(i, i += LOG_BASE)); - } - i = LOG_BASE - (str = str.slice(i)).length; - } else { - i -= len; - } - for (;i--; str += "0") - ; - x.c.push(+str); - } - } else { - x.c = [x.e = 0]; - } - } - BigNumber2.clone = clone2; - BigNumber2.ROUND_UP = 0; - BigNumber2.ROUND_DOWN = 1; - BigNumber2.ROUND_CEIL = 2; - BigNumber2.ROUND_FLOOR = 3; - BigNumber2.ROUND_HALF_UP = 4; - BigNumber2.ROUND_HALF_DOWN = 5; - BigNumber2.ROUND_HALF_EVEN = 6; - BigNumber2.ROUND_HALF_CEIL = 7; - BigNumber2.ROUND_HALF_FLOOR = 8; - BigNumber2.EUCLID = 9; - BigNumber2.config = BigNumber2.set = function(obj) { - var p, v; - if (obj != null) { - if (typeof obj == "object") { - if (obj.hasOwnProperty(p = "DECIMAL_PLACES")) { - v = obj[p]; - intCheck(v, 0, MAX, p); - DECIMAL_PLACES = v; - } - if (obj.hasOwnProperty(p = "ROUNDING_MODE")) { - v = obj[p]; - intCheck(v, 0, 8, p); - ROUNDING_MODE = v; - } - if (obj.hasOwnProperty(p = "EXPONENTIAL_AT")) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, 0, p); - intCheck(v[1], 0, MAX, p); - TO_EXP_NEG = v[0]; - TO_EXP_POS = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); - } - } - if (obj.hasOwnProperty(p = "RANGE")) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, -1, p); - intCheck(v[1], 1, MAX, p); - MIN_EXP = v[0]; - MAX_EXP = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - if (v) { - MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); - } else { - throw Error(bignumberError + p + " cannot be zero: " + v); - } - } - } - if (obj.hasOwnProperty(p = "CRYPTO")) { - v = obj[p]; - if (v === !!v) { - if (v) { - if (typeof crypto != "undefined" && crypto && (crypto.getRandomValues || crypto.randomBytes)) { - CRYPTO = v; - } else { - CRYPTO = !v; - throw Error(bignumberError + "crypto unavailable"); - } - } else { - CRYPTO = v; - } - } else { - throw Error(bignumberError + p + " not true or false: " + v); - } - } - if (obj.hasOwnProperty(p = "MODULO_MODE")) { - v = obj[p]; - intCheck(v, 0, 9, p); - MODULO_MODE = v; - } - if (obj.hasOwnProperty(p = "POW_PRECISION")) { - v = obj[p]; - intCheck(v, 0, MAX, p); - POW_PRECISION = v; - } - if (obj.hasOwnProperty(p = "FORMAT")) { - v = obj[p]; - if (typeof v == "object") - FORMAT = v; - else - throw Error(bignumberError + p + " not an object: " + v); - } - if (obj.hasOwnProperty(p = "ALPHABET")) { - v = obj[p]; - if (typeof v == "string" && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) { - alphabetHasNormalDecimalDigits = v.slice(0, 10) == "0123456789"; - ALPHABET = v; - } else { - throw Error(bignumberError + p + " invalid: " + v); - } - } - } else { - throw Error(bignumberError + "Object expected: " + obj); - } - } - return { - DECIMAL_PLACES, - ROUNDING_MODE, - EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], - RANGE: [MIN_EXP, MAX_EXP], - CRYPTO, - MODULO_MODE, - POW_PRECISION, - FORMAT, - ALPHABET - }; - }; - BigNumber2.isBigNumber = function(v) { - if (!v || v._isBigNumber !== true) - return false; - if (!BigNumber2.DEBUG) - return true; - var i, n, c = v.c, e = v.e, s2 = v.s; - out: - if ({}.toString.call(c) == "[object Array]") { - if ((s2 === 1 || s2 === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { - if (c[0] === 0) { - if (e === 0 && c.length === 1) - return true; - break out; - } - i = (e + 1) % LOG_BASE; - if (i < 1) - i += LOG_BASE; - if (String(c[0]).length == i) { - for (i = 0;i < c.length; i++) { - n = c[i]; - if (n < 0 || n >= BASE || n !== mathfloor(n)) - break out; - } - if (n !== 0) - return true; - } - } - } else if (c === null && e === null && (s2 === null || s2 === 1 || s2 === -1)) { - return true; - } - throw Error(bignumberError + "Invalid BigNumber: " + v); - }; - BigNumber2.maximum = BigNumber2.max = function() { - return maxOrMin(arguments, -1); - }; - BigNumber2.minimum = BigNumber2.min = function() { - return maxOrMin(arguments, 1); - }; - BigNumber2.random = function() { - var pow2_53 = 9007199254740992; - var random53bitInt = Math.random() * pow2_53 & 2097151 ? function() { - return mathfloor(Math.random() * pow2_53); - } : function() { - return (Math.random() * 1073741824 | 0) * 8388608 + (Math.random() * 8388608 | 0); - }; - return function(dp) { - var a, b, e, k, v, i = 0, c = [], rand = new BigNumber2(ONE); - if (dp == null) - dp = DECIMAL_PLACES; - else - intCheck(dp, 0, MAX); - k = mathceil(dp / LOG_BASE); - if (CRYPTO) { - if (crypto.getRandomValues) { - a = crypto.getRandomValues(new Uint32Array(k *= 2)); - for (;i < k; ) { - v = a[i] * 131072 + (a[i + 1] >>> 11); - if (v >= 9000000000000000) { - b = crypto.getRandomValues(new Uint32Array(2)); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - c.push(v % 100000000000000); - i += 2; - } - } - i = k / 2; - } else if (crypto.randomBytes) { - a = crypto.randomBytes(k *= 7); - for (;i < k; ) { - v = (a[i] & 31) * 281474976710656 + a[i + 1] * 1099511627776 + a[i + 2] * 4294967296 + a[i + 3] * 16777216 + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; - if (v >= 9000000000000000) { - crypto.randomBytes(7).copy(a, i); - } else { - c.push(v % 100000000000000); - i += 7; - } - } - i = k / 7; - } else { - CRYPTO = false; - throw Error(bignumberError + "crypto unavailable"); - } - } - if (!CRYPTO) { - for (;i < k; ) { - v = random53bitInt(); - if (v < 9000000000000000) - c[i++] = v % 100000000000000; - } - } - k = c[--i]; - dp %= LOG_BASE; - if (k && dp) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor(k / v) * v; - } - for (;c[i] === 0; c.pop(), i--) - ; - if (i < 0) { - c = [e = 0]; - } else { - for (e = -1;c[0] === 0; c.splice(0, 1), e -= LOG_BASE) - ; - for (i = 1, v = c[0];v >= 10; v /= 10, i++) - ; - if (i < LOG_BASE) - e -= LOG_BASE - i; - } - rand.e = e; - rand.c = c; - return rand; - }; - }(); - BigNumber2.sum = function() { - var i = 1, args = arguments, sum = new BigNumber2(args[0]); - for (;i < args.length; ) - sum = sum.plus(args[i++]); - return sum; - }; - convertBase = function() { - var decimal = "0123456789"; - function toBaseOut(str, baseIn, baseOut, alphabet) { - var j, arr = [0], arrL, i = 0, len = str.length; - for (;i < len; ) { - for (arrL = arr.length;arrL--; arr[arrL] *= baseIn) - ; - arr[0] += alphabet.indexOf(str.charAt(i++)); - for (j = 0;j < arr.length; j++) { - if (arr[j] > baseOut - 1) { - if (arr[j + 1] == null) - arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - return arr.reverse(); - } - return function(str, baseIn, baseOut, sign, callerIsToString) { - var alphabet, d, e, k, r, x, xc, y, i = str.indexOf("."), dp = DECIMAL_PLACES, rm = ROUNDING_MODE; - if (i >= 0) { - k = POW_PRECISION; - POW_PRECISION = 0; - str = str.replace(".", ""); - y = new BigNumber2(baseIn); - x = y.pow(str.length - i); - POW_PRECISION = k; - y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, "0"), 10, baseOut, decimal); - y.e = y.c.length; - } - xc = toBaseOut(str, baseIn, baseOut, callerIsToString ? (alphabet = ALPHABET, decimal) : (alphabet = decimal, ALPHABET)); - e = k = xc.length; - for (;xc[--k] == 0; xc.pop()) - ; - if (!xc[0]) - return alphabet.charAt(0); - if (i < 0) { - --e; - } else { - x.c = xc; - x.e = e; - x.s = sign; - x = div(x, y, dp, rm, baseOut); - xc = x.c; - r = x.r; - e = x.e; - } - d = e + dp + 1; - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : i > k || i == k && (rm == 4 || r || rm == 6 && xc[d - 1] & 1 || rm == (x.s < 0 ? 8 : 7)); - if (d < 1 || !xc[0]) { - str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); - } else { - xc.length = d; - if (r) { - for (--baseOut;++xc[--d] > baseOut; ) { - xc[d] = 0; - if (!d) { - ++e; - xc = [1].concat(xc); - } - } - } - for (k = xc.length;!xc[--k]; ) - ; - for (i = 0, str = "";i <= k; str += alphabet.charAt(xc[i++])) - ; - str = toFixedPoint(str, e, alphabet.charAt(0)); - } - return str; - }; - }(); - div = function() { - function multiply(x, k, base) { - var m, temp, xlo, xhi, carry = 0, i = x.length, klo = k % SQRT_BASE, khi = k / SQRT_BASE | 0; - for (x = x.slice();i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + m % SQRT_BASE * SQRT_BASE + carry; - carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; - x[i] = temp % base; - } - if (carry) - x = [carry].concat(x); - return x; - } - function compare2(a, b, aL, bL) { - var i, cmp; - if (aL != bL) { - cmp = aL > bL ? 1 : -1; - } else { - for (i = cmp = 0;i < aL; i++) { - if (a[i] != b[i]) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - function subtract(a, b, aL, base) { - var i = 0; - for (;aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - for (;!a[0] && a.length > 1; a.splice(0, 1)) - ; - } - return function(x, y, dp, rm, base) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, yL, yz, s2 = x.s == y.s ? 1 : -1, xc = x.c, yc = y.c; - if (!xc || !xc[0] || !yc || !yc[0]) { - return new BigNumber2(!x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : xc && xc[0] == 0 || !yc ? s2 * 0 : s2 / 0); - } - q = new BigNumber2(s2); - qc = q.c = []; - e = x.e - y.e; - s2 = dp + e + 1; - if (!base) { - base = BASE; - e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); - s2 = s2 / LOG_BASE | 0; - } - for (i = 0;yc[i] == (xc[i] || 0); i++) - ; - if (yc[i] > (xc[i] || 0)) - e--; - if (s2 < 0) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s2 += 2; - n = mathfloor(base / (yc[0] + 1)); - if (n > 1) { - yc = multiply(yc, n, base); - xc = multiply(xc, n, base); - yL = yc.length; - xL = xc.length; - } - xi = yL; - rem = xc.slice(0, yL); - remL = rem.length; - for (;remL < yL; rem[remL++] = 0) - ; - yz = yc.slice(); - yz = [0].concat(yz); - yc0 = yc[0]; - if (yc[1] >= base / 2) - yc0++; - do { - n = 0; - cmp = compare2(yc, rem, yL, remL); - if (cmp < 0) { - rem0 = rem[0]; - if (yL != remL) - rem0 = rem0 * base + (rem[1] || 0); - n = mathfloor(rem0 / yc0); - if (n > 1) { - if (n >= base) - n = base - 1; - prod = multiply(yc, n, base); - prodL = prod.length; - remL = rem.length; - while (compare2(prod, rem, prodL, remL) == 1) { - n--; - subtract(prod, yL < prodL ? yz : yc, prodL, base); - prodL = prod.length; - cmp = 1; - } - } else { - if (n == 0) { - cmp = n = 1; - } - prod = yc.slice(); - prodL = prod.length; - } - if (prodL < remL) - prod = [0].concat(prod); - subtract(rem, prod, remL, base); - remL = rem.length; - if (cmp == -1) { - while (compare2(yc, rem, yL, remL) < 1) { - n++; - subtract(rem, yL < remL ? yz : yc, remL, base); - remL = rem.length; - } - } - } else if (cmp === 0) { - n++; - rem = [0]; - } - qc[i++] = n; - if (rem[0]) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [xc[xi]]; - remL = 1; - } - } while ((xi++ < xL || rem[0] != null) && s2--); - more = rem[0] != null; - if (!qc[0]) - qc.splice(0, 1); - } - if (base == BASE) { - for (i = 1, s2 = qc[0];s2 >= 10; s2 /= 10, i++) - ; - round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); - } else { - q.e = e; - q.r = +more; - } - return q; - }; - }(); - function format(n, i, rm, id) { - var c0, e, ne, len, str; - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - if (!n.c) - return n.toString(); - c0 = n.c[0]; - ne = n.e; - if (i == null) { - str = coeffToString(n.c); - str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) ? toExponential(str, ne) : toFixedPoint(str, ne, "0"); - } else { - n = round(new BigNumber2(n), i, rm); - e = n.e; - str = coeffToString(n.c); - len = str.length; - if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { - for (;len < i; str += "0", len++) - ; - str = toExponential(str, e); - } else { - i -= ne + (id === 2 && e > ne); - str = toFixedPoint(str, e, "0"); - if (e + 1 > len) { - if (--i > 0) - for (str += ".";i--; str += "0") - ; - } else { - i += e - len; - if (i > 0) { - if (e + 1 == len) - str += "."; - for (;i--; str += "0") - ; - } - } - } - } - return n.s < 0 && c0 ? "-" + str : str; - } - function maxOrMin(args, n) { - var k, y, i = 1, x = new BigNumber2(args[0]); - for (;i < args.length; i++) { - y = new BigNumber2(args[i]); - if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) { - x = y; - } - } - return x; - } - function normalise(n, c, e) { - var i = 1, j = c.length; - for (;!c[--j]; c.pop()) - ; - for (j = c[0];j >= 10; j /= 10, i++) - ; - if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { - n.c = n.e = null; - } else if (e < MIN_EXP) { - n.c = [n.e = 0]; - } else { - n.e = e; - n.c = c; - } - return n; - } - parseNumeric = function() { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, dotAfter = /^([^.]+)\.$/, dotBefore = /^\.([^.]+)$/, isInfinityOrNaN = /^-?(Infinity|NaN)$/, whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - return function(x, str, isNum, b) { - var base, s2 = isNum ? str : str.replace(whitespaceOrPlus, ""); - if (isInfinityOrNaN.test(s2)) { - x.s = isNaN(s2) ? null : s2 < 0 ? -1 : 1; - } else { - if (!isNum) { - s2 = s2.replace(basePrefix, function(m, p1, p2) { - base = (p2 = p2.toLowerCase()) == "x" ? 16 : p2 == "b" ? 2 : 8; - return !b || b == base ? p1 : m; - }); - if (b) { - base = b; - s2 = s2.replace(dotAfter, "$1").replace(dotBefore, "0.$1"); - } - if (str != s2) - return new BigNumber2(s2, base); - } - if (BigNumber2.DEBUG) { - throw Error(bignumberError + "Not a" + (b ? " base " + b : "") + " number: " + str); - } - x.s = null; - } - x.c = x.e = null; - }; - }(); - function round(x, sd, rm, r) { - var d, i, j, k, n, ni, rd, xc = x.c, pows10 = POWS_TEN; - if (xc) { - out: { - for (d = 1, k = xc[0];k >= 10; k /= 10, d++) - ; - i = sd - d; - if (i < 0) { - i += LOG_BASE; - j = sd; - n = xc[ni = 0]; - rd = mathfloor(n / pows10[d - j - 1] % 10); - } else { - ni = mathceil((i + 1) / LOG_BASE); - if (ni >= xc.length) { - if (r) { - for (;xc.length <= ni; xc.push(0)) - ; - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - for (d = 1;k >= 10; k /= 10, d++) - ; - i %= LOG_BASE; - j = i - LOG_BASE + d; - rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10); - } - } - r = r || sd < 0 || xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); - r = rm < 4 ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && (i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10 & 1 || rm == (x.s < 0 ? 8 : 7)); - if (sd < 1 || !xc[0]) { - xc.length = 0; - if (r) { - sd -= x.e + 1; - xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; - x.e = -sd || 0; - } else { - xc[0] = x.e = 0; - } - return x; - } - if (i == 0) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[LOG_BASE - i]; - xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; - } - if (r) { - for (;; ) { - if (ni == 0) { - for (i = 1, j = xc[0];j >= 10; j /= 10, i++) - ; - j = xc[0] += k; - for (k = 1;j >= 10; j /= 10, k++) - ; - if (i != k) { - x.e++; - if (xc[0] == BASE) - xc[0] = 1; - } - break; - } else { - xc[ni] += k; - if (xc[ni] != BASE) - break; - xc[ni--] = 0; - k = 1; - } - } - } - for (i = xc.length;xc[--i] === 0; xc.pop()) - ; - } - if (x.e > MAX_EXP) { - x.c = x.e = null; - } else if (x.e < MIN_EXP) { - x.c = [x.e = 0]; - } - } - return x; - } - function valueOf(n) { - var str, e = n.e; - if (e === null) - return n.toString(); - str = coeffToString(n.c); - str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(str, e) : toFixedPoint(str, e, "0"); - return n.s < 0 ? "-" + str : str; - } - P.absoluteValue = P.abs = function() { - var x = new BigNumber2(this); - if (x.s < 0) - x.s = 1; - return x; - }; - P.comparedTo = function(y, b) { - return compare(this, new BigNumber2(y, b)); - }; - P.decimalPlaces = P.dp = function(dp, rm) { - var c, n, v, x = this; - if (dp != null) { - intCheck(dp, 0, MAX); - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - return round(new BigNumber2(x), dp + x.e + 1, rm); - } - if (!(c = x.c)) - return null; - n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; - if (v = c[v]) - for (;v % 10 == 0; v /= 10, n--) - ; - if (n < 0) - n = 0; - return n; - }; - P.dividedBy = P.div = function(y, b) { - return div(this, new BigNumber2(y, b), DECIMAL_PLACES, ROUNDING_MODE); - }; - P.dividedToIntegerBy = P.idiv = function(y, b) { - return div(this, new BigNumber2(y, b), 0, 1); - }; - P.exponentiatedBy = P.pow = function(n, m) { - var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, x = this; - n = new BigNumber2(n); - if (n.c && !n.isInteger()) { - throw Error(bignumberError + "Exponent not an integer: " + valueOf(n)); - } - if (m != null) - m = new BigNumber2(m); - nIsBig = n.e > 14; - if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { - y = new BigNumber2(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n))); - return m ? y.mod(m) : y; - } - nIsNeg = n.s < 0; - if (m) { - if (m.c ? !m.c[0] : !m.s) - return new BigNumber2(NaN); - isModExp = !nIsNeg && x.isInteger() && m.isInteger(); - if (isModExp) - x = x.mod(m); - } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 ? x.c[0] > 1 || nIsBig && x.c[1] >= 240000000 : x.c[0] < 80000000000000 || nIsBig && x.c[0] <= 99999750000000))) { - k = x.s < 0 && isOdd(n) ? -0 : 0; - if (x.e > -1) - k = 1 / k; - return new BigNumber2(nIsNeg ? 1 / k : k); - } else if (POW_PRECISION) { - k = mathceil(POW_PRECISION / LOG_BASE + 2); - } - if (nIsBig) { - half = new BigNumber2(0.5); - if (nIsNeg) - n.s = 1; - nIsOdd = isOdd(n); - } else { - i = Math.abs(+valueOf(n)); - nIsOdd = i % 2; - } - y = new BigNumber2(ONE); - for (;; ) { - if (nIsOdd) { - y = y.times(x); - if (!y.c) - break; - if (k) { - if (y.c.length > k) - y.c.length = k; - } else if (isModExp) { - y = y.mod(m); - } - } - if (i) { - i = mathfloor(i / 2); - if (i === 0) - break; - nIsOdd = i % 2; - } else { - n = n.times(half); - round(n, n.e + 1, 1); - if (n.e > 14) { - nIsOdd = isOdd(n); - } else { - i = +valueOf(n); - if (i === 0) - break; - nIsOdd = i % 2; - } - } - x = x.times(x); - if (k) { - if (x.c && x.c.length > k) - x.c.length = k; - } else if (isModExp) { - x = x.mod(m); - } - } - if (isModExp) - return y; - if (nIsNeg) - y = ONE.div(y); - return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; - }; - P.integerValue = function(rm) { - var n = new BigNumber2(this); - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - return round(n, n.e + 1, rm); - }; - P.isEqualTo = P.eq = function(y, b) { - return compare(this, new BigNumber2(y, b)) === 0; - }; - P.isFinite = function() { - return !!this.c; - }; - P.isGreaterThan = P.gt = function(y, b) { - return compare(this, new BigNumber2(y, b)) > 0; - }; - P.isGreaterThanOrEqualTo = P.gte = function(y, b) { - return (b = compare(this, new BigNumber2(y, b))) === 1 || b === 0; - }; - P.isInteger = function() { - return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; - }; - P.isLessThan = P.lt = function(y, b) { - return compare(this, new BigNumber2(y, b)) < 0; - }; - P.isLessThanOrEqualTo = P.lte = function(y, b) { - return (b = compare(this, new BigNumber2(y, b))) === -1 || b === 0; - }; - P.isNaN = function() { - return !this.s; - }; - P.isNegative = function() { - return this.s < 0; - }; - P.isPositive = function() { - return this.s > 0; - }; - P.isZero = function() { - return !!this.c && this.c[0] == 0; - }; - P.minus = function(y, b) { - var i, j, t, xLTy, x = this, a = x.s; - y = new BigNumber2(y, b); - b = y.s; - if (!a || !b) - return new BigNumber2(NaN); - if (a != b) { - y.s = -b; - return x.plus(y); - } - var xe = x.e / LOG_BASE, ye = y.e / LOG_BASE, xc = x.c, yc = y.c; - if (!xe || !ye) { - if (!xc || !yc) - return xc ? (y.s = -b, y) : new BigNumber2(yc ? x : NaN); - if (!xc[0] || !yc[0]) { - return yc[0] ? (y.s = -b, y) : new BigNumber2(xc[0] ? x : ROUNDING_MODE == 3 ? -0 : 0); - } - } - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - if (a = xe - ye) { - if (xLTy = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - t.reverse(); - for (b = a;b--; t.push(0)) - ; - t.reverse(); - } else { - j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; - for (a = b = 0;b < j; b++) { - if (xc[b] != yc[b]) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - if (xLTy) { - t = xc; - xc = yc; - yc = t; - y.s = -y.s; - } - b = (j = yc.length) - (i = xc.length); - if (b > 0) - for (;b--; xc[i++] = 0) - ; - b = BASE - 1; - for (;j > a; ) { - if (xc[--j] < yc[j]) { - for (i = j;i && !xc[--i]; xc[i] = b) - ; - --xc[i]; - xc[j] += BASE; - } - xc[j] -= yc[j]; - } - for (;xc[0] == 0; xc.splice(0, 1), --ye) - ; - if (!xc[0]) { - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [y.e = 0]; - return y; - } - return normalise(y, xc, ye); - }; - P.modulo = P.mod = function(y, b) { - var q, s2, x = this; - y = new BigNumber2(y, b); - if (!x.c || !y.s || y.c && !y.c[0]) { - return new BigNumber2(NaN); - } else if (!y.c || x.c && !x.c[0]) { - return new BigNumber2(x); - } - if (MODULO_MODE == 9) { - s2 = y.s; - y.s = 1; - q = div(x, y, 0, 3); - y.s = s2; - q.s *= s2; - } else { - q = div(x, y, 0, MODULO_MODE); - } - y = x.minus(q.times(y)); - if (!y.c[0] && MODULO_MODE == 1) - y.s = x.s; - return y; - }; - P.multipliedBy = P.times = function(y, b) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, base, sqrtBase, x = this, xc = x.c, yc = (y = new BigNumber2(y, b)).c; - if (!xc || !yc || !xc[0] || !yc[0]) { - if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - if (!xc || !yc) { - y.c = y.e = null; - } else { - y.c = [0]; - y.e = 0; - } - } - return y; - } - e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - if (xcL < ycL) { - zc = xc; - xc = yc; - yc = zc; - i = xcL; - xcL = ycL; - ycL = i; - } - for (i = xcL + ycL, zc = [];i--; zc.push(0)) - ; - base = BASE; - sqrtBase = SQRT_BASE; - for (i = ycL;--i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - for (k = xcL, j = i + k;j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + m % sqrtBase * sqrtBase + zc[j] + c; - c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; - zc[j--] = xlo % base; - } - zc[j] = c; - } - if (c) { - ++e; - } else { - zc.splice(0, 1); - } - return normalise(y, zc, e); - }; - P.negated = function() { - var x = new BigNumber2(this); - x.s = -x.s || null; - return x; - }; - P.plus = function(y, b) { - var t, x = this, a = x.s; - y = new BigNumber2(y, b); - b = y.s; - if (!a || !b) - return new BigNumber2(NaN); - if (a != b) { - y.s = -b; - return x.minus(y); - } - var xe = x.e / LOG_BASE, ye = y.e / LOG_BASE, xc = x.c, yc = y.c; - if (!xe || !ye) { - if (!xc || !yc) - return new BigNumber2(a / 0); - if (!xc[0] || !yc[0]) - return yc[0] ? y : new BigNumber2(xc[0] ? x : a * 0); - } - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - if (a = xe - ye) { - if (a > 0) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - t.reverse(); - for (;a--; t.push(0)) - ; - t.reverse(); - } - a = xc.length; - b = yc.length; - if (a - b < 0) { - t = yc; - yc = xc; - xc = t; - b = a; - } - for (a = 0;b; ) { - a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; - xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; - } - if (a) { - xc = [a].concat(xc); - ++ye; - } - return normalise(y, xc, ye); - }; - P.precision = P.sd = function(sd, rm) { - var c, n, v, x = this; - if (sd != null && sd !== !!sd) { - intCheck(sd, 1, MAX); - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - return round(new BigNumber2(x), sd, rm); - } - if (!(c = x.c)) - return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - if (v = c[v]) { - for (;v % 10 == 0; v /= 10, n--) - ; - for (v = c[0];v >= 10; v /= 10, n++) - ; - } - if (sd && x.e + 1 > n) - n = x.e + 1; - return n; - }; - P.shiftedBy = function(k) { - intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - return this.times("1e" + k); - }; - P.squareRoot = P.sqrt = function() { - var m, n, r, rep, t, x = this, c = x.c, s2 = x.s, e = x.e, dp = DECIMAL_PLACES + 4, half = new BigNumber2("0.5"); - if (s2 !== 1 || !c || !c[0]) { - return new BigNumber2(!s2 || s2 < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); - } - s2 = Math.sqrt(+valueOf(x)); - if (s2 == 0 || s2 == 1 / 0) { - n = coeffToString(c); - if ((n.length + e) % 2 == 0) - n += "0"; - s2 = Math.sqrt(+n); - e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); - if (s2 == 1 / 0) { - n = "5e" + e; - } else { - n = s2.toExponential(); - n = n.slice(0, n.indexOf("e") + 1) + e; - } - r = new BigNumber2(n); - } else { - r = new BigNumber2(s2 + ""); - } - if (r.c[0]) { - e = r.e; - s2 = e + dp; - if (s2 < 3) - s2 = 0; - for (;; ) { - t = r; - r = half.times(t.plus(div(x, t, dp, 1))); - if (coeffToString(t.c).slice(0, s2) === (n = coeffToString(r.c)).slice(0, s2)) { - if (r.e < e) - --s2; - n = n.slice(s2 - 3, s2 + 1); - if (n == "9999" || !rep && n == "4999") { - if (!rep) { - round(t, t.e + DECIMAL_PLACES + 2, 0); - if (t.times(t).eq(x)) { - r = t; - break; - } - } - dp += 4; - s2 += 4; - rep = 1; - } else { - if (!+n || !+n.slice(1) && n.charAt(0) == "5") { - round(r, r.e + DECIMAL_PLACES + 2, 1); - m = !r.times(r).eq(x); - } - break; - } - } - } - } - return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); - }; - P.toExponential = function(dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp++; - } - return format(this, dp, rm, 1); - }; - P.toFixed = function(dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp = dp + this.e + 1; - } - return format(this, dp, rm); - }; - P.toFormat = function(dp, rm, format2) { - var str, x = this; - if (format2 == null) { - if (dp != null && rm && typeof rm == "object") { - format2 = rm; - rm = null; - } else if (dp && typeof dp == "object") { - format2 = dp; - dp = rm = null; - } else { - format2 = FORMAT; - } - } else if (typeof format2 != "object") { - throw Error(bignumberError + "Argument not an object: " + format2); - } - str = x.toFixed(dp, rm); - if (x.c) { - var i, arr = str.split("."), g1 = +format2.groupSize, g2 = +format2.secondaryGroupSize, groupSeparator = format2.groupSeparator || "", intPart = arr[0], fractionPart = arr[1], isNeg = x.s < 0, intDigits = isNeg ? intPart.slice(1) : intPart, len = intDigits.length; - if (g2) { - i = g1; - g1 = g2; - g2 = i; - len -= i; - } - if (g1 > 0 && len > 0) { - i = len % g1 || g1; - intPart = intDigits.substr(0, i); - for (;i < len; i += g1) - intPart += groupSeparator + intDigits.substr(i, g1); - if (g2 > 0) - intPart += groupSeparator + intDigits.slice(i); - if (isNeg) - intPart = "-" + intPart; - } - str = fractionPart ? intPart + (format2.decimalSeparator || "") + ((g2 = +format2.fractionGroupSize) ? fractionPart.replace(new RegExp("\\d{" + g2 + "}\\B", "g"), "$&" + (format2.fractionGroupSeparator || "")) : fractionPart) : intPart; - } - return (format2.prefix || "") + str + (format2.suffix || ""); - }; - P.toFraction = function(md) { - var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s2, x = this, xc = x.c; - if (md != null) { - n = new BigNumber2(md); - if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { - throw Error(bignumberError + "Argument " + (n.isInteger() ? "out of range: " : "not an integer: ") + valueOf(n)); - } - } - if (!xc) - return new BigNumber2(x); - d = new BigNumber2(ONE); - n1 = d0 = new BigNumber2(ONE); - d1 = n0 = new BigNumber2(ONE); - s2 = coeffToString(xc); - e = d.e = s2.length - x.e - 1; - d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; - md = !md || n.comparedTo(d) > 0 ? e > 0 ? d : n1 : n; - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber2(s2); - n0.c[0] = 0; - for (;; ) { - q = div(n, d, 0, 1); - d2 = d0.plus(q.times(d1)); - if (d2.comparedTo(md) == 1) - break; - d0 = d1; - d1 = d2; - n1 = n0.plus(q.times(d2 = n1)); - n0 = d2; - d = n.minus(q.times(d2 = d)); - n = d2; - } - d2 = div(md.minus(d0), d1, 0, 1); - n0 = n0.plus(d2.times(n1)); - d0 = d0.plus(d2.times(d1)); - n0.s = n1.s = x.s; - e = e * 2; - r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; - MAX_EXP = exp; - return r; - }; - P.toNumber = function() { - return +valueOf(this); - }; - P.toPrecision = function(sd, rm) { - if (sd != null) - intCheck(sd, 1, MAX); - return format(this, sd, rm, 2); - }; - P.toString = function(b) { - var str, n = this, s2 = n.s, e = n.e; - if (e === null) { - if (s2) { - str = "Infinity"; - if (s2 < 0) - str = "-" + str; - } else { - str = "NaN"; - } - } else { - if (b == null) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(coeffToString(n.c), e) : toFixedPoint(coeffToString(n.c), e, "0"); - } else if (b === 10 && alphabetHasNormalDecimalDigits) { - n = round(new BigNumber2(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); - str = toFixedPoint(coeffToString(n.c), n.e, "0"); - } else { - intCheck(b, 2, ALPHABET.length, "Base"); - str = convertBase(toFixedPoint(coeffToString(n.c), e, "0"), 10, b, s2, true); - } - if (s2 < 0 && n.c[0]) - str = "-" + str; - } - return str; - }; - P.valueOf = P.toJSON = function() { - return valueOf(this); - }; - P._isBigNumber = true; - if (configObject != null) - BigNumber2.set(configObject); - return BigNumber2; - } - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - function coeffToString(a) { - var s2, z2, i = 1, j = a.length, r = a[0] + ""; - for (;i < j; ) { - s2 = a[i++] + ""; - z2 = LOG_BASE - s2.length; - for (;z2--; s2 = "0" + s2) - ; - r += s2; - } - for (j = r.length;r.charCodeAt(--j) === 48; ) - ; - return r.slice(0, j + 1 || 1); - } - function compare(x, y) { - var a, b, xc = x.c, yc = y.c, i = x.s, j = y.s, k = x.e, l = y.e; - if (!i || !j) - return null; - a = xc && !xc[0]; - b = yc && !yc[0]; - if (a || b) - return a ? b ? 0 : -j : i; - if (i != j) - return i; - a = i < 0; - b = k == l; - if (!xc || !yc) - return b ? 0 : !xc ^ a ? 1 : -1; - if (!b) - return k > l ^ a ? 1 : -1; - j = (k = xc.length) < (l = yc.length) ? k : l; - for (i = 0;i < j; i++) - if (xc[i] != yc[i]) - return xc[i] > yc[i] ^ a ? 1 : -1; - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - function intCheck(n, min, max, name) { - if (n < min || n > max || n !== mathfloor(n)) { - throw Error(bignumberError + (name || "Argument") + (typeof n == "number" ? n < min || n > max ? " out of range: " : " not an integer: " : " not a primitive number: ") + String(n)); - } - } - function isOdd(n) { - var k = n.c.length - 1; - return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; - } - function toExponential(str, e) { - return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e < 0 ? "e" : "e+") + e; - } - function toFixedPoint(str, e, z2) { - var len, zs; - if (e < 0) { - for (zs = z2 + ".";++e; zs += z2) - ; - str = zs + str; - } else { - len = str.length; - if (++e > len) { - for (zs = z2, e -= len;--e; zs += z2) - ; - str += zs; - } else if (e < len) { - str = str.slice(0, e) + "." + str.slice(e); - } - } - return str; - } - BigNumber = clone2(); - BigNumber["default"] = BigNumber.BigNumber = BigNumber; - if (typeof define == "function" && define.amd) { - define(function() { - return BigNumber; - }); - } else if (typeof module != "undefined" && module.exports) { - module.exports = BigNumber; - } else { - if (!globalObject) { - globalObject = typeof self != "undefined" && self ? self : window; - } - globalObject.BigNumber = BigNumber; - } - })(exports); -}); - -// ../../../../node_modules/.bun/json-bigint@1.0.0/node_modules/json-bigint/lib/stringify.js -var require_stringify2 = __commonJS((exports, module) => { - var BigNumber = require_bignumber(); - var JSON2 = exports; - (function() { - function f(n) { - return n < 10 ? "0" + n : n; - } - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta3 = { - "\b": "\\b", - "\t": "\\t", - "\n": "\\n", - "\f": "\\f", - "\r": "\\r", - '"': "\\\"", - "\\": "\\\\" - }, rep; - function quote(string5) { - escapable.lastIndex = 0; - return escapable.test(string5) ? '"' + string5.replace(escapable, function(a) { - var c = meta3[a]; - return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string5 + '"'; - } - function str(key, holder) { - var i, k, v, length, mind = gap, partial2, value = holder[key], isBigNumber = value != null && (value instanceof BigNumber || BigNumber.isBigNumber(value)); - if (value && typeof value === "object" && typeof value.toJSON === "function") { - value = value.toJSON(key); - } - if (typeof rep === "function") { - value = rep.call(holder, key, value); - } - switch (typeof value) { - case "string": - if (isBigNumber) { - return value; - } else { - return quote(value); - } - case "number": - return isFinite(value) ? String(value) : "null"; - case "boolean": - case "null": - case "bigint": - return String(value); - case "object": - if (!value) { - return "null"; - } - gap += indent; - partial2 = []; - if (Object.prototype.toString.apply(value) === "[object Array]") { - length = value.length; - for (i = 0;i < length; i += 1) { - partial2[i] = str(i, value) || "null"; - } - v = partial2.length === 0 ? "[]" : gap ? `[ -` + gap + partial2.join(`, -` + gap) + ` -` + mind + "]" : "[" + partial2.join(",") + "]"; - gap = mind; - return v; - } - if (rep && typeof rep === "object") { - length = rep.length; - for (i = 0;i < length; i += 1) { - if (typeof rep[i] === "string") { - k = rep[i]; - v = str(k, value); - if (v) { - partial2.push(quote(k) + (gap ? ": " : ":") + v); - } - } - } - } else { - Object.keys(value).forEach(function(k2) { - var v2 = str(k2, value); - if (v2) { - partial2.push(quote(k2) + (gap ? ": " : ":") + v2); - } - }); - } - v = partial2.length === 0 ? "{}" : gap ? `{ -` + gap + partial2.join(`, -` + gap) + ` -` + mind + "}" : "{" + partial2.join(",") + "}"; - gap = mind; - return v; - } - } - if (typeof JSON2.stringify !== "function") { - JSON2.stringify = function(value, replacer, space) { - var i; - gap = ""; - indent = ""; - if (typeof space === "number") { - for (i = 0;i < space; i += 1) { - indent += " "; - } - } else if (typeof space === "string") { - indent = space; - } - rep = replacer; - if (replacer && typeof replacer !== "function" && (typeof replacer !== "object" || typeof replacer.length !== "number")) { - throw new Error("JSON.stringify"); - } - return str("", { "": value }); - }; - } - })(); -}); - -// ../../../../node_modules/.bun/json-bigint@1.0.0/node_modules/json-bigint/lib/parse.js -var require_parse2 = __commonJS((exports, module) => { - var BigNumber = null; - var suspectProtoRx = /(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/; - var suspectConstructorRx = /(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/; - var json_parse = function(options) { - var _options = { - strict: false, - storeAsString: false, - alwaysParseAsBig: false, - useNativeBigInt: false, - protoAction: "error", - constructorAction: "error" - }; - if (options !== undefined && options !== null) { - if (options.strict === true) { - _options.strict = true; - } - if (options.storeAsString === true) { - _options.storeAsString = true; - } - _options.alwaysParseAsBig = options.alwaysParseAsBig === true ? options.alwaysParseAsBig : false; - _options.useNativeBigInt = options.useNativeBigInt === true ? options.useNativeBigInt : false; - if (typeof options.constructorAction !== "undefined") { - if (options.constructorAction === "error" || options.constructorAction === "ignore" || options.constructorAction === "preserve") { - _options.constructorAction = options.constructorAction; - } else { - throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${options.constructorAction}`); - } - } - if (typeof options.protoAction !== "undefined") { - if (options.protoAction === "error" || options.protoAction === "ignore" || options.protoAction === "preserve") { - _options.protoAction = options.protoAction; - } else { - throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${options.protoAction}`); - } - } - } - var at, ch, escapee = { - '"': '"', - "\\": "\\", - "/": "/", - b: "\b", - f: "\f", - n: ` -`, - r: "\r", - t: "\t" - }, text, error48 = function(m) { - throw { - name: "SyntaxError", - message: m, - at, - text - }; - }, next = function(c) { - if (c && c !== ch) { - error48("Expected '" + c + "' instead of '" + ch + "'"); - } - ch = text.charAt(at); - at += 1; - return ch; - }, number5 = function() { - var number6, string6 = ""; - if (ch === "-") { - string6 = "-"; - next("-"); - } - while (ch >= "0" && ch <= "9") { - string6 += ch; - next(); - } - if (ch === ".") { - string6 += "."; - while (next() && ch >= "0" && ch <= "9") { - string6 += ch; - } - } - if (ch === "e" || ch === "E") { - string6 += ch; - next(); - if (ch === "-" || ch === "+") { - string6 += ch; - next(); - } - while (ch >= "0" && ch <= "9") { - string6 += ch; - next(); - } - } - number6 = +string6; - if (!isFinite(number6)) { - error48("Bad number"); - } else { - if (BigNumber == null) - BigNumber = require_bignumber(); - if (string6.length > 15) - return _options.storeAsString ? string6 : _options.useNativeBigInt ? BigInt(string6) : new BigNumber(string6); - else - return !_options.alwaysParseAsBig ? number6 : _options.useNativeBigInt ? BigInt(number6) : new BigNumber(number6); - } - }, string5 = function() { - var hex3, i, string6 = "", uffff; - if (ch === '"') { - var startAt = at; - while (next()) { - if (ch === '"') { - if (at - 1 > startAt) - string6 += text.substring(startAt, at - 1); - next(); - return string6; - } - if (ch === "\\") { - if (at - 1 > startAt) - string6 += text.substring(startAt, at - 1); - next(); - if (ch === "u") { - uffff = 0; - for (i = 0;i < 4; i += 1) { - hex3 = parseInt(next(), 16); - if (!isFinite(hex3)) { - break; - } - uffff = uffff * 16 + hex3; - } - string6 += String.fromCharCode(uffff); - } else if (typeof escapee[ch] === "string") { - string6 += escapee[ch]; - } else { - break; - } - startAt = at; - } - } - } - error48("Bad string"); - }, white = function() { - while (ch && ch <= " ") { - next(); - } - }, word = function() { - switch (ch) { - case "t": - next("t"); - next("r"); - next("u"); - next("e"); - return true; - case "f": - next("f"); - next("a"); - next("l"); - next("s"); - next("e"); - return false; - case "n": - next("n"); - next("u"); - next("l"); - next("l"); - return null; - } - error48("Unexpected '" + ch + "'"); - }, value, array3 = function() { - var array4 = []; - if (ch === "[") { - next("["); - white(); - if (ch === "]") { - next("]"); - return array4; - } - while (ch) { - array4.push(value()); - white(); - if (ch === "]") { - next("]"); - return array4; - } - next(","); - white(); - } - } - error48("Bad array"); - }, object3 = function() { - var key, object4 = Object.create(null); - if (ch === "{") { - next("{"); - white(); - if (ch === "}") { - next("}"); - return object4; - } - while (ch) { - key = string5(); - white(); - next(":"); - if (_options.strict === true && Object.hasOwnProperty.call(object4, key)) { - error48('Duplicate key "' + key + '"'); - } - if (suspectProtoRx.test(key) === true) { - if (_options.protoAction === "error") { - error48("Object contains forbidden prototype property"); - } else if (_options.protoAction === "ignore") { - value(); - } else { - object4[key] = value(); - } - } else if (suspectConstructorRx.test(key) === true) { - if (_options.constructorAction === "error") { - error48("Object contains forbidden constructor property"); - } else if (_options.constructorAction === "ignore") { - value(); - } else { - object4[key] = value(); - } - } else { - object4[key] = value(); - } - white(); - if (ch === "}") { - next("}"); - return object4; - } - next(","); - white(); - } - } - error48("Bad object"); - }; - value = function() { - white(); - switch (ch) { - case "{": - return object3(); - case "[": - return array3(); - case '"': - return string5(); - case "-": - return number5(); - default: - return ch >= "0" && ch <= "9" ? number5() : word(); - } - }; - return function(source, reviver) { - var result; - text = source + ""; - at = 0; - ch = " "; - result = value(); - white(); - if (ch) { - error48("Syntax error"); - } - return typeof reviver === "function" ? function walk(holder, key) { - var k, v, value2 = holder[key]; - if (value2 && typeof value2 === "object") { - Object.keys(value2).forEach(function(k2) { - v = walk(value2, k2); - if (v !== undefined) { - value2[k2] = v; - } else { - delete value2[k2]; - } - }); - } - return reviver.call(holder, key, value2); - }({ "": result }, "") : result; - }; - }; - module.exports = json_parse; -}); - -// ../../../../node_modules/.bun/json-bigint@1.0.0/node_modules/json-bigint/index.js -var require_json_bigint = __commonJS((exports, module) => { - var json_stringify = require_stringify2().stringify; - var json_parse = require_parse2(); - module.exports = function(options) { - return { - parse: json_parse(options), - stringify: json_stringify - }; - }; - module.exports.parse = json_parse(); - module.exports.stringify = json_stringify; -}); - -// ../../../../node_modules/.bun/gcp-metadata@6.1.1/node_modules/gcp-metadata/build/src/gcp-residency.js -var require_gcp_residency = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GCE_LINUX_BIOS_PATHS = undefined; - exports.isGoogleCloudServerless = isGoogleCloudServerless; - exports.isGoogleComputeEngineLinux = isGoogleComputeEngineLinux; - exports.isGoogleComputeEngineMACAddress = isGoogleComputeEngineMACAddress; - exports.isGoogleComputeEngine = isGoogleComputeEngine; - exports.detectGCPResidency = detectGCPResidency; - var fs_1 = __require("fs"); - var os_1 = __require("os"); - exports.GCE_LINUX_BIOS_PATHS = { - BIOS_DATE: "/sys/class/dmi/id/bios_date", - BIOS_VENDOR: "/sys/class/dmi/id/bios_vendor" - }; - var GCE_MAC_ADDRESS_REGEX = /^42:01/; - function isGoogleCloudServerless() { - const isGFEnvironment = process.env.CLOUD_RUN_JOB || process.env.FUNCTION_NAME || process.env.K_SERVICE; - return !!isGFEnvironment; - } - function isGoogleComputeEngineLinux() { - if ((0, os_1.platform)() !== "linux") - return false; - try { - (0, fs_1.statSync)(exports.GCE_LINUX_BIOS_PATHS.BIOS_DATE); - const biosVendor = (0, fs_1.readFileSync)(exports.GCE_LINUX_BIOS_PATHS.BIOS_VENDOR, "utf8"); - return /Google/.test(biosVendor); - } catch (_a2) { - return false; - } - } - function isGoogleComputeEngineMACAddress() { - const interfaces = (0, os_1.networkInterfaces)(); - for (const item of Object.values(interfaces)) { - if (!item) - continue; - for (const { mac: mac3 } of item) { - if (GCE_MAC_ADDRESS_REGEX.test(mac3)) { - return true; - } - } - } - return false; - } - function isGoogleComputeEngine() { - return isGoogleComputeEngineLinux() || isGoogleComputeEngineMACAddress(); - } - function detectGCPResidency() { - return isGoogleCloudServerless() || isGoogleComputeEngine(); - } -}); - -// ../../../../node_modules/.bun/google-logging-utils@0.0.2/node_modules/google-logging-utils/build/src/colours.js -var require_colours = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Colours = undefined; - - class Colours { - static isEnabled(stream3) { - return stream3.isTTY && (typeof stream3.getColorDepth === "function" ? stream3.getColorDepth() > 2 : true); - } - static refresh() { - Colours.enabled = Colours.isEnabled(process.stderr); - if (!this.enabled) { - Colours.reset = ""; - Colours.bright = ""; - Colours.dim = ""; - Colours.red = ""; - Colours.green = ""; - Colours.yellow = ""; - Colours.blue = ""; - Colours.magenta = ""; - Colours.cyan = ""; - Colours.white = ""; - Colours.grey = ""; - } else { - Colours.reset = "\x1B[0m"; - Colours.bright = "\x1B[1m"; - Colours.dim = "\x1B[2m"; - Colours.red = "\x1B[31m"; - Colours.green = "\x1B[32m"; - Colours.yellow = "\x1B[33m"; - Colours.blue = "\x1B[34m"; - Colours.magenta = "\x1B[35m"; - Colours.cyan = "\x1B[36m"; - Colours.white = "\x1B[37m"; - Colours.grey = "\x1B[90m"; - } - } - } - exports.Colours = Colours; - Colours.enabled = false; - Colours.reset = ""; - Colours.bright = ""; - Colours.dim = ""; - Colours.red = ""; - Colours.green = ""; - Colours.yellow = ""; - Colours.blue = ""; - Colours.magenta = ""; - Colours.cyan = ""; - Colours.white = ""; - Colours.grey = ""; - Colours.refresh(); -}); - -// ../../../../node_modules/.bun/google-logging-utils@0.0.2/node_modules/google-logging-utils/build/src/logging-utils.js -var require_logging_utils = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k in mod2) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod2, k)) - __createBinding(result, mod2, k); - } - __setModuleDefault(result, mod2); - return result; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.env = exports.DebugLogBackendBase = exports.placeholder = exports.AdhocDebugLogger = exports.LogSeverity = undefined; - exports.getNodeBackend = getNodeBackend; - exports.getDebugBackend = getDebugBackend; - exports.getStructuredBackend = getStructuredBackend; - exports.setBackend = setBackend; - exports.log = log; - var node_events_1 = __require("events"); - var process3 = __importStar(__require("process")); - var util3 = __importStar(__require("util")); - var colours_1 = require_colours(); - var LogSeverity; - (function(LogSeverity2) { - LogSeverity2["DEFAULT"] = "DEFAULT"; - LogSeverity2["DEBUG"] = "DEBUG"; - LogSeverity2["INFO"] = "INFO"; - LogSeverity2["WARNING"] = "WARNING"; - LogSeverity2["ERROR"] = "ERROR"; - })(LogSeverity || (exports.LogSeverity = LogSeverity = {})); - - class AdhocDebugLogger extends node_events_1.EventEmitter { - constructor(namespace, upstream) { - super(); - this.namespace = namespace; - this.upstream = upstream; - this.func = Object.assign(this.invoke.bind(this), { - instance: this, - on: (event, listener) => this.on(event, listener) - }); - this.func.debug = (...args) => this.invokeSeverity(LogSeverity.DEBUG, ...args); - this.func.info = (...args) => this.invokeSeverity(LogSeverity.INFO, ...args); - this.func.warn = (...args) => this.invokeSeverity(LogSeverity.WARNING, ...args); - this.func.error = (...args) => this.invokeSeverity(LogSeverity.ERROR, ...args); - this.func.sublog = (namespace2) => log(namespace2, this.func); - } - invoke(fields, ...args) { - if (this.upstream) { - this.upstream(fields, ...args); - } - this.emit("log", fields, args); - } - invokeSeverity(severity, ...args) { - this.invoke({ severity }, ...args); - } - } - exports.AdhocDebugLogger = AdhocDebugLogger; - exports.placeholder = new AdhocDebugLogger("", () => {}).func; - - class DebugLogBackendBase { - constructor() { - var _a2; - this.cached = new Map; - this.filters = []; - this.filtersSet = false; - let nodeFlag = (_a2 = process3.env[exports.env.nodeEnables]) !== null && _a2 !== undefined ? _a2 : "*"; - if (nodeFlag === "all") { - nodeFlag = "*"; - } - this.filters = nodeFlag.split(","); - } - log(namespace, fields, ...args) { - try { - if (!this.filtersSet) { - this.setFilters(); - this.filtersSet = true; - } - let logger = this.cached.get(namespace); - if (!logger) { - logger = this.makeLogger(namespace); - this.cached.set(namespace, logger); - } - logger(fields, ...args); - } catch (e) { - console.error(e); - } - } - } - exports.DebugLogBackendBase = DebugLogBackendBase; - - class NodeBackend extends DebugLogBackendBase { - constructor() { - super(...arguments); - this.enabledRegexp = /.*/g; - } - isEnabled(namespace) { - return this.enabledRegexp.test(namespace); - } - makeLogger(namespace) { - if (!this.enabledRegexp.test(namespace)) { - return () => {}; - } - return (fields, ...args) => { - var _a2; - const nscolour = `${colours_1.Colours.green}${namespace}${colours_1.Colours.reset}`; - const pid = `${colours_1.Colours.yellow}${process3.pid}${colours_1.Colours.reset}`; - let level; - switch (fields.severity) { - case LogSeverity.ERROR: - level = `${colours_1.Colours.red}${fields.severity}${colours_1.Colours.reset}`; - break; - case LogSeverity.INFO: - level = `${colours_1.Colours.magenta}${fields.severity}${colours_1.Colours.reset}`; - break; - case LogSeverity.WARNING: - level = `${colours_1.Colours.yellow}${fields.severity}${colours_1.Colours.reset}`; - break; - default: - level = (_a2 = fields.severity) !== null && _a2 !== undefined ? _a2 : LogSeverity.DEFAULT; - break; - } - const msg = util3.formatWithOptions({ colors: colours_1.Colours.enabled }, ...args); - const filteredFields = Object.assign({}, fields); - delete filteredFields.severity; - const fieldsJson = Object.getOwnPropertyNames(filteredFields).length ? JSON.stringify(filteredFields) : ""; - const fieldsColour = fieldsJson ? `${colours_1.Colours.grey}${fieldsJson}${colours_1.Colours.reset}` : ""; - console.error("%s [%s|%s] %s%s", pid, nscolour, level, msg, fieldsJson ? ` ${fieldsColour}` : ""); - }; - } - setFilters() { - const totalFilters = this.filters.join(","); - const regexp = totalFilters.replace(/[|\\{}()[\]^$+?.]/g, "\\$&").replace(/\*/g, ".*").replace(/,/g, "$|^"); - this.enabledRegexp = new RegExp(`^${regexp}$`, "i"); - } - } - function getNodeBackend() { - return new NodeBackend; - } - - class DebugBackend extends DebugLogBackendBase { - constructor(pkg) { - super(); - this.debugPkg = pkg; - } - makeLogger(namespace) { - const debugLogger = this.debugPkg(namespace); - return (fields, ...args) => { - debugLogger(args[0], ...args.slice(1)); - }; - } - setFilters() { - var _a2; - const existingFilters = (_a2 = process3.env["NODE_DEBUG"]) !== null && _a2 !== undefined ? _a2 : ""; - process3.env["NODE_DEBUG"] = `${existingFilters}${existingFilters ? "," : ""}${this.filters.join(",")}`; - } - } - function getDebugBackend(debugPkg) { - return new DebugBackend(debugPkg); - } - - class StructuredBackend extends DebugLogBackendBase { - constructor(upstream) { - var _a2; - super(); - this.upstream = (_a2 = upstream) !== null && _a2 !== undefined ? _a2 : new NodeBackend; - } - makeLogger(namespace) { - const debugLogger = this.upstream.makeLogger(namespace); - return (fields, ...args) => { - var _a2; - const severity = (_a2 = fields.severity) !== null && _a2 !== undefined ? _a2 : LogSeverity.INFO; - const json3 = Object.assign({ - severity, - message: util3.format(...args) - }, fields); - const jsonString = JSON.stringify(json3); - debugLogger(fields, jsonString); - }; - } - setFilters() { - this.upstream.setFilters(); - } - } - function getStructuredBackend(upstream) { - return new StructuredBackend(upstream); - } - exports.env = { - nodeEnables: "GOOGLE_SDK_NODE_LOGGING" - }; - var loggerCache = new Map; - var cachedBackend = undefined; - function setBackend(backend) { - cachedBackend = backend; - loggerCache.clear(); - } - function log(namespace, parent) { - const enablesFlag = process3.env[exports.env.nodeEnables]; - if (!enablesFlag) { - return exports.placeholder; - } - if (!namespace) { - return exports.placeholder; - } - if (parent) { - namespace = `${parent.instance.namespace}:${namespace}`; - } - const existing = loggerCache.get(namespace); - if (existing) { - return existing.func; - } - if (cachedBackend === null) { - return exports.placeholder; - } else if (cachedBackend === undefined) { - cachedBackend = getNodeBackend(); - } - const logger = (() => { - let previousBackend = undefined; - const newLogger = new AdhocDebugLogger(namespace, (fields, ...args) => { - if (previousBackend !== cachedBackend) { - if (cachedBackend === null) { - return; - } else if (cachedBackend === undefined) { - cachedBackend = getNodeBackend(); - } - previousBackend = cachedBackend; - } - cachedBackend === null || cachedBackend === undefined || cachedBackend.log(namespace, fields, ...args); - }); - return newLogger; - })(); - loggerCache.set(namespace, logger); - return logger.func; - } -}); - -// ../../../../node_modules/.bun/google-logging-utils@0.0.2/node_modules/google-logging-utils/build/src/index.js -var require_src58 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_logging_utils(), exports); -}); - -// ../../../../node_modules/.bun/gcp-metadata@6.1.1/node_modules/gcp-metadata/build/src/index.js -var require_src59 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.gcpResidencyCache = exports.METADATA_SERVER_DETECTION = exports.HEADERS = exports.HEADER_VALUE = exports.HEADER_NAME = exports.SECONDARY_HOST_ADDRESS = exports.HOST_ADDRESS = exports.BASE_PATH = undefined; - exports.instance = instance; - exports.project = project2; - exports.universe = universe; - exports.bulk = bulk; - exports.isAvailable = isAvailable; - exports.resetIsAvailableCache = resetIsAvailableCache; - exports.getGCPResidency = getGCPResidency; - exports.setGCPResidency = setGCPResidency; - exports.requestTimeout = requestTimeout; - var gaxios_1 = require_src57(); - var jsonBigint = require_json_bigint(); - var gcp_residency_1 = require_gcp_residency(); - var logger = require_src58(); - exports.BASE_PATH = "/computeMetadata/v1"; - exports.HOST_ADDRESS = "http://169.254.169.254"; - exports.SECONDARY_HOST_ADDRESS = "http://metadata.google.internal."; - exports.HEADER_NAME = "Metadata-Flavor"; - exports.HEADER_VALUE = "Google"; - exports.HEADERS = Object.freeze({ [exports.HEADER_NAME]: exports.HEADER_VALUE }); - var log = logger.log("gcp metadata"); - exports.METADATA_SERVER_DETECTION = Object.freeze({ - "assume-present": "don't try to ping the metadata server, but assume it's present", - none: "don't try to ping the metadata server, but don't try to use it either", - "bios-only": "treat the result of a BIOS probe as canonical (don't fall back to pinging)", - "ping-only": "skip the BIOS probe, and go straight to pinging" - }); - function getBaseUrl(baseUrl) { - if (!baseUrl) { - baseUrl = process.env.GCE_METADATA_IP || process.env.GCE_METADATA_HOST || exports.HOST_ADDRESS; - } - if (!/^https?:\/\//.test(baseUrl)) { - baseUrl = `http://${baseUrl}`; - } - return new URL(exports.BASE_PATH, baseUrl).href; - } - function validate(options) { - Object.keys(options).forEach((key) => { - switch (key) { - case "params": - case "property": - case "headers": - break; - case "qs": - throw new Error("'qs' is not a valid configuration option. Please use 'params' instead."); - default: - throw new Error(`'${key}' is not a valid configuration option.`); - } - }); - } - async function metadataAccessor(type, options = {}, noResponseRetries = 3, fastFail = false) { - let metadataKey = ""; - let params = {}; - let headers = {}; - if (typeof type === "object") { - const metadataAccessor2 = type; - metadataKey = metadataAccessor2.metadataKey; - params = metadataAccessor2.params || params; - headers = metadataAccessor2.headers || headers; - noResponseRetries = metadataAccessor2.noResponseRetries || noResponseRetries; - fastFail = metadataAccessor2.fastFail || fastFail; - } else { - metadataKey = type; - } - if (typeof options === "string") { - metadataKey += `/${options}`; - } else { - validate(options); - if (options.property) { - metadataKey += `/${options.property}`; - } - headers = options.headers || headers; - params = options.params || params; - } - const requestMethod = fastFail ? fastFailMetadataRequest : gaxios_1.request; - const req = { - url: `${getBaseUrl()}/${metadataKey}`, - headers: { ...exports.HEADERS, ...headers }, - retryConfig: { noResponseRetries }, - params, - responseType: "text", - timeout: requestTimeout() - }; - log.info("instance request %j", req); - const res = await requestMethod(req); - log.info("instance metadata is %s", res.data); - if (res.headers[exports.HEADER_NAME.toLowerCase()] !== exports.HEADER_VALUE) { - throw new Error(`Invalid response from metadata service: incorrect ${exports.HEADER_NAME} header. Expected '${exports.HEADER_VALUE}', got ${res.headers[exports.HEADER_NAME.toLowerCase()] ? `'${res.headers[exports.HEADER_NAME.toLowerCase()]}'` : "no header"}`); - } - if (typeof res.data === "string") { - try { - return jsonBigint.parse(res.data); - } catch (_a2) {} - } - return res.data; - } - async function fastFailMetadataRequest(options) { - var _a2; - const secondaryOptions = { - ...options, - url: (_a2 = options.url) === null || _a2 === undefined ? undefined : _a2.toString().replace(getBaseUrl(), getBaseUrl(exports.SECONDARY_HOST_ADDRESS)) - }; - let responded = false; - const r1 = (0, gaxios_1.request)(options).then((res) => { - responded = true; - return res; - }).catch((err) => { - if (responded) { - return r2; - } else { - responded = true; - throw err; - } - }); - const r2 = (0, gaxios_1.request)(secondaryOptions).then((res) => { - responded = true; - return res; - }).catch((err) => { - if (responded) { - return r1; - } else { - responded = true; - throw err; - } - }); - return Promise.race([r1, r2]); - } - function instance(options) { - return metadataAccessor("instance", options); - } - function project2(options) { - return metadataAccessor("project", options); - } - function universe(options) { - return metadataAccessor("universe", options); - } - async function bulk(properties) { - const r = {}; - await Promise.all(properties.map((item) => { - return (async () => { - const res = await metadataAccessor(item); - const key = item.metadataKey; - r[key] = res; - })(); - })); - return r; - } - function detectGCPAvailableRetries() { - return process.env.DETECT_GCP_RETRIES ? Number(process.env.DETECT_GCP_RETRIES) : 0; - } - var cachedIsAvailableResponse; - async function isAvailable() { - if (process.env.METADATA_SERVER_DETECTION) { - const value = process.env.METADATA_SERVER_DETECTION.trim().toLocaleLowerCase(); - if (!(value in exports.METADATA_SERVER_DETECTION)) { - throw new RangeError(`Unknown \`METADATA_SERVER_DETECTION\` env variable. Got \`${value}\`, but it should be \`${Object.keys(exports.METADATA_SERVER_DETECTION).join("`, `")}\`, or unset`); - } - switch (value) { - case "assume-present": - return true; - case "none": - return false; - case "bios-only": - return getGCPResidency(); - case "ping-only": - } - } - try { - if (cachedIsAvailableResponse === undefined) { - cachedIsAvailableResponse = metadataAccessor("instance", undefined, detectGCPAvailableRetries(), !(process.env.GCE_METADATA_IP || process.env.GCE_METADATA_HOST)); - } - await cachedIsAvailableResponse; - return true; - } catch (e) { - const err = e; - if (process.env.DEBUG_AUTH) { - console.info(err); - } - if (err.type === "request-timeout") { - return false; - } - if (err.response && err.response.status === 404) { - return false; - } else { - if (!(err.response && err.response.status === 404) && (!err.code || ![ - "EHOSTDOWN", - "EHOSTUNREACH", - "ENETUNREACH", - "ENOENT", - "ENOTFOUND", - "ECONNREFUSED" - ].includes(err.code))) { - let code = "UNKNOWN"; - if (err.code) - code = err.code; - process.emitWarning(`received unexpected error = ${err.message} code = ${code}`, "MetadataLookupWarning"); - } - return false; - } - } - } - function resetIsAvailableCache() { - cachedIsAvailableResponse = undefined; - } - exports.gcpResidencyCache = null; - function getGCPResidency() { - if (exports.gcpResidencyCache === null) { - setGCPResidency(); - } - return exports.gcpResidencyCache; - } - function setGCPResidency(value = null) { - exports.gcpResidencyCache = value !== null ? value : (0, gcp_residency_1.detectGCPResidency)(); - } - function requestTimeout() { - return getGCPResidency() ? 0 : 3000; - } - __exportStar(require_gcp_residency(), exports); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/detectors/faas.js -var require_faas = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.faasCloudRegion = exports.faasInstance = exports.faasVersion = exports.faasName = exports.onCloudFunctions = exports.onCloudRun = undefined; - var metadata = require_src59(); - var ID_METADATA_ATTR = "id"; - var CLOUD_RUN_CONFIG_ENV = "K_CONFIGURATION"; - var CLOUD_FUNCTION_TARGET_ENV = "FUNCTION_TARGET"; - var FAAS_SERVICE_ENV = "K_SERVICE"; - var FAAS_REVISION_ENV = "K_REVISION"; - var REGION_METADATA_ATTR = "region"; - async function onCloudRun() { - return process.env[CLOUD_RUN_CONFIG_ENV] !== undefined; - } - exports.onCloudRun = onCloudRun; - async function onCloudFunctions() { - return process.env[CLOUD_FUNCTION_TARGET_ENV] !== undefined; - } - exports.onCloudFunctions = onCloudFunctions; - async function faasName() { - return lookupEnv(FAAS_SERVICE_ENV); - } - exports.faasName = faasName; - async function faasVersion() { - return lookupEnv(FAAS_REVISION_ENV); - } - exports.faasVersion = faasVersion; - async function faasInstance() { - const id = await metadata.instance(ID_METADATA_ATTR); - return id.toString(); - } - exports.faasInstance = faasInstance; - async function faasCloudRegion() { - const region2 = await metadata.instance(REGION_METADATA_ATTR); - return region2.slice(region2.lastIndexOf("/") + 1); - } - exports.faasCloudRegion = faasCloudRegion; - function lookupEnv(key) { - const val = process.env[key]; - if (val === undefined) { - throw new Error(`Environment variable ${key} not found`); - } - return val; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/detectors/gce.js -var require_gce = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.availabilityZoneAndRegion = exports.hostName = exports.hostId = exports.hostType = exports.onGce = undefined; - var api_1 = require_src(); - var metadata = require_src59(); - var MACHINE_TYPE_METADATA_ATTR = "machine-type"; - var ID_METADATA_ATTR = "id"; - var HOST_NAME_METADATA_ATTR = "name"; - var ZONE_METADATA_ATTR = "zone"; - async function onGce() { - try { - await metadata.instance(MACHINE_TYPE_METADATA_ATTR); - return true; - } catch (err) { - api_1.diag.debug("Could not fetch metadata attribute %s, assuming not on GCE. Error was %s", MACHINE_TYPE_METADATA_ATTR, err); - return false; - } - } - exports.onGce = onGce; - async function hostType() { - return metadata.instance(MACHINE_TYPE_METADATA_ATTR); - } - exports.hostType = hostType; - async function hostId() { - const id = await metadata.instance(ID_METADATA_ATTR); - return id.toString(); - } - exports.hostId = hostId; - async function hostName() { - return metadata.instance(HOST_NAME_METADATA_ATTR); - } - exports.hostName = hostName; - async function availabilityZoneAndRegion() { - const fullZone = await metadata.instance(ZONE_METADATA_ATTR); - const re = /projects\/\d+\/zones\/(?(?\w+-\w+)-\w+)/; - const { zone, region: region2 } = fullZone.match(re)?.groups ?? {}; - if (!zone || !region2) { - throw new Error(`zone was not in the expected format: projects/PROJECT_NUM/zones/COUNTRY-REGION-ZONE. Got ${fullZone}`); - } - return { zone, region: region2 }; - } - exports.availabilityZoneAndRegion = availabilityZoneAndRegion; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/detectors/gae.js -var require_gae = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.standardCloudRegion = exports.standardAvailabilityZone = exports.flexAvailabilityZoneAndRegion = exports.serviceInstance = exports.serviceVersion = exports.serviceName = exports.onAppEngine = exports.onAppEngineStandard = undefined; - var metadata = require_src59(); - var gce = require_gce(); - var faas = require_faas(); - var GAE_SERVICE_ENV = "GAE_SERVICE"; - var GAE_VERSION_ENV = "GAE_VERSION"; - var GAE_INSTANCE_ENV = "GAE_INSTANCE"; - var GAE_ENV = "GAE_ENV"; - var GAE_STANDARD = "standard"; - var ZONE_METADATA_ATTR = "zone"; - async function onAppEngineStandard() { - return process.env[GAE_ENV] === GAE_STANDARD; - } - exports.onAppEngineStandard = onAppEngineStandard; - async function onAppEngine() { - return process.env[GAE_SERVICE_ENV] !== undefined; - } - exports.onAppEngine = onAppEngine; - async function serviceName() { - return lookupEnv(GAE_SERVICE_ENV); - } - exports.serviceName = serviceName; - async function serviceVersion() { - return lookupEnv(GAE_VERSION_ENV); - } - exports.serviceVersion = serviceVersion; - async function serviceInstance() { - return lookupEnv(GAE_INSTANCE_ENV); - } - exports.serviceInstance = serviceInstance; - async function flexAvailabilityZoneAndRegion() { - return await gce.availabilityZoneAndRegion(); - } - exports.flexAvailabilityZoneAndRegion = flexAvailabilityZoneAndRegion; - async function standardAvailabilityZone() { - const zone = await metadata.instance(ZONE_METADATA_ATTR); - return zone.slice(zone.lastIndexOf("/") + 1); - } - exports.standardAvailabilityZone = standardAvailabilityZone; - async function standardCloudRegion() { - return await faas.faasCloudRegion(); - } - exports.standardCloudRegion = standardCloudRegion; - function lookupEnv(key) { - const val = process.env[key]; - if (val === undefined) { - throw new Error(`Environment variable ${key} not found`); - } - return val; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/detectors/gke.js -var require_gke = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.availabilityZoneOrRegion = exports.clusterName = exports.hostId = exports.onGke = undefined; - var metadata = require_src59(); - var gce = require_gce(); - var KUBERNETES_SERVICE_HOST_ENV = "KUBERNETES_SERVICE_HOST"; - var CLUSTER_NAME_METADATA_ATTR = "attributes/cluster-name"; - var CLUSTER_LOCATION_METADATA_ATTR = "attributes/cluster-location"; - async function onGke() { - return process.env[KUBERNETES_SERVICE_HOST_ENV] !== undefined; - } - exports.onGke = onGke; - async function hostId() { - return await gce.hostId(); - } - exports.hostId = hostId; - async function clusterName() { - return metadata.instance(CLUSTER_NAME_METADATA_ATTR); - } - exports.clusterName = clusterName; - async function availabilityZoneOrRegion() { - const clusterLocation = await metadata.instance(CLUSTER_LOCATION_METADATA_ATTR); - switch (countChar(clusterLocation, "-")) { - case 1: - return { type: "region", value: clusterLocation }; - case 2: - return { type: "zone", value: clusterLocation }; - default: - throw new Error(`unrecognized format for cluster location: ${clusterLocation}`); - } - } - exports.availabilityZoneOrRegion = availabilityZoneOrRegion; - function countChar(s2, char) { - let count = 0; - for (let i = 0;i < s2.length; i++) { - if (s2[i] === char) { - count += 1; - } - } - return count; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/detectors/GcpDetector.js -var require_GcpDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.gcpDetector = exports.GcpDetector = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semconv_1 = require_semconv31(); - var resources_1 = require_src56(); - var metadata = require_src59(); - var faas = require_faas(); - var gae = require_gae(); - var gce = require_gce(); - var gke = require_gke(); - var ATTRIBUTE_NAMES = [ - semconv_1.ATTR_CLOUD_PLATFORM, - semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE, - semconv_1.ATTR_CLOUD_REGION, - semconv_1.ATTR_K8S_CLUSTER_NAME, - semconv_1.ATTR_HOST_TYPE, - semconv_1.ATTR_HOST_ID, - semconv_1.ATTR_HOST_NAME, - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_ACCOUNT_ID, - semconv_1.ATTR_FAAS_NAME, - semconv_1.ATTR_FAAS_VERSION, - semconv_1.ATTR_FAAS_INSTANCE - ]; - async function detect() { - if (!await metadata.isAvailable()) { - return (0, resources_1.emptyResource)(); - } - if (await gke.onGke()) { - return await gkeResource(); - } else if (await faas.onCloudFunctions()) { - return await cloudFunctionsResource(); - } else if (await faas.onCloudRun()) { - return await cloudRunResource(); - } else if (await gae.onAppEngine()) { - return await gaeResource(); - } else if (await gce.onGce()) { - return await gceResource(); - } - return (0, resources_1.emptyResource)(); - } - async function gkeResource() { - const [zoneOrRegion, k8sClusterName, hostId] = await Promise.all([ - gke.availabilityZoneOrRegion(), - gke.clusterName(), - gke.hostId() - ]); - return await makeResource({ - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE, - [zoneOrRegion.type === "zone" ? semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE : semconv_1.ATTR_CLOUD_REGION]: zoneOrRegion.value, - [semconv_1.ATTR_K8S_CLUSTER_NAME]: k8sClusterName, - [semconv_1.ATTR_HOST_ID]: hostId - }); - } - async function cloudRunResource() { - const [faasName, faasVersion, faasInstance, faasCloudRegion] = await Promise.all([ - faas.faasName(), - faas.faasVersion(), - faas.faasInstance(), - faas.faasCloudRegion() - ]); - return await makeResource({ - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN, - [semconv_1.ATTR_FAAS_NAME]: faasName, - [semconv_1.ATTR_FAAS_VERSION]: faasVersion, - [semconv_1.ATTR_FAAS_INSTANCE]: faasInstance, - [semconv_1.ATTR_CLOUD_REGION]: faasCloudRegion - }); - } - async function cloudFunctionsResource() { - const [faasName, faasVersion, faasInstance, faasCloudRegion] = await Promise.all([ - faas.faasName(), - faas.faasVersion(), - faas.faasInstance(), - faas.faasCloudRegion() - ]); - return await makeResource({ - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS, - [semconv_1.ATTR_FAAS_NAME]: faasName, - [semconv_1.ATTR_FAAS_VERSION]: faasVersion, - [semconv_1.ATTR_FAAS_INSTANCE]: faasInstance, - [semconv_1.ATTR_CLOUD_REGION]: faasCloudRegion - }); - } - async function gaeResource() { - let zone, region2; - if (await gae.onAppEngineStandard()) { - [zone, region2] = await Promise.all([ - gae.standardAvailabilityZone(), - gae.standardCloudRegion() - ]); - } else { - ({ zone, region: region2 } = await gce.availabilityZoneAndRegion()); - } - const [faasName, faasVersion, faasInstance] = await Promise.all([ - gae.serviceName(), - gae.serviceVersion(), - gae.serviceInstance() - ]); - return await makeResource({ - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE, - [semconv_1.ATTR_FAAS_NAME]: faasName, - [semconv_1.ATTR_FAAS_VERSION]: faasVersion, - [semconv_1.ATTR_FAAS_INSTANCE]: faasInstance, - [semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE]: zone, - [semconv_1.ATTR_CLOUD_REGION]: region2 - }); - } - async function gceResource() { - const [zoneAndRegion, hostType, hostId, hostName] = await Promise.all([ - gce.availabilityZoneAndRegion(), - gce.hostType(), - gce.hostId(), - gce.hostName() - ]); - return await makeResource({ - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE, - [semconv_1.ATTR_CLOUD_AVAILABILITY_ZONE]: zoneAndRegion.zone, - [semconv_1.ATTR_CLOUD_REGION]: zoneAndRegion.region, - [semconv_1.ATTR_HOST_TYPE]: hostType, - [semconv_1.ATTR_HOST_ID]: hostId, - [semconv_1.ATTR_HOST_NAME]: hostName - }); - } - async function makeResource(attrs) { - const project2 = await metadata.project("project-id"); - return (0, resources_1.resourceFromAttributes)({ - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_GCP, - [semconv_1.ATTR_CLOUD_ACCOUNT_ID]: project2, - ...attrs - }); - } - - class GcpDetector { - async _asyncAttributes() { - const resource = await api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), detect); - return resource.attributes; - } - detect() { - const asyncAttributes = this._asyncAttributes(); - const attributes = {}; - ATTRIBUTE_NAMES.forEach((name) => { - attributes[name] = asyncAttributes.then((data) => data[name]); - }); - return { attributes }; - } - } - exports.GcpDetector = GcpDetector; - exports.gcpDetector = new GcpDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/detectors/index.js -var require_detectors6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.gcpDetector = undefined; - var GcpDetector_1 = require_GcpDetector(); - Object.defineProperty(exports, "gcpDetector", { enumerable: true, get: function() { - return GcpDetector_1.gcpDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-gcp@0.42.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-gcp/build/src/index.js -var require_src60 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.resetIsAvailableCache = exports.gcpDetector = undefined; - var detectors_1 = require_detectors6(); - Object.defineProperty(exports, "gcpDetector", { enumerable: true, get: function() { - return detectors_1.gcpDetector; - } }); - var gcp_metadata_1 = require_src59(); - Object.defineProperty(exports, "resetIsAvailableCache", { enumerable: true, get: function() { - return gcp_metadata_1.resetIsAvailableCache; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/types.js -var require_types9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AZURE_VM_SKU_ATTRIBUTE = exports.AZURE_VM_SCALE_SET_NAME_ATTRIBUTE = exports.AZURE_VM_METADATA_PATH = exports.AZURE_VM_METADATA_HOST = exports.FUNCTIONS_MEM_LIMIT = exports.FUNCTIONS_VERSION = exports.WEBSITE_SKU = exports.WEBSITE_SLOT_NAME = exports.WEBSITE_SITE_NAME = exports.WEBSITE_RESOURCE_GROUP = exports.WEBSITE_OWNER_NAME = exports.WEBSITE_INSTANCE_ID = exports.WEBSITE_HOSTNAME = exports.WEBSITE_HOME_STAMPNAME = exports.REGION_NAME = exports.CLOUD_RESOURCE_ID_RESOURCE_ATTRIBUTE = exports.AZURE_APP_SERVICE_STAMP_RESOURCE_ATTRIBUTE = undefined; - exports.AZURE_APP_SERVICE_STAMP_RESOURCE_ATTRIBUTE = "azure.app.service.stamp"; - exports.CLOUD_RESOURCE_ID_RESOURCE_ATTRIBUTE = "cloud.resource_id"; - exports.REGION_NAME = "REGION_NAME"; - exports.WEBSITE_HOME_STAMPNAME = "WEBSITE_HOME_STAMPNAME"; - exports.WEBSITE_HOSTNAME = "WEBSITE_HOSTNAME"; - exports.WEBSITE_INSTANCE_ID = "WEBSITE_INSTANCE_ID"; - exports.WEBSITE_OWNER_NAME = "WEBSITE_OWNER_NAME"; - exports.WEBSITE_RESOURCE_GROUP = "WEBSITE_RESOURCE_GROUP"; - exports.WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"; - exports.WEBSITE_SLOT_NAME = "WEBSITE_SLOT_NAME"; - exports.WEBSITE_SKU = "WEBSITE_SKU"; - exports.FUNCTIONS_VERSION = "FUNCTIONS_EXTENSION_VERSION"; - exports.FUNCTIONS_MEM_LIMIT = "WEBSITE_MEMORY_LIMIT_MB"; - exports.AZURE_VM_METADATA_HOST = "169.254.169.254"; - exports.AZURE_VM_METADATA_PATH = "/metadata/instance/compute?api-version=2021-12-13&format=json"; - exports.AZURE_VM_SCALE_SET_NAME_ATTRIBUTE = "azure.vm.scaleset.name"; - exports.AZURE_VM_SKU_ATTRIBUTE = "azure.vm.sku"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/semconv.js -var require_semconv33 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CLOUD_PROVIDER_VALUE_AZURE = exports.CLOUD_PLATFORM_VALUE_AZURE_VM = exports.CLOUD_PLATFORM_VALUE_AZURE_FUNCTIONS = exports.CLOUD_PLATFORM_VALUE_AZURE_APP_SERVICE = exports.ATTR_SERVICE_INSTANCE_ID = exports.ATTR_PROCESS_PID = exports.ATTR_OS_VERSION = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_ID = exports.ATTR_FAAS_MAX_MEMORY = exports.ATTR_FAAS_INSTANCE = exports.ATTR_DEPLOYMENT_ENVIRONMENT_NAME = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_PLATFORM = undefined; - exports.ATTR_CLOUD_PLATFORM = "cloud.platform"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_DEPLOYMENT_ENVIRONMENT_NAME = "deployment.environment.name"; - exports.ATTR_FAAS_INSTANCE = "faas.instance"; - exports.ATTR_FAAS_MAX_MEMORY = "faas.max_memory"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.ATTR_OS_VERSION = "os.version"; - exports.ATTR_PROCESS_PID = "process.pid"; - exports.ATTR_SERVICE_INSTANCE_ID = "service.instance.id"; - exports.CLOUD_PLATFORM_VALUE_AZURE_APP_SERVICE = "azure.app_service"; - exports.CLOUD_PLATFORM_VALUE_AZURE_FUNCTIONS = "azure.functions"; - exports.CLOUD_PLATFORM_VALUE_AZURE_VM = "azure.vm"; - exports.CLOUD_PROVIDER_VALUE_AZURE = "azure"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/utils.js -var require_utils39 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isAzureFunction = exports.getAzureResourceUri = undefined; - var types_1 = require_types9(); - function getAzureResourceUri(websiteSiteName) { - const websiteResourceGroup = process.env[types_1.WEBSITE_RESOURCE_GROUP]; - const websiteOwnerName = process.env[types_1.WEBSITE_OWNER_NAME]; - let subscriptionId = websiteOwnerName; - if (websiteOwnerName && websiteOwnerName.indexOf("+") !== -1) { - subscriptionId = websiteOwnerName.split("+")[0]; - } - if (!subscriptionId && !websiteOwnerName) { - return; - } - return `/subscriptions/${subscriptionId}/resourceGroups/${websiteResourceGroup}/providers/Microsoft.Web/sites/${websiteSiteName}`; - } - exports.getAzureResourceUri = getAzureResourceUri; - function isAzureFunction() { - return !!(process.env[types_1.FUNCTIONS_VERSION] || process.env[types_1.WEBSITE_SKU] === "FlexConsumption"); - } - exports.isAzureFunction = isAzureFunction; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/detectors/AzureAppServiceDetector.js -var require_AzureAppServiceDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.azureAppServiceDetector = undefined; - var types_1 = require_types9(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv33(); - var utils_1 = require_utils39(); - var APP_SERVICE_ATTRIBUTE_ENV_VARS = { - [semconv_1.ATTR_CLOUD_REGION]: types_1.REGION_NAME, - [semconv_1.ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: types_1.WEBSITE_SLOT_NAME, - [semconv_1.ATTR_HOST_ID]: types_1.WEBSITE_HOSTNAME, - [semconv_1.ATTR_SERVICE_INSTANCE_ID]: types_1.WEBSITE_INSTANCE_ID, - [types_1.AZURE_APP_SERVICE_STAMP_RESOURCE_ATTRIBUTE]: types_1.WEBSITE_HOME_STAMPNAME - }; - - class AzureAppServiceDetector { - detect() { - let attributes = {}; - const websiteSiteName = process.env[types_1.WEBSITE_SITE_NAME]; - if (websiteSiteName && !(0, utils_1.isAzureFunction)()) { - attributes = { - ...attributes, - [semantic_conventions_1.ATTR_SERVICE_NAME]: websiteSiteName - }; - attributes = { - ...attributes, - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AZURE - }; - attributes = { - ...attributes, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AZURE_APP_SERVICE - }; - const azureResourceUri = (0, utils_1.getAzureResourceUri)(websiteSiteName); - if (azureResourceUri) { - attributes = { - ...attributes, - ...{ [types_1.CLOUD_RESOURCE_ID_RESOURCE_ATTRIBUTE]: azureResourceUri } - }; - } - for (const [key, value] of Object.entries(APP_SERVICE_ATTRIBUTE_ENV_VARS)) { - const envVar = process.env[value]; - if (envVar) { - attributes = { ...attributes, ...{ [key]: envVar } }; - } - } - } - return { attributes }; - } - } - exports.azureAppServiceDetector = new AzureAppServiceDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/detectors/AzureFunctionsDetector.js -var require_AzureFunctionsDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.azureFunctionsDetector = undefined; - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv33(); - var types_1 = require_types9(); - var utils_1 = require_utils39(); - var AZURE_FUNCTIONS_ATTRIBUTE_ENV_VARS = { - [semantic_conventions_1.ATTR_SERVICE_NAME]: types_1.WEBSITE_SITE_NAME, - [semconv_1.ATTR_FAAS_INSTANCE]: types_1.WEBSITE_INSTANCE_ID, - [semconv_1.ATTR_FAAS_MAX_MEMORY]: types_1.FUNCTIONS_MEM_LIMIT - }; - - class AzureFunctionsDetector { - detect() { - let attributes = {}; - const serviceName = process.env[types_1.WEBSITE_SITE_NAME]; - if (serviceName && (0, utils_1.isAzureFunction)()) { - const functionInstance = process.env[types_1.WEBSITE_INSTANCE_ID]; - const functionMemLimit = process.env[types_1.FUNCTIONS_MEM_LIMIT]; - attributes = { - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AZURE, - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AZURE_FUNCTIONS, - [semconv_1.ATTR_CLOUD_REGION]: process.env[types_1.REGION_NAME], - [semconv_1.ATTR_PROCESS_PID]: process.pid - }; - if (serviceName) { - attributes = { - ...attributes, - [semantic_conventions_1.ATTR_SERVICE_NAME]: serviceName - }; - } - if (functionInstance) { - attributes = { - ...attributes, - [semconv_1.ATTR_FAAS_INSTANCE]: functionInstance - }; - } - if (functionMemLimit) { - attributes = { - ...attributes, - [semconv_1.ATTR_FAAS_MAX_MEMORY]: functionMemLimit - }; - } - const azureResourceUri = (0, utils_1.getAzureResourceUri)(serviceName); - if (azureResourceUri) { - attributes = { - ...attributes, - ...{ [types_1.CLOUD_RESOURCE_ID_RESOURCE_ATTRIBUTE]: azureResourceUri } - }; - } - for (const [key, value] of Object.entries(AZURE_FUNCTIONS_ATTRIBUTE_ENV_VARS)) { - const envVar = process.env[value]; - if (envVar) { - attributes = { ...attributes, ...{ [key]: envVar } }; - } - } - } - return { attributes }; - } - } - exports.azureFunctionsDetector = new AzureFunctionsDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/detectors/AzureVmDetector.js -var require_AzureVmDetector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.azureVmDetector = undefined; - var http2 = __require("http"); - var api_1 = require_src(); - var core_1 = require_src7(); - var semconv_1 = require_semconv33(); - var types_1 = require_types9(); - - class AzureVmResourceDetector { - detect() { - const dataPromise = api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => this.getAzureVmMetadata()); - const attrNames = [ - types_1.AZURE_VM_SCALE_SET_NAME_ATTRIBUTE, - types_1.AZURE_VM_SKU_ATTRIBUTE, - semconv_1.ATTR_CLOUD_PLATFORM, - semconv_1.ATTR_CLOUD_PROVIDER, - semconv_1.ATTR_CLOUD_REGION, - types_1.CLOUD_RESOURCE_ID_RESOURCE_ATTRIBUTE, - semconv_1.ATTR_HOST_ID, - semconv_1.ATTR_HOST_NAME, - semconv_1.ATTR_HOST_TYPE, - semconv_1.ATTR_OS_VERSION - ]; - const attributes = {}; - attrNames.forEach((name) => { - attributes[name] = dataPromise.then((data) => data[name]); - }); - return { attributes }; - } - async getAzureVmMetadata() { - try { - const options = { - host: types_1.AZURE_VM_METADATA_HOST, - path: types_1.AZURE_VM_METADATA_PATH, - method: "GET", - timeout: 5000, - headers: { - Metadata: "True" - } - }; - const metadata = await new Promise((resolve2, reject) => { - const timeoutId = setTimeout(() => { - req.destroy(); - reject(new Error("Azure metadata service request timed out.")); - }, 1000); - const req = http2.request(options, (res) => { - clearTimeout(timeoutId); - const { statusCode } = res; - res.setEncoding("utf8"); - let rawData = ""; - res.on("data", (chunk) => rawData += chunk); - res.on("end", () => { - if (statusCode && statusCode >= 200 && statusCode < 300) { - try { - resolve2(JSON.parse(rawData)); - } catch (error48) { - reject(error48); - } - } else { - reject(new Error("Failed to load page, status code: " + statusCode)); - } - }); - }); - req.on("error", (err) => { - clearTimeout(timeoutId); - reject(err); - }); - req.end(); - }); - const attributes = { - [types_1.AZURE_VM_SCALE_SET_NAME_ATTRIBUTE]: metadata["vmScaleSetName"], - [types_1.AZURE_VM_SKU_ATTRIBUTE]: metadata["sku"], - [semconv_1.ATTR_CLOUD_PLATFORM]: semconv_1.CLOUD_PLATFORM_VALUE_AZURE_VM, - [semconv_1.ATTR_CLOUD_PROVIDER]: semconv_1.CLOUD_PROVIDER_VALUE_AZURE, - [semconv_1.ATTR_CLOUD_REGION]: metadata["location"], - [types_1.CLOUD_RESOURCE_ID_RESOURCE_ATTRIBUTE]: metadata["resourceId"], - [semconv_1.ATTR_HOST_ID]: metadata["vmId"], - [semconv_1.ATTR_HOST_NAME]: metadata["name"], - [semconv_1.ATTR_HOST_TYPE]: metadata["vmSize"], - [semconv_1.ATTR_OS_VERSION]: metadata["version"] - }; - return attributes; - } catch (err) { - api_1.diag.debug("AzureVmResourceDetector: not running in an Azure VM:", err.message); - return {}; - } - } - } - exports.azureVmDetector = new AzureVmResourceDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/detectors/index.js -var require_detectors7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.azureVmDetector = exports.azureFunctionsDetector = exports.azureAppServiceDetector = undefined; - var AzureAppServiceDetector_1 = require_AzureAppServiceDetector(); - Object.defineProperty(exports, "azureAppServiceDetector", { enumerable: true, get: function() { - return AzureAppServiceDetector_1.azureAppServiceDetector; - } }); - var AzureFunctionsDetector_1 = require_AzureFunctionsDetector(); - Object.defineProperty(exports, "azureFunctionsDetector", { enumerable: true, get: function() { - return AzureFunctionsDetector_1.azureFunctionsDetector; - } }); - var AzureVmDetector_1 = require_AzureVmDetector(); - Object.defineProperty(exports, "azureVmDetector", { enumerable: true, get: function() { - return AzureVmDetector_1.azureVmDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resource-detector-azure@0.15.0+460773ef8ff1e07c/node_modules/@opentelemetry/resource-detector-azure/build/src/index.js -var require_src61 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.azureVmDetector = exports.azureFunctionsDetector = exports.azureAppServiceDetector = undefined; - var detectors_1 = require_detectors7(); - Object.defineProperty(exports, "azureAppServiceDetector", { enumerable: true, get: function() { - return detectors_1.azureAppServiceDetector; - } }); - Object.defineProperty(exports, "azureFunctionsDetector", { enumerable: true, get: function() { - return detectors_1.azureFunctionsDetector; - } }); - Object.defineProperty(exports, "azureVmDetector", { enumerable: true, get: function() { - return detectors_1.azureVmDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+auto-instrumentations-node@0.66.0+d1160199263ef4d2/node_modules/@opentelemetry/auto-instrumentations-node/build/src/utils.js -var require_utils40 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getResourceDetectorsFromEnv = exports.getNodeAutoInstrumentations = undefined; - var api_1 = require_src(); - var instrumentation_amqplib_1 = require_src10(); - var instrumentation_aws_lambda_1 = require_src11(); - var instrumentation_aws_sdk_1 = require_src12(); - var instrumentation_bunyan_1 = require_src13(); - var instrumentation_cassandra_driver_1 = require_src14(); - var instrumentation_connect_1 = require_src15(); - var instrumentation_cucumber_1 = require_src16(); - var instrumentation_dataloader_1 = require_src17(); - var instrumentation_dns_1 = require_src18(); - var instrumentation_express_1 = require_src19(); - var instrumentation_fastify_1 = require_src20(); - var instrumentation_fs_1 = require_src21(); - var instrumentation_generic_pool_1 = require_src22(); - var instrumentation_graphql_1 = require_src23(); - var instrumentation_grpc_1 = require_src24(); - var instrumentation_hapi_1 = require_src25(); - var instrumentation_http_1 = require_src26(); - var instrumentation_ioredis_1 = require_src28(); - var instrumentation_kafkajs_1 = require_src29(); - var instrumentation_knex_1 = require_src30(); - var instrumentation_koa_1 = require_src31(); - var instrumentation_lru_memoizer_1 = require_src32(); - var instrumentation_memcached_1 = require_src33(); - var instrumentation_mongodb_1 = require_src34(); - var instrumentation_mongoose_1 = require_src35(); - var instrumentation_mysql2_1 = require_src37(); - var instrumentation_mysql_1 = require_src38(); - var instrumentation_nestjs_core_1 = require_src39(); - var instrumentation_net_1 = require_src40(); - var instrumentation_openai_1 = require_src41(); - var instrumentation_oracledb_1 = require_src42(); - var instrumentation_pg_1 = require_src43(); - var instrumentation_pino_1 = require_src44(); - var instrumentation_redis_1 = require_src45(); - var instrumentation_restify_1 = require_src46(); - var instrumentation_router_1 = require_src47(); - var instrumentation_runtime_node_1 = require_src48(); - var instrumentation_socket_io_1 = require_src49(); - var instrumentation_tedious_1 = require_src50(); - var instrumentation_undici_1 = require_src51(); - var instrumentation_winston_1 = require_src52(); - var resource_detector_alibaba_cloud_1 = require_src53(); - var resource_detector_aws_1 = require_src54(); - var resource_detector_container_1 = require_src55(); - var resource_detector_gcp_1 = require_src60(); - var resources_1 = require_src5(); - var resource_detector_azure_1 = require_src61(); - var RESOURCE_DETECTOR_CONTAINER = "container"; - var RESOURCE_DETECTOR_ENVIRONMENT = "env"; - var RESOURCE_DETECTOR_HOST = "host"; - var RESOURCE_DETECTOR_OS = "os"; - var RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = "serviceinstance"; - var RESOURCE_DETECTOR_PROCESS = "process"; - var RESOURCE_DETECTOR_ALIBABA = "alibaba"; - var RESOURCE_DETECTOR_AWS = "aws"; - var RESOURCE_DETECTOR_AZURE = "azure"; - var RESOURCE_DETECTOR_GCP = "gcp"; - var InstrumentationMap = { - "@opentelemetry/instrumentation-amqplib": instrumentation_amqplib_1.AmqplibInstrumentation, - "@opentelemetry/instrumentation-aws-lambda": instrumentation_aws_lambda_1.AwsLambdaInstrumentation, - "@opentelemetry/instrumentation-aws-sdk": instrumentation_aws_sdk_1.AwsInstrumentation, - "@opentelemetry/instrumentation-bunyan": instrumentation_bunyan_1.BunyanInstrumentation, - "@opentelemetry/instrumentation-cassandra-driver": instrumentation_cassandra_driver_1.CassandraDriverInstrumentation, - "@opentelemetry/instrumentation-connect": instrumentation_connect_1.ConnectInstrumentation, - "@opentelemetry/instrumentation-cucumber": instrumentation_cucumber_1.CucumberInstrumentation, - "@opentelemetry/instrumentation-dataloader": instrumentation_dataloader_1.DataloaderInstrumentation, - "@opentelemetry/instrumentation-dns": instrumentation_dns_1.DnsInstrumentation, - "@opentelemetry/instrumentation-express": instrumentation_express_1.ExpressInstrumentation, - "@opentelemetry/instrumentation-fastify": instrumentation_fastify_1.FastifyInstrumentation, - "@opentelemetry/instrumentation-fs": instrumentation_fs_1.FsInstrumentation, - "@opentelemetry/instrumentation-generic-pool": instrumentation_generic_pool_1.GenericPoolInstrumentation, - "@opentelemetry/instrumentation-graphql": instrumentation_graphql_1.GraphQLInstrumentation, - "@opentelemetry/instrumentation-grpc": instrumentation_grpc_1.GrpcInstrumentation, - "@opentelemetry/instrumentation-hapi": instrumentation_hapi_1.HapiInstrumentation, - "@opentelemetry/instrumentation-http": instrumentation_http_1.HttpInstrumentation, - "@opentelemetry/instrumentation-ioredis": instrumentation_ioredis_1.IORedisInstrumentation, - "@opentelemetry/instrumentation-kafkajs": instrumentation_kafkajs_1.KafkaJsInstrumentation, - "@opentelemetry/instrumentation-knex": instrumentation_knex_1.KnexInstrumentation, - "@opentelemetry/instrumentation-koa": instrumentation_koa_1.KoaInstrumentation, - "@opentelemetry/instrumentation-lru-memoizer": instrumentation_lru_memoizer_1.LruMemoizerInstrumentation, - "@opentelemetry/instrumentation-memcached": instrumentation_memcached_1.MemcachedInstrumentation, - "@opentelemetry/instrumentation-mongodb": instrumentation_mongodb_1.MongoDBInstrumentation, - "@opentelemetry/instrumentation-mongoose": instrumentation_mongoose_1.MongooseInstrumentation, - "@opentelemetry/instrumentation-mysql2": instrumentation_mysql2_1.MySQL2Instrumentation, - "@opentelemetry/instrumentation-mysql": instrumentation_mysql_1.MySQLInstrumentation, - "@opentelemetry/instrumentation-nestjs-core": instrumentation_nestjs_core_1.NestInstrumentation, - "@opentelemetry/instrumentation-net": instrumentation_net_1.NetInstrumentation, - "@opentelemetry/instrumentation-openai": instrumentation_openai_1.OpenAIInstrumentation, - "@opentelemetry/instrumentation-oracledb": instrumentation_oracledb_1.OracleInstrumentation, - "@opentelemetry/instrumentation-pg": instrumentation_pg_1.PgInstrumentation, - "@opentelemetry/instrumentation-pino": instrumentation_pino_1.PinoInstrumentation, - "@opentelemetry/instrumentation-redis": instrumentation_redis_1.RedisInstrumentation, - "@opentelemetry/instrumentation-restify": instrumentation_restify_1.RestifyInstrumentation, - "@opentelemetry/instrumentation-router": instrumentation_router_1.RouterInstrumentation, - "@opentelemetry/instrumentation-runtime-node": instrumentation_runtime_node_1.RuntimeNodeInstrumentation, - "@opentelemetry/instrumentation-socket.io": instrumentation_socket_io_1.SocketIoInstrumentation, - "@opentelemetry/instrumentation-tedious": instrumentation_tedious_1.TediousInstrumentation, - "@opentelemetry/instrumentation-undici": instrumentation_undici_1.UndiciInstrumentation, - "@opentelemetry/instrumentation-winston": instrumentation_winston_1.WinstonInstrumentation - }; - var defaultExcludedInstrumentations = [ - "@opentelemetry/instrumentation-fs", - "@opentelemetry/instrumentation-fastify" - ]; - function getNodeAutoInstrumentations(inputConfigs = {}) { - checkManuallyProvidedInstrumentationNames(Object.keys(inputConfigs)); - const enabledInstrumentationsFromEnv = getEnabledInstrumentationsFromEnv(); - const disabledInstrumentationsFromEnv = getDisabledInstrumentationsFromEnv(); - const instrumentations = []; - for (const name of Object.keys(InstrumentationMap)) { - const Instance = InstrumentationMap[name]; - const userConfig = inputConfigs[name] ?? {}; - if (userConfig.enabled === false || !enabledInstrumentationsFromEnv.includes(name) || disabledInstrumentationsFromEnv.includes(name)) { - api_1.diag.debug(`Disabling instrumentation for ${name}`); - continue; - } - try { - api_1.diag.debug(`Loading instrumentation for ${name}`); - instrumentations.push(new Instance(userConfig)); - } catch (e) { - api_1.diag.error(e); - } - } - return instrumentations; - } - exports.getNodeAutoInstrumentations = getNodeAutoInstrumentations; - function checkManuallyProvidedInstrumentationNames(manuallyProvidedInstrumentationNames) { - for (const name of manuallyProvidedInstrumentationNames) { - if (!Object.prototype.hasOwnProperty.call(InstrumentationMap, name)) { - api_1.diag.error(`Provided instrumentation name "${name}" not found`); - } - } - } - function getInstrumentationsFromEnv(envVar) { - const envVarValue = process.env[envVar]; - if (envVarValue == null) { - return []; - } - const instrumentationsFromEnv = envVarValue?.split(",").map((instrumentationPkgSuffix) => `@opentelemetry/instrumentation-${instrumentationPkgSuffix.trim()}`); - checkManuallyProvidedInstrumentationNames(instrumentationsFromEnv); - return instrumentationsFromEnv; - } - function getEnabledInstrumentationsFromEnv() { - if (!process.env.OTEL_NODE_ENABLED_INSTRUMENTATIONS) { - return Object.keys(InstrumentationMap).filter((key) => !defaultExcludedInstrumentations.includes(key)); - } - const instrumentationsFromEnv = getInstrumentationsFromEnv("OTEL_NODE_ENABLED_INSTRUMENTATIONS"); - return instrumentationsFromEnv; - } - function getDisabledInstrumentationsFromEnv() { - if (!process.env.OTEL_NODE_DISABLED_INSTRUMENTATIONS) { - return []; - } - const instrumentationsFromEnv = getInstrumentationsFromEnv("OTEL_NODE_DISABLED_INSTRUMENTATIONS"); - return instrumentationsFromEnv; - } - function getResourceDetectorsFromEnv() { - const resourceDetectors = new Map([ - [RESOURCE_DETECTOR_CONTAINER, resource_detector_container_1.containerDetector], - [RESOURCE_DETECTOR_ENVIRONMENT, resources_1.envDetector], - [RESOURCE_DETECTOR_HOST, resources_1.hostDetector], - [RESOURCE_DETECTOR_OS, resources_1.osDetector], - [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, resources_1.serviceInstanceIdDetector], - [RESOURCE_DETECTOR_PROCESS, resources_1.processDetector], - [RESOURCE_DETECTOR_ALIBABA, resource_detector_alibaba_cloud_1.alibabaCloudEcsDetector], - [RESOURCE_DETECTOR_GCP, resource_detector_gcp_1.gcpDetector], - [ - RESOURCE_DETECTOR_AWS, - [ - resource_detector_aws_1.awsEc2Detector, - resource_detector_aws_1.awsEcsDetector, - resource_detector_aws_1.awsEksDetector, - resource_detector_aws_1.awsBeanstalkDetector, - resource_detector_aws_1.awsLambdaDetector - ] - ], - [ - RESOURCE_DETECTOR_AZURE, - [resource_detector_azure_1.azureAppServiceDetector, resource_detector_azure_1.azureFunctionsDetector, resource_detector_azure_1.azureVmDetector] - ] - ]); - const resourceDetectorsFromEnv = process.env.OTEL_NODE_RESOURCE_DETECTORS?.split(",") ?? ["all"]; - if (resourceDetectorsFromEnv.includes("all")) { - return [...resourceDetectors.values()].flat(); - } - if (resourceDetectorsFromEnv.includes("none")) { - return []; - } - return resourceDetectorsFromEnv.flatMap((detector) => { - const resourceDetector = resourceDetectors.get(detector); - if (!resourceDetector) { - api_1.diag.error(`Invalid resource detector "${detector}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`); - } - return resourceDetector || []; - }); - } - exports.getResourceDetectorsFromEnv = getResourceDetectorsFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+auto-instrumentations-node@0.66.0+d1160199263ef4d2/node_modules/@opentelemetry/auto-instrumentations-node/build/src/index.js -var require_src62 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getResourceDetectors = exports.getNodeAutoInstrumentations = undefined; - var utils_1 = require_utils40(); - Object.defineProperty(exports, "getNodeAutoInstrumentations", { enumerable: true, get: function() { - return utils_1.getNodeAutoInstrumentations; - } }); - Object.defineProperty(exports, "getResourceDetectors", { enumerable: true, get: function() { - return utils_1.getResourceDetectorsFromEnv; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/OTLPExporterBase.js -var require_OTLPExporterBase = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPExporterBase = undefined; - - class OTLPExporterBase { - _delegate; - constructor(_delegate) { - this._delegate = _delegate; - } - export(items, resultCallback) { - this._delegate.export(items, resultCallback); - } - forceFlush() { - return this._delegate.forceFlush(); - } - shutdown() { - return this._delegate.shutdown(); - } - } - exports.OTLPExporterBase = OTLPExporterBase; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/types.js -var require_types10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPExporterError = undefined; - - class OTLPExporterError extends Error { - code; - name = "OTLPExporterError"; - data; - constructor(message, code, data) { - super(message); - this.data = data; - this.code = code; - } - } - exports.OTLPExporterError = OTLPExporterError; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/shared-configuration.js -var require_shared_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSharedConfigurationDefaults = exports.mergeOtlpSharedConfigurationWithDefaults = exports.wrapStaticHeadersInFunction = exports.validateTimeoutMillis = undefined; - function validateTimeoutMillis(timeoutMillis) { - if (Number.isFinite(timeoutMillis) && timeoutMillis > 0) { - return timeoutMillis; - } - throw new Error(`Configuration: timeoutMillis is invalid, expected number greater than 0 (actual: '${timeoutMillis}')`); - } - exports.validateTimeoutMillis = validateTimeoutMillis; - function wrapStaticHeadersInFunction(headers) { - if (headers == null) { - return; - } - return () => headers; - } - exports.wrapStaticHeadersInFunction = wrapStaticHeadersInFunction; - function mergeOtlpSharedConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - return { - timeoutMillis: validateTimeoutMillis(userProvidedConfiguration.timeoutMillis ?? fallbackConfiguration.timeoutMillis ?? defaultConfiguration.timeoutMillis), - concurrencyLimit: userProvidedConfiguration.concurrencyLimit ?? fallbackConfiguration.concurrencyLimit ?? defaultConfiguration.concurrencyLimit, - compression: userProvidedConfiguration.compression ?? fallbackConfiguration.compression ?? defaultConfiguration.compression - }; - } - exports.mergeOtlpSharedConfigurationWithDefaults = mergeOtlpSharedConfigurationWithDefaults; - function getSharedConfigurationDefaults() { - return { - timeoutMillis: 1e4, - concurrencyLimit: 30, - compression: "none" - }; - } - exports.getSharedConfigurationDefaults = getSharedConfigurationDefaults; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/legacy-node-configuration.js -var require_legacy_node_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompressionAlgorithm = undefined; - var CompressionAlgorithm; - (function(CompressionAlgorithm2) { - CompressionAlgorithm2["NONE"] = "none"; - CompressionAlgorithm2["GZIP"] = "gzip"; - })(CompressionAlgorithm = exports.CompressionAlgorithm || (exports.CompressionAlgorithm = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/bounded-queue-export-promise-handler.js -var require_bounded_queue_export_promise_handler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createBoundedQueueExportPromiseHandler = undefined; - - class BoundedQueueExportPromiseHandler { - _concurrencyLimit; - _sendingPromises = []; - constructor(concurrencyLimit) { - this._concurrencyLimit = concurrencyLimit; - } - pushPromise(promise2) { - if (this.hasReachedLimit()) { - throw new Error("Concurrency Limit reached"); - } - this._sendingPromises.push(promise2); - const popPromise = () => { - const index = this._sendingPromises.indexOf(promise2); - this._sendingPromises.splice(index, 1); - }; - promise2.then(popPromise, popPromise); - } - hasReachedLimit() { - return this._sendingPromises.length >= this._concurrencyLimit; - } - async awaitAll() { - await Promise.all(this._sendingPromises); - } - } - function createBoundedQueueExportPromiseHandler(options) { - return new BoundedQueueExportPromiseHandler(options.concurrencyLimit); - } - exports.createBoundedQueueExportPromiseHandler = createBoundedQueueExportPromiseHandler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/logging-response-handler.js -var require_logging_response_handler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createLoggingPartialSuccessResponseHandler = undefined; - var api_1 = require_src(); - function isPartialSuccessResponse(response) { - return Object.prototype.hasOwnProperty.call(response, "partialSuccess"); - } - function createLoggingPartialSuccessResponseHandler() { - return { - handleResponse(response) { - if (response == null || !isPartialSuccessResponse(response) || response.partialSuccess == null || Object.keys(response.partialSuccess).length === 0) { - return; - } - api_1.diag.warn("Received Partial Success response:", JSON.stringify(response.partialSuccess)); - } - }; - } - exports.createLoggingPartialSuccessResponseHandler = createLoggingPartialSuccessResponseHandler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/otlp-export-delegate.js -var require_otlp_export_delegate = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpExportDelegate = undefined; - var core_1 = require_src7(); - var types_1 = require_types10(); - var logging_response_handler_1 = require_logging_response_handler(); - var api_1 = require_src(); - - class OTLPExportDelegate { - _transport; - _serializer; - _responseHandler; - _promiseQueue; - _timeout; - _diagLogger; - constructor(_transport, _serializer, _responseHandler, _promiseQueue, _timeout) { - this._transport = _transport; - this._serializer = _serializer; - this._responseHandler = _responseHandler; - this._promiseQueue = _promiseQueue; - this._timeout = _timeout; - this._diagLogger = api_1.diag.createComponentLogger({ - namespace: "OTLPExportDelegate" - }); - } - export(internalRepresentation, resultCallback) { - this._diagLogger.debug("items to be sent", internalRepresentation); - if (this._promiseQueue.hasReachedLimit()) { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Concurrent export limit reached") - }); - return; - } - const serializedRequest = this._serializer.serializeRequest(internalRepresentation); - if (serializedRequest == null) { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Nothing to send") - }); - return; - } - this._promiseQueue.pushPromise(this._transport.send(serializedRequest, this._timeout).then((response) => { - if (response.status === "success") { - if (response.data != null) { - try { - this._responseHandler.handleResponse(this._serializer.deserializeResponse(response.data)); - } catch (e) { - this._diagLogger.warn("Export succeeded but could not deserialize response - is the response specification compliant?", e, response.data); - } - } - resultCallback({ - code: core_1.ExportResultCode.SUCCESS - }); - return; - } else if (response.status === "failure" && response.error) { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: response.error - }); - return; - } else if (response.status === "retryable") { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new types_1.OTLPExporterError("Export failed with retryable status") - }); - } else { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new types_1.OTLPExporterError("Export failed with unknown error") - }); - } - }, (reason) => resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: reason - }))); - } - forceFlush() { - return this._promiseQueue.awaitAll(); - } - async shutdown() { - this._diagLogger.debug("shutdown started"); - await this.forceFlush(); - this._transport.shutdown(); - } - } - function createOtlpExportDelegate(components, settings) { - return new OTLPExportDelegate(components.transport, components.serializer, (0, logging_response_handler_1.createLoggingPartialSuccessResponseHandler)(), components.promiseHandler, settings.timeout); - } - exports.createOtlpExportDelegate = createOtlpExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/otlp-network-export-delegate.js -var require_otlp_network_export_delegate = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpNetworkExportDelegate = undefined; - var bounded_queue_export_promise_handler_1 = require_bounded_queue_export_promise_handler(); - var otlp_export_delegate_1 = require_otlp_export_delegate(); - function createOtlpNetworkExportDelegate(options, serializer, transport) { - return (0, otlp_export_delegate_1.createOtlpExportDelegate)({ - transport, - serializer, - promiseHandler: (0, bounded_queue_export_promise_handler_1.createBoundedQueueExportPromiseHandler)(options) - }, { timeout: options.timeoutMillis }); - } - exports.createOtlpNetworkExportDelegate = createOtlpNetworkExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/index.js -var require_src63 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpNetworkExportDelegate = exports.CompressionAlgorithm = exports.getSharedConfigurationDefaults = exports.mergeOtlpSharedConfigurationWithDefaults = exports.OTLPExporterError = exports.OTLPExporterBase = undefined; - var OTLPExporterBase_1 = require_OTLPExporterBase(); - Object.defineProperty(exports, "OTLPExporterBase", { enumerable: true, get: function() { - return OTLPExporterBase_1.OTLPExporterBase; - } }); - var types_1 = require_types10(); - Object.defineProperty(exports, "OTLPExporterError", { enumerable: true, get: function() { - return types_1.OTLPExporterError; - } }); - var shared_configuration_1 = require_shared_configuration(); - Object.defineProperty(exports, "mergeOtlpSharedConfigurationWithDefaults", { enumerable: true, get: function() { - return shared_configuration_1.mergeOtlpSharedConfigurationWithDefaults; - } }); - Object.defineProperty(exports, "getSharedConfigurationDefaults", { enumerable: true, get: function() { - return shared_configuration_1.getSharedConfigurationDefaults; - } }); - var legacy_node_configuration_1 = require_legacy_node_configuration(); - Object.defineProperty(exports, "CompressionAlgorithm", { enumerable: true, get: function() { - return legacy_node_configuration_1.CompressionAlgorithm; - } }); - var otlp_network_export_delegate_1 = require_otlp_network_export_delegate(); - Object.defineProperty(exports, "createOtlpNetworkExportDelegate", { enumerable: true, get: function() { - return otlp_network_export_delegate_1.createOtlpNetworkExportDelegate; - } }); -}); - -// ../../../../node_modules/.bun/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js -var require_aspromise = __commonJS((exports, module) => { - module.exports = asPromise; - function asPromise(fn, ctx) { - var params = new Array(arguments.length - 1), offset = 0, index = 2, pending = true; - while (index < arguments.length) - params[offset++] = arguments[index++]; - return new Promise(function executor(resolve2, reject) { - params[offset] = function callback(err) { - if (pending) { - pending = false; - if (err) - reject(err); - else { - var params2 = new Array(arguments.length - 1), offset2 = 0; - while (offset2 < params2.length) - params2[offset2++] = arguments[offset2]; - resolve2.apply(null, params2); - } - } - }; - try { - fn.apply(ctx || null, params); - } catch (err) { - if (pending) { - pending = false; - reject(err); - } - } - }); - } -}); - -// ../../../../node_modules/.bun/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js -var require_base64 = __commonJS((exports) => { - var base643 = exports; - base643.length = function length(string5) { - var p = string5.length; - if (!p) - return 0; - var n = 0; - while (--p % 4 > 1 && string5.charAt(p) === "=") - ++n; - return Math.ceil(string5.length * 3) / 4 - n; - }; - var b64 = new Array(64); - var s64 = new Array(123); - for (i = 0;i < 64; ) - s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++; - var i; - base643.encode = function encode(buffer, start, end) { - var parts = null, chunk = []; - var i2 = 0, j = 0, t; - while (start < end) { - var b = buffer[start++]; - switch (j) { - case 0: - chunk[i2++] = b64[b >> 2]; - t = (b & 3) << 4; - j = 1; - break; - case 1: - chunk[i2++] = b64[t | b >> 4]; - t = (b & 15) << 2; - j = 2; - break; - case 2: - chunk[i2++] = b64[t | b >> 6]; - chunk[i2++] = b64[b & 63]; - j = 0; - break; - } - if (i2 > 8191) { - (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk)); - i2 = 0; - } - } - if (j) { - chunk[i2++] = b64[t]; - chunk[i2++] = 61; - if (j === 1) - chunk[i2++] = 61; - } - if (parts) { - if (i2) - parts.push(String.fromCharCode.apply(String, chunk.slice(0, i2))); - return parts.join(""); - } - return String.fromCharCode.apply(String, chunk.slice(0, i2)); - }; - var invalidEncoding = "invalid encoding"; - base643.decode = function decode(string5, buffer, offset) { - var start = offset; - var j = 0, t; - for (var i2 = 0;i2 < string5.length; ) { - var c = string5.charCodeAt(i2++); - if (c === 61 && j > 1) - break; - if ((c = s64[c]) === undefined) - throw Error(invalidEncoding); - switch (j) { - case 0: - t = c; - j = 1; - break; - case 1: - buffer[offset++] = t << 2 | (c & 48) >> 4; - t = c; - j = 2; - break; - case 2: - buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2; - t = c; - j = 3; - break; - case 3: - buffer[offset++] = (t & 3) << 6 | c; - j = 0; - break; - } - } - if (j === 1) - throw Error(invalidEncoding); - return offset - start; - }; - base643.test = function test(string5) { - return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string5); - }; -}); - -// ../../../../node_modules/.bun/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js -var require_eventemitter = __commonJS((exports, module) => { - module.exports = EventEmitter; - function EventEmitter() { - this._listeners = {}; - } - EventEmitter.prototype.on = function on(evt, fn, ctx) { - (this._listeners[evt] || (this._listeners[evt] = [])).push({ - fn, - ctx: ctx || this - }); - return this; - }; - EventEmitter.prototype.off = function off(evt, fn) { - if (evt === undefined) - this._listeners = {}; - else { - if (fn === undefined) - this._listeners[evt] = []; - else { - var listeners = this._listeners[evt]; - for (var i = 0;i < listeners.length; ) - if (listeners[i].fn === fn) - listeners.splice(i, 1); - else - ++i; - } - } - return this; - }; - EventEmitter.prototype.emit = function emit(evt) { - var listeners = this._listeners[evt]; - if (listeners) { - var args = [], i = 1; - for (;i < arguments.length; ) - args.push(arguments[i++]); - for (i = 0;i < listeners.length; ) - listeners[i].fn.apply(listeners[i++].ctx, args); - } - return this; - }; -}); - -// ../../../../node_modules/.bun/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js -var require_float = __commonJS((exports, module) => { - module.exports = factory(factory); - function factory(exports2) { - if (typeof Float32Array !== "undefined") - (function() { - var f32 = new Float32Array([-0]), f8b = new Uint8Array(f32.buffer), le = f8b[3] === 128; - function writeFloat_f32_cpy(val, buf, pos) { - f32[0] = val; - buf[pos] = f8b[0]; - buf[pos + 1] = f8b[1]; - buf[pos + 2] = f8b[2]; - buf[pos + 3] = f8b[3]; - } - function writeFloat_f32_rev(val, buf, pos) { - f32[0] = val; - buf[pos] = f8b[3]; - buf[pos + 1] = f8b[2]; - buf[pos + 2] = f8b[1]; - buf[pos + 3] = f8b[0]; - } - exports2.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev; - exports2.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy; - function readFloat_f32_cpy(buf, pos) { - f8b[0] = buf[pos]; - f8b[1] = buf[pos + 1]; - f8b[2] = buf[pos + 2]; - f8b[3] = buf[pos + 3]; - return f32[0]; - } - function readFloat_f32_rev(buf, pos) { - f8b[3] = buf[pos]; - f8b[2] = buf[pos + 1]; - f8b[1] = buf[pos + 2]; - f8b[0] = buf[pos + 3]; - return f32[0]; - } - exports2.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev; - exports2.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy; - })(); - else - (function() { - function writeFloat_ieee754(writeUint, val, buf, pos) { - var sign = val < 0 ? 1 : 0; - if (sign) - val = -val; - if (val === 0) - writeUint(1 / val > 0 ? 0 : 2147483648, buf, pos); - else if (isNaN(val)) - writeUint(2143289344, buf, pos); - else if (val > 340282346638528860000000000000000000000) - writeUint((sign << 31 | 2139095040) >>> 0, buf, pos); - else if (val < 0.000000000000000000000000000000000000011754943508222875) - writeUint((sign << 31 | Math.round(val / 0.000000000000000000000000000000000000000000001401298464324817)) >>> 0, buf, pos); - else { - var exponent = Math.floor(Math.log(val) / Math.LN2), mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607; - writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos); - } - } - exports2.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE); - exports2.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE); - function readFloat_ieee754(readUint, buf, pos) { - var uint = readUint(buf, pos), sign = (uint >> 31) * 2 + 1, exponent = uint >>> 23 & 255, mantissa = uint & 8388607; - return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 0.000000000000000000000000000000000000000000001401298464324817 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608); - } - exports2.readFloatLE = readFloat_ieee754.bind(null, readUintLE); - exports2.readFloatBE = readFloat_ieee754.bind(null, readUintBE); - })(); - if (typeof Float64Array !== "undefined") - (function() { - var f64 = new Float64Array([-0]), f8b = new Uint8Array(f64.buffer), le = f8b[7] === 128; - function writeDouble_f64_cpy(val, buf, pos) { - f64[0] = val; - buf[pos] = f8b[0]; - buf[pos + 1] = f8b[1]; - buf[pos + 2] = f8b[2]; - buf[pos + 3] = f8b[3]; - buf[pos + 4] = f8b[4]; - buf[pos + 5] = f8b[5]; - buf[pos + 6] = f8b[6]; - buf[pos + 7] = f8b[7]; - } - function writeDouble_f64_rev(val, buf, pos) { - f64[0] = val; - buf[pos] = f8b[7]; - buf[pos + 1] = f8b[6]; - buf[pos + 2] = f8b[5]; - buf[pos + 3] = f8b[4]; - buf[pos + 4] = f8b[3]; - buf[pos + 5] = f8b[2]; - buf[pos + 6] = f8b[1]; - buf[pos + 7] = f8b[0]; - } - exports2.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev; - exports2.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy; - function readDouble_f64_cpy(buf, pos) { - f8b[0] = buf[pos]; - f8b[1] = buf[pos + 1]; - f8b[2] = buf[pos + 2]; - f8b[3] = buf[pos + 3]; - f8b[4] = buf[pos + 4]; - f8b[5] = buf[pos + 5]; - f8b[6] = buf[pos + 6]; - f8b[7] = buf[pos + 7]; - return f64[0]; - } - function readDouble_f64_rev(buf, pos) { - f8b[7] = buf[pos]; - f8b[6] = buf[pos + 1]; - f8b[5] = buf[pos + 2]; - f8b[4] = buf[pos + 3]; - f8b[3] = buf[pos + 4]; - f8b[2] = buf[pos + 5]; - f8b[1] = buf[pos + 6]; - f8b[0] = buf[pos + 7]; - return f64[0]; - } - exports2.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev; - exports2.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy; - })(); - else - (function() { - function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) { - var sign = val < 0 ? 1 : 0; - if (sign) - val = -val; - if (val === 0) { - writeUint(0, buf, pos + off0); - writeUint(1 / val > 0 ? 0 : 2147483648, buf, pos + off1); - } else if (isNaN(val)) { - writeUint(0, buf, pos + off0); - writeUint(2146959360, buf, pos + off1); - } else if (val > 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) { - writeUint(0, buf, pos + off0); - writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1); - } else { - var mantissa; - if (val < 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072014) { - mantissa = val / 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005; - writeUint(mantissa >>> 0, buf, pos + off0); - writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1); - } else { - var exponent = Math.floor(Math.log(val) / Math.LN2); - if (exponent === 1024) - exponent = 1023; - mantissa = val * Math.pow(2, -exponent); - writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0); - writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1); - } - } - } - exports2.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4); - exports2.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0); - function readDouble_ieee754(readUint, off0, off1, buf, pos) { - var lo = readUint(buf, pos + off0), hi = readUint(buf, pos + off1); - var sign = (hi >> 31) * 2 + 1, exponent = hi >>> 20 & 2047, mantissa = 4294967296 * (hi & 1048575) + lo; - return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496); - } - exports2.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4); - exports2.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0); - })(); - return exports2; - } - function writeUintLE(val, buf, pos) { - buf[pos] = val & 255; - buf[pos + 1] = val >>> 8 & 255; - buf[pos + 2] = val >>> 16 & 255; - buf[pos + 3] = val >>> 24; - } - function writeUintBE(val, buf, pos) { - buf[pos] = val >>> 24; - buf[pos + 1] = val >>> 16 & 255; - buf[pos + 2] = val >>> 8 & 255; - buf[pos + 3] = val & 255; - } - function readUintLE(buf, pos) { - return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0; - } - function readUintBE(buf, pos) { - return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0; - } -}); - -// ../../../../node_modules/.bun/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js -var require_inquire = __commonJS((exports, module) => { - module.exports = inquire; - function inquire(moduleName) { - try { - var mod = eval("quire".replace(/^/, "re"))(moduleName); - if (mod && (mod.length || Object.keys(mod).length)) - return mod; - } catch (e) {} - return null; - } -}); - -// ../../../../node_modules/.bun/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js -var require_utf8 = __commonJS((exports) => { - var utf8 = exports; - utf8.length = function utf8_length(string5) { - var len = 0, c = 0; - for (var i = 0;i < string5.length; ++i) { - c = string5.charCodeAt(i); - if (c < 128) - len += 1; - else if (c < 2048) - len += 2; - else if ((c & 64512) === 55296 && (string5.charCodeAt(i + 1) & 64512) === 56320) { - ++i; - len += 4; - } else - len += 3; - } - return len; - }; - utf8.read = function utf8_read(buffer, start, end) { - var len = end - start; - if (len < 1) - return ""; - var parts = null, chunk = [], i = 0, t; - while (start < end) { - t = buffer[start++]; - if (t < 128) - chunk[i++] = t; - else if (t > 191 && t < 224) - chunk[i++] = (t & 31) << 6 | buffer[start++] & 63; - else if (t > 239 && t < 365) { - t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 65536; - chunk[i++] = 55296 + (t >> 10); - chunk[i++] = 56320 + (t & 1023); - } else - chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63; - if (i > 8191) { - (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk)); - i = 0; - } - } - if (parts) { - if (i) - parts.push(String.fromCharCode.apply(String, chunk.slice(0, i))); - return parts.join(""); - } - return String.fromCharCode.apply(String, chunk.slice(0, i)); - }; - utf8.write = function utf8_write(string5, buffer, offset) { - var start = offset, c1, c2; - for (var i = 0;i < string5.length; ++i) { - c1 = string5.charCodeAt(i); - if (c1 < 128) { - buffer[offset++] = c1; - } else if (c1 < 2048) { - buffer[offset++] = c1 >> 6 | 192; - buffer[offset++] = c1 & 63 | 128; - } else if ((c1 & 64512) === 55296 && ((c2 = string5.charCodeAt(i + 1)) & 64512) === 56320) { - c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023); - ++i; - buffer[offset++] = c1 >> 18 | 240; - buffer[offset++] = c1 >> 12 & 63 | 128; - buffer[offset++] = c1 >> 6 & 63 | 128; - buffer[offset++] = c1 & 63 | 128; - } else { - buffer[offset++] = c1 >> 12 | 224; - buffer[offset++] = c1 >> 6 & 63 | 128; - buffer[offset++] = c1 & 63 | 128; - } - } - return offset - start; - }; -}); - -// ../../../../node_modules/.bun/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js -var require_pool = __commonJS((exports, module) => { - module.exports = pool; - function pool(alloc, slice, size) { - var SIZE = size || 8192; - var MAX = SIZE >>> 1; - var slab = null; - var offset = SIZE; - return function pool_alloc(size2) { - if (size2 < 1 || size2 > MAX) - return alloc(size2); - if (offset + size2 > SIZE) { - slab = alloc(SIZE); - offset = 0; - } - var buf = slice.call(slab, offset, offset += size2); - if (offset & 7) - offset = (offset | 7) + 1; - return buf; - }; - } -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/util/longbits.js -var require_longbits = __commonJS((exports, module) => { - module.exports = LongBits; - var util3 = require_minimal(); - function LongBits(lo, hi) { - this.lo = lo >>> 0; - this.hi = hi >>> 0; - } - var zero = LongBits.zero = new LongBits(0, 0); - zero.toNumber = function() { - return 0; - }; - zero.zzEncode = zero.zzDecode = function() { - return this; - }; - zero.length = function() { - return 1; - }; - var zeroHash = LongBits.zeroHash = "\x00\x00\x00\x00\x00\x00\x00\x00"; - LongBits.fromNumber = function fromNumber(value) { - if (value === 0) - return zero; - var sign = value < 0; - if (sign) - value = -value; - var lo = value >>> 0, hi = (value - lo) / 4294967296 >>> 0; - if (sign) { - hi = ~hi >>> 0; - lo = ~lo >>> 0; - if (++lo > 4294967295) { - lo = 0; - if (++hi > 4294967295) - hi = 0; - } - } - return new LongBits(lo, hi); - }; - LongBits.from = function from(value) { - if (typeof value === "number") - return LongBits.fromNumber(value); - if (util3.isString(value)) { - if (util3.Long) - value = util3.Long.fromString(value); - else - return LongBits.fromNumber(parseInt(value, 10)); - } - return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero; - }; - LongBits.prototype.toNumber = function toNumber(unsigned) { - if (!unsigned && this.hi >>> 31) { - var lo = ~this.lo + 1 >>> 0, hi = ~this.hi >>> 0; - if (!lo) - hi = hi + 1 >>> 0; - return -(lo + hi * 4294967296); - } - return this.lo + this.hi * 4294967296; - }; - LongBits.prototype.toLong = function toLong(unsigned) { - return util3.Long ? new util3.Long(this.lo | 0, this.hi | 0, Boolean(unsigned)) : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) }; - }; - var charCodeAt = String.prototype.charCodeAt; - LongBits.fromHash = function fromHash(hash2) { - if (hash2 === zeroHash) - return zero; - return new LongBits((charCodeAt.call(hash2, 0) | charCodeAt.call(hash2, 1) << 8 | charCodeAt.call(hash2, 2) << 16 | charCodeAt.call(hash2, 3) << 24) >>> 0, (charCodeAt.call(hash2, 4) | charCodeAt.call(hash2, 5) << 8 | charCodeAt.call(hash2, 6) << 16 | charCodeAt.call(hash2, 7) << 24) >>> 0); - }; - LongBits.prototype.toHash = function toHash() { - return String.fromCharCode(this.lo & 255, this.lo >>> 8 & 255, this.lo >>> 16 & 255, this.lo >>> 24, this.hi & 255, this.hi >>> 8 & 255, this.hi >>> 16 & 255, this.hi >>> 24); - }; - LongBits.prototype.zzEncode = function zzEncode() { - var mask = this.hi >> 31; - this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0; - this.lo = (this.lo << 1 ^ mask) >>> 0; - return this; - }; - LongBits.prototype.zzDecode = function zzDecode() { - var mask = -(this.lo & 1); - this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0; - this.hi = (this.hi >>> 1 ^ mask) >>> 0; - return this; - }; - LongBits.prototype.length = function length() { - var part0 = this.lo, part1 = (this.lo >>> 28 | this.hi << 4) >>> 0, part2 = this.hi >>> 24; - return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/util/minimal.js -var require_minimal = __commonJS((exports) => { - var util3 = exports; - util3.asPromise = require_aspromise(); - util3.base64 = require_base64(); - util3.EventEmitter = require_eventemitter(); - util3.float = require_float(); - util3.inquire = require_inquire(); - util3.utf8 = require_utf8(); - util3.pool = require_pool(); - util3.LongBits = require_longbits(); - util3.isNode = Boolean(typeof global !== "undefined" && global && global.process && global.process.versions && global.process.versions.node); - util3.global = util3.isNode && global || typeof window !== "undefined" && window || typeof self !== "undefined" && self || exports; - util3.emptyArray = Object.freeze ? Object.freeze([]) : []; - util3.emptyObject = Object.freeze ? Object.freeze({}) : {}; - util3.isInteger = Number.isInteger || function isInteger(value) { - return typeof value === "number" && isFinite(value) && Math.floor(value) === value; - }; - util3.isString = function isString(value) { - return typeof value === "string" || value instanceof String; - }; - util3.isObject = function isObject(value) { - return value && typeof value === "object"; - }; - util3.isset = util3.isSet = function isSet(obj, prop) { - var value = obj[prop]; - if (value != null && obj.hasOwnProperty(prop)) - return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0; - return false; - }; - util3.Buffer = function() { - try { - var Buffer2 = util3.inquire("buffer").Buffer; - return Buffer2.prototype.utf8Write ? Buffer2 : null; - } catch (e) { - return null; - } - }(); - util3._Buffer_from = null; - util3._Buffer_allocUnsafe = null; - util3.newBuffer = function newBuffer(sizeOrArray) { - return typeof sizeOrArray === "number" ? util3.Buffer ? util3._Buffer_allocUnsafe(sizeOrArray) : new util3.Array(sizeOrArray) : util3.Buffer ? util3._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray); - }; - util3.Array = typeof Uint8Array !== "undefined" ? Uint8Array : Array; - util3.Long = util3.global.dcodeIO && util3.global.dcodeIO.Long || util3.global.Long || util3.inquire("long"); - util3.key2Re = /^true|false|0|1$/; - util3.key32Re = /^-?(?:0|[1-9][0-9]*)$/; - util3.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/; - util3.longToHash = function longToHash(value) { - return value ? util3.LongBits.from(value).toHash() : util3.LongBits.zeroHash; - }; - util3.longFromHash = function longFromHash(hash2, unsigned) { - var bits = util3.LongBits.fromHash(hash2); - if (util3.Long) - return util3.Long.fromBits(bits.lo, bits.hi, unsigned); - return bits.toNumber(Boolean(unsigned)); - }; - function merge2(dst, src, ifNotSet) { - for (var keys = Object.keys(src), i = 0;i < keys.length; ++i) - if (dst[keys[i]] === undefined || !ifNotSet) - dst[keys[i]] = src[keys[i]]; - return dst; - } - util3.merge = merge2; - util3.lcFirst = function lcFirst(str) { - return str.charAt(0).toLowerCase() + str.substring(1); - }; - function newError(name) { - function CustomError(message, properties) { - if (!(this instanceof CustomError)) - return new CustomError(message, properties); - Object.defineProperty(this, "message", { get: function() { - return message; - } }); - if (Error.captureStackTrace) - Error.captureStackTrace(this, CustomError); - else - Object.defineProperty(this, "stack", { value: new Error().stack || "" }); - if (properties) - merge2(this, properties); - } - CustomError.prototype = Object.create(Error.prototype, { - constructor: { - value: CustomError, - writable: true, - enumerable: false, - configurable: true - }, - name: { - get: function get() { - return name; - }, - set: undefined, - enumerable: false, - configurable: true - }, - toString: { - value: function value() { - return this.name + ": " + this.message; - }, - writable: true, - enumerable: false, - configurable: true - } - }); - return CustomError; - } - util3.newError = newError; - util3.ProtocolError = newError("ProtocolError"); - util3.oneOfGetter = function getOneOf(fieldNames) { - var fieldMap = {}; - for (var i = 0;i < fieldNames.length; ++i) - fieldMap[fieldNames[i]] = 1; - return function() { - for (var keys = Object.keys(this), i2 = keys.length - 1;i2 > -1; --i2) - if (fieldMap[keys[i2]] === 1 && this[keys[i2]] !== undefined && this[keys[i2]] !== null) - return keys[i2]; - }; - }; - util3.oneOfSetter = function setOneOf(fieldNames) { - return function(name) { - for (var i = 0;i < fieldNames.length; ++i) - if (fieldNames[i] !== name) - delete this[fieldNames[i]]; - }; - }; - util3.toJSONOptions = { - longs: String, - enums: String, - bytes: String, - json: true - }; - util3._configure = function() { - var Buffer2 = util3.Buffer; - if (!Buffer2) { - util3._Buffer_from = util3._Buffer_allocUnsafe = null; - return; - } - util3._Buffer_from = Buffer2.from !== Uint8Array.from && Buffer2.from || function Buffer_from(value, encoding) { - return new Buffer2(value, encoding); - }; - util3._Buffer_allocUnsafe = Buffer2.allocUnsafe || function Buffer_allocUnsafe(size) { - return new Buffer2(size); - }; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/writer.js -var require_writer = __commonJS((exports, module) => { - module.exports = Writer; - var util3 = require_minimal(); - var BufferWriter; - var LongBits = util3.LongBits; - var base643 = util3.base64; - var utf8 = util3.utf8; - function Op(fn, len, val) { - this.fn = fn; - this.len = len; - this.next = undefined; - this.val = val; - } - function noop() {} - function State(writer) { - this.head = writer.head; - this.tail = writer.tail; - this.len = writer.len; - this.next = writer.states; - } - function Writer() { - this.len = 0; - this.head = new Op(noop, 0, 0); - this.tail = this.head; - this.states = null; - } - var create4 = function create() { - return util3.Buffer ? function create_buffer_setup() { - return (Writer.create = function create_buffer() { - return new BufferWriter; - })(); - } : function create_array() { - return new Writer; - }; - }; - Writer.create = create4(); - Writer.alloc = function alloc(size) { - return new util3.Array(size); - }; - if (util3.Array !== Array) - Writer.alloc = util3.pool(Writer.alloc, util3.Array.prototype.subarray); - Writer.prototype._push = function push(fn, len, val) { - this.tail = this.tail.next = new Op(fn, len, val); - this.len += len; - return this; - }; - function writeByte(val, buf, pos) { - buf[pos] = val & 255; - } - function writeVarint32(val, buf, pos) { - while (val > 127) { - buf[pos++] = val & 127 | 128; - val >>>= 7; - } - buf[pos] = val; - } - function VarintOp(len, val) { - this.len = len; - this.next = undefined; - this.val = val; - } - VarintOp.prototype = Object.create(Op.prototype); - VarintOp.prototype.fn = writeVarint32; - Writer.prototype.uint32 = function write_uint32(value) { - this.len += (this.tail = this.tail.next = new VarintOp((value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5, value)).len; - return this; - }; - Writer.prototype.int32 = function write_int32(value) { - return value < 0 ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) : this.uint32(value); - }; - Writer.prototype.sint32 = function write_sint32(value) { - return this.uint32((value << 1 ^ value >> 31) >>> 0); - }; - function writeVarint64(val, buf, pos) { - while (val.hi) { - buf[pos++] = val.lo & 127 | 128; - val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0; - val.hi >>>= 7; - } - while (val.lo > 127) { - buf[pos++] = val.lo & 127 | 128; - val.lo = val.lo >>> 7; - } - buf[pos++] = val.lo; - } - Writer.prototype.uint64 = function write_uint64(value) { - var bits = LongBits.from(value); - return this._push(writeVarint64, bits.length(), bits); - }; - Writer.prototype.int64 = Writer.prototype.uint64; - Writer.prototype.sint64 = function write_sint64(value) { - var bits = LongBits.from(value).zzEncode(); - return this._push(writeVarint64, bits.length(), bits); - }; - Writer.prototype.bool = function write_bool(value) { - return this._push(writeByte, 1, value ? 1 : 0); - }; - function writeFixed32(val, buf, pos) { - buf[pos] = val & 255; - buf[pos + 1] = val >>> 8 & 255; - buf[pos + 2] = val >>> 16 & 255; - buf[pos + 3] = val >>> 24; - } - Writer.prototype.fixed32 = function write_fixed32(value) { - return this._push(writeFixed32, 4, value >>> 0); - }; - Writer.prototype.sfixed32 = Writer.prototype.fixed32; - Writer.prototype.fixed64 = function write_fixed64(value) { - var bits = LongBits.from(value); - return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi); - }; - Writer.prototype.sfixed64 = Writer.prototype.fixed64; - Writer.prototype.float = function write_float(value) { - return this._push(util3.float.writeFloatLE, 4, value); - }; - Writer.prototype.double = function write_double(value) { - return this._push(util3.float.writeDoubleLE, 8, value); - }; - var writeBytes = util3.Array.prototype.set ? function writeBytes_set(val, buf, pos) { - buf.set(val, pos); - } : function writeBytes_for(val, buf, pos) { - for (var i = 0;i < val.length; ++i) - buf[pos + i] = val[i]; - }; - Writer.prototype.bytes = function write_bytes(value) { - var len = value.length >>> 0; - if (!len) - return this._push(writeByte, 1, 0); - if (util3.isString(value)) { - var buf = Writer.alloc(len = base643.length(value)); - base643.decode(value, buf, 0); - value = buf; - } - return this.uint32(len)._push(writeBytes, len, value); - }; - Writer.prototype.string = function write_string(value) { - var len = utf8.length(value); - return len ? this.uint32(len)._push(utf8.write, len, value) : this._push(writeByte, 1, 0); - }; - Writer.prototype.fork = function fork() { - this.states = new State(this); - this.head = this.tail = new Op(noop, 0, 0); - this.len = 0; - return this; - }; - Writer.prototype.reset = function reset() { - if (this.states) { - this.head = this.states.head; - this.tail = this.states.tail; - this.len = this.states.len; - this.states = this.states.next; - } else { - this.head = this.tail = new Op(noop, 0, 0); - this.len = 0; - } - return this; - }; - Writer.prototype.ldelim = function ldelim() { - var head = this.head, tail = this.tail, len = this.len; - this.reset().uint32(len); - if (len) { - this.tail.next = head.next; - this.tail = tail; - this.len += len; - } - return this; - }; - Writer.prototype.finish = function finish() { - var head = this.head.next, buf = this.constructor.alloc(this.len), pos = 0; - while (head) { - head.fn(head.val, buf, pos); - pos += head.len; - head = head.next; - } - return buf; - }; - Writer._configure = function(BufferWriter_) { - BufferWriter = BufferWriter_; - Writer.create = create4(); - BufferWriter._configure(); - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/writer_buffer.js -var require_writer_buffer = __commonJS((exports, module) => { - module.exports = BufferWriter; - var Writer = require_writer(); - (BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter; - var util3 = require_minimal(); - function BufferWriter() { - Writer.call(this); - } - BufferWriter._configure = function() { - BufferWriter.alloc = util3._Buffer_allocUnsafe; - BufferWriter.writeBytesBuffer = util3.Buffer && util3.Buffer.prototype instanceof Uint8Array && util3.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) { - buf.set(val, pos); - } : function writeBytesBuffer_copy(val, buf, pos) { - if (val.copy) - val.copy(buf, pos, 0, val.length); - else - for (var i = 0;i < val.length; ) - buf[pos++] = val[i++]; - }; - }; - BufferWriter.prototype.bytes = function write_bytes_buffer(value) { - if (util3.isString(value)) - value = util3._Buffer_from(value, "base64"); - var len = value.length >>> 0; - this.uint32(len); - if (len) - this._push(BufferWriter.writeBytesBuffer, len, value); - return this; - }; - function writeStringBuffer(val, buf, pos) { - if (val.length < 40) - util3.utf8.write(val, buf, pos); - else if (buf.utf8Write) - buf.utf8Write(val, pos); - else - buf.write(val, pos); - } - BufferWriter.prototype.string = function write_string_buffer(value) { - var len = util3.Buffer.byteLength(value); - this.uint32(len); - if (len) - this._push(writeStringBuffer, len, value); - return this; - }; - BufferWriter._configure(); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/reader.js -var require_reader = __commonJS((exports, module) => { - module.exports = Reader; - var util3 = require_minimal(); - var BufferReader; - var LongBits = util3.LongBits; - var utf8 = util3.utf8; - function indexOutOfRange(reader, writeLength) { - return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len); - } - function Reader(buffer) { - this.buf = buffer; - this.pos = 0; - this.len = buffer.length; - } - var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) { - if (buffer instanceof Uint8Array || Array.isArray(buffer)) - return new Reader(buffer); - throw Error("illegal buffer"); - } : function create_array(buffer) { - if (Array.isArray(buffer)) - return new Reader(buffer); - throw Error("illegal buffer"); - }; - var create4 = function create() { - return util3.Buffer ? function create_buffer_setup(buffer) { - return (Reader.create = function create_buffer(buffer2) { - return util3.Buffer.isBuffer(buffer2) ? new BufferReader(buffer2) : create_array(buffer2); - })(buffer); - } : create_array; - }; - Reader.create = create4(); - Reader.prototype._slice = util3.Array.prototype.subarray || util3.Array.prototype.slice; - Reader.prototype.uint32 = function read_uint32_setup() { - var value = 4294967295; - return function read_uint32() { - value = (this.buf[this.pos] & 127) >>> 0; - if (this.buf[this.pos++] < 128) - return value; - value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; - if (this.buf[this.pos++] < 128) - return value; - value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; - if (this.buf[this.pos++] < 128) - return value; - value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; - if (this.buf[this.pos++] < 128) - return value; - value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; - if (this.buf[this.pos++] < 128) - return value; - if ((this.pos += 5) > this.len) { - this.pos = this.len; - throw indexOutOfRange(this, 10); - } - return value; - }; - }(); - Reader.prototype.int32 = function read_int32() { - return this.uint32() | 0; - }; - Reader.prototype.sint32 = function read_sint32() { - var value = this.uint32(); - return value >>> 1 ^ -(value & 1) | 0; - }; - function readLongVarint() { - var bits = new LongBits(0, 0); - var i = 0; - if (this.len - this.pos > 4) { - for (;i < 4; ++i) { - bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0; - if (this.buf[this.pos++] < 128) - return bits; - } - bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0; - bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0; - if (this.buf[this.pos++] < 128) - return bits; - i = 0; - } else { - for (;i < 3; ++i) { - if (this.pos >= this.len) - throw indexOutOfRange(this); - bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0; - if (this.buf[this.pos++] < 128) - return bits; - } - bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0; - return bits; - } - if (this.len - this.pos > 4) { - for (;i < 5; ++i) { - bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0; - if (this.buf[this.pos++] < 128) - return bits; - } - } else { - for (;i < 5; ++i) { - if (this.pos >= this.len) - throw indexOutOfRange(this); - bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0; - if (this.buf[this.pos++] < 128) - return bits; - } - } - throw Error("invalid varint encoding"); - } - Reader.prototype.bool = function read_bool() { - return this.uint32() !== 0; - }; - function readFixed32_end(buf, end) { - return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0; - } - Reader.prototype.fixed32 = function read_fixed32() { - if (this.pos + 4 > this.len) - throw indexOutOfRange(this, 4); - return readFixed32_end(this.buf, this.pos += 4); - }; - Reader.prototype.sfixed32 = function read_sfixed32() { - if (this.pos + 4 > this.len) - throw indexOutOfRange(this, 4); - return readFixed32_end(this.buf, this.pos += 4) | 0; - }; - function readFixed64() { - if (this.pos + 8 > this.len) - throw indexOutOfRange(this, 8); - return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4)); - } - Reader.prototype.float = function read_float() { - if (this.pos + 4 > this.len) - throw indexOutOfRange(this, 4); - var value = util3.float.readFloatLE(this.buf, this.pos); - this.pos += 4; - return value; - }; - Reader.prototype.double = function read_double() { - if (this.pos + 8 > this.len) - throw indexOutOfRange(this, 4); - var value = util3.float.readDoubleLE(this.buf, this.pos); - this.pos += 8; - return value; - }; - Reader.prototype.bytes = function read_bytes() { - var length = this.uint32(), start = this.pos, end = this.pos + length; - if (end > this.len) - throw indexOutOfRange(this, length); - this.pos += length; - if (Array.isArray(this.buf)) - return this.buf.slice(start, end); - if (start === end) { - var nativeBuffer = util3.Buffer; - return nativeBuffer ? nativeBuffer.alloc(0) : new this.buf.constructor(0); - } - return this._slice.call(this.buf, start, end); - }; - Reader.prototype.string = function read_string() { - var bytes = this.bytes(); - return utf8.read(bytes, 0, bytes.length); - }; - Reader.prototype.skip = function skip(length) { - if (typeof length === "number") { - if (this.pos + length > this.len) - throw indexOutOfRange(this, length); - this.pos += length; - } else { - do { - if (this.pos >= this.len) - throw indexOutOfRange(this); - } while (this.buf[this.pos++] & 128); - } - return this; - }; - Reader.prototype.skipType = function(wireType) { - switch (wireType) { - case 0: - this.skip(); - break; - case 1: - this.skip(8); - break; - case 2: - this.skip(this.uint32()); - break; - case 3: - while ((wireType = this.uint32() & 7) !== 4) { - this.skipType(wireType); - } - break; - case 5: - this.skip(4); - break; - default: - throw Error("invalid wire type " + wireType + " at offset " + this.pos); - } - return this; - }; - Reader._configure = function(BufferReader_) { - BufferReader = BufferReader_; - Reader.create = create4(); - BufferReader._configure(); - var fn = util3.Long ? "toLong" : "toNumber"; - util3.merge(Reader.prototype, { - int64: function read_int64() { - return readLongVarint.call(this)[fn](false); - }, - uint64: function read_uint64() { - return readLongVarint.call(this)[fn](true); - }, - sint64: function read_sint64() { - return readLongVarint.call(this).zzDecode()[fn](false); - }, - fixed64: function read_fixed64() { - return readFixed64.call(this)[fn](true); - }, - sfixed64: function read_sfixed64() { - return readFixed64.call(this)[fn](false); - } - }); - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/reader_buffer.js -var require_reader_buffer = __commonJS((exports, module) => { - module.exports = BufferReader; - var Reader = require_reader(); - (BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader; - var util3 = require_minimal(); - function BufferReader(buffer) { - Reader.call(this, buffer); - } - BufferReader._configure = function() { - if (util3.Buffer) - BufferReader.prototype._slice = util3.Buffer.prototype.slice; - }; - BufferReader.prototype.string = function read_string_buffer() { - var len = this.uint32(); - return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len)); - }; - BufferReader._configure(); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/rpc/service.js -var require_service = __commonJS((exports, module) => { - module.exports = Service; - var util3 = require_minimal(); - (Service.prototype = Object.create(util3.EventEmitter.prototype)).constructor = Service; - function Service(rpcImpl, requestDelimited, responseDelimited) { - if (typeof rpcImpl !== "function") - throw TypeError("rpcImpl must be a function"); - util3.EventEmitter.call(this); - this.rpcImpl = rpcImpl; - this.requestDelimited = Boolean(requestDelimited); - this.responseDelimited = Boolean(responseDelimited); - } - Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) { - if (!request) - throw TypeError("request must be specified"); - var self2 = this; - if (!callback) - return util3.asPromise(rpcCall, self2, method, requestCtor, responseCtor, request); - if (!self2.rpcImpl) { - setTimeout(function() { - callback(Error("already ended")); - }, 0); - return; - } - try { - return self2.rpcImpl(method, requestCtor[self2.requestDelimited ? "encodeDelimited" : "encode"](request).finish(), function rpcCallback(err, response) { - if (err) { - self2.emit("error", err, method); - return callback(err); - } - if (response === null) { - self2.end(true); - return; - } - if (!(response instanceof responseCtor)) { - try { - response = responseCtor[self2.responseDelimited ? "decodeDelimited" : "decode"](response); - } catch (err2) { - self2.emit("error", err2, method); - return callback(err2); - } - } - self2.emit("data", response, method); - return callback(null, response); - }); - } catch (err) { - self2.emit("error", err, method); - setTimeout(function() { - callback(err); - }, 0); - return; - } - }; - Service.prototype.end = function end(endedByRPC) { - if (this.rpcImpl) { - if (!endedByRPC) - this.rpcImpl(null, null, null); - this.rpcImpl = null; - this.emit("end").off(); - } - return this; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/rpc.js -var require_rpc = __commonJS((exports) => { - var rpc = exports; - rpc.Service = require_service(); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/roots.js -var require_roots = __commonJS((exports, module) => { - module.exports = {}; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/index-minimal.js -var require_index_minimal = __commonJS((exports) => { - var protobuf = exports; - protobuf.build = "minimal"; - protobuf.Writer = require_writer(); - protobuf.BufferWriter = require_writer_buffer(); - protobuf.Reader = require_reader(); - protobuf.BufferReader = require_reader_buffer(); - protobuf.util = require_minimal(); - protobuf.rpc = require_rpc(); - protobuf.roots = require_roots(); - protobuf.configure = configure; - function configure() { - protobuf.util._configure(); - protobuf.Writer._configure(protobuf.BufferWriter); - protobuf.Reader._configure(protobuf.BufferReader); - } - configure(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/generated/root.js -var require_root = __commonJS((exports, module) => { - Object.defineProperty(exports, "__esModule", { value: true }); - var $protobuf = require_index_minimal(); - var $Reader = $protobuf.Reader; - var $Writer = $protobuf.Writer; - var $util = $protobuf.util; - var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); - $root.opentelemetry = function() { - var opentelemetry = {}; - opentelemetry.proto = function() { - var proto = {}; - proto.common = function() { - var common = {}; - common.v1 = function() { - var v1 = {}; - v1.AnyValue = function() { - function AnyValue(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - AnyValue.prototype.stringValue = null; - AnyValue.prototype.boolValue = null; - AnyValue.prototype.intValue = null; - AnyValue.prototype.doubleValue = null; - AnyValue.prototype.arrayValue = null; - AnyValue.prototype.kvlistValue = null; - AnyValue.prototype.bytesValue = null; - var $oneOfFields; - Object.defineProperty(AnyValue.prototype, "value", { - get: $util.oneOfGetter($oneOfFields = ["stringValue", "boolValue", "intValue", "doubleValue", "arrayValue", "kvlistValue", "bytesValue"]), - set: $util.oneOfSetter($oneOfFields) - }); - AnyValue.create = function create(properties) { - return new AnyValue(properties); - }; - AnyValue.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) - writer.uint32(10).string(message.stringValue); - if (message.boolValue != null && Object.hasOwnProperty.call(message, "boolValue")) - writer.uint32(16).bool(message.boolValue); - if (message.intValue != null && Object.hasOwnProperty.call(message, "intValue")) - writer.uint32(24).int64(message.intValue); - if (message.doubleValue != null && Object.hasOwnProperty.call(message, "doubleValue")) - writer.uint32(33).double(message.doubleValue); - if (message.arrayValue != null && Object.hasOwnProperty.call(message, "arrayValue")) - $root.opentelemetry.proto.common.v1.ArrayValue.encode(message.arrayValue, writer.uint32(42).fork()).ldelim(); - if (message.kvlistValue != null && Object.hasOwnProperty.call(message, "kvlistValue")) - $root.opentelemetry.proto.common.v1.KeyValueList.encode(message.kvlistValue, writer.uint32(50).fork()).ldelim(); - if (message.bytesValue != null && Object.hasOwnProperty.call(message, "bytesValue")) - writer.uint32(58).bytes(message.bytesValue); - return writer; - }; - AnyValue.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - AnyValue.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.AnyValue; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.stringValue = reader.string(); - break; - } - case 2: { - message.boolValue = reader.bool(); - break; - } - case 3: { - message.intValue = reader.int64(); - break; - } - case 4: { - message.doubleValue = reader.double(); - break; - } - case 5: { - message.arrayValue = $root.opentelemetry.proto.common.v1.ArrayValue.decode(reader, reader.uint32()); - break; - } - case 6: { - message.kvlistValue = $root.opentelemetry.proto.common.v1.KeyValueList.decode(reader, reader.uint32()); - break; - } - case 7: { - message.bytesValue = reader.bytes(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - AnyValue.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - AnyValue.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) { - properties.value = 1; - if (!$util.isString(message.stringValue)) - return "stringValue: string expected"; - } - if (message.boolValue != null && message.hasOwnProperty("boolValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (typeof message.boolValue !== "boolean") - return "boolValue: boolean expected"; - } - if (message.intValue != null && message.hasOwnProperty("intValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!$util.isInteger(message.intValue) && !(message.intValue && $util.isInteger(message.intValue.low) && $util.isInteger(message.intValue.high))) - return "intValue: integer|Long expected"; - } - if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (typeof message.doubleValue !== "number") - return "doubleValue: number expected"; - } - if (message.arrayValue != null && message.hasOwnProperty("arrayValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - { - var error48 = $root.opentelemetry.proto.common.v1.ArrayValue.verify(message.arrayValue); - if (error48) - return "arrayValue." + error48; - } - } - if (message.kvlistValue != null && message.hasOwnProperty("kvlistValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - { - var error48 = $root.opentelemetry.proto.common.v1.KeyValueList.verify(message.kvlistValue); - if (error48) - return "kvlistValue." + error48; - } - } - if (message.bytesValue != null && message.hasOwnProperty("bytesValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!(message.bytesValue && typeof message.bytesValue.length === "number" || $util.isString(message.bytesValue))) - return "bytesValue: buffer expected"; - } - return null; - }; - AnyValue.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.AnyValue) - return object3; - var message = new $root.opentelemetry.proto.common.v1.AnyValue; - if (object3.stringValue != null) - message.stringValue = String(object3.stringValue); - if (object3.boolValue != null) - message.boolValue = Boolean(object3.boolValue); - if (object3.intValue != null) { - if ($util.Long) - (message.intValue = $util.Long.fromValue(object3.intValue)).unsigned = false; - else if (typeof object3.intValue === "string") - message.intValue = parseInt(object3.intValue, 10); - else if (typeof object3.intValue === "number") - message.intValue = object3.intValue; - else if (typeof object3.intValue === "object") - message.intValue = new $util.LongBits(object3.intValue.low >>> 0, object3.intValue.high >>> 0).toNumber(); - } - if (object3.doubleValue != null) - message.doubleValue = Number(object3.doubleValue); - if (object3.arrayValue != null) { - if (typeof object3.arrayValue !== "object") - throw TypeError(".opentelemetry.proto.common.v1.AnyValue.arrayValue: object expected"); - message.arrayValue = $root.opentelemetry.proto.common.v1.ArrayValue.fromObject(object3.arrayValue); - } - if (object3.kvlistValue != null) { - if (typeof object3.kvlistValue !== "object") - throw TypeError(".opentelemetry.proto.common.v1.AnyValue.kvlistValue: object expected"); - message.kvlistValue = $root.opentelemetry.proto.common.v1.KeyValueList.fromObject(object3.kvlistValue); - } - if (object3.bytesValue != null) { - if (typeof object3.bytesValue === "string") - $util.base64.decode(object3.bytesValue, message.bytesValue = $util.newBuffer($util.base64.length(object3.bytesValue)), 0); - else if (object3.bytesValue.length >= 0) - message.bytesValue = object3.bytesValue; - } - return message; - }; - AnyValue.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) { - object3.stringValue = message.stringValue; - if (options.oneofs) - object3.value = "stringValue"; - } - if (message.boolValue != null && message.hasOwnProperty("boolValue")) { - object3.boolValue = message.boolValue; - if (options.oneofs) - object3.value = "boolValue"; - } - if (message.intValue != null && message.hasOwnProperty("intValue")) { - if (typeof message.intValue === "number") - object3.intValue = options.longs === String ? String(message.intValue) : message.intValue; - else - object3.intValue = options.longs === String ? $util.Long.prototype.toString.call(message.intValue) : options.longs === Number ? new $util.LongBits(message.intValue.low >>> 0, message.intValue.high >>> 0).toNumber() : message.intValue; - if (options.oneofs) - object3.value = "intValue"; - } - if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) { - object3.doubleValue = options.json && !isFinite(message.doubleValue) ? String(message.doubleValue) : message.doubleValue; - if (options.oneofs) - object3.value = "doubleValue"; - } - if (message.arrayValue != null && message.hasOwnProperty("arrayValue")) { - object3.arrayValue = $root.opentelemetry.proto.common.v1.ArrayValue.toObject(message.arrayValue, options); - if (options.oneofs) - object3.value = "arrayValue"; - } - if (message.kvlistValue != null && message.hasOwnProperty("kvlistValue")) { - object3.kvlistValue = $root.opentelemetry.proto.common.v1.KeyValueList.toObject(message.kvlistValue, options); - if (options.oneofs) - object3.value = "kvlistValue"; - } - if (message.bytesValue != null && message.hasOwnProperty("bytesValue")) { - object3.bytesValue = options.bytes === String ? $util.base64.encode(message.bytesValue, 0, message.bytesValue.length) : options.bytes === Array ? Array.prototype.slice.call(message.bytesValue) : message.bytesValue; - if (options.oneofs) - object3.value = "bytesValue"; - } - return object3; - }; - AnyValue.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - AnyValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.AnyValue"; - }; - return AnyValue; - }(); - v1.ArrayValue = function() { - function ArrayValue(properties) { - this.values = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ArrayValue.prototype.values = $util.emptyArray; - ArrayValue.create = function create(properties) { - return new ArrayValue(properties); - }; - ArrayValue.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.values != null && message.values.length) - for (var i = 0;i < message.values.length; ++i) - $root.opentelemetry.proto.common.v1.AnyValue.encode(message.values[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ArrayValue.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ArrayValue.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.ArrayValue; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.values && message.values.length)) - message.values = []; - message.values.push($root.opentelemetry.proto.common.v1.AnyValue.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ArrayValue.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ArrayValue.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.values != null && message.hasOwnProperty("values")) { - if (!Array.isArray(message.values)) - return "values: array expected"; - for (var i = 0;i < message.values.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.AnyValue.verify(message.values[i]); - if (error48) - return "values." + error48; - } - } - return null; - }; - ArrayValue.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.ArrayValue) - return object3; - var message = new $root.opentelemetry.proto.common.v1.ArrayValue; - if (object3.values) { - if (!Array.isArray(object3.values)) - throw TypeError(".opentelemetry.proto.common.v1.ArrayValue.values: array expected"); - message.values = []; - for (var i = 0;i < object3.values.length; ++i) { - if (typeof object3.values[i] !== "object") - throw TypeError(".opentelemetry.proto.common.v1.ArrayValue.values: object expected"); - message.values[i] = $root.opentelemetry.proto.common.v1.AnyValue.fromObject(object3.values[i]); - } - } - return message; - }; - ArrayValue.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.values = []; - if (message.values && message.values.length) { - object3.values = []; - for (var j = 0;j < message.values.length; ++j) - object3.values[j] = $root.opentelemetry.proto.common.v1.AnyValue.toObject(message.values[j], options); - } - return object3; - }; - ArrayValue.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ArrayValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.ArrayValue"; - }; - return ArrayValue; - }(); - v1.KeyValueList = function() { - function KeyValueList(properties) { - this.values = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - KeyValueList.prototype.values = $util.emptyArray; - KeyValueList.create = function create(properties) { - return new KeyValueList(properties); - }; - KeyValueList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.values != null && message.values.length) - for (var i = 0;i < message.values.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.values[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - KeyValueList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - KeyValueList.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.KeyValueList; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.values && message.values.length)) - message.values = []; - message.values.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - KeyValueList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - KeyValueList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.values != null && message.hasOwnProperty("values")) { - if (!Array.isArray(message.values)) - return "values: array expected"; - for (var i = 0;i < message.values.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.values[i]); - if (error48) - return "values." + error48; - } - } - return null; - }; - KeyValueList.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.KeyValueList) - return object3; - var message = new $root.opentelemetry.proto.common.v1.KeyValueList; - if (object3.values) { - if (!Array.isArray(object3.values)) - throw TypeError(".opentelemetry.proto.common.v1.KeyValueList.values: array expected"); - message.values = []; - for (var i = 0;i < object3.values.length; ++i) { - if (typeof object3.values[i] !== "object") - throw TypeError(".opentelemetry.proto.common.v1.KeyValueList.values: object expected"); - message.values[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.values[i]); - } - } - return message; - }; - KeyValueList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.values = []; - if (message.values && message.values.length) { - object3.values = []; - for (var j = 0;j < message.values.length; ++j) - object3.values[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.values[j], options); - } - return object3; - }; - KeyValueList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - KeyValueList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.KeyValueList"; - }; - return KeyValueList; - }(); - v1.KeyValue = function() { - function KeyValue(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - KeyValue.prototype.key = null; - KeyValue.prototype.value = null; - KeyValue.create = function create(properties) { - return new KeyValue(properties); - }; - KeyValue.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.key != null && Object.hasOwnProperty.call(message, "key")) - writer.uint32(10).string(message.key); - if (message.value != null && Object.hasOwnProperty.call(message, "value")) - $root.opentelemetry.proto.common.v1.AnyValue.encode(message.value, writer.uint32(18).fork()).ldelim(); - return writer; - }; - KeyValue.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - KeyValue.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.KeyValue; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.key = reader.string(); - break; - } - case 2: { - message.value = $root.opentelemetry.proto.common.v1.AnyValue.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - KeyValue.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - KeyValue.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.key != null && message.hasOwnProperty("key")) { - if (!$util.isString(message.key)) - return "key: string expected"; - } - if (message.value != null && message.hasOwnProperty("value")) { - var error48 = $root.opentelemetry.proto.common.v1.AnyValue.verify(message.value); - if (error48) - return "value." + error48; - } - return null; - }; - KeyValue.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.KeyValue) - return object3; - var message = new $root.opentelemetry.proto.common.v1.KeyValue; - if (object3.key != null) - message.key = String(object3.key); - if (object3.value != null) { - if (typeof object3.value !== "object") - throw TypeError(".opentelemetry.proto.common.v1.KeyValue.value: object expected"); - message.value = $root.opentelemetry.proto.common.v1.AnyValue.fromObject(object3.value); - } - return message; - }; - KeyValue.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - object3.key = ""; - object3.value = null; - } - if (message.key != null && message.hasOwnProperty("key")) - object3.key = message.key; - if (message.value != null && message.hasOwnProperty("value")) - object3.value = $root.opentelemetry.proto.common.v1.AnyValue.toObject(message.value, options); - return object3; - }; - KeyValue.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - KeyValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.KeyValue"; - }; - return KeyValue; - }(); - v1.InstrumentationScope = function() { - function InstrumentationScope(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - InstrumentationScope.prototype.name = null; - InstrumentationScope.prototype.version = null; - InstrumentationScope.prototype.attributes = $util.emptyArray; - InstrumentationScope.prototype.droppedAttributesCount = null; - InstrumentationScope.create = function create(properties) { - return new InstrumentationScope(properties); - }; - InstrumentationScope.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(10).string(message.name); - if (message.version != null && Object.hasOwnProperty.call(message, "version")) - writer.uint32(18).string(message.version); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(26).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(32).uint32(message.droppedAttributesCount); - return writer; - }; - InstrumentationScope.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - InstrumentationScope.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.InstrumentationScope; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.name = reader.string(); - break; - } - case 2: { - message.version = reader.string(); - break; - } - case 3: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 4: { - message.droppedAttributesCount = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - InstrumentationScope.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - InstrumentationScope.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.version != null && message.hasOwnProperty("version")) { - if (!$util.isString(message.version)) - return "version: string expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - return null; - }; - InstrumentationScope.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.InstrumentationScope) - return object3; - var message = new $root.opentelemetry.proto.common.v1.InstrumentationScope; - if (object3.name != null) - message.name = String(object3.name); - if (object3.version != null) - message.version = String(object3.version); - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.common.v1.InstrumentationScope.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.common.v1.InstrumentationScope.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - return message; - }; - InstrumentationScope.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - object3.name = ""; - object3.version = ""; - object3.droppedAttributesCount = 0; - } - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.version != null && message.hasOwnProperty("version")) - object3.version = message.version; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - return object3; - }; - InstrumentationScope.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - InstrumentationScope.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.InstrumentationScope"; - }; - return InstrumentationScope; - }(); - v1.EntityRef = function() { - function EntityRef(properties) { - this.idKeys = []; - this.descriptionKeys = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - EntityRef.prototype.schemaUrl = null; - EntityRef.prototype.type = null; - EntityRef.prototype.idKeys = $util.emptyArray; - EntityRef.prototype.descriptionKeys = $util.emptyArray; - EntityRef.create = function create(properties) { - return new EntityRef(properties); - }; - EntityRef.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(10).string(message.schemaUrl); - if (message.type != null && Object.hasOwnProperty.call(message, "type")) - writer.uint32(18).string(message.type); - if (message.idKeys != null && message.idKeys.length) - for (var i = 0;i < message.idKeys.length; ++i) - writer.uint32(26).string(message.idKeys[i]); - if (message.descriptionKeys != null && message.descriptionKeys.length) - for (var i = 0;i < message.descriptionKeys.length; ++i) - writer.uint32(34).string(message.descriptionKeys[i]); - return writer; - }; - EntityRef.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - EntityRef.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.EntityRef; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.schemaUrl = reader.string(); - break; - } - case 2: { - message.type = reader.string(); - break; - } - case 3: { - if (!(message.idKeys && message.idKeys.length)) - message.idKeys = []; - message.idKeys.push(reader.string()); - break; - } - case 4: { - if (!(message.descriptionKeys && message.descriptionKeys.length)) - message.descriptionKeys = []; - message.descriptionKeys.push(reader.string()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - EntityRef.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - EntityRef.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - if (message.type != null && message.hasOwnProperty("type")) { - if (!$util.isString(message.type)) - return "type: string expected"; - } - if (message.idKeys != null && message.hasOwnProperty("idKeys")) { - if (!Array.isArray(message.idKeys)) - return "idKeys: array expected"; - for (var i = 0;i < message.idKeys.length; ++i) - if (!$util.isString(message.idKeys[i])) - return "idKeys: string[] expected"; - } - if (message.descriptionKeys != null && message.hasOwnProperty("descriptionKeys")) { - if (!Array.isArray(message.descriptionKeys)) - return "descriptionKeys: array expected"; - for (var i = 0;i < message.descriptionKeys.length; ++i) - if (!$util.isString(message.descriptionKeys[i])) - return "descriptionKeys: string[] expected"; - } - return null; - }; - EntityRef.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.EntityRef) - return object3; - var message = new $root.opentelemetry.proto.common.v1.EntityRef; - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - if (object3.type != null) - message.type = String(object3.type); - if (object3.idKeys) { - if (!Array.isArray(object3.idKeys)) - throw TypeError(".opentelemetry.proto.common.v1.EntityRef.idKeys: array expected"); - message.idKeys = []; - for (var i = 0;i < object3.idKeys.length; ++i) - message.idKeys[i] = String(object3.idKeys[i]); - } - if (object3.descriptionKeys) { - if (!Array.isArray(object3.descriptionKeys)) - throw TypeError(".opentelemetry.proto.common.v1.EntityRef.descriptionKeys: array expected"); - message.descriptionKeys = []; - for (var i = 0;i < object3.descriptionKeys.length; ++i) - message.descriptionKeys[i] = String(object3.descriptionKeys[i]); - } - return message; - }; - EntityRef.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.idKeys = []; - object3.descriptionKeys = []; - } - if (options.defaults) { - object3.schemaUrl = ""; - object3.type = ""; - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - if (message.type != null && message.hasOwnProperty("type")) - object3.type = message.type; - if (message.idKeys && message.idKeys.length) { - object3.idKeys = []; - for (var j = 0;j < message.idKeys.length; ++j) - object3.idKeys[j] = message.idKeys[j]; - } - if (message.descriptionKeys && message.descriptionKeys.length) { - object3.descriptionKeys = []; - for (var j = 0;j < message.descriptionKeys.length; ++j) - object3.descriptionKeys[j] = message.descriptionKeys[j]; - } - return object3; - }; - EntityRef.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - EntityRef.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.EntityRef"; - }; - return EntityRef; - }(); - return v1; - }(); - return common; - }(); - proto.resource = function() { - var resource = {}; - resource.v1 = function() { - var v1 = {}; - v1.Resource = function() { - function Resource(properties) { - this.attributes = []; - this.entityRefs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Resource.prototype.attributes = $util.emptyArray; - Resource.prototype.droppedAttributesCount = null; - Resource.prototype.entityRefs = $util.emptyArray; - Resource.create = function create(properties) { - return new Resource(properties); - }; - Resource.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(10).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(16).uint32(message.droppedAttributesCount); - if (message.entityRefs != null && message.entityRefs.length) - for (var i = 0;i < message.entityRefs.length; ++i) - $root.opentelemetry.proto.common.v1.EntityRef.encode(message.entityRefs[i], writer.uint32(26).fork()).ldelim(); - return writer; - }; - Resource.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Resource.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.resource.v1.Resource; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 3: { - if (!(message.entityRefs && message.entityRefs.length)) - message.entityRefs = []; - message.entityRefs.push($root.opentelemetry.proto.common.v1.EntityRef.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Resource.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Resource.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.entityRefs != null && message.hasOwnProperty("entityRefs")) { - if (!Array.isArray(message.entityRefs)) - return "entityRefs: array expected"; - for (var i = 0;i < message.entityRefs.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.EntityRef.verify(message.entityRefs[i]); - if (error48) - return "entityRefs." + error48; - } - } - return null; - }; - Resource.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.resource.v1.Resource) - return object3; - var message = new $root.opentelemetry.proto.resource.v1.Resource; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.resource.v1.Resource.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.resource.v1.Resource.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.entityRefs) { - if (!Array.isArray(object3.entityRefs)) - throw TypeError(".opentelemetry.proto.resource.v1.Resource.entityRefs: array expected"); - message.entityRefs = []; - for (var i = 0;i < object3.entityRefs.length; ++i) { - if (typeof object3.entityRefs[i] !== "object") - throw TypeError(".opentelemetry.proto.resource.v1.Resource.entityRefs: object expected"); - message.entityRefs[i] = $root.opentelemetry.proto.common.v1.EntityRef.fromObject(object3.entityRefs[i]); - } - } - return message; - }; - Resource.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.attributes = []; - object3.entityRefs = []; - } - if (options.defaults) - object3.droppedAttributesCount = 0; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.entityRefs && message.entityRefs.length) { - object3.entityRefs = []; - for (var j = 0;j < message.entityRefs.length; ++j) - object3.entityRefs[j] = $root.opentelemetry.proto.common.v1.EntityRef.toObject(message.entityRefs[j], options); - } - return object3; - }; - Resource.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Resource.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.resource.v1.Resource"; - }; - return Resource; - }(); - return v1; - }(); - return resource; - }(); - proto.trace = function() { - var trace6 = {}; - trace6.v1 = function() { - var v1 = {}; - v1.TracesData = function() { - function TracesData(properties) { - this.resourceSpans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - TracesData.prototype.resourceSpans = $util.emptyArray; - TracesData.create = function create(properties) { - return new TracesData(properties); - }; - TracesData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceSpans != null && message.resourceSpans.length) - for (var i = 0;i < message.resourceSpans.length; ++i) - $root.opentelemetry.proto.trace.v1.ResourceSpans.encode(message.resourceSpans[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - TracesData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - TracesData.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.TracesData; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceSpans && message.resourceSpans.length)) - message.resourceSpans = []; - message.resourceSpans.push($root.opentelemetry.proto.trace.v1.ResourceSpans.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - TracesData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - TracesData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceSpans != null && message.hasOwnProperty("resourceSpans")) { - if (!Array.isArray(message.resourceSpans)) - return "resourceSpans: array expected"; - for (var i = 0;i < message.resourceSpans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.ResourceSpans.verify(message.resourceSpans[i]); - if (error48) - return "resourceSpans." + error48; - } - } - return null; - }; - TracesData.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.TracesData) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.TracesData; - if (object3.resourceSpans) { - if (!Array.isArray(object3.resourceSpans)) - throw TypeError(".opentelemetry.proto.trace.v1.TracesData.resourceSpans: array expected"); - message.resourceSpans = []; - for (var i = 0;i < object3.resourceSpans.length; ++i) { - if (typeof object3.resourceSpans[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.TracesData.resourceSpans: object expected"); - message.resourceSpans[i] = $root.opentelemetry.proto.trace.v1.ResourceSpans.fromObject(object3.resourceSpans[i]); - } - } - return message; - }; - TracesData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceSpans = []; - if (message.resourceSpans && message.resourceSpans.length) { - object3.resourceSpans = []; - for (var j = 0;j < message.resourceSpans.length; ++j) - object3.resourceSpans[j] = $root.opentelemetry.proto.trace.v1.ResourceSpans.toObject(message.resourceSpans[j], options); - } - return object3; - }; - TracesData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - TracesData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.TracesData"; - }; - return TracesData; - }(); - v1.ResourceSpans = function() { - function ResourceSpans(properties) { - this.scopeSpans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ResourceSpans.prototype.resource = null; - ResourceSpans.prototype.scopeSpans = $util.emptyArray; - ResourceSpans.prototype.schemaUrl = null; - ResourceSpans.create = function create(properties) { - return new ResourceSpans(properties); - }; - ResourceSpans.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - $root.opentelemetry.proto.resource.v1.Resource.encode(message.resource, writer.uint32(10).fork()).ldelim(); - if (message.scopeSpans != null && message.scopeSpans.length) - for (var i = 0;i < message.scopeSpans.length; ++i) - $root.opentelemetry.proto.trace.v1.ScopeSpans.encode(message.scopeSpans[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ResourceSpans.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ResourceSpans.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.ResourceSpans; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.resource = $root.opentelemetry.proto.resource.v1.Resource.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.scopeSpans && message.scopeSpans.length)) - message.scopeSpans = []; - message.scopeSpans.push($root.opentelemetry.proto.trace.v1.ScopeSpans.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ResourceSpans.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ResourceSpans.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error48 = $root.opentelemetry.proto.resource.v1.Resource.verify(message.resource); - if (error48) - return "resource." + error48; - } - if (message.scopeSpans != null && message.hasOwnProperty("scopeSpans")) { - if (!Array.isArray(message.scopeSpans)) - return "scopeSpans: array expected"; - for (var i = 0;i < message.scopeSpans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.ScopeSpans.verify(message.scopeSpans[i]); - if (error48) - return "scopeSpans." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ResourceSpans.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.ResourceSpans) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.ResourceSpans; - if (object3.resource != null) { - if (typeof object3.resource !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ResourceSpans.resource: object expected"); - message.resource = $root.opentelemetry.proto.resource.v1.Resource.fromObject(object3.resource); - } - if (object3.scopeSpans) { - if (!Array.isArray(object3.scopeSpans)) - throw TypeError(".opentelemetry.proto.trace.v1.ResourceSpans.scopeSpans: array expected"); - message.scopeSpans = []; - for (var i = 0;i < object3.scopeSpans.length; ++i) { - if (typeof object3.scopeSpans[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ResourceSpans.scopeSpans: object expected"); - message.scopeSpans[i] = $root.opentelemetry.proto.trace.v1.ScopeSpans.fromObject(object3.scopeSpans[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ResourceSpans.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.scopeSpans = []; - if (options.defaults) { - object3.resource = null; - object3.schemaUrl = ""; - } - if (message.resource != null && message.hasOwnProperty("resource")) - object3.resource = $root.opentelemetry.proto.resource.v1.Resource.toObject(message.resource, options); - if (message.scopeSpans && message.scopeSpans.length) { - object3.scopeSpans = []; - for (var j = 0;j < message.scopeSpans.length; ++j) - object3.scopeSpans[j] = $root.opentelemetry.proto.trace.v1.ScopeSpans.toObject(message.scopeSpans[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ResourceSpans.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ResourceSpans.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.ResourceSpans"; - }; - return ResourceSpans; - }(); - v1.ScopeSpans = function() { - function ScopeSpans(properties) { - this.spans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ScopeSpans.prototype.scope = null; - ScopeSpans.prototype.spans = $util.emptyArray; - ScopeSpans.prototype.schemaUrl = null; - ScopeSpans.create = function create(properties) { - return new ScopeSpans(properties); - }; - ScopeSpans.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.scope != null && Object.hasOwnProperty.call(message, "scope")) - $root.opentelemetry.proto.common.v1.InstrumentationScope.encode(message.scope, writer.uint32(10).fork()).ldelim(); - if (message.spans != null && message.spans.length) - for (var i = 0;i < message.spans.length; ++i) - $root.opentelemetry.proto.trace.v1.Span.encode(message.spans[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ScopeSpans.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ScopeSpans.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.ScopeSpans; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.spans && message.spans.length)) - message.spans = []; - message.spans.push($root.opentelemetry.proto.trace.v1.Span.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ScopeSpans.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ScopeSpans.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.scope != null && message.hasOwnProperty("scope")) { - var error48 = $root.opentelemetry.proto.common.v1.InstrumentationScope.verify(message.scope); - if (error48) - return "scope." + error48; - } - if (message.spans != null && message.hasOwnProperty("spans")) { - if (!Array.isArray(message.spans)) - return "spans: array expected"; - for (var i = 0;i < message.spans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.Span.verify(message.spans[i]); - if (error48) - return "spans." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ScopeSpans.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.ScopeSpans) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.ScopeSpans; - if (object3.scope != null) { - if (typeof object3.scope !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ScopeSpans.scope: object expected"); - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.fromObject(object3.scope); - } - if (object3.spans) { - if (!Array.isArray(object3.spans)) - throw TypeError(".opentelemetry.proto.trace.v1.ScopeSpans.spans: array expected"); - message.spans = []; - for (var i = 0;i < object3.spans.length; ++i) { - if (typeof object3.spans[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ScopeSpans.spans: object expected"); - message.spans[i] = $root.opentelemetry.proto.trace.v1.Span.fromObject(object3.spans[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ScopeSpans.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.spans = []; - if (options.defaults) { - object3.scope = null; - object3.schemaUrl = ""; - } - if (message.scope != null && message.hasOwnProperty("scope")) - object3.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.toObject(message.scope, options); - if (message.spans && message.spans.length) { - object3.spans = []; - for (var j = 0;j < message.spans.length; ++j) - object3.spans[j] = $root.opentelemetry.proto.trace.v1.Span.toObject(message.spans[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ScopeSpans.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ScopeSpans.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.ScopeSpans"; - }; - return ScopeSpans; - }(); - v1.Span = function() { - function Span(properties) { - this.attributes = []; - this.events = []; - this.links = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Span.prototype.traceId = null; - Span.prototype.spanId = null; - Span.prototype.traceState = null; - Span.prototype.parentSpanId = null; - Span.prototype.flags = null; - Span.prototype.name = null; - Span.prototype.kind = null; - Span.prototype.startTimeUnixNano = null; - Span.prototype.endTimeUnixNano = null; - Span.prototype.attributes = $util.emptyArray; - Span.prototype.droppedAttributesCount = null; - Span.prototype.events = $util.emptyArray; - Span.prototype.droppedEventsCount = null; - Span.prototype.links = $util.emptyArray; - Span.prototype.droppedLinksCount = null; - Span.prototype.status = null; - Span.create = function create(properties) { - return new Span(properties); - }; - Span.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(10).bytes(message.traceId); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(18).bytes(message.spanId); - if (message.traceState != null && Object.hasOwnProperty.call(message, "traceState")) - writer.uint32(26).string(message.traceState); - if (message.parentSpanId != null && Object.hasOwnProperty.call(message, "parentSpanId")) - writer.uint32(34).bytes(message.parentSpanId); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(42).string(message.name); - if (message.kind != null && Object.hasOwnProperty.call(message, "kind")) - writer.uint32(48).int32(message.kind); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(57).fixed64(message.startTimeUnixNano); - if (message.endTimeUnixNano != null && Object.hasOwnProperty.call(message, "endTimeUnixNano")) - writer.uint32(65).fixed64(message.endTimeUnixNano); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(74).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(80).uint32(message.droppedAttributesCount); - if (message.events != null && message.events.length) - for (var i = 0;i < message.events.length; ++i) - $root.opentelemetry.proto.trace.v1.Span.Event.encode(message.events[i], writer.uint32(90).fork()).ldelim(); - if (message.droppedEventsCount != null && Object.hasOwnProperty.call(message, "droppedEventsCount")) - writer.uint32(96).uint32(message.droppedEventsCount); - if (message.links != null && message.links.length) - for (var i = 0;i < message.links.length; ++i) - $root.opentelemetry.proto.trace.v1.Span.Link.encode(message.links[i], writer.uint32(106).fork()).ldelim(); - if (message.droppedLinksCount != null && Object.hasOwnProperty.call(message, "droppedLinksCount")) - writer.uint32(112).uint32(message.droppedLinksCount); - if (message.status != null && Object.hasOwnProperty.call(message, "status")) - $root.opentelemetry.proto.trace.v1.Status.encode(message.status, writer.uint32(122).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(133).fixed32(message.flags); - return writer; - }; - Span.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Span.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.traceId = reader.bytes(); - break; - } - case 2: { - message.spanId = reader.bytes(); - break; - } - case 3: { - message.traceState = reader.string(); - break; - } - case 4: { - message.parentSpanId = reader.bytes(); - break; - } - case 16: { - message.flags = reader.fixed32(); - break; - } - case 5: { - message.name = reader.string(); - break; - } - case 6: { - message.kind = reader.int32(); - break; - } - case 7: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 8: { - message.endTimeUnixNano = reader.fixed64(); - break; - } - case 9: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 10: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 11: { - if (!(message.events && message.events.length)) - message.events = []; - message.events.push($root.opentelemetry.proto.trace.v1.Span.Event.decode(reader, reader.uint32())); - break; - } - case 12: { - message.droppedEventsCount = reader.uint32(); - break; - } - case 13: { - if (!(message.links && message.links.length)) - message.links = []; - message.links.push($root.opentelemetry.proto.trace.v1.Span.Link.decode(reader, reader.uint32())); - break; - } - case 14: { - message.droppedLinksCount = reader.uint32(); - break; - } - case 15: { - message.status = $root.opentelemetry.proto.trace.v1.Status.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Span.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Span.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.traceState != null && message.hasOwnProperty("traceState")) { - if (!$util.isString(message.traceState)) - return "traceState: string expected"; - } - if (message.parentSpanId != null && message.hasOwnProperty("parentSpanId")) { - if (!(message.parentSpanId && typeof message.parentSpanId.length === "number" || $util.isString(message.parentSpanId))) - return "parentSpanId: buffer expected"; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.kind != null && message.hasOwnProperty("kind")) - switch (message.kind) { - default: - return "kind: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - break; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.endTimeUnixNano != null && message.hasOwnProperty("endTimeUnixNano")) { - if (!$util.isInteger(message.endTimeUnixNano) && !(message.endTimeUnixNano && $util.isInteger(message.endTimeUnixNano.low) && $util.isInteger(message.endTimeUnixNano.high))) - return "endTimeUnixNano: integer|Long expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.events != null && message.hasOwnProperty("events")) { - if (!Array.isArray(message.events)) - return "events: array expected"; - for (var i = 0;i < message.events.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.Span.Event.verify(message.events[i]); - if (error48) - return "events." + error48; - } - } - if (message.droppedEventsCount != null && message.hasOwnProperty("droppedEventsCount")) { - if (!$util.isInteger(message.droppedEventsCount)) - return "droppedEventsCount: integer expected"; - } - if (message.links != null && message.hasOwnProperty("links")) { - if (!Array.isArray(message.links)) - return "links: array expected"; - for (var i = 0;i < message.links.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.Span.Link.verify(message.links[i]); - if (error48) - return "links." + error48; - } - } - if (message.droppedLinksCount != null && message.hasOwnProperty("droppedLinksCount")) { - if (!$util.isInteger(message.droppedLinksCount)) - return "droppedLinksCount: integer expected"; - } - if (message.status != null && message.hasOwnProperty("status")) { - var error48 = $root.opentelemetry.proto.trace.v1.Status.verify(message.status); - if (error48) - return "status." + error48; - } - return null; - }; - Span.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Span) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Span; - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.traceState != null) - message.traceState = String(object3.traceState); - if (object3.parentSpanId != null) { - if (typeof object3.parentSpanId === "string") - $util.base64.decode(object3.parentSpanId, message.parentSpanId = $util.newBuffer($util.base64.length(object3.parentSpanId)), 0); - else if (object3.parentSpanId.length >= 0) - message.parentSpanId = object3.parentSpanId; - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.name != null) - message.name = String(object3.name); - switch (object3.kind) { - default: - if (typeof object3.kind === "number") { - message.kind = object3.kind; - break; - } - break; - case "SPAN_KIND_UNSPECIFIED": - case 0: - message.kind = 0; - break; - case "SPAN_KIND_INTERNAL": - case 1: - message.kind = 1; - break; - case "SPAN_KIND_SERVER": - case 2: - message.kind = 2; - break; - case "SPAN_KIND_CLIENT": - case 3: - message.kind = 3; - break; - case "SPAN_KIND_PRODUCER": - case 4: - message.kind = 4; - break; - case "SPAN_KIND_CONSUMER": - case 5: - message.kind = 5; - break; - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.endTimeUnixNano != null) { - if ($util.Long) - (message.endTimeUnixNano = $util.Long.fromValue(object3.endTimeUnixNano)).unsigned = false; - else if (typeof object3.endTimeUnixNano === "string") - message.endTimeUnixNano = parseInt(object3.endTimeUnixNano, 10); - else if (typeof object3.endTimeUnixNano === "number") - message.endTimeUnixNano = object3.endTimeUnixNano; - else if (typeof object3.endTimeUnixNano === "object") - message.endTimeUnixNano = new $util.LongBits(object3.endTimeUnixNano.low >>> 0, object3.endTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.events) { - if (!Array.isArray(object3.events)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.events: array expected"); - message.events = []; - for (var i = 0;i < object3.events.length; ++i) { - if (typeof object3.events[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.events: object expected"); - message.events[i] = $root.opentelemetry.proto.trace.v1.Span.Event.fromObject(object3.events[i]); - } - } - if (object3.droppedEventsCount != null) - message.droppedEventsCount = object3.droppedEventsCount >>> 0; - if (object3.links) { - if (!Array.isArray(object3.links)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.links: array expected"); - message.links = []; - for (var i = 0;i < object3.links.length; ++i) { - if (typeof object3.links[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.links: object expected"); - message.links[i] = $root.opentelemetry.proto.trace.v1.Span.Link.fromObject(object3.links[i]); - } - } - if (object3.droppedLinksCount != null) - message.droppedLinksCount = object3.droppedLinksCount >>> 0; - if (object3.status != null) { - if (typeof object3.status !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.status: object expected"); - message.status = $root.opentelemetry.proto.trace.v1.Status.fromObject(object3.status); - } - return message; - }; - Span.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.attributes = []; - object3.events = []; - object3.links = []; - } - if (options.defaults) { - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - object3.traceState = ""; - if (options.bytes === String) - object3.parentSpanId = ""; - else { - object3.parentSpanId = []; - if (options.bytes !== Array) - object3.parentSpanId = $util.newBuffer(object3.parentSpanId); - } - object3.name = ""; - object3.kind = options.enums === String ? "SPAN_KIND_UNSPECIFIED" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.endTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.endTimeUnixNano = options.longs === String ? "0" : 0; - object3.droppedAttributesCount = 0; - object3.droppedEventsCount = 0; - object3.droppedLinksCount = 0; - object3.status = null; - object3.flags = 0; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.traceState != null && message.hasOwnProperty("traceState")) - object3.traceState = message.traceState; - if (message.parentSpanId != null && message.hasOwnProperty("parentSpanId")) - object3.parentSpanId = options.bytes === String ? $util.base64.encode(message.parentSpanId, 0, message.parentSpanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.parentSpanId) : message.parentSpanId; - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.kind != null && message.hasOwnProperty("kind")) - object3.kind = options.enums === String ? $root.opentelemetry.proto.trace.v1.Span.SpanKind[message.kind] === undefined ? message.kind : $root.opentelemetry.proto.trace.v1.Span.SpanKind[message.kind] : message.kind; - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.endTimeUnixNano != null && message.hasOwnProperty("endTimeUnixNano")) - if (typeof message.endTimeUnixNano === "number") - object3.endTimeUnixNano = options.longs === String ? String(message.endTimeUnixNano) : message.endTimeUnixNano; - else - object3.endTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.endTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.endTimeUnixNano.low >>> 0, message.endTimeUnixNano.high >>> 0).toNumber() : message.endTimeUnixNano; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.events && message.events.length) { - object3.events = []; - for (var j = 0;j < message.events.length; ++j) - object3.events[j] = $root.opentelemetry.proto.trace.v1.Span.Event.toObject(message.events[j], options); - } - if (message.droppedEventsCount != null && message.hasOwnProperty("droppedEventsCount")) - object3.droppedEventsCount = message.droppedEventsCount; - if (message.links && message.links.length) { - object3.links = []; - for (var j = 0;j < message.links.length; ++j) - object3.links[j] = $root.opentelemetry.proto.trace.v1.Span.Link.toObject(message.links[j], options); - } - if (message.droppedLinksCount != null && message.hasOwnProperty("droppedLinksCount")) - object3.droppedLinksCount = message.droppedLinksCount; - if (message.status != null && message.hasOwnProperty("status")) - object3.status = $root.opentelemetry.proto.trace.v1.Status.toObject(message.status, options); - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - Span.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Span.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span"; - }; - Span.SpanKind = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "SPAN_KIND_UNSPECIFIED"] = 0; - values[valuesById[1] = "SPAN_KIND_INTERNAL"] = 1; - values[valuesById[2] = "SPAN_KIND_SERVER"] = 2; - values[valuesById[3] = "SPAN_KIND_CLIENT"] = 3; - values[valuesById[4] = "SPAN_KIND_PRODUCER"] = 4; - values[valuesById[5] = "SPAN_KIND_CONSUMER"] = 5; - return values; - }(); - Span.Event = function() { - function Event2(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Event2.prototype.timeUnixNano = null; - Event2.prototype.name = null; - Event2.prototype.attributes = $util.emptyArray; - Event2.prototype.droppedAttributesCount = null; - Event2.create = function create(properties) { - return new Event2(properties); - }; - Event2.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(9).fixed64(message.timeUnixNano); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(18).string(message.name); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(26).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(32).uint32(message.droppedAttributesCount); - return writer; - }; - Event2.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Event2.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span.Event; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 2: { - message.name = reader.string(); - break; - } - case 3: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 4: { - message.droppedAttributesCount = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Event2.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Event2.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - return null; - }; - Event2.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Span.Event) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Span.Event; - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.name != null) - message.name = String(object3.name); - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.Event.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.Event.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - return message; - }; - Event2.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - object3.name = ""; - object3.droppedAttributesCount = 0; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - return object3; - }; - Event2.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Event2.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span.Event"; - }; - return Event2; - }(); - Span.Link = function() { - function Link(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Link.prototype.traceId = null; - Link.prototype.spanId = null; - Link.prototype.traceState = null; - Link.prototype.attributes = $util.emptyArray; - Link.prototype.droppedAttributesCount = null; - Link.prototype.flags = null; - Link.create = function create(properties) { - return new Link(properties); - }; - Link.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(10).bytes(message.traceId); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(18).bytes(message.spanId); - if (message.traceState != null && Object.hasOwnProperty.call(message, "traceState")) - writer.uint32(26).string(message.traceState); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(34).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(40).uint32(message.droppedAttributesCount); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(53).fixed32(message.flags); - return writer; - }; - Link.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Link.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span.Link; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.traceId = reader.bytes(); - break; - } - case 2: { - message.spanId = reader.bytes(); - break; - } - case 3: { - message.traceState = reader.string(); - break; - } - case 4: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 5: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 6: { - message.flags = reader.fixed32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Link.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Link.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.traceState != null && message.hasOwnProperty("traceState")) { - if (!$util.isString(message.traceState)) - return "traceState: string expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - return null; - }; - Link.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Span.Link) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Span.Link; - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.traceState != null) - message.traceState = String(object3.traceState); - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.Link.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.Link.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.flags != null) - message.flags = object3.flags >>> 0; - return message; - }; - Link.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - object3.traceState = ""; - object3.droppedAttributesCount = 0; - object3.flags = 0; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.traceState != null && message.hasOwnProperty("traceState")) - object3.traceState = message.traceState; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - Link.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Link.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span.Link"; - }; - return Link; - }(); - return Span; - }(); - v1.Status = function() { - function Status(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Status.prototype.message = null; - Status.prototype.code = null; - Status.create = function create(properties) { - return new Status(properties); - }; - Status.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.message != null && Object.hasOwnProperty.call(message, "message")) - writer.uint32(18).string(message.message); - if (message.code != null && Object.hasOwnProperty.call(message, "code")) - writer.uint32(24).int32(message.code); - return writer; - }; - Status.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Status.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Status; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 2: { - message.message = reader.string(); - break; - } - case 3: { - message.code = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Status.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Status.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.message != null && message.hasOwnProperty("message")) { - if (!$util.isString(message.message)) - return "message: string expected"; - } - if (message.code != null && message.hasOwnProperty("code")) - switch (message.code) { - default: - return "code: enum value expected"; - case 0: - case 1: - case 2: - break; - } - return null; - }; - Status.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Status) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Status; - if (object3.message != null) - message.message = String(object3.message); - switch (object3.code) { - default: - if (typeof object3.code === "number") { - message.code = object3.code; - break; - } - break; - case "STATUS_CODE_UNSET": - case 0: - message.code = 0; - break; - case "STATUS_CODE_OK": - case 1: - message.code = 1; - break; - case "STATUS_CODE_ERROR": - case 2: - message.code = 2; - break; - } - return message; - }; - Status.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - object3.message = ""; - object3.code = options.enums === String ? "STATUS_CODE_UNSET" : 0; - } - if (message.message != null && message.hasOwnProperty("message")) - object3.message = message.message; - if (message.code != null && message.hasOwnProperty("code")) - object3.code = options.enums === String ? $root.opentelemetry.proto.trace.v1.Status.StatusCode[message.code] === undefined ? message.code : $root.opentelemetry.proto.trace.v1.Status.StatusCode[message.code] : message.code; - return object3; - }; - Status.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Status.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Status"; - }; - Status.StatusCode = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "STATUS_CODE_UNSET"] = 0; - values[valuesById[1] = "STATUS_CODE_OK"] = 1; - values[valuesById[2] = "STATUS_CODE_ERROR"] = 2; - return values; - }(); - return Status; - }(); - v1.SpanFlags = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "SPAN_FLAGS_DO_NOT_USE"] = 0; - values[valuesById[255] = "SPAN_FLAGS_TRACE_FLAGS_MASK"] = 255; - values[valuesById[256] = "SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK"] = 256; - values[valuesById[512] = "SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK"] = 512; - return values; - }(); - return v1; - }(); - return trace6; - }(); - proto.collector = function() { - var collector = {}; - collector.trace = function() { - var trace6 = {}; - trace6.v1 = function() { - var v1 = {}; - v1.TraceService = function() { - function TraceService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - (TraceService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = TraceService; - TraceService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - Object.defineProperty(TraceService.prototype["export"] = function export_(request, callback) { - return this.rpcCall(export_, $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest, $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse, request, callback); - }, "name", { value: "Export" }); - return TraceService; - }(); - v1.ExportTraceServiceRequest = function() { - function ExportTraceServiceRequest(properties) { - this.resourceSpans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportTraceServiceRequest.prototype.resourceSpans = $util.emptyArray; - ExportTraceServiceRequest.create = function create(properties) { - return new ExportTraceServiceRequest(properties); - }; - ExportTraceServiceRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceSpans != null && message.resourceSpans.length) - for (var i = 0;i < message.resourceSpans.length; ++i) - $root.opentelemetry.proto.trace.v1.ResourceSpans.encode(message.resourceSpans[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportTraceServiceRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportTraceServiceRequest.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceSpans && message.resourceSpans.length)) - message.resourceSpans = []; - message.resourceSpans.push($root.opentelemetry.proto.trace.v1.ResourceSpans.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportTraceServiceRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportTraceServiceRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceSpans != null && message.hasOwnProperty("resourceSpans")) { - if (!Array.isArray(message.resourceSpans)) - return "resourceSpans: array expected"; - for (var i = 0;i < message.resourceSpans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.ResourceSpans.verify(message.resourceSpans[i]); - if (error48) - return "resourceSpans." + error48; - } - } - return null; - }; - ExportTraceServiceRequest.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest) - return object3; - var message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; - if (object3.resourceSpans) { - if (!Array.isArray(object3.resourceSpans)) - throw TypeError(".opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.resourceSpans: array expected"); - message.resourceSpans = []; - for (var i = 0;i < object3.resourceSpans.length; ++i) { - if (typeof object3.resourceSpans[i] !== "object") - throw TypeError(".opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.resourceSpans: object expected"); - message.resourceSpans[i] = $root.opentelemetry.proto.trace.v1.ResourceSpans.fromObject(object3.resourceSpans[i]); - } - } - return message; - }; - ExportTraceServiceRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceSpans = []; - if (message.resourceSpans && message.resourceSpans.length) { - object3.resourceSpans = []; - for (var j = 0;j < message.resourceSpans.length; ++j) - object3.resourceSpans[j] = $root.opentelemetry.proto.trace.v1.ResourceSpans.toObject(message.resourceSpans[j], options); - } - return object3; - }; - ExportTraceServiceRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportTraceServiceRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest"; - }; - return ExportTraceServiceRequest; - }(); - v1.ExportTraceServiceResponse = function() { - function ExportTraceServiceResponse(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportTraceServiceResponse.prototype.partialSuccess = null; - ExportTraceServiceResponse.create = function create(properties) { - return new ExportTraceServiceResponse(properties); - }; - ExportTraceServiceResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.partialSuccess != null && Object.hasOwnProperty.call(message, "partialSuccess")) - $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.encode(message.partialSuccess, writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportTraceServiceResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportTraceServiceResponse.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.partialSuccess = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportTraceServiceResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportTraceServiceResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) { - var error48 = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.verify(message.partialSuccess); - if (error48) - return "partialSuccess." + error48; - } - return null; - }; - ExportTraceServiceResponse.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse) - return object3; - var message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; - if (object3.partialSuccess != null) { - if (typeof object3.partialSuccess !== "object") - throw TypeError(".opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse.partialSuccess: object expected"); - message.partialSuccess = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.fromObject(object3.partialSuccess); - } - return message; - }; - ExportTraceServiceResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) - object3.partialSuccess = null; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) - object3.partialSuccess = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.toObject(message.partialSuccess, options); - return object3; - }; - ExportTraceServiceResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportTraceServiceResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse"; - }; - return ExportTraceServiceResponse; - }(); - v1.ExportTracePartialSuccess = function() { - function ExportTracePartialSuccess(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportTracePartialSuccess.prototype.rejectedSpans = null; - ExportTracePartialSuccess.prototype.errorMessage = null; - ExportTracePartialSuccess.create = function create(properties) { - return new ExportTracePartialSuccess(properties); - }; - ExportTracePartialSuccess.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rejectedSpans != null && Object.hasOwnProperty.call(message, "rejectedSpans")) - writer.uint32(8).int64(message.rejectedSpans); - if (message.errorMessage != null && Object.hasOwnProperty.call(message, "errorMessage")) - writer.uint32(18).string(message.errorMessage); - return writer; - }; - ExportTracePartialSuccess.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportTracePartialSuccess.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.rejectedSpans = reader.int64(); - break; - } - case 2: { - message.errorMessage = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportTracePartialSuccess.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportTracePartialSuccess.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rejectedSpans != null && message.hasOwnProperty("rejectedSpans")) { - if (!$util.isInteger(message.rejectedSpans) && !(message.rejectedSpans && $util.isInteger(message.rejectedSpans.low) && $util.isInteger(message.rejectedSpans.high))) - return "rejectedSpans: integer|Long expected"; - } - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) { - if (!$util.isString(message.errorMessage)) - return "errorMessage: string expected"; - } - return null; - }; - ExportTracePartialSuccess.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess) - return object3; - var message = new $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess; - if (object3.rejectedSpans != null) { - if ($util.Long) - (message.rejectedSpans = $util.Long.fromValue(object3.rejectedSpans)).unsigned = false; - else if (typeof object3.rejectedSpans === "string") - message.rejectedSpans = parseInt(object3.rejectedSpans, 10); - else if (typeof object3.rejectedSpans === "number") - message.rejectedSpans = object3.rejectedSpans; - else if (typeof object3.rejectedSpans === "object") - message.rejectedSpans = new $util.LongBits(object3.rejectedSpans.low >>> 0, object3.rejectedSpans.high >>> 0).toNumber(); - } - if (object3.errorMessage != null) - message.errorMessage = String(object3.errorMessage); - return message; - }; - ExportTracePartialSuccess.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.rejectedSpans = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.rejectedSpans = options.longs === String ? "0" : 0; - object3.errorMessage = ""; - } - if (message.rejectedSpans != null && message.hasOwnProperty("rejectedSpans")) - if (typeof message.rejectedSpans === "number") - object3.rejectedSpans = options.longs === String ? String(message.rejectedSpans) : message.rejectedSpans; - else - object3.rejectedSpans = options.longs === String ? $util.Long.prototype.toString.call(message.rejectedSpans) : options.longs === Number ? new $util.LongBits(message.rejectedSpans.low >>> 0, message.rejectedSpans.high >>> 0).toNumber() : message.rejectedSpans; - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) - object3.errorMessage = message.errorMessage; - return object3; - }; - ExportTracePartialSuccess.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportTracePartialSuccess.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess"; - }; - return ExportTracePartialSuccess; - }(); - return v1; - }(); - return trace6; - }(); - collector.metrics = function() { - var metrics = {}; - metrics.v1 = function() { - var v1 = {}; - v1.MetricsService = function() { - function MetricsService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - (MetricsService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = MetricsService; - MetricsService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - Object.defineProperty(MetricsService.prototype["export"] = function export_(request, callback) { - return this.rpcCall(export_, $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest, $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse, request, callback); - }, "name", { value: "Export" }); - return MetricsService; - }(); - v1.ExportMetricsServiceRequest = function() { - function ExportMetricsServiceRequest(properties) { - this.resourceMetrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportMetricsServiceRequest.prototype.resourceMetrics = $util.emptyArray; - ExportMetricsServiceRequest.create = function create(properties) { - return new ExportMetricsServiceRequest(properties); - }; - ExportMetricsServiceRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceMetrics != null && message.resourceMetrics.length) - for (var i = 0;i < message.resourceMetrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.ResourceMetrics.encode(message.resourceMetrics[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportMetricsServiceRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportMetricsServiceRequest.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceMetrics && message.resourceMetrics.length)) - message.resourceMetrics = []; - message.resourceMetrics.push($root.opentelemetry.proto.metrics.v1.ResourceMetrics.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportMetricsServiceRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportMetricsServiceRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceMetrics != null && message.hasOwnProperty("resourceMetrics")) { - if (!Array.isArray(message.resourceMetrics)) - return "resourceMetrics: array expected"; - for (var i = 0;i < message.resourceMetrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.verify(message.resourceMetrics[i]); - if (error48) - return "resourceMetrics." + error48; - } - } - return null; - }; - ExportMetricsServiceRequest.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest) - return object3; - var message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; - if (object3.resourceMetrics) { - if (!Array.isArray(object3.resourceMetrics)) - throw TypeError(".opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest.resourceMetrics: array expected"); - message.resourceMetrics = []; - for (var i = 0;i < object3.resourceMetrics.length; ++i) { - if (typeof object3.resourceMetrics[i] !== "object") - throw TypeError(".opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest.resourceMetrics: object expected"); - message.resourceMetrics[i] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.fromObject(object3.resourceMetrics[i]); - } - } - return message; - }; - ExportMetricsServiceRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceMetrics = []; - if (message.resourceMetrics && message.resourceMetrics.length) { - object3.resourceMetrics = []; - for (var j = 0;j < message.resourceMetrics.length; ++j) - object3.resourceMetrics[j] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.toObject(message.resourceMetrics[j], options); - } - return object3; - }; - ExportMetricsServiceRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportMetricsServiceRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest"; - }; - return ExportMetricsServiceRequest; - }(); - v1.ExportMetricsServiceResponse = function() { - function ExportMetricsServiceResponse(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportMetricsServiceResponse.prototype.partialSuccess = null; - ExportMetricsServiceResponse.create = function create(properties) { - return new ExportMetricsServiceResponse(properties); - }; - ExportMetricsServiceResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.partialSuccess != null && Object.hasOwnProperty.call(message, "partialSuccess")) - $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.encode(message.partialSuccess, writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportMetricsServiceResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportMetricsServiceResponse.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.partialSuccess = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportMetricsServiceResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportMetricsServiceResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) { - var error48 = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.verify(message.partialSuccess); - if (error48) - return "partialSuccess." + error48; - } - return null; - }; - ExportMetricsServiceResponse.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse) - return object3; - var message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; - if (object3.partialSuccess != null) { - if (typeof object3.partialSuccess !== "object") - throw TypeError(".opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse.partialSuccess: object expected"); - message.partialSuccess = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.fromObject(object3.partialSuccess); - } - return message; - }; - ExportMetricsServiceResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) - object3.partialSuccess = null; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) - object3.partialSuccess = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.toObject(message.partialSuccess, options); - return object3; - }; - ExportMetricsServiceResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportMetricsServiceResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse"; - }; - return ExportMetricsServiceResponse; - }(); - v1.ExportMetricsPartialSuccess = function() { - function ExportMetricsPartialSuccess(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportMetricsPartialSuccess.prototype.rejectedDataPoints = null; - ExportMetricsPartialSuccess.prototype.errorMessage = null; - ExportMetricsPartialSuccess.create = function create(properties) { - return new ExportMetricsPartialSuccess(properties); - }; - ExportMetricsPartialSuccess.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rejectedDataPoints != null && Object.hasOwnProperty.call(message, "rejectedDataPoints")) - writer.uint32(8).int64(message.rejectedDataPoints); - if (message.errorMessage != null && Object.hasOwnProperty.call(message, "errorMessage")) - writer.uint32(18).string(message.errorMessage); - return writer; - }; - ExportMetricsPartialSuccess.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportMetricsPartialSuccess.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.rejectedDataPoints = reader.int64(); - break; - } - case 2: { - message.errorMessage = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportMetricsPartialSuccess.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportMetricsPartialSuccess.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rejectedDataPoints != null && message.hasOwnProperty("rejectedDataPoints")) { - if (!$util.isInteger(message.rejectedDataPoints) && !(message.rejectedDataPoints && $util.isInteger(message.rejectedDataPoints.low) && $util.isInteger(message.rejectedDataPoints.high))) - return "rejectedDataPoints: integer|Long expected"; - } - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) { - if (!$util.isString(message.errorMessage)) - return "errorMessage: string expected"; - } - return null; - }; - ExportMetricsPartialSuccess.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess) - return object3; - var message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess; - if (object3.rejectedDataPoints != null) { - if ($util.Long) - (message.rejectedDataPoints = $util.Long.fromValue(object3.rejectedDataPoints)).unsigned = false; - else if (typeof object3.rejectedDataPoints === "string") - message.rejectedDataPoints = parseInt(object3.rejectedDataPoints, 10); - else if (typeof object3.rejectedDataPoints === "number") - message.rejectedDataPoints = object3.rejectedDataPoints; - else if (typeof object3.rejectedDataPoints === "object") - message.rejectedDataPoints = new $util.LongBits(object3.rejectedDataPoints.low >>> 0, object3.rejectedDataPoints.high >>> 0).toNumber(); - } - if (object3.errorMessage != null) - message.errorMessage = String(object3.errorMessage); - return message; - }; - ExportMetricsPartialSuccess.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.rejectedDataPoints = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.rejectedDataPoints = options.longs === String ? "0" : 0; - object3.errorMessage = ""; - } - if (message.rejectedDataPoints != null && message.hasOwnProperty("rejectedDataPoints")) - if (typeof message.rejectedDataPoints === "number") - object3.rejectedDataPoints = options.longs === String ? String(message.rejectedDataPoints) : message.rejectedDataPoints; - else - object3.rejectedDataPoints = options.longs === String ? $util.Long.prototype.toString.call(message.rejectedDataPoints) : options.longs === Number ? new $util.LongBits(message.rejectedDataPoints.low >>> 0, message.rejectedDataPoints.high >>> 0).toNumber() : message.rejectedDataPoints; - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) - object3.errorMessage = message.errorMessage; - return object3; - }; - ExportMetricsPartialSuccess.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportMetricsPartialSuccess.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess"; - }; - return ExportMetricsPartialSuccess; - }(); - return v1; - }(); - return metrics; - }(); - collector.logs = function() { - var logs = {}; - logs.v1 = function() { - var v1 = {}; - v1.LogsService = function() { - function LogsService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - (LogsService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = LogsService; - LogsService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - Object.defineProperty(LogsService.prototype["export"] = function export_(request, callback) { - return this.rpcCall(export_, $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest, $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse, request, callback); - }, "name", { value: "Export" }); - return LogsService; - }(); - v1.ExportLogsServiceRequest = function() { - function ExportLogsServiceRequest(properties) { - this.resourceLogs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportLogsServiceRequest.prototype.resourceLogs = $util.emptyArray; - ExportLogsServiceRequest.create = function create(properties) { - return new ExportLogsServiceRequest(properties); - }; - ExportLogsServiceRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceLogs != null && message.resourceLogs.length) - for (var i = 0;i < message.resourceLogs.length; ++i) - $root.opentelemetry.proto.logs.v1.ResourceLogs.encode(message.resourceLogs[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportLogsServiceRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportLogsServiceRequest.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceLogs && message.resourceLogs.length)) - message.resourceLogs = []; - message.resourceLogs.push($root.opentelemetry.proto.logs.v1.ResourceLogs.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportLogsServiceRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportLogsServiceRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceLogs != null && message.hasOwnProperty("resourceLogs")) { - if (!Array.isArray(message.resourceLogs)) - return "resourceLogs: array expected"; - for (var i = 0;i < message.resourceLogs.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.ResourceLogs.verify(message.resourceLogs[i]); - if (error48) - return "resourceLogs." + error48; - } - } - return null; - }; - ExportLogsServiceRequest.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest) - return object3; - var message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; - if (object3.resourceLogs) { - if (!Array.isArray(object3.resourceLogs)) - throw TypeError(".opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest.resourceLogs: array expected"); - message.resourceLogs = []; - for (var i = 0;i < object3.resourceLogs.length; ++i) { - if (typeof object3.resourceLogs[i] !== "object") - throw TypeError(".opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest.resourceLogs: object expected"); - message.resourceLogs[i] = $root.opentelemetry.proto.logs.v1.ResourceLogs.fromObject(object3.resourceLogs[i]); - } - } - return message; - }; - ExportLogsServiceRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceLogs = []; - if (message.resourceLogs && message.resourceLogs.length) { - object3.resourceLogs = []; - for (var j = 0;j < message.resourceLogs.length; ++j) - object3.resourceLogs[j] = $root.opentelemetry.proto.logs.v1.ResourceLogs.toObject(message.resourceLogs[j], options); - } - return object3; - }; - ExportLogsServiceRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportLogsServiceRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest"; - }; - return ExportLogsServiceRequest; - }(); - v1.ExportLogsServiceResponse = function() { - function ExportLogsServiceResponse(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportLogsServiceResponse.prototype.partialSuccess = null; - ExportLogsServiceResponse.create = function create(properties) { - return new ExportLogsServiceResponse(properties); - }; - ExportLogsServiceResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.partialSuccess != null && Object.hasOwnProperty.call(message, "partialSuccess")) - $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.encode(message.partialSuccess, writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportLogsServiceResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportLogsServiceResponse.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.partialSuccess = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportLogsServiceResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportLogsServiceResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) { - var error48 = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.verify(message.partialSuccess); - if (error48) - return "partialSuccess." + error48; - } - return null; - }; - ExportLogsServiceResponse.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse) - return object3; - var message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; - if (object3.partialSuccess != null) { - if (typeof object3.partialSuccess !== "object") - throw TypeError(".opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse.partialSuccess: object expected"); - message.partialSuccess = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.fromObject(object3.partialSuccess); - } - return message; - }; - ExportLogsServiceResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) - object3.partialSuccess = null; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) - object3.partialSuccess = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.toObject(message.partialSuccess, options); - return object3; - }; - ExportLogsServiceResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportLogsServiceResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse"; - }; - return ExportLogsServiceResponse; - }(); - v1.ExportLogsPartialSuccess = function() { - function ExportLogsPartialSuccess(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportLogsPartialSuccess.prototype.rejectedLogRecords = null; - ExportLogsPartialSuccess.prototype.errorMessage = null; - ExportLogsPartialSuccess.create = function create(properties) { - return new ExportLogsPartialSuccess(properties); - }; - ExportLogsPartialSuccess.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rejectedLogRecords != null && Object.hasOwnProperty.call(message, "rejectedLogRecords")) - writer.uint32(8).int64(message.rejectedLogRecords); - if (message.errorMessage != null && Object.hasOwnProperty.call(message, "errorMessage")) - writer.uint32(18).string(message.errorMessage); - return writer; - }; - ExportLogsPartialSuccess.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportLogsPartialSuccess.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.rejectedLogRecords = reader.int64(); - break; - } - case 2: { - message.errorMessage = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportLogsPartialSuccess.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportLogsPartialSuccess.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rejectedLogRecords != null && message.hasOwnProperty("rejectedLogRecords")) { - if (!$util.isInteger(message.rejectedLogRecords) && !(message.rejectedLogRecords && $util.isInteger(message.rejectedLogRecords.low) && $util.isInteger(message.rejectedLogRecords.high))) - return "rejectedLogRecords: integer|Long expected"; - } - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) { - if (!$util.isString(message.errorMessage)) - return "errorMessage: string expected"; - } - return null; - }; - ExportLogsPartialSuccess.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess) - return object3; - var message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess; - if (object3.rejectedLogRecords != null) { - if ($util.Long) - (message.rejectedLogRecords = $util.Long.fromValue(object3.rejectedLogRecords)).unsigned = false; - else if (typeof object3.rejectedLogRecords === "string") - message.rejectedLogRecords = parseInt(object3.rejectedLogRecords, 10); - else if (typeof object3.rejectedLogRecords === "number") - message.rejectedLogRecords = object3.rejectedLogRecords; - else if (typeof object3.rejectedLogRecords === "object") - message.rejectedLogRecords = new $util.LongBits(object3.rejectedLogRecords.low >>> 0, object3.rejectedLogRecords.high >>> 0).toNumber(); - } - if (object3.errorMessage != null) - message.errorMessage = String(object3.errorMessage); - return message; - }; - ExportLogsPartialSuccess.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.rejectedLogRecords = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.rejectedLogRecords = options.longs === String ? "0" : 0; - object3.errorMessage = ""; - } - if (message.rejectedLogRecords != null && message.hasOwnProperty("rejectedLogRecords")) - if (typeof message.rejectedLogRecords === "number") - object3.rejectedLogRecords = options.longs === String ? String(message.rejectedLogRecords) : message.rejectedLogRecords; - else - object3.rejectedLogRecords = options.longs === String ? $util.Long.prototype.toString.call(message.rejectedLogRecords) : options.longs === Number ? new $util.LongBits(message.rejectedLogRecords.low >>> 0, message.rejectedLogRecords.high >>> 0).toNumber() : message.rejectedLogRecords; - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) - object3.errorMessage = message.errorMessage; - return object3; - }; - ExportLogsPartialSuccess.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportLogsPartialSuccess.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess"; - }; - return ExportLogsPartialSuccess; - }(); - return v1; - }(); - return logs; - }(); - return collector; - }(); - proto.metrics = function() { - var metrics = {}; - metrics.v1 = function() { - var v1 = {}; - v1.MetricsData = function() { - function MetricsData(properties) { - this.resourceMetrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - MetricsData.prototype.resourceMetrics = $util.emptyArray; - MetricsData.create = function create(properties) { - return new MetricsData(properties); - }; - MetricsData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceMetrics != null && message.resourceMetrics.length) - for (var i = 0;i < message.resourceMetrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.ResourceMetrics.encode(message.resourceMetrics[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - MetricsData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - MetricsData.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.MetricsData; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceMetrics && message.resourceMetrics.length)) - message.resourceMetrics = []; - message.resourceMetrics.push($root.opentelemetry.proto.metrics.v1.ResourceMetrics.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - MetricsData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - MetricsData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceMetrics != null && message.hasOwnProperty("resourceMetrics")) { - if (!Array.isArray(message.resourceMetrics)) - return "resourceMetrics: array expected"; - for (var i = 0;i < message.resourceMetrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.verify(message.resourceMetrics[i]); - if (error48) - return "resourceMetrics." + error48; - } - } - return null; - }; - MetricsData.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.MetricsData) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.MetricsData; - if (object3.resourceMetrics) { - if (!Array.isArray(object3.resourceMetrics)) - throw TypeError(".opentelemetry.proto.metrics.v1.MetricsData.resourceMetrics: array expected"); - message.resourceMetrics = []; - for (var i = 0;i < object3.resourceMetrics.length; ++i) { - if (typeof object3.resourceMetrics[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.MetricsData.resourceMetrics: object expected"); - message.resourceMetrics[i] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.fromObject(object3.resourceMetrics[i]); - } - } - return message; - }; - MetricsData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceMetrics = []; - if (message.resourceMetrics && message.resourceMetrics.length) { - object3.resourceMetrics = []; - for (var j = 0;j < message.resourceMetrics.length; ++j) - object3.resourceMetrics[j] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.toObject(message.resourceMetrics[j], options); - } - return object3; - }; - MetricsData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - MetricsData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.MetricsData"; - }; - return MetricsData; - }(); - v1.ResourceMetrics = function() { - function ResourceMetrics(properties) { - this.scopeMetrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ResourceMetrics.prototype.resource = null; - ResourceMetrics.prototype.scopeMetrics = $util.emptyArray; - ResourceMetrics.prototype.schemaUrl = null; - ResourceMetrics.create = function create(properties) { - return new ResourceMetrics(properties); - }; - ResourceMetrics.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - $root.opentelemetry.proto.resource.v1.Resource.encode(message.resource, writer.uint32(10).fork()).ldelim(); - if (message.scopeMetrics != null && message.scopeMetrics.length) - for (var i = 0;i < message.scopeMetrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.ScopeMetrics.encode(message.scopeMetrics[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ResourceMetrics.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ResourceMetrics.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ResourceMetrics; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.resource = $root.opentelemetry.proto.resource.v1.Resource.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.scopeMetrics && message.scopeMetrics.length)) - message.scopeMetrics = []; - message.scopeMetrics.push($root.opentelemetry.proto.metrics.v1.ScopeMetrics.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ResourceMetrics.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ResourceMetrics.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error48 = $root.opentelemetry.proto.resource.v1.Resource.verify(message.resource); - if (error48) - return "resource." + error48; - } - if (message.scopeMetrics != null && message.hasOwnProperty("scopeMetrics")) { - if (!Array.isArray(message.scopeMetrics)) - return "scopeMetrics: array expected"; - for (var i = 0;i < message.scopeMetrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ScopeMetrics.verify(message.scopeMetrics[i]); - if (error48) - return "scopeMetrics." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ResourceMetrics.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ResourceMetrics) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ResourceMetrics; - if (object3.resource != null) { - if (typeof object3.resource !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ResourceMetrics.resource: object expected"); - message.resource = $root.opentelemetry.proto.resource.v1.Resource.fromObject(object3.resource); - } - if (object3.scopeMetrics) { - if (!Array.isArray(object3.scopeMetrics)) - throw TypeError(".opentelemetry.proto.metrics.v1.ResourceMetrics.scopeMetrics: array expected"); - message.scopeMetrics = []; - for (var i = 0;i < object3.scopeMetrics.length; ++i) { - if (typeof object3.scopeMetrics[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ResourceMetrics.scopeMetrics: object expected"); - message.scopeMetrics[i] = $root.opentelemetry.proto.metrics.v1.ScopeMetrics.fromObject(object3.scopeMetrics[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ResourceMetrics.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.scopeMetrics = []; - if (options.defaults) { - object3.resource = null; - object3.schemaUrl = ""; - } - if (message.resource != null && message.hasOwnProperty("resource")) - object3.resource = $root.opentelemetry.proto.resource.v1.Resource.toObject(message.resource, options); - if (message.scopeMetrics && message.scopeMetrics.length) { - object3.scopeMetrics = []; - for (var j = 0;j < message.scopeMetrics.length; ++j) - object3.scopeMetrics[j] = $root.opentelemetry.proto.metrics.v1.ScopeMetrics.toObject(message.scopeMetrics[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ResourceMetrics.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ResourceMetrics.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ResourceMetrics"; - }; - return ResourceMetrics; - }(); - v1.ScopeMetrics = function() { - function ScopeMetrics(properties) { - this.metrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ScopeMetrics.prototype.scope = null; - ScopeMetrics.prototype.metrics = $util.emptyArray; - ScopeMetrics.prototype.schemaUrl = null; - ScopeMetrics.create = function create(properties) { - return new ScopeMetrics(properties); - }; - ScopeMetrics.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.scope != null && Object.hasOwnProperty.call(message, "scope")) - $root.opentelemetry.proto.common.v1.InstrumentationScope.encode(message.scope, writer.uint32(10).fork()).ldelim(); - if (message.metrics != null && message.metrics.length) - for (var i = 0;i < message.metrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.Metric.encode(message.metrics[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ScopeMetrics.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ScopeMetrics.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ScopeMetrics; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.metrics && message.metrics.length)) - message.metrics = []; - message.metrics.push($root.opentelemetry.proto.metrics.v1.Metric.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ScopeMetrics.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ScopeMetrics.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.scope != null && message.hasOwnProperty("scope")) { - var error48 = $root.opentelemetry.proto.common.v1.InstrumentationScope.verify(message.scope); - if (error48) - return "scope." + error48; - } - if (message.metrics != null && message.hasOwnProperty("metrics")) { - if (!Array.isArray(message.metrics)) - return "metrics: array expected"; - for (var i = 0;i < message.metrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Metric.verify(message.metrics[i]); - if (error48) - return "metrics." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ScopeMetrics.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ScopeMetrics) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ScopeMetrics; - if (object3.scope != null) { - if (typeof object3.scope !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ScopeMetrics.scope: object expected"); - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.fromObject(object3.scope); - } - if (object3.metrics) { - if (!Array.isArray(object3.metrics)) - throw TypeError(".opentelemetry.proto.metrics.v1.ScopeMetrics.metrics: array expected"); - message.metrics = []; - for (var i = 0;i < object3.metrics.length; ++i) { - if (typeof object3.metrics[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ScopeMetrics.metrics: object expected"); - message.metrics[i] = $root.opentelemetry.proto.metrics.v1.Metric.fromObject(object3.metrics[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ScopeMetrics.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.metrics = []; - if (options.defaults) { - object3.scope = null; - object3.schemaUrl = ""; - } - if (message.scope != null && message.hasOwnProperty("scope")) - object3.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.toObject(message.scope, options); - if (message.metrics && message.metrics.length) { - object3.metrics = []; - for (var j = 0;j < message.metrics.length; ++j) - object3.metrics[j] = $root.opentelemetry.proto.metrics.v1.Metric.toObject(message.metrics[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ScopeMetrics.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ScopeMetrics.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ScopeMetrics"; - }; - return ScopeMetrics; - }(); - v1.Metric = function() { - function Metric(properties) { - this.metadata = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Metric.prototype.name = null; - Metric.prototype.description = null; - Metric.prototype.unit = null; - Metric.prototype.gauge = null; - Metric.prototype.sum = null; - Metric.prototype.histogram = null; - Metric.prototype.exponentialHistogram = null; - Metric.prototype.summary = null; - Metric.prototype.metadata = $util.emptyArray; - var $oneOfFields; - Object.defineProperty(Metric.prototype, "data", { - get: $util.oneOfGetter($oneOfFields = ["gauge", "sum", "histogram", "exponentialHistogram", "summary"]), - set: $util.oneOfSetter($oneOfFields) - }); - Metric.create = function create(properties) { - return new Metric(properties); - }; - Metric.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(10).string(message.name); - if (message.description != null && Object.hasOwnProperty.call(message, "description")) - writer.uint32(18).string(message.description); - if (message.unit != null && Object.hasOwnProperty.call(message, "unit")) - writer.uint32(26).string(message.unit); - if (message.gauge != null && Object.hasOwnProperty.call(message, "gauge")) - $root.opentelemetry.proto.metrics.v1.Gauge.encode(message.gauge, writer.uint32(42).fork()).ldelim(); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - $root.opentelemetry.proto.metrics.v1.Sum.encode(message.sum, writer.uint32(58).fork()).ldelim(); - if (message.histogram != null && Object.hasOwnProperty.call(message, "histogram")) - $root.opentelemetry.proto.metrics.v1.Histogram.encode(message.histogram, writer.uint32(74).fork()).ldelim(); - if (message.exponentialHistogram != null && Object.hasOwnProperty.call(message, "exponentialHistogram")) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.encode(message.exponentialHistogram, writer.uint32(82).fork()).ldelim(); - if (message.summary != null && Object.hasOwnProperty.call(message, "summary")) - $root.opentelemetry.proto.metrics.v1.Summary.encode(message.summary, writer.uint32(90).fork()).ldelim(); - if (message.metadata != null && message.metadata.length) - for (var i = 0;i < message.metadata.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.metadata[i], writer.uint32(98).fork()).ldelim(); - return writer; - }; - Metric.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Metric.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Metric; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.name = reader.string(); - break; - } - case 2: { - message.description = reader.string(); - break; - } - case 3: { - message.unit = reader.string(); - break; - } - case 5: { - message.gauge = $root.opentelemetry.proto.metrics.v1.Gauge.decode(reader, reader.uint32()); - break; - } - case 7: { - message.sum = $root.opentelemetry.proto.metrics.v1.Sum.decode(reader, reader.uint32()); - break; - } - case 9: { - message.histogram = $root.opentelemetry.proto.metrics.v1.Histogram.decode(reader, reader.uint32()); - break; - } - case 10: { - message.exponentialHistogram = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.decode(reader, reader.uint32()); - break; - } - case 11: { - message.summary = $root.opentelemetry.proto.metrics.v1.Summary.decode(reader, reader.uint32()); - break; - } - case 12: { - if (!(message.metadata && message.metadata.length)) - message.metadata = []; - message.metadata.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Metric.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Metric.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.description != null && message.hasOwnProperty("description")) { - if (!$util.isString(message.description)) - return "description: string expected"; - } - if (message.unit != null && message.hasOwnProperty("unit")) { - if (!$util.isString(message.unit)) - return "unit: string expected"; - } - if (message.gauge != null && message.hasOwnProperty("gauge")) { - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Gauge.verify(message.gauge); - if (error48) - return "gauge." + error48; - } - } - if (message.sum != null && message.hasOwnProperty("sum")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Sum.verify(message.sum); - if (error48) - return "sum." + error48; - } - } - if (message.histogram != null && message.hasOwnProperty("histogram")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Histogram.verify(message.histogram); - if (error48) - return "histogram." + error48; - } - } - if (message.exponentialHistogram != null && message.hasOwnProperty("exponentialHistogram")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.verify(message.exponentialHistogram); - if (error48) - return "exponentialHistogram." + error48; - } - } - if (message.summary != null && message.hasOwnProperty("summary")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Summary.verify(message.summary); - if (error48) - return "summary." + error48; - } - } - if (message.metadata != null && message.hasOwnProperty("metadata")) { - if (!Array.isArray(message.metadata)) - return "metadata: array expected"; - for (var i = 0;i < message.metadata.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.metadata[i]); - if (error48) - return "metadata." + error48; - } - } - return null; - }; - Metric.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Metric) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Metric; - if (object3.name != null) - message.name = String(object3.name); - if (object3.description != null) - message.description = String(object3.description); - if (object3.unit != null) - message.unit = String(object3.unit); - if (object3.gauge != null) { - if (typeof object3.gauge !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.gauge: object expected"); - message.gauge = $root.opentelemetry.proto.metrics.v1.Gauge.fromObject(object3.gauge); - } - if (object3.sum != null) { - if (typeof object3.sum !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.sum: object expected"); - message.sum = $root.opentelemetry.proto.metrics.v1.Sum.fromObject(object3.sum); - } - if (object3.histogram != null) { - if (typeof object3.histogram !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.histogram: object expected"); - message.histogram = $root.opentelemetry.proto.metrics.v1.Histogram.fromObject(object3.histogram); - } - if (object3.exponentialHistogram != null) { - if (typeof object3.exponentialHistogram !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.exponentialHistogram: object expected"); - message.exponentialHistogram = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.fromObject(object3.exponentialHistogram); - } - if (object3.summary != null) { - if (typeof object3.summary !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.summary: object expected"); - message.summary = $root.opentelemetry.proto.metrics.v1.Summary.fromObject(object3.summary); - } - if (object3.metadata) { - if (!Array.isArray(object3.metadata)) - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.metadata: array expected"); - message.metadata = []; - for (var i = 0;i < object3.metadata.length; ++i) { - if (typeof object3.metadata[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.metadata: object expected"); - message.metadata[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.metadata[i]); - } - } - return message; - }; - Metric.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.metadata = []; - if (options.defaults) { - object3.name = ""; - object3.description = ""; - object3.unit = ""; - } - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.description != null && message.hasOwnProperty("description")) - object3.description = message.description; - if (message.unit != null && message.hasOwnProperty("unit")) - object3.unit = message.unit; - if (message.gauge != null && message.hasOwnProperty("gauge")) { - object3.gauge = $root.opentelemetry.proto.metrics.v1.Gauge.toObject(message.gauge, options); - if (options.oneofs) - object3.data = "gauge"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - object3.sum = $root.opentelemetry.proto.metrics.v1.Sum.toObject(message.sum, options); - if (options.oneofs) - object3.data = "sum"; - } - if (message.histogram != null && message.hasOwnProperty("histogram")) { - object3.histogram = $root.opentelemetry.proto.metrics.v1.Histogram.toObject(message.histogram, options); - if (options.oneofs) - object3.data = "histogram"; - } - if (message.exponentialHistogram != null && message.hasOwnProperty("exponentialHistogram")) { - object3.exponentialHistogram = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.toObject(message.exponentialHistogram, options); - if (options.oneofs) - object3.data = "exponentialHistogram"; - } - if (message.summary != null && message.hasOwnProperty("summary")) { - object3.summary = $root.opentelemetry.proto.metrics.v1.Summary.toObject(message.summary, options); - if (options.oneofs) - object3.data = "summary"; - } - if (message.metadata && message.metadata.length) { - object3.metadata = []; - for (var j = 0;j < message.metadata.length; ++j) - object3.metadata[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.metadata[j], options); - } - return object3; - }; - Metric.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Metric.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Metric"; - }; - return Metric; - }(); - v1.Gauge = function() { - function Gauge(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Gauge.prototype.dataPoints = $util.emptyArray; - Gauge.create = function create(properties) { - return new Gauge(properties); - }; - Gauge.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.NumberDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - Gauge.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Gauge.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Gauge; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.NumberDataPoint.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Gauge.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Gauge.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - return null; - }; - Gauge.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Gauge) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Gauge; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Gauge.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Gauge.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.fromObject(object3.dataPoints[i]); - } - } - return message; - }; - Gauge.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.toObject(message.dataPoints[j], options); - } - return object3; - }; - Gauge.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Gauge.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Gauge"; - }; - return Gauge; - }(); - v1.Sum = function() { - function Sum(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Sum.prototype.dataPoints = $util.emptyArray; - Sum.prototype.aggregationTemporality = null; - Sum.prototype.isMonotonic = null; - Sum.create = function create(properties) { - return new Sum(properties); - }; - Sum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.NumberDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - if (message.aggregationTemporality != null && Object.hasOwnProperty.call(message, "aggregationTemporality")) - writer.uint32(16).int32(message.aggregationTemporality); - if (message.isMonotonic != null && Object.hasOwnProperty.call(message, "isMonotonic")) - writer.uint32(24).bool(message.isMonotonic); - return writer; - }; - Sum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Sum.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Sum; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.NumberDataPoint.decode(reader, reader.uint32())); - break; - } - case 2: { - message.aggregationTemporality = reader.int32(); - break; - } - case 3: { - message.isMonotonic = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Sum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Sum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - switch (message.aggregationTemporality) { - default: - return "aggregationTemporality: enum value expected"; - case 0: - case 1: - case 2: - break; - } - if (message.isMonotonic != null && message.hasOwnProperty("isMonotonic")) { - if (typeof message.isMonotonic !== "boolean") - return "isMonotonic: boolean expected"; - } - return null; - }; - Sum.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Sum) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Sum; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Sum.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Sum.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.fromObject(object3.dataPoints[i]); - } - } - switch (object3.aggregationTemporality) { - default: - if (typeof object3.aggregationTemporality === "number") { - message.aggregationTemporality = object3.aggregationTemporality; - break; - } - break; - case "AGGREGATION_TEMPORALITY_UNSPECIFIED": - case 0: - message.aggregationTemporality = 0; - break; - case "AGGREGATION_TEMPORALITY_DELTA": - case 1: - message.aggregationTemporality = 1; - break; - case "AGGREGATION_TEMPORALITY_CUMULATIVE": - case 2: - message.aggregationTemporality = 2; - break; - } - if (object3.isMonotonic != null) - message.isMonotonic = Boolean(object3.isMonotonic); - return message; - }; - Sum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (options.defaults) { - object3.aggregationTemporality = options.enums === String ? "AGGREGATION_TEMPORALITY_UNSPECIFIED" : 0; - object3.isMonotonic = false; - } - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.toObject(message.dataPoints[j], options); - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - object3.aggregationTemporality = options.enums === String ? $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] === undefined ? message.aggregationTemporality : $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] : message.aggregationTemporality; - if (message.isMonotonic != null && message.hasOwnProperty("isMonotonic")) - object3.isMonotonic = message.isMonotonic; - return object3; - }; - Sum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Sum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Sum"; - }; - return Sum; - }(); - v1.Histogram = function() { - function Histogram(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Histogram.prototype.dataPoints = $util.emptyArray; - Histogram.prototype.aggregationTemporality = null; - Histogram.create = function create(properties) { - return new Histogram(properties); - }; - Histogram.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - if (message.aggregationTemporality != null && Object.hasOwnProperty.call(message, "aggregationTemporality")) - writer.uint32(16).int32(message.aggregationTemporality); - return writer; - }; - Histogram.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Histogram.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Histogram; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.HistogramDataPoint.decode(reader, reader.uint32())); - break; - } - case 2: { - message.aggregationTemporality = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Histogram.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Histogram.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - switch (message.aggregationTemporality) { - default: - return "aggregationTemporality: enum value expected"; - case 0: - case 1: - case 2: - break; - } - return null; - }; - Histogram.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Histogram) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Histogram; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Histogram.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Histogram.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.fromObject(object3.dataPoints[i]); - } - } - switch (object3.aggregationTemporality) { - default: - if (typeof object3.aggregationTemporality === "number") { - message.aggregationTemporality = object3.aggregationTemporality; - break; - } - break; - case "AGGREGATION_TEMPORALITY_UNSPECIFIED": - case 0: - message.aggregationTemporality = 0; - break; - case "AGGREGATION_TEMPORALITY_DELTA": - case 1: - message.aggregationTemporality = 1; - break; - case "AGGREGATION_TEMPORALITY_CUMULATIVE": - case 2: - message.aggregationTemporality = 2; - break; - } - return message; - }; - Histogram.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (options.defaults) - object3.aggregationTemporality = options.enums === String ? "AGGREGATION_TEMPORALITY_UNSPECIFIED" : 0; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.toObject(message.dataPoints[j], options); - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - object3.aggregationTemporality = options.enums === String ? $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] === undefined ? message.aggregationTemporality : $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] : message.aggregationTemporality; - return object3; - }; - Histogram.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Histogram.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Histogram"; - }; - return Histogram; - }(); - v1.ExponentialHistogram = function() { - function ExponentialHistogram(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExponentialHistogram.prototype.dataPoints = $util.emptyArray; - ExponentialHistogram.prototype.aggregationTemporality = null; - ExponentialHistogram.create = function create(properties) { - return new ExponentialHistogram(properties); - }; - ExponentialHistogram.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - if (message.aggregationTemporality != null && Object.hasOwnProperty.call(message, "aggregationTemporality")) - writer.uint32(16).int32(message.aggregationTemporality); - return writer; - }; - ExponentialHistogram.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExponentialHistogram.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogram; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.decode(reader, reader.uint32())); - break; - } - case 2: { - message.aggregationTemporality = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExponentialHistogram.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExponentialHistogram.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - switch (message.aggregationTemporality) { - default: - return "aggregationTemporality: enum value expected"; - case 0: - case 1: - case 2: - break; - } - return null; - }; - ExponentialHistogram.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ExponentialHistogram) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogram; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogram.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogram.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.fromObject(object3.dataPoints[i]); - } - } - switch (object3.aggregationTemporality) { - default: - if (typeof object3.aggregationTemporality === "number") { - message.aggregationTemporality = object3.aggregationTemporality; - break; - } - break; - case "AGGREGATION_TEMPORALITY_UNSPECIFIED": - case 0: - message.aggregationTemporality = 0; - break; - case "AGGREGATION_TEMPORALITY_DELTA": - case 1: - message.aggregationTemporality = 1; - break; - case "AGGREGATION_TEMPORALITY_CUMULATIVE": - case 2: - message.aggregationTemporality = 2; - break; - } - return message; - }; - ExponentialHistogram.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (options.defaults) - object3.aggregationTemporality = options.enums === String ? "AGGREGATION_TEMPORALITY_UNSPECIFIED" : 0; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.toObject(message.dataPoints[j], options); - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - object3.aggregationTemporality = options.enums === String ? $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] === undefined ? message.aggregationTemporality : $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] : message.aggregationTemporality; - return object3; - }; - ExponentialHistogram.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExponentialHistogram.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ExponentialHistogram"; - }; - return ExponentialHistogram; - }(); - v1.Summary = function() { - function Summary(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Summary.prototype.dataPoints = $util.emptyArray; - Summary.create = function create(properties) { - return new Summary(properties); - }; - Summary.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - Summary.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Summary.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Summary; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.SummaryDataPoint.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Summary.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Summary.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - return null; - }; - Summary.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Summary) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Summary; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Summary.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Summary.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.fromObject(object3.dataPoints[i]); - } - } - return message; - }; - Summary.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.toObject(message.dataPoints[j], options); - } - return object3; - }; - Summary.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Summary.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Summary"; - }; - return Summary; - }(); - v1.AggregationTemporality = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "AGGREGATION_TEMPORALITY_UNSPECIFIED"] = 0; - values[valuesById[1] = "AGGREGATION_TEMPORALITY_DELTA"] = 1; - values[valuesById[2] = "AGGREGATION_TEMPORALITY_CUMULATIVE"] = 2; - return values; - }(); - v1.DataPointFlags = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "DATA_POINT_FLAGS_DO_NOT_USE"] = 0; - values[valuesById[1] = "DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK"] = 1; - return values; - }(); - v1.NumberDataPoint = function() { - function NumberDataPoint(properties) { - this.attributes = []; - this.exemplars = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - NumberDataPoint.prototype.attributes = $util.emptyArray; - NumberDataPoint.prototype.startTimeUnixNano = null; - NumberDataPoint.prototype.timeUnixNano = null; - NumberDataPoint.prototype.asDouble = null; - NumberDataPoint.prototype.asInt = null; - NumberDataPoint.prototype.exemplars = $util.emptyArray; - NumberDataPoint.prototype.flags = null; - var $oneOfFields; - Object.defineProperty(NumberDataPoint.prototype, "value", { - get: $util.oneOfGetter($oneOfFields = ["asDouble", "asInt"]), - set: $util.oneOfSetter($oneOfFields) - }); - NumberDataPoint.create = function create(properties) { - return new NumberDataPoint(properties); - }; - NumberDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.asDouble != null && Object.hasOwnProperty.call(message, "asDouble")) - writer.uint32(33).double(message.asDouble); - if (message.exemplars != null && message.exemplars.length) - for (var i = 0;i < message.exemplars.length; ++i) - $root.opentelemetry.proto.metrics.v1.Exemplar.encode(message.exemplars[i], writer.uint32(42).fork()).ldelim(); - if (message.asInt != null && Object.hasOwnProperty.call(message, "asInt")) - writer.uint32(49).sfixed64(message.asInt); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(58).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(64).uint32(message.flags); - return writer; - }; - NumberDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - NumberDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.NumberDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 7: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.asDouble = reader.double(); - break; - } - case 6: { - message.asInt = reader.sfixed64(); - break; - } - case 5: { - if (!(message.exemplars && message.exemplars.length)) - message.exemplars = []; - message.exemplars.push($root.opentelemetry.proto.metrics.v1.Exemplar.decode(reader, reader.uint32())); - break; - } - case 8: { - message.flags = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - NumberDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - NumberDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - properties.value = 1; - if (typeof message.asDouble !== "number") - return "asDouble: number expected"; - } - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!$util.isInteger(message.asInt) && !(message.asInt && $util.isInteger(message.asInt.low) && $util.isInteger(message.asInt.high))) - return "asInt: integer|Long expected"; - } - if (message.exemplars != null && message.hasOwnProperty("exemplars")) { - if (!Array.isArray(message.exemplars)) - return "exemplars: array expected"; - for (var i = 0;i < message.exemplars.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Exemplar.verify(message.exemplars[i]); - if (error48) - return "exemplars." + error48; - } - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - return null; - }; - NumberDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.NumberDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.NumberDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.asDouble != null) - message.asDouble = Number(object3.asDouble); - if (object3.asInt != null) { - if ($util.Long) - (message.asInt = $util.Long.fromValue(object3.asInt)).unsigned = false; - else if (typeof object3.asInt === "string") - message.asInt = parseInt(object3.asInt, 10); - else if (typeof object3.asInt === "number") - message.asInt = object3.asInt; - else if (typeof object3.asInt === "object") - message.asInt = new $util.LongBits(object3.asInt.low >>> 0, object3.asInt.high >>> 0).toNumber(); - } - if (object3.exemplars) { - if (!Array.isArray(object3.exemplars)) - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.exemplars: array expected"); - message.exemplars = []; - for (var i = 0;i < object3.exemplars.length; ++i) { - if (typeof object3.exemplars[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.exemplars: object expected"); - message.exemplars[i] = $root.opentelemetry.proto.metrics.v1.Exemplar.fromObject(object3.exemplars[i]); - } - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - return message; - }; - NumberDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.exemplars = []; - object3.attributes = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - object3.flags = 0; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - object3.asDouble = options.json && !isFinite(message.asDouble) ? String(message.asDouble) : message.asDouble; - if (options.oneofs) - object3.value = "asDouble"; - } - if (message.exemplars && message.exemplars.length) { - object3.exemplars = []; - for (var j = 0;j < message.exemplars.length; ++j) - object3.exemplars[j] = $root.opentelemetry.proto.metrics.v1.Exemplar.toObject(message.exemplars[j], options); - } - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (typeof message.asInt === "number") - object3.asInt = options.longs === String ? String(message.asInt) : message.asInt; - else - object3.asInt = options.longs === String ? $util.Long.prototype.toString.call(message.asInt) : options.longs === Number ? new $util.LongBits(message.asInt.low >>> 0, message.asInt.high >>> 0).toNumber() : message.asInt; - if (options.oneofs) - object3.value = "asInt"; - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - NumberDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - NumberDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.NumberDataPoint"; - }; - return NumberDataPoint; - }(); - v1.HistogramDataPoint = function() { - function HistogramDataPoint(properties) { - this.attributes = []; - this.bucketCounts = []; - this.explicitBounds = []; - this.exemplars = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - HistogramDataPoint.prototype.attributes = $util.emptyArray; - HistogramDataPoint.prototype.startTimeUnixNano = null; - HistogramDataPoint.prototype.timeUnixNano = null; - HistogramDataPoint.prototype.count = null; - HistogramDataPoint.prototype.sum = null; - HistogramDataPoint.prototype.bucketCounts = $util.emptyArray; - HistogramDataPoint.prototype.explicitBounds = $util.emptyArray; - HistogramDataPoint.prototype.exemplars = $util.emptyArray; - HistogramDataPoint.prototype.flags = null; - HistogramDataPoint.prototype.min = null; - HistogramDataPoint.prototype.max = null; - var $oneOfFields; - Object.defineProperty(HistogramDataPoint.prototype, "_sum", { - get: $util.oneOfGetter($oneOfFields = ["sum"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(HistogramDataPoint.prototype, "_min", { - get: $util.oneOfGetter($oneOfFields = ["min"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(HistogramDataPoint.prototype, "_max", { - get: $util.oneOfGetter($oneOfFields = ["max"]), - set: $util.oneOfSetter($oneOfFields) - }); - HistogramDataPoint.create = function create(properties) { - return new HistogramDataPoint(properties); - }; - HistogramDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.count != null && Object.hasOwnProperty.call(message, "count")) - writer.uint32(33).fixed64(message.count); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - writer.uint32(41).double(message.sum); - if (message.bucketCounts != null && message.bucketCounts.length) { - writer.uint32(50).fork(); - for (var i = 0;i < message.bucketCounts.length; ++i) - writer.fixed64(message.bucketCounts[i]); - writer.ldelim(); - } - if (message.explicitBounds != null && message.explicitBounds.length) { - writer.uint32(58).fork(); - for (var i = 0;i < message.explicitBounds.length; ++i) - writer.double(message.explicitBounds[i]); - writer.ldelim(); - } - if (message.exemplars != null && message.exemplars.length) - for (var i = 0;i < message.exemplars.length; ++i) - $root.opentelemetry.proto.metrics.v1.Exemplar.encode(message.exemplars[i], writer.uint32(66).fork()).ldelim(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(74).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(80).uint32(message.flags); - if (message.min != null && Object.hasOwnProperty.call(message, "min")) - writer.uint32(89).double(message.min); - if (message.max != null && Object.hasOwnProperty.call(message, "max")) - writer.uint32(97).double(message.max); - return writer; - }; - HistogramDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - HistogramDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.HistogramDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 9: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.count = reader.fixed64(); - break; - } - case 5: { - message.sum = reader.double(); - break; - } - case 6: { - if (!(message.bucketCounts && message.bucketCounts.length)) - message.bucketCounts = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.bucketCounts.push(reader.fixed64()); - } else - message.bucketCounts.push(reader.fixed64()); - break; - } - case 7: { - if (!(message.explicitBounds && message.explicitBounds.length)) - message.explicitBounds = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.explicitBounds.push(reader.double()); - } else - message.explicitBounds.push(reader.double()); - break; - } - case 8: { - if (!(message.exemplars && message.exemplars.length)) - message.exemplars = []; - message.exemplars.push($root.opentelemetry.proto.metrics.v1.Exemplar.decode(reader, reader.uint32())); - break; - } - case 10: { - message.flags = reader.uint32(); - break; - } - case 11: { - message.min = reader.double(); - break; - } - case 12: { - message.max = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - HistogramDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - HistogramDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.count != null && message.hasOwnProperty("count")) { - if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) - return "count: integer|Long expected"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - properties._sum = 1; - if (typeof message.sum !== "number") - return "sum: number expected"; - } - if (message.bucketCounts != null && message.hasOwnProperty("bucketCounts")) { - if (!Array.isArray(message.bucketCounts)) - return "bucketCounts: array expected"; - for (var i = 0;i < message.bucketCounts.length; ++i) - if (!$util.isInteger(message.bucketCounts[i]) && !(message.bucketCounts[i] && $util.isInteger(message.bucketCounts[i].low) && $util.isInteger(message.bucketCounts[i].high))) - return "bucketCounts: integer|Long[] expected"; - } - if (message.explicitBounds != null && message.hasOwnProperty("explicitBounds")) { - if (!Array.isArray(message.explicitBounds)) - return "explicitBounds: array expected"; - for (var i = 0;i < message.explicitBounds.length; ++i) - if (typeof message.explicitBounds[i] !== "number") - return "explicitBounds: number[] expected"; - } - if (message.exemplars != null && message.hasOwnProperty("exemplars")) { - if (!Array.isArray(message.exemplars)) - return "exemplars: array expected"; - for (var i = 0;i < message.exemplars.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Exemplar.verify(message.exemplars[i]); - if (error48) - return "exemplars." + error48; - } - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.min != null && message.hasOwnProperty("min")) { - properties._min = 1; - if (typeof message.min !== "number") - return "min: number expected"; - } - if (message.max != null && message.hasOwnProperty("max")) { - properties._max = 1; - if (typeof message.max !== "number") - return "max: number expected"; - } - return null; - }; - HistogramDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.HistogramDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.HistogramDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.count != null) { - if ($util.Long) - (message.count = $util.Long.fromValue(object3.count)).unsigned = false; - else if (typeof object3.count === "string") - message.count = parseInt(object3.count, 10); - else if (typeof object3.count === "number") - message.count = object3.count; - else if (typeof object3.count === "object") - message.count = new $util.LongBits(object3.count.low >>> 0, object3.count.high >>> 0).toNumber(); - } - if (object3.sum != null) - message.sum = Number(object3.sum); - if (object3.bucketCounts) { - if (!Array.isArray(object3.bucketCounts)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.bucketCounts: array expected"); - message.bucketCounts = []; - for (var i = 0;i < object3.bucketCounts.length; ++i) - if ($util.Long) - (message.bucketCounts[i] = $util.Long.fromValue(object3.bucketCounts[i])).unsigned = false; - else if (typeof object3.bucketCounts[i] === "string") - message.bucketCounts[i] = parseInt(object3.bucketCounts[i], 10); - else if (typeof object3.bucketCounts[i] === "number") - message.bucketCounts[i] = object3.bucketCounts[i]; - else if (typeof object3.bucketCounts[i] === "object") - message.bucketCounts[i] = new $util.LongBits(object3.bucketCounts[i].low >>> 0, object3.bucketCounts[i].high >>> 0).toNumber(); - } - if (object3.explicitBounds) { - if (!Array.isArray(object3.explicitBounds)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.explicitBounds: array expected"); - message.explicitBounds = []; - for (var i = 0;i < object3.explicitBounds.length; ++i) - message.explicitBounds[i] = Number(object3.explicitBounds[i]); - } - if (object3.exemplars) { - if (!Array.isArray(object3.exemplars)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.exemplars: array expected"); - message.exemplars = []; - for (var i = 0;i < object3.exemplars.length; ++i) { - if (typeof object3.exemplars[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.exemplars: object expected"); - message.exemplars[i] = $root.opentelemetry.proto.metrics.v1.Exemplar.fromObject(object3.exemplars[i]); - } - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.min != null) - message.min = Number(object3.min); - if (object3.max != null) - message.max = Number(object3.max); - return message; - }; - HistogramDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.bucketCounts = []; - object3.explicitBounds = []; - object3.exemplars = []; - object3.attributes = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.count = options.longs === String ? "0" : 0; - object3.flags = 0; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.count != null && message.hasOwnProperty("count")) - if (typeof message.count === "number") - object3.count = options.longs === String ? String(message.count) : message.count; - else - object3.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; - if (message.sum != null && message.hasOwnProperty("sum")) { - object3.sum = options.json && !isFinite(message.sum) ? String(message.sum) : message.sum; - if (options.oneofs) - object3._sum = "sum"; - } - if (message.bucketCounts && message.bucketCounts.length) { - object3.bucketCounts = []; - for (var j = 0;j < message.bucketCounts.length; ++j) - if (typeof message.bucketCounts[j] === "number") - object3.bucketCounts[j] = options.longs === String ? String(message.bucketCounts[j]) : message.bucketCounts[j]; - else - object3.bucketCounts[j] = options.longs === String ? $util.Long.prototype.toString.call(message.bucketCounts[j]) : options.longs === Number ? new $util.LongBits(message.bucketCounts[j].low >>> 0, message.bucketCounts[j].high >>> 0).toNumber() : message.bucketCounts[j]; - } - if (message.explicitBounds && message.explicitBounds.length) { - object3.explicitBounds = []; - for (var j = 0;j < message.explicitBounds.length; ++j) - object3.explicitBounds[j] = options.json && !isFinite(message.explicitBounds[j]) ? String(message.explicitBounds[j]) : message.explicitBounds[j]; - } - if (message.exemplars && message.exemplars.length) { - object3.exemplars = []; - for (var j = 0;j < message.exemplars.length; ++j) - object3.exemplars[j] = $root.opentelemetry.proto.metrics.v1.Exemplar.toObject(message.exemplars[j], options); - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - if (message.min != null && message.hasOwnProperty("min")) { - object3.min = options.json && !isFinite(message.min) ? String(message.min) : message.min; - if (options.oneofs) - object3._min = "min"; - } - if (message.max != null && message.hasOwnProperty("max")) { - object3.max = options.json && !isFinite(message.max) ? String(message.max) : message.max; - if (options.oneofs) - object3._max = "max"; - } - return object3; - }; - HistogramDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - HistogramDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.HistogramDataPoint"; - }; - return HistogramDataPoint; - }(); - v1.ExponentialHistogramDataPoint = function() { - function ExponentialHistogramDataPoint(properties) { - this.attributes = []; - this.exemplars = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExponentialHistogramDataPoint.prototype.attributes = $util.emptyArray; - ExponentialHistogramDataPoint.prototype.startTimeUnixNano = null; - ExponentialHistogramDataPoint.prototype.timeUnixNano = null; - ExponentialHistogramDataPoint.prototype.count = null; - ExponentialHistogramDataPoint.prototype.sum = null; - ExponentialHistogramDataPoint.prototype.scale = null; - ExponentialHistogramDataPoint.prototype.zeroCount = null; - ExponentialHistogramDataPoint.prototype.positive = null; - ExponentialHistogramDataPoint.prototype.negative = null; - ExponentialHistogramDataPoint.prototype.flags = null; - ExponentialHistogramDataPoint.prototype.exemplars = $util.emptyArray; - ExponentialHistogramDataPoint.prototype.min = null; - ExponentialHistogramDataPoint.prototype.max = null; - ExponentialHistogramDataPoint.prototype.zeroThreshold = null; - var $oneOfFields; - Object.defineProperty(ExponentialHistogramDataPoint.prototype, "_sum", { - get: $util.oneOfGetter($oneOfFields = ["sum"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(ExponentialHistogramDataPoint.prototype, "_min", { - get: $util.oneOfGetter($oneOfFields = ["min"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(ExponentialHistogramDataPoint.prototype, "_max", { - get: $util.oneOfGetter($oneOfFields = ["max"]), - set: $util.oneOfSetter($oneOfFields) - }); - ExponentialHistogramDataPoint.create = function create(properties) { - return new ExponentialHistogramDataPoint(properties); - }; - ExponentialHistogramDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(10).fork()).ldelim(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.count != null && Object.hasOwnProperty.call(message, "count")) - writer.uint32(33).fixed64(message.count); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - writer.uint32(41).double(message.sum); - if (message.scale != null && Object.hasOwnProperty.call(message, "scale")) - writer.uint32(48).sint32(message.scale); - if (message.zeroCount != null && Object.hasOwnProperty.call(message, "zeroCount")) - writer.uint32(57).fixed64(message.zeroCount); - if (message.positive != null && Object.hasOwnProperty.call(message, "positive")) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.encode(message.positive, writer.uint32(66).fork()).ldelim(); - if (message.negative != null && Object.hasOwnProperty.call(message, "negative")) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.encode(message.negative, writer.uint32(74).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(80).uint32(message.flags); - if (message.exemplars != null && message.exemplars.length) - for (var i = 0;i < message.exemplars.length; ++i) - $root.opentelemetry.proto.metrics.v1.Exemplar.encode(message.exemplars[i], writer.uint32(90).fork()).ldelim(); - if (message.min != null && Object.hasOwnProperty.call(message, "min")) - writer.uint32(97).double(message.min); - if (message.max != null && Object.hasOwnProperty.call(message, "max")) - writer.uint32(105).double(message.max); - if (message.zeroThreshold != null && Object.hasOwnProperty.call(message, "zeroThreshold")) - writer.uint32(113).double(message.zeroThreshold); - return writer; - }; - ExponentialHistogramDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExponentialHistogramDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.count = reader.fixed64(); - break; - } - case 5: { - message.sum = reader.double(); - break; - } - case 6: { - message.scale = reader.sint32(); - break; - } - case 7: { - message.zeroCount = reader.fixed64(); - break; - } - case 8: { - message.positive = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.decode(reader, reader.uint32()); - break; - } - case 9: { - message.negative = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.decode(reader, reader.uint32()); - break; - } - case 10: { - message.flags = reader.uint32(); - break; - } - case 11: { - if (!(message.exemplars && message.exemplars.length)) - message.exemplars = []; - message.exemplars.push($root.opentelemetry.proto.metrics.v1.Exemplar.decode(reader, reader.uint32())); - break; - } - case 12: { - message.min = reader.double(); - break; - } - case 13: { - message.max = reader.double(); - break; - } - case 14: { - message.zeroThreshold = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExponentialHistogramDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExponentialHistogramDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.count != null && message.hasOwnProperty("count")) { - if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) - return "count: integer|Long expected"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - properties._sum = 1; - if (typeof message.sum !== "number") - return "sum: number expected"; - } - if (message.scale != null && message.hasOwnProperty("scale")) { - if (!$util.isInteger(message.scale)) - return "scale: integer expected"; - } - if (message.zeroCount != null && message.hasOwnProperty("zeroCount")) { - if (!$util.isInteger(message.zeroCount) && !(message.zeroCount && $util.isInteger(message.zeroCount.low) && $util.isInteger(message.zeroCount.high))) - return "zeroCount: integer|Long expected"; - } - if (message.positive != null && message.hasOwnProperty("positive")) { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.verify(message.positive); - if (error48) - return "positive." + error48; - } - if (message.negative != null && message.hasOwnProperty("negative")) { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.verify(message.negative); - if (error48) - return "negative." + error48; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.exemplars != null && message.hasOwnProperty("exemplars")) { - if (!Array.isArray(message.exemplars)) - return "exemplars: array expected"; - for (var i = 0;i < message.exemplars.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Exemplar.verify(message.exemplars[i]); - if (error48) - return "exemplars." + error48; - } - } - if (message.min != null && message.hasOwnProperty("min")) { - properties._min = 1; - if (typeof message.min !== "number") - return "min: number expected"; - } - if (message.max != null && message.hasOwnProperty("max")) { - properties._max = 1; - if (typeof message.max !== "number") - return "max: number expected"; - } - if (message.zeroThreshold != null && message.hasOwnProperty("zeroThreshold")) { - if (typeof message.zeroThreshold !== "number") - return "zeroThreshold: number expected"; - } - return null; - }; - ExponentialHistogramDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.count != null) { - if ($util.Long) - (message.count = $util.Long.fromValue(object3.count)).unsigned = false; - else if (typeof object3.count === "string") - message.count = parseInt(object3.count, 10); - else if (typeof object3.count === "number") - message.count = object3.count; - else if (typeof object3.count === "object") - message.count = new $util.LongBits(object3.count.low >>> 0, object3.count.high >>> 0).toNumber(); - } - if (object3.sum != null) - message.sum = Number(object3.sum); - if (object3.scale != null) - message.scale = object3.scale | 0; - if (object3.zeroCount != null) { - if ($util.Long) - (message.zeroCount = $util.Long.fromValue(object3.zeroCount)).unsigned = false; - else if (typeof object3.zeroCount === "string") - message.zeroCount = parseInt(object3.zeroCount, 10); - else if (typeof object3.zeroCount === "number") - message.zeroCount = object3.zeroCount; - else if (typeof object3.zeroCount === "object") - message.zeroCount = new $util.LongBits(object3.zeroCount.low >>> 0, object3.zeroCount.high >>> 0).toNumber(); - } - if (object3.positive != null) { - if (typeof object3.positive !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.positive: object expected"); - message.positive = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.fromObject(object3.positive); - } - if (object3.negative != null) { - if (typeof object3.negative !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.negative: object expected"); - message.negative = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.fromObject(object3.negative); - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.exemplars) { - if (!Array.isArray(object3.exemplars)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.exemplars: array expected"); - message.exemplars = []; - for (var i = 0;i < object3.exemplars.length; ++i) { - if (typeof object3.exemplars[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.exemplars: object expected"); - message.exemplars[i] = $root.opentelemetry.proto.metrics.v1.Exemplar.fromObject(object3.exemplars[i]); - } - } - if (object3.min != null) - message.min = Number(object3.min); - if (object3.max != null) - message.max = Number(object3.max); - if (object3.zeroThreshold != null) - message.zeroThreshold = Number(object3.zeroThreshold); - return message; - }; - ExponentialHistogramDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.attributes = []; - object3.exemplars = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.count = options.longs === String ? "0" : 0; - object3.scale = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.zeroCount = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.zeroCount = options.longs === String ? "0" : 0; - object3.positive = null; - object3.negative = null; - object3.flags = 0; - object3.zeroThreshold = 0; - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.count != null && message.hasOwnProperty("count")) - if (typeof message.count === "number") - object3.count = options.longs === String ? String(message.count) : message.count; - else - object3.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; - if (message.sum != null && message.hasOwnProperty("sum")) { - object3.sum = options.json && !isFinite(message.sum) ? String(message.sum) : message.sum; - if (options.oneofs) - object3._sum = "sum"; - } - if (message.scale != null && message.hasOwnProperty("scale")) - object3.scale = message.scale; - if (message.zeroCount != null && message.hasOwnProperty("zeroCount")) - if (typeof message.zeroCount === "number") - object3.zeroCount = options.longs === String ? String(message.zeroCount) : message.zeroCount; - else - object3.zeroCount = options.longs === String ? $util.Long.prototype.toString.call(message.zeroCount) : options.longs === Number ? new $util.LongBits(message.zeroCount.low >>> 0, message.zeroCount.high >>> 0).toNumber() : message.zeroCount; - if (message.positive != null && message.hasOwnProperty("positive")) - object3.positive = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.toObject(message.positive, options); - if (message.negative != null && message.hasOwnProperty("negative")) - object3.negative = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.toObject(message.negative, options); - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - if (message.exemplars && message.exemplars.length) { - object3.exemplars = []; - for (var j = 0;j < message.exemplars.length; ++j) - object3.exemplars[j] = $root.opentelemetry.proto.metrics.v1.Exemplar.toObject(message.exemplars[j], options); - } - if (message.min != null && message.hasOwnProperty("min")) { - object3.min = options.json && !isFinite(message.min) ? String(message.min) : message.min; - if (options.oneofs) - object3._min = "min"; - } - if (message.max != null && message.hasOwnProperty("max")) { - object3.max = options.json && !isFinite(message.max) ? String(message.max) : message.max; - if (options.oneofs) - object3._max = "max"; - } - if (message.zeroThreshold != null && message.hasOwnProperty("zeroThreshold")) - object3.zeroThreshold = options.json && !isFinite(message.zeroThreshold) ? String(message.zeroThreshold) : message.zeroThreshold; - return object3; - }; - ExponentialHistogramDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExponentialHistogramDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint"; - }; - ExponentialHistogramDataPoint.Buckets = function() { - function Buckets(properties) { - this.bucketCounts = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Buckets.prototype.offset = null; - Buckets.prototype.bucketCounts = $util.emptyArray; - Buckets.create = function create(properties) { - return new Buckets(properties); - }; - Buckets.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.offset != null && Object.hasOwnProperty.call(message, "offset")) - writer.uint32(8).sint32(message.offset); - if (message.bucketCounts != null && message.bucketCounts.length) { - writer.uint32(18).fork(); - for (var i = 0;i < message.bucketCounts.length; ++i) - writer.uint64(message.bucketCounts[i]); - writer.ldelim(); - } - return writer; - }; - Buckets.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Buckets.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.offset = reader.sint32(); - break; - } - case 2: { - if (!(message.bucketCounts && message.bucketCounts.length)) - message.bucketCounts = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.bucketCounts.push(reader.uint64()); - } else - message.bucketCounts.push(reader.uint64()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Buckets.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Buckets.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.offset != null && message.hasOwnProperty("offset")) { - if (!$util.isInteger(message.offset)) - return "offset: integer expected"; - } - if (message.bucketCounts != null && message.hasOwnProperty("bucketCounts")) { - if (!Array.isArray(message.bucketCounts)) - return "bucketCounts: array expected"; - for (var i = 0;i < message.bucketCounts.length; ++i) - if (!$util.isInteger(message.bucketCounts[i]) && !(message.bucketCounts[i] && $util.isInteger(message.bucketCounts[i].low) && $util.isInteger(message.bucketCounts[i].high))) - return "bucketCounts: integer|Long[] expected"; - } - return null; - }; - Buckets.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets; - if (object3.offset != null) - message.offset = object3.offset | 0; - if (object3.bucketCounts) { - if (!Array.isArray(object3.bucketCounts)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.bucketCounts: array expected"); - message.bucketCounts = []; - for (var i = 0;i < object3.bucketCounts.length; ++i) - if ($util.Long) - (message.bucketCounts[i] = $util.Long.fromValue(object3.bucketCounts[i])).unsigned = true; - else if (typeof object3.bucketCounts[i] === "string") - message.bucketCounts[i] = parseInt(object3.bucketCounts[i], 10); - else if (typeof object3.bucketCounts[i] === "number") - message.bucketCounts[i] = object3.bucketCounts[i]; - else if (typeof object3.bucketCounts[i] === "object") - message.bucketCounts[i] = new $util.LongBits(object3.bucketCounts[i].low >>> 0, object3.bucketCounts[i].high >>> 0).toNumber(true); - } - return message; - }; - Buckets.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.bucketCounts = []; - if (options.defaults) - object3.offset = 0; - if (message.offset != null && message.hasOwnProperty("offset")) - object3.offset = message.offset; - if (message.bucketCounts && message.bucketCounts.length) { - object3.bucketCounts = []; - for (var j = 0;j < message.bucketCounts.length; ++j) - if (typeof message.bucketCounts[j] === "number") - object3.bucketCounts[j] = options.longs === String ? String(message.bucketCounts[j]) : message.bucketCounts[j]; - else - object3.bucketCounts[j] = options.longs === String ? $util.Long.prototype.toString.call(message.bucketCounts[j]) : options.longs === Number ? new $util.LongBits(message.bucketCounts[j].low >>> 0, message.bucketCounts[j].high >>> 0).toNumber(true) : message.bucketCounts[j]; - } - return object3; - }; - Buckets.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Buckets.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets"; - }; - return Buckets; - }(); - return ExponentialHistogramDataPoint; - }(); - v1.SummaryDataPoint = function() { - function SummaryDataPoint(properties) { - this.attributes = []; - this.quantileValues = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SummaryDataPoint.prototype.attributes = $util.emptyArray; - SummaryDataPoint.prototype.startTimeUnixNano = null; - SummaryDataPoint.prototype.timeUnixNano = null; - SummaryDataPoint.prototype.count = null; - SummaryDataPoint.prototype.sum = null; - SummaryDataPoint.prototype.quantileValues = $util.emptyArray; - SummaryDataPoint.prototype.flags = null; - SummaryDataPoint.create = function create(properties) { - return new SummaryDataPoint(properties); - }; - SummaryDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.count != null && Object.hasOwnProperty.call(message, "count")) - writer.uint32(33).fixed64(message.count); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - writer.uint32(41).double(message.sum); - if (message.quantileValues != null && message.quantileValues.length) - for (var i = 0;i < message.quantileValues.length; ++i) - $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.encode(message.quantileValues[i], writer.uint32(50).fork()).ldelim(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(58).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(64).uint32(message.flags); - return writer; - }; - SummaryDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - SummaryDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 7: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.count = reader.fixed64(); - break; - } - case 5: { - message.sum = reader.double(); - break; - } - case 6: { - if (!(message.quantileValues && message.quantileValues.length)) - message.quantileValues = []; - message.quantileValues.push($root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.decode(reader, reader.uint32())); - break; - } - case 8: { - message.flags = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SummaryDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - SummaryDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.count != null && message.hasOwnProperty("count")) { - if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) - return "count: integer|Long expected"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - if (typeof message.sum !== "number") - return "sum: number expected"; - } - if (message.quantileValues != null && message.hasOwnProperty("quantileValues")) { - if (!Array.isArray(message.quantileValues)) - return "quantileValues: array expected"; - for (var i = 0;i < message.quantileValues.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.verify(message.quantileValues[i]); - if (error48) - return "quantileValues." + error48; - } - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - return null; - }; - SummaryDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.SummaryDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.count != null) { - if ($util.Long) - (message.count = $util.Long.fromValue(object3.count)).unsigned = false; - else if (typeof object3.count === "string") - message.count = parseInt(object3.count, 10); - else if (typeof object3.count === "number") - message.count = object3.count; - else if (typeof object3.count === "object") - message.count = new $util.LongBits(object3.count.low >>> 0, object3.count.high >>> 0).toNumber(); - } - if (object3.sum != null) - message.sum = Number(object3.sum); - if (object3.quantileValues) { - if (!Array.isArray(object3.quantileValues)) - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.quantileValues: array expected"); - message.quantileValues = []; - for (var i = 0;i < object3.quantileValues.length; ++i) { - if (typeof object3.quantileValues[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.quantileValues: object expected"); - message.quantileValues[i] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.fromObject(object3.quantileValues[i]); - } - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - return message; - }; - SummaryDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.quantileValues = []; - object3.attributes = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.count = options.longs === String ? "0" : 0; - object3.sum = 0; - object3.flags = 0; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.count != null && message.hasOwnProperty("count")) - if (typeof message.count === "number") - object3.count = options.longs === String ? String(message.count) : message.count; - else - object3.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; - if (message.sum != null && message.hasOwnProperty("sum")) - object3.sum = options.json && !isFinite(message.sum) ? String(message.sum) : message.sum; - if (message.quantileValues && message.quantileValues.length) { - object3.quantileValues = []; - for (var j = 0;j < message.quantileValues.length; ++j) - object3.quantileValues[j] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.toObject(message.quantileValues[j], options); - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - SummaryDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SummaryDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.SummaryDataPoint"; - }; - SummaryDataPoint.ValueAtQuantile = function() { - function ValueAtQuantile(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ValueAtQuantile.prototype.quantile = null; - ValueAtQuantile.prototype.value = null; - ValueAtQuantile.create = function create(properties) { - return new ValueAtQuantile(properties); - }; - ValueAtQuantile.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.quantile != null && Object.hasOwnProperty.call(message, "quantile")) - writer.uint32(9).double(message.quantile); - if (message.value != null && Object.hasOwnProperty.call(message, "value")) - writer.uint32(17).double(message.value); - return writer; - }; - ValueAtQuantile.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ValueAtQuantile.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.quantile = reader.double(); - break; - } - case 2: { - message.value = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ValueAtQuantile.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ValueAtQuantile.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.quantile != null && message.hasOwnProperty("quantile")) { - if (typeof message.quantile !== "number") - return "quantile: number expected"; - } - if (message.value != null && message.hasOwnProperty("value")) { - if (typeof message.value !== "number") - return "value: number expected"; - } - return null; - }; - ValueAtQuantile.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile; - if (object3.quantile != null) - message.quantile = Number(object3.quantile); - if (object3.value != null) - message.value = Number(object3.value); - return message; - }; - ValueAtQuantile.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - object3.quantile = 0; - object3.value = 0; - } - if (message.quantile != null && message.hasOwnProperty("quantile")) - object3.quantile = options.json && !isFinite(message.quantile) ? String(message.quantile) : message.quantile; - if (message.value != null && message.hasOwnProperty("value")) - object3.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; - return object3; - }; - ValueAtQuantile.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ValueAtQuantile.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile"; - }; - return ValueAtQuantile; - }(); - return SummaryDataPoint; - }(); - v1.Exemplar = function() { - function Exemplar(properties) { - this.filteredAttributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Exemplar.prototype.filteredAttributes = $util.emptyArray; - Exemplar.prototype.timeUnixNano = null; - Exemplar.prototype.asDouble = null; - Exemplar.prototype.asInt = null; - Exemplar.prototype.spanId = null; - Exemplar.prototype.traceId = null; - var $oneOfFields; - Object.defineProperty(Exemplar.prototype, "value", { - get: $util.oneOfGetter($oneOfFields = ["asDouble", "asInt"]), - set: $util.oneOfSetter($oneOfFields) - }); - Exemplar.create = function create(properties) { - return new Exemplar(properties); - }; - Exemplar.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(17).fixed64(message.timeUnixNano); - if (message.asDouble != null && Object.hasOwnProperty.call(message, "asDouble")) - writer.uint32(25).double(message.asDouble); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(34).bytes(message.spanId); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(42).bytes(message.traceId); - if (message.asInt != null && Object.hasOwnProperty.call(message, "asInt")) - writer.uint32(49).sfixed64(message.asInt); - if (message.filteredAttributes != null && message.filteredAttributes.length) - for (var i = 0;i < message.filteredAttributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.filteredAttributes[i], writer.uint32(58).fork()).ldelim(); - return writer; - }; - Exemplar.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Exemplar.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Exemplar; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 7: { - if (!(message.filteredAttributes && message.filteredAttributes.length)) - message.filteredAttributes = []; - message.filteredAttributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.asDouble = reader.double(); - break; - } - case 6: { - message.asInt = reader.sfixed64(); - break; - } - case 4: { - message.spanId = reader.bytes(); - break; - } - case 5: { - message.traceId = reader.bytes(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Exemplar.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Exemplar.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.filteredAttributes != null && message.hasOwnProperty("filteredAttributes")) { - if (!Array.isArray(message.filteredAttributes)) - return "filteredAttributes: array expected"; - for (var i = 0;i < message.filteredAttributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.filteredAttributes[i]); - if (error48) - return "filteredAttributes." + error48; - } - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - properties.value = 1; - if (typeof message.asDouble !== "number") - return "asDouble: number expected"; - } - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!$util.isInteger(message.asInt) && !(message.asInt && $util.isInteger(message.asInt.low) && $util.isInteger(message.asInt.high))) - return "asInt: integer|Long expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - return null; - }; - Exemplar.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Exemplar) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Exemplar; - if (object3.filteredAttributes) { - if (!Array.isArray(object3.filteredAttributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.Exemplar.filteredAttributes: array expected"); - message.filteredAttributes = []; - for (var i = 0;i < object3.filteredAttributes.length; ++i) { - if (typeof object3.filteredAttributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Exemplar.filteredAttributes: object expected"); - message.filteredAttributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.filteredAttributes[i]); - } - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.asDouble != null) - message.asDouble = Number(object3.asDouble); - if (object3.asInt != null) { - if ($util.Long) - (message.asInt = $util.Long.fromValue(object3.asInt)).unsigned = false; - else if (typeof object3.asInt === "string") - message.asInt = parseInt(object3.asInt, 10); - else if (typeof object3.asInt === "number") - message.asInt = object3.asInt; - else if (typeof object3.asInt === "object") - message.asInt = new $util.LongBits(object3.asInt.low >>> 0, object3.asInt.high >>> 0).toNumber(); - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - return message; - }; - Exemplar.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.filteredAttributes = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - object3.asDouble = options.json && !isFinite(message.asDouble) ? String(message.asDouble) : message.asDouble; - if (options.oneofs) - object3.value = "asDouble"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (typeof message.asInt === "number") - object3.asInt = options.longs === String ? String(message.asInt) : message.asInt; - else - object3.asInt = options.longs === String ? $util.Long.prototype.toString.call(message.asInt) : options.longs === Number ? new $util.LongBits(message.asInt.low >>> 0, message.asInt.high >>> 0).toNumber() : message.asInt; - if (options.oneofs) - object3.value = "asInt"; - } - if (message.filteredAttributes && message.filteredAttributes.length) { - object3.filteredAttributes = []; - for (var j = 0;j < message.filteredAttributes.length; ++j) - object3.filteredAttributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.filteredAttributes[j], options); - } - return object3; - }; - Exemplar.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Exemplar.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Exemplar"; - }; - return Exemplar; - }(); - return v1; - }(); - return metrics; - }(); - proto.logs = function() { - var logs = {}; - logs.v1 = function() { - var v1 = {}; - v1.LogsData = function() { - function LogsData(properties) { - this.resourceLogs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LogsData.prototype.resourceLogs = $util.emptyArray; - LogsData.create = function create(properties) { - return new LogsData(properties); - }; - LogsData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceLogs != null && message.resourceLogs.length) - for (var i = 0;i < message.resourceLogs.length; ++i) - $root.opentelemetry.proto.logs.v1.ResourceLogs.encode(message.resourceLogs[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - LogsData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - LogsData.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.LogsData; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceLogs && message.resourceLogs.length)) - message.resourceLogs = []; - message.resourceLogs.push($root.opentelemetry.proto.logs.v1.ResourceLogs.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - LogsData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - LogsData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceLogs != null && message.hasOwnProperty("resourceLogs")) { - if (!Array.isArray(message.resourceLogs)) - return "resourceLogs: array expected"; - for (var i = 0;i < message.resourceLogs.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.ResourceLogs.verify(message.resourceLogs[i]); - if (error48) - return "resourceLogs." + error48; - } - } - return null; - }; - LogsData.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.LogsData) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.LogsData; - if (object3.resourceLogs) { - if (!Array.isArray(object3.resourceLogs)) - throw TypeError(".opentelemetry.proto.logs.v1.LogsData.resourceLogs: array expected"); - message.resourceLogs = []; - for (var i = 0;i < object3.resourceLogs.length; ++i) { - if (typeof object3.resourceLogs[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.LogsData.resourceLogs: object expected"); - message.resourceLogs[i] = $root.opentelemetry.proto.logs.v1.ResourceLogs.fromObject(object3.resourceLogs[i]); - } - } - return message; - }; - LogsData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceLogs = []; - if (message.resourceLogs && message.resourceLogs.length) { - object3.resourceLogs = []; - for (var j = 0;j < message.resourceLogs.length; ++j) - object3.resourceLogs[j] = $root.opentelemetry.proto.logs.v1.ResourceLogs.toObject(message.resourceLogs[j], options); - } - return object3; - }; - LogsData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LogsData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.LogsData"; - }; - return LogsData; - }(); - v1.ResourceLogs = function() { - function ResourceLogs(properties) { - this.scopeLogs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ResourceLogs.prototype.resource = null; - ResourceLogs.prototype.scopeLogs = $util.emptyArray; - ResourceLogs.prototype.schemaUrl = null; - ResourceLogs.create = function create(properties) { - return new ResourceLogs(properties); - }; - ResourceLogs.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - $root.opentelemetry.proto.resource.v1.Resource.encode(message.resource, writer.uint32(10).fork()).ldelim(); - if (message.scopeLogs != null && message.scopeLogs.length) - for (var i = 0;i < message.scopeLogs.length; ++i) - $root.opentelemetry.proto.logs.v1.ScopeLogs.encode(message.scopeLogs[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ResourceLogs.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ResourceLogs.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.ResourceLogs; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.resource = $root.opentelemetry.proto.resource.v1.Resource.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.scopeLogs && message.scopeLogs.length)) - message.scopeLogs = []; - message.scopeLogs.push($root.opentelemetry.proto.logs.v1.ScopeLogs.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ResourceLogs.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ResourceLogs.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error48 = $root.opentelemetry.proto.resource.v1.Resource.verify(message.resource); - if (error48) - return "resource." + error48; - } - if (message.scopeLogs != null && message.hasOwnProperty("scopeLogs")) { - if (!Array.isArray(message.scopeLogs)) - return "scopeLogs: array expected"; - for (var i = 0;i < message.scopeLogs.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.ScopeLogs.verify(message.scopeLogs[i]); - if (error48) - return "scopeLogs." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ResourceLogs.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.ResourceLogs) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.ResourceLogs; - if (object3.resource != null) { - if (typeof object3.resource !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ResourceLogs.resource: object expected"); - message.resource = $root.opentelemetry.proto.resource.v1.Resource.fromObject(object3.resource); - } - if (object3.scopeLogs) { - if (!Array.isArray(object3.scopeLogs)) - throw TypeError(".opentelemetry.proto.logs.v1.ResourceLogs.scopeLogs: array expected"); - message.scopeLogs = []; - for (var i = 0;i < object3.scopeLogs.length; ++i) { - if (typeof object3.scopeLogs[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ResourceLogs.scopeLogs: object expected"); - message.scopeLogs[i] = $root.opentelemetry.proto.logs.v1.ScopeLogs.fromObject(object3.scopeLogs[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ResourceLogs.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.scopeLogs = []; - if (options.defaults) { - object3.resource = null; - object3.schemaUrl = ""; - } - if (message.resource != null && message.hasOwnProperty("resource")) - object3.resource = $root.opentelemetry.proto.resource.v1.Resource.toObject(message.resource, options); - if (message.scopeLogs && message.scopeLogs.length) { - object3.scopeLogs = []; - for (var j = 0;j < message.scopeLogs.length; ++j) - object3.scopeLogs[j] = $root.opentelemetry.proto.logs.v1.ScopeLogs.toObject(message.scopeLogs[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ResourceLogs.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ResourceLogs.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.ResourceLogs"; - }; - return ResourceLogs; - }(); - v1.ScopeLogs = function() { - function ScopeLogs(properties) { - this.logRecords = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ScopeLogs.prototype.scope = null; - ScopeLogs.prototype.logRecords = $util.emptyArray; - ScopeLogs.prototype.schemaUrl = null; - ScopeLogs.create = function create(properties) { - return new ScopeLogs(properties); - }; - ScopeLogs.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.scope != null && Object.hasOwnProperty.call(message, "scope")) - $root.opentelemetry.proto.common.v1.InstrumentationScope.encode(message.scope, writer.uint32(10).fork()).ldelim(); - if (message.logRecords != null && message.logRecords.length) - for (var i = 0;i < message.logRecords.length; ++i) - $root.opentelemetry.proto.logs.v1.LogRecord.encode(message.logRecords[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ScopeLogs.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ScopeLogs.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.ScopeLogs; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.logRecords && message.logRecords.length)) - message.logRecords = []; - message.logRecords.push($root.opentelemetry.proto.logs.v1.LogRecord.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ScopeLogs.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ScopeLogs.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.scope != null && message.hasOwnProperty("scope")) { - var error48 = $root.opentelemetry.proto.common.v1.InstrumentationScope.verify(message.scope); - if (error48) - return "scope." + error48; - } - if (message.logRecords != null && message.hasOwnProperty("logRecords")) { - if (!Array.isArray(message.logRecords)) - return "logRecords: array expected"; - for (var i = 0;i < message.logRecords.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.LogRecord.verify(message.logRecords[i]); - if (error48) - return "logRecords." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ScopeLogs.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.ScopeLogs) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.ScopeLogs; - if (object3.scope != null) { - if (typeof object3.scope !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ScopeLogs.scope: object expected"); - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.fromObject(object3.scope); - } - if (object3.logRecords) { - if (!Array.isArray(object3.logRecords)) - throw TypeError(".opentelemetry.proto.logs.v1.ScopeLogs.logRecords: array expected"); - message.logRecords = []; - for (var i = 0;i < object3.logRecords.length; ++i) { - if (typeof object3.logRecords[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ScopeLogs.logRecords: object expected"); - message.logRecords[i] = $root.opentelemetry.proto.logs.v1.LogRecord.fromObject(object3.logRecords[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ScopeLogs.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.logRecords = []; - if (options.defaults) { - object3.scope = null; - object3.schemaUrl = ""; - } - if (message.scope != null && message.hasOwnProperty("scope")) - object3.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.toObject(message.scope, options); - if (message.logRecords && message.logRecords.length) { - object3.logRecords = []; - for (var j = 0;j < message.logRecords.length; ++j) - object3.logRecords[j] = $root.opentelemetry.proto.logs.v1.LogRecord.toObject(message.logRecords[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ScopeLogs.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ScopeLogs.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.ScopeLogs"; - }; - return ScopeLogs; - }(); - v1.SeverityNumber = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "SEVERITY_NUMBER_UNSPECIFIED"] = 0; - values[valuesById[1] = "SEVERITY_NUMBER_TRACE"] = 1; - values[valuesById[2] = "SEVERITY_NUMBER_TRACE2"] = 2; - values[valuesById[3] = "SEVERITY_NUMBER_TRACE3"] = 3; - values[valuesById[4] = "SEVERITY_NUMBER_TRACE4"] = 4; - values[valuesById[5] = "SEVERITY_NUMBER_DEBUG"] = 5; - values[valuesById[6] = "SEVERITY_NUMBER_DEBUG2"] = 6; - values[valuesById[7] = "SEVERITY_NUMBER_DEBUG3"] = 7; - values[valuesById[8] = "SEVERITY_NUMBER_DEBUG4"] = 8; - values[valuesById[9] = "SEVERITY_NUMBER_INFO"] = 9; - values[valuesById[10] = "SEVERITY_NUMBER_INFO2"] = 10; - values[valuesById[11] = "SEVERITY_NUMBER_INFO3"] = 11; - values[valuesById[12] = "SEVERITY_NUMBER_INFO4"] = 12; - values[valuesById[13] = "SEVERITY_NUMBER_WARN"] = 13; - values[valuesById[14] = "SEVERITY_NUMBER_WARN2"] = 14; - values[valuesById[15] = "SEVERITY_NUMBER_WARN3"] = 15; - values[valuesById[16] = "SEVERITY_NUMBER_WARN4"] = 16; - values[valuesById[17] = "SEVERITY_NUMBER_ERROR"] = 17; - values[valuesById[18] = "SEVERITY_NUMBER_ERROR2"] = 18; - values[valuesById[19] = "SEVERITY_NUMBER_ERROR3"] = 19; - values[valuesById[20] = "SEVERITY_NUMBER_ERROR4"] = 20; - values[valuesById[21] = "SEVERITY_NUMBER_FATAL"] = 21; - values[valuesById[22] = "SEVERITY_NUMBER_FATAL2"] = 22; - values[valuesById[23] = "SEVERITY_NUMBER_FATAL3"] = 23; - values[valuesById[24] = "SEVERITY_NUMBER_FATAL4"] = 24; - return values; - }(); - v1.LogRecordFlags = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "LOG_RECORD_FLAGS_DO_NOT_USE"] = 0; - values[valuesById[255] = "LOG_RECORD_FLAGS_TRACE_FLAGS_MASK"] = 255; - return values; - }(); - v1.LogRecord = function() { - function LogRecord(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LogRecord.prototype.timeUnixNano = null; - LogRecord.prototype.observedTimeUnixNano = null; - LogRecord.prototype.severityNumber = null; - LogRecord.prototype.severityText = null; - LogRecord.prototype.body = null; - LogRecord.prototype.attributes = $util.emptyArray; - LogRecord.prototype.droppedAttributesCount = null; - LogRecord.prototype.flags = null; - LogRecord.prototype.traceId = null; - LogRecord.prototype.spanId = null; - LogRecord.prototype.eventName = null; - LogRecord.create = function create(properties) { - return new LogRecord(properties); - }; - LogRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(9).fixed64(message.timeUnixNano); - if (message.severityNumber != null && Object.hasOwnProperty.call(message, "severityNumber")) - writer.uint32(16).int32(message.severityNumber); - if (message.severityText != null && Object.hasOwnProperty.call(message, "severityText")) - writer.uint32(26).string(message.severityText); - if (message.body != null && Object.hasOwnProperty.call(message, "body")) - $root.opentelemetry.proto.common.v1.AnyValue.encode(message.body, writer.uint32(42).fork()).ldelim(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(50).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(56).uint32(message.droppedAttributesCount); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(69).fixed32(message.flags); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(74).bytes(message.traceId); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(82).bytes(message.spanId); - if (message.observedTimeUnixNano != null && Object.hasOwnProperty.call(message, "observedTimeUnixNano")) - writer.uint32(89).fixed64(message.observedTimeUnixNano); - if (message.eventName != null && Object.hasOwnProperty.call(message, "eventName")) - writer.uint32(98).string(message.eventName); - return writer; - }; - LogRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - LogRecord.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.LogRecord; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 11: { - message.observedTimeUnixNano = reader.fixed64(); - break; - } - case 2: { - message.severityNumber = reader.int32(); - break; - } - case 3: { - message.severityText = reader.string(); - break; - } - case 5: { - message.body = $root.opentelemetry.proto.common.v1.AnyValue.decode(reader, reader.uint32()); - break; - } - case 6: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 7: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 8: { - message.flags = reader.fixed32(); - break; - } - case 9: { - message.traceId = reader.bytes(); - break; - } - case 10: { - message.spanId = reader.bytes(); - break; - } - case 12: { - message.eventName = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - LogRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - LogRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.observedTimeUnixNano != null && message.hasOwnProperty("observedTimeUnixNano")) { - if (!$util.isInteger(message.observedTimeUnixNano) && !(message.observedTimeUnixNano && $util.isInteger(message.observedTimeUnixNano.low) && $util.isInteger(message.observedTimeUnixNano.high))) - return "observedTimeUnixNano: integer|Long expected"; - } - if (message.severityNumber != null && message.hasOwnProperty("severityNumber")) - switch (message.severityNumber) { - default: - return "severityNumber: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - break; - } - if (message.severityText != null && message.hasOwnProperty("severityText")) { - if (!$util.isString(message.severityText)) - return "severityText: string expected"; - } - if (message.body != null && message.hasOwnProperty("body")) { - var error48 = $root.opentelemetry.proto.common.v1.AnyValue.verify(message.body); - if (error48) - return "body." + error48; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.eventName != null && message.hasOwnProperty("eventName")) { - if (!$util.isString(message.eventName)) - return "eventName: string expected"; - } - return null; - }; - LogRecord.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.LogRecord) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.LogRecord; - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.observedTimeUnixNano != null) { - if ($util.Long) - (message.observedTimeUnixNano = $util.Long.fromValue(object3.observedTimeUnixNano)).unsigned = false; - else if (typeof object3.observedTimeUnixNano === "string") - message.observedTimeUnixNano = parseInt(object3.observedTimeUnixNano, 10); - else if (typeof object3.observedTimeUnixNano === "number") - message.observedTimeUnixNano = object3.observedTimeUnixNano; - else if (typeof object3.observedTimeUnixNano === "object") - message.observedTimeUnixNano = new $util.LongBits(object3.observedTimeUnixNano.low >>> 0, object3.observedTimeUnixNano.high >>> 0).toNumber(); - } - switch (object3.severityNumber) { - default: - if (typeof object3.severityNumber === "number") { - message.severityNumber = object3.severityNumber; - break; - } - break; - case "SEVERITY_NUMBER_UNSPECIFIED": - case 0: - message.severityNumber = 0; - break; - case "SEVERITY_NUMBER_TRACE": - case 1: - message.severityNumber = 1; - break; - case "SEVERITY_NUMBER_TRACE2": - case 2: - message.severityNumber = 2; - break; - case "SEVERITY_NUMBER_TRACE3": - case 3: - message.severityNumber = 3; - break; - case "SEVERITY_NUMBER_TRACE4": - case 4: - message.severityNumber = 4; - break; - case "SEVERITY_NUMBER_DEBUG": - case 5: - message.severityNumber = 5; - break; - case "SEVERITY_NUMBER_DEBUG2": - case 6: - message.severityNumber = 6; - break; - case "SEVERITY_NUMBER_DEBUG3": - case 7: - message.severityNumber = 7; - break; - case "SEVERITY_NUMBER_DEBUG4": - case 8: - message.severityNumber = 8; - break; - case "SEVERITY_NUMBER_INFO": - case 9: - message.severityNumber = 9; - break; - case "SEVERITY_NUMBER_INFO2": - case 10: - message.severityNumber = 10; - break; - case "SEVERITY_NUMBER_INFO3": - case 11: - message.severityNumber = 11; - break; - case "SEVERITY_NUMBER_INFO4": - case 12: - message.severityNumber = 12; - break; - case "SEVERITY_NUMBER_WARN": - case 13: - message.severityNumber = 13; - break; - case "SEVERITY_NUMBER_WARN2": - case 14: - message.severityNumber = 14; - break; - case "SEVERITY_NUMBER_WARN3": - case 15: - message.severityNumber = 15; - break; - case "SEVERITY_NUMBER_WARN4": - case 16: - message.severityNumber = 16; - break; - case "SEVERITY_NUMBER_ERROR": - case 17: - message.severityNumber = 17; - break; - case "SEVERITY_NUMBER_ERROR2": - case 18: - message.severityNumber = 18; - break; - case "SEVERITY_NUMBER_ERROR3": - case 19: - message.severityNumber = 19; - break; - case "SEVERITY_NUMBER_ERROR4": - case 20: - message.severityNumber = 20; - break; - case "SEVERITY_NUMBER_FATAL": - case 21: - message.severityNumber = 21; - break; - case "SEVERITY_NUMBER_FATAL2": - case 22: - message.severityNumber = 22; - break; - case "SEVERITY_NUMBER_FATAL3": - case 23: - message.severityNumber = 23; - break; - case "SEVERITY_NUMBER_FATAL4": - case 24: - message.severityNumber = 24; - break; - } - if (object3.severityText != null) - message.severityText = String(object3.severityText); - if (object3.body != null) { - if (typeof object3.body !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.LogRecord.body: object expected"); - message.body = $root.opentelemetry.proto.common.v1.AnyValue.fromObject(object3.body); - } - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.logs.v1.LogRecord.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.LogRecord.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.eventName != null) - message.eventName = String(object3.eventName); - return message; - }; - LogRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - object3.severityNumber = options.enums === String ? "SEVERITY_NUMBER_UNSPECIFIED" : 0; - object3.severityText = ""; - object3.body = null; - object3.droppedAttributesCount = 0; - object3.flags = 0; - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.observedTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.observedTimeUnixNano = options.longs === String ? "0" : 0; - object3.eventName = ""; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.severityNumber != null && message.hasOwnProperty("severityNumber")) - object3.severityNumber = options.enums === String ? $root.opentelemetry.proto.logs.v1.SeverityNumber[message.severityNumber] === undefined ? message.severityNumber : $root.opentelemetry.proto.logs.v1.SeverityNumber[message.severityNumber] : message.severityNumber; - if (message.severityText != null && message.hasOwnProperty("severityText")) - object3.severityText = message.severityText; - if (message.body != null && message.hasOwnProperty("body")) - object3.body = $root.opentelemetry.proto.common.v1.AnyValue.toObject(message.body, options); - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.observedTimeUnixNano != null && message.hasOwnProperty("observedTimeUnixNano")) - if (typeof message.observedTimeUnixNano === "number") - object3.observedTimeUnixNano = options.longs === String ? String(message.observedTimeUnixNano) : message.observedTimeUnixNano; - else - object3.observedTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.observedTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.observedTimeUnixNano.low >>> 0, message.observedTimeUnixNano.high >>> 0).toNumber() : message.observedTimeUnixNano; - if (message.eventName != null && message.hasOwnProperty("eventName")) - object3.eventName = message.eventName; - return object3; - }; - LogRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LogRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.LogRecord"; - }; - return LogRecord; - }(); - return v1; - }(); - return logs; - }(); - return proto; - }(); - return opentelemetry; - }(); - module.exports = $root; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/common/hex-to-binary.js -var require_hex_to_binary = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hexToBinary = undefined; - function intValue(charCode) { - if (charCode >= 48 && charCode <= 57) { - return charCode - 48; - } - if (charCode >= 97 && charCode <= 102) { - return charCode - 87; - } - return charCode - 55; - } - function hexToBinary(hexStr) { - const buf = new Uint8Array(hexStr.length / 2); - let offset = 0; - for (let i = 0;i < hexStr.length; i += 2) { - const hi = intValue(hexStr.charCodeAt(i)); - const lo = intValue(hexStr.charCodeAt(i + 1)); - buf[offset++] = hi << 4 | lo; - } - return buf; - } - exports.hexToBinary = hexToBinary; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/common/utils.js -var require_utils41 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOtlpEncoder = exports.encodeAsString = exports.encodeAsLongBits = exports.toLongBits = exports.hrTimeToNanos = undefined; - var core_1 = require_src7(); - var hex_to_binary_1 = require_hex_to_binary(); - function hrTimeToNanos(hrTime) { - const NANOSECONDS = BigInt(1e9); - return BigInt(Math.trunc(hrTime[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime[1])); - } - exports.hrTimeToNanos = hrTimeToNanos; - function toLongBits(value) { - const low = Number(BigInt.asUintN(32, value)); - const high = Number(BigInt.asUintN(32, value >> BigInt(32))); - return { low, high }; - } - exports.toLongBits = toLongBits; - function encodeAsLongBits(hrTime) { - const nanos = hrTimeToNanos(hrTime); - return toLongBits(nanos); - } - exports.encodeAsLongBits = encodeAsLongBits; - function encodeAsString(hrTime) { - const nanos = hrTimeToNanos(hrTime); - return nanos.toString(); - } - exports.encodeAsString = encodeAsString; - var encodeTimestamp = typeof BigInt !== "undefined" ? encodeAsString : core_1.hrTimeToNanoseconds; - function identity(value) { - return value; - } - function optionalHexToBinary(str) { - if (str === undefined) - return; - return (0, hex_to_binary_1.hexToBinary)(str); - } - var DEFAULT_ENCODER = { - encodeHrTime: encodeAsLongBits, - encodeSpanContext: hex_to_binary_1.hexToBinary, - encodeOptionalSpanContext: optionalHexToBinary - }; - function getOtlpEncoder(options) { - if (options === undefined) { - return DEFAULT_ENCODER; - } - const useLongBits = options.useLongBits ?? true; - const useHex = options.useHex ?? false; - return { - encodeHrTime: useLongBits ? encodeAsLongBits : encodeTimestamp, - encodeSpanContext: useHex ? identity : hex_to_binary_1.hexToBinary, - encodeOptionalSpanContext: useHex ? identity : optionalHexToBinary - }; - } - exports.getOtlpEncoder = getOtlpEncoder; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/common/internal.js -var require_internal = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toAnyValue = exports.toKeyValue = exports.toAttributes = exports.createInstrumentationScope = exports.createResource = undefined; - function createResource(resource) { - const result = { - attributes: toAttributes(resource.attributes), - droppedAttributesCount: 0 - }; - const schemaUrl = resource.schemaUrl; - if (schemaUrl && schemaUrl !== "") - result.schemaUrl = schemaUrl; - return result; - } - exports.createResource = createResource; - function createInstrumentationScope(scope) { - return { - name: scope.name, - version: scope.version - }; - } - exports.createInstrumentationScope = createInstrumentationScope; - function toAttributes(attributes) { - return Object.keys(attributes).map((key) => toKeyValue(key, attributes[key])); - } - exports.toAttributes = toAttributes; - function toKeyValue(key, value) { - return { - key, - value: toAnyValue(value) - }; - } - exports.toKeyValue = toKeyValue; - function toAnyValue(value) { - const t = typeof value; - if (t === "string") - return { stringValue: value }; - if (t === "number") { - if (!Number.isInteger(value)) - return { doubleValue: value }; - return { intValue: value }; - } - if (t === "boolean") - return { boolValue: value }; - if (value instanceof Uint8Array) - return { bytesValue: value }; - if (Array.isArray(value)) - return { arrayValue: { values: value.map(toAnyValue) } }; - if (t === "object" && value != null) - return { - kvlistValue: { - values: Object.entries(value).map(([k, v]) => toKeyValue(k, v)) - } - }; - return {}; - } - exports.toAnyValue = toAnyValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/internal.js -var require_internal2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toLogAttributes = exports.createExportLogsServiceRequest = undefined; - var utils_1 = require_utils41(); - var internal_1 = require_internal(); - function createExportLogsServiceRequest(logRecords, options) { - const encoder2 = (0, utils_1.getOtlpEncoder)(options); - return { - resourceLogs: logRecordsToResourceLogs(logRecords, encoder2) - }; - } - exports.createExportLogsServiceRequest = createExportLogsServiceRequest; - function createResourceMap(logRecords) { - const resourceMap = new Map; - for (const record3 of logRecords) { - const { resource, instrumentationScope: { name, version: version2 = "", schemaUrl = "" } } = record3; - let ismMap = resourceMap.get(resource); - if (!ismMap) { - ismMap = new Map; - resourceMap.set(resource, ismMap); - } - const ismKey = `${name}@${version2}:${schemaUrl}`; - let records = ismMap.get(ismKey); - if (!records) { - records = []; - ismMap.set(ismKey, records); - } - records.push(record3); - } - return resourceMap; - } - function logRecordsToResourceLogs(logRecords, encoder2) { - const resourceMap = createResourceMap(logRecords); - return Array.from(resourceMap, ([resource, ismMap]) => { - const processedResource = (0, internal_1.createResource)(resource); - return { - resource: processedResource, - scopeLogs: Array.from(ismMap, ([, scopeLogs]) => { - return { - scope: (0, internal_1.createInstrumentationScope)(scopeLogs[0].instrumentationScope), - logRecords: scopeLogs.map((log) => toLogRecord(log, encoder2)), - schemaUrl: scopeLogs[0].instrumentationScope.schemaUrl - }; - }), - schemaUrl: processedResource.schemaUrl - }; - }); - } - function toLogRecord(log, encoder2) { - return { - timeUnixNano: encoder2.encodeHrTime(log.hrTime), - observedTimeUnixNano: encoder2.encodeHrTime(log.hrTimeObserved), - severityNumber: toSeverityNumber(log.severityNumber), - severityText: log.severityText, - body: (0, internal_1.toAnyValue)(log.body), - eventName: log.eventName, - attributes: toLogAttributes(log.attributes), - droppedAttributesCount: log.droppedAttributesCount, - flags: log.spanContext?.traceFlags, - traceId: encoder2.encodeOptionalSpanContext(log.spanContext?.traceId), - spanId: encoder2.encodeOptionalSpanContext(log.spanContext?.spanId) - }; - } - function toSeverityNumber(severityNumber) { - return severityNumber; - } - function toLogAttributes(attributes) { - return Object.keys(attributes).map((key) => (0, internal_1.toKeyValue)(key, attributes[key])); - } - exports.toLogAttributes = toLogAttributes; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs.js -var require_logs2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufLogsSerializer = undefined; - var root = require_root(); - var internal_1 = require_internal2(); - var logsResponseType = root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; - var logsRequestType = root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; - exports.ProtobufLogsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportLogsServiceRequest)(arg); - return logsRequestType.encode(request).finish(); - }, - deserializeResponse: (arg) => { - return logsResponseType.decode(arg); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/index.js -var require_protobuf = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufLogsSerializer = undefined; - var logs_1 = require_logs2(); - Object.defineProperty(exports, "ProtobufLogsSerializer", { enumerable: true, get: function() { - return logs_1.ProtobufLogsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.js -var require_AggregationTemporality = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AggregationTemporality = undefined; - var AggregationTemporality; - (function(AggregationTemporality2) { - AggregationTemporality2[AggregationTemporality2["DELTA"] = 0] = "DELTA"; - AggregationTemporality2[AggregationTemporality2["CUMULATIVE"] = 1] = "CUMULATIVE"; - })(AggregationTemporality = exports.AggregationTemporality || (exports.AggregationTemporality = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.js -var require_MetricData = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DataPointType = exports.InstrumentType = undefined; - var InstrumentType; - (function(InstrumentType2) { - InstrumentType2["COUNTER"] = "COUNTER"; - InstrumentType2["GAUGE"] = "GAUGE"; - InstrumentType2["HISTOGRAM"] = "HISTOGRAM"; - InstrumentType2["UP_DOWN_COUNTER"] = "UP_DOWN_COUNTER"; - InstrumentType2["OBSERVABLE_COUNTER"] = "OBSERVABLE_COUNTER"; - InstrumentType2["OBSERVABLE_GAUGE"] = "OBSERVABLE_GAUGE"; - InstrumentType2["OBSERVABLE_UP_DOWN_COUNTER"] = "OBSERVABLE_UP_DOWN_COUNTER"; - })(InstrumentType = exports.InstrumentType || (exports.InstrumentType = {})); - var DataPointType; - (function(DataPointType2) { - DataPointType2[DataPointType2["HISTOGRAM"] = 0] = "HISTOGRAM"; - DataPointType2[DataPointType2["EXPONENTIAL_HISTOGRAM"] = 1] = "EXPONENTIAL_HISTOGRAM"; - DataPointType2[DataPointType2["GAUGE"] = 2] = "GAUGE"; - DataPointType2[DataPointType2["SUM"] = 3] = "SUM"; - })(DataPointType = exports.DataPointType || (exports.DataPointType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/utils.js -var require_utils42 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.equalsCaseInsensitive = exports.binarySearchUB = exports.setEquals = exports.FlatMap = exports.isPromiseAllSettledRejectionResult = exports.PromiseAllSettled = exports.callWithTimeout = exports.TimeoutError = exports.instrumentationScopeId = exports.hashAttributes = exports.isNotNullish = undefined; - function isNotNullish(item) { - return item !== undefined && item !== null; - } - exports.isNotNullish = isNotNullish; - function hashAttributes(attributes) { - let keys = Object.keys(attributes); - if (keys.length === 0) - return ""; - keys = keys.sort(); - return JSON.stringify(keys.map((key) => [key, attributes[key]])); - } - exports.hashAttributes = hashAttributes; - function instrumentationScopeId(instrumentationScope) { - return `${instrumentationScope.name}:${instrumentationScope.version ?? ""}:${instrumentationScope.schemaUrl ?? ""}`; - } - exports.instrumentationScopeId = instrumentationScopeId; - - class TimeoutError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, TimeoutError.prototype); - } - } - exports.TimeoutError = TimeoutError; - function callWithTimeout(promise2, timeout) { - let timeoutHandle; - const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) { - timeoutHandle = setTimeout(function timeoutHandler() { - reject(new TimeoutError("Operation timed out.")); - }, timeout); - }); - return Promise.race([promise2, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle); - return result; - }, (reason) => { - clearTimeout(timeoutHandle); - throw reason; - }); - } - exports.callWithTimeout = callWithTimeout; - async function PromiseAllSettled(promises) { - return Promise.all(promises.map(async (p) => { - try { - const ret = await p; - return { - status: "fulfilled", - value: ret - }; - } catch (e) { - return { - status: "rejected", - reason: e - }; - } - })); - } - exports.PromiseAllSettled = PromiseAllSettled; - function isPromiseAllSettledRejectionResult(it) { - return it.status === "rejected"; - } - exports.isPromiseAllSettledRejectionResult = isPromiseAllSettledRejectionResult; - function FlatMap(arr, fn) { - const result = []; - arr.forEach((it) => { - result.push(...fn(it)); - }); - return result; - } - exports.FlatMap = FlatMap; - function setEquals(lhs, rhs) { - if (lhs.size !== rhs.size) { - return false; - } - for (const item of lhs) { - if (!rhs.has(item)) { - return false; - } - } - return true; - } - exports.setEquals = setEquals; - function binarySearchUB(arr, value) { - let lo = 0; - let hi = arr.length - 1; - let ret = arr.length; - while (hi >= lo) { - const mid = lo + Math.trunc((hi - lo) / 2); - if (arr[mid] < value) { - lo = mid + 1; - } else { - ret = mid; - hi = mid - 1; - } - } - return ret; - } - exports.binarySearchUB = binarySearchUB; - function equalsCaseInsensitive(lhs, rhs) { - return lhs.toLowerCase() === rhs.toLowerCase(); - } - exports.equalsCaseInsensitive = equalsCaseInsensitive; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.js -var require_types11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AggregatorKind = undefined; - var AggregatorKind; - (function(AggregatorKind2) { - AggregatorKind2[AggregatorKind2["DROP"] = 0] = "DROP"; - AggregatorKind2[AggregatorKind2["SUM"] = 1] = "SUM"; - AggregatorKind2[AggregatorKind2["LAST_VALUE"] = 2] = "LAST_VALUE"; - AggregatorKind2[AggregatorKind2["HISTOGRAM"] = 3] = "HISTOGRAM"; - AggregatorKind2[AggregatorKind2["EXPONENTIAL_HISTOGRAM"] = 4] = "EXPONENTIAL_HISTOGRAM"; - })(AggregatorKind = exports.AggregatorKind || (exports.AggregatorKind = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.js -var require_Drop = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DropAggregator = undefined; - var types_1 = require_types11(); - - class DropAggregator { - kind = types_1.AggregatorKind.DROP; - createAccumulation() { - return; - } - merge(_previous, _delta) { - return; - } - diff(_previous, _current) { - return; - } - toMetricData(_descriptor, _aggregationTemporality, _accumulationByAttributes, _endTime) { - return; - } - } - exports.DropAggregator = DropAggregator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.js -var require_Histogram = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HistogramAggregator = exports.HistogramAccumulation = undefined; - var types_1 = require_types11(); - var MetricData_1 = require_MetricData(); - var utils_1 = require_utils42(); - function createNewEmptyCheckpoint(boundaries) { - const counts = boundaries.map(() => 0); - counts.push(0); - return { - buckets: { - boundaries, - counts - }, - sum: 0, - count: 0, - hasMinMax: false, - min: Infinity, - max: -Infinity - }; - } - - class HistogramAccumulation { - startTime; - _boundaries; - _recordMinMax; - _current; - constructor(startTime, _boundaries, _recordMinMax = true, _current = createNewEmptyCheckpoint(_boundaries)) { - this.startTime = startTime; - this._boundaries = _boundaries; - this._recordMinMax = _recordMinMax; - this._current = _current; - } - record(value) { - if (Number.isNaN(value)) { - return; - } - this._current.count += 1; - this._current.sum += value; - if (this._recordMinMax) { - this._current.min = Math.min(value, this._current.min); - this._current.max = Math.max(value, this._current.max); - this._current.hasMinMax = true; - } - const idx = (0, utils_1.binarySearchUB)(this._boundaries, value); - this._current.buckets.counts[idx] += 1; - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } - } - exports.HistogramAccumulation = HistogramAccumulation; - - class HistogramAggregator { - _boundaries; - _recordMinMax; - kind = types_1.AggregatorKind.HISTOGRAM; - constructor(_boundaries, _recordMinMax) { - this._boundaries = _boundaries; - this._recordMinMax = _recordMinMax; - } - createAccumulation(startTime) { - return new HistogramAccumulation(startTime, this._boundaries, this._recordMinMax); - } - merge(previous, delta) { - const previousValue = previous.toPointValue(); - const deltaValue = delta.toPointValue(); - const previousCounts = previousValue.buckets.counts; - const deltaCounts = deltaValue.buckets.counts; - const mergedCounts = new Array(previousCounts.length); - for (let idx = 0;idx < previousCounts.length; idx++) { - mergedCounts[idx] = previousCounts[idx] + deltaCounts[idx]; - } - let min = Infinity; - let max = -Infinity; - if (this._recordMinMax) { - if (previousValue.hasMinMax && deltaValue.hasMinMax) { - min = Math.min(previousValue.min, deltaValue.min); - max = Math.max(previousValue.max, deltaValue.max); - } else if (previousValue.hasMinMax) { - min = previousValue.min; - max = previousValue.max; - } else if (deltaValue.hasMinMax) { - min = deltaValue.min; - max = deltaValue.max; - } - } - return new HistogramAccumulation(previous.startTime, previousValue.buckets.boundaries, this._recordMinMax, { - buckets: { - boundaries: previousValue.buckets.boundaries, - counts: mergedCounts - }, - count: previousValue.count + deltaValue.count, - sum: previousValue.sum + deltaValue.sum, - hasMinMax: this._recordMinMax && (previousValue.hasMinMax || deltaValue.hasMinMax), - min, - max - }); - } - diff(previous, current) { - const previousValue = previous.toPointValue(); - const currentValue = current.toPointValue(); - const previousCounts = previousValue.buckets.counts; - const currentCounts = currentValue.buckets.counts; - const diffedCounts = new Array(previousCounts.length); - for (let idx = 0;idx < previousCounts.length; idx++) { - diffedCounts[idx] = currentCounts[idx] - previousCounts[idx]; - } - return new HistogramAccumulation(current.startTime, previousValue.buckets.boundaries, this._recordMinMax, { - buckets: { - boundaries: previousValue.buckets.boundaries, - counts: diffedCounts - }, - count: currentValue.count - previousValue.count, - sum: currentValue.sum - previousValue.sum, - hasMinMax: false, - min: Infinity, - max: -Infinity - }); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.HISTOGRAM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - const pointValue = accumulation.toPointValue(); - const allowsNegativeValues = descriptor.type === MetricData_1.InstrumentType.GAUGE || descriptor.type === MetricData_1.InstrumentType.UP_DOWN_COUNTER || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_GAUGE || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER; - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: { - min: pointValue.hasMinMax ? pointValue.min : undefined, - max: pointValue.hasMinMax ? pointValue.max : undefined, - sum: !allowsNegativeValues ? pointValue.sum : undefined, - buckets: pointValue.buckets, - count: pointValue.count - } - }; - }) - }; - } - } - exports.HistogramAggregator = HistogramAggregator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/Buckets.js -var require_Buckets = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Buckets = undefined; - - class Buckets { - backing; - indexBase; - indexStart; - indexEnd; - constructor(backing = new BucketsBacking, indexBase = 0, indexStart = 0, indexEnd = 0) { - this.backing = backing; - this.indexBase = indexBase; - this.indexStart = indexStart; - this.indexEnd = indexEnd; - } - get offset() { - return this.indexStart; - } - get length() { - if (this.backing.length === 0) { - return 0; - } - if (this.indexEnd === this.indexStart && this.at(0) === 0) { - return 0; - } - return this.indexEnd - this.indexStart + 1; - } - counts() { - return Array.from({ length: this.length }, (_, i) => this.at(i)); - } - at(position) { - const bias = this.indexBase - this.indexStart; - if (position < bias) { - position += this.backing.length; - } - position -= bias; - return this.backing.countAt(position); - } - incrementBucket(bucketIndex, increment) { - this.backing.increment(bucketIndex, increment); - } - decrementBucket(bucketIndex, decrement) { - this.backing.decrement(bucketIndex, decrement); - } - trim() { - for (let i = 0;i < this.length; i++) { - if (this.at(i) !== 0) { - this.indexStart += i; - break; - } else if (i === this.length - 1) { - this.indexStart = this.indexEnd = this.indexBase = 0; - return; - } - } - for (let i = this.length - 1;i >= 0; i--) { - if (this.at(i) !== 0) { - this.indexEnd -= this.length - i - 1; - break; - } - } - this._rotate(); - } - downscale(by) { - this._rotate(); - const size = 1 + this.indexEnd - this.indexStart; - const each = 1 << by; - let inpos = 0; - let outpos = 0; - for (let pos = this.indexStart;pos <= this.indexEnd; ) { - let mod2 = pos % each; - if (mod2 < 0) { - mod2 += each; - } - for (let i = mod2;i < each && inpos < size; i++) { - this._relocateBucket(outpos, inpos); - inpos++; - pos++; - } - outpos++; - } - this.indexStart >>= by; - this.indexEnd >>= by; - this.indexBase = this.indexStart; - } - clone() { - return new Buckets(this.backing.clone(), this.indexBase, this.indexStart, this.indexEnd); - } - _rotate() { - const bias = this.indexBase - this.indexStart; - if (bias === 0) { - return; - } else if (bias > 0) { - this.backing.reverse(0, this.backing.length); - this.backing.reverse(0, bias); - this.backing.reverse(bias, this.backing.length); - } else { - this.backing.reverse(0, this.backing.length); - this.backing.reverse(0, this.backing.length + bias); - } - this.indexBase = this.indexStart; - } - _relocateBucket(dest, src) { - if (dest === src) { - return; - } - this.incrementBucket(dest, this.backing.emptyBucket(src)); - } - } - exports.Buckets = Buckets; - - class BucketsBacking { - _counts; - constructor(_counts = [0]) { - this._counts = _counts; - } - get length() { - return this._counts.length; - } - countAt(pos) { - return this._counts[pos]; - } - growTo(newSize, oldPositiveLimit, newPositiveLimit) { - const tmp = new Array(newSize).fill(0); - tmp.splice(newPositiveLimit, this._counts.length - oldPositiveLimit, ...this._counts.slice(oldPositiveLimit)); - tmp.splice(0, oldPositiveLimit, ...this._counts.slice(0, oldPositiveLimit)); - this._counts = tmp; - } - reverse(from, limit) { - const num = Math.floor((from + limit) / 2) - from; - for (let i = 0;i < num; i++) { - const tmp = this._counts[from + i]; - this._counts[from + i] = this._counts[limit - i - 1]; - this._counts[limit - i - 1] = tmp; - } - } - emptyBucket(src) { - const tmp = this._counts[src]; - this._counts[src] = 0; - return tmp; - } - increment(bucketIndex, increment) { - this._counts[bucketIndex] += increment; - } - decrement(bucketIndex, decrement) { - if (this._counts[bucketIndex] >= decrement) { - this._counts[bucketIndex] -= decrement; - } else { - this._counts[bucketIndex] = 0; - } - } - clone() { - return new BucketsBacking([...this._counts]); - } - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ieee754.js -var require_ieee754 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSignificand = exports.getNormalBase2 = exports.MIN_VALUE = exports.MAX_NORMAL_EXPONENT = exports.MIN_NORMAL_EXPONENT = exports.SIGNIFICAND_WIDTH = undefined; - exports.SIGNIFICAND_WIDTH = 52; - var EXPONENT_MASK = 2146435072; - var SIGNIFICAND_MASK = 1048575; - var EXPONENT_BIAS = 1023; - exports.MIN_NORMAL_EXPONENT = -EXPONENT_BIAS + 1; - exports.MAX_NORMAL_EXPONENT = EXPONENT_BIAS; - exports.MIN_VALUE = Math.pow(2, -1022); - function getNormalBase2(value) { - const dv = new DataView(new ArrayBuffer(8)); - dv.setFloat64(0, value); - const hiBits = dv.getUint32(0); - const expBits = (hiBits & EXPONENT_MASK) >> 20; - return expBits - EXPONENT_BIAS; - } - exports.getNormalBase2 = getNormalBase2; - function getSignificand(value) { - const dv = new DataView(new ArrayBuffer(8)); - dv.setFloat64(0, value); - const hiBits = dv.getUint32(0); - const loBits = dv.getUint32(4); - const significandHiBits = (hiBits & SIGNIFICAND_MASK) * Math.pow(2, 32); - return significandHiBits + loBits; - } - exports.getSignificand = getSignificand; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/util.js -var require_util2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.nextGreaterSquare = exports.ldexp = undefined; - function ldexp(frac, exp) { - if (frac === 0 || frac === Number.POSITIVE_INFINITY || frac === Number.NEGATIVE_INFINITY || Number.isNaN(frac)) { - return frac; - } - return frac * Math.pow(2, exp); - } - exports.ldexp = ldexp; - function nextGreaterSquare(v) { - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - return v; - } - exports.nextGreaterSquare = nextGreaterSquare; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/types.js -var require_types12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MappingError = undefined; - - class MappingError extends Error { - } - exports.MappingError = MappingError; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ExponentMapping.js -var require_ExponentMapping = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExponentMapping = undefined; - var ieee754 = require_ieee754(); - var util3 = require_util2(); - var types_1 = require_types12(); - - class ExponentMapping { - _shift; - constructor(scale) { - this._shift = -scale; - } - mapToIndex(value) { - if (value < ieee754.MIN_VALUE) { - return this._minNormalLowerBoundaryIndex(); - } - const exp = ieee754.getNormalBase2(value); - const correction = this._rightShift(ieee754.getSignificand(value) - 1, ieee754.SIGNIFICAND_WIDTH); - return exp + correction >> this._shift; - } - lowerBoundary(index) { - const minIndex = this._minNormalLowerBoundaryIndex(); - if (index < minIndex) { - throw new types_1.MappingError(`underflow: ${index} is < minimum lower boundary: ${minIndex}`); - } - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index > maxIndex) { - throw new types_1.MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`); - } - return util3.ldexp(1, index << this._shift); - } - get scale() { - if (this._shift === 0) { - return 0; - } - return -this._shift; - } - _minNormalLowerBoundaryIndex() { - let index = ieee754.MIN_NORMAL_EXPONENT >> this._shift; - if (this._shift < 2) { - index--; - } - return index; - } - _maxNormalLowerBoundaryIndex() { - return ieee754.MAX_NORMAL_EXPONENT >> this._shift; - } - _rightShift(value, shift) { - return Math.floor(value * Math.pow(2, -shift)); - } - } - exports.ExponentMapping = ExponentMapping; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/LogarithmMapping.js -var require_LogarithmMapping = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LogarithmMapping = undefined; - var ieee754 = require_ieee754(); - var util3 = require_util2(); - var types_1 = require_types12(); - - class LogarithmMapping { - _scale; - _scaleFactor; - _inverseFactor; - constructor(scale) { - this._scale = scale; - this._scaleFactor = util3.ldexp(Math.LOG2E, scale); - this._inverseFactor = util3.ldexp(Math.LN2, -scale); - } - mapToIndex(value) { - if (value <= ieee754.MIN_VALUE) { - return this._minNormalLowerBoundaryIndex() - 1; - } - if (ieee754.getSignificand(value) === 0) { - const exp = ieee754.getNormalBase2(value); - return (exp << this._scale) - 1; - } - const index = Math.floor(Math.log(value) * this._scaleFactor); - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index >= maxIndex) { - return maxIndex; - } - return index; - } - lowerBoundary(index) { - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index >= maxIndex) { - if (index === maxIndex) { - return 2 * Math.exp((index - (1 << this._scale)) / this._scaleFactor); - } - throw new types_1.MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`); - } - const minIndex = this._minNormalLowerBoundaryIndex(); - if (index <= minIndex) { - if (index === minIndex) { - return ieee754.MIN_VALUE; - } else if (index === minIndex - 1) { - return Math.exp((index + (1 << this._scale)) / this._scaleFactor) / 2; - } - throw new types_1.MappingError(`overflow: ${index} is < minimum lower boundary: ${minIndex}`); - } - return Math.exp(index * this._inverseFactor); - } - get scale() { - return this._scale; - } - _minNormalLowerBoundaryIndex() { - return ieee754.MIN_NORMAL_EXPONENT << this._scale; - } - _maxNormalLowerBoundaryIndex() { - return (ieee754.MAX_NORMAL_EXPONENT + 1 << this._scale) - 1; - } - } - exports.LogarithmMapping = LogarithmMapping; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/getMapping.js -var require_getMapping = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMapping = undefined; - var ExponentMapping_1 = require_ExponentMapping(); - var LogarithmMapping_1 = require_LogarithmMapping(); - var types_1 = require_types12(); - var MIN_SCALE = -10; - var MAX_SCALE = 20; - var PREBUILT_MAPPINGS = Array.from({ length: 31 }, (_, i) => { - if (i > 10) { - return new LogarithmMapping_1.LogarithmMapping(i - 10); - } - return new ExponentMapping_1.ExponentMapping(i - 10); - }); - function getMapping(scale) { - if (scale > MAX_SCALE || scale < MIN_SCALE) { - throw new types_1.MappingError(`expected scale >= ${MIN_SCALE} && <= ${MAX_SCALE}, got: ${scale}`); - } - return PREBUILT_MAPPINGS[scale + 10]; - } - exports.getMapping = getMapping; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.js -var require_ExponentialHistogram = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExponentialHistogramAggregator = exports.ExponentialHistogramAccumulation = undefined; - var types_1 = require_types11(); - var MetricData_1 = require_MetricData(); - var api_1 = require_src(); - var Buckets_1 = require_Buckets(); - var getMapping_1 = require_getMapping(); - var util_1 = require_util2(); - - class HighLow { - low; - high; - static combine(h1, h2) { - return new HighLow(Math.min(h1.low, h2.low), Math.max(h1.high, h2.high)); - } - constructor(low, high) { - this.low = low; - this.high = high; - } - } - var MAX_SCALE = 20; - var DEFAULT_MAX_SIZE = 160; - var MIN_MAX_SIZE = 2; - - class ExponentialHistogramAccumulation { - startTime; - _maxSize; - _recordMinMax; - _sum; - _count; - _zeroCount; - _min; - _max; - _positive; - _negative; - _mapping; - constructor(startTime, _maxSize2 = DEFAULT_MAX_SIZE, _recordMinMax = true, _sum = 0, _count = 0, _zeroCount = 0, _min = Number.POSITIVE_INFINITY, _max = Number.NEGATIVE_INFINITY, _positive2 = new Buckets_1.Buckets, _negative2 = new Buckets_1.Buckets, _mapping = (0, getMapping_1.getMapping)(MAX_SCALE)) { - this.startTime = startTime; - this._maxSize = _maxSize2; - this._recordMinMax = _recordMinMax; - this._sum = _sum; - this._count = _count; - this._zeroCount = _zeroCount; - this._min = _min; - this._max = _max; - this._positive = _positive2; - this._negative = _negative2; - this._mapping = _mapping; - if (this._maxSize < MIN_MAX_SIZE) { - api_1.diag.warn(`Exponential Histogram Max Size set to ${this._maxSize}, changing to the minimum size of: ${MIN_MAX_SIZE}`); - this._maxSize = MIN_MAX_SIZE; - } - } - record(value) { - this.updateByIncrement(value, 1); - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return { - hasMinMax: this._recordMinMax, - min: this.min, - max: this.max, - sum: this.sum, - positive: { - offset: this.positive.offset, - bucketCounts: this.positive.counts() - }, - negative: { - offset: this.negative.offset, - bucketCounts: this.negative.counts() - }, - count: this.count, - scale: this.scale, - zeroCount: this.zeroCount - }; - } - get sum() { - return this._sum; - } - get min() { - return this._min; - } - get max() { - return this._max; - } - get count() { - return this._count; - } - get zeroCount() { - return this._zeroCount; - } - get scale() { - if (this._count === this._zeroCount) { - return 0; - } - return this._mapping.scale; - } - get positive() { - return this._positive; - } - get negative() { - return this._negative; - } - updateByIncrement(value, increment) { - if (Number.isNaN(value)) { - return; - } - if (value > this._max) { - this._max = value; - } - if (value < this._min) { - this._min = value; - } - this._count += increment; - if (value === 0) { - this._zeroCount += increment; - return; - } - this._sum += value * increment; - if (value > 0) { - this._updateBuckets(this._positive, value, increment); - } else { - this._updateBuckets(this._negative, -value, increment); - } - } - merge(previous) { - if (this._count === 0) { - this._min = previous.min; - this._max = previous.max; - } else if (previous.count !== 0) { - if (previous.min < this.min) { - this._min = previous.min; - } - if (previous.max > this.max) { - this._max = previous.max; - } - } - this.startTime = previous.startTime; - this._sum += previous.sum; - this._count += previous.count; - this._zeroCount += previous.zeroCount; - const minScale = this._minScale(previous); - this._downscale(this.scale - minScale); - this._mergeBuckets(this.positive, previous, previous.positive, minScale); - this._mergeBuckets(this.negative, previous, previous.negative, minScale); - } - diff(other) { - this._min = Infinity; - this._max = -Infinity; - this._sum -= other.sum; - this._count -= other.count; - this._zeroCount -= other.zeroCount; - const minScale = this._minScale(other); - this._downscale(this.scale - minScale); - this._diffBuckets(this.positive, other, other.positive, minScale); - this._diffBuckets(this.negative, other, other.negative, minScale); - } - clone() { - return new ExponentialHistogramAccumulation(this.startTime, this._maxSize, this._recordMinMax, this._sum, this._count, this._zeroCount, this._min, this._max, this.positive.clone(), this.negative.clone(), this._mapping); - } - _updateBuckets(buckets, value, increment) { - let index = this._mapping.mapToIndex(value); - let rescalingNeeded = false; - let high = 0; - let low = 0; - if (buckets.length === 0) { - buckets.indexStart = index; - buckets.indexEnd = buckets.indexStart; - buckets.indexBase = buckets.indexStart; - } else if (index < buckets.indexStart && buckets.indexEnd - index >= this._maxSize) { - rescalingNeeded = true; - low = index; - high = buckets.indexEnd; - } else if (index > buckets.indexEnd && index - buckets.indexStart >= this._maxSize) { - rescalingNeeded = true; - low = buckets.indexStart; - high = index; - } - if (rescalingNeeded) { - const change = this._changeScale(high, low); - this._downscale(change); - index = this._mapping.mapToIndex(value); - } - this._incrementIndexBy(buckets, index, increment); - } - _incrementIndexBy(buckets, index, increment) { - if (increment === 0) { - return; - } - if (buckets.length === 0) { - buckets.indexStart = buckets.indexEnd = buckets.indexBase = index; - } - if (index < buckets.indexStart) { - const span = buckets.indexEnd - index; - if (span >= buckets.backing.length) { - this._grow(buckets, span + 1); - } - buckets.indexStart = index; - } else if (index > buckets.indexEnd) { - const span = index - buckets.indexStart; - if (span >= buckets.backing.length) { - this._grow(buckets, span + 1); - } - buckets.indexEnd = index; - } - let bucketIndex = index - buckets.indexBase; - if (bucketIndex < 0) { - bucketIndex += buckets.backing.length; - } - buckets.incrementBucket(bucketIndex, increment); - } - _grow(buckets, needed) { - const size = buckets.backing.length; - const bias = buckets.indexBase - buckets.indexStart; - const oldPositiveLimit = size - bias; - let newSize = (0, util_1.nextGreaterSquare)(needed); - if (newSize > this._maxSize) { - newSize = this._maxSize; - } - const newPositiveLimit = newSize - bias; - buckets.backing.growTo(newSize, oldPositiveLimit, newPositiveLimit); - } - _changeScale(high, low) { - let change = 0; - while (high - low >= this._maxSize) { - high >>= 1; - low >>= 1; - change++; - } - return change; - } - _downscale(change) { - if (change === 0) { - return; - } - if (change < 0) { - throw new Error(`impossible change of scale: ${this.scale}`); - } - const newScale = this._mapping.scale - change; - this._positive.downscale(change); - this._negative.downscale(change); - this._mapping = (0, getMapping_1.getMapping)(newScale); - } - _minScale(other) { - const minScale = Math.min(this.scale, other.scale); - const highLowPos = HighLow.combine(this._highLowAtScale(this.positive, this.scale, minScale), this._highLowAtScale(other.positive, other.scale, minScale)); - const highLowNeg = HighLow.combine(this._highLowAtScale(this.negative, this.scale, minScale), this._highLowAtScale(other.negative, other.scale, minScale)); - return Math.min(minScale - this._changeScale(highLowPos.high, highLowPos.low), minScale - this._changeScale(highLowNeg.high, highLowNeg.low)); - } - _highLowAtScale(buckets, currentScale, newScale) { - if (buckets.length === 0) { - return new HighLow(0, -1); - } - const shift = currentScale - newScale; - return new HighLow(buckets.indexStart >> shift, buckets.indexEnd >> shift); - } - _mergeBuckets(ours, other, theirs, scale) { - const theirOffset = theirs.offset; - const theirChange = other.scale - scale; - for (let i = 0;i < theirs.length; i++) { - this._incrementIndexBy(ours, theirOffset + i >> theirChange, theirs.at(i)); - } - } - _diffBuckets(ours, other, theirs, scale) { - const theirOffset = theirs.offset; - const theirChange = other.scale - scale; - for (let i = 0;i < theirs.length; i++) { - const ourIndex = theirOffset + i >> theirChange; - let bucketIndex = ourIndex - ours.indexBase; - if (bucketIndex < 0) { - bucketIndex += ours.backing.length; - } - ours.decrementBucket(bucketIndex, theirs.at(i)); - } - ours.trim(); - } - } - exports.ExponentialHistogramAccumulation = ExponentialHistogramAccumulation; - - class ExponentialHistogramAggregator { - _maxSize; - _recordMinMax; - kind = types_1.AggregatorKind.EXPONENTIAL_HISTOGRAM; - constructor(_maxSize2, _recordMinMax) { - this._maxSize = _maxSize2; - this._recordMinMax = _recordMinMax; - } - createAccumulation(startTime) { - return new ExponentialHistogramAccumulation(startTime, this._maxSize, this._recordMinMax); - } - merge(previous, delta) { - const result = delta.clone(); - result.merge(previous); - return result; - } - diff(previous, current) { - const result = current.clone(); - result.diff(previous); - return result; - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.EXPONENTIAL_HISTOGRAM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - const pointValue = accumulation.toPointValue(); - const allowsNegativeValues = descriptor.type === MetricData_1.InstrumentType.GAUGE || descriptor.type === MetricData_1.InstrumentType.UP_DOWN_COUNTER || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_GAUGE || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER; - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: { - min: pointValue.hasMinMax ? pointValue.min : undefined, - max: pointValue.hasMinMax ? pointValue.max : undefined, - sum: !allowsNegativeValues ? pointValue.sum : undefined, - positive: { - offset: pointValue.positive.offset, - bucketCounts: pointValue.positive.bucketCounts - }, - negative: { - offset: pointValue.negative.offset, - bucketCounts: pointValue.negative.bucketCounts - }, - count: pointValue.count, - scale: pointValue.scale, - zeroCount: pointValue.zeroCount - } - }; - }) - }; - } - } - exports.ExponentialHistogramAggregator = ExponentialHistogramAggregator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.js -var require_LastValue = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LastValueAggregator = exports.LastValueAccumulation = undefined; - var types_1 = require_types11(); - var core_1 = require_src7(); - var MetricData_1 = require_MetricData(); - - class LastValueAccumulation { - startTime; - _current; - sampleTime; - constructor(startTime, _current = 0, sampleTime = [0, 0]) { - this.startTime = startTime; - this._current = _current; - this.sampleTime = sampleTime; - } - record(value) { - this._current = value; - this.sampleTime = (0, core_1.millisToHrTime)(Date.now()); - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } - } - exports.LastValueAccumulation = LastValueAccumulation; - - class LastValueAggregator { - kind = types_1.AggregatorKind.LAST_VALUE; - createAccumulation(startTime) { - return new LastValueAccumulation(startTime); - } - merge(previous, delta) { - const latestAccumulation = (0, core_1.hrTimeToMicroseconds)(delta.sampleTime) >= (0, core_1.hrTimeToMicroseconds)(previous.sampleTime) ? delta : previous; - return new LastValueAccumulation(previous.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime); - } - diff(previous, current) { - const latestAccumulation = (0, core_1.hrTimeToMicroseconds)(current.sampleTime) >= (0, core_1.hrTimeToMicroseconds)(previous.sampleTime) ? current : previous; - return new LastValueAccumulation(current.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.GAUGE, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: accumulation.toPointValue() - }; - }) - }; - } - } - exports.LastValueAggregator = LastValueAggregator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.js -var require_Sum = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SumAggregator = exports.SumAccumulation = undefined; - var types_1 = require_types11(); - var MetricData_1 = require_MetricData(); - - class SumAccumulation { - startTime; - monotonic; - _current; - reset; - constructor(startTime, monotonic, _current = 0, reset2 = false) { - this.startTime = startTime; - this.monotonic = monotonic; - this._current = _current; - this.reset = reset2; - } - record(value) { - if (this.monotonic && value < 0) { - return; - } - this._current += value; - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } - } - exports.SumAccumulation = SumAccumulation; - - class SumAggregator { - monotonic; - kind = types_1.AggregatorKind.SUM; - constructor(monotonic) { - this.monotonic = monotonic; - } - createAccumulation(startTime) { - return new SumAccumulation(startTime, this.monotonic); - } - merge(previous, delta) { - const prevPv = previous.toPointValue(); - const deltaPv = delta.toPointValue(); - if (delta.reset) { - return new SumAccumulation(delta.startTime, this.monotonic, deltaPv, delta.reset); - } - return new SumAccumulation(previous.startTime, this.monotonic, prevPv + deltaPv); - } - diff(previous, current) { - const prevPv = previous.toPointValue(); - const currPv = current.toPointValue(); - if (this.monotonic && prevPv > currPv) { - return new SumAccumulation(current.startTime, this.monotonic, currPv, true); - } - return new SumAccumulation(current.startTime, this.monotonic, currPv - prevPv); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.SUM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: accumulation.toPointValue() - }; - }), - isMonotonic: this.monotonic - }; - } - } - exports.SumAggregator = SumAggregator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.js -var require_aggregator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SumAggregator = exports.SumAccumulation = exports.LastValueAggregator = exports.LastValueAccumulation = exports.ExponentialHistogramAggregator = exports.ExponentialHistogramAccumulation = exports.HistogramAggregator = exports.HistogramAccumulation = exports.DropAggregator = undefined; - var Drop_1 = require_Drop(); - Object.defineProperty(exports, "DropAggregator", { enumerable: true, get: function() { - return Drop_1.DropAggregator; - } }); - var Histogram_1 = require_Histogram(); - Object.defineProperty(exports, "HistogramAccumulation", { enumerable: true, get: function() { - return Histogram_1.HistogramAccumulation; - } }); - Object.defineProperty(exports, "HistogramAggregator", { enumerable: true, get: function() { - return Histogram_1.HistogramAggregator; - } }); - var ExponentialHistogram_1 = require_ExponentialHistogram(); - Object.defineProperty(exports, "ExponentialHistogramAccumulation", { enumerable: true, get: function() { - return ExponentialHistogram_1.ExponentialHistogramAccumulation; - } }); - Object.defineProperty(exports, "ExponentialHistogramAggregator", { enumerable: true, get: function() { - return ExponentialHistogram_1.ExponentialHistogramAggregator; - } }); - var LastValue_1 = require_LastValue(); - Object.defineProperty(exports, "LastValueAccumulation", { enumerable: true, get: function() { - return LastValue_1.LastValueAccumulation; - } }); - Object.defineProperty(exports, "LastValueAggregator", { enumerable: true, get: function() { - return LastValue_1.LastValueAggregator; - } }); - var Sum_1 = require_Sum(); - Object.defineProperty(exports, "SumAccumulation", { enumerable: true, get: function() { - return Sum_1.SumAccumulation; - } }); - Object.defineProperty(exports, "SumAggregator", { enumerable: true, get: function() { - return Sum_1.SumAggregator; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.js -var require_Aggregation = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_AGGREGATION = exports.EXPONENTIAL_HISTOGRAM_AGGREGATION = exports.HISTOGRAM_AGGREGATION = exports.LAST_VALUE_AGGREGATION = exports.SUM_AGGREGATION = exports.DROP_AGGREGATION = exports.DefaultAggregation = exports.ExponentialHistogramAggregation = exports.ExplicitBucketHistogramAggregation = exports.HistogramAggregation = exports.LastValueAggregation = exports.SumAggregation = exports.DropAggregation = undefined; - var api4 = require_src(); - var aggregator_1 = require_aggregator(); - var MetricData_1 = require_MetricData(); - - class DropAggregation { - static DEFAULT_INSTANCE = new aggregator_1.DropAggregator; - createAggregator(_instrument) { - return DropAggregation.DEFAULT_INSTANCE; - } - } - exports.DropAggregation = DropAggregation; - - class SumAggregation { - static MONOTONIC_INSTANCE = new aggregator_1.SumAggregator(true); - static NON_MONOTONIC_INSTANCE = new aggregator_1.SumAggregator(false); - createAggregator(instrument) { - switch (instrument.type) { - case MetricData_1.InstrumentType.COUNTER: - case MetricData_1.InstrumentType.OBSERVABLE_COUNTER: - case MetricData_1.InstrumentType.HISTOGRAM: { - return SumAggregation.MONOTONIC_INSTANCE; - } - default: { - return SumAggregation.NON_MONOTONIC_INSTANCE; - } - } - } - } - exports.SumAggregation = SumAggregation; - - class LastValueAggregation { - static DEFAULT_INSTANCE = new aggregator_1.LastValueAggregator; - createAggregator(_instrument) { - return LastValueAggregation.DEFAULT_INSTANCE; - } - } - exports.LastValueAggregation = LastValueAggregation; - - class HistogramAggregation { - static DEFAULT_INSTANCE = new aggregator_1.HistogramAggregator([0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 1e4], true); - createAggregator(_instrument) { - return HistogramAggregation.DEFAULT_INSTANCE; - } - } - exports.HistogramAggregation = HistogramAggregation; - - class ExplicitBucketHistogramAggregation { - _recordMinMax; - _boundaries; - constructor(boundaries, _recordMinMax = true) { - this._recordMinMax = _recordMinMax; - if (boundaries == null) { - throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array"); - } - boundaries = boundaries.concat(); - boundaries = boundaries.sort((a, b) => a - b); - const minusInfinityIndex = boundaries.lastIndexOf(-Infinity); - let infinityIndex = boundaries.indexOf(Infinity); - if (infinityIndex === -1) { - infinityIndex = undefined; - } - this._boundaries = boundaries.slice(minusInfinityIndex + 1, infinityIndex); - } - createAggregator(_instrument) { - return new aggregator_1.HistogramAggregator(this._boundaries, this._recordMinMax); - } - } - exports.ExplicitBucketHistogramAggregation = ExplicitBucketHistogramAggregation; - - class ExponentialHistogramAggregation { - _maxSize; - _recordMinMax; - constructor(_maxSize2 = 160, _recordMinMax = true) { - this._maxSize = _maxSize2; - this._recordMinMax = _recordMinMax; - } - createAggregator(_instrument) { - return new aggregator_1.ExponentialHistogramAggregator(this._maxSize, this._recordMinMax); - } - } - exports.ExponentialHistogramAggregation = ExponentialHistogramAggregation; - - class DefaultAggregation { - _resolve(instrument) { - switch (instrument.type) { - case MetricData_1.InstrumentType.COUNTER: - case MetricData_1.InstrumentType.UP_DOWN_COUNTER: - case MetricData_1.InstrumentType.OBSERVABLE_COUNTER: - case MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: { - return exports.SUM_AGGREGATION; - } - case MetricData_1.InstrumentType.GAUGE: - case MetricData_1.InstrumentType.OBSERVABLE_GAUGE: { - return exports.LAST_VALUE_AGGREGATION; - } - case MetricData_1.InstrumentType.HISTOGRAM: { - if (instrument.advice.explicitBucketBoundaries) { - return new ExplicitBucketHistogramAggregation(instrument.advice.explicitBucketBoundaries); - } - return exports.HISTOGRAM_AGGREGATION; - } - } - api4.diag.warn(`Unable to recognize instrument type: ${instrument.type}`); - return exports.DROP_AGGREGATION; - } - createAggregator(instrument) { - return this._resolve(instrument).createAggregator(instrument); - } - } - exports.DefaultAggregation = DefaultAggregation; - exports.DROP_AGGREGATION = new DropAggregation; - exports.SUM_AGGREGATION = new SumAggregation; - exports.LAST_VALUE_AGGREGATION = new LastValueAggregation; - exports.HISTOGRAM_AGGREGATION = new HistogramAggregation; - exports.EXPONENTIAL_HISTOGRAM_AGGREGATION = new ExponentialHistogramAggregation; - exports.DEFAULT_AGGREGATION = new DefaultAggregation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.js -var require_AggregationOption = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toAggregation = exports.AggregationType = undefined; - var Aggregation_1 = require_Aggregation(); - var AggregationType; - (function(AggregationType2) { - AggregationType2[AggregationType2["DEFAULT"] = 0] = "DEFAULT"; - AggregationType2[AggregationType2["DROP"] = 1] = "DROP"; - AggregationType2[AggregationType2["SUM"] = 2] = "SUM"; - AggregationType2[AggregationType2["LAST_VALUE"] = 3] = "LAST_VALUE"; - AggregationType2[AggregationType2["EXPLICIT_BUCKET_HISTOGRAM"] = 4] = "EXPLICIT_BUCKET_HISTOGRAM"; - AggregationType2[AggregationType2["EXPONENTIAL_HISTOGRAM"] = 5] = "EXPONENTIAL_HISTOGRAM"; - })(AggregationType = exports.AggregationType || (exports.AggregationType = {})); - function toAggregation(option) { - switch (option.type) { - case AggregationType.DEFAULT: - return Aggregation_1.DEFAULT_AGGREGATION; - case AggregationType.DROP: - return Aggregation_1.DROP_AGGREGATION; - case AggregationType.SUM: - return Aggregation_1.SUM_AGGREGATION; - case AggregationType.LAST_VALUE: - return Aggregation_1.LAST_VALUE_AGGREGATION; - case AggregationType.EXPONENTIAL_HISTOGRAM: { - const expOption = option; - return new Aggregation_1.ExponentialHistogramAggregation(expOption.options?.maxSize, expOption.options?.recordMinMax); - } - case AggregationType.EXPLICIT_BUCKET_HISTOGRAM: { - const expOption = option; - if (expOption.options == null) { - return Aggregation_1.HISTOGRAM_AGGREGATION; - } else { - return new Aggregation_1.ExplicitBucketHistogramAggregation(expOption.options?.boundaries, expOption.options?.recordMinMax); - } - } - default: - throw new Error("Unsupported Aggregation"); - } - } - exports.toAggregation = toAggregation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.js -var require_AggregationSelector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = exports.DEFAULT_AGGREGATION_SELECTOR = undefined; - var AggregationTemporality_1 = require_AggregationTemporality(); - var AggregationOption_1 = require_AggregationOption(); - var DEFAULT_AGGREGATION_SELECTOR = (_instrumentType) => { - return { - type: AggregationOption_1.AggregationType.DEFAULT - }; - }; - exports.DEFAULT_AGGREGATION_SELECTOR = DEFAULT_AGGREGATION_SELECTOR; - var DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = (_instrumentType) => AggregationTemporality_1.AggregationTemporality.CUMULATIVE; - exports.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.js -var require_MetricReader = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricReader = undefined; - var api4 = require_src(); - var utils_1 = require_utils42(); - var AggregationSelector_1 = require_AggregationSelector(); - - class MetricReader { - _shutdown = false; - _metricProducers; - _sdkMetricProducer; - _aggregationTemporalitySelector; - _aggregationSelector; - _cardinalitySelector; - constructor(options) { - this._aggregationSelector = options?.aggregationSelector ?? AggregationSelector_1.DEFAULT_AGGREGATION_SELECTOR; - this._aggregationTemporalitySelector = options?.aggregationTemporalitySelector ?? AggregationSelector_1.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; - this._metricProducers = options?.metricProducers ?? []; - this._cardinalitySelector = options?.cardinalitySelector; - } - setMetricProducer(metricProducer) { - if (this._sdkMetricProducer) { - throw new Error("MetricReader can not be bound to a MeterProvider again."); - } - this._sdkMetricProducer = metricProducer; - this.onInitialized(); - } - selectAggregation(instrumentType) { - return this._aggregationSelector(instrumentType); - } - selectAggregationTemporality(instrumentType) { - return this._aggregationTemporalitySelector(instrumentType); - } - selectCardinalityLimit(instrumentType) { - return this._cardinalitySelector ? this._cardinalitySelector(instrumentType) : 2000; - } - onInitialized() {} - async collect(options) { - if (this._sdkMetricProducer === undefined) { - throw new Error("MetricReader is not bound to a MetricProducer"); - } - if (this._shutdown) { - throw new Error("MetricReader is shutdown"); - } - const [sdkCollectionResults, ...additionalCollectionResults] = await Promise.all([ - this._sdkMetricProducer.collect({ - timeoutMillis: options?.timeoutMillis - }), - ...this._metricProducers.map((producer) => producer.collect({ - timeoutMillis: options?.timeoutMillis - })) - ]); - const errors3 = sdkCollectionResults.errors.concat((0, utils_1.FlatMap)(additionalCollectionResults, (result) => result.errors)); - const resource = sdkCollectionResults.resourceMetrics.resource; - const scopeMetrics = sdkCollectionResults.resourceMetrics.scopeMetrics.concat((0, utils_1.FlatMap)(additionalCollectionResults, (result) => result.resourceMetrics.scopeMetrics)); - return { - resourceMetrics: { - resource, - scopeMetrics - }, - errors: errors3 - }; - } - async shutdown(options) { - if (this._shutdown) { - api4.diag.error("Cannot call shutdown twice."); - return; - } - if (options?.timeoutMillis == null) { - await this.onShutdown(); - } else { - await (0, utils_1.callWithTimeout)(this.onShutdown(), options.timeoutMillis); - } - this._shutdown = true; - } - async forceFlush(options) { - if (this._shutdown) { - api4.diag.warn("Cannot forceFlush on already shutdown MetricReader."); - return; - } - if (options?.timeoutMillis == null) { - await this.onForceFlush(); - return; - } - await (0, utils_1.callWithTimeout)(this.onForceFlush(), options.timeoutMillis); - } - } - exports.MetricReader = MetricReader; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.js -var require_PeriodicExportingMetricReader = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PeriodicExportingMetricReader = undefined; - var api4 = require_src(); - var core_1 = require_src7(); - var MetricReader_1 = require_MetricReader(); - var utils_1 = require_utils42(); - - class PeriodicExportingMetricReader extends MetricReader_1.MetricReader { - _interval; - _exporter; - _exportInterval; - _exportTimeout; - constructor(options) { - super({ - aggregationSelector: options.exporter.selectAggregation?.bind(options.exporter), - aggregationTemporalitySelector: options.exporter.selectAggregationTemporality?.bind(options.exporter), - metricProducers: options.metricProducers - }); - if (options.exportIntervalMillis !== undefined && options.exportIntervalMillis <= 0) { - throw Error("exportIntervalMillis must be greater than 0"); - } - if (options.exportTimeoutMillis !== undefined && options.exportTimeoutMillis <= 0) { - throw Error("exportTimeoutMillis must be greater than 0"); - } - if (options.exportTimeoutMillis !== undefined && options.exportIntervalMillis !== undefined && options.exportIntervalMillis < options.exportTimeoutMillis) { - throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis"); - } - this._exportInterval = options.exportIntervalMillis ?? 60000; - this._exportTimeout = options.exportTimeoutMillis ?? 30000; - this._exporter = options.exporter; - } - async _runOnce() { - try { - await (0, utils_1.callWithTimeout)(this._doRun(), this._exportTimeout); - } catch (err) { - if (err instanceof utils_1.TimeoutError) { - api4.diag.error("Export took longer than %s milliseconds and timed out.", this._exportTimeout); - return; - } - (0, core_1.globalErrorHandler)(err); - } - } - async _doRun() { - const { resourceMetrics, errors: errors3 } = await this.collect({ - timeoutMillis: this._exportTimeout - }); - if (errors3.length > 0) { - api4.diag.error("PeriodicExportingMetricReader: metrics collection errors", ...errors3); - } - if (resourceMetrics.resource.asyncAttributesPending) { - try { - await resourceMetrics.resource.waitForAsyncAttributes?.(); - } catch (e) { - api4.diag.debug("Error while resolving async portion of resource: ", e); - (0, core_1.globalErrorHandler)(e); - } - } - if (resourceMetrics.scopeMetrics.length === 0) { - return; - } - const result = await core_1.internal._export(this._exporter, resourceMetrics); - if (result.code !== core_1.ExportResultCode.SUCCESS) { - throw new Error(`PeriodicExportingMetricReader: metrics export failed (error ${result.error})`); - } - } - onInitialized() { - this._interval = setInterval(() => { - this._runOnce(); - }, this._exportInterval); - if (typeof this._interval !== "number") { - this._interval.unref(); - } - } - async onForceFlush() { - await this._runOnce(); - await this._exporter.forceFlush(); - } - async onShutdown() { - if (this._interval) { - clearInterval(this._interval); - } - await this.onForceFlush(); - await this._exporter.shutdown(); - } - } - exports.PeriodicExportingMetricReader = PeriodicExportingMetricReader; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.js -var require_InMemoryMetricExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InMemoryMetricExporter = undefined; - var core_1 = require_src7(); - - class InMemoryMetricExporter { - _shutdown = false; - _aggregationTemporality; - _metrics = []; - constructor(aggregationTemporality) { - this._aggregationTemporality = aggregationTemporality; - } - export(metrics, resultCallback) { - if (this._shutdown) { - setTimeout(() => resultCallback({ code: core_1.ExportResultCode.FAILED }), 0); - return; - } - this._metrics.push(metrics); - setTimeout(() => resultCallback({ code: core_1.ExportResultCode.SUCCESS }), 0); - } - getMetrics() { - return this._metrics; - } - forceFlush() { - return Promise.resolve(); - } - reset() { - this._metrics = []; - } - selectAggregationTemporality(_instrumentType) { - return this._aggregationTemporality; - } - shutdown() { - this._shutdown = true; - return Promise.resolve(); - } - } - exports.InMemoryMetricExporter = InMemoryMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.js -var require_ConsoleMetricExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleMetricExporter = undefined; - var core_1 = require_src7(); - var AggregationSelector_1 = require_AggregationSelector(); - - class ConsoleMetricExporter { - _shutdown = false; - _temporalitySelector; - constructor(options) { - this._temporalitySelector = options?.temporalitySelector ?? AggregationSelector_1.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; - } - export(metrics, resultCallback) { - if (this._shutdown) { - setImmediate(resultCallback, { code: core_1.ExportResultCode.FAILED }); - return; - } - return ConsoleMetricExporter._sendMetrics(metrics, resultCallback); - } - forceFlush() { - return Promise.resolve(); - } - selectAggregationTemporality(_instrumentType) { - return this._temporalitySelector(_instrumentType); - } - shutdown() { - this._shutdown = true; - return Promise.resolve(); - } - static _sendMetrics(metrics, done) { - for (const scopeMetrics of metrics.scopeMetrics) { - for (const metric of scopeMetrics.metrics) { - console.dir({ - descriptor: metric.descriptor, - dataPointType: metric.dataPointType, - dataPoints: metric.dataPoints - }, { depth: null }); - } - } - done({ code: core_1.ExportResultCode.SUCCESS }); - } - } - exports.ConsoleMetricExporter = ConsoleMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/ViewRegistry.js -var require_ViewRegistry = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ViewRegistry = undefined; - - class ViewRegistry { - _registeredViews = []; - addView(view) { - this._registeredViews.push(view); - } - findViews(instrument, meter) { - const views = this._registeredViews.filter((registeredView) => { - return this._matchInstrument(registeredView.instrumentSelector, instrument) && this._matchMeter(registeredView.meterSelector, meter); - }); - return views; - } - _matchInstrument(selector, instrument) { - return (selector.getType() === undefined || instrument.type === selector.getType()) && selector.getNameFilter().match(instrument.name) && selector.getUnitFilter().match(instrument.unit); - } - _matchMeter(selector, meter) { - return selector.getNameFilter().match(meter.name) && (meter.version === undefined || selector.getVersionFilter().match(meter.version)) && (meter.schemaUrl === undefined || selector.getSchemaUrlFilter().match(meter.schemaUrl)); - } - } - exports.ViewRegistry = ViewRegistry; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.js -var require_InstrumentDescriptor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isValidName = exports.isDescriptorCompatibleWith = exports.createInstrumentDescriptorWithView = exports.createInstrumentDescriptor = undefined; - var api_1 = require_src(); - var utils_1 = require_utils42(); - function createInstrumentDescriptor(name, type, options) { - if (!isValidName(name)) { - api_1.diag.warn(`Invalid metric name: "${name}". The metric name should be a ASCII string with a length no greater than 255 characters.`); - } - return { - name, - type, - description: options?.description ?? "", - unit: options?.unit ?? "", - valueType: options?.valueType ?? api_1.ValueType.DOUBLE, - advice: options?.advice ?? {} - }; - } - exports.createInstrumentDescriptor = createInstrumentDescriptor; - function createInstrumentDescriptorWithView(view, instrument) { - return { - name: view.name ?? instrument.name, - description: view.description ?? instrument.description, - type: instrument.type, - unit: instrument.unit, - valueType: instrument.valueType, - advice: instrument.advice - }; - } - exports.createInstrumentDescriptorWithView = createInstrumentDescriptorWithView; - function isDescriptorCompatibleWith(descriptor, otherDescriptor) { - return (0, utils_1.equalsCaseInsensitive)(descriptor.name, otherDescriptor.name) && descriptor.unit === otherDescriptor.unit && descriptor.type === otherDescriptor.type && descriptor.valueType === otherDescriptor.valueType; - } - exports.isDescriptorCompatibleWith = isDescriptorCompatibleWith; - var NAME_REGEXP = /^[a-z][a-z0-9_.\-/]{0,254}$/i; - function isValidName(name) { - return name.match(NAME_REGEXP) != null; - } - exports.isValidName = isValidName; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/Instruments.js -var require_Instruments = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isObservableInstrument = exports.ObservableUpDownCounterInstrument = exports.ObservableGaugeInstrument = exports.ObservableCounterInstrument = exports.ObservableInstrument = exports.HistogramInstrument = exports.GaugeInstrument = exports.CounterInstrument = exports.UpDownCounterInstrument = exports.SyncInstrument = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - - class SyncInstrument { - _writableMetricStorage; - _descriptor; - constructor(_writableMetricStorage, _descriptor) { - this._writableMetricStorage = _writableMetricStorage; - this._descriptor = _descriptor; - } - _record(value, attributes = {}, context8 = api_1.context.active()) { - if (typeof value !== "number") { - api_1.diag.warn(`non-number value provided to metric ${this._descriptor.name}: ${value}`); - return; - } - if (this._descriptor.valueType === api_1.ValueType.INT && !Number.isInteger(value)) { - api_1.diag.warn(`INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - this._writableMetricStorage.record(value, attributes, context8, (0, core_1.millisToHrTime)(Date.now())); - } - } - exports.SyncInstrument = SyncInstrument; - - class UpDownCounterInstrument extends SyncInstrument { - add(value, attributes, ctx) { - this._record(value, attributes, ctx); - } - } - exports.UpDownCounterInstrument = UpDownCounterInstrument; - - class CounterInstrument extends SyncInstrument { - add(value, attributes, ctx) { - if (value < 0) { - api_1.diag.warn(`negative value provided to counter ${this._descriptor.name}: ${value}`); - return; - } - this._record(value, attributes, ctx); - } - } - exports.CounterInstrument = CounterInstrument; - - class GaugeInstrument extends SyncInstrument { - record(value, attributes, ctx) { - this._record(value, attributes, ctx); - } - } - exports.GaugeInstrument = GaugeInstrument; - - class HistogramInstrument extends SyncInstrument { - record(value, attributes, ctx) { - if (value < 0) { - api_1.diag.warn(`negative value provided to histogram ${this._descriptor.name}: ${value}`); - return; - } - this._record(value, attributes, ctx); - } - } - exports.HistogramInstrument = HistogramInstrument; - - class ObservableInstrument { - _observableRegistry; - _metricStorages; - _descriptor; - constructor(descriptor, metricStorages, _observableRegistry) { - this._observableRegistry = _observableRegistry; - this._descriptor = descriptor; - this._metricStorages = metricStorages; - } - addCallback(callback) { - this._observableRegistry.addCallback(callback, this); - } - removeCallback(callback) { - this._observableRegistry.removeCallback(callback, this); - } - } - exports.ObservableInstrument = ObservableInstrument; - - class ObservableCounterInstrument extends ObservableInstrument { - } - exports.ObservableCounterInstrument = ObservableCounterInstrument; - - class ObservableGaugeInstrument extends ObservableInstrument { - } - exports.ObservableGaugeInstrument = ObservableGaugeInstrument; - - class ObservableUpDownCounterInstrument extends ObservableInstrument { - } - exports.ObservableUpDownCounterInstrument = ObservableUpDownCounterInstrument; - function isObservableInstrument(it) { - return it instanceof ObservableInstrument; - } - exports.isObservableInstrument = isObservableInstrument; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/Meter.js -var require_Meter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Meter = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor(); - var Instruments_1 = require_Instruments(); - var MetricData_1 = require_MetricData(); - - class Meter { - _meterSharedState; - constructor(_meterSharedState) { - this._meterSharedState = _meterSharedState; - } - createGauge(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.GAUGE, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.GaugeInstrument(storage, descriptor); - } - createHistogram(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.HISTOGRAM, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.HistogramInstrument(storage, descriptor); - } - createCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.COUNTER, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.CounterInstrument(storage, descriptor); - } - createUpDownCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.UP_DOWN_COUNTER, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.UpDownCounterInstrument(storage, descriptor); - } - createObservableGauge(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.OBSERVABLE_GAUGE, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new Instruments_1.ObservableGaugeInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - createObservableCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.OBSERVABLE_COUNTER, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new Instruments_1.ObservableCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - createObservableUpDownCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new Instruments_1.ObservableUpDownCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - addBatchObservableCallback(callback, observables) { - this._meterSharedState.observableRegistry.addBatchCallback(callback, observables); - } - removeBatchObservableCallback(callback, observables) { - this._meterSharedState.observableRegistry.removeBatchCallback(callback, observables); - } - } - exports.Meter = Meter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorage.js -var require_MetricStorage = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricStorage = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor(); - - class MetricStorage { - _instrumentDescriptor; - constructor(_instrumentDescriptor) { - this._instrumentDescriptor = _instrumentDescriptor; - } - getInstrumentDescriptor() { - return this._instrumentDescriptor; - } - updateDescription(description) { - this._instrumentDescriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(this._instrumentDescriptor.name, this._instrumentDescriptor.type, { - description, - valueType: this._instrumentDescriptor.valueType, - unit: this._instrumentDescriptor.unit, - advice: this._instrumentDescriptor.advice - }); - } - } - exports.MetricStorage = MetricStorage; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/HashMap.js -var require_HashMap = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeHashMap = exports.HashMap = undefined; - var utils_1 = require_utils42(); - - class HashMap { - _hash; - _valueMap = new Map; - _keyMap = new Map; - constructor(_hash) { - this._hash = _hash; - } - get(key, hashCode) { - hashCode ??= this._hash(key); - return this._valueMap.get(hashCode); - } - getOrDefault(key, defaultFactory) { - const hash2 = this._hash(key); - if (this._valueMap.has(hash2)) { - return this._valueMap.get(hash2); - } - const val = defaultFactory(); - if (!this._keyMap.has(hash2)) { - this._keyMap.set(hash2, key); - } - this._valueMap.set(hash2, val); - return val; - } - set(key, value, hashCode) { - hashCode ??= this._hash(key); - if (!this._keyMap.has(hashCode)) { - this._keyMap.set(hashCode, key); - } - this._valueMap.set(hashCode, value); - } - has(key, hashCode) { - hashCode ??= this._hash(key); - return this._valueMap.has(hashCode); - } - *keys() { - const keyIterator = this._keyMap.entries(); - let next = keyIterator.next(); - while (next.done !== true) { - yield [next.value[1], next.value[0]]; - next = keyIterator.next(); - } - } - *entries() { - const valueIterator = this._valueMap.entries(); - let next = valueIterator.next(); - while (next.done !== true) { - yield [this._keyMap.get(next.value[0]), next.value[1], next.value[0]]; - next = valueIterator.next(); - } - } - get size() { - return this._valueMap.size; - } - } - exports.HashMap = HashMap; - - class AttributeHashMap extends HashMap { - constructor() { - super(utils_1.hashAttributes); - } - } - exports.AttributeHashMap = AttributeHashMap; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/DeltaMetricProcessor.js -var require_DeltaMetricProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DeltaMetricProcessor = undefined; - var utils_1 = require_utils42(); - var HashMap_1 = require_HashMap(); - - class DeltaMetricProcessor { - _aggregator; - _activeCollectionStorage = new HashMap_1.AttributeHashMap; - _cumulativeMemoStorage = new HashMap_1.AttributeHashMap; - _cardinalityLimit; - _overflowAttributes = { "otel.metric.overflow": true }; - _overflowHashCode; - constructor(_aggregator, aggregationCardinalityLimit) { - this._aggregator = _aggregator; - this._cardinalityLimit = (aggregationCardinalityLimit ?? 2000) - 1; - this._overflowHashCode = (0, utils_1.hashAttributes)(this._overflowAttributes); - } - record(value, attributes, _context, collectionTime) { - let accumulation = this._activeCollectionStorage.get(attributes); - if (!accumulation) { - if (this._activeCollectionStorage.size >= this._cardinalityLimit) { - const overflowAccumulation = this._activeCollectionStorage.getOrDefault(this._overflowAttributes, () => this._aggregator.createAccumulation(collectionTime)); - overflowAccumulation?.record(value); - return; - } - accumulation = this._aggregator.createAccumulation(collectionTime); - this._activeCollectionStorage.set(attributes, accumulation); - } - accumulation?.record(value); - } - batchCumulate(measurements, collectionTime) { - Array.from(measurements.entries()).forEach(([attributes, value, hashCode]) => { - const accumulation = this._aggregator.createAccumulation(collectionTime); - accumulation?.record(value); - let delta = accumulation; - if (this._cumulativeMemoStorage.has(attributes, hashCode)) { - const previous = this._cumulativeMemoStorage.get(attributes, hashCode); - delta = this._aggregator.diff(previous, accumulation); - } else { - if (this._cumulativeMemoStorage.size >= this._cardinalityLimit) { - attributes = this._overflowAttributes; - hashCode = this._overflowHashCode; - if (this._cumulativeMemoStorage.has(attributes, hashCode)) { - const previous = this._cumulativeMemoStorage.get(attributes, hashCode); - delta = this._aggregator.diff(previous, accumulation); - } - } - } - if (this._activeCollectionStorage.has(attributes, hashCode)) { - const active = this._activeCollectionStorage.get(attributes, hashCode); - delta = this._aggregator.merge(active, delta); - } - this._cumulativeMemoStorage.set(attributes, accumulation, hashCode); - this._activeCollectionStorage.set(attributes, delta, hashCode); - }); - } - collect() { - const unreportedDelta = this._activeCollectionStorage; - this._activeCollectionStorage = new HashMap_1.AttributeHashMap; - return unreportedDelta; - } - } - exports.DeltaMetricProcessor = DeltaMetricProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/TemporalMetricProcessor.js -var require_TemporalMetricProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TemporalMetricProcessor = undefined; - var AggregationTemporality_1 = require_AggregationTemporality(); - var HashMap_1 = require_HashMap(); - - class TemporalMetricProcessor { - _aggregator; - _unreportedAccumulations = new Map; - _reportHistory = new Map; - constructor(_aggregator, collectorHandles) { - this._aggregator = _aggregator; - collectorHandles.forEach((handle) => { - this._unreportedAccumulations.set(handle, []); - }); - } - buildMetrics(collector, instrumentDescriptor, currentAccumulations, collectionTime) { - this._stashAccumulations(currentAccumulations); - const unreportedAccumulations = this._getMergedUnreportedAccumulations(collector); - let result = unreportedAccumulations; - let aggregationTemporality; - if (this._reportHistory.has(collector)) { - const last = this._reportHistory.get(collector); - const lastCollectionTime = last.collectionTime; - aggregationTemporality = last.aggregationTemporality; - if (aggregationTemporality === AggregationTemporality_1.AggregationTemporality.CUMULATIVE) { - result = TemporalMetricProcessor.merge(last.accumulations, unreportedAccumulations, this._aggregator); - } else { - result = TemporalMetricProcessor.calibrateStartTime(last.accumulations, unreportedAccumulations, lastCollectionTime); - } - } else { - aggregationTemporality = collector.selectAggregationTemporality(instrumentDescriptor.type); - } - this._reportHistory.set(collector, { - accumulations: result, - collectionTime, - aggregationTemporality - }); - const accumulationRecords = AttributesMapToAccumulationRecords(result); - if (accumulationRecords.length === 0) { - return; - } - return this._aggregator.toMetricData(instrumentDescriptor, aggregationTemporality, accumulationRecords, collectionTime); - } - _stashAccumulations(currentAccumulation) { - const registeredCollectors = this._unreportedAccumulations.keys(); - for (const collector of registeredCollectors) { - let stash = this._unreportedAccumulations.get(collector); - if (stash === undefined) { - stash = []; - this._unreportedAccumulations.set(collector, stash); - } - stash.push(currentAccumulation); - } - } - _getMergedUnreportedAccumulations(collector) { - let result = new HashMap_1.AttributeHashMap; - const unreportedList = this._unreportedAccumulations.get(collector); - this._unreportedAccumulations.set(collector, []); - if (unreportedList === undefined) { - return result; - } - for (const it of unreportedList) { - result = TemporalMetricProcessor.merge(result, it, this._aggregator); - } - return result; - } - static merge(last, current, aggregator) { - const result = last; - const iterator = current.entries(); - let next = iterator.next(); - while (next.done !== true) { - const [key, record3, hash2] = next.value; - if (last.has(key, hash2)) { - const lastAccumulation = last.get(key, hash2); - const accumulation = aggregator.merge(lastAccumulation, record3); - result.set(key, accumulation, hash2); - } else { - result.set(key, record3, hash2); - } - next = iterator.next(); - } - return result; - } - static calibrateStartTime(last, current, lastCollectionTime) { - for (const [key, hash2] of last.keys()) { - const currentAccumulation = current.get(key, hash2); - currentAccumulation?.setStartTime(lastCollectionTime); - } - return current; - } - } - exports.TemporalMetricProcessor = TemporalMetricProcessor; - function AttributesMapToAccumulationRecords(map2) { - return Array.from(map2.entries()); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/AsyncMetricStorage.js -var require_AsyncMetricStorage = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncMetricStorage = undefined; - var MetricStorage_1 = require_MetricStorage(); - var DeltaMetricProcessor_1 = require_DeltaMetricProcessor(); - var TemporalMetricProcessor_1 = require_TemporalMetricProcessor(); - var HashMap_1 = require_HashMap(); - - class AsyncMetricStorage extends MetricStorage_1.MetricStorage { - _attributesProcessor; - _aggregationCardinalityLimit; - _deltaMetricStorage; - _temporalMetricStorage; - constructor(_instrumentDescriptor, aggregator, _attributesProcessor, collectorHandles, _aggregationCardinalityLimit) { - super(_instrumentDescriptor); - this._attributesProcessor = _attributesProcessor; - this._aggregationCardinalityLimit = _aggregationCardinalityLimit; - this._deltaMetricStorage = new DeltaMetricProcessor_1.DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit); - this._temporalMetricStorage = new TemporalMetricProcessor_1.TemporalMetricProcessor(aggregator, collectorHandles); - } - record(measurements, observationTime) { - const processed = new HashMap_1.AttributeHashMap; - Array.from(measurements.entries()).forEach(([attributes, value]) => { - processed.set(this._attributesProcessor.process(attributes), value); - }); - this._deltaMetricStorage.batchCumulate(processed, observationTime); - } - collect(collector, collectionTime) { - const accumulations = this._deltaMetricStorage.collect(); - return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime); - } - } - exports.AsyncMetricStorage = AsyncMetricStorage; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/RegistrationConflicts.js -var require_RegistrationConflicts = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getConflictResolutionRecipe = exports.getDescriptionResolutionRecipe = exports.getTypeConflictResolutionRecipe = exports.getUnitConflictResolutionRecipe = exports.getValueTypeConflictResolutionRecipe = exports.getIncompatibilityDetails = undefined; - function getIncompatibilityDetails(existing, otherDescriptor) { - let incompatibility = ""; - if (existing.unit !== otherDescriptor.unit) { - incompatibility += ` - Unit '${existing.unit}' does not match '${otherDescriptor.unit}' -`; - } - if (existing.type !== otherDescriptor.type) { - incompatibility += ` - Type '${existing.type}' does not match '${otherDescriptor.type}' -`; - } - if (existing.valueType !== otherDescriptor.valueType) { - incompatibility += ` - Value Type '${existing.valueType}' does not match '${otherDescriptor.valueType}' -`; - } - if (existing.description !== otherDescriptor.description) { - incompatibility += ` - Description '${existing.description}' does not match '${otherDescriptor.description}' -`; - } - return incompatibility; - } - exports.getIncompatibilityDetails = getIncompatibilityDetails; - function getValueTypeConflictResolutionRecipe(existing, otherDescriptor) { - return ` - use valueType '${existing.valueType}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`; - } - exports.getValueTypeConflictResolutionRecipe = getValueTypeConflictResolutionRecipe; - function getUnitConflictResolutionRecipe(existing, otherDescriptor) { - return ` - use unit '${existing.unit}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`; - } - exports.getUnitConflictResolutionRecipe = getUnitConflictResolutionRecipe; - function getTypeConflictResolutionRecipe(existing, otherDescriptor) { - const selector = { - name: otherDescriptor.name, - type: otherDescriptor.type, - unit: otherDescriptor.unit - }; - const selectorString = JSON.stringify(selector); - return ` - create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}'`; - } - exports.getTypeConflictResolutionRecipe = getTypeConflictResolutionRecipe; - function getDescriptionResolutionRecipe(existing, otherDescriptor) { - const selector = { - name: otherDescriptor.name, - type: otherDescriptor.type, - unit: otherDescriptor.unit - }; - const selectorString = JSON.stringify(selector); - return ` - create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}' - - OR - create a new view with the name ${existing.name} and description '${existing.description}' and InstrumentSelector ${selectorString} - - OR - create a new view with the name ${otherDescriptor.name} and description '${existing.description}' and InstrumentSelector ${selectorString}`; - } - exports.getDescriptionResolutionRecipe = getDescriptionResolutionRecipe; - function getConflictResolutionRecipe(existing, otherDescriptor) { - if (existing.valueType !== otherDescriptor.valueType) { - return getValueTypeConflictResolutionRecipe(existing, otherDescriptor); - } - if (existing.unit !== otherDescriptor.unit) { - return getUnitConflictResolutionRecipe(existing, otherDescriptor); - } - if (existing.type !== otherDescriptor.type) { - return getTypeConflictResolutionRecipe(existing, otherDescriptor); - } - if (existing.description !== otherDescriptor.description) { - return getDescriptionResolutionRecipe(existing, otherDescriptor); - } - return ""; - } - exports.getConflictResolutionRecipe = getConflictResolutionRecipe; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorageRegistry.js -var require_MetricStorageRegistry = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricStorageRegistry = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor(); - var api4 = require_src(); - var RegistrationConflicts_1 = require_RegistrationConflicts(); - - class MetricStorageRegistry { - _sharedRegistry = new Map; - _perCollectorRegistry = new Map; - static create() { - return new MetricStorageRegistry; - } - getStorages(collector) { - let storages = []; - for (const metricStorages of this._sharedRegistry.values()) { - storages = storages.concat(metricStorages); - } - const perCollectorStorages = this._perCollectorRegistry.get(collector); - if (perCollectorStorages != null) { - for (const metricStorages of perCollectorStorages.values()) { - storages = storages.concat(metricStorages); - } - } - return storages; - } - register(storage) { - this._registerStorage(storage, this._sharedRegistry); - } - registerForCollector(collector, storage) { - let storageMap = this._perCollectorRegistry.get(collector); - if (storageMap == null) { - storageMap = new Map; - this._perCollectorRegistry.set(collector, storageMap); - } - this._registerStorage(storage, storageMap); - } - findOrUpdateCompatibleStorage(expectedDescriptor) { - const storages = this._sharedRegistry.get(expectedDescriptor.name); - if (storages === undefined) { - return null; - } - return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages); - } - findOrUpdateCompatibleCollectorStorage(collector, expectedDescriptor) { - const storageMap = this._perCollectorRegistry.get(collector); - if (storageMap === undefined) { - return null; - } - const storages = storageMap.get(expectedDescriptor.name); - if (storages === undefined) { - return null; - } - return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages); - } - _registerStorage(storage, storageMap) { - const descriptor = storage.getInstrumentDescriptor(); - const storages = storageMap.get(descriptor.name); - if (storages === undefined) { - storageMap.set(descriptor.name, [storage]); - return; - } - storages.push(storage); - } - _findOrUpdateCompatibleStorage(expectedDescriptor, existingStorages) { - let compatibleStorage = null; - for (const existingStorage of existingStorages) { - const existingDescriptor = existingStorage.getInstrumentDescriptor(); - if ((0, InstrumentDescriptor_1.isDescriptorCompatibleWith)(existingDescriptor, expectedDescriptor)) { - if (existingDescriptor.description !== expectedDescriptor.description) { - if (expectedDescriptor.description.length > existingDescriptor.description.length) { - existingStorage.updateDescription(expectedDescriptor.description); - } - api4.diag.warn("A view or instrument with the name ", expectedDescriptor.name, ` has already been registered, but has a different description and is incompatible with another registered view. -`, `Details: -`, (0, RegistrationConflicts_1.getIncompatibilityDetails)(existingDescriptor, expectedDescriptor), `The longer description will be used. -To resolve the conflict:`, (0, RegistrationConflicts_1.getConflictResolutionRecipe)(existingDescriptor, expectedDescriptor)); - } - compatibleStorage = existingStorage; - } else { - api4.diag.warn("A view or instrument with the name ", expectedDescriptor.name, ` has already been registered and is incompatible with another registered view. -`, `Details: -`, (0, RegistrationConflicts_1.getIncompatibilityDetails)(existingDescriptor, expectedDescriptor), `To resolve the conflict: -`, (0, RegistrationConflicts_1.getConflictResolutionRecipe)(existingDescriptor, expectedDescriptor)); - } - } - return compatibleStorage; - } - } - exports.MetricStorageRegistry = MetricStorageRegistry; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MultiWritableMetricStorage.js -var require_MultiWritableMetricStorage = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MultiMetricStorage = undefined; - - class MultiMetricStorage { - _backingStorages; - constructor(_backingStorages) { - this._backingStorages = _backingStorages; - } - record(value, attributes, context8, recordTime) { - this._backingStorages.forEach((it) => { - it.record(value, attributes, context8, recordTime); - }); - } - } - exports.MultiMetricStorage = MultiMetricStorage; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/ObservableResult.js -var require_ObservableResult = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchObservableResultImpl = exports.ObservableResultImpl = undefined; - var api_1 = require_src(); - var HashMap_1 = require_HashMap(); - var Instruments_1 = require_Instruments(); - - class ObservableResultImpl { - _instrumentName; - _valueType; - _buffer = new HashMap_1.AttributeHashMap; - constructor(_instrumentName, _valueType) { - this._instrumentName = _instrumentName; - this._valueType = _valueType; - } - observe(value, attributes = {}) { - if (typeof value !== "number") { - api_1.diag.warn(`non-number value provided to metric ${this._instrumentName}: ${value}`); - return; - } - if (this._valueType === api_1.ValueType.INT && !Number.isInteger(value)) { - api_1.diag.warn(`INT value type cannot accept a floating-point value for ${this._instrumentName}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - this._buffer.set(attributes, value); - } - } - exports.ObservableResultImpl = ObservableResultImpl; - - class BatchObservableResultImpl { - _buffer = new Map; - observe(metric, value, attributes = {}) { - if (!(0, Instruments_1.isObservableInstrument)(metric)) { - return; - } - let map2 = this._buffer.get(metric); - if (map2 == null) { - map2 = new HashMap_1.AttributeHashMap; - this._buffer.set(metric, map2); - } - if (typeof value !== "number") { - api_1.diag.warn(`non-number value provided to metric ${metric._descriptor.name}: ${value}`); - return; - } - if (metric._descriptor.valueType === api_1.ValueType.INT && !Number.isInteger(value)) { - api_1.diag.warn(`INT value type cannot accept a floating-point value for ${metric._descriptor.name}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - map2.set(attributes, value); - } - } - exports.BatchObservableResultImpl = BatchObservableResultImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/ObservableRegistry.js -var require_ObservableRegistry = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ObservableRegistry = undefined; - var api_1 = require_src(); - var Instruments_1 = require_Instruments(); - var ObservableResult_1 = require_ObservableResult(); - var utils_1 = require_utils42(); - - class ObservableRegistry { - _callbacks = []; - _batchCallbacks = []; - addCallback(callback, instrument) { - const idx = this._findCallback(callback, instrument); - if (idx >= 0) { - return; - } - this._callbacks.push({ callback, instrument }); - } - removeCallback(callback, instrument) { - const idx = this._findCallback(callback, instrument); - if (idx < 0) { - return; - } - this._callbacks.splice(idx, 1); - } - addBatchCallback(callback, instruments) { - const observableInstruments = new Set(instruments.filter(Instruments_1.isObservableInstrument)); - if (observableInstruments.size === 0) { - api_1.diag.error("BatchObservableCallback is not associated with valid instruments", instruments); - return; - } - const idx = this._findBatchCallback(callback, observableInstruments); - if (idx >= 0) { - return; - } - this._batchCallbacks.push({ callback, instruments: observableInstruments }); - } - removeBatchCallback(callback, instruments) { - const observableInstruments = new Set(instruments.filter(Instruments_1.isObservableInstrument)); - const idx = this._findBatchCallback(callback, observableInstruments); - if (idx < 0) { - return; - } - this._batchCallbacks.splice(idx, 1); - } - async observe(collectionTime, timeoutMillis) { - const callbackFutures = this._observeCallbacks(collectionTime, timeoutMillis); - const batchCallbackFutures = this._observeBatchCallbacks(collectionTime, timeoutMillis); - const results = await (0, utils_1.PromiseAllSettled)([ - ...callbackFutures, - ...batchCallbackFutures - ]); - const rejections = results.filter(utils_1.isPromiseAllSettledRejectionResult).map((it) => it.reason); - return rejections; - } - _observeCallbacks(observationTime, timeoutMillis) { - return this._callbacks.map(async ({ callback, instrument }) => { - const observableResult = new ObservableResult_1.ObservableResultImpl(instrument._descriptor.name, instrument._descriptor.valueType); - let callPromise = Promise.resolve(callback(observableResult)); - if (timeoutMillis != null) { - callPromise = (0, utils_1.callWithTimeout)(callPromise, timeoutMillis); - } - await callPromise; - instrument._metricStorages.forEach((metricStorage) => { - metricStorage.record(observableResult._buffer, observationTime); - }); - }); - } - _observeBatchCallbacks(observationTime, timeoutMillis) { - return this._batchCallbacks.map(async ({ callback, instruments }) => { - const observableResult = new ObservableResult_1.BatchObservableResultImpl; - let callPromise = Promise.resolve(callback(observableResult)); - if (timeoutMillis != null) { - callPromise = (0, utils_1.callWithTimeout)(callPromise, timeoutMillis); - } - await callPromise; - instruments.forEach((instrument) => { - const buffer = observableResult._buffer.get(instrument); - if (buffer == null) { - return; - } - instrument._metricStorages.forEach((metricStorage) => { - metricStorage.record(buffer, observationTime); - }); - }); - }); - } - _findCallback(callback, instrument) { - return this._callbacks.findIndex((record3) => { - return record3.callback === callback && record3.instrument === instrument; - }); - } - _findBatchCallback(callback, instruments) { - return this._batchCallbacks.findIndex((record3) => { - return record3.callback === callback && (0, utils_1.setEquals)(record3.instruments, instruments); - }); - } - } - exports.ObservableRegistry = ObservableRegistry; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/SyncMetricStorage.js -var require_SyncMetricStorage = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SyncMetricStorage = undefined; - var MetricStorage_1 = require_MetricStorage(); - var DeltaMetricProcessor_1 = require_DeltaMetricProcessor(); - var TemporalMetricProcessor_1 = require_TemporalMetricProcessor(); - - class SyncMetricStorage extends MetricStorage_1.MetricStorage { - _attributesProcessor; - _aggregationCardinalityLimit; - _deltaMetricStorage; - _temporalMetricStorage; - constructor(instrumentDescriptor, aggregator, _attributesProcessor, collectorHandles, _aggregationCardinalityLimit) { - super(instrumentDescriptor); - this._attributesProcessor = _attributesProcessor; - this._aggregationCardinalityLimit = _aggregationCardinalityLimit; - this._deltaMetricStorage = new DeltaMetricProcessor_1.DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit); - this._temporalMetricStorage = new TemporalMetricProcessor_1.TemporalMetricProcessor(aggregator, collectorHandles); - } - record(value, attributes, context8, recordTime) { - attributes = this._attributesProcessor.process(attributes, context8); - this._deltaMetricStorage.record(value, attributes, context8, recordTime); - } - collect(collector, collectionTime) { - const accumulations = this._deltaMetricStorage.collect(); - return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime); - } - } - exports.SyncMetricStorage = SyncMetricStorage; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.js -var require_AttributesProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createDenyListAttributesProcessor = exports.createAllowListAttributesProcessor = exports.createMultiAttributesProcessor = exports.createNoopAttributesProcessor = undefined; - - class NoopAttributesProcessor { - process(incoming, _context) { - return incoming; - } - } - - class MultiAttributesProcessor { - _processors; - constructor(_processors) { - this._processors = _processors; - } - process(incoming, context8) { - let filteredAttributes = incoming; - for (const processor of this._processors) { - filteredAttributes = processor.process(filteredAttributes, context8); - } - return filteredAttributes; - } - } - - class AllowListProcessor { - _allowedAttributeNames; - constructor(_allowedAttributeNames) { - this._allowedAttributeNames = _allowedAttributeNames; - } - process(incoming, _context) { - const filteredAttributes = {}; - Object.keys(incoming).filter((attributeName) => this._allowedAttributeNames.includes(attributeName)).forEach((attributeName) => filteredAttributes[attributeName] = incoming[attributeName]); - return filteredAttributes; - } - } - - class DenyListProcessor { - _deniedAttributeNames; - constructor(_deniedAttributeNames) { - this._deniedAttributeNames = _deniedAttributeNames; - } - process(incoming, _context) { - const filteredAttributes = {}; - Object.keys(incoming).filter((attributeName) => !this._deniedAttributeNames.includes(attributeName)).forEach((attributeName) => filteredAttributes[attributeName] = incoming[attributeName]); - return filteredAttributes; - } - } - function createNoopAttributesProcessor() { - return NOOP; - } - exports.createNoopAttributesProcessor = createNoopAttributesProcessor; - function createMultiAttributesProcessor(processors) { - return new MultiAttributesProcessor(processors); - } - exports.createMultiAttributesProcessor = createMultiAttributesProcessor; - function createAllowListAttributesProcessor(attributeAllowList) { - return new AllowListProcessor(attributeAllowList); - } - exports.createAllowListAttributesProcessor = createAllowListAttributesProcessor; - function createDenyListAttributesProcessor(attributeDenyList) { - return new DenyListProcessor(attributeDenyList); - } - exports.createDenyListAttributesProcessor = createDenyListAttributesProcessor; - var NOOP = new NoopAttributesProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterSharedState.js -var require_MeterSharedState = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterSharedState = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor(); - var Meter_1 = require_Meter(); - var utils_1 = require_utils42(); - var AsyncMetricStorage_1 = require_AsyncMetricStorage(); - var MetricStorageRegistry_1 = require_MetricStorageRegistry(); - var MultiWritableMetricStorage_1 = require_MultiWritableMetricStorage(); - var ObservableRegistry_1 = require_ObservableRegistry(); - var SyncMetricStorage_1 = require_SyncMetricStorage(); - var AttributesProcessor_1 = require_AttributesProcessor(); - - class MeterSharedState { - _meterProviderSharedState; - _instrumentationScope; - metricStorageRegistry = new MetricStorageRegistry_1.MetricStorageRegistry; - observableRegistry = new ObservableRegistry_1.ObservableRegistry; - meter; - constructor(_meterProviderSharedState, _instrumentationScope) { - this._meterProviderSharedState = _meterProviderSharedState; - this._instrumentationScope = _instrumentationScope; - this.meter = new Meter_1.Meter(this); - } - registerMetricStorage(descriptor) { - const storages = this._registerMetricStorage(descriptor, SyncMetricStorage_1.SyncMetricStorage); - if (storages.length === 1) { - return storages[0]; - } - return new MultiWritableMetricStorage_1.MultiMetricStorage(storages); - } - registerAsyncMetricStorage(descriptor) { - const storages = this._registerMetricStorage(descriptor, AsyncMetricStorage_1.AsyncMetricStorage); - return storages; - } - async collect(collector, collectionTime, options) { - const errors3 = await this.observableRegistry.observe(collectionTime, options?.timeoutMillis); - const storages = this.metricStorageRegistry.getStorages(collector); - if (storages.length === 0) { - return null; - } - const metricDataList = storages.map((metricStorage) => { - return metricStorage.collect(collector, collectionTime); - }).filter(utils_1.isNotNullish); - if (metricDataList.length === 0) { - return { errors: errors3 }; - } - return { - scopeMetrics: { - scope: this._instrumentationScope, - metrics: metricDataList - }, - errors: errors3 - }; - } - _registerMetricStorage(descriptor, MetricStorageType) { - const views = this._meterProviderSharedState.viewRegistry.findViews(descriptor, this._instrumentationScope); - let storages = views.map((view) => { - const viewDescriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptorWithView)(view, descriptor); - const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleStorage(viewDescriptor); - if (compatibleStorage != null) { - return compatibleStorage; - } - const aggregator = view.aggregation.createAggregator(viewDescriptor); - const viewStorage = new MetricStorageType(viewDescriptor, aggregator, view.attributesProcessor, this._meterProviderSharedState.metricCollectors, view.aggregationCardinalityLimit); - this.metricStorageRegistry.register(viewStorage); - return viewStorage; - }); - if (storages.length === 0) { - const perCollectorAggregations = this._meterProviderSharedState.selectAggregations(descriptor.type); - const collectorStorages = perCollectorAggregations.map(([collector, aggregation]) => { - const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleCollectorStorage(collector, descriptor); - if (compatibleStorage != null) { - return compatibleStorage; - } - const aggregator = aggregation.createAggregator(descriptor); - const cardinalityLimit = collector.selectCardinalityLimit(descriptor.type); - const storage = new MetricStorageType(descriptor, aggregator, (0, AttributesProcessor_1.createNoopAttributesProcessor)(), [collector], cardinalityLimit); - this.metricStorageRegistry.registerForCollector(collector, storage); - return storage; - }); - storages = storages.concat(collectorStorages); - } - return storages; - } - } - exports.MeterSharedState = MeterSharedState; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterProviderSharedState.js -var require_MeterProviderSharedState = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterProviderSharedState = undefined; - var utils_1 = require_utils42(); - var ViewRegistry_1 = require_ViewRegistry(); - var MeterSharedState_1 = require_MeterSharedState(); - var AggregationOption_1 = require_AggregationOption(); - - class MeterProviderSharedState { - resource; - viewRegistry = new ViewRegistry_1.ViewRegistry; - metricCollectors = []; - meterSharedStates = new Map; - constructor(resource) { - this.resource = resource; - } - getMeterSharedState(instrumentationScope) { - const id = (0, utils_1.instrumentationScopeId)(instrumentationScope); - let meterSharedState = this.meterSharedStates.get(id); - if (meterSharedState == null) { - meterSharedState = new MeterSharedState_1.MeterSharedState(this, instrumentationScope); - this.meterSharedStates.set(id, meterSharedState); - } - return meterSharedState; - } - selectAggregations(instrumentType) { - const result = []; - for (const collector of this.metricCollectors) { - result.push([ - collector, - (0, AggregationOption_1.toAggregation)(collector.selectAggregation(instrumentType)) - ]); - } - return result; - } - } - exports.MeterProviderSharedState = MeterProviderSharedState; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricCollector.js -var require_MetricCollector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricCollector = undefined; - var core_1 = require_src7(); - - class MetricCollector { - _sharedState; - _metricReader; - constructor(_sharedState, _metricReader) { - this._sharedState = _sharedState; - this._metricReader = _metricReader; - } - async collect(options) { - const collectionTime = (0, core_1.millisToHrTime)(Date.now()); - const scopeMetrics = []; - const errors3 = []; - const meterCollectionPromises = Array.from(this._sharedState.meterSharedStates.values()).map(async (meterSharedState) => { - const current = await meterSharedState.collect(this, collectionTime, options); - if (current?.scopeMetrics != null) { - scopeMetrics.push(current.scopeMetrics); - } - if (current?.errors != null) { - errors3.push(...current.errors); - } - }); - await Promise.all(meterCollectionPromises); - return { - resourceMetrics: { - resource: this._sharedState.resource, - scopeMetrics - }, - errors: errors3 - }; - } - async forceFlush(options) { - await this._metricReader.forceFlush(options); - } - async shutdown(options) { - await this._metricReader.shutdown(options); - } - selectAggregationTemporality(instrumentType) { - return this._metricReader.selectAggregationTemporality(instrumentType); - } - selectAggregation(instrumentType) { - return this._metricReader.selectAggregation(instrumentType); - } - selectCardinalityLimit(instrumentType) { - return this._metricReader.selectCardinalityLimit?.(instrumentType) ?? 2000; - } - } - exports.MetricCollector = MetricCollector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/Predicate.js -var require_Predicate = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExactPredicate = exports.PatternPredicate = undefined; - var ESCAPE = /[\^$\\.+?()[\]{}|]/g; - - class PatternPredicate { - _matchAll; - _regexp; - constructor(pattern) { - if (pattern === "*") { - this._matchAll = true; - this._regexp = /.*/; - } else { - this._matchAll = false; - this._regexp = new RegExp(PatternPredicate.escapePattern(pattern)); - } - } - match(str) { - if (this._matchAll) { - return true; - } - return this._regexp.test(str); - } - static escapePattern(pattern) { - return `^${pattern.replace(ESCAPE, "\\$&").replace("*", ".*")}$`; - } - static hasWildcard(pattern) { - return pattern.includes("*"); - } - } - exports.PatternPredicate = PatternPredicate; - - class ExactPredicate { - _matchAll; - _pattern; - constructor(pattern) { - this._matchAll = pattern === undefined; - this._pattern = pattern; - } - match(str) { - if (this._matchAll) { - return true; - } - if (str === this._pattern) { - return true; - } - return false; - } - } - exports.ExactPredicate = ExactPredicate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.js -var require_InstrumentSelector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentSelector = undefined; - var Predicate_1 = require_Predicate(); - - class InstrumentSelector { - _nameFilter; - _type; - _unitFilter; - constructor(criteria) { - this._nameFilter = new Predicate_1.PatternPredicate(criteria?.name ?? "*"); - this._type = criteria?.type; - this._unitFilter = new Predicate_1.ExactPredicate(criteria?.unit); - } - getType() { - return this._type; - } - getNameFilter() { - return this._nameFilter; - } - getUnitFilter() { - return this._unitFilter; - } - } - exports.InstrumentSelector = InstrumentSelector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/MeterSelector.js -var require_MeterSelector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterSelector = undefined; - var Predicate_1 = require_Predicate(); - - class MeterSelector { - _nameFilter; - _versionFilter; - _schemaUrlFilter; - constructor(criteria) { - this._nameFilter = new Predicate_1.ExactPredicate(criteria?.name); - this._versionFilter = new Predicate_1.ExactPredicate(criteria?.version); - this._schemaUrlFilter = new Predicate_1.ExactPredicate(criteria?.schemaUrl); - } - getNameFilter() { - return this._nameFilter; - } - getVersionFilter() { - return this._versionFilter; - } - getSchemaUrlFilter() { - return this._schemaUrlFilter; - } - } - exports.MeterSelector = MeterSelector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.js -var require_View = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.View = undefined; - var Predicate_1 = require_Predicate(); - var AttributesProcessor_1 = require_AttributesProcessor(); - var InstrumentSelector_1 = require_InstrumentSelector(); - var MeterSelector_1 = require_MeterSelector(); - var AggregationOption_1 = require_AggregationOption(); - function isSelectorNotProvided(options) { - return options.instrumentName == null && options.instrumentType == null && options.instrumentUnit == null && options.meterName == null && options.meterVersion == null && options.meterSchemaUrl == null; - } - function validateViewOptions(viewOptions) { - if (isSelectorNotProvided(viewOptions)) { - throw new Error("Cannot create view with no selector arguments supplied"); - } - if (viewOptions.name != null && (viewOptions?.instrumentName == null || Predicate_1.PatternPredicate.hasWildcard(viewOptions.instrumentName))) { - throw new Error("Views with a specified name must be declared with an instrument selector that selects at most one instrument per meter."); - } - } - - class View { - name; - description; - aggregation; - attributesProcessor; - instrumentSelector; - meterSelector; - aggregationCardinalityLimit; - constructor(viewOptions) { - validateViewOptions(viewOptions); - if (viewOptions.attributesProcessors != null) { - this.attributesProcessor = (0, AttributesProcessor_1.createMultiAttributesProcessor)(viewOptions.attributesProcessors); - } else { - this.attributesProcessor = (0, AttributesProcessor_1.createNoopAttributesProcessor)(); - } - this.name = viewOptions.name; - this.description = viewOptions.description; - this.aggregation = (0, AggregationOption_1.toAggregation)(viewOptions.aggregation ?? { type: AggregationOption_1.AggregationType.DEFAULT }); - this.instrumentSelector = new InstrumentSelector_1.InstrumentSelector({ - name: viewOptions.instrumentName, - type: viewOptions.instrumentType, - unit: viewOptions.instrumentUnit - }); - this.meterSelector = new MeterSelector_1.MeterSelector({ - name: viewOptions.meterName, - version: viewOptions.meterVersion, - schemaUrl: viewOptions.meterSchemaUrl - }); - this.aggregationCardinalityLimit = viewOptions.aggregationCardinalityLimit; - } - } - exports.View = View; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.js -var require_MeterProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterProvider = undefined; - var api_1 = require_src(); - var resources_1 = require_src56(); - var MeterProviderSharedState_1 = require_MeterProviderSharedState(); - var MetricCollector_1 = require_MetricCollector(); - var View_1 = require_View(); - - class MeterProvider { - _sharedState; - _shutdown = false; - constructor(options) { - this._sharedState = new MeterProviderSharedState_1.MeterProviderSharedState(options?.resource ?? (0, resources_1.defaultResource)()); - if (options?.views != null && options.views.length > 0) { - for (const viewOption of options.views) { - this._sharedState.viewRegistry.addView(new View_1.View(viewOption)); - } - } - if (options?.readers != null && options.readers.length > 0) { - for (const metricReader of options.readers) { - const collector = new MetricCollector_1.MetricCollector(this._sharedState, metricReader); - metricReader.setMetricProducer(collector); - this._sharedState.metricCollectors.push(collector); - } - } - } - getMeter(name, version2 = "", options = {}) { - if (this._shutdown) { - api_1.diag.warn("A shutdown MeterProvider cannot provide a Meter"); - return (0, api_1.createNoopMeter)(); - } - return this._sharedState.getMeterSharedState({ - name, - version: version2, - schemaUrl: options.schemaUrl - }).meter; - } - async shutdown(options) { - if (this._shutdown) { - api_1.diag.warn("shutdown may only be called once per MeterProvider"); - return; - } - this._shutdown = true; - await Promise.all(this._sharedState.metricCollectors.map((collector) => { - return collector.shutdown(options); - })); - } - async forceFlush(options) { - if (this._shutdown) { - api_1.diag.warn("invalid attempt to force flush after MeterProvider shutdown"); - return; - } - await Promise.all(this._sharedState.metricCollectors.map((collector) => { - return collector.forceFlush(options); - })); - } - } - exports.MeterProvider = MeterProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/index.js -var require_src64 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TimeoutError = exports.createDenyListAttributesProcessor = exports.createAllowListAttributesProcessor = exports.AggregationType = exports.MeterProvider = exports.ConsoleMetricExporter = exports.InMemoryMetricExporter = exports.PeriodicExportingMetricReader = exports.MetricReader = exports.InstrumentType = exports.DataPointType = exports.AggregationTemporality = undefined; - var AggregationTemporality_1 = require_AggregationTemporality(); - Object.defineProperty(exports, "AggregationTemporality", { enumerable: true, get: function() { - return AggregationTemporality_1.AggregationTemporality; - } }); - var MetricData_1 = require_MetricData(); - Object.defineProperty(exports, "DataPointType", { enumerable: true, get: function() { - return MetricData_1.DataPointType; - } }); - Object.defineProperty(exports, "InstrumentType", { enumerable: true, get: function() { - return MetricData_1.InstrumentType; - } }); - var MetricReader_1 = require_MetricReader(); - Object.defineProperty(exports, "MetricReader", { enumerable: true, get: function() { - return MetricReader_1.MetricReader; - } }); - var PeriodicExportingMetricReader_1 = require_PeriodicExportingMetricReader(); - Object.defineProperty(exports, "PeriodicExportingMetricReader", { enumerable: true, get: function() { - return PeriodicExportingMetricReader_1.PeriodicExportingMetricReader; - } }); - var InMemoryMetricExporter_1 = require_InMemoryMetricExporter(); - Object.defineProperty(exports, "InMemoryMetricExporter", { enumerable: true, get: function() { - return InMemoryMetricExporter_1.InMemoryMetricExporter; - } }); - var ConsoleMetricExporter_1 = require_ConsoleMetricExporter(); - Object.defineProperty(exports, "ConsoleMetricExporter", { enumerable: true, get: function() { - return ConsoleMetricExporter_1.ConsoleMetricExporter; - } }); - var MeterProvider_1 = require_MeterProvider(); - Object.defineProperty(exports, "MeterProvider", { enumerable: true, get: function() { - return MeterProvider_1.MeterProvider; - } }); - var AggregationOption_1 = require_AggregationOption(); - Object.defineProperty(exports, "AggregationType", { enumerable: true, get: function() { - return AggregationOption_1.AggregationType; - } }); - var AttributesProcessor_1 = require_AttributesProcessor(); - Object.defineProperty(exports, "createAllowListAttributesProcessor", { enumerable: true, get: function() { - return AttributesProcessor_1.createAllowListAttributesProcessor; - } }); - Object.defineProperty(exports, "createDenyListAttributesProcessor", { enumerable: true, get: function() { - return AttributesProcessor_1.createDenyListAttributesProcessor; - } }); - var utils_1 = require_utils42(); - Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function() { - return utils_1.TimeoutError; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal-types.js -var require_internal_types11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EAggregationTemporality = undefined; - var EAggregationTemporality; - (function(EAggregationTemporality2) { - EAggregationTemporality2[EAggregationTemporality2["AGGREGATION_TEMPORALITY_UNSPECIFIED"] = 0] = "AGGREGATION_TEMPORALITY_UNSPECIFIED"; - EAggregationTemporality2[EAggregationTemporality2["AGGREGATION_TEMPORALITY_DELTA"] = 1] = "AGGREGATION_TEMPORALITY_DELTA"; - EAggregationTemporality2[EAggregationTemporality2["AGGREGATION_TEMPORALITY_CUMULATIVE"] = 2] = "AGGREGATION_TEMPORALITY_CUMULATIVE"; - })(EAggregationTemporality = exports.EAggregationTemporality || (exports.EAggregationTemporality = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal.js -var require_internal3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createExportMetricsServiceRequest = exports.toMetric = exports.toScopeMetrics = exports.toResourceMetrics = undefined; - var api_1 = require_src(); - var sdk_metrics_1 = require_src64(); - var internal_types_1 = require_internal_types11(); - var utils_1 = require_utils41(); - var internal_1 = require_internal(); - function toResourceMetrics(resourceMetrics, options) { - const encoder2 = (0, utils_1.getOtlpEncoder)(options); - const processedResource = (0, internal_1.createResource)(resourceMetrics.resource); - return { - resource: processedResource, - schemaUrl: processedResource.schemaUrl, - scopeMetrics: toScopeMetrics(resourceMetrics.scopeMetrics, encoder2) - }; - } - exports.toResourceMetrics = toResourceMetrics; - function toScopeMetrics(scopeMetrics, encoder2) { - return Array.from(scopeMetrics.map((metrics) => ({ - scope: (0, internal_1.createInstrumentationScope)(metrics.scope), - metrics: metrics.metrics.map((metricData) => toMetric(metricData, encoder2)), - schemaUrl: metrics.scope.schemaUrl - }))); - } - exports.toScopeMetrics = toScopeMetrics; - function toMetric(metricData, encoder2) { - const out = { - name: metricData.descriptor.name, - description: metricData.descriptor.description, - unit: metricData.descriptor.unit - }; - const aggregationTemporality = toAggregationTemporality(metricData.aggregationTemporality); - switch (metricData.dataPointType) { - case sdk_metrics_1.DataPointType.SUM: - out.sum = { - aggregationTemporality, - isMonotonic: metricData.isMonotonic, - dataPoints: toSingularDataPoints(metricData, encoder2) - }; - break; - case sdk_metrics_1.DataPointType.GAUGE: - out.gauge = { - dataPoints: toSingularDataPoints(metricData, encoder2) - }; - break; - case sdk_metrics_1.DataPointType.HISTOGRAM: - out.histogram = { - aggregationTemporality, - dataPoints: toHistogramDataPoints(metricData, encoder2) - }; - break; - case sdk_metrics_1.DataPointType.EXPONENTIAL_HISTOGRAM: - out.exponentialHistogram = { - aggregationTemporality, - dataPoints: toExponentialHistogramDataPoints(metricData, encoder2) - }; - break; - } - return out; - } - exports.toMetric = toMetric; - function toSingularDataPoint(dataPoint, valueType, encoder2) { - const out = { - attributes: (0, internal_1.toAttributes)(dataPoint.attributes), - startTimeUnixNano: encoder2.encodeHrTime(dataPoint.startTime), - timeUnixNano: encoder2.encodeHrTime(dataPoint.endTime) - }; - switch (valueType) { - case api_1.ValueType.INT: - out.asInt = dataPoint.value; - break; - case api_1.ValueType.DOUBLE: - out.asDouble = dataPoint.value; - break; - } - return out; - } - function toSingularDataPoints(metricData, encoder2) { - return metricData.dataPoints.map((dataPoint) => { - return toSingularDataPoint(dataPoint, metricData.descriptor.valueType, encoder2); - }); - } - function toHistogramDataPoints(metricData, encoder2) { - return metricData.dataPoints.map((dataPoint) => { - const histogram = dataPoint.value; - return { - attributes: (0, internal_1.toAttributes)(dataPoint.attributes), - bucketCounts: histogram.buckets.counts, - explicitBounds: histogram.buckets.boundaries, - count: histogram.count, - sum: histogram.sum, - min: histogram.min, - max: histogram.max, - startTimeUnixNano: encoder2.encodeHrTime(dataPoint.startTime), - timeUnixNano: encoder2.encodeHrTime(dataPoint.endTime) - }; - }); - } - function toExponentialHistogramDataPoints(metricData, encoder2) { - return metricData.dataPoints.map((dataPoint) => { - const histogram = dataPoint.value; - return { - attributes: (0, internal_1.toAttributes)(dataPoint.attributes), - count: histogram.count, - min: histogram.min, - max: histogram.max, - sum: histogram.sum, - positive: { - offset: histogram.positive.offset, - bucketCounts: histogram.positive.bucketCounts - }, - negative: { - offset: histogram.negative.offset, - bucketCounts: histogram.negative.bucketCounts - }, - scale: histogram.scale, - zeroCount: histogram.zeroCount, - startTimeUnixNano: encoder2.encodeHrTime(dataPoint.startTime), - timeUnixNano: encoder2.encodeHrTime(dataPoint.endTime) - }; - }); - } - function toAggregationTemporality(temporality) { - switch (temporality) { - case sdk_metrics_1.AggregationTemporality.DELTA: - return internal_types_1.EAggregationTemporality.AGGREGATION_TEMPORALITY_DELTA; - case sdk_metrics_1.AggregationTemporality.CUMULATIVE: - return internal_types_1.EAggregationTemporality.AGGREGATION_TEMPORALITY_CUMULATIVE; - } - } - function createExportMetricsServiceRequest(resourceMetrics, options) { - return { - resourceMetrics: resourceMetrics.map((metrics) => toResourceMetrics(metrics, options)) - }; - } - exports.createExportMetricsServiceRequest = createExportMetricsServiceRequest; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics.js -var require_metrics2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufMetricsSerializer = undefined; - var root = require_root(); - var internal_1 = require_internal3(); - var metricsResponseType = root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; - var metricsRequestType = root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; - exports.ProtobufMetricsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportMetricsServiceRequest)([arg]); - return metricsRequestType.encode(request).finish(); - }, - deserializeResponse: (arg) => { - return metricsResponseType.decode(arg); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/index.js -var require_protobuf2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufMetricsSerializer = undefined; - var metrics_1 = require_metrics2(); - Object.defineProperty(exports, "ProtobufMetricsSerializer", { enumerable: true, get: function() { - return metrics_1.ProtobufMetricsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/internal.js -var require_internal4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createExportTraceServiceRequest = exports.toOtlpSpanEvent = exports.toOtlpLink = exports.sdkSpanToOtlpSpan = undefined; - var internal_1 = require_internal(); - var utils_1 = require_utils41(); - var SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK = 256; - var SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK = 512; - function buildSpanFlagsFrom(traceFlags, isRemote) { - let flags = traceFlags & 255 | SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK; - if (isRemote) { - flags |= SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK; - } - return flags; - } - function sdkSpanToOtlpSpan(span, encoder2) { - const ctx = span.spanContext(); - const status = span.status; - const parentSpanId = span.parentSpanContext?.spanId ? encoder2.encodeSpanContext(span.parentSpanContext?.spanId) : undefined; - return { - traceId: encoder2.encodeSpanContext(ctx.traceId), - spanId: encoder2.encodeSpanContext(ctx.spanId), - parentSpanId, - traceState: ctx.traceState?.serialize(), - name: span.name, - kind: span.kind == null ? 0 : span.kind + 1, - startTimeUnixNano: encoder2.encodeHrTime(span.startTime), - endTimeUnixNano: encoder2.encodeHrTime(span.endTime), - attributes: (0, internal_1.toAttributes)(span.attributes), - droppedAttributesCount: span.droppedAttributesCount, - events: span.events.map((event) => toOtlpSpanEvent(event, encoder2)), - droppedEventsCount: span.droppedEventsCount, - status: { - code: status.code, - message: status.message - }, - links: span.links.map((link) => toOtlpLink(link, encoder2)), - droppedLinksCount: span.droppedLinksCount, - flags: buildSpanFlagsFrom(ctx.traceFlags, span.parentSpanContext?.isRemote) - }; - } - exports.sdkSpanToOtlpSpan = sdkSpanToOtlpSpan; - function toOtlpLink(link, encoder2) { - return { - attributes: link.attributes ? (0, internal_1.toAttributes)(link.attributes) : [], - spanId: encoder2.encodeSpanContext(link.context.spanId), - traceId: encoder2.encodeSpanContext(link.context.traceId), - traceState: link.context.traceState?.serialize(), - droppedAttributesCount: link.droppedAttributesCount || 0, - flags: buildSpanFlagsFrom(link.context.traceFlags, link.context.isRemote) - }; - } - exports.toOtlpLink = toOtlpLink; - function toOtlpSpanEvent(timedEvent, encoder2) { - return { - attributes: timedEvent.attributes ? (0, internal_1.toAttributes)(timedEvent.attributes) : [], - name: timedEvent.name, - timeUnixNano: encoder2.encodeHrTime(timedEvent.time), - droppedAttributesCount: timedEvent.droppedAttributesCount || 0 - }; - } - exports.toOtlpSpanEvent = toOtlpSpanEvent; - function createExportTraceServiceRequest(spans, options) { - const encoder2 = (0, utils_1.getOtlpEncoder)(options); - return { - resourceSpans: spanRecordsToResourceSpans(spans, encoder2) - }; - } - exports.createExportTraceServiceRequest = createExportTraceServiceRequest; - function createResourceMap(readableSpans) { - const resourceMap = new Map; - for (const record3 of readableSpans) { - let ilsMap = resourceMap.get(record3.resource); - if (!ilsMap) { - ilsMap = new Map; - resourceMap.set(record3.resource, ilsMap); - } - const instrumentationScopeKey = `${record3.instrumentationScope.name}@${record3.instrumentationScope.version || ""}:${record3.instrumentationScope.schemaUrl || ""}`; - let records = ilsMap.get(instrumentationScopeKey); - if (!records) { - records = []; - ilsMap.set(instrumentationScopeKey, records); - } - records.push(record3); - } - return resourceMap; - } - function spanRecordsToResourceSpans(readableSpans, encoder2) { - const resourceMap = createResourceMap(readableSpans); - const out = []; - const entryIterator = resourceMap.entries(); - let entry = entryIterator.next(); - while (!entry.done) { - const [resource, ilmMap] = entry.value; - const scopeResourceSpans = []; - const ilmIterator = ilmMap.values(); - let ilmEntry = ilmIterator.next(); - while (!ilmEntry.done) { - const scopeSpans = ilmEntry.value; - if (scopeSpans.length > 0) { - const spans = scopeSpans.map((readableSpan) => sdkSpanToOtlpSpan(readableSpan, encoder2)); - scopeResourceSpans.push({ - scope: (0, internal_1.createInstrumentationScope)(scopeSpans[0].instrumentationScope), - spans, - schemaUrl: scopeSpans[0].instrumentationScope.schemaUrl - }); - } - ilmEntry = ilmIterator.next(); - } - const processedResource = (0, internal_1.createResource)(resource); - const transformedSpans = { - resource: processedResource, - scopeSpans: scopeResourceSpans, - schemaUrl: processedResource.schemaUrl - }; - out.push(transformedSpans); - entry = entryIterator.next(); - } - return out; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace.js -var require_trace3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufTraceSerializer = undefined; - var root = require_root(); - var internal_1 = require_internal4(); - var traceResponseType = root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; - var traceRequestType = root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; - exports.ProtobufTraceSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportTraceServiceRequest)(arg); - return traceRequestType.encode(request).finish(); - }, - deserializeResponse: (arg) => { - return traceResponseType.decode(arg); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/index.js -var require_protobuf3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufTraceSerializer = undefined; - var trace_1 = require_trace3(); - Object.defineProperty(exports, "ProtobufTraceSerializer", { enumerable: true, get: function() { - return trace_1.ProtobufTraceSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/logs.js -var require_logs3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonLogsSerializer = undefined; - var internal_1 = require_internal2(); - exports.JsonLogsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportLogsServiceRequest)(arg, { - useHex: true, - useLongBits: false - }); - const encoder2 = new TextEncoder; - return encoder2.encode(JSON.stringify(request)); - }, - deserializeResponse: (arg) => { - if (arg.length === 0) { - return {}; - } - const decoder = new TextDecoder; - return JSON.parse(decoder.decode(arg)); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/index.js -var require_json = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonLogsSerializer = undefined; - var logs_1 = require_logs3(); - Object.defineProperty(exports, "JsonLogsSerializer", { enumerable: true, get: function() { - return logs_1.JsonLogsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/metrics.js -var require_metrics3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonMetricsSerializer = undefined; - var internal_1 = require_internal3(); - exports.JsonMetricsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportMetricsServiceRequest)([arg], { - useLongBits: false - }); - const encoder2 = new TextEncoder; - return encoder2.encode(JSON.stringify(request)); - }, - deserializeResponse: (arg) => { - if (arg.length === 0) { - return {}; - } - const decoder = new TextDecoder; - return JSON.parse(decoder.decode(arg)); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/index.js -var require_json2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonMetricsSerializer = undefined; - var metrics_1 = require_metrics3(); - Object.defineProperty(exports, "JsonMetricsSerializer", { enumerable: true, get: function() { - return metrics_1.JsonMetricsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/trace.js -var require_trace4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonTraceSerializer = undefined; - var internal_1 = require_internal4(); - exports.JsonTraceSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportTraceServiceRequest)(arg, { - useHex: true, - useLongBits: false - }); - const encoder2 = new TextEncoder; - return encoder2.encode(JSON.stringify(request)); - }, - deserializeResponse: (arg) => { - if (arg.length === 0) { - return {}; - } - const decoder = new TextDecoder; - return JSON.parse(decoder.decode(arg)); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/index.js -var require_json3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonTraceSerializer = undefined; - var trace_1 = require_trace4(); - Object.defineProperty(exports, "JsonTraceSerializer", { enumerable: true, get: function() { - return trace_1.JsonTraceSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/index.js -var require_src65 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonTraceSerializer = exports.JsonMetricsSerializer = exports.JsonLogsSerializer = exports.ProtobufTraceSerializer = exports.ProtobufMetricsSerializer = exports.ProtobufLogsSerializer = undefined; - var protobuf_1 = require_protobuf(); - Object.defineProperty(exports, "ProtobufLogsSerializer", { enumerable: true, get: function() { - return protobuf_1.ProtobufLogsSerializer; - } }); - var protobuf_2 = require_protobuf2(); - Object.defineProperty(exports, "ProtobufMetricsSerializer", { enumerable: true, get: function() { - return protobuf_2.ProtobufMetricsSerializer; - } }); - var protobuf_3 = require_protobuf3(); - Object.defineProperty(exports, "ProtobufTraceSerializer", { enumerable: true, get: function() { - return protobuf_3.ProtobufTraceSerializer; - } }); - var json_1 = require_json(); - Object.defineProperty(exports, "JsonLogsSerializer", { enumerable: true, get: function() { - return json_1.JsonLogsSerializer; - } }); - var json_2 = require_json2(); - Object.defineProperty(exports, "JsonMetricsSerializer", { enumerable: true, get: function() { - return json_2.JsonMetricsSerializer; - } }); - var json_3 = require_json3(); - Object.defineProperty(exports, "JsonTraceSerializer", { enumerable: true, get: function() { - return json_3.JsonTraceSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/util.js -var require_util3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateAndNormalizeHeaders = undefined; - var api_1 = require_src(); - function validateAndNormalizeHeaders(partialHeaders) { - return () => { - const headers = {}; - Object.entries(partialHeaders?.() ?? {}).forEach(([key, value]) => { - if (typeof value !== "undefined") { - headers[key] = String(value); - } else { - api_1.diag.warn(`Header "${key}" has invalid value (${value}) and will be ignored`); - } - }); - return headers; - }; - } - exports.validateAndNormalizeHeaders = validateAndNormalizeHeaders; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/otlp-http-configuration.js -var require_otlp_http_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getHttpConfigurationDefaults = exports.mergeOtlpHttpConfigurationWithDefaults = undefined; - var shared_configuration_1 = require_shared_configuration(); - var util_1 = require_util3(); - function mergeHeaders(userProvidedHeaders, fallbackHeaders, defaultHeaders) { - const requiredHeaders = { - ...defaultHeaders() - }; - const headers = {}; - return () => { - if (fallbackHeaders != null) { - Object.assign(headers, fallbackHeaders()); - } - if (userProvidedHeaders != null) { - Object.assign(headers, userProvidedHeaders()); - } - return Object.assign(headers, requiredHeaders); - }; - } - function validateUserProvidedUrl(url2) { - if (url2 == null) { - return; - } - try { - const base = globalThis.location?.href; - return new URL(url2, base).href; - } catch { - throw new Error(`Configuration: Could not parse user-provided export URL: '${url2}'`); - } - } - function mergeOtlpHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - return { - ...(0, shared_configuration_1.mergeOtlpSharedConfigurationWithDefaults)(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration), - headers: mergeHeaders((0, util_1.validateAndNormalizeHeaders)(userProvidedConfiguration.headers), fallbackConfiguration.headers, defaultConfiguration.headers), - url: validateUserProvidedUrl(userProvidedConfiguration.url) ?? fallbackConfiguration.url ?? defaultConfiguration.url - }; - } - exports.mergeOtlpHttpConfigurationWithDefaults = mergeOtlpHttpConfigurationWithDefaults; - function getHttpConfigurationDefaults(requiredHeaders, signalResourcePath) { - return { - ...(0, shared_configuration_1.getSharedConfigurationDefaults)(), - headers: () => requiredHeaders, - url: "http://localhost:4318/" + signalResourcePath - }; - } - exports.getHttpConfigurationDefaults = getHttpConfigurationDefaults; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/otlp-node-http-configuration.js -var require_otlp_node_http_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getNodeHttpConfigurationDefaults = exports.mergeOtlpNodeHttpConfigurationWithDefaults = exports.httpAgentFactoryFromOptions = undefined; - var otlp_http_configuration_1 = require_otlp_http_configuration(); - function httpAgentFactoryFromOptions(options) { - return async (protocol) => { - const isInsecure = protocol === "http:"; - const module2 = isInsecure ? import("http") : import("https"); - const { Agent } = await module2; - if (isInsecure) { - const { ca, cert, key, ...insecureOptions } = options; - return new Agent(insecureOptions); - } - return new Agent(options); - }; - } - exports.httpAgentFactoryFromOptions = httpAgentFactoryFromOptions; - function mergeOtlpNodeHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - return { - ...(0, otlp_http_configuration_1.mergeOtlpHttpConfigurationWithDefaults)(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration), - agentFactory: userProvidedConfiguration.agentFactory ?? fallbackConfiguration.agentFactory ?? defaultConfiguration.agentFactory, - userAgent: userProvidedConfiguration.userAgent - }; - } - exports.mergeOtlpNodeHttpConfigurationWithDefaults = mergeOtlpNodeHttpConfigurationWithDefaults; - function getNodeHttpConfigurationDefaults(requiredHeaders, signalResourcePath) { - return { - ...(0, otlp_http_configuration_1.getHttpConfigurationDefaults)(requiredHeaders, signalResourcePath), - agentFactory: httpAgentFactoryFromOptions({ keepAlive: true }) - }; - } - exports.getNodeHttpConfigurationDefaults = getNodeHttpConfigurationDefaults; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/is-export-retryable.js -var require_is_export_retryable = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseRetryAfterToMills = exports.isExportRetryable = undefined; - function isExportRetryable(statusCode) { - const retryCodes = [429, 502, 503, 504]; - return retryCodes.includes(statusCode); - } - exports.isExportRetryable = isExportRetryable; - function parseRetryAfterToMills(retryAfter) { - if (retryAfter == null) { - return; - } - const seconds = Number.parseInt(retryAfter, 10); - if (Number.isInteger(seconds)) { - return seconds > 0 ? seconds * 1000 : -1; - } - const delay = new Date(retryAfter).getTime() - Date.now(); - if (delay >= 0) { - return delay; - } - return 0; - } - exports.parseRetryAfterToMills = parseRetryAfterToMills; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/version.js -var require_version46 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.207.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/transport/http-transport-utils.js -var require_http_transport_utils = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.compressAndSend = exports.sendWithHttp = undefined; - var zlib = __require("zlib"); - var stream_1 = __require("stream"); - var is_export_retryable_1 = require_is_export_retryable(); - var types_1 = require_types10(); - var version_1 = require_version46(); - var DEFAULT_USER_AGENT = `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`; - function sendWithHttp(request, params, agent2, data, onDone, timeoutMillis) { - const parsedUrl = new URL(params.url); - const headers = { ...params.headers() }; - if (params.userAgent) { - headers["User-Agent"] = `${params.userAgent} ${DEFAULT_USER_AGENT}`; - } else { - headers["User-Agent"] = DEFAULT_USER_AGENT; - } - const options = { - hostname: parsedUrl.hostname, - port: parsedUrl.port, - path: parsedUrl.pathname, - method: "POST", - headers, - agent: agent2 - }; - const req = request(options, (res) => { - const responseData = []; - res.on("data", (chunk) => responseData.push(chunk)); - res.on("end", () => { - if (res.statusCode && res.statusCode < 299) { - onDone({ - status: "success", - data: Buffer.concat(responseData) - }); - } else if (res.statusCode && (0, is_export_retryable_1.isExportRetryable)(res.statusCode)) { - onDone({ - status: "retryable", - retryInMillis: (0, is_export_retryable_1.parseRetryAfterToMills)(res.headers["retry-after"]) - }); - } else { - const error48 = new types_1.OTLPExporterError(res.statusMessage, res.statusCode, Buffer.concat(responseData).toString()); - onDone({ - status: "failure", - error: error48 - }); - } - }); - }); - req.setTimeout(timeoutMillis, () => { - req.destroy(); - onDone({ - status: "failure", - error: new Error("Request Timeout") - }); - }); - req.on("error", (error48) => { - onDone({ - status: "failure", - error: error48 - }); - }); - compressAndSend(req, params.compression, data, (error48) => { - onDone({ - status: "failure", - error: error48 - }); - }); - } - exports.sendWithHttp = sendWithHttp; - function compressAndSend(req, compression, data, onError) { - let dataStream = readableFromUint8Array(data); - if (compression === "gzip") { - req.setHeader("Content-Encoding", "gzip"); - dataStream = dataStream.on("error", onError).pipe(zlib.createGzip()).on("error", onError); - } - dataStream.pipe(req).on("error", onError); - } - exports.compressAndSend = compressAndSend; - function readableFromUint8Array(buff) { - const readable = new stream_1.Readable; - readable.push(buff); - readable.push(null); - return readable; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/transport/http-exporter-transport.js -var require_http_exporter_transport = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createHttpExporterTransport = undefined; - var http_transport_utils_1 = require_http_transport_utils(); - - class HttpExporterTransport { - _parameters; - _utils = null; - constructor(_parameters) { - this._parameters = _parameters; - } - async send(data, timeoutMillis) { - const { agent: agent2, request } = await this._loadUtils(); - return new Promise((resolve2) => { - (0, http_transport_utils_1.sendWithHttp)(request, this._parameters, agent2, data, (result) => { - resolve2(result); - }, timeoutMillis); - }); - } - shutdown() {} - async _loadUtils() { - let utils = this._utils; - if (utils === null) { - const protocol = new URL(this._parameters.url).protocol; - const [agent2, request] = await Promise.all([ - this._parameters.agentFactory(protocol), - requestFunctionFactory(protocol) - ]); - utils = this._utils = { agent: agent2, request }; - } - return utils; - } - } - async function requestFunctionFactory(protocol) { - const module2 = protocol === "http:" ? import("http") : import("https"); - const { request } = await module2; - return request; - } - function createHttpExporterTransport(parameters) { - return new HttpExporterTransport(parameters); - } - exports.createHttpExporterTransport = createHttpExporterTransport; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/retrying-transport.js -var require_retrying_transport = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createRetryingTransport = undefined; - var MAX_ATTEMPTS = 5; - var INITIAL_BACKOFF = 1000; - var MAX_BACKOFF = 5000; - var BACKOFF_MULTIPLIER = 1.5; - var JITTER = 0.2; - function getJitter() { - return Math.random() * (2 * JITTER) - JITTER; - } - - class RetryingTransport { - _transport; - constructor(_transport) { - this._transport = _transport; - } - retry(data, timeoutMillis, inMillis) { - return new Promise((resolve2, reject) => { - setTimeout(() => { - this._transport.send(data, timeoutMillis).then(resolve2, reject); - }, inMillis); - }); - } - async send(data, timeoutMillis) { - const deadline = Date.now() + timeoutMillis; - let result = await this._transport.send(data, timeoutMillis); - let attempts = MAX_ATTEMPTS; - let nextBackoff = INITIAL_BACKOFF; - while (result.status === "retryable" && attempts > 0) { - attempts--; - const backoff = Math.max(Math.min(nextBackoff, MAX_BACKOFF) + getJitter(), 0); - nextBackoff = nextBackoff * BACKOFF_MULTIPLIER; - const retryInMillis = result.retryInMillis ?? backoff; - const remainingTimeoutMillis = deadline - Date.now(); - if (retryInMillis > remainingTimeoutMillis) { - return result; - } - result = await this.retry(data, remainingTimeoutMillis, retryInMillis); - } - return result; - } - shutdown() { - return this._transport.shutdown(); - } - } - function createRetryingTransport(options) { - return new RetryingTransport(options.transport); - } - exports.createRetryingTransport = createRetryingTransport; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/otlp-http-export-delegate.js -var require_otlp_http_export_delegate = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpHttpExportDelegate = undefined; - var otlp_export_delegate_1 = require_otlp_export_delegate(); - var http_exporter_transport_1 = require_http_exporter_transport(); - var bounded_queue_export_promise_handler_1 = require_bounded_queue_export_promise_handler(); - var retrying_transport_1 = require_retrying_transport(); - function createOtlpHttpExportDelegate(options, serializer) { - return (0, otlp_export_delegate_1.createOtlpExportDelegate)({ - transport: (0, retrying_transport_1.createRetryingTransport)({ - transport: (0, http_exporter_transport_1.createHttpExporterTransport)(options) - }), - serializer, - promiseHandler: (0, bounded_queue_export_promise_handler_1.createBoundedQueueExportPromiseHandler)(options) - }, { timeout: options.timeoutMillis }); - } - exports.createOtlpHttpExportDelegate = createOtlpHttpExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/shared-env-configuration.js -var require_shared_env_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSharedConfigurationFromEnvironment = undefined; - var core_1 = require_src7(); - var api_1 = require_src(); - function parseAndValidateTimeoutFromEnv(timeoutEnvVar) { - const envTimeout = (0, core_1.getNumberFromEnv)(timeoutEnvVar); - if (envTimeout != null) { - if (Number.isFinite(envTimeout) && envTimeout > 0) { - return envTimeout; - } - api_1.diag.warn(`Configuration: ${timeoutEnvVar} is invalid, expected number greater than 0 (actual: ${envTimeout})`); - } - return; - } - function getTimeoutFromEnv(signalIdentifier) { - const specificTimeout = parseAndValidateTimeoutFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_TIMEOUT`); - const nonSpecificTimeout = parseAndValidateTimeoutFromEnv("OTEL_EXPORTER_OTLP_TIMEOUT"); - return specificTimeout ?? nonSpecificTimeout; - } - function parseAndValidateCompressionFromEnv(compressionEnvVar) { - const compression = (0, core_1.getStringFromEnv)(compressionEnvVar)?.trim(); - if (compression == null || compression === "none" || compression === "gzip") { - return compression; - } - api_1.diag.warn(`Configuration: ${compressionEnvVar} is invalid, expected 'none' or 'gzip' (actual: '${compression}')`); - return; - } - function getCompressionFromEnv(signalIdentifier) { - const specificCompression = parseAndValidateCompressionFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_COMPRESSION`); - const nonSpecificCompression = parseAndValidateCompressionFromEnv("OTEL_EXPORTER_OTLP_COMPRESSION"); - return specificCompression ?? nonSpecificCompression; - } - function getSharedConfigurationFromEnvironment(signalIdentifier) { - return { - timeoutMillis: getTimeoutFromEnv(signalIdentifier), - compression: getCompressionFromEnv(signalIdentifier) - }; - } - exports.getSharedConfigurationFromEnvironment = getSharedConfigurationFromEnvironment; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/otlp-node-http-env-configuration.js -var require_otlp_node_http_env_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getNodeHttpConfigurationFromEnvironment = undefined; - var fs = __require("fs"); - var path = __require("path"); - var core_1 = require_src7(); - var api_1 = require_src(); - var shared_env_configuration_1 = require_shared_env_configuration(); - var shared_configuration_1 = require_shared_configuration(); - var otlp_node_http_configuration_1 = require_otlp_node_http_configuration(); - function getStaticHeadersFromEnv(signalIdentifier) { - const signalSpecificRawHeaders = (0, core_1.getStringFromEnv)(`OTEL_EXPORTER_OTLP_${signalIdentifier}_HEADERS`); - const nonSignalSpecificRawHeaders = (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_HEADERS"); - const signalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(signalSpecificRawHeaders); - const nonSignalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(nonSignalSpecificRawHeaders); - if (Object.keys(signalSpecificHeaders).length === 0 && Object.keys(nonSignalSpecificHeaders).length === 0) { - return; - } - return Object.assign({}, (0, core_1.parseKeyPairsIntoRecord)(nonSignalSpecificRawHeaders), (0, core_1.parseKeyPairsIntoRecord)(signalSpecificRawHeaders)); - } - function appendRootPathToUrlIfNeeded(url2) { - try { - const parsedUrl = new URL(url2); - return parsedUrl.toString(); - } catch { - api_1.diag.warn(`Configuration: Could not parse environment-provided export URL: '${url2}', falling back to undefined`); - return; - } - } - function appendResourcePathToUrl(url2, path2) { - try { - new URL(url2); - } catch { - api_1.diag.warn(`Configuration: Could not parse environment-provided export URL: '${url2}', falling back to undefined`); - return; - } - if (!url2.endsWith("/")) { - url2 = url2 + "/"; - } - url2 += path2; - try { - new URL(url2); - } catch { - api_1.diag.warn(`Configuration: Provided URL appended with '${path2}' is not a valid URL, using 'undefined' instead of '${url2}'`); - return; - } - return url2; - } - function getNonSpecificUrlFromEnv(signalResourcePath) { - const envUrl = (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_ENDPOINT"); - if (envUrl === undefined) { - return; - } - return appendResourcePathToUrl(envUrl, signalResourcePath); - } - function getSpecificUrlFromEnv(signalIdentifier) { - const envUrl = (0, core_1.getStringFromEnv)(`OTEL_EXPORTER_OTLP_${signalIdentifier}_ENDPOINT`); - if (envUrl === undefined) { - return; - } - return appendRootPathToUrlIfNeeded(envUrl); - } - function readFileFromEnv(signalSpecificEnvVar, nonSignalSpecificEnvVar, warningMessage) { - const signalSpecificPath = (0, core_1.getStringFromEnv)(signalSpecificEnvVar); - const nonSignalSpecificPath = (0, core_1.getStringFromEnv)(nonSignalSpecificEnvVar); - const filePath = signalSpecificPath ?? nonSignalSpecificPath; - if (filePath != null) { - try { - return fs.readFileSync(path.resolve(process.cwd(), filePath)); - } catch { - api_1.diag.warn(warningMessage); - return; - } - } else { - return; - } - } - function getClientCertificateFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE", "Failed to read client certificate chain file"); - } - function getClientKeyFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_KEY`, "OTEL_EXPORTER_OTLP_CLIENT_KEY", "Failed to read client certificate private key file"); - } - function getRootCertificateFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CERTIFICATE", "Failed to read root certificate file"); - } - function getNodeHttpConfigurationFromEnvironment(signalIdentifier, signalResourcePath) { - return { - ...(0, shared_env_configuration_1.getSharedConfigurationFromEnvironment)(signalIdentifier), - url: getSpecificUrlFromEnv(signalIdentifier) ?? getNonSpecificUrlFromEnv(signalResourcePath), - headers: (0, shared_configuration_1.wrapStaticHeadersInFunction)(getStaticHeadersFromEnv(signalIdentifier)), - agentFactory: (0, otlp_node_http_configuration_1.httpAgentFactoryFromOptions)({ - keepAlive: true, - ca: getRootCertificateFromEnv(signalIdentifier), - cert: getClientCertificateFromEnv(signalIdentifier), - key: getClientKeyFromEnv(signalIdentifier) - }) - }; - } - exports.getNodeHttpConfigurationFromEnvironment = getNodeHttpConfigurationFromEnvironment; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/convert-legacy-node-http-options.js -var require_convert_legacy_node_http_options = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.convertLegacyHttpOptions = undefined; - var api_1 = require_src(); - var shared_configuration_1 = require_shared_configuration(); - var otlp_node_http_configuration_1 = require_otlp_node_http_configuration(); - var index_node_http_1 = require_index_node_http(); - var otlp_node_http_env_configuration_1 = require_otlp_node_http_env_configuration(); - function convertLegacyAgentOptions(config2) { - if (typeof config2.httpAgentOptions === "function") { - return config2.httpAgentOptions; - } - let legacy = config2.httpAgentOptions; - if (config2.keepAlive != null) { - legacy = { keepAlive: config2.keepAlive, ...legacy }; - } - if (legacy != null) { - return (0, index_node_http_1.httpAgentFactoryFromOptions)(legacy); - } else { - return; - } - } - function convertLegacyHttpOptions(config2, signalIdentifier, signalResourcePath, requiredHeaders) { - if (config2.metadata) { - api_1.diag.warn("Metadata cannot be set when using http"); - } - return (0, otlp_node_http_configuration_1.mergeOtlpNodeHttpConfigurationWithDefaults)({ - url: config2.url, - headers: (0, shared_configuration_1.wrapStaticHeadersInFunction)(config2.headers), - concurrencyLimit: config2.concurrencyLimit, - timeoutMillis: config2.timeoutMillis, - compression: config2.compression, - agentFactory: convertLegacyAgentOptions(config2), - userAgent: config2.userAgent - }, (0, otlp_node_http_env_configuration_1.getNodeHttpConfigurationFromEnvironment)(signalIdentifier, signalResourcePath), (0, otlp_node_http_configuration_1.getNodeHttpConfigurationDefaults)(requiredHeaders, signalResourcePath)); - } - exports.convertLegacyHttpOptions = convertLegacyHttpOptions; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/index-node-http.js -var require_index_node_http = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.convertLegacyHttpOptions = exports.getSharedConfigurationFromEnvironment = exports.createOtlpHttpExportDelegate = exports.httpAgentFactoryFromOptions = undefined; - var otlp_node_http_configuration_1 = require_otlp_node_http_configuration(); - Object.defineProperty(exports, "httpAgentFactoryFromOptions", { enumerable: true, get: function() { - return otlp_node_http_configuration_1.httpAgentFactoryFromOptions; - } }); - var otlp_http_export_delegate_1 = require_otlp_http_export_delegate(); - Object.defineProperty(exports, "createOtlpHttpExportDelegate", { enumerable: true, get: function() { - return otlp_http_export_delegate_1.createOtlpHttpExportDelegate; - } }); - var shared_env_configuration_1 = require_shared_env_configuration(); - Object.defineProperty(exports, "getSharedConfigurationFromEnvironment", { enumerable: true, get: function() { - return shared_env_configuration_1.getSharedConfigurationFromEnvironment; - } }); - var convert_legacy_node_http_options_1 = require_convert_legacy_node_http_options(); - Object.defineProperty(exports, "convertLegacyHttpOptions", { enumerable: true, get: function() { - return convert_legacy_node_http_options_1.convertLegacyHttpOptions; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/platform/node/OTLPLogExporter.js -var require_OTLPLogExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var otlp_exporter_base_1 = require_src63(); - var otlp_transformer_1 = require_src65(); - var node_http_1 = require_index_node_http(); - - class OTLPLogExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "LOGS", "v1/logs", { - "Content-Type": "application/json" - }), otlp_transformer_1.JsonLogsSerializer)); - } - } - exports.OTLPLogExporter = OTLPLogExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/platform/node/index.js -var require_node10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var OTLPLogExporter_1 = require_OTLPLogExporter(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return OTLPLogExporter_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/platform/index.js -var require_platform9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var node_1 = require_node10(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return node_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/index.js -var require_src66 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var platform_1 = require_platform9(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return platform_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/OTLPMetricExporterOptions.js -var require_OTLPMetricExporterOptions = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AggregationTemporalityPreference = undefined; - var AggregationTemporalityPreference; - (function(AggregationTemporalityPreference2) { - AggregationTemporalityPreference2[AggregationTemporalityPreference2["DELTA"] = 0] = "DELTA"; - AggregationTemporalityPreference2[AggregationTemporalityPreference2["CUMULATIVE"] = 1] = "CUMULATIVE"; - AggregationTemporalityPreference2[AggregationTemporalityPreference2["LOWMEMORY"] = 2] = "LOWMEMORY"; - })(AggregationTemporalityPreference = exports.AggregationTemporalityPreference || (exports.AggregationTemporalityPreference = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/OTLPMetricExporterBase.js -var require_OTLPMetricExporterBase = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporterBase = exports.LowMemoryTemporalitySelector = exports.DeltaTemporalitySelector = exports.CumulativeTemporalitySelector = undefined; - var core_1 = require_src7(); - var sdk_metrics_1 = require_src64(); - var OTLPMetricExporterOptions_1 = require_OTLPMetricExporterOptions(); - var otlp_exporter_base_1 = require_src63(); - var api_1 = require_src(); - var CumulativeTemporalitySelector = () => sdk_metrics_1.AggregationTemporality.CUMULATIVE; - exports.CumulativeTemporalitySelector = CumulativeTemporalitySelector; - var DeltaTemporalitySelector = (instrumentType) => { - switch (instrumentType) { - case sdk_metrics_1.InstrumentType.COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_COUNTER: - case sdk_metrics_1.InstrumentType.GAUGE: - case sdk_metrics_1.InstrumentType.HISTOGRAM: - case sdk_metrics_1.InstrumentType.OBSERVABLE_GAUGE: - return sdk_metrics_1.AggregationTemporality.DELTA; - case sdk_metrics_1.InstrumentType.UP_DOWN_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: - return sdk_metrics_1.AggregationTemporality.CUMULATIVE; - } - }; - exports.DeltaTemporalitySelector = DeltaTemporalitySelector; - var LowMemoryTemporalitySelector = (instrumentType) => { - switch (instrumentType) { - case sdk_metrics_1.InstrumentType.COUNTER: - case sdk_metrics_1.InstrumentType.HISTOGRAM: - return sdk_metrics_1.AggregationTemporality.DELTA; - case sdk_metrics_1.InstrumentType.GAUGE: - case sdk_metrics_1.InstrumentType.UP_DOWN_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_GAUGE: - return sdk_metrics_1.AggregationTemporality.CUMULATIVE; - } - }; - exports.LowMemoryTemporalitySelector = LowMemoryTemporalitySelector; - function chooseTemporalitySelectorFromEnvironment() { - const configuredTemporality = ((0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE") ?? "cumulative").toLowerCase(); - if (configuredTemporality === "cumulative") { - return exports.CumulativeTemporalitySelector; - } - if (configuredTemporality === "delta") { - return exports.DeltaTemporalitySelector; - } - if (configuredTemporality === "lowmemory") { - return exports.LowMemoryTemporalitySelector; - } - api_1.diag.warn(`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '${configuredTemporality}', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead.`); - return exports.CumulativeTemporalitySelector; - } - function chooseTemporalitySelector(temporalityPreference) { - if (temporalityPreference != null) { - if (temporalityPreference === OTLPMetricExporterOptions_1.AggregationTemporalityPreference.DELTA) { - return exports.DeltaTemporalitySelector; - } else if (temporalityPreference === OTLPMetricExporterOptions_1.AggregationTemporalityPreference.LOWMEMORY) { - return exports.LowMemoryTemporalitySelector; - } - return exports.CumulativeTemporalitySelector; - } - return chooseTemporalitySelectorFromEnvironment(); - } - var DEFAULT_AGGREGATION = Object.freeze({ - type: sdk_metrics_1.AggregationType.DEFAULT - }); - function chooseAggregationSelector(config2) { - return config2?.aggregationPreference ?? (() => DEFAULT_AGGREGATION); - } - - class OTLPMetricExporterBase extends otlp_exporter_base_1.OTLPExporterBase { - _aggregationTemporalitySelector; - _aggregationSelector; - constructor(delegate, config2) { - super(delegate); - this._aggregationSelector = chooseAggregationSelector(config2); - this._aggregationTemporalitySelector = chooseTemporalitySelector(config2?.temporalityPreference); - } - selectAggregation(instrumentType) { - return this._aggregationSelector(instrumentType); - } - selectAggregationTemporality(instrumentType) { - return this._aggregationTemporalitySelector(instrumentType); - } - } - exports.OTLPMetricExporterBase = OTLPMetricExporterBase; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/platform/node/OTLPMetricExporter.js -var require_OTLPMetricExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporterBase_1 = require_OTLPMetricExporterBase(); - var otlp_transformer_1 = require_src65(); - var node_http_1 = require_index_node_http(); - - class OTLPMetricExporter extends OTLPMetricExporterBase_1.OTLPMetricExporterBase { - constructor(config2) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2 ?? {}, "METRICS", "v1/metrics", { - "Content-Type": "application/json" - }), otlp_transformer_1.JsonMetricsSerializer), config2); - } - } - exports.OTLPMetricExporter = OTLPMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/platform/node/index.js -var require_node11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporter_1 = require_OTLPMetricExporter(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return OTLPMetricExporter_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/platform/index.js -var require_platform10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var node_1 = require_node11(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return node_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/index.js -var require_src67 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporterBase = exports.LowMemoryTemporalitySelector = exports.DeltaTemporalitySelector = exports.CumulativeTemporalitySelector = exports.AggregationTemporalityPreference = exports.OTLPMetricExporter = undefined; - var platform_1 = require_platform10(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return platform_1.OTLPMetricExporter; - } }); - var OTLPMetricExporterOptions_1 = require_OTLPMetricExporterOptions(); - Object.defineProperty(exports, "AggregationTemporalityPreference", { enumerable: true, get: function() { - return OTLPMetricExporterOptions_1.AggregationTemporalityPreference; - } }); - var OTLPMetricExporterBase_1 = require_OTLPMetricExporterBase(); - Object.defineProperty(exports, "CumulativeTemporalitySelector", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.CumulativeTemporalitySelector; - } }); - Object.defineProperty(exports, "DeltaTemporalitySelector", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.DeltaTemporalitySelector; - } }); - Object.defineProperty(exports, "LowMemoryTemporalitySelector", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.LowMemoryTemporalitySelector; - } }); - Object.defineProperty(exports, "OTLPMetricExporterBase", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.OTLPMetricExporterBase; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/platform/node/OTLPTraceExporter.js -var require_OTLPTraceExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var otlp_exporter_base_1 = require_src63(); - var otlp_transformer_1 = require_src65(); - var node_http_1 = require_index_node_http(); - - class OTLPTraceExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "TRACES", "v1/traces", { - "Content-Type": "application/json" - }), otlp_transformer_1.JsonTraceSerializer)); - } - } - exports.OTLPTraceExporter = OTLPTraceExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/platform/node/index.js -var require_node12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var OTLPTraceExporter_1 = require_OTLPTraceExporter(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return OTLPTraceExporter_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/platform/index.js -var require_platform11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var node_1 = require_node12(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return node_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/index.js -var require_src68 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var platform_1 = require_platform11(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return platform_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/version.js -var require_version47 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PACKAGE_NAME = exports.PACKAGE_VERSION = undefined; - exports.PACKAGE_VERSION = "0.36.2"; - exports.PACKAGE_NAME = "@opentelemetry/host-metrics"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/BaseMetrics.js -var require_BaseMetrics = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseMetrics = undefined; - var api_1 = require_src(); - var version_1 = require_version47(); - var DEFAULT_NAME = version_1.PACKAGE_NAME; - - class BaseMetrics { - _logger = api_1.diag; - _meter; - _name; - constructor(config2) { - this._name = config2?.name || DEFAULT_NAME; - const meterProvider = config2?.meterProvider ?? api_1.metrics.getMeterProvider(); - this._meter = meterProvider.getMeter(this._name, version_1.PACKAGE_VERSION); - } - } - exports.BaseMetrics = BaseMetrics; -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/enum.js -var require_enum2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MEMORY_LABELS = exports.NETWORK_LABELS = exports.CPU_LABELS = exports.ATTRIBUTE_NAMES = exports.METRIC_NAMES = undefined; - var METRIC_NAMES; - (function(METRIC_NAMES2) { - METRIC_NAMES2["CPU_TIME"] = "system.cpu.time"; - METRIC_NAMES2["CPU_UTILIZATION"] = "system.cpu.utilization"; - METRIC_NAMES2["MEMORY_USAGE"] = "system.memory.usage"; - METRIC_NAMES2["MEMORY_UTILIZATION"] = "system.memory.utilization"; - METRIC_NAMES2["NETWORK_DROPPED"] = "system.network.dropped"; - METRIC_NAMES2["NETWORK_ERRORS"] = "system.network.errors"; - METRIC_NAMES2["NETWORK_IO"] = "system.network.io"; - METRIC_NAMES2["PROCESS_CPU_TIME"] = "process.cpu.time"; - METRIC_NAMES2["PROCESS_CPU_UTILIZATION"] = "process.cpu.utilization"; - METRIC_NAMES2["PROCESS_MEMORY_USAGE"] = "process.memory.usage"; - })(METRIC_NAMES = exports.METRIC_NAMES || (exports.METRIC_NAMES = {})); - var ATTRIBUTE_NAMES; - (function(ATTRIBUTE_NAMES2) { - ATTRIBUTE_NAMES2["SYSTEM_CPU_LOGICAL_NUMBER"] = "system.cpu.logical_number"; - ATTRIBUTE_NAMES2["SYSTEM_CPU_STATE"] = "system.cpu.state"; - ATTRIBUTE_NAMES2["SYSTEM_MEMORY_STATE"] = "system.memory.state"; - ATTRIBUTE_NAMES2["SYSTEM_DEVICE"] = "system.device"; - ATTRIBUTE_NAMES2["NETWORK_IO_DIRECTION"] = "network.io.direction"; - ATTRIBUTE_NAMES2["SYSTEM_NETWORK_STATE"] = "system.network.state"; - ATTRIBUTE_NAMES2["PROCESS_CPU_STATE"] = "process.cpu.state"; - })(ATTRIBUTE_NAMES = exports.ATTRIBUTE_NAMES || (exports.ATTRIBUTE_NAMES = {})); - var CPU_LABELS; - (function(CPU_LABELS2) { - CPU_LABELS2["USER"] = "user"; - CPU_LABELS2["SYSTEM"] = "system"; - CPU_LABELS2["IDLE"] = "idle"; - CPU_LABELS2["INTERRUPT"] = "interrupt"; - CPU_LABELS2["NICE"] = "nice"; - })(CPU_LABELS = exports.CPU_LABELS || (exports.CPU_LABELS = {})); - var NETWORK_LABELS; - (function(NETWORK_LABELS2) { - NETWORK_LABELS2["RECEIVE"] = "receive"; - NETWORK_LABELS2["TRANSMIT"] = "transmit"; - })(NETWORK_LABELS = exports.NETWORK_LABELS || (exports.NETWORK_LABELS = {})); - var MEMORY_LABELS; - (function(MEMORY_LABELS2) { - MEMORY_LABELS2["FREE"] = "free"; - MEMORY_LABELS2["USED"] = "used"; - })(MEMORY_LABELS = exports.MEMORY_LABELS || (exports.MEMORY_LABELS = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/stats/common.js -var require_common3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getProcessMemoryData = exports.getMemoryData = exports.getProcessCpuUsageData = exports.getCpuUsageData = undefined; - var os_1 = __require("os"); - var MILLISECOND = 1 / 1000; - var MICROSECOND = 1 / 1e6; - var prevOsData = { - time: Date.now(), - cpus: (0, os_1.cpus)() - }; - function getCpuUsageData() { - const currentTime = Date.now(); - const timeElapsed = currentTime - prevOsData.time; - const currentOsData = { time: currentTime, cpus: (0, os_1.cpus)() }; - const usageData = currentOsData.cpus.map((cpu, cpuNumber) => { - const prevTimes = prevOsData.cpus[cpuNumber].times; - const currTimes = cpu.times; - const idle = currTimes.idle * MILLISECOND; - const user2 = currTimes.user * MILLISECOND; - const system = currTimes.sys * MILLISECOND; - const interrupt = currTimes.irq * MILLISECOND; - const nice = currTimes.nice * MILLISECOND; - const idleP = (currTimes.idle - prevTimes.idle) / timeElapsed; - const userP = (currTimes.user - prevTimes.user) / timeElapsed; - const systemP = (currTimes.sys - prevTimes.sys) / timeElapsed; - const interruptP = (currTimes.irq - prevTimes.irq) / timeElapsed; - const niceP = (currTimes.nice - prevTimes.nice) / timeElapsed; - return { - cpuNumber: String(cpuNumber), - idle, - user: user2, - system, - interrupt, - nice, - userP, - systemP, - idleP, - interruptP, - niceP - }; - }); - prevOsData = currentOsData; - return usageData; - } - exports.getCpuUsageData = getCpuUsageData; - var prevProcData = { - time: Date.now(), - usage: process.cpuUsage() - }; - function getProcessCpuUsageData() { - const currentTime = Date.now(); - const currentUsage = process.cpuUsage(); - const prevUsage = prevProcData.usage; - const timeElapsed = (currentTime - prevProcData.time) * 1000; - const cpusTimeElapsed = timeElapsed * prevOsData.cpus.length; - const user2 = currentUsage.user * MICROSECOND; - const system = currentUsage.system * MICROSECOND; - const userP = (currentUsage.user - prevUsage.user) / cpusTimeElapsed; - const systemP = (currentUsage.system - prevUsage.system) / cpusTimeElapsed; - prevProcData = { time: currentTime, usage: currentUsage }; - return { - user: user2, - system, - userP, - systemP - }; - } - exports.getProcessCpuUsageData = getProcessCpuUsageData; - function getMemoryData() { - const total = (0, os_1.totalmem)(); - const free = (0, os_1.freemem)(); - const used = total - free; - const freeP = free / total; - const usedP = used / total; - return { - used, - free, - usedP, - freeP - }; - } - exports.getMemoryData = getMemoryData; - function getProcessMemoryData() { - if (process.memoryUsage.rss) { - return process.memoryUsage.rss(); - } - return process.memoryUsage().rss; - } - exports.getProcessMemoryData = getProcessMemoryData; -}); - -// ../../../../node_modules/.bun/systeminformation@5.23.8/node_modules/systeminformation/lib/util.js -var require_util4 = __commonJS((exports) => { - var os = __require("os"); - var fs = __require("fs"); - var path = __require("path"); - var spawn = __require("child_process").spawn; - var exec = __require("child_process").exec; - var execSync = __require("child_process").execSync; - var util3 = __require("util"); - var _platform = process.platform; - var _linux = _platform === "linux" || _platform === "android"; - var _darwin = _platform === "darwin"; - var _windows = _platform === "win32"; - var _freebsd = _platform === "freebsd"; - var _openbsd = _platform === "openbsd"; - var _netbsd = _platform === "netbsd"; - var _cores = 0; - var wmicPath = ""; - var codepage = ""; - var _smartMonToolsInstalled = null; - var _rpi_cpuinfo = null; - var WINDIR = process.env.WINDIR || "C:\\Windows"; - var _psChild; - var _psResult = ""; - var _psCmds = []; - var _psPersistent = false; - var _psToUTF8 = "$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 ; "; - var _psCmdStart = "--###START###--"; - var _psError = "--ERROR--"; - var _psCmdSeperator = "--###ENDCMD###--"; - var _psIdSeperator = "--##ID##--"; - var execOptsWin = { - windowsHide: true, - maxBuffer: 1024 * 20000, - encoding: "UTF-8", - env: Object.assign({}, process.env, { LANG: "en_US.UTF-8" }) - }; - var execOptsLinux = { - maxBuffer: 1024 * 20000, - encoding: "UTF-8", - stdio: ["pipe", "pipe", "ignore"] - }; - function toInt(value) { - let result = parseInt(value, 10); - if (isNaN(result)) { - result = 0; - } - return result; - } - function splitByNumber(str) { - let numberStarted = false; - let num = ""; - let cpart = ""; - for (const c of str) { - if (c >= "0" && c <= "9" || numberStarted) { - numberStarted = true; - num += c; - } else { - cpart += c; - } - } - return [cpart, num]; - } - var stringReplace = new String().replace; - var stringToLower = new String().toLowerCase; - var stringToString = new String().toString; - var stringSubstr = new String().substr; - var stringTrim = new String().trim; - var stringStartWith = new String().startsWith; - var mathMin = Math.min; - function isFunction(functionToCheck) { - let getType = {}; - return functionToCheck && getType.toString.call(functionToCheck) === "[object Function]"; - } - function unique(obj) { - let uniques = []; - let stringify = {}; - for (let i = 0;i < obj.length; i++) { - let keys = Object.keys(obj[i]); - keys.sort(function(a, b) { - return a - b; - }); - let str = ""; - for (let j = 0;j < keys.length; j++) { - str += JSON.stringify(keys[j]); - str += JSON.stringify(obj[i][keys[j]]); - } - if (!{}.hasOwnProperty.call(stringify, str)) { - uniques.push(obj[i]); - stringify[str] = true; - } - } - return uniques; - } - function sortByKey(array3, keys) { - return array3.sort(function(a, b) { - let x = ""; - let y = ""; - keys.forEach(function(key) { - x = x + a[key]; - y = y + b[key]; - }); - return x < y ? -1 : x > y ? 1 : 0; - }); - } - function cores() { - if (_cores === 0) { - _cores = os.cpus().length; - } - return _cores; - } - function getValue(lines, property, separator, trimmed, lineMatch) { - separator = separator || ":"; - property = property.toLowerCase(); - trimmed = trimmed || false; - lineMatch = lineMatch || false; - let result = ""; - lines.some((line) => { - let lineLower = line.toLowerCase().replace(/\t/g, ""); - if (trimmed) { - lineLower = lineLower.trim(); - } - if (lineLower.startsWith(property) && (lineMatch ? lineLower.match(property + separator) || lineLower.match(property + " " + separator) : true)) { - const parts = trimmed ? line.trim().split(separator) : line.split(separator); - if (parts.length >= 2) { - parts.shift(); - result = parts.join(separator).trim(); - return true; - } - } - }); - return result; - } - function decodeEscapeSequence(str, base) { - base = base || 16; - return str.replace(/\\x([0-9A-Fa-f]{2})/g, function() { - return String.fromCharCode(parseInt(arguments[1], base)); - }); - } - function detectSplit(str) { - let seperator = ""; - let part = 0; - str.split("").forEach((element) => { - if (element >= "0" && element <= "9") { - if (part === 1) { - part++; - } - } else { - if (part === 0) { - part++; - } - if (part === 1) { - seperator += element; - } - } - }); - return seperator; - } - function parseTime(t, pmDesignator) { - pmDesignator = pmDesignator || ""; - t = t.toUpperCase(); - let hour = 0; - let min = 0; - let splitter = detectSplit(t); - let parts = t.split(splitter); - if (parts.length >= 2) { - if (parts[2]) { - parts[1] += parts[2]; - } - let isPM = parts[1] && parts[1].toLowerCase().indexOf("pm") > -1 || parts[1].toLowerCase().indexOf("p.m.") > -1 || parts[1].toLowerCase().indexOf("p. m.") > -1 || parts[1].toLowerCase().indexOf("n") > -1 || parts[1].toLowerCase().indexOf("ch") > -1 || parts[1].toLowerCase().indexOf("\xF6s") > -1 || pmDesignator && parts[1].toLowerCase().indexOf(pmDesignator) > -1; - hour = parseInt(parts[0], 10); - min = parseInt(parts[1], 10); - hour = isPM && hour < 12 ? hour + 12 : hour; - return ("0" + hour).substr(-2) + ":" + ("0" + min).substr(-2); - } - } - function parseDateTime(dt, culture) { - const result = { - date: "", - time: "" - }; - culture = culture || {}; - let dateFormat = (culture.dateFormat || "").toLowerCase(); - let pmDesignator = culture.pmDesignator || ""; - const parts = dt.split(" "); - if (parts[0]) { - if (parts[0].indexOf("/") >= 0) { - const dtparts = parts[0].split("/"); - if (dtparts.length === 3) { - if (dtparts[0].length === 4) { - result.date = dtparts[0] + "-" + ("0" + dtparts[1]).substr(-2) + "-" + ("0" + dtparts[2]).substr(-2); - } else if (dtparts[2].length === 2) { - if (dateFormat.indexOf("/d/") > -1 || dateFormat.indexOf("/dd/") > -1) { - result.date = "20" + dtparts[2] + "-" + ("0" + dtparts[1]).substr(-2) + "-" + ("0" + dtparts[0]).substr(-2); - } else { - result.date = "20" + dtparts[2] + "-" + ("0" + dtparts[1]).substr(-2) + "-" + ("0" + dtparts[0]).substr(-2); - } - } else { - const isEN = dt.toLowerCase().indexOf("pm") > -1 || dt.toLowerCase().indexOf("p.m.") > -1 || dt.toLowerCase().indexOf("p. m.") > -1 || dt.toLowerCase().indexOf("am") > -1 || dt.toLowerCase().indexOf("a.m.") > -1 || dt.toLowerCase().indexOf("a. m.") > -1; - if ((isEN || dateFormat.indexOf("/d/") > -1 || dateFormat.indexOf("/dd/") > -1) && dateFormat.indexOf("dd/") !== 0) { - result.date = dtparts[2] + "-" + ("0" + dtparts[0]).substr(-2) + "-" + ("0" + dtparts[1]).substr(-2); - } else { - result.date = dtparts[2] + "-" + ("0" + dtparts[1]).substr(-2) + "-" + ("0" + dtparts[0]).substr(-2); - } - } - } - } - if (parts[0].indexOf(".") >= 0) { - const dtparts = parts[0].split("."); - if (dtparts.length === 3) { - if (dateFormat.indexOf(".d.") > -1 || dateFormat.indexOf(".dd.") > -1) { - result.date = dtparts[2] + "-" + ("0" + dtparts[0]).substr(-2) + "-" + ("0" + dtparts[1]).substr(-2); - } else { - result.date = dtparts[2] + "-" + ("0" + dtparts[1]).substr(-2) + "-" + ("0" + dtparts[0]).substr(-2); - } - } - } - if (parts[0].indexOf("-") >= 0) { - const dtparts = parts[0].split("-"); - if (dtparts.length === 3) { - result.date = dtparts[0] + "-" + ("0" + dtparts[1]).substr(-2) + "-" + ("0" + dtparts[2]).substr(-2); - } - } - } - if (parts[1]) { - parts.shift(); - let time3 = parts.join(" "); - result.time = parseTime(time3, pmDesignator); - } - return result; - } - function parseHead(head, rights) { - let space = rights > 0; - let count = 1; - let from = 0; - let to = 0; - let result = []; - for (let i = 0;i < head.length; i++) { - if (count <= rights) { - if (/\s/.test(head[i]) && !space) { - to = i - 1; - result.push({ - from, - to: to + 1, - cap: head.substring(from, to + 1) - }); - from = to + 2; - count++; - } - space = head[i] === " "; - } else { - if (!/\s/.test(head[i]) && space) { - to = i - 1; - if (from < to) { - result.push({ - from, - to, - cap: head.substring(from, to) - }); - } - from = to + 1; - count++; - } - space = head[i] === " "; - } - } - to = 5000; - result.push({ - from, - to, - cap: head.substring(from, to) - }); - let len = result.length; - for (let i = 0;i < len; i++) { - if (result[i].cap.replace(/\s/g, "").length === 0) { - if (i + 1 < len) { - result[i].to = result[i + 1].to; - result[i].cap = result[i].cap + result[i + 1].cap; - result.splice(i + 1, 1); - len = len - 1; - } - } - } - return result; - } - function findObjectByKey(array3, key, value) { - for (let i = 0;i < array3.length; i++) { - if (array3[i][key] === value) { - return i; - } - } - return -1; - } - function getWmic() { - if (os.type() === "Windows_NT" && !wmicPath) { - wmicPath = WINDIR + "\\system32\\wbem\\wmic.exe"; - if (!fs.existsSync(wmicPath)) { - try { - const wmicPathArray = execSync("WHERE WMIC", execOptsWin).toString().split(`\r -`); - if (wmicPathArray && wmicPathArray.length) { - wmicPath = wmicPathArray[0]; - } else { - wmicPath = "wmic"; - } - } catch (e) { - wmicPath = "wmic"; - } - } - } - return wmicPath; - } - function wmic(command) { - return new Promise((resolve2) => { - process.nextTick(() => { - try { - powerShell(getWmic() + " " + command).then((stdout) => { - resolve2(stdout, ""); - }); - } catch (e) { - resolve2("", e); - } - }); - }); - } - function getVboxmanage() { - return _windows ? `"${process.env.VBOX_INSTALL_PATH || process.env.VBOX_MSI_INSTALL_PATH}\\VBoxManage.exe"` : "vboxmanage"; - } - function powerShellProceedResults(data) { - let id = ""; - let parts; - let res = ""; - if (data.indexOf(_psCmdStart) >= 0) { - parts = data.split(_psCmdStart); - const parts2 = parts[1].split(_psIdSeperator); - id = parts2[0]; - if (parts2.length > 1) { - data = parts2.slice(1).join(_psIdSeperator); - } - } - if (data.indexOf(_psCmdSeperator) >= 0) { - parts = data.split(_psCmdSeperator); - res = parts[0]; - } - let remove = -1; - for (let i = 0;i < _psCmds.length; i++) { - if (_psCmds[i].id === id) { - remove = i; - _psCmds[i].callback(res); - } - } - if (remove >= 0) { - _psCmds.splice(remove, 1); - } - } - function powerShellStart() { - if (!_psChild) { - _psChild = spawn("powershell.exe", ["-NoProfile", "-NoLogo", "-InputFormat", "Text", "-NoExit", "-Command", "-"], { - stdio: "pipe", - windowsHide: true, - maxBuffer: 1024 * 20000, - encoding: "UTF-8", - env: Object.assign({}, process.env, { LANG: "en_US.UTF-8" }) - }); - if (_psChild && _psChild.pid) { - _psPersistent = true; - _psChild.stdout.on("data", function(data) { - _psResult = _psResult + data.toString("utf8"); - if (data.indexOf(_psCmdSeperator) >= 0) { - powerShellProceedResults(_psResult); - _psResult = ""; - } - }); - _psChild.stderr.on("data", function() { - powerShellProceedResults(_psResult + _psError); - }); - _psChild.on("error", function() { - powerShellProceedResults(_psResult + _psError); - }); - _psChild.on("close", function() { - if (_psChild) { - _psChild.kill(); - } - }); - } - } - } - function powerShellRelease() { - try { - if (_psChild) { - _psChild.stdin.write("exit" + os.EOL); - _psChild.stdin.end(); - _psPersistent = false; - } - } catch (e) { - if (_psChild) { - _psChild.kill(); - } - } - _psChild = null; - } - function powerShell(cmd) { - if (_psPersistent) { - const id = Math.random().toString(36).substring(2, 12); - return new Promise((resolve2) => { - process.nextTick(() => { - function callback(data) { - resolve2(data); - } - _psCmds.push({ - id, - cmd, - callback, - start: new Date - }); - try { - if (_psChild && _psChild.pid) { - _psChild.stdin.write(_psToUTF8 + "echo " + _psCmdStart + id + _psIdSeperator + "; " + os.EOL + cmd + os.EOL + "echo " + _psCmdSeperator + os.EOL); - } - } catch (e) { - resolve2(""); - } - }); - }); - } else { - let result = ""; - return new Promise((resolve2) => { - process.nextTick(() => { - try { - const child = spawn("powershell.exe", ["-NoProfile", "-NoLogo", "-InputFormat", "Text", "-NoExit", "-ExecutionPolicy", "Unrestricted", "-Command", "-"], { - stdio: "pipe", - windowsHide: true, - maxBuffer: 1024 * 20000, - encoding: "UTF-8", - env: Object.assign({}, process.env, { LANG: "en_US.UTF-8" }) - }); - if (child && !child.pid) { - child.on("error", function() { - resolve2(result); - }); - } - if (child && child.pid) { - child.stdout.on("data", function(data) { - result = result + data.toString("utf8"); - }); - child.stderr.on("data", function() { - child.kill(); - resolve2(result); - }); - child.on("close", function() { - child.kill(); - resolve2(result); - }); - child.on("error", function() { - child.kill(); - resolve2(result); - }); - try { - child.stdin.write(_psToUTF8 + cmd + os.EOL); - child.stdin.write("exit" + os.EOL); - child.stdin.end(); - } catch (e) { - child.kill(); - resolve2(result); - } - } else { - resolve2(result); - } - } catch (e) { - resolve2(result); - } - }); - }); - } - } - function execSafe(cmd, args, options) { - let result = ""; - options = options || {}; - return new Promise((resolve2) => { - process.nextTick(() => { - try { - const child = spawn(cmd, args, options); - if (child && !child.pid) { - child.on("error", function() { - resolve2(result); - }); - } - if (child && child.pid) { - child.stdout.on("data", function(data) { - result += data.toString(); - }); - child.on("close", function() { - child.kill(); - resolve2(result); - }); - child.on("error", function() { - child.kill(); - resolve2(result); - }); - } else { - resolve2(result); - } - } catch (e) { - resolve2(result); - } - }); - }); - } - function getCodepage() { - if (_windows) { - if (!codepage) { - try { - const stdout = execSync("chcp", execOptsWin); - const lines = stdout.toString().split(`\r -`); - const parts = lines[0].split(":"); - codepage = parts.length > 1 ? parts[1].replace(".", "").trim() : ""; - } catch (err) { - codepage = "437"; - } - } - return codepage; - } - if (_linux || _darwin || _freebsd || _openbsd || _netbsd) { - if (!codepage) { - try { - const stdout = execSync("echo $LANG", util3.execOptsLinux); - const lines = stdout.toString().split(`\r -`); - const parts = lines[0].split("."); - codepage = parts.length > 1 ? parts[1].trim() : ""; - if (!codepage) { - codepage = "UTF-8"; - } - } catch (err) { - codepage = "UTF-8"; - } - } - return codepage; - } - } - function smartMonToolsInstalled() { - if (_smartMonToolsInstalled !== null) { - return _smartMonToolsInstalled; - } - _smartMonToolsInstalled = false; - if (_windows) { - try { - const pathArray = execSync("WHERE smartctl 2>nul", execOptsWin).toString().split(`\r -`); - if (pathArray && pathArray.length) { - _smartMonToolsInstalled = pathArray[0].indexOf(":\\") >= 0; - } else { - _smartMonToolsInstalled = false; - } - } catch (e) { - _smartMonToolsInstalled = false; - } - } - if (_linux || _darwin || _freebsd || _openbsd || _netbsd) { - try { - const pathArray = execSync("which smartctl 2>/dev/null", execOptsLinux).toString().split(`\r -`); - _smartMonToolsInstalled = pathArray.length > 0; - } catch (e) { - util3.noop(); - } - } - return _smartMonToolsInstalled; - } - function isRaspberry() { - const PI_MODEL_NO = [ - "BCM2708", - "BCM2709", - "BCM2710", - "BCM2711", - "BCM2712", - "BCM2835", - "BCM2836", - "BCM2837", - "BCM2837B0" - ]; - let cpuinfo = []; - if (_rpi_cpuinfo !== null) { - cpuinfo = _rpi_cpuinfo; - } else { - try { - cpuinfo = fs.readFileSync("/proc/cpuinfo", { encoding: "utf8" }).toString().split(` -`); - _rpi_cpuinfo = cpuinfo; - } catch (e) { - return false; - } - } - const hardware = getValue(cpuinfo, "hardware"); - return hardware && PI_MODEL_NO.indexOf(hardware) > -1; - } - function isRaspbian() { - let osrelease = []; - try { - osrelease = fs.readFileSync("/etc/os-release", { encoding: "utf8" }).toString().split(` -`); - } catch (e) { - return false; - } - const id = getValue(osrelease, "id", "="); - return id && id.indexOf("raspbian") > -1; - } - function execWin(cmd, opts, callback) { - if (!callback) { - callback = opts; - opts = execOptsWin; - } - let newCmd = "chcp 65001 > nul && cmd /C " + cmd + " && chcp " + codepage + " > nul"; - exec(newCmd, opts, function(error48, stdout) { - callback(error48, stdout); - }); - } - function darwinXcodeExists() { - const cmdLineToolsExists = fs.existsSync("/Library/Developer/CommandLineTools/usr/bin/"); - const xcodeAppExists = fs.existsSync("/Applications/Xcode.app/Contents/Developer/Tools"); - const xcodeExists = fs.existsSync("/Library/Developer/Xcode/"); - return cmdLineToolsExists || xcodeExists || xcodeAppExists; - } - function nanoSeconds() { - const time3 = process.hrtime(); - if (!Array.isArray(time3) || time3.length !== 2) { - return 0; - } - return +time3[0] * 1e9 + +time3[1]; - } - function countUniqueLines(lines, startingWith) { - startingWith = startingWith || ""; - const uniqueLines = []; - lines.forEach((line) => { - if (line.startsWith(startingWith)) { - if (uniqueLines.indexOf(line) === -1) { - uniqueLines.push(line); - } - } - }); - return uniqueLines.length; - } - function countLines(lines, startingWith) { - startingWith = startingWith || ""; - const uniqueLines = []; - lines.forEach((line) => { - if (line.startsWith(startingWith)) { - uniqueLines.push(line); - } - }); - return uniqueLines.length; - } - function sanitizeShellString(str, strict) { - if (typeof strict === "undefined") { - strict = false; - } - const s2 = str || ""; - let result = ""; - const l = mathMin(s2.length, 2000); - for (let i = 0;i <= l; i++) { - if (!(s2[i] === undefined || s2[i] === ">" || s2[i] === "<" || s2[i] === "*" || s2[i] === "?" || s2[i] === "[" || s2[i] === "]" || s2[i] === "|" || s2[i] === "\u02DA" || s2[i] === "$" || s2[i] === ";" || s2[i] === "&" || s2[i] === "]" || s2[i] === "#" || s2[i] === "\\" || s2[i] === "\t" || s2[i] === ` -` || s2[i] === "\r" || s2[i] === "'" || s2[i] === "`" || s2[i] === '"' || s2[i].length > 1 || strict && s2[i] === "(" || strict && s2[i] === ")" || strict && s2[i] === "@" || strict && s2[i] === " " || strict && s2[i] == "{" || strict && s2[i] == ";" || strict && s2[i] == "}")) { - result = result + s2[i]; - } - } - return result; - } - function isPrototypePolluted() { - const s2 = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - let notPolluted = true; - let st = ""; - st.__proto__.replace = stringReplace; - st.__proto__.toLowerCase = stringToLower; - st.__proto__.toString = stringToString; - st.__proto__.substr = stringSubstr; - notPolluted = notPolluted || s2.length !== 62; - const ms = Date.now(); - if (typeof ms === "number" && ms > 1600000000000) { - const l = ms % 100 + 15; - for (let i = 0;i < l; i++) { - const r = Math.random() * 61.99999999 + 1; - const rs = parseInt(Math.floor(r).toString(), 10); - const rs2 = parseInt(r.toString().split(".")[0], 10); - const q = Math.random() * 61.99999999 + 1; - const qs = parseInt(Math.floor(q).toString(), 10); - const qs2 = parseInt(q.toString().split(".")[0], 10); - notPolluted = notPolluted && r !== q; - notPolluted = notPolluted && rs === rs2 && qs === qs2; - st += s2[rs - 1]; - } - notPolluted = notPolluted && st.length === l; - let p = Math.random() * l * 0.9999999999; - let stm = st.substr(0, p) + " " + st.substr(p, 2000); - stm.__proto__.replace = stringReplace; - let sto = stm.replace(/ /g, ""); - notPolluted = notPolluted && st === sto; - p = Math.random() * l * 0.9999999999; - stm = st.substr(0, p) + "{" + st.substr(p, 2000); - sto = stm.replace(/{/g, ""); - notPolluted = notPolluted && st === sto; - p = Math.random() * l * 0.9999999999; - stm = st.substr(0, p) + "*" + st.substr(p, 2000); - sto = stm.replace(/\*/g, ""); - notPolluted = notPolluted && st === sto; - p = Math.random() * l * 0.9999999999; - stm = st.substr(0, p) + "$" + st.substr(p, 2000); - sto = stm.replace(/\$/g, ""); - notPolluted = notPolluted && st === sto; - const stl = st.toLowerCase(); - notPolluted = notPolluted && stl.length === l && stl[l - 1] && !stl[l]; - for (let i = 0;i < l; i++) { - const s1 = st[i]; - s1.__proto__.toLowerCase = stringToLower; - const s22 = stl ? stl[i] : ""; - const s1l = s1.toLowerCase(); - notPolluted = notPolluted && s1l[0] === s22 && s1l[0] && !s1l[1]; - } - } - return !notPolluted; - } - function hex2bin(hex3) { - return ("00000000" + parseInt(hex3, 16).toString(2)).substr(-8); - } - function getFilesInPath(source) { - const lstatSync = fs.lstatSync; - const readdirSync = fs.readdirSync; - const join6 = path.join; - function isDirectory(source2) { - return lstatSync(source2).isDirectory(); - } - function isFile(source2) { - return lstatSync(source2).isFile(); - } - function getDirectories(source2) { - return readdirSync(source2).map(function(name) { - return join6(source2, name); - }).filter(isDirectory); - } - function getFiles(source2) { - return readdirSync(source2).map(function(name) { - return join6(source2, name); - }).filter(isFile); - } - function getFilesRecursively(source2) { - try { - let dirs = getDirectories(source2); - let files = dirs.map(function(dir) { - return getFilesRecursively(dir); - }).reduce(function(a, b) { - return a.concat(b); - }, []); - return files.concat(getFiles(source2)); - } catch (e) { - return []; - } - } - if (fs.existsSync(source)) { - return getFilesRecursively(source); - } else { - return []; - } - } - function decodePiCpuinfo(lines) { - if (_rpi_cpuinfo === null) { - _rpi_cpuinfo = lines; - } - const oldRevisionCodes = { - "0002": { - type: "B", - revision: "1.0", - memory: 256, - manufacturer: "Egoman", - processor: "BCM2835" - }, - "0003": { - type: "B", - revision: "1.0", - memory: 256, - manufacturer: "Egoman", - processor: "BCM2835" - }, - "0004": { - type: "B", - revision: "2.0", - memory: 256, - manufacturer: "Sony UK", - processor: "BCM2835" - }, - "0005": { - type: "B", - revision: "2.0", - memory: 256, - manufacturer: "Qisda", - processor: "BCM2835" - }, - "0006": { - type: "B", - revision: "2.0", - memory: 256, - manufacturer: "Egoman", - processor: "BCM2835" - }, - "0007": { - type: "A", - revision: "2.0", - memory: 256, - manufacturer: "Egoman", - processor: "BCM2835" - }, - "0008": { - type: "A", - revision: "2.0", - memory: 256, - manufacturer: "Sony UK", - processor: "BCM2835" - }, - "0009": { - type: "A", - revision: "2.0", - memory: 256, - manufacturer: "Qisda", - processor: "BCM2835" - }, - "000d": { - type: "B", - revision: "2.0", - memory: 512, - manufacturer: "Egoman", - processor: "BCM2835" - }, - "000e": { - type: "B", - revision: "2.0", - memory: 512, - manufacturer: "Sony UK", - processor: "BCM2835" - }, - "000f": { - type: "B", - revision: "2.0", - memory: 512, - manufacturer: "Egoman", - processor: "BCM2835" - }, - "0010": { - type: "B+", - revision: "1.2", - memory: 512, - manufacturer: "Sony UK", - processor: "BCM2835" - }, - "0011": { - type: "CM1", - revision: "1.0", - memory: 512, - manufacturer: "Sony UK", - processor: "BCM2835" - }, - "0012": { - type: "A+", - revision: "1.1", - memory: 256, - manufacturer: "Sony UK", - processor: "BCM2835" - }, - "0013": { - type: "B+", - revision: "1.2", - memory: 512, - manufacturer: "Embest", - processor: "BCM2835" - }, - "0014": { - type: "CM1", - revision: "1.0", - memory: 512, - manufacturer: "Embest", - processor: "BCM2835" - }, - "0015": { - type: "A+", - revision: "1.1", - memory: 256, - manufacturer: "512MB\tEmbest", - processor: "BCM2835" - } - }; - const processorList = [ - "BCM2835", - "BCM2836", - "BCM2837", - "BCM2711", - "BCM2712" - ]; - const manufacturerList = [ - "Sony UK", - "Egoman", - "Embest", - "Sony Japan", - "Embest", - "Stadium" - ]; - const typeList = { - "00": "A", - "01": "B", - "02": "A+", - "03": "B+", - "04": "2B", - "05": "Alpha (early prototype)", - "06": "CM1", - "08": "3B", - "09": "Zero", - "0a": "CM3", - "0c": "Zero W", - "0d": "3B+", - "0e": "3A+", - "0f": "Internal use only", - "10": "CM3+", - "11": "4B", - "12": "Zero 2 W", - "13": "400", - "14": "CM4", - "15": "CM4S", - "16": "Internal use only", - "17": "5", - "18": "CM5", - "19": "500", - "1a": "CM5 Lite" - }; - const revisionCode = getValue(lines, "revision", ":", true); - const model = getValue(lines, "model:", ":", true); - const serial = getValue(lines, "serial", ":", true); - let result = {}; - if ({}.hasOwnProperty.call(oldRevisionCodes, revisionCode)) { - result = { - model, - serial, - revisionCode, - memory: oldRevisionCodes[revisionCode].memory, - manufacturer: oldRevisionCodes[revisionCode].manufacturer, - processor: oldRevisionCodes[revisionCode].processor, - type: oldRevisionCodes[revisionCode].type, - revision: oldRevisionCodes[revisionCode].revision - }; - } else { - const revision = ("00000000" + getValue(lines, "revision", ":", true).toLowerCase()).substr(-8); - const memSizeCode = parseInt(hex2bin(revision.substr(2, 1)).substr(5, 3), 2) || 0; - const manufacturer = manufacturerList[parseInt(revision.substr(3, 1), 10)]; - const processor = processorList[parseInt(revision.substr(4, 1), 10)]; - const typeCode = revision.substr(5, 2); - result = { - model, - serial, - revisionCode, - memory: 256 * Math.pow(2, memSizeCode), - manufacturer, - processor, - type: {}.hasOwnProperty.call(typeList, typeCode) ? typeList[typeCode] : "", - revision: "1." + revision.substr(7, 1) - }; - } - return result; - } - function getRpiGpu() { - let cpuinfo = null; - if (_rpi_cpuinfo !== null) { - cpuinfo = _rpi_cpuinfo; - } else { - try { - cpuinfo = fs.readFileSync("/proc/cpuinfo", { encoding: "utf8" }).toString().split(` -`); - _rpi_cpuinfo = cpuinfo; - } catch (e) { - return false; - } - } - const rpi = decodePiCpuinfo(cpuinfo); - if (rpi.type === "4B" || rpi.type === "CM4" || rpi.type === "CM4S" || rpi.type === "400") { - return "VideoCore VI"; - } - if (rpi.type === "5") { - return "VideoCore VII"; - } - return "VideoCore IV"; - } - function promiseAll(promises) { - const resolvingPromises = promises.map(function(promise2) { - return new Promise(function(resolve2) { - let payload = new Array(2); - promise2.then(function(result) { - payload[0] = result; - }).catch(function(error48) { - payload[1] = error48; - }).then(function() { - resolve2(payload); - }); - }); - }); - const errors3 = []; - const results = []; - return Promise.all(resolvingPromises).then(function(items) { - items.forEach(function(payload) { - if (payload[1]) { - errors3.push(payload[1]); - results.push(null); - } else { - errors3.push(null); - results.push(payload[0]); - } - }); - return { - errors: errors3, - results - }; - }); - } - function promisify(nodeStyleFunction) { - return function() { - const args = Array.prototype.slice.call(arguments); - return new Promise(function(resolve2, reject) { - args.push(function(err, data) { - if (err) { - reject(err); - } else { - resolve2(data); - } - }); - nodeStyleFunction.apply(null, args); - }); - }; - } - function promisifySave(nodeStyleFunction) { - return function() { - const args = Array.prototype.slice.call(arguments); - return new Promise(function(resolve2) { - args.push(function(err, data) { - resolve2(data); - }); - nodeStyleFunction.apply(null, args); - }); - }; - } - function linuxVersion() { - let result = ""; - if (_linux) { - try { - result = execSync("uname -v", util3.execOptsLinux).toString(); - } catch (e) { - result = ""; - } - } - return result; - } - function plistParser(xmlStr) { - const tags = ["array", "dict", "key", "string", "integer", "date", "real", "data", "boolean", "arrayEmpty"]; - const startStr = "" && pos < len) { - pos++; - } - let depth = 0; - let inTagStart = false; - let inTagContent = false; - let inTagEnd = false; - let metaData = [{ tagStart: "", tagEnd: "", tagContent: "", key: "", data: null }]; - let c = ""; - let cn = xmlStr[pos]; - while (pos < len) { - c = cn; - if (pos + 1 < len) { - cn = xmlStr[pos + 1]; - } - if (c === "<") { - inTagContent = false; - if (cn === "/") { - inTagEnd = true; - } else if (metaData[depth].tagStart) { - metaData[depth].tagContent = ""; - if (!metaData[depth].data) { - metaData[depth].data = metaData[depth].tagStart === "array" ? [] : {}; - } - depth++; - metaData.push({ tagStart: "", tagEnd: "", tagContent: "", key: null, data: null }); - inTagStart = true; - inTagContent = false; - } else if (!inTagStart) { - inTagStart = true; - } - } else if (c === ">") { - if (metaData[depth].tagStart === "true/") { - inTagStart = false; - inTagEnd = true; - metaData[depth].tagStart = ""; - metaData[depth].tagEnd = "/boolean"; - metaData[depth].data = true; - } - if (metaData[depth].tagStart === "false/") { - inTagStart = false; - inTagEnd = true; - metaData[depth].tagStart = ""; - metaData[depth].tagEnd = "/boolean"; - metaData[depth].data = false; - } - if (metaData[depth].tagStart === "array/") { - inTagStart = false; - inTagEnd = true; - metaData[depth].tagStart = ""; - metaData[depth].tagEnd = "/arrayEmpty"; - metaData[depth].data = []; - } - if (inTagContent) { - inTagContent = false; - } - if (inTagStart) { - inTagStart = false; - inTagContent = true; - if (metaData[depth].tagStart === "array") { - metaData[depth].data = []; - } - if (metaData[depth].tagStart === "dict") { - metaData[depth].data = {}; - } - } - if (inTagEnd) { - inTagEnd = false; - if (metaData[depth].tagEnd && tags.indexOf(metaData[depth].tagEnd.substr(1)) >= 0) { - if (metaData[depth].tagEnd === "/dict" || metaData[depth].tagEnd === "/array") { - if (depth > 1 && metaData[depth - 2].tagStart === "array") { - metaData[depth - 2].data.push(metaData[depth - 1].data); - } - if (depth > 1 && metaData[depth - 2].tagStart === "dict") { - metaData[depth - 2].data[metaData[depth - 1].key] = metaData[depth - 1].data; - } - depth--; - metaData.pop(); - metaData[depth].tagContent = ""; - metaData[depth].tagStart = ""; - metaData[depth].tagEnd = ""; - } else { - if (metaData[depth].tagEnd === "/key" && metaData[depth].tagContent) { - metaData[depth].key = metaData[depth].tagContent; - } else { - if (metaData[depth].tagEnd === "/real" && metaData[depth].tagContent) { - metaData[depth].data = parseFloat(metaData[depth].tagContent) || 0; - } - if (metaData[depth].tagEnd === "/integer" && metaData[depth].tagContent) { - metaData[depth].data = parseInt(metaData[depth].tagContent) || 0; - } - if (metaData[depth].tagEnd === "/string" && metaData[depth].tagContent) { - metaData[depth].data = metaData[depth].tagContent || ""; - } - if (metaData[depth].tagEnd === "/boolean") { - metaData[depth].data = metaData[depth].tagContent || false; - } - if (metaData[depth].tagEnd === "/arrayEmpty") { - metaData[depth].data = metaData[depth].tagContent || []; - } - if (depth > 0 && metaData[depth - 1].tagStart === "array") { - metaData[depth - 1].data.push(metaData[depth].data); - } - if (depth > 0 && metaData[depth - 1].tagStart === "dict") { - metaData[depth - 1].data[metaData[depth].key] = metaData[depth].data; - } - } - metaData[depth].tagContent = ""; - metaData[depth].tagStart = ""; - metaData[depth].tagEnd = ""; - } - } - metaData[depth].tagEnd = ""; - inTagStart = false; - inTagContent = false; - } - } else { - if (inTagStart) { - metaData[depth].tagStart += c; - } - if (inTagEnd) { - metaData[depth].tagEnd += c; - } - if (inTagContent) { - metaData[depth].tagContent += c; - } - } - pos++; - } - return metaData[0].data; - } - function strIsNumeric(str) { - return typeof str === "string" && !isNaN(str) && !isNaN(parseFloat(str)); - } - function plistReader(output) { - const lines = output.split(` -`); - for (let i = 0;i < lines.length; i++) { - if (lines[i].indexOf(" = ") >= 0) { - const lineParts = lines[i].split(" = "); - lineParts[0] = lineParts[0].trim(); - if (!lineParts[0].startsWith('"')) { - lineParts[0] = '"' + lineParts[0] + '"'; - } - lineParts[1] = lineParts[1].trim(); - if (lineParts[1].indexOf('"') === -1 && lineParts[1].endsWith(";")) { - const valueString = lineParts[1].substring(0, lineParts[1].length - 1); - if (!strIsNumeric(valueString)) { - lineParts[1] = `"${valueString}";`; - } - } - if (lineParts[1].indexOf('"') >= 0 && lineParts[1].endsWith(";")) { - const valueString = lineParts[1].substring(0, lineParts[1].length - 1).replace(/"/g, ""); - if (strIsNumeric(valueString)) { - lineParts[1] = `${valueString};`; - } - } - lines[i] = lineParts.join(" : "); - } - lines[i] = lines[i].replace(/\(/g, "[").replace(/\)/g, "]").replace(/;/g, ",").trim(); - if (lines[i].startsWith("}") && lines[i - 1] && lines[i - 1].endsWith(",")) { - lines[i - 1] = lines[i - 1].substring(0, lines[i - 1].length - 1); - } - } - output = lines.join(""); - let obj = {}; - try { - obj = JSON.parse(output); - } catch (e) { - noop(); - } - return obj; - } - function semverCompare(v1, v2) { - let res = 0; - const parts1 = v1.split("."); - const parts2 = v2.split("."); - if (parts1[0] < parts2[0]) { - res = 1; - } else if (parts1[0] > parts2[0]) { - res = -1; - } else if (parts1[0] === parts2[0] && parts1.length >= 2 && parts2.length >= 2) { - if (parts1[1] < parts2[1]) { - res = 1; - } else if (parts1[1] > parts2[1]) { - res = -1; - } else if (parts1[1] === parts2[1]) { - if (parts1.length >= 3 && parts2.length >= 3) { - if (parts1[2] < parts2[2]) { - res = 1; - } else if (parts1[2] > parts2[2]) { - res = -1; - } - } else if (parts2.length >= 3) { - res = 1; - } - } - } - return res; - } - function noop() {} - exports.toInt = toInt; - exports.splitByNumber = splitByNumber; - exports.execOptsWin = execOptsWin; - exports.execOptsLinux = execOptsLinux; - exports.getCodepage = getCodepage; - exports.execWin = execWin; - exports.isFunction = isFunction; - exports.unique = unique; - exports.sortByKey = sortByKey; - exports.cores = cores; - exports.getValue = getValue; - exports.decodeEscapeSequence = decodeEscapeSequence; - exports.parseDateTime = parseDateTime; - exports.parseHead = parseHead; - exports.findObjectByKey = findObjectByKey; - exports.getWmic = getWmic; - exports.wmic = wmic; - exports.darwinXcodeExists = darwinXcodeExists; - exports.getVboxmanage = getVboxmanage; - exports.powerShell = powerShell; - exports.powerShellStart = powerShellStart; - exports.powerShellRelease = powerShellRelease; - exports.execSafe = execSafe; - exports.nanoSeconds = nanoSeconds; - exports.countUniqueLines = countUniqueLines; - exports.countLines = countLines; - exports.noop = noop; - exports.isRaspberry = isRaspberry; - exports.isRaspbian = isRaspbian; - exports.sanitizeShellString = sanitizeShellString; - exports.isPrototypePolluted = isPrototypePolluted; - exports.decodePiCpuinfo = decodePiCpuinfo; - exports.getRpiGpu = getRpiGpu; - exports.promiseAll = promiseAll; - exports.promisify = promisify; - exports.promisifySave = promisifySave; - exports.smartMonToolsInstalled = smartMonToolsInstalled; - exports.linuxVersion = linuxVersion; - exports.plistParser = plistParser; - exports.plistReader = plistReader; - exports.stringReplace = stringReplace; - exports.stringToLower = stringToLower; - exports.stringToString = stringToString; - exports.stringSubstr = stringSubstr; - exports.stringTrim = stringTrim; - exports.stringStartWith = stringStartWith; - exports.mathMin = mathMin; - exports.WINDIR = WINDIR; - exports.getFilesInPath = getFilesInPath; - exports.semverCompare = semverCompare; -}); - -// ../../../../node_modules/.bun/systeminformation@5.23.8/node_modules/systeminformation/lib/network.js -var require_network = __commonJS((exports) => { - var os = __require("os"); - var exec = __require("child_process").exec; - var execSync = __require("child_process").execSync; - var fs = __require("fs"); - var util3 = require_util4(); - var _platform = process.platform; - var _linux = _platform === "linux" || _platform === "android"; - var _darwin = _platform === "darwin"; - var _windows = _platform === "win32"; - var _freebsd = _platform === "freebsd"; - var _openbsd = _platform === "openbsd"; - var _netbsd = _platform === "netbsd"; - var _sunos = _platform === "sunos"; - var _network = {}; - var _default_iface = ""; - var _ifaces = {}; - var _dhcpNics = []; - var _networkInterfaces = []; - var _mac2 = {}; - var pathToIp; - function getDefaultNetworkInterface() { - let ifacename = ""; - let ifacenameFirst = ""; - try { - let ifaces = os.networkInterfaces(); - let scopeid = 9999; - for (let dev in ifaces) { - if ({}.hasOwnProperty.call(ifaces, dev)) { - ifaces[dev].forEach(function(details) { - if (details && details.internal === false) { - ifacenameFirst = ifacenameFirst || dev; - if (details.scopeid && details.scopeid < scopeid) { - ifacename = dev; - scopeid = details.scopeid; - } - } - }); - } - } - ifacename = ifacename || ifacenameFirst || ""; - if (_windows) { - let defaultIp = ""; - const cmd = "netstat -r"; - const result = execSync(cmd, util3.execOptsWin); - const lines = result.toString().split(os.EOL); - lines.forEach((line) => { - line = line.replace(/\s+/g, " ").trim(); - if (line.indexOf("0.0.0.0 0.0.0.0") > -1 && !/[a-zA-Z]/.test(line)) { - const parts = line.split(" "); - if (parts.length >= 5) { - defaultIp = parts[parts.length - 2]; - } - } - }); - if (defaultIp) { - for (let dev in ifaces) { - if ({}.hasOwnProperty.call(ifaces, dev)) { - ifaces[dev].forEach(function(details) { - if (details && details.address && details.address === defaultIp) { - ifacename = dev; - } - }); - } - } - } - } - if (_linux) { - let cmd = "ip route 2> /dev/null | grep default"; - let result = execSync(cmd, util3.execOptsLinux); - let parts = result.toString().split(` -`)[0].split(/\s+/); - if (parts[0] === "none" && parts[5]) { - ifacename = parts[5]; - } else if (parts[4]) { - ifacename = parts[4]; - } - if (ifacename.indexOf(":") > -1) { - ifacename = ifacename.split(":")[1].trim(); - } - } - if (_darwin || _freebsd || _openbsd || _netbsd || _sunos) { - let cmd = ""; - if (_linux) { - cmd = "ip route 2> /dev/null | grep default | awk '{print $5}'"; - } - if (_darwin) { - cmd = "route -n get default 2>/dev/null | grep interface: | awk '{print $2}'"; - } - if (_freebsd || _openbsd || _netbsd || _sunos) { - cmd = "route get 0.0.0.0 | grep interface:"; - } - let result = execSync(cmd); - ifacename = result.toString().split(` -`)[0]; - if (ifacename.indexOf(":") > -1) { - ifacename = ifacename.split(":")[1].trim(); - } - } - } catch (e) { - util3.noop(); - } - if (ifacename) { - _default_iface = ifacename; - } - return _default_iface; - } - exports.getDefaultNetworkInterface = getDefaultNetworkInterface; - function getMacAddresses() { - let iface = ""; - let mac3 = ""; - let result = {}; - if (_linux || _freebsd || _openbsd || _netbsd) { - if (typeof pathToIp === "undefined") { - try { - const lines = execSync("which ip", util3.execOptsLinux).toString().split(` -`); - if (lines.length && lines[0].indexOf(":") === -1 && lines[0].indexOf("/") === 0) { - pathToIp = lines[0]; - } else { - pathToIp = ""; - } - } catch (e) { - pathToIp = ""; - } - } - try { - const cmd = "export LC_ALL=C; " + (pathToIp ? pathToIp + " link show up" : "/sbin/ifconfig") + "; unset LC_ALL"; - let res = execSync(cmd, util3.execOptsLinux); - const lines = res.toString().split(` -`); - for (let i = 0;i < lines.length; i++) { - if (lines[i] && lines[i][0] !== " ") { - if (pathToIp) { - let nextline = lines[i + 1].trim().split(" "); - if (nextline[0] === "link/ether") { - iface = lines[i].split(" ")[1]; - iface = iface.slice(0, iface.length - 1); - mac3 = nextline[1]; - } - } else { - iface = lines[i].split(" ")[0]; - mac3 = lines[i].split("HWaddr ")[1]; - } - if (iface && mac3) { - result[iface] = mac3.trim(); - iface = ""; - mac3 = ""; - } - } - } - } catch (e) { - util3.noop(); - } - } - if (_darwin) { - try { - const cmd = "/sbin/ifconfig"; - let res = execSync(cmd); - const lines = res.toString().split(` -`); - for (let i = 0;i < lines.length; i++) { - if (lines[i] && lines[i][0] !== "\t" && lines[i].indexOf(":") > 0) { - iface = lines[i].split(":")[0]; - } else if (lines[i].indexOf("\tether ") === 0) { - mac3 = lines[i].split("\tether ")[1]; - if (iface && mac3) { - result[iface] = mac3.trim(); - iface = ""; - mac3 = ""; - } - } - } - } catch (e) { - util3.noop(); - } - } - return result; - } - function networkInterfaceDefault(callback) { - return new Promise((resolve2) => { - process.nextTick(() => { - let result = getDefaultNetworkInterface(); - if (callback) { - callback(result); - } - resolve2(result); - }); - }); - } - exports.networkInterfaceDefault = networkInterfaceDefault; - function parseLinesWindowsNics(sections, nconfigsections) { - let nics = []; - for (let i in sections) { - if ({}.hasOwnProperty.call(sections, i)) { - if (sections[i].trim() !== "") { - let lines = sections[i].trim().split(`\r -`); - let linesNicConfig = nconfigsections && nconfigsections[i] ? nconfigsections[i].trim().split(`\r -`) : []; - let netEnabled = util3.getValue(lines, "NetEnabled", ":"); - let adapterType = util3.getValue(lines, "AdapterTypeID", ":") === "9" ? "wireless" : "wired"; - let ifacename = util3.getValue(lines, "Name", ":").replace(/\]/g, ")").replace(/\[/g, "("); - let iface = util3.getValue(lines, "NetConnectionID", ":").replace(/\]/g, ")").replace(/\[/g, "("); - if (ifacename.toLowerCase().indexOf("wi-fi") >= 0 || ifacename.toLowerCase().indexOf("wireless") >= 0) { - adapterType = "wireless"; - } - if (netEnabled !== "") { - const speed = parseInt(util3.getValue(lines, "speed", ":").trim(), 10) / 1e6; - nics.push({ - mac: util3.getValue(lines, "MACAddress", ":").toLowerCase(), - dhcp: util3.getValue(linesNicConfig, "dhcpEnabled", ":").toLowerCase() === "true", - name: ifacename, - iface, - netEnabled: netEnabled === "TRUE", - speed: isNaN(speed) ? null : speed, - operstate: util3.getValue(lines, "NetConnectionStatus", ":") === "2" ? "up" : "down", - type: adapterType - }); - } - } - } - } - return nics; - } - function getWindowsNics() { - return new Promise((resolve2) => { - process.nextTick(() => { - let cmd = "Get-CimInstance Win32_NetworkAdapter | fl *" + "; echo '#-#-#-#';"; - cmd += "Get-CimInstance Win32_NetworkAdapterConfiguration | fl DHCPEnabled" + ""; - try { - util3.powerShell(cmd).then((data) => { - data = data.split("#-#-#-#"); - const nsections = (data[0] || "").split(/\n\s*\n/); - const nconfigsections = (data[1] || "").split(/\n\s*\n/); - resolve2(parseLinesWindowsNics(nsections, nconfigsections)); - }); - } catch (e) { - resolve2([]); - } - }); - }); - } - function getWindowsDNSsuffixes() { - let iface = {}; - let dnsSuffixes = { - primaryDNS: "", - exitCode: 0, - ifaces: [] - }; - try { - const ipconfig = execSync("ipconfig /all", util3.execOptsWin); - const ipconfigArray = ipconfig.split(`\r -\r -`); - ipconfigArray.forEach((element, index) => { - if (index == 1) { - const longPrimaryDNS = element.split(`\r -`).filter((element2) => { - return element2.toUpperCase().includes("DNS"); - }); - const primaryDNS = longPrimaryDNS[0].substring(longPrimaryDNS[0].lastIndexOf(":") + 1); - dnsSuffixes.primaryDNS = primaryDNS.trim(); - if (!dnsSuffixes.primaryDNS) { - dnsSuffixes.primaryDNS = "Not defined"; - } - } - if (index > 1) { - if (index % 2 == 0) { - const name = element.substring(element.lastIndexOf(" ") + 1).replace(":", ""); - iface.name = name; - } else { - const connectionSpecificDNS = element.split(`\r -`).filter((element2) => { - return element2.toUpperCase().includes("DNS"); - }); - const dnsSuffix = connectionSpecificDNS[0].substring(connectionSpecificDNS[0].lastIndexOf(":") + 1); - iface.dnsSuffix = dnsSuffix.trim(); - dnsSuffixes.ifaces.push(iface); - iface = {}; - } - } - }); - return dnsSuffixes; - } catch (error48) { - return { - primaryDNS: "", - exitCode: 0, - ifaces: [] - }; - } - } - function getWindowsIfaceDNSsuffix(ifaces, ifacename) { - let dnsSuffix = ""; - const interfaceName = ifacename + "."; - try { - const connectionDnsSuffix = ifaces.filter((iface) => { - return interfaceName.includes(iface.name + "."); - }).map((iface) => iface.dnsSuffix); - if (connectionDnsSuffix[0]) { - dnsSuffix = connectionDnsSuffix[0]; - } - if (!dnsSuffix) { - dnsSuffix = ""; - } - return dnsSuffix; - } catch (error48) { - return "Unknown"; - } - } - function getWindowsWiredProfilesInformation() { - try { - const result = execSync("netsh lan show profiles", util3.execOptsWin); - const profileList = result.split(`\r -Profile on interface`); - return profileList; - } catch (error48) { - if (error48.status === 1 && error48.stdout.includes("AutoConfig")) { - return "Disabled"; - } - return []; - } - } - function getWindowsWirelessIfaceSSID(interfaceName) { - try { - const result = execSync(`netsh wlan show interface name="${interfaceName}" | findstr "SSID"`, util3.execOptsWin); - const SSID = result.split(`\r -`).shift(); - const parseSSID = SSID.split(":").pop().trim(); - return parseSSID; - } catch (error48) { - return "Unknown"; - } - } - function getWindowsIEEE8021x(connectionType, iface, ifaces) { - let i8021x = { - state: "Unknown", - protocol: "Unknown" - }; - if (ifaces === "Disabled") { - i8021x.state = "Disabled"; - i8021x.protocol = "Not defined"; - return i8021x; - } - if (connectionType == "wired" && ifaces.length > 0) { - try { - const iface8021xInfo = ifaces.find((element) => { - return element.includes(iface + `\r -`); - }); - const arrayIface8021xInfo = iface8021xInfo.split(`\r -`); - const state8021x = arrayIface8021xInfo.find((element) => { - return element.includes("802.1x"); - }); - if (state8021x.includes("Disabled")) { - i8021x.state = "Disabled"; - i8021x.protocol = "Not defined"; - } else if (state8021x.includes("Enabled")) { - const protocol8021x = arrayIface8021xInfo.find((element) => { - return element.includes("EAP"); - }); - i8021x.protocol = protocol8021x.split(":").pop(); - i8021x.state = "Enabled"; - } - } catch (error48) { - return i8021x; - } - } else if (connectionType == "wireless") { - let i8021xState = ""; - let i8021xProtocol = ""; - try { - const SSID = getWindowsWirelessIfaceSSID(iface); - if (SSID !== "Unknown") { - let ifaceSanitized = ""; - const s2 = util3.isPrototypePolluted() ? "---" : util3.sanitizeShellString(SSID); - const l = util3.mathMin(s2.length, 2000); - for (let i = 0;i <= l; i++) { - if (s2[i] !== undefined) { - ifaceSanitized = ifaceSanitized + s2[i]; - } - } - i8021xState = execSync(`netsh wlan show profiles "${ifaceSanitized}" | findstr "802.1X"`, util3.execOptsWin); - i8021xProtocol = execSync(`netsh wlan show profiles "${ifaceSanitized}" | findstr "EAP"`, util3.execOptsWin); - } - if (i8021xState.includes(":") && i8021xProtocol.includes(":")) { - i8021x.state = i8021xState.split(":").pop(); - i8021x.protocol = i8021xProtocol.split(":").pop(); - } - } catch (error48) { - if (error48.status === 1 && error48.stdout.includes("AutoConfig")) { - i8021x.state = "Disabled"; - i8021x.protocol = "Not defined"; - } - return i8021x; - } - } - return i8021x; - } - function splitSectionsNics(lines) { - const result = []; - let section = []; - lines.forEach(function(line) { - if (!line.startsWith("\t") && !line.startsWith(" ")) { - if (section.length) { - result.push(section); - section = []; - } - } - section.push(line); - }); - if (section.length) { - result.push(section); - } - return result; - } - function parseLinesDarwinNics(sections) { - let nics = []; - sections.forEach((section) => { - let nic = { - iface: "", - mtu: null, - mac: "", - ip6: "", - ip4: "", - speed: null, - type: "", - operstate: "", - duplex: "", - internal: false - }; - const first = section[0]; - nic.iface = first.split(":")[0].trim(); - let parts = first.split("> mtu"); - nic.mtu = parts.length > 1 ? parseInt(parts[1], 10) : null; - if (isNaN(nic.mtu)) { - nic.mtu = null; - } - nic.internal = parts[0].toLowerCase().indexOf("loopback") > -1; - section.forEach((line) => { - if (line.trim().startsWith("ether ")) { - nic.mac = line.split("ether ")[1].toLowerCase().trim(); - } - if (line.trim().startsWith("inet6 ") && !nic.ip6) { - nic.ip6 = line.split("inet6 ")[1].toLowerCase().split("%")[0].split(" ")[0]; - } - if (line.trim().startsWith("inet ") && !nic.ip4) { - nic.ip4 = line.split("inet ")[1].toLowerCase().split(" ")[0]; - } - }); - let speed = util3.getValue(section, "link rate"); - nic.speed = speed ? parseFloat(speed) : null; - if (nic.speed === null) { - speed = util3.getValue(section, "uplink rate"); - nic.speed = speed ? parseFloat(speed) : null; - if (nic.speed !== null && speed.toLowerCase().indexOf("gbps") >= 0) { - nic.speed = nic.speed * 1000; - } - } else { - if (speed.toLowerCase().indexOf("gbps") >= 0) { - nic.speed = nic.speed * 1000; - } - } - nic.type = util3.getValue(section, "type").toLowerCase().indexOf("wi-fi") > -1 ? "wireless" : "wired"; - const operstate = util3.getValue(section, "status").toLowerCase(); - nic.operstate = operstate === "active" ? "up" : operstate === "inactive" ? "down" : "unknown"; - nic.duplex = util3.getValue(section, "media").toLowerCase().indexOf("half-duplex") > -1 ? "half" : "full"; - if (nic.ip6 || nic.ip4 || nic.mac) { - nics.push(nic); - } - }); - return nics; - } - function getDarwinNics() { - const cmd = "/sbin/ifconfig -v"; - try { - const lines = execSync(cmd, { maxBuffer: 1024 * 20000 }).toString().split(` -`); - const nsections = splitSectionsNics(lines); - return parseLinesDarwinNics(nsections); - } catch (e) { - return []; - } - } - function getLinuxIfaceConnectionName(interfaceName) { - const cmd = `nmcli device status 2>/dev/null | grep ${interfaceName}`; - try { - const result = execSync(cmd, util3.execOptsLinux).toString(); - const resultFormat = result.replace(/\s+/g, " ").trim(); - const connectionNameLines = resultFormat.split(" ").slice(3); - const connectionName = connectionNameLines.join(" "); - return connectionName != "--" ? connectionName : ""; - } catch (e) { - return ""; - } - } - function checkLinuxDCHPInterfaces(file2) { - let result = []; - try { - let cmd = `cat ${file2} 2> /dev/null | grep 'iface\\|source'`; - const lines = execSync(cmd, util3.execOptsLinux).toString().split(` -`); - lines.forEach((line) => { - const parts = line.replace(/\s+/g, " ").trim().split(" "); - if (parts.length >= 4) { - if (line.toLowerCase().indexOf(" inet ") >= 0 && line.toLowerCase().indexOf("dhcp") >= 0) { - result.push(parts[1]); - } - } - if (line.toLowerCase().includes("source")) { - let file3 = line.split(" ")[1]; - result = result.concat(checkLinuxDCHPInterfaces(file3)); - } - }); - } catch (e) { - util3.noop(); - } - return result; - } - function getLinuxDHCPNics() { - let cmd = "ip a 2> /dev/null"; - let result = []; - try { - const lines = execSync(cmd, util3.execOptsLinux).toString().split(` -`); - const nsections = splitSectionsNics(lines); - result = parseLinuxDHCPNics(nsections); - } catch (e) { - util3.noop(); - } - try { - result = checkLinuxDCHPInterfaces("/etc/network/interfaces"); - } catch (e) { - util3.noop(); - } - return result; - } - function parseLinuxDHCPNics(sections) { - const result = []; - if (sections && sections.length) { - sections.forEach((lines) => { - if (lines && lines.length) { - const parts = lines[0].split(":"); - if (parts.length > 2) { - for (let line of lines) { - if (line.indexOf(" inet ") >= 0 && line.indexOf(" dynamic ") >= 0) { - const parts2 = line.split(" "); - const nic = parts2[parts2.length - 1].trim(); - result.push(nic); - break; - } - } - } - } - }); - } - return result; - } - function getLinuxIfaceDHCPstatus(iface, connectionName, DHCPNics) { - let result = false; - if (connectionName) { - const cmd = `nmcli connection show "${connectionName}" 2>/dev/null | grep ipv4.method;`; - try { - const lines = execSync(cmd, util3.execOptsLinux).toString(); - const resultFormat = lines.replace(/\s+/g, " ").trim(); - let dhcStatus = resultFormat.split(" ").slice(1).toString(); - switch (dhcStatus) { - case "auto": - result = true; - break; - default: - result = false; - break; - } - return result; - } catch (e) { - return DHCPNics.indexOf(iface) >= 0; - } - } else { - return DHCPNics.indexOf(iface) >= 0; - } - } - function getDarwinIfaceDHCPstatus(iface) { - let result = false; - const cmd = `ipconfig getpacket "${iface}" 2>/dev/null | grep lease_time;`; - try { - const lines = execSync(cmd).toString().split(` -`); - if (lines.length && lines[0].startsWith("lease_time")) { - result = true; - } - } catch (e) { - util3.noop(); - } - return result; - } - function getLinuxIfaceDNSsuffix(connectionName) { - if (connectionName) { - const cmd = `nmcli connection show "${connectionName}" 2>/dev/null | grep ipv4.dns-search;`; - try { - const result = execSync(cmd, util3.execOptsLinux).toString(); - const resultFormat = result.replace(/\s+/g, " ").trim(); - const dnsSuffix = resultFormat.split(" ").slice(1).toString(); - return dnsSuffix == "--" ? "Not defined" : dnsSuffix; - } catch (e) { - return "Unknown"; - } - } else { - return "Unknown"; - } - } - function getLinuxIfaceIEEE8021xAuth(connectionName) { - if (connectionName) { - const cmd = `nmcli connection show "${connectionName}" 2>/dev/null | grep 802-1x.eap;`; - try { - const result = execSync(cmd, util3.execOptsLinux).toString(); - const resultFormat = result.replace(/\s+/g, " ").trim(); - const authenticationProtocol = resultFormat.split(" ").slice(1).toString(); - return authenticationProtocol == "--" ? "" : authenticationProtocol; - } catch (e) { - return "Not defined"; - } - } else { - return "Not defined"; - } - } - function getLinuxIfaceIEEE8021xState(authenticationProtocol) { - if (authenticationProtocol) { - if (authenticationProtocol == "Not defined") { - return "Disabled"; - } - return "Enabled"; - } else { - return "Unknown"; - } - } - function testVirtualNic(iface, ifaceName, mac3) { - const virtualMacs = ["00:00:00:00:00:00", "00:03:FF", "00:05:69", "00:0C:29", "00:0F:4B", "00:13:07", "00:13:BE", "00:15:5d", "00:16:3E", "00:1C:42", "00:21:F6", "00:24:0B", "00:50:56", "00:A0:B1", "00:E0:C8", "08:00:27", "0A:00:27", "18:92:2C", "16:DF:49", "3C:F3:92", "54:52:00", "FC:15:97"]; - if (mac3) { - return virtualMacs.filter((item) => { - return mac3.toUpperCase().toUpperCase().startsWith(item.substring(0, mac3.length)); - }).length > 0 || iface.toLowerCase().indexOf(" virtual ") > -1 || ifaceName.toLowerCase().indexOf(" virtual ") > -1 || iface.toLowerCase().indexOf("vethernet ") > -1 || ifaceName.toLowerCase().indexOf("vethernet ") > -1 || iface.toLowerCase().startsWith("veth") || ifaceName.toLowerCase().startsWith("veth") || iface.toLowerCase().startsWith("vboxnet") || ifaceName.toLowerCase().startsWith("vboxnet"); - } else { - return false; - } - } - function networkInterfaces(callback, rescan, defaultString) { - if (typeof callback === "string") { - defaultString = callback; - rescan = true; - callback = null; - } - if (typeof callback === "boolean") { - rescan = callback; - callback = null; - defaultString = ""; - } - if (typeof rescan === "undefined") { - rescan = true; - } - defaultString = defaultString || ""; - defaultString = "" + defaultString; - return new Promise((resolve2) => { - process.nextTick(() => { - let ifaces = os.networkInterfaces(); - let result = []; - let nics = []; - let dnsSuffixes = []; - let nics8021xInfo = []; - if (_darwin || _freebsd || _openbsd || _netbsd) { - if (JSON.stringify(ifaces) === JSON.stringify(_ifaces) && !rescan) { - result = _networkInterfaces; - if (callback) { - callback(result); - } - resolve2(result); - } else { - const defaultInterface = getDefaultNetworkInterface(); - _ifaces = JSON.parse(JSON.stringify(ifaces)); - nics = getDarwinNics(); - nics.forEach((nic) => { - if ({}.hasOwnProperty.call(ifaces, nic.iface)) { - ifaces[nic.iface].forEach(function(details) { - if (details.family === "IPv4" || details.family === 4) { - nic.ip4subnet = details.netmask; - } - if (details.family === "IPv6" || details.family === 6) { - nic.ip6subnet = details.netmask; - } - }); - } - let ifaceSanitized = ""; - const s2 = util3.isPrototypePolluted() ? "---" : util3.sanitizeShellString(nic.iface); - const l = util3.mathMin(s2.length, 2000); - for (let i = 0;i <= l; i++) { - if (s2[i] !== undefined) { - ifaceSanitized = ifaceSanitized + s2[i]; - } - } - result.push({ - iface: nic.iface, - ifaceName: nic.iface, - default: nic.iface === defaultInterface, - ip4: nic.ip4, - ip4subnet: nic.ip4subnet || "", - ip6: nic.ip6, - ip6subnet: nic.ip6subnet || "", - mac: nic.mac, - internal: nic.internal, - virtual: nic.internal ? false : testVirtualNic(nic.iface, nic.iface, nic.mac), - operstate: nic.operstate, - type: nic.type, - duplex: nic.duplex, - mtu: nic.mtu, - speed: nic.speed, - dhcp: getDarwinIfaceDHCPstatus(ifaceSanitized), - dnsSuffix: "", - ieee8021xAuth: "", - ieee8021xState: "", - carrierChanges: 0 - }); - }); - _networkInterfaces = result; - if (defaultString.toLowerCase().indexOf("default") >= 0) { - result = result.filter((item) => item.default); - if (result.length > 0) { - result = result[0]; - } else { - result = []; - } - } - if (callback) { - callback(result); - } - resolve2(result); - } - } - if (_linux) { - if (JSON.stringify(ifaces) === JSON.stringify(_ifaces) && !rescan) { - result = _networkInterfaces; - if (callback) { - callback(result); - } - resolve2(result); - } else { - _ifaces = JSON.parse(JSON.stringify(ifaces)); - _dhcpNics = getLinuxDHCPNics(); - const defaultInterface = getDefaultNetworkInterface(); - for (let dev in ifaces) { - let ip4 = ""; - let ip4subnet = ""; - let ip6 = ""; - let ip6subnet = ""; - let mac3 = ""; - let duplex = ""; - let mtu = ""; - let speed = null; - let carrierChanges = 0; - let dhcp = false; - let dnsSuffix = ""; - let ieee8021xAuth = ""; - let ieee8021xState = ""; - let type = ""; - if ({}.hasOwnProperty.call(ifaces, dev)) { - let ifaceName = dev; - ifaces[dev].forEach(function(details) { - if (details.family === "IPv4" || details.family === 4) { - ip4 = details.address; - ip4subnet = details.netmask; - } - if (details.family === "IPv6" || details.family === 6) { - if (!ip6 || ip6.match(/^fe80::/i)) { - ip6 = details.address; - ip6subnet = details.netmask; - } - } - mac3 = details.mac; - const nodeMainVersion = parseInt(process.versions.node.split("."), 10); - if (mac3.indexOf("00:00:0") > -1 && (_linux || _darwin) && !details.internal && nodeMainVersion >= 8 && nodeMainVersion <= 11) { - if (Object.keys(_mac2).length === 0) { - _mac2 = getMacAddresses(); - } - mac3 = _mac2[dev] || ""; - } - }); - let iface = dev.split(":")[0].trim().toLowerCase(); - let ifaceSanitized = ""; - const s2 = util3.isPrototypePolluted() ? "---" : util3.sanitizeShellString(iface); - const l = util3.mathMin(s2.length, 2000); - for (let i = 0;i <= l; i++) { - if (s2[i] !== undefined) { - ifaceSanitized = ifaceSanitized + s2[i]; - } - } - const cmd = `echo -n "addr_assign_type: "; cat /sys/class/net/${ifaceSanitized}/addr_assign_type 2>/dev/null; echo; - echo -n "address: "; cat /sys/class/net/${ifaceSanitized}/address 2>/dev/null; echo; - echo -n "addr_len: "; cat /sys/class/net/${ifaceSanitized}/addr_len 2>/dev/null; echo; - echo -n "broadcast: "; cat /sys/class/net/${ifaceSanitized}/broadcast 2>/dev/null; echo; - echo -n "carrier: "; cat /sys/class/net/${ifaceSanitized}/carrier 2>/dev/null; echo; - echo -n "carrier_changes: "; cat /sys/class/net/${ifaceSanitized}/carrier_changes 2>/dev/null; echo; - echo -n "dev_id: "; cat /sys/class/net/${ifaceSanitized}/dev_id 2>/dev/null; echo; - echo -n "dev_port: "; cat /sys/class/net/${ifaceSanitized}/dev_port 2>/dev/null; echo; - echo -n "dormant: "; cat /sys/class/net/${ifaceSanitized}/dormant 2>/dev/null; echo; - echo -n "duplex: "; cat /sys/class/net/${ifaceSanitized}/duplex 2>/dev/null; echo; - echo -n "flags: "; cat /sys/class/net/${ifaceSanitized}/flags 2>/dev/null; echo; - echo -n "gro_flush_timeout: "; cat /sys/class/net/${ifaceSanitized}/gro_flush_timeout 2>/dev/null; echo; - echo -n "ifalias: "; cat /sys/class/net/${ifaceSanitized}/ifalias 2>/dev/null; echo; - echo -n "ifindex: "; cat /sys/class/net/${ifaceSanitized}/ifindex 2>/dev/null; echo; - echo -n "iflink: "; cat /sys/class/net/${ifaceSanitized}/iflink 2>/dev/null; echo; - echo -n "link_mode: "; cat /sys/class/net/${ifaceSanitized}/link_mode 2>/dev/null; echo; - echo -n "mtu: "; cat /sys/class/net/${ifaceSanitized}/mtu 2>/dev/null; echo; - echo -n "netdev_group: "; cat /sys/class/net/${ifaceSanitized}/netdev_group 2>/dev/null; echo; - echo -n "operstate: "; cat /sys/class/net/${ifaceSanitized}/operstate 2>/dev/null; echo; - echo -n "proto_down: "; cat /sys/class/net/${ifaceSanitized}/proto_down 2>/dev/null; echo; - echo -n "speed: "; cat /sys/class/net/${ifaceSanitized}/speed 2>/dev/null; echo; - echo -n "tx_queue_len: "; cat /sys/class/net/${ifaceSanitized}/tx_queue_len 2>/dev/null; echo; - echo -n "type: "; cat /sys/class/net/${ifaceSanitized}/type 2>/dev/null; echo; - echo -n "wireless: "; cat /proc/net/wireless 2>/dev/null | grep ${ifaceSanitized}; echo; - echo -n "wirelessspeed: "; iw dev ${ifaceSanitized} link 2>&1 | grep bitrate; echo;`; - let lines = []; - try { - lines = execSync(cmd, util3.execOptsLinux).toString().split(` -`); - const connectionName = getLinuxIfaceConnectionName(ifaceSanitized); - dhcp = getLinuxIfaceDHCPstatus(ifaceSanitized, connectionName, _dhcpNics); - dnsSuffix = getLinuxIfaceDNSsuffix(connectionName); - ieee8021xAuth = getLinuxIfaceIEEE8021xAuth(connectionName); - ieee8021xState = getLinuxIfaceIEEE8021xState(ieee8021xAuth); - } catch (e) { - util3.noop(); - } - duplex = util3.getValue(lines, "duplex"); - duplex = duplex.startsWith("cat") ? "" : duplex; - mtu = parseInt(util3.getValue(lines, "mtu"), 10); - let myspeed = parseInt(util3.getValue(lines, "speed"), 10); - speed = isNaN(myspeed) ? null : myspeed; - let wirelessspeed = util3.getValue(lines, "wirelessspeed").split("tx bitrate: "); - if (speed === null && wirelessspeed.length === 2) { - myspeed = parseFloat(wirelessspeed[1]); - speed = isNaN(myspeed) ? null : myspeed; - } - carrierChanges = parseInt(util3.getValue(lines, "carrier_changes"), 10); - const operstate = util3.getValue(lines, "operstate"); - type = operstate === "up" ? util3.getValue(lines, "wireless").trim() ? "wireless" : "wired" : "unknown"; - if (ifaceSanitized === "lo" || ifaceSanitized.startsWith("bond")) { - type = "virtual"; - } - let internal3 = ifaces[dev] && ifaces[dev][0] ? ifaces[dev][0].internal : false; - if (dev.toLowerCase().indexOf("loopback") > -1 || ifaceName.toLowerCase().indexOf("loopback") > -1) { - internal3 = true; - } - const virtual = internal3 ? false : testVirtualNic(dev, ifaceName, mac3); - result.push({ - iface: ifaceSanitized, - ifaceName, - default: iface === defaultInterface, - ip4, - ip4subnet, - ip6, - ip6subnet, - mac: mac3, - internal: internal3, - virtual, - operstate, - type, - duplex, - mtu, - speed, - dhcp, - dnsSuffix, - ieee8021xAuth, - ieee8021xState, - carrierChanges - }); - } - } - _networkInterfaces = result; - if (defaultString.toLowerCase().indexOf("default") >= 0) { - result = result.filter((item) => item.default); - if (result.length > 0) { - result = result[0]; - } else { - result = []; - } - } - if (callback) { - callback(result); - } - resolve2(result); - } - } - if (_windows) { - if (JSON.stringify(ifaces) === JSON.stringify(_ifaces) && !rescan) { - result = _networkInterfaces; - if (callback) { - callback(result); - } - resolve2(result); - } else { - _ifaces = JSON.parse(JSON.stringify(ifaces)); - const defaultInterface = getDefaultNetworkInterface(); - getWindowsNics().then(function(nics2) { - nics2.forEach((nic) => { - let found = false; - Object.keys(ifaces).forEach((key) => { - if (!found) { - ifaces[key].forEach((value) => { - if (Object.keys(value).indexOf("mac") >= 0) { - found = value["mac"] === nic.mac; - } - }); - } - }); - if (!found) { - ifaces[nic.name] = [{ mac: nic.mac }]; - } - }); - nics8021xInfo = getWindowsWiredProfilesInformation(); - dnsSuffixes = getWindowsDNSsuffixes(); - for (let dev in ifaces) { - let ifaceSanitized = ""; - const s2 = util3.isPrototypePolluted() ? "---" : util3.sanitizeShellString(dev); - const l = util3.mathMin(s2.length, 2000); - for (let i = 0;i <= l; i++) { - if (s2[i] !== undefined) { - ifaceSanitized = ifaceSanitized + s2[i]; - } - } - let iface = dev; - let ip4 = ""; - let ip4subnet = ""; - let ip6 = ""; - let ip6subnet = ""; - let mac3 = ""; - let duplex = ""; - let mtu = ""; - let speed = null; - let carrierChanges = 0; - let operstate = "down"; - let dhcp = false; - let dnsSuffix = ""; - let ieee8021xAuth = ""; - let ieee8021xState = ""; - let type = ""; - if ({}.hasOwnProperty.call(ifaces, dev)) { - let ifaceName = dev; - ifaces[dev].forEach(function(details) { - if (details.family === "IPv4" || details.family === 4) { - ip4 = details.address; - ip4subnet = details.netmask; - } - if (details.family === "IPv6" || details.family === 6) { - if (!ip6 || ip6.match(/^fe80::/i)) { - ip6 = details.address; - ip6subnet = details.netmask; - } - } - mac3 = details.mac; - const nodeMainVersion = parseInt(process.versions.node.split("."), 10); - if (mac3.indexOf("00:00:0") > -1 && (_linux || _darwin) && !details.internal && nodeMainVersion >= 8 && nodeMainVersion <= 11) { - if (Object.keys(_mac2).length === 0) { - _mac2 = getMacAddresses(); - } - mac3 = _mac2[dev] || ""; - } - }); - dnsSuffix = getWindowsIfaceDNSsuffix(dnsSuffixes.ifaces, ifaceSanitized); - let foundFirst = false; - nics2.forEach((detail) => { - if (detail.mac === mac3 && !foundFirst) { - iface = detail.iface || iface; - ifaceName = detail.name; - dhcp = detail.dhcp; - operstate = detail.operstate; - speed = operstate === "up" ? detail.speed : 0; - type = detail.type; - foundFirst = true; - } - }); - if (dev.toLowerCase().indexOf("wlan") >= 0 || ifaceName.toLowerCase().indexOf("wlan") >= 0 || ifaceName.toLowerCase().indexOf("802.11n") >= 0 || ifaceName.toLowerCase().indexOf("wireless") >= 0 || ifaceName.toLowerCase().indexOf("wi-fi") >= 0 || ifaceName.toLowerCase().indexOf("wifi") >= 0) { - type = "wireless"; - } - const IEEE8021x = getWindowsIEEE8021x(type, ifaceSanitized, nics8021xInfo); - ieee8021xAuth = IEEE8021x.protocol; - ieee8021xState = IEEE8021x.state; - let internal3 = ifaces[dev] && ifaces[dev][0] ? ifaces[dev][0].internal : false; - if (dev.toLowerCase().indexOf("loopback") > -1 || ifaceName.toLowerCase().indexOf("loopback") > -1) { - internal3 = true; - } - const virtual = internal3 ? false : testVirtualNic(dev, ifaceName, mac3); - result.push({ - iface, - ifaceName, - default: iface === defaultInterface, - ip4, - ip4subnet, - ip6, - ip6subnet, - mac: mac3, - internal: internal3, - virtual, - operstate, - type, - duplex, - mtu, - speed, - dhcp, - dnsSuffix, - ieee8021xAuth, - ieee8021xState, - carrierChanges - }); - } - } - _networkInterfaces = result; - if (defaultString.toLowerCase().indexOf("default") >= 0) { - result = result.filter((item) => item.default); - if (result.length > 0) { - result = result[0]; - } else { - result = []; - } - } - if (callback) { - callback(result); - } - resolve2(result); - }); - } - } - }); - }); - } - exports.networkInterfaces = networkInterfaces; - function calcNetworkSpeed(iface, rx_bytes, tx_bytes, operstate, rx_dropped, rx_errors, tx_dropped, tx_errors) { - let result = { - iface, - operstate, - rx_bytes, - rx_dropped, - rx_errors, - tx_bytes, - tx_dropped, - tx_errors, - rx_sec: null, - tx_sec: null, - ms: 0 - }; - if (_network[iface] && _network[iface].ms) { - result.ms = Date.now() - _network[iface].ms; - result.rx_sec = rx_bytes - _network[iface].rx_bytes >= 0 ? (rx_bytes - _network[iface].rx_bytes) / (result.ms / 1000) : 0; - result.tx_sec = tx_bytes - _network[iface].tx_bytes >= 0 ? (tx_bytes - _network[iface].tx_bytes) / (result.ms / 1000) : 0; - _network[iface].rx_bytes = rx_bytes; - _network[iface].tx_bytes = tx_bytes; - _network[iface].rx_sec = result.rx_sec; - _network[iface].tx_sec = result.tx_sec; - _network[iface].ms = Date.now(); - _network[iface].last_ms = result.ms; - _network[iface].operstate = operstate; - } else { - if (!_network[iface]) { - _network[iface] = {}; - } - _network[iface].rx_bytes = rx_bytes; - _network[iface].tx_bytes = tx_bytes; - _network[iface].rx_sec = null; - _network[iface].tx_sec = null; - _network[iface].ms = Date.now(); - _network[iface].last_ms = 0; - _network[iface].operstate = operstate; - } - return result; - } - function networkStats(ifaces, callback) { - let ifacesArray = []; - return new Promise((resolve2) => { - process.nextTick(() => { - if (util3.isFunction(ifaces) && !callback) { - callback = ifaces; - ifacesArray = [getDefaultNetworkInterface()]; - } else { - if (typeof ifaces !== "string" && ifaces !== undefined) { - if (callback) { - callback([]); - } - return resolve2([]); - } - ifaces = ifaces || getDefaultNetworkInterface(); - ifaces.__proto__.toLowerCase = util3.stringToLower; - ifaces.__proto__.replace = util3.stringReplace; - ifaces.__proto__.trim = util3.stringTrim; - ifaces = ifaces.trim().toLowerCase().replace(/,+/g, "|"); - ifacesArray = ifaces.split("|"); - } - const result = []; - const workload = []; - if (ifacesArray.length && ifacesArray[0].trim() === "*") { - ifacesArray = []; - networkInterfaces(false).then((allIFaces) => { - for (let iface of allIFaces) { - ifacesArray.push(iface.iface); - } - networkStats(ifacesArray.join(",")).then((result2) => { - if (callback) { - callback(result2); - } - resolve2(result2); - }); - }); - } else { - for (let iface of ifacesArray) { - workload.push(networkStatsSingle(iface.trim())); - } - if (workload.length) { - Promise.all(workload).then((data) => { - if (callback) { - callback(data); - } - resolve2(data); - }); - } else { - if (callback) { - callback(result); - } - resolve2(result); - } - } - }); - }); - } - function networkStatsSingle(iface) { - function parseLinesWindowsPerfData(sections) { - let perfData = []; - for (let i in sections) { - if ({}.hasOwnProperty.call(sections, i)) { - if (sections[i].trim() !== "") { - let lines = sections[i].trim().split(`\r -`); - perfData.push({ - name: util3.getValue(lines, "Name", ":").replace(/[()[\] ]+/g, "").replace(/#|\//g, "_").toLowerCase(), - rx_bytes: parseInt(util3.getValue(lines, "BytesReceivedPersec", ":"), 10), - rx_errors: parseInt(util3.getValue(lines, "PacketsReceivedErrors", ":"), 10), - rx_dropped: parseInt(util3.getValue(lines, "PacketsReceivedDiscarded", ":"), 10), - tx_bytes: parseInt(util3.getValue(lines, "BytesSentPersec", ":"), 10), - tx_errors: parseInt(util3.getValue(lines, "PacketsOutboundErrors", ":"), 10), - tx_dropped: parseInt(util3.getValue(lines, "PacketsOutboundDiscarded", ":"), 10) - }); - } - } - } - return perfData; - } - return new Promise((resolve2) => { - process.nextTick(() => { - let ifaceSanitized = ""; - const s2 = util3.isPrototypePolluted() ? "---" : util3.sanitizeShellString(iface); - const l = util3.mathMin(s2.length, 2000); - for (let i = 0;i <= l; i++) { - if (s2[i] !== undefined) { - ifaceSanitized = ifaceSanitized + s2[i]; - } - } - let result = { - iface: ifaceSanitized, - operstate: "unknown", - rx_bytes: 0, - rx_dropped: 0, - rx_errors: 0, - tx_bytes: 0, - tx_dropped: 0, - tx_errors: 0, - rx_sec: null, - tx_sec: null, - ms: 0 - }; - let operstate = "unknown"; - let rx_bytes = 0; - let tx_bytes = 0; - let rx_dropped = 0; - let rx_errors = 0; - let tx_dropped = 0; - let tx_errors = 0; - let cmd, lines, stats; - if (!_network[ifaceSanitized] || _network[ifaceSanitized] && !_network[ifaceSanitized].ms || _network[ifaceSanitized] && _network[ifaceSanitized].ms && Date.now() - _network[ifaceSanitized].ms >= 500) { - if (_linux) { - if (fs.existsSync("/sys/class/net/" + ifaceSanitized)) { - cmd = "cat /sys/class/net/" + ifaceSanitized + "/operstate; " + "cat /sys/class/net/" + ifaceSanitized + "/statistics/rx_bytes; " + "cat /sys/class/net/" + ifaceSanitized + "/statistics/tx_bytes; " + "cat /sys/class/net/" + ifaceSanitized + "/statistics/rx_dropped; " + "cat /sys/class/net/" + ifaceSanitized + "/statistics/rx_errors; " + "cat /sys/class/net/" + ifaceSanitized + "/statistics/tx_dropped; " + "cat /sys/class/net/" + ifaceSanitized + "/statistics/tx_errors; "; - exec(cmd, function(error48, stdout) { - if (!error48) { - lines = stdout.toString().split(` -`); - operstate = lines[0].trim(); - rx_bytes = parseInt(lines[1], 10); - tx_bytes = parseInt(lines[2], 10); - rx_dropped = parseInt(lines[3], 10); - rx_errors = parseInt(lines[4], 10); - tx_dropped = parseInt(lines[5], 10); - tx_errors = parseInt(lines[6], 10); - result = calcNetworkSpeed(ifaceSanitized, rx_bytes, tx_bytes, operstate, rx_dropped, rx_errors, tx_dropped, tx_errors); - } - resolve2(result); - }); - } else { - resolve2(result); - } - } - if (_freebsd || _openbsd || _netbsd) { - cmd = "netstat -ibndI " + ifaceSanitized; - exec(cmd, function(error48, stdout) { - if (!error48) { - lines = stdout.toString().split(` -`); - for (let i = 1;i < lines.length; i++) { - const line = lines[i].replace(/ +/g, " ").split(" "); - if (line && line[0] && line[7] && line[10]) { - rx_bytes = rx_bytes + parseInt(line[7]); - if (line[6].trim() !== "-") { - rx_dropped = rx_dropped + parseInt(line[6]); - } - if (line[5].trim() !== "-") { - rx_errors = rx_errors + parseInt(line[5]); - } - tx_bytes = tx_bytes + parseInt(line[10]); - if (line[12].trim() !== "-") { - tx_dropped = tx_dropped + parseInt(line[12]); - } - if (line[9].trim() !== "-") { - tx_errors = tx_errors + parseInt(line[9]); - } - operstate = "up"; - } - } - result = calcNetworkSpeed(ifaceSanitized, rx_bytes, tx_bytes, operstate, rx_dropped, rx_errors, tx_dropped, tx_errors); - } - resolve2(result); - }); - } - if (_darwin) { - cmd = "ifconfig " + ifaceSanitized + ' | grep "status"'; - exec(cmd, function(error48, stdout) { - result.operstate = (stdout.toString().split(":")[1] || "").trim(); - result.operstate = (result.operstate || "").toLowerCase(); - result.operstate = result.operstate === "active" ? "up" : result.operstate === "inactive" ? "down" : "unknown"; - cmd = "netstat -bdI " + ifaceSanitized; - exec(cmd, function(error49, stdout2) { - if (!error49) { - lines = stdout2.toString().split(` -`); - if (lines.length > 1 && lines[1].trim() !== "") { - stats = lines[1].replace(/ +/g, " ").split(" "); - const offset = stats.length > 11 ? 1 : 0; - rx_bytes = parseInt(stats[offset + 5]); - rx_dropped = parseInt(stats[offset + 10]); - rx_errors = parseInt(stats[offset + 4]); - tx_bytes = parseInt(stats[offset + 8]); - tx_dropped = parseInt(stats[offset + 10]); - tx_errors = parseInt(stats[offset + 7]); - result = calcNetworkSpeed(ifaceSanitized, rx_bytes, tx_bytes, result.operstate, rx_dropped, rx_errors, tx_dropped, tx_errors); - } - } - resolve2(result); - }); - }); - } - if (_windows) { - let perfData = []; - let ifaceName = ifaceSanitized; - util3.powerShell("Get-CimInstance Win32_PerfRawData_Tcpip_NetworkInterface | select Name,BytesReceivedPersec,PacketsReceivedErrors,PacketsReceivedDiscarded,BytesSentPersec,PacketsOutboundErrors,PacketsOutboundDiscarded | fl").then((stdout, error48) => { - if (!error48) { - const psections = stdout.toString().split(/\n\s*\n/); - perfData = parseLinesWindowsPerfData(psections); - } - networkInterfaces(false).then((interfaces) => { - rx_bytes = 0; - tx_bytes = 0; - perfData.forEach((detail) => { - interfaces.forEach((det) => { - if ((det.iface.toLowerCase() === ifaceSanitized.toLowerCase() || det.mac.toLowerCase() === ifaceSanitized.toLowerCase() || det.ip4.toLowerCase() === ifaceSanitized.toLowerCase() || det.ip6.toLowerCase() === ifaceSanitized.toLowerCase() || det.ifaceName.replace(/[()[\] ]+/g, "").replace(/#|\//g, "_").toLowerCase() === ifaceSanitized.replace(/[()[\] ]+/g, "").replace("#", "_").toLowerCase()) && det.ifaceName.replace(/[()[\] ]+/g, "").replace(/#|\//g, "_").toLowerCase() === detail.name) { - ifaceName = det.iface; - rx_bytes = detail.rx_bytes; - rx_dropped = detail.rx_dropped; - rx_errors = detail.rx_errors; - tx_bytes = detail.tx_bytes; - tx_dropped = detail.tx_dropped; - tx_errors = detail.tx_errors; - operstate = det.operstate; - } - }); - }); - if (rx_bytes && tx_bytes) { - result = calcNetworkSpeed(ifaceName, parseInt(rx_bytes), parseInt(tx_bytes), operstate, rx_dropped, rx_errors, tx_dropped, tx_errors); - } - resolve2(result); - }); - }); - } - } else { - result.rx_bytes = _network[ifaceSanitized].rx_bytes; - result.tx_bytes = _network[ifaceSanitized].tx_bytes; - result.rx_sec = _network[ifaceSanitized].rx_sec; - result.tx_sec = _network[ifaceSanitized].tx_sec; - result.ms = _network[ifaceSanitized].last_ms; - result.operstate = _network[ifaceSanitized].operstate; - resolve2(result); - } - }); - }); - } - exports.networkStats = networkStats; - function getProcessName(processes, pid) { - let cmd = ""; - processes.forEach((line) => { - const parts = line.split(" "); - const id = parseInt(parts[0], 10) || -1; - if (id === pid) { - parts.shift(); - cmd = parts.join(" ").split(":")[0]; - } - }); - cmd = cmd.split(" -")[0]; - const cmdParts = cmd.split("/"); - return cmdParts[cmdParts.length - 1]; - } - function networkConnections(callback) { - return new Promise((resolve2) => { - process.nextTick(() => { - let result = []; - if (_linux || _freebsd || _openbsd || _netbsd) { - let cmd = 'export LC_ALL=C; netstat -tunap | grep "ESTABLISHED\\|SYN_SENT\\|SYN_RECV\\|FIN_WAIT1\\|FIN_WAIT2\\|TIME_WAIT\\|CLOSE\\|CLOSE_WAIT\\|LAST_ACK\\|LISTEN\\|CLOSING\\|UNKNOWN"; unset LC_ALL'; - if (_freebsd || _openbsd || _netbsd) { - cmd = 'export LC_ALL=C; netstat -na | grep "ESTABLISHED\\|SYN_SENT\\|SYN_RECV\\|FIN_WAIT1\\|FIN_WAIT2\\|TIME_WAIT\\|CLOSE\\|CLOSE_WAIT\\|LAST_ACK\\|LISTEN\\|CLOSING\\|UNKNOWN"; unset LC_ALL'; - } - exec(cmd, { maxBuffer: 1024 * 20000 }, function(error48, stdout) { - let lines = stdout.toString().split(` -`); - if (!error48 && (lines.length > 1 || lines[0] != "")) { - lines.forEach(function(line) { - line = line.replace(/ +/g, " ").split(" "); - if (line.length >= 7) { - let localip = line[3]; - let localport = ""; - let localaddress = line[3].split(":"); - if (localaddress.length > 1) { - localport = localaddress[localaddress.length - 1]; - localaddress.pop(); - localip = localaddress.join(":"); - } - let peerip = line[4]; - let peerport = ""; - let peeraddress = line[4].split(":"); - if (peeraddress.length > 1) { - peerport = peeraddress[peeraddress.length - 1]; - peeraddress.pop(); - peerip = peeraddress.join(":"); - } - let connstate = line[5]; - let proc = line[6].split("/"); - if (connstate) { - result.push({ - protocol: line[0], - localAddress: localip, - localPort: localport, - peerAddress: peerip, - peerPort: peerport, - state: connstate, - pid: proc[0] && proc[0] !== "-" ? parseInt(proc[0], 10) : null, - process: proc[1] ? proc[1].split(" ")[0].split(":")[0] : "" - }); - } - } - }); - if (callback) { - callback(result); - } - resolve2(result); - } else { - cmd = 'ss -tunap | grep "ESTAB\\|SYN-SENT\\|SYN-RECV\\|FIN-WAIT1\\|FIN-WAIT2\\|TIME-WAIT\\|CLOSE\\|CLOSE-WAIT\\|LAST-ACK\\|LISTEN\\|CLOSING"'; - exec(cmd, { maxBuffer: 1024 * 20000 }, function(error49, stdout2) { - if (!error49) { - let lines2 = stdout2.toString().split(` -`); - lines2.forEach(function(line) { - line = line.replace(/ +/g, " ").split(" "); - if (line.length >= 6) { - let localip = line[4]; - let localport = ""; - let localaddress = line[4].split(":"); - if (localaddress.length > 1) { - localport = localaddress[localaddress.length - 1]; - localaddress.pop(); - localip = localaddress.join(":"); - } - let peerip = line[5]; - let peerport = ""; - let peeraddress = line[5].split(":"); - if (peeraddress.length > 1) { - peerport = peeraddress[peeraddress.length - 1]; - peeraddress.pop(); - peerip = peeraddress.join(":"); - } - let connstate = line[1]; - if (connstate === "ESTAB") { - connstate = "ESTABLISHED"; - } - if (connstate === "TIME-WAIT") { - connstate = "TIME_WAIT"; - } - let pid = null; - let process3 = ""; - if (line.length >= 7 && line[6].indexOf("users:") > -1) { - let proc = line[6].replace('users:(("', "").replace(/"/g, "").split(","); - if (proc.length > 2) { - process3 = proc[0].split(" ")[0].split(":")[0]; - pid = parseInt(proc[1], 10); - } - } - if (connstate) { - result.push({ - protocol: line[0], - localAddress: localip, - localPort: localport, - peerAddress: peerip, - peerPort: peerport, - state: connstate, - pid, - process: process3 - }); - } - } - }); - } - if (callback) { - callback(result); - } - resolve2(result); - }); - } - }); - } - if (_darwin) { - let cmd = 'netstat -natvln | grep "tcp4\\|tcp6\\|udp4\\|udp6"'; - const states = "ESTABLISHED|SYN_SENT|SYN_RECV|FIN_WAIT1|FIN_WAIT2|TIME_WAIT|CLOSE|CLOSE_WAIT|LAST_ACK|LISTEN|CLOSING|UNKNOWN"; - exec(cmd, { maxBuffer: 1024 * 20000 }, function(error48, stdout) { - if (!error48) { - exec("ps -axo pid,command", { maxBuffer: 1024 * 20000 }, function(err2, stdout2) { - let processes = stdout2.toString().split(` -`); - processes = processes.map((line) => { - return line.trim().replace(/ +/g, " "); - }); - let lines = stdout.toString().split(` -`); - lines.forEach(function(line) { - line = line.replace(/ +/g, " ").split(" "); - if (line.length >= 8) { - let localip = line[3]; - let localport = ""; - let localaddress = line[3].split("."); - if (localaddress.length > 1) { - localport = localaddress[localaddress.length - 1]; - localaddress.pop(); - localip = localaddress.join("."); - } - let peerip = line[4]; - let peerport = ""; - let peeraddress = line[4].split("."); - if (peeraddress.length > 1) { - peerport = peeraddress[peeraddress.length - 1]; - peeraddress.pop(); - peerip = peeraddress.join("."); - } - const hasState = states.indexOf(line[5]) >= 0; - let connstate = hasState ? line[5] : "UNKNOWN"; - let pid = parseInt(line[8 + (hasState ? 0 : -1)], 10); - if (connstate) { - result.push({ - protocol: line[0], - localAddress: localip, - localPort: localport, - peerAddress: peerip, - peerPort: peerport, - state: connstate, - pid, - process: getProcessName(processes, pid) - }); - } - } - }); - if (callback) { - callback(result); - } - resolve2(result); - }); - } - }); - } - if (_windows) { - let cmd = "netstat -nao"; - try { - exec(cmd, util3.execOptsWin, function(error48, stdout) { - if (!error48) { - let lines = stdout.toString().split(`\r -`); - lines.forEach(function(line) { - line = line.trim().replace(/ +/g, " ").split(" "); - if (line.length >= 4) { - let localip = line[1]; - let localport = ""; - let localaddress = line[1].split(":"); - if (localaddress.length > 1) { - localport = localaddress[localaddress.length - 1]; - localaddress.pop(); - localip = localaddress.join(":"); - } - localip = localip.replace(/\[/g, "").replace(/\]/g, ""); - let peerip = line[2]; - let peerport = ""; - let peeraddress = line[2].split(":"); - if (peeraddress.length > 1) { - peerport = peeraddress[peeraddress.length - 1]; - peeraddress.pop(); - peerip = peeraddress.join(":"); - } - peerip = peerip.replace(/\[/g, "").replace(/\]/g, ""); - let pid = util3.toInt(line[4]); - let connstate = line[3]; - if (connstate === "HERGESTELLT") { - connstate = "ESTABLISHED"; - } - if (connstate.startsWith("ABH")) { - connstate = "LISTEN"; - } - if (connstate === "SCHLIESSEN_WARTEN") { - connstate = "CLOSE_WAIT"; - } - if (connstate === "WARTEND") { - connstate = "TIME_WAIT"; - } - if (connstate === "SYN_GESENDET") { - connstate = "SYN_SENT"; - } - if (connstate === "LISTENING") { - connstate = "LISTEN"; - } - if (connstate === "SYN_RECEIVED") { - connstate = "SYN_RECV"; - } - if (connstate === "FIN_WAIT_1") { - connstate = "FIN_WAIT1"; - } - if (connstate === "FIN_WAIT_2") { - connstate = "FIN_WAIT2"; - } - if (line[0].toLowerCase() !== "udp" && connstate) { - result.push({ - protocol: line[0].toLowerCase(), - localAddress: localip, - localPort: localport, - peerAddress: peerip, - peerPort: peerport, - state: connstate, - pid, - process: "" - }); - } else if (line[0].toLowerCase() === "udp") { - result.push({ - protocol: line[0].toLowerCase(), - localAddress: localip, - localPort: localport, - peerAddress: peerip, - peerPort: peerport, - state: "", - pid: parseInt(line[3], 10), - process: "" - }); - } - } - }); - if (callback) { - callback(result); - } - resolve2(result); - } - }); - } catch (e) { - if (callback) { - callback(result); - } - resolve2(result); - } - } - }); - }); - } - exports.networkConnections = networkConnections; - function networkGatewayDefault(callback) { - return new Promise((resolve2) => { - process.nextTick(() => { - let result = ""; - if (_linux || _freebsd || _openbsd || _netbsd) { - let cmd = "ip route get 1"; - try { - exec(cmd, { maxBuffer: 1024 * 20000 }, function(error48, stdout) { - if (!error48) { - let lines = stdout.toString().split(` -`); - const line = lines && lines[0] ? lines[0] : ""; - let parts = line.split(" via "); - if (parts && parts[1]) { - parts = parts[1].split(" "); - result = parts[0]; - } - if (callback) { - callback(result); - } - resolve2(result); - } else { - if (callback) { - callback(result); - } - resolve2(result); - } - }); - } catch (e) { - if (callback) { - callback(result); - } - resolve2(result); - } - } - if (_darwin) { - let cmd = "route -n get default"; - try { - exec(cmd, { maxBuffer: 1024 * 20000 }, function(error48, stdout) { - if (!error48) { - const lines = stdout.toString().split(` -`).map((line) => line.trim()); - result = util3.getValue(lines, "gateway"); - } - if (!result) { - cmd = "netstat -rn | awk '/default/ {print $2}'"; - exec(cmd, { maxBuffer: 1024 * 20000 }, function(error49, stdout2) { - const lines = stdout2.toString().split(` -`).map((line) => line.trim()); - result = lines.find((line) => /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(line)); - if (callback) { - callback(result); - } - resolve2(result); - }); - } else { - if (callback) { - callback(result); - } - resolve2(result); - } - }); - } catch (e) { - if (callback) { - callback(result); - } - resolve2(result); - } - } - if (_windows) { - try { - exec("netstat -r", util3.execOptsWin, function(error48, stdout) { - const lines = stdout.toString().split(os.EOL); - lines.forEach((line) => { - line = line.replace(/\s+/g, " ").trim(); - if (line.indexOf("0.0.0.0 0.0.0.0") > -1 && !/[a-zA-Z]/.test(line)) { - const parts = line.split(" "); - if (parts.length >= 5 && parts[parts.length - 3].indexOf(".") > -1) { - result = parts[parts.length - 3]; - } - } - }); - if (!result) { - util3.powerShell("Get-CimInstance -ClassName Win32_IP4RouteTable | Where-Object { $_.Destination -eq '0.0.0.0' -and $_.Mask -eq '0.0.0.0' }").then((data) => { - let lines2 = data.toString().split(`\r -`); - if (lines2.length > 1 && !result) { - result = util3.getValue(lines2, "NextHop"); - if (callback) { - callback(result); - } - resolve2(result); - } - }); - } else { - if (callback) { - callback(result); - } - resolve2(result); - } - }); - } catch (e) { - if (callback) { - callback(result); - } - resolve2(result); - } - } - }); - }); - } - exports.networkGatewayDefault = networkGatewayDefault; -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/stats/si.js -var require_si = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getNetworkData = undefined; - var network_1 = require_network(); - function getNetworkData() { - return new Promise((resolve2) => { - (0, network_1.networkStats)().then(resolve2).catch(() => { - resolve2([]); - }); - }); - } - exports.getNetworkData = getNetworkData; -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/metric.js -var require_metric = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HostMetrics = undefined; - var BaseMetrics_1 = require_BaseMetrics(); - var enum_1 = require_enum2(); - var common_1 = require_common3(); - var si_1 = require_si(); - - class HostMetrics extends BaseMetrics_1.BaseMetrics { - _batchUpdateCpuUsages(observableResult, cpuUsages) { - const stateAttr = enum_1.ATTRIBUTE_NAMES.SYSTEM_CPU_STATE; - const cpuAttr = enum_1.ATTRIBUTE_NAMES.SYSTEM_CPU_LOGICAL_NUMBER; - for (let i = 0, j = cpuUsages.length;i < j; i++) { - const cpuUsage = cpuUsages[i]; - observableResult.observe(this._cpuTime, cpuUsage.user, { - [stateAttr]: enum_1.CPU_LABELS.USER, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuTime, cpuUsage.system, { - [stateAttr]: enum_1.CPU_LABELS.SYSTEM, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuTime, cpuUsage.idle, { - [stateAttr]: enum_1.CPU_LABELS.IDLE, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuTime, cpuUsage.interrupt, { - [stateAttr]: enum_1.CPU_LABELS.INTERRUPT, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuTime, cpuUsage.nice, { - [stateAttr]: enum_1.CPU_LABELS.NICE, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuUtilization, cpuUsage.userP, { - [stateAttr]: enum_1.CPU_LABELS.USER, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuUtilization, cpuUsage.systemP, { - [stateAttr]: enum_1.CPU_LABELS.SYSTEM, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuUtilization, cpuUsage.idleP, { - [stateAttr]: enum_1.CPU_LABELS.IDLE, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuUtilization, cpuUsage.interruptP, { - [stateAttr]: enum_1.CPU_LABELS.INTERRUPT, - [cpuAttr]: cpuUsage.cpuNumber - }); - observableResult.observe(this._cpuUtilization, cpuUsage.niceP, { - [stateAttr]: enum_1.CPU_LABELS.NICE, - [cpuAttr]: cpuUsage.cpuNumber - }); - } - } - _batchUpdateProcessCpuUsages(observableResult, processCpuUsage) { - const stateAttr = enum_1.ATTRIBUTE_NAMES.PROCESS_CPU_STATE; - observableResult.observe(this._processCpuTime, processCpuUsage.user, { - [stateAttr]: enum_1.CPU_LABELS.USER - }); - observableResult.observe(this._processCpuTime, processCpuUsage.system, { - [stateAttr]: enum_1.CPU_LABELS.SYSTEM - }); - observableResult.observe(this._processCpuUtilization, processCpuUsage.userP, { - [stateAttr]: enum_1.CPU_LABELS.USER - }); - observableResult.observe(this._processCpuUtilization, processCpuUsage.systemP, { - [stateAttr]: enum_1.CPU_LABELS.SYSTEM - }); - } - _batchUpdateMemUsages(observableResult, memUsage) { - const stateAttr = enum_1.ATTRIBUTE_NAMES.SYSTEM_MEMORY_STATE; - observableResult.observe(this._memoryUsage, memUsage.used, { - [stateAttr]: enum_1.MEMORY_LABELS.USED - }); - observableResult.observe(this._memoryUsage, memUsage.free, { - [stateAttr]: enum_1.MEMORY_LABELS.FREE - }); - observableResult.observe(this._memoryUtilization, memUsage.usedP, { - [stateAttr]: enum_1.MEMORY_LABELS.USED - }); - observableResult.observe(this._memoryUtilization, memUsage.freeP, { - [stateAttr]: enum_1.MEMORY_LABELS.FREE - }); - } - _batchUpdateProcessMemUsage(observableResult, memoryUsage) { - observableResult.observe(this._processMemoryUsage, memoryUsage); - } - _batchUpdateNetworkData(observableResult, networkUsages) { - const deviceAttr = enum_1.ATTRIBUTE_NAMES.SYSTEM_DEVICE; - const directionAttr = enum_1.ATTRIBUTE_NAMES.NETWORK_IO_DIRECTION; - for (let i = 0, j = networkUsages.length;i < j; i++) { - const networkUsage = networkUsages[i]; - observableResult.observe(this._networkDropped, networkUsage.rx_dropped, { - [deviceAttr]: networkUsage.iface, - [directionAttr]: enum_1.NETWORK_LABELS.RECEIVE - }); - observableResult.observe(this._networkDropped, networkUsage.tx_dropped, { - [deviceAttr]: networkUsage.iface, - [directionAttr]: enum_1.NETWORK_LABELS.TRANSMIT - }); - observableResult.observe(this._networkErrors, networkUsage.rx_errors, { - [deviceAttr]: networkUsage.iface, - [directionAttr]: enum_1.NETWORK_LABELS.RECEIVE - }); - observableResult.observe(this._networkErrors, networkUsage.tx_errors, { - [deviceAttr]: networkUsage.iface, - [directionAttr]: enum_1.NETWORK_LABELS.TRANSMIT - }); - observableResult.observe(this._networkIo, networkUsage.rx_bytes, { - [deviceAttr]: networkUsage.iface, - [directionAttr]: enum_1.NETWORK_LABELS.RECEIVE - }); - observableResult.observe(this._networkIo, networkUsage.tx_bytes, { - [deviceAttr]: networkUsage.iface, - [directionAttr]: enum_1.NETWORK_LABELS.TRANSMIT - }); - } - } - _createMetrics() { - this._cpuTime = this._meter.createObservableCounter(enum_1.METRIC_NAMES.CPU_TIME, { - description: "Cpu time in seconds", - unit: "s" - }); - this._cpuUtilization = this._meter.createObservableGauge(enum_1.METRIC_NAMES.CPU_UTILIZATION, { - description: "Cpu usage time 0-1" - }); - this._memoryUsage = this._meter.createObservableGauge(enum_1.METRIC_NAMES.MEMORY_USAGE, { - description: "Memory usage in bytes" - }); - this._memoryUtilization = this._meter.createObservableGauge(enum_1.METRIC_NAMES.MEMORY_UTILIZATION, { - description: "Memory usage 0-1" - }); - this._networkDropped = this._meter.createObservableCounter(enum_1.METRIC_NAMES.NETWORK_DROPPED, { - description: "Network dropped packets" - }); - this._networkErrors = this._meter.createObservableCounter(enum_1.METRIC_NAMES.NETWORK_ERRORS, { - description: "Network errors counter" - }); - this._networkIo = this._meter.createObservableCounter(enum_1.METRIC_NAMES.NETWORK_IO, { - description: "Network transmit and received bytes" - }); - this._processCpuTime = this._meter.createObservableCounter(enum_1.METRIC_NAMES.PROCESS_CPU_TIME, { - description: "Process Cpu time in seconds", - unit: "s" - }); - this._processCpuUtilization = this._meter.createObservableGauge(enum_1.METRIC_NAMES.PROCESS_CPU_UTILIZATION, { - description: "Process Cpu usage time 0-1" - }); - this._processMemoryUsage = this._meter.createObservableGauge(enum_1.METRIC_NAMES.PROCESS_MEMORY_USAGE, { - description: "Process Memory usage in bytes" - }); - this._meter.addBatchObservableCallback(async (observableResult) => { - const cpuUsages = (0, common_1.getCpuUsageData)(); - const memoryUsages = (0, common_1.getMemoryData)(); - const processCpuUsages = (0, common_1.getProcessCpuUsageData)(); - const processMemoryUsages = (0, common_1.getProcessMemoryData)(); - const networkData = await (0, si_1.getNetworkData)(); - this._batchUpdateCpuUsages(observableResult, cpuUsages); - this._batchUpdateMemUsages(observableResult, memoryUsages); - this._batchUpdateProcessCpuUsages(observableResult, processCpuUsages); - this._batchUpdateProcessMemUsage(observableResult, processMemoryUsages); - this._batchUpdateNetworkData(observableResult, networkData); - }, [ - this._cpuTime, - this._cpuUtilization, - this._memoryUsage, - this._memoryUtilization, - this._processCpuTime, - this._processCpuUtilization, - this._processMemoryUsage, - this._networkDropped, - this._networkErrors, - this._networkIo - ]); - } - start() { - this._createMetrics(); - } - _cpuTime; - _cpuUtilization; - _memoryUsage; - _memoryUtilization; - _processCpuTime; - _processCpuUtilization; - _processMemoryUsage; - _networkDropped; - _networkErrors; - _networkIo; - } - exports.HostMetrics = HostMetrics; -}); - -// ../../../../node_modules/.bun/@opentelemetry+host-metrics@0.36.2+460773ef8ff1e07c/node_modules/@opentelemetry/host-metrics/build/src/index.js -var require_src69 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HostMetrics = exports.BaseMetrics = undefined; - var BaseMetrics_1 = require_BaseMetrics(); - Object.defineProperty(exports, "BaseMetrics", { enumerable: true, get: function() { - return BaseMetrics_1.BaseMetrics; - } }); - var metric_1 = require_metric(); - Object.defineProperty(exports, "HostMetrics", { enumerable: true, get: function() { - return metric_1.HostMetrics; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/LogRecordImpl.js -var require_LogRecordImpl = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LogRecordImpl = undefined; - var api4 = require_src(); - var core_1 = require_src7(); - - class LogRecordImpl { - hrTime; - hrTimeObserved; - spanContext; - resource; - instrumentationScope; - attributes = {}; - _severityText; - _severityNumber; - _body; - _eventName; - totalAttributesCount = 0; - _isReadonly = false; - _logRecordLimits; - set severityText(severityText) { - if (this._isLogRecordReadonly()) { - return; - } - this._severityText = severityText; - } - get severityText() { - return this._severityText; - } - set severityNumber(severityNumber) { - if (this._isLogRecordReadonly()) { - return; - } - this._severityNumber = severityNumber; - } - get severityNumber() { - return this._severityNumber; - } - set body(body) { - if (this._isLogRecordReadonly()) { - return; - } - this._body = body; - } - get body() { - return this._body; - } - get eventName() { - return this._eventName; - } - set eventName(eventName) { - if (this._isLogRecordReadonly()) { - return; - } - this._eventName = eventName; - } - get droppedAttributesCount() { - return this.totalAttributesCount - Object.keys(this.attributes).length; - } - constructor(_sharedState, instrumentationScope, logRecord) { - const { timestamp, observedTimestamp, eventName, severityNumber, severityText, body, attributes = {}, context: context8 } = logRecord; - const now2 = Date.now(); - this.hrTime = (0, core_1.timeInputToHrTime)(timestamp ?? now2); - this.hrTimeObserved = (0, core_1.timeInputToHrTime)(observedTimestamp ?? now2); - if (context8) { - const spanContext = api4.trace.getSpanContext(context8); - if (spanContext && api4.isSpanContextValid(spanContext)) { - this.spanContext = spanContext; - } - } - this.severityNumber = severityNumber; - this.severityText = severityText; - this.body = body; - this.resource = _sharedState.resource; - this.instrumentationScope = instrumentationScope; - this._logRecordLimits = _sharedState.logRecordLimits; - this._eventName = eventName; - this.setAttributes(attributes); - } - setAttribute(key, value) { - if (this._isLogRecordReadonly()) { - return this; - } - if (value === null) { - return this; - } - if (key.length === 0) { - api4.diag.warn(`Invalid attribute key: ${key}`); - return this; - } - if (!(0, core_1.isAttributeValue)(value) && !(typeof value === "object" && !Array.isArray(value) && Object.keys(value).length > 0)) { - api4.diag.warn(`Invalid attribute value set for key: ${key}`); - return this; - } - this.totalAttributesCount += 1; - if (Object.keys(this.attributes).length >= this._logRecordLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, key)) { - if (this.droppedAttributesCount === 1) { - api4.diag.warn("Dropping extra attributes."); - } - return this; - } - if ((0, core_1.isAttributeValue)(value)) { - this.attributes[key] = this._truncateToSize(value); - } else { - this.attributes[key] = value; - } - return this; - } - setAttributes(attributes) { - for (const [k, v] of Object.entries(attributes)) { - this.setAttribute(k, v); - } - return this; - } - setBody(body) { - this.body = body; - return this; - } - setEventName(eventName) { - this.eventName = eventName; - return this; - } - setSeverityNumber(severityNumber) { - this.severityNumber = severityNumber; - return this; - } - setSeverityText(severityText) { - this.severityText = severityText; - return this; - } - _makeReadonly() { - this._isReadonly = true; - } - _truncateToSize(value) { - const limit = this._logRecordLimits.attributeValueLengthLimit; - if (limit <= 0) { - api4.diag.warn(`Attribute value limit must be positive, got ${limit}`); - return value; - } - if (typeof value === "string") { - return this._truncateToLimitUtil(value, limit); - } - if (Array.isArray(value)) { - return value.map((val) => typeof val === "string" ? this._truncateToLimitUtil(val, limit) : val); - } - return value; - } - _truncateToLimitUtil(value, limit) { - if (value.length <= limit) { - return value; - } - return value.substring(0, limit); - } - _isLogRecordReadonly() { - if (this._isReadonly) { - api4.diag.warn("Can not execute the operation on emitted log record"); - } - return this._isReadonly; - } - } - exports.LogRecordImpl = LogRecordImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/Logger.js -var require_Logger = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Logger = undefined; - var api_1 = require_src(); - var LogRecordImpl_1 = require_LogRecordImpl(); - - class Logger { - instrumentationScope; - _sharedState; - constructor(instrumentationScope, _sharedState) { - this.instrumentationScope = instrumentationScope; - this._sharedState = _sharedState; - } - emit(logRecord) { - const currentContext = logRecord.context || api_1.context.active(); - const logRecordInstance = new LogRecordImpl_1.LogRecordImpl(this._sharedState, this.instrumentationScope, { - context: currentContext, - ...logRecord - }); - this._sharedState.activeProcessor.onEmit(logRecordInstance, currentContext); - logRecordInstance._makeReadonly(); - } - } - exports.Logger = Logger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/config.js -var require_config = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.reconfigureLimits = exports.loadDefaultConfig = undefined; - var core_1 = require_src7(); - function loadDefaultConfig() { - return { - forceFlushTimeoutMillis: 30000, - logRecordLimits: { - attributeValueLengthLimit: (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity, - attributeCountLimit: (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT") ?? 128 - }, - includeTraceContext: true - }; - } - exports.loadDefaultConfig = loadDefaultConfig; - function reconfigureLimits(logRecordLimits) { - return { - attributeCountLimit: logRecordLimits.attributeCountLimit ?? (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_COUNT_LIMIT") ?? 128, - attributeValueLengthLimit: logRecordLimits.attributeValueLengthLimit ?? (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity - }; - } - exports.reconfigureLimits = reconfigureLimits; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/NoopLogRecordProcessor.js -var require_NoopLogRecordProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopLogRecordProcessor = undefined; - - class NoopLogRecordProcessor { - forceFlush() { - return Promise.resolve(); - } - onEmit(_logRecord, _context) {} - shutdown() { - return Promise.resolve(); - } - } - exports.NoopLogRecordProcessor = NoopLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/MultiLogRecordProcessor.js -var require_MultiLogRecordProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MultiLogRecordProcessor = undefined; - var core_1 = require_src7(); - - class MultiLogRecordProcessor { - processors; - forceFlushTimeoutMillis; - constructor(processors, forceFlushTimeoutMillis) { - this.processors = processors; - this.forceFlushTimeoutMillis = forceFlushTimeoutMillis; - } - async forceFlush() { - const timeout = this.forceFlushTimeoutMillis; - await Promise.all(this.processors.map((processor) => (0, core_1.callWithTimeout)(processor.forceFlush(), timeout))); - } - onEmit(logRecord, context8) { - this.processors.forEach((processors) => processors.onEmit(logRecord, context8)); - } - async shutdown() { - await Promise.all(this.processors.map((processor) => processor.shutdown())); - } - } - exports.MultiLogRecordProcessor = MultiLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/internal/LoggerProviderSharedState.js -var require_LoggerProviderSharedState = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LoggerProviderSharedState = undefined; - var NoopLogRecordProcessor_1 = require_NoopLogRecordProcessor(); - var MultiLogRecordProcessor_1 = require_MultiLogRecordProcessor(); - - class LoggerProviderSharedState { - resource; - forceFlushTimeoutMillis; - logRecordLimits; - processors; - loggers = new Map; - activeProcessor; - registeredLogRecordProcessors = []; - constructor(resource, forceFlushTimeoutMillis, logRecordLimits, processors) { - this.resource = resource; - this.forceFlushTimeoutMillis = forceFlushTimeoutMillis; - this.logRecordLimits = logRecordLimits; - this.processors = processors; - if (processors.length > 0) { - this.registeredLogRecordProcessors = processors; - this.activeProcessor = new MultiLogRecordProcessor_1.MultiLogRecordProcessor(this.registeredLogRecordProcessors, this.forceFlushTimeoutMillis); - } else { - this.activeProcessor = new NoopLogRecordProcessor_1.NoopLogRecordProcessor; - } - } - } - exports.LoggerProviderSharedState = LoggerProviderSharedState; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/LoggerProvider.js -var require_LoggerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LoggerProvider = exports.DEFAULT_LOGGER_NAME = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src6(); - var resources_1 = require_src56(); - var core_1 = require_src7(); - var Logger_1 = require_Logger(); - var config_1 = require_config(); - var LoggerProviderSharedState_1 = require_LoggerProviderSharedState(); - exports.DEFAULT_LOGGER_NAME = "unknown"; - - class LoggerProvider { - _shutdownOnce; - _sharedState; - constructor(config2 = {}) { - const mergedConfig = (0, core_1.merge)({}, (0, config_1.loadDefaultConfig)(), config2); - const resource = config2.resource ?? (0, resources_1.defaultResource)(); - this._sharedState = new LoggerProviderSharedState_1.LoggerProviderSharedState(resource, mergedConfig.forceFlushTimeoutMillis, (0, config_1.reconfigureLimits)(mergedConfig.logRecordLimits), config2?.processors ?? []); - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - } - getLogger(name, version2, options) { - if (this._shutdownOnce.isCalled) { - api_1.diag.warn("A shutdown LoggerProvider cannot provide a Logger"); - return api_logs_1.NOOP_LOGGER; - } - if (!name) { - api_1.diag.warn("Logger requested without instrumentation scope name."); - } - const loggerName = name || exports.DEFAULT_LOGGER_NAME; - const key = `${loggerName}@${version2 || ""}:${options?.schemaUrl || ""}`; - if (!this._sharedState.loggers.has(key)) { - this._sharedState.loggers.set(key, new Logger_1.Logger({ name: loggerName, version: version2, schemaUrl: options?.schemaUrl }, this._sharedState)); - } - return this._sharedState.loggers.get(key); - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - api_1.diag.warn("invalid attempt to force flush after LoggerProvider shutdown"); - return this._shutdownOnce.promise; - } - return this._sharedState.activeProcessor.forceFlush(); - } - shutdown() { - if (this._shutdownOnce.isCalled) { - api_1.diag.warn("shutdown may only be called once per LoggerProvider"); - return this._shutdownOnce.promise; - } - return this._shutdownOnce.call(); - } - _shutdown() { - return this._sharedState.activeProcessor.shutdown(); - } - } - exports.LoggerProvider = LoggerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/ConsoleLogRecordExporter.js -var require_ConsoleLogRecordExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleLogRecordExporter = undefined; - var core_1 = require_src7(); - - class ConsoleLogRecordExporter { - export(logs, resultCallback) { - this._sendLogRecords(logs, resultCallback); - } - shutdown() { - return Promise.resolve(); - } - _exportInfo(logRecord) { - return { - resource: { - attributes: logRecord.resource.attributes - }, - instrumentationScope: logRecord.instrumentationScope, - timestamp: (0, core_1.hrTimeToMicroseconds)(logRecord.hrTime), - traceId: logRecord.spanContext?.traceId, - spanId: logRecord.spanContext?.spanId, - traceFlags: logRecord.spanContext?.traceFlags, - severityText: logRecord.severityText, - severityNumber: logRecord.severityNumber, - body: logRecord.body, - attributes: logRecord.attributes - }; - } - _sendLogRecords(logRecords, done) { - for (const logRecord of logRecords) { - console.dir(this._exportInfo(logRecord), { depth: 3 }); - } - done?.({ code: core_1.ExportResultCode.SUCCESS }); - } - } - exports.ConsoleLogRecordExporter = ConsoleLogRecordExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/SimpleLogRecordProcessor.js -var require_SimpleLogRecordProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SimpleLogRecordProcessor = undefined; - var core_1 = require_src7(); - - class SimpleLogRecordProcessor { - _exporter; - _shutdownOnce; - _unresolvedExports; - constructor(_exporter) { - this._exporter = _exporter; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - this._unresolvedExports = new Set; - } - onEmit(logRecord) { - if (this._shutdownOnce.isCalled) { - return; - } - const doExport = () => core_1.internal._export(this._exporter, [logRecord]).then((result) => { - if (result.code !== core_1.ExportResultCode.SUCCESS) { - (0, core_1.globalErrorHandler)(result.error ?? new Error(`SimpleLogRecordProcessor: log record export failed (status ${result})`)); - } - }).catch(core_1.globalErrorHandler); - if (logRecord.resource.asyncAttributesPending) { - const exportPromise = logRecord.resource.waitForAsyncAttributes?.().then(() => { - this._unresolvedExports.delete(exportPromise); - return doExport(); - }, core_1.globalErrorHandler); - if (exportPromise != null) { - this._unresolvedExports.add(exportPromise); - } - } else { - doExport(); - } - } - async forceFlush() { - await Promise.all(Array.from(this._unresolvedExports)); - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return this._exporter.shutdown(); - } - } - exports.SimpleLogRecordProcessor = SimpleLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/InMemoryLogRecordExporter.js -var require_InMemoryLogRecordExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InMemoryLogRecordExporter = undefined; - var core_1 = require_src7(); - - class InMemoryLogRecordExporter { - _finishedLogRecords = []; - _stopped = false; - export(logs, resultCallback) { - if (this._stopped) { - return resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Exporter has been stopped") - }); - } - this._finishedLogRecords.push(...logs); - resultCallback({ code: core_1.ExportResultCode.SUCCESS }); - } - shutdown() { - this._stopped = true; - this.reset(); - return Promise.resolve(); - } - getFinishedLogRecords() { - return this._finishedLogRecords; - } - reset() { - this._finishedLogRecords = []; - } - } - exports.InMemoryLogRecordExporter = InMemoryLogRecordExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/BatchLogRecordProcessorBase.js -var require_BatchLogRecordProcessorBase = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessorBase = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - - class BatchLogRecordProcessorBase { - _exporter; - _maxExportBatchSize; - _maxQueueSize; - _scheduledDelayMillis; - _exportTimeoutMillis; - _isExporting = false; - _finishedLogRecords = []; - _timer; - _shutdownOnce; - constructor(_exporter, config2) { - this._exporter = _exporter; - this._maxExportBatchSize = config2?.maxExportBatchSize ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_MAX_EXPORT_BATCH_SIZE") ?? 512; - this._maxQueueSize = config2?.maxQueueSize ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_MAX_QUEUE_SIZE") ?? 2048; - this._scheduledDelayMillis = config2?.scheduledDelayMillis ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_SCHEDULE_DELAY") ?? 5000; - this._exportTimeoutMillis = config2?.exportTimeoutMillis ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_EXPORT_TIMEOUT") ?? 30000; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - if (this._maxExportBatchSize > this._maxQueueSize) { - api_1.diag.warn("BatchLogRecordProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"); - this._maxExportBatchSize = this._maxQueueSize; - } - } - onEmit(logRecord) { - if (this._shutdownOnce.isCalled) { - return; - } - this._addToBuffer(logRecord); - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - return this._shutdownOnce.promise; - } - return this._flushAll(); - } - shutdown() { - return this._shutdownOnce.call(); - } - async _shutdown() { - this.onShutdown(); - await this._flushAll(); - await this._exporter.shutdown(); - } - _addToBuffer(logRecord) { - if (this._finishedLogRecords.length >= this._maxQueueSize) { - return; - } - this._finishedLogRecords.push(logRecord); - this._maybeStartTimer(); - } - _flushAll() { - return new Promise((resolve2, reject) => { - const promises = []; - const batchCount = Math.ceil(this._finishedLogRecords.length / this._maxExportBatchSize); - for (let i = 0;i < batchCount; i++) { - promises.push(this._flushOneBatch()); - } - Promise.all(promises).then(() => { - resolve2(); - }).catch(reject); - }); - } - _flushOneBatch() { - this._clearTimer(); - if (this._finishedLogRecords.length === 0) { - return Promise.resolve(); - } - return new Promise((resolve2, reject) => { - (0, core_1.callWithTimeout)(this._export(this._finishedLogRecords.splice(0, this._maxExportBatchSize)), this._exportTimeoutMillis).then(() => resolve2()).catch(reject); - }); - } - _maybeStartTimer() { - if (this._isExporting) - return; - const flush = () => { - this._isExporting = true; - this._flushOneBatch().then(() => { - this._isExporting = false; - if (this._finishedLogRecords.length > 0) { - this._clearTimer(); - this._maybeStartTimer(); - } - }).catch((e) => { - this._isExporting = false; - (0, core_1.globalErrorHandler)(e); - }); - }; - if (this._finishedLogRecords.length >= this._maxExportBatchSize) { - return flush(); - } - if (this._timer !== undefined) - return; - this._timer = setTimeout(() => flush(), this._scheduledDelayMillis); - if (typeof this._timer !== "number") { - this._timer.unref(); - } - } - _clearTimer() { - if (this._timer !== undefined) { - clearTimeout(this._timer); - this._timer = undefined; - } - } - _export(logRecords) { - const doExport = () => core_1.internal._export(this._exporter, logRecords).then((result) => { - if (result.code !== core_1.ExportResultCode.SUCCESS) { - (0, core_1.globalErrorHandler)(result.error ?? new Error(`BatchLogRecordProcessor: log record export failed (status ${result})`)); - } - }).catch(core_1.globalErrorHandler); - const pendingResources = logRecords.map((logRecord) => logRecord.resource).filter((resource) => resource.asyncAttributesPending); - if (pendingResources.length === 0) { - return doExport(); - } else { - return Promise.all(pendingResources.map((resource) => resource.waitForAsyncAttributes?.())).then(doExport, core_1.globalErrorHandler); - } - } - } - exports.BatchLogRecordProcessorBase = BatchLogRecordProcessorBase; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/export/BatchLogRecordProcessor.js -var require_BatchLogRecordProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = undefined; - var BatchLogRecordProcessorBase_1 = require_BatchLogRecordProcessorBase(); - - class BatchLogRecordProcessor extends BatchLogRecordProcessorBase_1.BatchLogRecordProcessorBase { - onShutdown() {} - } - exports.BatchLogRecordProcessor = BatchLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/index.js -var require_node13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = undefined; - var BatchLogRecordProcessor_1 = require_BatchLogRecordProcessor(); - Object.defineProperty(exports, "BatchLogRecordProcessor", { enumerable: true, get: function() { - return BatchLogRecordProcessor_1.BatchLogRecordProcessor; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/platform/index.js -var require_platform12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = undefined; - var node_1 = require_node13(); - Object.defineProperty(exports, "BatchLogRecordProcessor", { enumerable: true, get: function() { - return node_1.BatchLogRecordProcessor; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/index.js -var require_src70 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = exports.InMemoryLogRecordExporter = exports.SimpleLogRecordProcessor = exports.ConsoleLogRecordExporter = exports.NoopLogRecordProcessor = exports.LoggerProvider = undefined; - var LoggerProvider_1 = require_LoggerProvider(); - Object.defineProperty(exports, "LoggerProvider", { enumerable: true, get: function() { - return LoggerProvider_1.LoggerProvider; - } }); - var NoopLogRecordProcessor_1 = require_NoopLogRecordProcessor(); - Object.defineProperty(exports, "NoopLogRecordProcessor", { enumerable: true, get: function() { - return NoopLogRecordProcessor_1.NoopLogRecordProcessor; - } }); - var ConsoleLogRecordExporter_1 = require_ConsoleLogRecordExporter(); - Object.defineProperty(exports, "ConsoleLogRecordExporter", { enumerable: true, get: function() { - return ConsoleLogRecordExporter_1.ConsoleLogRecordExporter; - } }); - var SimpleLogRecordProcessor_1 = require_SimpleLogRecordProcessor(); - Object.defineProperty(exports, "SimpleLogRecordProcessor", { enumerable: true, get: function() { - return SimpleLogRecordProcessor_1.SimpleLogRecordProcessor; - } }); - var InMemoryLogRecordExporter_1 = require_InMemoryLogRecordExporter(); - Object.defineProperty(exports, "InMemoryLogRecordExporter", { enumerable: true, get: function() { - return InMemoryLogRecordExporter_1.InMemoryLogRecordExporter; - } }); - var platform_1 = require_platform12(); - Object.defineProperty(exports, "BatchLogRecordProcessor", { enumerable: true, get: function() { - return platform_1.BatchLogRecordProcessor; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationTemporality.js -var AggregationTemporality; -var init_AggregationTemporality = __esm(() => { - (function(AggregationTemporality2) { - AggregationTemporality2[AggregationTemporality2["DELTA"] = 0] = "DELTA"; - AggregationTemporality2[AggregationTemporality2["CUMULATIVE"] = 1] = "CUMULATIVE"; - })(AggregationTemporality || (AggregationTemporality = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricData.js -var InstrumentType, DataPointType; -var init_MetricData = __esm(() => { - (function(InstrumentType2) { - InstrumentType2["COUNTER"] = "COUNTER"; - InstrumentType2["GAUGE"] = "GAUGE"; - InstrumentType2["HISTOGRAM"] = "HISTOGRAM"; - InstrumentType2["UP_DOWN_COUNTER"] = "UP_DOWN_COUNTER"; - InstrumentType2["OBSERVABLE_COUNTER"] = "OBSERVABLE_COUNTER"; - InstrumentType2["OBSERVABLE_GAUGE"] = "OBSERVABLE_GAUGE"; - InstrumentType2["OBSERVABLE_UP_DOWN_COUNTER"] = "OBSERVABLE_UP_DOWN_COUNTER"; - })(InstrumentType || (InstrumentType = {})); - (function(DataPointType2) { - DataPointType2[DataPointType2["HISTOGRAM"] = 0] = "HISTOGRAM"; - DataPointType2[DataPointType2["EXPONENTIAL_HISTOGRAM"] = 1] = "EXPONENTIAL_HISTOGRAM"; - DataPointType2[DataPointType2["GAUGE"] = 2] = "GAUGE"; - DataPointType2[DataPointType2["SUM"] = 3] = "SUM"; - })(DataPointType || (DataPointType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/utils.js -function hashAttributes(attributes) { - let keys = Object.keys(attributes); - if (keys.length === 0) - return ""; - keys = keys.sort(); - return JSON.stringify(keys.map((key) => [key, attributes[key]])); -} -function instrumentationScopeId(instrumentationScope) { - return `${instrumentationScope.name}:${instrumentationScope.version ?? ""}:${instrumentationScope.schemaUrl ?? ""}`; -} -function callWithTimeout(promise2, timeout) { - let timeoutHandle; - const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) { - timeoutHandle = setTimeout(function timeoutHandler() { - reject(new TimeoutError("Operation timed out.")); - }, timeout); - }); - return Promise.race([promise2, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle); - return result; - }, (reason) => { - clearTimeout(timeoutHandle); - throw reason; - }); -} -async function PromiseAllSettled(promises) { - return Promise.all(promises.map(async (p) => { - try { - const ret = await p; - return { - status: "fulfilled", - value: ret - }; - } catch (e) { - return { - status: "rejected", - reason: e - }; - } - })); -} -function isPromiseAllSettledRejectionResult(it) { - return it.status === "rejected"; -} -function setEquals(lhs, rhs) { - if (lhs.size !== rhs.size) { - return false; - } - for (const item of lhs) { - if (!rhs.has(item)) { - return false; - } - } - return true; -} -function binarySearchUB(arr, value) { - let lo = 0; - let hi = arr.length - 1; - let ret = arr.length; - while (hi >= lo) { - const mid = lo + Math.trunc((hi - lo) / 2); - if (arr[mid] < value) { - lo = mid + 1; - } else { - ret = mid; - hi = mid - 1; - } - } - return ret; -} -function equalsCaseInsensitive(lhs, rhs) { - return lhs.toLowerCase() === rhs.toLowerCase(); -} -var TimeoutError; -var init_utils2 = __esm(() => { - TimeoutError = class TimeoutError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, TimeoutError.prototype); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/types.js -var AggregatorKind; -var init_types = __esm(() => { - (function(AggregatorKind2) { - AggregatorKind2[AggregatorKind2["DROP"] = 0] = "DROP"; - AggregatorKind2[AggregatorKind2["SUM"] = 1] = "SUM"; - AggregatorKind2[AggregatorKind2["LAST_VALUE"] = 2] = "LAST_VALUE"; - AggregatorKind2[AggregatorKind2["HISTOGRAM"] = 3] = "HISTOGRAM"; - AggregatorKind2[AggregatorKind2["EXPONENTIAL_HISTOGRAM"] = 4] = "EXPONENTIAL_HISTOGRAM"; - })(AggregatorKind || (AggregatorKind = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Drop.js -class DropAggregator { - kind = AggregatorKind.DROP; - createAccumulation() { - return; - } - merge(_previous, _delta) { - return; - } - diff(_previous, _current) { - return; - } - toMetricData(_descriptor, _aggregationTemporality, _accumulationByAttributes, _endTime) { - return; - } -} -var init_Drop = __esm(() => { - init_types(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Histogram.js -function createNewEmptyCheckpoint(boundaries) { - const counts = boundaries.map(() => 0); - counts.push(0); - return { - buckets: { - boundaries, - counts - }, - sum: 0, - count: 0, - hasMinMax: false, - min: Infinity, - max: -Infinity - }; -} - -class HistogramAccumulation { - startTime; - _boundaries; - _recordMinMax; - _current; - constructor(startTime, boundaries, recordMinMax = true, current = createNewEmptyCheckpoint(boundaries)) { - this.startTime = startTime; - this._boundaries = boundaries; - this._recordMinMax = recordMinMax; - this._current = current; - } - record(value) { - if (Number.isNaN(value)) { - return; - } - this._current.count += 1; - this._current.sum += value; - if (this._recordMinMax) { - this._current.min = Math.min(value, this._current.min); - this._current.max = Math.max(value, this._current.max); - this._current.hasMinMax = true; - } - const idx = binarySearchUB(this._boundaries, value); - this._current.buckets.counts[idx] += 1; - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } -} - -class HistogramAggregator { - kind = AggregatorKind.HISTOGRAM; - _boundaries; - _recordMinMax; - constructor(boundaries, recordMinMax) { - this._boundaries = boundaries; - this._recordMinMax = recordMinMax; - } - createAccumulation(startTime) { - return new HistogramAccumulation(startTime, this._boundaries, this._recordMinMax); - } - merge(previous, delta) { - const previousValue = previous.toPointValue(); - const deltaValue = delta.toPointValue(); - const previousCounts = previousValue.buckets.counts; - const deltaCounts = deltaValue.buckets.counts; - const mergedCounts = new Array(previousCounts.length); - for (let idx = 0;idx < previousCounts.length; idx++) { - mergedCounts[idx] = previousCounts[idx] + deltaCounts[idx]; - } - let min = Infinity; - let max = -Infinity; - if (this._recordMinMax) { - if (previousValue.hasMinMax && deltaValue.hasMinMax) { - min = Math.min(previousValue.min, deltaValue.min); - max = Math.max(previousValue.max, deltaValue.max); - } else if (previousValue.hasMinMax) { - min = previousValue.min; - max = previousValue.max; - } else if (deltaValue.hasMinMax) { - min = deltaValue.min; - max = deltaValue.max; - } - } - return new HistogramAccumulation(previous.startTime, previousValue.buckets.boundaries, this._recordMinMax, { - buckets: { - boundaries: previousValue.buckets.boundaries, - counts: mergedCounts - }, - count: previousValue.count + deltaValue.count, - sum: previousValue.sum + deltaValue.sum, - hasMinMax: this._recordMinMax && (previousValue.hasMinMax || deltaValue.hasMinMax), - min, - max - }); - } - diff(previous, current) { - const previousValue = previous.toPointValue(); - const currentValue = current.toPointValue(); - const previousCounts = previousValue.buckets.counts; - const currentCounts = currentValue.buckets.counts; - const diffedCounts = new Array(previousCounts.length); - for (let idx = 0;idx < previousCounts.length; idx++) { - diffedCounts[idx] = currentCounts[idx] - previousCounts[idx]; - } - return new HistogramAccumulation(current.startTime, previousValue.buckets.boundaries, this._recordMinMax, { - buckets: { - boundaries: previousValue.buckets.boundaries, - counts: diffedCounts - }, - count: currentValue.count - previousValue.count, - sum: currentValue.sum - previousValue.sum, - hasMinMax: false, - min: Infinity, - max: -Infinity - }); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: DataPointType.HISTOGRAM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - const pointValue = accumulation.toPointValue(); - const allowsNegativeValues = descriptor.type === InstrumentType.GAUGE || descriptor.type === InstrumentType.UP_DOWN_COUNTER || descriptor.type === InstrumentType.OBSERVABLE_GAUGE || descriptor.type === InstrumentType.OBSERVABLE_UP_DOWN_COUNTER; - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: { - min: pointValue.hasMinMax ? pointValue.min : undefined, - max: pointValue.hasMinMax ? pointValue.max : undefined, - sum: !allowsNegativeValues ? pointValue.sum : undefined, - buckets: pointValue.buckets, - count: pointValue.count - } - }; - }) - }; - } -} -var init_Histogram = __esm(() => { - init_types(); - init_MetricData(); - init_utils2(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/Buckets.js -class Buckets { - backing; - indexBase; - indexStart; - indexEnd; - constructor(backing = new BucketsBacking, indexBase = 0, indexStart = 0, indexEnd = 0) { - this.backing = backing; - this.indexBase = indexBase; - this.indexStart = indexStart; - this.indexEnd = indexEnd; - } - get offset() { - return this.indexStart; - } - get length() { - if (this.backing.length === 0) { - return 0; - } - if (this.indexEnd === this.indexStart && this.at(0) === 0) { - return 0; - } - return this.indexEnd - this.indexStart + 1; - } - counts() { - return Array.from({ length: this.length }, (_, i) => this.at(i)); - } - at(position) { - const bias = this.indexBase - this.indexStart; - if (position < bias) { - position += this.backing.length; - } - position -= bias; - return this.backing.countAt(position); - } - incrementBucket(bucketIndex, increment) { - this.backing.increment(bucketIndex, increment); - } - decrementBucket(bucketIndex, decrement) { - this.backing.decrement(bucketIndex, decrement); - } - trim() { - for (let i = 0;i < this.length; i++) { - if (this.at(i) !== 0) { - this.indexStart += i; - break; - } else if (i === this.length - 1) { - this.indexStart = this.indexEnd = this.indexBase = 0; - return; - } - } - for (let i = this.length - 1;i >= 0; i--) { - if (this.at(i) !== 0) { - this.indexEnd -= this.length - i - 1; - break; - } - } - this._rotate(); - } - downscale(by) { - this._rotate(); - const size = 1 + this.indexEnd - this.indexStart; - const each = 1 << by; - let inpos = 0; - let outpos = 0; - for (let pos = this.indexStart;pos <= this.indexEnd; ) { - let mod2 = pos % each; - if (mod2 < 0) { - mod2 += each; - } - for (let i = mod2;i < each && inpos < size; i++) { - this._relocateBucket(outpos, inpos); - inpos++; - pos++; - } - outpos++; - } - this.indexStart >>= by; - this.indexEnd >>= by; - this.indexBase = this.indexStart; - } - clone() { - return new Buckets(this.backing.clone(), this.indexBase, this.indexStart, this.indexEnd); - } - _rotate() { - const bias = this.indexBase - this.indexStart; - if (bias === 0) { - return; - } else if (bias > 0) { - this.backing.reverse(0, this.backing.length); - this.backing.reverse(0, bias); - this.backing.reverse(bias, this.backing.length); - } else { - this.backing.reverse(0, this.backing.length); - this.backing.reverse(0, this.backing.length + bias); - } - this.indexBase = this.indexStart; - } - _relocateBucket(dest, src) { - if (dest === src) { - return; - } - this.incrementBucket(dest, this.backing.emptyBucket(src)); - } -} - -class BucketsBacking { - _counts; - constructor(counts = [0]) { - this._counts = counts; - } - get length() { - return this._counts.length; - } - countAt(pos) { - return this._counts[pos]; - } - growTo(newSize, oldPositiveLimit, newPositiveLimit) { - const tmp = new Array(newSize).fill(0); - tmp.splice(newPositiveLimit, this._counts.length - oldPositiveLimit, ...this._counts.slice(oldPositiveLimit)); - tmp.splice(0, oldPositiveLimit, ...this._counts.slice(0, oldPositiveLimit)); - this._counts = tmp; - } - reverse(from, limit) { - const num = Math.floor((from + limit) / 2) - from; - for (let i = 0;i < num; i++) { - const tmp = this._counts[from + i]; - this._counts[from + i] = this._counts[limit - i - 1]; - this._counts[limit - i - 1] = tmp; - } - } - emptyBucket(src) { - const tmp = this._counts[src]; - this._counts[src] = 0; - return tmp; - } - increment(bucketIndex, increment) { - this._counts[bucketIndex] += increment; - } - decrement(bucketIndex, decrement) { - if (this._counts[bucketIndex] >= decrement) { - this._counts[bucketIndex] -= decrement; - } else { - this._counts[bucketIndex] = 0; - } - } - clone() { - return new BucketsBacking([...this._counts]); - } -} - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/ieee754.js -function getNormalBase2(value) { - const dv = new DataView(new ArrayBuffer(8)); - dv.setFloat64(0, value); - const hiBits = dv.getUint32(0); - const expBits = (hiBits & EXPONENT_MASK) >> 20; - return expBits - EXPONENT_BIAS; -} -function getSignificand(value) { - const dv = new DataView(new ArrayBuffer(8)); - dv.setFloat64(0, value); - const hiBits = dv.getUint32(0); - const loBits = dv.getUint32(4); - const significandHiBits = (hiBits & SIGNIFICAND_MASK) * Math.pow(2, 32); - return significandHiBits + loBits; -} -var SIGNIFICAND_WIDTH = 52, EXPONENT_MASK = 2146435072, SIGNIFICAND_MASK = 1048575, EXPONENT_BIAS = 1023, MIN_NORMAL_EXPONENT, MAX_NORMAL_EXPONENT, MIN_VALUE; -var init_ieee754 = __esm(() => { - MIN_NORMAL_EXPONENT = -EXPONENT_BIAS + 1; - MAX_NORMAL_EXPONENT = EXPONENT_BIAS; - MIN_VALUE = Math.pow(2, -1022); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/util.js -function ldexp(frac, exp) { - if (frac === 0 || frac === Number.POSITIVE_INFINITY || frac === Number.NEGATIVE_INFINITY || Number.isNaN(frac)) { - return frac; - } - return frac * Math.pow(2, exp); -} -function nextGreaterSquare(v) { - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - return v; -} - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/types.js -var MappingError; -var init_types2 = __esm(() => { - MappingError = class MappingError extends Error { - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/ExponentMapping.js -class ExponentMapping { - _shift; - constructor(scale) { - this._shift = -scale; - } - mapToIndex(value) { - if (value < MIN_VALUE) { - return this._minNormalLowerBoundaryIndex(); - } - const exp = getNormalBase2(value); - const correction = this._rightShift(getSignificand(value) - 1, SIGNIFICAND_WIDTH); - return exp + correction >> this._shift; - } - lowerBoundary(index) { - const minIndex = this._minNormalLowerBoundaryIndex(); - if (index < minIndex) { - throw new MappingError(`underflow: ${index} is < minimum lower boundary: ${minIndex}`); - } - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index > maxIndex) { - throw new MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`); - } - return ldexp(1, index << this._shift); - } - get scale() { - if (this._shift === 0) { - return 0; - } - return -this._shift; - } - _minNormalLowerBoundaryIndex() { - let index = MIN_NORMAL_EXPONENT >> this._shift; - if (this._shift < 2) { - index--; - } - return index; - } - _maxNormalLowerBoundaryIndex() { - return MAX_NORMAL_EXPONENT >> this._shift; - } - _rightShift(value, shift) { - return Math.floor(value * Math.pow(2, -shift)); - } -} -var init_ExponentMapping = __esm(() => { - init_ieee754(); - init_types2(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/LogarithmMapping.js -class LogarithmMapping { - _scale; - _scaleFactor; - _inverseFactor; - constructor(scale) { - this._scale = scale; - this._scaleFactor = ldexp(Math.LOG2E, scale); - this._inverseFactor = ldexp(Math.LN2, -scale); - } - mapToIndex(value) { - if (value <= MIN_VALUE) { - return this._minNormalLowerBoundaryIndex() - 1; - } - if (getSignificand(value) === 0) { - const exp = getNormalBase2(value); - return (exp << this._scale) - 1; - } - const index = Math.floor(Math.log(value) * this._scaleFactor); - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index >= maxIndex) { - return maxIndex; - } - return index; - } - lowerBoundary(index) { - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index >= maxIndex) { - if (index === maxIndex) { - return 2 * Math.exp((index - (1 << this._scale)) / this._scaleFactor); - } - throw new MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`); - } - const minIndex = this._minNormalLowerBoundaryIndex(); - if (index <= minIndex) { - if (index === minIndex) { - return MIN_VALUE; - } else if (index === minIndex - 1) { - return Math.exp((index + (1 << this._scale)) / this._scaleFactor) / 2; - } - throw new MappingError(`overflow: ${index} is < minimum lower boundary: ${minIndex}`); - } - return Math.exp(index * this._inverseFactor); - } - get scale() { - return this._scale; - } - _minNormalLowerBoundaryIndex() { - return MIN_NORMAL_EXPONENT << this._scale; - } - _maxNormalLowerBoundaryIndex() { - return (MAX_NORMAL_EXPONENT + 1 << this._scale) - 1; - } -} -var init_LogarithmMapping = __esm(() => { - init_ieee754(); - init_types2(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/getMapping.js -function getMapping(scale) { - if (scale > MAX_SCALE || scale < MIN_SCALE) { - throw new MappingError(`expected scale >= ${MIN_SCALE} && <= ${MAX_SCALE}, got: ${scale}`); - } - return PREBUILT_MAPPINGS[scale + 10]; -} -var MIN_SCALE = -10, MAX_SCALE = 20, PREBUILT_MAPPINGS; -var init_getMapping = __esm(() => { - init_ExponentMapping(); - init_LogarithmMapping(); - init_types2(); - PREBUILT_MAPPINGS = Array.from({ length: 31 }, (_, i) => { - if (i > 10) { - return new LogarithmMapping(i - 10); - } - return new ExponentMapping(i - 10); - }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/ExponentialHistogram.js -class HighLow { - static combine(h1, h2) { - return new HighLow(Math.min(h1.low, h2.low), Math.max(h1.high, h2.high)); - } - low; - high; - constructor(low, high) { - this.low = low; - this.high = high; - } -} - -class ExponentialHistogramAccumulation { - startTime; - _maxSize; - _recordMinMax; - _sum; - _count; - _zeroCount; - _min; - _max; - _positive; - _negative; - _mapping; - constructor(startTime, maxSize = DEFAULT_MAX_SIZE, recordMinMax = true, sum = 0, count = 0, zeroCount = 0, min = Number.POSITIVE_INFINITY, max = Number.NEGATIVE_INFINITY, positive = new Buckets, negative = new Buckets, mapping = getMapping(MAX_SCALE2)) { - this.startTime = startTime; - this._maxSize = maxSize; - this._recordMinMax = recordMinMax; - this._sum = sum; - this._count = count; - this._zeroCount = zeroCount; - this._min = min; - this._max = max; - this._positive = positive; - this._negative = negative; - this._mapping = mapping; - if (this._maxSize < MIN_MAX_SIZE) { - import_api35.diag.warn(`Exponential Histogram Max Size set to ${this._maxSize}, changing to the minimum size of: ${MIN_MAX_SIZE}`); - this._maxSize = MIN_MAX_SIZE; - } - } - record(value) { - this.updateByIncrement(value, 1); - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return { - hasMinMax: this._recordMinMax, - min: this.min, - max: this.max, - sum: this.sum, - positive: { - offset: this.positive.offset, - bucketCounts: this.positive.counts() - }, - negative: { - offset: this.negative.offset, - bucketCounts: this.negative.counts() - }, - count: this.count, - scale: this.scale, - zeroCount: this.zeroCount - }; - } - get sum() { - return this._sum; - } - get min() { - return this._min; - } - get max() { - return this._max; - } - get count() { - return this._count; - } - get zeroCount() { - return this._zeroCount; - } - get scale() { - if (this._count === this._zeroCount) { - return 0; - } - return this._mapping.scale; - } - get positive() { - return this._positive; - } - get negative() { - return this._negative; - } - updateByIncrement(value, increment) { - if (Number.isNaN(value)) { - return; - } - if (value > this._max) { - this._max = value; - } - if (value < this._min) { - this._min = value; - } - this._count += increment; - if (value === 0) { - this._zeroCount += increment; - return; - } - this._sum += value * increment; - if (value > 0) { - this._updateBuckets(this._positive, value, increment); - } else { - this._updateBuckets(this._negative, -value, increment); - } - } - merge(previous) { - if (this._count === 0) { - this._min = previous.min; - this._max = previous.max; - } else if (previous.count !== 0) { - if (previous.min < this.min) { - this._min = previous.min; - } - if (previous.max > this.max) { - this._max = previous.max; - } - } - this.startTime = previous.startTime; - this._sum += previous.sum; - this._count += previous.count; - this._zeroCount += previous.zeroCount; - const minScale = this._minScale(previous); - this._downscale(this.scale - minScale); - this._mergeBuckets(this.positive, previous, previous.positive, minScale); - this._mergeBuckets(this.negative, previous, previous.negative, minScale); - } - diff(other) { - this._min = Infinity; - this._max = -Infinity; - this._sum -= other.sum; - this._count -= other.count; - this._zeroCount -= other.zeroCount; - const minScale = this._minScale(other); - this._downscale(this.scale - minScale); - this._diffBuckets(this.positive, other, other.positive, minScale); - this._diffBuckets(this.negative, other, other.negative, minScale); - } - clone() { - return new ExponentialHistogramAccumulation(this.startTime, this._maxSize, this._recordMinMax, this._sum, this._count, this._zeroCount, this._min, this._max, this.positive.clone(), this.negative.clone(), this._mapping); - } - _updateBuckets(buckets, value, increment) { - let index = this._mapping.mapToIndex(value); - let rescalingNeeded = false; - let high = 0; - let low = 0; - if (buckets.length === 0) { - buckets.indexStart = index; - buckets.indexEnd = buckets.indexStart; - buckets.indexBase = buckets.indexStart; - } else if (index < buckets.indexStart && buckets.indexEnd - index >= this._maxSize) { - rescalingNeeded = true; - low = index; - high = buckets.indexEnd; - } else if (index > buckets.indexEnd && index - buckets.indexStart >= this._maxSize) { - rescalingNeeded = true; - low = buckets.indexStart; - high = index; - } - if (rescalingNeeded) { - const change = this._changeScale(high, low); - this._downscale(change); - index = this._mapping.mapToIndex(value); - } - this._incrementIndexBy(buckets, index, increment); - } - _incrementIndexBy(buckets, index, increment) { - if (increment === 0) { - return; - } - if (buckets.length === 0) { - buckets.indexStart = buckets.indexEnd = buckets.indexBase = index; - } - if (index < buckets.indexStart) { - const span = buckets.indexEnd - index; - if (span >= buckets.backing.length) { - this._grow(buckets, span + 1); - } - buckets.indexStart = index; - } else if (index > buckets.indexEnd) { - const span = index - buckets.indexStart; - if (span >= buckets.backing.length) { - this._grow(buckets, span + 1); - } - buckets.indexEnd = index; - } - let bucketIndex = index - buckets.indexBase; - if (bucketIndex < 0) { - bucketIndex += buckets.backing.length; - } - buckets.incrementBucket(bucketIndex, increment); - } - _grow(buckets, needed) { - const size = buckets.backing.length; - const bias = buckets.indexBase - buckets.indexStart; - const oldPositiveLimit = size - bias; - let newSize = nextGreaterSquare(needed); - if (newSize > this._maxSize) { - newSize = this._maxSize; - } - const newPositiveLimit = newSize - bias; - buckets.backing.growTo(newSize, oldPositiveLimit, newPositiveLimit); - } - _changeScale(high, low) { - let change = 0; - while (high - low >= this._maxSize) { - high >>= 1; - low >>= 1; - change++; - } - return change; - } - _downscale(change) { - if (change === 0) { - return; - } - if (change < 0) { - throw new Error(`impossible change of scale: ${this.scale}`); - } - const newScale = this._mapping.scale - change; - this._positive.downscale(change); - this._negative.downscale(change); - this._mapping = getMapping(newScale); - } - _minScale(other) { - const minScale = Math.min(this.scale, other.scale); - const highLowPos = HighLow.combine(this._highLowAtScale(this.positive, this.scale, minScale), this._highLowAtScale(other.positive, other.scale, minScale)); - const highLowNeg = HighLow.combine(this._highLowAtScale(this.negative, this.scale, minScale), this._highLowAtScale(other.negative, other.scale, minScale)); - return Math.min(minScale - this._changeScale(highLowPos.high, highLowPos.low), minScale - this._changeScale(highLowNeg.high, highLowNeg.low)); - } - _highLowAtScale(buckets, currentScale, newScale) { - if (buckets.length === 0) { - return new HighLow(0, -1); - } - const shift = currentScale - newScale; - return new HighLow(buckets.indexStart >> shift, buckets.indexEnd >> shift); - } - _mergeBuckets(ours, other, theirs, scale) { - const theirOffset = theirs.offset; - const theirChange = other.scale - scale; - for (let i = 0;i < theirs.length; i++) { - this._incrementIndexBy(ours, theirOffset + i >> theirChange, theirs.at(i)); - } - } - _diffBuckets(ours, other, theirs, scale) { - const theirOffset = theirs.offset; - const theirChange = other.scale - scale; - for (let i = 0;i < theirs.length; i++) { - const ourIndex = theirOffset + i >> theirChange; - let bucketIndex = ourIndex - ours.indexBase; - if (bucketIndex < 0) { - bucketIndex += ours.backing.length; - } - ours.decrementBucket(bucketIndex, theirs.at(i)); - } - ours.trim(); - } -} - -class ExponentialHistogramAggregator { - kind = AggregatorKind.EXPONENTIAL_HISTOGRAM; - _maxSize; - _recordMinMax; - constructor(maxSize, recordMinMax) { - this._maxSize = maxSize; - this._recordMinMax = recordMinMax; - } - createAccumulation(startTime) { - return new ExponentialHistogramAccumulation(startTime, this._maxSize, this._recordMinMax); - } - merge(previous, delta) { - const result = delta.clone(); - result.merge(previous); - return result; - } - diff(previous, current) { - const result = current.clone(); - result.diff(previous); - return result; - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: DataPointType.EXPONENTIAL_HISTOGRAM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - const pointValue = accumulation.toPointValue(); - const allowsNegativeValues = descriptor.type === InstrumentType.GAUGE || descriptor.type === InstrumentType.UP_DOWN_COUNTER || descriptor.type === InstrumentType.OBSERVABLE_GAUGE || descriptor.type === InstrumentType.OBSERVABLE_UP_DOWN_COUNTER; - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: { - min: pointValue.hasMinMax ? pointValue.min : undefined, - max: pointValue.hasMinMax ? pointValue.max : undefined, - sum: !allowsNegativeValues ? pointValue.sum : undefined, - positive: { - offset: pointValue.positive.offset, - bucketCounts: pointValue.positive.bucketCounts - }, - negative: { - offset: pointValue.negative.offset, - bucketCounts: pointValue.negative.bucketCounts - }, - count: pointValue.count, - scale: pointValue.scale, - zeroCount: pointValue.zeroCount - } - }; - }) - }; - } -} -var import_api35, MAX_SCALE2 = 20, DEFAULT_MAX_SIZE = 160, MIN_MAX_SIZE = 2; -var init_ExponentialHistogram = __esm(() => { - init_types(); - init_MetricData(); - init_getMapping(); - import_api35 = __toESM(require_src(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/LastValue.js -class LastValueAccumulation { - startTime; - _current; - sampleTime; - constructor(startTime, current = 0, sampleTime = [0, 0]) { - this.startTime = startTime; - this._current = current; - this.sampleTime = sampleTime; - } - record(value) { - this._current = value; - this.sampleTime = import_core22.millisToHrTime(Date.now()); - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } -} - -class LastValueAggregator { - kind = AggregatorKind.LAST_VALUE; - createAccumulation(startTime) { - return new LastValueAccumulation(startTime); - } - merge(previous, delta) { - const latestAccumulation = import_core22.hrTimeToMicroseconds(delta.sampleTime) >= import_core22.hrTimeToMicroseconds(previous.sampleTime) ? delta : previous; - return new LastValueAccumulation(previous.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime); - } - diff(previous, current) { - const latestAccumulation = import_core22.hrTimeToMicroseconds(current.sampleTime) >= import_core22.hrTimeToMicroseconds(previous.sampleTime) ? current : previous; - return new LastValueAccumulation(current.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: DataPointType.GAUGE, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: accumulation.toPointValue() - }; - }) - }; - } -} -var import_core22; -var init_LastValue = __esm(() => { - init_types(); - init_MetricData(); - import_core22 = __toESM(require_src4(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Sum.js -class SumAccumulation { - startTime; - monotonic; - _current; - reset; - constructor(startTime, monotonic, current = 0, reset2 = false) { - this.startTime = startTime; - this.monotonic = monotonic; - this._current = current; - this.reset = reset2; - } - record(value) { - if (this.monotonic && value < 0) { - return; - } - this._current += value; - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } -} - -class SumAggregator { - kind = AggregatorKind.SUM; - monotonic; - constructor(monotonic) { - this.monotonic = monotonic; - } - createAccumulation(startTime) { - return new SumAccumulation(startTime, this.monotonic); - } - merge(previous, delta) { - const prevPv = previous.toPointValue(); - const deltaPv = delta.toPointValue(); - if (delta.reset) { - return new SumAccumulation(delta.startTime, this.monotonic, deltaPv, delta.reset); - } - return new SumAccumulation(previous.startTime, this.monotonic, prevPv + deltaPv); - } - diff(previous, current) { - const prevPv = previous.toPointValue(); - const currPv = current.toPointValue(); - if (this.monotonic && prevPv > currPv) { - return new SumAccumulation(current.startTime, this.monotonic, currPv, true); - } - return new SumAccumulation(current.startTime, this.monotonic, currPv - prevPv); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: DataPointType.SUM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: accumulation.toPointValue() - }; - }), - isMonotonic: this.monotonic - }; - } -} -var init_Sum = __esm(() => { - init_types(); - init_MetricData(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/index.js -var init_aggregator = __esm(() => { - init_Drop(); - init_Histogram(); - init_ExponentialHistogram(); - init_LastValue(); - init_Sum(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/Aggregation.js -class ExplicitBucketHistogramAggregation { - _boundaries; - _recordMinMax; - constructor(boundaries, recordMinMax = true) { - if (boundaries == null) { - throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array"); - } - boundaries = boundaries.concat(); - boundaries = boundaries.sort((a, b) => a - b); - const minusInfinityIndex = boundaries.lastIndexOf(-Infinity); - let infinityIndex = boundaries.indexOf(Infinity); - if (infinityIndex === -1) { - infinityIndex = undefined; - } - this._boundaries = boundaries.slice(minusInfinityIndex + 1, infinityIndex); - this._recordMinMax = recordMinMax; - } - createAggregator(_instrument) { - return new HistogramAggregator(this._boundaries, this._recordMinMax); - } -} - -class ExponentialHistogramAggregation { - _maxSize; - _recordMinMax; - constructor(maxSize = 160, recordMinMax = true) { - this._maxSize = maxSize; - this._recordMinMax = recordMinMax; - } - createAggregator(_instrument) { - return new ExponentialHistogramAggregator(this._maxSize, this._recordMinMax); - } -} - -class DefaultAggregation { - _resolve(instrument) { - switch (instrument.type) { - case InstrumentType.COUNTER: - case InstrumentType.UP_DOWN_COUNTER: - case InstrumentType.OBSERVABLE_COUNTER: - case InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: { - return SUM_AGGREGATION; - } - case InstrumentType.GAUGE: - case InstrumentType.OBSERVABLE_GAUGE: { - return LAST_VALUE_AGGREGATION; - } - case InstrumentType.HISTOGRAM: { - if (instrument.advice.explicitBucketBoundaries) { - return new ExplicitBucketHistogramAggregation(instrument.advice.explicitBucketBoundaries); - } - return HISTOGRAM_AGGREGATION; - } - } - api4.diag.warn(`Unable to recognize instrument type: ${instrument.type}`); - return DROP_AGGREGATION; - } - createAggregator(instrument) { - return this._resolve(instrument).createAggregator(instrument); - } -} -var api4, DropAggregation, SumAggregation, LastValueAggregation, HistogramAggregation, DROP_AGGREGATION, SUM_AGGREGATION, LAST_VALUE_AGGREGATION, HISTOGRAM_AGGREGATION, EXPONENTIAL_HISTOGRAM_AGGREGATION, DEFAULT_AGGREGATION; -var init_Aggregation = __esm(() => { - init_aggregator(); - init_MetricData(); - api4 = __toESM(require_src(), 1); - DropAggregation = class DropAggregation { - static DEFAULT_INSTANCE = new DropAggregator; - createAggregator(_instrument) { - return DropAggregation.DEFAULT_INSTANCE; - } - }; - SumAggregation = class SumAggregation { - static MONOTONIC_INSTANCE = new SumAggregator(true); - static NON_MONOTONIC_INSTANCE = new SumAggregator(false); - createAggregator(instrument) { - switch (instrument.type) { - case InstrumentType.COUNTER: - case InstrumentType.OBSERVABLE_COUNTER: - case InstrumentType.HISTOGRAM: { - return SumAggregation.MONOTONIC_INSTANCE; - } - default: { - return SumAggregation.NON_MONOTONIC_INSTANCE; - } - } - } - }; - LastValueAggregation = class LastValueAggregation { - static DEFAULT_INSTANCE = new LastValueAggregator; - createAggregator(_instrument) { - return LastValueAggregation.DEFAULT_INSTANCE; - } - }; - HistogramAggregation = class HistogramAggregation { - static DEFAULT_INSTANCE = new HistogramAggregator([0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 1e4], true); - createAggregator(_instrument) { - return HistogramAggregation.DEFAULT_INSTANCE; - } - }; - DROP_AGGREGATION = new DropAggregation; - SUM_AGGREGATION = new SumAggregation; - LAST_VALUE_AGGREGATION = new LastValueAggregation; - HISTOGRAM_AGGREGATION = new HistogramAggregation; - EXPONENTIAL_HISTOGRAM_AGGREGATION = new ExponentialHistogramAggregation; - DEFAULT_AGGREGATION = new DefaultAggregation; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/AggregationOption.js -function toAggregation(option) { - switch (option.type) { - case AggregationType.DEFAULT: - return DEFAULT_AGGREGATION; - case AggregationType.DROP: - return DROP_AGGREGATION; - case AggregationType.SUM: - return SUM_AGGREGATION; - case AggregationType.LAST_VALUE: - return LAST_VALUE_AGGREGATION; - case AggregationType.EXPONENTIAL_HISTOGRAM: { - const expOption = option; - return new ExponentialHistogramAggregation(expOption.options?.maxSize, expOption.options?.recordMinMax); - } - case AggregationType.EXPLICIT_BUCKET_HISTOGRAM: { - const expOption = option; - if (expOption.options == null) { - return HISTOGRAM_AGGREGATION; - } else { - return new ExplicitBucketHistogramAggregation(expOption.options?.boundaries, expOption.options?.recordMinMax); - } - } - default: - throw new Error("Unsupported Aggregation"); - } -} -var AggregationType; -var init_AggregationOption = __esm(() => { - init_Aggregation(); - (function(AggregationType2) { - AggregationType2[AggregationType2["DEFAULT"] = 0] = "DEFAULT"; - AggregationType2[AggregationType2["DROP"] = 1] = "DROP"; - AggregationType2[AggregationType2["SUM"] = 2] = "SUM"; - AggregationType2[AggregationType2["LAST_VALUE"] = 3] = "LAST_VALUE"; - AggregationType2[AggregationType2["EXPLICIT_BUCKET_HISTOGRAM"] = 4] = "EXPLICIT_BUCKET_HISTOGRAM"; - AggregationType2[AggregationType2["EXPONENTIAL_HISTOGRAM"] = 5] = "EXPONENTIAL_HISTOGRAM"; - })(AggregationType || (AggregationType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationSelector.js -var DEFAULT_AGGREGATION_SELECTOR = (_instrumentType) => { - return { - type: AggregationType.DEFAULT - }; -}, DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = (_instrumentType) => AggregationTemporality.CUMULATIVE; -var init_AggregationSelector = __esm(() => { - init_AggregationTemporality(); - init_AggregationOption(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricReader.js -class MetricReader { - _shutdown = false; - _metricProducers; - _sdkMetricProducer; - _aggregationTemporalitySelector; - _aggregationSelector; - _cardinalitySelector; - constructor(options) { - this._aggregationSelector = options?.aggregationSelector ?? DEFAULT_AGGREGATION_SELECTOR; - this._aggregationTemporalitySelector = options?.aggregationTemporalitySelector ?? DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; - this._metricProducers = options?.metricProducers ?? []; - this._cardinalitySelector = options?.cardinalitySelector; - } - setMetricProducer(metricProducer) { - if (this._sdkMetricProducer) { - throw new Error("MetricReader can not be bound to a MeterProvider again."); - } - this._sdkMetricProducer = metricProducer; - this.onInitialized(); - } - selectAggregation(instrumentType) { - return this._aggregationSelector(instrumentType); - } - selectAggregationTemporality(instrumentType) { - return this._aggregationTemporalitySelector(instrumentType); - } - selectCardinalityLimit(instrumentType) { - return this._cardinalitySelector ? this._cardinalitySelector(instrumentType) : 2000; - } - onInitialized() {} - async collect(options) { - if (this._sdkMetricProducer === undefined) { - throw new Error("MetricReader is not bound to a MetricProducer"); - } - if (this._shutdown) { - throw new Error("MetricReader is shutdown"); - } - const [sdkCollectionResults, ...additionalCollectionResults] = await Promise.all([ - this._sdkMetricProducer.collect({ - timeoutMillis: options?.timeoutMillis - }), - ...this._metricProducers.map((producer) => producer.collect({ - timeoutMillis: options?.timeoutMillis - })) - ]); - const errors3 = sdkCollectionResults.errors.concat(additionalCollectionResults.flatMap((result) => result.errors)); - const resource = sdkCollectionResults.resourceMetrics.resource; - const scopeMetrics = sdkCollectionResults.resourceMetrics.scopeMetrics.concat(additionalCollectionResults.flatMap((result) => result.resourceMetrics.scopeMetrics)); - return { - resourceMetrics: { - resource, - scopeMetrics - }, - errors: errors3 - }; - } - async shutdown(options) { - if (this._shutdown) { - api5.diag.error("Cannot call shutdown twice."); - return; - } - if (options?.timeoutMillis == null) { - await this.onShutdown(); - } else { - await callWithTimeout(this.onShutdown(), options.timeoutMillis); - } - this._shutdown = true; - } - async forceFlush(options) { - if (this._shutdown) { - api5.diag.warn("Cannot forceFlush on already shutdown MetricReader."); - return; - } - if (options?.timeoutMillis == null) { - await this.onForceFlush(); - return; - } - await callWithTimeout(this.onForceFlush(), options.timeoutMillis); - } -} -var api5; -var init_MetricReader = __esm(() => { - init_utils2(); - init_AggregationSelector(); - api5 = __toESM(require_src(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/export/PeriodicExportingMetricReader.js -var api6, import_core23, PeriodicExportingMetricReader; -var init_PeriodicExportingMetricReader = __esm(() => { - init_MetricReader(); - init_utils2(); - api6 = __toESM(require_src(), 1); - import_core23 = __toESM(require_src4(), 1); - PeriodicExportingMetricReader = class PeriodicExportingMetricReader extends MetricReader { - _interval; - _exporter; - _exportInterval; - _exportTimeout; - constructor(options) { - super({ - aggregationSelector: options.exporter.selectAggregation?.bind(options.exporter), - aggregationTemporalitySelector: options.exporter.selectAggregationTemporality?.bind(options.exporter), - metricProducers: options.metricProducers - }); - if (options.exportIntervalMillis !== undefined && options.exportIntervalMillis <= 0) { - throw Error("exportIntervalMillis must be greater than 0"); - } - if (options.exportTimeoutMillis !== undefined && options.exportTimeoutMillis <= 0) { - throw Error("exportTimeoutMillis must be greater than 0"); - } - if (options.exportTimeoutMillis !== undefined && options.exportIntervalMillis !== undefined && options.exportIntervalMillis < options.exportTimeoutMillis) { - throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis"); - } - this._exportInterval = options.exportIntervalMillis ?? 60000; - this._exportTimeout = options.exportTimeoutMillis ?? 30000; - this._exporter = options.exporter; - } - async _runOnce() { - try { - await callWithTimeout(this._doRun(), this._exportTimeout); - } catch (err) { - if (err instanceof TimeoutError) { - api6.diag.error("Export took longer than %s milliseconds and timed out.", this._exportTimeout); - return; - } - import_core23.globalErrorHandler(err); - } - } - async _doRun() { - const { resourceMetrics, errors: errors3 } = await this.collect({ - timeoutMillis: this._exportTimeout - }); - if (errors3.length > 0) { - api6.diag.error("PeriodicExportingMetricReader: metrics collection errors", ...errors3); - } - if (resourceMetrics.resource.asyncAttributesPending) { - try { - await resourceMetrics.resource.waitForAsyncAttributes?.(); - } catch (e) { - api6.diag.debug("Error while resolving async portion of resource: ", e); - import_core23.globalErrorHandler(e); - } - } - if (resourceMetrics.scopeMetrics.length === 0) { - return; - } - const result = await import_core23.internal._export(this._exporter, resourceMetrics); - if (result.code !== import_core23.ExportResultCode.SUCCESS) { - throw new Error(`PeriodicExportingMetricReader: metrics export failed (error ${result.error})`); - } - } - onInitialized() { - this._interval = setInterval(() => { - this._runOnce(); - }, this._exportInterval); - if (typeof this._interval !== "number") { - this._interval.unref(); - } - } - async onForceFlush() { - await this._runOnce(); - await this._exporter.forceFlush(); - } - async onShutdown() { - if (this._interval) { - clearInterval(this._interval); - } - await this.onForceFlush(); - await this._exporter.shutdown(); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/ViewRegistry.js -class ViewRegistry { - _registeredViews = []; - addView(view) { - this._registeredViews.push(view); - } - findViews(instrument, meter) { - const views = this._registeredViews.filter((registeredView) => { - return this._matchInstrument(registeredView.instrumentSelector, instrument) && this._matchMeter(registeredView.meterSelector, meter); - }); - return views; - } - _matchInstrument(selector, instrument) { - return (selector.getType() === undefined || instrument.type === selector.getType()) && selector.getNameFilter().match(instrument.name) && selector.getUnitFilter().match(instrument.unit); - } - _matchMeter(selector, meter) { - return selector.getNameFilter().match(meter.name) && (meter.version === undefined || selector.getVersionFilter().match(meter.version)) && (meter.schemaUrl === undefined || selector.getSchemaUrlFilter().match(meter.schemaUrl)); - } -} - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/InstrumentDescriptor.js -function createInstrumentDescriptor(name, type, options) { - if (!isValidName(name)) { - import_api36.diag.warn(`Invalid metric name: "${name}". The metric name should be a ASCII string with a length no greater than 255 characters.`); - } - return { - name, - type, - description: options?.description ?? "", - unit: options?.unit ?? "", - valueType: options?.valueType ?? import_api36.ValueType.DOUBLE, - advice: options?.advice ?? {} - }; -} -function createInstrumentDescriptorWithView(view, instrument) { - return { - name: view.name ?? instrument.name, - description: view.description ?? instrument.description, - type: instrument.type, - unit: instrument.unit, - valueType: instrument.valueType, - advice: instrument.advice - }; -} -function isDescriptorCompatibleWith(descriptor, otherDescriptor) { - return equalsCaseInsensitive(descriptor.name, otherDescriptor.name) && descriptor.unit === otherDescriptor.unit && descriptor.type === otherDescriptor.type && descriptor.valueType === otherDescriptor.valueType; -} -function isValidName(name) { - return NAME_REGEXP.test(name); -} -var import_api36, NAME_REGEXP; -var init_InstrumentDescriptor = __esm(() => { - init_utils2(); - import_api36 = __toESM(require_src(), 1); - NAME_REGEXP = /^[a-z][a-z0-9_.\-/]{0,254}$/i; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/Instruments.js -class SyncInstrument { - _writableMetricStorage; - _descriptor; - constructor(writableMetricStorage, descriptor) { - this._writableMetricStorage = writableMetricStorage; - this._descriptor = descriptor; - } - _record(value, attributes = {}, context8 = import_api37.context.active()) { - if (typeof value !== "number") { - import_api37.diag.warn(`non-number value provided to metric ${this._descriptor.name}: ${value}`); - return; - } - if (this._descriptor.valueType === import_api37.ValueType.INT && !Number.isInteger(value)) { - import_api37.diag.warn(`INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - this._writableMetricStorage.record(value, attributes, context8, import_core24.millisToHrTime(Date.now())); - } -} - -class ObservableInstrument { - _metricStorages; - _descriptor; - _observableRegistry; - constructor(descriptor, metricStorages, observableRegistry) { - this._descriptor = descriptor; - this._metricStorages = metricStorages; - this._observableRegistry = observableRegistry; - } - addCallback(callback) { - this._observableRegistry.addCallback(callback, this); - } - removeCallback(callback) { - this._observableRegistry.removeCallback(callback, this); - } -} -function isObservableInstrument(it) { - return it instanceof ObservableInstrument; -} -var import_api37, import_core24, UpDownCounterInstrument, CounterInstrument, GaugeInstrument, HistogramInstrument, ObservableCounterInstrument, ObservableGaugeInstrument, ObservableUpDownCounterInstrument; -var init_Instruments = __esm(() => { - import_api37 = __toESM(require_src(), 1); - import_core24 = __toESM(require_src4(), 1); - UpDownCounterInstrument = class UpDownCounterInstrument extends SyncInstrument { - add(value, attributes, ctx) { - this._record(value, attributes, ctx); - } - }; - CounterInstrument = class CounterInstrument extends SyncInstrument { - add(value, attributes, ctx) { - if (value < 0) { - import_api37.diag.warn(`negative value provided to counter ${this._descriptor.name}: ${value}`); - return; - } - this._record(value, attributes, ctx); - } - }; - GaugeInstrument = class GaugeInstrument extends SyncInstrument { - record(value, attributes, ctx) { - this._record(value, attributes, ctx); - } - }; - HistogramInstrument = class HistogramInstrument extends SyncInstrument { - record(value, attributes, ctx) { - if (value < 0) { - import_api37.diag.warn(`negative value provided to histogram ${this._descriptor.name}: ${value}`); - return; - } - this._record(value, attributes, ctx); - } - }; - ObservableCounterInstrument = class ObservableCounterInstrument extends ObservableInstrument { - }; - ObservableGaugeInstrument = class ObservableGaugeInstrument extends ObservableInstrument { - }; - ObservableUpDownCounterInstrument = class ObservableUpDownCounterInstrument extends ObservableInstrument { - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/Meter.js -class Meter { - _meterSharedState; - constructor(meterSharedState) { - this._meterSharedState = meterSharedState; - } - createGauge(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.GAUGE, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new GaugeInstrument(storage, descriptor); - } - createHistogram(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.HISTOGRAM, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new HistogramInstrument(storage, descriptor); - } - createCounter(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.COUNTER, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new CounterInstrument(storage, descriptor); - } - createUpDownCounter(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.UP_DOWN_COUNTER, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new UpDownCounterInstrument(storage, descriptor); - } - createObservableGauge(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.OBSERVABLE_GAUGE, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new ObservableGaugeInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - createObservableCounter(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.OBSERVABLE_COUNTER, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new ObservableCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - createObservableUpDownCounter(name, options) { - const descriptor = createInstrumentDescriptor(name, InstrumentType.OBSERVABLE_UP_DOWN_COUNTER, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new ObservableUpDownCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - addBatchObservableCallback(callback, observables) { - this._meterSharedState.observableRegistry.addBatchCallback(callback, observables); - } - removeBatchObservableCallback(callback, observables) { - this._meterSharedState.observableRegistry.removeBatchCallback(callback, observables); - } -} -var init_Meter = __esm(() => { - init_InstrumentDescriptor(); - init_Instruments(); - init_MetricData(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricStorage.js -class MetricStorage { - _instrumentDescriptor; - constructor(instrumentDescriptor) { - this._instrumentDescriptor = instrumentDescriptor; - } - getInstrumentDescriptor() { - return this._instrumentDescriptor; - } - updateDescription(description) { - this._instrumentDescriptor = createInstrumentDescriptor(this._instrumentDescriptor.name, this._instrumentDescriptor.type, { - description, - valueType: this._instrumentDescriptor.valueType, - unit: this._instrumentDescriptor.unit, - advice: this._instrumentDescriptor.advice - }); - } -} -var init_MetricStorage = __esm(() => { - init_InstrumentDescriptor(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/HashMap.js -class HashMap { - _valueMap = new Map; - _keyMap = new Map; - _hash; - constructor(hash2) { - this._hash = hash2; - } - get(key, hashCode) { - hashCode ??= this._hash(key); - return this._valueMap.get(hashCode); - } - getOrDefault(key, defaultFactory) { - const hash2 = this._hash(key); - if (this._valueMap.has(hash2)) { - return this._valueMap.get(hash2); - } - const val = defaultFactory(); - if (!this._keyMap.has(hash2)) { - this._keyMap.set(hash2, key); - } - this._valueMap.set(hash2, val); - return val; - } - set(key, value, hashCode) { - hashCode ??= this._hash(key); - if (!this._keyMap.has(hashCode)) { - this._keyMap.set(hashCode, key); - } - this._valueMap.set(hashCode, value); - } - has(key, hashCode) { - hashCode ??= this._hash(key); - return this._valueMap.has(hashCode); - } - *keys() { - const keyIterator = this._keyMap.entries(); - let next = keyIterator.next(); - while (next.done !== true) { - yield [next.value[1], next.value[0]]; - next = keyIterator.next(); - } - } - *entries() { - const valueIterator = this._valueMap.entries(); - let next = valueIterator.next(); - while (next.done !== true) { - yield [this._keyMap.get(next.value[0]), next.value[1], next.value[0]]; - next = valueIterator.next(); - } - } - get size() { - return this._valueMap.size; - } -} -var AttributeHashMap; -var init_HashMap = __esm(() => { - init_utils2(); - AttributeHashMap = class AttributeHashMap extends HashMap { - constructor() { - super(hashAttributes); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/DeltaMetricProcessor.js -class DeltaMetricProcessor { - _activeCollectionStorage = new AttributeHashMap; - _cumulativeMemoStorage = new AttributeHashMap; - _cardinalityLimit; - _overflowAttributes = { "otel.metric.overflow": true }; - _overflowHashCode; - _aggregator; - constructor(aggregator, aggregationCardinalityLimit) { - this._aggregator = aggregator; - this._cardinalityLimit = (aggregationCardinalityLimit ?? 2000) - 1; - this._overflowHashCode = hashAttributes(this._overflowAttributes); - } - record(value, attributes, _context, collectionTime) { - let accumulation = this._activeCollectionStorage.get(attributes); - if (!accumulation) { - if (this._activeCollectionStorage.size >= this._cardinalityLimit) { - const overflowAccumulation = this._activeCollectionStorage.getOrDefault(this._overflowAttributes, () => this._aggregator.createAccumulation(collectionTime)); - overflowAccumulation?.record(value); - return; - } - accumulation = this._aggregator.createAccumulation(collectionTime); - this._activeCollectionStorage.set(attributes, accumulation); - } - accumulation?.record(value); - } - batchCumulate(measurements, collectionTime) { - Array.from(measurements.entries()).forEach(([attributes, value, hashCode]) => { - const accumulation = this._aggregator.createAccumulation(collectionTime); - accumulation?.record(value); - let delta = accumulation; - if (this._cumulativeMemoStorage.has(attributes, hashCode)) { - const previous = this._cumulativeMemoStorage.get(attributes, hashCode); - delta = this._aggregator.diff(previous, accumulation); - } else { - if (this._cumulativeMemoStorage.size >= this._cardinalityLimit) { - attributes = this._overflowAttributes; - hashCode = this._overflowHashCode; - if (this._cumulativeMemoStorage.has(attributes, hashCode)) { - const previous = this._cumulativeMemoStorage.get(attributes, hashCode); - delta = this._aggregator.diff(previous, accumulation); - } - } - } - if (this._activeCollectionStorage.has(attributes, hashCode)) { - const active = this._activeCollectionStorage.get(attributes, hashCode); - delta = this._aggregator.merge(active, delta); - } - this._cumulativeMemoStorage.set(attributes, accumulation, hashCode); - this._activeCollectionStorage.set(attributes, delta, hashCode); - }); - } - collect() { - const unreportedDelta = this._activeCollectionStorage; - this._activeCollectionStorage = new AttributeHashMap; - return unreportedDelta; - } -} -var init_DeltaMetricProcessor = __esm(() => { - init_utils2(); - init_HashMap(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/TemporalMetricProcessor.js -class TemporalMetricProcessor { - _aggregator; - _unreportedAccumulations = new Map; - _reportHistory = new Map; - constructor(aggregator, collectorHandles) { - this._aggregator = aggregator; - collectorHandles.forEach((handle) => { - this._unreportedAccumulations.set(handle, []); - }); - } - buildMetrics(collector, instrumentDescriptor, currentAccumulations, collectionTime) { - this._stashAccumulations(currentAccumulations); - const unreportedAccumulations = this._getMergedUnreportedAccumulations(collector); - let result = unreportedAccumulations; - let aggregationTemporality; - if (this._reportHistory.has(collector)) { - const last = this._reportHistory.get(collector); - const lastCollectionTime = last.collectionTime; - aggregationTemporality = last.aggregationTemporality; - if (aggregationTemporality === AggregationTemporality.CUMULATIVE) { - result = TemporalMetricProcessor.merge(last.accumulations, unreportedAccumulations, this._aggregator); - } else { - result = TemporalMetricProcessor.calibrateStartTime(last.accumulations, unreportedAccumulations, lastCollectionTime); - } - } else { - aggregationTemporality = collector.selectAggregationTemporality(instrumentDescriptor.type); - } - this._reportHistory.set(collector, { - accumulations: result, - collectionTime, - aggregationTemporality - }); - const accumulationRecords = AttributesMapToAccumulationRecords(result); - if (accumulationRecords.length === 0) { - return; - } - return this._aggregator.toMetricData(instrumentDescriptor, aggregationTemporality, accumulationRecords, collectionTime); - } - _stashAccumulations(currentAccumulation) { - const registeredCollectors = this._unreportedAccumulations.keys(); - for (const collector of registeredCollectors) { - let stash = this._unreportedAccumulations.get(collector); - if (stash === undefined) { - stash = []; - this._unreportedAccumulations.set(collector, stash); - } - stash.push(currentAccumulation); - } - } - _getMergedUnreportedAccumulations(collector) { - let result = new AttributeHashMap; - const unreportedList = this._unreportedAccumulations.get(collector); - this._unreportedAccumulations.set(collector, []); - if (unreportedList === undefined) { - return result; - } - for (const it of unreportedList) { - result = TemporalMetricProcessor.merge(result, it, this._aggregator); - } - return result; - } - static merge(last, current, aggregator) { - const result = last; - const iterator = current.entries(); - let next = iterator.next(); - while (next.done !== true) { - const [key, record3, hash2] = next.value; - if (last.has(key, hash2)) { - const lastAccumulation = last.get(key, hash2); - const accumulation = aggregator.merge(lastAccumulation, record3); - result.set(key, accumulation, hash2); - } else { - result.set(key, record3, hash2); - } - next = iterator.next(); - } - return result; - } - static calibrateStartTime(last, current, lastCollectionTime) { - for (const [key, hash2] of last.keys()) { - const currentAccumulation = current.get(key, hash2); - currentAccumulation?.setStartTime(lastCollectionTime); - } - return current; - } -} -function AttributesMapToAccumulationRecords(map2) { - return Array.from(map2.entries()); -} -var init_TemporalMetricProcessor = __esm(() => { - init_AggregationTemporality(); - init_HashMap(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/AsyncMetricStorage.js -var AsyncMetricStorage; -var init_AsyncMetricStorage = __esm(() => { - init_MetricStorage(); - init_DeltaMetricProcessor(); - init_TemporalMetricProcessor(); - init_HashMap(); - AsyncMetricStorage = class AsyncMetricStorage extends MetricStorage { - _aggregationCardinalityLimit; - _deltaMetricStorage; - _temporalMetricStorage; - _attributesProcessor; - constructor(_instrumentDescriptor, aggregator, attributesProcessor, collectorHandles, aggregationCardinalityLimit) { - super(_instrumentDescriptor); - this._aggregationCardinalityLimit = aggregationCardinalityLimit; - this._deltaMetricStorage = new DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit); - this._temporalMetricStorage = new TemporalMetricProcessor(aggregator, collectorHandles); - this._attributesProcessor = attributesProcessor; - } - record(measurements, observationTime) { - const processed = new AttributeHashMap; - Array.from(measurements.entries()).forEach(([attributes, value]) => { - processed.set(this._attributesProcessor.process(attributes), value); - }); - this._deltaMetricStorage.batchCumulate(processed, observationTime); - } - collect(collector, collectionTime) { - const accumulations = this._deltaMetricStorage.collect(); - return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/RegistrationConflicts.js -function getIncompatibilityDetails(existing, otherDescriptor) { - let incompatibility = ""; - if (existing.unit !== otherDescriptor.unit) { - incompatibility += ` - Unit '${existing.unit}' does not match '${otherDescriptor.unit}' -`; - } - if (existing.type !== otherDescriptor.type) { - incompatibility += ` - Type '${existing.type}' does not match '${otherDescriptor.type}' -`; - } - if (existing.valueType !== otherDescriptor.valueType) { - incompatibility += ` - Value Type '${existing.valueType}' does not match '${otherDescriptor.valueType}' -`; - } - if (existing.description !== otherDescriptor.description) { - incompatibility += ` - Description '${existing.description}' does not match '${otherDescriptor.description}' -`; - } - return incompatibility; -} -function getValueTypeConflictResolutionRecipe(existing, otherDescriptor) { - return ` - use valueType '${existing.valueType}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`; -} -function getUnitConflictResolutionRecipe(existing, otherDescriptor) { - return ` - use unit '${existing.unit}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`; -} -function getTypeConflictResolutionRecipe(existing, otherDescriptor) { - const selector = { - name: otherDescriptor.name, - type: otherDescriptor.type, - unit: otherDescriptor.unit - }; - const selectorString = JSON.stringify(selector); - return ` - create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}'`; -} -function getDescriptionResolutionRecipe(existing, otherDescriptor) { - const selector = { - name: otherDescriptor.name, - type: otherDescriptor.type, - unit: otherDescriptor.unit - }; - const selectorString = JSON.stringify(selector); - return ` - create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}' - - OR - create a new view with the name ${existing.name} and description '${existing.description}' and InstrumentSelector ${selectorString} - - OR - create a new view with the name ${otherDescriptor.name} and description '${existing.description}' and InstrumentSelector ${selectorString}`; -} -function getConflictResolutionRecipe(existing, otherDescriptor) { - if (existing.valueType !== otherDescriptor.valueType) { - return getValueTypeConflictResolutionRecipe(existing, otherDescriptor); - } - if (existing.unit !== otherDescriptor.unit) { - return getUnitConflictResolutionRecipe(existing, otherDescriptor); - } - if (existing.type !== otherDescriptor.type) { - return getTypeConflictResolutionRecipe(existing, otherDescriptor); - } - if (existing.description !== otherDescriptor.description) { - return getDescriptionResolutionRecipe(existing, otherDescriptor); - } - return ""; -} - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricStorageRegistry.js -class MetricStorageRegistry { - _sharedRegistry = new Map; - _perCollectorRegistry = new Map; - static create() { - return new MetricStorageRegistry; - } - getStorages(collector) { - let storages = []; - for (const metricStorages of this._sharedRegistry.values()) { - storages = storages.concat(metricStorages); - } - const perCollectorStorages = this._perCollectorRegistry.get(collector); - if (perCollectorStorages != null) { - for (const metricStorages of perCollectorStorages.values()) { - storages = storages.concat(metricStorages); - } - } - return storages; - } - register(storage) { - this._registerStorage(storage, this._sharedRegistry); - } - registerForCollector(collector, storage) { - let storageMap = this._perCollectorRegistry.get(collector); - if (storageMap == null) { - storageMap = new Map; - this._perCollectorRegistry.set(collector, storageMap); - } - this._registerStorage(storage, storageMap); - } - findOrUpdateCompatibleStorage(expectedDescriptor) { - const storages = this._sharedRegistry.get(expectedDescriptor.name); - if (storages === undefined) { - return null; - } - return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages); - } - findOrUpdateCompatibleCollectorStorage(collector, expectedDescriptor) { - const storageMap = this._perCollectorRegistry.get(collector); - if (storageMap === undefined) { - return null; - } - const storages = storageMap.get(expectedDescriptor.name); - if (storages === undefined) { - return null; - } - return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages); - } - _registerStorage(storage, storageMap) { - const descriptor = storage.getInstrumentDescriptor(); - const storages = storageMap.get(descriptor.name); - if (storages === undefined) { - storageMap.set(descriptor.name, [storage]); - return; - } - storages.push(storage); - } - _findOrUpdateCompatibleStorage(expectedDescriptor, existingStorages) { - let compatibleStorage = null; - for (const existingStorage of existingStorages) { - const existingDescriptor = existingStorage.getInstrumentDescriptor(); - if (isDescriptorCompatibleWith(existingDescriptor, expectedDescriptor)) { - if (existingDescriptor.description !== expectedDescriptor.description) { - if (expectedDescriptor.description.length > existingDescriptor.description.length) { - existingStorage.updateDescription(expectedDescriptor.description); - } - api7.diag.warn("A view or instrument with the name ", expectedDescriptor.name, ` has already been registered, but has a different description and is incompatible with another registered view. -`, `Details: -`, getIncompatibilityDetails(existingDescriptor, expectedDescriptor), `The longer description will be used. -To resolve the conflict:`, getConflictResolutionRecipe(existingDescriptor, expectedDescriptor)); - } - compatibleStorage = existingStorage; - } else { - api7.diag.warn("A view or instrument with the name ", expectedDescriptor.name, ` has already been registered and is incompatible with another registered view. -`, `Details: -`, getIncompatibilityDetails(existingDescriptor, expectedDescriptor), `To resolve the conflict: -`, getConflictResolutionRecipe(existingDescriptor, expectedDescriptor)); - } - } - return compatibleStorage; - } -} -var api7; -var init_MetricStorageRegistry = __esm(() => { - init_InstrumentDescriptor(); - api7 = __toESM(require_src(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/MultiWritableMetricStorage.js -class MultiMetricStorage { - _backingStorages; - constructor(backingStorages) { - this._backingStorages = backingStorages; - } - record(value, attributes, context8, recordTime) { - this._backingStorages.forEach((it) => { - it.record(value, attributes, context8, recordTime); - }); - } -} - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/ObservableResult.js -class ObservableResultImpl { - _buffer = new AttributeHashMap; - _instrumentName; - _valueType; - constructor(instrumentName, valueType) { - this._instrumentName = instrumentName; - this._valueType = valueType; - } - observe(value, attributes = {}) { - if (typeof value !== "number") { - import_api38.diag.warn(`non-number value provided to metric ${this._instrumentName}: ${value}`); - return; - } - if (this._valueType === import_api38.ValueType.INT && !Number.isInteger(value)) { - import_api38.diag.warn(`INT value type cannot accept a floating-point value for ${this._instrumentName}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - this._buffer.set(attributes, value); - } -} - -class BatchObservableResultImpl { - _buffer = new Map; - observe(metric, value, attributes = {}) { - if (!isObservableInstrument(metric)) { - return; - } - let map2 = this._buffer.get(metric); - if (map2 == null) { - map2 = new AttributeHashMap; - this._buffer.set(metric, map2); - } - if (typeof value !== "number") { - import_api38.diag.warn(`non-number value provided to metric ${metric._descriptor.name}: ${value}`); - return; - } - if (metric._descriptor.valueType === import_api38.ValueType.INT && !Number.isInteger(value)) { - import_api38.diag.warn(`INT value type cannot accept a floating-point value for ${metric._descriptor.name}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - map2.set(attributes, value); - } -} -var import_api38; -var init_ObservableResult = __esm(() => { - init_HashMap(); - init_Instruments(); - import_api38 = __toESM(require_src(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/ObservableRegistry.js -class ObservableRegistry { - _callbacks = []; - _batchCallbacks = []; - addCallback(callback, instrument) { - const idx = this._findCallback(callback, instrument); - if (idx >= 0) { - return; - } - this._callbacks.push({ callback, instrument }); - } - removeCallback(callback, instrument) { - const idx = this._findCallback(callback, instrument); - if (idx < 0) { - return; - } - this._callbacks.splice(idx, 1); - } - addBatchCallback(callback, instruments) { - const observableInstruments = new Set(instruments.filter(isObservableInstrument)); - if (observableInstruments.size === 0) { - import_api39.diag.error("BatchObservableCallback is not associated with valid instruments", instruments); - return; - } - const idx = this._findBatchCallback(callback, observableInstruments); - if (idx >= 0) { - return; - } - this._batchCallbacks.push({ callback, instruments: observableInstruments }); - } - removeBatchCallback(callback, instruments) { - const observableInstruments = new Set(instruments.filter(isObservableInstrument)); - const idx = this._findBatchCallback(callback, observableInstruments); - if (idx < 0) { - return; - } - this._batchCallbacks.splice(idx, 1); - } - async observe(collectionTime, timeoutMillis) { - const callbackFutures = this._observeCallbacks(collectionTime, timeoutMillis); - const batchCallbackFutures = this._observeBatchCallbacks(collectionTime, timeoutMillis); - const results = await PromiseAllSettled([ - ...callbackFutures, - ...batchCallbackFutures - ]); - const rejections = results.filter(isPromiseAllSettledRejectionResult).map((it) => it.reason); - return rejections; - } - _observeCallbacks(observationTime, timeoutMillis) { - return this._callbacks.map(async ({ callback, instrument }) => { - const observableResult = new ObservableResultImpl(instrument._descriptor.name, instrument._descriptor.valueType); - let callPromise = Promise.resolve(callback(observableResult)); - if (timeoutMillis != null) { - callPromise = callWithTimeout(callPromise, timeoutMillis); - } - await callPromise; - instrument._metricStorages.forEach((metricStorage) => { - metricStorage.record(observableResult._buffer, observationTime); - }); - }); - } - _observeBatchCallbacks(observationTime, timeoutMillis) { - return this._batchCallbacks.map(async ({ callback, instruments }) => { - const observableResult = new BatchObservableResultImpl; - let callPromise = Promise.resolve(callback(observableResult)); - if (timeoutMillis != null) { - callPromise = callWithTimeout(callPromise, timeoutMillis); - } - await callPromise; - instruments.forEach((instrument) => { - const buffer = observableResult._buffer.get(instrument); - if (buffer == null) { - return; - } - instrument._metricStorages.forEach((metricStorage) => { - metricStorage.record(buffer, observationTime); - }); - }); - }); - } - _findCallback(callback, instrument) { - return this._callbacks.findIndex((record3) => { - return record3.callback === callback && record3.instrument === instrument; - }); - } - _findBatchCallback(callback, instruments) { - return this._batchCallbacks.findIndex((record3) => { - return record3.callback === callback && setEquals(record3.instruments, instruments); - }); - } -} -var import_api39; -var init_ObservableRegistry = __esm(() => { - init_Instruments(); - init_ObservableResult(); - init_utils2(); - import_api39 = __toESM(require_src(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/SyncMetricStorage.js -var SyncMetricStorage; -var init_SyncMetricStorage = __esm(() => { - init_MetricStorage(); - init_DeltaMetricProcessor(); - init_TemporalMetricProcessor(); - SyncMetricStorage = class SyncMetricStorage extends MetricStorage { - _aggregationCardinalityLimit; - _deltaMetricStorage; - _temporalMetricStorage; - _attributesProcessor; - constructor(instrumentDescriptor, aggregator, attributesProcessor, collectorHandles, aggregationCardinalityLimit) { - super(instrumentDescriptor); - this._aggregationCardinalityLimit = aggregationCardinalityLimit; - this._deltaMetricStorage = new DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit); - this._temporalMetricStorage = new TemporalMetricProcessor(aggregator, collectorHandles); - this._attributesProcessor = attributesProcessor; - } - record(value, attributes, context8, recordTime) { - attributes = this._attributesProcessor.process(attributes, context8); - this._deltaMetricStorage.record(value, attributes, context8, recordTime); - } - collect(collector, collectionTime) { - const accumulations = this._deltaMetricStorage.collect(); - return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/AttributesProcessor.js -class NoopAttributesProcessor { - process(incoming, _context) { - return incoming; - } -} - -class MultiAttributesProcessor { - _processors; - constructor(processors) { - this._processors = processors; - } - process(incoming, context8) { - let filteredAttributes = incoming; - for (const processor of this._processors) { - filteredAttributes = processor.process(filteredAttributes, context8); - } - return filteredAttributes; - } -} -function createNoopAttributesProcessor() { - return NOOP; -} -function createMultiAttributesProcessor(processors) { - return new MultiAttributesProcessor(processors); -} -var NOOP; -var init_AttributesProcessor = __esm(() => { - NOOP = new NoopAttributesProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/MeterSharedState.js -class MeterSharedState { - metricStorageRegistry = new MetricStorageRegistry; - observableRegistry = new ObservableRegistry; - meter; - _meterProviderSharedState; - _instrumentationScope; - constructor(meterProviderSharedState, instrumentationScope) { - this.meter = new Meter(this); - this._meterProviderSharedState = meterProviderSharedState; - this._instrumentationScope = instrumentationScope; - } - registerMetricStorage(descriptor) { - const storages = this._registerMetricStorage(descriptor, SyncMetricStorage); - if (storages.length === 1) { - return storages[0]; - } - return new MultiMetricStorage(storages); - } - registerAsyncMetricStorage(descriptor) { - const storages = this._registerMetricStorage(descriptor, AsyncMetricStorage); - return storages; - } - async collect(collector, collectionTime, options) { - const errors3 = await this.observableRegistry.observe(collectionTime, options?.timeoutMillis); - const storages = this.metricStorageRegistry.getStorages(collector); - if (storages.length === 0) { - return null; - } - const metricDataList = []; - storages.forEach((metricStorage) => { - const metricData = metricStorage.collect(collector, collectionTime); - if (metricData != null) { - metricDataList.push(metricData); - } - }); - if (metricDataList.length === 0) { - return { errors: errors3 }; - } - return { - scopeMetrics: { - scope: this._instrumentationScope, - metrics: metricDataList - }, - errors: errors3 - }; - } - _registerMetricStorage(descriptor, MetricStorageType) { - const views = this._meterProviderSharedState.viewRegistry.findViews(descriptor, this._instrumentationScope); - let storages = views.map((view) => { - const viewDescriptor = createInstrumentDescriptorWithView(view, descriptor); - const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleStorage(viewDescriptor); - if (compatibleStorage != null) { - return compatibleStorage; - } - const aggregator = view.aggregation.createAggregator(viewDescriptor); - const viewStorage = new MetricStorageType(viewDescriptor, aggregator, view.attributesProcessor, this._meterProviderSharedState.metricCollectors, view.aggregationCardinalityLimit); - this.metricStorageRegistry.register(viewStorage); - return viewStorage; - }); - if (storages.length === 0) { - const perCollectorAggregations = this._meterProviderSharedState.selectAggregations(descriptor.type); - const collectorStorages = perCollectorAggregations.map(([collector, aggregation]) => { - const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleCollectorStorage(collector, descriptor); - if (compatibleStorage != null) { - return compatibleStorage; - } - const aggregator = aggregation.createAggregator(descriptor); - const cardinalityLimit = collector.selectCardinalityLimit(descriptor.type); - const storage = new MetricStorageType(descriptor, aggregator, createNoopAttributesProcessor(), [collector], cardinalityLimit); - this.metricStorageRegistry.registerForCollector(collector, storage); - return storage; - }); - storages = storages.concat(collectorStorages); - } - return storages; - } -} -var init_MeterSharedState = __esm(() => { - init_InstrumentDescriptor(); - init_Meter(); - init_AsyncMetricStorage(); - init_MetricStorageRegistry(); - init_ObservableRegistry(); - init_SyncMetricStorage(); - init_AttributesProcessor(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/MeterProviderSharedState.js -class MeterProviderSharedState { - viewRegistry = new ViewRegistry; - metricCollectors = []; - meterSharedStates = new Map; - resource; - constructor(resource) { - this.resource = resource; - } - getMeterSharedState(instrumentationScope) { - const id = instrumentationScopeId(instrumentationScope); - let meterSharedState = this.meterSharedStates.get(id); - if (meterSharedState == null) { - meterSharedState = new MeterSharedState(this, instrumentationScope); - this.meterSharedStates.set(id, meterSharedState); - } - return meterSharedState; - } - selectAggregations(instrumentType) { - const result = []; - for (const collector of this.metricCollectors) { - result.push([ - collector, - toAggregation(collector.selectAggregation(instrumentType)) - ]); - } - return result; - } -} -var init_MeterProviderSharedState = __esm(() => { - init_utils2(); - init_MeterSharedState(); - init_AggregationOption(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricCollector.js -class MetricCollector { - _sharedState; - _metricReader; - constructor(sharedState, metricReader) { - this._sharedState = sharedState; - this._metricReader = metricReader; - } - async collect(options) { - const collectionTime = import_core25.millisToHrTime(Date.now()); - const scopeMetrics = []; - const errors3 = []; - const meterCollectionPromises = Array.from(this._sharedState.meterSharedStates.values()).map(async (meterSharedState) => { - const current = await meterSharedState.collect(this, collectionTime, options); - if (current?.scopeMetrics != null) { - scopeMetrics.push(current.scopeMetrics); - } - if (current?.errors != null) { - errors3.push(...current.errors); - } - }); - await Promise.all(meterCollectionPromises); - return { - resourceMetrics: { - resource: this._sharedState.resource, - scopeMetrics - }, - errors: errors3 - }; - } - async forceFlush(options) { - await this._metricReader.forceFlush(options); - } - async shutdown(options) { - await this._metricReader.shutdown(options); - } - selectAggregationTemporality(instrumentType) { - return this._metricReader.selectAggregationTemporality(instrumentType); - } - selectAggregation(instrumentType) { - return this._metricReader.selectAggregation(instrumentType); - } - selectCardinalityLimit(instrumentType) { - return this._metricReader.selectCardinalityLimit?.(instrumentType) ?? 2000; - } -} -var import_core25; -var init_MetricCollector = __esm(() => { - import_core25 = __toESM(require_src4(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/Predicate.js -class PatternPredicate { - _matchAll; - _regexp; - constructor(pattern) { - if (pattern === "*") { - this._matchAll = true; - this._regexp = /.*/; - } else { - this._matchAll = false; - this._regexp = new RegExp(PatternPredicate.escapePattern(pattern)); - } - } - match(str) { - if (this._matchAll) { - return true; - } - return this._regexp.test(str); - } - static escapePattern(pattern) { - return `^${pattern.replace(ESCAPE, "\\$&").replace("*", ".*")}$`; - } - static hasWildcard(pattern) { - return pattern.includes("*"); - } -} - -class ExactPredicate { - _matchAll; - _pattern; - constructor(pattern) { - this._matchAll = pattern === undefined; - this._pattern = pattern; - } - match(str) { - if (this._matchAll) { - return true; - } - if (str === this._pattern) { - return true; - } - return false; - } -} -var ESCAPE; -var init_Predicate = __esm(() => { - ESCAPE = /[\^$\\.+?()[\]{}|]/g; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/InstrumentSelector.js -class InstrumentSelector { - _nameFilter; - _type; - _unitFilter; - constructor(criteria) { - this._nameFilter = new PatternPredicate(criteria?.name ?? "*"); - this._type = criteria?.type; - this._unitFilter = new ExactPredicate(criteria?.unit); - } - getType() { - return this._type; - } - getNameFilter() { - return this._nameFilter; - } - getUnitFilter() { - return this._unitFilter; - } -} -var init_InstrumentSelector = __esm(() => { - init_Predicate(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/MeterSelector.js -class MeterSelector { - _nameFilter; - _versionFilter; - _schemaUrlFilter; - constructor(criteria) { - this._nameFilter = new ExactPredicate(criteria?.name); - this._versionFilter = new ExactPredicate(criteria?.version); - this._schemaUrlFilter = new ExactPredicate(criteria?.schemaUrl); - } - getNameFilter() { - return this._nameFilter; - } - getVersionFilter() { - return this._versionFilter; - } - getSchemaUrlFilter() { - return this._schemaUrlFilter; - } -} -var init_MeterSelector = __esm(() => { - init_Predicate(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/view/View.js -function isSelectorNotProvided(options) { - return options.instrumentName == null && options.instrumentType == null && options.instrumentUnit == null && options.meterName == null && options.meterVersion == null && options.meterSchemaUrl == null; -} -function validateViewOptions(viewOptions) { - if (isSelectorNotProvided(viewOptions)) { - throw new Error("Cannot create view with no selector arguments supplied"); - } - if (viewOptions.name != null && (viewOptions?.instrumentName == null || PatternPredicate.hasWildcard(viewOptions.instrumentName))) { - throw new Error("Views with a specified name must be declared with an instrument selector that selects at most one instrument per meter."); - } -} - -class View { - name; - description; - aggregation; - attributesProcessor; - instrumentSelector; - meterSelector; - aggregationCardinalityLimit; - constructor(viewOptions) { - validateViewOptions(viewOptions); - if (viewOptions.attributesProcessors != null) { - this.attributesProcessor = createMultiAttributesProcessor(viewOptions.attributesProcessors); - } else { - this.attributesProcessor = createNoopAttributesProcessor(); - } - this.name = viewOptions.name; - this.description = viewOptions.description; - this.aggregation = toAggregation(viewOptions.aggregation ?? { type: AggregationType.DEFAULT }); - this.instrumentSelector = new InstrumentSelector({ - name: viewOptions.instrumentName, - type: viewOptions.instrumentType, - unit: viewOptions.instrumentUnit - }); - this.meterSelector = new MeterSelector({ - name: viewOptions.meterName, - version: viewOptions.meterVersion, - schemaUrl: viewOptions.meterSchemaUrl - }); - this.aggregationCardinalityLimit = viewOptions.aggregationCardinalityLimit; - } -} -var init_View = __esm(() => { - init_Predicate(); - init_AttributesProcessor(); - init_InstrumentSelector(); - init_MeterSelector(); - init_AggregationOption(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/MeterProvider.js -class MeterProvider { - _sharedState; - _shutdown = false; - constructor(options) { - this._sharedState = new MeterProviderSharedState(options?.resource ?? import_resources.defaultResource()); - if (options?.views != null && options.views.length > 0) { - for (const viewOption of options.views) { - this._sharedState.viewRegistry.addView(new View(viewOption)); - } - } - if (options?.readers != null && options.readers.length > 0) { - for (const metricReader of options.readers) { - const collector = new MetricCollector(this._sharedState, metricReader); - metricReader.setMetricProducer(collector); - this._sharedState.metricCollectors.push(collector); - } - } - } - getMeter(name, version2 = "", options = {}) { - if (this._shutdown) { - import_api40.diag.warn("A shutdown MeterProvider cannot provide a Meter"); - return import_api40.createNoopMeter(); - } - return this._sharedState.getMeterSharedState({ - name, - version: version2, - schemaUrl: options.schemaUrl - }).meter; - } - async shutdown(options) { - if (this._shutdown) { - import_api40.diag.warn("shutdown may only be called once per MeterProvider"); - return; - } - this._shutdown = true; - await Promise.all(this._sharedState.metricCollectors.map((collector) => { - return collector.shutdown(options); - })); - } - async forceFlush(options) { - if (this._shutdown) { - import_api40.diag.warn("invalid attempt to force flush after MeterProvider shutdown"); - return; - } - await Promise.all(this._sharedState.metricCollectors.map((collector) => { - return collector.forceFlush(options); - })); - } -} -var import_api40, import_resources; -var init_MeterProvider = __esm(() => { - init_MeterProviderSharedState(); - init_MetricCollector(); - init_View(); - import_api40 = __toESM(require_src(), 1); - import_resources = __toESM(require_src5(), 1); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.3.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/esm/index.js -var init_esm2 = __esm(() => { - init_AggregationTemporality(); - init_PeriodicExportingMetricReader(); - init_MeterProvider(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/AbstractAsyncHooksContextManager.js -var require_AbstractAsyncHooksContextManager = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AbstractAsyncHooksContextManager = undefined; - var events_1 = __require("events"); - var ADD_LISTENER_METHODS = [ - "addListener", - "on", - "once", - "prependListener", - "prependOnceListener" - ]; - - class AbstractAsyncHooksContextManager { - bind(context8, target) { - if (target instanceof events_1.EventEmitter) { - return this._bindEventEmitter(context8, target); - } - if (typeof target === "function") { - return this._bindFunction(context8, target); - } - return target; - } - _bindFunction(context8, target) { - const manager = this; - const contextWrapper = function(...args) { - return manager.with(context8, () => target.apply(this, args)); - }; - Object.defineProperty(contextWrapper, "length", { - enumerable: false, - configurable: true, - writable: false, - value: target.length - }); - return contextWrapper; - } - _bindEventEmitter(context8, ee) { - const map2 = this._getPatchMap(ee); - if (map2 !== undefined) - return ee; - this._createPatchMap(ee); - ADD_LISTENER_METHODS.forEach((methodName) => { - if (ee[methodName] === undefined) - return; - ee[methodName] = this._patchAddListener(ee, ee[methodName], context8); - }); - if (typeof ee.removeListener === "function") { - ee.removeListener = this._patchRemoveListener(ee, ee.removeListener); - } - if (typeof ee.off === "function") { - ee.off = this._patchRemoveListener(ee, ee.off); - } - if (typeof ee.removeAllListeners === "function") { - ee.removeAllListeners = this._patchRemoveAllListeners(ee, ee.removeAllListeners); - } - return ee; - } - _patchRemoveListener(ee, original) { - const contextManager = this; - return function(event, listener) { - const events = contextManager._getPatchMap(ee)?.[event]; - if (events === undefined) { - return original.call(this, event, listener); - } - const patchedListener = events.get(listener); - return original.call(this, event, patchedListener || listener); - }; - } - _patchRemoveAllListeners(ee, original) { - const contextManager = this; - return function(event) { - const map2 = contextManager._getPatchMap(ee); - if (map2 !== undefined) { - if (arguments.length === 0) { - contextManager._createPatchMap(ee); - } else if (map2[event] !== undefined) { - delete map2[event]; - } - } - return original.apply(this, arguments); - }; - } - _patchAddListener(ee, original, context8) { - const contextManager = this; - return function(event, listener) { - if (contextManager._wrapped) { - return original.call(this, event, listener); - } - let map2 = contextManager._getPatchMap(ee); - if (map2 === undefined) { - map2 = contextManager._createPatchMap(ee); - } - let listeners = map2[event]; - if (listeners === undefined) { - listeners = new WeakMap; - map2[event] = listeners; - } - const patchedListener = contextManager.bind(context8, listener); - listeners.set(listener, patchedListener); - contextManager._wrapped = true; - try { - return original.call(this, event, patchedListener); - } finally { - contextManager._wrapped = false; - } - }; - } - _createPatchMap(ee) { - const map2 = Object.create(null); - ee[this._kOtListeners] = map2; - return map2; - } - _getPatchMap(ee) { - return ee[this._kOtListeners]; - } - _kOtListeners = Symbol("OtListeners"); - _wrapped = false; - } - exports.AbstractAsyncHooksContextManager = AbstractAsyncHooksContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncHooksContextManager.js -var require_AsyncHooksContextManager = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncHooksContextManager = undefined; - var api_1 = require_src(); - var asyncHooks = __require("async_hooks"); - var AbstractAsyncHooksContextManager_1 = require_AbstractAsyncHooksContextManager(); - - class AsyncHooksContextManager extends AbstractAsyncHooksContextManager_1.AbstractAsyncHooksContextManager { - _asyncHook; - _contexts = new Map; - _stack = []; - constructor() { - super(); - this._asyncHook = asyncHooks.createHook({ - init: this._init.bind(this), - before: this._before.bind(this), - after: this._after.bind(this), - destroy: this._destroy.bind(this), - promiseResolve: this._destroy.bind(this) - }); - } - active() { - return this._stack[this._stack.length - 1] ?? api_1.ROOT_CONTEXT; - } - with(context8, fn, thisArg, ...args) { - this._enterContext(context8); - try { - return fn.call(thisArg, ...args); - } finally { - this._exitContext(); - } - } - enable() { - this._asyncHook.enable(); - return this; - } - disable() { - this._asyncHook.disable(); - this._contexts.clear(); - this._stack = []; - return this; - } - _init(uid, type) { - if (type === "TIMERWRAP") - return; - const context8 = this._stack[this._stack.length - 1]; - if (context8 !== undefined) { - this._contexts.set(uid, context8); - } - } - _destroy(uid) { - this._contexts.delete(uid); - } - _before(uid) { - const context8 = this._contexts.get(uid); - if (context8 !== undefined) { - this._enterContext(context8); - } - } - _after() { - this._exitContext(); - } - _enterContext(context8) { - this._stack.push(context8); - } - _exitContext() { - this._stack.pop(); - } - } - exports.AsyncHooksContextManager = AsyncHooksContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncLocalStorageContextManager.js -var require_AsyncLocalStorageContextManager = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncLocalStorageContextManager = undefined; - var api_1 = require_src(); - var async_hooks_1 = __require("async_hooks"); - var AbstractAsyncHooksContextManager_1 = require_AbstractAsyncHooksContextManager(); - - class AsyncLocalStorageContextManager extends AbstractAsyncHooksContextManager_1.AbstractAsyncHooksContextManager { - _asyncLocalStorage; - constructor() { - super(); - this._asyncLocalStorage = new async_hooks_1.AsyncLocalStorage; - } - active() { - return this._asyncLocalStorage.getStore() ?? api_1.ROOT_CONTEXT; - } - with(context8, fn, thisArg, ...args) { - const cb = thisArg == null ? fn : fn.bind(thisArg); - return this._asyncLocalStorage.run(context8, cb, ...args); - } - enable() { - return this; - } - disable() { - this._asyncLocalStorage.disable(); - return this; - } - } - exports.AsyncLocalStorageContextManager = AsyncLocalStorageContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/index.js -var require_src71 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncLocalStorageContextManager = exports.AsyncHooksContextManager = undefined; - var AsyncHooksContextManager_1 = require_AsyncHooksContextManager(); - Object.defineProperty(exports, "AsyncHooksContextManager", { enumerable: true, get: function() { - return AsyncHooksContextManager_1.AsyncHooksContextManager; - } }); - var AsyncLocalStorageContextManager_1 = require_AsyncLocalStorageContextManager(); - Object.defineProperty(exports, "AsyncLocalStorageContextManager", { enumerable: true, get: function() { - return AsyncLocalStorageContextManager_1.AsyncLocalStorageContextManager; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/enums.js -var require_enums3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExceptionEventName = undefined; - exports.ExceptionEventName = "exception"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/Span.js -var require_Span = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanImpl = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var semantic_conventions_1 = require_src3(); - var enums_1 = require_enums3(); - - class SpanImpl { - _spanContext; - kind; - parentSpanContext; - attributes = {}; - links = []; - events = []; - startTime; - resource; - instrumentationScope; - _droppedAttributesCount = 0; - _droppedEventsCount = 0; - _droppedLinksCount = 0; - name; - status = { - code: api_1.SpanStatusCode.UNSET - }; - endTime = [0, 0]; - _ended = false; - _duration = [-1, -1]; - _spanProcessor; - _spanLimits; - _attributeValueLengthLimit; - _performanceStartTime; - _performanceOffset; - _startTimeProvided; - constructor(opts) { - const now2 = Date.now(); - this._spanContext = opts.spanContext; - this._performanceStartTime = core_1.otperformance.now(); - this._performanceOffset = now2 - (this._performanceStartTime + (0, core_1.getTimeOrigin)()); - this._startTimeProvided = opts.startTime != null; - this._spanLimits = opts.spanLimits; - this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0; - this._spanProcessor = opts.spanProcessor; - this.name = opts.name; - this.parentSpanContext = opts.parentSpanContext; - this.kind = opts.kind; - this.links = opts.links || []; - this.startTime = this._getTime(opts.startTime ?? now2); - this.resource = opts.resource; - this.instrumentationScope = opts.scope; - if (opts.attributes != null) { - this.setAttributes(opts.attributes); - } - this._spanProcessor.onStart(this, opts.context); - } - spanContext() { - return this._spanContext; - } - setAttribute(key, value) { - if (value == null || this._isSpanEnded()) - return this; - if (key.length === 0) { - api_1.diag.warn(`Invalid attribute key: ${key}`); - return this; - } - if (!(0, core_1.isAttributeValue)(value)) { - api_1.diag.warn(`Invalid attribute value set for key: ${key}`); - return this; - } - const { attributeCountLimit } = this._spanLimits; - if (attributeCountLimit !== undefined && Object.keys(this.attributes).length >= attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, key)) { - this._droppedAttributesCount++; - return this; - } - this.attributes[key] = this._truncateToSize(value); - return this; - } - setAttributes(attributes) { - for (const [k, v] of Object.entries(attributes)) { - this.setAttribute(k, v); - } - return this; - } - addEvent(name, attributesOrStartTime, timeStamp) { - if (this._isSpanEnded()) - return this; - const { eventCountLimit } = this._spanLimits; - if (eventCountLimit === 0) { - api_1.diag.warn("No events allowed."); - this._droppedEventsCount++; - return this; - } - if (eventCountLimit !== undefined && this.events.length >= eventCountLimit) { - if (this._droppedEventsCount === 0) { - api_1.diag.debug("Dropping extra events."); - } - this.events.shift(); - this._droppedEventsCount++; - } - if ((0, core_1.isTimeInput)(attributesOrStartTime)) { - if (!(0, core_1.isTimeInput)(timeStamp)) { - timeStamp = attributesOrStartTime; - } - attributesOrStartTime = undefined; - } - const attributes = (0, core_1.sanitizeAttributes)(attributesOrStartTime); - this.events.push({ - name, - attributes, - time: this._getTime(timeStamp), - droppedAttributesCount: 0 - }); - return this; - } - addLink(link) { - this.links.push(link); - return this; - } - addLinks(links) { - this.links.push(...links); - return this; - } - setStatus(status) { - if (this._isSpanEnded()) - return this; - this.status = { ...status }; - if (this.status.message != null && typeof status.message !== "string") { - api_1.diag.warn(`Dropping invalid status.message of type '${typeof status.message}', expected 'string'`); - delete this.status.message; - } - return this; - } - updateName(name) { - if (this._isSpanEnded()) - return this; - this.name = name; - return this; - } - end(endTime) { - if (this._isSpanEnded()) { - api_1.diag.error(`${this.name} ${this._spanContext.traceId}-${this._spanContext.spanId} - You can only call end() on a span once.`); - return; - } - this._ended = true; - this.endTime = this._getTime(endTime); - this._duration = (0, core_1.hrTimeDuration)(this.startTime, this.endTime); - if (this._duration[0] < 0) { - api_1.diag.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.", this.startTime, this.endTime); - this.endTime = this.startTime.slice(); - this._duration = [0, 0]; - } - if (this._droppedEventsCount > 0) { - api_1.diag.warn(`Dropped ${this._droppedEventsCount} events because eventCountLimit reached`); - } - this._spanProcessor.onEnd(this); - } - _getTime(inp) { - if (typeof inp === "number" && inp <= core_1.otperformance.now()) { - return (0, core_1.hrTime)(inp + this._performanceOffset); - } - if (typeof inp === "number") { - return (0, core_1.millisToHrTime)(inp); - } - if (inp instanceof Date) { - return (0, core_1.millisToHrTime)(inp.getTime()); - } - if ((0, core_1.isTimeInputHrTime)(inp)) { - return inp; - } - if (this._startTimeProvided) { - return (0, core_1.millisToHrTime)(Date.now()); - } - const msDuration = core_1.otperformance.now() - this._performanceStartTime; - return (0, core_1.addHrTimes)(this.startTime, (0, core_1.millisToHrTime)(msDuration)); - } - isRecording() { - return this._ended === false; - } - recordException(exception, time3) { - const attributes = {}; - if (typeof exception === "string") { - attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE] = exception; - } else if (exception) { - if (exception.code) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE] = exception.code.toString(); - } else if (exception.name) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE] = exception.name; - } - if (exception.message) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE] = exception.message; - } - if (exception.stack) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_STACKTRACE] = exception.stack; - } - } - if (attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE] || attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE]) { - this.addEvent(enums_1.ExceptionEventName, attributes, time3); - } else { - api_1.diag.warn(`Failed to record an exception ${exception}`); - } - } - get duration() { - return this._duration; - } - get ended() { - return this._ended; - } - get droppedAttributesCount() { - return this._droppedAttributesCount; - } - get droppedEventsCount() { - return this._droppedEventsCount; - } - get droppedLinksCount() { - return this._droppedLinksCount; - } - _isSpanEnded() { - if (this._ended) { - const error48 = new Error(`Operation attempted on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`); - api_1.diag.warn(`Cannot execute the operation on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`, error48); - } - return this._ended; - } - _truncateToLimitUtil(value, limit) { - if (value.length <= limit) { - return value; - } - return value.substring(0, limit); - } - _truncateToSize(value) { - const limit = this._attributeValueLengthLimit; - if (limit <= 0) { - api_1.diag.warn(`Attribute value limit must be positive, got ${limit}`); - return value; - } - if (typeof value === "string") { - return this._truncateToLimitUtil(value, limit); - } - if (Array.isArray(value)) { - return value.map((val) => typeof val === "string" ? this._truncateToLimitUtil(val, limit) : val); - } - return value; - } - } - exports.SpanImpl = SpanImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/Sampler.js -var require_Sampler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SamplingDecision = undefined; - var SamplingDecision; - (function(SamplingDecision2) { - SamplingDecision2[SamplingDecision2["NOT_RECORD"] = 0] = "NOT_RECORD"; - SamplingDecision2[SamplingDecision2["RECORD"] = 1] = "RECORD"; - SamplingDecision2[SamplingDecision2["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; - })(SamplingDecision = exports.SamplingDecision || (exports.SamplingDecision = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOffSampler.js -var require_AlwaysOffSampler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AlwaysOffSampler = undefined; - var Sampler_1 = require_Sampler(); - - class AlwaysOffSampler { - shouldSample() { - return { - decision: Sampler_1.SamplingDecision.NOT_RECORD - }; - } - toString() { - return "AlwaysOffSampler"; - } - } - exports.AlwaysOffSampler = AlwaysOffSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOnSampler.js -var require_AlwaysOnSampler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AlwaysOnSampler = undefined; - var Sampler_1 = require_Sampler(); - - class AlwaysOnSampler { - shouldSample() { - return { - decision: Sampler_1.SamplingDecision.RECORD_AND_SAMPLED - }; - } - toString() { - return "AlwaysOnSampler"; - } - } - exports.AlwaysOnSampler = AlwaysOnSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/ParentBasedSampler.js -var require_ParentBasedSampler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ParentBasedSampler = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var AlwaysOffSampler_1 = require_AlwaysOffSampler(); - var AlwaysOnSampler_1 = require_AlwaysOnSampler(); - - class ParentBasedSampler { - _root; - _remoteParentSampled; - _remoteParentNotSampled; - _localParentSampled; - _localParentNotSampled; - constructor(config2) { - this._root = config2.root; - if (!this._root) { - (0, core_1.globalErrorHandler)(new Error("ParentBasedSampler must have a root sampler configured")); - this._root = new AlwaysOnSampler_1.AlwaysOnSampler; - } - this._remoteParentSampled = config2.remoteParentSampled ?? new AlwaysOnSampler_1.AlwaysOnSampler; - this._remoteParentNotSampled = config2.remoteParentNotSampled ?? new AlwaysOffSampler_1.AlwaysOffSampler; - this._localParentSampled = config2.localParentSampled ?? new AlwaysOnSampler_1.AlwaysOnSampler; - this._localParentNotSampled = config2.localParentNotSampled ?? new AlwaysOffSampler_1.AlwaysOffSampler; - } - shouldSample(context8, traceId, spanName, spanKind, attributes, links) { - const parentContext = api_1.trace.getSpanContext(context8); - if (!parentContext || !(0, api_1.isSpanContextValid)(parentContext)) { - return this._root.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - if (parentContext.isRemote) { - if (parentContext.traceFlags & api_1.TraceFlags.SAMPLED) { - return this._remoteParentSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - return this._remoteParentNotSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - if (parentContext.traceFlags & api_1.TraceFlags.SAMPLED) { - return this._localParentSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - return this._localParentNotSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - toString() { - return `ParentBased{root=${this._root.toString()}, remoteParentSampled=${this._remoteParentSampled.toString()}, remoteParentNotSampled=${this._remoteParentNotSampled.toString()}, localParentSampled=${this._localParentSampled.toString()}, localParentNotSampled=${this._localParentNotSampled.toString()}}`; - } - } - exports.ParentBasedSampler = ParentBasedSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.js -var require_TraceIdRatioBasedSampler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceIdRatioBasedSampler = undefined; - var api_1 = require_src(); - var Sampler_1 = require_Sampler(); - - class TraceIdRatioBasedSampler { - _ratio; - _upperBound; - constructor(_ratio = 0) { - this._ratio = _ratio; - this._ratio = this._normalize(_ratio); - this._upperBound = Math.floor(this._ratio * 4294967295); - } - shouldSample(context8, traceId) { - return { - decision: (0, api_1.isValidTraceId)(traceId) && this._accumulate(traceId) < this._upperBound ? Sampler_1.SamplingDecision.RECORD_AND_SAMPLED : Sampler_1.SamplingDecision.NOT_RECORD - }; - } - toString() { - return `TraceIdRatioBased{${this._ratio}}`; - } - _normalize(ratio) { - if (typeof ratio !== "number" || isNaN(ratio)) - return 0; - return ratio >= 1 ? 1 : ratio <= 0 ? 0 : ratio; - } - _accumulate(traceId) { - let accumulation = 0; - for (let i = 0;i < traceId.length / 8; i++) { - const pos = i * 8; - const part = parseInt(traceId.slice(pos, pos + 8), 16); - accumulation = (accumulation ^ part) >>> 0; - } - return accumulation; - } - } - exports.TraceIdRatioBasedSampler = TraceIdRatioBasedSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/config.js -var require_config2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.buildSamplerFromEnv = exports.loadDefaultConfig = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var AlwaysOffSampler_1 = require_AlwaysOffSampler(); - var AlwaysOnSampler_1 = require_AlwaysOnSampler(); - var ParentBasedSampler_1 = require_ParentBasedSampler(); - var TraceIdRatioBasedSampler_1 = require_TraceIdRatioBasedSampler(); - var TracesSamplerValues; - (function(TracesSamplerValues2) { - TracesSamplerValues2["AlwaysOff"] = "always_off"; - TracesSamplerValues2["AlwaysOn"] = "always_on"; - TracesSamplerValues2["ParentBasedAlwaysOff"] = "parentbased_always_off"; - TracesSamplerValues2["ParentBasedAlwaysOn"] = "parentbased_always_on"; - TracesSamplerValues2["ParentBasedTraceIdRatio"] = "parentbased_traceidratio"; - TracesSamplerValues2["TraceIdRatio"] = "traceidratio"; - })(TracesSamplerValues || (TracesSamplerValues = {})); - var DEFAULT_RATIO = 1; - function loadDefaultConfig() { - return { - sampler: buildSamplerFromEnv(), - forceFlushTimeoutMillis: 30000, - generalLimits: { - attributeValueLengthLimit: (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity, - attributeCountLimit: (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_COUNT_LIMIT") ?? 128 - }, - spanLimits: { - attributeValueLengthLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity, - attributeCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT") ?? 128, - linkCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_LINK_COUNT_LIMIT") ?? 128, - eventCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_EVENT_COUNT_LIMIT") ?? 128, - attributePerEventCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT") ?? 128, - attributePerLinkCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT") ?? 128 - } - }; - } - exports.loadDefaultConfig = loadDefaultConfig; - function buildSamplerFromEnv() { - const sampler = (0, core_1.getStringFromEnv)("OTEL_TRACES_SAMPLER") ?? TracesSamplerValues.ParentBasedAlwaysOn; - switch (sampler) { - case TracesSamplerValues.AlwaysOn: - return new AlwaysOnSampler_1.AlwaysOnSampler; - case TracesSamplerValues.AlwaysOff: - return new AlwaysOffSampler_1.AlwaysOffSampler; - case TracesSamplerValues.ParentBasedAlwaysOn: - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new AlwaysOnSampler_1.AlwaysOnSampler - }); - case TracesSamplerValues.ParentBasedAlwaysOff: - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new AlwaysOffSampler_1.AlwaysOffSampler - }); - case TracesSamplerValues.TraceIdRatio: - return new TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv()); - case TracesSamplerValues.ParentBasedTraceIdRatio: - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv()) - }); - default: - api_1.diag.error(`OTEL_TRACES_SAMPLER value "${sampler}" invalid, defaulting to "${TracesSamplerValues.ParentBasedAlwaysOn}".`); - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new AlwaysOnSampler_1.AlwaysOnSampler - }); - } - } - exports.buildSamplerFromEnv = buildSamplerFromEnv; - function getSamplerProbabilityFromEnv() { - const probability = (0, core_1.getNumberFromEnv)("OTEL_TRACES_SAMPLER_ARG"); - if (probability == null) { - api_1.diag.error(`OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${DEFAULT_RATIO}.`); - return DEFAULT_RATIO; - } - if (probability < 0 || probability > 1) { - api_1.diag.error(`OTEL_TRACES_SAMPLER_ARG=${probability} was given, but it is out of range ([0..1]), defaulting to ${DEFAULT_RATIO}.`); - return DEFAULT_RATIO; - } - return probability; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/utility.js -var require_utility = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.reconfigureLimits = exports.mergeConfig = exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT = undefined; - var config_1 = require_config2(); - var core_1 = require_src7(); - exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128; - exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity; - function mergeConfig(userConfig) { - const perInstanceDefaults = { - sampler: (0, config_1.buildSamplerFromEnv)() - }; - const DEFAULT_CONFIG = (0, config_1.loadDefaultConfig)(); - const target = Object.assign({}, DEFAULT_CONFIG, perInstanceDefaults, userConfig); - target.generalLimits = Object.assign({}, DEFAULT_CONFIG.generalLimits, userConfig.generalLimits || {}); - target.spanLimits = Object.assign({}, DEFAULT_CONFIG.spanLimits, userConfig.spanLimits || {}); - return target; - } - exports.mergeConfig = mergeConfig; - function reconfigureLimits(userConfig) { - const spanLimits = Object.assign({}, userConfig.spanLimits); - spanLimits.attributeCountLimit = userConfig.spanLimits?.attributeCountLimit ?? userConfig.generalLimits?.attributeCountLimit ?? (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_COUNT_LIMIT") ?? exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT; - spanLimits.attributeValueLengthLimit = userConfig.spanLimits?.attributeValueLengthLimit ?? userConfig.generalLimits?.attributeValueLengthLimit ?? (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT; - return Object.assign({}, userConfig, { spanLimits }); - } - exports.reconfigureLimits = reconfigureLimits; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/BatchSpanProcessorBase.js -var require_BatchSpanProcessorBase = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchSpanProcessorBase = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - - class BatchSpanProcessorBase2 { - _exporter; - _maxExportBatchSize; - _maxQueueSize; - _scheduledDelayMillis; - _exportTimeoutMillis; - _isExporting = false; - _finishedSpans = []; - _timer; - _shutdownOnce; - _droppedSpansCount = 0; - constructor(_exporter, config2) { - this._exporter = _exporter; - this._maxExportBatchSize = typeof config2?.maxExportBatchSize === "number" ? config2.maxExportBatchSize : (0, core_1.getNumberFromEnv)("OTEL_BSP_MAX_EXPORT_BATCH_SIZE") ?? 512; - this._maxQueueSize = typeof config2?.maxQueueSize === "number" ? config2.maxQueueSize : (0, core_1.getNumberFromEnv)("OTEL_BSP_MAX_QUEUE_SIZE") ?? 2048; - this._scheduledDelayMillis = typeof config2?.scheduledDelayMillis === "number" ? config2.scheduledDelayMillis : (0, core_1.getNumberFromEnv)("OTEL_BSP_SCHEDULE_DELAY") ?? 5000; - this._exportTimeoutMillis = typeof config2?.exportTimeoutMillis === "number" ? config2.exportTimeoutMillis : (0, core_1.getNumberFromEnv)("OTEL_BSP_EXPORT_TIMEOUT") ?? 30000; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - if (this._maxExportBatchSize > this._maxQueueSize) { - api_1.diag.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"); - this._maxExportBatchSize = this._maxQueueSize; - } - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - return this._shutdownOnce.promise; - } - return this._flushAll(); - } - onStart(_span, _parentContext) {} - onEnd(span) { - if (this._shutdownOnce.isCalled) { - return; - } - if ((span.spanContext().traceFlags & api_1.TraceFlags.SAMPLED) === 0) { - return; - } - this._addToBuffer(span); - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return Promise.resolve().then(() => { - return this.onShutdown(); - }).then(() => { - return this._flushAll(); - }).then(() => { - return this._exporter.shutdown(); - }); - } - _addToBuffer(span) { - if (this._finishedSpans.length >= this._maxQueueSize) { - if (this._droppedSpansCount === 0) { - api_1.diag.debug("maxQueueSize reached, dropping spans"); - } - this._droppedSpansCount++; - return; - } - if (this._droppedSpansCount > 0) { - api_1.diag.warn(`Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`); - this._droppedSpansCount = 0; - } - this._finishedSpans.push(span); - this._maybeStartTimer(); - } - _flushAll() { - return new Promise((resolve2, reject) => { - const promises = []; - const count = Math.ceil(this._finishedSpans.length / this._maxExportBatchSize); - for (let i = 0, j = count;i < j; i++) { - promises.push(this._flushOneBatch()); - } - Promise.all(promises).then(() => { - resolve2(); - }).catch(reject); - }); - } - _flushOneBatch() { - this._clearTimer(); - if (this._finishedSpans.length === 0) { - return Promise.resolve(); - } - return new Promise((resolve2, reject) => { - const timer = setTimeout(() => { - reject(new Error("Timeout")); - }, this._exportTimeoutMillis); - api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => { - let spans; - if (this._finishedSpans.length <= this._maxExportBatchSize) { - spans = this._finishedSpans; - this._finishedSpans = []; - } else { - spans = this._finishedSpans.splice(0, this._maxExportBatchSize); - } - const doExport = () => this._exporter.export(spans, (result) => { - clearTimeout(timer); - if (result.code === core_1.ExportResultCode.SUCCESS) { - resolve2(); - } else { - reject(result.error ?? new Error("BatchSpanProcessor: span export failed")); - } - }); - let pendingResources = null; - for (let i = 0, len = spans.length;i < len; i++) { - const span = spans[i]; - if (span.resource.asyncAttributesPending && span.resource.waitForAsyncAttributes) { - pendingResources ??= []; - pendingResources.push(span.resource.waitForAsyncAttributes()); - } - } - if (pendingResources === null) { - doExport(); - } else { - Promise.all(pendingResources).then(doExport, (err) => { - (0, core_1.globalErrorHandler)(err); - reject(err); - }); - } - }); - }); - } - _maybeStartTimer() { - if (this._isExporting) - return; - const flush = () => { - this._isExporting = true; - this._flushOneBatch().finally(() => { - this._isExporting = false; - if (this._finishedSpans.length > 0) { - this._clearTimer(); - this._maybeStartTimer(); - } - }).catch((e) => { - this._isExporting = false; - (0, core_1.globalErrorHandler)(e); - }); - }; - if (this._finishedSpans.length >= this._maxExportBatchSize) { - return flush(); - } - if (this._timer !== undefined) - return; - this._timer = setTimeout(() => flush(), this._scheduledDelayMillis); - if (typeof this._timer !== "number") { - this._timer.unref(); - } - } - _clearTimer() { - if (this._timer !== undefined) { - clearTimeout(this._timer); - this._timer = undefined; - } - } - } - exports.BatchSpanProcessorBase = BatchSpanProcessorBase2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/export/BatchSpanProcessor.js -var require_BatchSpanProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchSpanProcessor = undefined; - var BatchSpanProcessorBase_1 = require_BatchSpanProcessorBase(); - - class BatchSpanProcessor2 extends BatchSpanProcessorBase_1.BatchSpanProcessorBase { - onShutdown() {} - } - exports.BatchSpanProcessor = BatchSpanProcessor2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/RandomIdGenerator.js -var require_RandomIdGenerator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RandomIdGenerator = undefined; - var SPAN_ID_BYTES = 8; - var TRACE_ID_BYTES = 16; - - class RandomIdGenerator2 { - generateTraceId = getIdGenerator(TRACE_ID_BYTES); - generateSpanId = getIdGenerator(SPAN_ID_BYTES); - } - exports.RandomIdGenerator = RandomIdGenerator2; - var SHARED_BUFFER = Buffer.allocUnsafe(TRACE_ID_BYTES); - function getIdGenerator(bytes) { - return function generateId() { - for (let i = 0;i < bytes / 4; i++) { - SHARED_BUFFER.writeUInt32BE(Math.random() * 2 ** 32 >>> 0, i * 4); - } - for (let i = 0;i < bytes; i++) { - if (SHARED_BUFFER[i] > 0) { - break; - } else if (i === bytes - 1) { - SHARED_BUFFER[bytes - 1] = 1; - } - } - return SHARED_BUFFER.toString("hex", 0, bytes); - }; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/index.js -var require_node14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RandomIdGenerator = exports.BatchSpanProcessor = undefined; - var BatchSpanProcessor_1 = require_BatchSpanProcessor(); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return BatchSpanProcessor_1.BatchSpanProcessor; - } }); - var RandomIdGenerator_1 = require_RandomIdGenerator(); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return RandomIdGenerator_1.RandomIdGenerator; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/index.js -var require_platform13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RandomIdGenerator = exports.BatchSpanProcessor = undefined; - var node_1 = require_node14(); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return node_1.BatchSpanProcessor; - } }); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return node_1.RandomIdGenerator; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/Tracer.js -var require_Tracer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Tracer = undefined; - var api8 = require_src(); - var core_1 = require_src7(); - var Span_1 = require_Span(); - var utility_1 = require_utility(); - var platform_1 = require_platform13(); - - class Tracer { - _sampler; - _generalLimits; - _spanLimits; - _idGenerator; - instrumentationScope; - _resource; - _spanProcessor; - constructor(instrumentationScope, config2, resource, spanProcessor) { - const localConfig = (0, utility_1.mergeConfig)(config2); - this._sampler = localConfig.sampler; - this._generalLimits = localConfig.generalLimits; - this._spanLimits = localConfig.spanLimits; - this._idGenerator = config2.idGenerator || new platform_1.RandomIdGenerator; - this._resource = resource; - this._spanProcessor = spanProcessor; - this.instrumentationScope = instrumentationScope; - } - startSpan(name, options = {}, context8 = api8.context.active()) { - if (options.root) { - context8 = api8.trace.deleteSpan(context8); - } - const parentSpan = api8.trace.getSpan(context8); - if ((0, core_1.isTracingSuppressed)(context8)) { - api8.diag.debug("Instrumentation suppressed, returning Noop Span"); - const nonRecordingSpan = api8.trace.wrapSpanContext(api8.INVALID_SPAN_CONTEXT); - return nonRecordingSpan; - } - const parentSpanContext = parentSpan?.spanContext(); - const spanId = this._idGenerator.generateSpanId(); - let validParentSpanContext; - let traceId; - let traceState; - if (!parentSpanContext || !api8.trace.isSpanContextValid(parentSpanContext)) { - traceId = this._idGenerator.generateTraceId(); - } else { - traceId = parentSpanContext.traceId; - traceState = parentSpanContext.traceState; - validParentSpanContext = parentSpanContext; - } - const spanKind = options.kind ?? api8.SpanKind.INTERNAL; - const links = (options.links ?? []).map((link) => { - return { - context: link.context, - attributes: (0, core_1.sanitizeAttributes)(link.attributes) - }; - }); - const attributes = (0, core_1.sanitizeAttributes)(options.attributes); - const samplingResult = this._sampler.shouldSample(context8, traceId, name, spanKind, attributes, links); - traceState = samplingResult.traceState ?? traceState; - const traceFlags = samplingResult.decision === api8.SamplingDecision.RECORD_AND_SAMPLED ? api8.TraceFlags.SAMPLED : api8.TraceFlags.NONE; - const spanContext = { traceId, spanId, traceFlags, traceState }; - if (samplingResult.decision === api8.SamplingDecision.NOT_RECORD) { - api8.diag.debug("Recording is off, propagating context in a non-recording span"); - const nonRecordingSpan = api8.trace.wrapSpanContext(spanContext); - return nonRecordingSpan; - } - const initAttributes = (0, core_1.sanitizeAttributes)(Object.assign(attributes, samplingResult.attributes)); - const span = new Span_1.SpanImpl({ - resource: this._resource, - scope: this.instrumentationScope, - context: context8, - spanContext, - name, - kind: spanKind, - links, - parentSpanContext: validParentSpanContext, - attributes: initAttributes, - startTime: options.startTime, - spanProcessor: this._spanProcessor, - spanLimits: this._spanLimits - }); - return span; - } - startActiveSpan(name, arg2, arg3, arg4) { - let opts; - let ctx; - let fn; - if (arguments.length < 2) { - return; - } else if (arguments.length === 2) { - fn = arg2; - } else if (arguments.length === 3) { - opts = arg2; - fn = arg3; - } else { - opts = arg2; - ctx = arg3; - fn = arg4; - } - const parentContext = ctx ?? api8.context.active(); - const span = this.startSpan(name, opts, parentContext); - const contextWithSpanSet = api8.trace.setSpan(parentContext, span); - return api8.context.with(contextWithSpanSet, fn, undefined, span); - } - getGeneralLimits() { - return this._generalLimits; - } - getSpanLimits() { - return this._spanLimits; - } - } - exports.Tracer = Tracer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/MultiSpanProcessor.js -var require_MultiSpanProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MultiSpanProcessor = undefined; - var core_1 = require_src7(); - - class MultiSpanProcessor { - _spanProcessors; - constructor(_spanProcessors) { - this._spanProcessors = _spanProcessors; - } - forceFlush() { - const promises = []; - for (const spanProcessor of this._spanProcessors) { - promises.push(spanProcessor.forceFlush()); - } - return new Promise((resolve2) => { - Promise.all(promises).then(() => { - resolve2(); - }).catch((error48) => { - (0, core_1.globalErrorHandler)(error48 || new Error("MultiSpanProcessor: forceFlush failed")); - resolve2(); - }); - }); - } - onStart(span, context8) { - for (const spanProcessor of this._spanProcessors) { - spanProcessor.onStart(span, context8); - } - } - onEnd(span) { - for (const spanProcessor of this._spanProcessors) { - spanProcessor.onEnd(span); - } - } - shutdown() { - const promises = []; - for (const spanProcessor of this._spanProcessors) { - promises.push(spanProcessor.shutdown()); - } - return new Promise((resolve2, reject) => { - Promise.all(promises).then(() => { - resolve2(); - }, reject); - }); - } - } - exports.MultiSpanProcessor = MultiSpanProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.js -var require_BasicTracerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BasicTracerProvider = exports.ForceFlushState = undefined; - var core_1 = require_src7(); - var resources_1 = require_src56(); - var Tracer_1 = require_Tracer(); - var config_1 = require_config2(); - var MultiSpanProcessor_1 = require_MultiSpanProcessor(); - var utility_1 = require_utility(); - var ForceFlushState; - (function(ForceFlushState2) { - ForceFlushState2[ForceFlushState2["resolved"] = 0] = "resolved"; - ForceFlushState2[ForceFlushState2["timeout"] = 1] = "timeout"; - ForceFlushState2[ForceFlushState2["error"] = 2] = "error"; - ForceFlushState2[ForceFlushState2["unresolved"] = 3] = "unresolved"; - })(ForceFlushState = exports.ForceFlushState || (exports.ForceFlushState = {})); - - class BasicTracerProvider { - _config; - _tracers = new Map; - _resource; - _activeSpanProcessor; - constructor(config2 = {}) { - const mergedConfig = (0, core_1.merge)({}, (0, config_1.loadDefaultConfig)(), (0, utility_1.reconfigureLimits)(config2)); - this._resource = mergedConfig.resource ?? (0, resources_1.defaultResource)(); - this._config = Object.assign({}, mergedConfig, { - resource: this._resource - }); - const spanProcessors2 = []; - if (config2.spanProcessors?.length) { - spanProcessors2.push(...config2.spanProcessors); - } - this._activeSpanProcessor = new MultiSpanProcessor_1.MultiSpanProcessor(spanProcessors2); - } - getTracer(name, version2, options) { - const key = `${name}@${version2 || ""}:${options?.schemaUrl || ""}`; - if (!this._tracers.has(key)) { - this._tracers.set(key, new Tracer_1.Tracer({ name, version: version2, schemaUrl: options?.schemaUrl }, this._config, this._resource, this._activeSpanProcessor)); - } - return this._tracers.get(key); - } - forceFlush() { - const timeout = this._config.forceFlushTimeoutMillis; - const promises = this._activeSpanProcessor["_spanProcessors"].map((spanProcessor) => { - return new Promise((resolve2) => { - let state; - const timeoutInterval = setTimeout(() => { - resolve2(new Error(`Span processor did not completed within timeout period of ${timeout} ms`)); - state = ForceFlushState.timeout; - }, timeout); - spanProcessor.forceFlush().then(() => { - clearTimeout(timeoutInterval); - if (state !== ForceFlushState.timeout) { - state = ForceFlushState.resolved; - resolve2(state); - } - }).catch((error48) => { - clearTimeout(timeoutInterval); - state = ForceFlushState.error; - resolve2(error48); - }); - }); - }); - return new Promise((resolve2, reject) => { - Promise.all(promises).then((results) => { - const errors3 = results.filter((result) => result !== ForceFlushState.resolved); - if (errors3.length > 0) { - reject(errors3); - } else { - resolve2(); - } - }).catch((error48) => reject([error48])); - }); - } - shutdown() { - return this._activeSpanProcessor.shutdown(); - } - } - exports.BasicTracerProvider = BasicTracerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ConsoleSpanExporter.js -var require_ConsoleSpanExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleSpanExporter = undefined; - var core_1 = require_src7(); - - class ConsoleSpanExporter { - export(spans, resultCallback) { - return this._sendSpans(spans, resultCallback); - } - shutdown() { - this._sendSpans([]); - return this.forceFlush(); - } - forceFlush() { - return Promise.resolve(); - } - _exportInfo(span) { - return { - resource: { - attributes: span.resource.attributes - }, - instrumentationScope: span.instrumentationScope, - traceId: span.spanContext().traceId, - parentSpanContext: span.parentSpanContext, - traceState: span.spanContext().traceState?.serialize(), - name: span.name, - id: span.spanContext().spanId, - kind: span.kind, - timestamp: (0, core_1.hrTimeToMicroseconds)(span.startTime), - duration: (0, core_1.hrTimeToMicroseconds)(span.duration), - attributes: span.attributes, - status: span.status, - events: span.events, - links: span.links - }; - } - _sendSpans(spans, done) { - for (const span of spans) { - console.dir(this._exportInfo(span), { depth: 3 }); - } - if (done) { - return done({ code: core_1.ExportResultCode.SUCCESS }); - } - } - } - exports.ConsoleSpanExporter = ConsoleSpanExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/InMemorySpanExporter.js -var require_InMemorySpanExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InMemorySpanExporter = undefined; - var core_1 = require_src7(); - - class InMemorySpanExporter { - _finishedSpans = []; - _stopped = false; - export(spans, resultCallback) { - if (this._stopped) - return resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Exporter has been stopped") - }); - this._finishedSpans.push(...spans); - setTimeout(() => resultCallback({ code: core_1.ExportResultCode.SUCCESS }), 0); - } - shutdown() { - this._stopped = true; - this._finishedSpans = []; - return this.forceFlush(); - } - forceFlush() { - return Promise.resolve(); - } - reset() { - this._finishedSpans = []; - } - getFinishedSpans() { - return this._finishedSpans; - } - } - exports.InMemorySpanExporter = InMemorySpanExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SimpleSpanProcessor.js -var require_SimpleSpanProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SimpleSpanProcessor = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - - class SimpleSpanProcessor2 { - _exporter; - _shutdownOnce; - _pendingExports; - constructor(_exporter) { - this._exporter = _exporter; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - this._pendingExports = new Set; - } - async forceFlush() { - await Promise.all(Array.from(this._pendingExports)); - if (this._exporter.forceFlush) { - await this._exporter.forceFlush(); - } - } - onStart(_span, _parentContext) {} - onEnd(span) { - if (this._shutdownOnce.isCalled) { - return; - } - if ((span.spanContext().traceFlags & api_1.TraceFlags.SAMPLED) === 0) { - return; - } - const pendingExport = this._doExport(span).catch((err) => (0, core_1.globalErrorHandler)(err)); - this._pendingExports.add(pendingExport); - pendingExport.finally(() => this._pendingExports.delete(pendingExport)); - } - async _doExport(span) { - if (span.resource.asyncAttributesPending) { - await span.resource.waitForAsyncAttributes?.(); - } - const result = await core_1.internal._export(this._exporter, [span]); - if (result.code !== core_1.ExportResultCode.SUCCESS) { - throw result.error ?? new Error(`SimpleSpanProcessor: span export failed (status ${result})`); - } - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return this._exporter.shutdown(); - } - } - exports.SimpleSpanProcessor = SimpleSpanProcessor2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/NoopSpanProcessor.js -var require_NoopSpanProcessor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopSpanProcessor = undefined; - - class NoopSpanProcessor { - onStart(_span, _context) {} - onEnd(_span) {} - shutdown() { - return Promise.resolve(); - } - forceFlush() { - return Promise.resolve(); - } - } - exports.NoopSpanProcessor = NoopSpanProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js -var require_src72 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SamplingDecision = exports.TraceIdRatioBasedSampler = exports.ParentBasedSampler = exports.AlwaysOnSampler = exports.AlwaysOffSampler = exports.NoopSpanProcessor = exports.SimpleSpanProcessor = exports.InMemorySpanExporter = exports.ConsoleSpanExporter = exports.RandomIdGenerator = exports.BatchSpanProcessor = exports.BasicTracerProvider = undefined; - var BasicTracerProvider_1 = require_BasicTracerProvider(); - Object.defineProperty(exports, "BasicTracerProvider", { enumerable: true, get: function() { - return BasicTracerProvider_1.BasicTracerProvider; - } }); - var platform_1 = require_platform13(); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return platform_1.BatchSpanProcessor; - } }); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return platform_1.RandomIdGenerator; - } }); - var ConsoleSpanExporter_1 = require_ConsoleSpanExporter(); - Object.defineProperty(exports, "ConsoleSpanExporter", { enumerable: true, get: function() { - return ConsoleSpanExporter_1.ConsoleSpanExporter; - } }); - var InMemorySpanExporter_1 = require_InMemorySpanExporter(); - Object.defineProperty(exports, "InMemorySpanExporter", { enumerable: true, get: function() { - return InMemorySpanExporter_1.InMemorySpanExporter; - } }); - var SimpleSpanProcessor_1 = require_SimpleSpanProcessor(); - Object.defineProperty(exports, "SimpleSpanProcessor", { enumerable: true, get: function() { - return SimpleSpanProcessor_1.SimpleSpanProcessor; - } }); - var NoopSpanProcessor_1 = require_NoopSpanProcessor(); - Object.defineProperty(exports, "NoopSpanProcessor", { enumerable: true, get: function() { - return NoopSpanProcessor_1.NoopSpanProcessor; - } }); - var AlwaysOffSampler_1 = require_AlwaysOffSampler(); - Object.defineProperty(exports, "AlwaysOffSampler", { enumerable: true, get: function() { - return AlwaysOffSampler_1.AlwaysOffSampler; - } }); - var AlwaysOnSampler_1 = require_AlwaysOnSampler(); - Object.defineProperty(exports, "AlwaysOnSampler", { enumerable: true, get: function() { - return AlwaysOnSampler_1.AlwaysOnSampler; - } }); - var ParentBasedSampler_1 = require_ParentBasedSampler(); - Object.defineProperty(exports, "ParentBasedSampler", { enumerable: true, get: function() { - return ParentBasedSampler_1.ParentBasedSampler; - } }); - var TraceIdRatioBasedSampler_1 = require_TraceIdRatioBasedSampler(); - Object.defineProperty(exports, "TraceIdRatioBasedSampler", { enumerable: true, get: function() { - return TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler; - } }); - var Sampler_1 = require_Sampler(); - Object.defineProperty(exports, "SamplingDecision", { enumerable: true, get: function() { - return Sampler_1.SamplingDecision; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-node@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.js -var require_NodeTracerProvider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeTracerProvider = undefined; - var context_async_hooks_1 = require_src71(); - var sdk_trace_base_1 = require_src72(); - var api_1 = require_src(); - var core_1 = require_src7(); - function setupContextManager(contextManager) { - if (contextManager === null) { - return; - } - if (contextManager === undefined) { - const defaultContextManager = new context_async_hooks_1.AsyncLocalStorageContextManager; - defaultContextManager.enable(); - api_1.context.setGlobalContextManager(defaultContextManager); - return; - } - contextManager.enable(); - api_1.context.setGlobalContextManager(contextManager); - } - function setupPropagator(propagator) { - if (propagator === null) { - return; - } - if (propagator === undefined) { - api_1.propagation.setGlobalPropagator(new core_1.CompositePropagator({ - propagators: [ - new core_1.W3CTraceContextPropagator, - new core_1.W3CBaggagePropagator - ] - })); - return; - } - api_1.propagation.setGlobalPropagator(propagator); - } - - class NodeTracerProvider extends sdk_trace_base_1.BasicTracerProvider { - constructor(config2 = {}) { - super(config2); - } - register(config2 = {}) { - api_1.trace.setGlobalTracerProvider(this); - setupContextManager(config2.contextManager); - setupPropagator(config2.propagator); - } - } - exports.NodeTracerProvider = NodeTracerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-node@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-node/build/src/index.js -var require_src73 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceIdRatioBasedSampler = exports.SimpleSpanProcessor = exports.SamplingDecision = exports.RandomIdGenerator = exports.ParentBasedSampler = exports.NoopSpanProcessor = exports.InMemorySpanExporter = exports.ConsoleSpanExporter = exports.BatchSpanProcessor = exports.BasicTracerProvider = exports.AlwaysOnSampler = exports.AlwaysOffSampler = exports.NodeTracerProvider = undefined; - var NodeTracerProvider_1 = require_NodeTracerProvider(); - Object.defineProperty(exports, "NodeTracerProvider", { enumerable: true, get: function() { - return NodeTracerProvider_1.NodeTracerProvider; - } }); - var sdk_trace_base_1 = require_src72(); - Object.defineProperty(exports, "AlwaysOffSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.AlwaysOffSampler; - } }); - Object.defineProperty(exports, "AlwaysOnSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.AlwaysOnSampler; - } }); - Object.defineProperty(exports, "BasicTracerProvider", { enumerable: true, get: function() { - return sdk_trace_base_1.BasicTracerProvider; - } }); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return sdk_trace_base_1.BatchSpanProcessor; - } }); - Object.defineProperty(exports, "ConsoleSpanExporter", { enumerable: true, get: function() { - return sdk_trace_base_1.ConsoleSpanExporter; - } }); - Object.defineProperty(exports, "InMemorySpanExporter", { enumerable: true, get: function() { - return sdk_trace_base_1.InMemorySpanExporter; - } }); - Object.defineProperty(exports, "NoopSpanProcessor", { enumerable: true, get: function() { - return sdk_trace_base_1.NoopSpanProcessor; - } }); - Object.defineProperty(exports, "ParentBasedSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.ParentBasedSampler; - } }); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return sdk_trace_base_1.RandomIdGenerator; - } }); - Object.defineProperty(exports, "SamplingDecision", { enumerable: true, get: function() { - return sdk_trace_base_1.SamplingDecision; - } }); - Object.defineProperty(exports, "SimpleSpanProcessor", { enumerable: true, get: function() { - return sdk_trace_base_1.SimpleSpanProcessor; - } }); - Object.defineProperty(exports, "TraceIdRatioBasedSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.TraceIdRatioBasedSampler; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/version.js -var require_version48 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.207.0"; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/constants.js -var require_constants9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = exports.DEFAULT_MAX_SEND_MESSAGE_LENGTH = exports.Propagate = exports.LogVerbosity = exports.Status = undefined; - var Status; - (function(Status2) { - Status2[Status2["OK"] = 0] = "OK"; - Status2[Status2["CANCELLED"] = 1] = "CANCELLED"; - Status2[Status2["UNKNOWN"] = 2] = "UNKNOWN"; - Status2[Status2["INVALID_ARGUMENT"] = 3] = "INVALID_ARGUMENT"; - Status2[Status2["DEADLINE_EXCEEDED"] = 4] = "DEADLINE_EXCEEDED"; - Status2[Status2["NOT_FOUND"] = 5] = "NOT_FOUND"; - Status2[Status2["ALREADY_EXISTS"] = 6] = "ALREADY_EXISTS"; - Status2[Status2["PERMISSION_DENIED"] = 7] = "PERMISSION_DENIED"; - Status2[Status2["RESOURCE_EXHAUSTED"] = 8] = "RESOURCE_EXHAUSTED"; - Status2[Status2["FAILED_PRECONDITION"] = 9] = "FAILED_PRECONDITION"; - Status2[Status2["ABORTED"] = 10] = "ABORTED"; - Status2[Status2["OUT_OF_RANGE"] = 11] = "OUT_OF_RANGE"; - Status2[Status2["UNIMPLEMENTED"] = 12] = "UNIMPLEMENTED"; - Status2[Status2["INTERNAL"] = 13] = "INTERNAL"; - Status2[Status2["UNAVAILABLE"] = 14] = "UNAVAILABLE"; - Status2[Status2["DATA_LOSS"] = 15] = "DATA_LOSS"; - Status2[Status2["UNAUTHENTICATED"] = 16] = "UNAUTHENTICATED"; - })(Status || (exports.Status = Status = {})); - var LogVerbosity; - (function(LogVerbosity2) { - LogVerbosity2[LogVerbosity2["DEBUG"] = 0] = "DEBUG"; - LogVerbosity2[LogVerbosity2["INFO"] = 1] = "INFO"; - LogVerbosity2[LogVerbosity2["ERROR"] = 2] = "ERROR"; - LogVerbosity2[LogVerbosity2["NONE"] = 3] = "NONE"; - })(LogVerbosity || (exports.LogVerbosity = LogVerbosity = {})); - var Propagate; - (function(Propagate2) { - Propagate2[Propagate2["DEADLINE"] = 1] = "DEADLINE"; - Propagate2[Propagate2["CENSUS_STATS_CONTEXT"] = 2] = "CENSUS_STATS_CONTEXT"; - Propagate2[Propagate2["CENSUS_TRACING_CONTEXT"] = 4] = "CENSUS_TRACING_CONTEXT"; - Propagate2[Propagate2["CANCELLATION"] = 8] = "CANCELLATION"; - Propagate2[Propagate2["DEFAULTS"] = 65535] = "DEFAULTS"; - })(Propagate || (exports.Propagate = Propagate = {})); - exports.DEFAULT_MAX_SEND_MESSAGE_LENGTH = -1; - exports.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH = 4 * 1024 * 1024; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/package.json -var require_package2 = __commonJS((exports, module) => { - module.exports = { - name: "@grpc/grpc-js", - version: "1.14.3", - description: "gRPC Library for Node - pure JS implementation", - homepage: "https://grpc.io/", - repository: "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js", - main: "build/src/index.js", - engines: { - node: ">=12.10.0" - }, - keywords: [], - author: { - name: "Google Inc." - }, - types: "build/src/index.d.ts", - license: "Apache-2.0", - devDependencies: { - "@grpc/proto-loader": "file:../proto-loader", - "@types/gulp": "^4.0.17", - "@types/gulp-mocha": "0.0.37", - "@types/lodash": "^4.14.202", - "@types/mocha": "^10.0.6", - "@types/ncp": "^2.0.8", - "@types/node": ">=20.11.20", - "@types/pify": "^5.0.4", - "@types/semver": "^7.5.8", - "@typescript-eslint/eslint-plugin": "^7.1.0", - "@typescript-eslint/parser": "^7.1.0", - "@typescript-eslint/typescript-estree": "^7.1.0", - "clang-format": "^1.8.0", - eslint: "^8.42.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.2.1", - execa: "^2.0.3", - gulp: "^4.0.2", - "gulp-mocha": "^6.0.0", - lodash: "^4.17.21", - madge: "^5.0.1", - "mocha-jenkins-reporter": "^0.4.1", - ncp: "^2.0.0", - pify: "^4.0.1", - prettier: "^2.8.8", - rimraf: "^3.0.2", - semver: "^7.6.0", - "ts-node": "^10.9.2", - typescript: "^5.3.3" - }, - contributors: [ - { - name: "Google Inc." - } - ], - scripts: { - build: "npm run compile", - clean: "rimraf ./build", - compile: "tsc -p .", - format: 'clang-format -i -style="{Language: JavaScript, BasedOnStyle: Google, ColumnLimit: 80}" src/*.ts test/*.ts', - lint: "eslint src/*.ts test/*.ts", - prepare: "npm run copy-protos && npm run generate-types && npm run generate-test-types && npm run compile", - test: "gulp test", - check: "npm run lint", - fix: "eslint --fix src/*.ts test/*.ts", - pretest: "npm run generate-types && npm run generate-test-types && npm run compile", - posttest: "npm run check && madge -c ./build/src", - "generate-types": "proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --includeDirs proto/ --include-dirs proto/ proto/xds/ proto/protoc-gen-validate/ -O src/generated/ --grpcLib ../index channelz.proto xds/service/orca/v3/orca.proto", - "generate-test-types": "proto-loader-gen-types --keepCase --longs String --enums String --defaults --oneofs --includeComments --include-dirs test/fixtures/ -O test/generated/ --grpcLib ../../src/index test_service.proto echo_service.proto", - "copy-protos": "node ./copy-protos" - }, - dependencies: { - "@grpc/proto-loader": "^0.8.0", - "@js-sdsl/ordered-map": "^4.4.2" - }, - files: [ - "src/**/*.ts", - "build/src/**/*.{js,d.ts,js.map}", - "proto/**/*.proto", - "proto/**/LICENSE", - "LICENSE", - "deps/envoy-api/envoy/api/v2/**/*.proto", - "deps/envoy-api/envoy/config/**/*.proto", - "deps/envoy-api/envoy/service/**/*.proto", - "deps/envoy-api/envoy/type/**/*.proto", - "deps/udpa/udpa/**/*.proto", - "deps/googleapis/google/api/*.proto", - "deps/googleapis/google/rpc/*.proto", - "deps/protoc-gen-validate/validate/**/*.proto" - ] - }; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/logging.js -var require_logging = __commonJS((exports) => { - var _a2; - var _b; - var _c; - var _d; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.log = exports.setLoggerVerbosity = exports.setLogger = exports.getLogger = undefined; - exports.trace = trace6; - exports.isTracerEnabled = isTracerEnabled; - var constants_1 = require_constants9(); - var process_1 = __require("process"); - var clientVersion = require_package2().version; - var DEFAULT_LOGGER = { - error: (message, ...optionalParams) => { - console.error("E " + message, ...optionalParams); - }, - info: (message, ...optionalParams) => { - console.error("I " + message, ...optionalParams); - }, - debug: (message, ...optionalParams) => { - console.error("D " + message, ...optionalParams); - } - }; - var _logger = DEFAULT_LOGGER; - var _logVerbosity = constants_1.LogVerbosity.ERROR; - var verbosityString = (_b = (_a2 = process.env.GRPC_NODE_VERBOSITY) !== null && _a2 !== undefined ? _a2 : process.env.GRPC_VERBOSITY) !== null && _b !== undefined ? _b : ""; - switch (verbosityString.toUpperCase()) { - case "DEBUG": - _logVerbosity = constants_1.LogVerbosity.DEBUG; - break; - case "INFO": - _logVerbosity = constants_1.LogVerbosity.INFO; - break; - case "ERROR": - _logVerbosity = constants_1.LogVerbosity.ERROR; - break; - case "NONE": - _logVerbosity = constants_1.LogVerbosity.NONE; - break; - default: - } - var getLogger2 = () => { - return _logger; - }; - exports.getLogger = getLogger2; - var setLogger = (logger) => { - _logger = logger; - }; - exports.setLogger = setLogger; - var setLoggerVerbosity = (verbosity) => { - _logVerbosity = verbosity; - }; - exports.setLoggerVerbosity = setLoggerVerbosity; - var log = (severity, ...args) => { - let logFunction; - if (severity >= _logVerbosity) { - switch (severity) { - case constants_1.LogVerbosity.DEBUG: - logFunction = _logger.debug; - break; - case constants_1.LogVerbosity.INFO: - logFunction = _logger.info; - break; - case constants_1.LogVerbosity.ERROR: - logFunction = _logger.error; - break; - } - if (!logFunction) { - logFunction = _logger.error; - } - if (logFunction) { - logFunction.bind(_logger)(...args); - } - } - }; - exports.log = log; - var tracersString = (_d = (_c = process.env.GRPC_NODE_TRACE) !== null && _c !== undefined ? _c : process.env.GRPC_TRACE) !== null && _d !== undefined ? _d : ""; - var enabledTracers = new Set; - var disabledTracers = new Set; - for (const tracerName of tracersString.split(",")) { - if (tracerName.startsWith("-")) { - disabledTracers.add(tracerName.substring(1)); - } else { - enabledTracers.add(tracerName); - } - } - var allEnabled = enabledTracers.has("all"); - function trace6(severity, tracer, text) { - if (isTracerEnabled(tracer)) { - (0, exports.log)(severity, new Date().toISOString() + " | v" + clientVersion + " " + process_1.pid + " | " + tracer + " | " + text); - } - } - function isTracerEnabled(tracer) { - return !disabledTracers.has(tracer) && (allEnabled || enabledTracers.has(tracer)); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/error.js -var require_error2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getErrorMessage = getErrorMessage; - exports.getErrorCode = getErrorCode; - function getErrorMessage(error48) { - if (error48 instanceof Error) { - return error48.message; - } else { - return String(error48); - } - } - function getErrorCode(error48) { - if (typeof error48 === "object" && error48 !== null && "code" in error48 && typeof error48.code === "number") { - return error48.code; - } else { - return null; - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/metadata.js -var require_metadata = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Metadata = undefined; - var logging_1 = require_logging(); - var constants_1 = require_constants9(); - var error_1 = require_error2(); - var LEGAL_KEY_REGEX = /^[:0-9a-z_.-]+$/; - var LEGAL_NON_BINARY_VALUE_REGEX = /^[ -~]*$/; - function isLegalKey(key) { - return LEGAL_KEY_REGEX.test(key); - } - function isLegalNonBinaryValue(value) { - return LEGAL_NON_BINARY_VALUE_REGEX.test(value); - } - function isBinaryKey(key) { - return key.endsWith("-bin"); - } - function isCustomMetadata(key) { - return !key.startsWith("grpc-"); - } - function normalizeKey(key) { - return key.toLowerCase(); - } - function validate(key, value) { - if (!isLegalKey(key)) { - throw new Error('Metadata key "' + key + '" contains illegal characters'); - } - if (value !== null && value !== undefined) { - if (isBinaryKey(key)) { - if (!Buffer.isBuffer(value)) { - throw new Error("keys that end with '-bin' must have Buffer values"); - } - } else { - if (Buffer.isBuffer(value)) { - throw new Error("keys that don't end with '-bin' must have String values"); - } - if (!isLegalNonBinaryValue(value)) { - throw new Error('Metadata string value "' + value + '" contains illegal characters'); - } - } - } - } - - class Metadata { - constructor(options = {}) { - this.internalRepr = new Map; - this.opaqueData = new Map; - this.options = options; - } - set(key, value) { - key = normalizeKey(key); - validate(key, value); - this.internalRepr.set(key, [value]); - } - add(key, value) { - key = normalizeKey(key); - validate(key, value); - const existingValue = this.internalRepr.get(key); - if (existingValue === undefined) { - this.internalRepr.set(key, [value]); - } else { - existingValue.push(value); - } - } - remove(key) { - key = normalizeKey(key); - this.internalRepr.delete(key); - } - get(key) { - key = normalizeKey(key); - return this.internalRepr.get(key) || []; - } - getMap() { - const result = {}; - for (const [key, values] of this.internalRepr) { - if (values.length > 0) { - const v = values[0]; - result[key] = Buffer.isBuffer(v) ? Buffer.from(v) : v; - } - } - return result; - } - clone() { - const newMetadata = new Metadata(this.options); - const newInternalRepr = newMetadata.internalRepr; - for (const [key, value] of this.internalRepr) { - const clonedValue = value.map((v) => { - if (Buffer.isBuffer(v)) { - return Buffer.from(v); - } else { - return v; - } - }); - newInternalRepr.set(key, clonedValue); - } - return newMetadata; - } - merge(other) { - for (const [key, values] of other.internalRepr) { - const mergedValue = (this.internalRepr.get(key) || []).concat(values); - this.internalRepr.set(key, mergedValue); - } - } - setOptions(options) { - this.options = options; - } - getOptions() { - return this.options; - } - toHttp2Headers() { - const result = {}; - for (const [key, values] of this.internalRepr) { - if (key.startsWith(":")) { - continue; - } - result[key] = values.map(bufToString); - } - return result; - } - toJSON() { - const result = {}; - for (const [key, values] of this.internalRepr) { - result[key] = values; - } - return result; - } - setOpaque(key, value) { - this.opaqueData.set(key, value); - } - getOpaque(key) { - return this.opaqueData.get(key); - } - static fromHttp2Headers(headers) { - const result = new Metadata; - for (const key of Object.keys(headers)) { - if (key.charAt(0) === ":") { - continue; - } - const values = headers[key]; - try { - if (isBinaryKey(key)) { - if (Array.isArray(values)) { - values.forEach((value) => { - result.add(key, Buffer.from(value, "base64")); - }); - } else if (values !== undefined) { - if (isCustomMetadata(key)) { - values.split(",").forEach((v) => { - result.add(key, Buffer.from(v.trim(), "base64")); - }); - } else { - result.add(key, Buffer.from(values, "base64")); - } - } - } else { - if (Array.isArray(values)) { - values.forEach((value) => { - result.add(key, value); - }); - } else if (values !== undefined) { - result.add(key, values); - } - } - } catch (error48) { - const message = `Failed to add metadata entry ${key}: ${values}. ${(0, error_1.getErrorMessage)(error48)}. For more information see https://github.com/grpc/grpc-node/issues/1173`; - (0, logging_1.log)(constants_1.LogVerbosity.ERROR, message); - } - } - return result; - } - } - exports.Metadata = Metadata; - var bufToString = (val) => { - return Buffer.isBuffer(val) ? val.toString("base64") : val; - }; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/call-credentials.js -var require_call_credentials = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CallCredentials = undefined; - var metadata_1 = require_metadata(); - function isCurrentOauth2Client(client) { - return "getRequestHeaders" in client && typeof client.getRequestHeaders === "function"; - } - - class CallCredentials { - static createFromMetadataGenerator(metadataGenerator) { - return new SingleCallCredentials(metadataGenerator); - } - static createFromGoogleCredential(googleCredentials) { - return CallCredentials.createFromMetadataGenerator((options, callback) => { - let getHeaders; - if (isCurrentOauth2Client(googleCredentials)) { - getHeaders = googleCredentials.getRequestHeaders(options.service_url); - } else { - getHeaders = new Promise((resolve2, reject) => { - googleCredentials.getRequestMetadata(options.service_url, (err, headers) => { - if (err) { - reject(err); - return; - } - if (!headers) { - reject(new Error("Headers not set by metadata plugin")); - return; - } - resolve2(headers); - }); - }); - } - getHeaders.then((headers) => { - const metadata = new metadata_1.Metadata; - for (const key of Object.keys(headers)) { - metadata.add(key, headers[key]); - } - callback(null, metadata); - }, (err) => { - callback(err); - }); - }); - } - static createEmpty() { - return new EmptyCallCredentials; - } - } - exports.CallCredentials = CallCredentials; - - class ComposedCallCredentials extends CallCredentials { - constructor(creds) { - super(); - this.creds = creds; - } - async generateMetadata(options) { - const base = new metadata_1.Metadata; - const generated = await Promise.all(this.creds.map((cred) => cred.generateMetadata(options))); - for (const gen of generated) { - base.merge(gen); - } - return base; - } - compose(other) { - return new ComposedCallCredentials(this.creds.concat([other])); - } - _equals(other) { - if (this === other) { - return true; - } - if (other instanceof ComposedCallCredentials) { - return this.creds.every((value, index) => value._equals(other.creds[index])); - } else { - return false; - } - } - } - - class SingleCallCredentials extends CallCredentials { - constructor(metadataGenerator) { - super(); - this.metadataGenerator = metadataGenerator; - } - generateMetadata(options) { - return new Promise((resolve2, reject) => { - this.metadataGenerator(options, (err, metadata) => { - if (metadata !== undefined) { - resolve2(metadata); - } else { - reject(err); - } - }); - }); - } - compose(other) { - return new ComposedCallCredentials([this, other]); - } - _equals(other) { - if (this === other) { - return true; - } - if (other instanceof SingleCallCredentials) { - return this.metadataGenerator === other.metadataGenerator; - } else { - return false; - } - } - } - - class EmptyCallCredentials extends CallCredentials { - generateMetadata(options) { - return Promise.resolve(new metadata_1.Metadata); - } - compose(other) { - return other; - } - _equals(other) { - return other instanceof EmptyCallCredentials; - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/tls-helpers.js -var require_tls_helpers = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CIPHER_SUITES = undefined; - exports.getDefaultRootsData = getDefaultRootsData; - var fs = __require("fs"); - exports.CIPHER_SUITES = process.env.GRPC_SSL_CIPHER_SUITES; - var DEFAULT_ROOTS_FILE_PATH = process.env.GRPC_DEFAULT_SSL_ROOTS_FILE_PATH; - var defaultRootsData = null; - function getDefaultRootsData() { - if (DEFAULT_ROOTS_FILE_PATH) { - if (defaultRootsData === null) { - defaultRootsData = fs.readFileSync(DEFAULT_ROOTS_FILE_PATH); - } - return defaultRootsData; - } - return null; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/uri-parser.js -var require_uri_parser = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseUri = parseUri; - exports.splitHostPort = splitHostPort; - exports.combineHostPort = combineHostPort; - exports.uriToString = uriToString; - var URI_REGEX = /^(?:([A-Za-z0-9+.-]+):)?(?:\/\/([^/]*)\/)?(.+)$/; - function parseUri(uriString) { - const parsedUri = URI_REGEX.exec(uriString); - if (parsedUri === null) { - return null; - } - return { - scheme: parsedUri[1], - authority: parsedUri[2], - path: parsedUri[3] - }; - } - var NUMBER_REGEX = /^\d+$/; - function splitHostPort(path) { - if (path.startsWith("[")) { - const hostEnd = path.indexOf("]"); - if (hostEnd === -1) { - return null; - } - const host = path.substring(1, hostEnd); - if (host.indexOf(":") === -1) { - return null; - } - if (path.length > hostEnd + 1) { - if (path[hostEnd + 1] === ":") { - const portString = path.substring(hostEnd + 2); - if (NUMBER_REGEX.test(portString)) { - return { - host, - port: +portString - }; - } else { - return null; - } - } else { - return null; - } - } else { - return { - host - }; - } - } else { - const splitPath2 = path.split(":"); - if (splitPath2.length === 2) { - if (NUMBER_REGEX.test(splitPath2[1])) { - return { - host: splitPath2[0], - port: +splitPath2[1] - }; - } else { - return null; - } - } else { - return { - host: path - }; - } - } - } - function combineHostPort(hostPort) { - if (hostPort.port === undefined) { - return hostPort.host; - } else { - if (hostPort.host.includes(":")) { - return `[${hostPort.host}]:${hostPort.port}`; - } else { - return `${hostPort.host}:${hostPort.port}`; - } - } - } - function uriToString(uri) { - let result = ""; - if (uri.scheme !== undefined) { - result += uri.scheme + ":"; - } - if (uri.authority !== undefined) { - result += "//" + uri.authority + "/"; - } - result += uri.path; - return result; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/resolver.js -var require_resolver = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CHANNEL_ARGS_CONFIG_SELECTOR_KEY = undefined; - exports.registerResolver = registerResolver; - exports.registerDefaultScheme = registerDefaultScheme; - exports.createResolver = createResolver; - exports.getDefaultAuthority = getDefaultAuthority; - exports.mapUriDefaultScheme = mapUriDefaultScheme; - var uri_parser_1 = require_uri_parser(); - exports.CHANNEL_ARGS_CONFIG_SELECTOR_KEY = "grpc.internal.config_selector"; - var registeredResolvers = {}; - var defaultScheme = null; - function registerResolver(scheme, resolverClass) { - registeredResolvers[scheme] = resolverClass; - } - function registerDefaultScheme(scheme) { - defaultScheme = scheme; - } - function createResolver(target, listener, options) { - if (target.scheme !== undefined && target.scheme in registeredResolvers) { - return new registeredResolvers[target.scheme](target, listener, options); - } else { - throw new Error(`No resolver could be created for target ${(0, uri_parser_1.uriToString)(target)}`); - } - } - function getDefaultAuthority(target) { - if (target.scheme !== undefined && target.scheme in registeredResolvers) { - return registeredResolvers[target.scheme].getDefaultAuthority(target); - } else { - throw new Error(`Invalid target ${(0, uri_parser_1.uriToString)(target)}`); - } - } - function mapUriDefaultScheme(target) { - if (target.scheme === undefined || !(target.scheme in registeredResolvers)) { - if (defaultScheme !== null) { - return { - scheme: defaultScheme, - authority: undefined, - path: (0, uri_parser_1.uriToString)(target) - }; - } else { - return null; - } - } - return target; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/channel-credentials.js -var require_channel_credentials = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ChannelCredentials = undefined; - exports.createCertificateProviderChannelCredentials = createCertificateProviderChannelCredentials; - var tls_1 = __require("tls"); - var call_credentials_1 = require_call_credentials(); - var tls_helpers_1 = require_tls_helpers(); - var uri_parser_1 = require_uri_parser(); - var resolver_1 = require_resolver(); - var logging_1 = require_logging(); - var constants_1 = require_constants9(); - function verifyIsBufferOrNull(obj, friendlyName) { - if (obj && !(obj instanceof Buffer)) { - throw new TypeError(`${friendlyName}, if provided, must be a Buffer.`); - } - } - - class ChannelCredentials { - compose(callCredentials) { - return new ComposedChannelCredentialsImpl(this, callCredentials); - } - static createSsl(rootCerts, privateKey, certChain, verifyOptions) { - var _a2; - verifyIsBufferOrNull(rootCerts, "Root certificate"); - verifyIsBufferOrNull(privateKey, "Private key"); - verifyIsBufferOrNull(certChain, "Certificate chain"); - if (privateKey && !certChain) { - throw new Error("Private key must be given with accompanying certificate chain"); - } - if (!privateKey && certChain) { - throw new Error("Certificate chain must be given with accompanying private key"); - } - const secureContext = (0, tls_1.createSecureContext)({ - ca: (_a2 = rootCerts !== null && rootCerts !== undefined ? rootCerts : (0, tls_helpers_1.getDefaultRootsData)()) !== null && _a2 !== undefined ? _a2 : undefined, - key: privateKey !== null && privateKey !== undefined ? privateKey : undefined, - cert: certChain !== null && certChain !== undefined ? certChain : undefined, - ciphers: tls_helpers_1.CIPHER_SUITES - }); - return new SecureChannelCredentialsImpl(secureContext, verifyOptions !== null && verifyOptions !== undefined ? verifyOptions : {}); - } - static createFromSecureContext(secureContext, verifyOptions) { - return new SecureChannelCredentialsImpl(secureContext, verifyOptions !== null && verifyOptions !== undefined ? verifyOptions : {}); - } - static createInsecure() { - return new InsecureChannelCredentialsImpl; - } - } - exports.ChannelCredentials = ChannelCredentials; - - class InsecureChannelCredentialsImpl extends ChannelCredentials { - constructor() { - super(); - } - compose(callCredentials) { - throw new Error("Cannot compose insecure credentials"); - } - _isSecure() { - return false; - } - _equals(other) { - return other instanceof InsecureChannelCredentialsImpl; - } - _createSecureConnector(channelTarget, options, callCredentials) { - return { - connect(socket) { - return Promise.resolve({ - socket, - secure: false - }); - }, - waitForReady: () => { - return Promise.resolve(); - }, - getCallCredentials: () => { - return callCredentials !== null && callCredentials !== undefined ? callCredentials : call_credentials_1.CallCredentials.createEmpty(); - }, - destroy() {} - }; - } - } - function getConnectionOptions(secureContext, verifyOptions, channelTarget, options) { - var _a2, _b; - const connectionOptions = { - secureContext - }; - let realTarget = channelTarget; - if ("grpc.http_connect_target" in options) { - const parsedTarget = (0, uri_parser_1.parseUri)(options["grpc.http_connect_target"]); - if (parsedTarget) { - realTarget = parsedTarget; - } - } - const targetPath = (0, resolver_1.getDefaultAuthority)(realTarget); - const hostPort = (0, uri_parser_1.splitHostPort)(targetPath); - const remoteHost = (_a2 = hostPort === null || hostPort === undefined ? undefined : hostPort.host) !== null && _a2 !== undefined ? _a2 : targetPath; - connectionOptions.host = remoteHost; - if (verifyOptions.checkServerIdentity) { - connectionOptions.checkServerIdentity = verifyOptions.checkServerIdentity; - } - if (verifyOptions.rejectUnauthorized !== undefined) { - connectionOptions.rejectUnauthorized = verifyOptions.rejectUnauthorized; - } - connectionOptions.ALPNProtocols = ["h2"]; - if (options["grpc.ssl_target_name_override"]) { - const sslTargetNameOverride = options["grpc.ssl_target_name_override"]; - const originalCheckServerIdentity = (_b = connectionOptions.checkServerIdentity) !== null && _b !== undefined ? _b : tls_1.checkServerIdentity; - connectionOptions.checkServerIdentity = (host, cert) => { - return originalCheckServerIdentity(sslTargetNameOverride, cert); - }; - connectionOptions.servername = sslTargetNameOverride; - } else { - connectionOptions.servername = remoteHost; - } - if (options["grpc-node.tls_enable_trace"]) { - connectionOptions.enableTrace = true; - } - return connectionOptions; - } - - class SecureConnectorImpl { - constructor(connectionOptions, callCredentials) { - this.connectionOptions = connectionOptions; - this.callCredentials = callCredentials; - } - connect(socket) { - const tlsConnectOptions = Object.assign({ socket }, this.connectionOptions); - return new Promise((resolve2, reject) => { - const tlsSocket = (0, tls_1.connect)(tlsConnectOptions, () => { - var _a2; - if (((_a2 = this.connectionOptions.rejectUnauthorized) !== null && _a2 !== undefined ? _a2 : true) && !tlsSocket.authorized) { - reject(tlsSocket.authorizationError); - return; - } - resolve2({ - socket: tlsSocket, - secure: true - }); - }); - tlsSocket.on("error", (error48) => { - reject(error48); - }); - }); - } - waitForReady() { - return Promise.resolve(); - } - getCallCredentials() { - return this.callCredentials; - } - destroy() {} - } - - class SecureChannelCredentialsImpl extends ChannelCredentials { - constructor(secureContext, verifyOptions) { - super(); - this.secureContext = secureContext; - this.verifyOptions = verifyOptions; - } - _isSecure() { - return true; - } - _equals(other) { - if (this === other) { - return true; - } - if (other instanceof SecureChannelCredentialsImpl) { - return this.secureContext === other.secureContext && this.verifyOptions.checkServerIdentity === other.verifyOptions.checkServerIdentity; - } else { - return false; - } - } - _createSecureConnector(channelTarget, options, callCredentials) { - const connectionOptions = getConnectionOptions(this.secureContext, this.verifyOptions, channelTarget, options); - return new SecureConnectorImpl(connectionOptions, callCredentials !== null && callCredentials !== undefined ? callCredentials : call_credentials_1.CallCredentials.createEmpty()); - } - } - - class CertificateProviderChannelCredentialsImpl extends ChannelCredentials { - constructor(caCertificateProvider, identityCertificateProvider, verifyOptions) { - super(); - this.caCertificateProvider = caCertificateProvider; - this.identityCertificateProvider = identityCertificateProvider; - this.verifyOptions = verifyOptions; - this.refcount = 0; - this.latestCaUpdate = undefined; - this.latestIdentityUpdate = undefined; - this.caCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this); - this.identityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this); - this.secureContextWatchers = []; - } - _isSecure() { - return true; - } - _equals(other) { - var _a2, _b; - if (this === other) { - return true; - } - if (other instanceof CertificateProviderChannelCredentialsImpl) { - return this.caCertificateProvider === other.caCertificateProvider && this.identityCertificateProvider === other.identityCertificateProvider && ((_a2 = this.verifyOptions) === null || _a2 === undefined ? undefined : _a2.checkServerIdentity) === ((_b = other.verifyOptions) === null || _b === undefined ? undefined : _b.checkServerIdentity); - } else { - return false; - } - } - ref() { - var _a2; - if (this.refcount === 0) { - this.caCertificateProvider.addCaCertificateListener(this.caCertificateUpdateListener); - (_a2 = this.identityCertificateProvider) === null || _a2 === undefined || _a2.addIdentityCertificateListener(this.identityCertificateUpdateListener); - } - this.refcount += 1; - } - unref() { - var _a2; - this.refcount -= 1; - if (this.refcount === 0) { - this.caCertificateProvider.removeCaCertificateListener(this.caCertificateUpdateListener); - (_a2 = this.identityCertificateProvider) === null || _a2 === undefined || _a2.removeIdentityCertificateListener(this.identityCertificateUpdateListener); - } - } - _createSecureConnector(channelTarget, options, callCredentials) { - this.ref(); - return new CertificateProviderChannelCredentialsImpl.SecureConnectorImpl(this, channelTarget, options, callCredentials !== null && callCredentials !== undefined ? callCredentials : call_credentials_1.CallCredentials.createEmpty()); - } - maybeUpdateWatchers() { - if (this.hasReceivedUpdates()) { - for (const watcher of this.secureContextWatchers) { - watcher(this.getLatestSecureContext()); - } - this.secureContextWatchers = []; - } - } - handleCaCertificateUpdate(update) { - this.latestCaUpdate = update; - this.maybeUpdateWatchers(); - } - handleIdentityCertitificateUpdate(update) { - this.latestIdentityUpdate = update; - this.maybeUpdateWatchers(); - } - hasReceivedUpdates() { - if (this.latestCaUpdate === undefined) { - return false; - } - if (this.identityCertificateProvider && this.latestIdentityUpdate === undefined) { - return false; - } - return true; - } - getSecureContext() { - if (this.hasReceivedUpdates()) { - return Promise.resolve(this.getLatestSecureContext()); - } else { - return new Promise((resolve2) => { - this.secureContextWatchers.push(resolve2); - }); - } - } - getLatestSecureContext() { - var _a2, _b; - if (!this.latestCaUpdate) { - return null; - } - if (this.identityCertificateProvider !== null && !this.latestIdentityUpdate) { - return null; - } - try { - return (0, tls_1.createSecureContext)({ - ca: this.latestCaUpdate.caCertificate, - key: (_a2 = this.latestIdentityUpdate) === null || _a2 === undefined ? undefined : _a2.privateKey, - cert: (_b = this.latestIdentityUpdate) === null || _b === undefined ? undefined : _b.certificate, - ciphers: tls_helpers_1.CIPHER_SUITES - }); - } catch (e) { - (0, logging_1.log)(constants_1.LogVerbosity.ERROR, "Failed to createSecureContext with error " + e.message); - return null; - } - } - } - CertificateProviderChannelCredentialsImpl.SecureConnectorImpl = class { - constructor(parent, channelTarget, options, callCredentials) { - this.parent = parent; - this.channelTarget = channelTarget; - this.options = options; - this.callCredentials = callCredentials; - } - connect(socket) { - return new Promise((resolve2, reject) => { - const secureContext = this.parent.getLatestSecureContext(); - if (!secureContext) { - reject(new Error("Failed to load credentials")); - return; - } - if (socket.closed) { - reject(new Error("Socket closed while loading credentials")); - } - const connnectionOptions = getConnectionOptions(secureContext, this.parent.verifyOptions, this.channelTarget, this.options); - const tlsConnectOptions = Object.assign({ socket }, connnectionOptions); - const closeCallback = () => { - reject(new Error("Socket closed")); - }; - const errorCallback = (error48) => { - reject(error48); - }; - const tlsSocket = (0, tls_1.connect)(tlsConnectOptions, () => { - var _a2; - tlsSocket.removeListener("close", closeCallback); - tlsSocket.removeListener("error", errorCallback); - if (((_a2 = this.parent.verifyOptions.rejectUnauthorized) !== null && _a2 !== undefined ? _a2 : true) && !tlsSocket.authorized) { - reject(tlsSocket.authorizationError); - return; - } - resolve2({ - socket: tlsSocket, - secure: true - }); - }); - tlsSocket.once("close", closeCallback); - tlsSocket.once("error", errorCallback); - }); - } - async waitForReady() { - await this.parent.getSecureContext(); - } - getCallCredentials() { - return this.callCredentials; - } - destroy() { - this.parent.unref(); - } - }; - function createCertificateProviderChannelCredentials(caCertificateProvider, identityCertificateProvider, verifyOptions) { - return new CertificateProviderChannelCredentialsImpl(caCertificateProvider, identityCertificateProvider, verifyOptions !== null && verifyOptions !== undefined ? verifyOptions : {}); - } - - class ComposedChannelCredentialsImpl extends ChannelCredentials { - constructor(channelCredentials, callCredentials) { - super(); - this.channelCredentials = channelCredentials; - this.callCredentials = callCredentials; - if (!channelCredentials._isSecure()) { - throw new Error("Cannot compose insecure credentials"); - } - } - compose(callCredentials) { - const combinedCallCredentials = this.callCredentials.compose(callCredentials); - return new ComposedChannelCredentialsImpl(this.channelCredentials, combinedCallCredentials); - } - _isSecure() { - return true; - } - _equals(other) { - if (this === other) { - return true; - } - if (other instanceof ComposedChannelCredentialsImpl) { - return this.channelCredentials._equals(other.channelCredentials) && this.callCredentials._equals(other.callCredentials); - } else { - return false; - } - } - _createSecureConnector(channelTarget, options, callCredentials) { - const combinedCallCredentials = this.callCredentials.compose(callCredentials !== null && callCredentials !== undefined ? callCredentials : call_credentials_1.CallCredentials.createEmpty()); - return this.channelCredentials._createSecureConnector(channelTarget, options, combinedCallCredentials); - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancer.js -var require_load_balancer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createChildChannelControlHelper = createChildChannelControlHelper; - exports.registerLoadBalancerType = registerLoadBalancerType; - exports.registerDefaultLoadBalancerType = registerDefaultLoadBalancerType; - exports.createLoadBalancer = createLoadBalancer; - exports.isLoadBalancerNameRegistered = isLoadBalancerNameRegistered; - exports.parseLoadBalancingConfig = parseLoadBalancingConfig; - exports.getDefaultConfig = getDefaultConfig; - exports.selectLbConfigFromList = selectLbConfigFromList; - var logging_1 = require_logging(); - var constants_1 = require_constants9(); - function createChildChannelControlHelper(parent, overrides) { - var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k; - return { - createSubchannel: (_b = (_a2 = overrides.createSubchannel) === null || _a2 === undefined ? undefined : _a2.bind(overrides)) !== null && _b !== undefined ? _b : parent.createSubchannel.bind(parent), - updateState: (_d = (_c = overrides.updateState) === null || _c === undefined ? undefined : _c.bind(overrides)) !== null && _d !== undefined ? _d : parent.updateState.bind(parent), - requestReresolution: (_f = (_e = overrides.requestReresolution) === null || _e === undefined ? undefined : _e.bind(overrides)) !== null && _f !== undefined ? _f : parent.requestReresolution.bind(parent), - addChannelzChild: (_h = (_g = overrides.addChannelzChild) === null || _g === undefined ? undefined : _g.bind(overrides)) !== null && _h !== undefined ? _h : parent.addChannelzChild.bind(parent), - removeChannelzChild: (_k = (_j = overrides.removeChannelzChild) === null || _j === undefined ? undefined : _j.bind(overrides)) !== null && _k !== undefined ? _k : parent.removeChannelzChild.bind(parent) - }; - } - var registeredLoadBalancerTypes = {}; - var defaultLoadBalancerType = null; - function registerLoadBalancerType(typeName, loadBalancerType, loadBalancingConfigType) { - registeredLoadBalancerTypes[typeName] = { - LoadBalancer: loadBalancerType, - LoadBalancingConfig: loadBalancingConfigType - }; - } - function registerDefaultLoadBalancerType(typeName) { - defaultLoadBalancerType = typeName; - } - function createLoadBalancer(config2, channelControlHelper) { - const typeName = config2.getLoadBalancerName(); - if (typeName in registeredLoadBalancerTypes) { - return new registeredLoadBalancerTypes[typeName].LoadBalancer(channelControlHelper); - } else { - return null; - } - } - function isLoadBalancerNameRegistered(typeName) { - return typeName in registeredLoadBalancerTypes; - } - function parseLoadBalancingConfig(rawConfig) { - const keys = Object.keys(rawConfig); - if (keys.length !== 1) { - throw new Error("Provided load balancing config has multiple conflicting entries"); - } - const typeName = keys[0]; - if (typeName in registeredLoadBalancerTypes) { - try { - return registeredLoadBalancerTypes[typeName].LoadBalancingConfig.createFromJson(rawConfig[typeName]); - } catch (e) { - throw new Error(`${typeName}: ${e.message}`); - } - } else { - throw new Error(`Unrecognized load balancing config name ${typeName}`); - } - } - function getDefaultConfig() { - if (!defaultLoadBalancerType) { - throw new Error("No default load balancer type registered"); - } - return new registeredLoadBalancerTypes[defaultLoadBalancerType].LoadBalancingConfig; - } - function selectLbConfigFromList(configs, fallbackTodefault = false) { - for (const config2 of configs) { - try { - return parseLoadBalancingConfig(config2); - } catch (e) { - (0, logging_1.log)(constants_1.LogVerbosity.DEBUG, "Config parsing failed with error", e.message); - continue; - } - } - if (fallbackTodefault) { - if (defaultLoadBalancerType) { - return new registeredLoadBalancerTypes[defaultLoadBalancerType].LoadBalancingConfig; - } else { - return null; - } - } else { - return null; - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/service-config.js -var require_service_config = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateRetryThrottling = validateRetryThrottling; - exports.validateServiceConfig = validateServiceConfig; - exports.extractAndSelectServiceConfig = extractAndSelectServiceConfig; - var os = __require("os"); - var constants_1 = require_constants9(); - var DURATION_REGEX = /^\d+(\.\d{1,9})?s$/; - var CLIENT_LANGUAGE_STRING = "node"; - function validateName(obj) { - if ("service" in obj && obj.service !== "") { - if (typeof obj.service !== "string") { - throw new Error(`Invalid method config name: invalid service: expected type string, got ${typeof obj.service}`); - } - if ("method" in obj && obj.method !== "") { - if (typeof obj.method !== "string") { - throw new Error(`Invalid method config name: invalid method: expected type string, got ${typeof obj.service}`); - } - return { - service: obj.service, - method: obj.method - }; - } else { - return { - service: obj.service - }; - } - } else { - if ("method" in obj && obj.method !== undefined) { - throw new Error(`Invalid method config name: method set with empty or unset service`); - } - return {}; - } - } - function validateRetryPolicy(obj) { - if (!("maxAttempts" in obj) || !Number.isInteger(obj.maxAttempts) || obj.maxAttempts < 2) { - throw new Error("Invalid method config retry policy: maxAttempts must be an integer at least 2"); - } - if (!("initialBackoff" in obj) || typeof obj.initialBackoff !== "string" || !DURATION_REGEX.test(obj.initialBackoff)) { - throw new Error("Invalid method config retry policy: initialBackoff must be a string consisting of a positive integer or decimal followed by s"); - } - if (!("maxBackoff" in obj) || typeof obj.maxBackoff !== "string" || !DURATION_REGEX.test(obj.maxBackoff)) { - throw new Error("Invalid method config retry policy: maxBackoff must be a string consisting of a positive integer or decimal followed by s"); - } - if (!("backoffMultiplier" in obj) || typeof obj.backoffMultiplier !== "number" || obj.backoffMultiplier <= 0) { - throw new Error("Invalid method config retry policy: backoffMultiplier must be a number greater than 0"); - } - if (!(("retryableStatusCodes" in obj) && Array.isArray(obj.retryableStatusCodes))) { - throw new Error("Invalid method config retry policy: retryableStatusCodes is required"); - } - if (obj.retryableStatusCodes.length === 0) { - throw new Error("Invalid method config retry policy: retryableStatusCodes must be non-empty"); - } - for (const value of obj.retryableStatusCodes) { - if (typeof value === "number") { - if (!Object.values(constants_1.Status).includes(value)) { - throw new Error("Invalid method config retry policy: retryableStatusCodes value not in status code range"); - } - } else if (typeof value === "string") { - if (!Object.values(constants_1.Status).includes(value.toUpperCase())) { - throw new Error("Invalid method config retry policy: retryableStatusCodes value not a status code name"); - } - } else { - throw new Error("Invalid method config retry policy: retryableStatusCodes value must be a string or number"); - } - } - return { - maxAttempts: obj.maxAttempts, - initialBackoff: obj.initialBackoff, - maxBackoff: obj.maxBackoff, - backoffMultiplier: obj.backoffMultiplier, - retryableStatusCodes: obj.retryableStatusCodes - }; - } - function validateHedgingPolicy(obj) { - if (!("maxAttempts" in obj) || !Number.isInteger(obj.maxAttempts) || obj.maxAttempts < 2) { - throw new Error("Invalid method config hedging policy: maxAttempts must be an integer at least 2"); - } - if ("hedgingDelay" in obj && (typeof obj.hedgingDelay !== "string" || !DURATION_REGEX.test(obj.hedgingDelay))) { - throw new Error("Invalid method config hedging policy: hedgingDelay must be a string consisting of a positive integer followed by s"); - } - if ("nonFatalStatusCodes" in obj && Array.isArray(obj.nonFatalStatusCodes)) { - for (const value of obj.nonFatalStatusCodes) { - if (typeof value === "number") { - if (!Object.values(constants_1.Status).includes(value)) { - throw new Error("Invalid method config hedging policy: nonFatalStatusCodes value not in status code range"); - } - } else if (typeof value === "string") { - if (!Object.values(constants_1.Status).includes(value.toUpperCase())) { - throw new Error("Invalid method config hedging policy: nonFatalStatusCodes value not a status code name"); - } - } else { - throw new Error("Invalid method config hedging policy: nonFatalStatusCodes value must be a string or number"); - } - } - } - const result = { - maxAttempts: obj.maxAttempts - }; - if (obj.hedgingDelay) { - result.hedgingDelay = obj.hedgingDelay; - } - if (obj.nonFatalStatusCodes) { - result.nonFatalStatusCodes = obj.nonFatalStatusCodes; - } - return result; - } - function validateMethodConfig(obj) { - var _a2; - const result = { - name: [] - }; - if (!("name" in obj) || !Array.isArray(obj.name)) { - throw new Error("Invalid method config: invalid name array"); - } - for (const name of obj.name) { - result.name.push(validateName(name)); - } - if ("waitForReady" in obj) { - if (typeof obj.waitForReady !== "boolean") { - throw new Error("Invalid method config: invalid waitForReady"); - } - result.waitForReady = obj.waitForReady; - } - if ("timeout" in obj) { - if (typeof obj.timeout === "object") { - if (!("seconds" in obj.timeout) || !(typeof obj.timeout.seconds === "number")) { - throw new Error("Invalid method config: invalid timeout.seconds"); - } - if (!("nanos" in obj.timeout) || !(typeof obj.timeout.nanos === "number")) { - throw new Error("Invalid method config: invalid timeout.nanos"); - } - result.timeout = obj.timeout; - } else if (typeof obj.timeout === "string" && DURATION_REGEX.test(obj.timeout)) { - const timeoutParts = obj.timeout.substring(0, obj.timeout.length - 1).split("."); - result.timeout = { - seconds: timeoutParts[0] | 0, - nanos: ((_a2 = timeoutParts[1]) !== null && _a2 !== undefined ? _a2 : 0) | 0 - }; - } else { - throw new Error("Invalid method config: invalid timeout"); - } - } - if ("maxRequestBytes" in obj) { - if (typeof obj.maxRequestBytes !== "number") { - throw new Error("Invalid method config: invalid maxRequestBytes"); - } - result.maxRequestBytes = obj.maxRequestBytes; - } - if ("maxResponseBytes" in obj) { - if (typeof obj.maxResponseBytes !== "number") { - throw new Error("Invalid method config: invalid maxRequestBytes"); - } - result.maxResponseBytes = obj.maxResponseBytes; - } - if ("retryPolicy" in obj) { - if ("hedgingPolicy" in obj) { - throw new Error("Invalid method config: retryPolicy and hedgingPolicy cannot both be specified"); - } else { - result.retryPolicy = validateRetryPolicy(obj.retryPolicy); - } - } else if ("hedgingPolicy" in obj) { - result.hedgingPolicy = validateHedgingPolicy(obj.hedgingPolicy); - } - return result; - } - function validateRetryThrottling(obj) { - if (!("maxTokens" in obj) || typeof obj.maxTokens !== "number" || obj.maxTokens <= 0 || obj.maxTokens > 1000) { - throw new Error("Invalid retryThrottling: maxTokens must be a number in (0, 1000]"); - } - if (!("tokenRatio" in obj) || typeof obj.tokenRatio !== "number" || obj.tokenRatio <= 0) { - throw new Error("Invalid retryThrottling: tokenRatio must be a number greater than 0"); - } - return { - maxTokens: +obj.maxTokens.toFixed(3), - tokenRatio: +obj.tokenRatio.toFixed(3) - }; - } - function validateLoadBalancingConfig(obj) { - if (!(typeof obj === "object" && obj !== null)) { - throw new Error(`Invalid loadBalancingConfig: unexpected type ${typeof obj}`); - } - const keys = Object.keys(obj); - if (keys.length > 1) { - throw new Error(`Invalid loadBalancingConfig: unexpected multiple keys ${keys}`); - } - if (keys.length === 0) { - throw new Error("Invalid loadBalancingConfig: load balancing policy name required"); - } - return { - [keys[0]]: obj[keys[0]] - }; - } - function validateServiceConfig(obj) { - const result = { - loadBalancingConfig: [], - methodConfig: [] - }; - if ("loadBalancingPolicy" in obj) { - if (typeof obj.loadBalancingPolicy === "string") { - result.loadBalancingPolicy = obj.loadBalancingPolicy; - } else { - throw new Error("Invalid service config: invalid loadBalancingPolicy"); - } - } - if ("loadBalancingConfig" in obj) { - if (Array.isArray(obj.loadBalancingConfig)) { - for (const config2 of obj.loadBalancingConfig) { - result.loadBalancingConfig.push(validateLoadBalancingConfig(config2)); - } - } else { - throw new Error("Invalid service config: invalid loadBalancingConfig"); - } - } - if ("methodConfig" in obj) { - if (Array.isArray(obj.methodConfig)) { - for (const methodConfig of obj.methodConfig) { - result.methodConfig.push(validateMethodConfig(methodConfig)); - } - } - } - if ("retryThrottling" in obj) { - result.retryThrottling = validateRetryThrottling(obj.retryThrottling); - } - const seenMethodNames = []; - for (const methodConfig of result.methodConfig) { - for (const name of methodConfig.name) { - for (const seenName of seenMethodNames) { - if (name.service === seenName.service && name.method === seenName.method) { - throw new Error(`Invalid service config: duplicate name ${name.service}/${name.method}`); - } - } - seenMethodNames.push(name); - } - } - return result; - } - function validateCanaryConfig(obj) { - if (!("serviceConfig" in obj)) { - throw new Error("Invalid service config choice: missing service config"); - } - const result = { - serviceConfig: validateServiceConfig(obj.serviceConfig) - }; - if ("clientLanguage" in obj) { - if (Array.isArray(obj.clientLanguage)) { - result.clientLanguage = []; - for (const lang of obj.clientLanguage) { - if (typeof lang === "string") { - result.clientLanguage.push(lang); - } else { - throw new Error("Invalid service config choice: invalid clientLanguage"); - } - } - } else { - throw new Error("Invalid service config choice: invalid clientLanguage"); - } - } - if ("clientHostname" in obj) { - if (Array.isArray(obj.clientHostname)) { - result.clientHostname = []; - for (const lang of obj.clientHostname) { - if (typeof lang === "string") { - result.clientHostname.push(lang); - } else { - throw new Error("Invalid service config choice: invalid clientHostname"); - } - } - } else { - throw new Error("Invalid service config choice: invalid clientHostname"); - } - } - if ("percentage" in obj) { - if (typeof obj.percentage === "number" && 0 <= obj.percentage && obj.percentage <= 100) { - result.percentage = obj.percentage; - } else { - throw new Error("Invalid service config choice: invalid percentage"); - } - } - const allowedFields = [ - "clientLanguage", - "percentage", - "clientHostname", - "serviceConfig" - ]; - for (const field in obj) { - if (!allowedFields.includes(field)) { - throw new Error(`Invalid service config choice: unexpected field ${field}`); - } - } - return result; - } - function validateAndSelectCanaryConfig(obj, percentage) { - if (!Array.isArray(obj)) { - throw new Error("Invalid service config list"); - } - for (const config2 of obj) { - const validatedConfig = validateCanaryConfig(config2); - if (typeof validatedConfig.percentage === "number" && percentage > validatedConfig.percentage) { - continue; - } - if (Array.isArray(validatedConfig.clientHostname)) { - let hostnameMatched = false; - for (const hostname3 of validatedConfig.clientHostname) { - if (hostname3 === os.hostname()) { - hostnameMatched = true; - } - } - if (!hostnameMatched) { - continue; - } - } - if (Array.isArray(validatedConfig.clientLanguage)) { - let languageMatched = false; - for (const language of validatedConfig.clientLanguage) { - if (language === CLIENT_LANGUAGE_STRING) { - languageMatched = true; - } - } - if (!languageMatched) { - continue; - } - } - return validatedConfig.serviceConfig; - } - throw new Error("No matching service config found"); - } - function extractAndSelectServiceConfig(txtRecord, percentage) { - for (const record3 of txtRecord) { - if (record3.length > 0 && record3[0].startsWith("grpc_config=")) { - const recordString = record3.join("").substring("grpc_config=".length); - const recordJson = JSON.parse(recordString); - return validateAndSelectCanaryConfig(recordJson, percentage); - } - } - return null; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/connectivity-state.js -var require_connectivity_state = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConnectivityState = undefined; - var ConnectivityState; - (function(ConnectivityState2) { - ConnectivityState2[ConnectivityState2["IDLE"] = 0] = "IDLE"; - ConnectivityState2[ConnectivityState2["CONNECTING"] = 1] = "CONNECTING"; - ConnectivityState2[ConnectivityState2["READY"] = 2] = "READY"; - ConnectivityState2[ConnectivityState2["TRANSIENT_FAILURE"] = 3] = "TRANSIENT_FAILURE"; - ConnectivityState2[ConnectivityState2["SHUTDOWN"] = 4] = "SHUTDOWN"; - })(ConnectivityState || (exports.ConnectivityState = ConnectivityState = {})); -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/picker.js -var require_picker = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.QueuePicker = exports.UnavailablePicker = exports.PickResultType = undefined; - var metadata_1 = require_metadata(); - var constants_1 = require_constants9(); - var PickResultType; - (function(PickResultType2) { - PickResultType2[PickResultType2["COMPLETE"] = 0] = "COMPLETE"; - PickResultType2[PickResultType2["QUEUE"] = 1] = "QUEUE"; - PickResultType2[PickResultType2["TRANSIENT_FAILURE"] = 2] = "TRANSIENT_FAILURE"; - PickResultType2[PickResultType2["DROP"] = 3] = "DROP"; - })(PickResultType || (exports.PickResultType = PickResultType = {})); - - class UnavailablePicker { - constructor(status) { - this.status = Object.assign({ code: constants_1.Status.UNAVAILABLE, details: "No connection established", metadata: new metadata_1.Metadata }, status); - } - pick(pickArgs) { - return { - pickResultType: PickResultType.TRANSIENT_FAILURE, - subchannel: null, - status: this.status, - onCallStarted: null, - onCallEnded: null - }; - } - } - exports.UnavailablePicker = UnavailablePicker; - - class QueuePicker { - constructor(loadBalancer, childPicker) { - this.loadBalancer = loadBalancer; - this.childPicker = childPicker; - this.calledExitIdle = false; - } - pick(pickArgs) { - if (!this.calledExitIdle) { - process.nextTick(() => { - this.loadBalancer.exitIdle(); - }); - this.calledExitIdle = true; - } - if (this.childPicker) { - return this.childPicker.pick(pickArgs); - } else { - return { - pickResultType: PickResultType.QUEUE, - subchannel: null, - status: null, - onCallStarted: null, - onCallEnded: null - }; - } - } - } - exports.QueuePicker = QueuePicker; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js -var require_backoff_timeout = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BackoffTimeout = undefined; - var constants_1 = require_constants9(); - var logging = require_logging(); - var TRACER_NAME2 = "backoff"; - var INITIAL_BACKOFF_MS = 1000; - var BACKOFF_MULTIPLIER = 1.6; - var MAX_BACKOFF_MS = 120000; - var BACKOFF_JITTER = 0.2; - function uniformRandom(min, max) { - return Math.random() * (max - min) + min; - } - - class BackoffTimeout { - constructor(callback, options) { - this.callback = callback; - this.initialDelay = INITIAL_BACKOFF_MS; - this.multiplier = BACKOFF_MULTIPLIER; - this.maxDelay = MAX_BACKOFF_MS; - this.jitter = BACKOFF_JITTER; - this.running = false; - this.hasRef = true; - this.startTime = new Date; - this.endTime = new Date; - this.id = BackoffTimeout.getNextId(); - if (options) { - if (options.initialDelay) { - this.initialDelay = options.initialDelay; - } - if (options.multiplier) { - this.multiplier = options.multiplier; - } - if (options.jitter) { - this.jitter = options.jitter; - } - if (options.maxDelay) { - this.maxDelay = options.maxDelay; - } - } - this.trace("constructed initialDelay=" + this.initialDelay + " multiplier=" + this.multiplier + " jitter=" + this.jitter + " maxDelay=" + this.maxDelay); - this.nextDelay = this.initialDelay; - this.timerId = setTimeout(() => {}, 0); - clearTimeout(this.timerId); - } - static getNextId() { - return this.nextId++; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "{" + this.id + "} " + text); - } - runTimer(delay) { - var _a2, _b; - this.trace("runTimer(delay=" + delay + ")"); - this.endTime = this.startTime; - this.endTime.setMilliseconds(this.endTime.getMilliseconds() + delay); - clearTimeout(this.timerId); - this.timerId = setTimeout(() => { - this.trace("timer fired"); - this.running = false; - this.callback(); - }, delay); - if (!this.hasRef) { - (_b = (_a2 = this.timerId).unref) === null || _b === undefined || _b.call(_a2); - } - } - runOnce() { - this.trace("runOnce()"); - this.running = true; - this.startTime = new Date; - this.runTimer(this.nextDelay); - const nextBackoff = Math.min(this.nextDelay * this.multiplier, this.maxDelay); - const jitterMagnitude = nextBackoff * this.jitter; - this.nextDelay = nextBackoff + uniformRandom(-jitterMagnitude, jitterMagnitude); - } - stop() { - this.trace("stop()"); - clearTimeout(this.timerId); - this.running = false; - } - reset() { - this.trace("reset() running=" + this.running); - this.nextDelay = this.initialDelay; - if (this.running) { - const now2 = new Date; - const newEndTime = this.startTime; - newEndTime.setMilliseconds(newEndTime.getMilliseconds() + this.nextDelay); - clearTimeout(this.timerId); - if (now2 < newEndTime) { - this.runTimer(newEndTime.getTime() - now2.getTime()); - } else { - this.running = false; - } - } - } - isRunning() { - return this.running; - } - ref() { - var _a2, _b; - this.hasRef = true; - (_b = (_a2 = this.timerId).ref) === null || _b === undefined || _b.call(_a2); - } - unref() { - var _a2, _b; - this.hasRef = false; - (_b = (_a2 = this.timerId).unref) === null || _b === undefined || _b.call(_a2); - } - getEndTime() { - return this.endTime; - } - } - exports.BackoffTimeout = BackoffTimeout; - BackoffTimeout.nextId = 0; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js -var require_load_balancer_child_handler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ChildLoadBalancerHandler = undefined; - var load_balancer_1 = require_load_balancer(); - var connectivity_state_1 = require_connectivity_state(); - var TYPE_NAME = "child_load_balancer_helper"; - - class ChildLoadBalancerHandler { - constructor(channelControlHelper) { - this.channelControlHelper = channelControlHelper; - this.currentChild = null; - this.pendingChild = null; - this.latestConfig = null; - this.ChildPolicyHelper = class { - constructor(parent) { - this.parent = parent; - this.child = null; - } - createSubchannel(subchannelAddress, subchannelArgs) { - return this.parent.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs); - } - updateState(connectivityState, picker, errorMessage) { - var _a2; - if (this.calledByPendingChild()) { - if (connectivityState === connectivity_state_1.ConnectivityState.CONNECTING) { - return; - } - (_a2 = this.parent.currentChild) === null || _a2 === undefined || _a2.destroy(); - this.parent.currentChild = this.parent.pendingChild; - this.parent.pendingChild = null; - } else if (!this.calledByCurrentChild()) { - return; - } - this.parent.channelControlHelper.updateState(connectivityState, picker, errorMessage); - } - requestReresolution() { - var _a2; - const latestChild = (_a2 = this.parent.pendingChild) !== null && _a2 !== undefined ? _a2 : this.parent.currentChild; - if (this.child === latestChild) { - this.parent.channelControlHelper.requestReresolution(); - } - } - setChild(newChild) { - this.child = newChild; - } - addChannelzChild(child) { - this.parent.channelControlHelper.addChannelzChild(child); - } - removeChannelzChild(child) { - this.parent.channelControlHelper.removeChannelzChild(child); - } - calledByPendingChild() { - return this.child === this.parent.pendingChild; - } - calledByCurrentChild() { - return this.child === this.parent.currentChild; - } - }; - } - configUpdateRequiresNewPolicyInstance(oldConfig, newConfig) { - return oldConfig.getLoadBalancerName() !== newConfig.getLoadBalancerName(); - } - updateAddressList(endpointList, lbConfig, options, resolutionNote) { - let childToUpdate; - if (this.currentChild === null || this.latestConfig === null || this.configUpdateRequiresNewPolicyInstance(this.latestConfig, lbConfig)) { - const newHelper = new this.ChildPolicyHelper(this); - const newChild = (0, load_balancer_1.createLoadBalancer)(lbConfig, newHelper); - newHelper.setChild(newChild); - if (this.currentChild === null) { - this.currentChild = newChild; - childToUpdate = this.currentChild; - } else { - if (this.pendingChild) { - this.pendingChild.destroy(); - } - this.pendingChild = newChild; - childToUpdate = this.pendingChild; - } - } else { - if (this.pendingChild === null) { - childToUpdate = this.currentChild; - } else { - childToUpdate = this.pendingChild; - } - } - this.latestConfig = lbConfig; - return childToUpdate.updateAddressList(endpointList, lbConfig, options, resolutionNote); - } - exitIdle() { - if (this.currentChild) { - this.currentChild.exitIdle(); - if (this.pendingChild) { - this.pendingChild.exitIdle(); - } - } - } - resetBackoff() { - if (this.currentChild) { - this.currentChild.resetBackoff(); - if (this.pendingChild) { - this.pendingChild.resetBackoff(); - } - } - } - destroy() { - if (this.currentChild) { - this.currentChild.destroy(); - this.currentChild = null; - } - if (this.pendingChild) { - this.pendingChild.destroy(); - this.pendingChild = null; - } - } - getTypeName() { - return TYPE_NAME; - } - } - exports.ChildLoadBalancerHandler = ChildLoadBalancerHandler; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js -var require_resolving_load_balancer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ResolvingLoadBalancer = undefined; - var load_balancer_1 = require_load_balancer(); - var service_config_1 = require_service_config(); - var connectivity_state_1 = require_connectivity_state(); - var resolver_1 = require_resolver(); - var picker_1 = require_picker(); - var backoff_timeout_1 = require_backoff_timeout(); - var constants_1 = require_constants9(); - var metadata_1 = require_metadata(); - var logging = require_logging(); - var constants_2 = require_constants9(); - var uri_parser_1 = require_uri_parser(); - var load_balancer_child_handler_1 = require_load_balancer_child_handler(); - var TRACER_NAME2 = "resolving_load_balancer"; - function trace6(text) { - logging.trace(constants_2.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var NAME_MATCH_LEVEL_ORDER = [ - "SERVICE_AND_METHOD", - "SERVICE", - "EMPTY" - ]; - function hasMatchingName(service, method, methodConfig, matchLevel) { - for (const name of methodConfig.name) { - switch (matchLevel) { - case "EMPTY": - if (!name.service && !name.method) { - return true; - } - break; - case "SERVICE": - if (name.service === service && !name.method) { - return true; - } - break; - case "SERVICE_AND_METHOD": - if (name.service === service && name.method === method) { - return true; - } - } - } - return false; - } - function findMatchingConfig(service, method, methodConfigs, matchLevel) { - for (const config2 of methodConfigs) { - if (hasMatchingName(service, method, config2, matchLevel)) { - return config2; - } - } - return null; - } - function getDefaultConfigSelector(serviceConfig) { - return { - invoke(methodName, metadata) { - var _a2, _b; - const splitName = methodName.split("/").filter((x) => x.length > 0); - const service = (_a2 = splitName[0]) !== null && _a2 !== undefined ? _a2 : ""; - const method = (_b = splitName[1]) !== null && _b !== undefined ? _b : ""; - if (serviceConfig && serviceConfig.methodConfig) { - for (const matchLevel of NAME_MATCH_LEVEL_ORDER) { - const matchingConfig = findMatchingConfig(service, method, serviceConfig.methodConfig, matchLevel); - if (matchingConfig) { - return { - methodConfig: matchingConfig, - pickInformation: {}, - status: constants_1.Status.OK, - dynamicFilterFactories: [] - }; - } - } - } - return { - methodConfig: { name: [] }, - pickInformation: {}, - status: constants_1.Status.OK, - dynamicFilterFactories: [] - }; - }, - unref() {} - }; - } - - class ResolvingLoadBalancer { - constructor(target, channelControlHelper, channelOptions, onSuccessfulResolution, onFailedResolution) { - this.target = target; - this.channelControlHelper = channelControlHelper; - this.channelOptions = channelOptions; - this.onSuccessfulResolution = onSuccessfulResolution; - this.onFailedResolution = onFailedResolution; - this.latestChildState = connectivity_state_1.ConnectivityState.IDLE; - this.latestChildPicker = new picker_1.QueuePicker(this); - this.latestChildErrorMessage = null; - this.currentState = connectivity_state_1.ConnectivityState.IDLE; - this.previousServiceConfig = null; - this.continueResolving = false; - if (channelOptions["grpc.service_config"]) { - this.defaultServiceConfig = (0, service_config_1.validateServiceConfig)(JSON.parse(channelOptions["grpc.service_config"])); - } else { - this.defaultServiceConfig = { - loadBalancingConfig: [], - methodConfig: [] - }; - } - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); - this.childLoadBalancer = new load_balancer_child_handler_1.ChildLoadBalancerHandler({ - createSubchannel: channelControlHelper.createSubchannel.bind(channelControlHelper), - requestReresolution: () => { - if (this.backoffTimeout.isRunning()) { - trace6("requestReresolution delayed by backoff timer until " + this.backoffTimeout.getEndTime().toISOString()); - this.continueResolving = true; - } else { - this.updateResolution(); - } - }, - updateState: (newState, picker, errorMessage) => { - this.latestChildState = newState; - this.latestChildPicker = picker; - this.latestChildErrorMessage = errorMessage; - this.updateState(newState, picker, errorMessage); - }, - addChannelzChild: channelControlHelper.addChannelzChild.bind(channelControlHelper), - removeChannelzChild: channelControlHelper.removeChannelzChild.bind(channelControlHelper) - }); - this.innerResolver = (0, resolver_1.createResolver)(target, this.handleResolverResult.bind(this), channelOptions); - const backoffOptions = { - initialDelay: channelOptions["grpc.initial_reconnect_backoff_ms"], - maxDelay: channelOptions["grpc.max_reconnect_backoff_ms"] - }; - this.backoffTimeout = new backoff_timeout_1.BackoffTimeout(() => { - if (this.continueResolving) { - this.updateResolution(); - this.continueResolving = false; - } else { - this.updateState(this.latestChildState, this.latestChildPicker, this.latestChildErrorMessage); - } - }, backoffOptions); - this.backoffTimeout.unref(); - } - handleResolverResult(endpointList, attributes, serviceConfig, resolutionNote) { - var _a2, _b; - this.backoffTimeout.stop(); - this.backoffTimeout.reset(); - let resultAccepted = true; - let workingServiceConfig = null; - if (serviceConfig === null) { - workingServiceConfig = this.defaultServiceConfig; - } else if (serviceConfig.ok) { - workingServiceConfig = serviceConfig.value; - } else { - if (this.previousServiceConfig !== null) { - workingServiceConfig = this.previousServiceConfig; - } else { - resultAccepted = false; - this.handleResolutionFailure(serviceConfig.error); - } - } - if (workingServiceConfig !== null) { - const workingConfigList = (_a2 = workingServiceConfig === null || workingServiceConfig === undefined ? undefined : workingServiceConfig.loadBalancingConfig) !== null && _a2 !== undefined ? _a2 : []; - const loadBalancingConfig = (0, load_balancer_1.selectLbConfigFromList)(workingConfigList, true); - if (loadBalancingConfig === null) { - resultAccepted = false; - this.handleResolutionFailure({ - code: constants_1.Status.UNAVAILABLE, - details: "All load balancer options in service config are not compatible", - metadata: new metadata_1.Metadata - }); - } else { - resultAccepted = this.childLoadBalancer.updateAddressList(endpointList, loadBalancingConfig, Object.assign(Object.assign({}, this.channelOptions), attributes), resolutionNote); - } - } - if (resultAccepted) { - this.onSuccessfulResolution(workingServiceConfig, (_b = attributes[resolver_1.CHANNEL_ARGS_CONFIG_SELECTOR_KEY]) !== null && _b !== undefined ? _b : getDefaultConfigSelector(workingServiceConfig)); - } - return resultAccepted; - } - updateResolution() { - this.innerResolver.updateResolution(); - if (this.currentState === connectivity_state_1.ConnectivityState.IDLE) { - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, this.latestChildPicker, this.latestChildErrorMessage); - } - this.backoffTimeout.runOnce(); - } - updateState(connectivityState, picker, errorMessage) { - trace6((0, uri_parser_1.uriToString)(this.target) + " " + connectivity_state_1.ConnectivityState[this.currentState] + " -> " + connectivity_state_1.ConnectivityState[connectivityState]); - if (connectivityState === connectivity_state_1.ConnectivityState.IDLE) { - picker = new picker_1.QueuePicker(this, picker); - } - this.currentState = connectivityState; - this.channelControlHelper.updateState(connectivityState, picker, errorMessage); - } - handleResolutionFailure(error48) { - if (this.latestChildState === connectivity_state_1.ConnectivityState.IDLE) { - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(error48), error48.details); - this.onFailedResolution(error48); - } - } - exitIdle() { - if (this.currentState === connectivity_state_1.ConnectivityState.IDLE || this.currentState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) { - if (this.backoffTimeout.isRunning()) { - this.continueResolving = true; - } else { - this.updateResolution(); - } - } - this.childLoadBalancer.exitIdle(); - } - updateAddressList(endpointList, lbConfig) { - throw new Error("updateAddressList not supported on ResolvingLoadBalancer"); - } - resetBackoff() { - this.backoffTimeout.reset(); - this.childLoadBalancer.resetBackoff(); - } - destroy() { - this.childLoadBalancer.destroy(); - this.innerResolver.destroy(); - this.backoffTimeout.reset(); - this.backoffTimeout.stop(); - this.latestChildState = connectivity_state_1.ConnectivityState.IDLE; - this.latestChildPicker = new picker_1.QueuePicker(this); - this.currentState = connectivity_state_1.ConnectivityState.IDLE; - this.previousServiceConfig = null; - this.continueResolving = false; - } - getTypeName() { - return "resolving_load_balancer"; - } - } - exports.ResolvingLoadBalancer = ResolvingLoadBalancer; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/channel-options.js -var require_channel_options = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.recognizedOptions = undefined; - exports.channelOptionsEqual = channelOptionsEqual; - exports.recognizedOptions = { - "grpc.ssl_target_name_override": true, - "grpc.primary_user_agent": true, - "grpc.secondary_user_agent": true, - "grpc.default_authority": true, - "grpc.keepalive_time_ms": true, - "grpc.keepalive_timeout_ms": true, - "grpc.keepalive_permit_without_calls": true, - "grpc.service_config": true, - "grpc.max_concurrent_streams": true, - "grpc.initial_reconnect_backoff_ms": true, - "grpc.max_reconnect_backoff_ms": true, - "grpc.use_local_subchannel_pool": true, - "grpc.max_send_message_length": true, - "grpc.max_receive_message_length": true, - "grpc.enable_http_proxy": true, - "grpc.enable_channelz": true, - "grpc.dns_min_time_between_resolutions_ms": true, - "grpc.enable_retries": true, - "grpc.per_rpc_retry_buffer_size": true, - "grpc.retry_buffer_size": true, - "grpc.max_connection_age_ms": true, - "grpc.max_connection_age_grace_ms": true, - "grpc-node.max_session_memory": true, - "grpc.service_config_disable_resolution": true, - "grpc.client_idle_timeout_ms": true, - "grpc-node.tls_enable_trace": true, - "grpc.lb.ring_hash.ring_size_cap": true, - "grpc-node.retry_max_attempts_limit": true, - "grpc-node.flow_control_window": true, - "grpc.server_call_metric_recording": true - }; - function channelOptionsEqual(options1, options2) { - const keys1 = Object.keys(options1).sort(); - const keys2 = Object.keys(options2).sort(); - if (keys1.length !== keys2.length) { - return false; - } - for (let i = 0;i < keys1.length; i += 1) { - if (keys1[i] !== keys2[i]) { - return false; - } - if (options1[keys1[i]] !== options2[keys2[i]]) { - return false; - } - } - return true; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/subchannel-address.js -var require_subchannel_address = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EndpointMap = undefined; - exports.isTcpSubchannelAddress = isTcpSubchannelAddress; - exports.subchannelAddressEqual = subchannelAddressEqual; - exports.subchannelAddressToString = subchannelAddressToString; - exports.stringToSubchannelAddress = stringToSubchannelAddress; - exports.endpointEqual = endpointEqual; - exports.endpointToString = endpointToString; - exports.endpointHasAddress = endpointHasAddress; - var net_1 = __require("net"); - function isTcpSubchannelAddress(address) { - return "port" in address; - } - function subchannelAddressEqual(address1, address2) { - if (!address1 && !address2) { - return true; - } - if (!address1 || !address2) { - return false; - } - if (isTcpSubchannelAddress(address1)) { - return isTcpSubchannelAddress(address2) && address1.host === address2.host && address1.port === address2.port; - } else { - return !isTcpSubchannelAddress(address2) && address1.path === address2.path; - } - } - function subchannelAddressToString(address) { - if (isTcpSubchannelAddress(address)) { - if ((0, net_1.isIPv6)(address.host)) { - return "[" + address.host + "]:" + address.port; - } else { - return address.host + ":" + address.port; - } - } else { - return address.path; - } - } - var DEFAULT_PORT = 443; - function stringToSubchannelAddress(addressString, port) { - if ((0, net_1.isIP)(addressString)) { - return { - host: addressString, - port: port !== null && port !== undefined ? port : DEFAULT_PORT - }; - } else { - return { - path: addressString - }; - } - } - function endpointEqual(endpoint1, endpoint2) { - if (endpoint1.addresses.length !== endpoint2.addresses.length) { - return false; - } - for (let i = 0;i < endpoint1.addresses.length; i++) { - if (!subchannelAddressEqual(endpoint1.addresses[i], endpoint2.addresses[i])) { - return false; - } - } - return true; - } - function endpointToString(endpoint) { - return "[" + endpoint.addresses.map(subchannelAddressToString).join(", ") + "]"; - } - function endpointHasAddress(endpoint, expectedAddress) { - for (const address of endpoint.addresses) { - if (subchannelAddressEqual(address, expectedAddress)) { - return true; - } - } - return false; - } - function endpointEqualUnordered(endpoint1, endpoint2) { - if (endpoint1.addresses.length !== endpoint2.addresses.length) { - return false; - } - for (const address1 of endpoint1.addresses) { - let matchFound = false; - for (const address2 of endpoint2.addresses) { - if (subchannelAddressEqual(address1, address2)) { - matchFound = true; - break; - } - } - if (!matchFound) { - return false; - } - } - return true; - } - - class EndpointMap { - constructor() { - this.map = new Set; - } - get size() { - return this.map.size; - } - getForSubchannelAddress(address) { - for (const entry of this.map) { - if (endpointHasAddress(entry.key, address)) { - return entry.value; - } - } - return; - } - deleteMissing(endpoints) { - const removedValues = []; - for (const entry of this.map) { - let foundEntry = false; - for (const endpoint of endpoints) { - if (endpointEqualUnordered(endpoint, entry.key)) { - foundEntry = true; - } - } - if (!foundEntry) { - removedValues.push(entry.value); - this.map.delete(entry); - } - } - return removedValues; - } - get(endpoint) { - for (const entry of this.map) { - if (endpointEqualUnordered(endpoint, entry.key)) { - return entry.value; - } - } - return; - } - set(endpoint, mapEntry) { - for (const entry of this.map) { - if (endpointEqualUnordered(endpoint, entry.key)) { - entry.value = mapEntry; - return; - } - } - this.map.add({ key: endpoint, value: mapEntry }); - } - delete(endpoint) { - for (const entry of this.map) { - if (endpointEqualUnordered(endpoint, entry.key)) { - this.map.delete(entry); - return; - } - } - } - has(endpoint) { - for (const entry of this.map) { - if (endpointEqualUnordered(endpoint, entry.key)) { - return true; - } - } - return false; - } - clear() { - this.map.clear(); - } - *keys() { - for (const entry of this.map) { - yield entry.key; - } - } - *values() { - for (const entry of this.map) { - yield entry.value; - } - } - *entries() { - for (const entry of this.map) { - yield [entry.key, entry.value]; - } - } - } - exports.EndpointMap = EndpointMap; -}); - -// ../../../../node_modules/.bun/@js-sdsl+ordered-map@4.4.2/node_modules/@js-sdsl/ordered-map/dist/cjs/index.js -var require_cjs = __commonJS((exports) => { - Object.defineProperty(exports, "t", { - value: true - }); - - class TreeNode { - constructor(t, e, s2 = 1) { - this.i = undefined; - this.h = undefined; - this.o = undefined; - this.u = t; - this.l = e; - this.p = s2; - } - I() { - let t = this; - const e = t.o.o === t; - if (e && t.p === 1) { - t = t.h; - } else if (t.i) { - t = t.i; - while (t.h) { - t = t.h; - } - } else { - if (e) { - return t.o; - } - let s2 = t.o; - while (s2.i === t) { - t = s2; - s2 = t.o; - } - t = s2; - } - return t; - } - B() { - let t = this; - if (t.h) { - t = t.h; - while (t.i) { - t = t.i; - } - return t; - } else { - let e = t.o; - while (e.h === t) { - t = e; - e = t.o; - } - if (t.h !== e) { - return e; - } else - return t; - } - } - _() { - const t = this.o; - const e = this.h; - const s2 = e.i; - if (t.o === this) - t.o = e; - else if (t.i === this) - t.i = e; - else - t.h = e; - e.o = t; - e.i = this; - this.o = e; - this.h = s2; - if (s2) - s2.o = this; - return e; - } - g() { - const t = this.o; - const e = this.i; - const s2 = e.h; - if (t.o === this) - t.o = e; - else if (t.i === this) - t.i = e; - else - t.h = e; - e.o = t; - e.h = this; - this.o = e; - this.i = s2; - if (s2) - s2.o = this; - return e; - } - } - - class TreeNodeEnableIndex extends TreeNode { - constructor() { - super(...arguments); - this.M = 1; - } - _() { - const t = super._(); - this.O(); - t.O(); - return t; - } - g() { - const t = super.g(); - this.O(); - t.O(); - return t; - } - O() { - this.M = 1; - if (this.i) { - this.M += this.i.M; - } - if (this.h) { - this.M += this.h.M; - } - } - } - - class ContainerIterator { - constructor(t = 0) { - this.iteratorType = t; - } - equals(t) { - return this.T === t.T; - } - } - - class Base { - constructor() { - this.m = 0; - } - get length() { - return this.m; - } - size() { - return this.m; - } - empty() { - return this.m === 0; - } - } - - class Container extends Base { - } - function throwIteratorAccessError() { - throw new RangeError("Iterator access denied!"); - } - - class TreeContainer extends Container { - constructor(t = function(t2, e2) { - if (t2 < e2) - return -1; - if (t2 > e2) - return 1; - return 0; - }, e = false) { - super(); - this.v = undefined; - this.A = t; - this.enableIndex = e; - this.N = e ? TreeNodeEnableIndex : TreeNode; - this.C = new this.N; - } - R(t, e) { - let s2 = this.C; - while (t) { - const i = this.A(t.u, e); - if (i < 0) { - t = t.h; - } else if (i > 0) { - s2 = t; - t = t.i; - } else - return t; - } - return s2; - } - K(t, e) { - let s2 = this.C; - while (t) { - const i = this.A(t.u, e); - if (i <= 0) { - t = t.h; - } else { - s2 = t; - t = t.i; - } - } - return s2; - } - L(t, e) { - let s2 = this.C; - while (t) { - const i = this.A(t.u, e); - if (i < 0) { - s2 = t; - t = t.h; - } else if (i > 0) { - t = t.i; - } else - return t; - } - return s2; - } - k(t, e) { - let s2 = this.C; - while (t) { - const i = this.A(t.u, e); - if (i < 0) { - s2 = t; - t = t.h; - } else { - t = t.i; - } - } - return s2; - } - P(t) { - while (true) { - const e = t.o; - if (e === this.C) - return; - if (t.p === 1) { - t.p = 0; - return; - } - if (t === e.i) { - const s2 = e.h; - if (s2.p === 1) { - s2.p = 0; - e.p = 1; - if (e === this.v) { - this.v = e._(); - } else - e._(); - } else { - if (s2.h && s2.h.p === 1) { - s2.p = e.p; - e.p = 0; - s2.h.p = 0; - if (e === this.v) { - this.v = e._(); - } else - e._(); - return; - } else if (s2.i && s2.i.p === 1) { - s2.p = 1; - s2.i.p = 0; - s2.g(); - } else { - s2.p = 1; - t = e; - } - } - } else { - const s2 = e.i; - if (s2.p === 1) { - s2.p = 0; - e.p = 1; - if (e === this.v) { - this.v = e.g(); - } else - e.g(); - } else { - if (s2.i && s2.i.p === 1) { - s2.p = e.p; - e.p = 0; - s2.i.p = 0; - if (e === this.v) { - this.v = e.g(); - } else - e.g(); - return; - } else if (s2.h && s2.h.p === 1) { - s2.p = 1; - s2.h.p = 0; - s2._(); - } else { - s2.p = 1; - t = e; - } - } - } - } - } - S(t) { - if (this.m === 1) { - this.clear(); - return; - } - let e = t; - while (e.i || e.h) { - if (e.h) { - e = e.h; - while (e.i) - e = e.i; - } else { - e = e.i; - } - const s3 = t.u; - t.u = e.u; - e.u = s3; - const i = t.l; - t.l = e.l; - e.l = i; - t = e; - } - if (this.C.i === e) { - this.C.i = e.o; - } else if (this.C.h === e) { - this.C.h = e.o; - } - this.P(e); - let s2 = e.o; - if (e === s2.i) { - s2.i = undefined; - } else - s2.h = undefined; - this.m -= 1; - this.v.p = 0; - if (this.enableIndex) { - while (s2 !== this.C) { - s2.M -= 1; - s2 = s2.o; - } - } - } - U(t) { - const e = typeof t === "number" ? t : undefined; - const s2 = typeof t === "function" ? t : undefined; - const i = typeof t === "undefined" ? [] : undefined; - let r = 0; - let n = this.v; - const h = []; - while (h.length || n) { - if (n) { - h.push(n); - n = n.i; - } else { - n = h.pop(); - if (r === e) - return n; - i && i.push(n); - s2 && s2(n, r, this); - r += 1; - n = n.h; - } - } - return i; - } - j(t) { - while (true) { - const e = t.o; - if (e.p === 0) - return; - const s2 = e.o; - if (e === s2.i) { - const i = s2.h; - if (i && i.p === 1) { - i.p = e.p = 0; - if (s2 === this.v) - return; - s2.p = 1; - t = s2; - continue; - } else if (t === e.h) { - t.p = 0; - if (t.i) { - t.i.o = e; - } - if (t.h) { - t.h.o = s2; - } - e.h = t.i; - s2.i = t.h; - t.i = e; - t.h = s2; - if (s2 === this.v) { - this.v = t; - this.C.o = t; - } else { - const e2 = s2.o; - if (e2.i === s2) { - e2.i = t; - } else - e2.h = t; - } - t.o = s2.o; - e.o = t; - s2.o = t; - s2.p = 1; - } else { - e.p = 0; - if (s2 === this.v) { - this.v = s2.g(); - } else - s2.g(); - s2.p = 1; - return; - } - } else { - const i = s2.i; - if (i && i.p === 1) { - i.p = e.p = 0; - if (s2 === this.v) - return; - s2.p = 1; - t = s2; - continue; - } else if (t === e.i) { - t.p = 0; - if (t.i) { - t.i.o = s2; - } - if (t.h) { - t.h.o = e; - } - s2.h = t.i; - e.i = t.h; - t.i = s2; - t.h = e; - if (s2 === this.v) { - this.v = t; - this.C.o = t; - } else { - const e2 = s2.o; - if (e2.i === s2) { - e2.i = t; - } else - e2.h = t; - } - t.o = s2.o; - e.o = t; - s2.o = t; - s2.p = 1; - } else { - e.p = 0; - if (s2 === this.v) { - this.v = s2._(); - } else - s2._(); - s2.p = 1; - return; - } - } - if (this.enableIndex) { - e.O(); - s2.O(); - t.O(); - } - return; - } - } - q(t, e, s2) { - if (this.v === undefined) { - this.m += 1; - this.v = new this.N(t, e, 0); - this.v.o = this.C; - this.C.o = this.C.i = this.C.h = this.v; - return this.m; - } - let i; - const r = this.C.i; - const n = this.A(r.u, t); - if (n === 0) { - r.l = e; - return this.m; - } else if (n > 0) { - r.i = new this.N(t, e); - r.i.o = r; - i = r.i; - this.C.i = i; - } else { - const r2 = this.C.h; - const n2 = this.A(r2.u, t); - if (n2 === 0) { - r2.l = e; - return this.m; - } else if (n2 < 0) { - r2.h = new this.N(t, e); - r2.h.o = r2; - i = r2.h; - this.C.h = i; - } else { - if (s2 !== undefined) { - const r3 = s2.T; - if (r3 !== this.C) { - const s3 = this.A(r3.u, t); - if (s3 === 0) { - r3.l = e; - return this.m; - } else if (s3 > 0) { - const s4 = r3.I(); - const n3 = this.A(s4.u, t); - if (n3 === 0) { - s4.l = e; - return this.m; - } else if (n3 < 0) { - i = new this.N(t, e); - if (s4.h === undefined) { - s4.h = i; - i.o = s4; - } else { - r3.i = i; - i.o = r3; - } - } - } - } - } - if (i === undefined) { - i = this.v; - while (true) { - const s3 = this.A(i.u, t); - if (s3 > 0) { - if (i.i === undefined) { - i.i = new this.N(t, e); - i.i.o = i; - i = i.i; - break; - } - i = i.i; - } else if (s3 < 0) { - if (i.h === undefined) { - i.h = new this.N(t, e); - i.h.o = i; - i = i.h; - break; - } - i = i.h; - } else { - i.l = e; - return this.m; - } - } - } - } - } - if (this.enableIndex) { - let t2 = i.o; - while (t2 !== this.C) { - t2.M += 1; - t2 = t2.o; - } - } - this.j(i); - this.m += 1; - return this.m; - } - H(t, e) { - while (t) { - const s2 = this.A(t.u, e); - if (s2 < 0) { - t = t.h; - } else if (s2 > 0) { - t = t.i; - } else - return t; - } - return t || this.C; - } - clear() { - this.m = 0; - this.v = undefined; - this.C.o = undefined; - this.C.i = this.C.h = undefined; - } - updateKeyByIterator(t, e) { - const s2 = t.T; - if (s2 === this.C) { - throwIteratorAccessError(); - } - if (this.m === 1) { - s2.u = e; - return true; - } - const i = s2.B().u; - if (s2 === this.C.i) { - if (this.A(i, e) > 0) { - s2.u = e; - return true; - } - return false; - } - const r = s2.I().u; - if (s2 === this.C.h) { - if (this.A(r, e) < 0) { - s2.u = e; - return true; - } - return false; - } - if (this.A(r, e) >= 0 || this.A(i, e) <= 0) - return false; - s2.u = e; - return true; - } - eraseElementByPos(t) { - if (t < 0 || t > this.m - 1) { - throw new RangeError; - } - const e = this.U(t); - this.S(e); - return this.m; - } - eraseElementByKey(t) { - if (this.m === 0) - return false; - const e = this.H(this.v, t); - if (e === this.C) - return false; - this.S(e); - return true; - } - eraseElementByIterator(t) { - const e = t.T; - if (e === this.C) { - throwIteratorAccessError(); - } - const s2 = e.h === undefined; - const i = t.iteratorType === 0; - if (i) { - if (s2) - t.next(); - } else { - if (!s2 || e.i === undefined) - t.next(); - } - this.S(e); - return t; - } - getHeight() { - if (this.m === 0) - return 0; - function traversal(t) { - if (!t) - return 0; - return Math.max(traversal(t.i), traversal(t.h)) + 1; - } - return traversal(this.v); - } - } - - class TreeIterator extends ContainerIterator { - constructor(t, e, s2) { - super(s2); - this.T = t; - this.C = e; - if (this.iteratorType === 0) { - this.pre = function() { - if (this.T === this.C.i) { - throwIteratorAccessError(); - } - this.T = this.T.I(); - return this; - }; - this.next = function() { - if (this.T === this.C) { - throwIteratorAccessError(); - } - this.T = this.T.B(); - return this; - }; - } else { - this.pre = function() { - if (this.T === this.C.h) { - throwIteratorAccessError(); - } - this.T = this.T.B(); - return this; - }; - this.next = function() { - if (this.T === this.C) { - throwIteratorAccessError(); - } - this.T = this.T.I(); - return this; - }; - } - } - get index() { - let t = this.T; - const e = this.C.o; - if (t === this.C) { - if (e) { - return e.M - 1; - } - return 0; - } - let s2 = 0; - if (t.i) { - s2 += t.i.M; - } - while (t !== e) { - const e2 = t.o; - if (t === e2.h) { - s2 += 1; - if (e2.i) { - s2 += e2.i.M; - } - } - t = e2; - } - return s2; - } - isAccessible() { - return this.T !== this.C; - } - } - - class OrderedMapIterator extends TreeIterator { - constructor(t, e, s2, i) { - super(t, e, i); - this.container = s2; - } - get pointer() { - if (this.T === this.C) { - throwIteratorAccessError(); - } - const t = this; - return new Proxy([], { - get(e, s2) { - if (s2 === "0") - return t.T.u; - else if (s2 === "1") - return t.T.l; - e[0] = t.T.u; - e[1] = t.T.l; - return e[s2]; - }, - set(e, s2, i) { - if (s2 !== "1") { - throw new TypeError("prop must be 1"); - } - t.T.l = i; - return true; - } - }); - } - copy() { - return new OrderedMapIterator(this.T, this.C, this.container, this.iteratorType); - } - } - - class OrderedMap extends TreeContainer { - constructor(t = [], e, s2) { - super(e, s2); - const i = this; - t.forEach(function(t2) { - i.setElement(t2[0], t2[1]); - }); - } - begin() { - return new OrderedMapIterator(this.C.i || this.C, this.C, this); - } - end() { - return new OrderedMapIterator(this.C, this.C, this); - } - rBegin() { - return new OrderedMapIterator(this.C.h || this.C, this.C, this, 1); - } - rEnd() { - return new OrderedMapIterator(this.C, this.C, this, 1); - } - front() { - if (this.m === 0) - return; - const t = this.C.i; - return [t.u, t.l]; - } - back() { - if (this.m === 0) - return; - const t = this.C.h; - return [t.u, t.l]; - } - lowerBound(t) { - const e = this.R(this.v, t); - return new OrderedMapIterator(e, this.C, this); - } - upperBound(t) { - const e = this.K(this.v, t); - return new OrderedMapIterator(e, this.C, this); - } - reverseLowerBound(t) { - const e = this.L(this.v, t); - return new OrderedMapIterator(e, this.C, this); - } - reverseUpperBound(t) { - const e = this.k(this.v, t); - return new OrderedMapIterator(e, this.C, this); - } - forEach(t) { - this.U(function(e, s2, i) { - t([e.u, e.l], s2, i); - }); - } - setElement(t, e, s2) { - return this.q(t, e, s2); - } - getElementByPos(t) { - if (t < 0 || t > this.m - 1) { - throw new RangeError; - } - const e = this.U(t); - return [e.u, e.l]; - } - find(t) { - const e = this.H(this.v, t); - return new OrderedMapIterator(e, this.C, this); - } - getElementByKey(t) { - const e = this.H(this.v, t); - return e.l; - } - union(t) { - const e = this; - t.forEach(function(t2) { - e.setElement(t2[0], t2[1]); - }); - return this.m; - } - *[Symbol.iterator]() { - const t = this.m; - const e = this.U(); - for (let s2 = 0;s2 < t; ++s2) { - const t2 = e[s2]; - yield [t2.u, t2.l]; - } - } - } - exports.OrderedMap = OrderedMap; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/admin.js -var require_admin = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.registerAdminService = registerAdminService; - exports.addAdminServicesToServer = addAdminServicesToServer; - var registeredAdminServices = []; - function registerAdminService(getServiceDefinition, getHandlers) { - registeredAdminServices.push({ getServiceDefinition, getHandlers }); - } - function addAdminServicesToServer(server) { - for (const { getServiceDefinition, getHandlers } of registeredAdminServices) { - server.addService(getServiceDefinition(), getHandlers()); - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/call.js -var require_call = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ClientDuplexStreamImpl = exports.ClientWritableStreamImpl = exports.ClientReadableStreamImpl = exports.ClientUnaryCallImpl = undefined; - exports.callErrorFromStatus = callErrorFromStatus; - var events_1 = __require("events"); - var stream_1 = __require("stream"); - var constants_1 = require_constants9(); - function callErrorFromStatus(status, callerStack) { - const message = `${status.code} ${constants_1.Status[status.code]}: ${status.details}`; - const error48 = new Error(message); - const stack = `${error48.stack} -for call at -${callerStack}`; - return Object.assign(new Error(message), status, { stack }); - } - - class ClientUnaryCallImpl extends events_1.EventEmitter { - constructor() { - super(); - } - cancel() { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.cancelWithStatus(constants_1.Status.CANCELLED, "Cancelled on client"); - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : "unknown"; - } - getAuthContext() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getAuthContext()) !== null && _b !== undefined ? _b : null; - } - } - exports.ClientUnaryCallImpl = ClientUnaryCallImpl; - - class ClientReadableStreamImpl extends stream_1.Readable { - constructor(deserialize) { - super({ objectMode: true }); - this.deserialize = deserialize; - } - cancel() { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.cancelWithStatus(constants_1.Status.CANCELLED, "Cancelled on client"); - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : "unknown"; - } - getAuthContext() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getAuthContext()) !== null && _b !== undefined ? _b : null; - } - _read(_size2) { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.startRead(); - } - } - exports.ClientReadableStreamImpl = ClientReadableStreamImpl; - - class ClientWritableStreamImpl extends stream_1.Writable { - constructor(serialize2) { - super({ objectMode: true }); - this.serialize = serialize2; - } - cancel() { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.cancelWithStatus(constants_1.Status.CANCELLED, "Cancelled on client"); - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : "unknown"; - } - getAuthContext() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getAuthContext()) !== null && _b !== undefined ? _b : null; - } - _write(chunk, encoding, cb) { - var _a2; - const context8 = { - callback: cb - }; - const flags = Number(encoding); - if (!Number.isNaN(flags)) { - context8.flags = flags; - } - (_a2 = this.call) === null || _a2 === undefined || _a2.sendMessageWithContext(context8, chunk); - } - _final(cb) { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.halfClose(); - cb(); - } - } - exports.ClientWritableStreamImpl = ClientWritableStreamImpl; - - class ClientDuplexStreamImpl extends stream_1.Duplex { - constructor(serialize2, deserialize) { - super({ objectMode: true }); - this.serialize = serialize2; - this.deserialize = deserialize; - } - cancel() { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.cancelWithStatus(constants_1.Status.CANCELLED, "Cancelled on client"); - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : "unknown"; - } - getAuthContext() { - var _a2, _b; - return (_b = (_a2 = this.call) === null || _a2 === undefined ? undefined : _a2.getAuthContext()) !== null && _b !== undefined ? _b : null; - } - _read(_size2) { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.startRead(); - } - _write(chunk, encoding, cb) { - var _a2; - const context8 = { - callback: cb - }; - const flags = Number(encoding); - if (!Number.isNaN(flags)) { - context8.flags = flags; - } - (_a2 = this.call) === null || _a2 === undefined || _a2.sendMessageWithContext(context8, chunk); - } - _final(cb) { - var _a2; - (_a2 = this.call) === null || _a2 === undefined || _a2.halfClose(); - cb(); - } - } - exports.ClientDuplexStreamImpl = ClientDuplexStreamImpl; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/call-interface.js -var require_call_interface = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InterceptingListenerImpl = undefined; - exports.statusOrFromValue = statusOrFromValue; - exports.statusOrFromError = statusOrFromError; - exports.isInterceptingListener = isInterceptingListener; - var metadata_1 = require_metadata(); - function statusOrFromValue(value) { - return { - ok: true, - value - }; - } - function statusOrFromError(error48) { - var _a2; - return { - ok: false, - error: Object.assign(Object.assign({}, error48), { metadata: (_a2 = error48.metadata) !== null && _a2 !== undefined ? _a2 : new metadata_1.Metadata }) - }; - } - function isInterceptingListener(listener) { - return listener.onReceiveMetadata !== undefined && listener.onReceiveMetadata.length === 1; - } - - class InterceptingListenerImpl { - constructor(listener, nextListener) { - this.listener = listener; - this.nextListener = nextListener; - this.processingMetadata = false; - this.hasPendingMessage = false; - this.processingMessage = false; - this.pendingStatus = null; - } - processPendingMessage() { - if (this.hasPendingMessage) { - this.nextListener.onReceiveMessage(this.pendingMessage); - this.pendingMessage = null; - this.hasPendingMessage = false; - } - } - processPendingStatus() { - if (this.pendingStatus) { - this.nextListener.onReceiveStatus(this.pendingStatus); - } - } - onReceiveMetadata(metadata) { - this.processingMetadata = true; - this.listener.onReceiveMetadata(metadata, (metadata2) => { - this.processingMetadata = false; - this.nextListener.onReceiveMetadata(metadata2); - this.processPendingMessage(); - this.processPendingStatus(); - }); - } - onReceiveMessage(message) { - this.processingMessage = true; - this.listener.onReceiveMessage(message, (msg) => { - this.processingMessage = false; - if (this.processingMetadata) { - this.pendingMessage = msg; - this.hasPendingMessage = true; - } else { - this.nextListener.onReceiveMessage(msg); - this.processPendingStatus(); - } - }); - } - onReceiveStatus(status) { - this.listener.onReceiveStatus(status, (processedStatus) => { - if (this.processingMetadata || this.processingMessage) { - this.pendingStatus = processedStatus; - } else { - this.nextListener.onReceiveStatus(processedStatus); - } - }); - } - } - exports.InterceptingListenerImpl = InterceptingListenerImpl; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/client-interceptors.js -var require_client_interceptors = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InterceptingCall = exports.RequesterBuilder = exports.ListenerBuilder = exports.InterceptorConfigurationError = undefined; - exports.getInterceptingCall = getInterceptingCall; - var metadata_1 = require_metadata(); - var call_interface_1 = require_call_interface(); - var constants_1 = require_constants9(); - var error_1 = require_error2(); - - class InterceptorConfigurationError extends Error { - constructor(message) { - super(message); - this.name = "InterceptorConfigurationError"; - Error.captureStackTrace(this, InterceptorConfigurationError); - } - } - exports.InterceptorConfigurationError = InterceptorConfigurationError; - - class ListenerBuilder { - constructor() { - this.metadata = undefined; - this.message = undefined; - this.status = undefined; - } - withOnReceiveMetadata(onReceiveMetadata) { - this.metadata = onReceiveMetadata; - return this; - } - withOnReceiveMessage(onReceiveMessage) { - this.message = onReceiveMessage; - return this; - } - withOnReceiveStatus(onReceiveStatus) { - this.status = onReceiveStatus; - return this; - } - build() { - return { - onReceiveMetadata: this.metadata, - onReceiveMessage: this.message, - onReceiveStatus: this.status - }; - } - } - exports.ListenerBuilder = ListenerBuilder; - - class RequesterBuilder { - constructor() { - this.start = undefined; - this.message = undefined; - this.halfClose = undefined; - this.cancel = undefined; - } - withStart(start) { - this.start = start; - return this; - } - withSendMessage(sendMessage) { - this.message = sendMessage; - return this; - } - withHalfClose(halfClose) { - this.halfClose = halfClose; - return this; - } - withCancel(cancel) { - this.cancel = cancel; - return this; - } - build() { - return { - start: this.start, - sendMessage: this.message, - halfClose: this.halfClose, - cancel: this.cancel - }; - } - } - exports.RequesterBuilder = RequesterBuilder; - var defaultListener = { - onReceiveMetadata: (metadata, next) => { - next(metadata); - }, - onReceiveMessage: (message, next) => { - next(message); - }, - onReceiveStatus: (status, next) => { - next(status); - } - }; - var defaultRequester = { - start: (metadata, listener, next) => { - next(metadata, listener); - }, - sendMessage: (message, next) => { - next(message); - }, - halfClose: (next) => { - next(); - }, - cancel: (next) => { - next(); - } - }; - - class InterceptingCall { - constructor(nextCall, requester) { - var _a2, _b, _c, _d; - this.nextCall = nextCall; - this.processingMetadata = false; - this.pendingMessageContext = null; - this.processingMessage = false; - this.pendingHalfClose = false; - if (requester) { - this.requester = { - start: (_a2 = requester.start) !== null && _a2 !== undefined ? _a2 : defaultRequester.start, - sendMessage: (_b = requester.sendMessage) !== null && _b !== undefined ? _b : defaultRequester.sendMessage, - halfClose: (_c = requester.halfClose) !== null && _c !== undefined ? _c : defaultRequester.halfClose, - cancel: (_d = requester.cancel) !== null && _d !== undefined ? _d : defaultRequester.cancel - }; - } else { - this.requester = defaultRequester; - } - } - cancelWithStatus(status, details) { - this.requester.cancel(() => { - this.nextCall.cancelWithStatus(status, details); - }); - } - getPeer() { - return this.nextCall.getPeer(); - } - processPendingMessage() { - if (this.pendingMessageContext) { - this.nextCall.sendMessageWithContext(this.pendingMessageContext, this.pendingMessage); - this.pendingMessageContext = null; - this.pendingMessage = null; - } - } - processPendingHalfClose() { - if (this.pendingHalfClose) { - this.nextCall.halfClose(); - } - } - start(metadata, interceptingListener) { - var _a2, _b, _c, _d, _e, _f; - const fullInterceptingListener = { - onReceiveMetadata: (_b = (_a2 = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveMetadata) === null || _a2 === undefined ? undefined : _a2.bind(interceptingListener)) !== null && _b !== undefined ? _b : (metadata2) => {}, - onReceiveMessage: (_d = (_c = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveMessage) === null || _c === undefined ? undefined : _c.bind(interceptingListener)) !== null && _d !== undefined ? _d : (message) => {}, - onReceiveStatus: (_f = (_e = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveStatus) === null || _e === undefined ? undefined : _e.bind(interceptingListener)) !== null && _f !== undefined ? _f : (status) => {} - }; - this.processingMetadata = true; - this.requester.start(metadata, fullInterceptingListener, (md, listener) => { - var _a3, _b2, _c2; - this.processingMetadata = false; - let finalInterceptingListener; - if ((0, call_interface_1.isInterceptingListener)(listener)) { - finalInterceptingListener = listener; - } else { - const fullListener = { - onReceiveMetadata: (_a3 = listener.onReceiveMetadata) !== null && _a3 !== undefined ? _a3 : defaultListener.onReceiveMetadata, - onReceiveMessage: (_b2 = listener.onReceiveMessage) !== null && _b2 !== undefined ? _b2 : defaultListener.onReceiveMessage, - onReceiveStatus: (_c2 = listener.onReceiveStatus) !== null && _c2 !== undefined ? _c2 : defaultListener.onReceiveStatus - }; - finalInterceptingListener = new call_interface_1.InterceptingListenerImpl(fullListener, fullInterceptingListener); - } - this.nextCall.start(md, finalInterceptingListener); - this.processPendingMessage(); - this.processPendingHalfClose(); - }); - } - sendMessageWithContext(context8, message) { - this.processingMessage = true; - this.requester.sendMessage(message, (finalMessage) => { - this.processingMessage = false; - if (this.processingMetadata) { - this.pendingMessageContext = context8; - this.pendingMessage = message; - } else { - this.nextCall.sendMessageWithContext(context8, finalMessage); - this.processPendingHalfClose(); - } - }); - } - sendMessage(message) { - this.sendMessageWithContext({}, message); - } - startRead() { - this.nextCall.startRead(); - } - halfClose() { - this.requester.halfClose(() => { - if (this.processingMetadata || this.processingMessage) { - this.pendingHalfClose = true; - } else { - this.nextCall.halfClose(); - } - }); - } - getAuthContext() { - return this.nextCall.getAuthContext(); - } - } - exports.InterceptingCall = InterceptingCall; - function getCall(channel, path, options) { - var _a2, _b; - const deadline = (_a2 = options.deadline) !== null && _a2 !== undefined ? _a2 : Infinity; - const host = options.host; - const parent = (_b = options.parent) !== null && _b !== undefined ? _b : null; - const propagateFlags = options.propagate_flags; - const credentials = options.credentials; - const call = channel.createCall(path, deadline, host, parent, propagateFlags); - if (credentials) { - call.setCredentials(credentials); - } - return call; - } - - class BaseInterceptingCall { - constructor(call, methodDefinition) { - this.call = call; - this.methodDefinition = methodDefinition; - } - cancelWithStatus(status, details) { - this.call.cancelWithStatus(status, details); - } - getPeer() { - return this.call.getPeer(); - } - sendMessageWithContext(context8, message) { - let serialized; - try { - serialized = this.methodDefinition.requestSerialize(message); - } catch (e) { - this.call.cancelWithStatus(constants_1.Status.INTERNAL, `Request message serialization failure: ${(0, error_1.getErrorMessage)(e)}`); - return; - } - this.call.sendMessageWithContext(context8, serialized); - } - sendMessage(message) { - this.sendMessageWithContext({}, message); - } - start(metadata, interceptingListener) { - let readError = null; - this.call.start(metadata, { - onReceiveMetadata: (metadata2) => { - var _a2; - (_a2 = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveMetadata) === null || _a2 === undefined || _a2.call(interceptingListener, metadata2); - }, - onReceiveMessage: (message) => { - var _a2; - let deserialized; - try { - deserialized = this.methodDefinition.responseDeserialize(message); - } catch (e) { - readError = { - code: constants_1.Status.INTERNAL, - details: `Response message parsing error: ${(0, error_1.getErrorMessage)(e)}`, - metadata: new metadata_1.Metadata - }; - this.call.cancelWithStatus(readError.code, readError.details); - return; - } - (_a2 = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveMessage) === null || _a2 === undefined || _a2.call(interceptingListener, deserialized); - }, - onReceiveStatus: (status) => { - var _a2, _b; - if (readError) { - (_a2 = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveStatus) === null || _a2 === undefined || _a2.call(interceptingListener, readError); - } else { - (_b = interceptingListener === null || interceptingListener === undefined ? undefined : interceptingListener.onReceiveStatus) === null || _b === undefined || _b.call(interceptingListener, status); - } - } - }); - } - startRead() { - this.call.startRead(); - } - halfClose() { - this.call.halfClose(); - } - getAuthContext() { - return this.call.getAuthContext(); - } - } - - class BaseUnaryInterceptingCall extends BaseInterceptingCall { - constructor(call, methodDefinition) { - super(call, methodDefinition); - } - start(metadata, listener) { - var _a2, _b; - let receivedMessage = false; - const wrapperListener = { - onReceiveMetadata: (_b = (_a2 = listener === null || listener === undefined ? undefined : listener.onReceiveMetadata) === null || _a2 === undefined ? undefined : _a2.bind(listener)) !== null && _b !== undefined ? _b : (metadata2) => {}, - onReceiveMessage: (message) => { - var _a3; - receivedMessage = true; - (_a3 = listener === null || listener === undefined ? undefined : listener.onReceiveMessage) === null || _a3 === undefined || _a3.call(listener, message); - }, - onReceiveStatus: (status) => { - var _a3, _b2; - if (!receivedMessage) { - (_a3 = listener === null || listener === undefined ? undefined : listener.onReceiveMessage) === null || _a3 === undefined || _a3.call(listener, null); - } - (_b2 = listener === null || listener === undefined ? undefined : listener.onReceiveStatus) === null || _b2 === undefined || _b2.call(listener, status); - } - }; - super.start(metadata, wrapperListener); - this.call.startRead(); - } - } - - class BaseStreamingInterceptingCall extends BaseInterceptingCall { - } - function getBottomInterceptingCall(channel, options, methodDefinition) { - const call = getCall(channel, methodDefinition.path, options); - if (methodDefinition.responseStream) { - return new BaseStreamingInterceptingCall(call, methodDefinition); - } else { - return new BaseUnaryInterceptingCall(call, methodDefinition); - } - } - function getInterceptingCall(interceptorArgs, methodDefinition, options, channel) { - if (interceptorArgs.clientInterceptors.length > 0 && interceptorArgs.clientInterceptorProviders.length > 0) { - throw new InterceptorConfigurationError("Both interceptors and interceptor_providers were passed as options " + "to the client constructor. Only one of these is allowed."); - } - if (interceptorArgs.callInterceptors.length > 0 && interceptorArgs.callInterceptorProviders.length > 0) { - throw new InterceptorConfigurationError("Both interceptors and interceptor_providers were passed as call " + "options. Only one of these is allowed."); - } - let interceptors = []; - if (interceptorArgs.callInterceptors.length > 0 || interceptorArgs.callInterceptorProviders.length > 0) { - interceptors = [].concat(interceptorArgs.callInterceptors, interceptorArgs.callInterceptorProviders.map((provider) => provider(methodDefinition))).filter((interceptor) => interceptor); - } else { - interceptors = [].concat(interceptorArgs.clientInterceptors, interceptorArgs.clientInterceptorProviders.map((provider) => provider(methodDefinition))).filter((interceptor) => interceptor); - } - const interceptorOptions = Object.assign({}, options, { - method_definition: methodDefinition - }); - const getCall2 = interceptors.reduceRight((nextCall, nextInterceptor) => { - return (currentOptions) => nextInterceptor(currentOptions, nextCall); - }, (finalOptions) => getBottomInterceptingCall(channel, finalOptions, methodDefinition)); - return getCall2(interceptorOptions); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/client.js -var require_client = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Client = undefined; - var call_1 = require_call(); - var channel_1 = require_channel(); - var connectivity_state_1 = require_connectivity_state(); - var constants_1 = require_constants9(); - var metadata_1 = require_metadata(); - var client_interceptors_1 = require_client_interceptors(); - var CHANNEL_SYMBOL = Symbol(); - var INTERCEPTOR_SYMBOL = Symbol(); - var INTERCEPTOR_PROVIDER_SYMBOL = Symbol(); - var CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol(); - function isFunction(arg) { - return typeof arg === "function"; - } - function getErrorStackString(error48) { - var _a2; - return ((_a2 = error48.stack) === null || _a2 === undefined ? undefined : _a2.split(` -`).slice(1).join(` -`)) || "no stack trace available"; - } - - class Client { - constructor(address, credentials, options = {}) { - var _a2, _b; - options = Object.assign({}, options); - this[INTERCEPTOR_SYMBOL] = (_a2 = options.interceptors) !== null && _a2 !== undefined ? _a2 : []; - delete options.interceptors; - this[INTERCEPTOR_PROVIDER_SYMBOL] = (_b = options.interceptor_providers) !== null && _b !== undefined ? _b : []; - delete options.interceptor_providers; - if (this[INTERCEPTOR_SYMBOL].length > 0 && this[INTERCEPTOR_PROVIDER_SYMBOL].length > 0) { - throw new Error("Both interceptors and interceptor_providers were passed as options " + "to the client constructor. Only one of these is allowed."); - } - this[CALL_INVOCATION_TRANSFORMER_SYMBOL] = options.callInvocationTransformer; - delete options.callInvocationTransformer; - if (options.channelOverride) { - this[CHANNEL_SYMBOL] = options.channelOverride; - } else if (options.channelFactoryOverride) { - const channelFactoryOverride = options.channelFactoryOverride; - delete options.channelFactoryOverride; - this[CHANNEL_SYMBOL] = channelFactoryOverride(address, credentials, options); - } else { - this[CHANNEL_SYMBOL] = new channel_1.ChannelImplementation(address, credentials, options); - } - } - close() { - this[CHANNEL_SYMBOL].close(); - } - getChannel() { - return this[CHANNEL_SYMBOL]; - } - waitForReady(deadline, callback) { - const checkState = (err) => { - if (err) { - callback(new Error("Failed to connect before the deadline")); - return; - } - let newState; - try { - newState = this[CHANNEL_SYMBOL].getConnectivityState(true); - } catch (e) { - callback(new Error("The channel has been closed")); - return; - } - if (newState === connectivity_state_1.ConnectivityState.READY) { - callback(); - } else { - try { - this[CHANNEL_SYMBOL].watchConnectivityState(newState, deadline, checkState); - } catch (e) { - callback(new Error("The channel has been closed")); - } - } - }; - setImmediate(checkState); - } - checkOptionalUnaryResponseArguments(arg1, arg2, arg3) { - if (isFunction(arg1)) { - return { metadata: new metadata_1.Metadata, options: {}, callback: arg1 }; - } else if (isFunction(arg2)) { - if (arg1 instanceof metadata_1.Metadata) { - return { metadata: arg1, options: {}, callback: arg2 }; - } else { - return { metadata: new metadata_1.Metadata, options: arg1, callback: arg2 }; - } - } else { - if (!(arg1 instanceof metadata_1.Metadata && arg2 instanceof Object && isFunction(arg3))) { - throw new Error("Incorrect arguments passed"); - } - return { metadata: arg1, options: arg2, callback: arg3 }; - } - } - makeUnaryRequest(method, serialize2, deserialize, argument, metadata, options, callback) { - var _a2, _b; - const checkedArguments = this.checkOptionalUnaryResponseArguments(metadata, options, callback); - const methodDefinition = { - path: method, - requestStream: false, - responseStream: false, - requestSerialize: serialize2, - responseDeserialize: deserialize - }; - let callProperties = { - argument, - metadata: checkedArguments.metadata, - call: new call_1.ClientUnaryCallImpl, - channel: this[CHANNEL_SYMBOL], - methodDefinition, - callOptions: checkedArguments.options, - callback: checkedArguments.callback - }; - if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) { - callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties); - } - const emitter = callProperties.call; - const interceptorArgs = { - clientInterceptors: this[INTERCEPTOR_SYMBOL], - clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL], - callInterceptors: (_a2 = callProperties.callOptions.interceptors) !== null && _a2 !== undefined ? _a2 : [], - callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== undefined ? _b : [] - }; - const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel); - emitter.call = call; - let responseMessage = null; - let receivedStatus = false; - let callerStackError = new Error; - call.start(callProperties.metadata, { - onReceiveMetadata: (metadata2) => { - emitter.emit("metadata", metadata2); - }, - onReceiveMessage(message) { - if (responseMessage !== null) { - call.cancelWithStatus(constants_1.Status.UNIMPLEMENTED, "Too many responses received"); - } - responseMessage = message; - }, - onReceiveStatus(status) { - if (receivedStatus) { - return; - } - receivedStatus = true; - if (status.code === constants_1.Status.OK) { - if (responseMessage === null) { - const callerStack = getErrorStackString(callerStackError); - callProperties.callback((0, call_1.callErrorFromStatus)({ - code: constants_1.Status.UNIMPLEMENTED, - details: "No message received", - metadata: status.metadata - }, callerStack)); - } else { - callProperties.callback(null, responseMessage); - } - } else { - const callerStack = getErrorStackString(callerStackError); - callProperties.callback((0, call_1.callErrorFromStatus)(status, callerStack)); - } - callerStackError = null; - emitter.emit("status", status); - } - }); - call.sendMessage(argument); - call.halfClose(); - return emitter; - } - makeClientStreamRequest(method, serialize2, deserialize, metadata, options, callback) { - var _a2, _b; - const checkedArguments = this.checkOptionalUnaryResponseArguments(metadata, options, callback); - const methodDefinition = { - path: method, - requestStream: true, - responseStream: false, - requestSerialize: serialize2, - responseDeserialize: deserialize - }; - let callProperties = { - metadata: checkedArguments.metadata, - call: new call_1.ClientWritableStreamImpl(serialize2), - channel: this[CHANNEL_SYMBOL], - methodDefinition, - callOptions: checkedArguments.options, - callback: checkedArguments.callback - }; - if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) { - callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties); - } - const emitter = callProperties.call; - const interceptorArgs = { - clientInterceptors: this[INTERCEPTOR_SYMBOL], - clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL], - callInterceptors: (_a2 = callProperties.callOptions.interceptors) !== null && _a2 !== undefined ? _a2 : [], - callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== undefined ? _b : [] - }; - const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel); - emitter.call = call; - let responseMessage = null; - let receivedStatus = false; - let callerStackError = new Error; - call.start(callProperties.metadata, { - onReceiveMetadata: (metadata2) => { - emitter.emit("metadata", metadata2); - }, - onReceiveMessage(message) { - if (responseMessage !== null) { - call.cancelWithStatus(constants_1.Status.UNIMPLEMENTED, "Too many responses received"); - } - responseMessage = message; - call.startRead(); - }, - onReceiveStatus(status) { - if (receivedStatus) { - return; - } - receivedStatus = true; - if (status.code === constants_1.Status.OK) { - if (responseMessage === null) { - const callerStack = getErrorStackString(callerStackError); - callProperties.callback((0, call_1.callErrorFromStatus)({ - code: constants_1.Status.UNIMPLEMENTED, - details: "No message received", - metadata: status.metadata - }, callerStack)); - } else { - callProperties.callback(null, responseMessage); - } - } else { - const callerStack = getErrorStackString(callerStackError); - callProperties.callback((0, call_1.callErrorFromStatus)(status, callerStack)); - } - callerStackError = null; - emitter.emit("status", status); - } - }); - return emitter; - } - checkMetadataAndOptions(arg1, arg2) { - let metadata; - let options; - if (arg1 instanceof metadata_1.Metadata) { - metadata = arg1; - if (arg2) { - options = arg2; - } else { - options = {}; - } - } else { - if (arg1) { - options = arg1; - } else { - options = {}; - } - metadata = new metadata_1.Metadata; - } - return { metadata, options }; - } - makeServerStreamRequest(method, serialize2, deserialize, argument, metadata, options) { - var _a2, _b; - const checkedArguments = this.checkMetadataAndOptions(metadata, options); - const methodDefinition = { - path: method, - requestStream: false, - responseStream: true, - requestSerialize: serialize2, - responseDeserialize: deserialize - }; - let callProperties = { - argument, - metadata: checkedArguments.metadata, - call: new call_1.ClientReadableStreamImpl(deserialize), - channel: this[CHANNEL_SYMBOL], - methodDefinition, - callOptions: checkedArguments.options - }; - if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) { - callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties); - } - const stream3 = callProperties.call; - const interceptorArgs = { - clientInterceptors: this[INTERCEPTOR_SYMBOL], - clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL], - callInterceptors: (_a2 = callProperties.callOptions.interceptors) !== null && _a2 !== undefined ? _a2 : [], - callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== undefined ? _b : [] - }; - const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel); - stream3.call = call; - let receivedStatus = false; - let callerStackError = new Error; - call.start(callProperties.metadata, { - onReceiveMetadata(metadata2) { - stream3.emit("metadata", metadata2); - }, - onReceiveMessage(message) { - stream3.push(message); - }, - onReceiveStatus(status) { - if (receivedStatus) { - return; - } - receivedStatus = true; - stream3.push(null); - if (status.code !== constants_1.Status.OK) { - const callerStack = getErrorStackString(callerStackError); - stream3.emit("error", (0, call_1.callErrorFromStatus)(status, callerStack)); - } - callerStackError = null; - stream3.emit("status", status); - } - }); - call.sendMessage(argument); - call.halfClose(); - return stream3; - } - makeBidiStreamRequest(method, serialize2, deserialize, metadata, options) { - var _a2, _b; - const checkedArguments = this.checkMetadataAndOptions(metadata, options); - const methodDefinition = { - path: method, - requestStream: true, - responseStream: true, - requestSerialize: serialize2, - responseDeserialize: deserialize - }; - let callProperties = { - metadata: checkedArguments.metadata, - call: new call_1.ClientDuplexStreamImpl(serialize2, deserialize), - channel: this[CHANNEL_SYMBOL], - methodDefinition, - callOptions: checkedArguments.options - }; - if (this[CALL_INVOCATION_TRANSFORMER_SYMBOL]) { - callProperties = this[CALL_INVOCATION_TRANSFORMER_SYMBOL](callProperties); - } - const stream3 = callProperties.call; - const interceptorArgs = { - clientInterceptors: this[INTERCEPTOR_SYMBOL], - clientInterceptorProviders: this[INTERCEPTOR_PROVIDER_SYMBOL], - callInterceptors: (_a2 = callProperties.callOptions.interceptors) !== null && _a2 !== undefined ? _a2 : [], - callInterceptorProviders: (_b = callProperties.callOptions.interceptor_providers) !== null && _b !== undefined ? _b : [] - }; - const call = (0, client_interceptors_1.getInterceptingCall)(interceptorArgs, callProperties.methodDefinition, callProperties.callOptions, callProperties.channel); - stream3.call = call; - let receivedStatus = false; - let callerStackError = new Error; - call.start(callProperties.metadata, { - onReceiveMetadata(metadata2) { - stream3.emit("metadata", metadata2); - }, - onReceiveMessage(message) { - stream3.push(message); - }, - onReceiveStatus(status) { - if (receivedStatus) { - return; - } - receivedStatus = true; - stream3.push(null); - if (status.code !== constants_1.Status.OK) { - const callerStack = getErrorStackString(callerStackError); - stream3.emit("error", (0, call_1.callErrorFromStatus)(status, callerStack)); - } - callerStackError = null; - stream3.emit("status", status); - } - }); - return stream3; - } - } - exports.Client = Client; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/make-client.js -var require_make_client = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.makeClientConstructor = makeClientConstructor; - exports.loadPackageDefinition = loadPackageDefinition; - var client_1 = require_client(); - var requesterFuncs = { - unary: client_1.Client.prototype.makeUnaryRequest, - server_stream: client_1.Client.prototype.makeServerStreamRequest, - client_stream: client_1.Client.prototype.makeClientStreamRequest, - bidi: client_1.Client.prototype.makeBidiStreamRequest - }; - function isPrototypePolluted(key) { - return ["__proto__", "prototype", "constructor"].includes(key); - } - function makeClientConstructor(methods, serviceName, classOptions) { - if (!classOptions) { - classOptions = {}; - } - - class ServiceClientImpl extends client_1.Client { - } - Object.keys(methods).forEach((name) => { - if (isPrototypePolluted(name)) { - return; - } - const attrs = methods[name]; - let methodType; - if (typeof name === "string" && name.charAt(0) === "$") { - throw new Error("Method names cannot start with $"); - } - if (attrs.requestStream) { - if (attrs.responseStream) { - methodType = "bidi"; - } else { - methodType = "client_stream"; - } - } else { - if (attrs.responseStream) { - methodType = "server_stream"; - } else { - methodType = "unary"; - } - } - const serialize2 = attrs.requestSerialize; - const deserialize = attrs.responseDeserialize; - const methodFunc = partial2(requesterFuncs[methodType], attrs.path, serialize2, deserialize); - ServiceClientImpl.prototype[name] = methodFunc; - Object.assign(ServiceClientImpl.prototype[name], attrs); - if (attrs.originalName && !isPrototypePolluted(attrs.originalName)) { - ServiceClientImpl.prototype[attrs.originalName] = ServiceClientImpl.prototype[name]; - } - }); - ServiceClientImpl.service = methods; - ServiceClientImpl.serviceName = serviceName; - return ServiceClientImpl; - } - function partial2(fn, path, serialize2, deserialize) { - return function(...args) { - return fn.call(this, path, serialize2, deserialize, ...args); - }; - } - function isProtobufTypeDefinition(obj) { - return "format" in obj; - } - function loadPackageDefinition(packageDef) { - const result = {}; - for (const serviceFqn in packageDef) { - if (Object.prototype.hasOwnProperty.call(packageDef, serviceFqn)) { - const service = packageDef[serviceFqn]; - const nameComponents = serviceFqn.split("."); - if (nameComponents.some((comp) => isPrototypePolluted(comp))) { - continue; - } - const serviceName = nameComponents[nameComponents.length - 1]; - let current = result; - for (const packageName of nameComponents.slice(0, -1)) { - if (!current[packageName]) { - current[packageName] = {}; - } - current = current[packageName]; - } - if (isProtobufTypeDefinition(service)) { - current[serviceName] = service; - } else { - current[serviceName] = makeClientConstructor(service, serviceName, {}); - } - } - } - return result; - } -}); - -// ../../../../node_modules/.bun/lodash.camelcase@4.3.0/node_modules/lodash.camelcase/index.js -var require_lodash = __commonJS((exports, module) => { - var INFINITY = 1 / 0; - var symbolTag = "[object Symbol]"; - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - var rsAstralRange = "\\ud800-\\udfff"; - var rsComboMarksRange = "\\u0300-\\u036f\\ufe20-\\ufe23"; - var rsComboSymbolsRange = "\\u20d0-\\u20f0"; - var rsDingbatRange = "\\u2700-\\u27bf"; - var rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff"; - var rsMathOpRange = "\\xac\\xb1\\xd7\\xf7"; - var rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf"; - var rsPunctuationRange = "\\u2000-\\u206f"; - var rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000"; - var rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde"; - var rsVarRange = "\\ufe0e\\ufe0f"; - var rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - var rsApos = "['\u2019]"; - var rsAstral = "[" + rsAstralRange + "]"; - var rsBreak = "[" + rsBreakRange + "]"; - var rsCombo = "[" + rsComboMarksRange + rsComboSymbolsRange + "]"; - var rsDigits = "\\d+"; - var rsDingbat = "[" + rsDingbatRange + "]"; - var rsLower = "[" + rsLowerRange + "]"; - var rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]"; - var rsFitz = "\\ud83c[\\udffb-\\udfff]"; - var rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")"; - var rsNonAstral = "[^" + rsAstralRange + "]"; - var rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}"; - var rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]"; - var rsUpper = "[" + rsUpperRange + "]"; - var rsZWJ = "\\u200d"; - var rsLowerMisc = "(?:" + rsLower + "|" + rsMisc + ")"; - var rsUpperMisc = "(?:" + rsUpper + "|" + rsMisc + ")"; - var rsOptLowerContr = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?"; - var rsOptUpperContr = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?"; - var reOptMod = rsModifier + "?"; - var rsOptVar = "[" + rsVarRange + "]?"; - var rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*"; - var rsSeq = rsOptVar + reOptMod + rsOptJoin; - var rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq; - var rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; - var reApos = RegExp(rsApos, "g"); - var reComboMark = RegExp(rsCombo, "g"); - var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); - var reUnicodeWord = RegExp([ - rsUpper + "?" + rsLower + "+" + rsOptLowerContr + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", - rsUpperMisc + "+" + rsOptUpperContr + "(?=" + [rsBreak, rsUpper + rsLowerMisc, "$"].join("|") + ")", - rsUpper + "?" + rsLowerMisc + "+" + rsOptLowerContr, - rsUpper + "+" + rsOptUpperContr, - rsDigits, - rsEmoji - ].join("|"), "g"); - var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + "]"); - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - var deburredLetters = { - "\xC0": "A", - "\xC1": "A", - "\xC2": "A", - "\xC3": "A", - "\xC4": "A", - "\xC5": "A", - "\xE0": "a", - "\xE1": "a", - "\xE2": "a", - "\xE3": "a", - "\xE4": "a", - "\xE5": "a", - "\xC7": "C", - "\xE7": "c", - "\xD0": "D", - "\xF0": "d", - "\xC8": "E", - "\xC9": "E", - "\xCA": "E", - "\xCB": "E", - "\xE8": "e", - "\xE9": "e", - "\xEA": "e", - "\xEB": "e", - "\xCC": "I", - "\xCD": "I", - "\xCE": "I", - "\xCF": "I", - "\xEC": "i", - "\xED": "i", - "\xEE": "i", - "\xEF": "i", - "\xD1": "N", - "\xF1": "n", - "\xD2": "O", - "\xD3": "O", - "\xD4": "O", - "\xD5": "O", - "\xD6": "O", - "\xD8": "O", - "\xF2": "o", - "\xF3": "o", - "\xF4": "o", - "\xF5": "o", - "\xF6": "o", - "\xF8": "o", - "\xD9": "U", - "\xDA": "U", - "\xDB": "U", - "\xDC": "U", - "\xF9": "u", - "\xFA": "u", - "\xFB": "u", - "\xFC": "u", - "\xDD": "Y", - "\xFD": "y", - "\xFF": "y", - "\xC6": "Ae", - "\xE6": "ae", - "\xDE": "Th", - "\xFE": "th", - "\xDF": "ss", - "\u0100": "A", - "\u0102": "A", - "\u0104": "A", - "\u0101": "a", - "\u0103": "a", - "\u0105": "a", - "\u0106": "C", - "\u0108": "C", - "\u010A": "C", - "\u010C": "C", - "\u0107": "c", - "\u0109": "c", - "\u010B": "c", - "\u010D": "c", - "\u010E": "D", - "\u0110": "D", - "\u010F": "d", - "\u0111": "d", - "\u0112": "E", - "\u0114": "E", - "\u0116": "E", - "\u0118": "E", - "\u011A": "E", - "\u0113": "e", - "\u0115": "e", - "\u0117": "e", - "\u0119": "e", - "\u011B": "e", - "\u011C": "G", - "\u011E": "G", - "\u0120": "G", - "\u0122": "G", - "\u011D": "g", - "\u011F": "g", - "\u0121": "g", - "\u0123": "g", - "\u0124": "H", - "\u0126": "H", - "\u0125": "h", - "\u0127": "h", - "\u0128": "I", - "\u012A": "I", - "\u012C": "I", - "\u012E": "I", - "\u0130": "I", - "\u0129": "i", - "\u012B": "i", - "\u012D": "i", - "\u012F": "i", - "\u0131": "i", - "\u0134": "J", - "\u0135": "j", - "\u0136": "K", - "\u0137": "k", - "\u0138": "k", - "\u0139": "L", - "\u013B": "L", - "\u013D": "L", - "\u013F": "L", - "\u0141": "L", - "\u013A": "l", - "\u013C": "l", - "\u013E": "l", - "\u0140": "l", - "\u0142": "l", - "\u0143": "N", - "\u0145": "N", - "\u0147": "N", - "\u014A": "N", - "\u0144": "n", - "\u0146": "n", - "\u0148": "n", - "\u014B": "n", - "\u014C": "O", - "\u014E": "O", - "\u0150": "O", - "\u014D": "o", - "\u014F": "o", - "\u0151": "o", - "\u0154": "R", - "\u0156": "R", - "\u0158": "R", - "\u0155": "r", - "\u0157": "r", - "\u0159": "r", - "\u015A": "S", - "\u015C": "S", - "\u015E": "S", - "\u0160": "S", - "\u015B": "s", - "\u015D": "s", - "\u015F": "s", - "\u0161": "s", - "\u0162": "T", - "\u0164": "T", - "\u0166": "T", - "\u0163": "t", - "\u0165": "t", - "\u0167": "t", - "\u0168": "U", - "\u016A": "U", - "\u016C": "U", - "\u016E": "U", - "\u0170": "U", - "\u0172": "U", - "\u0169": "u", - "\u016B": "u", - "\u016D": "u", - "\u016F": "u", - "\u0171": "u", - "\u0173": "u", - "\u0174": "W", - "\u0175": "w", - "\u0176": "Y", - "\u0177": "y", - "\u0178": "Y", - "\u0179": "Z", - "\u017B": "Z", - "\u017D": "Z", - "\u017A": "z", - "\u017C": "z", - "\u017E": "z", - "\u0132": "IJ", - "\u0133": "ij", - "\u0152": "Oe", - "\u0153": "oe", - "\u0149": "'n", - "\u017F": "ss" - }; - var freeGlobal = typeof global == "object" && global && global.Object === Object && global; - var freeSelf = typeof self == "object" && self && self.Object === Object && self; - var root = freeGlobal || freeSelf || Function("return this")(); - function arrayReduce(array3, iteratee, accumulator, initAccum) { - var index = -1, length = array3 ? array3.length : 0; - if (initAccum && length) { - accumulator = array3[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array3[index], index, array3); - } - return accumulator; - } - function asciiToArray(string5) { - return string5.split(""); - } - function asciiWords(string5) { - return string5.match(reAsciiWord) || []; - } - function basePropertyOf(object3) { - return function(key) { - return object3 == null ? undefined : object3[key]; - }; - } - var deburrLetter = basePropertyOf(deburredLetters); - function hasUnicode(string5) { - return reHasUnicode.test(string5); - } - function hasUnicodeWord(string5) { - return reHasUnicodeWord.test(string5); - } - function stringToArray(string5) { - return hasUnicode(string5) ? unicodeToArray(string5) : asciiToArray(string5); - } - function unicodeToArray(string5) { - return string5.match(reUnicode) || []; - } - function unicodeWords(string5) { - return string5.match(reUnicodeWord) || []; - } - var objectProto = Object.prototype; - var objectToString = objectProto.toString; - var Symbol2 = root.Symbol; - var symbolProto = Symbol2 ? Symbol2.prototype : undefined; - var symbolToString = symbolProto ? symbolProto.toString : undefined; - function baseSlice(array3, start, end) { - var index = -1, length = array3.length; - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : end - start >>> 0; - start >>>= 0; - var result = Array(length); - while (++index < length) { - result[index] = array3[index + start]; - } - return result; - } - function baseToString(value) { - if (typeof value == "string") { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ""; - } - var result = value + ""; - return result == "0" && 1 / value == -INFINITY ? "-0" : result; - } - function castSlice(array3, start, end) { - var length = array3.length; - end = end === undefined ? length : end; - return !start && end >= length ? array3 : baseSlice(array3, start, end); - } - function createCaseFirst(methodName) { - return function(string5) { - string5 = toString(string5); - var strSymbols = hasUnicode(string5) ? stringToArray(string5) : undefined; - var chr = strSymbols ? strSymbols[0] : string5.charAt(0); - var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string5.slice(1); - return chr[methodName]() + trailing; - }; - } - function createCompounder(callback) { - return function(string5) { - return arrayReduce(words(deburr(string5).replace(reApos, "")), callback, ""); - }; - } - function isObjectLike(value) { - return !!value && typeof value == "object"; - } - function isSymbol(value) { - return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag; - } - function toString(value) { - return value == null ? "" : baseToString(value); - } - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - function capitalize(string5) { - return upperFirst(toString(string5).toLowerCase()); - } - function deburr(string5) { - string5 = toString(string5); - return string5 && string5.replace(reLatin, deburrLetter).replace(reComboMark, ""); - } - var upperFirst = createCaseFirst("toUpperCase"); - function words(string5, pattern, guard) { - string5 = toString(string5); - pattern = guard ? undefined : pattern; - if (pattern === undefined) { - return hasUnicodeWord(string5) ? unicodeWords(string5) : asciiWords(string5); - } - return string5.match(pattern) || []; - } - module.exports = camelCase; -}); - -// ../../../../node_modules/.bun/@protobufjs+codegen@2.0.4/node_modules/@protobufjs/codegen/index.js -var require_codegen = __commonJS((exports, module) => { - module.exports = codegen; - function codegen(functionParams, functionName) { - if (typeof functionParams === "string") { - functionName = functionParams; - functionParams = undefined; - } - var body = []; - function Codegen(formatStringOrScope) { - if (typeof formatStringOrScope !== "string") { - var source = toString(); - if (codegen.verbose) - console.log("codegen: " + source); - source = "return " + source; - if (formatStringOrScope) { - var scopeKeys = Object.keys(formatStringOrScope), scopeParams = new Array(scopeKeys.length + 1), scopeValues = new Array(scopeKeys.length), scopeOffset = 0; - while (scopeOffset < scopeKeys.length) { - scopeParams[scopeOffset] = scopeKeys[scopeOffset]; - scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]]; - } - scopeParams[scopeOffset] = source; - return Function.apply(null, scopeParams).apply(null, scopeValues); - } - return Function(source)(); - } - var formatParams = new Array(arguments.length - 1), formatOffset = 0; - while (formatOffset < formatParams.length) - formatParams[formatOffset] = arguments[++formatOffset]; - formatOffset = 0; - formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) { - var value = formatParams[formatOffset++]; - switch ($1) { - case "d": - case "f": - return String(Number(value)); - case "i": - return String(Math.floor(value)); - case "j": - return JSON.stringify(value); - case "s": - return String(value); - } - return "%"; - }); - if (formatOffset !== formatParams.length) - throw Error("parameter count mismatch"); - body.push(formatStringOrScope); - return Codegen; - } - function toString(functionNameOverride) { - return "function " + (functionNameOverride || functionName || "") + "(" + (functionParams && functionParams.join(",") || "") + `){ - ` + body.join(` - `) + ` -}`; - } - Codegen.toString = toString; - return Codegen; - } - codegen.verbose = false; -}); - -// ../../../../node_modules/.bun/@protobufjs+fetch@1.1.0/node_modules/@protobufjs/fetch/index.js -var require_fetch = __commonJS((exports, module) => { - module.exports = fetch2; - var asPromise = require_aspromise(); - var inquire = require_inquire(); - var fs = inquire("fs"); - function fetch2(filename, options, callback) { - if (typeof options === "function") { - callback = options; - options = {}; - } else if (!options) - options = {}; - if (!callback) - return asPromise(fetch2, this, filename, options); - if (!options.xhr && fs && fs.readFile) - return fs.readFile(filename, function fetchReadFileCallback(err, contents) { - return err && typeof XMLHttpRequest !== "undefined" ? fetch2.xhr(filename, options, callback) : err ? callback(err) : callback(null, options.binary ? contents : contents.toString("utf8")); - }); - return fetch2.xhr(filename, options, callback); - } - fetch2.xhr = function fetch_xhr(filename, options, callback) { - var xhr = new XMLHttpRequest; - xhr.onreadystatechange = function fetchOnReadyStateChange() { - if (xhr.readyState !== 4) - return; - if (xhr.status !== 0 && xhr.status !== 200) - return callback(Error("status " + xhr.status)); - if (options.binary) { - var buffer = xhr.response; - if (!buffer) { - buffer = []; - for (var i = 0;i < xhr.responseText.length; ++i) - buffer.push(xhr.responseText.charCodeAt(i) & 255); - } - return callback(null, typeof Uint8Array !== "undefined" ? new Uint8Array(buffer) : buffer); - } - return callback(null, xhr.responseText); - }; - if (options.binary) { - if ("overrideMimeType" in xhr) - xhr.overrideMimeType("text/plain; charset=x-user-defined"); - xhr.responseType = "arraybuffer"; - } - xhr.open("GET", filename); - xhr.send(); - }; -}); - -// ../../../../node_modules/.bun/@protobufjs+path@1.1.2/node_modules/@protobufjs/path/index.js -var require_path = __commonJS((exports) => { - var path = exports; - var isAbsolute = path.isAbsolute = function isAbsolute(path2) { - return /^(?:\/|\w+:)/.test(path2); - }; - var normalize = path.normalize = function normalize(path2) { - path2 = path2.replace(/\\/g, "/").replace(/\/{2,}/g, "/"); - var parts = path2.split("/"), absolute = isAbsolute(path2), prefix = ""; - if (absolute) - prefix = parts.shift() + "/"; - for (var i = 0;i < parts.length; ) { - if (parts[i] === "..") { - if (i > 0 && parts[i - 1] !== "..") - parts.splice(--i, 2); - else if (absolute) - parts.splice(i, 1); - else - ++i; - } else if (parts[i] === ".") - parts.splice(i, 1); - else - ++i; - } - return prefix + parts.join("/"); - }; - path.resolve = function resolve(originPath, includePath, alreadyNormalized) { - if (!alreadyNormalized) - includePath = normalize(includePath); - if (isAbsolute(includePath)) - return includePath; - if (!alreadyNormalized) - originPath = normalize(originPath); - return (originPath = originPath.replace(/(?:\/|^)[^/]+$/, "")).length ? normalize(originPath + "/" + includePath) : includePath; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/namespace.js -var require_namespace = __commonJS((exports, module) => { - module.exports = Namespace; - var ReflectionObject = require_object(); - ((Namespace.prototype = Object.create(ReflectionObject.prototype)).constructor = Namespace).className = "Namespace"; - var Field = require_field(); - var util3 = require_util5(); - var OneOf = require_oneof(); - var Type; - var Service; - var Enum; - Namespace.fromJSON = function fromJSON(name, json3) { - return new Namespace(name, json3.options).addJSON(json3.nested); - }; - function arrayToJSON(array3, toJSONOptions) { - if (!(array3 && array3.length)) - return; - var obj = {}; - for (var i = 0;i < array3.length; ++i) - obj[array3[i].name] = array3[i].toJSON(toJSONOptions); - return obj; - } - Namespace.arrayToJSON = arrayToJSON; - Namespace.isReservedId = function isReservedId(reserved, id) { - if (reserved) { - for (var i = 0;i < reserved.length; ++i) - if (typeof reserved[i] !== "string" && reserved[i][0] <= id && reserved[i][1] > id) - return true; - } - return false; - }; - Namespace.isReservedName = function isReservedName(reserved, name) { - if (reserved) { - for (var i = 0;i < reserved.length; ++i) - if (reserved[i] === name) - return true; - } - return false; - }; - function Namespace(name, options) { - ReflectionObject.call(this, name, options); - this.nested = undefined; - this._nestedArray = null; - this._lookupCache = {}; - this._needsRecursiveFeatureResolution = true; - this._needsRecursiveResolve = true; - } - function clearCache(namespace) { - namespace._nestedArray = null; - namespace._lookupCache = {}; - var parent = namespace; - while (parent = parent.parent) { - parent._lookupCache = {}; - } - return namespace; - } - Object.defineProperty(Namespace.prototype, "nestedArray", { - get: function() { - return this._nestedArray || (this._nestedArray = util3.toArray(this.nested)); - } - }); - Namespace.prototype.toJSON = function toJSON(toJSONOptions) { - return util3.toObject([ - "options", - this.options, - "nested", - arrayToJSON(this.nestedArray, toJSONOptions) - ]); - }; - Namespace.prototype.addJSON = function addJSON(nestedJson) { - var ns = this; - if (nestedJson) { - for (var names = Object.keys(nestedJson), i = 0, nested;i < names.length; ++i) { - nested = nestedJson[names[i]]; - ns.add((nested.fields !== undefined ? Type.fromJSON : nested.values !== undefined ? Enum.fromJSON : nested.methods !== undefined ? Service.fromJSON : nested.id !== undefined ? Field.fromJSON : Namespace.fromJSON)(names[i], nested)); - } - } - return this; - }; - Namespace.prototype.get = function get(name) { - return this.nested && this.nested[name] || null; - }; - Namespace.prototype.getEnum = function getEnum(name) { - if (this.nested && this.nested[name] instanceof Enum) - return this.nested[name].values; - throw Error("no such enum: " + name); - }; - Namespace.prototype.add = function add(object3) { - if (!(object3 instanceof Field && object3.extend !== undefined || object3 instanceof Type || object3 instanceof OneOf || object3 instanceof Enum || object3 instanceof Service || object3 instanceof Namespace)) - throw TypeError("object must be a valid nested object"); - if (!this.nested) - this.nested = {}; - else { - var prev = this.get(object3.name); - if (prev) { - if (prev instanceof Namespace && object3 instanceof Namespace && !(prev instanceof Type || prev instanceof Service)) { - var nested = prev.nestedArray; - for (var i = 0;i < nested.length; ++i) - object3.add(nested[i]); - this.remove(prev); - if (!this.nested) - this.nested = {}; - object3.setOptions(prev.options, true); - } else - throw Error("duplicate name '" + object3.name + "' in " + this); - } - } - this.nested[object3.name] = object3; - if (!(this instanceof Type || this instanceof Service || this instanceof Enum || this instanceof Field)) { - if (!object3._edition) { - object3._edition = object3._defaultEdition; - } - } - this._needsRecursiveFeatureResolution = true; - this._needsRecursiveResolve = true; - var parent = this; - while (parent = parent.parent) { - parent._needsRecursiveFeatureResolution = true; - parent._needsRecursiveResolve = true; - } - object3.onAdd(this); - return clearCache(this); - }; - Namespace.prototype.remove = function remove(object3) { - if (!(object3 instanceof ReflectionObject)) - throw TypeError("object must be a ReflectionObject"); - if (object3.parent !== this) - throw Error(object3 + " is not a member of " + this); - delete this.nested[object3.name]; - if (!Object.keys(this.nested).length) - this.nested = undefined; - object3.onRemove(this); - return clearCache(this); - }; - Namespace.prototype.define = function define(path, json3) { - if (util3.isString(path)) - path = path.split("."); - else if (!Array.isArray(path)) - throw TypeError("illegal path"); - if (path && path.length && path[0] === "") - throw Error("path must be relative"); - var ptr = this; - while (path.length > 0) { - var part = path.shift(); - if (ptr.nested && ptr.nested[part]) { - ptr = ptr.nested[part]; - if (!(ptr instanceof Namespace)) - throw Error("path conflicts with non-namespace objects"); - } else - ptr.add(ptr = new Namespace(part)); - } - if (json3) - ptr.addJSON(json3); - return ptr; - }; - Namespace.prototype.resolveAll = function resolveAll() { - if (!this._needsRecursiveResolve) - return this; - this._resolveFeaturesRecursive(this._edition); - var nested = this.nestedArray, i = 0; - this.resolve(); - while (i < nested.length) - if (nested[i] instanceof Namespace) - nested[i++].resolveAll(); - else - nested[i++].resolve(); - this._needsRecursiveResolve = false; - return this; - }; - Namespace.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) { - if (!this._needsRecursiveFeatureResolution) - return this; - this._needsRecursiveFeatureResolution = false; - edition = this._edition || edition; - ReflectionObject.prototype._resolveFeaturesRecursive.call(this, edition); - this.nestedArray.forEach((nested) => { - nested._resolveFeaturesRecursive(edition); - }); - return this; - }; - Namespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) { - if (typeof filterTypes === "boolean") { - parentAlreadyChecked = filterTypes; - filterTypes = undefined; - } else if (filterTypes && !Array.isArray(filterTypes)) - filterTypes = [filterTypes]; - if (util3.isString(path) && path.length) { - if (path === ".") - return this.root; - path = path.split("."); - } else if (!path.length) - return this; - var flatPath = path.join("."); - if (path[0] === "") - return this.root.lookup(path.slice(1), filterTypes); - var found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects["." + flatPath]; - if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) { - return found; - } - found = this._lookupImpl(path, flatPath); - if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) { - return found; - } - if (parentAlreadyChecked) - return null; - var current = this; - while (current.parent) { - found = current.parent._lookupImpl(path, flatPath); - if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) { - return found; - } - current = current.parent; - } - return null; - }; - Namespace.prototype._lookupImpl = function lookup(path, flatPath) { - if (Object.prototype.hasOwnProperty.call(this._lookupCache, flatPath)) { - return this._lookupCache[flatPath]; - } - var found = this.get(path[0]); - var exact = null; - if (found) { - if (path.length === 1) { - exact = found; - } else if (found instanceof Namespace) { - path = path.slice(1); - exact = found._lookupImpl(path, path.join(".")); - } - } else { - for (var i = 0;i < this.nestedArray.length; ++i) - if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i]._lookupImpl(path, flatPath))) - exact = found; - } - this._lookupCache[flatPath] = exact; - return exact; - }; - Namespace.prototype.lookupType = function lookupType(path) { - var found = this.lookup(path, [Type]); - if (!found) - throw Error("no such type: " + path); - return found; - }; - Namespace.prototype.lookupEnum = function lookupEnum(path) { - var found = this.lookup(path, [Enum]); - if (!found) - throw Error("no such Enum '" + path + "' in " + this); - return found; - }; - Namespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) { - var found = this.lookup(path, [Type, Enum]); - if (!found) - throw Error("no such Type or Enum '" + path + "' in " + this); - return found; - }; - Namespace.prototype.lookupService = function lookupService(path) { - var found = this.lookup(path, [Service]); - if (!found) - throw Error("no such Service '" + path + "' in " + this); - return found; - }; - Namespace._configure = function(Type_, Service_, Enum_) { - Type = Type_; - Service = Service_; - Enum = Enum_; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/mapfield.js -var require_mapfield = __commonJS((exports, module) => { - module.exports = MapField; - var Field = require_field(); - ((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = "MapField"; - var types = require_types13(); - var util3 = require_util5(); - function MapField(name, id, keyType, type, options, comment) { - Field.call(this, name, id, type, undefined, undefined, options, comment); - if (!util3.isString(keyType)) - throw TypeError("keyType must be a string"); - this.keyType = keyType; - this.resolvedKeyType = null; - this.map = true; - } - MapField.fromJSON = function fromJSON(name, json3) { - return new MapField(name, json3.id, json3.keyType, json3.type, json3.options, json3.comment); - }; - MapField.prototype.toJSON = function toJSON(toJSONOptions) { - var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; - return util3.toObject([ - "keyType", - this.keyType, - "type", - this.type, - "id", - this.id, - "extend", - this.extend, - "options", - this.options, - "comment", - keepComments ? this.comment : undefined - ]); - }; - MapField.prototype.resolve = function resolve() { - if (this.resolved) - return this; - if (types.mapKey[this.keyType] === undefined) - throw Error("invalid key type: " + this.keyType); - return Field.prototype.resolve.call(this); - }; - MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) { - if (typeof fieldValueType === "function") - fieldValueType = util3.decorateType(fieldValueType).name; - else if (fieldValueType && typeof fieldValueType === "object") - fieldValueType = util3.decorateEnum(fieldValueType).name; - return function mapFieldDecorator(prototype, fieldName) { - util3.decorateType(prototype.constructor).add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType)); - }; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/method.js -var require_method = __commonJS((exports, module) => { - module.exports = Method; - var ReflectionObject = require_object(); - ((Method.prototype = Object.create(ReflectionObject.prototype)).constructor = Method).className = "Method"; - var util3 = require_util5(); - function Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) { - if (util3.isObject(requestStream)) { - options = requestStream; - requestStream = responseStream = undefined; - } else if (util3.isObject(responseStream)) { - options = responseStream; - responseStream = undefined; - } - if (!(type === undefined || util3.isString(type))) - throw TypeError("type must be a string"); - if (!util3.isString(requestType)) - throw TypeError("requestType must be a string"); - if (!util3.isString(responseType)) - throw TypeError("responseType must be a string"); - ReflectionObject.call(this, name, options); - this.type = type || "rpc"; - this.requestType = requestType; - this.requestStream = requestStream ? true : undefined; - this.responseType = responseType; - this.responseStream = responseStream ? true : undefined; - this.resolvedRequestType = null; - this.resolvedResponseType = null; - this.comment = comment; - this.parsedOptions = parsedOptions; - } - Method.fromJSON = function fromJSON(name, json3) { - return new Method(name, json3.type, json3.requestType, json3.responseType, json3.requestStream, json3.responseStream, json3.options, json3.comment, json3.parsedOptions); - }; - Method.prototype.toJSON = function toJSON(toJSONOptions) { - var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; - return util3.toObject([ - "type", - this.type !== "rpc" && this.type || undefined, - "requestType", - this.requestType, - "requestStream", - this.requestStream, - "responseType", - this.responseType, - "responseStream", - this.responseStream, - "options", - this.options, - "comment", - keepComments ? this.comment : undefined, - "parsedOptions", - this.parsedOptions - ]); - }; - Method.prototype.resolve = function resolve() { - if (this.resolved) - return this; - this.resolvedRequestType = this.parent.lookupType(this.requestType); - this.resolvedResponseType = this.parent.lookupType(this.responseType); - return ReflectionObject.prototype.resolve.call(this); - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/service.js -var require_service2 = __commonJS((exports, module) => { - module.exports = Service; - var Namespace = require_namespace(); - ((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = "Service"; - var Method = require_method(); - var util3 = require_util5(); - var rpc = require_rpc(); - function Service(name, options) { - Namespace.call(this, name, options); - this.methods = {}; - this._methodsArray = null; - } - Service.fromJSON = function fromJSON(name, json3) { - var service = new Service(name, json3.options); - if (json3.methods) - for (var names = Object.keys(json3.methods), i = 0;i < names.length; ++i) - service.add(Method.fromJSON(names[i], json3.methods[names[i]])); - if (json3.nested) - service.addJSON(json3.nested); - if (json3.edition) - service._edition = json3.edition; - service.comment = json3.comment; - service._defaultEdition = "proto3"; - return service; - }; - Service.prototype.toJSON = function toJSON(toJSONOptions) { - var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions); - var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; - return util3.toObject([ - "edition", - this._editionToJSON(), - "options", - inherited && inherited.options || undefined, - "methods", - Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || {}, - "nested", - inherited && inherited.nested || undefined, - "comment", - keepComments ? this.comment : undefined - ]); - }; - Object.defineProperty(Service.prototype, "methodsArray", { - get: function() { - return this._methodsArray || (this._methodsArray = util3.toArray(this.methods)); - } - }); - function clearCache(service) { - service._methodsArray = null; - return service; - } - Service.prototype.get = function get(name) { - return this.methods[name] || Namespace.prototype.get.call(this, name); - }; - Service.prototype.resolveAll = function resolveAll() { - if (!this._needsRecursiveResolve) - return this; - Namespace.prototype.resolve.call(this); - var methods = this.methodsArray; - for (var i = 0;i < methods.length; ++i) - methods[i].resolve(); - return this; - }; - Service.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) { - if (!this._needsRecursiveFeatureResolution) - return this; - edition = this._edition || edition; - Namespace.prototype._resolveFeaturesRecursive.call(this, edition); - this.methodsArray.forEach((method) => { - method._resolveFeaturesRecursive(edition); - }); - return this; - }; - Service.prototype.add = function add(object3) { - if (this.get(object3.name)) - throw Error("duplicate name '" + object3.name + "' in " + this); - if (object3 instanceof Method) { - this.methods[object3.name] = object3; - object3.parent = this; - return clearCache(this); - } - return Namespace.prototype.add.call(this, object3); - }; - Service.prototype.remove = function remove(object3) { - if (object3 instanceof Method) { - if (this.methods[object3.name] !== object3) - throw Error(object3 + " is not a member of " + this); - delete this.methods[object3.name]; - object3.parent = null; - return clearCache(this); - } - return Namespace.prototype.remove.call(this, object3); - }; - Service.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) { - var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited); - for (var i = 0, method;i < this.methodsArray.length; ++i) { - var methodName = util3.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^$\w_]/g, ""); - rpcService[methodName] = util3.codegen(["r", "c"], util3.isReserved(methodName) ? methodName + "_" : methodName)("return this.rpcCall(m,q,s,r,c)")({ - m: method, - q: method.resolvedRequestType.ctor, - s: method.resolvedResponseType.ctor - }); - } - return rpcService; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/message.js -var require_message = __commonJS((exports, module) => { - module.exports = Message; - var util3 = require_minimal(); - function Message(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - this[keys[i]] = properties[keys[i]]; - } - Message.create = function create(properties) { - return this.$type.create(properties); - }; - Message.encode = function encode(message, writer) { - return this.$type.encode(message, writer); - }; - Message.encodeDelimited = function encodeDelimited(message, writer) { - return this.$type.encodeDelimited(message, writer); - }; - Message.decode = function decode(reader) { - return this.$type.decode(reader); - }; - Message.decodeDelimited = function decodeDelimited(reader) { - return this.$type.decodeDelimited(reader); - }; - Message.verify = function verify(message) { - return this.$type.verify(message); - }; - Message.fromObject = function fromObject(object3) { - return this.$type.fromObject(object3); - }; - Message.toObject = function toObject(message, options) { - return this.$type.toObject(message, options); - }; - Message.prototype.toJSON = function toJSON() { - return this.$type.toObject(this, util3.toJSONOptions); - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/decoder.js -var require_decoder = __commonJS((exports, module) => { - module.exports = decoder; - var Enum = require_enum3(); - var types = require_types13(); - var util3 = require_util5(); - function missing(field) { - return "missing required '" + field.name + "'"; - } - function decoder(mtype) { - var gen = util3.codegen(["r", "l", "e"], mtype.name + "$decode")("if(!(r instanceof Reader))")("r=Reader.create(r)")("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function(field2) { - return field2.map; - }).length ? ",k,value" : ""))("while(r.pos>>3){"); - var i = 0; - for (;i < mtype.fieldsArray.length; ++i) { - var field = mtype._fieldsArray[i].resolve(), type = field.resolvedType instanceof Enum ? "int32" : field.type, ref = "m" + util3.safeProp(field.name); - gen("case %i: {", field.id); - if (field.map) { - gen("if(%s===util.emptyObject)", ref)("%s={}", ref)("var c2 = r.uint32()+r.pos"); - if (types.defaults[field.keyType] !== undefined) - gen("k=%j", types.defaults[field.keyType]); - else - gen("k=null"); - if (types.defaults[type] !== undefined) - gen("value=%j", types.defaults[type]); - else - gen("value=null"); - gen("while(r.pos>>3){")("case 1: k=r.%s(); break", field.keyType)("case 2:"); - if (types.basic[type] === undefined) - gen("value=types[%i].decode(r,r.uint32())", i); - else - gen("value=r.%s()", type); - gen("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"); - if (types.long[field.keyType] !== undefined) - gen('%s[typeof k==="object"?util.longToHash(k):k]=value', ref); - else - gen("%s[k]=value", ref); - } else if (field.repeated) { - gen("if(!(%s&&%s.length))", ref, ref)("%s=[]", ref); - if (types.packed[type] !== undefined) - gen("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos { - module.exports = verifier; - var Enum = require_enum3(); - var util3 = require_util5(); - function invalid(field, expected) { - return field.name + ": " + expected + (field.repeated && expected !== "array" ? "[]" : field.map && expected !== "object" ? "{k:" + field.keyType + "}" : "") + " expected"; - } - function genVerifyValue(gen, field, fieldIndex, ref) { - if (field.resolvedType) { - if (field.resolvedType instanceof Enum) { - gen("switch(%s){", ref)("default:")("return%j", invalid(field, "enum value")); - for (var keys = Object.keys(field.resolvedType.values), j = 0;j < keys.length; ++j) - gen("case %i:", field.resolvedType.values[keys[j]]); - gen("break")("}"); - } else { - gen("{")("var e=types[%i].verify(%s);", fieldIndex, ref)("if(e)")("return%j+e", field.name + ".")("}"); - } - } else { - switch (field.type) { - case "int32": - case "uint32": - case "sint32": - case "fixed32": - case "sfixed32": - gen("if(!util.isInteger(%s))", ref)("return%j", invalid(field, "integer")); - break; - case "int64": - case "uint64": - case "sint64": - case "fixed64": - case "sfixed64": - gen("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))", ref, ref, ref, ref)("return%j", invalid(field, "integer|Long")); - break; - case "float": - case "double": - gen('if(typeof %s!=="number")', ref)("return%j", invalid(field, "number")); - break; - case "bool": - gen('if(typeof %s!=="boolean")', ref)("return%j", invalid(field, "boolean")); - break; - case "string": - gen("if(!util.isString(%s))", ref)("return%j", invalid(field, "string")); - break; - case "bytes": - gen('if(!(%s&&typeof %s.length==="number"||util.isString(%s)))', ref, ref, ref)("return%j", invalid(field, "buffer")); - break; - } - } - return gen; - } - function genVerifyKey(gen, field, ref) { - switch (field.keyType) { - case "int32": - case "uint32": - case "sint32": - case "fixed32": - case "sfixed32": - gen("if(!util.key32Re.test(%s))", ref)("return%j", invalid(field, "integer key")); - break; - case "int64": - case "uint64": - case "sint64": - case "fixed64": - case "sfixed64": - gen("if(!util.key64Re.test(%s))", ref)("return%j", invalid(field, "integer|Long key")); - break; - case "bool": - gen("if(!util.key2Re.test(%s))", ref)("return%j", invalid(field, "boolean key")); - break; - } - return gen; - } - function verifier(mtype) { - var gen = util3.codegen(["m"], mtype.name + "$verify")('if(typeof m!=="object"||m===null)')("return%j", "object expected"); - var oneofs = mtype.oneofsArray, seenFirstField = {}; - if (oneofs.length) - gen("var p={}"); - for (var i = 0;i < mtype.fieldsArray.length; ++i) { - var field = mtype._fieldsArray[i].resolve(), ref = "m" + util3.safeProp(field.name); - if (field.optional) - gen("if(%s!=null&&m.hasOwnProperty(%j)){", ref, field.name); - if (field.map) { - gen("if(!util.isObject(%s))", ref)("return%j", invalid(field, "object"))("var k=Object.keys(%s)", ref)("for(var i=0;i { - var converter = exports; - var Enum = require_enum3(); - var util3 = require_util5(); - function genValuePartial_fromObject(gen, field, fieldIndex, prop) { - var defaultAlreadyEmitted = false; - if (field.resolvedType) { - if (field.resolvedType instanceof Enum) { - gen("switch(d%s){", prop); - for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0;i < keys.length; ++i) { - if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { - gen("default:")('if(typeof(d%s)==="number"){m%s=d%s;break}', prop, prop, prop); - if (!field.repeated) - gen("break"); - defaultAlreadyEmitted = true; - } - gen("case%j:", keys[i])("case %i:", values[keys[i]])("m%s=%j", prop, values[keys[i]])("break"); - } - gen("}"); - } else - gen('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s=types[%i].fromObject(d%s)", prop, fieldIndex, prop); - } else { - var isUnsigned = false; - switch (field.type) { - case "double": - case "float": - gen("m%s=Number(d%s)", prop, prop); - break; - case "uint32": - case "fixed32": - gen("m%s=d%s>>>0", prop, prop); - break; - case "int32": - case "sint32": - case "sfixed32": - gen("m%s=d%s|0", prop, prop); - break; - case "uint64": - isUnsigned = true; - case "int64": - case "sint64": - case "fixed64": - case "sfixed64": - gen("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j", prop, prop, isUnsigned)('else if(typeof d%s==="string")', prop)("m%s=parseInt(d%s,10)", prop, prop)('else if(typeof d%s==="number")', prop)("m%s=d%s", prop, prop)('else if(typeof d%s==="object")', prop)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : ""); - break; - case "bytes": - gen('if(typeof d%s==="string")', prop)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)("else if(d%s.length >= 0)", prop)("m%s=d%s", prop, prop); - break; - case "string": - gen("m%s=String(d%s)", prop, prop); - break; - case "bool": - gen("m%s=Boolean(d%s)", prop, prop); - break; - } - } - return gen; - } - converter.fromObject = function fromObject(mtype) { - var fields = mtype.fieldsArray; - var gen = util3.codegen(["d"], mtype.name + "$fromObject")("if(d instanceof this.ctor)")("return d"); - if (!fields.length) - return gen("return new this.ctor"); - gen("var m=new this.ctor"); - for (var i = 0;i < fields.length; ++i) { - var field = fields[i].resolve(), prop = util3.safeProp(field.name); - if (field.map) { - gen("if(d%s){", prop)('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s={}", prop)("for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true" : "", prop); - break; - case "bytes": - gen("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop); - break; - default: - gen("d%s=m%s", prop, prop); - break; - } - } - return gen; - } - converter.toObject = function toObject(mtype) { - var fields = mtype.fieldsArray.slice().sort(util3.compareFieldsById); - if (!fields.length) - return util3.codegen()("return {}"); - var gen = util3.codegen(["m", "o"], mtype.name + "$toObject")("if(!o)")("o={}")("var d={}"); - var repeatedFields = [], mapFields = [], normalFields = [], i = 0; - for (;i < fields.length; ++i) - if (!fields[i].partOf) - (fields[i].resolve().repeated ? repeatedFields : fields[i].map ? mapFields : normalFields).push(fields[i]); - if (repeatedFields.length) { - gen("if(o.arrays||o.defaults){"); - for (i = 0;i < repeatedFields.length; ++i) - gen("d%s=[]", util3.safeProp(repeatedFields[i].name)); - gen("}"); - } - if (mapFields.length) { - gen("if(o.objects||o.defaults){"); - for (i = 0;i < mapFields.length; ++i) - gen("d%s={}", util3.safeProp(mapFields[i].name)); - gen("}"); - } - if (normalFields.length) { - gen("if(o.defaults){"); - for (i = 0;i < normalFields.length; ++i) { - var field = normalFields[i], prop = util3.safeProp(field.name); - if (field.resolvedType instanceof Enum) - gen("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault); - else if (field.long) - gen("if(util.Long){")("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n", prop)("}else")("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber()); - else if (field.bytes) { - var arrayDefault = "[" + Array.prototype.slice.call(field.typeDefault).join(",") + "]"; - gen("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))("else{")("d%s=%s", prop, arrayDefault)("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)("}"); - } else - gen("d%s=%j", prop, field.typeDefault); - } - gen("}"); - } - var hasKs2 = false; - for (i = 0;i < fields.length; ++i) { - var field = fields[i], index = mtype._fieldsArray.indexOf(field), prop = util3.safeProp(field.name); - if (field.map) { - if (!hasKs2) { - hasKs2 = true; - gen("var ks2"); - } - gen("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)("d%s={}", prop)("for(var j=0;j { - var wrappers = exports; - var Message = require_message(); - wrappers[".google.protobuf.Any"] = { - fromObject: function(object3) { - if (object3 && object3["@type"]) { - var name = object3["@type"].substring(object3["@type"].lastIndexOf("/") + 1); - var type = this.lookup(name); - if (type) { - var type_url = object3["@type"].charAt(0) === "." ? object3["@type"].slice(1) : object3["@type"]; - if (type_url.indexOf("/") === -1) { - type_url = "/" + type_url; - } - return this.create({ - type_url, - value: type.encode(type.fromObject(object3)).finish() - }); - } - } - return this.fromObject(object3); - }, - toObject: function(message, options) { - var googleApi = "type.googleapis.com/"; - var prefix = ""; - var name = ""; - if (options && options.json && message.type_url && message.value) { - name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1); - prefix = message.type_url.substring(0, message.type_url.lastIndexOf("/") + 1); - var type = this.lookup(name); - if (type) - message = type.decode(message.value); - } - if (!(message instanceof this.ctor) && message instanceof Message) { - var object3 = message.$type.toObject(message, options); - var messageName = message.$type.fullName[0] === "." ? message.$type.fullName.slice(1) : message.$type.fullName; - if (prefix === "") { - prefix = googleApi; - } - name = prefix + messageName; - object3["@type"] = name; - return object3; - } - return this.toObject(message, options); - } - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/type.js -var require_type = __commonJS((exports, module) => { - module.exports = Type; - var Namespace = require_namespace(); - ((Type.prototype = Object.create(Namespace.prototype)).constructor = Type).className = "Type"; - var Enum = require_enum3(); - var OneOf = require_oneof(); - var Field = require_field(); - var MapField = require_mapfield(); - var Service = require_service2(); - var Message = require_message(); - var Reader = require_reader(); - var Writer = require_writer(); - var util3 = require_util5(); - var encoder2 = require_encoder(); - var decoder = require_decoder(); - var verifier = require_verifier(); - var converter = require_converter(); - var wrappers = require_wrappers(); - function Type(name, options) { - Namespace.call(this, name, options); - this.fields = {}; - this.oneofs = undefined; - this.extensions = undefined; - this.reserved = undefined; - this.group = undefined; - this._fieldsById = null; - this._fieldsArray = null; - this._oneofsArray = null; - this._ctor = null; - } - Object.defineProperties(Type.prototype, { - fieldsById: { - get: function() { - if (this._fieldsById) - return this._fieldsById; - this._fieldsById = {}; - for (var names = Object.keys(this.fields), i = 0;i < names.length; ++i) { - var field = this.fields[names[i]], id = field.id; - if (this._fieldsById[id]) - throw Error("duplicate id " + id + " in " + this); - this._fieldsById[id] = field; - } - return this._fieldsById; - } - }, - fieldsArray: { - get: function() { - return this._fieldsArray || (this._fieldsArray = util3.toArray(this.fields)); - } - }, - oneofsArray: { - get: function() { - return this._oneofsArray || (this._oneofsArray = util3.toArray(this.oneofs)); - } - }, - ctor: { - get: function() { - return this._ctor || (this.ctor = Type.generateConstructor(this)()); - }, - set: function(ctor) { - var prototype = ctor.prototype; - if (!(prototype instanceof Message)) { - (ctor.prototype = new Message).constructor = ctor; - util3.merge(ctor.prototype, prototype); - } - ctor.$type = ctor.prototype.$type = this; - util3.merge(ctor, Message, true); - this._ctor = ctor; - var i = 0; - for (;i < this.fieldsArray.length; ++i) - this._fieldsArray[i].resolve(); - var ctorProperties = {}; - for (i = 0;i < this.oneofsArray.length; ++i) - ctorProperties[this._oneofsArray[i].resolve().name] = { - get: util3.oneOfGetter(this._oneofsArray[i].oneof), - set: util3.oneOfSetter(this._oneofsArray[i].oneof) - }; - if (i) - Object.defineProperties(ctor.prototype, ctorProperties); - } - } - }); - Type.generateConstructor = function generateConstructor(mtype) { - var gen = util3.codegen(["p"], mtype.name); - for (var i = 0, field;i < mtype.fieldsArray.length; ++i) - if ((field = mtype._fieldsArray[i]).map) - gen("this%s={}", util3.safeProp(field.name)); - else if (field.repeated) - gen("this%s=[]", util3.safeProp(field.name)); - return gen("if(p)for(var ks=Object.keys(p),i=0;i { - oneof._resolveFeatures(edition); - }); - this.fieldsArray.forEach((field) => { - field._resolveFeatures(edition); - }); - return this; - }; - Type.prototype.get = function get(name) { - return this.fields[name] || this.oneofs && this.oneofs[name] || this.nested && this.nested[name] || null; - }; - Type.prototype.add = function add(object3) { - if (this.get(object3.name)) - throw Error("duplicate name '" + object3.name + "' in " + this); - if (object3 instanceof Field && object3.extend === undefined) { - if (this._fieldsById ? this._fieldsById[object3.id] : this.fieldsById[object3.id]) - throw Error("duplicate id " + object3.id + " in " + this); - if (this.isReservedId(object3.id)) - throw Error("id " + object3.id + " is reserved in " + this); - if (this.isReservedName(object3.name)) - throw Error("name '" + object3.name + "' is reserved in " + this); - if (object3.parent) - object3.parent.remove(object3); - this.fields[object3.name] = object3; - object3.message = this; - object3.onAdd(this); - return clearCache(this); - } - if (object3 instanceof OneOf) { - if (!this.oneofs) - this.oneofs = {}; - this.oneofs[object3.name] = object3; - object3.onAdd(this); - return clearCache(this); - } - return Namespace.prototype.add.call(this, object3); - }; - Type.prototype.remove = function remove(object3) { - if (object3 instanceof Field && object3.extend === undefined) { - if (!this.fields || this.fields[object3.name] !== object3) - throw Error(object3 + " is not a member of " + this); - delete this.fields[object3.name]; - object3.parent = null; - object3.onRemove(this); - return clearCache(this); - } - if (object3 instanceof OneOf) { - if (!this.oneofs || this.oneofs[object3.name] !== object3) - throw Error(object3 + " is not a member of " + this); - delete this.oneofs[object3.name]; - object3.parent = null; - object3.onRemove(this); - return clearCache(this); - } - return Namespace.prototype.remove.call(this, object3); - }; - Type.prototype.isReservedId = function isReservedId(id) { - return Namespace.isReservedId(this.reserved, id); - }; - Type.prototype.isReservedName = function isReservedName(name) { - return Namespace.isReservedName(this.reserved, name); - }; - Type.prototype.create = function create(properties) { - return new this.ctor(properties); - }; - Type.prototype.setup = function setup() { - var fullName = this.fullName, types = []; - for (var i = 0;i < this.fieldsArray.length; ++i) - types.push(this._fieldsArray[i].resolve().resolvedType); - this.encode = encoder2(this)({ - Writer, - types, - util: util3 - }); - this.decode = decoder(this)({ - Reader, - types, - util: util3 - }); - this.verify = verifier(this)({ - types, - util: util3 - }); - this.fromObject = converter.fromObject(this)({ - types, - util: util3 - }); - this.toObject = converter.toObject(this)({ - types, - util: util3 - }); - var wrapper = wrappers[fullName]; - if (wrapper) { - var originalThis = Object.create(this); - originalThis.fromObject = this.fromObject; - this.fromObject = wrapper.fromObject.bind(originalThis); - originalThis.toObject = this.toObject; - this.toObject = wrapper.toObject.bind(originalThis); - } - return this; - }; - Type.prototype.encode = function encode_setup(message, writer) { - return this.setup().encode(message, writer); - }; - Type.prototype.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim(); - }; - Type.prototype.decode = function decode_setup(reader, length) { - return this.setup().decode(reader, length); - }; - Type.prototype.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof Reader)) - reader = Reader.create(reader); - return this.decode(reader, reader.uint32()); - }; - Type.prototype.verify = function verify_setup(message) { - return this.setup().verify(message); - }; - Type.prototype.fromObject = function fromObject(object3) { - return this.setup().fromObject(object3); - }; - Type.prototype.toObject = function toObject(message, options) { - return this.setup().toObject(message, options); - }; - Type.d = function decorateType(typeName) { - return function typeDecorator(target) { - util3.decorateType(target, typeName); - }; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/root.js -var require_root2 = __commonJS((exports, module) => { - module.exports = Root; - var Namespace = require_namespace(); - ((Root.prototype = Object.create(Namespace.prototype)).constructor = Root).className = "Root"; - var Field = require_field(); - var Enum = require_enum3(); - var OneOf = require_oneof(); - var util3 = require_util5(); - var Type; - var parse6; - var common; - function Root(options) { - Namespace.call(this, "", options); - this.deferred = []; - this.files = []; - this._edition = "proto2"; - this._fullyQualifiedObjects = {}; - } - Root.fromJSON = function fromJSON(json3, root) { - if (!root) - root = new Root; - if (json3.options) - root.setOptions(json3.options); - return root.addJSON(json3.nested).resolveAll(); - }; - Root.prototype.resolvePath = util3.path.resolve; - Root.prototype.fetch = util3.fetch; - function SYNC() {} - Root.prototype.load = function load(filename, options, callback) { - if (typeof options === "function") { - callback = options; - options = undefined; - } - var self2 = this; - if (!callback) { - return util3.asPromise(load, self2, filename, options); - } - var sync = callback === SYNC; - function finish(err, root) { - if (!callback) { - return; - } - if (sync) { - throw err; - } - if (root) { - root.resolveAll(); - } - var cb = callback; - callback = null; - cb(err, root); - } - function getBundledFileName(filename2) { - var idx = filename2.lastIndexOf("google/protobuf/"); - if (idx > -1) { - var altname = filename2.substring(idx); - if (altname in common) - return altname; - } - return null; - } - function process3(filename2, source) { - try { - if (util3.isString(source) && source.charAt(0) === "{") - source = JSON.parse(source); - if (!util3.isString(source)) - self2.setOptions(source.options).addJSON(source.nested); - else { - parse6.filename = filename2; - var parsed = parse6(source, self2, options), resolved2, i2 = 0; - if (parsed.imports) { - for (;i2 < parsed.imports.length; ++i2) - if (resolved2 = getBundledFileName(parsed.imports[i2]) || self2.resolvePath(filename2, parsed.imports[i2])) - fetch2(resolved2); - } - if (parsed.weakImports) { - for (i2 = 0;i2 < parsed.weakImports.length; ++i2) - if (resolved2 = getBundledFileName(parsed.weakImports[i2]) || self2.resolvePath(filename2, parsed.weakImports[i2])) - fetch2(resolved2, true); - } - } - } catch (err) { - finish(err); - } - if (!sync && !queued) { - finish(null, self2); - } - } - function fetch2(filename2, weak) { - filename2 = getBundledFileName(filename2) || filename2; - if (self2.files.indexOf(filename2) > -1) { - return; - } - self2.files.push(filename2); - if (filename2 in common) { - if (sync) { - process3(filename2, common[filename2]); - } else { - ++queued; - setTimeout(function() { - --queued; - process3(filename2, common[filename2]); - }); - } - return; - } - if (sync) { - var source; - try { - source = util3.fs.readFileSync(filename2).toString("utf8"); - } catch (err) { - if (!weak) - finish(err); - return; - } - process3(filename2, source); - } else { - ++queued; - self2.fetch(filename2, function(err, source2) { - --queued; - if (!callback) { - return; - } - if (err) { - if (!weak) - finish(err); - else if (!queued) - finish(null, self2); - return; - } - process3(filename2, source2); - }); - } - } - var queued = 0; - if (util3.isString(filename)) { - filename = [filename]; - } - for (var i = 0, resolved;i < filename.length; ++i) - if (resolved = self2.resolvePath("", filename[i])) - fetch2(resolved); - if (sync) { - self2.resolveAll(); - return self2; - } - if (!queued) { - finish(null, self2); - } - return self2; - }; - Root.prototype.loadSync = function loadSync(filename, options) { - if (!util3.isNode) - throw Error("not supported"); - return this.load(filename, options, SYNC); - }; - Root.prototype.resolveAll = function resolveAll() { - if (!this._needsRecursiveResolve) - return this; - if (this.deferred.length) - throw Error("unresolvable extensions: " + this.deferred.map(function(field) { - return "'extend " + field.extend + "' in " + field.parent.fullName; - }).join(", ")); - return Namespace.prototype.resolveAll.call(this); - }; - var exposeRe = /^[A-Z]/; - function tryHandleExtension(root, field) { - var extendedType = field.parent.lookup(field.extend); - if (extendedType) { - var sisterField = new Field(field.fullName, field.id, field.type, field.rule, undefined, field.options); - if (extendedType.get(sisterField.name)) { - return true; - } - sisterField.declaringField = field; - field.extensionField = sisterField; - extendedType.add(sisterField); - return true; - } - return false; - } - Root.prototype._handleAdd = function _handleAdd(object3) { - if (object3 instanceof Field) { - if (object3.extend !== undefined && !object3.extensionField) { - if (!tryHandleExtension(this, object3)) - this.deferred.push(object3); - } - } else if (object3 instanceof Enum) { - if (exposeRe.test(object3.name)) - object3.parent[object3.name] = object3.values; - } else if (!(object3 instanceof OneOf)) { - if (object3 instanceof Type) - for (var i = 0;i < this.deferred.length; ) - if (tryHandleExtension(this, this.deferred[i])) - this.deferred.splice(i, 1); - else - ++i; - for (var j = 0;j < object3.nestedArray.length; ++j) - this._handleAdd(object3._nestedArray[j]); - if (exposeRe.test(object3.name)) - object3.parent[object3.name] = object3; - } - if (object3 instanceof Type || object3 instanceof Enum || object3 instanceof Field) { - this._fullyQualifiedObjects[object3.fullName] = object3; - } - }; - Root.prototype._handleRemove = function _handleRemove(object3) { - if (object3 instanceof Field) { - if (object3.extend !== undefined) { - if (object3.extensionField) { - object3.extensionField.parent.remove(object3.extensionField); - object3.extensionField = null; - } else { - var index = this.deferred.indexOf(object3); - if (index > -1) - this.deferred.splice(index, 1); - } - } - } else if (object3 instanceof Enum) { - if (exposeRe.test(object3.name)) - delete object3.parent[object3.name]; - } else if (object3 instanceof Namespace) { - for (var i = 0;i < object3.nestedArray.length; ++i) - this._handleRemove(object3._nestedArray[i]); - if (exposeRe.test(object3.name)) - delete object3.parent[object3.name]; - } - delete this._fullyQualifiedObjects[object3.fullName]; - }; - Root._configure = function(Type_, parse_, common_) { - Type = Type_; - parse6 = parse_; - common = common_; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/util.js -var require_util5 = __commonJS((exports, module) => { - var util3 = module.exports = require_minimal(); - var roots = require_roots(); - var Type; - var Enum; - util3.codegen = require_codegen(); - util3.fetch = require_fetch(); - util3.path = require_path(); - util3.fs = util3.inquire("fs"); - util3.toArray = function toArray(object3) { - if (object3) { - var keys = Object.keys(object3), array3 = new Array(keys.length), index = 0; - while (index < keys.length) - array3[index] = object3[keys[index++]]; - return array3; - } - return []; - }; - util3.toObject = function toObject(array3) { - var object3 = {}, index = 0; - while (index < array3.length) { - var key = array3[index++], val = array3[index++]; - if (val !== undefined) - object3[key] = val; - } - return object3; - }; - var safePropBackslashRe = /\\/g; - var safePropQuoteRe = /"/g; - util3.isReserved = function isReserved(name) { - return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(name); - }; - util3.safeProp = function safeProp(prop) { - if (!/^[$\w_]+$/.test(prop) || util3.isReserved(prop)) - return '["' + prop.replace(safePropBackslashRe, "\\\\").replace(safePropQuoteRe, "\\\"") + '"]'; - return "." + prop; - }; - util3.ucFirst = function ucFirst(str) { - return str.charAt(0).toUpperCase() + str.substring(1); - }; - var camelCaseRe = /_([a-z])/g; - util3.camelCase = function camelCase(str) { - return str.substring(0, 1) + str.substring(1).replace(camelCaseRe, function($0, $1) { - return $1.toUpperCase(); - }); - }; - util3.compareFieldsById = function compareFieldsById(a, b) { - return a.id - b.id; - }; - util3.decorateType = function decorateType(ctor, typeName) { - if (ctor.$type) { - if (typeName && ctor.$type.name !== typeName) { - util3.decorateRoot.remove(ctor.$type); - ctor.$type.name = typeName; - util3.decorateRoot.add(ctor.$type); - } - return ctor.$type; - } - if (!Type) - Type = require_type(); - var type = new Type(typeName || ctor.name); - util3.decorateRoot.add(type); - type.ctor = ctor; - Object.defineProperty(ctor, "$type", { value: type, enumerable: false }); - Object.defineProperty(ctor.prototype, "$type", { value: type, enumerable: false }); - return type; - }; - var decorateEnumIndex = 0; - util3.decorateEnum = function decorateEnum(object3) { - if (object3.$type) - return object3.$type; - if (!Enum) - Enum = require_enum3(); - var enm = new Enum("Enum" + decorateEnumIndex++, object3); - util3.decorateRoot.add(enm); - Object.defineProperty(object3, "$type", { value: enm, enumerable: false }); - return enm; - }; - util3.setProperty = function setProperty(dst, path, value, ifNotSet) { - function setProp(dst2, path2, value2) { - var part = path2.shift(); - if (part === "__proto__" || part === "prototype") { - return dst2; - } - if (path2.length > 0) { - dst2[part] = setProp(dst2[part] || {}, path2, value2); - } else { - var prevValue = dst2[part]; - if (prevValue && ifNotSet) - return dst2; - if (prevValue) - value2 = [].concat(prevValue).concat(value2); - dst2[part] = value2; - } - return dst2; - } - if (typeof dst !== "object") - throw TypeError("dst must be an object"); - if (!path) - throw TypeError("path must be specified"); - path = path.split("."); - return setProp(dst, path, value); - }; - Object.defineProperty(util3, "decorateRoot", { - get: function() { - return roots["decorated"] || (roots["decorated"] = new (require_root2())); - } - }); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/types.js -var require_types13 = __commonJS((exports) => { - var types = exports; - var util3 = require_util5(); - var s2 = [ - "double", - "float", - "int32", - "uint32", - "sint32", - "fixed32", - "sfixed32", - "int64", - "uint64", - "sint64", - "fixed64", - "sfixed64", - "bool", - "string", - "bytes" - ]; - function bake(values, offset) { - var i = 0, o = {}; - offset |= 0; - while (i < values.length) - o[s2[i + offset]] = values[i++]; - return o; - } - types.basic = bake([ - 1, - 5, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 1, - 1, - 0, - 2, - 2 - ]); - types.defaults = bake([ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - false, - "", - util3.emptyArray, - null - ]); - types.long = bake([ - 0, - 0, - 0, - 1, - 1 - ], 7); - types.mapKey = bake([ - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 1, - 1, - 0, - 2 - ], 2); - types.packed = bake([ - 1, - 5, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 1, - 1, - 0 - ]); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/field.js -var require_field = __commonJS((exports, module) => { - module.exports = Field; - var ReflectionObject = require_object(); - ((Field.prototype = Object.create(ReflectionObject.prototype)).constructor = Field).className = "Field"; - var Enum = require_enum3(); - var types = require_types13(); - var util3 = require_util5(); - var Type; - var ruleRe = /^required|optional|repeated$/; - Field.fromJSON = function fromJSON(name, json3) { - var field = new Field(name, json3.id, json3.type, json3.rule, json3.extend, json3.options, json3.comment); - if (json3.edition) - field._edition = json3.edition; - field._defaultEdition = "proto3"; - return field; - }; - function Field(name, id, type, rule, extend2, options, comment) { - if (util3.isObject(rule)) { - comment = extend2; - options = rule; - rule = extend2 = undefined; - } else if (util3.isObject(extend2)) { - comment = options; - options = extend2; - extend2 = undefined; - } - ReflectionObject.call(this, name, options); - if (!util3.isInteger(id) || id < 0) - throw TypeError("id must be a non-negative integer"); - if (!util3.isString(type)) - throw TypeError("type must be a string"); - if (rule !== undefined && !ruleRe.test(rule = rule.toString().toLowerCase())) - throw TypeError("rule must be a string rule"); - if (extend2 !== undefined && !util3.isString(extend2)) - throw TypeError("extend must be a string"); - if (rule === "proto3_optional") { - rule = "optional"; - } - this.rule = rule && rule !== "optional" ? rule : undefined; - this.type = type; - this.id = id; - this.extend = extend2 || undefined; - this.repeated = rule === "repeated"; - this.map = false; - this.message = null; - this.partOf = null; - this.typeDefault = null; - this.defaultValue = null; - this.long = util3.Long ? types.long[type] !== undefined : false; - this.bytes = type === "bytes"; - this.resolvedType = null; - this.extensionField = null; - this.declaringField = null; - this.comment = comment; - } - Object.defineProperty(Field.prototype, "required", { - get: function() { - return this._features.field_presence === "LEGACY_REQUIRED"; - } - }); - Object.defineProperty(Field.prototype, "optional", { - get: function() { - return !this.required; - } - }); - Object.defineProperty(Field.prototype, "delimited", { - get: function() { - return this.resolvedType instanceof Type && this._features.message_encoding === "DELIMITED"; - } - }); - Object.defineProperty(Field.prototype, "packed", { - get: function() { - return this._features.repeated_field_encoding === "PACKED"; - } - }); - Object.defineProperty(Field.prototype, "hasPresence", { - get: function() { - if (this.repeated || this.map) { - return false; - } - return this.partOf || this.declaringField || this.extensionField || this._features.field_presence !== "IMPLICIT"; - } - }); - Field.prototype.setOption = function setOption(name, value, ifNotSet) { - return ReflectionObject.prototype.setOption.call(this, name, value, ifNotSet); - }; - Field.prototype.toJSON = function toJSON(toJSONOptions) { - var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; - return util3.toObject([ - "edition", - this._editionToJSON(), - "rule", - this.rule !== "optional" && this.rule || undefined, - "type", - this.type, - "id", - this.id, - "extend", - this.extend, - "options", - this.options, - "comment", - keepComments ? this.comment : undefined - ]); - }; - Field.prototype.resolve = function resolve() { - if (this.resolved) - return this; - if ((this.typeDefault = types.defaults[this.type]) === undefined) { - this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type); - if (this.resolvedType instanceof Type) - this.typeDefault = null; - else - this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; - } else if (this.options && this.options.proto3_optional) { - this.typeDefault = null; - } - if (this.options && this.options["default"] != null) { - this.typeDefault = this.options["default"]; - if (this.resolvedType instanceof Enum && typeof this.typeDefault === "string") - this.typeDefault = this.resolvedType.values[this.typeDefault]; - } - if (this.options) { - if (this.options.packed !== undefined && this.resolvedType && !(this.resolvedType instanceof Enum)) - delete this.options.packed; - if (!Object.keys(this.options).length) - this.options = undefined; - } - if (this.long) { - this.typeDefault = util3.Long.fromNumber(this.typeDefault, this.type.charAt(0) === "u"); - if (Object.freeze) - Object.freeze(this.typeDefault); - } else if (this.bytes && typeof this.typeDefault === "string") { - var buf; - if (util3.base64.test(this.typeDefault)) - util3.base64.decode(this.typeDefault, buf = util3.newBuffer(util3.base64.length(this.typeDefault)), 0); - else - util3.utf8.write(this.typeDefault, buf = util3.newBuffer(util3.utf8.length(this.typeDefault)), 0); - this.typeDefault = buf; - } - if (this.map) - this.defaultValue = util3.emptyObject; - else if (this.repeated) - this.defaultValue = util3.emptyArray; - else - this.defaultValue = this.typeDefault; - if (this.parent instanceof Type) - this.parent.ctor.prototype[this.name] = this.defaultValue; - return ReflectionObject.prototype.resolve.call(this); - }; - Field.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures(edition) { - if (edition !== "proto2" && edition !== "proto3") { - return {}; - } - var features = {}; - if (this.rule === "required") { - features.field_presence = "LEGACY_REQUIRED"; - } - if (this.parent && types.defaults[this.type] === undefined) { - var type = this.parent.get(this.type.split(".").pop()); - if (type && type instanceof Type && type.group) { - features.message_encoding = "DELIMITED"; - } - } - if (this.getOption("packed") === true) { - features.repeated_field_encoding = "PACKED"; - } else if (this.getOption("packed") === false) { - features.repeated_field_encoding = "EXPANDED"; - } - return features; - }; - Field.prototype._resolveFeatures = function _resolveFeatures(edition) { - return ReflectionObject.prototype._resolveFeatures.call(this, this._edition || edition); - }; - Field.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) { - if (typeof fieldType === "function") - fieldType = util3.decorateType(fieldType).name; - else if (fieldType && typeof fieldType === "object") - fieldType = util3.decorateEnum(fieldType).name; - return function fieldDecorator(prototype, fieldName) { - util3.decorateType(prototype.constructor).add(new Field(fieldName, fieldId, fieldType, fieldRule, { default: defaultValue })); - }; - }; - Field._configure = function configure(Type_) { - Type = Type_; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/oneof.js -var require_oneof = __commonJS((exports, module) => { - module.exports = OneOf; - var ReflectionObject = require_object(); - ((OneOf.prototype = Object.create(ReflectionObject.prototype)).constructor = OneOf).className = "OneOf"; - var Field = require_field(); - var util3 = require_util5(); - function OneOf(name, fieldNames, options, comment) { - if (!Array.isArray(fieldNames)) { - options = fieldNames; - fieldNames = undefined; - } - ReflectionObject.call(this, name, options); - if (!(fieldNames === undefined || Array.isArray(fieldNames))) - throw TypeError("fieldNames must be an Array"); - this.oneof = fieldNames || []; - this.fieldsArray = []; - this.comment = comment; - } - OneOf.fromJSON = function fromJSON(name, json3) { - return new OneOf(name, json3.oneof, json3.options, json3.comment); - }; - OneOf.prototype.toJSON = function toJSON(toJSONOptions) { - var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; - return util3.toObject([ - "options", - this.options, - "oneof", - this.oneof, - "comment", - keepComments ? this.comment : undefined - ]); - }; - function addFieldsToParent(oneof) { - if (oneof.parent) { - for (var i = 0;i < oneof.fieldsArray.length; ++i) - if (!oneof.fieldsArray[i].parent) - oneof.parent.add(oneof.fieldsArray[i]); - } - } - OneOf.prototype.add = function add(field) { - if (!(field instanceof Field)) - throw TypeError("field must be a Field"); - if (field.parent && field.parent !== this.parent) - field.parent.remove(field); - this.oneof.push(field.name); - this.fieldsArray.push(field); - field.partOf = this; - addFieldsToParent(this); - return this; - }; - OneOf.prototype.remove = function remove(field) { - if (!(field instanceof Field)) - throw TypeError("field must be a Field"); - var index = this.fieldsArray.indexOf(field); - if (index < 0) - throw Error(field + " is not a member of " + this); - this.fieldsArray.splice(index, 1); - index = this.oneof.indexOf(field.name); - if (index > -1) - this.oneof.splice(index, 1); - field.partOf = null; - return this; - }; - OneOf.prototype.onAdd = function onAdd(parent) { - ReflectionObject.prototype.onAdd.call(this, parent); - var self2 = this; - for (var i = 0;i < this.oneof.length; ++i) { - var field = parent.get(this.oneof[i]); - if (field && !field.partOf) { - field.partOf = self2; - self2.fieldsArray.push(field); - } - } - addFieldsToParent(this); - }; - OneOf.prototype.onRemove = function onRemove(parent) { - for (var i = 0, field;i < this.fieldsArray.length; ++i) - if ((field = this.fieldsArray[i]).parent) - field.parent.remove(field); - ReflectionObject.prototype.onRemove.call(this, parent); - }; - Object.defineProperty(OneOf.prototype, "isProto3Optional", { - get: function() { - if (this.fieldsArray == null || this.fieldsArray.length !== 1) { - return false; - } - var field = this.fieldsArray[0]; - return field.options != null && field.options["proto3_optional"] === true; - } - }); - OneOf.d = function decorateOneOf() { - var fieldNames = new Array(arguments.length), index = 0; - while (index < arguments.length) - fieldNames[index] = arguments[index++]; - return function oneOfDecorator(prototype, oneofName) { - util3.decorateType(prototype.constructor).add(new OneOf(oneofName, fieldNames)); - Object.defineProperty(prototype, oneofName, { - get: util3.oneOfGetter(fieldNames), - set: util3.oneOfSetter(fieldNames) - }); - }; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/object.js -var require_object = __commonJS((exports, module) => { - module.exports = ReflectionObject; - ReflectionObject.className = "ReflectionObject"; - var OneOf = require_oneof(); - var util3 = require_util5(); - var Root; - var editions2023Defaults = { enum_type: "OPEN", field_presence: "EXPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY" }; - var proto2Defaults = { enum_type: "CLOSED", field_presence: "EXPLICIT", json_format: "LEGACY_BEST_EFFORT", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "EXPANDED", utf8_validation: "NONE" }; - var proto3Defaults = { enum_type: "OPEN", field_presence: "IMPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY" }; - function ReflectionObject(name, options) { - if (!util3.isString(name)) - throw TypeError("name must be a string"); - if (options && !util3.isObject(options)) - throw TypeError("options must be an object"); - this.options = options; - this.parsedOptions = null; - this.name = name; - this._edition = null; - this._defaultEdition = "proto2"; - this._features = {}; - this._featuresResolved = false; - this.parent = null; - this.resolved = false; - this.comment = null; - this.filename = null; - } - Object.defineProperties(ReflectionObject.prototype, { - root: { - get: function() { - var ptr = this; - while (ptr.parent !== null) - ptr = ptr.parent; - return ptr; - } - }, - fullName: { - get: function() { - var path = [this.name], ptr = this.parent; - while (ptr) { - path.unshift(ptr.name); - ptr = ptr.parent; - } - return path.join("."); - } - } - }); - ReflectionObject.prototype.toJSON = function toJSON() { - throw Error(); - }; - ReflectionObject.prototype.onAdd = function onAdd(parent) { - if (this.parent && this.parent !== parent) - this.parent.remove(this); - this.parent = parent; - this.resolved = false; - var root = parent.root; - if (root instanceof Root) - root._handleAdd(this); - }; - ReflectionObject.prototype.onRemove = function onRemove(parent) { - var root = parent.root; - if (root instanceof Root) - root._handleRemove(this); - this.parent = null; - this.resolved = false; - }; - ReflectionObject.prototype.resolve = function resolve() { - if (this.resolved) - return this; - if (this.root instanceof Root) - this.resolved = true; - return this; - }; - ReflectionObject.prototype._resolveFeaturesRecursive = function _resolveFeaturesRecursive(edition) { - return this._resolveFeatures(this._edition || edition); - }; - ReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition) { - if (this._featuresResolved) { - return; - } - var defaults = {}; - if (!edition) { - throw new Error("Unknown edition for " + this.fullName); - } - var protoFeatures = Object.assign(this.options ? Object.assign({}, this.options.features) : {}, this._inferLegacyProtoFeatures(edition)); - if (this._edition) { - if (edition === "proto2") { - defaults = Object.assign({}, proto2Defaults); - } else if (edition === "proto3") { - defaults = Object.assign({}, proto3Defaults); - } else if (edition === "2023") { - defaults = Object.assign({}, editions2023Defaults); - } else { - throw new Error("Unknown edition: " + edition); - } - this._features = Object.assign(defaults, protoFeatures || {}); - this._featuresResolved = true; - return; - } - if (this.partOf instanceof OneOf) { - var lexicalParentFeaturesCopy = Object.assign({}, this.partOf._features); - this._features = Object.assign(lexicalParentFeaturesCopy, protoFeatures || {}); - } else if (this.declaringField) {} else if (this.parent) { - var parentFeaturesCopy = Object.assign({}, this.parent._features); - this._features = Object.assign(parentFeaturesCopy, protoFeatures || {}); - } else { - throw new Error("Unable to find a parent for " + this.fullName); - } - if (this.extensionField) { - this.extensionField._features = this._features; - } - this._featuresResolved = true; - }; - ReflectionObject.prototype._inferLegacyProtoFeatures = function _inferLegacyProtoFeatures() { - return {}; - }; - ReflectionObject.prototype.getOption = function getOption(name) { - if (this.options) - return this.options[name]; - return; - }; - ReflectionObject.prototype.setOption = function setOption(name, value, ifNotSet) { - if (!this.options) - this.options = {}; - if (/^features\./.test(name)) { - util3.setProperty(this.options, name, value, ifNotSet); - } else if (!ifNotSet || this.options[name] === undefined) { - if (this.getOption(name) !== value) - this.resolved = false; - this.options[name] = value; - } - return this; - }; - ReflectionObject.prototype.setParsedOption = function setParsedOption(name, value, propName) { - if (!this.parsedOptions) { - this.parsedOptions = []; - } - var parsedOptions = this.parsedOptions; - if (propName) { - var opt = parsedOptions.find(function(opt2) { - return Object.prototype.hasOwnProperty.call(opt2, name); - }); - if (opt) { - var newValue = opt[name]; - util3.setProperty(newValue, propName, value); - } else { - opt = {}; - opt[name] = util3.setProperty({}, propName, value); - parsedOptions.push(opt); - } - } else { - var newOpt = {}; - newOpt[name] = value; - parsedOptions.push(newOpt); - } - return this; - }; - ReflectionObject.prototype.setOptions = function setOptions(options, ifNotSet) { - if (options) - for (var keys = Object.keys(options), i = 0;i < keys.length; ++i) - this.setOption(keys[i], options[keys[i]], ifNotSet); - return this; - }; - ReflectionObject.prototype.toString = function toString() { - var className = this.constructor.className, fullName = this.fullName; - if (fullName.length) - return className + " " + fullName; - return className; - }; - ReflectionObject.prototype._editionToJSON = function _editionToJSON() { - if (!this._edition || this._edition === "proto3") { - return; - } - return this._edition; - }; - ReflectionObject._configure = function(Root_) { - Root = Root_; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/enum.js -var require_enum3 = __commonJS((exports, module) => { - module.exports = Enum; - var ReflectionObject = require_object(); - ((Enum.prototype = Object.create(ReflectionObject.prototype)).constructor = Enum).className = "Enum"; - var Namespace = require_namespace(); - var util3 = require_util5(); - function Enum(name, values, options, comment, comments, valuesOptions) { - ReflectionObject.call(this, name, options); - if (values && typeof values !== "object") - throw TypeError("values must be an object"); - this.valuesById = {}; - this.values = Object.create(this.valuesById); - this.comment = comment; - this.comments = comments || {}; - this.valuesOptions = valuesOptions; - this._valuesFeatures = {}; - this.reserved = undefined; - if (values) { - for (var keys = Object.keys(values), i = 0;i < keys.length; ++i) - if (typeof values[keys[i]] === "number") - this.valuesById[this.values[keys[i]] = values[keys[i]]] = keys[i]; - } - } - Enum.prototype._resolveFeatures = function _resolveFeatures(edition) { - edition = this._edition || edition; - ReflectionObject.prototype._resolveFeatures.call(this, edition); - Object.keys(this.values).forEach((key) => { - var parentFeaturesCopy = Object.assign({}, this._features); - this._valuesFeatures[key] = Object.assign(parentFeaturesCopy, this.valuesOptions && this.valuesOptions[key] && this.valuesOptions[key].features); - }); - return this; - }; - Enum.fromJSON = function fromJSON(name, json3) { - var enm = new Enum(name, json3.values, json3.options, json3.comment, json3.comments); - enm.reserved = json3.reserved; - if (json3.edition) - enm._edition = json3.edition; - enm._defaultEdition = "proto3"; - return enm; - }; - Enum.prototype.toJSON = function toJSON(toJSONOptions) { - var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; - return util3.toObject([ - "edition", - this._editionToJSON(), - "options", - this.options, - "valuesOptions", - this.valuesOptions, - "values", - this.values, - "reserved", - this.reserved && this.reserved.length ? this.reserved : undefined, - "comment", - keepComments ? this.comment : undefined, - "comments", - keepComments ? this.comments : undefined - ]); - }; - Enum.prototype.add = function add(name, id, comment, options) { - if (!util3.isString(name)) - throw TypeError("name must be a string"); - if (!util3.isInteger(id)) - throw TypeError("id must be an integer"); - if (this.values[name] !== undefined) - throw Error("duplicate name '" + name + "' in " + this); - if (this.isReservedId(id)) - throw Error("id " + id + " is reserved in " + this); - if (this.isReservedName(name)) - throw Error("name '" + name + "' is reserved in " + this); - if (this.valuesById[id] !== undefined) { - if (!(this.options && this.options.allow_alias)) - throw Error("duplicate id " + id + " in " + this); - this.values[name] = id; - } else - this.valuesById[this.values[name] = id] = name; - if (options) { - if (this.valuesOptions === undefined) - this.valuesOptions = {}; - this.valuesOptions[name] = options || null; - } - this.comments[name] = comment || null; - return this; - }; - Enum.prototype.remove = function remove(name) { - if (!util3.isString(name)) - throw TypeError("name must be a string"); - var val = this.values[name]; - if (val == null) - throw Error("name '" + name + "' does not exist in " + this); - delete this.valuesById[val]; - delete this.values[name]; - delete this.comments[name]; - if (this.valuesOptions) - delete this.valuesOptions[name]; - return this; - }; - Enum.prototype.isReservedId = function isReservedId(id) { - return Namespace.isReservedId(this.reserved, id); - }; - Enum.prototype.isReservedName = function isReservedName(name) { - return Namespace.isReservedName(this.reserved, name); - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/encoder.js -var require_encoder = __commonJS((exports, module) => { - module.exports = encoder2; - var Enum = require_enum3(); - var types = require_types13(); - var util3 = require_util5(); - function genTypePartial(gen, field, fieldIndex, ref) { - return field.delimited ? gen("types[%i].encode(%s,w.uint32(%i)).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0) : gen("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0); - } - function encoder2(mtype) { - var gen = util3.codegen(["m", "w"], mtype.name + "$encode")("if(!w)")("w=Writer.create()"); - var i, ref; - var fields = mtype.fieldsArray.slice().sort(util3.compareFieldsById); - for (var i = 0;i < fields.length; ++i) { - var field = fields[i].resolve(), index = mtype._fieldsArray.indexOf(field), type = field.resolvedType instanceof Enum ? "int32" : field.type, wireType = types.basic[type]; - ref = "m" + util3.safeProp(field.name); - if (field.map) { - gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name)("for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType); - if (wireType === undefined) - gen("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()", index, ref); - else - gen(".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref); - gen("}")("}"); - } else if (field.repeated) { - gen("if(%s!=null&&%s.length){", ref, ref); - if (field.packed && types.packed[type] !== undefined) { - gen("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)("for(var i=0;i<%s.length;++i)", ref)("w.%s(%s[i])", type, ref)("w.ldelim()"); - } else { - gen("for(var i=0;i<%s.length;++i)", ref); - if (wireType === undefined) - genTypePartial(gen, field, index, ref + "[i]"); - else - gen("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref); - } - gen("}"); - } else { - if (field.optional) - gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); - if (wireType === undefined) - genTypePartial(gen, field, index, ref); - else - gen("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref); - } - } - return gen("return w"); - } -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/index-light.js -var require_index_light = __commonJS((exports, module) => { - var protobuf = module.exports = require_index_minimal(); - protobuf.build = "light"; - function load(filename, root, callback) { - if (typeof root === "function") { - callback = root; - root = new protobuf.Root; - } else if (!root) - root = new protobuf.Root; - return root.load(filename, callback); - } - protobuf.load = load; - function loadSync(filename, root) { - if (!root) - root = new protobuf.Root; - return root.loadSync(filename); - } - protobuf.loadSync = loadSync; - protobuf.encoder = require_encoder(); - protobuf.decoder = require_decoder(); - protobuf.verifier = require_verifier(); - protobuf.converter = require_converter(); - protobuf.ReflectionObject = require_object(); - protobuf.Namespace = require_namespace(); - protobuf.Root = require_root2(); - protobuf.Enum = require_enum3(); - protobuf.Type = require_type(); - protobuf.Field = require_field(); - protobuf.OneOf = require_oneof(); - protobuf.MapField = require_mapfield(); - protobuf.Service = require_service2(); - protobuf.Method = require_method(); - protobuf.Message = require_message(); - protobuf.wrappers = require_wrappers(); - protobuf.types = require_types13(); - protobuf.util = require_util5(); - protobuf.ReflectionObject._configure(protobuf.Root); - protobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum); - protobuf.Root._configure(protobuf.Type); - protobuf.Field._configure(protobuf.Type); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/tokenize.js -var require_tokenize = __commonJS((exports, module) => { - module.exports = tokenize; - var delimRe = /[\s{}=;:[\],'"()<>]/g; - var stringDoubleRe = /(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g; - var stringSingleRe = /(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g; - var setCommentRe = /^ *[*/]+ */; - var setCommentAltRe = /^\s*\*?\/*/; - var setCommentSplitRe = /\n/g; - var whitespaceRe = /\s/; - var unescapeRe = /\\(.?)/g; - var unescapeMap = { - "0": "\x00", - r: "\r", - n: ` -`, - t: "\t" - }; - function unescape2(str) { - return str.replace(unescapeRe, function($0, $1) { - switch ($1) { - case "\\": - case "": - return $1; - default: - return unescapeMap[$1] || ""; - } - }); - } - tokenize.unescape = unescape2; - function tokenize(source, alternateCommentMode) { - source = source.toString(); - var offset = 0, length = source.length, line = 1, lastCommentLine = 0, comments = {}; - var stack = []; - var stringDelim = null; - function illegal(subject) { - return Error("illegal " + subject + " (line " + line + ")"); - } - function readString() { - var re = stringDelim === "'" ? stringSingleRe : stringDoubleRe; - re.lastIndex = offset - 1; - var match2 = re.exec(source); - if (!match2) - throw illegal("string"); - offset = re.lastIndex; - push(stringDelim); - stringDelim = null; - return unescape2(match2[1]); - } - function charAt(pos) { - return source.charAt(pos); - } - function setComment(start, end, isLeading) { - var comment = { - type: source.charAt(start++), - lineEmpty: false, - leading: isLeading - }; - var lookback; - if (alternateCommentMode) { - lookback = 2; - } else { - lookback = 3; - } - var commentOffset = start - lookback, c; - do { - if (--commentOffset < 0 || (c = source.charAt(commentOffset)) === ` -`) { - comment.lineEmpty = true; - break; - } - } while (c === " " || c === "\t"); - var lines = source.substring(start, end).split(setCommentSplitRe); - for (var i = 0;i < lines.length; ++i) - lines[i] = lines[i].replace(alternateCommentMode ? setCommentAltRe : setCommentRe, "").trim(); - comment.text = lines.join(` -`).trim(); - comments[line] = comment; - lastCommentLine = line; - } - function isDoubleSlashCommentLine(startOffset) { - var endOffset = findEndOfLine(startOffset); - var lineText = source.substring(startOffset, endOffset); - var isComment = /^\s*\/\//.test(lineText); - return isComment; - } - function findEndOfLine(cursor) { - var endOffset = cursor; - while (endOffset < length && charAt(endOffset) !== ` -`) { - endOffset++; - } - return endOffset; - } - function next() { - if (stack.length > 0) - return stack.shift(); - if (stringDelim) - return readString(); - var repeat, prev, curr, start, isDoc, isLeadingComment = offset === 0; - do { - if (offset === length) - return null; - repeat = false; - while (whitespaceRe.test(curr = charAt(offset))) { - if (curr === ` -`) { - isLeadingComment = true; - ++line; - } - if (++offset === length) - return null; - } - if (charAt(offset) === "/") { - if (++offset === length) { - throw illegal("comment"); - } - if (charAt(offset) === "/") { - if (!alternateCommentMode) { - isDoc = charAt(start = offset + 1) === "/"; - while (charAt(++offset) !== ` -`) { - if (offset === length) { - return null; - } - } - ++offset; - if (isDoc) { - setComment(start, offset - 1, isLeadingComment); - isLeadingComment = true; - } - ++line; - repeat = true; - } else { - start = offset; - isDoc = false; - if (isDoubleSlashCommentLine(offset - 1)) { - isDoc = true; - do { - offset = findEndOfLine(offset); - if (offset === length) { - break; - } - offset++; - if (!isLeadingComment) { - break; - } - } while (isDoubleSlashCommentLine(offset)); - } else { - offset = Math.min(length, findEndOfLine(offset) + 1); - } - if (isDoc) { - setComment(start, offset, isLeadingComment); - isLeadingComment = true; - } - line++; - repeat = true; - } - } else if ((curr = charAt(offset)) === "*") { - start = offset + 1; - isDoc = alternateCommentMode || charAt(start) === "*"; - do { - if (curr === ` -`) { - ++line; - } - if (++offset === length) { - throw illegal("comment"); - } - prev = curr; - curr = charAt(offset); - } while (prev !== "*" || curr !== "/"); - ++offset; - if (isDoc) { - setComment(start, offset - 2, isLeadingComment); - isLeadingComment = true; - } - repeat = true; - } else { - return "/"; - } - } - } while (repeat); - var end = offset; - delimRe.lastIndex = 0; - var delim = delimRe.test(charAt(end++)); - if (!delim) - while (end < length && !delimRe.test(charAt(end))) - ++end; - var token = source.substring(offset, offset = end); - if (token === '"' || token === "'") - stringDelim = token; - return token; - } - function push(token) { - stack.push(token); - } - function peek() { - if (!stack.length) { - var token = next(); - if (token === null) - return null; - push(token); - } - return stack[0]; - } - function skip(expected, optional3) { - var actual = peek(), equals = actual === expected; - if (equals) { - next(); - return true; - } - if (!optional3) - throw illegal("token '" + actual + "', '" + expected + "' expected"); - return false; - } - function cmnt(trailingLine) { - var ret = null; - var comment; - if (trailingLine === undefined) { - comment = comments[line - 1]; - delete comments[line - 1]; - if (comment && (alternateCommentMode || comment.type === "*" || comment.lineEmpty)) { - ret = comment.leading ? comment.text : null; - } - } else { - if (lastCommentLine < trailingLine) { - peek(); - } - comment = comments[trailingLine]; - delete comments[trailingLine]; - if (comment && !comment.lineEmpty && (alternateCommentMode || comment.type === "/")) { - ret = comment.leading ? null : comment.text; - } - } - return ret; - } - return Object.defineProperty({ - next, - peek, - push, - skip, - cmnt - }, "line", { - get: function() { - return line; - } - }); - } -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/parse.js -var require_parse3 = __commonJS((exports, module) => { - module.exports = parse6; - parse6.filename = null; - parse6.defaults = { keepCase: false }; - var tokenize = require_tokenize(); - var Root = require_root2(); - var Type = require_type(); - var Field = require_field(); - var MapField = require_mapfield(); - var OneOf = require_oneof(); - var Enum = require_enum3(); - var Service = require_service2(); - var Method = require_method(); - var ReflectionObject = require_object(); - var types = require_types13(); - var util3 = require_util5(); - var base10Re = /^[1-9][0-9]*$/; - var base10NegRe = /^-?[1-9][0-9]*$/; - var base16Re = /^0[x][0-9a-fA-F]+$/; - var base16NegRe = /^-?0[x][0-9a-fA-F]+$/; - var base8Re = /^0[0-7]+$/; - var base8NegRe = /^-?0[0-7]+$/; - var numberRe = /^(?![eE])[0-9]*(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/; - var nameRe = /^[a-zA-Z_][a-zA-Z_0-9]*$/; - var typeRefRe = /^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*$/; - function parse6(source, root, options) { - if (!(root instanceof Root)) { - options = root; - root = new Root; - } - if (!options) - options = parse6.defaults; - var preferTrailingComment = options.preferTrailingComment || false; - var tn = tokenize(source, options.alternateCommentMode || false), next = tn.next, push = tn.push, peek = tn.peek, skip = tn.skip, cmnt = tn.cmnt; - var head = true, pkg, imports, weakImports, edition = "proto2"; - var ptr = root; - var topLevelObjects = []; - var topLevelOptions = {}; - var applyCase = options.keepCase ? function(name) { - return name; - } : util3.camelCase; - function resolveFileFeatures() { - topLevelObjects.forEach((obj) => { - obj._edition = edition; - Object.keys(topLevelOptions).forEach((opt) => { - if (obj.getOption(opt) !== undefined) - return; - obj.setOption(opt, topLevelOptions[opt], true); - }); - }); - } - function illegal(token2, name, insideTryCatch) { - var filename = parse6.filename; - if (!insideTryCatch) - parse6.filename = null; - return Error("illegal " + (name || "token") + " '" + token2 + "' (" + (filename ? filename + ", " : "") + "line " + tn.line + ")"); - } - function readString() { - var values = [], token2; - do { - if ((token2 = next()) !== '"' && token2 !== "'") - throw illegal(token2); - values.push(next()); - skip(token2); - token2 = peek(); - } while (token2 === '"' || token2 === "'"); - return values.join(""); - } - function readValue(acceptTypeRef) { - var token2 = next(); - switch (token2) { - case "'": - case '"': - push(token2); - return readString(); - case "true": - case "TRUE": - return true; - case "false": - case "FALSE": - return false; - } - try { - return parseNumber(token2, true); - } catch (e) { - if (acceptTypeRef && typeRefRe.test(token2)) - return token2; - throw illegal(token2, "value"); - } - } - function readRanges(target, acceptStrings) { - var token2, start; - do { - if (acceptStrings && ((token2 = peek()) === '"' || token2 === "'")) { - var str = readString(); - target.push(str); - if (edition >= 2023) { - throw illegal(str, "id"); - } - } else { - try { - target.push([start = parseId(next()), skip("to", true) ? parseId(next()) : start]); - } catch (err) { - if (acceptStrings && typeRefRe.test(token2) && edition >= 2023) { - target.push(token2); - } else { - throw err; - } - } - } - } while (skip(",", true)); - var dummy = { options: undefined }; - dummy.setOption = function(name, value) { - if (this.options === undefined) - this.options = {}; - this.options[name] = value; - }; - ifBlock(dummy, function parseRange_block(token3) { - if (token3 === "option") { - parseOption(dummy, token3); - skip(";"); - } else - throw illegal(token3); - }, function parseRange_line() { - parseInlineOptions(dummy); - }); - } - function parseNumber(token2, insideTryCatch) { - var sign = 1; - if (token2.charAt(0) === "-") { - sign = -1; - token2 = token2.substring(1); - } - switch (token2) { - case "inf": - case "INF": - case "Inf": - return sign * Infinity; - case "nan": - case "NAN": - case "Nan": - case "NaN": - return NaN; - case "0": - return 0; - } - if (base10Re.test(token2)) - return sign * parseInt(token2, 10); - if (base16Re.test(token2)) - return sign * parseInt(token2, 16); - if (base8Re.test(token2)) - return sign * parseInt(token2, 8); - if (numberRe.test(token2)) - return sign * parseFloat(token2); - throw illegal(token2, "number", insideTryCatch); - } - function parseId(token2, acceptNegative) { - switch (token2) { - case "max": - case "MAX": - case "Max": - return 536870911; - case "0": - return 0; - } - if (!acceptNegative && token2.charAt(0) === "-") - throw illegal(token2, "id"); - if (base10NegRe.test(token2)) - return parseInt(token2, 10); - if (base16NegRe.test(token2)) - return parseInt(token2, 16); - if (base8NegRe.test(token2)) - return parseInt(token2, 8); - throw illegal(token2, "id"); - } - function parsePackage() { - if (pkg !== undefined) - throw illegal("package"); - pkg = next(); - if (!typeRefRe.test(pkg)) - throw illegal(pkg, "name"); - ptr = ptr.define(pkg); - skip(";"); - } - function parseImport() { - var token2 = peek(); - var whichImports; - switch (token2) { - case "weak": - whichImports = weakImports || (weakImports = []); - next(); - break; - case "public": - next(); - default: - whichImports = imports || (imports = []); - break; - } - token2 = readString(); - skip(";"); - whichImports.push(token2); - } - function parseSyntax() { - skip("="); - edition = readString(); - if (edition < 2023) - throw illegal(edition, "syntax"); - skip(";"); - } - function parseEdition() { - skip("="); - edition = readString(); - const supportedEditions = ["2023"]; - if (!supportedEditions.includes(edition)) - throw illegal(edition, "edition"); - skip(";"); - } - function parseCommon(parent, token2) { - switch (token2) { - case "option": - parseOption(parent, token2); - skip(";"); - return true; - case "message": - parseType(parent, token2); - return true; - case "enum": - parseEnum(parent, token2); - return true; - case "service": - parseService(parent, token2); - return true; - case "extend": - parseExtension(parent, token2); - return true; - } - return false; - } - function ifBlock(obj, fnIf, fnElse) { - var trailingLine = tn.line; - if (obj) { - if (typeof obj.comment !== "string") { - obj.comment = cmnt(); - } - obj.filename = parse6.filename; - } - if (skip("{", true)) { - var token2; - while ((token2 = next()) !== "}") - fnIf(token2); - skip(";", true); - } else { - if (fnElse) - fnElse(); - skip(";"); - if (obj && (typeof obj.comment !== "string" || preferTrailingComment)) - obj.comment = cmnt(trailingLine) || obj.comment; - } - } - function parseType(parent, token2) { - if (!nameRe.test(token2 = next())) - throw illegal(token2, "type name"); - var type = new Type(token2); - ifBlock(type, function parseType_block(token3) { - if (parseCommon(type, token3)) - return; - switch (token3) { - case "map": - parseMapField(type, token3); - break; - case "required": - if (edition !== "proto2") - throw illegal(token3); - case "repeated": - parseField(type, token3); - break; - case "optional": - if (edition === "proto3") { - parseField(type, "proto3_optional"); - } else if (edition !== "proto2") { - throw illegal(token3); - } else { - parseField(type, "optional"); - } - break; - case "oneof": - parseOneOf(type, token3); - break; - case "extensions": - readRanges(type.extensions || (type.extensions = [])); - break; - case "reserved": - readRanges(type.reserved || (type.reserved = []), true); - break; - default: - if (edition === "proto2" || !typeRefRe.test(token3)) { - throw illegal(token3); - } - push(token3); - parseField(type, "optional"); - break; - } - }); - parent.add(type); - if (parent === ptr) { - topLevelObjects.push(type); - } - } - function parseField(parent, rule, extend2) { - var type = next(); - if (type === "group") { - parseGroup(parent, rule); - return; - } - while (type.endsWith(".") || peek().startsWith(".")) { - type += next(); - } - if (!typeRefRe.test(type)) - throw illegal(type, "type"); - var name = next(); - if (!nameRe.test(name)) - throw illegal(name, "name"); - name = applyCase(name); - skip("="); - var field = new Field(name, parseId(next()), type, rule, extend2); - ifBlock(field, function parseField_block(token2) { - if (token2 === "option") { - parseOption(field, token2); - skip(";"); - } else - throw illegal(token2); - }, function parseField_line() { - parseInlineOptions(field); - }); - if (rule === "proto3_optional") { - var oneof = new OneOf("_" + name); - field.setOption("proto3_optional", true); - oneof.add(field); - parent.add(oneof); - } else { - parent.add(field); - } - if (parent === ptr) { - topLevelObjects.push(field); - } - } - function parseGroup(parent, rule) { - if (edition >= 2023) { - throw illegal("group"); - } - var name = next(); - if (!nameRe.test(name)) - throw illegal(name, "name"); - var fieldName = util3.lcFirst(name); - if (name === fieldName) - name = util3.ucFirst(name); - skip("="); - var id = parseId(next()); - var type = new Type(name); - type.group = true; - var field = new Field(fieldName, id, name, rule); - field.filename = parse6.filename; - ifBlock(type, function parseGroup_block(token2) { - switch (token2) { - case "option": - parseOption(type, token2); - skip(";"); - break; - case "required": - case "repeated": - parseField(type, token2); - break; - case "optional": - if (edition === "proto3") { - parseField(type, "proto3_optional"); - } else { - parseField(type, "optional"); - } - break; - case "message": - parseType(type, token2); - break; - case "enum": - parseEnum(type, token2); - break; - case "reserved": - readRanges(type.reserved || (type.reserved = []), true); - break; - default: - throw illegal(token2); - } - }); - parent.add(type).add(field); - } - function parseMapField(parent) { - skip("<"); - var keyType = next(); - if (types.mapKey[keyType] === undefined) - throw illegal(keyType, "type"); - skip(","); - var valueType = next(); - if (!typeRefRe.test(valueType)) - throw illegal(valueType, "type"); - skip(">"); - var name = next(); - if (!nameRe.test(name)) - throw illegal(name, "name"); - skip("="); - var field = new MapField(applyCase(name), parseId(next()), keyType, valueType); - ifBlock(field, function parseMapField_block(token2) { - if (token2 === "option") { - parseOption(field, token2); - skip(";"); - } else - throw illegal(token2); - }, function parseMapField_line() { - parseInlineOptions(field); - }); - parent.add(field); - } - function parseOneOf(parent, token2) { - if (!nameRe.test(token2 = next())) - throw illegal(token2, "name"); - var oneof = new OneOf(applyCase(token2)); - ifBlock(oneof, function parseOneOf_block(token3) { - if (token3 === "option") { - parseOption(oneof, token3); - skip(";"); - } else { - push(token3); - parseField(oneof, "optional"); - } - }); - parent.add(oneof); - } - function parseEnum(parent, token2) { - if (!nameRe.test(token2 = next())) - throw illegal(token2, "name"); - var enm = new Enum(token2); - ifBlock(enm, function parseEnum_block(token3) { - switch (token3) { - case "option": - parseOption(enm, token3); - skip(";"); - break; - case "reserved": - readRanges(enm.reserved || (enm.reserved = []), true); - if (enm.reserved === undefined) - enm.reserved = []; - break; - default: - parseEnumValue(enm, token3); - } - }); - parent.add(enm); - if (parent === ptr) { - topLevelObjects.push(enm); - } - } - function parseEnumValue(parent, token2) { - if (!nameRe.test(token2)) - throw illegal(token2, "name"); - skip("="); - var value = parseId(next(), true), dummy = { - options: undefined - }; - dummy.getOption = function(name) { - return this.options[name]; - }; - dummy.setOption = function(name, value2) { - ReflectionObject.prototype.setOption.call(dummy, name, value2); - }; - dummy.setParsedOption = function() { - return; - }; - ifBlock(dummy, function parseEnumValue_block(token3) { - if (token3 === "option") { - parseOption(dummy, token3); - skip(";"); - } else - throw illegal(token3); - }, function parseEnumValue_line() { - parseInlineOptions(dummy); - }); - parent.add(token2, value, dummy.comment, dummy.parsedOptions || dummy.options); - } - function parseOption(parent, token2) { - var option; - var propName; - var isOption = true; - if (token2 === "option") { - token2 = next(); - } - while (token2 !== "=") { - if (token2 === "(") { - var parensValue = next(); - skip(")"); - token2 = "(" + parensValue + ")"; - } - if (isOption) { - isOption = false; - if (token2.includes(".") && !token2.includes("(")) { - var tokens = token2.split("."); - option = tokens[0] + "."; - token2 = tokens[1]; - continue; - } - option = token2; - } else { - propName = propName ? propName += token2 : token2; - } - token2 = next(); - } - var name = propName ? option.concat(propName) : option; - var optionValue = parseOptionValue(parent, name); - propName = propName && propName[0] === "." ? propName.slice(1) : propName; - option = option && option[option.length - 1] === "." ? option.slice(0, -1) : option; - setParsedOption(parent, option, optionValue, propName); - } - function parseOptionValue(parent, name) { - if (skip("{", true)) { - var objectResult = {}; - while (!skip("}", true)) { - if (!nameRe.test(token = next())) { - throw illegal(token, "name"); - } - if (token === null) { - throw illegal(token, "end of input"); - } - var value; - var propName = token; - skip(":", true); - if (peek() === "{") { - value = parseOptionValue(parent, name + "." + token); - } else if (peek() === "[") { - value = []; - var lastValue; - if (skip("[", true)) { - do { - lastValue = readValue(true); - value.push(lastValue); - } while (skip(",", true)); - skip("]"); - if (typeof lastValue !== "undefined") { - setOption(parent, name + "." + token, lastValue); - } - } - } else { - value = readValue(true); - setOption(parent, name + "." + token, value); - } - var prevValue = objectResult[propName]; - if (prevValue) - value = [].concat(prevValue).concat(value); - objectResult[propName] = value; - skip(",", true); - skip(";", true); - } - return objectResult; - } - var simpleValue = readValue(true); - setOption(parent, name, simpleValue); - return simpleValue; - } - function setOption(parent, name, value) { - if (ptr === parent && /^features\./.test(name)) { - topLevelOptions[name] = value; - return; - } - if (parent.setOption) - parent.setOption(name, value); - } - function setParsedOption(parent, name, value, propName) { - if (parent.setParsedOption) - parent.setParsedOption(name, value, propName); - } - function parseInlineOptions(parent) { - if (skip("[", true)) { - do { - parseOption(parent, "option"); - } while (skip(",", true)); - skip("]"); - } - return parent; - } - function parseService(parent, token2) { - if (!nameRe.test(token2 = next())) - throw illegal(token2, "service name"); - var service = new Service(token2); - ifBlock(service, function parseService_block(token3) { - if (parseCommon(service, token3)) { - return; - } - if (token3 === "rpc") - parseMethod(service, token3); - else - throw illegal(token3); - }); - parent.add(service); - if (parent === ptr) { - topLevelObjects.push(service); - } - } - function parseMethod(parent, token2) { - var commentText = cmnt(); - var type = token2; - if (!nameRe.test(token2 = next())) - throw illegal(token2, "name"); - var name = token2, requestType, requestStream, responseType, responseStream; - skip("("); - if (skip("stream", true)) - requestStream = true; - if (!typeRefRe.test(token2 = next())) - throw illegal(token2); - requestType = token2; - skip(")"); - skip("returns"); - skip("("); - if (skip("stream", true)) - responseStream = true; - if (!typeRefRe.test(token2 = next())) - throw illegal(token2); - responseType = token2; - skip(")"); - var method = new Method(name, type, requestType, responseType, requestStream, responseStream); - method.comment = commentText; - ifBlock(method, function parseMethod_block(token3) { - if (token3 === "option") { - parseOption(method, token3); - skip(";"); - } else - throw illegal(token3); - }); - parent.add(method); - } - function parseExtension(parent, token2) { - if (!typeRefRe.test(token2 = next())) - throw illegal(token2, "reference"); - var reference = token2; - ifBlock(null, function parseExtension_block(token3) { - switch (token3) { - case "required": - case "repeated": - parseField(parent, token3, reference); - break; - case "optional": - if (edition === "proto3") { - parseField(parent, "proto3_optional", reference); - } else { - parseField(parent, "optional", reference); - } - break; - default: - if (edition === "proto2" || !typeRefRe.test(token3)) - throw illegal(token3); - push(token3); - parseField(parent, "optional", reference); - break; - } - }); - } - var token; - while ((token = next()) !== null) { - switch (token) { - case "package": - if (!head) - throw illegal(token); - parsePackage(); - break; - case "import": - if (!head) - throw illegal(token); - parseImport(); - break; - case "syntax": - if (!head) - throw illegal(token); - parseSyntax(); - break; - case "edition": - if (!head) - throw illegal(token); - parseEdition(); - break; - case "option": - parseOption(ptr, token); - skip(";", true); - break; - default: - if (parseCommon(ptr, token)) { - head = false; - continue; - } - throw illegal(token); - } - } - resolveFileFeatures(); - parse6.filename = null; - return { - package: pkg, - imports, - weakImports, - root - }; - } -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/common.js -var require_common4 = __commonJS((exports, module) => { - module.exports = common; - var commonRe = /\/|\./; - function common(name, json3) { - if (!commonRe.test(name)) { - name = "google/protobuf/" + name + ".proto"; - json3 = { nested: { google: { nested: { protobuf: { nested: json3 } } } } }; - } - common[name] = json3; - } - common("any", { - Any: { - fields: { - type_url: { - type: "string", - id: 1 - }, - value: { - type: "bytes", - id: 2 - } - } - } - }); - var timeType; - common("duration", { - Duration: timeType = { - fields: { - seconds: { - type: "int64", - id: 1 - }, - nanos: { - type: "int32", - id: 2 - } - } - } - }); - common("timestamp", { - Timestamp: timeType - }); - common("empty", { - Empty: { - fields: {} - } - }); - common("struct", { - Struct: { - fields: { - fields: { - keyType: "string", - type: "Value", - id: 1 - } - } - }, - Value: { - oneofs: { - kind: { - oneof: [ - "nullValue", - "numberValue", - "stringValue", - "boolValue", - "structValue", - "listValue" - ] - } - }, - fields: { - nullValue: { - type: "NullValue", - id: 1 - }, - numberValue: { - type: "double", - id: 2 - }, - stringValue: { - type: "string", - id: 3 - }, - boolValue: { - type: "bool", - id: 4 - }, - structValue: { - type: "Struct", - id: 5 - }, - listValue: { - type: "ListValue", - id: 6 - } - } - }, - NullValue: { - values: { - NULL_VALUE: 0 - } - }, - ListValue: { - fields: { - values: { - rule: "repeated", - type: "Value", - id: 1 - } - } - } - }); - common("wrappers", { - DoubleValue: { - fields: { - value: { - type: "double", - id: 1 - } - } - }, - FloatValue: { - fields: { - value: { - type: "float", - id: 1 - } - } - }, - Int64Value: { - fields: { - value: { - type: "int64", - id: 1 - } - } - }, - UInt64Value: { - fields: { - value: { - type: "uint64", - id: 1 - } - } - }, - Int32Value: { - fields: { - value: { - type: "int32", - id: 1 - } - } - }, - UInt32Value: { - fields: { - value: { - type: "uint32", - id: 1 - } - } - }, - BoolValue: { - fields: { - value: { - type: "bool", - id: 1 - } - } - }, - StringValue: { - fields: { - value: { - type: "string", - id: 1 - } - } - }, - BytesValue: { - fields: { - value: { - type: "bytes", - id: 1 - } - } - } - }); - common("field_mask", { - FieldMask: { - fields: { - paths: { - rule: "repeated", - type: "string", - id: 1 - } - } - } - }); - common.get = function get(file2) { - return common[file2] || null; - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/src/index.js -var require_src74 = __commonJS((exports, module) => { - var protobuf = module.exports = require_index_light(); - protobuf.build = "full"; - protobuf.tokenize = require_tokenize(); - protobuf.parse = require_parse3(); - protobuf.common = require_common4(); - protobuf.Root._configure(protobuf.Type, protobuf.parse, protobuf.common); -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/google/protobuf/descriptor.json -var require_descriptor = __commonJS((exports, module) => { - module.exports = { - nested: { - google: { - nested: { - protobuf: { - options: { - go_package: "google.golang.org/protobuf/types/descriptorpb", - java_package: "com.google.protobuf", - java_outer_classname: "DescriptorProtos", - csharp_namespace: "Google.Protobuf.Reflection", - objc_class_prefix: "GPB", - cc_enable_arenas: true, - optimize_for: "SPEED" - }, - nested: { - FileDescriptorSet: { - edition: "proto2", - fields: { - file: { - rule: "repeated", - type: "FileDescriptorProto", - id: 1 - } - }, - extensions: [ - [ - 536000000, - 536000000 - ] - ] - }, - Edition: { - edition: "proto2", - values: { - EDITION_UNKNOWN: 0, - EDITION_LEGACY: 900, - EDITION_PROTO2: 998, - EDITION_PROTO3: 999, - EDITION_2023: 1000, - EDITION_2024: 1001, - EDITION_1_TEST_ONLY: 1, - EDITION_2_TEST_ONLY: 2, - EDITION_99997_TEST_ONLY: 99997, - EDITION_99998_TEST_ONLY: 99998, - EDITION_99999_TEST_ONLY: 99999, - EDITION_MAX: 2147483647 - } - }, - FileDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - package: { - type: "string", - id: 2 - }, - dependency: { - rule: "repeated", - type: "string", - id: 3 - }, - publicDependency: { - rule: "repeated", - type: "int32", - id: 10 - }, - weakDependency: { - rule: "repeated", - type: "int32", - id: 11 - }, - optionDependency: { - rule: "repeated", - type: "string", - id: 15 - }, - messageType: { - rule: "repeated", - type: "DescriptorProto", - id: 4 - }, - enumType: { - rule: "repeated", - type: "EnumDescriptorProto", - id: 5 - }, - service: { - rule: "repeated", - type: "ServiceDescriptorProto", - id: 6 - }, - extension: { - rule: "repeated", - type: "FieldDescriptorProto", - id: 7 - }, - options: { - type: "FileOptions", - id: 8 - }, - sourceCodeInfo: { - type: "SourceCodeInfo", - id: 9 - }, - syntax: { - type: "string", - id: 12 - }, - edition: { - type: "Edition", - id: 14 - } - } - }, - DescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - field: { - rule: "repeated", - type: "FieldDescriptorProto", - id: 2 - }, - extension: { - rule: "repeated", - type: "FieldDescriptorProto", - id: 6 - }, - nestedType: { - rule: "repeated", - type: "DescriptorProto", - id: 3 - }, - enumType: { - rule: "repeated", - type: "EnumDescriptorProto", - id: 4 - }, - extensionRange: { - rule: "repeated", - type: "ExtensionRange", - id: 5 - }, - oneofDecl: { - rule: "repeated", - type: "OneofDescriptorProto", - id: 8 - }, - options: { - type: "MessageOptions", - id: 7 - }, - reservedRange: { - rule: "repeated", - type: "ReservedRange", - id: 9 - }, - reservedName: { - rule: "repeated", - type: "string", - id: 10 - }, - visibility: { - type: "SymbolVisibility", - id: 11 - } - }, - nested: { - ExtensionRange: { - fields: { - start: { - type: "int32", - id: 1 - }, - end: { - type: "int32", - id: 2 - }, - options: { - type: "ExtensionRangeOptions", - id: 3 - } - } - }, - ReservedRange: { - fields: { - start: { - type: "int32", - id: 1 - }, - end: { - type: "int32", - id: 2 - } - } - } - } - }, - ExtensionRangeOptions: { - edition: "proto2", - fields: { - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - }, - declaration: { - rule: "repeated", - type: "Declaration", - id: 2, - options: { - retention: "RETENTION_SOURCE" - } - }, - features: { - type: "FeatureSet", - id: 50 - }, - verification: { - type: "VerificationState", - id: 3, - options: { - default: "UNVERIFIED", - retention: "RETENTION_SOURCE" - } - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - nested: { - Declaration: { - fields: { - number: { - type: "int32", - id: 1 - }, - fullName: { - type: "string", - id: 2 - }, - type: { - type: "string", - id: 3 - }, - reserved: { - type: "bool", - id: 5 - }, - repeated: { - type: "bool", - id: 6 - } - }, - reserved: [ - [ - 4, - 4 - ] - ] - }, - VerificationState: { - values: { - DECLARATION: 0, - UNVERIFIED: 1 - } - } - } - }, - FieldDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - number: { - type: "int32", - id: 3 - }, - label: { - type: "Label", - id: 4 - }, - type: { - type: "Type", - id: 5 - }, - typeName: { - type: "string", - id: 6 - }, - extendee: { - type: "string", - id: 2 - }, - defaultValue: { - type: "string", - id: 7 - }, - oneofIndex: { - type: "int32", - id: 9 - }, - jsonName: { - type: "string", - id: 10 - }, - options: { - type: "FieldOptions", - id: 8 - }, - proto3Optional: { - type: "bool", - id: 17 - } - }, - nested: { - Type: { - values: { - TYPE_DOUBLE: 1, - TYPE_FLOAT: 2, - TYPE_INT64: 3, - TYPE_UINT64: 4, - TYPE_INT32: 5, - TYPE_FIXED64: 6, - TYPE_FIXED32: 7, - TYPE_BOOL: 8, - TYPE_STRING: 9, - TYPE_GROUP: 10, - TYPE_MESSAGE: 11, - TYPE_BYTES: 12, - TYPE_UINT32: 13, - TYPE_ENUM: 14, - TYPE_SFIXED32: 15, - TYPE_SFIXED64: 16, - TYPE_SINT32: 17, - TYPE_SINT64: 18 - } - }, - Label: { - values: { - LABEL_OPTIONAL: 1, - LABEL_REPEATED: 3, - LABEL_REQUIRED: 2 - } - } - } - }, - OneofDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - options: { - type: "OneofOptions", - id: 2 - } - } - }, - EnumDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - value: { - rule: "repeated", - type: "EnumValueDescriptorProto", - id: 2 - }, - options: { - type: "EnumOptions", - id: 3 - }, - reservedRange: { - rule: "repeated", - type: "EnumReservedRange", - id: 4 - }, - reservedName: { - rule: "repeated", - type: "string", - id: 5 - }, - visibility: { - type: "SymbolVisibility", - id: 6 - } - }, - nested: { - EnumReservedRange: { - fields: { - start: { - type: "int32", - id: 1 - }, - end: { - type: "int32", - id: 2 - } - } - } - } - }, - EnumValueDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - number: { - type: "int32", - id: 2 - }, - options: { - type: "EnumValueOptions", - id: 3 - } - } - }, - ServiceDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - method: { - rule: "repeated", - type: "MethodDescriptorProto", - id: 2 - }, - options: { - type: "ServiceOptions", - id: 3 - } - } - }, - MethodDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - inputType: { - type: "string", - id: 2 - }, - outputType: { - type: "string", - id: 3 - }, - options: { - type: "MethodOptions", - id: 4 - }, - clientStreaming: { - type: "bool", - id: 5 - }, - serverStreaming: { - type: "bool", - id: 6 - } - } - }, - FileOptions: { - edition: "proto2", - fields: { - javaPackage: { - type: "string", - id: 1 - }, - javaOuterClassname: { - type: "string", - id: 8 - }, - javaMultipleFiles: { - type: "bool", - id: 10 - }, - javaGenerateEqualsAndHash: { - type: "bool", - id: 20, - options: { - deprecated: true - } - }, - javaStringCheckUtf8: { - type: "bool", - id: 27 - }, - optimizeFor: { - type: "OptimizeMode", - id: 9, - options: { - default: "SPEED" - } - }, - goPackage: { - type: "string", - id: 11 - }, - ccGenericServices: { - type: "bool", - id: 16 - }, - javaGenericServices: { - type: "bool", - id: 17 - }, - pyGenericServices: { - type: "bool", - id: 18 - }, - deprecated: { - type: "bool", - id: 23 - }, - ccEnableArenas: { - type: "bool", - id: 31, - options: { - default: true - } - }, - objcClassPrefix: { - type: "string", - id: 36 - }, - csharpNamespace: { - type: "string", - id: 37 - }, - swiftPrefix: { - type: "string", - id: 39 - }, - phpClassPrefix: { - type: "string", - id: 40 - }, - phpNamespace: { - type: "string", - id: 41 - }, - phpMetadataNamespace: { - type: "string", - id: 44 - }, - rubyPackage: { - type: "string", - id: 45 - }, - features: { - type: "FeatureSet", - id: 50 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 42, - 42 - ], - [ - 38, - 38 - ], - "php_generic_services" - ], - nested: { - OptimizeMode: { - values: { - SPEED: 1, - CODE_SIZE: 2, - LITE_RUNTIME: 3 - } - } - } - }, - MessageOptions: { - edition: "proto2", - fields: { - messageSetWireFormat: { - type: "bool", - id: 1 - }, - noStandardDescriptorAccessor: { - type: "bool", - id: 2 - }, - deprecated: { - type: "bool", - id: 3 - }, - mapEntry: { - type: "bool", - id: 7 - }, - deprecatedLegacyJsonFieldConflicts: { - type: "bool", - id: 11, - options: { - deprecated: true - } - }, - features: { - type: "FeatureSet", - id: 12 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 4, - 4 - ], - [ - 5, - 5 - ], - [ - 6, - 6 - ], - [ - 8, - 8 - ], - [ - 9, - 9 - ] - ] - }, - FieldOptions: { - edition: "proto2", - fields: { - ctype: { - type: "CType", - id: 1, - options: { - default: "STRING" - } - }, - packed: { - type: "bool", - id: 2 - }, - jstype: { - type: "JSType", - id: 6, - options: { - default: "JS_NORMAL" - } - }, - lazy: { - type: "bool", - id: 5 - }, - unverifiedLazy: { - type: "bool", - id: 15 - }, - deprecated: { - type: "bool", - id: 3 - }, - weak: { - type: "bool", - id: 10, - options: { - deprecated: true - } - }, - debugRedact: { - type: "bool", - id: 16 - }, - retention: { - type: "OptionRetention", - id: 17 - }, - targets: { - rule: "repeated", - type: "OptionTargetType", - id: 19 - }, - editionDefaults: { - rule: "repeated", - type: "EditionDefault", - id: 20 - }, - features: { - type: "FeatureSet", - id: 21 - }, - featureSupport: { - type: "FeatureSupport", - id: 22 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 4, - 4 - ], - [ - 18, - 18 - ] - ], - nested: { - CType: { - values: { - STRING: 0, - CORD: 1, - STRING_PIECE: 2 - } - }, - JSType: { - values: { - JS_NORMAL: 0, - JS_STRING: 1, - JS_NUMBER: 2 - } - }, - OptionRetention: { - values: { - RETENTION_UNKNOWN: 0, - RETENTION_RUNTIME: 1, - RETENTION_SOURCE: 2 - } - }, - OptionTargetType: { - values: { - TARGET_TYPE_UNKNOWN: 0, - TARGET_TYPE_FILE: 1, - TARGET_TYPE_EXTENSION_RANGE: 2, - TARGET_TYPE_MESSAGE: 3, - TARGET_TYPE_FIELD: 4, - TARGET_TYPE_ONEOF: 5, - TARGET_TYPE_ENUM: 6, - TARGET_TYPE_ENUM_ENTRY: 7, - TARGET_TYPE_SERVICE: 8, - TARGET_TYPE_METHOD: 9 - } - }, - EditionDefault: { - fields: { - edition: { - type: "Edition", - id: 3 - }, - value: { - type: "string", - id: 2 - } - } - }, - FeatureSupport: { - fields: { - editionIntroduced: { - type: "Edition", - id: 1 - }, - editionDeprecated: { - type: "Edition", - id: 2 - }, - deprecationWarning: { - type: "string", - id: 3 - }, - editionRemoved: { - type: "Edition", - id: 4 - } - } - } - } - }, - OneofOptions: { - edition: "proto2", - fields: { - features: { - type: "FeatureSet", - id: 1 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ] - }, - EnumOptions: { - edition: "proto2", - fields: { - allowAlias: { - type: "bool", - id: 2 - }, - deprecated: { - type: "bool", - id: 3 - }, - deprecatedLegacyJsonFieldConflicts: { - type: "bool", - id: 6, - options: { - deprecated: true - } - }, - features: { - type: "FeatureSet", - id: 7 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 5, - 5 - ] - ] - }, - EnumValueOptions: { - edition: "proto2", - fields: { - deprecated: { - type: "bool", - id: 1 - }, - features: { - type: "FeatureSet", - id: 2 - }, - debugRedact: { - type: "bool", - id: 3 - }, - featureSupport: { - type: "FieldOptions.FeatureSupport", - id: 4 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ] - }, - ServiceOptions: { - edition: "proto2", - fields: { - features: { - type: "FeatureSet", - id: 34 - }, - deprecated: { - type: "bool", - id: 33 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ] - }, - MethodOptions: { - edition: "proto2", - fields: { - deprecated: { - type: "bool", - id: 33 - }, - idempotencyLevel: { - type: "IdempotencyLevel", - id: 34, - options: { - default: "IDEMPOTENCY_UNKNOWN" - } - }, - features: { - type: "FeatureSet", - id: 35 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - nested: { - IdempotencyLevel: { - values: { - IDEMPOTENCY_UNKNOWN: 0, - NO_SIDE_EFFECTS: 1, - IDEMPOTENT: 2 - } - } - } - }, - UninterpretedOption: { - edition: "proto2", - fields: { - name: { - rule: "repeated", - type: "NamePart", - id: 2 - }, - identifierValue: { - type: "string", - id: 3 - }, - positiveIntValue: { - type: "uint64", - id: 4 - }, - negativeIntValue: { - type: "int64", - id: 5 - }, - doubleValue: { - type: "double", - id: 6 - }, - stringValue: { - type: "bytes", - id: 7 - }, - aggregateValue: { - type: "string", - id: 8 - } - }, - nested: { - NamePart: { - fields: { - namePart: { - rule: "required", - type: "string", - id: 1 - }, - isExtension: { - rule: "required", - type: "bool", - id: 2 - } - } - } - } - }, - FeatureSet: { - edition: "proto2", - fields: { - fieldPresence: { - type: "FieldPresence", - id: 1, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_2023", - "edition_defaults.value": "EXPLICIT" - } - }, - enumType: { - type: "EnumType", - id: 2, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "OPEN" - } - }, - repeatedFieldEncoding: { - type: "RepeatedFieldEncoding", - id: 3, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "PACKED" - } - }, - utf8Validation: { - type: "Utf8Validation", - id: 4, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "VERIFY" - } - }, - messageEncoding: { - type: "MessageEncoding", - id: 5, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_LEGACY", - "edition_defaults.value": "LENGTH_PREFIXED" - } - }, - jsonFormat: { - type: "JsonFormat", - id: 6, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "ALLOW" - } - }, - enforceNamingStyle: { - type: "EnforceNamingStyle", - id: 7, - options: { - retention: "RETENTION_SOURCE", - targets: "TARGET_TYPE_METHOD", - "feature_support.edition_introduced": "EDITION_2024", - "edition_defaults.edition": "EDITION_2024", - "edition_defaults.value": "STYLE2024" - } - }, - defaultSymbolVisibility: { - type: "VisibilityFeature.DefaultSymbolVisibility", - id: 8, - options: { - retention: "RETENTION_SOURCE", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2024", - "edition_defaults.edition": "EDITION_2024", - "edition_defaults.value": "EXPORT_TOP_LEVEL" - } - } - }, - extensions: [ - [ - 1000, - 9994 - ], - [ - 9995, - 9999 - ], - [ - 1e4, - 1e4 - ] - ], - reserved: [ - [ - 999, - 999 - ] - ], - nested: { - FieldPresence: { - values: { - FIELD_PRESENCE_UNKNOWN: 0, - EXPLICIT: 1, - IMPLICIT: 2, - LEGACY_REQUIRED: 3 - } - }, - EnumType: { - values: { - ENUM_TYPE_UNKNOWN: 0, - OPEN: 1, - CLOSED: 2 - } - }, - RepeatedFieldEncoding: { - values: { - REPEATED_FIELD_ENCODING_UNKNOWN: 0, - PACKED: 1, - EXPANDED: 2 - } - }, - Utf8Validation: { - values: { - UTF8_VALIDATION_UNKNOWN: 0, - VERIFY: 2, - NONE: 3 - } - }, - MessageEncoding: { - values: { - MESSAGE_ENCODING_UNKNOWN: 0, - LENGTH_PREFIXED: 1, - DELIMITED: 2 - } - }, - JsonFormat: { - values: { - JSON_FORMAT_UNKNOWN: 0, - ALLOW: 1, - LEGACY_BEST_EFFORT: 2 - } - }, - EnforceNamingStyle: { - values: { - ENFORCE_NAMING_STYLE_UNKNOWN: 0, - STYLE2024: 1, - STYLE_LEGACY: 2 - } - }, - VisibilityFeature: { - fields: {}, - reserved: [ - [ - 1, - 536870911 - ] - ], - nested: { - DefaultSymbolVisibility: { - values: { - DEFAULT_SYMBOL_VISIBILITY_UNKNOWN: 0, - EXPORT_ALL: 1, - EXPORT_TOP_LEVEL: 2, - LOCAL_ALL: 3, - STRICT: 4 - } - } - } - } - } - }, - FeatureSetDefaults: { - edition: "proto2", - fields: { - defaults: { - rule: "repeated", - type: "FeatureSetEditionDefault", - id: 1 - }, - minimumEdition: { - type: "Edition", - id: 4 - }, - maximumEdition: { - type: "Edition", - id: 5 - } - }, - nested: { - FeatureSetEditionDefault: { - fields: { - edition: { - type: "Edition", - id: 3 - }, - overridableFeatures: { - type: "FeatureSet", - id: 4 - }, - fixedFeatures: { - type: "FeatureSet", - id: 5 - } - }, - reserved: [ - [ - 1, - 1 - ], - [ - 2, - 2 - ], - "features" - ] - } - } - }, - SourceCodeInfo: { - edition: "proto2", - fields: { - location: { - rule: "repeated", - type: "Location", - id: 1 - } - }, - extensions: [ - [ - 536000000, - 536000000 - ] - ], - nested: { - Location: { - fields: { - path: { - rule: "repeated", - type: "int32", - id: 1, - options: { - packed: true - } - }, - span: { - rule: "repeated", - type: "int32", - id: 2, - options: { - packed: true - } - }, - leadingComments: { - type: "string", - id: 3 - }, - trailingComments: { - type: "string", - id: 4 - }, - leadingDetachedComments: { - rule: "repeated", - type: "string", - id: 6 - } - } - } - } - }, - GeneratedCodeInfo: { - edition: "proto2", - fields: { - annotation: { - rule: "repeated", - type: "Annotation", - id: 1 - } - }, - nested: { - Annotation: { - fields: { - path: { - rule: "repeated", - type: "int32", - id: 1, - options: { - packed: true - } - }, - sourceFile: { - type: "string", - id: 2 - }, - begin: { - type: "int32", - id: 3 - }, - end: { - type: "int32", - id: 4 - }, - semantic: { - type: "Semantic", - id: 5 - } - }, - nested: { - Semantic: { - values: { - NONE: 0, - SET: 1, - ALIAS: 2 - } - } - } - } - } - }, - SymbolVisibility: { - edition: "proto2", - values: { - VISIBILITY_UNSET: 0, - VISIBILITY_LOCAL: 1, - VISIBILITY_EXPORT: 2 - } - } - } - } - } - } - } - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/ext/descriptor/index.js -var require_descriptor2 = __commonJS((exports, module) => { - var $protobuf = require_src74(); - module.exports = exports = $protobuf.descriptor = $protobuf.Root.fromJSON(require_descriptor()).lookup(".google.protobuf"); - var Namespace = $protobuf.Namespace; - var Root = $protobuf.Root; - var Enum = $protobuf.Enum; - var Type = $protobuf.Type; - var Field = $protobuf.Field; - var MapField = $protobuf.MapField; - var OneOf = $protobuf.OneOf; - var Service = $protobuf.Service; - var Method = $protobuf.Method; - Root.fromDescriptor = function fromDescriptor(descriptor) { - if (typeof descriptor.length === "number") - descriptor = exports.FileDescriptorSet.decode(descriptor); - var root = new Root; - if (descriptor.file) { - var fileDescriptor, filePackage; - for (var j = 0, i;j < descriptor.file.length; ++j) { - filePackage = root; - if ((fileDescriptor = descriptor.file[j])["package"] && fileDescriptor["package"].length) - filePackage = root.define(fileDescriptor["package"]); - var edition = editionFromDescriptor(fileDescriptor); - if (fileDescriptor.name && fileDescriptor.name.length) - root.files.push(filePackage.filename = fileDescriptor.name); - if (fileDescriptor.messageType) - for (i = 0;i < fileDescriptor.messageType.length; ++i) - filePackage.add(Type.fromDescriptor(fileDescriptor.messageType[i], edition)); - if (fileDescriptor.enumType) - for (i = 0;i < fileDescriptor.enumType.length; ++i) - filePackage.add(Enum.fromDescriptor(fileDescriptor.enumType[i], edition)); - if (fileDescriptor.extension) - for (i = 0;i < fileDescriptor.extension.length; ++i) - filePackage.add(Field.fromDescriptor(fileDescriptor.extension[i], edition)); - if (fileDescriptor.service) - for (i = 0;i < fileDescriptor.service.length; ++i) - filePackage.add(Service.fromDescriptor(fileDescriptor.service[i], edition)); - var opts = fromDescriptorOptions(fileDescriptor.options, exports.FileOptions); - if (opts) { - var ks = Object.keys(opts); - for (i = 0;i < ks.length; ++i) - filePackage.setOption(ks[i], opts[ks[i]]); - } - } - } - return root.resolveAll(); - }; - Root.prototype.toDescriptor = function toDescriptor(edition) { - var set2 = exports.FileDescriptorSet.create(); - Root_toDescriptorRecursive(this, set2.file, edition); - return set2; - }; - function Root_toDescriptorRecursive(ns, files, edition) { - var file2 = exports.FileDescriptorProto.create({ name: ns.filename || (ns.fullName.substring(1).replace(/\./g, "_") || "root") + ".proto" }); - editionToDescriptor(edition, file2); - if (!(ns instanceof Root)) - file2["package"] = ns.fullName.substring(1); - for (var i = 0, nested;i < ns.nestedArray.length; ++i) - if ((nested = ns._nestedArray[i]) instanceof Type) - file2.messageType.push(nested.toDescriptor(edition)); - else if (nested instanceof Enum) - file2.enumType.push(nested.toDescriptor()); - else if (nested instanceof Field) - file2.extension.push(nested.toDescriptor(edition)); - else if (nested instanceof Service) - file2.service.push(nested.toDescriptor()); - else if (nested instanceof Namespace) - Root_toDescriptorRecursive(nested, files, edition); - file2.options = toDescriptorOptions(ns.options, exports.FileOptions); - if (file2.messageType.length + file2.enumType.length + file2.extension.length + file2.service.length) - files.push(file2); - } - var unnamedMessageIndex = 0; - Type.fromDescriptor = function fromDescriptor(descriptor, edition, nested) { - if (typeof descriptor.length === "number") - descriptor = exports.DescriptorProto.decode(descriptor); - var type = new Type(descriptor.name.length ? descriptor.name : "Type" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)), i; - if (!nested) - type._edition = edition; - if (descriptor.oneofDecl) - for (i = 0;i < descriptor.oneofDecl.length; ++i) - type.add(OneOf.fromDescriptor(descriptor.oneofDecl[i])); - if (descriptor.field) - for (i = 0;i < descriptor.field.length; ++i) { - var field = Field.fromDescriptor(descriptor.field[i], edition, true); - type.add(field); - if (descriptor.field[i].hasOwnProperty("oneofIndex")) - type.oneofsArray[descriptor.field[i].oneofIndex].add(field); - } - if (descriptor.extension) - for (i = 0;i < descriptor.extension.length; ++i) - type.add(Field.fromDescriptor(descriptor.extension[i], edition, true)); - if (descriptor.nestedType) - for (i = 0;i < descriptor.nestedType.length; ++i) { - type.add(Type.fromDescriptor(descriptor.nestedType[i], edition, true)); - if (descriptor.nestedType[i].options && descriptor.nestedType[i].options.mapEntry) - type.setOption("map_entry", true); - } - if (descriptor.enumType) - for (i = 0;i < descriptor.enumType.length; ++i) - type.add(Enum.fromDescriptor(descriptor.enumType[i], edition, true)); - if (descriptor.extensionRange && descriptor.extensionRange.length) { - type.extensions = []; - for (i = 0;i < descriptor.extensionRange.length; ++i) - type.extensions.push([descriptor.extensionRange[i].start, descriptor.extensionRange[i].end]); - } - if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) { - type.reserved = []; - if (descriptor.reservedRange) - for (i = 0;i < descriptor.reservedRange.length; ++i) - type.reserved.push([descriptor.reservedRange[i].start, descriptor.reservedRange[i].end]); - if (descriptor.reservedName) - for (i = 0;i < descriptor.reservedName.length; ++i) - type.reserved.push(descriptor.reservedName[i]); - } - return type; - }; - Type.prototype.toDescriptor = function toDescriptor(edition) { - var descriptor = exports.DescriptorProto.create({ name: this.name }), i; - for (i = 0;i < this.fieldsArray.length; ++i) { - var fieldDescriptor; - descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(edition)); - if (this._fieldsArray[i] instanceof MapField) { - var keyType = toDescriptorType(this._fieldsArray[i].keyType, this._fieldsArray[i].resolvedKeyType, false), valueType = toDescriptorType(this._fieldsArray[i].type, this._fieldsArray[i].resolvedType, false), valueTypeName = valueType === 11 || valueType === 14 ? this._fieldsArray[i].resolvedType && shortname(this.parent, this._fieldsArray[i].resolvedType) || this._fieldsArray[i].type : undefined; - descriptor.nestedType.push(exports.DescriptorProto.create({ - name: fieldDescriptor.typeName, - field: [ - exports.FieldDescriptorProto.create({ name: "key", number: 1, label: 1, type: keyType }), - exports.FieldDescriptorProto.create({ name: "value", number: 2, label: 1, type: valueType, typeName: valueTypeName }) - ], - options: exports.MessageOptions.create({ mapEntry: true }) - })); - } - } - for (i = 0;i < this.oneofsArray.length; ++i) - descriptor.oneofDecl.push(this._oneofsArray[i].toDescriptor()); - for (i = 0;i < this.nestedArray.length; ++i) { - if (this._nestedArray[i] instanceof Field) - descriptor.field.push(this._nestedArray[i].toDescriptor(edition)); - else if (this._nestedArray[i] instanceof Type) - descriptor.nestedType.push(this._nestedArray[i].toDescriptor(edition)); - else if (this._nestedArray[i] instanceof Enum) - descriptor.enumType.push(this._nestedArray[i].toDescriptor()); - } - if (this.extensions) - for (i = 0;i < this.extensions.length; ++i) - descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] })); - if (this.reserved) - for (i = 0;i < this.reserved.length; ++i) - if (typeof this.reserved[i] === "string") - descriptor.reservedName.push(this.reserved[i]); - else - descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] })); - descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions); - return descriptor; - }; - var numberRe = /^(?![eE])[0-9]*(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/; - Field.fromDescriptor = function fromDescriptor(descriptor, edition, nested) { - if (typeof descriptor.length === "number") - descriptor = exports.DescriptorProto.decode(descriptor); - if (typeof descriptor.number !== "number") - throw Error("missing field id"); - var fieldType; - if (descriptor.typeName && descriptor.typeName.length) - fieldType = descriptor.typeName; - else - fieldType = fromDescriptorType(descriptor.type); - var fieldRule; - switch (descriptor.label) { - case 1: - fieldRule = undefined; - break; - case 2: - fieldRule = "required"; - break; - case 3: - fieldRule = "repeated"; - break; - default: - throw Error("illegal label: " + descriptor.label); - } - var extendee = descriptor.extendee; - if (descriptor.extendee !== undefined) { - extendee = extendee.length ? extendee : undefined; - } - var field = new Field(descriptor.name.length ? descriptor.name : "field" + descriptor.number, descriptor.number, fieldType, fieldRule, extendee); - if (!nested) - field._edition = edition; - field.options = fromDescriptorOptions(descriptor.options, exports.FieldOptions); - if (descriptor.proto3_optional) - field.options.proto3_optional = true; - if (descriptor.defaultValue && descriptor.defaultValue.length) { - var defaultValue = descriptor.defaultValue; - switch (defaultValue) { - case "true": - case "TRUE": - defaultValue = true; - break; - case "false": - case "FALSE": - defaultValue = false; - break; - default: - var match2 = numberRe.exec(defaultValue); - if (match2) - defaultValue = parseInt(defaultValue); - break; - } - field.setOption("default", defaultValue); - } - if (packableDescriptorType(descriptor.type)) { - if (edition === "proto3") { - if (descriptor.options && !descriptor.options.packed) - field.setOption("packed", false); - } else if ((!edition || edition === "proto2") && descriptor.options && descriptor.options.packed) - field.setOption("packed", true); - } - return field; - }; - Field.prototype.toDescriptor = function toDescriptor(edition) { - var descriptor = exports.FieldDescriptorProto.create({ name: this.name, number: this.id }); - if (this.map) { - descriptor.type = 11; - descriptor.typeName = $protobuf.util.ucFirst(this.name); - descriptor.label = 3; - } else { - switch (descriptor.type = toDescriptorType(this.type, this.resolve().resolvedType, this.delimited)) { - case 10: - case 11: - case 14: - descriptor.typeName = this.resolvedType ? shortname(this.parent, this.resolvedType) : this.type; - break; - } - if (this.rule === "repeated") { - descriptor.label = 3; - } else if (this.required && edition === "proto2") { - descriptor.label = 2; - } else { - descriptor.label = 1; - } - } - descriptor.extendee = this.extensionField ? this.extensionField.parent.fullName : this.extend; - if (this.partOf) { - if ((descriptor.oneofIndex = this.parent.oneofsArray.indexOf(this.partOf)) < 0) - throw Error("missing oneof"); - } - if (this.options) { - descriptor.options = toDescriptorOptions(this.options, exports.FieldOptions); - if (this.options["default"] != null) - descriptor.defaultValue = String(this.options["default"]); - if (this.options.proto3_optional) - descriptor.proto3_optional = true; - } - if (edition === "proto3") { - if (!this.packed) - (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = false; - } else if ((!edition || edition === "proto2") && this.packed) - (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = true; - return descriptor; - }; - var unnamedEnumIndex = 0; - Enum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) { - if (typeof descriptor.length === "number") - descriptor = exports.EnumDescriptorProto.decode(descriptor); - var values = {}; - if (descriptor.value) - for (var i = 0;i < descriptor.value.length; ++i) { - var name = descriptor.value[i].name, value = descriptor.value[i].number || 0; - values[name && name.length ? name : "NAME" + value] = value; - } - var enm = new Enum(descriptor.name && descriptor.name.length ? descriptor.name : "Enum" + unnamedEnumIndex++, values, fromDescriptorOptions(descriptor.options, exports.EnumOptions)); - if (!nested) - enm._edition = edition; - return enm; - }; - Enum.prototype.toDescriptor = function toDescriptor() { - var values = []; - for (var i = 0, ks = Object.keys(this.values);i < ks.length; ++i) - values.push(exports.EnumValueDescriptorProto.create({ name: ks[i], number: this.values[ks[i]] })); - return exports.EnumDescriptorProto.create({ - name: this.name, - value: values, - options: toDescriptorOptions(this.options, exports.EnumOptions) - }); - }; - var unnamedOneofIndex = 0; - OneOf.fromDescriptor = function fromDescriptor(descriptor) { - if (typeof descriptor.length === "number") - descriptor = exports.OneofDescriptorProto.decode(descriptor); - return new OneOf(descriptor.name && descriptor.name.length ? descriptor.name : "oneof" + unnamedOneofIndex++); - }; - OneOf.prototype.toDescriptor = function toDescriptor() { - return exports.OneofDescriptorProto.create({ - name: this.name - }); - }; - var unnamedServiceIndex = 0; - Service.fromDescriptor = function fromDescriptor(descriptor, edition, nested) { - if (typeof descriptor.length === "number") - descriptor = exports.ServiceDescriptorProto.decode(descriptor); - var service = new Service(descriptor.name && descriptor.name.length ? descriptor.name : "Service" + unnamedServiceIndex++, fromDescriptorOptions(descriptor.options, exports.ServiceOptions)); - if (!nested) - service._edition = edition; - if (descriptor.method) - for (var i = 0;i < descriptor.method.length; ++i) - service.add(Method.fromDescriptor(descriptor.method[i])); - return service; - }; - Service.prototype.toDescriptor = function toDescriptor() { - var methods = []; - for (var i = 0;i < this.methodsArray.length; ++i) - methods.push(this._methodsArray[i].toDescriptor()); - return exports.ServiceDescriptorProto.create({ - name: this.name, - method: methods, - options: toDescriptorOptions(this.options, exports.ServiceOptions) - }); - }; - var unnamedMethodIndex = 0; - Method.fromDescriptor = function fromDescriptor(descriptor) { - if (typeof descriptor.length === "number") - descriptor = exports.MethodDescriptorProto.decode(descriptor); - return new Method(descriptor.name && descriptor.name.length ? descriptor.name : "Method" + unnamedMethodIndex++, "rpc", descriptor.inputType, descriptor.outputType, Boolean(descriptor.clientStreaming), Boolean(descriptor.serverStreaming), fromDescriptorOptions(descriptor.options, exports.MethodOptions)); - }; - Method.prototype.toDescriptor = function toDescriptor() { - return exports.MethodDescriptorProto.create({ - name: this.name, - inputType: this.resolvedRequestType ? this.resolvedRequestType.fullName : this.requestType, - outputType: this.resolvedResponseType ? this.resolvedResponseType.fullName : this.responseType, - clientStreaming: this.requestStream, - serverStreaming: this.responseStream, - options: toDescriptorOptions(this.options, exports.MethodOptions) - }); - }; - function fromDescriptorType(type) { - switch (type) { - case 1: - return "double"; - case 2: - return "float"; - case 3: - return "int64"; - case 4: - return "uint64"; - case 5: - return "int32"; - case 6: - return "fixed64"; - case 7: - return "fixed32"; - case 8: - return "bool"; - case 9: - return "string"; - case 12: - return "bytes"; - case 13: - return "uint32"; - case 15: - return "sfixed32"; - case 16: - return "sfixed64"; - case 17: - return "sint32"; - case 18: - return "sint64"; - } - throw Error("illegal type: " + type); - } - function packableDescriptorType(type) { - switch (type) { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - return true; - } - return false; - } - function toDescriptorType(type, resolvedType, delimited) { - switch (type) { - case "double": - return 1; - case "float": - return 2; - case "int64": - return 3; - case "uint64": - return 4; - case "int32": - return 5; - case "fixed64": - return 6; - case "fixed32": - return 7; - case "bool": - return 8; - case "string": - return 9; - case "bytes": - return 12; - case "uint32": - return 13; - case "sfixed32": - return 15; - case "sfixed64": - return 16; - case "sint32": - return 17; - case "sint64": - return 18; - } - if (resolvedType instanceof Enum) - return 14; - if (resolvedType instanceof Type) - return delimited ? 10 : 11; - throw Error("illegal type: " + type); - } - function fromDescriptorOptionsRecursive(obj, type) { - var val = {}; - for (var i = 0, field, key;i < type.fieldsArray.length; ++i) { - if ((key = (field = type._fieldsArray[i]).name) === "uninterpretedOption") - continue; - if (!Object.prototype.hasOwnProperty.call(obj, key)) - continue; - var newKey = underScore(key); - if (field.resolvedType instanceof Type) { - val[newKey] = fromDescriptorOptionsRecursive(obj[key], field.resolvedType); - } else if (field.resolvedType instanceof Enum) { - val[newKey] = field.resolvedType.valuesById[obj[key]]; - } else { - val[newKey] = obj[key]; - } - } - return val; - } - function fromDescriptorOptions(options, type) { - if (!options) - return; - return fromDescriptorOptionsRecursive(type.toObject(options), type); - } - function toDescriptorOptionsRecursive(obj, type) { - var val = {}; - var keys = Object.keys(obj); - for (var i = 0;i < keys.length; ++i) { - var key = keys[i]; - var newKey = $protobuf.util.camelCase(key); - if (!Object.prototype.hasOwnProperty.call(type.fields, newKey)) - continue; - var field = type.fields[newKey]; - if (field.resolvedType instanceof Type) { - val[newKey] = toDescriptorOptionsRecursive(obj[key], field.resolvedType); - } else { - val[newKey] = obj[key]; - } - if (field.repeated && !Array.isArray(val[newKey])) { - val[newKey] = [val[newKey]]; - } - } - return val; - } - function toDescriptorOptions(options, type) { - if (!options) - return; - return type.fromObject(toDescriptorOptionsRecursive(options, type)); - } - function shortname(from, to) { - var fromPath = from.fullName.split("."), toPath = to.fullName.split("."), i = 0, j = 0, k = toPath.length - 1; - if (!(from instanceof Root) && to instanceof Namespace) - while (i < fromPath.length && j < k && fromPath[i] === toPath[j]) { - var other = to.lookup(fromPath[i++], true); - if (other !== null && other !== to) - break; - ++j; - } - else - for (;i < fromPath.length && j < k && fromPath[i] === toPath[j]; ++i, ++j) - ; - return toPath.slice(j).join("."); - } - function underScore(str) { - return str.substring(0, 1) + str.substring(1).replace(/([A-Z])(?=[a-z]|$)/g, function($0, $1) { - return "_" + $1.toLowerCase(); - }); - } - function editionFromDescriptor(fileDescriptor) { - if (fileDescriptor.syntax === "editions") { - switch (fileDescriptor.edition) { - case exports.Edition.EDITION_2023: - return "2023"; - default: - throw new Error("Unsupported edition " + fileDescriptor.edition); - } - } - if (fileDescriptor.syntax === "proto3") { - return "proto3"; - } - return "proto2"; - } - function editionToDescriptor(edition, fileDescriptor) { - if (!edition) - return; - if (edition === "proto2" || edition === "proto3") { - fileDescriptor.syntax = edition; - } else { - fileDescriptor.syntax = "editions"; - switch (edition) { - case "2023": - fileDescriptor.edition = exports.Edition.EDITION_2023; - break; - default: - throw new Error("Unsupported edition " + edition); - } - } - } -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/google/protobuf/api.json -var require_api = __commonJS((exports, module) => { - module.exports = { - nested: { - google: { - nested: { - protobuf: { - nested: { - Api: { - fields: { - name: { - type: "string", - id: 1 - }, - methods: { - rule: "repeated", - type: "Method", - id: 2 - }, - options: { - rule: "repeated", - type: "Option", - id: 3 - }, - version: { - type: "string", - id: 4 - }, - sourceContext: { - type: "SourceContext", - id: 5 - }, - mixins: { - rule: "repeated", - type: "Mixin", - id: 6 - }, - syntax: { - type: "Syntax", - id: 7 - } - } - }, - Method: { - fields: { - name: { - type: "string", - id: 1 - }, - requestTypeUrl: { - type: "string", - id: 2 - }, - requestStreaming: { - type: "bool", - id: 3 - }, - responseTypeUrl: { - type: "string", - id: 4 - }, - responseStreaming: { - type: "bool", - id: 5 - }, - options: { - rule: "repeated", - type: "Option", - id: 6 - }, - syntax: { - type: "Syntax", - id: 7 - } - } - }, - Mixin: { - fields: { - name: { - type: "string", - id: 1 - }, - root: { - type: "string", - id: 2 - } - } - }, - SourceContext: { - fields: { - fileName: { - type: "string", - id: 1 - } - } - }, - Option: { - fields: { - name: { - type: "string", - id: 1 - }, - value: { - type: "Any", - id: 2 - } - } - }, - Syntax: { - values: { - SYNTAX_PROTO2: 0, - SYNTAX_PROTO3: 1 - } - } - } - } - } - } - } - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/google/protobuf/source_context.json -var require_source_context = __commonJS((exports, module) => { - module.exports = { - nested: { - google: { - nested: { - protobuf: { - nested: { - SourceContext: { - fields: { - fileName: { - type: "string", - id: 1 - } - } - } - } - } - } - } - } - }; -}); - -// ../../../../node_modules/.bun/protobufjs@7.5.4/node_modules/protobufjs/google/protobuf/type.json -var require_type2 = __commonJS((exports, module) => { - module.exports = { - nested: { - google: { - nested: { - protobuf: { - nested: { - Type: { - fields: { - name: { - type: "string", - id: 1 - }, - fields: { - rule: "repeated", - type: "Field", - id: 2 - }, - oneofs: { - rule: "repeated", - type: "string", - id: 3 - }, - options: { - rule: "repeated", - type: "Option", - id: 4 - }, - sourceContext: { - type: "SourceContext", - id: 5 - }, - syntax: { - type: "Syntax", - id: 6 - } - } - }, - Field: { - fields: { - kind: { - type: "Kind", - id: 1 - }, - cardinality: { - type: "Cardinality", - id: 2 - }, - number: { - type: "int32", - id: 3 - }, - name: { - type: "string", - id: 4 - }, - typeUrl: { - type: "string", - id: 6 - }, - oneofIndex: { - type: "int32", - id: 7 - }, - packed: { - type: "bool", - id: 8 - }, - options: { - rule: "repeated", - type: "Option", - id: 9 - }, - jsonName: { - type: "string", - id: 10 - }, - defaultValue: { - type: "string", - id: 11 - } - }, - nested: { - Kind: { - values: { - TYPE_UNKNOWN: 0, - TYPE_DOUBLE: 1, - TYPE_FLOAT: 2, - TYPE_INT64: 3, - TYPE_UINT64: 4, - TYPE_INT32: 5, - TYPE_FIXED64: 6, - TYPE_FIXED32: 7, - TYPE_BOOL: 8, - TYPE_STRING: 9, - TYPE_GROUP: 10, - TYPE_MESSAGE: 11, - TYPE_BYTES: 12, - TYPE_UINT32: 13, - TYPE_ENUM: 14, - TYPE_SFIXED32: 15, - TYPE_SFIXED64: 16, - TYPE_SINT32: 17, - TYPE_SINT64: 18 - } - }, - Cardinality: { - values: { - CARDINALITY_UNKNOWN: 0, - CARDINALITY_OPTIONAL: 1, - CARDINALITY_REQUIRED: 2, - CARDINALITY_REPEATED: 3 - } - } - } - }, - Enum: { - fields: { - name: { - type: "string", - id: 1 - }, - enumvalue: { - rule: "repeated", - type: "EnumValue", - id: 2 - }, - options: { - rule: "repeated", - type: "Option", - id: 3 - }, - sourceContext: { - type: "SourceContext", - id: 4 - }, - syntax: { - type: "Syntax", - id: 5 - } - } - }, - EnumValue: { - fields: { - name: { - type: "string", - id: 1 - }, - number: { - type: "int32", - id: 2 - }, - options: { - rule: "repeated", - type: "Option", - id: 3 - } - } - }, - Option: { - fields: { - name: { - type: "string", - id: 1 - }, - value: { - type: "Any", - id: 2 - } - } - }, - Syntax: { - values: { - SYNTAX_PROTO2: 0, - SYNTAX_PROTO3: 1 - } - }, - Any: { - fields: { - type_url: { - type: "string", - id: 1 - }, - value: { - type: "bytes", - id: 2 - } - } - }, - SourceContext: { - fields: { - fileName: { - type: "string", - id: 1 - } - } - } - } - } - } - } - } - }; -}); - -// ../../../../node_modules/.bun/@grpc+proto-loader@0.8.0/node_modules/@grpc/proto-loader/build/src/util.js -var require_util6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addCommonProtos = exports.loadProtosWithOptionsSync = exports.loadProtosWithOptions = undefined; - var fs = __require("fs"); - var path = __require("path"); - var Protobuf = require_src74(); - function addIncludePathResolver(root, includePaths) { - const originalResolvePath = root.resolvePath; - root.resolvePath = (origin, target) => { - if (path.isAbsolute(target)) { - return target; - } - for (const directory of includePaths) { - const fullPath = path.join(directory, target); - try { - fs.accessSync(fullPath, fs.constants.R_OK); - return fullPath; - } catch (err) { - continue; - } - } - process.emitWarning(`${target} not found in any of the include paths ${includePaths}`); - return originalResolvePath(origin, target); - }; - } - async function loadProtosWithOptions(filename, options) { - const root = new Protobuf.Root; - options = options || {}; - if (!!options.includeDirs) { - if (!Array.isArray(options.includeDirs)) { - return Promise.reject(new Error("The includeDirs option must be an array")); - } - addIncludePathResolver(root, options.includeDirs); - } - const loadedRoot = await root.load(filename, options); - loadedRoot.resolveAll(); - return loadedRoot; - } - exports.loadProtosWithOptions = loadProtosWithOptions; - function loadProtosWithOptionsSync(filename, options) { - const root = new Protobuf.Root; - options = options || {}; - if (!!options.includeDirs) { - if (!Array.isArray(options.includeDirs)) { - throw new Error("The includeDirs option must be an array"); - } - addIncludePathResolver(root, options.includeDirs); - } - const loadedRoot = root.loadSync(filename, options); - loadedRoot.resolveAll(); - return loadedRoot; - } - exports.loadProtosWithOptionsSync = loadProtosWithOptionsSync; - function addCommonProtos() { - const apiDescriptor = require_api(); - const descriptorDescriptor = require_descriptor(); - const sourceContextDescriptor = require_source_context(); - const typeDescriptor = require_type2(); - Protobuf.common("api", apiDescriptor.nested.google.nested.protobuf.nested); - Protobuf.common("descriptor", descriptorDescriptor.nested.google.nested.protobuf.nested); - Protobuf.common("source_context", sourceContextDescriptor.nested.google.nested.protobuf.nested); - Protobuf.common("type", typeDescriptor.nested.google.nested.protobuf.nested); - } - exports.addCommonProtos = addCommonProtos; -}); - -// ../../../../node_modules/.bun/long@5.3.2/node_modules/long/umd/index.js -var require_umd = __commonJS((exports, module) => { - (function(global2, factory) { - function preferDefault(exports2) { - return exports2.default || exports2; - } - if (typeof define === "function" && define.amd) { - define([], function() { - var exports2 = {}; - factory(exports2); - return preferDefault(exports2); - }); - } else if (typeof exports === "object") { - factory(exports); - if (typeof module === "object") - module.exports = preferDefault(exports); - } else { - (function() { - var exports2 = {}; - factory(exports2); - global2.Long = preferDefault(exports2); - })(); - } - })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : exports, function(_exports) { - Object.defineProperty(_exports, "__esModule", { - value: true - }); - _exports.default = undefined; - var wasm = null; - try { - wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([ - 0, - 97, - 115, - 109, - 1, - 0, - 0, - 0, - 1, - 13, - 2, - 96, - 0, - 1, - 127, - 96, - 4, - 127, - 127, - 127, - 127, - 1, - 127, - 3, - 7, - 6, - 0, - 1, - 1, - 1, - 1, - 1, - 6, - 6, - 1, - 127, - 1, - 65, - 0, - 11, - 7, - 50, - 6, - 3, - 109, - 117, - 108, - 0, - 1, - 5, - 100, - 105, - 118, - 95, - 115, - 0, - 2, - 5, - 100, - 105, - 118, - 95, - 117, - 0, - 3, - 5, - 114, - 101, - 109, - 95, - 115, - 0, - 4, - 5, - 114, - 101, - 109, - 95, - 117, - 0, - 5, - 8, - 103, - 101, - 116, - 95, - 104, - 105, - 103, - 104, - 0, - 0, - 10, - 191, - 1, - 6, - 4, - 0, - 35, - 0, - 11, - 36, - 1, - 1, - 126, - 32, - 0, - 173, - 32, - 1, - 173, - 66, - 32, - 134, - 132, - 32, - 2, - 173, - 32, - 3, - 173, - 66, - 32, - 134, - 132, - 126, - 34, - 4, - 66, - 32, - 135, - 167, - 36, - 0, - 32, - 4, - 167, - 11, - 36, - 1, - 1, - 126, - 32, - 0, - 173, - 32, - 1, - 173, - 66, - 32, - 134, - 132, - 32, - 2, - 173, - 32, - 3, - 173, - 66, - 32, - 134, - 132, - 127, - 34, - 4, - 66, - 32, - 135, - 167, - 36, - 0, - 32, - 4, - 167, - 11, - 36, - 1, - 1, - 126, - 32, - 0, - 173, - 32, - 1, - 173, - 66, - 32, - 134, - 132, - 32, - 2, - 173, - 32, - 3, - 173, - 66, - 32, - 134, - 132, - 128, - 34, - 4, - 66, - 32, - 135, - 167, - 36, - 0, - 32, - 4, - 167, - 11, - 36, - 1, - 1, - 126, - 32, - 0, - 173, - 32, - 1, - 173, - 66, - 32, - 134, - 132, - 32, - 2, - 173, - 32, - 3, - 173, - 66, - 32, - 134, - 132, - 129, - 34, - 4, - 66, - 32, - 135, - 167, - 36, - 0, - 32, - 4, - 167, - 11, - 36, - 1, - 1, - 126, - 32, - 0, - 173, - 32, - 1, - 173, - 66, - 32, - 134, - 132, - 32, - 2, - 173, - 32, - 3, - 173, - 66, - 32, - 134, - 132, - 130, - 34, - 4, - 66, - 32, - 135, - 167, - 36, - 0, - 32, - 4, - 167, - 11 - ])), {}).exports; - } catch {} - function Long(low, high, unsigned) { - this.low = low | 0; - this.high = high | 0; - this.unsigned = !!unsigned; - } - Long.prototype.__isLong__; - Object.defineProperty(Long.prototype, "__isLong__", { - value: true - }); - function isLong(obj) { - return (obj && obj["__isLong__"]) === true; - } - function ctz32(value) { - var c = Math.clz32(value & -value); - return value ? 31 - c : c; - } - Long.isLong = isLong; - var INT_CACHE = {}; - var UINT_CACHE = {}; - function fromInt(value, unsigned) { - var obj, cachedObj, cache; - if (unsigned) { - value >>>= 0; - if (cache = 0 <= value && value < 256) { - cachedObj = UINT_CACHE[value]; - if (cachedObj) - return cachedObj; - } - obj = fromBits(value, 0, true); - if (cache) - UINT_CACHE[value] = obj; - return obj; - } else { - value |= 0; - if (cache = -128 <= value && value < 128) { - cachedObj = INT_CACHE[value]; - if (cachedObj) - return cachedObj; - } - obj = fromBits(value, value < 0 ? -1 : 0, false); - if (cache) - INT_CACHE[value] = obj; - return obj; - } - } - Long.fromInt = fromInt; - function fromNumber(value, unsigned) { - if (isNaN(value)) - return unsigned ? UZERO : ZERO; - if (unsigned) { - if (value < 0) - return UZERO; - if (value >= TWO_PWR_64_DBL) - return MAX_UNSIGNED_VALUE; - } else { - if (value <= -TWO_PWR_63_DBL) - return MIN_VALUE2; - if (value + 1 >= TWO_PWR_63_DBL) - return MAX_VALUE; - } - if (value < 0) - return fromNumber(-value, unsigned).neg(); - return fromBits(value % TWO_PWR_32_DBL | 0, value / TWO_PWR_32_DBL | 0, unsigned); - } - Long.fromNumber = fromNumber; - function fromBits(lowBits, highBits, unsigned) { - return new Long(lowBits, highBits, unsigned); - } - Long.fromBits = fromBits; - var pow_dbl = Math.pow; - function fromString(str, unsigned, radix) { - if (str.length === 0) - throw Error("empty string"); - if (typeof unsigned === "number") { - radix = unsigned; - unsigned = false; - } else { - unsigned = !!unsigned; - } - if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity") - return unsigned ? UZERO : ZERO; - radix = radix || 10; - if (radix < 2 || 36 < radix) - throw RangeError("radix"); - var p; - if ((p = str.indexOf("-")) > 0) - throw Error("interior hyphen"); - else if (p === 0) { - return fromString(str.substring(1), unsigned, radix).neg(); - } - var radixToPower = fromNumber(pow_dbl(radix, 8)); - var result = ZERO; - for (var i = 0;i < str.length; i += 8) { - var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix); - if (size < 8) { - var power = fromNumber(pow_dbl(radix, size)); - result = result.mul(power).add(fromNumber(value)); - } else { - result = result.mul(radixToPower); - result = result.add(fromNumber(value)); - } - } - result.unsigned = unsigned; - return result; - } - Long.fromString = fromString; - function fromValue(val, unsigned) { - if (typeof val === "number") - return fromNumber(val, unsigned); - if (typeof val === "string") - return fromString(val, unsigned); - return fromBits(val.low, val.high, typeof unsigned === "boolean" ? unsigned : val.unsigned); - } - Long.fromValue = fromValue; - var TWO_PWR_16_DBL = 1 << 16; - var TWO_PWR_24_DBL = 1 << 24; - var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; - var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; - var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; - var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL); - var ZERO = fromInt(0); - Long.ZERO = ZERO; - var UZERO = fromInt(0, true); - Long.UZERO = UZERO; - var ONE = fromInt(1); - Long.ONE = ONE; - var UONE = fromInt(1, true); - Long.UONE = UONE; - var NEG_ONE = fromInt(-1); - Long.NEG_ONE = NEG_ONE; - var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false); - Long.MAX_VALUE = MAX_VALUE; - var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true); - Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE; - var MIN_VALUE2 = fromBits(0, 2147483648 | 0, false); - Long.MIN_VALUE = MIN_VALUE2; - var LongPrototype = Long.prototype; - LongPrototype.toInt = function toInt() { - return this.unsigned ? this.low >>> 0 : this.low; - }; - LongPrototype.toNumber = function toNumber() { - if (this.unsigned) - return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0); - return this.high * TWO_PWR_32_DBL + (this.low >>> 0); - }; - LongPrototype.toString = function toString(radix) { - radix = radix || 10; - if (radix < 2 || 36 < radix) - throw RangeError("radix"); - if (this.isZero()) - return "0"; - if (this.isNegative()) { - if (this.eq(MIN_VALUE2)) { - var radixLong = fromNumber(radix), div = this.div(radixLong), rem1 = div.mul(radixLong).sub(this); - return div.toString(radix) + rem1.toInt().toString(radix); - } else - return "-" + this.neg().toString(radix); - } - var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this; - var result = ""; - while (true) { - var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix); - rem = remDiv; - if (rem.isZero()) - return digits + result; - else { - while (digits.length < 6) - digits = "0" + digits; - result = "" + digits + result; - } - } - }; - LongPrototype.getHighBits = function getHighBits() { - return this.high; - }; - LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() { - return this.high >>> 0; - }; - LongPrototype.getLowBits = function getLowBits() { - return this.low; - }; - LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() { - return this.low >>> 0; - }; - LongPrototype.getNumBitsAbs = function getNumBitsAbs() { - if (this.isNegative()) - return this.eq(MIN_VALUE2) ? 64 : this.neg().getNumBitsAbs(); - var val = this.high != 0 ? this.high : this.low; - for (var bit = 31;bit > 0; bit--) - if ((val & 1 << bit) != 0) - break; - return this.high != 0 ? bit + 33 : bit + 1; - }; - LongPrototype.isSafeInteger = function isSafeInteger() { - var top11Bits = this.high >> 21; - if (!top11Bits) - return true; - if (this.unsigned) - return false; - return top11Bits === -1 && !(this.low === 0 && this.high === -2097152); - }; - LongPrototype.isZero = function isZero() { - return this.high === 0 && this.low === 0; - }; - LongPrototype.eqz = LongPrototype.isZero; - LongPrototype.isNegative = function isNegative() { - return !this.unsigned && this.high < 0; - }; - LongPrototype.isPositive = function isPositive() { - return this.unsigned || this.high >= 0; - }; - LongPrototype.isOdd = function isOdd() { - return (this.low & 1) === 1; - }; - LongPrototype.isEven = function isEven() { - return (this.low & 1) === 0; - }; - LongPrototype.equals = function equals(other) { - if (!isLong(other)) - other = fromValue(other); - if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1) - return false; - return this.high === other.high && this.low === other.low; - }; - LongPrototype.eq = LongPrototype.equals; - LongPrototype.notEquals = function notEquals(other) { - return !this.eq(other); - }; - LongPrototype.neq = LongPrototype.notEquals; - LongPrototype.ne = LongPrototype.notEquals; - LongPrototype.lessThan = function lessThan(other) { - return this.comp(other) < 0; - }; - LongPrototype.lt = LongPrototype.lessThan; - LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) { - return this.comp(other) <= 0; - }; - LongPrototype.lte = LongPrototype.lessThanOrEqual; - LongPrototype.le = LongPrototype.lessThanOrEqual; - LongPrototype.greaterThan = function greaterThan(other) { - return this.comp(other) > 0; - }; - LongPrototype.gt = LongPrototype.greaterThan; - LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) { - return this.comp(other) >= 0; - }; - LongPrototype.gte = LongPrototype.greaterThanOrEqual; - LongPrototype.ge = LongPrototype.greaterThanOrEqual; - LongPrototype.compare = function compare(other) { - if (!isLong(other)) - other = fromValue(other); - if (this.eq(other)) - return 0; - var thisNeg = this.isNegative(), otherNeg = other.isNegative(); - if (thisNeg && !otherNeg) - return -1; - if (!thisNeg && otherNeg) - return 1; - if (!this.unsigned) - return this.sub(other).isNegative() ? -1 : 1; - return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1; - }; - LongPrototype.comp = LongPrototype.compare; - LongPrototype.negate = function negate() { - if (!this.unsigned && this.eq(MIN_VALUE2)) - return MIN_VALUE2; - return this.not().add(ONE); - }; - LongPrototype.neg = LongPrototype.negate; - LongPrototype.add = function add(addend) { - if (!isLong(addend)) - addend = fromValue(addend); - var a48 = this.high >>> 16; - var a32 = this.high & 65535; - var a16 = this.low >>> 16; - var a00 = this.low & 65535; - var b48 = addend.high >>> 16; - var b32 = addend.high & 65535; - var b16 = addend.low >>> 16; - var b00 = addend.low & 65535; - var c48 = 0, c32 = 0, c16 = 0, c00 = 0; - c00 += a00 + b00; - c16 += c00 >>> 16; - c00 &= 65535; - c16 += a16 + b16; - c32 += c16 >>> 16; - c16 &= 65535; - c32 += a32 + b32; - c48 += c32 >>> 16; - c32 &= 65535; - c48 += a48 + b48; - c48 &= 65535; - return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned); - }; - LongPrototype.subtract = function subtract(subtrahend) { - if (!isLong(subtrahend)) - subtrahend = fromValue(subtrahend); - return this.add(subtrahend.neg()); - }; - LongPrototype.sub = LongPrototype.subtract; - LongPrototype.multiply = function multiply(multiplier) { - if (this.isZero()) - return this; - if (!isLong(multiplier)) - multiplier = fromValue(multiplier); - if (wasm) { - var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high); - return fromBits(low, wasm["get_high"](), this.unsigned); - } - if (multiplier.isZero()) - return this.unsigned ? UZERO : ZERO; - if (this.eq(MIN_VALUE2)) - return multiplier.isOdd() ? MIN_VALUE2 : ZERO; - if (multiplier.eq(MIN_VALUE2)) - return this.isOdd() ? MIN_VALUE2 : ZERO; - if (this.isNegative()) { - if (multiplier.isNegative()) - return this.neg().mul(multiplier.neg()); - else - return this.neg().mul(multiplier).neg(); - } else if (multiplier.isNegative()) - return this.mul(multiplier.neg()).neg(); - if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) - return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); - var a48 = this.high >>> 16; - var a32 = this.high & 65535; - var a16 = this.low >>> 16; - var a00 = this.low & 65535; - var b48 = multiplier.high >>> 16; - var b32 = multiplier.high & 65535; - var b16 = multiplier.low >>> 16; - var b00 = multiplier.low & 65535; - var c48 = 0, c32 = 0, c16 = 0, c00 = 0; - c00 += a00 * b00; - c16 += c00 >>> 16; - c00 &= 65535; - c16 += a16 * b00; - c32 += c16 >>> 16; - c16 &= 65535; - c16 += a00 * b16; - c32 += c16 >>> 16; - c16 &= 65535; - c32 += a32 * b00; - c48 += c32 >>> 16; - c32 &= 65535; - c32 += a16 * b16; - c48 += c32 >>> 16; - c32 &= 65535; - c32 += a00 * b32; - c48 += c32 >>> 16; - c32 &= 65535; - c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; - c48 &= 65535; - return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned); - }; - LongPrototype.mul = LongPrototype.multiply; - LongPrototype.divide = function divide(divisor) { - if (!isLong(divisor)) - divisor = fromValue(divisor); - if (divisor.isZero()) - throw Error("division by zero"); - if (wasm) { - if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) { - return this; - } - var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(this.low, this.high, divisor.low, divisor.high); - return fromBits(low, wasm["get_high"](), this.unsigned); - } - if (this.isZero()) - return this.unsigned ? UZERO : ZERO; - var approx, rem, res; - if (!this.unsigned) { - if (this.eq(MIN_VALUE2)) { - if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) - return MIN_VALUE2; - else if (divisor.eq(MIN_VALUE2)) - return ONE; - else { - var halfThis = this.shr(1); - approx = halfThis.div(divisor).shl(1); - if (approx.eq(ZERO)) { - return divisor.isNegative() ? ONE : NEG_ONE; - } else { - rem = this.sub(divisor.mul(approx)); - res = approx.add(rem.div(divisor)); - return res; - } - } - } else if (divisor.eq(MIN_VALUE2)) - return this.unsigned ? UZERO : ZERO; - if (this.isNegative()) { - if (divisor.isNegative()) - return this.neg().div(divisor.neg()); - return this.neg().div(divisor).neg(); - } else if (divisor.isNegative()) - return this.div(divisor.neg()).neg(); - res = ZERO; - } else { - if (!divisor.unsigned) - divisor = divisor.toUnsigned(); - if (divisor.gt(this)) - return UZERO; - if (divisor.gt(this.shru(1))) - return UONE; - res = UZERO; - } - rem = this; - while (rem.gte(divisor)) { - approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); - var log2 = Math.ceil(Math.log(approx) / Math.LN2), delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48), approxRes = fromNumber(approx), approxRem = approxRes.mul(divisor); - while (approxRem.isNegative() || approxRem.gt(rem)) { - approx -= delta; - approxRes = fromNumber(approx, this.unsigned); - approxRem = approxRes.mul(divisor); - } - if (approxRes.isZero()) - approxRes = ONE; - res = res.add(approxRes); - rem = rem.sub(approxRem); - } - return res; - }; - LongPrototype.div = LongPrototype.divide; - LongPrototype.modulo = function modulo(divisor) { - if (!isLong(divisor)) - divisor = fromValue(divisor); - if (wasm) { - var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(this.low, this.high, divisor.low, divisor.high); - return fromBits(low, wasm["get_high"](), this.unsigned); - } - return this.sub(this.div(divisor).mul(divisor)); - }; - LongPrototype.mod = LongPrototype.modulo; - LongPrototype.rem = LongPrototype.modulo; - LongPrototype.not = function not() { - return fromBits(~this.low, ~this.high, this.unsigned); - }; - LongPrototype.countLeadingZeros = function countLeadingZeros() { - return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32; - }; - LongPrototype.clz = LongPrototype.countLeadingZeros; - LongPrototype.countTrailingZeros = function countTrailingZeros() { - return this.low ? ctz32(this.low) : ctz32(this.high) + 32; - }; - LongPrototype.ctz = LongPrototype.countTrailingZeros; - LongPrototype.and = function and(other) { - if (!isLong(other)) - other = fromValue(other); - return fromBits(this.low & other.low, this.high & other.high, this.unsigned); - }; - LongPrototype.or = function or(other) { - if (!isLong(other)) - other = fromValue(other); - return fromBits(this.low | other.low, this.high | other.high, this.unsigned); - }; - LongPrototype.xor = function xor(other) { - if (!isLong(other)) - other = fromValue(other); - return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); - }; - LongPrototype.shiftLeft = function shiftLeft(numBits) { - if (isLong(numBits)) - numBits = numBits.toInt(); - if ((numBits &= 63) === 0) - return this; - else if (numBits < 32) - return fromBits(this.low << numBits, this.high << numBits | this.low >>> 32 - numBits, this.unsigned); - else - return fromBits(0, this.low << numBits - 32, this.unsigned); - }; - LongPrototype.shl = LongPrototype.shiftLeft; - LongPrototype.shiftRight = function shiftRight(numBits) { - if (isLong(numBits)) - numBits = numBits.toInt(); - if ((numBits &= 63) === 0) - return this; - else if (numBits < 32) - return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >> numBits, this.unsigned); - else - return fromBits(this.high >> numBits - 32, this.high >= 0 ? 0 : -1, this.unsigned); - }; - LongPrototype.shr = LongPrototype.shiftRight; - LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) { - if (isLong(numBits)) - numBits = numBits.toInt(); - if ((numBits &= 63) === 0) - return this; - if (numBits < 32) - return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >>> numBits, this.unsigned); - if (numBits === 32) - return fromBits(this.high, 0, this.unsigned); - return fromBits(this.high >>> numBits - 32, 0, this.unsigned); - }; - LongPrototype.shru = LongPrototype.shiftRightUnsigned; - LongPrototype.shr_u = LongPrototype.shiftRightUnsigned; - LongPrototype.rotateLeft = function rotateLeft(numBits) { - var b; - if (isLong(numBits)) - numBits = numBits.toInt(); - if ((numBits &= 63) === 0) - return this; - if (numBits === 32) - return fromBits(this.high, this.low, this.unsigned); - if (numBits < 32) { - b = 32 - numBits; - return fromBits(this.low << numBits | this.high >>> b, this.high << numBits | this.low >>> b, this.unsigned); - } - numBits -= 32; - b = 32 - numBits; - return fromBits(this.high << numBits | this.low >>> b, this.low << numBits | this.high >>> b, this.unsigned); - }; - LongPrototype.rotl = LongPrototype.rotateLeft; - LongPrototype.rotateRight = function rotateRight(numBits) { - var b; - if (isLong(numBits)) - numBits = numBits.toInt(); - if ((numBits &= 63) === 0) - return this; - if (numBits === 32) - return fromBits(this.high, this.low, this.unsigned); - if (numBits < 32) { - b = 32 - numBits; - return fromBits(this.high << b | this.low >>> numBits, this.low << b | this.high >>> numBits, this.unsigned); - } - numBits -= 32; - b = 32 - numBits; - return fromBits(this.low << b | this.high >>> numBits, this.high << b | this.low >>> numBits, this.unsigned); - }; - LongPrototype.rotr = LongPrototype.rotateRight; - LongPrototype.toSigned = function toSigned() { - if (!this.unsigned) - return this; - return fromBits(this.low, this.high, false); - }; - LongPrototype.toUnsigned = function toUnsigned() { - if (this.unsigned) - return this; - return fromBits(this.low, this.high, true); - }; - LongPrototype.toBytes = function toBytes(le) { - return le ? this.toBytesLE() : this.toBytesBE(); - }; - LongPrototype.toBytesLE = function toBytesLE() { - var hi = this.high, lo = this.low; - return [ - lo & 255, - lo >>> 8 & 255, - lo >>> 16 & 255, - lo >>> 24, - hi & 255, - hi >>> 8 & 255, - hi >>> 16 & 255, - hi >>> 24 - ]; - }; - LongPrototype.toBytesBE = function toBytesBE() { - var hi = this.high, lo = this.low; - return [ - hi >>> 24, - hi >>> 16 & 255, - hi >>> 8 & 255, - hi & 255, - lo >>> 24, - lo >>> 16 & 255, - lo >>> 8 & 255, - lo & 255 - ]; - }; - Long.fromBytes = function fromBytes(bytes, unsigned, le) { - return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned); - }; - Long.fromBytesLE = function fromBytesLE(bytes, unsigned) { - return new Long(bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24, bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24, unsigned); - }; - Long.fromBytesBE = function fromBytesBE(bytes, unsigned) { - return new Long(bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7], bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], unsigned); - }; - if (typeof BigInt === "function") { - Long.fromBigInt = function fromBigInt(value, unsigned) { - var lowBits = Number(BigInt.asIntN(32, value)); - var highBits = Number(BigInt.asIntN(32, value >> BigInt(32))); - return fromBits(lowBits, highBits, unsigned); - }; - Long.fromValue = function fromValueWithBigInt(value, unsigned) { - if (typeof value === "bigint") - return Long.fromBigInt(value, unsigned); - return fromValue(value, unsigned); - }; - LongPrototype.toBigInt = function toBigInt() { - var lowBigInt = BigInt(this.low >>> 0); - var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high); - return highBigInt << BigInt(32) | lowBigInt; - }; - } - var _default3 = _exports.default = Long; - }); -}); - -// ../../../../node_modules/.bun/@grpc+proto-loader@0.8.0/node_modules/@grpc/proto-loader/build/src/index.js -var require_src75 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.loadFileDescriptorSetFromObject = exports.loadFileDescriptorSetFromBuffer = exports.fromJSON = exports.loadSync = exports.load = exports.IdempotencyLevel = exports.isAnyExtension = exports.Long = undefined; - var camelCase = require_lodash(); - var Protobuf = require_src74(); - var descriptor = require_descriptor2(); - var util_1 = require_util6(); - var Long = require_umd(); - exports.Long = Long; - function isAnyExtension(obj) { - return "@type" in obj && typeof obj["@type"] === "string"; - } - exports.isAnyExtension = isAnyExtension; - var IdempotencyLevel; - (function(IdempotencyLevel2) { - IdempotencyLevel2["IDEMPOTENCY_UNKNOWN"] = "IDEMPOTENCY_UNKNOWN"; - IdempotencyLevel2["NO_SIDE_EFFECTS"] = "NO_SIDE_EFFECTS"; - IdempotencyLevel2["IDEMPOTENT"] = "IDEMPOTENT"; - })(IdempotencyLevel = exports.IdempotencyLevel || (exports.IdempotencyLevel = {})); - var descriptorOptions = { - longs: String, - enums: String, - bytes: String, - defaults: true, - oneofs: true, - json: true - }; - function joinName(baseName, name) { - if (baseName === "") { - return name; - } else { - return baseName + "." + name; - } - } - function isHandledReflectionObject(obj) { - return obj instanceof Protobuf.Service || obj instanceof Protobuf.Type || obj instanceof Protobuf.Enum; - } - function isNamespaceBase(obj) { - return obj instanceof Protobuf.Namespace || obj instanceof Protobuf.Root; - } - function getAllHandledReflectionObjects(obj, parentName) { - const objName = joinName(parentName, obj.name); - if (isHandledReflectionObject(obj)) { - return [[objName, obj]]; - } else { - if (isNamespaceBase(obj) && typeof obj.nested !== "undefined") { - return Object.keys(obj.nested).map((name) => { - return getAllHandledReflectionObjects(obj.nested[name], objName); - }).reduce((accumulator, currentValue) => accumulator.concat(currentValue), []); - } - } - return []; - } - function createDeserializer(cls, options) { - return function deserialize(argBuf) { - return cls.toObject(cls.decode(argBuf), options); - }; - } - function createSerializer(cls) { - return function serialize(arg) { - if (Array.isArray(arg)) { - throw new Error(`Failed to serialize message: expected object with ${cls.name} structure, got array instead`); - } - const message = cls.fromObject(arg); - return cls.encode(message).finish(); - }; - } - function mapMethodOptions(options) { - return (options || []).reduce((obj, item) => { - for (const [key, value] of Object.entries(item)) { - switch (key) { - case "uninterpreted_option": - obj.uninterpreted_option.push(item.uninterpreted_option); - break; - default: - obj[key] = value; - } - } - return obj; - }, { - deprecated: false, - idempotency_level: IdempotencyLevel.IDEMPOTENCY_UNKNOWN, - uninterpreted_option: [] - }); - } - function createMethodDefinition(method, serviceName, options, fileDescriptors) { - const requestType = method.resolvedRequestType; - const responseType = method.resolvedResponseType; - return { - path: "/" + serviceName + "/" + method.name, - requestStream: !!method.requestStream, - responseStream: !!method.responseStream, - requestSerialize: createSerializer(requestType), - requestDeserialize: createDeserializer(requestType, options), - responseSerialize: createSerializer(responseType), - responseDeserialize: createDeserializer(responseType, options), - originalName: camelCase(method.name), - requestType: createMessageDefinition(requestType, options, fileDescriptors), - responseType: createMessageDefinition(responseType, options, fileDescriptors), - options: mapMethodOptions(method.parsedOptions) - }; - } - function createServiceDefinition(service, name, options, fileDescriptors) { - const def = {}; - for (const method of service.methodsArray) { - def[method.name] = createMethodDefinition(method, name, options, fileDescriptors); - } - return def; - } - function createMessageDefinition(message, options, fileDescriptors) { - const messageDescriptor = message.toDescriptor("proto3"); - return { - format: "Protocol Buffer 3 DescriptorProto", - type: messageDescriptor.$type.toObject(messageDescriptor, descriptorOptions), - fileDescriptorProtos: fileDescriptors, - serialize: createSerializer(message), - deserialize: createDeserializer(message, options) - }; - } - function createEnumDefinition(enumType, fileDescriptors) { - const enumDescriptor = enumType.toDescriptor("proto3"); - return { - format: "Protocol Buffer 3 EnumDescriptorProto", - type: enumDescriptor.$type.toObject(enumDescriptor, descriptorOptions), - fileDescriptorProtos: fileDescriptors - }; - } - function createDefinition(obj, name, options, fileDescriptors) { - if (obj instanceof Protobuf.Service) { - return createServiceDefinition(obj, name, options, fileDescriptors); - } else if (obj instanceof Protobuf.Type) { - return createMessageDefinition(obj, options, fileDescriptors); - } else if (obj instanceof Protobuf.Enum) { - return createEnumDefinition(obj, fileDescriptors); - } else { - throw new Error("Type mismatch in reflection object handling"); - } - } - function createPackageDefinition(root, options) { - const def = {}; - root.resolveAll(); - const descriptorList = root.toDescriptor("proto3").file; - const bufferList = descriptorList.map((value) => Buffer.from(descriptor.FileDescriptorProto.encode(value).finish())); - for (const [name, obj] of getAllHandledReflectionObjects(root, "")) { - def[name] = createDefinition(obj, name, options, bufferList); - } - return def; - } - function createPackageDefinitionFromDescriptorSet(decodedDescriptorSet, options) { - options = options || {}; - const root = Protobuf.Root.fromDescriptor(decodedDescriptorSet); - root.resolveAll(); - return createPackageDefinition(root, options); - } - function load(filename, options) { - return (0, util_1.loadProtosWithOptions)(filename, options).then((loadedRoot) => { - return createPackageDefinition(loadedRoot, options); - }); - } - exports.load = load; - function loadSync(filename, options) { - const loadedRoot = (0, util_1.loadProtosWithOptionsSync)(filename, options); - return createPackageDefinition(loadedRoot, options); - } - exports.loadSync = loadSync; - function fromJSON(json3, options) { - options = options || {}; - const loadedRoot = Protobuf.Root.fromJSON(json3); - loadedRoot.resolveAll(); - return createPackageDefinition(loadedRoot, options); - } - exports.fromJSON = fromJSON; - function loadFileDescriptorSetFromBuffer(descriptorSet, options) { - const decodedDescriptorSet = descriptor.FileDescriptorSet.decode(descriptorSet); - return createPackageDefinitionFromDescriptorSet(decodedDescriptorSet, options); - } - exports.loadFileDescriptorSetFromBuffer = loadFileDescriptorSetFromBuffer; - function loadFileDescriptorSetFromObject(descriptorSet, options) { - const decodedDescriptorSet = descriptor.FileDescriptorSet.fromObject(descriptorSet); - return createPackageDefinitionFromDescriptorSet(decodedDescriptorSet, options); - } - exports.loadFileDescriptorSetFromObject = loadFileDescriptorSetFromObject; - (0, util_1.addCommonProtos)(); -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/channelz.js -var require_channelz = __commonJS((exports) => { - var __dirname = "/Users/jhaynie/code/agentuity/worktree/improve-integration-510/sdk/node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.registerChannelzSocket = exports.registerChannelzServer = exports.registerChannelzSubchannel = exports.registerChannelzChannel = exports.ChannelzCallTrackerStub = exports.ChannelzCallTracker = exports.ChannelzChildrenTrackerStub = exports.ChannelzChildrenTracker = exports.ChannelzTrace = exports.ChannelzTraceStub = undefined; - exports.unregisterChannelzRef = unregisterChannelzRef; - exports.getChannelzHandlers = getChannelzHandlers; - exports.getChannelzServiceDefinition = getChannelzServiceDefinition; - exports.setup = setup; - var net_1 = __require("net"); - var ordered_map_1 = require_cjs(); - var connectivity_state_1 = require_connectivity_state(); - var constants_1 = require_constants9(); - var subchannel_address_1 = require_subchannel_address(); - var admin_1 = require_admin(); - var make_client_1 = require_make_client(); - function channelRefToMessage(ref) { - return { - channel_id: ref.id, - name: ref.name - }; - } - function subchannelRefToMessage(ref) { - return { - subchannel_id: ref.id, - name: ref.name - }; - } - function serverRefToMessage(ref) { - return { - server_id: ref.id - }; - } - function socketRefToMessage(ref) { - return { - socket_id: ref.id, - name: ref.name - }; - } - var TARGET_RETAINED_TRACES = 32; - var DEFAULT_MAX_RESULTS = 100; - - class ChannelzTraceStub { - constructor() { - this.events = []; - this.creationTimestamp = new Date; - this.eventsLogged = 0; - } - addTrace() {} - getTraceMessage() { - return { - creation_timestamp: dateToProtoTimestamp(this.creationTimestamp), - num_events_logged: this.eventsLogged, - events: [] - }; - } - } - exports.ChannelzTraceStub = ChannelzTraceStub; - - class ChannelzTrace { - constructor() { - this.events = []; - this.eventsLogged = 0; - this.creationTimestamp = new Date; - } - addTrace(severity, description, child) { - const timestamp = new Date; - this.events.push({ - description, - severity, - timestamp, - childChannel: (child === null || child === undefined ? undefined : child.kind) === "channel" ? child : undefined, - childSubchannel: (child === null || child === undefined ? undefined : child.kind) === "subchannel" ? child : undefined - }); - if (this.events.length >= TARGET_RETAINED_TRACES * 2) { - this.events = this.events.slice(TARGET_RETAINED_TRACES); - } - this.eventsLogged += 1; - } - getTraceMessage() { - return { - creation_timestamp: dateToProtoTimestamp(this.creationTimestamp), - num_events_logged: this.eventsLogged, - events: this.events.map((event) => { - return { - description: event.description, - severity: event.severity, - timestamp: dateToProtoTimestamp(event.timestamp), - channel_ref: event.childChannel ? channelRefToMessage(event.childChannel) : null, - subchannel_ref: event.childSubchannel ? subchannelRefToMessage(event.childSubchannel) : null - }; - }) - }; - } - } - exports.ChannelzTrace = ChannelzTrace; - - class ChannelzChildrenTracker { - constructor() { - this.channelChildren = new ordered_map_1.OrderedMap; - this.subchannelChildren = new ordered_map_1.OrderedMap; - this.socketChildren = new ordered_map_1.OrderedMap; - this.trackerMap = { - ["channel"]: this.channelChildren, - ["subchannel"]: this.subchannelChildren, - ["socket"]: this.socketChildren - }; - } - refChild(child) { - const tracker = this.trackerMap[child.kind]; - const trackedChild = tracker.find(child.id); - if (trackedChild.equals(tracker.end())) { - tracker.setElement(child.id, { - ref: child, - count: 1 - }, trackedChild); - } else { - trackedChild.pointer[1].count += 1; - } - } - unrefChild(child) { - const tracker = this.trackerMap[child.kind]; - const trackedChild = tracker.getElementByKey(child.id); - if (trackedChild !== undefined) { - trackedChild.count -= 1; - if (trackedChild.count === 0) { - tracker.eraseElementByKey(child.id); - } - } - } - getChildLists() { - return { - channels: this.channelChildren, - subchannels: this.subchannelChildren, - sockets: this.socketChildren - }; - } - } - exports.ChannelzChildrenTracker = ChannelzChildrenTracker; - - class ChannelzChildrenTrackerStub extends ChannelzChildrenTracker { - refChild() {} - unrefChild() {} - } - exports.ChannelzChildrenTrackerStub = ChannelzChildrenTrackerStub; - - class ChannelzCallTracker { - constructor() { - this.callsStarted = 0; - this.callsSucceeded = 0; - this.callsFailed = 0; - this.lastCallStartedTimestamp = null; - } - addCallStarted() { - this.callsStarted += 1; - this.lastCallStartedTimestamp = new Date; - } - addCallSucceeded() { - this.callsSucceeded += 1; - } - addCallFailed() { - this.callsFailed += 1; - } - } - exports.ChannelzCallTracker = ChannelzCallTracker; - - class ChannelzCallTrackerStub extends ChannelzCallTracker { - addCallStarted() {} - addCallSucceeded() {} - addCallFailed() {} - } - exports.ChannelzCallTrackerStub = ChannelzCallTrackerStub; - var entityMaps = { - ["channel"]: new ordered_map_1.OrderedMap, - ["subchannel"]: new ordered_map_1.OrderedMap, - ["server"]: new ordered_map_1.OrderedMap, - ["socket"]: new ordered_map_1.OrderedMap - }; - var generateRegisterFn = (kind) => { - let nextId = 1; - function getNextId() { - return nextId++; - } - const entityMap = entityMaps[kind]; - return (name, getInfo, channelzEnabled) => { - const id = getNextId(); - const ref = { id, name, kind }; - if (channelzEnabled) { - entityMap.setElement(id, { ref, getInfo }); - } - return ref; - }; - }; - exports.registerChannelzChannel = generateRegisterFn("channel"); - exports.registerChannelzSubchannel = generateRegisterFn("subchannel"); - exports.registerChannelzServer = generateRegisterFn("server"); - exports.registerChannelzSocket = generateRegisterFn("socket"); - function unregisterChannelzRef(ref) { - entityMaps[ref.kind].eraseElementByKey(ref.id); - } - function parseIPv6Section(addressSection) { - const numberValue = Number.parseInt(addressSection, 16); - return [numberValue / 256 | 0, numberValue % 256]; - } - function parseIPv6Chunk(addressChunk) { - if (addressChunk === "") { - return []; - } - const bytePairs = addressChunk.split(":").map((section) => parseIPv6Section(section)); - const result = []; - return result.concat(...bytePairs); - } - function isIPv6MappedIPv4(ipAddress) { - return (0, net_1.isIPv6)(ipAddress) && ipAddress.toLowerCase().startsWith("::ffff:") && (0, net_1.isIPv4)(ipAddress.substring(7)); - } - function ipv4AddressStringToBuffer(ipAddress) { - return Buffer.from(Uint8Array.from(ipAddress.split(".").map((segment) => Number.parseInt(segment)))); - } - function ipAddressStringToBuffer(ipAddress) { - if ((0, net_1.isIPv4)(ipAddress)) { - return ipv4AddressStringToBuffer(ipAddress); - } else if (isIPv6MappedIPv4(ipAddress)) { - return ipv4AddressStringToBuffer(ipAddress.substring(7)); - } else if ((0, net_1.isIPv6)(ipAddress)) { - let leftSection; - let rightSection; - const doubleColonIndex = ipAddress.indexOf("::"); - if (doubleColonIndex === -1) { - leftSection = ipAddress; - rightSection = ""; - } else { - leftSection = ipAddress.substring(0, doubleColonIndex); - rightSection = ipAddress.substring(doubleColonIndex + 2); - } - const leftBuffer = Buffer.from(parseIPv6Chunk(leftSection)); - const rightBuffer = Buffer.from(parseIPv6Chunk(rightSection)); - const middleBuffer = Buffer.alloc(16 - leftBuffer.length - rightBuffer.length, 0); - return Buffer.concat([leftBuffer, middleBuffer, rightBuffer]); - } else { - return null; - } - } - function connectivityStateToMessage(state) { - switch (state) { - case connectivity_state_1.ConnectivityState.CONNECTING: - return { - state: "CONNECTING" - }; - case connectivity_state_1.ConnectivityState.IDLE: - return { - state: "IDLE" - }; - case connectivity_state_1.ConnectivityState.READY: - return { - state: "READY" - }; - case connectivity_state_1.ConnectivityState.SHUTDOWN: - return { - state: "SHUTDOWN" - }; - case connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE: - return { - state: "TRANSIENT_FAILURE" - }; - default: - return { - state: "UNKNOWN" - }; - } - } - function dateToProtoTimestamp(date5) { - if (!date5) { - return null; - } - const millisSinceEpoch = date5.getTime(); - return { - seconds: millisSinceEpoch / 1000 | 0, - nanos: millisSinceEpoch % 1000 * 1e6 - }; - } - function getChannelMessage(channelEntry) { - const resolvedInfo = channelEntry.getInfo(); - const channelRef = []; - const subchannelRef = []; - resolvedInfo.children.channels.forEach((el) => { - channelRef.push(channelRefToMessage(el[1].ref)); - }); - resolvedInfo.children.subchannels.forEach((el) => { - subchannelRef.push(subchannelRefToMessage(el[1].ref)); - }); - return { - ref: channelRefToMessage(channelEntry.ref), - data: { - target: resolvedInfo.target, - state: connectivityStateToMessage(resolvedInfo.state), - calls_started: resolvedInfo.callTracker.callsStarted, - calls_succeeded: resolvedInfo.callTracker.callsSucceeded, - calls_failed: resolvedInfo.callTracker.callsFailed, - last_call_started_timestamp: dateToProtoTimestamp(resolvedInfo.callTracker.lastCallStartedTimestamp), - trace: resolvedInfo.trace.getTraceMessage() - }, - channel_ref: channelRef, - subchannel_ref: subchannelRef - }; - } - function GetChannel(call, callback) { - const channelId = parseInt(call.request.channel_id, 10); - const channelEntry = entityMaps["channel"].getElementByKey(channelId); - if (channelEntry === undefined) { - callback({ - code: constants_1.Status.NOT_FOUND, - details: "No channel data found for id " + channelId - }); - return; - } - callback(null, { channel: getChannelMessage(channelEntry) }); - } - function GetTopChannels(call, callback) { - const maxResults = parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS; - const resultList = []; - const startId = parseInt(call.request.start_channel_id, 10); - const channelEntries = entityMaps["channel"]; - let i; - for (i = channelEntries.lowerBound(startId);!i.equals(channelEntries.end()) && resultList.length < maxResults; i = i.next()) { - resultList.push(getChannelMessage(i.pointer[1])); - } - callback(null, { - channel: resultList, - end: i.equals(channelEntries.end()) - }); - } - function getServerMessage(serverEntry) { - const resolvedInfo = serverEntry.getInfo(); - const listenSocket = []; - resolvedInfo.listenerChildren.sockets.forEach((el) => { - listenSocket.push(socketRefToMessage(el[1].ref)); - }); - return { - ref: serverRefToMessage(serverEntry.ref), - data: { - calls_started: resolvedInfo.callTracker.callsStarted, - calls_succeeded: resolvedInfo.callTracker.callsSucceeded, - calls_failed: resolvedInfo.callTracker.callsFailed, - last_call_started_timestamp: dateToProtoTimestamp(resolvedInfo.callTracker.lastCallStartedTimestamp), - trace: resolvedInfo.trace.getTraceMessage() - }, - listen_socket: listenSocket - }; - } - function GetServer(call, callback) { - const serverId = parseInt(call.request.server_id, 10); - const serverEntries = entityMaps["server"]; - const serverEntry = serverEntries.getElementByKey(serverId); - if (serverEntry === undefined) { - callback({ - code: constants_1.Status.NOT_FOUND, - details: "No server data found for id " + serverId - }); - return; - } - callback(null, { server: getServerMessage(serverEntry) }); - } - function GetServers(call, callback) { - const maxResults = parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS; - const startId = parseInt(call.request.start_server_id, 10); - const serverEntries = entityMaps["server"]; - const resultList = []; - let i; - for (i = serverEntries.lowerBound(startId);!i.equals(serverEntries.end()) && resultList.length < maxResults; i = i.next()) { - resultList.push(getServerMessage(i.pointer[1])); - } - callback(null, { - server: resultList, - end: i.equals(serverEntries.end()) - }); - } - function GetSubchannel(call, callback) { - const subchannelId = parseInt(call.request.subchannel_id, 10); - const subchannelEntry = entityMaps["subchannel"].getElementByKey(subchannelId); - if (subchannelEntry === undefined) { - callback({ - code: constants_1.Status.NOT_FOUND, - details: "No subchannel data found for id " + subchannelId - }); - return; - } - const resolvedInfo = subchannelEntry.getInfo(); - const listenSocket = []; - resolvedInfo.children.sockets.forEach((el) => { - listenSocket.push(socketRefToMessage(el[1].ref)); - }); - const subchannelMessage = { - ref: subchannelRefToMessage(subchannelEntry.ref), - data: { - target: resolvedInfo.target, - state: connectivityStateToMessage(resolvedInfo.state), - calls_started: resolvedInfo.callTracker.callsStarted, - calls_succeeded: resolvedInfo.callTracker.callsSucceeded, - calls_failed: resolvedInfo.callTracker.callsFailed, - last_call_started_timestamp: dateToProtoTimestamp(resolvedInfo.callTracker.lastCallStartedTimestamp), - trace: resolvedInfo.trace.getTraceMessage() - }, - socket_ref: listenSocket - }; - callback(null, { subchannel: subchannelMessage }); - } - function subchannelAddressToAddressMessage(subchannelAddress) { - var _a2; - if ((0, subchannel_address_1.isTcpSubchannelAddress)(subchannelAddress)) { - return { - address: "tcpip_address", - tcpip_address: { - ip_address: (_a2 = ipAddressStringToBuffer(subchannelAddress.host)) !== null && _a2 !== undefined ? _a2 : undefined, - port: subchannelAddress.port - } - }; - } else { - return { - address: "uds_address", - uds_address: { - filename: subchannelAddress.path - } - }; - } - } - function GetSocket(call, callback) { - var _a2, _b, _c, _d, _e; - const socketId = parseInt(call.request.socket_id, 10); - const socketEntry = entityMaps["socket"].getElementByKey(socketId); - if (socketEntry === undefined) { - callback({ - code: constants_1.Status.NOT_FOUND, - details: "No socket data found for id " + socketId - }); - return; - } - const resolvedInfo = socketEntry.getInfo(); - const securityMessage = resolvedInfo.security ? { - model: "tls", - tls: { - cipher_suite: resolvedInfo.security.cipherSuiteStandardName ? "standard_name" : "other_name", - standard_name: (_a2 = resolvedInfo.security.cipherSuiteStandardName) !== null && _a2 !== undefined ? _a2 : undefined, - other_name: (_b = resolvedInfo.security.cipherSuiteOtherName) !== null && _b !== undefined ? _b : undefined, - local_certificate: (_c = resolvedInfo.security.localCertificate) !== null && _c !== undefined ? _c : undefined, - remote_certificate: (_d = resolvedInfo.security.remoteCertificate) !== null && _d !== undefined ? _d : undefined - } - } : null; - const socketMessage = { - ref: socketRefToMessage(socketEntry.ref), - local: resolvedInfo.localAddress ? subchannelAddressToAddressMessage(resolvedInfo.localAddress) : null, - remote: resolvedInfo.remoteAddress ? subchannelAddressToAddressMessage(resolvedInfo.remoteAddress) : null, - remote_name: (_e = resolvedInfo.remoteName) !== null && _e !== undefined ? _e : undefined, - security: securityMessage, - data: { - keep_alives_sent: resolvedInfo.keepAlivesSent, - streams_started: resolvedInfo.streamsStarted, - streams_succeeded: resolvedInfo.streamsSucceeded, - streams_failed: resolvedInfo.streamsFailed, - last_local_stream_created_timestamp: dateToProtoTimestamp(resolvedInfo.lastLocalStreamCreatedTimestamp), - last_remote_stream_created_timestamp: dateToProtoTimestamp(resolvedInfo.lastRemoteStreamCreatedTimestamp), - messages_received: resolvedInfo.messagesReceived, - messages_sent: resolvedInfo.messagesSent, - last_message_received_timestamp: dateToProtoTimestamp(resolvedInfo.lastMessageReceivedTimestamp), - last_message_sent_timestamp: dateToProtoTimestamp(resolvedInfo.lastMessageSentTimestamp), - local_flow_control_window: resolvedInfo.localFlowControlWindow ? { value: resolvedInfo.localFlowControlWindow } : null, - remote_flow_control_window: resolvedInfo.remoteFlowControlWindow ? { value: resolvedInfo.remoteFlowControlWindow } : null - } - }; - callback(null, { socket: socketMessage }); - } - function GetServerSockets(call, callback) { - const serverId = parseInt(call.request.server_id, 10); - const serverEntry = entityMaps["server"].getElementByKey(serverId); - if (serverEntry === undefined) { - callback({ - code: constants_1.Status.NOT_FOUND, - details: "No server data found for id " + serverId - }); - return; - } - const startId = parseInt(call.request.start_socket_id, 10); - const maxResults = parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS; - const resolvedInfo = serverEntry.getInfo(); - const allSockets = resolvedInfo.sessionChildren.sockets; - const resultList = []; - let i; - for (i = allSockets.lowerBound(startId);!i.equals(allSockets.end()) && resultList.length < maxResults; i = i.next()) { - resultList.push(socketRefToMessage(i.pointer[1].ref)); - } - callback(null, { - socket_ref: resultList, - end: i.equals(allSockets.end()) - }); - } - function getChannelzHandlers() { - return { - GetChannel, - GetTopChannels, - GetServer, - GetServers, - GetSubchannel, - GetSocket, - GetServerSockets - }; - } - var loadedChannelzDefinition = null; - function getChannelzServiceDefinition() { - if (loadedChannelzDefinition) { - return loadedChannelzDefinition; - } - const loaderLoadSync = require_src75().loadSync; - const loadedProto = loaderLoadSync("channelz.proto", { - keepCase: true, - longs: String, - enums: String, - defaults: true, - oneofs: true, - includeDirs: [`${__dirname}/../../proto`] - }); - const channelzGrpcObject = (0, make_client_1.loadPackageDefinition)(loadedProto); - loadedChannelzDefinition = channelzGrpcObject.grpc.channelz.v1.Channelz.service; - return loadedChannelzDefinition; - } - function setup() { - (0, admin_1.registerAdminService)(getChannelzServiceDefinition, getChannelzHandlers); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/call-number.js -var require_call_number = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getNextCallNumber = getNextCallNumber; - var nextCallNumber = 0; - function getNextCallNumber() { - return nextCallNumber++; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/compression-algorithms.js -var require_compression_algorithms = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompressionAlgorithms = undefined; - var CompressionAlgorithms; - (function(CompressionAlgorithms2) { - CompressionAlgorithms2[CompressionAlgorithms2["identity"] = 0] = "identity"; - CompressionAlgorithms2[CompressionAlgorithms2["deflate"] = 1] = "deflate"; - CompressionAlgorithms2[CompressionAlgorithms2["gzip"] = 2] = "gzip"; - })(CompressionAlgorithms || (exports.CompressionAlgorithms = CompressionAlgorithms = {})); -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/filter.js -var require_filter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseFilter = undefined; - - class BaseFilter { - async sendMetadata(metadata) { - return metadata; - } - receiveMetadata(metadata) { - return metadata; - } - async sendMessage(message) { - return message; - } - async receiveMessage(message) { - return message; - } - receiveTrailers(status) { - return status; - } - } - exports.BaseFilter = BaseFilter; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/compression-filter.js -var require_compression_filter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompressionFilterFactory = exports.CompressionFilter = undefined; - var zlib = __require("zlib"); - var compression_algorithms_1 = require_compression_algorithms(); - var constants_1 = require_constants9(); - var filter_1 = require_filter(); - var logging = require_logging(); - var isCompressionAlgorithmKey = (key) => { - return typeof key === "number" && typeof compression_algorithms_1.CompressionAlgorithms[key] === "string"; - }; - - class CompressionHandler { - async writeMessage(message, compress2) { - let messageBuffer = message; - if (compress2) { - messageBuffer = await this.compressMessage(messageBuffer); - } - const output = Buffer.allocUnsafe(messageBuffer.length + 5); - output.writeUInt8(compress2 ? 1 : 0, 0); - output.writeUInt32BE(messageBuffer.length, 1); - messageBuffer.copy(output, 5); - return output; - } - async readMessage(data) { - const compressed = data.readUInt8(0) === 1; - let messageBuffer = data.slice(5); - if (compressed) { - messageBuffer = await this.decompressMessage(messageBuffer); - } - return messageBuffer; - } - } - - class IdentityHandler extends CompressionHandler { - async compressMessage(message) { - return message; - } - async writeMessage(message, compress2) { - const output = Buffer.allocUnsafe(message.length + 5); - output.writeUInt8(0, 0); - output.writeUInt32BE(message.length, 1); - message.copy(output, 5); - return output; - } - decompressMessage(message) { - return Promise.reject(new Error('Received compressed message but "grpc-encoding" header was identity')); - } - } - - class DeflateHandler extends CompressionHandler { - constructor(maxRecvMessageLength) { - super(); - this.maxRecvMessageLength = maxRecvMessageLength; - } - compressMessage(message) { - return new Promise((resolve2, reject) => { - zlib.deflate(message, (err, output) => { - if (err) { - reject(err); - } else { - resolve2(output); - } - }); - }); - } - decompressMessage(message) { - return new Promise((resolve2, reject) => { - let totalLength = 0; - const messageParts = []; - const decompresser = zlib.createInflate(); - decompresser.on("data", (chunk) => { - messageParts.push(chunk); - totalLength += chunk.byteLength; - if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) { - decompresser.destroy(); - reject({ - code: constants_1.Status.RESOURCE_EXHAUSTED, - details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}` - }); - } - }); - decompresser.on("end", () => { - resolve2(Buffer.concat(messageParts)); - }); - decompresser.write(message); - decompresser.end(); - }); - } - } - - class GzipHandler extends CompressionHandler { - constructor(maxRecvMessageLength) { - super(); - this.maxRecvMessageLength = maxRecvMessageLength; - } - compressMessage(message) { - return new Promise((resolve2, reject) => { - zlib.gzip(message, (err, output) => { - if (err) { - reject(err); - } else { - resolve2(output); - } - }); - }); - } - decompressMessage(message) { - return new Promise((resolve2, reject) => { - let totalLength = 0; - const messageParts = []; - const decompresser = zlib.createGunzip(); - decompresser.on("data", (chunk) => { - messageParts.push(chunk); - totalLength += chunk.byteLength; - if (this.maxRecvMessageLength !== -1 && totalLength > this.maxRecvMessageLength) { - decompresser.destroy(); - reject({ - code: constants_1.Status.RESOURCE_EXHAUSTED, - details: `Received message that decompresses to a size larger than ${this.maxRecvMessageLength}` - }); - } - }); - decompresser.on("end", () => { - resolve2(Buffer.concat(messageParts)); - }); - decompresser.write(message); - decompresser.end(); - }); - } - } - - class UnknownHandler extends CompressionHandler { - constructor(compressionName) { - super(); - this.compressionName = compressionName; - } - compressMessage(message) { - return Promise.reject(new Error(`Received message compressed with unsupported compression method ${this.compressionName}`)); - } - decompressMessage(message) { - return Promise.reject(new Error(`Compression method not supported: ${this.compressionName}`)); - } - } - function getCompressionHandler(compressionName, maxReceiveMessageSize) { - switch (compressionName) { - case "identity": - return new IdentityHandler; - case "deflate": - return new DeflateHandler(maxReceiveMessageSize); - case "gzip": - return new GzipHandler(maxReceiveMessageSize); - default: - return new UnknownHandler(compressionName); - } - } - - class CompressionFilter extends filter_1.BaseFilter { - constructor(channelOptions, sharedFilterConfig) { - var _a2, _b, _c; - super(); - this.sharedFilterConfig = sharedFilterConfig; - this.sendCompression = new IdentityHandler; - this.receiveCompression = new IdentityHandler; - this.currentCompressionAlgorithm = "identity"; - const compressionAlgorithmKey = channelOptions["grpc.default_compression_algorithm"]; - this.maxReceiveMessageLength = (_a2 = channelOptions["grpc.max_receive_message_length"]) !== null && _a2 !== undefined ? _a2 : constants_1.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH; - this.maxSendMessageLength = (_b = channelOptions["grpc.max_send_message_length"]) !== null && _b !== undefined ? _b : constants_1.DEFAULT_MAX_SEND_MESSAGE_LENGTH; - if (compressionAlgorithmKey !== undefined) { - if (isCompressionAlgorithmKey(compressionAlgorithmKey)) { - const clientSelectedEncoding = compression_algorithms_1.CompressionAlgorithms[compressionAlgorithmKey]; - const serverSupportedEncodings = (_c = sharedFilterConfig.serverSupportedEncodingHeader) === null || _c === undefined ? undefined : _c.split(","); - if (!serverSupportedEncodings || serverSupportedEncodings.includes(clientSelectedEncoding)) { - this.currentCompressionAlgorithm = clientSelectedEncoding; - this.sendCompression = getCompressionHandler(this.currentCompressionAlgorithm, -1); - } - } else { - logging.log(constants_1.LogVerbosity.ERROR, `Invalid value provided for grpc.default_compression_algorithm option: ${compressionAlgorithmKey}`); - } - } - } - async sendMetadata(metadata) { - const headers = await metadata; - headers.set("grpc-accept-encoding", "identity,deflate,gzip"); - headers.set("accept-encoding", "identity"); - if (this.currentCompressionAlgorithm === "identity") { - headers.remove("grpc-encoding"); - } else { - headers.set("grpc-encoding", this.currentCompressionAlgorithm); - } - return headers; - } - receiveMetadata(metadata) { - const receiveEncoding = metadata.get("grpc-encoding"); - if (receiveEncoding.length > 0) { - const encoding = receiveEncoding[0]; - if (typeof encoding === "string") { - this.receiveCompression = getCompressionHandler(encoding, this.maxReceiveMessageLength); - } - } - metadata.remove("grpc-encoding"); - const serverSupportedEncodingsHeader = metadata.get("grpc-accept-encoding")[0]; - if (serverSupportedEncodingsHeader) { - this.sharedFilterConfig.serverSupportedEncodingHeader = serverSupportedEncodingsHeader; - const serverSupportedEncodings = serverSupportedEncodingsHeader.split(","); - if (!serverSupportedEncodings.includes(this.currentCompressionAlgorithm)) { - this.sendCompression = new IdentityHandler; - this.currentCompressionAlgorithm = "identity"; - } - } - metadata.remove("grpc-accept-encoding"); - return metadata; - } - async sendMessage(message) { - var _a2; - const resolvedMessage = await message; - if (this.maxSendMessageLength !== -1 && resolvedMessage.message.length > this.maxSendMessageLength) { - throw { - code: constants_1.Status.RESOURCE_EXHAUSTED, - details: `Attempted to send message with a size larger than ${this.maxSendMessageLength}` - }; - } - let compress2; - if (this.sendCompression instanceof IdentityHandler) { - compress2 = false; - } else { - compress2 = (((_a2 = resolvedMessage.flags) !== null && _a2 !== undefined ? _a2 : 0) & 2) === 0; - } - return { - message: await this.sendCompression.writeMessage(resolvedMessage.message, compress2), - flags: resolvedMessage.flags - }; - } - async receiveMessage(message) { - return this.receiveCompression.readMessage(await message); - } - } - exports.CompressionFilter = CompressionFilter; - - class CompressionFilterFactory { - constructor(channel, options) { - this.options = options; - this.sharedFilterConfig = {}; - } - createFilter() { - return new CompressionFilter(this.options, this.sharedFilterConfig); - } - } - exports.CompressionFilterFactory = CompressionFilterFactory; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/control-plane-status.js -var require_control_plane_status = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.restrictControlPlaneStatusCode = restrictControlPlaneStatusCode; - var constants_1 = require_constants9(); - var INAPPROPRIATE_CONTROL_PLANE_CODES = [ - constants_1.Status.OK, - constants_1.Status.INVALID_ARGUMENT, - constants_1.Status.NOT_FOUND, - constants_1.Status.ALREADY_EXISTS, - constants_1.Status.FAILED_PRECONDITION, - constants_1.Status.ABORTED, - constants_1.Status.OUT_OF_RANGE, - constants_1.Status.DATA_LOSS - ]; - function restrictControlPlaneStatusCode(code, details) { - if (INAPPROPRIATE_CONTROL_PLANE_CODES.includes(code)) { - return { - code: constants_1.Status.INTERNAL, - details: `Invalid status from control plane: ${code} ${constants_1.Status[code]} ${details}` - }; - } else { - return { code, details }; - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/deadline.js -var require_deadline = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.minDeadline = minDeadline; - exports.getDeadlineTimeoutString = getDeadlineTimeoutString; - exports.getRelativeTimeout = getRelativeTimeout; - exports.deadlineToString = deadlineToString; - exports.formatDateDifference = formatDateDifference; - function minDeadline(...deadlineList) { - let minValue = Infinity; - for (const deadline of deadlineList) { - const deadlineMsecs = deadline instanceof Date ? deadline.getTime() : deadline; - if (deadlineMsecs < minValue) { - minValue = deadlineMsecs; - } - } - return minValue; - } - var units = [ - ["m", 1], - ["S", 1000], - ["M", 60 * 1000], - ["H", 60 * 60 * 1000] - ]; - function getDeadlineTimeoutString(deadline) { - const now2 = new Date().getTime(); - if (deadline instanceof Date) { - deadline = deadline.getTime(); - } - const timeoutMs = Math.max(deadline - now2, 0); - for (const [unit, factor] of units) { - const amount = timeoutMs / factor; - if (amount < 1e8) { - return String(Math.ceil(amount)) + unit; - } - } - throw new Error("Deadline is too far in the future"); - } - var MAX_TIMEOUT_TIME = 2147483647; - function getRelativeTimeout(deadline) { - const deadlineMs = deadline instanceof Date ? deadline.getTime() : deadline; - const now2 = new Date().getTime(); - const timeout = deadlineMs - now2; - if (timeout < 0) { - return 0; - } else if (timeout > MAX_TIMEOUT_TIME) { - return Infinity; - } else { - return timeout; - } - } - function deadlineToString(deadline) { - if (deadline instanceof Date) { - return deadline.toISOString(); - } else { - const dateDeadline = new Date(deadline); - if (Number.isNaN(dateDeadline.getTime())) { - return "" + deadline; - } else { - return dateDeadline.toISOString(); - } - } - } - function formatDateDifference(startDate, endDate) { - return ((endDate.getTime() - startDate.getTime()) / 1000).toFixed(3) + "s"; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/filter-stack.js -var require_filter_stack = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FilterStackFactory = exports.FilterStack = undefined; - - class FilterStack { - constructor(filters) { - this.filters = filters; - } - sendMetadata(metadata) { - let result = metadata; - for (let i = 0;i < this.filters.length; i++) { - result = this.filters[i].sendMetadata(result); - } - return result; - } - receiveMetadata(metadata) { - let result = metadata; - for (let i = this.filters.length - 1;i >= 0; i--) { - result = this.filters[i].receiveMetadata(result); - } - return result; - } - sendMessage(message) { - let result = message; - for (let i = 0;i < this.filters.length; i++) { - result = this.filters[i].sendMessage(result); - } - return result; - } - receiveMessage(message) { - let result = message; - for (let i = this.filters.length - 1;i >= 0; i--) { - result = this.filters[i].receiveMessage(result); - } - return result; - } - receiveTrailers(status) { - let result = status; - for (let i = this.filters.length - 1;i >= 0; i--) { - result = this.filters[i].receiveTrailers(result); - } - return result; - } - push(filters) { - this.filters.unshift(...filters); - } - getFilters() { - return this.filters; - } - } - exports.FilterStack = FilterStack; - - class FilterStackFactory { - constructor(factories) { - this.factories = factories; - } - push(filterFactories) { - this.factories.unshift(...filterFactories); - } - clone() { - return new FilterStackFactory([...this.factories]); - } - createFilter() { - return new FilterStack(this.factories.map((factory) => factory.createFilter())); - } - } - exports.FilterStackFactory = FilterStackFactory; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/single-subchannel-channel.js -var require_single_subchannel_channel = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SingleSubchannelChannel = undefined; - var call_number_1 = require_call_number(); - var channelz_1 = require_channelz(); - var compression_filter_1 = require_compression_filter(); - var connectivity_state_1 = require_connectivity_state(); - var constants_1 = require_constants9(); - var control_plane_status_1 = require_control_plane_status(); - var deadline_1 = require_deadline(); - var filter_stack_1 = require_filter_stack(); - var metadata_1 = require_metadata(); - var resolver_1 = require_resolver(); - var uri_parser_1 = require_uri_parser(); - - class SubchannelCallWrapper { - constructor(subchannel, method, filterStackFactory, options, callNumber) { - var _a2, _b; - this.subchannel = subchannel; - this.method = method; - this.options = options; - this.callNumber = callNumber; - this.childCall = null; - this.pendingMessage = null; - this.readPending = false; - this.halfClosePending = false; - this.pendingStatus = null; - this.readFilterPending = false; - this.writeFilterPending = false; - const splitPath2 = this.method.split("/"); - let serviceName = ""; - if (splitPath2.length >= 2) { - serviceName = splitPath2[1]; - } - const hostname3 = (_b = (_a2 = (0, uri_parser_1.splitHostPort)(this.options.host)) === null || _a2 === undefined ? undefined : _a2.host) !== null && _b !== undefined ? _b : "localhost"; - this.serviceUrl = `https://${hostname3}/${serviceName}`; - const timeout = (0, deadline_1.getRelativeTimeout)(options.deadline); - if (timeout !== Infinity) { - if (timeout <= 0) { - this.cancelWithStatus(constants_1.Status.DEADLINE_EXCEEDED, "Deadline exceeded"); - } else { - setTimeout(() => { - this.cancelWithStatus(constants_1.Status.DEADLINE_EXCEEDED, "Deadline exceeded"); - }, timeout); - } - } - this.filterStack = filterStackFactory.createFilter(); - } - cancelWithStatus(status, details) { - if (this.childCall) { - this.childCall.cancelWithStatus(status, details); - } else { - this.pendingStatus = { - code: status, - details, - metadata: new metadata_1.Metadata - }; - } - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.childCall) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : this.subchannel.getAddress(); - } - async start(metadata, listener) { - if (this.pendingStatus) { - listener.onReceiveStatus(this.pendingStatus); - return; - } - if (this.subchannel.getConnectivityState() !== connectivity_state_1.ConnectivityState.READY) { - listener.onReceiveStatus({ - code: constants_1.Status.UNAVAILABLE, - details: "Subchannel not ready", - metadata: new metadata_1.Metadata - }); - return; - } - const filteredMetadata = await this.filterStack.sendMetadata(Promise.resolve(metadata)); - let credsMetadata; - try { - credsMetadata = await this.subchannel.getCallCredentials().generateMetadata({ method_name: this.method, service_url: this.serviceUrl }); - } catch (e) { - const error48 = e; - const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(typeof error48.code === "number" ? error48.code : constants_1.Status.UNKNOWN, `Getting metadata from plugin failed with error: ${error48.message}`); - listener.onReceiveStatus({ - code, - details, - metadata: new metadata_1.Metadata - }); - return; - } - credsMetadata.merge(filteredMetadata); - const childListener = { - onReceiveMetadata: async (metadata2) => { - listener.onReceiveMetadata(await this.filterStack.receiveMetadata(metadata2)); - }, - onReceiveMessage: async (message) => { - this.readFilterPending = true; - const filteredMessage = await this.filterStack.receiveMessage(message); - this.readFilterPending = false; - listener.onReceiveMessage(filteredMessage); - if (this.pendingStatus) { - listener.onReceiveStatus(this.pendingStatus); - } - }, - onReceiveStatus: async (status) => { - const filteredStatus = await this.filterStack.receiveTrailers(status); - if (this.readFilterPending) { - this.pendingStatus = filteredStatus; - } else { - listener.onReceiveStatus(filteredStatus); - } - } - }; - this.childCall = this.subchannel.createCall(credsMetadata, this.options.host, this.method, childListener); - if (this.readPending) { - this.childCall.startRead(); - } - if (this.pendingMessage) { - this.childCall.sendMessageWithContext(this.pendingMessage.context, this.pendingMessage.message); - } - if (this.halfClosePending && !this.writeFilterPending) { - this.childCall.halfClose(); - } - } - async sendMessageWithContext(context8, message) { - this.writeFilterPending = true; - const filteredMessage = await this.filterStack.sendMessage(Promise.resolve({ message, flags: context8.flags })); - this.writeFilterPending = false; - if (this.childCall) { - this.childCall.sendMessageWithContext(context8, filteredMessage.message); - if (this.halfClosePending) { - this.childCall.halfClose(); - } - } else { - this.pendingMessage = { context: context8, message: filteredMessage.message }; - } - } - startRead() { - if (this.childCall) { - this.childCall.startRead(); - } else { - this.readPending = true; - } - } - halfClose() { - if (this.childCall && !this.writeFilterPending) { - this.childCall.halfClose(); - } else { - this.halfClosePending = true; - } - } - getCallNumber() { - return this.callNumber; - } - setCredentials(credentials) { - throw new Error("Method not implemented."); - } - getAuthContext() { - if (this.childCall) { - return this.childCall.getAuthContext(); - } else { - return null; - } - } - } - - class SingleSubchannelChannel { - constructor(subchannel, target, options) { - this.subchannel = subchannel; - this.target = target; - this.channelzEnabled = false; - this.channelzTrace = new channelz_1.ChannelzTrace; - this.callTracker = new channelz_1.ChannelzCallTracker; - this.childrenTracker = new channelz_1.ChannelzChildrenTracker; - this.channelzEnabled = options["grpc.enable_channelz"] !== 0; - this.channelzRef = (0, channelz_1.registerChannelzChannel)((0, uri_parser_1.uriToString)(target), () => ({ - target: `${(0, uri_parser_1.uriToString)(target)} (${subchannel.getAddress()})`, - state: this.subchannel.getConnectivityState(), - trace: this.channelzTrace, - callTracker: this.callTracker, - children: this.childrenTracker.getChildLists() - }), this.channelzEnabled); - if (this.channelzEnabled) { - this.childrenTracker.refChild(subchannel.getChannelzRef()); - } - this.filterStackFactory = new filter_stack_1.FilterStackFactory([new compression_filter_1.CompressionFilterFactory(this, options)]); - } - close() { - if (this.channelzEnabled) { - this.childrenTracker.unrefChild(this.subchannel.getChannelzRef()); - } - (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - } - getTarget() { - return (0, uri_parser_1.uriToString)(this.target); - } - getConnectivityState(tryToConnect) { - throw new Error("Method not implemented."); - } - watchConnectivityState(currentState, deadline, callback) { - throw new Error("Method not implemented."); - } - getChannelzRef() { - return this.channelzRef; - } - createCall(method, deadline) { - const callOptions = { - deadline, - host: (0, resolver_1.getDefaultAuthority)(this.target), - flags: constants_1.Propagate.DEFAULTS, - parentCall: null - }; - return new SubchannelCallWrapper(this.subchannel, method, this.filterStackFactory, callOptions, (0, call_number_1.getNextCallNumber)()); - } - } - exports.SingleSubchannelChannel = SingleSubchannelChannel; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/subchannel.js -var require_subchannel = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Subchannel = undefined; - var connectivity_state_1 = require_connectivity_state(); - var backoff_timeout_1 = require_backoff_timeout(); - var logging = require_logging(); - var constants_1 = require_constants9(); - var uri_parser_1 = require_uri_parser(); - var subchannel_address_1 = require_subchannel_address(); - var channelz_1 = require_channelz(); - var single_subchannel_channel_1 = require_single_subchannel_channel(); - var TRACER_NAME2 = "subchannel"; - var KEEPALIVE_MAX_TIME_MS = ~(1 << 31); - - class Subchannel { - constructor(channelTarget, subchannelAddress, options, credentials, connector) { - var _a2; - this.channelTarget = channelTarget; - this.subchannelAddress = subchannelAddress; - this.options = options; - this.connector = connector; - this.connectivityState = connectivity_state_1.ConnectivityState.IDLE; - this.transport = null; - this.continueConnecting = false; - this.stateListeners = new Set; - this.refcount = 0; - this.channelzEnabled = true; - this.dataProducers = new Map; - this.subchannelChannel = null; - const backoffOptions = { - initialDelay: options["grpc.initial_reconnect_backoff_ms"], - maxDelay: options["grpc.max_reconnect_backoff_ms"] - }; - this.backoffTimeout = new backoff_timeout_1.BackoffTimeout(() => { - this.handleBackoffTimer(); - }, backoffOptions); - this.backoffTimeout.unref(); - this.subchannelAddressString = (0, subchannel_address_1.subchannelAddressToString)(subchannelAddress); - this.keepaliveTime = (_a2 = options["grpc.keepalive_time_ms"]) !== null && _a2 !== undefined ? _a2 : -1; - if (options["grpc.enable_channelz"] === 0) { - this.channelzEnabled = false; - this.channelzTrace = new channelz_1.ChannelzTraceStub; - this.callTracker = new channelz_1.ChannelzCallTrackerStub; - this.childrenTracker = new channelz_1.ChannelzChildrenTrackerStub; - this.streamTracker = new channelz_1.ChannelzCallTrackerStub; - } else { - this.channelzTrace = new channelz_1.ChannelzTrace; - this.callTracker = new channelz_1.ChannelzCallTracker; - this.childrenTracker = new channelz_1.ChannelzChildrenTracker; - this.streamTracker = new channelz_1.ChannelzCallTracker; - } - this.channelzRef = (0, channelz_1.registerChannelzSubchannel)(this.subchannelAddressString, () => this.getChannelzInfo(), this.channelzEnabled); - this.channelzTrace.addTrace("CT_INFO", "Subchannel created"); - this.trace("Subchannel constructed with options " + JSON.stringify(options, undefined, 2)); - this.secureConnector = credentials._createSecureConnector(channelTarget, options); - } - getChannelzInfo() { - return { - state: this.connectivityState, - trace: this.channelzTrace, - callTracker: this.callTracker, - children: this.childrenTracker.getChildLists(), - target: this.subchannelAddressString - }; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "(" + this.channelzRef.id + ") " + this.subchannelAddressString + " " + text); - } - refTrace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, "subchannel_refcount", "(" + this.channelzRef.id + ") " + this.subchannelAddressString + " " + text); - } - handleBackoffTimer() { - if (this.continueConnecting) { - this.transitionToState([connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE], connectivity_state_1.ConnectivityState.CONNECTING); - } else { - this.transitionToState([connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE], connectivity_state_1.ConnectivityState.IDLE); - } - } - startBackoff() { - this.backoffTimeout.runOnce(); - } - stopBackoff() { - this.backoffTimeout.stop(); - this.backoffTimeout.reset(); - } - startConnectingInternal() { - let options = this.options; - if (options["grpc.keepalive_time_ms"]) { - const adjustedKeepaliveTime = Math.min(this.keepaliveTime, KEEPALIVE_MAX_TIME_MS); - options = Object.assign(Object.assign({}, options), { "grpc.keepalive_time_ms": adjustedKeepaliveTime }); - } - this.connector.connect(this.subchannelAddress, this.secureConnector, options).then((transport) => { - if (this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING], connectivity_state_1.ConnectivityState.READY)) { - this.transport = transport; - if (this.channelzEnabled) { - this.childrenTracker.refChild(transport.getChannelzRef()); - } - transport.addDisconnectListener((tooManyPings) => { - this.transitionToState([connectivity_state_1.ConnectivityState.READY], connectivity_state_1.ConnectivityState.IDLE); - if (tooManyPings && this.keepaliveTime > 0) { - this.keepaliveTime *= 2; - logging.log(constants_1.LogVerbosity.ERROR, `Connection to ${(0, uri_parser_1.uriToString)(this.channelTarget)} at ${this.subchannelAddressString} rejected by server because of excess pings. Increasing ping interval to ${this.keepaliveTime} ms`); - } - }); - } else { - transport.shutdown(); - } - }, (error48) => { - this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING], connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, `${error48}`); - }); - } - transitionToState(oldStates, newState, errorMessage) { - var _a2, _b; - if (oldStates.indexOf(this.connectivityState) === -1) { - return false; - } - if (errorMessage) { - this.trace(connectivity_state_1.ConnectivityState[this.connectivityState] + " -> " + connectivity_state_1.ConnectivityState[newState] + ' with error "' + errorMessage + '"'); - } else { - this.trace(connectivity_state_1.ConnectivityState[this.connectivityState] + " -> " + connectivity_state_1.ConnectivityState[newState]); - } - if (this.channelzEnabled) { - this.channelzTrace.addTrace("CT_INFO", "Connectivity state change to " + connectivity_state_1.ConnectivityState[newState]); - } - const previousState = this.connectivityState; - this.connectivityState = newState; - switch (newState) { - case connectivity_state_1.ConnectivityState.READY: - this.stopBackoff(); - break; - case connectivity_state_1.ConnectivityState.CONNECTING: - this.startBackoff(); - this.startConnectingInternal(); - this.continueConnecting = false; - break; - case connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE: - if (this.channelzEnabled && this.transport) { - this.childrenTracker.unrefChild(this.transport.getChannelzRef()); - } - (_a2 = this.transport) === null || _a2 === undefined || _a2.shutdown(); - this.transport = null; - if (!this.backoffTimeout.isRunning()) { - process.nextTick(() => { - this.handleBackoffTimer(); - }); - } - break; - case connectivity_state_1.ConnectivityState.IDLE: - if (this.channelzEnabled && this.transport) { - this.childrenTracker.unrefChild(this.transport.getChannelzRef()); - } - (_b = this.transport) === null || _b === undefined || _b.shutdown(); - this.transport = null; - break; - default: - throw new Error(`Invalid state: unknown ConnectivityState ${newState}`); - } - for (const listener of this.stateListeners) { - listener(this, previousState, newState, this.keepaliveTime, errorMessage); - } - return true; - } - ref() { - this.refTrace("refcount " + this.refcount + " -> " + (this.refcount + 1)); - this.refcount += 1; - } - unref() { - this.refTrace("refcount " + this.refcount + " -> " + (this.refcount - 1)); - this.refcount -= 1; - if (this.refcount === 0) { - this.channelzTrace.addTrace("CT_INFO", "Shutting down"); - (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - this.secureConnector.destroy(); - process.nextTick(() => { - this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING, connectivity_state_1.ConnectivityState.READY], connectivity_state_1.ConnectivityState.IDLE); - }); - } - } - unrefIfOneRef() { - if (this.refcount === 1) { - this.unref(); - return true; - } - return false; - } - createCall(metadata, host, method, listener) { - if (!this.transport) { - throw new Error("Cannot create call, subchannel not READY"); - } - let statsTracker; - if (this.channelzEnabled) { - this.callTracker.addCallStarted(); - this.streamTracker.addCallStarted(); - statsTracker = { - onCallEnd: (status) => { - if (status.code === constants_1.Status.OK) { - this.callTracker.addCallSucceeded(); - } else { - this.callTracker.addCallFailed(); - } - } - }; - } else { - statsTracker = {}; - } - return this.transport.createCall(metadata, host, method, listener, statsTracker); - } - startConnecting() { - process.nextTick(() => { - if (!this.transitionToState([connectivity_state_1.ConnectivityState.IDLE], connectivity_state_1.ConnectivityState.CONNECTING)) { - if (this.connectivityState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) { - this.continueConnecting = true; - } - } - }); - } - getConnectivityState() { - return this.connectivityState; - } - addConnectivityStateListener(listener) { - this.stateListeners.add(listener); - } - removeConnectivityStateListener(listener) { - this.stateListeners.delete(listener); - } - resetBackoff() { - process.nextTick(() => { - this.backoffTimeout.reset(); - this.transitionToState([connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE], connectivity_state_1.ConnectivityState.CONNECTING); - }); - } - getAddress() { - return this.subchannelAddressString; - } - getChannelzRef() { - return this.channelzRef; - } - isHealthy() { - return true; - } - addHealthStateWatcher(listener) {} - removeHealthStateWatcher(listener) {} - getRealSubchannel() { - return this; - } - realSubchannelEquals(other) { - return other.getRealSubchannel() === this; - } - throttleKeepalive(newKeepaliveTime) { - if (newKeepaliveTime > this.keepaliveTime) { - this.keepaliveTime = newKeepaliveTime; - } - } - getCallCredentials() { - return this.secureConnector.getCallCredentials(); - } - getChannel() { - if (!this.subchannelChannel) { - this.subchannelChannel = new single_subchannel_channel_1.SingleSubchannelChannel(this, this.channelTarget, this.options); - } - return this.subchannelChannel; - } - addDataWatcher(dataWatcher) { - throw new Error("Not implemented"); - } - getOrCreateDataProducer(name, createDataProducer) { - const existingProducer = this.dataProducers.get(name); - if (existingProducer) { - return existingProducer; - } - const newProducer = createDataProducer(this); - this.dataProducers.set(name, newProducer); - return newProducer; - } - removeDataProducer(name) { - this.dataProducers.delete(name); - } - } - exports.Subchannel = Subchannel; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/environment.js -var require_environment3 = __commonJS((exports) => { - var _a2; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GRPC_NODE_USE_ALTERNATIVE_RESOLVER = undefined; - exports.GRPC_NODE_USE_ALTERNATIVE_RESOLVER = ((_a2 = process.env.GRPC_NODE_USE_ALTERNATIVE_RESOLVER) !== null && _a2 !== undefined ? _a2 : "false") === "true"; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/resolver-dns.js -var require_resolver_dns = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_PORT = undefined; - exports.setup = setup; - var resolver_1 = require_resolver(); - var dns_1 = __require("dns"); - var service_config_1 = require_service_config(); - var constants_1 = require_constants9(); - var call_interface_1 = require_call_interface(); - var metadata_1 = require_metadata(); - var logging = require_logging(); - var constants_2 = require_constants9(); - var uri_parser_1 = require_uri_parser(); - var net_1 = __require("net"); - var backoff_timeout_1 = require_backoff_timeout(); - var environment_1 = require_environment3(); - var TRACER_NAME2 = "dns_resolver"; - function trace6(text) { - logging.trace(constants_2.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - exports.DEFAULT_PORT = 443; - var DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS = 30000; - - class DnsResolver { - constructor(target, listener, channelOptions) { - var _a2, _b, _c; - this.target = target; - this.listener = listener; - this.pendingLookupPromise = null; - this.pendingTxtPromise = null; - this.latestLookupResult = null; - this.latestServiceConfigResult = null; - this.continueResolving = false; - this.isNextResolutionTimerRunning = false; - this.isServiceConfigEnabled = true; - this.returnedIpResult = false; - this.alternativeResolver = new dns_1.promises.Resolver; - trace6("Resolver constructed for target " + (0, uri_parser_1.uriToString)(target)); - if (target.authority) { - this.alternativeResolver.setServers([target.authority]); - } - const hostPort = (0, uri_parser_1.splitHostPort)(target.path); - if (hostPort === null) { - this.ipResult = null; - this.dnsHostname = null; - this.port = null; - } else { - if ((0, net_1.isIPv4)(hostPort.host) || (0, net_1.isIPv6)(hostPort.host)) { - this.ipResult = [ - { - addresses: [ - { - host: hostPort.host, - port: (_a2 = hostPort.port) !== null && _a2 !== undefined ? _a2 : exports.DEFAULT_PORT - } - ] - } - ]; - this.dnsHostname = null; - this.port = null; - } else { - this.ipResult = null; - this.dnsHostname = hostPort.host; - this.port = (_b = hostPort.port) !== null && _b !== undefined ? _b : exports.DEFAULT_PORT; - } - } - this.percentage = Math.random() * 100; - if (channelOptions["grpc.service_config_disable_resolution"] === 1) { - this.isServiceConfigEnabled = false; - } - this.defaultResolutionError = { - code: constants_1.Status.UNAVAILABLE, - details: `Name resolution failed for target ${(0, uri_parser_1.uriToString)(this.target)}`, - metadata: new metadata_1.Metadata - }; - const backoffOptions = { - initialDelay: channelOptions["grpc.initial_reconnect_backoff_ms"], - maxDelay: channelOptions["grpc.max_reconnect_backoff_ms"] - }; - this.backoff = new backoff_timeout_1.BackoffTimeout(() => { - if (this.continueResolving) { - this.startResolutionWithBackoff(); - } - }, backoffOptions); - this.backoff.unref(); - this.minTimeBetweenResolutionsMs = (_c = channelOptions["grpc.dns_min_time_between_resolutions_ms"]) !== null && _c !== undefined ? _c : DEFAULT_MIN_TIME_BETWEEN_RESOLUTIONS_MS; - this.nextResolutionTimer = setTimeout(() => {}, 0); - clearTimeout(this.nextResolutionTimer); - } - startResolution() { - if (this.ipResult !== null) { - if (!this.returnedIpResult) { - trace6("Returning IP address for target " + (0, uri_parser_1.uriToString)(this.target)); - setImmediate(() => { - this.listener((0, call_interface_1.statusOrFromValue)(this.ipResult), {}, null, ""); - }); - this.returnedIpResult = true; - } - this.backoff.stop(); - this.backoff.reset(); - this.stopNextResolutionTimer(); - return; - } - if (this.dnsHostname === null) { - trace6("Failed to parse DNS address " + (0, uri_parser_1.uriToString)(this.target)); - setImmediate(() => { - this.listener((0, call_interface_1.statusOrFromError)({ - code: constants_1.Status.UNAVAILABLE, - details: `Failed to parse DNS address ${(0, uri_parser_1.uriToString)(this.target)}` - }), {}, null, ""); - }); - this.stopNextResolutionTimer(); - } else { - if (this.pendingLookupPromise !== null) { - return; - } - trace6("Looking up DNS hostname " + this.dnsHostname); - this.latestLookupResult = null; - const hostname3 = this.dnsHostname; - this.pendingLookupPromise = this.lookup(hostname3); - this.pendingLookupPromise.then((addressList) => { - if (this.pendingLookupPromise === null) { - return; - } - this.pendingLookupPromise = null; - this.latestLookupResult = (0, call_interface_1.statusOrFromValue)(addressList.map((address) => ({ - addresses: [address] - }))); - const allAddressesString = "[" + addressList.map((addr) => addr.host + ":" + addr.port).join(",") + "]"; - trace6("Resolved addresses for target " + (0, uri_parser_1.uriToString)(this.target) + ": " + allAddressesString); - const healthStatus = this.listener(this.latestLookupResult, {}, this.latestServiceConfigResult, ""); - this.handleHealthStatus(healthStatus); - }, (err) => { - if (this.pendingLookupPromise === null) { - return; - } - trace6("Resolution error for target " + (0, uri_parser_1.uriToString)(this.target) + ": " + err.message); - this.pendingLookupPromise = null; - this.stopNextResolutionTimer(); - this.listener((0, call_interface_1.statusOrFromError)(this.defaultResolutionError), {}, this.latestServiceConfigResult, ""); - }); - if (this.isServiceConfigEnabled && this.pendingTxtPromise === null) { - this.pendingTxtPromise = this.resolveTxt(hostname3); - this.pendingTxtPromise.then((txtRecord) => { - if (this.pendingTxtPromise === null) { - return; - } - this.pendingTxtPromise = null; - let serviceConfig; - try { - serviceConfig = (0, service_config_1.extractAndSelectServiceConfig)(txtRecord, this.percentage); - if (serviceConfig) { - this.latestServiceConfigResult = (0, call_interface_1.statusOrFromValue)(serviceConfig); - } else { - this.latestServiceConfigResult = null; - } - } catch (err) { - this.latestServiceConfigResult = (0, call_interface_1.statusOrFromError)({ - code: constants_1.Status.UNAVAILABLE, - details: `Parsing service config failed with error ${err.message}` - }); - } - if (this.latestLookupResult !== null) { - this.listener(this.latestLookupResult, {}, this.latestServiceConfigResult, ""); - } - }, (err) => {}); - } - } - } - handleHealthStatus(healthStatus) { - if (healthStatus) { - this.backoff.stop(); - this.backoff.reset(); - } else { - this.continueResolving = true; - } - } - async lookup(hostname3) { - if (environment_1.GRPC_NODE_USE_ALTERNATIVE_RESOLVER) { - trace6("Using alternative DNS resolver."); - const records = await Promise.allSettled([ - this.alternativeResolver.resolve4(hostname3), - this.alternativeResolver.resolve6(hostname3) - ]); - if (records.every((result) => result.status === "rejected")) { - throw new Error(records[0].reason); - } - return records.reduce((acc, result) => { - return result.status === "fulfilled" ? [...acc, ...result.value] : acc; - }, []).map((addr) => ({ - host: addr, - port: +this.port - })); - } - const addressList = await dns_1.promises.lookup(hostname3, { all: true }); - return addressList.map((addr) => ({ host: addr.address, port: +this.port })); - } - async resolveTxt(hostname3) { - if (environment_1.GRPC_NODE_USE_ALTERNATIVE_RESOLVER) { - trace6("Using alternative DNS resolver."); - return this.alternativeResolver.resolveTxt(hostname3); - } - return dns_1.promises.resolveTxt(hostname3); - } - startNextResolutionTimer() { - var _a2, _b; - clearTimeout(this.nextResolutionTimer); - this.nextResolutionTimer = setTimeout(() => { - this.stopNextResolutionTimer(); - if (this.continueResolving) { - this.startResolutionWithBackoff(); - } - }, this.minTimeBetweenResolutionsMs); - (_b = (_a2 = this.nextResolutionTimer).unref) === null || _b === undefined || _b.call(_a2); - this.isNextResolutionTimerRunning = true; - } - stopNextResolutionTimer() { - clearTimeout(this.nextResolutionTimer); - this.isNextResolutionTimerRunning = false; - } - startResolutionWithBackoff() { - if (this.pendingLookupPromise === null) { - this.continueResolving = false; - this.backoff.runOnce(); - this.startNextResolutionTimer(); - this.startResolution(); - } - } - updateResolution() { - if (this.pendingLookupPromise === null) { - if (this.isNextResolutionTimerRunning || this.backoff.isRunning()) { - if (this.isNextResolutionTimerRunning) { - trace6('resolution update delayed by "min time between resolutions" rate limit'); - } else { - trace6("resolution update delayed by backoff timer until " + this.backoff.getEndTime().toISOString()); - } - this.continueResolving = true; - } else { - this.startResolutionWithBackoff(); - } - } - } - destroy() { - this.continueResolving = false; - this.backoff.reset(); - this.backoff.stop(); - this.stopNextResolutionTimer(); - this.pendingLookupPromise = null; - this.pendingTxtPromise = null; - this.latestLookupResult = null; - this.latestServiceConfigResult = null; - this.returnedIpResult = false; - } - static getDefaultAuthority(target) { - return target.path; - } - } - function setup() { - (0, resolver_1.registerResolver)("dns", DnsResolver); - (0, resolver_1.registerDefaultScheme)("dns"); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/http_proxy.js -var require_http_proxy = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseCIDR = parseCIDR; - exports.mapProxyName = mapProxyName; - exports.getProxiedConnection = getProxiedConnection; - var logging_1 = require_logging(); - var constants_1 = require_constants9(); - var net_1 = __require("net"); - var http2 = __require("http"); - var logging = require_logging(); - var subchannel_address_1 = require_subchannel_address(); - var uri_parser_1 = require_uri_parser(); - var url_1 = __require("url"); - var resolver_dns_1 = require_resolver_dns(); - var TRACER_NAME2 = "proxy"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - function getProxyInfo() { - let proxyEnv = ""; - let envVar = ""; - if (process.env.grpc_proxy) { - envVar = "grpc_proxy"; - proxyEnv = process.env.grpc_proxy; - } else if (process.env.https_proxy) { - envVar = "https_proxy"; - proxyEnv = process.env.https_proxy; - } else if (process.env.http_proxy) { - envVar = "http_proxy"; - proxyEnv = process.env.http_proxy; - } else { - return {}; - } - let proxyUrl; - try { - proxyUrl = new url_1.URL(proxyEnv); - } catch (e) { - (0, logging_1.log)(constants_1.LogVerbosity.ERROR, `cannot parse value of "${envVar}" env var`); - return {}; - } - if (proxyUrl.protocol !== "http:") { - (0, logging_1.log)(constants_1.LogVerbosity.ERROR, `"${proxyUrl.protocol}" scheme not supported in proxy URI`); - return {}; - } - let userCred = null; - if (proxyUrl.username) { - if (proxyUrl.password) { - (0, logging_1.log)(constants_1.LogVerbosity.INFO, "userinfo found in proxy URI"); - userCred = decodeURIComponent(`${proxyUrl.username}:${proxyUrl.password}`); - } else { - userCred = proxyUrl.username; - } - } - const hostname3 = proxyUrl.hostname; - let port = proxyUrl.port; - if (port === "") { - port = "80"; - } - const result = { - address: `${hostname3}:${port}` - }; - if (userCred) { - result.creds = userCred; - } - trace6("Proxy server " + result.address + " set by environment variable " + envVar); - return result; - } - function getNoProxyHostList() { - let noProxyStr = process.env.no_grpc_proxy; - let envVar = "no_grpc_proxy"; - if (!noProxyStr) { - noProxyStr = process.env.no_proxy; - envVar = "no_proxy"; - } - if (noProxyStr) { - trace6("No proxy server list set by environment variable " + envVar); - return noProxyStr.split(","); - } else { - return []; - } - } - function parseCIDR(cidrString) { - const splitRange = cidrString.split("/"); - if (splitRange.length !== 2) { - return null; - } - const prefixLength = parseInt(splitRange[1], 10); - if (!(0, net_1.isIPv4)(splitRange[0]) || Number.isNaN(prefixLength) || prefixLength < 0 || prefixLength > 32) { - return null; - } - return { - ip: ipToInt(splitRange[0]), - prefixLength - }; - } - function ipToInt(ip) { - return ip.split(".").reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0); - } - function isIpInCIDR(cidr, serverHost) { - const ip = cidr.ip; - const mask = -1 << 32 - cidr.prefixLength; - const hostIP = ipToInt(serverHost); - return (hostIP & mask) === (ip & mask); - } - function hostMatchesNoProxyList(serverHost) { - for (const host of getNoProxyHostList()) { - const parsedCIDR = parseCIDR(host); - if ((0, net_1.isIPv4)(serverHost) && parsedCIDR && isIpInCIDR(parsedCIDR, serverHost)) { - return true; - } else if (serverHost.endsWith(host)) { - return true; - } - } - return false; - } - function mapProxyName(target, options) { - var _a2; - const noProxyResult = { - target, - extraOptions: {} - }; - if (((_a2 = options["grpc.enable_http_proxy"]) !== null && _a2 !== undefined ? _a2 : 1) === 0) { - return noProxyResult; - } - if (target.scheme === "unix") { - return noProxyResult; - } - const proxyInfo = getProxyInfo(); - if (!proxyInfo.address) { - return noProxyResult; - } - const hostPort = (0, uri_parser_1.splitHostPort)(target.path); - if (!hostPort) { - return noProxyResult; - } - const serverHost = hostPort.host; - if (hostMatchesNoProxyList(serverHost)) { - trace6("Not using proxy for target in no_proxy list: " + (0, uri_parser_1.uriToString)(target)); - return noProxyResult; - } - const extraOptions = { - "grpc.http_connect_target": (0, uri_parser_1.uriToString)(target) - }; - if (proxyInfo.creds) { - extraOptions["grpc.http_connect_creds"] = proxyInfo.creds; - } - return { - target: { - scheme: "dns", - path: proxyInfo.address - }, - extraOptions - }; - } - function getProxiedConnection(address, channelOptions) { - var _a2; - if (!("grpc.http_connect_target" in channelOptions)) { - return Promise.resolve(null); - } - const realTarget = channelOptions["grpc.http_connect_target"]; - const parsedTarget = (0, uri_parser_1.parseUri)(realTarget); - if (parsedTarget === null) { - return Promise.resolve(null); - } - const splitHostPost = (0, uri_parser_1.splitHostPort)(parsedTarget.path); - if (splitHostPost === null) { - return Promise.resolve(null); - } - const hostPort = `${splitHostPost.host}:${(_a2 = splitHostPost.port) !== null && _a2 !== undefined ? _a2 : resolver_dns_1.DEFAULT_PORT}`; - const options = { - method: "CONNECT", - path: hostPort - }; - const headers = { - Host: hostPort - }; - if ((0, subchannel_address_1.isTcpSubchannelAddress)(address)) { - options.host = address.host; - options.port = address.port; - } else { - options.socketPath = address.path; - } - if ("grpc.http_connect_creds" in channelOptions) { - headers["Proxy-Authorization"] = "Basic " + Buffer.from(channelOptions["grpc.http_connect_creds"]).toString("base64"); - } - options.headers = headers; - const proxyAddressString = (0, subchannel_address_1.subchannelAddressToString)(address); - trace6("Using proxy " + proxyAddressString + " to connect to " + options.path); - return new Promise((resolve2, reject) => { - const request = http2.request(options); - request.once("connect", (res, socket, head) => { - request.removeAllListeners(); - socket.removeAllListeners(); - if (res.statusCode === 200) { - trace6("Successfully connected to " + options.path + " through proxy " + proxyAddressString); - if (head.length > 0) { - socket.unshift(head); - } - trace6("Successfully established a plaintext connection to " + options.path + " through proxy " + proxyAddressString); - resolve2(socket); - } else { - (0, logging_1.log)(constants_1.LogVerbosity.ERROR, "Failed to connect to " + options.path + " through proxy " + proxyAddressString + " with status " + res.statusCode); - reject(); - } - }); - request.once("error", (err) => { - request.removeAllListeners(); - (0, logging_1.log)(constants_1.LogVerbosity.ERROR, "Failed to connect to proxy " + proxyAddressString + " with error " + err.message); - reject(); - }); - request.end(); - }); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/stream-decoder.js -var require_stream_decoder = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.StreamDecoder = undefined; - var ReadState; - (function(ReadState2) { - ReadState2[ReadState2["NO_DATA"] = 0] = "NO_DATA"; - ReadState2[ReadState2["READING_SIZE"] = 1] = "READING_SIZE"; - ReadState2[ReadState2["READING_MESSAGE"] = 2] = "READING_MESSAGE"; - })(ReadState || (ReadState = {})); - - class StreamDecoder { - constructor(maxReadMessageLength) { - this.maxReadMessageLength = maxReadMessageLength; - this.readState = ReadState.NO_DATA; - this.readCompressFlag = Buffer.alloc(1); - this.readPartialSize = Buffer.alloc(4); - this.readSizeRemaining = 4; - this.readMessageSize = 0; - this.readPartialMessage = []; - this.readMessageRemaining = 0; - } - write(data) { - let readHead = 0; - let toRead; - const result = []; - while (readHead < data.length) { - switch (this.readState) { - case ReadState.NO_DATA: - this.readCompressFlag = data.slice(readHead, readHead + 1); - readHead += 1; - this.readState = ReadState.READING_SIZE; - this.readPartialSize.fill(0); - this.readSizeRemaining = 4; - this.readMessageSize = 0; - this.readMessageRemaining = 0; - this.readPartialMessage = []; - break; - case ReadState.READING_SIZE: - toRead = Math.min(data.length - readHead, this.readSizeRemaining); - data.copy(this.readPartialSize, 4 - this.readSizeRemaining, readHead, readHead + toRead); - this.readSizeRemaining -= toRead; - readHead += toRead; - if (this.readSizeRemaining === 0) { - this.readMessageSize = this.readPartialSize.readUInt32BE(0); - if (this.maxReadMessageLength !== -1 && this.readMessageSize > this.maxReadMessageLength) { - throw new Error(`Received message larger than max (${this.readMessageSize} vs ${this.maxReadMessageLength})`); - } - this.readMessageRemaining = this.readMessageSize; - if (this.readMessageRemaining > 0) { - this.readState = ReadState.READING_MESSAGE; - } else { - const message = Buffer.concat([this.readCompressFlag, this.readPartialSize], 5); - this.readState = ReadState.NO_DATA; - result.push(message); - } - } - break; - case ReadState.READING_MESSAGE: - toRead = Math.min(data.length - readHead, this.readMessageRemaining); - this.readPartialMessage.push(data.slice(readHead, readHead + toRead)); - this.readMessageRemaining -= toRead; - readHead += toRead; - if (this.readMessageRemaining === 0) { - const framedMessageBuffers = [ - this.readCompressFlag, - this.readPartialSize - ].concat(this.readPartialMessage); - const framedMessage = Buffer.concat(framedMessageBuffers, this.readMessageSize + 5); - this.readState = ReadState.NO_DATA; - result.push(framedMessage); - } - break; - default: - throw new Error("Unexpected read state"); - } - } - return result; - } - } - exports.StreamDecoder = StreamDecoder; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/subchannel-call.js -var require_subchannel_call = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Http2SubchannelCall = undefined; - var http2 = __require("http2"); - var os = __require("os"); - var constants_1 = require_constants9(); - var metadata_1 = require_metadata(); - var stream_decoder_1 = require_stream_decoder(); - var logging = require_logging(); - var constants_2 = require_constants9(); - var TRACER_NAME2 = "subchannel_call"; - function getSystemErrorName(errno) { - for (const [name, num] of Object.entries(os.constants.errno)) { - if (num === errno) { - return name; - } - } - return "Unknown system error " + errno; - } - function mapHttpStatusCode(code) { - const details = `Received HTTP status code ${code}`; - let mappedStatusCode; - switch (code) { - case 400: - mappedStatusCode = constants_1.Status.INTERNAL; - break; - case 401: - mappedStatusCode = constants_1.Status.UNAUTHENTICATED; - break; - case 403: - mappedStatusCode = constants_1.Status.PERMISSION_DENIED; - break; - case 404: - mappedStatusCode = constants_1.Status.UNIMPLEMENTED; - break; - case 429: - case 502: - case 503: - case 504: - mappedStatusCode = constants_1.Status.UNAVAILABLE; - break; - default: - mappedStatusCode = constants_1.Status.UNKNOWN; - } - return { - code: mappedStatusCode, - details, - metadata: new metadata_1.Metadata - }; - } - - class Http2SubchannelCall { - constructor(http2Stream, callEventTracker, listener, transport, callId) { - var _a2; - this.http2Stream = http2Stream; - this.callEventTracker = callEventTracker; - this.listener = listener; - this.transport = transport; - this.callId = callId; - this.isReadFilterPending = false; - this.isPushPending = false; - this.canPush = false; - this.readsClosed = false; - this.statusOutput = false; - this.unpushedReadMessages = []; - this.finalStatus = null; - this.internalError = null; - this.serverEndedCall = false; - this.connectionDropped = false; - const maxReceiveMessageLength = (_a2 = transport.getOptions()["grpc.max_receive_message_length"]) !== null && _a2 !== undefined ? _a2 : constants_1.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH; - this.decoder = new stream_decoder_1.StreamDecoder(maxReceiveMessageLength); - http2Stream.on("response", (headers, flags) => { - let headersString = ""; - for (const header of Object.keys(headers)) { - headersString += "\t\t" + header + ": " + headers[header] + ` -`; - } - this.trace(`Received server headers: -` + headersString); - this.httpStatusCode = headers[":status"]; - if (flags & http2.constants.NGHTTP2_FLAG_END_STREAM) { - this.handleTrailers(headers); - } else { - let metadata; - try { - metadata = metadata_1.Metadata.fromHttp2Headers(headers); - } catch (error48) { - this.endCall({ - code: constants_1.Status.UNKNOWN, - details: error48.message, - metadata: new metadata_1.Metadata - }); - return; - } - this.listener.onReceiveMetadata(metadata); - } - }); - http2Stream.on("trailers", (headers) => { - this.handleTrailers(headers); - }); - http2Stream.on("data", (data) => { - if (this.statusOutput) { - return; - } - this.trace("receive HTTP/2 data frame of length " + data.length); - let messages; - try { - messages = this.decoder.write(data); - } catch (e) { - if (this.httpStatusCode !== undefined && this.httpStatusCode !== 200) { - const mappedStatus = mapHttpStatusCode(this.httpStatusCode); - this.cancelWithStatus(mappedStatus.code, mappedStatus.details); - } else { - this.cancelWithStatus(constants_1.Status.RESOURCE_EXHAUSTED, e.message); - } - return; - } - for (const message of messages) { - this.trace("parsed message of length " + message.length); - this.callEventTracker.addMessageReceived(); - this.tryPush(message); - } - }); - http2Stream.on("end", () => { - this.readsClosed = true; - this.maybeOutputStatus(); - }); - http2Stream.on("close", () => { - this.serverEndedCall = true; - process.nextTick(() => { - var _a3; - this.trace("HTTP/2 stream closed with code " + http2Stream.rstCode); - if (((_a3 = this.finalStatus) === null || _a3 === undefined ? undefined : _a3.code) === constants_1.Status.OK) { - return; - } - let code; - let details = ""; - switch (http2Stream.rstCode) { - case http2.constants.NGHTTP2_NO_ERROR: - if (this.finalStatus !== null) { - return; - } - if (this.httpStatusCode && this.httpStatusCode !== 200) { - const mappedStatus = mapHttpStatusCode(this.httpStatusCode); - code = mappedStatus.code; - details = mappedStatus.details; - } else { - code = constants_1.Status.INTERNAL; - details = `Received RST_STREAM with code ${http2Stream.rstCode} (Call ended without gRPC status)`; - } - break; - case http2.constants.NGHTTP2_REFUSED_STREAM: - code = constants_1.Status.UNAVAILABLE; - details = "Stream refused by server"; - break; - case http2.constants.NGHTTP2_CANCEL: - if (this.connectionDropped) { - code = constants_1.Status.UNAVAILABLE; - details = "Connection dropped"; - } else { - code = constants_1.Status.CANCELLED; - details = "Call cancelled"; - } - break; - case http2.constants.NGHTTP2_ENHANCE_YOUR_CALM: - code = constants_1.Status.RESOURCE_EXHAUSTED; - details = "Bandwidth exhausted or memory limit exceeded"; - break; - case http2.constants.NGHTTP2_INADEQUATE_SECURITY: - code = constants_1.Status.PERMISSION_DENIED; - details = "Protocol not secure enough"; - break; - case http2.constants.NGHTTP2_INTERNAL_ERROR: - code = constants_1.Status.INTERNAL; - if (this.internalError === null) { - details = `Received RST_STREAM with code ${http2Stream.rstCode} (Internal server error)`; - } else { - if (this.internalError.code === "ECONNRESET" || this.internalError.code === "ETIMEDOUT") { - code = constants_1.Status.UNAVAILABLE; - details = this.internalError.message; - } else { - details = `Received RST_STREAM with code ${http2Stream.rstCode} triggered by internal client error: ${this.internalError.message}`; - } - } - break; - default: - code = constants_1.Status.INTERNAL; - details = `Received RST_STREAM with code ${http2Stream.rstCode}`; - } - this.endCall({ - code, - details, - metadata: new metadata_1.Metadata, - rstCode: http2Stream.rstCode - }); - }); - }); - http2Stream.on("error", (err) => { - if (err.code !== "ERR_HTTP2_STREAM_ERROR") { - this.trace("Node error event: message=" + err.message + " code=" + err.code + " errno=" + getSystemErrorName(err.errno) + " syscall=" + err.syscall); - this.internalError = err; - } - this.callEventTracker.onStreamEnd(false); - }); - } - getDeadlineInfo() { - return [`remote_addr=${this.getPeer()}`]; - } - onDisconnect() { - this.connectionDropped = true; - setImmediate(() => { - this.endCall({ - code: constants_1.Status.UNAVAILABLE, - details: "Connection dropped", - metadata: new metadata_1.Metadata - }); - }); - } - outputStatus() { - if (!this.statusOutput) { - this.statusOutput = true; - this.trace("ended with status: code=" + this.finalStatus.code + ' details="' + this.finalStatus.details + '"'); - this.callEventTracker.onCallEnd(this.finalStatus); - process.nextTick(() => { - this.listener.onReceiveStatus(this.finalStatus); - }); - this.http2Stream.resume(); - } - } - trace(text) { - logging.trace(constants_2.LogVerbosity.DEBUG, TRACER_NAME2, "[" + this.callId + "] " + text); - } - endCall(status) { - if (this.finalStatus === null || this.finalStatus.code === constants_1.Status.OK) { - this.finalStatus = status; - this.maybeOutputStatus(); - } - this.destroyHttp2Stream(); - } - maybeOutputStatus() { - if (this.finalStatus !== null) { - if (this.finalStatus.code !== constants_1.Status.OK || this.readsClosed && this.unpushedReadMessages.length === 0 && !this.isReadFilterPending && !this.isPushPending) { - this.outputStatus(); - } - } - } - push(message) { - this.trace("pushing to reader message of length " + (message instanceof Buffer ? message.length : null)); - this.canPush = false; - this.isPushPending = true; - process.nextTick(() => { - this.isPushPending = false; - if (this.statusOutput) { - return; - } - this.listener.onReceiveMessage(message); - this.maybeOutputStatus(); - }); - } - tryPush(messageBytes) { - if (this.canPush) { - this.http2Stream.pause(); - this.push(messageBytes); - } else { - this.trace("unpushedReadMessages.push message of length " + messageBytes.length); - this.unpushedReadMessages.push(messageBytes); - } - } - handleTrailers(headers) { - this.serverEndedCall = true; - this.callEventTracker.onStreamEnd(true); - let headersString = ""; - for (const header of Object.keys(headers)) { - headersString += "\t\t" + header + ": " + headers[header] + ` -`; - } - this.trace(`Received server trailers: -` + headersString); - let metadata; - try { - metadata = metadata_1.Metadata.fromHttp2Headers(headers); - } catch (e) { - metadata = new metadata_1.Metadata; - } - const metadataMap = metadata.getMap(); - let status; - if (typeof metadataMap["grpc-status"] === "string") { - const receivedStatus = Number(metadataMap["grpc-status"]); - this.trace("received status code " + receivedStatus + " from server"); - metadata.remove("grpc-status"); - let details = ""; - if (typeof metadataMap["grpc-message"] === "string") { - try { - details = decodeURI(metadataMap["grpc-message"]); - } catch (e) { - details = metadataMap["grpc-message"]; - } - metadata.remove("grpc-message"); - this.trace('received status details string "' + details + '" from server'); - } - status = { - code: receivedStatus, - details, - metadata - }; - } else if (this.httpStatusCode) { - status = mapHttpStatusCode(this.httpStatusCode); - status.metadata = metadata; - } else { - status = { - code: constants_1.Status.UNKNOWN, - details: "No status information received", - metadata - }; - } - this.endCall(status); - } - destroyHttp2Stream() { - var _a2; - if (this.http2Stream.destroyed) { - return; - } - if (this.serverEndedCall) { - this.http2Stream.end(); - } else { - let code; - if (((_a2 = this.finalStatus) === null || _a2 === undefined ? undefined : _a2.code) === constants_1.Status.OK) { - code = http2.constants.NGHTTP2_NO_ERROR; - } else { - code = http2.constants.NGHTTP2_CANCEL; - } - this.trace("close http2 stream with code " + code); - this.http2Stream.close(code); - } - } - cancelWithStatus(status, details) { - this.trace("cancelWithStatus code: " + status + ' details: "' + details + '"'); - this.endCall({ code: status, details, metadata: new metadata_1.Metadata }); - } - getStatus() { - return this.finalStatus; - } - getPeer() { - return this.transport.getPeerName(); - } - getCallNumber() { - return this.callId; - } - getAuthContext() { - return this.transport.getAuthContext(); - } - startRead() { - if (this.finalStatus !== null && this.finalStatus.code !== constants_1.Status.OK) { - this.readsClosed = true; - this.maybeOutputStatus(); - return; - } - this.canPush = true; - if (this.unpushedReadMessages.length > 0) { - const nextMessage = this.unpushedReadMessages.shift(); - this.push(nextMessage); - return; - } - this.http2Stream.resume(); - } - sendMessageWithContext(context8, message) { - this.trace("write() called with message of length " + message.length); - const cb = (error48) => { - process.nextTick(() => { - var _a2; - let code = constants_1.Status.UNAVAILABLE; - if ((error48 === null || error48 === undefined ? undefined : error48.code) === "ERR_STREAM_WRITE_AFTER_END") { - code = constants_1.Status.INTERNAL; - } - if (error48) { - this.cancelWithStatus(code, `Write error: ${error48.message}`); - } - (_a2 = context8.callback) === null || _a2 === undefined || _a2.call(context8); - }); - }; - this.trace("sending data chunk of length " + message.length); - this.callEventTracker.addMessageSent(); - try { - this.http2Stream.write(message, cb); - } catch (error48) { - this.endCall({ - code: constants_1.Status.UNAVAILABLE, - details: `Write failed with error ${error48.message}`, - metadata: new metadata_1.Metadata - }); - } - } - halfClose() { - this.trace("end() called"); - this.trace("calling end() on HTTP/2 stream"); - this.http2Stream.end(); - } - } - exports.Http2SubchannelCall = Http2SubchannelCall; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/transport.js -var require_transport = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Http2SubchannelConnector = undefined; - var http2 = __require("http2"); - var tls_1 = __require("tls"); - var channelz_1 = require_channelz(); - var constants_1 = require_constants9(); - var http_proxy_1 = require_http_proxy(); - var logging = require_logging(); - var resolver_1 = require_resolver(); - var subchannel_address_1 = require_subchannel_address(); - var uri_parser_1 = require_uri_parser(); - var net = __require("net"); - var subchannel_call_1 = require_subchannel_call(); - var call_number_1 = require_call_number(); - var TRACER_NAME2 = "transport"; - var FLOW_CONTROL_TRACER_NAME = "transport_flowctrl"; - var clientVersion = require_package2().version; - var { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_CONTENT_TYPE, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_TE, HTTP2_HEADER_USER_AGENT } = http2.constants; - var KEEPALIVE_TIMEOUT_MS = 20000; - var tooManyPingsData = Buffer.from("too_many_pings", "ascii"); - - class Http2Transport { - constructor(session3, subchannelAddress, options, remoteName) { - this.session = session3; - this.options = options; - this.remoteName = remoteName; - this.keepaliveTimer = null; - this.pendingSendKeepalivePing = false; - this.activeCalls = new Set; - this.disconnectListeners = []; - this.disconnectHandled = false; - this.channelzEnabled = true; - this.keepalivesSent = 0; - this.messagesSent = 0; - this.messagesReceived = 0; - this.lastMessageSentTimestamp = null; - this.lastMessageReceivedTimestamp = null; - this.subchannelAddressString = (0, subchannel_address_1.subchannelAddressToString)(subchannelAddress); - if (options["grpc.enable_channelz"] === 0) { - this.channelzEnabled = false; - this.streamTracker = new channelz_1.ChannelzCallTrackerStub; - } else { - this.streamTracker = new channelz_1.ChannelzCallTracker; - } - this.channelzRef = (0, channelz_1.registerChannelzSocket)(this.subchannelAddressString, () => this.getChannelzInfo(), this.channelzEnabled); - this.userAgent = [ - options["grpc.primary_user_agent"], - `grpc-node-js/${clientVersion}`, - options["grpc.secondary_user_agent"] - ].filter((e) => e).join(" "); - if ("grpc.keepalive_time_ms" in options) { - this.keepaliveTimeMs = options["grpc.keepalive_time_ms"]; - } else { - this.keepaliveTimeMs = -1; - } - if ("grpc.keepalive_timeout_ms" in options) { - this.keepaliveTimeoutMs = options["grpc.keepalive_timeout_ms"]; - } else { - this.keepaliveTimeoutMs = KEEPALIVE_TIMEOUT_MS; - } - if ("grpc.keepalive_permit_without_calls" in options) { - this.keepaliveWithoutCalls = options["grpc.keepalive_permit_without_calls"] === 1; - } else { - this.keepaliveWithoutCalls = false; - } - session3.once("close", () => { - this.trace("session closed"); - this.handleDisconnect(); - }); - session3.once("goaway", (errorCode, lastStreamID, opaqueData) => { - let tooManyPings = false; - if (errorCode === http2.constants.NGHTTP2_ENHANCE_YOUR_CALM && opaqueData && opaqueData.equals(tooManyPingsData)) { - tooManyPings = true; - } - this.trace("connection closed by GOAWAY with code " + errorCode + " and data " + (opaqueData === null || opaqueData === undefined ? undefined : opaqueData.toString())); - this.reportDisconnectToOwner(tooManyPings); - }); - session3.once("error", (error48) => { - this.trace("connection closed with error " + error48.message); - this.handleDisconnect(); - }); - session3.socket.once("close", (hadError) => { - this.trace("connection closed. hadError=" + hadError); - this.handleDisconnect(); - }); - if (logging.isTracerEnabled(TRACER_NAME2)) { - session3.on("remoteSettings", (settings) => { - this.trace("new settings received" + (this.session !== session3 ? " on the old connection" : "") + ": " + JSON.stringify(settings)); - }); - session3.on("localSettings", (settings) => { - this.trace("local settings acknowledged by remote" + (this.session !== session3 ? " on the old connection" : "") + ": " + JSON.stringify(settings)); - }); - } - if (this.keepaliveWithoutCalls) { - this.maybeStartKeepalivePingTimer(); - } - if (session3.socket instanceof tls_1.TLSSocket) { - this.authContext = { - transportSecurityType: "ssl", - sslPeerCertificate: session3.socket.getPeerCertificate() - }; - } else { - this.authContext = {}; - } - } - getChannelzInfo() { - var _a2, _b, _c; - const sessionSocket = this.session.socket; - const remoteAddress = sessionSocket.remoteAddress ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.remoteAddress, sessionSocket.remotePort) : null; - const localAddress = sessionSocket.localAddress ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.localAddress, sessionSocket.localPort) : null; - let tlsInfo; - if (this.session.encrypted) { - const tlsSocket = sessionSocket; - const cipherInfo = tlsSocket.getCipher(); - const certificate = tlsSocket.getCertificate(); - const peerCertificate = tlsSocket.getPeerCertificate(); - tlsInfo = { - cipherSuiteStandardName: (_a2 = cipherInfo.standardName) !== null && _a2 !== undefined ? _a2 : null, - cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name, - localCertificate: certificate && "raw" in certificate ? certificate.raw : null, - remoteCertificate: peerCertificate && "raw" in peerCertificate ? peerCertificate.raw : null - }; - } else { - tlsInfo = null; - } - const socketInfo = { - remoteAddress, - localAddress, - security: tlsInfo, - remoteName: this.remoteName, - streamsStarted: this.streamTracker.callsStarted, - streamsSucceeded: this.streamTracker.callsSucceeded, - streamsFailed: this.streamTracker.callsFailed, - messagesSent: this.messagesSent, - messagesReceived: this.messagesReceived, - keepAlivesSent: this.keepalivesSent, - lastLocalStreamCreatedTimestamp: this.streamTracker.lastCallStartedTimestamp, - lastRemoteStreamCreatedTimestamp: null, - lastMessageSentTimestamp: this.lastMessageSentTimestamp, - lastMessageReceivedTimestamp: this.lastMessageReceivedTimestamp, - localFlowControlWindow: (_b = this.session.state.localWindowSize) !== null && _b !== undefined ? _b : null, - remoteFlowControlWindow: (_c = this.session.state.remoteWindowSize) !== null && _c !== undefined ? _c : null - }; - return socketInfo; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "(" + this.channelzRef.id + ") " + this.subchannelAddressString + " " + text); - } - keepaliveTrace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, "keepalive", "(" + this.channelzRef.id + ") " + this.subchannelAddressString + " " + text); - } - flowControlTrace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, FLOW_CONTROL_TRACER_NAME, "(" + this.channelzRef.id + ") " + this.subchannelAddressString + " " + text); - } - internalsTrace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, "transport_internals", "(" + this.channelzRef.id + ") " + this.subchannelAddressString + " " + text); - } - reportDisconnectToOwner(tooManyPings) { - if (this.disconnectHandled) { - return; - } - this.disconnectHandled = true; - this.disconnectListeners.forEach((listener) => listener(tooManyPings)); - } - handleDisconnect() { - this.clearKeepaliveTimeout(); - this.reportDisconnectToOwner(false); - for (const call of this.activeCalls) { - call.onDisconnect(); - } - setImmediate(() => { - this.session.destroy(); - }); - } - addDisconnectListener(listener) { - this.disconnectListeners.push(listener); - } - canSendPing() { - return !this.session.destroyed && this.keepaliveTimeMs > 0 && (this.keepaliveWithoutCalls || this.activeCalls.size > 0); - } - maybeSendPing() { - var _a2, _b; - if (!this.canSendPing()) { - this.pendingSendKeepalivePing = true; - return; - } - if (this.keepaliveTimer) { - console.error("keepaliveTimeout is not null"); - return; - } - if (this.channelzEnabled) { - this.keepalivesSent += 1; - } - this.keepaliveTrace("Sending ping with timeout " + this.keepaliveTimeoutMs + "ms"); - this.keepaliveTimer = setTimeout(() => { - this.keepaliveTimer = null; - this.keepaliveTrace("Ping timeout passed without response"); - this.handleDisconnect(); - }, this.keepaliveTimeoutMs); - (_b = (_a2 = this.keepaliveTimer).unref) === null || _b === undefined || _b.call(_a2); - let pingSendError = ""; - try { - const pingSentSuccessfully = this.session.ping((err, duration3, payload) => { - this.clearKeepaliveTimeout(); - if (err) { - this.keepaliveTrace("Ping failed with error " + err.message); - this.handleDisconnect(); - } else { - this.keepaliveTrace("Received ping response"); - this.maybeStartKeepalivePingTimer(); - } - }); - if (!pingSentSuccessfully) { - pingSendError = "Ping returned false"; - } - } catch (e) { - pingSendError = (e instanceof Error ? e.message : "") || "Unknown error"; - } - if (pingSendError) { - this.keepaliveTrace("Ping send failed: " + pingSendError); - this.handleDisconnect(); - } - } - maybeStartKeepalivePingTimer() { - var _a2, _b; - if (!this.canSendPing()) { - return; - } - if (this.pendingSendKeepalivePing) { - this.pendingSendKeepalivePing = false; - this.maybeSendPing(); - } else if (!this.keepaliveTimer) { - this.keepaliveTrace("Starting keepalive timer for " + this.keepaliveTimeMs + "ms"); - this.keepaliveTimer = setTimeout(() => { - this.keepaliveTimer = null; - this.maybeSendPing(); - }, this.keepaliveTimeMs); - (_b = (_a2 = this.keepaliveTimer).unref) === null || _b === undefined || _b.call(_a2); - } - } - clearKeepaliveTimeout() { - if (this.keepaliveTimer) { - clearTimeout(this.keepaliveTimer); - this.keepaliveTimer = null; - } - } - removeActiveCall(call) { - this.activeCalls.delete(call); - if (this.activeCalls.size === 0) { - this.session.unref(); - } - } - addActiveCall(call) { - this.activeCalls.add(call); - if (this.activeCalls.size === 1) { - this.session.ref(); - if (!this.keepaliveWithoutCalls) { - this.maybeStartKeepalivePingTimer(); - } - } - } - createCall(metadata, host, method, listener, subchannelCallStatsTracker) { - const headers = metadata.toHttp2Headers(); - headers[HTTP2_HEADER_AUTHORITY] = host; - headers[HTTP2_HEADER_USER_AGENT] = this.userAgent; - headers[HTTP2_HEADER_CONTENT_TYPE] = "application/grpc"; - headers[HTTP2_HEADER_METHOD] = "POST"; - headers[HTTP2_HEADER_PATH] = method; - headers[HTTP2_HEADER_TE] = "trailers"; - let http2Stream; - try { - http2Stream = this.session.request(headers); - } catch (e) { - this.handleDisconnect(); - throw e; - } - this.flowControlTrace("local window size: " + this.session.state.localWindowSize + " remote window size: " + this.session.state.remoteWindowSize); - this.internalsTrace("session.closed=" + this.session.closed + " session.destroyed=" + this.session.destroyed + " session.socket.destroyed=" + this.session.socket.destroyed); - let eventTracker; - let call; - if (this.channelzEnabled) { - this.streamTracker.addCallStarted(); - eventTracker = { - addMessageSent: () => { - var _a2; - this.messagesSent += 1; - this.lastMessageSentTimestamp = new Date; - (_a2 = subchannelCallStatsTracker.addMessageSent) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker); - }, - addMessageReceived: () => { - var _a2; - this.messagesReceived += 1; - this.lastMessageReceivedTimestamp = new Date; - (_a2 = subchannelCallStatsTracker.addMessageReceived) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker); - }, - onCallEnd: (status) => { - var _a2; - (_a2 = subchannelCallStatsTracker.onCallEnd) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker, status); - this.removeActiveCall(call); - }, - onStreamEnd: (success3) => { - var _a2; - if (success3) { - this.streamTracker.addCallSucceeded(); - } else { - this.streamTracker.addCallFailed(); - } - (_a2 = subchannelCallStatsTracker.onStreamEnd) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker, success3); - } - }; - } else { - eventTracker = { - addMessageSent: () => { - var _a2; - (_a2 = subchannelCallStatsTracker.addMessageSent) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker); - }, - addMessageReceived: () => { - var _a2; - (_a2 = subchannelCallStatsTracker.addMessageReceived) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker); - }, - onCallEnd: (status) => { - var _a2; - (_a2 = subchannelCallStatsTracker.onCallEnd) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker, status); - this.removeActiveCall(call); - }, - onStreamEnd: (success3) => { - var _a2; - (_a2 = subchannelCallStatsTracker.onStreamEnd) === null || _a2 === undefined || _a2.call(subchannelCallStatsTracker, success3); - } - }; - } - call = new subchannel_call_1.Http2SubchannelCall(http2Stream, eventTracker, listener, this, (0, call_number_1.getNextCallNumber)()); - this.addActiveCall(call); - return call; - } - getChannelzRef() { - return this.channelzRef; - } - getPeerName() { - return this.subchannelAddressString; - } - getOptions() { - return this.options; - } - getAuthContext() { - return this.authContext; - } - shutdown() { - this.session.close(); - (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - } - } - - class Http2SubchannelConnector { - constructor(channelTarget) { - this.channelTarget = channelTarget; - this.session = null; - this.isShutdown = false; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, (0, uri_parser_1.uriToString)(this.channelTarget) + " " + text); - } - createSession(secureConnectResult, address, options) { - if (this.isShutdown) { - return Promise.reject(); - } - if (secureConnectResult.socket.closed) { - return Promise.reject("Connection closed before starting HTTP/2 handshake"); - } - return new Promise((resolve2, reject) => { - var _a2, _b, _c, _d, _e, _f, _g, _h; - let remoteName = null; - let realTarget = this.channelTarget; - if ("grpc.http_connect_target" in options) { - const parsedTarget = (0, uri_parser_1.parseUri)(options["grpc.http_connect_target"]); - if (parsedTarget) { - realTarget = parsedTarget; - remoteName = (0, uri_parser_1.uriToString)(parsedTarget); - } - } - const scheme = secureConnectResult.secure ? "https" : "http"; - const targetPath = (0, resolver_1.getDefaultAuthority)(realTarget); - const closeHandler = () => { - var _a3; - (_a3 = this.session) === null || _a3 === undefined || _a3.destroy(); - this.session = null; - setImmediate(() => { - if (!reportedError) { - reportedError = true; - reject(`${errorMessage.trim()} (${new Date().toISOString()})`); - } - }); - }; - const errorHandler2 = (error48) => { - var _a3; - (_a3 = this.session) === null || _a3 === undefined || _a3.destroy(); - errorMessage = error48.message; - this.trace("connection failed with error " + errorMessage); - if (!reportedError) { - reportedError = true; - reject(`${errorMessage} (${new Date().toISOString()})`); - } - }; - const sessionOptions = { - createConnection: (authority, option) => { - return secureConnectResult.socket; - }, - settings: { - initialWindowSize: (_d = (_a2 = options["grpc-node.flow_control_window"]) !== null && _a2 !== undefined ? _a2 : (_c = (_b = http2.getDefaultSettings) === null || _b === undefined ? undefined : _b.call(http2)) === null || _c === undefined ? undefined : _c.initialWindowSize) !== null && _d !== undefined ? _d : 65535 - }, - maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER, - maxSessionMemory: (_e = options["grpc-node.max_session_memory"]) !== null && _e !== undefined ? _e : Number.MAX_SAFE_INTEGER - }; - const session3 = http2.connect(`${scheme}://${targetPath}`, sessionOptions); - const defaultWin = (_h = (_g = (_f = http2.getDefaultSettings) === null || _f === undefined ? undefined : _f.call(http2)) === null || _g === undefined ? undefined : _g.initialWindowSize) !== null && _h !== undefined ? _h : 65535; - const connWin = options["grpc-node.flow_control_window"]; - this.session = session3; - let errorMessage = "Failed to connect"; - let reportedError = false; - session3.unref(); - session3.once("remoteSettings", () => { - var _a3; - if (connWin && connWin > defaultWin) { - try { - session3.setLocalWindowSize(connWin); - } catch (_b2) { - const delta = connWin - ((_a3 = session3.state.localWindowSize) !== null && _a3 !== undefined ? _a3 : defaultWin); - if (delta > 0) - session3.incrementWindowSize(delta); - } - } - session3.removeAllListeners(); - secureConnectResult.socket.removeListener("close", closeHandler); - secureConnectResult.socket.removeListener("error", errorHandler2); - resolve2(new Http2Transport(session3, address, options, remoteName)); - this.session = null; - }); - session3.once("close", closeHandler); - session3.once("error", errorHandler2); - secureConnectResult.socket.once("close", closeHandler); - secureConnectResult.socket.once("error", errorHandler2); - }); - } - tcpConnect(address, options) { - return (0, http_proxy_1.getProxiedConnection)(address, options).then((proxiedSocket) => { - if (proxiedSocket) { - return proxiedSocket; - } else { - return new Promise((resolve2, reject) => { - const closeCallback = () => { - reject(new Error("Socket closed")); - }; - const errorCallback = (error48) => { - reject(error48); - }; - const socket = net.connect(address, () => { - socket.removeListener("close", closeCallback); - socket.removeListener("error", errorCallback); - resolve2(socket); - }); - socket.once("close", closeCallback); - socket.once("error", errorCallback); - }); - } - }); - } - async connect(address, secureConnector, options) { - if (this.isShutdown) { - return Promise.reject(); - } - let tcpConnection = null; - let secureConnectResult = null; - const addressString = (0, subchannel_address_1.subchannelAddressToString)(address); - try { - this.trace(addressString + " Waiting for secureConnector to be ready"); - await secureConnector.waitForReady(); - this.trace(addressString + " secureConnector is ready"); - tcpConnection = await this.tcpConnect(address, options); - tcpConnection.setNoDelay(); - this.trace(addressString + " Established TCP connection"); - secureConnectResult = await secureConnector.connect(tcpConnection); - this.trace(addressString + " Established secure connection"); - return this.createSession(secureConnectResult, address, options); - } catch (e) { - tcpConnection === null || tcpConnection === undefined || tcpConnection.destroy(); - secureConnectResult === null || secureConnectResult === undefined || secureConnectResult.socket.destroy(); - throw e; - } - } - shutdown() { - var _a2; - this.isShutdown = true; - (_a2 = this.session) === null || _a2 === undefined || _a2.close(); - this.session = null; - } - } - exports.Http2SubchannelConnector = Http2SubchannelConnector; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/subchannel-pool.js -var require_subchannel_pool = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SubchannelPool = undefined; - exports.getSubchannelPool = getSubchannelPool; - var channel_options_1 = require_channel_options(); - var subchannel_1 = require_subchannel(); - var subchannel_address_1 = require_subchannel_address(); - var uri_parser_1 = require_uri_parser(); - var transport_1 = require_transport(); - var REF_CHECK_INTERVAL = 1e4; - - class SubchannelPool { - constructor() { - this.pool = Object.create(null); - this.cleanupTimer = null; - } - unrefUnusedSubchannels() { - let allSubchannelsUnrefed = true; - for (const channelTarget in this.pool) { - const subchannelObjArray = this.pool[channelTarget]; - const refedSubchannels = subchannelObjArray.filter((value) => !value.subchannel.unrefIfOneRef()); - if (refedSubchannels.length > 0) { - allSubchannelsUnrefed = false; - } - this.pool[channelTarget] = refedSubchannels; - } - if (allSubchannelsUnrefed && this.cleanupTimer !== null) { - clearInterval(this.cleanupTimer); - this.cleanupTimer = null; - } - } - ensureCleanupTask() { - var _a2, _b; - if (this.cleanupTimer === null) { - this.cleanupTimer = setInterval(() => { - this.unrefUnusedSubchannels(); - }, REF_CHECK_INTERVAL); - (_b = (_a2 = this.cleanupTimer).unref) === null || _b === undefined || _b.call(_a2); - } - } - getOrCreateSubchannel(channelTargetUri, subchannelTarget, channelArguments, channelCredentials) { - this.ensureCleanupTask(); - const channelTarget = (0, uri_parser_1.uriToString)(channelTargetUri); - if (channelTarget in this.pool) { - const subchannelObjArray = this.pool[channelTarget]; - for (const subchannelObj of subchannelObjArray) { - if ((0, subchannel_address_1.subchannelAddressEqual)(subchannelTarget, subchannelObj.subchannelAddress) && (0, channel_options_1.channelOptionsEqual)(channelArguments, subchannelObj.channelArguments) && channelCredentials._equals(subchannelObj.channelCredentials)) { - return subchannelObj.subchannel; - } - } - } - const subchannel = new subchannel_1.Subchannel(channelTargetUri, subchannelTarget, channelArguments, channelCredentials, new transport_1.Http2SubchannelConnector(channelTargetUri)); - if (!(channelTarget in this.pool)) { - this.pool[channelTarget] = []; - } - this.pool[channelTarget].push({ - subchannelAddress: subchannelTarget, - channelArguments, - channelCredentials, - subchannel - }); - subchannel.ref(); - return subchannel; - } - } - exports.SubchannelPool = SubchannelPool; - var globalSubchannelPool = new SubchannelPool; - function getSubchannelPool(global2) { - if (global2) { - return globalSubchannelPool; - } else { - return new SubchannelPool; - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js -var require_load_balancing_call = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LoadBalancingCall = undefined; - var connectivity_state_1 = require_connectivity_state(); - var constants_1 = require_constants9(); - var deadline_1 = require_deadline(); - var metadata_1 = require_metadata(); - var picker_1 = require_picker(); - var uri_parser_1 = require_uri_parser(); - var logging = require_logging(); - var control_plane_status_1 = require_control_plane_status(); - var http2 = __require("http2"); - var TRACER_NAME2 = "load_balancing_call"; - - class LoadBalancingCall { - constructor(channel, callConfig, methodName, host, credentials, deadline, callNumber) { - var _a2, _b; - this.channel = channel; - this.callConfig = callConfig; - this.methodName = methodName; - this.host = host; - this.credentials = credentials; - this.deadline = deadline; - this.callNumber = callNumber; - this.child = null; - this.readPending = false; - this.pendingMessage = null; - this.pendingHalfClose = false; - this.ended = false; - this.metadata = null; - this.listener = null; - this.onCallEnded = null; - this.childStartTime = null; - const splitPath2 = this.methodName.split("/"); - let serviceName = ""; - if (splitPath2.length >= 2) { - serviceName = splitPath2[1]; - } - const hostname3 = (_b = (_a2 = (0, uri_parser_1.splitHostPort)(this.host)) === null || _a2 === undefined ? undefined : _a2.host) !== null && _b !== undefined ? _b : "localhost"; - this.serviceUrl = `https://${hostname3}/${serviceName}`; - this.startTime = new Date; - } - getDeadlineInfo() { - var _a2, _b; - const deadlineInfo = []; - if (this.childStartTime) { - if (this.childStartTime > this.startTime) { - if ((_a2 = this.metadata) === null || _a2 === undefined ? undefined : _a2.getOptions().waitForReady) { - deadlineInfo.push("wait_for_ready"); - } - deadlineInfo.push(`LB pick: ${(0, deadline_1.formatDateDifference)(this.startTime, this.childStartTime)}`); - } - deadlineInfo.push(...this.child.getDeadlineInfo()); - return deadlineInfo; - } else { - if ((_b = this.metadata) === null || _b === undefined ? undefined : _b.getOptions().waitForReady) { - deadlineInfo.push("wait_for_ready"); - } - deadlineInfo.push("Waiting for LB pick"); - } - return deadlineInfo; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "[" + this.callNumber + "] " + text); - } - outputStatus(status, progress) { - var _a2, _b; - if (!this.ended) { - this.ended = true; - this.trace("ended with status: code=" + status.code + ' details="' + status.details + '" start time=' + this.startTime.toISOString()); - const finalStatus = Object.assign(Object.assign({}, status), { progress }); - (_a2 = this.listener) === null || _a2 === undefined || _a2.onReceiveStatus(finalStatus); - (_b = this.onCallEnded) === null || _b === undefined || _b.call(this, finalStatus.code, finalStatus.details, finalStatus.metadata); - } - } - doPick() { - var _a2, _b; - if (this.ended) { - return; - } - if (!this.metadata) { - throw new Error("doPick called before start"); - } - this.trace("Pick called"); - const finalMetadata = this.metadata.clone(); - const pickResult = this.channel.doPick(finalMetadata, this.callConfig.pickInformation); - const subchannelString = pickResult.subchannel ? "(" + pickResult.subchannel.getChannelzRef().id + ") " + pickResult.subchannel.getAddress() : "" + pickResult.subchannel; - this.trace("Pick result: " + picker_1.PickResultType[pickResult.pickResultType] + " subchannel: " + subchannelString + " status: " + ((_a2 = pickResult.status) === null || _a2 === undefined ? undefined : _a2.code) + " " + ((_b = pickResult.status) === null || _b === undefined ? undefined : _b.details)); - switch (pickResult.pickResultType) { - case picker_1.PickResultType.COMPLETE: - const combinedCallCredentials = this.credentials.compose(pickResult.subchannel.getCallCredentials()); - combinedCallCredentials.generateMetadata({ method_name: this.methodName, service_url: this.serviceUrl }).then((credsMetadata) => { - var _a3; - if (this.ended) { - this.trace("Credentials metadata generation finished after call ended"); - return; - } - finalMetadata.merge(credsMetadata); - if (finalMetadata.get("authorization").length > 1) { - this.outputStatus({ - code: constants_1.Status.INTERNAL, - details: '"authorization" metadata cannot have multiple values', - metadata: new metadata_1.Metadata - }, "PROCESSED"); - } - if (pickResult.subchannel.getConnectivityState() !== connectivity_state_1.ConnectivityState.READY) { - this.trace("Picked subchannel " + subchannelString + " has state " + connectivity_state_1.ConnectivityState[pickResult.subchannel.getConnectivityState()] + " after getting credentials metadata. Retrying pick"); - this.doPick(); - return; - } - if (this.deadline !== Infinity) { - finalMetadata.set("grpc-timeout", (0, deadline_1.getDeadlineTimeoutString)(this.deadline)); - } - try { - this.child = pickResult.subchannel.getRealSubchannel().createCall(finalMetadata, this.host, this.methodName, { - onReceiveMetadata: (metadata) => { - this.trace("Received metadata"); - this.listener.onReceiveMetadata(metadata); - }, - onReceiveMessage: (message) => { - this.trace("Received message"); - this.listener.onReceiveMessage(message); - }, - onReceiveStatus: (status) => { - this.trace("Received status"); - if (status.rstCode === http2.constants.NGHTTP2_REFUSED_STREAM) { - this.outputStatus(status, "REFUSED"); - } else { - this.outputStatus(status, "PROCESSED"); - } - } - }); - this.childStartTime = new Date; - } catch (error48) { - this.trace("Failed to start call on picked subchannel " + subchannelString + " with error " + error48.message); - this.outputStatus({ - code: constants_1.Status.INTERNAL, - details: "Failed to start HTTP/2 stream with error " + error48.message, - metadata: new metadata_1.Metadata - }, "NOT_STARTED"); - return; - } - (_a3 = pickResult.onCallStarted) === null || _a3 === undefined || _a3.call(pickResult); - this.onCallEnded = pickResult.onCallEnded; - this.trace("Created child call [" + this.child.getCallNumber() + "]"); - if (this.readPending) { - this.child.startRead(); - } - if (this.pendingMessage) { - this.child.sendMessageWithContext(this.pendingMessage.context, this.pendingMessage.message); - } - if (this.pendingHalfClose) { - this.child.halfClose(); - } - }, (error48) => { - const { code: code2, details: details2 } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(typeof error48.code === "number" ? error48.code : constants_1.Status.UNKNOWN, `Getting metadata from plugin failed with error: ${error48.message}`); - this.outputStatus({ - code: code2, - details: details2, - metadata: new metadata_1.Metadata - }, "PROCESSED"); - }); - break; - case picker_1.PickResultType.DROP: - const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(pickResult.status.code, pickResult.status.details); - setImmediate(() => { - this.outputStatus({ code, details, metadata: pickResult.status.metadata }, "DROP"); - }); - break; - case picker_1.PickResultType.TRANSIENT_FAILURE: - if (this.metadata.getOptions().waitForReady) { - this.channel.queueCallForPick(this); - } else { - const { code: code2, details: details2 } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(pickResult.status.code, pickResult.status.details); - setImmediate(() => { - this.outputStatus({ code: code2, details: details2, metadata: pickResult.status.metadata }, "PROCESSED"); - }); - } - break; - case picker_1.PickResultType.QUEUE: - this.channel.queueCallForPick(this); - } - } - cancelWithStatus(status, details) { - var _a2; - this.trace("cancelWithStatus code: " + status + ' details: "' + details + '"'); - (_a2 = this.child) === null || _a2 === undefined || _a2.cancelWithStatus(status, details); - this.outputStatus({ code: status, details, metadata: new metadata_1.Metadata }, "PROCESSED"); - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.child) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : this.channel.getTarget(); - } - start(metadata, listener) { - this.trace("start called"); - this.listener = listener; - this.metadata = metadata; - this.doPick(); - } - sendMessageWithContext(context8, message) { - this.trace("write() called with message of length " + message.length); - if (this.child) { - this.child.sendMessageWithContext(context8, message); - } else { - this.pendingMessage = { context: context8, message }; - } - } - startRead() { - this.trace("startRead called"); - if (this.child) { - this.child.startRead(); - } else { - this.readPending = true; - } - } - halfClose() { - this.trace("halfClose called"); - if (this.child) { - this.child.halfClose(); - } else { - this.pendingHalfClose = true; - } - } - setCredentials(credentials) { - throw new Error("Method not implemented."); - } - getCallNumber() { - return this.callNumber; - } - getAuthContext() { - if (this.child) { - return this.child.getAuthContext(); - } else { - return null; - } - } - } - exports.LoadBalancingCall = LoadBalancingCall; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/resolving-call.js -var require_resolving_call = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ResolvingCall = undefined; - var call_credentials_1 = require_call_credentials(); - var constants_1 = require_constants9(); - var deadline_1 = require_deadline(); - var metadata_1 = require_metadata(); - var logging = require_logging(); - var control_plane_status_1 = require_control_plane_status(); - var TRACER_NAME2 = "resolving_call"; - - class ResolvingCall { - constructor(channel, method, options, filterStackFactory, callNumber) { - this.channel = channel; - this.method = method; - this.filterStackFactory = filterStackFactory; - this.callNumber = callNumber; - this.child = null; - this.readPending = false; - this.pendingMessage = null; - this.pendingHalfClose = false; - this.ended = false; - this.readFilterPending = false; - this.writeFilterPending = false; - this.pendingChildStatus = null; - this.metadata = null; - this.listener = null; - this.statusWatchers = []; - this.deadlineTimer = setTimeout(() => {}, 0); - this.filterStack = null; - this.deadlineStartTime = null; - this.configReceivedTime = null; - this.childStartTime = null; - this.credentials = call_credentials_1.CallCredentials.createEmpty(); - this.deadline = options.deadline; - this.host = options.host; - if (options.parentCall) { - if (options.flags & constants_1.Propagate.CANCELLATION) { - options.parentCall.on("cancelled", () => { - this.cancelWithStatus(constants_1.Status.CANCELLED, "Cancelled by parent call"); - }); - } - if (options.flags & constants_1.Propagate.DEADLINE) { - this.trace("Propagating deadline from parent: " + options.parentCall.getDeadline()); - this.deadline = (0, deadline_1.minDeadline)(this.deadline, options.parentCall.getDeadline()); - } - } - this.trace("Created"); - this.runDeadlineTimer(); - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "[" + this.callNumber + "] " + text); - } - runDeadlineTimer() { - clearTimeout(this.deadlineTimer); - this.deadlineStartTime = new Date; - this.trace("Deadline: " + (0, deadline_1.deadlineToString)(this.deadline)); - const timeout = (0, deadline_1.getRelativeTimeout)(this.deadline); - if (timeout !== Infinity) { - this.trace("Deadline will be reached in " + timeout + "ms"); - const handleDeadline = () => { - if (!this.deadlineStartTime) { - this.cancelWithStatus(constants_1.Status.DEADLINE_EXCEEDED, "Deadline exceeded"); - return; - } - const deadlineInfo = []; - const deadlineEndTime = new Date; - deadlineInfo.push(`Deadline exceeded after ${(0, deadline_1.formatDateDifference)(this.deadlineStartTime, deadlineEndTime)}`); - if (this.configReceivedTime) { - if (this.configReceivedTime > this.deadlineStartTime) { - deadlineInfo.push(`name resolution: ${(0, deadline_1.formatDateDifference)(this.deadlineStartTime, this.configReceivedTime)}`); - } - if (this.childStartTime) { - if (this.childStartTime > this.configReceivedTime) { - deadlineInfo.push(`metadata filters: ${(0, deadline_1.formatDateDifference)(this.configReceivedTime, this.childStartTime)}`); - } - } else { - deadlineInfo.push("waiting for metadata filters"); - } - } else { - deadlineInfo.push("waiting for name resolution"); - } - if (this.child) { - deadlineInfo.push(...this.child.getDeadlineInfo()); - } - this.cancelWithStatus(constants_1.Status.DEADLINE_EXCEEDED, deadlineInfo.join(",")); - }; - if (timeout <= 0) { - process.nextTick(handleDeadline); - } else { - this.deadlineTimer = setTimeout(handleDeadline, timeout); - } - } - } - outputStatus(status) { - if (!this.ended) { - this.ended = true; - if (!this.filterStack) { - this.filterStack = this.filterStackFactory.createFilter(); - } - clearTimeout(this.deadlineTimer); - const filteredStatus = this.filterStack.receiveTrailers(status); - this.trace("ended with status: code=" + filteredStatus.code + ' details="' + filteredStatus.details + '"'); - this.statusWatchers.forEach((watcher) => watcher(filteredStatus)); - process.nextTick(() => { - var _a2; - (_a2 = this.listener) === null || _a2 === undefined || _a2.onReceiveStatus(filteredStatus); - }); - } - } - sendMessageOnChild(context8, message) { - if (!this.child) { - throw new Error("sendMessageonChild called with child not populated"); - } - const child = this.child; - this.writeFilterPending = true; - this.filterStack.sendMessage(Promise.resolve({ message, flags: context8.flags })).then((filteredMessage) => { - this.writeFilterPending = false; - child.sendMessageWithContext(context8, filteredMessage.message); - if (this.pendingHalfClose) { - child.halfClose(); - } - }, (status) => { - this.cancelWithStatus(status.code, status.details); - }); - } - getConfig() { - if (this.ended) { - return; - } - if (!this.metadata || !this.listener) { - throw new Error("getConfig called before start"); - } - const configResult = this.channel.getConfig(this.method, this.metadata); - if (configResult.type === "NONE") { - this.channel.queueCallForConfig(this); - return; - } else if (configResult.type === "ERROR") { - if (this.metadata.getOptions().waitForReady) { - this.channel.queueCallForConfig(this); - } else { - this.outputStatus(configResult.error); - } - return; - } - this.configReceivedTime = new Date; - const config2 = configResult.config; - if (config2.status !== constants_1.Status.OK) { - const { code, details } = (0, control_plane_status_1.restrictControlPlaneStatusCode)(config2.status, "Failed to route call to method " + this.method); - this.outputStatus({ - code, - details, - metadata: new metadata_1.Metadata - }); - return; - } - if (config2.methodConfig.timeout) { - const configDeadline = new Date; - configDeadline.setSeconds(configDeadline.getSeconds() + config2.methodConfig.timeout.seconds); - configDeadline.setMilliseconds(configDeadline.getMilliseconds() + config2.methodConfig.timeout.nanos / 1e6); - this.deadline = (0, deadline_1.minDeadline)(this.deadline, configDeadline); - this.runDeadlineTimer(); - } - this.filterStackFactory.push(config2.dynamicFilterFactories); - this.filterStack = this.filterStackFactory.createFilter(); - this.filterStack.sendMetadata(Promise.resolve(this.metadata)).then((filteredMetadata) => { - this.child = this.channel.createRetryingCall(config2, this.method, this.host, this.credentials, this.deadline); - this.trace("Created child [" + this.child.getCallNumber() + "]"); - this.childStartTime = new Date; - this.child.start(filteredMetadata, { - onReceiveMetadata: (metadata) => { - this.trace("Received metadata"); - this.listener.onReceiveMetadata(this.filterStack.receiveMetadata(metadata)); - }, - onReceiveMessage: (message) => { - this.trace("Received message"); - this.readFilterPending = true; - this.filterStack.receiveMessage(message).then((filteredMesssage) => { - this.trace("Finished filtering received message"); - this.readFilterPending = false; - this.listener.onReceiveMessage(filteredMesssage); - if (this.pendingChildStatus) { - this.outputStatus(this.pendingChildStatus); - } - }, (status) => { - this.cancelWithStatus(status.code, status.details); - }); - }, - onReceiveStatus: (status) => { - this.trace("Received status"); - if (this.readFilterPending) { - this.pendingChildStatus = status; - } else { - this.outputStatus(status); - } - } - }); - if (this.readPending) { - this.child.startRead(); - } - if (this.pendingMessage) { - this.sendMessageOnChild(this.pendingMessage.context, this.pendingMessage.message); - } else if (this.pendingHalfClose) { - this.child.halfClose(); - } - }, (status) => { - this.outputStatus(status); - }); - } - reportResolverError(status) { - var _a2; - if ((_a2 = this.metadata) === null || _a2 === undefined ? undefined : _a2.getOptions().waitForReady) { - this.channel.queueCallForConfig(this); - } else { - this.outputStatus(status); - } - } - cancelWithStatus(status, details) { - var _a2; - this.trace("cancelWithStatus code: " + status + ' details: "' + details + '"'); - (_a2 = this.child) === null || _a2 === undefined || _a2.cancelWithStatus(status, details); - this.outputStatus({ - code: status, - details, - metadata: new metadata_1.Metadata - }); - } - getPeer() { - var _a2, _b; - return (_b = (_a2 = this.child) === null || _a2 === undefined ? undefined : _a2.getPeer()) !== null && _b !== undefined ? _b : this.channel.getTarget(); - } - start(metadata, listener) { - this.trace("start called"); - this.metadata = metadata.clone(); - this.listener = listener; - this.getConfig(); - } - sendMessageWithContext(context8, message) { - this.trace("write() called with message of length " + message.length); - if (this.child) { - this.sendMessageOnChild(context8, message); - } else { - this.pendingMessage = { context: context8, message }; - } - } - startRead() { - this.trace("startRead called"); - if (this.child) { - this.child.startRead(); - } else { - this.readPending = true; - } - } - halfClose() { - this.trace("halfClose called"); - if (this.child && !this.writeFilterPending) { - this.child.halfClose(); - } else { - this.pendingHalfClose = true; - } - } - setCredentials(credentials) { - this.credentials = credentials; - } - addStatusWatcher(watcher) { - this.statusWatchers.push(watcher); - } - getCallNumber() { - return this.callNumber; - } - getAuthContext() { - if (this.child) { - return this.child.getAuthContext(); - } else { - return null; - } - } - } - exports.ResolvingCall = ResolvingCall; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/retrying-call.js -var require_retrying_call = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RetryingCall = exports.MessageBufferTracker = exports.RetryThrottler = undefined; - var constants_1 = require_constants9(); - var deadline_1 = require_deadline(); - var metadata_1 = require_metadata(); - var logging = require_logging(); - var TRACER_NAME2 = "retrying_call"; - - class RetryThrottler { - constructor(maxTokens, tokenRatio, previousRetryThrottler) { - this.maxTokens = maxTokens; - this.tokenRatio = tokenRatio; - if (previousRetryThrottler) { - this.tokens = previousRetryThrottler.tokens * (maxTokens / previousRetryThrottler.maxTokens); - } else { - this.tokens = maxTokens; - } - } - addCallSucceeded() { - this.tokens = Math.min(this.tokens + this.tokenRatio, this.maxTokens); - } - addCallFailed() { - this.tokens = Math.max(this.tokens - 1, 0); - } - canRetryCall() { - return this.tokens > this.maxTokens / 2; - } - } - exports.RetryThrottler = RetryThrottler; - - class MessageBufferTracker { - constructor(totalLimit, limitPerCall) { - this.totalLimit = totalLimit; - this.limitPerCall = limitPerCall; - this.totalAllocated = 0; - this.allocatedPerCall = new Map; - } - allocate(size, callId) { - var _a2; - const currentPerCall = (_a2 = this.allocatedPerCall.get(callId)) !== null && _a2 !== undefined ? _a2 : 0; - if (this.limitPerCall - currentPerCall < size || this.totalLimit - this.totalAllocated < size) { - return false; - } - this.allocatedPerCall.set(callId, currentPerCall + size); - this.totalAllocated += size; - return true; - } - free(size, callId) { - var _a2; - if (this.totalAllocated < size) { - throw new Error(`Invalid buffer allocation state: call ${callId} freed ${size} > total allocated ${this.totalAllocated}`); - } - this.totalAllocated -= size; - const currentPerCall = (_a2 = this.allocatedPerCall.get(callId)) !== null && _a2 !== undefined ? _a2 : 0; - if (currentPerCall < size) { - throw new Error(`Invalid buffer allocation state: call ${callId} freed ${size} > allocated for call ${currentPerCall}`); - } - this.allocatedPerCall.set(callId, currentPerCall - size); - } - freeAll(callId) { - var _a2; - const currentPerCall = (_a2 = this.allocatedPerCall.get(callId)) !== null && _a2 !== undefined ? _a2 : 0; - if (this.totalAllocated < currentPerCall) { - throw new Error(`Invalid buffer allocation state: call ${callId} allocated ${currentPerCall} > total allocated ${this.totalAllocated}`); - } - this.totalAllocated -= currentPerCall; - this.allocatedPerCall.delete(callId); - } - } - exports.MessageBufferTracker = MessageBufferTracker; - var PREVIONS_RPC_ATTEMPTS_METADATA_KEY = "grpc-previous-rpc-attempts"; - var DEFAULT_MAX_ATTEMPTS_LIMIT = 5; - - class RetryingCall { - constructor(channel, callConfig, methodName, host, credentials, deadline, callNumber, bufferTracker, retryThrottler) { - var _a2; - this.channel = channel; - this.callConfig = callConfig; - this.methodName = methodName; - this.host = host; - this.credentials = credentials; - this.deadline = deadline; - this.callNumber = callNumber; - this.bufferTracker = bufferTracker; - this.retryThrottler = retryThrottler; - this.listener = null; - this.initialMetadata = null; - this.underlyingCalls = []; - this.writeBuffer = []; - this.writeBufferOffset = 0; - this.readStarted = false; - this.transparentRetryUsed = false; - this.attempts = 0; - this.hedgingTimer = null; - this.committedCallIndex = null; - this.initialRetryBackoffSec = 0; - this.nextRetryBackoffSec = 0; - const maxAttemptsLimit = (_a2 = channel.getOptions()["grpc-node.retry_max_attempts_limit"]) !== null && _a2 !== undefined ? _a2 : DEFAULT_MAX_ATTEMPTS_LIMIT; - if (channel.getOptions()["grpc.enable_retries"] === 0) { - this.state = "NO_RETRY"; - this.maxAttempts = 1; - } else if (callConfig.methodConfig.retryPolicy) { - this.state = "RETRY"; - const retryPolicy = callConfig.methodConfig.retryPolicy; - this.nextRetryBackoffSec = this.initialRetryBackoffSec = Number(retryPolicy.initialBackoff.substring(0, retryPolicy.initialBackoff.length - 1)); - this.maxAttempts = Math.min(retryPolicy.maxAttempts, maxAttemptsLimit); - } else if (callConfig.methodConfig.hedgingPolicy) { - this.state = "HEDGING"; - this.maxAttempts = Math.min(callConfig.methodConfig.hedgingPolicy.maxAttempts, maxAttemptsLimit); - } else { - this.state = "TRANSPARENT_ONLY"; - this.maxAttempts = 1; - } - this.startTime = new Date; - } - getDeadlineInfo() { - if (this.underlyingCalls.length === 0) { - return []; - } - const deadlineInfo = []; - const latestCall = this.underlyingCalls[this.underlyingCalls.length - 1]; - if (this.underlyingCalls.length > 1) { - deadlineInfo.push(`previous attempts: ${this.underlyingCalls.length - 1}`); - } - if (latestCall.startTime > this.startTime) { - deadlineInfo.push(`time to current attempt start: ${(0, deadline_1.formatDateDifference)(this.startTime, latestCall.startTime)}`); - } - deadlineInfo.push(...latestCall.call.getDeadlineInfo()); - return deadlineInfo; - } - getCallNumber() { - return this.callNumber; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "[" + this.callNumber + "] " + text); - } - reportStatus(statusObject) { - this.trace("ended with status: code=" + statusObject.code + ' details="' + statusObject.details + '" start time=' + this.startTime.toISOString()); - this.bufferTracker.freeAll(this.callNumber); - this.writeBufferOffset = this.writeBufferOffset + this.writeBuffer.length; - this.writeBuffer = []; - process.nextTick(() => { - var _a2; - (_a2 = this.listener) === null || _a2 === undefined || _a2.onReceiveStatus({ - code: statusObject.code, - details: statusObject.details, - metadata: statusObject.metadata - }); - }); - } - cancelWithStatus(status, details) { - this.trace("cancelWithStatus code: " + status + ' details: "' + details + '"'); - this.reportStatus({ code: status, details, metadata: new metadata_1.Metadata }); - for (const { call } of this.underlyingCalls) { - call.cancelWithStatus(status, details); - } - } - getPeer() { - if (this.committedCallIndex !== null) { - return this.underlyingCalls[this.committedCallIndex].call.getPeer(); - } else { - return "unknown"; - } - } - getBufferEntry(messageIndex) { - var _a2; - return (_a2 = this.writeBuffer[messageIndex - this.writeBufferOffset]) !== null && _a2 !== undefined ? _a2 : { - entryType: "FREED", - allocated: false - }; - } - getNextBufferIndex() { - return this.writeBufferOffset + this.writeBuffer.length; - } - clearSentMessages() { - if (this.state !== "COMMITTED") { - return; - } - let earliestNeededMessageIndex; - if (this.underlyingCalls[this.committedCallIndex].state === "COMPLETED") { - earliestNeededMessageIndex = this.getNextBufferIndex(); - } else { - earliestNeededMessageIndex = this.underlyingCalls[this.committedCallIndex].nextMessageToSend; - } - for (let messageIndex = this.writeBufferOffset;messageIndex < earliestNeededMessageIndex; messageIndex++) { - const bufferEntry = this.getBufferEntry(messageIndex); - if (bufferEntry.allocated) { - this.bufferTracker.free(bufferEntry.message.message.length, this.callNumber); - } - } - this.writeBuffer = this.writeBuffer.slice(earliestNeededMessageIndex - this.writeBufferOffset); - this.writeBufferOffset = earliestNeededMessageIndex; - } - commitCall(index) { - var _a2, _b; - if (this.state === "COMMITTED") { - return; - } - this.trace("Committing call [" + this.underlyingCalls[index].call.getCallNumber() + "] at index " + index); - this.state = "COMMITTED"; - (_b = (_a2 = this.callConfig).onCommitted) === null || _b === undefined || _b.call(_a2); - this.committedCallIndex = index; - for (let i = 0;i < this.underlyingCalls.length; i++) { - if (i === index) { - continue; - } - if (this.underlyingCalls[i].state === "COMPLETED") { - continue; - } - this.underlyingCalls[i].state = "COMPLETED"; - this.underlyingCalls[i].call.cancelWithStatus(constants_1.Status.CANCELLED, "Discarded in favor of other hedged attempt"); - } - this.clearSentMessages(); - } - commitCallWithMostMessages() { - if (this.state === "COMMITTED") { - return; - } - let mostMessages = -1; - let callWithMostMessages = -1; - for (const [index, childCall] of this.underlyingCalls.entries()) { - if (childCall.state === "ACTIVE" && childCall.nextMessageToSend > mostMessages) { - mostMessages = childCall.nextMessageToSend; - callWithMostMessages = index; - } - } - if (callWithMostMessages === -1) { - this.state = "TRANSPARENT_ONLY"; - } else { - this.commitCall(callWithMostMessages); - } - } - isStatusCodeInList(list5, code) { - return list5.some((value) => { - var _a2; - return value === code || value.toString().toLowerCase() === ((_a2 = constants_1.Status[code]) === null || _a2 === undefined ? undefined : _a2.toLowerCase()); - }); - } - getNextRetryJitter() { - return Math.random() * (1.2 - 0.8) + 0.8; - } - getNextRetryBackoffMs() { - var _a2; - const retryPolicy = (_a2 = this.callConfig) === null || _a2 === undefined ? undefined : _a2.methodConfig.retryPolicy; - if (!retryPolicy) { - return 0; - } - const jitter = this.getNextRetryJitter(); - const nextBackoffMs = jitter * this.nextRetryBackoffSec * 1000; - const maxBackoffSec = Number(retryPolicy.maxBackoff.substring(0, retryPolicy.maxBackoff.length - 1)); - this.nextRetryBackoffSec = Math.min(this.nextRetryBackoffSec * retryPolicy.backoffMultiplier, maxBackoffSec); - return nextBackoffMs; - } - maybeRetryCall(pushback, callback) { - if (this.state !== "RETRY") { - callback(false); - return; - } - if (this.attempts >= this.maxAttempts) { - callback(false); - return; - } - let retryDelayMs; - if (pushback === null) { - retryDelayMs = this.getNextRetryBackoffMs(); - } else if (pushback < 0) { - this.state = "TRANSPARENT_ONLY"; - callback(false); - return; - } else { - retryDelayMs = pushback; - this.nextRetryBackoffSec = this.initialRetryBackoffSec; - } - setTimeout(() => { - var _a2, _b; - if (this.state !== "RETRY") { - callback(false); - return; - } - if ((_b = (_a2 = this.retryThrottler) === null || _a2 === undefined ? undefined : _a2.canRetryCall()) !== null && _b !== undefined ? _b : true) { - callback(true); - this.attempts += 1; - this.startNewAttempt(); - } else { - this.trace("Retry attempt denied by throttling policy"); - callback(false); - } - }, retryDelayMs); - } - countActiveCalls() { - let count = 0; - for (const call of this.underlyingCalls) { - if ((call === null || call === undefined ? undefined : call.state) === "ACTIVE") { - count += 1; - } - } - return count; - } - handleProcessedStatus(status, callIndex, pushback) { - var _a2, _b, _c; - switch (this.state) { - case "COMMITTED": - case "NO_RETRY": - case "TRANSPARENT_ONLY": - this.commitCall(callIndex); - this.reportStatus(status); - break; - case "HEDGING": - if (this.isStatusCodeInList((_a2 = this.callConfig.methodConfig.hedgingPolicy.nonFatalStatusCodes) !== null && _a2 !== undefined ? _a2 : [], status.code)) { - (_b = this.retryThrottler) === null || _b === undefined || _b.addCallFailed(); - let delayMs; - if (pushback === null) { - delayMs = 0; - } else if (pushback < 0) { - this.state = "TRANSPARENT_ONLY"; - this.commitCall(callIndex); - this.reportStatus(status); - return; - } else { - delayMs = pushback; - } - setTimeout(() => { - this.maybeStartHedgingAttempt(); - if (this.countActiveCalls() === 0) { - this.commitCall(callIndex); - this.reportStatus(status); - } - }, delayMs); - } else { - this.commitCall(callIndex); - this.reportStatus(status); - } - break; - case "RETRY": - if (this.isStatusCodeInList(this.callConfig.methodConfig.retryPolicy.retryableStatusCodes, status.code)) { - (_c = this.retryThrottler) === null || _c === undefined || _c.addCallFailed(); - this.maybeRetryCall(pushback, (retried) => { - if (!retried) { - this.commitCall(callIndex); - this.reportStatus(status); - } - }); - } else { - this.commitCall(callIndex); - this.reportStatus(status); - } - break; - } - } - getPushback(metadata) { - const mdValue = metadata.get("grpc-retry-pushback-ms"); - if (mdValue.length === 0) { - return null; - } - try { - return parseInt(mdValue[0]); - } catch (e) { - return -1; - } - } - handleChildStatus(status, callIndex) { - var _a2; - if (this.underlyingCalls[callIndex].state === "COMPLETED") { - return; - } - this.trace("state=" + this.state + " handling status with progress " + status.progress + " from child [" + this.underlyingCalls[callIndex].call.getCallNumber() + "] in state " + this.underlyingCalls[callIndex].state); - this.underlyingCalls[callIndex].state = "COMPLETED"; - if (status.code === constants_1.Status.OK) { - (_a2 = this.retryThrottler) === null || _a2 === undefined || _a2.addCallSucceeded(); - this.commitCall(callIndex); - this.reportStatus(status); - return; - } - if (this.state === "NO_RETRY") { - this.commitCall(callIndex); - this.reportStatus(status); - return; - } - if (this.state === "COMMITTED") { - this.reportStatus(status); - return; - } - const pushback = this.getPushback(status.metadata); - switch (status.progress) { - case "NOT_STARTED": - this.startNewAttempt(); - break; - case "REFUSED": - if (this.transparentRetryUsed) { - this.handleProcessedStatus(status, callIndex, pushback); - } else { - this.transparentRetryUsed = true; - this.startNewAttempt(); - } - break; - case "DROP": - this.commitCall(callIndex); - this.reportStatus(status); - break; - case "PROCESSED": - this.handleProcessedStatus(status, callIndex, pushback); - break; - } - } - maybeStartHedgingAttempt() { - if (this.state !== "HEDGING") { - return; - } - if (!this.callConfig.methodConfig.hedgingPolicy) { - return; - } - if (this.attempts >= this.maxAttempts) { - return; - } - this.attempts += 1; - this.startNewAttempt(); - this.maybeStartHedgingTimer(); - } - maybeStartHedgingTimer() { - var _a2, _b, _c; - if (this.hedgingTimer) { - clearTimeout(this.hedgingTimer); - } - if (this.state !== "HEDGING") { - return; - } - if (!this.callConfig.methodConfig.hedgingPolicy) { - return; - } - const hedgingPolicy = this.callConfig.methodConfig.hedgingPolicy; - if (this.attempts >= this.maxAttempts) { - return; - } - const hedgingDelayString = (_a2 = hedgingPolicy.hedgingDelay) !== null && _a2 !== undefined ? _a2 : "0s"; - const hedgingDelaySec = Number(hedgingDelayString.substring(0, hedgingDelayString.length - 1)); - this.hedgingTimer = setTimeout(() => { - this.maybeStartHedgingAttempt(); - }, hedgingDelaySec * 1000); - (_c = (_b = this.hedgingTimer).unref) === null || _c === undefined || _c.call(_b); - } - startNewAttempt() { - const child = this.channel.createLoadBalancingCall(this.callConfig, this.methodName, this.host, this.credentials, this.deadline); - this.trace("Created child call [" + child.getCallNumber() + "] for attempt " + this.attempts); - const index = this.underlyingCalls.length; - this.underlyingCalls.push({ - state: "ACTIVE", - call: child, - nextMessageToSend: 0, - startTime: new Date - }); - const previousAttempts = this.attempts - 1; - const initialMetadata = this.initialMetadata.clone(); - if (previousAttempts > 0) { - initialMetadata.set(PREVIONS_RPC_ATTEMPTS_METADATA_KEY, `${previousAttempts}`); - } - let receivedMetadata = false; - child.start(initialMetadata, { - onReceiveMetadata: (metadata) => { - this.trace("Received metadata from child [" + child.getCallNumber() + "]"); - this.commitCall(index); - receivedMetadata = true; - if (previousAttempts > 0) { - metadata.set(PREVIONS_RPC_ATTEMPTS_METADATA_KEY, `${previousAttempts}`); - } - if (this.underlyingCalls[index].state === "ACTIVE") { - this.listener.onReceiveMetadata(metadata); - } - }, - onReceiveMessage: (message) => { - this.trace("Received message from child [" + child.getCallNumber() + "]"); - this.commitCall(index); - if (this.underlyingCalls[index].state === "ACTIVE") { - this.listener.onReceiveMessage(message); - } - }, - onReceiveStatus: (status) => { - this.trace("Received status from child [" + child.getCallNumber() + "]"); - if (!receivedMetadata && previousAttempts > 0) { - status.metadata.set(PREVIONS_RPC_ATTEMPTS_METADATA_KEY, `${previousAttempts}`); - } - this.handleChildStatus(status, index); - } - }); - this.sendNextChildMessage(index); - if (this.readStarted) { - child.startRead(); - } - } - start(metadata, listener) { - this.trace("start called"); - this.listener = listener; - this.initialMetadata = metadata; - this.attempts += 1; - this.startNewAttempt(); - this.maybeStartHedgingTimer(); - } - handleChildWriteCompleted(childIndex, messageIndex) { - var _a2, _b; - (_b = (_a2 = this.getBufferEntry(messageIndex)).callback) === null || _b === undefined || _b.call(_a2); - this.clearSentMessages(); - const childCall = this.underlyingCalls[childIndex]; - childCall.nextMessageToSend += 1; - this.sendNextChildMessage(childIndex); - } - sendNextChildMessage(childIndex) { - const childCall = this.underlyingCalls[childIndex]; - if (childCall.state === "COMPLETED") { - return; - } - const messageIndex = childCall.nextMessageToSend; - if (this.getBufferEntry(messageIndex)) { - const bufferEntry = this.getBufferEntry(messageIndex); - switch (bufferEntry.entryType) { - case "MESSAGE": - childCall.call.sendMessageWithContext({ - callback: (error48) => { - this.handleChildWriteCompleted(childIndex, messageIndex); - } - }, bufferEntry.message.message); - const nextEntry = this.getBufferEntry(messageIndex + 1); - if (nextEntry.entryType === "HALF_CLOSE") { - this.trace("Sending halfClose immediately after message to child [" + childCall.call.getCallNumber() + "] - optimizing for unary/final message"); - childCall.nextMessageToSend += 1; - childCall.call.halfClose(); - } - break; - case "HALF_CLOSE": - childCall.nextMessageToSend += 1; - childCall.call.halfClose(); - break; - case "FREED": - break; - } - } - } - sendMessageWithContext(context8, message) { - this.trace("write() called with message of length " + message.length); - const writeObj = { - message, - flags: context8.flags - }; - const messageIndex = this.getNextBufferIndex(); - const bufferEntry = { - entryType: "MESSAGE", - message: writeObj, - allocated: this.bufferTracker.allocate(message.length, this.callNumber) - }; - this.writeBuffer.push(bufferEntry); - if (bufferEntry.allocated) { - process.nextTick(() => { - var _a2; - (_a2 = context8.callback) === null || _a2 === undefined || _a2.call(context8); - }); - for (const [callIndex, call] of this.underlyingCalls.entries()) { - if (call.state === "ACTIVE" && call.nextMessageToSend === messageIndex) { - call.call.sendMessageWithContext({ - callback: (error48) => { - this.handleChildWriteCompleted(callIndex, messageIndex); - } - }, message); - } - } - } else { - this.commitCallWithMostMessages(); - if (this.committedCallIndex === null) { - return; - } - const call = this.underlyingCalls[this.committedCallIndex]; - bufferEntry.callback = context8.callback; - if (call.state === "ACTIVE" && call.nextMessageToSend === messageIndex) { - call.call.sendMessageWithContext({ - callback: (error48) => { - this.handleChildWriteCompleted(this.committedCallIndex, messageIndex); - } - }, message); - } - } - } - startRead() { - this.trace("startRead called"); - this.readStarted = true; - for (const underlyingCall of this.underlyingCalls) { - if ((underlyingCall === null || underlyingCall === undefined ? undefined : underlyingCall.state) === "ACTIVE") { - underlyingCall.call.startRead(); - } - } - } - halfClose() { - this.trace("halfClose called"); - const halfCloseIndex = this.getNextBufferIndex(); - this.writeBuffer.push({ - entryType: "HALF_CLOSE", - allocated: false - }); - for (const call of this.underlyingCalls) { - if ((call === null || call === undefined ? undefined : call.state) === "ACTIVE") { - if (call.nextMessageToSend === halfCloseIndex || call.nextMessageToSend === halfCloseIndex - 1) { - this.trace("Sending halfClose immediately to child [" + call.call.getCallNumber() + "] - all messages already sent"); - call.nextMessageToSend += 1; - call.call.halfClose(); - } - } - } - } - setCredentials(newCredentials) { - throw new Error("Method not implemented."); - } - getMethod() { - return this.methodName; - } - getHost() { - return this.host; - } - getAuthContext() { - if (this.committedCallIndex !== null) { - return this.underlyingCalls[this.committedCallIndex].call.getAuthContext(); - } else { - return null; - } - } - } - exports.RetryingCall = RetryingCall; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js -var require_subchannel_interface = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseSubchannelWrapper = undefined; - - class BaseSubchannelWrapper { - constructor(child) { - this.child = child; - this.healthy = true; - this.healthListeners = new Set; - this.refcount = 0; - this.dataWatchers = new Set; - child.addHealthStateWatcher((childHealthy) => { - if (this.healthy) { - this.updateHealthListeners(); - } - }); - } - updateHealthListeners() { - for (const listener of this.healthListeners) { - listener(this.isHealthy()); - } - } - getConnectivityState() { - return this.child.getConnectivityState(); - } - addConnectivityStateListener(listener) { - this.child.addConnectivityStateListener(listener); - } - removeConnectivityStateListener(listener) { - this.child.removeConnectivityStateListener(listener); - } - startConnecting() { - this.child.startConnecting(); - } - getAddress() { - return this.child.getAddress(); - } - throttleKeepalive(newKeepaliveTime) { - this.child.throttleKeepalive(newKeepaliveTime); - } - ref() { - this.child.ref(); - this.refcount += 1; - } - unref() { - this.child.unref(); - this.refcount -= 1; - if (this.refcount === 0) { - this.destroy(); - } - } - destroy() { - for (const watcher of this.dataWatchers) { - watcher.destroy(); - } - } - getChannelzRef() { - return this.child.getChannelzRef(); - } - isHealthy() { - return this.healthy && this.child.isHealthy(); - } - addHealthStateWatcher(listener) { - this.healthListeners.add(listener); - } - removeHealthStateWatcher(listener) { - this.healthListeners.delete(listener); - } - addDataWatcher(dataWatcher) { - dataWatcher.setSubchannel(this.getRealSubchannel()); - this.dataWatchers.add(dataWatcher); - } - setHealthy(healthy) { - if (healthy !== this.healthy) { - this.healthy = healthy; - if (this.child.isHealthy()) { - this.updateHealthListeners(); - } - } - } - getRealSubchannel() { - return this.child.getRealSubchannel(); - } - realSubchannelEquals(other) { - return this.getRealSubchannel() === other.getRealSubchannel(); - } - getCallCredentials() { - return this.child.getCallCredentials(); - } - getChannel() { - return this.child.getChannel(); - } - } - exports.BaseSubchannelWrapper = BaseSubchannelWrapper; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/internal-channel.js -var require_internal_channel = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InternalChannel = exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = undefined; - var channel_credentials_1 = require_channel_credentials(); - var resolving_load_balancer_1 = require_resolving_load_balancer(); - var subchannel_pool_1 = require_subchannel_pool(); - var picker_1 = require_picker(); - var metadata_1 = require_metadata(); - var constants_1 = require_constants9(); - var filter_stack_1 = require_filter_stack(); - var compression_filter_1 = require_compression_filter(); - var resolver_1 = require_resolver(); - var logging_1 = require_logging(); - var http_proxy_1 = require_http_proxy(); - var uri_parser_1 = require_uri_parser(); - var connectivity_state_1 = require_connectivity_state(); - var channelz_1 = require_channelz(); - var load_balancing_call_1 = require_load_balancing_call(); - var deadline_1 = require_deadline(); - var resolving_call_1 = require_resolving_call(); - var call_number_1 = require_call_number(); - var control_plane_status_1 = require_control_plane_status(); - var retrying_call_1 = require_retrying_call(); - var subchannel_interface_1 = require_subchannel_interface(); - var MAX_TIMEOUT_TIME = 2147483647; - var MIN_IDLE_TIMEOUT_MS = 1000; - var DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1000; - var RETRY_THROTTLER_MAP = new Map; - var DEFAULT_RETRY_BUFFER_SIZE_BYTES = 1 << 24; - var DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES = 1 << 20; - - class ChannelSubchannelWrapper extends subchannel_interface_1.BaseSubchannelWrapper { - constructor(childSubchannel, channel) { - super(childSubchannel); - this.channel = channel; - this.refCount = 0; - this.subchannelStateListener = (subchannel, previousState, newState, keepaliveTime) => { - channel.throttleKeepalive(keepaliveTime); - }; - } - ref() { - if (this.refCount === 0) { - this.child.addConnectivityStateListener(this.subchannelStateListener); - this.channel.addWrappedSubchannel(this); - } - this.child.ref(); - this.refCount += 1; - } - unref() { - this.child.unref(); - this.refCount -= 1; - if (this.refCount <= 0) { - this.child.removeConnectivityStateListener(this.subchannelStateListener); - this.channel.removeWrappedSubchannel(this); - } - } - } - - class ShutdownPicker { - pick(pickArgs) { - return { - pickResultType: picker_1.PickResultType.DROP, - status: { - code: constants_1.Status.UNAVAILABLE, - details: "Channel closed before call started", - metadata: new metadata_1.Metadata - }, - subchannel: null, - onCallStarted: null, - onCallEnded: null - }; - } - } - exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = "grpc.internal.no_subchannel"; - - class ChannelzInfoTracker { - constructor(target) { - this.target = target; - this.trace = new channelz_1.ChannelzTrace; - this.callTracker = new channelz_1.ChannelzCallTracker; - this.childrenTracker = new channelz_1.ChannelzChildrenTracker; - this.state = connectivity_state_1.ConnectivityState.IDLE; - } - getChannelzInfoCallback() { - return () => { - return { - target: this.target, - state: this.state, - trace: this.trace, - callTracker: this.callTracker, - children: this.childrenTracker.getChildLists() - }; - }; - } - } - - class InternalChannel { - constructor(target, credentials, options) { - var _a2, _b, _c, _d, _e, _f; - this.credentials = credentials; - this.options = options; - this.connectivityState = connectivity_state_1.ConnectivityState.IDLE; - this.currentPicker = new picker_1.UnavailablePicker; - this.configSelectionQueue = []; - this.pickQueue = []; - this.connectivityStateWatchers = []; - this.callRefTimer = null; - this.configSelector = null; - this.currentResolutionError = null; - this.wrappedSubchannels = new Set; - this.callCount = 0; - this.idleTimer = null; - this.channelzEnabled = true; - this.randomChannelId = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); - if (typeof target !== "string") { - throw new TypeError("Channel target must be a string"); - } - if (!(credentials instanceof channel_credentials_1.ChannelCredentials)) { - throw new TypeError("Channel credentials must be a ChannelCredentials object"); - } - if (options) { - if (typeof options !== "object") { - throw new TypeError("Channel options must be an object"); - } - } - this.channelzInfoTracker = new ChannelzInfoTracker(target); - const originalTargetUri = (0, uri_parser_1.parseUri)(target); - if (originalTargetUri === null) { - throw new Error(`Could not parse target name "${target}"`); - } - const defaultSchemeMapResult = (0, resolver_1.mapUriDefaultScheme)(originalTargetUri); - if (defaultSchemeMapResult === null) { - throw new Error(`Could not find a default scheme for target name "${target}"`); - } - if (this.options["grpc.enable_channelz"] === 0) { - this.channelzEnabled = false; - } - this.channelzRef = (0, channelz_1.registerChannelzChannel)(target, this.channelzInfoTracker.getChannelzInfoCallback(), this.channelzEnabled); - if (this.channelzEnabled) { - this.channelzInfoTracker.trace.addTrace("CT_INFO", "Channel created"); - } - if (this.options["grpc.default_authority"]) { - this.defaultAuthority = this.options["grpc.default_authority"]; - } else { - this.defaultAuthority = (0, resolver_1.getDefaultAuthority)(defaultSchemeMapResult); - } - const proxyMapResult = (0, http_proxy_1.mapProxyName)(defaultSchemeMapResult, options); - this.target = proxyMapResult.target; - this.options = Object.assign({}, this.options, proxyMapResult.extraOptions); - this.subchannelPool = (0, subchannel_pool_1.getSubchannelPool)(((_a2 = this.options["grpc.use_local_subchannel_pool"]) !== null && _a2 !== undefined ? _a2 : 0) === 0); - this.retryBufferTracker = new retrying_call_1.MessageBufferTracker((_b = this.options["grpc.retry_buffer_size"]) !== null && _b !== undefined ? _b : DEFAULT_RETRY_BUFFER_SIZE_BYTES, (_c = this.options["grpc.per_rpc_retry_buffer_size"]) !== null && _c !== undefined ? _c : DEFAULT_PER_RPC_RETRY_BUFFER_SIZE_BYTES); - this.keepaliveTime = (_d = this.options["grpc.keepalive_time_ms"]) !== null && _d !== undefined ? _d : -1; - this.idleTimeoutMs = Math.max((_e = this.options["grpc.client_idle_timeout_ms"]) !== null && _e !== undefined ? _e : DEFAULT_IDLE_TIMEOUT_MS, MIN_IDLE_TIMEOUT_MS); - const channelControlHelper = { - createSubchannel: (subchannelAddress, subchannelArgs) => { - const finalSubchannelArgs = {}; - for (const [key, value] of Object.entries(subchannelArgs)) { - if (!key.startsWith(exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX)) { - finalSubchannelArgs[key] = value; - } - } - const subchannel = this.subchannelPool.getOrCreateSubchannel(this.target, subchannelAddress, finalSubchannelArgs, this.credentials); - subchannel.throttleKeepalive(this.keepaliveTime); - if (this.channelzEnabled) { - this.channelzInfoTracker.trace.addTrace("CT_INFO", "Created subchannel or used existing subchannel", subchannel.getChannelzRef()); - } - const wrappedSubchannel = new ChannelSubchannelWrapper(subchannel, this); - return wrappedSubchannel; - }, - updateState: (connectivityState, picker) => { - this.currentPicker = picker; - const queueCopy = this.pickQueue.slice(); - this.pickQueue = []; - if (queueCopy.length > 0) { - this.callRefTimerUnref(); - } - for (const call of queueCopy) { - call.doPick(); - } - this.updateState(connectivityState); - }, - requestReresolution: () => { - throw new Error("Resolving load balancer should never call requestReresolution"); - }, - addChannelzChild: (child) => { - if (this.channelzEnabled) { - this.channelzInfoTracker.childrenTracker.refChild(child); - } - }, - removeChannelzChild: (child) => { - if (this.channelzEnabled) { - this.channelzInfoTracker.childrenTracker.unrefChild(child); - } - } - }; - this.resolvingLoadBalancer = new resolving_load_balancer_1.ResolvingLoadBalancer(this.target, channelControlHelper, this.options, (serviceConfig, configSelector) => { - var _a3; - if (serviceConfig.retryThrottling) { - RETRY_THROTTLER_MAP.set(this.getTarget(), new retrying_call_1.RetryThrottler(serviceConfig.retryThrottling.maxTokens, serviceConfig.retryThrottling.tokenRatio, RETRY_THROTTLER_MAP.get(this.getTarget()))); - } else { - RETRY_THROTTLER_MAP.delete(this.getTarget()); - } - if (this.channelzEnabled) { - this.channelzInfoTracker.trace.addTrace("CT_INFO", "Address resolution succeeded"); - } - (_a3 = this.configSelector) === null || _a3 === undefined || _a3.unref(); - this.configSelector = configSelector; - this.currentResolutionError = null; - process.nextTick(() => { - const localQueue = this.configSelectionQueue; - this.configSelectionQueue = []; - if (localQueue.length > 0) { - this.callRefTimerUnref(); - } - for (const call of localQueue) { - call.getConfig(); - } - }); - }, (status) => { - if (this.channelzEnabled) { - this.channelzInfoTracker.trace.addTrace("CT_WARNING", "Address resolution failed with code " + status.code + ' and details "' + status.details + '"'); - } - if (this.configSelectionQueue.length > 0) { - this.trace("Name resolution failed with calls queued for config selection"); - } - if (this.configSelector === null) { - this.currentResolutionError = Object.assign(Object.assign({}, (0, control_plane_status_1.restrictControlPlaneStatusCode)(status.code, status.details)), { metadata: status.metadata }); - } - const localQueue = this.configSelectionQueue; - this.configSelectionQueue = []; - if (localQueue.length > 0) { - this.callRefTimerUnref(); - } - for (const call of localQueue) { - call.reportResolverError(status); - } - }); - this.filterStackFactory = new filter_stack_1.FilterStackFactory([ - new compression_filter_1.CompressionFilterFactory(this, this.options) - ]); - this.trace("Channel constructed with options " + JSON.stringify(options, undefined, 2)); - const error48 = new Error; - if ((0, logging_1.isTracerEnabled)("channel_stacktrace")) { - (0, logging_1.trace)(constants_1.LogVerbosity.DEBUG, "channel_stacktrace", "(" + this.channelzRef.id + ") " + `Channel constructed -` + ((_f = error48.stack) === null || _f === undefined ? undefined : _f.substring(error48.stack.indexOf(` -`) + 1))); - } - this.lastActivityTimestamp = new Date; - } - trace(text, verbosityOverride) { - (0, logging_1.trace)(verbosityOverride !== null && verbosityOverride !== undefined ? verbosityOverride : constants_1.LogVerbosity.DEBUG, "channel", "(" + this.channelzRef.id + ") " + (0, uri_parser_1.uriToString)(this.target) + " " + text); - } - callRefTimerRef() { - var _a2, _b, _c, _d; - if (!this.callRefTimer) { - this.callRefTimer = setInterval(() => {}, MAX_TIMEOUT_TIME); - } - if (!((_b = (_a2 = this.callRefTimer).hasRef) === null || _b === undefined ? undefined : _b.call(_a2))) { - this.trace("callRefTimer.ref | configSelectionQueue.length=" + this.configSelectionQueue.length + " pickQueue.length=" + this.pickQueue.length); - (_d = (_c = this.callRefTimer).ref) === null || _d === undefined || _d.call(_c); - } - } - callRefTimerUnref() { - var _a2, _b, _c; - if (!((_a2 = this.callRefTimer) === null || _a2 === undefined ? undefined : _a2.hasRef) || this.callRefTimer.hasRef()) { - this.trace("callRefTimer.unref | configSelectionQueue.length=" + this.configSelectionQueue.length + " pickQueue.length=" + this.pickQueue.length); - (_c = (_b = this.callRefTimer) === null || _b === undefined ? undefined : _b.unref) === null || _c === undefined || _c.call(_b); - } - } - removeConnectivityStateWatcher(watcherObject) { - const watcherIndex = this.connectivityStateWatchers.findIndex((value) => value === watcherObject); - if (watcherIndex >= 0) { - this.connectivityStateWatchers.splice(watcherIndex, 1); - } - } - updateState(newState) { - (0, logging_1.trace)(constants_1.LogVerbosity.DEBUG, "connectivity_state", "(" + this.channelzRef.id + ") " + (0, uri_parser_1.uriToString)(this.target) + " " + connectivity_state_1.ConnectivityState[this.connectivityState] + " -> " + connectivity_state_1.ConnectivityState[newState]); - if (this.channelzEnabled) { - this.channelzInfoTracker.trace.addTrace("CT_INFO", "Connectivity state change to " + connectivity_state_1.ConnectivityState[newState]); - } - this.connectivityState = newState; - this.channelzInfoTracker.state = newState; - const watchersCopy = this.connectivityStateWatchers.slice(); - for (const watcherObject of watchersCopy) { - if (newState !== watcherObject.currentState) { - if (watcherObject.timer) { - clearTimeout(watcherObject.timer); - } - this.removeConnectivityStateWatcher(watcherObject); - watcherObject.callback(); - } - } - if (newState !== connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) { - this.currentResolutionError = null; - } - } - throttleKeepalive(newKeepaliveTime) { - if (newKeepaliveTime > this.keepaliveTime) { - this.keepaliveTime = newKeepaliveTime; - for (const wrappedSubchannel of this.wrappedSubchannels) { - wrappedSubchannel.throttleKeepalive(newKeepaliveTime); - } - } - } - addWrappedSubchannel(wrappedSubchannel) { - this.wrappedSubchannels.add(wrappedSubchannel); - } - removeWrappedSubchannel(wrappedSubchannel) { - this.wrappedSubchannels.delete(wrappedSubchannel); - } - doPick(metadata, extraPickInfo) { - return this.currentPicker.pick({ - metadata, - extraPickInfo - }); - } - queueCallForPick(call) { - this.pickQueue.push(call); - this.callRefTimerRef(); - } - getConfig(method, metadata) { - if (this.connectivityState !== connectivity_state_1.ConnectivityState.SHUTDOWN) { - this.resolvingLoadBalancer.exitIdle(); - } - if (this.configSelector) { - return { - type: "SUCCESS", - config: this.configSelector.invoke(method, metadata, this.randomChannelId) - }; - } else { - if (this.currentResolutionError) { - return { - type: "ERROR", - error: this.currentResolutionError - }; - } else { - return { - type: "NONE" - }; - } - } - } - queueCallForConfig(call) { - this.configSelectionQueue.push(call); - this.callRefTimerRef(); - } - enterIdle() { - this.resolvingLoadBalancer.destroy(); - this.updateState(connectivity_state_1.ConnectivityState.IDLE); - this.currentPicker = new picker_1.QueuePicker(this.resolvingLoadBalancer); - if (this.idleTimer) { - clearTimeout(this.idleTimer); - this.idleTimer = null; - } - if (this.callRefTimer) { - clearInterval(this.callRefTimer); - this.callRefTimer = null; - } - } - startIdleTimeout(timeoutMs) { - var _a2, _b; - this.idleTimer = setTimeout(() => { - if (this.callCount > 0) { - this.startIdleTimeout(this.idleTimeoutMs); - return; - } - const now2 = new Date; - const timeSinceLastActivity = now2.valueOf() - this.lastActivityTimestamp.valueOf(); - if (timeSinceLastActivity >= this.idleTimeoutMs) { - this.trace("Idle timer triggered after " + this.idleTimeoutMs + "ms of inactivity"); - this.enterIdle(); - } else { - this.startIdleTimeout(this.idleTimeoutMs - timeSinceLastActivity); - } - }, timeoutMs); - (_b = (_a2 = this.idleTimer).unref) === null || _b === undefined || _b.call(_a2); - } - maybeStartIdleTimer() { - if (this.connectivityState !== connectivity_state_1.ConnectivityState.SHUTDOWN && !this.idleTimer) { - this.startIdleTimeout(this.idleTimeoutMs); - } - } - onCallStart() { - if (this.channelzEnabled) { - this.channelzInfoTracker.callTracker.addCallStarted(); - } - this.callCount += 1; - } - onCallEnd(status) { - if (this.channelzEnabled) { - if (status.code === constants_1.Status.OK) { - this.channelzInfoTracker.callTracker.addCallSucceeded(); - } else { - this.channelzInfoTracker.callTracker.addCallFailed(); - } - } - this.callCount -= 1; - this.lastActivityTimestamp = new Date; - this.maybeStartIdleTimer(); - } - createLoadBalancingCall(callConfig, method, host, credentials, deadline) { - const callNumber = (0, call_number_1.getNextCallNumber)(); - this.trace("createLoadBalancingCall [" + callNumber + '] method="' + method + '"'); - return new load_balancing_call_1.LoadBalancingCall(this, callConfig, method, host, credentials, deadline, callNumber); - } - createRetryingCall(callConfig, method, host, credentials, deadline) { - const callNumber = (0, call_number_1.getNextCallNumber)(); - this.trace("createRetryingCall [" + callNumber + '] method="' + method + '"'); - return new retrying_call_1.RetryingCall(this, callConfig, method, host, credentials, deadline, callNumber, this.retryBufferTracker, RETRY_THROTTLER_MAP.get(this.getTarget())); - } - createResolvingCall(method, deadline, host, parentCall, propagateFlags) { - const callNumber = (0, call_number_1.getNextCallNumber)(); - this.trace("createResolvingCall [" + callNumber + '] method="' + method + '", deadline=' + (0, deadline_1.deadlineToString)(deadline)); - const finalOptions = { - deadline, - flags: propagateFlags !== null && propagateFlags !== undefined ? propagateFlags : constants_1.Propagate.DEFAULTS, - host: host !== null && host !== undefined ? host : this.defaultAuthority, - parentCall - }; - const call = new resolving_call_1.ResolvingCall(this, method, finalOptions, this.filterStackFactory.clone(), callNumber); - this.onCallStart(); - call.addStatusWatcher((status) => { - this.onCallEnd(status); - }); - return call; - } - close() { - var _a2; - this.resolvingLoadBalancer.destroy(); - this.updateState(connectivity_state_1.ConnectivityState.SHUTDOWN); - this.currentPicker = new ShutdownPicker; - for (const call of this.configSelectionQueue) { - call.cancelWithStatus(constants_1.Status.UNAVAILABLE, "Channel closed before call started"); - } - this.configSelectionQueue = []; - for (const call of this.pickQueue) { - call.cancelWithStatus(constants_1.Status.UNAVAILABLE, "Channel closed before call started"); - } - this.pickQueue = []; - if (this.callRefTimer) { - clearInterval(this.callRefTimer); - } - if (this.idleTimer) { - clearTimeout(this.idleTimer); - } - if (this.channelzEnabled) { - (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - } - this.subchannelPool.unrefUnusedSubchannels(); - (_a2 = this.configSelector) === null || _a2 === undefined || _a2.unref(); - this.configSelector = null; - } - getTarget() { - return (0, uri_parser_1.uriToString)(this.target); - } - getConnectivityState(tryToConnect) { - const connectivityState = this.connectivityState; - if (tryToConnect) { - this.resolvingLoadBalancer.exitIdle(); - this.lastActivityTimestamp = new Date; - this.maybeStartIdleTimer(); - } - return connectivityState; - } - watchConnectivityState(currentState, deadline, callback) { - if (this.connectivityState === connectivity_state_1.ConnectivityState.SHUTDOWN) { - throw new Error("Channel has been shut down"); - } - let timer = null; - if (deadline !== Infinity) { - const deadlineDate = deadline instanceof Date ? deadline : new Date(deadline); - const now2 = new Date; - if (deadline === -Infinity || deadlineDate <= now2) { - process.nextTick(callback, new Error("Deadline passed without connectivity state change")); - return; - } - timer = setTimeout(() => { - this.removeConnectivityStateWatcher(watcherObject); - callback(new Error("Deadline passed without connectivity state change")); - }, deadlineDate.getTime() - now2.getTime()); - } - const watcherObject = { - currentState, - callback, - timer - }; - this.connectivityStateWatchers.push(watcherObject); - } - getChannelzRef() { - return this.channelzRef; - } - createCall(method, deadline, host, parentCall, propagateFlags) { - if (typeof method !== "string") { - throw new TypeError("Channel#createCall: method must be a string"); - } - if (!(typeof deadline === "number" || deadline instanceof Date)) { - throw new TypeError("Channel#createCall: deadline must be a number or Date"); - } - if (this.connectivityState === connectivity_state_1.ConnectivityState.SHUTDOWN) { - throw new Error("Channel has been shut down"); - } - return this.createResolvingCall(method, deadline, host, parentCall, propagateFlags); - } - getOptions() { - return this.options; - } - } - exports.InternalChannel = InternalChannel; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/channel.js -var require_channel = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ChannelImplementation = undefined; - var channel_credentials_1 = require_channel_credentials(); - var internal_channel_1 = require_internal_channel(); - - class ChannelImplementation { - constructor(target, credentials, options) { - if (typeof target !== "string") { - throw new TypeError("Channel target must be a string"); - } - if (!(credentials instanceof channel_credentials_1.ChannelCredentials)) { - throw new TypeError("Channel credentials must be a ChannelCredentials object"); - } - if (options) { - if (typeof options !== "object") { - throw new TypeError("Channel options must be an object"); - } - } - this.internalChannel = new internal_channel_1.InternalChannel(target, credentials, options); - } - close() { - this.internalChannel.close(); - } - getTarget() { - return this.internalChannel.getTarget(); - } - getConnectivityState(tryToConnect) { - return this.internalChannel.getConnectivityState(tryToConnect); - } - watchConnectivityState(currentState, deadline, callback) { - this.internalChannel.watchConnectivityState(currentState, deadline, callback); - } - getChannelzRef() { - return this.internalChannel.getChannelzRef(); - } - createCall(method, deadline, host, parentCall, propagateFlags) { - if (typeof method !== "string") { - throw new TypeError("Channel#createCall: method must be a string"); - } - if (!(typeof deadline === "number" || deadline instanceof Date)) { - throw new TypeError("Channel#createCall: deadline must be a number or Date"); - } - return this.internalChannel.createCall(method, deadline, host, parentCall, propagateFlags); - } - } - exports.ChannelImplementation = ChannelImplementation; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/server-call.js -var require_server_call = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ServerDuplexStreamImpl = exports.ServerWritableStreamImpl = exports.ServerReadableStreamImpl = exports.ServerUnaryCallImpl = undefined; - exports.serverErrorToStatus = serverErrorToStatus; - var events_1 = __require("events"); - var stream_1 = __require("stream"); - var constants_1 = require_constants9(); - var metadata_1 = require_metadata(); - function serverErrorToStatus(error48, overrideTrailers) { - var _a2; - const status = { - code: constants_1.Status.UNKNOWN, - details: "message" in error48 ? error48.message : "Unknown Error", - metadata: (_a2 = overrideTrailers !== null && overrideTrailers !== undefined ? overrideTrailers : error48.metadata) !== null && _a2 !== undefined ? _a2 : null - }; - if ("code" in error48 && typeof error48.code === "number" && Number.isInteger(error48.code)) { - status.code = error48.code; - if ("details" in error48 && typeof error48.details === "string") { - status.details = error48.details; - } - } - return status; - } - - class ServerUnaryCallImpl extends events_1.EventEmitter { - constructor(path, call, metadata, request) { - super(); - this.path = path; - this.call = call; - this.metadata = metadata; - this.request = request; - this.cancelled = false; - } - getPeer() { - return this.call.getPeer(); - } - sendMetadata(responseMetadata) { - this.call.sendMetadata(responseMetadata); - } - getDeadline() { - return this.call.getDeadline(); - } - getPath() { - return this.path; - } - getHost() { - return this.call.getHost(); - } - getAuthContext() { - return this.call.getAuthContext(); - } - getMetricsRecorder() { - return this.call.getMetricsRecorder(); - } - } - exports.ServerUnaryCallImpl = ServerUnaryCallImpl; - - class ServerReadableStreamImpl extends stream_1.Readable { - constructor(path, call, metadata) { - super({ objectMode: true }); - this.path = path; - this.call = call; - this.metadata = metadata; - this.cancelled = false; - } - _read(size) { - this.call.startRead(); - } - getPeer() { - return this.call.getPeer(); - } - sendMetadata(responseMetadata) { - this.call.sendMetadata(responseMetadata); - } - getDeadline() { - return this.call.getDeadline(); - } - getPath() { - return this.path; - } - getHost() { - return this.call.getHost(); - } - getAuthContext() { - return this.call.getAuthContext(); - } - getMetricsRecorder() { - return this.call.getMetricsRecorder(); - } - } - exports.ServerReadableStreamImpl = ServerReadableStreamImpl; - - class ServerWritableStreamImpl extends stream_1.Writable { - constructor(path, call, metadata, request) { - super({ objectMode: true }); - this.path = path; - this.call = call; - this.metadata = metadata; - this.request = request; - this.pendingStatus = { - code: constants_1.Status.OK, - details: "OK" - }; - this.cancelled = false; - this.trailingMetadata = new metadata_1.Metadata; - this.on("error", (err) => { - this.pendingStatus = serverErrorToStatus(err); - this.end(); - }); - } - getPeer() { - return this.call.getPeer(); - } - sendMetadata(responseMetadata) { - this.call.sendMetadata(responseMetadata); - } - getDeadline() { - return this.call.getDeadline(); - } - getPath() { - return this.path; - } - getHost() { - return this.call.getHost(); - } - getAuthContext() { - return this.call.getAuthContext(); - } - getMetricsRecorder() { - return this.call.getMetricsRecorder(); - } - _write(chunk, encoding, callback) { - this.call.sendMessage(chunk, callback); - } - _final(callback) { - var _a2; - callback(null); - this.call.sendStatus(Object.assign(Object.assign({}, this.pendingStatus), { metadata: (_a2 = this.pendingStatus.metadata) !== null && _a2 !== undefined ? _a2 : this.trailingMetadata })); - } - end(metadata) { - if (metadata) { - this.trailingMetadata = metadata; - } - return super.end(); - } - } - exports.ServerWritableStreamImpl = ServerWritableStreamImpl; - - class ServerDuplexStreamImpl extends stream_1.Duplex { - constructor(path, call, metadata) { - super({ objectMode: true }); - this.path = path; - this.call = call; - this.metadata = metadata; - this.pendingStatus = { - code: constants_1.Status.OK, - details: "OK" - }; - this.cancelled = false; - this.trailingMetadata = new metadata_1.Metadata; - this.on("error", (err) => { - this.pendingStatus = serverErrorToStatus(err); - this.end(); - }); - } - getPeer() { - return this.call.getPeer(); - } - sendMetadata(responseMetadata) { - this.call.sendMetadata(responseMetadata); - } - getDeadline() { - return this.call.getDeadline(); - } - getPath() { - return this.path; - } - getHost() { - return this.call.getHost(); - } - getAuthContext() { - return this.call.getAuthContext(); - } - getMetricsRecorder() { - return this.call.getMetricsRecorder(); - } - _read(size) { - this.call.startRead(); - } - _write(chunk, encoding, callback) { - this.call.sendMessage(chunk, callback); - } - _final(callback) { - var _a2; - callback(null); - this.call.sendStatus(Object.assign(Object.assign({}, this.pendingStatus), { metadata: (_a2 = this.pendingStatus.metadata) !== null && _a2 !== undefined ? _a2 : this.trailingMetadata })); - } - end(metadata) { - if (metadata) { - this.trailingMetadata = metadata; - } - return super.end(); - } - } - exports.ServerDuplexStreamImpl = ServerDuplexStreamImpl; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/server-credentials.js -var require_server_credentials = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ServerCredentials = undefined; - exports.createCertificateProviderServerCredentials = createCertificateProviderServerCredentials; - exports.createServerCredentialsWithInterceptors = createServerCredentialsWithInterceptors; - var tls_helpers_1 = require_tls_helpers(); - - class ServerCredentials { - constructor(serverConstructorOptions, contextOptions) { - this.serverConstructorOptions = serverConstructorOptions; - this.watchers = new Set; - this.latestContextOptions = null; - this.latestContextOptions = contextOptions !== null && contextOptions !== undefined ? contextOptions : null; - } - _addWatcher(watcher) { - this.watchers.add(watcher); - } - _removeWatcher(watcher) { - this.watchers.delete(watcher); - } - getWatcherCount() { - return this.watchers.size; - } - updateSecureContextOptions(options) { - this.latestContextOptions = options; - for (const watcher of this.watchers) { - watcher(this.latestContextOptions); - } - } - _isSecure() { - return this.serverConstructorOptions !== null; - } - _getSecureContextOptions() { - return this.latestContextOptions; - } - _getConstructorOptions() { - return this.serverConstructorOptions; - } - _getInterceptors() { - return []; - } - static createInsecure() { - return new InsecureServerCredentials; - } - static createSsl(rootCerts, keyCertPairs, checkClientCertificate = false) { - var _a2; - if (rootCerts !== null && !Buffer.isBuffer(rootCerts)) { - throw new TypeError("rootCerts must be null or a Buffer"); - } - if (!Array.isArray(keyCertPairs)) { - throw new TypeError("keyCertPairs must be an array"); - } - if (typeof checkClientCertificate !== "boolean") { - throw new TypeError("checkClientCertificate must be a boolean"); - } - const cert = []; - const key = []; - for (let i = 0;i < keyCertPairs.length; i++) { - const pair = keyCertPairs[i]; - if (pair === null || typeof pair !== "object") { - throw new TypeError(`keyCertPair[${i}] must be an object`); - } - if (!Buffer.isBuffer(pair.private_key)) { - throw new TypeError(`keyCertPair[${i}].private_key must be a Buffer`); - } - if (!Buffer.isBuffer(pair.cert_chain)) { - throw new TypeError(`keyCertPair[${i}].cert_chain must be a Buffer`); - } - cert.push(pair.cert_chain); - key.push(pair.private_key); - } - return new SecureServerCredentials({ - requestCert: checkClientCertificate, - ciphers: tls_helpers_1.CIPHER_SUITES - }, { - ca: (_a2 = rootCerts !== null && rootCerts !== undefined ? rootCerts : (0, tls_helpers_1.getDefaultRootsData)()) !== null && _a2 !== undefined ? _a2 : undefined, - cert, - key - }); - } - } - exports.ServerCredentials = ServerCredentials; - - class InsecureServerCredentials extends ServerCredentials { - constructor() { - super(null); - } - _getSettings() { - return null; - } - _equals(other) { - return other instanceof InsecureServerCredentials; - } - } - - class SecureServerCredentials extends ServerCredentials { - constructor(constructorOptions, contextOptions) { - super(constructorOptions, contextOptions); - this.options = Object.assign(Object.assign({}, constructorOptions), contextOptions); - } - _equals(other) { - if (this === other) { - return true; - } - if (!(other instanceof SecureServerCredentials)) { - return false; - } - if (Buffer.isBuffer(this.options.ca) && Buffer.isBuffer(other.options.ca)) { - if (!this.options.ca.equals(other.options.ca)) { - return false; - } - } else { - if (this.options.ca !== other.options.ca) { - return false; - } - } - if (Array.isArray(this.options.cert) && Array.isArray(other.options.cert)) { - if (this.options.cert.length !== other.options.cert.length) { - return false; - } - for (let i = 0;i < this.options.cert.length; i++) { - const thisCert = this.options.cert[i]; - const otherCert = other.options.cert[i]; - if (Buffer.isBuffer(thisCert) && Buffer.isBuffer(otherCert)) { - if (!thisCert.equals(otherCert)) { - return false; - } - } else { - if (thisCert !== otherCert) { - return false; - } - } - } - } else { - if (this.options.cert !== other.options.cert) { - return false; - } - } - if (Array.isArray(this.options.key) && Array.isArray(other.options.key)) { - if (this.options.key.length !== other.options.key.length) { - return false; - } - for (let i = 0;i < this.options.key.length; i++) { - const thisKey = this.options.key[i]; - const otherKey = other.options.key[i]; - if (Buffer.isBuffer(thisKey) && Buffer.isBuffer(otherKey)) { - if (!thisKey.equals(otherKey)) { - return false; - } - } else { - if (thisKey !== otherKey) { - return false; - } - } - } - } else { - if (this.options.key !== other.options.key) { - return false; - } - } - if (this.options.requestCert !== other.options.requestCert) { - return false; - } - return true; - } - } - - class CertificateProviderServerCredentials extends ServerCredentials { - constructor(identityCertificateProvider, caCertificateProvider, requireClientCertificate) { - super({ - requestCert: caCertificateProvider !== null, - rejectUnauthorized: requireClientCertificate, - ciphers: tls_helpers_1.CIPHER_SUITES - }); - this.identityCertificateProvider = identityCertificateProvider; - this.caCertificateProvider = caCertificateProvider; - this.requireClientCertificate = requireClientCertificate; - this.latestCaUpdate = null; - this.latestIdentityUpdate = null; - this.caCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this); - this.identityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this); - } - _addWatcher(watcher) { - var _a2; - if (this.getWatcherCount() === 0) { - (_a2 = this.caCertificateProvider) === null || _a2 === undefined || _a2.addCaCertificateListener(this.caCertificateUpdateListener); - this.identityCertificateProvider.addIdentityCertificateListener(this.identityCertificateUpdateListener); - } - super._addWatcher(watcher); - } - _removeWatcher(watcher) { - var _a2; - super._removeWatcher(watcher); - if (this.getWatcherCount() === 0) { - (_a2 = this.caCertificateProvider) === null || _a2 === undefined || _a2.removeCaCertificateListener(this.caCertificateUpdateListener); - this.identityCertificateProvider.removeIdentityCertificateListener(this.identityCertificateUpdateListener); - } - } - _equals(other) { - if (this === other) { - return true; - } - if (!(other instanceof CertificateProviderServerCredentials)) { - return false; - } - return this.caCertificateProvider === other.caCertificateProvider && this.identityCertificateProvider === other.identityCertificateProvider && this.requireClientCertificate === other.requireClientCertificate; - } - calculateSecureContextOptions() { - var _a2; - if (this.latestIdentityUpdate === null) { - return null; - } - if (this.caCertificateProvider !== null && this.latestCaUpdate === null) { - return null; - } - return { - ca: (_a2 = this.latestCaUpdate) === null || _a2 === undefined ? undefined : _a2.caCertificate, - cert: [this.latestIdentityUpdate.certificate], - key: [this.latestIdentityUpdate.privateKey] - }; - } - finalizeUpdate() { - const secureContextOptions = this.calculateSecureContextOptions(); - this.updateSecureContextOptions(secureContextOptions); - } - handleCaCertificateUpdate(update) { - this.latestCaUpdate = update; - this.finalizeUpdate(); - } - handleIdentityCertitificateUpdate(update) { - this.latestIdentityUpdate = update; - this.finalizeUpdate(); - } - } - function createCertificateProviderServerCredentials(caCertificateProvider, identityCertificateProvider, requireClientCertificate) { - return new CertificateProviderServerCredentials(caCertificateProvider, identityCertificateProvider, requireClientCertificate); - } - - class InterceptorServerCredentials extends ServerCredentials { - constructor(childCredentials, interceptors) { - super({}); - this.childCredentials = childCredentials; - this.interceptors = interceptors; - } - _isSecure() { - return this.childCredentials._isSecure(); - } - _equals(other) { - if (!(other instanceof InterceptorServerCredentials)) { - return false; - } - if (!this.childCredentials._equals(other.childCredentials)) { - return false; - } - if (this.interceptors.length !== other.interceptors.length) { - return false; - } - for (let i = 0;i < this.interceptors.length; i++) { - if (this.interceptors[i] !== other.interceptors[i]) { - return false; - } - } - return true; - } - _getInterceptors() { - return this.interceptors; - } - _addWatcher(watcher) { - this.childCredentials._addWatcher(watcher); - } - _removeWatcher(watcher) { - this.childCredentials._removeWatcher(watcher); - } - _getConstructorOptions() { - return this.childCredentials._getConstructorOptions(); - } - _getSecureContextOptions() { - return this.childCredentials._getSecureContextOptions(); - } - } - function createServerCredentialsWithInterceptors(credentials, interceptors) { - return new InterceptorServerCredentials(credentials, interceptors); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/duration.js -var require_duration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.durationMessageToDuration = durationMessageToDuration; - exports.msToDuration = msToDuration; - exports.durationToMs = durationToMs; - exports.isDuration = isDuration; - exports.isDurationMessage = isDurationMessage; - exports.parseDuration = parseDuration; - exports.durationToString = durationToString; - function durationMessageToDuration(message) { - return { - seconds: Number.parseInt(message.seconds), - nanos: message.nanos - }; - } - function msToDuration(millis) { - return { - seconds: millis / 1000 | 0, - nanos: millis % 1000 * 1e6 | 0 - }; - } - function durationToMs(duration3) { - return duration3.seconds * 1000 + duration3.nanos / 1e6 | 0; - } - function isDuration(value) { - return typeof value.seconds === "number" && typeof value.nanos === "number"; - } - function isDurationMessage(value) { - return typeof value.seconds === "string" && typeof value.nanos === "number"; - } - var durationRegex = /^(\d+)(?:\.(\d+))?s$/; - function parseDuration(value) { - const match2 = value.match(durationRegex); - if (!match2) { - return null; - } - return { - seconds: Number.parseInt(match2[1], 10), - nanos: match2[2] ? Number.parseInt(match2[2].padEnd(9, "0"), 10) : 0 - }; - } - function durationToString(duration3) { - if (duration3.nanos === 0) { - return `${duration3.seconds}s`; - } - let scaleFactor; - if (duration3.nanos % 1e6 === 0) { - scaleFactor = 1e6; - } else if (duration3.nanos % 1000 === 0) { - scaleFactor = 1000; - } else { - scaleFactor = 1; - } - return `${duration3.seconds}.${duration3.nanos / scaleFactor}s`; - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/orca.js -var require_orca = __commonJS((exports) => { - var __dirname = "/Users/jhaynie/code/agentuity/worktree/improve-integration-510/sdk/node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OrcaOobMetricsSubchannelWrapper = exports.GRPC_METRICS_HEADER = exports.ServerMetricRecorder = exports.PerRequestMetricRecorder = undefined; - exports.createOrcaClient = createOrcaClient; - exports.createMetricsReader = createMetricsReader; - var make_client_1 = require_make_client(); - var duration_1 = require_duration(); - var channel_credentials_1 = require_channel_credentials(); - var subchannel_interface_1 = require_subchannel_interface(); - var constants_1 = require_constants9(); - var backoff_timeout_1 = require_backoff_timeout(); - var connectivity_state_1 = require_connectivity_state(); - var loadedOrcaProto = null; - function loadOrcaProto() { - if (loadedOrcaProto) { - return loadedOrcaProto; - } - const loaderLoadSync = require_src75().loadSync; - const loadedProto = loaderLoadSync("xds/service/orca/v3/orca.proto", { - keepCase: true, - longs: String, - enums: String, - defaults: true, - oneofs: true, - includeDirs: [ - `${__dirname}/../../proto/xds`, - `${__dirname}/../../proto/protoc-gen-validate` - ] - }); - return (0, make_client_1.loadPackageDefinition)(loadedProto); - } - - class PerRequestMetricRecorder { - constructor() { - this.message = {}; - } - recordRequestCostMetric(name, value) { - if (!this.message.request_cost) { - this.message.request_cost = {}; - } - this.message.request_cost[name] = value; - } - recordUtilizationMetric(name, value) { - if (!this.message.utilization) { - this.message.utilization = {}; - } - this.message.utilization[name] = value; - } - recordNamedMetric(name, value) { - if (!this.message.named_metrics) { - this.message.named_metrics = {}; - } - this.message.named_metrics[name] = value; - } - recordCPUUtilizationMetric(value) { - this.message.cpu_utilization = value; - } - recordMemoryUtilizationMetric(value) { - this.message.mem_utilization = value; - } - recordApplicationUtilizationMetric(value) { - this.message.application_utilization = value; - } - recordQpsMetric(value) { - this.message.rps_fractional = value; - } - recordEpsMetric(value) { - this.message.eps = value; - } - serialize() { - const orcaProto = loadOrcaProto(); - return orcaProto.xds.data.orca.v3.OrcaLoadReport.serialize(this.message); - } - } - exports.PerRequestMetricRecorder = PerRequestMetricRecorder; - var DEFAULT_REPORT_INTERVAL_MS = 30000; - - class ServerMetricRecorder { - constructor() { - this.message = {}; - this.serviceImplementation = { - StreamCoreMetrics: (call) => { - const reportInterval = call.request.report_interval ? (0, duration_1.durationToMs)((0, duration_1.durationMessageToDuration)(call.request.report_interval)) : DEFAULT_REPORT_INTERVAL_MS; - const reportTimer = setInterval(() => { - call.write(this.message); - }, reportInterval); - call.on("cancelled", () => { - clearInterval(reportTimer); - }); - } - }; - } - putUtilizationMetric(name, value) { - if (!this.message.utilization) { - this.message.utilization = {}; - } - this.message.utilization[name] = value; - } - setAllUtilizationMetrics(metrics) { - this.message.utilization = Object.assign({}, metrics); - } - deleteUtilizationMetric(name) { - var _a2; - (_a2 = this.message.utilization) === null || _a2 === undefined || delete _a2[name]; - } - setCpuUtilizationMetric(value) { - this.message.cpu_utilization = value; - } - deleteCpuUtilizationMetric() { - delete this.message.cpu_utilization; - } - setApplicationUtilizationMetric(value) { - this.message.application_utilization = value; - } - deleteApplicationUtilizationMetric() { - delete this.message.application_utilization; - } - setQpsMetric(value) { - this.message.rps_fractional = value; - } - deleteQpsMetric() { - delete this.message.rps_fractional; - } - setEpsMetric(value) { - this.message.eps = value; - } - deleteEpsMetric() { - delete this.message.eps; - } - addToServer(server) { - const serviceDefinition = loadOrcaProto().xds.service.orca.v3.OpenRcaService.service; - server.addService(serviceDefinition, this.serviceImplementation); - } - } - exports.ServerMetricRecorder = ServerMetricRecorder; - function createOrcaClient(channel) { - const ClientClass = loadOrcaProto().xds.service.orca.v3.OpenRcaService; - return new ClientClass("unused", channel_credentials_1.ChannelCredentials.createInsecure(), { channelOverride: channel }); - } - exports.GRPC_METRICS_HEADER = "endpoint-load-metrics-bin"; - var PARSED_LOAD_REPORT_KEY = "grpc_orca_load_report"; - function createMetricsReader(listener, previousOnCallEnded) { - return (code, details, metadata) => { - let parsedLoadReport = metadata.getOpaque(PARSED_LOAD_REPORT_KEY); - if (parsedLoadReport) { - listener(parsedLoadReport); - } else { - const serializedLoadReport = metadata.get(exports.GRPC_METRICS_HEADER); - if (serializedLoadReport.length > 0) { - const orcaProto = loadOrcaProto(); - parsedLoadReport = orcaProto.xds.data.orca.v3.OrcaLoadReport.deserialize(serializedLoadReport[0]); - listener(parsedLoadReport); - metadata.setOpaque(PARSED_LOAD_REPORT_KEY, parsedLoadReport); - } - } - if (previousOnCallEnded) { - previousOnCallEnded(code, details, metadata); - } - }; - } - var DATA_PRODUCER_KEY = "orca_oob_metrics"; - - class OobMetricsDataWatcher { - constructor(metricsListener, intervalMs) { - this.metricsListener = metricsListener; - this.intervalMs = intervalMs; - this.dataProducer = null; - } - setSubchannel(subchannel) { - const producer = subchannel.getOrCreateDataProducer(DATA_PRODUCER_KEY, createOobMetricsDataProducer); - this.dataProducer = producer; - producer.addDataWatcher(this); - } - destroy() { - var _a2; - (_a2 = this.dataProducer) === null || _a2 === undefined || _a2.removeDataWatcher(this); - } - getInterval() { - return this.intervalMs; - } - onMetricsUpdate(metrics) { - this.metricsListener(metrics); - } - } - - class OobMetricsDataProducer { - constructor(subchannel) { - this.subchannel = subchannel; - this.dataWatchers = new Set; - this.orcaSupported = true; - this.metricsCall = null; - this.currentInterval = Infinity; - this.backoffTimer = new backoff_timeout_1.BackoffTimeout(() => this.updateMetricsSubscription()); - this.subchannelStateListener = () => this.updateMetricsSubscription(); - const channel = subchannel.getChannel(); - this.client = createOrcaClient(channel); - subchannel.addConnectivityStateListener(this.subchannelStateListener); - } - addDataWatcher(dataWatcher) { - this.dataWatchers.add(dataWatcher); - this.updateMetricsSubscription(); - } - removeDataWatcher(dataWatcher) { - var _a2; - this.dataWatchers.delete(dataWatcher); - if (this.dataWatchers.size === 0) { - this.subchannel.removeDataProducer(DATA_PRODUCER_KEY); - (_a2 = this.metricsCall) === null || _a2 === undefined || _a2.cancel(); - this.metricsCall = null; - this.client.close(); - this.subchannel.removeConnectivityStateListener(this.subchannelStateListener); - } else { - this.updateMetricsSubscription(); - } - } - updateMetricsSubscription() { - var _a2; - if (this.dataWatchers.size === 0 || !this.orcaSupported || this.subchannel.getConnectivityState() !== connectivity_state_1.ConnectivityState.READY) { - return; - } - const newInterval = Math.min(...Array.from(this.dataWatchers).map((watcher) => watcher.getInterval())); - if (!this.metricsCall || newInterval !== this.currentInterval) { - (_a2 = this.metricsCall) === null || _a2 === undefined || _a2.cancel(); - this.currentInterval = newInterval; - const metricsCall = this.client.streamCoreMetrics({ report_interval: (0, duration_1.msToDuration)(newInterval) }); - this.metricsCall = metricsCall; - metricsCall.on("data", (report) => { - this.dataWatchers.forEach((watcher) => { - watcher.onMetricsUpdate(report); - }); - }); - metricsCall.on("error", (error48) => { - this.metricsCall = null; - if (error48.code === constants_1.Status.UNIMPLEMENTED) { - this.orcaSupported = false; - return; - } - if (error48.code === constants_1.Status.CANCELLED) { - return; - } - this.backoffTimer.runOnce(); - }); - } - } - } - - class OrcaOobMetricsSubchannelWrapper extends subchannel_interface_1.BaseSubchannelWrapper { - constructor(child, metricsListener, intervalMs) { - super(child); - this.addDataWatcher(new OobMetricsDataWatcher(metricsListener, intervalMs)); - } - getWrappedSubchannel() { - return this.child; - } - } - exports.OrcaOobMetricsSubchannelWrapper = OrcaOobMetricsSubchannelWrapper; - function createOobMetricsDataProducer(subchannel) { - return new OobMetricsDataProducer(subchannel); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/server-interceptors.js -var require_server_interceptors = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseServerInterceptingCall = exports.ServerInterceptingCall = exports.ResponderBuilder = exports.ServerListenerBuilder = undefined; - exports.isInterceptingServerListener = isInterceptingServerListener; - exports.getServerInterceptingCall = getServerInterceptingCall; - var metadata_1 = require_metadata(); - var constants_1 = require_constants9(); - var http2 = __require("http2"); - var error_1 = require_error2(); - var zlib = __require("zlib"); - var stream_decoder_1 = require_stream_decoder(); - var logging = require_logging(); - var tls_1 = __require("tls"); - var orca_1 = require_orca(); - var TRACER_NAME2 = "server_call"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - - class ServerListenerBuilder { - constructor() { - this.metadata = undefined; - this.message = undefined; - this.halfClose = undefined; - this.cancel = undefined; - } - withOnReceiveMetadata(onReceiveMetadata) { - this.metadata = onReceiveMetadata; - return this; - } - withOnReceiveMessage(onReceiveMessage) { - this.message = onReceiveMessage; - return this; - } - withOnReceiveHalfClose(onReceiveHalfClose) { - this.halfClose = onReceiveHalfClose; - return this; - } - withOnCancel(onCancel) { - this.cancel = onCancel; - return this; - } - build() { - return { - onReceiveMetadata: this.metadata, - onReceiveMessage: this.message, - onReceiveHalfClose: this.halfClose, - onCancel: this.cancel - }; - } - } - exports.ServerListenerBuilder = ServerListenerBuilder; - function isInterceptingServerListener(listener) { - return listener.onReceiveMetadata !== undefined && listener.onReceiveMetadata.length === 1; - } - - class InterceptingServerListenerImpl { - constructor(listener, nextListener) { - this.listener = listener; - this.nextListener = nextListener; - this.cancelled = false; - this.processingMetadata = false; - this.hasPendingMessage = false; - this.pendingMessage = null; - this.processingMessage = false; - this.hasPendingHalfClose = false; - } - processPendingMessage() { - if (this.hasPendingMessage) { - this.nextListener.onReceiveMessage(this.pendingMessage); - this.pendingMessage = null; - this.hasPendingMessage = false; - } - } - processPendingHalfClose() { - if (this.hasPendingHalfClose) { - this.nextListener.onReceiveHalfClose(); - this.hasPendingHalfClose = false; - } - } - onReceiveMetadata(metadata) { - if (this.cancelled) { - return; - } - this.processingMetadata = true; - this.listener.onReceiveMetadata(metadata, (interceptedMetadata) => { - this.processingMetadata = false; - if (this.cancelled) { - return; - } - this.nextListener.onReceiveMetadata(interceptedMetadata); - this.processPendingMessage(); - this.processPendingHalfClose(); - }); - } - onReceiveMessage(message) { - if (this.cancelled) { - return; - } - this.processingMessage = true; - this.listener.onReceiveMessage(message, (msg) => { - this.processingMessage = false; - if (this.cancelled) { - return; - } - if (this.processingMetadata) { - this.pendingMessage = msg; - this.hasPendingMessage = true; - } else { - this.nextListener.onReceiveMessage(msg); - this.processPendingHalfClose(); - } - }); - } - onReceiveHalfClose() { - if (this.cancelled) { - return; - } - this.listener.onReceiveHalfClose(() => { - if (this.cancelled) { - return; - } - if (this.processingMetadata || this.processingMessage) { - this.hasPendingHalfClose = true; - } else { - this.nextListener.onReceiveHalfClose(); - } - }); - } - onCancel() { - this.cancelled = true; - this.listener.onCancel(); - this.nextListener.onCancel(); - } - } - - class ResponderBuilder { - constructor() { - this.start = undefined; - this.metadata = undefined; - this.message = undefined; - this.status = undefined; - } - withStart(start) { - this.start = start; - return this; - } - withSendMetadata(sendMetadata) { - this.metadata = sendMetadata; - return this; - } - withSendMessage(sendMessage) { - this.message = sendMessage; - return this; - } - withSendStatus(sendStatus) { - this.status = sendStatus; - return this; - } - build() { - return { - start: this.start, - sendMetadata: this.metadata, - sendMessage: this.message, - sendStatus: this.status - }; - } - } - exports.ResponderBuilder = ResponderBuilder; - var defaultServerListener = { - onReceiveMetadata: (metadata, next) => { - next(metadata); - }, - onReceiveMessage: (message, next) => { - next(message); - }, - onReceiveHalfClose: (next) => { - next(); - }, - onCancel: () => {} - }; - var defaultResponder = { - start: (next) => { - next(); - }, - sendMetadata: (metadata, next) => { - next(metadata); - }, - sendMessage: (message, next) => { - next(message); - }, - sendStatus: (status, next) => { - next(status); - } - }; - - class ServerInterceptingCall { - constructor(nextCall, responder) { - var _a2, _b, _c, _d; - this.nextCall = nextCall; - this.processingMetadata = false; - this.sentMetadata = false; - this.processingMessage = false; - this.pendingMessage = null; - this.pendingMessageCallback = null; - this.pendingStatus = null; - this.responder = { - start: (_a2 = responder === null || responder === undefined ? undefined : responder.start) !== null && _a2 !== undefined ? _a2 : defaultResponder.start, - sendMetadata: (_b = responder === null || responder === undefined ? undefined : responder.sendMetadata) !== null && _b !== undefined ? _b : defaultResponder.sendMetadata, - sendMessage: (_c = responder === null || responder === undefined ? undefined : responder.sendMessage) !== null && _c !== undefined ? _c : defaultResponder.sendMessage, - sendStatus: (_d = responder === null || responder === undefined ? undefined : responder.sendStatus) !== null && _d !== undefined ? _d : defaultResponder.sendStatus - }; - } - processPendingMessage() { - if (this.pendingMessageCallback) { - this.nextCall.sendMessage(this.pendingMessage, this.pendingMessageCallback); - this.pendingMessage = null; - this.pendingMessageCallback = null; - } - } - processPendingStatus() { - if (this.pendingStatus) { - this.nextCall.sendStatus(this.pendingStatus); - this.pendingStatus = null; - } - } - start(listener) { - this.responder.start((interceptedListener) => { - var _a2, _b, _c, _d; - const fullInterceptedListener = { - onReceiveMetadata: (_a2 = interceptedListener === null || interceptedListener === undefined ? undefined : interceptedListener.onReceiveMetadata) !== null && _a2 !== undefined ? _a2 : defaultServerListener.onReceiveMetadata, - onReceiveMessage: (_b = interceptedListener === null || interceptedListener === undefined ? undefined : interceptedListener.onReceiveMessage) !== null && _b !== undefined ? _b : defaultServerListener.onReceiveMessage, - onReceiveHalfClose: (_c = interceptedListener === null || interceptedListener === undefined ? undefined : interceptedListener.onReceiveHalfClose) !== null && _c !== undefined ? _c : defaultServerListener.onReceiveHalfClose, - onCancel: (_d = interceptedListener === null || interceptedListener === undefined ? undefined : interceptedListener.onCancel) !== null && _d !== undefined ? _d : defaultServerListener.onCancel - }; - const finalInterceptingListener = new InterceptingServerListenerImpl(fullInterceptedListener, listener); - this.nextCall.start(finalInterceptingListener); - }); - } - sendMetadata(metadata) { - this.processingMetadata = true; - this.sentMetadata = true; - this.responder.sendMetadata(metadata, (interceptedMetadata) => { - this.processingMetadata = false; - this.nextCall.sendMetadata(interceptedMetadata); - this.processPendingMessage(); - this.processPendingStatus(); - }); - } - sendMessage(message, callback) { - this.processingMessage = true; - if (!this.sentMetadata) { - this.sendMetadata(new metadata_1.Metadata); - } - this.responder.sendMessage(message, (interceptedMessage) => { - this.processingMessage = false; - if (this.processingMetadata) { - this.pendingMessage = interceptedMessage; - this.pendingMessageCallback = callback; - } else { - this.nextCall.sendMessage(interceptedMessage, callback); - } - }); - } - sendStatus(status) { - this.responder.sendStatus(status, (interceptedStatus) => { - if (this.processingMetadata || this.processingMessage) { - this.pendingStatus = interceptedStatus; - } else { - this.nextCall.sendStatus(interceptedStatus); - } - }); - } - startRead() { - this.nextCall.startRead(); - } - getPeer() { - return this.nextCall.getPeer(); - } - getDeadline() { - return this.nextCall.getDeadline(); - } - getHost() { - return this.nextCall.getHost(); - } - getAuthContext() { - return this.nextCall.getAuthContext(); - } - getConnectionInfo() { - return this.nextCall.getConnectionInfo(); - } - getMetricsRecorder() { - return this.nextCall.getMetricsRecorder(); - } - } - exports.ServerInterceptingCall = ServerInterceptingCall; - var GRPC_ACCEPT_ENCODING_HEADER = "grpc-accept-encoding"; - var GRPC_ENCODING_HEADER = "grpc-encoding"; - var GRPC_MESSAGE_HEADER = "grpc-message"; - var GRPC_STATUS_HEADER = "grpc-status"; - var GRPC_TIMEOUT_HEADER = "grpc-timeout"; - var DEADLINE_REGEX = /(\d{1,8})\s*([HMSmun])/; - var deadlineUnitsToMs = { - H: 3600000, - M: 60000, - S: 1000, - m: 1, - u: 0.001, - n: 0.000001 - }; - var defaultCompressionHeaders = { - [GRPC_ACCEPT_ENCODING_HEADER]: "identity,deflate,gzip", - [GRPC_ENCODING_HEADER]: "identity" - }; - var defaultResponseHeaders = { - [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK, - [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: "application/grpc+proto" - }; - var defaultResponseOptions = { - waitForTrailers: true - }; - - class BaseServerInterceptingCall { - constructor(stream3, headers, callEventTracker, handler, options) { - var _a2, _b; - this.stream = stream3; - this.callEventTracker = callEventTracker; - this.handler = handler; - this.listener = null; - this.deadlineTimer = null; - this.deadline = Infinity; - this.maxSendMessageSize = constants_1.DEFAULT_MAX_SEND_MESSAGE_LENGTH; - this.maxReceiveMessageSize = constants_1.DEFAULT_MAX_RECEIVE_MESSAGE_LENGTH; - this.cancelled = false; - this.metadataSent = false; - this.wantTrailers = false; - this.cancelNotified = false; - this.incomingEncoding = "identity"; - this.readQueue = []; - this.isReadPending = false; - this.receivedHalfClose = false; - this.streamEnded = false; - this.metricsRecorder = new orca_1.PerRequestMetricRecorder; - this.stream.once("error", (err) => {}); - this.stream.once("close", () => { - var _a3; - trace6("Request to method " + ((_a3 = this.handler) === null || _a3 === undefined ? undefined : _a3.path) + " stream closed with rstCode " + this.stream.rstCode); - if (this.callEventTracker && !this.streamEnded) { - this.streamEnded = true; - this.callEventTracker.onStreamEnd(false); - this.callEventTracker.onCallEnd({ - code: constants_1.Status.CANCELLED, - details: "Stream closed before sending status", - metadata: null - }); - } - this.notifyOnCancel(); - }); - this.stream.on("data", (data) => { - this.handleDataFrame(data); - }); - this.stream.pause(); - this.stream.on("end", () => { - this.handleEndEvent(); - }); - if ("grpc.max_send_message_length" in options) { - this.maxSendMessageSize = options["grpc.max_send_message_length"]; - } - if ("grpc.max_receive_message_length" in options) { - this.maxReceiveMessageSize = options["grpc.max_receive_message_length"]; - } - this.host = (_a2 = headers[":authority"]) !== null && _a2 !== undefined ? _a2 : headers.host; - this.decoder = new stream_decoder_1.StreamDecoder(this.maxReceiveMessageSize); - const metadata = metadata_1.Metadata.fromHttp2Headers(headers); - if (logging.isTracerEnabled(TRACER_NAME2)) { - trace6("Request to " + this.handler.path + " received headers " + JSON.stringify(metadata.toJSON())); - } - const timeoutHeader = metadata.get(GRPC_TIMEOUT_HEADER); - if (timeoutHeader.length > 0) { - this.handleTimeoutHeader(timeoutHeader[0]); - } - const encodingHeader = metadata.get(GRPC_ENCODING_HEADER); - if (encodingHeader.length > 0) { - this.incomingEncoding = encodingHeader[0]; - } - metadata.remove(GRPC_TIMEOUT_HEADER); - metadata.remove(GRPC_ENCODING_HEADER); - metadata.remove(GRPC_ACCEPT_ENCODING_HEADER); - metadata.remove(http2.constants.HTTP2_HEADER_ACCEPT_ENCODING); - metadata.remove(http2.constants.HTTP2_HEADER_TE); - metadata.remove(http2.constants.HTTP2_HEADER_CONTENT_TYPE); - this.metadata = metadata; - const socket = (_b = stream3.session) === null || _b === undefined ? undefined : _b.socket; - this.connectionInfo = { - localAddress: socket === null || socket === undefined ? undefined : socket.localAddress, - localPort: socket === null || socket === undefined ? undefined : socket.localPort, - remoteAddress: socket === null || socket === undefined ? undefined : socket.remoteAddress, - remotePort: socket === null || socket === undefined ? undefined : socket.remotePort - }; - this.shouldSendMetrics = !!options["grpc.server_call_metric_recording"]; - } - handleTimeoutHeader(timeoutHeader) { - const match2 = timeoutHeader.toString().match(DEADLINE_REGEX); - if (match2 === null) { - const status = { - code: constants_1.Status.INTERNAL, - details: `Invalid ${GRPC_TIMEOUT_HEADER} value "${timeoutHeader}"`, - metadata: null - }; - process.nextTick(() => { - this.sendStatus(status); - }); - return; - } - const timeout = +match2[1] * deadlineUnitsToMs[match2[2]] | 0; - const now2 = new Date; - this.deadline = now2.setMilliseconds(now2.getMilliseconds() + timeout); - this.deadlineTimer = setTimeout(() => { - const status = { - code: constants_1.Status.DEADLINE_EXCEEDED, - details: "Deadline exceeded", - metadata: null - }; - this.sendStatus(status); - }, timeout); - } - checkCancelled() { - if (!this.cancelled && (this.stream.destroyed || this.stream.closed)) { - this.notifyOnCancel(); - this.cancelled = true; - } - return this.cancelled; - } - notifyOnCancel() { - if (this.cancelNotified) { - return; - } - this.cancelNotified = true; - this.cancelled = true; - process.nextTick(() => { - var _a2; - (_a2 = this.listener) === null || _a2 === undefined || _a2.onCancel(); - }); - if (this.deadlineTimer) { - clearTimeout(this.deadlineTimer); - } - this.stream.resume(); - } - maybeSendMetadata() { - if (!this.metadataSent) { - this.sendMetadata(new metadata_1.Metadata); - } - } - serializeMessage(value) { - const messageBuffer = this.handler.serialize(value); - const byteLength = messageBuffer.byteLength; - const output = Buffer.allocUnsafe(byteLength + 5); - output.writeUInt8(0, 0); - output.writeUInt32BE(byteLength, 1); - messageBuffer.copy(output, 5); - return output; - } - decompressMessage(message, encoding) { - const messageContents = message.subarray(5); - if (encoding === "identity") { - return messageContents; - } else if (encoding === "deflate" || encoding === "gzip") { - let decompresser; - if (encoding === "deflate") { - decompresser = zlib.createInflate(); - } else { - decompresser = zlib.createGunzip(); - } - return new Promise((resolve2, reject) => { - let totalLength = 0; - const messageParts = []; - decompresser.on("data", (chunk) => { - messageParts.push(chunk); - totalLength += chunk.byteLength; - if (this.maxReceiveMessageSize !== -1 && totalLength > this.maxReceiveMessageSize) { - decompresser.destroy(); - reject({ - code: constants_1.Status.RESOURCE_EXHAUSTED, - details: `Received message that decompresses to a size larger than ${this.maxReceiveMessageSize}` - }); - } - }); - decompresser.on("end", () => { - resolve2(Buffer.concat(messageParts)); - }); - decompresser.write(messageContents); - decompresser.end(); - }); - } else { - return Promise.reject({ - code: constants_1.Status.UNIMPLEMENTED, - details: `Received message compressed with unsupported encoding "${encoding}"` - }); - } - } - async decompressAndMaybePush(queueEntry) { - if (queueEntry.type !== "COMPRESSED") { - throw new Error(`Invalid queue entry type: ${queueEntry.type}`); - } - const compressed = queueEntry.compressedMessage.readUInt8(0) === 1; - const compressedMessageEncoding = compressed ? this.incomingEncoding : "identity"; - let decompressedMessage; - try { - decompressedMessage = await this.decompressMessage(queueEntry.compressedMessage, compressedMessageEncoding); - } catch (err) { - this.sendStatus(err); - return; - } - try { - queueEntry.parsedMessage = this.handler.deserialize(decompressedMessage); - } catch (err) { - this.sendStatus({ - code: constants_1.Status.INTERNAL, - details: `Error deserializing request: ${err.message}` - }); - return; - } - queueEntry.type = "READABLE"; - this.maybePushNextMessage(); - } - maybePushNextMessage() { - if (this.listener && this.isReadPending && this.readQueue.length > 0 && this.readQueue[0].type !== "COMPRESSED") { - this.isReadPending = false; - const nextQueueEntry = this.readQueue.shift(); - if (nextQueueEntry.type === "READABLE") { - this.listener.onReceiveMessage(nextQueueEntry.parsedMessage); - } else { - this.listener.onReceiveHalfClose(); - } - } - } - handleDataFrame(data) { - var _a2; - if (this.checkCancelled()) { - return; - } - trace6("Request to " + this.handler.path + " received data frame of size " + data.length); - let rawMessages; - try { - rawMessages = this.decoder.write(data); - } catch (e) { - this.sendStatus({ code: constants_1.Status.RESOURCE_EXHAUSTED, details: e.message }); - return; - } - for (const messageBytes of rawMessages) { - this.stream.pause(); - const queueEntry = { - type: "COMPRESSED", - compressedMessage: messageBytes, - parsedMessage: null - }; - this.readQueue.push(queueEntry); - this.decompressAndMaybePush(queueEntry); - (_a2 = this.callEventTracker) === null || _a2 === undefined || _a2.addMessageReceived(); - } - } - handleEndEvent() { - this.readQueue.push({ - type: "HALF_CLOSE", - compressedMessage: null, - parsedMessage: null - }); - this.receivedHalfClose = true; - this.maybePushNextMessage(); - } - start(listener) { - trace6("Request to " + this.handler.path + " start called"); - if (this.checkCancelled()) { - return; - } - this.listener = listener; - listener.onReceiveMetadata(this.metadata); - } - sendMetadata(metadata) { - if (this.checkCancelled()) { - return; - } - if (this.metadataSent) { - return; - } - this.metadataSent = true; - const custom2 = metadata ? metadata.toHttp2Headers() : null; - const headers = Object.assign(Object.assign(Object.assign({}, defaultResponseHeaders), defaultCompressionHeaders), custom2); - this.stream.respond(headers, defaultResponseOptions); - } - sendMessage(message, callback) { - if (this.checkCancelled()) { - return; - } - let response; - try { - response = this.serializeMessage(message); - } catch (e) { - this.sendStatus({ - code: constants_1.Status.INTERNAL, - details: `Error serializing response: ${(0, error_1.getErrorMessage)(e)}`, - metadata: null - }); - return; - } - if (this.maxSendMessageSize !== -1 && response.length - 5 > this.maxSendMessageSize) { - this.sendStatus({ - code: constants_1.Status.RESOURCE_EXHAUSTED, - details: `Sent message larger than max (${response.length} vs. ${this.maxSendMessageSize})`, - metadata: null - }); - return; - } - this.maybeSendMetadata(); - trace6("Request to " + this.handler.path + " sent data frame of size " + response.length); - this.stream.write(response, (error48) => { - var _a2; - if (error48) { - this.sendStatus({ - code: constants_1.Status.INTERNAL, - details: `Error writing message: ${(0, error_1.getErrorMessage)(error48)}`, - metadata: null - }); - return; - } - (_a2 = this.callEventTracker) === null || _a2 === undefined || _a2.addMessageSent(); - callback(); - }); - } - sendStatus(status) { - var _a2, _b, _c; - if (this.checkCancelled()) { - return; - } - trace6("Request to method " + ((_a2 = this.handler) === null || _a2 === undefined ? undefined : _a2.path) + " ended with status code: " + constants_1.Status[status.code] + " details: " + status.details); - const statusMetadata = (_c = (_b = status.metadata) === null || _b === undefined ? undefined : _b.clone()) !== null && _c !== undefined ? _c : new metadata_1.Metadata; - if (this.shouldSendMetrics) { - statusMetadata.set(orca_1.GRPC_METRICS_HEADER, this.metricsRecorder.serialize()); - } - if (this.metadataSent) { - if (!this.wantTrailers) { - this.wantTrailers = true; - this.stream.once("wantTrailers", () => { - if (this.callEventTracker && !this.streamEnded) { - this.streamEnded = true; - this.callEventTracker.onStreamEnd(true); - this.callEventTracker.onCallEnd(status); - } - const trailersToSend = Object.assign({ [GRPC_STATUS_HEADER]: status.code, [GRPC_MESSAGE_HEADER]: encodeURI(status.details) }, statusMetadata.toHttp2Headers()); - this.stream.sendTrailers(trailersToSend); - this.notifyOnCancel(); - }); - this.stream.end(); - } else { - this.notifyOnCancel(); - } - } else { - if (this.callEventTracker && !this.streamEnded) { - this.streamEnded = true; - this.callEventTracker.onStreamEnd(true); - this.callEventTracker.onCallEnd(status); - } - const trailersToSend = Object.assign(Object.assign({ [GRPC_STATUS_HEADER]: status.code, [GRPC_MESSAGE_HEADER]: encodeURI(status.details) }, defaultResponseHeaders), statusMetadata.toHttp2Headers()); - this.stream.respond(trailersToSend, { endStream: true }); - this.notifyOnCancel(); - } - } - startRead() { - trace6("Request to " + this.handler.path + " startRead called"); - if (this.checkCancelled()) { - return; - } - this.isReadPending = true; - if (this.readQueue.length === 0) { - if (!this.receivedHalfClose) { - this.stream.resume(); - } - } else { - this.maybePushNextMessage(); - } - } - getPeer() { - var _a2; - const socket = (_a2 = this.stream.session) === null || _a2 === undefined ? undefined : _a2.socket; - if (socket === null || socket === undefined ? undefined : socket.remoteAddress) { - if (socket.remotePort) { - return `${socket.remoteAddress}:${socket.remotePort}`; - } else { - return socket.remoteAddress; - } - } else { - return "unknown"; - } - } - getDeadline() { - return this.deadline; - } - getHost() { - return this.host; - } - getAuthContext() { - var _a2; - if (((_a2 = this.stream.session) === null || _a2 === undefined ? undefined : _a2.socket) instanceof tls_1.TLSSocket) { - const peerCertificate = this.stream.session.socket.getPeerCertificate(); - return { - transportSecurityType: "ssl", - sslPeerCertificate: peerCertificate.raw ? peerCertificate : undefined - }; - } else { - return {}; - } - } - getConnectionInfo() { - return this.connectionInfo; - } - getMetricsRecorder() { - return this.metricsRecorder; - } - } - exports.BaseServerInterceptingCall = BaseServerInterceptingCall; - function getServerInterceptingCall(interceptors, stream3, headers, callEventTracker, handler, options) { - const methodDefinition = { - path: handler.path, - requestStream: handler.type === "clientStream" || handler.type === "bidi", - responseStream: handler.type === "serverStream" || handler.type === "bidi", - requestDeserialize: handler.deserialize, - responseSerialize: handler.serialize - }; - const baseCall = new BaseServerInterceptingCall(stream3, headers, callEventTracker, handler, options); - return interceptors.reduce((call, interceptor) => { - return interceptor(methodDefinition, call); - }, baseCall); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/server.js -var require_server = __commonJS((exports) => { - var __runInitializers = exports && exports.__runInitializers || function(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0;i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : undefined; - }; - var __esDecorate = exports && exports.__esDecorate || function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { - if (f !== undefined && typeof f !== "function") - throw new TypeError("Function expected"); - return f; - } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1;i >= 0; i--) { - var context8 = {}; - for (var p in contextIn) - context8[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) - context8.access[p] = contextIn.access[p]; - context8.addInitializer = function(f) { - if (done) - throw new TypeError("Cannot add initializers after decoration has completed"); - extraInitializers.push(accept(f || null)); - }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context8); - if (kind === "accessor") { - if (result === undefined) - continue; - if (result === null || typeof result !== "object") - throw new TypeError("Object expected"); - if (_ = accept(result.get)) - descriptor.get = _; - if (_ = accept(result.set)) - descriptor.set = _; - if (_ = accept(result.init)) - initializers.unshift(_); - } else if (_ = accept(result)) { - if (kind === "field") - initializers.unshift(_); - else - descriptor[key] = _; - } - } - if (target) - Object.defineProperty(target, contextIn.name, descriptor); - done = true; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Server = undefined; - var http2 = __require("http2"); - var util3 = __require("util"); - var constants_1 = require_constants9(); - var server_call_1 = require_server_call(); - var server_credentials_1 = require_server_credentials(); - var resolver_1 = require_resolver(); - var logging = require_logging(); - var subchannel_address_1 = require_subchannel_address(); - var uri_parser_1 = require_uri_parser(); - var channelz_1 = require_channelz(); - var server_interceptors_1 = require_server_interceptors(); - var UNLIMITED_CONNECTION_AGE_MS = ~(1 << 31); - var KEEPALIVE_MAX_TIME_MS = ~(1 << 31); - var KEEPALIVE_TIMEOUT_MS = 20000; - var MAX_CONNECTION_IDLE_MS = ~(1 << 31); - var { HTTP2_HEADER_PATH } = http2.constants; - var TRACER_NAME2 = "server"; - var kMaxAge = Buffer.from("max_age"); - function serverCallTrace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, "server_call", text); - } - function noop() {} - function deprecate(message) { - return function(target, context8) { - return util3.deprecate(target, message); - }; - } - function getUnimplementedStatusResponse(methodName) { - return { - code: constants_1.Status.UNIMPLEMENTED, - details: `The server does not implement the method ${methodName}` - }; - } - function getDefaultHandler(handlerType, methodName) { - const unimplementedStatusResponse = getUnimplementedStatusResponse(methodName); - switch (handlerType) { - case "unary": - return (call, callback) => { - callback(unimplementedStatusResponse, null); - }; - case "clientStream": - return (call, callback) => { - callback(unimplementedStatusResponse, null); - }; - case "serverStream": - return (call) => { - call.emit("error", unimplementedStatusResponse); - }; - case "bidi": - return (call) => { - call.emit("error", unimplementedStatusResponse); - }; - default: - throw new Error(`Invalid handlerType ${handlerType}`); - } - } - var Server = (() => { - var _a2; - let _instanceExtraInitializers = []; - let _start_decorators; - return _a2 = class Server2 { - constructor(options) { - var _b, _c, _d, _e, _f, _g; - this.boundPorts = (__runInitializers(this, _instanceExtraInitializers), new Map); - this.http2Servers = new Map; - this.sessionIdleTimeouts = new Map; - this.handlers = new Map; - this.sessions = new Map; - this.started = false; - this.shutdown = false; - this.serverAddressString = "null"; - this.channelzEnabled = true; - this.options = options !== null && options !== undefined ? options : {}; - if (this.options["grpc.enable_channelz"] === 0) { - this.channelzEnabled = false; - this.channelzTrace = new channelz_1.ChannelzTraceStub; - this.callTracker = new channelz_1.ChannelzCallTrackerStub; - this.listenerChildrenTracker = new channelz_1.ChannelzChildrenTrackerStub; - this.sessionChildrenTracker = new channelz_1.ChannelzChildrenTrackerStub; - } else { - this.channelzTrace = new channelz_1.ChannelzTrace; - this.callTracker = new channelz_1.ChannelzCallTracker; - this.listenerChildrenTracker = new channelz_1.ChannelzChildrenTracker; - this.sessionChildrenTracker = new channelz_1.ChannelzChildrenTracker; - } - this.channelzRef = (0, channelz_1.registerChannelzServer)("server", () => this.getChannelzInfo(), this.channelzEnabled); - this.channelzTrace.addTrace("CT_INFO", "Server created"); - this.maxConnectionAgeMs = (_b = this.options["grpc.max_connection_age_ms"]) !== null && _b !== undefined ? _b : UNLIMITED_CONNECTION_AGE_MS; - this.maxConnectionAgeGraceMs = (_c = this.options["grpc.max_connection_age_grace_ms"]) !== null && _c !== undefined ? _c : UNLIMITED_CONNECTION_AGE_MS; - this.keepaliveTimeMs = (_d = this.options["grpc.keepalive_time_ms"]) !== null && _d !== undefined ? _d : KEEPALIVE_MAX_TIME_MS; - this.keepaliveTimeoutMs = (_e = this.options["grpc.keepalive_timeout_ms"]) !== null && _e !== undefined ? _e : KEEPALIVE_TIMEOUT_MS; - this.sessionIdleTimeout = (_f = this.options["grpc.max_connection_idle_ms"]) !== null && _f !== undefined ? _f : MAX_CONNECTION_IDLE_MS; - this.commonServerOptions = { - maxSendHeaderBlockLength: Number.MAX_SAFE_INTEGER - }; - if ("grpc-node.max_session_memory" in this.options) { - this.commonServerOptions.maxSessionMemory = this.options["grpc-node.max_session_memory"]; - } else { - this.commonServerOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER; - } - if ("grpc.max_concurrent_streams" in this.options) { - this.commonServerOptions.settings = { - maxConcurrentStreams: this.options["grpc.max_concurrent_streams"] - }; - } - this.interceptors = (_g = this.options.interceptors) !== null && _g !== undefined ? _g : []; - this.trace("Server constructed"); - } - getChannelzInfo() { - return { - trace: this.channelzTrace, - callTracker: this.callTracker, - listenerChildren: this.listenerChildrenTracker.getChildLists(), - sessionChildren: this.sessionChildrenTracker.getChildLists() - }; - } - getChannelzSessionInfo(session3) { - var _b, _c, _d; - const sessionInfo = this.sessions.get(session3); - const sessionSocket = session3.socket; - const remoteAddress = sessionSocket.remoteAddress ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.remoteAddress, sessionSocket.remotePort) : null; - const localAddress = sessionSocket.localAddress ? (0, subchannel_address_1.stringToSubchannelAddress)(sessionSocket.localAddress, sessionSocket.localPort) : null; - let tlsInfo; - if (session3.encrypted) { - const tlsSocket = sessionSocket; - const cipherInfo = tlsSocket.getCipher(); - const certificate = tlsSocket.getCertificate(); - const peerCertificate = tlsSocket.getPeerCertificate(); - tlsInfo = { - cipherSuiteStandardName: (_b = cipherInfo.standardName) !== null && _b !== undefined ? _b : null, - cipherSuiteOtherName: cipherInfo.standardName ? null : cipherInfo.name, - localCertificate: certificate && "raw" in certificate ? certificate.raw : null, - remoteCertificate: peerCertificate && "raw" in peerCertificate ? peerCertificate.raw : null - }; - } else { - tlsInfo = null; - } - const socketInfo = { - remoteAddress, - localAddress, - security: tlsInfo, - remoteName: null, - streamsStarted: sessionInfo.streamTracker.callsStarted, - streamsSucceeded: sessionInfo.streamTracker.callsSucceeded, - streamsFailed: sessionInfo.streamTracker.callsFailed, - messagesSent: sessionInfo.messagesSent, - messagesReceived: sessionInfo.messagesReceived, - keepAlivesSent: sessionInfo.keepAlivesSent, - lastLocalStreamCreatedTimestamp: null, - lastRemoteStreamCreatedTimestamp: sessionInfo.streamTracker.lastCallStartedTimestamp, - lastMessageSentTimestamp: sessionInfo.lastMessageSentTimestamp, - lastMessageReceivedTimestamp: sessionInfo.lastMessageReceivedTimestamp, - localFlowControlWindow: (_c = session3.state.localWindowSize) !== null && _c !== undefined ? _c : null, - remoteFlowControlWindow: (_d = session3.state.remoteWindowSize) !== null && _d !== undefined ? _d : null - }; - return socketInfo; - } - trace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, "(" + this.channelzRef.id + ") " + text); - } - keepaliveTrace(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, "keepalive", "(" + this.channelzRef.id + ") " + text); - } - addProtoService() { - throw new Error("Not implemented. Use addService() instead"); - } - addService(service, implementation) { - if (service === null || typeof service !== "object" || implementation === null || typeof implementation !== "object") { - throw new Error("addService() requires two objects as arguments"); - } - const serviceKeys = Object.keys(service); - if (serviceKeys.length === 0) { - throw new Error("Cannot add an empty service to a server"); - } - serviceKeys.forEach((name) => { - const attrs = service[name]; - let methodType; - if (attrs.requestStream) { - if (attrs.responseStream) { - methodType = "bidi"; - } else { - methodType = "clientStream"; - } - } else { - if (attrs.responseStream) { - methodType = "serverStream"; - } else { - methodType = "unary"; - } - } - let implFn = implementation[name]; - let impl; - if (implFn === undefined && typeof attrs.originalName === "string") { - implFn = implementation[attrs.originalName]; - } - if (implFn !== undefined) { - impl = implFn.bind(implementation); - } else { - impl = getDefaultHandler(methodType, name); - } - const success3 = this.register(attrs.path, impl, attrs.responseSerialize, attrs.requestDeserialize, methodType); - if (success3 === false) { - throw new Error(`Method handler for ${attrs.path} already provided.`); - } - }); - } - removeService(service) { - if (service === null || typeof service !== "object") { - throw new Error("removeService() requires object as argument"); - } - const serviceKeys = Object.keys(service); - serviceKeys.forEach((name) => { - const attrs = service[name]; - this.unregister(attrs.path); - }); - } - bind(port, creds) { - throw new Error("Not implemented. Use bindAsync() instead"); - } - experimentalRegisterListenerToChannelz(boundAddress) { - return (0, channelz_1.registerChannelzSocket)((0, subchannel_address_1.subchannelAddressToString)(boundAddress), () => { - return { - localAddress: boundAddress, - remoteAddress: null, - security: null, - remoteName: null, - streamsStarted: 0, - streamsSucceeded: 0, - streamsFailed: 0, - messagesSent: 0, - messagesReceived: 0, - keepAlivesSent: 0, - lastLocalStreamCreatedTimestamp: null, - lastRemoteStreamCreatedTimestamp: null, - lastMessageSentTimestamp: null, - lastMessageReceivedTimestamp: null, - localFlowControlWindow: null, - remoteFlowControlWindow: null - }; - }, this.channelzEnabled); - } - experimentalUnregisterListenerFromChannelz(channelzRef) { - (0, channelz_1.unregisterChannelzRef)(channelzRef); - } - createHttp2Server(credentials) { - let http2Server; - if (credentials._isSecure()) { - const constructorOptions = credentials._getConstructorOptions(); - const contextOptions = credentials._getSecureContextOptions(); - const secureServerOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, this.commonServerOptions), constructorOptions), contextOptions), { enableTrace: this.options["grpc-node.tls_enable_trace"] === 1 }); - let areCredentialsValid = contextOptions !== null; - this.trace("Initial credentials valid: " + areCredentialsValid); - http2Server = http2.createSecureServer(secureServerOptions); - http2Server.prependListener("connection", (socket) => { - if (!areCredentialsValid) { - this.trace("Dropped connection from " + JSON.stringify(socket.address()) + " due to unloaded credentials"); - socket.destroy(); - } - }); - http2Server.on("secureConnection", (socket) => { - socket.on("error", (e) => { - this.trace("An incoming TLS connection closed with error: " + e.message); - }); - }); - const credsWatcher = (options) => { - if (options) { - const secureServer = http2Server; - try { - secureServer.setSecureContext(options); - } catch (e) { - logging.log(constants_1.LogVerbosity.ERROR, "Failed to set secure context with error " + e.message); - options = null; - } - } - areCredentialsValid = options !== null; - this.trace("Post-update credentials valid: " + areCredentialsValid); - }; - credentials._addWatcher(credsWatcher); - http2Server.on("close", () => { - credentials._removeWatcher(credsWatcher); - }); - } else { - http2Server = http2.createServer(this.commonServerOptions); - } - http2Server.setTimeout(0, noop); - this._setupHandlers(http2Server, credentials._getInterceptors()); - return http2Server; - } - bindOneAddress(address, boundPortObject) { - this.trace("Attempting to bind " + (0, subchannel_address_1.subchannelAddressToString)(address)); - const http2Server = this.createHttp2Server(boundPortObject.credentials); - return new Promise((resolve2, reject) => { - const onError = (err) => { - this.trace("Failed to bind " + (0, subchannel_address_1.subchannelAddressToString)(address) + " with error " + err.message); - resolve2({ - port: "port" in address ? address.port : 1, - error: err.message - }); - }; - http2Server.once("error", onError); - http2Server.listen(address, () => { - const boundAddress = http2Server.address(); - let boundSubchannelAddress; - if (typeof boundAddress === "string") { - boundSubchannelAddress = { - path: boundAddress - }; - } else { - boundSubchannelAddress = { - host: boundAddress.address, - port: boundAddress.port - }; - } - const channelzRef = this.experimentalRegisterListenerToChannelz(boundSubchannelAddress); - this.listenerChildrenTracker.refChild(channelzRef); - this.http2Servers.set(http2Server, { - channelzRef, - sessions: new Set, - ownsChannelzRef: true - }); - boundPortObject.listeningServers.add(http2Server); - this.trace("Successfully bound " + (0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress)); - resolve2({ - port: "port" in boundSubchannelAddress ? boundSubchannelAddress.port : 1 - }); - http2Server.removeListener("error", onError); - }); - }); - } - async bindManyPorts(addressList, boundPortObject) { - if (addressList.length === 0) { - return { - count: 0, - port: 0, - errors: [] - }; - } - if ((0, subchannel_address_1.isTcpSubchannelAddress)(addressList[0]) && addressList[0].port === 0) { - const firstAddressResult = await this.bindOneAddress(addressList[0], boundPortObject); - if (firstAddressResult.error) { - const restAddressResult = await this.bindManyPorts(addressList.slice(1), boundPortObject); - return Object.assign(Object.assign({}, restAddressResult), { errors: [firstAddressResult.error, ...restAddressResult.errors] }); - } else { - const restAddresses = addressList.slice(1).map((address) => (0, subchannel_address_1.isTcpSubchannelAddress)(address) ? { host: address.host, port: firstAddressResult.port } : address); - const restAddressResult = await Promise.all(restAddresses.map((address) => this.bindOneAddress(address, boundPortObject))); - const allResults = [firstAddressResult, ...restAddressResult]; - return { - count: allResults.filter((result) => result.error === undefined).length, - port: firstAddressResult.port, - errors: allResults.filter((result) => result.error).map((result) => result.error) - }; - } - } else { - const allResults = await Promise.all(addressList.map((address) => this.bindOneAddress(address, boundPortObject))); - return { - count: allResults.filter((result) => result.error === undefined).length, - port: allResults[0].port, - errors: allResults.filter((result) => result.error).map((result) => result.error) - }; - } - } - async bindAddressList(addressList, boundPortObject) { - const bindResult = await this.bindManyPorts(addressList, boundPortObject); - if (bindResult.count > 0) { - if (bindResult.count < addressList.length) { - logging.log(constants_1.LogVerbosity.INFO, `WARNING Only ${bindResult.count} addresses added out of total ${addressList.length} resolved`); - } - return bindResult.port; - } else { - const errorString = `No address added out of total ${addressList.length} resolved`; - logging.log(constants_1.LogVerbosity.ERROR, errorString); - throw new Error(`${errorString} errors: [${bindResult.errors.join(",")}]`); - } - } - resolvePort(port) { - return new Promise((resolve2, reject) => { - let seenResolution = false; - const resolverListener = (endpointList, attributes, serviceConfig, resolutionNote) => { - if (seenResolution) { - return true; - } - seenResolution = true; - if (!endpointList.ok) { - reject(new Error(endpointList.error.details)); - return true; - } - const addressList = [].concat(...endpointList.value.map((endpoint) => endpoint.addresses)); - if (addressList.length === 0) { - reject(new Error(`No addresses resolved for port ${port}`)); - return true; - } - resolve2(addressList); - return true; - }; - const resolver = (0, resolver_1.createResolver)(port, resolverListener, this.options); - resolver.updateResolution(); - }); - } - async bindPort(port, boundPortObject) { - const addressList = await this.resolvePort(port); - if (boundPortObject.cancelled) { - this.completeUnbind(boundPortObject); - throw new Error("bindAsync operation cancelled by unbind call"); - } - const portNumber = await this.bindAddressList(addressList, boundPortObject); - if (boundPortObject.cancelled) { - this.completeUnbind(boundPortObject); - throw new Error("bindAsync operation cancelled by unbind call"); - } - return portNumber; - } - normalizePort(port) { - const initialPortUri = (0, uri_parser_1.parseUri)(port); - if (initialPortUri === null) { - throw new Error(`Could not parse port "${port}"`); - } - const portUri = (0, resolver_1.mapUriDefaultScheme)(initialPortUri); - if (portUri === null) { - throw new Error(`Could not get a default scheme for port "${port}"`); - } - return portUri; - } - bindAsync(port, creds, callback) { - if (this.shutdown) { - throw new Error("bindAsync called after shutdown"); - } - if (typeof port !== "string") { - throw new TypeError("port must be a string"); - } - if (creds === null || !(creds instanceof server_credentials_1.ServerCredentials)) { - throw new TypeError("creds must be a ServerCredentials object"); - } - if (typeof callback !== "function") { - throw new TypeError("callback must be a function"); - } - this.trace("bindAsync port=" + port); - const portUri = this.normalizePort(port); - const deferredCallback = (error48, port2) => { - process.nextTick(() => callback(error48, port2)); - }; - let boundPortObject = this.boundPorts.get((0, uri_parser_1.uriToString)(portUri)); - if (boundPortObject) { - if (!creds._equals(boundPortObject.credentials)) { - deferredCallback(new Error(`${port} already bound with incompatible credentials`), 0); - return; - } - boundPortObject.cancelled = false; - if (boundPortObject.completionPromise) { - boundPortObject.completionPromise.then((portNum) => callback(null, portNum), (error48) => callback(error48, 0)); - } else { - deferredCallback(null, boundPortObject.portNumber); - } - return; - } - boundPortObject = { - mapKey: (0, uri_parser_1.uriToString)(portUri), - originalUri: portUri, - completionPromise: null, - cancelled: false, - portNumber: 0, - credentials: creds, - listeningServers: new Set - }; - const splitPort = (0, uri_parser_1.splitHostPort)(portUri.path); - const completionPromise = this.bindPort(portUri, boundPortObject); - boundPortObject.completionPromise = completionPromise; - if ((splitPort === null || splitPort === undefined ? undefined : splitPort.port) === 0) { - completionPromise.then((portNum) => { - const finalUri = { - scheme: portUri.scheme, - authority: portUri.authority, - path: (0, uri_parser_1.combineHostPort)({ host: splitPort.host, port: portNum }) - }; - boundPortObject.mapKey = (0, uri_parser_1.uriToString)(finalUri); - boundPortObject.completionPromise = null; - boundPortObject.portNumber = portNum; - this.boundPorts.set(boundPortObject.mapKey, boundPortObject); - callback(null, portNum); - }, (error48) => { - callback(error48, 0); - }); - } else { - this.boundPorts.set(boundPortObject.mapKey, boundPortObject); - completionPromise.then((portNum) => { - boundPortObject.completionPromise = null; - boundPortObject.portNumber = portNum; - callback(null, portNum); - }, (error48) => { - callback(error48, 0); - }); - } - } - registerInjectorToChannelz() { - return (0, channelz_1.registerChannelzSocket)("injector", () => { - return { - localAddress: null, - remoteAddress: null, - security: null, - remoteName: null, - streamsStarted: 0, - streamsSucceeded: 0, - streamsFailed: 0, - messagesSent: 0, - messagesReceived: 0, - keepAlivesSent: 0, - lastLocalStreamCreatedTimestamp: null, - lastRemoteStreamCreatedTimestamp: null, - lastMessageSentTimestamp: null, - lastMessageReceivedTimestamp: null, - localFlowControlWindow: null, - remoteFlowControlWindow: null - }; - }, this.channelzEnabled); - } - experimentalCreateConnectionInjectorWithChannelzRef(credentials, channelzRef, ownsChannelzRef = false) { - if (credentials === null || !(credentials instanceof server_credentials_1.ServerCredentials)) { - throw new TypeError("creds must be a ServerCredentials object"); - } - if (this.channelzEnabled) { - this.listenerChildrenTracker.refChild(channelzRef); - } - const server = this.createHttp2Server(credentials); - const sessionsSet = new Set; - this.http2Servers.set(server, { - channelzRef, - sessions: sessionsSet, - ownsChannelzRef - }); - return { - injectConnection: (connection) => { - server.emit("connection", connection); - }, - drain: (graceTimeMs) => { - var _b, _c; - for (const session3 of sessionsSet) { - this.closeSession(session3); - } - (_c = (_b = setTimeout(() => { - for (const session3 of sessionsSet) { - session3.destroy(http2.constants.NGHTTP2_CANCEL); - } - }, graceTimeMs)).unref) === null || _c === undefined || _c.call(_b); - }, - destroy: () => { - this.closeServer(server); - for (const session3 of sessionsSet) { - this.closeSession(session3); - } - } - }; - } - createConnectionInjector(credentials) { - if (credentials === null || !(credentials instanceof server_credentials_1.ServerCredentials)) { - throw new TypeError("creds must be a ServerCredentials object"); - } - const channelzRef = this.registerInjectorToChannelz(); - return this.experimentalCreateConnectionInjectorWithChannelzRef(credentials, channelzRef, true); - } - closeServer(server, callback) { - this.trace("Closing server with address " + JSON.stringify(server.address())); - const serverInfo = this.http2Servers.get(server); - server.close(() => { - if (serverInfo && serverInfo.ownsChannelzRef) { - this.listenerChildrenTracker.unrefChild(serverInfo.channelzRef); - (0, channelz_1.unregisterChannelzRef)(serverInfo.channelzRef); - } - this.http2Servers.delete(server); - callback === null || callback === undefined || callback(); - }); - } - closeSession(session3, callback) { - var _b; - this.trace("Closing session initiated by " + ((_b = session3.socket) === null || _b === undefined ? undefined : _b.remoteAddress)); - const sessionInfo = this.sessions.get(session3); - const closeCallback = () => { - if (sessionInfo) { - this.sessionChildrenTracker.unrefChild(sessionInfo.ref); - (0, channelz_1.unregisterChannelzRef)(sessionInfo.ref); - } - callback === null || callback === undefined || callback(); - }; - if (session3.closed) { - queueMicrotask(closeCallback); - } else { - session3.close(closeCallback); - } - } - completeUnbind(boundPortObject) { - for (const server of boundPortObject.listeningServers) { - const serverInfo = this.http2Servers.get(server); - this.closeServer(server, () => { - boundPortObject.listeningServers.delete(server); - }); - if (serverInfo) { - for (const session3 of serverInfo.sessions) { - this.closeSession(session3); - } - } - } - this.boundPorts.delete(boundPortObject.mapKey); - } - unbind(port) { - this.trace("unbind port=" + port); - const portUri = this.normalizePort(port); - const splitPort = (0, uri_parser_1.splitHostPort)(portUri.path); - if ((splitPort === null || splitPort === undefined ? undefined : splitPort.port) === 0) { - throw new Error("Cannot unbind port 0"); - } - const boundPortObject = this.boundPorts.get((0, uri_parser_1.uriToString)(portUri)); - if (boundPortObject) { - this.trace("unbinding " + boundPortObject.mapKey + " originally bound as " + (0, uri_parser_1.uriToString)(boundPortObject.originalUri)); - if (boundPortObject.completionPromise) { - boundPortObject.cancelled = true; - } else { - this.completeUnbind(boundPortObject); - } - } - } - drain(port, graceTimeMs) { - var _b, _c; - this.trace("drain port=" + port + " graceTimeMs=" + graceTimeMs); - const portUri = this.normalizePort(port); - const splitPort = (0, uri_parser_1.splitHostPort)(portUri.path); - if ((splitPort === null || splitPort === undefined ? undefined : splitPort.port) === 0) { - throw new Error("Cannot drain port 0"); - } - const boundPortObject = this.boundPorts.get((0, uri_parser_1.uriToString)(portUri)); - if (!boundPortObject) { - return; - } - const allSessions = new Set; - for (const http2Server of boundPortObject.listeningServers) { - const serverEntry = this.http2Servers.get(http2Server); - if (serverEntry) { - for (const session3 of serverEntry.sessions) { - allSessions.add(session3); - this.closeSession(session3, () => { - allSessions.delete(session3); - }); - } - } - } - (_c = (_b = setTimeout(() => { - for (const session3 of allSessions) { - session3.destroy(http2.constants.NGHTTP2_CANCEL); - } - }, graceTimeMs)).unref) === null || _c === undefined || _c.call(_b); - } - forceShutdown() { - for (const boundPortObject of this.boundPorts.values()) { - boundPortObject.cancelled = true; - } - this.boundPorts.clear(); - for (const server of this.http2Servers.keys()) { - this.closeServer(server); - } - this.sessions.forEach((channelzInfo, session3) => { - this.closeSession(session3); - session3.destroy(http2.constants.NGHTTP2_CANCEL); - }); - this.sessions.clear(); - (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - this.shutdown = true; - } - register(name, handler, serialize2, deserialize, type) { - if (this.handlers.has(name)) { - return false; - } - this.handlers.set(name, { - func: handler, - serialize: serialize2, - deserialize, - type, - path: name - }); - return true; - } - unregister(name) { - return this.handlers.delete(name); - } - start() { - if (this.http2Servers.size === 0 || [...this.http2Servers.keys()].every((server) => !server.listening)) { - throw new Error("server must be bound in order to start"); - } - if (this.started === true) { - throw new Error("server is already started"); - } - this.started = true; - } - tryShutdown(callback) { - var _b; - const wrappedCallback = (error48) => { - (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - callback(error48); - }; - let pendingChecks = 0; - function maybeCallback() { - pendingChecks--; - if (pendingChecks === 0) { - wrappedCallback(); - } - } - this.shutdown = true; - for (const [serverKey, server] of this.http2Servers.entries()) { - pendingChecks++; - const serverString = server.channelzRef.name; - this.trace("Waiting for server " + serverString + " to close"); - this.closeServer(serverKey, () => { - this.trace("Server " + serverString + " finished closing"); - maybeCallback(); - }); - for (const session3 of server.sessions.keys()) { - pendingChecks++; - const sessionString = (_b = session3.socket) === null || _b === undefined ? undefined : _b.remoteAddress; - this.trace("Waiting for session " + sessionString + " to close"); - this.closeSession(session3, () => { - this.trace("Session " + sessionString + " finished closing"); - maybeCallback(); - }); - } - } - if (pendingChecks === 0) { - wrappedCallback(); - } - } - addHttp2Port() { - throw new Error("Not yet implemented"); - } - getChannelzRef() { - return this.channelzRef; - } - _verifyContentType(stream3, headers) { - const contentType = headers[http2.constants.HTTP2_HEADER_CONTENT_TYPE]; - if (typeof contentType !== "string" || !contentType.startsWith("application/grpc")) { - stream3.respond({ - [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE - }, { endStream: true }); - return false; - } - return true; - } - _retrieveHandler(path) { - serverCallTrace("Received call to method " + path + " at address " + this.serverAddressString); - const handler = this.handlers.get(path); - if (handler === undefined) { - serverCallTrace("No handler registered for method " + path + ". Sending UNIMPLEMENTED status."); - return null; - } - return handler; - } - _respondWithError(err, stream3, channelzSessionInfo = null) { - var _b, _c; - const trailersToSend = Object.assign({ "grpc-status": (_b = err.code) !== null && _b !== undefined ? _b : constants_1.Status.INTERNAL, "grpc-message": err.details, [http2.constants.HTTP2_HEADER_STATUS]: http2.constants.HTTP_STATUS_OK, [http2.constants.HTTP2_HEADER_CONTENT_TYPE]: "application/grpc+proto" }, (_c = err.metadata) === null || _c === undefined ? undefined : _c.toHttp2Headers()); - stream3.respond(trailersToSend, { endStream: true }); - this.callTracker.addCallFailed(); - channelzSessionInfo === null || channelzSessionInfo === undefined || channelzSessionInfo.streamTracker.addCallFailed(); - } - _channelzHandler(extraInterceptors, stream3, headers) { - this.onStreamOpened(stream3); - const channelzSessionInfo = this.sessions.get(stream3.session); - this.callTracker.addCallStarted(); - channelzSessionInfo === null || channelzSessionInfo === undefined || channelzSessionInfo.streamTracker.addCallStarted(); - if (!this._verifyContentType(stream3, headers)) { - this.callTracker.addCallFailed(); - channelzSessionInfo === null || channelzSessionInfo === undefined || channelzSessionInfo.streamTracker.addCallFailed(); - return; - } - const path = headers[HTTP2_HEADER_PATH]; - const handler = this._retrieveHandler(path); - if (!handler) { - this._respondWithError(getUnimplementedStatusResponse(path), stream3, channelzSessionInfo); - return; - } - const callEventTracker = { - addMessageSent: () => { - if (channelzSessionInfo) { - channelzSessionInfo.messagesSent += 1; - channelzSessionInfo.lastMessageSentTimestamp = new Date; - } - }, - addMessageReceived: () => { - if (channelzSessionInfo) { - channelzSessionInfo.messagesReceived += 1; - channelzSessionInfo.lastMessageReceivedTimestamp = new Date; - } - }, - onCallEnd: (status) => { - if (status.code === constants_1.Status.OK) { - this.callTracker.addCallSucceeded(); - } else { - this.callTracker.addCallFailed(); - } - }, - onStreamEnd: (success3) => { - if (channelzSessionInfo) { - if (success3) { - channelzSessionInfo.streamTracker.addCallSucceeded(); - } else { - channelzSessionInfo.streamTracker.addCallFailed(); - } - } - } - }; - const call = (0, server_interceptors_1.getServerInterceptingCall)([...extraInterceptors, ...this.interceptors], stream3, headers, callEventTracker, handler, this.options); - if (!this._runHandlerForCall(call, handler)) { - this.callTracker.addCallFailed(); - channelzSessionInfo === null || channelzSessionInfo === undefined || channelzSessionInfo.streamTracker.addCallFailed(); - call.sendStatus({ - code: constants_1.Status.INTERNAL, - details: `Unknown handler type: ${handler.type}` - }); - } - } - _streamHandler(extraInterceptors, stream3, headers) { - this.onStreamOpened(stream3); - if (this._verifyContentType(stream3, headers) !== true) { - return; - } - const path = headers[HTTP2_HEADER_PATH]; - const handler = this._retrieveHandler(path); - if (!handler) { - this._respondWithError(getUnimplementedStatusResponse(path), stream3, null); - return; - } - const call = (0, server_interceptors_1.getServerInterceptingCall)([...extraInterceptors, ...this.interceptors], stream3, headers, null, handler, this.options); - if (!this._runHandlerForCall(call, handler)) { - call.sendStatus({ - code: constants_1.Status.INTERNAL, - details: `Unknown handler type: ${handler.type}` - }); - } - } - _runHandlerForCall(call, handler) { - const { type } = handler; - if (type === "unary") { - handleUnary(call, handler); - } else if (type === "clientStream") { - handleClientStreaming(call, handler); - } else if (type === "serverStream") { - handleServerStreaming(call, handler); - } else if (type === "bidi") { - handleBidiStreaming(call, handler); - } else { - return false; - } - return true; - } - _setupHandlers(http2Server, extraInterceptors) { - if (http2Server === null) { - return; - } - const serverAddress = http2Server.address(); - let serverAddressString = "null"; - if (serverAddress) { - if (typeof serverAddress === "string") { - serverAddressString = serverAddress; - } else { - serverAddressString = serverAddress.address + ":" + serverAddress.port; - } - } - this.serverAddressString = serverAddressString; - const handler = this.channelzEnabled ? this._channelzHandler : this._streamHandler; - const sessionHandler = this.channelzEnabled ? this._channelzSessionHandler(http2Server) : this._sessionHandler(http2Server); - http2Server.on("stream", handler.bind(this, extraInterceptors)); - http2Server.on("session", sessionHandler); - } - _sessionHandler(http2Server) { - return (session3) => { - var _b, _c; - (_b = this.http2Servers.get(http2Server)) === null || _b === undefined || _b.sessions.add(session3); - let connectionAgeTimer = null; - let connectionAgeGraceTimer = null; - let keepaliveTimer = null; - let sessionClosedByServer = false; - const idleTimeoutObj = this.enableIdleTimeout(session3); - if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) { - const jitterMagnitude = this.maxConnectionAgeMs / 10; - const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude; - connectionAgeTimer = setTimeout(() => { - var _b2, _c2; - sessionClosedByServer = true; - this.trace("Connection dropped by max connection age: " + ((_b2 = session3.socket) === null || _b2 === undefined ? undefined : _b2.remoteAddress)); - try { - session3.goaway(http2.constants.NGHTTP2_NO_ERROR, ~(1 << 31), kMaxAge); - } catch (e) { - session3.destroy(); - return; - } - session3.close(); - if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) { - connectionAgeGraceTimer = setTimeout(() => { - session3.destroy(); - }, this.maxConnectionAgeGraceMs); - (_c2 = connectionAgeGraceTimer.unref) === null || _c2 === undefined || _c2.call(connectionAgeGraceTimer); - } - }, this.maxConnectionAgeMs + jitter); - (_c = connectionAgeTimer.unref) === null || _c === undefined || _c.call(connectionAgeTimer); - } - const clearKeepaliveTimeout = () => { - if (keepaliveTimer) { - clearTimeout(keepaliveTimer); - keepaliveTimer = null; - } - }; - const canSendPing = () => { - return !session3.destroyed && this.keepaliveTimeMs < KEEPALIVE_MAX_TIME_MS && this.keepaliveTimeMs > 0; - }; - let sendPing; - const maybeStartKeepalivePingTimer = () => { - var _b2; - if (!canSendPing()) { - return; - } - this.keepaliveTrace("Starting keepalive timer for " + this.keepaliveTimeMs + "ms"); - keepaliveTimer = setTimeout(() => { - clearKeepaliveTimeout(); - sendPing(); - }, this.keepaliveTimeMs); - (_b2 = keepaliveTimer.unref) === null || _b2 === undefined || _b2.call(keepaliveTimer); - }; - sendPing = () => { - var _b2; - if (!canSendPing()) { - return; - } - this.keepaliveTrace("Sending ping with timeout " + this.keepaliveTimeoutMs + "ms"); - let pingSendError = ""; - try { - const pingSentSuccessfully = session3.ping((err, duration3, payload) => { - clearKeepaliveTimeout(); - if (err) { - this.keepaliveTrace("Ping failed with error: " + err.message); - sessionClosedByServer = true; - session3.destroy(); - } else { - this.keepaliveTrace("Received ping response"); - maybeStartKeepalivePingTimer(); - } - }); - if (!pingSentSuccessfully) { - pingSendError = "Ping returned false"; - } - } catch (e) { - pingSendError = (e instanceof Error ? e.message : "") || "Unknown error"; - } - if (pingSendError) { - this.keepaliveTrace("Ping send failed: " + pingSendError); - this.trace("Connection dropped due to ping send error: " + pingSendError); - sessionClosedByServer = true; - session3.destroy(); - return; - } - keepaliveTimer = setTimeout(() => { - clearKeepaliveTimeout(); - this.keepaliveTrace("Ping timeout passed without response"); - this.trace("Connection dropped by keepalive timeout"); - sessionClosedByServer = true; - session3.destroy(); - }, this.keepaliveTimeoutMs); - (_b2 = keepaliveTimer.unref) === null || _b2 === undefined || _b2.call(keepaliveTimer); - }; - maybeStartKeepalivePingTimer(); - session3.on("close", () => { - var _b2, _c2; - if (!sessionClosedByServer) { - this.trace(`Connection dropped by client ${(_b2 = session3.socket) === null || _b2 === undefined ? undefined : _b2.remoteAddress}`); - } - if (connectionAgeTimer) { - clearTimeout(connectionAgeTimer); - } - if (connectionAgeGraceTimer) { - clearTimeout(connectionAgeGraceTimer); - } - clearKeepaliveTimeout(); - if (idleTimeoutObj !== null) { - clearTimeout(idleTimeoutObj.timeout); - this.sessionIdleTimeouts.delete(session3); - } - (_c2 = this.http2Servers.get(http2Server)) === null || _c2 === undefined || _c2.sessions.delete(session3); - }); - }; - } - _channelzSessionHandler(http2Server) { - return (session3) => { - var _b, _c, _d, _e; - const channelzRef = (0, channelz_1.registerChannelzSocket)((_c = (_b = session3.socket) === null || _b === undefined ? undefined : _b.remoteAddress) !== null && _c !== undefined ? _c : "unknown", this.getChannelzSessionInfo.bind(this, session3), this.channelzEnabled); - const channelzSessionInfo = { - ref: channelzRef, - streamTracker: new channelz_1.ChannelzCallTracker, - messagesSent: 0, - messagesReceived: 0, - keepAlivesSent: 0, - lastMessageSentTimestamp: null, - lastMessageReceivedTimestamp: null - }; - (_d = this.http2Servers.get(http2Server)) === null || _d === undefined || _d.sessions.add(session3); - this.sessions.set(session3, channelzSessionInfo); - const clientAddress = `${session3.socket.remoteAddress}:${session3.socket.remotePort}`; - this.channelzTrace.addTrace("CT_INFO", "Connection established by client " + clientAddress); - this.trace("Connection established by client " + clientAddress); - this.sessionChildrenTracker.refChild(channelzRef); - let connectionAgeTimer = null; - let connectionAgeGraceTimer = null; - let keepaliveTimeout = null; - let sessionClosedByServer = false; - const idleTimeoutObj = this.enableIdleTimeout(session3); - if (this.maxConnectionAgeMs !== UNLIMITED_CONNECTION_AGE_MS) { - const jitterMagnitude = this.maxConnectionAgeMs / 10; - const jitter = Math.random() * jitterMagnitude * 2 - jitterMagnitude; - connectionAgeTimer = setTimeout(() => { - var _b2; - sessionClosedByServer = true; - this.channelzTrace.addTrace("CT_INFO", "Connection dropped by max connection age from " + clientAddress); - try { - session3.goaway(http2.constants.NGHTTP2_NO_ERROR, ~(1 << 31), kMaxAge); - } catch (e) { - session3.destroy(); - return; - } - session3.close(); - if (this.maxConnectionAgeGraceMs !== UNLIMITED_CONNECTION_AGE_MS) { - connectionAgeGraceTimer = setTimeout(() => { - session3.destroy(); - }, this.maxConnectionAgeGraceMs); - (_b2 = connectionAgeGraceTimer.unref) === null || _b2 === undefined || _b2.call(connectionAgeGraceTimer); - } - }, this.maxConnectionAgeMs + jitter); - (_e = connectionAgeTimer.unref) === null || _e === undefined || _e.call(connectionAgeTimer); - } - const clearKeepaliveTimeout = () => { - if (keepaliveTimeout) { - clearTimeout(keepaliveTimeout); - keepaliveTimeout = null; - } - }; - const canSendPing = () => { - return !session3.destroyed && this.keepaliveTimeMs < KEEPALIVE_MAX_TIME_MS && this.keepaliveTimeMs > 0; - }; - let sendPing; - const maybeStartKeepalivePingTimer = () => { - var _b2; - if (!canSendPing()) { - return; - } - this.keepaliveTrace("Starting keepalive timer for " + this.keepaliveTimeMs + "ms"); - keepaliveTimeout = setTimeout(() => { - clearKeepaliveTimeout(); - sendPing(); - }, this.keepaliveTimeMs); - (_b2 = keepaliveTimeout.unref) === null || _b2 === undefined || _b2.call(keepaliveTimeout); - }; - sendPing = () => { - var _b2; - if (!canSendPing()) { - return; - } - this.keepaliveTrace("Sending ping with timeout " + this.keepaliveTimeoutMs + "ms"); - let pingSendError = ""; - try { - const pingSentSuccessfully = session3.ping((err, duration3, payload) => { - clearKeepaliveTimeout(); - if (err) { - this.keepaliveTrace("Ping failed with error: " + err.message); - this.channelzTrace.addTrace("CT_INFO", "Connection dropped due to error of a ping frame " + err.message + " return in " + duration3); - sessionClosedByServer = true; - session3.destroy(); - } else { - this.keepaliveTrace("Received ping response"); - maybeStartKeepalivePingTimer(); - } - }); - if (!pingSentSuccessfully) { - pingSendError = "Ping returned false"; - } - } catch (e) { - pingSendError = (e instanceof Error ? e.message : "") || "Unknown error"; - } - if (pingSendError) { - this.keepaliveTrace("Ping send failed: " + pingSendError); - this.channelzTrace.addTrace("CT_INFO", "Connection dropped due to ping send error: " + pingSendError); - sessionClosedByServer = true; - session3.destroy(); - return; - } - channelzSessionInfo.keepAlivesSent += 1; - keepaliveTimeout = setTimeout(() => { - clearKeepaliveTimeout(); - this.keepaliveTrace("Ping timeout passed without response"); - this.channelzTrace.addTrace("CT_INFO", "Connection dropped by keepalive timeout from " + clientAddress); - sessionClosedByServer = true; - session3.destroy(); - }, this.keepaliveTimeoutMs); - (_b2 = keepaliveTimeout.unref) === null || _b2 === undefined || _b2.call(keepaliveTimeout); - }; - maybeStartKeepalivePingTimer(); - session3.on("close", () => { - var _b2; - if (!sessionClosedByServer) { - this.channelzTrace.addTrace("CT_INFO", "Connection dropped by client " + clientAddress); - } - this.sessionChildrenTracker.unrefChild(channelzRef); - (0, channelz_1.unregisterChannelzRef)(channelzRef); - if (connectionAgeTimer) { - clearTimeout(connectionAgeTimer); - } - if (connectionAgeGraceTimer) { - clearTimeout(connectionAgeGraceTimer); - } - clearKeepaliveTimeout(); - if (idleTimeoutObj !== null) { - clearTimeout(idleTimeoutObj.timeout); - this.sessionIdleTimeouts.delete(session3); - } - (_b2 = this.http2Servers.get(http2Server)) === null || _b2 === undefined || _b2.sessions.delete(session3); - this.sessions.delete(session3); - }); - }; - } - enableIdleTimeout(session3) { - var _b, _c; - if (this.sessionIdleTimeout >= MAX_CONNECTION_IDLE_MS) { - return null; - } - const idleTimeoutObj = { - activeStreams: 0, - lastIdle: Date.now(), - onClose: this.onStreamClose.bind(this, session3), - timeout: setTimeout(this.onIdleTimeout, this.sessionIdleTimeout, this, session3) - }; - (_c = (_b = idleTimeoutObj.timeout).unref) === null || _c === undefined || _c.call(_b); - this.sessionIdleTimeouts.set(session3, idleTimeoutObj); - const { socket } = session3; - this.trace("Enable idle timeout for " + socket.remoteAddress + ":" + socket.remotePort); - return idleTimeoutObj; - } - onIdleTimeout(ctx, session3) { - const { socket } = session3; - const sessionInfo = ctx.sessionIdleTimeouts.get(session3); - if (sessionInfo !== undefined && sessionInfo.activeStreams === 0) { - if (Date.now() - sessionInfo.lastIdle >= ctx.sessionIdleTimeout) { - ctx.trace("Session idle timeout triggered for " + (socket === null || socket === undefined ? undefined : socket.remoteAddress) + ":" + (socket === null || socket === undefined ? undefined : socket.remotePort) + " last idle at " + sessionInfo.lastIdle); - ctx.closeSession(session3); - } else { - sessionInfo.timeout.refresh(); - } - } - } - onStreamOpened(stream3) { - const session3 = stream3.session; - const idleTimeoutObj = this.sessionIdleTimeouts.get(session3); - if (idleTimeoutObj) { - idleTimeoutObj.activeStreams += 1; - stream3.once("close", idleTimeoutObj.onClose); - } - } - onStreamClose(session3) { - var _b, _c; - const idleTimeoutObj = this.sessionIdleTimeouts.get(session3); - if (idleTimeoutObj) { - idleTimeoutObj.activeStreams -= 1; - if (idleTimeoutObj.activeStreams === 0) { - idleTimeoutObj.lastIdle = Date.now(); - idleTimeoutObj.timeout.refresh(); - this.trace("Session onStreamClose" + ((_b = session3.socket) === null || _b === undefined ? undefined : _b.remoteAddress) + ":" + ((_c = session3.socket) === null || _c === undefined ? undefined : _c.remotePort) + " at " + idleTimeoutObj.lastIdle); - } - } - } - }, (() => { - const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : undefined; - _start_decorators = [deprecate("Calling start() is no longer necessary. It can be safely omitted.")]; - __esDecorate(_a2, null, _start_decorators, { kind: "method", name: "start", static: false, private: false, access: { has: (obj) => ("start" in obj), get: (obj) => obj.start }, metadata: _metadata }, null, _instanceExtraInitializers); - if (_metadata) - Object.defineProperty(_a2, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); - })(), _a2; - })(); - exports.Server = Server; - async function handleUnary(call, handler) { - let stream3; - function respond(err, value, trailer, flags) { - if (err) { - call.sendStatus((0, server_call_1.serverErrorToStatus)(err, trailer)); - return; - } - call.sendMessage(value, () => { - call.sendStatus({ - code: constants_1.Status.OK, - details: "OK", - metadata: trailer !== null && trailer !== undefined ? trailer : null - }); - }); - } - let requestMetadata; - let requestMessage = null; - call.start({ - onReceiveMetadata(metadata) { - requestMetadata = metadata; - call.startRead(); - }, - onReceiveMessage(message) { - if (requestMessage) { - call.sendStatus({ - code: constants_1.Status.UNIMPLEMENTED, - details: `Received a second request message for server streaming method ${handler.path}`, - metadata: null - }); - return; - } - requestMessage = message; - call.startRead(); - }, - onReceiveHalfClose() { - if (!requestMessage) { - call.sendStatus({ - code: constants_1.Status.UNIMPLEMENTED, - details: `Received no request message for server streaming method ${handler.path}`, - metadata: null - }); - return; - } - stream3 = new server_call_1.ServerWritableStreamImpl(handler.path, call, requestMetadata, requestMessage); - try { - handler.func(stream3, respond); - } catch (err) { - call.sendStatus({ - code: constants_1.Status.UNKNOWN, - details: `Server method handler threw error ${err.message}`, - metadata: null - }); - } - }, - onCancel() { - if (stream3) { - stream3.cancelled = true; - stream3.emit("cancelled", "cancelled"); - } - } - }); - } - function handleClientStreaming(call, handler) { - let stream3; - function respond(err, value, trailer, flags) { - if (err) { - call.sendStatus((0, server_call_1.serverErrorToStatus)(err, trailer)); - return; - } - call.sendMessage(value, () => { - call.sendStatus({ - code: constants_1.Status.OK, - details: "OK", - metadata: trailer !== null && trailer !== undefined ? trailer : null - }); - }); - } - call.start({ - onReceiveMetadata(metadata) { - stream3 = new server_call_1.ServerDuplexStreamImpl(handler.path, call, metadata); - try { - handler.func(stream3, respond); - } catch (err) { - call.sendStatus({ - code: constants_1.Status.UNKNOWN, - details: `Server method handler threw error ${err.message}`, - metadata: null - }); - } - }, - onReceiveMessage(message) { - stream3.push(message); - }, - onReceiveHalfClose() { - stream3.push(null); - }, - onCancel() { - if (stream3) { - stream3.cancelled = true; - stream3.emit("cancelled", "cancelled"); - stream3.destroy(); - } - } - }); - } - function handleServerStreaming(call, handler) { - let stream3; - let requestMetadata; - let requestMessage = null; - call.start({ - onReceiveMetadata(metadata) { - requestMetadata = metadata; - call.startRead(); - }, - onReceiveMessage(message) { - if (requestMessage) { - call.sendStatus({ - code: constants_1.Status.UNIMPLEMENTED, - details: `Received a second request message for server streaming method ${handler.path}`, - metadata: null - }); - return; - } - requestMessage = message; - call.startRead(); - }, - onReceiveHalfClose() { - if (!requestMessage) { - call.sendStatus({ - code: constants_1.Status.UNIMPLEMENTED, - details: `Received no request message for server streaming method ${handler.path}`, - metadata: null - }); - return; - } - stream3 = new server_call_1.ServerWritableStreamImpl(handler.path, call, requestMetadata, requestMessage); - try { - handler.func(stream3); - } catch (err) { - call.sendStatus({ - code: constants_1.Status.UNKNOWN, - details: `Server method handler threw error ${err.message}`, - metadata: null - }); - } - }, - onCancel() { - if (stream3) { - stream3.cancelled = true; - stream3.emit("cancelled", "cancelled"); - stream3.destroy(); - } - } - }); - } - function handleBidiStreaming(call, handler) { - let stream3; - call.start({ - onReceiveMetadata(metadata) { - stream3 = new server_call_1.ServerDuplexStreamImpl(handler.path, call, metadata); - try { - handler.func(stream3); - } catch (err) { - call.sendStatus({ - code: constants_1.Status.UNKNOWN, - details: `Server method handler threw error ${err.message}`, - metadata: null - }); - } - }, - onReceiveMessage(message) { - stream3.push(message); - }, - onReceiveHalfClose() { - stream3.push(null); - }, - onCancel() { - if (stream3) { - stream3.cancelled = true; - stream3.emit("cancelled", "cancelled"); - stream3.destroy(); - } - } - }); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/status-builder.js -var require_status_builder = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.StatusBuilder = undefined; - - class StatusBuilder { - constructor() { - this.code = null; - this.details = null; - this.metadata = null; - } - withCode(code) { - this.code = code; - return this; - } - withDetails(details) { - this.details = details; - return this; - } - withMetadata(metadata) { - this.metadata = metadata; - return this; - } - build() { - const status = {}; - if (this.code !== null) { - status.code = this.code; - } - if (this.details !== null) { - status.details = this.details; - } - if (this.metadata !== null) { - status.metadata = this.metadata; - } - return status; - } - } - exports.StatusBuilder = StatusBuilder; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js -var require_load_balancer_pick_first = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LeafLoadBalancer = exports.PickFirstLoadBalancer = exports.PickFirstLoadBalancingConfig = undefined; - exports.shuffled = shuffled; - exports.setup = setup; - var load_balancer_1 = require_load_balancer(); - var connectivity_state_1 = require_connectivity_state(); - var picker_1 = require_picker(); - var subchannel_address_1 = require_subchannel_address(); - var logging = require_logging(); - var constants_1 = require_constants9(); - var subchannel_address_2 = require_subchannel_address(); - var net_1 = __require("net"); - var call_interface_1 = require_call_interface(); - var TRACER_NAME2 = "pick_first"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var TYPE_NAME = "pick_first"; - var CONNECTION_DELAY_INTERVAL_MS = 250; - - class PickFirstLoadBalancingConfig { - constructor(shuffleAddressList) { - this.shuffleAddressList = shuffleAddressList; - } - getLoadBalancerName() { - return TYPE_NAME; - } - toJsonObject() { - return { - [TYPE_NAME]: { - shuffleAddressList: this.shuffleAddressList - } - }; - } - getShuffleAddressList() { - return this.shuffleAddressList; - } - static createFromJson(obj) { - if ("shuffleAddressList" in obj && !(typeof obj.shuffleAddressList === "boolean")) { - throw new Error("pick_first config field shuffleAddressList must be a boolean if provided"); - } - return new PickFirstLoadBalancingConfig(obj.shuffleAddressList === true); - } - } - exports.PickFirstLoadBalancingConfig = PickFirstLoadBalancingConfig; - - class PickFirstPicker { - constructor(subchannel) { - this.subchannel = subchannel; - } - pick(pickArgs) { - return { - pickResultType: picker_1.PickResultType.COMPLETE, - subchannel: this.subchannel, - status: null, - onCallStarted: null, - onCallEnded: null - }; - } - } - function shuffled(list5) { - const result = list5.slice(); - for (let i = result.length - 1;i > 1; i--) { - const j = Math.floor(Math.random() * (i + 1)); - const temp = result[i]; - result[i] = result[j]; - result[j] = temp; - } - return result; - } - function interleaveAddressFamilies(addressList) { - if (addressList.length === 0) { - return []; - } - const result = []; - const ipv6Addresses = []; - const ipv4Addresses = []; - const ipv6First = (0, subchannel_address_2.isTcpSubchannelAddress)(addressList[0]) && (0, net_1.isIPv6)(addressList[0].host); - for (const address of addressList) { - if ((0, subchannel_address_2.isTcpSubchannelAddress)(address) && (0, net_1.isIPv6)(address.host)) { - ipv6Addresses.push(address); - } else { - ipv4Addresses.push(address); - } - } - const firstList = ipv6First ? ipv6Addresses : ipv4Addresses; - const secondList = ipv6First ? ipv4Addresses : ipv6Addresses; - for (let i = 0;i < Math.max(firstList.length, secondList.length); i++) { - if (i < firstList.length) { - result.push(firstList[i]); - } - if (i < secondList.length) { - result.push(secondList[i]); - } - } - return result; - } - var REPORT_HEALTH_STATUS_OPTION_NAME = "grpc-node.internal.pick-first.report_health_status"; - - class PickFirstLoadBalancer { - constructor(channelControlHelper) { - this.channelControlHelper = channelControlHelper; - this.children = []; - this.currentState = connectivity_state_1.ConnectivityState.IDLE; - this.currentSubchannelIndex = 0; - this.currentPick = null; - this.subchannelStateListener = (subchannel, previousState, newState, keepaliveTime, errorMessage) => { - this.onSubchannelStateUpdate(subchannel, previousState, newState, errorMessage); - }; - this.pickedSubchannelHealthListener = () => this.calculateAndReportNewState(); - this.stickyTransientFailureMode = false; - this.reportHealthStatus = false; - this.lastError = null; - this.latestAddressList = null; - this.latestOptions = {}; - this.latestResolutionNote = ""; - this.connectionDelayTimeout = setTimeout(() => {}, 0); - clearTimeout(this.connectionDelayTimeout); - } - allChildrenHaveReportedTF() { - return this.children.every((child) => child.hasReportedTransientFailure); - } - resetChildrenReportedTF() { - this.children.every((child) => child.hasReportedTransientFailure = false); - } - calculateAndReportNewState() { - var _a2; - if (this.currentPick) { - if (this.reportHealthStatus && !this.currentPick.isHealthy()) { - const errorMessage = `Picked subchannel ${this.currentPick.getAddress()} is unhealthy`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: errorMessage - }), errorMessage); - } else { - this.updateState(connectivity_state_1.ConnectivityState.READY, new PickFirstPicker(this.currentPick), null); - } - } else if (((_a2 = this.latestAddressList) === null || _a2 === undefined ? undefined : _a2.length) === 0) { - const errorMessage = `No connection established. Last error: ${this.lastError}. Resolution note: ${this.latestResolutionNote}`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: errorMessage - }), errorMessage); - } else if (this.children.length === 0) { - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); - } else { - if (this.stickyTransientFailureMode) { - const errorMessage = `No connection established. Last error: ${this.lastError}. Resolution note: ${this.latestResolutionNote}`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: errorMessage - }), errorMessage); - } else { - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this), null); - } - } - } - requestReresolution() { - this.channelControlHelper.requestReresolution(); - } - maybeEnterStickyTransientFailureMode() { - if (!this.allChildrenHaveReportedTF()) { - return; - } - this.requestReresolution(); - this.resetChildrenReportedTF(); - if (this.stickyTransientFailureMode) { - this.calculateAndReportNewState(); - return; - } - this.stickyTransientFailureMode = true; - for (const { subchannel } of this.children) { - subchannel.startConnecting(); - } - this.calculateAndReportNewState(); - } - removeCurrentPick() { - if (this.currentPick !== null) { - this.currentPick.removeConnectivityStateListener(this.subchannelStateListener); - this.channelControlHelper.removeChannelzChild(this.currentPick.getChannelzRef()); - this.currentPick.removeHealthStateWatcher(this.pickedSubchannelHealthListener); - this.currentPick.unref(); - this.currentPick = null; - } - } - onSubchannelStateUpdate(subchannel, previousState, newState, errorMessage) { - var _a2; - if ((_a2 = this.currentPick) === null || _a2 === undefined ? undefined : _a2.realSubchannelEquals(subchannel)) { - if (newState !== connectivity_state_1.ConnectivityState.READY) { - this.removeCurrentPick(); - this.calculateAndReportNewState(); - } - return; - } - for (const [index, child] of this.children.entries()) { - if (subchannel.realSubchannelEquals(child.subchannel)) { - if (newState === connectivity_state_1.ConnectivityState.READY) { - this.pickSubchannel(child.subchannel); - } - if (newState === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) { - child.hasReportedTransientFailure = true; - if (errorMessage) { - this.lastError = errorMessage; - } - this.maybeEnterStickyTransientFailureMode(); - if (index === this.currentSubchannelIndex) { - this.startNextSubchannelConnecting(index + 1); - } - } - child.subchannel.startConnecting(); - return; - } - } - } - startNextSubchannelConnecting(startIndex) { - clearTimeout(this.connectionDelayTimeout); - for (const [index, child] of this.children.entries()) { - if (index >= startIndex) { - const subchannelState = child.subchannel.getConnectivityState(); - if (subchannelState === connectivity_state_1.ConnectivityState.IDLE || subchannelState === connectivity_state_1.ConnectivityState.CONNECTING) { - this.startConnecting(index); - return; - } - } - } - this.maybeEnterStickyTransientFailureMode(); - } - startConnecting(subchannelIndex) { - var _a2, _b; - clearTimeout(this.connectionDelayTimeout); - this.currentSubchannelIndex = subchannelIndex; - if (this.children[subchannelIndex].subchannel.getConnectivityState() === connectivity_state_1.ConnectivityState.IDLE) { - trace6("Start connecting to subchannel with address " + this.children[subchannelIndex].subchannel.getAddress()); - process.nextTick(() => { - var _a3; - (_a3 = this.children[subchannelIndex]) === null || _a3 === undefined || _a3.subchannel.startConnecting(); - }); - } - this.connectionDelayTimeout = setTimeout(() => { - this.startNextSubchannelConnecting(subchannelIndex + 1); - }, CONNECTION_DELAY_INTERVAL_MS); - (_b = (_a2 = this.connectionDelayTimeout).unref) === null || _b === undefined || _b.call(_a2); - } - pickSubchannel(subchannel) { - trace6("Pick subchannel with address " + subchannel.getAddress()); - this.stickyTransientFailureMode = false; - subchannel.ref(); - this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef()); - this.removeCurrentPick(); - this.resetSubchannelList(); - subchannel.addConnectivityStateListener(this.subchannelStateListener); - subchannel.addHealthStateWatcher(this.pickedSubchannelHealthListener); - this.currentPick = subchannel; - clearTimeout(this.connectionDelayTimeout); - this.calculateAndReportNewState(); - } - updateState(newState, picker, errorMessage) { - trace6(connectivity_state_1.ConnectivityState[this.currentState] + " -> " + connectivity_state_1.ConnectivityState[newState]); - this.currentState = newState; - this.channelControlHelper.updateState(newState, picker, errorMessage); - } - resetSubchannelList() { - for (const child of this.children) { - child.subchannel.removeConnectivityStateListener(this.subchannelStateListener); - child.subchannel.unref(); - this.channelControlHelper.removeChannelzChild(child.subchannel.getChannelzRef()); - } - this.currentSubchannelIndex = 0; - this.children = []; - } - connectToAddressList(addressList, options) { - trace6("connectToAddressList([" + addressList.map((address) => (0, subchannel_address_1.subchannelAddressToString)(address)) + "])"); - const newChildrenList = addressList.map((address) => ({ - subchannel: this.channelControlHelper.createSubchannel(address, options), - hasReportedTransientFailure: false - })); - for (const { subchannel } of newChildrenList) { - if (subchannel.getConnectivityState() === connectivity_state_1.ConnectivityState.READY) { - this.pickSubchannel(subchannel); - return; - } - } - for (const { subchannel } of newChildrenList) { - subchannel.ref(); - this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef()); - } - this.resetSubchannelList(); - this.children = newChildrenList; - for (const { subchannel } of this.children) { - subchannel.addConnectivityStateListener(this.subchannelStateListener); - } - for (const child of this.children) { - if (child.subchannel.getConnectivityState() === connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) { - child.hasReportedTransientFailure = true; - } - } - this.startNextSubchannelConnecting(0); - this.calculateAndReportNewState(); - } - updateAddressList(maybeEndpointList, lbConfig, options, resolutionNote) { - if (!(lbConfig instanceof PickFirstLoadBalancingConfig)) { - return false; - } - if (!maybeEndpointList.ok) { - if (this.children.length === 0 && this.currentPick === null) { - this.channelControlHelper.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(maybeEndpointList.error), maybeEndpointList.error.details); - } - return true; - } - let endpointList = maybeEndpointList.value; - this.reportHealthStatus = options[REPORT_HEALTH_STATUS_OPTION_NAME]; - if (lbConfig.getShuffleAddressList()) { - endpointList = shuffled(endpointList); - } - const rawAddressList = [].concat(...endpointList.map((endpoint) => endpoint.addresses)); - trace6("updateAddressList([" + rawAddressList.map((address) => (0, subchannel_address_1.subchannelAddressToString)(address)) + "])"); - const addressList = interleaveAddressFamilies(rawAddressList); - this.latestAddressList = addressList; - this.latestOptions = options; - this.connectToAddressList(addressList, options); - this.latestResolutionNote = resolutionNote; - if (rawAddressList.length > 0) { - return true; - } else { - this.lastError = "No addresses resolved"; - return false; - } - } - exitIdle() { - if (this.currentState === connectivity_state_1.ConnectivityState.IDLE && this.latestAddressList) { - this.connectToAddressList(this.latestAddressList, this.latestOptions); - } - } - resetBackoff() {} - destroy() { - this.resetSubchannelList(); - this.removeCurrentPick(); - } - getTypeName() { - return TYPE_NAME; - } - } - exports.PickFirstLoadBalancer = PickFirstLoadBalancer; - var LEAF_CONFIG = new PickFirstLoadBalancingConfig(false); - - class LeafLoadBalancer { - constructor(endpoint, channelControlHelper, options, resolutionNote) { - this.endpoint = endpoint; - this.options = options; - this.resolutionNote = resolutionNote; - this.latestState = connectivity_state_1.ConnectivityState.IDLE; - const childChannelControlHelper = (0, load_balancer_1.createChildChannelControlHelper)(channelControlHelper, { - updateState: (connectivityState, picker, errorMessage) => { - this.latestState = connectivityState; - this.latestPicker = picker; - channelControlHelper.updateState(connectivityState, picker, errorMessage); - } - }); - this.pickFirstBalancer = new PickFirstLoadBalancer(childChannelControlHelper); - this.latestPicker = new picker_1.QueuePicker(this.pickFirstBalancer); - } - startConnecting() { - this.pickFirstBalancer.updateAddressList((0, call_interface_1.statusOrFromValue)([this.endpoint]), LEAF_CONFIG, Object.assign(Object.assign({}, this.options), { [REPORT_HEALTH_STATUS_OPTION_NAME]: true }), this.resolutionNote); - } - updateEndpoint(newEndpoint, newOptions) { - this.options = newOptions; - this.endpoint = newEndpoint; - if (this.latestState !== connectivity_state_1.ConnectivityState.IDLE) { - this.startConnecting(); - } - } - getConnectivityState() { - return this.latestState; - } - getPicker() { - return this.latestPicker; - } - getEndpoint() { - return this.endpoint; - } - exitIdle() { - this.pickFirstBalancer.exitIdle(); - } - destroy() { - this.pickFirstBalancer.destroy(); - } - } - exports.LeafLoadBalancer = LeafLoadBalancer; - function setup() { - (0, load_balancer_1.registerLoadBalancerType)(TYPE_NAME, PickFirstLoadBalancer, PickFirstLoadBalancingConfig); - (0, load_balancer_1.registerDefaultLoadBalancerType)(TYPE_NAME); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/certificate-provider.js -var require_certificate_provider = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FileWatcherCertificateProvider = undefined; - var fs = __require("fs"); - var logging = require_logging(); - var constants_1 = require_constants9(); - var util_1 = __require("util"); - var TRACER_NAME2 = "certificate_provider"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var readFilePromise = (0, util_1.promisify)(fs.readFile); - - class FileWatcherCertificateProvider { - constructor(config2) { - this.config = config2; - this.refreshTimer = null; - this.fileResultPromise = null; - this.latestCaUpdate = undefined; - this.caListeners = new Set; - this.latestIdentityUpdate = undefined; - this.identityListeners = new Set; - this.lastUpdateTime = null; - if (config2.certificateFile === undefined !== (config2.privateKeyFile === undefined)) { - throw new Error("certificateFile and privateKeyFile must be set or unset together"); - } - if (config2.certificateFile === undefined && config2.caCertificateFile === undefined) { - throw new Error("At least one of certificateFile and caCertificateFile must be set"); - } - trace6("File watcher constructed with config " + JSON.stringify(config2)); - } - updateCertificates() { - if (this.fileResultPromise) { - return; - } - this.fileResultPromise = Promise.allSettled([ - this.config.certificateFile ? readFilePromise(this.config.certificateFile) : Promise.reject(), - this.config.privateKeyFile ? readFilePromise(this.config.privateKeyFile) : Promise.reject(), - this.config.caCertificateFile ? readFilePromise(this.config.caCertificateFile) : Promise.reject() - ]); - this.fileResultPromise.then(([certificateResult, privateKeyResult, caCertificateResult]) => { - if (!this.refreshTimer) { - return; - } - trace6("File watcher read certificates certificate " + certificateResult.status + ", privateKey " + privateKeyResult.status + ", CA certificate " + caCertificateResult.status); - this.lastUpdateTime = new Date; - this.fileResultPromise = null; - if (certificateResult.status === "fulfilled" && privateKeyResult.status === "fulfilled") { - this.latestIdentityUpdate = { - certificate: certificateResult.value, - privateKey: privateKeyResult.value - }; - } else { - this.latestIdentityUpdate = null; - } - if (caCertificateResult.status === "fulfilled") { - this.latestCaUpdate = { - caCertificate: caCertificateResult.value - }; - } else { - this.latestCaUpdate = null; - } - for (const listener of this.identityListeners) { - listener(this.latestIdentityUpdate); - } - for (const listener of this.caListeners) { - listener(this.latestCaUpdate); - } - }); - trace6("File watcher initiated certificate update"); - } - maybeStartWatchingFiles() { - if (!this.refreshTimer) { - const timeSinceLastUpdate = this.lastUpdateTime ? new Date().getTime() - this.lastUpdateTime.getTime() : Infinity; - if (timeSinceLastUpdate > this.config.refreshIntervalMs) { - this.updateCertificates(); - } - if (timeSinceLastUpdate > this.config.refreshIntervalMs * 2) { - this.latestCaUpdate = undefined; - this.latestIdentityUpdate = undefined; - } - this.refreshTimer = setInterval(() => this.updateCertificates(), this.config.refreshIntervalMs); - trace6("File watcher started watching"); - } - } - maybeStopWatchingFiles() { - if (this.caListeners.size === 0 && this.identityListeners.size === 0) { - this.fileResultPromise = null; - if (this.refreshTimer) { - clearInterval(this.refreshTimer); - this.refreshTimer = null; - } - } - } - addCaCertificateListener(listener) { - this.caListeners.add(listener); - this.maybeStartWatchingFiles(); - if (this.latestCaUpdate !== undefined) { - process.nextTick(listener, this.latestCaUpdate); - } - } - removeCaCertificateListener(listener) { - this.caListeners.delete(listener); - this.maybeStopWatchingFiles(); - } - addIdentityCertificateListener(listener) { - this.identityListeners.add(listener); - this.maybeStartWatchingFiles(); - if (this.latestIdentityUpdate !== undefined) { - process.nextTick(listener, this.latestIdentityUpdate); - } - } - removeIdentityCertificateListener(listener) { - this.identityListeners.delete(listener); - this.maybeStopWatchingFiles(); - } - } - exports.FileWatcherCertificateProvider = FileWatcherCertificateProvider; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/experimental.js -var require_experimental = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = exports.createCertificateProviderChannelCredentials = exports.FileWatcherCertificateProvider = exports.createCertificateProviderServerCredentials = exports.createServerCredentialsWithInterceptors = exports.BaseSubchannelWrapper = exports.registerAdminService = exports.FilterStackFactory = exports.BaseFilter = exports.statusOrFromError = exports.statusOrFromValue = exports.PickResultType = exports.QueuePicker = exports.UnavailablePicker = exports.ChildLoadBalancerHandler = exports.EndpointMap = exports.endpointHasAddress = exports.endpointToString = exports.subchannelAddressToString = exports.LeafLoadBalancer = exports.isLoadBalancerNameRegistered = exports.parseLoadBalancingConfig = exports.selectLbConfigFromList = exports.registerLoadBalancerType = exports.createChildChannelControlHelper = exports.BackoffTimeout = exports.parseDuration = exports.durationToMs = exports.splitHostPort = exports.uriToString = exports.CHANNEL_ARGS_CONFIG_SELECTOR_KEY = exports.createResolver = exports.registerResolver = exports.log = exports.trace = undefined; - var logging_1 = require_logging(); - Object.defineProperty(exports, "trace", { enumerable: true, get: function() { - return logging_1.trace; - } }); - Object.defineProperty(exports, "log", { enumerable: true, get: function() { - return logging_1.log; - } }); - var resolver_1 = require_resolver(); - Object.defineProperty(exports, "registerResolver", { enumerable: true, get: function() { - return resolver_1.registerResolver; - } }); - Object.defineProperty(exports, "createResolver", { enumerable: true, get: function() { - return resolver_1.createResolver; - } }); - Object.defineProperty(exports, "CHANNEL_ARGS_CONFIG_SELECTOR_KEY", { enumerable: true, get: function() { - return resolver_1.CHANNEL_ARGS_CONFIG_SELECTOR_KEY; - } }); - var uri_parser_1 = require_uri_parser(); - Object.defineProperty(exports, "uriToString", { enumerable: true, get: function() { - return uri_parser_1.uriToString; - } }); - Object.defineProperty(exports, "splitHostPort", { enumerable: true, get: function() { - return uri_parser_1.splitHostPort; - } }); - var duration_1 = require_duration(); - Object.defineProperty(exports, "durationToMs", { enumerable: true, get: function() { - return duration_1.durationToMs; - } }); - Object.defineProperty(exports, "parseDuration", { enumerable: true, get: function() { - return duration_1.parseDuration; - } }); - var backoff_timeout_1 = require_backoff_timeout(); - Object.defineProperty(exports, "BackoffTimeout", { enumerable: true, get: function() { - return backoff_timeout_1.BackoffTimeout; - } }); - var load_balancer_1 = require_load_balancer(); - Object.defineProperty(exports, "createChildChannelControlHelper", { enumerable: true, get: function() { - return load_balancer_1.createChildChannelControlHelper; - } }); - Object.defineProperty(exports, "registerLoadBalancerType", { enumerable: true, get: function() { - return load_balancer_1.registerLoadBalancerType; - } }); - Object.defineProperty(exports, "selectLbConfigFromList", { enumerable: true, get: function() { - return load_balancer_1.selectLbConfigFromList; - } }); - Object.defineProperty(exports, "parseLoadBalancingConfig", { enumerable: true, get: function() { - return load_balancer_1.parseLoadBalancingConfig; - } }); - Object.defineProperty(exports, "isLoadBalancerNameRegistered", { enumerable: true, get: function() { - return load_balancer_1.isLoadBalancerNameRegistered; - } }); - var load_balancer_pick_first_1 = require_load_balancer_pick_first(); - Object.defineProperty(exports, "LeafLoadBalancer", { enumerable: true, get: function() { - return load_balancer_pick_first_1.LeafLoadBalancer; - } }); - var subchannel_address_1 = require_subchannel_address(); - Object.defineProperty(exports, "subchannelAddressToString", { enumerable: true, get: function() { - return subchannel_address_1.subchannelAddressToString; - } }); - Object.defineProperty(exports, "endpointToString", { enumerable: true, get: function() { - return subchannel_address_1.endpointToString; - } }); - Object.defineProperty(exports, "endpointHasAddress", { enumerable: true, get: function() { - return subchannel_address_1.endpointHasAddress; - } }); - Object.defineProperty(exports, "EndpointMap", { enumerable: true, get: function() { - return subchannel_address_1.EndpointMap; - } }); - var load_balancer_child_handler_1 = require_load_balancer_child_handler(); - Object.defineProperty(exports, "ChildLoadBalancerHandler", { enumerable: true, get: function() { - return load_balancer_child_handler_1.ChildLoadBalancerHandler; - } }); - var picker_1 = require_picker(); - Object.defineProperty(exports, "UnavailablePicker", { enumerable: true, get: function() { - return picker_1.UnavailablePicker; - } }); - Object.defineProperty(exports, "QueuePicker", { enumerable: true, get: function() { - return picker_1.QueuePicker; - } }); - Object.defineProperty(exports, "PickResultType", { enumerable: true, get: function() { - return picker_1.PickResultType; - } }); - var call_interface_1 = require_call_interface(); - Object.defineProperty(exports, "statusOrFromValue", { enumerable: true, get: function() { - return call_interface_1.statusOrFromValue; - } }); - Object.defineProperty(exports, "statusOrFromError", { enumerable: true, get: function() { - return call_interface_1.statusOrFromError; - } }); - var filter_1 = require_filter(); - Object.defineProperty(exports, "BaseFilter", { enumerable: true, get: function() { - return filter_1.BaseFilter; - } }); - var filter_stack_1 = require_filter_stack(); - Object.defineProperty(exports, "FilterStackFactory", { enumerable: true, get: function() { - return filter_stack_1.FilterStackFactory; - } }); - var admin_1 = require_admin(); - Object.defineProperty(exports, "registerAdminService", { enumerable: true, get: function() { - return admin_1.registerAdminService; - } }); - var subchannel_interface_1 = require_subchannel_interface(); - Object.defineProperty(exports, "BaseSubchannelWrapper", { enumerable: true, get: function() { - return subchannel_interface_1.BaseSubchannelWrapper; - } }); - var server_credentials_1 = require_server_credentials(); - Object.defineProperty(exports, "createServerCredentialsWithInterceptors", { enumerable: true, get: function() { - return server_credentials_1.createServerCredentialsWithInterceptors; - } }); - Object.defineProperty(exports, "createCertificateProviderServerCredentials", { enumerable: true, get: function() { - return server_credentials_1.createCertificateProviderServerCredentials; - } }); - var certificate_provider_1 = require_certificate_provider(); - Object.defineProperty(exports, "FileWatcherCertificateProvider", { enumerable: true, get: function() { - return certificate_provider_1.FileWatcherCertificateProvider; - } }); - var channel_credentials_1 = require_channel_credentials(); - Object.defineProperty(exports, "createCertificateProviderChannelCredentials", { enumerable: true, get: function() { - return channel_credentials_1.createCertificateProviderChannelCredentials; - } }); - var internal_channel_1 = require_internal_channel(); - Object.defineProperty(exports, "SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX", { enumerable: true, get: function() { - return internal_channel_1.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX; - } }); -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/resolver-uds.js -var require_resolver_uds = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.setup = setup; - var resolver_1 = require_resolver(); - var call_interface_1 = require_call_interface(); - - class UdsResolver { - constructor(target, listener, channelOptions) { - this.listener = listener; - this.hasReturnedResult = false; - this.endpoints = []; - let path; - if (target.authority === "") { - path = "/" + target.path; - } else { - path = target.path; - } - this.endpoints = [{ addresses: [{ path }] }]; - } - updateResolution() { - if (!this.hasReturnedResult) { - this.hasReturnedResult = true; - process.nextTick(this.listener, (0, call_interface_1.statusOrFromValue)(this.endpoints), {}, null, ""); - } - } - destroy() { - this.hasReturnedResult = false; - } - static getDefaultAuthority(target) { - return "localhost"; - } - } - function setup() { - (0, resolver_1.registerResolver)("unix", UdsResolver); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/resolver-ip.js -var require_resolver_ip = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.setup = setup; - var net_1 = __require("net"); - var call_interface_1 = require_call_interface(); - var constants_1 = require_constants9(); - var metadata_1 = require_metadata(); - var resolver_1 = require_resolver(); - var subchannel_address_1 = require_subchannel_address(); - var uri_parser_1 = require_uri_parser(); - var logging = require_logging(); - var TRACER_NAME2 = "ip_resolver"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var IPV4_SCHEME = "ipv4"; - var IPV6_SCHEME = "ipv6"; - var DEFAULT_PORT = 443; - - class IpResolver { - constructor(target, listener, channelOptions) { - var _a2; - this.listener = listener; - this.endpoints = []; - this.error = null; - this.hasReturnedResult = false; - trace6("Resolver constructed for target " + (0, uri_parser_1.uriToString)(target)); - const addresses = []; - if (!(target.scheme === IPV4_SCHEME || target.scheme === IPV6_SCHEME)) { - this.error = { - code: constants_1.Status.UNAVAILABLE, - details: `Unrecognized scheme ${target.scheme} in IP resolver`, - metadata: new metadata_1.Metadata - }; - return; - } - const pathList = target.path.split(","); - for (const path of pathList) { - const hostPort = (0, uri_parser_1.splitHostPort)(path); - if (hostPort === null) { - this.error = { - code: constants_1.Status.UNAVAILABLE, - details: `Failed to parse ${target.scheme} address ${path}`, - metadata: new metadata_1.Metadata - }; - return; - } - if (target.scheme === IPV4_SCHEME && !(0, net_1.isIPv4)(hostPort.host) || target.scheme === IPV6_SCHEME && !(0, net_1.isIPv6)(hostPort.host)) { - this.error = { - code: constants_1.Status.UNAVAILABLE, - details: `Failed to parse ${target.scheme} address ${path}`, - metadata: new metadata_1.Metadata - }; - return; - } - addresses.push({ - host: hostPort.host, - port: (_a2 = hostPort.port) !== null && _a2 !== undefined ? _a2 : DEFAULT_PORT - }); - } - this.endpoints = addresses.map((address) => ({ addresses: [address] })); - trace6("Parsed " + target.scheme + " address list " + addresses.map(subchannel_address_1.subchannelAddressToString)); - } - updateResolution() { - if (!this.hasReturnedResult) { - this.hasReturnedResult = true; - process.nextTick(() => { - if (this.error) { - this.listener((0, call_interface_1.statusOrFromError)(this.error), {}, null, ""); - } else { - this.listener((0, call_interface_1.statusOrFromValue)(this.endpoints), {}, null, ""); - } - }); - } - } - destroy() { - this.hasReturnedResult = false; - } - static getDefaultAuthority(target) { - return target.path.split(",")[0]; - } - } - function setup() { - (0, resolver_1.registerResolver)(IPV4_SCHEME, IpResolver); - (0, resolver_1.registerResolver)(IPV6_SCHEME, IpResolver); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js -var require_load_balancer_round_robin = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RoundRobinLoadBalancer = undefined; - exports.setup = setup; - var load_balancer_1 = require_load_balancer(); - var connectivity_state_1 = require_connectivity_state(); - var picker_1 = require_picker(); - var logging = require_logging(); - var constants_1 = require_constants9(); - var subchannel_address_1 = require_subchannel_address(); - var load_balancer_pick_first_1 = require_load_balancer_pick_first(); - var TRACER_NAME2 = "round_robin"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var TYPE_NAME = "round_robin"; - - class RoundRobinLoadBalancingConfig { - getLoadBalancerName() { - return TYPE_NAME; - } - constructor() {} - toJsonObject() { - return { - [TYPE_NAME]: {} - }; - } - static createFromJson(obj) { - return new RoundRobinLoadBalancingConfig; - } - } - - class RoundRobinPicker { - constructor(children, nextIndex = 0) { - this.children = children; - this.nextIndex = nextIndex; - } - pick(pickArgs) { - const childPicker = this.children[this.nextIndex].picker; - this.nextIndex = (this.nextIndex + 1) % this.children.length; - return childPicker.pick(pickArgs); - } - peekNextEndpoint() { - return this.children[this.nextIndex].endpoint; - } - } - function rotateArray(list5, startIndex) { - return [...list5.slice(startIndex), ...list5.slice(0, startIndex)]; - } - - class RoundRobinLoadBalancer { - constructor(channelControlHelper) { - this.channelControlHelper = channelControlHelper; - this.children = []; - this.currentState = connectivity_state_1.ConnectivityState.IDLE; - this.currentReadyPicker = null; - this.updatesPaused = false; - this.lastError = null; - this.childChannelControlHelper = (0, load_balancer_1.createChildChannelControlHelper)(channelControlHelper, { - updateState: (connectivityState, picker, errorMessage) => { - if (this.currentState === connectivity_state_1.ConnectivityState.READY && connectivityState !== connectivity_state_1.ConnectivityState.READY) { - this.channelControlHelper.requestReresolution(); - } - if (errorMessage) { - this.lastError = errorMessage; - } - this.calculateAndUpdateState(); - } - }); - } - countChildrenWithState(state) { - return this.children.filter((child) => child.getConnectivityState() === state).length; - } - calculateAndUpdateState() { - if (this.updatesPaused) { - return; - } - if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.READY) > 0) { - const readyChildren = this.children.filter((child) => child.getConnectivityState() === connectivity_state_1.ConnectivityState.READY); - let index = 0; - if (this.currentReadyPicker !== null) { - const nextPickedEndpoint = this.currentReadyPicker.peekNextEndpoint(); - index = readyChildren.findIndex((child) => (0, subchannel_address_1.endpointEqual)(child.getEndpoint(), nextPickedEndpoint)); - if (index < 0) { - index = 0; - } - } - this.updateState(connectivity_state_1.ConnectivityState.READY, new RoundRobinPicker(readyChildren.map((child) => ({ - endpoint: child.getEndpoint(), - picker: child.getPicker() - })), index), null); - } else if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.CONNECTING) > 0) { - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this), null); - } else if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) > 0) { - const errorMessage = `round_robin: No connection established. Last error: ${this.lastError}`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: errorMessage - }), errorMessage); - } else { - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); - } - for (const child of this.children) { - if (child.getConnectivityState() === connectivity_state_1.ConnectivityState.IDLE) { - child.exitIdle(); - } - } - } - updateState(newState, picker, errorMessage) { - trace6(connectivity_state_1.ConnectivityState[this.currentState] + " -> " + connectivity_state_1.ConnectivityState[newState]); - if (newState === connectivity_state_1.ConnectivityState.READY) { - this.currentReadyPicker = picker; - } else { - this.currentReadyPicker = null; - } - this.currentState = newState; - this.channelControlHelper.updateState(newState, picker, errorMessage); - } - resetSubchannelList() { - for (const child of this.children) { - child.destroy(); - } - this.children = []; - } - updateAddressList(maybeEndpointList, lbConfig, options, resolutionNote) { - if (!(lbConfig instanceof RoundRobinLoadBalancingConfig)) { - return false; - } - if (!maybeEndpointList.ok) { - if (this.children.length === 0) { - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(maybeEndpointList.error), maybeEndpointList.error.details); - } - return true; - } - const startIndex = Math.random() * maybeEndpointList.value.length | 0; - const endpointList = rotateArray(maybeEndpointList.value, startIndex); - this.resetSubchannelList(); - if (endpointList.length === 0) { - const errorMessage = `No addresses resolved. Resolution note: ${resolutionNote}`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ details: errorMessage }), errorMessage); - } - trace6("Connect to endpoint list " + endpointList.map(subchannel_address_1.endpointToString)); - this.updatesPaused = true; - this.children = endpointList.map((endpoint) => new load_balancer_pick_first_1.LeafLoadBalancer(endpoint, this.childChannelControlHelper, options, resolutionNote)); - for (const child of this.children) { - child.startConnecting(); - } - this.updatesPaused = false; - this.calculateAndUpdateState(); - return true; - } - exitIdle() {} - resetBackoff() {} - destroy() { - this.resetSubchannelList(); - } - getTypeName() { - return TYPE_NAME; - } - } - exports.RoundRobinLoadBalancer = RoundRobinLoadBalancer; - function setup() { - (0, load_balancer_1.registerLoadBalancerType)(TYPE_NAME, RoundRobinLoadBalancer, RoundRobinLoadBalancingConfig); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js -var require_load_balancer_outlier_detection = __commonJS((exports) => { - var _a2; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OutlierDetectionLoadBalancer = exports.OutlierDetectionLoadBalancingConfig = undefined; - exports.setup = setup; - var connectivity_state_1 = require_connectivity_state(); - var constants_1 = require_constants9(); - var duration_1 = require_duration(); - var experimental_1 = require_experimental(); - var load_balancer_1 = require_load_balancer(); - var load_balancer_child_handler_1 = require_load_balancer_child_handler(); - var picker_1 = require_picker(); - var subchannel_address_1 = require_subchannel_address(); - var subchannel_interface_1 = require_subchannel_interface(); - var logging = require_logging(); - var TRACER_NAME2 = "outlier_detection"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var TYPE_NAME = "outlier_detection"; - var OUTLIER_DETECTION_ENABLED = ((_a2 = process.env.GRPC_EXPERIMENTAL_ENABLE_OUTLIER_DETECTION) !== null && _a2 !== undefined ? _a2 : "true") === "true"; - var defaultSuccessRateEjectionConfig = { - stdev_factor: 1900, - enforcement_percentage: 100, - minimum_hosts: 5, - request_volume: 100 - }; - var defaultFailurePercentageEjectionConfig = { - threshold: 85, - enforcement_percentage: 100, - minimum_hosts: 5, - request_volume: 50 - }; - function validateFieldType(obj, fieldName, expectedType, objectName) { - if (fieldName in obj && obj[fieldName] !== undefined && typeof obj[fieldName] !== expectedType) { - const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName; - throw new Error(`outlier detection config ${fullFieldName} parse error: expected ${expectedType}, got ${typeof obj[fieldName]}`); - } - } - function validatePositiveDuration(obj, fieldName, objectName) { - const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName; - if (fieldName in obj && obj[fieldName] !== undefined) { - if (!(0, duration_1.isDuration)(obj[fieldName])) { - throw new Error(`outlier detection config ${fullFieldName} parse error: expected Duration, got ${typeof obj[fieldName]}`); - } - if (!(obj[fieldName].seconds >= 0 && obj[fieldName].seconds <= 315576000000 && obj[fieldName].nanos >= 0 && obj[fieldName].nanos <= 999999999)) { - throw new Error(`outlier detection config ${fullFieldName} parse error: values out of range for non-negative Duaration`); - } - } - } - function validatePercentage(obj, fieldName, objectName) { - const fullFieldName = objectName ? `${objectName}.${fieldName}` : fieldName; - validateFieldType(obj, fieldName, "number", objectName); - if (fieldName in obj && obj[fieldName] !== undefined && !(obj[fieldName] >= 0 && obj[fieldName] <= 100)) { - throw new Error(`outlier detection config ${fullFieldName} parse error: value out of range for percentage (0-100)`); - } - } - - class OutlierDetectionLoadBalancingConfig { - constructor(intervalMs, baseEjectionTimeMs, maxEjectionTimeMs, maxEjectionPercent, successRateEjection, failurePercentageEjection, childPolicy) { - this.childPolicy = childPolicy; - if (childPolicy.getLoadBalancerName() === "pick_first") { - throw new Error("outlier_detection LB policy cannot have a pick_first child policy"); - } - this.intervalMs = intervalMs !== null && intervalMs !== undefined ? intervalMs : 1e4; - this.baseEjectionTimeMs = baseEjectionTimeMs !== null && baseEjectionTimeMs !== undefined ? baseEjectionTimeMs : 30000; - this.maxEjectionTimeMs = maxEjectionTimeMs !== null && maxEjectionTimeMs !== undefined ? maxEjectionTimeMs : 300000; - this.maxEjectionPercent = maxEjectionPercent !== null && maxEjectionPercent !== undefined ? maxEjectionPercent : 10; - this.successRateEjection = successRateEjection ? Object.assign(Object.assign({}, defaultSuccessRateEjectionConfig), successRateEjection) : null; - this.failurePercentageEjection = failurePercentageEjection ? Object.assign(Object.assign({}, defaultFailurePercentageEjectionConfig), failurePercentageEjection) : null; - } - getLoadBalancerName() { - return TYPE_NAME; - } - toJsonObject() { - var _a3, _b; - return { - outlier_detection: { - interval: (0, duration_1.msToDuration)(this.intervalMs), - base_ejection_time: (0, duration_1.msToDuration)(this.baseEjectionTimeMs), - max_ejection_time: (0, duration_1.msToDuration)(this.maxEjectionTimeMs), - max_ejection_percent: this.maxEjectionPercent, - success_rate_ejection: (_a3 = this.successRateEjection) !== null && _a3 !== undefined ? _a3 : undefined, - failure_percentage_ejection: (_b = this.failurePercentageEjection) !== null && _b !== undefined ? _b : undefined, - child_policy: [this.childPolicy.toJsonObject()] - } - }; - } - getIntervalMs() { - return this.intervalMs; - } - getBaseEjectionTimeMs() { - return this.baseEjectionTimeMs; - } - getMaxEjectionTimeMs() { - return this.maxEjectionTimeMs; - } - getMaxEjectionPercent() { - return this.maxEjectionPercent; - } - getSuccessRateEjectionConfig() { - return this.successRateEjection; - } - getFailurePercentageEjectionConfig() { - return this.failurePercentageEjection; - } - getChildPolicy() { - return this.childPolicy; - } - static createFromJson(obj) { - var _a3; - validatePositiveDuration(obj, "interval"); - validatePositiveDuration(obj, "base_ejection_time"); - validatePositiveDuration(obj, "max_ejection_time"); - validatePercentage(obj, "max_ejection_percent"); - if ("success_rate_ejection" in obj && obj.success_rate_ejection !== undefined) { - if (typeof obj.success_rate_ejection !== "object") { - throw new Error("outlier detection config success_rate_ejection must be an object"); - } - validateFieldType(obj.success_rate_ejection, "stdev_factor", "number", "success_rate_ejection"); - validatePercentage(obj.success_rate_ejection, "enforcement_percentage", "success_rate_ejection"); - validateFieldType(obj.success_rate_ejection, "minimum_hosts", "number", "success_rate_ejection"); - validateFieldType(obj.success_rate_ejection, "request_volume", "number", "success_rate_ejection"); - } - if ("failure_percentage_ejection" in obj && obj.failure_percentage_ejection !== undefined) { - if (typeof obj.failure_percentage_ejection !== "object") { - throw new Error("outlier detection config failure_percentage_ejection must be an object"); - } - validatePercentage(obj.failure_percentage_ejection, "threshold", "failure_percentage_ejection"); - validatePercentage(obj.failure_percentage_ejection, "enforcement_percentage", "failure_percentage_ejection"); - validateFieldType(obj.failure_percentage_ejection, "minimum_hosts", "number", "failure_percentage_ejection"); - validateFieldType(obj.failure_percentage_ejection, "request_volume", "number", "failure_percentage_ejection"); - } - if (!("child_policy" in obj) || !Array.isArray(obj.child_policy)) { - throw new Error("outlier detection config child_policy must be an array"); - } - const childPolicy = (0, load_balancer_1.selectLbConfigFromList)(obj.child_policy); - if (!childPolicy) { - throw new Error("outlier detection config child_policy: no valid recognized policy found"); - } - return new OutlierDetectionLoadBalancingConfig(obj.interval ? (0, duration_1.durationToMs)(obj.interval) : null, obj.base_ejection_time ? (0, duration_1.durationToMs)(obj.base_ejection_time) : null, obj.max_ejection_time ? (0, duration_1.durationToMs)(obj.max_ejection_time) : null, (_a3 = obj.max_ejection_percent) !== null && _a3 !== undefined ? _a3 : null, obj.success_rate_ejection, obj.failure_percentage_ejection, childPolicy); - } - } - exports.OutlierDetectionLoadBalancingConfig = OutlierDetectionLoadBalancingConfig; - - class OutlierDetectionSubchannelWrapper extends subchannel_interface_1.BaseSubchannelWrapper { - constructor(childSubchannel, mapEntry) { - super(childSubchannel); - this.mapEntry = mapEntry; - this.refCount = 0; - } - ref() { - this.child.ref(); - this.refCount += 1; - } - unref() { - this.child.unref(); - this.refCount -= 1; - if (this.refCount <= 0) { - if (this.mapEntry) { - const index = this.mapEntry.subchannelWrappers.indexOf(this); - if (index >= 0) { - this.mapEntry.subchannelWrappers.splice(index, 1); - } - } - } - } - eject() { - this.setHealthy(false); - } - uneject() { - this.setHealthy(true); - } - getMapEntry() { - return this.mapEntry; - } - getWrappedSubchannel() { - return this.child; - } - } - function createEmptyBucket() { - return { - success: 0, - failure: 0 - }; - } - - class CallCounter { - constructor() { - this.activeBucket = createEmptyBucket(); - this.inactiveBucket = createEmptyBucket(); - } - addSuccess() { - this.activeBucket.success += 1; - } - addFailure() { - this.activeBucket.failure += 1; - } - switchBuckets() { - this.inactiveBucket = this.activeBucket; - this.activeBucket = createEmptyBucket(); - } - getLastSuccesses() { - return this.inactiveBucket.success; - } - getLastFailures() { - return this.inactiveBucket.failure; - } - } - - class OutlierDetectionPicker { - constructor(wrappedPicker, countCalls) { - this.wrappedPicker = wrappedPicker; - this.countCalls = countCalls; - } - pick(pickArgs) { - const wrappedPick = this.wrappedPicker.pick(pickArgs); - if (wrappedPick.pickResultType === picker_1.PickResultType.COMPLETE) { - const subchannelWrapper = wrappedPick.subchannel; - const mapEntry = subchannelWrapper.getMapEntry(); - if (mapEntry) { - let onCallEnded = wrappedPick.onCallEnded; - if (this.countCalls) { - onCallEnded = (statusCode, details, metadata) => { - var _a3; - if (statusCode === constants_1.Status.OK) { - mapEntry.counter.addSuccess(); - } else { - mapEntry.counter.addFailure(); - } - (_a3 = wrappedPick.onCallEnded) === null || _a3 === undefined || _a3.call(wrappedPick, statusCode, details, metadata); - }; - } - return Object.assign(Object.assign({}, wrappedPick), { subchannel: subchannelWrapper.getWrappedSubchannel(), onCallEnded }); - } else { - return Object.assign(Object.assign({}, wrappedPick), { subchannel: subchannelWrapper.getWrappedSubchannel() }); - } - } else { - return wrappedPick; - } - } - } - - class OutlierDetectionLoadBalancer { - constructor(channelControlHelper) { - this.entryMap = new subchannel_address_1.EndpointMap; - this.latestConfig = null; - this.timerStartTime = null; - this.childBalancer = new load_balancer_child_handler_1.ChildLoadBalancerHandler((0, experimental_1.createChildChannelControlHelper)(channelControlHelper, { - createSubchannel: (subchannelAddress, subchannelArgs) => { - const originalSubchannel = channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs); - const mapEntry = this.entryMap.getForSubchannelAddress(subchannelAddress); - const subchannelWrapper = new OutlierDetectionSubchannelWrapper(originalSubchannel, mapEntry); - if ((mapEntry === null || mapEntry === undefined ? undefined : mapEntry.currentEjectionTimestamp) !== null) { - subchannelWrapper.eject(); - } - mapEntry === null || mapEntry === undefined || mapEntry.subchannelWrappers.push(subchannelWrapper); - return subchannelWrapper; - }, - updateState: (connectivityState, picker, errorMessage) => { - if (connectivityState === connectivity_state_1.ConnectivityState.READY) { - channelControlHelper.updateState(connectivityState, new OutlierDetectionPicker(picker, this.isCountingEnabled()), errorMessage); - } else { - channelControlHelper.updateState(connectivityState, picker, errorMessage); - } - } - })); - this.ejectionTimer = setInterval(() => {}, 0); - clearInterval(this.ejectionTimer); - } - isCountingEnabled() { - return this.latestConfig !== null && (this.latestConfig.getSuccessRateEjectionConfig() !== null || this.latestConfig.getFailurePercentageEjectionConfig() !== null); - } - getCurrentEjectionPercent() { - let ejectionCount = 0; - for (const mapEntry of this.entryMap.values()) { - if (mapEntry.currentEjectionTimestamp !== null) { - ejectionCount += 1; - } - } - return ejectionCount * 100 / this.entryMap.size; - } - runSuccessRateCheck(ejectionTimestamp) { - if (!this.latestConfig) { - return; - } - const successRateConfig = this.latestConfig.getSuccessRateEjectionConfig(); - if (!successRateConfig) { - return; - } - trace6("Running success rate check"); - const targetRequestVolume = successRateConfig.request_volume; - let addresesWithTargetVolume = 0; - const successRates = []; - for (const [endpoint, mapEntry] of this.entryMap.entries()) { - const successes = mapEntry.counter.getLastSuccesses(); - const failures = mapEntry.counter.getLastFailures(); - trace6("Stats for " + (0, subchannel_address_1.endpointToString)(endpoint) + ": successes=" + successes + " failures=" + failures + " targetRequestVolume=" + targetRequestVolume); - if (successes + failures >= targetRequestVolume) { - addresesWithTargetVolume += 1; - successRates.push(successes / (successes + failures)); - } - } - trace6("Found " + addresesWithTargetVolume + " success rate candidates; currentEjectionPercent=" + this.getCurrentEjectionPercent() + " successRates=[" + successRates + "]"); - if (addresesWithTargetVolume < successRateConfig.minimum_hosts) { - return; - } - const successRateMean = successRates.reduce((a, b) => a + b) / successRates.length; - let successRateDeviationSum = 0; - for (const rate of successRates) { - const deviation = rate - successRateMean; - successRateDeviationSum += deviation * deviation; - } - const successRateVariance = successRateDeviationSum / successRates.length; - const successRateStdev = Math.sqrt(successRateVariance); - const ejectionThreshold = successRateMean - successRateStdev * (successRateConfig.stdev_factor / 1000); - trace6("stdev=" + successRateStdev + " ejectionThreshold=" + ejectionThreshold); - for (const [address, mapEntry] of this.entryMap.entries()) { - if (this.getCurrentEjectionPercent() >= this.latestConfig.getMaxEjectionPercent()) { - break; - } - const successes = mapEntry.counter.getLastSuccesses(); - const failures = mapEntry.counter.getLastFailures(); - if (successes + failures < targetRequestVolume) { - continue; - } - const successRate = successes / (successes + failures); - trace6("Checking candidate " + address + " successRate=" + successRate); - if (successRate < ejectionThreshold) { - const randomNumber = Math.random() * 100; - trace6("Candidate " + address + " randomNumber=" + randomNumber + " enforcement_percentage=" + successRateConfig.enforcement_percentage); - if (randomNumber < successRateConfig.enforcement_percentage) { - trace6("Ejecting candidate " + address); - this.eject(mapEntry, ejectionTimestamp); - } - } - } - } - runFailurePercentageCheck(ejectionTimestamp) { - if (!this.latestConfig) { - return; - } - const failurePercentageConfig = this.latestConfig.getFailurePercentageEjectionConfig(); - if (!failurePercentageConfig) { - return; - } - trace6("Running failure percentage check. threshold=" + failurePercentageConfig.threshold + " request volume threshold=" + failurePercentageConfig.request_volume); - let addressesWithTargetVolume = 0; - for (const mapEntry of this.entryMap.values()) { - const successes = mapEntry.counter.getLastSuccesses(); - const failures = mapEntry.counter.getLastFailures(); - if (successes + failures >= failurePercentageConfig.request_volume) { - addressesWithTargetVolume += 1; - } - } - if (addressesWithTargetVolume < failurePercentageConfig.minimum_hosts) { - return; - } - for (const [address, mapEntry] of this.entryMap.entries()) { - if (this.getCurrentEjectionPercent() >= this.latestConfig.getMaxEjectionPercent()) { - break; - } - const successes = mapEntry.counter.getLastSuccesses(); - const failures = mapEntry.counter.getLastFailures(); - trace6("Candidate successes=" + successes + " failures=" + failures); - if (successes + failures < failurePercentageConfig.request_volume) { - continue; - } - const failurePercentage = failures * 100 / (failures + successes); - if (failurePercentage > failurePercentageConfig.threshold) { - const randomNumber = Math.random() * 100; - trace6("Candidate " + address + " randomNumber=" + randomNumber + " enforcement_percentage=" + failurePercentageConfig.enforcement_percentage); - if (randomNumber < failurePercentageConfig.enforcement_percentage) { - trace6("Ejecting candidate " + address); - this.eject(mapEntry, ejectionTimestamp); - } - } - } - } - eject(mapEntry, ejectionTimestamp) { - mapEntry.currentEjectionTimestamp = new Date; - mapEntry.ejectionTimeMultiplier += 1; - for (const subchannelWrapper of mapEntry.subchannelWrappers) { - subchannelWrapper.eject(); - } - } - uneject(mapEntry) { - mapEntry.currentEjectionTimestamp = null; - for (const subchannelWrapper of mapEntry.subchannelWrappers) { - subchannelWrapper.uneject(); - } - } - switchAllBuckets() { - for (const mapEntry of this.entryMap.values()) { - mapEntry.counter.switchBuckets(); - } - } - startTimer(delayMs) { - var _a3, _b; - this.ejectionTimer = setTimeout(() => this.runChecks(), delayMs); - (_b = (_a3 = this.ejectionTimer).unref) === null || _b === undefined || _b.call(_a3); - } - runChecks() { - const ejectionTimestamp = new Date; - trace6("Ejection timer running"); - this.switchAllBuckets(); - if (!this.latestConfig) { - return; - } - this.timerStartTime = ejectionTimestamp; - this.startTimer(this.latestConfig.getIntervalMs()); - this.runSuccessRateCheck(ejectionTimestamp); - this.runFailurePercentageCheck(ejectionTimestamp); - for (const [address, mapEntry] of this.entryMap.entries()) { - if (mapEntry.currentEjectionTimestamp === null) { - if (mapEntry.ejectionTimeMultiplier > 0) { - mapEntry.ejectionTimeMultiplier -= 1; - } - } else { - const baseEjectionTimeMs = this.latestConfig.getBaseEjectionTimeMs(); - const maxEjectionTimeMs = this.latestConfig.getMaxEjectionTimeMs(); - const returnTime = new Date(mapEntry.currentEjectionTimestamp.getTime()); - returnTime.setMilliseconds(returnTime.getMilliseconds() + Math.min(baseEjectionTimeMs * mapEntry.ejectionTimeMultiplier, Math.max(baseEjectionTimeMs, maxEjectionTimeMs))); - if (returnTime < new Date) { - trace6("Unejecting " + address); - this.uneject(mapEntry); - } - } - } - } - updateAddressList(endpointList, lbConfig, options, resolutionNote) { - if (!(lbConfig instanceof OutlierDetectionLoadBalancingConfig)) { - return false; - } - trace6("Received update with config: " + JSON.stringify(lbConfig.toJsonObject(), undefined, 2)); - if (endpointList.ok) { - for (const endpoint of endpointList.value) { - if (!this.entryMap.has(endpoint)) { - trace6("Adding map entry for " + (0, subchannel_address_1.endpointToString)(endpoint)); - this.entryMap.set(endpoint, { - counter: new CallCounter, - currentEjectionTimestamp: null, - ejectionTimeMultiplier: 0, - subchannelWrappers: [] - }); - } - } - this.entryMap.deleteMissing(endpointList.value); - } - const childPolicy = lbConfig.getChildPolicy(); - this.childBalancer.updateAddressList(endpointList, childPolicy, options, resolutionNote); - if (lbConfig.getSuccessRateEjectionConfig() || lbConfig.getFailurePercentageEjectionConfig()) { - if (this.timerStartTime) { - trace6("Previous timer existed. Replacing timer"); - clearTimeout(this.ejectionTimer); - const remainingDelay = lbConfig.getIntervalMs() - (new Date().getTime() - this.timerStartTime.getTime()); - this.startTimer(remainingDelay); - } else { - trace6("Starting new timer"); - this.timerStartTime = new Date; - this.startTimer(lbConfig.getIntervalMs()); - this.switchAllBuckets(); - } - } else { - trace6("Counting disabled. Cancelling timer."); - this.timerStartTime = null; - clearTimeout(this.ejectionTimer); - for (const mapEntry of this.entryMap.values()) { - this.uneject(mapEntry); - mapEntry.ejectionTimeMultiplier = 0; - } - } - this.latestConfig = lbConfig; - return true; - } - exitIdle() { - this.childBalancer.exitIdle(); - } - resetBackoff() { - this.childBalancer.resetBackoff(); - } - destroy() { - clearTimeout(this.ejectionTimer); - this.childBalancer.destroy(); - } - getTypeName() { - return TYPE_NAME; - } - } - exports.OutlierDetectionLoadBalancer = OutlierDetectionLoadBalancer; - function setup() { - if (OUTLIER_DETECTION_ENABLED) { - (0, experimental_1.registerLoadBalancerType)(TYPE_NAME, OutlierDetectionLoadBalancer, OutlierDetectionLoadBalancingConfig); - } - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/priority-queue.js -var require_priority_queue = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PriorityQueue = undefined; - var top = 0; - var parent = (i) => Math.floor(i / 2); - var left = (i) => i * 2 + 1; - var right = (i) => i * 2 + 2; - - class PriorityQueue { - constructor(comparator = (a, b) => a > b) { - this.comparator = comparator; - this.heap = []; - } - size() { - return this.heap.length; - } - isEmpty() { - return this.size() == 0; - } - peek() { - return this.heap[top]; - } - push(...values) { - values.forEach((value) => { - this.heap.push(value); - this.siftUp(); - }); - return this.size(); - } - pop() { - const poppedValue = this.peek(); - const bottom = this.size() - 1; - if (bottom > top) { - this.swap(top, bottom); - } - this.heap.pop(); - this.siftDown(); - return poppedValue; - } - replace(value) { - const replacedValue = this.peek(); - this.heap[top] = value; - this.siftDown(); - return replacedValue; - } - greater(i, j) { - return this.comparator(this.heap[i], this.heap[j]); - } - swap(i, j) { - [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]]; - } - siftUp() { - let node = this.size() - 1; - while (node > top && this.greater(node, parent(node))) { - this.swap(node, parent(node)); - node = parent(node); - } - } - siftDown() { - let node = top; - while (left(node) < this.size() && this.greater(left(node), node) || right(node) < this.size() && this.greater(right(node), node)) { - let maxChild = right(node) < this.size() && this.greater(right(node), left(node)) ? right(node) : left(node); - this.swap(node, maxChild); - node = maxChild; - } - } - } - exports.PriorityQueue = PriorityQueue; -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/load-balancer-weighted-round-robin.js -var require_load_balancer_weighted_round_robin = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.WeightedRoundRobinLoadBalancingConfig = undefined; - exports.setup = setup; - var connectivity_state_1 = require_connectivity_state(); - var constants_1 = require_constants9(); - var duration_1 = require_duration(); - var load_balancer_1 = require_load_balancer(); - var load_balancer_pick_first_1 = require_load_balancer_pick_first(); - var logging = require_logging(); - var orca_1 = require_orca(); - var picker_1 = require_picker(); - var priority_queue_1 = require_priority_queue(); - var subchannel_address_1 = require_subchannel_address(); - var TRACER_NAME2 = "weighted_round_robin"; - function trace6(text) { - logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME2, text); - } - var TYPE_NAME = "weighted_round_robin"; - var DEFAULT_OOB_REPORTING_PERIOD_MS = 1e4; - var DEFAULT_BLACKOUT_PERIOD_MS = 1e4; - var DEFAULT_WEIGHT_EXPIRATION_PERIOD_MS = 3 * 60000; - var DEFAULT_WEIGHT_UPDATE_PERIOD_MS = 1000; - var DEFAULT_ERROR_UTILIZATION_PENALTY = 1; - function validateFieldType(obj, fieldName, expectedType) { - if (fieldName in obj && obj[fieldName] !== undefined && typeof obj[fieldName] !== expectedType) { - throw new Error(`weighted round robin config ${fieldName} parse error: expected ${expectedType}, got ${typeof obj[fieldName]}`); - } - } - function parseDurationField(obj, fieldName) { - if (fieldName in obj && obj[fieldName] !== undefined && obj[fieldName] !== null) { - let durationObject; - if ((0, duration_1.isDuration)(obj[fieldName])) { - durationObject = obj[fieldName]; - } else if ((0, duration_1.isDurationMessage)(obj[fieldName])) { - durationObject = (0, duration_1.durationMessageToDuration)(obj[fieldName]); - } else if (typeof obj[fieldName] === "string") { - const parsedDuration = (0, duration_1.parseDuration)(obj[fieldName]); - if (!parsedDuration) { - throw new Error(`weighted round robin config ${fieldName}: failed to parse duration string ${obj[fieldName]}`); - } - durationObject = parsedDuration; - } else { - throw new Error(`weighted round robin config ${fieldName}: expected duration, got ${typeof obj[fieldName]}`); - } - return (0, duration_1.durationToMs)(durationObject); - } - return null; - } - - class WeightedRoundRobinLoadBalancingConfig { - constructor(enableOobLoadReport, oobLoadReportingPeriodMs, blackoutPeriodMs, weightExpirationPeriodMs, weightUpdatePeriodMs, errorUtilizationPenalty) { - this.enableOobLoadReport = enableOobLoadReport !== null && enableOobLoadReport !== undefined ? enableOobLoadReport : false; - this.oobLoadReportingPeriodMs = oobLoadReportingPeriodMs !== null && oobLoadReportingPeriodMs !== undefined ? oobLoadReportingPeriodMs : DEFAULT_OOB_REPORTING_PERIOD_MS; - this.blackoutPeriodMs = blackoutPeriodMs !== null && blackoutPeriodMs !== undefined ? blackoutPeriodMs : DEFAULT_BLACKOUT_PERIOD_MS; - this.weightExpirationPeriodMs = weightExpirationPeriodMs !== null && weightExpirationPeriodMs !== undefined ? weightExpirationPeriodMs : DEFAULT_WEIGHT_EXPIRATION_PERIOD_MS; - this.weightUpdatePeriodMs = Math.max(weightUpdatePeriodMs !== null && weightUpdatePeriodMs !== undefined ? weightUpdatePeriodMs : DEFAULT_WEIGHT_UPDATE_PERIOD_MS, 100); - this.errorUtilizationPenalty = errorUtilizationPenalty !== null && errorUtilizationPenalty !== undefined ? errorUtilizationPenalty : DEFAULT_ERROR_UTILIZATION_PENALTY; - } - getLoadBalancerName() { - return TYPE_NAME; - } - toJsonObject() { - return { - enable_oob_load_report: this.enableOobLoadReport, - oob_load_reporting_period: (0, duration_1.durationToString)((0, duration_1.msToDuration)(this.oobLoadReportingPeriodMs)), - blackout_period: (0, duration_1.durationToString)((0, duration_1.msToDuration)(this.blackoutPeriodMs)), - weight_expiration_period: (0, duration_1.durationToString)((0, duration_1.msToDuration)(this.weightExpirationPeriodMs)), - weight_update_period: (0, duration_1.durationToString)((0, duration_1.msToDuration)(this.weightUpdatePeriodMs)), - error_utilization_penalty: this.errorUtilizationPenalty - }; - } - static createFromJson(obj) { - validateFieldType(obj, "enable_oob_load_report", "boolean"); - validateFieldType(obj, "error_utilization_penalty", "number"); - if (obj.error_utilization_penalty < 0) { - throw new Error("weighted round robin config error_utilization_penalty < 0"); - } - return new WeightedRoundRobinLoadBalancingConfig(obj.enable_oob_load_report, parseDurationField(obj, "oob_load_reporting_period"), parseDurationField(obj, "blackout_period"), parseDurationField(obj, "weight_expiration_period"), parseDurationField(obj, "weight_update_period"), obj.error_utilization_penalty); - } - getEnableOobLoadReport() { - return this.enableOobLoadReport; - } - getOobLoadReportingPeriodMs() { - return this.oobLoadReportingPeriodMs; - } - getBlackoutPeriodMs() { - return this.blackoutPeriodMs; - } - getWeightExpirationPeriodMs() { - return this.weightExpirationPeriodMs; - } - getWeightUpdatePeriodMs() { - return this.weightUpdatePeriodMs; - } - getErrorUtilizationPenalty() { - return this.errorUtilizationPenalty; - } - } - exports.WeightedRoundRobinLoadBalancingConfig = WeightedRoundRobinLoadBalancingConfig; - - class WeightedRoundRobinPicker { - constructor(children, metricsHandler) { - this.metricsHandler = metricsHandler; - this.queue = new priority_queue_1.PriorityQueue((a, b) => a.deadline < b.deadline); - const positiveWeight = children.filter((picker) => picker.weight > 0); - let averageWeight; - if (positiveWeight.length < 2) { - averageWeight = 1; - } else { - let weightSum = 0; - for (const { weight } of positiveWeight) { - weightSum += weight; - } - averageWeight = weightSum / positiveWeight.length; - } - for (const child of children) { - const period = child.weight > 0 ? 1 / child.weight : averageWeight; - this.queue.push({ - endpointName: child.endpointName, - picker: child.picker, - period, - deadline: Math.random() * period - }); - } - } - pick(pickArgs) { - const entry = this.queue.pop(); - this.queue.push(Object.assign(Object.assign({}, entry), { deadline: entry.deadline + entry.period })); - const childPick = entry.picker.pick(pickArgs); - if (childPick.pickResultType === picker_1.PickResultType.COMPLETE) { - if (this.metricsHandler) { - return Object.assign(Object.assign({}, childPick), { onCallEnded: (0, orca_1.createMetricsReader)((loadReport) => this.metricsHandler(loadReport, entry.endpointName), childPick.onCallEnded) }); - } else { - const subchannelWrapper = childPick.subchannel; - return Object.assign(Object.assign({}, childPick), { subchannel: subchannelWrapper.getWrappedSubchannel() }); - } - } else { - return childPick; - } - } - } - - class WeightedRoundRobinLoadBalancer { - constructor(channelControlHelper) { - this.channelControlHelper = channelControlHelper; - this.latestConfig = null; - this.children = new Map; - this.currentState = connectivity_state_1.ConnectivityState.IDLE; - this.updatesPaused = false; - this.lastError = null; - this.weightUpdateTimer = null; - } - countChildrenWithState(state) { - let count = 0; - for (const entry of this.children.values()) { - if (entry.child.getConnectivityState() === state) { - count += 1; - } - } - return count; - } - updateWeight(entry, loadReport) { - var _a2, _b; - const qps = loadReport.rps_fractional; - let utilization = loadReport.application_utilization; - if (utilization > 0 && qps > 0) { - utilization += loadReport.eps / qps * ((_b = (_a2 = this.latestConfig) === null || _a2 === undefined ? undefined : _a2.getErrorUtilizationPenalty()) !== null && _b !== undefined ? _b : 0); - } - const newWeight = utilization === 0 ? 0 : qps / utilization; - if (newWeight === 0) { - return; - } - const now2 = new Date; - if (entry.nonEmptySince === null) { - entry.nonEmptySince = now2; - } - entry.lastUpdated = now2; - entry.weight = newWeight; - } - getWeight(entry) { - if (!this.latestConfig) { - return 0; - } - const now2 = new Date().getTime(); - if (now2 - entry.lastUpdated.getTime() >= this.latestConfig.getWeightExpirationPeriodMs()) { - entry.nonEmptySince = null; - return 0; - } - const blackoutPeriod = this.latestConfig.getBlackoutPeriodMs(); - if (blackoutPeriod > 0 && (entry.nonEmptySince === null || now2 - entry.nonEmptySince.getTime() < blackoutPeriod)) { - return 0; - } - return entry.weight; - } - calculateAndUpdateState() { - if (this.updatesPaused || !this.latestConfig) { - return; - } - if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.READY) > 0) { - const weightedPickers = []; - for (const [endpoint, entry] of this.children) { - if (entry.child.getConnectivityState() !== connectivity_state_1.ConnectivityState.READY) { - continue; - } - weightedPickers.push({ - endpointName: endpoint, - picker: entry.child.getPicker(), - weight: this.getWeight(entry) - }); - } - trace6("Created picker with weights: " + weightedPickers.map((entry) => entry.endpointName + ":" + entry.weight).join(",")); - let metricsHandler; - if (!this.latestConfig.getEnableOobLoadReport()) { - metricsHandler = (loadReport, endpointName) => { - const childEntry = this.children.get(endpointName); - if (childEntry) { - this.updateWeight(childEntry, loadReport); - } - }; - } else { - metricsHandler = null; - } - this.updateState(connectivity_state_1.ConnectivityState.READY, new WeightedRoundRobinPicker(weightedPickers, metricsHandler), null); - } else if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.CONNECTING) > 0) { - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this), null); - } else if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) > 0) { - const errorMessage = `weighted_round_robin: No connection established. Last error: ${this.lastError}`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: errorMessage - }), errorMessage); - } else { - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); - } - for (const { child } of this.children.values()) { - if (child.getConnectivityState() === connectivity_state_1.ConnectivityState.IDLE) { - child.exitIdle(); - } - } - } - updateState(newState, picker, errorMessage) { - trace6(connectivity_state_1.ConnectivityState[this.currentState] + " -> " + connectivity_state_1.ConnectivityState[newState]); - this.currentState = newState; - this.channelControlHelper.updateState(newState, picker, errorMessage); - } - updateAddressList(maybeEndpointList, lbConfig, options, resolutionNote) { - var _a2, _b; - if (!(lbConfig instanceof WeightedRoundRobinLoadBalancingConfig)) { - return false; - } - if (!maybeEndpointList.ok) { - if (this.children.size === 0) { - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(maybeEndpointList.error), maybeEndpointList.error.details); - } - return true; - } - if (maybeEndpointList.value.length === 0) { - const errorMessage = `No addresses resolved. Resolution note: ${resolutionNote}`; - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ details: errorMessage }), errorMessage); - return false; - } - trace6("Connect to endpoint list " + maybeEndpointList.value.map(subchannel_address_1.endpointToString)); - const now2 = new Date; - const seenEndpointNames = new Set; - this.updatesPaused = true; - this.latestConfig = lbConfig; - for (const endpoint of maybeEndpointList.value) { - const name = (0, subchannel_address_1.endpointToString)(endpoint); - seenEndpointNames.add(name); - let entry = this.children.get(name); - if (!entry) { - entry = { - child: new load_balancer_pick_first_1.LeafLoadBalancer(endpoint, (0, load_balancer_1.createChildChannelControlHelper)(this.channelControlHelper, { - updateState: (connectivityState, picker, errorMessage) => { - if (this.currentState === connectivity_state_1.ConnectivityState.READY && connectivityState !== connectivity_state_1.ConnectivityState.READY) { - this.channelControlHelper.requestReresolution(); - } - if (connectivityState === connectivity_state_1.ConnectivityState.READY) { - entry.nonEmptySince = null; - } - if (errorMessage) { - this.lastError = errorMessage; - } - this.calculateAndUpdateState(); - }, - createSubchannel: (subchannelAddress, subchannelArgs) => { - const subchannel = this.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs); - if (entry === null || entry === undefined ? undefined : entry.oobMetricsListener) { - return new orca_1.OrcaOobMetricsSubchannelWrapper(subchannel, entry.oobMetricsListener, this.latestConfig.getOobLoadReportingPeriodMs()); - } else { - return subchannel; - } - } - }), options, resolutionNote), - lastUpdated: now2, - nonEmptySince: null, - weight: 0, - oobMetricsListener: null - }; - this.children.set(name, entry); - } - if (lbConfig.getEnableOobLoadReport()) { - entry.oobMetricsListener = (loadReport) => { - this.updateWeight(entry, loadReport); - }; - } else { - entry.oobMetricsListener = null; - } - } - for (const [endpointName, entry] of this.children) { - if (seenEndpointNames.has(endpointName)) { - entry.child.startConnecting(); - } else { - entry.child.destroy(); - this.children.delete(endpointName); - } - } - this.updatesPaused = false; - this.calculateAndUpdateState(); - if (this.weightUpdateTimer) { - clearInterval(this.weightUpdateTimer); - } - this.weightUpdateTimer = (_b = (_a2 = setInterval(() => { - if (this.currentState === connectivity_state_1.ConnectivityState.READY) { - this.calculateAndUpdateState(); - } - }, lbConfig.getWeightUpdatePeriodMs())).unref) === null || _b === undefined ? undefined : _b.call(_a2); - return true; - } - exitIdle() {} - resetBackoff() {} - destroy() { - for (const entry of this.children.values()) { - entry.child.destroy(); - } - this.children.clear(); - if (this.weightUpdateTimer) { - clearInterval(this.weightUpdateTimer); - } - } - getTypeName() { - return TYPE_NAME; - } - } - function setup() { - (0, load_balancer_1.registerLoadBalancerType)(TYPE_NAME, WeightedRoundRobinLoadBalancer, WeightedRoundRobinLoadBalancingConfig); - } -}); - -// ../../../../node_modules/.bun/@grpc+grpc-js@1.14.3/node_modules/@grpc/grpc-js/build/src/index.js -var require_src76 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.experimental = exports.ServerMetricRecorder = exports.ServerInterceptingCall = exports.ResponderBuilder = exports.ServerListenerBuilder = exports.addAdminServicesToServer = exports.getChannelzHandlers = exports.getChannelzServiceDefinition = exports.InterceptorConfigurationError = exports.InterceptingCall = exports.RequesterBuilder = exports.ListenerBuilder = exports.StatusBuilder = exports.getClientChannel = exports.ServerCredentials = exports.Server = exports.setLogVerbosity = exports.setLogger = exports.load = exports.loadObject = exports.CallCredentials = exports.ChannelCredentials = exports.waitForClientReady = exports.closeClient = exports.Channel = exports.makeGenericClientConstructor = exports.makeClientConstructor = exports.loadPackageDefinition = exports.Client = exports.compressionAlgorithms = exports.propagate = exports.connectivityState = exports.status = exports.logVerbosity = exports.Metadata = exports.credentials = undefined; - var call_credentials_1 = require_call_credentials(); - Object.defineProperty(exports, "CallCredentials", { enumerable: true, get: function() { - return call_credentials_1.CallCredentials; - } }); - var channel_1 = require_channel(); - Object.defineProperty(exports, "Channel", { enumerable: true, get: function() { - return channel_1.ChannelImplementation; - } }); - var compression_algorithms_1 = require_compression_algorithms(); - Object.defineProperty(exports, "compressionAlgorithms", { enumerable: true, get: function() { - return compression_algorithms_1.CompressionAlgorithms; - } }); - var connectivity_state_1 = require_connectivity_state(); - Object.defineProperty(exports, "connectivityState", { enumerable: true, get: function() { - return connectivity_state_1.ConnectivityState; - } }); - var channel_credentials_1 = require_channel_credentials(); - Object.defineProperty(exports, "ChannelCredentials", { enumerable: true, get: function() { - return channel_credentials_1.ChannelCredentials; - } }); - var client_1 = require_client(); - Object.defineProperty(exports, "Client", { enumerable: true, get: function() { - return client_1.Client; - } }); - var constants_1 = require_constants9(); - Object.defineProperty(exports, "logVerbosity", { enumerable: true, get: function() { - return constants_1.LogVerbosity; - } }); - Object.defineProperty(exports, "status", { enumerable: true, get: function() { - return constants_1.Status; - } }); - Object.defineProperty(exports, "propagate", { enumerable: true, get: function() { - return constants_1.Propagate; - } }); - var logging = require_logging(); - var make_client_1 = require_make_client(); - Object.defineProperty(exports, "loadPackageDefinition", { enumerable: true, get: function() { - return make_client_1.loadPackageDefinition; - } }); - Object.defineProperty(exports, "makeClientConstructor", { enumerable: true, get: function() { - return make_client_1.makeClientConstructor; - } }); - Object.defineProperty(exports, "makeGenericClientConstructor", { enumerable: true, get: function() { - return make_client_1.makeClientConstructor; - } }); - var metadata_1 = require_metadata(); - Object.defineProperty(exports, "Metadata", { enumerable: true, get: function() { - return metadata_1.Metadata; - } }); - var server_1 = require_server(); - Object.defineProperty(exports, "Server", { enumerable: true, get: function() { - return server_1.Server; - } }); - var server_credentials_1 = require_server_credentials(); - Object.defineProperty(exports, "ServerCredentials", { enumerable: true, get: function() { - return server_credentials_1.ServerCredentials; - } }); - var status_builder_1 = require_status_builder(); - Object.defineProperty(exports, "StatusBuilder", { enumerable: true, get: function() { - return status_builder_1.StatusBuilder; - } }); - exports.credentials = { - combineChannelCredentials: (channelCredentials, ...callCredentials) => { - return callCredentials.reduce((acc, other) => acc.compose(other), channelCredentials); - }, - combineCallCredentials: (first, ...additional) => { - return additional.reduce((acc, other) => acc.compose(other), first); - }, - createInsecure: channel_credentials_1.ChannelCredentials.createInsecure, - createSsl: channel_credentials_1.ChannelCredentials.createSsl, - createFromSecureContext: channel_credentials_1.ChannelCredentials.createFromSecureContext, - createFromMetadataGenerator: call_credentials_1.CallCredentials.createFromMetadataGenerator, - createFromGoogleCredential: call_credentials_1.CallCredentials.createFromGoogleCredential, - createEmpty: call_credentials_1.CallCredentials.createEmpty - }; - var closeClient = (client) => client.close(); - exports.closeClient = closeClient; - var waitForClientReady = (client, deadline, callback) => client.waitForReady(deadline, callback); - exports.waitForClientReady = waitForClientReady; - var loadObject = (value, options) => { - throw new Error("Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead"); - }; - exports.loadObject = loadObject; - var load = (filename, format, options) => { - throw new Error("Not available in this library. Use @grpc/proto-loader and loadPackageDefinition instead"); - }; - exports.load = load; - var setLogger = (logger) => { - logging.setLogger(logger); - }; - exports.setLogger = setLogger; - var setLogVerbosity = (verbosity) => { - logging.setLoggerVerbosity(verbosity); - }; - exports.setLogVerbosity = setLogVerbosity; - var getClientChannel = (client) => { - return client_1.Client.prototype.getChannel.call(client); - }; - exports.getClientChannel = getClientChannel; - var client_interceptors_1 = require_client_interceptors(); - Object.defineProperty(exports, "ListenerBuilder", { enumerable: true, get: function() { - return client_interceptors_1.ListenerBuilder; - } }); - Object.defineProperty(exports, "RequesterBuilder", { enumerable: true, get: function() { - return client_interceptors_1.RequesterBuilder; - } }); - Object.defineProperty(exports, "InterceptingCall", { enumerable: true, get: function() { - return client_interceptors_1.InterceptingCall; - } }); - Object.defineProperty(exports, "InterceptorConfigurationError", { enumerable: true, get: function() { - return client_interceptors_1.InterceptorConfigurationError; - } }); - var channelz_1 = require_channelz(); - Object.defineProperty(exports, "getChannelzServiceDefinition", { enumerable: true, get: function() { - return channelz_1.getChannelzServiceDefinition; - } }); - Object.defineProperty(exports, "getChannelzHandlers", { enumerable: true, get: function() { - return channelz_1.getChannelzHandlers; - } }); - var admin_1 = require_admin(); - Object.defineProperty(exports, "addAdminServicesToServer", { enumerable: true, get: function() { - return admin_1.addAdminServicesToServer; - } }); - var server_interceptors_1 = require_server_interceptors(); - Object.defineProperty(exports, "ServerListenerBuilder", { enumerable: true, get: function() { - return server_interceptors_1.ServerListenerBuilder; - } }); - Object.defineProperty(exports, "ResponderBuilder", { enumerable: true, get: function() { - return server_interceptors_1.ResponderBuilder; - } }); - Object.defineProperty(exports, "ServerInterceptingCall", { enumerable: true, get: function() { - return server_interceptors_1.ServerInterceptingCall; - } }); - var orca_1 = require_orca(); - Object.defineProperty(exports, "ServerMetricRecorder", { enumerable: true, get: function() { - return orca_1.ServerMetricRecorder; - } }); - var experimental = require_experimental(); - exports.experimental = experimental; - var resolver_dns = require_resolver_dns(); - var resolver_uds = require_resolver_uds(); - var resolver_ip = require_resolver_ip(); - var load_balancer_pick_first = require_load_balancer_pick_first(); - var load_balancer_round_robin = require_load_balancer_round_robin(); - var load_balancer_outlier_detection = require_load_balancer_outlier_detection(); - var load_balancer_weighted_round_robin = require_load_balancer_weighted_round_robin(); - var channelz = require_channelz(); - (() => { - resolver_dns.setup(); - resolver_uds.setup(); - resolver_ip.setup(); - load_balancer_pick_first.setup(); - load_balancer_round_robin.setup(); - load_balancer_outlier_detection.setup(); - load_balancer_weighted_round_robin.setup(); - channelz.setup(); - })(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/create-service-client-constructor.js -var require_create_service_client_constructor = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createServiceClientConstructor = undefined; - var grpc = require_src76(); - function createServiceClientConstructor(path, name) { - const serviceDefinition = { - export: { - path, - requestStream: false, - responseStream: false, - requestSerialize: (arg) => { - return arg; - }, - requestDeserialize: (arg) => { - return arg; - }, - responseSerialize: (arg) => { - return arg; - }, - responseDeserialize: (arg) => { - return arg; - } - } - }; - return grpc.makeGenericClientConstructor(serviceDefinition, name); - } - exports.createServiceClientConstructor = createServiceClientConstructor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/grpc-exporter-transport.js -var require_grpc_exporter_transport = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpGrpcExporterTransport = exports.GrpcExporterTransport = exports.createEmptyMetadata = exports.createSslCredentials = exports.createInsecureCredentials = undefined; - var version_1 = require_version48(); - var DEFAULT_USER_AGENT = `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`; - function createUserAgent(userAgent2) { - if (userAgent2) { - return `${userAgent2} ${DEFAULT_USER_AGENT}`; - } - return DEFAULT_USER_AGENT; - } - var GRPC_COMPRESSION_NONE = 0; - var GRPC_COMPRESSION_GZIP = 2; - function toGrpcCompression(compression) { - return compression === "gzip" ? GRPC_COMPRESSION_GZIP : GRPC_COMPRESSION_NONE; - } - function createInsecureCredentials() { - const { - credentials - } = require_src76(); - return credentials.createInsecure(); - } - exports.createInsecureCredentials = createInsecureCredentials; - function createSslCredentials(rootCert, privateKey, certChain) { - const { - credentials - } = require_src76(); - return credentials.createSsl(rootCert, privateKey, certChain); - } - exports.createSslCredentials = createSslCredentials; - function createEmptyMetadata() { - const { - Metadata - } = require_src76(); - return new Metadata; - } - exports.createEmptyMetadata = createEmptyMetadata; - - class GrpcExporterTransport { - _parameters; - _client; - _metadata; - constructor(_parameters) { - this._parameters = _parameters; - } - shutdown() { - this._client?.close(); - } - send(data, timeoutMillis) { - const buffer = Buffer.from(data); - if (this._client == null) { - const { - createServiceClientConstructor - } = require_create_service_client_constructor(); - try { - this._metadata = this._parameters.metadata(); - } catch (error48) { - return Promise.resolve({ - status: "failure", - error: error48 - }); - } - const clientConstructor = createServiceClientConstructor(this._parameters.grpcPath, this._parameters.grpcName); - try { - this._client = new clientConstructor(this._parameters.address, this._parameters.credentials(), { - "grpc.default_compression_algorithm": toGrpcCompression(this._parameters.compression), - "grpc.primary_user_agent": createUserAgent(this._parameters.userAgent) - }); - } catch (error48) { - return Promise.resolve({ - status: "failure", - error: error48 - }); - } - } - return new Promise((resolve2) => { - const deadline = Date.now() + timeoutMillis; - if (this._metadata == null) { - return resolve2({ - error: new Error("metadata was null"), - status: "failure" - }); - } - this._client.export(buffer, this._metadata, { deadline }, (err, response) => { - if (err) { - resolve2({ - status: "failure", - error: err - }); - } else { - resolve2({ - data: response, - status: "success" - }); - } - }); - }); - } - } - exports.GrpcExporterTransport = GrpcExporterTransport; - function createOtlpGrpcExporterTransport(options) { - return new GrpcExporterTransport(options); - } - exports.createOtlpGrpcExporterTransport = createOtlpGrpcExporterTransport; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/configuration/otlp-grpc-configuration.js -var require_otlp_grpc_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOtlpGrpcDefaultConfiguration = exports.mergeOtlpGrpcConfigurationWithDefaults = exports.validateAndNormalizeUrl = undefined; - var otlp_exporter_base_1 = require_src63(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport(); - var url_1 = __require("url"); - var api_1 = require_src(); - function validateAndNormalizeUrl(url2) { - url2 = url2.trim(); - const hasProtocol = url2.match(/^([\w]{1,8}):\/\//); - if (!hasProtocol) { - url2 = `https://${url2}`; - } - const target = new url_1.URL(url2); - if (target.protocol === "unix:") { - return url2; - } - if (target.pathname && target.pathname !== "/") { - api_1.diag.warn("URL path should not be set when using grpc, the path part of the URL will be ignored."); - } - if (target.protocol !== "" && !target.protocol?.match(/^(http)s?:$/)) { - api_1.diag.warn("URL protocol should be http(s)://. Using http://."); - } - return target.host; - } - exports.validateAndNormalizeUrl = validateAndNormalizeUrl; - function overrideMetadataEntriesIfNotPresent(metadata, additionalMetadata) { - for (const [key, value] of Object.entries(additionalMetadata.getMap())) { - if (metadata.get(key).length < 1) { - metadata.set(key, value); - } - } - } - function mergeOtlpGrpcConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - const rawUrl = userProvidedConfiguration.url ?? fallbackConfiguration.url ?? defaultConfiguration.url; - return { - ...(0, otlp_exporter_base_1.mergeOtlpSharedConfigurationWithDefaults)(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration), - metadata: () => { - const metadata = defaultConfiguration.metadata(); - overrideMetadataEntriesIfNotPresent(metadata, userProvidedConfiguration.metadata?.().clone() ?? (0, grpc_exporter_transport_1.createEmptyMetadata)()); - overrideMetadataEntriesIfNotPresent(metadata, fallbackConfiguration.metadata?.() ?? (0, grpc_exporter_transport_1.createEmptyMetadata)()); - return metadata; - }, - url: validateAndNormalizeUrl(rawUrl), - credentials: userProvidedConfiguration.credentials ?? fallbackConfiguration.credentials?.(rawUrl) ?? defaultConfiguration.credentials(rawUrl), - userAgent: userProvidedConfiguration.userAgent - }; - } - exports.mergeOtlpGrpcConfigurationWithDefaults = mergeOtlpGrpcConfigurationWithDefaults; - function getOtlpGrpcDefaultConfiguration() { - return { - ...(0, otlp_exporter_base_1.getSharedConfigurationDefaults)(), - metadata: () => (0, grpc_exporter_transport_1.createEmptyMetadata)(), - url: "http://localhost:4317", - credentials: (url2) => { - if (url2.startsWith("http://")) { - return () => (0, grpc_exporter_transport_1.createInsecureCredentials)(); - } else { - return () => (0, grpc_exporter_transport_1.createSslCredentials)(); - } - } - }; - } - exports.getOtlpGrpcDefaultConfiguration = getOtlpGrpcDefaultConfiguration; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/configuration/otlp-grpc-env-configuration.js -var require_otlp_grpc_env_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOtlpGrpcConfigurationFromEnv = undefined; - var core_1 = require_src7(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport(); - var node_http_1 = require_index_node_http(); - var fs = __require("fs"); - var path = __require("path"); - var api_1 = require_src(); - function fallbackIfNullishOrBlank(signalSpecific, nonSignalSpecific) { - if (signalSpecific != null && signalSpecific !== "") { - return signalSpecific; - } - if (nonSignalSpecific != null && nonSignalSpecific !== "") { - return nonSignalSpecific; - } - return; - } - function getMetadataFromEnv(signalIdentifier) { - const signalSpecificRawHeaders = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_HEADERS`]?.trim(); - const nonSignalSpecificRawHeaders = process.env["OTEL_EXPORTER_OTLP_HEADERS"]?.trim(); - const signalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(signalSpecificRawHeaders); - const nonSignalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(nonSignalSpecificRawHeaders); - if (Object.keys(signalSpecificHeaders).length === 0 && Object.keys(nonSignalSpecificHeaders).length === 0) { - return; - } - const mergeHeaders = Object.assign({}, nonSignalSpecificHeaders, signalSpecificHeaders); - const metadata = (0, grpc_exporter_transport_1.createEmptyMetadata)(); - for (const [key, value] of Object.entries(mergeHeaders)) { - metadata.set(key, value); - } - return metadata; - } - function getMetadataProviderFromEnv(signalIdentifier) { - const metadata = getMetadataFromEnv(signalIdentifier); - if (metadata == null) { - return; - } - return () => metadata; - } - function getUrlFromEnv(signalIdentifier) { - const specificEndpoint = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_ENDPOINT`]?.trim(); - const nonSpecificEndpoint = process.env[`OTEL_EXPORTER_OTLP_ENDPOINT`]?.trim(); - return fallbackIfNullishOrBlank(specificEndpoint, nonSpecificEndpoint); - } - function getInsecureSettingFromEnv(signalIdentifier) { - const signalSpecificInsecureValue = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_INSECURE`]?.toLowerCase().trim(); - const nonSignalSpecificInsecureValue = process.env[`OTEL_EXPORTER_OTLP_INSECURE`]?.toLowerCase().trim(); - return fallbackIfNullishOrBlank(signalSpecificInsecureValue, nonSignalSpecificInsecureValue) === "true"; - } - function readFileFromEnv(signalSpecificEnvVar, nonSignalSpecificEnvVar, warningMessage) { - const signalSpecificPath = process.env[signalSpecificEnvVar]?.trim(); - const nonSignalSpecificPath = process.env[nonSignalSpecificEnvVar]?.trim(); - const filePath = fallbackIfNullishOrBlank(signalSpecificPath, nonSignalSpecificPath); - if (filePath != null) { - try { - return fs.readFileSync(path.resolve(process.cwd(), filePath)); - } catch { - api_1.diag.warn(warningMessage); - return; - } - } else { - return; - } - } - function getClientCertificateFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE", "Failed to read client certificate chain file"); - } - function getClientKeyFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_KEY`, "OTEL_EXPORTER_OTLP_CLIENT_KEY", "Failed to read client certificate private key file"); - } - function getRootCertificateFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CERTIFICATE", "Failed to read root certificate file"); - } - function getCredentialsFromEnvIgnoreInsecure(signalIdentifier) { - const clientKey = getClientKeyFromEnv(signalIdentifier); - const clientCertificate = getClientCertificateFromEnv(signalIdentifier); - const rootCertificate = getRootCertificateFromEnv(signalIdentifier); - const clientChainIntact = clientKey != null && clientCertificate != null; - if (rootCertificate != null && !clientChainIntact) { - api_1.diag.warn("Client key and certificate must both be provided, but one was missing - attempting to create credentials from just the root certificate"); - return (0, grpc_exporter_transport_1.createSslCredentials)(getRootCertificateFromEnv(signalIdentifier)); - } - return (0, grpc_exporter_transport_1.createSslCredentials)(rootCertificate, clientKey, clientCertificate); - } - function getCredentialsFromEnv(signalIdentifier) { - if (getInsecureSettingFromEnv(signalIdentifier)) { - return (0, grpc_exporter_transport_1.createInsecureCredentials)(); - } - return getCredentialsFromEnvIgnoreInsecure(signalIdentifier); - } - function getOtlpGrpcConfigurationFromEnv(signalIdentifier) { - return { - ...(0, node_http_1.getSharedConfigurationFromEnvironment)(signalIdentifier), - metadata: getMetadataProviderFromEnv(signalIdentifier), - url: getUrlFromEnv(signalIdentifier), - credentials: (finalResolvedUrl) => { - if (finalResolvedUrl.startsWith("http://")) { - return () => { - return (0, grpc_exporter_transport_1.createInsecureCredentials)(); - }; - } else if (finalResolvedUrl.startsWith("https://")) { - return () => { - return getCredentialsFromEnvIgnoreInsecure(signalIdentifier); - }; - } - return () => { - return getCredentialsFromEnv(signalIdentifier); - }; - } - }; - } - exports.getOtlpGrpcConfigurationFromEnv = getOtlpGrpcConfigurationFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/configuration/convert-legacy-otlp-grpc-options.js -var require_convert_legacy_otlp_grpc_options = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.convertLegacyOtlpGrpcOptions = undefined; - var api_1 = require_src(); - var otlp_grpc_configuration_1 = require_otlp_grpc_configuration(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport(); - var otlp_grpc_env_configuration_1 = require_otlp_grpc_env_configuration(); - function convertLegacyOtlpGrpcOptions(config2, signalIdentifier) { - if (config2.headers) { - api_1.diag.warn("Headers cannot be set when using grpc"); - } - const userProvidedCredentials = config2.credentials; - return (0, otlp_grpc_configuration_1.mergeOtlpGrpcConfigurationWithDefaults)({ - url: config2.url, - metadata: () => { - return config2.metadata ?? (0, grpc_exporter_transport_1.createEmptyMetadata)(); - }, - compression: config2.compression, - timeoutMillis: config2.timeoutMillis, - concurrencyLimit: config2.concurrencyLimit, - credentials: userProvidedCredentials != null ? () => userProvidedCredentials : undefined, - userAgent: config2.userAgent - }, (0, otlp_grpc_env_configuration_1.getOtlpGrpcConfigurationFromEnv)(signalIdentifier), (0, otlp_grpc_configuration_1.getOtlpGrpcDefaultConfiguration)()); - } - exports.convertLegacyOtlpGrpcOptions = convertLegacyOtlpGrpcOptions; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/otlp-grpc-export-delegate.js -var require_otlp_grpc_export_delegate = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpGrpcExportDelegate = undefined; - var otlp_exporter_base_1 = require_src63(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport(); - function createOtlpGrpcExportDelegate(options, serializer, grpcName, grpcPath) { - return (0, otlp_exporter_base_1.createOtlpNetworkExportDelegate)(options, serializer, (0, grpc_exporter_transport_1.createOtlpGrpcExporterTransport)({ - address: options.url, - compression: options.compression, - credentials: options.credentials, - metadata: options.metadata, - userAgent: options.userAgent, - grpcName, - grpcPath - })); - } - exports.createOtlpGrpcExportDelegate = createOtlpGrpcExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/index.js -var require_src77 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpGrpcExportDelegate = exports.convertLegacyOtlpGrpcOptions = undefined; - var convert_legacy_otlp_grpc_options_1 = require_convert_legacy_otlp_grpc_options(); - Object.defineProperty(exports, "convertLegacyOtlpGrpcOptions", { enumerable: true, get: function() { - return convert_legacy_otlp_grpc_options_1.convertLegacyOtlpGrpcOptions; - } }); - var otlp_grpc_export_delegate_1 = require_otlp_grpc_export_delegate(); - Object.defineProperty(exports, "createOtlpGrpcExportDelegate", { enumerable: true, get: function() { - return otlp_grpc_export_delegate_1.createOtlpGrpcExportDelegate; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-grpc/build/src/OTLPLogExporter.js -var require_OTLPLogExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var otlp_grpc_exporter_base_1 = require_src77(); - var otlp_transformer_1 = require_src65(); - var otlp_exporter_base_1 = require_src63(); - - class OTLPLogExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, otlp_grpc_exporter_base_1.createOtlpGrpcExportDelegate)((0, otlp_grpc_exporter_base_1.convertLegacyOtlpGrpcOptions)(config2, "LOGS"), otlp_transformer_1.ProtobufLogsSerializer, "LogsExportService", "/opentelemetry.proto.collector.logs.v1.LogsService/Export")); - } - } - exports.OTLPLogExporter = OTLPLogExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-grpc/build/src/index.js -var require_src78 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var OTLPLogExporter_1 = require_OTLPLogExporter2(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return OTLPLogExporter_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/platform/node/OTLPLogExporter.js -var require_OTLPLogExporter3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var otlp_exporter_base_1 = require_src63(); - var otlp_transformer_1 = require_src65(); - var node_http_1 = require_index_node_http(); - - class OTLPLogExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "LOGS", "v1/logs", { - "Content-Type": "application/x-protobuf" - }), otlp_transformer_1.ProtobufLogsSerializer)); - } - } - exports.OTLPLogExporter = OTLPLogExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/platform/node/index.js -var require_node15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var OTLPLogExporter_1 = require_OTLPLogExporter3(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return OTLPLogExporter_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/platform/index.js -var require_platform14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var node_1 = require_node15(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return node_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/index.js -var require_src79 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var platform_1 = require_platform14(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return platform_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-grpc/build/src/OTLPMetricExporter.js -var require_OTLPMetricExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var exporter_metrics_otlp_http_1 = require_src67(); - var otlp_grpc_exporter_base_1 = require_src77(); - var otlp_transformer_1 = require_src65(); - - class OTLPMetricExporter extends exporter_metrics_otlp_http_1.OTLPMetricExporterBase { - constructor(config2) { - super((0, otlp_grpc_exporter_base_1.createOtlpGrpcExportDelegate)((0, otlp_grpc_exporter_base_1.convertLegacyOtlpGrpcOptions)(config2 ?? {}, "METRICS"), otlp_transformer_1.ProtobufMetricsSerializer, "MetricsExportService", "/opentelemetry.proto.collector.metrics.v1.MetricsService/Export"), config2); - } - } - exports.OTLPMetricExporter = OTLPMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-grpc/build/src/index.js -var require_src80 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporter_1 = require_OTLPMetricExporter2(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return OTLPMetricExporter_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/platform/node/OTLPMetricExporter.js -var require_OTLPMetricExporter3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var exporter_metrics_otlp_http_1 = require_src67(); - var otlp_transformer_1 = require_src65(); - var node_http_1 = require_index_node_http(); - - class OTLPMetricExporter extends exporter_metrics_otlp_http_1.OTLPMetricExporterBase { - constructor(config2) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2 ?? {}, "METRICS", "v1/metrics", { - "Content-Type": "application/x-protobuf" - }), otlp_transformer_1.ProtobufMetricsSerializer), config2); - } - } - exports.OTLPMetricExporter = OTLPMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/platform/node/index.js -var require_node16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporter_1 = require_OTLPMetricExporter3(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return OTLPMetricExporter_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/platform/index.js -var require_platform15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var node_1 = require_node16(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return node_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/index.js -var require_src81 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var platform_1 = require_platform15(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return platform_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-prometheus@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusSerializer.js -var require_PrometheusSerializer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PrometheusSerializer = undefined; - var api_1 = require_src(); - var sdk_metrics_1 = require_src64(); - var core_1 = require_src7(); - function escapeString(str) { - return str.replace(/\\/g, "\\\\").replace(/\n/g, "\\n"); - } - function escapeAttributeValue(str = "") { - if (typeof str !== "string") { - str = JSON.stringify(str); - } - return escapeString(str).replace(/"/g, "\\\""); - } - var invalidCharacterRegex = /[^a-z0-9_]/gi; - var multipleUnderscoreRegex = /_{2,}/g; - function sanitizePrometheusMetricName(name) { - return name.replace(invalidCharacterRegex, "_").replace(multipleUnderscoreRegex, "_"); - } - function enforcePrometheusNamingConvention(name, data) { - if (!name.endsWith("_total") && data.dataPointType === sdk_metrics_1.DataPointType.SUM && data.isMonotonic) { - name = name + "_total"; - } - return name; - } - function valueString(value) { - if (value === Infinity) { - return "+Inf"; - } else if (value === -Infinity) { - return "-Inf"; - } else { - return `${value}`; - } - } - function toPrometheusType(metricData) { - switch (metricData.dataPointType) { - case sdk_metrics_1.DataPointType.SUM: - if (metricData.isMonotonic) { - return "counter"; - } - return "gauge"; - case sdk_metrics_1.DataPointType.GAUGE: - return "gauge"; - case sdk_metrics_1.DataPointType.HISTOGRAM: - return "histogram"; - default: - return "untyped"; - } - } - function stringify(metricName, attributes, value, timestamp, additionalAttributes) { - let hasAttribute = false; - let attributesStr = ""; - for (const [key, val] of Object.entries(attributes)) { - const sanitizedAttributeName = sanitizePrometheusMetricName(key); - hasAttribute = true; - attributesStr += `${attributesStr.length > 0 ? "," : ""}${sanitizedAttributeName}="${escapeAttributeValue(val)}"`; - } - if (additionalAttributes) { - for (const [key, val] of Object.entries(additionalAttributes)) { - const sanitizedAttributeName = sanitizePrometheusMetricName(key); - hasAttribute = true; - attributesStr += `${attributesStr.length > 0 ? "," : ""}${sanitizedAttributeName}="${escapeAttributeValue(val)}"`; - } - } - if (hasAttribute) { - metricName += `{${attributesStr}}`; - } - return `${metricName} ${valueString(value)}${timestamp !== undefined ? " " + String(timestamp) : ""} -`; - } - var NO_REGISTERED_METRICS = "# no registered metrics"; - - class PrometheusSerializer { - _prefix; - _appendTimestamp; - _additionalAttributes; - _withResourceConstantLabels; - _withoutTargetInfo; - constructor(prefix, appendTimestamp = false, withResourceConstantLabels, withoutTargetInfo) { - if (prefix) { - this._prefix = prefix + "_"; - } - this._appendTimestamp = appendTimestamp; - this._withResourceConstantLabels = withResourceConstantLabels; - this._withoutTargetInfo = !!withoutTargetInfo; - } - serialize(resourceMetrics) { - let str = ""; - this._additionalAttributes = this._filterResourceConstantLabels(resourceMetrics.resource.attributes, this._withResourceConstantLabels); - for (const scopeMetrics of resourceMetrics.scopeMetrics) { - str += this._serializeScopeMetrics(scopeMetrics); - } - if (str === "") { - str += NO_REGISTERED_METRICS; - } - return this._serializeResource(resourceMetrics.resource) + str; - } - _filterResourceConstantLabels(attributes, pattern) { - if (pattern) { - const filteredAttributes = {}; - for (const [key, value] of Object.entries(attributes)) { - if (key.match(pattern)) { - filteredAttributes[key] = value; - } - } - return filteredAttributes; - } - return; - } - _serializeScopeMetrics(scopeMetrics) { - let str = ""; - for (const metric of scopeMetrics.metrics) { - str += this._serializeMetricData(metric) + ` -`; - } - return str; - } - _serializeMetricData(metricData) { - let name = sanitizePrometheusMetricName(escapeString(metricData.descriptor.name)); - if (this._prefix) { - name = `${this._prefix}${name}`; - } - const dataPointType = metricData.dataPointType; - name = enforcePrometheusNamingConvention(name, metricData); - const help = `# HELP ${name} ${escapeString(metricData.descriptor.description || "description missing")}`; - const unit = metricData.descriptor.unit ? ` -# UNIT ${name} ${escapeString(metricData.descriptor.unit)}` : ""; - const type = `# TYPE ${name} ${toPrometheusType(metricData)}`; - let results = ""; - switch (dataPointType) { - case sdk_metrics_1.DataPointType.SUM: - case sdk_metrics_1.DataPointType.GAUGE: { - results = metricData.dataPoints.map((it) => this._serializeSingularDataPoint(name, metricData, it)).join(""); - break; - } - case sdk_metrics_1.DataPointType.HISTOGRAM: { - results = metricData.dataPoints.map((it) => this._serializeHistogramDataPoint(name, metricData, it)).join(""); - break; - } - default: { - api_1.diag.error(`Unrecognizable DataPointType: ${dataPointType} for metric "${name}"`); - } - } - return `${help}${unit} -${type} -${results}`.trim(); - } - _serializeSingularDataPoint(name, data, dataPoint) { - let results = ""; - name = enforcePrometheusNamingConvention(name, data); - const { value, attributes } = dataPoint; - const timestamp = (0, core_1.hrTimeToMilliseconds)(dataPoint.endTime); - results += stringify(name, attributes, value, this._appendTimestamp ? timestamp : undefined, this._additionalAttributes); - return results; - } - _serializeHistogramDataPoint(name, data, dataPoint) { - let results = ""; - name = enforcePrometheusNamingConvention(name, data); - const attributes = dataPoint.attributes; - const histogram = dataPoint.value; - const timestamp = (0, core_1.hrTimeToMilliseconds)(dataPoint.endTime); - for (const key of ["count", "sum"]) { - const value = histogram[key]; - if (value != null) - results += stringify(name + "_" + key, attributes, value, this._appendTimestamp ? timestamp : undefined, this._additionalAttributes); - } - let cumulativeSum = 0; - const countEntries = histogram.buckets.counts.entries(); - let infiniteBoundaryDefined = false; - for (const [idx, val] of countEntries) { - cumulativeSum += val; - const upperBound = histogram.buckets.boundaries[idx]; - if (upperBound === undefined && infiniteBoundaryDefined) { - break; - } - if (upperBound === Infinity) { - infiniteBoundaryDefined = true; - } - results += stringify(name + "_bucket", attributes, cumulativeSum, this._appendTimestamp ? timestamp : undefined, Object.assign({}, this._additionalAttributes ?? {}, { - le: upperBound === undefined || upperBound === Infinity ? "+Inf" : String(upperBound) - })); - } - return results; - } - _serializeResource(resource) { - if (this._withoutTargetInfo === true) { - return ""; - } - const name = "target_info"; - const help = `# HELP ${name} Target metadata`; - const type = `# TYPE ${name} gauge`; - const results = stringify(name, resource.attributes, 1).trim(); - return `${help} -${type} -${results} -`; - } - } - exports.PrometheusSerializer = PrometheusSerializer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-prometheus@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusExporter.js -var require_PrometheusExporter = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PrometheusExporter = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var sdk_metrics_1 = require_src64(); - var http_1 = __require("http"); - var PrometheusSerializer_1 = require_PrometheusSerializer(); - var url_1 = __require("url"); - - class PrometheusExporter extends sdk_metrics_1.MetricReader { - static DEFAULT_OPTIONS = { - host: undefined, - port: 9464, - endpoint: "/metrics", - prefix: "", - appendTimestamp: false, - withResourceConstantLabels: undefined, - withoutTargetInfo: false - }; - _host; - _port; - _baseUrl; - _endpoint; - _server; - _prefix; - _appendTimestamp; - _serializer; - _startServerPromise; - constructor(config2 = {}, callback = () => {}) { - super({ - aggregationSelector: (_instrumentType) => { - return { - type: sdk_metrics_1.AggregationType.DEFAULT - }; - }, - aggregationTemporalitySelector: (_instrumentType) => sdk_metrics_1.AggregationTemporality.CUMULATIVE, - metricProducers: config2.metricProducers - }); - this._host = config2.host || process.env.OTEL_EXPORTER_PROMETHEUS_HOST || PrometheusExporter.DEFAULT_OPTIONS.host; - this._port = config2.port || Number(process.env.OTEL_EXPORTER_PROMETHEUS_PORT) || PrometheusExporter.DEFAULT_OPTIONS.port; - this._prefix = config2.prefix || PrometheusExporter.DEFAULT_OPTIONS.prefix; - this._appendTimestamp = typeof config2.appendTimestamp === "boolean" ? config2.appendTimestamp : PrometheusExporter.DEFAULT_OPTIONS.appendTimestamp; - const _withResourceConstantLabels = config2.withResourceConstantLabels || PrometheusExporter.DEFAULT_OPTIONS.withResourceConstantLabels; - const _withoutTargetInfo = config2.withoutTargetInfo || PrometheusExporter.DEFAULT_OPTIONS.withoutTargetInfo; - this._server = (0, http_1.createServer)(this._requestHandler).unref(); - this._serializer = new PrometheusSerializer_1.PrometheusSerializer(this._prefix, this._appendTimestamp, _withResourceConstantLabels, _withoutTargetInfo); - this._baseUrl = `http://${this._host}:${this._port}/`; - this._endpoint = (config2.endpoint || PrometheusExporter.DEFAULT_OPTIONS.endpoint).replace(/^([^/])/, "/$1"); - if (config2.preventServerStart !== true) { - this.startServer().then(callback, (err) => { - api_1.diag.error(err); - callback(err); - }); - } else if (callback) { - queueMicrotask(callback); - } - } - async onForceFlush() {} - onShutdown() { - return this.stopServer(); - } - stopServer() { - if (!this._server) { - api_1.diag.debug("Prometheus stopServer() was called but server was never started."); - return Promise.resolve(); - } else { - return new Promise((resolve2) => { - this._server.close((err) => { - if (!err) { - api_1.diag.debug("Prometheus exporter was stopped"); - } else { - if (err.code !== "ERR_SERVER_NOT_RUNNING") { - (0, core_1.globalErrorHandler)(err); - } - } - resolve2(); - }); - }); - } - } - startServer() { - this._startServerPromise ??= new Promise((resolve2, reject) => { - this._server.once("error", reject); - this._server.listen({ - port: this._port, - host: this._host - }, () => { - api_1.diag.debug(`Prometheus exporter server started: ${this._host}:${this._port}/${this._endpoint}`); - resolve2(); - }); - }); - return this._startServerPromise; - } - getMetricsRequestHandler(_request, response) { - this._exportMetrics(response); - } - _requestHandler = (request, response) => { - if (request.url != null && new url_1.URL(request.url, this._baseUrl).pathname === this._endpoint) { - this._exportMetrics(response); - } else { - this._notFound(response); - } - }; - _exportMetrics = (response) => { - response.statusCode = 200; - response.setHeader("content-type", "text/plain"); - this.collect().then((collectionResult) => { - const { resourceMetrics, errors: errors3 } = collectionResult; - if (errors3.length) { - api_1.diag.error("PrometheusExporter: metrics collection errors", ...errors3); - } - response.end(this._serializer.serialize(resourceMetrics)); - }, (err) => { - response.end(`# failed to export metrics: ${err}`); - }); - }; - _notFound = (response) => { - response.statusCode = 404; - response.end(); - }; - } - exports.PrometheusExporter = PrometheusExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-prometheus@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-prometheus/build/src/index.js -var require_src82 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PrometheusSerializer = exports.PrometheusExporter = undefined; - var PrometheusExporter_1 = require_PrometheusExporter(); - Object.defineProperty(exports, "PrometheusExporter", { enumerable: true, get: function() { - return PrometheusExporter_1.PrometheusExporter; - } }); - var PrometheusSerializer_1 = require_PrometheusSerializer(); - Object.defineProperty(exports, "PrometheusSerializer", { enumerable: true, get: function() { - return PrometheusSerializer_1.PrometheusSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/platform/node/OTLPTraceExporter.js -var require_OTLPTraceExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var otlp_exporter_base_1 = require_src63(); - var otlp_transformer_1 = require_src65(); - var node_http_1 = require_index_node_http(); - - class OTLPTraceExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "TRACES", "v1/traces", { - "Content-Type": "application/x-protobuf" - }), otlp_transformer_1.ProtobufTraceSerializer)); - } - } - exports.OTLPTraceExporter = OTLPTraceExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/platform/node/index.js -var require_node17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var OTLPTraceExporter_1 = require_OTLPTraceExporter2(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return OTLPTraceExporter_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/platform/index.js -var require_platform16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var node_1 = require_node17(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return node_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/index.js -var require_src83 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var platform_1 = require_platform16(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return platform_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-grpc/build/src/OTLPTraceExporter.js -var require_OTLPTraceExporter3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var otlp_grpc_exporter_base_1 = require_src77(); - var otlp_transformer_1 = require_src65(); - var otlp_exporter_base_1 = require_src63(); - - class OTLPTraceExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, otlp_grpc_exporter_base_1.createOtlpGrpcExportDelegate)((0, otlp_grpc_exporter_base_1.convertLegacyOtlpGrpcOptions)(config2, "TRACES"), otlp_transformer_1.ProtobufTraceSerializer, "TraceExportService", "/opentelemetry.proto.collector.trace.v1.TraceService/Export")); - } - } - exports.OTLPTraceExporter = OTLPTraceExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-grpc@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-grpc/build/src/index.js -var require_src84 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var OTLPTraceExporter_1 = require_OTLPTraceExporter3(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return OTLPTraceExporter_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/platform/node/util.js -var require_util7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareSend = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var http2 = __require("http"); - var https = __require("https"); - function prepareSend(urlStr, headers) { - const url2 = new URL(urlStr); - const reqOpts = Object.assign({ - method: "POST", - headers: { - "Content-Type": "application/json", - ...headers - } - }); - return function send(zipkinSpans, done) { - if (zipkinSpans.length === 0) { - api_1.diag.debug("Zipkin send with empty spans"); - return done({ code: core_1.ExportResultCode.SUCCESS }); - } - const { request } = url2.protocol === "http:" ? http2 : https; - const req = request(url2, reqOpts, (res) => { - let rawData = ""; - res.on("data", (chunk) => { - rawData += chunk; - }); - res.on("end", () => { - const statusCode = res.statusCode || 0; - api_1.diag.debug(`Zipkin response status code: ${statusCode}, body: ${rawData}`); - if (statusCode < 400) { - return done({ code: core_1.ExportResultCode.SUCCESS }); - } else { - return done({ - code: core_1.ExportResultCode.FAILED, - error: new Error(`Got unexpected status code from zipkin: ${statusCode}`) - }); - } - }); - }); - req.on("error", (error48) => { - return done({ - code: core_1.ExportResultCode.FAILED, - error: error48 - }); - }); - const payload = JSON.stringify(zipkinSpans); - api_1.diag.debug(`Zipkin request payload: ${payload}`); - req.write(payload, "utf8"); - req.end(); - }; - } - exports.prepareSend = prepareSend; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/platform/node/index.js -var require_node18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareSend = undefined; - var util_1 = require_util7(); - Object.defineProperty(exports, "prepareSend", { enumerable: true, get: function() { - return util_1.prepareSend; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/platform/index.js -var require_platform17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareSend = undefined; - var node_1 = require_node18(); - Object.defineProperty(exports, "prepareSend", { enumerable: true, get: function() { - return node_1.prepareSend; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/types.js -var require_types14 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanKind = undefined; - var SpanKind4; - (function(SpanKind5) { - SpanKind5["CLIENT"] = "CLIENT"; - SpanKind5["SERVER"] = "SERVER"; - SpanKind5["CONSUMER"] = "CONSUMER"; - SpanKind5["PRODUCER"] = "PRODUCER"; - })(SpanKind4 = exports.SpanKind || (exports.SpanKind = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/transform.js -var require_transform = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._toZipkinAnnotations = exports._toZipkinTags = exports.toZipkinSpan = exports.defaultStatusErrorTagName = exports.defaultStatusCodeTagName = undefined; - var api8 = require_src(); - var core_1 = require_src7(); - var zipkinTypes = require_types14(); - var ZIPKIN_SPAN_KIND_MAPPING = { - [api8.SpanKind.CLIENT]: zipkinTypes.SpanKind.CLIENT, - [api8.SpanKind.SERVER]: zipkinTypes.SpanKind.SERVER, - [api8.SpanKind.CONSUMER]: zipkinTypes.SpanKind.CONSUMER, - [api8.SpanKind.PRODUCER]: zipkinTypes.SpanKind.PRODUCER, - [api8.SpanKind.INTERNAL]: undefined - }; - exports.defaultStatusCodeTagName = "otel.status_code"; - exports.defaultStatusErrorTagName = "error"; - function toZipkinSpan(span, serviceName, statusCodeTagName, statusErrorTagName) { - const zipkinSpan = { - traceId: span.spanContext().traceId, - parentId: span.parentSpanContext?.spanId, - name: span.name, - id: span.spanContext().spanId, - kind: ZIPKIN_SPAN_KIND_MAPPING[span.kind], - timestamp: (0, core_1.hrTimeToMicroseconds)(span.startTime), - duration: Math.round((0, core_1.hrTimeToMicroseconds)(span.duration)), - localEndpoint: { serviceName }, - tags: _toZipkinTags(span, statusCodeTagName, statusErrorTagName), - annotations: span.events.length ? _toZipkinAnnotations(span.events) : undefined - }; - return zipkinSpan; - } - exports.toZipkinSpan = toZipkinSpan; - function _toZipkinTags({ attributes, resource, status, droppedAttributesCount, droppedEventsCount, droppedLinksCount }, statusCodeTagName, statusErrorTagName) { - const tags = {}; - for (const key of Object.keys(attributes)) { - tags[key] = String(attributes[key]); - } - if (status.code !== api8.SpanStatusCode.UNSET) { - tags[statusCodeTagName] = String(api8.SpanStatusCode[status.code]); - } - if (status.code === api8.SpanStatusCode.ERROR && status.message) { - tags[statusErrorTagName] = status.message; - } - if (droppedAttributesCount) { - tags["otel.dropped_attributes_count"] = String(droppedAttributesCount); - } - if (droppedEventsCount) { - tags["otel.dropped_events_count"] = String(droppedEventsCount); - } - if (droppedLinksCount) { - tags["otel.dropped_links_count"] = String(droppedLinksCount); - } - Object.keys(resource.attributes).forEach((name) => tags[name] = String(resource.attributes[name])); - return tags; - } - exports._toZipkinTags = _toZipkinTags; - function _toZipkinAnnotations(events) { - return events.map((event) => ({ - timestamp: Math.round((0, core_1.hrTimeToMicroseconds)(event.time)), - value: event.name - })); - } - exports._toZipkinAnnotations = _toZipkinAnnotations; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/utils.js -var require_utils43 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareGetHeaders = undefined; - function prepareGetHeaders(getExportRequestHeaders) { - return function() { - return getExportRequestHeaders(); - }; - } - exports.prepareGetHeaders = prepareGetHeaders; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/zipkin.js -var require_zipkin = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ZipkinExporter = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var index_1 = require_platform17(); - var transform_1 = require_transform(); - var semantic_conventions_1 = require_src3(); - var utils_1 = require_utils43(); - - class ZipkinExporter { - DEFAULT_SERVICE_NAME = "OpenTelemetry Service"; - _statusCodeTagName; - _statusDescriptionTagName; - _urlStr; - _send; - _getHeaders; - _serviceName; - _isShutdown; - _sendingPromises = []; - constructor(config2 = {}) { - this._urlStr = config2.url || ((0, core_1.getStringFromEnv)("OTEL_EXPORTER_ZIPKIN_ENDPOINT") ?? "http://localhost:9411/api/v2/spans"); - this._send = (0, index_1.prepareSend)(this._urlStr, config2.headers); - this._serviceName = config2.serviceName; - this._statusCodeTagName = config2.statusCodeTagName || transform_1.defaultStatusCodeTagName; - this._statusDescriptionTagName = config2.statusDescriptionTagName || transform_1.defaultStatusErrorTagName; - this._isShutdown = false; - if (typeof config2.getExportRequestHeaders === "function") { - this._getHeaders = (0, utils_1.prepareGetHeaders)(config2.getExportRequestHeaders); - } else { - this._beforeSend = function() {}; - } - } - export(spans, resultCallback) { - const serviceName = String(this._serviceName || spans[0].resource.attributes[semantic_conventions_1.ATTR_SERVICE_NAME] || this.DEFAULT_SERVICE_NAME); - api_1.diag.debug("Zipkin exporter export"); - if (this._isShutdown) { - setTimeout(() => resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Exporter has been shutdown") - })); - return; - } - const promise2 = new Promise((resolve2) => { - this._sendSpans(spans, serviceName, (result) => { - resolve2(); - resultCallback(result); - }); - }); - this._sendingPromises.push(promise2); - const popPromise = () => { - const index = this._sendingPromises.indexOf(promise2); - this._sendingPromises.splice(index, 1); - }; - promise2.then(popPromise, popPromise); - } - shutdown() { - api_1.diag.debug("Zipkin exporter shutdown"); - this._isShutdown = true; - return this.forceFlush(); - } - forceFlush() { - return new Promise((resolve2, reject) => { - Promise.all(this._sendingPromises).then(() => { - resolve2(); - }, reject); - }); - } - _beforeSend() { - if (this._getHeaders) { - this._send = (0, index_1.prepareSend)(this._urlStr, this._getHeaders()); - } - } - _sendSpans(spans, serviceName, done) { - const zipkinSpans = spans.map((span) => (0, transform_1.toZipkinSpan)(span, String(span.attributes[semantic_conventions_1.ATTR_SERVICE_NAME] || span.resource.attributes[semantic_conventions_1.ATTR_SERVICE_NAME] || serviceName), this._statusCodeTagName, this._statusDescriptionTagName)); - this._beforeSend(); - return this._send(zipkinSpans, (result) => { - if (done) { - return done(result); - } - }); - } - } - exports.ZipkinExporter = ZipkinExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/index.js -var require_src85 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ZipkinExporter = exports.prepareSend = undefined; - var platform_1 = require_platform17(); - Object.defineProperty(exports, "prepareSend", { enumerable: true, get: function() { - return platform_1.prepareSend; - } }); - var zipkin_1 = require_zipkin(); - Object.defineProperty(exports, "ZipkinExporter", { enumerable: true, get: function() { - return zipkin_1.ZipkinExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/common.js -var require_common5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3_DEBUG_FLAG_KEY = undefined; - var api_1 = require_src(); - exports.B3_DEBUG_FLAG_KEY = (0, api_1.createContextKey)("OpenTelemetry Context Key B3 Debug Flag"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/constants.js -var require_constants10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.X_B3_FLAGS = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = exports.B3_CONTEXT_HEADER = undefined; - exports.B3_CONTEXT_HEADER = "b3"; - exports.X_B3_TRACE_ID = "x-b3-traceid"; - exports.X_B3_SPAN_ID = "x-b3-spanid"; - exports.X_B3_SAMPLED = "x-b3-sampled"; - exports.X_B3_PARENT_SPAN_ID = "x-b3-parentspanid"; - exports.X_B3_FLAGS = "x-b3-flags"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/B3MultiPropagator.js -var require_B3MultiPropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3MultiPropagator = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var common_1 = require_common5(); - var constants_1 = require_constants10(); - var VALID_SAMPLED_VALUES = new Set([true, "true", "True", "1", 1]); - var VALID_UNSAMPLED_VALUES = new Set([false, "false", "False", "0", 0]); - function isValidSampledValue(sampled) { - return sampled === api_1.TraceFlags.SAMPLED || sampled === api_1.TraceFlags.NONE; - } - function parseHeader(header) { - return Array.isArray(header) ? header[0] : header; - } - function getHeaderValue(carrier, getter, key) { - const header = getter.get(carrier, key); - return parseHeader(header); - } - function getTraceId(carrier, getter) { - const traceId = getHeaderValue(carrier, getter, constants_1.X_B3_TRACE_ID); - if (typeof traceId === "string") { - return traceId.padStart(32, "0"); - } - return ""; - } - function getSpanId(carrier, getter) { - const spanId = getHeaderValue(carrier, getter, constants_1.X_B3_SPAN_ID); - if (typeof spanId === "string") { - return spanId; - } - return ""; - } - function getDebug(carrier, getter) { - const debug = getHeaderValue(carrier, getter, constants_1.X_B3_FLAGS); - return debug === "1" ? "1" : undefined; - } - function getTraceFlags(carrier, getter) { - const traceFlags = getHeaderValue(carrier, getter, constants_1.X_B3_SAMPLED); - const debug = getDebug(carrier, getter); - if (debug === "1" || VALID_SAMPLED_VALUES.has(traceFlags)) { - return api_1.TraceFlags.SAMPLED; - } - if (traceFlags === undefined || VALID_UNSAMPLED_VALUES.has(traceFlags)) { - return api_1.TraceFlags.NONE; - } - return; - } - - class B3MultiPropagator { - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - if (!spanContext || !(0, api_1.isSpanContextValid)(spanContext) || (0, core_1.isTracingSuppressed)(context8)) - return; - const debug = context8.getValue(common_1.B3_DEBUG_FLAG_KEY); - setter.set(carrier, constants_1.X_B3_TRACE_ID, spanContext.traceId); - setter.set(carrier, constants_1.X_B3_SPAN_ID, spanContext.spanId); - if (debug === "1") { - setter.set(carrier, constants_1.X_B3_FLAGS, debug); - } else if (spanContext.traceFlags !== undefined) { - setter.set(carrier, constants_1.X_B3_SAMPLED, (api_1.TraceFlags.SAMPLED & spanContext.traceFlags) === api_1.TraceFlags.SAMPLED ? "1" : "0"); - } - } - extract(context8, carrier, getter) { - const traceId = getTraceId(carrier, getter); - const spanId = getSpanId(carrier, getter); - const traceFlags = getTraceFlags(carrier, getter); - const debug = getDebug(carrier, getter); - if ((0, api_1.isValidTraceId)(traceId) && (0, api_1.isValidSpanId)(spanId) && isValidSampledValue(traceFlags)) { - context8 = context8.setValue(common_1.B3_DEBUG_FLAG_KEY, debug); - return api_1.trace.setSpanContext(context8, { - traceId, - spanId, - isRemote: true, - traceFlags - }); - } - return context8; - } - fields() { - return [ - constants_1.X_B3_TRACE_ID, - constants_1.X_B3_SPAN_ID, - constants_1.X_B3_FLAGS, - constants_1.X_B3_SAMPLED, - constants_1.X_B3_PARENT_SPAN_ID - ]; - } - } - exports.B3MultiPropagator = B3MultiPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/B3SinglePropagator.js -var require_B3SinglePropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3SinglePropagator = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var common_1 = require_common5(); - var constants_1 = require_constants10(); - var B3_CONTEXT_REGEX = /((?:[0-9a-f]{16}){1,2})-([0-9a-f]{16})(?:-([01d](?![0-9a-f])))?(?:-([0-9a-f]{16}))?/; - var PADDING = "0".repeat(16); - var SAMPLED_VALUES = new Set(["d", "1"]); - var DEBUG_STATE = "d"; - function convertToTraceId128(traceId) { - return traceId.length === 32 ? traceId : `${PADDING}${traceId}`; - } - function convertToTraceFlags(samplingState) { - if (samplingState && SAMPLED_VALUES.has(samplingState)) { - return api_1.TraceFlags.SAMPLED; - } - return api_1.TraceFlags.NONE; - } - - class B3SinglePropagator { - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - if (!spanContext || !(0, api_1.isSpanContextValid)(spanContext) || (0, core_1.isTracingSuppressed)(context8)) - return; - const samplingState = context8.getValue(common_1.B3_DEBUG_FLAG_KEY) || spanContext.traceFlags & 1; - const value = `${spanContext.traceId}-${spanContext.spanId}-${samplingState}`; - setter.set(carrier, constants_1.B3_CONTEXT_HEADER, value); - } - extract(context8, carrier, getter) { - const header = getter.get(carrier, constants_1.B3_CONTEXT_HEADER); - const b3Context = Array.isArray(header) ? header[0] : header; - if (typeof b3Context !== "string") - return context8; - const match2 = b3Context.match(B3_CONTEXT_REGEX); - if (!match2) - return context8; - const [, extractedTraceId, spanId, samplingState] = match2; - const traceId = convertToTraceId128(extractedTraceId); - if (!(0, api_1.isValidTraceId)(traceId) || !(0, api_1.isValidSpanId)(spanId)) - return context8; - const traceFlags = convertToTraceFlags(samplingState); - if (samplingState === DEBUG_STATE) { - context8 = context8.setValue(common_1.B3_DEBUG_FLAG_KEY, samplingState); - } - return api_1.trace.setSpanContext(context8, { - traceId, - spanId, - isRemote: true, - traceFlags - }); - } - fields() { - return [constants_1.B3_CONTEXT_HEADER]; - } - } - exports.B3SinglePropagator = B3SinglePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/types.js -var require_types15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3InjectEncoding = undefined; - var B3InjectEncoding; - (function(B3InjectEncoding2) { - B3InjectEncoding2[B3InjectEncoding2["SINGLE_HEADER"] = 0] = "SINGLE_HEADER"; - B3InjectEncoding2[B3InjectEncoding2["MULTI_HEADER"] = 1] = "MULTI_HEADER"; - })(B3InjectEncoding = exports.B3InjectEncoding || (exports.B3InjectEncoding = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/B3Propagator.js -var require_B3Propagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3Propagator = undefined; - var core_1 = require_src7(); - var B3MultiPropagator_1 = require_B3MultiPropagator(); - var B3SinglePropagator_1 = require_B3SinglePropagator(); - var constants_1 = require_constants10(); - var types_1 = require_types15(); - - class B3Propagator { - _b3MultiPropagator = new B3MultiPropagator_1.B3MultiPropagator; - _b3SinglePropagator = new B3SinglePropagator_1.B3SinglePropagator; - _inject; - _fields; - constructor(config2 = {}) { - if (config2.injectEncoding === types_1.B3InjectEncoding.MULTI_HEADER) { - this._inject = this._b3MultiPropagator.inject; - this._fields = this._b3MultiPropagator.fields(); - } else { - this._inject = this._b3SinglePropagator.inject; - this._fields = this._b3SinglePropagator.fields(); - } - } - inject(context8, carrier, setter) { - if ((0, core_1.isTracingSuppressed)(context8)) { - return; - } - this._inject(context8, carrier, setter); - } - extract(context8, carrier, getter) { - const header = getter.get(carrier, constants_1.B3_CONTEXT_HEADER); - const b3Context = Array.isArray(header) ? header[0] : header; - if (b3Context) { - return this._b3SinglePropagator.extract(context8, carrier, getter); - } else { - return this._b3MultiPropagator.extract(context8, carrier, getter); - } - } - fields() { - return this._fields; - } - } - exports.B3Propagator = B3Propagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/index.js -var require_src86 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3InjectEncoding = exports.X_B3_TRACE_ID = exports.X_B3_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_FLAGS = exports.B3_CONTEXT_HEADER = exports.B3Propagator = undefined; - var B3Propagator_1 = require_B3Propagator(); - Object.defineProperty(exports, "B3Propagator", { enumerable: true, get: function() { - return B3Propagator_1.B3Propagator; - } }); - var constants_1 = require_constants10(); - Object.defineProperty(exports, "B3_CONTEXT_HEADER", { enumerable: true, get: function() { - return constants_1.B3_CONTEXT_HEADER; - } }); - Object.defineProperty(exports, "X_B3_FLAGS", { enumerable: true, get: function() { - return constants_1.X_B3_FLAGS; - } }); - Object.defineProperty(exports, "X_B3_PARENT_SPAN_ID", { enumerable: true, get: function() { - return constants_1.X_B3_PARENT_SPAN_ID; - } }); - Object.defineProperty(exports, "X_B3_SAMPLED", { enumerable: true, get: function() { - return constants_1.X_B3_SAMPLED; - } }); - Object.defineProperty(exports, "X_B3_SPAN_ID", { enumerable: true, get: function() { - return constants_1.X_B3_SPAN_ID; - } }); - Object.defineProperty(exports, "X_B3_TRACE_ID", { enumerable: true, get: function() { - return constants_1.X_B3_TRACE_ID; - } }); - var types_1 = require_types15(); - Object.defineProperty(exports, "B3InjectEncoding", { enumerable: true, get: function() { - return types_1.B3InjectEncoding; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-jaeger@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-jaeger/build/src/JaegerPropagator.js -var require_JaegerPropagator = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JaegerPropagator = exports.UBER_BAGGAGE_HEADER_PREFIX = exports.UBER_TRACE_ID_HEADER = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - exports.UBER_TRACE_ID_HEADER = "uber-trace-id"; - exports.UBER_BAGGAGE_HEADER_PREFIX = "uberctx"; - - class JaegerPropagator { - _jaegerTraceHeader; - _jaegerBaggageHeaderPrefix; - constructor(config2) { - if (typeof config2 === "string") { - this._jaegerTraceHeader = config2; - this._jaegerBaggageHeaderPrefix = exports.UBER_BAGGAGE_HEADER_PREFIX; - } else { - this._jaegerTraceHeader = config2?.customTraceHeader || exports.UBER_TRACE_ID_HEADER; - this._jaegerBaggageHeaderPrefix = config2?.customBaggageHeaderPrefix || exports.UBER_BAGGAGE_HEADER_PREFIX; - } - } - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - const baggage = api_1.propagation.getBaggage(context8); - if (spanContext && (0, core_1.isTracingSuppressed)(context8) === false) { - const traceFlags = `0${(spanContext.traceFlags || api_1.TraceFlags.NONE).toString(16)}`; - setter.set(carrier, this._jaegerTraceHeader, `${spanContext.traceId}:${spanContext.spanId}:0:${traceFlags}`); - } - if (baggage) { - for (const [key, entry] of baggage.getAllEntries()) { - setter.set(carrier, `${this._jaegerBaggageHeaderPrefix}-${key}`, encodeURIComponent(entry.value)); - } - } - } - extract(context8, carrier, getter) { - const uberTraceIdHeader = getter.get(carrier, this._jaegerTraceHeader); - const uberTraceId = Array.isArray(uberTraceIdHeader) ? uberTraceIdHeader[0] : uberTraceIdHeader; - const baggageValues = getter.keys(carrier).filter((key) => key.startsWith(`${this._jaegerBaggageHeaderPrefix}-`)).map((key) => { - const value = getter.get(carrier, key); - return { - key: key.substring(this._jaegerBaggageHeaderPrefix.length + 1), - value: Array.isArray(value) ? value[0] : value - }; - }); - let newContext = context8; - if (typeof uberTraceId === "string") { - const spanContext = deserializeSpanContext(uberTraceId); - if (spanContext) { - newContext = api_1.trace.setSpanContext(newContext, spanContext); - } - } - if (baggageValues.length === 0) - return newContext; - let currentBaggage = api_1.propagation.getBaggage(context8) ?? api_1.propagation.createBaggage(); - for (const baggageEntry of baggageValues) { - if (baggageEntry.value === undefined) - continue; - currentBaggage = currentBaggage.setEntry(baggageEntry.key, { - value: decodeURIComponent(baggageEntry.value) - }); - } - newContext = api_1.propagation.setBaggage(newContext, currentBaggage); - return newContext; - } - fields() { - return [this._jaegerTraceHeader]; - } - } - exports.JaegerPropagator = JaegerPropagator; - var VALID_HEX_RE = /^[0-9a-f]{1,2}$/i; - function deserializeSpanContext(serializedString) { - const headers = decodeURIComponent(serializedString).split(":"); - if (headers.length !== 4) { - return null; - } - const [_traceId, _spanId, , flags] = headers; - const traceId = _traceId.padStart(32, "0"); - const spanId = _spanId.padStart(16, "0"); - const traceFlags = VALID_HEX_RE.test(flags) ? parseInt(flags, 16) & 1 : 1; - return { traceId, spanId, isRemote: true, traceFlags }; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-jaeger@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-jaeger/build/src/index.js -var require_src87 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.UBER_TRACE_ID_HEADER = exports.UBER_BAGGAGE_HEADER_PREFIX = exports.JaegerPropagator = undefined; - var JaegerPropagator_1 = require_JaegerPropagator(); - Object.defineProperty(exports, "JaegerPropagator", { enumerable: true, get: function() { - return JaegerPropagator_1.JaegerPropagator; - } }); - Object.defineProperty(exports, "UBER_BAGGAGE_HEADER_PREFIX", { enumerable: true, get: function() { - return JaegerPropagator_1.UBER_BAGGAGE_HEADER_PREFIX; - } }); - Object.defineProperty(exports, "UBER_TRACE_ID_HEADER", { enumerable: true, get: function() { - return JaegerPropagator_1.UBER_TRACE_ID_HEADER; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-node@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-node/build/src/utils.js -var require_utils44 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.setupPropagator = exports.setupContextManager = exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.filterBlanksAndNulls = exports.getResourceDetectorsFromEnv = undefined; - var api_1 = require_src(); - var core_1 = require_src7(); - var exporter_trace_otlp_proto_1 = require_src83(); - var exporter_trace_otlp_http_1 = require_src68(); - var exporter_trace_otlp_grpc_1 = require_src84(); - var exporter_zipkin_1 = require_src85(); - var resources_1 = require_src56(); - var sdk_trace_base_1 = require_src72(); - var propagator_b3_1 = require_src86(); - var propagator_jaeger_1 = require_src87(); - var context_async_hooks_1 = require_src71(); - var RESOURCE_DETECTOR_ENVIRONMENT = "env"; - var RESOURCE_DETECTOR_HOST = "host"; - var RESOURCE_DETECTOR_OS = "os"; - var RESOURCE_DETECTOR_PROCESS = "process"; - var RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = "serviceinstance"; - function getResourceDetectorsFromEnv() { - const resourceDetectors = new Map([ - [RESOURCE_DETECTOR_ENVIRONMENT, resources_1.envDetector], - [RESOURCE_DETECTOR_HOST, resources_1.hostDetector], - [RESOURCE_DETECTOR_OS, resources_1.osDetector], - [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, resources_1.serviceInstanceIdDetector], - [RESOURCE_DETECTOR_PROCESS, resources_1.processDetector] - ]); - const resourceDetectorsFromEnv = (0, core_1.getStringListFromEnv)("OTEL_NODE_RESOURCE_DETECTORS") ?? ["all"]; - if (resourceDetectorsFromEnv.includes("all")) { - return [...resourceDetectors.values()].flat(); - } - if (resourceDetectorsFromEnv.includes("none")) { - return []; - } - return resourceDetectorsFromEnv.flatMap((detector) => { - const resourceDetector = resourceDetectors.get(detector); - if (!resourceDetector) { - api_1.diag.warn(`Invalid resource detector "${detector}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`); - } - return resourceDetector || []; - }); - } - exports.getResourceDetectorsFromEnv = getResourceDetectorsFromEnv; - function filterBlanksAndNulls(list5) { - return list5.map((item) => item.trim()).filter((s2) => s2 !== "null" && s2 !== ""); - } - exports.filterBlanksAndNulls = filterBlanksAndNulls; - function getOtlpProtocolFromEnv() { - return (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_TRACES_PROTOCOL") ?? (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_PROTOCOL") ?? "http/protobuf"; - } - exports.getOtlpProtocolFromEnv = getOtlpProtocolFromEnv; - function getOtlpExporterFromEnv() { - const protocol = getOtlpProtocolFromEnv(); - switch (protocol) { - case "grpc": - return new exporter_trace_otlp_grpc_1.OTLPTraceExporter; - case "http/json": - return new exporter_trace_otlp_http_1.OTLPTraceExporter; - case "http/protobuf": - return new exporter_trace_otlp_proto_1.OTLPTraceExporter; - default: - api_1.diag.warn(`Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`); - return new exporter_trace_otlp_proto_1.OTLPTraceExporter; - } - } - function getSpanProcessorsFromEnv() { - const exportersMap = new Map([ - ["otlp", () => getOtlpExporterFromEnv()], - ["zipkin", () => new exporter_zipkin_1.ZipkinExporter], - ["console", () => new sdk_trace_base_1.ConsoleSpanExporter] - ]); - const exporters = []; - const processors = []; - let traceExportersList = filterBlanksAndNulls(Array.from(new Set((0, core_1.getStringListFromEnv)("OTEL_TRACES_EXPORTER")))); - if (traceExportersList[0] === "none") { - api_1.diag.warn('OTEL_TRACES_EXPORTER contains "none". SDK will not be initialized.'); - return []; - } - if (traceExportersList.length === 0) { - api_1.diag.debug("OTEL_TRACES_EXPORTER is empty. Using default otlp exporter."); - traceExportersList = ["otlp"]; - } else if (traceExportersList.length > 1 && traceExportersList.includes("none")) { - api_1.diag.warn('OTEL_TRACES_EXPORTER contains "none" along with other exporters. Using default otlp exporter.'); - traceExportersList = ["otlp"]; - } - for (const name of traceExportersList) { - const exporter = exportersMap.get(name)?.(); - if (exporter) { - exporters.push(exporter); - } else { - api_1.diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`); - } - } - for (const exp of exporters) { - if (exp instanceof sdk_trace_base_1.ConsoleSpanExporter) { - processors.push(new sdk_trace_base_1.SimpleSpanProcessor(exp)); - } else { - processors.push(new sdk_trace_base_1.BatchSpanProcessor(exp)); - } - } - if (exporters.length === 0) { - api_1.diag.warn("Unable to set up trace exporter(s) due to invalid exporter and/or protocol values."); - } - return processors; - } - exports.getSpanProcessorsFromEnv = getSpanProcessorsFromEnv; - function getPropagatorFromEnv() { - const propagatorsEnvVarValue = (0, core_1.getStringListFromEnv)("OTEL_PROPAGATORS"); - if (propagatorsEnvVarValue == null) { - return; - } - if (propagatorsEnvVarValue.includes("none")) { - return null; - } - const propagatorsFactory = new Map([ - ["tracecontext", () => new core_1.W3CTraceContextPropagator], - ["baggage", () => new core_1.W3CBaggagePropagator], - ["b3", () => new propagator_b3_1.B3Propagator], - [ - "b3multi", - () => new propagator_b3_1.B3Propagator({ injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER }) - ], - ["jaeger", () => new propagator_jaeger_1.JaegerPropagator] - ]); - const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue)); - const propagators = uniquePropagatorNames.map((name) => { - const propagator = propagatorsFactory.get(name)?.(); - if (!propagator) { - api_1.diag.warn(`Propagator "${name}" requested through environment variable is unavailable.`); - return; - } - return propagator; - }); - const validPropagators = propagators.reduce((list5, item) => { - if (item) { - list5.push(item); - } - return list5; - }, []); - if (validPropagators.length === 0) { - return null; - } else if (uniquePropagatorNames.length === 1) { - return validPropagators[0]; - } else { - return new core_1.CompositePropagator({ - propagators: validPropagators - }); - } - } - exports.getPropagatorFromEnv = getPropagatorFromEnv; - function setupContextManager(contextManager) { - if (contextManager === null) { - return; - } - if (contextManager === undefined) { - const defaultContextManager = new context_async_hooks_1.AsyncLocalStorageContextManager; - defaultContextManager.enable(); - api_1.context.setGlobalContextManager(defaultContextManager); - return; - } - contextManager.enable(); - api_1.context.setGlobalContextManager(contextManager); - } - exports.setupContextManager = setupContextManager; - function setupPropagator(propagator) { - if (propagator === null) { - return; - } - if (propagator === undefined) { - api_1.propagation.setGlobalPropagator(new core_1.CompositePropagator({ - propagators: [ - new core_1.W3CTraceContextPropagator, - new core_1.W3CBaggagePropagator - ] - })); - return; - } - api_1.propagation.setGlobalPropagator(propagator); - } - exports.setupPropagator = setupPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-node@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-node/build/src/sdk.js -var require_sdk = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeSDK = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src6(); - var instrumentation_1 = require_src9(); - var resources_1 = require_src56(); - var sdk_logs_1 = require_src70(); - var exporter_logs_otlp_http_1 = require_src66(); - var exporter_logs_otlp_grpc_1 = require_src78(); - var exporter_logs_otlp_proto_1 = require_src79(); - var exporter_metrics_otlp_grpc_1 = require_src80(); - var exporter_metrics_otlp_proto_1 = require_src81(); - var exporter_metrics_otlp_http_1 = require_src67(); - var exporter_prometheus_1 = require_src82(); - var sdk_metrics_1 = require_src64(); - var sdk_trace_base_1 = require_src72(); - var sdk_trace_node_1 = require_src73(); - var semantic_conventions_1 = require_src3(); - var core_1 = require_src7(); - var utils_1 = require_utils44(); - function getValueInMillis(envName, defaultValue) { - return parseInt(process.env[envName] || "") || defaultValue; - } - function configureMetricProviderFromEnv() { - const metricReaders = []; - const enabledExporters = (0, core_1.getStringListFromEnv)("OTEL_METRICS_EXPORTER"); - if (!enabledExporters) { - return metricReaders; - } - if (enabledExporters.length === 0) { - api_1.diag.debug("OTEL_METRICS_EXPORTER is empty. Using default otlp exporter."); - } - if (enabledExporters.includes("none")) { - api_1.diag.info(`OTEL_METRICS_EXPORTER contains "none". Metric provider will not be initialized.`); - return metricReaders; - } - enabledExporters.forEach((exporter) => { - if (exporter === "otlp") { - const protocol = process.env.OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?.trim() || process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim(); - const exportIntervalMillis = getValueInMillis("OTEL_METRIC_EXPORT_INTERVAL", 60000); - const exportTimeoutMillis = getValueInMillis("OTEL_METRIC_EXPORT_TIMEOUT", 30000); - switch (protocol) { - case "grpc": - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_grpc_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - break; - case "http/json": - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_http_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - break; - case "http/protobuf": - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_proto_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - break; - default: - api_1.diag.warn(`Unsupported OTLP metrics protocol: "${protocol}". Using http/protobuf.`); - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_proto_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - } - } else if (exporter === "console") { - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new sdk_metrics_1.ConsoleMetricExporter - })); - } else if (exporter === "prometheus") { - metricReaders.push(new exporter_prometheus_1.PrometheusExporter); - } else { - api_1.diag.warn(`Unsupported OTEL_METRICS_EXPORTER value: "${exporter}". Supported values are: otlp, console, prometheus, none.`); - } - }); - return metricReaders; - } - - class NodeSDK { - _tracerProviderConfig; - _loggerProviderConfig; - _meterProviderConfig; - _instrumentations; - _resource; - _resourceDetectors; - _autoDetectResources; - _tracerProvider; - _loggerProvider; - _meterProvider; - _serviceName; - _configuration; - _disabled; - constructor(configuration = {}) { - if ((0, core_1.getBooleanFromEnv)("OTEL_SDK_DISABLED")) { - this._disabled = true; - } - const logLevel = (0, core_1.getStringFromEnv)("OTEL_LOG_LEVEL"); - if (logLevel != null) { - api_1.diag.setLogger(new api_1.DiagConsoleLogger, { - logLevel: (0, core_1.diagLogLevelFromString)(logLevel) - }); - } - this._configuration = configuration; - this._resource = configuration.resource ?? (0, resources_1.defaultResource)(); - this._autoDetectResources = configuration.autoDetectResources ?? true; - if (!this._autoDetectResources) { - this._resourceDetectors = []; - } else if (configuration.resourceDetectors != null) { - this._resourceDetectors = configuration.resourceDetectors; - } else if ((0, core_1.getStringFromEnv)("OTEL_NODE_RESOURCE_DETECTORS")) { - this._resourceDetectors = (0, utils_1.getResourceDetectorsFromEnv)(); - } else { - this._resourceDetectors = [resources_1.envDetector, resources_1.processDetector, resources_1.hostDetector]; - } - this._serviceName = configuration.serviceName; - if (configuration.traceExporter || configuration.spanProcessor || configuration.spanProcessors) { - const tracerProviderConfig = {}; - if (configuration.sampler) { - tracerProviderConfig.sampler = configuration.sampler; - } - if (configuration.spanLimits) { - tracerProviderConfig.spanLimits = configuration.spanLimits; - } - if (configuration.idGenerator) { - tracerProviderConfig.idGenerator = configuration.idGenerator; - } - if (configuration.spanProcessor) { - api_1.diag.warn("The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead."); - } - const spanProcessor = configuration.spanProcessor ?? new sdk_trace_base_1.BatchSpanProcessor(configuration.traceExporter); - const spanProcessors2 = configuration.spanProcessors ?? [spanProcessor]; - this._tracerProviderConfig = { - tracerConfig: tracerProviderConfig, - spanProcessors: spanProcessors2 - }; - } - if (configuration.logRecordProcessors) { - this._loggerProviderConfig = { - logRecordProcessors: configuration.logRecordProcessors - }; - } else if (configuration.logRecordProcessor) { - this._loggerProviderConfig = { - logRecordProcessors: [configuration.logRecordProcessor] - }; - api_1.diag.warn("The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead."); - } else { - this.configureLoggerProviderFromEnv(); - } - if (configuration.metricReaders || configuration.metricReader || configuration.views) { - const meterProviderConfig = {}; - if (configuration.metricReaders) { - meterProviderConfig.readers = configuration.metricReaders; - } else if (configuration.metricReader) { - meterProviderConfig.readers = [configuration.metricReader]; - api_1.diag.warn("The 'metricReader' option is deprecated. Please use 'metricReaders' instead."); - } - if (configuration.views) { - meterProviderConfig.views = configuration.views; - } - this._meterProviderConfig = meterProviderConfig; - } - this._instrumentations = configuration.instrumentations?.flat() ?? []; - } - start() { - if (this._disabled) { - return; - } - (0, instrumentation_1.registerInstrumentations)({ - instrumentations: this._instrumentations - }); - (0, utils_1.setupContextManager)(this._configuration?.contextManager); - (0, utils_1.setupPropagator)(this._configuration?.textMapPropagator === null ? null : this._configuration?.textMapPropagator ?? (0, utils_1.getPropagatorFromEnv)()); - if (this._autoDetectResources) { - const internalConfig = { - detectors: this._resourceDetectors - }; - this._resource = this._resource.merge((0, resources_1.detectResources)(internalConfig)); - } - this._resource = this._serviceName === undefined ? this._resource : this._resource.merge((0, resources_1.resourceFromAttributes)({ - [semantic_conventions_1.ATTR_SERVICE_NAME]: this._serviceName - })); - const spanProcessors2 = this._tracerProviderConfig ? this._tracerProviderConfig.spanProcessors : (0, utils_1.getSpanProcessorsFromEnv)(); - if (spanProcessors2.length > 0) { - this._tracerProvider = new sdk_trace_node_1.NodeTracerProvider({ - ...this._configuration, - resource: this._resource, - spanProcessors: spanProcessors2 - }); - api_1.trace.setGlobalTracerProvider(this._tracerProvider); - } - if (this._loggerProviderConfig) { - const loggerProvider = new sdk_logs_1.LoggerProvider({ - resource: this._resource, - processors: this._loggerProviderConfig.logRecordProcessors - }); - this._loggerProvider = loggerProvider; - api_logs_1.logs.setGlobalLoggerProvider(loggerProvider); - } - const metricReadersFromEnv = configureMetricProviderFromEnv(); - if (this._meterProviderConfig || metricReadersFromEnv.length > 0) { - const readers = []; - if (this._meterProviderConfig?.readers) { - readers.push(...this._meterProviderConfig.readers); - } - if (readers.length === 0) { - metricReadersFromEnv.forEach((r) => readers.push(r)); - } - const meterProvider = new sdk_metrics_1.MeterProvider({ - resource: this._resource, - views: this._meterProviderConfig?.views ?? [], - readers - }); - this._meterProvider = meterProvider; - api_1.metrics.setGlobalMeterProvider(meterProvider); - for (const instrumentation of this._instrumentations) { - instrumentation.setMeterProvider(api_1.metrics.getMeterProvider()); - } - } - } - shutdown() { - const promises = []; - if (this._tracerProvider) { - promises.push(this._tracerProvider.shutdown()); - } - if (this._loggerProvider) { - promises.push(this._loggerProvider.shutdown()); - } - if (this._meterProvider) { - promises.push(this._meterProvider.shutdown()); - } - return Promise.all(promises).then(() => {}); - } - configureLoggerProviderFromEnv() { - const enabledExporters = (0, core_1.getStringListFromEnv)("OTEL_LOGS_EXPORTER") ?? []; - if (enabledExporters.length === 0) { - api_1.diag.debug("OTEL_LOGS_EXPORTER is empty. Using default otlp exporter."); - enabledExporters.push("otlp"); - } - if (enabledExporters.includes("none")) { - api_1.diag.info(`OTEL_LOGS_EXPORTER contains "none". Logger provider will not be initialized.`); - return; - } - const exporters = []; - enabledExporters.forEach((exporter) => { - if (exporter === "otlp") { - const protocol = ((0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_LOGS_PROTOCOL") ?? (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_PROTOCOL"))?.trim(); - switch (protocol) { - case "grpc": - exporters.push(new exporter_logs_otlp_grpc_1.OTLPLogExporter); - break; - case "http/json": - exporters.push(new exporter_logs_otlp_http_1.OTLPLogExporter); - break; - case "http/protobuf": - exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter); - break; - case undefined: - case "": - exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter); - break; - default: - api_1.diag.warn(`Unsupported OTLP logs protocol: "${protocol}". Using http/protobuf.`); - exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter); - } - } else if (exporter === "console") { - exporters.push(new sdk_logs_1.ConsoleLogRecordExporter); - } else { - api_1.diag.warn(`Unsupported OTEL_LOGS_EXPORTER value: "${exporter}". Supported values are: otlp, console, none.`); - } - }); - if (exporters.length > 0) { - this._loggerProviderConfig = { - logRecordProcessors: exporters.map((exporter) => { - if (exporter instanceof sdk_logs_1.ConsoleLogRecordExporter) { - return new sdk_logs_1.SimpleLogRecordProcessor(exporter); - } else { - return new sdk_logs_1.BatchLogRecordProcessor(exporter); - } - }) - }; - } - } - } - exports.NodeSDK = NodeSDK; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-node@0.207.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-node/build/src/index.js -var require_src88 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeSDK = exports.tracing = exports.resources = exports.node = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = undefined; - exports.api = require_src(); - exports.contextBase = require_src(); - exports.core = require_src7(); - exports.logs = require_src70(); - exports.metrics = require_src64(); - exports.node = require_src73(); - exports.resources = require_src56(); - exports.tracing = require_src72(); - var sdk_1 = require_sdk(); - Object.defineProperty(exports, "NodeSDK", { enumerable: true, get: function() { - return sdk_1.NodeSDK; - } }); -}); - -// ../../../../node_modules/.bun/papaparse@5.5.3/node_modules/papaparse/papaparse.js -var require_papaparse = __commonJS((exports, module) => { - (function(root, factory) { - if (typeof define === "function" && define.amd) { - define([], factory); - } else if (typeof module === "object" && typeof exports !== "undefined") { - module.exports = factory(); - } else { - root.Papa = factory(); - } - })(exports, function moduleFactory() { - var global2 = function() { - if (typeof self !== "undefined") { - return self; - } - if (typeof window !== "undefined") { - return window; - } - if (typeof global2 !== "undefined") { - return global2; - } - return {}; - }(); - function getWorkerBlob() { - var URL2 = global2.URL || global2.webkitURL || null; - var code = moduleFactory.toString(); - return Papa.BLOB_URL || (Papa.BLOB_URL = URL2.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ", "(", code, ")();"], { type: "text/javascript" }))); - } - var IS_WORKER = !global2.document && !!global2.postMessage, IS_PAPA_WORKER = global2.IS_PAPA_WORKER || false; - var workers = {}, workerIdCounter = 0; - var Papa = {}; - Papa.parse = CsvToJson; - Papa.unparse = JsonToCsv; - Papa.RECORD_SEP = String.fromCharCode(30); - Papa.UNIT_SEP = String.fromCharCode(31); - Papa.BYTE_ORDER_MARK = "\uFEFF"; - Papa.BAD_DELIMITERS = ["\r", ` -`, '"', Papa.BYTE_ORDER_MARK]; - Papa.WORKERS_SUPPORTED = !IS_WORKER && !!global2.Worker; - Papa.NODE_STREAM_INPUT = 1; - Papa.LocalChunkSize = 1024 * 1024 * 10; - Papa.RemoteChunkSize = 1024 * 1024 * 5; - Papa.DefaultDelimiter = ","; - Papa.Parser = Parser; - Papa.ParserHandle = ParserHandle; - Papa.NetworkStreamer = NetworkStreamer; - Papa.FileStreamer = FileStreamer; - Papa.StringStreamer = StringStreamer; - Papa.ReadableStreamStreamer = ReadableStreamStreamer; - if (typeof PAPA_BROWSER_CONTEXT === "undefined") { - Papa.DuplexStreamStreamer = DuplexStreamStreamer; - } - if (global2.jQuery) { - var $ = global2.jQuery; - $.fn.parse = function(options) { - var config2 = options.config || {}; - var queue = []; - this.each(function(idx) { - var supported = $(this).prop("tagName").toUpperCase() === "INPUT" && $(this).attr("type").toLowerCase() === "file" && global2.FileReader; - if (!supported || !this.files || this.files.length === 0) - return true; - for (var i = 0;i < this.files.length; i++) { - queue.push({ - file: this.files[i], - inputElem: this, - instanceConfig: $.extend({}, config2) - }); - } - }); - parseNextFile(); - return this; - function parseNextFile() { - if (queue.length === 0) { - if (isFunction(options.complete)) - options.complete(); - return; - } - var f = queue[0]; - if (isFunction(options.before)) { - var returned = options.before(f.file, f.inputElem); - if (typeof returned === "object") { - if (returned.action === "abort") { - error48("AbortError", f.file, f.inputElem, returned.reason); - return; - } else if (returned.action === "skip") { - fileComplete(); - return; - } else if (typeof returned.config === "object") - f.instanceConfig = $.extend(f.instanceConfig, returned.config); - } else if (returned === "skip") { - fileComplete(); - return; - } - } - var userCompleteFunc = f.instanceConfig.complete; - f.instanceConfig.complete = function(results) { - if (isFunction(userCompleteFunc)) - userCompleteFunc(results, f.file, f.inputElem); - fileComplete(); - }; - Papa.parse(f.file, f.instanceConfig); - } - function error48(name, file2, elem, reason) { - if (isFunction(options.error)) - options.error({ name }, file2, elem, reason); - } - function fileComplete() { - queue.splice(0, 1); - parseNextFile(); - } - }; - } - if (IS_PAPA_WORKER) { - global2.onmessage = workerThreadReceivedMessage; - } - function CsvToJson(_input, _config) { - _config = _config || {}; - var dynamicTyping = _config.dynamicTyping || false; - if (isFunction(dynamicTyping)) { - _config.dynamicTypingFunction = dynamicTyping; - dynamicTyping = {}; - } - _config.dynamicTyping = dynamicTyping; - _config.transform = isFunction(_config.transform) ? _config.transform : false; - if (_config.worker && Papa.WORKERS_SUPPORTED) { - var w = newWorker(); - w.userStep = _config.step; - w.userChunk = _config.chunk; - w.userComplete = _config.complete; - w.userError = _config.error; - _config.step = isFunction(_config.step); - _config.chunk = isFunction(_config.chunk); - _config.complete = isFunction(_config.complete); - _config.error = isFunction(_config.error); - delete _config.worker; - w.postMessage({ - input: _input, - config: _config, - workerId: w.id - }); - return; - } - var streamer = null; - if (_input === Papa.NODE_STREAM_INPUT && typeof PAPA_BROWSER_CONTEXT === "undefined") { - streamer = new DuplexStreamStreamer(_config); - return streamer.getStream(); - } else if (typeof _input === "string") { - _input = stripBom(_input); - if (_config.download) - streamer = new NetworkStreamer(_config); - else - streamer = new StringStreamer(_config); - } else if (_input.readable === true && isFunction(_input.read) && isFunction(_input.on)) { - streamer = new ReadableStreamStreamer(_config); - } else if (global2.File && _input instanceof File || _input instanceof Object) - streamer = new FileStreamer(_config); - return streamer.stream(_input); - function stripBom(string5) { - if (string5.charCodeAt(0) === 65279) { - return string5.slice(1); - } - return string5; - } - } - function JsonToCsv(_input, _config) { - var _quotes = false; - var _writeHeader = true; - var _delimiter = ","; - var _newline = `\r -`; - var _quoteChar = '"'; - var _escapedQuote = _quoteChar + _quoteChar; - var _skipEmptyLines = false; - var _columns = null; - var _escapeFormulae = false; - unpackConfig(); - var quoteCharRegex = new RegExp(escapeRegExp(_quoteChar), "g"); - if (typeof _input === "string") - _input = JSON.parse(_input); - if (Array.isArray(_input)) { - if (!_input.length || Array.isArray(_input[0])) - return serialize2(null, _input, _skipEmptyLines); - else if (typeof _input[0] === "object") - return serialize2(_columns || Object.keys(_input[0]), _input, _skipEmptyLines); - } else if (typeof _input === "object") { - if (typeof _input.data === "string") - _input.data = JSON.parse(_input.data); - if (Array.isArray(_input.data)) { - if (!_input.fields) - _input.fields = _input.meta && _input.meta.fields || _columns; - if (!_input.fields) - _input.fields = Array.isArray(_input.data[0]) ? _input.fields : typeof _input.data[0] === "object" ? Object.keys(_input.data[0]) : []; - if (!Array.isArray(_input.data[0]) && typeof _input.data[0] !== "object") - _input.data = [_input.data]; - } - return serialize2(_input.fields || [], _input.data || [], _skipEmptyLines); - } - throw new Error("Unable to serialize unrecognized input"); - function unpackConfig() { - if (typeof _config !== "object") - return; - if (typeof _config.delimiter === "string" && !Papa.BAD_DELIMITERS.filter(function(value) { - return _config.delimiter.indexOf(value) !== -1; - }).length) { - _delimiter = _config.delimiter; - } - if (typeof _config.quotes === "boolean" || typeof _config.quotes === "function" || Array.isArray(_config.quotes)) - _quotes = _config.quotes; - if (typeof _config.skipEmptyLines === "boolean" || typeof _config.skipEmptyLines === "string") - _skipEmptyLines = _config.skipEmptyLines; - if (typeof _config.newline === "string") - _newline = _config.newline; - if (typeof _config.quoteChar === "string") - _quoteChar = _config.quoteChar; - if (typeof _config.header === "boolean") - _writeHeader = _config.header; - if (Array.isArray(_config.columns)) { - if (_config.columns.length === 0) - throw new Error("Option columns is empty"); - _columns = _config.columns; - } - if (_config.escapeChar !== undefined) { - _escapedQuote = _config.escapeChar + _quoteChar; - } - if (_config.escapeFormulae instanceof RegExp) { - _escapeFormulae = _config.escapeFormulae; - } else if (typeof _config.escapeFormulae === "boolean" && _config.escapeFormulae) { - _escapeFormulae = /^[=+\-@\t\r].*$/; - } - } - function serialize2(fields, data, skipEmptyLines) { - var csv = ""; - if (typeof fields === "string") - fields = JSON.parse(fields); - if (typeof data === "string") - data = JSON.parse(data); - var hasHeader = Array.isArray(fields) && fields.length > 0; - var dataKeyedByField = !Array.isArray(data[0]); - if (hasHeader && _writeHeader) { - for (var i = 0;i < fields.length; i++) { - if (i > 0) - csv += _delimiter; - csv += safe(fields[i], i); - } - if (data.length > 0) - csv += _newline; - } - for (var row = 0;row < data.length; row++) { - var maxCol = hasHeader ? fields.length : data[row].length; - var emptyLine = false; - var nullLine = hasHeader ? Object.keys(data[row]).length === 0 : data[row].length === 0; - if (skipEmptyLines && !hasHeader) { - emptyLine = skipEmptyLines === "greedy" ? data[row].join("").trim() === "" : data[row].length === 1 && data[row][0].length === 0; - } - if (skipEmptyLines === "greedy" && hasHeader) { - var line = []; - for (var c = 0;c < maxCol; c++) { - var cx = dataKeyedByField ? fields[c] : c; - line.push(data[row][cx]); - } - emptyLine = line.join("").trim() === ""; - } - if (!emptyLine) { - for (var col = 0;col < maxCol; col++) { - if (col > 0 && !nullLine) - csv += _delimiter; - var colIdx = hasHeader && dataKeyedByField ? fields[col] : col; - csv += safe(data[row][colIdx], col); - } - if (row < data.length - 1 && (!skipEmptyLines || maxCol > 0 && !nullLine)) { - csv += _newline; - } - } - } - return csv; - } - function safe(str, col) { - if (typeof str === "undefined" || str === null) - return ""; - if (str.constructor === Date) - return JSON.stringify(str).slice(1, 25); - var needsQuotes = false; - if (_escapeFormulae && typeof str === "string" && _escapeFormulae.test(str)) { - str = "'" + str; - needsQuotes = true; - } - var escapedQuoteStr = str.toString().replace(quoteCharRegex, _escapedQuote); - needsQuotes = needsQuotes || _quotes === true || typeof _quotes === "function" && _quotes(str, col) || Array.isArray(_quotes) && _quotes[col] || hasAny(escapedQuoteStr, Papa.BAD_DELIMITERS) || escapedQuoteStr.indexOf(_delimiter) > -1 || escapedQuoteStr.charAt(0) === " " || escapedQuoteStr.charAt(escapedQuoteStr.length - 1) === " "; - return needsQuotes ? _quoteChar + escapedQuoteStr + _quoteChar : escapedQuoteStr; - } - function hasAny(str, substrings) { - for (var i = 0;i < substrings.length; i++) - if (str.indexOf(substrings[i]) > -1) - return true; - return false; - } - } - function ChunkStreamer(config2) { - this._handle = null; - this._finished = false; - this._completed = false; - this._halted = false; - this._input = null; - this._baseIndex = 0; - this._partialLine = ""; - this._rowCount = 0; - this._start = 0; - this._nextChunk = null; - this.isFirstChunk = true; - this._completeResults = { - data: [], - errors: [], - meta: {} - }; - replaceConfig.call(this, config2); - this.parseChunk = function(chunk, isFakeChunk) { - const skipFirstNLines = parseInt(this._config.skipFirstNLines) || 0; - if (this.isFirstChunk && skipFirstNLines > 0) { - let _newline = this._config.newline; - if (!_newline) { - const quoteChar = this._config.quoteChar || '"'; - _newline = this._handle.guessLineEndings(chunk, quoteChar); - } - const splitChunk = chunk.split(_newline); - chunk = [...splitChunk.slice(skipFirstNLines)].join(_newline); - } - if (this.isFirstChunk && isFunction(this._config.beforeFirstChunk)) { - var modifiedChunk = this._config.beforeFirstChunk(chunk); - if (modifiedChunk !== undefined) - chunk = modifiedChunk; - } - this.isFirstChunk = false; - this._halted = false; - var aggregate = this._partialLine + chunk; - this._partialLine = ""; - var results = this._handle.parse(aggregate, this._baseIndex, !this._finished); - if (this._handle.paused() || this._handle.aborted()) { - this._halted = true; - return; - } - var lastIndex = results.meta.cursor; - if (!this._finished) { - this._partialLine = aggregate.substring(lastIndex - this._baseIndex); - this._baseIndex = lastIndex; - } - if (results && results.data) - this._rowCount += results.data.length; - var finishedIncludingPreview = this._finished || this._config.preview && this._rowCount >= this._config.preview; - if (IS_PAPA_WORKER) { - global2.postMessage({ - results, - workerId: Papa.WORKER_ID, - finished: finishedIncludingPreview - }); - } else if (isFunction(this._config.chunk) && !isFakeChunk) { - this._config.chunk(results, this._handle); - if (this._handle.paused() || this._handle.aborted()) { - this._halted = true; - return; - } - results = undefined; - this._completeResults = undefined; - } - if (!this._config.step && !this._config.chunk) { - this._completeResults.data = this._completeResults.data.concat(results.data); - this._completeResults.errors = this._completeResults.errors.concat(results.errors); - this._completeResults.meta = results.meta; - } - if (!this._completed && finishedIncludingPreview && isFunction(this._config.complete) && (!results || !results.meta.aborted)) { - this._config.complete(this._completeResults, this._input); - this._completed = true; - } - if (!finishedIncludingPreview && (!results || !results.meta.paused)) - this._nextChunk(); - return results; - }; - this._sendError = function(error48) { - if (isFunction(this._config.error)) - this._config.error(error48); - else if (IS_PAPA_WORKER && this._config.error) { - global2.postMessage({ - workerId: Papa.WORKER_ID, - error: error48, - finished: false - }); - } - }; - function replaceConfig(config3) { - var configCopy = copy(config3); - configCopy.chunkSize = parseInt(configCopy.chunkSize); - if (!config3.step && !config3.chunk) - configCopy.chunkSize = null; - this._handle = new ParserHandle(configCopy); - this._handle.streamer = this; - this._config = configCopy; - } - } - function NetworkStreamer(config2) { - config2 = config2 || {}; - if (!config2.chunkSize) - config2.chunkSize = Papa.RemoteChunkSize; - ChunkStreamer.call(this, config2); - var xhr; - if (IS_WORKER) { - this._nextChunk = function() { - this._readChunk(); - this._chunkLoaded(); - }; - } else { - this._nextChunk = function() { - this._readChunk(); - }; - } - this.stream = function(url2) { - this._input = url2; - this._nextChunk(); - }; - this._readChunk = function() { - if (this._finished) { - this._chunkLoaded(); - return; - } - xhr = new XMLHttpRequest; - if (this._config.withCredentials) { - xhr.withCredentials = this._config.withCredentials; - } - if (!IS_WORKER) { - xhr.onload = bindFunction(this._chunkLoaded, this); - xhr.onerror = bindFunction(this._chunkError, this); - } - xhr.open(this._config.downloadRequestBody ? "POST" : "GET", this._input, !IS_WORKER); - if (this._config.downloadRequestHeaders) { - var headers = this._config.downloadRequestHeaders; - for (var headerName in headers) { - xhr.setRequestHeader(headerName, headers[headerName]); - } - } - if (this._config.chunkSize) { - var end = this._start + this._config.chunkSize - 1; - xhr.setRequestHeader("Range", "bytes=" + this._start + "-" + end); - } - try { - xhr.send(this._config.downloadRequestBody); - } catch (err) { - this._chunkError(err.message); - } - if (IS_WORKER && xhr.status === 0) - this._chunkError(); - }; - this._chunkLoaded = function() { - if (xhr.readyState !== 4) - return; - if (xhr.status < 200 || xhr.status >= 400) { - this._chunkError(); - return; - } - this._start += this._config.chunkSize ? this._config.chunkSize : xhr.responseText.length; - this._finished = !this._config.chunkSize || this._start >= getFileSize(xhr); - this.parseChunk(xhr.responseText); - }; - this._chunkError = function(errorMessage) { - var errorText = xhr.statusText || errorMessage; - this._sendError(new Error(errorText)); - }; - function getFileSize(xhr2) { - var contentRange = xhr2.getResponseHeader("Content-Range"); - if (contentRange === null) { - return -1; - } - return parseInt(contentRange.substring(contentRange.lastIndexOf("/") + 1)); - } - } - NetworkStreamer.prototype = Object.create(ChunkStreamer.prototype); - NetworkStreamer.prototype.constructor = NetworkStreamer; - function FileStreamer(config2) { - config2 = config2 || {}; - if (!config2.chunkSize) - config2.chunkSize = Papa.LocalChunkSize; - ChunkStreamer.call(this, config2); - var reader, slice; - var usingAsyncReader = typeof FileReader !== "undefined"; - this.stream = function(file2) { - this._input = file2; - slice = file2.slice || file2.webkitSlice || file2.mozSlice; - if (usingAsyncReader) { - reader = new FileReader; - reader.onload = bindFunction(this._chunkLoaded, this); - reader.onerror = bindFunction(this._chunkError, this); - } else - reader = new FileReaderSync; - this._nextChunk(); - }; - this._nextChunk = function() { - if (!this._finished && (!this._config.preview || this._rowCount < this._config.preview)) - this._readChunk(); - }; - this._readChunk = function() { - var input = this._input; - if (this._config.chunkSize) { - var end = Math.min(this._start + this._config.chunkSize, this._input.size); - input = slice.call(input, this._start, end); - } - var txt = reader.readAsText(input, this._config.encoding); - if (!usingAsyncReader) - this._chunkLoaded({ target: { result: txt } }); - }; - this._chunkLoaded = function(event) { - this._start += this._config.chunkSize; - this._finished = !this._config.chunkSize || this._start >= this._input.size; - this.parseChunk(event.target.result); - }; - this._chunkError = function() { - this._sendError(reader.error); - }; - } - FileStreamer.prototype = Object.create(ChunkStreamer.prototype); - FileStreamer.prototype.constructor = FileStreamer; - function StringStreamer(config2) { - config2 = config2 || {}; - ChunkStreamer.call(this, config2); - var remaining; - this.stream = function(s2) { - remaining = s2; - return this._nextChunk(); - }; - this._nextChunk = function() { - if (this._finished) - return; - var size = this._config.chunkSize; - var chunk; - if (size) { - chunk = remaining.substring(0, size); - remaining = remaining.substring(size); - } else { - chunk = remaining; - remaining = ""; - } - this._finished = !remaining; - return this.parseChunk(chunk); - }; - } - StringStreamer.prototype = Object.create(StringStreamer.prototype); - StringStreamer.prototype.constructor = StringStreamer; - function ReadableStreamStreamer(config2) { - config2 = config2 || {}; - ChunkStreamer.call(this, config2); - var queue = []; - var parseOnData = true; - var streamHasEnded = false; - this.pause = function() { - ChunkStreamer.prototype.pause.apply(this, arguments); - this._input.pause(); - }; - this.resume = function() { - ChunkStreamer.prototype.resume.apply(this, arguments); - this._input.resume(); - }; - this.stream = function(stream3) { - this._input = stream3; - this._input.on("data", this._streamData); - this._input.on("end", this._streamEnd); - this._input.on("error", this._streamError); - }; - this._checkIsFinished = function() { - if (streamHasEnded && queue.length === 1) { - this._finished = true; - } - }; - this._nextChunk = function() { - this._checkIsFinished(); - if (queue.length) { - this.parseChunk(queue.shift()); - } else { - parseOnData = true; - } - }; - this._streamData = bindFunction(function(chunk) { - try { - queue.push(typeof chunk === "string" ? chunk : chunk.toString(this._config.encoding)); - if (parseOnData) { - parseOnData = false; - this._checkIsFinished(); - this.parseChunk(queue.shift()); - } - } catch (error48) { - this._streamError(error48); - } - }, this); - this._streamError = bindFunction(function(error48) { - this._streamCleanUp(); - this._sendError(error48); - }, this); - this._streamEnd = bindFunction(function() { - this._streamCleanUp(); - streamHasEnded = true; - this._streamData(""); - }, this); - this._streamCleanUp = bindFunction(function() { - this._input.removeListener("data", this._streamData); - this._input.removeListener("end", this._streamEnd); - this._input.removeListener("error", this._streamError); - }, this); - } - ReadableStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); - ReadableStreamStreamer.prototype.constructor = ReadableStreamStreamer; - function DuplexStreamStreamer(_config) { - var Duplex = __require("stream").Duplex; - var config2 = copy(_config); - var parseOnWrite = true; - var writeStreamHasFinished = false; - var parseCallbackQueue = []; - var stream3 = null; - this._onCsvData = function(results) { - var data = results.data; - if (!stream3.push(data) && !this._handle.paused()) { - this._handle.pause(); - } - }; - this._onCsvComplete = function() { - stream3.push(null); - }; - config2.step = bindFunction(this._onCsvData, this); - config2.complete = bindFunction(this._onCsvComplete, this); - ChunkStreamer.call(this, config2); - this._nextChunk = function() { - if (writeStreamHasFinished && parseCallbackQueue.length === 1) { - this._finished = true; - } - if (parseCallbackQueue.length) { - parseCallbackQueue.shift()(); - } else { - parseOnWrite = true; - } - }; - this._addToParseQueue = function(chunk, callback) { - parseCallbackQueue.push(bindFunction(function() { - this.parseChunk(typeof chunk === "string" ? chunk : chunk.toString(config2.encoding)); - if (isFunction(callback)) { - return callback(); - } - }, this)); - if (parseOnWrite) { - parseOnWrite = false; - this._nextChunk(); - } - }; - this._onRead = function() { - if (this._handle.paused()) { - this._handle.resume(); - } - }; - this._onWrite = function(chunk, encoding, callback) { - this._addToParseQueue(chunk, callback); - }; - this._onWriteComplete = function() { - writeStreamHasFinished = true; - this._addToParseQueue(""); - }; - this.getStream = function() { - return stream3; - }; - stream3 = new Duplex({ - readableObjectMode: true, - decodeStrings: false, - read: bindFunction(this._onRead, this), - write: bindFunction(this._onWrite, this) - }); - stream3.once("finish", bindFunction(this._onWriteComplete, this)); - } - if (typeof PAPA_BROWSER_CONTEXT === "undefined") { - DuplexStreamStreamer.prototype = Object.create(ChunkStreamer.prototype); - DuplexStreamStreamer.prototype.constructor = DuplexStreamStreamer; - } - function ParserHandle(_config) { - var MAX_FLOAT = Math.pow(2, 53); - var MIN_FLOAT = -MAX_FLOAT; - var FLOAT = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/; - var ISO_DATE = /^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/; - var self2 = this; - var _stepCounter = 0; - var _rowCounter = 0; - var _input; - var _parser; - var _paused = false; - var _aborted = false; - var _delimiterError; - var _fields = []; - var _results = { - data: [], - errors: [], - meta: {} - }; - if (isFunction(_config.step)) { - var userStep = _config.step; - _config.step = function(results) { - _results = results; - if (needsHeaderRow()) - processResults(); - else { - processResults(); - if (_results.data.length === 0) - return; - _stepCounter += results.data.length; - if (_config.preview && _stepCounter > _config.preview) - _parser.abort(); - else { - _results.data = _results.data[0]; - userStep(_results, self2); - } - } - }; - } - this.parse = function(input, baseIndex, ignoreLastRow) { - var quoteChar = _config.quoteChar || '"'; - if (!_config.newline) - _config.newline = this.guessLineEndings(input, quoteChar); - _delimiterError = false; - if (!_config.delimiter) { - var delimGuess = guessDelimiter(input, _config.newline, _config.skipEmptyLines, _config.comments, _config.delimitersToGuess); - if (delimGuess.successful) - _config.delimiter = delimGuess.bestDelimiter; - else { - _delimiterError = true; - _config.delimiter = Papa.DefaultDelimiter; - } - _results.meta.delimiter = _config.delimiter; - } else if (isFunction(_config.delimiter)) { - _config.delimiter = _config.delimiter(input); - _results.meta.delimiter = _config.delimiter; - } - var parserConfig = copy(_config); - if (_config.preview && _config.header) - parserConfig.preview++; - _input = input; - _parser = new Parser(parserConfig); - _results = _parser.parse(_input, baseIndex, ignoreLastRow); - processResults(); - return _paused ? { meta: { paused: true } } : _results || { meta: { paused: false } }; - }; - this.paused = function() { - return _paused; - }; - this.pause = function() { - _paused = true; - _parser.abort(); - _input = isFunction(_config.chunk) ? "" : _input.substring(_parser.getCharIndex()); - }; - this.resume = function() { - if (self2.streamer._halted) { - _paused = false; - self2.streamer.parseChunk(_input, true); - } else { - setTimeout(self2.resume, 3); - } - }; - this.aborted = function() { - return _aborted; - }; - this.abort = function() { - _aborted = true; - _parser.abort(); - _results.meta.aborted = true; - if (isFunction(_config.complete)) - _config.complete(_results); - _input = ""; - }; - this.guessLineEndings = function(input, quoteChar) { - input = input.substring(0, 1024 * 1024); - var re = new RegExp(escapeRegExp(quoteChar) + "([^]*?)" + escapeRegExp(quoteChar), "gm"); - input = input.replace(re, ""); - var r = input.split("\r"); - var n = input.split(` -`); - var nAppearsFirst = n.length > 1 && n[0].length < r[0].length; - if (r.length === 1 || nAppearsFirst) - return ` -`; - var numWithN = 0; - for (var i = 0;i < r.length; i++) { - if (r[i][0] === ` -`) - numWithN++; - } - return numWithN >= r.length / 2 ? `\r -` : "\r"; - }; - function testEmptyLine(s2) { - return _config.skipEmptyLines === "greedy" ? s2.join("").trim() === "" : s2.length === 1 && s2[0].length === 0; - } - function testFloat(s2) { - if (FLOAT.test(s2)) { - var floatValue = parseFloat(s2); - if (floatValue > MIN_FLOAT && floatValue < MAX_FLOAT) { - return true; - } - } - return false; - } - function processResults() { - if (_results && _delimiterError) { - addError("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + Papa.DefaultDelimiter + "'"); - _delimiterError = false; - } - if (_config.skipEmptyLines) { - _results.data = _results.data.filter(function(d) { - return !testEmptyLine(d); - }); - } - if (needsHeaderRow()) - fillHeaderFields(); - return applyHeaderAndDynamicTypingAndTransformation(); - } - function needsHeaderRow() { - return _config.header && _fields.length === 0; - } - function fillHeaderFields() { - if (!_results) - return; - function addHeader(header, i2) { - if (isFunction(_config.transformHeader)) - header = _config.transformHeader(header, i2); - _fields.push(header); - } - if (Array.isArray(_results.data[0])) { - for (var i = 0;needsHeaderRow() && i < _results.data.length; i++) - _results.data[i].forEach(addHeader); - _results.data.splice(0, 1); - } else - _results.data.forEach(addHeader); - } - function shouldApplyDynamicTyping(field) { - if (_config.dynamicTypingFunction && _config.dynamicTyping[field] === undefined) { - _config.dynamicTyping[field] = _config.dynamicTypingFunction(field); - } - return (_config.dynamicTyping[field] || _config.dynamicTyping) === true; - } - function parseDynamic(field, value) { - if (shouldApplyDynamicTyping(field)) { - if (value === "true" || value === "TRUE") - return true; - else if (value === "false" || value === "FALSE") - return false; - else if (testFloat(value)) - return parseFloat(value); - else if (ISO_DATE.test(value)) - return new Date(value); - else - return value === "" ? null : value; - } - return value; - } - function applyHeaderAndDynamicTypingAndTransformation() { - if (!_results || !_config.header && !_config.dynamicTyping && !_config.transform) - return _results; - function processRow(rowSource, i) { - var row = _config.header ? {} : []; - var j; - for (j = 0;j < rowSource.length; j++) { - var field = j; - var value = rowSource[j]; - if (_config.header) - field = j >= _fields.length ? "__parsed_extra" : _fields[j]; - if (_config.transform) - value = _config.transform(value, field); - value = parseDynamic(field, value); - if (field === "__parsed_extra") { - row[field] = row[field] || []; - row[field].push(value); - } else - row[field] = value; - } - if (_config.header) { - if (j > _fields.length) - addError("FieldMismatch", "TooManyFields", "Too many fields: expected " + _fields.length + " fields but parsed " + j, _rowCounter + i); - else if (j < _fields.length) - addError("FieldMismatch", "TooFewFields", "Too few fields: expected " + _fields.length + " fields but parsed " + j, _rowCounter + i); - } - return row; - } - var incrementBy = 1; - if (!_results.data.length || Array.isArray(_results.data[0])) { - _results.data = _results.data.map(processRow); - incrementBy = _results.data.length; - } else - _results.data = processRow(_results.data, 0); - if (_config.header && _results.meta) - _results.meta.fields = _fields; - _rowCounter += incrementBy; - return _results; - } - function guessDelimiter(input, newline, skipEmptyLines, comments, delimitersToGuess) { - var bestDelim, bestDelta, fieldCountPrevRow, maxFieldCount; - delimitersToGuess = delimitersToGuess || [",", "\t", "|", ";", Papa.RECORD_SEP, Papa.UNIT_SEP]; - for (var i = 0;i < delimitersToGuess.length; i++) { - var delim = delimitersToGuess[i]; - var delta = 0, avgFieldCount = 0, emptyLinesCount = 0; - fieldCountPrevRow = undefined; - var preview = new Parser({ - comments, - delimiter: delim, - newline, - preview: 10 - }).parse(input); - for (var j = 0;j < preview.data.length; j++) { - if (skipEmptyLines && testEmptyLine(preview.data[j])) { - emptyLinesCount++; - continue; - } - var fieldCount = preview.data[j].length; - avgFieldCount += fieldCount; - if (typeof fieldCountPrevRow === "undefined") { - fieldCountPrevRow = fieldCount; - continue; - } else if (fieldCount > 0) { - delta += Math.abs(fieldCount - fieldCountPrevRow); - fieldCountPrevRow = fieldCount; - } - } - if (preview.data.length > 0) - avgFieldCount /= preview.data.length - emptyLinesCount; - if ((typeof bestDelta === "undefined" || delta <= bestDelta) && (typeof maxFieldCount === "undefined" || avgFieldCount > maxFieldCount) && avgFieldCount > 1.99) { - bestDelta = delta; - bestDelim = delim; - maxFieldCount = avgFieldCount; - } - } - _config.delimiter = bestDelim; - return { - successful: !!bestDelim, - bestDelimiter: bestDelim - }; - } - function addError(type, code, msg, row) { - var error48 = { - type, - code, - message: msg - }; - if (row !== undefined) { - error48.row = row; - } - _results.errors.push(error48); - } - } - function escapeRegExp(string5) { - return string5.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - } - function Parser(config2) { - config2 = config2 || {}; - var delim = config2.delimiter; - var newline = config2.newline; - var comments = config2.comments; - var step = config2.step; - var preview = config2.preview; - var fastMode = config2.fastMode; - var quoteChar; - var renamedHeaders = null; - var headerParsed = false; - if (config2.quoteChar === undefined || config2.quoteChar === null) { - quoteChar = '"'; - } else { - quoteChar = config2.quoteChar; - } - var escapeChar = quoteChar; - if (config2.escapeChar !== undefined) { - escapeChar = config2.escapeChar; - } - if (typeof delim !== "string" || Papa.BAD_DELIMITERS.indexOf(delim) > -1) - delim = ","; - if (comments === delim) - throw new Error("Comment character same as delimiter"); - else if (comments === true) - comments = "#"; - else if (typeof comments !== "string" || Papa.BAD_DELIMITERS.indexOf(comments) > -1) - comments = false; - if (newline !== ` -` && newline !== "\r" && newline !== `\r -`) - newline = ` -`; - var cursor = 0; - var aborted2 = false; - this.parse = function(input, baseIndex, ignoreLastRow) { - if (typeof input !== "string") - throw new Error("Input must be a string"); - var inputLen = input.length, delimLen = delim.length, newlineLen = newline.length, commentsLen = comments.length; - var stepIsFunction = isFunction(step); - cursor = 0; - var data = [], errors3 = [], row = [], lastCursor = 0; - if (!input) - return returnable(); - if (fastMode || fastMode !== false && input.indexOf(quoteChar) === -1) { - var rows = input.split(newline); - for (var i = 0;i < rows.length; i++) { - row = rows[i]; - cursor += row.length; - if (i !== rows.length - 1) - cursor += newline.length; - else if (ignoreLastRow) - return returnable(); - if (comments && row.substring(0, commentsLen) === comments) - continue; - if (stepIsFunction) { - data = []; - pushRow(row.split(delim)); - doStep(); - if (aborted2) - return returnable(); - } else - pushRow(row.split(delim)); - if (preview && i >= preview) { - data = data.slice(0, preview); - return returnable(true); - } - } - return returnable(); - } - var nextDelim = input.indexOf(delim, cursor); - var nextNewline = input.indexOf(newline, cursor); - var quoteCharRegex = new RegExp(escapeRegExp(escapeChar) + escapeRegExp(quoteChar), "g"); - var quoteSearch = input.indexOf(quoteChar, cursor); - for (;; ) { - if (input[cursor] === quoteChar) { - quoteSearch = cursor; - cursor++; - for (;; ) { - quoteSearch = input.indexOf(quoteChar, quoteSearch + 1); - if (quoteSearch === -1) { - if (!ignoreLastRow) { - errors3.push({ - type: "Quotes", - code: "MissingQuotes", - message: "Quoted field unterminated", - row: data.length, - index: cursor - }); - } - return finish(); - } - if (quoteSearch === inputLen - 1) { - var value = input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar); - return finish(value); - } - if (quoteChar === escapeChar && input[quoteSearch + 1] === escapeChar) { - quoteSearch++; - continue; - } - if (quoteChar !== escapeChar && quoteSearch !== 0 && input[quoteSearch - 1] === escapeChar) { - continue; - } - if (nextDelim !== -1 && nextDelim < quoteSearch + 1) { - nextDelim = input.indexOf(delim, quoteSearch + 1); - } - if (nextNewline !== -1 && nextNewline < quoteSearch + 1) { - nextNewline = input.indexOf(newline, quoteSearch + 1); - } - var checkUpTo = nextNewline === -1 ? nextDelim : Math.min(nextDelim, nextNewline); - var spacesBetweenQuoteAndDelimiter = extraSpaces(checkUpTo); - if (input.substr(quoteSearch + 1 + spacesBetweenQuoteAndDelimiter, delimLen) === delim) { - row.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar)); - cursor = quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen; - if (input[quoteSearch + 1 + spacesBetweenQuoteAndDelimiter + delimLen] !== quoteChar) { - quoteSearch = input.indexOf(quoteChar, cursor); - } - nextDelim = input.indexOf(delim, cursor); - nextNewline = input.indexOf(newline, cursor); - break; - } - var spacesBetweenQuoteAndNewLine = extraSpaces(nextNewline); - if (input.substring(quoteSearch + 1 + spacesBetweenQuoteAndNewLine, quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen) === newline) { - row.push(input.substring(cursor, quoteSearch).replace(quoteCharRegex, quoteChar)); - saveRow(quoteSearch + 1 + spacesBetweenQuoteAndNewLine + newlineLen); - nextDelim = input.indexOf(delim, cursor); - quoteSearch = input.indexOf(quoteChar, cursor); - if (stepIsFunction) { - doStep(); - if (aborted2) - return returnable(); - } - if (preview && data.length >= preview) - return returnable(true); - break; - } - errors3.push({ - type: "Quotes", - code: "InvalidQuotes", - message: "Trailing quote on quoted field is malformed", - row: data.length, - index: cursor - }); - quoteSearch++; - continue; - } - continue; - } - if (comments && row.length === 0 && input.substring(cursor, cursor + commentsLen) === comments) { - if (nextNewline === -1) - return returnable(); - cursor = nextNewline + newlineLen; - nextNewline = input.indexOf(newline, cursor); - nextDelim = input.indexOf(delim, cursor); - continue; - } - if (nextDelim !== -1 && (nextDelim < nextNewline || nextNewline === -1)) { - row.push(input.substring(cursor, nextDelim)); - cursor = nextDelim + delimLen; - nextDelim = input.indexOf(delim, cursor); - continue; - } - if (nextNewline !== -1) { - row.push(input.substring(cursor, nextNewline)); - saveRow(nextNewline + newlineLen); - if (stepIsFunction) { - doStep(); - if (aborted2) - return returnable(); - } - if (preview && data.length >= preview) - return returnable(true); - continue; - } - break; - } - return finish(); - function pushRow(row2) { - data.push(row2); - lastCursor = cursor; - } - function extraSpaces(index) { - var spaceLength = 0; - if (index !== -1) { - var textBetweenClosingQuoteAndIndex = input.substring(quoteSearch + 1, index); - if (textBetweenClosingQuoteAndIndex && textBetweenClosingQuoteAndIndex.trim() === "") { - spaceLength = textBetweenClosingQuoteAndIndex.length; - } - } - return spaceLength; - } - function finish(value2) { - if (ignoreLastRow) - return returnable(); - if (typeof value2 === "undefined") - value2 = input.substring(cursor); - row.push(value2); - cursor = inputLen; - pushRow(row); - if (stepIsFunction) - doStep(); - return returnable(); - } - function saveRow(newCursor) { - cursor = newCursor; - pushRow(row); - row = []; - nextNewline = input.indexOf(newline, cursor); - } - function returnable(stopped) { - if (config2.header && !baseIndex && data.length && !headerParsed) { - const result = data[0]; - const headerCount = Object.create(null); - const usedHeaders = new Set(result); - let duplicateHeaders = false; - for (let i2 = 0;i2 < result.length; i2++) { - let header = result[i2]; - if (isFunction(config2.transformHeader)) - header = config2.transformHeader(header, i2); - if (!headerCount[header]) { - headerCount[header] = 1; - result[i2] = header; - } else { - let newHeader; - let suffixCount = headerCount[header]; - do { - newHeader = `${header}_${suffixCount}`; - suffixCount++; - } while (usedHeaders.has(newHeader)); - usedHeaders.add(newHeader); - result[i2] = newHeader; - headerCount[header]++; - duplicateHeaders = true; - if (renamedHeaders === null) { - renamedHeaders = {}; - } - renamedHeaders[newHeader] = header; - } - usedHeaders.add(header); - } - if (duplicateHeaders) { - console.warn("Duplicate headers found and renamed."); - } - headerParsed = true; - } - return { - data, - errors: errors3, - meta: { - delimiter: delim, - linebreak: newline, - aborted: aborted2, - truncated: !!stopped, - cursor: lastCursor + (baseIndex || 0), - renamedHeaders - } - }; - } - function doStep() { - step(returnable()); - data = []; - errors3 = []; - } - }; - this.abort = function() { - aborted2 = true; - }; - this.getCharIndex = function() { - return cursor; - }; - } - function newWorker() { - if (!Papa.WORKERS_SUPPORTED) - return false; - var workerUrl = getWorkerBlob(); - var w = new global2.Worker(workerUrl); - w.onmessage = mainThreadReceivedMessage; - w.id = workerIdCounter++; - workers[w.id] = w; - return w; - } - function mainThreadReceivedMessage(e) { - var msg = e.data; - var worker = workers[msg.workerId]; - var aborted2 = false; - if (msg.error) - worker.userError(msg.error, msg.file); - else if (msg.results && msg.results.data) { - var abort = function() { - aborted2 = true; - completeWorker(msg.workerId, { data: [], errors: [], meta: { aborted: true } }); - }; - var handle = { - abort, - pause: notImplemented, - resume: notImplemented - }; - if (isFunction(worker.userStep)) { - for (var i = 0;i < msg.results.data.length; i++) { - worker.userStep({ - data: msg.results.data[i], - errors: msg.results.errors, - meta: msg.results.meta - }, handle); - if (aborted2) - break; - } - delete msg.results; - } else if (isFunction(worker.userChunk)) { - worker.userChunk(msg.results, handle, msg.file); - delete msg.results; - } - } - if (msg.finished && !aborted2) - completeWorker(msg.workerId, msg.results); - } - function completeWorker(workerId, results) { - var worker = workers[workerId]; - if (isFunction(worker.userComplete)) - worker.userComplete(results); - worker.terminate(); - delete workers[workerId]; - } - function notImplemented() { - throw new Error("Not implemented."); - } - function workerThreadReceivedMessage(e) { - var msg = e.data; - if (typeof Papa.WORKER_ID === "undefined" && msg) - Papa.WORKER_ID = msg.workerId; - if (typeof msg.input === "string") { - global2.postMessage({ - workerId: Papa.WORKER_ID, - results: Papa.parse(msg.input, msg.config), - finished: true - }); - } else if (global2.File && msg.input instanceof File || msg.input instanceof Object) { - var results = Papa.parse(msg.input, msg.config); - if (results) - global2.postMessage({ - workerId: Papa.WORKER_ID, - results, - finished: true - }); - } - } - function copy(obj) { - if (typeof obj !== "object" || obj === null) - return obj; - var cpy = Array.isArray(obj) ? [] : {}; - for (var key in obj) - cpy[key] = copy(obj[key]); - return cpy; - } - function bindFunction(f, self2) { - return function() { - f.apply(self2, arguments); - }; - } - function isFunction(func) { - return typeof func === "function"; - } - return Papa; - }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/suppress-tracing.js -var require_suppress_tracing3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isTracingSuppressed = exports.unsuppressTracing = exports.suppressTracing = undefined; - var api_1 = require_src(); - var SUPPRESS_TRACING_KEY = (0, api_1.createContextKey)("OpenTelemetry SDK Context Key SUPPRESS_TRACING"); - function suppressTracing2(context8) { - return context8.setValue(SUPPRESS_TRACING_KEY, true); - } - exports.suppressTracing = suppressTracing2; - function unsuppressTracing(context8) { - return context8.deleteValue(SUPPRESS_TRACING_KEY); - } - exports.unsuppressTracing = unsuppressTracing; - function isTracingSuppressed(context8) { - return context8.getValue(SUPPRESS_TRACING_KEY) === true; - } - exports.isTracingSuppressed = isTracingSuppressed; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/constants.js -var require_constants11 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BAGGAGE_MAX_TOTAL_LENGTH = exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = exports.BAGGAGE_MAX_NAME_VALUE_PAIRS = exports.BAGGAGE_HEADER = exports.BAGGAGE_ITEMS_SEPARATOR = exports.BAGGAGE_PROPERTIES_SEPARATOR = exports.BAGGAGE_KEY_PAIR_SEPARATOR = undefined; - exports.BAGGAGE_KEY_PAIR_SEPARATOR = "="; - exports.BAGGAGE_PROPERTIES_SEPARATOR = ";"; - exports.BAGGAGE_ITEMS_SEPARATOR = ","; - exports.BAGGAGE_HEADER = "baggage"; - exports.BAGGAGE_MAX_NAME_VALUE_PAIRS = 180; - exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096; - exports.BAGGAGE_MAX_TOTAL_LENGTH = 8192; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/utils.js -var require_utils45 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseKeyPairsIntoRecord = exports.parsePairKeyValue = exports.getKeyPairs = exports.serializeKeyPairs = undefined; - var api_1 = require_src(); - var constants_1 = require_constants11(); - function serializeKeyPairs(keyPairs) { - return keyPairs.reduce((hValue, current) => { - const value = `${hValue}${hValue !== "" ? constants_1.BAGGAGE_ITEMS_SEPARATOR : ""}${current}`; - return value.length > constants_1.BAGGAGE_MAX_TOTAL_LENGTH ? hValue : value; - }, ""); - } - exports.serializeKeyPairs = serializeKeyPairs; - function getKeyPairs(baggage) { - return baggage.getAllEntries().map(([key, value]) => { - let entry = `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`; - if (value.metadata !== undefined) { - entry += constants_1.BAGGAGE_PROPERTIES_SEPARATOR + value.metadata.toString(); - } - return entry; - }); - } - exports.getKeyPairs = getKeyPairs; - function parsePairKeyValue(entry) { - const valueProps = entry.split(constants_1.BAGGAGE_PROPERTIES_SEPARATOR); - if (valueProps.length <= 0) - return; - const keyPairPart = valueProps.shift(); - if (!keyPairPart) - return; - const separatorIndex = keyPairPart.indexOf(constants_1.BAGGAGE_KEY_PAIR_SEPARATOR); - if (separatorIndex <= 0) - return; - const key = decodeURIComponent(keyPairPart.substring(0, separatorIndex).trim()); - const value = decodeURIComponent(keyPairPart.substring(separatorIndex + 1).trim()); - let metadata; - if (valueProps.length > 0) { - metadata = (0, api_1.baggageEntryMetadataFromString)(valueProps.join(constants_1.BAGGAGE_PROPERTIES_SEPARATOR)); - } - return { key, value, metadata }; - } - exports.parsePairKeyValue = parsePairKeyValue; - function parseKeyPairsIntoRecord(value) { - const result = {}; - if (typeof value === "string" && value.length > 0) { - value.split(constants_1.BAGGAGE_ITEMS_SEPARATOR).forEach((entry) => { - const keyPair = parsePairKeyValue(entry); - if (keyPair !== undefined && keyPair.value.length > 0) { - result[keyPair.key] = keyPair.value; - } - }); - } - return result; - } - exports.parseKeyPairsIntoRecord = parseKeyPairsIntoRecord; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/baggage/propagation/W3CBaggagePropagator.js -var require_W3CBaggagePropagator3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.W3CBaggagePropagator = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing3(); - var constants_1 = require_constants11(); - var utils_1 = require_utils45(); - - class W3CBaggagePropagator { - inject(context8, carrier, setter) { - const baggage = api_1.propagation.getBaggage(context8); - if (!baggage || (0, suppress_tracing_1.isTracingSuppressed)(context8)) - return; - const keyPairs = (0, utils_1.getKeyPairs)(baggage).filter((pair) => { - return pair.length <= constants_1.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS; - }).slice(0, constants_1.BAGGAGE_MAX_NAME_VALUE_PAIRS); - const headerValue = (0, utils_1.serializeKeyPairs)(keyPairs); - if (headerValue.length > 0) { - setter.set(carrier, constants_1.BAGGAGE_HEADER, headerValue); - } - } - extract(context8, carrier, getter) { - const headerValue = getter.get(carrier, constants_1.BAGGAGE_HEADER); - const baggageString = Array.isArray(headerValue) ? headerValue.join(constants_1.BAGGAGE_ITEMS_SEPARATOR) : headerValue; - if (!baggageString) - return context8; - const baggage = {}; - if (baggageString.length === 0) { - return context8; - } - const pairs = baggageString.split(constants_1.BAGGAGE_ITEMS_SEPARATOR); - pairs.forEach((entry) => { - const keyPair = (0, utils_1.parsePairKeyValue)(entry); - if (keyPair) { - const baggageEntry = { value: keyPair.value }; - if (keyPair.metadata) { - baggageEntry.metadata = keyPair.metadata; - } - baggage[keyPair.key] = baggageEntry; - } - }); - if (Object.entries(baggage).length === 0) { - return context8; - } - return api_1.propagation.setBaggage(context8, api_1.propagation.createBaggage(baggage)); - } - fields() { - return [constants_1.BAGGAGE_HEADER]; - } - } - exports.W3CBaggagePropagator = W3CBaggagePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/anchored-clock.js -var require_anchored_clock3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AnchoredClock = undefined; - - class AnchoredClock { - _monotonicClock; - _epochMillis; - _performanceMillis; - constructor(systemClock, monotonicClock) { - this._monotonicClock = monotonicClock; - this._epochMillis = systemClock.now(); - this._performanceMillis = monotonicClock.now(); - } - now() { - const delta = this._monotonicClock.now() - this._performanceMillis; - return this._epochMillis + delta; - } - } - exports.AnchoredClock = AnchoredClock; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/attributes.js -var require_attributes3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isAttributeValue = exports.isAttributeKey = exports.sanitizeAttributes = undefined; - var api_1 = require_src(); - function sanitizeAttributes(attributes) { - const out = {}; - if (typeof attributes !== "object" || attributes == null) { - return out; - } - for (const [key, val] of Object.entries(attributes)) { - if (!isAttributeKey(key)) { - api_1.diag.warn(`Invalid attribute key: ${key}`); - continue; - } - if (!isAttributeValue(val)) { - api_1.diag.warn(`Invalid attribute value set for key: ${key}`); - continue; - } - if (Array.isArray(val)) { - out[key] = val.slice(); - } else { - out[key] = val; - } - } - return out; - } - exports.sanitizeAttributes = sanitizeAttributes; - function isAttributeKey(key) { - return typeof key === "string" && key.length > 0; - } - exports.isAttributeKey = isAttributeKey; - function isAttributeValue(val) { - if (val == null) { - return true; - } - if (Array.isArray(val)) { - return isHomogeneousAttributeValueArray(val); - } - return isValidPrimitiveAttributeValue(val); - } - exports.isAttributeValue = isAttributeValue; - function isHomogeneousAttributeValueArray(arr) { - let type; - for (const element of arr) { - if (element == null) - continue; - if (!type) { - if (isValidPrimitiveAttributeValue(element)) { - type = typeof element; - continue; - } - return false; - } - if (typeof element === type) { - continue; - } - return false; - } - return true; - } - function isValidPrimitiveAttributeValue(val) { - switch (typeof val) { - case "number": - case "boolean": - case "string": - return true; - } - return false; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/logging-error-handler.js -var require_logging_error_handler3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.loggingErrorHandler = undefined; - var api_1 = require_src(); - function loggingErrorHandler() { - return (ex) => { - api_1.diag.error(stringifyException(ex)); - }; - } - exports.loggingErrorHandler = loggingErrorHandler; - function stringifyException(ex) { - if (typeof ex === "string") { - return ex; - } else { - return JSON.stringify(flattenException(ex)); - } - } - function flattenException(ex) { - const result = {}; - let current = ex; - while (current !== null) { - Object.getOwnPropertyNames(current).forEach((propertyName) => { - if (result[propertyName]) - return; - const value = current[propertyName]; - if (value) { - result[propertyName] = String(value); - } - }); - current = Object.getPrototypeOf(current); - } - return result; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/global-error-handler.js -var require_global_error_handler3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.globalErrorHandler = exports.setGlobalErrorHandler = undefined; - var logging_error_handler_1 = require_logging_error_handler3(); - var delegateHandler = (0, logging_error_handler_1.loggingErrorHandler)(); - function setGlobalErrorHandler(handler) { - delegateHandler = handler; - } - exports.setGlobalErrorHandler = setGlobalErrorHandler; - function globalErrorHandler4(ex) { - try { - delegateHandler(ex); - } catch {} - } - exports.globalErrorHandler = globalErrorHandler4; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/environment.js -var require_environment4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getStringListFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = exports.getNumberFromEnv = undefined; - var api_1 = require_src(); - var util_1 = __require("util"); - function getNumberFromEnv2(key) { - const raw2 = process.env[key]; - if (raw2 == null || raw2.trim() === "") { - return; - } - const value = Number(raw2); - if (isNaN(value)) { - api_1.diag.warn(`Unknown value ${(0, util_1.inspect)(raw2)} for ${key}, expected a number, using defaults`); - return; - } - return value; - } - exports.getNumberFromEnv = getNumberFromEnv2; - function getStringFromEnv(key) { - const raw2 = process.env[key]; - if (raw2 == null || raw2.trim() === "") { - return; - } - return raw2; - } - exports.getStringFromEnv = getStringFromEnv; - function getBooleanFromEnv(key) { - const raw2 = process.env[key]?.trim().toLowerCase(); - if (raw2 == null || raw2 === "") { - return false; - } - if (raw2 === "true") { - return true; - } else if (raw2 === "false") { - return false; - } else { - api_1.diag.warn(`Unknown value ${(0, util_1.inspect)(raw2)} for ${key}, expected 'true' or 'false', falling back to 'false' (default)`); - return false; - } - } - exports.getBooleanFromEnv = getBooleanFromEnv; - function getStringListFromEnv(key) { - return getStringFromEnv(key)?.split(",").map((v) => v.trim()).filter((s2) => s2 !== ""); - } - exports.getStringListFromEnv = getStringListFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/globalThis.js -var require_globalThis5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - exports._globalThis = typeof globalThis === "object" ? globalThis : global; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/performance.js -var require_performance2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.otperformance = undefined; - var perf_hooks_1 = __require("perf_hooks"); - exports.otperformance = perf_hooks_1.performance; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/version.js -var require_version49 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "2.0.1"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/semconv.js -var require_semconv34 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_PROCESS_RUNTIME_NAME = undefined; - exports.ATTR_PROCESS_RUNTIME_NAME = "process.runtime.name"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/sdk-info.js -var require_sdk_info3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SDK_INFO = undefined; - var version_1 = require_version49(); - var semantic_conventions_1 = require_src3(); - var semconv_1 = require_semconv34(); - exports.SDK_INFO = { - [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: "opentelemetry", - [semconv_1.ATTR_PROCESS_RUNTIME_NAME]: "node", - [semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE]: semantic_conventions_1.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS, - [semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION]: version_1.VERSION - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/timer-util.js -var require_timer_util3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.unrefTimer = undefined; - function unrefTimer(timer) { - timer.unref(); - } - exports.unrefTimer = unrefTimer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/node/index.js -var require_node19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.unrefTimer = exports.SDK_INFO = exports.otperformance = exports._globalThis = exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = undefined; - var environment_1 = require_environment4(); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return environment_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return environment_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return environment_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return environment_1.getStringListFromEnv; - } }); - var globalThis_1 = require_globalThis5(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return globalThis_1._globalThis; - } }); - var performance_1 = require_performance2(); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return performance_1.otperformance; - } }); - var sdk_info_1 = require_sdk_info3(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return sdk_info_1.SDK_INFO; - } }); - var timer_util_1 = require_timer_util3(); - Object.defineProperty(exports, "unrefTimer", { enumerable: true, get: function() { - return timer_util_1.unrefTimer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/platform/index.js -var require_platform18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getStringFromEnv = exports.getBooleanFromEnv = exports.unrefTimer = exports.otperformance = exports._globalThis = exports.SDK_INFO = undefined; - var node_1 = require_node19(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return node_1.SDK_INFO; - } }); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return node_1._globalThis; - } }); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return node_1.otperformance; - } }); - Object.defineProperty(exports, "unrefTimer", { enumerable: true, get: function() { - return node_1.unrefTimer; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return node_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return node_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return node_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return node_1.getStringListFromEnv; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/common/time.js -var require_time3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addHrTimes = exports.isTimeInput = exports.isTimeInputHrTime = exports.hrTimeToMicroseconds = exports.hrTimeToMilliseconds = exports.hrTimeToNanoseconds = exports.hrTimeToTimeStamp = exports.hrTimeDuration = exports.timeInputToHrTime = exports.hrTime = exports.getTimeOrigin = exports.millisToHrTime = undefined; - var platform_1 = require_platform18(); - var NANOSECOND_DIGITS = 9; - var NANOSECOND_DIGITS_IN_MILLIS = 6; - var MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS); - var SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS); - function millisToHrTime4(epochMillis) { - const epochSeconds = epochMillis / 1000; - const seconds = Math.trunc(epochSeconds); - const nanos = Math.round(epochMillis % 1000 * MILLISECONDS_TO_NANOSECONDS); - return [seconds, nanos]; - } - exports.millisToHrTime = millisToHrTime4; - function getTimeOrigin() { - let timeOrigin = platform_1.otperformance.timeOrigin; - if (typeof timeOrigin !== "number") { - const perf = platform_1.otperformance; - timeOrigin = perf.timing && perf.timing.fetchStart; - } - return timeOrigin; - } - exports.getTimeOrigin = getTimeOrigin; - function hrTime(performanceNow) { - const timeOrigin = millisToHrTime4(getTimeOrigin()); - const now2 = millisToHrTime4(typeof performanceNow === "number" ? performanceNow : platform_1.otperformance.now()); - return addHrTimes(timeOrigin, now2); - } - exports.hrTime = hrTime; - function timeInputToHrTime(time3) { - if (isTimeInputHrTime(time3)) { - return time3; - } else if (typeof time3 === "number") { - if (time3 < getTimeOrigin()) { - return hrTime(time3); - } else { - return millisToHrTime4(time3); - } - } else if (time3 instanceof Date) { - return millisToHrTime4(time3.getTime()); - } else { - throw TypeError("Invalid input type"); - } - } - exports.timeInputToHrTime = timeInputToHrTime; - function hrTimeDuration(startTime, endTime) { - let seconds = endTime[0] - startTime[0]; - let nanos = endTime[1] - startTime[1]; - if (nanos < 0) { - seconds -= 1; - nanos += SECOND_TO_NANOSECONDS; - } - return [seconds, nanos]; - } - exports.hrTimeDuration = hrTimeDuration; - function hrTimeToTimeStamp(time3) { - const precision = NANOSECOND_DIGITS; - const tmp = `${"0".repeat(precision)}${time3[1]}Z`; - const nanoString = tmp.substring(tmp.length - precision - 1); - const date5 = new Date(time3[0] * 1000).toISOString(); - return date5.replace("000Z", nanoString); - } - exports.hrTimeToTimeStamp = hrTimeToTimeStamp; - function hrTimeToNanoseconds(time3) { - return time3[0] * SECOND_TO_NANOSECONDS + time3[1]; - } - exports.hrTimeToNanoseconds = hrTimeToNanoseconds; - function hrTimeToMilliseconds(time3) { - return time3[0] * 1000 + time3[1] / 1e6; - } - exports.hrTimeToMilliseconds = hrTimeToMilliseconds; - function hrTimeToMicroseconds2(time3) { - return time3[0] * 1e6 + time3[1] / 1000; - } - exports.hrTimeToMicroseconds = hrTimeToMicroseconds2; - function isTimeInputHrTime(value) { - return Array.isArray(value) && value.length === 2 && typeof value[0] === "number" && typeof value[1] === "number"; - } - exports.isTimeInputHrTime = isTimeInputHrTime; - function isTimeInput(value) { - return isTimeInputHrTime(value) || typeof value === "number" || value instanceof Date; - } - exports.isTimeInput = isTimeInput; - function addHrTimes(time1, time22) { - const out = [time1[0] + time22[0], time1[1] + time22[1]]; - if (out[1] >= SECOND_TO_NANOSECONDS) { - out[1] -= SECOND_TO_NANOSECONDS; - out[0] += 1; - } - return out; - } - exports.addHrTimes = addHrTimes; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/ExportResult.js -var require_ExportResult3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExportResultCode = undefined; - var ExportResultCode4; - (function(ExportResultCode5) { - ExportResultCode5[ExportResultCode5["SUCCESS"] = 0] = "SUCCESS"; - ExportResultCode5[ExportResultCode5["FAILED"] = 1] = "FAILED"; - })(ExportResultCode4 = exports.ExportResultCode || (exports.ExportResultCode = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/propagation/composite.js -var require_composite3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompositePropagator = undefined; - var api_1 = require_src(); - - class CompositePropagator { - _propagators; - _fields; - constructor(config2 = {}) { - this._propagators = config2.propagators ?? []; - this._fields = Array.from(new Set(this._propagators.map((p) => typeof p.fields === "function" ? p.fields() : []).reduce((x, y) => x.concat(y), []))); - } - inject(context8, carrier, setter) { - for (const propagator of this._propagators) { - try { - propagator.inject(context8, carrier, setter); - } catch (err) { - api_1.diag.warn(`Failed to inject with ${propagator.constructor.name}. Err: ${err.message}`); - } - } - } - extract(context8, carrier, getter) { - return this._propagators.reduce((ctx, propagator) => { - try { - return propagator.extract(ctx, carrier, getter); - } catch (err) { - api_1.diag.warn(`Failed to extract with ${propagator.constructor.name}. Err: ${err.message}`); - } - return ctx; - }, context8); - } - fields() { - return this._fields.slice(); - } - } - exports.CompositePropagator = CompositePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/internal/validators.js -var require_validators3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateValue = exports.validateKey = undefined; - var VALID_KEY_CHAR_RANGE = "[_0-9a-z-*/]"; - var VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`; - var VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`; - var VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`); - var VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/; - var INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/; - function validateKey(key) { - return VALID_KEY_REGEX.test(key); - } - exports.validateKey = validateKey; - function validateValue(value) { - return VALID_VALUE_BASE_REGEX.test(value) && !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value); - } - exports.validateValue = validateValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/TraceState.js -var require_TraceState3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceState = undefined; - var validators_1 = require_validators3(); - var MAX_TRACE_STATE_ITEMS = 32; - var MAX_TRACE_STATE_LEN = 512; - var LIST_MEMBERS_SEPARATOR = ","; - var LIST_MEMBER_KEY_VALUE_SPLITTER = "="; - - class TraceState2 { - _internalState = new Map; - constructor(rawTraceState) { - if (rawTraceState) - this._parse(rawTraceState); - } - set(key, value) { - const traceState = this._clone(); - if (traceState._internalState.has(key)) { - traceState._internalState.delete(key); - } - traceState._internalState.set(key, value); - return traceState; - } - unset(key) { - const traceState = this._clone(); - traceState._internalState.delete(key); - return traceState; - } - get(key) { - return this._internalState.get(key); - } - serialize() { - return this._keys().reduce((agg, key) => { - agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + this.get(key)); - return agg; - }, []).join(LIST_MEMBERS_SEPARATOR); - } - _parse(rawTraceState) { - if (rawTraceState.length > MAX_TRACE_STATE_LEN) - return; - this._internalState = rawTraceState.split(LIST_MEMBERS_SEPARATOR).reverse().reduce((agg, part) => { - const listMember = part.trim(); - const i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER); - if (i !== -1) { - const key = listMember.slice(0, i); - const value = listMember.slice(i + 1, part.length); - if ((0, validators_1.validateKey)(key) && (0, validators_1.validateValue)(value)) { - agg.set(key, value); - } else {} - } - return agg; - }, new Map); - if (this._internalState.size > MAX_TRACE_STATE_ITEMS) { - this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, MAX_TRACE_STATE_ITEMS)); - } - } - _keys() { - return Array.from(this._internalState.keys()).reverse(); - } - _clone() { - const traceState = new TraceState2; - traceState._internalState = new Map(this._internalState); - return traceState; - } - } - exports.TraceState = TraceState2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/W3CTraceContextPropagator.js -var require_W3CTraceContextPropagator3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.W3CTraceContextPropagator = exports.parseTraceParent = exports.TRACE_STATE_HEADER = exports.TRACE_PARENT_HEADER = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing3(); - var TraceState_1 = require_TraceState3(); - exports.TRACE_PARENT_HEADER = "traceparent"; - exports.TRACE_STATE_HEADER = "tracestate"; - var VERSION = "00"; - var VERSION_PART = "(?!ff)[\\da-f]{2}"; - var TRACE_ID_PART = "(?![0]{32})[\\da-f]{32}"; - var PARENT_ID_PART = "(?![0]{16})[\\da-f]{16}"; - var FLAGS_PART = "[\\da-f]{2}"; - var TRACE_PARENT_REGEX = new RegExp(`^\\s?(${VERSION_PART})-(${TRACE_ID_PART})-(${PARENT_ID_PART})-(${FLAGS_PART})(-.*)?\\s?$`); - function parseTraceParent(traceParent) { - const match2 = TRACE_PARENT_REGEX.exec(traceParent); - if (!match2) - return null; - if (match2[1] === "00" && match2[5]) - return null; - return { - traceId: match2[2], - spanId: match2[3], - traceFlags: parseInt(match2[4], 16) - }; - } - exports.parseTraceParent = parseTraceParent; - - class W3CTraceContextPropagator { - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - if (!spanContext || (0, suppress_tracing_1.isTracingSuppressed)(context8) || !(0, api_1.isSpanContextValid)(spanContext)) - return; - const traceParent = `${VERSION}-${spanContext.traceId}-${spanContext.spanId}-0${Number(spanContext.traceFlags || api_1.TraceFlags.NONE).toString(16)}`; - setter.set(carrier, exports.TRACE_PARENT_HEADER, traceParent); - if (spanContext.traceState) { - setter.set(carrier, exports.TRACE_STATE_HEADER, spanContext.traceState.serialize()); - } - } - extract(context8, carrier, getter) { - const traceParentHeader = getter.get(carrier, exports.TRACE_PARENT_HEADER); - if (!traceParentHeader) - return context8; - const traceParent = Array.isArray(traceParentHeader) ? traceParentHeader[0] : traceParentHeader; - if (typeof traceParent !== "string") - return context8; - const spanContext = parseTraceParent(traceParent); - if (!spanContext) - return context8; - spanContext.isRemote = true; - const traceStateHeader = getter.get(carrier, exports.TRACE_STATE_HEADER); - if (traceStateHeader) { - const state = Array.isArray(traceStateHeader) ? traceStateHeader.join(",") : traceStateHeader; - spanContext.traceState = new TraceState_1.TraceState(typeof state === "string" ? state : undefined); - } - return api_1.trace.setSpanContext(context8, spanContext); - } - fields() { - return [exports.TRACE_PARENT_HEADER, exports.TRACE_STATE_HEADER]; - } - } - exports.W3CTraceContextPropagator = W3CTraceContextPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/trace/rpc-metadata.js -var require_rpc_metadata3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getRPCMetadata = exports.deleteRPCMetadata = exports.setRPCMetadata = exports.RPCType = undefined; - var api_1 = require_src(); - var RPC_METADATA_KEY = (0, api_1.createContextKey)("OpenTelemetry SDK Context Key RPC_METADATA"); - var RPCType; - (function(RPCType2) { - RPCType2["HTTP"] = "http"; - })(RPCType = exports.RPCType || (exports.RPCType = {})); - function setRPCMetadata(context8, meta3) { - return context8.setValue(RPC_METADATA_KEY, meta3); - } - exports.setRPCMetadata = setRPCMetadata; - function deleteRPCMetadata(context8) { - return context8.deleteValue(RPC_METADATA_KEY); - } - exports.deleteRPCMetadata = deleteRPCMetadata; - function getRPCMetadata(context8) { - return context8.getValue(RPC_METADATA_KEY); - } - exports.getRPCMetadata = getRPCMetadata; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/lodash.merge.js -var require_lodash_merge3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isPlainObject = undefined; - var objectTag = "[object Object]"; - var nullTag = "[object Null]"; - var undefinedTag = "[object Undefined]"; - var funcProto = Function.prototype; - var funcToString = funcProto.toString; - var objectCtorString = funcToString.call(Object); - var getPrototypeOf = Object.getPrototypeOf; - var objectProto = Object.prototype; - var hasOwnProperty = objectProto.hasOwnProperty; - var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - var nativeObjectToString = objectProto.toString; - function isPlainObject2(value) { - if (!isObjectLike(value) || baseGetTag(value) !== objectTag) { - return false; - } - const proto = getPrototypeOf(value); - if (proto === null) { - return true; - } - const Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) === objectCtorString; - } - exports.isPlainObject = isPlainObject2; - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - function getRawTag(value) { - const isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - let unmasked = false; - try { - value[symToStringTag] = undefined; - unmasked = true; - } catch (e) {} - const result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - function objectToString(value) { - return nativeObjectToString.call(value); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/merge.js -var require_merge3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.merge = undefined; - var lodash_merge_1 = require_lodash_merge3(); - var MAX_LEVEL = 20; - function merge2(...args) { - let result = args.shift(); - const objects = new WeakMap; - while (args.length > 0) { - result = mergeTwoObjects(result, args.shift(), 0, objects); - } - return result; - } - exports.merge = merge2; - function takeValue(value) { - if (isArray(value)) { - return value.slice(); - } - return value; - } - function mergeTwoObjects(one, two, level = 0, objects) { - let result; - if (level > MAX_LEVEL) { - return; - } - level++; - if (isPrimitive(one) || isPrimitive(two) || isFunction(two)) { - result = takeValue(two); - } else if (isArray(one)) { - result = one.slice(); - if (isArray(two)) { - for (let i = 0, j = two.length;i < j; i++) { - result.push(takeValue(two[i])); - } - } else if (isObject2(two)) { - const keys = Object.keys(two); - for (let i = 0, j = keys.length;i < j; i++) { - const key = keys[i]; - result[key] = takeValue(two[key]); - } - } - } else if (isObject2(one)) { - if (isObject2(two)) { - if (!shouldMerge(one, two)) { - return two; - } - result = Object.assign({}, one); - const keys = Object.keys(two); - for (let i = 0, j = keys.length;i < j; i++) { - const key = keys[i]; - const twoValue = two[key]; - if (isPrimitive(twoValue)) { - if (typeof twoValue === "undefined") { - delete result[key]; - } else { - result[key] = twoValue; - } - } else { - const obj1 = result[key]; - const obj2 = twoValue; - if (wasObjectReferenced(one, key, objects) || wasObjectReferenced(two, key, objects)) { - delete result[key]; - } else { - if (isObject2(obj1) && isObject2(obj2)) { - const arr1 = objects.get(obj1) || []; - const arr2 = objects.get(obj2) || []; - arr1.push({ obj: one, key }); - arr2.push({ obj: two, key }); - objects.set(obj1, arr1); - objects.set(obj2, arr2); - } - result[key] = mergeTwoObjects(result[key], twoValue, level, objects); - } - } - } - } else { - result = two; - } - } - return result; - } - function wasObjectReferenced(obj, key, objects) { - const arr = objects.get(obj[key]) || []; - for (let i = 0, j = arr.length;i < j; i++) { - const info = arr[i]; - if (info.key === key && info.obj === obj) { - return true; - } - } - return false; - } - function isArray(value) { - return Array.isArray(value); - } - function isFunction(value) { - return typeof value === "function"; - } - function isObject2(value) { - return !isPrimitive(value) && !isArray(value) && !isFunction(value) && typeof value === "object"; - } - function isPrimitive(value) { - return typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "undefined" || value instanceof Date || value instanceof RegExp || value === null; - } - function shouldMerge(one, two) { - if (!(0, lodash_merge_1.isPlainObject)(one) || !(0, lodash_merge_1.isPlainObject)(two)) { - return false; - } - return true; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/timeout.js -var require_timeout3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.callWithTimeout = exports.TimeoutError = undefined; - - class TimeoutError2 extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, TimeoutError2.prototype); - } - } - exports.TimeoutError = TimeoutError2; - function callWithTimeout2(promise2, timeout) { - let timeoutHandle; - const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) { - timeoutHandle = setTimeout(function timeoutHandler() { - reject(new TimeoutError2("Operation timed out.")); - }, timeout); - }); - return Promise.race([promise2, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle); - return result; - }, (reason) => { - clearTimeout(timeoutHandle); - throw reason; - }); - } - exports.callWithTimeout = callWithTimeout2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/url.js -var require_url3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isUrlIgnored = exports.urlMatches = undefined; - function urlMatches(url2, urlToMatch) { - if (typeof urlToMatch === "string") { - return url2 === urlToMatch; - } else { - return !!url2.match(urlToMatch); - } - } - exports.urlMatches = urlMatches; - function isUrlIgnored(url2, ignoredUrls) { - if (!ignoredUrls) { - return false; - } - for (const ignoreUrl of ignoredUrls) { - if (urlMatches(url2, ignoreUrl)) { - return true; - } - } - return false; - } - exports.isUrlIgnored = isUrlIgnored; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/promise.js -var require_promise3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Deferred = undefined; - - class Deferred { - _promise; - _resolve; - _reject; - constructor() { - this._promise = new Promise((resolve2, reject) => { - this._resolve = resolve2; - this._reject = reject; - }); - } - get promise() { - return this._promise; - } - resolve(val) { - this._resolve(val); - } - reject(err) { - this._reject(err); - } - } - exports.Deferred = Deferred; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/callback.js -var require_callback3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindOnceFuture = undefined; - var promise_1 = require_promise3(); - - class BindOnceFuture3 { - _callback; - _that; - _isCalled = false; - _deferred = new promise_1.Deferred; - constructor(_callback, _that) { - this._callback = _callback; - this._that = _that; - } - get isCalled() { - return this._isCalled; - } - get promise() { - return this._deferred.promise; - } - call(...args) { - if (!this._isCalled) { - this._isCalled = true; - try { - Promise.resolve(this._callback.call(this._that, ...args)).then((val) => this._deferred.resolve(val), (err) => this._deferred.reject(err)); - } catch (err) { - this._deferred.reject(err); - } - } - return this._deferred.promise; - } - } - exports.BindOnceFuture = BindOnceFuture3; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/utils/configuration.js -var require_configuration3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.diagLogLevelFromString = undefined; - var api_1 = require_src(); - var logLevelMap = { - ALL: api_1.DiagLogLevel.ALL, - VERBOSE: api_1.DiagLogLevel.VERBOSE, - DEBUG: api_1.DiagLogLevel.DEBUG, - INFO: api_1.DiagLogLevel.INFO, - WARN: api_1.DiagLogLevel.WARN, - ERROR: api_1.DiagLogLevel.ERROR, - NONE: api_1.DiagLogLevel.NONE - }; - function diagLogLevelFromString(value) { - if (value == null) { - return; - } - const resolvedLogLevel = logLevelMap[value.toUpperCase()]; - if (resolvedLogLevel == null) { - api_1.diag.warn(`Unknown log level "${value}", expected one of ${Object.keys(logLevelMap)}, using default`); - return api_1.DiagLogLevel.INFO; - } - return resolvedLogLevel; - } - exports.diagLogLevelFromString = diagLogLevelFromString; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/internal/exporter.js -var require_exporter3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._export = undefined; - var api_1 = require_src(); - var suppress_tracing_1 = require_suppress_tracing3(); - function _export(exporter, arg) { - return new Promise((resolve2) => { - api_1.context.with((0, suppress_tracing_1.suppressTracing)(api_1.context.active()), () => { - exporter.export(arg, (result) => { - resolve2(result); - }); - }); - }); - } - exports._export = _export; -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/core/build/src/index.js -var require_src89 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.internal = exports.diagLogLevelFromString = exports.BindOnceFuture = exports.urlMatches = exports.isUrlIgnored = exports.callWithTimeout = exports.TimeoutError = exports.merge = exports.TraceState = exports.unsuppressTracing = exports.suppressTracing = exports.isTracingSuppressed = exports.setRPCMetadata = exports.getRPCMetadata = exports.deleteRPCMetadata = exports.RPCType = exports.parseTraceParent = exports.W3CTraceContextPropagator = exports.TRACE_STATE_HEADER = exports.TRACE_PARENT_HEADER = exports.CompositePropagator = exports.unrefTimer = exports.otperformance = exports.getStringListFromEnv = exports.getNumberFromEnv = exports.getBooleanFromEnv = exports.getStringFromEnv = exports._globalThis = exports.SDK_INFO = exports.parseKeyPairsIntoRecord = exports.ExportResultCode = exports.timeInputToHrTime = exports.millisToHrTime = exports.isTimeInputHrTime = exports.isTimeInput = exports.hrTimeToTimeStamp = exports.hrTimeToNanoseconds = exports.hrTimeToMilliseconds = exports.hrTimeToMicroseconds = exports.hrTimeDuration = exports.hrTime = exports.getTimeOrigin = exports.addHrTimes = exports.loggingErrorHandler = exports.setGlobalErrorHandler = exports.globalErrorHandler = exports.sanitizeAttributes = exports.isAttributeValue = exports.AnchoredClock = exports.W3CBaggagePropagator = undefined; - var W3CBaggagePropagator_1 = require_W3CBaggagePropagator3(); - Object.defineProperty(exports, "W3CBaggagePropagator", { enumerable: true, get: function() { - return W3CBaggagePropagator_1.W3CBaggagePropagator; - } }); - var anchored_clock_1 = require_anchored_clock3(); - Object.defineProperty(exports, "AnchoredClock", { enumerable: true, get: function() { - return anchored_clock_1.AnchoredClock; - } }); - var attributes_1 = require_attributes3(); - Object.defineProperty(exports, "isAttributeValue", { enumerable: true, get: function() { - return attributes_1.isAttributeValue; - } }); - Object.defineProperty(exports, "sanitizeAttributes", { enumerable: true, get: function() { - return attributes_1.sanitizeAttributes; - } }); - var global_error_handler_1 = require_global_error_handler3(); - Object.defineProperty(exports, "globalErrorHandler", { enumerable: true, get: function() { - return global_error_handler_1.globalErrorHandler; - } }); - Object.defineProperty(exports, "setGlobalErrorHandler", { enumerable: true, get: function() { - return global_error_handler_1.setGlobalErrorHandler; - } }); - var logging_error_handler_1 = require_logging_error_handler3(); - Object.defineProperty(exports, "loggingErrorHandler", { enumerable: true, get: function() { - return logging_error_handler_1.loggingErrorHandler; - } }); - var time_1 = require_time3(); - Object.defineProperty(exports, "addHrTimes", { enumerable: true, get: function() { - return time_1.addHrTimes; - } }); - Object.defineProperty(exports, "getTimeOrigin", { enumerable: true, get: function() { - return time_1.getTimeOrigin; - } }); - Object.defineProperty(exports, "hrTime", { enumerable: true, get: function() { - return time_1.hrTime; - } }); - Object.defineProperty(exports, "hrTimeDuration", { enumerable: true, get: function() { - return time_1.hrTimeDuration; - } }); - Object.defineProperty(exports, "hrTimeToMicroseconds", { enumerable: true, get: function() { - return time_1.hrTimeToMicroseconds; - } }); - Object.defineProperty(exports, "hrTimeToMilliseconds", { enumerable: true, get: function() { - return time_1.hrTimeToMilliseconds; - } }); - Object.defineProperty(exports, "hrTimeToNanoseconds", { enumerable: true, get: function() { - return time_1.hrTimeToNanoseconds; - } }); - Object.defineProperty(exports, "hrTimeToTimeStamp", { enumerable: true, get: function() { - return time_1.hrTimeToTimeStamp; - } }); - Object.defineProperty(exports, "isTimeInput", { enumerable: true, get: function() { - return time_1.isTimeInput; - } }); - Object.defineProperty(exports, "isTimeInputHrTime", { enumerable: true, get: function() { - return time_1.isTimeInputHrTime; - } }); - Object.defineProperty(exports, "millisToHrTime", { enumerable: true, get: function() { - return time_1.millisToHrTime; - } }); - Object.defineProperty(exports, "timeInputToHrTime", { enumerable: true, get: function() { - return time_1.timeInputToHrTime; - } }); - var ExportResult_1 = require_ExportResult3(); - Object.defineProperty(exports, "ExportResultCode", { enumerable: true, get: function() { - return ExportResult_1.ExportResultCode; - } }); - var utils_1 = require_utils45(); - Object.defineProperty(exports, "parseKeyPairsIntoRecord", { enumerable: true, get: function() { - return utils_1.parseKeyPairsIntoRecord; - } }); - var platform_1 = require_platform18(); - Object.defineProperty(exports, "SDK_INFO", { enumerable: true, get: function() { - return platform_1.SDK_INFO; - } }); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return platform_1._globalThis; - } }); - Object.defineProperty(exports, "getStringFromEnv", { enumerable: true, get: function() { - return platform_1.getStringFromEnv; - } }); - Object.defineProperty(exports, "getBooleanFromEnv", { enumerable: true, get: function() { - return platform_1.getBooleanFromEnv; - } }); - Object.defineProperty(exports, "getNumberFromEnv", { enumerable: true, get: function() { - return platform_1.getNumberFromEnv; - } }); - Object.defineProperty(exports, "getStringListFromEnv", { enumerable: true, get: function() { - return platform_1.getStringListFromEnv; - } }); - Object.defineProperty(exports, "otperformance", { enumerable: true, get: function() { - return platform_1.otperformance; - } }); - Object.defineProperty(exports, "unrefTimer", { enumerable: true, get: function() { - return platform_1.unrefTimer; - } }); - var composite_1 = require_composite3(); - Object.defineProperty(exports, "CompositePropagator", { enumerable: true, get: function() { - return composite_1.CompositePropagator; - } }); - var W3CTraceContextPropagator_1 = require_W3CTraceContextPropagator3(); - Object.defineProperty(exports, "TRACE_PARENT_HEADER", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.TRACE_PARENT_HEADER; - } }); - Object.defineProperty(exports, "TRACE_STATE_HEADER", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.TRACE_STATE_HEADER; - } }); - Object.defineProperty(exports, "W3CTraceContextPropagator", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.W3CTraceContextPropagator; - } }); - Object.defineProperty(exports, "parseTraceParent", { enumerable: true, get: function() { - return W3CTraceContextPropagator_1.parseTraceParent; - } }); - var rpc_metadata_1 = require_rpc_metadata3(); - Object.defineProperty(exports, "RPCType", { enumerable: true, get: function() { - return rpc_metadata_1.RPCType; - } }); - Object.defineProperty(exports, "deleteRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.deleteRPCMetadata; - } }); - Object.defineProperty(exports, "getRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.getRPCMetadata; - } }); - Object.defineProperty(exports, "setRPCMetadata", { enumerable: true, get: function() { - return rpc_metadata_1.setRPCMetadata; - } }); - var suppress_tracing_1 = require_suppress_tracing3(); - Object.defineProperty(exports, "isTracingSuppressed", { enumerable: true, get: function() { - return suppress_tracing_1.isTracingSuppressed; - } }); - Object.defineProperty(exports, "suppressTracing", { enumerable: true, get: function() { - return suppress_tracing_1.suppressTracing; - } }); - Object.defineProperty(exports, "unsuppressTracing", { enumerable: true, get: function() { - return suppress_tracing_1.unsuppressTracing; - } }); - var TraceState_1 = require_TraceState3(); - Object.defineProperty(exports, "TraceState", { enumerable: true, get: function() { - return TraceState_1.TraceState; - } }); - var merge_1 = require_merge3(); - Object.defineProperty(exports, "merge", { enumerable: true, get: function() { - return merge_1.merge; - } }); - var timeout_1 = require_timeout3(); - Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function() { - return timeout_1.TimeoutError; - } }); - Object.defineProperty(exports, "callWithTimeout", { enumerable: true, get: function() { - return timeout_1.callWithTimeout; - } }); - var url_1 = require_url3(); - Object.defineProperty(exports, "isUrlIgnored", { enumerable: true, get: function() { - return url_1.isUrlIgnored; - } }); - Object.defineProperty(exports, "urlMatches", { enumerable: true, get: function() { - return url_1.urlMatches; - } }); - var callback_1 = require_callback3(); - Object.defineProperty(exports, "BindOnceFuture", { enumerable: true, get: function() { - return callback_1.BindOnceFuture; - } }); - var configuration_1 = require_configuration3(); - Object.defineProperty(exports, "diagLogLevelFromString", { enumerable: true, get: function() { - return configuration_1.diagLogLevelFromString; - } }); - var exporter_1 = require_exporter3(); - exports.internal = { - _export: exporter_1._export - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/types/LogRecord.js -var require_LogRecord2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SeverityNumber = undefined; - var SeverityNumber; - (function(SeverityNumber2) { - SeverityNumber2[SeverityNumber2["UNSPECIFIED"] = 0] = "UNSPECIFIED"; - SeverityNumber2[SeverityNumber2["TRACE"] = 1] = "TRACE"; - SeverityNumber2[SeverityNumber2["TRACE2"] = 2] = "TRACE2"; - SeverityNumber2[SeverityNumber2["TRACE3"] = 3] = "TRACE3"; - SeverityNumber2[SeverityNumber2["TRACE4"] = 4] = "TRACE4"; - SeverityNumber2[SeverityNumber2["DEBUG"] = 5] = "DEBUG"; - SeverityNumber2[SeverityNumber2["DEBUG2"] = 6] = "DEBUG2"; - SeverityNumber2[SeverityNumber2["DEBUG3"] = 7] = "DEBUG3"; - SeverityNumber2[SeverityNumber2["DEBUG4"] = 8] = "DEBUG4"; - SeverityNumber2[SeverityNumber2["INFO"] = 9] = "INFO"; - SeverityNumber2[SeverityNumber2["INFO2"] = 10] = "INFO2"; - SeverityNumber2[SeverityNumber2["INFO3"] = 11] = "INFO3"; - SeverityNumber2[SeverityNumber2["INFO4"] = 12] = "INFO4"; - SeverityNumber2[SeverityNumber2["WARN"] = 13] = "WARN"; - SeverityNumber2[SeverityNumber2["WARN2"] = 14] = "WARN2"; - SeverityNumber2[SeverityNumber2["WARN3"] = 15] = "WARN3"; - SeverityNumber2[SeverityNumber2["WARN4"] = 16] = "WARN4"; - SeverityNumber2[SeverityNumber2["ERROR"] = 17] = "ERROR"; - SeverityNumber2[SeverityNumber2["ERROR2"] = 18] = "ERROR2"; - SeverityNumber2[SeverityNumber2["ERROR3"] = 19] = "ERROR3"; - SeverityNumber2[SeverityNumber2["ERROR4"] = 20] = "ERROR4"; - SeverityNumber2[SeverityNumber2["FATAL"] = 21] = "FATAL"; - SeverityNumber2[SeverityNumber2["FATAL2"] = 22] = "FATAL2"; - SeverityNumber2[SeverityNumber2["FATAL3"] = 23] = "FATAL3"; - SeverityNumber2[SeverityNumber2["FATAL4"] = 24] = "FATAL4"; - })(SeverityNumber = exports.SeverityNumber || (exports.SeverityNumber = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/NoopLogger.js -var require_NoopLogger2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NOOP_LOGGER = exports.NoopLogger = undefined; - - class NoopLogger { - emit(_logRecord) {} - } - exports.NoopLogger = NoopLogger; - exports.NOOP_LOGGER = new NoopLogger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/NoopLoggerProvider.js -var require_NoopLoggerProvider2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NOOP_LOGGER_PROVIDER = exports.NoopLoggerProvider = undefined; - var NoopLogger_1 = require_NoopLogger2(); - - class NoopLoggerProvider { - getLogger(_name, _version, _options) { - return new NoopLogger_1.NoopLogger; - } - } - exports.NoopLoggerProvider = NoopLoggerProvider; - exports.NOOP_LOGGER_PROVIDER = new NoopLoggerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/ProxyLogger.js -var require_ProxyLogger2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProxyLogger = undefined; - var NoopLogger_1 = require_NoopLogger2(); - - class ProxyLogger { - constructor(_provider, name, version2, options) { - this._provider = _provider; - this.name = name; - this.version = version2; - this.options = options; - } - emit(logRecord) { - this._getLogger().emit(logRecord); - } - _getLogger() { - if (this._delegate) { - return this._delegate; - } - const logger = this._provider.getDelegateLogger(this.name, this.version, this.options); - if (!logger) { - return NoopLogger_1.NOOP_LOGGER; - } - this._delegate = logger; - return this._delegate; - } - } - exports.ProxyLogger = ProxyLogger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/ProxyLoggerProvider.js -var require_ProxyLoggerProvider2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProxyLoggerProvider = undefined; - var NoopLoggerProvider_1 = require_NoopLoggerProvider2(); - var ProxyLogger_1 = require_ProxyLogger2(); - - class ProxyLoggerProvider { - getLogger(name, version2, options) { - var _a2; - return (_a2 = this.getDelegateLogger(name, version2, options)) !== null && _a2 !== undefined ? _a2 : new ProxyLogger_1.ProxyLogger(this, name, version2, options); - } - getDelegate() { - var _a2; - return (_a2 = this._delegate) !== null && _a2 !== undefined ? _a2 : NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER; - } - setDelegate(delegate) { - this._delegate = delegate; - } - getDelegateLogger(name, version2, options) { - var _a2; - return (_a2 = this._delegate) === null || _a2 === undefined ? undefined : _a2.getLogger(name, version2, options); - } - } - exports.ProxyLoggerProvider = ProxyLoggerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/platform/node/globalThis.js -var require_globalThis6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - exports._globalThis = typeof globalThis === "object" ? globalThis : global; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/platform/node/index.js -var require_node20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - var globalThis_1 = require_globalThis6(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return globalThis_1._globalThis; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/platform/index.js -var require_platform19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._globalThis = undefined; - var node_1 = require_node20(); - Object.defineProperty(exports, "_globalThis", { enumerable: true, get: function() { - return node_1._globalThis; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/internal/global-utils.js -var require_global_utils3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.API_BACKWARDS_COMPATIBILITY_VERSION = exports.makeGetter = exports._global = exports.GLOBAL_LOGS_API_KEY = undefined; - var platform_1 = require_platform19(); - exports.GLOBAL_LOGS_API_KEY = Symbol.for("io.opentelemetry.js.api.logs"); - exports._global = platform_1._globalThis; - function makeGetter(requiredVersion, instance, fallback) { - return (version2) => version2 === requiredVersion ? instance : fallback; - } - exports.makeGetter = makeGetter; - exports.API_BACKWARDS_COMPATIBILITY_VERSION = 1; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/api/logs.js -var require_logs4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LogsAPI = undefined; - var global_utils_1 = require_global_utils3(); - var NoopLoggerProvider_1 = require_NoopLoggerProvider2(); - var ProxyLoggerProvider_1 = require_ProxyLoggerProvider2(); - - class LogsAPI { - constructor() { - this._proxyLoggerProvider = new ProxyLoggerProvider_1.ProxyLoggerProvider; - } - static getInstance() { - if (!this._instance) { - this._instance = new LogsAPI; - } - return this._instance; - } - setGlobalLoggerProvider(provider) { - if (global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]) { - return this.getLoggerProvider(); - } - global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY] = (0, global_utils_1.makeGetter)(global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION, provider, NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER); - this._proxyLoggerProvider.setDelegate(provider); - return provider; - } - getLoggerProvider() { - var _a2, _b; - return (_b = (_a2 = global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]) === null || _a2 === undefined ? undefined : _a2.call(global_utils_1._global, global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION)) !== null && _b !== undefined ? _b : this._proxyLoggerProvider; - } - getLogger(name, version2, options) { - return this.getLoggerProvider().getLogger(name, version2, options); - } - disable() { - delete global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]; - this._proxyLoggerProvider = new ProxyLoggerProvider_1.ProxyLoggerProvider; - } - } - exports.LogsAPI = LogsAPI; -}); - -// ../../../../node_modules/.bun/@opentelemetry+api-logs@0.203.0/node_modules/@opentelemetry/api-logs/build/src/index.js -var require_src90 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.logs = exports.ProxyLoggerProvider = exports.ProxyLogger = exports.NoopLoggerProvider = exports.NOOP_LOGGER_PROVIDER = exports.NoopLogger = exports.NOOP_LOGGER = exports.SeverityNumber = undefined; - var LogRecord_1 = require_LogRecord2(); - Object.defineProperty(exports, "SeverityNumber", { enumerable: true, get: function() { - return LogRecord_1.SeverityNumber; - } }); - var NoopLogger_1 = require_NoopLogger2(); - Object.defineProperty(exports, "NOOP_LOGGER", { enumerable: true, get: function() { - return NoopLogger_1.NOOP_LOGGER; - } }); - Object.defineProperty(exports, "NoopLogger", { enumerable: true, get: function() { - return NoopLogger_1.NoopLogger; - } }); - var NoopLoggerProvider_1 = require_NoopLoggerProvider2(); - Object.defineProperty(exports, "NOOP_LOGGER_PROVIDER", { enumerable: true, get: function() { - return NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER; - } }); - Object.defineProperty(exports, "NoopLoggerProvider", { enumerable: true, get: function() { - return NoopLoggerProvider_1.NoopLoggerProvider; - } }); - var ProxyLogger_1 = require_ProxyLogger2(); - Object.defineProperty(exports, "ProxyLogger", { enumerable: true, get: function() { - return ProxyLogger_1.ProxyLogger; - } }); - var ProxyLoggerProvider_1 = require_ProxyLoggerProvider2(); - Object.defineProperty(exports, "ProxyLoggerProvider", { enumerable: true, get: function() { - return ProxyLoggerProvider_1.ProxyLoggerProvider; - } }); - var logs_1 = require_logs4(); - exports.logs = logs_1.LogsAPI.getInstance(); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/platform/node/default-service-name.js -var require_default_service_name3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - function defaultServiceName() { - return `unknown_service:${process.argv0}`; - } - exports.defaultServiceName = defaultServiceName; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/platform/node/index.js -var require_node21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - var default_service_name_1 = require_default_service_name3(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return default_service_name_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/platform/index.js -var require_platform20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = undefined; - var node_1 = require_node21(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return node_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/utils.js -var require_utils46 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.identity = exports.isPromiseLike = undefined; - var isPromiseLike = (val) => { - return val !== null && typeof val === "object" && typeof val.then === "function"; - }; - exports.isPromiseLike = isPromiseLike; - function identity(_) { - return _; - } - exports.identity = identity; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/ResourceImpl.js -var require_ResourceImpl3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultResource = exports.emptyResource = exports.resourceFromDetectedResource = exports.resourceFromAttributes = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var semantic_conventions_1 = require_src3(); - var platform_1 = require_platform20(); - var utils_1 = require_utils46(); - - class ResourceImpl { - _rawAttributes; - _asyncAttributesPending = false; - _memoizedAttributes; - static FromAttributeList(attributes) { - const res = new ResourceImpl({}); - res._rawAttributes = guardedRawAttributes(attributes); - res._asyncAttributesPending = attributes.filter(([_, val]) => (0, utils_1.isPromiseLike)(val)).length > 0; - return res; - } - constructor(resource) { - const attributes = resource.attributes ?? {}; - this._rawAttributes = Object.entries(attributes).map(([k, v]) => { - if ((0, utils_1.isPromiseLike)(v)) { - this._asyncAttributesPending = true; - } - return [k, v]; - }); - this._rawAttributes = guardedRawAttributes(this._rawAttributes); - } - get asyncAttributesPending() { - return this._asyncAttributesPending; - } - async waitForAsyncAttributes() { - if (!this.asyncAttributesPending) { - return; - } - for (let i = 0;i < this._rawAttributes.length; i++) { - const [k, v] = this._rawAttributes[i]; - this._rawAttributes[i] = [k, (0, utils_1.isPromiseLike)(v) ? await v : v]; - } - this._asyncAttributesPending = false; - } - get attributes() { - if (this.asyncAttributesPending) { - api_1.diag.error("Accessing resource attributes before async attributes settled"); - } - if (this._memoizedAttributes) { - return this._memoizedAttributes; - } - const attrs = {}; - for (const [k, v] of this._rawAttributes) { - if ((0, utils_1.isPromiseLike)(v)) { - api_1.diag.debug(`Unsettled resource attribute ${k} skipped`); - continue; - } - if (v != null) { - attrs[k] ??= v; - } - } - if (!this._asyncAttributesPending) { - this._memoizedAttributes = attrs; - } - return attrs; - } - getRawAttributes() { - return this._rawAttributes; - } - merge(resource) { - if (resource == null) - return this; - return ResourceImpl.FromAttributeList([ - ...resource.getRawAttributes(), - ...this.getRawAttributes() - ]); - } - } - function resourceFromAttributes(attributes) { - return ResourceImpl.FromAttributeList(Object.entries(attributes)); - } - exports.resourceFromAttributes = resourceFromAttributes; - function resourceFromDetectedResource(detectedResource) { - return new ResourceImpl(detectedResource); - } - exports.resourceFromDetectedResource = resourceFromDetectedResource; - function emptyResource() { - return resourceFromAttributes({}); - } - exports.emptyResource = emptyResource; - function defaultResource2() { - return resourceFromAttributes({ - [semantic_conventions_1.ATTR_SERVICE_NAME]: (0, platform_1.defaultServiceName)(), - [semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE], - [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME], - [semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION]: core_1.SDK_INFO[semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION] - }); - } - exports.defaultResource = defaultResource2; - function guardedRawAttributes(attributes) { - return attributes.map(([k, v]) => { - if ((0, utils_1.isPromiseLike)(v)) { - return [ - k, - v.catch((err) => { - api_1.diag.debug("promise rejection for resource attribute: %s - %s", k, err); - return; - }) - ]; - } - return [k, v]; - }); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detect-resources.js -var require_detect_resources3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.detectResources = undefined; - var api_1 = require_src(); - var ResourceImpl_1 = require_ResourceImpl3(); - var detectResources = (config2 = {}) => { - const resources3 = (config2.detectors || []).map((d) => { - try { - const resource = (0, ResourceImpl_1.resourceFromDetectedResource)(d.detect(config2)); - api_1.diag.debug(`${d.constructor.name} found resource.`, resource); - return resource; - } catch (e) { - api_1.diag.debug(`${d.constructor.name} failed: ${e.message}`); - return (0, ResourceImpl_1.emptyResource)(); - } - }); - return resources3.reduce((acc, resource) => acc.merge(resource), (0, ResourceImpl_1.emptyResource)()); - }; - exports.detectResources = detectResources; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/EnvDetector.js -var require_EnvDetector3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.envDetector = undefined; - var api_1 = require_src(); - var semantic_conventions_1 = require_src3(); - var core_1 = require_src89(); - - class EnvDetector { - _MAX_LENGTH = 255; - _COMMA_SEPARATOR = ","; - _LABEL_KEY_VALUE_SPLITTER = "="; - _ERROR_MESSAGE_INVALID_CHARS = "should be a ASCII string with a length greater than 0 and not exceed " + this._MAX_LENGTH + " characters."; - _ERROR_MESSAGE_INVALID_VALUE = "should be a ASCII string with a length not exceed " + this._MAX_LENGTH + " characters."; - detect(_config) { - const attributes = {}; - const rawAttributes = (0, core_1.getStringFromEnv)("OTEL_RESOURCE_ATTRIBUTES"); - const serviceName = (0, core_1.getStringFromEnv)("OTEL_SERVICE_NAME"); - if (rawAttributes) { - try { - const parsedAttributes = this._parseResourceAttributes(rawAttributes); - Object.assign(attributes, parsedAttributes); - } catch (e) { - api_1.diag.debug(`EnvDetector failed: ${e.message}`); - } - } - if (serviceName) { - attributes[semantic_conventions_1.ATTR_SERVICE_NAME] = serviceName; - } - return { attributes }; - } - _parseResourceAttributes(rawEnvAttributes) { - if (!rawEnvAttributes) - return {}; - const attributes = {}; - const rawAttributes = rawEnvAttributes.split(this._COMMA_SEPARATOR, -1); - for (const rawAttribute of rawAttributes) { - const keyValuePair = rawAttribute.split(this._LABEL_KEY_VALUE_SPLITTER, -1); - if (keyValuePair.length !== 2) { - continue; - } - let [key, value] = keyValuePair; - key = key.trim(); - value = value.trim().split(/^"|"$/).join(""); - if (!this._isValidAndNotEmpty(key)) { - throw new Error(`Attribute key ${this._ERROR_MESSAGE_INVALID_CHARS}`); - } - if (!this._isValid(value)) { - throw new Error(`Attribute value ${this._ERROR_MESSAGE_INVALID_VALUE}`); - } - attributes[key] = decodeURIComponent(value); - } - return attributes; - } - _isValid(name) { - return name.length <= this._MAX_LENGTH && this._isBaggageOctetString(name); - } - _isBaggageOctetString(str) { - for (let i = 0;i < str.length; i++) { - const ch = str.charCodeAt(i); - if (ch < 33 || ch === 44 || ch === 59 || ch === 92 || ch > 126) { - return false; - } - } - return true; - } - _isValidAndNotEmpty(str) { - return str.length > 0 && this._isValid(str); - } - } - exports.envDetector = new EnvDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/semconv.js -var require_semconv35 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ATTR_WEBENGINE_VERSION = exports.ATTR_WEBENGINE_NAME = exports.ATTR_WEBENGINE_DESCRIPTION = exports.ATTR_SERVICE_NAMESPACE = exports.ATTR_SERVICE_INSTANCE_ID = exports.ATTR_PROCESS_RUNTIME_VERSION = exports.ATTR_PROCESS_RUNTIME_NAME = exports.ATTR_PROCESS_RUNTIME_DESCRIPTION = exports.ATTR_PROCESS_PID = exports.ATTR_PROCESS_OWNER = exports.ATTR_PROCESS_EXECUTABLE_PATH = exports.ATTR_PROCESS_EXECUTABLE_NAME = exports.ATTR_PROCESS_COMMAND_ARGS = exports.ATTR_PROCESS_COMMAND = exports.ATTR_OS_VERSION = exports.ATTR_OS_TYPE = exports.ATTR_K8S_POD_NAME = exports.ATTR_K8S_NAMESPACE_NAME = exports.ATTR_K8S_DEPLOYMENT_NAME = exports.ATTR_K8S_CLUSTER_NAME = exports.ATTR_HOST_TYPE = exports.ATTR_HOST_NAME = exports.ATTR_HOST_IMAGE_VERSION = exports.ATTR_HOST_IMAGE_NAME = exports.ATTR_HOST_IMAGE_ID = exports.ATTR_HOST_ID = exports.ATTR_HOST_ARCH = exports.ATTR_CONTAINER_NAME = exports.ATTR_CONTAINER_IMAGE_TAGS = exports.ATTR_CONTAINER_IMAGE_NAME = exports.ATTR_CONTAINER_ID = exports.ATTR_CLOUD_REGION = exports.ATTR_CLOUD_PROVIDER = exports.ATTR_CLOUD_AVAILABILITY_ZONE = exports.ATTR_CLOUD_ACCOUNT_ID = undefined; - exports.ATTR_CLOUD_ACCOUNT_ID = "cloud.account.id"; - exports.ATTR_CLOUD_AVAILABILITY_ZONE = "cloud.availability_zone"; - exports.ATTR_CLOUD_PROVIDER = "cloud.provider"; - exports.ATTR_CLOUD_REGION = "cloud.region"; - exports.ATTR_CONTAINER_ID = "container.id"; - exports.ATTR_CONTAINER_IMAGE_NAME = "container.image.name"; - exports.ATTR_CONTAINER_IMAGE_TAGS = "container.image.tags"; - exports.ATTR_CONTAINER_NAME = "container.name"; - exports.ATTR_HOST_ARCH = "host.arch"; - exports.ATTR_HOST_ID = "host.id"; - exports.ATTR_HOST_IMAGE_ID = "host.image.id"; - exports.ATTR_HOST_IMAGE_NAME = "host.image.name"; - exports.ATTR_HOST_IMAGE_VERSION = "host.image.version"; - exports.ATTR_HOST_NAME = "host.name"; - exports.ATTR_HOST_TYPE = "host.type"; - exports.ATTR_K8S_CLUSTER_NAME = "k8s.cluster.name"; - exports.ATTR_K8S_DEPLOYMENT_NAME = "k8s.deployment.name"; - exports.ATTR_K8S_NAMESPACE_NAME = "k8s.namespace.name"; - exports.ATTR_K8S_POD_NAME = "k8s.pod.name"; - exports.ATTR_OS_TYPE = "os.type"; - exports.ATTR_OS_VERSION = "os.version"; - exports.ATTR_PROCESS_COMMAND = "process.command"; - exports.ATTR_PROCESS_COMMAND_ARGS = "process.command_args"; - exports.ATTR_PROCESS_EXECUTABLE_NAME = "process.executable.name"; - exports.ATTR_PROCESS_EXECUTABLE_PATH = "process.executable.path"; - exports.ATTR_PROCESS_OWNER = "process.owner"; - exports.ATTR_PROCESS_PID = "process.pid"; - exports.ATTR_PROCESS_RUNTIME_DESCRIPTION = "process.runtime.description"; - exports.ATTR_PROCESS_RUNTIME_NAME = "process.runtime.name"; - exports.ATTR_PROCESS_RUNTIME_VERSION = "process.runtime.version"; - exports.ATTR_SERVICE_INSTANCE_ID = "service.instance.id"; - exports.ATTR_SERVICE_NAMESPACE = "service.namespace"; - exports.ATTR_WEBENGINE_DESCRIPTION = "webengine.description"; - exports.ATTR_WEBENGINE_NAME = "webengine.name"; - exports.ATTR_WEBENGINE_VERSION = "webengine.version"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/execAsync.js -var require_execAsync3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.execAsync = undefined; - var child_process = __require("child_process"); - var util3 = __require("util"); - exports.execAsync = util3.promisify(child_process.exec); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-darwin.js -var require_getMachineId_darwin3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var execAsync_1 = require_execAsync3(); - var api_1 = require_src(); - async function getMachineId() { - try { - const result = await (0, execAsync_1.execAsync)('ioreg -rd1 -c "IOPlatformExpertDevice"'); - const idLine = result.stdout.split(` -`).find((line) => line.includes("IOPlatformUUID")); - if (!idLine) { - return; - } - const parts = idLine.split('" = "'); - if (parts.length === 2) { - return parts[1].slice(0, -1); - } - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-linux.js -var require_getMachineId_linux3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var fs_1 = __require("fs"); - var api_1 = require_src(); - async function getMachineId() { - const paths = ["/etc/machine-id", "/var/lib/dbus/machine-id"]; - for (const path of paths) { - try { - const result = await fs_1.promises.readFile(path, { encoding: "utf8" }); - return result.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-bsd.js -var require_getMachineId_bsd3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var fs_1 = __require("fs"); - var execAsync_1 = require_execAsync3(); - var api_1 = require_src(); - async function getMachineId() { - try { - const result = await fs_1.promises.readFile("/etc/hostid", { encoding: "utf8" }); - return result.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - try { - const result = await (0, execAsync_1.execAsync)("kenv -q smbios.system.uuid"); - return result.stdout.trim(); - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-win.js -var require_getMachineId_win3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var process3 = __require("process"); - var execAsync_1 = require_execAsync3(); - var api_1 = require_src(); - async function getMachineId() { - const args = "QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid"; - let command = "%windir%\\System32\\REG.exe"; - if (process3.arch === "ia32" && "PROCESSOR_ARCHITEW6432" in process3.env) { - command = "%windir%\\sysnative\\cmd.exe /c " + command; - } - try { - const result = await (0, execAsync_1.execAsync)(`${command} ${args}`); - const parts = result.stdout.split("REG_SZ"); - if (parts.length === 2) { - return parts[1].trim(); - } - } catch (e) { - api_1.diag.debug(`error reading machine id: ${e}`); - } - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-unsupported.js -var require_getMachineId_unsupported3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var api_1 = require_src(); - async function getMachineId() { - api_1.diag.debug("could not read machine-id: unsupported platform"); - return; - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId.js -var require_getMachineId3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMachineId = undefined; - var process3 = __require("process"); - var getMachineIdImpl; - async function getMachineId() { - if (!getMachineIdImpl) { - switch (process3.platform) { - case "darwin": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_darwin3()))).getMachineId; - break; - case "linux": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_linux3()))).getMachineId; - break; - case "freebsd": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_bsd3()))).getMachineId; - break; - case "win32": - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_win3()))).getMachineId; - break; - default: - getMachineIdImpl = (await Promise.resolve().then(() => __toESM(require_getMachineId_unsupported3()))).getMachineId; - break; - } - } - return getMachineIdImpl(); - } - exports.getMachineId = getMachineId; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/utils.js -var require_utils47 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalizeType = exports.normalizeArch = undefined; - var normalizeArch = (nodeArchString) => { - switch (nodeArchString) { - case "arm": - return "arm32"; - case "ppc": - return "ppc32"; - case "x64": - return "amd64"; - default: - return nodeArchString; - } - }; - exports.normalizeArch = normalizeArch; - var normalizeType = (nodePlatform) => { - switch (nodePlatform) { - case "sunos": - return "solaris"; - case "win32": - return "windows"; - default: - return nodePlatform; - } - }; - exports.normalizeType = normalizeType; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/HostDetector.js -var require_HostDetector3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hostDetector = undefined; - var semconv_1 = require_semconv35(); - var os_1 = __require("os"); - var getMachineId_1 = require_getMachineId3(); - var utils_1 = require_utils47(); - - class HostDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_HOST_NAME]: (0, os_1.hostname)(), - [semconv_1.ATTR_HOST_ARCH]: (0, utils_1.normalizeArch)((0, os_1.arch)()), - [semconv_1.ATTR_HOST_ID]: (0, getMachineId_1.getMachineId)() - }; - return { attributes }; - } - } - exports.hostDetector = new HostDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/OSDetector.js -var require_OSDetector3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.osDetector = undefined; - var semconv_1 = require_semconv35(); - var os_1 = __require("os"); - var utils_1 = require_utils47(); - - class OSDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_OS_TYPE]: (0, utils_1.normalizeType)((0, os_1.platform)()), - [semconv_1.ATTR_OS_VERSION]: (0, os_1.release)() - }; - return { attributes }; - } - } - exports.osDetector = new OSDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ProcessDetector.js -var require_ProcessDetector3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.processDetector = undefined; - var api_1 = require_src(); - var semconv_1 = require_semconv35(); - var os = __require("os"); - - class ProcessDetector { - detect(_config) { - const attributes = { - [semconv_1.ATTR_PROCESS_PID]: process.pid, - [semconv_1.ATTR_PROCESS_EXECUTABLE_NAME]: process.title, - [semconv_1.ATTR_PROCESS_EXECUTABLE_PATH]: process.execPath, - [semconv_1.ATTR_PROCESS_COMMAND_ARGS]: [ - process.argv[0], - ...process.execArgv, - ...process.argv.slice(1) - ], - [semconv_1.ATTR_PROCESS_RUNTIME_VERSION]: process.versions.node, - [semconv_1.ATTR_PROCESS_RUNTIME_NAME]: "nodejs", - [semconv_1.ATTR_PROCESS_RUNTIME_DESCRIPTION]: "Node.js" - }; - if (process.argv.length > 1) { - attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1]; - } - try { - const userInfo = os.userInfo(); - attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username; - } catch (e) { - api_1.diag.debug(`error obtaining process owner: ${e}`); - } - return { attributes }; - } - } - exports.processDetector = new ProcessDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/ServiceInstanceIdDetector.js -var require_ServiceInstanceIdDetector3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = undefined; - var semconv_1 = require_semconv35(); - var crypto_1 = __require("crypto"); - - class ServiceInstanceIdDetector { - detect(_config) { - return { - attributes: { - [semconv_1.ATTR_SERVICE_INSTANCE_ID]: (0, crypto_1.randomUUID)() - } - }; - } - } - exports.serviceInstanceIdDetector = new ServiceInstanceIdDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/index.js -var require_node22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = undefined; - var HostDetector_1 = require_HostDetector3(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return HostDetector_1.hostDetector; - } }); - var OSDetector_1 = require_OSDetector3(); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return OSDetector_1.osDetector; - } }); - var ProcessDetector_1 = require_ProcessDetector3(); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return ProcessDetector_1.processDetector; - } }); - var ServiceInstanceIdDetector_1 = require_ServiceInstanceIdDetector3(); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return ServiceInstanceIdDetector_1.serviceInstanceIdDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/platform/index.js -var require_platform21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = undefined; - var node_1 = require_node22(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return node_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return node_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return node_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return node_1.serviceInstanceIdDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/NoopDetector.js -var require_NoopDetector3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.noopDetector = exports.NoopDetector = undefined; - - class NoopDetector { - detect() { - return { - attributes: {} - }; - } - } - exports.NoopDetector = NoopDetector; - exports.noopDetector = new NoopDetector; -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/detectors/index.js -var require_detectors8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.noopDetector = exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = exports.envDetector = undefined; - var EnvDetector_1 = require_EnvDetector3(); - Object.defineProperty(exports, "envDetector", { enumerable: true, get: function() { - return EnvDetector_1.envDetector; - } }); - var platform_1 = require_platform21(); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return platform_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return platform_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return platform_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return platform_1.serviceInstanceIdDetector; - } }); - var NoopDetector_1 = require_NoopDetector3(); - Object.defineProperty(exports, "noopDetector", { enumerable: true, get: function() { - return NoopDetector_1.noopDetector; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+resources@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/resources/build/src/index.js -var require_src91 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.defaultServiceName = exports.emptyResource = exports.defaultResource = exports.resourceFromAttributes = exports.serviceInstanceIdDetector = exports.processDetector = exports.osDetector = exports.hostDetector = exports.envDetector = exports.detectResources = undefined; - var detect_resources_1 = require_detect_resources3(); - Object.defineProperty(exports, "detectResources", { enumerable: true, get: function() { - return detect_resources_1.detectResources; - } }); - var detectors_1 = require_detectors8(); - Object.defineProperty(exports, "envDetector", { enumerable: true, get: function() { - return detectors_1.envDetector; - } }); - Object.defineProperty(exports, "hostDetector", { enumerable: true, get: function() { - return detectors_1.hostDetector; - } }); - Object.defineProperty(exports, "osDetector", { enumerable: true, get: function() { - return detectors_1.osDetector; - } }); - Object.defineProperty(exports, "processDetector", { enumerable: true, get: function() { - return detectors_1.processDetector; - } }); - Object.defineProperty(exports, "serviceInstanceIdDetector", { enumerable: true, get: function() { - return detectors_1.serviceInstanceIdDetector; - } }); - var ResourceImpl_1 = require_ResourceImpl3(); - Object.defineProperty(exports, "resourceFromAttributes", { enumerable: true, get: function() { - return ResourceImpl_1.resourceFromAttributes; - } }); - Object.defineProperty(exports, "defaultResource", { enumerable: true, get: function() { - return ResourceImpl_1.defaultResource; - } }); - Object.defineProperty(exports, "emptyResource", { enumerable: true, get: function() { - return ResourceImpl_1.emptyResource; - } }); - var platform_1 = require_platform20(); - Object.defineProperty(exports, "defaultServiceName", { enumerable: true, get: function() { - return platform_1.defaultServiceName; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/LogRecordImpl.js -var require_LogRecordImpl2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LogRecordImpl = undefined; - var api_1 = require_src(); - var api8 = require_src(); - var core_1 = require_src89(); - - class LogRecordImpl { - hrTime; - hrTimeObserved; - spanContext; - resource; - instrumentationScope; - attributes = {}; - _severityText; - _severityNumber; - _body; - _eventName; - totalAttributesCount = 0; - _isReadonly = false; - _logRecordLimits; - set severityText(severityText) { - if (this._isLogRecordReadonly()) { - return; - } - this._severityText = severityText; - } - get severityText() { - return this._severityText; - } - set severityNumber(severityNumber) { - if (this._isLogRecordReadonly()) { - return; - } - this._severityNumber = severityNumber; - } - get severityNumber() { - return this._severityNumber; - } - set body(body) { - if (this._isLogRecordReadonly()) { - return; - } - this._body = body; - } - get body() { - return this._body; - } - get eventName() { - return this._eventName; - } - set eventName(eventName) { - if (this._isLogRecordReadonly()) { - return; - } - this._eventName = eventName; - } - get droppedAttributesCount() { - return this.totalAttributesCount - Object.keys(this.attributes).length; - } - constructor(_sharedState, instrumentationScope, logRecord) { - const { timestamp, observedTimestamp, eventName, severityNumber, severityText, body, attributes = {}, context: context8 } = logRecord; - const now2 = Date.now(); - this.hrTime = (0, core_1.timeInputToHrTime)(timestamp ?? now2); - this.hrTimeObserved = (0, core_1.timeInputToHrTime)(observedTimestamp ?? now2); - if (context8) { - const spanContext = api8.trace.getSpanContext(context8); - if (spanContext && api8.isSpanContextValid(spanContext)) { - this.spanContext = spanContext; - } - } - this.severityNumber = severityNumber; - this.severityText = severityText; - this.body = body; - this.resource = _sharedState.resource; - this.instrumentationScope = instrumentationScope; - this._logRecordLimits = _sharedState.logRecordLimits; - this._eventName = eventName; - this.setAttributes(attributes); - } - setAttribute(key, value) { - if (this._isLogRecordReadonly()) { - return this; - } - if (value === null) { - return this; - } - if (key.length === 0) { - api8.diag.warn(`Invalid attribute key: ${key}`); - return this; - } - if (!(0, core_1.isAttributeValue)(value) && !(typeof value === "object" && !Array.isArray(value) && Object.keys(value).length > 0)) { - api8.diag.warn(`Invalid attribute value set for key: ${key}`); - return this; - } - this.totalAttributesCount += 1; - if (Object.keys(this.attributes).length >= this._logRecordLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, key)) { - if (this.droppedAttributesCount === 1) { - api8.diag.warn("Dropping extra attributes."); - } - return this; - } - if ((0, core_1.isAttributeValue)(value)) { - this.attributes[key] = this._truncateToSize(value); - } else { - this.attributes[key] = value; - } - return this; - } - setAttributes(attributes) { - for (const [k, v] of Object.entries(attributes)) { - this.setAttribute(k, v); - } - return this; - } - setBody(body) { - this.body = body; - return this; - } - setEventName(eventName) { - this.eventName = eventName; - return this; - } - setSeverityNumber(severityNumber) { - this.severityNumber = severityNumber; - return this; - } - setSeverityText(severityText) { - this.severityText = severityText; - return this; - } - _makeReadonly() { - this._isReadonly = true; - } - _truncateToSize(value) { - const limit = this._logRecordLimits.attributeValueLengthLimit; - if (limit <= 0) { - api8.diag.warn(`Attribute value limit must be positive, got ${limit}`); - return value; - } - if (typeof value === "string") { - return this._truncateToLimitUtil(value, limit); - } - if (Array.isArray(value)) { - return value.map((val) => typeof val === "string" ? this._truncateToLimitUtil(val, limit) : val); - } - return value; - } - _truncateToLimitUtil(value, limit) { - if (value.length <= limit) { - return value; - } - return value.substring(0, limit); - } - _isLogRecordReadonly() { - if (this._isReadonly) { - api_1.diag.warn("Can not execute the operation on emitted log record"); - } - return this._isReadonly; - } - } - exports.LogRecordImpl = LogRecordImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/Logger.js -var require_Logger2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Logger = undefined; - var api_1 = require_src(); - var LogRecordImpl_1 = require_LogRecordImpl2(); - - class Logger { - instrumentationScope; - _sharedState; - constructor(instrumentationScope, _sharedState) { - this.instrumentationScope = instrumentationScope; - this._sharedState = _sharedState; - } - emit(logRecord) { - const currentContext = logRecord.context || api_1.context.active(); - const logRecordInstance = new LogRecordImpl_1.LogRecordImpl(this._sharedState, this.instrumentationScope, { - context: currentContext, - ...logRecord - }); - this._sharedState.activeProcessor.onEmit(logRecordInstance, currentContext); - logRecordInstance._makeReadonly(); - } - } - exports.Logger = Logger; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/config.js -var require_config3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.reconfigureLimits = exports.loadDefaultConfig = undefined; - var core_1 = require_src89(); - function loadDefaultConfig() { - return { - forceFlushTimeoutMillis: 30000, - logRecordLimits: { - attributeValueLengthLimit: (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity, - attributeCountLimit: (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT") ?? 128 - }, - includeTraceContext: true - }; - } - exports.loadDefaultConfig = loadDefaultConfig; - function reconfigureLimits(logRecordLimits) { - return { - attributeCountLimit: logRecordLimits.attributeCountLimit ?? (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_COUNT_LIMIT") ?? 128, - attributeValueLengthLimit: logRecordLimits.attributeValueLengthLimit ?? (0, core_1.getNumberFromEnv)("OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity - }; - } - exports.reconfigureLimits = reconfigureLimits; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/NoopLogRecordProcessor.js -var require_NoopLogRecordProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopLogRecordProcessor = undefined; - - class NoopLogRecordProcessor { - forceFlush() { - return Promise.resolve(); - } - onEmit(_logRecord, _context) {} - shutdown() { - return Promise.resolve(); - } - } - exports.NoopLogRecordProcessor = NoopLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/MultiLogRecordProcessor.js -var require_MultiLogRecordProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MultiLogRecordProcessor = undefined; - var core_1 = require_src89(); - - class MultiLogRecordProcessor { - processors; - forceFlushTimeoutMillis; - constructor(processors, forceFlushTimeoutMillis) { - this.processors = processors; - this.forceFlushTimeoutMillis = forceFlushTimeoutMillis; - } - async forceFlush() { - const timeout = this.forceFlushTimeoutMillis; - await Promise.all(this.processors.map((processor) => (0, core_1.callWithTimeout)(processor.forceFlush(), timeout))); - } - onEmit(logRecord, context8) { - this.processors.forEach((processors) => processors.onEmit(logRecord, context8)); - } - async shutdown() { - await Promise.all(this.processors.map((processor) => processor.shutdown())); - } - } - exports.MultiLogRecordProcessor = MultiLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/internal/LoggerProviderSharedState.js -var require_LoggerProviderSharedState2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LoggerProviderSharedState = undefined; - var NoopLogRecordProcessor_1 = require_NoopLogRecordProcessor2(); - var MultiLogRecordProcessor_1 = require_MultiLogRecordProcessor2(); - - class LoggerProviderSharedState { - resource; - forceFlushTimeoutMillis; - logRecordLimits; - processors; - loggers = new Map; - activeProcessor; - registeredLogRecordProcessors = []; - constructor(resource, forceFlushTimeoutMillis, logRecordLimits, processors) { - this.resource = resource; - this.forceFlushTimeoutMillis = forceFlushTimeoutMillis; - this.logRecordLimits = logRecordLimits; - this.processors = processors; - if (processors.length > 0) { - this.registeredLogRecordProcessors = processors; - this.activeProcessor = new MultiLogRecordProcessor_1.MultiLogRecordProcessor(this.registeredLogRecordProcessors, this.forceFlushTimeoutMillis); - } else { - this.activeProcessor = new NoopLogRecordProcessor_1.NoopLogRecordProcessor; - } - } - } - exports.LoggerProviderSharedState = LoggerProviderSharedState; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/LoggerProvider.js -var require_LoggerProvider2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LoggerProvider = exports.DEFAULT_LOGGER_NAME = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src90(); - var resources_1 = require_src91(); - var core_1 = require_src89(); - var Logger_1 = require_Logger2(); - var config_1 = require_config3(); - var LoggerProviderSharedState_1 = require_LoggerProviderSharedState2(); - exports.DEFAULT_LOGGER_NAME = "unknown"; - - class LoggerProvider { - _shutdownOnce; - _sharedState; - constructor(config2 = {}) { - const mergedConfig = (0, core_1.merge)({}, (0, config_1.loadDefaultConfig)(), config2); - const resource = config2.resource ?? (0, resources_1.defaultResource)(); - this._sharedState = new LoggerProviderSharedState_1.LoggerProviderSharedState(resource, mergedConfig.forceFlushTimeoutMillis, (0, config_1.reconfigureLimits)(mergedConfig.logRecordLimits), config2?.processors ?? []); - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - } - getLogger(name, version2, options) { - if (this._shutdownOnce.isCalled) { - api_1.diag.warn("A shutdown LoggerProvider cannot provide a Logger"); - return api_logs_1.NOOP_LOGGER; - } - if (!name) { - api_1.diag.warn("Logger requested without instrumentation scope name."); - } - const loggerName = name || exports.DEFAULT_LOGGER_NAME; - const key = `${loggerName}@${version2 || ""}:${options?.schemaUrl || ""}`; - if (!this._sharedState.loggers.has(key)) { - this._sharedState.loggers.set(key, new Logger_1.Logger({ name: loggerName, version: version2, schemaUrl: options?.schemaUrl }, this._sharedState)); - } - return this._sharedState.loggers.get(key); - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - api_1.diag.warn("invalid attempt to force flush after LoggerProvider shutdown"); - return this._shutdownOnce.promise; - } - return this._sharedState.activeProcessor.forceFlush(); - } - shutdown() { - if (this._shutdownOnce.isCalled) { - api_1.diag.warn("shutdown may only be called once per LoggerProvider"); - return this._shutdownOnce.promise; - } - return this._shutdownOnce.call(); - } - _shutdown() { - return this._sharedState.activeProcessor.shutdown(); - } - } - exports.LoggerProvider = LoggerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/ConsoleLogRecordExporter.js -var require_ConsoleLogRecordExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleLogRecordExporter = undefined; - var core_1 = require_src89(); - var core_2 = require_src89(); - - class ConsoleLogRecordExporter { - export(logs, resultCallback) { - this._sendLogRecords(logs, resultCallback); - } - shutdown() { - return Promise.resolve(); - } - _exportInfo(logRecord) { - return { - resource: { - attributes: logRecord.resource.attributes - }, - instrumentationScope: logRecord.instrumentationScope, - timestamp: (0, core_1.hrTimeToMicroseconds)(logRecord.hrTime), - traceId: logRecord.spanContext?.traceId, - spanId: logRecord.spanContext?.spanId, - traceFlags: logRecord.spanContext?.traceFlags, - severityText: logRecord.severityText, - severityNumber: logRecord.severityNumber, - body: logRecord.body, - attributes: logRecord.attributes - }; - } - _sendLogRecords(logRecords, done) { - for (const logRecord of logRecords) { - console.dir(this._exportInfo(logRecord), { depth: 3 }); - } - done?.({ code: core_2.ExportResultCode.SUCCESS }); - } - } - exports.ConsoleLogRecordExporter = ConsoleLogRecordExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/SimpleLogRecordProcessor.js -var require_SimpleLogRecordProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SimpleLogRecordProcessor = undefined; - var core_1 = require_src89(); - - class SimpleLogRecordProcessor { - _exporter; - _shutdownOnce; - _unresolvedExports; - constructor(_exporter) { - this._exporter = _exporter; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - this._unresolvedExports = new Set; - } - onEmit(logRecord) { - if (this._shutdownOnce.isCalled) { - return; - } - const doExport = () => core_1.internal._export(this._exporter, [logRecord]).then((result) => { - if (result.code !== core_1.ExportResultCode.SUCCESS) { - (0, core_1.globalErrorHandler)(result.error ?? new Error(`SimpleLogRecordProcessor: log record export failed (status ${result})`)); - } - }).catch(core_1.globalErrorHandler); - if (logRecord.resource.asyncAttributesPending) { - const exportPromise = logRecord.resource.waitForAsyncAttributes?.().then(() => { - this._unresolvedExports.delete(exportPromise); - return doExport(); - }, core_1.globalErrorHandler); - if (exportPromise != null) { - this._unresolvedExports.add(exportPromise); - } - } else { - doExport(); - } - } - async forceFlush() { - await Promise.all(Array.from(this._unresolvedExports)); - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return this._exporter.shutdown(); - } - } - exports.SimpleLogRecordProcessor = SimpleLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/InMemoryLogRecordExporter.js -var require_InMemoryLogRecordExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InMemoryLogRecordExporter = undefined; - var core_1 = require_src89(); - - class InMemoryLogRecordExporter { - _finishedLogRecords = []; - _stopped = false; - export(logs, resultCallback) { - if (this._stopped) { - return resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Exporter has been stopped") - }); - } - this._finishedLogRecords.push(...logs); - resultCallback({ code: core_1.ExportResultCode.SUCCESS }); - } - shutdown() { - this._stopped = true; - this.reset(); - return Promise.resolve(); - } - getFinishedLogRecords() { - return this._finishedLogRecords; - } - reset() { - this._finishedLogRecords = []; - } - } - exports.InMemoryLogRecordExporter = InMemoryLogRecordExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/export/BatchLogRecordProcessorBase.js -var require_BatchLogRecordProcessorBase2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessorBase = undefined; - var core_1 = require_src89(); - var api_1 = require_src(); - var core_2 = require_src89(); - - class BatchLogRecordProcessorBase { - _exporter; - _maxExportBatchSize; - _maxQueueSize; - _scheduledDelayMillis; - _exportTimeoutMillis; - _finishedLogRecords = []; - _timer; - _shutdownOnce; - constructor(_exporter, config2) { - this._exporter = _exporter; - this._maxExportBatchSize = config2?.maxExportBatchSize ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_MAX_EXPORT_BATCH_SIZE") ?? 512; - this._maxQueueSize = config2?.maxQueueSize ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_MAX_QUEUE_SIZE") ?? 2048; - this._scheduledDelayMillis = config2?.scheduledDelayMillis ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_SCHEDULE_DELAY") ?? 5000; - this._exportTimeoutMillis = config2?.exportTimeoutMillis ?? (0, core_1.getNumberFromEnv)("OTEL_BLRP_EXPORT_TIMEOUT") ?? 30000; - this._shutdownOnce = new core_2.BindOnceFuture(this._shutdown, this); - if (this._maxExportBatchSize > this._maxQueueSize) { - api_1.diag.warn("BatchLogRecordProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"); - this._maxExportBatchSize = this._maxQueueSize; - } - } - onEmit(logRecord) { - if (this._shutdownOnce.isCalled) { - return; - } - this._addToBuffer(logRecord); - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - return this._shutdownOnce.promise; - } - return this._flushAll(); - } - shutdown() { - return this._shutdownOnce.call(); - } - async _shutdown() { - this.onShutdown(); - await this._flushAll(); - await this._exporter.shutdown(); - } - _addToBuffer(logRecord) { - if (this._finishedLogRecords.length >= this._maxQueueSize) { - return; - } - this._finishedLogRecords.push(logRecord); - this._maybeStartTimer(); - } - _flushAll() { - return new Promise((resolve2, reject) => { - const promises = []; - const batchCount = Math.ceil(this._finishedLogRecords.length / this._maxExportBatchSize); - for (let i = 0;i < batchCount; i++) { - promises.push(this._flushOneBatch()); - } - Promise.all(promises).then(() => { - resolve2(); - }).catch(reject); - }); - } - _flushOneBatch() { - this._clearTimer(); - if (this._finishedLogRecords.length === 0) { - return Promise.resolve(); - } - return new Promise((resolve2, reject) => { - (0, core_2.callWithTimeout)(this._export(this._finishedLogRecords.splice(0, this._maxExportBatchSize)), this._exportTimeoutMillis).then(() => resolve2()).catch(reject); - }); - } - _maybeStartTimer() { - if (this._timer !== undefined) { - return; - } - this._timer = setTimeout(() => { - this._flushOneBatch().then(() => { - if (this._finishedLogRecords.length > 0) { - this._clearTimer(); - this._maybeStartTimer(); - } - }).catch((e) => { - (0, core_2.globalErrorHandler)(e); - }); - }, this._scheduledDelayMillis); - (0, core_2.unrefTimer)(this._timer); - } - _clearTimer() { - if (this._timer !== undefined) { - clearTimeout(this._timer); - this._timer = undefined; - } - } - _export(logRecords) { - const doExport = () => core_2.internal._export(this._exporter, logRecords).then((result) => { - if (result.code !== core_2.ExportResultCode.SUCCESS) { - (0, core_2.globalErrorHandler)(result.error ?? new Error(`BatchLogRecordProcessor: log record export failed (status ${result})`)); - } - }).catch(core_2.globalErrorHandler); - const pendingResources = logRecords.map((logRecord) => logRecord.resource).filter((resource) => resource.asyncAttributesPending); - if (pendingResources.length === 0) { - return doExport(); - } else { - return Promise.all(pendingResources.map((resource) => resource.waitForAsyncAttributes?.())).then(doExport, core_2.globalErrorHandler); - } - } - } - exports.BatchLogRecordProcessorBase = BatchLogRecordProcessorBase; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/export/BatchLogRecordProcessor.js -var require_BatchLogRecordProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = undefined; - var BatchLogRecordProcessorBase_1 = require_BatchLogRecordProcessorBase2(); - - class BatchLogRecordProcessor extends BatchLogRecordProcessorBase_1.BatchLogRecordProcessorBase { - onShutdown() {} - } - exports.BatchLogRecordProcessor = BatchLogRecordProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/platform/node/index.js -var require_node23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = undefined; - var BatchLogRecordProcessor_1 = require_BatchLogRecordProcessor2(); - Object.defineProperty(exports, "BatchLogRecordProcessor", { enumerable: true, get: function() { - return BatchLogRecordProcessor_1.BatchLogRecordProcessor; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/platform/index.js -var require_platform22 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = undefined; - var node_1 = require_node23(); - Object.defineProperty(exports, "BatchLogRecordProcessor", { enumerable: true, get: function() { - return node_1.BatchLogRecordProcessor; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-logs@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-logs/build/src/index.js -var require_src92 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchLogRecordProcessor = exports.InMemoryLogRecordExporter = exports.SimpleLogRecordProcessor = exports.ConsoleLogRecordExporter = exports.NoopLogRecordProcessor = exports.LoggerProvider = undefined; - var LoggerProvider_1 = require_LoggerProvider2(); - Object.defineProperty(exports, "LoggerProvider", { enumerable: true, get: function() { - return LoggerProvider_1.LoggerProvider; - } }); - var NoopLogRecordProcessor_1 = require_NoopLogRecordProcessor2(); - Object.defineProperty(exports, "NoopLogRecordProcessor", { enumerable: true, get: function() { - return NoopLogRecordProcessor_1.NoopLogRecordProcessor; - } }); - var ConsoleLogRecordExporter_1 = require_ConsoleLogRecordExporter2(); - Object.defineProperty(exports, "ConsoleLogRecordExporter", { enumerable: true, get: function() { - return ConsoleLogRecordExporter_1.ConsoleLogRecordExporter; - } }); - var SimpleLogRecordProcessor_1 = require_SimpleLogRecordProcessor2(); - Object.defineProperty(exports, "SimpleLogRecordProcessor", { enumerable: true, get: function() { - return SimpleLogRecordProcessor_1.SimpleLogRecordProcessor; - } }); - var InMemoryLogRecordExporter_1 = require_InMemoryLogRecordExporter2(); - Object.defineProperty(exports, "InMemoryLogRecordExporter", { enumerable: true, get: function() { - return InMemoryLogRecordExporter_1.InMemoryLogRecordExporter; - } }); - var platform_1 = require_platform22(); - Object.defineProperty(exports, "BatchLogRecordProcessor", { enumerable: true, get: function() { - return platform_1.BatchLogRecordProcessor; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.js -var require_AggregationTemporality2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AggregationTemporality = undefined; - var AggregationTemporality2; - (function(AggregationTemporality3) { - AggregationTemporality3[AggregationTemporality3["DELTA"] = 0] = "DELTA"; - AggregationTemporality3[AggregationTemporality3["CUMULATIVE"] = 1] = "CUMULATIVE"; - })(AggregationTemporality2 = exports.AggregationTemporality || (exports.AggregationTemporality = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.js -var require_MetricData2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DataPointType = exports.InstrumentType = undefined; - var InstrumentType2; - (function(InstrumentType3) { - InstrumentType3["COUNTER"] = "COUNTER"; - InstrumentType3["GAUGE"] = "GAUGE"; - InstrumentType3["HISTOGRAM"] = "HISTOGRAM"; - InstrumentType3["UP_DOWN_COUNTER"] = "UP_DOWN_COUNTER"; - InstrumentType3["OBSERVABLE_COUNTER"] = "OBSERVABLE_COUNTER"; - InstrumentType3["OBSERVABLE_GAUGE"] = "OBSERVABLE_GAUGE"; - InstrumentType3["OBSERVABLE_UP_DOWN_COUNTER"] = "OBSERVABLE_UP_DOWN_COUNTER"; - })(InstrumentType2 = exports.InstrumentType || (exports.InstrumentType = {})); - var DataPointType2; - (function(DataPointType3) { - DataPointType3[DataPointType3["HISTOGRAM"] = 0] = "HISTOGRAM"; - DataPointType3[DataPointType3["EXPONENTIAL_HISTOGRAM"] = 1] = "EXPONENTIAL_HISTOGRAM"; - DataPointType3[DataPointType3["GAUGE"] = 2] = "GAUGE"; - DataPointType3[DataPointType3["SUM"] = 3] = "SUM"; - })(DataPointType2 = exports.DataPointType || (exports.DataPointType = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/utils.js -var require_utils48 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.equalsCaseInsensitive = exports.binarySearchUB = exports.setEquals = exports.FlatMap = exports.isPromiseAllSettledRejectionResult = exports.PromiseAllSettled = exports.callWithTimeout = exports.TimeoutError = exports.instrumentationScopeId = exports.hashAttributes = exports.isNotNullish = undefined; - function isNotNullish(item) { - return item !== undefined && item !== null; - } - exports.isNotNullish = isNotNullish; - function hashAttributes2(attributes) { - let keys = Object.keys(attributes); - if (keys.length === 0) - return ""; - keys = keys.sort(); - return JSON.stringify(keys.map((key) => [key, attributes[key]])); - } - exports.hashAttributes = hashAttributes2; - function instrumentationScopeId2(instrumentationScope) { - return `${instrumentationScope.name}:${instrumentationScope.version ?? ""}:${instrumentationScope.schemaUrl ?? ""}`; - } - exports.instrumentationScopeId = instrumentationScopeId2; - - class TimeoutError2 extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, TimeoutError2.prototype); - } - } - exports.TimeoutError = TimeoutError2; - function callWithTimeout2(promise2, timeout) { - let timeoutHandle; - const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) { - timeoutHandle = setTimeout(function timeoutHandler() { - reject(new TimeoutError2("Operation timed out.")); - }, timeout); - }); - return Promise.race([promise2, timeoutPromise]).then((result) => { - clearTimeout(timeoutHandle); - return result; - }, (reason) => { - clearTimeout(timeoutHandle); - throw reason; - }); - } - exports.callWithTimeout = callWithTimeout2; - async function PromiseAllSettled2(promises) { - return Promise.all(promises.map(async (p) => { - try { - const ret = await p; - return { - status: "fulfilled", - value: ret - }; - } catch (e) { - return { - status: "rejected", - reason: e - }; - } - })); - } - exports.PromiseAllSettled = PromiseAllSettled2; - function isPromiseAllSettledRejectionResult2(it) { - return it.status === "rejected"; - } - exports.isPromiseAllSettledRejectionResult = isPromiseAllSettledRejectionResult2; - function FlatMap(arr, fn) { - const result = []; - arr.forEach((it) => { - result.push(...fn(it)); - }); - return result; - } - exports.FlatMap = FlatMap; - function setEquals2(lhs, rhs) { - if (lhs.size !== rhs.size) { - return false; - } - for (const item of lhs) { - if (!rhs.has(item)) { - return false; - } - } - return true; - } - exports.setEquals = setEquals2; - function binarySearchUB2(arr, value) { - let lo = 0; - let hi = arr.length - 1; - let ret = arr.length; - while (hi >= lo) { - const mid = lo + Math.trunc((hi - lo) / 2); - if (arr[mid] < value) { - lo = mid + 1; - } else { - ret = mid; - hi = mid - 1; - } - } - return ret; - } - exports.binarySearchUB = binarySearchUB2; - function equalsCaseInsensitive2(lhs, rhs) { - return lhs.toLowerCase() === rhs.toLowerCase(); - } - exports.equalsCaseInsensitive = equalsCaseInsensitive2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.js -var require_types16 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AggregatorKind = undefined; - var AggregatorKind2; - (function(AggregatorKind3) { - AggregatorKind3[AggregatorKind3["DROP"] = 0] = "DROP"; - AggregatorKind3[AggregatorKind3["SUM"] = 1] = "SUM"; - AggregatorKind3[AggregatorKind3["LAST_VALUE"] = 2] = "LAST_VALUE"; - AggregatorKind3[AggregatorKind3["HISTOGRAM"] = 3] = "HISTOGRAM"; - AggregatorKind3[AggregatorKind3["EXPONENTIAL_HISTOGRAM"] = 4] = "EXPONENTIAL_HISTOGRAM"; - })(AggregatorKind2 = exports.AggregatorKind || (exports.AggregatorKind = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.js -var require_Drop2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DropAggregator = undefined; - var types_1 = require_types16(); - - class DropAggregator2 { - kind = types_1.AggregatorKind.DROP; - createAccumulation() { - return; - } - merge(_previous, _delta) { - return; - } - diff(_previous, _current) { - return; - } - toMetricData(_descriptor, _aggregationTemporality, _accumulationByAttributes, _endTime) { - return; - } - } - exports.DropAggregator = DropAggregator2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.js -var require_Histogram2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HistogramAggregator = exports.HistogramAccumulation = undefined; - var types_1 = require_types16(); - var MetricData_1 = require_MetricData2(); - var utils_1 = require_utils48(); - function createNewEmptyCheckpoint2(boundaries) { - const counts = boundaries.map(() => 0); - counts.push(0); - return { - buckets: { - boundaries, - counts - }, - sum: 0, - count: 0, - hasMinMax: false, - min: Infinity, - max: -Infinity - }; - } - - class HistogramAccumulation2 { - startTime; - _boundaries; - _recordMinMax; - _current; - constructor(startTime, _boundaries, _recordMinMax = true, _current = createNewEmptyCheckpoint2(_boundaries)) { - this.startTime = startTime; - this._boundaries = _boundaries; - this._recordMinMax = _recordMinMax; - this._current = _current; - } - record(value) { - if (Number.isNaN(value)) { - return; - } - this._current.count += 1; - this._current.sum += value; - if (this._recordMinMax) { - this._current.min = Math.min(value, this._current.min); - this._current.max = Math.max(value, this._current.max); - this._current.hasMinMax = true; - } - const idx = (0, utils_1.binarySearchUB)(this._boundaries, value); - this._current.buckets.counts[idx] += 1; - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } - } - exports.HistogramAccumulation = HistogramAccumulation2; - - class HistogramAggregator2 { - _boundaries; - _recordMinMax; - kind = types_1.AggregatorKind.HISTOGRAM; - constructor(_boundaries, _recordMinMax) { - this._boundaries = _boundaries; - this._recordMinMax = _recordMinMax; - } - createAccumulation(startTime) { - return new HistogramAccumulation2(startTime, this._boundaries, this._recordMinMax); - } - merge(previous, delta) { - const previousValue = previous.toPointValue(); - const deltaValue = delta.toPointValue(); - const previousCounts = previousValue.buckets.counts; - const deltaCounts = deltaValue.buckets.counts; - const mergedCounts = new Array(previousCounts.length); - for (let idx = 0;idx < previousCounts.length; idx++) { - mergedCounts[idx] = previousCounts[idx] + deltaCounts[idx]; - } - let min = Infinity; - let max = -Infinity; - if (this._recordMinMax) { - if (previousValue.hasMinMax && deltaValue.hasMinMax) { - min = Math.min(previousValue.min, deltaValue.min); - max = Math.max(previousValue.max, deltaValue.max); - } else if (previousValue.hasMinMax) { - min = previousValue.min; - max = previousValue.max; - } else if (deltaValue.hasMinMax) { - min = deltaValue.min; - max = deltaValue.max; - } - } - return new HistogramAccumulation2(previous.startTime, previousValue.buckets.boundaries, this._recordMinMax, { - buckets: { - boundaries: previousValue.buckets.boundaries, - counts: mergedCounts - }, - count: previousValue.count + deltaValue.count, - sum: previousValue.sum + deltaValue.sum, - hasMinMax: this._recordMinMax && (previousValue.hasMinMax || deltaValue.hasMinMax), - min, - max - }); - } - diff(previous, current) { - const previousValue = previous.toPointValue(); - const currentValue = current.toPointValue(); - const previousCounts = previousValue.buckets.counts; - const currentCounts = currentValue.buckets.counts; - const diffedCounts = new Array(previousCounts.length); - for (let idx = 0;idx < previousCounts.length; idx++) { - diffedCounts[idx] = currentCounts[idx] - previousCounts[idx]; - } - return new HistogramAccumulation2(current.startTime, previousValue.buckets.boundaries, this._recordMinMax, { - buckets: { - boundaries: previousValue.buckets.boundaries, - counts: diffedCounts - }, - count: currentValue.count - previousValue.count, - sum: currentValue.sum - previousValue.sum, - hasMinMax: false, - min: Infinity, - max: -Infinity - }); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.HISTOGRAM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - const pointValue = accumulation.toPointValue(); - const allowsNegativeValues = descriptor.type === MetricData_1.InstrumentType.GAUGE || descriptor.type === MetricData_1.InstrumentType.UP_DOWN_COUNTER || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_GAUGE || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER; - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: { - min: pointValue.hasMinMax ? pointValue.min : undefined, - max: pointValue.hasMinMax ? pointValue.max : undefined, - sum: !allowsNegativeValues ? pointValue.sum : undefined, - buckets: pointValue.buckets, - count: pointValue.count - } - }; - }) - }; - } - } - exports.HistogramAggregator = HistogramAggregator2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/Buckets.js -var require_Buckets2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Buckets = undefined; - - class Buckets2 { - backing; - indexBase; - indexStart; - indexEnd; - constructor(backing = new BucketsBacking2, indexBase = 0, indexStart = 0, indexEnd = 0) { - this.backing = backing; - this.indexBase = indexBase; - this.indexStart = indexStart; - this.indexEnd = indexEnd; - } - get offset() { - return this.indexStart; - } - get length() { - if (this.backing.length === 0) { - return 0; - } - if (this.indexEnd === this.indexStart && this.at(0) === 0) { - return 0; - } - return this.indexEnd - this.indexStart + 1; - } - counts() { - return Array.from({ length: this.length }, (_, i) => this.at(i)); - } - at(position) { - const bias = this.indexBase - this.indexStart; - if (position < bias) { - position += this.backing.length; - } - position -= bias; - return this.backing.countAt(position); - } - incrementBucket(bucketIndex, increment) { - this.backing.increment(bucketIndex, increment); - } - decrementBucket(bucketIndex, decrement) { - this.backing.decrement(bucketIndex, decrement); - } - trim() { - for (let i = 0;i < this.length; i++) { - if (this.at(i) !== 0) { - this.indexStart += i; - break; - } else if (i === this.length - 1) { - this.indexStart = this.indexEnd = this.indexBase = 0; - return; - } - } - for (let i = this.length - 1;i >= 0; i--) { - if (this.at(i) !== 0) { - this.indexEnd -= this.length - i - 1; - break; - } - } - this._rotate(); - } - downscale(by) { - this._rotate(); - const size = 1 + this.indexEnd - this.indexStart; - const each = 1 << by; - let inpos = 0; - let outpos = 0; - for (let pos = this.indexStart;pos <= this.indexEnd; ) { - let mod2 = pos % each; - if (mod2 < 0) { - mod2 += each; - } - for (let i = mod2;i < each && inpos < size; i++) { - this._relocateBucket(outpos, inpos); - inpos++; - pos++; - } - outpos++; - } - this.indexStart >>= by; - this.indexEnd >>= by; - this.indexBase = this.indexStart; - } - clone() { - return new Buckets2(this.backing.clone(), this.indexBase, this.indexStart, this.indexEnd); - } - _rotate() { - const bias = this.indexBase - this.indexStart; - if (bias === 0) { - return; - } else if (bias > 0) { - this.backing.reverse(0, this.backing.length); - this.backing.reverse(0, bias); - this.backing.reverse(bias, this.backing.length); - } else { - this.backing.reverse(0, this.backing.length); - this.backing.reverse(0, this.backing.length + bias); - } - this.indexBase = this.indexStart; - } - _relocateBucket(dest, src) { - if (dest === src) { - return; - } - this.incrementBucket(dest, this.backing.emptyBucket(src)); - } - } - exports.Buckets = Buckets2; - - class BucketsBacking2 { - _counts; - constructor(_counts = [0]) { - this._counts = _counts; - } - get length() { - return this._counts.length; - } - countAt(pos) { - return this._counts[pos]; - } - growTo(newSize, oldPositiveLimit, newPositiveLimit) { - const tmp = new Array(newSize).fill(0); - tmp.splice(newPositiveLimit, this._counts.length - oldPositiveLimit, ...this._counts.slice(oldPositiveLimit)); - tmp.splice(0, oldPositiveLimit, ...this._counts.slice(0, oldPositiveLimit)); - this._counts = tmp; - } - reverse(from, limit) { - const num = Math.floor((from + limit) / 2) - from; - for (let i = 0;i < num; i++) { - const tmp = this._counts[from + i]; - this._counts[from + i] = this._counts[limit - i - 1]; - this._counts[limit - i - 1] = tmp; - } - } - emptyBucket(src) { - const tmp = this._counts[src]; - this._counts[src] = 0; - return tmp; - } - increment(bucketIndex, increment) { - this._counts[bucketIndex] += increment; - } - decrement(bucketIndex, decrement) { - if (this._counts[bucketIndex] >= decrement) { - this._counts[bucketIndex] -= decrement; - } else { - this._counts[bucketIndex] = 0; - } - } - clone() { - return new BucketsBacking2([...this._counts]); - } - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ieee754.js -var require_ieee7542 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSignificand = exports.getNormalBase2 = exports.MIN_VALUE = exports.MAX_NORMAL_EXPONENT = exports.MIN_NORMAL_EXPONENT = exports.SIGNIFICAND_WIDTH = undefined; - exports.SIGNIFICAND_WIDTH = 52; - var EXPONENT_MASK2 = 2146435072; - var SIGNIFICAND_MASK2 = 1048575; - var EXPONENT_BIAS2 = 1023; - exports.MIN_NORMAL_EXPONENT = -EXPONENT_BIAS2 + 1; - exports.MAX_NORMAL_EXPONENT = EXPONENT_BIAS2; - exports.MIN_VALUE = Math.pow(2, -1022); - function getNormalBase22(value) { - const dv = new DataView(new ArrayBuffer(8)); - dv.setFloat64(0, value); - const hiBits = dv.getUint32(0); - const expBits = (hiBits & EXPONENT_MASK2) >> 20; - return expBits - EXPONENT_BIAS2; - } - exports.getNormalBase2 = getNormalBase22; - function getSignificand2(value) { - const dv = new DataView(new ArrayBuffer(8)); - dv.setFloat64(0, value); - const hiBits = dv.getUint32(0); - const loBits = dv.getUint32(4); - const significandHiBits = (hiBits & SIGNIFICAND_MASK2) * Math.pow(2, 32); - return significandHiBits + loBits; - } - exports.getSignificand = getSignificand2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/util.js -var require_util8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.nextGreaterSquare = exports.ldexp = undefined; - function ldexp2(frac, exp) { - if (frac === 0 || frac === Number.POSITIVE_INFINITY || frac === Number.NEGATIVE_INFINITY || Number.isNaN(frac)) { - return frac; - } - return frac * Math.pow(2, exp); - } - exports.ldexp = ldexp2; - function nextGreaterSquare2(v) { - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - return v; - } - exports.nextGreaterSquare = nextGreaterSquare2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/types.js -var require_types17 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MappingError = undefined; - - class MappingError2 extends Error { - } - exports.MappingError = MappingError2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ExponentMapping.js -var require_ExponentMapping2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExponentMapping = undefined; - var ieee754 = require_ieee7542(); - var util3 = require_util8(); - var types_1 = require_types17(); - - class ExponentMapping2 { - _shift; - constructor(scale) { - this._shift = -scale; - } - mapToIndex(value) { - if (value < ieee754.MIN_VALUE) { - return this._minNormalLowerBoundaryIndex(); - } - const exp = ieee754.getNormalBase2(value); - const correction = this._rightShift(ieee754.getSignificand(value) - 1, ieee754.SIGNIFICAND_WIDTH); - return exp + correction >> this._shift; - } - lowerBoundary(index) { - const minIndex = this._minNormalLowerBoundaryIndex(); - if (index < minIndex) { - throw new types_1.MappingError(`underflow: ${index} is < minimum lower boundary: ${minIndex}`); - } - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index > maxIndex) { - throw new types_1.MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`); - } - return util3.ldexp(1, index << this._shift); - } - get scale() { - if (this._shift === 0) { - return 0; - } - return -this._shift; - } - _minNormalLowerBoundaryIndex() { - let index = ieee754.MIN_NORMAL_EXPONENT >> this._shift; - if (this._shift < 2) { - index--; - } - return index; - } - _maxNormalLowerBoundaryIndex() { - return ieee754.MAX_NORMAL_EXPONENT >> this._shift; - } - _rightShift(value, shift) { - return Math.floor(value * Math.pow(2, -shift)); - } - } - exports.ExponentMapping = ExponentMapping2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/LogarithmMapping.js -var require_LogarithmMapping2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LogarithmMapping = undefined; - var ieee754 = require_ieee7542(); - var util3 = require_util8(); - var types_1 = require_types17(); - - class LogarithmMapping2 { - _scale; - _scaleFactor; - _inverseFactor; - constructor(scale) { - this._scale = scale; - this._scaleFactor = util3.ldexp(Math.LOG2E, scale); - this._inverseFactor = util3.ldexp(Math.LN2, -scale); - } - mapToIndex(value) { - if (value <= ieee754.MIN_VALUE) { - return this._minNormalLowerBoundaryIndex() - 1; - } - if (ieee754.getSignificand(value) === 0) { - const exp = ieee754.getNormalBase2(value); - return (exp << this._scale) - 1; - } - const index = Math.floor(Math.log(value) * this._scaleFactor); - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index >= maxIndex) { - return maxIndex; - } - return index; - } - lowerBoundary(index) { - const maxIndex = this._maxNormalLowerBoundaryIndex(); - if (index >= maxIndex) { - if (index === maxIndex) { - return 2 * Math.exp((index - (1 << this._scale)) / this._scaleFactor); - } - throw new types_1.MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`); - } - const minIndex = this._minNormalLowerBoundaryIndex(); - if (index <= minIndex) { - if (index === minIndex) { - return ieee754.MIN_VALUE; - } else if (index === minIndex - 1) { - return Math.exp((index + (1 << this._scale)) / this._scaleFactor) / 2; - } - throw new types_1.MappingError(`overflow: ${index} is < minimum lower boundary: ${minIndex}`); - } - return Math.exp(index * this._inverseFactor); - } - get scale() { - return this._scale; - } - _minNormalLowerBoundaryIndex() { - return ieee754.MIN_NORMAL_EXPONENT << this._scale; - } - _maxNormalLowerBoundaryIndex() { - return (ieee754.MAX_NORMAL_EXPONENT + 1 << this._scale) - 1; - } - } - exports.LogarithmMapping = LogarithmMapping2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/getMapping.js -var require_getMapping2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getMapping = undefined; - var ExponentMapping_1 = require_ExponentMapping2(); - var LogarithmMapping_1 = require_LogarithmMapping2(); - var types_1 = require_types17(); - var MIN_SCALE2 = -10; - var MAX_SCALE3 = 20; - var PREBUILT_MAPPINGS2 = Array.from({ length: 31 }, (_, i) => { - if (i > 10) { - return new LogarithmMapping_1.LogarithmMapping(i - 10); - } - return new ExponentMapping_1.ExponentMapping(i - 10); - }); - function getMapping2(scale) { - if (scale > MAX_SCALE3 || scale < MIN_SCALE2) { - throw new types_1.MappingError(`expected scale >= ${MIN_SCALE2} && <= ${MAX_SCALE3}, got: ${scale}`); - } - return PREBUILT_MAPPINGS2[scale + 10]; - } - exports.getMapping = getMapping2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.js -var require_ExponentialHistogram2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExponentialHistogramAggregator = exports.ExponentialHistogramAccumulation = undefined; - var types_1 = require_types16(); - var MetricData_1 = require_MetricData2(); - var api_1 = require_src(); - var Buckets_1 = require_Buckets2(); - var getMapping_1 = require_getMapping2(); - var util_1 = require_util8(); - - class HighLow2 { - low; - high; - static combine(h1, h2) { - return new HighLow2(Math.min(h1.low, h2.low), Math.max(h1.high, h2.high)); - } - constructor(low, high) { - this.low = low; - this.high = high; - } - } - var MAX_SCALE3 = 20; - var DEFAULT_MAX_SIZE2 = 160; - var MIN_MAX_SIZE2 = 2; - - class ExponentialHistogramAccumulation2 { - startTime; - _maxSize; - _recordMinMax; - _sum; - _count; - _zeroCount; - _min; - _max; - _positive; - _negative; - _mapping; - constructor(startTime = startTime, _maxSize2 = DEFAULT_MAX_SIZE2, _recordMinMax = true, _sum = 0, _count = 0, _zeroCount = 0, _min = Number.POSITIVE_INFINITY, _max = Number.NEGATIVE_INFINITY, _positive2 = new Buckets_1.Buckets, _negative2 = new Buckets_1.Buckets, _mapping = (0, getMapping_1.getMapping)(MAX_SCALE3)) { - this.startTime = startTime; - this._maxSize = _maxSize2; - this._recordMinMax = _recordMinMax; - this._sum = _sum; - this._count = _count; - this._zeroCount = _zeroCount; - this._min = _min; - this._max = _max; - this._positive = _positive2; - this._negative = _negative2; - this._mapping = _mapping; - if (this._maxSize < MIN_MAX_SIZE2) { - api_1.diag.warn(`Exponential Histogram Max Size set to ${this._maxSize}, changing to the minimum size of: ${MIN_MAX_SIZE2}`); - this._maxSize = MIN_MAX_SIZE2; - } - } - record(value) { - this.updateByIncrement(value, 1); - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return { - hasMinMax: this._recordMinMax, - min: this.min, - max: this.max, - sum: this.sum, - positive: { - offset: this.positive.offset, - bucketCounts: this.positive.counts() - }, - negative: { - offset: this.negative.offset, - bucketCounts: this.negative.counts() - }, - count: this.count, - scale: this.scale, - zeroCount: this.zeroCount - }; - } - get sum() { - return this._sum; - } - get min() { - return this._min; - } - get max() { - return this._max; - } - get count() { - return this._count; - } - get zeroCount() { - return this._zeroCount; - } - get scale() { - if (this._count === this._zeroCount) { - return 0; - } - return this._mapping.scale; - } - get positive() { - return this._positive; - } - get negative() { - return this._negative; - } - updateByIncrement(value, increment) { - if (Number.isNaN(value)) { - return; - } - if (value > this._max) { - this._max = value; - } - if (value < this._min) { - this._min = value; - } - this._count += increment; - if (value === 0) { - this._zeroCount += increment; - return; - } - this._sum += value * increment; - if (value > 0) { - this._updateBuckets(this._positive, value, increment); - } else { - this._updateBuckets(this._negative, -value, increment); - } - } - merge(previous) { - if (this._count === 0) { - this._min = previous.min; - this._max = previous.max; - } else if (previous.count !== 0) { - if (previous.min < this.min) { - this._min = previous.min; - } - if (previous.max > this.max) { - this._max = previous.max; - } - } - this.startTime = previous.startTime; - this._sum += previous.sum; - this._count += previous.count; - this._zeroCount += previous.zeroCount; - const minScale = this._minScale(previous); - this._downscale(this.scale - minScale); - this._mergeBuckets(this.positive, previous, previous.positive, minScale); - this._mergeBuckets(this.negative, previous, previous.negative, minScale); - } - diff(other) { - this._min = Infinity; - this._max = -Infinity; - this._sum -= other.sum; - this._count -= other.count; - this._zeroCount -= other.zeroCount; - const minScale = this._minScale(other); - this._downscale(this.scale - minScale); - this._diffBuckets(this.positive, other, other.positive, minScale); - this._diffBuckets(this.negative, other, other.negative, minScale); - } - clone() { - return new ExponentialHistogramAccumulation2(this.startTime, this._maxSize, this._recordMinMax, this._sum, this._count, this._zeroCount, this._min, this._max, this.positive.clone(), this.negative.clone(), this._mapping); - } - _updateBuckets(buckets, value, increment) { - let index = this._mapping.mapToIndex(value); - let rescalingNeeded = false; - let high = 0; - let low = 0; - if (buckets.length === 0) { - buckets.indexStart = index; - buckets.indexEnd = buckets.indexStart; - buckets.indexBase = buckets.indexStart; - } else if (index < buckets.indexStart && buckets.indexEnd - index >= this._maxSize) { - rescalingNeeded = true; - low = index; - high = buckets.indexEnd; - } else if (index > buckets.indexEnd && index - buckets.indexStart >= this._maxSize) { - rescalingNeeded = true; - low = buckets.indexStart; - high = index; - } - if (rescalingNeeded) { - const change = this._changeScale(high, low); - this._downscale(change); - index = this._mapping.mapToIndex(value); - } - this._incrementIndexBy(buckets, index, increment); - } - _incrementIndexBy(buckets, index, increment) { - if (increment === 0) { - return; - } - if (buckets.length === 0) { - buckets.indexStart = buckets.indexEnd = buckets.indexBase = index; - } - if (index < buckets.indexStart) { - const span = buckets.indexEnd - index; - if (span >= buckets.backing.length) { - this._grow(buckets, span + 1); - } - buckets.indexStart = index; - } else if (index > buckets.indexEnd) { - const span = index - buckets.indexStart; - if (span >= buckets.backing.length) { - this._grow(buckets, span + 1); - } - buckets.indexEnd = index; - } - let bucketIndex = index - buckets.indexBase; - if (bucketIndex < 0) { - bucketIndex += buckets.backing.length; - } - buckets.incrementBucket(bucketIndex, increment); - } - _grow(buckets, needed) { - const size = buckets.backing.length; - const bias = buckets.indexBase - buckets.indexStart; - const oldPositiveLimit = size - bias; - let newSize = (0, util_1.nextGreaterSquare)(needed); - if (newSize > this._maxSize) { - newSize = this._maxSize; - } - const newPositiveLimit = newSize - bias; - buckets.backing.growTo(newSize, oldPositiveLimit, newPositiveLimit); - } - _changeScale(high, low) { - let change = 0; - while (high - low >= this._maxSize) { - high >>= 1; - low >>= 1; - change++; - } - return change; - } - _downscale(change) { - if (change === 0) { - return; - } - if (change < 0) { - throw new Error(`impossible change of scale: ${this.scale}`); - } - const newScale = this._mapping.scale - change; - this._positive.downscale(change); - this._negative.downscale(change); - this._mapping = (0, getMapping_1.getMapping)(newScale); - } - _minScale(other) { - const minScale = Math.min(this.scale, other.scale); - const highLowPos = HighLow2.combine(this._highLowAtScale(this.positive, this.scale, minScale), this._highLowAtScale(other.positive, other.scale, minScale)); - const highLowNeg = HighLow2.combine(this._highLowAtScale(this.negative, this.scale, minScale), this._highLowAtScale(other.negative, other.scale, minScale)); - return Math.min(minScale - this._changeScale(highLowPos.high, highLowPos.low), minScale - this._changeScale(highLowNeg.high, highLowNeg.low)); - } - _highLowAtScale(buckets, currentScale, newScale) { - if (buckets.length === 0) { - return new HighLow2(0, -1); - } - const shift = currentScale - newScale; - return new HighLow2(buckets.indexStart >> shift, buckets.indexEnd >> shift); - } - _mergeBuckets(ours, other, theirs, scale) { - const theirOffset = theirs.offset; - const theirChange = other.scale - scale; - for (let i = 0;i < theirs.length; i++) { - this._incrementIndexBy(ours, theirOffset + i >> theirChange, theirs.at(i)); - } - } - _diffBuckets(ours, other, theirs, scale) { - const theirOffset = theirs.offset; - const theirChange = other.scale - scale; - for (let i = 0;i < theirs.length; i++) { - const ourIndex = theirOffset + i >> theirChange; - let bucketIndex = ourIndex - ours.indexBase; - if (bucketIndex < 0) { - bucketIndex += ours.backing.length; - } - ours.decrementBucket(bucketIndex, theirs.at(i)); - } - ours.trim(); - } - } - exports.ExponentialHistogramAccumulation = ExponentialHistogramAccumulation2; - - class ExponentialHistogramAggregator2 { - _maxSize; - _recordMinMax; - kind = types_1.AggregatorKind.EXPONENTIAL_HISTOGRAM; - constructor(_maxSize2, _recordMinMax) { - this._maxSize = _maxSize2; - this._recordMinMax = _recordMinMax; - } - createAccumulation(startTime) { - return new ExponentialHistogramAccumulation2(startTime, this._maxSize, this._recordMinMax); - } - merge(previous, delta) { - const result = delta.clone(); - result.merge(previous); - return result; - } - diff(previous, current) { - const result = current.clone(); - result.diff(previous); - return result; - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.EXPONENTIAL_HISTOGRAM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - const pointValue = accumulation.toPointValue(); - const allowsNegativeValues = descriptor.type === MetricData_1.InstrumentType.GAUGE || descriptor.type === MetricData_1.InstrumentType.UP_DOWN_COUNTER || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_GAUGE || descriptor.type === MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER; - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: { - min: pointValue.hasMinMax ? pointValue.min : undefined, - max: pointValue.hasMinMax ? pointValue.max : undefined, - sum: !allowsNegativeValues ? pointValue.sum : undefined, - positive: { - offset: pointValue.positive.offset, - bucketCounts: pointValue.positive.bucketCounts - }, - negative: { - offset: pointValue.negative.offset, - bucketCounts: pointValue.negative.bucketCounts - }, - count: pointValue.count, - scale: pointValue.scale, - zeroCount: pointValue.zeroCount - } - }; - }) - }; - } - } - exports.ExponentialHistogramAggregator = ExponentialHistogramAggregator2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.js -var require_LastValue2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LastValueAggregator = exports.LastValueAccumulation = undefined; - var types_1 = require_types16(); - var core_1 = require_src89(); - var MetricData_1 = require_MetricData2(); - - class LastValueAccumulation2 { - startTime; - _current; - sampleTime; - constructor(startTime, _current = 0, sampleTime = [0, 0]) { - this.startTime = startTime; - this._current = _current; - this.sampleTime = sampleTime; - } - record(value) { - this._current = value; - this.sampleTime = (0, core_1.millisToHrTime)(Date.now()); - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } - } - exports.LastValueAccumulation = LastValueAccumulation2; - - class LastValueAggregator2 { - kind = types_1.AggregatorKind.LAST_VALUE; - createAccumulation(startTime) { - return new LastValueAccumulation2(startTime); - } - merge(previous, delta) { - const latestAccumulation = (0, core_1.hrTimeToMicroseconds)(delta.sampleTime) >= (0, core_1.hrTimeToMicroseconds)(previous.sampleTime) ? delta : previous; - return new LastValueAccumulation2(previous.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime); - } - diff(previous, current) { - const latestAccumulation = (0, core_1.hrTimeToMicroseconds)(current.sampleTime) >= (0, core_1.hrTimeToMicroseconds)(previous.sampleTime) ? current : previous; - return new LastValueAccumulation2(current.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.GAUGE, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: accumulation.toPointValue() - }; - }) - }; - } - } - exports.LastValueAggregator = LastValueAggregator2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.js -var require_Sum2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SumAggregator = exports.SumAccumulation = undefined; - var types_1 = require_types16(); - var MetricData_1 = require_MetricData2(); - - class SumAccumulation2 { - startTime; - monotonic; - _current; - reset; - constructor(startTime, monotonic, _current = 0, reset2 = false) { - this.startTime = startTime; - this.monotonic = monotonic; - this._current = _current; - this.reset = reset2; - } - record(value) { - if (this.monotonic && value < 0) { - return; - } - this._current += value; - } - setStartTime(startTime) { - this.startTime = startTime; - } - toPointValue() { - return this._current; - } - } - exports.SumAccumulation = SumAccumulation2; - - class SumAggregator2 { - monotonic; - kind = types_1.AggregatorKind.SUM; - constructor(monotonic) { - this.monotonic = monotonic; - } - createAccumulation(startTime) { - return new SumAccumulation2(startTime, this.monotonic); - } - merge(previous, delta) { - const prevPv = previous.toPointValue(); - const deltaPv = delta.toPointValue(); - if (delta.reset) { - return new SumAccumulation2(delta.startTime, this.monotonic, deltaPv, delta.reset); - } - return new SumAccumulation2(previous.startTime, this.monotonic, prevPv + deltaPv); - } - diff(previous, current) { - const prevPv = previous.toPointValue(); - const currPv = current.toPointValue(); - if (this.monotonic && prevPv > currPv) { - return new SumAccumulation2(current.startTime, this.monotonic, currPv, true); - } - return new SumAccumulation2(current.startTime, this.monotonic, currPv - prevPv); - } - toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) { - return { - descriptor, - aggregationTemporality, - dataPointType: MetricData_1.DataPointType.SUM, - dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => { - return { - attributes, - startTime: accumulation.startTime, - endTime, - value: accumulation.toPointValue() - }; - }), - isMonotonic: this.monotonic - }; - } - } - exports.SumAggregator = SumAggregator2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.js -var require_aggregator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SumAggregator = exports.SumAccumulation = exports.LastValueAggregator = exports.LastValueAccumulation = exports.ExponentialHistogramAggregator = exports.ExponentialHistogramAccumulation = exports.HistogramAggregator = exports.HistogramAccumulation = exports.DropAggregator = undefined; - var Drop_1 = require_Drop2(); - Object.defineProperty(exports, "DropAggregator", { enumerable: true, get: function() { - return Drop_1.DropAggregator; - } }); - var Histogram_1 = require_Histogram2(); - Object.defineProperty(exports, "HistogramAccumulation", { enumerable: true, get: function() { - return Histogram_1.HistogramAccumulation; - } }); - Object.defineProperty(exports, "HistogramAggregator", { enumerable: true, get: function() { - return Histogram_1.HistogramAggregator; - } }); - var ExponentialHistogram_1 = require_ExponentialHistogram2(); - Object.defineProperty(exports, "ExponentialHistogramAccumulation", { enumerable: true, get: function() { - return ExponentialHistogram_1.ExponentialHistogramAccumulation; - } }); - Object.defineProperty(exports, "ExponentialHistogramAggregator", { enumerable: true, get: function() { - return ExponentialHistogram_1.ExponentialHistogramAggregator; - } }); - var LastValue_1 = require_LastValue2(); - Object.defineProperty(exports, "LastValueAccumulation", { enumerable: true, get: function() { - return LastValue_1.LastValueAccumulation; - } }); - Object.defineProperty(exports, "LastValueAggregator", { enumerable: true, get: function() { - return LastValue_1.LastValueAggregator; - } }); - var Sum_1 = require_Sum2(); - Object.defineProperty(exports, "SumAccumulation", { enumerable: true, get: function() { - return Sum_1.SumAccumulation; - } }); - Object.defineProperty(exports, "SumAggregator", { enumerable: true, get: function() { - return Sum_1.SumAggregator; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.js -var require_Aggregation2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_AGGREGATION = exports.EXPONENTIAL_HISTOGRAM_AGGREGATION = exports.HISTOGRAM_AGGREGATION = exports.LAST_VALUE_AGGREGATION = exports.SUM_AGGREGATION = exports.DROP_AGGREGATION = exports.DefaultAggregation = exports.ExponentialHistogramAggregation = exports.ExplicitBucketHistogramAggregation = exports.HistogramAggregation = exports.LastValueAggregation = exports.SumAggregation = exports.DropAggregation = undefined; - var api8 = require_src(); - var aggregator_1 = require_aggregator2(); - var MetricData_1 = require_MetricData2(); - - class DropAggregation2 { - static DEFAULT_INSTANCE = new aggregator_1.DropAggregator; - createAggregator(_instrument) { - return DropAggregation2.DEFAULT_INSTANCE; - } - } - exports.DropAggregation = DropAggregation2; - - class SumAggregation2 { - static MONOTONIC_INSTANCE = new aggregator_1.SumAggregator(true); - static NON_MONOTONIC_INSTANCE = new aggregator_1.SumAggregator(false); - createAggregator(instrument) { - switch (instrument.type) { - case MetricData_1.InstrumentType.COUNTER: - case MetricData_1.InstrumentType.OBSERVABLE_COUNTER: - case MetricData_1.InstrumentType.HISTOGRAM: { - return SumAggregation2.MONOTONIC_INSTANCE; - } - default: { - return SumAggregation2.NON_MONOTONIC_INSTANCE; - } - } - } - } - exports.SumAggregation = SumAggregation2; - - class LastValueAggregation2 { - static DEFAULT_INSTANCE = new aggregator_1.LastValueAggregator; - createAggregator(_instrument) { - return LastValueAggregation2.DEFAULT_INSTANCE; - } - } - exports.LastValueAggregation = LastValueAggregation2; - - class HistogramAggregation2 { - static DEFAULT_INSTANCE = new aggregator_1.HistogramAggregator([0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 1e4], true); - createAggregator(_instrument) { - return HistogramAggregation2.DEFAULT_INSTANCE; - } - } - exports.HistogramAggregation = HistogramAggregation2; - - class ExplicitBucketHistogramAggregation2 { - _recordMinMax; - _boundaries; - constructor(boundaries, _recordMinMax = true) { - this._recordMinMax = _recordMinMax; - if (boundaries == null) { - throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array"); - } - boundaries = boundaries.concat(); - boundaries = boundaries.sort((a, b) => a - b); - const minusInfinityIndex = boundaries.lastIndexOf(-Infinity); - let infinityIndex = boundaries.indexOf(Infinity); - if (infinityIndex === -1) { - infinityIndex = undefined; - } - this._boundaries = boundaries.slice(minusInfinityIndex + 1, infinityIndex); - } - createAggregator(_instrument) { - return new aggregator_1.HistogramAggregator(this._boundaries, this._recordMinMax); - } - } - exports.ExplicitBucketHistogramAggregation = ExplicitBucketHistogramAggregation2; - - class ExponentialHistogramAggregation2 { - _maxSize; - _recordMinMax; - constructor(_maxSize2 = 160, _recordMinMax = true) { - this._maxSize = _maxSize2; - this._recordMinMax = _recordMinMax; - } - createAggregator(_instrument) { - return new aggregator_1.ExponentialHistogramAggregator(this._maxSize, this._recordMinMax); - } - } - exports.ExponentialHistogramAggregation = ExponentialHistogramAggregation2; - - class DefaultAggregation2 { - _resolve(instrument) { - switch (instrument.type) { - case MetricData_1.InstrumentType.COUNTER: - case MetricData_1.InstrumentType.UP_DOWN_COUNTER: - case MetricData_1.InstrumentType.OBSERVABLE_COUNTER: - case MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: { - return exports.SUM_AGGREGATION; - } - case MetricData_1.InstrumentType.GAUGE: - case MetricData_1.InstrumentType.OBSERVABLE_GAUGE: { - return exports.LAST_VALUE_AGGREGATION; - } - case MetricData_1.InstrumentType.HISTOGRAM: { - if (instrument.advice.explicitBucketBoundaries) { - return new ExplicitBucketHistogramAggregation2(instrument.advice.explicitBucketBoundaries); - } - return exports.HISTOGRAM_AGGREGATION; - } - } - api8.diag.warn(`Unable to recognize instrument type: ${instrument.type}`); - return exports.DROP_AGGREGATION; - } - createAggregator(instrument) { - return this._resolve(instrument).createAggregator(instrument); - } - } - exports.DefaultAggregation = DefaultAggregation2; - exports.DROP_AGGREGATION = new DropAggregation2; - exports.SUM_AGGREGATION = new SumAggregation2; - exports.LAST_VALUE_AGGREGATION = new LastValueAggregation2; - exports.HISTOGRAM_AGGREGATION = new HistogramAggregation2; - exports.EXPONENTIAL_HISTOGRAM_AGGREGATION = new ExponentialHistogramAggregation2; - exports.DEFAULT_AGGREGATION = new DefaultAggregation2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.js -var require_AggregationOption2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toAggregation = exports.AggregationType = undefined; - var Aggregation_1 = require_Aggregation2(); - var AggregationType2; - (function(AggregationType3) { - AggregationType3[AggregationType3["DEFAULT"] = 0] = "DEFAULT"; - AggregationType3[AggregationType3["DROP"] = 1] = "DROP"; - AggregationType3[AggregationType3["SUM"] = 2] = "SUM"; - AggregationType3[AggregationType3["LAST_VALUE"] = 3] = "LAST_VALUE"; - AggregationType3[AggregationType3["EXPLICIT_BUCKET_HISTOGRAM"] = 4] = "EXPLICIT_BUCKET_HISTOGRAM"; - AggregationType3[AggregationType3["EXPONENTIAL_HISTOGRAM"] = 5] = "EXPONENTIAL_HISTOGRAM"; - })(AggregationType2 = exports.AggregationType || (exports.AggregationType = {})); - function toAggregation2(option) { - switch (option.type) { - case AggregationType2.DEFAULT: - return Aggregation_1.DEFAULT_AGGREGATION; - case AggregationType2.DROP: - return Aggregation_1.DROP_AGGREGATION; - case AggregationType2.SUM: - return Aggregation_1.SUM_AGGREGATION; - case AggregationType2.LAST_VALUE: - return Aggregation_1.LAST_VALUE_AGGREGATION; - case AggregationType2.EXPONENTIAL_HISTOGRAM: { - const expOption = option; - return new Aggregation_1.ExponentialHistogramAggregation(expOption.options?.maxSize, expOption.options?.recordMinMax); - } - case AggregationType2.EXPLICIT_BUCKET_HISTOGRAM: { - const expOption = option; - if (expOption.options == null) { - return Aggregation_1.HISTOGRAM_AGGREGATION; - } else { - return new Aggregation_1.ExplicitBucketHistogramAggregation(expOption.options?.boundaries, expOption.options?.recordMinMax); - } - } - default: - throw new Error("Unsupported Aggregation"); - } - } - exports.toAggregation = toAggregation2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.js -var require_AggregationSelector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = exports.DEFAULT_AGGREGATION_SELECTOR = undefined; - var AggregationTemporality_1 = require_AggregationTemporality2(); - var AggregationOption_1 = require_AggregationOption2(); - var DEFAULT_AGGREGATION_SELECTOR2 = (_instrumentType) => { - return { - type: AggregationOption_1.AggregationType.DEFAULT - }; - }; - exports.DEFAULT_AGGREGATION_SELECTOR = DEFAULT_AGGREGATION_SELECTOR2; - var DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR2 = (_instrumentType) => AggregationTemporality_1.AggregationTemporality.CUMULATIVE; - exports.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.js -var require_MetricReader2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricReader = undefined; - var api8 = require_src(); - var utils_1 = require_utils48(); - var AggregationSelector_1 = require_AggregationSelector2(); - - class MetricReader2 { - _shutdown = false; - _metricProducers; - _sdkMetricProducer; - _aggregationTemporalitySelector; - _aggregationSelector; - _cardinalitySelector; - constructor(options) { - this._aggregationSelector = options?.aggregationSelector ?? AggregationSelector_1.DEFAULT_AGGREGATION_SELECTOR; - this._aggregationTemporalitySelector = options?.aggregationTemporalitySelector ?? AggregationSelector_1.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; - this._metricProducers = options?.metricProducers ?? []; - this._cardinalitySelector = options?.cardinalitySelector; - } - setMetricProducer(metricProducer) { - if (this._sdkMetricProducer) { - throw new Error("MetricReader can not be bound to a MeterProvider again."); - } - this._sdkMetricProducer = metricProducer; - this.onInitialized(); - } - selectAggregation(instrumentType) { - return this._aggregationSelector(instrumentType); - } - selectAggregationTemporality(instrumentType) { - return this._aggregationTemporalitySelector(instrumentType); - } - selectCardinalityLimit(instrumentType) { - return this._cardinalitySelector ? this._cardinalitySelector(instrumentType) : 2000; - } - onInitialized() {} - async collect(options) { - if (this._sdkMetricProducer === undefined) { - throw new Error("MetricReader is not bound to a MetricProducer"); - } - if (this._shutdown) { - throw new Error("MetricReader is shutdown"); - } - const [sdkCollectionResults, ...additionalCollectionResults] = await Promise.all([ - this._sdkMetricProducer.collect({ - timeoutMillis: options?.timeoutMillis - }), - ...this._metricProducers.map((producer) => producer.collect({ - timeoutMillis: options?.timeoutMillis - })) - ]); - const errors3 = sdkCollectionResults.errors.concat((0, utils_1.FlatMap)(additionalCollectionResults, (result) => result.errors)); - const resource = sdkCollectionResults.resourceMetrics.resource; - const scopeMetrics = sdkCollectionResults.resourceMetrics.scopeMetrics.concat((0, utils_1.FlatMap)(additionalCollectionResults, (result) => result.resourceMetrics.scopeMetrics)); - return { - resourceMetrics: { - resource, - scopeMetrics - }, - errors: errors3 - }; - } - async shutdown(options) { - if (this._shutdown) { - api8.diag.error("Cannot call shutdown twice."); - return; - } - if (options?.timeoutMillis == null) { - await this.onShutdown(); - } else { - await (0, utils_1.callWithTimeout)(this.onShutdown(), options.timeoutMillis); - } - this._shutdown = true; - } - async forceFlush(options) { - if (this._shutdown) { - api8.diag.warn("Cannot forceFlush on already shutdown MetricReader."); - return; - } - if (options?.timeoutMillis == null) { - await this.onForceFlush(); - return; - } - await (0, utils_1.callWithTimeout)(this.onForceFlush(), options.timeoutMillis); - } - } - exports.MetricReader = MetricReader2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.js -var require_PeriodicExportingMetricReader2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PeriodicExportingMetricReader = undefined; - var api8 = require_src(); - var core_1 = require_src89(); - var MetricReader_1 = require_MetricReader2(); - var utils_1 = require_utils48(); - - class PeriodicExportingMetricReader2 extends MetricReader_1.MetricReader { - _interval; - _exporter; - _exportInterval; - _exportTimeout; - constructor(options) { - super({ - aggregationSelector: options.exporter.selectAggregation?.bind(options.exporter), - aggregationTemporalitySelector: options.exporter.selectAggregationTemporality?.bind(options.exporter), - metricProducers: options.metricProducers - }); - if (options.exportIntervalMillis !== undefined && options.exportIntervalMillis <= 0) { - throw Error("exportIntervalMillis must be greater than 0"); - } - if (options.exportTimeoutMillis !== undefined && options.exportTimeoutMillis <= 0) { - throw Error("exportTimeoutMillis must be greater than 0"); - } - if (options.exportTimeoutMillis !== undefined && options.exportIntervalMillis !== undefined && options.exportIntervalMillis < options.exportTimeoutMillis) { - throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis"); - } - this._exportInterval = options.exportIntervalMillis ?? 60000; - this._exportTimeout = options.exportTimeoutMillis ?? 30000; - this._exporter = options.exporter; - } - async _runOnce() { - try { - await (0, utils_1.callWithTimeout)(this._doRun(), this._exportTimeout); - } catch (err) { - if (err instanceof utils_1.TimeoutError) { - api8.diag.error("Export took longer than %s milliseconds and timed out.", this._exportTimeout); - return; - } - (0, core_1.globalErrorHandler)(err); - } - } - async _doRun() { - const { resourceMetrics, errors: errors3 } = await this.collect({ - timeoutMillis: this._exportTimeout - }); - if (errors3.length > 0) { - api8.diag.error("PeriodicExportingMetricReader: metrics collection errors", ...errors3); - } - if (resourceMetrics.resource.asyncAttributesPending) { - try { - await resourceMetrics.resource.waitForAsyncAttributes?.(); - } catch (e) { - api8.diag.debug("Error while resolving async portion of resource: ", e); - (0, core_1.globalErrorHandler)(e); - } - } - if (resourceMetrics.scopeMetrics.length === 0) { - return; - } - const result = await core_1.internal._export(this._exporter, resourceMetrics); - if (result.code !== core_1.ExportResultCode.SUCCESS) { - throw new Error(`PeriodicExportingMetricReader: metrics export failed (error ${result.error})`); - } - } - onInitialized() { - this._interval = setInterval(() => { - this._runOnce(); - }, this._exportInterval); - (0, core_1.unrefTimer)(this._interval); - } - async onForceFlush() { - await this._runOnce(); - await this._exporter.forceFlush(); - } - async onShutdown() { - if (this._interval) { - clearInterval(this._interval); - } - await this.onForceFlush(); - await this._exporter.shutdown(); - } - } - exports.PeriodicExportingMetricReader = PeriodicExportingMetricReader2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.js -var require_InMemoryMetricExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InMemoryMetricExporter = undefined; - var core_1 = require_src89(); - - class InMemoryMetricExporter { - _shutdown = false; - _aggregationTemporality; - _metrics = []; - constructor(aggregationTemporality) { - this._aggregationTemporality = aggregationTemporality; - } - export(metrics, resultCallback) { - if (this._shutdown) { - setTimeout(() => resultCallback({ code: core_1.ExportResultCode.FAILED }), 0); - return; - } - this._metrics.push(metrics); - setTimeout(() => resultCallback({ code: core_1.ExportResultCode.SUCCESS }), 0); - } - getMetrics() { - return this._metrics; - } - forceFlush() { - return Promise.resolve(); - } - reset() { - this._metrics = []; - } - selectAggregationTemporality(_instrumentType) { - return this._aggregationTemporality; - } - shutdown() { - this._shutdown = true; - return Promise.resolve(); - } - } - exports.InMemoryMetricExporter = InMemoryMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.js -var require_ConsoleMetricExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleMetricExporter = undefined; - var core_1 = require_src89(); - var AggregationSelector_1 = require_AggregationSelector2(); - - class ConsoleMetricExporter { - _shutdown = false; - _temporalitySelector; - constructor(options) { - this._temporalitySelector = options?.temporalitySelector ?? AggregationSelector_1.DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; - } - export(metrics, resultCallback) { - if (this._shutdown) { - setImmediate(resultCallback, { code: core_1.ExportResultCode.FAILED }); - return; - } - return ConsoleMetricExporter._sendMetrics(metrics, resultCallback); - } - forceFlush() { - return Promise.resolve(); - } - selectAggregationTemporality(_instrumentType) { - return this._temporalitySelector(_instrumentType); - } - shutdown() { - this._shutdown = true; - return Promise.resolve(); - } - static _sendMetrics(metrics, done) { - for (const scopeMetrics of metrics.scopeMetrics) { - for (const metric of scopeMetrics.metrics) { - console.dir({ - descriptor: metric.descriptor, - dataPointType: metric.dataPointType, - dataPoints: metric.dataPoints - }, { depth: null }); - } - } - done({ code: core_1.ExportResultCode.SUCCESS }); - } - } - exports.ConsoleMetricExporter = ConsoleMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/ViewRegistry.js -var require_ViewRegistry2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ViewRegistry = undefined; - - class ViewRegistry2 { - _registeredViews = []; - addView(view) { - this._registeredViews.push(view); - } - findViews(instrument, meter) { - const views = this._registeredViews.filter((registeredView) => { - return this._matchInstrument(registeredView.instrumentSelector, instrument) && this._matchMeter(registeredView.meterSelector, meter); - }); - return views; - } - _matchInstrument(selector, instrument) { - return (selector.getType() === undefined || instrument.type === selector.getType()) && selector.getNameFilter().match(instrument.name) && selector.getUnitFilter().match(instrument.unit); - } - _matchMeter(selector, meter) { - return selector.getNameFilter().match(meter.name) && (meter.version === undefined || selector.getVersionFilter().match(meter.version)) && (meter.schemaUrl === undefined || selector.getSchemaUrlFilter().match(meter.schemaUrl)); - } - } - exports.ViewRegistry = ViewRegistry2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.js -var require_InstrumentDescriptor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isValidName = exports.isDescriptorCompatibleWith = exports.createInstrumentDescriptorWithView = exports.createInstrumentDescriptor = undefined; - var api_1 = require_src(); - var utils_1 = require_utils48(); - function createInstrumentDescriptor2(name, type, options) { - if (!isValidName2(name)) { - api_1.diag.warn(`Invalid metric name: "${name}". The metric name should be a ASCII string with a length no greater than 255 characters.`); - } - return { - name, - type, - description: options?.description ?? "", - unit: options?.unit ?? "", - valueType: options?.valueType ?? api_1.ValueType.DOUBLE, - advice: options?.advice ?? {} - }; - } - exports.createInstrumentDescriptor = createInstrumentDescriptor2; - function createInstrumentDescriptorWithView2(view, instrument) { - return { - name: view.name ?? instrument.name, - description: view.description ?? instrument.description, - type: instrument.type, - unit: instrument.unit, - valueType: instrument.valueType, - advice: instrument.advice - }; - } - exports.createInstrumentDescriptorWithView = createInstrumentDescriptorWithView2; - function isDescriptorCompatibleWith2(descriptor, otherDescriptor) { - return (0, utils_1.equalsCaseInsensitive)(descriptor.name, otherDescriptor.name) && descriptor.unit === otherDescriptor.unit && descriptor.type === otherDescriptor.type && descriptor.valueType === otherDescriptor.valueType; - } - exports.isDescriptorCompatibleWith = isDescriptorCompatibleWith2; - var NAME_REGEXP2 = /^[a-z][a-z0-9_.\-/]{0,254}$/i; - function isValidName2(name) { - return name.match(NAME_REGEXP2) != null; - } - exports.isValidName = isValidName2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/Instruments.js -var require_Instruments2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isObservableInstrument = exports.ObservableUpDownCounterInstrument = exports.ObservableGaugeInstrument = exports.ObservableCounterInstrument = exports.ObservableInstrument = exports.HistogramInstrument = exports.GaugeInstrument = exports.CounterInstrument = exports.UpDownCounterInstrument = exports.SyncInstrument = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - - class SyncInstrument2 { - _writableMetricStorage; - _descriptor; - constructor(_writableMetricStorage, _descriptor) { - this._writableMetricStorage = _writableMetricStorage; - this._descriptor = _descriptor; - } - _record(value, attributes = {}, context8 = api_1.context.active()) { - if (typeof value !== "number") { - api_1.diag.warn(`non-number value provided to metric ${this._descriptor.name}: ${value}`); - return; - } - if (this._descriptor.valueType === api_1.ValueType.INT && !Number.isInteger(value)) { - api_1.diag.warn(`INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - this._writableMetricStorage.record(value, attributes, context8, (0, core_1.millisToHrTime)(Date.now())); - } - } - exports.SyncInstrument = SyncInstrument2; - - class UpDownCounterInstrument2 extends SyncInstrument2 { - add(value, attributes, ctx) { - this._record(value, attributes, ctx); - } - } - exports.UpDownCounterInstrument = UpDownCounterInstrument2; - - class CounterInstrument2 extends SyncInstrument2 { - add(value, attributes, ctx) { - if (value < 0) { - api_1.diag.warn(`negative value provided to counter ${this._descriptor.name}: ${value}`); - return; - } - this._record(value, attributes, ctx); - } - } - exports.CounterInstrument = CounterInstrument2; - - class GaugeInstrument2 extends SyncInstrument2 { - record(value, attributes, ctx) { - this._record(value, attributes, ctx); - } - } - exports.GaugeInstrument = GaugeInstrument2; - - class HistogramInstrument2 extends SyncInstrument2 { - record(value, attributes, ctx) { - if (value < 0) { - api_1.diag.warn(`negative value provided to histogram ${this._descriptor.name}: ${value}`); - return; - } - this._record(value, attributes, ctx); - } - } - exports.HistogramInstrument = HistogramInstrument2; - - class ObservableInstrument2 { - _observableRegistry; - _metricStorages; - _descriptor; - constructor(descriptor, metricStorages, _observableRegistry) { - this._observableRegistry = _observableRegistry; - this._descriptor = descriptor; - this._metricStorages = metricStorages; - } - addCallback(callback) { - this._observableRegistry.addCallback(callback, this); - } - removeCallback(callback) { - this._observableRegistry.removeCallback(callback, this); - } - } - exports.ObservableInstrument = ObservableInstrument2; - - class ObservableCounterInstrument2 extends ObservableInstrument2 { - } - exports.ObservableCounterInstrument = ObservableCounterInstrument2; - - class ObservableGaugeInstrument2 extends ObservableInstrument2 { - } - exports.ObservableGaugeInstrument = ObservableGaugeInstrument2; - - class ObservableUpDownCounterInstrument2 extends ObservableInstrument2 { - } - exports.ObservableUpDownCounterInstrument = ObservableUpDownCounterInstrument2; - function isObservableInstrument2(it) { - return it instanceof ObservableInstrument2; - } - exports.isObservableInstrument = isObservableInstrument2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/Meter.js -var require_Meter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Meter = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor2(); - var Instruments_1 = require_Instruments2(); - var MetricData_1 = require_MetricData2(); - - class Meter2 { - _meterSharedState; - constructor(_meterSharedState) { - this._meterSharedState = _meterSharedState; - } - createGauge(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.GAUGE, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.GaugeInstrument(storage, descriptor); - } - createHistogram(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.HISTOGRAM, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.HistogramInstrument(storage, descriptor); - } - createCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.COUNTER, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.CounterInstrument(storage, descriptor); - } - createUpDownCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.UP_DOWN_COUNTER, options); - const storage = this._meterSharedState.registerMetricStorage(descriptor); - return new Instruments_1.UpDownCounterInstrument(storage, descriptor); - } - createObservableGauge(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.OBSERVABLE_GAUGE, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new Instruments_1.ObservableGaugeInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - createObservableCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.OBSERVABLE_COUNTER, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new Instruments_1.ObservableCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - createObservableUpDownCounter(name, options) { - const descriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(name, MetricData_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER, options); - const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor); - return new Instruments_1.ObservableUpDownCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry); - } - addBatchObservableCallback(callback, observables) { - this._meterSharedState.observableRegistry.addBatchCallback(callback, observables); - } - removeBatchObservableCallback(callback, observables) { - this._meterSharedState.observableRegistry.removeBatchCallback(callback, observables); - } - } - exports.Meter = Meter2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorage.js -var require_MetricStorage2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricStorage = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor2(); - - class MetricStorage2 { - _instrumentDescriptor; - constructor(_instrumentDescriptor) { - this._instrumentDescriptor = _instrumentDescriptor; - } - getInstrumentDescriptor() { - return this._instrumentDescriptor; - } - updateDescription(description) { - this._instrumentDescriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptor)(this._instrumentDescriptor.name, this._instrumentDescriptor.type, { - description, - valueType: this._instrumentDescriptor.valueType, - unit: this._instrumentDescriptor.unit, - advice: this._instrumentDescriptor.advice - }); - } - } - exports.MetricStorage = MetricStorage2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/HashMap.js -var require_HashMap2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AttributeHashMap = exports.HashMap = undefined; - var utils_1 = require_utils48(); - - class HashMap2 { - _hash; - _valueMap = new Map; - _keyMap = new Map; - constructor(_hash) { - this._hash = _hash; - } - get(key, hashCode) { - hashCode ??= this._hash(key); - return this._valueMap.get(hashCode); - } - getOrDefault(key, defaultFactory) { - const hash2 = this._hash(key); - if (this._valueMap.has(hash2)) { - return this._valueMap.get(hash2); - } - const val = defaultFactory(); - if (!this._keyMap.has(hash2)) { - this._keyMap.set(hash2, key); - } - this._valueMap.set(hash2, val); - return val; - } - set(key, value, hashCode) { - hashCode ??= this._hash(key); - if (!this._keyMap.has(hashCode)) { - this._keyMap.set(hashCode, key); - } - this._valueMap.set(hashCode, value); - } - has(key, hashCode) { - hashCode ??= this._hash(key); - return this._valueMap.has(hashCode); - } - *keys() { - const keyIterator = this._keyMap.entries(); - let next = keyIterator.next(); - while (next.done !== true) { - yield [next.value[1], next.value[0]]; - next = keyIterator.next(); - } - } - *entries() { - const valueIterator = this._valueMap.entries(); - let next = valueIterator.next(); - while (next.done !== true) { - yield [this._keyMap.get(next.value[0]), next.value[1], next.value[0]]; - next = valueIterator.next(); - } - } - get size() { - return this._valueMap.size; - } - } - exports.HashMap = HashMap2; - - class AttributeHashMap2 extends HashMap2 { - constructor() { - super(utils_1.hashAttributes); - } - } - exports.AttributeHashMap = AttributeHashMap2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/DeltaMetricProcessor.js -var require_DeltaMetricProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DeltaMetricProcessor = undefined; - var utils_1 = require_utils48(); - var HashMap_1 = require_HashMap2(); - - class DeltaMetricProcessor2 { - _aggregator; - _activeCollectionStorage = new HashMap_1.AttributeHashMap; - _cumulativeMemoStorage = new HashMap_1.AttributeHashMap; - _cardinalityLimit; - _overflowAttributes = { "otel.metric.overflow": true }; - _overflowHashCode; - constructor(_aggregator, aggregationCardinalityLimit) { - this._aggregator = _aggregator; - this._cardinalityLimit = (aggregationCardinalityLimit ?? 2000) - 1; - this._overflowHashCode = (0, utils_1.hashAttributes)(this._overflowAttributes); - } - record(value, attributes, _context, collectionTime) { - let accumulation = this._activeCollectionStorage.get(attributes); - if (!accumulation) { - if (this._activeCollectionStorage.size >= this._cardinalityLimit) { - const overflowAccumulation = this._activeCollectionStorage.getOrDefault(this._overflowAttributes, () => this._aggregator.createAccumulation(collectionTime)); - overflowAccumulation?.record(value); - return; - } - accumulation = this._aggregator.createAccumulation(collectionTime); - this._activeCollectionStorage.set(attributes, accumulation); - } - accumulation?.record(value); - } - batchCumulate(measurements, collectionTime) { - Array.from(measurements.entries()).forEach(([attributes, value, hashCode]) => { - const accumulation = this._aggregator.createAccumulation(collectionTime); - accumulation?.record(value); - let delta = accumulation; - if (this._cumulativeMemoStorage.has(attributes, hashCode)) { - const previous = this._cumulativeMemoStorage.get(attributes, hashCode); - delta = this._aggregator.diff(previous, accumulation); - } else { - if (this._cumulativeMemoStorage.size >= this._cardinalityLimit) { - attributes = this._overflowAttributes; - hashCode = this._overflowHashCode; - if (this._cumulativeMemoStorage.has(attributes, hashCode)) { - const previous = this._cumulativeMemoStorage.get(attributes, hashCode); - delta = this._aggregator.diff(previous, accumulation); - } - } - } - if (this._activeCollectionStorage.has(attributes, hashCode)) { - const active = this._activeCollectionStorage.get(attributes, hashCode); - delta = this._aggregator.merge(active, delta); - } - this._cumulativeMemoStorage.set(attributes, accumulation, hashCode); - this._activeCollectionStorage.set(attributes, delta, hashCode); - }); - } - collect() { - const unreportedDelta = this._activeCollectionStorage; - this._activeCollectionStorage = new HashMap_1.AttributeHashMap; - return unreportedDelta; - } - } - exports.DeltaMetricProcessor = DeltaMetricProcessor2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/TemporalMetricProcessor.js -var require_TemporalMetricProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TemporalMetricProcessor = undefined; - var AggregationTemporality_1 = require_AggregationTemporality2(); - var HashMap_1 = require_HashMap2(); - - class TemporalMetricProcessor2 { - _aggregator; - _unreportedAccumulations = new Map; - _reportHistory = new Map; - constructor(_aggregator, collectorHandles) { - this._aggregator = _aggregator; - collectorHandles.forEach((handle) => { - this._unreportedAccumulations.set(handle, []); - }); - } - buildMetrics(collector, instrumentDescriptor, currentAccumulations, collectionTime) { - this._stashAccumulations(currentAccumulations); - const unreportedAccumulations = this._getMergedUnreportedAccumulations(collector); - let result = unreportedAccumulations; - let aggregationTemporality; - if (this._reportHistory.has(collector)) { - const last = this._reportHistory.get(collector); - const lastCollectionTime = last.collectionTime; - aggregationTemporality = last.aggregationTemporality; - if (aggregationTemporality === AggregationTemporality_1.AggregationTemporality.CUMULATIVE) { - result = TemporalMetricProcessor2.merge(last.accumulations, unreportedAccumulations, this._aggregator); - } else { - result = TemporalMetricProcessor2.calibrateStartTime(last.accumulations, unreportedAccumulations, lastCollectionTime); - } - } else { - aggregationTemporality = collector.selectAggregationTemporality(instrumentDescriptor.type); - } - this._reportHistory.set(collector, { - accumulations: result, - collectionTime, - aggregationTemporality - }); - const accumulationRecords = AttributesMapToAccumulationRecords2(result); - if (accumulationRecords.length === 0) { - return; - } - return this._aggregator.toMetricData(instrumentDescriptor, aggregationTemporality, accumulationRecords, collectionTime); - } - _stashAccumulations(currentAccumulation) { - const registeredCollectors = this._unreportedAccumulations.keys(); - for (const collector of registeredCollectors) { - let stash = this._unreportedAccumulations.get(collector); - if (stash === undefined) { - stash = []; - this._unreportedAccumulations.set(collector, stash); - } - stash.push(currentAccumulation); - } - } - _getMergedUnreportedAccumulations(collector) { - let result = new HashMap_1.AttributeHashMap; - const unreportedList = this._unreportedAccumulations.get(collector); - this._unreportedAccumulations.set(collector, []); - if (unreportedList === undefined) { - return result; - } - for (const it of unreportedList) { - result = TemporalMetricProcessor2.merge(result, it, this._aggregator); - } - return result; - } - static merge(last, current, aggregator) { - const result = last; - const iterator = current.entries(); - let next = iterator.next(); - while (next.done !== true) { - const [key, record3, hash2] = next.value; - if (last.has(key, hash2)) { - const lastAccumulation = last.get(key, hash2); - const accumulation = aggregator.merge(lastAccumulation, record3); - result.set(key, accumulation, hash2); - } else { - result.set(key, record3, hash2); - } - next = iterator.next(); - } - return result; - } - static calibrateStartTime(last, current, lastCollectionTime) { - for (const [key, hash2] of last.keys()) { - const currentAccumulation = current.get(key, hash2); - currentAccumulation?.setStartTime(lastCollectionTime); - } - return current; - } - } - exports.TemporalMetricProcessor = TemporalMetricProcessor2; - function AttributesMapToAccumulationRecords2(map2) { - return Array.from(map2.entries()); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/AsyncMetricStorage.js -var require_AsyncMetricStorage2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncMetricStorage = undefined; - var MetricStorage_1 = require_MetricStorage2(); - var DeltaMetricProcessor_1 = require_DeltaMetricProcessor2(); - var TemporalMetricProcessor_1 = require_TemporalMetricProcessor2(); - var HashMap_1 = require_HashMap2(); - - class AsyncMetricStorage2 extends MetricStorage_1.MetricStorage { - _attributesProcessor; - _aggregationCardinalityLimit; - _deltaMetricStorage; - _temporalMetricStorage; - constructor(_instrumentDescriptor, aggregator, _attributesProcessor, collectorHandles, _aggregationCardinalityLimit) { - super(_instrumentDescriptor); - this._attributesProcessor = _attributesProcessor; - this._aggregationCardinalityLimit = _aggregationCardinalityLimit; - this._deltaMetricStorage = new DeltaMetricProcessor_1.DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit); - this._temporalMetricStorage = new TemporalMetricProcessor_1.TemporalMetricProcessor(aggregator, collectorHandles); - } - record(measurements, observationTime) { - const processed = new HashMap_1.AttributeHashMap; - Array.from(measurements.entries()).forEach(([attributes, value]) => { - processed.set(this._attributesProcessor.process(attributes), value); - }); - this._deltaMetricStorage.batchCumulate(processed, observationTime); - } - collect(collector, collectionTime) { - const accumulations = this._deltaMetricStorage.collect(); - return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime); - } - } - exports.AsyncMetricStorage = AsyncMetricStorage2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/RegistrationConflicts.js -var require_RegistrationConflicts2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getConflictResolutionRecipe = exports.getDescriptionResolutionRecipe = exports.getTypeConflictResolutionRecipe = exports.getUnitConflictResolutionRecipe = exports.getValueTypeConflictResolutionRecipe = exports.getIncompatibilityDetails = undefined; - function getIncompatibilityDetails2(existing, otherDescriptor) { - let incompatibility = ""; - if (existing.unit !== otherDescriptor.unit) { - incompatibility += ` - Unit '${existing.unit}' does not match '${otherDescriptor.unit}' -`; - } - if (existing.type !== otherDescriptor.type) { - incompatibility += ` - Type '${existing.type}' does not match '${otherDescriptor.type}' -`; - } - if (existing.valueType !== otherDescriptor.valueType) { - incompatibility += ` - Value Type '${existing.valueType}' does not match '${otherDescriptor.valueType}' -`; - } - if (existing.description !== otherDescriptor.description) { - incompatibility += ` - Description '${existing.description}' does not match '${otherDescriptor.description}' -`; - } - return incompatibility; - } - exports.getIncompatibilityDetails = getIncompatibilityDetails2; - function getValueTypeConflictResolutionRecipe2(existing, otherDescriptor) { - return ` - use valueType '${existing.valueType}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`; - } - exports.getValueTypeConflictResolutionRecipe = getValueTypeConflictResolutionRecipe2; - function getUnitConflictResolutionRecipe2(existing, otherDescriptor) { - return ` - use unit '${existing.unit}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`; - } - exports.getUnitConflictResolutionRecipe = getUnitConflictResolutionRecipe2; - function getTypeConflictResolutionRecipe2(existing, otherDescriptor) { - const selector = { - name: otherDescriptor.name, - type: otherDescriptor.type, - unit: otherDescriptor.unit - }; - const selectorString = JSON.stringify(selector); - return ` - create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}'`; - } - exports.getTypeConflictResolutionRecipe = getTypeConflictResolutionRecipe2; - function getDescriptionResolutionRecipe2(existing, otherDescriptor) { - const selector = { - name: otherDescriptor.name, - type: otherDescriptor.type, - unit: otherDescriptor.unit - }; - const selectorString = JSON.stringify(selector); - return ` - create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}' - - OR - create a new view with the name ${existing.name} and description '${existing.description}' and InstrumentSelector ${selectorString} - - OR - create a new view with the name ${otherDescriptor.name} and description '${existing.description}' and InstrumentSelector ${selectorString}`; - } - exports.getDescriptionResolutionRecipe = getDescriptionResolutionRecipe2; - function getConflictResolutionRecipe2(existing, otherDescriptor) { - if (existing.valueType !== otherDescriptor.valueType) { - return getValueTypeConflictResolutionRecipe2(existing, otherDescriptor); - } - if (existing.unit !== otherDescriptor.unit) { - return getUnitConflictResolutionRecipe2(existing, otherDescriptor); - } - if (existing.type !== otherDescriptor.type) { - return getTypeConflictResolutionRecipe2(existing, otherDescriptor); - } - if (existing.description !== otherDescriptor.description) { - return getDescriptionResolutionRecipe2(existing, otherDescriptor); - } - return ""; - } - exports.getConflictResolutionRecipe = getConflictResolutionRecipe2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorageRegistry.js -var require_MetricStorageRegistry2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricStorageRegistry = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor2(); - var api8 = require_src(); - var RegistrationConflicts_1 = require_RegistrationConflicts2(); - - class MetricStorageRegistry2 { - _sharedRegistry = new Map; - _perCollectorRegistry = new Map; - static create() { - return new MetricStorageRegistry2; - } - getStorages(collector) { - let storages = []; - for (const metricStorages of this._sharedRegistry.values()) { - storages = storages.concat(metricStorages); - } - const perCollectorStorages = this._perCollectorRegistry.get(collector); - if (perCollectorStorages != null) { - for (const metricStorages of perCollectorStorages.values()) { - storages = storages.concat(metricStorages); - } - } - return storages; - } - register(storage) { - this._registerStorage(storage, this._sharedRegistry); - } - registerForCollector(collector, storage) { - let storageMap = this._perCollectorRegistry.get(collector); - if (storageMap == null) { - storageMap = new Map; - this._perCollectorRegistry.set(collector, storageMap); - } - this._registerStorage(storage, storageMap); - } - findOrUpdateCompatibleStorage(expectedDescriptor) { - const storages = this._sharedRegistry.get(expectedDescriptor.name); - if (storages === undefined) { - return null; - } - return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages); - } - findOrUpdateCompatibleCollectorStorage(collector, expectedDescriptor) { - const storageMap = this._perCollectorRegistry.get(collector); - if (storageMap === undefined) { - return null; - } - const storages = storageMap.get(expectedDescriptor.name); - if (storages === undefined) { - return null; - } - return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages); - } - _registerStorage(storage, storageMap) { - const descriptor = storage.getInstrumentDescriptor(); - const storages = storageMap.get(descriptor.name); - if (storages === undefined) { - storageMap.set(descriptor.name, [storage]); - return; - } - storages.push(storage); - } - _findOrUpdateCompatibleStorage(expectedDescriptor, existingStorages) { - let compatibleStorage = null; - for (const existingStorage of existingStorages) { - const existingDescriptor = existingStorage.getInstrumentDescriptor(); - if ((0, InstrumentDescriptor_1.isDescriptorCompatibleWith)(existingDescriptor, expectedDescriptor)) { - if (existingDescriptor.description !== expectedDescriptor.description) { - if (expectedDescriptor.description.length > existingDescriptor.description.length) { - existingStorage.updateDescription(expectedDescriptor.description); - } - api8.diag.warn("A view or instrument with the name ", expectedDescriptor.name, ` has already been registered, but has a different description and is incompatible with another registered view. -`, `Details: -`, (0, RegistrationConflicts_1.getIncompatibilityDetails)(existingDescriptor, expectedDescriptor), `The longer description will be used. -To resolve the conflict:`, (0, RegistrationConflicts_1.getConflictResolutionRecipe)(existingDescriptor, expectedDescriptor)); - } - compatibleStorage = existingStorage; - } else { - api8.diag.warn("A view or instrument with the name ", expectedDescriptor.name, ` has already been registered and is incompatible with another registered view. -`, `Details: -`, (0, RegistrationConflicts_1.getIncompatibilityDetails)(existingDescriptor, expectedDescriptor), `To resolve the conflict: -`, (0, RegistrationConflicts_1.getConflictResolutionRecipe)(existingDescriptor, expectedDescriptor)); - } - } - return compatibleStorage; - } - } - exports.MetricStorageRegistry = MetricStorageRegistry2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MultiWritableMetricStorage.js -var require_MultiWritableMetricStorage2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MultiMetricStorage = undefined; - - class MultiMetricStorage2 { - _backingStorages; - constructor(_backingStorages) { - this._backingStorages = _backingStorages; - } - record(value, attributes, context8, recordTime) { - this._backingStorages.forEach((it) => { - it.record(value, attributes, context8, recordTime); - }); - } - } - exports.MultiMetricStorage = MultiMetricStorage2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/ObservableResult.js -var require_ObservableResult2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchObservableResultImpl = exports.ObservableResultImpl = undefined; - var api_1 = require_src(); - var HashMap_1 = require_HashMap2(); - var Instruments_1 = require_Instruments2(); - - class ObservableResultImpl2 { - _instrumentName; - _valueType; - _buffer = new HashMap_1.AttributeHashMap; - constructor(_instrumentName, _valueType) { - this._instrumentName = _instrumentName; - this._valueType = _valueType; - } - observe(value, attributes = {}) { - if (typeof value !== "number") { - api_1.diag.warn(`non-number value provided to metric ${this._instrumentName}: ${value}`); - return; - } - if (this._valueType === api_1.ValueType.INT && !Number.isInteger(value)) { - api_1.diag.warn(`INT value type cannot accept a floating-point value for ${this._instrumentName}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - this._buffer.set(attributes, value); - } - } - exports.ObservableResultImpl = ObservableResultImpl2; - - class BatchObservableResultImpl2 { - _buffer = new Map; - observe(metric, value, attributes = {}) { - if (!(0, Instruments_1.isObservableInstrument)(metric)) { - return; - } - let map2 = this._buffer.get(metric); - if (map2 == null) { - map2 = new HashMap_1.AttributeHashMap; - this._buffer.set(metric, map2); - } - if (typeof value !== "number") { - api_1.diag.warn(`non-number value provided to metric ${metric._descriptor.name}: ${value}`); - return; - } - if (metric._descriptor.valueType === api_1.ValueType.INT && !Number.isInteger(value)) { - api_1.diag.warn(`INT value type cannot accept a floating-point value for ${metric._descriptor.name}, ignoring the fractional digits.`); - value = Math.trunc(value); - if (!Number.isInteger(value)) { - return; - } - } - map2.set(attributes, value); - } - } - exports.BatchObservableResultImpl = BatchObservableResultImpl2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/ObservableRegistry.js -var require_ObservableRegistry2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ObservableRegistry = undefined; - var api_1 = require_src(); - var Instruments_1 = require_Instruments2(); - var ObservableResult_1 = require_ObservableResult2(); - var utils_1 = require_utils48(); - - class ObservableRegistry2 { - _callbacks = []; - _batchCallbacks = []; - addCallback(callback, instrument) { - const idx = this._findCallback(callback, instrument); - if (idx >= 0) { - return; - } - this._callbacks.push({ callback, instrument }); - } - removeCallback(callback, instrument) { - const idx = this._findCallback(callback, instrument); - if (idx < 0) { - return; - } - this._callbacks.splice(idx, 1); - } - addBatchCallback(callback, instruments) { - const observableInstruments = new Set(instruments.filter(Instruments_1.isObservableInstrument)); - if (observableInstruments.size === 0) { - api_1.diag.error("BatchObservableCallback is not associated with valid instruments", instruments); - return; - } - const idx = this._findBatchCallback(callback, observableInstruments); - if (idx >= 0) { - return; - } - this._batchCallbacks.push({ callback, instruments: observableInstruments }); - } - removeBatchCallback(callback, instruments) { - const observableInstruments = new Set(instruments.filter(Instruments_1.isObservableInstrument)); - const idx = this._findBatchCallback(callback, observableInstruments); - if (idx < 0) { - return; - } - this._batchCallbacks.splice(idx, 1); - } - async observe(collectionTime, timeoutMillis) { - const callbackFutures = this._observeCallbacks(collectionTime, timeoutMillis); - const batchCallbackFutures = this._observeBatchCallbacks(collectionTime, timeoutMillis); - const results = await (0, utils_1.PromiseAllSettled)([ - ...callbackFutures, - ...batchCallbackFutures - ]); - const rejections = results.filter(utils_1.isPromiseAllSettledRejectionResult).map((it) => it.reason); - return rejections; - } - _observeCallbacks(observationTime, timeoutMillis) { - return this._callbacks.map(async ({ callback, instrument }) => { - const observableResult = new ObservableResult_1.ObservableResultImpl(instrument._descriptor.name, instrument._descriptor.valueType); - let callPromise = Promise.resolve(callback(observableResult)); - if (timeoutMillis != null) { - callPromise = (0, utils_1.callWithTimeout)(callPromise, timeoutMillis); - } - await callPromise; - instrument._metricStorages.forEach((metricStorage) => { - metricStorage.record(observableResult._buffer, observationTime); - }); - }); - } - _observeBatchCallbacks(observationTime, timeoutMillis) { - return this._batchCallbacks.map(async ({ callback, instruments }) => { - const observableResult = new ObservableResult_1.BatchObservableResultImpl; - let callPromise = Promise.resolve(callback(observableResult)); - if (timeoutMillis != null) { - callPromise = (0, utils_1.callWithTimeout)(callPromise, timeoutMillis); - } - await callPromise; - instruments.forEach((instrument) => { - const buffer = observableResult._buffer.get(instrument); - if (buffer == null) { - return; - } - instrument._metricStorages.forEach((metricStorage) => { - metricStorage.record(buffer, observationTime); - }); - }); - }); - } - _findCallback(callback, instrument) { - return this._callbacks.findIndex((record3) => { - return record3.callback === callback && record3.instrument === instrument; - }); - } - _findBatchCallback(callback, instruments) { - return this._batchCallbacks.findIndex((record3) => { - return record3.callback === callback && (0, utils_1.setEquals)(record3.instruments, instruments); - }); - } - } - exports.ObservableRegistry = ObservableRegistry2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/SyncMetricStorage.js -var require_SyncMetricStorage2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SyncMetricStorage = undefined; - var MetricStorage_1 = require_MetricStorage2(); - var DeltaMetricProcessor_1 = require_DeltaMetricProcessor2(); - var TemporalMetricProcessor_1 = require_TemporalMetricProcessor2(); - - class SyncMetricStorage2 extends MetricStorage_1.MetricStorage { - _attributesProcessor; - _aggregationCardinalityLimit; - _deltaMetricStorage; - _temporalMetricStorage; - constructor(instrumentDescriptor, aggregator, _attributesProcessor, collectorHandles, _aggregationCardinalityLimit) { - super(instrumentDescriptor); - this._attributesProcessor = _attributesProcessor; - this._aggregationCardinalityLimit = _aggregationCardinalityLimit; - this._deltaMetricStorage = new DeltaMetricProcessor_1.DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit); - this._temporalMetricStorage = new TemporalMetricProcessor_1.TemporalMetricProcessor(aggregator, collectorHandles); - } - record(value, attributes, context8, recordTime) { - attributes = this._attributesProcessor.process(attributes, context8); - this._deltaMetricStorage.record(value, attributes, context8, recordTime); - } - collect(collector, collectionTime) { - const accumulations = this._deltaMetricStorage.collect(); - return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime); - } - } - exports.SyncMetricStorage = SyncMetricStorage2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.js -var require_AttributesProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createDenyListAttributesProcessor = exports.createAllowListAttributesProcessor = exports.createMultiAttributesProcessor = exports.createNoopAttributesProcessor = undefined; - - class NoopAttributesProcessor2 { - process(incoming, _context) { - return incoming; - } - } - - class MultiAttributesProcessor2 { - _processors; - constructor(_processors) { - this._processors = _processors; - } - process(incoming, context8) { - let filteredAttributes = incoming; - for (const processor of this._processors) { - filteredAttributes = processor.process(filteredAttributes, context8); - } - return filteredAttributes; - } - } - - class AllowListProcessor { - _allowedAttributeNames; - constructor(_allowedAttributeNames) { - this._allowedAttributeNames = _allowedAttributeNames; - } - process(incoming, _context) { - const filteredAttributes = {}; - Object.keys(incoming).filter((attributeName) => this._allowedAttributeNames.includes(attributeName)).forEach((attributeName) => filteredAttributes[attributeName] = incoming[attributeName]); - return filteredAttributes; - } - } - - class DenyListProcessor { - _deniedAttributeNames; - constructor(_deniedAttributeNames) { - this._deniedAttributeNames = _deniedAttributeNames; - } - process(incoming, _context) { - const filteredAttributes = {}; - Object.keys(incoming).filter((attributeName) => !this._deniedAttributeNames.includes(attributeName)).forEach((attributeName) => filteredAttributes[attributeName] = incoming[attributeName]); - return filteredAttributes; - } - } - function createNoopAttributesProcessor2() { - return NOOP2; - } - exports.createNoopAttributesProcessor = createNoopAttributesProcessor2; - function createMultiAttributesProcessor2(processors) { - return new MultiAttributesProcessor2(processors); - } - exports.createMultiAttributesProcessor = createMultiAttributesProcessor2; - function createAllowListAttributesProcessor(attributeAllowList) { - return new AllowListProcessor(attributeAllowList); - } - exports.createAllowListAttributesProcessor = createAllowListAttributesProcessor; - function createDenyListAttributesProcessor(attributeDenyList) { - return new DenyListProcessor(attributeDenyList); - } - exports.createDenyListAttributesProcessor = createDenyListAttributesProcessor; - var NOOP2 = new NoopAttributesProcessor2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterSharedState.js -var require_MeterSharedState2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterSharedState = undefined; - var InstrumentDescriptor_1 = require_InstrumentDescriptor2(); - var Meter_1 = require_Meter2(); - var utils_1 = require_utils48(); - var AsyncMetricStorage_1 = require_AsyncMetricStorage2(); - var MetricStorageRegistry_1 = require_MetricStorageRegistry2(); - var MultiWritableMetricStorage_1 = require_MultiWritableMetricStorage2(); - var ObservableRegistry_1 = require_ObservableRegistry2(); - var SyncMetricStorage_1 = require_SyncMetricStorage2(); - var AttributesProcessor_1 = require_AttributesProcessor2(); - - class MeterSharedState2 { - _meterProviderSharedState; - _instrumentationScope; - metricStorageRegistry = new MetricStorageRegistry_1.MetricStorageRegistry; - observableRegistry = new ObservableRegistry_1.ObservableRegistry; - meter; - constructor(_meterProviderSharedState, _instrumentationScope) { - this._meterProviderSharedState = _meterProviderSharedState; - this._instrumentationScope = _instrumentationScope; - this.meter = new Meter_1.Meter(this); - } - registerMetricStorage(descriptor) { - const storages = this._registerMetricStorage(descriptor, SyncMetricStorage_1.SyncMetricStorage); - if (storages.length === 1) { - return storages[0]; - } - return new MultiWritableMetricStorage_1.MultiMetricStorage(storages); - } - registerAsyncMetricStorage(descriptor) { - const storages = this._registerMetricStorage(descriptor, AsyncMetricStorage_1.AsyncMetricStorage); - return storages; - } - async collect(collector, collectionTime, options) { - const errors3 = await this.observableRegistry.observe(collectionTime, options?.timeoutMillis); - const storages = this.metricStorageRegistry.getStorages(collector); - if (storages.length === 0) { - return null; - } - const metricDataList = storages.map((metricStorage) => { - return metricStorage.collect(collector, collectionTime); - }).filter(utils_1.isNotNullish); - if (metricDataList.length === 0) { - return { errors: errors3 }; - } - return { - scopeMetrics: { - scope: this._instrumentationScope, - metrics: metricDataList - }, - errors: errors3 - }; - } - _registerMetricStorage(descriptor, MetricStorageType) { - const views = this._meterProviderSharedState.viewRegistry.findViews(descriptor, this._instrumentationScope); - let storages = views.map((view) => { - const viewDescriptor = (0, InstrumentDescriptor_1.createInstrumentDescriptorWithView)(view, descriptor); - const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleStorage(viewDescriptor); - if (compatibleStorage != null) { - return compatibleStorage; - } - const aggregator = view.aggregation.createAggregator(viewDescriptor); - const viewStorage = new MetricStorageType(viewDescriptor, aggregator, view.attributesProcessor, this._meterProviderSharedState.metricCollectors, view.aggregationCardinalityLimit); - this.metricStorageRegistry.register(viewStorage); - return viewStorage; - }); - if (storages.length === 0) { - const perCollectorAggregations = this._meterProviderSharedState.selectAggregations(descriptor.type); - const collectorStorages = perCollectorAggregations.map(([collector, aggregation]) => { - const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleCollectorStorage(collector, descriptor); - if (compatibleStorage != null) { - return compatibleStorage; - } - const aggregator = aggregation.createAggregator(descriptor); - const cardinalityLimit = collector.selectCardinalityLimit(descriptor.type); - const storage = new MetricStorageType(descriptor, aggregator, (0, AttributesProcessor_1.createNoopAttributesProcessor)(), [collector], cardinalityLimit); - this.metricStorageRegistry.registerForCollector(collector, storage); - return storage; - }); - storages = storages.concat(collectorStorages); - } - return storages; - } - } - exports.MeterSharedState = MeterSharedState2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterProviderSharedState.js -var require_MeterProviderSharedState2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterProviderSharedState = undefined; - var utils_1 = require_utils48(); - var ViewRegistry_1 = require_ViewRegistry2(); - var MeterSharedState_1 = require_MeterSharedState2(); - var AggregationOption_1 = require_AggregationOption2(); - - class MeterProviderSharedState2 { - resource; - viewRegistry = new ViewRegistry_1.ViewRegistry; - metricCollectors = []; - meterSharedStates = new Map; - constructor(resource) { - this.resource = resource; - } - getMeterSharedState(instrumentationScope) { - const id = (0, utils_1.instrumentationScopeId)(instrumentationScope); - let meterSharedState = this.meterSharedStates.get(id); - if (meterSharedState == null) { - meterSharedState = new MeterSharedState_1.MeterSharedState(this, instrumentationScope); - this.meterSharedStates.set(id, meterSharedState); - } - return meterSharedState; - } - selectAggregations(instrumentType) { - const result = []; - for (const collector of this.metricCollectors) { - result.push([ - collector, - (0, AggregationOption_1.toAggregation)(collector.selectAggregation(instrumentType)) - ]); - } - return result; - } - } - exports.MeterProviderSharedState = MeterProviderSharedState2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricCollector.js -var require_MetricCollector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetricCollector = undefined; - var core_1 = require_src89(); - - class MetricCollector2 { - _sharedState; - _metricReader; - constructor(_sharedState, _metricReader) { - this._sharedState = _sharedState; - this._metricReader = _metricReader; - } - async collect(options) { - const collectionTime = (0, core_1.millisToHrTime)(Date.now()); - const scopeMetrics = []; - const errors3 = []; - const meterCollectionPromises = Array.from(this._sharedState.meterSharedStates.values()).map(async (meterSharedState) => { - const current = await meterSharedState.collect(this, collectionTime, options); - if (current?.scopeMetrics != null) { - scopeMetrics.push(current.scopeMetrics); - } - if (current?.errors != null) { - errors3.push(...current.errors); - } - }); - await Promise.all(meterCollectionPromises); - return { - resourceMetrics: { - resource: this._sharedState.resource, - scopeMetrics - }, - errors: errors3 - }; - } - async forceFlush(options) { - await this._metricReader.forceFlush(options); - } - async shutdown(options) { - await this._metricReader.shutdown(options); - } - selectAggregationTemporality(instrumentType) { - return this._metricReader.selectAggregationTemporality(instrumentType); - } - selectAggregation(instrumentType) { - return this._metricReader.selectAggregation(instrumentType); - } - selectCardinalityLimit(instrumentType) { - return this._metricReader.selectCardinalityLimit?.(instrumentType) ?? 2000; - } - } - exports.MetricCollector = MetricCollector2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/Predicate.js -var require_Predicate2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExactPredicate = exports.PatternPredicate = undefined; - var ESCAPE2 = /[\^$\\.+?()[\]{}|]/g; - - class PatternPredicate2 { - _matchAll; - _regexp; - constructor(pattern) { - if (pattern === "*") { - this._matchAll = true; - this._regexp = /.*/; - } else { - this._matchAll = false; - this._regexp = new RegExp(PatternPredicate2.escapePattern(pattern)); - } - } - match(str) { - if (this._matchAll) { - return true; - } - return this._regexp.test(str); - } - static escapePattern(pattern) { - return `^${pattern.replace(ESCAPE2, "\\$&").replace("*", ".*")}$`; - } - static hasWildcard(pattern) { - return pattern.includes("*"); - } - } - exports.PatternPredicate = PatternPredicate2; - - class ExactPredicate2 { - _matchAll; - _pattern; - constructor(pattern) { - this._matchAll = pattern === undefined; - this._pattern = pattern; - } - match(str) { - if (this._matchAll) { - return true; - } - if (str === this._pattern) { - return true; - } - return false; - } - } - exports.ExactPredicate = ExactPredicate2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.js -var require_InstrumentSelector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentSelector = undefined; - var Predicate_1 = require_Predicate2(); - - class InstrumentSelector2 { - _nameFilter; - _type; - _unitFilter; - constructor(criteria) { - this._nameFilter = new Predicate_1.PatternPredicate(criteria?.name ?? "*"); - this._type = criteria?.type; - this._unitFilter = new Predicate_1.ExactPredicate(criteria?.unit); - } - getType() { - return this._type; - } - getNameFilter() { - return this._nameFilter; - } - getUnitFilter() { - return this._unitFilter; - } - } - exports.InstrumentSelector = InstrumentSelector2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/MeterSelector.js -var require_MeterSelector2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterSelector = undefined; - var Predicate_1 = require_Predicate2(); - - class MeterSelector2 { - _nameFilter; - _versionFilter; - _schemaUrlFilter; - constructor(criteria) { - this._nameFilter = new Predicate_1.ExactPredicate(criteria?.name); - this._versionFilter = new Predicate_1.ExactPredicate(criteria?.version); - this._schemaUrlFilter = new Predicate_1.ExactPredicate(criteria?.schemaUrl); - } - getNameFilter() { - return this._nameFilter; - } - getVersionFilter() { - return this._versionFilter; - } - getSchemaUrlFilter() { - return this._schemaUrlFilter; - } - } - exports.MeterSelector = MeterSelector2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.js -var require_View2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.View = undefined; - var Predicate_1 = require_Predicate2(); - var AttributesProcessor_1 = require_AttributesProcessor2(); - var InstrumentSelector_1 = require_InstrumentSelector2(); - var MeterSelector_1 = require_MeterSelector2(); - var AggregationOption_1 = require_AggregationOption2(); - function isSelectorNotProvided2(options) { - return options.instrumentName == null && options.instrumentType == null && options.instrumentUnit == null && options.meterName == null && options.meterVersion == null && options.meterSchemaUrl == null; - } - function validateViewOptions2(viewOptions) { - if (isSelectorNotProvided2(viewOptions)) { - throw new Error("Cannot create view with no selector arguments supplied"); - } - if (viewOptions.name != null && (viewOptions?.instrumentName == null || Predicate_1.PatternPredicate.hasWildcard(viewOptions.instrumentName))) { - throw new Error("Views with a specified name must be declared with an instrument selector that selects at most one instrument per meter."); - } - } - - class View2 { - name; - description; - aggregation; - attributesProcessor; - instrumentSelector; - meterSelector; - aggregationCardinalityLimit; - constructor(viewOptions) { - validateViewOptions2(viewOptions); - if (viewOptions.attributesProcessors != null) { - this.attributesProcessor = (0, AttributesProcessor_1.createMultiAttributesProcessor)(viewOptions.attributesProcessors); - } else { - this.attributesProcessor = (0, AttributesProcessor_1.createNoopAttributesProcessor)(); - } - this.name = viewOptions.name; - this.description = viewOptions.description; - this.aggregation = (0, AggregationOption_1.toAggregation)(viewOptions.aggregation ?? { type: AggregationOption_1.AggregationType.DEFAULT }); - this.instrumentSelector = new InstrumentSelector_1.InstrumentSelector({ - name: viewOptions.instrumentName, - type: viewOptions.instrumentType, - unit: viewOptions.instrumentUnit - }); - this.meterSelector = new MeterSelector_1.MeterSelector({ - name: viewOptions.meterName, - version: viewOptions.meterVersion, - schemaUrl: viewOptions.meterSchemaUrl - }); - this.aggregationCardinalityLimit = viewOptions.aggregationCardinalityLimit; - } - } - exports.View = View2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.js -var require_MeterProvider2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MeterProvider = undefined; - var api_1 = require_src(); - var resources_1 = require_src91(); - var MeterProviderSharedState_1 = require_MeterProviderSharedState2(); - var MetricCollector_1 = require_MetricCollector2(); - var View_1 = require_View2(); - - class MeterProvider2 { - _sharedState; - _shutdown = false; - constructor(options) { - this._sharedState = new MeterProviderSharedState_1.MeterProviderSharedState(options?.resource ?? (0, resources_1.defaultResource)()); - if (options?.views != null && options.views.length > 0) { - for (const viewOption of options.views) { - this._sharedState.viewRegistry.addView(new View_1.View(viewOption)); - } - } - if (options?.readers != null && options.readers.length > 0) { - for (const metricReader of options.readers) { - const collector = new MetricCollector_1.MetricCollector(this._sharedState, metricReader); - metricReader.setMetricProducer(collector); - this._sharedState.metricCollectors.push(collector); - } - } - } - getMeter(name, version2 = "", options = {}) { - if (this._shutdown) { - api_1.diag.warn("A shutdown MeterProvider cannot provide a Meter"); - return (0, api_1.createNoopMeter)(); - } - return this._sharedState.getMeterSharedState({ - name, - version: version2, - schemaUrl: options.schemaUrl - }).meter; - } - async shutdown(options) { - if (this._shutdown) { - api_1.diag.warn("shutdown may only be called once per MeterProvider"); - return; - } - this._shutdown = true; - await Promise.all(this._sharedState.metricCollectors.map((collector) => { - return collector.shutdown(options); - })); - } - async forceFlush(options) { - if (this._shutdown) { - api_1.diag.warn("invalid attempt to force flush after MeterProvider shutdown"); - return; - } - await Promise.all(this._sharedState.metricCollectors.map((collector) => { - return collector.forceFlush(options); - })); - } - } - exports.MeterProvider = MeterProvider2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-metrics@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-metrics/build/src/index.js -var require_src93 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TimeoutError = exports.createDenyListAttributesProcessor = exports.createAllowListAttributesProcessor = exports.AggregationType = exports.MeterProvider = exports.ConsoleMetricExporter = exports.InMemoryMetricExporter = exports.PeriodicExportingMetricReader = exports.MetricReader = exports.InstrumentType = exports.DataPointType = exports.AggregationTemporality = undefined; - var AggregationTemporality_1 = require_AggregationTemporality2(); - Object.defineProperty(exports, "AggregationTemporality", { enumerable: true, get: function() { - return AggregationTemporality_1.AggregationTemporality; - } }); - var MetricData_1 = require_MetricData2(); - Object.defineProperty(exports, "DataPointType", { enumerable: true, get: function() { - return MetricData_1.DataPointType; - } }); - Object.defineProperty(exports, "InstrumentType", { enumerable: true, get: function() { - return MetricData_1.InstrumentType; - } }); - var MetricReader_1 = require_MetricReader2(); - Object.defineProperty(exports, "MetricReader", { enumerable: true, get: function() { - return MetricReader_1.MetricReader; - } }); - var PeriodicExportingMetricReader_1 = require_PeriodicExportingMetricReader2(); - Object.defineProperty(exports, "PeriodicExportingMetricReader", { enumerable: true, get: function() { - return PeriodicExportingMetricReader_1.PeriodicExportingMetricReader; - } }); - var InMemoryMetricExporter_1 = require_InMemoryMetricExporter2(); - Object.defineProperty(exports, "InMemoryMetricExporter", { enumerable: true, get: function() { - return InMemoryMetricExporter_1.InMemoryMetricExporter; - } }); - var ConsoleMetricExporter_1 = require_ConsoleMetricExporter2(); - Object.defineProperty(exports, "ConsoleMetricExporter", { enumerable: true, get: function() { - return ConsoleMetricExporter_1.ConsoleMetricExporter; - } }); - var MeterProvider_1 = require_MeterProvider2(); - Object.defineProperty(exports, "MeterProvider", { enumerable: true, get: function() { - return MeterProvider_1.MeterProvider; - } }); - var AggregationOption_1 = require_AggregationOption2(); - Object.defineProperty(exports, "AggregationType", { enumerable: true, get: function() { - return AggregationOption_1.AggregationType; - } }); - var AttributesProcessor_1 = require_AttributesProcessor2(); - Object.defineProperty(exports, "createAllowListAttributesProcessor", { enumerable: true, get: function() { - return AttributesProcessor_1.createAllowListAttributesProcessor; - } }); - Object.defineProperty(exports, "createDenyListAttributesProcessor", { enumerable: true, get: function() { - return AttributesProcessor_1.createDenyListAttributesProcessor; - } }); - var utils_1 = require_utils48(); - Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function() { - return utils_1.TimeoutError; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/AbstractAsyncHooksContextManager.js -var require_AbstractAsyncHooksContextManager2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AbstractAsyncHooksContextManager = undefined; - var events_1 = __require("events"); - var ADD_LISTENER_METHODS = [ - "addListener", - "on", - "once", - "prependListener", - "prependOnceListener" - ]; - - class AbstractAsyncHooksContextManager { - bind(context8, target) { - if (target instanceof events_1.EventEmitter) { - return this._bindEventEmitter(context8, target); - } - if (typeof target === "function") { - return this._bindFunction(context8, target); - } - return target; - } - _bindFunction(context8, target) { - const manager = this; - const contextWrapper = function(...args) { - return manager.with(context8, () => target.apply(this, args)); - }; - Object.defineProperty(contextWrapper, "length", { - enumerable: false, - configurable: true, - writable: false, - value: target.length - }); - return contextWrapper; - } - _bindEventEmitter(context8, ee) { - const map2 = this._getPatchMap(ee); - if (map2 !== undefined) - return ee; - this._createPatchMap(ee); - ADD_LISTENER_METHODS.forEach((methodName) => { - if (ee[methodName] === undefined) - return; - ee[methodName] = this._patchAddListener(ee, ee[methodName], context8); - }); - if (typeof ee.removeListener === "function") { - ee.removeListener = this._patchRemoveListener(ee, ee.removeListener); - } - if (typeof ee.off === "function") { - ee.off = this._patchRemoveListener(ee, ee.off); - } - if (typeof ee.removeAllListeners === "function") { - ee.removeAllListeners = this._patchRemoveAllListeners(ee, ee.removeAllListeners); - } - return ee; - } - _patchRemoveListener(ee, original) { - const contextManager = this; - return function(event, listener) { - const events = contextManager._getPatchMap(ee)?.[event]; - if (events === undefined) { - return original.call(this, event, listener); - } - const patchedListener = events.get(listener); - return original.call(this, event, patchedListener || listener); - }; - } - _patchRemoveAllListeners(ee, original) { - const contextManager = this; - return function(event) { - const map2 = contextManager._getPatchMap(ee); - if (map2 !== undefined) { - if (arguments.length === 0) { - contextManager._createPatchMap(ee); - } else if (map2[event] !== undefined) { - delete map2[event]; - } - } - return original.apply(this, arguments); - }; - } - _patchAddListener(ee, original, context8) { - const contextManager = this; - return function(event, listener) { - if (contextManager._wrapped) { - return original.call(this, event, listener); - } - let map2 = contextManager._getPatchMap(ee); - if (map2 === undefined) { - map2 = contextManager._createPatchMap(ee); - } - let listeners = map2[event]; - if (listeners === undefined) { - listeners = new WeakMap; - map2[event] = listeners; - } - const patchedListener = contextManager.bind(context8, listener); - listeners.set(listener, patchedListener); - contextManager._wrapped = true; - try { - return original.call(this, event, patchedListener); - } finally { - contextManager._wrapped = false; - } - }; - } - _createPatchMap(ee) { - const map2 = Object.create(null); - ee[this._kOtListeners] = map2; - return map2; - } - _getPatchMap(ee) { - return ee[this._kOtListeners]; - } - _kOtListeners = Symbol("OtListeners"); - _wrapped = false; - } - exports.AbstractAsyncHooksContextManager = AbstractAsyncHooksContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncHooksContextManager.js -var require_AsyncHooksContextManager2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncHooksContextManager = undefined; - var api_1 = require_src(); - var asyncHooks = __require("async_hooks"); - var AbstractAsyncHooksContextManager_1 = require_AbstractAsyncHooksContextManager2(); - - class AsyncHooksContextManager extends AbstractAsyncHooksContextManager_1.AbstractAsyncHooksContextManager { - _asyncHook; - _contexts = new Map; - _stack = []; - constructor() { - super(); - this._asyncHook = asyncHooks.createHook({ - init: this._init.bind(this), - before: this._before.bind(this), - after: this._after.bind(this), - destroy: this._destroy.bind(this), - promiseResolve: this._destroy.bind(this) - }); - } - active() { - return this._stack[this._stack.length - 1] ?? api_1.ROOT_CONTEXT; - } - with(context8, fn, thisArg, ...args) { - this._enterContext(context8); - try { - return fn.call(thisArg, ...args); - } finally { - this._exitContext(); - } - } - enable() { - this._asyncHook.enable(); - return this; - } - disable() { - this._asyncHook.disable(); - this._contexts.clear(); - this._stack = []; - return this; - } - _init(uid, type) { - if (type === "TIMERWRAP") - return; - const context8 = this._stack[this._stack.length - 1]; - if (context8 !== undefined) { - this._contexts.set(uid, context8); - } - } - _destroy(uid) { - this._contexts.delete(uid); - } - _before(uid) { - const context8 = this._contexts.get(uid); - if (context8 !== undefined) { - this._enterContext(context8); - } - } - _after() { - this._exitContext(); - } - _enterContext(context8) { - this._stack.push(context8); - } - _exitContext() { - this._stack.pop(); - } - } - exports.AsyncHooksContextManager = AsyncHooksContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/AsyncLocalStorageContextManager.js -var require_AsyncLocalStorageContextManager2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncLocalStorageContextManager = undefined; - var api_1 = require_src(); - var async_hooks_1 = __require("async_hooks"); - var AbstractAsyncHooksContextManager_1 = require_AbstractAsyncHooksContextManager2(); - - class AsyncLocalStorageContextManager extends AbstractAsyncHooksContextManager_1.AbstractAsyncHooksContextManager { - _asyncLocalStorage; - constructor() { - super(); - this._asyncLocalStorage = new async_hooks_1.AsyncLocalStorage; - } - active() { - return this._asyncLocalStorage.getStore() ?? api_1.ROOT_CONTEXT; - } - with(context8, fn, thisArg, ...args) { - const cb = thisArg == null ? fn : fn.bind(thisArg); - return this._asyncLocalStorage.run(context8, cb, ...args); - } - enable() { - return this; - } - disable() { - this._asyncLocalStorage.disable(); - return this; - } - } - exports.AsyncLocalStorageContextManager = AsyncLocalStorageContextManager; -}); - -// ../../../../node_modules/.bun/@opentelemetry+context-async-hooks@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/context-async-hooks/build/src/index.js -var require_src94 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncLocalStorageContextManager = exports.AsyncHooksContextManager = undefined; - var AsyncHooksContextManager_1 = require_AsyncHooksContextManager2(); - Object.defineProperty(exports, "AsyncHooksContextManager", { enumerable: true, get: function() { - return AsyncHooksContextManager_1.AsyncHooksContextManager; - } }); - var AsyncLocalStorageContextManager_1 = require_AsyncLocalStorageContextManager2(); - Object.defineProperty(exports, "AsyncLocalStorageContextManager", { enumerable: true, get: function() { - return AsyncLocalStorageContextManager_1.AsyncLocalStorageContextManager; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/enums.js -var require_enums4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExceptionEventName = undefined; - exports.ExceptionEventName = "exception"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/Span.js -var require_Span2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanImpl = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var semantic_conventions_1 = require_src3(); - var enums_1 = require_enums4(); - - class SpanImpl { - _spanContext; - kind; - parentSpanContext; - attributes = {}; - links = []; - events = []; - startTime; - resource; - instrumentationScope; - _droppedAttributesCount = 0; - _droppedEventsCount = 0; - _droppedLinksCount = 0; - name; - status = { - code: api_1.SpanStatusCode.UNSET - }; - endTime = [0, 0]; - _ended = false; - _duration = [-1, -1]; - _spanProcessor; - _spanLimits; - _attributeValueLengthLimit; - _performanceStartTime; - _performanceOffset; - _startTimeProvided; - constructor(opts) { - const now2 = Date.now(); - this._spanContext = opts.spanContext; - this._performanceStartTime = core_1.otperformance.now(); - this._performanceOffset = now2 - (this._performanceStartTime + (0, core_1.getTimeOrigin)()); - this._startTimeProvided = opts.startTime != null; - this._spanLimits = opts.spanLimits; - this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0; - this._spanProcessor = opts.spanProcessor; - this.name = opts.name; - this.parentSpanContext = opts.parentSpanContext; - this.kind = opts.kind; - this.links = opts.links || []; - this.startTime = this._getTime(opts.startTime ?? now2); - this.resource = opts.resource; - this.instrumentationScope = opts.scope; - if (opts.attributes != null) { - this.setAttributes(opts.attributes); - } - this._spanProcessor.onStart(this, opts.context); - } - spanContext() { - return this._spanContext; - } - setAttribute(key, value) { - if (value == null || this._isSpanEnded()) - return this; - if (key.length === 0) { - api_1.diag.warn(`Invalid attribute key: ${key}`); - return this; - } - if (!(0, core_1.isAttributeValue)(value)) { - api_1.diag.warn(`Invalid attribute value set for key: ${key}`); - return this; - } - const { attributeCountLimit } = this._spanLimits; - if (attributeCountLimit !== undefined && Object.keys(this.attributes).length >= attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, key)) { - this._droppedAttributesCount++; - return this; - } - this.attributes[key] = this._truncateToSize(value); - return this; - } - setAttributes(attributes) { - for (const [k, v] of Object.entries(attributes)) { - this.setAttribute(k, v); - } - return this; - } - addEvent(name, attributesOrStartTime, timeStamp) { - if (this._isSpanEnded()) - return this; - const { eventCountLimit } = this._spanLimits; - if (eventCountLimit === 0) { - api_1.diag.warn("No events allowed."); - this._droppedEventsCount++; - return this; - } - if (eventCountLimit !== undefined && this.events.length >= eventCountLimit) { - if (this._droppedEventsCount === 0) { - api_1.diag.debug("Dropping extra events."); - } - this.events.shift(); - this._droppedEventsCount++; - } - if ((0, core_1.isTimeInput)(attributesOrStartTime)) { - if (!(0, core_1.isTimeInput)(timeStamp)) { - timeStamp = attributesOrStartTime; - } - attributesOrStartTime = undefined; - } - const attributes = (0, core_1.sanitizeAttributes)(attributesOrStartTime); - this.events.push({ - name, - attributes, - time: this._getTime(timeStamp), - droppedAttributesCount: 0 - }); - return this; - } - addLink(link) { - this.links.push(link); - return this; - } - addLinks(links) { - this.links.push(...links); - return this; - } - setStatus(status) { - if (this._isSpanEnded()) - return this; - this.status = { ...status }; - if (this.status.message != null && typeof status.message !== "string") { - api_1.diag.warn(`Dropping invalid status.message of type '${typeof status.message}', expected 'string'`); - delete this.status.message; - } - return this; - } - updateName(name) { - if (this._isSpanEnded()) - return this; - this.name = name; - return this; - } - end(endTime) { - if (this._isSpanEnded()) { - api_1.diag.error(`${this.name} ${this._spanContext.traceId}-${this._spanContext.spanId} - You can only call end() on a span once.`); - return; - } - this._ended = true; - this.endTime = this._getTime(endTime); - this._duration = (0, core_1.hrTimeDuration)(this.startTime, this.endTime); - if (this._duration[0] < 0) { - api_1.diag.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.", this.startTime, this.endTime); - this.endTime = this.startTime.slice(); - this._duration = [0, 0]; - } - if (this._droppedEventsCount > 0) { - api_1.diag.warn(`Dropped ${this._droppedEventsCount} events because eventCountLimit reached`); - } - this._spanProcessor.onEnd(this); - } - _getTime(inp) { - if (typeof inp === "number" && inp <= core_1.otperformance.now()) { - return (0, core_1.hrTime)(inp + this._performanceOffset); - } - if (typeof inp === "number") { - return (0, core_1.millisToHrTime)(inp); - } - if (inp instanceof Date) { - return (0, core_1.millisToHrTime)(inp.getTime()); - } - if ((0, core_1.isTimeInputHrTime)(inp)) { - return inp; - } - if (this._startTimeProvided) { - return (0, core_1.millisToHrTime)(Date.now()); - } - const msDuration = core_1.otperformance.now() - this._performanceStartTime; - return (0, core_1.addHrTimes)(this.startTime, (0, core_1.millisToHrTime)(msDuration)); - } - isRecording() { - return this._ended === false; - } - recordException(exception, time3) { - const attributes = {}; - if (typeof exception === "string") { - attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE] = exception; - } else if (exception) { - if (exception.code) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE] = exception.code.toString(); - } else if (exception.name) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE] = exception.name; - } - if (exception.message) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE] = exception.message; - } - if (exception.stack) { - attributes[semantic_conventions_1.ATTR_EXCEPTION_STACKTRACE] = exception.stack; - } - } - if (attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE] || attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE]) { - this.addEvent(enums_1.ExceptionEventName, attributes, time3); - } else { - api_1.diag.warn(`Failed to record an exception ${exception}`); - } - } - get duration() { - return this._duration; - } - get ended() { - return this._ended; - } - get droppedAttributesCount() { - return this._droppedAttributesCount; - } - get droppedEventsCount() { - return this._droppedEventsCount; - } - get droppedLinksCount() { - return this._droppedLinksCount; - } - _isSpanEnded() { - if (this._ended) { - const error48 = new Error(`Operation attempted on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`); - api_1.diag.warn(`Cannot execute the operation on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`, error48); - } - return this._ended; - } - _truncateToLimitUtil(value, limit) { - if (value.length <= limit) { - return value; - } - return value.substring(0, limit); - } - _truncateToSize(value) { - const limit = this._attributeValueLengthLimit; - if (limit <= 0) { - api_1.diag.warn(`Attribute value limit must be positive, got ${limit}`); - return value; - } - if (typeof value === "string") { - return this._truncateToLimitUtil(value, limit); - } - if (Array.isArray(value)) { - return value.map((val) => typeof val === "string" ? this._truncateToLimitUtil(val, limit) : val); - } - return value; - } - } - exports.SpanImpl = SpanImpl; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/Sampler.js -var require_Sampler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SamplingDecision = undefined; - var SamplingDecision; - (function(SamplingDecision2) { - SamplingDecision2[SamplingDecision2["NOT_RECORD"] = 0] = "NOT_RECORD"; - SamplingDecision2[SamplingDecision2["RECORD"] = 1] = "RECORD"; - SamplingDecision2[SamplingDecision2["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; - })(SamplingDecision = exports.SamplingDecision || (exports.SamplingDecision = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOffSampler.js -var require_AlwaysOffSampler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AlwaysOffSampler = undefined; - var Sampler_1 = require_Sampler2(); - - class AlwaysOffSampler { - shouldSample() { - return { - decision: Sampler_1.SamplingDecision.NOT_RECORD - }; - } - toString() { - return "AlwaysOffSampler"; - } - } - exports.AlwaysOffSampler = AlwaysOffSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/AlwaysOnSampler.js -var require_AlwaysOnSampler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AlwaysOnSampler = undefined; - var Sampler_1 = require_Sampler2(); - - class AlwaysOnSampler { - shouldSample() { - return { - decision: Sampler_1.SamplingDecision.RECORD_AND_SAMPLED - }; - } - toString() { - return "AlwaysOnSampler"; - } - } - exports.AlwaysOnSampler = AlwaysOnSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/ParentBasedSampler.js -var require_ParentBasedSampler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ParentBasedSampler = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var AlwaysOffSampler_1 = require_AlwaysOffSampler2(); - var AlwaysOnSampler_1 = require_AlwaysOnSampler2(); - - class ParentBasedSampler { - _root; - _remoteParentSampled; - _remoteParentNotSampled; - _localParentSampled; - _localParentNotSampled; - constructor(config2) { - this._root = config2.root; - if (!this._root) { - (0, core_1.globalErrorHandler)(new Error("ParentBasedSampler must have a root sampler configured")); - this._root = new AlwaysOnSampler_1.AlwaysOnSampler; - } - this._remoteParentSampled = config2.remoteParentSampled ?? new AlwaysOnSampler_1.AlwaysOnSampler; - this._remoteParentNotSampled = config2.remoteParentNotSampled ?? new AlwaysOffSampler_1.AlwaysOffSampler; - this._localParentSampled = config2.localParentSampled ?? new AlwaysOnSampler_1.AlwaysOnSampler; - this._localParentNotSampled = config2.localParentNotSampled ?? new AlwaysOffSampler_1.AlwaysOffSampler; - } - shouldSample(context8, traceId, spanName, spanKind, attributes, links) { - const parentContext = api_1.trace.getSpanContext(context8); - if (!parentContext || !(0, api_1.isSpanContextValid)(parentContext)) { - return this._root.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - if (parentContext.isRemote) { - if (parentContext.traceFlags & api_1.TraceFlags.SAMPLED) { - return this._remoteParentSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - return this._remoteParentNotSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - if (parentContext.traceFlags & api_1.TraceFlags.SAMPLED) { - return this._localParentSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - return this._localParentNotSampled.shouldSample(context8, traceId, spanName, spanKind, attributes, links); - } - toString() { - return `ParentBased{root=${this._root.toString()}, remoteParentSampled=${this._remoteParentSampled.toString()}, remoteParentNotSampled=${this._remoteParentNotSampled.toString()}, localParentSampled=${this._localParentSampled.toString()}, localParentNotSampled=${this._localParentNotSampled.toString()}}`; - } - } - exports.ParentBasedSampler = ParentBasedSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.js -var require_TraceIdRatioBasedSampler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceIdRatioBasedSampler = undefined; - var api_1 = require_src(); - var Sampler_1 = require_Sampler2(); - - class TraceIdRatioBasedSampler { - _ratio; - _upperBound; - constructor(_ratio = 0) { - this._ratio = _ratio; - this._ratio = this._normalize(_ratio); - this._upperBound = Math.floor(this._ratio * 4294967295); - } - shouldSample(context8, traceId) { - return { - decision: (0, api_1.isValidTraceId)(traceId) && this._accumulate(traceId) < this._upperBound ? Sampler_1.SamplingDecision.RECORD_AND_SAMPLED : Sampler_1.SamplingDecision.NOT_RECORD - }; - } - toString() { - return `TraceIdRatioBased{${this._ratio}}`; - } - _normalize(ratio) { - if (typeof ratio !== "number" || isNaN(ratio)) - return 0; - return ratio >= 1 ? 1 : ratio <= 0 ? 0 : ratio; - } - _accumulate(traceId) { - let accumulation = 0; - for (let i = 0;i < traceId.length / 8; i++) { - const pos = i * 8; - const part = parseInt(traceId.slice(pos, pos + 8), 16); - accumulation = (accumulation ^ part) >>> 0; - } - return accumulation; - } - } - exports.TraceIdRatioBasedSampler = TraceIdRatioBasedSampler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/config.js -var require_config4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.buildSamplerFromEnv = exports.loadDefaultConfig = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var AlwaysOffSampler_1 = require_AlwaysOffSampler2(); - var AlwaysOnSampler_1 = require_AlwaysOnSampler2(); - var ParentBasedSampler_1 = require_ParentBasedSampler2(); - var TraceIdRatioBasedSampler_1 = require_TraceIdRatioBasedSampler2(); - var DEFAULT_RATIO = 1; - function loadDefaultConfig() { - return { - sampler: buildSamplerFromEnv(), - forceFlushTimeoutMillis: 30000, - generalLimits: { - attributeValueLengthLimit: (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity, - attributeCountLimit: (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_COUNT_LIMIT") ?? 128 - }, - spanLimits: { - attributeValueLengthLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? Infinity, - attributeCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT") ?? 128, - linkCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_LINK_COUNT_LIMIT") ?? 128, - eventCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_EVENT_COUNT_LIMIT") ?? 128, - attributePerEventCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT") ?? 128, - attributePerLinkCountLimit: (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT") ?? 128 - } - }; - } - exports.loadDefaultConfig = loadDefaultConfig; - function buildSamplerFromEnv() { - const sampler = (0, core_1.getStringFromEnv)("OTEL_TRACES_SAMPLER") ?? "parentbased_always_on"; - switch (sampler) { - case "always_on": - return new AlwaysOnSampler_1.AlwaysOnSampler; - case "always_off": - return new AlwaysOffSampler_1.AlwaysOffSampler; - case "parentbased_always_on": - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new AlwaysOnSampler_1.AlwaysOnSampler - }); - case "parentbased_always_off": - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new AlwaysOffSampler_1.AlwaysOffSampler - }); - case "traceidratio": - return new TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv()); - case "parentbased_traceidratio": - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv()) - }); - default: - api_1.diag.error(`OTEL_TRACES_SAMPLER value "${sampler}" invalid, defaulting to "${"parentbased_always_on"}".`); - return new ParentBasedSampler_1.ParentBasedSampler({ - root: new AlwaysOnSampler_1.AlwaysOnSampler - }); - } - } - exports.buildSamplerFromEnv = buildSamplerFromEnv; - function getSamplerProbabilityFromEnv() { - const probability = (0, core_1.getNumberFromEnv)("OTEL_TRACES_SAMPLER_ARG"); - if (probability == null) { - api_1.diag.error(`OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${DEFAULT_RATIO}.`); - return DEFAULT_RATIO; - } - if (probability < 0 || probability > 1) { - api_1.diag.error(`OTEL_TRACES_SAMPLER_ARG=${probability} was given, but it is out of range ([0..1]), defaulting to ${DEFAULT_RATIO}.`); - return DEFAULT_RATIO; - } - return probability; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/utility.js -var require_utility2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.reconfigureLimits = exports.mergeConfig = exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT = undefined; - var config_1 = require_config4(); - var core_1 = require_src89(); - exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128; - exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity; - function mergeConfig(userConfig) { - const perInstanceDefaults = { - sampler: (0, config_1.buildSamplerFromEnv)() - }; - const DEFAULT_CONFIG = (0, config_1.loadDefaultConfig)(); - const target = Object.assign({}, DEFAULT_CONFIG, perInstanceDefaults, userConfig); - target.generalLimits = Object.assign({}, DEFAULT_CONFIG.generalLimits, userConfig.generalLimits || {}); - target.spanLimits = Object.assign({}, DEFAULT_CONFIG.spanLimits, userConfig.spanLimits || {}); - return target; - } - exports.mergeConfig = mergeConfig; - function reconfigureLimits(userConfig) { - const spanLimits = Object.assign({}, userConfig.spanLimits); - spanLimits.attributeCountLimit = userConfig.spanLimits?.attributeCountLimit ?? userConfig.generalLimits?.attributeCountLimit ?? (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_COUNT_LIMIT") ?? exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT; - spanLimits.attributeValueLengthLimit = userConfig.spanLimits?.attributeValueLengthLimit ?? userConfig.generalLimits?.attributeValueLengthLimit ?? (0, core_1.getNumberFromEnv)("OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? (0, core_1.getNumberFromEnv)("OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT") ?? exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT; - return Object.assign({}, userConfig, { spanLimits }); - } - exports.reconfigureLimits = reconfigureLimits; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/BatchSpanProcessorBase.js -var require_BatchSpanProcessorBase2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchSpanProcessorBase = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - - class BatchSpanProcessorBase2 { - _exporter; - _maxExportBatchSize; - _maxQueueSize; - _scheduledDelayMillis; - _exportTimeoutMillis; - _isExporting = false; - _finishedSpans = []; - _timer; - _shutdownOnce; - _droppedSpansCount = 0; - constructor(_exporter, config2) { - this._exporter = _exporter; - this._maxExportBatchSize = typeof config2?.maxExportBatchSize === "number" ? config2.maxExportBatchSize : (0, core_1.getNumberFromEnv)("OTEL_BSP_MAX_EXPORT_BATCH_SIZE") ?? 512; - this._maxQueueSize = typeof config2?.maxQueueSize === "number" ? config2.maxQueueSize : (0, core_1.getNumberFromEnv)("OTEL_BSP_MAX_QUEUE_SIZE") ?? 2048; - this._scheduledDelayMillis = typeof config2?.scheduledDelayMillis === "number" ? config2.scheduledDelayMillis : (0, core_1.getNumberFromEnv)("OTEL_BSP_SCHEDULE_DELAY") ?? 5000; - this._exportTimeoutMillis = typeof config2?.exportTimeoutMillis === "number" ? config2.exportTimeoutMillis : (0, core_1.getNumberFromEnv)("OTEL_BSP_EXPORT_TIMEOUT") ?? 30000; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - if (this._maxExportBatchSize > this._maxQueueSize) { - api_1.diag.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"); - this._maxExportBatchSize = this._maxQueueSize; - } - } - forceFlush() { - if (this._shutdownOnce.isCalled) { - return this._shutdownOnce.promise; - } - return this._flushAll(); - } - onStart(_span, _parentContext) {} - onEnd(span) { - if (this._shutdownOnce.isCalled) { - return; - } - if ((span.spanContext().traceFlags & api_1.TraceFlags.SAMPLED) === 0) { - return; - } - this._addToBuffer(span); - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return Promise.resolve().then(() => { - return this.onShutdown(); - }).then(() => { - return this._flushAll(); - }).then(() => { - return this._exporter.shutdown(); - }); - } - _addToBuffer(span) { - if (this._finishedSpans.length >= this._maxQueueSize) { - if (this._droppedSpansCount === 0) { - api_1.diag.debug("maxQueueSize reached, dropping spans"); - } - this._droppedSpansCount++; - return; - } - if (this._droppedSpansCount > 0) { - api_1.diag.warn(`Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`); - this._droppedSpansCount = 0; - } - this._finishedSpans.push(span); - this._maybeStartTimer(); - } - _flushAll() { - return new Promise((resolve2, reject) => { - const promises = []; - const count = Math.ceil(this._finishedSpans.length / this._maxExportBatchSize); - for (let i = 0, j = count;i < j; i++) { - promises.push(this._flushOneBatch()); - } - Promise.all(promises).then(() => { - resolve2(); - }).catch(reject); - }); - } - _flushOneBatch() { - this._clearTimer(); - if (this._finishedSpans.length === 0) { - return Promise.resolve(); - } - return new Promise((resolve2, reject) => { - const timer = setTimeout(() => { - reject(new Error("Timeout")); - }, this._exportTimeoutMillis); - api_1.context.with((0, core_1.suppressTracing)(api_1.context.active()), () => { - let spans; - if (this._finishedSpans.length <= this._maxExportBatchSize) { - spans = this._finishedSpans; - this._finishedSpans = []; - } else { - spans = this._finishedSpans.splice(0, this._maxExportBatchSize); - } - const doExport = () => this._exporter.export(spans, (result) => { - clearTimeout(timer); - if (result.code === core_1.ExportResultCode.SUCCESS) { - resolve2(); - } else { - reject(result.error ?? new Error("BatchSpanProcessor: span export failed")); - } - }); - let pendingResources = null; - for (let i = 0, len = spans.length;i < len; i++) { - const span = spans[i]; - if (span.resource.asyncAttributesPending && span.resource.waitForAsyncAttributes) { - pendingResources ??= []; - pendingResources.push(span.resource.waitForAsyncAttributes()); - } - } - if (pendingResources === null) { - doExport(); - } else { - Promise.all(pendingResources).then(doExport, (err) => { - (0, core_1.globalErrorHandler)(err); - reject(err); - }); - } - }); - }); - } - _maybeStartTimer() { - if (this._isExporting) - return; - const flush = () => { - this._isExporting = true; - this._flushOneBatch().finally(() => { - this._isExporting = false; - if (this._finishedSpans.length > 0) { - this._clearTimer(); - this._maybeStartTimer(); - } - }).catch((e) => { - this._isExporting = false; - (0, core_1.globalErrorHandler)(e); - }); - }; - if (this._finishedSpans.length >= this._maxExportBatchSize) { - return flush(); - } - if (this._timer !== undefined) - return; - this._timer = setTimeout(() => flush(), this._scheduledDelayMillis); - (0, core_1.unrefTimer)(this._timer); - } - _clearTimer() { - if (this._timer !== undefined) { - clearTimeout(this._timer); - this._timer = undefined; - } - } - } - exports.BatchSpanProcessorBase = BatchSpanProcessorBase2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/export/BatchSpanProcessor.js -var require_BatchSpanProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BatchSpanProcessor = undefined; - var BatchSpanProcessorBase_1 = require_BatchSpanProcessorBase2(); - - class BatchSpanProcessor2 extends BatchSpanProcessorBase_1.BatchSpanProcessorBase { - onShutdown() {} - } - exports.BatchSpanProcessor = BatchSpanProcessor2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/RandomIdGenerator.js -var require_RandomIdGenerator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RandomIdGenerator = undefined; - var SPAN_ID_BYTES = 8; - var TRACE_ID_BYTES = 16; - - class RandomIdGenerator2 { - generateTraceId = getIdGenerator(TRACE_ID_BYTES); - generateSpanId = getIdGenerator(SPAN_ID_BYTES); - } - exports.RandomIdGenerator = RandomIdGenerator2; - var SHARED_BUFFER = Buffer.allocUnsafe(TRACE_ID_BYTES); - function getIdGenerator(bytes) { - return function generateId() { - for (let i = 0;i < bytes / 4; i++) { - SHARED_BUFFER.writeUInt32BE(Math.random() * 2 ** 32 >>> 0, i * 4); - } - for (let i = 0;i < bytes; i++) { - if (SHARED_BUFFER[i] > 0) { - break; - } else if (i === bytes - 1) { - SHARED_BUFFER[bytes - 1] = 1; - } - } - return SHARED_BUFFER.toString("hex", 0, bytes); - }; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/node/index.js -var require_node24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RandomIdGenerator = exports.BatchSpanProcessor = undefined; - var BatchSpanProcessor_1 = require_BatchSpanProcessor2(); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return BatchSpanProcessor_1.BatchSpanProcessor; - } }); - var RandomIdGenerator_1 = require_RandomIdGenerator2(); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return RandomIdGenerator_1.RandomIdGenerator; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/platform/index.js -var require_platform23 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RandomIdGenerator = exports.BatchSpanProcessor = undefined; - var node_1 = require_node24(); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return node_1.BatchSpanProcessor; - } }); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return node_1.RandomIdGenerator; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/Tracer.js -var require_Tracer2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Tracer = undefined; - var api8 = require_src(); - var core_1 = require_src89(); - var Span_1 = require_Span2(); - var utility_1 = require_utility2(); - var platform_1 = require_platform23(); - - class Tracer { - _sampler; - _generalLimits; - _spanLimits; - _idGenerator; - instrumentationScope; - _resource; - _spanProcessor; - constructor(instrumentationScope, config2, resource, spanProcessor) { - const localConfig = (0, utility_1.mergeConfig)(config2); - this._sampler = localConfig.sampler; - this._generalLimits = localConfig.generalLimits; - this._spanLimits = localConfig.spanLimits; - this._idGenerator = config2.idGenerator || new platform_1.RandomIdGenerator; - this._resource = resource; - this._spanProcessor = spanProcessor; - this.instrumentationScope = instrumentationScope; - } - startSpan(name, options = {}, context8 = api8.context.active()) { - if (options.root) { - context8 = api8.trace.deleteSpan(context8); - } - const parentSpan = api8.trace.getSpan(context8); - if ((0, core_1.isTracingSuppressed)(context8)) { - api8.diag.debug("Instrumentation suppressed, returning Noop Span"); - const nonRecordingSpan = api8.trace.wrapSpanContext(api8.INVALID_SPAN_CONTEXT); - return nonRecordingSpan; - } - const parentSpanContext = parentSpan?.spanContext(); - const spanId = this._idGenerator.generateSpanId(); - let validParentSpanContext; - let traceId; - let traceState; - if (!parentSpanContext || !api8.trace.isSpanContextValid(parentSpanContext)) { - traceId = this._idGenerator.generateTraceId(); - } else { - traceId = parentSpanContext.traceId; - traceState = parentSpanContext.traceState; - validParentSpanContext = parentSpanContext; - } - const spanKind = options.kind ?? api8.SpanKind.INTERNAL; - const links = (options.links ?? []).map((link) => { - return { - context: link.context, - attributes: (0, core_1.sanitizeAttributes)(link.attributes) - }; - }); - const attributes = (0, core_1.sanitizeAttributes)(options.attributes); - const samplingResult = this._sampler.shouldSample(context8, traceId, name, spanKind, attributes, links); - traceState = samplingResult.traceState ?? traceState; - const traceFlags = samplingResult.decision === api8.SamplingDecision.RECORD_AND_SAMPLED ? api8.TraceFlags.SAMPLED : api8.TraceFlags.NONE; - const spanContext = { traceId, spanId, traceFlags, traceState }; - if (samplingResult.decision === api8.SamplingDecision.NOT_RECORD) { - api8.diag.debug("Recording is off, propagating context in a non-recording span"); - const nonRecordingSpan = api8.trace.wrapSpanContext(spanContext); - return nonRecordingSpan; - } - const initAttributes = (0, core_1.sanitizeAttributes)(Object.assign(attributes, samplingResult.attributes)); - const span = new Span_1.SpanImpl({ - resource: this._resource, - scope: this.instrumentationScope, - context: context8, - spanContext, - name, - kind: spanKind, - links, - parentSpanContext: validParentSpanContext, - attributes: initAttributes, - startTime: options.startTime, - spanProcessor: this._spanProcessor, - spanLimits: this._spanLimits - }); - return span; - } - startActiveSpan(name, arg2, arg3, arg4) { - let opts; - let ctx; - let fn; - if (arguments.length < 2) { - return; - } else if (arguments.length === 2) { - fn = arg2; - } else if (arguments.length === 3) { - opts = arg2; - fn = arg3; - } else { - opts = arg2; - ctx = arg3; - fn = arg4; - } - const parentContext = ctx ?? api8.context.active(); - const span = this.startSpan(name, opts, parentContext); - const contextWithSpanSet = api8.trace.setSpan(parentContext, span); - return api8.context.with(contextWithSpanSet, fn, undefined, span); - } - getGeneralLimits() { - return this._generalLimits; - } - getSpanLimits() { - return this._spanLimits; - } - } - exports.Tracer = Tracer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/MultiSpanProcessor.js -var require_MultiSpanProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MultiSpanProcessor = undefined; - var core_1 = require_src89(); - - class MultiSpanProcessor { - _spanProcessors; - constructor(_spanProcessors) { - this._spanProcessors = _spanProcessors; - } - forceFlush() { - const promises = []; - for (const spanProcessor of this._spanProcessors) { - promises.push(spanProcessor.forceFlush()); - } - return new Promise((resolve2) => { - Promise.all(promises).then(() => { - resolve2(); - }).catch((error48) => { - (0, core_1.globalErrorHandler)(error48 || new Error("MultiSpanProcessor: forceFlush failed")); - resolve2(); - }); - }); - } - onStart(span, context8) { - for (const spanProcessor of this._spanProcessors) { - spanProcessor.onStart(span, context8); - } - } - onEnd(span) { - for (const spanProcessor of this._spanProcessors) { - spanProcessor.onEnd(span); - } - } - shutdown() { - const promises = []; - for (const spanProcessor of this._spanProcessors) { - promises.push(spanProcessor.shutdown()); - } - return new Promise((resolve2, reject) => { - Promise.all(promises).then(() => { - resolve2(); - }, reject); - }); - } - } - exports.MultiSpanProcessor = MultiSpanProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.js -var require_BasicTracerProvider2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BasicTracerProvider = exports.ForceFlushState = undefined; - var core_1 = require_src89(); - var resources_1 = require_src91(); - var Tracer_1 = require_Tracer2(); - var config_1 = require_config4(); - var MultiSpanProcessor_1 = require_MultiSpanProcessor2(); - var utility_1 = require_utility2(); - var ForceFlushState; - (function(ForceFlushState2) { - ForceFlushState2[ForceFlushState2["resolved"] = 0] = "resolved"; - ForceFlushState2[ForceFlushState2["timeout"] = 1] = "timeout"; - ForceFlushState2[ForceFlushState2["error"] = 2] = "error"; - ForceFlushState2[ForceFlushState2["unresolved"] = 3] = "unresolved"; - })(ForceFlushState = exports.ForceFlushState || (exports.ForceFlushState = {})); - - class BasicTracerProvider { - _config; - _tracers = new Map; - _resource; - _activeSpanProcessor; - constructor(config2 = {}) { - const mergedConfig = (0, core_1.merge)({}, (0, config_1.loadDefaultConfig)(), (0, utility_1.reconfigureLimits)(config2)); - this._resource = mergedConfig.resource ?? (0, resources_1.defaultResource)(); - this._config = Object.assign({}, mergedConfig, { - resource: this._resource - }); - const spanProcessors2 = []; - if (config2.spanProcessors?.length) { - spanProcessors2.push(...config2.spanProcessors); - } - this._activeSpanProcessor = new MultiSpanProcessor_1.MultiSpanProcessor(spanProcessors2); - } - getTracer(name, version2, options) { - const key = `${name}@${version2 || ""}:${options?.schemaUrl || ""}`; - if (!this._tracers.has(key)) { - this._tracers.set(key, new Tracer_1.Tracer({ name, version: version2, schemaUrl: options?.schemaUrl }, this._config, this._resource, this._activeSpanProcessor)); - } - return this._tracers.get(key); - } - forceFlush() { - const timeout = this._config.forceFlushTimeoutMillis; - const promises = this._activeSpanProcessor["_spanProcessors"].map((spanProcessor) => { - return new Promise((resolve2) => { - let state; - const timeoutInterval = setTimeout(() => { - resolve2(new Error(`Span processor did not completed within timeout period of ${timeout} ms`)); - state = ForceFlushState.timeout; - }, timeout); - spanProcessor.forceFlush().then(() => { - clearTimeout(timeoutInterval); - if (state !== ForceFlushState.timeout) { - state = ForceFlushState.resolved; - resolve2(state); - } - }).catch((error48) => { - clearTimeout(timeoutInterval); - state = ForceFlushState.error; - resolve2(error48); - }); - }); - }); - return new Promise((resolve2, reject) => { - Promise.all(promises).then((results) => { - const errors3 = results.filter((result) => result !== ForceFlushState.resolved); - if (errors3.length > 0) { - reject(errors3); - } else { - resolve2(); - } - }).catch((error48) => reject([error48])); - }); - } - shutdown() { - return this._activeSpanProcessor.shutdown(); - } - } - exports.BasicTracerProvider = BasicTracerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/ConsoleSpanExporter.js -var require_ConsoleSpanExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleSpanExporter = undefined; - var core_1 = require_src89(); - - class ConsoleSpanExporter { - export(spans, resultCallback) { - return this._sendSpans(spans, resultCallback); - } - shutdown() { - this._sendSpans([]); - return this.forceFlush(); - } - forceFlush() { - return Promise.resolve(); - } - _exportInfo(span) { - return { - resource: { - attributes: span.resource.attributes - }, - instrumentationScope: span.instrumentationScope, - traceId: span.spanContext().traceId, - parentSpanContext: span.parentSpanContext, - traceState: span.spanContext().traceState?.serialize(), - name: span.name, - id: span.spanContext().spanId, - kind: span.kind, - timestamp: (0, core_1.hrTimeToMicroseconds)(span.startTime), - duration: (0, core_1.hrTimeToMicroseconds)(span.duration), - attributes: span.attributes, - status: span.status, - events: span.events, - links: span.links - }; - } - _sendSpans(spans, done) { - for (const span of spans) { - console.dir(this._exportInfo(span), { depth: 3 }); - } - if (done) { - return done({ code: core_1.ExportResultCode.SUCCESS }); - } - } - } - exports.ConsoleSpanExporter = ConsoleSpanExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/InMemorySpanExporter.js -var require_InMemorySpanExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InMemorySpanExporter = undefined; - var core_1 = require_src89(); - - class InMemorySpanExporter { - _finishedSpans = []; - _stopped = false; - export(spans, resultCallback) { - if (this._stopped) - return resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Exporter has been stopped") - }); - this._finishedSpans.push(...spans); - setTimeout(() => resultCallback({ code: core_1.ExportResultCode.SUCCESS }), 0); - } - shutdown() { - this._stopped = true; - this._finishedSpans = []; - return this.forceFlush(); - } - forceFlush() { - return Promise.resolve(); - } - reset() { - this._finishedSpans = []; - } - getFinishedSpans() { - return this._finishedSpans; - } - } - exports.InMemorySpanExporter = InMemorySpanExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SimpleSpanProcessor.js -var require_SimpleSpanProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SimpleSpanProcessor = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - - class SimpleSpanProcessor2 { - _exporter; - _shutdownOnce; - _pendingExports; - constructor(_exporter) { - this._exporter = _exporter; - this._shutdownOnce = new core_1.BindOnceFuture(this._shutdown, this); - this._pendingExports = new Set; - } - async forceFlush() { - await Promise.all(Array.from(this._pendingExports)); - if (this._exporter.forceFlush) { - await this._exporter.forceFlush(); - } - } - onStart(_span, _parentContext) {} - onEnd(span) { - if (this._shutdownOnce.isCalled) { - return; - } - if ((span.spanContext().traceFlags & api_1.TraceFlags.SAMPLED) === 0) { - return; - } - const pendingExport = this._doExport(span).catch((err) => (0, core_1.globalErrorHandler)(err)); - this._pendingExports.add(pendingExport); - pendingExport.finally(() => this._pendingExports.delete(pendingExport)); - } - async _doExport(span) { - if (span.resource.asyncAttributesPending) { - await span.resource.waitForAsyncAttributes?.(); - } - const result = await core_1.internal._export(this._exporter, [span]); - if (result.code !== core_1.ExportResultCode.SUCCESS) { - throw result.error ?? new Error(`SimpleSpanProcessor: span export failed (status ${result})`); - } - } - shutdown() { - return this._shutdownOnce.call(); - } - _shutdown() { - return this._exporter.shutdown(); - } - } - exports.SimpleSpanProcessor = SimpleSpanProcessor2; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/export/NoopSpanProcessor.js -var require_NoopSpanProcessor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NoopSpanProcessor = undefined; - - class NoopSpanProcessor { - onStart(_span, _context) {} - onEnd(_span) {} - shutdown() { - return Promise.resolve(); - } - forceFlush() { - return Promise.resolve(); - } - } - exports.NoopSpanProcessor = NoopSpanProcessor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-base@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js -var require_src95 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SamplingDecision = exports.TraceIdRatioBasedSampler = exports.ParentBasedSampler = exports.AlwaysOnSampler = exports.AlwaysOffSampler = exports.NoopSpanProcessor = exports.SimpleSpanProcessor = exports.InMemorySpanExporter = exports.ConsoleSpanExporter = exports.RandomIdGenerator = exports.BatchSpanProcessor = exports.BasicTracerProvider = undefined; - var BasicTracerProvider_1 = require_BasicTracerProvider2(); - Object.defineProperty(exports, "BasicTracerProvider", { enumerable: true, get: function() { - return BasicTracerProvider_1.BasicTracerProvider; - } }); - var platform_1 = require_platform23(); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return platform_1.BatchSpanProcessor; - } }); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return platform_1.RandomIdGenerator; - } }); - var ConsoleSpanExporter_1 = require_ConsoleSpanExporter2(); - Object.defineProperty(exports, "ConsoleSpanExporter", { enumerable: true, get: function() { - return ConsoleSpanExporter_1.ConsoleSpanExporter; - } }); - var InMemorySpanExporter_1 = require_InMemorySpanExporter2(); - Object.defineProperty(exports, "InMemorySpanExporter", { enumerable: true, get: function() { - return InMemorySpanExporter_1.InMemorySpanExporter; - } }); - var SimpleSpanProcessor_1 = require_SimpleSpanProcessor2(); - Object.defineProperty(exports, "SimpleSpanProcessor", { enumerable: true, get: function() { - return SimpleSpanProcessor_1.SimpleSpanProcessor; - } }); - var NoopSpanProcessor_1 = require_NoopSpanProcessor2(); - Object.defineProperty(exports, "NoopSpanProcessor", { enumerable: true, get: function() { - return NoopSpanProcessor_1.NoopSpanProcessor; - } }); - var AlwaysOffSampler_1 = require_AlwaysOffSampler2(); - Object.defineProperty(exports, "AlwaysOffSampler", { enumerable: true, get: function() { - return AlwaysOffSampler_1.AlwaysOffSampler; - } }); - var AlwaysOnSampler_1 = require_AlwaysOnSampler2(); - Object.defineProperty(exports, "AlwaysOnSampler", { enumerable: true, get: function() { - return AlwaysOnSampler_1.AlwaysOnSampler; - } }); - var ParentBasedSampler_1 = require_ParentBasedSampler2(); - Object.defineProperty(exports, "ParentBasedSampler", { enumerable: true, get: function() { - return ParentBasedSampler_1.ParentBasedSampler; - } }); - var TraceIdRatioBasedSampler_1 = require_TraceIdRatioBasedSampler2(); - Object.defineProperty(exports, "TraceIdRatioBasedSampler", { enumerable: true, get: function() { - return TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler; - } }); - var Sampler_1 = require_Sampler2(); - Object.defineProperty(exports, "SamplingDecision", { enumerable: true, get: function() { - return Sampler_1.SamplingDecision; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-node@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-node/build/src/NodeTracerProvider.js -var require_NodeTracerProvider2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeTracerProvider = undefined; - var context_async_hooks_1 = require_src94(); - var sdk_trace_base_1 = require_src95(); - var api_1 = require_src(); - var core_1 = require_src89(); - function setupContextManager(contextManager) { - if (contextManager === null) { - return; - } - if (contextManager === undefined) { - const defaultContextManager = new context_async_hooks_1.AsyncLocalStorageContextManager; - defaultContextManager.enable(); - api_1.context.setGlobalContextManager(defaultContextManager); - return; - } - contextManager.enable(); - api_1.context.setGlobalContextManager(contextManager); - } - function setupPropagator(propagator) { - if (propagator === null) { - return; - } - if (propagator === undefined) { - api_1.propagation.setGlobalPropagator(new core_1.CompositePropagator({ - propagators: [ - new core_1.W3CTraceContextPropagator, - new core_1.W3CBaggagePropagator - ] - })); - return; - } - api_1.propagation.setGlobalPropagator(propagator); - } - - class NodeTracerProvider extends sdk_trace_base_1.BasicTracerProvider { - constructor(config2 = {}) { - super(config2); - } - register(config2 = {}) { - api_1.trace.setGlobalTracerProvider(this); - setupContextManager(config2.contextManager); - setupPropagator(config2.propagator); - } - } - exports.NodeTracerProvider = NodeTracerProvider; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-trace-node@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-trace-node/build/src/index.js -var require_src96 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceIdRatioBasedSampler = exports.SimpleSpanProcessor = exports.SamplingDecision = exports.RandomIdGenerator = exports.ParentBasedSampler = exports.NoopSpanProcessor = exports.InMemorySpanExporter = exports.ConsoleSpanExporter = exports.BatchSpanProcessor = exports.BasicTracerProvider = exports.AlwaysOnSampler = exports.AlwaysOffSampler = exports.NodeTracerProvider = undefined; - var NodeTracerProvider_1 = require_NodeTracerProvider2(); - Object.defineProperty(exports, "NodeTracerProvider", { enumerable: true, get: function() { - return NodeTracerProvider_1.NodeTracerProvider; - } }); - var sdk_trace_base_1 = require_src95(); - Object.defineProperty(exports, "AlwaysOffSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.AlwaysOffSampler; - } }); - Object.defineProperty(exports, "AlwaysOnSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.AlwaysOnSampler; - } }); - Object.defineProperty(exports, "BasicTracerProvider", { enumerable: true, get: function() { - return sdk_trace_base_1.BasicTracerProvider; - } }); - Object.defineProperty(exports, "BatchSpanProcessor", { enumerable: true, get: function() { - return sdk_trace_base_1.BatchSpanProcessor; - } }); - Object.defineProperty(exports, "ConsoleSpanExporter", { enumerable: true, get: function() { - return sdk_trace_base_1.ConsoleSpanExporter; - } }); - Object.defineProperty(exports, "InMemorySpanExporter", { enumerable: true, get: function() { - return sdk_trace_base_1.InMemorySpanExporter; - } }); - Object.defineProperty(exports, "NoopSpanProcessor", { enumerable: true, get: function() { - return sdk_trace_base_1.NoopSpanProcessor; - } }); - Object.defineProperty(exports, "ParentBasedSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.ParentBasedSampler; - } }); - Object.defineProperty(exports, "RandomIdGenerator", { enumerable: true, get: function() { - return sdk_trace_base_1.RandomIdGenerator; - } }); - Object.defineProperty(exports, "SamplingDecision", { enumerable: true, get: function() { - return sdk_trace_base_1.SamplingDecision; - } }); - Object.defineProperty(exports, "SimpleSpanProcessor", { enumerable: true, get: function() { - return sdk_trace_base_1.SimpleSpanProcessor; - } }); - Object.defineProperty(exports, "TraceIdRatioBasedSampler", { enumerable: true, get: function() { - return sdk_trace_base_1.TraceIdRatioBasedSampler; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/autoLoaderUtils.js -var require_autoLoaderUtils2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.disableInstrumentations = exports.enableInstrumentations = undefined; - function enableInstrumentations(instrumentations, tracerProvider, meterProvider, loggerProvider) { - for (let i = 0, j = instrumentations.length;i < j; i++) { - const instrumentation = instrumentations[i]; - if (tracerProvider) { - instrumentation.setTracerProvider(tracerProvider); - } - if (meterProvider) { - instrumentation.setMeterProvider(meterProvider); - } - if (loggerProvider && instrumentation.setLoggerProvider) { - instrumentation.setLoggerProvider(loggerProvider); - } - if (!instrumentation.getConfig().enabled) { - instrumentation.enable(); - } - } - } - exports.enableInstrumentations = enableInstrumentations; - function disableInstrumentations(instrumentations) { - instrumentations.forEach((instrumentation) => instrumentation.disable()); - } - exports.disableInstrumentations = disableInstrumentations; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/autoLoader.js -var require_autoLoader2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.registerInstrumentations = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src90(); - var autoLoaderUtils_1 = require_autoLoaderUtils2(); - function registerInstrumentations(options) { - const tracerProvider = options.tracerProvider || api_1.trace.getTracerProvider(); - const meterProvider = options.meterProvider || api_1.metrics.getMeterProvider(); - const loggerProvider = options.loggerProvider || api_logs_1.logs.getLoggerProvider(); - const instrumentations = options.instrumentations?.flat() ?? []; - (0, autoLoaderUtils_1.enableInstrumentations)(instrumentations, tracerProvider, meterProvider, loggerProvider); - return () => { - (0, autoLoaderUtils_1.disableInstrumentations)(instrumentations); - }; - } - exports.registerInstrumentations = registerInstrumentations; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/semver.js -var require_semver3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.satisfies = undefined; - var api_1 = require_src(); - var VERSION_REGEXP = /^(?:v)?(?(?0|[1-9]\d*)\.(?0|[1-9]\d*)\.(?0|[1-9]\d*))(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; - var RANGE_REGEXP = /^(?<|>|=|==|<=|>=|~|\^|~>)?\s*(?:v)?(?(?x|X|\*|0|[1-9]\d*)(?:\.(?x|X|\*|0|[1-9]\d*))?(?:\.(?x|X|\*|0|[1-9]\d*))?)(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; - var operatorResMap = { - ">": [1], - ">=": [0, 1], - "=": [0], - "<=": [-1, 0], - "<": [-1], - "!=": [-1, 1] - }; - function satisfies(version2, range, options) { - if (!_validateVersion(version2)) { - api_1.diag.error(`Invalid version: ${version2}`); - return false; - } - if (!range) { - return true; - } - range = range.replace(/([<>=~^]+)\s+/g, "$1"); - const parsedVersion = _parseVersion(version2); - if (!parsedVersion) { - return false; - } - const allParsedRanges = []; - const checkResult = _doSatisfies(parsedVersion, range, allParsedRanges, options); - if (checkResult && !options?.includePrerelease) { - return _doPreleaseCheck(parsedVersion, allParsedRanges); - } - return checkResult; - } - exports.satisfies = satisfies; - function _validateVersion(version2) { - return typeof version2 === "string" && VERSION_REGEXP.test(version2); - } - function _doSatisfies(parsedVersion, range, allParsedRanges, options) { - if (range.includes("||")) { - const ranges = range.trim().split("||"); - for (const r of ranges) { - if (_checkRange(parsedVersion, r, allParsedRanges, options)) { - return true; - } - } - return false; - } else if (range.includes(" - ")) { - range = replaceHyphen(range, options); - } else if (range.includes(" ")) { - const ranges = range.trim().replace(/\s{2,}/g, " ").split(" "); - for (const r of ranges) { - if (!_checkRange(parsedVersion, r, allParsedRanges, options)) { - return false; - } - } - return true; - } - return _checkRange(parsedVersion, range, allParsedRanges, options); - } - function _checkRange(parsedVersion, range, allParsedRanges, options) { - range = _normalizeRange(range, options); - if (range.includes(" ")) { - return _doSatisfies(parsedVersion, range, allParsedRanges, options); - } else { - const parsedRange = _parseRange(range); - allParsedRanges.push(parsedRange); - return _satisfies(parsedVersion, parsedRange); - } - } - function _satisfies(parsedVersion, parsedRange) { - if (parsedRange.invalid) { - return false; - } - if (!parsedRange.version || _isWildcard(parsedRange.version)) { - return true; - } - let comparisonResult = _compareVersionSegments(parsedVersion.versionSegments || [], parsedRange.versionSegments || []); - if (comparisonResult === 0) { - const versionPrereleaseSegments = parsedVersion.prereleaseSegments || []; - const rangePrereleaseSegments = parsedRange.prereleaseSegments || []; - if (!versionPrereleaseSegments.length && !rangePrereleaseSegments.length) { - comparisonResult = 0; - } else if (!versionPrereleaseSegments.length && rangePrereleaseSegments.length) { - comparisonResult = 1; - } else if (versionPrereleaseSegments.length && !rangePrereleaseSegments.length) { - comparisonResult = -1; - } else { - comparisonResult = _compareVersionSegments(versionPrereleaseSegments, rangePrereleaseSegments); - } - } - return operatorResMap[parsedRange.op]?.includes(comparisonResult); - } - function _doPreleaseCheck(parsedVersion, allParsedRanges) { - if (parsedVersion.prerelease) { - return allParsedRanges.some((r) => r.prerelease && r.version === parsedVersion.version); - } - return true; - } - function _normalizeRange(range, options) { - range = range.trim(); - range = replaceCaret(range, options); - range = replaceTilde(range); - range = replaceXRange(range, options); - range = range.trim(); - return range; - } - function isX(id) { - return !id || id.toLowerCase() === "x" || id === "*"; - } - function _parseVersion(versionString) { - const match2 = versionString.match(VERSION_REGEXP); - if (!match2) { - api_1.diag.error(`Invalid version: ${versionString}`); - return; - } - const version2 = match2.groups.version; - const prerelease = match2.groups.prerelease; - const build = match2.groups.build; - const versionSegments = version2.split("."); - const prereleaseSegments = prerelease?.split("."); - return { - op: undefined, - version: version2, - versionSegments, - versionSegmentCount: versionSegments.length, - prerelease, - prereleaseSegments, - prereleaseSegmentCount: prereleaseSegments ? prereleaseSegments.length : 0, - build - }; - } - function _parseRange(rangeString) { - if (!rangeString) { - return {}; - } - const match2 = rangeString.match(RANGE_REGEXP); - if (!match2) { - api_1.diag.error(`Invalid range: ${rangeString}`); - return { - invalid: true - }; - } - let op = match2.groups.op; - const version2 = match2.groups.version; - const prerelease = match2.groups.prerelease; - const build = match2.groups.build; - const versionSegments = version2.split("."); - const prereleaseSegments = prerelease?.split("."); - if (op === "==") { - op = "="; - } - return { - op: op || "=", - version: version2, - versionSegments, - versionSegmentCount: versionSegments.length, - prerelease, - prereleaseSegments, - prereleaseSegmentCount: prereleaseSegments ? prereleaseSegments.length : 0, - build - }; - } - function _isWildcard(s2) { - return s2 === "*" || s2 === "x" || s2 === "X"; - } - function _parseVersionString(v) { - const n = parseInt(v, 10); - return isNaN(n) ? v : n; - } - function _normalizeVersionType(a, b) { - if (typeof a === typeof b) { - if (typeof a === "number") { - return [a, b]; - } else if (typeof a === "string") { - return [a, b]; - } else { - throw new Error("Version segments can only be strings or numbers"); - } - } else { - return [String(a), String(b)]; - } - } - function _compareVersionStrings(v1, v2) { - if (_isWildcard(v1) || _isWildcard(v2)) { - return 0; - } - const [parsedV1, parsedV2] = _normalizeVersionType(_parseVersionString(v1), _parseVersionString(v2)); - if (parsedV1 > parsedV2) { - return 1; - } else if (parsedV1 < parsedV2) { - return -1; - } - return 0; - } - function _compareVersionSegments(v1, v2) { - for (let i = 0;i < Math.max(v1.length, v2.length); i++) { - const res = _compareVersionStrings(v1[i] || "0", v2[i] || "0"); - if (res !== 0) { - return res; - } - } - return 0; - } - var LETTERDASHNUMBER = "[a-zA-Z0-9-]"; - var NUMERICIDENTIFIER = "0|[1-9]\\d*"; - var NONNUMERICIDENTIFIER = `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`; - var GTLT = "((?:<|>)?=?)"; - var PRERELEASEIDENTIFIER = `(?:${NUMERICIDENTIFIER}|${NONNUMERICIDENTIFIER})`; - var PRERELEASE = `(?:-(${PRERELEASEIDENTIFIER}(?:\\.${PRERELEASEIDENTIFIER})*))`; - var BUILDIDENTIFIER = `${LETTERDASHNUMBER}+`; - var BUILD = `(?:\\+(${BUILDIDENTIFIER}(?:\\.${BUILDIDENTIFIER})*))`; - var XRANGEIDENTIFIER = `${NUMERICIDENTIFIER}|x|X|\\*`; - var XRANGEPLAIN = `[v=\\s]*(${XRANGEIDENTIFIER})` + `(?:\\.(${XRANGEIDENTIFIER})` + `(?:\\.(${XRANGEIDENTIFIER})` + `(?:${PRERELEASE})?${BUILD}?` + `)?)?`; - var XRANGE = `^${GTLT}\\s*${XRANGEPLAIN}$`; - var XRANGE_REGEXP = new RegExp(XRANGE); - var HYPHENRANGE = `^\\s*(${XRANGEPLAIN})` + `\\s+-\\s+` + `(${XRANGEPLAIN})` + `\\s*$`; - var HYPHENRANGE_REGEXP = new RegExp(HYPHENRANGE); - var LONETILDE = "(?:~>?)"; - var TILDE = `^${LONETILDE}${XRANGEPLAIN}$`; - var TILDE_REGEXP = new RegExp(TILDE); - var LONECARET = "(?:\\^)"; - var CARET = `^${LONECARET}${XRANGEPLAIN}$`; - var CARET_REGEXP = new RegExp(CARET); - function replaceTilde(comp) { - const r = TILDE_REGEXP; - return comp.replace(r, (_, M, m, p, pr) => { - let ret; - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; - } else if (isX(p)) { - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; - } else if (pr) { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; - } - return ret; - }); - } - function replaceCaret(comp, options) { - const r = CARET_REGEXP; - const z2 = options?.includePrerelease ? "-0" : ""; - return comp.replace(r, (_, M, m, p, pr) => { - let ret; - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = `>=${M}.0.0${z2} <${+M + 1}.0.0-0`; - } else if (isX(p)) { - if (M === "0") { - ret = `>=${M}.${m}.0${z2} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.0${z2} <${+M + 1}.0.0-0`; - } - } else if (pr) { - if (M === "0") { - if (m === "0") { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; - } else { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } - } else { - ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; - } - } else { - if (M === "0") { - if (m === "0") { - ret = `>=${M}.${m}.${p}${z2} <${M}.${m}.${+p + 1}-0`; - } else { - ret = `>=${M}.${m}.${p}${z2} <${M}.${+m + 1}.0-0`; - } - } else { - ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; - } - } - return ret; - }); - } - function replaceXRange(comp, options) { - const r = XRANGE_REGEXP; - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - const xM = isX(M); - const xm = xM || isX(m); - const xp = xm || isX(p); - const anyX = xp; - if (gtlt === "=" && anyX) { - gtlt = ""; - } - pr = options?.includePrerelease ? "-0" : ""; - if (xM) { - if (gtlt === ">" || gtlt === "<") { - ret = "<0.0.0-0"; - } else { - ret = "*"; - } - } else if (gtlt && anyX) { - if (xm) { - m = 0; - } - p = 0; - if (gtlt === ">") { - gtlt = ">="; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else { - m = +m + 1; - p = 0; - } - } else if (gtlt === "<=") { - gtlt = "<"; - if (xm) { - M = +M + 1; - } else { - m = +m + 1; - } - } - if (gtlt === "<") { - pr = "-0"; - } - ret = `${gtlt + M}.${m}.${p}${pr}`; - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; - } else if (xp) { - ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; - } - return ret; - }); - } - function replaceHyphen(comp, options) { - const r = HYPHENRANGE_REGEXP; - return comp.replace(r, (_, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { - if (isX(fM)) { - from = ""; - } else if (isX(fm)) { - from = `>=${fM}.0.0${options?.includePrerelease ? "-0" : ""}`; - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${options?.includePrerelease ? "-0" : ""}`; - } else if (fpr) { - from = `>=${from}`; - } else { - from = `>=${from}${options?.includePrerelease ? "-0" : ""}`; - } - if (isX(tM)) { - to = ""; - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0`; - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0`; - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}`; - } else if (options?.includePrerelease) { - to = `<${tM}.${tm}.${+tp + 1}-0`; - } else { - to = `<=${to}`; - } - return `${from} ${to}`.trim(); - }); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/shimmer.js -var require_shimmer2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.massUnwrap = exports.unwrap = exports.massWrap = exports.wrap = undefined; - var logger = console.error.bind(console); - function defineProperty(obj, name, value) { - const enumerable = !!obj[name] && Object.prototype.propertyIsEnumerable.call(obj, name); - Object.defineProperty(obj, name, { - configurable: true, - enumerable, - writable: true, - value - }); - } - var wrap = (nodule, name, wrapper) => { - if (!nodule || !nodule[name]) { - logger("no original function " + String(name) + " to wrap"); - return; - } - if (!wrapper) { - logger("no wrapper function"); - logger(new Error().stack); - return; - } - const original = nodule[name]; - if (typeof original !== "function" || typeof wrapper !== "function") { - logger("original object and wrapper must be functions"); - return; - } - const wrapped = wrapper(original, name); - defineProperty(wrapped, "__original", original); - defineProperty(wrapped, "__unwrap", () => { - if (nodule[name] === wrapped) { - defineProperty(nodule, name, original); - } - }); - defineProperty(wrapped, "__wrapped", true); - defineProperty(nodule, name, wrapped); - return wrapped; - }; - exports.wrap = wrap; - var massWrap = (nodules, names, wrapper) => { - if (!nodules) { - logger("must provide one or more modules to patch"); - logger(new Error().stack); - return; - } else if (!Array.isArray(nodules)) { - nodules = [nodules]; - } - if (!(names && Array.isArray(names))) { - logger("must provide one or more functions to wrap on modules"); - return; - } - nodules.forEach((nodule) => { - names.forEach((name) => { - (0, exports.wrap)(nodule, name, wrapper); - }); - }); - }; - exports.massWrap = massWrap; - var unwrap = (nodule, name) => { - if (!nodule || !nodule[name]) { - logger("no function to unwrap."); - logger(new Error().stack); - return; - } - const wrapped = nodule[name]; - if (!wrapped.__unwrap) { - logger("no original to unwrap to -- has " + String(name) + " already been unwrapped?"); - } else { - wrapped.__unwrap(); - return; - } - }; - exports.unwrap = unwrap; - var massUnwrap = (nodules, names) => { - if (!nodules) { - logger("must provide one or more modules to patch"); - logger(new Error().stack); - return; - } else if (!Array.isArray(nodules)) { - nodules = [nodules]; - } - if (!(names && Array.isArray(names))) { - logger("must provide one or more functions to unwrap on modules"); - return; - } - nodules.forEach((nodule) => { - names.forEach((name) => { - (0, exports.unwrap)(nodule, name); - }); - }); - }; - exports.massUnwrap = massUnwrap; - function shimmer(options) { - if (options && options.logger) { - if (typeof options.logger !== "function") { - logger("new logger isn't a function, not replacing"); - } else { - logger = options.logger; - } - } - } - exports.default = shimmer; - shimmer.wrap = exports.wrap; - shimmer.massWrap = exports.massWrap; - shimmer.unwrap = exports.unwrap; - shimmer.massUnwrap = exports.massUnwrap; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/instrumentation.js -var require_instrumentation39 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationAbstract = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src90(); - var shimmer = require_shimmer2(); - - class InstrumentationAbstract { - instrumentationName; - instrumentationVersion; - _config = {}; - _tracer; - _meter; - _logger; - _diag; - constructor(instrumentationName, instrumentationVersion, config2) { - this.instrumentationName = instrumentationName; - this.instrumentationVersion = instrumentationVersion; - this.setConfig(config2); - this._diag = api_1.diag.createComponentLogger({ - namespace: instrumentationName - }); - this._tracer = api_1.trace.getTracer(instrumentationName, instrumentationVersion); - this._meter = api_1.metrics.getMeter(instrumentationName, instrumentationVersion); - this._logger = api_logs_1.logs.getLogger(instrumentationName, instrumentationVersion); - this._updateMetricInstruments(); - } - _wrap = shimmer.wrap; - _unwrap = shimmer.unwrap; - _massWrap = shimmer.massWrap; - _massUnwrap = shimmer.massUnwrap; - get meter() { - return this._meter; - } - setMeterProvider(meterProvider) { - this._meter = meterProvider.getMeter(this.instrumentationName, this.instrumentationVersion); - this._updateMetricInstruments(); - } - get logger() { - return this._logger; - } - setLoggerProvider(loggerProvider) { - this._logger = loggerProvider.getLogger(this.instrumentationName, this.instrumentationVersion); - } - getModuleDefinitions() { - const initResult = this.init() ?? []; - if (!Array.isArray(initResult)) { - return [initResult]; - } - return initResult; - } - _updateMetricInstruments() { - return; - } - getConfig() { - return this._config; - } - setConfig(config2) { - this._config = { - enabled: true, - ...config2 - }; - } - setTracerProvider(tracerProvider) { - this._tracer = tracerProvider.getTracer(this.instrumentationName, this.instrumentationVersion); - } - get tracer() { - return this._tracer; - } - _runSpanCustomizationHook(hookHandler, triggerName, span, info) { - if (!hookHandler) { - return; - } - try { - hookHandler(span, info); - } catch (e) { - this._diag.error(`Error running span customization hook due to exception in handler`, { triggerName }, e); - } - } - } - exports.InstrumentationAbstract = InstrumentationAbstract; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/homedir.js -var require_homedir = __commonJS((exports, module) => { - var os = __require("os"); - module.exports = os.homedir || function homedir() { - var home = process.env.HOME; - var user2 = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME; - if (process.platform === "win32") { - return process.env.USERPROFILE || process.env.HOMEDRIVE + process.env.HOMEPATH || home || null; - } - if (process.platform === "darwin") { - return home || (user2 ? "/Users/" + user2 : null); - } - if (process.platform === "linux") { - return home || (process.getuid() === 0 ? "/root" : user2 ? "/home/" + user2 : null); - } - return home || null; - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/caller.js -var require_caller = __commonJS((exports, module) => { - module.exports = function() { - var origPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = function(_, stack2) { - return stack2; - }; - var stack = new Error().stack; - Error.prepareStackTrace = origPrepareStackTrace; - return stack[2].getFileName(); - }; -}); - -// ../../../../node_modules/.bun/path-parse@1.0.7/node_modules/path-parse/index.js -var require_path_parse = __commonJS((exports, module) => { - var isWindows = process.platform === "win32"; - var splitWindowsRe = /^(((?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?[\\\/]?)(?:[^\\\/]*[\\\/])*)((\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))[\\\/]*$/; - var win32 = {}; - function win32SplitPath(filename) { - return splitWindowsRe.exec(filename).slice(1); - } - win32.parse = function(pathString) { - if (typeof pathString !== "string") { - throw new TypeError("Parameter 'pathString' must be a string, not " + typeof pathString); - } - var allParts = win32SplitPath(pathString); - if (!allParts || allParts.length !== 5) { - throw new TypeError("Invalid path '" + pathString + "'"); - } - return { - root: allParts[1], - dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0].slice(0, -1), - base: allParts[2], - ext: allParts[4], - name: allParts[3] - }; - }; - var splitPathRe = /^((\/?)(?:[^\/]*\/)*)((\.{1,2}|[^\/]+?|)(\.[^.\/]*|))[\/]*$/; - var posix = {}; - function posixSplitPath(filename) { - return splitPathRe.exec(filename).slice(1); - } - posix.parse = function(pathString) { - if (typeof pathString !== "string") { - throw new TypeError("Parameter 'pathString' must be a string, not " + typeof pathString); - } - var allParts = posixSplitPath(pathString); - if (!allParts || allParts.length !== 5) { - throw new TypeError("Invalid path '" + pathString + "'"); - } - return { - root: allParts[1], - dir: allParts[0].slice(0, -1), - base: allParts[2], - ext: allParts[4], - name: allParts[3] - }; - }; - if (isWindows) - module.exports = win32.parse; - else - module.exports = posix.parse; - module.exports.posix = posix.parse; - module.exports.win32 = win32.parse; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/node-modules-paths.js -var require_node_modules_paths = __commonJS((exports, module) => { - var path = __require("path"); - var parse6 = path.parse || require_path_parse(); - var driveLetterRegex = /^([A-Za-z]:)/; - var uncPathRegex = /^\\\\/; - var getNodeModulesDirs = function getNodeModulesDirs(absoluteStart, modules) { - var prefix = "/"; - if (driveLetterRegex.test(absoluteStart)) { - prefix = ""; - } else if (uncPathRegex.test(absoluteStart)) { - prefix = "\\\\"; - } - var paths = [absoluteStart]; - var parsed = parse6(absoluteStart); - while (parsed.dir !== paths[paths.length - 1]) { - paths.push(parsed.dir); - parsed = parse6(parsed.dir); - } - return paths.reduce(function(dirs, aPath) { - return dirs.concat(modules.map(function(moduleDir) { - return path.resolve(prefix, aPath, moduleDir); - })); - }, []); - }; - module.exports = function nodeModulesPaths(start, opts, request) { - var modules = opts && opts.moduleDirectory ? [].concat(opts.moduleDirectory) : ["node_modules"]; - if (opts && typeof opts.paths === "function") { - return opts.paths(request, start, function() { - return getNodeModulesDirs(start, modules); - }, opts); - } - var dirs = getNodeModulesDirs(start, modules); - return opts && opts.paths ? dirs.concat(opts.paths) : dirs; - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/normalize-options.js -var require_normalize_options = __commonJS((exports, module) => { - module.exports = function(x, opts) { - return opts || {}; - }; -}); - -// ../../../../node_modules/.bun/function-bind@1.1.2/node_modules/function-bind/implementation.js -var require_implementation = __commonJS((exports, module) => { - var ERROR_MESSAGE = "Function.prototype.bind called on incompatible "; - var toStr = Object.prototype.toString; - var max = Math.max; - var funcType = "[object Function]"; - var concatty = function concatty(a, b) { - var arr = []; - for (var i = 0;i < a.length; i += 1) { - arr[i] = a[i]; - } - for (var j = 0;j < b.length; j += 1) { - arr[j + a.length] = b[j]; - } - return arr; - }; - var slicy = function slicy(arrLike, offset) { - var arr = []; - for (var i = offset || 0, j = 0;i < arrLike.length; i += 1, j += 1) { - arr[j] = arrLike[i]; - } - return arr; - }; - var joiny = function(arr, joiner) { - var str = ""; - for (var i = 0;i < arr.length; i += 1) { - str += arr[i]; - if (i + 1 < arr.length) { - str += joiner; - } - } - return str; - }; - module.exports = function bind(that) { - var target = this; - if (typeof target !== "function" || toStr.apply(target) !== funcType) { - throw new TypeError(ERROR_MESSAGE + target); - } - var args = slicy(arguments, 1); - var bound; - var binder = function() { - if (this instanceof bound) { - var result = target.apply(this, concatty(args, arguments)); - if (Object(result) === result) { - return result; - } - return this; - } - return target.apply(that, concatty(args, arguments)); - }; - var boundLength = max(0, target.length - args.length); - var boundArgs = []; - for (var i = 0;i < boundLength; i++) { - boundArgs[i] = "$" + i; - } - bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder); - if (target.prototype) { - var Empty = function Empty() {}; - Empty.prototype = target.prototype; - bound.prototype = new Empty; - Empty.prototype = null; - } - return bound; - }; -}); - -// ../../../../node_modules/.bun/function-bind@1.1.2/node_modules/function-bind/index.js -var require_function_bind = __commonJS((exports, module) => { - var implementation = require_implementation(); - module.exports = Function.prototype.bind || implementation; -}); - -// ../../../../node_modules/.bun/hasown@2.0.2/node_modules/hasown/index.js -var require_hasown = __commonJS((exports, module) => { - var call = Function.prototype.call; - var $hasOwn = Object.prototype.hasOwnProperty; - var bind = require_function_bind(); - module.exports = bind.call(call, $hasOwn); -}); - -// ../../../../node_modules/.bun/is-core-module@2.16.1/node_modules/is-core-module/core.json -var require_core = __commonJS((exports, module) => { - module.exports = { - assert: true, - "node:assert": [">= 14.18 && < 15", ">= 16"], - "assert/strict": ">= 15", - "node:assert/strict": ">= 16", - async_hooks: ">= 8", - "node:async_hooks": [">= 14.18 && < 15", ">= 16"], - buffer_ieee754: ">= 0.5 && < 0.9.7", - buffer: true, - "node:buffer": [">= 14.18 && < 15", ">= 16"], - child_process: true, - "node:child_process": [">= 14.18 && < 15", ">= 16"], - cluster: ">= 0.5", - "node:cluster": [">= 14.18 && < 15", ">= 16"], - console: true, - "node:console": [">= 14.18 && < 15", ">= 16"], - constants: true, - "node:constants": [">= 14.18 && < 15", ">= 16"], - crypto: true, - "node:crypto": [">= 14.18 && < 15", ">= 16"], - _debug_agent: ">= 1 && < 8", - _debugger: "< 8", - dgram: true, - "node:dgram": [">= 14.18 && < 15", ">= 16"], - diagnostics_channel: [">= 14.17 && < 15", ">= 15.1"], - "node:diagnostics_channel": [">= 14.18 && < 15", ">= 16"], - dns: true, - "node:dns": [">= 14.18 && < 15", ">= 16"], - "dns/promises": ">= 15", - "node:dns/promises": ">= 16", - domain: ">= 0.7.12", - "node:domain": [">= 14.18 && < 15", ">= 16"], - events: true, - "node:events": [">= 14.18 && < 15", ">= 16"], - freelist: "< 6", - fs: true, - "node:fs": [">= 14.18 && < 15", ">= 16"], - "fs/promises": [">= 10 && < 10.1", ">= 14"], - "node:fs/promises": [">= 14.18 && < 15", ">= 16"], - _http_agent: ">= 0.11.1", - "node:_http_agent": [">= 14.18 && < 15", ">= 16"], - _http_client: ">= 0.11.1", - "node:_http_client": [">= 14.18 && < 15", ">= 16"], - _http_common: ">= 0.11.1", - "node:_http_common": [">= 14.18 && < 15", ">= 16"], - _http_incoming: ">= 0.11.1", - "node:_http_incoming": [">= 14.18 && < 15", ">= 16"], - _http_outgoing: ">= 0.11.1", - "node:_http_outgoing": [">= 14.18 && < 15", ">= 16"], - _http_server: ">= 0.11.1", - "node:_http_server": [">= 14.18 && < 15", ">= 16"], - http: true, - "node:http": [">= 14.18 && < 15", ">= 16"], - http2: ">= 8.8", - "node:http2": [">= 14.18 && < 15", ">= 16"], - https: true, - "node:https": [">= 14.18 && < 15", ">= 16"], - inspector: ">= 8", - "node:inspector": [">= 14.18 && < 15", ">= 16"], - "inspector/promises": [">= 19"], - "node:inspector/promises": [">= 19"], - _linklist: "< 8", - module: true, - "node:module": [">= 14.18 && < 15", ">= 16"], - net: true, - "node:net": [">= 14.18 && < 15", ">= 16"], - "node-inspect/lib/_inspect": ">= 7.6 && < 12", - "node-inspect/lib/internal/inspect_client": ">= 7.6 && < 12", - "node-inspect/lib/internal/inspect_repl": ">= 7.6 && < 12", - os: true, - "node:os": [">= 14.18 && < 15", ">= 16"], - path: true, - "node:path": [">= 14.18 && < 15", ">= 16"], - "path/posix": ">= 15.3", - "node:path/posix": ">= 16", - "path/win32": ">= 15.3", - "node:path/win32": ">= 16", - perf_hooks: ">= 8.5", - "node:perf_hooks": [">= 14.18 && < 15", ">= 16"], - process: ">= 1", - "node:process": [">= 14.18 && < 15", ">= 16"], - punycode: ">= 0.5", - "node:punycode": [">= 14.18 && < 15", ">= 16"], - querystring: true, - "node:querystring": [">= 14.18 && < 15", ">= 16"], - readline: true, - "node:readline": [">= 14.18 && < 15", ">= 16"], - "readline/promises": ">= 17", - "node:readline/promises": ">= 17", - repl: true, - "node:repl": [">= 14.18 && < 15", ">= 16"], - "node:sea": [">= 20.12 && < 21", ">= 21.7"], - smalloc: ">= 0.11.5 && < 3", - "node:sqlite": [">= 22.13 && < 23", ">= 23.4"], - _stream_duplex: ">= 0.9.4", - "node:_stream_duplex": [">= 14.18 && < 15", ">= 16"], - _stream_transform: ">= 0.9.4", - "node:_stream_transform": [">= 14.18 && < 15", ">= 16"], - _stream_wrap: ">= 1.4.1", - "node:_stream_wrap": [">= 14.18 && < 15", ">= 16"], - _stream_passthrough: ">= 0.9.4", - "node:_stream_passthrough": [">= 14.18 && < 15", ">= 16"], - _stream_readable: ">= 0.9.4", - "node:_stream_readable": [">= 14.18 && < 15", ">= 16"], - _stream_writable: ">= 0.9.4", - "node:_stream_writable": [">= 14.18 && < 15", ">= 16"], - stream: true, - "node:stream": [">= 14.18 && < 15", ">= 16"], - "stream/consumers": ">= 16.7", - "node:stream/consumers": ">= 16.7", - "stream/promises": ">= 15", - "node:stream/promises": ">= 16", - "stream/web": ">= 16.5", - "node:stream/web": ">= 16.5", - string_decoder: true, - "node:string_decoder": [">= 14.18 && < 15", ">= 16"], - sys: [">= 0.4 && < 0.7", ">= 0.8"], - "node:sys": [">= 14.18 && < 15", ">= 16"], - "test/reporters": ">= 19.9 && < 20.2", - "node:test/reporters": [">= 18.17 && < 19", ">= 19.9", ">= 20"], - "test/mock_loader": ">= 22.3 && < 22.7", - "node:test/mock_loader": ">= 22.3 && < 22.7", - "node:test": [">= 16.17 && < 17", ">= 18"], - timers: true, - "node:timers": [">= 14.18 && < 15", ">= 16"], - "timers/promises": ">= 15", - "node:timers/promises": ">= 16", - _tls_common: ">= 0.11.13", - "node:_tls_common": [">= 14.18 && < 15", ">= 16"], - _tls_legacy: ">= 0.11.3 && < 10", - _tls_wrap: ">= 0.11.3", - "node:_tls_wrap": [">= 14.18 && < 15", ">= 16"], - tls: true, - "node:tls": [">= 14.18 && < 15", ">= 16"], - trace_events: ">= 10", - "node:trace_events": [">= 14.18 && < 15", ">= 16"], - tty: true, - "node:tty": [">= 14.18 && < 15", ">= 16"], - url: true, - "node:url": [">= 14.18 && < 15", ">= 16"], - util: true, - "node:util": [">= 14.18 && < 15", ">= 16"], - "util/types": ">= 15.3", - "node:util/types": ">= 16", - "v8/tools/arguments": ">= 10 && < 12", - "v8/tools/codemap": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/consarray": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/csvparser": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/logreader": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/profile_view": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/splaytree": [">= 4.4 && < 5", ">= 5.2 && < 12"], - v8: ">= 1", - "node:v8": [">= 14.18 && < 15", ">= 16"], - vm: true, - "node:vm": [">= 14.18 && < 15", ">= 16"], - wasi: [">= 13.4 && < 13.5", ">= 18.17 && < 19", ">= 20"], - "node:wasi": [">= 18.17 && < 19", ">= 20"], - worker_threads: ">= 11.7", - "node:worker_threads": [">= 14.18 && < 15", ">= 16"], - zlib: ">= 0.5", - "node:zlib": [">= 14.18 && < 15", ">= 16"] - }; -}); - -// ../../../../node_modules/.bun/is-core-module@2.16.1/node_modules/is-core-module/index.js -var require_is_core_module = __commonJS((exports, module) => { - var hasOwn = require_hasown(); - function specifierIncluded(current, specifier) { - var nodeParts = current.split("."); - var parts = specifier.split(" "); - var op = parts.length > 1 ? parts[0] : "="; - var versionParts = (parts.length > 1 ? parts[1] : parts[0]).split("."); - for (var i = 0;i < 3; ++i) { - var cur = parseInt(nodeParts[i] || 0, 10); - var ver = parseInt(versionParts[i] || 0, 10); - if (cur === ver) { - continue; - } - if (op === "<") { - return cur < ver; - } - if (op === ">=") { - return cur >= ver; - } - return false; - } - return op === ">="; - } - function matchesRange(current, range) { - var specifiers = range.split(/ ?&& ?/); - if (specifiers.length === 0) { - return false; - } - for (var i = 0;i < specifiers.length; ++i) { - if (!specifierIncluded(current, specifiers[i])) { - return false; - } - } - return true; - } - function versionIncluded(nodeVersion, specifierValue) { - if (typeof specifierValue === "boolean") { - return specifierValue; - } - var current = typeof nodeVersion === "undefined" ? process.versions && process.versions.node : nodeVersion; - if (typeof current !== "string") { - throw new TypeError(typeof nodeVersion === "undefined" ? "Unable to determine current node version" : "If provided, a valid node version is required"); - } - if (specifierValue && typeof specifierValue === "object") { - for (var i = 0;i < specifierValue.length; ++i) { - if (matchesRange(current, specifierValue[i])) { - return true; - } - } - return false; - } - return matchesRange(current, specifierValue); - } - var data = require_core(); - module.exports = function isCore(x, nodeVersion) { - return hasOwn(data, x) && versionIncluded(nodeVersion, data[x]); - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/async.js -var require_async = __commonJS((exports, module) => { - var fs = __require("fs"); - var getHomedir = require_homedir(); - var path = __require("path"); - var caller = require_caller(); - var nodeModulesPaths = require_node_modules_paths(); - var normalizeOptions = require_normalize_options(); - var isCore = require_is_core_module(); - var realpathFS = process.platform !== "win32" && fs.realpath && typeof fs.realpath.native === "function" ? fs.realpath.native : fs.realpath; - var relativePathRegex = /^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/; - var windowsDriveRegex = /^\w:[/\\]*$/; - var nodeModulesRegex = /[/\\]node_modules[/\\]*$/; - var homedir3 = getHomedir(); - var defaultPaths = function() { - return [ - path.join(homedir3, ".node_modules"), - path.join(homedir3, ".node_libraries") - ]; - }; - var defaultIsFile = function isFile(file2, cb) { - fs.stat(file2, function(err, stat) { - if (!err) { - return cb(null, stat.isFile() || stat.isFIFO()); - } - if (err.code === "ENOENT" || err.code === "ENOTDIR") - return cb(null, false); - return cb(err); - }); - }; - var defaultIsDir = function isDirectory(dir, cb) { - fs.stat(dir, function(err, stat) { - if (!err) { - return cb(null, stat.isDirectory()); - } - if (err.code === "ENOENT" || err.code === "ENOTDIR") - return cb(null, false); - return cb(err); - }); - }; - var defaultRealpath = function realpath(x, cb) { - realpathFS(x, function(realpathErr, realPath) { - if (realpathErr && realpathErr.code !== "ENOENT") - cb(realpathErr); - else - cb(null, realpathErr ? x : realPath); - }); - }; - var maybeRealpath = function maybeRealpath(realpath, x, opts, cb) { - if (opts && opts.preserveSymlinks === false) { - realpath(x, cb); - } else { - cb(null, x); - } - }; - var defaultReadPackage = function defaultReadPackage(readFile, pkgfile, cb) { - readFile(pkgfile, function(readFileErr, body) { - if (readFileErr) - cb(readFileErr); - else { - try { - var pkg = JSON.parse(body); - cb(null, pkg); - } catch (jsonErr) { - cb(null); - } - } - }); - }; - var getPackageCandidates = function getPackageCandidates(x, start, opts) { - var dirs = nodeModulesPaths(start, opts, x); - for (var i = 0;i < dirs.length; i++) { - dirs[i] = path.join(dirs[i], x); - } - return dirs; - }; - module.exports = function resolve(x, options, callback) { - var cb = callback; - var opts = options; - if (typeof options === "function") { - cb = opts; - opts = {}; - } - if (typeof x !== "string") { - var err = new TypeError("Path must be a string."); - return process.nextTick(function() { - cb(err); - }); - } - opts = normalizeOptions(x, opts); - var isFile = opts.isFile || defaultIsFile; - var isDirectory = opts.isDirectory || defaultIsDir; - var readFile = opts.readFile || fs.readFile; - var realpath = opts.realpath || defaultRealpath; - var readPackage = opts.readPackage || defaultReadPackage; - if (opts.readFile && opts.readPackage) { - var conflictErr = new TypeError("`readFile` and `readPackage` are mutually exclusive."); - return process.nextTick(function() { - cb(conflictErr); - }); - } - var packageIterator = opts.packageIterator; - var extensions = opts.extensions || [".js"]; - var includeCoreModules = opts.includeCoreModules !== false; - var basedir = opts.basedir || path.dirname(caller()); - var parent = opts.filename || basedir; - opts.paths = opts.paths || defaultPaths(); - var absoluteStart = path.resolve(basedir); - maybeRealpath(realpath, absoluteStart, opts, function(err2, realStart) { - if (err2) - cb(err2); - else - init2(realStart); - }); - var res; - function init2(basedir2) { - if (relativePathRegex.test(x)) { - res = path.resolve(basedir2, x); - if (x === "." || x === ".." || x.slice(-1) === "/") - res += "/"; - if (x.slice(-1) === "/" && res === basedir2) { - loadAsDirectory(res, opts.package, onfile); - } else - loadAsFile(res, opts.package, onfile); - } else if (includeCoreModules && isCore(x)) { - return cb(null, x); - } else - loadNodeModules(x, basedir2, function(err2, n, pkg) { - if (err2) - cb(err2); - else if (n) { - return maybeRealpath(realpath, n, opts, function(err3, realN) { - if (err3) { - cb(err3); - } else { - cb(null, realN, pkg); - } - }); - } else { - var moduleError = new Error("Cannot find module '" + x + "' from '" + parent + "'"); - moduleError.code = "MODULE_NOT_FOUND"; - cb(moduleError); - } - }); - } - function onfile(err2, m, pkg) { - if (err2) - cb(err2); - else if (m) - cb(null, m, pkg); - else - loadAsDirectory(res, function(err3, d, pkg2) { - if (err3) - cb(err3); - else if (d) { - maybeRealpath(realpath, d, opts, function(err4, realD) { - if (err4) { - cb(err4); - } else { - cb(null, realD, pkg2); - } - }); - } else { - var moduleError = new Error("Cannot find module '" + x + "' from '" + parent + "'"); - moduleError.code = "MODULE_NOT_FOUND"; - cb(moduleError); - } - }); - } - function loadAsFile(x2, thePackage, callback2) { - var loadAsFilePackage = thePackage; - var cb2 = callback2; - if (typeof loadAsFilePackage === "function") { - cb2 = loadAsFilePackage; - loadAsFilePackage = undefined; - } - var exts = [""].concat(extensions); - load(exts, x2, loadAsFilePackage); - function load(exts2, x3, loadPackage) { - if (exts2.length === 0) - return cb2(null, undefined, loadPackage); - var file2 = x3 + exts2[0]; - var pkg = loadPackage; - if (pkg) - onpkg(null, pkg); - else - loadpkg(path.dirname(file2), onpkg); - function onpkg(err2, pkg_, dir) { - pkg = pkg_; - if (err2) - return cb2(err2); - if (dir && pkg && opts.pathFilter) { - var rfile = path.relative(dir, file2); - var rel = rfile.slice(0, rfile.length - exts2[0].length); - var r = opts.pathFilter(pkg, x3, rel); - if (r) - return load([""].concat(extensions.slice()), path.resolve(dir, r), pkg); - } - isFile(file2, onex); - } - function onex(err2, ex) { - if (err2) - return cb2(err2); - if (ex) - return cb2(null, file2, pkg); - load(exts2.slice(1), x3, pkg); - } - } - } - function loadpkg(dir, cb2) { - if (dir === "" || dir === "/") - return cb2(null); - if (process.platform === "win32" && windowsDriveRegex.test(dir)) { - return cb2(null); - } - if (nodeModulesRegex.test(dir)) - return cb2(null); - maybeRealpath(realpath, dir, opts, function(unwrapErr, pkgdir) { - if (unwrapErr) - return loadpkg(path.dirname(dir), cb2); - var pkgfile = path.join(pkgdir, "package.json"); - isFile(pkgfile, function(err2, ex) { - if (!ex) - return loadpkg(path.dirname(dir), cb2); - readPackage(readFile, pkgfile, function(err3, pkgParam) { - if (err3) - cb2(err3); - var pkg = pkgParam; - if (pkg && opts.packageFilter) { - pkg = opts.packageFilter(pkg, pkgfile); - } - cb2(null, pkg, dir); - }); - }); - }); - } - function loadAsDirectory(x2, loadAsDirectoryPackage, callback2) { - var cb2 = callback2; - var fpkg = loadAsDirectoryPackage; - if (typeof fpkg === "function") { - cb2 = fpkg; - fpkg = opts.package; - } - maybeRealpath(realpath, x2, opts, function(unwrapErr, pkgdir) { - if (unwrapErr) - return cb2(unwrapErr); - var pkgfile = path.join(pkgdir, "package.json"); - isFile(pkgfile, function(err2, ex) { - if (err2) - return cb2(err2); - if (!ex) - return loadAsFile(path.join(x2, "index"), fpkg, cb2); - readPackage(readFile, pkgfile, function(err3, pkgParam) { - if (err3) - return cb2(err3); - var pkg = pkgParam; - if (pkg && opts.packageFilter) { - pkg = opts.packageFilter(pkg, pkgfile); - } - if (pkg && pkg.main) { - if (typeof pkg.main !== "string") { - var mainError = new TypeError("package \u201C" + pkg.name + "\u201D `main` must be a string"); - mainError.code = "INVALID_PACKAGE_MAIN"; - return cb2(mainError); - } - if (pkg.main === "." || pkg.main === "./") { - pkg.main = "index"; - } - loadAsFile(path.resolve(x2, pkg.main), pkg, function(err4, m, pkg2) { - if (err4) - return cb2(err4); - if (m) - return cb2(null, m, pkg2); - if (!pkg2) - return loadAsFile(path.join(x2, "index"), pkg2, cb2); - var dir = path.resolve(x2, pkg2.main); - loadAsDirectory(dir, pkg2, function(err5, n, pkg3) { - if (err5) - return cb2(err5); - if (n) - return cb2(null, n, pkg3); - loadAsFile(path.join(x2, "index"), pkg3, cb2); - }); - }); - return; - } - loadAsFile(path.join(x2, "/index"), pkg, cb2); - }); - }); - }); - } - function processDirs(cb2, dirs) { - if (dirs.length === 0) - return cb2(null, undefined); - var dir = dirs[0]; - isDirectory(path.dirname(dir), isdir); - function isdir(err2, isdir2) { - if (err2) - return cb2(err2); - if (!isdir2) - return processDirs(cb2, dirs.slice(1)); - loadAsFile(dir, opts.package, onfile2); - } - function onfile2(err2, m, pkg) { - if (err2) - return cb2(err2); - if (m) - return cb2(null, m, pkg); - loadAsDirectory(dir, opts.package, ondir); - } - function ondir(err2, n, pkg) { - if (err2) - return cb2(err2); - if (n) - return cb2(null, n, pkg); - processDirs(cb2, dirs.slice(1)); - } - } - function loadNodeModules(x2, start, cb2) { - var thunk = function() { - return getPackageCandidates(x2, start, opts); - }; - processDirs(cb2, packageIterator ? packageIterator(x2, start, thunk, opts) : thunk()); - } - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/core.json -var require_core2 = __commonJS((exports, module) => { - module.exports = { - assert: true, - "node:assert": [">= 14.18 && < 15", ">= 16"], - "assert/strict": ">= 15", - "node:assert/strict": ">= 16", - async_hooks: ">= 8", - "node:async_hooks": [">= 14.18 && < 15", ">= 16"], - buffer_ieee754: ">= 0.5 && < 0.9.7", - buffer: true, - "node:buffer": [">= 14.18 && < 15", ">= 16"], - child_process: true, - "node:child_process": [">= 14.18 && < 15", ">= 16"], - cluster: ">= 0.5", - "node:cluster": [">= 14.18 && < 15", ">= 16"], - console: true, - "node:console": [">= 14.18 && < 15", ">= 16"], - constants: true, - "node:constants": [">= 14.18 && < 15", ">= 16"], - crypto: true, - "node:crypto": [">= 14.18 && < 15", ">= 16"], - _debug_agent: ">= 1 && < 8", - _debugger: "< 8", - dgram: true, - "node:dgram": [">= 14.18 && < 15", ">= 16"], - diagnostics_channel: [">= 14.17 && < 15", ">= 15.1"], - "node:diagnostics_channel": [">= 14.18 && < 15", ">= 16"], - dns: true, - "node:dns": [">= 14.18 && < 15", ">= 16"], - "dns/promises": ">= 15", - "node:dns/promises": ">= 16", - domain: ">= 0.7.12", - "node:domain": [">= 14.18 && < 15", ">= 16"], - events: true, - "node:events": [">= 14.18 && < 15", ">= 16"], - freelist: "< 6", - fs: true, - "node:fs": [">= 14.18 && < 15", ">= 16"], - "fs/promises": [">= 10 && < 10.1", ">= 14"], - "node:fs/promises": [">= 14.18 && < 15", ">= 16"], - _http_agent: ">= 0.11.1", - "node:_http_agent": [">= 14.18 && < 15", ">= 16"], - _http_client: ">= 0.11.1", - "node:_http_client": [">= 14.18 && < 15", ">= 16"], - _http_common: ">= 0.11.1", - "node:_http_common": [">= 14.18 && < 15", ">= 16"], - _http_incoming: ">= 0.11.1", - "node:_http_incoming": [">= 14.18 && < 15", ">= 16"], - _http_outgoing: ">= 0.11.1", - "node:_http_outgoing": [">= 14.18 && < 15", ">= 16"], - _http_server: ">= 0.11.1", - "node:_http_server": [">= 14.18 && < 15", ">= 16"], - http: true, - "node:http": [">= 14.18 && < 15", ">= 16"], - http2: ">= 8.8", - "node:http2": [">= 14.18 && < 15", ">= 16"], - https: true, - "node:https": [">= 14.18 && < 15", ">= 16"], - inspector: ">= 8", - "node:inspector": [">= 14.18 && < 15", ">= 16"], - "inspector/promises": [">= 19"], - "node:inspector/promises": [">= 19"], - _linklist: "< 8", - module: true, - "node:module": [">= 14.18 && < 15", ">= 16"], - net: true, - "node:net": [">= 14.18 && < 15", ">= 16"], - "node-inspect/lib/_inspect": ">= 7.6 && < 12", - "node-inspect/lib/internal/inspect_client": ">= 7.6 && < 12", - "node-inspect/lib/internal/inspect_repl": ">= 7.6 && < 12", - os: true, - "node:os": [">= 14.18 && < 15", ">= 16"], - path: true, - "node:path": [">= 14.18 && < 15", ">= 16"], - "path/posix": ">= 15.3", - "node:path/posix": ">= 16", - "path/win32": ">= 15.3", - "node:path/win32": ">= 16", - perf_hooks: ">= 8.5", - "node:perf_hooks": [">= 14.18 && < 15", ">= 16"], - process: ">= 1", - "node:process": [">= 14.18 && < 15", ">= 16"], - punycode: ">= 0.5", - "node:punycode": [">= 14.18 && < 15", ">= 16"], - querystring: true, - "node:querystring": [">= 14.18 && < 15", ">= 16"], - readline: true, - "node:readline": [">= 14.18 && < 15", ">= 16"], - "readline/promises": ">= 17", - "node:readline/promises": ">= 17", - repl: true, - "node:repl": [">= 14.18 && < 15", ">= 16"], - "node:sea": [">= 20.12 && < 21", ">= 21.7"], - smalloc: ">= 0.11.5 && < 3", - "node:sqlite": [">= 22.13 && < 23", ">= 23.4"], - _stream_duplex: ">= 0.9.4", - "node:_stream_duplex": [">= 14.18 && < 15", ">= 16"], - _stream_transform: ">= 0.9.4", - "node:_stream_transform": [">= 14.18 && < 15", ">= 16"], - _stream_wrap: ">= 1.4.1", - "node:_stream_wrap": [">= 14.18 && < 15", ">= 16"], - _stream_passthrough: ">= 0.9.4", - "node:_stream_passthrough": [">= 14.18 && < 15", ">= 16"], - _stream_readable: ">= 0.9.4", - "node:_stream_readable": [">= 14.18 && < 15", ">= 16"], - _stream_writable: ">= 0.9.4", - "node:_stream_writable": [">= 14.18 && < 15", ">= 16"], - stream: true, - "node:stream": [">= 14.18 && < 15", ">= 16"], - "stream/consumers": ">= 16.7", - "node:stream/consumers": ">= 16.7", - "stream/promises": ">= 15", - "node:stream/promises": ">= 16", - "stream/web": ">= 16.5", - "node:stream/web": ">= 16.5", - string_decoder: true, - "node:string_decoder": [">= 14.18 && < 15", ">= 16"], - sys: [">= 0.4 && < 0.7", ">= 0.8"], - "node:sys": [">= 14.18 && < 15", ">= 16"], - "test/reporters": ">= 19.9 && < 20.2", - "node:test/reporters": [">= 18.17 && < 19", ">= 19.9", ">= 20"], - "test/mock_loader": ">= 22.3 && < 22.7", - "node:test/mock_loader": ">= 22.3 && < 22.7", - "node:test": [">= 16.17 && < 17", ">= 18"], - timers: true, - "node:timers": [">= 14.18 && < 15", ">= 16"], - "timers/promises": ">= 15", - "node:timers/promises": ">= 16", - _tls_common: ">= 0.11.13", - "node:_tls_common": [">= 14.18 && < 15", ">= 16"], - _tls_legacy: ">= 0.11.3 && < 10", - _tls_wrap: ">= 0.11.3", - "node:_tls_wrap": [">= 14.18 && < 15", ">= 16"], - tls: true, - "node:tls": [">= 14.18 && < 15", ">= 16"], - trace_events: ">= 10", - "node:trace_events": [">= 14.18 && < 15", ">= 16"], - tty: true, - "node:tty": [">= 14.18 && < 15", ">= 16"], - url: true, - "node:url": [">= 14.18 && < 15", ">= 16"], - util: true, - "node:util": [">= 14.18 && < 15", ">= 16"], - "util/types": ">= 15.3", - "node:util/types": ">= 16", - "v8/tools/arguments": ">= 10 && < 12", - "v8/tools/codemap": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/consarray": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/csvparser": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/logreader": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/profile_view": [">= 4.4 && < 5", ">= 5.2 && < 12"], - "v8/tools/splaytree": [">= 4.4 && < 5", ">= 5.2 && < 12"], - v8: ">= 1", - "node:v8": [">= 14.18 && < 15", ">= 16"], - vm: true, - "node:vm": [">= 14.18 && < 15", ">= 16"], - wasi: [">= 13.4 && < 13.5", ">= 18.17 && < 19", ">= 20"], - "node:wasi": [">= 18.17 && < 19", ">= 20"], - worker_threads: ">= 11.7", - "node:worker_threads": [">= 14.18 && < 15", ">= 16"], - zlib: ">= 0.5", - "node:zlib": [">= 14.18 && < 15", ">= 16"] - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/core.js -var require_core3 = __commonJS((exports, module) => { - var isCoreModule = require_is_core_module(); - var data = require_core2(); - var core2 = {}; - for (mod2 in data) { - if (Object.prototype.hasOwnProperty.call(data, mod2)) { - core2[mod2] = isCoreModule(mod2); - } - } - var mod2; - module.exports = core2; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/is-core.js -var require_is_core = __commonJS((exports, module) => { - var isCoreModule = require_is_core_module(); - module.exports = function isCore(x) { - return isCoreModule(x); - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/lib/sync.js -var require_sync = __commonJS((exports, module) => { - var isCore = require_is_core_module(); - var fs = __require("fs"); - var path = __require("path"); - var getHomedir = require_homedir(); - var caller = require_caller(); - var nodeModulesPaths = require_node_modules_paths(); - var normalizeOptions = require_normalize_options(); - var realpathFS = process.platform !== "win32" && fs.realpathSync && typeof fs.realpathSync.native === "function" ? fs.realpathSync.native : fs.realpathSync; - var relativePathRegex = /^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/; - var windowsDriveRegex = /^\w:[/\\]*$/; - var nodeModulesRegex = /[/\\]node_modules[/\\]*$/; - var homedir3 = getHomedir(); - var defaultPaths = function() { - return [ - path.join(homedir3, ".node_modules"), - path.join(homedir3, ".node_libraries") - ]; - }; - var defaultIsFile = function isFile(file2) { - try { - var stat = fs.statSync(file2, { throwIfNoEntry: false }); - } catch (e) { - if (e && (e.code === "ENOENT" || e.code === "ENOTDIR")) - return false; - throw e; - } - return !!stat && (stat.isFile() || stat.isFIFO()); - }; - var defaultIsDir = function isDirectory(dir) { - try { - var stat = fs.statSync(dir, { throwIfNoEntry: false }); - } catch (e) { - if (e && (e.code === "ENOENT" || e.code === "ENOTDIR")) - return false; - throw e; - } - return !!stat && stat.isDirectory(); - }; - var defaultRealpathSync = function realpathSync(x) { - try { - return realpathFS(x); - } catch (realpathErr) { - if (realpathErr.code !== "ENOENT") { - throw realpathErr; - } - } - return x; - }; - var maybeRealpathSync = function maybeRealpathSync(realpathSync, x, opts) { - if (opts && opts.preserveSymlinks === false) { - return realpathSync(x); - } - return x; - }; - var defaultReadPackageSync = function defaultReadPackageSync(readFileSync4, pkgfile) { - var body = readFileSync4(pkgfile); - try { - var pkg = JSON.parse(body); - return pkg; - } catch (jsonErr) {} - }; - var getPackageCandidates = function getPackageCandidates(x, start, opts) { - var dirs = nodeModulesPaths(start, opts, x); - for (var i = 0;i < dirs.length; i++) { - dirs[i] = path.join(dirs[i], x); - } - return dirs; - }; - module.exports = function resolveSync(x, options) { - if (typeof x !== "string") { - throw new TypeError("Path must be a string."); - } - var opts = normalizeOptions(x, options); - var isFile = opts.isFile || defaultIsFile; - var readFileSync4 = opts.readFileSync || fs.readFileSync; - var isDirectory = opts.isDirectory || defaultIsDir; - var realpathSync = opts.realpathSync || defaultRealpathSync; - var readPackageSync = opts.readPackageSync || defaultReadPackageSync; - if (opts.readFileSync && opts.readPackageSync) { - throw new TypeError("`readFileSync` and `readPackageSync` are mutually exclusive."); - } - var packageIterator = opts.packageIterator; - var extensions = opts.extensions || [".js"]; - var includeCoreModules = opts.includeCoreModules !== false; - var basedir = opts.basedir || path.dirname(caller()); - var parent = opts.filename || basedir; - opts.paths = opts.paths || defaultPaths(); - var absoluteStart = maybeRealpathSync(realpathSync, path.resolve(basedir), opts); - if (relativePathRegex.test(x)) { - var res = path.resolve(absoluteStart, x); - if (x === "." || x === ".." || x.slice(-1) === "/") - res += "/"; - var m = loadAsFileSync(res) || loadAsDirectorySync(res); - if (m) - return maybeRealpathSync(realpathSync, m, opts); - } else if (includeCoreModules && isCore(x)) { - return x; - } else { - var n = loadNodeModulesSync(x, absoluteStart); - if (n) - return maybeRealpathSync(realpathSync, n, opts); - } - var err = new Error("Cannot find module '" + x + "' from '" + parent + "'"); - err.code = "MODULE_NOT_FOUND"; - throw err; - function loadAsFileSync(x2) { - var pkg = loadpkg(path.dirname(x2)); - if (pkg && pkg.dir && pkg.pkg && opts.pathFilter) { - var rfile = path.relative(pkg.dir, x2); - var r = opts.pathFilter(pkg.pkg, x2, rfile); - if (r) { - x2 = path.resolve(pkg.dir, r); - } - } - if (isFile(x2)) { - return x2; - } - for (var i = 0;i < extensions.length; i++) { - var file2 = x2 + extensions[i]; - if (isFile(file2)) { - return file2; - } - } - } - function loadpkg(dir) { - if (dir === "" || dir === "/") - return; - if (process.platform === "win32" && windowsDriveRegex.test(dir)) { - return; - } - if (nodeModulesRegex.test(dir)) - return; - var pkgfile = path.join(maybeRealpathSync(realpathSync, dir, opts), "package.json"); - if (!isFile(pkgfile)) { - return loadpkg(path.dirname(dir)); - } - var pkg = readPackageSync(readFileSync4, pkgfile); - if (pkg && opts.packageFilter) { - pkg = opts.packageFilter(pkg, dir); - } - return { pkg, dir }; - } - function loadAsDirectorySync(x2) { - var pkgfile = path.join(maybeRealpathSync(realpathSync, x2, opts), "/package.json"); - if (isFile(pkgfile)) { - try { - var pkg = readPackageSync(readFileSync4, pkgfile); - } catch (e) {} - if (pkg && opts.packageFilter) { - pkg = opts.packageFilter(pkg, x2); - } - if (pkg && pkg.main) { - if (typeof pkg.main !== "string") { - var mainError = new TypeError("package \u201C" + pkg.name + "\u201D `main` must be a string"); - mainError.code = "INVALID_PACKAGE_MAIN"; - throw mainError; - } - if (pkg.main === "." || pkg.main === "./") { - pkg.main = "index"; - } - try { - var m2 = loadAsFileSync(path.resolve(x2, pkg.main)); - if (m2) - return m2; - var n2 = loadAsDirectorySync(path.resolve(x2, pkg.main)); - if (n2) - return n2; - } catch (e) {} - } - } - return loadAsFileSync(path.join(x2, "/index")); - } - function loadNodeModulesSync(x2, start) { - var thunk = function() { - return getPackageCandidates(x2, start, opts); - }; - var dirs = packageIterator ? packageIterator(x2, start, thunk, opts) : thunk(); - for (var i = 0;i < dirs.length; i++) { - var dir = dirs[i]; - if (isDirectory(path.dirname(dir))) { - var m2 = loadAsFileSync(dir); - if (m2) - return m2; - var n2 = loadAsDirectorySync(dir); - if (n2) - return n2; - } - } - } - }; -}); - -// ../../../../node_modules/.bun/resolve@1.22.11/node_modules/resolve/index.js -var require_resolve = __commonJS((exports, module) => { - var async = require_async(); - async.core = require_core3(); - async.isCore = require_is_core(); - async.sync = require_sync(); - module.exports = async; -}); - -// ../../../../node_modules/.bun/require-in-the-middle@7.5.2/node_modules/require-in-the-middle/package.json -var require_package3 = __commonJS((exports, module) => { - module.exports = { - name: "require-in-the-middle", - version: "7.5.2", - description: "Module to hook into the Node.js require function", - main: "index.js", - types: "types/index.d.ts", - dependencies: { - debug: "^4.3.5", - "module-details-from-path": "^1.0.3", - resolve: "^1.22.8" - }, - devDependencies: { - "@babel/core": "^7.9.0", - "@babel/preset-env": "^7.9.5", - "@babel/preset-typescript": "^7.9.0", - "@babel/register": "^7.9.0", - "ipp-printer": "^1.0.0", - patterns: "^1.0.3", - roundround: "^0.2.0", - semver: "^6.3.0", - standard: "^14.3.1", - tape: "^4.11.0" - }, - scripts: { - test: "npm run test:lint && npm run test:tape && npm run test:babel", - "test:lint": "standard", - "test:tape": "tape test/*.js", - "test:babel": "node test/babel/babel-register.js" - }, - repository: { - type: "git", - url: "git+https://github.com/nodejs/require-in-the-middle.git" - }, - keywords: [ - "require", - "hook", - "shim", - "shimmer", - "shimming", - "patch", - "monkey", - "monkeypatch", - "module", - "load" - ], - files: [ - "types" - ], - author: "Thomas Watson Steen (https://twitter.com/wa7son)", - license: "MIT", - bugs: { - url: "https://github.com/nodejs/require-in-the-middle/issues" - }, - homepage: "https://github.com/nodejs/require-in-the-middle#readme", - engines: { - node: ">=8.6.0" - } - }; -}); - -// ../../../../node_modules/.bun/require-in-the-middle@7.5.2/node_modules/require-in-the-middle/index.js -var require_require_in_the_middle2 = __commonJS((exports, module) => { - var path = __require("path"); - var Module = __require("module"); - var debug = require_src8()("require-in-the-middle"); - var moduleDetailsFromPath = require_module_details_from_path(); - module.exports = Hook; - module.exports.Hook = Hook; - var builtinModules; - var isCore; - if (Module.isBuiltin) { - isCore = Module.isBuiltin; - } else if (Module.builtinModules) { - isCore = (moduleName2) => { - if (moduleName2.startsWith("node:")) { - return true; - } - if (builtinModules === undefined) { - builtinModules = new Set(Module.builtinModules); - } - return builtinModules.has(moduleName2); - }; - } else { - const _resolve2 = require_resolve(); - const [major, minor] = process.versions.node.split(".").map(Number); - if (major === 8 && minor < 8) { - isCore = (moduleName2) => { - if (moduleName2 === "http2") { - return true; - } - return !!_resolve2.core[moduleName2]; - }; - } else { - isCore = (moduleName2) => { - return !!_resolve2.core[moduleName2]; - }; - } - } - var _resolve; - function resolve2(moduleName2, basedir) { - if (!_resolve) { - if (__require.resolve && __require.resolve.paths) { - _resolve = function(moduleName3, basedir2) { - return __require.resolve(moduleName3, { paths: [basedir2] }); - }; - } else { - const resolve3 = require_resolve(); - _resolve = function(moduleName3, basedir2) { - return resolve3.sync(moduleName3, { basedir: basedir2 }); - }; - } - } - return _resolve(moduleName2, basedir); - } - var normalize = /([/\\]index)?(\.js)?$/; - - class ExportsCache { - constructor() { - this._localCache = new Map; - this._kRitmExports = Symbol("RitmExports"); - } - has(filename, isBuiltin) { - if (this._localCache.has(filename)) { - return true; - } else if (!isBuiltin) { - const mod2 = __require.cache[filename]; - return !!(mod2 && (this._kRitmExports in mod2)); - } else { - return false; - } - } - get(filename, isBuiltin) { - const cachedExports = this._localCache.get(filename); - if (cachedExports !== undefined) { - return cachedExports; - } else if (!isBuiltin) { - const mod2 = __require.cache[filename]; - return mod2 && mod2[this._kRitmExports]; - } - } - set(filename, exports2, isBuiltin) { - if (isBuiltin) { - this._localCache.set(filename, exports2); - } else if (filename in __require.cache) { - __require.cache[filename][this._kRitmExports] = exports2; - } else { - debug('non-core module is unexpectedly not in require.cache: "%s"', filename); - this._localCache.set(filename, exports2); - } - } - } - function Hook(modules, options, onrequire) { - if (this instanceof Hook === false) - return new Hook(modules, options, onrequire); - if (typeof modules === "function") { - onrequire = modules; - modules = null; - options = null; - } else if (typeof options === "function") { - onrequire = options; - options = null; - } - if (typeof Module._resolveFilename !== "function") { - console.error("Error: Expected Module._resolveFilename to be a function (was: %s) - aborting!", typeof Module._resolveFilename); - console.error("Please report this error as an issue related to Node.js %s at %s", process.version, require_package3().bugs.url); - return; - } - this._cache = new ExportsCache; - this._unhooked = false; - this._origRequire = Module.prototype.require; - const self2 = this; - const patching = new Set; - const internals = options ? options.internals === true : false; - const hasWhitelist = Array.isArray(modules); - debug("registering require hook"); - this._require = Module.prototype.require = function(id) { - if (self2._unhooked === true) { - debug("ignoring require call - module is soft-unhooked"); - return self2._origRequire.apply(this, arguments); - } - return patchedRequire.call(this, arguments, false); - }; - if (typeof process.getBuiltinModule === "function") { - this._origGetBuiltinModule = process.getBuiltinModule; - this._getBuiltinModule = process.getBuiltinModule = function(id) { - if (self2._unhooked === true) { - debug("ignoring process.getBuiltinModule call - module is soft-unhooked"); - return self2._origGetBuiltinModule.apply(this, arguments); - } - return patchedRequire.call(this, arguments, true); - }; - } - function patchedRequire(args, coreOnly) { - const id = args[0]; - const core2 = isCore(id); - let filename; - if (core2) { - filename = id; - if (id.startsWith("node:")) { - const idWithoutPrefix = id.slice(5); - if (isCore(idWithoutPrefix)) { - filename = idWithoutPrefix; - } - } - } else if (coreOnly) { - debug("call to process.getBuiltinModule with unknown built-in id"); - return self2._origGetBuiltinModule.apply(this, args); - } else { - try { - filename = Module._resolveFilename(id, this); - } catch (resolveErr) { - debug('Module._resolveFilename("%s") threw %j, calling original Module.require', id, resolveErr.message); - return self2._origRequire.apply(this, args); - } - } - let moduleName2, basedir; - debug("processing %s module require('%s'): %s", core2 === true ? "core" : "non-core", id, filename); - if (self2._cache.has(filename, core2) === true) { - debug("returning already patched cached module: %s", filename); - return self2._cache.get(filename, core2); - } - const isPatching = patching.has(filename); - if (isPatching === false) { - patching.add(filename); - } - const exports2 = coreOnly ? self2._origGetBuiltinModule.apply(this, args) : self2._origRequire.apply(this, args); - if (isPatching === true) { - debug("module is in the process of being patched already - ignoring: %s", filename); - return exports2; - } - patching.delete(filename); - if (core2 === true) { - if (hasWhitelist === true && modules.includes(filename) === false) { - debug("ignoring core module not on whitelist: %s", filename); - return exports2; - } - moduleName2 = filename; - } else if (hasWhitelist === true && modules.includes(filename)) { - const parsedPath = path.parse(filename); - moduleName2 = parsedPath.name; - basedir = parsedPath.dir; - } else { - const stat = moduleDetailsFromPath(filename); - if (stat === undefined) { - debug("could not parse filename: %s", filename); - return exports2; - } - moduleName2 = stat.name; - basedir = stat.basedir; - const fullModuleName = resolveModuleName(stat); - debug("resolved filename to module: %s (id: %s, resolved: %s, basedir: %s)", moduleName2, id, fullModuleName, basedir); - let matchFound = false; - if (hasWhitelist) { - if (!id.startsWith(".") && modules.includes(id)) { - moduleName2 = id; - matchFound = true; - } - if (!modules.includes(moduleName2) && !modules.includes(fullModuleName)) { - return exports2; - } - if (modules.includes(fullModuleName) && fullModuleName !== moduleName2) { - moduleName2 = fullModuleName; - matchFound = true; - } - } - if (!matchFound) { - let res; - try { - res = resolve2(moduleName2, basedir); - } catch (e) { - debug("could not resolve module: %s", moduleName2); - self2._cache.set(filename, exports2, core2); - return exports2; - } - if (res !== filename) { - if (internals === true) { - moduleName2 = moduleName2 + path.sep + path.relative(basedir, filename); - debug("preparing to process require of internal file: %s", moduleName2); - } else { - debug("ignoring require of non-main module file: %s", res); - self2._cache.set(filename, exports2, core2); - return exports2; - } - } - } - } - self2._cache.set(filename, exports2, core2); - debug("calling require hook: %s", moduleName2); - const patchedExports = onrequire(exports2, moduleName2, basedir); - self2._cache.set(filename, patchedExports, core2); - debug("returning module: %s", moduleName2); - return patchedExports; - } - } - Hook.prototype.unhook = function() { - this._unhooked = true; - if (this._require === Module.prototype.require) { - Module.prototype.require = this._origRequire; - debug("require unhook successful"); - } else { - debug("require unhook unsuccessful"); - } - if (process.getBuiltinModule !== undefined) { - if (this._getBuiltinModule === process.getBuiltinModule) { - process.getBuiltinModule = this._origGetBuiltinModule; - debug("process.getBuiltinModule unhook successful"); - } else { - debug("process.getBuiltinModule unhook unsuccessful"); - } - } - }; - function resolveModuleName(stat) { - const normalizedPath = path.sep !== "/" ? stat.path.split(path.sep).join("/") : stat.path; - return path.posix.join(stat.name, normalizedPath).replace(normalize, ""); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/ModuleNameTrie.js -var require_ModuleNameTrie2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ModuleNameTrie = exports.ModuleNameSeparator = undefined; - exports.ModuleNameSeparator = "/"; - - class ModuleNameTrieNode { - hooks = []; - children = new Map; - } - - class ModuleNameTrie { - _trie = new ModuleNameTrieNode; - _counter = 0; - insert(hook) { - let trieNode = this._trie; - for (const moduleNamePart of hook.moduleName.split(exports.ModuleNameSeparator)) { - let nextNode = trieNode.children.get(moduleNamePart); - if (!nextNode) { - nextNode = new ModuleNameTrieNode; - trieNode.children.set(moduleNamePart, nextNode); - } - trieNode = nextNode; - } - trieNode.hooks.push({ hook, insertedId: this._counter++ }); - } - search(moduleName2, { maintainInsertionOrder, fullOnly } = {}) { - let trieNode = this._trie; - const results = []; - let foundFull = true; - for (const moduleNamePart of moduleName2.split(exports.ModuleNameSeparator)) { - const nextNode = trieNode.children.get(moduleNamePart); - if (!nextNode) { - foundFull = false; - break; - } - if (!fullOnly) { - results.push(...nextNode.hooks); - } - trieNode = nextNode; - } - if (fullOnly && foundFull) { - results.push(...trieNode.hooks); - } - if (results.length === 0) { - return []; - } - if (results.length === 1) { - return [results[0].hook]; - } - if (maintainInsertionOrder) { - results.sort((a, b) => a.insertedId - b.insertedId); - } - return results.map(({ hook }) => hook); - } - } - exports.ModuleNameTrie = ModuleNameTrie; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/RequireInTheMiddleSingleton.js -var require_RequireInTheMiddleSingleton2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RequireInTheMiddleSingleton = undefined; - var require_in_the_middle_1 = require_require_in_the_middle2(); - var path = __require("path"); - var ModuleNameTrie_1 = require_ModuleNameTrie2(); - var isMocha = [ - "afterEach", - "after", - "beforeEach", - "before", - "describe", - "it" - ].every((fn) => { - return typeof global[fn] === "function"; - }); - - class RequireInTheMiddleSingleton { - _moduleNameTrie = new ModuleNameTrie_1.ModuleNameTrie; - static _instance; - constructor() { - this._initialize(); - } - _initialize() { - new require_in_the_middle_1.Hook(null, { internals: true }, (exports2, name, basedir) => { - const normalizedModuleName = normalizePathSeparators(name); - const matches = this._moduleNameTrie.search(normalizedModuleName, { - maintainInsertionOrder: true, - fullOnly: basedir === undefined - }); - for (const { onRequire } of matches) { - exports2 = onRequire(exports2, name, basedir); - } - return exports2; - }); - } - register(moduleName2, onRequire) { - const hooked = { moduleName: moduleName2, onRequire }; - this._moduleNameTrie.insert(hooked); - return hooked; - } - static getInstance() { - if (isMocha) - return new RequireInTheMiddleSingleton; - return this._instance = this._instance ?? new RequireInTheMiddleSingleton; - } - } - exports.RequireInTheMiddleSingleton = RequireInTheMiddleSingleton; - function normalizePathSeparators(moduleNameOrPath) { - return path.sep !== ModuleNameTrie_1.ModuleNameSeparator ? moduleNameOrPath.split(path.sep).join(ModuleNameTrie_1.ModuleNameSeparator) : moduleNameOrPath; - } -}); - -// ../../../../node_modules/.bun/import-in-the-middle@1.15.0/node_modules/import-in-the-middle/lib/register.js -var require_register2 = __commonJS((exports) => { - var importHooks = []; - var setters = new WeakMap; - var getters = new WeakMap; - var specifiers = new Map; - var toHook = []; - var proxyHandler = { - set(target, name, value) { - return setters.get(target)[name](value); - }, - get(target, name) { - if (name === Symbol.toStringTag) { - return "Module"; - } - const getter = getters.get(target)[name]; - if (typeof getter === "function") { - return getter(); - } - }, - defineProperty(target, property, descriptor) { - if (!("value" in descriptor)) { - throw new Error("Getters/setters are not supported for exports property descriptors."); - } - return setters.get(target)[property](descriptor.value); - } - }; - function register(name, namespace, set2, get3, specifier) { - specifiers.set(name, specifier); - setters.set(namespace, set2); - getters.set(namespace, get3); - const proxy = new Proxy(namespace, proxyHandler); - importHooks.forEach((hook) => hook(name, proxy)); - toHook.push([name, proxy]); - } - var experimentalPatchInternals = false; - function getExperimentalPatchInternals() { - return experimentalPatchInternals; - } - function setExperimentalPatchInternals(value) { - experimentalPatchInternals = value; - } - exports.register = register; - exports.importHooks = importHooks; - exports.specifiers = specifiers; - exports.toHook = toHook; - exports.getExperimentalPatchInternals = getExperimentalPatchInternals; - exports.setExperimentalPatchInternals = setExperimentalPatchInternals; -}); - -// ../../../../node_modules/.bun/import-in-the-middle@1.15.0/node_modules/import-in-the-middle/index.js -var require_import_in_the_middle2 = __commonJS((exports, module) => { - var path = __require("path"); - var parse6 = require_module_details_from_path(); - var { fileURLToPath } = __require("url"); - var { MessageChannel } = __require("worker_threads"); - var { - importHooks, - specifiers, - toHook, - getExperimentalPatchInternals - } = require_register2(); - function addHook(hook) { - importHooks.push(hook); - toHook.forEach(([name, namespace]) => hook(name, namespace)); - } - function removeHook(hook) { - const index = importHooks.indexOf(hook); - if (index > -1) { - importHooks.splice(index, 1); - } - } - function callHookFn(hookFn, namespace, name, baseDir) { - const newDefault = hookFn(namespace, name, baseDir); - if (newDefault && newDefault !== namespace) { - namespace.default = newDefault; - } - } - var sendModulesToLoader; - function createAddHookMessageChannel() { - const { port1, port2 } = new MessageChannel; - let pendingAckCount = 0; - let resolveFn; - sendModulesToLoader = (modules) => { - pendingAckCount++; - port1.postMessage(modules); - }; - port1.on("message", () => { - pendingAckCount--; - if (resolveFn && pendingAckCount <= 0) { - resolveFn(); - } - }).unref(); - function waitForAllMessagesAcknowledged() { - const timer = setInterval(() => {}, 1000); - const promise2 = new Promise((resolve2) => { - resolveFn = resolve2; - }).then(() => { - clearInterval(timer); - }); - if (pendingAckCount === 0) { - resolveFn(); - } - return promise2; - } - const addHookMessagePort = port2; - const registerOptions = { data: { addHookMessagePort, include: [] }, transferList: [addHookMessagePort] }; - return { registerOptions, addHookMessagePort, waitForAllMessagesAcknowledged }; - } - function Hook(modules, options, hookFn) { - if (this instanceof Hook === false) - return new Hook(modules, options, hookFn); - if (typeof modules === "function") { - hookFn = modules; - modules = null; - options = null; - } else if (typeof options === "function") { - hookFn = options; - options = null; - } - const internals = options ? options.internals === true : false; - if (sendModulesToLoader && Array.isArray(modules)) { - sendModulesToLoader(modules); - } - this._iitmHook = (name, namespace) => { - const filename = name; - const isBuiltin = name.startsWith("node:"); - let baseDir; - if (isBuiltin) { - name = name.replace(/^node:/, ""); - } else { - if (name.startsWith("file://")) { - try { - name = fileURLToPath(name); - } catch (e) {} - } - const details = parse6(name); - if (details) { - name = details.name; - baseDir = details.basedir; - } - } - if (modules) { - for (const moduleName2 of modules) { - if (moduleName2 === name) { - if (baseDir) { - if (internals) { - name = name + path.sep + path.relative(baseDir, fileURLToPath(filename)); - } else { - if (!getExperimentalPatchInternals() && !baseDir.endsWith(specifiers.get(filename))) - continue; - } - } - callHookFn(hookFn, namespace, name, baseDir); - } - } - } else { - callHookFn(hookFn, namespace, name, baseDir); - } - }; - addHook(this._iitmHook); - } - Hook.prototype.unhook = function() { - removeHook(this._iitmHook); - }; - module.exports = Hook; - module.exports.Hook = Hook; - module.exports.addHook = addHook; - module.exports.removeHook = removeHook; - module.exports.createAddHookMessageChannel = createAddHookMessageChannel; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/utils.js -var require_utils49 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isWrapped = exports.safeExecuteInTheMiddleAsync = exports.safeExecuteInTheMiddle = undefined; - function safeExecuteInTheMiddle(execute, onFinish, preventThrowingError) { - let error48; - let result; - try { - result = execute(); - } catch (e) { - error48 = e; - } finally { - onFinish(error48, result); - if (error48 && !preventThrowingError) { - throw error48; - } - return result; - } - } - exports.safeExecuteInTheMiddle = safeExecuteInTheMiddle; - async function safeExecuteInTheMiddleAsync(execute, onFinish, preventThrowingError) { - let error48; - let result; - try { - result = await execute(); - } catch (e) { - error48 = e; - } finally { - onFinish(error48, result); - if (error48 && !preventThrowingError) { - throw error48; - } - return result; - } - } - exports.safeExecuteInTheMiddleAsync = safeExecuteInTheMiddleAsync; - function isWrapped(func) { - return typeof func === "function" && typeof func.__original === "function" && typeof func.__unwrap === "function" && func.__wrapped === true; - } - exports.isWrapped = isWrapped; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/instrumentation.js -var require_instrumentation40 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationBase = undefined; - var path = __require("path"); - var util_1 = __require("util"); - var semver_1 = require_semver3(); - var shimmer_1 = require_shimmer2(); - var instrumentation_1 = require_instrumentation39(); - var RequireInTheMiddleSingleton_1 = require_RequireInTheMiddleSingleton2(); - var import_in_the_middle_1 = require_import_in_the_middle2(); - var api_1 = require_src(); - var require_in_the_middle_1 = require_require_in_the_middle2(); - var fs_1 = __require("fs"); - var utils_1 = require_utils49(); - - class InstrumentationBase extends instrumentation_1.InstrumentationAbstract { - _modules; - _hooks = []; - _requireInTheMiddleSingleton = RequireInTheMiddleSingleton_1.RequireInTheMiddleSingleton.getInstance(); - _enabled = false; - constructor(instrumentationName, instrumentationVersion, config2) { - super(instrumentationName, instrumentationVersion, config2); - let modules = this.init(); - if (modules && !Array.isArray(modules)) { - modules = [modules]; - } - this._modules = modules || []; - if (this._config.enabled) { - this.enable(); - } - } - _wrap = (moduleExports, name, wrapper) => { - if ((0, utils_1.isWrapped)(moduleExports[name])) { - this._unwrap(moduleExports, name); - } - if (!util_1.types.isProxy(moduleExports)) { - return (0, shimmer_1.wrap)(moduleExports, name, wrapper); - } else { - const wrapped = (0, shimmer_1.wrap)(Object.assign({}, moduleExports), name, wrapper); - Object.defineProperty(moduleExports, name, { - value: wrapped - }); - return wrapped; - } - }; - _unwrap = (moduleExports, name) => { - if (!util_1.types.isProxy(moduleExports)) { - return (0, shimmer_1.unwrap)(moduleExports, name); - } else { - return Object.defineProperty(moduleExports, name, { - value: moduleExports[name] - }); - } - }; - _massWrap = (moduleExportsArray, names, wrapper) => { - if (!moduleExportsArray) { - api_1.diag.error("must provide one or more modules to patch"); - return; - } else if (!Array.isArray(moduleExportsArray)) { - moduleExportsArray = [moduleExportsArray]; - } - if (!(names && Array.isArray(names))) { - api_1.diag.error("must provide one or more functions to wrap on modules"); - return; - } - moduleExportsArray.forEach((moduleExports) => { - names.forEach((name) => { - this._wrap(moduleExports, name, wrapper); - }); - }); - }; - _massUnwrap = (moduleExportsArray, names) => { - if (!moduleExportsArray) { - api_1.diag.error("must provide one or more modules to patch"); - return; - } else if (!Array.isArray(moduleExportsArray)) { - moduleExportsArray = [moduleExportsArray]; - } - if (!(names && Array.isArray(names))) { - api_1.diag.error("must provide one or more functions to wrap on modules"); - return; - } - moduleExportsArray.forEach((moduleExports) => { - names.forEach((name) => { - this._unwrap(moduleExports, name); - }); - }); - }; - _warnOnPreloadedModules() { - this._modules.forEach((module2) => { - const { name } = module2; - try { - const resolvedModule = __require.resolve(name); - if (__require.cache[resolvedModule]) { - this._diag.warn(`Module ${name} has been loaded before ${this.instrumentationName} so it might not work, please initialize it before requiring ${name}`); - } - } catch {} - }); - } - _extractPackageVersion(baseDir) { - try { - const json3 = (0, fs_1.readFileSync)(path.join(baseDir, "package.json"), { - encoding: "utf8" - }); - const version2 = JSON.parse(json3).version; - return typeof version2 === "string" ? version2 : undefined; - } catch { - api_1.diag.warn("Failed extracting version", baseDir); - } - return; - } - _onRequire(module2, exports2, name, baseDir) { - if (!baseDir) { - if (typeof module2.patch === "function") { - module2.moduleExports = exports2; - if (this._enabled) { - this._diag.debug("Applying instrumentation patch for nodejs core module on require hook", { - module: module2.name - }); - return module2.patch(exports2); - } - } - return exports2; - } - const version2 = this._extractPackageVersion(baseDir); - module2.moduleVersion = version2; - if (module2.name === name) { - if (isSupported(module2.supportedVersions, version2, module2.includePrerelease)) { - if (typeof module2.patch === "function") { - module2.moduleExports = exports2; - if (this._enabled) { - this._diag.debug("Applying instrumentation patch for module on require hook", { - module: module2.name, - version: module2.moduleVersion, - baseDir - }); - return module2.patch(exports2, module2.moduleVersion); - } - } - } - return exports2; - } - const files = module2.files ?? []; - const normalizedName = path.normalize(name); - const supportedFileInstrumentations = files.filter((f) => f.name === normalizedName).filter((f) => isSupported(f.supportedVersions, version2, module2.includePrerelease)); - return supportedFileInstrumentations.reduce((patchedExports, file2) => { - file2.moduleExports = patchedExports; - if (this._enabled) { - this._diag.debug("Applying instrumentation patch for nodejs module file on require hook", { - module: module2.name, - version: module2.moduleVersion, - fileName: file2.name, - baseDir - }); - return file2.patch(patchedExports, module2.moduleVersion); - } - return patchedExports; - }, exports2); - } - enable() { - if (this._enabled) { - return; - } - this._enabled = true; - if (this._hooks.length > 0) { - for (const module2 of this._modules) { - if (typeof module2.patch === "function" && module2.moduleExports) { - this._diag.debug("Applying instrumentation patch for nodejs module on instrumentation enabled", { - module: module2.name, - version: module2.moduleVersion - }); - module2.patch(module2.moduleExports, module2.moduleVersion); - } - for (const file2 of module2.files) { - if (file2.moduleExports) { - this._diag.debug("Applying instrumentation patch for nodejs module file on instrumentation enabled", { - module: module2.name, - version: module2.moduleVersion, - fileName: file2.name - }); - file2.patch(file2.moduleExports, module2.moduleVersion); - } - } - } - return; - } - this._warnOnPreloadedModules(); - for (const module2 of this._modules) { - const hookFn = (exports2, name, baseDir) => { - if (!baseDir && path.isAbsolute(name)) { - const parsedPath = path.parse(name); - name = parsedPath.name; - baseDir = parsedPath.dir; - } - return this._onRequire(module2, exports2, name, baseDir); - }; - const onRequire = (exports2, name, baseDir) => { - return this._onRequire(module2, exports2, name, baseDir); - }; - const hook = path.isAbsolute(module2.name) ? new require_in_the_middle_1.Hook([module2.name], { internals: true }, onRequire) : this._requireInTheMiddleSingleton.register(module2.name, onRequire); - this._hooks.push(hook); - const esmHook = new import_in_the_middle_1.Hook([module2.name], { internals: false }, hookFn); - this._hooks.push(esmHook); - } - } - disable() { - if (!this._enabled) { - return; - } - this._enabled = false; - for (const module2 of this._modules) { - if (typeof module2.unpatch === "function" && module2.moduleExports) { - this._diag.debug("Removing instrumentation patch for nodejs module on instrumentation disabled", { - module: module2.name, - version: module2.moduleVersion - }); - module2.unpatch(module2.moduleExports, module2.moduleVersion); - } - for (const file2 of module2.files) { - if (file2.moduleExports) { - this._diag.debug("Removing instrumentation patch for nodejs module file on instrumentation disabled", { - module: module2.name, - version: module2.moduleVersion, - fileName: file2.name - }); - file2.unpatch(file2.moduleExports, module2.moduleVersion); - } - } - } - } - isEnabled() { - return this._enabled; - } - } - exports.InstrumentationBase = InstrumentationBase; - function isSupported(supportedVersions, version2, includePrerelease) { - if (typeof version2 === "undefined") { - return supportedVersions.includes("*"); - } - return supportedVersions.some((supportedVersion) => { - return (0, semver_1.satisfies)(version2, supportedVersion, { includePrerelease }); - }); - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/normalize.js -var require_normalize2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalize = undefined; - var path_1 = __require("path"); - Object.defineProperty(exports, "normalize", { enumerable: true, get: function() { - return path_1.normalize; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/node/index.js -var require_node25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalize = exports.InstrumentationBase = undefined; - var instrumentation_1 = require_instrumentation40(); - Object.defineProperty(exports, "InstrumentationBase", { enumerable: true, get: function() { - return instrumentation_1.InstrumentationBase; - } }); - var normalize_1 = require_normalize2(); - Object.defineProperty(exports, "normalize", { enumerable: true, get: function() { - return normalize_1.normalize; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/platform/index.js -var require_platform24 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.normalize = exports.InstrumentationBase = undefined; - var node_1 = require_node25(); - Object.defineProperty(exports, "InstrumentationBase", { enumerable: true, get: function() { - return node_1.InstrumentationBase; - } }); - Object.defineProperty(exports, "normalize", { enumerable: true, get: function() { - return node_1.normalize; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleDefinition.js -var require_instrumentationNodeModuleDefinition2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationNodeModuleDefinition = undefined; - - class InstrumentationNodeModuleDefinition { - name; - supportedVersions; - patch; - unpatch; - files; - constructor(name, supportedVersions, patch, unpatch, files) { - this.name = name; - this.supportedVersions = supportedVersions; - this.patch = patch; - this.unpatch = unpatch; - this.files = files || []; - } - } - exports.InstrumentationNodeModuleDefinition = InstrumentationNodeModuleDefinition; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/instrumentationNodeModuleFile.js -var require_instrumentationNodeModuleFile2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InstrumentationNodeModuleFile = undefined; - var index_1 = require_platform24(); - - class InstrumentationNodeModuleFile { - supportedVersions; - patch; - unpatch; - name; - constructor(name, supportedVersions, patch, unpatch) { - this.supportedVersions = supportedVersions; - this.patch = patch; - this.unpatch = unpatch; - this.name = (0, index_1.normalize)(name); - } - } - exports.InstrumentationNodeModuleFile = InstrumentationNodeModuleFile; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/semconvStability.js -var require_semconvStability2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.semconvStabilityFromStr = exports.SemconvStability = undefined; - var SemconvStability; - (function(SemconvStability2) { - SemconvStability2[SemconvStability2["STABLE"] = 1] = "STABLE"; - SemconvStability2[SemconvStability2["OLD"] = 2] = "OLD"; - SemconvStability2[SemconvStability2["DUPLICATE"] = 3] = "DUPLICATE"; - })(SemconvStability = exports.SemconvStability || (exports.SemconvStability = {})); - function semconvStabilityFromStr(namespace, str) { - let semconvStability = SemconvStability.OLD; - const entries = str?.split(",").map((v) => v.trim()).filter((s2) => s2 !== ""); - for (const entry of entries ?? []) { - if (entry.toLowerCase() === namespace + "/dup") { - semconvStability = SemconvStability.DUPLICATE; - break; - } else if (entry.toLowerCase() === namespace) { - semconvStability = SemconvStability.STABLE; - } - } - return semconvStability; - } - exports.semconvStabilityFromStr = semconvStabilityFromStr; -}); - -// ../../../../node_modules/.bun/@opentelemetry+instrumentation@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/instrumentation/build/src/index.js -var require_src97 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.semconvStabilityFromStr = exports.SemconvStability = exports.safeExecuteInTheMiddleAsync = exports.safeExecuteInTheMiddle = exports.isWrapped = exports.InstrumentationNodeModuleFile = exports.InstrumentationNodeModuleDefinition = exports.InstrumentationBase = exports.registerInstrumentations = undefined; - var autoLoader_1 = require_autoLoader2(); - Object.defineProperty(exports, "registerInstrumentations", { enumerable: true, get: function() { - return autoLoader_1.registerInstrumentations; - } }); - var index_1 = require_platform24(); - Object.defineProperty(exports, "InstrumentationBase", { enumerable: true, get: function() { - return index_1.InstrumentationBase; - } }); - var instrumentationNodeModuleDefinition_1 = require_instrumentationNodeModuleDefinition2(); - Object.defineProperty(exports, "InstrumentationNodeModuleDefinition", { enumerable: true, get: function() { - return instrumentationNodeModuleDefinition_1.InstrumentationNodeModuleDefinition; - } }); - var instrumentationNodeModuleFile_1 = require_instrumentationNodeModuleFile2(); - Object.defineProperty(exports, "InstrumentationNodeModuleFile", { enumerable: true, get: function() { - return instrumentationNodeModuleFile_1.InstrumentationNodeModuleFile; - } }); - var utils_1 = require_utils49(); - Object.defineProperty(exports, "isWrapped", { enumerable: true, get: function() { - return utils_1.isWrapped; - } }); - Object.defineProperty(exports, "safeExecuteInTheMiddle", { enumerable: true, get: function() { - return utils_1.safeExecuteInTheMiddle; - } }); - Object.defineProperty(exports, "safeExecuteInTheMiddleAsync", { enumerable: true, get: function() { - return utils_1.safeExecuteInTheMiddleAsync; - } }); - var semconvStability_1 = require_semconvStability2(); - Object.defineProperty(exports, "SemconvStability", { enumerable: true, get: function() { - return semconvStability_1.SemconvStability; - } }); - Object.defineProperty(exports, "semconvStabilityFromStr", { enumerable: true, get: function() { - return semconvStability_1.semconvStabilityFromStr; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/OTLPExporterBase.js -var require_OTLPExporterBase2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPExporterBase = undefined; - - class OTLPExporterBase { - _delegate; - constructor(_delegate) { - this._delegate = _delegate; - } - export(items, resultCallback) { - this._delegate.export(items, resultCallback); - } - forceFlush() { - return this._delegate.forceFlush(); - } - shutdown() { - return this._delegate.shutdown(); - } - } - exports.OTLPExporterBase = OTLPExporterBase; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/types.js -var require_types18 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPExporterError = undefined; - - class OTLPExporterError extends Error { - code; - name = "OTLPExporterError"; - data; - constructor(message, code, data) { - super(message); - this.data = data; - this.code = code; - } - } - exports.OTLPExporterError = OTLPExporterError; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/shared-configuration.js -var require_shared_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSharedConfigurationDefaults = exports.mergeOtlpSharedConfigurationWithDefaults = exports.wrapStaticHeadersInFunction = exports.validateTimeoutMillis = undefined; - function validateTimeoutMillis(timeoutMillis) { - if (Number.isFinite(timeoutMillis) && timeoutMillis > 0) { - return timeoutMillis; - } - throw new Error(`Configuration: timeoutMillis is invalid, expected number greater than 0 (actual: '${timeoutMillis}')`); - } - exports.validateTimeoutMillis = validateTimeoutMillis; - function wrapStaticHeadersInFunction(headers) { - if (headers == null) { - return; - } - return () => headers; - } - exports.wrapStaticHeadersInFunction = wrapStaticHeadersInFunction; - function mergeOtlpSharedConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - return { - timeoutMillis: validateTimeoutMillis(userProvidedConfiguration.timeoutMillis ?? fallbackConfiguration.timeoutMillis ?? defaultConfiguration.timeoutMillis), - concurrencyLimit: userProvidedConfiguration.concurrencyLimit ?? fallbackConfiguration.concurrencyLimit ?? defaultConfiguration.concurrencyLimit, - compression: userProvidedConfiguration.compression ?? fallbackConfiguration.compression ?? defaultConfiguration.compression - }; - } - exports.mergeOtlpSharedConfigurationWithDefaults = mergeOtlpSharedConfigurationWithDefaults; - function getSharedConfigurationDefaults() { - return { - timeoutMillis: 1e4, - concurrencyLimit: 30, - compression: "none" - }; - } - exports.getSharedConfigurationDefaults = getSharedConfigurationDefaults; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/legacy-node-configuration.js -var require_legacy_node_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.CompressionAlgorithm = undefined; - var CompressionAlgorithm; - (function(CompressionAlgorithm2) { - CompressionAlgorithm2["NONE"] = "none"; - CompressionAlgorithm2["GZIP"] = "gzip"; - })(CompressionAlgorithm = exports.CompressionAlgorithm || (exports.CompressionAlgorithm = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/bounded-queue-export-promise-handler.js -var require_bounded_queue_export_promise_handler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createBoundedQueueExportPromiseHandler = undefined; - - class BoundedQueueExportPromiseHandler { - _concurrencyLimit; - _sendingPromises = []; - constructor(concurrencyLimit) { - this._concurrencyLimit = concurrencyLimit; - } - pushPromise(promise2) { - if (this.hasReachedLimit()) { - throw new Error("Concurrency Limit reached"); - } - this._sendingPromises.push(promise2); - const popPromise = () => { - const index = this._sendingPromises.indexOf(promise2); - this._sendingPromises.splice(index, 1); - }; - promise2.then(popPromise, popPromise); - } - hasReachedLimit() { - return this._sendingPromises.length >= this._concurrencyLimit; - } - async awaitAll() { - await Promise.all(this._sendingPromises); - } - } - function createBoundedQueueExportPromiseHandler(options) { - return new BoundedQueueExportPromiseHandler(options.concurrencyLimit); - } - exports.createBoundedQueueExportPromiseHandler = createBoundedQueueExportPromiseHandler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/logging-response-handler.js -var require_logging_response_handler2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createLoggingPartialSuccessResponseHandler = undefined; - var api_1 = require_src(); - function isPartialSuccessResponse(response) { - return Object.prototype.hasOwnProperty.call(response, "partialSuccess"); - } - function createLoggingPartialSuccessResponseHandler() { - return { - handleResponse(response) { - if (response == null || !isPartialSuccessResponse(response) || response.partialSuccess == null || Object.keys(response.partialSuccess).length === 0) { - return; - } - api_1.diag.warn("Received Partial Success response:", JSON.stringify(response.partialSuccess)); - } - }; - } - exports.createLoggingPartialSuccessResponseHandler = createLoggingPartialSuccessResponseHandler; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/otlp-export-delegate.js -var require_otlp_export_delegate2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpExportDelegate = undefined; - var core_1 = require_src89(); - var types_1 = require_types18(); - var logging_response_handler_1 = require_logging_response_handler2(); - var api_1 = require_src(); - - class OTLPExportDelegate { - _transport; - _serializer; - _responseHandler; - _promiseQueue; - _timeout; - _diagLogger; - constructor(_transport, _serializer, _responseHandler, _promiseQueue, _timeout) { - this._transport = _transport; - this._serializer = _serializer; - this._responseHandler = _responseHandler; - this._promiseQueue = _promiseQueue; - this._timeout = _timeout; - this._diagLogger = api_1.diag.createComponentLogger({ - namespace: "OTLPExportDelegate" - }); - } - export(internalRepresentation, resultCallback) { - this._diagLogger.debug("items to be sent", internalRepresentation); - if (this._promiseQueue.hasReachedLimit()) { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Concurrent export limit reached") - }); - return; - } - const serializedRequest = this._serializer.serializeRequest(internalRepresentation); - if (serializedRequest == null) { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Nothing to send") - }); - return; - } - this._promiseQueue.pushPromise(this._transport.send(serializedRequest, this._timeout).then((response) => { - if (response.status === "success") { - if (response.data != null) { - try { - this._responseHandler.handleResponse(this._serializer.deserializeResponse(response.data)); - } catch (e) { - this._diagLogger.warn("Export succeeded but could not deserialize response - is the response specification compliant?", e, response.data); - } - } - resultCallback({ - code: core_1.ExportResultCode.SUCCESS - }); - return; - } else if (response.status === "failure" && response.error) { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: response.error - }); - return; - } else if (response.status === "retryable") { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new types_1.OTLPExporterError("Export failed with retryable status") - }); - } else { - resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new types_1.OTLPExporterError("Export failed with unknown error") - }); - } - }, (reason) => resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: reason - }))); - } - forceFlush() { - return this._promiseQueue.awaitAll(); - } - async shutdown() { - this._diagLogger.debug("shutdown started"); - await this.forceFlush(); - this._transport.shutdown(); - } - } - function createOtlpExportDelegate(components, settings) { - return new OTLPExportDelegate(components.transport, components.serializer, (0, logging_response_handler_1.createLoggingPartialSuccessResponseHandler)(), components.promiseHandler, settings.timeout); - } - exports.createOtlpExportDelegate = createOtlpExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/otlp-network-export-delegate.js -var require_otlp_network_export_delegate2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpNetworkExportDelegate = undefined; - var bounded_queue_export_promise_handler_1 = require_bounded_queue_export_promise_handler2(); - var otlp_export_delegate_1 = require_otlp_export_delegate2(); - function createOtlpNetworkExportDelegate(options, serializer, transport) { - return (0, otlp_export_delegate_1.createOtlpExportDelegate)({ - transport, - serializer, - promiseHandler: (0, bounded_queue_export_promise_handler_1.createBoundedQueueExportPromiseHandler)(options) - }, { timeout: options.timeoutMillis }); - } - exports.createOtlpNetworkExportDelegate = createOtlpNetworkExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/index.js -var require_src98 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpNetworkExportDelegate = exports.CompressionAlgorithm = exports.getSharedConfigurationDefaults = exports.mergeOtlpSharedConfigurationWithDefaults = exports.OTLPExporterError = exports.OTLPExporterBase = undefined; - var OTLPExporterBase_1 = require_OTLPExporterBase2(); - Object.defineProperty(exports, "OTLPExporterBase", { enumerable: true, get: function() { - return OTLPExporterBase_1.OTLPExporterBase; - } }); - var types_1 = require_types18(); - Object.defineProperty(exports, "OTLPExporterError", { enumerable: true, get: function() { - return types_1.OTLPExporterError; - } }); - var shared_configuration_1 = require_shared_configuration2(); - Object.defineProperty(exports, "mergeOtlpSharedConfigurationWithDefaults", { enumerable: true, get: function() { - return shared_configuration_1.mergeOtlpSharedConfigurationWithDefaults; - } }); - Object.defineProperty(exports, "getSharedConfigurationDefaults", { enumerable: true, get: function() { - return shared_configuration_1.getSharedConfigurationDefaults; - } }); - var legacy_node_configuration_1 = require_legacy_node_configuration2(); - Object.defineProperty(exports, "CompressionAlgorithm", { enumerable: true, get: function() { - return legacy_node_configuration_1.CompressionAlgorithm; - } }); - var otlp_network_export_delegate_1 = require_otlp_network_export_delegate2(); - Object.defineProperty(exports, "createOtlpNetworkExportDelegate", { enumerable: true, get: function() { - return otlp_network_export_delegate_1.createOtlpNetworkExportDelegate; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/generated/root.js -var require_root3 = __commonJS((exports, module) => { - Object.defineProperty(exports, "__esModule", { value: true }); - var $protobuf = require_index_minimal(); - var $Reader = $protobuf.Reader; - var $Writer = $protobuf.Writer; - var $util = $protobuf.util; - var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); - $root.opentelemetry = function() { - var opentelemetry = {}; - opentelemetry.proto = function() { - var proto = {}; - proto.common = function() { - var common = {}; - common.v1 = function() { - var v1 = {}; - v1.AnyValue = function() { - function AnyValue(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - AnyValue.prototype.stringValue = null; - AnyValue.prototype.boolValue = null; - AnyValue.prototype.intValue = null; - AnyValue.prototype.doubleValue = null; - AnyValue.prototype.arrayValue = null; - AnyValue.prototype.kvlistValue = null; - AnyValue.prototype.bytesValue = null; - var $oneOfFields; - Object.defineProperty(AnyValue.prototype, "value", { - get: $util.oneOfGetter($oneOfFields = ["stringValue", "boolValue", "intValue", "doubleValue", "arrayValue", "kvlistValue", "bytesValue"]), - set: $util.oneOfSetter($oneOfFields) - }); - AnyValue.create = function create(properties) { - return new AnyValue(properties); - }; - AnyValue.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.stringValue != null && Object.hasOwnProperty.call(message, "stringValue")) - writer.uint32(10).string(message.stringValue); - if (message.boolValue != null && Object.hasOwnProperty.call(message, "boolValue")) - writer.uint32(16).bool(message.boolValue); - if (message.intValue != null && Object.hasOwnProperty.call(message, "intValue")) - writer.uint32(24).int64(message.intValue); - if (message.doubleValue != null && Object.hasOwnProperty.call(message, "doubleValue")) - writer.uint32(33).double(message.doubleValue); - if (message.arrayValue != null && Object.hasOwnProperty.call(message, "arrayValue")) - $root.opentelemetry.proto.common.v1.ArrayValue.encode(message.arrayValue, writer.uint32(42).fork()).ldelim(); - if (message.kvlistValue != null && Object.hasOwnProperty.call(message, "kvlistValue")) - $root.opentelemetry.proto.common.v1.KeyValueList.encode(message.kvlistValue, writer.uint32(50).fork()).ldelim(); - if (message.bytesValue != null && Object.hasOwnProperty.call(message, "bytesValue")) - writer.uint32(58).bytes(message.bytesValue); - return writer; - }; - AnyValue.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - AnyValue.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.AnyValue; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.stringValue = reader.string(); - break; - } - case 2: { - message.boolValue = reader.bool(); - break; - } - case 3: { - message.intValue = reader.int64(); - break; - } - case 4: { - message.doubleValue = reader.double(); - break; - } - case 5: { - message.arrayValue = $root.opentelemetry.proto.common.v1.ArrayValue.decode(reader, reader.uint32()); - break; - } - case 6: { - message.kvlistValue = $root.opentelemetry.proto.common.v1.KeyValueList.decode(reader, reader.uint32()); - break; - } - case 7: { - message.bytesValue = reader.bytes(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - AnyValue.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - AnyValue.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) { - properties.value = 1; - if (!$util.isString(message.stringValue)) - return "stringValue: string expected"; - } - if (message.boolValue != null && message.hasOwnProperty("boolValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (typeof message.boolValue !== "boolean") - return "boolValue: boolean expected"; - } - if (message.intValue != null && message.hasOwnProperty("intValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!$util.isInteger(message.intValue) && !(message.intValue && $util.isInteger(message.intValue.low) && $util.isInteger(message.intValue.high))) - return "intValue: integer|Long expected"; - } - if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (typeof message.doubleValue !== "number") - return "doubleValue: number expected"; - } - if (message.arrayValue != null && message.hasOwnProperty("arrayValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - { - var error48 = $root.opentelemetry.proto.common.v1.ArrayValue.verify(message.arrayValue); - if (error48) - return "arrayValue." + error48; - } - } - if (message.kvlistValue != null && message.hasOwnProperty("kvlistValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - { - var error48 = $root.opentelemetry.proto.common.v1.KeyValueList.verify(message.kvlistValue); - if (error48) - return "kvlistValue." + error48; - } - } - if (message.bytesValue != null && message.hasOwnProperty("bytesValue")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!(message.bytesValue && typeof message.bytesValue.length === "number" || $util.isString(message.bytesValue))) - return "bytesValue: buffer expected"; - } - return null; - }; - AnyValue.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.AnyValue) - return object3; - var message = new $root.opentelemetry.proto.common.v1.AnyValue; - if (object3.stringValue != null) - message.stringValue = String(object3.stringValue); - if (object3.boolValue != null) - message.boolValue = Boolean(object3.boolValue); - if (object3.intValue != null) { - if ($util.Long) - (message.intValue = $util.Long.fromValue(object3.intValue)).unsigned = false; - else if (typeof object3.intValue === "string") - message.intValue = parseInt(object3.intValue, 10); - else if (typeof object3.intValue === "number") - message.intValue = object3.intValue; - else if (typeof object3.intValue === "object") - message.intValue = new $util.LongBits(object3.intValue.low >>> 0, object3.intValue.high >>> 0).toNumber(); - } - if (object3.doubleValue != null) - message.doubleValue = Number(object3.doubleValue); - if (object3.arrayValue != null) { - if (typeof object3.arrayValue !== "object") - throw TypeError(".opentelemetry.proto.common.v1.AnyValue.arrayValue: object expected"); - message.arrayValue = $root.opentelemetry.proto.common.v1.ArrayValue.fromObject(object3.arrayValue); - } - if (object3.kvlistValue != null) { - if (typeof object3.kvlistValue !== "object") - throw TypeError(".opentelemetry.proto.common.v1.AnyValue.kvlistValue: object expected"); - message.kvlistValue = $root.opentelemetry.proto.common.v1.KeyValueList.fromObject(object3.kvlistValue); - } - if (object3.bytesValue != null) { - if (typeof object3.bytesValue === "string") - $util.base64.decode(object3.bytesValue, message.bytesValue = $util.newBuffer($util.base64.length(object3.bytesValue)), 0); - else if (object3.bytesValue.length >= 0) - message.bytesValue = object3.bytesValue; - } - return message; - }; - AnyValue.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) { - object3.stringValue = message.stringValue; - if (options.oneofs) - object3.value = "stringValue"; - } - if (message.boolValue != null && message.hasOwnProperty("boolValue")) { - object3.boolValue = message.boolValue; - if (options.oneofs) - object3.value = "boolValue"; - } - if (message.intValue != null && message.hasOwnProperty("intValue")) { - if (typeof message.intValue === "number") - object3.intValue = options.longs === String ? String(message.intValue) : message.intValue; - else - object3.intValue = options.longs === String ? $util.Long.prototype.toString.call(message.intValue) : options.longs === Number ? new $util.LongBits(message.intValue.low >>> 0, message.intValue.high >>> 0).toNumber() : message.intValue; - if (options.oneofs) - object3.value = "intValue"; - } - if (message.doubleValue != null && message.hasOwnProperty("doubleValue")) { - object3.doubleValue = options.json && !isFinite(message.doubleValue) ? String(message.doubleValue) : message.doubleValue; - if (options.oneofs) - object3.value = "doubleValue"; - } - if (message.arrayValue != null && message.hasOwnProperty("arrayValue")) { - object3.arrayValue = $root.opentelemetry.proto.common.v1.ArrayValue.toObject(message.arrayValue, options); - if (options.oneofs) - object3.value = "arrayValue"; - } - if (message.kvlistValue != null && message.hasOwnProperty("kvlistValue")) { - object3.kvlistValue = $root.opentelemetry.proto.common.v1.KeyValueList.toObject(message.kvlistValue, options); - if (options.oneofs) - object3.value = "kvlistValue"; - } - if (message.bytesValue != null && message.hasOwnProperty("bytesValue")) { - object3.bytesValue = options.bytes === String ? $util.base64.encode(message.bytesValue, 0, message.bytesValue.length) : options.bytes === Array ? Array.prototype.slice.call(message.bytesValue) : message.bytesValue; - if (options.oneofs) - object3.value = "bytesValue"; - } - return object3; - }; - AnyValue.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - AnyValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.AnyValue"; - }; - return AnyValue; - }(); - v1.ArrayValue = function() { - function ArrayValue(properties) { - this.values = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ArrayValue.prototype.values = $util.emptyArray; - ArrayValue.create = function create(properties) { - return new ArrayValue(properties); - }; - ArrayValue.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.values != null && message.values.length) - for (var i = 0;i < message.values.length; ++i) - $root.opentelemetry.proto.common.v1.AnyValue.encode(message.values[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ArrayValue.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ArrayValue.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.ArrayValue; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.values && message.values.length)) - message.values = []; - message.values.push($root.opentelemetry.proto.common.v1.AnyValue.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ArrayValue.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ArrayValue.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.values != null && message.hasOwnProperty("values")) { - if (!Array.isArray(message.values)) - return "values: array expected"; - for (var i = 0;i < message.values.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.AnyValue.verify(message.values[i]); - if (error48) - return "values." + error48; - } - } - return null; - }; - ArrayValue.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.ArrayValue) - return object3; - var message = new $root.opentelemetry.proto.common.v1.ArrayValue; - if (object3.values) { - if (!Array.isArray(object3.values)) - throw TypeError(".opentelemetry.proto.common.v1.ArrayValue.values: array expected"); - message.values = []; - for (var i = 0;i < object3.values.length; ++i) { - if (typeof object3.values[i] !== "object") - throw TypeError(".opentelemetry.proto.common.v1.ArrayValue.values: object expected"); - message.values[i] = $root.opentelemetry.proto.common.v1.AnyValue.fromObject(object3.values[i]); - } - } - return message; - }; - ArrayValue.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.values = []; - if (message.values && message.values.length) { - object3.values = []; - for (var j = 0;j < message.values.length; ++j) - object3.values[j] = $root.opentelemetry.proto.common.v1.AnyValue.toObject(message.values[j], options); - } - return object3; - }; - ArrayValue.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ArrayValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.ArrayValue"; - }; - return ArrayValue; - }(); - v1.KeyValueList = function() { - function KeyValueList(properties) { - this.values = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - KeyValueList.prototype.values = $util.emptyArray; - KeyValueList.create = function create(properties) { - return new KeyValueList(properties); - }; - KeyValueList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.values != null && message.values.length) - for (var i = 0;i < message.values.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.values[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - KeyValueList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - KeyValueList.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.KeyValueList; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.values && message.values.length)) - message.values = []; - message.values.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - KeyValueList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - KeyValueList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.values != null && message.hasOwnProperty("values")) { - if (!Array.isArray(message.values)) - return "values: array expected"; - for (var i = 0;i < message.values.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.values[i]); - if (error48) - return "values." + error48; - } - } - return null; - }; - KeyValueList.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.KeyValueList) - return object3; - var message = new $root.opentelemetry.proto.common.v1.KeyValueList; - if (object3.values) { - if (!Array.isArray(object3.values)) - throw TypeError(".opentelemetry.proto.common.v1.KeyValueList.values: array expected"); - message.values = []; - for (var i = 0;i < object3.values.length; ++i) { - if (typeof object3.values[i] !== "object") - throw TypeError(".opentelemetry.proto.common.v1.KeyValueList.values: object expected"); - message.values[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.values[i]); - } - } - return message; - }; - KeyValueList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.values = []; - if (message.values && message.values.length) { - object3.values = []; - for (var j = 0;j < message.values.length; ++j) - object3.values[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.values[j], options); - } - return object3; - }; - KeyValueList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - KeyValueList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.KeyValueList"; - }; - return KeyValueList; - }(); - v1.KeyValue = function() { - function KeyValue(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - KeyValue.prototype.key = null; - KeyValue.prototype.value = null; - KeyValue.create = function create(properties) { - return new KeyValue(properties); - }; - KeyValue.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.key != null && Object.hasOwnProperty.call(message, "key")) - writer.uint32(10).string(message.key); - if (message.value != null && Object.hasOwnProperty.call(message, "value")) - $root.opentelemetry.proto.common.v1.AnyValue.encode(message.value, writer.uint32(18).fork()).ldelim(); - return writer; - }; - KeyValue.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - KeyValue.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.KeyValue; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.key = reader.string(); - break; - } - case 2: { - message.value = $root.opentelemetry.proto.common.v1.AnyValue.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - KeyValue.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - KeyValue.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.key != null && message.hasOwnProperty("key")) { - if (!$util.isString(message.key)) - return "key: string expected"; - } - if (message.value != null && message.hasOwnProperty("value")) { - var error48 = $root.opentelemetry.proto.common.v1.AnyValue.verify(message.value); - if (error48) - return "value." + error48; - } - return null; - }; - KeyValue.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.KeyValue) - return object3; - var message = new $root.opentelemetry.proto.common.v1.KeyValue; - if (object3.key != null) - message.key = String(object3.key); - if (object3.value != null) { - if (typeof object3.value !== "object") - throw TypeError(".opentelemetry.proto.common.v1.KeyValue.value: object expected"); - message.value = $root.opentelemetry.proto.common.v1.AnyValue.fromObject(object3.value); - } - return message; - }; - KeyValue.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - object3.key = ""; - object3.value = null; - } - if (message.key != null && message.hasOwnProperty("key")) - object3.key = message.key; - if (message.value != null && message.hasOwnProperty("value")) - object3.value = $root.opentelemetry.proto.common.v1.AnyValue.toObject(message.value, options); - return object3; - }; - KeyValue.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - KeyValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.KeyValue"; - }; - return KeyValue; - }(); - v1.InstrumentationScope = function() { - function InstrumentationScope(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - InstrumentationScope.prototype.name = null; - InstrumentationScope.prototype.version = null; - InstrumentationScope.prototype.attributes = $util.emptyArray; - InstrumentationScope.prototype.droppedAttributesCount = null; - InstrumentationScope.create = function create(properties) { - return new InstrumentationScope(properties); - }; - InstrumentationScope.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(10).string(message.name); - if (message.version != null && Object.hasOwnProperty.call(message, "version")) - writer.uint32(18).string(message.version); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(26).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(32).uint32(message.droppedAttributesCount); - return writer; - }; - InstrumentationScope.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - InstrumentationScope.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.InstrumentationScope; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.name = reader.string(); - break; - } - case 2: { - message.version = reader.string(); - break; - } - case 3: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 4: { - message.droppedAttributesCount = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - InstrumentationScope.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - InstrumentationScope.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.version != null && message.hasOwnProperty("version")) { - if (!$util.isString(message.version)) - return "version: string expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - return null; - }; - InstrumentationScope.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.InstrumentationScope) - return object3; - var message = new $root.opentelemetry.proto.common.v1.InstrumentationScope; - if (object3.name != null) - message.name = String(object3.name); - if (object3.version != null) - message.version = String(object3.version); - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.common.v1.InstrumentationScope.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.common.v1.InstrumentationScope.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - return message; - }; - InstrumentationScope.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - object3.name = ""; - object3.version = ""; - object3.droppedAttributesCount = 0; - } - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.version != null && message.hasOwnProperty("version")) - object3.version = message.version; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - return object3; - }; - InstrumentationScope.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - InstrumentationScope.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.InstrumentationScope"; - }; - return InstrumentationScope; - }(); - v1.EntityRef = function() { - function EntityRef(properties) { - this.idKeys = []; - this.descriptionKeys = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - EntityRef.prototype.schemaUrl = null; - EntityRef.prototype.type = null; - EntityRef.prototype.idKeys = $util.emptyArray; - EntityRef.prototype.descriptionKeys = $util.emptyArray; - EntityRef.create = function create(properties) { - return new EntityRef(properties); - }; - EntityRef.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(10).string(message.schemaUrl); - if (message.type != null && Object.hasOwnProperty.call(message, "type")) - writer.uint32(18).string(message.type); - if (message.idKeys != null && message.idKeys.length) - for (var i = 0;i < message.idKeys.length; ++i) - writer.uint32(26).string(message.idKeys[i]); - if (message.descriptionKeys != null && message.descriptionKeys.length) - for (var i = 0;i < message.descriptionKeys.length; ++i) - writer.uint32(34).string(message.descriptionKeys[i]); - return writer; - }; - EntityRef.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - EntityRef.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.common.v1.EntityRef; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.schemaUrl = reader.string(); - break; - } - case 2: { - message.type = reader.string(); - break; - } - case 3: { - if (!(message.idKeys && message.idKeys.length)) - message.idKeys = []; - message.idKeys.push(reader.string()); - break; - } - case 4: { - if (!(message.descriptionKeys && message.descriptionKeys.length)) - message.descriptionKeys = []; - message.descriptionKeys.push(reader.string()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - EntityRef.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - EntityRef.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - if (message.type != null && message.hasOwnProperty("type")) { - if (!$util.isString(message.type)) - return "type: string expected"; - } - if (message.idKeys != null && message.hasOwnProperty("idKeys")) { - if (!Array.isArray(message.idKeys)) - return "idKeys: array expected"; - for (var i = 0;i < message.idKeys.length; ++i) - if (!$util.isString(message.idKeys[i])) - return "idKeys: string[] expected"; - } - if (message.descriptionKeys != null && message.hasOwnProperty("descriptionKeys")) { - if (!Array.isArray(message.descriptionKeys)) - return "descriptionKeys: array expected"; - for (var i = 0;i < message.descriptionKeys.length; ++i) - if (!$util.isString(message.descriptionKeys[i])) - return "descriptionKeys: string[] expected"; - } - return null; - }; - EntityRef.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.common.v1.EntityRef) - return object3; - var message = new $root.opentelemetry.proto.common.v1.EntityRef; - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - if (object3.type != null) - message.type = String(object3.type); - if (object3.idKeys) { - if (!Array.isArray(object3.idKeys)) - throw TypeError(".opentelemetry.proto.common.v1.EntityRef.idKeys: array expected"); - message.idKeys = []; - for (var i = 0;i < object3.idKeys.length; ++i) - message.idKeys[i] = String(object3.idKeys[i]); - } - if (object3.descriptionKeys) { - if (!Array.isArray(object3.descriptionKeys)) - throw TypeError(".opentelemetry.proto.common.v1.EntityRef.descriptionKeys: array expected"); - message.descriptionKeys = []; - for (var i = 0;i < object3.descriptionKeys.length; ++i) - message.descriptionKeys[i] = String(object3.descriptionKeys[i]); - } - return message; - }; - EntityRef.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.idKeys = []; - object3.descriptionKeys = []; - } - if (options.defaults) { - object3.schemaUrl = ""; - object3.type = ""; - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - if (message.type != null && message.hasOwnProperty("type")) - object3.type = message.type; - if (message.idKeys && message.idKeys.length) { - object3.idKeys = []; - for (var j = 0;j < message.idKeys.length; ++j) - object3.idKeys[j] = message.idKeys[j]; - } - if (message.descriptionKeys && message.descriptionKeys.length) { - object3.descriptionKeys = []; - for (var j = 0;j < message.descriptionKeys.length; ++j) - object3.descriptionKeys[j] = message.descriptionKeys[j]; - } - return object3; - }; - EntityRef.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - EntityRef.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.common.v1.EntityRef"; - }; - return EntityRef; - }(); - return v1; - }(); - return common; - }(); - proto.resource = function() { - var resource = {}; - resource.v1 = function() { - var v1 = {}; - v1.Resource = function() { - function Resource(properties) { - this.attributes = []; - this.entityRefs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Resource.prototype.attributes = $util.emptyArray; - Resource.prototype.droppedAttributesCount = null; - Resource.prototype.entityRefs = $util.emptyArray; - Resource.create = function create(properties) { - return new Resource(properties); - }; - Resource.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(10).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(16).uint32(message.droppedAttributesCount); - if (message.entityRefs != null && message.entityRefs.length) - for (var i = 0;i < message.entityRefs.length; ++i) - $root.opentelemetry.proto.common.v1.EntityRef.encode(message.entityRefs[i], writer.uint32(26).fork()).ldelim(); - return writer; - }; - Resource.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Resource.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.resource.v1.Resource; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 3: { - if (!(message.entityRefs && message.entityRefs.length)) - message.entityRefs = []; - message.entityRefs.push($root.opentelemetry.proto.common.v1.EntityRef.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Resource.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Resource.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.entityRefs != null && message.hasOwnProperty("entityRefs")) { - if (!Array.isArray(message.entityRefs)) - return "entityRefs: array expected"; - for (var i = 0;i < message.entityRefs.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.EntityRef.verify(message.entityRefs[i]); - if (error48) - return "entityRefs." + error48; - } - } - return null; - }; - Resource.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.resource.v1.Resource) - return object3; - var message = new $root.opentelemetry.proto.resource.v1.Resource; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.resource.v1.Resource.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.resource.v1.Resource.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.entityRefs) { - if (!Array.isArray(object3.entityRefs)) - throw TypeError(".opentelemetry.proto.resource.v1.Resource.entityRefs: array expected"); - message.entityRefs = []; - for (var i = 0;i < object3.entityRefs.length; ++i) { - if (typeof object3.entityRefs[i] !== "object") - throw TypeError(".opentelemetry.proto.resource.v1.Resource.entityRefs: object expected"); - message.entityRefs[i] = $root.opentelemetry.proto.common.v1.EntityRef.fromObject(object3.entityRefs[i]); - } - } - return message; - }; - Resource.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.attributes = []; - object3.entityRefs = []; - } - if (options.defaults) - object3.droppedAttributesCount = 0; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.entityRefs && message.entityRefs.length) { - object3.entityRefs = []; - for (var j = 0;j < message.entityRefs.length; ++j) - object3.entityRefs[j] = $root.opentelemetry.proto.common.v1.EntityRef.toObject(message.entityRefs[j], options); - } - return object3; - }; - Resource.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Resource.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.resource.v1.Resource"; - }; - return Resource; - }(); - return v1; - }(); - return resource; - }(); - proto.trace = function() { - var trace6 = {}; - trace6.v1 = function() { - var v1 = {}; - v1.TracesData = function() { - function TracesData(properties) { - this.resourceSpans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - TracesData.prototype.resourceSpans = $util.emptyArray; - TracesData.create = function create(properties) { - return new TracesData(properties); - }; - TracesData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceSpans != null && message.resourceSpans.length) - for (var i = 0;i < message.resourceSpans.length; ++i) - $root.opentelemetry.proto.trace.v1.ResourceSpans.encode(message.resourceSpans[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - TracesData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - TracesData.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.TracesData; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceSpans && message.resourceSpans.length)) - message.resourceSpans = []; - message.resourceSpans.push($root.opentelemetry.proto.trace.v1.ResourceSpans.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - TracesData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - TracesData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceSpans != null && message.hasOwnProperty("resourceSpans")) { - if (!Array.isArray(message.resourceSpans)) - return "resourceSpans: array expected"; - for (var i = 0;i < message.resourceSpans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.ResourceSpans.verify(message.resourceSpans[i]); - if (error48) - return "resourceSpans." + error48; - } - } - return null; - }; - TracesData.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.TracesData) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.TracesData; - if (object3.resourceSpans) { - if (!Array.isArray(object3.resourceSpans)) - throw TypeError(".opentelemetry.proto.trace.v1.TracesData.resourceSpans: array expected"); - message.resourceSpans = []; - for (var i = 0;i < object3.resourceSpans.length; ++i) { - if (typeof object3.resourceSpans[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.TracesData.resourceSpans: object expected"); - message.resourceSpans[i] = $root.opentelemetry.proto.trace.v1.ResourceSpans.fromObject(object3.resourceSpans[i]); - } - } - return message; - }; - TracesData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceSpans = []; - if (message.resourceSpans && message.resourceSpans.length) { - object3.resourceSpans = []; - for (var j = 0;j < message.resourceSpans.length; ++j) - object3.resourceSpans[j] = $root.opentelemetry.proto.trace.v1.ResourceSpans.toObject(message.resourceSpans[j], options); - } - return object3; - }; - TracesData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - TracesData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.TracesData"; - }; - return TracesData; - }(); - v1.ResourceSpans = function() { - function ResourceSpans(properties) { - this.scopeSpans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ResourceSpans.prototype.resource = null; - ResourceSpans.prototype.scopeSpans = $util.emptyArray; - ResourceSpans.prototype.schemaUrl = null; - ResourceSpans.create = function create(properties) { - return new ResourceSpans(properties); - }; - ResourceSpans.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - $root.opentelemetry.proto.resource.v1.Resource.encode(message.resource, writer.uint32(10).fork()).ldelim(); - if (message.scopeSpans != null && message.scopeSpans.length) - for (var i = 0;i < message.scopeSpans.length; ++i) - $root.opentelemetry.proto.trace.v1.ScopeSpans.encode(message.scopeSpans[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ResourceSpans.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ResourceSpans.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.ResourceSpans; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.resource = $root.opentelemetry.proto.resource.v1.Resource.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.scopeSpans && message.scopeSpans.length)) - message.scopeSpans = []; - message.scopeSpans.push($root.opentelemetry.proto.trace.v1.ScopeSpans.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ResourceSpans.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ResourceSpans.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error48 = $root.opentelemetry.proto.resource.v1.Resource.verify(message.resource); - if (error48) - return "resource." + error48; - } - if (message.scopeSpans != null && message.hasOwnProperty("scopeSpans")) { - if (!Array.isArray(message.scopeSpans)) - return "scopeSpans: array expected"; - for (var i = 0;i < message.scopeSpans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.ScopeSpans.verify(message.scopeSpans[i]); - if (error48) - return "scopeSpans." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ResourceSpans.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.ResourceSpans) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.ResourceSpans; - if (object3.resource != null) { - if (typeof object3.resource !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ResourceSpans.resource: object expected"); - message.resource = $root.opentelemetry.proto.resource.v1.Resource.fromObject(object3.resource); - } - if (object3.scopeSpans) { - if (!Array.isArray(object3.scopeSpans)) - throw TypeError(".opentelemetry.proto.trace.v1.ResourceSpans.scopeSpans: array expected"); - message.scopeSpans = []; - for (var i = 0;i < object3.scopeSpans.length; ++i) { - if (typeof object3.scopeSpans[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ResourceSpans.scopeSpans: object expected"); - message.scopeSpans[i] = $root.opentelemetry.proto.trace.v1.ScopeSpans.fromObject(object3.scopeSpans[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ResourceSpans.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.scopeSpans = []; - if (options.defaults) { - object3.resource = null; - object3.schemaUrl = ""; - } - if (message.resource != null && message.hasOwnProperty("resource")) - object3.resource = $root.opentelemetry.proto.resource.v1.Resource.toObject(message.resource, options); - if (message.scopeSpans && message.scopeSpans.length) { - object3.scopeSpans = []; - for (var j = 0;j < message.scopeSpans.length; ++j) - object3.scopeSpans[j] = $root.opentelemetry.proto.trace.v1.ScopeSpans.toObject(message.scopeSpans[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ResourceSpans.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ResourceSpans.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.ResourceSpans"; - }; - return ResourceSpans; - }(); - v1.ScopeSpans = function() { - function ScopeSpans(properties) { - this.spans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ScopeSpans.prototype.scope = null; - ScopeSpans.prototype.spans = $util.emptyArray; - ScopeSpans.prototype.schemaUrl = null; - ScopeSpans.create = function create(properties) { - return new ScopeSpans(properties); - }; - ScopeSpans.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.scope != null && Object.hasOwnProperty.call(message, "scope")) - $root.opentelemetry.proto.common.v1.InstrumentationScope.encode(message.scope, writer.uint32(10).fork()).ldelim(); - if (message.spans != null && message.spans.length) - for (var i = 0;i < message.spans.length; ++i) - $root.opentelemetry.proto.trace.v1.Span.encode(message.spans[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ScopeSpans.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ScopeSpans.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.ScopeSpans; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.spans && message.spans.length)) - message.spans = []; - message.spans.push($root.opentelemetry.proto.trace.v1.Span.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ScopeSpans.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ScopeSpans.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.scope != null && message.hasOwnProperty("scope")) { - var error48 = $root.opentelemetry.proto.common.v1.InstrumentationScope.verify(message.scope); - if (error48) - return "scope." + error48; - } - if (message.spans != null && message.hasOwnProperty("spans")) { - if (!Array.isArray(message.spans)) - return "spans: array expected"; - for (var i = 0;i < message.spans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.Span.verify(message.spans[i]); - if (error48) - return "spans." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ScopeSpans.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.ScopeSpans) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.ScopeSpans; - if (object3.scope != null) { - if (typeof object3.scope !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ScopeSpans.scope: object expected"); - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.fromObject(object3.scope); - } - if (object3.spans) { - if (!Array.isArray(object3.spans)) - throw TypeError(".opentelemetry.proto.trace.v1.ScopeSpans.spans: array expected"); - message.spans = []; - for (var i = 0;i < object3.spans.length; ++i) { - if (typeof object3.spans[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.ScopeSpans.spans: object expected"); - message.spans[i] = $root.opentelemetry.proto.trace.v1.Span.fromObject(object3.spans[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ScopeSpans.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.spans = []; - if (options.defaults) { - object3.scope = null; - object3.schemaUrl = ""; - } - if (message.scope != null && message.hasOwnProperty("scope")) - object3.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.toObject(message.scope, options); - if (message.spans && message.spans.length) { - object3.spans = []; - for (var j = 0;j < message.spans.length; ++j) - object3.spans[j] = $root.opentelemetry.proto.trace.v1.Span.toObject(message.spans[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ScopeSpans.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ScopeSpans.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.ScopeSpans"; - }; - return ScopeSpans; - }(); - v1.Span = function() { - function Span(properties) { - this.attributes = []; - this.events = []; - this.links = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Span.prototype.traceId = null; - Span.prototype.spanId = null; - Span.prototype.traceState = null; - Span.prototype.parentSpanId = null; - Span.prototype.flags = null; - Span.prototype.name = null; - Span.prototype.kind = null; - Span.prototype.startTimeUnixNano = null; - Span.prototype.endTimeUnixNano = null; - Span.prototype.attributes = $util.emptyArray; - Span.prototype.droppedAttributesCount = null; - Span.prototype.events = $util.emptyArray; - Span.prototype.droppedEventsCount = null; - Span.prototype.links = $util.emptyArray; - Span.prototype.droppedLinksCount = null; - Span.prototype.status = null; - Span.create = function create(properties) { - return new Span(properties); - }; - Span.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(10).bytes(message.traceId); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(18).bytes(message.spanId); - if (message.traceState != null && Object.hasOwnProperty.call(message, "traceState")) - writer.uint32(26).string(message.traceState); - if (message.parentSpanId != null && Object.hasOwnProperty.call(message, "parentSpanId")) - writer.uint32(34).bytes(message.parentSpanId); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(42).string(message.name); - if (message.kind != null && Object.hasOwnProperty.call(message, "kind")) - writer.uint32(48).int32(message.kind); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(57).fixed64(message.startTimeUnixNano); - if (message.endTimeUnixNano != null && Object.hasOwnProperty.call(message, "endTimeUnixNano")) - writer.uint32(65).fixed64(message.endTimeUnixNano); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(74).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(80).uint32(message.droppedAttributesCount); - if (message.events != null && message.events.length) - for (var i = 0;i < message.events.length; ++i) - $root.opentelemetry.proto.trace.v1.Span.Event.encode(message.events[i], writer.uint32(90).fork()).ldelim(); - if (message.droppedEventsCount != null && Object.hasOwnProperty.call(message, "droppedEventsCount")) - writer.uint32(96).uint32(message.droppedEventsCount); - if (message.links != null && message.links.length) - for (var i = 0;i < message.links.length; ++i) - $root.opentelemetry.proto.trace.v1.Span.Link.encode(message.links[i], writer.uint32(106).fork()).ldelim(); - if (message.droppedLinksCount != null && Object.hasOwnProperty.call(message, "droppedLinksCount")) - writer.uint32(112).uint32(message.droppedLinksCount); - if (message.status != null && Object.hasOwnProperty.call(message, "status")) - $root.opentelemetry.proto.trace.v1.Status.encode(message.status, writer.uint32(122).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(133).fixed32(message.flags); - return writer; - }; - Span.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Span.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.traceId = reader.bytes(); - break; - } - case 2: { - message.spanId = reader.bytes(); - break; - } - case 3: { - message.traceState = reader.string(); - break; - } - case 4: { - message.parentSpanId = reader.bytes(); - break; - } - case 16: { - message.flags = reader.fixed32(); - break; - } - case 5: { - message.name = reader.string(); - break; - } - case 6: { - message.kind = reader.int32(); - break; - } - case 7: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 8: { - message.endTimeUnixNano = reader.fixed64(); - break; - } - case 9: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 10: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 11: { - if (!(message.events && message.events.length)) - message.events = []; - message.events.push($root.opentelemetry.proto.trace.v1.Span.Event.decode(reader, reader.uint32())); - break; - } - case 12: { - message.droppedEventsCount = reader.uint32(); - break; - } - case 13: { - if (!(message.links && message.links.length)) - message.links = []; - message.links.push($root.opentelemetry.proto.trace.v1.Span.Link.decode(reader, reader.uint32())); - break; - } - case 14: { - message.droppedLinksCount = reader.uint32(); - break; - } - case 15: { - message.status = $root.opentelemetry.proto.trace.v1.Status.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Span.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Span.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.traceState != null && message.hasOwnProperty("traceState")) { - if (!$util.isString(message.traceState)) - return "traceState: string expected"; - } - if (message.parentSpanId != null && message.hasOwnProperty("parentSpanId")) { - if (!(message.parentSpanId && typeof message.parentSpanId.length === "number" || $util.isString(message.parentSpanId))) - return "parentSpanId: buffer expected"; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.kind != null && message.hasOwnProperty("kind")) - switch (message.kind) { - default: - return "kind: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - break; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.endTimeUnixNano != null && message.hasOwnProperty("endTimeUnixNano")) { - if (!$util.isInteger(message.endTimeUnixNano) && !(message.endTimeUnixNano && $util.isInteger(message.endTimeUnixNano.low) && $util.isInteger(message.endTimeUnixNano.high))) - return "endTimeUnixNano: integer|Long expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.events != null && message.hasOwnProperty("events")) { - if (!Array.isArray(message.events)) - return "events: array expected"; - for (var i = 0;i < message.events.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.Span.Event.verify(message.events[i]); - if (error48) - return "events." + error48; - } - } - if (message.droppedEventsCount != null && message.hasOwnProperty("droppedEventsCount")) { - if (!$util.isInteger(message.droppedEventsCount)) - return "droppedEventsCount: integer expected"; - } - if (message.links != null && message.hasOwnProperty("links")) { - if (!Array.isArray(message.links)) - return "links: array expected"; - for (var i = 0;i < message.links.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.Span.Link.verify(message.links[i]); - if (error48) - return "links." + error48; - } - } - if (message.droppedLinksCount != null && message.hasOwnProperty("droppedLinksCount")) { - if (!$util.isInteger(message.droppedLinksCount)) - return "droppedLinksCount: integer expected"; - } - if (message.status != null && message.hasOwnProperty("status")) { - var error48 = $root.opentelemetry.proto.trace.v1.Status.verify(message.status); - if (error48) - return "status." + error48; - } - return null; - }; - Span.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Span) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Span; - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.traceState != null) - message.traceState = String(object3.traceState); - if (object3.parentSpanId != null) { - if (typeof object3.parentSpanId === "string") - $util.base64.decode(object3.parentSpanId, message.parentSpanId = $util.newBuffer($util.base64.length(object3.parentSpanId)), 0); - else if (object3.parentSpanId.length >= 0) - message.parentSpanId = object3.parentSpanId; - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.name != null) - message.name = String(object3.name); - switch (object3.kind) { - default: - if (typeof object3.kind === "number") { - message.kind = object3.kind; - break; - } - break; - case "SPAN_KIND_UNSPECIFIED": - case 0: - message.kind = 0; - break; - case "SPAN_KIND_INTERNAL": - case 1: - message.kind = 1; - break; - case "SPAN_KIND_SERVER": - case 2: - message.kind = 2; - break; - case "SPAN_KIND_CLIENT": - case 3: - message.kind = 3; - break; - case "SPAN_KIND_PRODUCER": - case 4: - message.kind = 4; - break; - case "SPAN_KIND_CONSUMER": - case 5: - message.kind = 5; - break; - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.endTimeUnixNano != null) { - if ($util.Long) - (message.endTimeUnixNano = $util.Long.fromValue(object3.endTimeUnixNano)).unsigned = false; - else if (typeof object3.endTimeUnixNano === "string") - message.endTimeUnixNano = parseInt(object3.endTimeUnixNano, 10); - else if (typeof object3.endTimeUnixNano === "number") - message.endTimeUnixNano = object3.endTimeUnixNano; - else if (typeof object3.endTimeUnixNano === "object") - message.endTimeUnixNano = new $util.LongBits(object3.endTimeUnixNano.low >>> 0, object3.endTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.events) { - if (!Array.isArray(object3.events)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.events: array expected"); - message.events = []; - for (var i = 0;i < object3.events.length; ++i) { - if (typeof object3.events[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.events: object expected"); - message.events[i] = $root.opentelemetry.proto.trace.v1.Span.Event.fromObject(object3.events[i]); - } - } - if (object3.droppedEventsCount != null) - message.droppedEventsCount = object3.droppedEventsCount >>> 0; - if (object3.links) { - if (!Array.isArray(object3.links)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.links: array expected"); - message.links = []; - for (var i = 0;i < object3.links.length; ++i) { - if (typeof object3.links[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.links: object expected"); - message.links[i] = $root.opentelemetry.proto.trace.v1.Span.Link.fromObject(object3.links[i]); - } - } - if (object3.droppedLinksCount != null) - message.droppedLinksCount = object3.droppedLinksCount >>> 0; - if (object3.status != null) { - if (typeof object3.status !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.status: object expected"); - message.status = $root.opentelemetry.proto.trace.v1.Status.fromObject(object3.status); - } - return message; - }; - Span.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.attributes = []; - object3.events = []; - object3.links = []; - } - if (options.defaults) { - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - object3.traceState = ""; - if (options.bytes === String) - object3.parentSpanId = ""; - else { - object3.parentSpanId = []; - if (options.bytes !== Array) - object3.parentSpanId = $util.newBuffer(object3.parentSpanId); - } - object3.name = ""; - object3.kind = options.enums === String ? "SPAN_KIND_UNSPECIFIED" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.endTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.endTimeUnixNano = options.longs === String ? "0" : 0; - object3.droppedAttributesCount = 0; - object3.droppedEventsCount = 0; - object3.droppedLinksCount = 0; - object3.status = null; - object3.flags = 0; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.traceState != null && message.hasOwnProperty("traceState")) - object3.traceState = message.traceState; - if (message.parentSpanId != null && message.hasOwnProperty("parentSpanId")) - object3.parentSpanId = options.bytes === String ? $util.base64.encode(message.parentSpanId, 0, message.parentSpanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.parentSpanId) : message.parentSpanId; - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.kind != null && message.hasOwnProperty("kind")) - object3.kind = options.enums === String ? $root.opentelemetry.proto.trace.v1.Span.SpanKind[message.kind] === undefined ? message.kind : $root.opentelemetry.proto.trace.v1.Span.SpanKind[message.kind] : message.kind; - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.endTimeUnixNano != null && message.hasOwnProperty("endTimeUnixNano")) - if (typeof message.endTimeUnixNano === "number") - object3.endTimeUnixNano = options.longs === String ? String(message.endTimeUnixNano) : message.endTimeUnixNano; - else - object3.endTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.endTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.endTimeUnixNano.low >>> 0, message.endTimeUnixNano.high >>> 0).toNumber() : message.endTimeUnixNano; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.events && message.events.length) { - object3.events = []; - for (var j = 0;j < message.events.length; ++j) - object3.events[j] = $root.opentelemetry.proto.trace.v1.Span.Event.toObject(message.events[j], options); - } - if (message.droppedEventsCount != null && message.hasOwnProperty("droppedEventsCount")) - object3.droppedEventsCount = message.droppedEventsCount; - if (message.links && message.links.length) { - object3.links = []; - for (var j = 0;j < message.links.length; ++j) - object3.links[j] = $root.opentelemetry.proto.trace.v1.Span.Link.toObject(message.links[j], options); - } - if (message.droppedLinksCount != null && message.hasOwnProperty("droppedLinksCount")) - object3.droppedLinksCount = message.droppedLinksCount; - if (message.status != null && message.hasOwnProperty("status")) - object3.status = $root.opentelemetry.proto.trace.v1.Status.toObject(message.status, options); - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - Span.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Span.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span"; - }; - Span.SpanKind = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "SPAN_KIND_UNSPECIFIED"] = 0; - values[valuesById[1] = "SPAN_KIND_INTERNAL"] = 1; - values[valuesById[2] = "SPAN_KIND_SERVER"] = 2; - values[valuesById[3] = "SPAN_KIND_CLIENT"] = 3; - values[valuesById[4] = "SPAN_KIND_PRODUCER"] = 4; - values[valuesById[5] = "SPAN_KIND_CONSUMER"] = 5; - return values; - }(); - Span.Event = function() { - function Event2(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Event2.prototype.timeUnixNano = null; - Event2.prototype.name = null; - Event2.prototype.attributes = $util.emptyArray; - Event2.prototype.droppedAttributesCount = null; - Event2.create = function create(properties) { - return new Event2(properties); - }; - Event2.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(9).fixed64(message.timeUnixNano); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(18).string(message.name); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(26).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(32).uint32(message.droppedAttributesCount); - return writer; - }; - Event2.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Event2.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span.Event; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 2: { - message.name = reader.string(); - break; - } - case 3: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 4: { - message.droppedAttributesCount = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Event2.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Event2.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - return null; - }; - Event2.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Span.Event) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Span.Event; - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.name != null) - message.name = String(object3.name); - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.Event.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.Event.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - return message; - }; - Event2.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - object3.name = ""; - object3.droppedAttributesCount = 0; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - return object3; - }; - Event2.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Event2.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span.Event"; - }; - return Event2; - }(); - Span.Link = function() { - function Link(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Link.prototype.traceId = null; - Link.prototype.spanId = null; - Link.prototype.traceState = null; - Link.prototype.attributes = $util.emptyArray; - Link.prototype.droppedAttributesCount = null; - Link.prototype.flags = null; - Link.create = function create(properties) { - return new Link(properties); - }; - Link.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(10).bytes(message.traceId); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(18).bytes(message.spanId); - if (message.traceState != null && Object.hasOwnProperty.call(message, "traceState")) - writer.uint32(26).string(message.traceState); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(34).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(40).uint32(message.droppedAttributesCount); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(53).fixed32(message.flags); - return writer; - }; - Link.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Link.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span.Link; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.traceId = reader.bytes(); - break; - } - case 2: { - message.spanId = reader.bytes(); - break; - } - case 3: { - message.traceState = reader.string(); - break; - } - case 4: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 5: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 6: { - message.flags = reader.fixed32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Link.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Link.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.traceState != null && message.hasOwnProperty("traceState")) { - if (!$util.isString(message.traceState)) - return "traceState: string expected"; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - return null; - }; - Link.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Span.Link) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Span.Link; - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.traceState != null) - message.traceState = String(object3.traceState); - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.trace.v1.Span.Link.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.trace.v1.Span.Link.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.flags != null) - message.flags = object3.flags >>> 0; - return message; - }; - Link.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - object3.traceState = ""; - object3.droppedAttributesCount = 0; - object3.flags = 0; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.traceState != null && message.hasOwnProperty("traceState")) - object3.traceState = message.traceState; - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - Link.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Link.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span.Link"; - }; - return Link; - }(); - return Span; - }(); - v1.Status = function() { - function Status(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Status.prototype.message = null; - Status.prototype.code = null; - Status.create = function create(properties) { - return new Status(properties); - }; - Status.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.message != null && Object.hasOwnProperty.call(message, "message")) - writer.uint32(18).string(message.message); - if (message.code != null && Object.hasOwnProperty.call(message, "code")) - writer.uint32(24).int32(message.code); - return writer; - }; - Status.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Status.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Status; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 2: { - message.message = reader.string(); - break; - } - case 3: { - message.code = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Status.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Status.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.message != null && message.hasOwnProperty("message")) { - if (!$util.isString(message.message)) - return "message: string expected"; - } - if (message.code != null && message.hasOwnProperty("code")) - switch (message.code) { - default: - return "code: enum value expected"; - case 0: - case 1: - case 2: - break; - } - return null; - }; - Status.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.trace.v1.Status) - return object3; - var message = new $root.opentelemetry.proto.trace.v1.Status; - if (object3.message != null) - message.message = String(object3.message); - switch (object3.code) { - default: - if (typeof object3.code === "number") { - message.code = object3.code; - break; - } - break; - case "STATUS_CODE_UNSET": - case 0: - message.code = 0; - break; - case "STATUS_CODE_OK": - case 1: - message.code = 1; - break; - case "STATUS_CODE_ERROR": - case 2: - message.code = 2; - break; - } - return message; - }; - Status.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - object3.message = ""; - object3.code = options.enums === String ? "STATUS_CODE_UNSET" : 0; - } - if (message.message != null && message.hasOwnProperty("message")) - object3.message = message.message; - if (message.code != null && message.hasOwnProperty("code")) - object3.code = options.enums === String ? $root.opentelemetry.proto.trace.v1.Status.StatusCode[message.code] === undefined ? message.code : $root.opentelemetry.proto.trace.v1.Status.StatusCode[message.code] : message.code; - return object3; - }; - Status.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Status.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Status"; - }; - Status.StatusCode = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "STATUS_CODE_UNSET"] = 0; - values[valuesById[1] = "STATUS_CODE_OK"] = 1; - values[valuesById[2] = "STATUS_CODE_ERROR"] = 2; - return values; - }(); - return Status; - }(); - v1.SpanFlags = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "SPAN_FLAGS_DO_NOT_USE"] = 0; - values[valuesById[255] = "SPAN_FLAGS_TRACE_FLAGS_MASK"] = 255; - values[valuesById[256] = "SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK"] = 256; - values[valuesById[512] = "SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK"] = 512; - return values; - }(); - return v1; - }(); - return trace6; - }(); - proto.collector = function() { - var collector = {}; - collector.trace = function() { - var trace6 = {}; - trace6.v1 = function() { - var v1 = {}; - v1.TraceService = function() { - function TraceService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - (TraceService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = TraceService; - TraceService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - Object.defineProperty(TraceService.prototype["export"] = function export_(request, callback) { - return this.rpcCall(export_, $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest, $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse, request, callback); - }, "name", { value: "Export" }); - return TraceService; - }(); - v1.ExportTraceServiceRequest = function() { - function ExportTraceServiceRequest(properties) { - this.resourceSpans = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportTraceServiceRequest.prototype.resourceSpans = $util.emptyArray; - ExportTraceServiceRequest.create = function create(properties) { - return new ExportTraceServiceRequest(properties); - }; - ExportTraceServiceRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceSpans != null && message.resourceSpans.length) - for (var i = 0;i < message.resourceSpans.length; ++i) - $root.opentelemetry.proto.trace.v1.ResourceSpans.encode(message.resourceSpans[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportTraceServiceRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportTraceServiceRequest.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceSpans && message.resourceSpans.length)) - message.resourceSpans = []; - message.resourceSpans.push($root.opentelemetry.proto.trace.v1.ResourceSpans.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportTraceServiceRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportTraceServiceRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceSpans != null && message.hasOwnProperty("resourceSpans")) { - if (!Array.isArray(message.resourceSpans)) - return "resourceSpans: array expected"; - for (var i = 0;i < message.resourceSpans.length; ++i) { - var error48 = $root.opentelemetry.proto.trace.v1.ResourceSpans.verify(message.resourceSpans[i]); - if (error48) - return "resourceSpans." + error48; - } - } - return null; - }; - ExportTraceServiceRequest.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest) - return object3; - var message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; - if (object3.resourceSpans) { - if (!Array.isArray(object3.resourceSpans)) - throw TypeError(".opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.resourceSpans: array expected"); - message.resourceSpans = []; - for (var i = 0;i < object3.resourceSpans.length; ++i) { - if (typeof object3.resourceSpans[i] !== "object") - throw TypeError(".opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.resourceSpans: object expected"); - message.resourceSpans[i] = $root.opentelemetry.proto.trace.v1.ResourceSpans.fromObject(object3.resourceSpans[i]); - } - } - return message; - }; - ExportTraceServiceRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceSpans = []; - if (message.resourceSpans && message.resourceSpans.length) { - object3.resourceSpans = []; - for (var j = 0;j < message.resourceSpans.length; ++j) - object3.resourceSpans[j] = $root.opentelemetry.proto.trace.v1.ResourceSpans.toObject(message.resourceSpans[j], options); - } - return object3; - }; - ExportTraceServiceRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportTraceServiceRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest"; - }; - return ExportTraceServiceRequest; - }(); - v1.ExportTraceServiceResponse = function() { - function ExportTraceServiceResponse(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportTraceServiceResponse.prototype.partialSuccess = null; - ExportTraceServiceResponse.create = function create(properties) { - return new ExportTraceServiceResponse(properties); - }; - ExportTraceServiceResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.partialSuccess != null && Object.hasOwnProperty.call(message, "partialSuccess")) - $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.encode(message.partialSuccess, writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportTraceServiceResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportTraceServiceResponse.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.partialSuccess = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportTraceServiceResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportTraceServiceResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) { - var error48 = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.verify(message.partialSuccess); - if (error48) - return "partialSuccess." + error48; - } - return null; - }; - ExportTraceServiceResponse.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse) - return object3; - var message = new $root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; - if (object3.partialSuccess != null) { - if (typeof object3.partialSuccess !== "object") - throw TypeError(".opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse.partialSuccess: object expected"); - message.partialSuccess = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.fromObject(object3.partialSuccess); - } - return message; - }; - ExportTraceServiceResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) - object3.partialSuccess = null; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) - object3.partialSuccess = $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess.toObject(message.partialSuccess, options); - return object3; - }; - ExportTraceServiceResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportTraceServiceResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse"; - }; - return ExportTraceServiceResponse; - }(); - v1.ExportTracePartialSuccess = function() { - function ExportTracePartialSuccess(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportTracePartialSuccess.prototype.rejectedSpans = null; - ExportTracePartialSuccess.prototype.errorMessage = null; - ExportTracePartialSuccess.create = function create(properties) { - return new ExportTracePartialSuccess(properties); - }; - ExportTracePartialSuccess.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rejectedSpans != null && Object.hasOwnProperty.call(message, "rejectedSpans")) - writer.uint32(8).int64(message.rejectedSpans); - if (message.errorMessage != null && Object.hasOwnProperty.call(message, "errorMessage")) - writer.uint32(18).string(message.errorMessage); - return writer; - }; - ExportTracePartialSuccess.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportTracePartialSuccess.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.rejectedSpans = reader.int64(); - break; - } - case 2: { - message.errorMessage = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportTracePartialSuccess.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportTracePartialSuccess.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rejectedSpans != null && message.hasOwnProperty("rejectedSpans")) { - if (!$util.isInteger(message.rejectedSpans) && !(message.rejectedSpans && $util.isInteger(message.rejectedSpans.low) && $util.isInteger(message.rejectedSpans.high))) - return "rejectedSpans: integer|Long expected"; - } - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) { - if (!$util.isString(message.errorMessage)) - return "errorMessage: string expected"; - } - return null; - }; - ExportTracePartialSuccess.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess) - return object3; - var message = new $root.opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess; - if (object3.rejectedSpans != null) { - if ($util.Long) - (message.rejectedSpans = $util.Long.fromValue(object3.rejectedSpans)).unsigned = false; - else if (typeof object3.rejectedSpans === "string") - message.rejectedSpans = parseInt(object3.rejectedSpans, 10); - else if (typeof object3.rejectedSpans === "number") - message.rejectedSpans = object3.rejectedSpans; - else if (typeof object3.rejectedSpans === "object") - message.rejectedSpans = new $util.LongBits(object3.rejectedSpans.low >>> 0, object3.rejectedSpans.high >>> 0).toNumber(); - } - if (object3.errorMessage != null) - message.errorMessage = String(object3.errorMessage); - return message; - }; - ExportTracePartialSuccess.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.rejectedSpans = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.rejectedSpans = options.longs === String ? "0" : 0; - object3.errorMessage = ""; - } - if (message.rejectedSpans != null && message.hasOwnProperty("rejectedSpans")) - if (typeof message.rejectedSpans === "number") - object3.rejectedSpans = options.longs === String ? String(message.rejectedSpans) : message.rejectedSpans; - else - object3.rejectedSpans = options.longs === String ? $util.Long.prototype.toString.call(message.rejectedSpans) : options.longs === Number ? new $util.LongBits(message.rejectedSpans.low >>> 0, message.rejectedSpans.high >>> 0).toNumber() : message.rejectedSpans; - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) - object3.errorMessage = message.errorMessage; - return object3; - }; - ExportTracePartialSuccess.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportTracePartialSuccess.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess"; - }; - return ExportTracePartialSuccess; - }(); - return v1; - }(); - return trace6; - }(); - collector.metrics = function() { - var metrics = {}; - metrics.v1 = function() { - var v1 = {}; - v1.MetricsService = function() { - function MetricsService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - (MetricsService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = MetricsService; - MetricsService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - Object.defineProperty(MetricsService.prototype["export"] = function export_(request, callback) { - return this.rpcCall(export_, $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest, $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse, request, callback); - }, "name", { value: "Export" }); - return MetricsService; - }(); - v1.ExportMetricsServiceRequest = function() { - function ExportMetricsServiceRequest(properties) { - this.resourceMetrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportMetricsServiceRequest.prototype.resourceMetrics = $util.emptyArray; - ExportMetricsServiceRequest.create = function create(properties) { - return new ExportMetricsServiceRequest(properties); - }; - ExportMetricsServiceRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceMetrics != null && message.resourceMetrics.length) - for (var i = 0;i < message.resourceMetrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.ResourceMetrics.encode(message.resourceMetrics[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportMetricsServiceRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportMetricsServiceRequest.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceMetrics && message.resourceMetrics.length)) - message.resourceMetrics = []; - message.resourceMetrics.push($root.opentelemetry.proto.metrics.v1.ResourceMetrics.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportMetricsServiceRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportMetricsServiceRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceMetrics != null && message.hasOwnProperty("resourceMetrics")) { - if (!Array.isArray(message.resourceMetrics)) - return "resourceMetrics: array expected"; - for (var i = 0;i < message.resourceMetrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.verify(message.resourceMetrics[i]); - if (error48) - return "resourceMetrics." + error48; - } - } - return null; - }; - ExportMetricsServiceRequest.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest) - return object3; - var message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; - if (object3.resourceMetrics) { - if (!Array.isArray(object3.resourceMetrics)) - throw TypeError(".opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest.resourceMetrics: array expected"); - message.resourceMetrics = []; - for (var i = 0;i < object3.resourceMetrics.length; ++i) { - if (typeof object3.resourceMetrics[i] !== "object") - throw TypeError(".opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest.resourceMetrics: object expected"); - message.resourceMetrics[i] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.fromObject(object3.resourceMetrics[i]); - } - } - return message; - }; - ExportMetricsServiceRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceMetrics = []; - if (message.resourceMetrics && message.resourceMetrics.length) { - object3.resourceMetrics = []; - for (var j = 0;j < message.resourceMetrics.length; ++j) - object3.resourceMetrics[j] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.toObject(message.resourceMetrics[j], options); - } - return object3; - }; - ExportMetricsServiceRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportMetricsServiceRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest"; - }; - return ExportMetricsServiceRequest; - }(); - v1.ExportMetricsServiceResponse = function() { - function ExportMetricsServiceResponse(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportMetricsServiceResponse.prototype.partialSuccess = null; - ExportMetricsServiceResponse.create = function create(properties) { - return new ExportMetricsServiceResponse(properties); - }; - ExportMetricsServiceResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.partialSuccess != null && Object.hasOwnProperty.call(message, "partialSuccess")) - $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.encode(message.partialSuccess, writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportMetricsServiceResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportMetricsServiceResponse.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.partialSuccess = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportMetricsServiceResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportMetricsServiceResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) { - var error48 = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.verify(message.partialSuccess); - if (error48) - return "partialSuccess." + error48; - } - return null; - }; - ExportMetricsServiceResponse.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse) - return object3; - var message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; - if (object3.partialSuccess != null) { - if (typeof object3.partialSuccess !== "object") - throw TypeError(".opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse.partialSuccess: object expected"); - message.partialSuccess = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.fromObject(object3.partialSuccess); - } - return message; - }; - ExportMetricsServiceResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) - object3.partialSuccess = null; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) - object3.partialSuccess = $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess.toObject(message.partialSuccess, options); - return object3; - }; - ExportMetricsServiceResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportMetricsServiceResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse"; - }; - return ExportMetricsServiceResponse; - }(); - v1.ExportMetricsPartialSuccess = function() { - function ExportMetricsPartialSuccess(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportMetricsPartialSuccess.prototype.rejectedDataPoints = null; - ExportMetricsPartialSuccess.prototype.errorMessage = null; - ExportMetricsPartialSuccess.create = function create(properties) { - return new ExportMetricsPartialSuccess(properties); - }; - ExportMetricsPartialSuccess.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rejectedDataPoints != null && Object.hasOwnProperty.call(message, "rejectedDataPoints")) - writer.uint32(8).int64(message.rejectedDataPoints); - if (message.errorMessage != null && Object.hasOwnProperty.call(message, "errorMessage")) - writer.uint32(18).string(message.errorMessage); - return writer; - }; - ExportMetricsPartialSuccess.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportMetricsPartialSuccess.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.rejectedDataPoints = reader.int64(); - break; - } - case 2: { - message.errorMessage = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportMetricsPartialSuccess.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportMetricsPartialSuccess.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rejectedDataPoints != null && message.hasOwnProperty("rejectedDataPoints")) { - if (!$util.isInteger(message.rejectedDataPoints) && !(message.rejectedDataPoints && $util.isInteger(message.rejectedDataPoints.low) && $util.isInteger(message.rejectedDataPoints.high))) - return "rejectedDataPoints: integer|Long expected"; - } - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) { - if (!$util.isString(message.errorMessage)) - return "errorMessage: string expected"; - } - return null; - }; - ExportMetricsPartialSuccess.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess) - return object3; - var message = new $root.opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess; - if (object3.rejectedDataPoints != null) { - if ($util.Long) - (message.rejectedDataPoints = $util.Long.fromValue(object3.rejectedDataPoints)).unsigned = false; - else if (typeof object3.rejectedDataPoints === "string") - message.rejectedDataPoints = parseInt(object3.rejectedDataPoints, 10); - else if (typeof object3.rejectedDataPoints === "number") - message.rejectedDataPoints = object3.rejectedDataPoints; - else if (typeof object3.rejectedDataPoints === "object") - message.rejectedDataPoints = new $util.LongBits(object3.rejectedDataPoints.low >>> 0, object3.rejectedDataPoints.high >>> 0).toNumber(); - } - if (object3.errorMessage != null) - message.errorMessage = String(object3.errorMessage); - return message; - }; - ExportMetricsPartialSuccess.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.rejectedDataPoints = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.rejectedDataPoints = options.longs === String ? "0" : 0; - object3.errorMessage = ""; - } - if (message.rejectedDataPoints != null && message.hasOwnProperty("rejectedDataPoints")) - if (typeof message.rejectedDataPoints === "number") - object3.rejectedDataPoints = options.longs === String ? String(message.rejectedDataPoints) : message.rejectedDataPoints; - else - object3.rejectedDataPoints = options.longs === String ? $util.Long.prototype.toString.call(message.rejectedDataPoints) : options.longs === Number ? new $util.LongBits(message.rejectedDataPoints.low >>> 0, message.rejectedDataPoints.high >>> 0).toNumber() : message.rejectedDataPoints; - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) - object3.errorMessage = message.errorMessage; - return object3; - }; - ExportMetricsPartialSuccess.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportMetricsPartialSuccess.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess"; - }; - return ExportMetricsPartialSuccess; - }(); - return v1; - }(); - return metrics; - }(); - collector.logs = function() { - var logs = {}; - logs.v1 = function() { - var v1 = {}; - v1.LogsService = function() { - function LogsService(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); - } - (LogsService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = LogsService; - LogsService.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); - }; - Object.defineProperty(LogsService.prototype["export"] = function export_(request, callback) { - return this.rpcCall(export_, $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest, $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse, request, callback); - }, "name", { value: "Export" }); - return LogsService; - }(); - v1.ExportLogsServiceRequest = function() { - function ExportLogsServiceRequest(properties) { - this.resourceLogs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportLogsServiceRequest.prototype.resourceLogs = $util.emptyArray; - ExportLogsServiceRequest.create = function create(properties) { - return new ExportLogsServiceRequest(properties); - }; - ExportLogsServiceRequest.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceLogs != null && message.resourceLogs.length) - for (var i = 0;i < message.resourceLogs.length; ++i) - $root.opentelemetry.proto.logs.v1.ResourceLogs.encode(message.resourceLogs[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportLogsServiceRequest.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportLogsServiceRequest.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceLogs && message.resourceLogs.length)) - message.resourceLogs = []; - message.resourceLogs.push($root.opentelemetry.proto.logs.v1.ResourceLogs.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportLogsServiceRequest.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportLogsServiceRequest.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceLogs != null && message.hasOwnProperty("resourceLogs")) { - if (!Array.isArray(message.resourceLogs)) - return "resourceLogs: array expected"; - for (var i = 0;i < message.resourceLogs.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.ResourceLogs.verify(message.resourceLogs[i]); - if (error48) - return "resourceLogs." + error48; - } - } - return null; - }; - ExportLogsServiceRequest.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest) - return object3; - var message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; - if (object3.resourceLogs) { - if (!Array.isArray(object3.resourceLogs)) - throw TypeError(".opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest.resourceLogs: array expected"); - message.resourceLogs = []; - for (var i = 0;i < object3.resourceLogs.length; ++i) { - if (typeof object3.resourceLogs[i] !== "object") - throw TypeError(".opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest.resourceLogs: object expected"); - message.resourceLogs[i] = $root.opentelemetry.proto.logs.v1.ResourceLogs.fromObject(object3.resourceLogs[i]); - } - } - return message; - }; - ExportLogsServiceRequest.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceLogs = []; - if (message.resourceLogs && message.resourceLogs.length) { - object3.resourceLogs = []; - for (var j = 0;j < message.resourceLogs.length; ++j) - object3.resourceLogs[j] = $root.opentelemetry.proto.logs.v1.ResourceLogs.toObject(message.resourceLogs[j], options); - } - return object3; - }; - ExportLogsServiceRequest.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportLogsServiceRequest.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest"; - }; - return ExportLogsServiceRequest; - }(); - v1.ExportLogsServiceResponse = function() { - function ExportLogsServiceResponse(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportLogsServiceResponse.prototype.partialSuccess = null; - ExportLogsServiceResponse.create = function create(properties) { - return new ExportLogsServiceResponse(properties); - }; - ExportLogsServiceResponse.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.partialSuccess != null && Object.hasOwnProperty.call(message, "partialSuccess")) - $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.encode(message.partialSuccess, writer.uint32(10).fork()).ldelim(); - return writer; - }; - ExportLogsServiceResponse.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportLogsServiceResponse.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.partialSuccess = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportLogsServiceResponse.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportLogsServiceResponse.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) { - var error48 = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.verify(message.partialSuccess); - if (error48) - return "partialSuccess." + error48; - } - return null; - }; - ExportLogsServiceResponse.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse) - return object3; - var message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; - if (object3.partialSuccess != null) { - if (typeof object3.partialSuccess !== "object") - throw TypeError(".opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse.partialSuccess: object expected"); - message.partialSuccess = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.fromObject(object3.partialSuccess); - } - return message; - }; - ExportLogsServiceResponse.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) - object3.partialSuccess = null; - if (message.partialSuccess != null && message.hasOwnProperty("partialSuccess")) - object3.partialSuccess = $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess.toObject(message.partialSuccess, options); - return object3; - }; - ExportLogsServiceResponse.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportLogsServiceResponse.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse"; - }; - return ExportLogsServiceResponse; - }(); - v1.ExportLogsPartialSuccess = function() { - function ExportLogsPartialSuccess(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExportLogsPartialSuccess.prototype.rejectedLogRecords = null; - ExportLogsPartialSuccess.prototype.errorMessage = null; - ExportLogsPartialSuccess.create = function create(properties) { - return new ExportLogsPartialSuccess(properties); - }; - ExportLogsPartialSuccess.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.rejectedLogRecords != null && Object.hasOwnProperty.call(message, "rejectedLogRecords")) - writer.uint32(8).int64(message.rejectedLogRecords); - if (message.errorMessage != null && Object.hasOwnProperty.call(message, "errorMessage")) - writer.uint32(18).string(message.errorMessage); - return writer; - }; - ExportLogsPartialSuccess.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExportLogsPartialSuccess.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.rejectedLogRecords = reader.int64(); - break; - } - case 2: { - message.errorMessage = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExportLogsPartialSuccess.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExportLogsPartialSuccess.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.rejectedLogRecords != null && message.hasOwnProperty("rejectedLogRecords")) { - if (!$util.isInteger(message.rejectedLogRecords) && !(message.rejectedLogRecords && $util.isInteger(message.rejectedLogRecords.low) && $util.isInteger(message.rejectedLogRecords.high))) - return "rejectedLogRecords: integer|Long expected"; - } - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) { - if (!$util.isString(message.errorMessage)) - return "errorMessage: string expected"; - } - return null; - }; - ExportLogsPartialSuccess.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess) - return object3; - var message = new $root.opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess; - if (object3.rejectedLogRecords != null) { - if ($util.Long) - (message.rejectedLogRecords = $util.Long.fromValue(object3.rejectedLogRecords)).unsigned = false; - else if (typeof object3.rejectedLogRecords === "string") - message.rejectedLogRecords = parseInt(object3.rejectedLogRecords, 10); - else if (typeof object3.rejectedLogRecords === "number") - message.rejectedLogRecords = object3.rejectedLogRecords; - else if (typeof object3.rejectedLogRecords === "object") - message.rejectedLogRecords = new $util.LongBits(object3.rejectedLogRecords.low >>> 0, object3.rejectedLogRecords.high >>> 0).toNumber(); - } - if (object3.errorMessage != null) - message.errorMessage = String(object3.errorMessage); - return message; - }; - ExportLogsPartialSuccess.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.rejectedLogRecords = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.rejectedLogRecords = options.longs === String ? "0" : 0; - object3.errorMessage = ""; - } - if (message.rejectedLogRecords != null && message.hasOwnProperty("rejectedLogRecords")) - if (typeof message.rejectedLogRecords === "number") - object3.rejectedLogRecords = options.longs === String ? String(message.rejectedLogRecords) : message.rejectedLogRecords; - else - object3.rejectedLogRecords = options.longs === String ? $util.Long.prototype.toString.call(message.rejectedLogRecords) : options.longs === Number ? new $util.LongBits(message.rejectedLogRecords.low >>> 0, message.rejectedLogRecords.high >>> 0).toNumber() : message.rejectedLogRecords; - if (message.errorMessage != null && message.hasOwnProperty("errorMessage")) - object3.errorMessage = message.errorMessage; - return object3; - }; - ExportLogsPartialSuccess.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExportLogsPartialSuccess.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess"; - }; - return ExportLogsPartialSuccess; - }(); - return v1; - }(); - return logs; - }(); - return collector; - }(); - proto.metrics = function() { - var metrics = {}; - metrics.v1 = function() { - var v1 = {}; - v1.MetricsData = function() { - function MetricsData(properties) { - this.resourceMetrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - MetricsData.prototype.resourceMetrics = $util.emptyArray; - MetricsData.create = function create(properties) { - return new MetricsData(properties); - }; - MetricsData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceMetrics != null && message.resourceMetrics.length) - for (var i = 0;i < message.resourceMetrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.ResourceMetrics.encode(message.resourceMetrics[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - MetricsData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - MetricsData.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.MetricsData; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceMetrics && message.resourceMetrics.length)) - message.resourceMetrics = []; - message.resourceMetrics.push($root.opentelemetry.proto.metrics.v1.ResourceMetrics.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - MetricsData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - MetricsData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceMetrics != null && message.hasOwnProperty("resourceMetrics")) { - if (!Array.isArray(message.resourceMetrics)) - return "resourceMetrics: array expected"; - for (var i = 0;i < message.resourceMetrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.verify(message.resourceMetrics[i]); - if (error48) - return "resourceMetrics." + error48; - } - } - return null; - }; - MetricsData.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.MetricsData) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.MetricsData; - if (object3.resourceMetrics) { - if (!Array.isArray(object3.resourceMetrics)) - throw TypeError(".opentelemetry.proto.metrics.v1.MetricsData.resourceMetrics: array expected"); - message.resourceMetrics = []; - for (var i = 0;i < object3.resourceMetrics.length; ++i) { - if (typeof object3.resourceMetrics[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.MetricsData.resourceMetrics: object expected"); - message.resourceMetrics[i] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.fromObject(object3.resourceMetrics[i]); - } - } - return message; - }; - MetricsData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceMetrics = []; - if (message.resourceMetrics && message.resourceMetrics.length) { - object3.resourceMetrics = []; - for (var j = 0;j < message.resourceMetrics.length; ++j) - object3.resourceMetrics[j] = $root.opentelemetry.proto.metrics.v1.ResourceMetrics.toObject(message.resourceMetrics[j], options); - } - return object3; - }; - MetricsData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - MetricsData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.MetricsData"; - }; - return MetricsData; - }(); - v1.ResourceMetrics = function() { - function ResourceMetrics(properties) { - this.scopeMetrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ResourceMetrics.prototype.resource = null; - ResourceMetrics.prototype.scopeMetrics = $util.emptyArray; - ResourceMetrics.prototype.schemaUrl = null; - ResourceMetrics.create = function create(properties) { - return new ResourceMetrics(properties); - }; - ResourceMetrics.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - $root.opentelemetry.proto.resource.v1.Resource.encode(message.resource, writer.uint32(10).fork()).ldelim(); - if (message.scopeMetrics != null && message.scopeMetrics.length) - for (var i = 0;i < message.scopeMetrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.ScopeMetrics.encode(message.scopeMetrics[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ResourceMetrics.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ResourceMetrics.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ResourceMetrics; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.resource = $root.opentelemetry.proto.resource.v1.Resource.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.scopeMetrics && message.scopeMetrics.length)) - message.scopeMetrics = []; - message.scopeMetrics.push($root.opentelemetry.proto.metrics.v1.ScopeMetrics.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ResourceMetrics.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ResourceMetrics.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error48 = $root.opentelemetry.proto.resource.v1.Resource.verify(message.resource); - if (error48) - return "resource." + error48; - } - if (message.scopeMetrics != null && message.hasOwnProperty("scopeMetrics")) { - if (!Array.isArray(message.scopeMetrics)) - return "scopeMetrics: array expected"; - for (var i = 0;i < message.scopeMetrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ScopeMetrics.verify(message.scopeMetrics[i]); - if (error48) - return "scopeMetrics." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ResourceMetrics.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ResourceMetrics) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ResourceMetrics; - if (object3.resource != null) { - if (typeof object3.resource !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ResourceMetrics.resource: object expected"); - message.resource = $root.opentelemetry.proto.resource.v1.Resource.fromObject(object3.resource); - } - if (object3.scopeMetrics) { - if (!Array.isArray(object3.scopeMetrics)) - throw TypeError(".opentelemetry.proto.metrics.v1.ResourceMetrics.scopeMetrics: array expected"); - message.scopeMetrics = []; - for (var i = 0;i < object3.scopeMetrics.length; ++i) { - if (typeof object3.scopeMetrics[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ResourceMetrics.scopeMetrics: object expected"); - message.scopeMetrics[i] = $root.opentelemetry.proto.metrics.v1.ScopeMetrics.fromObject(object3.scopeMetrics[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ResourceMetrics.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.scopeMetrics = []; - if (options.defaults) { - object3.resource = null; - object3.schemaUrl = ""; - } - if (message.resource != null && message.hasOwnProperty("resource")) - object3.resource = $root.opentelemetry.proto.resource.v1.Resource.toObject(message.resource, options); - if (message.scopeMetrics && message.scopeMetrics.length) { - object3.scopeMetrics = []; - for (var j = 0;j < message.scopeMetrics.length; ++j) - object3.scopeMetrics[j] = $root.opentelemetry.proto.metrics.v1.ScopeMetrics.toObject(message.scopeMetrics[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ResourceMetrics.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ResourceMetrics.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ResourceMetrics"; - }; - return ResourceMetrics; - }(); - v1.ScopeMetrics = function() { - function ScopeMetrics(properties) { - this.metrics = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ScopeMetrics.prototype.scope = null; - ScopeMetrics.prototype.metrics = $util.emptyArray; - ScopeMetrics.prototype.schemaUrl = null; - ScopeMetrics.create = function create(properties) { - return new ScopeMetrics(properties); - }; - ScopeMetrics.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.scope != null && Object.hasOwnProperty.call(message, "scope")) - $root.opentelemetry.proto.common.v1.InstrumentationScope.encode(message.scope, writer.uint32(10).fork()).ldelim(); - if (message.metrics != null && message.metrics.length) - for (var i = 0;i < message.metrics.length; ++i) - $root.opentelemetry.proto.metrics.v1.Metric.encode(message.metrics[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ScopeMetrics.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ScopeMetrics.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ScopeMetrics; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.metrics && message.metrics.length)) - message.metrics = []; - message.metrics.push($root.opentelemetry.proto.metrics.v1.Metric.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ScopeMetrics.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ScopeMetrics.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.scope != null && message.hasOwnProperty("scope")) { - var error48 = $root.opentelemetry.proto.common.v1.InstrumentationScope.verify(message.scope); - if (error48) - return "scope." + error48; - } - if (message.metrics != null && message.hasOwnProperty("metrics")) { - if (!Array.isArray(message.metrics)) - return "metrics: array expected"; - for (var i = 0;i < message.metrics.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Metric.verify(message.metrics[i]); - if (error48) - return "metrics." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ScopeMetrics.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ScopeMetrics) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ScopeMetrics; - if (object3.scope != null) { - if (typeof object3.scope !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ScopeMetrics.scope: object expected"); - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.fromObject(object3.scope); - } - if (object3.metrics) { - if (!Array.isArray(object3.metrics)) - throw TypeError(".opentelemetry.proto.metrics.v1.ScopeMetrics.metrics: array expected"); - message.metrics = []; - for (var i = 0;i < object3.metrics.length; ++i) { - if (typeof object3.metrics[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ScopeMetrics.metrics: object expected"); - message.metrics[i] = $root.opentelemetry.proto.metrics.v1.Metric.fromObject(object3.metrics[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ScopeMetrics.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.metrics = []; - if (options.defaults) { - object3.scope = null; - object3.schemaUrl = ""; - } - if (message.scope != null && message.hasOwnProperty("scope")) - object3.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.toObject(message.scope, options); - if (message.metrics && message.metrics.length) { - object3.metrics = []; - for (var j = 0;j < message.metrics.length; ++j) - object3.metrics[j] = $root.opentelemetry.proto.metrics.v1.Metric.toObject(message.metrics[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ScopeMetrics.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ScopeMetrics.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ScopeMetrics"; - }; - return ScopeMetrics; - }(); - v1.Metric = function() { - function Metric(properties) { - this.metadata = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Metric.prototype.name = null; - Metric.prototype.description = null; - Metric.prototype.unit = null; - Metric.prototype.gauge = null; - Metric.prototype.sum = null; - Metric.prototype.histogram = null; - Metric.prototype.exponentialHistogram = null; - Metric.prototype.summary = null; - Metric.prototype.metadata = $util.emptyArray; - var $oneOfFields; - Object.defineProperty(Metric.prototype, "data", { - get: $util.oneOfGetter($oneOfFields = ["gauge", "sum", "histogram", "exponentialHistogram", "summary"]), - set: $util.oneOfSetter($oneOfFields) - }); - Metric.create = function create(properties) { - return new Metric(properties); - }; - Metric.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.name != null && Object.hasOwnProperty.call(message, "name")) - writer.uint32(10).string(message.name); - if (message.description != null && Object.hasOwnProperty.call(message, "description")) - writer.uint32(18).string(message.description); - if (message.unit != null && Object.hasOwnProperty.call(message, "unit")) - writer.uint32(26).string(message.unit); - if (message.gauge != null && Object.hasOwnProperty.call(message, "gauge")) - $root.opentelemetry.proto.metrics.v1.Gauge.encode(message.gauge, writer.uint32(42).fork()).ldelim(); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - $root.opentelemetry.proto.metrics.v1.Sum.encode(message.sum, writer.uint32(58).fork()).ldelim(); - if (message.histogram != null && Object.hasOwnProperty.call(message, "histogram")) - $root.opentelemetry.proto.metrics.v1.Histogram.encode(message.histogram, writer.uint32(74).fork()).ldelim(); - if (message.exponentialHistogram != null && Object.hasOwnProperty.call(message, "exponentialHistogram")) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.encode(message.exponentialHistogram, writer.uint32(82).fork()).ldelim(); - if (message.summary != null && Object.hasOwnProperty.call(message, "summary")) - $root.opentelemetry.proto.metrics.v1.Summary.encode(message.summary, writer.uint32(90).fork()).ldelim(); - if (message.metadata != null && message.metadata.length) - for (var i = 0;i < message.metadata.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.metadata[i], writer.uint32(98).fork()).ldelim(); - return writer; - }; - Metric.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Metric.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Metric; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.name = reader.string(); - break; - } - case 2: { - message.description = reader.string(); - break; - } - case 3: { - message.unit = reader.string(); - break; - } - case 5: { - message.gauge = $root.opentelemetry.proto.metrics.v1.Gauge.decode(reader, reader.uint32()); - break; - } - case 7: { - message.sum = $root.opentelemetry.proto.metrics.v1.Sum.decode(reader, reader.uint32()); - break; - } - case 9: { - message.histogram = $root.opentelemetry.proto.metrics.v1.Histogram.decode(reader, reader.uint32()); - break; - } - case 10: { - message.exponentialHistogram = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.decode(reader, reader.uint32()); - break; - } - case 11: { - message.summary = $root.opentelemetry.proto.metrics.v1.Summary.decode(reader, reader.uint32()); - break; - } - case 12: { - if (!(message.metadata && message.metadata.length)) - message.metadata = []; - message.metadata.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Metric.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Metric.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.name != null && message.hasOwnProperty("name")) { - if (!$util.isString(message.name)) - return "name: string expected"; - } - if (message.description != null && message.hasOwnProperty("description")) { - if (!$util.isString(message.description)) - return "description: string expected"; - } - if (message.unit != null && message.hasOwnProperty("unit")) { - if (!$util.isString(message.unit)) - return "unit: string expected"; - } - if (message.gauge != null && message.hasOwnProperty("gauge")) { - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Gauge.verify(message.gauge); - if (error48) - return "gauge." + error48; - } - } - if (message.sum != null && message.hasOwnProperty("sum")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Sum.verify(message.sum); - if (error48) - return "sum." + error48; - } - } - if (message.histogram != null && message.hasOwnProperty("histogram")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Histogram.verify(message.histogram); - if (error48) - return "histogram." + error48; - } - } - if (message.exponentialHistogram != null && message.hasOwnProperty("exponentialHistogram")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.verify(message.exponentialHistogram); - if (error48) - return "exponentialHistogram." + error48; - } - } - if (message.summary != null && message.hasOwnProperty("summary")) { - if (properties.data === 1) - return "data: multiple values"; - properties.data = 1; - { - var error48 = $root.opentelemetry.proto.metrics.v1.Summary.verify(message.summary); - if (error48) - return "summary." + error48; - } - } - if (message.metadata != null && message.hasOwnProperty("metadata")) { - if (!Array.isArray(message.metadata)) - return "metadata: array expected"; - for (var i = 0;i < message.metadata.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.metadata[i]); - if (error48) - return "metadata." + error48; - } - } - return null; - }; - Metric.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Metric) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Metric; - if (object3.name != null) - message.name = String(object3.name); - if (object3.description != null) - message.description = String(object3.description); - if (object3.unit != null) - message.unit = String(object3.unit); - if (object3.gauge != null) { - if (typeof object3.gauge !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.gauge: object expected"); - message.gauge = $root.opentelemetry.proto.metrics.v1.Gauge.fromObject(object3.gauge); - } - if (object3.sum != null) { - if (typeof object3.sum !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.sum: object expected"); - message.sum = $root.opentelemetry.proto.metrics.v1.Sum.fromObject(object3.sum); - } - if (object3.histogram != null) { - if (typeof object3.histogram !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.histogram: object expected"); - message.histogram = $root.opentelemetry.proto.metrics.v1.Histogram.fromObject(object3.histogram); - } - if (object3.exponentialHistogram != null) { - if (typeof object3.exponentialHistogram !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.exponentialHistogram: object expected"); - message.exponentialHistogram = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.fromObject(object3.exponentialHistogram); - } - if (object3.summary != null) { - if (typeof object3.summary !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.summary: object expected"); - message.summary = $root.opentelemetry.proto.metrics.v1.Summary.fromObject(object3.summary); - } - if (object3.metadata) { - if (!Array.isArray(object3.metadata)) - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.metadata: array expected"); - message.metadata = []; - for (var i = 0;i < object3.metadata.length; ++i) { - if (typeof object3.metadata[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Metric.metadata: object expected"); - message.metadata[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.metadata[i]); - } - } - return message; - }; - Metric.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.metadata = []; - if (options.defaults) { - object3.name = ""; - object3.description = ""; - object3.unit = ""; - } - if (message.name != null && message.hasOwnProperty("name")) - object3.name = message.name; - if (message.description != null && message.hasOwnProperty("description")) - object3.description = message.description; - if (message.unit != null && message.hasOwnProperty("unit")) - object3.unit = message.unit; - if (message.gauge != null && message.hasOwnProperty("gauge")) { - object3.gauge = $root.opentelemetry.proto.metrics.v1.Gauge.toObject(message.gauge, options); - if (options.oneofs) - object3.data = "gauge"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - object3.sum = $root.opentelemetry.proto.metrics.v1.Sum.toObject(message.sum, options); - if (options.oneofs) - object3.data = "sum"; - } - if (message.histogram != null && message.hasOwnProperty("histogram")) { - object3.histogram = $root.opentelemetry.proto.metrics.v1.Histogram.toObject(message.histogram, options); - if (options.oneofs) - object3.data = "histogram"; - } - if (message.exponentialHistogram != null && message.hasOwnProperty("exponentialHistogram")) { - object3.exponentialHistogram = $root.opentelemetry.proto.metrics.v1.ExponentialHistogram.toObject(message.exponentialHistogram, options); - if (options.oneofs) - object3.data = "exponentialHistogram"; - } - if (message.summary != null && message.hasOwnProperty("summary")) { - object3.summary = $root.opentelemetry.proto.metrics.v1.Summary.toObject(message.summary, options); - if (options.oneofs) - object3.data = "summary"; - } - if (message.metadata && message.metadata.length) { - object3.metadata = []; - for (var j = 0;j < message.metadata.length; ++j) - object3.metadata[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.metadata[j], options); - } - return object3; - }; - Metric.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Metric.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Metric"; - }; - return Metric; - }(); - v1.Gauge = function() { - function Gauge(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Gauge.prototype.dataPoints = $util.emptyArray; - Gauge.create = function create(properties) { - return new Gauge(properties); - }; - Gauge.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.NumberDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - Gauge.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Gauge.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Gauge; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.NumberDataPoint.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Gauge.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Gauge.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - return null; - }; - Gauge.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Gauge) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Gauge; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Gauge.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Gauge.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.fromObject(object3.dataPoints[i]); - } - } - return message; - }; - Gauge.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.toObject(message.dataPoints[j], options); - } - return object3; - }; - Gauge.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Gauge.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Gauge"; - }; - return Gauge; - }(); - v1.Sum = function() { - function Sum(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Sum.prototype.dataPoints = $util.emptyArray; - Sum.prototype.aggregationTemporality = null; - Sum.prototype.isMonotonic = null; - Sum.create = function create(properties) { - return new Sum(properties); - }; - Sum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.NumberDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - if (message.aggregationTemporality != null && Object.hasOwnProperty.call(message, "aggregationTemporality")) - writer.uint32(16).int32(message.aggregationTemporality); - if (message.isMonotonic != null && Object.hasOwnProperty.call(message, "isMonotonic")) - writer.uint32(24).bool(message.isMonotonic); - return writer; - }; - Sum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Sum.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Sum; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.NumberDataPoint.decode(reader, reader.uint32())); - break; - } - case 2: { - message.aggregationTemporality = reader.int32(); - break; - } - case 3: { - message.isMonotonic = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Sum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Sum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - switch (message.aggregationTemporality) { - default: - return "aggregationTemporality: enum value expected"; - case 0: - case 1: - case 2: - break; - } - if (message.isMonotonic != null && message.hasOwnProperty("isMonotonic")) { - if (typeof message.isMonotonic !== "boolean") - return "isMonotonic: boolean expected"; - } - return null; - }; - Sum.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Sum) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Sum; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Sum.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Sum.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.fromObject(object3.dataPoints[i]); - } - } - switch (object3.aggregationTemporality) { - default: - if (typeof object3.aggregationTemporality === "number") { - message.aggregationTemporality = object3.aggregationTemporality; - break; - } - break; - case "AGGREGATION_TEMPORALITY_UNSPECIFIED": - case 0: - message.aggregationTemporality = 0; - break; - case "AGGREGATION_TEMPORALITY_DELTA": - case 1: - message.aggregationTemporality = 1; - break; - case "AGGREGATION_TEMPORALITY_CUMULATIVE": - case 2: - message.aggregationTemporality = 2; - break; - } - if (object3.isMonotonic != null) - message.isMonotonic = Boolean(object3.isMonotonic); - return message; - }; - Sum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (options.defaults) { - object3.aggregationTemporality = options.enums === String ? "AGGREGATION_TEMPORALITY_UNSPECIFIED" : 0; - object3.isMonotonic = false; - } - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.NumberDataPoint.toObject(message.dataPoints[j], options); - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - object3.aggregationTemporality = options.enums === String ? $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] === undefined ? message.aggregationTemporality : $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] : message.aggregationTemporality; - if (message.isMonotonic != null && message.hasOwnProperty("isMonotonic")) - object3.isMonotonic = message.isMonotonic; - return object3; - }; - Sum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Sum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Sum"; - }; - return Sum; - }(); - v1.Histogram = function() { - function Histogram(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Histogram.prototype.dataPoints = $util.emptyArray; - Histogram.prototype.aggregationTemporality = null; - Histogram.create = function create(properties) { - return new Histogram(properties); - }; - Histogram.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - if (message.aggregationTemporality != null && Object.hasOwnProperty.call(message, "aggregationTemporality")) - writer.uint32(16).int32(message.aggregationTemporality); - return writer; - }; - Histogram.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Histogram.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Histogram; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.HistogramDataPoint.decode(reader, reader.uint32())); - break; - } - case 2: { - message.aggregationTemporality = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Histogram.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Histogram.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - switch (message.aggregationTemporality) { - default: - return "aggregationTemporality: enum value expected"; - case 0: - case 1: - case 2: - break; - } - return null; - }; - Histogram.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Histogram) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Histogram; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Histogram.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Histogram.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.fromObject(object3.dataPoints[i]); - } - } - switch (object3.aggregationTemporality) { - default: - if (typeof object3.aggregationTemporality === "number") { - message.aggregationTemporality = object3.aggregationTemporality; - break; - } - break; - case "AGGREGATION_TEMPORALITY_UNSPECIFIED": - case 0: - message.aggregationTemporality = 0; - break; - case "AGGREGATION_TEMPORALITY_DELTA": - case 1: - message.aggregationTemporality = 1; - break; - case "AGGREGATION_TEMPORALITY_CUMULATIVE": - case 2: - message.aggregationTemporality = 2; - break; - } - return message; - }; - Histogram.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (options.defaults) - object3.aggregationTemporality = options.enums === String ? "AGGREGATION_TEMPORALITY_UNSPECIFIED" : 0; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.HistogramDataPoint.toObject(message.dataPoints[j], options); - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - object3.aggregationTemporality = options.enums === String ? $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] === undefined ? message.aggregationTemporality : $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] : message.aggregationTemporality; - return object3; - }; - Histogram.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Histogram.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Histogram"; - }; - return Histogram; - }(); - v1.ExponentialHistogram = function() { - function ExponentialHistogram(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExponentialHistogram.prototype.dataPoints = $util.emptyArray; - ExponentialHistogram.prototype.aggregationTemporality = null; - ExponentialHistogram.create = function create(properties) { - return new ExponentialHistogram(properties); - }; - ExponentialHistogram.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - if (message.aggregationTemporality != null && Object.hasOwnProperty.call(message, "aggregationTemporality")) - writer.uint32(16).int32(message.aggregationTemporality); - return writer; - }; - ExponentialHistogram.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExponentialHistogram.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogram; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.decode(reader, reader.uint32())); - break; - } - case 2: { - message.aggregationTemporality = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExponentialHistogram.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExponentialHistogram.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - switch (message.aggregationTemporality) { - default: - return "aggregationTemporality: enum value expected"; - case 0: - case 1: - case 2: - break; - } - return null; - }; - ExponentialHistogram.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ExponentialHistogram) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogram; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogram.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogram.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.fromObject(object3.dataPoints[i]); - } - } - switch (object3.aggregationTemporality) { - default: - if (typeof object3.aggregationTemporality === "number") { - message.aggregationTemporality = object3.aggregationTemporality; - break; - } - break; - case "AGGREGATION_TEMPORALITY_UNSPECIFIED": - case 0: - message.aggregationTemporality = 0; - break; - case "AGGREGATION_TEMPORALITY_DELTA": - case 1: - message.aggregationTemporality = 1; - break; - case "AGGREGATION_TEMPORALITY_CUMULATIVE": - case 2: - message.aggregationTemporality = 2; - break; - } - return message; - }; - ExponentialHistogram.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (options.defaults) - object3.aggregationTemporality = options.enums === String ? "AGGREGATION_TEMPORALITY_UNSPECIFIED" : 0; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.toObject(message.dataPoints[j], options); - } - if (message.aggregationTemporality != null && message.hasOwnProperty("aggregationTemporality")) - object3.aggregationTemporality = options.enums === String ? $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] === undefined ? message.aggregationTemporality : $root.opentelemetry.proto.metrics.v1.AggregationTemporality[message.aggregationTemporality] : message.aggregationTemporality; - return object3; - }; - ExponentialHistogram.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExponentialHistogram.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ExponentialHistogram"; - }; - return ExponentialHistogram; - }(); - v1.Summary = function() { - function Summary(properties) { - this.dataPoints = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Summary.prototype.dataPoints = $util.emptyArray; - Summary.create = function create(properties) { - return new Summary(properties); - }; - Summary.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.dataPoints != null && message.dataPoints.length) - for (var i = 0;i < message.dataPoints.length; ++i) - $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.encode(message.dataPoints[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - Summary.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Summary.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Summary; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.dataPoints && message.dataPoints.length)) - message.dataPoints = []; - message.dataPoints.push($root.opentelemetry.proto.metrics.v1.SummaryDataPoint.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Summary.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Summary.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.dataPoints != null && message.hasOwnProperty("dataPoints")) { - if (!Array.isArray(message.dataPoints)) - return "dataPoints: array expected"; - for (var i = 0;i < message.dataPoints.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.verify(message.dataPoints[i]); - if (error48) - return "dataPoints." + error48; - } - } - return null; - }; - Summary.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Summary) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Summary; - if (object3.dataPoints) { - if (!Array.isArray(object3.dataPoints)) - throw TypeError(".opentelemetry.proto.metrics.v1.Summary.dataPoints: array expected"); - message.dataPoints = []; - for (var i = 0;i < object3.dataPoints.length; ++i) { - if (typeof object3.dataPoints[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Summary.dataPoints: object expected"); - message.dataPoints[i] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.fromObject(object3.dataPoints[i]); - } - } - return message; - }; - Summary.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.dataPoints = []; - if (message.dataPoints && message.dataPoints.length) { - object3.dataPoints = []; - for (var j = 0;j < message.dataPoints.length; ++j) - object3.dataPoints[j] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.toObject(message.dataPoints[j], options); - } - return object3; - }; - Summary.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Summary.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Summary"; - }; - return Summary; - }(); - v1.AggregationTemporality = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "AGGREGATION_TEMPORALITY_UNSPECIFIED"] = 0; - values[valuesById[1] = "AGGREGATION_TEMPORALITY_DELTA"] = 1; - values[valuesById[2] = "AGGREGATION_TEMPORALITY_CUMULATIVE"] = 2; - return values; - }(); - v1.DataPointFlags = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "DATA_POINT_FLAGS_DO_NOT_USE"] = 0; - values[valuesById[1] = "DATA_POINT_FLAGS_NO_RECORDED_VALUE_MASK"] = 1; - return values; - }(); - v1.NumberDataPoint = function() { - function NumberDataPoint(properties) { - this.attributes = []; - this.exemplars = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - NumberDataPoint.prototype.attributes = $util.emptyArray; - NumberDataPoint.prototype.startTimeUnixNano = null; - NumberDataPoint.prototype.timeUnixNano = null; - NumberDataPoint.prototype.asDouble = null; - NumberDataPoint.prototype.asInt = null; - NumberDataPoint.prototype.exemplars = $util.emptyArray; - NumberDataPoint.prototype.flags = null; - var $oneOfFields; - Object.defineProperty(NumberDataPoint.prototype, "value", { - get: $util.oneOfGetter($oneOfFields = ["asDouble", "asInt"]), - set: $util.oneOfSetter($oneOfFields) - }); - NumberDataPoint.create = function create(properties) { - return new NumberDataPoint(properties); - }; - NumberDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.asDouble != null && Object.hasOwnProperty.call(message, "asDouble")) - writer.uint32(33).double(message.asDouble); - if (message.exemplars != null && message.exemplars.length) - for (var i = 0;i < message.exemplars.length; ++i) - $root.opentelemetry.proto.metrics.v1.Exemplar.encode(message.exemplars[i], writer.uint32(42).fork()).ldelim(); - if (message.asInt != null && Object.hasOwnProperty.call(message, "asInt")) - writer.uint32(49).sfixed64(message.asInt); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(58).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(64).uint32(message.flags); - return writer; - }; - NumberDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - NumberDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.NumberDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 7: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.asDouble = reader.double(); - break; - } - case 6: { - message.asInt = reader.sfixed64(); - break; - } - case 5: { - if (!(message.exemplars && message.exemplars.length)) - message.exemplars = []; - message.exemplars.push($root.opentelemetry.proto.metrics.v1.Exemplar.decode(reader, reader.uint32())); - break; - } - case 8: { - message.flags = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - NumberDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - NumberDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - properties.value = 1; - if (typeof message.asDouble !== "number") - return "asDouble: number expected"; - } - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!$util.isInteger(message.asInt) && !(message.asInt && $util.isInteger(message.asInt.low) && $util.isInteger(message.asInt.high))) - return "asInt: integer|Long expected"; - } - if (message.exemplars != null && message.hasOwnProperty("exemplars")) { - if (!Array.isArray(message.exemplars)) - return "exemplars: array expected"; - for (var i = 0;i < message.exemplars.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Exemplar.verify(message.exemplars[i]); - if (error48) - return "exemplars." + error48; - } - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - return null; - }; - NumberDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.NumberDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.NumberDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.asDouble != null) - message.asDouble = Number(object3.asDouble); - if (object3.asInt != null) { - if ($util.Long) - (message.asInt = $util.Long.fromValue(object3.asInt)).unsigned = false; - else if (typeof object3.asInt === "string") - message.asInt = parseInt(object3.asInt, 10); - else if (typeof object3.asInt === "number") - message.asInt = object3.asInt; - else if (typeof object3.asInt === "object") - message.asInt = new $util.LongBits(object3.asInt.low >>> 0, object3.asInt.high >>> 0).toNumber(); - } - if (object3.exemplars) { - if (!Array.isArray(object3.exemplars)) - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.exemplars: array expected"); - message.exemplars = []; - for (var i = 0;i < object3.exemplars.length; ++i) { - if (typeof object3.exemplars[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.NumberDataPoint.exemplars: object expected"); - message.exemplars[i] = $root.opentelemetry.proto.metrics.v1.Exemplar.fromObject(object3.exemplars[i]); - } - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - return message; - }; - NumberDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.exemplars = []; - object3.attributes = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - object3.flags = 0; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - object3.asDouble = options.json && !isFinite(message.asDouble) ? String(message.asDouble) : message.asDouble; - if (options.oneofs) - object3.value = "asDouble"; - } - if (message.exemplars && message.exemplars.length) { - object3.exemplars = []; - for (var j = 0;j < message.exemplars.length; ++j) - object3.exemplars[j] = $root.opentelemetry.proto.metrics.v1.Exemplar.toObject(message.exemplars[j], options); - } - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (typeof message.asInt === "number") - object3.asInt = options.longs === String ? String(message.asInt) : message.asInt; - else - object3.asInt = options.longs === String ? $util.Long.prototype.toString.call(message.asInt) : options.longs === Number ? new $util.LongBits(message.asInt.low >>> 0, message.asInt.high >>> 0).toNumber() : message.asInt; - if (options.oneofs) - object3.value = "asInt"; - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - NumberDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - NumberDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.NumberDataPoint"; - }; - return NumberDataPoint; - }(); - v1.HistogramDataPoint = function() { - function HistogramDataPoint(properties) { - this.attributes = []; - this.bucketCounts = []; - this.explicitBounds = []; - this.exemplars = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - HistogramDataPoint.prototype.attributes = $util.emptyArray; - HistogramDataPoint.prototype.startTimeUnixNano = null; - HistogramDataPoint.prototype.timeUnixNano = null; - HistogramDataPoint.prototype.count = null; - HistogramDataPoint.prototype.sum = null; - HistogramDataPoint.prototype.bucketCounts = $util.emptyArray; - HistogramDataPoint.prototype.explicitBounds = $util.emptyArray; - HistogramDataPoint.prototype.exemplars = $util.emptyArray; - HistogramDataPoint.prototype.flags = null; - HistogramDataPoint.prototype.min = null; - HistogramDataPoint.prototype.max = null; - var $oneOfFields; - Object.defineProperty(HistogramDataPoint.prototype, "_sum", { - get: $util.oneOfGetter($oneOfFields = ["sum"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(HistogramDataPoint.prototype, "_min", { - get: $util.oneOfGetter($oneOfFields = ["min"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(HistogramDataPoint.prototype, "_max", { - get: $util.oneOfGetter($oneOfFields = ["max"]), - set: $util.oneOfSetter($oneOfFields) - }); - HistogramDataPoint.create = function create(properties) { - return new HistogramDataPoint(properties); - }; - HistogramDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.count != null && Object.hasOwnProperty.call(message, "count")) - writer.uint32(33).fixed64(message.count); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - writer.uint32(41).double(message.sum); - if (message.bucketCounts != null && message.bucketCounts.length) { - writer.uint32(50).fork(); - for (var i = 0;i < message.bucketCounts.length; ++i) - writer.fixed64(message.bucketCounts[i]); - writer.ldelim(); - } - if (message.explicitBounds != null && message.explicitBounds.length) { - writer.uint32(58).fork(); - for (var i = 0;i < message.explicitBounds.length; ++i) - writer.double(message.explicitBounds[i]); - writer.ldelim(); - } - if (message.exemplars != null && message.exemplars.length) - for (var i = 0;i < message.exemplars.length; ++i) - $root.opentelemetry.proto.metrics.v1.Exemplar.encode(message.exemplars[i], writer.uint32(66).fork()).ldelim(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(74).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(80).uint32(message.flags); - if (message.min != null && Object.hasOwnProperty.call(message, "min")) - writer.uint32(89).double(message.min); - if (message.max != null && Object.hasOwnProperty.call(message, "max")) - writer.uint32(97).double(message.max); - return writer; - }; - HistogramDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - HistogramDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.HistogramDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 9: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.count = reader.fixed64(); - break; - } - case 5: { - message.sum = reader.double(); - break; - } - case 6: { - if (!(message.bucketCounts && message.bucketCounts.length)) - message.bucketCounts = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.bucketCounts.push(reader.fixed64()); - } else - message.bucketCounts.push(reader.fixed64()); - break; - } - case 7: { - if (!(message.explicitBounds && message.explicitBounds.length)) - message.explicitBounds = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.explicitBounds.push(reader.double()); - } else - message.explicitBounds.push(reader.double()); - break; - } - case 8: { - if (!(message.exemplars && message.exemplars.length)) - message.exemplars = []; - message.exemplars.push($root.opentelemetry.proto.metrics.v1.Exemplar.decode(reader, reader.uint32())); - break; - } - case 10: { - message.flags = reader.uint32(); - break; - } - case 11: { - message.min = reader.double(); - break; - } - case 12: { - message.max = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - HistogramDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - HistogramDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.count != null && message.hasOwnProperty("count")) { - if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) - return "count: integer|Long expected"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - properties._sum = 1; - if (typeof message.sum !== "number") - return "sum: number expected"; - } - if (message.bucketCounts != null && message.hasOwnProperty("bucketCounts")) { - if (!Array.isArray(message.bucketCounts)) - return "bucketCounts: array expected"; - for (var i = 0;i < message.bucketCounts.length; ++i) - if (!$util.isInteger(message.bucketCounts[i]) && !(message.bucketCounts[i] && $util.isInteger(message.bucketCounts[i].low) && $util.isInteger(message.bucketCounts[i].high))) - return "bucketCounts: integer|Long[] expected"; - } - if (message.explicitBounds != null && message.hasOwnProperty("explicitBounds")) { - if (!Array.isArray(message.explicitBounds)) - return "explicitBounds: array expected"; - for (var i = 0;i < message.explicitBounds.length; ++i) - if (typeof message.explicitBounds[i] !== "number") - return "explicitBounds: number[] expected"; - } - if (message.exemplars != null && message.hasOwnProperty("exemplars")) { - if (!Array.isArray(message.exemplars)) - return "exemplars: array expected"; - for (var i = 0;i < message.exemplars.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Exemplar.verify(message.exemplars[i]); - if (error48) - return "exemplars." + error48; - } - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.min != null && message.hasOwnProperty("min")) { - properties._min = 1; - if (typeof message.min !== "number") - return "min: number expected"; - } - if (message.max != null && message.hasOwnProperty("max")) { - properties._max = 1; - if (typeof message.max !== "number") - return "max: number expected"; - } - return null; - }; - HistogramDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.HistogramDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.HistogramDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.count != null) { - if ($util.Long) - (message.count = $util.Long.fromValue(object3.count)).unsigned = false; - else if (typeof object3.count === "string") - message.count = parseInt(object3.count, 10); - else if (typeof object3.count === "number") - message.count = object3.count; - else if (typeof object3.count === "object") - message.count = new $util.LongBits(object3.count.low >>> 0, object3.count.high >>> 0).toNumber(); - } - if (object3.sum != null) - message.sum = Number(object3.sum); - if (object3.bucketCounts) { - if (!Array.isArray(object3.bucketCounts)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.bucketCounts: array expected"); - message.bucketCounts = []; - for (var i = 0;i < object3.bucketCounts.length; ++i) - if ($util.Long) - (message.bucketCounts[i] = $util.Long.fromValue(object3.bucketCounts[i])).unsigned = false; - else if (typeof object3.bucketCounts[i] === "string") - message.bucketCounts[i] = parseInt(object3.bucketCounts[i], 10); - else if (typeof object3.bucketCounts[i] === "number") - message.bucketCounts[i] = object3.bucketCounts[i]; - else if (typeof object3.bucketCounts[i] === "object") - message.bucketCounts[i] = new $util.LongBits(object3.bucketCounts[i].low >>> 0, object3.bucketCounts[i].high >>> 0).toNumber(); - } - if (object3.explicitBounds) { - if (!Array.isArray(object3.explicitBounds)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.explicitBounds: array expected"); - message.explicitBounds = []; - for (var i = 0;i < object3.explicitBounds.length; ++i) - message.explicitBounds[i] = Number(object3.explicitBounds[i]); - } - if (object3.exemplars) { - if (!Array.isArray(object3.exemplars)) - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.exemplars: array expected"); - message.exemplars = []; - for (var i = 0;i < object3.exemplars.length; ++i) { - if (typeof object3.exemplars[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.HistogramDataPoint.exemplars: object expected"); - message.exemplars[i] = $root.opentelemetry.proto.metrics.v1.Exemplar.fromObject(object3.exemplars[i]); - } - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.min != null) - message.min = Number(object3.min); - if (object3.max != null) - message.max = Number(object3.max); - return message; - }; - HistogramDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.bucketCounts = []; - object3.explicitBounds = []; - object3.exemplars = []; - object3.attributes = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.count = options.longs === String ? "0" : 0; - object3.flags = 0; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.count != null && message.hasOwnProperty("count")) - if (typeof message.count === "number") - object3.count = options.longs === String ? String(message.count) : message.count; - else - object3.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; - if (message.sum != null && message.hasOwnProperty("sum")) { - object3.sum = options.json && !isFinite(message.sum) ? String(message.sum) : message.sum; - if (options.oneofs) - object3._sum = "sum"; - } - if (message.bucketCounts && message.bucketCounts.length) { - object3.bucketCounts = []; - for (var j = 0;j < message.bucketCounts.length; ++j) - if (typeof message.bucketCounts[j] === "number") - object3.bucketCounts[j] = options.longs === String ? String(message.bucketCounts[j]) : message.bucketCounts[j]; - else - object3.bucketCounts[j] = options.longs === String ? $util.Long.prototype.toString.call(message.bucketCounts[j]) : options.longs === Number ? new $util.LongBits(message.bucketCounts[j].low >>> 0, message.bucketCounts[j].high >>> 0).toNumber() : message.bucketCounts[j]; - } - if (message.explicitBounds && message.explicitBounds.length) { - object3.explicitBounds = []; - for (var j = 0;j < message.explicitBounds.length; ++j) - object3.explicitBounds[j] = options.json && !isFinite(message.explicitBounds[j]) ? String(message.explicitBounds[j]) : message.explicitBounds[j]; - } - if (message.exemplars && message.exemplars.length) { - object3.exemplars = []; - for (var j = 0;j < message.exemplars.length; ++j) - object3.exemplars[j] = $root.opentelemetry.proto.metrics.v1.Exemplar.toObject(message.exemplars[j], options); - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - if (message.min != null && message.hasOwnProperty("min")) { - object3.min = options.json && !isFinite(message.min) ? String(message.min) : message.min; - if (options.oneofs) - object3._min = "min"; - } - if (message.max != null && message.hasOwnProperty("max")) { - object3.max = options.json && !isFinite(message.max) ? String(message.max) : message.max; - if (options.oneofs) - object3._max = "max"; - } - return object3; - }; - HistogramDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - HistogramDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.HistogramDataPoint"; - }; - return HistogramDataPoint; - }(); - v1.ExponentialHistogramDataPoint = function() { - function ExponentialHistogramDataPoint(properties) { - this.attributes = []; - this.exemplars = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ExponentialHistogramDataPoint.prototype.attributes = $util.emptyArray; - ExponentialHistogramDataPoint.prototype.startTimeUnixNano = null; - ExponentialHistogramDataPoint.prototype.timeUnixNano = null; - ExponentialHistogramDataPoint.prototype.count = null; - ExponentialHistogramDataPoint.prototype.sum = null; - ExponentialHistogramDataPoint.prototype.scale = null; - ExponentialHistogramDataPoint.prototype.zeroCount = null; - ExponentialHistogramDataPoint.prototype.positive = null; - ExponentialHistogramDataPoint.prototype.negative = null; - ExponentialHistogramDataPoint.prototype.flags = null; - ExponentialHistogramDataPoint.prototype.exemplars = $util.emptyArray; - ExponentialHistogramDataPoint.prototype.min = null; - ExponentialHistogramDataPoint.prototype.max = null; - ExponentialHistogramDataPoint.prototype.zeroThreshold = null; - var $oneOfFields; - Object.defineProperty(ExponentialHistogramDataPoint.prototype, "_sum", { - get: $util.oneOfGetter($oneOfFields = ["sum"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(ExponentialHistogramDataPoint.prototype, "_min", { - get: $util.oneOfGetter($oneOfFields = ["min"]), - set: $util.oneOfSetter($oneOfFields) - }); - Object.defineProperty(ExponentialHistogramDataPoint.prototype, "_max", { - get: $util.oneOfGetter($oneOfFields = ["max"]), - set: $util.oneOfSetter($oneOfFields) - }); - ExponentialHistogramDataPoint.create = function create(properties) { - return new ExponentialHistogramDataPoint(properties); - }; - ExponentialHistogramDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(10).fork()).ldelim(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.count != null && Object.hasOwnProperty.call(message, "count")) - writer.uint32(33).fixed64(message.count); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - writer.uint32(41).double(message.sum); - if (message.scale != null && Object.hasOwnProperty.call(message, "scale")) - writer.uint32(48).sint32(message.scale); - if (message.zeroCount != null && Object.hasOwnProperty.call(message, "zeroCount")) - writer.uint32(57).fixed64(message.zeroCount); - if (message.positive != null && Object.hasOwnProperty.call(message, "positive")) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.encode(message.positive, writer.uint32(66).fork()).ldelim(); - if (message.negative != null && Object.hasOwnProperty.call(message, "negative")) - $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.encode(message.negative, writer.uint32(74).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(80).uint32(message.flags); - if (message.exemplars != null && message.exemplars.length) - for (var i = 0;i < message.exemplars.length; ++i) - $root.opentelemetry.proto.metrics.v1.Exemplar.encode(message.exemplars[i], writer.uint32(90).fork()).ldelim(); - if (message.min != null && Object.hasOwnProperty.call(message, "min")) - writer.uint32(97).double(message.min); - if (message.max != null && Object.hasOwnProperty.call(message, "max")) - writer.uint32(105).double(message.max); - if (message.zeroThreshold != null && Object.hasOwnProperty.call(message, "zeroThreshold")) - writer.uint32(113).double(message.zeroThreshold); - return writer; - }; - ExponentialHistogramDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ExponentialHistogramDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.count = reader.fixed64(); - break; - } - case 5: { - message.sum = reader.double(); - break; - } - case 6: { - message.scale = reader.sint32(); - break; - } - case 7: { - message.zeroCount = reader.fixed64(); - break; - } - case 8: { - message.positive = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.decode(reader, reader.uint32()); - break; - } - case 9: { - message.negative = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.decode(reader, reader.uint32()); - break; - } - case 10: { - message.flags = reader.uint32(); - break; - } - case 11: { - if (!(message.exemplars && message.exemplars.length)) - message.exemplars = []; - message.exemplars.push($root.opentelemetry.proto.metrics.v1.Exemplar.decode(reader, reader.uint32())); - break; - } - case 12: { - message.min = reader.double(); - break; - } - case 13: { - message.max = reader.double(); - break; - } - case 14: { - message.zeroThreshold = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ExponentialHistogramDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ExponentialHistogramDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.count != null && message.hasOwnProperty("count")) { - if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) - return "count: integer|Long expected"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - properties._sum = 1; - if (typeof message.sum !== "number") - return "sum: number expected"; - } - if (message.scale != null && message.hasOwnProperty("scale")) { - if (!$util.isInteger(message.scale)) - return "scale: integer expected"; - } - if (message.zeroCount != null && message.hasOwnProperty("zeroCount")) { - if (!$util.isInteger(message.zeroCount) && !(message.zeroCount && $util.isInteger(message.zeroCount.low) && $util.isInteger(message.zeroCount.high))) - return "zeroCount: integer|Long expected"; - } - if (message.positive != null && message.hasOwnProperty("positive")) { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.verify(message.positive); - if (error48) - return "positive." + error48; - } - if (message.negative != null && message.hasOwnProperty("negative")) { - var error48 = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.verify(message.negative); - if (error48) - return "negative." + error48; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.exemplars != null && message.hasOwnProperty("exemplars")) { - if (!Array.isArray(message.exemplars)) - return "exemplars: array expected"; - for (var i = 0;i < message.exemplars.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.Exemplar.verify(message.exemplars[i]); - if (error48) - return "exemplars." + error48; - } - } - if (message.min != null && message.hasOwnProperty("min")) { - properties._min = 1; - if (typeof message.min !== "number") - return "min: number expected"; - } - if (message.max != null && message.hasOwnProperty("max")) { - properties._max = 1; - if (typeof message.max !== "number") - return "max: number expected"; - } - if (message.zeroThreshold != null && message.hasOwnProperty("zeroThreshold")) { - if (typeof message.zeroThreshold !== "number") - return "zeroThreshold: number expected"; - } - return null; - }; - ExponentialHistogramDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.count != null) { - if ($util.Long) - (message.count = $util.Long.fromValue(object3.count)).unsigned = false; - else if (typeof object3.count === "string") - message.count = parseInt(object3.count, 10); - else if (typeof object3.count === "number") - message.count = object3.count; - else if (typeof object3.count === "object") - message.count = new $util.LongBits(object3.count.low >>> 0, object3.count.high >>> 0).toNumber(); - } - if (object3.sum != null) - message.sum = Number(object3.sum); - if (object3.scale != null) - message.scale = object3.scale | 0; - if (object3.zeroCount != null) { - if ($util.Long) - (message.zeroCount = $util.Long.fromValue(object3.zeroCount)).unsigned = false; - else if (typeof object3.zeroCount === "string") - message.zeroCount = parseInt(object3.zeroCount, 10); - else if (typeof object3.zeroCount === "number") - message.zeroCount = object3.zeroCount; - else if (typeof object3.zeroCount === "object") - message.zeroCount = new $util.LongBits(object3.zeroCount.low >>> 0, object3.zeroCount.high >>> 0).toNumber(); - } - if (object3.positive != null) { - if (typeof object3.positive !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.positive: object expected"); - message.positive = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.fromObject(object3.positive); - } - if (object3.negative != null) { - if (typeof object3.negative !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.negative: object expected"); - message.negative = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.fromObject(object3.negative); - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.exemplars) { - if (!Array.isArray(object3.exemplars)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.exemplars: array expected"); - message.exemplars = []; - for (var i = 0;i < object3.exemplars.length; ++i) { - if (typeof object3.exemplars[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.exemplars: object expected"); - message.exemplars[i] = $root.opentelemetry.proto.metrics.v1.Exemplar.fromObject(object3.exemplars[i]); - } - } - if (object3.min != null) - message.min = Number(object3.min); - if (object3.max != null) - message.max = Number(object3.max); - if (object3.zeroThreshold != null) - message.zeroThreshold = Number(object3.zeroThreshold); - return message; - }; - ExponentialHistogramDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.attributes = []; - object3.exemplars = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.count = options.longs === String ? "0" : 0; - object3.scale = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.zeroCount = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.zeroCount = options.longs === String ? "0" : 0; - object3.positive = null; - object3.negative = null; - object3.flags = 0; - object3.zeroThreshold = 0; - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.count != null && message.hasOwnProperty("count")) - if (typeof message.count === "number") - object3.count = options.longs === String ? String(message.count) : message.count; - else - object3.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; - if (message.sum != null && message.hasOwnProperty("sum")) { - object3.sum = options.json && !isFinite(message.sum) ? String(message.sum) : message.sum; - if (options.oneofs) - object3._sum = "sum"; - } - if (message.scale != null && message.hasOwnProperty("scale")) - object3.scale = message.scale; - if (message.zeroCount != null && message.hasOwnProperty("zeroCount")) - if (typeof message.zeroCount === "number") - object3.zeroCount = options.longs === String ? String(message.zeroCount) : message.zeroCount; - else - object3.zeroCount = options.longs === String ? $util.Long.prototype.toString.call(message.zeroCount) : options.longs === Number ? new $util.LongBits(message.zeroCount.low >>> 0, message.zeroCount.high >>> 0).toNumber() : message.zeroCount; - if (message.positive != null && message.hasOwnProperty("positive")) - object3.positive = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.toObject(message.positive, options); - if (message.negative != null && message.hasOwnProperty("negative")) - object3.negative = $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.toObject(message.negative, options); - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - if (message.exemplars && message.exemplars.length) { - object3.exemplars = []; - for (var j = 0;j < message.exemplars.length; ++j) - object3.exemplars[j] = $root.opentelemetry.proto.metrics.v1.Exemplar.toObject(message.exemplars[j], options); - } - if (message.min != null && message.hasOwnProperty("min")) { - object3.min = options.json && !isFinite(message.min) ? String(message.min) : message.min; - if (options.oneofs) - object3._min = "min"; - } - if (message.max != null && message.hasOwnProperty("max")) { - object3.max = options.json && !isFinite(message.max) ? String(message.max) : message.max; - if (options.oneofs) - object3._max = "max"; - } - if (message.zeroThreshold != null && message.hasOwnProperty("zeroThreshold")) - object3.zeroThreshold = options.json && !isFinite(message.zeroThreshold) ? String(message.zeroThreshold) : message.zeroThreshold; - return object3; - }; - ExponentialHistogramDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ExponentialHistogramDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint"; - }; - ExponentialHistogramDataPoint.Buckets = function() { - function Buckets2(properties) { - this.bucketCounts = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Buckets2.prototype.offset = null; - Buckets2.prototype.bucketCounts = $util.emptyArray; - Buckets2.create = function create(properties) { - return new Buckets2(properties); - }; - Buckets2.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.offset != null && Object.hasOwnProperty.call(message, "offset")) - writer.uint32(8).sint32(message.offset); - if (message.bucketCounts != null && message.bucketCounts.length) { - writer.uint32(18).fork(); - for (var i = 0;i < message.bucketCounts.length; ++i) - writer.uint64(message.bucketCounts[i]); - writer.ldelim(); - } - return writer; - }; - Buckets2.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Buckets2.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.offset = reader.sint32(); - break; - } - case 2: { - if (!(message.bucketCounts && message.bucketCounts.length)) - message.bucketCounts = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.bucketCounts.push(reader.uint64()); - } else - message.bucketCounts.push(reader.uint64()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Buckets2.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Buckets2.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.offset != null && message.hasOwnProperty("offset")) { - if (!$util.isInteger(message.offset)) - return "offset: integer expected"; - } - if (message.bucketCounts != null && message.hasOwnProperty("bucketCounts")) { - if (!Array.isArray(message.bucketCounts)) - return "bucketCounts: array expected"; - for (var i = 0;i < message.bucketCounts.length; ++i) - if (!$util.isInteger(message.bucketCounts[i]) && !(message.bucketCounts[i] && $util.isInteger(message.bucketCounts[i].low) && $util.isInteger(message.bucketCounts[i].high))) - return "bucketCounts: integer|Long[] expected"; - } - return null; - }; - Buckets2.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets; - if (object3.offset != null) - message.offset = object3.offset | 0; - if (object3.bucketCounts) { - if (!Array.isArray(object3.bucketCounts)) - throw TypeError(".opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets.bucketCounts: array expected"); - message.bucketCounts = []; - for (var i = 0;i < object3.bucketCounts.length; ++i) - if ($util.Long) - (message.bucketCounts[i] = $util.Long.fromValue(object3.bucketCounts[i])).unsigned = true; - else if (typeof object3.bucketCounts[i] === "string") - message.bucketCounts[i] = parseInt(object3.bucketCounts[i], 10); - else if (typeof object3.bucketCounts[i] === "number") - message.bucketCounts[i] = object3.bucketCounts[i]; - else if (typeof object3.bucketCounts[i] === "object") - message.bucketCounts[i] = new $util.LongBits(object3.bucketCounts[i].low >>> 0, object3.bucketCounts[i].high >>> 0).toNumber(true); - } - return message; - }; - Buckets2.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.bucketCounts = []; - if (options.defaults) - object3.offset = 0; - if (message.offset != null && message.hasOwnProperty("offset")) - object3.offset = message.offset; - if (message.bucketCounts && message.bucketCounts.length) { - object3.bucketCounts = []; - for (var j = 0;j < message.bucketCounts.length; ++j) - if (typeof message.bucketCounts[j] === "number") - object3.bucketCounts[j] = options.longs === String ? String(message.bucketCounts[j]) : message.bucketCounts[j]; - else - object3.bucketCounts[j] = options.longs === String ? $util.Long.prototype.toString.call(message.bucketCounts[j]) : options.longs === Number ? new $util.LongBits(message.bucketCounts[j].low >>> 0, message.bucketCounts[j].high >>> 0).toNumber(true) : message.bucketCounts[j]; - } - return object3; - }; - Buckets2.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Buckets2.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets"; - }; - return Buckets2; - }(); - return ExponentialHistogramDataPoint; - }(); - v1.SummaryDataPoint = function() { - function SummaryDataPoint(properties) { - this.attributes = []; - this.quantileValues = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SummaryDataPoint.prototype.attributes = $util.emptyArray; - SummaryDataPoint.prototype.startTimeUnixNano = null; - SummaryDataPoint.prototype.timeUnixNano = null; - SummaryDataPoint.prototype.count = null; - SummaryDataPoint.prototype.sum = null; - SummaryDataPoint.prototype.quantileValues = $util.emptyArray; - SummaryDataPoint.prototype.flags = null; - SummaryDataPoint.create = function create(properties) { - return new SummaryDataPoint(properties); - }; - SummaryDataPoint.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.startTimeUnixNano != null && Object.hasOwnProperty.call(message, "startTimeUnixNano")) - writer.uint32(17).fixed64(message.startTimeUnixNano); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(25).fixed64(message.timeUnixNano); - if (message.count != null && Object.hasOwnProperty.call(message, "count")) - writer.uint32(33).fixed64(message.count); - if (message.sum != null && Object.hasOwnProperty.call(message, "sum")) - writer.uint32(41).double(message.sum); - if (message.quantileValues != null && message.quantileValues.length) - for (var i = 0;i < message.quantileValues.length; ++i) - $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.encode(message.quantileValues[i], writer.uint32(50).fork()).ldelim(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(58).fork()).ldelim(); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(64).uint32(message.flags); - return writer; - }; - SummaryDataPoint.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - SummaryDataPoint.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 7: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.startTimeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 4: { - message.count = reader.fixed64(); - break; - } - case 5: { - message.sum = reader.double(); - break; - } - case 6: { - if (!(message.quantileValues && message.quantileValues.length)) - message.quantileValues = []; - message.quantileValues.push($root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.decode(reader, reader.uint32())); - break; - } - case 8: { - message.flags = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SummaryDataPoint.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - SummaryDataPoint.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) { - if (!$util.isInteger(message.startTimeUnixNano) && !(message.startTimeUnixNano && $util.isInteger(message.startTimeUnixNano.low) && $util.isInteger(message.startTimeUnixNano.high))) - return "startTimeUnixNano: integer|Long expected"; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.count != null && message.hasOwnProperty("count")) { - if (!$util.isInteger(message.count) && !(message.count && $util.isInteger(message.count.low) && $util.isInteger(message.count.high))) - return "count: integer|Long expected"; - } - if (message.sum != null && message.hasOwnProperty("sum")) { - if (typeof message.sum !== "number") - return "sum: number expected"; - } - if (message.quantileValues != null && message.hasOwnProperty("quantileValues")) { - if (!Array.isArray(message.quantileValues)) - return "quantileValues: array expected"; - for (var i = 0;i < message.quantileValues.length; ++i) { - var error48 = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.verify(message.quantileValues[i]); - if (error48) - return "quantileValues." + error48; - } - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - return null; - }; - SummaryDataPoint.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.SummaryDataPoint) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint; - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.startTimeUnixNano != null) { - if ($util.Long) - (message.startTimeUnixNano = $util.Long.fromValue(object3.startTimeUnixNano)).unsigned = false; - else if (typeof object3.startTimeUnixNano === "string") - message.startTimeUnixNano = parseInt(object3.startTimeUnixNano, 10); - else if (typeof object3.startTimeUnixNano === "number") - message.startTimeUnixNano = object3.startTimeUnixNano; - else if (typeof object3.startTimeUnixNano === "object") - message.startTimeUnixNano = new $util.LongBits(object3.startTimeUnixNano.low >>> 0, object3.startTimeUnixNano.high >>> 0).toNumber(); - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.count != null) { - if ($util.Long) - (message.count = $util.Long.fromValue(object3.count)).unsigned = false; - else if (typeof object3.count === "string") - message.count = parseInt(object3.count, 10); - else if (typeof object3.count === "number") - message.count = object3.count; - else if (typeof object3.count === "object") - message.count = new $util.LongBits(object3.count.low >>> 0, object3.count.high >>> 0).toNumber(); - } - if (object3.sum != null) - message.sum = Number(object3.sum); - if (object3.quantileValues) { - if (!Array.isArray(object3.quantileValues)) - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.quantileValues: array expected"); - message.quantileValues = []; - for (var i = 0;i < object3.quantileValues.length; ++i) { - if (typeof object3.quantileValues[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.SummaryDataPoint.quantileValues: object expected"); - message.quantileValues[i] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.fromObject(object3.quantileValues[i]); - } - } - if (object3.flags != null) - message.flags = object3.flags >>> 0; - return message; - }; - SummaryDataPoint.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) { - object3.quantileValues = []; - object3.attributes = []; - } - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.startTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.startTimeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.count = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.count = options.longs === String ? "0" : 0; - object3.sum = 0; - object3.flags = 0; - } - if (message.startTimeUnixNano != null && message.hasOwnProperty("startTimeUnixNano")) - if (typeof message.startTimeUnixNano === "number") - object3.startTimeUnixNano = options.longs === String ? String(message.startTimeUnixNano) : message.startTimeUnixNano; - else - object3.startTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.startTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.startTimeUnixNano.low >>> 0, message.startTimeUnixNano.high >>> 0).toNumber() : message.startTimeUnixNano; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.count != null && message.hasOwnProperty("count")) - if (typeof message.count === "number") - object3.count = options.longs === String ? String(message.count) : message.count; - else - object3.count = options.longs === String ? $util.Long.prototype.toString.call(message.count) : options.longs === Number ? new $util.LongBits(message.count.low >>> 0, message.count.high >>> 0).toNumber() : message.count; - if (message.sum != null && message.hasOwnProperty("sum")) - object3.sum = options.json && !isFinite(message.sum) ? String(message.sum) : message.sum; - if (message.quantileValues && message.quantileValues.length) { - object3.quantileValues = []; - for (var j = 0;j < message.quantileValues.length; ++j) - object3.quantileValues[j] = $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile.toObject(message.quantileValues[j], options); - } - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - return object3; - }; - SummaryDataPoint.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SummaryDataPoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.SummaryDataPoint"; - }; - SummaryDataPoint.ValueAtQuantile = function() { - function ValueAtQuantile(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ValueAtQuantile.prototype.quantile = null; - ValueAtQuantile.prototype.value = null; - ValueAtQuantile.create = function create(properties) { - return new ValueAtQuantile(properties); - }; - ValueAtQuantile.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.quantile != null && Object.hasOwnProperty.call(message, "quantile")) - writer.uint32(9).double(message.quantile); - if (message.value != null && Object.hasOwnProperty.call(message, "value")) - writer.uint32(17).double(message.value); - return writer; - }; - ValueAtQuantile.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ValueAtQuantile.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.quantile = reader.double(); - break; - } - case 2: { - message.value = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ValueAtQuantile.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ValueAtQuantile.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.quantile != null && message.hasOwnProperty("quantile")) { - if (typeof message.quantile !== "number") - return "quantile: number expected"; - } - if (message.value != null && message.hasOwnProperty("value")) { - if (typeof message.value !== "number") - return "value: number expected"; - } - return null; - }; - ValueAtQuantile.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile; - if (object3.quantile != null) - message.quantile = Number(object3.quantile); - if (object3.value != null) - message.value = Number(object3.value); - return message; - }; - ValueAtQuantile.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.defaults) { - object3.quantile = 0; - object3.value = 0; - } - if (message.quantile != null && message.hasOwnProperty("quantile")) - object3.quantile = options.json && !isFinite(message.quantile) ? String(message.quantile) : message.quantile; - if (message.value != null && message.hasOwnProperty("value")) - object3.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; - return object3; - }; - ValueAtQuantile.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ValueAtQuantile.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile"; - }; - return ValueAtQuantile; - }(); - return SummaryDataPoint; - }(); - v1.Exemplar = function() { - function Exemplar(properties) { - this.filteredAttributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Exemplar.prototype.filteredAttributes = $util.emptyArray; - Exemplar.prototype.timeUnixNano = null; - Exemplar.prototype.asDouble = null; - Exemplar.prototype.asInt = null; - Exemplar.prototype.spanId = null; - Exemplar.prototype.traceId = null; - var $oneOfFields; - Object.defineProperty(Exemplar.prototype, "value", { - get: $util.oneOfGetter($oneOfFields = ["asDouble", "asInt"]), - set: $util.oneOfSetter($oneOfFields) - }); - Exemplar.create = function create(properties) { - return new Exemplar(properties); - }; - Exemplar.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(17).fixed64(message.timeUnixNano); - if (message.asDouble != null && Object.hasOwnProperty.call(message, "asDouble")) - writer.uint32(25).double(message.asDouble); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(34).bytes(message.spanId); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(42).bytes(message.traceId); - if (message.asInt != null && Object.hasOwnProperty.call(message, "asInt")) - writer.uint32(49).sfixed64(message.asInt); - if (message.filteredAttributes != null && message.filteredAttributes.length) - for (var i = 0;i < message.filteredAttributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.filteredAttributes[i], writer.uint32(58).fork()).ldelim(); - return writer; - }; - Exemplar.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - Exemplar.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.metrics.v1.Exemplar; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 7: { - if (!(message.filteredAttributes && message.filteredAttributes.length)) - message.filteredAttributes = []; - message.filteredAttributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 2: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 3: { - message.asDouble = reader.double(); - break; - } - case 6: { - message.asInt = reader.sfixed64(); - break; - } - case 4: { - message.spanId = reader.bytes(); - break; - } - case 5: { - message.traceId = reader.bytes(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - Exemplar.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - Exemplar.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - var properties = {}; - if (message.filteredAttributes != null && message.hasOwnProperty("filteredAttributes")) { - if (!Array.isArray(message.filteredAttributes)) - return "filteredAttributes: array expected"; - for (var i = 0;i < message.filteredAttributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.filteredAttributes[i]); - if (error48) - return "filteredAttributes." + error48; - } - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - properties.value = 1; - if (typeof message.asDouble !== "number") - return "asDouble: number expected"; - } - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (properties.value === 1) - return "value: multiple values"; - properties.value = 1; - if (!$util.isInteger(message.asInt) && !(message.asInt && $util.isInteger(message.asInt.low) && $util.isInteger(message.asInt.high))) - return "asInt: integer|Long expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - return null; - }; - Exemplar.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.metrics.v1.Exemplar) - return object3; - var message = new $root.opentelemetry.proto.metrics.v1.Exemplar; - if (object3.filteredAttributes) { - if (!Array.isArray(object3.filteredAttributes)) - throw TypeError(".opentelemetry.proto.metrics.v1.Exemplar.filteredAttributes: array expected"); - message.filteredAttributes = []; - for (var i = 0;i < object3.filteredAttributes.length; ++i) { - if (typeof object3.filteredAttributes[i] !== "object") - throw TypeError(".opentelemetry.proto.metrics.v1.Exemplar.filteredAttributes: object expected"); - message.filteredAttributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.filteredAttributes[i]); - } - } - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.asDouble != null) - message.asDouble = Number(object3.asDouble); - if (object3.asInt != null) { - if ($util.Long) - (message.asInt = $util.Long.fromValue(object3.asInt)).unsigned = false; - else if (typeof object3.asInt === "string") - message.asInt = parseInt(object3.asInt, 10); - else if (typeof object3.asInt === "number") - message.asInt = object3.asInt; - else if (typeof object3.asInt === "object") - message.asInt = new $util.LongBits(object3.asInt.low >>> 0, object3.asInt.high >>> 0).toNumber(); - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - return message; - }; - Exemplar.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.filteredAttributes = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.asDouble != null && message.hasOwnProperty("asDouble")) { - object3.asDouble = options.json && !isFinite(message.asDouble) ? String(message.asDouble) : message.asDouble; - if (options.oneofs) - object3.value = "asDouble"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.asInt != null && message.hasOwnProperty("asInt")) { - if (typeof message.asInt === "number") - object3.asInt = options.longs === String ? String(message.asInt) : message.asInt; - else - object3.asInt = options.longs === String ? $util.Long.prototype.toString.call(message.asInt) : options.longs === Number ? new $util.LongBits(message.asInt.low >>> 0, message.asInt.high >>> 0).toNumber() : message.asInt; - if (options.oneofs) - object3.value = "asInt"; - } - if (message.filteredAttributes && message.filteredAttributes.length) { - object3.filteredAttributes = []; - for (var j = 0;j < message.filteredAttributes.length; ++j) - object3.filteredAttributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.filteredAttributes[j], options); - } - return object3; - }; - Exemplar.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Exemplar.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.metrics.v1.Exemplar"; - }; - return Exemplar; - }(); - return v1; - }(); - return metrics; - }(); - proto.logs = function() { - var logs = {}; - logs.v1 = function() { - var v1 = {}; - v1.LogsData = function() { - function LogsData(properties) { - this.resourceLogs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LogsData.prototype.resourceLogs = $util.emptyArray; - LogsData.create = function create(properties) { - return new LogsData(properties); - }; - LogsData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resourceLogs != null && message.resourceLogs.length) - for (var i = 0;i < message.resourceLogs.length; ++i) - $root.opentelemetry.proto.logs.v1.ResourceLogs.encode(message.resourceLogs[i], writer.uint32(10).fork()).ldelim(); - return writer; - }; - LogsData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - LogsData.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.LogsData; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - if (!(message.resourceLogs && message.resourceLogs.length)) - message.resourceLogs = []; - message.resourceLogs.push($root.opentelemetry.proto.logs.v1.ResourceLogs.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - LogsData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - LogsData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resourceLogs != null && message.hasOwnProperty("resourceLogs")) { - if (!Array.isArray(message.resourceLogs)) - return "resourceLogs: array expected"; - for (var i = 0;i < message.resourceLogs.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.ResourceLogs.verify(message.resourceLogs[i]); - if (error48) - return "resourceLogs." + error48; - } - } - return null; - }; - LogsData.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.LogsData) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.LogsData; - if (object3.resourceLogs) { - if (!Array.isArray(object3.resourceLogs)) - throw TypeError(".opentelemetry.proto.logs.v1.LogsData.resourceLogs: array expected"); - message.resourceLogs = []; - for (var i = 0;i < object3.resourceLogs.length; ++i) { - if (typeof object3.resourceLogs[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.LogsData.resourceLogs: object expected"); - message.resourceLogs[i] = $root.opentelemetry.proto.logs.v1.ResourceLogs.fromObject(object3.resourceLogs[i]); - } - } - return message; - }; - LogsData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.resourceLogs = []; - if (message.resourceLogs && message.resourceLogs.length) { - object3.resourceLogs = []; - for (var j = 0;j < message.resourceLogs.length; ++j) - object3.resourceLogs[j] = $root.opentelemetry.proto.logs.v1.ResourceLogs.toObject(message.resourceLogs[j], options); - } - return object3; - }; - LogsData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LogsData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.LogsData"; - }; - return LogsData; - }(); - v1.ResourceLogs = function() { - function ResourceLogs(properties) { - this.scopeLogs = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ResourceLogs.prototype.resource = null; - ResourceLogs.prototype.scopeLogs = $util.emptyArray; - ResourceLogs.prototype.schemaUrl = null; - ResourceLogs.create = function create(properties) { - return new ResourceLogs(properties); - }; - ResourceLogs.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - $root.opentelemetry.proto.resource.v1.Resource.encode(message.resource, writer.uint32(10).fork()).ldelim(); - if (message.scopeLogs != null && message.scopeLogs.length) - for (var i = 0;i < message.scopeLogs.length; ++i) - $root.opentelemetry.proto.logs.v1.ScopeLogs.encode(message.scopeLogs[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ResourceLogs.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ResourceLogs.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.ResourceLogs; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.resource = $root.opentelemetry.proto.resource.v1.Resource.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.scopeLogs && message.scopeLogs.length)) - message.scopeLogs = []; - message.scopeLogs.push($root.opentelemetry.proto.logs.v1.ScopeLogs.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ResourceLogs.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ResourceLogs.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.resource != null && message.hasOwnProperty("resource")) { - var error48 = $root.opentelemetry.proto.resource.v1.Resource.verify(message.resource); - if (error48) - return "resource." + error48; - } - if (message.scopeLogs != null && message.hasOwnProperty("scopeLogs")) { - if (!Array.isArray(message.scopeLogs)) - return "scopeLogs: array expected"; - for (var i = 0;i < message.scopeLogs.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.ScopeLogs.verify(message.scopeLogs[i]); - if (error48) - return "scopeLogs." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ResourceLogs.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.ResourceLogs) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.ResourceLogs; - if (object3.resource != null) { - if (typeof object3.resource !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ResourceLogs.resource: object expected"); - message.resource = $root.opentelemetry.proto.resource.v1.Resource.fromObject(object3.resource); - } - if (object3.scopeLogs) { - if (!Array.isArray(object3.scopeLogs)) - throw TypeError(".opentelemetry.proto.logs.v1.ResourceLogs.scopeLogs: array expected"); - message.scopeLogs = []; - for (var i = 0;i < object3.scopeLogs.length; ++i) { - if (typeof object3.scopeLogs[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ResourceLogs.scopeLogs: object expected"); - message.scopeLogs[i] = $root.opentelemetry.proto.logs.v1.ScopeLogs.fromObject(object3.scopeLogs[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ResourceLogs.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.scopeLogs = []; - if (options.defaults) { - object3.resource = null; - object3.schemaUrl = ""; - } - if (message.resource != null && message.hasOwnProperty("resource")) - object3.resource = $root.opentelemetry.proto.resource.v1.Resource.toObject(message.resource, options); - if (message.scopeLogs && message.scopeLogs.length) { - object3.scopeLogs = []; - for (var j = 0;j < message.scopeLogs.length; ++j) - object3.scopeLogs[j] = $root.opentelemetry.proto.logs.v1.ScopeLogs.toObject(message.scopeLogs[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ResourceLogs.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ResourceLogs.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.ResourceLogs"; - }; - return ResourceLogs; - }(); - v1.ScopeLogs = function() { - function ScopeLogs(properties) { - this.logRecords = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ScopeLogs.prototype.scope = null; - ScopeLogs.prototype.logRecords = $util.emptyArray; - ScopeLogs.prototype.schemaUrl = null; - ScopeLogs.create = function create(properties) { - return new ScopeLogs(properties); - }; - ScopeLogs.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.scope != null && Object.hasOwnProperty.call(message, "scope")) - $root.opentelemetry.proto.common.v1.InstrumentationScope.encode(message.scope, writer.uint32(10).fork()).ldelim(); - if (message.logRecords != null && message.logRecords.length) - for (var i = 0;i < message.logRecords.length; ++i) - $root.opentelemetry.proto.logs.v1.LogRecord.encode(message.logRecords[i], writer.uint32(18).fork()).ldelim(); - if (message.schemaUrl != null && Object.hasOwnProperty.call(message, "schemaUrl")) - writer.uint32(26).string(message.schemaUrl); - return writer; - }; - ScopeLogs.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - ScopeLogs.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.ScopeLogs; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.decode(reader, reader.uint32()); - break; - } - case 2: { - if (!(message.logRecords && message.logRecords.length)) - message.logRecords = []; - message.logRecords.push($root.opentelemetry.proto.logs.v1.LogRecord.decode(reader, reader.uint32())); - break; - } - case 3: { - message.schemaUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ScopeLogs.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - ScopeLogs.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.scope != null && message.hasOwnProperty("scope")) { - var error48 = $root.opentelemetry.proto.common.v1.InstrumentationScope.verify(message.scope); - if (error48) - return "scope." + error48; - } - if (message.logRecords != null && message.hasOwnProperty("logRecords")) { - if (!Array.isArray(message.logRecords)) - return "logRecords: array expected"; - for (var i = 0;i < message.logRecords.length; ++i) { - var error48 = $root.opentelemetry.proto.logs.v1.LogRecord.verify(message.logRecords[i]); - if (error48) - return "logRecords." + error48; - } - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) { - if (!$util.isString(message.schemaUrl)) - return "schemaUrl: string expected"; - } - return null; - }; - ScopeLogs.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.ScopeLogs) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.ScopeLogs; - if (object3.scope != null) { - if (typeof object3.scope !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ScopeLogs.scope: object expected"); - message.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.fromObject(object3.scope); - } - if (object3.logRecords) { - if (!Array.isArray(object3.logRecords)) - throw TypeError(".opentelemetry.proto.logs.v1.ScopeLogs.logRecords: array expected"); - message.logRecords = []; - for (var i = 0;i < object3.logRecords.length; ++i) { - if (typeof object3.logRecords[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.ScopeLogs.logRecords: object expected"); - message.logRecords[i] = $root.opentelemetry.proto.logs.v1.LogRecord.fromObject(object3.logRecords[i]); - } - } - if (object3.schemaUrl != null) - message.schemaUrl = String(object3.schemaUrl); - return message; - }; - ScopeLogs.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.logRecords = []; - if (options.defaults) { - object3.scope = null; - object3.schemaUrl = ""; - } - if (message.scope != null && message.hasOwnProperty("scope")) - object3.scope = $root.opentelemetry.proto.common.v1.InstrumentationScope.toObject(message.scope, options); - if (message.logRecords && message.logRecords.length) { - object3.logRecords = []; - for (var j = 0;j < message.logRecords.length; ++j) - object3.logRecords[j] = $root.opentelemetry.proto.logs.v1.LogRecord.toObject(message.logRecords[j], options); - } - if (message.schemaUrl != null && message.hasOwnProperty("schemaUrl")) - object3.schemaUrl = message.schemaUrl; - return object3; - }; - ScopeLogs.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ScopeLogs.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.ScopeLogs"; - }; - return ScopeLogs; - }(); - v1.SeverityNumber = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "SEVERITY_NUMBER_UNSPECIFIED"] = 0; - values[valuesById[1] = "SEVERITY_NUMBER_TRACE"] = 1; - values[valuesById[2] = "SEVERITY_NUMBER_TRACE2"] = 2; - values[valuesById[3] = "SEVERITY_NUMBER_TRACE3"] = 3; - values[valuesById[4] = "SEVERITY_NUMBER_TRACE4"] = 4; - values[valuesById[5] = "SEVERITY_NUMBER_DEBUG"] = 5; - values[valuesById[6] = "SEVERITY_NUMBER_DEBUG2"] = 6; - values[valuesById[7] = "SEVERITY_NUMBER_DEBUG3"] = 7; - values[valuesById[8] = "SEVERITY_NUMBER_DEBUG4"] = 8; - values[valuesById[9] = "SEVERITY_NUMBER_INFO"] = 9; - values[valuesById[10] = "SEVERITY_NUMBER_INFO2"] = 10; - values[valuesById[11] = "SEVERITY_NUMBER_INFO3"] = 11; - values[valuesById[12] = "SEVERITY_NUMBER_INFO4"] = 12; - values[valuesById[13] = "SEVERITY_NUMBER_WARN"] = 13; - values[valuesById[14] = "SEVERITY_NUMBER_WARN2"] = 14; - values[valuesById[15] = "SEVERITY_NUMBER_WARN3"] = 15; - values[valuesById[16] = "SEVERITY_NUMBER_WARN4"] = 16; - values[valuesById[17] = "SEVERITY_NUMBER_ERROR"] = 17; - values[valuesById[18] = "SEVERITY_NUMBER_ERROR2"] = 18; - values[valuesById[19] = "SEVERITY_NUMBER_ERROR3"] = 19; - values[valuesById[20] = "SEVERITY_NUMBER_ERROR4"] = 20; - values[valuesById[21] = "SEVERITY_NUMBER_FATAL"] = 21; - values[valuesById[22] = "SEVERITY_NUMBER_FATAL2"] = 22; - values[valuesById[23] = "SEVERITY_NUMBER_FATAL3"] = 23; - values[valuesById[24] = "SEVERITY_NUMBER_FATAL4"] = 24; - return values; - }(); - v1.LogRecordFlags = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "LOG_RECORD_FLAGS_DO_NOT_USE"] = 0; - values[valuesById[255] = "LOG_RECORD_FLAGS_TRACE_FLAGS_MASK"] = 255; - return values; - }(); - v1.LogRecord = function() { - function LogRecord(properties) { - this.attributes = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0;i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LogRecord.prototype.timeUnixNano = null; - LogRecord.prototype.observedTimeUnixNano = null; - LogRecord.prototype.severityNumber = null; - LogRecord.prototype.severityText = null; - LogRecord.prototype.body = null; - LogRecord.prototype.attributes = $util.emptyArray; - LogRecord.prototype.droppedAttributesCount = null; - LogRecord.prototype.flags = null; - LogRecord.prototype.traceId = null; - LogRecord.prototype.spanId = null; - LogRecord.prototype.eventName = null; - LogRecord.create = function create(properties) { - return new LogRecord(properties); - }; - LogRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.timeUnixNano != null && Object.hasOwnProperty.call(message, "timeUnixNano")) - writer.uint32(9).fixed64(message.timeUnixNano); - if (message.severityNumber != null && Object.hasOwnProperty.call(message, "severityNumber")) - writer.uint32(16).int32(message.severityNumber); - if (message.severityText != null && Object.hasOwnProperty.call(message, "severityText")) - writer.uint32(26).string(message.severityText); - if (message.body != null && Object.hasOwnProperty.call(message, "body")) - $root.opentelemetry.proto.common.v1.AnyValue.encode(message.body, writer.uint32(42).fork()).ldelim(); - if (message.attributes != null && message.attributes.length) - for (var i = 0;i < message.attributes.length; ++i) - $root.opentelemetry.proto.common.v1.KeyValue.encode(message.attributes[i], writer.uint32(50).fork()).ldelim(); - if (message.droppedAttributesCount != null && Object.hasOwnProperty.call(message, "droppedAttributesCount")) - writer.uint32(56).uint32(message.droppedAttributesCount); - if (message.flags != null && Object.hasOwnProperty.call(message, "flags")) - writer.uint32(69).fixed32(message.flags); - if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId")) - writer.uint32(74).bytes(message.traceId); - if (message.spanId != null && Object.hasOwnProperty.call(message, "spanId")) - writer.uint32(82).bytes(message.spanId); - if (message.observedTimeUnixNano != null && Object.hasOwnProperty.call(message, "observedTimeUnixNano")) - writer.uint32(89).fixed64(message.observedTimeUnixNano); - if (message.eventName != null && Object.hasOwnProperty.call(message, "eventName")) - writer.uint32(98).string(message.eventName); - return writer; - }; - LogRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - LogRecord.decode = function decode(reader, length, error48) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.logs.v1.LogRecord; - while (reader.pos < end) { - var tag = reader.uint32(); - if (tag === error48) - break; - switch (tag >>> 3) { - case 1: { - message.timeUnixNano = reader.fixed64(); - break; - } - case 11: { - message.observedTimeUnixNano = reader.fixed64(); - break; - } - case 2: { - message.severityNumber = reader.int32(); - break; - } - case 3: { - message.severityText = reader.string(); - break; - } - case 5: { - message.body = $root.opentelemetry.proto.common.v1.AnyValue.decode(reader, reader.uint32()); - break; - } - case 6: { - if (!(message.attributes && message.attributes.length)) - message.attributes = []; - message.attributes.push($root.opentelemetry.proto.common.v1.KeyValue.decode(reader, reader.uint32())); - break; - } - case 7: { - message.droppedAttributesCount = reader.uint32(); - break; - } - case 8: { - message.flags = reader.fixed32(); - break; - } - case 9: { - message.traceId = reader.bytes(); - break; - } - case 10: { - message.spanId = reader.bytes(); - break; - } - case 12: { - message.eventName = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - LogRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - LogRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) { - if (!$util.isInteger(message.timeUnixNano) && !(message.timeUnixNano && $util.isInteger(message.timeUnixNano.low) && $util.isInteger(message.timeUnixNano.high))) - return "timeUnixNano: integer|Long expected"; - } - if (message.observedTimeUnixNano != null && message.hasOwnProperty("observedTimeUnixNano")) { - if (!$util.isInteger(message.observedTimeUnixNano) && !(message.observedTimeUnixNano && $util.isInteger(message.observedTimeUnixNano.low) && $util.isInteger(message.observedTimeUnixNano.high))) - return "observedTimeUnixNano: integer|Long expected"; - } - if (message.severityNumber != null && message.hasOwnProperty("severityNumber")) - switch (message.severityNumber) { - default: - return "severityNumber: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - break; - } - if (message.severityText != null && message.hasOwnProperty("severityText")) { - if (!$util.isString(message.severityText)) - return "severityText: string expected"; - } - if (message.body != null && message.hasOwnProperty("body")) { - var error48 = $root.opentelemetry.proto.common.v1.AnyValue.verify(message.body); - if (error48) - return "body." + error48; - } - if (message.attributes != null && message.hasOwnProperty("attributes")) { - if (!Array.isArray(message.attributes)) - return "attributes: array expected"; - for (var i = 0;i < message.attributes.length; ++i) { - var error48 = $root.opentelemetry.proto.common.v1.KeyValue.verify(message.attributes[i]); - if (error48) - return "attributes." + error48; - } - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) { - if (!$util.isInteger(message.droppedAttributesCount)) - return "droppedAttributesCount: integer expected"; - } - if (message.flags != null && message.hasOwnProperty("flags")) { - if (!$util.isInteger(message.flags)) - return "flags: integer expected"; - } - if (message.traceId != null && message.hasOwnProperty("traceId")) { - if (!(message.traceId && typeof message.traceId.length === "number" || $util.isString(message.traceId))) - return "traceId: buffer expected"; - } - if (message.spanId != null && message.hasOwnProperty("spanId")) { - if (!(message.spanId && typeof message.spanId.length === "number" || $util.isString(message.spanId))) - return "spanId: buffer expected"; - } - if (message.eventName != null && message.hasOwnProperty("eventName")) { - if (!$util.isString(message.eventName)) - return "eventName: string expected"; - } - return null; - }; - LogRecord.fromObject = function fromObject(object3) { - if (object3 instanceof $root.opentelemetry.proto.logs.v1.LogRecord) - return object3; - var message = new $root.opentelemetry.proto.logs.v1.LogRecord; - if (object3.timeUnixNano != null) { - if ($util.Long) - (message.timeUnixNano = $util.Long.fromValue(object3.timeUnixNano)).unsigned = false; - else if (typeof object3.timeUnixNano === "string") - message.timeUnixNano = parseInt(object3.timeUnixNano, 10); - else if (typeof object3.timeUnixNano === "number") - message.timeUnixNano = object3.timeUnixNano; - else if (typeof object3.timeUnixNano === "object") - message.timeUnixNano = new $util.LongBits(object3.timeUnixNano.low >>> 0, object3.timeUnixNano.high >>> 0).toNumber(); - } - if (object3.observedTimeUnixNano != null) { - if ($util.Long) - (message.observedTimeUnixNano = $util.Long.fromValue(object3.observedTimeUnixNano)).unsigned = false; - else if (typeof object3.observedTimeUnixNano === "string") - message.observedTimeUnixNano = parseInt(object3.observedTimeUnixNano, 10); - else if (typeof object3.observedTimeUnixNano === "number") - message.observedTimeUnixNano = object3.observedTimeUnixNano; - else if (typeof object3.observedTimeUnixNano === "object") - message.observedTimeUnixNano = new $util.LongBits(object3.observedTimeUnixNano.low >>> 0, object3.observedTimeUnixNano.high >>> 0).toNumber(); - } - switch (object3.severityNumber) { - default: - if (typeof object3.severityNumber === "number") { - message.severityNumber = object3.severityNumber; - break; - } - break; - case "SEVERITY_NUMBER_UNSPECIFIED": - case 0: - message.severityNumber = 0; - break; - case "SEVERITY_NUMBER_TRACE": - case 1: - message.severityNumber = 1; - break; - case "SEVERITY_NUMBER_TRACE2": - case 2: - message.severityNumber = 2; - break; - case "SEVERITY_NUMBER_TRACE3": - case 3: - message.severityNumber = 3; - break; - case "SEVERITY_NUMBER_TRACE4": - case 4: - message.severityNumber = 4; - break; - case "SEVERITY_NUMBER_DEBUG": - case 5: - message.severityNumber = 5; - break; - case "SEVERITY_NUMBER_DEBUG2": - case 6: - message.severityNumber = 6; - break; - case "SEVERITY_NUMBER_DEBUG3": - case 7: - message.severityNumber = 7; - break; - case "SEVERITY_NUMBER_DEBUG4": - case 8: - message.severityNumber = 8; - break; - case "SEVERITY_NUMBER_INFO": - case 9: - message.severityNumber = 9; - break; - case "SEVERITY_NUMBER_INFO2": - case 10: - message.severityNumber = 10; - break; - case "SEVERITY_NUMBER_INFO3": - case 11: - message.severityNumber = 11; - break; - case "SEVERITY_NUMBER_INFO4": - case 12: - message.severityNumber = 12; - break; - case "SEVERITY_NUMBER_WARN": - case 13: - message.severityNumber = 13; - break; - case "SEVERITY_NUMBER_WARN2": - case 14: - message.severityNumber = 14; - break; - case "SEVERITY_NUMBER_WARN3": - case 15: - message.severityNumber = 15; - break; - case "SEVERITY_NUMBER_WARN4": - case 16: - message.severityNumber = 16; - break; - case "SEVERITY_NUMBER_ERROR": - case 17: - message.severityNumber = 17; - break; - case "SEVERITY_NUMBER_ERROR2": - case 18: - message.severityNumber = 18; - break; - case "SEVERITY_NUMBER_ERROR3": - case 19: - message.severityNumber = 19; - break; - case "SEVERITY_NUMBER_ERROR4": - case 20: - message.severityNumber = 20; - break; - case "SEVERITY_NUMBER_FATAL": - case 21: - message.severityNumber = 21; - break; - case "SEVERITY_NUMBER_FATAL2": - case 22: - message.severityNumber = 22; - break; - case "SEVERITY_NUMBER_FATAL3": - case 23: - message.severityNumber = 23; - break; - case "SEVERITY_NUMBER_FATAL4": - case 24: - message.severityNumber = 24; - break; - } - if (object3.severityText != null) - message.severityText = String(object3.severityText); - if (object3.body != null) { - if (typeof object3.body !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.LogRecord.body: object expected"); - message.body = $root.opentelemetry.proto.common.v1.AnyValue.fromObject(object3.body); - } - if (object3.attributes) { - if (!Array.isArray(object3.attributes)) - throw TypeError(".opentelemetry.proto.logs.v1.LogRecord.attributes: array expected"); - message.attributes = []; - for (var i = 0;i < object3.attributes.length; ++i) { - if (typeof object3.attributes[i] !== "object") - throw TypeError(".opentelemetry.proto.logs.v1.LogRecord.attributes: object expected"); - message.attributes[i] = $root.opentelemetry.proto.common.v1.KeyValue.fromObject(object3.attributes[i]); - } - } - if (object3.droppedAttributesCount != null) - message.droppedAttributesCount = object3.droppedAttributesCount >>> 0; - if (object3.flags != null) - message.flags = object3.flags >>> 0; - if (object3.traceId != null) { - if (typeof object3.traceId === "string") - $util.base64.decode(object3.traceId, message.traceId = $util.newBuffer($util.base64.length(object3.traceId)), 0); - else if (object3.traceId.length >= 0) - message.traceId = object3.traceId; - } - if (object3.spanId != null) { - if (typeof object3.spanId === "string") - $util.base64.decode(object3.spanId, message.spanId = $util.newBuffer($util.base64.length(object3.spanId)), 0); - else if (object3.spanId.length >= 0) - message.spanId = object3.spanId; - } - if (object3.eventName != null) - message.eventName = String(object3.eventName); - return message; - }; - LogRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object3 = {}; - if (options.arrays || options.defaults) - object3.attributes = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.timeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.timeUnixNano = options.longs === String ? "0" : 0; - object3.severityNumber = options.enums === String ? "SEVERITY_NUMBER_UNSPECIFIED" : 0; - object3.severityText = ""; - object3.body = null; - object3.droppedAttributesCount = 0; - object3.flags = 0; - if (options.bytes === String) - object3.traceId = ""; - else { - object3.traceId = []; - if (options.bytes !== Array) - object3.traceId = $util.newBuffer(object3.traceId); - } - if (options.bytes === String) - object3.spanId = ""; - else { - object3.spanId = []; - if (options.bytes !== Array) - object3.spanId = $util.newBuffer(object3.spanId); - } - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object3.observedTimeUnixNano = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object3.observedTimeUnixNano = options.longs === String ? "0" : 0; - object3.eventName = ""; - } - if (message.timeUnixNano != null && message.hasOwnProperty("timeUnixNano")) - if (typeof message.timeUnixNano === "number") - object3.timeUnixNano = options.longs === String ? String(message.timeUnixNano) : message.timeUnixNano; - else - object3.timeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.timeUnixNano) : options.longs === Number ? new $util.LongBits(message.timeUnixNano.low >>> 0, message.timeUnixNano.high >>> 0).toNumber() : message.timeUnixNano; - if (message.severityNumber != null && message.hasOwnProperty("severityNumber")) - object3.severityNumber = options.enums === String ? $root.opentelemetry.proto.logs.v1.SeverityNumber[message.severityNumber] === undefined ? message.severityNumber : $root.opentelemetry.proto.logs.v1.SeverityNumber[message.severityNumber] : message.severityNumber; - if (message.severityText != null && message.hasOwnProperty("severityText")) - object3.severityText = message.severityText; - if (message.body != null && message.hasOwnProperty("body")) - object3.body = $root.opentelemetry.proto.common.v1.AnyValue.toObject(message.body, options); - if (message.attributes && message.attributes.length) { - object3.attributes = []; - for (var j = 0;j < message.attributes.length; ++j) - object3.attributes[j] = $root.opentelemetry.proto.common.v1.KeyValue.toObject(message.attributes[j], options); - } - if (message.droppedAttributesCount != null && message.hasOwnProperty("droppedAttributesCount")) - object3.droppedAttributesCount = message.droppedAttributesCount; - if (message.flags != null && message.hasOwnProperty("flags")) - object3.flags = message.flags; - if (message.traceId != null && message.hasOwnProperty("traceId")) - object3.traceId = options.bytes === String ? $util.base64.encode(message.traceId, 0, message.traceId.length) : options.bytes === Array ? Array.prototype.slice.call(message.traceId) : message.traceId; - if (message.spanId != null && message.hasOwnProperty("spanId")) - object3.spanId = options.bytes === String ? $util.base64.encode(message.spanId, 0, message.spanId.length) : options.bytes === Array ? Array.prototype.slice.call(message.spanId) : message.spanId; - if (message.observedTimeUnixNano != null && message.hasOwnProperty("observedTimeUnixNano")) - if (typeof message.observedTimeUnixNano === "number") - object3.observedTimeUnixNano = options.longs === String ? String(message.observedTimeUnixNano) : message.observedTimeUnixNano; - else - object3.observedTimeUnixNano = options.longs === String ? $util.Long.prototype.toString.call(message.observedTimeUnixNano) : options.longs === Number ? new $util.LongBits(message.observedTimeUnixNano.low >>> 0, message.observedTimeUnixNano.high >>> 0).toNumber() : message.observedTimeUnixNano; - if (message.eventName != null && message.hasOwnProperty("eventName")) - object3.eventName = message.eventName; - return object3; - }; - LogRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LogRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/opentelemetry.proto.logs.v1.LogRecord"; - }; - return LogRecord; - }(); - return v1; - }(); - return logs; - }(); - return proto; - }(); - return opentelemetry; - }(); - module.exports = $root; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/common/hex-to-binary.js -var require_hex_to_binary2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hexToBinary = undefined; - function intValue(charCode) { - if (charCode >= 48 && charCode <= 57) { - return charCode - 48; - } - if (charCode >= 97 && charCode <= 102) { - return charCode - 87; - } - return charCode - 55; - } - function hexToBinary(hexStr) { - const buf = new Uint8Array(hexStr.length / 2); - let offset = 0; - for (let i = 0;i < hexStr.length; i += 2) { - const hi = intValue(hexStr.charCodeAt(i)); - const lo = intValue(hexStr.charCodeAt(i + 1)); - buf[offset++] = hi << 4 | lo; - } - return buf; - } - exports.hexToBinary = hexToBinary; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/common/utils.js -var require_utils50 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOtlpEncoder = exports.encodeAsString = exports.encodeAsLongBits = exports.toLongBits = exports.hrTimeToNanos = undefined; - var core_1 = require_src89(); - var hex_to_binary_1 = require_hex_to_binary2(); - function hrTimeToNanos(hrTime) { - const NANOSECONDS = BigInt(1e9); - return BigInt(hrTime[0]) * NANOSECONDS + BigInt(hrTime[1]); - } - exports.hrTimeToNanos = hrTimeToNanos; - function toLongBits(value) { - const low = Number(BigInt.asUintN(32, value)); - const high = Number(BigInt.asUintN(32, value >> BigInt(32))); - return { low, high }; - } - exports.toLongBits = toLongBits; - function encodeAsLongBits(hrTime) { - const nanos = hrTimeToNanos(hrTime); - return toLongBits(nanos); - } - exports.encodeAsLongBits = encodeAsLongBits; - function encodeAsString(hrTime) { - const nanos = hrTimeToNanos(hrTime); - return nanos.toString(); - } - exports.encodeAsString = encodeAsString; - var encodeTimestamp = typeof BigInt !== "undefined" ? encodeAsString : core_1.hrTimeToNanoseconds; - function identity(value) { - return value; - } - function optionalHexToBinary(str) { - if (str === undefined) - return; - return (0, hex_to_binary_1.hexToBinary)(str); - } - var DEFAULT_ENCODER = { - encodeHrTime: encodeAsLongBits, - encodeSpanContext: hex_to_binary_1.hexToBinary, - encodeOptionalSpanContext: optionalHexToBinary - }; - function getOtlpEncoder(options) { - if (options === undefined) { - return DEFAULT_ENCODER; - } - const useLongBits = options.useLongBits ?? true; - const useHex = options.useHex ?? false; - return { - encodeHrTime: useLongBits ? encodeAsLongBits : encodeTimestamp, - encodeSpanContext: useHex ? identity : hex_to_binary_1.hexToBinary, - encodeOptionalSpanContext: useHex ? identity : optionalHexToBinary - }; - } - exports.getOtlpEncoder = getOtlpEncoder; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/common/internal.js -var require_internal5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toAnyValue = exports.toKeyValue = exports.toAttributes = exports.createInstrumentationScope = exports.createResource = undefined; - function createResource(resource) { - return { - attributes: toAttributes(resource.attributes), - droppedAttributesCount: 0 - }; - } - exports.createResource = createResource; - function createInstrumentationScope(scope) { - return { - name: scope.name, - version: scope.version - }; - } - exports.createInstrumentationScope = createInstrumentationScope; - function toAttributes(attributes) { - return Object.keys(attributes).map((key) => toKeyValue(key, attributes[key])); - } - exports.toAttributes = toAttributes; - function toKeyValue(key, value) { - return { - key, - value: toAnyValue(value) - }; - } - exports.toKeyValue = toKeyValue; - function toAnyValue(value) { - const t = typeof value; - if (t === "string") - return { stringValue: value }; - if (t === "number") { - if (!Number.isInteger(value)) - return { doubleValue: value }; - return { intValue: value }; - } - if (t === "boolean") - return { boolValue: value }; - if (value instanceof Uint8Array) - return { bytesValue: value }; - if (Array.isArray(value)) - return { arrayValue: { values: value.map(toAnyValue) } }; - if (t === "object" && value != null) - return { - kvlistValue: { - values: Object.entries(value).map(([k, v]) => toKeyValue(k, v)) - } - }; - return {}; - } - exports.toAnyValue = toAnyValue; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/internal.js -var require_internal6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.toLogAttributes = exports.createExportLogsServiceRequest = undefined; - var utils_1 = require_utils50(); - var internal_1 = require_internal5(); - function createExportLogsServiceRequest(logRecords, options) { - const encoder2 = (0, utils_1.getOtlpEncoder)(options); - return { - resourceLogs: logRecordsToResourceLogs(logRecords, encoder2) - }; - } - exports.createExportLogsServiceRequest = createExportLogsServiceRequest; - function createResourceMap(logRecords) { - const resourceMap = new Map; - for (const record3 of logRecords) { - const { resource, instrumentationScope: { name, version: version2 = "", schemaUrl = "" } } = record3; - let ismMap = resourceMap.get(resource); - if (!ismMap) { - ismMap = new Map; - resourceMap.set(resource, ismMap); - } - const ismKey = `${name}@${version2}:${schemaUrl}`; - let records = ismMap.get(ismKey); - if (!records) { - records = []; - ismMap.set(ismKey, records); - } - records.push(record3); - } - return resourceMap; - } - function logRecordsToResourceLogs(logRecords, encoder2) { - const resourceMap = createResourceMap(logRecords); - return Array.from(resourceMap, ([resource, ismMap]) => ({ - resource: (0, internal_1.createResource)(resource), - scopeLogs: Array.from(ismMap, ([, scopeLogs]) => { - return { - scope: (0, internal_1.createInstrumentationScope)(scopeLogs[0].instrumentationScope), - logRecords: scopeLogs.map((log) => toLogRecord(log, encoder2)), - schemaUrl: scopeLogs[0].instrumentationScope.schemaUrl - }; - }), - schemaUrl: undefined - })); - } - function toLogRecord(log, encoder2) { - return { - timeUnixNano: encoder2.encodeHrTime(log.hrTime), - observedTimeUnixNano: encoder2.encodeHrTime(log.hrTimeObserved), - severityNumber: toSeverityNumber(log.severityNumber), - severityText: log.severityText, - body: (0, internal_1.toAnyValue)(log.body), - eventName: log.eventName, - attributes: toLogAttributes(log.attributes), - droppedAttributesCount: log.droppedAttributesCount, - flags: log.spanContext?.traceFlags, - traceId: encoder2.encodeOptionalSpanContext(log.spanContext?.traceId), - spanId: encoder2.encodeOptionalSpanContext(log.spanContext?.spanId) - }; - } - function toSeverityNumber(severityNumber) { - return severityNumber; - } - function toLogAttributes(attributes) { - return Object.keys(attributes).map((key) => (0, internal_1.toKeyValue)(key, attributes[key])); - } - exports.toLogAttributes = toLogAttributes; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs.js -var require_logs5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufLogsSerializer = undefined; - var root = require_root3(); - var internal_1 = require_internal6(); - var logsResponseType = root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; - var logsRequestType = root.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; - exports.ProtobufLogsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportLogsServiceRequest)(arg); - return logsRequestType.encode(request).finish(); - }, - deserializeResponse: (arg) => { - return logsResponseType.decode(arg); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/index.js -var require_protobuf4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufLogsSerializer = undefined; - var logs_1 = require_logs5(); - Object.defineProperty(exports, "ProtobufLogsSerializer", { enumerable: true, get: function() { - return logs_1.ProtobufLogsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal-types.js -var require_internal_types12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.EAggregationTemporality = undefined; - var EAggregationTemporality; - (function(EAggregationTemporality2) { - EAggregationTemporality2[EAggregationTemporality2["AGGREGATION_TEMPORALITY_UNSPECIFIED"] = 0] = "AGGREGATION_TEMPORALITY_UNSPECIFIED"; - EAggregationTemporality2[EAggregationTemporality2["AGGREGATION_TEMPORALITY_DELTA"] = 1] = "AGGREGATION_TEMPORALITY_DELTA"; - EAggregationTemporality2[EAggregationTemporality2["AGGREGATION_TEMPORALITY_CUMULATIVE"] = 2] = "AGGREGATION_TEMPORALITY_CUMULATIVE"; - })(EAggregationTemporality = exports.EAggregationTemporality || (exports.EAggregationTemporality = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal.js -var require_internal7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createExportMetricsServiceRequest = exports.toMetric = exports.toScopeMetrics = exports.toResourceMetrics = undefined; - var api_1 = require_src(); - var sdk_metrics_1 = require_src93(); - var internal_types_1 = require_internal_types12(); - var utils_1 = require_utils50(); - var internal_1 = require_internal5(); - function toResourceMetrics(resourceMetrics, options) { - const encoder2 = (0, utils_1.getOtlpEncoder)(options); - return { - resource: (0, internal_1.createResource)(resourceMetrics.resource), - schemaUrl: undefined, - scopeMetrics: toScopeMetrics(resourceMetrics.scopeMetrics, encoder2) - }; - } - exports.toResourceMetrics = toResourceMetrics; - function toScopeMetrics(scopeMetrics, encoder2) { - return Array.from(scopeMetrics.map((metrics) => ({ - scope: (0, internal_1.createInstrumentationScope)(metrics.scope), - metrics: metrics.metrics.map((metricData) => toMetric(metricData, encoder2)), - schemaUrl: metrics.scope.schemaUrl - }))); - } - exports.toScopeMetrics = toScopeMetrics; - function toMetric(metricData, encoder2) { - const out = { - name: metricData.descriptor.name, - description: metricData.descriptor.description, - unit: metricData.descriptor.unit - }; - const aggregationTemporality = toAggregationTemporality(metricData.aggregationTemporality); - switch (metricData.dataPointType) { - case sdk_metrics_1.DataPointType.SUM: - out.sum = { - aggregationTemporality, - isMonotonic: metricData.isMonotonic, - dataPoints: toSingularDataPoints(metricData, encoder2) - }; - break; - case sdk_metrics_1.DataPointType.GAUGE: - out.gauge = { - dataPoints: toSingularDataPoints(metricData, encoder2) - }; - break; - case sdk_metrics_1.DataPointType.HISTOGRAM: - out.histogram = { - aggregationTemporality, - dataPoints: toHistogramDataPoints(metricData, encoder2) - }; - break; - case sdk_metrics_1.DataPointType.EXPONENTIAL_HISTOGRAM: - out.exponentialHistogram = { - aggregationTemporality, - dataPoints: toExponentialHistogramDataPoints(metricData, encoder2) - }; - break; - } - return out; - } - exports.toMetric = toMetric; - function toSingularDataPoint(dataPoint, valueType, encoder2) { - const out = { - attributes: (0, internal_1.toAttributes)(dataPoint.attributes), - startTimeUnixNano: encoder2.encodeHrTime(dataPoint.startTime), - timeUnixNano: encoder2.encodeHrTime(dataPoint.endTime) - }; - switch (valueType) { - case api_1.ValueType.INT: - out.asInt = dataPoint.value; - break; - case api_1.ValueType.DOUBLE: - out.asDouble = dataPoint.value; - break; - } - return out; - } - function toSingularDataPoints(metricData, encoder2) { - return metricData.dataPoints.map((dataPoint) => { - return toSingularDataPoint(dataPoint, metricData.descriptor.valueType, encoder2); - }); - } - function toHistogramDataPoints(metricData, encoder2) { - return metricData.dataPoints.map((dataPoint) => { - const histogram = dataPoint.value; - return { - attributes: (0, internal_1.toAttributes)(dataPoint.attributes), - bucketCounts: histogram.buckets.counts, - explicitBounds: histogram.buckets.boundaries, - count: histogram.count, - sum: histogram.sum, - min: histogram.min, - max: histogram.max, - startTimeUnixNano: encoder2.encodeHrTime(dataPoint.startTime), - timeUnixNano: encoder2.encodeHrTime(dataPoint.endTime) - }; - }); - } - function toExponentialHistogramDataPoints(metricData, encoder2) { - return metricData.dataPoints.map((dataPoint) => { - const histogram = dataPoint.value; - return { - attributes: (0, internal_1.toAttributes)(dataPoint.attributes), - count: histogram.count, - min: histogram.min, - max: histogram.max, - sum: histogram.sum, - positive: { - offset: histogram.positive.offset, - bucketCounts: histogram.positive.bucketCounts - }, - negative: { - offset: histogram.negative.offset, - bucketCounts: histogram.negative.bucketCounts - }, - scale: histogram.scale, - zeroCount: histogram.zeroCount, - startTimeUnixNano: encoder2.encodeHrTime(dataPoint.startTime), - timeUnixNano: encoder2.encodeHrTime(dataPoint.endTime) - }; - }); - } - function toAggregationTemporality(temporality) { - switch (temporality) { - case sdk_metrics_1.AggregationTemporality.DELTA: - return internal_types_1.EAggregationTemporality.AGGREGATION_TEMPORALITY_DELTA; - case sdk_metrics_1.AggregationTemporality.CUMULATIVE: - return internal_types_1.EAggregationTemporality.AGGREGATION_TEMPORALITY_CUMULATIVE; - } - } - function createExportMetricsServiceRequest(resourceMetrics, options) { - return { - resourceMetrics: resourceMetrics.map((metrics) => toResourceMetrics(metrics, options)) - }; - } - exports.createExportMetricsServiceRequest = createExportMetricsServiceRequest; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics.js -var require_metrics4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufMetricsSerializer = undefined; - var root = require_root3(); - var internal_1 = require_internal7(); - var metricsResponseType = root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; - var metricsRequestType = root.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; - exports.ProtobufMetricsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportMetricsServiceRequest)([arg]); - return metricsRequestType.encode(request).finish(); - }, - deserializeResponse: (arg) => { - return metricsResponseType.decode(arg); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/index.js -var require_protobuf5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufMetricsSerializer = undefined; - var metrics_1 = require_metrics4(); - Object.defineProperty(exports, "ProtobufMetricsSerializer", { enumerable: true, get: function() { - return metrics_1.ProtobufMetricsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/internal.js -var require_internal8 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createExportTraceServiceRequest = exports.toOtlpSpanEvent = exports.toOtlpLink = exports.sdkSpanToOtlpSpan = undefined; - var internal_1 = require_internal5(); - var utils_1 = require_utils50(); - function sdkSpanToOtlpSpan(span, encoder2) { - const ctx = span.spanContext(); - const status = span.status; - const parentSpanId = span.parentSpanContext?.spanId ? encoder2.encodeSpanContext(span.parentSpanContext?.spanId) : undefined; - return { - traceId: encoder2.encodeSpanContext(ctx.traceId), - spanId: encoder2.encodeSpanContext(ctx.spanId), - parentSpanId, - traceState: ctx.traceState?.serialize(), - name: span.name, - kind: span.kind == null ? 0 : span.kind + 1, - startTimeUnixNano: encoder2.encodeHrTime(span.startTime), - endTimeUnixNano: encoder2.encodeHrTime(span.endTime), - attributes: (0, internal_1.toAttributes)(span.attributes), - droppedAttributesCount: span.droppedAttributesCount, - events: span.events.map((event) => toOtlpSpanEvent(event, encoder2)), - droppedEventsCount: span.droppedEventsCount, - status: { - code: status.code, - message: status.message - }, - links: span.links.map((link) => toOtlpLink(link, encoder2)), - droppedLinksCount: span.droppedLinksCount - }; - } - exports.sdkSpanToOtlpSpan = sdkSpanToOtlpSpan; - function toOtlpLink(link, encoder2) { - return { - attributes: link.attributes ? (0, internal_1.toAttributes)(link.attributes) : [], - spanId: encoder2.encodeSpanContext(link.context.spanId), - traceId: encoder2.encodeSpanContext(link.context.traceId), - traceState: link.context.traceState?.serialize(), - droppedAttributesCount: link.droppedAttributesCount || 0 - }; - } - exports.toOtlpLink = toOtlpLink; - function toOtlpSpanEvent(timedEvent, encoder2) { - return { - attributes: timedEvent.attributes ? (0, internal_1.toAttributes)(timedEvent.attributes) : [], - name: timedEvent.name, - timeUnixNano: encoder2.encodeHrTime(timedEvent.time), - droppedAttributesCount: timedEvent.droppedAttributesCount || 0 - }; - } - exports.toOtlpSpanEvent = toOtlpSpanEvent; - function createExportTraceServiceRequest(spans, options) { - const encoder2 = (0, utils_1.getOtlpEncoder)(options); - return { - resourceSpans: spanRecordsToResourceSpans(spans, encoder2) - }; - } - exports.createExportTraceServiceRequest = createExportTraceServiceRequest; - function createResourceMap(readableSpans) { - const resourceMap = new Map; - for (const record3 of readableSpans) { - let ilsMap = resourceMap.get(record3.resource); - if (!ilsMap) { - ilsMap = new Map; - resourceMap.set(record3.resource, ilsMap); - } - const instrumentationScopeKey = `${record3.instrumentationScope.name}@${record3.instrumentationScope.version || ""}:${record3.instrumentationScope.schemaUrl || ""}`; - let records = ilsMap.get(instrumentationScopeKey); - if (!records) { - records = []; - ilsMap.set(instrumentationScopeKey, records); - } - records.push(record3); - } - return resourceMap; - } - function spanRecordsToResourceSpans(readableSpans, encoder2) { - const resourceMap = createResourceMap(readableSpans); - const out = []; - const entryIterator = resourceMap.entries(); - let entry = entryIterator.next(); - while (!entry.done) { - const [resource, ilmMap] = entry.value; - const scopeResourceSpans = []; - const ilmIterator = ilmMap.values(); - let ilmEntry = ilmIterator.next(); - while (!ilmEntry.done) { - const scopeSpans = ilmEntry.value; - if (scopeSpans.length > 0) { - const spans = scopeSpans.map((readableSpan) => sdkSpanToOtlpSpan(readableSpan, encoder2)); - scopeResourceSpans.push({ - scope: (0, internal_1.createInstrumentationScope)(scopeSpans[0].instrumentationScope), - spans, - schemaUrl: scopeSpans[0].instrumentationScope.schemaUrl - }); - } - ilmEntry = ilmIterator.next(); - } - const transformedSpans = { - resource: (0, internal_1.createResource)(resource), - scopeSpans: scopeResourceSpans, - schemaUrl: undefined - }; - out.push(transformedSpans); - entry = entryIterator.next(); - } - return out; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace.js -var require_trace5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufTraceSerializer = undefined; - var root = require_root3(); - var internal_1 = require_internal8(); - var traceResponseType = root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; - var traceRequestType = root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; - exports.ProtobufTraceSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportTraceServiceRequest)(arg); - return traceRequestType.encode(request).finish(); - }, - deserializeResponse: (arg) => { - return traceResponseType.decode(arg); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/index.js -var require_protobuf6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ProtobufTraceSerializer = undefined; - var trace_1 = require_trace5(); - Object.defineProperty(exports, "ProtobufTraceSerializer", { enumerable: true, get: function() { - return trace_1.ProtobufTraceSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/logs.js -var require_logs6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonLogsSerializer = undefined; - var internal_1 = require_internal6(); - exports.JsonLogsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportLogsServiceRequest)(arg, { - useHex: true, - useLongBits: false - }); - const encoder2 = new TextEncoder; - return encoder2.encode(JSON.stringify(request)); - }, - deserializeResponse: (arg) => { - if (arg.length === 0) { - return {}; - } - const decoder = new TextDecoder; - return JSON.parse(decoder.decode(arg)); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/index.js -var require_json4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonLogsSerializer = undefined; - var logs_1 = require_logs6(); - Object.defineProperty(exports, "JsonLogsSerializer", { enumerable: true, get: function() { - return logs_1.JsonLogsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/metrics.js -var require_metrics5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonMetricsSerializer = undefined; - var internal_1 = require_internal7(); - exports.JsonMetricsSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportMetricsServiceRequest)([arg], { - useLongBits: false - }); - const encoder2 = new TextEncoder; - return encoder2.encode(JSON.stringify(request)); - }, - deserializeResponse: (arg) => { - if (arg.length === 0) { - return {}; - } - const decoder = new TextDecoder; - return JSON.parse(decoder.decode(arg)); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/index.js -var require_json5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonMetricsSerializer = undefined; - var metrics_1 = require_metrics5(); - Object.defineProperty(exports, "JsonMetricsSerializer", { enumerable: true, get: function() { - return metrics_1.JsonMetricsSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/trace.js -var require_trace6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonTraceSerializer = undefined; - var internal_1 = require_internal8(); - exports.JsonTraceSerializer = { - serializeRequest: (arg) => { - const request = (0, internal_1.createExportTraceServiceRequest)(arg, { - useHex: true, - useLongBits: false - }); - const encoder2 = new TextEncoder; - return encoder2.encode(JSON.stringify(request)); - }, - deserializeResponse: (arg) => { - if (arg.length === 0) { - return {}; - } - const decoder = new TextDecoder; - return JSON.parse(decoder.decode(arg)); - } - }; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/index.js -var require_json6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonTraceSerializer = undefined; - var trace_1 = require_trace6(); - Object.defineProperty(exports, "JsonTraceSerializer", { enumerable: true, get: function() { - return trace_1.JsonTraceSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-transformer@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-transformer/build/src/index.js -var require_src99 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JsonTraceSerializer = exports.JsonMetricsSerializer = exports.JsonLogsSerializer = exports.ProtobufTraceSerializer = exports.ProtobufMetricsSerializer = exports.ProtobufLogsSerializer = undefined; - var protobuf_1 = require_protobuf4(); - Object.defineProperty(exports, "ProtobufLogsSerializer", { enumerable: true, get: function() { - return protobuf_1.ProtobufLogsSerializer; - } }); - var protobuf_2 = require_protobuf5(); - Object.defineProperty(exports, "ProtobufMetricsSerializer", { enumerable: true, get: function() { - return protobuf_2.ProtobufMetricsSerializer; - } }); - var protobuf_3 = require_protobuf6(); - Object.defineProperty(exports, "ProtobufTraceSerializer", { enumerable: true, get: function() { - return protobuf_3.ProtobufTraceSerializer; - } }); - var json_1 = require_json4(); - Object.defineProperty(exports, "JsonLogsSerializer", { enumerable: true, get: function() { - return json_1.JsonLogsSerializer; - } }); - var json_2 = require_json5(); - Object.defineProperty(exports, "JsonMetricsSerializer", { enumerable: true, get: function() { - return json_2.JsonMetricsSerializer; - } }); - var json_3 = require_json6(); - Object.defineProperty(exports, "JsonTraceSerializer", { enumerable: true, get: function() { - return json_3.JsonTraceSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/version.js -var require_version50 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/is-export-retryable.js -var require_is_export_retryable2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseRetryAfterToMills = exports.isExportRetryable = undefined; - function isExportRetryable(statusCode) { - const retryCodes = [429, 502, 503, 504]; - return retryCodes.includes(statusCode); - } - exports.isExportRetryable = isExportRetryable; - function parseRetryAfterToMills(retryAfter) { - if (retryAfter == null) { - return; - } - const seconds = Number.parseInt(retryAfter, 10); - if (Number.isInteger(seconds)) { - return seconds > 0 ? seconds * 1000 : -1; - } - const delay = new Date(retryAfter).getTime() - Date.now(); - if (delay >= 0) { - return delay; - } - return 0; - } - exports.parseRetryAfterToMills = parseRetryAfterToMills; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/transport/http-transport-utils.js -var require_http_transport_utils2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createHttpAgent = exports.compressAndSend = exports.sendWithHttp = undefined; - var http2 = __require("http"); - var https = __require("https"); - var zlib = __require("zlib"); - var stream_1 = __require("stream"); - var is_export_retryable_1 = require_is_export_retryable2(); - var types_1 = require_types18(); - function sendWithHttp(params, agent2, data, onDone, timeoutMillis) { - const parsedUrl = new URL(params.url); - const options = { - hostname: parsedUrl.hostname, - port: parsedUrl.port, - path: parsedUrl.pathname, - method: "POST", - headers: { - ...params.headers() - }, - agent: agent2 - }; - const request = parsedUrl.protocol === "http:" ? http2.request : https.request; - const req = request(options, (res) => { - const responseData = []; - res.on("data", (chunk) => responseData.push(chunk)); - res.on("end", () => { - if (res.statusCode && res.statusCode < 299) { - onDone({ - status: "success", - data: Buffer.concat(responseData) - }); - } else if (res.statusCode && (0, is_export_retryable_1.isExportRetryable)(res.statusCode)) { - onDone({ - status: "retryable", - retryInMillis: (0, is_export_retryable_1.parseRetryAfterToMills)(res.headers["retry-after"]) - }); - } else { - const error48 = new types_1.OTLPExporterError(res.statusMessage, res.statusCode, Buffer.concat(responseData).toString()); - onDone({ - status: "failure", - error: error48 - }); - } - }); - }); - req.setTimeout(timeoutMillis, () => { - req.destroy(); - onDone({ - status: "failure", - error: new Error("Request Timeout") - }); - }); - req.on("error", (error48) => { - onDone({ - status: "failure", - error: error48 - }); - }); - compressAndSend(req, params.compression, data, (error48) => { - onDone({ - status: "failure", - error: error48 - }); - }); - } - exports.sendWithHttp = sendWithHttp; - function compressAndSend(req, compression, data, onError) { - let dataStream = readableFromUint8Array(data); - if (compression === "gzip") { - req.setHeader("Content-Encoding", "gzip"); - dataStream = dataStream.on("error", onError).pipe(zlib.createGzip()).on("error", onError); - } - dataStream.pipe(req).on("error", onError); - } - exports.compressAndSend = compressAndSend; - function readableFromUint8Array(buff) { - const readable = new stream_1.Readable; - readable.push(buff); - readable.push(null); - return readable; - } - function createHttpAgent(rawUrl, agentOptions) { - const parsedUrl = new URL(rawUrl); - const Agent = parsedUrl.protocol === "http:" ? http2.Agent : https.Agent; - return new Agent(agentOptions); - } - exports.createHttpAgent = createHttpAgent; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/transport/http-exporter-transport.js -var require_http_exporter_transport2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createHttpExporterTransport = undefined; - - class HttpExporterTransport { - _parameters; - _utils = null; - constructor(_parameters) { - this._parameters = _parameters; - } - async send(data, timeoutMillis) { - const { agent: agent2, send } = this._loadUtils(); - return new Promise((resolve2) => { - send(this._parameters, agent2, data, (result) => { - resolve2(result); - }, timeoutMillis); - }); - } - shutdown() {} - _loadUtils() { - let utils = this._utils; - if (utils === null) { - const { - sendWithHttp, - createHttpAgent - } = require_http_transport_utils2(); - utils = this._utils = { - agent: createHttpAgent(this._parameters.url, this._parameters.agentOptions), - send: sendWithHttp - }; - } - return utils; - } - } - function createHttpExporterTransport(parameters) { - return new HttpExporterTransport(parameters); - } - exports.createHttpExporterTransport = createHttpExporterTransport; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/retrying-transport.js -var require_retrying_transport2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createRetryingTransport = undefined; - var MAX_ATTEMPTS = 5; - var INITIAL_BACKOFF = 1000; - var MAX_BACKOFF = 5000; - var BACKOFF_MULTIPLIER = 1.5; - var JITTER = 0.2; - function getJitter() { - return Math.random() * (2 * JITTER) - JITTER; - } - - class RetryingTransport { - _transport; - constructor(_transport) { - this._transport = _transport; - } - retry(data, timeoutMillis, inMillis) { - return new Promise((resolve2, reject) => { - setTimeout(() => { - this._transport.send(data, timeoutMillis).then(resolve2, reject); - }, inMillis); - }); - } - async send(data, timeoutMillis) { - const deadline = Date.now() + timeoutMillis; - let result = await this._transport.send(data, timeoutMillis); - let attempts = MAX_ATTEMPTS; - let nextBackoff = INITIAL_BACKOFF; - while (result.status === "retryable" && attempts > 0) { - attempts--; - const backoff = Math.max(Math.min(nextBackoff, MAX_BACKOFF) + getJitter(), 0); - nextBackoff = nextBackoff * BACKOFF_MULTIPLIER; - const retryInMillis = result.retryInMillis ?? backoff; - const remainingTimeoutMillis = deadline - Date.now(); - if (retryInMillis > remainingTimeoutMillis) { - return result; - } - result = await this.retry(data, remainingTimeoutMillis, retryInMillis); - } - return result; - } - shutdown() { - return this._transport.shutdown(); - } - } - function createRetryingTransport(options) { - return new RetryingTransport(options.transport); - } - exports.createRetryingTransport = createRetryingTransport; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/otlp-http-export-delegate.js -var require_otlp_http_export_delegate2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpHttpExportDelegate = undefined; - var otlp_export_delegate_1 = require_otlp_export_delegate2(); - var http_exporter_transport_1 = require_http_exporter_transport2(); - var bounded_queue_export_promise_handler_1 = require_bounded_queue_export_promise_handler2(); - var retrying_transport_1 = require_retrying_transport2(); - function createOtlpHttpExportDelegate(options, serializer) { - return (0, otlp_export_delegate_1.createOtlpExportDelegate)({ - transport: (0, retrying_transport_1.createRetryingTransport)({ - transport: (0, http_exporter_transport_1.createHttpExporterTransport)(options) - }), - serializer, - promiseHandler: (0, bounded_queue_export_promise_handler_1.createBoundedQueueExportPromiseHandler)(options) - }, { timeout: options.timeoutMillis }); - } - exports.createOtlpHttpExportDelegate = createOtlpHttpExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/shared-env-configuration.js -var require_shared_env_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getSharedConfigurationFromEnvironment = undefined; - var api_1 = require_src(); - function parseAndValidateTimeoutFromEnv(timeoutEnvVar) { - const envTimeout = process.env[timeoutEnvVar]?.trim(); - if (envTimeout != null && envTimeout !== "") { - const definedTimeout = Number(envTimeout); - if (Number.isFinite(definedTimeout) && definedTimeout > 0) { - return definedTimeout; - } - api_1.diag.warn(`Configuration: ${timeoutEnvVar} is invalid, expected number greater than 0 (actual: ${envTimeout})`); - } - return; - } - function getTimeoutFromEnv(signalIdentifier) { - const specificTimeout = parseAndValidateTimeoutFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_TIMEOUT`); - const nonSpecificTimeout = parseAndValidateTimeoutFromEnv("OTEL_EXPORTER_OTLP_TIMEOUT"); - return specificTimeout ?? nonSpecificTimeout; - } - function parseAndValidateCompressionFromEnv(compressionEnvVar) { - const compression = process.env[compressionEnvVar]?.trim(); - if (compression === "") { - return; - } - if (compression == null || compression === "none" || compression === "gzip") { - return compression; - } - api_1.diag.warn(`Configuration: ${compressionEnvVar} is invalid, expected 'none' or 'gzip' (actual: '${compression}')`); - return; - } - function getCompressionFromEnv(signalIdentifier) { - const specificCompression = parseAndValidateCompressionFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_COMPRESSION`); - const nonSpecificCompression = parseAndValidateCompressionFromEnv("OTEL_EXPORTER_OTLP_COMPRESSION"); - return specificCompression ?? nonSpecificCompression; - } - function getSharedConfigurationFromEnvironment(signalIdentifier) { - return { - timeoutMillis: getTimeoutFromEnv(signalIdentifier), - compression: getCompressionFromEnv(signalIdentifier) - }; - } - exports.getSharedConfigurationFromEnvironment = getSharedConfigurationFromEnvironment; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/util.js -var require_util9 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validateAndNormalizeHeaders = undefined; - var api_1 = require_src(); - function validateAndNormalizeHeaders(partialHeaders) { - return () => { - const headers = {}; - Object.entries(partialHeaders?.() ?? {}).forEach(([key, value]) => { - if (typeof value !== "undefined") { - headers[key] = String(value); - } else { - api_1.diag.warn(`Header "${key}" has invalid value (${value}) and will be ignored`); - } - }); - return headers; - }; - } - exports.validateAndNormalizeHeaders = validateAndNormalizeHeaders; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/otlp-http-configuration.js -var require_otlp_http_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getHttpConfigurationDefaults = exports.mergeOtlpHttpConfigurationWithDefaults = undefined; - var shared_configuration_1 = require_shared_configuration2(); - var util_1 = require_util9(); - function mergeHeaders(userProvidedHeaders, fallbackHeaders, defaultHeaders) { - const requiredHeaders = { - ...defaultHeaders() - }; - const headers = {}; - return () => { - if (fallbackHeaders != null) { - Object.assign(headers, fallbackHeaders()); - } - if (userProvidedHeaders != null) { - Object.assign(headers, userProvidedHeaders()); - } - return Object.assign(headers, requiredHeaders); - }; - } - function validateUserProvidedUrl(url2) { - if (url2 == null) { - return; - } - try { - new URL(url2); - return url2; - } catch { - throw new Error(`Configuration: Could not parse user-provided export URL: '${url2}'`); - } - } - function mergeOtlpHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - return { - ...(0, shared_configuration_1.mergeOtlpSharedConfigurationWithDefaults)(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration), - headers: mergeHeaders((0, util_1.validateAndNormalizeHeaders)(userProvidedConfiguration.headers), fallbackConfiguration.headers, defaultConfiguration.headers), - url: validateUserProvidedUrl(userProvidedConfiguration.url) ?? fallbackConfiguration.url ?? defaultConfiguration.url, - agentOptions: userProvidedConfiguration.agentOptions ?? fallbackConfiguration.agentOptions ?? defaultConfiguration.agentOptions - }; - } - exports.mergeOtlpHttpConfigurationWithDefaults = mergeOtlpHttpConfigurationWithDefaults; - function getHttpConfigurationDefaults(requiredHeaders, signalResourcePath) { - return { - ...(0, shared_configuration_1.getSharedConfigurationDefaults)(), - headers: () => requiredHeaders, - url: "http://localhost:4318/" + signalResourcePath, - agentOptions: { keepAlive: true } - }; - } - exports.getHttpConfigurationDefaults = getHttpConfigurationDefaults; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/otlp-http-env-configuration.js -var require_otlp_http_env_configuration = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getHttpConfigurationFromEnvironment = undefined; - var core_1 = require_src89(); - var api_1 = require_src(); - var shared_env_configuration_1 = require_shared_env_configuration2(); - var shared_configuration_1 = require_shared_configuration2(); - function getStaticHeadersFromEnv(signalIdentifier) { - const signalSpecificRawHeaders = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_HEADERS`]?.trim(); - const nonSignalSpecificRawHeaders = process.env["OTEL_EXPORTER_OTLP_HEADERS"]?.trim(); - const signalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(signalSpecificRawHeaders); - const nonSignalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(nonSignalSpecificRawHeaders); - if (Object.keys(signalSpecificHeaders).length === 0 && Object.keys(nonSignalSpecificHeaders).length === 0) { - return; - } - return Object.assign({}, (0, core_1.parseKeyPairsIntoRecord)(nonSignalSpecificRawHeaders), (0, core_1.parseKeyPairsIntoRecord)(signalSpecificRawHeaders)); - } - function appendRootPathToUrlIfNeeded(url2) { - try { - const parsedUrl = new URL(url2); - return parsedUrl.toString(); - } catch { - api_1.diag.warn(`Configuration: Could not parse environment-provided export URL: '${url2}', falling back to undefined`); - return; - } - } - function appendResourcePathToUrl(url2, path) { - try { - new URL(url2); - } catch { - api_1.diag.warn(`Configuration: Could not parse environment-provided export URL: '${url2}', falling back to undefined`); - return; - } - if (!url2.endsWith("/")) { - url2 = url2 + "/"; - } - url2 += path; - try { - new URL(url2); - } catch { - api_1.diag.warn(`Configuration: Provided URL appended with '${path}' is not a valid URL, using 'undefined' instead of '${url2}'`); - return; - } - return url2; - } - function getNonSpecificUrlFromEnv(signalResourcePath) { - const envUrl = process.env.OTEL_EXPORTER_OTLP_ENDPOINT?.trim(); - if (envUrl == null || envUrl === "") { - return; - } - return appendResourcePathToUrl(envUrl, signalResourcePath); - } - function getSpecificUrlFromEnv(signalIdentifier) { - const envUrl = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_ENDPOINT`]?.trim(); - if (envUrl == null || envUrl === "") { - return; - } - return appendRootPathToUrlIfNeeded(envUrl); - } - function getHttpConfigurationFromEnvironment(signalIdentifier, signalResourcePath) { - return { - ...(0, shared_env_configuration_1.getSharedConfigurationFromEnvironment)(signalIdentifier), - url: getSpecificUrlFromEnv(signalIdentifier) ?? getNonSpecificUrlFromEnv(signalResourcePath), - headers: (0, shared_configuration_1.wrapStaticHeadersInFunction)(getStaticHeadersFromEnv(signalIdentifier)) - }; - } - exports.getHttpConfigurationFromEnvironment = getHttpConfigurationFromEnvironment; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/configuration/convert-legacy-node-http-options.js -var require_convert_legacy_node_http_options2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.convertLegacyHttpOptions = undefined; - var otlp_http_configuration_1 = require_otlp_http_configuration2(); - var otlp_http_env_configuration_1 = require_otlp_http_env_configuration(); - var api_1 = require_src(); - var shared_configuration_1 = require_shared_configuration2(); - function convertLegacyAgentOptions(config2) { - if (config2?.keepAlive != null) { - if (config2.httpAgentOptions != null) { - if (config2.httpAgentOptions.keepAlive == null) { - config2.httpAgentOptions.keepAlive = config2.keepAlive; - } - } else { - config2.httpAgentOptions = { - keepAlive: config2.keepAlive - }; - } - } - return config2.httpAgentOptions; - } - function convertLegacyHttpOptions(config2, signalIdentifier, signalResourcePath, requiredHeaders) { - if (config2.metadata) { - api_1.diag.warn("Metadata cannot be set when using http"); - } - return (0, otlp_http_configuration_1.mergeOtlpHttpConfigurationWithDefaults)({ - url: config2.url, - headers: (0, shared_configuration_1.wrapStaticHeadersInFunction)(config2.headers), - concurrencyLimit: config2.concurrencyLimit, - timeoutMillis: config2.timeoutMillis, - compression: config2.compression, - agentOptions: convertLegacyAgentOptions(config2) - }, (0, otlp_http_env_configuration_1.getHttpConfigurationFromEnvironment)(signalIdentifier, signalResourcePath), (0, otlp_http_configuration_1.getHttpConfigurationDefaults)(requiredHeaders, signalResourcePath)); - } - exports.convertLegacyHttpOptions = convertLegacyHttpOptions; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-exporter-base/build/src/index-node-http.js -var require_index_node_http2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.convertLegacyHttpOptions = exports.getSharedConfigurationFromEnvironment = exports.createOtlpHttpExportDelegate = undefined; - var otlp_http_export_delegate_1 = require_otlp_http_export_delegate2(); - Object.defineProperty(exports, "createOtlpHttpExportDelegate", { enumerable: true, get: function() { - return otlp_http_export_delegate_1.createOtlpHttpExportDelegate; - } }); - var shared_env_configuration_1 = require_shared_env_configuration2(); - Object.defineProperty(exports, "getSharedConfigurationFromEnvironment", { enumerable: true, get: function() { - return shared_env_configuration_1.getSharedConfigurationFromEnvironment; - } }); - var convert_legacy_node_http_options_1 = require_convert_legacy_node_http_options2(); - Object.defineProperty(exports, "convertLegacyHttpOptions", { enumerable: true, get: function() { - return convert_legacy_node_http_options_1.convertLegacyHttpOptions; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/platform/node/OTLPLogExporter.js -var require_OTLPLogExporter4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var otlp_exporter_base_1 = require_src98(); - var otlp_transformer_1 = require_src99(); - var version_1 = require_version50(); - var node_http_1 = require_index_node_http2(); - - class OTLPLogExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "LOGS", "v1/logs", { - "User-Agent": `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`, - "Content-Type": "application/json" - }), otlp_transformer_1.JsonLogsSerializer)); - } - } - exports.OTLPLogExporter = OTLPLogExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/platform/node/index.js -var require_node26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var OTLPLogExporter_1 = require_OTLPLogExporter4(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return OTLPLogExporter_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/platform/index.js -var require_platform25 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var node_1 = require_node26(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return node_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-http/build/src/index.js -var require_src100 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var platform_1 = require_platform25(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return platform_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/create-service-client-constructor.js -var require_create_service_client_constructor2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createServiceClientConstructor = undefined; - var grpc = require_src76(); - function createServiceClientConstructor(path, name) { - const serviceDefinition = { - export: { - path, - requestStream: false, - responseStream: false, - requestSerialize: (arg) => { - return arg; - }, - requestDeserialize: (arg) => { - return arg; - }, - responseSerialize: (arg) => { - return arg; - }, - responseDeserialize: (arg) => { - return arg; - } - } - }; - return grpc.makeGenericClientConstructor(serviceDefinition, name); - } - exports.createServiceClientConstructor = createServiceClientConstructor; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/grpc-exporter-transport.js -var require_grpc_exporter_transport2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpGrpcExporterTransport = exports.GrpcExporterTransport = exports.createEmptyMetadata = exports.createSslCredentials = exports.createInsecureCredentials = undefined; - var GRPC_COMPRESSION_NONE = 0; - var GRPC_COMPRESSION_GZIP = 2; - function toGrpcCompression(compression) { - return compression === "gzip" ? GRPC_COMPRESSION_GZIP : GRPC_COMPRESSION_NONE; - } - function createInsecureCredentials() { - const { - credentials - } = require_src76(); - return credentials.createInsecure(); - } - exports.createInsecureCredentials = createInsecureCredentials; - function createSslCredentials(rootCert, privateKey, certChain) { - const { - credentials - } = require_src76(); - return credentials.createSsl(rootCert, privateKey, certChain); - } - exports.createSslCredentials = createSslCredentials; - function createEmptyMetadata() { - const { - Metadata - } = require_src76(); - return new Metadata; - } - exports.createEmptyMetadata = createEmptyMetadata; - - class GrpcExporterTransport { - _parameters; - _client; - _metadata; - constructor(_parameters) { - this._parameters = _parameters; - } - shutdown() { - this._client?.close(); - } - send(data, timeoutMillis) { - const buffer = Buffer.from(data); - if (this._client == null) { - const { - createServiceClientConstructor - } = require_create_service_client_constructor2(); - try { - this._metadata = this._parameters.metadata(); - } catch (error48) { - return Promise.resolve({ - status: "failure", - error: error48 - }); - } - const clientConstructor = createServiceClientConstructor(this._parameters.grpcPath, this._parameters.grpcName); - try { - this._client = new clientConstructor(this._parameters.address, this._parameters.credentials(), { - "grpc.default_compression_algorithm": toGrpcCompression(this._parameters.compression) - }); - } catch (error48) { - return Promise.resolve({ - status: "failure", - error: error48 - }); - } - } - return new Promise((resolve2) => { - const deadline = Date.now() + timeoutMillis; - if (this._metadata == null) { - return resolve2({ - error: new Error("metadata was null"), - status: "failure" - }); - } - this._client.export(buffer, this._metadata, { deadline }, (err, response) => { - if (err) { - resolve2({ - status: "failure", - error: err - }); - } else { - resolve2({ - data: response, - status: "success" - }); - } - }); - }); - } - } - exports.GrpcExporterTransport = GrpcExporterTransport; - function createOtlpGrpcExporterTransport(options) { - return new GrpcExporterTransport(options); - } - exports.createOtlpGrpcExporterTransport = createOtlpGrpcExporterTransport; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/version.js -var require_version51 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/configuration/otlp-grpc-configuration.js -var require_otlp_grpc_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOtlpGrpcDefaultConfiguration = exports.mergeOtlpGrpcConfigurationWithDefaults = exports.validateAndNormalizeUrl = undefined; - var otlp_exporter_base_1 = require_src98(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport2(); - var version_1 = require_version51(); - var url_1 = __require("url"); - var api_1 = require_src(); - function validateAndNormalizeUrl(url2) { - url2 = url2.trim(); - const hasProtocol = url2.match(/^([\w]{1,8}):\/\//); - if (!hasProtocol) { - url2 = `https://${url2}`; - } - const target = new url_1.URL(url2); - if (target.protocol === "unix:") { - return url2; - } - if (target.pathname && target.pathname !== "/") { - api_1.diag.warn("URL path should not be set when using grpc, the path part of the URL will be ignored."); - } - if (target.protocol !== "" && !target.protocol?.match(/^(http)s?:$/)) { - api_1.diag.warn("URL protocol should be http(s)://. Using http://."); - } - return target.host; - } - exports.validateAndNormalizeUrl = validateAndNormalizeUrl; - function overrideMetadataEntriesIfNotPresent(metadata, additionalMetadata) { - for (const [key, value] of Object.entries(additionalMetadata.getMap())) { - if (metadata.get(key).length < 1) { - metadata.set(key, value); - } - } - } - function mergeOtlpGrpcConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) { - const rawUrl = userProvidedConfiguration.url ?? fallbackConfiguration.url ?? defaultConfiguration.url; - return { - ...(0, otlp_exporter_base_1.mergeOtlpSharedConfigurationWithDefaults)(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration), - metadata: () => { - const metadata = defaultConfiguration.metadata(); - overrideMetadataEntriesIfNotPresent(metadata, userProvidedConfiguration.metadata?.().clone() ?? (0, grpc_exporter_transport_1.createEmptyMetadata)()); - overrideMetadataEntriesIfNotPresent(metadata, fallbackConfiguration.metadata?.() ?? (0, grpc_exporter_transport_1.createEmptyMetadata)()); - return metadata; - }, - url: validateAndNormalizeUrl(rawUrl), - credentials: userProvidedConfiguration.credentials ?? fallbackConfiguration.credentials?.(rawUrl) ?? defaultConfiguration.credentials(rawUrl) - }; - } - exports.mergeOtlpGrpcConfigurationWithDefaults = mergeOtlpGrpcConfigurationWithDefaults; - function getOtlpGrpcDefaultConfiguration() { - return { - ...(0, otlp_exporter_base_1.getSharedConfigurationDefaults)(), - metadata: () => { - const metadata = (0, grpc_exporter_transport_1.createEmptyMetadata)(); - metadata.set("User-Agent", `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`); - return metadata; - }, - url: "http://localhost:4317", - credentials: (url2) => { - if (url2.startsWith("http://")) { - return () => (0, grpc_exporter_transport_1.createInsecureCredentials)(); - } else { - return () => (0, grpc_exporter_transport_1.createSslCredentials)(); - } - } - }; - } - exports.getOtlpGrpcDefaultConfiguration = getOtlpGrpcDefaultConfiguration; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/configuration/otlp-grpc-env-configuration.js -var require_otlp_grpc_env_configuration2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getOtlpGrpcConfigurationFromEnv = undefined; - var core_1 = require_src89(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport2(); - var node_http_1 = require_index_node_http2(); - var fs = __require("fs"); - var path = __require("path"); - var api_1 = require_src(); - function fallbackIfNullishOrBlank(signalSpecific, nonSignalSpecific) { - if (signalSpecific != null && signalSpecific !== "") { - return signalSpecific; - } - if (nonSignalSpecific != null && nonSignalSpecific !== "") { - return nonSignalSpecific; - } - return; - } - function getMetadataFromEnv(signalIdentifier) { - const signalSpecificRawHeaders = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_HEADERS`]?.trim(); - const nonSignalSpecificRawHeaders = process.env["OTEL_EXPORTER_OTLP_HEADERS"]?.trim(); - const signalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(signalSpecificRawHeaders); - const nonSignalSpecificHeaders = (0, core_1.parseKeyPairsIntoRecord)(nonSignalSpecificRawHeaders); - if (Object.keys(signalSpecificHeaders).length === 0 && Object.keys(nonSignalSpecificHeaders).length === 0) { - return; - } - const mergeHeaders = Object.assign({}, nonSignalSpecificHeaders, signalSpecificHeaders); - const metadata = (0, grpc_exporter_transport_1.createEmptyMetadata)(); - for (const [key, value] of Object.entries(mergeHeaders)) { - metadata.set(key, value); - } - return metadata; - } - function getMetadataProviderFromEnv(signalIdentifier) { - const metadata = getMetadataFromEnv(signalIdentifier); - if (metadata == null) { - return; - } - return () => metadata; - } - function getUrlFromEnv(signalIdentifier) { - const specificEndpoint = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_ENDPOINT`]?.trim(); - const nonSpecificEndpoint = process.env[`OTEL_EXPORTER_OTLP_ENDPOINT`]?.trim(); - return fallbackIfNullishOrBlank(specificEndpoint, nonSpecificEndpoint); - } - function getInsecureSettingFromEnv(signalIdentifier) { - const signalSpecificInsecureValue = process.env[`OTEL_EXPORTER_OTLP_${signalIdentifier}_INSECURE`]?.toLowerCase().trim(); - const nonSignalSpecificInsecureValue = process.env[`OTEL_EXPORTER_OTLP_INSECURE`]?.toLowerCase().trim(); - return fallbackIfNullishOrBlank(signalSpecificInsecureValue, nonSignalSpecificInsecureValue) === "true"; - } - function readFileFromEnv(signalSpecificEnvVar, nonSignalSpecificEnvVar, warningMessage) { - const signalSpecificPath = process.env[signalSpecificEnvVar]?.trim(); - const nonSignalSpecificPath = process.env[nonSignalSpecificEnvVar]?.trim(); - const filePath = fallbackIfNullishOrBlank(signalSpecificPath, nonSignalSpecificPath); - if (filePath != null) { - try { - return fs.readFileSync(path.resolve(process.cwd(), filePath)); - } catch { - api_1.diag.warn(warningMessage); - return; - } - } else { - return; - } - } - function getClientCertificateFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE", "Failed to read client certificate chain file"); - } - function getClientKeyFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CLIENT_KEY`, "OTEL_EXPORTER_OTLP_CLIENT_KEY", "Failed to read client certificate private key file"); - } - function getRootCertificateFromEnv(signalIdentifier) { - return readFileFromEnv(`OTEL_EXPORTER_OTLP_${signalIdentifier}_CERTIFICATE`, "OTEL_EXPORTER_OTLP_CERTIFICATE", "Failed to read root certificate file"); - } - function getCredentialsFromEnvIgnoreInsecure(signalIdentifier) { - const clientKey = getClientKeyFromEnv(signalIdentifier); - const clientCertificate = getClientCertificateFromEnv(signalIdentifier); - const rootCertificate = getRootCertificateFromEnv(signalIdentifier); - const clientChainIntact = clientKey != null && clientCertificate != null; - if (rootCertificate != null && !clientChainIntact) { - api_1.diag.warn("Client key and certificate must both be provided, but one was missing - attempting to create credentials from just the root certificate"); - return (0, grpc_exporter_transport_1.createSslCredentials)(getRootCertificateFromEnv(signalIdentifier)); - } - return (0, grpc_exporter_transport_1.createSslCredentials)(rootCertificate, clientKey, clientCertificate); - } - function getCredentialsFromEnv(signalIdentifier) { - if (getInsecureSettingFromEnv(signalIdentifier)) { - return (0, grpc_exporter_transport_1.createInsecureCredentials)(); - } - return getCredentialsFromEnvIgnoreInsecure(signalIdentifier); - } - function getOtlpGrpcConfigurationFromEnv(signalIdentifier) { - return { - ...(0, node_http_1.getSharedConfigurationFromEnvironment)(signalIdentifier), - metadata: getMetadataProviderFromEnv(signalIdentifier), - url: getUrlFromEnv(signalIdentifier), - credentials: (finalResolvedUrl) => { - if (finalResolvedUrl.startsWith("http://")) { - return () => { - return (0, grpc_exporter_transport_1.createInsecureCredentials)(); - }; - } else if (finalResolvedUrl.startsWith("https://")) { - return () => { - return getCredentialsFromEnvIgnoreInsecure(signalIdentifier); - }; - } - return () => { - return getCredentialsFromEnv(signalIdentifier); - }; - } - }; - } - exports.getOtlpGrpcConfigurationFromEnv = getOtlpGrpcConfigurationFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/configuration/convert-legacy-otlp-grpc-options.js -var require_convert_legacy_otlp_grpc_options2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.convertLegacyOtlpGrpcOptions = undefined; - var api_1 = require_src(); - var otlp_grpc_configuration_1 = require_otlp_grpc_configuration2(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport2(); - var otlp_grpc_env_configuration_1 = require_otlp_grpc_env_configuration2(); - function convertLegacyOtlpGrpcOptions(config2, signalIdentifier) { - if (config2.headers) { - api_1.diag.warn("Headers cannot be set when using grpc"); - } - const userProvidedCredentials = config2.credentials; - return (0, otlp_grpc_configuration_1.mergeOtlpGrpcConfigurationWithDefaults)({ - url: config2.url, - metadata: () => { - return config2.metadata ?? (0, grpc_exporter_transport_1.createEmptyMetadata)(); - }, - compression: config2.compression, - timeoutMillis: config2.timeoutMillis, - concurrencyLimit: config2.concurrencyLimit, - credentials: userProvidedCredentials != null ? () => userProvidedCredentials : undefined - }, (0, otlp_grpc_env_configuration_1.getOtlpGrpcConfigurationFromEnv)(signalIdentifier), (0, otlp_grpc_configuration_1.getOtlpGrpcDefaultConfiguration)()); - } - exports.convertLegacyOtlpGrpcOptions = convertLegacyOtlpGrpcOptions; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/otlp-grpc-export-delegate.js -var require_otlp_grpc_export_delegate2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpGrpcExportDelegate = undefined; - var otlp_exporter_base_1 = require_src98(); - var grpc_exporter_transport_1 = require_grpc_exporter_transport2(); - function createOtlpGrpcExportDelegate(options, serializer, grpcName, grpcPath) { - return (0, otlp_exporter_base_1.createOtlpNetworkExportDelegate)(options, serializer, (0, grpc_exporter_transport_1.createOtlpGrpcExporterTransport)({ - address: options.url, - compression: options.compression, - credentials: options.credentials, - metadata: options.metadata, - grpcName, - grpcPath - })); - } - exports.createOtlpGrpcExportDelegate = createOtlpGrpcExportDelegate; -}); - -// ../../../../node_modules/.bun/@opentelemetry+otlp-grpc-exporter-base@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/otlp-grpc-exporter-base/build/src/index.js -var require_src101 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createOtlpGrpcExportDelegate = exports.convertLegacyOtlpGrpcOptions = undefined; - var convert_legacy_otlp_grpc_options_1 = require_convert_legacy_otlp_grpc_options2(); - Object.defineProperty(exports, "convertLegacyOtlpGrpcOptions", { enumerable: true, get: function() { - return convert_legacy_otlp_grpc_options_1.convertLegacyOtlpGrpcOptions; - } }); - var otlp_grpc_export_delegate_1 = require_otlp_grpc_export_delegate2(); - Object.defineProperty(exports, "createOtlpGrpcExportDelegate", { enumerable: true, get: function() { - return otlp_grpc_export_delegate_1.createOtlpGrpcExportDelegate; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-grpc@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-grpc/build/src/OTLPLogExporter.js -var require_OTLPLogExporter5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var otlp_grpc_exporter_base_1 = require_src101(); - var otlp_transformer_1 = require_src99(); - var otlp_exporter_base_1 = require_src98(); - - class OTLPLogExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, otlp_grpc_exporter_base_1.createOtlpGrpcExportDelegate)((0, otlp_grpc_exporter_base_1.convertLegacyOtlpGrpcOptions)(config2, "LOGS"), otlp_transformer_1.ProtobufLogsSerializer, "LogsExportService", "/opentelemetry.proto.collector.logs.v1.LogsService/Export")); - } - } - exports.OTLPLogExporter = OTLPLogExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-grpc@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-grpc/build/src/index.js -var require_src102 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var OTLPLogExporter_1 = require_OTLPLogExporter5(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return OTLPLogExporter_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/version.js -var require_version52 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/platform/node/OTLPLogExporter.js -var require_OTLPLogExporter6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var otlp_exporter_base_1 = require_src98(); - var otlp_transformer_1 = require_src99(); - var node_http_1 = require_index_node_http2(); - var version_1 = require_version52(); - - class OTLPLogExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "LOGS", "v1/logs", { - "User-Agent": `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`, - "Content-Type": "application/x-protobuf" - }), otlp_transformer_1.ProtobufLogsSerializer)); - } - } - exports.OTLPLogExporter = OTLPLogExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/platform/node/index.js -var require_node27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var OTLPLogExporter_1 = require_OTLPLogExporter6(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return OTLPLogExporter_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/platform/index.js -var require_platform26 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var node_1 = require_node27(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return node_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-logs-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-logs-otlp-proto/build/src/index.js -var require_src103 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPLogExporter = undefined; - var platform_1 = require_platform26(); - Object.defineProperty(exports, "OTLPLogExporter", { enumerable: true, get: function() { - return platform_1.OTLPLogExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/OTLPMetricExporterOptions.js -var require_OTLPMetricExporterOptions2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AggregationTemporalityPreference = undefined; - var AggregationTemporalityPreference; - (function(AggregationTemporalityPreference2) { - AggregationTemporalityPreference2[AggregationTemporalityPreference2["DELTA"] = 0] = "DELTA"; - AggregationTemporalityPreference2[AggregationTemporalityPreference2["CUMULATIVE"] = 1] = "CUMULATIVE"; - AggregationTemporalityPreference2[AggregationTemporalityPreference2["LOWMEMORY"] = 2] = "LOWMEMORY"; - })(AggregationTemporalityPreference = exports.AggregationTemporalityPreference || (exports.AggregationTemporalityPreference = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/OTLPMetricExporterBase.js -var require_OTLPMetricExporterBase2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporterBase = exports.LowMemoryTemporalitySelector = exports.DeltaTemporalitySelector = exports.CumulativeTemporalitySelector = undefined; - var core_1 = require_src89(); - var sdk_metrics_1 = require_src93(); - var OTLPMetricExporterOptions_1 = require_OTLPMetricExporterOptions2(); - var otlp_exporter_base_1 = require_src98(); - var api_1 = require_src(); - var CumulativeTemporalitySelector = () => sdk_metrics_1.AggregationTemporality.CUMULATIVE; - exports.CumulativeTemporalitySelector = CumulativeTemporalitySelector; - var DeltaTemporalitySelector = (instrumentType) => { - switch (instrumentType) { - case sdk_metrics_1.InstrumentType.COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_COUNTER: - case sdk_metrics_1.InstrumentType.GAUGE: - case sdk_metrics_1.InstrumentType.HISTOGRAM: - case sdk_metrics_1.InstrumentType.OBSERVABLE_GAUGE: - return sdk_metrics_1.AggregationTemporality.DELTA; - case sdk_metrics_1.InstrumentType.UP_DOWN_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: - return sdk_metrics_1.AggregationTemporality.CUMULATIVE; - } - }; - exports.DeltaTemporalitySelector = DeltaTemporalitySelector; - var LowMemoryTemporalitySelector = (instrumentType) => { - switch (instrumentType) { - case sdk_metrics_1.InstrumentType.COUNTER: - case sdk_metrics_1.InstrumentType.HISTOGRAM: - return sdk_metrics_1.AggregationTemporality.DELTA; - case sdk_metrics_1.InstrumentType.GAUGE: - case sdk_metrics_1.InstrumentType.UP_DOWN_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_COUNTER: - case sdk_metrics_1.InstrumentType.OBSERVABLE_GAUGE: - return sdk_metrics_1.AggregationTemporality.CUMULATIVE; - } - }; - exports.LowMemoryTemporalitySelector = LowMemoryTemporalitySelector; - function chooseTemporalitySelectorFromEnvironment() { - const configuredTemporality = ((0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE") ?? "cumulative").toLowerCase(); - if (configuredTemporality === "cumulative") { - return exports.CumulativeTemporalitySelector; - } - if (configuredTemporality === "delta") { - return exports.DeltaTemporalitySelector; - } - if (configuredTemporality === "lowmemory") { - return exports.LowMemoryTemporalitySelector; - } - api_1.diag.warn(`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '${configuredTemporality}', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead.`); - return exports.CumulativeTemporalitySelector; - } - function chooseTemporalitySelector(temporalityPreference) { - if (temporalityPreference != null) { - if (temporalityPreference === OTLPMetricExporterOptions_1.AggregationTemporalityPreference.DELTA) { - return exports.DeltaTemporalitySelector; - } else if (temporalityPreference === OTLPMetricExporterOptions_1.AggregationTemporalityPreference.LOWMEMORY) { - return exports.LowMemoryTemporalitySelector; - } - return exports.CumulativeTemporalitySelector; - } - return chooseTemporalitySelectorFromEnvironment(); - } - var DEFAULT_AGGREGATION2 = Object.freeze({ - type: sdk_metrics_1.AggregationType.DEFAULT - }); - function chooseAggregationSelector(config2) { - return config2?.aggregationPreference ?? (() => DEFAULT_AGGREGATION2); - } - - class OTLPMetricExporterBase extends otlp_exporter_base_1.OTLPExporterBase { - _aggregationTemporalitySelector; - _aggregationSelector; - constructor(delegate, config2) { - super(delegate); - this._aggregationSelector = chooseAggregationSelector(config2); - this._aggregationTemporalitySelector = chooseTemporalitySelector(config2?.temporalityPreference); - } - selectAggregation(instrumentType) { - return this._aggregationSelector(instrumentType); - } - selectAggregationTemporality(instrumentType) { - return this._aggregationTemporalitySelector(instrumentType); - } - } - exports.OTLPMetricExporterBase = OTLPMetricExporterBase; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/version.js -var require_version53 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/platform/node/OTLPMetricExporter.js -var require_OTLPMetricExporter4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporterBase_1 = require_OTLPMetricExporterBase2(); - var otlp_transformer_1 = require_src99(); - var version_1 = require_version53(); - var node_http_1 = require_index_node_http2(); - var USER_AGENT = { - "User-Agent": `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}` - }; - - class OTLPMetricExporter extends OTLPMetricExporterBase_1.OTLPMetricExporterBase { - constructor(config2) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2 ?? {}, "METRICS", "v1/metrics", { - ...USER_AGENT, - "Content-Type": "application/json" - }), otlp_transformer_1.JsonMetricsSerializer), config2); - } - } - exports.OTLPMetricExporter = OTLPMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/platform/node/index.js -var require_node28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporter_1 = require_OTLPMetricExporter4(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return OTLPMetricExporter_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/platform/index.js -var require_platform27 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var node_1 = require_node28(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return node_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/src/index.js -var require_src104 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporterBase = exports.LowMemoryTemporalitySelector = exports.DeltaTemporalitySelector = exports.CumulativeTemporalitySelector = exports.AggregationTemporalityPreference = exports.OTLPMetricExporter = undefined; - var platform_1 = require_platform27(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return platform_1.OTLPMetricExporter; - } }); - var OTLPMetricExporterOptions_1 = require_OTLPMetricExporterOptions2(); - Object.defineProperty(exports, "AggregationTemporalityPreference", { enumerable: true, get: function() { - return OTLPMetricExporterOptions_1.AggregationTemporalityPreference; - } }); - var OTLPMetricExporterBase_1 = require_OTLPMetricExporterBase2(); - Object.defineProperty(exports, "CumulativeTemporalitySelector", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.CumulativeTemporalitySelector; - } }); - Object.defineProperty(exports, "DeltaTemporalitySelector", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.DeltaTemporalitySelector; - } }); - Object.defineProperty(exports, "LowMemoryTemporalitySelector", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.LowMemoryTemporalitySelector; - } }); - Object.defineProperty(exports, "OTLPMetricExporterBase", { enumerable: true, get: function() { - return OTLPMetricExporterBase_1.OTLPMetricExporterBase; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-grpc@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-grpc/build/src/OTLPMetricExporter.js -var require_OTLPMetricExporter5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var exporter_metrics_otlp_http_1 = require_src104(); - var otlp_grpc_exporter_base_1 = require_src101(); - var otlp_transformer_1 = require_src99(); - - class OTLPMetricExporter extends exporter_metrics_otlp_http_1.OTLPMetricExporterBase { - constructor(config2) { - super((0, otlp_grpc_exporter_base_1.createOtlpGrpcExportDelegate)((0, otlp_grpc_exporter_base_1.convertLegacyOtlpGrpcOptions)(config2 ?? {}, "METRICS"), otlp_transformer_1.ProtobufMetricsSerializer, "MetricsExportService", "/opentelemetry.proto.collector.metrics.v1.MetricsService/Export"), config2); - } - } - exports.OTLPMetricExporter = OTLPMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-grpc@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-grpc/build/src/index.js -var require_src105 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporter_1 = require_OTLPMetricExporter5(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return OTLPMetricExporter_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/version.js -var require_version54 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/platform/node/OTLPMetricExporter.js -var require_OTLPMetricExporter6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var exporter_metrics_otlp_http_1 = require_src104(); - var otlp_transformer_1 = require_src99(); - var version_1 = require_version54(); - var node_http_1 = require_index_node_http2(); - - class OTLPMetricExporter extends exporter_metrics_otlp_http_1.OTLPMetricExporterBase { - constructor(config2) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2 ?? {}, "METRICS", "v1/metrics", { - "User-Agent": `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`, - "Content-Type": "application/x-protobuf" - }), otlp_transformer_1.ProtobufMetricsSerializer), config2); - } - } - exports.OTLPMetricExporter = OTLPMetricExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/platform/node/index.js -var require_node29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var OTLPMetricExporter_1 = require_OTLPMetricExporter6(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return OTLPMetricExporter_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/platform/index.js -var require_platform28 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var node_1 = require_node29(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return node_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-metrics-otlp-proto/build/src/index.js -var require_src106 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPMetricExporter = undefined; - var platform_1 = require_platform28(); - Object.defineProperty(exports, "OTLPMetricExporter", { enumerable: true, get: function() { - return platform_1.OTLPMetricExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-prometheus@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusSerializer.js -var require_PrometheusSerializer2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PrometheusSerializer = undefined; - var api_1 = require_src(); - var sdk_metrics_1 = require_src93(); - var core_1 = require_src89(); - function escapeString(str) { - return str.replace(/\\/g, "\\\\").replace(/\n/g, "\\n"); - } - function escapeAttributeValue(str = "") { - if (typeof str !== "string") { - str = JSON.stringify(str); - } - return escapeString(str).replace(/"/g, "\\\""); - } - var invalidCharacterRegex = /[^a-z0-9_]/gi; - var multipleUnderscoreRegex = /_{2,}/g; - function sanitizePrometheusMetricName(name) { - return name.replace(invalidCharacterRegex, "_").replace(multipleUnderscoreRegex, "_"); - } - function enforcePrometheusNamingConvention(name, data) { - if (!name.endsWith("_total") && data.dataPointType === sdk_metrics_1.DataPointType.SUM && data.isMonotonic) { - name = name + "_total"; - } - return name; - } - function valueString(value) { - if (value === Infinity) { - return "+Inf"; - } else if (value === -Infinity) { - return "-Inf"; - } else { - return `${value}`; - } - } - function toPrometheusType(metricData) { - switch (metricData.dataPointType) { - case sdk_metrics_1.DataPointType.SUM: - if (metricData.isMonotonic) { - return "counter"; - } - return "gauge"; - case sdk_metrics_1.DataPointType.GAUGE: - return "gauge"; - case sdk_metrics_1.DataPointType.HISTOGRAM: - return "histogram"; - default: - return "untyped"; - } - } - function stringify(metricName, attributes, value, timestamp, additionalAttributes) { - let hasAttribute = false; - let attributesStr = ""; - for (const [key, val] of Object.entries(attributes)) { - const sanitizedAttributeName = sanitizePrometheusMetricName(key); - hasAttribute = true; - attributesStr += `${attributesStr.length > 0 ? "," : ""}${sanitizedAttributeName}="${escapeAttributeValue(val)}"`; - } - if (additionalAttributes) { - for (const [key, val] of Object.entries(additionalAttributes)) { - const sanitizedAttributeName = sanitizePrometheusMetricName(key); - hasAttribute = true; - attributesStr += `${attributesStr.length > 0 ? "," : ""}${sanitizedAttributeName}="${escapeAttributeValue(val)}"`; - } - } - if (hasAttribute) { - metricName += `{${attributesStr}}`; - } - return `${metricName} ${valueString(value)}${timestamp !== undefined ? " " + String(timestamp) : ""} -`; - } - var NO_REGISTERED_METRICS = "# no registered metrics"; - - class PrometheusSerializer { - _prefix; - _appendTimestamp; - _additionalAttributes; - _withResourceConstantLabels; - constructor(prefix, appendTimestamp = false, withResourceConstantLabels) { - if (prefix) { - this._prefix = prefix + "_"; - } - this._appendTimestamp = appendTimestamp; - this._withResourceConstantLabels = withResourceConstantLabels; - } - serialize(resourceMetrics) { - let str = ""; - this._additionalAttributes = this._filterResourceConstantLabels(resourceMetrics.resource.attributes, this._withResourceConstantLabels); - for (const scopeMetrics of resourceMetrics.scopeMetrics) { - str += this._serializeScopeMetrics(scopeMetrics); - } - if (str === "") { - str += NO_REGISTERED_METRICS; - } - return this._serializeResource(resourceMetrics.resource) + str; - } - _filterResourceConstantLabels(attributes, pattern) { - if (pattern) { - const filteredAttributes = {}; - for (const [key, value] of Object.entries(attributes)) { - if (key.match(pattern)) { - filteredAttributes[key] = value; - } - } - return filteredAttributes; - } - return; - } - _serializeScopeMetrics(scopeMetrics) { - let str = ""; - for (const metric of scopeMetrics.metrics) { - str += this._serializeMetricData(metric) + ` -`; - } - return str; - } - _serializeMetricData(metricData) { - let name = sanitizePrometheusMetricName(escapeString(metricData.descriptor.name)); - if (this._prefix) { - name = `${this._prefix}${name}`; - } - const dataPointType = metricData.dataPointType; - name = enforcePrometheusNamingConvention(name, metricData); - const help = `# HELP ${name} ${escapeString(metricData.descriptor.description || "description missing")}`; - const unit = metricData.descriptor.unit ? ` -# UNIT ${name} ${escapeString(metricData.descriptor.unit)}` : ""; - const type = `# TYPE ${name} ${toPrometheusType(metricData)}`; - let results = ""; - switch (dataPointType) { - case sdk_metrics_1.DataPointType.SUM: - case sdk_metrics_1.DataPointType.GAUGE: { - results = metricData.dataPoints.map((it) => this._serializeSingularDataPoint(name, metricData, it)).join(""); - break; - } - case sdk_metrics_1.DataPointType.HISTOGRAM: { - results = metricData.dataPoints.map((it) => this._serializeHistogramDataPoint(name, metricData, it)).join(""); - break; - } - default: { - api_1.diag.error(`Unrecognizable DataPointType: ${dataPointType} for metric "${name}"`); - } - } - return `${help}${unit} -${type} -${results}`.trim(); - } - _serializeSingularDataPoint(name, data, dataPoint) { - let results = ""; - name = enforcePrometheusNamingConvention(name, data); - const { value, attributes } = dataPoint; - const timestamp = (0, core_1.hrTimeToMilliseconds)(dataPoint.endTime); - results += stringify(name, attributes, value, this._appendTimestamp ? timestamp : undefined, this._additionalAttributes); - return results; - } - _serializeHistogramDataPoint(name, data, dataPoint) { - let results = ""; - name = enforcePrometheusNamingConvention(name, data); - const attributes = dataPoint.attributes; - const histogram = dataPoint.value; - const timestamp = (0, core_1.hrTimeToMilliseconds)(dataPoint.endTime); - for (const key of ["count", "sum"]) { - const value = histogram[key]; - if (value != null) - results += stringify(name + "_" + key, attributes, value, this._appendTimestamp ? timestamp : undefined, this._additionalAttributes); - } - let cumulativeSum = 0; - const countEntries = histogram.buckets.counts.entries(); - let infiniteBoundaryDefined = false; - for (const [idx, val] of countEntries) { - cumulativeSum += val; - const upperBound = histogram.buckets.boundaries[idx]; - if (upperBound === undefined && infiniteBoundaryDefined) { - break; - } - if (upperBound === Infinity) { - infiniteBoundaryDefined = true; - } - results += stringify(name + "_bucket", attributes, cumulativeSum, this._appendTimestamp ? timestamp : undefined, Object.assign({}, this._additionalAttributes ?? {}, { - le: upperBound === undefined || upperBound === Infinity ? "+Inf" : String(upperBound) - })); - } - return results; - } - _serializeResource(resource) { - const name = "target_info"; - const help = `# HELP ${name} Target metadata`; - const type = `# TYPE ${name} gauge`; - const results = stringify(name, resource.attributes, 1).trim(); - return `${help} -${type} -${results} -`; - } - } - exports.PrometheusSerializer = PrometheusSerializer; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-prometheus@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-prometheus/build/src/PrometheusExporter.js -var require_PrometheusExporter2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PrometheusExporter = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var sdk_metrics_1 = require_src93(); - var http_1 = __require("http"); - var PrometheusSerializer_1 = require_PrometheusSerializer2(); - var url_1 = __require("url"); - - class PrometheusExporter extends sdk_metrics_1.MetricReader { - static DEFAULT_OPTIONS = { - host: undefined, - port: 9464, - endpoint: "/metrics", - prefix: "", - appendTimestamp: false, - withResourceConstantLabels: undefined - }; - _host; - _port; - _baseUrl; - _endpoint; - _server; - _prefix; - _appendTimestamp; - _serializer; - _startServerPromise; - constructor(config2 = {}, callback = () => {}) { - super({ - aggregationSelector: (_instrumentType) => { - return { - type: sdk_metrics_1.AggregationType.DEFAULT - }; - }, - aggregationTemporalitySelector: (_instrumentType) => sdk_metrics_1.AggregationTemporality.CUMULATIVE, - metricProducers: config2.metricProducers - }); - this._host = config2.host || process.env.OTEL_EXPORTER_PROMETHEUS_HOST || PrometheusExporter.DEFAULT_OPTIONS.host; - this._port = config2.port || Number(process.env.OTEL_EXPORTER_PROMETHEUS_PORT) || PrometheusExporter.DEFAULT_OPTIONS.port; - this._prefix = config2.prefix || PrometheusExporter.DEFAULT_OPTIONS.prefix; - this._appendTimestamp = typeof config2.appendTimestamp === "boolean" ? config2.appendTimestamp : PrometheusExporter.DEFAULT_OPTIONS.appendTimestamp; - const _withResourceConstantLabels = config2.withResourceConstantLabels || PrometheusExporter.DEFAULT_OPTIONS.withResourceConstantLabels; - this._server = (0, http_1.createServer)(this._requestHandler).unref(); - this._serializer = new PrometheusSerializer_1.PrometheusSerializer(this._prefix, this._appendTimestamp, _withResourceConstantLabels); - this._baseUrl = `http://${this._host}:${this._port}/`; - this._endpoint = (config2.endpoint || PrometheusExporter.DEFAULT_OPTIONS.endpoint).replace(/^([^/])/, "/$1"); - if (config2.preventServerStart !== true) { - this.startServer().then(callback, (err) => { - api_1.diag.error(err); - callback(err); - }); - } else if (callback) { - queueMicrotask(callback); - } - } - async onForceFlush() {} - onShutdown() { - return this.stopServer(); - } - stopServer() { - if (!this._server) { - api_1.diag.debug("Prometheus stopServer() was called but server was never started."); - return Promise.resolve(); - } else { - return new Promise((resolve2) => { - this._server.close((err) => { - if (!err) { - api_1.diag.debug("Prometheus exporter was stopped"); - } else { - if (err.code !== "ERR_SERVER_NOT_RUNNING") { - (0, core_1.globalErrorHandler)(err); - } - } - resolve2(); - }); - }); - } - } - startServer() { - this._startServerPromise ??= new Promise((resolve2, reject) => { - this._server.once("error", reject); - this._server.listen({ - port: this._port, - host: this._host - }, () => { - api_1.diag.debug(`Prometheus exporter server started: ${this._host}:${this._port}/${this._endpoint}`); - resolve2(); - }); - }); - return this._startServerPromise; - } - getMetricsRequestHandler(_request, response) { - this._exportMetrics(response); - } - _requestHandler = (request, response) => { - if (request.url != null && new url_1.URL(request.url, this._baseUrl).pathname === this._endpoint) { - this._exportMetrics(response); - } else { - this._notFound(response); - } - }; - _exportMetrics = (response) => { - response.statusCode = 200; - response.setHeader("content-type", "text/plain"); - this.collect().then((collectionResult) => { - const { resourceMetrics, errors: errors3 } = collectionResult; - if (errors3.length) { - api_1.diag.error("PrometheusExporter: metrics collection errors", ...errors3); - } - response.end(this._serializer.serialize(resourceMetrics)); - }, (err) => { - response.end(`# failed to export metrics: ${err}`); - }); - }; - _notFound = (response) => { - response.statusCode = 404; - response.end(); - }; - } - exports.PrometheusExporter = PrometheusExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-prometheus@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-prometheus/build/src/index.js -var require_src107 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PrometheusSerializer = exports.PrometheusExporter = undefined; - var PrometheusExporter_1 = require_PrometheusExporter2(); - Object.defineProperty(exports, "PrometheusExporter", { enumerable: true, get: function() { - return PrometheusExporter_1.PrometheusExporter; - } }); - var PrometheusSerializer_1 = require_PrometheusSerializer2(); - Object.defineProperty(exports, "PrometheusSerializer", { enumerable: true, get: function() { - return PrometheusSerializer_1.PrometheusSerializer; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/version.js -var require_version55 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/platform/node/OTLPTraceExporter.js -var require_OTLPTraceExporter4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var otlp_exporter_base_1 = require_src98(); - var otlp_transformer_1 = require_src99(); - var version_1 = require_version55(); - var node_http_1 = require_index_node_http2(); - - class OTLPTraceExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "TRACES", "v1/traces", { - "User-Agent": `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`, - "Content-Type": "application/x-protobuf" - }), otlp_transformer_1.ProtobufTraceSerializer)); - } - } - exports.OTLPTraceExporter = OTLPTraceExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/platform/node/index.js -var require_node30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var OTLPTraceExporter_1 = require_OTLPTraceExporter4(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return OTLPTraceExporter_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/platform/index.js -var require_platform29 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var node_1 = require_node30(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return node_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-proto@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-proto/build/src/index.js -var require_src108 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var platform_1 = require_platform29(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return platform_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/version.js -var require_version56 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.VERSION = undefined; - exports.VERSION = "0.203.0"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/platform/node/OTLPTraceExporter.js -var require_OTLPTraceExporter5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var otlp_exporter_base_1 = require_src98(); - var version_1 = require_version56(); - var otlp_transformer_1 = require_src99(); - var node_http_1 = require_index_node_http2(); - - class OTLPTraceExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, node_http_1.createOtlpHttpExportDelegate)((0, node_http_1.convertLegacyHttpOptions)(config2, "TRACES", "v1/traces", { - "User-Agent": `OTel-OTLP-Exporter-JavaScript/${version_1.VERSION}`, - "Content-Type": "application/json" - }), otlp_transformer_1.JsonTraceSerializer)); - } - } - exports.OTLPTraceExporter = OTLPTraceExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/platform/node/index.js -var require_node31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var OTLPTraceExporter_1 = require_OTLPTraceExporter5(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return OTLPTraceExporter_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/platform/index.js -var require_platform30 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var node_1 = require_node31(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return node_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-http@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-http/build/src/index.js -var require_src109 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var platform_1 = require_platform30(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return platform_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-grpc@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-grpc/build/src/OTLPTraceExporter.js -var require_OTLPTraceExporter6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var otlp_grpc_exporter_base_1 = require_src101(); - var otlp_transformer_1 = require_src99(); - var otlp_exporter_base_1 = require_src98(); - - class OTLPTraceExporter extends otlp_exporter_base_1.OTLPExporterBase { - constructor(config2 = {}) { - super((0, otlp_grpc_exporter_base_1.createOtlpGrpcExportDelegate)((0, otlp_grpc_exporter_base_1.convertLegacyOtlpGrpcOptions)(config2, "TRACES"), otlp_transformer_1.ProtobufTraceSerializer, "TraceExportService", "/opentelemetry.proto.collector.trace.v1.TraceService/Export")); - } - } - exports.OTLPTraceExporter = OTLPTraceExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-trace-otlp-grpc@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-trace-otlp-grpc/build/src/index.js -var require_src110 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTLPTraceExporter = undefined; - var OTLPTraceExporter_1 = require_OTLPTraceExporter6(); - Object.defineProperty(exports, "OTLPTraceExporter", { enumerable: true, get: function() { - return OTLPTraceExporter_1.OTLPTraceExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/platform/node/util.js -var require_util10 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareSend = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var http2 = __require("http"); - var https = __require("https"); - function prepareSend(urlStr, headers) { - const url2 = new URL(urlStr); - const reqOpts = Object.assign({ - method: "POST", - headers: { - "Content-Type": "application/json", - ...headers - } - }); - return function send(zipkinSpans, done) { - if (zipkinSpans.length === 0) { - api_1.diag.debug("Zipkin send with empty spans"); - return done({ code: core_1.ExportResultCode.SUCCESS }); - } - const { request } = url2.protocol === "http:" ? http2 : https; - const req = request(url2, reqOpts, (res) => { - let rawData = ""; - res.on("data", (chunk) => { - rawData += chunk; - }); - res.on("end", () => { - const statusCode = res.statusCode || 0; - api_1.diag.debug(`Zipkin response status code: ${statusCode}, body: ${rawData}`); - if (statusCode < 400) { - return done({ code: core_1.ExportResultCode.SUCCESS }); - } else { - return done({ - code: core_1.ExportResultCode.FAILED, - error: new Error(`Got unexpected status code from zipkin: ${statusCode}`) - }); - } - }); - }); - req.on("error", (error48) => { - return done({ - code: core_1.ExportResultCode.FAILED, - error: error48 - }); - }); - const payload = JSON.stringify(zipkinSpans); - api_1.diag.debug(`Zipkin request payload: ${payload}`); - req.write(payload, "utf8"); - req.end(); - }; - } - exports.prepareSend = prepareSend; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/platform/node/index.js -var require_node32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareSend = undefined; - var util_1 = require_util10(); - Object.defineProperty(exports, "prepareSend", { enumerable: true, get: function() { - return util_1.prepareSend; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/platform/index.js -var require_platform31 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareSend = undefined; - var node_1 = require_node32(); - Object.defineProperty(exports, "prepareSend", { enumerable: true, get: function() { - return node_1.prepareSend; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/types.js -var require_types19 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanKind = undefined; - var SpanKind4; - (function(SpanKind5) { - SpanKind5["CLIENT"] = "CLIENT"; - SpanKind5["SERVER"] = "SERVER"; - SpanKind5["CONSUMER"] = "CONSUMER"; - SpanKind5["PRODUCER"] = "PRODUCER"; - })(SpanKind4 = exports.SpanKind || (exports.SpanKind = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/transform.js -var require_transform2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._toZipkinAnnotations = exports._toZipkinTags = exports.toZipkinSpan = exports.defaultStatusErrorTagName = exports.defaultStatusCodeTagName = undefined; - var api8 = require_src(); - var core_1 = require_src89(); - var zipkinTypes = require_types19(); - var ZIPKIN_SPAN_KIND_MAPPING = { - [api8.SpanKind.CLIENT]: zipkinTypes.SpanKind.CLIENT, - [api8.SpanKind.SERVER]: zipkinTypes.SpanKind.SERVER, - [api8.SpanKind.CONSUMER]: zipkinTypes.SpanKind.CONSUMER, - [api8.SpanKind.PRODUCER]: zipkinTypes.SpanKind.PRODUCER, - [api8.SpanKind.INTERNAL]: undefined - }; - exports.defaultStatusCodeTagName = "otel.status_code"; - exports.defaultStatusErrorTagName = "error"; - function toZipkinSpan(span, serviceName, statusCodeTagName, statusErrorTagName) { - const zipkinSpan = { - traceId: span.spanContext().traceId, - parentId: span.parentSpanContext?.spanId, - name: span.name, - id: span.spanContext().spanId, - kind: ZIPKIN_SPAN_KIND_MAPPING[span.kind], - timestamp: (0, core_1.hrTimeToMicroseconds)(span.startTime), - duration: Math.round((0, core_1.hrTimeToMicroseconds)(span.duration)), - localEndpoint: { serviceName }, - tags: _toZipkinTags(span, statusCodeTagName, statusErrorTagName), - annotations: span.events.length ? _toZipkinAnnotations(span.events) : undefined - }; - return zipkinSpan; - } - exports.toZipkinSpan = toZipkinSpan; - function _toZipkinTags({ attributes, resource, status, droppedAttributesCount, droppedEventsCount, droppedLinksCount }, statusCodeTagName, statusErrorTagName) { - const tags = {}; - for (const key of Object.keys(attributes)) { - tags[key] = String(attributes[key]); - } - if (status.code !== api8.SpanStatusCode.UNSET) { - tags[statusCodeTagName] = String(api8.SpanStatusCode[status.code]); - } - if (status.code === api8.SpanStatusCode.ERROR && status.message) { - tags[statusErrorTagName] = status.message; - } - if (droppedAttributesCount) { - tags["otel.dropped_attributes_count"] = String(droppedAttributesCount); - } - if (droppedEventsCount) { - tags["otel.dropped_events_count"] = String(droppedEventsCount); - } - if (droppedLinksCount) { - tags["otel.dropped_links_count"] = String(droppedLinksCount); - } - Object.keys(resource.attributes).forEach((name) => tags[name] = String(resource.attributes[name])); - return tags; - } - exports._toZipkinTags = _toZipkinTags; - function _toZipkinAnnotations(events) { - return events.map((event) => ({ - timestamp: Math.round((0, core_1.hrTimeToMicroseconds)(event.time)), - value: event.name - })); - } - exports._toZipkinAnnotations = _toZipkinAnnotations; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/utils.js -var require_utils51 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepareGetHeaders = undefined; - function prepareGetHeaders(getExportRequestHeaders) { - return function() { - return getExportRequestHeaders(); - }; - } - exports.prepareGetHeaders = prepareGetHeaders; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/zipkin.js -var require_zipkin2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ZipkinExporter = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var index_1 = require_platform31(); - var transform_1 = require_transform2(); - var semantic_conventions_1 = require_src3(); - var utils_1 = require_utils51(); - - class ZipkinExporter { - DEFAULT_SERVICE_NAME = "OpenTelemetry Service"; - _statusCodeTagName; - _statusDescriptionTagName; - _urlStr; - _send; - _getHeaders; - _serviceName; - _isShutdown; - _sendingPromises = []; - constructor(config2 = {}) { - this._urlStr = config2.url || ((0, core_1.getStringFromEnv)("OTEL_EXPORTER_ZIPKIN_ENDPOINT") ?? "http://localhost:9411/api/v2/spans"); - this._send = (0, index_1.prepareSend)(this._urlStr, config2.headers); - this._serviceName = config2.serviceName; - this._statusCodeTagName = config2.statusCodeTagName || transform_1.defaultStatusCodeTagName; - this._statusDescriptionTagName = config2.statusDescriptionTagName || transform_1.defaultStatusErrorTagName; - this._isShutdown = false; - if (typeof config2.getExportRequestHeaders === "function") { - this._getHeaders = (0, utils_1.prepareGetHeaders)(config2.getExportRequestHeaders); - } else { - this._beforeSend = function() {}; - } - } - export(spans, resultCallback) { - const serviceName = String(this._serviceName || spans[0].resource.attributes[semantic_conventions_1.ATTR_SERVICE_NAME] || this.DEFAULT_SERVICE_NAME); - api_1.diag.debug("Zipkin exporter export"); - if (this._isShutdown) { - setTimeout(() => resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Exporter has been shutdown") - })); - return; - } - const promise2 = new Promise((resolve2) => { - this._sendSpans(spans, serviceName, (result) => { - resolve2(); - resultCallback(result); - }); - }); - this._sendingPromises.push(promise2); - const popPromise = () => { - const index = this._sendingPromises.indexOf(promise2); - this._sendingPromises.splice(index, 1); - }; - promise2.then(popPromise, popPromise); - } - shutdown() { - api_1.diag.debug("Zipkin exporter shutdown"); - this._isShutdown = true; - return this.forceFlush(); - } - forceFlush() { - return new Promise((resolve2, reject) => { - Promise.all(this._sendingPromises).then(() => { - resolve2(); - }, reject); - }); - } - _beforeSend() { - if (this._getHeaders) { - this._send = (0, index_1.prepareSend)(this._urlStr, this._getHeaders()); - } - } - _sendSpans(spans, serviceName, done) { - const zipkinSpans = spans.map((span) => (0, transform_1.toZipkinSpan)(span, String(span.attributes[semantic_conventions_1.ATTR_SERVICE_NAME] || span.resource.attributes[semantic_conventions_1.ATTR_SERVICE_NAME] || serviceName), this._statusCodeTagName, this._statusDescriptionTagName)); - this._beforeSend(); - return this._send(zipkinSpans, (result) => { - if (done) { - return done(result); - } - }); - } - } - exports.ZipkinExporter = ZipkinExporter; -}); - -// ../../../../node_modules/.bun/@opentelemetry+exporter-zipkin@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/exporter-zipkin/build/src/index.js -var require_src111 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ZipkinExporter = exports.prepareSend = undefined; - var platform_1 = require_platform31(); - Object.defineProperty(exports, "prepareSend", { enumerable: true, get: function() { - return platform_1.prepareSend; - } }); - var zipkin_1 = require_zipkin2(); - Object.defineProperty(exports, "ZipkinExporter", { enumerable: true, get: function() { - return zipkin_1.ZipkinExporter; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/common.js -var require_common6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3_DEBUG_FLAG_KEY = undefined; - var api_1 = require_src(); - exports.B3_DEBUG_FLAG_KEY = (0, api_1.createContextKey)("OpenTelemetry Context Key B3 Debug Flag"); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/constants.js -var require_constants12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.X_B3_FLAGS = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = exports.B3_CONTEXT_HEADER = undefined; - exports.B3_CONTEXT_HEADER = "b3"; - exports.X_B3_TRACE_ID = "x-b3-traceid"; - exports.X_B3_SPAN_ID = "x-b3-spanid"; - exports.X_B3_SAMPLED = "x-b3-sampled"; - exports.X_B3_PARENT_SPAN_ID = "x-b3-parentspanid"; - exports.X_B3_FLAGS = "x-b3-flags"; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/B3MultiPropagator.js -var require_B3MultiPropagator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3MultiPropagator = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var common_1 = require_common6(); - var constants_1 = require_constants12(); - var VALID_SAMPLED_VALUES = new Set([true, "true", "True", "1", 1]); - var VALID_UNSAMPLED_VALUES = new Set([false, "false", "False", "0", 0]); - function isValidSampledValue(sampled) { - return sampled === api_1.TraceFlags.SAMPLED || sampled === api_1.TraceFlags.NONE; - } - function parseHeader(header) { - return Array.isArray(header) ? header[0] : header; - } - function getHeaderValue(carrier, getter, key) { - const header = getter.get(carrier, key); - return parseHeader(header); - } - function getTraceId(carrier, getter) { - const traceId = getHeaderValue(carrier, getter, constants_1.X_B3_TRACE_ID); - if (typeof traceId === "string") { - return traceId.padStart(32, "0"); - } - return ""; - } - function getSpanId(carrier, getter) { - const spanId = getHeaderValue(carrier, getter, constants_1.X_B3_SPAN_ID); - if (typeof spanId === "string") { - return spanId; - } - return ""; - } - function getDebug(carrier, getter) { - const debug = getHeaderValue(carrier, getter, constants_1.X_B3_FLAGS); - return debug === "1" ? "1" : undefined; - } - function getTraceFlags(carrier, getter) { - const traceFlags = getHeaderValue(carrier, getter, constants_1.X_B3_SAMPLED); - const debug = getDebug(carrier, getter); - if (debug === "1" || VALID_SAMPLED_VALUES.has(traceFlags)) { - return api_1.TraceFlags.SAMPLED; - } - if (traceFlags === undefined || VALID_UNSAMPLED_VALUES.has(traceFlags)) { - return api_1.TraceFlags.NONE; - } - return; - } - - class B3MultiPropagator { - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - if (!spanContext || !(0, api_1.isSpanContextValid)(spanContext) || (0, core_1.isTracingSuppressed)(context8)) - return; - const debug = context8.getValue(common_1.B3_DEBUG_FLAG_KEY); - setter.set(carrier, constants_1.X_B3_TRACE_ID, spanContext.traceId); - setter.set(carrier, constants_1.X_B3_SPAN_ID, spanContext.spanId); - if (debug === "1") { - setter.set(carrier, constants_1.X_B3_FLAGS, debug); - } else if (spanContext.traceFlags !== undefined) { - setter.set(carrier, constants_1.X_B3_SAMPLED, (api_1.TraceFlags.SAMPLED & spanContext.traceFlags) === api_1.TraceFlags.SAMPLED ? "1" : "0"); - } - } - extract(context8, carrier, getter) { - const traceId = getTraceId(carrier, getter); - const spanId = getSpanId(carrier, getter); - const traceFlags = getTraceFlags(carrier, getter); - const debug = getDebug(carrier, getter); - if ((0, api_1.isValidTraceId)(traceId) && (0, api_1.isValidSpanId)(spanId) && isValidSampledValue(traceFlags)) { - context8 = context8.setValue(common_1.B3_DEBUG_FLAG_KEY, debug); - return api_1.trace.setSpanContext(context8, { - traceId, - spanId, - isRemote: true, - traceFlags - }); - } - return context8; - } - fields() { - return [ - constants_1.X_B3_TRACE_ID, - constants_1.X_B3_SPAN_ID, - constants_1.X_B3_FLAGS, - constants_1.X_B3_SAMPLED, - constants_1.X_B3_PARENT_SPAN_ID - ]; - } - } - exports.B3MultiPropagator = B3MultiPropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/B3SinglePropagator.js -var require_B3SinglePropagator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3SinglePropagator = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var common_1 = require_common6(); - var constants_1 = require_constants12(); - var B3_CONTEXT_REGEX = /((?:[0-9a-f]{16}){1,2})-([0-9a-f]{16})(?:-([01d](?![0-9a-f])))?(?:-([0-9a-f]{16}))?/; - var PADDING = "0".repeat(16); - var SAMPLED_VALUES = new Set(["d", "1"]); - var DEBUG_STATE = "d"; - function convertToTraceId128(traceId) { - return traceId.length === 32 ? traceId : `${PADDING}${traceId}`; - } - function convertToTraceFlags(samplingState) { - if (samplingState && SAMPLED_VALUES.has(samplingState)) { - return api_1.TraceFlags.SAMPLED; - } - return api_1.TraceFlags.NONE; - } - - class B3SinglePropagator { - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - if (!spanContext || !(0, api_1.isSpanContextValid)(spanContext) || (0, core_1.isTracingSuppressed)(context8)) - return; - const samplingState = context8.getValue(common_1.B3_DEBUG_FLAG_KEY) || spanContext.traceFlags & 1; - const value = `${spanContext.traceId}-${spanContext.spanId}-${samplingState}`; - setter.set(carrier, constants_1.B3_CONTEXT_HEADER, value); - } - extract(context8, carrier, getter) { - const header = getter.get(carrier, constants_1.B3_CONTEXT_HEADER); - const b3Context = Array.isArray(header) ? header[0] : header; - if (typeof b3Context !== "string") - return context8; - const match2 = b3Context.match(B3_CONTEXT_REGEX); - if (!match2) - return context8; - const [, extractedTraceId, spanId, samplingState] = match2; - const traceId = convertToTraceId128(extractedTraceId); - if (!(0, api_1.isValidTraceId)(traceId) || !(0, api_1.isValidSpanId)(spanId)) - return context8; - const traceFlags = convertToTraceFlags(samplingState); - if (samplingState === DEBUG_STATE) { - context8 = context8.setValue(common_1.B3_DEBUG_FLAG_KEY, samplingState); - } - return api_1.trace.setSpanContext(context8, { - traceId, - spanId, - isRemote: true, - traceFlags - }); - } - fields() { - return [constants_1.B3_CONTEXT_HEADER]; - } - } - exports.B3SinglePropagator = B3SinglePropagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/types.js -var require_types20 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3InjectEncoding = undefined; - var B3InjectEncoding; - (function(B3InjectEncoding2) { - B3InjectEncoding2[B3InjectEncoding2["SINGLE_HEADER"] = 0] = "SINGLE_HEADER"; - B3InjectEncoding2[B3InjectEncoding2["MULTI_HEADER"] = 1] = "MULTI_HEADER"; - })(B3InjectEncoding = exports.B3InjectEncoding || (exports.B3InjectEncoding = {})); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/B3Propagator.js -var require_B3Propagator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3Propagator = undefined; - var core_1 = require_src89(); - var B3MultiPropagator_1 = require_B3MultiPropagator2(); - var B3SinglePropagator_1 = require_B3SinglePropagator2(); - var constants_1 = require_constants12(); - var types_1 = require_types20(); - - class B3Propagator { - _b3MultiPropagator = new B3MultiPropagator_1.B3MultiPropagator; - _b3SinglePropagator = new B3SinglePropagator_1.B3SinglePropagator; - _inject; - _fields; - constructor(config2 = {}) { - if (config2.injectEncoding === types_1.B3InjectEncoding.MULTI_HEADER) { - this._inject = this._b3MultiPropagator.inject; - this._fields = this._b3MultiPropagator.fields(); - } else { - this._inject = this._b3SinglePropagator.inject; - this._fields = this._b3SinglePropagator.fields(); - } - } - inject(context8, carrier, setter) { - if ((0, core_1.isTracingSuppressed)(context8)) { - return; - } - this._inject(context8, carrier, setter); - } - extract(context8, carrier, getter) { - const header = getter.get(carrier, constants_1.B3_CONTEXT_HEADER); - const b3Context = Array.isArray(header) ? header[0] : header; - if (b3Context) { - return this._b3SinglePropagator.extract(context8, carrier, getter); - } else { - return this._b3MultiPropagator.extract(context8, carrier, getter); - } - } - fields() { - return this._fields; - } - } - exports.B3Propagator = B3Propagator; -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-b3@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-b3/build/src/index.js -var require_src112 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.B3InjectEncoding = exports.X_B3_TRACE_ID = exports.X_B3_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_FLAGS = exports.B3_CONTEXT_HEADER = exports.B3Propagator = undefined; - var B3Propagator_1 = require_B3Propagator2(); - Object.defineProperty(exports, "B3Propagator", { enumerable: true, get: function() { - return B3Propagator_1.B3Propagator; - } }); - var constants_1 = require_constants12(); - Object.defineProperty(exports, "B3_CONTEXT_HEADER", { enumerable: true, get: function() { - return constants_1.B3_CONTEXT_HEADER; - } }); - Object.defineProperty(exports, "X_B3_FLAGS", { enumerable: true, get: function() { - return constants_1.X_B3_FLAGS; - } }); - Object.defineProperty(exports, "X_B3_PARENT_SPAN_ID", { enumerable: true, get: function() { - return constants_1.X_B3_PARENT_SPAN_ID; - } }); - Object.defineProperty(exports, "X_B3_SAMPLED", { enumerable: true, get: function() { - return constants_1.X_B3_SAMPLED; - } }); - Object.defineProperty(exports, "X_B3_SPAN_ID", { enumerable: true, get: function() { - return constants_1.X_B3_SPAN_ID; - } }); - Object.defineProperty(exports, "X_B3_TRACE_ID", { enumerable: true, get: function() { - return constants_1.X_B3_TRACE_ID; - } }); - var types_1 = require_types20(); - Object.defineProperty(exports, "B3InjectEncoding", { enumerable: true, get: function() { - return types_1.B3InjectEncoding; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-jaeger@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-jaeger/build/src/JaegerPropagator.js -var require_JaegerPropagator2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JaegerPropagator = exports.UBER_BAGGAGE_HEADER_PREFIX = exports.UBER_TRACE_ID_HEADER = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - exports.UBER_TRACE_ID_HEADER = "uber-trace-id"; - exports.UBER_BAGGAGE_HEADER_PREFIX = "uberctx"; - - class JaegerPropagator { - _jaegerTraceHeader; - _jaegerBaggageHeaderPrefix; - constructor(config2) { - if (typeof config2 === "string") { - this._jaegerTraceHeader = config2; - this._jaegerBaggageHeaderPrefix = exports.UBER_BAGGAGE_HEADER_PREFIX; - } else { - this._jaegerTraceHeader = config2?.customTraceHeader || exports.UBER_TRACE_ID_HEADER; - this._jaegerBaggageHeaderPrefix = config2?.customBaggageHeaderPrefix || exports.UBER_BAGGAGE_HEADER_PREFIX; - } - } - inject(context8, carrier, setter) { - const spanContext = api_1.trace.getSpanContext(context8); - const baggage = api_1.propagation.getBaggage(context8); - if (spanContext && (0, core_1.isTracingSuppressed)(context8) === false) { - const traceFlags = `0${(spanContext.traceFlags || api_1.TraceFlags.NONE).toString(16)}`; - setter.set(carrier, this._jaegerTraceHeader, `${spanContext.traceId}:${spanContext.spanId}:0:${traceFlags}`); - } - if (baggage) { - for (const [key, entry] of baggage.getAllEntries()) { - setter.set(carrier, `${this._jaegerBaggageHeaderPrefix}-${key}`, encodeURIComponent(entry.value)); - } - } - } - extract(context8, carrier, getter) { - const uberTraceIdHeader = getter.get(carrier, this._jaegerTraceHeader); - const uberTraceId = Array.isArray(uberTraceIdHeader) ? uberTraceIdHeader[0] : uberTraceIdHeader; - const baggageValues = getter.keys(carrier).filter((key) => key.startsWith(`${this._jaegerBaggageHeaderPrefix}-`)).map((key) => { - const value = getter.get(carrier, key); - return { - key: key.substring(this._jaegerBaggageHeaderPrefix.length + 1), - value: Array.isArray(value) ? value[0] : value - }; - }); - let newContext = context8; - if (typeof uberTraceId === "string") { - const spanContext = deserializeSpanContext(uberTraceId); - if (spanContext) { - newContext = api_1.trace.setSpanContext(newContext, spanContext); - } - } - if (baggageValues.length === 0) - return newContext; - let currentBaggage = api_1.propagation.getBaggage(context8) ?? api_1.propagation.createBaggage(); - for (const baggageEntry of baggageValues) { - if (baggageEntry.value === undefined) - continue; - currentBaggage = currentBaggage.setEntry(baggageEntry.key, { - value: decodeURIComponent(baggageEntry.value) - }); - } - newContext = api_1.propagation.setBaggage(newContext, currentBaggage); - return newContext; - } - fields() { - return [this._jaegerTraceHeader]; - } - } - exports.JaegerPropagator = JaegerPropagator; - var VALID_HEX_RE = /^[0-9a-f]{1,2}$/i; - function deserializeSpanContext(serializedString) { - const headers = decodeURIComponent(serializedString).split(":"); - if (headers.length !== 4) { - return null; - } - const [_traceId, _spanId, , flags] = headers; - const traceId = _traceId.padStart(32, "0"); - const spanId = _spanId.padStart(16, "0"); - const traceFlags = VALID_HEX_RE.test(flags) ? parseInt(flags, 16) & 1 : 1; - return { traceId, spanId, isRemote: true, traceFlags }; - } -}); - -// ../../../../node_modules/.bun/@opentelemetry+propagator-jaeger@2.0.1+460773ef8ff1e07c/node_modules/@opentelemetry/propagator-jaeger/build/src/index.js -var require_src113 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.UBER_TRACE_ID_HEADER = exports.UBER_BAGGAGE_HEADER_PREFIX = exports.JaegerPropagator = undefined; - var JaegerPropagator_1 = require_JaegerPropagator2(); - Object.defineProperty(exports, "JaegerPropagator", { enumerable: true, get: function() { - return JaegerPropagator_1.JaegerPropagator; - } }); - Object.defineProperty(exports, "UBER_BAGGAGE_HEADER_PREFIX", { enumerable: true, get: function() { - return JaegerPropagator_1.UBER_BAGGAGE_HEADER_PREFIX; - } }); - Object.defineProperty(exports, "UBER_TRACE_ID_HEADER", { enumerable: true, get: function() { - return JaegerPropagator_1.UBER_TRACE_ID_HEADER; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-node@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-node/build/src/utils.js -var require_utils52 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.filterBlanksAndNulls = exports.getResourceDetectorsFromEnv = undefined; - var api_1 = require_src(); - var core_1 = require_src89(); - var exporter_trace_otlp_proto_1 = require_src108(); - var exporter_trace_otlp_http_1 = require_src109(); - var exporter_trace_otlp_grpc_1 = require_src110(); - var exporter_zipkin_1 = require_src111(); - var resources_1 = require_src91(); - var sdk_trace_base_1 = require_src95(); - var propagator_b3_1 = require_src112(); - var propagator_jaeger_1 = require_src113(); - var RESOURCE_DETECTOR_ENVIRONMENT = "env"; - var RESOURCE_DETECTOR_HOST = "host"; - var RESOURCE_DETECTOR_OS = "os"; - var RESOURCE_DETECTOR_PROCESS = "process"; - var RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = "serviceinstance"; - function getResourceDetectorsFromEnv() { - const resourceDetectors = new Map([ - [RESOURCE_DETECTOR_ENVIRONMENT, resources_1.envDetector], - [RESOURCE_DETECTOR_HOST, resources_1.hostDetector], - [RESOURCE_DETECTOR_OS, resources_1.osDetector], - [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, resources_1.serviceInstanceIdDetector], - [RESOURCE_DETECTOR_PROCESS, resources_1.processDetector] - ]); - const resourceDetectorsFromEnv = (0, core_1.getStringListFromEnv)("OTEL_NODE_RESOURCE_DETECTORS") ?? ["all"]; - if (resourceDetectorsFromEnv.includes("all")) { - return [...resourceDetectors.values()].flat(); - } - if (resourceDetectorsFromEnv.includes("none")) { - return []; - } - return resourceDetectorsFromEnv.flatMap((detector) => { - const resourceDetector = resourceDetectors.get(detector); - if (!resourceDetector) { - api_1.diag.warn(`Invalid resource detector "${detector}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`); - } - return resourceDetector || []; - }); - } - exports.getResourceDetectorsFromEnv = getResourceDetectorsFromEnv; - function filterBlanksAndNulls(list5) { - return list5.map((item) => item.trim()).filter((s2) => s2 !== "null" && s2 !== ""); - } - exports.filterBlanksAndNulls = filterBlanksAndNulls; - function getOtlpProtocolFromEnv() { - return (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_TRACES_PROTOCOL") ?? (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_PROTOCOL") ?? "http/protobuf"; - } - exports.getOtlpProtocolFromEnv = getOtlpProtocolFromEnv; - function getOtlpExporterFromEnv() { - const protocol = getOtlpProtocolFromEnv(); - switch (protocol) { - case "grpc": - return new exporter_trace_otlp_grpc_1.OTLPTraceExporter; - case "http/json": - return new exporter_trace_otlp_http_1.OTLPTraceExporter; - case "http/protobuf": - return new exporter_trace_otlp_proto_1.OTLPTraceExporter; - default: - api_1.diag.warn(`Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`); - return new exporter_trace_otlp_proto_1.OTLPTraceExporter; - } - } - function getJaegerExporter() { - try { - const { JaegerExporter } = (()=>{throw new Error("Cannot require module "+"@opentelemetry/exporter-jaeger");})(); - return new JaegerExporter; - } catch (e) { - throw new Error(`Could not instantiate JaegerExporter. This could be due to the JaegerExporter's lack of support for bundling. If possible, use @opentelemetry/exporter-trace-otlp-proto instead. Original Error: ${e}`); - } - } - function getSpanProcessorsFromEnv() { - const exportersMap = new Map([ - ["otlp", () => getOtlpExporterFromEnv()], - ["zipkin", () => new exporter_zipkin_1.ZipkinExporter], - ["console", () => new sdk_trace_base_1.ConsoleSpanExporter], - ["jaeger", () => getJaegerExporter()] - ]); - const exporters = []; - const processors = []; - let traceExportersList = filterBlanksAndNulls(Array.from(new Set((0, core_1.getStringListFromEnv)("OTEL_TRACES_EXPORTER")))); - if (traceExportersList[0] === "none") { - api_1.diag.warn('OTEL_TRACES_EXPORTER contains "none". SDK will not be initialized.'); - return []; - } - if (traceExportersList.length === 0) { - api_1.diag.debug("OTEL_TRACES_EXPORTER is empty. Using default otlp exporter."); - traceExportersList = ["otlp"]; - } else if (traceExportersList.length > 1 && traceExportersList.includes("none")) { - api_1.diag.warn('OTEL_TRACES_EXPORTER contains "none" along with other exporters. Using default otlp exporter.'); - traceExportersList = ["otlp"]; - } - for (const name of traceExportersList) { - const exporter = exportersMap.get(name)?.(); - if (exporter) { - exporters.push(exporter); - } else { - api_1.diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`); - } - } - for (const exp of exporters) { - if (exp instanceof sdk_trace_base_1.ConsoleSpanExporter) { - processors.push(new sdk_trace_base_1.SimpleSpanProcessor(exp)); - } else { - processors.push(new sdk_trace_base_1.BatchSpanProcessor(exp)); - } - } - if (exporters.length === 0) { - api_1.diag.warn("Unable to set up trace exporter(s) due to invalid exporter and/or protocol values."); - } - return processors; - } - exports.getSpanProcessorsFromEnv = getSpanProcessorsFromEnv; - function getPropagatorFromEnv() { - const propagatorsEnvVarValue = (0, core_1.getStringListFromEnv)("OTEL_PROPAGATORS"); - if (propagatorsEnvVarValue == null) { - return; - } - const propagatorsFactory = new Map([ - ["tracecontext", () => new core_1.W3CTraceContextPropagator], - ["baggage", () => new core_1.W3CBaggagePropagator], - ["b3", () => new propagator_b3_1.B3Propagator], - [ - "b3multi", - () => new propagator_b3_1.B3Propagator({ injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER }) - ], - ["jaeger", () => new propagator_jaeger_1.JaegerPropagator] - ]); - const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue)); - const propagators = uniquePropagatorNames.map((name) => { - const propagator = propagatorsFactory.get(name)?.(); - if (!propagator) { - api_1.diag.warn(`Propagator "${name}" requested through environment variable is unavailable.`); - return; - } - return propagator; - }); - const validPropagators = propagators.reduce((list5, item) => { - if (item) { - list5.push(item); - } - return list5; - }, []); - if (validPropagators.length === 0) { - return null; - } else if (uniquePropagatorNames.length === 1) { - return validPropagators[0]; - } else { - return new core_1.CompositePropagator({ - propagators: validPropagators - }); - } - } - exports.getPropagatorFromEnv = getPropagatorFromEnv; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-node@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-node/build/src/sdk.js -var require_sdk2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeSDK = undefined; - var api_1 = require_src(); - var api_logs_1 = require_src90(); - var instrumentation_1 = require_src97(); - var resources_1 = require_src91(); - var sdk_logs_1 = require_src92(); - var exporter_logs_otlp_http_1 = require_src100(); - var exporter_logs_otlp_grpc_1 = require_src102(); - var exporter_logs_otlp_proto_1 = require_src103(); - var exporter_metrics_otlp_grpc_1 = require_src105(); - var exporter_metrics_otlp_proto_1 = require_src106(); - var exporter_metrics_otlp_http_1 = require_src104(); - var exporter_prometheus_1 = require_src107(); - var sdk_metrics_1 = require_src93(); - var sdk_trace_base_1 = require_src95(); - var sdk_trace_node_1 = require_src96(); - var semantic_conventions_1 = require_src3(); - var core_1 = require_src89(); - var utils_1 = require_utils52(); - function getValueInMillis(envName, defaultValue) { - return parseInt(process.env[envName] || "") || defaultValue; - } - function configureMetricProviderFromEnv() { - const metricReaders = []; - const enabledExporters = (0, core_1.getStringListFromEnv)("OTEL_METRICS_EXPORTER"); - if (!enabledExporters) { - return metricReaders; - } - if (enabledExporters.length === 0) { - api_1.diag.debug("OTEL_METRICS_EXPORTER is empty. Using default otlp exporter."); - } - if (enabledExporters.includes("none")) { - api_1.diag.info(`OTEL_METRICS_EXPORTER contains "none". Metric provider will not be initialized.`); - return metricReaders; - } - enabledExporters.forEach((exporter) => { - if (exporter === "otlp") { - const protocol = process.env.OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?.trim() || process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim(); - const exportIntervalMillis = getValueInMillis("OTEL_METRIC_EXPORT_INTERVAL", 60000); - const exportTimeoutMillis = getValueInMillis("OTEL_METRIC_EXPORT_TIMEOUT", 30000); - switch (protocol) { - case "grpc": - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_grpc_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - break; - case "http/json": - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_http_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - break; - case "http/protobuf": - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_proto_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - break; - default: - api_1.diag.warn(`Unsupported OTLP metrics protocol: "${protocol}". Using http/protobuf.`); - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new exporter_metrics_otlp_proto_1.OTLPMetricExporter, - exportIntervalMillis, - exportTimeoutMillis - })); - } - } else if (exporter === "console") { - metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({ - exporter: new sdk_metrics_1.ConsoleMetricExporter - })); - } else if (exporter === "prometheus") { - metricReaders.push(new exporter_prometheus_1.PrometheusExporter); - } else { - api_1.diag.warn(`Unsupported OTEL_METRICS_EXPORTER value: "${exporter}". Supported values are: otlp, console, prometheus, none.`); - } - }); - return metricReaders; - } - - class NodeSDK { - _tracerProviderConfig; - _loggerProviderConfig; - _meterProviderConfig; - _instrumentations; - _resource; - _resourceDetectors; - _autoDetectResources; - _tracerProvider; - _loggerProvider; - _meterProvider; - _serviceName; - _configuration; - _disabled; - constructor(configuration = {}) { - if ((0, core_1.getBooleanFromEnv)("OTEL_SDK_DISABLED")) { - this._disabled = true; - } - const logLevel = (0, core_1.getStringFromEnv)("OTEL_LOG_LEVEL"); - if (logLevel != null) { - api_1.diag.setLogger(new api_1.DiagConsoleLogger, { - logLevel: (0, core_1.diagLogLevelFromString)(logLevel) - }); - } - this._configuration = configuration; - this._resource = configuration.resource ?? (0, resources_1.defaultResource)(); - this._autoDetectResources = configuration.autoDetectResources ?? true; - if (!this._autoDetectResources) { - this._resourceDetectors = []; - } else if (configuration.resourceDetectors != null) { - this._resourceDetectors = configuration.resourceDetectors; - } else if ((0, core_1.getStringFromEnv)("OTEL_NODE_RESOURCE_DETECTORS")) { - this._resourceDetectors = (0, utils_1.getResourceDetectorsFromEnv)(); - } else { - this._resourceDetectors = [resources_1.envDetector, resources_1.processDetector, resources_1.hostDetector]; - } - this._serviceName = configuration.serviceName; - if (configuration.traceExporter || configuration.spanProcessor || configuration.spanProcessors) { - const tracerProviderConfig = {}; - if (configuration.sampler) { - tracerProviderConfig.sampler = configuration.sampler; - } - if (configuration.spanLimits) { - tracerProviderConfig.spanLimits = configuration.spanLimits; - } - if (configuration.idGenerator) { - tracerProviderConfig.idGenerator = configuration.idGenerator; - } - if (configuration.spanProcessor) { - api_1.diag.warn("The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead."); - } - const spanProcessor = configuration.spanProcessor ?? new sdk_trace_base_1.BatchSpanProcessor(configuration.traceExporter); - const spanProcessors2 = configuration.spanProcessors ?? [spanProcessor]; - this._tracerProviderConfig = { - tracerConfig: tracerProviderConfig, - spanProcessors: spanProcessors2, - contextManager: configuration.contextManager, - textMapPropagator: configuration.textMapPropagator - }; - } - if (configuration.logRecordProcessors) { - this._loggerProviderConfig = { - logRecordProcessors: configuration.logRecordProcessors - }; - } else if (configuration.logRecordProcessor) { - this._loggerProviderConfig = { - logRecordProcessors: [configuration.logRecordProcessor] - }; - api_1.diag.warn("The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead."); - } else { - this.configureLoggerProviderFromEnv(); - } - if (configuration.metricReader || configuration.views) { - const meterProviderConfig = {}; - if (configuration.metricReader) { - meterProviderConfig.reader = configuration.metricReader; - } - if (configuration.views) { - meterProviderConfig.views = configuration.views; - } - this._meterProviderConfig = meterProviderConfig; - } - this._instrumentations = configuration.instrumentations?.flat() ?? []; - } - start() { - if (this._disabled) { - return; - } - (0, instrumentation_1.registerInstrumentations)({ - instrumentations: this._instrumentations - }); - if (this._autoDetectResources) { - const internalConfig = { - detectors: this._resourceDetectors - }; - this._resource = this._resource.merge((0, resources_1.detectResources)(internalConfig)); - } - this._resource = this._serviceName === undefined ? this._resource : this._resource.merge((0, resources_1.resourceFromAttributes)({ - [semantic_conventions_1.ATTR_SERVICE_NAME]: this._serviceName - })); - const spanProcessors2 = this._tracerProviderConfig ? this._tracerProviderConfig.spanProcessors : (0, utils_1.getSpanProcessorsFromEnv)(); - this._tracerProvider = new sdk_trace_node_1.NodeTracerProvider({ - ...this._configuration, - resource: this._resource, - spanProcessors: spanProcessors2 - }); - if (spanProcessors2.length > 0) { - this._tracerProvider.register({ - contextManager: this._tracerProviderConfig?.contextManager ?? this._configuration?.contextManager, - propagator: this._tracerProviderConfig?.textMapPropagator ?? (0, utils_1.getPropagatorFromEnv)() - }); - } - if (this._loggerProviderConfig) { - const loggerProvider = new sdk_logs_1.LoggerProvider({ - resource: this._resource, - processors: this._loggerProviderConfig.logRecordProcessors - }); - this._loggerProvider = loggerProvider; - api_logs_1.logs.setGlobalLoggerProvider(loggerProvider); - } - const metricReadersFromEnv = configureMetricProviderFromEnv(); - if (this._meterProviderConfig || metricReadersFromEnv.length > 0) { - const readers = []; - if (this._meterProviderConfig?.reader) { - readers.push(this._meterProviderConfig.reader); - } - if (readers.length === 0) { - metricReadersFromEnv.forEach((r) => readers.push(r)); - } - const meterProvider = new sdk_metrics_1.MeterProvider({ - resource: this._resource, - views: this._meterProviderConfig?.views ?? [], - readers - }); - this._meterProvider = meterProvider; - api_1.metrics.setGlobalMeterProvider(meterProvider); - for (const instrumentation of this._instrumentations) { - instrumentation.setMeterProvider(api_1.metrics.getMeterProvider()); - } - } - } - shutdown() { - const promises = []; - if (this._tracerProvider) { - promises.push(this._tracerProvider.shutdown()); - } - if (this._loggerProvider) { - promises.push(this._loggerProvider.shutdown()); - } - if (this._meterProvider) { - promises.push(this._meterProvider.shutdown()); - } - return Promise.all(promises).then(() => {}); - } - configureLoggerProviderFromEnv() { - const enabledExporters = (0, core_1.getStringListFromEnv)("OTEL_LOGS_EXPORTER") ?? []; - if (enabledExporters.length === 0) { - api_1.diag.debug("OTEL_LOGS_EXPORTER is empty. Using default otlp exporter."); - enabledExporters.push("otlp"); - } - if (enabledExporters.includes("none")) { - api_1.diag.info(`OTEL_LOGS_EXPORTER contains "none". Logger provider will not be initialized.`); - return; - } - const exporters = []; - enabledExporters.forEach((exporter) => { - if (exporter === "otlp") { - const protocol = ((0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_LOGS_PROTOCOL") ?? (0, core_1.getStringFromEnv)("OTEL_EXPORTER_OTLP_PROTOCOL"))?.trim(); - switch (protocol) { - case "grpc": - exporters.push(new exporter_logs_otlp_grpc_1.OTLPLogExporter); - break; - case "http/json": - exporters.push(new exporter_logs_otlp_http_1.OTLPLogExporter); - break; - case "http/protobuf": - exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter); - break; - case undefined: - case "": - exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter); - break; - default: - api_1.diag.warn(`Unsupported OTLP logs protocol: "${protocol}". Using http/protobuf.`); - exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter); - } - } else if (exporter === "console") { - exporters.push(new sdk_logs_1.ConsoleLogRecordExporter); - } else { - api_1.diag.warn(`Unsupported OTEL_LOGS_EXPORTER value: "${exporter}". Supported values are: otlp, console, none.`); - } - }); - if (exporters.length > 0) { - this._loggerProviderConfig = { - logRecordProcessors: exporters.map((exporter) => { - if (exporter instanceof sdk_logs_1.ConsoleLogRecordExporter) { - return new sdk_logs_1.SimpleLogRecordProcessor(exporter); - } else { - return new sdk_logs_1.BatchLogRecordProcessor(exporter); - } - }) - }; - } - } - } - exports.NodeSDK = NodeSDK; -}); - -// ../../../../node_modules/.bun/@opentelemetry+sdk-node@0.203.0+460773ef8ff1e07c/node_modules/@opentelemetry/sdk-node/build/src/index.js -var require_src114 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeSDK = exports.tracing = exports.resources = exports.node = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = undefined; - exports.api = require_src(); - exports.contextBase = require_src(); - exports.core = require_src89(); - exports.logs = require_src92(); - exports.metrics = require_src93(); - exports.node = require_src96(); - exports.resources = require_src91(); - exports.tracing = require_src95(); - var sdk_1 = require_sdk2(); - Object.defineProperty(exports, "NodeSDK", { enumerable: true, get: function() { - return sdk_1.NodeSDK; - } }); -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/src/external-types.js -var require_external_types = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); -}); - -// ../../../../node_modules/.bun/base64-js@1.5.1/node_modules/base64-js/index.js -var require_base64_js = __commonJS((exports) => { - exports.byteLength = byteLength; - exports.toByteArray = toByteArray; - exports.fromByteArray = fromByteArray; - var lookup = []; - var revLookup = []; - var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; - var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - for (i = 0, len = code.length;i < len; ++i) { - lookup[i] = code[i]; - revLookup[code.charCodeAt(i)] = i; - } - var i; - var len; - revLookup[45] = 62; - revLookup[95] = 63; - function getLens(b64) { - var len2 = b64.length; - if (len2 % 4 > 0) { - throw new Error("Invalid string. Length must be a multiple of 4"); - } - var validLen = b64.indexOf("="); - if (validLen === -1) - validLen = len2; - var placeHoldersLen = validLen === len2 ? 0 : 4 - validLen % 4; - return [validLen, placeHoldersLen]; - } - function byteLength(b64) { - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; - } - function _byteLength(b64, validLen, placeHoldersLen) { - return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; - } - function toByteArray(b64) { - var tmp; - var lens = getLens(b64); - var validLen = lens[0]; - var placeHoldersLen = lens[1]; - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); - var curByte = 0; - var len2 = placeHoldersLen > 0 ? validLen - 4 : validLen; - var i2; - for (i2 = 0;i2 < len2; i2 += 4) { - tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)]; - arr[curByte++] = tmp >> 16 & 255; - arr[curByte++] = tmp >> 8 & 255; - arr[curByte++] = tmp & 255; - } - if (placeHoldersLen === 2) { - tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4; - arr[curByte++] = tmp & 255; - } - if (placeHoldersLen === 1) { - tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2; - arr[curByte++] = tmp >> 8 & 255; - arr[curByte++] = tmp & 255; - } - return arr; - } - function tripletToBase64(num) { - return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63]; - } - function encodeChunk(uint8, start, end) { - var tmp; - var output = []; - for (var i2 = start;i2 < end; i2 += 3) { - tmp = (uint8[i2] << 16 & 16711680) + (uint8[i2 + 1] << 8 & 65280) + (uint8[i2 + 2] & 255); - output.push(tripletToBase64(tmp)); - } - return output.join(""); - } - function fromByteArray(uint8) { - var tmp; - var len2 = uint8.length; - var extraBytes = len2 % 3; - var parts = []; - var maxChunkLength = 16383; - for (var i2 = 0, len22 = len2 - extraBytes;i2 < len22; i2 += maxChunkLength) { - parts.push(encodeChunk(uint8, i2, i2 + maxChunkLength > len22 ? len22 : i2 + maxChunkLength)); - } - if (extraBytes === 1) { - tmp = uint8[len2 - 1]; - parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + "=="); - } else if (extraBytes === 2) { - tmp = (uint8[len2 - 2] << 8) + uint8[len2 - 1]; - parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + "="); - } - return parts.join(""); - } -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/crypto/browser/crypto.js -var require_crypto = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BrowserCrypto = undefined; - var base64js = require_base64_js(); - var crypto_1 = require_crypto3(); - - class BrowserCrypto { - constructor() { - if (typeof window === "undefined" || window.crypto === undefined || window.crypto.subtle === undefined) { - throw new Error("SubtleCrypto not found. Make sure it's an https:// website."); - } - } - async sha256DigestBase64(str) { - const inputBuffer = new TextEncoder().encode(str); - const outputBuffer = await window.crypto.subtle.digest("SHA-256", inputBuffer); - return base64js.fromByteArray(new Uint8Array(outputBuffer)); - } - randomBytesBase64(count) { - const array3 = new Uint8Array(count); - window.crypto.getRandomValues(array3); - return base64js.fromByteArray(array3); - } - static padBase64(base643) { - while (base643.length % 4 !== 0) { - base643 += "="; - } - return base643; - } - async verify(pubkey, data, signature) { - const algo = { - name: "RSASSA-PKCS1-v1_5", - hash: { name: "SHA-256" } - }; - const dataArray = new TextEncoder().encode(data); - const signatureArray = base64js.toByteArray(BrowserCrypto.padBase64(signature)); - const cryptoKey = await window.crypto.subtle.importKey("jwk", pubkey, algo, true, ["verify"]); - const result = await window.crypto.subtle.verify(algo, cryptoKey, signatureArray, dataArray); - return result; - } - async sign(privateKey, data) { - const algo = { - name: "RSASSA-PKCS1-v1_5", - hash: { name: "SHA-256" } - }; - const dataArray = new TextEncoder().encode(data); - const cryptoKey = await window.crypto.subtle.importKey("jwk", privateKey, algo, true, ["sign"]); - const result = await window.crypto.subtle.sign(algo, cryptoKey, dataArray); - return base64js.fromByteArray(new Uint8Array(result)); - } - decodeBase64StringUtf8(base643) { - const uint8array = base64js.toByteArray(BrowserCrypto.padBase64(base643)); - const result = new TextDecoder().decode(uint8array); - return result; - } - encodeBase64StringUtf8(text) { - const uint8array = new TextEncoder().encode(text); - const result = base64js.fromByteArray(uint8array); - return result; - } - async sha256DigestHex(str) { - const inputBuffer = new TextEncoder().encode(str); - const outputBuffer = await window.crypto.subtle.digest("SHA-256", inputBuffer); - return (0, crypto_1.fromArrayBufferToHex)(outputBuffer); - } - async signWithHmacSha256(key, msg) { - const rawKey = typeof key === "string" ? key : String.fromCharCode(...new Uint16Array(key)); - const enc = new TextEncoder; - const cryptoKey = await window.crypto.subtle.importKey("raw", enc.encode(rawKey), { - name: "HMAC", - hash: { - name: "SHA-256" - } - }, false, ["sign"]); - return window.crypto.subtle.sign("HMAC", cryptoKey, enc.encode(msg)); - } - } - exports.BrowserCrypto = BrowserCrypto; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/crypto/node/crypto.js -var require_crypto2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NodeCrypto = undefined; - var crypto2 = __require("crypto"); - - class NodeCrypto { - async sha256DigestBase64(str) { - return crypto2.createHash("sha256").update(str).digest("base64"); - } - randomBytesBase64(count) { - return crypto2.randomBytes(count).toString("base64"); - } - async verify(pubkey, data, signature) { - const verifier = crypto2.createVerify("RSA-SHA256"); - verifier.update(data); - verifier.end(); - return verifier.verify(pubkey, signature, "base64"); - } - async sign(privateKey, data) { - const signer = crypto2.createSign("RSA-SHA256"); - signer.update(data); - signer.end(); - return signer.sign(privateKey, "base64"); - } - decodeBase64StringUtf8(base643) { - return Buffer.from(base643, "base64").toString("utf-8"); - } - encodeBase64StringUtf8(text) { - return Buffer.from(text, "utf-8").toString("base64"); - } - async sha256DigestHex(str) { - return crypto2.createHash("sha256").update(str).digest("hex"); - } - async signWithHmacSha256(key, msg) { - const cryptoKey = typeof key === "string" ? key : toBuffer(key); - return toArrayBuffer(crypto2.createHmac("sha256", cryptoKey).update(msg).digest()); - } - } - exports.NodeCrypto = NodeCrypto; - function toArrayBuffer(buffer) { - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - } - function toBuffer(arrayBuffer) { - return Buffer.from(arrayBuffer); - } -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/crypto/crypto.js -var require_crypto3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.createCrypto = createCrypto; - exports.hasBrowserCrypto = hasBrowserCrypto; - exports.fromArrayBufferToHex = fromArrayBufferToHex; - var crypto_1 = require_crypto(); - var crypto_2 = require_crypto2(); - function createCrypto() { - if (hasBrowserCrypto()) { - return new crypto_1.BrowserCrypto; - } - return new crypto_2.NodeCrypto; - } - function hasBrowserCrypto() { - return typeof window !== "undefined" && typeof window.crypto !== "undefined" && typeof window.crypto.subtle !== "undefined"; - } - function fromArrayBufferToHex(arrayBuffer) { - const byteArray = Array.from(new Uint8Array(arrayBuffer)); - return byteArray.map((byte) => { - return byte.toString(16).padStart(2, "0"); - }).join(""); - } -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/options.js -var require_options = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.validate = validate; - function validate(options) { - const vpairs = [ - { invalid: "uri", expected: "url" }, - { invalid: "json", expected: "data" }, - { invalid: "qs", expected: "params" } - ]; - for (const pair of vpairs) { - if (options[pair.invalid]) { - const e = `'${pair.invalid}' is not a valid configuration option. Please use '${pair.expected}' instead. This library is using Axios for requests. Please see https://github.com/axios/axios to learn more about the valid request options.`; - throw new Error(e); - } - } - } -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/package.json -var require_package4 = __commonJS((exports, module) => { - module.exports = { - name: "google-auth-library", - version: "9.15.1", - author: "Google Inc.", - description: "Google APIs Authentication Client Library for Node.js", - engines: { - node: ">=14" - }, - main: "./build/src/index.js", - types: "./build/src/index.d.ts", - repository: "googleapis/google-auth-library-nodejs.git", - keywords: [ - "google", - "api", - "google apis", - "client", - "client library" - ], - dependencies: { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - gaxios: "^6.1.1", - "gcp-metadata": "^6.1.0", - gtoken: "^7.0.0", - jws: "^4.0.0" - }, - devDependencies: { - "@types/base64-js": "^1.2.5", - "@types/chai": "^4.1.7", - "@types/jws": "^3.1.0", - "@types/mocha": "^9.0.0", - "@types/mv": "^2.1.0", - "@types/ncp": "^2.0.1", - "@types/node": "^20.4.2", - "@types/sinon": "^17.0.0", - "assert-rejects": "^1.0.0", - c8: "^8.0.0", - chai: "^4.2.0", - cheerio: "1.0.0-rc.12", - codecov: "^3.0.2", - "engine.io": "6.6.2", - gts: "^5.0.0", - "is-docker": "^2.0.0", - jsdoc: "^4.0.0", - "jsdoc-fresh": "^3.0.0", - "jsdoc-region-tag": "^3.0.0", - karma: "^6.0.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.0", - "karma-firefox-launcher": "^2.0.0", - "karma-mocha": "^2.0.0", - "karma-sourcemap-loader": "^0.4.0", - "karma-webpack": "5.0.0", - keypair: "^1.0.4", - linkinator: "^4.0.0", - mocha: "^9.2.2", - mv: "^2.1.1", - ncp: "^2.0.0", - nock: "^13.0.0", - "null-loader": "^4.0.0", - pdfmake: "0.2.12", - puppeteer: "^21.0.0", - sinon: "^18.0.0", - "ts-loader": "^8.0.0", - typescript: "^5.1.6", - webpack: "^5.21.2", - "webpack-cli": "^4.0.0" - }, - files: [ - "build/src", - "!build/src/**/*.map" - ], - scripts: { - test: "c8 mocha build/test", - clean: "gts clean", - prepare: "npm run compile", - lint: "gts check", - compile: "tsc -p .", - fix: "gts fix", - pretest: "npm run compile -- --sourceMap", - docs: "jsdoc -c .jsdoc.json", - "samples-setup": "cd samples/ && npm link ../ && npm run setup && cd ../", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test --timeout 60000", - "presystem-test": "npm run compile -- --sourceMap", - webpack: "webpack", - "browser-test": "karma start", - "docs-test": "linkinator docs", - "predocs-test": "npm run docs", - prelint: "cd samples; npm link ../; npm install", - precompile: "gts clean" - }, - license: "Apache-2.0" - }; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/transporters.js -var require_transporters = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DefaultTransporter = undefined; - var gaxios_1 = require_src57(); - var options_1 = require_options(); - var pkg = require_package4(); - var PRODUCT_NAME = "google-api-nodejs-client"; - - class DefaultTransporter { - constructor() { - this.instance = new gaxios_1.Gaxios; - } - configure(opts = {}) { - opts.headers = opts.headers || {}; - if (typeof window === "undefined") { - const uaValue = opts.headers["User-Agent"]; - if (!uaValue) { - opts.headers["User-Agent"] = DefaultTransporter.USER_AGENT; - } else if (!uaValue.includes(`${PRODUCT_NAME}/`)) { - opts.headers["User-Agent"] = `${uaValue} ${DefaultTransporter.USER_AGENT}`; - } - if (!opts.headers["x-goog-api-client"]) { - const nodeVersion = process.version.replace(/^v/, ""); - opts.headers["x-goog-api-client"] = `gl-node/${nodeVersion}`; - } - } - return opts; - } - request(opts) { - opts = this.configure(opts); - (0, options_1.validate)(opts); - return this.instance.request(opts).catch((e) => { - throw this.processError(e); - }); - } - get defaults() { - return this.instance.defaults; - } - set defaults(opts) { - this.instance.defaults = opts; - } - processError(e) { - const res = e.response; - const err = e; - const body = res ? res.data : null; - if (res && body && body.error && res.status !== 200) { - if (typeof body.error === "string") { - err.message = body.error; - err.status = res.status; - } else if (Array.isArray(body.error.errors)) { - err.message = body.error.errors.map((err2) => err2.message).join(` -`); - err.code = body.error.code; - err.errors = body.error.errors; - } else { - err.message = body.error.message; - err.code = body.error.code; - } - } else if (res && res.status >= 400) { - err.message = body; - err.status = res.status; - } - return err; - } - } - exports.DefaultTransporter = DefaultTransporter; - DefaultTransporter.USER_AGENT = `${PRODUCT_NAME}/${pkg.version}`; -}); - -// ../../../../node_modules/.bun/safe-buffer@5.2.1/node_modules/safe-buffer/index.js -var require_safe_buffer = __commonJS((exports, module) => { - /*! safe-buffer. MIT License. Feross Aboukhadijeh */ - var buffer = __require("buffer"); - var Buffer2 = buffer.Buffer; - function copyProps(src, dst) { - for (var key in src) { - dst[key] = src[key]; - } - } - if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { - module.exports = buffer; - } else { - copyProps(buffer, exports); - exports.Buffer = SafeBuffer; - } - function SafeBuffer(arg, encodingOrOffset, length) { - return Buffer2(arg, encodingOrOffset, length); - } - SafeBuffer.prototype = Object.create(Buffer2.prototype); - copyProps(Buffer2, SafeBuffer); - SafeBuffer.from = function(arg, encodingOrOffset, length) { - if (typeof arg === "number") { - throw new TypeError("Argument must not be a number"); - } - return Buffer2(arg, encodingOrOffset, length); - }; - SafeBuffer.alloc = function(size, fill, encoding) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - var buf = Buffer2(size); - if (fill !== undefined) { - if (typeof encoding === "string") { - buf.fill(fill, encoding); - } else { - buf.fill(fill); - } - } else { - buf.fill(0); - } - return buf; - }; - SafeBuffer.allocUnsafe = function(size) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - return Buffer2(size); - }; - SafeBuffer.allocUnsafeSlow = function(size) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - return buffer.SlowBuffer(size); - }; -}); - -// ../../../../node_modules/.bun/ecdsa-sig-formatter@1.0.11/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js -var require_param_bytes_for_alg = __commonJS((exports, module) => { - function getParamSize(keySize) { - var result = (keySize / 8 | 0) + (keySize % 8 === 0 ? 0 : 1); - return result; - } - var paramBytesForAlg = { - ES256: getParamSize(256), - ES384: getParamSize(384), - ES512: getParamSize(521) - }; - function getParamBytesForAlg(alg) { - var paramBytes = paramBytesForAlg[alg]; - if (paramBytes) { - return paramBytes; - } - throw new Error('Unknown algorithm "' + alg + '"'); - } - module.exports = getParamBytesForAlg; -}); - -// ../../../../node_modules/.bun/ecdsa-sig-formatter@1.0.11/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js -var require_ecdsa_sig_formatter = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - var getParamBytesForAlg = require_param_bytes_for_alg(); - var MAX_OCTET = 128; - var CLASS_UNIVERSAL = 0; - var PRIMITIVE_BIT = 32; - var TAG_SEQ = 16; - var TAG_INT = 2; - var ENCODED_TAG_SEQ = TAG_SEQ | PRIMITIVE_BIT | CLASS_UNIVERSAL << 6; - var ENCODED_TAG_INT = TAG_INT | CLASS_UNIVERSAL << 6; - function base64Url(base643) { - return base643.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); - } - function signatureAsBuffer(signature) { - if (Buffer2.isBuffer(signature)) { - return signature; - } else if (typeof signature === "string") { - return Buffer2.from(signature, "base64"); - } - throw new TypeError("ECDSA signature must be a Base64 string or a Buffer"); - } - function derToJose(signature, alg) { - signature = signatureAsBuffer(signature); - var paramBytes = getParamBytesForAlg(alg); - var maxEncodedParamLength = paramBytes + 1; - var inputLength = signature.length; - var offset = 0; - if (signature[offset++] !== ENCODED_TAG_SEQ) { - throw new Error('Could not find expected "seq"'); - } - var seqLength = signature[offset++]; - if (seqLength === (MAX_OCTET | 1)) { - seqLength = signature[offset++]; - } - if (inputLength - offset < seqLength) { - throw new Error('"seq" specified length of "' + seqLength + '", only "' + (inputLength - offset) + '" remaining'); - } - if (signature[offset++] !== ENCODED_TAG_INT) { - throw new Error('Could not find expected "int" for "r"'); - } - var rLength = signature[offset++]; - if (inputLength - offset - 2 < rLength) { - throw new Error('"r" specified length of "' + rLength + '", only "' + (inputLength - offset - 2) + '" available'); - } - if (maxEncodedParamLength < rLength) { - throw new Error('"r" specified length of "' + rLength + '", max of "' + maxEncodedParamLength + '" is acceptable'); - } - var rOffset = offset; - offset += rLength; - if (signature[offset++] !== ENCODED_TAG_INT) { - throw new Error('Could not find expected "int" for "s"'); - } - var sLength = signature[offset++]; - if (inputLength - offset !== sLength) { - throw new Error('"s" specified length of "' + sLength + '", expected "' + (inputLength - offset) + '"'); - } - if (maxEncodedParamLength < sLength) { - throw new Error('"s" specified length of "' + sLength + '", max of "' + maxEncodedParamLength + '" is acceptable'); - } - var sOffset = offset; - offset += sLength; - if (offset !== inputLength) { - throw new Error('Expected to consume entire buffer, but "' + (inputLength - offset) + '" bytes remain'); - } - var rPadding = paramBytes - rLength, sPadding = paramBytes - sLength; - var dst = Buffer2.allocUnsafe(rPadding + rLength + sPadding + sLength); - for (offset = 0;offset < rPadding; ++offset) { - dst[offset] = 0; - } - signature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength); - offset = paramBytes; - for (var o = offset;offset < o + sPadding; ++offset) { - dst[offset] = 0; - } - signature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength); - dst = dst.toString("base64"); - dst = base64Url(dst); - return dst; - } - function countPadding(buf, start, stop) { - var padding = 0; - while (start + padding < stop && buf[start + padding] === 0) { - ++padding; - } - var needsSign = buf[start + padding] >= MAX_OCTET; - if (needsSign) { - --padding; - } - return padding; - } - function joseToDer(signature, alg) { - signature = signatureAsBuffer(signature); - var paramBytes = getParamBytesForAlg(alg); - var signatureBytes = signature.length; - if (signatureBytes !== paramBytes * 2) { - throw new TypeError('"' + alg + '" signatures must be "' + paramBytes * 2 + '" bytes, saw "' + signatureBytes + '"'); - } - var rPadding = countPadding(signature, 0, paramBytes); - var sPadding = countPadding(signature, paramBytes, signature.length); - var rLength = paramBytes - rPadding; - var sLength = paramBytes - sPadding; - var rsBytes = 1 + 1 + rLength + 1 + 1 + sLength; - var shortLength = rsBytes < MAX_OCTET; - var dst = Buffer2.allocUnsafe((shortLength ? 2 : 3) + rsBytes); - var offset = 0; - dst[offset++] = ENCODED_TAG_SEQ; - if (shortLength) { - dst[offset++] = rsBytes; - } else { - dst[offset++] = MAX_OCTET | 1; - dst[offset++] = rsBytes & 255; - } - dst[offset++] = ENCODED_TAG_INT; - dst[offset++] = rLength; - if (rPadding < 0) { - dst[offset++] = 0; - offset += signature.copy(dst, offset, 0, paramBytes); - } else { - offset += signature.copy(dst, offset, rPadding, paramBytes); - } - dst[offset++] = ENCODED_TAG_INT; - dst[offset++] = sLength; - if (sPadding < 0) { - dst[offset++] = 0; - signature.copy(dst, offset, paramBytes); - } else { - signature.copy(dst, offset, paramBytes + sPadding); - } - return dst; - } - module.exports = { - derToJose, - joseToDer - }; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/util.js -var require_util11 = __commonJS((exports) => { - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var _LRUCache_instances; - var _LRUCache_cache; - var _LRUCache_moveToEnd; - var _LRUCache_evict; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LRUCache = undefined; - exports.snakeToCamel = snakeToCamel; - exports.originalOrCamelOptions = originalOrCamelOptions; - function snakeToCamel(str) { - return str.replace(/([_][^_])/g, (match2) => match2.slice(1).toUpperCase()); - } - function originalOrCamelOptions(obj) { - function get3(key) { - var _a2; - const o = obj || {}; - return (_a2 = o[key]) !== null && _a2 !== undefined ? _a2 : o[snakeToCamel(key)]; - } - return { get: get3 }; - } - - class LRUCache { - constructor(options) { - _LRUCache_instances.add(this); - _LRUCache_cache.set(this, new Map); - this.capacity = options.capacity; - this.maxAge = options.maxAge; - } - set(key, value) { - __classPrivateFieldGet(this, _LRUCache_instances, "m", _LRUCache_moveToEnd).call(this, key, value); - __classPrivateFieldGet(this, _LRUCache_instances, "m", _LRUCache_evict).call(this); - } - get(key) { - const item = __classPrivateFieldGet(this, _LRUCache_cache, "f").get(key); - if (!item) - return; - __classPrivateFieldGet(this, _LRUCache_instances, "m", _LRUCache_moveToEnd).call(this, key, item.value); - __classPrivateFieldGet(this, _LRUCache_instances, "m", _LRUCache_evict).call(this); - return item.value; - } - } - exports.LRUCache = LRUCache; - _LRUCache_cache = new WeakMap, _LRUCache_instances = new WeakSet, _LRUCache_moveToEnd = function _LRUCache_moveToEnd(key, value) { - __classPrivateFieldGet(this, _LRUCache_cache, "f").delete(key); - __classPrivateFieldGet(this, _LRUCache_cache, "f").set(key, { - value, - lastAccessed: Date.now() - }); - }, _LRUCache_evict = function _LRUCache_evict() { - const cutoffDate = this.maxAge ? Date.now() - this.maxAge : 0; - let oldestItem = __classPrivateFieldGet(this, _LRUCache_cache, "f").entries().next(); - while (!oldestItem.done && (__classPrivateFieldGet(this, _LRUCache_cache, "f").size > this.capacity || oldestItem.value[1].lastAccessed < cutoffDate)) { - __classPrivateFieldGet(this, _LRUCache_cache, "f").delete(oldestItem.value[0]); - oldestItem = __classPrivateFieldGet(this, _LRUCache_cache, "f").entries().next(); - } - }; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/authclient.js -var require_authclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AuthClient = exports.DEFAULT_EAGER_REFRESH_THRESHOLD_MILLIS = exports.DEFAULT_UNIVERSE = undefined; - var events_1 = __require("events"); - var gaxios_1 = require_src57(); - var transporters_1 = require_transporters(); - var util_1 = require_util11(); - exports.DEFAULT_UNIVERSE = "googleapis.com"; - exports.DEFAULT_EAGER_REFRESH_THRESHOLD_MILLIS = 5 * 60 * 1000; - - class AuthClient extends events_1.EventEmitter { - constructor(opts = {}) { - var _a2, _b, _c, _d, _e; - super(); - this.credentials = {}; - this.eagerRefreshThresholdMillis = exports.DEFAULT_EAGER_REFRESH_THRESHOLD_MILLIS; - this.forceRefreshOnFailure = false; - this.universeDomain = exports.DEFAULT_UNIVERSE; - const options = (0, util_1.originalOrCamelOptions)(opts); - this.apiKey = opts.apiKey; - this.projectId = (_a2 = options.get("project_id")) !== null && _a2 !== undefined ? _a2 : null; - this.quotaProjectId = options.get("quota_project_id"); - this.credentials = (_b = options.get("credentials")) !== null && _b !== undefined ? _b : {}; - this.universeDomain = (_c = options.get("universe_domain")) !== null && _c !== undefined ? _c : exports.DEFAULT_UNIVERSE; - this.transporter = (_d = opts.transporter) !== null && _d !== undefined ? _d : new transporters_1.DefaultTransporter; - if (opts.transporterOptions) { - this.transporter.defaults = opts.transporterOptions; - } - if (opts.eagerRefreshThresholdMillis) { - this.eagerRefreshThresholdMillis = opts.eagerRefreshThresholdMillis; - } - this.forceRefreshOnFailure = (_e = opts.forceRefreshOnFailure) !== null && _e !== undefined ? _e : false; - } - get gaxios() { - if (this.transporter instanceof gaxios_1.Gaxios) { - return this.transporter; - } else if (this.transporter instanceof transporters_1.DefaultTransporter) { - return this.transporter.instance; - } else if ("instance" in this.transporter && this.transporter.instance instanceof gaxios_1.Gaxios) { - return this.transporter.instance; - } - return null; - } - setCredentials(credentials) { - this.credentials = credentials; - } - addSharedMetadataHeaders(headers) { - if (!headers["x-goog-user-project"] && this.quotaProjectId) { - headers["x-goog-user-project"] = this.quotaProjectId; - } - return headers; - } - static get RETRY_CONFIG() { - return { - retry: true, - retryConfig: { - httpMethodsToRetry: ["GET", "PUT", "POST", "HEAD", "OPTIONS", "DELETE"] - } - }; - } - } - exports.AuthClient = AuthClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/loginticket.js -var require_loginticket = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LoginTicket = undefined; - - class LoginTicket { - constructor(env, pay) { - this.envelope = env; - this.payload = pay; - } - getEnvelope() { - return this.envelope; - } - getPayload() { - return this.payload; - } - getUserId() { - const payload = this.getPayload(); - if (payload && payload.sub) { - return payload.sub; - } - return null; - } - getAttributes() { - return { envelope: this.getEnvelope(), payload: this.getPayload() }; - } - } - exports.LoginTicket = LoginTicket; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/oauth2client.js -var require_oauth2client = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OAuth2Client = exports.ClientAuthentication = exports.CertificateFormat = exports.CodeChallengeMethod = undefined; - var gaxios_1 = require_src57(); - var querystring = __require("querystring"); - var stream3 = __require("stream"); - var formatEcdsa = require_ecdsa_sig_formatter(); - var crypto_1 = require_crypto3(); - var authclient_1 = require_authclient(); - var loginticket_1 = require_loginticket(); - var CodeChallengeMethod; - (function(CodeChallengeMethod2) { - CodeChallengeMethod2["Plain"] = "plain"; - CodeChallengeMethod2["S256"] = "S256"; - })(CodeChallengeMethod || (exports.CodeChallengeMethod = CodeChallengeMethod = {})); - var CertificateFormat; - (function(CertificateFormat2) { - CertificateFormat2["PEM"] = "PEM"; - CertificateFormat2["JWK"] = "JWK"; - })(CertificateFormat || (exports.CertificateFormat = CertificateFormat = {})); - var ClientAuthentication; - (function(ClientAuthentication2) { - ClientAuthentication2["ClientSecretPost"] = "ClientSecretPost"; - ClientAuthentication2["ClientSecretBasic"] = "ClientSecretBasic"; - ClientAuthentication2["None"] = "None"; - })(ClientAuthentication || (exports.ClientAuthentication = ClientAuthentication = {})); - - class OAuth2Client extends authclient_1.AuthClient { - constructor(optionsOrClientId, clientSecret, redirectUri) { - const opts = optionsOrClientId && typeof optionsOrClientId === "object" ? optionsOrClientId : { clientId: optionsOrClientId, clientSecret, redirectUri }; - super(opts); - this.certificateCache = {}; - this.certificateExpiry = null; - this.certificateCacheFormat = CertificateFormat.PEM; - this.refreshTokenPromises = new Map; - this._clientId = opts.clientId; - this._clientSecret = opts.clientSecret; - this.redirectUri = opts.redirectUri; - this.endpoints = { - tokenInfoUrl: "https://oauth2.googleapis.com/tokeninfo", - oauth2AuthBaseUrl: "https://accounts.google.com/o/oauth2/v2/auth", - oauth2TokenUrl: "https://oauth2.googleapis.com/token", - oauth2RevokeUrl: "https://oauth2.googleapis.com/revoke", - oauth2FederatedSignonPemCertsUrl: "https://www.googleapis.com/oauth2/v1/certs", - oauth2FederatedSignonJwkCertsUrl: "https://www.googleapis.com/oauth2/v3/certs", - oauth2IapPublicKeyUrl: "https://www.gstatic.com/iap/verify/public_key", - ...opts.endpoints - }; - this.clientAuthentication = opts.clientAuthentication || ClientAuthentication.ClientSecretPost; - this.issuers = opts.issuers || [ - "accounts.google.com", - "https://accounts.google.com", - this.universeDomain - ]; - } - generateAuthUrl(opts = {}) { - if (opts.code_challenge_method && !opts.code_challenge) { - throw new Error("If a code_challenge_method is provided, code_challenge must be included."); - } - opts.response_type = opts.response_type || "code"; - opts.client_id = opts.client_id || this._clientId; - opts.redirect_uri = opts.redirect_uri || this.redirectUri; - if (Array.isArray(opts.scope)) { - opts.scope = opts.scope.join(" "); - } - const rootUrl = this.endpoints.oauth2AuthBaseUrl.toString(); - return rootUrl + "?" + querystring.stringify(opts); - } - generateCodeVerifier() { - throw new Error("generateCodeVerifier is removed, please use generateCodeVerifierAsync instead."); - } - async generateCodeVerifierAsync() { - const crypto2 = (0, crypto_1.createCrypto)(); - const randomString2 = crypto2.randomBytesBase64(96); - const codeVerifier = randomString2.replace(/\+/g, "~").replace(/=/g, "_").replace(/\//g, "-"); - const unencodedCodeChallenge = await crypto2.sha256DigestBase64(codeVerifier); - const codeChallenge = unencodedCodeChallenge.split("=")[0].replace(/\+/g, "-").replace(/\//g, "_"); - return { codeVerifier, codeChallenge }; - } - getToken(codeOrOptions, callback) { - const options = typeof codeOrOptions === "string" ? { code: codeOrOptions } : codeOrOptions; - if (callback) { - this.getTokenAsync(options).then((r) => callback(null, r.tokens, r.res), (e) => callback(e, null, e.response)); - } else { - return this.getTokenAsync(options); - } - } - async getTokenAsync(options) { - const url2 = this.endpoints.oauth2TokenUrl.toString(); - const headers = { - "Content-Type": "application/x-www-form-urlencoded" - }; - const values = { - client_id: options.client_id || this._clientId, - code_verifier: options.codeVerifier, - code: options.code, - grant_type: "authorization_code", - redirect_uri: options.redirect_uri || this.redirectUri - }; - if (this.clientAuthentication === ClientAuthentication.ClientSecretBasic) { - const basic = Buffer.from(`${this._clientId}:${this._clientSecret}`); - headers["Authorization"] = `Basic ${basic.toString("base64")}`; - } - if (this.clientAuthentication === ClientAuthentication.ClientSecretPost) { - values.client_secret = this._clientSecret; - } - const res = await this.transporter.request({ - ...OAuth2Client.RETRY_CONFIG, - method: "POST", - url: url2, - data: querystring.stringify(values), - headers - }); - const tokens = res.data; - if (res.data && res.data.expires_in) { - tokens.expiry_date = new Date().getTime() + res.data.expires_in * 1000; - delete tokens.expires_in; - } - this.emit("tokens", tokens); - return { tokens, res }; - } - async refreshToken(refreshToken) { - if (!refreshToken) { - return this.refreshTokenNoCache(refreshToken); - } - if (this.refreshTokenPromises.has(refreshToken)) { - return this.refreshTokenPromises.get(refreshToken); - } - const p = this.refreshTokenNoCache(refreshToken).then((r) => { - this.refreshTokenPromises.delete(refreshToken); - return r; - }, (e) => { - this.refreshTokenPromises.delete(refreshToken); - throw e; - }); - this.refreshTokenPromises.set(refreshToken, p); - return p; - } - async refreshTokenNoCache(refreshToken) { - var _a2; - if (!refreshToken) { - throw new Error("No refresh token is set."); - } - const url2 = this.endpoints.oauth2TokenUrl.toString(); - const data = { - refresh_token: refreshToken, - client_id: this._clientId, - client_secret: this._clientSecret, - grant_type: "refresh_token" - }; - let res; - try { - res = await this.transporter.request({ - ...OAuth2Client.RETRY_CONFIG, - method: "POST", - url: url2, - data: querystring.stringify(data), - headers: { "Content-Type": "application/x-www-form-urlencoded" } - }); - } catch (e) { - if (e instanceof gaxios_1.GaxiosError && e.message === "invalid_grant" && ((_a2 = e.response) === null || _a2 === undefined ? undefined : _a2.data) && /ReAuth/i.test(e.response.data.error_description)) { - e.message = JSON.stringify(e.response.data); - } - throw e; - } - const tokens = res.data; - if (res.data && res.data.expires_in) { - tokens.expiry_date = new Date().getTime() + res.data.expires_in * 1000; - delete tokens.expires_in; - } - this.emit("tokens", tokens); - return { tokens, res }; - } - refreshAccessToken(callback) { - if (callback) { - this.refreshAccessTokenAsync().then((r) => callback(null, r.credentials, r.res), callback); - } else { - return this.refreshAccessTokenAsync(); - } - } - async refreshAccessTokenAsync() { - const r = await this.refreshToken(this.credentials.refresh_token); - const tokens = r.tokens; - tokens.refresh_token = this.credentials.refresh_token; - this.credentials = tokens; - return { credentials: this.credentials, res: r.res }; - } - getAccessToken(callback) { - if (callback) { - this.getAccessTokenAsync().then((r) => callback(null, r.token, r.res), callback); - } else { - return this.getAccessTokenAsync(); - } - } - async getAccessTokenAsync() { - const shouldRefresh = !this.credentials.access_token || this.isTokenExpiring(); - if (shouldRefresh) { - if (!this.credentials.refresh_token) { - if (this.refreshHandler) { - const refreshedAccessToken = await this.processAndValidateRefreshHandler(); - if (refreshedAccessToken === null || refreshedAccessToken === undefined ? undefined : refreshedAccessToken.access_token) { - this.setCredentials(refreshedAccessToken); - return { token: this.credentials.access_token }; - } - } else { - throw new Error("No refresh token or refresh handler callback is set."); - } - } - const r = await this.refreshAccessTokenAsync(); - if (!r.credentials || r.credentials && !r.credentials.access_token) { - throw new Error("Could not refresh access token."); - } - return { token: r.credentials.access_token, res: r.res }; - } else { - return { token: this.credentials.access_token }; - } - } - async getRequestHeaders(url2) { - const headers = (await this.getRequestMetadataAsync(url2)).headers; - return headers; - } - async getRequestMetadataAsync(url2) { - const thisCreds = this.credentials; - if (!thisCreds.access_token && !thisCreds.refresh_token && !this.apiKey && !this.refreshHandler) { - throw new Error("No access, refresh token, API key or refresh handler callback is set."); - } - if (thisCreds.access_token && !this.isTokenExpiring()) { - thisCreds.token_type = thisCreds.token_type || "Bearer"; - const headers2 = { - Authorization: thisCreds.token_type + " " + thisCreds.access_token - }; - return { headers: this.addSharedMetadataHeaders(headers2) }; - } - if (this.refreshHandler) { - const refreshedAccessToken = await this.processAndValidateRefreshHandler(); - if (refreshedAccessToken === null || refreshedAccessToken === undefined ? undefined : refreshedAccessToken.access_token) { - this.setCredentials(refreshedAccessToken); - const headers2 = { - Authorization: "Bearer " + this.credentials.access_token - }; - return { headers: this.addSharedMetadataHeaders(headers2) }; - } - } - if (this.apiKey) { - return { headers: { "X-Goog-Api-Key": this.apiKey } }; - } - let r = null; - let tokens = null; - try { - r = await this.refreshToken(thisCreds.refresh_token); - tokens = r.tokens; - } catch (err) { - const e = err; - if (e.response && (e.response.status === 403 || e.response.status === 404)) { - e.message = `Could not refresh access token: ${e.message}`; - } - throw e; - } - const credentials = this.credentials; - credentials.token_type = credentials.token_type || "Bearer"; - tokens.refresh_token = credentials.refresh_token; - this.credentials = tokens; - const headers = { - Authorization: credentials.token_type + " " + tokens.access_token - }; - return { headers: this.addSharedMetadataHeaders(headers), res: r.res }; - } - static getRevokeTokenUrl(token) { - return new OAuth2Client().getRevokeTokenURL(token).toString(); - } - getRevokeTokenURL(token) { - const url2 = new URL(this.endpoints.oauth2RevokeUrl); - url2.searchParams.append("token", token); - return url2; - } - revokeToken(token, callback) { - const opts = { - ...OAuth2Client.RETRY_CONFIG, - url: this.getRevokeTokenURL(token).toString(), - method: "POST" - }; - if (callback) { - this.transporter.request(opts).then((r) => callback(null, r), callback); - } else { - return this.transporter.request(opts); - } - } - revokeCredentials(callback) { - if (callback) { - this.revokeCredentialsAsync().then((res) => callback(null, res), callback); - } else { - return this.revokeCredentialsAsync(); - } - } - async revokeCredentialsAsync() { - const token = this.credentials.access_token; - this.credentials = {}; - if (token) { - return this.revokeToken(token); - } else { - throw new Error("No access token to revoke."); - } - } - request(opts, callback) { - if (callback) { - this.requestAsync(opts).then((r) => callback(null, r), (e) => { - return callback(e, e.response); - }); - } else { - return this.requestAsync(opts); - } - } - async requestAsync(opts, reAuthRetried = false) { - let r2; - try { - const r = await this.getRequestMetadataAsync(opts.url); - opts.headers = opts.headers || {}; - if (r.headers && r.headers["x-goog-user-project"]) { - opts.headers["x-goog-user-project"] = r.headers["x-goog-user-project"]; - } - if (r.headers && r.headers.Authorization) { - opts.headers.Authorization = r.headers.Authorization; - } - if (this.apiKey) { - opts.headers["X-Goog-Api-Key"] = this.apiKey; - } - r2 = await this.transporter.request(opts); - } catch (e) { - const res = e.response; - if (res) { - const statusCode = res.status; - const mayRequireRefresh = this.credentials && this.credentials.access_token && this.credentials.refresh_token && (!this.credentials.expiry_date || this.forceRefreshOnFailure); - const mayRequireRefreshWithNoRefreshToken = this.credentials && this.credentials.access_token && !this.credentials.refresh_token && (!this.credentials.expiry_date || this.forceRefreshOnFailure) && this.refreshHandler; - const isReadableStream = res.config.data instanceof stream3.Readable; - const isAuthErr = statusCode === 401 || statusCode === 403; - if (!reAuthRetried && isAuthErr && !isReadableStream && mayRequireRefresh) { - await this.refreshAccessTokenAsync(); - return this.requestAsync(opts, true); - } else if (!reAuthRetried && isAuthErr && !isReadableStream && mayRequireRefreshWithNoRefreshToken) { - const refreshedAccessToken = await this.processAndValidateRefreshHandler(); - if (refreshedAccessToken === null || refreshedAccessToken === undefined ? undefined : refreshedAccessToken.access_token) { - this.setCredentials(refreshedAccessToken); - } - return this.requestAsync(opts, true); - } - } - throw e; - } - return r2; - } - verifyIdToken(options, callback) { - if (callback && typeof callback !== "function") { - throw new Error("This method accepts an options object as the first parameter, which includes the idToken, audience, and maxExpiry."); - } - if (callback) { - this.verifyIdTokenAsync(options).then((r) => callback(null, r), callback); - } else { - return this.verifyIdTokenAsync(options); - } - } - async verifyIdTokenAsync(options) { - if (!options.idToken) { - throw new Error("The verifyIdToken method requires an ID Token"); - } - const response = await this.getFederatedSignonCertsAsync(); - const login = await this.verifySignedJwtWithCertsAsync(options.idToken, response.certs, options.audience, this.issuers, options.maxExpiry); - return login; - } - async getTokenInfo(accessToken) { - const { data } = await this.transporter.request({ - ...OAuth2Client.RETRY_CONFIG, - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - Authorization: `Bearer ${accessToken}` - }, - url: this.endpoints.tokenInfoUrl.toString() - }); - const info = Object.assign({ - expiry_date: new Date().getTime() + data.expires_in * 1000, - scopes: data.scope.split(" ") - }, data); - delete info.expires_in; - delete info.scope; - return info; - } - getFederatedSignonCerts(callback) { - if (callback) { - this.getFederatedSignonCertsAsync().then((r) => callback(null, r.certs, r.res), callback); - } else { - return this.getFederatedSignonCertsAsync(); - } - } - async getFederatedSignonCertsAsync() { - const nowTime = new Date().getTime(); - const format = (0, crypto_1.hasBrowserCrypto)() ? CertificateFormat.JWK : CertificateFormat.PEM; - if (this.certificateExpiry && nowTime < this.certificateExpiry.getTime() && this.certificateCacheFormat === format) { - return { certs: this.certificateCache, format }; - } - let res; - let url2; - switch (format) { - case CertificateFormat.PEM: - url2 = this.endpoints.oauth2FederatedSignonPemCertsUrl.toString(); - break; - case CertificateFormat.JWK: - url2 = this.endpoints.oauth2FederatedSignonJwkCertsUrl.toString(); - break; - default: - throw new Error(`Unsupported certificate format ${format}`); - } - try { - res = await this.transporter.request({ - ...OAuth2Client.RETRY_CONFIG, - url: url2 - }); - } catch (e) { - if (e instanceof Error) { - e.message = `Failed to retrieve verification certificates: ${e.message}`; - } - throw e; - } - const cacheControl = res ? res.headers["cache-control"] : undefined; - let cacheAge = -1; - if (cacheControl) { - const pattern = new RegExp("max-age=([0-9]*)"); - const regexResult = pattern.exec(cacheControl); - if (regexResult && regexResult.length === 2) { - cacheAge = Number(regexResult[1]) * 1000; - } - } - let certificates = {}; - switch (format) { - case CertificateFormat.PEM: - certificates = res.data; - break; - case CertificateFormat.JWK: - for (const key of res.data.keys) { - certificates[key.kid] = key; - } - break; - default: - throw new Error(`Unsupported certificate format ${format}`); - } - const now2 = new Date; - this.certificateExpiry = cacheAge === -1 ? null : new Date(now2.getTime() + cacheAge); - this.certificateCache = certificates; - this.certificateCacheFormat = format; - return { certs: certificates, format, res }; - } - getIapPublicKeys(callback) { - if (callback) { - this.getIapPublicKeysAsync().then((r) => callback(null, r.pubkeys, r.res), callback); - } else { - return this.getIapPublicKeysAsync(); - } - } - async getIapPublicKeysAsync() { - let res; - const url2 = this.endpoints.oauth2IapPublicKeyUrl.toString(); - try { - res = await this.transporter.request({ - ...OAuth2Client.RETRY_CONFIG, - url: url2 - }); - } catch (e) { - if (e instanceof Error) { - e.message = `Failed to retrieve verification certificates: ${e.message}`; - } - throw e; - } - return { pubkeys: res.data, res }; - } - verifySignedJwtWithCerts() { - throw new Error("verifySignedJwtWithCerts is removed, please use verifySignedJwtWithCertsAsync instead."); - } - async verifySignedJwtWithCertsAsync(jwt2, certs, requiredAudience, issuers, maxExpiry) { - const crypto2 = (0, crypto_1.createCrypto)(); - if (!maxExpiry) { - maxExpiry = OAuth2Client.DEFAULT_MAX_TOKEN_LIFETIME_SECS_; - } - const segments = jwt2.split("."); - if (segments.length !== 3) { - throw new Error("Wrong number of segments in token: " + jwt2); - } - const signed = segments[0] + "." + segments[1]; - let signature = segments[2]; - let envelope; - let payload; - try { - envelope = JSON.parse(crypto2.decodeBase64StringUtf8(segments[0])); - } catch (err) { - if (err instanceof Error) { - err.message = `Can't parse token envelope: ${segments[0]}': ${err.message}`; - } - throw err; - } - if (!envelope) { - throw new Error("Can't parse token envelope: " + segments[0]); - } - try { - payload = JSON.parse(crypto2.decodeBase64StringUtf8(segments[1])); - } catch (err) { - if (err instanceof Error) { - err.message = `Can't parse token payload '${segments[0]}`; - } - throw err; - } - if (!payload) { - throw new Error("Can't parse token payload: " + segments[1]); - } - if (!Object.prototype.hasOwnProperty.call(certs, envelope.kid)) { - throw new Error("No pem found for envelope: " + JSON.stringify(envelope)); - } - const cert = certs[envelope.kid]; - if (envelope.alg === "ES256") { - signature = formatEcdsa.joseToDer(signature, "ES256").toString("base64"); - } - const verified = await crypto2.verify(cert, signed, signature); - if (!verified) { - throw new Error("Invalid token signature: " + jwt2); - } - if (!payload.iat) { - throw new Error("No issue time in token: " + JSON.stringify(payload)); - } - if (!payload.exp) { - throw new Error("No expiration time in token: " + JSON.stringify(payload)); - } - const iat = Number(payload.iat); - if (isNaN(iat)) - throw new Error("iat field using invalid format"); - const exp = Number(payload.exp); - if (isNaN(exp)) - throw new Error("exp field using invalid format"); - const now2 = new Date().getTime() / 1000; - if (exp >= now2 + maxExpiry) { - throw new Error("Expiration time too far in future: " + JSON.stringify(payload)); - } - const earliest = iat - OAuth2Client.CLOCK_SKEW_SECS_; - const latest = exp + OAuth2Client.CLOCK_SKEW_SECS_; - if (now2 < earliest) { - throw new Error("Token used too early, " + now2 + " < " + earliest + ": " + JSON.stringify(payload)); - } - if (now2 > latest) { - throw new Error("Token used too late, " + now2 + " > " + latest + ": " + JSON.stringify(payload)); - } - if (issuers && issuers.indexOf(payload.iss) < 0) { - throw new Error("Invalid issuer, expected one of [" + issuers + "], but got " + payload.iss); - } - if (typeof requiredAudience !== "undefined" && requiredAudience !== null) { - const aud = payload.aud; - let audVerified = false; - if (requiredAudience.constructor === Array) { - audVerified = requiredAudience.indexOf(aud) > -1; - } else { - audVerified = aud === requiredAudience; - } - if (!audVerified) { - throw new Error("Wrong recipient, payload audience != requiredAudience"); - } - } - return new loginticket_1.LoginTicket(envelope, payload); - } - async processAndValidateRefreshHandler() { - if (this.refreshHandler) { - const accessTokenResponse = await this.refreshHandler(); - if (!accessTokenResponse.access_token) { - throw new Error("No access token is returned by the refreshHandler callback."); - } - return accessTokenResponse; - } - return; - } - isTokenExpiring() { - const expiryDate = this.credentials.expiry_date; - return expiryDate ? expiryDate <= new Date().getTime() + this.eagerRefreshThresholdMillis : false; - } - } - exports.OAuth2Client = OAuth2Client; - OAuth2Client.GOOGLE_TOKEN_INFO_URL = "https://oauth2.googleapis.com/tokeninfo"; - OAuth2Client.CLOCK_SKEW_SECS_ = 300; - OAuth2Client.DEFAULT_MAX_TOKEN_LIFETIME_SECS_ = 86400; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/computeclient.js -var require_computeclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Compute = undefined; - var gaxios_1 = require_src57(); - var gcpMetadata = require_src59(); - var oauth2client_1 = require_oauth2client(); - - class Compute extends oauth2client_1.OAuth2Client { - constructor(options = {}) { - super(options); - this.credentials = { expiry_date: 1, refresh_token: "compute-placeholder" }; - this.serviceAccountEmail = options.serviceAccountEmail || "default"; - this.scopes = Array.isArray(options.scopes) ? options.scopes : options.scopes ? [options.scopes] : []; - } - async refreshTokenNoCache(refreshToken) { - const tokenPath = `service-accounts/${this.serviceAccountEmail}/token`; - let data; - try { - const instanceOptions = { - property: tokenPath - }; - if (this.scopes.length > 0) { - instanceOptions.params = { - scopes: this.scopes.join(",") - }; - } - data = await gcpMetadata.instance(instanceOptions); - } catch (e) { - if (e instanceof gaxios_1.GaxiosError) { - e.message = `Could not refresh access token: ${e.message}`; - this.wrapError(e); - } - throw e; - } - const tokens = data; - if (data && data.expires_in) { - tokens.expiry_date = new Date().getTime() + data.expires_in * 1000; - delete tokens.expires_in; - } - this.emit("tokens", tokens); - return { tokens, res: null }; - } - async fetchIdToken(targetAudience) { - const idTokenPath = `service-accounts/${this.serviceAccountEmail}/identity` + `?format=full&audience=${targetAudience}`; - let idToken; - try { - const instanceOptions = { - property: idTokenPath - }; - idToken = await gcpMetadata.instance(instanceOptions); - } catch (e) { - if (e instanceof Error) { - e.message = `Could not fetch ID token: ${e.message}`; - } - throw e; - } - return idToken; - } - wrapError(e) { - const res = e.response; - if (res && res.status) { - e.status = res.status; - if (res.status === 403) { - e.message = "A Forbidden error was returned while attempting to retrieve an access " + "token for the Compute Engine built-in service account. This may be because the Compute " + "Engine instance does not have the correct permission scopes specified: " + e.message; - } else if (res.status === 404) { - e.message = "A Not Found error was returned while attempting to retrieve an access" + "token for the Compute Engine built-in service account. This may be because the Compute " + "Engine instance does not have any permission scopes specified: " + e.message; - } - } - } - } - exports.Compute = Compute; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/idtokenclient.js -var require_idtokenclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.IdTokenClient = undefined; - var oauth2client_1 = require_oauth2client(); - - class IdTokenClient extends oauth2client_1.OAuth2Client { - constructor(options) { - super(options); - this.targetAudience = options.targetAudience; - this.idTokenProvider = options.idTokenProvider; - } - async getRequestMetadataAsync(url2) { - if (!this.credentials.id_token || !this.credentials.expiry_date || this.isTokenExpiring()) { - const idToken = await this.idTokenProvider.fetchIdToken(this.targetAudience); - this.credentials = { - id_token: idToken, - expiry_date: this.getIdTokenExpiryDate(idToken) - }; - } - const headers = { - Authorization: "Bearer " + this.credentials.id_token - }; - return { headers }; - } - getIdTokenExpiryDate(idToken) { - const payloadB64 = idToken.split(".")[1]; - if (payloadB64) { - const payload = JSON.parse(Buffer.from(payloadB64, "base64").toString("ascii")); - return payload.exp * 1000; - } - } - } - exports.IdTokenClient = IdTokenClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/envDetect.js -var require_envDetect = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GCPEnv = undefined; - exports.clear = clear; - exports.getEnv = getEnv; - var gcpMetadata = require_src59(); - var GCPEnv; - (function(GCPEnv2) { - GCPEnv2["APP_ENGINE"] = "APP_ENGINE"; - GCPEnv2["KUBERNETES_ENGINE"] = "KUBERNETES_ENGINE"; - GCPEnv2["CLOUD_FUNCTIONS"] = "CLOUD_FUNCTIONS"; - GCPEnv2["COMPUTE_ENGINE"] = "COMPUTE_ENGINE"; - GCPEnv2["CLOUD_RUN"] = "CLOUD_RUN"; - GCPEnv2["NONE"] = "NONE"; - })(GCPEnv || (exports.GCPEnv = GCPEnv = {})); - var envPromise; - function clear() { - envPromise = undefined; - } - async function getEnv() { - if (envPromise) { - return envPromise; - } - envPromise = getEnvMemoized(); - return envPromise; - } - async function getEnvMemoized() { - let env = GCPEnv.NONE; - if (isAppEngine()) { - env = GCPEnv.APP_ENGINE; - } else if (isCloudFunction()) { - env = GCPEnv.CLOUD_FUNCTIONS; - } else if (await isComputeEngine()) { - if (await isKubernetesEngine()) { - env = GCPEnv.KUBERNETES_ENGINE; - } else if (isCloudRun()) { - env = GCPEnv.CLOUD_RUN; - } else { - env = GCPEnv.COMPUTE_ENGINE; - } - } else { - env = GCPEnv.NONE; - } - return env; - } - function isAppEngine() { - return !!(process.env.GAE_SERVICE || process.env.GAE_MODULE_NAME); - } - function isCloudFunction() { - return !!(process.env.FUNCTION_NAME || process.env.FUNCTION_TARGET); - } - function isCloudRun() { - return !!process.env.K_CONFIGURATION; - } - async function isKubernetesEngine() { - try { - await gcpMetadata.instance("attributes/cluster-name"); - return true; - } catch (e) { - return false; - } - } - async function isComputeEngine() { - return gcpMetadata.isAvailable(); - } -}); - -// ../../../../node_modules/.bun/jws@4.0.1/node_modules/jws/lib/data-stream.js -var require_data_stream = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - var Stream = __require("stream"); - var util3 = __require("util"); - function DataStream(data) { - this.buffer = null; - this.writable = true; - this.readable = true; - if (!data) { - this.buffer = Buffer2.alloc(0); - return this; - } - if (typeof data.pipe === "function") { - this.buffer = Buffer2.alloc(0); - data.pipe(this); - return this; - } - if (data.length || typeof data === "object") { - this.buffer = data; - this.writable = false; - process.nextTick(function() { - this.emit("end", data); - this.readable = false; - this.emit("close"); - }.bind(this)); - return this; - } - throw new TypeError("Unexpected data type (" + typeof data + ")"); - } - util3.inherits(DataStream, Stream); - DataStream.prototype.write = function write(data) { - this.buffer = Buffer2.concat([this.buffer, Buffer2.from(data)]); - this.emit("data", data); - }; - DataStream.prototype.end = function end(data) { - if (data) - this.write(data); - this.emit("end", data); - this.emit("close"); - this.writable = false; - this.readable = false; - }; - module.exports = DataStream; -}); - -// ../../../../node_modules/.bun/buffer-equal-constant-time@1.0.1/node_modules/buffer-equal-constant-time/index.js -var require_buffer_equal_constant_time = __commonJS((exports, module) => { - var Buffer2 = __require("buffer").Buffer; - var SlowBuffer = __require("buffer").SlowBuffer; - module.exports = bufferEq; - function bufferEq(a, b) { - if (!Buffer2.isBuffer(a) || !Buffer2.isBuffer(b)) { - return false; - } - if (a.length !== b.length) { - return false; - } - var c = 0; - for (var i = 0;i < a.length; i++) { - c |= a[i] ^ b[i]; - } - return c === 0; - } - bufferEq.install = function() { - Buffer2.prototype.equal = SlowBuffer.prototype.equal = function equal(that) { - return bufferEq(this, that); - }; - }; - var origBufEqual = Buffer2.prototype.equal; - var origSlowBufEqual = SlowBuffer.prototype.equal; - bufferEq.restore = function() { - Buffer2.prototype.equal = origBufEqual; - SlowBuffer.prototype.equal = origSlowBufEqual; - }; -}); - -// ../../../../node_modules/.bun/jwa@2.0.1/node_modules/jwa/index.js -var require_jwa = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - var crypto2 = __require("crypto"); - var formatEcdsa = require_ecdsa_sig_formatter(); - var util3 = __require("util"); - var MSG_INVALID_ALGORITHM = `"%s" is not a valid algorithm. - Supported algorithms are: - "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".`; - var MSG_INVALID_SECRET = "secret must be a string or buffer"; - var MSG_INVALID_VERIFIER_KEY = "key must be a string or a buffer"; - var MSG_INVALID_SIGNER_KEY = "key must be a string, a buffer or an object"; - var supportsKeyObjects = typeof crypto2.createPublicKey === "function"; - if (supportsKeyObjects) { - MSG_INVALID_VERIFIER_KEY += " or a KeyObject"; - MSG_INVALID_SECRET += "or a KeyObject"; - } - function checkIsPublicKey(key) { - if (Buffer2.isBuffer(key)) { - return; - } - if (typeof key === "string") { - return; - } - if (!supportsKeyObjects) { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - if (typeof key !== "object") { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - if (typeof key.type !== "string") { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - if (typeof key.asymmetricKeyType !== "string") { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - if (typeof key.export !== "function") { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - } - function checkIsPrivateKey(key) { - if (Buffer2.isBuffer(key)) { - return; - } - if (typeof key === "string") { - return; - } - if (typeof key === "object") { - return; - } - throw typeError(MSG_INVALID_SIGNER_KEY); - } - function checkIsSecretKey(key) { - if (Buffer2.isBuffer(key)) { - return; - } - if (typeof key === "string") { - return key; - } - if (!supportsKeyObjects) { - throw typeError(MSG_INVALID_SECRET); - } - if (typeof key !== "object") { - throw typeError(MSG_INVALID_SECRET); - } - if (key.type !== "secret") { - throw typeError(MSG_INVALID_SECRET); - } - if (typeof key.export !== "function") { - throw typeError(MSG_INVALID_SECRET); - } - } - function fromBase64(base643) { - return base643.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); - } - function toBase64(base64url3) { - base64url3 = base64url3.toString(); - var padding = 4 - base64url3.length % 4; - if (padding !== 4) { - for (var i = 0;i < padding; ++i) { - base64url3 += "="; - } - } - return base64url3.replace(/\-/g, "+").replace(/_/g, "/"); - } - function typeError(template) { - var args = [].slice.call(arguments, 1); - var errMsg = util3.format.bind(util3, template).apply(null, args); - return new TypeError(errMsg); - } - function bufferOrString(obj) { - return Buffer2.isBuffer(obj) || typeof obj === "string"; - } - function normalizeInput(thing) { - if (!bufferOrString(thing)) - thing = JSON.stringify(thing); - return thing; - } - function createHmacSigner(bits) { - return function sign(thing, secret) { - checkIsSecretKey(secret); - thing = normalizeInput(thing); - var hmac = crypto2.createHmac("sha" + bits, secret); - var sig = (hmac.update(thing), hmac.digest("base64")); - return fromBase64(sig); - }; - } - var bufferEqual; - var timingSafeEqual2 = "timingSafeEqual" in crypto2 ? function timingSafeEqual(a, b) { - if (a.byteLength !== b.byteLength) { - return false; - } - return crypto2.timingSafeEqual(a, b); - } : function timingSafeEqual(a, b) { - if (!bufferEqual) { - bufferEqual = require_buffer_equal_constant_time(); - } - return bufferEqual(a, b); - }; - function createHmacVerifier(bits) { - return function verify(thing, signature, secret) { - var computedSig = createHmacSigner(bits)(thing, secret); - return timingSafeEqual2(Buffer2.from(signature), Buffer2.from(computedSig)); - }; - } - function createKeySigner(bits) { - return function sign(thing, privateKey) { - checkIsPrivateKey(privateKey); - thing = normalizeInput(thing); - var signer = crypto2.createSign("RSA-SHA" + bits); - var sig = (signer.update(thing), signer.sign(privateKey, "base64")); - return fromBase64(sig); - }; - } - function createKeyVerifier(bits) { - return function verify(thing, signature, publicKey) { - checkIsPublicKey(publicKey); - thing = normalizeInput(thing); - signature = toBase64(signature); - var verifier = crypto2.createVerify("RSA-SHA" + bits); - verifier.update(thing); - return verifier.verify(publicKey, signature, "base64"); - }; - } - function createPSSKeySigner(bits) { - return function sign(thing, privateKey) { - checkIsPrivateKey(privateKey); - thing = normalizeInput(thing); - var signer = crypto2.createSign("RSA-SHA" + bits); - var sig = (signer.update(thing), signer.sign({ - key: privateKey, - padding: crypto2.constants.RSA_PKCS1_PSS_PADDING, - saltLength: crypto2.constants.RSA_PSS_SALTLEN_DIGEST - }, "base64")); - return fromBase64(sig); - }; - } - function createPSSKeyVerifier(bits) { - return function verify(thing, signature, publicKey) { - checkIsPublicKey(publicKey); - thing = normalizeInput(thing); - signature = toBase64(signature); - var verifier = crypto2.createVerify("RSA-SHA" + bits); - verifier.update(thing); - return verifier.verify({ - key: publicKey, - padding: crypto2.constants.RSA_PKCS1_PSS_PADDING, - saltLength: crypto2.constants.RSA_PSS_SALTLEN_DIGEST - }, signature, "base64"); - }; - } - function createECDSASigner(bits) { - var inner = createKeySigner(bits); - return function sign() { - var signature = inner.apply(null, arguments); - signature = formatEcdsa.derToJose(signature, "ES" + bits); - return signature; - }; - } - function createECDSAVerifer(bits) { - var inner = createKeyVerifier(bits); - return function verify(thing, signature, publicKey) { - signature = formatEcdsa.joseToDer(signature, "ES" + bits).toString("base64"); - var result = inner(thing, signature, publicKey); - return result; - }; - } - function createNoneSigner() { - return function sign() { - return ""; - }; - } - function createNoneVerifier() { - return function verify(thing, signature) { - return signature === ""; - }; - } - module.exports = function jwa(algorithm2) { - var signerFactories = { - hs: createHmacSigner, - rs: createKeySigner, - ps: createPSSKeySigner, - es: createECDSASigner, - none: createNoneSigner - }; - var verifierFactories = { - hs: createHmacVerifier, - rs: createKeyVerifier, - ps: createPSSKeyVerifier, - es: createECDSAVerifer, - none: createNoneVerifier - }; - var match2 = algorithm2.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/); - if (!match2) - throw typeError(MSG_INVALID_ALGORITHM, algorithm2); - var algo = (match2[1] || match2[3]).toLowerCase(); - var bits = match2[2]; - return { - sign: signerFactories[algo](bits), - verify: verifierFactories[algo](bits) - }; - }; -}); - -// ../../../../node_modules/.bun/jws@4.0.1/node_modules/jws/lib/tostring.js -var require_tostring = __commonJS((exports, module) => { - var Buffer2 = __require("buffer").Buffer; - module.exports = function toString(obj) { - if (typeof obj === "string") - return obj; - if (typeof obj === "number" || Buffer2.isBuffer(obj)) - return obj.toString(); - return JSON.stringify(obj); - }; -}); - -// ../../../../node_modules/.bun/jws@4.0.1/node_modules/jws/lib/sign-stream.js -var require_sign_stream = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - var DataStream = require_data_stream(); - var jwa = require_jwa(); - var Stream = __require("stream"); - var toString = require_tostring(); - var util3 = __require("util"); - function base64url3(string5, encoding) { - return Buffer2.from(string5, encoding).toString("base64").replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); - } - function jwsSecuredInput(header, payload, encoding) { - encoding = encoding || "utf8"; - var encodedHeader = base64url3(toString(header), "binary"); - var encodedPayload = base64url3(toString(payload), encoding); - return util3.format("%s.%s", encodedHeader, encodedPayload); - } - function jwsSign(opts) { - var header = opts.header; - var payload = opts.payload; - var secretOrKey = opts.secret || opts.privateKey; - var encoding = opts.encoding; - var algo = jwa(header.alg); - var securedInput = jwsSecuredInput(header, payload, encoding); - var signature = algo.sign(securedInput, secretOrKey); - return util3.format("%s.%s", securedInput, signature); - } - function SignStream(opts) { - var secret = opts.secret; - secret = secret == null ? opts.privateKey : secret; - secret = secret == null ? opts.key : secret; - if (/^hs/i.test(opts.header.alg) === true && secret == null) { - throw new TypeError("secret must be a string or buffer or a KeyObject"); - } - var secretStream = new DataStream(secret); - this.readable = true; - this.header = opts.header; - this.encoding = opts.encoding; - this.secret = this.privateKey = this.key = secretStream; - this.payload = new DataStream(opts.payload); - this.secret.once("close", function() { - if (!this.payload.writable && this.readable) - this.sign(); - }.bind(this)); - this.payload.once("close", function() { - if (!this.secret.writable && this.readable) - this.sign(); - }.bind(this)); - } - util3.inherits(SignStream, Stream); - SignStream.prototype.sign = function sign() { - try { - var signature = jwsSign({ - header: this.header, - payload: this.payload.buffer, - secret: this.secret.buffer, - encoding: this.encoding - }); - this.emit("done", signature); - this.emit("data", signature); - this.emit("end"); - this.readable = false; - return signature; - } catch (e) { - this.readable = false; - this.emit("error", e); - this.emit("close"); - } - }; - SignStream.sign = jwsSign; - module.exports = SignStream; -}); - -// ../../../../node_modules/.bun/jws@4.0.1/node_modules/jws/lib/verify-stream.js -var require_verify_stream = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - var DataStream = require_data_stream(); - var jwa = require_jwa(); - var Stream = __require("stream"); - var toString = require_tostring(); - var util3 = __require("util"); - var JWS_REGEX = /^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/; - function isObject2(thing) { - return Object.prototype.toString.call(thing) === "[object Object]"; - } - function safeJsonParse(thing) { - if (isObject2(thing)) - return thing; - try { - return JSON.parse(thing); - } catch (e) { - return; - } - } - function headerFromJWS(jwsSig) { - var encodedHeader = jwsSig.split(".", 1)[0]; - return safeJsonParse(Buffer2.from(encodedHeader, "base64").toString("binary")); - } - function securedInputFromJWS(jwsSig) { - return jwsSig.split(".", 2).join("."); - } - function signatureFromJWS(jwsSig) { - return jwsSig.split(".")[2]; - } - function payloadFromJWS(jwsSig, encoding) { - encoding = encoding || "utf8"; - var payload = jwsSig.split(".")[1]; - return Buffer2.from(payload, "base64").toString(encoding); - } - function isValidJws(string5) { - return JWS_REGEX.test(string5) && !!headerFromJWS(string5); - } - function jwsVerify(jwsSig, algorithm2, secretOrKey) { - if (!algorithm2) { - var err = new Error("Missing algorithm parameter for jws.verify"); - err.code = "MISSING_ALGORITHM"; - throw err; - } - jwsSig = toString(jwsSig); - var signature = signatureFromJWS(jwsSig); - var securedInput = securedInputFromJWS(jwsSig); - var algo = jwa(algorithm2); - return algo.verify(securedInput, signature, secretOrKey); - } - function jwsDecode(jwsSig, opts) { - opts = opts || {}; - jwsSig = toString(jwsSig); - if (!isValidJws(jwsSig)) - return null; - var header = headerFromJWS(jwsSig); - if (!header) - return null; - var payload = payloadFromJWS(jwsSig); - if (header.typ === "JWT" || opts.json) - payload = JSON.parse(payload, opts.encoding); - return { - header, - payload, - signature: signatureFromJWS(jwsSig) - }; - } - function VerifyStream(opts) { - opts = opts || {}; - var secretOrKey = opts.secret; - secretOrKey = secretOrKey == null ? opts.publicKey : secretOrKey; - secretOrKey = secretOrKey == null ? opts.key : secretOrKey; - if (/^hs/i.test(opts.algorithm) === true && secretOrKey == null) { - throw new TypeError("secret must be a string or buffer or a KeyObject"); - } - var secretStream = new DataStream(secretOrKey); - this.readable = true; - this.algorithm = opts.algorithm; - this.encoding = opts.encoding; - this.secret = this.publicKey = this.key = secretStream; - this.signature = new DataStream(opts.signature); - this.secret.once("close", function() { - if (!this.signature.writable && this.readable) - this.verify(); - }.bind(this)); - this.signature.once("close", function() { - if (!this.secret.writable && this.readable) - this.verify(); - }.bind(this)); - } - util3.inherits(VerifyStream, Stream); - VerifyStream.prototype.verify = function verify() { - try { - var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer); - var obj = jwsDecode(this.signature.buffer, this.encoding); - this.emit("done", valid, obj); - this.emit("data", valid); - this.emit("end"); - this.readable = false; - return valid; - } catch (e) { - this.readable = false; - this.emit("error", e); - this.emit("close"); - } - }; - VerifyStream.decode = jwsDecode; - VerifyStream.isValid = isValidJws; - VerifyStream.verify = jwsVerify; - module.exports = VerifyStream; -}); - -// ../../../../node_modules/.bun/jws@4.0.1/node_modules/jws/index.js -var require_jws = __commonJS((exports) => { - var SignStream = require_sign_stream(); - var VerifyStream = require_verify_stream(); - var ALGORITHMS = [ - "HS256", - "HS384", - "HS512", - "RS256", - "RS384", - "RS512", - "PS256", - "PS384", - "PS512", - "ES256", - "ES384", - "ES512" - ]; - exports.ALGORITHMS = ALGORITHMS; - exports.sign = SignStream.sign; - exports.verify = VerifyStream.verify; - exports.decode = VerifyStream.decode; - exports.isValid = VerifyStream.isValid; - exports.createSign = function createSign(opts) { - return new SignStream(opts); - }; - exports.createVerify = function createVerify(opts) { - return new VerifyStream(opts); - }; -}); - -// ../../../../node_modules/.bun/gtoken@7.1.0/node_modules/gtoken/build/src/index.js -var require_src115 = __commonJS((exports) => { - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var __classPrivateFieldSet = exports && exports.__classPrivateFieldSet || function(receiver, state, value, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; - }; - var _GoogleToken_instances; - var _GoogleToken_inFlightRequest; - var _GoogleToken_getTokenAsync; - var _GoogleToken_getTokenAsyncInner; - var _GoogleToken_ensureEmail; - var _GoogleToken_revokeTokenAsync; - var _GoogleToken_configure; - var _GoogleToken_requestToken; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GoogleToken = undefined; - var fs = __require("fs"); - var gaxios_1 = require_src57(); - var jws = require_jws(); - var path = __require("path"); - var util_1 = __require("util"); - var readFile = fs.readFile ? (0, util_1.promisify)(fs.readFile) : async () => { - throw new ErrorWithCode("use key rather than keyFile.", "MISSING_CREDENTIALS"); - }; - var GOOGLE_TOKEN_URL = "https://www.googleapis.com/oauth2/v4/token"; - var GOOGLE_REVOKE_TOKEN_URL = "https://accounts.google.com/o/oauth2/revoke?token="; - - class ErrorWithCode extends Error { - constructor(message, code) { - super(message); - this.code = code; - } - } - - class GoogleToken { - get accessToken() { - return this.rawToken ? this.rawToken.access_token : undefined; - } - get idToken() { - return this.rawToken ? this.rawToken.id_token : undefined; - } - get tokenType() { - return this.rawToken ? this.rawToken.token_type : undefined; - } - get refreshToken() { - return this.rawToken ? this.rawToken.refresh_token : undefined; - } - constructor(options) { - _GoogleToken_instances.add(this); - this.transporter = { - request: (opts) => (0, gaxios_1.request)(opts) - }; - _GoogleToken_inFlightRequest.set(this, undefined); - __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_configure).call(this, options); - } - hasExpired() { - const now2 = new Date().getTime(); - if (this.rawToken && this.expiresAt) { - return now2 >= this.expiresAt; - } else { - return true; - } - } - isTokenExpiring() { - var _a2; - const now2 = new Date().getTime(); - const eagerRefreshThresholdMillis = (_a2 = this.eagerRefreshThresholdMillis) !== null && _a2 !== undefined ? _a2 : 0; - if (this.rawToken && this.expiresAt) { - return this.expiresAt <= now2 + eagerRefreshThresholdMillis; - } else { - return true; - } - } - getToken(callback, opts = {}) { - if (typeof callback === "object") { - opts = callback; - callback = undefined; - } - opts = Object.assign({ - forceRefresh: false - }, opts); - if (callback) { - const cb = callback; - __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_getTokenAsync).call(this, opts).then((t) => cb(null, t), callback); - return; - } - return __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_getTokenAsync).call(this, opts); - } - async getCredentials(keyFile) { - const ext = path.extname(keyFile); - switch (ext) { - case ".json": { - const key = await readFile(keyFile, "utf8"); - const body = JSON.parse(key); - const privateKey = body.private_key; - const clientEmail = body.client_email; - if (!privateKey || !clientEmail) { - throw new ErrorWithCode("private_key and client_email are required.", "MISSING_CREDENTIALS"); - } - return { privateKey, clientEmail }; - } - case ".der": - case ".crt": - case ".pem": { - const privateKey = await readFile(keyFile, "utf8"); - return { privateKey }; - } - case ".p12": - case ".pfx": { - throw new ErrorWithCode("*.p12 certificates are not supported after v6.1.2. " + "Consider utilizing *.json format or converting *.p12 to *.pem using the OpenSSL CLI.", "UNKNOWN_CERTIFICATE_TYPE"); - } - default: - throw new ErrorWithCode("Unknown certificate type. Type is determined based on file extension. " + "Current supported extensions are *.json, and *.pem.", "UNKNOWN_CERTIFICATE_TYPE"); - } - } - revokeToken(callback) { - if (callback) { - __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_revokeTokenAsync).call(this).then(() => callback(), callback); - return; - } - return __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_revokeTokenAsync).call(this); - } - } - exports.GoogleToken = GoogleToken; - _GoogleToken_inFlightRequest = new WeakMap, _GoogleToken_instances = new WeakSet, _GoogleToken_getTokenAsync = async function _GoogleToken_getTokenAsync(opts) { - if (__classPrivateFieldGet(this, _GoogleToken_inFlightRequest, "f") && !opts.forceRefresh) { - return __classPrivateFieldGet(this, _GoogleToken_inFlightRequest, "f"); - } - try { - return await __classPrivateFieldSet(this, _GoogleToken_inFlightRequest, __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_getTokenAsyncInner).call(this, opts), "f"); - } finally { - __classPrivateFieldSet(this, _GoogleToken_inFlightRequest, undefined, "f"); - } - }, _GoogleToken_getTokenAsyncInner = async function _GoogleToken_getTokenAsyncInner(opts) { - if (this.isTokenExpiring() === false && opts.forceRefresh === false) { - return Promise.resolve(this.rawToken); - } - if (!this.key && !this.keyFile) { - throw new Error("No key or keyFile set."); - } - if (!this.key && this.keyFile) { - const creds = await this.getCredentials(this.keyFile); - this.key = creds.privateKey; - this.iss = creds.clientEmail || this.iss; - if (!creds.clientEmail) { - __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_ensureEmail).call(this); - } - } - return __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_requestToken).call(this); - }, _GoogleToken_ensureEmail = function _GoogleToken_ensureEmail() { - if (!this.iss) { - throw new ErrorWithCode("email is required.", "MISSING_CREDENTIALS"); - } - }, _GoogleToken_revokeTokenAsync = async function _GoogleToken_revokeTokenAsync() { - if (!this.accessToken) { - throw new Error("No token to revoke."); - } - const url2 = GOOGLE_REVOKE_TOKEN_URL + this.accessToken; - await this.transporter.request({ - url: url2, - retry: true - }); - __classPrivateFieldGet(this, _GoogleToken_instances, "m", _GoogleToken_configure).call(this, { - email: this.iss, - sub: this.sub, - key: this.key, - keyFile: this.keyFile, - scope: this.scope, - additionalClaims: this.additionalClaims - }); - }, _GoogleToken_configure = function _GoogleToken_configure(options = {}) { - this.keyFile = options.keyFile; - this.key = options.key; - this.rawToken = undefined; - this.iss = options.email || options.iss; - this.sub = options.sub; - this.additionalClaims = options.additionalClaims; - if (typeof options.scope === "object") { - this.scope = options.scope.join(" "); - } else { - this.scope = options.scope; - } - this.eagerRefreshThresholdMillis = options.eagerRefreshThresholdMillis; - if (options.transporter) { - this.transporter = options.transporter; - } - }, _GoogleToken_requestToken = async function _GoogleToken_requestToken() { - var _a2, _b; - const iat = Math.floor(new Date().getTime() / 1000); - const additionalClaims = this.additionalClaims || {}; - const payload = Object.assign({ - iss: this.iss, - scope: this.scope, - aud: GOOGLE_TOKEN_URL, - exp: iat + 3600, - iat, - sub: this.sub - }, additionalClaims); - const signedJWT = jws.sign({ - header: { alg: "RS256" }, - payload, - secret: this.key - }); - try { - const r = await this.transporter.request({ - method: "POST", - url: GOOGLE_TOKEN_URL, - data: { - grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", - assertion: signedJWT - }, - headers: { "Content-Type": "application/x-www-form-urlencoded" }, - responseType: "json", - retryConfig: { - httpMethodsToRetry: ["POST"] - } - }); - this.rawToken = r.data; - this.expiresAt = r.data.expires_in === null || r.data.expires_in === undefined ? undefined : (iat + r.data.expires_in) * 1000; - return this.rawToken; - } catch (e) { - this.rawToken = undefined; - this.tokenExpires = undefined; - const body = e.response && ((_a2 = e.response) === null || _a2 === undefined ? undefined : _a2.data) ? (_b = e.response) === null || _b === undefined ? undefined : _b.data : {}; - if (body.error) { - const desc = body.error_description ? `: ${body.error_description}` : ""; - e.message = `${body.error}${desc}`; - } - throw e; - } - }; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/jwtaccess.js -var require_jwtaccess = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JWTAccess = undefined; - var jws = require_jws(); - var util_1 = require_util11(); - var DEFAULT_HEADER = { - alg: "RS256", - typ: "JWT" - }; - - class JWTAccess { - constructor(email3, key, keyId, eagerRefreshThresholdMillis) { - this.cache = new util_1.LRUCache({ - capacity: 500, - maxAge: 60 * 60 * 1000 - }); - this.email = email3; - this.key = key; - this.keyId = keyId; - this.eagerRefreshThresholdMillis = eagerRefreshThresholdMillis !== null && eagerRefreshThresholdMillis !== undefined ? eagerRefreshThresholdMillis : 5 * 60 * 1000; - } - getCachedKey(url2, scopes) { - let cacheKey = url2; - if (scopes && Array.isArray(scopes) && scopes.length) { - cacheKey = url2 ? `${url2}_${scopes.join("_")}` : `${scopes.join("_")}`; - } else if (typeof scopes === "string") { - cacheKey = url2 ? `${url2}_${scopes}` : scopes; - } - if (!cacheKey) { - throw Error("Scopes or url must be provided"); - } - return cacheKey; - } - getRequestHeaders(url2, additionalClaims, scopes) { - const key = this.getCachedKey(url2, scopes); - const cachedToken = this.cache.get(key); - const now2 = Date.now(); - if (cachedToken && cachedToken.expiration - now2 > this.eagerRefreshThresholdMillis) { - return cachedToken.headers; - } - const iat = Math.floor(Date.now() / 1000); - const exp = JWTAccess.getExpirationTime(iat); - let defaultClaims; - if (Array.isArray(scopes)) { - scopes = scopes.join(" "); - } - if (scopes) { - defaultClaims = { - iss: this.email, - sub: this.email, - scope: scopes, - exp, - iat - }; - } else { - defaultClaims = { - iss: this.email, - sub: this.email, - aud: url2, - exp, - iat - }; - } - if (additionalClaims) { - for (const claim in defaultClaims) { - if (additionalClaims[claim]) { - throw new Error(`The '${claim}' property is not allowed when passing additionalClaims. This claim is included in the JWT by default.`); - } - } - } - const header = this.keyId ? { ...DEFAULT_HEADER, kid: this.keyId } : DEFAULT_HEADER; - const payload = Object.assign(defaultClaims, additionalClaims); - const signedJWT = jws.sign({ header, payload, secret: this.key }); - const headers = { Authorization: `Bearer ${signedJWT}` }; - this.cache.set(key, { - expiration: exp * 1000, - headers - }); - return headers; - } - static getExpirationTime(iat) { - const exp = iat + 3600; - return exp; - } - fromJSON(json3) { - if (!json3) { - throw new Error("Must pass in a JSON object containing the service account auth settings."); - } - if (!json3.client_email) { - throw new Error("The incoming JSON object does not contain a client_email field"); - } - if (!json3.private_key) { - throw new Error("The incoming JSON object does not contain a private_key field"); - } - this.email = json3.client_email; - this.key = json3.private_key; - this.keyId = json3.private_key_id; - this.projectId = json3.project_id; - } - fromStream(inputStream, callback) { - if (callback) { - this.fromStreamAsync(inputStream).then(() => callback(), callback); - } else { - return this.fromStreamAsync(inputStream); - } - } - fromStreamAsync(inputStream) { - return new Promise((resolve2, reject) => { - if (!inputStream) { - reject(new Error("Must pass in a stream containing the service account auth settings.")); - } - let s2 = ""; - inputStream.setEncoding("utf8").on("data", (chunk) => s2 += chunk).on("error", reject).on("end", () => { - try { - const data = JSON.parse(s2); - this.fromJSON(data); - resolve2(); - } catch (err) { - reject(err); - } - }); - }); - } - } - exports.JWTAccess = JWTAccess; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/jwtclient.js -var require_jwtclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.JWT = undefined; - var gtoken_1 = require_src115(); - var jwtaccess_1 = require_jwtaccess(); - var oauth2client_1 = require_oauth2client(); - var authclient_1 = require_authclient(); - - class JWT extends oauth2client_1.OAuth2Client { - constructor(optionsOrEmail, keyFile, key, scopes, subject, keyId) { - const opts = optionsOrEmail && typeof optionsOrEmail === "object" ? optionsOrEmail : { email: optionsOrEmail, keyFile, key, keyId, scopes, subject }; - super(opts); - this.email = opts.email; - this.keyFile = opts.keyFile; - this.key = opts.key; - this.keyId = opts.keyId; - this.scopes = opts.scopes; - this.subject = opts.subject; - this.additionalClaims = opts.additionalClaims; - this.credentials = { refresh_token: "jwt-placeholder", expiry_date: 1 }; - } - createScoped(scopes) { - const jwt2 = new JWT(this); - jwt2.scopes = scopes; - return jwt2; - } - async getRequestMetadataAsync(url2) { - url2 = this.defaultServicePath ? `https://${this.defaultServicePath}/` : url2; - const useSelfSignedJWT = !this.hasUserScopes() && url2 || this.useJWTAccessWithScope && this.hasAnyScopes() || this.universeDomain !== authclient_1.DEFAULT_UNIVERSE; - if (this.subject && this.universeDomain !== authclient_1.DEFAULT_UNIVERSE) { - throw new RangeError(`Service Account user is configured for the credential. Domain-wide delegation is not supported in universes other than ${authclient_1.DEFAULT_UNIVERSE}`); - } - if (!this.apiKey && useSelfSignedJWT) { - if (this.additionalClaims && this.additionalClaims.target_audience) { - const { tokens } = await this.refreshToken(); - return { - headers: this.addSharedMetadataHeaders({ - Authorization: `Bearer ${tokens.id_token}` - }) - }; - } else { - if (!this.access) { - this.access = new jwtaccess_1.JWTAccess(this.email, this.key, this.keyId, this.eagerRefreshThresholdMillis); - } - let scopes; - if (this.hasUserScopes()) { - scopes = this.scopes; - } else if (!url2) { - scopes = this.defaultScopes; - } - const useScopes = this.useJWTAccessWithScope || this.universeDomain !== authclient_1.DEFAULT_UNIVERSE; - const headers = await this.access.getRequestHeaders(url2 !== null && url2 !== undefined ? url2 : undefined, this.additionalClaims, useScopes ? scopes : undefined); - return { headers: this.addSharedMetadataHeaders(headers) }; - } - } else if (this.hasAnyScopes() || this.apiKey) { - return super.getRequestMetadataAsync(url2); - } else { - return { headers: {} }; - } - } - async fetchIdToken(targetAudience) { - const gtoken = new gtoken_1.GoogleToken({ - iss: this.email, - sub: this.subject, - scope: this.scopes || this.defaultScopes, - keyFile: this.keyFile, - key: this.key, - additionalClaims: { target_audience: targetAudience }, - transporter: this.transporter - }); - await gtoken.getToken({ - forceRefresh: true - }); - if (!gtoken.idToken) { - throw new Error("Unknown error: Failed to fetch ID token"); - } - return gtoken.idToken; - } - hasUserScopes() { - if (!this.scopes) { - return false; - } - return this.scopes.length > 0; - } - hasAnyScopes() { - if (this.scopes && this.scopes.length > 0) - return true; - if (this.defaultScopes && this.defaultScopes.length > 0) - return true; - return false; - } - authorize(callback) { - if (callback) { - this.authorizeAsync().then((r) => callback(null, r), callback); - } else { - return this.authorizeAsync(); - } - } - async authorizeAsync() { - const result = await this.refreshToken(); - if (!result) { - throw new Error("No result returned"); - } - this.credentials = result.tokens; - this.credentials.refresh_token = "jwt-placeholder"; - this.key = this.gtoken.key; - this.email = this.gtoken.iss; - return result.tokens; - } - async refreshTokenNoCache(refreshToken) { - const gtoken = this.createGToken(); - const token = await gtoken.getToken({ - forceRefresh: this.isTokenExpiring() - }); - const tokens = { - access_token: token.access_token, - token_type: "Bearer", - expiry_date: gtoken.expiresAt, - id_token: gtoken.idToken - }; - this.emit("tokens", tokens); - return { res: null, tokens }; - } - createGToken() { - if (!this.gtoken) { - this.gtoken = new gtoken_1.GoogleToken({ - iss: this.email, - sub: this.subject, - scope: this.scopes || this.defaultScopes, - keyFile: this.keyFile, - key: this.key, - additionalClaims: this.additionalClaims, - transporter: this.transporter - }); - } - return this.gtoken; - } - fromJSON(json3) { - if (!json3) { - throw new Error("Must pass in a JSON object containing the service account auth settings."); - } - if (!json3.client_email) { - throw new Error("The incoming JSON object does not contain a client_email field"); - } - if (!json3.private_key) { - throw new Error("The incoming JSON object does not contain a private_key field"); - } - this.email = json3.client_email; - this.key = json3.private_key; - this.keyId = json3.private_key_id; - this.projectId = json3.project_id; - this.quotaProjectId = json3.quota_project_id; - this.universeDomain = json3.universe_domain || this.universeDomain; - } - fromStream(inputStream, callback) { - if (callback) { - this.fromStreamAsync(inputStream).then(() => callback(), callback); - } else { - return this.fromStreamAsync(inputStream); - } - } - fromStreamAsync(inputStream) { - return new Promise((resolve2, reject) => { - if (!inputStream) { - throw new Error("Must pass in a stream containing the service account auth settings."); - } - let s2 = ""; - inputStream.setEncoding("utf8").on("error", reject).on("data", (chunk) => s2 += chunk).on("end", () => { - try { - const data = JSON.parse(s2); - this.fromJSON(data); - resolve2(); - } catch (e) { - reject(e); - } - }); - }); - } - fromAPIKey(apiKey) { - if (typeof apiKey !== "string") { - throw new Error("Must provide an API Key string."); - } - this.apiKey = apiKey; - } - async getCredentials() { - if (this.key) { - return { private_key: this.key, client_email: this.email }; - } else if (this.keyFile) { - const gtoken = this.createGToken(); - const creds = await gtoken.getCredentials(this.keyFile); - return { private_key: creds.privateKey, client_email: creds.clientEmail }; - } - throw new Error("A key or a keyFile must be provided to getCredentials."); - } - } - exports.JWT = JWT; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/refreshclient.js -var require_refreshclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.UserRefreshClient = exports.USER_REFRESH_ACCOUNT_TYPE = undefined; - var oauth2client_1 = require_oauth2client(); - var querystring_1 = __require("querystring"); - exports.USER_REFRESH_ACCOUNT_TYPE = "authorized_user"; - - class UserRefreshClient extends oauth2client_1.OAuth2Client { - constructor(optionsOrClientId, clientSecret, refreshToken, eagerRefreshThresholdMillis, forceRefreshOnFailure) { - const opts = optionsOrClientId && typeof optionsOrClientId === "object" ? optionsOrClientId : { - clientId: optionsOrClientId, - clientSecret, - refreshToken, - eagerRefreshThresholdMillis, - forceRefreshOnFailure - }; - super(opts); - this._refreshToken = opts.refreshToken; - this.credentials.refresh_token = opts.refreshToken; - } - async refreshTokenNoCache(refreshToken) { - return super.refreshTokenNoCache(this._refreshToken); - } - async fetchIdToken(targetAudience) { - const res = await this.transporter.request({ - ...UserRefreshClient.RETRY_CONFIG, - url: this.endpoints.oauth2TokenUrl, - headers: { - "Content-Type": "application/x-www-form-urlencoded" - }, - method: "POST", - data: (0, querystring_1.stringify)({ - client_id: this._clientId, - client_secret: this._clientSecret, - grant_type: "refresh_token", - refresh_token: this._refreshToken, - target_audience: targetAudience - }) - }); - return res.data.id_token; - } - fromJSON(json3) { - if (!json3) { - throw new Error("Must pass in a JSON object containing the user refresh token"); - } - if (json3.type !== "authorized_user") { - throw new Error('The incoming JSON object does not have the "authorized_user" type'); - } - if (!json3.client_id) { - throw new Error("The incoming JSON object does not contain a client_id field"); - } - if (!json3.client_secret) { - throw new Error("The incoming JSON object does not contain a client_secret field"); - } - if (!json3.refresh_token) { - throw new Error("The incoming JSON object does not contain a refresh_token field"); - } - this._clientId = json3.client_id; - this._clientSecret = json3.client_secret; - this._refreshToken = json3.refresh_token; - this.credentials.refresh_token = json3.refresh_token; - this.quotaProjectId = json3.quota_project_id; - this.universeDomain = json3.universe_domain || this.universeDomain; - } - fromStream(inputStream, callback) { - if (callback) { - this.fromStreamAsync(inputStream).then(() => callback(), callback); - } else { - return this.fromStreamAsync(inputStream); - } - } - async fromStreamAsync(inputStream) { - return new Promise((resolve2, reject) => { - if (!inputStream) { - return reject(new Error("Must pass in a stream containing the user refresh token.")); - } - let s2 = ""; - inputStream.setEncoding("utf8").on("error", reject).on("data", (chunk) => s2 += chunk).on("end", () => { - try { - const data = JSON.parse(s2); - this.fromJSON(data); - return resolve2(); - } catch (err) { - return reject(err); - } - }); - }); - } - static fromJSON(json3) { - const client = new UserRefreshClient; - client.fromJSON(json3); - return client; - } - } - exports.UserRefreshClient = UserRefreshClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/impersonated.js -var require_impersonated = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Impersonated = exports.IMPERSONATED_ACCOUNT_TYPE = undefined; - var oauth2client_1 = require_oauth2client(); - var gaxios_1 = require_src57(); - var util_1 = require_util11(); - exports.IMPERSONATED_ACCOUNT_TYPE = "impersonated_service_account"; - - class Impersonated extends oauth2client_1.OAuth2Client { - constructor(options = {}) { - var _a2, _b, _c, _d, _e, _f; - super(options); - this.credentials = { - expiry_date: 1, - refresh_token: "impersonated-placeholder" - }; - this.sourceClient = (_a2 = options.sourceClient) !== null && _a2 !== undefined ? _a2 : new oauth2client_1.OAuth2Client; - this.targetPrincipal = (_b = options.targetPrincipal) !== null && _b !== undefined ? _b : ""; - this.delegates = (_c = options.delegates) !== null && _c !== undefined ? _c : []; - this.targetScopes = (_d = options.targetScopes) !== null && _d !== undefined ? _d : []; - this.lifetime = (_e = options.lifetime) !== null && _e !== undefined ? _e : 3600; - const usingExplicitUniverseDomain = !!(0, util_1.originalOrCamelOptions)(options).get("universe_domain"); - if (!usingExplicitUniverseDomain) { - this.universeDomain = this.sourceClient.universeDomain; - } else if (this.sourceClient.universeDomain !== this.universeDomain) { - throw new RangeError(`Universe domain ${this.sourceClient.universeDomain} in source credentials does not match ${this.universeDomain} universe domain set for impersonated credentials.`); - } - this.endpoint = (_f = options.endpoint) !== null && _f !== undefined ? _f : `https://iamcredentials.${this.universeDomain}`; - } - async sign(blobToSign) { - await this.sourceClient.getAccessToken(); - const name = `projects/-/serviceAccounts/${this.targetPrincipal}`; - const u = `${this.endpoint}/v1/${name}:signBlob`; - const body = { - delegates: this.delegates, - payload: Buffer.from(blobToSign).toString("base64") - }; - const res = await this.sourceClient.request({ - ...Impersonated.RETRY_CONFIG, - url: u, - data: body, - method: "POST" - }); - return res.data; - } - getTargetPrincipal() { - return this.targetPrincipal; - } - async refreshToken() { - var _a2, _b, _c, _d, _e, _f; - try { - await this.sourceClient.getAccessToken(); - const name = "projects/-/serviceAccounts/" + this.targetPrincipal; - const u = `${this.endpoint}/v1/${name}:generateAccessToken`; - const body = { - delegates: this.delegates, - scope: this.targetScopes, - lifetime: this.lifetime + "s" - }; - const res = await this.sourceClient.request({ - ...Impersonated.RETRY_CONFIG, - url: u, - data: body, - method: "POST" - }); - const tokenResponse = res.data; - this.credentials.access_token = tokenResponse.accessToken; - this.credentials.expiry_date = Date.parse(tokenResponse.expireTime); - return { - tokens: this.credentials, - res - }; - } catch (error48) { - if (!(error48 instanceof Error)) - throw error48; - let status = 0; - let message = ""; - if (error48 instanceof gaxios_1.GaxiosError) { - status = (_c = (_b = (_a2 = error48 === null || error48 === undefined ? undefined : error48.response) === null || _a2 === undefined ? undefined : _a2.data) === null || _b === undefined ? undefined : _b.error) === null || _c === undefined ? undefined : _c.status; - message = (_f = (_e = (_d = error48 === null || error48 === undefined ? undefined : error48.response) === null || _d === undefined ? undefined : _d.data) === null || _e === undefined ? undefined : _e.error) === null || _f === undefined ? undefined : _f.message; - } - if (status && message) { - error48.message = `${status}: unable to impersonate: ${message}`; - throw error48; - } else { - error48.message = `unable to impersonate: ${error48}`; - throw error48; - } - } - } - async fetchIdToken(targetAudience, options) { - var _a2, _b; - await this.sourceClient.getAccessToken(); - const name = `projects/-/serviceAccounts/${this.targetPrincipal}`; - const u = `${this.endpoint}/v1/${name}:generateIdToken`; - const body = { - delegates: this.delegates, - audience: targetAudience, - includeEmail: (_a2 = options === null || options === undefined ? undefined : options.includeEmail) !== null && _a2 !== undefined ? _a2 : true, - useEmailAzp: (_b = options === null || options === undefined ? undefined : options.includeEmail) !== null && _b !== undefined ? _b : true - }; - const res = await this.sourceClient.request({ - ...Impersonated.RETRY_CONFIG, - url: u, - data: body, - method: "POST" - }); - return res.data.token; - } - } - exports.Impersonated = Impersonated; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/oauth2common.js -var require_oauth2common = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OAuthClientAuthHandler = undefined; - exports.getErrorFromOAuthErrorResponse = getErrorFromOAuthErrorResponse; - var querystring = __require("querystring"); - var crypto_1 = require_crypto3(); - var METHODS_SUPPORTING_REQUEST_BODY = ["PUT", "POST", "PATCH"]; - - class OAuthClientAuthHandler { - constructor(clientAuthentication) { - this.clientAuthentication = clientAuthentication; - this.crypto = (0, crypto_1.createCrypto)(); - } - applyClientAuthenticationOptions(opts, bearerToken) { - this.injectAuthenticatedHeaders(opts, bearerToken); - if (!bearerToken) { - this.injectAuthenticatedRequestBody(opts); - } - } - injectAuthenticatedHeaders(opts, bearerToken) { - var _a2; - if (bearerToken) { - opts.headers = opts.headers || {}; - Object.assign(opts.headers, { - Authorization: `Bearer ${bearerToken}}` - }); - } else if (((_a2 = this.clientAuthentication) === null || _a2 === undefined ? undefined : _a2.confidentialClientType) === "basic") { - opts.headers = opts.headers || {}; - const clientId = this.clientAuthentication.clientId; - const clientSecret = this.clientAuthentication.clientSecret || ""; - const base64EncodedCreds = this.crypto.encodeBase64StringUtf8(`${clientId}:${clientSecret}`); - Object.assign(opts.headers, { - Authorization: `Basic ${base64EncodedCreds}` - }); - } - } - injectAuthenticatedRequestBody(opts) { - var _a2; - if (((_a2 = this.clientAuthentication) === null || _a2 === undefined ? undefined : _a2.confidentialClientType) === "request-body") { - const method = (opts.method || "GET").toUpperCase(); - if (METHODS_SUPPORTING_REQUEST_BODY.indexOf(method) !== -1) { - let contentType; - const headers = opts.headers || {}; - for (const key in headers) { - if (key.toLowerCase() === "content-type" && headers[key]) { - contentType = headers[key].toLowerCase(); - break; - } - } - if (contentType === "application/x-www-form-urlencoded") { - opts.data = opts.data || ""; - const data = querystring.parse(opts.data); - Object.assign(data, { - client_id: this.clientAuthentication.clientId, - client_secret: this.clientAuthentication.clientSecret || "" - }); - opts.data = querystring.stringify(data); - } else if (contentType === "application/json") { - opts.data = opts.data || {}; - Object.assign(opts.data, { - client_id: this.clientAuthentication.clientId, - client_secret: this.clientAuthentication.clientSecret || "" - }); - } else { - throw new Error(`${contentType} content-types are not supported with ` + `${this.clientAuthentication.confidentialClientType} ` + "client authentication"); - } - } else { - throw new Error(`${method} HTTP method does not support ` + `${this.clientAuthentication.confidentialClientType} ` + "client authentication"); - } - } - } - static get RETRY_CONFIG() { - return { - retry: true, - retryConfig: { - httpMethodsToRetry: ["GET", "PUT", "POST", "HEAD", "OPTIONS", "DELETE"] - } - }; - } - } - exports.OAuthClientAuthHandler = OAuthClientAuthHandler; - function getErrorFromOAuthErrorResponse(resp, err) { - const errorCode = resp.error; - const errorDescription = resp.error_description; - const errorUri = resp.error_uri; - let message = `Error code ${errorCode}`; - if (typeof errorDescription !== "undefined") { - message += `: ${errorDescription}`; - } - if (typeof errorUri !== "undefined") { - message += ` - ${errorUri}`; - } - const newError = new Error(message); - if (err) { - const keys = Object.keys(err); - if (err.stack) { - keys.push("stack"); - } - keys.forEach((key) => { - if (key !== "message") { - Object.defineProperty(newError, key, { - value: err[key], - writable: false, - enumerable: true - }); - } - }); - } - return newError; - } -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/stscredentials.js -var require_stscredentials = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.StsCredentials = undefined; - var gaxios_1 = require_src57(); - var querystring = __require("querystring"); - var transporters_1 = require_transporters(); - var oauth2common_1 = require_oauth2common(); - - class StsCredentials extends oauth2common_1.OAuthClientAuthHandler { - constructor(tokenExchangeEndpoint, clientAuthentication) { - super(clientAuthentication); - this.tokenExchangeEndpoint = tokenExchangeEndpoint; - this.transporter = new transporters_1.DefaultTransporter; - } - async exchangeToken(stsCredentialsOptions, additionalHeaders, options) { - var _a2, _b, _c; - const values = { - grant_type: stsCredentialsOptions.grantType, - resource: stsCredentialsOptions.resource, - audience: stsCredentialsOptions.audience, - scope: (_a2 = stsCredentialsOptions.scope) === null || _a2 === undefined ? undefined : _a2.join(" "), - requested_token_type: stsCredentialsOptions.requestedTokenType, - subject_token: stsCredentialsOptions.subjectToken, - subject_token_type: stsCredentialsOptions.subjectTokenType, - actor_token: (_b = stsCredentialsOptions.actingParty) === null || _b === undefined ? undefined : _b.actorToken, - actor_token_type: (_c = stsCredentialsOptions.actingParty) === null || _c === undefined ? undefined : _c.actorTokenType, - options: options && JSON.stringify(options) - }; - Object.keys(values).forEach((key) => { - if (typeof values[key] === "undefined") { - delete values[key]; - } - }); - const headers = { - "Content-Type": "application/x-www-form-urlencoded" - }; - Object.assign(headers, additionalHeaders || {}); - const opts = { - ...StsCredentials.RETRY_CONFIG, - url: this.tokenExchangeEndpoint.toString(), - method: "POST", - headers, - data: querystring.stringify(values), - responseType: "json" - }; - this.applyClientAuthenticationOptions(opts); - try { - const response = await this.transporter.request(opts); - const stsSuccessfulResponse = response.data; - stsSuccessfulResponse.res = response; - return stsSuccessfulResponse; - } catch (error48) { - if (error48 instanceof gaxios_1.GaxiosError && error48.response) { - throw (0, oauth2common_1.getErrorFromOAuthErrorResponse)(error48.response.data, error48); - } - throw error48; - } - } - } - exports.StsCredentials = StsCredentials; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/baseexternalclient.js -var require_baseexternalclient = __commonJS((exports) => { - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var __classPrivateFieldSet = exports && exports.__classPrivateFieldSet || function(receiver, state, value, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; - }; - var _BaseExternalAccountClient_instances; - var _BaseExternalAccountClient_pendingAccessToken; - var _BaseExternalAccountClient_internalRefreshAccessTokenAsync; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseExternalAccountClient = exports.DEFAULT_UNIVERSE = exports.CLOUD_RESOURCE_MANAGER = exports.EXTERNAL_ACCOUNT_TYPE = exports.EXPIRATION_TIME_OFFSET = undefined; - var stream3 = __require("stream"); - var authclient_1 = require_authclient(); - var sts = require_stscredentials(); - var util_1 = require_util11(); - var STS_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:token-exchange"; - var STS_REQUEST_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:access_token"; - var DEFAULT_OAUTH_SCOPE = "https://www.googleapis.com/auth/cloud-platform"; - var DEFAULT_TOKEN_LIFESPAN = 3600; - exports.EXPIRATION_TIME_OFFSET = 5 * 60 * 1000; - exports.EXTERNAL_ACCOUNT_TYPE = "external_account"; - exports.CLOUD_RESOURCE_MANAGER = "https://cloudresourcemanager.googleapis.com/v1/projects/"; - var WORKFORCE_AUDIENCE_PATTERN = "//iam\\.googleapis\\.com/locations/[^/]+/workforcePools/[^/]+/providers/.+"; - var DEFAULT_TOKEN_URL = "https://sts.{universeDomain}/v1/token"; - var pkg = require_package4(); - var authclient_2 = require_authclient(); - Object.defineProperty(exports, "DEFAULT_UNIVERSE", { enumerable: true, get: function() { - return authclient_2.DEFAULT_UNIVERSE; - } }); - - class BaseExternalAccountClient extends authclient_1.AuthClient { - constructor(options, additionalOptions) { - var _a2; - super({ ...options, ...additionalOptions }); - _BaseExternalAccountClient_instances.add(this); - _BaseExternalAccountClient_pendingAccessToken.set(this, null); - const opts = (0, util_1.originalOrCamelOptions)(options); - const type = opts.get("type"); - if (type && type !== exports.EXTERNAL_ACCOUNT_TYPE) { - throw new Error(`Expected "${exports.EXTERNAL_ACCOUNT_TYPE}" type but ` + `received "${options.type}"`); - } - const clientId = opts.get("client_id"); - const clientSecret = opts.get("client_secret"); - const tokenUrl = (_a2 = opts.get("token_url")) !== null && _a2 !== undefined ? _a2 : DEFAULT_TOKEN_URL.replace("{universeDomain}", this.universeDomain); - const subjectTokenType = opts.get("subject_token_type"); - const workforcePoolUserProject = opts.get("workforce_pool_user_project"); - const serviceAccountImpersonationUrl = opts.get("service_account_impersonation_url"); - const serviceAccountImpersonation = opts.get("service_account_impersonation"); - const serviceAccountImpersonationLifetime = (0, util_1.originalOrCamelOptions)(serviceAccountImpersonation).get("token_lifetime_seconds"); - this.cloudResourceManagerURL = new URL(opts.get("cloud_resource_manager_url") || `https://cloudresourcemanager.${this.universeDomain}/v1/projects/`); - if (clientId) { - this.clientAuth = { - confidentialClientType: "basic", - clientId, - clientSecret - }; - } - this.stsCredential = new sts.StsCredentials(tokenUrl, this.clientAuth); - this.scopes = opts.get("scopes") || [DEFAULT_OAUTH_SCOPE]; - this.cachedAccessToken = null; - this.audience = opts.get("audience"); - this.subjectTokenType = subjectTokenType; - this.workforcePoolUserProject = workforcePoolUserProject; - const workforceAudiencePattern = new RegExp(WORKFORCE_AUDIENCE_PATTERN); - if (this.workforcePoolUserProject && !this.audience.match(workforceAudiencePattern)) { - throw new Error("workforcePoolUserProject should not be set for non-workforce pool " + "credentials."); - } - this.serviceAccountImpersonationUrl = serviceAccountImpersonationUrl; - this.serviceAccountImpersonationLifetime = serviceAccountImpersonationLifetime; - if (this.serviceAccountImpersonationLifetime) { - this.configLifetimeRequested = true; - } else { - this.configLifetimeRequested = false; - this.serviceAccountImpersonationLifetime = DEFAULT_TOKEN_LIFESPAN; - } - this.projectNumber = this.getProjectNumber(this.audience); - this.supplierContext = { - audience: this.audience, - subjectTokenType: this.subjectTokenType, - transporter: this.transporter - }; - } - getServiceAccountEmail() { - var _a2; - if (this.serviceAccountImpersonationUrl) { - if (this.serviceAccountImpersonationUrl.length > 256) { - throw new RangeError(`URL is too long: ${this.serviceAccountImpersonationUrl}`); - } - const re = /serviceAccounts\/(?[^:]+):generateAccessToken$/; - const result = re.exec(this.serviceAccountImpersonationUrl); - return ((_a2 = result === null || result === undefined ? undefined : result.groups) === null || _a2 === undefined ? undefined : _a2.email) || null; - } - return null; - } - setCredentials(credentials) { - super.setCredentials(credentials); - this.cachedAccessToken = credentials; - } - async getAccessToken() { - if (!this.cachedAccessToken || this.isExpired(this.cachedAccessToken)) { - await this.refreshAccessTokenAsync(); - } - return { - token: this.cachedAccessToken.access_token, - res: this.cachedAccessToken.res - }; - } - async getRequestHeaders() { - const accessTokenResponse = await this.getAccessToken(); - const headers = { - Authorization: `Bearer ${accessTokenResponse.token}` - }; - return this.addSharedMetadataHeaders(headers); - } - request(opts, callback) { - if (callback) { - this.requestAsync(opts).then((r) => callback(null, r), (e) => { - return callback(e, e.response); - }); - } else { - return this.requestAsync(opts); - } - } - async getProjectId() { - const projectNumber = this.projectNumber || this.workforcePoolUserProject; - if (this.projectId) { - return this.projectId; - } else if (projectNumber) { - const headers = await this.getRequestHeaders(); - const response = await this.transporter.request({ - ...BaseExternalAccountClient.RETRY_CONFIG, - headers, - url: `${this.cloudResourceManagerURL.toString()}${projectNumber}`, - responseType: "json" - }); - this.projectId = response.data.projectId; - return this.projectId; - } - return null; - } - async requestAsync(opts, reAuthRetried = false) { - let response; - try { - const requestHeaders = await this.getRequestHeaders(); - opts.headers = opts.headers || {}; - if (requestHeaders && requestHeaders["x-goog-user-project"]) { - opts.headers["x-goog-user-project"] = requestHeaders["x-goog-user-project"]; - } - if (requestHeaders && requestHeaders.Authorization) { - opts.headers.Authorization = requestHeaders.Authorization; - } - response = await this.transporter.request(opts); - } catch (e) { - const res = e.response; - if (res) { - const statusCode = res.status; - const isReadableStream = res.config.data instanceof stream3.Readable; - const isAuthErr = statusCode === 401 || statusCode === 403; - if (!reAuthRetried && isAuthErr && !isReadableStream && this.forceRefreshOnFailure) { - await this.refreshAccessTokenAsync(); - return await this.requestAsync(opts, true); - } - } - throw e; - } - return response; - } - async refreshAccessTokenAsync() { - __classPrivateFieldSet(this, _BaseExternalAccountClient_pendingAccessToken, __classPrivateFieldGet(this, _BaseExternalAccountClient_pendingAccessToken, "f") || __classPrivateFieldGet(this, _BaseExternalAccountClient_instances, "m", _BaseExternalAccountClient_internalRefreshAccessTokenAsync).call(this), "f"); - try { - return await __classPrivateFieldGet(this, _BaseExternalAccountClient_pendingAccessToken, "f"); - } finally { - __classPrivateFieldSet(this, _BaseExternalAccountClient_pendingAccessToken, null, "f"); - } - } - getProjectNumber(audience) { - const match2 = audience.match(/\/projects\/([^/]+)/); - if (!match2) { - return null; - } - return match2[1]; - } - async getImpersonatedAccessToken(token) { - const opts = { - ...BaseExternalAccountClient.RETRY_CONFIG, - url: this.serviceAccountImpersonationUrl, - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${token}` - }, - data: { - scope: this.getScopesArray(), - lifetime: this.serviceAccountImpersonationLifetime + "s" - }, - responseType: "json" - }; - const response = await this.transporter.request(opts); - const successResponse = response.data; - return { - access_token: successResponse.accessToken, - expiry_date: new Date(successResponse.expireTime).getTime(), - res: response - }; - } - isExpired(accessToken) { - const now2 = new Date().getTime(); - return accessToken.expiry_date ? now2 >= accessToken.expiry_date - this.eagerRefreshThresholdMillis : false; - } - getScopesArray() { - if (typeof this.scopes === "string") { - return [this.scopes]; - } - return this.scopes || [DEFAULT_OAUTH_SCOPE]; - } - getMetricsHeaderValue() { - const nodeVersion = process.version.replace(/^v/, ""); - const saImpersonation = this.serviceAccountImpersonationUrl !== undefined; - const credentialSourceType = this.credentialSourceType ? this.credentialSourceType : "unknown"; - return `gl-node/${nodeVersion} auth/${pkg.version} google-byoid-sdk source/${credentialSourceType} sa-impersonation/${saImpersonation} config-lifetime/${this.configLifetimeRequested}`; - } - } - exports.BaseExternalAccountClient = BaseExternalAccountClient; - _BaseExternalAccountClient_pendingAccessToken = new WeakMap, _BaseExternalAccountClient_instances = new WeakSet, _BaseExternalAccountClient_internalRefreshAccessTokenAsync = async function _BaseExternalAccountClient_internalRefreshAccessTokenAsync() { - const subjectToken = await this.retrieveSubjectToken(); - const stsCredentialsOptions = { - grantType: STS_GRANT_TYPE, - audience: this.audience, - requestedTokenType: STS_REQUEST_TOKEN_TYPE, - subjectToken, - subjectTokenType: this.subjectTokenType, - scope: this.serviceAccountImpersonationUrl ? [DEFAULT_OAUTH_SCOPE] : this.getScopesArray() - }; - const additionalOptions = !this.clientAuth && this.workforcePoolUserProject ? { userProject: this.workforcePoolUserProject } : undefined; - const additionalHeaders = { - "x-goog-api-client": this.getMetricsHeaderValue() - }; - const stsResponse = await this.stsCredential.exchangeToken(stsCredentialsOptions, additionalHeaders, additionalOptions); - if (this.serviceAccountImpersonationUrl) { - this.cachedAccessToken = await this.getImpersonatedAccessToken(stsResponse.access_token); - } else if (stsResponse.expires_in) { - this.cachedAccessToken = { - access_token: stsResponse.access_token, - expiry_date: new Date().getTime() + stsResponse.expires_in * 1000, - res: stsResponse.res - }; - } else { - this.cachedAccessToken = { - access_token: stsResponse.access_token, - res: stsResponse.res - }; - } - this.credentials = {}; - Object.assign(this.credentials, this.cachedAccessToken); - delete this.credentials.res; - this.emit("tokens", { - refresh_token: null, - expiry_date: this.cachedAccessToken.expiry_date, - access_token: this.cachedAccessToken.access_token, - token_type: "Bearer", - id_token: null - }); - return this.cachedAccessToken; - }; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/filesubjecttokensupplier.js -var require_filesubjecttokensupplier = __commonJS((exports) => { - var _a2; - var _b; - var _c; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FileSubjectTokenSupplier = undefined; - var util_1 = __require("util"); - var fs = __require("fs"); - var readFile = (0, util_1.promisify)((_a2 = fs.readFile) !== null && _a2 !== undefined ? _a2 : () => {}); - var realpath = (0, util_1.promisify)((_b = fs.realpath) !== null && _b !== undefined ? _b : () => {}); - var lstat = (0, util_1.promisify)((_c = fs.lstat) !== null && _c !== undefined ? _c : () => {}); - - class FileSubjectTokenSupplier { - constructor(opts) { - this.filePath = opts.filePath; - this.formatType = opts.formatType; - this.subjectTokenFieldName = opts.subjectTokenFieldName; - } - async getSubjectToken(context8) { - let parsedFilePath = this.filePath; - try { - parsedFilePath = await realpath(parsedFilePath); - if (!(await lstat(parsedFilePath)).isFile()) { - throw new Error; - } - } catch (err) { - if (err instanceof Error) { - err.message = `The file at ${parsedFilePath} does not exist, or it is not a file. ${err.message}`; - } - throw err; - } - let subjectToken; - const rawText = await readFile(parsedFilePath, { encoding: "utf8" }); - if (this.formatType === "text") { - subjectToken = rawText; - } else if (this.formatType === "json" && this.subjectTokenFieldName) { - const json3 = JSON.parse(rawText); - subjectToken = json3[this.subjectTokenFieldName]; - } - if (!subjectToken) { - throw new Error("Unable to parse the subject_token from the credential_source file"); - } - return subjectToken; - } - } - exports.FileSubjectTokenSupplier = FileSubjectTokenSupplier; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/urlsubjecttokensupplier.js -var require_urlsubjecttokensupplier = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.UrlSubjectTokenSupplier = undefined; - - class UrlSubjectTokenSupplier { - constructor(opts) { - this.url = opts.url; - this.formatType = opts.formatType; - this.subjectTokenFieldName = opts.subjectTokenFieldName; - this.headers = opts.headers; - this.additionalGaxiosOptions = opts.additionalGaxiosOptions; - } - async getSubjectToken(context8) { - const opts = { - ...this.additionalGaxiosOptions, - url: this.url, - method: "GET", - headers: this.headers, - responseType: this.formatType - }; - let subjectToken; - if (this.formatType === "text") { - const response = await context8.transporter.request(opts); - subjectToken = response.data; - } else if (this.formatType === "json" && this.subjectTokenFieldName) { - const response = await context8.transporter.request(opts); - subjectToken = response.data[this.subjectTokenFieldName]; - } - if (!subjectToken) { - throw new Error("Unable to parse the subject_token from the credential_source URL"); - } - return subjectToken; - } - } - exports.UrlSubjectTokenSupplier = UrlSubjectTokenSupplier; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/identitypoolclient.js -var require_identitypoolclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.IdentityPoolClient = undefined; - var baseexternalclient_1 = require_baseexternalclient(); - var util_1 = require_util11(); - var filesubjecttokensupplier_1 = require_filesubjecttokensupplier(); - var urlsubjecttokensupplier_1 = require_urlsubjecttokensupplier(); - - class IdentityPoolClient extends baseexternalclient_1.BaseExternalAccountClient { - constructor(options, additionalOptions) { - super(options, additionalOptions); - const opts = (0, util_1.originalOrCamelOptions)(options); - const credentialSource = opts.get("credential_source"); - const subjectTokenSupplier = opts.get("subject_token_supplier"); - if (!credentialSource && !subjectTokenSupplier) { - throw new Error("A credential source or subject token supplier must be specified."); - } - if (credentialSource && subjectTokenSupplier) { - throw new Error("Only one of credential source or subject token supplier can be specified."); - } - if (subjectTokenSupplier) { - this.subjectTokenSupplier = subjectTokenSupplier; - this.credentialSourceType = "programmatic"; - } else { - const credentialSourceOpts = (0, util_1.originalOrCamelOptions)(credentialSource); - const formatOpts = (0, util_1.originalOrCamelOptions)(credentialSourceOpts.get("format")); - const formatType = formatOpts.get("type") || "text"; - const formatSubjectTokenFieldName = formatOpts.get("subject_token_field_name"); - if (formatType !== "json" && formatType !== "text") { - throw new Error(`Invalid credential_source format "${formatType}"`); - } - if (formatType === "json" && !formatSubjectTokenFieldName) { - throw new Error("Missing subject_token_field_name for JSON credential_source format"); - } - const file2 = credentialSourceOpts.get("file"); - const url2 = credentialSourceOpts.get("url"); - const headers = credentialSourceOpts.get("headers"); - if (file2 && url2) { - throw new Error('No valid Identity Pool "credential_source" provided, must be either file or url.'); - } else if (file2 && !url2) { - this.credentialSourceType = "file"; - this.subjectTokenSupplier = new filesubjecttokensupplier_1.FileSubjectTokenSupplier({ - filePath: file2, - formatType, - subjectTokenFieldName: formatSubjectTokenFieldName - }); - } else if (!file2 && url2) { - this.credentialSourceType = "url"; - this.subjectTokenSupplier = new urlsubjecttokensupplier_1.UrlSubjectTokenSupplier({ - url: url2, - formatType, - subjectTokenFieldName: formatSubjectTokenFieldName, - headers, - additionalGaxiosOptions: IdentityPoolClient.RETRY_CONFIG - }); - } else { - throw new Error('No valid Identity Pool "credential_source" provided, must be either file or url.'); - } - } - } - async retrieveSubjectToken() { - return this.subjectTokenSupplier.getSubjectToken(this.supplierContext); - } - } - exports.IdentityPoolClient = IdentityPoolClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/awsrequestsigner.js -var require_awsrequestsigner = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AwsRequestSigner = undefined; - var crypto_1 = require_crypto3(); - var AWS_ALGORITHM = "AWS4-HMAC-SHA256"; - var AWS_REQUEST_TYPE = "aws4_request"; - - class AwsRequestSigner { - constructor(getCredentials, region2) { - this.getCredentials = getCredentials; - this.region = region2; - this.crypto = (0, crypto_1.createCrypto)(); - } - async getRequestOptions(amzOptions) { - if (!amzOptions.url) { - throw new Error('"url" is required in "amzOptions"'); - } - const requestPayloadData = typeof amzOptions.data === "object" ? JSON.stringify(amzOptions.data) : amzOptions.data; - const url2 = amzOptions.url; - const method = amzOptions.method || "GET"; - const requestPayload = amzOptions.body || requestPayloadData; - const additionalAmzHeaders = amzOptions.headers; - const awsSecurityCredentials = await this.getCredentials(); - const uri = new URL(url2); - const headerMap = await generateAuthenticationHeaderMap({ - crypto: this.crypto, - host: uri.host, - canonicalUri: uri.pathname, - canonicalQuerystring: uri.search.substr(1), - method, - region: this.region, - securityCredentials: awsSecurityCredentials, - requestPayload, - additionalAmzHeaders - }); - const headers = Object.assign(headerMap.amzDate ? { "x-amz-date": headerMap.amzDate } : {}, { - Authorization: headerMap.authorizationHeader, - host: uri.host - }, additionalAmzHeaders || {}); - if (awsSecurityCredentials.token) { - Object.assign(headers, { - "x-amz-security-token": awsSecurityCredentials.token - }); - } - const awsSignedReq = { - url: url2, - method, - headers - }; - if (typeof requestPayload !== "undefined") { - awsSignedReq.body = requestPayload; - } - return awsSignedReq; - } - } - exports.AwsRequestSigner = AwsRequestSigner; - async function sign(crypto2, key, msg) { - return await crypto2.signWithHmacSha256(key, msg); - } - async function getSigningKey(crypto2, key, dateStamp, region2, serviceName) { - const kDate = await sign(crypto2, `AWS4${key}`, dateStamp); - const kRegion = await sign(crypto2, kDate, region2); - const kService = await sign(crypto2, kRegion, serviceName); - const kSigning = await sign(crypto2, kService, "aws4_request"); - return kSigning; - } - async function generateAuthenticationHeaderMap(options) { - const additionalAmzHeaders = options.additionalAmzHeaders || {}; - const requestPayload = options.requestPayload || ""; - const serviceName = options.host.split(".")[0]; - const now2 = new Date; - const amzDate = now2.toISOString().replace(/[-:]/g, "").replace(/\.[0-9]+/, ""); - const dateStamp = now2.toISOString().replace(/[-]/g, "").replace(/T.*/, ""); - const reformattedAdditionalAmzHeaders = {}; - Object.keys(additionalAmzHeaders).forEach((key) => { - reformattedAdditionalAmzHeaders[key.toLowerCase()] = additionalAmzHeaders[key]; - }); - if (options.securityCredentials.token) { - reformattedAdditionalAmzHeaders["x-amz-security-token"] = options.securityCredentials.token; - } - const amzHeaders = Object.assign({ - host: options.host - }, reformattedAdditionalAmzHeaders.date ? {} : { "x-amz-date": amzDate }, reformattedAdditionalAmzHeaders); - let canonicalHeaders = ""; - const signedHeadersList = Object.keys(amzHeaders).sort(); - signedHeadersList.forEach((key) => { - canonicalHeaders += `${key}:${amzHeaders[key]} -`; - }); - const signedHeaders = signedHeadersList.join(";"); - const payloadHash = await options.crypto.sha256DigestHex(requestPayload); - const canonicalRequest = `${options.method} -` + `${options.canonicalUri} -` + `${options.canonicalQuerystring} -` + `${canonicalHeaders} -` + `${signedHeaders} -` + `${payloadHash}`; - const credentialScope = `${dateStamp}/${options.region}/${serviceName}/${AWS_REQUEST_TYPE}`; - const stringToSign = `${AWS_ALGORITHM} -` + `${amzDate} -` + `${credentialScope} -` + await options.crypto.sha256DigestHex(canonicalRequest); - const signingKey = await getSigningKey(options.crypto, options.securityCredentials.secretAccessKey, dateStamp, options.region, serviceName); - const signature = await sign(options.crypto, signingKey, stringToSign); - const authorizationHeader = `${AWS_ALGORITHM} Credential=${options.securityCredentials.accessKeyId}/` + `${credentialScope}, SignedHeaders=${signedHeaders}, ` + `Signature=${(0, crypto_1.fromArrayBufferToHex)(signature)}`; - return { - amzDate: reformattedAdditionalAmzHeaders.date ? undefined : amzDate, - authorizationHeader, - canonicalQuerystring: options.canonicalQuerystring - }; - } -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/defaultawssecuritycredentialssupplier.js -var require_defaultawssecuritycredentialssupplier = __commonJS((exports) => { - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var _DefaultAwsSecurityCredentialsSupplier_instances; - var _DefaultAwsSecurityCredentialsSupplier_getImdsV2SessionToken; - var _DefaultAwsSecurityCredentialsSupplier_getAwsRoleName; - var _DefaultAwsSecurityCredentialsSupplier_retrieveAwsSecurityCredentials; - var _DefaultAwsSecurityCredentialsSupplier_regionFromEnv_get; - var _DefaultAwsSecurityCredentialsSupplier_securityCredentialsFromEnv_get; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DefaultAwsSecurityCredentialsSupplier = undefined; - - class DefaultAwsSecurityCredentialsSupplier { - constructor(opts) { - _DefaultAwsSecurityCredentialsSupplier_instances.add(this); - this.regionUrl = opts.regionUrl; - this.securityCredentialsUrl = opts.securityCredentialsUrl; - this.imdsV2SessionTokenUrl = opts.imdsV2SessionTokenUrl; - this.additionalGaxiosOptions = opts.additionalGaxiosOptions; - } - async getAwsRegion(context8) { - if (__classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "a", _DefaultAwsSecurityCredentialsSupplier_regionFromEnv_get)) { - return __classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "a", _DefaultAwsSecurityCredentialsSupplier_regionFromEnv_get); - } - const metadataHeaders = {}; - if (!__classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "a", _DefaultAwsSecurityCredentialsSupplier_regionFromEnv_get) && this.imdsV2SessionTokenUrl) { - metadataHeaders["x-aws-ec2-metadata-token"] = await __classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "m", _DefaultAwsSecurityCredentialsSupplier_getImdsV2SessionToken).call(this, context8.transporter); - } - if (!this.regionUrl) { - throw new Error("Unable to determine AWS region due to missing " + '"options.credential_source.region_url"'); - } - const opts = { - ...this.additionalGaxiosOptions, - url: this.regionUrl, - method: "GET", - responseType: "text", - headers: metadataHeaders - }; - const response = await context8.transporter.request(opts); - return response.data.substr(0, response.data.length - 1); - } - async getAwsSecurityCredentials(context8) { - if (__classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "a", _DefaultAwsSecurityCredentialsSupplier_securityCredentialsFromEnv_get)) { - return __classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "a", _DefaultAwsSecurityCredentialsSupplier_securityCredentialsFromEnv_get); - } - const metadataHeaders = {}; - if (this.imdsV2SessionTokenUrl) { - metadataHeaders["x-aws-ec2-metadata-token"] = await __classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "m", _DefaultAwsSecurityCredentialsSupplier_getImdsV2SessionToken).call(this, context8.transporter); - } - const roleName = await __classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "m", _DefaultAwsSecurityCredentialsSupplier_getAwsRoleName).call(this, metadataHeaders, context8.transporter); - const awsCreds = await __classPrivateFieldGet(this, _DefaultAwsSecurityCredentialsSupplier_instances, "m", _DefaultAwsSecurityCredentialsSupplier_retrieveAwsSecurityCredentials).call(this, roleName, metadataHeaders, context8.transporter); - return { - accessKeyId: awsCreds.AccessKeyId, - secretAccessKey: awsCreds.SecretAccessKey, - token: awsCreds.Token - }; - } - } - exports.DefaultAwsSecurityCredentialsSupplier = DefaultAwsSecurityCredentialsSupplier; - _DefaultAwsSecurityCredentialsSupplier_instances = new WeakSet, _DefaultAwsSecurityCredentialsSupplier_getImdsV2SessionToken = async function _DefaultAwsSecurityCredentialsSupplier_getImdsV2SessionToken(transporter) { - const opts = { - ...this.additionalGaxiosOptions, - url: this.imdsV2SessionTokenUrl, - method: "PUT", - responseType: "text", - headers: { "x-aws-ec2-metadata-token-ttl-seconds": "300" } - }; - const response = await transporter.request(opts); - return response.data; - }, _DefaultAwsSecurityCredentialsSupplier_getAwsRoleName = async function _DefaultAwsSecurityCredentialsSupplier_getAwsRoleName(headers, transporter) { - if (!this.securityCredentialsUrl) { - throw new Error("Unable to determine AWS role name due to missing " + '"options.credential_source.url"'); - } - const opts = { - ...this.additionalGaxiosOptions, - url: this.securityCredentialsUrl, - method: "GET", - responseType: "text", - headers - }; - const response = await transporter.request(opts); - return response.data; - }, _DefaultAwsSecurityCredentialsSupplier_retrieveAwsSecurityCredentials = async function _DefaultAwsSecurityCredentialsSupplier_retrieveAwsSecurityCredentials(roleName, headers, transporter) { - const response = await transporter.request({ - ...this.additionalGaxiosOptions, - url: `${this.securityCredentialsUrl}/${roleName}`, - responseType: "json", - headers - }); - return response.data; - }, _DefaultAwsSecurityCredentialsSupplier_regionFromEnv_get = function _DefaultAwsSecurityCredentialsSupplier_regionFromEnv_get() { - return process.env["AWS_REGION"] || process.env["AWS_DEFAULT_REGION"] || null; - }, _DefaultAwsSecurityCredentialsSupplier_securityCredentialsFromEnv_get = function _DefaultAwsSecurityCredentialsSupplier_securityCredentialsFromEnv_get() { - if (process.env["AWS_ACCESS_KEY_ID"] && process.env["AWS_SECRET_ACCESS_KEY"]) { - return { - accessKeyId: process.env["AWS_ACCESS_KEY_ID"], - secretAccessKey: process.env["AWS_SECRET_ACCESS_KEY"], - token: process.env["AWS_SESSION_TOKEN"] - }; - } - return null; - }; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/awsclient.js -var require_awsclient = __commonJS((exports) => { - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var _a2; - var _AwsClient_DEFAULT_AWS_REGIONAL_CREDENTIAL_VERIFICATION_URL; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AwsClient = undefined; - var awsrequestsigner_1 = require_awsrequestsigner(); - var baseexternalclient_1 = require_baseexternalclient(); - var defaultawssecuritycredentialssupplier_1 = require_defaultawssecuritycredentialssupplier(); - var util_1 = require_util11(); - - class AwsClient extends baseexternalclient_1.BaseExternalAccountClient { - constructor(options, additionalOptions) { - super(options, additionalOptions); - const opts = (0, util_1.originalOrCamelOptions)(options); - const credentialSource = opts.get("credential_source"); - const awsSecurityCredentialsSupplier = opts.get("aws_security_credentials_supplier"); - if (!credentialSource && !awsSecurityCredentialsSupplier) { - throw new Error("A credential source or AWS security credentials supplier must be specified."); - } - if (credentialSource && awsSecurityCredentialsSupplier) { - throw new Error("Only one of credential source or AWS security credentials supplier can be specified."); - } - if (awsSecurityCredentialsSupplier) { - this.awsSecurityCredentialsSupplier = awsSecurityCredentialsSupplier; - this.regionalCredVerificationUrl = __classPrivateFieldGet(_a2, _a2, "f", _AwsClient_DEFAULT_AWS_REGIONAL_CREDENTIAL_VERIFICATION_URL); - this.credentialSourceType = "programmatic"; - } else { - const credentialSourceOpts = (0, util_1.originalOrCamelOptions)(credentialSource); - this.environmentId = credentialSourceOpts.get("environment_id"); - const regionUrl = credentialSourceOpts.get("region_url"); - const securityCredentialsUrl = credentialSourceOpts.get("url"); - const imdsV2SessionTokenUrl = credentialSourceOpts.get("imdsv2_session_token_url"); - this.awsSecurityCredentialsSupplier = new defaultawssecuritycredentialssupplier_1.DefaultAwsSecurityCredentialsSupplier({ - regionUrl, - securityCredentialsUrl, - imdsV2SessionTokenUrl - }); - this.regionalCredVerificationUrl = credentialSourceOpts.get("regional_cred_verification_url"); - this.credentialSourceType = "aws"; - this.validateEnvironmentId(); - } - this.awsRequestSigner = null; - this.region = ""; - } - validateEnvironmentId() { - var _b; - const match2 = (_b = this.environmentId) === null || _b === undefined ? undefined : _b.match(/^(aws)(\d+)$/); - if (!match2 || !this.regionalCredVerificationUrl) { - throw new Error('No valid AWS "credential_source" provided'); - } else if (parseInt(match2[2], 10) !== 1) { - throw new Error(`aws version "${match2[2]}" is not supported in the current build.`); - } - } - async retrieveSubjectToken() { - if (!this.awsRequestSigner) { - this.region = await this.awsSecurityCredentialsSupplier.getAwsRegion(this.supplierContext); - this.awsRequestSigner = new awsrequestsigner_1.AwsRequestSigner(async () => { - return this.awsSecurityCredentialsSupplier.getAwsSecurityCredentials(this.supplierContext); - }, this.region); - } - const options = await this.awsRequestSigner.getRequestOptions({ - ..._a2.RETRY_CONFIG, - url: this.regionalCredVerificationUrl.replace("{region}", this.region), - method: "POST" - }); - const reformattedHeader = []; - const extendedHeaders = Object.assign({ - "x-goog-cloud-target-resource": this.audience - }, options.headers); - for (const key in extendedHeaders) { - reformattedHeader.push({ - key, - value: extendedHeaders[key] - }); - } - return encodeURIComponent(JSON.stringify({ - url: options.url, - method: options.method, - headers: reformattedHeader - })); - } - } - exports.AwsClient = AwsClient; - _a2 = AwsClient; - _AwsClient_DEFAULT_AWS_REGIONAL_CREDENTIAL_VERIFICATION_URL = { value: "https://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15" }; - AwsClient.AWS_EC2_METADATA_IPV4_ADDRESS = "169.254.169.254"; - AwsClient.AWS_EC2_METADATA_IPV6_ADDRESS = "fd00:ec2::254"; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/executable-response.js -var require_executable_response = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.InvalidSubjectTokenError = exports.InvalidMessageFieldError = exports.InvalidCodeFieldError = exports.InvalidTokenTypeFieldError = exports.InvalidExpirationTimeFieldError = exports.InvalidSuccessFieldError = exports.InvalidVersionFieldError = exports.ExecutableResponseError = exports.ExecutableResponse = undefined; - var SAML_SUBJECT_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:saml2"; - var OIDC_SUBJECT_TOKEN_TYPE1 = "urn:ietf:params:oauth:token-type:id_token"; - var OIDC_SUBJECT_TOKEN_TYPE2 = "urn:ietf:params:oauth:token-type:jwt"; - - class ExecutableResponse { - constructor(responseJson) { - if (!responseJson.version) { - throw new InvalidVersionFieldError("Executable response must contain a 'version' field."); - } - if (responseJson.success === undefined) { - throw new InvalidSuccessFieldError("Executable response must contain a 'success' field."); - } - this.version = responseJson.version; - this.success = responseJson.success; - if (this.success) { - this.expirationTime = responseJson.expiration_time; - this.tokenType = responseJson.token_type; - if (this.tokenType !== SAML_SUBJECT_TOKEN_TYPE && this.tokenType !== OIDC_SUBJECT_TOKEN_TYPE1 && this.tokenType !== OIDC_SUBJECT_TOKEN_TYPE2) { - throw new InvalidTokenTypeFieldError("Executable response must contain a 'token_type' field when successful " + `and it must be one of ${OIDC_SUBJECT_TOKEN_TYPE1}, ${OIDC_SUBJECT_TOKEN_TYPE2}, or ${SAML_SUBJECT_TOKEN_TYPE}.`); - } - if (this.tokenType === SAML_SUBJECT_TOKEN_TYPE) { - if (!responseJson.saml_response) { - throw new InvalidSubjectTokenError(`Executable response must contain a 'saml_response' field when token_type=${SAML_SUBJECT_TOKEN_TYPE}.`); - } - this.subjectToken = responseJson.saml_response; - } else { - if (!responseJson.id_token) { - throw new InvalidSubjectTokenError("Executable response must contain a 'id_token' field when " + `token_type=${OIDC_SUBJECT_TOKEN_TYPE1} or ${OIDC_SUBJECT_TOKEN_TYPE2}.`); - } - this.subjectToken = responseJson.id_token; - } - } else { - if (!responseJson.code) { - throw new InvalidCodeFieldError("Executable response must contain a 'code' field when unsuccessful."); - } - if (!responseJson.message) { - throw new InvalidMessageFieldError("Executable response must contain a 'message' field when unsuccessful."); - } - this.errorCode = responseJson.code; - this.errorMessage = responseJson.message; - } - } - isValid() { - return !this.isExpired() && this.success; - } - isExpired() { - return this.expirationTime !== undefined && this.expirationTime < Math.round(Date.now() / 1000); - } - } - exports.ExecutableResponse = ExecutableResponse; - - class ExecutableResponseError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, new.target.prototype); - } - } - exports.ExecutableResponseError = ExecutableResponseError; - - class InvalidVersionFieldError extends ExecutableResponseError { - } - exports.InvalidVersionFieldError = InvalidVersionFieldError; - - class InvalidSuccessFieldError extends ExecutableResponseError { - } - exports.InvalidSuccessFieldError = InvalidSuccessFieldError; - - class InvalidExpirationTimeFieldError extends ExecutableResponseError { - } - exports.InvalidExpirationTimeFieldError = InvalidExpirationTimeFieldError; - - class InvalidTokenTypeFieldError extends ExecutableResponseError { - } - exports.InvalidTokenTypeFieldError = InvalidTokenTypeFieldError; - - class InvalidCodeFieldError extends ExecutableResponseError { - } - exports.InvalidCodeFieldError = InvalidCodeFieldError; - - class InvalidMessageFieldError extends ExecutableResponseError { - } - exports.InvalidMessageFieldError = InvalidMessageFieldError; - - class InvalidSubjectTokenError extends ExecutableResponseError { - } - exports.InvalidSubjectTokenError = InvalidSubjectTokenError; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/pluggable-auth-handler.js -var require_pluggable_auth_handler = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PluggableAuthHandler = undefined; - var pluggable_auth_client_1 = require_pluggable_auth_client(); - var executable_response_1 = require_executable_response(); - var childProcess = __require("child_process"); - var fs = __require("fs"); - - class PluggableAuthHandler { - constructor(options) { - if (!options.command) { - throw new Error("No command provided."); - } - this.commandComponents = PluggableAuthHandler.parseCommand(options.command); - this.timeoutMillis = options.timeoutMillis; - if (!this.timeoutMillis) { - throw new Error("No timeoutMillis provided."); - } - this.outputFile = options.outputFile; - } - retrieveResponseFromExecutable(envMap) { - return new Promise((resolve2, reject) => { - const child = childProcess.spawn(this.commandComponents[0], this.commandComponents.slice(1), { - env: { ...process.env, ...Object.fromEntries(envMap) } - }); - let output = ""; - child.stdout.on("data", (data) => { - output += data; - }); - child.stderr.on("data", (err) => { - output += err; - }); - const timeout = setTimeout(() => { - child.removeAllListeners(); - child.kill(); - return reject(new Error("The executable failed to finish within the timeout specified.")); - }, this.timeoutMillis); - child.on("close", (code) => { - clearTimeout(timeout); - if (code === 0) { - try { - const responseJson = JSON.parse(output); - const response = new executable_response_1.ExecutableResponse(responseJson); - return resolve2(response); - } catch (error48) { - if (error48 instanceof executable_response_1.ExecutableResponseError) { - return reject(error48); - } - return reject(new executable_response_1.ExecutableResponseError(`The executable returned an invalid response: ${output}`)); - } - } else { - return reject(new pluggable_auth_client_1.ExecutableError(output, code.toString())); - } - }); - }); - } - async retrieveCachedResponse() { - if (!this.outputFile || this.outputFile.length === 0) { - return; - } - let filePath; - try { - filePath = await fs.promises.realpath(this.outputFile); - } catch (_a2) { - return; - } - if (!(await fs.promises.lstat(filePath)).isFile()) { - return; - } - const responseString = await fs.promises.readFile(filePath, { - encoding: "utf8" - }); - if (responseString === "") { - return; - } - try { - const responseJson = JSON.parse(responseString); - const response = new executable_response_1.ExecutableResponse(responseJson); - if (response.isValid()) { - return new executable_response_1.ExecutableResponse(responseJson); - } - return; - } catch (error48) { - if (error48 instanceof executable_response_1.ExecutableResponseError) { - throw error48; - } - throw new executable_response_1.ExecutableResponseError(`The output file contained an invalid response: ${responseString}`); - } - } - static parseCommand(command) { - const components = command.match(/(?:[^\s"]+|"[^"]*")+/g); - if (!components) { - throw new Error(`Provided command: "${command}" could not be parsed.`); - } - for (let i = 0;i < components.length; i++) { - if (components[i][0] === '"' && components[i].slice(-1) === '"') { - components[i] = components[i].slice(1, -1); - } - } - return components; - } - } - exports.PluggableAuthHandler = PluggableAuthHandler; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/pluggable-auth-client.js -var require_pluggable_auth_client = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PluggableAuthClient = exports.ExecutableError = undefined; - var baseexternalclient_1 = require_baseexternalclient(); - var executable_response_1 = require_executable_response(); - var pluggable_auth_handler_1 = require_pluggable_auth_handler(); - - class ExecutableError extends Error { - constructor(message, code) { - super(`The executable failed with exit code: ${code} and error message: ${message}.`); - this.code = code; - Object.setPrototypeOf(this, new.target.prototype); - } - } - exports.ExecutableError = ExecutableError; - var DEFAULT_EXECUTABLE_TIMEOUT_MILLIS = 30 * 1000; - var MINIMUM_EXECUTABLE_TIMEOUT_MILLIS = 5 * 1000; - var MAXIMUM_EXECUTABLE_TIMEOUT_MILLIS = 120 * 1000; - var GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES = "GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES"; - var MAXIMUM_EXECUTABLE_VERSION = 1; - - class PluggableAuthClient extends baseexternalclient_1.BaseExternalAccountClient { - constructor(options, additionalOptions) { - super(options, additionalOptions); - if (!options.credential_source.executable) { - throw new Error('No valid Pluggable Auth "credential_source" provided.'); - } - this.command = options.credential_source.executable.command; - if (!this.command) { - throw new Error('No valid Pluggable Auth "credential_source" provided.'); - } - if (options.credential_source.executable.timeout_millis === undefined) { - this.timeoutMillis = DEFAULT_EXECUTABLE_TIMEOUT_MILLIS; - } else { - this.timeoutMillis = options.credential_source.executable.timeout_millis; - if (this.timeoutMillis < MINIMUM_EXECUTABLE_TIMEOUT_MILLIS || this.timeoutMillis > MAXIMUM_EXECUTABLE_TIMEOUT_MILLIS) { - throw new Error(`Timeout must be between ${MINIMUM_EXECUTABLE_TIMEOUT_MILLIS} and ` + `${MAXIMUM_EXECUTABLE_TIMEOUT_MILLIS} milliseconds.`); - } - } - this.outputFile = options.credential_source.executable.output_file; - this.handler = new pluggable_auth_handler_1.PluggableAuthHandler({ - command: this.command, - timeoutMillis: this.timeoutMillis, - outputFile: this.outputFile - }); - this.credentialSourceType = "executable"; - } - async retrieveSubjectToken() { - if (process.env[GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES] !== "1") { - throw new Error("Pluggable Auth executables need to be explicitly allowed to run by " + "setting the GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES environment " + "Variable to 1."); - } - let executableResponse = undefined; - if (this.outputFile) { - executableResponse = await this.handler.retrieveCachedResponse(); - } - if (!executableResponse) { - const envMap = new Map; - envMap.set("GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE", this.audience); - envMap.set("GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE", this.subjectTokenType); - envMap.set("GOOGLE_EXTERNAL_ACCOUNT_INTERACTIVE", "0"); - if (this.outputFile) { - envMap.set("GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE", this.outputFile); - } - const serviceAccountEmail = this.getServiceAccountEmail(); - if (serviceAccountEmail) { - envMap.set("GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL", serviceAccountEmail); - } - executableResponse = await this.handler.retrieveResponseFromExecutable(envMap); - } - if (executableResponse.version > MAXIMUM_EXECUTABLE_VERSION) { - throw new Error(`Version of executable is not currently supported, maximum supported version is ${MAXIMUM_EXECUTABLE_VERSION}.`); - } - if (!executableResponse.success) { - throw new ExecutableError(executableResponse.errorMessage, executableResponse.errorCode); - } - if (this.outputFile) { - if (!executableResponse.expirationTime) { - throw new executable_response_1.InvalidExpirationTimeFieldError("The executable response must contain the `expiration_time` field for successful responses when an output_file has been specified in the configuration."); - } - } - if (executableResponse.isExpired()) { - throw new Error("Executable response is expired."); - } - return executableResponse.subjectToken; - } - } - exports.PluggableAuthClient = PluggableAuthClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/externalclient.js -var require_externalclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExternalAccountClient = undefined; - var baseexternalclient_1 = require_baseexternalclient(); - var identitypoolclient_1 = require_identitypoolclient(); - var awsclient_1 = require_awsclient(); - var pluggable_auth_client_1 = require_pluggable_auth_client(); - - class ExternalAccountClient { - constructor() { - throw new Error("ExternalAccountClients should be initialized via: " + "ExternalAccountClient.fromJSON(), " + "directly via explicit constructors, eg. " + "new AwsClient(options), new IdentityPoolClient(options), new" + "PluggableAuthClientOptions, or via " + "new GoogleAuth(options).getClient()"); - } - static fromJSON(options, additionalOptions) { - var _a2, _b; - if (options && options.type === baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - if ((_a2 = options.credential_source) === null || _a2 === undefined ? undefined : _a2.environment_id) { - return new awsclient_1.AwsClient(options, additionalOptions); - } else if ((_b = options.credential_source) === null || _b === undefined ? undefined : _b.executable) { - return new pluggable_auth_client_1.PluggableAuthClient(options, additionalOptions); - } else { - return new identitypoolclient_1.IdentityPoolClient(options, additionalOptions); - } - } else { - return null; - } - } - } - exports.ExternalAccountClient = ExternalAccountClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/externalAccountAuthorizedUserClient.js -var require_externalAccountAuthorizedUserClient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ExternalAccountAuthorizedUserClient = exports.EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE = undefined; - var authclient_1 = require_authclient(); - var oauth2common_1 = require_oauth2common(); - var gaxios_1 = require_src57(); - var stream3 = __require("stream"); - var baseexternalclient_1 = require_baseexternalclient(); - exports.EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE = "external_account_authorized_user"; - var DEFAULT_TOKEN_URL = "https://sts.{universeDomain}/v1/oauthtoken"; - - class ExternalAccountAuthorizedUserHandler extends oauth2common_1.OAuthClientAuthHandler { - constructor(url2, transporter, clientAuthentication) { - super(clientAuthentication); - this.url = url2; - this.transporter = transporter; - } - async refreshToken(refreshToken, additionalHeaders) { - const values = new URLSearchParams({ - grant_type: "refresh_token", - refresh_token: refreshToken - }); - const headers = { - "Content-Type": "application/x-www-form-urlencoded", - ...additionalHeaders - }; - const opts = { - ...ExternalAccountAuthorizedUserHandler.RETRY_CONFIG, - url: this.url, - method: "POST", - headers, - data: values.toString(), - responseType: "json" - }; - this.applyClientAuthenticationOptions(opts); - try { - const response = await this.transporter.request(opts); - const tokenRefreshResponse = response.data; - tokenRefreshResponse.res = response; - return tokenRefreshResponse; - } catch (error48) { - if (error48 instanceof gaxios_1.GaxiosError && error48.response) { - throw (0, oauth2common_1.getErrorFromOAuthErrorResponse)(error48.response.data, error48); - } - throw error48; - } - } - } - - class ExternalAccountAuthorizedUserClient extends authclient_1.AuthClient { - constructor(options, additionalOptions) { - var _a2; - super({ ...options, ...additionalOptions }); - if (options.universe_domain) { - this.universeDomain = options.universe_domain; - } - this.refreshToken = options.refresh_token; - const clientAuth = { - confidentialClientType: "basic", - clientId: options.client_id, - clientSecret: options.client_secret - }; - this.externalAccountAuthorizedUserHandler = new ExternalAccountAuthorizedUserHandler((_a2 = options.token_url) !== null && _a2 !== undefined ? _a2 : DEFAULT_TOKEN_URL.replace("{universeDomain}", this.universeDomain), this.transporter, clientAuth); - this.cachedAccessToken = null; - this.quotaProjectId = options.quota_project_id; - if (typeof (additionalOptions === null || additionalOptions === undefined ? undefined : additionalOptions.eagerRefreshThresholdMillis) !== "number") { - this.eagerRefreshThresholdMillis = baseexternalclient_1.EXPIRATION_TIME_OFFSET; - } else { - this.eagerRefreshThresholdMillis = additionalOptions.eagerRefreshThresholdMillis; - } - this.forceRefreshOnFailure = !!(additionalOptions === null || additionalOptions === undefined ? undefined : additionalOptions.forceRefreshOnFailure); - } - async getAccessToken() { - if (!this.cachedAccessToken || this.isExpired(this.cachedAccessToken)) { - await this.refreshAccessTokenAsync(); - } - return { - token: this.cachedAccessToken.access_token, - res: this.cachedAccessToken.res - }; - } - async getRequestHeaders() { - const accessTokenResponse = await this.getAccessToken(); - const headers = { - Authorization: `Bearer ${accessTokenResponse.token}` - }; - return this.addSharedMetadataHeaders(headers); - } - request(opts, callback) { - if (callback) { - this.requestAsync(opts).then((r) => callback(null, r), (e) => { - return callback(e, e.response); - }); - } else { - return this.requestAsync(opts); - } - } - async requestAsync(opts, reAuthRetried = false) { - let response; - try { - const requestHeaders = await this.getRequestHeaders(); - opts.headers = opts.headers || {}; - if (requestHeaders && requestHeaders["x-goog-user-project"]) { - opts.headers["x-goog-user-project"] = requestHeaders["x-goog-user-project"]; - } - if (requestHeaders && requestHeaders.Authorization) { - opts.headers.Authorization = requestHeaders.Authorization; - } - response = await this.transporter.request(opts); - } catch (e) { - const res = e.response; - if (res) { - const statusCode = res.status; - const isReadableStream = res.config.data instanceof stream3.Readable; - const isAuthErr = statusCode === 401 || statusCode === 403; - if (!reAuthRetried && isAuthErr && !isReadableStream && this.forceRefreshOnFailure) { - await this.refreshAccessTokenAsync(); - return await this.requestAsync(opts, true); - } - } - throw e; - } - return response; - } - async refreshAccessTokenAsync() { - const refreshResponse = await this.externalAccountAuthorizedUserHandler.refreshToken(this.refreshToken); - this.cachedAccessToken = { - access_token: refreshResponse.access_token, - expiry_date: new Date().getTime() + refreshResponse.expires_in * 1000, - res: refreshResponse.res - }; - if (refreshResponse.refresh_token !== undefined) { - this.refreshToken = refreshResponse.refresh_token; - } - return this.cachedAccessToken; - } - isExpired(credentials) { - const now2 = new Date().getTime(); - return credentials.expiry_date ? now2 >= credentials.expiry_date - this.eagerRefreshThresholdMillis : false; - } - } - exports.ExternalAccountAuthorizedUserClient = ExternalAccountAuthorizedUserClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/googleauth.js -var require_googleauth = __commonJS((exports) => { - var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - var __classPrivateFieldSet = exports && exports.__classPrivateFieldSet || function(receiver, state, value, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; - }; - var _GoogleAuth_instances; - var _GoogleAuth_pendingAuthClient; - var _GoogleAuth_prepareAndCacheClient; - var _GoogleAuth_determineClient; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GoogleAuth = exports.GoogleAuthExceptionMessages = exports.CLOUD_SDK_CLIENT_ID = undefined; - var child_process_1 = __require("child_process"); - var fs = __require("fs"); - var gcpMetadata = require_src59(); - var os = __require("os"); - var path = __require("path"); - var crypto_1 = require_crypto3(); - var transporters_1 = require_transporters(); - var computeclient_1 = require_computeclient(); - var idtokenclient_1 = require_idtokenclient(); - var envDetect_1 = require_envDetect(); - var jwtclient_1 = require_jwtclient(); - var refreshclient_1 = require_refreshclient(); - var impersonated_1 = require_impersonated(); - var externalclient_1 = require_externalclient(); - var baseexternalclient_1 = require_baseexternalclient(); - var authclient_1 = require_authclient(); - var externalAccountAuthorizedUserClient_1 = require_externalAccountAuthorizedUserClient(); - var util_1 = require_util11(); - exports.CLOUD_SDK_CLIENT_ID = "764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com"; - exports.GoogleAuthExceptionMessages = { - API_KEY_WITH_CREDENTIALS: "API Keys and Credentials are mutually exclusive authentication methods and cannot be used together.", - NO_PROJECT_ID_FOUND: `Unable to detect a Project Id in the current environment. -` + `To learn more about authentication and Google APIs, visit: -` + "https://cloud.google.com/docs/authentication/getting-started", - NO_CREDENTIALS_FOUND: `Unable to find credentials in current environment. -` + `To learn more about authentication and Google APIs, visit: -` + "https://cloud.google.com/docs/authentication/getting-started", - NO_ADC_FOUND: "Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.", - NO_UNIVERSE_DOMAIN_FOUND: `Unable to detect a Universe Domain in the current environment. -` + `To learn more about Universe Domain retrieval, visit: -` + "https://cloud.google.com/compute/docs/metadata/predefined-metadata-keys" - }; - - class GoogleAuth { - get isGCE() { - return this.checkIsGCE; - } - constructor(opts = {}) { - _GoogleAuth_instances.add(this); - this.checkIsGCE = undefined; - this.jsonContent = null; - this.cachedCredential = null; - _GoogleAuth_pendingAuthClient.set(this, null); - this.clientOptions = {}; - this._cachedProjectId = opts.projectId || null; - this.cachedCredential = opts.authClient || null; - this.keyFilename = opts.keyFilename || opts.keyFile; - this.scopes = opts.scopes; - this.clientOptions = opts.clientOptions || {}; - this.jsonContent = opts.credentials || null; - this.apiKey = opts.apiKey || this.clientOptions.apiKey || null; - if (this.apiKey && (this.jsonContent || this.clientOptions.credentials)) { - throw new RangeError(exports.GoogleAuthExceptionMessages.API_KEY_WITH_CREDENTIALS); - } - if (opts.universeDomain) { - this.clientOptions.universeDomain = opts.universeDomain; - } - } - setGapicJWTValues(client) { - client.defaultServicePath = this.defaultServicePath; - client.useJWTAccessWithScope = this.useJWTAccessWithScope; - client.defaultScopes = this.defaultScopes; - } - getProjectId(callback) { - if (callback) { - this.getProjectIdAsync().then((r) => callback(null, r), callback); - } else { - return this.getProjectIdAsync(); - } - } - async getProjectIdOptional() { - try { - return await this.getProjectId(); - } catch (e) { - if (e instanceof Error && e.message === exports.GoogleAuthExceptionMessages.NO_PROJECT_ID_FOUND) { - return null; - } else { - throw e; - } - } - } - async findAndCacheProjectId() { - let projectId = null; - projectId || (projectId = await this.getProductionProjectId()); - projectId || (projectId = await this.getFileProjectId()); - projectId || (projectId = await this.getDefaultServiceProjectId()); - projectId || (projectId = await this.getGCEProjectId()); - projectId || (projectId = await this.getExternalAccountClientProjectId()); - if (projectId) { - this._cachedProjectId = projectId; - return projectId; - } else { - throw new Error(exports.GoogleAuthExceptionMessages.NO_PROJECT_ID_FOUND); - } - } - async getProjectIdAsync() { - if (this._cachedProjectId) { - return this._cachedProjectId; - } - if (!this._findProjectIdPromise) { - this._findProjectIdPromise = this.findAndCacheProjectId(); - } - return this._findProjectIdPromise; - } - async getUniverseDomainFromMetadataServer() { - var _a2; - let universeDomain; - try { - universeDomain = await gcpMetadata.universe("universe-domain"); - universeDomain || (universeDomain = authclient_1.DEFAULT_UNIVERSE); - } catch (e) { - if (e && ((_a2 = e === null || e === undefined ? undefined : e.response) === null || _a2 === undefined ? undefined : _a2.status) === 404) { - universeDomain = authclient_1.DEFAULT_UNIVERSE; - } else { - throw e; - } - } - return universeDomain; - } - async getUniverseDomain() { - let universeDomain = (0, util_1.originalOrCamelOptions)(this.clientOptions).get("universe_domain"); - try { - universeDomain !== null && universeDomain !== undefined || (universeDomain = (await this.getClient()).universeDomain); - } catch (_a2) { - universeDomain !== null && universeDomain !== undefined || (universeDomain = authclient_1.DEFAULT_UNIVERSE); - } - return universeDomain; - } - getAnyScopes() { - return this.scopes || this.defaultScopes; - } - getApplicationDefault(optionsOrCallback = {}, callback) { - let options; - if (typeof optionsOrCallback === "function") { - callback = optionsOrCallback; - } else { - options = optionsOrCallback; - } - if (callback) { - this.getApplicationDefaultAsync(options).then((r) => callback(null, r.credential, r.projectId), callback); - } else { - return this.getApplicationDefaultAsync(options); - } - } - async getApplicationDefaultAsync(options = {}) { - if (this.cachedCredential) { - return await __classPrivateFieldGet(this, _GoogleAuth_instances, "m", _GoogleAuth_prepareAndCacheClient).call(this, this.cachedCredential, null); - } - let credential; - credential = await this._tryGetApplicationCredentialsFromEnvironmentVariable(options); - if (credential) { - if (credential instanceof jwtclient_1.JWT) { - credential.scopes = this.scopes; - } else if (credential instanceof baseexternalclient_1.BaseExternalAccountClient) { - credential.scopes = this.getAnyScopes(); - } - return await __classPrivateFieldGet(this, _GoogleAuth_instances, "m", _GoogleAuth_prepareAndCacheClient).call(this, credential); - } - credential = await this._tryGetApplicationCredentialsFromWellKnownFile(options); - if (credential) { - if (credential instanceof jwtclient_1.JWT) { - credential.scopes = this.scopes; - } else if (credential instanceof baseexternalclient_1.BaseExternalAccountClient) { - credential.scopes = this.getAnyScopes(); - } - return await __classPrivateFieldGet(this, _GoogleAuth_instances, "m", _GoogleAuth_prepareAndCacheClient).call(this, credential); - } - if (await this._checkIsGCE()) { - options.scopes = this.getAnyScopes(); - return await __classPrivateFieldGet(this, _GoogleAuth_instances, "m", _GoogleAuth_prepareAndCacheClient).call(this, new computeclient_1.Compute(options)); - } - throw new Error(exports.GoogleAuthExceptionMessages.NO_ADC_FOUND); - } - async _checkIsGCE() { - if (this.checkIsGCE === undefined) { - this.checkIsGCE = gcpMetadata.getGCPResidency() || await gcpMetadata.isAvailable(); - } - return this.checkIsGCE; - } - async _tryGetApplicationCredentialsFromEnvironmentVariable(options) { - const credentialsPath = process.env["GOOGLE_APPLICATION_CREDENTIALS"] || process.env["google_application_credentials"]; - if (!credentialsPath || credentialsPath.length === 0) { - return null; - } - try { - return this._getApplicationCredentialsFromFilePath(credentialsPath, options); - } catch (e) { - if (e instanceof Error) { - e.message = `Unable to read the credential file specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable: ${e.message}`; - } - throw e; - } - } - async _tryGetApplicationCredentialsFromWellKnownFile(options) { - let location = null; - if (this._isWindows()) { - location = process.env["APPDATA"]; - } else { - const home = process.env["HOME"]; - if (home) { - location = path.join(home, ".config"); - } - } - if (location) { - location = path.join(location, "gcloud", "application_default_credentials.json"); - if (!fs.existsSync(location)) { - location = null; - } - } - if (!location) { - return null; - } - const client = await this._getApplicationCredentialsFromFilePath(location, options); - return client; - } - async _getApplicationCredentialsFromFilePath(filePath, options = {}) { - if (!filePath || filePath.length === 0) { - throw new Error("The file path is invalid."); - } - try { - filePath = fs.realpathSync(filePath); - if (!fs.lstatSync(filePath).isFile()) { - throw new Error; - } - } catch (err) { - if (err instanceof Error) { - err.message = `The file at ${filePath} does not exist, or it is not a file. ${err.message}`; - } - throw err; - } - const readStream = fs.createReadStream(filePath); - return this.fromStream(readStream, options); - } - fromImpersonatedJSON(json3) { - var _a2, _b, _c, _d; - if (!json3) { - throw new Error("Must pass in a JSON object containing an impersonated refresh token"); - } - if (json3.type !== impersonated_1.IMPERSONATED_ACCOUNT_TYPE) { - throw new Error(`The incoming JSON object does not have the "${impersonated_1.IMPERSONATED_ACCOUNT_TYPE}" type`); - } - if (!json3.source_credentials) { - throw new Error("The incoming JSON object does not contain a source_credentials field"); - } - if (!json3.service_account_impersonation_url) { - throw new Error("The incoming JSON object does not contain a service_account_impersonation_url field"); - } - const sourceClient = this.fromJSON(json3.source_credentials); - if (((_a2 = json3.service_account_impersonation_url) === null || _a2 === undefined ? undefined : _a2.length) > 256) { - throw new RangeError(`Target principal is too long: ${json3.service_account_impersonation_url}`); - } - const targetPrincipal = (_c = (_b = /(?[^/]+):(generateAccessToken|generateIdToken)$/.exec(json3.service_account_impersonation_url)) === null || _b === undefined ? undefined : _b.groups) === null || _c === undefined ? undefined : _c.target; - if (!targetPrincipal) { - throw new RangeError(`Cannot extract target principal from ${json3.service_account_impersonation_url}`); - } - const targetScopes = (_d = this.getAnyScopes()) !== null && _d !== undefined ? _d : []; - return new impersonated_1.Impersonated({ - ...json3, - sourceClient, - targetPrincipal, - targetScopes: Array.isArray(targetScopes) ? targetScopes : [targetScopes] - }); - } - fromJSON(json3, options = {}) { - let client; - const preferredUniverseDomain = (0, util_1.originalOrCamelOptions)(options).get("universe_domain"); - if (json3.type === refreshclient_1.USER_REFRESH_ACCOUNT_TYPE) { - client = new refreshclient_1.UserRefreshClient(options); - client.fromJSON(json3); - } else if (json3.type === impersonated_1.IMPERSONATED_ACCOUNT_TYPE) { - client = this.fromImpersonatedJSON(json3); - } else if (json3.type === baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - client = externalclient_1.ExternalAccountClient.fromJSON(json3, options); - client.scopes = this.getAnyScopes(); - } else if (json3.type === externalAccountAuthorizedUserClient_1.EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE) { - client = new externalAccountAuthorizedUserClient_1.ExternalAccountAuthorizedUserClient(json3, options); - } else { - options.scopes = this.scopes; - client = new jwtclient_1.JWT(options); - this.setGapicJWTValues(client); - client.fromJSON(json3); - } - if (preferredUniverseDomain) { - client.universeDomain = preferredUniverseDomain; - } - return client; - } - _cacheClientFromJSON(json3, options) { - const client = this.fromJSON(json3, options); - this.jsonContent = json3; - this.cachedCredential = client; - return client; - } - fromStream(inputStream, optionsOrCallback = {}, callback) { - let options = {}; - if (typeof optionsOrCallback === "function") { - callback = optionsOrCallback; - } else { - options = optionsOrCallback; - } - if (callback) { - this.fromStreamAsync(inputStream, options).then((r) => callback(null, r), callback); - } else { - return this.fromStreamAsync(inputStream, options); - } - } - fromStreamAsync(inputStream, options) { - return new Promise((resolve2, reject) => { - if (!inputStream) { - throw new Error("Must pass in a stream containing the Google auth settings."); - } - const chunks = []; - inputStream.setEncoding("utf8").on("error", reject).on("data", (chunk) => chunks.push(chunk)).on("end", () => { - try { - try { - const data = JSON.parse(chunks.join("")); - const r = this._cacheClientFromJSON(data, options); - return resolve2(r); - } catch (err) { - if (!this.keyFilename) - throw err; - const client = new jwtclient_1.JWT({ - ...this.clientOptions, - keyFile: this.keyFilename - }); - this.cachedCredential = client; - this.setGapicJWTValues(client); - return resolve2(client); - } - } catch (err) { - return reject(err); - } - }); - }); - } - fromAPIKey(apiKey, options = {}) { - return new jwtclient_1.JWT({ ...options, apiKey }); - } - _isWindows() { - const sys = os.platform(); - if (sys && sys.length >= 3) { - if (sys.substring(0, 3).toLowerCase() === "win") { - return true; - } - } - return false; - } - async getDefaultServiceProjectId() { - return new Promise((resolve2) => { - (0, child_process_1.exec)("gcloud config config-helper --format json", (err, stdout) => { - if (!err && stdout) { - try { - const projectId = JSON.parse(stdout).configuration.properties.core.project; - resolve2(projectId); - return; - } catch (e) {} - } - resolve2(null); - }); - }); - } - getProductionProjectId() { - return process.env["GCLOUD_PROJECT"] || process.env["GOOGLE_CLOUD_PROJECT"] || process.env["gcloud_project"] || process.env["google_cloud_project"]; - } - async getFileProjectId() { - if (this.cachedCredential) { - return this.cachedCredential.projectId; - } - if (this.keyFilename) { - const creds = await this.getClient(); - if (creds && creds.projectId) { - return creds.projectId; - } - } - const r = await this._tryGetApplicationCredentialsFromEnvironmentVariable(); - if (r) { - return r.projectId; - } else { - return null; - } - } - async getExternalAccountClientProjectId() { - if (!this.jsonContent || this.jsonContent.type !== baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - return null; - } - const creds = await this.getClient(); - return await creds.getProjectId(); - } - async getGCEProjectId() { - try { - const r = await gcpMetadata.project("project-id"); - return r; - } catch (e) { - return null; - } - } - getCredentials(callback) { - if (callback) { - this.getCredentialsAsync().then((r) => callback(null, r), callback); - } else { - return this.getCredentialsAsync(); - } - } - async getCredentialsAsync() { - const client = await this.getClient(); - if (client instanceof impersonated_1.Impersonated) { - return { client_email: client.getTargetPrincipal() }; - } - if (client instanceof baseexternalclient_1.BaseExternalAccountClient) { - const serviceAccountEmail = client.getServiceAccountEmail(); - if (serviceAccountEmail) { - return { - client_email: serviceAccountEmail, - universe_domain: client.universeDomain - }; - } - } - if (this.jsonContent) { - return { - client_email: this.jsonContent.client_email, - private_key: this.jsonContent.private_key, - universe_domain: this.jsonContent.universe_domain - }; - } - if (await this._checkIsGCE()) { - const [client_email, universe_domain] = await Promise.all([ - gcpMetadata.instance("service-accounts/default/email"), - this.getUniverseDomain() - ]); - return { client_email, universe_domain }; - } - throw new Error(exports.GoogleAuthExceptionMessages.NO_CREDENTIALS_FOUND); - } - async getClient() { - if (this.cachedCredential) { - return this.cachedCredential; - } - __classPrivateFieldSet(this, _GoogleAuth_pendingAuthClient, __classPrivateFieldGet(this, _GoogleAuth_pendingAuthClient, "f") || __classPrivateFieldGet(this, _GoogleAuth_instances, "m", _GoogleAuth_determineClient).call(this), "f"); - try { - return await __classPrivateFieldGet(this, _GoogleAuth_pendingAuthClient, "f"); - } finally { - __classPrivateFieldSet(this, _GoogleAuth_pendingAuthClient, null, "f"); - } - } - async getIdTokenClient(targetAudience) { - const client = await this.getClient(); - if (!("fetchIdToken" in client)) { - throw new Error("Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file."); - } - return new idtokenclient_1.IdTokenClient({ targetAudience, idTokenProvider: client }); - } - async getAccessToken() { - const client = await this.getClient(); - return (await client.getAccessToken()).token; - } - async getRequestHeaders(url2) { - const client = await this.getClient(); - return client.getRequestHeaders(url2); - } - async authorizeRequest(opts) { - opts = opts || {}; - const url2 = opts.url || opts.uri; - const client = await this.getClient(); - const headers = await client.getRequestHeaders(url2); - opts.headers = Object.assign(opts.headers || {}, headers); - return opts; - } - async request(opts) { - const client = await this.getClient(); - return client.request(opts); - } - getEnv() { - return (0, envDetect_1.getEnv)(); - } - async sign(data, endpoint) { - const client = await this.getClient(); - const universe = await this.getUniverseDomain(); - endpoint = endpoint || `https://iamcredentials.${universe}/v1/projects/-/serviceAccounts/`; - if (client instanceof impersonated_1.Impersonated) { - const signed = await client.sign(data); - return signed.signedBlob; - } - const crypto2 = (0, crypto_1.createCrypto)(); - if (client instanceof jwtclient_1.JWT && client.key) { - const sign = await crypto2.sign(client.key, data); - return sign; - } - const creds = await this.getCredentials(); - if (!creds.client_email) { - throw new Error("Cannot sign data without `client_email`."); - } - return this.signBlob(crypto2, creds.client_email, data, endpoint); - } - async signBlob(crypto2, emailOrUniqueId, data, endpoint) { - const url2 = new URL(endpoint + `${emailOrUniqueId}:signBlob`); - const res = await this.request({ - method: "POST", - url: url2.href, - data: { - payload: crypto2.encodeBase64StringUtf8(data) - }, - retry: true, - retryConfig: { - httpMethodsToRetry: ["POST"] - } - }); - return res.data.signedBlob; - } - } - exports.GoogleAuth = GoogleAuth; - _GoogleAuth_pendingAuthClient = new WeakMap, _GoogleAuth_instances = new WeakSet, _GoogleAuth_prepareAndCacheClient = async function _GoogleAuth_prepareAndCacheClient(credential, quotaProjectIdOverride = process.env["GOOGLE_CLOUD_QUOTA_PROJECT"] || null) { - const projectId = await this.getProjectIdOptional(); - if (quotaProjectIdOverride) { - credential.quotaProjectId = quotaProjectIdOverride; - } - this.cachedCredential = credential; - return { credential, projectId }; - }, _GoogleAuth_determineClient = async function _GoogleAuth_determineClient() { - if (this.jsonContent) { - return this._cacheClientFromJSON(this.jsonContent, this.clientOptions); - } else if (this.keyFilename) { - const filePath = path.resolve(this.keyFilename); - const stream3 = fs.createReadStream(filePath); - return await this.fromStreamAsync(stream3, this.clientOptions); - } else if (this.apiKey) { - const client = await this.fromAPIKey(this.apiKey, this.clientOptions); - client.scopes = this.scopes; - const { credential } = await __classPrivateFieldGet(this, _GoogleAuth_instances, "m", _GoogleAuth_prepareAndCacheClient).call(this, client); - return credential; - } else { - const { credential } = await this.getApplicationDefaultAsync(this.clientOptions); - return credential; - } - }; - GoogleAuth.DefaultTransporter = transporters_1.DefaultTransporter; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/iam.js -var require_iam = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.IAMAuth = undefined; - - class IAMAuth { - constructor(selector, token) { - this.selector = selector; - this.token = token; - this.selector = selector; - this.token = token; - } - getRequestHeaders() { - return { - "x-goog-iam-authority-selector": this.selector, - "x-goog-iam-authorization-token": this.token - }; - } - } - exports.IAMAuth = IAMAuth; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/downscopedclient.js -var require_downscopedclient = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DownscopedClient = exports.EXPIRATION_TIME_OFFSET = exports.MAX_ACCESS_BOUNDARY_RULES_COUNT = undefined; - var stream3 = __require("stream"); - var authclient_1 = require_authclient(); - var sts = require_stscredentials(); - var STS_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:token-exchange"; - var STS_REQUEST_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:access_token"; - var STS_SUBJECT_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:access_token"; - exports.MAX_ACCESS_BOUNDARY_RULES_COUNT = 10; - exports.EXPIRATION_TIME_OFFSET = 5 * 60 * 1000; - - class DownscopedClient extends authclient_1.AuthClient { - constructor(authClient, credentialAccessBoundary, additionalOptions, quotaProjectId) { - super({ ...additionalOptions, quotaProjectId }); - this.authClient = authClient; - this.credentialAccessBoundary = credentialAccessBoundary; - if (credentialAccessBoundary.accessBoundary.accessBoundaryRules.length === 0) { - throw new Error("At least one access boundary rule needs to be defined."); - } else if (credentialAccessBoundary.accessBoundary.accessBoundaryRules.length > exports.MAX_ACCESS_BOUNDARY_RULES_COUNT) { - throw new Error("The provided access boundary has more than " + `${exports.MAX_ACCESS_BOUNDARY_RULES_COUNT} access boundary rules.`); - } - for (const rule of credentialAccessBoundary.accessBoundary.accessBoundaryRules) { - if (rule.availablePermissions.length === 0) { - throw new Error("At least one permission should be defined in access boundary rules."); - } - } - this.stsCredential = new sts.StsCredentials(`https://sts.${this.universeDomain}/v1/token`); - this.cachedDownscopedAccessToken = null; - } - setCredentials(credentials) { - if (!credentials.expiry_date) { - throw new Error("The access token expiry_date field is missing in the provided " + "credentials."); - } - super.setCredentials(credentials); - this.cachedDownscopedAccessToken = credentials; - } - async getAccessToken() { - if (!this.cachedDownscopedAccessToken || this.isExpired(this.cachedDownscopedAccessToken)) { - await this.refreshAccessTokenAsync(); - } - return { - token: this.cachedDownscopedAccessToken.access_token, - expirationTime: this.cachedDownscopedAccessToken.expiry_date, - res: this.cachedDownscopedAccessToken.res - }; - } - async getRequestHeaders() { - const accessTokenResponse = await this.getAccessToken(); - const headers = { - Authorization: `Bearer ${accessTokenResponse.token}` - }; - return this.addSharedMetadataHeaders(headers); - } - request(opts, callback) { - if (callback) { - this.requestAsync(opts).then((r) => callback(null, r), (e) => { - return callback(e, e.response); - }); - } else { - return this.requestAsync(opts); - } - } - async requestAsync(opts, reAuthRetried = false) { - let response; - try { - const requestHeaders = await this.getRequestHeaders(); - opts.headers = opts.headers || {}; - if (requestHeaders && requestHeaders["x-goog-user-project"]) { - opts.headers["x-goog-user-project"] = requestHeaders["x-goog-user-project"]; - } - if (requestHeaders && requestHeaders.Authorization) { - opts.headers.Authorization = requestHeaders.Authorization; - } - response = await this.transporter.request(opts); - } catch (e) { - const res = e.response; - if (res) { - const statusCode = res.status; - const isReadableStream = res.config.data instanceof stream3.Readable; - const isAuthErr = statusCode === 401 || statusCode === 403; - if (!reAuthRetried && isAuthErr && !isReadableStream && this.forceRefreshOnFailure) { - await this.refreshAccessTokenAsync(); - return await this.requestAsync(opts, true); - } - } - throw e; - } - return response; - } - async refreshAccessTokenAsync() { - var _a2; - const subjectToken = (await this.authClient.getAccessToken()).token; - const stsCredentialsOptions = { - grantType: STS_GRANT_TYPE, - requestedTokenType: STS_REQUEST_TOKEN_TYPE, - subjectToken, - subjectTokenType: STS_SUBJECT_TOKEN_TYPE - }; - const stsResponse = await this.stsCredential.exchangeToken(stsCredentialsOptions, undefined, this.credentialAccessBoundary); - const sourceCredExpireDate = ((_a2 = this.authClient.credentials) === null || _a2 === undefined ? undefined : _a2.expiry_date) || null; - const expiryDate = stsResponse.expires_in ? new Date().getTime() + stsResponse.expires_in * 1000 : sourceCredExpireDate; - this.cachedDownscopedAccessToken = { - access_token: stsResponse.access_token, - expiry_date: expiryDate, - res: stsResponse.res - }; - this.credentials = {}; - Object.assign(this.credentials, this.cachedDownscopedAccessToken); - delete this.credentials.res; - this.emit("tokens", { - refresh_token: null, - expiry_date: this.cachedDownscopedAccessToken.expiry_date, - access_token: this.cachedDownscopedAccessToken.access_token, - token_type: "Bearer", - id_token: null - }); - return this.cachedDownscopedAccessToken; - } - isExpired(downscopedAccessToken) { - const now2 = new Date().getTime(); - return downscopedAccessToken.expiry_date ? now2 >= downscopedAccessToken.expiry_date - this.eagerRefreshThresholdMillis : false; - } - } - exports.DownscopedClient = DownscopedClient; -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/auth/passthrough.js -var require_passthrough = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.PassThroughClient = undefined; - var authclient_1 = require_authclient(); - - class PassThroughClient extends authclient_1.AuthClient { - async request(opts) { - return this.transporter.request(opts); - } - async getAccessToken() { - return {}; - } - async getRequestHeaders() { - return {}; - } - } - exports.PassThroughClient = PassThroughClient; - var a = new PassThroughClient; - a.getAccessToken(); -}); - -// ../../../../node_modules/.bun/google-auth-library@9.15.1/node_modules/google-auth-library/build/src/index.js -var require_src116 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GoogleAuth = exports.auth = exports.DefaultTransporter = exports.PassThroughClient = exports.ExecutableError = exports.PluggableAuthClient = exports.DownscopedClient = exports.BaseExternalAccountClient = exports.ExternalAccountClient = exports.IdentityPoolClient = exports.AwsRequestSigner = exports.AwsClient = exports.UserRefreshClient = exports.LoginTicket = exports.ClientAuthentication = exports.OAuth2Client = exports.CodeChallengeMethod = exports.Impersonated = exports.JWT = exports.JWTAccess = exports.IdTokenClient = exports.IAMAuth = exports.GCPEnv = exports.Compute = exports.DEFAULT_UNIVERSE = exports.AuthClient = exports.gaxios = exports.gcpMetadata = undefined; - var googleauth_1 = require_googleauth(); - Object.defineProperty(exports, "GoogleAuth", { enumerable: true, get: function() { - return googleauth_1.GoogleAuth; - } }); - exports.gcpMetadata = require_src59(); - exports.gaxios = require_src57(); - var authclient_1 = require_authclient(); - Object.defineProperty(exports, "AuthClient", { enumerable: true, get: function() { - return authclient_1.AuthClient; - } }); - Object.defineProperty(exports, "DEFAULT_UNIVERSE", { enumerable: true, get: function() { - return authclient_1.DEFAULT_UNIVERSE; - } }); - var computeclient_1 = require_computeclient(); - Object.defineProperty(exports, "Compute", { enumerable: true, get: function() { - return computeclient_1.Compute; - } }); - var envDetect_1 = require_envDetect(); - Object.defineProperty(exports, "GCPEnv", { enumerable: true, get: function() { - return envDetect_1.GCPEnv; - } }); - var iam_1 = require_iam(); - Object.defineProperty(exports, "IAMAuth", { enumerable: true, get: function() { - return iam_1.IAMAuth; - } }); - var idtokenclient_1 = require_idtokenclient(); - Object.defineProperty(exports, "IdTokenClient", { enumerable: true, get: function() { - return idtokenclient_1.IdTokenClient; - } }); - var jwtaccess_1 = require_jwtaccess(); - Object.defineProperty(exports, "JWTAccess", { enumerable: true, get: function() { - return jwtaccess_1.JWTAccess; - } }); - var jwtclient_1 = require_jwtclient(); - Object.defineProperty(exports, "JWT", { enumerable: true, get: function() { - return jwtclient_1.JWT; - } }); - var impersonated_1 = require_impersonated(); - Object.defineProperty(exports, "Impersonated", { enumerable: true, get: function() { - return impersonated_1.Impersonated; - } }); - var oauth2client_1 = require_oauth2client(); - Object.defineProperty(exports, "CodeChallengeMethod", { enumerable: true, get: function() { - return oauth2client_1.CodeChallengeMethod; - } }); - Object.defineProperty(exports, "OAuth2Client", { enumerable: true, get: function() { - return oauth2client_1.OAuth2Client; - } }); - Object.defineProperty(exports, "ClientAuthentication", { enumerable: true, get: function() { - return oauth2client_1.ClientAuthentication; - } }); - var loginticket_1 = require_loginticket(); - Object.defineProperty(exports, "LoginTicket", { enumerable: true, get: function() { - return loginticket_1.LoginTicket; - } }); - var refreshclient_1 = require_refreshclient(); - Object.defineProperty(exports, "UserRefreshClient", { enumerable: true, get: function() { - return refreshclient_1.UserRefreshClient; - } }); - var awsclient_1 = require_awsclient(); - Object.defineProperty(exports, "AwsClient", { enumerable: true, get: function() { - return awsclient_1.AwsClient; - } }); - var awsrequestsigner_1 = require_awsrequestsigner(); - Object.defineProperty(exports, "AwsRequestSigner", { enumerable: true, get: function() { - return awsrequestsigner_1.AwsRequestSigner; - } }); - var identitypoolclient_1 = require_identitypoolclient(); - Object.defineProperty(exports, "IdentityPoolClient", { enumerable: true, get: function() { - return identitypoolclient_1.IdentityPoolClient; - } }); - var externalclient_1 = require_externalclient(); - Object.defineProperty(exports, "ExternalAccountClient", { enumerable: true, get: function() { - return externalclient_1.ExternalAccountClient; - } }); - var baseexternalclient_1 = require_baseexternalclient(); - Object.defineProperty(exports, "BaseExternalAccountClient", { enumerable: true, get: function() { - return baseexternalclient_1.BaseExternalAccountClient; - } }); - var downscopedclient_1 = require_downscopedclient(); - Object.defineProperty(exports, "DownscopedClient", { enumerable: true, get: function() { - return downscopedclient_1.DownscopedClient; - } }); - var pluggable_auth_client_1 = require_pluggable_auth_client(); - Object.defineProperty(exports, "PluggableAuthClient", { enumerable: true, get: function() { - return pluggable_auth_client_1.PluggableAuthClient; - } }); - Object.defineProperty(exports, "ExecutableError", { enumerable: true, get: function() { - return pluggable_auth_client_1.ExecutableError; - } }); - var passthrough_1 = require_passthrough(); - Object.defineProperty(exports, "PassThroughClient", { enumerable: true, get: function() { - return passthrough_1.PassThroughClient; - } }); - var transporters_1 = require_transporters(); - Object.defineProperty(exports, "DefaultTransporter", { enumerable: true, get: function() { - return transporters_1.DefaultTransporter; - } }); - var auth = new googleauth_1.GoogleAuth; - exports.auth = auth; -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/src/types.js -var require_types21 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SpanKind = exports.Code = exports.LinkType = exports.Type = undefined; - var Type; - (function(Type2) { - Type2[Type2["TYPE_UNSPECIFIED"] = 0] = "TYPE_UNSPECIFIED"; - Type2[Type2["SENT"] = 1] = "SENT"; - Type2[Type2["RECEIVED"] = 2] = "RECEIVED"; - })(Type = exports.Type || (exports.Type = {})); - var LinkType; - (function(LinkType2) { - LinkType2[LinkType2["UNSPECIFIED"] = 0] = "UNSPECIFIED"; - LinkType2[LinkType2["CHILD_LINKED_SPAN"] = 1] = "CHILD_LINKED_SPAN"; - LinkType2[LinkType2["PARENT_LINKED_SPAN"] = 2] = "PARENT_LINKED_SPAN"; - })(LinkType = exports.LinkType || (exports.LinkType = {})); - var Code; - (function(Code2) { - Code2[Code2["OK"] = 0] = "OK"; - Code2[Code2["UNKNOWN"] = 2] = "UNKNOWN"; - })(Code = exports.Code || (exports.Code = {})); - var SpanKind4; - (function(SpanKind5) { - SpanKind5[SpanKind5["SPAN_KIND_UNSPECIFIED"] = 0] = "SPAN_KIND_UNSPECIFIED"; - SpanKind5[SpanKind5["INTERNAL"] = 1] = "INTERNAL"; - SpanKind5[SpanKind5["SERVER"] = 2] = "SERVER"; - SpanKind5[SpanKind5["CLIENT"] = 3] = "CLIENT"; - SpanKind5[SpanKind5["PRODUCER"] = 4] = "PRODUCER"; - SpanKind5[SpanKind5["CONSUMER"] = 5] = "CONSUMER"; - })(SpanKind4 = exports.SpanKind || (exports.SpanKind = {})); -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-resource-util@3.0.0+5036162a74e27054/node_modules/@google-cloud/opentelemetry-resource-util/build/src/detector/faas.js -var require_faas2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.faasCloudRegion = exports.faasInstance = exports.faasVersion = exports.faasName = exports.onCloudFunctions = exports.onCloudRun = undefined; - var metadata = require_src59(); - var ID_METADATA_ATTR = "id"; - var CLOUD_RUN_CONFIG_ENV = "K_CONFIGURATION"; - var CLOUD_FUNCTION_TARGET_ENV = "FUNCTION_TARGET"; - var FAAS_SERVICE_ENV = "K_SERVICE"; - var FAAS_REVISION_ENV = "K_REVISION"; - var REGION_METADATA_ATTR = "region"; - async function onCloudRun() { - return process.env[CLOUD_RUN_CONFIG_ENV] !== undefined; - } - exports.onCloudRun = onCloudRun; - async function onCloudFunctions() { - return process.env[CLOUD_FUNCTION_TARGET_ENV] !== undefined; - } - exports.onCloudFunctions = onCloudFunctions; - async function faasName() { - return lookupEnv(FAAS_SERVICE_ENV); - } - exports.faasName = faasName; - async function faasVersion() { - return lookupEnv(FAAS_REVISION_ENV); - } - exports.faasVersion = faasVersion; - async function faasInstance() { - const id = await metadata.instance(ID_METADATA_ATTR); - return id.toString(); - } - exports.faasInstance = faasInstance; - async function faasCloudRegion() { - const region2 = await metadata.instance(REGION_METADATA_ATTR); - return region2.slice(region2.lastIndexOf("/") + 1); - } - exports.faasCloudRegion = faasCloudRegion; - function lookupEnv(key) { - const val = process.env[key]; - if (val === undefined) { - throw new Error(`Environment variable ${key} not found`); - } - return val; - } -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-resource-util@3.0.0+5036162a74e27054/node_modules/@google-cloud/opentelemetry-resource-util/build/src/detector/gce.js -var require_gce2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.availabilityZoneAndRegion = exports.hostName = exports.hostId = exports.hostType = exports.onGce = undefined; - var api_1 = require_src(); - var metadata = require_src59(); - var MACHINE_TYPE_METADATA_ATTR = "machine-type"; - var ID_METADATA_ATTR = "id"; - var HOST_NAME_METADATA_ATTR = "name"; - var ZONE_METADATA_ATTR = "zone"; - async function onGce() { - try { - await metadata.instance(MACHINE_TYPE_METADATA_ATTR); - return true; - } catch (err) { - api_1.diag.debug("Could not fetch metadata attribute %s, assuming not on GCE. Error was %s", MACHINE_TYPE_METADATA_ATTR, err); - return false; - } - } - exports.onGce = onGce; - async function hostType() { - return metadata.instance(MACHINE_TYPE_METADATA_ATTR); - } - exports.hostType = hostType; - async function hostId() { - const id = await metadata.instance(ID_METADATA_ATTR); - return id.toString(); - } - exports.hostId = hostId; - async function hostName() { - return metadata.instance(HOST_NAME_METADATA_ATTR); - } - exports.hostName = hostName; - async function availabilityZoneAndRegion() { - const fullZone = await metadata.instance(ZONE_METADATA_ATTR); - const re = /projects\/\d+\/zones\/(?(?\w+-\w+)-\w+)/; - const { zone, region: region2 } = fullZone.match(re)?.groups ?? {}; - if (!zone || !region2) { - throw new Error(`zone was not in the expected format: projects/PROJECT_NUM/zones/COUNTRY-REGION-ZONE. Got ${fullZone}`); - } - return { zone, region: region2 }; - } - exports.availabilityZoneAndRegion = availabilityZoneAndRegion; -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-resource-util@3.0.0+5036162a74e27054/node_modules/@google-cloud/opentelemetry-resource-util/build/src/detector/gae.js -var require_gae2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.standardCloudRegion = exports.standardAvailabilityZone = exports.flexAvailabilityZoneAndRegion = exports.serviceInstance = exports.serviceVersion = exports.serviceName = exports.onAppEngine = exports.onAppEngineStandard = undefined; - var metadata = require_src59(); - var gce = require_gce2(); - var faas = require_faas2(); - var GAE_SERVICE_ENV = "GAE_SERVICE"; - var GAE_VERSION_ENV = "GAE_VERSION"; - var GAE_INSTANCE_ENV = "GAE_INSTANCE"; - var GAE_ENV = "GAE_ENV"; - var GAE_STANDARD = "standard"; - var ZONE_METADATA_ATTR = "zone"; - async function onAppEngineStandard() { - return process.env[GAE_ENV] === GAE_STANDARD; - } - exports.onAppEngineStandard = onAppEngineStandard; - async function onAppEngine() { - return process.env[GAE_SERVICE_ENV] !== undefined; - } - exports.onAppEngine = onAppEngine; - async function serviceName() { - return lookupEnv(GAE_SERVICE_ENV); - } - exports.serviceName = serviceName; - async function serviceVersion() { - return lookupEnv(GAE_VERSION_ENV); - } - exports.serviceVersion = serviceVersion; - async function serviceInstance() { - return lookupEnv(GAE_INSTANCE_ENV); - } - exports.serviceInstance = serviceInstance; - async function flexAvailabilityZoneAndRegion() { - return await gce.availabilityZoneAndRegion(); - } - exports.flexAvailabilityZoneAndRegion = flexAvailabilityZoneAndRegion; - async function standardAvailabilityZone() { - const zone = await metadata.instance(ZONE_METADATA_ATTR); - return zone.slice(zone.lastIndexOf("/") + 1); - } - exports.standardAvailabilityZone = standardAvailabilityZone; - async function standardCloudRegion() { - return await faas.faasCloudRegion(); - } - exports.standardCloudRegion = standardCloudRegion; - function lookupEnv(key) { - const val = process.env[key]; - if (val === undefined) { - throw new Error(`Environment variable ${key} not found`); - } - return val; - } -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-resource-util@3.0.0+5036162a74e27054/node_modules/@google-cloud/opentelemetry-resource-util/build/src/detector/gke.js -var require_gke2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.availabilityZoneOrRegion = exports.clusterName = exports.hostId = exports.onGke = undefined; - var metadata = require_src59(); - var gce = require_gce2(); - var KUBERNETES_SERVICE_HOST_ENV = "KUBERNETES_SERVICE_HOST"; - var CLUSTER_NAME_METADATA_ATTR = "attributes/cluster-name"; - var CLUSTER_LOCATION_METADATA_ATTR = "attributes/cluster-location"; - async function onGke() { - return process.env[KUBERNETES_SERVICE_HOST_ENV] !== undefined; - } - exports.onGke = onGke; - async function hostId() { - return await gce.hostId(); - } - exports.hostId = hostId; - async function clusterName() { - return metadata.instance(CLUSTER_NAME_METADATA_ATTR); - } - exports.clusterName = clusterName; - async function availabilityZoneOrRegion() { - const clusterLocation = await metadata.instance(CLUSTER_LOCATION_METADATA_ATTR); - switch (countChar(clusterLocation, "-")) { - case 1: - return { type: "region", value: clusterLocation }; - case 2: - return { type: "zone", value: clusterLocation }; - default: - throw new Error(`unrecognized format for cluster location: ${clusterLocation}`); - } - } - exports.availabilityZoneOrRegion = availabilityZoneOrRegion; - function countChar(s2, char) { - let count = 0; - for (let i = 0;i < s2.length; i++) { - if (s2[i] === char) { - count += 1; - } - } - return count; - } -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-resource-util@3.0.0+5036162a74e27054/node_modules/@google-cloud/opentelemetry-resource-util/build/src/detector/detector.js -var require_detector = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GcpDetectorSync = undefined; - var semantic_conventions_1 = require_src3(); - var resources_1 = require_src56(); - var metadata = require_src59(); - var faas = require_faas2(); - var gae = require_gae2(); - var gce = require_gce2(); - var gke = require_gke2(); - var ATTRIBUTE_NAMES = [ - semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM, - semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, - semantic_conventions_1.SEMRESATTRS_CLOUD_REGION, - semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME, - semantic_conventions_1.SEMRESATTRS_HOST_TYPE, - semantic_conventions_1.SEMRESATTRS_HOST_ID, - semantic_conventions_1.SEMRESATTRS_HOST_NAME, - semantic_conventions_1.SEMRESATTRS_CLOUD_PROVIDER, - semantic_conventions_1.SEMRESATTRS_CLOUD_ACCOUNT_ID, - semantic_conventions_1.SEMRESATTRS_FAAS_NAME, - semantic_conventions_1.SEMRESATTRS_FAAS_VERSION, - semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE - ]; - async function detect() { - if (!await metadata.isAvailable()) { - return (0, resources_1.emptyResource)(); - } - if (await gke.onGke()) { - return await gkeResource(); - } else if (await faas.onCloudFunctions()) { - return await cloudFunctionsResource(); - } else if (await faas.onCloudRun()) { - return await cloudRunResource(); - } else if (await gae.onAppEngine()) { - return await gaeResource(); - } else if (await gce.onGce()) { - return await gceResource(); - } - return (0, resources_1.emptyResource)(); - } - async function gkeResource() { - const [zoneOrRegion, k8sClusterName, hostId] = await Promise.all([ - gke.availabilityZoneOrRegion(), - gke.clusterName(), - gke.hostId() - ]); - return await makeResource({ - [semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM]: semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE, - [zoneOrRegion.type === "zone" ? semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE : semantic_conventions_1.SEMRESATTRS_CLOUD_REGION]: zoneOrRegion.value, - [semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME]: k8sClusterName, - [semantic_conventions_1.SEMRESATTRS_HOST_ID]: hostId - }); - } - async function cloudRunResource() { - const [faasName, faasVersion, faasInstance, faasCloudRegion] = await Promise.all([ - faas.faasName(), - faas.faasVersion(), - faas.faasInstance(), - faas.faasCloudRegion() - ]); - return await makeResource({ - [semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM]: semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_CLOUD_RUN, - [semantic_conventions_1.SEMRESATTRS_FAAS_NAME]: faasName, - [semantic_conventions_1.SEMRESATTRS_FAAS_VERSION]: faasVersion, - [semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE]: faasInstance, - [semantic_conventions_1.SEMRESATTRS_CLOUD_REGION]: faasCloudRegion - }); - } - async function cloudFunctionsResource() { - const [faasName, faasVersion, faasInstance, faasCloudRegion] = await Promise.all([ - faas.faasName(), - faas.faasVersion(), - faas.faasInstance(), - faas.faasCloudRegion() - ]); - return await makeResource({ - [semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM]: semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS, - [semantic_conventions_1.SEMRESATTRS_FAAS_NAME]: faasName, - [semantic_conventions_1.SEMRESATTRS_FAAS_VERSION]: faasVersion, - [semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE]: faasInstance, - [semantic_conventions_1.SEMRESATTRS_CLOUD_REGION]: faasCloudRegion - }); - } - async function gaeResource() { - let zone, region2; - if (await gae.onAppEngineStandard()) { - [zone, region2] = await Promise.all([ - gae.standardAvailabilityZone(), - gae.standardCloudRegion() - ]); - } else { - ({ zone, region: region2 } = await gce.availabilityZoneAndRegion()); - } - const [faasName, faasVersion, faasInstance] = await Promise.all([ - gae.serviceName(), - gae.serviceVersion(), - gae.serviceInstance() - ]); - return await makeResource({ - [semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM]: semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_APP_ENGINE, - [semantic_conventions_1.SEMRESATTRS_FAAS_NAME]: faasName, - [semantic_conventions_1.SEMRESATTRS_FAAS_VERSION]: faasVersion, - [semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE]: faasInstance, - [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE]: zone, - [semantic_conventions_1.SEMRESATTRS_CLOUD_REGION]: region2 - }); - } - async function gceResource() { - const [zoneAndRegion, hostType, hostId, hostName] = await Promise.all([ - gce.availabilityZoneAndRegion(), - gce.hostType(), - gce.hostId(), - gce.hostName() - ]); - return await makeResource({ - [semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM]: semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE, - [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE]: zoneAndRegion.zone, - [semantic_conventions_1.SEMRESATTRS_CLOUD_REGION]: zoneAndRegion.region, - [semantic_conventions_1.SEMRESATTRS_HOST_TYPE]: hostType, - [semantic_conventions_1.SEMRESATTRS_HOST_ID]: hostId, - [semantic_conventions_1.SEMRESATTRS_HOST_NAME]: hostName - }); - } - async function makeResource(attrs) { - const project2 = await metadata.project("project-id"); - return (0, resources_1.resourceFromAttributes)({ - [semantic_conventions_1.SEMRESATTRS_CLOUD_PROVIDER]: semantic_conventions_1.CLOUDPROVIDERVALUES_GCP, - [semantic_conventions_1.SEMRESATTRS_CLOUD_ACCOUNT_ID]: project2, - ...attrs - }); - } - - class GcpDetectorSync { - async _asyncAttributes() { - return (await detect()).attributes; - } - detect() { - const asyncAttributes = this._asyncAttributes(); - const attributes = {}; - ATTRIBUTE_NAMES.forEach((name) => { - attributes[name] = asyncAttributes.then((data) => data[name]); - }); - return { attributes }; - } - } - exports.GcpDetectorSync = GcpDetectorSync; -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-resource-util@3.0.0+5036162a74e27054/node_modules/@google-cloud/opentelemetry-resource-util/build/src/index.js -var require_src117 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.GcpDetectorSync = exports.mapOtelResourceToMonitoredResource = undefined; - var semantic_conventions_1 = require_src3(); - var AWS_ACCOUNT = "aws_account"; - var AWS_EC2_INSTANCE = "aws_ec2_instance"; - var CLOUD_FUNCTION = "cloud_function"; - var CLOUD_RUN_REVISION = "cloud_run_revision"; - var CLUSTER_NAME = "cluster_name"; - var CONFIGURATION_NAME = "configuration_name"; - var CONTAINER_NAME = "container_name"; - var FUNCTION_NAME = "function_name"; - var GAE_INSTANCE = "gae_instance"; - var GAE_MODULE_ID = "module_id"; - var GAE_VERSION_ID = "version_id"; - var GCE_INSTANCE = "gce_instance"; - var GENERIC_NODE = "generic_node"; - var GENERIC_TASK = "generic_task"; - var INSTANCE_ID = "instance_id"; - var JOB = "job"; - var K8S_CLUSTER = "k8s_cluster"; - var K8S_CONTAINER = "k8s_container"; - var K8S_NODE = "k8s_node"; - var K8S_POD = "k8s_pod"; - var LOCATION = "location"; - var NAMESPACE = "namespace"; - var NAMESPACE_NAME = "namespace_name"; - var NODE_ID = "node_id"; - var NODE_NAME = "node_name"; - var POD_NAME = "pod_name"; - var REGION = "region"; - var REVISION_NAME = "revision_name"; - var SERVICE_NAME = "service_name"; - var TASK_ID = "task_id"; - var ZONE = "zone"; - var UNKNOWN_SERVICE_PREFIX = "unknown_service"; - var MAPPINGS = { - [GCE_INSTANCE]: { - [ZONE]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE] - }, - [INSTANCE_ID]: { otelKeys: [semantic_conventions_1.SEMRESATTRS_HOST_ID] } - }, - [K8S_CONTAINER]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [CLUSTER_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME] - }, - [NAMESPACE_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_NAMESPACE_NAME] - }, - [POD_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_POD_NAME] - }, - [CONTAINER_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_CONTAINER_NAME] - } - }, - [K8S_POD]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [CLUSTER_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME] - }, - [NAMESPACE_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_NAMESPACE_NAME] - }, - [POD_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_POD_NAME] - } - }, - [K8S_NODE]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [CLUSTER_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME] - }, - [NODE_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_NODE_NAME] - } - }, - [K8S_CLUSTER]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [CLUSTER_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME] - } - }, - [AWS_EC2_INSTANCE]: { - [INSTANCE_ID]: { otelKeys: [semantic_conventions_1.SEMRESATTRS_HOST_ID] }, - [REGION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [AWS_ACCOUNT]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_ACCOUNT_ID] - } - }, - [CLOUD_RUN_REVISION]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [SERVICE_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_NAME] - }, - [CONFIGURATION_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_NAME] - }, - [REVISION_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_VERSION] - } - }, - [CLOUD_FUNCTION]: { - [REGION]: { otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] }, - [FUNCTION_NAME]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_NAME] - } - }, - [GAE_INSTANCE]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION] - }, - [GAE_MODULE_ID]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_NAME] - }, - [GAE_VERSION_ID]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_VERSION] - }, - [INSTANCE_ID]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE] - } - }, - [GENERIC_TASK]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION], - fallback: "global" - }, - [NAMESPACE]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_SERVICE_NAMESPACE] - }, - [JOB]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_SERVICE_NAME, semantic_conventions_1.SEMRESATTRS_FAAS_NAME] - }, - [TASK_ID]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_SERVICE_INSTANCE_ID, semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE] - } - }, - [GENERIC_NODE]: { - [LOCATION]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE, semantic_conventions_1.SEMRESATTRS_CLOUD_REGION], - fallback: "global" - }, - [NAMESPACE]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_SERVICE_NAMESPACE] - }, - [NODE_ID]: { - otelKeys: [semantic_conventions_1.SEMRESATTRS_HOST_ID, semantic_conventions_1.SEMRESATTRS_HOST_NAME] - } - } - }; - function mapOtelResourceToMonitoredResource(resource) { - const attrs = resource.attributes; - const platform = attrs[semantic_conventions_1.SEMRESATTRS_CLOUD_PLATFORM]; - let mr; - if (platform === semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE) { - mr = createMonitoredResource(GCE_INSTANCE, attrs); - } else if (platform === semantic_conventions_1.CLOUDPLATFORMVALUES_GCP_APP_ENGINE) { - mr = createMonitoredResource(GAE_INSTANCE, attrs); - } else if (platform === semantic_conventions_1.CLOUDPLATFORMVALUES_AWS_EC2) { - mr = createMonitoredResource(AWS_EC2_INSTANCE, attrs); - } else if (semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME in attrs) { - if (semantic_conventions_1.SEMRESATTRS_K8S_CONTAINER_NAME in attrs) { - mr = createMonitoredResource(K8S_CONTAINER, attrs); - } else if (semantic_conventions_1.SEMRESATTRS_K8S_POD_NAME in attrs) { - mr = createMonitoredResource(K8S_POD, attrs); - } else if (semantic_conventions_1.SEMRESATTRS_K8S_NODE_NAME in attrs) { - mr = createMonitoredResource(K8S_NODE, attrs); - } else { - mr = createMonitoredResource(K8S_CLUSTER, attrs); - } - } else if (((semantic_conventions_1.SEMRESATTRS_SERVICE_NAME in attrs) || (semantic_conventions_1.SEMRESATTRS_FAAS_NAME in attrs)) && ((semantic_conventions_1.SEMRESATTRS_SERVICE_INSTANCE_ID in attrs) || (semantic_conventions_1.SEMRESATTRS_FAAS_INSTANCE in attrs))) { - mr = createMonitoredResource(GENERIC_TASK, attrs); - } else { - mr = createMonitoredResource(GENERIC_NODE, attrs); - } - return mr; - } - exports.mapOtelResourceToMonitoredResource = mapOtelResourceToMonitoredResource; - function createMonitoredResource(monitoredResourceType, resourceAttrs) { - const mapping = MAPPINGS[monitoredResourceType]; - const labels = {}; - Object.entries(mapping).map(([mrKey, mapConfig]) => { - let mrValue; - for (const otelKey of mapConfig.otelKeys) { - if (otelKey in resourceAttrs && !resourceAttrs[otelKey]?.toString()?.startsWith(UNKNOWN_SERVICE_PREFIX)) { - mrValue = resourceAttrs[otelKey]; - break; - } - } - if (mrValue === undefined && mapConfig.otelKeys.includes(semantic_conventions_1.SEMRESATTRS_SERVICE_NAME)) { - mrValue = resourceAttrs[semantic_conventions_1.SEMRESATTRS_SERVICE_NAME]; - } - if (mrValue === undefined) { - mrValue = mapConfig.fallback ?? ""; - } - if (typeof mrValue !== "string") { - mrValue = JSON.stringify(mrValue); - } - labels[mrKey] = mrValue; - }); - return { - type: monitoredResourceType, - labels - }; - } - var detector_1 = require_detector(); - Object.defineProperty(exports, "GcpDetectorSync", { enumerable: true, get: function() { - return detector_1.GcpDetectorSync; - } }); -}); - -// ../../../../node_modules/.bun/@opentelemetry+core@2.2.0+460773ef8ff1e07c/node_modules/@opentelemetry/core/package.json -var require_package5 = __commonJS((exports, module) => { - module.exports = { - name: "@opentelemetry/core", - version: "2.2.0", - description: "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", - main: "build/src/index.js", - module: "build/esm/index.js", - esnext: "build/esnext/index.js", - browser: { - "./src/platform/index.ts": "./src/platform/browser/index.ts", - "./build/esm/platform/index.js": "./build/esm/platform/browser/index.js", - "./build/esnext/platform/index.js": "./build/esnext/platform/browser/index.js", - "./build/src/platform/index.js": "./build/src/platform/browser/index.js" - }, - types: "build/src/index.d.ts", - repository: "open-telemetry/opentelemetry-js", - scripts: { - prepublishOnly: "npm run compile", - compile: "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - clean: "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - test: "nyc mocha 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:browser": "karma start --single-run", - tdd: "npm run tdd:node", - "tdd:node": "npm run test -- --watch-extensions ts --watch", - "tdd:browser": "karma start", - lint: "eslint . --ext .ts", - "lint:fix": "eslint . --ext .ts --fix", - version: "node ../../scripts/version-update.js", - watch: "tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - prewatch: "npm run precompile", - "peer-api-check": "node ../../scripts/peer-api-check.js", - "align-api-deps": "node ../../scripts/align-api-deps.js" - }, - keywords: [ - "opentelemetry", - "nodejs", - "browser", - "tracing", - "profiling", - "metrics", - "stats" - ], - author: "OpenTelemetry Authors", - license: "Apache-2.0", - engines: { - node: "^18.19.0 || >=20.6.0" - }, - files: [ - "build/esm/**/*.js", - "build/esm/**/*.js.map", - "build/esm/**/*.d.ts", - "build/esnext/**/*.js", - "build/esnext/**/*.js.map", - "build/esnext/**/*.d.ts", - "build/src/**/*.js", - "build/src/**/*.js.map", - "build/src/**/*.d.ts", - "doc", - "LICENSE", - "README.md" - ], - publishConfig: { - access: "public" - }, - devDependencies: { - "@opentelemetry/api": ">=1.0.0 <1.10.0", - "@types/mocha": "10.0.10", - "@types/node": "18.6.5", - "@types/sinon": "17.0.4", - "@types/webpack-env": "1.16.3", - "babel-plugin-istanbul": "7.0.1", - karma: "6.4.4", - "karma-chrome-launcher": "3.1.0", - "karma-coverage": "2.2.1", - "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.36", - "karma-webpack": "5.0.1", - mocha: "11.7.4", - nyc: "17.1.0", - sinon: "18.0.1", - "ts-loader": "9.5.4", - typescript: "5.0.4", - webpack: "5.101.3" - }, - peerDependencies: { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - }, - dependencies: { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - homepage: "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", - sideEffects: false, - gitHead: "fb6476d8243ac8dcaaea74130b9c50c43938275c" - }; -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/src/version.js -var require_version57 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OT_VERSION = exports.VERSION = undefined; - exports.VERSION = "3.0.0"; - function getOtelVersion() { - try { - return require_package5().version; - } catch (e) { - return "unknown"; - } - } - exports.OT_VERSION = getOtelVersion(); -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/src/transform.js -var require_transform3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getReadableSpanTransformer = undefined; - var ot = require_src(); - var types_1 = require_types21(); - var opentelemetry_resource_util_1 = require_src117(); - var version_1 = require_version57(); - var AGENT_LABEL_KEY = "g.co/agent"; - var AGENT_LABEL_VALUE = `opentelemetry-js ${version_1.OT_VERSION}; google-cloud-trace-exporter ${version_1.VERSION}`; - function getReadableSpanTransformer(projectId, resourceFilter, stringifyArrayAttributes) { - return (span) => { - const attributes = mergeAttributes(transformAttributes({ - ...span.attributes, - [AGENT_LABEL_KEY]: AGENT_LABEL_VALUE - }, stringifyArrayAttributes), transformResourceToAttributes(span.resource, projectId, resourceFilter, stringifyArrayAttributes)); - const out = { - attributes, - displayName: stringToTruncatableString(span.name), - links: { - link: span.links.map(getLinkTransformer(stringifyArrayAttributes)) - }, - endTime: transformTime(span.endTime), - startTime: transformTime(span.startTime), - name: `projects/${projectId}/traces/${span.spanContext().traceId}/spans/${span.spanContext().spanId}`, - spanKind: transformKind(span.kind), - spanId: span.spanContext().spanId, - sameProcessAsParentSpan: { value: !span.spanContext().isRemote }, - status: transformStatus(span.status), - timeEvents: { - timeEvent: span.events.map((e) => ({ - time: transformTime(e.time), - annotation: { - attributes: transformAttributes(e.attributes ?? {}, stringifyArrayAttributes), - description: stringToTruncatableString(e.name) - } - })) - } - }; - if (span.parentSpanContext?.spanId) { - out.parentSpanId = span.parentSpanContext?.spanId; - } - return out; - }; - } - exports.getReadableSpanTransformer = getReadableSpanTransformer; - function transformStatus(status) { - switch (status.code) { - case ot.SpanStatusCode.UNSET: - return; - case ot.SpanStatusCode.OK: - return { code: types_1.Code.OK }; - case ot.SpanStatusCode.ERROR: - return { code: types_1.Code.UNKNOWN, message: status.message }; - default: { - exhaust(status.code); - return { code: types_1.Code.UNKNOWN, message: status.message }; - } - } - } - function transformKind(kind) { - switch (kind) { - case ot.SpanKind.INTERNAL: - return types_1.SpanKind.INTERNAL; - case ot.SpanKind.SERVER: - return types_1.SpanKind.SERVER; - case ot.SpanKind.CLIENT: - return types_1.SpanKind.CLIENT; - case ot.SpanKind.PRODUCER: - return types_1.SpanKind.PRODUCER; - case ot.SpanKind.CONSUMER: - return types_1.SpanKind.CONSUMER; - default: { - exhaust(kind); - return types_1.SpanKind.SPAN_KIND_UNSPECIFIED; - } - } - } - function exhaust(switchValue) { - return switchValue; - } - function transformTime(time3) { - return { - seconds: time3[0], - nanos: time3[1] - }; - } - function getLinkTransformer(stringifyArrayAttributes) { - return (link) => ({ - attributes: transformAttributes(link.attributes ?? {}, stringifyArrayAttributes), - spanId: link.context.spanId, - traceId: link.context.traceId, - type: types_1.LinkType.UNSPECIFIED - }); - } - function transformAttributes(attributes, stringifyArrayAttributes) { - const changedAttributes = transformAttributeNames(attributes); - return spanAttributesToGCTAttributes(changedAttributes, stringifyArrayAttributes); - } - function spanAttributesToGCTAttributes(attributes, stringifyArrayAttributes) { - const attributeMap = transformAttributeValues(attributes, stringifyArrayAttributes); - return { - attributeMap, - droppedAttributesCount: Object.keys(attributes).length - Object.keys(attributeMap).length - }; - } - function mergeAttributes(...attributeList) { - const attributesOut = { - attributeMap: {}, - droppedAttributesCount: 0 - }; - attributeList.forEach((attributes) => { - Object.assign(attributesOut.attributeMap, attributes.attributeMap); - attributesOut.droppedAttributesCount += attributes.droppedAttributesCount ?? 0; - }); - return attributesOut; - } - function transformResourceToAttributes(resource, projectId, resourceFilter, stringifyArrayAttributes) { - const monitoredResource = (0, opentelemetry_resource_util_1.mapOtelResourceToMonitoredResource)(resource); - const attributes = {}; - if (resourceFilter) { - Object.keys(resource.attributes).filter((key) => resourceFilter.test(key)).forEach((key) => { - attributes[key] = resource.attributes[key]; - }); - } - if (monitoredResource.type !== "global") { - Object.keys(monitoredResource.labels).forEach((labelKey) => { - const key = `g.co/r/${monitoredResource.type}/${labelKey}`; - attributes[key] = monitoredResource.labels[labelKey]; - }); - } - return spanAttributesToGCTAttributes(attributes, stringifyArrayAttributes); - } - function transformAttributeValues(attributes, stringifyArrayAttributes) { - const out = {}; - for (const [key, value] of Object.entries(attributes)) { - if (value === undefined) { - continue; - } - const attributeValue = valueToAttributeValue(value, stringifyArrayAttributes); - if (attributeValue !== undefined) { - out[key] = attributeValue; - } - } - return out; - } - function stringToTruncatableString(value) { - return { value }; - } - function valueToAttributeValue(value, stringifyArrayAttributes) { - switch (typeof value) { - case "number": - return { intValue: String(Math.round(value)) }; - case "boolean": - return { boolValue: value }; - case "string": - return { stringValue: stringToTruncatableString(value) }; - default: - if (stringifyArrayAttributes) { - return { stringValue: stringToTruncatableString(JSON.stringify(value)) }; - } - return; - } - } - var HTTP_ATTRIBUTE_MAPPING = { - "http.method": "/http/method", - "http.url": "/http/url", - "http.host": "/http/host", - "http.scheme": "/http/client_protocol", - "http.status_code": "/http/status_code", - "http.user_agent": "/http/user_agent", - "http.request_content_length": "/http/request/size", - "http.response_content_length": "/http/response/size", - "http.route": "/http/route" - }; - function transformAttributeNames(attributes) { - const out = {}; - for (const [key, value] of Object.entries(attributes)) { - if (HTTP_ATTRIBUTE_MAPPING[key]) { - out[HTTP_ATTRIBUTE_MAPPING[key]] = value; - } else { - out[key] = value; - } - } - return out; - } -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/protos/protos.json -var require_protos = __commonJS((exports, module) => { - module.exports = { - nested: { - google: { - nested: { - devtools: { - nested: { - cloudtrace: { - nested: { - v2: { - options: { - csharp_namespace: "Google.Cloud.Trace.V2", - go_package: "cloud.google.com/go/trace/apiv2/tracepb;tracepb", - java_multiple_files: true, - java_outer_classname: "TraceProto", - java_package: "com.google.devtools.cloudtrace.v2", - php_namespace: "Google\\Cloud\\Trace\\V2", - ruby_package: "Google::Cloud::Trace::V2" - }, - nested: { - TraceService: { - options: { - "(google.api.default_host)": "cloudtrace.googleapis.com", - "(google.api.oauth_scopes)": "https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/trace.append" - }, - methods: { - BatchWriteSpans: { - requestType: "BatchWriteSpansRequest", - responseType: "google.protobuf.Empty", - options: { - "(google.api.http).post": "/v2/{name=projects/*}/traces:batchWrite", - "(google.api.http).body": "*", - "(google.api.method_signature)": "name,spans" - }, - parsedOptions: [ - { - "(google.api.http)": { - post: "/v2/{name=projects/*}/traces:batchWrite", - body: "*" - } - }, - { - "(google.api.method_signature)": "name,spans" - } - ] - }, - CreateSpan: { - requestType: "Span", - responseType: "Span", - options: { - "(google.api.http).post": "/v2/{name=projects/*/traces/*/spans/*}", - "(google.api.http).body": "*" - }, - parsedOptions: [ - { - "(google.api.http)": { - post: "/v2/{name=projects/*/traces/*/spans/*}", - body: "*" - } - } - ] - } - } - }, - BatchWriteSpansRequest: { - fields: { - name: { - type: "string", - id: 1, - options: { - "(google.api.field_behavior)": "REQUIRED", - "(google.api.resource_reference).type": "cloudresourcemanager.googleapis.com/Project" - } - }, - spans: { - rule: "repeated", - type: "Span", - id: 2, - options: { - "(google.api.field_behavior)": "REQUIRED" - } - } - } - }, - Span: { - options: { - "(google.api.resource).type": "cloudtrace.googleapis.com/Span", - "(google.api.resource).pattern": "projects/{project}/traces/{trace}/spans/{span}" - }, - fields: { - name: { - type: "string", - id: 1, - options: { - "(google.api.field_behavior)": "REQUIRED" - } - }, - spanId: { - type: "string", - id: 2, - options: { - "(google.api.field_behavior)": "REQUIRED" - } - }, - parentSpanId: { - type: "string", - id: 3 - }, - displayName: { - type: "TruncatableString", - id: 4, - options: { - "(google.api.field_behavior)": "REQUIRED" - } - }, - startTime: { - type: "google.protobuf.Timestamp", - id: 5, - options: { - "(google.api.field_behavior)": "REQUIRED" - } - }, - endTime: { - type: "google.protobuf.Timestamp", - id: 6, - options: { - "(google.api.field_behavior)": "REQUIRED" - } - }, - attributes: { - type: "Attributes", - id: 7 - }, - stackTrace: { - type: "StackTrace", - id: 8 - }, - timeEvents: { - type: "TimeEvents", - id: 9 - }, - links: { - type: "Links", - id: 10 - }, - status: { - type: "google.rpc.Status", - id: 11, - options: { - "(google.api.field_behavior)": "OPTIONAL" - } - }, - sameProcessAsParentSpan: { - type: "google.protobuf.BoolValue", - id: 12, - options: { - "(google.api.field_behavior)": "OPTIONAL" - } - }, - childSpanCount: { - type: "google.protobuf.Int32Value", - id: 13, - options: { - "(google.api.field_behavior)": "OPTIONAL" - } - }, - spanKind: { - type: "SpanKind", - id: 14, - options: { - "(google.api.field_behavior)": "OPTIONAL" - } - } - }, - nested: { - Attributes: { - fields: { - attributeMap: { - keyType: "string", - type: "AttributeValue", - id: 1 - }, - droppedAttributesCount: { - type: "int32", - id: 2 - } - } - }, - TimeEvent: { - oneofs: { - value: { - oneof: [ - "annotation", - "messageEvent" - ] - } - }, - fields: { - time: { - type: "google.protobuf.Timestamp", - id: 1 - }, - annotation: { - type: "Annotation", - id: 2 - }, - messageEvent: { - type: "MessageEvent", - id: 3 - } - }, - nested: { - Annotation: { - fields: { - description: { - type: "TruncatableString", - id: 1 - }, - attributes: { - type: "Attributes", - id: 2 - } - } - }, - MessageEvent: { - fields: { - type: { - type: "Type", - id: 1 - }, - id: { - type: "int64", - id: 2 - }, - uncompressedSizeBytes: { - type: "int64", - id: 3 - }, - compressedSizeBytes: { - type: "int64", - id: 4 - } - }, - nested: { - Type: { - values: { - TYPE_UNSPECIFIED: 0, - SENT: 1, - RECEIVED: 2 - } - } - } - } - } - }, - TimeEvents: { - fields: { - timeEvent: { - rule: "repeated", - type: "TimeEvent", - id: 1 - }, - droppedAnnotationsCount: { - type: "int32", - id: 2 - }, - droppedMessageEventsCount: { - type: "int32", - id: 3 - } - } - }, - Link: { - fields: { - traceId: { - type: "string", - id: 1 - }, - spanId: { - type: "string", - id: 2 - }, - type: { - type: "Type", - id: 3 - }, - attributes: { - type: "Attributes", - id: 4 - } - }, - nested: { - Type: { - values: { - TYPE_UNSPECIFIED: 0, - CHILD_LINKED_SPAN: 1, - PARENT_LINKED_SPAN: 2 - } - } - } - }, - Links: { - fields: { - link: { - rule: "repeated", - type: "Link", - id: 1 - }, - droppedLinksCount: { - type: "int32", - id: 2 - } - } - }, - SpanKind: { - values: { - SPAN_KIND_UNSPECIFIED: 0, - INTERNAL: 1, - SERVER: 2, - CLIENT: 3, - PRODUCER: 4, - CONSUMER: 5 - } - } - } - }, - AttributeValue: { - oneofs: { - value: { - oneof: [ - "stringValue", - "intValue", - "boolValue" - ] - } - }, - fields: { - stringValue: { - type: "TruncatableString", - id: 1 - }, - intValue: { - type: "int64", - id: 2 - }, - boolValue: { - type: "bool", - id: 3 - } - } - }, - StackTrace: { - fields: { - stackFrames: { - type: "StackFrames", - id: 1 - }, - stackTraceHashId: { - type: "int64", - id: 2 - } - }, - nested: { - StackFrame: { - fields: { - functionName: { - type: "TruncatableString", - id: 1 - }, - originalFunctionName: { - type: "TruncatableString", - id: 2 - }, - fileName: { - type: "TruncatableString", - id: 3 - }, - lineNumber: { - type: "int64", - id: 4 - }, - columnNumber: { - type: "int64", - id: 5 - }, - loadModule: { - type: "Module", - id: 6 - }, - sourceVersion: { - type: "TruncatableString", - id: 7 - } - } - }, - StackFrames: { - fields: { - frame: { - rule: "repeated", - type: "StackFrame", - id: 1 - }, - droppedFramesCount: { - type: "int32", - id: 2 - } - } - } - } - }, - Module: { - fields: { - module: { - type: "TruncatableString", - id: 1 - }, - buildId: { - type: "TruncatableString", - id: 2 - } - } - }, - TruncatableString: { - fields: { - value: { - type: "string", - id: 1 - }, - truncatedByteCount: { - type: "int32", - id: 2 - } - } - } - } - } - } - } - } - }, - api: { - options: { - go_package: "google.golang.org/genproto/googleapis/api/annotations;annotations", - java_multiple_files: true, - java_outer_classname: "ResourceProto", - java_package: "com.google.api", - objc_class_prefix: "GAPI" - }, - nested: { - http: { - type: "HttpRule", - id: 72295728, - extend: "google.protobuf.MethodOptions" - }, - Http: { - fields: { - rules: { - rule: "repeated", - type: "HttpRule", - id: 1 - }, - fullyDecodeReservedExpansion: { - type: "bool", - id: 2 - } - } - }, - HttpRule: { - oneofs: { - pattern: { - oneof: [ - "get", - "put", - "post", - "delete", - "patch", - "custom" - ] - } - }, - fields: { - selector: { - type: "string", - id: 1 - }, - get: { - type: "string", - id: 2 - }, - put: { - type: "string", - id: 3 - }, - post: { - type: "string", - id: 4 - }, - delete: { - type: "string", - id: 5 - }, - patch: { - type: "string", - id: 6 - }, - custom: { - type: "CustomHttpPattern", - id: 8 - }, - body: { - type: "string", - id: 7 - }, - responseBody: { - type: "string", - id: 12 - }, - additionalBindings: { - rule: "repeated", - type: "HttpRule", - id: 11 - } - } - }, - CustomHttpPattern: { - fields: { - kind: { - type: "string", - id: 1 - }, - path: { - type: "string", - id: 2 - } - } - }, - methodSignature: { - rule: "repeated", - type: "string", - id: 1051, - extend: "google.protobuf.MethodOptions" - }, - defaultHost: { - type: "string", - id: 1049, - extend: "google.protobuf.ServiceOptions" - }, - oauthScopes: { - type: "string", - id: 1050, - extend: "google.protobuf.ServiceOptions" - }, - apiVersion: { - type: "string", - id: 525000001, - extend: "google.protobuf.ServiceOptions" - }, - CommonLanguageSettings: { - fields: { - referenceDocsUri: { - type: "string", - id: 1, - options: { - deprecated: true - } - }, - destinations: { - rule: "repeated", - type: "ClientLibraryDestination", - id: 2 - }, - selectiveGapicGeneration: { - type: "SelectiveGapicGeneration", - id: 3 - } - } - }, - ClientLibrarySettings: { - fields: { - version: { - type: "string", - id: 1 - }, - launchStage: { - type: "LaunchStage", - id: 2 - }, - restNumericEnums: { - type: "bool", - id: 3 - }, - javaSettings: { - type: "JavaSettings", - id: 21 - }, - cppSettings: { - type: "CppSettings", - id: 22 - }, - phpSettings: { - type: "PhpSettings", - id: 23 - }, - pythonSettings: { - type: "PythonSettings", - id: 24 - }, - nodeSettings: { - type: "NodeSettings", - id: 25 - }, - dotnetSettings: { - type: "DotnetSettings", - id: 26 - }, - rubySettings: { - type: "RubySettings", - id: 27 - }, - goSettings: { - type: "GoSettings", - id: 28 - } - } - }, - Publishing: { - fields: { - methodSettings: { - rule: "repeated", - type: "MethodSettings", - id: 2 - }, - newIssueUri: { - type: "string", - id: 101 - }, - documentationUri: { - type: "string", - id: 102 - }, - apiShortName: { - type: "string", - id: 103 - }, - githubLabel: { - type: "string", - id: 104 - }, - codeownerGithubTeams: { - rule: "repeated", - type: "string", - id: 105 - }, - docTagPrefix: { - type: "string", - id: 106 - }, - organization: { - type: "ClientLibraryOrganization", - id: 107 - }, - librarySettings: { - rule: "repeated", - type: "ClientLibrarySettings", - id: 109 - }, - protoReferenceDocumentationUri: { - type: "string", - id: 110 - }, - restReferenceDocumentationUri: { - type: "string", - id: 111 - } - } - }, - JavaSettings: { - fields: { - libraryPackage: { - type: "string", - id: 1 - }, - serviceClassNames: { - keyType: "string", - type: "string", - id: 2 - }, - common: { - type: "CommonLanguageSettings", - id: 3 - } - } - }, - CppSettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - } - } - }, - PhpSettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - } - } - }, - PythonSettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - }, - experimentalFeatures: { - type: "ExperimentalFeatures", - id: 2 - } - }, - nested: { - ExperimentalFeatures: { - fields: { - restAsyncIoEnabled: { - type: "bool", - id: 1 - }, - protobufPythonicTypesEnabled: { - type: "bool", - id: 2 - }, - unversionedPackageDisabled: { - type: "bool", - id: 3 - } - } - } - } - }, - NodeSettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - } - } - }, - DotnetSettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - }, - renamedServices: { - keyType: "string", - type: "string", - id: 2 - }, - renamedResources: { - keyType: "string", - type: "string", - id: 3 - }, - ignoredResources: { - rule: "repeated", - type: "string", - id: 4 - }, - forcedNamespaceAliases: { - rule: "repeated", - type: "string", - id: 5 - }, - handwrittenSignatures: { - rule: "repeated", - type: "string", - id: 6 - } - } - }, - RubySettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - } - } - }, - GoSettings: { - fields: { - common: { - type: "CommonLanguageSettings", - id: 1 - }, - renamedServices: { - keyType: "string", - type: "string", - id: 2 - } - } - }, - MethodSettings: { - fields: { - selector: { - type: "string", - id: 1 - }, - longRunning: { - type: "LongRunning", - id: 2 - }, - autoPopulatedFields: { - rule: "repeated", - type: "string", - id: 3 - } - }, - nested: { - LongRunning: { - fields: { - initialPollDelay: { - type: "google.protobuf.Duration", - id: 1 - }, - pollDelayMultiplier: { - type: "float", - id: 2 - }, - maxPollDelay: { - type: "google.protobuf.Duration", - id: 3 - }, - totalPollTimeout: { - type: "google.protobuf.Duration", - id: 4 - } - } - } - } - }, - ClientLibraryOrganization: { - values: { - CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED: 0, - CLOUD: 1, - ADS: 2, - PHOTOS: 3, - STREET_VIEW: 4, - SHOPPING: 5, - GEO: 6, - GENERATIVE_AI: 7 - } - }, - ClientLibraryDestination: { - values: { - CLIENT_LIBRARY_DESTINATION_UNSPECIFIED: 0, - GITHUB: 10, - PACKAGE_MANAGER: 20 - } - }, - SelectiveGapicGeneration: { - fields: { - methods: { - rule: "repeated", - type: "string", - id: 1 - }, - generateOmittedAsInternal: { - type: "bool", - id: 2 - } - } - }, - LaunchStage: { - values: { - LAUNCH_STAGE_UNSPECIFIED: 0, - UNIMPLEMENTED: 6, - PRELAUNCH: 7, - EARLY_ACCESS: 1, - ALPHA: 2, - BETA: 3, - GA: 4, - DEPRECATED: 5 - } - }, - fieldBehavior: { - rule: "repeated", - type: "google.api.FieldBehavior", - id: 1052, - extend: "google.protobuf.FieldOptions", - options: { - packed: false - } - }, - FieldBehavior: { - values: { - FIELD_BEHAVIOR_UNSPECIFIED: 0, - OPTIONAL: 1, - REQUIRED: 2, - OUTPUT_ONLY: 3, - INPUT_ONLY: 4, - IMMUTABLE: 5, - UNORDERED_LIST: 6, - NON_EMPTY_DEFAULT: 7, - IDENTIFIER: 8 - } - }, - resourceReference: { - type: "google.api.ResourceReference", - id: 1055, - extend: "google.protobuf.FieldOptions" - }, - resourceDefinition: { - rule: "repeated", - type: "google.api.ResourceDescriptor", - id: 1053, - extend: "google.protobuf.FileOptions" - }, - resource: { - type: "google.api.ResourceDescriptor", - id: 1053, - extend: "google.protobuf.MessageOptions" - }, - ResourceDescriptor: { - fields: { - type: { - type: "string", - id: 1 - }, - pattern: { - rule: "repeated", - type: "string", - id: 2 - }, - nameField: { - type: "string", - id: 3 - }, - history: { - type: "History", - id: 4 - }, - plural: { - type: "string", - id: 5 - }, - singular: { - type: "string", - id: 6 - }, - style: { - rule: "repeated", - type: "Style", - id: 10 - } - }, - nested: { - History: { - values: { - HISTORY_UNSPECIFIED: 0, - ORIGINALLY_SINGLE_PATTERN: 1, - FUTURE_MULTI_PATTERN: 2 - } - }, - Style: { - values: { - STYLE_UNSPECIFIED: 0, - DECLARATIVE_FRIENDLY: 1 - } - } - } - }, - ResourceReference: { - fields: { - type: { - type: "string", - id: 1 - }, - childType: { - type: "string", - id: 2 - } - } - } - } - }, - protobuf: { - options: { - go_package: "google.golang.org/protobuf/types/descriptorpb", - java_package: "com.google.protobuf", - java_outer_classname: "DescriptorProtos", - csharp_namespace: "Google.Protobuf.Reflection", - objc_class_prefix: "GPB", - cc_enable_arenas: true, - optimize_for: "SPEED" - }, - nested: { - FileDescriptorSet: { - edition: "proto2", - fields: { - file: { - rule: "repeated", - type: "FileDescriptorProto", - id: 1 - } - }, - extensions: [ - [ - 536000000, - 536000000 - ] - ] - }, - Edition: { - edition: "proto2", - values: { - EDITION_UNKNOWN: 0, - EDITION_LEGACY: 900, - EDITION_PROTO2: 998, - EDITION_PROTO3: 999, - EDITION_2023: 1000, - EDITION_2024: 1001, - EDITION_1_TEST_ONLY: 1, - EDITION_2_TEST_ONLY: 2, - EDITION_99997_TEST_ONLY: 99997, - EDITION_99998_TEST_ONLY: 99998, - EDITION_99999_TEST_ONLY: 99999, - EDITION_MAX: 2147483647 - } - }, - FileDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - package: { - type: "string", - id: 2 - }, - dependency: { - rule: "repeated", - type: "string", - id: 3 - }, - publicDependency: { - rule: "repeated", - type: "int32", - id: 10 - }, - weakDependency: { - rule: "repeated", - type: "int32", - id: 11 - }, - optionDependency: { - rule: "repeated", - type: "string", - id: 15 - }, - messageType: { - rule: "repeated", - type: "DescriptorProto", - id: 4 - }, - enumType: { - rule: "repeated", - type: "EnumDescriptorProto", - id: 5 - }, - service: { - rule: "repeated", - type: "ServiceDescriptorProto", - id: 6 - }, - extension: { - rule: "repeated", - type: "FieldDescriptorProto", - id: 7 - }, - options: { - type: "FileOptions", - id: 8 - }, - sourceCodeInfo: { - type: "SourceCodeInfo", - id: 9 - }, - syntax: { - type: "string", - id: 12 - }, - edition: { - type: "Edition", - id: 14 - } - } - }, - DescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - field: { - rule: "repeated", - type: "FieldDescriptorProto", - id: 2 - }, - extension: { - rule: "repeated", - type: "FieldDescriptorProto", - id: 6 - }, - nestedType: { - rule: "repeated", - type: "DescriptorProto", - id: 3 - }, - enumType: { - rule: "repeated", - type: "EnumDescriptorProto", - id: 4 - }, - extensionRange: { - rule: "repeated", - type: "ExtensionRange", - id: 5 - }, - oneofDecl: { - rule: "repeated", - type: "OneofDescriptorProto", - id: 8 - }, - options: { - type: "MessageOptions", - id: 7 - }, - reservedRange: { - rule: "repeated", - type: "ReservedRange", - id: 9 - }, - reservedName: { - rule: "repeated", - type: "string", - id: 10 - }, - visibility: { - type: "SymbolVisibility", - id: 11 - } - }, - nested: { - ExtensionRange: { - fields: { - start: { - type: "int32", - id: 1 - }, - end: { - type: "int32", - id: 2 - }, - options: { - type: "ExtensionRangeOptions", - id: 3 - } - } - }, - ReservedRange: { - fields: { - start: { - type: "int32", - id: 1 - }, - end: { - type: "int32", - id: 2 - } - } - } - } - }, - ExtensionRangeOptions: { - edition: "proto2", - fields: { - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - }, - declaration: { - rule: "repeated", - type: "Declaration", - id: 2, - options: { - retention: "RETENTION_SOURCE" - } - }, - features: { - type: "FeatureSet", - id: 50 - }, - verification: { - type: "VerificationState", - id: 3, - options: { - default: "UNVERIFIED", - retention: "RETENTION_SOURCE" - } - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - nested: { - Declaration: { - fields: { - number: { - type: "int32", - id: 1 - }, - fullName: { - type: "string", - id: 2 - }, - type: { - type: "string", - id: 3 - }, - reserved: { - type: "bool", - id: 5 - }, - repeated: { - type: "bool", - id: 6 - } - }, - reserved: [ - [ - 4, - 4 - ] - ] - }, - VerificationState: { - values: { - DECLARATION: 0, - UNVERIFIED: 1 - } - } - } - }, - FieldDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - number: { - type: "int32", - id: 3 - }, - label: { - type: "Label", - id: 4 - }, - type: { - type: "Type", - id: 5 - }, - typeName: { - type: "string", - id: 6 - }, - extendee: { - type: "string", - id: 2 - }, - defaultValue: { - type: "string", - id: 7 - }, - oneofIndex: { - type: "int32", - id: 9 - }, - jsonName: { - type: "string", - id: 10 - }, - options: { - type: "FieldOptions", - id: 8 - }, - proto3Optional: { - type: "bool", - id: 17 - } - }, - nested: { - Type: { - values: { - TYPE_DOUBLE: 1, - TYPE_FLOAT: 2, - TYPE_INT64: 3, - TYPE_UINT64: 4, - TYPE_INT32: 5, - TYPE_FIXED64: 6, - TYPE_FIXED32: 7, - TYPE_BOOL: 8, - TYPE_STRING: 9, - TYPE_GROUP: 10, - TYPE_MESSAGE: 11, - TYPE_BYTES: 12, - TYPE_UINT32: 13, - TYPE_ENUM: 14, - TYPE_SFIXED32: 15, - TYPE_SFIXED64: 16, - TYPE_SINT32: 17, - TYPE_SINT64: 18 - } - }, - Label: { - values: { - LABEL_OPTIONAL: 1, - LABEL_REPEATED: 3, - LABEL_REQUIRED: 2 - } - } - } - }, - OneofDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - options: { - type: "OneofOptions", - id: 2 - } - } - }, - EnumDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - value: { - rule: "repeated", - type: "EnumValueDescriptorProto", - id: 2 - }, - options: { - type: "EnumOptions", - id: 3 - }, - reservedRange: { - rule: "repeated", - type: "EnumReservedRange", - id: 4 - }, - reservedName: { - rule: "repeated", - type: "string", - id: 5 - }, - visibility: { - type: "SymbolVisibility", - id: 6 - } - }, - nested: { - EnumReservedRange: { - fields: { - start: { - type: "int32", - id: 1 - }, - end: { - type: "int32", - id: 2 - } - } - } - } - }, - EnumValueDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - number: { - type: "int32", - id: 2 - }, - options: { - type: "EnumValueOptions", - id: 3 - } - } - }, - ServiceDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - method: { - rule: "repeated", - type: "MethodDescriptorProto", - id: 2 - }, - options: { - type: "ServiceOptions", - id: 3 - } - }, - reserved: [ - [ - 4, - 4 - ], - "stream" - ] - }, - MethodDescriptorProto: { - edition: "proto2", - fields: { - name: { - type: "string", - id: 1 - }, - inputType: { - type: "string", - id: 2 - }, - outputType: { - type: "string", - id: 3 - }, - options: { - type: "MethodOptions", - id: 4 - }, - clientStreaming: { - type: "bool", - id: 5, - options: { - default: false - } - }, - serverStreaming: { - type: "bool", - id: 6, - options: { - default: false - } - } - } - }, - FileOptions: { - edition: "proto2", - fields: { - javaPackage: { - type: "string", - id: 1 - }, - javaOuterClassname: { - type: "string", - id: 8 - }, - javaMultipleFiles: { - type: "bool", - id: 10, - options: { - default: false - } - }, - javaGenerateEqualsAndHash: { - type: "bool", - id: 20, - options: { - deprecated: true - } - }, - javaStringCheckUtf8: { - type: "bool", - id: 27, - options: { - default: false - } - }, - optimizeFor: { - type: "OptimizeMode", - id: 9, - options: { - default: "SPEED" - } - }, - goPackage: { - type: "string", - id: 11 - }, - ccGenericServices: { - type: "bool", - id: 16, - options: { - default: false - } - }, - javaGenericServices: { - type: "bool", - id: 17, - options: { - default: false - } - }, - pyGenericServices: { - type: "bool", - id: 18, - options: { - default: false - } - }, - deprecated: { - type: "bool", - id: 23, - options: { - default: false - } - }, - ccEnableArenas: { - type: "bool", - id: 31, - options: { - default: true - } - }, - objcClassPrefix: { - type: "string", - id: 36 - }, - csharpNamespace: { - type: "string", - id: 37 - }, - swiftPrefix: { - type: "string", - id: 39 - }, - phpClassPrefix: { - type: "string", - id: 40 - }, - phpNamespace: { - type: "string", - id: 41 - }, - phpMetadataNamespace: { - type: "string", - id: 44 - }, - rubyPackage: { - type: "string", - id: 45 - }, - features: { - type: "FeatureSet", - id: 50 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 42, - 42 - ], - "php_generic_services", - [ - 38, - 38 - ] - ], - nested: { - OptimizeMode: { - values: { - SPEED: 1, - CODE_SIZE: 2, - LITE_RUNTIME: 3 - } - } - } - }, - MessageOptions: { - edition: "proto2", - fields: { - messageSetWireFormat: { - type: "bool", - id: 1, - options: { - default: false - } - }, - noStandardDescriptorAccessor: { - type: "bool", - id: 2, - options: { - default: false - } - }, - deprecated: { - type: "bool", - id: 3, - options: { - default: false - } - }, - mapEntry: { - type: "bool", - id: 7 - }, - deprecatedLegacyJsonFieldConflicts: { - type: "bool", - id: 11, - options: { - deprecated: true - } - }, - features: { - type: "FeatureSet", - id: 12 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 4, - 4 - ], - [ - 5, - 5 - ], - [ - 6, - 6 - ], - [ - 8, - 8 - ], - [ - 9, - 9 - ] - ] - }, - FieldOptions: { - edition: "proto2", - fields: { - ctype: { - type: "CType", - id: 1, - options: { - default: "STRING" - } - }, - packed: { - type: "bool", - id: 2 - }, - jstype: { - type: "JSType", - id: 6, - options: { - default: "JS_NORMAL" - } - }, - lazy: { - type: "bool", - id: 5, - options: { - default: false - } - }, - unverifiedLazy: { - type: "bool", - id: 15, - options: { - default: false - } - }, - deprecated: { - type: "bool", - id: 3, - options: { - default: false - } - }, - weak: { - type: "bool", - id: 10, - options: { - default: false, - deprecated: true - } - }, - debugRedact: { - type: "bool", - id: 16, - options: { - default: false - } - }, - retention: { - type: "OptionRetention", - id: 17 - }, - targets: { - rule: "repeated", - type: "OptionTargetType", - id: 19 - }, - editionDefaults: { - rule: "repeated", - type: "EditionDefault", - id: 20 - }, - features: { - type: "FeatureSet", - id: 21 - }, - featureSupport: { - type: "FeatureSupport", - id: 22 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 4, - 4 - ], - [ - 18, - 18 - ] - ], - nested: { - CType: { - values: { - STRING: 0, - CORD: 1, - STRING_PIECE: 2 - } - }, - JSType: { - values: { - JS_NORMAL: 0, - JS_STRING: 1, - JS_NUMBER: 2 - } - }, - OptionRetention: { - values: { - RETENTION_UNKNOWN: 0, - RETENTION_RUNTIME: 1, - RETENTION_SOURCE: 2 - } - }, - OptionTargetType: { - values: { - TARGET_TYPE_UNKNOWN: 0, - TARGET_TYPE_FILE: 1, - TARGET_TYPE_EXTENSION_RANGE: 2, - TARGET_TYPE_MESSAGE: 3, - TARGET_TYPE_FIELD: 4, - TARGET_TYPE_ONEOF: 5, - TARGET_TYPE_ENUM: 6, - TARGET_TYPE_ENUM_ENTRY: 7, - TARGET_TYPE_SERVICE: 8, - TARGET_TYPE_METHOD: 9 - } - }, - EditionDefault: { - fields: { - edition: { - type: "Edition", - id: 3 - }, - value: { - type: "string", - id: 2 - } - } - }, - FeatureSupport: { - fields: { - editionIntroduced: { - type: "Edition", - id: 1 - }, - editionDeprecated: { - type: "Edition", - id: 2 - }, - deprecationWarning: { - type: "string", - id: 3 - }, - editionRemoved: { - type: "Edition", - id: 4 - } - } - } - } - }, - OneofOptions: { - edition: "proto2", - fields: { - features: { - type: "FeatureSet", - id: 1 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ] - }, - EnumOptions: { - edition: "proto2", - fields: { - allowAlias: { - type: "bool", - id: 2 - }, - deprecated: { - type: "bool", - id: 3, - options: { - default: false - } - }, - deprecatedLegacyJsonFieldConflicts: { - type: "bool", - id: 6, - options: { - deprecated: true - } - }, - features: { - type: "FeatureSet", - id: 7 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - reserved: [ - [ - 5, - 5 - ] - ] - }, - EnumValueOptions: { - edition: "proto2", - fields: { - deprecated: { - type: "bool", - id: 1, - options: { - default: false - } - }, - features: { - type: "FeatureSet", - id: 2 - }, - debugRedact: { - type: "bool", - id: 3, - options: { - default: false - } - }, - featureSupport: { - type: "FieldOptions.FeatureSupport", - id: 4 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ] - }, - ServiceOptions: { - edition: "proto2", - fields: { - features: { - type: "FeatureSet", - id: 34 - }, - deprecated: { - type: "bool", - id: 33, - options: { - default: false - } - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ] - }, - MethodOptions: { - edition: "proto2", - fields: { - deprecated: { - type: "bool", - id: 33, - options: { - default: false - } - }, - idempotencyLevel: { - type: "IdempotencyLevel", - id: 34, - options: { - default: "IDEMPOTENCY_UNKNOWN" - } - }, - features: { - type: "FeatureSet", - id: 35 - }, - uninterpretedOption: { - rule: "repeated", - type: "UninterpretedOption", - id: 999 - } - }, - extensions: [ - [ - 1000, - 536870911 - ] - ], - nested: { - IdempotencyLevel: { - values: { - IDEMPOTENCY_UNKNOWN: 0, - NO_SIDE_EFFECTS: 1, - IDEMPOTENT: 2 - } - } - } - }, - UninterpretedOption: { - edition: "proto2", - fields: { - name: { - rule: "repeated", - type: "NamePart", - id: 2 - }, - identifierValue: { - type: "string", - id: 3 - }, - positiveIntValue: { - type: "uint64", - id: 4 - }, - negativeIntValue: { - type: "int64", - id: 5 - }, - doubleValue: { - type: "double", - id: 6 - }, - stringValue: { - type: "bytes", - id: 7 - }, - aggregateValue: { - type: "string", - id: 8 - } - }, - nested: { - NamePart: { - fields: { - namePart: { - rule: "required", - type: "string", - id: 1 - }, - isExtension: { - rule: "required", - type: "bool", - id: 2 - } - } - } - } - }, - FeatureSet: { - edition: "proto2", - fields: { - fieldPresence: { - type: "FieldPresence", - id: 1, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_2023", - "edition_defaults.value": "EXPLICIT" - } - }, - enumType: { - type: "EnumType", - id: 2, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "OPEN" - } - }, - repeatedFieldEncoding: { - type: "RepeatedFieldEncoding", - id: 3, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "PACKED" - } - }, - utf8Validation: { - type: "Utf8Validation", - id: 4, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "VERIFY" - } - }, - messageEncoding: { - type: "MessageEncoding", - id: 5, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_LEGACY", - "edition_defaults.value": "LENGTH_PREFIXED" - } - }, - jsonFormat: { - type: "JsonFormat", - id: 6, - options: { - retention: "RETENTION_RUNTIME", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2023", - "edition_defaults.edition": "EDITION_PROTO3", - "edition_defaults.value": "ALLOW" - } - }, - enforceNamingStyle: { - type: "EnforceNamingStyle", - id: 7, - options: { - retention: "RETENTION_SOURCE", - targets: "TARGET_TYPE_METHOD", - "feature_support.edition_introduced": "EDITION_2024", - "edition_defaults.edition": "EDITION_2024", - "edition_defaults.value": "STYLE2024" - } - }, - defaultSymbolVisibility: { - type: "VisibilityFeature.DefaultSymbolVisibility", - id: 8, - options: { - retention: "RETENTION_SOURCE", - targets: "TARGET_TYPE_FILE", - "feature_support.edition_introduced": "EDITION_2024", - "edition_defaults.edition": "EDITION_2024", - "edition_defaults.value": "EXPORT_TOP_LEVEL" - } - } - }, - extensions: [ - [ - 1000, - 9994 - ], - [ - 9995, - 9999 - ], - [ - 1e4, - 1e4 - ] - ], - reserved: [ - [ - 999, - 999 - ] - ], - nested: { - FieldPresence: { - values: { - FIELD_PRESENCE_UNKNOWN: 0, - EXPLICIT: 1, - IMPLICIT: 2, - LEGACY_REQUIRED: 3 - } - }, - EnumType: { - values: { - ENUM_TYPE_UNKNOWN: 0, - OPEN: 1, - CLOSED: 2 - } - }, - RepeatedFieldEncoding: { - values: { - REPEATED_FIELD_ENCODING_UNKNOWN: 0, - PACKED: 1, - EXPANDED: 2 - } - }, - Utf8Validation: { - values: { - UTF8_VALIDATION_UNKNOWN: 0, - VERIFY: 2, - NONE: 3 - }, - reserved: [ - [ - 1, - 1 - ] - ] - }, - MessageEncoding: { - values: { - MESSAGE_ENCODING_UNKNOWN: 0, - LENGTH_PREFIXED: 1, - DELIMITED: 2 - } - }, - JsonFormat: { - values: { - JSON_FORMAT_UNKNOWN: 0, - ALLOW: 1, - LEGACY_BEST_EFFORT: 2 - } - }, - EnforceNamingStyle: { - values: { - ENFORCE_NAMING_STYLE_UNKNOWN: 0, - STYLE2024: 1, - STYLE_LEGACY: 2 - } - }, - VisibilityFeature: { - fields: {}, - reserved: [ - [ - 1, - 536870911 - ] - ], - nested: { - DefaultSymbolVisibility: { - values: { - DEFAULT_SYMBOL_VISIBILITY_UNKNOWN: 0, - EXPORT_ALL: 1, - EXPORT_TOP_LEVEL: 2, - LOCAL_ALL: 3, - STRICT: 4 - } - } - } - } - } - }, - FeatureSetDefaults: { - edition: "proto2", - fields: { - defaults: { - rule: "repeated", - type: "FeatureSetEditionDefault", - id: 1 - }, - minimumEdition: { - type: "Edition", - id: 4 - }, - maximumEdition: { - type: "Edition", - id: 5 - } - }, - nested: { - FeatureSetEditionDefault: { - fields: { - edition: { - type: "Edition", - id: 3 - }, - overridableFeatures: { - type: "FeatureSet", - id: 4 - }, - fixedFeatures: { - type: "FeatureSet", - id: 5 - } - }, - reserved: [ - [ - 1, - 1 - ], - [ - 2, - 2 - ], - "features" - ] - } - } - }, - SourceCodeInfo: { - edition: "proto2", - fields: { - location: { - rule: "repeated", - type: "Location", - id: 1 - } - }, - extensions: [ - [ - 536000000, - 536000000 - ] - ], - nested: { - Location: { - fields: { - path: { - rule: "repeated", - type: "int32", - id: 1, - options: { - packed: true - } - }, - span: { - rule: "repeated", - type: "int32", - id: 2, - options: { - packed: true - } - }, - leadingComments: { - type: "string", - id: 3 - }, - trailingComments: { - type: "string", - id: 4 - }, - leadingDetachedComments: { - rule: "repeated", - type: "string", - id: 6 - } - } - } - } - }, - GeneratedCodeInfo: { - edition: "proto2", - fields: { - annotation: { - rule: "repeated", - type: "Annotation", - id: 1 - } - }, - nested: { - Annotation: { - fields: { - path: { - rule: "repeated", - type: "int32", - id: 1, - options: { - packed: true - } - }, - sourceFile: { - type: "string", - id: 2 - }, - begin: { - type: "int32", - id: 3 - }, - end: { - type: "int32", - id: 4 - }, - semantic: { - type: "Semantic", - id: 5 - } - }, - nested: { - Semantic: { - values: { - NONE: 0, - SET: 1, - ALIAS: 2 - } - } - } - } - } - }, - SymbolVisibility: { - edition: "proto2", - values: { - VISIBILITY_UNSET: 0, - VISIBILITY_LOCAL: 1, - VISIBILITY_EXPORT: 2 - } - }, - Duration: { - fields: { - seconds: { - type: "int64", - id: 1 - }, - nanos: { - type: "int32", - id: 2 - } - } - }, - Timestamp: { - fields: { - seconds: { - type: "int64", - id: 1 - }, - nanos: { - type: "int32", - id: 2 - } - } - }, - DoubleValue: { - fields: { - value: { - type: "double", - id: 1 - } - } - }, - FloatValue: { - fields: { - value: { - type: "float", - id: 1 - } - } - }, - Int64Value: { - fields: { - value: { - type: "int64", - id: 1 - } - } - }, - UInt64Value: { - fields: { - value: { - type: "uint64", - id: 1 - } - } - }, - Int32Value: { - fields: { - value: { - type: "int32", - id: 1 - } - } - }, - UInt32Value: { - fields: { - value: { - type: "uint32", - id: 1 - } - } - }, - BoolValue: { - fields: { - value: { - type: "bool", - id: 1 - } - } - }, - StringValue: { - fields: { - value: { - type: "string", - id: 1 - } - } - }, - BytesValue: { - fields: { - value: { - type: "bytes", - id: 1 - } - } - }, - Any: { - fields: { - type_url: { - type: "string", - id: 1 - }, - value: { - type: "bytes", - id: 2 - } - } - }, - Empty: { - fields: {} - } - } - }, - rpc: { - options: { - cc_enable_arenas: true, - go_package: "google.golang.org/genproto/googleapis/rpc/status;status", - java_multiple_files: true, - java_outer_classname: "StatusProto", - java_package: "com.google.rpc", - objc_class_prefix: "RPC" - }, - nested: { - Status: { - fields: { - code: { - type: "int32", - id: 1 - }, - message: { - type: "string", - id: 2 - }, - details: { - rule: "repeated", - type: "google.protobuf.Any", - id: 3 - } - } - } - } - } - } - } - } - }; -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/src/trace.js -var require_trace7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceExporter = undefined; - var core_1 = require_src7(); - var api_1 = require_src(); - var protoloader = require_src75(); - var grpc = require_src76(); - var google_auth_library_1 = require_src116(); - var util_1 = __require("util"); - var transform_1 = require_transform3(); - var version_1 = require_version57(); - var protoJson = require_protos(); - var OT_REQUEST_HEADER = "x-opentelemetry-outgoing-request"; - var TRACE_USER_AGENT = `opentelemetry-js ${version_1.OT_VERSION}; google-cloud-trace-exporter ${version_1.VERSION}`; - var OPTIONS = { - "grpc.primary_user_agent": TRACE_USER_AGENT - }; - - class TraceExporter { - _projectId; - _stringifyArrayAttributes; - _auth; - _traceServiceClient = undefined; - _resourceFilter = undefined; - _apiEndpoint = "cloudtrace.googleapis.com:443"; - constructor(options = {}) { - this._resourceFilter = options.resourceFilter; - this._stringifyArrayAttributes = options.stringifyArrayAttributes ?? false; - this._auth = new google_auth_library_1.GoogleAuth({ - credentials: options.credentials, - keyFile: options.keyFile, - keyFilename: options.keyFilename, - projectId: options.projectId, - scopes: ["https://www.googleapis.com/auth/cloud-platform"] - }); - this._projectId = this._auth.getProjectId().catch((err) => { - api_1.diag.error(err); - }); - if (options.apiEndpoint) { - this._apiEndpoint = options.apiEndpoint; - } - } - async export(spans, resultCallback) { - if (this._projectId instanceof Promise) { - this._projectId = await this._projectId; - } - if (!this._projectId) { - return resultCallback({ - code: core_1.ExportResultCode.FAILED, - error: new Error("Was not able to determine GCP project ID") - }); - } - api_1.diag.debug("Google Cloud Trace export"); - const namedSpans = { - name: `projects/${this._projectId}`, - spans: spans.map((0, transform_1.getReadableSpanTransformer)(this._projectId, this._resourceFilter, this._stringifyArrayAttributes)) - }; - const result = await this._batchWriteSpans(namedSpans); - resultCallback(result); - } - async shutdown() {} - async _batchWriteSpans(spans) { - api_1.diag.debug("Google Cloud Trace batch writing traces"); - try { - this._traceServiceClient = await this._getClient(); - } catch (e) { - const error48 = asError(e); - error48.message = `failed to create client: ${error48.message}`; - api_1.diag.error(error48.message); - return { code: core_1.ExportResultCode.FAILED, error: error48 }; - } - const metadata = new grpc.Metadata; - metadata.add(OT_REQUEST_HEADER, "1"); - metadata.add("user-agent", TRACE_USER_AGENT); - const batchWriteSpans = (0, util_1.promisify)(this._traceServiceClient.BatchWriteSpans).bind(this._traceServiceClient); - try { - await batchWriteSpans(spans, metadata); - api_1.diag.debug("batchWriteSpans successfully"); - return { code: core_1.ExportResultCode.SUCCESS }; - } catch (e) { - const error48 = asError(e); - error48.message = `batchWriteSpans error: ${error48.message}`; - api_1.diag.error(error48.message); - return { code: core_1.ExportResultCode.FAILED, error: error48 }; - } - } - async _getClient() { - if (this._traceServiceClient) { - return this._traceServiceClient; - } - api_1.diag.debug("Google Cloud Trace authenticating"); - const creds = await this._auth.getClient(); - api_1.diag.debug("Google Cloud Trace got authentication. Initializaing rpc client"); - const packageDefinition = protoloader.fromJSON(protoJson); - const { google } = grpc.loadPackageDefinition(packageDefinition); - const traceService = google.devtools.cloudtrace.v2.TraceService; - const sslCreds = grpc.credentials.createSsl(); - const callCreds = grpc.credentials.createFromGoogleCredential(creds); - return new traceService(this._apiEndpoint, grpc.credentials.combineChannelCredentials(sslCreds, callCreds), OPTIONS); - } - } - exports.TraceExporter = TraceExporter; - function asError(error48) { - if (error48 instanceof Error) { - return error48; - } - return new Error(String(error48)); - } -}); - -// ../../../../node_modules/.bun/@google-cloud+opentelemetry-cloud-trace-exporter@3.0.0+b069135c67f80b1e/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter/build/src/index.js -var require_src118 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - __exportStar(require_external_types(), exports); - __exportStar(require_trace7(), exports); -}); - -// ../../../../node_modules/.bun/tslib@2.8.1/node_modules/tslib/tslib.js -var require_tslib = __commonJS((exports, module) => { - var __extends; - var __assign; - var __rest; - var __decorate; - var __param; - var __esDecorate; - var __runInitializers; - var __propKey; - var __setFunctionName; - var __metadata; - var __awaiter; - var __generator; - var __exportStar; - var __values; - var __read; - var __spread; - var __spreadArrays; - var __spreadArray; - var __await; - var __asyncGenerator; - var __asyncDelegator; - var __asyncValues; - var __makeTemplateObject; - var __importStar; - var __importDefault; - var __classPrivateFieldGet; - var __classPrivateFieldSet; - var __classPrivateFieldIn; - var __createBinding; - var __addDisposableResource; - var __disposeResources; - var __rewriteRelativeImportExtension; - (function(factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function(exports2) { - factory(createExporter(root, createExporter(exports2))); - }); - } else if (typeof module === "object" && typeof exports === "object") { - factory(createExporter(root, createExporter(exports))); - } else { - factory(createExporter(root)); - } - function createExporter(exports2, previous) { - if (exports2 !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports2, "__esModule", { value: true }); - } else { - exports2.__esModule = true; - } - } - return function(id, v) { - return exports2[id] = previous ? previous(id, v) : v; - }; - } - })(function(exporter) { - var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) { - d.__proto__ = b; - } || function(d, b) { - for (var p in b) - if (Object.prototype.hasOwnProperty.call(b, p)) - d[p] = b[p]; - }; - __extends = function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __); - }; - __assign = Object.assign || function(t) { - for (var s2, i = 1, n = arguments.length;i < n; i++) { - s2 = arguments[i]; - for (var p in s2) - if (Object.prototype.hasOwnProperty.call(s2, p)) - t[p] = s2[p]; - } - return t; - }; - __rest = function(s2, e) { - var t = {}; - for (var p in s2) - if (Object.prototype.hasOwnProperty.call(s2, p) && e.indexOf(p) < 0) - t[p] = s2[p]; - if (s2 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s2);i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s2, p[i])) - t[p[i]] = s2[p[i]]; - } - return t; - }; - __decorate = function(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") - r = Reflect.decorate(decorators, target, key, desc); - else - for (var i = decorators.length - 1;i >= 0; i--) - if (d = decorators[i]) - r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - }; - __param = function(paramIndex, decorator) { - return function(target, key) { - decorator(target, key, paramIndex); - }; - }; - __esDecorate = function(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { - if (f !== undefined && typeof f !== "function") - throw new TypeError("Function expected"); - return f; - } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1;i >= 0; i--) { - var context8 = {}; - for (var p in contextIn) - context8[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) - context8.access[p] = contextIn.access[p]; - context8.addInitializer = function(f) { - if (done) - throw new TypeError("Cannot add initializers after decoration has completed"); - extraInitializers.push(accept(f || null)); - }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context8); - if (kind === "accessor") { - if (result === undefined) - continue; - if (result === null || typeof result !== "object") - throw new TypeError("Object expected"); - if (_ = accept(result.get)) - descriptor.get = _; - if (_ = accept(result.set)) - descriptor.set = _; - if (_ = accept(result.init)) - initializers.unshift(_); - } else if (_ = accept(result)) { - if (kind === "field") - initializers.unshift(_); - else - descriptor[key] = _; - } - } - if (target) - Object.defineProperty(target, contextIn.name, descriptor); - done = true; - }; - __runInitializers = function(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0;i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : undefined; - }; - __propKey = function(x) { - return typeof x === "symbol" ? x : "".concat(x); - }; - __setFunctionName = function(f, name, prefix) { - if (typeof name === "symbol") - name = name.description ? "[".concat(name.description, "]") : ""; - return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); - }; - __metadata = function(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") - return Reflect.metadata(metadataKey, metadataValue); - }; - __awaiter = function(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function(resolve2) { - resolve2(value); - }); - } - return new (P || (P = Promise))(function(resolve2, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - __generator = function(thisArg, body) { - var _ = { label: 0, sent: function() { - if (t[0] & 1) - throw t[1]; - return t[1]; - }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); - return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { - return this; - }), g; - function verb(n) { - return function(v) { - return step([n, v]); - }; - } - function step(op) { - if (f) - throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) - try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) - return t; - if (y = 0, t) - op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) - _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : undefined, done: true }; - } - }; - __exportStar = function(m, o) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) - __createBinding(o, m, p); - }; - __createBinding = Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }; - __values = function(o) { - var s2 = typeof Symbol === "function" && Symbol.iterator, m = s2 && o[s2], i = 0; - if (m) - return m.call(o); - if (o && typeof o.length === "number") - return { - next: function() { - if (o && i >= o.length) - o = undefined; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s2 ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - __read = function(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) - return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === undefined || n-- > 0) && !(r = i.next()).done) - ar.push(r.value); - } catch (error48) { - e = { error: error48 }; - } finally { - try { - if (r && !r.done && (m = i["return"])) - m.call(i); - } finally { - if (e) - throw e.error; - } - } - return ar; - }; - __spread = function() { - for (var ar = [], i = 0;i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - }; - __spreadArrays = function() { - for (var s2 = 0, i = 0, il = arguments.length;i < il; i++) - s2 += arguments[i].length; - for (var r = Array(s2), k = 0, i = 0;i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length;j < jl; j++, k++) - r[k] = a[j]; - return r; - }; - __spreadArray = function(to, from, pack) { - if (pack || arguments.length === 2) - for (var i = 0, l = from.length, ar;i < l; i++) { - if (ar || !(i in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - }; - __await = function(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - }; - __asyncGenerator = function(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() { - return this; - }, i; - function awaitReturn(f) { - return function(v) { - return Promise.resolve(v).then(f, reject); - }; - } - function verb(n, f) { - if (g[n]) { - i[n] = function(v) { - return new Promise(function(a, b) { - q.push([n, v, a, b]) > 1 || resume(n, v); - }); - }; - if (f) - i[n] = f(i[n]); - } - } - function resume(n, v) { - try { - step(g[n](v)); - } catch (e) { - settle(q[0][3], e); - } - } - function step(r) { - r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); - } - function fulfill(value) { - resume("next", value); - } - function reject(value) { - resume("throw", value); - } - function settle(f, v) { - if (f(v), q.shift(), q.length) - resume(q[0][0], q[0][1]); - } - }; - __asyncDelegator = function(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function(e) { - throw e; - }), verb("return"), i[Symbol.iterator] = function() { - return this; - }, i; - function verb(n, f) { - i[n] = o[n] ? function(v) { - return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; - } : f; - } - }; - __asyncValues = function(o) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { - return this; - }, i); - function verb(n) { - i[n] = o[n] && function(v) { - return new Promise(function(resolve2, reject) { - v = o[n](v), settle(resolve2, reject, v.done, v.value); - }); - }; - } - function settle(resolve2, reject, d, v) { - Promise.resolve(v).then(function(v2) { - resolve2({ value: v2, done: d }); - }, reject); - } - }; - __makeTemplateObject = function(cooked, raw2) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { value: raw2 }); - } else { - cooked.raw = raw2; - } - return cooked; - }; - var __setModuleDefault = Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }; - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function(o2) { - var ar = []; - for (var k in o2) - if (Object.prototype.hasOwnProperty.call(o2, k)) - ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - __importStar = function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k = ownKeys(mod2), i = 0;i < k.length; i++) - if (k[i] !== "default") - __createBinding(result, mod2, k[i]); - } - __setModuleDefault(result, mod2); - return result; - }; - __importDefault = function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - __classPrivateFieldGet = function(receiver, state, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - __classPrivateFieldSet = function(receiver, state, value, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value; - }; - __classPrivateFieldIn = function(state, receiver) { - if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function") - throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); - }; - __addDisposableResource = function(env, value, async) { - if (value !== null && value !== undefined) { - if (typeof value !== "object" && typeof value !== "function") - throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) - throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === undefined) { - if (!Symbol.dispose) - throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) - inner = dispose; - } - if (typeof dispose !== "function") - throw new TypeError("Object not disposable."); - if (inner) - dispose = function() { - try { - inner.call(this); - } catch (e) { - return Promise.reject(e); - } - }; - env.stack.push({ value, dispose, async }); - } else if (async) { - env.stack.push({ async: true }); - } - return value; - }; - var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error48, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error48, e.suppressed = suppressed, e; - }; - __disposeResources = function(env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s2 = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s2 === 1) - return s2 = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) - return s2 |= 2, Promise.resolve(result).then(next, function(e) { - fail(e); - return next(); - }); - } else - s2 |= 1; - } catch (e) { - fail(e); - } - } - if (s2 === 1) - return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) - throw env.error; - } - return next(); - }; - __rewriteRelativeImportExtension = function(path, preserveJsx) { - if (typeof path === "string" && /^\.\.?\//.test(path)) { - return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; - }); - } - return path; - }; - exporter("__extends", __extends); - exporter("__assign", __assign); - exporter("__rest", __rest); - exporter("__decorate", __decorate); - exporter("__param", __param); - exporter("__esDecorate", __esDecorate); - exporter("__runInitializers", __runInitializers); - exporter("__propKey", __propKey); - exporter("__setFunctionName", __setFunctionName); - exporter("__metadata", __metadata); - exporter("__awaiter", __awaiter); - exporter("__generator", __generator); - exporter("__exportStar", __exportStar); - exporter("__createBinding", __createBinding); - exporter("__values", __values); - exporter("__read", __read); - exporter("__spread", __spread); - exporter("__spreadArrays", __spreadArrays); - exporter("__spreadArray", __spreadArray); - exporter("__await", __await); - exporter("__asyncGenerator", __asyncGenerator); - exporter("__asyncDelegator", __asyncDelegator); - exporter("__asyncValues", __asyncValues); - exporter("__makeTemplateObject", __makeTemplateObject); - exporter("__importStar", __importStar); - exporter("__importDefault", __importDefault); - exporter("__classPrivateFieldGet", __classPrivateFieldGet); - exporter("__classPrivateFieldSet", __classPrivateFieldSet); - exporter("__classPrivateFieldIn", __classPrivateFieldIn); - exporter("__addDisposableResource", __addDisposableResource); - exporter("__disposeResources", __disposeResources); - exporter("__rewriteRelativeImportExtension", __rewriteRelativeImportExtension); - }); -}); - -// ../../../../node_modules/.bun/tslib@2.8.1/node_modules/tslib/modules/index.js -var import_tslib, __extends, __assign, __rest, __decorate, __param, __esDecorate, __runInitializers, __propKey, __setFunctionName, __metadata, __awaiter, __generator, __exportStar, __createBinding, __values, __read, __spread, __spreadArrays, __spreadArray, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __classPrivateFieldIn, __addDisposableResource, __disposeResources, __rewriteRelativeImportExtension; -var init_modules = __esm(() => { - import_tslib = __toESM(require_tslib(), 1); - ({ - __extends, - __assign, - __rest, - __decorate, - __param, - __esDecorate, - __runInitializers, - __propKey, - __setFunctionName, - __metadata, - __awaiter, - __generator, - __exportStar, - __createBinding, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn, - __addDisposableResource, - __disposeResources, - __rewriteRelativeImportExtension - } = import_tslib.default); -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-anthropic@0.21.0/node_modules/@traceloop/instrumentation-anthropic/dist/index.mjs -var import_api41, import_instrumentation, import_ai_semantic_conventions2, version2 = "0.21.0", AnthropicInstrumentation; -var init_dist5 = __esm(() => { - init_modules(); - import_api41 = __toESM(require_src(), 1); - import_instrumentation = __toESM(require_src97(), 1); - import_ai_semantic_conventions2 = __toESM(require_src2(), 1); - AnthropicInstrumentation = class AnthropicInstrumentation extends import_instrumentation.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-anthropic", version2, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - manuallyInstrument(module) { - this._diag.debug(`Patching @anthropic-ai/sdk manually`); - this._wrap(module.Anthropic.Completions.prototype, "create", this.patchAnthropic("completion", module)); - this._wrap(module.Anthropic.Messages.prototype, "create", this.patchAnthropic("chat", module)); - this._wrap(module.Anthropic.Beta.Messages.prototype, "create", this.patchAnthropic("chat", module)); - } - init() { - const module = new import_instrumentation.InstrumentationNodeModuleDefinition("@anthropic-ai/sdk", [">=0.9.1"], this.patch.bind(this), this.unpatch.bind(this)); - return module; - } - patch(moduleExports, moduleVersion) { - this._diag.debug(`Patching @anthropic-ai/sdk@${moduleVersion}`); - this._wrap(moduleExports.Anthropic.Completions.prototype, "create", this.patchAnthropic("completion", moduleExports)); - this._wrap(moduleExports.Anthropic.Messages.prototype, "create", this.patchAnthropic("chat", moduleExports)); - this._wrap(moduleExports.Anthropic.Beta.Messages.prototype, "create", this.patchAnthropic("chat", moduleExports)); - return moduleExports; - } - unpatch(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching @anthropic-ai/sdk@${moduleVersion}`); - this._unwrap(moduleExports.Anthropic.Completions.prototype, "create"); - this._unwrap(moduleExports.Anthropic.Messages.prototype, "create"); - this._unwrap(moduleExports.Anthropic.Beta.Messages.prototype, "create"); - } - patchAnthropic(type, moduleExports) { - const plugin = this; - return (original) => { - return function method(...args) { - const span = type === "chat" ? plugin.startSpan({ - type, - params: args[0] - }) : plugin.startSpan({ - type, - params: args[0] - }); - const execContext = import_api41.trace.setSpan(import_api41.context.active(), span); - const execPromise = import_instrumentation.safeExecuteInTheMiddle(() => { - return import_api41.context.with(execContext, () => { - var _a2; - if ((_a2 = args === null || args === undefined ? undefined : args[0]) === null || _a2 === undefined ? undefined : _a2.extraAttributes) { - delete args[0].extraAttributes; - } - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error("Error in Anthropic instrumentation", e); - } - }); - if (args[0].stream) { - return import_api41.context.bind(execContext, plugin._streamingWrapPromise(this._client, moduleExports, { - span, - type, - promise: execPromise - })); - } - const wrappedPromise = plugin._wrapPromise(type, span, execPromise); - return import_api41.context.bind(execContext, wrappedPromise); - }; - }; - } - startSpan({ type, params }) { - var _a2, _b; - const attributes = { - [import_ai_semantic_conventions2.SpanAttributes.LLM_SYSTEM]: "Anthropic", - [import_ai_semantic_conventions2.SpanAttributes.LLM_REQUEST_TYPE]: type - }; - try { - attributes[import_ai_semantic_conventions2.SpanAttributes.LLM_REQUEST_MODEL] = params.model; - attributes[import_ai_semantic_conventions2.SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature; - attributes[import_ai_semantic_conventions2.SpanAttributes.LLM_REQUEST_TOP_P] = params.top_p; - attributes[import_ai_semantic_conventions2.SpanAttributes.LLM_TOP_K] = params.top_k; - const betaParams = params; - if (betaParams.thinking && betaParams.thinking.type === "enabled") { - attributes["llm.request.thinking.type"] = betaParams.thinking.type; - attributes["llm.request.thinking.budget_tokens"] = betaParams.thinking.budget_tokens; - } - if (type === "completion") { - attributes[import_ai_semantic_conventions2.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens_to_sample; - } else { - attributes[import_ai_semantic_conventions2.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens; - } - if (params.extraAttributes !== undefined && typeof params.extraAttributes === "object") { - Object.keys(params.extraAttributes).forEach((key) => { - attributes[key] = params.extraAttributes[key]; - }); - } - if (this._shouldSendPrompts()) { - if (type === "chat") { - let promptIndex = 0; - if ("system" in params && params.system !== undefined) { - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.0.role`] = "system"; - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.0.content`] = typeof params.system === "string" ? params.system : JSON.stringify(params.system); - promptIndex += 1; - } - params.messages.forEach((message, index) => { - const currentIndex = index + promptIndex; - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.${currentIndex}.role`] = message.role; - if (typeof message.content === "string") { - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`] = message.content || ""; - } else { - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.${currentIndex}.content`] = JSON.stringify(message.content); - } - }); - } else { - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - attributes[`${import_ai_semantic_conventions2.SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt; - } - } - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - return this.tracer.startSpan(`anthropic.${type}`, { - kind: import_api41.SpanKind.CLIENT, - attributes - }); - } - _streamingWrapPromise(client, moduleExports, { span, type, promise: promise2 }) { - function iterateStream(stream3) { - return __asyncGenerator(this, arguments, function* iterateStream_1() { - var _a2, e_1, _b, _c, _d, e_2, _e, _f; - var _g, _h, _j, _k; - try { - if (type === "chat") { - const result = { - id: "0", - type: "message", - model: "", - role: "assistant", - stop_reason: null, - stop_sequence: null, - usage: { - input_tokens: 0, - output_tokens: 0, - cache_creation_input_tokens: 0, - cache_read_input_tokens: 0, - server_tool_use: null, - service_tier: null - }, - content: [] - }; - try { - for (var _l = true, stream_1 = __asyncValues(stream3), stream_1_1;stream_1_1 = yield __await(stream_1.next()), _a2 = stream_1_1.done, !_a2; _l = true) { - _c = stream_1_1.value; - _l = false; - const chunk = _c; - yield yield __await(chunk); - try { - switch (chunk.type) { - case "message_start": - result.id = chunk.message.id; - result.model = chunk.message.model; - Object.assign(result.usage, chunk.message.usage); - break; - case "message_delta": - if (chunk.usage) { - Object.assign(result.usage, chunk.usage); - } - break; - case "content_block_start": - if (result.content.length <= chunk.index) { - result.content.push(Object.assign({}, chunk.content_block)); - } - break; - case "content_block_delta": - if (chunk.index < result.content.length) { - const current = result.content[chunk.index]; - if (current.type === "text" && chunk.delta.type === "text_delta") { - result.content[chunk.index] = { - type: "text", - text: current.text + chunk.delta.text, - citations: current.citations - }; - } - } - break; - } - } catch (e) { - this._diag.debug(e); - (_h = (_g = this._config).exceptionLogger) === null || _h === undefined || _h.call(_g, e); - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (!_l && !_a2 && (_b = stream_1.return)) - yield __await(_b.call(stream_1)); - } finally { - if (e_1) - throw e_1.error; - } - } - this._endSpan({ span, type, result }); - } else { - const result = { - id: "0", - type: "completion", - model: "", - completion: "", - stop_reason: null - }; - try { - for (var _m = true, _o = __asyncValues(stream3), _p;_p = yield __await(_o.next()), _d = _p.done, !_d; _m = true) { - _f = _p.value; - _m = false; - const chunk = _f; - yield yield __await(chunk); - try { - result.id = chunk.id; - result.model = chunk.model; - if (chunk.stop_reason) { - result.stop_reason = chunk.stop_reason; - } - if (chunk.model) { - result.model = chunk.model; - } - if (chunk.completion) { - result.completion += chunk.completion; - } - } catch (e) { - this._diag.debug(e); - (_k = (_j = this._config).exceptionLogger) === null || _k === undefined || _k.call(_j, e); - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (!_m && !_d && (_e = _o.return)) - yield __await(_e.call(_o)); - } finally { - if (e_2) - throw e_2.error; - } - } - this._endSpan({ span, type, result }); - } - } catch (error48) { - span.setStatus({ - code: import_api41.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - throw error48; - } - }); - } - return new moduleExports.APIPromise(client, promise2.responsePromise, (client2, props) => __awaiter(this, undefined, undefined, function* () { - const realStream = yield promise2.parseResponse(client2, props); - return new realStream.constructor(() => iterateStream.call(this, realStream), realStream.controller); - })); - } - _wrapPromise(type, span, promise2) { - return promise2.then((result) => { - if (type === "chat") { - this._endSpan({ - type, - span, - result - }); - } else { - this._endSpan({ - type, - span, - result - }); - } - return result; - }).catch((error48) => { - span.setStatus({ - code: import_api41.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - throw error48; - }); - } - _endSpan({ span, type, result }) { - var _a2, _b, _c, _d, _e, _f; - try { - span.setAttribute(import_ai_semantic_conventions2.SpanAttributes.LLM_RESPONSE_MODEL, result.model); - if (type === "chat" && result.usage) { - span.setAttribute(import_ai_semantic_conventions2.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, ((_a2 = result.usage) === null || _a2 === undefined ? undefined : _a2.input_tokens) + ((_b = result.usage) === null || _b === undefined ? undefined : _b.output_tokens)); - span.setAttribute(import_ai_semantic_conventions2.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_c = result.usage) === null || _c === undefined ? undefined : _c.output_tokens); - span.setAttribute(import_ai_semantic_conventions2.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_d = result.usage) === null || _d === undefined ? undefined : _d.input_tokens); - } - if (result.stop_reason) { - span.setAttribute(`${import_ai_semantic_conventions2.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.stop_reason); - } - if (this._shouldSendPrompts()) { - if (type === "chat") { - span.setAttribute(`${import_ai_semantic_conventions2.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions2.SpanAttributes.LLM_COMPLETIONS}.0.content`, JSON.stringify(result.content)); - } else { - span.setAttribute(`${import_ai_semantic_conventions2.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions2.SpanAttributes.LLM_COMPLETIONS}.0.content`, result.completion); - } - } - } catch (e) { - this._diag.debug(e); - (_f = (_e = this._config).exceptionLogger) === null || _f === undefined || _f.call(_e, e); - } - span.end(); - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api41.context.active().getValue(import_ai_semantic_conventions2.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - }; -}); - -// ../../../../node_modules/.bun/js-tiktoken@1.0.21/node_modules/js-tiktoken/dist/chunk-VL2OQCWN.js -function never2(_) {} -function bytePairMerge(piece, ranks) { - let parts = Array.from({ length: piece.length }, (_, i) => ({ start: i, end: i + 1 })); - while (parts.length > 1) { - let minRank = null; - for (let i = 0;i < parts.length - 1; i++) { - const slice = piece.slice(parts[i].start, parts[i + 1].end); - const rank = ranks.get(slice.join(",")); - if (rank == null) - continue; - if (minRank == null || rank < minRank[0]) { - minRank = [rank, i]; - } - } - if (minRank != null) { - const i = minRank[1]; - parts[i] = { start: parts[i].start, end: parts[i + 1].end }; - parts.splice(i + 1, 1); - } else { - break; - } - } - return parts; -} -function bytePairEncode(piece, ranks) { - if (piece.length === 1) - return [ranks.get(piece.join(","))]; - return bytePairMerge(piece, ranks).map((p) => ranks.get(piece.slice(p.start, p.end).join(","))).filter((x) => x != null); -} -function escapeRegex2(str) { - return str.replace(/[\\^$*+?.()|[\]{}]/g, "\\$&"); -} -function getEncodingNameForModel(model) { - switch (model) { - case "gpt2": { - return "gpt2"; - } - case "code-cushman-001": - case "code-cushman-002": - case "code-davinci-001": - case "code-davinci-002": - case "cushman-codex": - case "davinci-codex": - case "davinci-002": - case "text-davinci-002": - case "text-davinci-003": { - return "p50k_base"; - } - case "code-davinci-edit-001": - case "text-davinci-edit-001": { - return "p50k_edit"; - } - case "ada": - case "babbage": - case "babbage-002": - case "code-search-ada-code-001": - case "code-search-babbage-code-001": - case "curie": - case "davinci": - case "text-ada-001": - case "text-babbage-001": - case "text-curie-001": - case "text-davinci-001": - case "text-search-ada-doc-001": - case "text-search-babbage-doc-001": - case "text-search-curie-doc-001": - case "text-search-davinci-doc-001": - case "text-similarity-ada-001": - case "text-similarity-babbage-001": - case "text-similarity-curie-001": - case "text-similarity-davinci-001": { - return "r50k_base"; - } - case "gpt-3.5-turbo-instruct-0914": - case "gpt-3.5-turbo-instruct": - case "gpt-3.5-turbo-16k-0613": - case "gpt-3.5-turbo-16k": - case "gpt-3.5-turbo-0613": - case "gpt-3.5-turbo-0301": - case "gpt-3.5-turbo": - case "gpt-4-32k-0613": - case "gpt-4-32k-0314": - case "gpt-4-32k": - case "gpt-4-0613": - case "gpt-4-0314": - case "gpt-4": - case "gpt-3.5-turbo-1106": - case "gpt-35-turbo": - case "gpt-4-1106-preview": - case "gpt-4-vision-preview": - case "gpt-3.5-turbo-0125": - case "gpt-4-turbo": - case "gpt-4-turbo-2024-04-09": - case "gpt-4-turbo-preview": - case "gpt-4-0125-preview": - case "text-embedding-ada-002": - case "text-embedding-3-small": - case "text-embedding-3-large": { - return "cl100k_base"; - } - case "gpt-4o": - case "gpt-4o-2024-05-13": - case "gpt-4o-2024-08-06": - case "gpt-4o-2024-11-20": - case "gpt-4o-mini-2024-07-18": - case "gpt-4o-mini": - case "gpt-4o-search-preview": - case "gpt-4o-search-preview-2025-03-11": - case "gpt-4o-mini-search-preview": - case "gpt-4o-mini-search-preview-2025-03-11": - case "gpt-4o-audio-preview": - case "gpt-4o-audio-preview-2024-12-17": - case "gpt-4o-audio-preview-2024-10-01": - case "gpt-4o-mini-audio-preview": - case "gpt-4o-mini-audio-preview-2024-12-17": - case "o1": - case "o1-2024-12-17": - case "o1-mini": - case "o1-mini-2024-09-12": - case "o1-preview": - case "o1-preview-2024-09-12": - case "o1-pro": - case "o1-pro-2025-03-19": - case "o3": - case "o3-2025-04-16": - case "o3-mini": - case "o3-mini-2025-01-31": - case "o4-mini": - case "o4-mini-2025-04-16": - case "chatgpt-4o-latest": - case "gpt-4o-realtime": - case "gpt-4o-realtime-preview-2024-10-01": - case "gpt-4o-realtime-preview-2024-12-17": - case "gpt-4o-mini-realtime-preview": - case "gpt-4o-mini-realtime-preview-2024-12-17": - case "gpt-4.1": - case "gpt-4.1-2025-04-14": - case "gpt-4.1-mini": - case "gpt-4.1-mini-2025-04-14": - case "gpt-4.1-nano": - case "gpt-4.1-nano-2025-04-14": - case "gpt-4.5-preview": - case "gpt-4.5-preview-2025-02-27": - case "gpt-5": - case "gpt-5-2025-08-07": - case "gpt-5-nano": - case "gpt-5-nano-2025-08-07": - case "gpt-5-mini": - case "gpt-5-mini-2025-08-07": - case "gpt-5-chat-latest": { - return "o200k_base"; - } - default: - throw new Error("Unknown model"); - } -} -var import_base64_js, __defProp2, __defNormalProp = (obj, key, value) => (key in obj) ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}, _Tiktoken = class { - specialTokens; - inverseSpecialTokens; - patStr; - textEncoder = new TextEncoder; - textDecoder = new TextDecoder("utf-8"); - rankMap = /* @__PURE__ */ new Map; - textMap = /* @__PURE__ */ new Map; - constructor(ranks, extendedSpecialTokens) { - this.patStr = ranks.pat_str; - const uncompressed = ranks.bpe_ranks.split(` -`).filter(Boolean).reduce((memo, x) => { - const [_, offsetStr, ...tokens] = x.split(" "); - const offset = Number.parseInt(offsetStr, 10); - tokens.forEach((token, i) => memo[token] = offset + i); - return memo; - }, {}); - for (const [token, rank] of Object.entries(uncompressed)) { - const bytes = import_base64_js.default.toByteArray(token); - this.rankMap.set(bytes.join(","), rank); - this.textMap.set(rank, bytes); - } - this.specialTokens = { ...ranks.special_tokens, ...extendedSpecialTokens }; - this.inverseSpecialTokens = Object.entries(this.specialTokens).reduce((memo, [text, rank]) => { - memo[rank] = this.textEncoder.encode(text); - return memo; - }, {}); - } - encode(text, allowedSpecial = [], disallowedSpecial = "all") { - const regexes = new RegExp(this.patStr, "ug"); - const specialRegex = _Tiktoken.specialTokenRegex(Object.keys(this.specialTokens)); - const ret = []; - const allowedSpecialSet = new Set(allowedSpecial === "all" ? Object.keys(this.specialTokens) : allowedSpecial); - const disallowedSpecialSet = new Set(disallowedSpecial === "all" ? Object.keys(this.specialTokens).filter((x) => !allowedSpecialSet.has(x)) : disallowedSpecial); - if (disallowedSpecialSet.size > 0) { - const disallowedSpecialRegex = _Tiktoken.specialTokenRegex([ - ...disallowedSpecialSet - ]); - const specialMatch = text.match(disallowedSpecialRegex); - if (specialMatch != null) { - throw new Error(`The text contains a special token that is not allowed: ${specialMatch[0]}`); - } - } - let start = 0; - while (true) { - let nextSpecial = null; - let startFind = start; - while (true) { - specialRegex.lastIndex = startFind; - nextSpecial = specialRegex.exec(text); - if (nextSpecial == null || allowedSpecialSet.has(nextSpecial[0])) - break; - startFind = nextSpecial.index + 1; - } - const end = nextSpecial?.index ?? text.length; - for (const match2 of text.substring(start, end).matchAll(regexes)) { - const piece = this.textEncoder.encode(match2[0]); - const token2 = this.rankMap.get(piece.join(",")); - if (token2 != null) { - ret.push(token2); - continue; - } - ret.push(...bytePairEncode(piece, this.rankMap)); - } - if (nextSpecial == null) - break; - let token = this.specialTokens[nextSpecial[0]]; - ret.push(token); - start = nextSpecial.index + nextSpecial[0].length; - } - return ret; - } - decode(tokens) { - const res = []; - let length = 0; - for (let i2 = 0;i2 < tokens.length; ++i2) { - const token = tokens[i2]; - const bytes = this.textMap.get(token) ?? this.inverseSpecialTokens[token]; - if (bytes != null) { - res.push(bytes); - length += bytes.length; - } - } - const mergedArray = new Uint8Array(length); - let i = 0; - for (const bytes of res) { - mergedArray.set(bytes, i); - i += bytes.length; - } - return this.textDecoder.decode(mergedArray); - } -}, Tiktoken; -var init_chunk_VL2OQCWN = __esm(() => { - import_base64_js = __toESM(require_base64_js(), 1); - __defProp2 = Object.defineProperty; - Tiktoken = _Tiktoken; - __publicField(Tiktoken, "specialTokenRegex", (tokens) => { - return new RegExp(tokens.map((i) => escapeRegex2(i)).join("|"), "g"); - }); -}); - -// ../../../../node_modules/.bun/js-tiktoken@1.0.21/node_modules/js-tiktoken/dist/index.js -function getEncoding(encoding, extendSpecialTokens) { - switch (encoding) { - case "gpt2": - return new Tiktoken(gpt2_default, extendSpecialTokens); - case "r50k_base": - return new Tiktoken(r50k_base_default, extendSpecialTokens); - case "p50k_base": - return new Tiktoken(p50k_base_default, extendSpecialTokens); - case "p50k_edit": - return new Tiktoken(p50k_edit_default, extendSpecialTokens); - case "cl100k_base": - return new Tiktoken(cl100k_base_default, extendSpecialTokens); - case "o200k_base": - return new Tiktoken(o200k_base_default, extendSpecialTokens); - default: - never2(encoding); - throw new Error("Unknown encoding"); - } -} -function encodingForModel(model, extendSpecialTokens) { - return getEncoding(getEncodingNameForModel(model), extendSpecialTokens); -} -var gpt2_default, p50k_base_default, p50k_edit_default, r50k_base_default, cl100k_base_default, o200k_base_default; -var init_dist6 = __esm(() => { - init_chunk_VL2OQCWN(); - init_chunk_VL2OQCWN(); - gpt2_default = { explicit_n_vocab: 50257, pat_str: "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+", special_tokens: { "<|endoftext|>": 50256 }, bpe_ranks: "! 0 IQ== Ig== Iw== JA== JQ== Jg== Jw== KA== KQ== Kg== Kw== LA== LQ== Lg== Lw== MA== MQ== Mg== Mw== NA== NQ== Ng== Nw== OA== OQ== Og== Ow== PA== PQ== Pg== Pw== QA== QQ== Qg== Qw== RA== RQ== Rg== Rw== SA== SQ== Sg== Sw== TA== TQ== Tg== Tw== UA== UQ== Ug== Uw== VA== VQ== Vg== Vw== WA== WQ== Wg== Ww== XA== XQ== Xg== Xw== YA== YQ== Yg== Yw== ZA== ZQ== Zg== Zw== aA== aQ== ag== aw== bA== bQ== bg== bw== cA== cQ== cg== cw== dA== dQ== dg== dw== eA== eQ== eg== ew== fA== fQ== fg== oQ== og== ow== pA== pQ== pg== pw== qA== qQ== qg== qw== rA== rg== rw== sA== sQ== sg== sw== tA== tQ== tg== tw== uA== uQ== ug== uw== vA== vQ== vg== vw== wA== wQ== wg== ww== xA== xQ== xg== xw== yA== yQ== yg== yw== zA== zQ== zg== zw== 0A== 0Q== 0g== 0w== 1A== 1Q== 1g== 1w== 2A== 2Q== 2g== 2w== 3A== 3Q== 3g== 3w== 4A== 4Q== 4g== 4w== 5A== 5Q== 5g== 5w== 6A== 6Q== 6g== 6w== 7A== 7Q== 7g== 7w== 8A== 8Q== 8g== 8w== 9A== 9Q== 9g== 9w== +A== +Q== +g== +w== /A== /Q== /g== /w== AA== AQ== Ag== Aw== BA== BQ== Bg== Bw== CA== CQ== Cg== Cw== DA== DQ== Dg== Dw== EA== EQ== Eg== Ew== FA== FQ== Fg== Fw== GA== GQ== Gg== Gw== HA== HQ== Hg== Hw== IA== fw== gA== gQ== gg== gw== hA== hQ== hg== hw== iA== iQ== ig== iw== jA== jQ== jg== jw== kA== kQ== kg== kw== lA== lQ== lg== lw== mA== mQ== mg== mw== nA== nQ== ng== nw== oA== rQ== IHQ= IGE= aGU= aW4= cmU= b24= IHRoZQ== ZXI= IHM= YXQ= IHc= IG8= ZW4= IGM= aXQ= aXM= YW4= b3I= ZXM= IGI= ZWQ= IGY= aW5n IHA= b3U= IGFu YWw= YXI= IHRv IG0= IG9m IGlu IGQ= IGg= IGFuZA== aWM= YXM= bGU= IHRo aW9u b20= bGw= ZW50 IG4= IGw= c3Q= IHJl dmU= IGU= cm8= bHk= IGJl IGc= IFQ= Y3Q= IFM= aWQ= b3Q= IEk= dXQ= ZXQ= IEE= IGlz IG9u aW0= YW0= b3c= YXk= YWQ= c2U= IHRoYXQ= IEM= aWc= IGZvcg== YWM= IHk= dmVy dXI= IHU= bGQ= IHN0 IE0= J3M= IGhl IGl0 YXRpb24= aXRo aXI= Y2U= IHlvdQ== aWw= IEI= IHdo b2w= IFA= IHdpdGg= IDE= dGVy Y2g= IGFz IHdl ICg= bmQ= aWxs IEQ= aWY= IDI= YWc= ZXJz a2U= ICI= IEg= ZW0= IGNvbg== IFc= IFI= aGVy IHdhcw== IHI= b2Q= IEY= dWw= YXRl IGF0 cmk= cHA= b3Jl IFRoZQ== IHNl dXM= IHBybw== IGhh dW0= IGFyZQ== IGRl YWlu YW5k IG9y aWdo ZXN0 aXN0 YWI= cm9t IE4= dGg= IGNvbQ== IEc= dW4= b3A= MDA= IEw= IG5vdA== ZXNz IGV4 IHY= cmVz IEU= ZXc= aXR5 YW50 IGJ5 ZWw= b3M= b3J0 b2M= cXU= IGZyb20= IGhhdmU= IHN1 aXZl b3VsZA== IHNo IHRoaXM= bnQ= cmE= cGU= aWdodA== YXJ0 bWVudA== IGFs dXN0 ZW5k LS0= YWxs IE8= YWNr IGNo IGxl aWVz cmVk YXJk 4oA= b3V0 IEo= IGFi ZWFy aXY= YWxseQ== b3Vy b3N0 Z2g= cHQ= IHBs YXN0 IGNhbg== YWs= b21l dWQ= VGhl IGhpcw== IGRv IGdv IGhhcw== Z2U= J3Q= IFU= cm91 IHNh IGo= IGJ1dA== IHdvcg== IGFsbA== ZWN0 IGs= YW1l IHdpbGw= b2s= IHdoZQ== IHRoZXk= aWRl MDE= ZmY= aWNo cGw= dGhlcg== IHRy Li4= IGludA== aWU= dXJl YWdl IG5l aWFs YXA= aW5l aWNl IG1l IG91dA== YW5z b25l b25n aW9ucw== IHdobw== IEs= IHVw IHRoZWly IGFk IDM= IHVz YXRlZA== b3Vz IG1vcmU= dWU= b2c= IFN0 aW5k aWtl IHNv aW1l cGVy LiI= YmVy aXo= YWN0 IG9uZQ== IHNhaWQ= IC0= YXJl IHlvdXI= Y2M= IFRo IGNs ZXA= YWtl YWJsZQ== aXA= IGNvbnQ= IHdoaWNo aWE= IGlt IGFib3V0 IHdlcmU= dmVyeQ== dWI= IGhhZA== IGVu IGNvbXA= LCI= IElu IHVu IGFn aXJl YWNl YXU= YXJ5 IHdvdWxk YXNz cnk= IOKA Y2w= b29r ZXJl c28= IFY= aWdu aWI= IG9mZg== IHRl dmVu IFk= aWxl b3Nl aXRl b3Jt IDIwMQ== IHJlcw== IG1hbg== IHBlcg== IG90aGVy b3Jk dWx0 IGJlZW4= IGxpa2U= YXNl YW5jZQ== a3M= YXlz b3du ZW5jZQ== IGRpcw== Y3Rpb24= IGFueQ== IGFwcA== IHNw aW50 cmVzcw== YXRpb25z YWls IDQ= aWNhbA== IHRoZW0= IGhlcg== b3VudA== IENo IGFy IGlm IHRoZXJl IHBl IHllYXI= YXY= IG15 IHNvbWU= IHdoZW4= b3VnaA== YWNo IHRoYW4= cnU= b25k aWNr IG92ZXI= dmVs IHF1 Cgo= IHNj cmVhdA== cmVl IEl0 b3VuZA== cG9ydA== IGFsc28= IHBhcnQ= ZnRlcg== IGtu IGJlYw== IHRpbWU= ZW5z IDU= b3BsZQ== IHdoYXQ= IG5v ZHU= bWVy YW5n IG5ldw== LS0tLQ== IGdldA== b3J5 aXRpb24= aW5ncw== IGp1c3Q= IGludG8= IDA= ZW50cw== b3Zl dGU= IHBlb3BsZQ== IHByZQ== IGl0cw== IHJlYw== IHR3 aWFu aXJzdA== YXJr b3Jz IHdvcms= YWRl b2I= IHNoZQ== IG91cg== d24= aW5r bGlj IDE5 IEhl aXNo bmRlcg== YXVzZQ== IGhpbQ== b25z IFs= IHJv Zm9ybQ== aWxk YXRlcw== dmVycw== IG9ubHk= b2xs IHNwZQ== Y2s= ZWxs YW1w IGFjYw== IGJs aW91cw== dXJu ZnQ= b29k IGhvdw== aGVk ICc= IGFmdGVy YXc= IGF0dA== b3Y= bmU= IHBsYXk= ZXJ2 aWN0 IGNvdWxk aXR0 IGFt IGZpcnN0 IDY= IGFjdA== ICQ= ZWM= aGluZw== dWFs dWxs IGNvbW0= b3k= b2xk Y2Vz YXRlcg== IGZl IGJldA== d2U= aWZm IHR3bw== b2Nr IGJhY2s= KS4= aWRlbnQ= IHVuZGVy cm91Z2g= c2Vs eHQ= IG1heQ== cm91bmQ= IHBv cGg= aXNz IGRlcw== IG1vc3Q= IGRpZA== IGFkZA== amVjdA== IGluYw== Zm9yZQ== IHBvbA== b250 IGFnYWlu Y2x1ZA== dGVybg== IGtub3c= IG5lZWQ= IGNvbnM= IGNv IC4= IHdhbnQ= IHNlZQ== IDc= bmluZw== aWV3 IFRoaXM= Y2Vk IGV2ZW4= IGluZA== dHk= IFdl YXRo IHRoZXNl IHBy IHVzZQ== IGJlY2F1c2U= IGZs bmc= IG5vdw== IOKAkw== Y29t aXNl IG1ha2U= IHRoZW4= b3dlcg== IGV2ZXJ5 IFVu IHNlYw== b3Nz dWNo IGVt ID0= IFJl aWVk cml0 IGludg== bGVjdA== IHN1cHA= YXRpbmc= IGxvb2s= bWFu cGVjdA== IDg= cm93 IGJ1 IHdoZXJl aWZpYw== IHllYXJz aWx5 IGRpZmY= IHNob3VsZA== IHJlbQ== VGg= SW4= IGV2 ZGF5 J3Jl cmli IHJlbA== c3M= IGRlZg== IHJpZ2h0 IHN5 KSw= bGVz MDAw aGVu IHRocm91Z2g= IFRy X18= IHdheQ== IGRvbg== ICw= IDEw YXNlZA== IGFzcw== dWJsaWM= IHJlZw== IEFuZA== aXg= IHZlcnk= IGluY2x1ZA== b3RoZXI= IGltcA== b3Ro IHN1Yg== IOKAlA== IGJlaW5n YXJn IFdo PT0= aWJsZQ== IGRvZXM= YW5nZQ== cmFt IDk= ZXJ0 cHM= aXRlZA== YXRpb25hbA== IGJy IGRvd24= IG1hbnk= YWtpbmc= IGNhbGw= dXJpbmc= aXRpZXM= IHBo aWNz YWxz IGRlYw== YXRpdmU= ZW5lcg== IGJlZm9yZQ== aWxpdHk= IHdlbGw= IG11Y2g= ZXJzb24= IHRob3Nl IHN1Y2g= IGtl IGVuZA== IEJ1dA== YXNvbg== dGluZw== IGxvbmc= ZWY= IHRoaW5r eXM= IGJlbA== IHNt aXRz YXg= IG93bg== IHByb3Y= IHNldA== aWZl bWVudHM= Ymxl d2FyZA== IHNob3c= IHByZXM= bXM= b21ldA== IG9i IHNheQ== IFNo dHM= ZnVs IGVmZg== IGd1 IGluc3Q= dW5k cmVu Y2Vzcw== IGVudA== IFlvdQ== IGdvb2Q= IHN0YXJ0 aW5jZQ== IG1hZGU= dHQ= c3RlbQ== b2xvZw== dXA= IHw= dW1w IGhlbA== dmVybg== dWxhcg== dWFsbHk= IGFj IG1vbg== IGxhc3Q= IDIwMA== MTA= IHN0dWQ= dXJlcw== IEFy c2VsZg== YXJz bWVyaWM= dWVz Y3k= IG1pbg== b2xsb3c= IGNvbA== aW8= IG1vZA== IGNvdW50 IENvbQ== aGVz IGZpbg== YWly aWVy 4oCU cmVhZA== YW5r YXRjaA== ZXZlcg== IHN0cg== IHBvaW50 b3Jr IE5ldw== IHN1cg== b29s YWxr ZW1lbnQ= IHVzZWQ= cmFjdA== d2Vlbg== IHNhbWU= b3Vu IEFs Y2k= IGRpZmZlcmU= IHdoaWxl LS0tLS0tLS0= IGdhbWU= Y2VwdA== IHNpbQ== Li4u IGludGVy ZWs= IHJlcG9ydA== IHByb2R1 IHN0aWxs bGVk YWg= IGhlcmU= IHdvcmxk IHRob3VnaA== IG51bQ== YXJjaA== aW1lcw== YWxl IFNl IElm Ly8= IExl IHJldA== IHJlZg== IHRyYW5z bmVy dXRpb24= dGVycw== IHRha2U= IENs IGNvbmY= d2F5 YXZl IGdvaW5n IHNs dWc= IEFtZXJpYw== IHNwZWM= IGhhbmQ= IGJldHdlZW4= aXN0cw== IERl b290 SXQ= IGVhcg== IGFnYWluc3Q= IGhpZ2g= Z2Fu YXo= YXRoZXI= IGV4cA== IG9w IGlucw== IGdy IGhlbHA= IHJlcXU= ZXRz aW5z IFBybw== aXNt IGZvdW5k bGFuZA== YXRh dXNz YW1lcw== IHBlcnNvbg== IGdyZWF0 cHI= IHNpZ24= IEFu J3Zl IHNvbWV0 IHNlcg== aGlw IHJ1bg== IDo= IHRlcg== aXJlY3Q= IGZvbGxvdw== IGRldA== aWNlcw== IGZpbmQ= MTI= IG1lbQ== IGNy ZXJlZA== ZXg= IGV4dA== dXRo ZW5zZQ== Y28= IHRlYW0= dmluZw== b3VzZQ== YXNo YXR0 dmVk IHN5c3RlbQ== IEFz ZGVy aXZlcw== bWlu IGxlYWQ= IEJs Y2VudA== IGFyb3VuZA== IGdvdmVybg== IGN1cg== dmVsb3A= YW55 IGNvdXI= YWx0aA== YWdlcw== aXpl IGNhcg== b2Rl IGxhdw== IHJlYWQ= J20= Y29u IHJlYWw= IHN1cHBvcnQ= IDEy Li4uLg== IHJlYWxseQ== bmVzcw== IGZhY3Q= IGRheQ== IGJvdGg= eWluZw== IHNlcnY= IEZvcg== IHRocmVl IHdvbQ== IG1lZA== b2R5 IFRoZXk= NTA= IGV4cGVy dG9u IGVhY2g= YWtlcw== IGNoZQ== IGNyZQ== aW5lcw== IHJlcA== MTk= Z2c= aWxsaW9u IGdyb3U= dXRl aWs= V2U= Z2V0 RVI= IG1ldA== IHNheXM= b3g= IGR1cmluZw== ZXJu aXplZA== YXJlZA== IGZhbQ== aWNhbGx5 IGhhcHA= IElz IGNoYXI= bWVk dmVudA== IGdlbmVy aWVudA== cGxl aWV0 cmVudA== MTE= dmVz cHRpb24= IDIw Zm9ybWF0aW9u IGNvcg== IG9mZmlj aWVsZA== IHRvbw== aXNpb24= IGluZg== IFo= dGhl b2Fk IHB1YmxpYw== IHByb2c= cmlj Kio= IHdhcg== IHBvd2Vy dmlldw== IGZldw== IGxvYw== IGRpZmZlcmVudA== IHN0YXRl IGhlYWQ= J2xs IHBvc3M= IHN0YXQ= cmV0 YW50cw== IHZhbA== IGlzcw== IGNsZQ== aXZlcnM= YW5j IGV4cGw= IGFub3RoZXI= IFE= IGF2 dGhpbmc= bmNl V2g= IGNoaWxk IHNpbmNl aXJlZA== bGVzcw== IGxpZmU= IGRldmVsb3A= aXR0bGU= IGRlcA== IHBhc3M= 44M= IHR1cm4= b3Ju VGhpcw== YmVycw== cm9zcw== IEFk IGZy IHJlc3A= IHNlY29uZA== b2g= IC8= IGRpc2M= ICY= IHNvbWV0aGluZw== IGNvbXBsZQ== IGVk IGZpbA== IG1vbnRo YWo= dWM= IGdvdmVybm1lbnQ= IHdpdGhvdXQ= IGxlZw== IGRpc3Q= IHB1dA== IHF1ZXN0 YW5u IHByb3Q= MjA= IG5ldmVy aWVuY2U= IGxldmVs IGFydA== IHRoaW5ncw== IG1pZ2h0 IGVmZmVjdA== IGNvbnRybw== IGNlbnQ= IDE4 IGFsbG93 IGJlbGll Y2hvb2w= b3R0 IGluY3Jl IGZlZWw= IHJlc3VsdA== IGxvdA== IGZ1bg== b3Rl IHR5 ZXJlc3Q= IGNvbnRpbg== IHVzaW5n IGJpZw== MjAx IGFzaw== IGJlc3Q= ICk= SU4= IG9wcA== MzA= IG51bWJlcg== aW5lc3M= U3Q= bGVhc2U= IGNh IG11c3Q= IGRpcmVjdA== IGds IDw= IG9wZW4= IHBvc3Q= IGNvbWU= IHNlZW0= b3JkaW5n IHdlZWs= YXRlbHk= aXRhbA== IGVs cmllbmQ= IGZhcg== IHRyYQ== aW5hbA== IHByaQ== IFVT IHBsYWNl IGZvcm0= IHRvbGQ= Ijo= YWlucw== YXR1cmU= IFRydW1w IHN0YW5k ICM= aWRlcg== IEZy IG5leHQ= IHNvYw== IHB1cg== IGxldA== IGxpdHRsZQ== IGh1bQ== IGk= cm9u MTU= IDE1 IGNvbW11bg== IG1hcms= IFRoZXJl IHdy IFRoYXQ= IGluZm9ybWF0aW9u d2F5cw== IGJ1cw== YXBw IGludmVzdA== bWU= IGhhcmQ= YWluZWQ= ZWFk IGltcG9ydA== IGFwcHJv IHRlc3Q= IHRyaQ== IHJlc3Q= b3NlZA== IGZ1bGw= IGNhcmU= IFNw IGNhc2U= T04= IHNr IGxlc3M= ICs= IHBhcnRpYw== IFBs YWJseQ== dWNr aXNoZWQ= Y2hu YmU= IGxpc3Q= YXRvcg== IHRvcA== IGFkdg== IEJl cnVjdA== IGRlbQ== cmF0aW9u bGluZw== Z3k= cmVlbg== Z2Vy IGhvbWU= IGxlZnQ= IGJldHRlcg== IGRhdGE= IDEx IGF0dGFjaw== IHByb2JsZQ== bGluZQ== YXJkcw== IGJlaA== cmFs IEhvdw== IFNoZQ== YXJnZQ== IC0t Oi8v IGJybw== IFBo YXRz IGJ1aWxk d3c= aWRlZA== YWlt YXNlcw== ZW5jeQ== IG1haW4= aW5lZA== IGluY2x1ZGluZw== IHs= IGdvdA== IGludGVyZXN0 IGtlZXA= IFg= IGVhcw== YWluaW5n IGNsYXNz 4oCm IE5v IHZhcg== IHNtYWxs YW1wbGU= QVQ= IGlkZQ== IFNv IHJlY2U= IHBvbGl0 IG1vdg== IHBsYW4= IHBlcmNlbnQ= aXZpbmc= IGNhbXA= IHBheQ== MTQ= c2M= aXNlZA== IHVudA== b25leQ== cGxveQ== PT09PQ== IGRpZG4= IEluZA== ZWxz ZXJ0YWlu IHBvcw== X19fXw== aXZlcg== IHByb2Nlc3M= IHByb2dyYW0= aWZpZWQ= IFJlcA== MTY= dXJv b2xvZ3k= YXR0ZXI= aW5h IG5hbWU= IEFsbA== IGZvdXI= IHJldHVybg== dmlvdXM= YnM= IGNhbGxlZA== IG1vdmU= IFNj aXJk IGdyb3Vw IGJyZQ== IG1lbg== IGNhcA== dGVu ZWU= IGRyaQ== bGVn aGVyZQ== dXRob3I= IHBhdA== IGN1cnJlbnQ= aWRlcw== IHBvcA== dG8= ZW50aW9u IGFsd2F5cw== IG1pbA== IHdvbWVu IDE2 IG9sZA== aXZlbg== cmFwaA== IE9y cm9y ZW50bHk= IG5lYXI= IEV4 cmVhbQ== c2g= IDE0 IGZyZWU= aXNzaW9u c3RhbmQ= IENvbg== YWxpdHk= dXNlZA== MTM= IGRlc2lnbg== IGNoYW5nZQ== IGNoYW5n IGJv IHZpcw== ZW1iZXI= IGJvb2s= cmVhZHk= IGtpbGw= MjU= cHBlZA== IGF3YXk= IGFibGU= IGNvdW50cnk= IGNvbnN0 YXJu IG9yZGVy QVI= aW9y aXVt b3J0aA== MTg= YWlsYWJsZQ== IHN3 IG1pbGxpb24= IDEz YXRpYw== dGVk IEdv IG9wZXI= ZW5n IHRoaW5n YWpvcg== Y29ub20= IENvbW0= IHdoeQ== dXJlZA== dXJhbA== IHNjaG9vbA== Ynk= IE1hcg== IGFmZg== IGRheXM= IGFubg== dXNo YW5l SWY= ZWc= IHByb2Y= IGhlYWx0aA== b3V0aA== QnV0 aW9uYWw= Liw= IHNvbA== IGFscmVhZHk= IDMw IGNoYXJhY3Q= SGU= IGZyaWVuZA== RVM= aWFucw== aWNsZQ== J2Q= IE9u IGxlYXN0 IHByb20= IGRy IGhpc3Q= aXRoZXI= IGVzdA== aXF1 MTc= c29u IHRlbGw= IHRhbGs= b2hu b2ludA== bGVjdGlvbg== QU4= IHVudGls YXVnaA== IGxhdGVy IHZl IHZpZXc= ZW5kaW5n aXZlZA== IHdvcmQ= d2FyZQ== IGNvc3Q= IGVub3VnaA== IGdpdmU= IFVuaXRlZA== IHRlY2hu YXJlbnQ= T1I= IHBhcg== IERy IDIwMTY= cmlzdA== ZXJpbmc= IMI= IGxhcmdl c2lkZQ== YWN5 Y2Nlc3M= IHdpbg== IGltcG9ydGFudA== IDE5OQ== IGRvZXNu IDE3 IGJ1c2luZXNz IGNsZWFy IHJlc2U= Iiw= dXJ5 IGVxdQ== YXN0ZXI= YWxm IEFtZXJpY2Fu bmVjdA== IGV4cGVjdA== aXZlcnNpdHk= IG9jYw== IEZs IGtpbmQ= IG1lYW4= IHBhc3Q= IGRldg== IGJhcw== bGV0 cmFmdA== IG9yZ2Fu IGRlbA== IHBlcmZvcm0= IHN0b3J5 IHNlYXNvbg== IENvbA== IGNsYWlt IGNhbWU= IHdpdGhpbg== IGxpbmU= IHByb2plY3Q= IEF0 IGNvbnRyb2w= ZW5kZWQ= IFN5 IGFpcg== aXphdGlvbg== ICo= bGV5 IG1vbmV5 aWRk WW91 Zm9y IGZhbWlseQ== IG1ha2luZw== IGJpdA== IHBvbGljZQ== IGhhcHBlbg== IHZlcnM= b255 dWZm IFdoZW4= IHNpdA== aWRlbw== bGY= aXNvbg== IHN1cmU= Z2lu IGFwcGVhcg== IGxpZ2h0 IGVz b2Y= IHdhdGVy IHRpbWVz bm90 IGdyb3c= IGNvbXBhbnk= IFRl b3dz IG1hcg== b3VyY2U= aW9s YXJt YnI= IGV4YW1wbGU= IGNvbmM= IGZvcmU= IFRv cHJv RU4= cmllcw== IDI1 IENhbg== bmV5 IGFjdHVhbGx5 IGV2ZXI= dXJpdHk= YWtlbg== YXBz IHRheA== IG1ham9y YW1h IG9mdGVu ZXJhbA== IGh1bWFu IGpvYg== aXN0ZXI= IGF2YWlsYWJsZQ== b2Ny ZW5u YWlk aXZpZA== IHJlY29yZA== PyI= IHNpbmc= IEFt aWRlbmNl IG5ld3M= c3Rlcg== IGVjb25vbQ== IGZvbGxvd2luZw== IEJy aXNpbmc= IGhvdXI= bW9zdA== dW1lbnQ= IHNleA== IGRlc2M= IGJlY29tZQ== IEVk IHRvb2s= IGhhdmluZw== IHByb2R1Y3Q= YXVsdA== QXM= YXJpbmc= IG1lYW5z IGhvcA== dW5l IGNobw== IGNlcnRhaW4= IG5vbg== IGRlYWw= MjQ= bGVtZW50 b2Np ZW5l IHNpZGU= IFBy IE1heQ== IHJlYXNvbg== dWVk Y2hlZA== dWxhdGlvbg== IGVsZWN0 IG9mZmljaWFs IHBvc3NpYmxl IGhvbGQ= YW5kcw== b3Rz IGNpdHk= b3JpZXM= IHNldmVy IGNoaWxkcmVu IG9uY2U= IGFjdGl2 bGVy IG5pZ2h0 aXRpb25z IEpvaG4= YXBl cGxheQ== IGRvbmU= IGxpbQ== IHdvcmtpbmc= IFByZXM= b3JsZA== ZWI= IENv IGJvZHk= YWlscw== dXRlcw== IE1y IHdoZXRoZXI= IGF1dGhvcg== cm9w IHByb3Blcg== IHNlZW4= KTs= IGZhYw== IFN1 IGNvbmQ= aXRpbmc= IGNvdXJzZQ== IH0= LS0tLS0tLS0tLS0tLS0tLQ== YWlnbg== IGV2ZW50 IGVuZw== IHBvdA== IGludGVybg== aWFt IHNob3J0 ZW1wdA== 44I= IEdvZA== aWxhcg== ODA= IG9yaWc= SVM= b3Vybg== YWJpbGl0eQ== aXRpdmU= IGRhbQ== IDEwMA== IHByZXNz IGRvaW5n IHByb3RlY3Q= cmluZw== IHRob3VnaHQ= IHF1ZXN0aW9u cmV3 IFdhcg== IHNldmVyYWw= IFN0YXRl IGdpdmVu IGZ1bmQ= IFR3 IHdlbnQ= YW5jZXM= d29yaw== cG9y bXk= NDA= IGFyZw== YXJ0bWVudA== dXN0b20= IHBvbGlj IG1lZXQ= IGNyZWF0 MjI= IFN0YXRlcw== IGdhbWVz cmF3 dXR1cmU= IHVuZGVyc3RhbmQ= dXJz IE9i bGlzaA== c3k= IG1ha2Vz IHdvbg== YWdvbg== IGh0dA== IGxvdmU= ZW50aWFs IGNvbXBsZXRl cGFy IElt QUw= IGFjY291bnQ= wqA= b3JlZA== dmVydA== IGlkZW50 IDIwMTU= IG90aGVycw== IE1pbg== aWJlcg== dmVyYWdl VGhlcmU= aXRpb25hbA== ZGQ= IHByb2I= IHlvdW5n IGFsb25n IGFjY29yZGluZw== IHlldA== IG1lbWJlcnM= IFdoYXQ= b2lk IE1hbg== QW5k IGFtb25n YWk= IGVtcGxveQ== IFJlcw== ID4= IGludm9s IGxvdw== YWY= IENhcg== IGhpZw== IE9uZQ== IFNlYw== aW5hdGlvbg== IGxpa2VseQ== IGFudA== YWdlZA== IFJ1c3M= IGJlbg== IHJlbGU= Rm9y YmFjaw== IE5vdA== IHByZXNpZGVudA== YmFsbA== IGFjY2Vzcw== aXZpZHVhbA== IERlbQ== IEV1cm8= NjA= IGtub3du aXJs IEdy IGVhcmx5 dXNl aWV0eQ== 4oCT IGZpZ2h0 IHNlbnQ= IHRvZGF5 IG1hcmtldA== Ii4= IGJhc2Vk IHN0cm9uZw== dXJ0aGVy IGRlYg== bWJlcg== IHByb2JsZW0= IGRlYXRo IHNvY2lhbA== aW1hdGU= QVM= b3J0dW4= IGNhbXBhaWdu ZXJ5 Q2g= IGV5 aWFsbHk= IG11cw== d2g= cG9z IGVy IHNhZg== IG1vbnRocw== aXJvbg== IHZpb2w= IGZpdmU= IHN0cmU= IHBsYXllcnM= aW5j YWxk eWVhcg== YXVu IHN1Y2Nlc3M= IHByZXNlbnQ= ZXJlbmNl IDIwMTQ= IHN1Z2c= IHBhcnRpY3VsYXI= IHRyeQ== IHN1Z2dlc3Q= IENocmlzdA== b25lcw== IHByaXY= MjM= IGNyaXQ= IGxhbmQ= IGxvY2Fs aWZ5 Mjk= IGF1dA== RUQ= IEd1 IG11bHQ= IHBvbGl0aWNhbA== IGFza2Vk IGZvcm1lcg== aXR0ZXI= cmlwdA== IGNsb3Nl IHByYWN0 IFlvcms= IGdldHRpbmc= IGFjcm9zcw== IGNvbWI= IGJlbGlldmU= IHo= IHRvZ2V0 IHRvZ2V0aGVy IENlbnQ= aXJj IGluZGl2aWR1YWw= IE1j Mjc= aXNr IEVuZw== IGZhY2U= IDI0 IHZhbHVl IGFyZWE= ZXY= IHdyaXQ= IFByZXNpZGVudA== IHZvdA== IGtleQ== IG1vbQ== cHV0 IGFueXRoaW5n IGV4cGVyaWVuY2U= YXR0bGU= IG1pbmQ= YWZm b21t IGZ1dHVyZQ== Z2Vk IGN1dA== IHRvdA== aXRjaA== IHZpZGVv IGludmVzdGln IG5ldA== IE15 cmljdA== aWVu Lik= IGltcHJv dGhvdWdo d2FyZHM= IGNvbm5lY3Q= IE1lZA== c2VsdmVz ZW5zaXZl bWI= b2Jlcg== YXRvcnM= QW4= IDUw IHJlZHU= cmVzZW50 IGFib3Zl IGZyZQ== IEV1cm9wZQ== c3c= IGFtb3VudA== IEFwcA== IGVpdGhlcg== IG1pbGl0 IGFuYWw= IGZhaWw= IEVu YWxlcw== IHNwZWNpYWw= IGJsYWNr SVQ= Y2hlcg== IGxvb2tpbmc= IGZpcmU= eW4= IGFsbW9zdA== b29u IHN0dWR5 IG1pc3M= Y2hlcw== cm93bg== IHRyZQ== IGNvbW11bml0eQ== IG1lZGlh IGZvb2Q= IGNvbWVz IFVuaXZlcnNpdHk= IHNpbmdsZQ== V2hhdA== dWx5 IGhhbGY= YWd1ZQ== aG9k IFJlcHVibGlj IHN0YXJ0ZWQ= IHF1aWNr b3Rv Ym9vaw== IGlzc3Vl aXRvcg== IGVsc2U= IGNvbnNpZGVy MjY= cm9kdQ== IHRha2Vu Mjg= OTk= IFdpdGg= IHRydWU= IHdh IHRyYWQ= IGFnbw== IG1lc3M= aWVm IGFkZGVk b2tl IGJhZA== IGZhdg== MzM= IHNpbWlsYXI= YXNr IERvbg== IGNoYXJhY3Rlcg== b3J0cw== IEhvdXNl IHJlcG9ydGVk IHR5cGU= dmFs aW9k IEhvd2V2ZXI= IHRhcmc= IGVudGlyZQ== cHBpbmc= IGhpc3Rvcnk= IGxpdmU= ZmZpYw== Li4uLi4uLi4= ZWRlcmFs IHRyeWluZw== IGRpc2N1c3M= IEhhcg== YWNlcw== bGlzaGVk IHNlbGY= b3Nw cmVzdA== IHJvb20= ZWx0 IGZhbGw= b2x1dGlvbg== IGV0 IHg= IGlzbg== IGlkZWE= Ym8= IHNvdW5k IERlcA== IHNvbWVvbmU= Y2lhbGx5 dWxseQ== IGZvYw== IG9iamVjdA== aWZ0 YXBlcg== IHBsYXllcg== IHJhdGhlcg== IHNlcnZpY2U= YXNoaW5n IERv IFBhcnQ= cnVn bW9u cGx5 IG1vcg== IG5vdGhpbmc= IHByb3ZpZGU= SUM= dW5n IHBhcnR5 IGV4aXN0 IG1hZw== NzA= IHJ1bA== IGhvdXNl IGJlaGluZA== IGhvd2V2ZXI= IFdvcmxk IHN1bQ== IGFwcGxpYw== IDs= IGZ1bmN0aW9u Z3I= IFBvbA== IGZyb250 MjAw IHNlcmllcw== IHRlbQ== IHR5cA== aWxscw== IG9wdA== IHBvaW50cw== IGJlbG93 aXR0ZWQ= IHNwZWNpZmlj IDIwMTc= dW1i IHJh IHByZXZpb3Vz IHByZXQ= cmVtZQ== IGN1c3RvbQ== IGNvdXJ0 IE1l IHJlcGw= IHdob2xl Z28= Y2Vy IHRyZWF0 IEFjdA== IHByb2JhYmx5 IGxlYXJu ZW5kZXI= IEFzcw== IHZlcnNpb24= bm93 IGNoZWNr IENhbA== UkU= bWluaXN0 T24= b3VyY2Vz IGJlbmVm IGRvYw== IGRldGVy IGVuYw== IHN1cGVy IGFkZHJlc3M= IHZpY3Q= IDIwMTM= IG1lYXM= dHI= IGZpZWxk V2hlbg== IHNpZ25pZmlj dWdl IGZlYXQ= IGNvbW1vbg== bG9hZA== IGJlZ2lu IGJyaW5n IGFjdGlvbg== ZXJtYW4= IGRlc2NyaWI= IGluZHVzdA== IHdhbnRlZA== cmllZA== bWluZw== IGF0dGVtcHQ= NDU= ZmVy IGR1ZQ== cmVzc2lvbg== IyM= IHNoYWxs IHNpeA== b28= IHN0ZXA= IHB1Yg== IGhpbXNlbGY= IDIz IGNvcA== IGRlc3Q= IHN0b3A= QUM= aWJpbGl0eQ== IGxhYg== aWN1bHQ= IGhvdXJz IGNyZWF0ZQ== IGZ1cnRoZXI= IEFtZXJpY2E= IENpdHk= IGRvdQ== aGVhZA== U1Q= IE5vcnRo Y2luZw== IG5hdGlvbmFs dWxl IEluc3Q= IHRha2luZw== IFF1 aXJ0 IHJlZA== IHJlc2VhcmNo dmlyb24= IEdl IGJyZWFr YW5h IHNwYWNl YXRlcmlhbA== IHJlY2VudA== IEFi IGdlbmVyYWw= IGhpdA== IHBlcmlvZA== IGV2ZXJ5dGhpbmc= aXZlbHk= IHBoeXM= IHNheWluZw== YW5rcw== IGNvdQ== IGN1bHQ= YWNlZA== ZWFs dWF0aW9u IGNvdW4= bHU= IGluY2x1ZGU= IHBvc2l0aW9u IEFmdGVy IENhbmFk IEVt IGltbQ== IFJlZA== IHBpY2s= IGNvbXBs IG1hdHRlcg== cmVn ZXh0 YW5ndQ== aXNj b2xl YXV0 IGNvbXBldA== ZWVk ZmVjdA== IDIx IFNlbg== IFRoZXNl YXNpbmc= IGNhbm5vdA== IGluaXQ= IHJlbGF0aW9ucw== YWNoZWQ= IGJhcg== IDQw IFRI IDIwMTI= IHZvbA== IGdyb3VuZA== IHNlY3VyaXR5 IHVwZA== aWx0 MzU= IGNvbmNlcm4= IEp1c3Q= IHdoaXRl IHNlZW1z IEhlcg== cGVjaWFsbHk= aWVudHM= IGFubm91bg== IGZpZw== aWdodHM= IHN0cmk= bGlrZQ== aWRz IHN1cw== IHdhdGNo IOI= IHdpbmQ= IENvbnQ= IGl0c2VsZg== IG1hc3M= QWw= eWxl aXF1ZQ== IE5hdGlvbmFs IGFicw== IHBhY2s= IG91dHNpZGU= IGFuaW0= IHBhaW4= ZXRlcg== IG1hbmFn ZHVjdA== b2du IF0= IFNlcHQ= c2Vj b2Zm IEphbg== IGZvb3Q= YWRlcw== IHRoaXJk IG1vdA== IGV2aWRlbmNl aW50b24= IHRocmVhdA== YXB0 cGxlcw== Y2xl IGxv IGRlY2w= IGl0ZW0= bWVkaQ== IHJlcHJlc2VudA== b21i YW1lcg== IHNpZ25pZmljYW50 b2dyYXBo c3U= IGNhbA== aXJlcw== MDAwMA== SUQ= QU0= IHNpbXBseQ== IGxvbmdlcg== IGZpbGU= T1Q= Y2hl U28= YXRlZw== b3Jn IEhpcw== IGVuZXI= IGRvbQ== IHVwb24= aWxp Ijoi IHRoZW1zZWx2ZXM= IGNvbWluZw== IHF1aXRl IGRpZmZpY3VsdA== IEJhcg== aWxpdGllcw== cmVs ZW5kcw== Y2lhbA== NjQ= IHdvbWFu cmFw eXI= IG5lY2Vzcw== aXBz IHRleHQ= IHJlcXVpcmU= IG1pbGl0YXJ5 IHJldmlldw== IHJlc3BvbnM= NzU= IHN1YmplY3Q= IGluc3RlYWQ= IGlzc3Vlcw== IGdlbg== Iiwi IG1pbnV0ZXM= IHdlYXA= cmF5 YW1lZA== dGltZQ== Ymw= SG93 IGNvZGU= IFNt IGhpZ2hlcg== IFN0ZQ== cmlz IHBhZ2U= IHN0dWRlbnRz IEludGVybg== IG1ldGhvZA== IEF1Zw== IFBlcg== IEFn IHBvbGljeQ== IFN3 IGV4ZWM= IGFjY2VwdA== dW1l cmlidXQ= IHdvcmRz IGZpbmFs IGNoYW5nZXM= IERlbW9jcg== IGZyaWVuZHM= IHJlc3BlY3Q= IGVw IGNvbXBhbg== aXZpbA== IGRhbWFnZQ== KioqKg== b2dsZQ== dmlyb25tZW50 IG5lZw== ZW50YWw= IGFw IHRvdGFs aXZhbA== ISI= bGlt IG5lZWRz IGFncmU= IGRldmVsb3BtZW50 IGFnZQ== aXBsZQ== MjE= IHJlc3VsdHM= IEFm U2g= IGd1bg== IE9iYW1h cm9sbA== IEA= IHJpZ2h0cw== IEJyaXQ= IHJ1bm5pbmc= IHdhc24= IHBvcnQ= IHJhdGU= IHByZXR0eQ== IHRhcmdldA== IHNhdw== IGNpcmM= IHdvcmtz aWNybw== YWx0 b3Zlcg== d3d3 VGhhdA== bGllcg== IGV2ZXJ5b25l dWRl IHBpZQ== aWRkbGU= cmFlbA== IHJhZA== IGJsb2Nr IHdhbGs= VG8= 44E= bmVz IEF1c3Q= YXVs cm90ZQ== IFNvdXRo ZXNzaW9u b3Bo IHNob3dz IHNpdGU= IGpv IHJpc2s= Y2x1cw== bHQ= IGluag== aWRpbmc= IFNwZQ== IGNoYWxs aXJt IDIy aXR0aW5n c3Ry IGh5 TEU= a2V5 IGJlZ2Fu YXR1cg== YXNoaW5ndG9u bGFt IERhdg== Yml0 IHNpemU= IFBhcg== Mzg= b3VybmFs ZmFjZQ== IGRlY2lzaW9u IGxhcmc= IGp1ZA== cmVjdA== IGNvbnRpbnVl IE9jdA== b3ZlcmVk IEludA== PT09PT09PT0= IHBhcmVudA== IFdpbGw= IGVhc3k= IGRydWc= YW5nZXI= IHNlbnNl IGRp aWRheQ== IGVuZXJneQ== aXN0aWM= IGFzc29jaQ== YXJ0ZXI= b2JhbA== ZWtz IEVs dXJjaA== IGdpcmw= b2U= aXRsZQ== IDI4 IENoZQ== IHJlcXVlc3Q= IHNvb24= IGhvc3Q= a3k= IHN0YXRlcw== b21lcw== IG1hdGVyaWFs bGV4 IG1vbWVudA== IGFuc3c= b25zZQ== IGVzcGVjaWFsbHk= IG5vcm0= IHNlcnZpY2Vz cGl0ZQ== cmFu IHJvbGU= NDQ= KTo= IGNyZWQ= Q2w= X19fX19fX18= IG1hdA== IGxvZw== IENsaW50b24= T1U= IG9mZmljZQ== IDI2 IGNoYXJn IHRyYWNr bWE= IGhlYXJ0 IGJhbGw= IHBlcnNvbmFs IGJ1aWxkaW5n bmE= c2V0 Ym9keQ== IEJsYWNr IGluY3JlYXNl aXR0ZW4= IG5lZWRlZA== MzY= MzI= PSI= IGxvc3Q= IGJlY2FtZQ== IGdyb3Vwcw== IE11cw== IHdyb3Rl IFBl IHByb3A= am95 w6k= IFdoaXRl IGRlYWQ= Lic= IGh0dHA= IHdlYnM= T1M= IGluc2lkZQ== IHdyb25n IHN0YXRlbWVudA== IC4uLg== eWw= IGZpbG0= IG11c2lj IHNoYXJl aWZpY2F0aW9u IHJlbGVhc2U= IGZvcndhcmQ= IHN0YXk= IGNvbXB1dA== aXR0ZQ== c2Vy IG9yaWdpbmFs IGNhcmQ= IGNhbmQ= IGRpdg== YXR1cmFs IGZhdm9y T00= IGNhc2Vz dXNlcw== IHNlY3Rpb24= IGxlYXZl Z2luZw== b3ZlZA== IFdhc2hpbmd0b24= Mzk= IEds IHJlcXVpcmVk YWN0aW9u YXBhbg== b29y aXRlcg== IEtpbmc= IGNvdW50cmllcw== IEdlcm1hbg== bGxpbmc= IDI3 MzQ= IHF1ZXN0aW9ucw== IHByaW0= IGNlbGw= IHNob290 IGFueW9uZQ== IFdlc3Q= IGFmZmVjdA== ZXBlbmQ= IG9ubGluZQ== IElzcmFlbA== IFNlcHRlbWJlcg== IGFiaWxpdHk= IGNvbnRlbnQ= aXNlcw== IHJldmU= IGxhdW4= IGluZGlj IGZvcmNl Y2FzdA== IHNvbGQ= YXZpbmc= Zmw= IHNvZnQ= IGNvbXBhbmllcw== Y2VlZA== IGFydGljbGU= IGF1ZA== IHJldg== IGVkdWM= IHBsYXlpbmc= MDU= IGhlbGQ= Y3Rvcg== IHJlbGVhc2Vk IGZlZGVyYWw= Mzc= IGFkbWluaXN0 IGludGVydmlldw== IGluc3RhbGw= IHJlY2VpdmVk IHNvdXJjZQ== dWs= UGg= IHNlcmlvdXM= IGNyZWF0ZWQ= IGNhdXNl IGltbWVkaQ== IGRlZmlu dWVs IERlcGFydG1lbnQ= Y3Rpb25z IENvdXI= IE5vdw== emU= aXRlcw== aXR1dGlvbg== IGxhdGU= IHNwZWFr bmVycw== IGxlZ2Fs YXJp IENvcg== IHdlZWtz IG1vZGVs IHByZWQ= IGV4YWN0 QkM= IEJ5 SU5H b3Npbmc= IHRha2Vz IHJlZ2FyZA== IG9wcG9ydHVu IHByaWNl IDE5OA== IEFwcg== ZnVsbHk= IG9yZA== IHByb2JsZW1z cnVjdGlvbg== aGFt IENvdW50 bGVnZQ== IGxlYWRlcnM= RVQ= bGV2 IGRlZXA= b2xvZ2ljYWw= ZXNl aGFwcw== IFNvbWU= IHBlcnM= IGNvbnRyYWN0 IHJlbGF0aW9uc2hpcA== c3A= b3Vk IGJhc2U= NDg= bWl0 QWQ= YW5jaWFs IGNvbnN1bQ== IHBvdGVudGlhbA== IGxhbmd1 cmVt ZXRo IHJlbGln cmVzc2Vk NjY= IGxpbms= IGxvd2Vy YXllcg== IEp1bmU= IGZlbQ== dW50 ZXJj dXJk IGNvbnRhY3Q= IGlsbA== IG1vdGhlcg== IGVzdGFi aHR0 IE1hcmNo IEJybw== IENoaW5h IDI5 IHNxdQ== IHByb3ZpZGVk IGF2ZXJhZ2U= YXNvbnM= IDIwMTE= IGV4YW0= bGlu NTU= bmVk IHBlcmZlY3Q= IHRvdQ== YWxzZQ== dXg= IGJ1eQ== IHNob3Q= IGNvbGxlY3Q= IHBob3Q= IHBsYXllZA== IHN1cnBy IG9mZmljaWFscw== IHNpbXBsZQ== YXZ5 IGluZHVzdHJ5 IGhhbmRz Z3JvdW5k IHB1bGw= IHJvdW5k IHVzZXI= IHJhbmdl dWFyeQ== IHByaXZhdGU= b3Bz ZWVz IHdheXM= IE1pY2g= IHZlaA== IGV4Y2VwdA== IHRlcm1z aW11bQ== cHBlcg== SU9O b3Jlcw== IERyYWdvbg== b3Vs IGRlbg== IHBlcmZvcm1hbmNl IGJpbGw= Y2ls NDc= IGVudmlyb25tZW50 IGV4Yw== YWRk IHdvcnRo IHBpY3Q= IGNoYW5jZQ== IDIwMTg= Ym9y IHNwZWVk aWN0aW9u IGFsbGVn IEphcGFu YXRvcnk= cmVldA== IG1hdGNo IElJ IHN0cnU= b3JkZXI= IHN0ZQ== IGxpdmluZw== IHN0cnVjdA== aW5v IHNlcGFy aGVybg== IHJlc3BvbnNl IGVuam95 IHZpYQ== QUQ= dW1lbnRz YWNlYm9vaw== IG1lbWJlcg== aWJy aXppbmc= IHRvb2w= IE1vbg== IFdoaWxl aG9vZA== IEFuZw== IERlZg== IG9mZmVy VHI= YXVy IHR1cm5lZA== IEp1bHk= ZG93bg== YW5jZWQ= IHJlY2VudGx5 IEVhcg== IGNl IFN0YXI= IENvbmc= cm91Z2h0 IGJsb29k IGhvcGU= IGNvbW1lbnQ= YWludA== IGFycmk= aWxlcw== IHBhcnRpY2lw b3VnaHQ= cmlwdGlvbg== MDg= NDk= IGdhdmU= IHNlbGVjdA== IGtpbGxlZA== c3ljaA== IGdvZXM= aWo= IGNvbGw= IGltcGFjdA== YXRpdmVz IFNlcg== MDk= IEF1Z3VzdA== IGJveQ== ZGU= IERlcw== IGZlbHQ= VVM= IGV4cGVjdGVk IGltYWdl IE1hcms= Y2NvcmRpbmc= b2ljZQ== RUM= IE1hZw== ZW5lZA== aG9sZA== IFBvc3Q= IHByZXZlbnQ= Tm8= IGludm9sdmVk IGV5ZXM= IHF1aWNrbHk= QXQ= dW5r IGJlaGF2 IHVy IGxlZA== Y29tZQ== ZXk= IGNhbmRpZA== IGVhcmxpZXI= IGZvY3Vz ZXR5 UHJv bGVkZ2U= aXhlZA== aWxsZWQ= IHBvcHVsYXI= QVA= IHNldHQ= bGlnaHQ= IHZhcmlvdXM= aW5rcw== IGxldmVscw== IHJvYWQ= ZWxsaWc= YWJsZXM= aGVs aXR0ZWU= IEdlbmVy eXBl IGhlYXJk aWNsZXM= IG1pcw== IHVzZXJz IFNhbg== IGltcHJvdmU= IGZhdGhlcg== IHNlYXJjaA== VGhleQ== dmls IHByb2Zlc3M= IGtuZXc= IGxvc3M= IGV2ZW50cw== NjU= IGJpbGxpb24= MDc= MDI= IE5ld3M= IEFN IGNvdmVy d2hlcmU= ZW5zaW9u IGJvdHQ= IGFyZWFz ZW5jZXM= b3Bl IFR3aXR0ZXI= YWVs IGdldHM= IEdvb2dsZQ== IHNu aWFudA== IHZvdGU= IG5lYXJseQ== IGluY2x1ZGVk IHJlY29nbg== eno= bW0= YWxlZA== IGhhcHBlbmVk MDQ= IGhvdA== IHdob3Nl IGNpdmls IHN1ZmY= b2Vz aXRpeg== IFN5cmk= IHJlc3BvbmQ= IGhvbg== IGZlYXR1cmVz IGVjb25vbWlj IEFwcmls cmlt IHRlY2hub2xvZ3k= IG9wdGlvbg== YWdpbmc= IHB1cmNo UmU= IGxhdA== Y2hpZQ== aXNs IHJlY29tbQ== dWY= IHRyYWluaW5n IGVmZmVjdHM= IGZhc3Q= IDIwMTA= IG9jY3Vy IHdlYnNpdGU= IGVtYWls IHNlbnM= ZWNo IG9pbA== IGluZmx1 IGN1cnJlbnRseQ== IFNjaA== IEFkZA== IGdvYWw= IHNjaWVudA== IGNvbnY= MTAw ZW15 IGRlY2lkZWQ= IHRyYXZlbA== IG1lbnRpb24= TEw= MDM= IGVsZWN0aW9u IHBob25l IGxvb2tz IHNpdHVhdGlvbg== IGN5 IGhvcg== YmVk IENvdXJ0 YWlseQ== YXZlcw== IHF1YWxpdHk= IENvbXA= d2lzZQ== IHRhYmxl IHN0YWZm IFdpbmQ= ZXR0 IHRyaWVk aWRlcmVk IGFkZGl0aW9u IGJveA== IGxhY2s= YXJpbHk= IHdpZGU= IG1pZA== IGJvYXJk eXNpcw== IGFudGk= aGE= IGRpZw== ZW5pbmc= IGRybw== Q29u Njg= IHNsb3c= YmFzZWQ= c2VxdQ== IHBhdGg= RXg= YWtlcg== IHdvcmtlZA== IHBlbg== IGVuZ2luZQ== IGxvb2tlZA== IFN1cGVy IFNlcnY= IHZpY3RpbQ== VW4= IHByb3BlcnR5 IGludHJvZHU= IGV4ZWN1dA== IFBN TGU= IGNvbG9y IE1vcmU= IDYw IG5ldHdvcms= IGRhdGU= Y3Vs aWRnZQ== IGV4dHJh MzE= IHNsZQ== Njc= IHdvbmQ= IHJlcG9ydHM= anVzdA== IEF1c3RyYWw= IGNhcGl0YWw= IGVucw== IGNvbW1hbmQ= IGFsbG93ZWQ= IHByZXA= IGNhcHQ= aGli IG51bWJlcnM= Y2hhbg== IGZhaXI= bXA= b21z IHJlYWNo V2l0aA== dGFpbg== IGJyb2Fk IGNvdXBsZQ== ZWNhdXNl bHlpbmc= IEZlYg== IHNjcmVlbg== IGxpdmVz IHByaW9y IENvbmdyZXNz QXI= IGFwcHJvYWNo IGVtZXI= YXJpZXM= IERpcw== c2Vydg== IE5l IGJ1aWx0 Y2llcw== IHJlcGU= IHJ1bGVz Zm9yY2U= IFBhbA== IGZpbmFuY2lhbA== IGNvbnNpZGVyZWQ= IENoYXI= bmNlcw== IElT IGJyb3VnaHQ= IGJp aWVycw== IFNpbQ== T1A= IHByb2R1Y3Rz IHZpc2l0 IGRvY3VtZW50 IGNvbmR1Y3Q= IGNvbXBsZXRlbHk= aW5pbmc= IENhbGlm aWJseQ== IHdyaXR0ZW4= IFRW ZW1lbnRz IGRyYXc= T25l IHB1Ymxpc2hlZA== IHNlY3JldA== cmFpbg== aGV0 IEZhY2Vib29r b25kYXk= IFVw IHNleHVhbA== IHRob3Vz IFBhdA== IGVzcw== IHN0YW5kYXJk IGFybQ== Z2Vz ZWN0aW9u IGZlbGw= IGZvcmVpZ24= YW5p IEZyaWRheQ== IHJlZ3VsYXI= aW5hcnk= IGluY3JlYXNlZA== IHVzdWFsbHk= IGRlbW9u IGRhcms= IGFkZGl0aW9uYWw= cm9s IE9m IHByb2R1Y3Rpb24= ISE= dW5kcmVk IGludGVybmF0aW9uYWw= aWRlbnRz IEZyZWU= cm91cA== IHJhY2U= IG1hY2g= IGh1Z2U= QWxs bGVhcg== b3ZlbWJlcg== IHRvd24= IGF0dGVudGlvbg== IE9mZg== eW9uZA== IFRoZW4= ZmllbGQ= IHRlcnJvcg== cmF6 IEJv IG1lZXRpbmc= IFBhcms= IGFycmVzdA== IGZlYXI= IGF3 IFZhbA== b3Jpbmc= Jyw= IGV4dHJlbWU= YXJy IHdvcmtlcnM= QWZ0ZXI= IDMx bmV0 YW1lbnQ= IGRpcmVjdGx5 IHBvcHVsYXRpb24= dWJl IE9jdG9iZXI= IElO IEphbnVhcnk= NTk= IERhdmlk IGNyb3Nz Y2VtYmVy IEZpcnN0 IG1lc3NhZ2U= aXJpdA== IG5hdGlvbg== IHBvbGw= aXNpb25z IGFuc3dlcg== bnk= aXNvZGU= IGNhcnJ5 IFJ1c3NpYQ== IGhlYXI= ZW5ndGg= cm95 IG5hdHVyYWw= aW5hbGx5 IGRvZw== bWl0dGVk IHRyYWRl IHN1YnN0 IG11bHRpcGxl IEFmcmlj IGZhbnM= IHNvcnQ= IGdsb2JhbA== aWNhdGlvbg== IFdlZA== YXJh IGFjaGll IGxhbmd1YWdl dmV5 IHRhbA== IG5lY2Vzc2FyeQ== IGRldGFpbHM= IHNlbg== IFN1bmQ= IFJlZw== IFJlYw== MDY= IHNpbA== cmVzc2l2ZQ== IG1lZGljYWw= dW5jaA== b3JuaWE= IHVuZA== Zm9ydA== b2Nrcw== IE1vbmRheQ== dWVzZGF5 Y3JhZnQ= Nzc= dXJ0 IHZlcg== IEhpbGw= IHJlY2VpdmU= IG1vcm5pbmc= ZXN0ZXJu IGJhbms= IHNhdA== aXJ0aA== IEhpZ2g= IGRldmljZQ== IFRIRQ== IENlbnRlcg== IHNhZmU= IHBsZQ== IENhbmFkYQ== IHN5c3RlbXM= IGFzc2lzdA== IHN1cnY= IGJhdHRsZQ== IFNvYw== dmVydGlz U2hl IHBhcGVy IGdyb3d0aA== IGNhc3Q= U2M= IHBsYW5z bGxlZA== IHBhcnRz IHdhbGw= IG1vdmVtZW50 IHByYWN0aWNl aW1hdGVseQ== IGRpc3BsYXk= IHNvbWV0aW1lcw== b21w IFBhdWw= IFllcw== a2luZw== NTg= b2x5 IHNvbg== IGF2b2lk b2tlcw== IEpldw== IHRvd2FyZHM= YXNj IC8v IEtvcmU= IHRhbGtpbmc= IGNvcnJlY3Q= IHNwZW50 aWNrcw== aWFibGU= ZWFyZWQ= IHRlcm0= IHdhbnRz b21pbmc= IHV0 IGRvdWI= IGZvcmNlcw== IHBsZWFzZQ== Njk= IE5vdmVtYmVy YXRmb3Jt b25kb24= IG9uZXM= IGltbWVkaWF0ZWx5 IFJ1c3NpYW4= IE1ldA== IGRlZw== IHBhcmVudHM= Q0g= IEFtZXJpY2Fucw== YWx5 IE1vZA== IHNob3du IGNvbmRpdGlvbnM= IHN0dWZm IHJlYg== IFlvdXI= IGluY2x1ZGVz bm93bg== IFNhbQ== IGV4cGVyaWVu bWlzc2lvbg== IEV2ZW4= YXVnaHQ= IGFubm91bmNlZA== IFJlcHVibGljYW4= IGRldGVybWlu IGRlc2NyaWJlZA== IENvdW50eQ== KCk= IGRvb3I= IGNoYW5nZWQ= IG5laWdo IEhlcmU= IGNsZWFu IHBhbg== IERlY2VtYmVy IEV1cm9wZWFu aXJpbmc= YXB0ZXI= IGNsdWI= IFR1ZXNkYXk= IHBhaWQ= IE5ldA== IGF0dGFja3M= IGNoYXJhY3RlcnM= IGFsb25l IGRpcmVjdG9y ZG9t IDM1 IGxvYWQ= IHJvdXQ= IENhbGlmb3JuaWE= IGZpbmFsbHk= IHJhYw== IGNvbnRy IGV4YWN0bHk= cmVzaA== cHJp IElzbGFt IG5hdHVyZQ== IGNhcmVlcg== IGxhdGVzdA== IGNvbnZlcnM= IFNs cG9zZQ== Y2llbnQ= IEluYw== aXZpdHk= ODg= IEF0dA== IE1vcg== bmVzZGF5 IHdlaWdodA== a2Vu IG5vdGU= IHRlYW1z IFw= YWlycw== IEdyZWVu IGh1bmRyZWQ= b25lbnQ= IHN0cmVuZw== IGNvbnNpc3Q= aWNhdGVk IHJlZ3Vs IGxpYw== YXN0aWM= IHRlbg== dXJzZGF5 ZWxsaWdlbmNl b3VzbHk= IFVL Qkk= IGNvc3Rz IGluZGVwZW5k IEFQ IG5vcm1hbA== IGhvbQ== IG9idmlvdXM= IHN3ZQ== IHN0YXI= IHJlYWR5 YWNoZXI= IGltcGxlbWVudA== Z2VzdA== IHNvbmc= IEdldA== IExhYg== IGludGVyZXN0aW5n dXNpbmc= IGdpdmluZw== IFN1bmRheQ== IGV0Yw== IG1pZGRsZQ== IHJlbWVtYmVy cmlnaHQ= b3NpdGlvbg== dXRpb25z IG1heA== NDY= IHlvdXJzZWxm IGRlbWFuZA== IHRyZWF0bWVudA== IGRhbmdlcg== IENvbnM= IGd1eQ== IEJyaXRpc2g= IHBoeXNpY2Fs IHJlbGF0ZWQ= IHJlbWFpbg== IGNvdWxkbg== IHJlZmVy IGNpdGl6 Ym94 RU5U Ym9hcmQ= IGlubg== SUc= ZXJv IFN0cmVldA== b3NwaXRhbA== cmVuY2g= Y2hlcnM= IHN0cmE= T0w= YWdlcg== IEFO IGVhc2lseQ== SUE= ZW5nZQ== aW55 IGNsb3M= b2NrZWQ= IHVzZXM= IENvdW4= SW0= dWlsZA== Pz8= bW9yZQ== IGFuZw== IHdyaXRl b2x1dGU= NTc= IGxlYWRlcg== IHJlYWRpbmc= PC8= IGF1dG9t ZXN0cw== NDM= IGxlZ2lzbA== IEdvbGQ= IGRlc2lnbmVk IFNU IExlZw== YXJlcw== IGJlYXV0 IFRleA== IGFwcGVhcnM= IHN0cnVnZw== IFJvbQ== IDAw IGNob2ljZQ== IHBhcnRpY3VsYXJseQ== IEZyb20= b3Blcg== IExvbmRvbg== YW5uZWQ= IGFsbG93cw== b2JpbGU= IGRpZmZlcmVuY2U= 4oCi IFZpZXc= IFdlZG5lc2RheQ== IGFsdGhvdWdo IHJlbGF0aXZl IGFwcGxpY2F0aW9u YXRldmVy IGFyZW4= IG15c2VsZg== IGltYWc= IGRpc2U= IHNvY2lldHk= IGZyZXF1 IEVuZ2xpc2g= IHBvb3I= IERheQ== IHdyaXRpbmc= IHNldmVu IHN0YXJ0aW5n IGJ1ZA== IHByaW50 IFRyYW5z dWZhY3Q= IFN0dWQ= bmV3 IGNyaW0= IGdpdmVz IGNvb2w= YWU= aWFuY2U= IEdlbmVyYWw= IHRoaW5raW5n IHNhdmU= IGxpbWl0ZWQ= IFBhcnR5 IG1lYW5pbmc= cGVu b3dlcnM= IEphY2s= RU0= IG5pY2U= cnVwdA== IGdhcw== IGVpZ2h0 IGZlZXQ= IGVmZm9ydA== IGlnbg== aWNpdA== Qmw= Y29pbg== IG9waW4= IGJyYWlu V2hpbGU= aGVzdA== IFRodXJzZGF5 IHdvdWxkbg== YXVnaHRlcg== IHRvdWNo bGVtZW50cw== IHN0dWRpZXM= IGNlbnRlcg== Y29udA== b3JnZQ== IGNvbXB1dGVy IGludmVzdGlnYXRpb24= UGw= b3Jrcw== IDIwMDg= IGluY3JlYXNpbmc= IHN0b3Jl IGNvbW1lbnRz IGJhbA== bWVu IGRvbGw= IGxpYmVy IHdpZmU= IGxhd3M= YXR1cmRheQ== aXRuZXNz IG1vZGVybg== IFNr IGFkbWluaXN0cmF0aW9u IG9wcG9ydHVuaXR5 IHNhbA== IHBvd2VyZnVs TXk= IGNsYWltcw== IEVhcnRo b3Jkcw== IHRpdGxl IGVzYw== bmFtZQ== Tm90 b21lbg== IGJleW9uZA== IGNhbWVy IHNlbGw= aXR1dGU= ZWFyY2g= IGFwcGw= aW1lbnQ= NDI= IEFydA== IHVuZg== IHZpb2xlbmNl dXJn IEVhc3Q= IGNvbXBhcmVk IG9wdGlvbnM= IHRocm91Z2hvdXQ= IHZz aWdy Lls= YWNoZXM= Nzg= IGZpbGVz Rkw= RUw= YXJpYW4= IEphbWVz IEFpcg== YW5jaA== IGRldGFpbA== IHBpZWNl UFM= IG5hbWVk IGVkdWNhdGlvbg== IGRyaXZl IGl0ZW1z IHN0dWRlbnQ= aWNlZA== Ojo= aWNv IHRocm93 IHNjZW5l IGNvbXBsZXg= IDIwMDk= IHByZWM= IEJyZQ== Nzk= IGNvbmNlcHQ= IHN0YXR1cw== YW1pbmc= IGRpZWQ= IGtub3dsZWRnZQ== IGJlZ2lubmluZw== T0Q= cnVhcnk= IGNlcnRhaW5seQ== IGd1eXM= IHNsaWdodA== aW5u b3VuZHM= IGZpbmU= IGZhdA== aWNhdGlvbnM= IHBlcmhhcHM= IEFudA== IGluY29tZQ== IGh0dHBz IG1ham9yaXR5 cG9ydHM= c3Rvbg== IGdyZWF0ZXI= IGZlZWQ= ZW50aWFsbHk= IHNhZmV0eQ== IHVuaXF1ZQ== YW5kb20= IGdvbmU= IHNob3dlZA== IGhpc3Rvcg== IGNvdW50ZXI= aXVz aWRh IGxlYWRpbmc= aXBl IHNlbmQ= IERvbmFsZA== ZXJ2ZQ== IGRlZmVuc2U= aW5lc2U= IHllcw== IEZpcmU= IE11c2xpbQ== cmFx IGNvbnRpbnVlZA== b3No IHByb3ZpZGVz IHByaXNvbg== IFByZQ== IGhhcHB5 IGVjb25vbXk= IHRydXN0 YWdz IEdhbWU= IHdlYXBvbnM= dW1hbg== IENsZQ== aXRhdGlvbg== IGFuYWx5c2lz IFRpbWVz IHNjaWVuY2U= LT4= IGZpZ3VyZQ== IGRpc2FwcA== ZW50eQ== IHNvZnR3YXJl IHVsdA== IG9mZmljZXJz TmV3 SXM= IHJlbWFpbnM= IEluZGlh IHBzeWNo cmllZg== IGNhdA== ZXNj IG9ic2Vydg== IHN0YWdl IERhcms= IGVudGVy Y2hhbmdl IHBhc3NlZA== IGRlc3BpdGU= IE91dA== IG1vdmll cnM= IHZvaWNl bWluZQ== IFBsYXk= IHRvd2FyZA== IFRlcg== IHJlZ2lvbg== IHZhbHVlcw== b3J0ZXJz IG1vdW50 IG9mZmljZXI= IE90aGVy YmFu IGhvdXM= d29vZA== cm9vbQ== SVY= IFN1bg== c2Vl IE92ZXI= cm9n OTA= IGxheQ== IFR1cg== YXdu IHByZXNzdXJl IFN1Yg== IGJvb2tz ZWRvbQ== IFNhbmQ= QUE= YWdv IHJlYXNvbnM= Zm9yZA== IGFjdGl2aXR5 VVQ= Tm93 IFNlbmF0ZQ== Y2VsbA== bmlnaHQ= IGNhbGxz aW50ZXI= IGxldHRlcg== IFJvYg== IEpl IGNob29zZQ== IExhdw== R2V0 QmU= IHJvYg== IHR5cGVz IHBsYXRmb3Jt IHF1YXJ0ZXI= UkE= IFRpbWU= IG1heWJl IENy OTU= cHJl IG1vdmluZw== IGxpZg== IGdvbGQ= IHNvbQ== IHBhdGllbnRz IHRydXRo IEtl dXJhbmNl YW50bHk= bWFy IGNoYXJnZQ== IEdyZWF0 IGNlbGU= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHJvY2s= cm9pZA== YW5jeQ== IGNyZWRpdA== YXVk Qnk= IEV2ZXJ5 IG1vdmVk aW5nZXI= cmlidXRpb24= IG5hbWVz IHN0cmFpZ2h0 IEhlYWx0aA== IFdlbGw= IGZlYXR1cmU= IHJ1bGU= IHNjaGU= aW5hdGVk IE1pY2hhZWw= YmVyZw== NDE= aWxlZA== YmFuZA== IGNsaWNr IEFuZ2Vs b25lbnRz wq0= IElyYXE= IFNhdHVyZGF5 IGF3YXJl cGFydA== IHBhdHRlcm4= T1c= IExldA== IGdyYWQ= aWduZWQ= IGFzc29jaWF0ZWQ= IHN0eWxl bm8= aWF0aW9u YWl0aA== aWxpZXM= IHN0b3JpZXM= dXJhdGlvbg== IGluZGl2aWR1YWxz IOKApg== bWlzcw== IEFzc29jaQ== aXNoaW5n YWJ5 IHN1bW1lcg== IEJlbg== IDMy IGFyY2g= dXR5 IFRleGFz aG9s IGZ1bGx5 IG1pbGw= IGZvbGxvd2Vk IEJpbGw= IEluZGlhbg== IFNlY3JldA== IEJlbA== IEZlYnJ1YXJ5 IGpvYnM= IHNlZW1lZA== IEdvdmVybg== aXBwZWQ= IHJlYWxpdHk= IGxpbmVz IHBhcms= IG1lYXN1cmU= IE91cg== SU0= IGJyb3RoZXI= IGdyb3dpbmc= IGJhbg== IGVzdGlt IGNyeQ== IFNjaG9vbA== IG1lY2hhbg== IE9G IFdpbmRvd3M= IHJhdGVz IE9o IHBvc2l0aXZl IGN1bHR1cmU= aXN0aWNz aWNh IGhhcg== eWE= aXRlbHk= aXBw IG1hcA== ZW5jaWVz IFdpbGxpYW0= SUk= YWtlcnM= NTY= IE1hcnQ= IFJlbQ== IGFsdGVybg== aXR1ZGU= IGNvYWNo cm93ZA== RG9u IGtpZHM= IGpvdXJuYWw= IGNvcnBvcg== IGZhbHNl IHdlYg== IHNsZWVw IGNvbnRhaW4= IHN0bw== IGJlZA== aXZlcnNl IFJpY2g= IENoaW5lc2U= IHB1bg== IG1lYW50 a25vd24= IG5vdGljZQ== IGZhdm9yaXRl YXZlbg== IGNvbmRpdGlvbg== IHB1cnBvc2U= KSk= IG9yZ2FuaXphdGlvbg== IGNoYWxsZW5n IG1hbnVmYWN0 IHN1c3A= IEFj IGNyaXRpYw== dW5lcw== dWNsZWFy IG1lcg== dmVudGlvbg== IDgw IG1pc3Q= IFVz IFRvcg== aHR0cA== b2xm IGxhcmdlcg== IGFkdmFudA== IHJlc2Vhcg== IGFjdGlvbnM= bWw= IGtlcHQ= IGFpbQ== LCc= Y29s IGJlbmVmaXRz aWZ5aW5n IGFjdHVhbA== IEludGVybmF0aW9uYWw= IHZlaGljbGU= IGNoaWVm IGVmZm9ydHM= IExlYWd1ZQ== IE1vc3Q= IHdhaXQ= IGFkdWx0 IG92ZXJhbGw= IHNwZWVjaA== IGhpZ2hseQ== IGZlbWFsZQ== IGVycm9y IGVmZmVjdGl2ZQ== NTQ= IGVuY291cg== d2VsbA== IGZhaWxlZA== IGNvbnNlcnY= IHByb2dyYW1z IHRyb3U= IGFoZWFk NTAw dmVydGlzZW1lbnQ= SVA= IEZvdW5k cGly ICU= IGNyaW1l YW5kZXI= IGxvY2F0aW9u IElyYW4= IGJlaGF2aW9y YXppbmc= IHJhcmU= IGVtYg== IGNhdXNlZA== IHNoaXA= IGFjdGl2ZQ== IGNvbnRyaWJ1dA== IGdyZWVu IGFjcXU= IHJlZmxlY3Q= dmVudWU= IGZpcm0= IGJpcnRo XS4= IGNsZWFybHk= IGVtb3Q= IGFnZW5jeQ== cmlhZ2U= IG1lbW9yeQ== OTg= U0E= IFNlZQ== YWNpbmc= Q0M= IGJpZ2dlc3Q= IHJhcA== IGJhc2lj IGJhbmQ= ZWF0 IHN1c3BlY3Q= IE1hYw== IDkw bWFyaw== aXN0YW4= IHNwcmVhZA== YW1z a2k= YXN5 cmF2 IFJvYmVy IGRlbW9uc3Ry cmF0ZWQ= IGFic29sdXRl IHBsYWNlcw== IGltcGw= aWJyYXJ5 IGNhcmRz IGRlc3Ryb3k= IHZpcnQ= dmVyZQ== IGFwcGVhcmVk eWFu cG9pbnQ= IGJlZw== IHRlbXBlcg== c3Bl YW50ZWQ= ZWFycw== IERpcmVjdA== IGxlbmd0aA== IGJsb2c= YW1i IGludGVn IHJlc291cmNlcw== YWNj aWZ1bA== IHNwb3Q= IGZvcmNlZA== IHRob3VzYW5kcw== IE1pbmlzdGVy IHF1YWw= IEZyZW5jaA== YXRpY2FsbHk= IGdlbmVyYWxseQ== IGRyaW5r IHRodXM= SUw= b2Rlcw== IGFwcHJvcHJp IFJlYWQ= IHdob20= IGV5ZQ== IGNvbGxlZ2U= IDQ1 aXJlY3Rpb24= IGVuc3VyZQ== IGFwcGFyZW50 aWRlcnM= IHJlbGlnaW91cw== IG1pbm9y b2xpYw== IHRybw== IFdoeQ== cmlidXRl bWV0 IHByaW1hcnk= IGRldmVsb3BlZA== IHBlYWNl IHNraW4= c3Rl YXZh IGJsdWU= IGZhbWlsaWVz IGly IGFwcGx5 IGluZm9ybQ== IFNtaXRo Q1Q= aWk= IGxpbWl0 IHJlc2lzdA== Li4uLi4uLi4uLi4uLi4uLg== dW1u IGNvbmZsaWM= IHR3ZQ== dWRk IFRvbQ== IGxpdGVy cXVl Ym9u IGhhaXI= IGV2ZW50dWFsbHk= IHB1cw== IGhlbHBlZA== IGFnZw== b3JuZXk= IEFwcGxl IGZpdA== IFN1cg== IHByZW0= IHNhbGVz IHNlY29uZHM= IHN0cmVuZ3Ro IGZlZWxpbmc= v70= IHRvdXI= IGtub3dz b29t IGV4ZXJj IHNvbWV3 77+9 Pj4= IHNwb2tlcw== IGlkZWFz IHJlZ2lzdA== c29mdA== IERlbA== IFBD IHByb3Bvcw== IGxhdW5jaA== IGJvdHRvbQ== VEg= IFBsZWFzZQ== dmVzdA== aXR6 IEludGVy IHNjcmlwdA== IHJhdA== YXJuaW5n IGls IEplcg== IEFyZQ== IHdoYXRldmVy b2tlbg== Y2llbmNl IG1vZGU= IGFncmVl IHNvdXJjZXM= IGluaXRpYWw= IHJlc3RyaWN0 IHdvbmRlcg== dXNpb24= IyMjIw== IFNpbA== dmlsbGU= IGJ1cm4= dHc= YXNpb24= IMKj IG5vcg== dWluZw== IHJlYWNoZWQ= IHN1bg== IGNhdGVn aWdyYXRpb24= IGNvb2s= IHByb21vdA== IG1hbGU= IGNsaW1hdGU= IGZpeA== IGFsbGVnZWQ= VVI= YWxsZWQ= IGltYWdlcw== Q29udA== b3Rh IHNjaG9vbHM= aW9z IGRyb3A= IHN0cmVhbQ== IE1v IHByZXZpb3VzbHk= YWxpbmc= IHBldA== IGRvdWJsZQ== IChA YW5uZWw= IGRlZmF1bHQ= dGllcw== IHJhbms= IERlYw== IENvdW5jaWw= IHdlYXBvbg== IHN0b2Nr IGFuYWx5 IFN0cg== IHBpY3R1cmU= IFBvbGljZQ== ZmVyZW5jZQ== IGNlbnR1cnk= IGNpdGl6ZW5z IG9udG8= IGV4cGFuZA== IGhlcm8= IFNvbA== IHdpbGQ= IHVwZGF0ZQ== IGN1c3RvbWVycw== cm9udA== ZGVm IGxpaw== IGNyaW1pbmFs IENocmlzdGlhbg== U1A= NzY= IGxlYXZpbmc= IG90aGVyd2lzZQ== IERpc3Q= IGJhc2lz NTI= NTM= aWNpcA== IEJlcg== IHJlY29tbWVuZA== IGZsb29y IGNyb3dk b2xlcw== IDcw IGNlbnRyYWw= IEV2 IGRyZWFt IGRvd25sb2Fk IGNvbmZpcg== IFRob20= IHdpbmRvdw== IGhhcHBlbnM= IHVuaXQ= IHRlbmQ= IHNwbA== IGJlY29tZXM= IGZpZ2h0aW5n IHByZWRpY3Q= IFByZXNz IFBvd2Vy IGhlYXZ5 YWtlZA== IGZhbg== b3J0ZXI= YXRlZ3k= QkE= aXplcw== IHNwZW5k SGVyZQ== IDIwMDc= IGFkb3A= IEhhbQ== IGZvb3RiYWxs IFBvcnQ= b2RheQ== NTE= YW1waW9ucw== IHRyYW5zZmVy aHQ= IDM4 dGVybQ== YWNpdHk= IGJ1cg== XSw= dGVybmFs cmln YnV0 IHRoZXJlZm9yZQ== IEJlY2F1c2U= cmVzcA== cmV5 IG1pc3Npb24= U29tZQ== IG5vdGVk IGFzc3Vt IGRpc2Vhc2U= IGVkaXQ= IHByb2dyZXNz cmQ= IEJyb3du b2NhbA== IGFkZGluZw== IHJhaXNlZA== IEFueQ== IHRpY2s= IHNlZWluZw== IFBlb3BsZQ== IGFncmVlbWVudA== IHNlcnZlcg== IHdhdA== IGRlYmF0ZQ== IHN1cHBvc2Vk aWxpbmc= IGxhcmdlc3Q= IHN1Y2Nlc3NmdWw= IFByaQ== IERlbW9jcmF0aWM= IGp1bXA= IFN5cmlh IG93bmVycw== IG9mZmVycw== IHNob290aW5n IGVmZmlj c2V5 IGhhdmVu dmVyc2U= dGVyZWQ= IExpZ2h0 aW1hbA== IEJpZw== IGRlZmVuZA== IGJlYXQ= IHJlY29yZHM= JSk= IHNjZW4= IGVtcGxveWVlcw== IGRldmljZXM= aGVt IGNvbW1lcg== IE1leA== IGJlbmVmaXQ= IFByb2Y= IGlsbGVn IHN1cmZhY2U= IEFsc28= IGhhcm0= aW5nbHk= d2lkZQ== IEFsZXg= IHNodXQ= IEN1cg== IGxvc2U= cG0= IGNoYWxsZW5nZQ== c2VtYg== IHN0YXRpb24= IGludGVsbGlnZW5jZQ== IGFjY3Vy IEZsb3I= IHJlcXVpcmVz IE1hbA== YnVt IGhvc3BpdGFs IHNwaXJpdA== IG9mZmVyZWQ= IHByb2R1Y2U= IENvbW11bg== IGNyZWF0aW5n IGNyaXM= c3BlY3Q= IGVuZGVk IGRhaWx5 IHZvdGVycw== bGFuZHM= aWFz aWg= b25h IHNtYXJ0 IE9mZmljZQ== IExvcmQ= cmlhbA== IEludGVybmV0 IGNpcmN1bQ== IGV4dHJlbWVseQ== Jy4= IG9waW5pb24= IE1pbA== IGdhaW4= QlM= IEZpbg== eXA= IHVzZWZ1bA== IGJ1ZGdldA== IGNvbWZvcnQ= aXNm IGJhY2tncm91bmQ= ZWxpbmU= IGVwaXNvZGU= IGVuZW15 IHRyaWFs IGVzdGFibGlzaA== ZGF0ZQ== IENhcA== IGNvbnRpbnVlcw== IHNob3dpbmc= IFVuaW9u d2l0aA== IHBvc3RlZA== IFN5c3RlbQ== IGVhdA== cmlhbg== IHJpc2U= IEdlcm1hbnk= aWxz IHNpZ25lZA== IHZpbGw= IGdyYW5k bW9y IEVuZ2xhbmQ= IHByb2plY3Rz dW1iZXI= IGNvbmZlcmVuY2U= emE= IHJlc3BvbnNpYmxl IEFyYWI= IGxlYXJuZWQ= 4oCU4oCU aXBwaW5n IEdlb3JnZQ== T0M= IHJldHVybmVk IEF1c3RyYWxpYQ== IGJyaWVm UXU= IGJyYW5k aWxsaW5n YWJsZWQ= IGhpZ2hlc3Q= IHRyYWlu IENvbW1pc3Npb24= d2hpbGU= IG5vbQ== Y2VwdGlvbg== IG11dA== IEJsdWU= IGluY2lkZW50 dmFudA== ODY= IElE IG51Y2xlYXI= NzQ= IExpa2U= IFJF IE1pY3Jv bGk= bWFpbA== IGNoYXJnZXM= ODk= IGFkanVzdA== YWRv IGVhcnRo TkE= IHByaWNlcw== UEE= IGRyYWZ0 IHJ1bnM= IGNhbmRpZGF0ZQ== ZW5zZXM= IG1hbmFnZW1lbnQ= IFBoaWw= IE1pc3M= IHRlYWNo Z3JhbQ== IHVuZGVyc3RhbmRpbmc= YWl0 aWNhZ28= QWRk IEVw c2VjdXQ= IHNlcGFyYXRl IGluc3RhbmNl IGV0aA== IHVubGVzcw== KioqKioqKio= IEZvcmU= aW5hdGU= IG9wZXJhdGlvbnM= U3A= IGZhaXRo Z2Fy IENodXJjaA== cm9uaWM= IGNvbmZpZw== b3N1cmU= IGFjdGl2aXRpZXM= IHRyYWRpdGlvbmFs IDM2 IGRpcmVjdGlvbg== IG1hY2hpbmU= IHN1cnJvdW5k IHB1c2g= dW5jdGlvbg== IEVV IGVhc2llcg== IGFyZ3VtZW50 R0I= IG1pY3Jv IHNwZW5kaW5n aXphdGlvbnM= IHRoZW9yeQ== YWRvdw== IGNhbGxpbmc= IExhc3Q= IGRlcg== IGluZmx1ZW5jZQ== IGNvbW1pdA== IHBob3Rv IHVuYw== aXN0cnk= Z24= YXN0ZQ== YWNrcw== IGRpc3A= YWR5 ZG8= IEdvb2Q= IGA= IHdpc2g= IHJldmVhbGVk wqDCoA== bGln IGVuZm9yY2U= IENvbW1pdHRlZQ== IGNoZW0= IG1pbGVz IGludGVyZXN0ZWQ= IHNvbHV0aW9u aWN5 aW5jdA== IC0+ IERldA== IHJlbW92ZWQ= IGNvbXBhcg== ZWFo IHBsYW50 IFNpbmNl IGFjaGlldmU= IGFkdmFudGFnZQ== IHNsaWdodGx5 YmluZw== IHBsYWNlZA== dW5kZXI= MjAxNQ== IE1hZA== IHRpbQ== b3Nlcw== IGNydQ== IFJvY2s= IG1vc3RseQ== IG5lZ2F0aXZl IHNldHRpbmc= IHByb2R1Y2Vk IG11cg== IGNvbm5lY3Rpb24= IE1lcg== IGRyaXZlcg== IGV4ZWN1dGl2ZQ== IGFzc2F1bHQ= IGJvcm4= IFZlcg== dGFpbmVk IHN0cnVjdHVyZQ== IHJlZHVjZQ== IGRlY2FkZXM= IGRlZA== dWtl IE1hbnk= aWRkZW4= IGxlYWd1ZQ== U2U= IGpvaW4= IGRpc2Nv IGRpZQ== Y2tz YWN0aW9ucw== IGFzc2Vzcw== YWdu IGdvYWxz b3Vycw== SVI= IHNlbmlvcg== aWxsZXI= bW9k aXBtZW50 b2NvbA== dXk= IFF1ZQ== IHBhcnRpZXM= aXJnaW4= IGxlYXJuaW5n aXRhYmxl IHN0cmVldA== IGNhbWVyYQ== QXBw IHNraWxscw== YnJl Y2lvdXM= IGNlbGVicg== IEZyYW5j IGV4aXN0aW5n IHdpbGxpbmc= bG9y IGlk IFNwYWNl IGNyaXRpY2Fs IExh b3J0dW5hdGVseQ== IHNlcnZl IGNvbGQ= IHNwZWNpZXM= VFM= IGFuaW1hbHM= IEJheQ== IG9sZGVy IFVuZGVy ZXN0aWM= IFRyZQ== IHRlYWNoZXI= IHByZWZlcg== dmlz IHRocmVhZA== IE1hdHQ= IG1hbmFnZXI= 44O7 IHByb2Zlc3Npb25hbA== IFZvbA== IG5vdGVz VGhlc2U= dWxh IGZyZXNo ZW50ZWQ= dXp6 ZWR5 Y2x1c2lvbg== IFJlbA== IGRvdWJ0 RU8= IG9wZW5lZA== IEJpdA== QWR2ZXJ0aXNlbWVudA== IGd1ZXNz IFVO IHNlcXU= IGV4cGxhaW4= b3R0ZW4= IGF0dHJhY3Q= YWtz IHN0cmluZw== IGNvbnRleHQ= b3NzaWJsZQ== IFJlcHVibGljYW5z IHNvbGlk IGNpdGllcw== IGFza2luZw== IHJhbmRvbQ== dXBz dXJpZXM= YXJhbnQ= ZGRlbg== Z2w= IEZsb3JpZGE= IGRlcGVuZA== IFNjb3R0 IDMz IGlU aWNvbg== IG1lbnRpb25lZA== IDIwMDA= IGNsYWltZWQ= IGRlZmluaXRlbHk= dWxm IGNvcmU= IG9wZW5pbmc= IENvbnN0 d2hpY2g= IFRyYQ== QUc= NzI= IGJlbGlldmVk YWRh IDQ4 IFNlY3VyaXR5 eXJpZ2h0 IFBldA== IExvdQ== IGhvbGRpbmc= PT09PT09PT09PT09PT09PQ== IGljZQ== IGJyb3c= IGF1dGhvcml0aWVz aG9zdA== d29yZA== IHNjb3Jl IERpdg== IGNlbGxz IHRyYW5zbA== IG5laWdoYm9y IHJlbW92ZQ== dWN0 IGRpc3RyaWN0 IEFjY29yZGluZw== IHdvcnNl IGNvbmNlcm5z IHByZXNpZGVudGlhbA== IHBvbGljaWVz IEhhbGw= NzM= IGh1cw== QVk= IDIwMDY= IEp1ZA== IGluZGVwZW5kZW50 IEp1c3RpY2U= aWxpYXI= cHJpbnQ= aWdodGVy IHByb3RlY3Rpb24= emVu IHN1ZGRlbg== aG91c2U= IEplcw== UFI= IEluZg== IGJ1bA== IF8= IFNlcnZpY2U= IFBS IHN0cmF0ZWd5 ZmZlY3Q= IGdpcmxz IG1pc3Npbmc= b3lhbA== IFRlYW0= dWxhdGVk IGRhdA== IHBvbGl0aWNz YWJvcg== QWNjb3JkaW5n IHNwZWxs IGdyYXBo b3J0aGVybg== VEM= QWI= IGxhYm9y aXNoZXI= IGtpY2s= IGlUdW5lcw== IHN0ZXBz cG9zZXM= IHNtYWxsZXI= RW4= YmVydA== IHJvbGw= IHJlc2VhcmNoZXJz IGNsb3NlZA== IHRyYW5zcG9ydA== IGxhd3k= X19fX19fX19fX19fX19fXw== IENoaWNhZ28= IGFzcGVjdA== IG5vbmU= IG1hcnJpYWdl OTY= IGVsZW1lbnRz IEZyZQ== IFNhbA== IGRyYW0= RkM= dG9w ZXF1 IGhlYXJpbmc= IHN1cHBvcnRlZA== IHRlc3Rpbmc= Y29ob2w= IG1hc3NpdmU= IHN0aWNr IGd1YXJk aXNjbw== cGhvbmU= RnJvbQ== SG93ZXZlcg== IGJvcmRlcg== IGNvcHk= b2dyYXBoeQ== bGlzdA== NzE= IG93bmVy Y2xhc3M= cnVpdA== cmF0ZQ== IE9uY2U= IGRpZ2l0YWw= IHRhc2s= RVJT IGluY3JlZA== dGVz Kys= IEZyYW5jZQ== IGJyZWF0 b3ds IGlzc3VlZA== IFdlc3Rlcm4= IGRldGVjdA== IHBhcnRuZXJz IHNoYXJlZA== IENhbGw= IGNhbmNlcg== YWNoZQ== cmliZQ== IGV4cGxhaW5lZA== IGhlYXQ= eyI= IGludmVzdG1lbnQ= IEJvb2s= IHdvb2Q= IHRvb2xz IEFsdGhvdWdo IGJlbGllZg== IGNyaXNpcw== IGdl IE1Q IG9wZXJhdGlvbg== dHlwZQ== fn4= Z2E= IGNvbnRhaW5z YW50YQ== IGV4cHJlc3M= IEdyb3Vw IEpvdXJuYWw= a2E= IGFtYg== IFVTQQ== IGZpbmRpbmc= IGZ1bmRpbmc= aG93 IGVzdGFibGlzaGVk aWRlb3M= IGRlZ3JlZQ== IGRhbmdlcm91cw== YW5naW5n IGZyZWVkb20= cHBvcnQ= b3V0aGVybg== IGNodXJjaA== IGNhdGNo IFR3bw== IHByZXNlbmNl IEd1YXJk VXA= IGF1dGhvcml0eQ== IFByb2plY3Q= IGJ1dHRvbg== IGNvbnNlcXU= IHZhbGlk IHdlYWs= IHN0YXJ0cw== IHJlZmVyZW5jZQ== IE1lbQ== Iik= VU4= b3JhZ2U= IE9wZW4= IGNvbGxlY3Rpb24= eW0= Z2VuY3k= IGJlYXV0aWZ1bA== cm9z IHRlbGxz IHdhaXRpbmc= bmVs IHByb3ZpZGluZw== IERlbW9jcmF0cw== IGRhdWdodGVy IG1hc3Rlcg== IHB1cnBvc2Vz IEphcGFuZXNl IGVxdWFs IHR1cm5z IGRvY3VtZW50cw== IHdhdGNoaW5n UmVz IHJhbg== MjAxNA== IHJlamVjdA== IEtvcmVh IHZpY3RpbXM= TGV2ZWw= ZXJlbmNlcw== IHdpdG5lc3M= IDM0 IHJlZm9ybQ== Y29taW5n IG9jY3Vw IGNhdWdodA== IHRyYWZmaWM= YWRpbmc= IG1vZGVscw== YXJpbw== IHNlcnZlZA== IGJhdHRlcg== dWF0ZQ== IFNlY3JldGFyeQ== IGFncmVlZA== IHRydWx5 eW5hbQ== IFJldA== IHVuaXRz IFJlc2VhcmNo aGFuZA== YXppbmU= IE1pa2U= IHZhcmlldHk= b3RhbA== IGFtYXppbmc= IGNvbmZpcm1lZA== IGVudGlyZWx5 IHB1cmNoYXNl IGVsZW1lbnQ= IGNhc2g= IGRldGVybWluZQ== RGU= IGNhcnM= IFdhbGw= 4pY= IHZpZXdz IGRydWdz IGRlcGFydG1lbnQ= IFN0ZXA= dWl0 IDM5 YXN1cmU= IENsYXNz IGNvdmVyZWQ= IEJhbms= IG1lcmU= dWFuYQ== IG11bHRp IG1peA== IHVubGlrZQ== bGV2aXNpb24= IHN0b3BwZWQ= IHNlbQ== IEdhbA== dWxlcw== IHdlbA== IEpvaG5zb24= bGE= IHNraWxs IGJlY29taW5n cmll IGFwcHJvcHJpYXRl ZmU= ZWxsb3c= IFByb3Q= dWxhdGU= b2NhdGlvbg== IHdlZWtlbmQ= b2RpZXM= IHNpdGVz IGFuaW1hbA== IFRpbQ== IHNjYWxl IGNoYXJnZWQ= IGluc3RydWN0 aWxsYQ== IG1ldGhvZHM= IGNlcnQ= IGp1ZGdl IEhlbA== IGRvbGxhcnM= IHN0YW5kaW5n IFNxdQ== IGRlYnQ= bGlhbQ== IGRyaXZpbmc= IFN1bQ== IEVkaXRpb24= IGFsYnVt YW5kb24= SUY= IFVr NjM= YWRlcg== IGNvbW1lcmNpYWw= ZXNo IEdvdmVybm1lbnQ= IGRpc2NvdmVyZWQ= IG91dHB1dA== IEhpbGxhcnk= IENhcm9s IDIwMDU= IGFidXNl YW5jaW5n IHN3aXRjaA== IGFubnVhbA== VHc= IHN0YXRlZA== YWdlbWVudA== aW5uZXI= IGRlbW9jcg== IHJlc2lkZW50cw== IGFsbG93aW5n IGZhY3RvcnM= b2Rk IGZ1Y2s= ZW1pZXM= IG9jY3VycmVk b3Rp IG5vcnRo IFB1YmxpYw== IGluanVyeQ== IGluc3VyYW5jZQ== Q0w= b2xseQ== 44A= IHJlcGVhdGVk IGFybXM= YW5nZWQ= IGNvbnN0cnVjdGlvbg== IGZsZQ== UFU= aWNpYW5z IGZvcm1z IE1jQw== YW50aWM= IG1lbnRhbA== cGlyZQ== IGVxdWlwbWVudA== IGZhbnQ= IGRpc2N1c3Npb24= IHJlZ2FyZGluZw== a2lu YXJw IGNoYWly b2d1ZQ== IHByb2NlZWQ= IElk T3Vy IG11cmRlcg== TWFu IDQ5 YXNw IHN1cHBseQ== IGlucHV0 IHdlYWx0aA== bGlhbWVudA== IHByb2NlZA== b3JpYWw= IFN0YXQ= IE5GTA== aGVucw== IEluc3RpdHV0ZQ== IHB1dHRpbmc= b3VybmFtZW50 ZXRpYw== IGxvY2F0ZWQ= IGtpZA== ZXJpYQ== cnVu IHByaW5j ICE= Z29pbmc= IEJldA== IGNsb3Q= IHRlbGxpbmc= IHByb3Bvc2Vk aW90 b3JyeQ== IGZ1bmRz Z21lbnQ= IExpZmU= IGJhYnk= IEJhY2s= IHNwb2tl SW1hZ2U= IGVhcm4= IEFU Z3U= IGV4Y2hhbmdl IExpbg== b3Zpbmc= IHBhaXI= TW9yZQ== YXpvbg== IGFycmVzdGVk IGtpbGxpbmc= Y2Fu IENhcmQ= eWQ= IGlkZW50aWZpZWQ= IG1vYmlsZQ== IHRoYW5rcw== b255bQ== IEZvcm0= IGh1bmRyZWRz IENocmlz IENhdA== IHRyZW5k aGF0 IEF2 b21hbg== IGVsZWN0cmlj IFdpbA== U0U= T2Y= IHJlc3RhdXI= b3RlZA== IHRyaWc= IG5pbmU= IGJvbWI= V2h5 wq8= IGNvdmVyYWdl IGFwcGVhbA== IFJvYmVydA== IFN1cA== IGZpbmlzaGVk IGZsb3c= IGRlbGl2ZXI= IGNhbGN1bA== IHBob3Rvcw== IHBoaWw= IHBpZWNlcw== IGFwcHJl a2Vz IHJvdWdo RG8= IHBhcnRuZXI= IGNvbmNlcm5lZA== IDM3 IEdlbg== Q29s Y3RvcnM= ID0+ c3RhdGU= IHN1Z2dlc3RlZA== IEZvcmNl Q0U= IGhlcnNlbGY= IFBsYW4= d29ya3M= b290aA== cmVuY3k= IGNvcm5lcg== IGh1c2JhbmQ= IGludGVybmV0 IEF1dA== ZW1z b3Nlbg== IEF0bA== Z2Vu IGJhbGFuY2U= NjI= IHNvdW5kcw== dGV4dA== IGFycg== b3Zlcw== IG1pbGxpb25z IHJhZGlv IHNhdGlzZg== IERhbQ== TXI= R28= U3Bl IGNvbWJhdA== cmFudA== IEdyZWU= IGZ1ZWw= IGRpc3RhbmNl IHRlc3Rz IGRlY3Jl IEVy IG1hbmFnZWQ= RFM= IHRpdA== IG1lYXN1cmVz IExpYmVy IGF0dGVuZA== YXNoZWQ= IEpvc2U= IE5pZ2h0 ZGl0 IE5vdg== IEVuZA== b3V0cw== IGdlbmVyYXRpb24= IGFkdm9j eXRo IGNvbnZlcnNhdGlvbg== IFNreQ== YWN0aXZl Y2Vs cmllcg== IEZyYW5r IGdlbmRlcg== IGNvbmNlbnQ= IGNhcnJpZWQ= YW5kYQ== IFZpcmdpbg== IGFycml2ZWQ= aWNpZGU= YWRlZA== IGZhaWx1cmU= IG1pbmltdW0= bGV0cw== IHdvcnN0 IGtlZXBpbmc= IGludGVuZGVk IGlsbGVnYWw= IHN1YnNj IGRldGVybWluZWQ= IHRyaXA= WWVz IHJhaXNl IH4= IGZlZWxz IHBhY2thZ2U= IEpv aGk= MjAxNg== cmVhbA== IGZyYQ== IHN5bWI= TWU= dWNreQ== cHJldA== IEto IEVkaXQ= IFdlYg== ZW1pYw== IENvbG9y IGp1c3RpY2U= SW50 IGZhcm0= Y2tub3c= Ij4= ZWxlc3M= IHJlZHVjZWQ= IDUwMA== eHg= IFJhZA== IFdvb2Q= IGNsaW4= IGh5cA== aWxlcg== dXJh a2lucw== ODU= NjE= IFRoZWly IE1hcnk= IHNhbg== IG5vdmVs IFdobw== IGNhcGFjaXR5 IGltcG9zc2libGU= IHBsYXlz IG1pbmlzdGVy aWp1YW5h aWNhdGU= IFNldA== IGZyYW0= IGluZw== IGNvbW11bml0aWVz IEZCSQ== aXRh IGJvbg== IHN0cmF0ZWc= IGludGVyZXN0cw== bG9jaw== Z2Vycw== bWFz IEFORA== IGNvbmZsaWN0 IHJlcXVpcmVtZW50cw== IHNhYw== IG9wZXJhdGluZw== aW5p cmVsYXRlZA== IGNvbW1pdHRlZA== IHJlbGF0aXZlbHk= IHNvdXRo wq/Crw== IGFmZm9yZA== IGlkZW50aXR5 IGRlY2lzaW9ucw== IGFjY3VzZWQ= cGxhY2U= IHZpY3Rvcnk= b2No aWF0 TmFtZQ== Q29t dGlvbg== ZWRz IHNlZWs= IHRpZ2h0 IEltYWdlcw== IGluaXRp IGh1bWFucw== IGZhbWlsaWFy IGF1ZGllbmNl IGludGVybmFs dmVudHVyZQ== IHNpZGVz IFRP IGRpbQ== IGNvbmNsdWQ= IGFwcG9pbnQ= IGVuZm9yY2VtZW50 IEppbQ== IEFzc29jaWF0aW9u IGNpcmN1bXN0 IENhbmFkaWFu IGpvaW5lZA== IGRpZmZlcmVuY2Vz IExvcw== IHByb3Rlc3Q= IHR3aWNl d2lu IGdsYXNz YXJzaA== IEFybXk= IGV4cHJlc3Npb24= IGRlY2lkZQ== IHBsYW5uaW5n YW5pYQ== IGhhbmRsZQ== IE1pY3Jvc29mdA== IE5vcg== IG1heGltdW0= IFJldg== IHNlYQ== IGV2YWw= IGhlbHBz cmVm IGJvdW5k IG1vdXRo IHN0YW5kYXJkcw== IGNsaW0= IENhbXA= IEZveA== Y2xlcw== IGFybXk= IFRlY2hu YWNraW5n eHk= U1M= IDQy IGJ1Zw== IFVrcmFpbg== IE1heA== IEpvbmVz IFNob3c= bG8= IHBsYW5ldA== IDc1 IHdpbm5pbmc= IGZhc3Rlcg== IHNwZWN0 IGJyb2tlbg== VFI= IGRlZmluZWQ= IGhlYWx0aHk= IGNvbXBldGl0aW9u aHR0cHM= IElzbGFuZA== IEZl IGFubm91bmNl IEN1cA== IEluc3RlYWQ= IGNsaWVudA== IHBvc3NpYmx5 c2VjdGlvbg== b2NrZXQ= bG9vaw== IGZpbmlzaA== IGNyZXc= IHJlc2Vydg== IGVkaXRvcg== IGhhdGU= IHNhbGU= IGNvbnRyb3ZlcnM= IHBhZ2Vz d2luZw== IG51bWVy IG9wcG9zaXRpb24= IDIwMDQ= IHJlZnVnZQ== IGZsaWdodA== IGFwYXJ0 IExhdA== QW1lcmlj IEFmcmljYQ== IGFwcGxpY2F0aW9ucw== IFBhbGVzdA== IEJ1cg== IGdhcg== IFNvY2lhbA== IHVwZ3I= IHNoYXBl IHNwZWFraW5n YW5zaW9u YW8= IFNu IHdvcnJ5 IEJyaXRhaW4= UGxlYXNl cm91ZA== IGh1bg== IGludHJvZHVjZWQ= IGRpZXQ= SW5k IFNlY29uZA== IGZ1bmN0aW9ucw== dXRz IEVhY2g= IEplZmY= IHN0cmVzcw== IGFjY291bnRz IGd1YXJhbnQ= IEFubg== ZWRpYQ== IGhvbmVzdA== IHRyZWU= IEFmcmljYW4= IEJ1c2g= fSw= IHNjaA== IE9ubHk= IGZpZg== aWdhbg== IGV4ZXJjaXNl IEV4cA== IHNjaWVudGlzdHM= IGxlZ2lzbGF0aW9u IFdvcms= IFNwcg== w4I= IEh1bWFu IOg= IHN1cnZleQ== IHJpY2g= cmlw IG1haW50YWlu IGZsbw== IGxlYWRlcnNoaXA= c3RyZWFt IElzbGFtaWM= IDAx IENvbGxlZ2U= IG1hZ2lj IFByaW1l IGZpZ3VyZXM= MjAxNw== aW5kZXI= eHVhbA== IERlYWQ= IGFic29sdXRlbHk= IGZvdXJ0aA== IHByZXNlbnRlZA== cmVzcG9uZA== cmlibGU= IGFsY29ob2w= YXRv IERF cG9yYXJ5 IGdyYWI= IHZhcmk= IHF1YW50 IFBob3Rv IHBsdXM= cmljaw== YXJrcw== IGFsdGVybmF0aXZl IHBpbA== IGFwcHJveA== dGhhdA== IG9iamVjdHM= IFJv IEFuZHJvaWQ= IHNpZ25pZmljYW50bHk= IFJvYWQ= a2F5 UmVhZA== YXZvcg== IGFja25vdw== IEhE IFNpbmc= T3I= IE1vbnQ= IHVucw== cHJvZg== IG5lZ290aQ== IEFyY2g= aWtp IHRlbGV2aXNpb24= IEpld2lzaA== IGNvbW1pdHRlZQ== IG1vdG9y IGFwcGVhcmFuY2U= IHNpdHRpbmc= IHN0cmlrZQ== IERvd24= Y29tcA== IEhpc3Q= IGZvbGQ= YWNlbWVudA== IExvdWlz IGJlbG9uZw== IOKAog== IG1vcnQ= IHByZXBhcmVk IDY0 IE1hc3Rlcg== IGluZGVlZA== IERlbg== IHJlbnQ= VEE= b3VybmV5 YXJj U3U= OTc= IGFkdmljZQ== IGNoYW5naW5n IGxpc3RlZA== IGxhdW5jaGVk aXNhdGlvbg== IFBldGVy aXNoZXM= IGxpdmVk IE1lbA== IFN1cHJlbWU= IEZlZGVyYWw= ICk7 cnVjdHVyZQ== IHNldHM= IHBoaWxvcw== dW91cw== IMKg IGFwcGxpZWQ= IE5PVA== IGhvdXNpbmc= IE1vdW50 IG9kZA== IHN1c3Q= REE= ZmZpY2llbnQ= ID8= b2x2ZWQ= IHBvd2Vycw== IHRocg== IHJlbWFpbmluZw== IFdhdGVy TEM= IGNhdXNlcw== 44Gu IG1hbm5lcg== YWRz IHN1Z2dlc3Rz IGVuZHM= c3RhbmRpbmc= Zmln IER1bg== aWR0aA== IGdheQ== IHRlcm1pbg== IEFuZ2VsZXM= TVM= IHNjaWVudGlmaWM= IGNvYWw= YXBlcnM= YmFy IFRob21hcw== IHN5bQ== IFJ1bg== dGhpcw== UEM= aWdyYW50cw== IG1pbnV0ZQ== IERpc3RyaWN0 Y2VsbGVudA== IGxlYXZlcw== IGNvbXBsZXRlZA== YW1pbg== IGZvY3VzZWQ= IG1vbml0b3I= IHZlaGljbGVz TUE= IE1hc3M= IEdyYW5k IGFmZmVjdGVk aXR1dGlvbmFs IGNvbnN0cnVjdA== IGZvbGxvd3M= IHRvbg== cmVlbnM= IGhvbWVz IEV4dA== IExldmVs cmFzdA== IEly IGVsaW0= IGxhcmdlbHk= IEpvZQ== IHZvdGVz YWxscw== IGJ1c2luZXNzZXM= IEZvdW5kYXRpb24= IENlbnRyYWw= IHlhcmRz IG1hdGVyaWFscw== dWxuZXI= IGd1aWRl IGNsb3Nlcg== dW1z IHNwb3J0cw== ZWRlcg== SnVzdA== IHRheGVz ODQ= IE9sZA== IGRlY2FkZQ== b2xh IHZpcg== IGRyb3BwZWQ= IGRlbGF5 aXRlY3Q= IHNlY3VyZQ== c3RlaW4= bGV2ZWw= IHRyZWF0ZWQ= IGZpbGVk YWluZQ== IHZhbg== IG1pcg== IGNvbHVtbg== aWN0ZWQ= ZXBlcg== IHJvdA== IGNvbnN1bHQ= IGVudHJ5 IG1hcmlqdWFuYQ== IERvdQ== IGFwcGFyZW50bHk= b2tpbmc= Y2x1c2l2ZQ== IGluY3JlYXNlcw== YW5v IHNwZWNpZmljYWxseQ== IHRlbGU= ZW5zaW9ucw== IHJlbGlnaW9u YWJpbGl0aWVz IGZyYW1l IE5vdGU= IExlZQ== IGhlbHBpbmc= IGVkZ2U= b3N0b24= IG9yZ2FuaXphdGlvbnM= w4M= IEJvdGg= aGlwcw== IGJpZ2dlcg== IGJvb3N0 IFN0YW5k IHJvdw== dWxz YWJhc2U= IHJpZA== TGV0 YXJlbg== cmF2ZQ== IHN0cmV0 UEQ= IHZpc2lvbg== IHdlYXJpbmc= IGFwcHJlY2k= IGF3YXJk IFVzZQ== IGZhY3Rvcg== d2Fy dWxhdGlvbnM= KSg= IGdvZA== IHRlcnJpdA== IHBhcmFt YXN0cw== ODc= IGVuZW1pZXM= IEdhbWVz RkY= IGFjY2lkZW50 V2VsbA== IE1hcnRpbg== VEVS IGF0aA== IEhlbGw= IGZvcmc= IHZldGVy IE1lZGlj ZnJlZQ== IHN0YXJz IGV4cGVuc2l2ZQ== IGFjYWQ= cmF3bg== IFdoZQ== IGxvY2s= IGZvcm1hdA== IHNvbGRpZXJz c20= IGFnZW50 IHJlc3BvbnNpYmlsaXR5 b3Jh IFNjaWVuY2U= IHJhcGlk IHRvdWdo IEplc3Vz IGJlbGlldmVz TUw= IHdlYXI= bGV0ZQ== w4PDgg== IERyaQ== IGNvbW1pc3Npb24= IEJvYg== T2g= YXBlZA== IHdhcm0= w4PDgsODw4I= IDIwMDM= b3J0aW9u IGhhc24= dXN0ZXI= IHVuaXZlcnM= IElsbA== IGtpbmc= b2xvZ2llcw== OTQ= IFRlbQ== IE1vcw== IHBhdGllbnQ= IE1leGljbw== Y2Vhbg== IERlYXRo IFNhbmRlcnM= eW91 IENhc3Q= IENvbXBhbnk= cHR5 IGhhcHBlbmluZw== RlA= IEJhdHRsZQ== IGJvdWdodA== QW0= TW9k VXM= dXRlcnM= IENyZQ== IFRob3Nl IDQ0 aXNlcg== IHNvdWw= IFRvcA== IEhhcnJ5 IEF3 IHNlYXQ= ZmZlZQ== IHJldm9sdXRpb24= ICgi IER1cmluZw== ZXR0ZQ== IHJpbmc= IG9mZmVuc2l2ZQ== IHJldHVybnM= IHZpZGVvcw== IGRpc2Ns IGZhbW91cw== ZW5jZWQ= IFNpZ24= IFJpdmVy IDMwMA== UE0= IEJ1cw== IENI IGNhbmRpZGF0ZXM= YXJkZW4= IHBlcmNlbnRhZ2U= IHZpc3VhbA== IHRoYW5r IHRyb3VibGU= bmVyZ3k= IDIwMDE= IHByb3Zl YXNoaW9u IGVuaA== IExvbmc= VU0= IGNvbm5lY3RlZA== IHBvc3NpYmlsaXR5 T3Zlcg== IGV4cGVydA== IGxpYnJhcnk= YXJ0cw== IERpcmVjdG9y IGZlbGxvdw== OTI= aXJ0eQ== IGRyeQ== IHNpZ25z IExvdmU= IHF1aWV0 Zm9vdA== IHB1cmU= IEh1bg== IGZpbGxlZA== cGhhcw== IEVsZWN0 ZW5kbWVudA== IEV4cGw= IHVuYWJsZQ== bnM= bW8= IHZhc3Q= b2Jl IGlkZW50aWZ5 YXBwaW5n IENhcm9saW5h Z3Jlc3M= IHByb3Rl IGZpc2g= IGNpcmN1bXN0YW5jZXM= cmF6eQ== IFBob3Q= IGJvZGllcw== IE11cg== IGRldmVsb3Bpbmc= IEFS IGV4cGVyaWVuY2Vk IHN1YnN0YW50 IEJvYXJk ZXNvbWU= IGRvbWVzdGlj IGNvbWJpbmVk IFB1dA== IGNoZW1pY2Fs IENoaWxk IHBvb2w= IEN5 IGVnZw== Y29ucw== c3RlcnM= IGh1cnQ= IG1hcmtldHM= IGNvbnNlcnZhdGl2ZQ== IHN1cHBvcnRlcnM= IGFnZW5jaWVz aWRlbA== T2I= dXJi IDQz IERlZmVuc2U= eWU= IEFw ZHVsZQ== IHRlbXBlcmF0dXJl IGNvbmR1Y3RlZA== IENoaWVm IHB1bGxlZA== IGZvbA== TGFzdA== b250bw== b3Npcw== VkVS RGVz IFBhbg== Rmlyc3Q= IGFkdmFuY2U= IGxpY2Vuc2U= cm9ycw== IEpvbg== IGltYWdpbmU= IGhlbGw= IGZpeGVk IGluY29y b3NpdGU= IExvZw== aWNrZW4= XTo= IHN1cnByaXNl aGFi IGNyYWZ0 b2x0 IEp1bA== IGRpYWw= IHJlbGV2YW50 IGVudGVyZWQ= IGxlYWRz IEFE IENsZWFu IHBpY3R1cmVz ZXNzb3I= IGFsdA== IHBheWluZw== UGVy IE1hcmtldA== IHVwZGF0ZXM= YW1pbHk= IFR5cGU= IEhvbWU= IDU1 c2VtYmx5 cm9tZQ== ODM= IGdyZWF0ZXN0 IGhlaWdodA== IGhlYXY= YWludHM= IGxpc3Rlbg== YXNlcg== IFNI IGNhcGFibGU= YWNsZQ== IHBlcnNwZWN0 aW5hdGluZw== IG9mZmVyaW5n cnlwdA== IERldmVsb3A= YWJpbg== cmM= IGJyaWdodA== YWx0eQ== YXJyb3c= IHN1cHBs aW5kaW5n YWNrZWQ= Z3lwdA== IEFub3RoZXI= cGc= IFZpcmdpbmlh IEx1 IHBsYW5uZWQ= IHBpdA== IHN3ZWV0 VHlwZQ== IERp IHR5cGljYWxseQ== IEZyYW5jaXNjbw== IHByb3NwZWN0 IERhbg== IHRlZW4= cmVlcw== IHNjaGVk IGhvbA== IHNjcg== IGxvdHM= bGlmZQ== IG5ld3Nw IGZvcmdldA== IE5vbmU= IE1pZGRsZQ== IFJ5YW4= ZWRk IHNldmVyZQ== IHN1aXQ= bGxlcg== OTM= IGNvcnJlc3BvbmQ= IGV4cGxvcw== dWF0aW9ucw== IGZsYWc= Z2FtZQ== cmlk IHByaW4= IERhdGE= IGRlcGxveQ== IEVudGVy c3VpdA== Z2hhbg== IE1lbg== IHRob3VnaHRz IG1hdHRlcnM= IGFkYXB0 IEFyaQ== IGZpbGw= IGZvcnRo IHNhbQ== IDQx IHBheW1lbnQ= IEhvcg== IHNwcmluZw== ZHVj IGxvc2luZw== IGJyaW5naW5n Rk8= YWxh IGRpc3RyaWJ1dGlvbg== aGVyZWQ= Ym91cg== IElzcmFlbGk= b21h IGNvbWJpbmF0aW9u IHBsZW50eQ== VkU= Q2Fu IEhhdw== IHBlcm1hbg== IFNwZWNpYWw= IHRvdw== IHNlZWtpbmc= IGV4YW1wbGVz IGNsYXNzZXM= Y3I= IGJlZXI= IG1vdmVz IElQ IEtu IHBhbmVs RXZlbg== IHByb3Blcmx5 IHJpcw== IHBsdWc= IGVzdGltYXRlZA== RXZlcnk= IGRlZmVuc2l2ZQ== YWdyYXBo IHByZWdu IGluc3RpdA== IFZpY3Q= IHZvbHVtZQ== IHBvc2l0aW9ucw== IGxpbmtz IFByb2dyYW0= IFdlZWs= YWd1ZXM= IHRyYW5zZm9ybQ== a2Vy IENFTw== IGNhcw== IG9wcG9uZW50 IHR3ZWV0 IENvZGU= IHNob3A= IGZseQ== IHRhbGtz IGJhZw== UGhvbmU= IGFpZA== IHBsYW50cw== IDY1 IGF0dG9ybmV5 YXJ0ZXJz cXVlc3Q= IE1hZ2lj IGJlZ2lucw== IG15c3Rlcg== IGVudmlyb25tZW50YWw= IHN0b3JhZ2U= Tk4= IG1hcmc= IHNrZQ== IG1ldGFs ZWxseQ== IG9yZGVyZWQ= IHJlbWFpbmVk IGxvdmVk IHByb21wdA== IHVwZGF0ZWQ= IGV4cGVydHM= IHdhbGtpbmc= IGFuY2llbnQ= IHBlcmZvcm1lZA== QVRF IG5laXRoZXI= aWVuY3k= IG1hbnVmYWN0dXJl IFBhaw== IHNlbGVjdGVk IG1pbmU= IHVsdGltYXRlbHk= IGV4cGxhbg== IGxhYmVs IFNlcnZpY2Vz cmlidXRlZA== VHJ1bXA= IHN5bg== IFVsdA== U0M= IG1lYXQ= IGdpYW50 IFdhcnM= IE9O IGFkbQ== IGludGVycHJldA== IGV2ZW5pbmc= IGV2aWw= IEJvc3Rvbg== IFdpbGQ= IMM= IEJpdGNvaW4= IEFtYXpvbg== RHI= IEluZm9ybWF0aW9u IG9idmlvdXNseQ== IGFkdmFuY2Vk UGhvdG8= b2xhcg== IHdlYXRoZXI= IHN5bWJvbA== IHNvbGU= IHBvdGVudGlhbGx5 b3N0ZXI= IG9yaWdpbmFsbHk= bXVu MzAw YXpl ZXNzaW9ucw== IGRlY2s= IHN0b29k IHlvdXRo IEJlcm4= UmVw IFRlc3Q= IGJhc2ljYWxseQ== b3RpYw== IGludm9sdmU= b2xpdA== bHlu U2Vl IGFpcmNyYWZ0 IGNvbmZpcm0= RVc= IG1lc3NhZ2Vz IFJpY2hhcmQ= IGtpdA== IHByb2hpYg== IHZ1bG5lcg== aXN0ZXJz IGV4aXN0ZW5jZQ== IHR1cm5pbmc= IFNQ IGRlc2lyZQ== IGZsYXQ= IG1lbnQ= c2Vhc29u YW5nZXM= IG5laWdoYm9yaG9vZA== IExha2U= QVRJT04= IHBvaW50ZWQ= YnVy IGlubm92 dWNrcw== VUw= IHByb2Zlc3Nvcg== IGV4cHJlc3NlZA== QUI= aWNpb3Vz IDIwMDI= IERldg== IHNlc3Npb24= IGJhcmU= c2Vu IGRpc3M= IENhdGg= IFBhc3M= IFBvaW50 IGRvY3Rvcg== b3Jyb3c= YWlsZWQ= IFJ1Yg== IERD IENoYXJs cGVyc29u IHdyaXRlcg== aWdodGVycw== dXJlYXU= IG9ibGln IHJlY29yZGVk IGJyb2tl IG9yZGVycw== aWx0eQ== IG1vdGlvbg== aW5pdHk= bGF3 YWRpdW0= IGltbWlncmF0aW9u IGNvbnRyYXN0 IGJhdHQ= IGV4Y2VsbGVudA== IHRlY2huaWNhbA== YW1p IHR1bg== IGNsb3Vk IFllYXI= Z2Vvbg== IGNyZWF0aW9u IHN0cmFuZ2U= IGF1dGg= IGZvcnQ= Ym9ybg== IGV4dGVudA== IFRvZGF5 IENsdWI= IHJhaW4= IHNhbXBsZQ== IGFjY2VwdGVk IHRhY3Q= IGZpcmVk IFNvbg== IHN0YW5kcw== IGJvb3Q= IDQ3 IHN0YXRlbWVudHM= IHZlcnNpb25z IHNlbGxpbmc= b3VuZGVk IDE5OTA= IHdlcmVu IFdhdGNo IGV4cGVyaW1lbnQ= UG9zdA== IHJldGFpbA== dWxlZA== SW5zdA== dW50ZQ== 44O8 IGRlcGFydA== IGJvbmQ= aXZlcnk= b21wbA== IHJlYWN0aW9u IFN5cmlhbg== IFBhYw== YXBwZWQ= YW5pZWw= RFA= IHJlc29sdXRpb24= IHJlYWN0 IGFwcHJvdmVk b25vbQ== bW9uZA== IE9mZmlj LS0t IHJlcGxhY2U= IHRhY2s= IHNwb3J0 IGNoYWlu IGVtZXJnZW5jeQ== cmFk IFBhbGVzdGlu IDQ2 IGF1dG9tYXRpY2FsbHk= IHJvdXRl IHBhbA== IGJhbmtz IFBhcmlz IE1lZGlh cm9hZA== aWNpbmc= aXh0 aXN0ZWQ= IGdyZXc= IGNvb3Jk IFdoZXJl b21pbg== IHN1YnM= 77+977+9 IMKx IGNvcnBvcmF0ZQ== IHNlbGVjdGlvbg== bm9vbg== IFJlcG9ydA== Y3M= Y2x1ZGluZw== b3JkZXJz YW5jaGU= IEl0cw== IHNsb3dseQ== IEVneXB0 IEFjYw== IGNvbGxl aXF1ZXM= RVg= IGF0dGVtcHRz dXJs IENyb3Nz IGZpbmRpbmdz IFND IE9S IGluZGV4 ZW5zaXR5 IFdheQ== IExhbmQ= IHNob2Nr ZGlz IGR5bmFt IGNhcnQ= bW9zcA== U2luY2U= aWVzdA== IEJveQ== IHN0b3Jt IENvbnRpbg== MjAxMw== aGV3 aWxpdA== IGVzc2VudGlhbA== aXF1aWQ= T3RoZXI= aXZlcmVk IHJlYXNvbmFibGU= QWN0 IHN1YnNlcXU= IFBhY2s= IEZvcnQ= IGNvbnNpZGVyaW5n IHVuaXZlcnNpdHk= bG9n IG1hcnJpZWQ= IGlsbHVzdA== IFRydWU= o48= IG51bWVyb3Vz cmFzdHJ1Y3R1cmU= IHNlcmlvdXNseQ== IHJlZmVycmVk dWE= IGNvbnNpc3RlbnQ= b25uYQ== IFJlYWw= cnVwdGlvbg== Y2lwbGVz IGZhY3Rz OTE= b3Rlcw== ZXJn VGhlbg== IGFjY29tcGw= Tm90ZQ== IHJldmVudWU= IHBhc3Npbmc= IG1hbA== ZWVu IFlldA== IGdhdGhlcg== dGVyZGF5 ZXdvcms= IEF1dGhvcg== UGU= IG9wdGlt IHJ1Yg== IOijjw== IHVua25vd24= c3RvbmU= IHVuaW9u b2x2ZQ== IG9wcG9ydHVuaXRpZXM= IGJyb3dzZXI= IFdhbA== IENvc3Q= IHJlcG9ydGluZw== c3Rz cGV0 IHNhbmQ= IHN1ZGRlbmx5 IHN1cnByaXNpbmc= IFZS IHNvbWV3aGF0 IEJhcw== dWx0dXJl aXp6 IENE IGNoYWxsZW5nZXM= IHNldHRpbmdz IGV4cGVyaWVuY2Vz IEZ1bGw= IGNhbm4= IHJlY2VpdmluZw== RVNU IGpvaW50 IGN1bHR1cmFs IGFzdA== ODI= YXN0ZXJu Y2VpdmVk IENydQ== IGJ1bGw= cGlyZWQ= YW1t IGZhY2luZw== cG93ZXI= IGJvc3M= IEhvbA== IGluc3Ry IGluY3JlYXNpbmdseQ== IHNoaWZ0 IHN0cmVldHM= IFdpbGxpYW1z YWJi IGxpZQ== IGxhdWdo IENh UEw= IGFkdWx0cw== IGN1c3RvbWVy IG9idGFpbmVk IHN1cHBvcnRpbmc= aHRtbA== ZmlyZQ== IGRldGFpbGVk IHBpY2tlZA== IFJpZ2h0 bGRlcg== RUU= c3Rvb2Q= IEtpbQ== IHdpcmU= IHNpZ2h0 IGRldmVsb3BlcnM= IHBlcnNvbnM= IHNhZA== IGN1cA== IHdhcm5pbmc= IGJveXM= bG9uZw== IGJpcmQ= Zm8= IHdhbA== IG9ic2VydmVk IHpvbmU= aXZlbmVzcw== IGNoYW5uZWw= Y3JpcHQ= IHJlZnVzZWQ= IEFnYWlu IHN1Yw== IHNwb2tlc21hbg== IFJlZg== cml0ZQ== b3VzdG9u 44Oz IFNoZXI= IGFjdHM= IE5hbWU= IHN0cnVnZ2xl YXJyeQ== b21ldGltZXM= IGRpc2NyaW0= SFQ= IGNhdGVnb3J5 IHJlYWxpemU= IGVtcGxveWVl IEFmZ2hhbg== ZW5nZXI= IGd1bnM= IFN0ZXZl IE1vdA== IE9s b2tlZA== IHRoaWNr IGZhaXJseQ== aWxseQ== IHN1cnZl IE1hdA== d2VpZ2h0 4pQ= IHRyb29wcw== IGFnZW50cw== IGJhdHRlcnk= IG1vdGl2 w6E= U2Vj ZGVu b3Zlcnk= TFM= IGZsdQ== IGNvbmZpZGVudA== IE9wZXI= IGVtcHR5 IHBoZW4= IHNlY3Rvcg== IGV4Y2l0ZWQ= IHJlbW90ZQ== YXBo b2Vu IGRlc3Ryb3llZA== IG1vcmFs IEhQ IFJvbg== IGRyZXNz IEJhdA== IGxpdA== IE1T IGFm SEw= cnVt aXNtcw== IHNob3VsZG4= IHN5bXB0 IFRvcm9udG8= aGV0aWM= IGNhcmJvbg== IGluc3RhbGxlZA== IHZpb2xlbnQ= IHNvbGFy amE= IHByYWN0aWNlcw== IHJpZGU= IFBlbm4= IGltcHJvdmVk IGF1ZGlv IGJlaGF2aQ== IFBT IGVhdGluZw== RGF0YQ== IFJldmlldw== cGFzcw== Y2xhaW0= dWF0ZWQ= YW5nZXJz Y2hlbg== IHByb3BlcnRpZXM= IGFueXdoZXJl QW5vdGhlcg== IGJsb3c= IEphY2tzb24= IHByb3Vk IHBsYW5l bGluZXM= IHNxdWFyZQ== IHByb29m YW5zYXM= IHRhbGtlZA== bWFrZXJz IHNpc3Rlcg== IGhvbGRz IHJlc2lkZW50 ID09 IHJlc2lzdGFuY2U= IHNwbGl0 IHByb3NlY3V0 IGNvbmZpZGVuY2U= cmVzZW50cw== IGN1dHM= IGV4Y2VwdGlvbg== IHplcm8= R2V0dHk= IGNvcHlyaWdodA== IHRvdGFsbHk= b3JtYWw= aWZpY2F0aW9ucw== IEF1c3RyYWxpYW4= IHNpY2s= IDE1MA== IGhvdXNlaG9sZA== IGZlZXM= IGRyaXZlcnM= b2dlbg== IE5Z IG5lY2Vzc2FyaWx5 IHJlZ3VsYXRpb25z ZWFyaW5n c2w= IHBlcnNwZWN0aXZl Y2FyZQ== aWNpYWw= SGlz IGVzY2FwZQ== IHN1cnByaXNlZA== IFZhbg== dXJyZW50 IHZhYw== ODE= IFRodXM= IGVtcGhhcw== IENoYW1waW9ucw== IEljZQ== IG5hcnI= IGhlYWRz IGNhdXNpbmc= YmVs Zm9ydHVuYXRlbHk= IE1h IHRhcmdldHM= Y2lwbA== IGFmdGVybm9vbg== IGFkZHM= IE1heWJl IEZvdXI= ZXNzZWQ= cGxldGU= IHVzdWFs Y2hv aW5ndQ== IHdpdGhk IEVuZXJneQ== IEVjb25vbQ== T08= IGFydGljbGVz IGluanVyZWQ= IG1hbmFnZQ== IGV4cGxhaW5z IGRpYWdu UmVj YXR1cmVz IGxpbmtlZA== IGRpc2N1c3NlZA== IGV4cGxv IG9jY2FzaW9u YXRoYW4= IG9wcG9zaXRl IGZhY2Vz IGRlbmllZA== IEtuaWdodA== IG51dA== IGFwcHJveGltYXRlbHk= IGRpc2FwcG9pbnQ= b255bW91cw== IEJlc3Q= IExv IEh5 IEFmZg== IHZvdGluZw== YW53aGlsZQ== IElJSQ== IGluc3RpdHV0aW9ucw== YWdyYW0= IERhaWx5 IGRyYWc= IG5lYXJieQ== IGd1aWx0eQ== IGNvbnZlcg== UHJl c2hpcA== IHJld2FyZA== IHBoaWxvc29waA== IFNT dWdo IGFwcHM= ZnJpZW5k IHVwcGVy IGFkdmVydA== IHNub3c= IGZydXN0 IG91cnNlbHZlcw== RnI= IERpZQ== YW1waW9u IGRpc21pc3M= IGNlcmU= IHNpZ25hbA== ZnJvbQ== ICku IDUy IGNyaW1lcw== aXRvcnM= ZXN0aXZhbA== dXNldW0= IGNvdW5jaWw= IFNhdWQ= TWF5 IEd1bg== aWNpYW4= ZXRoZXI= IHN1ZmZpY2llbnQ= IEhlbg== c29sZQ== IGhpc3RvcmljYWw= IEZhcg== IFR1cm4= IHBpbg== IHN1Y2NlZWQ= bWF0 bHltcA== IHRyYWRpdGlvbg== IE9r IGNybw== IGRlc2NyaXB0aW9u YWxsZQ== IHNreQ== VGU= IHdpZGVseQ== IHdhdmU= IGRlZmluaXRpb24= IEpld3M= IGN5Y2xl IHJlZmVyZQ== IGJyaW5ncw== dXNhbA== IGFsaXZl IGZyZXF1ZW50bHk= IGludGVudGlvbg== IENvbnRyb2w= bHY= eXN0ZW0= IHByaXZhY3k= Z2VudA== cmVuY2U= IFF1ZXN0 IENocmlzdG1hcw== IHJhaWw= IGNvb3Blcg== IHRlc3RlZA== IENhcHQ= YXNrcw== IGNvbWZvcnRhYmxl IGRlbGl2ZXJlZA== c2NhcGU= IGRlcHRo IEdPUA== IHdyaXRlcw== IGFzc2V0cw== IHNhdg== aW1lbnRz IHRyYW5zaXRpb24= IGFydGlzdA== IExvb2s= IGxvYg== IGNvbXBvbmVudHM= YXJpdHk= IHdhbGtlZA== IHJvb3Q= IHBhcnRpY2lwYW50cw== IG5vdGljZWQ= IHJlc2M= IG5hdg== IEFkbWluaXN0 ZGE= dXRyYWw= cGxhdGU= IGltcG9ydGFuY2U= IGFzc2VydA== aW91c2x5 Y3JpcHRpb24= IGluanVyaWVz IENoZWNr IHJlZ2lzdGVyZWQ= IGludGVudA== IG1pc3NlZA== b2dyYXBoaWM= IHNlbnRlbmNl b3VudGVy IGFzc2lzdGFuY2U= ZXZpbg== IGRhdGFiYXNl IGJ1aWxkaW5ncw== IGNsYXNzaWM= IHRoaW5rcw== IE9oaW8= UHI= dWdn IGZlZQ== cGFu IGVmZmVjdGl2ZWx5 IGZhY2lsaXR5 IGJlYXI= IGNoYXB0ZXI= IGRvZ3M= IENvbHVtYg== IGxhdHRlcg== aXRpYWw= IGFkbWl0dGVk VFY= IEdlb3Jn IHBvc3Rz XFw= IGxhd3llcg== IGVxdWl2YWw= IG1hbmQ= IGNvbnRyb2xsZWQ= IFdhbGs= IEFuZHJldw== IG1lbnU= YW1lbnRhbA== IHByb3RlY3RlZA== dmE= IGFkbWluaXN0cg== b3JhbA== IHJlaW4= IFNhcg== IGFtb3VudHM= IG5hdGl2ZQ== IE1vb24= IHJlcHJlc2VudHM= IGFiYW5kb24= IGNhcnJ5aW5n IHRhbms= bWFyeQ== IGRlY2xhcmVk VHViZQ== IGhhdA== IHB1bmlzaA== ZWxsZWN0 bWVz IHVuaXZlcnNl IFJvZA== cGh5 IGluZnJhc3RydWN0dXJl IDUx IG9wcG9zZWQ= b3dudA== Y2E= IE1ha2U= IGhhcmR3YXJl IGNvZmZlZQ== UmVs YmFs d29ybGQ= IFNhZg== IFNlYQ== aW5hbHM= IG93bmVk IGhhbGw= ZXJzaW9u IGRlc2NyaWJl IFBvdA== IHBvcnRpb24= IGF0bW9zcA== IGdvdmVybm1lbnRz IGRlcGVuZGluZw== IG9mZmVuc2U= IHRyaWNr YXdh IExpbmU= IFZpcw== IEhhcmQ= IE9yaWc= IENsaWNr IGRlc2s= IFZhbGxleQ== IFNvdg== IG1vdmllcw== IHJlbWFyaw== IG1haWw= IGNvbnNjaW91cw== IHJ1bGluZw== IFJpZ2h0cw== IG1lZGlj aGVudA== IFdvbWVu Pjw= IHJlcGxhY2Vk IFByZW0= IFRoYW5rcw== IHJlbmV3 IEJhbGw= aWZvcm0= IHNob3Rz Q29tbQ== IGFybWVk IGNvbnN0YW50 IHRhc3Rl IHJlYWxpemVk IGJ1ZmY= IG1v IGVmZmljaWVudA== TW9zdA== b3JhdGlvbg== aWZpZXM= IGNvbW11bmljYXRpb24= IGZsb29k IGNvbnNlcXVlbmNlcw== IGFueXdheQ== aWdn IEdN IFRoYW5r IGlyb24= IGV2b2x1dGlvbg== IENvcA== dHdpdHRlcg== IDk1 IHJlbGF0aW9uc2hpcHM= YWRlbA== IFlvdW5n IHByb3Bvc2Fs YXllcnM= dWlsZGluZw== IEhvdA== T1JF Y29z IGNvbGxhYm9y UEc= YXh5 IGtub3dpbmc= IHN1cHBvcnRz b3dlZA== IGNvbnRyb2xz IG1lcmVseQ== dW1lcg== IGF0aGxldA== IGZhc2hpb24= cGF0aA== IGdpZnQ= IGVyYQ== QU5E IGtpbmRz IEtvcmVhbg== IGxlZ2l0 dWxvdXM= IGVzc2VudGlhbGx5 IHRoZXJhcA== bmlj IHN1ZmZlcmVk IGh1cg== IHByb21pc2U= IGV4Y2Vzcw== IG92ZXJ3 IHByaW1l IEhvdXN0b24= ZXJyeQ== IE1z UlM= MjAxMg== IHN0b3Jlcw== IE9seW1w IGpvdXJuZXk= QWx0aG91Z2g= U3Vi IEVkdWM= IENoYXB0ZXI= IHJlcXVlc3Rz IGNvbnN1bWVycw== IHRpbnk= IGlzb2w= IEZhaXI= YmE= IFlPVQ== IGNyYXNo Y2VsZXI= IGVtb3Rpb25hbA== IGdvb2Rz IGVsZWN0ZWQ= IG1vZGVy IExpbnV4 IGJsb2Nrcw== IGlzbGFuZA== IFNvY2lldHk= IGVsZWN0aW9ucw== IGJyb2FkY2FzdA== IGNoZWFw IG5hdGlvbnM= IHNlYXNvbnM= NDAw IHdhc3Rl IFNhdA== IGZpZWxkcw== ZW1wbG95 IHByb2ZpbGU= IGF1dGhvcnM= QUxM IEdyYQ== d2VzdA== IFR5 IGRlYXRocw== IHZhY2M= IGZvcm1lZA== IGR1 IG9uZ29pbmc= IE11c2xpbXM= ZWxm aWd1cmU= IGFzc3VtZQ== IFVrcmFpbmU= d2F0ZXI= IGNvYXN0 IHZvdGVk Z29y IEFT IE1pY2hpZ2Fu YXph IEFybQ== aXJv IGZsZXg= YXN0ZXJz Jyc= IHdlbGNvbWU= YXJs IGxvY2F0aW9ucw== aWdhdGlvbg== IEZpbA== IGJ1eWluZw== IGFyY2hpdGVjdA== IGhhcmRlcg== IEN1Yg== IGludGVyZmFjZQ== IHJlc3RhdXJhbnQ= IGRpc2NvdmVy IGV4Y2VlZA== IGZhdm91cg== Z2VyeQ== IGR1dHk= IHBpdGNo YWRvcg== IE1hY2g= Ym95 IHJlc3BvbmRlZA== IGV4dGVuZGVk aGVycw== TWFueQ== cmFpZA== aWZlcg== IElucw== U2Vy IG1lZGl1bQ== c2hl IFNwb3J0cw== IG1hZ2F6aW5l dXRhdGlvbg== IGxpbWl0cw== IEdhbGw= IGV4dGVybmFs cmF6aWw= IHlvdW5nZXI= dGxl IHJlbWluZA== IENPTg== IGltbWVkaWF0ZQ== IGhpZGRlbg== IHZvbHVudGU= IHNpbXBs b2RjYXN0 IHBoYXNl ZHI= IHBsb3Q= IGV4cG9zdXJl Ukk= b2dyYXA= dmlu YW5pc2g= IEFjYWQ= IEVuZ2luZQ== IGV4cGFuc2lvbg== IFBheQ== WW91cg== IHB1c2hlZA== IEVsbA== IEhlYWQ= IG1hcmtldGluZw== IEFD a2V0 IGhpdHM= IGdybw== IEFnZQ== IFNjb3Q= XVs= IHN0aW0= IGlQaG9uZQ== iJI= IG5hcnJvdw== IEdldHR5 IFR1cmtleQ== IHBlcmZlY3RseQ== IGVuYWJsZQ== dXRjaA== IHByZWNpc2U= IHJlZ2ltZQ== IHNoaWY= IGNvbXBlbnM= Z3Vu ZGl2 IGNob3Nlbg== IEtlbg== QW55 IHRyZWVz IHJlY29tbWVuZGVk IFJlbg== dWFibGU= IEhU Rm9sbG93 RUc= IEhhbmQ= IEtlbm4= IGFyZ3VtZW50cw== IGV4aXN0cw== IGJpa2U= IENvbnNlcnY= IGJyZWFraW5n IEdhcg== IGNyYXp5 IHZpcnR1YWw= YXlsb3I= aXhlbA== IDE5ODA= IHBlcm1pc3Npb24= IFNlcmllcw== IGNvbnN1bWVy IGNsb3NlbHk= Y2FsbGVk IDU0 IGhvcGVz IGFycmF5 IFdpbg== IExhYm91cg== IHNwb25z IElyZQ== IHBvdw== IHJlYWRlcnM= IGVtcGxveW1lbnQ= IGNyZWF0dXJl IHJlc3VsdGluZw== IGFjY3VyYXRl IG1vbWVudHM= IGFyZ3VlZA== IHBlZA== RHVyaW5n IDUz IFRhbA== IHNvdWdodA== IHN1ZmZlcmluZw== IGljb24= bGVl ICgk YWxpYW4= wrA= IHByYQ== IGJvbnVz KCI= a28= IGFjdGluZw== REU= ZmFsbA== IGNvbXBhcmlzb24= IHNtb290aA== IE5BUw== dXBw IEpvc2VwaA== ZXBpbmc= IFRha2U= IE1pZA== IHNlbmRpbmc= ZmFzdA== IEZhbGw= IGRlYWxpbmc= dXNlcg== IE9yZ2Fu Q28= IGF0dGFjaGVk IHNlZXM= JS4= IHR5cGljYWw= QVJU IGZpbmRz IEFzaWE= dW1pbg== IENvcmU= IEVudA== aW5lbnQ= dWNl IEJsb29k IE5ldmVy IGVtYWlscw== IGhpZ2hsaWdodA== IGNvbmZyb250 YXR1cw== dXRlZA== IHVudXM= IHRvcGlj IEFkYW0= IGJsZQ== YXRp IHVuZGVyc3Rvb2Q= U2V0 c3RydWN0 VFA= IG1vYg== YWE= IFN0YXJ0 cGVjdGVk c2VsbA== IGRlZGljYXRlZA== IENB dWFu IHNvbmdz ZXNjcmlwdGlvbg== IHRlY2g= IHJhcGU= IGFzaWRl IGdyYW50 IDU2 c3Vi IGFyZ3Vl IGNvbnRhaW5pbmc= IHNjaGVkdWxl IGxpYmVyYWw= IHB1YmxpY2x5 IGhlYXZpbHk= IFV0 aW5lcg== IFNlY3Rpb24= IENhcmU= d2VldA== bHM= RGlz 4pSA IEZvbGxvdw== QmFjaw== IElU IGJlcw== amk= IEhpdA== ZXN0ZWQ= IGV2ZXJ5Ym9keQ== IFN3ZWQ= IGZlbWlu IGZhY2lsaXRpZXM= IGNvbnZlbg== Q29tcA== IE9T Y29yZQ== IGFueA== IGRpdmlzaW9u IENhbQ== IFN0YW4= bWF0ZXM= IGV4cGxvcmU= cGxvbQ== IHNoYXJlcw== cGxvYWQ= YW5lcw== IGlkZWFs ZXRlcnM= IEJhc2U= IHBsYXN0aWM= IGRpc3RpbmN0 IE5ldHdvcms= IFNlYXR0bGU= IHRyYWRpbmc= ZW5zdXM= aW50ZW5k IGV4aGli IGluaXRpYWxseQ== IEZvb2Q= IHRob3VzYW5k IEJ1c2luZXNz YWN0ZXI= IHBhcmFncmFwaA== IHJvdWdobHk= IHd3dw== IGNyZWF0aXZl IENvbmY= IGNvbnN1bXB0aW9u IGZpbG1z YWdhbg== IG9idGFpbg== IHRhbGw= IHRvcg== IGFja25vd2xlZA== IGdyb3du YWxv S0U= IDQwMA== ZW5kZXJz dGFpbmluZw== VUc= IHN1aWNpZGU= IHdhdGNoZWQ= IExpc3Q= YWxp cmVoZW5z IHN1cnJvdW5kaW5n IHBpcA== IGZseWluZw== IEphdmE= b3JkYW4= IHNlcnZpbmc= aW5hdGlvbnM= cG9zdA== IHNobw== QXY= IGphaWw= enk= IDE5OTk= IDwv IGxpdGVyYWxseQ== IFNpcg== IGV4cG9zZWQ= IGxpZXM= c3Rhcg== IGJhdA== IGVhcm5lZA== IERpZw== IHNwZWNpZmllZA== IFNlYXNvbg== IGRlZ3JlZXM= RG9uYWxk IGNlbnRyZQ== IHNoYXJpbmc= IHdpbnRlcg== IENP Q2hl IM4= TVA= IHVudw== IGZld2Vy IE1pcg== IHNvbWV3aGVyZQ== IEtleQ== IGF0dGFja2Vk IEtpcg== IGRvbWFpbg== IHN0cm9uZ2Vy IDk5 IHBlbmFsdHk= SWQ= U2NyaXB0 IGRlY2xpbmVk IG5lY2s= IGZyYXVk IGN1cnJlbmN5 IHJpc2luZw== UkM= 4oCm4oCm SHo= IHRhYg== IHRhbGVudA== bmFt IE5CQQ== IHZpbGxhZ2U= IGxlZ3M= IE5leHQ= RWQ= IGFjaWQ= IGh5ZA== ODAw IGludm9sdmluZw== IEltYWdl IEJlZm9yZQ== Rmw= IHllc3RlcmRheQ== U291cmNl IHRlcnJvcmlzdA== IHN1cA== IHN5bnQ= IFNhdWRp IHdlc3Q= IHJ1 YnVyZw== IHZpc2libGU= IHN0cnVjaw== cmlzb24= IGF3ZXNvbWU= IGRyYXdu IGFuc3dlcnM= IEdpcmw= IFJhbQ== IHRocmVhdHM= IGRlZmVhdA== b3NpdA== IHZlbnQ= YXR1cmFsbHk= QW1lcmljYW4= ZW5kYQ== IEhvbHk= IHJ1bQ== JSw= Y2FzZQ== IEhpc3Rvcnk= IFlvdVR1YmU= IHNpdHVhdGlvbnM= IEROQQ== U3Rl IHNhdmVk SXRlbQ== IHJlY2lw b2xvZ2lzdA== IGZhY2Vk IGVsaWc= T25jZQ== IExp dWg= IG1pc3Rha2U= IERpdmlzaW9u IEJlbGw= IHN5bXB0b21z wq4= IGRvbWlu IGZhbGxpbmc= IGVuZGluZw== YXNoZXM= IG1hdGNoZXM= IE9ubGluZQ== IGV4cGxhbmF0aW9u RGVm cmVkaXQ= IGFueW1vcmU= IFRvdGFs IEZPUg== dXNoZWQ= IGxldHRlcnM= IHJpc2tz IE9L IHJlcG9ydGVkbHk= Olw= IHBsYXRl IHN1YmplY3Rz IGF0dGVtcHRlZA== aWZpZXI= aWFuYQ== IHVubGlrZWx5 IFRob3VnaA== dW1h IEludmVzdA== IFByaW4= aWNhbg== IERhcg== IENvbG9yYWRv YXVn IHZlZ2V0 YW9z cmlh IHNoZWw= IG1hcmtlZA== ICgp IHNwcg== cG8= IExpbms= IGRlZmU= IEpy IHRoZW1l IHBhc3Npb24= IFBlbg== IGluZm8= aXplcg== IHNoaXQ= IENpdmls YXBzZQ== Y3Jl IHBvbHk= IGNvbXBvbmVudA== IENoYXJsZXM= IElyZWxhbmQ= IFByb3Y= IGRvY3RvcnM= IGdyYW50ZWQ= IHBhaW50 IGhvbm9y IHNtb2tl IHBheW1lbnRz IHByaW1hcmlseQ== IEtpbmdkb20= cmljaA== YXRlbGw= IGRlYWxz IHNjaGVkdWxlZA== IGZ1bmRhbWVudGFs IHByb3RlaW4= IG5ld3NwYXBlcg== IGNsaWVudHM= eXRob24= IERhdGU= aHVz IGZlZWRiYWNr IHN0cmV0Y2g= IGNvY2s= IGhvdGVs IFF1ZWVu IHN1Z2Fy IGp1 IG1pbGs= IGFwcHJvdmFs IExpdmU= IGVxdWl2YWxlbnQ= ZWZ1bGx5 IGluc2VydA== em9uYQ== IGV4dGVuc2lvbg== ZHJp Sm9obg== IGFjY29tcA== U20= IEZ1bmQ= IGNvbnN0YW50bHk= IGBg IGdlbmVyYXRlZA== IEFjdGlvbg== IFBzeWNo IFRyaQ== IHJlY29nbml6ZQ== IHZhcnk= cGhh IFJh ZGY= ZXRjaA== IFNvdmlldA== VHdv IHBhdHRlcm5z IHByb2Zlc3Npb24= YW5pbmc= VGltZQ== IExpbQ== IGNvbG9ycw== IEF6 IFRS IGluZmVjdA== IHBoZW5vbWVu IHNoZWxs QWxzbw== IHB1dHM= IGRlbGl2ZXJ5 IGJyb3du IHByb2Nlc3Npbmc= IGxpZ2h0cw== ZXNzYWdl IEJyb29r IEF1ZA== bGF0aW9u IGluZHVzdHJpYWw= TGlrZQ== IEJyYXppbA== cm91cw== RVNT IEx1Yw== IHNvbWVob3c= IDg1 IHByb3BvcnQ= IHBvbGl0aWNpYW5z IGluZGljYXRl IGhvbGU= IHRlY2huaXF1ZXM= IGNvbXBldGl0aXZl IHBocg== IHZv aXN0ZW50 IERyZWFt IGNhbXB1cw== IGFzcGVjdHM= IGhlbHBmdWw= IHNoaWVsZA== b3JzZQ== IHRyaWdnZXI= bWFs IDU4 IHRvcnQ= IHBlcnNvbmFsbHk= IHRhZw== IGtlZXBz IFZpZGVv IGJlbmNo IGdhcA== YWlyZQ== IGVhc3Q= IHJlY292ZXJ5 cGVyaWFs IHByb2ZpdA== IE1pYw== IDU3 IGNvbG9u IHN0cm9uZ2x5 c3R5bGU= IGFsbGVnYXRpb25z aGFu IHJlcG9ydGVycw== am8= cmluZQ== YXJnZXQ= YW5kYWw= IDAz IGZsYXNo dHJhbnM= IHN0cmljdA== IHBhcmtpbmc= IFBha2lzdGFu IGxp IHdlaXJk IEVyaWM= IHJlZ2lvbnM= IEp1bg== IGludGVsbGVjdA== IFdI b2Rpbmc= cmlidXRlcw== dXBpZA== IFRpdA== IGZpbmdlcg== b3JpYQ== IGVsZXY= IEZpZWxk IGNvbmNsdXNpb24= Ozs= IGZlZWxpbmdz IGV4dGVuc2l2ZQ== IG1peGVk IG5ldXJv dnk= IGhhcmFzcw== IENpcmM= b3VjaA== IHRlcnJpdG9yeQ== IHN1Y2Nlc3NmdWxseQ== TWFy IGluZ3JlZA== IG92ZXJ3aGVs IGxheWVy Vmlldw== IGFsbGllcw== aWxsYW5jZQ== IFRocmVl IGJ1bmNo IG5vcm1hbGx5 IG5ldHdvcmtz IHNhY3I= IENJQQ== Ymxlcw== IGNob3Nl IG9wcG9uZW50cw== IHJlZ2FyZGxlc3M= IGZyYW5jaA== IHByZWY= IFBv IGJyaWRnZQ== YW5uYQ== IFNpbHZlcg== IHdhZ2U= cGFnZQ== cmlvcg== IHJhZGljYWw= IExpdHRsZQ== IG1hbmlw IHNlY3JldGFyeQ== IGdhbmc= RFI= RkE= IGRlY2VudA== IFNwaXJpdA== IHVuY2xl IERldmVsb3BtZW50 IGludmVzdG9ycw== IHdhbGxz IHB1Ymxpc2g= IGdlbmVyYXRl aXNzaW9ucw== Y2Fy IHByb21vdGU= IGN1dHRpbmc= IGNoZXN0 IGRyaW5raW5n IGNvbGxlY3RlZA== IDcy IGhvcGluZw== IGVtYnI= Z29yaXRo IHdhcm5lZA== IGluc3RydWN0aW9ucw== T0c= IERpZA== IEFnZW5jeQ== IGdlYXI= IGNyaXRpY2lzbQ== IEZ1cnRoZXI= IHV0aWw= YW5ueQ== UmVk IGNvdW5zZWw= IEFzaWFu IHJlZHVjdGlvbg== cG9vbA== IHRlYWNoaW5n IGRlZXBseQ== aXk= IGVzdGltYXRlcw== IGNob2ljZXM= IHBlcm1hbmVudA== aW5lbQ== a2Vs IGZhc2M= cHNl ZmlsZQ== IExvdw== IFBlcnNvbg== IHRvdXJuYW1lbnQ= c3RhbA== IG1lbA== VVNU IFJheQ== YXpp VmFs IGNvbnRhaW5lZA== IEhvbGx5 IHdha2U= IHJldmVhbA== IHByb2Nlc3Nlcw== IElTSVM= IDA5 IGJsaW5k IHN0ZWVs IEJhZA== IGNhcmVmdWxseQ== YXBweQ== cm9pdA== IGdhbWluZw== IGhvdXNlcw== IENvbGw= IHRydWNr ZXJt IHNjb3JlZA== IG9jY2Fz cmV0dXJu Ym91bmQ= dmFy IHNoYXJw IGFmcmFpZA== IEVY YW1iZXI= Y2lmaWM= IHNjaGVtZQ== TkM= IFBvbGl0 IGRlY2xpbmU= IDE5OTg= IHB1c2hpbmc= IHBvc3Nlc3Npb24= IHByaXZpbGU= IHRlYWNoZXJz IHlpZWxk SEE= IERhdmlz aXRsZWQ= IyMjIyMjIyM= IHJpZw== IERhbmllbA== YWNvbg== IGhpZGU= dXRlbg== IGNvbGxlYWd1ZXM= IHByaW5jaXBsZXM= IGxvdWQ= IHNpbg== IERlbW9u IHN0b25l IDAy IHRhdWdodA== IHRlcnJpYmxl IHN0dWNr IFBvbGljeQ== dGVlbg== IGltcGxlbWVudGF0aW9u IEJCQw== IEFQSQ== IHdoZWVs YWxsYXM= IGNoYW1waW9ucw== b2xhcnM= cGxheWVy IHJlcGVhdGVkbHk= IFN0aWxs IGxpa2Vz YXN0eQ== ZXN0ZXI= IENhdGhvbGlj Ukw= IGJhdGg= IG5vaXNl dGl0bGU= IG5vcnRoZXJu UGFydA== IG1hZ24= IGZhYg== IEFzaA== IGRpc3Bs IHRpY2tldA== IG11cmQ= IGFsb25nc2lkZQ== IE11c2lj IHJpdmVy IFN0ZWVs IENM IFBsYXllcg== IE11bHQ= b3dpbmc= cmVw c2l6ZQ== IHR1cg== IEdlb3JnaWE= aXNjYWw= cmFjdGlvbg== IGNhYmxl IDU5 IHdpbnM= IHVwY29taW5n IHN1cnZpdmU= IGluc3BpcmVk IEVkdWNhdGlvbg== IHN0YXRpc3RpY3M= IEZvb3Q= aWFtaQ== IHllbGxvdw== IFBhZ2U= Li0= IEhhcw== IHVyYmFu IGF4 ZXNzZWw= XCI= IHF1YXJ0ZXJiYWNr IHJlZ2lzdGVy IExhYm9y IGFiaWxpdGllcw== IEZhbWlseQ== IHZhcmlhYmxl IFByaWNl IGNvbnRlbQ== IHRoaW4= IEVxdQ== ZGF0YQ== IGdvdHRlbg== IGNvbnN0aXQ= IGFza3M= IHRhaWw= IGV4Y2l0aW5n IEVmZmVjdA== IFNwYW5pc2g= IGVuY291cmFnZQ== aW5zb24= IEFo IGNvbW1pdG1lbnQ= Q1M= IHJhbGx5 IDo6 IHN1YnNpZA== IHNwaW4= IGNhcHR1cmVk MjAxOA== IGlubm9j IGFsbGVnZWRseQ== IENvbWU= IGFydGlzdHM= IE51bWJlcg== IGVsZWN0cm9uaWM= IHJlZ2lvbmFs YXBlcw== IHdyYQ== IG15dGg= cHJpc2U= IE1pbGxlcg== IENyZWF0 IEVwaXNvZGU= YmVsbA== IGRpcmVjdGVk IGV4dHJhY3Q= IHNvcnJ5 IHZpY2U= YWdnZXI= IFN1cHBvcnQ= IDY2 IElyb24= IHdvbmRlcmZ1bA== IGdyYQ== TmV0 aW9uZQ== RW5n IHNoaXBz aWtlcw== IEtldmlu aXRhcg== IGFjdGl2aXN0cw== dHJ1ZQ== IEFyaXpvbmE= ZW50aA== IERlc3BpdGU= IFNF IGhhYml0 ZXJuZWw= IGlucXU= IGFib3J0aW9u IHZvaWQ= IGV4cGxpY2l0 IGVuZ2FnZWQ= IGFuZ3J5 IHJhdGluZw== IGZyYWc= YnJv aWNraW5n ZGV2 IHdvcnJpZWQ= IG9ic2Vy IGFwYXJ0bWVudA== IEdU IGVzdGF0ZQ== IENvbnN0aXR1dGlvbg== ZW1vbg== IFNub3c= IGNvdW50eQ== IGRpc2Fn IFN0ZXBoZW4= IGltbWlncmFudHM= d2luZA== IE5hdGlvbnM= IGZvbGtz T3V0 IGdhbGw= IHRhcmdldGVk IHN0ZWFk IEJvbg== IExpYg== IGluZm9ybWVk IDEyMA== Y2hhaW4= aWRlbGluZXM= b3JvdWdo IGRyaXZlbg== IHJlZ3VsYXJseQ== IGJhc2tldA== IHByaW5jaXBsZQ== b2N1bWVudA== IHN0dW4= aWJpbGl0aWVz IFJvbWFu IEFib3V0 IGFsZXJ0 IGRlbW9jcmFjeQ== IHJlcHJlc2VudGVk SFM= Y2Vycw== cGFyZW50 QXJ0 cGFjaw== IGRpcGxvbQ== cmV0cw== IE5P IGNhcHR1cmU= IEFkdg== hKI= IGFubm91bmNlbWVudA== IExlYXI= IGhvb2s= IHB1cnM= IFN1Y2g= IENhbWVy IHJlZnVnZWVz IFZl UG9s IHJlY29nbml6ZWQ= bGli IGhhZG4= QXNz IHBpbG90 dXNoaW5n IHJldHVybmluZw== IHRyYWls IFN0b25l IHJvdXRpbmU= IGNvdXJ0cw== IGRlc3Blcg== IGZyaWVuZGx5 IEl0YWx5 IHBsZWQ= IGJyZWF0aA== IHN0dWRpbw== TlM= IGltcHJlc3NpdmU= IEFmZ2hhbmlzdGFu IGZpbmc= IGRvd250 aW5raW5n IFJvZw== aWFyeQ== Y29sb3I= c2V4 YXJvbg== IGZhdWx0 IE5pY2s= RG93bg== IFJvc2U= IFNvdXRoZXJu WFg= aXNvZGVz TGlzdA== NjAw IG91dGNvbWU= ZXJy IGVsc2V3aGVyZQ== IHJldGlyZQ== IHBvdW5kcw== IEdsb2JhbA== UGVvcGxl IGNvbW11bmljYXRpb25z IGxvYW4= IHJhdGlv IEVtcGlyZQ== IGdvbm5h IGludmVudA== REY= IDE5NzA= IENvbW1vbg== cGF0 IHByb21pc2Vk IGRpbm5lcg== IEhvbQ== IGNyZWF0ZXM= IG9wZXJhdGU= dmVydHk= IEpvcmRhbg== ZXRpbWU= IHN1c3RhaW4= UmVn IGluY3JlZGlibGU= aW1h IHdhcnJhbnQ= IG1t QXR0 IGxhd3N1aXQ= IHJldmlld3M= aXR1cmU= IFNvdXJjZQ== bGlnaHRz IEZvcmQ= IDYz Z3JvdXA= c3RvcmU= IGZlYXR1cmVk IGZvcmV2ZXI= IHBvdmVydHk= IFBvcA== IENOTg== YXp6 YWJpcw== YWNoaW5n IGxhaWQ= IFN1cHA= IGZpbHRlcg== ZW5h IENvbW11bml0eQ== IGNyZWF0dXJlcw== dWN0aW9u IFJveWFs IGFzc29jaWF0aW9u IENvbm5lY3Q= IEJyYWQ= 4paI bGVycw== dGhlcmU= IEdp IHZhbHVhYmxl QUNL IFRheWxvcg== IGxpcXVpZA== IEF0dG9ybmV5 IENhcmw= IEZpbmFs YWdh IFdpbHNvbg== QmVjYXVzZQ== IFByb2Zlc3Nvcg== YWth IGluY3JlZGlibHk= cmFuY2U= ISk= UmVm c2s= IHNvbHV0aW9ucw== IGF0bW9zcGhlcmU= IGJsYW1l dW1lcw== IE5vYg== Q0E= dW1wcw== cmljYWw= IFB1dGlu IERlc3Q= b3JpYw== IFBB IHJlc3BlY3RpdmVseQ== d2Fu IGZpZnRo 4oSi IENyeQ== IGdvdmVybm9y cmVzaWRlbnQ= IHB1cmNoYXNlZA== IGhhY2s= IGludGVuc2U= b2Jz IG9yaWdpbg== IGRlZmluZQ== IGNhcmVmdWw= Kioq IHNob3VsZGVy Q2xpY2s= IHRpZWQ= IGRlc3RydWN0aW9u b3VyZWQ= IG5vYm9keQ== IGhv IEV4cGVy IHRpcA== Ijs= IHRlY2huaXF1ZQ== IGp1cg== IFBvaw== Ym93 IGxlZ2VuZA== IGFjY29yZA== IGJ1c3k= IEludGVs IGhhbmc= YWtp Ll0= 4oCU4oCU4oCU4oCU IHN1cmdlcnk= IHJlcHJvZHU= IHVuaWZvcm0= IHNjZW5lcw== Y29kZQ== IDYy bGlzaGVy IEhhdmU= cGhpYQ== IGNyeXB0 IHJlY29u IHNjcmVhbQ== IGFkb3B0ZWQ= IHNjb3Jlcw== TmU= IEl0YWxpYW4= aW5jbHVkaW5n Qk8= IGluZGljYXRlZA== IGVudGVydGFpbg== R3U= VGV4dA== aWVs IHR3ZW50eQ== IGVuZ2FnZQ== b2Zmcw== IFBhY2lmaWM= IHNtaWxl IHBlcnNvbm5lbA== IHRvbGVy IGRvb3Jz IHRvbmU= IG1hY2hpbmVz IGVudGVyaW5n dGVuYW5jZQ== Q08= IEplcnNleQ== IGZvcmVzdA== IGhvcnNl IGNvbXBsYWludA== IFNwcmluZw== eW8= IFBsdXM= ZWRpbmc= IFJldHVybg== cXVhcnRlcnM= aWFscw== Y293 IGFjYWRlbWlj IGZydWl0 IDE5OTY= b2dldGhlcg== IHdpbmU= IHB1cnN1 IFN0ZXZlbg== IGxpY2Vucw== V2hv IGNsb3RoZXM= cmVjdGlvbg== IHNxdWFk IHN0YWJsZQ== IHJhdw== emVucw== U3Rhcg== dXRpZXM= YW5jZXI= IGtleXM= IE11 IGNvbXBsaWNhdGVk aWdlcg== IFRleHQ= IGFic29y IDY4 IGZ1bm55 IHJlbGllZg== IExldw== IENvb2s= IGNoYXJ0 IGRyYXdpbmc= R0U= IG1vZHVsZQ== IEJ1bGw= SUxM IHNhbHQ= MDAwMDAwMDA= aWxsZQ== IHJlc291cmNl YXdheQ== YWRlbHBoaWE= IEJydQ== IDY3 IHNvbWVib2R5 IHBhcnRpY2lwYXRl IHJvc2U= d2VyZWQ= IG11c2NsZQ== IGNvbnNlbnQ= IGNvbnRpbnVpbmc= IEd1YXJkaWFu IE9yZGVy cmVnb24= IHJlYXI= IHByb3Zpc2lvbg== IGxpa2Vk cmllbnQ= IGJyYQ== VHJhbnM= IG1lZXRpbmdz IHRveA== IGNvbnZlbnQ= IGF1dG8= IHJlY29yZGluZw== IFNvZnQ= MDAx IFJvbGw= IHByb2dyYW1taW5n IHBpYw== IHByb3ZlZA== IHN0YWI= IEFzdA== IGNhcHRpb24= dWxhdGluZw== IEF0dGFjaw== IG5ld2x5 IDE5OTc= ZnI= IGRpc2NpcGw= IEdyZWVr IGVkaXRpb24= IERvZXM= IEJveA== aWZsZQ== YWNrZXQ= IHBhc3Nlcw== IGd1ZXN0 IGFjY2VsZXI= aXRhbHM= VUQ= IGF1dGhlbnQ= IFJlc3Q= b3ZhbA== dGE= dWluZQ== IGFybW9y IFRvd24= IGNvbXBhdA== IGluY2hlcw== RGVzcGl0ZQ== IGFzc2lnbg== aGVyZW50 IHByZXBhcmU= IE1lZw== b2NrZXk= IGRlcGVuZHM= IHRyYWNrcw== d2F0Y2g= IGxpc3Rz IE5vcnRoZXJu IGFsdGVy cmVj IEVhc3Rlcm4= IGNvbmRlbQ== IGV2ZXJ5d2hlcmU= Pyc= IGFmZmlsaQ== IGZvdWdodA== Ijp7Ig== IG1hYw== aXRhcmlhbg== IHNjb3Bl IEFM YXdz YXJtcw== IHF1ZQ== IGVuam95ZWQ= bmVzb3Rh IGFnZ3Jlc3NpdmU= IFN0b3J5 IElW IHJlY2lwZQ== IHJhcmVseQ== IE1lZGljYWw= dmFsdWU= YW5nZWw= YXlpbmc= b21ldGhpbmc= IHN1YnNlY3Rpb24= IHNvdXRoZXJu IGZyZXF1ZW5jeQ== cmV0ZQ== cm9sbGVk dWx0cw== IE5pYw== IGJlaGFsZg== IHNlcXVlbmNl YWJldA== IGNvbnRyb3ZlcnNpYWw= IGNvbXByb20= IHdvcmtlcg== IG1haW5seQ== IGFsZ29yaXRo IE1ham9y b3JjZQ== Z2VuZGVy IG9yZ2FuaXplZA== IGZha2U= IGNvbmNsdWRlZA== IEVE IEV4ZWM= cmFnZQ== IGNoYW5jZXM= YmVycnk= IFRyYWQ= IGNvbmZpZ3VyYXRpb24= IHdpdGhkcmF3 IGZybw== dWRlcw== IEJyb3RoZXI= IEJyaWFu IHRyaWVz IHNhbXBsZXM= IGJpZA== IEdvbGRlbg== IHBob3RvZ3JhcGg= aWZlc3Q= IERP IFBhcmxpYW1lbnQ= KioqKioqKioqKioqKioqKg== UmVt IGNvbnRlc3Q= IHNpZ25pbmc= cHg= IFplYWw= 4pSA4pSA RWFy IGV4aXQ= QmVmb3Jl IENvcnBvcg== bnVsbA== bW9udGg= IHJhY2lhbA== b3R0ZWQ= IFZlZw== IFJldXRlcnM= IHN3b3Jk cHNvbg== IFJvbW5leQ== YWVk IHRyaWI= IGlubmVy IHByb3RvY29s IEJp IE1pYW1p ZXZlcmFs cHJlc3M= IHNoaXBwaW5n IEFtZW5kbWVudA== IEhvd2FyZA== Y29ubmVjdA== IERpc2M= IEphYw== aWFtb25k IFRoZXJlZm9yZQ== c2Vz IFByaW5jZXNz IFVTQg== IEFudGg= IHN1cnZlaWxsYW5jZQ== IGFwb2xvZw== IDYx b3dh IGZ1bGY= anM= IGx1Y2s= dXN0ZWQ= IMKn bmk= IGFudGljaXA= ZW1hbg== IHdpbm5lcg== IHNpbHZlcg== bGxh aWNpdHk= IHVudXN1YWw= IGNyYWNr IHRpZXM= ZXo= IHByYWN0aWNhbA== IHByb3ZpbmNl IFBsYWNl IHByaW9yaXR5 SUNF IGRlc2NyaWJlcw== IGJyYW5jaA== Rm9ybQ== YXNrYQ== bWlzc2lvbnM= Ymk= IHBvcm4= IFR1cms= IGVudGh1cw== IGZpZ2h0ZXJz IDA4 IERldHJvaXQ= IGZvdW5kYXRpb24= YXZpZA== QXJl IGp1ZGdtZW50 Y2xpbmc= IHNvbHZl IERlc2lnbg== V2hlcmU= aGVzaXM= IFRybw== YWZ0ZXI= IG5ldXRyYWw= IFBhbGVzdGluaWFu IEhvbGx5d29vZA== IGFkdmlz IE5vbg== eWVz b2xpcw== IHJlcHV0YXRpb24= IHNtZWxs IGJyZWFk IEJ1bA== IEJlYWNo IGNsYWltaW5n IGdlbmV0aWM= IHRlY2hub2xvZ2llcw== IHVwZ3JhZGU= cm93cw== IGRldmVsb3Blcg== IEpvc2g= IERpc25leQ== ZXJ2ZWQ= aXBhbA== IHVuZXg= IGJhcmVseQ== dGhlbg== IFB1Yg== IGlsbG5lc3M= ZXRhcnk= IEJhbA== IHBhdGNo IGJ1dHQ= IHN0dXBpZA== IERvZw== IERhbGxhcw== ZnJvbnQ= aWVjZQ== IHByb3Rlc3Rz IGNoYXQ= b2VuaXg= IHdpbmc= IHBhcmxpYW1lbnQ= IDc3 b3NleHVhbA== IHJlbmRlcg== cHRpb25z IENvYXN0 b3Nh IEdyZWc= aG9w IE1hbmFnZW1lbnQ= IGJpdGNvaW4= IHJlY292ZXI= IGluY29ycG9y b3JuZQ== IFVzaW5n IHByZWNlZA== IHRocmVhdGVuZWQ= IHNwaXJpdHVhbA== IEV2ZW50 IEZyZWQ= IGFkdmVydGlzaW5n IGltcHJvdmVtZW50cw== IEN1c3RvbQ== IGVycm9ycw== IHNlbnNpdGl2ZQ== IE5hdnk= IGNyZWFt TG9vaw== IGV4Y2x1c2l2ZQ== IGNvbXByZWhlbnM= IGRlbGVn IGNvbmNl IHJlbWVt IHN0cnVjdHVyZXM= IHN0b3JlZA== TkQ= IDEwMDA= VVA= IEJ1ZGQ= QUY= d29tYW4= IEFjYWRlbXk= 8J8= c2Vh IHRlbXBvcmFyeQ== QWJvdXQ= ZXN0ZXJz IHRpY2tldHM= IHBvc3Nlc3M= aW5jaA== b3o= IGxh IGNvbnRyYWN0cw== IHVucA== IGNpZw== IEthdA== dWx0dXJhbA== YXNt IG1vdW50YWlu IENhcHRhaW4= U3RlcA== bWFraW5n IFNwYWlu IGVxdWFsbHk= IGxhbmRz YXRlcnM= IHJlamVjdGVk ZXJh aW1t cml4 Q0Q= IHRyYW5zYWN0aW9u Z2VuZXI= bGVzc2x5 IHx8 IGNvcw== IEhlbnJ5 IHByb3Zpc2lvbnM= IGdhaW5lZA== IGRpcmVjdG9yeQ== IHJhaXNpbmc= IFNlcA== b2xlbg== b25kZXI= IGNvbnNvbGU= aW5zdA== IGJvbQ== IHVuY2VydGFpbg== MTUw b2NraW5n IG1lYXN1cmVk IHBsYWlu IHNlYXRz IGRpY3Q= U0w= YWZl IGVzdGltYXRl aXpvbg== YXRoZXJlZA== IGNvbnRyaWJ1dGVk IGVwaXNvZGVz b21tb2Q= R3I= QU5U IDY5 R2VuZXI= IDI1MA== dmlvdXNseQ== cm9nZW4= IHRlcnJvcmlzbQ== IG1vdmVtZW50cw== ZW50bGU= b3VuY2U= IFNvdWw= IHByZXY= IFRhYmxl YWN0cw== cmlvcnM= dGFi IHN1ZmZlcg== IG5lcnY= IG1haW5zdHJlYW0= IFdvbGY= IGZyYW5jaGlzZQ== YmF0 IGRlbWFuZHM= IGFnZW5kYQ== IGRvemVu IGNsaW5pY2Fs aXphcmQ= IE9w dGQ= IHZpc2l0ZWQ= IFBlcmhhcHM= IGFjdG9y IGRlbGlj IGNvbnRyaWJ1dGU= IGluamVjdA== IEVz YWNjbw== IGxpc3RlbmluZw== IGNvbmdyZXNz ZXBlbmRlbnQ= IHByZW1pdW0= IDc2 IElyaXNo IGFzc2lnbmVk IFBoeXM= IHdvcmxkd2lkZQ== IG5hcnJhdGl2ZQ== b3R5cGU= bW9udA== YmFzZQ== IEJvd2w= IEFkbWluaXN0cmF0aW9u IHJlbGF0aW9u IEVW Q1A= IGNvdmVycw== IDc4 IGNlcnRpZmlj IGdyYXNz IDA0 cGlyYWN5 aXJh IGVuZ2luZWVyaW5n IE1hcnM= IHVuZW1wbG95 IEZvcmVpZ24= c3RyYWN0 IHZlbg== IHN0ZWFs IHJlcGxpZWQ= IHVsdGltYXRl IHRpdGxlcw== ZGF0ZWQ= IGpveQ== YXVz IGh5cGVy YWt1 IG9mZmljaWFsbHk= IFByb2R1Y3Q= IGRpZmZpY3VsdHk= cGVyb3I= IHJlc3VsdGVk cmliZWQ= bGluaw== d2hv fn5+fg== IFNwZWVk IFZpZXQ= V2luZA== IEJhcmFjaw== IHJlc3RyaWN0aW9ucw== IFNoYXJl IDE5OTU= aXRpb25hbGx5 IGJlYXV0eQ== b3B0 IG1hcHM= IENS IE5hdGlvbg== IENydXo= V2lsbA== IGVsZWN0cmljaXR5 IG9yZw== IGJ1cmQ= IHZpb2xhdGlvbg== IHVzYWdl IHBlcm1pdA== IENocm9u IEZhbnQ= IG5hdHVyYWxseQ== IDA3 IHRocm93bg== IEF3b2tlbg== IGFsaWVu IEhlcm8= IEtlbnQ= IFJpY2s= cmlrZQ== IHBhY2U= fSx7Ig== R0w= IHBvaXNvbg== IFRvd2Vy IGZvcm1hbA== YWx5c2lz IGdlbnVpbmU= IGtpbA== YXZlcg== IHByb2NlZHVyZQ== IFByb3A= aW50ZW5kbw== IE1haW4= YXNhbnQ= IHRyYWluZWQ= R2FtZQ== IExvYWQ= IE1B IGNydWNpYWw= IGxldHM= IEZS IGNoYW1waW9u MTAx IENvbmZlcmVuY2U= IHdyaXRlcnM= IGNvbm5lY3Rpb25z IG9rYXk= aXJtcw== IFJhbmQ= IGVuY291bnRlcg== IEJ1ZmY= IGFjaGlldmVk IGNoZWNrcw== aXNjb25z IGFzc2lzdGFudA== IHdoZW5ldmVy IEFjY2Vzcw== IFVy Ymlu IGNsb2Nr aXNw b3BoZXI= IGJvcnJvdw== IG1hZA== IHBlcnNvbmFsaXR5 b25seQ== SVNU YWJhbWE= IGdhaW5z IGNvbW1vbmx5 IHRlcnI= IGh5cG90 IHJlbHk= IHRpc3M= aXNjb25zaW4= IHJpZGlj ZnVuY3Rpb24= IE9yZWdvbg== IHVuY29t cmF0aW5n ZWxhbmQ= IE5D IG1vb24= YW5ub24= IHZ1bG5lcmFibGU= dXRpdmU= wqDCoMKgwqA= IFJhZGlv IHdlc3Rlcm4= c2VjdA== IFRvbnk= IG9jY3Vycw== IE9z IEhvbg== w60= IHZlc3NlbA== IFNjb3RsYW5k IGRpc2NyaW1pbmF0aW9u IHN1YnNlcXVlbnQ= c3RyaW5n IGZhbnRhc3k= IFNoYWRvdw== IHRlc3RpbQ== V0U= aXRp cmFz IGJvYXQ= IG1hcmtz IG9yZGluYXJ5 IHJlbg== IHJlcHJlc2VudGF0aXZl IHBldGl0aW9u IDcz IGFkdmVudHVyZQ== IGlnbm9yZQ== IFBoaWxhZGVscGhpYQ== IFNhdg== VlA= IGZhY3Rvcnk= IHRhc2tz IGRlcHJlc3Npb24= emVk Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= IFN0b3Jt IGNvZ24= IGVsaWdpYmxl IHJlZHVjaW5n dmlh IDA1 IHN0cmlraW5n IGRvbGxhcg== aG8= T1Y= IGluc3RydW1lbnQ= IHBoaWxvc29waHk= IE1vb3Jl IEF2ZW51ZQ== IHJ1bGVk IEZyb250 SU5F IE1haA== IHNjZW5hcmlv IE5BU0E= IGVub3Jt IGRlYnV0 IHRlYQ== VG9kYXk= IGFic2VuY2U= U2lt IGhhbQ== bGVlcA== IHRhYmxlcw== IEhlYXJ0 TUk= S2U= cmVxdQ== VkQ= bWFw IGNoYWlybWFu IHB1bXA= IHJhcGlkbHk= dmk= IHN1YnN0YW50aWFs RVA= ZGVz Y2hhbnQ= aWxpcHA= IFNhbnRh cmllcnM= YW5jaGVzdGVy TG9hZA== IENhc2U= IHNhdmluZw== IDc0 IEFGUA== ZXJuaW5n b3VuY2Vk IE1pbm5lc290YQ== IFdhcw== IHJlY3J1 IGFzc2Vzc21lbnQ= IEJyb24= VUU= IGR5bmFtaWM= IGZ1cm4= dWxhdG9y IHByb3BhZw== aGlnaA== IGFjY29tbW9k IHN0YWNr IFN1cw== d3JpdA== IHJldmVu IEdvZGQ= IFplYWxhbmQ= YWJz IGJydXQ= IHBlcnBldA== aG90 IGhhcmRseQ== IEJ1cm4= 44K5 IHN0eQ== IHRyYW5zYWN0aW9ucw== IGdhdGU= IHNjcmVlbnM= IHN1Ym1pdHRlZA== IDEwMQ== IGxhbmd1YWdlcw== dWdodA== ZW1lbg== IGZhbGxz IGNvYw== gqw= IHN0cmlrZXM= cGE= IGRlbGliZXI= IElN IHJlbGF4 YW5uZWxz IFNlbmF0b3I= IGV4dHJlbQ== IH0s IERlYg== IGJlbGw= IGRpc29yZGVy Y3V0 IGlPUw== IGxvY2tlZA== IGVtaXNzaW9ucw== IHNob3J0bHk= Il0= IEp1ZGdl IFNvbWV0aW1lcw== IHJpdmFs IGR1c3Q= IHJlYWNoaW5n RmlsZQ== wq/Cr8Kvwq8= aW5vaXM= IEphc29u IHNhdGVsbA== YXJldA== IHN0YXRpb25z IGFncmlj IFRlY2hub2xvZ3k= Y29tZXM= IFVuZm9ydHVuYXRlbHk= IENoaWxkcmVu IGFwcGxpZXM= YXN0ZWQ= IGFuZ2Vy YWlsYWJpbGl0eQ== IERhbWFnZQ== IGNvbXBhcmU= IFN0YW5kYXJk IGFpbWVk IEJh YW5ndWFnZQ== IHJlZ3VsYXRpb24= IGp1cnk= IGFpcnBvcnQ= IHNlY3Rpb25z IFByaW5jZQ== ZW1lZA== IG1lZGljaW5l IGhpdHRpbmc= IHNwYXJr b2x2ZXM= IGFkcw== U3RhdGU= IGZvb2Rz IHJlcGxhY2VtZW50 IGNoaWNrZW4= IGxvd2VzdA== IG1pbmRz IGludm9sdmVz dWk= IGFycmFuZw== IHByb2NlZHVyZXM= IFdoaWNo aXZlcnNhcnk= IGJpbGxz IGltcHJvdmVtZW50 IGluZXY= IGV4cGVjdGF0aW9ucw== IGludGVsbGVjdHVhbA== IHNwYWNlcw== IG1lY2hhbmlzbQ== MjUw YnJlYWs= IFpl IFRlbm4= IEJhbHQ= IGJhcnJlbA== IHN0YXRpYw== bWFubg== UG9saWNl IHRpcHM= IGhhbmRsaW5n Y3Vz b2RlZA== aWx0b24= aXJ5 IGpvdXJuYWxpc3Rz b3Vyc2U= IGNvbWlj IG5vbWluZQ== SVRZ IHZlcnN1cw== IGxvb3A= IHN1cmY= IEluZHVzdA== IEh1bnRlcg== IGJlbGllZnM= aXNhbg== IHNldHVw IGJyZXc= aW1hZ2U= IGNvbXB1dGVycw== Zm9s fSwi IE1lZGFs IHRheHA= IGRpc3BsYXllZA== IGdyYXY= IGZpc2NhbA== TW9u IE1vc2Nvdw== IEtvbmc= IENlbnRyZQ== IGNhbWVyYXM= IE1ycw== IEhheQ== IGF2ZXI= IEtlbGx5 cHk= IHJlcXVpcmVtZW50 IGVudGl0bGVk b21iaWU= IHNoYWRvdw== YWdpYw== IEFr IGVsaXRl IGRpdmlkZWQ= IGhlYWRpbmc= IGNvcGllcw== IGxvc3Nlcw== IHZpdA== a2Vk IEJyeQ== IGFucw== IFN0ZWFt IHJlcG9ydGVy aGVpbQ== IEl0ZW0= IHN1cGVyaW9y ZG9u ZXJlbnQ= w7Y= IHRoZXJhcHk= IHBlYWs= IE1vZGVs IGx5aW5n IGdhbQ== emVy cml0dGVu IHJlc3BvbnNlcw== IGNvbnNpZGVyYXRpb24= IEJpYmxl IGxveWFs IGluc3RhbnQ= IHBt IEZvcmVzdA== w7w= IGV4dGVuZA== IGNvbnZpY3RlZA== IGZvdW5kZXI= IGNvbnZpbg== IE9haw== Y2hlY2s= IHNjaG9sYXJz cGVk IG92ZXJzZQ== VG9w Y291bnQ= IEFyaw== wrc= IDA2 IExB bWQ= IExhdGlu aW1lbnRhbA== IENQVQ== IHN1YnN0YW5jZQ== IG1pbm9yaXR5 IG1hbnVmYWN0dXJpbmc= RXI= b2NvbGF0ZQ== IGF0dGVuZGVk IE1hbmFnZXI= cmF0aW9ucw== IGFwcHJlY2lhdGU= b215 R0JU aWRlbmN5 Qkw= IGd1YXJhbnRlZQ== cG9zaXRpb24= IG9jZWFu Y2x1ZGU= IGhlYWRlZA== IHRhcGU= IGxvb3Nl IGxvZ2lj IHByb3Zlbg== IHNwaXI= IGFkbWl0 aXNh IGludmVzdGlnYXRl IDE5OTQ= c3lsdg== IExvc3Q= Y2VzdA== IDcx IHJlcXVlc3RlZA== IHdpbmRvd3M= IFBva8Op IFdpdGhvdXQ= TWV0 IGJlaGF2aW91cg== IHJlYWRlcg== IGh1bmc= IEtlZXA= IHJvbGVz IGltcGxlbWVudGVk IGJsYW5r IHNlcnZlcw== IEpheQ== IGNpdGVk IEZyaWVuZA== cHJvZml0 YXBvbg== IHJlcGFpcg== aXRlbQ== YXJyYXNz IGNyaXRpY3M= YWRp IEZhdGhlcg== IHNob3V0 IGZvb2w= IDg4 IHByb2R1Y2luZw== IGxpYg== IHJvdW5kcw== IGNpcmNsZQ== IHByZXBhcg== IHN1Ym1pdA== IG5pYw== bW9ycm93 44Or VW5kZXI= IHZpdGFs YXRlcm4= IHBhc3N3b3Jk IHB1YmxpY2F0aW9u IHByb21pbmVudA== IHNwZWFrcw== IGJhcnM= IGRlZXBlcg== IE1pbGw= cG9ydGVk IHdpZA== IGJ1dHRlcg== IHNtb2tpbmc= IGluZGljYXRlcw== S2V5 cm9wcmk= IEZpbGU= YWxsaW5n YXN0aW5n IFJ1cw== IGFkag== IDc5 YXZhbA== IHByZXN1bQ== YnVyZ2g= b25pYw== IGZ1cg== IHBvbGxz aWth IHNlY29uZGFyeQ== IG1vbnN0ZXI= aWdz IEN1cnJlbnQ= RXZlbnQ= IG93bmVyc2hpcA== ZW5kYXI= IGFycml2ZQ== IFRheA== IG51bGw= IFByaXY= IHRocm8= IGtpc3M= Y2F0 IHVwc2V0 YW5nbGU= aXRjaGVz ZWN0b3I= b2xvZ2lzdHM= IEdhbGF4eQ== IGNvcnJ1cHRpb24= IGhpbnQ= ZW50ZXI= IEhvc3BpdGFs IGdyZWF0bHk= IGJlZ3Vu ZXN5 IHNvaWw= IEFudG9u IG1haW50ZW5hbmNl 44Op IGRvemVucw== IGh1bWFuaXR5 IEFsYWJhbWE= IHJvbQ== d29ydGg= YXBpbmc= c3lsdmFuaWE= bGFo IGdhdGhlcmVk R0E= IGF0dGFja2luZw== Zm91bmQ= IFNxdWFyZQ== IGFyYml0 aWN0aW9ucw== IFdpc2NvbnNpbg== IGRhbmNl IFNhaW50 YXJjaHk= IGJhc2ViYWxs IGNvbnRyaWJ1dGlvbnM= IGxpdGVyYXR1cmU= IGV4aGE= cGVydHk= dGVzdA== IGJhYg== IGNvbnRhaW5lcg== bGV0dGVy IGZhbGxlbg== IHdlYnNpdGVz IGJvdHRsZQ== IFNhYw== IGJyZWFzdA== IFBM IHZldGVyYW4= IGludGVydmlld3M= IEFsZQ== IGJhbm5lZA== ZW5nZXJz IFJldm9sdXRpb24= aW50aA== IGNvbmNlcm5pbmc= SVZF IGV4cGVuc2Vz IE1hdHRoZXc= IENvbHVtYmlh ZHM= aXN0YW5jZQ== IGVudGl0eQ== Li4uIg== IHJlbGlhYmxl IHBhcmFsbGU= IENocmlzdGlhbnM= IG9waW5pb25z IGluZHU= bG93 IGNvbXBldGU= IHRob3JvdWdo IGVtcGxveWVk IGVzdGFibGlzaG1lbnQ= aWdlbg== IENybw== IGxhd3llcnM= IFN0YXRpb24= VEU= IExpbmQ= IFB1cg== aXRhcnk= IGVmZmljaWVuY3k= 4oCQ IEx5 IG1hc2s= IGRpc2FzdGVy IGFnZXM= RVJF ZXNpcw== IEhvbGQ= IGNhc3VhbA== YmxlZA== IGVuYWJsZWQ= IEVudmlyb25tZW50 IEludGVsbGlnZW5jZQ== aXBlcg== IE1hcA== IEJF IGVtZXJnZWQ= aXNkb20= IGNhYmlu IHJlZ2lzdHJhdGlvbg== IGZpbmdlcnM= IHJvc3Rlcg== IGZyYW1ld29yaw== IERvY3Rvcg== ZXR0cw== IHRyYW5zcG9ydGF0aW9u IGF3YXJlbmVzcw== SGVy IGF0dGVtcHRpbmc= T2Zm IFN0b3Jl w4PDgsODw4LDg8OCw4PDgg== IEtub3c= IGRlZmVuY2U= IHNjYW4= IFRlbg== IENoYWly IFBI IEF0bGFudGE= IGZ1Y2tpbmc= IGFuc3dlcmVk Ym4= IEthcg== IGNhdGVnb3JpZXM= IHJhdGlvbmFs IGN1c3Q= IHJvYm90 IGNvcnJlY3RseQ== IGdpZg== IGdyYXBoaWNz bWlj IGdyb3VuZHM= IE9wcA== aWF0ZQ== IGRpc3RyaWJ1dGVk IHNhbmN0aW9ucw== IGNoYWxsZW5naW5n dXRv IGluZ3JlZGllbnRz IGludml0ZWQ= IGZvdW5kZWQ= IFJlcXU= ZGVk IGJvd2w= IGJyb3RoZXJz IEhh SU8= IHdhZ2Vz aW1vcmU= b2NpYWw= IHNlZWQ= YXRpdmVseQ== IGFkZHJlc3Nlcw== IElvd2E= YWJldGg= IGF0dGl0dWRl aXNk Y2hpbGQ= IG1vbGU= IGRpc2NvdmVyeQ== eWFyZA== QnI= IDgy IHN1cHBsaWVz ZWxsaW5n IGRpc3Rpbmd1 Q1I= IHJlY2VwdA== IHZlcnQ= IHN3aW0= YmVj ZG9vcg== IFllYWg= IGdhbA== IGludGVyYWN0 IEVTUA== IENT YW1wcw== IGNvbnZpbmNlZA== IG9iamVjdGl2ZQ== IGRpc2g= IFBob3Rvcw== bGFk IGRvd250b3du b2ls aW5jdGlvbg== IHRvbW9ycm93 IENPTQ== IHN1cnZpdmFs c2hvdA== IHNldHRsZW1lbnQ= Q29ucw== IFhib3g= aW50ZXJlc3Q= IFNN YXJnbw== ZW5lc3M= IGV0aG5pYw== YmVyZWQ= TWlu IFRvaw== IGluY2VudA== IENvbW1hbmQ= IG1haW50YWluZWQ= IGJyZWFrcw== YnJpZGdl YXRhcg== YWdn IEZpbmFsbHk= dW5pY2lw IE9udA== bGVmdA== IHJlY29nbml0aW9u ICov IFBlcnM= IHdlbGY= IGFkZHJlc3NlZA== IEthbnNhcw== IHZpcnVz IHdoZXJlYXM= IHBhcGVycw== cmFtcw== IE1pbmlzdHJ5 IHBsZWFzdXJl IGFjcXVpcmVk IGR1cmF0aW9u anBn IGNhbG0= IE5ITA== IGJ1cm5pbmc= IGZvbGRlcg== aWNrZWQ= IFB5 IElsbGlub2lz Q2xhc3M= IEdvZGRlc3M= IHBlcmZvcm1pbmc= IHdlbGZhcmU= amFy SW50ZXI= IGxpbg== IGVuaGFuY2U= IG5vdGlvbg== ZmFyZQ== eXBlcw== IEFyZWE= IGNhbm5hYmlz IERpZWdv ZnM= IE1hbmNoZXN0ZXI= Y29tbQ== aW5pdGU= IGNvdmVyaW5n IFNvdW5k IDE5NjA= IDg0 ZWxlY3Q= emluZw== IGNpdGl6ZW4= IHBob25lcw== IHJhaWQ= IGlnbm9yZWQ= IE9iamVjdA== IHVwbG9hZA== Y2FyZA== IG1vZGlmaWVk IHJvb21z aWFo cmFuZ2U= aGVhc3Q= YWNodXM= IHN1Z2dlc3Rpbmc= 4oCL Z3JhZGU= RWw= IGNsb3RoaW5n IHJo IEhhbg== dW5pdHk= ZW5jaW5n IEF1c3Rpbg== c2VjdXRpb24= dHJh ZGVt IFF1YWw= IGhlYXZlbg== IHN0YWdlcw== IHdlZGQ= cGx1cw== aWZpY2lhbA== IEltbQ== IEhv aWV0aWVz IHBocmFzZQ== IGJyaWxs YWN0b3J5 IHByb3ZpZGVycw== IHNpbGVuY2U= IGFlcg== IEFJ IEFkdmVudHVyZQ== IHBsYXRmb3Jtcw== IGRlbW9uc3RyYXRlZA== IGludGVyZg== aW5ndG9u IHJhY2Vz IGdyYWRl dWx0YW5l IFRocm91Z2g= ZmFsc2U= IGJvdw== IEFC IGZsYXZvcg== IGhpc3Rvcmlj Z292 IGNvbG91cg== IHZpZXdlZA== IEVtYWls ZWxjb21l IGludGVydmVudGlvbg== IGRpdmVyc2l0eQ== IHBlcmlvZHM= IHJldmVyc2U= IFZlcnk= IHF1b3Rl IExlZnQ= dGhyb3VnaA== IHNjcmV3 IGxhbmRpbmc= IHBpbGw= IHdldA== IHByb3Rlc3RlcnM= IHJlcGVhdA== YXZlZA== ZXJr IHNhbGFyeQ== IFBlbm5zeWx2YW5pYQ== U3RpbGw= IG1heW9y IGtpdGNoZW4= IGZlYXR1cmluZw== IE11c2V1bQ== IFRvdXJuYW1lbnQ= IEZhbA== IHNlcnZlcnM= VUM= IGFueWJvZHk= aW1n IFRyYWRl aXh0dXJl dGhlbGVzcw== IGZpbmFuY2U= IGNsb3Npbmc= IFBhdHJp aWFj YWJlbA== ID4+ b3JvdXM= IGZpcm1z c2NyZWVu dW5h IGVtYmFycmFzcw== dWxzZQ== IGxldHRpbmc= IHRocmV3 aWxleQ== IGNoYW5uZWxz bGFu IFZlZ2Fz IHNlYXI= IGZhbnRhc3RpYw== YXJyZQ== dXp6bGU= IERlcg== VGhvc2U= IHN3aW5n IHNoZWV0 aW5kZXg= Y292ZXI= b2dhbg== IHZhcmlhYmxlcw== IFRlY2g= IHNwb2tlbg== YWNoZWw= IERh IE1vdW50YWlu IGxvYWRlZA== IGZvb3RhZ2U= dmVyc2lvbg== IHVubA== IFBob2VuaXg= IHRocm93aW5n IGZpcmluZw== IHRyYWNraW5n IHdpZHRo IHN0cnVnZ2xpbmc= cm9vbXM= b3Rpb24= IG1vbnRobHk= IFNlcnZlcg== IGVnZ3M= b3Blbg== TUM= IDE5OTM= IGhpcmVk IHN0YXllZA== IEFsbGVu IHN0cm8= IDk4 c3RlcA== IFR1cmtpc2g= IGZhYnJpYw== aXN0aW5n IERvbQ== IGRhdGVz IHByb24= IGJhc2tldGJhbGw= IGx1Y2t5 IEFyYWJpYQ== IGFzc3VtZWQ= ZXN0eQ== IGFmZmFpcnM= IGdsYWQ= IEluZGVlZA== IEZB IFdvcmQ= IGpvaW5pbmc= aWZpY2U= cHJlYWQ= aXJ0cw== IFNlbGVjdA== IHBvcHVsYXRpb25z YXdhcmU= IG5vc2U= IGNvbXBsYWludHM= c3RhcnQ= IHNjb3Jpbmc= VGhhbmtz IG1pbmluZw== IHZpc2l0b3Jz U0g= IGRhbWFnZWQ= IGNoYXJhY3RlcmlzdGljcw== IFBlbnQ= REM= IDgz IFNpeA== cmF0ZXM= IGZsYWdz IEJyZXc= ZG9n TWFyaw== Ly8vLw== IGV4ZWN1dGlvbg== IGpva2U= cGhvbmVz IHRlc3RpbW9ueQ== IG9ic3Q= UUw= IEN1dA== IHN0dWRpZWQ= IE5pbnRlbmRv aWNrZXQ= IE5CQw== IGxhZA== IEJyYQ== IE1vaA== IGtlcm5lbA== IG92ZXJ3aGVsbWluZw== IGFnZWQ= IGFwcGxpY2FibGU= IENvbmQ= IHJvYWRz IEJsb2Nr bWFkZQ== b2RnZQ== IGNvbW1hbmRz IG9mZmljZXM= dmVsYW5k IHR1dA== IHJlY2VpdmVy IEZybw== IHNob3BwaW5n IGlQ IFN0cmU= IEFCQw== IGVudGVydGFpbm1lbnQ= IEJvdw== b3J0ZWQ= TWM= IHJlYWRz Z3JhZA== IENvbGxlY3Q= IOKIkg== IENhcGl0YWw= ZWRlcmF0aW9u IGVtcGxveWVy IGludm9sdmVtZW50 IGFueGlldHk= YWxpYQ== IHJvb2Y= IEFtb25n IERlbW9jcmF0 IHN0YXRz IFZpbGw= IGNvbnN0aXR1dGlvbmFs IHJlZmVycmluZw== aXR0eQ== IHRhY2tsZQ== b3V0dWJl IGJhY2tlZA== IEhvbmc= IEJyb2Fk IGVsZQ== IE90dA== IDE5OTI= aG91cg== YWNodXNldHRz Q2Fs IGRlZmVhdGVk IDgx ZXNw IHNlZW1pbmdseQ== d2Fz IEplbm4= IEt1cmQ= IGdlbmU= IGRpc2NvdW50 UmV0 RUNU KCk7 IGNsdWJz IHNpZA== IE1hcnNo Q2hlY2s= IHBw IEVhZw== aWRlc3ByZWFk IGJlaW5ncw== RlQ= IGludHJvZHVjdGlvbg== IENoYW5nZQ== QVJE IDExMA== YWRvd3M= aWVyY2U= IG1lYWw= YXV0aG9y IEJhbmc= bGFob21h IHJhbmtz MjAxMQ== Pz8/Pw== bWF4 IGNvbGxhcHNl IG9wZW5z IGVjaG8= IHNvcGg= IHJhY2lzdA== IGVub3Jtb3Vz IHdhdmVz IHRhcA== IGNvbXByZWhlbnNpdmU= Li0t IFJveQ== IGZhcm1lcnM= UmVsYXRlZA== YWlyZWQ= cm9uZXM= IENyaW0= IHByb3BvcnRpb24= IGRlc2lnbnM= IG5lZ290aWF0aW9ucw== IHZpcnR1YWxseQ== IEJhdG1hbg== IHdhcm4= IGxlZ2l0aW1hdGU= bWF0ZQ== IGNvbnZlbnRpb24= LCw= bmV0aWM= IFNE IGNvbnNpc3RlbnRseQ== IGNvbXBlbnNhdGlvbg== IHB1bmlzaG1lbnQ= IHll IHRpZQ== IEJ1cmVhdQ== aXJsZg== IEJ1 IEFyZW4= IFBoaWxpcHA= IGtuaWZl IG1lbW9yaWVz IFJvc3M= IGFuZ2xl IDg2 IFRodW5kZXI= IHJlbmQ= IFRvdXI= IGNvdW50cw== c3VuZw== IEltcA== IGVkdWNhdGlvbmFs IGFjY2Vzc2libGU= Q09N IGRyZXc= eWVy R2w= YW1pbmU= T1JU T0I= SUI= bWFzdGVy IHRyaWFscw== b2d5 aGFy IFRydXN0 IHByZWZlcnJlZA== aXJsZnJpZW5k IE5ldg== IGJpbg== IGNvdw== UGFnZQ== IHNpZ25hdHVyZQ== IEJM NzAw IHJldGlyZWQ= IGJ5dGVz IG5laWdoYg== IExlZ2VuZA== IGRldmFzdA== IHN1c3BlY3RlZA== aXNvbnM= IFBva8OpbW9u c2NhbGU= IGNhcGFiaWxpdGllcw== IHJldmVs IGNoZWVzZQ== ZHk= aWdyYW50 IGZhaWxpbmc= Yml0cw== IEhlcm9lcw== IEdob3N0 IFNjaWVudA== IGFwcG9pbnRlZA== dXJp IGluc3RpdHV0aW9u IGV4cGFuZGVk Z3JlZw== IG1vbml0b3Jpbmc= IHBvZGNhc3Q= IGNvYWxpdGlvbg== IDk2 Sm8= IHN0b2xlbg== IFNhYg== IHN0b3Bz IGhvbGlkYXk= IGludHI= Q2Fy QmxhY2s= IExHQlQ= IHdhcm1pbmc= IEFuZGVyc29u IDg5 IHByb2R1Y2Vy TWVk IGFjY3VyYWN5 IE1hcnZlbA== aXphYmV0aA== IFBhdHJpY2s= bW9ueQ== IG1pbmk= YWNsZXM= IG92ZXJ0 dGhleQ== IG1lbWJlcnNoaXA= IFZlbg== IGV4Y2g= IHJlbW92YWw= IERhdmU= VFk= bWFk IEZpbmQ= IGFkZXF1 IGVj IHRlZXRo IGVtb3Rpb24= IHBlcm0= IHNvbGVseQ== ZGI= IGV4dHJhb3Jk SUdIVA== Y2Fs IGd1aWRlbGluZXM= IGR5aW5n IHN1c3BlbmRlZA== IFByZW1pZXI= IEFudGhvbnk= ZWx2ZQ== IGRhZA== IEV0aA== IEZvb3RiYWxs IGFiYW5kb25lZA== IDw8 IG1hcmNo IGhvcnJvcg== 4oCmIg== IGNoaWxkaG9vZA== IGNhbXBhaWducw== IGx1bmNo IEFsYmVydA== YmxvY2s= 4paI4paI b3VuZGluZw== IGJvbmU= b3JnYW4= YWRlcnM= IEZsYXNo IERyaXZl IHRvbmlnaHQ= IHdhcnM= IEZM IGZvcm1hdGlvbg== Y29uc3Q= TmV3cw== IGNvbXBl b3Jpb3Vz IFN0YWZm IGRpc2N1c3Npb25z IFByb3RlY3Rpb24= IEphbQ== IGNyaXRlcmlh IGluc3RhbGxhdGlvbg== IGFjY29tcGxpc2g= aXp6YQ== IHB1Ymxpc2hlcg== IHJlc2N1ZQ== IFRyeQ== VUxM IFNvbQ== IEhvcA== b3JldA== dGhz b3Jkb24= IHBvY2tldA== IEludg== RG93bmxvYWQ= IENyaW1l IGJlbmU= IEd1aWRl IEFzc2VtYmx5 IHBhcmFtZXRlcnM= SUU= IEFsZXhhbmRlcg== IGNvbmNlcnQ= IFNjaGU= IHNob2Vz IHZpc2l0aW5n IHJlY2FsbA== IGJ1Yg== IHJ1cmFs IGNvbmNyZXRl IFJvcw== TmV4dA== UnVzcw== IGxvYW5z IFNoaWVsZA== IHRyZW0= aGVtYXQ= a2c= IEhhcnJpcw== aXNpdGlvbg== IE1vdmU= IEZD IGZhdGU= IENobw== IHRpcmVk IHByaW5jaXBhbA== aGlzdA== aWVuY2Vz YXRoeQ== IHNldmVudA== IG1vb2Q= IHN0cmF0ZWdpYw== IGRpc2Vhc2Vz IGZvcnVt IHRlbXBvcg== IGhlYWRxdWFydGVycw== UGFy aWdl ZmxpeA== IGd1aXRhcg== IDk0 T25seQ== IHJlbGVhc2Vz cm9waA== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IDYwMA== IENvbnRpbnVl aWdhdGU= IENyaXQ= c3lzdGVt IGRpc2FibGVk IHVuZXhwZWN0ZWQ= aXRodWI= IHVuY2xlYXI= IEVzdA== IGNvbnRyYWQ= IHN0cmF0ZWdpZXM= dmVudHVyZXM= IHBhc3NhZ2U= QU1F IGltcHJvdmluZw== IHJldmVhbHM= IGRlY3JlYXNl b3Zh IGFubm95 IFNob3J0 IExpYnJhcnk= IGN5YmVy bmVsbA== IEh1cg== IENC IHBob3RvZ3JhcA== VUk= IHNlZA== R2U= IDg3 IGRpdmVyc2U= IGVuY291cmFnZWQ= IGNvbnNwaXJhY3k= IGJpcmRz IG9wZXJhdG9y IGhhbmRmdWw= IGNsYXNzaWZpZWQ= Pyk= IGRyYW1hdGlj IGludmVzdGlnYXRvcnM= aXRv IHdpZGVzcHJlYWQ= IFJvb20= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGNvbGxlY3RpdmU= IGpvdXJuYWxpc3Q= U3RyaW5n IHRlbXBlcmF0dXJlcw== aWxh IGd1aWQ= IGluc3BlY3Q= IG1pc3NpbGU= IE1heW9y IG1hbnVhbA== IHNpbXVsdGFuZQ== IHJhdGluZ3M= IHN1Y2s= IDk3 IHVuaXZlcnNhbA== IHBoYXJt IGRpc3J1cHQ= aWFubw== QVY= IGZ0 IHN0YXRpc3Q= b2xkcw== IFdhbGtlcg== cGhw IHVuZGVydA== IExhcw== aXNob3A= bnRpbA== cmVzaG9sZA== IFdoZXRoZXI= TXM= IGRlbnk= IENsb3Vk IHByb3ZpZGVy IHN1cnZpdg== IFVwZGF0ZQ== aGFz IG1pc3Rha2Vz Y2hhcmdl cGxlZA== cml0eQ== IG5vZGU= IE1hc3NhY2h1c2V0dHM= b29scw== bGljYXRpb24= IGZhaWxz ZW1hbGU= b3Jp YmFja3M= IHNoaXJ0 ICcn IE5BVA== IHdhdGVycw== ZWxzb24= IGVhc2U= IHNjYXI= IGNvbnRlbnRz bWluZA== IGNvbnRyaWJ1dGlvbg== IHNocg== IGhhbmRlZA== IHN0YWJpbGl0eQ== IHRyYXZl RW0= IG1pcnJvcg== MTIz IHdlaWdo IGZpY3Rpb24= b3V2ZXI= aXN0YW50 cml0aW9u IEZlZA== IHBoeXNpY2FsbHk= IHN0YWtl IEFydGljbGU= IEFyYw== IExld2lz IE1pbmQ= IGRlbW9uc3RyYXRl IHByb2ZpdHM= dmlzaW9u b21pYw== b2xpZA== IGJhdHRsZXM= IGRyaXZlcw== IGVhc3Rlcm4= IFNvbnk= ISEh YXJhdGlvbg== dmFyZA== IEdM cG9ydGF0aW9u IDky IGxhd21ha2Vycw== IHByb3RlY3Rpbmc= IEVQQQ== IHllYWg= IHNoYW1l b2xwaA== ZXZlbg== eGl0 IGF0dGFjaA== IHJlcHJlc2VudGluZw== IG9icw== IFV0YWg= aWZmcw== IEZyZWVkb20= w7M= QUs= IGluY2lkZW50cw== aXRhZ2U= IHZpZXdlcnM= Y2Q= IG1vdXNl IGNsYXI= IGFjY29yZGFuY2U= IGJvdA== Y29y IFN1bW1lcg== aGVsZA== IGlubm9jZW50 IGluaXRpYXRpdmU= b2xz X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= IHNwb3Rz cGFjZQ== IGNvbnZlbnRpb25hbA== IGNvcnBvcmF0aW9ucw== IGJsb2NrZWQ= SEQ= YXR0ZXJlZA== IHJlZmVycw== IGJ1Y2s= IERpZ2l0YWw= MTIw IHRvcGljcw== VEY= xIE= YnJpZA== cmVlbWVudA== IHVuZGVybHlpbmc= IE1lbWJlcg== IGludmVzdGlnYXRpbmc= IHByZWduYW5jeQ== IHRvdWNoZG93bg== IEJhbmQ= IENhbGxlcg== IGluc3RhbmNlcw== UFA= d2E= R29vZA== IDE5OTE= IENvbGQ= IGZlYXJz IHJlbWFya3M= hpI= YXRhbA== IG1pdA== IGV4cGVyaW1lbnRz aXB0 Q29sb3I= aW5kdQ== VXBkYXRl IDkz QWc= IOU= YW5jb3V2ZXI= Qm90aA== IGp1ZGdlcw== T2JqZWN0 IHN0ZXJl dW1ibg== IHBhcnRpY2lwYXRpb24= IFN0YXJz IEplcmU= IHdlZWtseQ== IEJhbg== IGNvbnZlcnNhdGlvbnM= IFBpdHQ= dXo= IEluZGlhbmE= IEtpY2s= IGluZmVjdGlvbg== IGhlcm9lcw== IHNldHRsZWQ= IHN0cmlw IGhhbA== IGR1bXA= IFNjaQ== IGxlcw== IHJlZmVyZW5jZXM= IFVSTA== IEJyaWRnZQ== IHdhbnRpbmc= Rm9yY2U= IGV4Y2x1cw== TWVhbndoaWxl bW4= IGdlbnRsZQ== bWFrZXI= c2VuYWw= IEdybw== b3VyaQ== IFJhaW4= IEFsbGlhbmNl IGxpZnQ= ZWxh U0Q= IENsZXZlbGFuZA== IHJhbmtlZA== IHN0YWRpdW0= IGRlYWRseQ== 5Lg= IHJpZGluZw== YXJpYQ== IEFybW9y IGRvY3VtZW50YXRpb24= IEdyZWVjZQ== cmVlaw== IGxlbnM= IFNh IGdyb3Nz IEVtZXI= YWdlcnM= IER1Yg== IFJo IEFNRA== IGFycml2YWw= IGRlc2VydA== IHN1cHBsZW1lbnQ= IFJlc3A= IGtuZWU= IG1hcmdpbg== Zm9udA== b2dn MjAxMA== IFBpcg== IFByb20= aXZhbHM= IGludGFrZQ== IGRpZmZlcmVudGx5 dWdz IGJpdHM= Y2x1ZGVk IHNlYXJjaGluZw== IER1 dW1ibGU= IGZ1bmN0aW9uYWw= IEJhbHRpbW9yZQ== IENvdWxk IGRlc2lyZWQ= IGNpcmN1aXQ= IEx5bg== IEdP IEZhbHNl cmVwcmU= Jzo= YWx0aWVz IG1pbmlt IGRyb3Zl IFNob3VsZA== IGhpcA== IHByb3M= IHV0aWxpdHk= IE5hdHVyZQ== IE1vZGU= UHJlc2lkZW50 b3Bw cmF0 Zm9ybWFuY2U= IGNvbmNlbnRyYXRpb24= IGZvbnQ= IEJ1ZA== IGFtaWQ= IHJldmVycw== IE1M QmFy IGludGVyYWN0aW9u IGp1cmlzZA== IHNwZWxscw== ZGVw Zmls IGNpdmlsaWFucw== dXR0ZXI= IENvb3Blcg== IEJlbG93 IGVudHJhbmNl IGNvbnZlcnQ= IGNvbnRyb3ZlcnN5 b3dlcmVk IGNvbnRyYXJ5 IGFyYw== IEV4ZWN1dGl2ZQ== IE9mZmljZXI= IHBhY2thZ2Vz IHByb2dyZXNzaXZl d2lkdGg= IHJlc2VydmVk dm9s IFNhbXN1bmc= IHByaW50ZWQ= IGNlbnRlcnM= IGludHJvZHVjZQ== IEtlbm5lZHk= IG9kZHM= IHN1cmVseQ== IGluZGVwZW5kZW5jZQ== IHBhc3NlbmdlcnM= cmVwcmVuZQ== IEJlaA== IGxvdmVz IEVTUE4= IGZhY2lsaXQ= IGlkZW50aWNhbA== IGRvY3Q= IHBhcnRuZXJzaGlw Y29uZg== IEhpZGU= IGNvbmZ1c2Vk IENvdw== TWVu IHdyZXN0 IElyYXFp IGhvbGVz IFN0dWRpZXM= IHByZWduYW50 aGFyZA== IHNpZ25hbHM= SVg= IHB1bGxpbmc= IGdyYWR1YXRl IG5vbWluZWU= RGF0ZQ== IHBlcm1pdHRlZA== IOKCrA== IE9rbGFob21h U3RhcnQ= IGF1dGhvcml6ZWQ= IGFsYXJt IENvcw== dmFu IGdlbmVyYXRpb25z Y3VsYXI= IGRyYWdvbg== IFNvZnR3YXJl IEVkd2FyZA== IGNvbnRyb2xsZXI= U2Vu Z2VyZWQ= IFZpaw== IGFwcHJvYWNoZWQ= VGhhbms= IGNhbmNl IGZvcm11bGE= IFNtYWxs IHdlYWtuZXNz IHJhbXA= aXR1ZGVz anVk IGJyaWxsaWFudA== IGFjY3Vz c291cmNl IDgwMA== IEV2aWw= U3c= IGhvbWVsZXNz d2Vlaw== aWVucw== cmljcw== IFRoaXJk VE8= IG9yZ2FuaWM= IHByZXNlbnRhdGlvbg== YWdo IERvd25sb2Fk dmF0aW9u IGFzc2VtYmx5 b3JhYmxl aG9sZGVycw== IEJlcm5pZQ== IEhlbHA= IHRvbmc= IEZpZ2h0 IGJlYWNo Qm9vaw== IExpYw== IHJ1c2g= IFJvdW5k b3Vw IE1hcng= IGNhbGN1bGF0ZWQ= IERldmls IFNhcmFo IG9jY2FzaW9uYWxseQ== IGJ1bGxldA== QXZhaWxhYmxl Z2F0ZQ== IDkx IGhvc3A= IHByb21pc2Vz IEhJVg== IFN0YWRpdW0= IFN0b2Nr IENvcnBvcmF0aW9u Z2FnZQ== Tkc= IENyZWRpdA== IHNuZQ== aWJs IGFjY3Vt c3VjaA== IHRlcnJvcmlzdHM= IGNvbnNjaW91c25lc3M= IFpo IGRyYW1h b29sYQ== cGlyYXRpb24= IGxhYm91cg== IE5pbg== IHV0dGVy IGRlbW9jcmF0aWM= IGFzc2Fzcw== aWxhdGlvbg== IGdlc3Q= IGFicm9hZA== IG1ldGFi IHNvcnRz IGZsYXY= VUI= IG1n IE5vdGhpbmc= IE9k IG11c2ljYWw= MjAwOQ== IGRyb3Bz b2NhdGVk YXRlcmFs MDAwMDAw IGdyZQ== IGVxdWFsaXR5 IGJ1cmRlbg== IHZpZw== IExlYWRlcg== LS0tLS0tLS0tLS0t IGNlcmVtb255 IGZpZ2h0ZXI= IGFjdG9ycw== IOY= YW1hbg== Rmk= IGFsaWdu cHV0ZXI= IGVsZGVy IE5TQQ== IHJlcHJlc2VudGF0aW9u IE9udGFyaW8= SVRI dXNhbGVt IGhhcmFzc21lbnQ= aXR6ZXI= IHN5bXA= IGJveGVz IERS IG1hbmlmZXN0 YXRyZQ== IF4= IGRpZXM= bGV0b24= IG1pc3Npb25z ZXRoZQ== IHJlc29sdmU= IGZvbGxvd2Vycw== IGFzYw== IGtt bG9yZA== YW1tZWQ= IHNpbGVudA== IEFzc29jaWF0ZWQ= IHRpbWluZw== IHByaXNvbmVycw== IEtpbmdz IEZpdmU= IHRvd2Vy IGFwcHJvYWNoZXM= IHByZWNpc2VseQ== IGJ1cmVhdQ== IE1vdGhlcg== IElzcw== IGtleWJvYXJk aXR1YWw= IGZ1bmRlZA== IHN0YXlpbmc= IHBzeWNob2xvZ2ljYWw= IG1pbGU= IExlb24= IEJhcmI= d2lsbA== IHdpZGVy IEF0bGFudGlj IHRpbGw= IFJvbWU= cm90 IGFjY29tcGFu IGZsb3Vy YWNv V29ybGQ= IEV4cHJlc3M= IFl1 Q29y IHBsZWFzZWQ= cGFydHk= IHBvaW50aW5n IGluZmxhdGlvbg== IHJveQ== ICks YWluZXI= IHdlZGRpbmc= b3Jtb24= IHJlcXVpcmluZw== IHF1YWxpZmllZA== IHNlZ21lbnQ= RU5E IHNpemVz ZWFscw== IGNvcnJ1cHQ= YXNzYWRvcg== IGNlbGVi IGRyZWFtcw== IE1lc3M= IGNoZWNraW5n IFZlcnNpb24= IHByZXBhcmluZw== IGFjdGl2ZWx5 IERpZmY= IGx1eA== IFdpbnRlcg== YWN0ZXJpYQ== IE5F IGRlcHV0eQ== IHRyYW5zZ2VuZGVy IHN1bW1hcnk= IGluaGVy ZXJpZXM= Y2hhcg== IFlhbg== IGtub2Nr IFBhdGg= IGxpcA== cm9sbGVy IGltcHJlc3Npb24= IGNlbGVicmF0ZQ== IHNsaWRl IGd1ZXN0cw== IGNsaXA= RlM= IHNhdmluZ3M= IGNhcHRhaW4= IGxlZ2FjeQ== IERlbnZlcg== IHdvdW5kZWQ= dGFib29sYQ== QUNU IHB1cnN1ZQ== IG94eQ== IHE= IHNlbWk= IE5lZWQ= IEFmZmFpcnM= IG9ic2M= IGNoZWNrZWQ= IGR1YWw= Q29kZQ== IE1E bGVt dWx0eQ== IMKp IEVsaXphYmV0aA== IGNlbnR1cmllcw== YXJkZWQ= c3Jj IGV2aWRlbnQ= ZW5uaXM= YXRpbg== IHVuZW1wbG95bWVudA== IE1hcmlv IGludGlt Q2hyaXN0 IGJpb2xvZ2ljYWw= IHNvbGRpZXI= IEFkZGVk IG1hdGg= IEdpbA== IGJpYXM= IGRhdGluZw== IE9jZWFu IG1pY2U= TXVz aGlyZQ== IFRlcw== U2VydmVy bGltaXRlZA== U2l6ZQ== IG1ldGVycw== IHJvY2tldA== ZXNzZWU= IGNlcnRpZmljYXRl IElyYW5pYW4= QVNT IGdyaWQ= RGVj IHJvbGxpbmc= Y29tbXVu IFN3ZWRlbg== YnVyeQ== IHRpc3N1ZQ== IHJhY2lzbQ== IExvY2Fs IG15c3Rlcnk= IGV4YW1pbmU= IHN0ZW0= IHNpdHM= IGhvcGVk b3Rpbmc= IGRpYWxvZ3Vl IHBlcnN1 V2F0Y2g= bGF5 TUFO IGNocm9uaWM= IFBvcnRsYW5k bWFya2V0 IFNFQw== IHBhcmFsbGVs IHNjYW5kYWw= IGNhcnJpZXM= IHBoZW5vbWVub24= aHVtYW4= YWNrZXI= IE94 IHJldGlyZW1lbnQ= dGFpbm1lbnQ= b3ZpZQ== IEdlYXI= IGR1dGllcw== IGRvc2U= IHNjcm9sbA== TUI= aW5m IHNhdWNl IGxhbmRzY2FwZQ== cmVkZGl0 IENoYW1waW9uc2hpcA== IFJlZGRpdA== YWxpZA== IGNvaW4= IG92ZXJz IHBvc3Rpbmc= YWJvdXQ= IGZlbA== YW5keQ== IGJvbGQ= IGZvY3VzaW5n ZWZmZWN0 R1I= IGRlZW1lZA== IHJlY29tbWVuZGF0aW9ucw== IHN0ZXBwZWQ= IHZvdGVy IERlZXA= IEluc3RhZ3JhbQ== IG1vZGVyYXRl IE1hcnlsYW5k IHJlc3RyaWN0ZWQ= IE1C IENoYWxs IHRvYg== IGNpcg== IE9jYw== IEV2ZXI= IGNvbGxhcHM= SU5GTw== PS0= IFBpY3Q= IEFjY291bnQ= bmM= IG91Z2h0 IGV4cG9ydA== IGRydW5r KCc= IHdpc2U= IE1vcnQ= bmVjZXNz IGFuY2VzdA== IEluY3Jl IGZyZXF1ZW50 bWly IGludGVycHJldGF0aW9u IGRlcGVuZGVudA== IGNvaW5z IEJvbA== VmlkZW8= IEp1c3Rpbg== IGZhdGFs IGNvb2tpbmc= IGNvbmZ1c2lvbg== aXBoZXI= IGN1c3RvZHk= IE1vcmdhbg== b21hY2g= IEdvdmVybm9y IHJlc3RhdXJhbnRz ZWxpbmc= IGFja25vd2xlZGdlZA== IHRoZXI= IGdlbmVz Y2hpbmc= SGV5 IHRhY3RpY3M= IE1leGljYW4= IHZlbmQ= IGhlcw== cXVlcg== IG5vdGluZw== IENhbWVyb24= IHRhcmdldGluZw== cm9jaw== IGNyZWRpdHM= IGVtb3Rpb25z IHJlcHJlc2VudGF0aXZlcw== bmV3cw== IGxlZ2lzbGF0aXZl IHJlbW92aW5n IHR3ZWV0ZWQ= IENhcnRlcg== IEZpeGVk IGZvcmNpbmc= IHNwZWFrZXI= IG1hbGVz IFZpZXRuYW0= bGluZWQ= IGNvbmNlcHRz IHZvaWNlcw== b2ly IFRyaWI= V2hl IEplcnVzYWxlbQ== IFNhbnQ= IGN1bA== IGxhZHk= IEhhd2Fp IGFydHM= IElubg== IE1hY2hpbmU= IEVtcGVyb3I= IHNsb3Q= Z2x5 IFByb2Nlc3M= SUlJ IGF0aGxldGVz IFRlbXBsZQ== IFJlcHJlc2VudA== IHByZXNj IHRvbnM= IGdvbGRlbg== IHB1bmNo IEdS aXZlcnBvb2w= IGVuYWN0 IGxvYmJ5 IG1vcw== IHBpY2tpbmc= IGxpZmV0aW1l IGNvZ25pdGl2ZQ== RWFjaA== em8= IGR1Yg== IGNvbnNpc3Rz b2xu IGZlc3RpdmFs YW1vdXM= IGludGVsbGln d29yZHM= IFNtYXJ0 IGRlbGU= IGxhcHQ= IG1hZ2ljYWw= IFNpbg== YnVz dXJpdGllcw== aWdodGg= IFJ1Ynk= IFN1cmU= b2x2aW5n IGp1bg== T1NU IGltcG9zZWQ= IGFzdHJvbg== IGNvcnJlbA== IE5T IEtpdA== IEZ1dHVyZQ== YnVybg== IGltbXVuZQ== b2N1cw== IGNvdXJzZXM= IFN0cmluZw== IGxlYW4= IGdob3N0 IG91dGNvbWVz IGV4cGVuc2U= IGV2ZXJ5ZGF5 IGFjY2VwdGFibGU= QWg= IGVxdWlwcGVk IG9yYW5nZQ== RlI= IER1dGNo VGhvdWdo IFJhbms= UVU= IFJvYmVydHM= d2hhdA== cmVuZA== IGRpc2FwcGVhcg== IHNwYXdu IExhbQ== b2lz IGRlc2VydmU= IG1pbmltYWw= IG5lcnZvdXM= IFdvdWxk IHJvb2s= IFZhbmNvdXZlcg== IHJlc2lnbg== c2hpcmU= IFdvcmtz IEJ1aWxk IGFmZm9yZGFibGU= IEdhcnk= IEFyZW5h IGhhbmdpbmc= IGltcGxpY2F0aW9ucw== IFNvbmc= IG1haW50YWluaW5n IGd1YXJkcw== Q09O IGRlcml2ZWQ= IGV4ZWN1dGVk IHRoZW9yaWVz IHF1b3RlZA== IEFuZHJl b2dh c2VsZXNz aW5mbw== IEJlbGc= IHRlYXJz IFN1cnY= IGJpcnRoZGF5 aWdpb3Vz aW1tZXI= IHNwZWN0cnVt IGFyY2hpdGVjdHVyZQ== IHJlY3J1aXQ= YXJtYQ== VGFibGU= IG1vbnN0ZXJz IEdvdg== IGRlc3RpbmF0aW9u IGF0dHJhY3RpdmU= IGZvc3M= IE1vcmVvdmVy IHByZXNlbnRz VEhF IHJlcGx5 cHRvbg== IGN1bQ== IGRlbGlnaHQ= IGFmZmVjdHM= IGRvbmF0aW9ucw== IFRveQ== IEhpbQ== TUVOVA== IG92ZXJjb21l aXRjaGVk IEZhbnRhc3k= IEhhdA== IEJlYXN0 Ym90dA== IGludmVzdGlnYXRpb25z UnVu IGh1bnRpbmc= ZGk= ZnVuZA== IHNlc3Npb25z ZXN0eWxl IHBvcnRyYXk= b2lkcw== WWVhaA== IGNvbW11bmljYXRl IGNvbWVkeQ== IFlhbmc= IGJlbHQ= IE1hcmluZQ== IHByZWRpY3RlZA== UGxheQ== IGltcG9ydGFudGx5 IHJlbWFya2FibGU= IGVsaW1pbmF0ZQ== RGF2aWQ= IGJpbmQ= VklE IGFkdm9jYXRlcw== IEdhemE= aW1w REI= IE5h IFNpbWlsYXI= SUVT IGNoYXJpdHk= dmFz bWF0aA== IOKW b2tlcg== bmR1bQ== IGNhcHM= IEhhbA== MjAwMA== ZWFu IGZsZWV0 IHJlY3Jl UmlnaHQ= IHNsZWVwaW5n aWppbmc= a2luZA== IGRlc2lnbmF0ZWQ= w6Q= IGFuaW1hdGlvbg== a2Vl IEludHJvZHU= IC8+ IGRlbGF5ZWQ= IHRyZW1lbmQ= IGN1cmlvdXM= VXNl IGxlY3Q= ZGFt IGlubm92YXRpb24= IFBvaW50cw== IGxvYWRpbmc= IGRpc3B1dGU= Y3RpYw== aXJkcw== IEJZ IG51cnM= IFZhbHVl SU9OUw== IEh1bQ== IHRlbXBsYXRl bWVycw== IGFwcGVhcmFuY2Vz IEVudGVydGFpbm1lbnQ= IHRyYW5zbGF0aW9u IHNha2U= IGJlbmVhdGg= IGluaGli IGV1cm8= YWJldGVz IHN0dWR5aW5n IE1hcw== IHBlcmNlaXZlZA== IGV4YW1pbmVk IGVhZ2Vy IGNvYWNoZXM= IGltcGVy Y2hp IHByb2R1Y2Vz Iiku IEV2ZXJ5b25l IG11bmljaXA= IGdpcmxmcmllbmQ= IGhpcmU= IFZpY2U= IHN1aXRhYmxl b3B5 IGluZXF1 IER1a2U= ZmlzaA== Zmlyc3Q= IE9icw== IGludGVyaW9y IEJydWNl IFJ5 IGFuYWx5cw== IGNvbnNpZGVyYWJsZQ== IGZvcmVjYXN0 IGZlcnQ= b3JzaGlw IERydWc= IEFMTA== OiI= dGh1cg== IE1haWw= IGJhbGxvdA== IGluc3RhbnRseQ== IENoYW5uZWw= IHBpY2tz IDE5ODk= IHRlbnQ= b2xp IGNpdmlsaWFu Ymxpbmc= ZWxsbw== YnU= IGluY2g= IGxvZ28= IGNvb3BlcmF0aW9u IHdhbGtz IGludmVzdG1lbnRz IGltcHJpc29u IEZlc3RpdmFs IEt5 IGxlZ2FsbHk= IGdyaQ== Y2hhcmc= U2w= IHRocmVhdGVuaW5n ZHVjdGlvbg== Zmxvdw== IGRpc21pc3NlZA== aWJyYXJpZXM= Y2Fw ZWxl IE1jRw== IEhhcnZhcmQ= IENvbnNlcnZhdGl2ZQ== IENCUw== cG5n IHJvb3Rz IEhhdmluZw== dW1ibGVk IEZ1bg== XC8= IFNlYXJjaA== cGxleA== IGRpc2N1c3Npbmc= IGNvbnRpbnU= IFRhaQ== IFdpaw== RnJlZQ== Zml0 IHJlZnVzZQ== IG1hbmFnaW5n IHN5bmQ= aXBlZGlh d2Fsaw== IHByb2Zlc3Npb25hbHM= IGd1aWRhbmNl IHVuaXZlcnNpdGllcw== IGFzc2VtYg== dW50dQ== RmluYWxseQ== QVNF IEF1dG8= IEhhZA== IGFubml2ZXJzYXJ5 TEQ= IER1cg== IFVsdGltYXRl aWhhZA== cHJvZHVjdA== IHRyYW5zaXQ= IHJlc3RvcmU= IGV4cGxhaW5pbmc= IGFzc2V0 IHRyYW5zZmVycmVk IGJ1cnN0 YXBvbGlz IE1hZ2F6aW5l IENyYQ== IEJS Z2dlZA== IEhF TWljaA== YmV0 IExhZHk= eWx1bQ== ZXJ2ZXM= IG1lZXRz d2hpdGU= TG9n IGNvcnJlc3BvbmRpbmc= IGluc2lzdGVk R0c= IHN1cnJvdW5kZWQ= IHRlbnM= IGxhbmU= IGNvaW5j aG9tZQ== IGV4aXN0ZWQ= ZWN0ZWQ= IERvdWJsZQ== bGFtbQ== IHNrZXB0 ZXhw IHBlcmNlcHRpb24= aWV2 IEJlaW5n b2Z0 IGFkb3B0 Ljo= XTs= V2luZG93cw== IHNhdGVsbGl0ZQ== QVNI IGluZmFudA== ZGVzY3JpcHRpb24= IE1lYW53aGlsZQ== Y20= b2Nh IFRyZWF0 YWN0b3I= IHRvYmFjY28= IE5vcm0= ZW1wdGlvbg== IGZsZXNo IGpl b29w IEhlYXZlbg== IGJlYXRpbmc= YW5pbQ== IGdhdGhlcmluZw== IGN1bHRpdg== R08= YWJl IEpvbmF0aGFu IFNhZmV0eQ== IGJhZGx5 cHJvdA== IGNob29zaW5n IGNvbnRhY3RlZA== IHF1aXQ= IGRpc3R1cg== IHN0aXI= IHRva2Vu RGV0 IFBh IGZ1bmN0aW9uYWxpdHk= MDAz c29tZQ== IGxpbWl0YXRpb25z IG1ldGg= YnVpbGQ= Y29uZmln TlQ= cmVsbA== YmxlbQ== IE1vbQ== IHZldGVyYW5z IEh1 IHRyZW5kcw== YXJlcg== IEdpdmVu IENhcHRpb24= bWF5 QVNU IHdvbmRlcmluZw== IENsYXJr bm9ybWFs IHNlcGFyYXRlZA== IGRlc3A= c3RpYw== YnJldw== IHJlbGF0aW5n IE5paw== IEZhcm0= IGVudGh1c2k= Z29vZA== ZGVi IGFjdGl2aXN0 IG1hcnQ= IGV4cGxvc2lvbg== IEVjb25vbWlj TGluaw== IGluc2lnaHQ= IGNvbnZlbmllbnQ= IGNvdW50ZXJwYXJ0 c3VwcG9ydA== IFZpcnQ= YWdlbg== IFRlbm5lc3NlZQ== IFNpbW9u IEF3YXJk T0NL IEZpZ3VyZQ== IG92ZXJzZWFz IHByaWRl IENhcw== bm90ZQ== bWc= Q3VycmVudA== IGRpc3BsYXlz Y29udGVudA== IHRyYXZlbGluZw== IGhvc3BpdGFscw== IEZpbmFuY2lhbA== IFBhc3Q= IGRlZmVuZGFudA== IHN0cmVhbWluZw== bWJsZQ== IEJlcmxpbg== dWtp IGRpc3RyaWJ1dA== IGFudGli IGNob2NvbGF0ZQ== IENhc3RsZQ== IGludGVycnVwdA== IFJvdw== IGNvbnZlcnNpb24= IGJ1Z3M= IFJhdGhlcg== bGllc3Q= TFk= IEplYW4= Y29tbW9u YWto IDEzMA== b3R0b24= IERlYW4= IGFtZW5kbWVudA== IGdhbWVwbGF5 IFdhcnJlbg== b2Rh IGhpZ2hsaWdodHM= IGlycmU= IE5BVE8= IGJhbGxz IGRlbWFuZGluZw== VVJF IEx1a2U= RmlndXJl c3RvcA== b25pYQ== em9uZQ== aXplcnM= IFdS IGF3YXJkZWQ= IHJlZ3VsYXRvcnk= IEhhcnQ= IFNO cGxpbmc= IHNvdXI= IFBpeGVs dXNpdmU= IGZldA== IFNlbnQ= IGF1dG9tYXRpYw== IGZlcg== dmVybm1lbnQ= IEtoYW4= VE9O ZmF0aGVy IGV4dHJhb3JkaW5hcnk= dGhyb3A= IFB5dGhvbg== IEdQVQ== IHNleHVhbGx5 IGRlc2t0b3A= aXRpdml0eQ== IEFudG9uaW8= IG9yaWVudA== IGVhcnM= b2JieQ== b3VzZXM= dmVydGlzZW1lbnRz IG1hbnVmYWN0dXJlcnM= aWNpZW50 bWludXRl IGNvbnZpY3Rpb24= IGdhcmRlbg== cHVibGlj IHNhdGlzZmllZA== Zm9sZA== T0s= IGluaGFi IFRoaW5r IHByb2dyYW1tZQ== IHN0b21hY2g= IGNvb3JkaW4= IGhvbHk= IHRocmVzaG9sZA== IHJoZXQ= IHNlcmlhbA== IGVtcGxveWVycw== IEV2ZXJ5dGhpbmc= cmFo IGJvdGhlcg== IGJyYW5kcw== VmFsdWU= IFRlZA== IFBsYW5ldA== IHBpbms= IEZ1cnRoZXJtb3Jl c2E= UEU= cmVjaw== IFVTRA== b3R0ZQ== ICYm IGxhbmRlZA== Z2V0cw== IHByb2R1Y2Vycw== IGhlYWx0aGNhcmU= IGRvbWluYW50 IGRlc3Rybw== IGFtZW5kZWQ= Y2hyb24= IGZpdHM= IFN5ZA== IEF1dGhvcml0eQ== QVRDSA== IGZpZ2h0cw== IExMQw== IC0tLQ== IENvcnA= IHRveGlj c3BlY2lmaWM= IENvcm4= IENoZWw= IHRlbGVwaG9uZQ== IFBhbnQ= IG15c3RlcmlvdXM= YXVuY2g= b2RveA== bWVkaWE= IHdpdG5lc3Nlcw== YWd1 IHF1ZXN0aW9uZWQ= IEJyZXhpdA== IFJlbWVtYmVy ZW5leg== IGVuZG9yc2U= aWF0cmlj IElkZW50 IHJpZGljdWxvdXM= MTEw IHByYXllcg== IHNjaWVudGlzdA== IDE5NTA= IEFxdQ== IHVuZGVyZ3JvdW5k IFVGQw== bWFyZQ== IExhdGVy d2ljaA== IHN1YnNjcmli IGhvc3Rz IGVycg== IGdyYW50cw== YW50b20= IHN1bW1vbg== ZWFybHk= IENsZWFy IFByaW0= IHN1c3BlbnNpb24= IGd1YXJhbnRlZWQ= YXBwZXI= IHJpY2U= IFNlYW4= IFNoaW4= IHJlZmVyZW5kdW0= IGZsZWQ= cnVzdA== IDM2MA== dGVyeQ== IHNob2NrZWQ= QlI= IE9pbA== IEFsbGFo IHBhcnRseQ== IGlnbm9y IHRyYW5zbWlzc2lvbg== IGhvbW9zZXh1YWw= aXZlcnNhbA== IGhvcGVmdWxseQ== 44Kk IGxlc3Nvbg== TGVn IC4u WWV0 dGFibGU= YXBwcm9wcmk= cmV0dA== IGJvYXJkcw== IGluY29ycmVjdA== IGJhY3Rlcmlh YXJ1 YW1hYw== IHNuYXA= Lici IHBhcmFk dGVt aGVhcnQ= IGF2YWlsYWJpbGl0eQ== IHdpc2RvbQ== ICgr IHByaWVzdA== IMKgIMKg T3Blbg== IHNwYW4= IHBhcmFtZXRlcg== IGNvbnZpbmNl ICglKQ== cmFj IGZv IHNhZmVseQ== IGNvbnZlcnRlZA== IE9seW1waWM= IHJlc2VydmU= IGhlYWxpbmc= IE1pbmU= TWF4 IGluaGVyZW50 IEdyYWhhbQ== IGludGVncmF0ZWQ= RGVt IHBpcGVsaW5l IGFwcGx5aW5n IGVtYmVk IENoYXJsaWU= IGNhdmU= MjAwOA== IGNvbnNlbnN1cw== IHJld2FyZHM= UGFs IEhUTUw= IHBvcHVsYXJpdHk= bG9va2luZw== IFN3b3Jk IEFydHM= Jyk= IGVsZWN0cm9u Y2x1c2lvbnM= IGludGVncml0eQ== IGV4Y2x1c2l2ZWx5 IGdyYWNl IHRvcnR1cmU= IGJ1cm5lZA== dHdv IDE4MA== UHJvZHU= IGVudHJlcHJlbmU= cmFwaGljcw== IGd5bQ== cmljYW5l IFRhbQ== IGFkbWluaXN0cmF0aXZl IG1hbnVmYWN0dXJlcg== IHZlbA== IE5p IGlzb2xhdGVk IE1lZGljaW5l IGJhY2t1cA== IHByb21vdGluZw== IGNvbW1hbmRlcg== IGZsZWU= IFJ1c3NlbGw= IGZvcmdvdHRlbg== IE1pc3NvdXJp IHJlc2lkZW5jZQ== bW9ucw== IHJlc2VtYg== IHdhbmQ= IG1lYW5pbmdmdWw= UFQ= IGJvbA== IGhlbGlj IHdlYWx0aHk= IHJpZmxl c3Ryb25n cm93aW5n cGxhbg== YXN1cnk= 4oCmLg== IGV4cGFuZGluZw== IEhhbWlsdG9u IHJlY2VpdmVz U0k= ZWF0dXJlcw== IEFuaW0= UkVF UHV0 IGJyaWVmbHk= cml2ZQ== IHN0aW11bA== IGBgKA== IF9f IGNoaXA= IGhheg== IHByaXpl IFRoaW5ncw== QUNF dWxpbg== ZGljdA== b2t1 IGFzc29jaWF0ZQ== b2NrZXRz eW91dHViZQ== U3Rvcnk= YXRlZ29yeQ== IG1pbGQ= YWlsaW5n IFll T3JpZw== IEth b3JpZw== IHByb3BhZ2FuZGE= IGFub255bW91cw== IHN0cnVnZ2xlZA== IG91dHJhZ2U= QVRFRA== IEJlaWppbmc= cmFyeQ== IGxlYXRoZXI= IHdvcmxkcw== IGJyb2FkZXI= MTI1 aWRhbA== IEJldHRlcg== IHRlYXI= RXh0 IHByb3Bvc2Fscw== IGl0ZXI= IFNxdWFk IHZvbHVudA== bWk= RGlk IFB1 cGlu IHNwZWFrZXJz IGJvcmRlcnM= IGZpZ3VyZWQ= PSc= IHNpbXVsdGFuZW91c2x5 YWVkYQ== IGNoYXJnaW5n IHVyZ2Vk IGNvbmo= MjU2 IEdvcmRvbg== bWVyY2U= IGRvY3VtZW50YXJ5 U2hhcmU= aXRvbA== T05F IEdhcmRlbg== aGF0dA== IFRob21wc29u YW5lb3Vz YXBvcmU= IHRhbmtz IGxlc3NvbnM= dHJhY2s= IG91dHN0YW5kaW5n IHZvbHVudGVlcnM= IHNwcmF5 IG1hbmFnZXJz bGFyZ2U= IGNhbXBz IGFydGlmaWNpYWw= IFJ1 IGJhZ3M= dGhhbA== IGNvbXBhdGlibGU= IEJsYWRl IGZlZA== IGFyZ3Vlcw== Rkk= IHVuZmFpcg== IGNvcm4= IG9mZnNldA== IGRpcmVjdGlvbnM= IGRpc2FwcG9pbnRlZA== IENvbnZlbnRpb24= IHZpZXdpbmc= TUU= b2NpdHk= IHRvd25z IGxheWVycw== IHJvbGxlZA== IGp1bXBlZA== IGF0dHJpYnV0ZQ== IHVubmVjZXNz aW5jb2xu IHN1cHBvc2U= IE5ldGhlcg== Y2hh IGJ1cmllZA== IHNpeHRo QmVu cmVzc2luZw== T1VS IHdvdW5k IGN5Y2w= IG1lY2hhbmlzbXM= IGNvbmdyZXNzaW9uYWw= IEVsZW1lbnQ= IGFncmVlbWVudHM= IGRlY29y IGNsb3Nlc3Q= IE1pdA== R29vZ2xl fX0= IG1peHR1cmU= IGZsdWlk U2lnbg== IFNjaG9sYXI= IHBpc3Q= YXNrZXQ= YWJsaW5n IHJhY2luZw== aGVybw== cmllbA== YXNzeQ== IGNoZWFwZXI= YmVu IHZlcnRpY2Fs YW1hY2FyZQ== IFJlYWRpbmc= Z21lbnRz IGhlbGljb3A= IHNhY3JpZmljZQ== YXlh cGFyZW4= VkE= IExlcw== IFN0dWRpbw== IHZpb2xhdGlvbnM= IEFubmE= YWNlcg== 6b4= IFJhdA== IEJlY2s= IERpY2s= IEFDVA== IGNvbXBvc2l0aW9u IHRleHR1cmU= IE93bg== IHNtYXJ0cGhvbmU= IE5B IGZvcmI= aW1wb3J0 IGRlZmVuZGluZw== aWxzdA== cmVy IG9o IEplcmVteQ== IGJhbmtpbmc= Y2VwdGlvbnM= IHJlc3BlY3RpdmU= Ly4= IGRyaW5rcw== IFdp IGJhbmRz IExpdmVycG9vbA== IGdyaXA= IEJ1eQ== IG9wZW5seQ== IHJldmlld2Vk cGVydA== IHZlcmlmeQ== IENvbGU= IFdhbGVz TU8= IHVucHJl IHNoZWx0ZXI= IEltcGVyaWFs IGd1aQ== IERhaw== IHN1Z2dlc3Rpb25z IGV4cGxpY2l0bHk= IHNsYXZl IGJsb2NrY2hhaW4= IGNvbXBldGluZw== IHByb21pc2luZw== U09O IHNvY2Nlcg== IGNvbnN0aXR1dGlvbg== NDI5 IGRpc3RyYWN0 IFVzZXI= ZXNpZGVz IE1ldGhvZA== IFRva3lv IGFjY29tcGFuaWVk Q2xpZW50 c3Vy YWxvZw== IGlkZW50aWZpY2F0aW9u IGludmFzaW9u YXNtYQ== IGluZHVzdHJpZXM= cHBlcnM= IHN1YnRsZQ== IFVuaXQ= bmF0dXJhbA== IHN1cnZpdmVk IGZsYXc= mIU= IEhvbGw= IGRlZmljaXQ= IHR1dG9yaWFs IENoYW5jZQ== IGFyZ3Vpbmc= IGNvbnRlbXBvcmFyeQ== IGludGVncmF0aW9u Zm9yd2FyZA== IHR1bQ== aXRpcw== IGhpZGluZw== IERvbWlu IFRhbg== IEJ1aWxkaW5n IFZpbg== IHNwb2tlc3BlcnNvbg== IE5vdGVz IGVtZXJnaW5n IHByZXBhcmF0aW9u IHByb3N0 IHN1c3BlY3Rz IGF1dG9ub20= RGVzY3JpcHRpb24= IGRlYWx0 IFBlYXI= IHN0ZWFkeQ== IGRlY3JlYXNlZA== IHNvdmVyZQ== IENsaW4= IGdyYWR1YWxseQ== b3JzZXM= IFdBUg== U2Vydg== 44Ki aHI= IGRpcnR5 IEJhcm4= IEJD IGRpbA== IGNhbGVuZGFy IGNvbXBsaWFuY2U= IGNoYW1iZXI= YmI= IHBhc3Nlbmdlcg== YXRlZnVs IFRpdGxl IFN5ZG5leQ== IEdvdA== IGRhcmtuZXNz IGRlZmVjdA== IHBhY2tlZA== YXNzaW9u IGdvZHM= IGhhcnNo SUNL bGVhbnM= IGFsZ29yaXRobQ== IG94eWdlbg== IHZpc2l0cw== IGJsYWRl IGtpbG9tZXQ= IEtlbnR1Y2t5 IGtpbGxlcg== UGFjaw== ZW5ueQ== IGRpdmluZQ== IG5vbWluYXRpb24= YmVpbmc= IGVuZ2luZXM= IGNhdHM= IGJ1ZmZlcg== IFBoaWxs IHRyYWZm QUdF IHRvbmd1ZQ== IHJhZGlhdGlvbg== ZXJlcg== bWVt IEV4cGxpY2l0 6b6N IGNvdXBsZXM= IHBoeXNpY3M= IE1jSw== IHBvbGl0aWNhbGx5 YXdrcw== IEJsb29t IHdvcnNoaXA= ZWdlcg== dXRlcg== IEZP IG1hdGhlbWF0 IHNlbnRlbmNlZA== IGRpc2s= IE1hcmc= IC8q UEk= IG9wdGlvbmFs IGJhYmllcw== IHNlZWRz IFNjb3R0aXNo IHRoeQ== XV0= IEhpdGxlcg== UEg= bmd0aA== IHJlY292ZXJlZA== aW5nZQ== IHBvd2Rlcg== IGxpcHM= IGRlc2lnbmVy IGRpc29yZGVycw== IGNvdXJhZ2U= IGNoYW9z In0seyI= IGNhcnJpZXI= YmFibHk= SGlnaA== IFJU ZXNpdHk= bGVu IHJvdXRlcw== dWF0aW5n Rmls Tk9U d2FsbA== c2J1cmdo IGVuZ2FnaW5n IEphdmFTY3JpcHQ= b3Jlcg== bGlob29k IHVuaW9ucw== IEZlZGVyYXRpb24= IFRlc2xh IGNvbXBsZXRpb24= IFRh IHByaXZpbGVnZQ== IE9yYW5nZQ== IG5ldXI= cGFyZW5jeQ== IGJvbmVz IHRpdGxlZA== IHByb3NlY3V0b3Jz IE1F IGVuZ2luZWVy IFVuaXZlcnNl IEhpZw== bmll b2FyZA== IGhlYXJ0cw== IEdyZQ== dXNzaW9u IG1pbmlzdHJ5 IHBlbmV0 IE51dA== IE93 IFhQ aW5zdGVpbg== IGJ1bGs= U3lzdGVt aWNpc20= IE1hcmtldGFibGU= IHByZXZhbA== IHBvc3Rlcg== IGF0dGVuZGluZw== dXJhYmxl IGxpY2Vuc2Vk IEdo ZXRyeQ== IFRyYWRhYmxl IGJsYXN0 4KQ= IFRpdGFu ZWxsZWQ= ZGll SGF2ZQ== IEZsYW1l IHByb2ZvdW5k IHBhcnRpY2lwYXRpbmc= IGFuaW1l IEVzcw== IHNwZWNpZnk= IHJlZ2FyZGVk IFNwZWxs IHNvbnM= b3duZWQ= IG1lcmM= IGV4cGVyaW1lbnRhbA== bGFuZG8= aHM= IER1bmdlb24= aW5vcw== IGNvbXBseQ== IFN5c3RlbXM= YXJ0aA== IHNlaXplZA== bG9jYWw= IEdpcmxz dWRv b25lZA== IEZsZQ== IGNvbnN0cnVjdGVk IGhvc3RlZA== IHNjYXJlZA== YWN0aWM= IElzbGFuZHM= IE1PUkU= IGJsZXNz IGJsb2NraW5n IGNoaXBz IGV2YWM= UHM= IGNvcnBvcmF0aW9u IG94 IGxpZ2h0aW5n IG5laWdoYm9ycw== IFVi YXJv IGJlZWY= IFViZXI= RmFjZWJvb2s= YXJtZWQ= aXRhdGU= IFJhdGluZw== IFF1aWNr IG9jY3VwaWVk IGFpbXM= IEFkZGl0aW9uYWxseQ== IEludGVyZXN0 IGRyYW1hdGljYWxseQ== IGhlYWw= IHBhaW50aW5n IGVuZ2luZWVycw== TU0= IE11c3Q= IHF1YW50aXR5 UGF1bA== IGVhcm5pbmdz IFBvc3Rz c3RyYQ== 44O844M= IHN0YW5jZQ== IGRyb3BwaW5n c2NyaXB0 IGRyZXNzZWQ= TWFrZQ== IGp1c3RpZnk= IEx0ZA== IHByb21wdGVk IHNjcnV0 IHNwZWVkcw== IEdpYW50cw== b21lcg== IEVkaXRvcg== IGRlc2NyaWJpbmc= IExpZQ== bWVudGVk IG5vd2hlcmU= b2NhbHk= IGluc3RydWN0aW9u Zm9ydGFibGU= IGVudGl0aWVz IGNt IE5hdHVyYWw= IGlucXVpcnk= IHByZXNzZWQ= aXpvbnQ= Zm9yY2Vk IHJhaXNlcw== IE5ldGZsaXg= IFNpZGU= IG91dGVy IGFtb25nc3Q= aW1z b3dza2k= IGNsaW1i bmV2ZXI= IGNvbWJpbmU= ZGluZw== IGNvbXBy IHNpZ25pZmljYW5jZQ== IHJlbWVtYmVyZWQ= IE5ldmFkYQ== IFRlbA== IFNjYXI= IFdhcnJpb3Jz IEphbmU= IGNvdXA= YmFz IHRlcm1pbmFs LC0= T0g= IHRlbnNpb24= IHdpbmdz IE15c3Rlcg== 77+977+977+977+9 IFVubGlrZQ== dmFsaWQ= dmlyb25tZW50cw== IEFsaQ== IG5ha2Vk Ym9va3M= IE11bg== IEd1bGY= IGRlbnNpdHk= IGRpbWlu IGRlc3BlcmF0ZQ== IHByZXNpZGVuY3k= IDE5ODY= aHk= SU5E IHVubG9jaw== aW1lbnM= IGhhbmRsZWQ= IEVi IGRpc2FwcGVhcmVk IGdlbnJl IDE5ODg= IGRldGVybWluYXRpb24= U3RyZWFt aWtv YXB0ZXJz IGFja25vd2xlZGdl SmFu IGNhcGl0YWxpc20= UGF0 IDIwMjA= IHBhaW5mdWw= IGN1cnZl IGJvbWJz c3Rvcm0= IE1ldGFs ZW5jZXI= IEZpZw== IEFhcm9u YW5jaGVz IGluc3BpcmF0aW9u IGV4aGF1c3Q= dGFpbnM= YXNoaQ== IGRlc2NyaXB0 IHJpdHVhbA== IENoZWxzZWE= IHByb21vdGlvbg== IEh1bmc= IFdhcmQ= aXZh IEVU IHRvc3M= YWxsb3c= IEZyYW5jaXM= RGVw IGhhcHBpbmVzcw== IEdsYXNz IGJldGE= IHN0cmVuZ3RoZW4= TkU= b2E= IGJ1dHRvbnM= IE11cnJheQ== IGtpY2tlZA== UXVlc3Q= IFRhbGs= IFNldmVyYWw= IFplcm8= IGRyb25l dWxr IGNhbQ== IE1vYmlsZQ== IHByZXZlbnRpbmc= IHJldHJv IEF4 IGNydWVs IGZsb2F0 Liks IGZpbGluZw== IEdyYW50 IEJvcg== IHJpYg== IGNoYW1waW9uc2hpcA== IE1lcmM= IHN0eWxlcw== IGNha2U= IGJ1aWxkcw== IFNlbGY= aW94 IGVwaWM= b3lk QmVs IFN0ZXc= Lig= YWh1 IEJleW9uZA== IG91dHM= IHNvbG8= IFRyZWU= IHByZXNlcnZl IHR1Yg== QVJF cm9j IEltcHJv IFdyaWdodA== IGJ1bmQ= IHRyYWdlZA== IG9jY2FzaW9uYWw= Ymlhbg== U2Vjb25k cm9ucw== IGludGVyYWN0aW9ucw== Zm9ybWVk c2luZw== IG93bnM= IGhvY2tleQ== R2VuZXJhbA== IGxvZ2ljYWw= IGV4cGVuZA== IGVzY2Fs IEdyaWZm IENyb3du IFJlc2VydmU= IHN0b3BwaW5n IGV4Y3VzZQ== c2Vjb25k IG9wZXJhdGVk IHJlYWNoZXM= IE1hbGF5cw== IHBvbGx1dGlvbg== IEJyb29rbHlu IGRlbGV0ZQ== IGhhc2g= QmxvY2s= YWhh 4oCz IHNob3J0ZXI= cGllY2U= Pjwv IGhvcm0= IFdhdA== IEJyZWFr IHByb2hpYml0ZWQ= IGludGVuc2l0eQ== IEFsYW4= IGxpYWJpbGl0eQ== PyE= YW5kZWQ= IG5laWdoYm91cg== IENvbGxlY3Rpb24= IGZpcmVz IHJldm9sdXRpb25hcnk= Zmx5 IE9ybGVhbnM= V2hpdGU= IFdyaXQ= IERhd24= IHNldHRsZQ== IGV4ZWN1dGU= Qk0= IHNwb2tlc3dvbWFu IGxpZmVzdHlsZQ== IGNsaWNraW5n IEtpbGw= IExpYmVyYWw= IE5hemk= IHRyYWlsZXI= IG1vdW50YWlucw== IGRhbW4= emVz cGVz IHByZXNzaW5n IGJhaWw= IE9yZ2FuaXphdGlvbg== IHBpcg== IHRoaXJ0eQ== IGVsZWN0cmljYWw= IDExNQ== IFBvbHk= IFJhcA== IFN0cmlrZQ== IENhbm4= IGRlbWFuZGVk IGJhY2tpbmc= ZGVmYXVsdA== c3BlZWQ= IExlZ2lzbA== IG1vdGhlcnM= IEJvZHk= IHZhcmlhdGlvbg== Y2VkZW50ZWQ= cG93ZXJlZA== bGVhZGluZw== TmV2ZXI= IGdyYXZl IEFudGk= QVc= IGludGVydmlld2Vk IEdhYg== IEZhdA== IHJvb2tpZQ== dXU= IGRlcG9z aXhvbg== IGFtcGw= cmV0aW9u IEhlYXQ= IHBlYWNlZnVs U00= aWV2ZQ== IGRpdmVy IFZpY3Rvcmlh IG1pYw== cGRm IHN0YXRpbmc= IGx1bmc= IGNyaXRpY2l6ZWQ= IHZhY2NpbmU= IExvYWRpbmc= dXJzZQ== VGFrZQ== IEZyYW4= IFNvbGQ= IFJvYmlu IGRldGVjdGVk IFNjcmlwdA== IGFkanVzdGVk IHNlbmF0b3I= IG9wcG9zaW5n RXJyb3I= Q291bnQ= IGNvbmZsaWN0cw== IG93 IEFyZ2VudA== IG1hdGNoaW5n aGg= IFRyZWs= c3RhcnRlcg== Iiks IEFG b2Rlcg== eHh4eA== IEFsdA== YWNyZQ== IFBpY2s= IFNvbGFy IERhbA== T2N0 IEJhdHQ= IHNyYw== IGVuZ2FnZW1lbnQ= IGV4ZWN1dGl2ZXM= IGxpYmVydHk= amF2YQ== IHRhbGVudGVk aWdlbm91cw== IGNvbnNlY3V0 Li4uLi4= SW5mbw== IGhvcnJpYmxl IHN1cnByaXNpbmdseQ== ZmVlZA== aWNhdGluZw== IExFRA== IGZlbWFsZXM= U3RhdGlvbg== ZWxsZXI= IE9ha2xhbmQ= IG1lY2hhbmljYWw= aW9sb2d5 IFZhcg== IHJvYnVzdA== ZXR0aW5ncw== b3R0YQ== IHRoZW9yZXQ= IHJldGFpbg== a3dhcmQ= IGRh IGRlcGxveWVk ZGVs IEFuZHk= IHN1YnNjcmliZQ== d2Vi IG5h IE1pY2hlbA== IHBhcnRpYWxseQ== IENvbWV5 IGNyb3du IE1hag== IEJsdQ== cmF0b3I= RGF5 SU5U IGRvY3VtZW50ZWQ= IEdEUA== Z2k= Y2hlbGw= IGJydXRhbA== IEJhYg== c3RyYXRpb24= IHRoZWZ0 IHR1YmU= QEA= IHF1ZXJ5 IExpbmNvbG4= IHB1Ymxpc2hpbmc= IHdvcmU= b3JpY2Fs IHJpYw== IG5vdGFibGU= IHN1YnNlcXVlbnRseQ== bmV4 IG9ic2VydmU= IEJvZQ== IGNvZGVz bWFpbg== V0g= IFNM IHJlc2lkZW50aWFs YXZhbg== IG1hcw== YXJlc3Q= YWRlb24= T1VU IHNvcGhpc3RpYw== YW50ZQ== IGNlbnM= ICoq IG1vcnRhbGl0eQ== IHlvdXJz IG9jY2FzaW9ucw== IHJlY2FsbGVk IERyaXZlcg== IHZvY2Fs IGJhdGhyb29t IHNob3Bz IGNvbGxhYm9yYXRpb24= IE9iYW1hY2FyZQ== IENlbGw= Q2hhcg== U3VwZXI= Q3Jl IHRlbmRz IHRvcm4= IGVjb25vbWljcw== YXZlcnk= IFJhaWQ= IFNlbQ== IHNob3VsZGVycw== IGV4cGVjdGluZw== IGV4YW1pbmF0aW9u ZW5hbWU= IFVJ aWFiaWxpdHk= b2xhcw== IEFtYg== IERyYQ== IG1pZGZpZWxk IElD IGxheW91dA== IGZsb2F0aW5n Zmk= aXRhdGl2ZQ== IHRyZW1lbmRvdXM= INA= IGFidW5k V29yaw== IExpZ2h0bmluZw== IHNpbWlsYXJseQ== IGNvbnNlcnZhdGl2ZXM= IHByYXk= QkU= aXphcnJl IHRlbXB0 IGVtcGhhc2lz IE1ldHJv IGZpc2hpbmc= IG1hcnJ5 bmVn IFN0dWR5 IHJlY2s= IGRpc3Bvcw== b25pbmc= YnNpdGU= IHN1c3BpYw== IG1lcmNo IEdpYg== IERlc2NyaXB0aW9u IERWRA== d2hl IFllbWVu IGVudmlyb25tZW50cw== b290aW5n IE1vZGVybg== ZXU= IHJlZmxlY3Rz IGhvbmV5 IGFuYWx5c3Q= IGd1dA== ZGVj QWN0aW9u IGhvdXNlaG9sZHM= IHN0ZXI= IHRlbXBsZQ== IHJlZm9ybXM= IGZhdm91cml0ZQ== IGRlYWRsaW5l IExF VGhyZWU= IFdpdGhpbg== QXVn IG5pZ2h0cw== ZWx0YQ== IGludmFsaWQ= IEV4Y2hhbmdl IERlbGhp d2hlbg== aW5jb21l IPCf IHdpcmVsZXNz c2NyaWJl aXN0YQ== IGhvc3RpbGU= IGFsbHk= IGdpZw== IG91dGxldHM= IERvcg== RU1FTlQ= IGFzaA== IGFic3RyYWN0 T1JE IE1vdG9y IGFkdmlzZXI= aXN0bGU= IGJhc2Vz IGNvdXJ0ZXN5 IGNyb3NzaW5n IGNsZWFyZWQ= IHJlZnVnZWU= Y29zeXN0ZW0= IHRocm93cw== ZnVu Ym91cm5l ZGF5cw== IGRpc2FncmVl IE5hdGl2ZQ== IHJlZmxlY3RlZA== IEZhc3Q= IFllbGxvdw== IFNpbmdhcG9yZQ== IFJhdmVu IGVtYnJhY2U= IEt1 IENoZW4= IEVhcmx5 IGFwcG9pbnRtZW50 IE1pbmk= aXRlbWVudA== IHBsYWNpbmc= IGJpY3k= U1I= IHdoaXM= U1U= IGludmVzdGlnYXRlZA== IHBob3RvZ3JhcGhz Z2l0aHVi IEJlYXQ= IFJpbmc= aWdoZWQ= aWFy IGV2b2x2ZWQ= ZXJhbGQ= IGR1bg== IGh1Yg== SUFM IGVuY291cmFnaW5n IFByaW50 IERheXM= IHByb3NlY3V0aW9u IHBhbnRz YXp5 bGl2ZQ== IGZvc3NpbA== IEp1 IHJvY2tz dWRnZQ== IFJhY2U= IGdyZWV0 Ymll IGZpbGxpbmc= IExlbg== IGRpYWJldGVz IGZpcmVhcm1z dW1pbmc= ZW5lenVlbA== IEJC IGFjY2VwdGluZw== QVRI IHJlc29ydA== IGh1bnQ= cmlr dWNrZXI= YW1lbnRz IHN1c3RhaW5lZA== IGNyb3NzZWQ= IGJyZWFrZmFzdA== IGF0dHJpYnV0ZXM= bGVjdGVk YXRpbGU= IHZpYnI= IEthbA== YXJzb24= b3BsZXM= IHRvdWNoZWQ= IGRhbWFnZXM= IGltcHJlc3NlZA== cnVw IGFuY2g= IEFkYW1z SGVs IFZpY3Rvcg== IG1vdW50ZWQ= IEND IGRlbGljaW91cw== c3Bhbg== ZWxsYQ== IGVsYWJvcg== YW1wbGVz IGRlZmlj IGNvbnN0aXR1 dWF0ZXM= IE1pc3Npb24= IFRoZXI= IE1vbnN0ZXI= YmVz UmV1dGVycw== IEluZG9uZXM= aGlsbA== bXVuaXRpb24= IGNvbmZpcm1hdGlvbg== IENvbnNpZGVy YWNlbnQ= IGpldA== IEVtcGxveQ== IEdUWA== bmFu IFNwaWRlcg== IHByb2Nlc3Nvcg== IHBhdHJp IFBlbnRhZ29u IFJvYmluc29u IHJlYWxpc3RpYw== w7E= IGFwcGVhcmluZw== IHBpcGU= b21lZA== IGZydQ== IGF3ZnVs IGV2YWx1YXRpb24= IGludGVsbGlnZW50 IENpdGl6 IGZ1bmRyYQ== b2RpdW0= IHR3ZWV0cw== IHdvcm4= cHJpbmc= IGtpZG4= IHJlYmVscw== IEthbQ== IE5ldGhlcmxhbmRz IFNX IGFjcXVpc2l0aW9u IE1hbGU= 44Oq b21iaWVz IHRyYWRlbQ== IFN0YXR1cw== QnJl IFRISVM= IGFkdmVyc2U= IE5FVw== c2lnbg== IG9yZ2FuaXNhdGlvbg== ZW5j IEhhcnBlcg== YXBvcg== IE1lbWJlcnM= IFBlYWNl IEFpcnBvcnQ= IE90aGVycw== IHNjcmF0Y2g= IFBpbA== IHNlbnNvcg== IGFkb3B0aW9u IEhvdGVs IERyYWc= IGhvbmVzdGx5 IHlhcmQ= IEZvcmNlcw== IHBhdGVudA== IGJhc3M= IHF1aWV0bHk= IGJyZWF0aGluZw== IHBvc2U= aW9ycw== IEplc3M= c3RhdGlj SVRF T2ZmaWM= IGpldw== d2Nz IDE0MA== IHByZXZpZXc= aXBwaQ== IHVuZm9ydHVuYXRlbHk= b2tlbW9u IGhvcm4= IHJlYXNz IHBlZXI= b2NrZXI= IHVudG8= IEdyYXk= IGNsZWFuaW5n IGF0dHJhY3RlZA== MjAwNw== UG9pbnQ= a2lsbA== IEFncmVlbWVudA== dXJjaGVz IGhvcnI= IE1pc3Npc3M= IHdvcnRoeQ== IGZsb3dlcnM= dG93bg== ZGxs IHJlYWN0aW9ucw== IGRlY2U= IGluZGljYXRpbmc= TUQ= IHByZWZlcmVuY2U= IE1WUA== ZXNzaW9uYWw= IFRhcmdldA== Z2VuY2U= IEluZGlhbnM= IG1pc2M= IGZyZWVseQ== IG11c2NsZXM= IGxpbmV1cA== IGltcGFjdHM= b3VzaW5n b21p YWN1bGFy IGNvbnRyb2xsaW5n YWdpbmU= Y2VyeQ== aGVsbA== IHJhbmtpbmc= IE5pY2g= IEF2ZQ== MTI4 IGhpZ2h3YXk= IGluY29ucw== IGJpbmRpbmc= IHN0cnVnZ2xlcw== IFBpdHRzYnVyZ2g= IGdyYXk= cmlu IGNvbWljcw== IFNwb3J0 IHJlbGF0aXZlcw== IGZyaWdodA== IHByb2Jl IFBvcnR1Zw== IHZvYw== IHR1 IENvcnBz IHBvc3NpYmlsaXRpZXM= IHF1YWxpZnk= d2Nzc3RvcmU= IGxpYnJhcmllcw== IG1pZ3JhbnRz IGVudHJpZXM= IGNvbnNlY3V0aXZl dmFscw== IENoYWlybWFu IGhpbGw= SU1F IEdhcmQ= IGluZXF1YWxpdHk= Zm94 IFNhdmU= IGNvcnQ= Y2xhaW1lZA== IHRyYWl0cw== IHBvdXI= IG1pc3NpbGVz IGVzc2VuY2U= IHNlbmRz IGFsbGlhbmNl IHdpc2hlcw== IENocmlzdG9waGVy Qmln Tlk= IEphY29i c2Fu dXJyZWQ= IFNP bGx5 IGFkdm9jYXRl IEJvbmQ= ICIv VXNpbmc= IGRpc3RyaWN0cw== IEdhdGU= IEJpcg== cmlkZ2U= IE5heg== IFJz Ym9hcmRz IEdh IFJlYWdhbg== IGluZmx1ZW5jZWQ= MTAwMA== YXB5 IGNoYWxsZW5nZWQ= IGJhcmc= IGZhY3VsdHk= IEZpZg== IGFjcXVpcmU= QWM= IGluc2VjdA== IGluc3RydW1lbnRz IGxlYWY= dGhvZG94 TWVzc2FnZQ== IHRhbGU= IHRoZXJlYnk= IHRyYXA= IHN0cm9uZ2VzdA== IE1pbGl0YXJ5 aXNpYmxl IDE5ODQ= ZXRoZWxlc3M= IGZsZXhpYmxl IGtpbGxz IGZpbmlzaGluZw== IFNpemU= IHJlZHVjZXM= IGVwaWQ= IG9yaWVudGF0aW9u ZnVsbA== IHRyYWNl IGxhc2Vy IG9wcG9zZQ== IGVkaXRpbmc= IG1vbWVudHVt 5Lo= c2hvdw== Vkk= IExhZA== IDE5ODU= IG11cmRlcmVk OTAw dXRoZXI= IHByb2JhYmlsaXR5 IFBvbGw= IHJlbHVjdA== IENoZW0= IE1vbnRyZWFs IGFkZXF1YXRl IFBvbGFuZA== IFNoZXJpZmY= dW1waA== IG9r IDAwMA== ICJb IG9wZXJhdG9ycw== IEZlcg== IG1vZGVz IEV2ZQ== IGRpc2NpcGxpbmU= TkVU SGFuZA== IG9yYWw= IFdF ZW1haWw= SlA= IFBhbGVzdGluaWFucw== IGhlbmNl IExlc3M= IG92ZXJs ZGln IGludGltaWQ= IENvYWw= IHJhbmdpbmc= dGhh IGRpc3RhbnQ= IGZpYg== IEluZGV4 IFdvbmRlcg== IFBlbA== aGF0dGFu IEh1Zw== w5c= cmFpdA== IHdyYXBwZWQ= IFJQRw== IGNoZW1pY2Fscw== IE1vbmV5 IGZyb3plbg== IGluZGlyZWN0 IEFnYWluc3Q= RW5k IHVuY29tZm9ydGFibGU= IEdhbGxlcnk= IFBvc3RlZA== 2Kc= b25kdWN0 IGNvbnNlcXVlbmNl IGJpdHRlcg== IDE5ODc= cG9w IGNvdW50bGVzcw== IEFsYXNrYQ== ZmZmZg== IGRlcGFydHVyZQ== IHJlZnVuZA== IElhbg== aWF0ZWQ= IHNlZWtz IG1lY2hhbmljcw== IGp1cmlzZGljdGlvbg== bHlubg== IGFsaWtl IEh1bnQ= YXRob24= IHJlc29sdmVk IGNhY2hl IGRpc3RpbmN0aW9u ZGlyZWN0 IGVuY291bnQ= b3Vi YmVhdA== IENvdW50cnk= c2VhcmNo IGNvbnRpbnVvdXM= IG1vZGVzdA== IFJhaWw= dGhvb2Q= MTMw QlVH IGNyaW1pbmFscw== IGluZGljYXRpb24= IGVuY291bnRlcmVk bGFzdA== IFd5 IGlkZW9sb2d5 IFBERg== c2VjdXJpdHk= XSk= IEppbW15 IEVO IGhpcmluZw== VGVt IHBpZw== YXVudA== IENyeXN0YWw= IHBlbmFsdGllcw== IGNhcGFiaWxpdHk= IHB5 IHByb2R1Y3RpdmU= IGJhbGFuY2Vk IEdlRm9yY2U= Y2xpY2s= b2xpdGFu b2Rz IGFmdGVyd2FyZHM= IHBsYXlvZmZz IEdpbGw= VXNlcg== IGJhY2tz cHVi dGFn IGFic3VyZA== cGlyaW5n IGNpdGluZw== IHRyaWxsaW9u IG9ibGlnYXRpb24= IG1heGlt YWhvbw== Y2Y= dW1p IEFscGhh IE5lbHNvbg== IHB1cnN1YW50 aW5pdGVseQ== IGZyYWN0 ZW50cnk= YmVyeQ== IFRob3I= QWRkZWQ= IERK IEdlbmU= IGF3a3dhcmQ= U3R1ZA== IHdhbGxldA== IERpdmluZQ== YXJpb3M= IHJlbGVhc2luZw== IGVkaXRlZA== IGFjY29tcGxpc2hlZA== QmVzdA== IGVkZ2Vz IHBsYW5lcw== IGZlZWRpbmc= In0sIg== IGRpc2Nsb3N1cmU= IGdyYWlu YWlyeQ== b29ucw== ZXJuYW5k VlI= IHJlYXNvbmFibHk= IGRydW0= IHBhcnRpYWw= IGdyYXBoaWM= IHVucHJlY2VkZW50ZWQ= IGFkdmlzZWQ= TWljcm8= IEFzc2Fk cG9pbnRz c2Nhcg== IFpvbmU= dHRlcw== IDcwMA== dm8= IEhhbXA= IGZpeGVz IGNhdXRpb24= IHN0cmluZ3M= IHBhbmVscw== IGxlYWs= IHByaWNpbmc= cm93dGg= IEVycm9y IFNhaW50cw== Zml4 IG9ic2VydmF0aW9ucw== IEFicw== IHN1Z2dlc3Rpb24= IFVrcmFpbmlhbg== IGJhcnJpZXI= IHBhaW50ZWQ= QmV0 aW1pcg== IFNwZWN0 cG90 b3JuZXlz IGNvbXBvdW5k IGJlYXJz IFJ1c2g= IGx1eHVyeQ== U3Vt IG9yYml0 IE1hcmM= IGV4ZW1wdA== IFRyYWls IE1P IEhhbnM= IFdlYXBvbg== b2N1c2Vk dW1pbnVt IEplcnJ5 IGJ1c3Q= IEFH IFdpa2k= IGVuZGxlc3M= IFZsYWQ= IEJhaA== IFJhZGVvbg== a2V5cw== IFN1cnZleQ== IFZpb2w= ZGVmaW5l bGVhbg== IGNvbW1vZA== IHJldmVudWVz xY0= IGZ1cm5pdHVyZQ== IGNhc3Rpbmc= IGRpcGxvbWF0aWM= IFBsYXllcnM= IEtpbGxlZA== IG1vZGlmeQ== IGlubm92YXRpdmU= IEFidQ== bm9y IGJvbmRz IGNvYWNoaW5n TWVy IG1vZHVsZXM= IFBhdHJpb3Rz IGVuaGFuY2Vk IHByb2NlZWRpbmdz IHRlYW1tYXRlcw== IDEyOA== YXJkbw== IGNvbXByb21pc2U= IE11Y2g= IGZsZXc= IEVkZ2U= IHVubmVjZXNzYXJ5 IGRvY3RyaW5l cmVwb3J0 IE9ybGFuZG8= IFByb2ZpbGU= IHBsYXlvZmY= ZnJpZW5kbHk= IGNvbXBsYWlu IE1D IE9wdA== IEdC IGJlYXRlbg== IGdvbGY= IHBsYWNlbWVudA== Qml0 IG5ld3NsZXR0ZXI= IDIwMTk= dmlzb3I= cmF3bA== IGlQYWQ= IGFjdGVk IGp1aWNl IGRlY2tz UE4= c3VjY2Vzcw== IEhhbGY= IGRlbGV0ZWQ= IHNlY3JldHM= IGFzeWx1bQ== TWFydA== IEFjdGl2 IEd1eQ== IFRz IGR5cw== IGFzc3VtaW5n IG1hbmE= IHN1YnVy IDEyNQ== TWVkaWE= QVJZ cmlkZQ== Y3A= IGRpZmZpY3VsdGllcw== IGNvbGxlY3Rpbmc= IGJhbmtydXB0 bm9u IGNvbXBvc2Vk IHZvbHQ= IG1pbGl0YW50cw== ID4+Pg== IE1vcm1vbg== dG9y IHBhcnRpY2xlcw== IEJhcnQ= cnlwdGlvbg== IGFkbWlu IHNxdWVl VklESUE= IGNyZWF0b3I= aWFtZXRlcg== aWN1bGFy TkJD IGdyYWJiZWQ= IG5vZGQ= IHJhdGVk IHJvdGF0aW9u IGdyYXNw IGV4Y2Vzc2l2ZQ== IEVD IFdoaXQ= IGludmVudG9yeQ== YXVsdHM= IEZC IGVjb3N5c3RlbQ== IGJpbGxpb25z IHZlbnR1cmU= bmFtZWQ= IGRlZmVuZGVy b3V0ZQ== SW5zdGVhZA== aXJhYmxl V2Fy IGFzc3VtcHRpb24= IGJpdGU= IGVhcnRocXU= dGFpbA== c3BhY2U= IGdpZnRz Ym95cw== IGluZXZpdGFibGU= IHN0cnVjdHVyYWw= IGJlbmVmaWNpYWw= IGNvbXBlbGxpbmc= aG9sZQ== ZXJ2YXRpb24= IGNvYXQ= b2o= aW5jYXJu IFllYXJz IGRldGVybWluaW5n IHJoZXRvcmlj IGJvdW5kYXJpZXM= IHdoaXRlcw== QW50 YWRkeQ== KS0= cmFoYW0= ZXRlcm1pbg== IGhhcnZlc3Q= IENvbmM= IGxhcHRvcA== IE1hdGNo IGVuam95aW5n Y2Nh b2xsYXI= IHRyaXBz IGFkZGljdGlvbg== IFNhaw== IHBvd2VyZWQ= IGNvdXM= IFJ1c3NpYW5z aWVyZQ== IHJldHJpZQ== cXVhbGl0eQ== IGRpZmZlcg== IGtpbmdkb20= IExhdXI= IENhcGl0b2w= IGNvbmNsdXNpb25z IEFsdGVybg== IE5hdg== IHRyYW5zcGFyZW50 QkVS R3JvdXA= IENvbXBsZXRl IGluZmVy IGludHJpZw== IGluc2FuZQ== Uk8= b3Bob2I= aXNlbg== cXVhbA== TWljaGFlbA== IG11c2V1bQ== IFBvcGU= IHJlc2V0 cmF0aXZl Zml2ZQ== IGFnZ3JlZw== aXR0ZWVz b3NpdG9yeQ== IGNhcmI= IFJlY29yZA== IGRlY2lkZXM= IEZpeA== IGV4Y2VwdGlvbnM= IENvbW1pc3Npb25lcg== dW5z IEVudmlyb25tZW50YWw= IGxlZ2VuZGFyeQ== aXN0ZW5jZQ== IHR1bm5lbA== a20= IGluc3VsdA== IHRyb2xs IHNoYWtl IGRldGVudGlvbg== cXVlcw== IENocm9tZQ== IEZpbGVz IHN1YnQ= IHByb3NwZWN0cw== IHByb2w= cmVuZGVy cHJvb2Y= IHBlcmZvcm1hbmNlcw== U3Ry IGhyZWY= ZXJuYW1l IGFjaGlldmVtZW50 IGZ1dA== RnVsbA== IExlYmFu Z29vZ2xl 44OI YW1wYQ== TWF5YmU= IHByb2plY3RlZA== IEVtYg== IGNvbGxlZw== IGF3YXJkcw== IOKU R29sZA== IEJsYWtl IFJhag== aWZ0aW5n IHBlbmRpbmc= IGluc3RpbmN0 IGRldmVsb3BtZW50cw== Q29ubmVjdA== IE1hbmQ= IFdJVEg= IFBoaWxpcHBpbmVz cHJvZmlsZQ== IGFsdG9nZXRoZXI= IEJ1bmQ= IFRE b29vbw== YW1wZWQ= aXBo IHN0ZWFt IG9sZGVzdA== IGRldGVjdGlvbg== dWxwdA== IOc= IFdheW5l MjAwNg== ZmE= IGNpcmNsZXM= IEZ1 IGRvbm9ycw== YXBwcm9wcmlhdGU= IERha290YQ== amFtaW4= IG1vdGl2YXRlZA== IHB1cmNoYXNlcw== IExvdWlzaWFuYQ== IFNwbA== IGdsb2Jl IDEwNQ== emlw Y2FsbA== IGRlcGFydG1lbnRz IHN1c3RhaW5hYmxl MTA1 IE9Q aWZpZXJz IHByZXZlbnRlZA== IGluY29tcA== IENvbW1hbmRlcg== IGRvbWluYXRlZA== IMK7 IGludmVzdGVk IGNvbXBsZXhpdHk= IGluY2w= IGVuc3VyaW5n IHJlYWxt eW5j IEluZGVwZW5kZW50 cmFpbmVk IEplbg== IEZsaWdodA== IGF0aGU= IHNwZWN1bGF0aW9u IFRF b2NhdGU= dGlj IHBsYWludA== aGVycnk= IHRveQ== IDExMQ== IHBsYXRlcw== c3RhdHVz IElzYQ== IGRldm90ZWQ= Q29w IEVT MjU1 dXJyZW5jeQ== TWFpbg== IHNsYXZlcw== IHBlcHBlcg== IHF1b3Rlcw== IGNlaWxpbmc= IEZpc2g= IHRyYW5zZm9ybWF0aW9u IGZyYWN0aW9u IGFkdmFudGFnZXM= IHRvaWxl IHN0dW5uaW5n IG1vaXN0 YnJlYWtpbmc= c2k= IExvY2F0aW9u IE1lZGl1bQ== IHRleHRz IHVnbHk= IGJpbw== LuKAlA== IEJhc2Vk IHRyYWlucw== IFdpbmc= IEFuY2llbnQ= IFJlY29yZHM= IEhvcGU= U3BlY2lhbA== YWRlc2g= b2Jp Wy8= IHRlbXBvcmFyaWx5 VmVy aHU= b3Nlcg== IG92ZXJuaWdodA== IG1hbW0= IFRyZWFzdXJ5 IFZlbmV6dWVs IE1lZ2E= IHRhcg== IGV4cGVjdHM= YmxhY2s= b3JwaA== XFxcXA== IGFjY2VwdGFuY2U= IHJhZGFy c2lz IGp1bmlvcg== IGZyYW1lcw== IG9ic2VydmF0aW9u YWNpZXM= UG93ZXI= IEFkdmFuY2Vk TWFn b2xvZ2ljYWxseQ== IE1lY2hhbg== IHNlbnRlbmNlcw== IGFuYWx5c3Rz YXVnaHRlcnM= Zm9yY2VtZW50 IHZhZ3Vl IGNsYXVzZQ== IGRpcmVjdG9ycw== IGV2YWx1YXRl IGNhYmluZXQ= TWF0dA== IENsYXNzaWM= QW5n IGNsZXI= IEJ1Y2s= IHJlc2VhcmNoZXI= IDE2MA== IHBvb3JseQ== IGV4cGVyaWVuY2luZw== IFBlZA== IE1hbmhhdHRhbg== IGZyZWVk IHRoZW1lcw== YWR2YW50 IG5pbg== IHByYWlzZQ== MTA0 IExpYnlh YmVzdA== IHRydXN0ZWQ= IGNlYXNl IGRpZ24= RGlyZWN0 IGJvbWJpbmc= IG1pZ3JhdGlvbg== IFNjaWVuY2Vz IG11bmljaXBhbA== IEF2ZXJhZ2U= IGdsb3J5 IHJldmVhbGluZw== IGFyZW5h IHVuY2VydGFpbnR5 IGJhdHRsZWZpZWxk aWFv R29k IGNpbmVt cmFwZQ== ZWxsZQ== YXBvbnM= IGxpc3Rpbmc= IHdhaXRlZA== IHNwb3R0ZWQ= a2VsZXk= IEF1ZGlv ZW9y YXJkaW5n aWRkaW5n aWdtYQ== IE5lZw== IGxvbmU= IC0tLS0= ZXhl ZGVn IHRyYW5zZg== IHdhc2g= IHNsYXZlcnk= IGV4cGxvcmluZw== IFdX YXRzb24= IGVuY2w= bGllcw== IENyZWVr IHdvb2Rlbg== TWFuYWdlcg== IEJyYW5k dW1teQ== IEFydGh1cg== IGJ1cmVhdWNy IGJsZW5k YXJpYW5z RnVydGhlcg== IHN1cHBvc2VkbHk= IHdpbmRz IDE5Nzk= IGdyYXZpdHk= IGFuYWx5c2Vz IFRyYXZlbA== IFZldGVy IGR1bWI= IGFsdGVybmF0ZQ== Z2Fs IGNvbnN1bWVk IGVmZmVjdGl2ZW5lc3M= Licn IHBhdGhz b25kYQ== TEE= IFN0cm9uZw== IGVuYWJsZXM= IGVzY2FwZWQ= ICIi IDExMg== IDE5ODM= IHNtaWxlZA== IHRlbmRlbmN5 RmlyZQ== IHBhcnM= IFJvYw== IGxha2U= IGZpdG5lc3M= IEF0aA== IEhvcm4= IGhpZXI= IGltcG9zZQ== bW90aGVy IHBlbnNpb24= aWN1dA== Ym9ybmU= aWNpYXJ5 Ll8= IFNV IHBvbGFy aXN5 ZW5ndQ== aXRpYWxpemVk QVRB d3JpdGU= IGV4ZXJjaXNlcw== IERpYW1vbmQ= b3R5cGVz IGhhcm1mdWw= b256 IHByaW50aW5n c3Rvcnk= IGV4cGVydGlzZQ== IEdlcg== IHRyYWdlZHk= IEZseQ== IGRpdmlk YW1waXJl c3RvY2s= TWVt IHJlaWdu IHVudmU= IGFtZW5k IFByb3BoZXQ= IG11dHVhbA== IEZhYw== IHJlcGxhY2luZw== SGFy IENpcmN1aXQ= IHRocm9hdA== IFNob3Q= IGJhdHRlcmllcw== IHRvbGw= IGFkZHJlc3Npbmc= IE1lZGljYWlk IHB1cHA= IE5hcg== b2xr IGVxdWl0eQ== TVI= IEhpc3Bhbg== IExhcmdl bWlk RGV2 IGV4cGVk IGRlbW8= IE1hcnNoYWxs ZXJndXM= IGZpYmVy IGRpdm9yY2U= IENyZWF0ZQ== IHNsb3dlcg== IFBhcmtlcg== IFN0dWRlbnQ= IFRyYWluaW5n UmV0dXJu IFRydQ== IGN1Yg== IFJlYWNoZWQ= IHBhbmlj IHF1YXJ0ZXJz IHJlY3Q= IHRyZWF0aW5n IHJhdHM= IENocmlzdGlhbml0eQ== b2xlcg== IHNhY3JlZA== IGRlY2xhcmU= dWxhdGl2ZQ== ZXRpbmc= IGRlbGl2ZXJpbmc= ZXN0b25l IHRlbA== IExhcnJ5 IG1ldGE= YWNjZXB0 YXJ0eg== IFJvZ2Vy aGFuZGVk IGhlYWRlcg== IHRyYXBwZWQ= IENlbnR1cnk= IGtub2NrZWQ= IE94Zm9yZA== IHN1cnZpdm9ycw== Ym90 IGRlbW9uc3RyYXRpb24= IGRpcnQ= IGFzc2lzdHM= T01F IERyYWZ0 b3J0dW5hdGU= Zm9saW8= cGVyZWQ= dXN0ZXJz Z3Q= IExvY2s= IGp1ZGljaWFs dmVydGVk IHNlY3VyZWQ= b3V0aW5n IEJvb2tz IGhvc3Rpbmc= IGxpZnRlZA== bGVuZ3Ro IGplcg== IHdoZWVscw== IFJhbmdl dW1ibmFpbHM= IGRpYWdub3Npcw== dGVjaA== IFN0ZXdhcnQ= IFByYWN0 IG5hdGlvbndpZGU= IGRlYXI= IG9ibGlnYXRpb25z IGdyb3dz IG1hbmRhdG9yeQ== IHN1c3BpY2lvdXM= ISc= QXBy R3JlYXQ= IG1vcnRnYWdl IHByb3NlY3V0b3I= IGVkaXRvcmlhbA== IEty IHByb2Nlc3NlZA== dW5nbGU= IGZsZXhpYmlsaXR5 RWFybGllcg== IENhcnQ= IFN1Zw== IGZvY3VzZXM= IHN0YXJ0dXA= IGJyZWFjaA== IFRvYg== Y3ljbGU= 44CM cm9zZQ== IGJpemFycmU= 44CN IHZlZ2V0YWJsZXM= JCQ= IHJldHJlYXQ= b3NoaQ== IFNob3A= IEdyb3VuZA== IFN0b3A= IEhhd2FpaQ== IEF5 UGVyaGFwcw== IEJlYXV0 dWZmZXI= ZW5uYQ== IHByb2R1Y3Rpdml0eQ== Rml4ZWQ= Y29udHJvbA== IGFic2VudA== IENhbXBhaWdu R3JlZW4= IGlkZW50aWZ5aW5n IHJlZ3JldA== IHByb21vdGVk IFNldmVu IGVydQ== bmVhdGg= YXVnaGVk IFBpbg== IExpdmluZw== Q29zdA== b21hdGlj bWVnYQ== IE5pZw== b2N5 IGluYm94 IGVtcGlyZQ== IGhvcml6b250 IGJyYW5jaGVz IG1ldGFwaA== QWN0aXZl ZWRp IEZpbG0= IFNvbWV0aGluZw== IG1vZHM= aW5jaWFs IE9yaWdpbmFs R2Vu IHNwaXJpdHM= IGVhcm5pbmc= SGlzdA== IHJpZGVycw== IHNhY3JpZmlj TVQ= IFZB IFNhbHQ= IG9jY3VwYXRpb24= IE1p IGRpc2c= bGljdA== IG5pdA== IG5vZGVz ZWVt IFBpZXI= IGhhdHJlZA== cHN5 44OJ IHRoZWF0ZXI= IHNvcGhpc3RpY2F0ZWQ= IGRlZmVuZGVk IGJlc2lkZXM= IHRob3JvdWdobHk= IE1lZGljYXJl IGJsYW1lZA== YXJlbnRseQ== IGNyeWluZw== Rk9S cHJpdg== IHNpbmdpbmc= IEls IGN1dGU= b2lkZWQ= b2xpdGljYWw= IE5ldXJv 5aQ= IGRvbmF0aW9u IEVhZ2xlcw== IEdpdmU= VG9t IHN1YnN0YW50aWFsbHk= IExpY2Vuc2U= IEph IGdyZXk= IEFuaW1hbA== IEVS IFVuZA== IGtlZW4= IGNvbmNsdWRl IE1pc3Npc3NpcHBp RW5naW5l IFN0dWRpb3M= UHJlc3M= b3ZlcnM= bGxlcnM= IDM1MA== IFJhbmdlcnM= IHJvdQ== ZXJ0bw== RXA= aXNzYQ== aXZhbg== IHNlYWw= IFJlZ2lzdA== ZGlzcGxheQ== IHdlYWtlbg== dXVt IENvbW1vbnM= IFNheQ== IGN1bHR1cmVz IGxhdWdoZWQ= IHNsaXA= IHRyZWF0bWVudHM= aXphYmxl bWFydA== IFJpY2U= IGJlYXN0 IG9iZXNpdHk= IExhdXJl aWdh V2hpY2g= aG9sZGVy IGVsZGVybHk= IHBheXM= IGNvbXBsYWluZWQ= IGNyb3A= IHByb2M= IGV4cGxvc2l2ZQ== IEZhbg== IEFyc2VuYWw= QXV0aG9y ZWZ1bA== IG1lYWxz ICgt aWRheXM= IGltYWdpbmF0aW9u IGFubnVhbGx5 IG1z YXN1cmVz SGVhZA== aWto bWF0aWM= IGJveWZyaWVuZA== IENvbXB1dGVy IGJ1bXA= IHN1cmdl IENyYWln IEtpcms= RGVs bWVkaWF0ZQ== IHNjZW5hcmlvcw== IE11dA== IFN0cmVhbQ== IGNvbXBldGl0b3Jz 2YQ= IFN0YW5mb3Jk IFJlc291cmNlcw== YXplZA== YmFnZQ== IG9yZ2FuaXM= IFJlbGVhc2U= IHNlcGFyYXRlbHk= IGhhYml0cw== IG1lYXN1cmVtZW50cw== IENsb3Nl IGFjY29tcGFueQ== IGdseQ== IHRhbmc= IFJvdQ== IHBsdWdpbg== IGNvbnZleQ== IENoYWxsZW5nZQ== b290cw== amFu IGN1cnM= IFJlbGF0aW9ucw== a2VlcGVy IGFwcHJvYWNoaW5n cGluZw== U3BlYWtpbmc= IGFycmFuZ2VtZW50 IFZJ YXJldHRlcw== IGFmZmVjdGluZw== IHBlcm1pdHM= YmVjYXVzZQ== IHVzZWxlc3M= IEh1cw== ISEhIQ== IGRlc3Ryb3lpbmc= VW5mb3J0dW5hdGVseQ== IGZhc2NpbmF0aW5n U2Vt IGVsZWN0b3JhbA== IHRyYW5zcGFyZW5jeQ== IENoYW9z IHZvbHVudGVlcg== IHN0YXRpc3RpY2Fs IGFjdGl2YXRlZA== cm94 V2Vi SEU= IEhhbXBzaGlyZQ== aXNpdmU= TWFw IHRyYXNo IExhd3JlbmNl c3RpY2s= Q3I= IHJpbmdz RVhU IG9wZXJhdGlvbmFs b3Blcw== RG9lcw== IEV2YW5z IHdpdG5lc3NlZA== UG9ydA== IGxhdW5jaGluZw== ZWNvbm9t d2Vhcg== IFBhcnRpY2lw dW1t Y3VsZXM= IFJBTQ== IFR1bg== IGFzc3VyZWQ= IGJpbmFyeQ== IGJldHJheQ== IGV4cGxvcmF0aW9u IEZlbA== IGFkbWlzc2lvbg== aXRhdGVk U3k= IGF2b2lkZWQ= IFNpbXVsYXRvcg== IGNlbGVicmF0ZWQ= IEVsZWN0cmlj pZ4= IGNsdXN0ZXI= aXR6ZXJsYW5k aGVhbHRo TGluZQ== IE5hc2g= YXRvbg== IHNwYXJl IGVudGVycHJpc2U= IERJUw== Y2x1ZGVz IGZsaWdodHM= IHJlZ2FyZHM= IMOX aGFsZg== IHRydWNrcw== IGNvbnRhY3Rz IHVuY29ucw== IENsaW1hdGU= IGltbWVuc2U= TkVX b2Nj ZWN0aXZl IGVtYm9k IHBhdHJvbA== IGJlc2lkZQ== IHZpYWJsZQ== IGNyZWVw IHRyaWdnZXJlZA== dmVybmluZw== IGNvbXBhcmFibGU= cWw= IGdhaW5pbmc= YXNzZXM= ICgpOw== IEdyZXk= IE1MUw== c2l6ZWQ= IHByb3NwZXI= Ij8= IHBvbGxpbmc= IHNoYXI= IFJD IGZpcmVhcm0= b3JpZW50 IGZlbmNl IHZhcmlhdGlvbnM= Z2l2aW5n IFBp b3NwZWw= IHBsZWRnZQ== IGN1cmU= IHNweQ== IHZpb2xhdGVk IHJ1c2hlZA== IHN0cm9rZQ== IEJsb2c= c2Vscw== IEVj LCcn IHBhbGU= IENvbGxpbnM= dGVycm9y IENhbmFkaWFucw== IHR1bmU= IGxhYm9yYXRvcnk= IG5vbnM= dGFyaWFu IGRpc2FiaWxpdHk= IEdhbQ== IHNpbmdlcg== YWxn IFNlbmlvcg== IHRyYWRlZA== IFdhcnJpb3I= IGluZnJpbmc= IEZyYW5rbGlu IHN0cmFpbg== IFN3ZWRpc2g= IHNldmVudGg= IEJlbm4= IFRlbGw= IHN5bmRyb21l IHdvbmRlcmVk aWRlbg== KysrKw== aWdv IHB1cnBsZQ== IGpvdXJuYWxpc20= IHJlYmVs IGZ1 YmxvZw== IGludml0ZQ== cmVuY2llcw== IENvbnRhY3Q= SXNyYWVs IENvbnRlbnQ= IGNoZWVy IGJlZHJvb20= IEVuZ2luZWVyaW5n IFF1ZWVucw== IGR3ZWxs IFBsYXlTdGF0aW9u IERpbQ== IENvbG9u bHI= IG9wZXJhdGVz IG1vdGl2YXRpb24= VVNB YXN0ZXJlZA== Q29yZQ== IFRydXRo b2xv T1NF IE1lbW9yeQ== IHByZWRlYw== IGFuYXJjaA== IDE5MjA= IFlhbQ== w6g= Ymlk IGdyYXRlZnVs IGV4Y2l0ZW1lbnQ= IHRyZWFzdXJl IGxvbmdlc3Q= Y3RpdmU= IGRlc2VydmVz IHJlc2VydmVz IGNvcHM= IE90dGF3YQ== IEVneXB0aWFu YW5rZWQ= IGFydGlm IGh5cG90aGVzaXM= Oi8= IHB1cmNoYXNpbmc= IGxvdmVseQ== SFA= IGRpdmlkZQ== IHN0cmljdGx5 IHF1ZXN0aW9uaW5n IHRheHBheWVycw== IEpveQ== IHJvbGxz IEhlYXZ5 IHBvcnRz IG1hZ25ldGlj IGluZmxhbW0= IGJydXNo dGljcw== 4oiS IGJvdHRsZXM= cHB5 IHBhZGQ= 44Kv bWlsbGlvbg== IGRldmFzdGF0aW5n IGNvbXBpbGVk IG1lZGljYXRpb24= IHR3ZWx2ZQ== IFBlcnJ5 U3BhY2U= aW1i eW91cg== IGxlYWtlZA== IFRhcg== IHVuaXR5 IGluZmVjdGVk IHRyYXZlbGVk SURF IE1jRG9uYWxk dHh0 IFByaW5j IGludGVydmVu IFRhaXdhbg== IFBvdw== IGJlYXJpbmc= IFRocmVhZA== IHpvbmVz aXphcmRz dW5rcw== Q2hhcHRlcg== bGxvcg== IMK3 IHdvdW5kcw== IGRpc2NyZXRpb24= IHN1Y2NlZWRlZA== aWtpbmc= IGljb25pYw== Q2FsbA== IHNjcmVlbmluZw== IE1pcw== aWN0cw== IG1pbmlzdGVycw== IHNlcGFyYXRpb24= UGxheWVy IGJpcA== IGJlbG92ZWQ= IGNvdW50aW5n IEV5ZQ== YXJvdW5k aW5naW5n IHRhYmxldA== IG9mZmVuY2U= aW5hbmNl aGF2ZQ== IEluZm8= IE5pbmph IHByb3RlY3RpdmU= IENhc3M= TWFj IFF1YWxpdHk= Tm9ydGg= IGlj IEN1YmE= IENocm9uaWNsZQ== IFByb3BlcnR5 IGZhc3Rlc3Q= b3Rvcw== IEdlcm0= T1dO IGJvb20= IFN0YW5sZXk= ZXJndXNvbg== IGNsZXZlcg== IGVudGVycw== bW9kZQ== dGVyaW9y IFNlbnM= IGxpbmVhcg== QVJL IGNvbXBhcmluZw== IHB1cmVseQ== IHNhZmVy IFBvdHRlcg== IGN1cHM= UlQ= IGdsdWM= IGF0dHJpYnV0ZWQ= IGR1cGw= IFBhcA== IHByZWNpb3Vz IHBh aWN0aW9uYXJ5 IFRpZw== IFRvbw== b2x1dGlvbnM= c3Rhbg== IHJvYm90cw== IGxvYmI= IHN0YXR1dGU= IHByZXZlbnRpb24= d2VzdGVybg== MTYw IEFjdGl2ZQ== IE1hcmlh aGFs Tm9uZQ== ZWxsYXI= IEtC IFBhcnRuZXJz IFNpbmdsZQ== IEZvbGxvd2luZw== YW5nbw== YWNpb3Vz IHRob3U= IGtn IGluZmx1ZW50aWFs IEZyaWVuZHM= U3Vy YWludGVk IGZvcnVtcw== IHN0YXJ0ZXI= IGNpdGl6ZW5zaGlw IEVsZWN0aW9u b25nZQ== b3RhdGlvbg== b3NwaA== Ozs7Ow== dXRpY2Fs cHVy ZXJlbg== IGFjY3VzYXRpb25z Yml0aW91cw== YWJiaXQ= IE9yZA== UG9zdGVk aXJr IHNlbnNpdGl2aXR5 aWNoZQ== IEFteQ== IEZhYg== IHN1bW1pdA== IHBlZGVzdA== IHJ1YmJlcg== IGFncmljdWx0dXJhbA== IGNhbmNlbA== QUU= IGluYXVn IGNvbnRhbQ== IGZpcm1seQ== aXc= c3RhZ2U= IEthbg== IHRpZXI= IGludmVudGlvbg== IHRyYW5zbGF0ZWQ= IFJ1bGVz Qm94 VHdpdHRlcg== SURT IHBpenph IGRlYnVn IERyb3A= dnM= IGhvcnNlcw== Ymln IGJvcmluZw== IGhvb2Q= IE1jQ2Fpbg== YXRjaGVk IEJyb3M= IHNraXA= IGVzc2F5 c3RhdA== IExlZ2VuZHM= IGFtbXVuaXRpb24= YXVj IHNob290ZXI= IHVuaA== IHN1cHBsaWVk IGdlbmVyaWM= IFNL aWJhbg== eXJpY3M= IDI1NQ== IGNsaW1iaW5n Rm9ybWVy IGZsaXA= IGp1bXBpbmc= IGZydXN0cmF0aW9u IFRlcnJ5 IG5laWdoYm9yaG9vZHM= IG1lZGlhbg== YmVhbg== IGJyYWlucw== Rm9sbG93aW5n IHNoYXBlZA== IGRyYXdz IGFsdGVyZWQ= SmFjaw== IHJlY2lwZXM= IHNraWxsZWQ= d2VhbHRo YWNoaQ== ZWxlY3Rpb24= IGJlaGF2aW9ycw== ZGVhbHM= IFVudGls RmU= IGRlY2xhcmF0aW9u bWFya3M= IEJldHdlZW4= Y2Vsb25h IHJlc29u IGJ1YmJsZQ== QW1vbmc= IGltcGVyaWFs R1M= IGZlbWluaXN0 MjAwNQ== IEt5bGU= IGFjY291bnRpbmc= IFRlbGU= IFR5cg== IGNvbm5lY3Rpbmc= IHJlaGFi IFByZWQ= c2lt IG1lYW50aW1l IHBoeXNpY2lhbg== TVc= IENhbXBiZWxs IEJyYW5kb24= IGNvbnRyaWJ1dGluZw== IFJ1bGU= IFdlaWdodA== IE5hcA== IGludGVyYWN0aXZl IHZhZw== IGhlbG1ldA== IENvbWI= Zm91cg== IHNoaXBwZWQ= IGNvbXBsZXRpbmc= IFBE UERBVEU= IHNwcmVhZGluZw== IHNjYXJ5 ZXJ2aW5n IEdhcw== IGZyYW5r c2Nob29s IHJvbWFudGlj IHN0YWJpbA== Um9i IGFjY3VyYXRlbHk= IGFjdXRl IEhhbm4= IHN5bWJvbHM= IGNpdmlsaXphdGlvbg== IEFX IGxpZ2h0bmluZw== IGNvbnNpZGVycw== IHZlbnVl INc= IG92ZW4= IFNG aGlz IG51 IExlYXJu IHBlb3BsZXM= IHN0ZA== IHNsZWU= IHNsaWM= IFN0YXRpc3RpY3M= IGNvcm5lcnM= IEJha2Vy IDop bWVudGF0aW9u b2x2ZXI= IGxhdWdoaW5n IFRvZGQ= b25kZQ== IEhpbGxz IG51dHM= IFdvbWFu cGxhbmU= IGxpdmVy IEluc2lkZQ== U29ycnk= IGFncmVlcw== IGZ1bmRhbWVudA== IEZpc2hlcg== IGF1Y3Rpb24= IHRocmVhZHM= Z2xhcw== IEJhc2lj IE5hdA== IGxhY2tpbmc= IGNlbGVicmF0aW9u anU= IHNpbGx5 RXVybw== IHRhdHQ= aWdodHk= Y29udHJvbGxlZA== VGVzdA== IFNpbmdo IHJhZ2U= IHJoeXRo b2ZmaWM= IFBoYW50b20= IGhlYWRsaW5lcw== IHJlc3BvbmRpbmc= IE1vcm5pbmc= IHZpdGFtaW4= IGJvb3Rz IFNpdGU= YWxpbg== cGk= IHZpcmFs IFVD REVS IFNleA== IHN0b2Nrcw== Y3VycmVudA== IGNodXJjaGVz IFJhcmU= IE11cnBoeQ== IGRlbmlhbA== IEdhbWluZw== IHRvdWc= IG5pY2s= IG1ha2Vycw== IFJvbmFsZA== IGdlbmVyb3Vz IERvYw== IE1vcnJpcw== IHRyYW5zZm9ybWVk IE5vcm1hbA== IDEwNA== IEtpY2tzdGFydGVy IFVwb24= T25saW5l IElSUw== IHdyYXA= IGxvdmluZw== IGFycml2ZXM= IER1ZQ== IGhldGVy IE1hZGU= IHJlbnRhbA== IGJlbG9uZ3M= IGF0dG9ybmV5cw== IGNyb3Bz IG1hdGNoZWQ= dWx1bQ== b2xpbmU= MTA5 IGRpc3Bhcg== IGJ1eWVycw== IENhbWJyaWRnZQ== IGV0aGljcw== cm91cHM= IGp1c3RpZmllZA== IG1hcmdpbmFs IHJlc3BlY3RlZA== d2lubmluZw== IG5vZGRlZA== IFNlcmdl IEZvcm1lcg== Q3JhZnQ= IyMjIyMjIyMjIyMjIyMjIw== IFdhcm5lcg== IGRhc2g= ZXRl IGVudGVydA== IEVzY2FwZQ== b3V0aGVhc3Q= IGtuZWVz IEJvbWI= IHJ1Zw== UGFzcw== IGF0dGl0dWRlcw== Z292ZXJubWVudA== IFByaW9y IHF1YWxpdGllcw== IG5vdGlmaWNhdGlvbg== IFBob25l bGll IGFudGljaXBhdGVk IENvbWJhdA== IEJhcnJ5 IDE5ODI= VXNlcnM= b25lcg== IGNvbXB1dGluZw== IENvbm5lY3RpY3V0 IGxlc3Nlcg== IHBlZXJz IEN1 IHRlY2huaWNhbGx5 IHN1Ym1pc3Npb24= IFVuaXZlcnNhbA== IG1hbnVhbGx5 b3VyZ2U= IHJlc3BvbmRlbnRz IEJUQw== IEhvc3Q= IGZhcmU= IEJpcmQ= IHJlY2VpcHQ= YWxzbw== IGphY2s= IGFncmljdWx0dXJl IHNrdWxs ICE9 IHBhc3NpdmU= IENJ IHNvY2lldGllcw== IHJlbWluZGVk IGludGVyZmVyZW5jZQ== QnV5 IOKc Z29u IHNjcnV0aW55 IFdpdGNo IGNvbmR1Y3Rpbmc= IOOD IGV4Y2hhbmdlcw== IE1pdGNoZWxs IGluaGFiaXQ= IHR3aXN0 QkQ= IHdoZXJldmVy Z3JvdXBvbg== IGpva2Vz IEJlbmphbWlu IFJhbmRvbQ== ZnJhbWU= IExpb25z IGhpZ2hsaWdodGVk IEFya2Fuc2Fz RW50 IHBpbGU= IHByZWxpbQ== Z3M= bWluZGVk IGZlbG9ueQ== IEdB IEx1Y2s= IHByYWN0aWNhbGx5 IEJvcw== IGFjdHJlc3M= RGFt IEJvdQ== IHZpc2E= IGVtYmVkZGVk IGh5YnJpZA== IGVhcmxpZXN0 IHNvb25lcg== c29jaWFs IEhB IHN0ZWVw IGRpc2FkdmFudA== IGV4cGxvaXQ= IEVnZw== IFVsdHJh IG5lY2Vzc2l0eQ== TG9jYWw= aWVnZQ== IGRhdGVk IG1hc3Nlcw== IHN1YnNjcmlwdGlvbg== cGxlc3M= IGFub255bQ== IHByZXN1bWFibHk= Qmx1ZQ== VGhlaXI= YXNrZXRiYWxs IFBoaWxpcA== IGNvbWVk bG9hZGVk cmFuZQ== IHJlZmxlY3Rpb24= Q2hpbmE= IGV4dGVuZHM= IGZvcm1pbmc= IHVuZGVycw== MjAwMQ== IGdyYXQ= IGNvbmNlbnRyYXRpb25z IGluc3VsaW4= IHNlY3VsYXI= IHdoaWxzdA== IHdpbm5lcnM= QWR2ZXJ0aXNlbWVudHM= IGRlbGliZXJhdGVseQ== IFdvcmtpbmc= IHNpbms= ZXRpY3M= ZGFsZQ== IG1hbmRhdGU= IGdyYW0= IHZhY2F0aW9u IHdhcm5pbmdz cmlwcA== IFRIQVQ= IGNvbW1lbnRhcnk= IGludHU= IGFlc3Q= IHJlYXNvbmluZw== IGJyZWFrZG93bg== IFpvbWJpZQ== IC0tPg== IFBvbGl0aWNhbA== Y290dA== IHRocnVzdA== IHRlY2hub2xvZ2ljYWw= IGRlY2lkaW5n IHRyYWZmaWNraW5n TG9uZw== V2VsY29tZQ== cHJpc2luZw== IENvbW11bmljYXRpb25z IGVuZG9ycw== IHN3aWZ0 IG1ldGFib2w= Y29pbnM= cmVzYQ== IEhUVFA= IGVucm9sbA== IEhhcHB5 dXNy aW50YWdl IFsi dWFibHk= IE1hdGVyaWFs IHJlcGVhbA== U2VwdA== a2g= IE1vZGk= IHVuZGVybmVhdGg= IElM c2hvcmU= IGRpYWdub3NlZA== YWNldXRpY2Fs IHNob3dlcg== YXV4 IFN3aXRjaA== IFN0cmVuZ3Ro IGppaGFk bmF0aW9uYWw= IHRyYXVtYQ== dXNzeQ== b25p IGNvbnNvbGlk IGNhbG9yaWVz IEZseW5u YWdnZWQ= MTY4 IFBpbms= IGZ1bGZpbGw= IGNoYWlucw== IG5vdGFibHk= IEFW TGlmZQ== IENodWNr bXVz IFVyYmFu IEhlbmQ= IGRlcG9zaXQ= IFNhZA== IGFmZmFpcg== T1JL aWV2YWw= IEZEQQ== IHRyb3A= IE92ZXJhbGw= IHZpcnR1ZQ== IHNhdGlzZmFjdGlvbg== YXVuZA== IGx1bg== IFN3aXR6ZXJsYW5k IE9wZXJhdGlvbg== cHJvY2Vzcw== IHNob29r IGNvdW50aWVz bGVhc2Vk IENoYXJsb3R0ZQ== MTEy IHRyYW5zY3JpcHQ= IHJlZGQ= cHVzaA== IEhleQ== IEFuYWx5c2lz WyI= IGFsdGVybmF0aXZlcw== YXJkbGVzcw== IGVsZXBo IHByZWp1ZA== IExlYWY= SGF2aW5n IEh1Yg== IGV4cHJlc3Npb25z IFZvbHVtZQ== IHNob2NraW5n IFJlZHM= IHJlYWRpbHk= IHBsYW5ldHM= YWRhdGE= IGNvbGxhcHNlZA== IE1hZHJpZA== IGlycml0 aXBwZXI= IEVuYw== IFdpcmU= IGJ1eno= IEdQ YXNoYQ== IGFjY2lkZW50YWxseQ== dXJ1 IGZydXN0cmF0ZWQ= IFNB IGh1bmdyeQ== IEh1ZmY= IGxhYmVscw== YW50bw== IEVQ IGJhcnJpZXJz KXw= IEJlcmtlbGV5 IEpldHM= IHBhaXJz IExhbg== SmFtZXM= IEJlYXI= IGh1bW9y IExpYmVydHk= IG1hZ25pdHVkZQ== IGFnaW5n IE1hc29u IGZyaWVuZHNoaXA= dW1ibGluZw== IGVtZXJnZQ== IG5ld3NwYXBlcnM= IGFtYml0aW91cw== IFJpY2hhcmRz YXRlcm5hbA== IDE5ODE= IGNvb2tpZXM= IHNjdWxwdA== IHB1cnN1aXQ= TG9jYXRpb24= IHNjcmlwdHM= cGM= IGFycmFuZ2VtZW50cw== IGRpYW1ldGVy IGxvc2Vz YW1hdGlvbg== IGxpcXU= IEpha2U= YXJldHRl IHVuZGVyc3RhbmRz IFplbg== dm0= IGFwcHJvdmU= IHdpcA== IHVsdHJh IGludGVuZA== IERJ YXNjdWxhcg== IHN0YXlz IEtvcg== IEts IGludmVzdGluZw== TGE= IGJlbGlldmluZw== YmFk bW91dGg= IHRheHBheWVy 44OD IFF1ZWJlYw== IGxhcA== IFN3aXNz ZHJvcA== IGRyYWlu aXJp ZXRj ZnRlbg== IE5leA== IHN0cmF3 IHNjcmVhbWluZw== IGNvdW50ZWQ= IGRhbWFnaW5n IGFtYmFzc2Fkb3I= Y2VudHVyeQ== IHByb3g= IGFycmVzdHM= dXY= aWxhdGVyYWw= IENoYXJn IHByZXNjcmliZWQ= IGluZGVwZW5kZW50bHk= IGZpZXJjZQ== IEJhYnk= IGJyYXZl IHN1aXRz PT4= IGJhc2VsaW5l IFJhdGU= IGlzbGFuZHM= ICgo Z3JlZW4= aXhlbHM= IG5hbWVseQ== IFZpbGxhZ2U= dGhhbg== YW15 VmVyc2lvbg== Z21haWw= ZW50aWFscw== IFN1ZA== IE1lbGJvdXJuZQ== IGFycml2aW5n IHF1YW50dW0= ZWZm cm9wb2xpdGFu VHJp IGZ1bmVyYWw= IElS w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IENvYg== aXRhYmx5 IHR1cmI= IGNvbWJv UmV2aWV3 IGRlcGxveW1lbnQ= dWl0eQ== IEJvdHQ= IGludmlzaWJsZQ== IHJlbmRlcmluZw== IHVubG9ja2Vk IGFxdQ== IFZsYWRpbWly IHBhZA== IEJyYWlu IExlZ2FjeQ== ZHJhZ29u IEt1cmRpc2g= IHNvdW5kZWQ= IGRldGFpbmVk IERN Z2FyeQ== IGRhdWdodGVycw== IGRpc3R1cmJpbmc= dWth IFBhcmFk IHRhc3Q= IHVuZm9ydHVuYXRl IHVs ZW1pbg== IGF0dGVuZGFuY2U= dHJs IHBhcmtz IE1lbW9yaWFs IEFsaWNl b3RoeQ== Z3VhcmQ= IERpc2U= IFNoYW4= IEZvcnVt UmljaA== IHNoaWZ0ZWQ= dWV6 IGxpZ2h0ZXI= IE1hZ24= IGNvZA== U2No aGFtbWFk UHVi MzUw IFBva2Vtb24= IHByb3RvdHlwZQ== IHVucmU= QmFzZQ== IFN0dWRlbnRz IFJlcGx5 IENvbW11bmlzdA== IGdhdQ== IFR5bGVy SVo= IHBhcnRpY2lwYXRlZA== IHN1cHJlbQ== IERldGFpbHM= IHZlc3NlbHM= cm9k IHRyaWJl a2VlcA== IGFzc3VtcHRpb25z IHBvdW5k IGNydWRl IEF2YWlsYWJsZQ== IHN3aW1taW5n IGluY2x1c2lvbg== IGFkdmFuY2Vz Y3VsYXRpb24= IGNvbnNlcnZhdGlvbg== IG92ZXJk IEJ1ZmZhbG8= QXJ0aWNsZQ== ZWRnZQ== IGF3YQ== IE1hZGlzb24= IHNpZGV3 IGNhdGFzdA== IEtyaXN0 dWNsZQ== IEhpZ2h3YXk= IFRlcnJvcg== IGFjdGl2YXRpb24= IHVuY29uc2Npb3Vz IFNhdGFu IFN1c2Fu aWxsZXJ5 IGFycmFuZ2Vk aW9w IHJ1bW9ycw== dXJyaW5n dGhpbms= IEtlaXRo IEtpbmQ= IGF2b2lkaW5n Ynlu bnV0 IFNwZWFrZXI= cnVz bmFtZXM= IGd1aWx0 IE9seW1waWNz IHNhaWw= IE1lcw== bGV2YW50 IENvbHVtYnVz YWZ0 Q2l0eQ== U291dGg= IEhhcnZleQ== IFB1bg== U2V2ZXJhbA== IG1lbnRhbGx5 IGltcHJlc3M= bW91bnQ= IFVidW50dQ== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU IFN1cGVybWFu IE1Qcw== IGludGVudGlvbnM= IFJhY2luZw== IGxpa2VsaWhvb2Q= IDI0MA== VG90YWw= IHRveXM= IFdhdHNvbg== IHVyZ2U= TGVhcg== IFBhcGVy IG9jY3VycmluZw== IEJlbmc= IENlcnQ= IHN0b25lcw== VGlt IFR3aW4= emI= IER5bmFt IHBvbGl0aWNpYW4= a2Vucw== IEVudGVycHJpc2U= VVRFUlM= IGFib2w= IHJlZnJlc2g= IGFyYml0cmFyeQ== cGVjdGlvbg== IHRyb3VibGVz IH0pOw== dHY= IHBpbG90cw== IGRpc3RyaWJ1dGU= IGF1ZGl0 IHBhdXNl b3JpZ2luYWw= IHJpdmFscw== wqM= Rmln VEw= YWJpbA== cnlpbmc= TGlu aW9uZWQ= bG9u IGZhbmN5 IGNyYXNoZWQ= IHRyYWN0 IHNoZWQ= IGNvbnN1bWU= QmFzZWQ= ZG93bmxvYWQ= aW5pdA== IHZvbHRhZ2U= SW50cm9kdQ== IGNvbmRlbW5lZA== IEZpbmFuY2U= cmVzcGVjdA== IGV4Y2x1ZGVk IGVzdGFibGlzaGluZw== aGVyaWM= IGhlcml0YWdl IHNwZWN0YWN1bGFy IHVuc3Q= IFNub3dkZW4= IExhbmU= U2Fu IHByb3RlY3Rpb25z c3RydWN0aW9u aW5jaW5u IG1hY3Jv Q3VzdG9t aW9zaXR5 IGVzcA== IGZ1bmN0aW9uaW5n IG11c2g= IHB1enpsZQ== IGV0aGljYWw= TWFs IGdvdmVybmluZw== IEZlcmd1c29u IHJlc3RvcmVk IHN0cmVzc2Vk IENvdW50ZXI= IEthcw== Y2xpcA== QU5T IHNlaXo= VUs= Ynlzcw== b2xkb3du YXBp IHBlcm1hbmVudGx5 b3VudGVycw== V2VzdA== VGhyb3VnaA== TGlnaHQ= YXRvZXM= IG5lYXQ= IGNvcmQ= dXJlcg== IHNldmVyZWx5 IEF2ZW4= IGludGVycm9n IHRyaXBsZQ== R2l2ZW4= TnVtYmVy IGFyaXNl IHNoZXI= cGxhbnQ= IGZsb3dlcg== IENvdQ== IGF0ZQ== IG5ld2Vy YnVs IG1lYW53aGlsZQ== IExhaXI= IGFkanVzdG1lbnQ= IENvcHlyaWdodA== IGRpdmVycw== aW9sb2dpY2Fs IGdhbWVycw== b2F0 IGhpc3RvcmljYWxseQ== IGFuYWxvZw== IGxvbmd0aW1l IHByZXNjcmlwdGlvbg== IE1pc3Q= IEh5cGVy IE1haW5l IERlaXR5 IG11bHRpcGw= IFJlaW5jYXJu IEh5ZA== IFBpYw== U2ls cmFudHM= IENyaXM= Ljs= KHs= ZXBlbmRlbmNl IHJlY3k= YXRldXI= IHF1YWQ= IGdsb2I= IGNvbmNlZA== dGVhbQ== IGNhcGl0YWxpc3Q= IExvdA== IHJveWFs IEN5YmVy IGJsYWNrcw== bWV0aWM= cml2 IERhbm55 IHNwbw== IFJP IGFuaW1hdGVk cnlwdGVk IERlcHV0eQ== IHJlbmRlcmVk RkU= IHN0cmVhaw== IGNsb3Vkcw== IERvdWc= fn5+fn5+fn4= IGRpc2NvdXI= IFZlaA== IHBzeWNob2xvZ3k= IEpvdXJuZXk= IGNyeXN0YWw= IEZyb3N0 IHN1c3BpY2lvbg== IHJlbGF0ZQ== b3J1cw== IENyeXB0 IE5WSURJQQ== Y29tZWQ= dXRpbmc= aW5jaW5uYXRp IHZ1bG5lcmFiaWxpdHk= b3N0aWM= IGlzb2xhdGlvbg== IGNvb2xpbmc= IENvYWxpdGlvbg== IDExOQ== Rm91cg== IERlYWw= IOKJ c2VtYmxl cmFtZW50 IEJhcmNlbG9uYQ== IDEwMg== IGNvY2FpbmU= b2NhbHlwc2U= RmVi b2dlbmlj IG11dGF0aW9u IGNyeXB0b2M= IEtlbA== IEdpdA== YWlz IHNpc3RlcnM= QU5L IGFjdGl2YXRl VGVy IGRyZWFk eWxvbg== IHByb3ByaQ== QXVzdA== IERlZmF1bHQ= IG91dGRvb3I= IHNoZWVy Y2VpdmU= IGdlbnRseQ== 0L4= UHJvZ3JhbQ== IOKGkg== IHZlZ2Fu IENydXM= IHJlc3BvbnNpYmlsaXRpZXM= IEhS T0xE IHByZXZlbnRz IHN0aWZm IFdlcmU= IGF0aGxldGlj IFNjb3Jl ICk6 IGNvbHVtbnM= IExvYw== YXZhaWxhYmxl IEZyYW0= IFNlc3Npb25z IGNvbXBhbmlvbg== IHBhY2tz MTQw IEtuaWdodHM= IGZhcnQ= IHN0cmVhbXM= IHNob3Jl IGFwcGVhbHM= IFBlcmZvcm1hbmNl aGF1bA== IFN0cmE= IE5hZw== MTAz IFRyYW5zcG9ydGF0aW9u QkI= RXY= emFu UHVibGlj IHR3aW4= dWxzaW9u TXVsdA== IGVsZWN0cm8= IHN0YXR1ZQ== YXRpb25hbGx5 IE5vcnQ= IGluc3BlY3Rpb24= Lyo= aWd1ZQ== IGNvbXBhc3Npb24= IFRhbGVz IFN0ZWlu IFNjcmVlbg== IEJ1Zw== IExpb24= Z2lybA== IHdpdGhkcmF3YWw= IG9iamVjdGl2ZXM= IGJsb29keQ== IHByZWxpbWluYXJ5 IGphY2tldA== IGRpbWVuc2lvbnM= IENvb2w= IE9jY3Vw IHdyZWNr IGRvdWJsZWQ= YW5raW5n IDE5NzU= IGdsYXNzZXM= IFdhbmc= cHJvdg== UGF0aA== Y29ubmVjdGVk IE11bHRp IE5vcndheQ== YWdvbmlzdA== IGZlYXJlZA== IHRvdWNoaW5n IGFyZ3VhYmx5 wq/Cr8Kvwq/Cr8Kvwq/Crw== IE5DQUE= Y2hlbQ== IHNwYXQ= IFdXRQ== IENlbA== aWdnZXI= IGF0dGFja2Vy IEpvaW4= b2JqZWN0 ZXR0YQ== IGVsaW1pbmF0ZWQ= ZGV0 IGRlc3RydWN0 IEx1Y2Fz Y3R1YXJ5 MTgw IEJyYWR5 IEJsdWVz QmF5 YXVrZWU= IHRpbWVsaW5l IGRlbGVnYXRlcw== d3JpdHRlbg== dWZmaWNpZW50 IHNoYXBlcw== Q29weXJpZ2h0 b3VibGU= c2VydmljZQ== IHBpb25l IGNvbGxlZ2Vz IHJvd3M= IHNwaXRl IGFzc2Vzc2Vk MzYw IGxlYXNl IGNvbmZpZGVudGlhbA== Y2tlcg== IE1hbm5pbmc= IFZvaWNl IHNlYWxlZA== IGNhbGN1bGF0ZQ== Tk8= IEFzc2lzdGFudA== IHRlZW5hZ2Vy dWxlbnQ= YXRoZXJpbmU= IG1vY2s= IGRpYW1vbmQ= IGZlc3Q= IHN3aXRjaGVk IHJlc3VtZQ== IFB1ZXJ0bw== IGxhbmVz aXJhdGlvbg== IFNpbWlsYXJseQ== IHJvZA== IFNlbA== IFBhbGFjZQ== IExpbWl0ZWQ= ZW91cw== IHZhcmlhbnQ= IHdhcmQ= ICkp U2hvdw== T09L QWxleA== IE5lcA== YnJpcw== IFdpa2lwZWRpYQ== IGV4Y2VwdGlvbmFs IG1hbmFnZXM= IERyYXc= QWdhaW4= IGNvcHBlcg== dXR0 IGV4cG9ydHM= IHBvcnRmb2xpbw== IGVsZXZhdGVk UmF0ZWQ= IE90aGVyd2lzZQ== IFRhY3Q= IFNoZWw= IFRY IuKAlA== IHJlc3Vy IFdh dmVuYW50 IG1vbmV0YXJ5 cGVvcGxl RW1haWw= IGZpZnR5 IFN3ZWV0 IE1hbGF5c2lh IGNvbmZ1c2luZw== IFJpbw== dWRh dXRlbmFudA== Iik7 IHByYWlzZWQ= IHZvbHVtZXM= dHVybg== IG1hdHVyZQ== IG5vbnByb2ZpdA== IHBhc3Npb25hdGU= IFByaXZhdGU= IDEwMw== IGRlc2NlbmQ= 56We dWZmeQ== aGVhZGVk V2hldGhlcg== cmllbg== emVjaA== YmVpdA== IGNocm9t IE1jTQ== IGRhbmNpbmc= IGVsZWc= IE5vdGljZWQ= MTE1 IGFkdm9jYWN5 RU5UUw== YW1ibGluZw== IE1pbm9y IEZpbm4= IHByaW9yaXRpZXM= IHRoZXJlb2Y= IFN0YWdl IFJvZ2Vycw== IHN1YnN0aXR1dGU= IEphcg== IEplZmZlcnNvbg== IGxpZ2h0bHk= MTAy IExpc2E= dWl0cw== eXNpY2Fs IHNoaWZ0cw== IGRyb25lcw== IHdvcmtwbGFjZQ== IHJlc2lk ZW5zZWQ= YWhu IHByZWZlcmVuY2Vz c2VydmVy IGRlYmF0ZXM= ZG9j IEdvZHM= IGhlbGljb3B0ZXI= IGhvbm91cg== IGNvbnNpZGVyYWJseQ== ZWRlZA== IEZlbWFsZQ== IEFubmU= IHJldW4= IEZhY2U= IEhhbGxvdw== IEJ1ZGdldA== IGNvbmRlbW4= IHRlbmRlcg== UHJvZg== b2NyYXRpYw== IFR1cm5lcg== IEFncmlj IDE5NzY= IGFwdA== ZGlzYw== IEZpZ2h0ZXI= IEF1cg== IGdhcmJhZ2U= aW5wdXQ= IEthcmw= IE9saXZlcg== IExhbmd1YWdl a24= Tm9u IENsYXI= IHRyYWRpdGlvbnM= IGFkdmVydGlzZW1lbnQ= IFNvcg== IGFyY2hpdmU= IHZpbGxhZ2Vz NzUw IGltcGxlbWVudGluZw== d2F1a2Vl IGRpZXRhcnk= IHN3aXRjaGluZw== UmVwdWJsaWM= IHZlbG9jaXR5 IGNpdA== IEF3YXJkcw== IGZpbmFuY2luZw== IGxhc3RlZA== KV0= IHJlbWluZGVy UGVyc29u IHByZWNpc2lvbg== IGRlc2lnbmVycw== IEZyaWVk IEJvcmRlcg== IHRyYWdpYw== IHdpZWxk IGluaXRpYXRpdmVz IFRhbms= d2Vy IGpvaW5z Um8= aW5lcnk= IGFycm93 IGdlbmVyYXRpbmc= Zm91bmRlcg== IHNlYXJjaGVz IHJhbmRvbWx5 QWNjZXNz IGJhdGNo IHBvc2Vk bGF0 IHB1cnN1aW5n YXNh IHRlc3RpZmllZA== Zm9ybWluZw== IFNoYXI= d2lraQ== IEVpdGhlcg== U29tZXRpbWVz IHNlbmF0b3Jz IEpvaG5ueQ== IFRhbGliYW4= IEdQUw== IjoiLw== 44Gu5Q== IGFuYWx5emVk IFJ1Ymlv IE1vdmVtZW50 b3BhcmQ= aWlp U3RhbmQ= ZmlnaHQ= IGlnbm9yaW5n aWFuZw== IEdO c29ldmVy IFNUQVQ= IHJlZnVzaW5n IHN3ZWF0 IGJheQ== UE9SVA== aXJtZWQ= YWt5 IGRpc3Bybw== IGxhYmVsZWQ= IDEwOA== SGVsbG8= IHBsZWFzYW50 YWJh IHRyaXVtcGg= IGFib2FyZA== IGluY29t IENyb3c= bGV0dA== IGZvbGs= IGNoYXNl YGA= IEJydXM= IHRlZW5z Y3Vl IHRlcnJhaW4= aHlk aWxpZ2h0 T1JZ U3VwcG9ydA== ZXdz bGxp cmFpbnRz IENhbmQ= IGFidXNlZA== YWNobWVudA== bGFyZw== QmFz IENhbmNlcg== IDE5Nzg= IHN1cHBvcnRlcg== YWNjZXNz IFRlcm1pbg== IFRhbXBh IEFOWQ== IG5ld2VzdA== IENyaW1pbmFs ZWR1 IDE5MzA= IGFkbWl0cw== IGVuZGU= IGZhaWx1cmVz dXJhdGU= ZnVsbmVzcw== Y3ljbA== IFN1YmplY3Q= IGluZmluaXRl dGhyZWU= V0E= cGl0 IEluc3RhbGw= UmFk aWxpYXRpb24= R00= IGNvbnRpbmVudA== IGFjY29tbW9kYXRl IENsYXk= IHB1cA== IEZ1bmN0aW9u IGhhbW1lcg== IEFsYmVydGE= IHJldmlzZWQ= IG1pbm9yaXRpZXM= IG1lYXN1cmVtZW50 Q29ubmVsbA== IGRpc2FibGU= IE1peA== SW5jcmU= IGZvcms= IFJvc2Vu IGltcGxpZXM= dW1ibHI= QU5H IHByb3RlaW5z IGFnZ3Jlc3Npb24= IGZhY2lsaXRhdGU= U04= IGlsbGVnYWxseQ== dWVy IGFjYWRlbQ== IHB1eno= IFNoaWZ0 cGF5 b2xsbw== IGF1ZGllbmNlcw== QnVpbGQ= IG5vYmxl IHN5bnRheA== 4piF IGJlYW0= IEJlZA== IEFsZA== IG9yaWdpbnM= dmlkZW8= IDE5Nzc= IEFzc2F1bHQ= IGdhcmFnZQ== VGVhbQ== IHZlcmRpY3Q= IGR3YXI= IFZpcnR1YWw= ZXZlbnQ= S2VlcA== IHNlbnRpbWVudA== IHdpbGRsaWZl c2hpcnQ= IGJ1cmc= IHJlY29tbWVuZGF0aW9u cmVwcmVzZW50 IGdhbGxlcnk= b3duZXJz IHNjaG9sYXI= IGNvbnZlbmllbmNl IFN3aWZ0 IGNvbnZpbmM= Q2Fw IHdhcmZhcmU= IFZpc3VhbA== IGNvbnN0aXR1dGU= IGFib3J0 IFdlYXRoZXI= IExvb2tpbmc= IEhlbQ== IG1hcnRpYWw= IGluY29taW5n ZXRpdGlvbg== IHRvbGVyYW5jZQ== IENyZWF0ZWQ= IGZsb3dz IEVsZGVy IHNvdWxz IGZvdWw= IFBhaW4= IENBTg== IDIyMA== YmM= aGVuZA== IGdlbml1cw== UmVhbA== IFdy b21ldGVy cGFk IGxpbWl0aW5n IFNp IExvcmU= IEFkdmVudHVyZXM= IHZhcmllZA== RGlzYw== Zmlu IFBlcnNvbmFs Q2hyaXM= IGludmVudGVk IGRpdmU= IFJpc2U= IG96 IENvbWljcw== IGV4cG9zZQ== IFJlYg== bGV0dGVycw== c2l0ZQ== aW1hdGVk IGhhY2tpbmc= IGVkdWNhdGVk IE5vYm9keQ== IGRlcHJp IGluY2VudGl2ZQ== 44K3 IG92ZXJzaWdodA== IHRyaWJlcw== IEJlbGdpdW0= IGxpY2Vuc2luZw== b3VydA== UHJvZHVjdA== YWhs IEdlbQ== IHNwZWNpYWxpc3Q= IGNyYQ== YW5uZXJz IENvcmJ5bg== IDE5NzM= UkVBRA== IHN1bW1hcg== IG92ZXJsb29r IEFwcGxpY2F0aW9u IGluYXBwcm9wcmlhdGU= IGRvd25sb2FkZWQ= UXVl IEJlYXJz IHRodW1i IENoYXJhY3Rlcg== IFJlaW5jYXJuYXRlZA== IFNpZA== IGRlbW9uc3RyYXRlcw== c2t5 IEJsb29tYmVyZw== IEFycmF5 IFJlc3VsdHM= IEZvdXJ0aA== IEVEVA== IE9zY2Fy Y2VuZA== IDEwNg== IE5VTEw= IEhFUkU= bWF0Y2g= IEJydW4= IGdsdWNvc2U= aWVn ZWd1 IGNlcnRpZmllZA== IHJlbGll IGh1bWFuaXRhcmlhbg== IHByYXllcnM= S2luZw== IG5hbg== aG91 MTA4 dWx1 IHJlbmV3YWJsZQ== IGRpc3Rpbmd1aXNo IGRlbnNl IFZlbnQ= IFBhY2thZ2U= IEJvc3M= IGVkaXRvcnM= IG1pZ3I= VHJh IFBldGVycw== IEFyY3RpYw== MjAwNA== IENhcGU= IGxvY2FsbHk= IGxhc3Rpbmc= IGhhbmR5 Liku UGFu IFJFUw== SW5kZXg= IHRlbnNpb25z IGZvcm1lcmx5 IGlkZW9sb2dpY2Fs IHNlbnNvcnM= IGRlYWxlcnM= IGRlZmluZXM= U2s= IHByb2NlZWRz IHByb3h5 YXppbmVz IEJhc2g= IFBhZA== IENyYWZ0 ZWFsb3Vz IHNoZWV0cw== b21ldHJ5 SnVuZQ== Y2xvY2s= VFQ= IFRoZWF0cmU= IEJ1eno= IGNoYXB0ZXJz IG1pbGxlbm4= IGRvdWdo IENvbmdyZXNzaW9uYWw= IGltYWdpbmVk YXZpb3I= IGNsaW5pYw== IDE5NDU= IGhvbGRlcg== cm9vdA== b2xlc3Rlcg== IHJlc3RhcnQ= Qk4= IEhhbWFz IEpvYg== IG9yYg== IHJhbQ== IGRpc2Nsb3Nl IHRyYW5zbGF0ZQ== IGltbWlncmFudA== IGFubm95aW5n IHRyZWF0eQ== YW5pdW0= IFRlYQ== IExlZ2lvbg== IGNyb3dkcw== IEJlYw== IEFlcg== b2h5ZA== QnJv TG9va2luZw== IGxicw== IGFnZ3Jlc3M= IHNlYW0= IGludGVyY2VwdA== IE1J bWVyY2lhbA== YWN0aXY= IENpdA== IGRpbWVuc2lvbg== IGNvbnNpc3RlbmN5 IHJ1c2hpbmc= IERvdWdsYXM= IHRyaW0= SW5zdGFsbA== aWNrZXI= IHNoeQ== MTA2 IG1lbnRpb25z cGVsbGVk IFRhaw== Y29zdA== IGNsYXNzcm9vbQ== IGZvcnR1bmU= ZHJpdmVu IHVubGU= IFdoZWVs IGludmVzdG9y IE1hc3RlcnM= a2l0 IGFzc29jaWF0aW9ucw== IEV2b2x1dGlvbg== b3Bpbmc= dXNjcmlwdA== IHByb3ZpbmNpYWw= IFdhbHRlcg== YXZp U08= IHVubGltaXRlZA== RW5nbGlzaA== IENhcmRz IEVib2xh bmVyZWQ= IHJldmVuZ2U= IG91dHJpZ2h0 dW1wZXI= IGZpdHRpbmc= IFNvbGlk IGZvcm1hbGx5 IHByb2JsZW1hdGlj IGhhemFyZA== IGVuY3J5cHRpb24= IHN0cmFpZ2h0Zm9yd2FyZA== IEFL IHBzZQ== IE9yYg== IENoYW1iZXI= IE1haw== Q29udGVudHM= IGxveWFsdHk= IGx5cmljcw== IFN5bQ== IHdlbGNvbWVk IGNvb2tlZA== IG1vbm9w IG51cnNl IG1pc2xlYWRpbmc= IGV0ZXJuYWw= IHNoaWZ0aW5n ICs9 Vmlz IGluc3RpdHV0aW9uYWw= aWxsYXJ5 IHBhbnQ= VkVSVA== IEFDQw== IEVuaA== IGluY29u IFJFVVRFUlM= IGRvbmF0ZWQ= 4oCm4oCm4oCm4oCm SW50ZXJu IGV4aGliaXQ= IHRpcmU= IFJpYw== IENoYW1waW9u IE11aGFtbWFk TklORw== IFNvY2Nlcg== IG1vYmlsaXR5 IHZhcnlpbmc= IE1vdmll IGxvcmQ= b2Fr RmllbGQ= IHZlY3Rvcg== dXNpb25z IHNjcmFw IGVuYWJsaW5n bWFrZQ== VG9y Lio= fHw= IFdlYnNpdGU= IE5QQw== IHNvY2lhbGlzdA== IEJpbGx5 IEFkZGl0aW9uYWw= IGNhcmdv IGZhcm1z IFNvb24= IFByaXpl IG1pZG5pZ2h0 IDkwMA== c2Vlbg== IFNwb3Q= IHNoZWVw IHNwb25zb3JlZA== IEhp IEp1bXA= IDE5Njc= TWljcm9zb2Z0 IEFnZW50 IGNoYXJ0cw== ZGly IGFkamFjZW50 IHRyaWNrcw== IG1hbmdh IGV4YWdnZXI= Lz4= Zm9vdGJhbGw= IEZDQw== R0M= IFRpZXI= YW5kcmE= T1VORA== JSks IGZydWl0cw== VkM= IEFB Um9iZXI= IG1pZHN0 4pc= YW5rYQ== IGxlZ2lzbGF0dXJl IE5laWw= IHRvdXJpc3Rz IiI= IFdhcm5pbmc= IE5ldmVydGhlbGVzcw== IE9mZmljaWFs IFdoYXRldmVy IG1vbGQ= IGRyYWZ0ZWQ= IHN1YnN0YW5jZXM= IGJyZWVk IHRhZ3M= IFRhc2s= IHZlcmI= IG1hbnVmYWN0dXJlZA== Y29tbWVudHM= IFBvbGlzaA== UHJvdg== IGRldGVybWluZXM= T2JhbWE= a2Vycw== IHV0dGVybHk= IHNlY3Q= c2NoZQ== IEdhdGVz IENoYXA= IGFsdW1pbnVt IHpvbWJpZQ== IFRvdWNo IFVQ IHNhdGlzZnk= IHByZWRvbWlu YXNjcmlwdA== IGVsYWJvcmF0ZQ== IDE5Njg= IG1lYXN1cmluZw== IFZhcmk= YW55YWh1 IHNpcg== dWxhdGVz aWRnZXM= aWNrZXRz IFNwZW5jZXI= VE0= b3VidGVk IHByZXk= IGluc3RhbGxpbmc= IENhYg== cmVlZA== cmVhdGVk U3VwcA== IHdyaXN0 IEtlcnJ5 MTA3 IEtsZQ== IFJhY2hlbA== IGNvdHRvbg== IEFSRQ== IEVsZQ== Q29udHJvbA== IGxvYWRz IERvZA== YW5hcw== Ym9uZQ== IGNsYXNzaWNhbA== IFJlZ2lvbmFs IEludGVn Vk0= IGRlc2lyZXM= IGF1dGlzbQ== c3VwcG9ydGVk IE1lc3NhZ2U= IGNvbXBhY3Q= d3JpdGVy IDEwOQ== IEh1cnJpY2FuZQ== Y2lzaW9u IGN5Y2xlcw== IGRyaWxs IGNvbGxlYWd1ZQ== IG1ha2Vy R2VybWFu IG1pc3Rha2Vu U3Vu IEdheQ== IHdoYXRzb2V2ZXI= IHNlbGxz IEFpcmw= bGl2 IE9wdGlvbg== IHNvbHZlZA== IHNlY3RvcnM= IGhvcml6b250YWw= IGVxdWF0aW9u IFNraWxs IEJpbw== Z2VtZW50 IFNuYXA= IExlZ2Fs IHRyYWRlbWFyaw== IG1ha2V1cA== IGFzc2VtYmxlZA== IHNhdmVz IEhhbGxvd2Vlbg== IFZlcm1vbnQ= IEZST00= IGZhcm1pbmc= IFBvZGNhc3Q= YWNjZXB0YWJsZQ== IEhpZ2hlcg== IGFzbGVlcA== dWxsaXZhbg== IHJlZmVyZW4= IExldg== IGJ1bGxldHM= b2tv SEM= IHN0YWlycw== IG1haW50YWlucw== IExvd2Vy IFZp IG1hcmluZQ== IGFjcmVz IGNvb3JkaW5hdG9y IEpvaA== IGNvdW50ZXJwYXJ0cw== IEJyb3RoZXJz IGluZGljdA== YnJh IGNodW5r IGNlbnRz SG9tZQ== IE1vbnRo IGFjY29yZGluZ2x5 aWZsZXM= IEdlcm1hbnM= IFN5bg== SHVi IGV5ZWI= 4pSA4pSA4pSA4pSA IHJhbmdlcw== IEhvbGxhbmQ= IFJvYm90 ZmM= TWlrZQ== IHBsYXNtYQ== IHN3YXA= IGF0aGxldGU= IFJhbXM= LCci IGluZmVjdGlvbnM= IGNvcnJpZA== IHZpYg== IHBhdGNoZXM= IHRyYWRpdGlvbmFsbHk= IHJldmVsYXRpb24= IHN3ZWVw IGdsYW5jZQ== IGluZXg= MjAwMw== IFJhdw== d29ya2luZw== b3N1cmVz IERhdA== IEx5bmNo IGxldmVyYWdl IFJlaWQ= IGNvcnJlbGF0aW9u aWFuY2Vz YXZhc2NyaXB0 IHJlcG9zaXRvcnk= cmV0dHk= IDE5NzI= MjQw IG91bg== cG9s IFJlZWQ= IHRhY3RpY2Fs aXNpdGU= QXBwbGU= IFF1aW5u IHJhcGVk aWxsbw== RXVyb3Bl IGFsZ29yaXRobXM= IFJvZHJpZw== aXU= IGlsbHVt IGZhbWU= IGludHJvZHVjaW5n IGRlbGF5cw== IFJhaWRlcnM= IHdoaXN0bGU= IG5vdmVscw== IFJlYWxseQ== IGRlcml2 IHB1YmxpY2F0aW9ucw== IE5laXRoZXI= IENvbW1lcmNl IGFzdG9u bGFuZ3VhZ2U= Tm90ZXM= IFJvdGg= IEZlYXI= IG1hdGU= IHBhcmFkZQ== IFFC IG1hbmV1 IENpbmNpbm5hdGk= bWl0dGluZw== IHdhaXN0 IFJldw== IGRpc2NvbnQ= 0LA= IHN0YXJpbmc= IGFsaWFz IHNlY3VyaXRpZXM= IHRvaWxldA== IEplZGk= IHVubGF3 dmlzZWQ= Ly8vLy8vLy8= XSg= IFdlaXNz IHByZXN0 IENvbXBhbg== IG1lbW8= IEdyYWNl SnVseQ== IEVsaXRl Y2VudGVy IFN0YXk= IGdhbGF4eQ== IHRvb3Ro IFNldHRpbmdz IHN1YmplY3RlZA== 44Km IGxpbmViYWNr IHJldGFpbGVycw== IFdhbnQ= IGRhbmdlcnM= QWly IHZvbHVudGFyeQ== ZXdheQ== IGludGVycHJldGVk b3RpbmU= w6c= IHBlbA== U2VydmljZQ== IEV2ZW50dWFsbHk= IGNhcmVlcnM= IHRocmVhdGVu IG1lbW9y IEJyYWRsZXk= YW5jaWVz c24= IFVua25vd24= TmF0aW9uYWw= IHNoYWRvd3M= YWlsYW5k IERhc2g= RXZlcnlvbmU= aXp6YXJk TWFyY2g= PSg= IHB1bGxz IHN0cmFuZ2Vy IGJhY2t3YXJkcw== IEJlcm5hcmQ= aW1lbnNpb25hbA== IGNocm9u IHRoZW9yZXRpY2Fs a3RvcA== IHdhcmU= IEludmVzdGln IEluaXRp IE9wZXJhdGlvbnM= b3Zlbg== b2NpZGU= Ki8= IGZsYW1lcw== IENhc2g= c2hpdA== IGNhYg== IEFuYWx5 IFNlYWg= IGRlZmluaW5n IG9yZGVyaW5n IGltbXVu IHBlcnNpc3RlbnQ= QUNI UnVzc2lhbg== bWFucw== IGhpbmQ= IHBob3RvZ3JhcGh5 wqk= IGh1Zw== IDEwNw== IEhlbmNl aW90cw== dWRlYXU= IHN1YnNpZGllcw== IHJvdXRpbmVseQ== IERldmljZQ== aXRpYw== IGRpc2d1c3Q= bGFuZGVy IDE5NDA= IGFzc2lnbm1lbnQ= IEJlc2lkZXM= d2ljaw== IER1c3Q= dXNj c3RydWN0ZWQ= MTEx ZGV2ZWxvcA== IGZvbmQ= IGludGVyc2VjdGlvbg== IGRpZ25pdHk= IGNvbW1pc3Npb25lcg== V2l0aG91dA== cmVhY2g= IGNhcnRvb24= IHNjYWxlcw== 44Ot RklH IHN1cnZleXM= IEluZG9uZXNpYQ== IGFydHdvcms= IHVuY2g= IGN5Y2xpbmc= dW5jdA== YXVlcg== b3JhdGU= IE9idmlvdXNseQ== IGNoYXJhY3Rlcml6ZWQ= ZmVsZA== IGFmZmlybQ== IGlubmluZ3M= IOk= IGFsaWVucw== IGNsb3Ro ZXRvb3Ro IENlcnRhaW4= wqc= IGRpZ2VzdA== a25vdw== IFhM IHByZWRpY3Rpb25z IGRpbg== V0FS IGFmdGVybWF0aA== RXhhbXBsZQ== IFN1Y2Nlc3M= IFRocg== SUdO IG1pbmVy QnVz IGNsYXJpdHk= aGVpbWVy IE9VVA== IFNlbmQ= IENpcmNsZQ== IERpZXQ= IHByb25vdW5jZWQ= IGNyZWF0b3Jz IGVhcnRocXVha2U= YXR0ZXJ5 Z2VvbnM= IG9k IGxheWluZw== b3Jw VWx0 cHJvamVjdA== IHVuZGVybWlu IHNlcXVlbA== U2Ft IERhcmtuZXNz IHJlY2VwdGlvbg== YnVsbA== WVM= IFZpcg== IHNlcXVlbmNlcw== IENvaW4= IG91dGZpdA== IFdhaXQ= MTE5 IGRlbGl2ZXJz Li4uLi4u IGJsb3du IEVzYw== IE1hdGg= cGVybQ== IFVs IGdsaW0= IGZhY2lhbA== IGdyZWVuaG91c2U= IHRva2Vucw== Ly0= IEFubnVhbA== IE9ORQ== IHRlZW5hZ2U= IFBoeXNpY2Fs IExhbmc= IENlbHQ= IHN1ZWQ= aXZpZHVhbGx5 IHBhdGllbmNl Y2hhaXI= cmVndWxhcg== IGF1Zw== aW52 ZXhjZXB0 IExpbA== IG5lc3Q= ZmQ= c3Vt IENoYXNl UnVzc2lh IEplbm5pZmVy IG9mZnNlYXNvbg== T3ZlcmFsbA== Rm9yZQ== IHJpb3Q= QXVk Zm9ybWVy IGRlZmVuZGVycw== IENU aW90aWM= cmlibHk= IGF1dG9tYXRlZA== IHBlbmlz IGluc2lzdA== IGRpYWdyYW0= IFNRTA== IEdhcmM= IHdpdGNo Y2xpZW50 aWVycmE= YW1iZXJz IHJlY291bnQ= ZmFy VmVyeQ== b3N0ZXJvbmU= IGFwcHJlY2lhdGVk IFBlcmZlY3Q= U2VjdGlvbg== IGRvc2Vz b2NhdXN0 IGNvc3RseQ== IGdyYW1z IFNoaQ== IHdyZXN0bGluZw== IDE5NzE= IHRyb3BoeQ== IG5lcnZl IEtheg== IEV4cGVyaWVuY2U= IHBsZWRnZWQ= IHBsYXliYWNr IGNyZWF0aXZpdHk= Ynll IGF0dGFja2Vycw== IGhvbGRlcnM= IENvYWNo IFBoRA== IHRyYW5zZmVycw== IGNvbG9yZWQ= IEhpbmR1 IGRyb3du IGxpc3RlbmVk IFdB aWFzbQ== UE8= IGFwcGVhbGluZw== IGRpc2Nsb3NlZA== IENoaWNrZW4= YWdnaW5n IHBsZWFkZWQ= IG5hdmlnYXRpb24= IFJldHVybnM= IFtb Uk9S RUE= IHBob3RvZ3JhcGhlcg== IFJpZGVy aXBwZXJz IHNsaWNl IGVyZWN0 IGhlZA== aXNzYW5jZQ== IFZpa2luZ3M= dXJpb3Vz IGFwcGV0 b3VidGVkbHk= Q2hpbGQ= IGF1dGhlbnRpYw== b29z IE1ha2luZw== IGFubm91bmNpbmc= IGJvZA== IG1ldGVy IE5pbmU= IFJvZ3Vl IHdvcmtmb3JjZQ== IHJlbmV3ZWQ= IG9yZ2FuaXNhdGlvbnM= YWNz UExF U2hvcnQ= IGNvbXBvdW5kcw== IFZpc2l0 IGVudmVsb3A= ZWFydGg= IHN1cHBvcnRpdmU= Z2dsZQ== IEJydXNzZWxz IEd1aWxk Q3JlYXRl UkVM IGF2ZXJhZ2Vk IDE5Njk= cmlhZ2Vz IGxlbmd0aHk= IGZvcmdvdA== T2theQ== IEVyZA== IGRlYWxlcg== IHJlY2Vzc2lvbg== REQ= IGRlc3BlcmF0ZWx5 IGh1bmdlcg== IHN0aWNrcw== IG1waA== IEZhaXRo IGludGVudGlvbmFsbHk= IGRlbW9s dWVsbGVy IFNhbGU= IGRlYnJpcw== c3ByaW5n IGxlYXA= Pj4+Pg== IGNvbnRhaW5lcnM= c2VsbGluZw== cmFuZWFu YXR0ZXJpbmc= IGNvbW1lbnRlZA== IENN b251dA== IHdvb2Rz ZXNwZWNpYWxseQ== IG9yZ2FuaXpl aXZpYw== IFdvb2Rz YW5nYQ== c3F1 IG1hag== YW1vbg== IGF4aXM= IDE5NzQ= IERlbm1hcms= IHdhcnJpb3I= IFBhbmQ= IG91dGxpbmVk IEJP aW5zdWxh emlsbGE= ZWJvb2s= IGRhcmU= IHNlYXJjaGVk IG5hdmlnYXRl U24= d3JpdGluZw== IHVuaXRlZA== SmFwYW4= IEhlYnJldw== IGZsYW1l IHJlbGllcw== IGNhdGNoaW5n IFNobw== IGltcHJpc29ubWVudA== IHBvY2tldHM= IGNsb3N1cmU= IEZhbQ== dGlt YWRlcXU= QWN0aXZpdHk= IHJlY3J1aXRpbmc= IFdBVENI IEFyZ2VudGluYQ== ZGVzdA== IGFwb2xvZ2l6ZQ== b3Jv IGxhY2tz IHR1bmVk IEdyaWZmaW4= IGluZmFtb3Vz IGNlbGVicml0eQ== c3Nvbg== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IElzaXM= IERpc3BsYXk= IGNyZWRpYmlsaXR5 IGVjb25vbWllcw== IGhlYWRsaW5l IENvd2JveXM= IGluZGVm IGxhdGVseQ== IGluY2VudGl2ZXM= YnV0dG9u IE1vYg== QXV0 IHJlc2lnbmVk IE9t Y2FtcA== IHByb2ZpbGVz IHNjaGVtZXM= b2xwaGlucw== YXllZA== Q2xpbnRvbg== ZW5o IFlhaG9v IGFic3Q= IGFuaw== c3VpdHM= IHdpc2hlZA== IE1hcmNv dWRkZW4= IHNwaGVyZQ== IEJpc2hvcA== IGluY29ycG9yYXRlZA== IFBsYW50 MTE0 IGhhdGVk cGlj IGRvbmF0ZQ== IGxpbmVk IGJlYW5z IHN0ZWFsaW5n IGNvc3R1bWU= IHNoZXJpZmY= IGZvcnR5 IGludGFjdA== IGFkYXB0ZWQ= IHRyYXZlbGxpbmc= YmFydA== IG5pY2VseQ== IGRyaWVk IHNjYWw= b3NpdHk= Tk9URQ== IEJo IEJyb25jb3M= IElnbg== IGludGltYXRl IGNoZW1pc3RyeQ== IG9wdGltYWw= RGVi IEdlbmVyYXRpb24= IF0s aWNoaQ== IFdpaQ== IFlPVVI= dmVudGlvbnM= V3JpdGU= IHBvcHVs dW5uaW5n IFdvcg== Vm9s IHF1ZWVu aGVhZHM= S0s= IGFuYWx5emU= b3BpYw== ZWFyY2hlcnM= IGRvdA== bGVncmFwaA== YXN0aWNhbGx5 IHVwZ3JhZGVz IGNhcmVz IGV4dGVuZGluZw== IGZyZWV6ZQ== IGluYWJpbGl0eQ== IG9yZ2Fucw== IHByZXRlbmQ= IG91dGxldA== MTEz b2xhbg== IE1hbGw= dWxpbmc= dGFsaw== IGV4cHJlc3Npbmc= IEFsd2F5cw== IEJlZ2lu ZmlsZXM= IGxpY2Vuc2Vz JSU= IE1pdHQ= IGZpbHRlcnM= IE1pbHdhdWtlZQ== R04= IHVuZm9sZA== TW8= IG51dHJpdGlvbg== cHBv Qm8= IGZvdW5kaW5n IHVuZGVybWluZQ== IGVhc2llc3Q= IEN6ZWNo IE1hY2s= IHNleHVhbGl0eQ== IE5peG9u V2lu IEFybg== IEtpbg== 44Kj aWNlcg== IGZvcnR1bg== IHN1cmZhY2Vz YWdoZA== IGNhcnJpZXJz IFBBUlQ= IFRpYg== IGludGVydmFs IGZydXN0cmF0aW5n IFNoaXA= IEFybWVk ZmZl IGJvYXRz IEFicmFoYW0= aW5pcw== IHN1aXRlZA== dGhyZWFk aW92 YWJ1bA== IFZlbmV6dWVsYQ== IHRvbQ== c3VwZXI= IGNhc3RsZQ== YWx0aG91Z2g= aW94aWRl ZWNoZXM= IGV2b2x1dGlvbmFyeQ== IG5lZ290aWF0ZQ== IGNvbmZyb250ZWQ= UmVtZW1iZXI= IDE3MA== U3VjaA== IDkxMQ== bXVsdA== IEFieXNz dXJyeQ== a2Vlcw== c3BlYw== IEJhcmJhcmE= IGJlbG9uZ2luZw== IHZpbGxhaW4= aXN0YW5p IGFjY291bnRhYmxl IHBvcnRpb25z IERlY2w= VXI= IEthdGU= Z3Jl IG1hZ2F6aW5lcw== VUNL IHJlZ3VsYXRl b21vbg== IEFsbW9zdA== IG92ZXJ2aWV3 IHNjcmFt IGxvb3Q= IEZpdHo= IGNoYXJhY3RlcmlzdGlj IFNuYWtl c2F5 IFJpY28= IHRyYWl0 IEpvaW5lZA== YXVjdXM= IGFkYXB0YXRpb24= IEFpcmxpbmVz IGFyY2hhZQ== IElkZQ== IGJpa2Vz IGxpdGVyYXJ5 IGluZmx1ZW5jZXM= IFVzZWQ= Q3JlYXQ= IHBsZWE= IERlZmVuY2U= IEFzc2Fzcw== IHBvbmQ= VUxU KSI= IGV2YWx1YXRlZA== IG9idGFpbmluZw== IGRlbW9ncmFwaGlj IHZpZ2ls YWxleQ== IHNwb3VzZQ== IFNlYWhhd2tz cmVzcG9ucw== IEJlbHQ= dW1hdGlj IHJpc2Vz cnVubmVy IE1pY2hlbGxl IHBvdGVudA== cmFjZQ== IFBBQw== RmluZA== b2xlc3Rlcm9s SVNT IEludHJvZHVjZWQ= cmVzc2Vz aWdubWVudA== T3M= IFR1 IERleA== aWNpZGVz IHNwYXJrZWQ= IExhdXJh IEJyeWFudA== IHNtaWxpbmc= IE5leHVz IGRlZmVuZGFudHM= IENhdGFs IGRpc2hlcw== c2hhcGVk IHByb2xvbmc= bXQ= KCQ= 44CC IGNhbGN1bGF0aW9ucw== IFNhbWU= IHBpdg== SEg= IGNhbmNlbGxlZA== IGdyaW4= IHRlcnJpdG9yaWVz aXN0aWNhbGx5 Q29tZQ== IFBhcmVudA== UHJvamVjdA== IG5lZ2xpZw== IFByaXZhY3k= IGFtbW8= TEVDVA== b2x1dGVseQ== IEVwaWM= IG1pc3VuZGVy d2Fs QXByaWw= bW9z cGF0aHk= IENhcnNvbg== IGFsYnVtcw== IEVhc3k= IHBpc3RvbA== PDw= IFwo dGFyZ2V0 aGVscA== IGludGVycHJl Y29uc2Npb3Vz IEhvdXNpbmc= IEpvaW50 MTI3 IGJlZXJz c2NpZW5jZQ== IEZpcmVmb3g= ZWZmZWN0aXZl IENhYmlu IE9rYXk= IEFwcGxpYw== IHNwYWNlY3JhZnQ= IFNS dmV0 IFN0cmFuZ2U= U0I= IGNvcnBz aWJlcmFs ZWZmaWNpZW50 IHByZXZhbGVuY2U= IGVjb25vbWlzdHM= MTE4 VGhyZWFk b3JkYWJsZQ== T0RF IENhbnQ= PS09LQ== aWZpYWJsZQ== IEFyb3VuZA== IHBvbGU= IHdpbGxpbmduZXNz Q0xB IEtpZA== IGNvbXBsZW1lbnQ= IHNjYXR0ZXJlZA== IGlubWF0ZXM= IGJsZWVkaW5n ZXZlcnk= IHF1ZXVl IFRyYWlu IGhpag== IG1lbGVl cGxldGVk IGRpZ2l0 IGdlbQ== b2ZmaWNpYWw= IGxpZnRpbmc= 0LU= UmVxdQ== aXR1dGVz IHBhY2thZ2luZw== IFdvcmtlcnM= aHJhbg== IExlYmFub24= b2xlc2M= IHB1bmlzaGVk IEp1YW4= IGphbQ== IERvY3VtZW50 IG1hcHBpbmc= aWNhdGVz IGluZXZpdGFibHk= IHZhbmlsbGE= IFRvbg== IHdhdGNoZXM= IGxlYWd1ZXM= IGluaXRpYXRlZA== ZGVncmVl cG9ydGlvbg== IHJlY2FsbHM= IHJ1aW4= IG1lbHQ= SUFO IGhlbQ== RXhw IGJha2luZw== IENvbG9tYg== YXRpYmxl IHJhZGl1cw== cGx1Zw== IElG ZXRpY2FsbHk= IGZpY3Q= SEVS IFRhcA== YXRpbnVt IGluaw== IGNvaA== IFdpemFyZA== Ym90aA== dGV4 IHNwZW5kcw== IEN1cnJlbnRseQ== IFBpdA== IG5ldXJvbnM= aWdudA== IHJhbGw= IGJ1c2Vz YnVpbGRpbmc= IGFkanVzdG1lbnRz IGNyaWVk aWJsaWNhbA== YXR0ZWQ= IFppb24= IE1hdHRlcg== IG1lZGl0YXRpb24= IERlbm5pcw== IG91cnM= IFRhYg== IHJhbmtpbmdz b3J0YWw= IGFkdmVycw== IHN1cnJlbmRlcg== IEdvYg== Y2l1bQ== b21hcw== aW1ldGVy IG11bHRpcGxheWVy IGhlcm9pbg== IG9wdGltaXN0aWM= IGluZGljYXRvcg== IEJyaWc= IGdyb2Nlcnk= IGFwcGxpY2FudA== IFJvY2tldA== dmlk RXhjZXB0aW9u cGVudA== IG9yZ2FuaXppbmc= IGVuY291bnRlcnM= IFRPRA== IGpld2Vs U2F2ZQ== IENocmlzdGll IGhlYXRpbmc= IGxhenk= IENQ IGNvdXNpbg== Q29uZmln IHJlZ2VuZXI= IG5lYXJlc3Q= IGFjaGlldmluZw== RU5T dGhyb3c= IFJpY2htb25k YW50bGU= MjAwMg== IGFudGVu YmlyZA== MTMz IG5hcmM= cmFpbnQ= dW5ueQ== IEhpc3Bhbmlj b3VybmFtZW50cw== IHByb3BoZQ== IFRoYWlsYW5k IFRp IGluamVjdGlvbg== IGluaGVyaXQ= cmF2aXM= IG1lZGk= IHdob2V2ZXI= IERFQlVH R1A= IEh1ZA== Q2FyZA== cHJvbQ== IHBvcg== IG92ZXJoZWFk TGF3 IHZpb2xhdGU= IGhlYXRlZA== IGRlc2NyaXB0aW9ucw== IGFjaGlldmVtZW50cw== IEJlZXI= IFF1YW50 V2Fz IGVpZ2h0aA== IEl2 IHNwZWNpYWxpemVk VVBEQVRF IERlbHRh UG9w SnVs IEFzaw== b3BoeQ== IG5ld3NsZXR0ZXJz IFRvb2w= IGdhcmQ= IENvbmZlZGVy IEdNVA== IEFiYm90dA== IGltbXVuaXR5 IFZN SXNsYW0= IGltcGxpY2l0 d2Q= IDE5NDQ= cmF2aXR5 b21ldHJpYw== IHN1cnZpdmluZw== dXJhaQ== IFByaXNvbg== IHJ1c3Q= IFNrZXRjaA== IGJlZXM= IFRoZW9yeQ== IG1lcml0 VGV4 Y2hhdA== IG1pbQ== IHBhc3Rl IEtvY2g= IGlnbm9yYW5jZQ== IFNob290 IGJhc2VtZW50 VW5pdGVk IEFkdmlz aGVpZ2h0 IGZvc3Rlcg== IGRldGFpbg== aW5mb3JtYXRpb24= IG5ldXJhbA== Jzs= IHByb3Zlcw== YWxsZXJ5 IGludml0YXRpb24= dW1iZXJz IGNhdHRsZQ== IGJpY3ljbGU= emk= IGNvbnN1bHRhbnQ= IGFwb2xvZ3k= IFRpZ2Vy IDEyMw== OTk5 IGluZGl2aWR1YWxseQ== cnQ= aWdpb24= IEJyYXppbGlhbg== IGRpc3R1cmI= IGVudHJlcHJlbmV1cnM= IGZvcmVzdHM= Y2VycHQ= cGxhdGVz cGhlcg== Y2xpcHNl IHR3aXR0ZXI= IGFjaWRz b2dyYXBoaWNhbA== aHVt IEJhbGQ= aWZ1bGx5 IGNvbXBpbGVy IERB IGRvbm9y YXNp IHRyaWJhbA== bGFzaA== IENvbmZpZw== IGFwcGxpY2FudHM= IHNhbGFyaWVz MTM1 UHV0aW4= IEZvY3Vz aXJz IG1pc2NvbmR1Y3Q= IEhheg== IGVhdGVu TW9iaWxl TXVzbGlt IE1hcmN1cw== dmlvbA== IGZhdm9yYWJsZQ== IHN0dWI= YWRpbg== IEhvYg== IGZhaXRoZnVs IGVsZWN0cm9uaWNz IHZhY3V1bQ== d2FpdA== YmFja2Vk ZWNvbm9taWM= ZGlzdA== IHRlbnVyZQ== IHNpbmNlcmU= IFRvZ2V0aGVy IFdhdmU= IHByb2dyZXNzaW9u IGRlbnlpbmc= IGRpc3RyZXNz YnJhc2th dGhpcmQ= IG1peGluZw== IGNvbG9uaWFs IHByaXZhdGVseQ== IHVucmVzdA== YXRlcm5pdHk= IHByZW1pc2Vz YW50aQ== Z3JlZ2F0aW9u IGxpY2VuY2U= IEhpbmQ= IFNhbXVlbA== IGNvbnZpbmNpbmc= IEFjZQ== IFJ1c3Q= IE5ldGFueWFodQ== IGhhbmRsZXM= IFBhdGNo b3JpZW50ZWQ= YWhv IEdvbno= IGhhY2tlcnM= Y2xhaW1lcg== IGN1c3RvbXM= IEdyYW4= ZmlnaHRlcnM= IGx1Yw== IG1hbnVzY3JpcHQ= YXJlbnRob29k IGRldmls IHdhcnJpb3Jz IG9mZmVuZGVycw== V2lsbGlhbQ== IGhvbGlkYXlz IG5pZ2h0bWFyZQ== IGxldmVy aWZmZXJlbnQ= U3RhdA== IGV4aGliaXRpb24= cHV0ZWQ= IFB1cmU= IGFscGhh IGVudGh1c2lhc20= IFJlcHJlc2VudGF0aXZlcw== RUFS IFR5cA== IHdoZWF0 IEFsZg== IGNvcnJlY3Rpb24= IGV2YW5nZWw= QVRU TWlzcw== IHNvdXA= IGltcGxpZWQ= cGFyYW0= IHNleHk= IEx1eA== IHJlcHVibGlj cGF0Y2g= YWJsaXNo IGljb25z IGZhdGhlcnM= IEdFVA== IENhcmli IHJlZ3VsYXRlZA== IENvaGVu IEJvYmJ5 IG5lcg== IGJlbnQ= dmVudG9yeQ== IEFsb25n IEVTVA== IFdhbGxhY2U= IG11cmRlcnM= cmlzZQ== a2VsbA== IENvbW1vbndlYWx0aA== IG5hc3R5 ZXRh IE1JVA== IGFkbWluaXN0ZXJlZA== IGdlbnVpbmVseQ== RWRpdG9y bmljaw== IGh5ZHJv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IEJsZQ== IGZpbmVz IGdvcmdl YXVzaWJsZQ== cmg= IGFwcGxl bWVudGlvbmVk IHJvcGU= b3R5cA== SFI= IGRpc2FwcG9pbnRpbmc= IGNhZ2U= bmlr IGRvdWJ0cw== IEZSRUU= cHJpbnRz IE1VU1Q= IHZlbmRvcnM= IElucXU= IGxpYmVyYWxz IGNvbnRyYWN0b3I= IHVwc2lkZQ== Y2hpbGRyZW4= IHRyaWNreQ== IHJlZ3VsYXRvcnM= Y2hhcmdlZA== bGl0ZXI= ICoqKg== IHJlYmVsbA== bGFuZw== IGxvY2Fscw== IHBoeXNpY2lhbnM= IGhleQ== YXJzZQ== dG0= IExleA== IGJlaGF2aW9yYWw= c3VjY2Vzc2Z1bA== Rlg= IGJyaWNr b3ZpYw== IGNvbmZvcm0= IHJldmlld2luZw== IGluc2lnaHRz IGJpb2xvZ3k= IFJlbW92ZQ== IEV4dHJh IGNvbW1pdHRpbmc= aW5kdWNlZA== aWdudHk= aWdt IGF0b21pYw== Q29tbW9u IEVN IFBlcmU= IEl0ZW1z ZWg= IHByZXNlcnZlZA== IEhvb2Q= IHByaXNvbmVy IGJhbmtydXB0Y3k= IGdyZW4= dXNoZXM= IGV4cGxvaXRhdGlvbg== IHNpZ25hdHVyZXM= IGZpbmFu XSwi IE1S IG1lZw== cmVtbGlu IG11c2ljaWFucw== IHNlbGVjdGluZw== IGV4YW1pbmluZw== SU5L bGF0ZWQ= SGk= IGFydGlj IHBldHM= IGltcGFpcg== IE1BTg== IHRhYmxldHM= aW5jbHVkZQ== UmFuZ2U= IGNhdXQ= IGxvZ3M= IG1vdW50aW5n IHVuYXdhcmU= IGR5bmFtaWNz IFBhbGVzdGluZQ== IFF1YXJ0ZXI= IFB1cnBsZQ== IG1h IEltcG9ydA== IGNvbGxlY3Rpb25z Y2lhdGlvbg== IHN1Y2Nlc3Nvcg== IGNsb25l IGFpbWluZw== IHBvc3Nlc3NlZA== IHN0aWNraW5n IHNoYWtpbmc= IGxvY2F0ZQ== IEhvY2tleQ== VHVybg== MTcw IGZpZnRlZW4= IEhhcnJpc29u IGNvbnRpbnVvdXNseQ== IFRD IFZhbGVudA== IFJlc2N1ZQ== IGJ5cGFzcw== YW1vdW50 IG1hc3Q= IHByb3RlY3Rz IGFydGlzdGlj IHNvbWV0aW1l IHNob2U= IHNob3V0ZWQ= aWZpY2FudA== ZXRpdGl2ZQ== IFJlZ2lzdGVy IEppbg== IGNvbmNlbnRyYXRlZA== bGluZ3Rvbg== b25pZXM= IGdlbmVyYXRvcg== eXJpbQ== IEFybWVu IGNsZWFyaW5n aWRv IFRX YWxwaA== IGxhZGllcw== SGFyZA== IGRpYWxvZw== IGlucHV0cw== 5pw= IHBvc2Vz IHNsb3Rz IFByZW1pdW0= IGxlYWtz IGJvc3Nlcw== IDExMw== Y291cnNl QWNj IE5ld3Rvbg== IEF1c3RyaWE= IE1hZ2U= IHRlYWNoZXM= YWJhZA== IHdlYXJz IGN5bA== IGN1cnNl IFNhbGVz IFdpbmdz IHBzeQ== IGdhcHM= IEljZWxhbmQ= IFBpbnRlcmVzdA== IGxhbmRsb3Jk IGRlZmluaXRpb25z IEtlcg== IHN1ZmZpY2llbnRseQ== IFBlbmNl IEFyY2hpdGVjdA== IHN1cnBhc3M= IDExNA== IHN1cGVyaGVybw== IERpc2Vhc2U= IHByaWVzdHM= IEN1bHR1cmU= IGRlZmluaXRpdmU= IHNlY3JldGx5 IERhbmNl aW5zdGFsbA== Y2hpZWY= IEplc3NpY2E= V291bGQ= VXBkYXRlZA== IGxvY2tlcg== IEtheQ== IG1lbW9yaWFs 6KY= ZmF0 IGRpc2d1 IGZsYXZvcnM= IEJhc2ViYWxs IFJlc2lzdGFuY2U= IGtpY2tz IGVudg== IHRlZW5hZ2Vycw== RGFyaw== IENBUg== IGhhbHQ= IExH IEdhYnJpZWw= IGZldmVy IHNhdHVy IG1hbGw= IGFmZmlsaWF0ZQ== IFNsZWVw IFNwZWNpZmlj IFZlbA== IGphcg== IFNhY3JlZA== IEVkd2FyZHM= IEFDTA== IHJldGFpbmVk IEdpYW50 IGxpbWl0YXRpb24= aW5jZXM= IHJlZnVzYWw= IFRhbGU= IEJ1dGxlcg== IGFjY2lkZW50cw== IENTUw== IGltcG9ydGVk IENvcHk= zrE= RVJU emVs IGRpdmlzaW9ucw== aG90cw== IEFsYg== IERT TG9hZGVy V2FzaGluZ3Rvbg== YXRpc2Y= IENyZWF0aXZl XC4= IEF1dG9t cmVkaWN0 IHJlY2VwdG9y IENhcmxvcw== TWV0aG9k b2th IG1hbGljaW91cw== IHN0ZXBwaW5n LFs= IERhZA== IGF0dHJhY3Rpb24= IEVmZmVjdHM= IFBpcmF0ZQ== IENlcg== IEluZHVzdHJ5 IFJ1ZA== IGNoYXJ0ZXI= IGRpbmluZw== IGluc2lzdHM= IGNvbmZpZ3VyZQ== ICgj IFNpbXBsZQ== IFNjcm9sbA== VVRD MTc1 IEtvbg== IG1hcmtldHBsYWNl IOOC IHJlZnJlcw== IGdhdGVz ZXJyZWQ= IFBvZA== IGJlaGF2ZQ== RnJhbms= bm9kZQ== IGVuZG9yc2Vk aGV0dA== YXNpdmU= IEhvbWVsYW5k IHJpZGVz IExlYXZl ZXJuZXNz IGZsb29kaW5n QUZQ IHJpc2Vu IGNvbnRpbnVhbGx5 IHVuYW5pbQ== IENvbnRyYWN0 IFBhcw== IGd1aWRlZA== IENoaWxl YmQ= IHN1Y2M= cHRpYw== IGNvbW1pdHRlZXM= IEx1dGhlcg== IEFueW9uZQ== IHNhYg== MTI0 IHBpeGVs IEJhaw== IFRhZw== IEJlbm5ldHQ= RW50ZXI= c21hbGw= IFByZXNpZGVudGlhbA== IHB1bA== IGNvbnRyYWNl YXJjaGl2ZQ== IGNvYXN0YWw= IEtpZHM= MTky 4oCy aWNreQ== SU5HVE9O IHdvbGY= IFN0YWxpbg== VHVy aWRnZXQ= YW1hcw== IFVubGVzcw== IHNwb25zb3I= IG1vcnBo IENob29zZQ== IHJ1bm5lcg== IHVuYmVs IG11ZA== IE1hbmE= IGR1YmJlZA== IGdvZGQ= dXJlcnM= d2luZG93 IHJlbGllZA== IGNlbGVicmF0aW5n b3Nj IDEzNQ== IGxvYmJ5aW5n IGluY29tcGxldGU= IHJlc3RyaWN0aW9u IGluY2Fw aXR1cw== IGV4cGVjdGF0aW9u IEFwb2xsbw== IGludGVucw== IHN5bmM= R0g= IG1hbmlwdWxhdGlvbg== Qlk= IHNwZWFy IGJyZWFzdHM= IHZvbGNhbg== aWxpYQ== TWF0ZXJpYWw= IGZvcm1hdHM= IEJhc3Q= IHBhcmxpYW1lbnRhcnk= IHNuYWtl IHNlcnZhbnRz IFRydWRlYXU= IEdyaW0= IEFyYWJpYw== IFNDUA== IEJveXM= c3RhdGlvbg== IHByb3NwZWN0aXZl b3JkZQ== aW5pdGlhbGl6ZWQ= IGJvcmVk QUJMRQ== IGFjY2Vzc2Vk IHRheGk= IFNoZWxs YWlkZW4= dXJzZWQ= aW5hdGVz IEluc3VyYW5jZQ== IFBldGU= U2VwdGVtYmVy NjUw IGFkdmVudHVyZXM= IENvdmVy IHRyaWJ1dGU= IHNrZXRjaA== IGVtcG93ZXI= INg= IEdsZW5u IERhdw== PVwi IFBvbGl0aWNz IGd1aWRlcw== IGRpb3hpZGU= IEdvcmU= IEJyaWdodA== IFNpZXJyYQ== IHZhbHVlZA== Y29uZA== IHBvaW50ZXI= U2VsZWN0 IHJpc2t5 IGFic29yYg== aW1hZ2Vz IHJlZnVzZXM= IGJvbnVzZXM= X19f IGhpbGFy IEZlYXR1cmVz MjIw IENvbGxlY3Rvcg== Rm9vdA== IDE5NjQ= Y3VsdXM= IGRhd24= IHdvcmtvdXQ= IExP IHBoaWxvc29waGljYWw= IFNhbmR5 IFlvdXRo IGxpYWJsZQ== QWY= Ymx1ZQ== IG92ZXJ0dXJu bGVzc25lc3M= IFRyaWJ1bmU= IEluZw== IGZhY3Rvcmllcw== IGNhdGNoZXM= IHByb25l IG1hdHJpeA== IGxvZ2lu IGluYWNj IGV4ZXJ0 c3lz IG5lZWRsZQ== IFF1cg== IG5vdGlmaWVk b3VsZGVy dHg= IHJlbWluZHM= IHB1Ymxpc2hlcnM= IG5vcnQ= IGdpdA== IGZsaWVz IEVtaWx5 IGZsb3dpbmc= IEFsaWVu IFN0cmF0ZWc= IGhhcmRlc3Q= IG1vZGlmaWNhdGlvbg== QVBJ IE1Z IGNyYXNoZXM= c3RhaXJz bnVtYmVy IHVyZ2luZw== Y2hhbm5lbA== IEZhbGNvbg== IGluaGFiaXRhbnRz IHRlcnJpZnlpbmc= IHV0aWxpemU= IGJhbm5lcg== IGNpZ2FyZXR0ZXM= IHNlbnNlcw== IEhvbG1lcw== IHByYWN0aXRpb24= IFBoaWxsaXBz b3R0bw== IGNvbXBpbGU= TW9kZWw= IEtv IFtd QW1lcmljYW5z IFRlcm1z IG1lZGljYXRpb25z IEFuYQ== IGZ1bmRhbWVudGFsbHk= IE5vdGljZQ== IHdlYWtlcg== IDAwMDA= IGdhcmxpYw== IG91dGJyZWFr IGVjb25vbWlzdA== IEJpcnRo IG9ic3RhY2xlcw== YXJjZXI= IE9ydGhvZG94 IHBsYWNlYm8= IENyZXc= YXNwYmVycnk= IEFuZ2Vscw== IGRpc2NoYXJnZQ== IGRlc3RydWN0aXZl MTE3 IFJpc2luZw== IGRhaXJ5 bGF0ZQ== IGNvbGxpc2lvbg== IFRpZ2Vycw== ZWFub3I= b2N1bWVudGVk IEludmFsaWQ= IGRvbnQ= IExpdGVy IFZh IGh5ZHJvZ2Vu IHZhcmlhbnRz IEJyb3ducw== IDE5NjU= IGluZGlnZW5vdXM= IHRyYWRlcw== IHJlbWFpbmRlcg== IHN3ZXB0 IEltcGFjdA== IHJlZGlzdA== IHVuaW50 Z3JhZHVhdGU= 44OV IFdJTEw= 44Gu5w== IENyaXRpY2Fs IGZpc2hlcg== IHZpY2lvdXM= IHJldmVyc2Vk WWVhcg== IFNveA== IHNob290aW5ncw== IGZpbG1pbmc= IHRvdWNoZG93bnM= YWlyZXM= bWVs IGdyYW5kZmF0aGVy IGFmZmVjdGlvbg== aW5nbGU= IG92ZXJseQ== QWRkaXRpb25hbA== IHN1cHJlbWU= IEdyYWQ= IHNwb3J0aW5n IG1lcmN5 IEJyb29rcw== b3VudHk= IHBlcmZvcm1z IHRpZ2h0bHk= IGRlbW9ucw== IGtpbGxpbmdz IGZhY3Rpb24= IE5vdmE= YXV0cw== IHVuZG91YnRlZGx5 YXJpbg== IHVuZGVyd2F5 cmFr IGxpdg== IFJlZ2lvbg== IGJyaWVmaW5n c2Vycw== Y2xvdWQ= IE1paw== dXNw IHByZWRpY3Rpb24= YXpvcg== IHBvcnRhYmxl IEdhbmQ= IHByZXNlbnRpbmc= IDEwODA= wrs= dXNoaQ== IFNwYXJr dGhlcmV1bQ== IGp1c3RpZmljYXRpb24= IE55 IGNvbnRyYWN0b3Jz bWluZ2hhbQ== IFN0eWxl 5YU= IENocm9uaWNsZXM= IFBpY3R1cmU= IHByb3Zpbmc= IHdpdmVz c2V0dA== IG1vbGVjdWxlcw== IEZhaXJ5 IGNvbnNpc3Rpbmc= IHBpZXI= YWxvbmU= aW5pdGlvbg== IG51Y2xl anNvbg== IGdvdHRh IG1vYmls IHZlcmJhbA== YXJpdW0= IG1vbnVtZW50 dWNrZWQ= IDI1Ng== VGVjaA== bWluZWNyYWZ0 IFRyYWNr IHRpbGU= IGNvbXBhdGliaWxpdHk= YXNpcw== IHNhZGQ= IGluc3RydWN0ZWQ= IE11ZWxsZXI= IGxldGhhbA== IGhvcm1vbmU= IG9yY2hl ZWxzZQ== IHNrZWxldA== IGVudGVydGFpbmluZw== IG1pbmltaXpl YWdhaW4= IHVuZGVyZ28= IGNvbnN0cmFpbnRz IGNpZ2FyZXR0ZQ== IElzbGFtaXN0 IHRyYXZlbHM= IFBhbnRoZXJz bGluZ3M= Q2FyZQ== IGxhd3N1aXRz dXJhcw== IGNyeXN0 IGxvd2VyZWQ= IGFlcmlhbA== IGNvbWJpbmF0aW9ucw== IGhhdW4= IGNoYQ== IHZpbmU= IHF1YW50aXRpZXM= IGxpbmtpbmc= YmFuaw== IHNveQ== QmlsbA== IEFuZ2VsYQ== IHJlY2lwaWVudA== IFByb3Rlc3Q= IHNvY2tldA== IHNvbGlkYXJpdHk= IOKG bWlsbA== IHZhcmllcw== IFBha2lzdGFuaQ== RHJhZ29u IHVuZQ== IGhvcml6b24= wqDCoMKgwqDCoMKgwqDCoA== IHByb3ZpbmNlcw== IGZyYW5rbHk= IGVuYWN0ZWQ= bm90ZXM= Wyc= IDE5Mg== b2NyYWN5 IGVuZG9yc2VtZW50 IG92ZXJ0aW1l VHJ1ZQ== TGFi bGljdGVk IEROQw== IGJlYXRz IEphbWll MTUy IElOVA== Q29udGFjdA== IGFjY291bnRlZA== aGFzaA== IFBhY2tlcnM= cGlyZXM= IGxlc2JpYW4= IGFtZW5kbWVudHM= IGhvcGVmdWw= IEZpbmxhbmQ= IHNwb3RsaWdodA== IGNvbmZpZ3VyZWQ= IHRyb3VibGVk IGdhemU= IENhbGdhcnk= IHJlbGlhYmlsaXR5 IGluc3VyZw== c3dlcg== YnV5 IFNraW4= IHBpeGVscw== IGhhbmRndW4= IHBhcmFz IGNhdGVnb3I= IEVM IFJleA== SW5kZWVk IGtpbmRh IGNvbmp1bmN0aW9u IEJyeWFu IE1hbnVmYWN0 eWFuZw== UGx1cw== U1FM aXNobWVudA== IGRvbWluYXRl IG5haWw= IG9hdGg= IGVydXB0 IEZpbmU= aXRiYXJ0 IENoaXA= IEFiZA== IE5hbQ== IGJ1eWVy IGRpc3NlbnQ= TGVha3M= Q29udGlu IHJpZGVy IFNvbWVvbmU= IGlsbHVzaW9u Y2lu IEJvZWluZw== IGluYWRlcXU= b3ZhdGlvbg== aWFudHM= IHJlYnVpbGQ= NDUw IERlc3Rpbnk= U1c= IFRpbGw= SGl0 aWF6 IEJhbmds YWNoZXJz IFJlZm9ybQ== IHNlZ21lbnRz IHN5c3RlbWF0aWM= ZGM= IENvbnNlcnZhdGl2ZXM= IHBvcnRhbA== aG9y IERyYWdvbmJvdW5k IGRyYWdnZWQ= b21v IHRoZWU= YWR2ZXJ0 IFJlcG9ydHM= IEV0 IGJhcnJlbHM= QXVndXN0 IGNvbXBhcmlzb25z IGhleA== IGFudGhyb3A= Ils= Ym9yb3VnaA== YWJp IHBpY3R1cmVk cGxheWluZw== IEFkZHJlc3M= IE1pcnJvcg== U21pdGg= IHRpcmVz IE5QUg== QUFBQQ== IGNsYXNzaWZpY2F0aW9u IFRoYW4= IEhhcm0= IFJB IHJlamVjdGlvbg== bWluYXRpb24= IHJhbmdlZA== IEZhbGxz REk= SG9zdA== 44K0 IEV4YW1wbGU= bGlzdGVk dGhpcmRz IHNhZmVndQ== YnJhbmQ= IHByb2JhYmxl Q2FuYWRh SVRJT04= IFFhZWRh IGNoaWNr IGltcG9ydHM= aGl0 bG9j V1c= IGJsZXc= IGFueXRpbWU= IHdob2xlcw== aWtlZA== IGNhbGN1bGF0aW9u Y3JlYXRl IE9yaQ== IHVwZ3JhZGVk IGFwcGFy dXRvcnk= IE1vbA== QnJpdA== IEpvbmc= SU5BTA== IFN0YXJ0aW5n IGRpY2U= dXJ0bGU= IHJlbHlpbmc= Y2xvc3VyZQ== IHByb2ZpdGFibGU= IHNsYXVnaHRlcg== IE1hbnVhbA== Y2FzdGVy ICIk IGZlYXRoZXI= IFNpbXBseQ== aWV2ZXM= IGRldGVyaW9y IFBDSQ== IHN0YW1w IGZsYXdz IHNoYWRl aGFtbWVy IHBhc3Nwb3J0 IGNvbnRpbmc= YW1lbA== IG9ic2VydmVycw== IG5lZ2xlY3Q= IFJC IEJyb3RoZXJob29k IHNrZXB0aWNhbA== ZmFtaWx5 dXNr IGVtb3Rpb25hbGx5 4pk= IEJldGE= YXNvbmFibGU= aWRpdHk= IE11bA== IGtpY2tpbmc= IENhcm0= b2xsYWg= VkVSVElT IEF0aGVu IGxhZGRlcg== IEJ1bGxldA== 5aM= MDAwMQ== IFdpbGRsaWZl IE1hc2s= IE5hbg== UmV2 IHVuYWNjZXB0YWJsZQ== bGVnYWw= IGNyb3dkZWQ= YWdp IENveA== amU= IG1vcmFsaXR5 IGZ1ZWxz IGNhYmxlcw== IG1hbmtpbmQ= IENhcmliYmVhbg== IGFuY2hvcg== IGJ5dGU= IE9mdGVu IE96 IGNyYWZ0ZWQ= IGhpc3Rvcmlhbg== IFd1 IHRvd2Vycw== IENpdGl6ZW5z IGhlbG0= IGNyZWRlbnRpYWxz IHNpbmd1bGFy IEplc3Nl IHRhY2tsZXM= IGNvbnRlbXB0 IGFmb3Jl IFNoYWRvd3M= IG5pbA== IHVyZ2VudA== YXBwbGU= Ymxvb2Q= IHZvbg== IG9mZmxpbmU= IGJyZWF0aGU= IGp1bXBz IGlycmVsZXZhbnQ= b3hpYw== b21hbA== aW1wb3J0YW50 Smlt IGdsb3Zlcw== YXJtaW5n ZGVwdGg= IHRhbGVudHM= b29raWU= IFNC IHBhbG0= dWZmcw== ZXN0YQ== SUdI IGNhbm9u IFZlcml6b24= IFBsZQ== IGNvdXBsZWQ= dmVsdA== IGZ1bmRyYWlzaW5n IEdldHRpbmc= IERMQw== IG1hdGhlbWF0aWNhbA== IEhT IENhcmRpbmFscw== dGVsbGluZw== IHNwb25zb3Jz IM8= IEJ1bGxz b3B0aW9u IHByb3Bvc2U= IG1lbW9yYWJsZQ== IGVtYnJhY2Vk IGRlY2xpbmluZw== SGVhbHRo ZWRh IH07 IHNwYW0= bWlsZQ== IHBpdGNoZXI= IEVpZ2h0 IGNhcmluZw== dXRpYw== cm9sZQ== IGFpcmxpbmU= ZXJuYW5kZXo= IEF0aGxldA== IGNlcnRpZmljYXRpb24= dXhl cmlnZXI= IGVtcGly IHNlbnNhdGlvbg== IGRpc20= IGJvbHQ= IGV2b2x2ZQ== SG91c2U= IGNvbnN1bHRhdGlvbg== IER1dHk= IHRvdWNoZXM= IE5hdGhhbg== IGZhaW50 aGFk Iig= IENvbnN1bWVy IEV4dHJlbWU= IDEyNw== IEhlcm0= IFNhY3JhbWVudA== aXpvcGg= IGFueGlvdXM= dWxvdXNseQ== IHNvY2lhbGx5 IFVUQw== IHNvbHZpbmc= IExldHRlcg== SGlzdG9yeQ== ZWR1Yw== UHJpY2U= KSk7 IHJlbG9hZA== YW1pYw== IHBvcms= IGRpc2NvdXJzZQ== IHRvdXJuYW1lbnRz YWlybw== IEt1cg== IENvc3Rh IHZpb2xhdGluZw== IGludGVyZmVyZQ== IHJlY3JlYXRpb25hbA== dWZmbGU= IHNwZWVjaGVz IG5lZWRpbmc= IHJlbWVtYmVycw== IGNyZWRpdGVk bmlh Zm9jdXNlZA== YW1lcmE= IGJydQ== dW1icw== IEN1YmFu IHByZWNlZGluZw== IG5vbnNlbnNl YWNpYWw= IHNtYXJ0cGhvbmVz IFN0b3JpZXM= U3BvcnRz IEVtZXJnZW5jeQ== b3VuY2luZw== ZWZpbmVk IGJlcg== IGNvbnN1bHRpbmc= IG1hc3RlcnM= aGVhc3Rlcm4= LiJb IFJ1bm5pbmc= IHN1c2NlcHQ= IEZlbmc= QW1lcmljYQ== cHJpc2Vz c3RpdGlhbA== IFdlZWtseQ== IEdyZWF0ZXI= bW9kdWxlcw== aWZ0ZXI= R3JhcGhpY3M= dWxlcg== IHdob2xseQ== IHN1cHByZXNz IGNvbmNlYWxlZA== IGhhcHBpbHk= IGFjY2VwdHM= IEVuam95 IHJpdmVycw== IEV4Y2VwdA== MjI1 IE5IUw== IE1jQ29ubmVsbA== IHB1c3N5 ZmVycmVk dXRhYmxl IGF0dGFpbg== ID49 IGRlcG9zaXRz cm9waGlj IG5vdG9yaW91cw== IFNoYXc= aWxpdGF0aW9u IGVwaWRlbWlj YWxsaWM= IHNtYWxsZXN0 b3ZpY2g= IGFjY2Vzc29yaWVz cGVydGllcw== IHN1cnBsdXM= IE1lY2g= IGFtYmln IEltbWlncmF0aW9u IGNoaW0= ZXZhbA== IHByYWN0aWNpbmc= IE15c3Rlcnk= IGRvbWFpbnM= IFNpbGljb24= YXBwcw== IGtpbG9tZXRlcnM= ZWE= IFNtYXNo IHdhcnJhbnR5 IG5vc3Q= c2ls cmV2 Sm9u IER1Ymxpbg== IHRhc3Rlcw== IGJvdXQ= Z3JlYXQ= ZXJyb3I= IHN3aXRjaGVz IEJhcHQ= RE8= b2tp IHNvdXJjZWQ= cHJvZHU= IGF0dGFjaG1lbnQ= IElzc3Vl IFF1ZXN0aW9u Sm9pbg== IGZpdHRlZA== IHVubGF3ZnVs Xl4= ZXJlaw== IGF1dGhlbnRpY2F0aW9u IHN0b2xl IGFjY291bnRhYmlsaXR5 bGFiZWw= U2VhcmNo IGFsYmVpdA== YXRpY2Fu ZnVuZGVk IEFkZGluZw== IElR IHN1Ym1hcg== bGl0 YXF1ZQ== IExlYXJuaW5n IGludGVnZXI= TWFzdGVy IENocm9t IHByZW1pZXI= T3A= IExpdQ== IGJsZXNzZWQ= IEdsb2Jl IFJlc3BvbnNl IGxlZ2l0aW0= IE1lcmtlbA== IGRpc3Bvc2Fs wrQ= IGdhdWdl cGVhdA== IGluZHVjZWQ= IHF1ZXN0aW9uYWJsZQ== YXJ0aHk= IFZpdA== IEZlZWQ= VW50aWw= VXQ= d29ydGh5 Ulk= IEhlcmFsZA== IEhhbW1lcg== IG1lZGFs IFJpdmVycw== IEhhY2s= IGNsYXJpZnk= IHRyYWNrZWQ= IGF1dG9ub21vdXM= IHRlbmFudA== IFFhdGFy ZXJpZQ== IGdyaW0= IE1vbml0b3I= IHJlc2lzdGFudA== IFNwZWM= IFdlbGxz TkFT MTQ4 IG1pbmVycw== aW90aWNz IG1pc3Nlcw== MTE2 Z2lhbg== Z2l0 IEV5ZXM= cHJlcw== IGdyYWR1YXRlZA== IGFuZ2Vs IHN5bmNocm9u IGVmZmljaWVudGx5 IHRyYW5zbWl0dGVk SGFycnk= IGdsb2JhbGx5 RU5DRQ== IE1vbnRhbmE= cmFnZWQ= IFByZXZlbnRpb24= IHBpc3M= IExs IHNoZWxm IEJKUA== IFRlc3RhbWVudA== IExhdGU= aWtlcg== IEhhcHA= IEp1bGlhbg== aGFsbA== IHNwb250 IHNodXRkb3du IGluY29uc2lzdGVudA== IHN1YnNjcmliZXJz IHNrZWxldG9u IE5lYnJhc2th IGluc3BpcmU= IFZvaWQ= RmVlZA== IGFuZ2xlcw== IFNwcmluZ3M= IGJlbmNobWFyaw== IHZhY2NpbmVz aXpvcGhyZW4= c2V4dWFs dWZmZWQ= IHNoaW5l IEthdGg= IGdlc3R1cmU= aW5lYQ== IHJpcA== IG9wcHJlc3Npb24= IGNvbnNjaWVuY2U= YnQ= IEx1bQ== IGluY2lkZW5jZQ== IEZh d3I= IG1pbmVyYWw= IFNwdXJz YWxreQ== IHRodW5kZXI= IG9waW8= QmVpbmc= IFBhbG0= IHdhc3RlZA== IGxi aWFyaWVz IEluaXRpYXRpdmU= IGN1cnJpYw== IG1hcmtlcg== IE1jTA== IGV4dGVuc2lvbnM= IFB2 IEFybXM= IG9mZmVyaW5ncw== IGRlZmVuc2Vz IHZlbmRvcg== IGNvbnRyYWRpY3Q= IENvbGlu IHJlZGRpdA== IHBlcmlwaGVy MTIy IHNpbnM= RWRpdA== SUNU U29mdA== IFNoYWg= IGFkbWluaXN0cmF0b3I= IFRyaXA= IHBvcm5vZ3JhcGh5 IHR1aXRpb24= aW5lbmNl IFByb2dyZXNz IGNhdGFsb2c= IHN1aXRl IGhpa2U= IHJlcHJvZHVjdGl2ZQ== ZW5naW5l IGRyb3VnaHQ= IE5vYWg= IDIzMA== IGR1ZGU= IHJlbGF4ZWQ= IHBhcnRpdGlvbg== IHBhcnRpY2lwYW50 IHRlbGVzYw== IGZlYXM= IEZG b3duZXI= IHN3ZWVwaW5n IGxlbnNlcw== IG1hdGNodXA= IFJlcGw= b3VybmFscw== IGNyZWRpYmxl IGdyYW5kbW90aGVy IHRoZXJtYWw= IHN1YnNjcmliaW5n IGlkZW50aXRpZXM= Y29sbQ== VUNU IHJlbHVjdGFudA== dXNlcnM= IENvcnQ= IGFzc2lzdGVk T1NT QVRJT05T SVNI IHBoYXJtYWNldXRpY2Fs aWNhYmxl YWRpYW4= IFNvbmlj IEZ1cnk= IE1vbmc= QUg= IFBzeWNob2xvZ3k= IHBob3NwaA== IHRyZWF0cw== rZQ= IHN0ZWFkaWx5 IEhlbGxv IHJlbGF0ZXM= IGNsdWU= RXhwbA== YXV0aA== IHJldmlzaW9u IGVsZA== b3Npb24= IGJyb24= MTQ0 cmlrZXM= IG1pbmVz IGJsYW5rZXQ= IEZhaWw= ZWxlZA== IEltYWdpbmU= IFBsYW5uZWQ= YWlj UmVxdWVzdA== TWFk IEhvcnNl IEVhZ2xl IGNhcGFj MTU3 IGxpbmc= IE5pY2U= IFBhcmVudGhvb2Q= bWluc3Rlcg== b2dz ZW5zaXRpdmU= Tm90aGluZw== IGNhcm4= Rmlu IFBF IHJpZmxlcw== IExQ U2FuZA== IGd1aUFjdGl2ZQ== IHRvdXJpc3Q= Q05O IHVudmVpbGVk IHByZWRlY2Vzc29y fXs= dWJlcg== IG9mZnNob3Jl IG9wdGljYWw= IFJvdA== IFBlYXJs ZXRvbg== IHN0YXJlZA== IGZhcnRoZXI= YXRpbGl0eQ== Y29udGlu IEd5 IEZvc3Rlcg== IENvYw== cmllbnRz IGRlc2lnbmluZw== IEVjb25vbXk= T05H V29tZW4= IE5hbmN5 ZXJ2ZXI= IG1hc2N1bA== IGNhc3VhbHRpZXM= IDIyNQ== IFN1bGxpdmFu IENob2ljZQ== IGFzdGVy d3M= IGhvdGVscw== IGNvbnNpZGVyYXRpb25z IGNvdWNo IFN0cmlw IEdu IG1hbmlwdWxhdGU= bGllZA== IHN5bnRoZXRpYw== IGFzc2F1bHRlZA== IG9mZmVuc2Vz IERyYWtl IGltcGU= T2N0b2Jlcg== IEhlcml0YWdl aGw= IEJsYWly VW5saWtl IGdyaWVm IDQ1MA== IG9wdGVk IHJlc2lnbmF0aW9u aWxv IHZlcnNl IFRvbWI= IHVwdA== IGFpcmVk IEhvb2s= IE1MQg== IGFzc3VtZXM= b3V0ZWQ= IFZlcnM= IGluZmVyaW9y IGJ1bmRsZQ== IEROUw== b2dyYXBoZXI= IG11bHRpcA== IFNvdWxz IGlsbHVzdHJhdGVk IHRhY3RpYw== IGRyZXNzaW5n IGR1bw== Q29uZg== IHJlbGVudA== IGNhbnQ= IHNjYXJjZQ== IGNhbmR5 IENG IGFmZmlsaWF0ZWQ= IHNwcmludA== eWxhbg== IEdhcmNpYQ== IGp1bms= UHJpbnQ= ZXhlYw== Q3JpdA== IHBvcnRyYWl0 aXJpZXM= IE9GRg== IGRpc3B1dGVz V1I= TG92ZQ== 44GE IFJleW4= IGhpcHA= b3BhdGg= IGZsb29ycw== IEZlZWw= IHdvcnJpZXM= IHNldHRsZW1lbnRz IFBvcw== IG1vc3F1ZQ== IGZpbmFscw== IGNydXNoZWQ= IFByb2JhYmx5 IEJvdA== IE1hbnM= IFBlcmlvZA== IHNvdmVyZWlnbnR5 IHNlbGxlcg== IGFwb3N0 IGFtYXRldXI= IGRvcm0= IGNvbnN1bWluZw== IGFybW91cg== IFJvb3Nl IGludGVuc2l2ZQ== IGVsaW1pbmF0aW5n IFN1bm5p IEFsZXBwbw== amlu IGFkdmlzZQ== cGFs IEhhbG8= IGRlc2NlbnQ= IHNpbXBsZXI= IGJvb3Ro U1RS TGF0ZXI= IENhdmU= PT09 IG1vbA== IGZpc3Q= IHNob3RndW4= c3VwcA== IHJvYmJlcnk= RWZmZWN0 IG9ic2N1cmU= IFByb2Zlc3Npb25hbA== IGVtYmFzc3k= IG1pbGl0YW50 IGluY2FyY2Vy IGdlbmVyYXRlcw== IGxhdW5jaGVz IGFkbWluaXN0cmF0b3Jz IHNoYWZ0 IGNpcmN1bGFy IGZyZXNobWFu IFdlcw== IEpvZWw= IERyZXc= IER1bmNhbg== IEFwcGFyZW50bHk= c2lnaHQ= IEludGVybmFs IEluZGl2aWR1YWw= IEZF IGJvcmU= IE10 IGJyb2FkbHk= IE9wdGlvbnM= b3VudGFpbg== aXBlcw== IFZpZGVvcw== MjA0 IGhpbGxz IHNpbXVsYXRpb24= IGRpc2FwcG9pbnRtZW50 aXRhbg== IExhYm9yYXRvcnk= IHVwd2FyZA== IGJvdW5kYXJ5 IGRhcmtlcg== aGFydA== IGRvbWluYW5jZQ== Q29uZw== IE9yYWNsZQ== IExvcmRz IHNjaG9sYXJzaGlw IFZpbmNlbnQ= ZWRl IFJhaA== IGVuY291cmFnZXM= cm92 IHF1bw== IHByZW1pc2U= IENyaXNpcw== IEhvbG9jYXVzdA== IHJoeXRobQ== IG1ldHJpYw== Y2x1Yg== IHRyYW5zcG9ydGVk IG5vZA== IFBpc3Q= IGFuY2VzdG9ycw== IEZyZWRlcg== dGh1bWJuYWlscw== IENF T05E UGhpbA== dmVuZ2U= IFByb2R1Y3Rz Y2FzdGxl IHF1YWxpZnlpbmc= IEthcmVu VkVSVElTRU1FTlQ= IG1pZ2h0eQ== IGV4cGxhbmF0aW9ucw== IGZpeGluZw== RGk= IGRlY2xhcmluZw== IGFub255bWl0eQ== IGp1dmVu IE5vcmQ= IERvb20= IEFjdHVhbGx5 T2s= cGhpcw== IERlc2VydA== IDExNg== SUs= IEZN IGluY29tZXM= VkVM b2tlcnM= IHBlY3Vs IGxpZ2h0d2VpZ2h0 Z3Vl IGFjY2VudA== IGluY3JlbWVudA== IENoYW4= IGNvbXBsYWluaW5n IEJhZ2hk IG1pZGZpZWxkZXI= IG92ZXJoYXVs UHJvY2Vzcw== IEhvbGxvdw== IFRpdGFucw== U21hbGw= bWFudWVs IFVuaXR5 IEV2ZW50cw== U3R5 IGRpc3Byb3BvcnRpb24= bmVzdHk= ZW5lcw== IENvZA== IGRlbW9uc3RyYXRpb25z IENyaW1zb24= IE9I IGVucm9sbGVk IGNlbA== IEJyZXR0 IGFpZGU= IGhlZWxz IGJyb2FkYmFuZA== IG1hcmtpbmc= IHdpemFyZA== IE5K IENoaWVmcw== IGluZ3JlZGllbnQ= IGR1Zw== IFNodXQ= dXJjaGFzZQ== ZW5kb3I= IGZhcm1lcg== IEdvbGRtYW4= MTI5 MTU1 T3JkZXI= IGxpb24= aWFibHk= IHN0YWlu YXJyYXk= aWxpdGFyeQ== IEZBUQ== IGV4cGxvZGVk IE1jQ2FydGh5 IFR3ZWV0 IEdyZWVucw== ZWtpbmc= bG4= ZW5zZW4= IG1vdG9yY3ljbGU= IHBhcnRpY2xl IGNob2xlc3Rlcm9s QnJvbg== IHN0YWly IG94aWQ= IGRlc2lyYWJsZQ== aWJsZXM= IHRoZW9y Zm9yY2luZw== IHByb21vdGlvbmFs b3Zv Ym9vdA== IEJvbnVz cmF3bGluZw== IHNob3J0YWdl IFBzeQ== IHJlY3J1aXRlZA== IGluZmFudHM= IHRlc3Rvc3Rlcm9uZQ== IGRlZHVjdA== IGRpc3RpbmN0aXZl IGZpcm13YXJl YnVpbHQ= MTQ1 IGV4cGxvcmVk IGZhY3Rpb25z IHZpZGU= IHRhdHRvbw== IGZpbmFuY2lhbGx5 IGZhdGlndWU= IHByb2NlZWRpbmc= Y29uc3RpdHV0aW9uYWw= IG1pc2Vy IGNoYWlycw== Z2dpbmc= aXBwbGU= IGRlbnQ= IGRpc3JlZw== 55Q= c3RhbnQ= bGxv YnBz YWtlbmluZw== IGFibm9ybWFs IEVSQQ== 5aOr IEhCTw== IE1BUg== IGNvbmNlc3M= IHNlcnZhbnQ= IGFzcGly bGF2 IFBhbmVs YW1v IHByZWNpcA== IHJlY29yZGluZ3M= IHByb2NlZWRlZA== IGNvbG9ueQ== IFRhbmc= YWJsbw== IHN0cmlwcGVk TGVmdA== dG9v IHBvdGF0b2Vz IGZpbmVzdA== JSku IGNyYXA= IFphY2g= YWJhc2Vz IEdvdGg= IGJpbGxpb25haXJl d29sZg== IHNhbmN0aW9u U0s= IGxvZ2dlZA== UG8= ZXllZA== dW5hbA== IGNyaWNrZXQ= IGFybWllcw== IHVuY292ZXJlZA== Q2xvdWQ= w7Nu IHJlYm91bmRz IG1lcw== T3Blcg== UGFj IG5hdGlvbmFsbHk= IGluc2VydGVk cGljdA== IGdvdmVybmFuY2U= 0Lg= IHByaXZpbGVnZXM= R0VU IGZhdm9yaXRlcw== aW1pdHk= IGxvdmVy dGhlbQ== ZW1wbA== IGdvcmdlb3Vz QW5u IHNsaXBwZWQ= IHZldG8= Qm9i IHNsaW0= dWNj IEZhbWU= dWRkZW5seQ== IGRlbmllcw== IE1hdXI= IGRpc3RhbmNlcw== IHdhbm5h dGFy IFNFUg== IOKI IGxlbW9u YXRoZXRpYw== IGxpdGVyYWw= IGRpc3Rpbmd1aXNoZWQ= IGFuc3dlcmluZw== R0k= IHJlbGlnaW9ucw== IFBoaWxvcw== IExheQ== IGNvbXBvcw== aXJlbWVudHM= IEtvcw== aW5leg== cm9sbGluZw== IHlvdW5nZXN0 YW5kaXNl IEJvcm4= IGFsdGFy YW1pbmE= IEJvb3Q= dm9j IGRpZ2dpbmc= IHByZXNzdXJlcw== IGxlbg== MjY0 IGFzc2Fzc2luYXRpb24= IEJpcm1pbmdoYW0= IE15dGg= IHNvdmVyZWlnbg== IEFydGlzdA== IFBob3RvZ3JhcGg= IGRlcGljdGVk IGRpc3BlbnM= b3J0aHk= IGFtYnVs aW50ZWc= IENlbGU= IFRpYmV0 IGhpZXJhcmNoeQ== IGN1 IHByZXNlYXNvbg== IFBldGVyc29u IGNvbG91cnM= IHdvcnJ5aW5n IGJhY2tlcnM= IFBhbG1lcg== IM68 IGNvbnRyaWJ1dG9y IGhlYXJpbmdz IHVyaW5l INk= b3VyZ2VvaXM= U2ltaWxhcg== IFppbW1lcg== c29tZXRoaW5n IFVTQw== IHN0cmVuZ3Rocw== IEZJ IGxvZ2dpbmc= QXNrZWQ= IFRoYWk= aW5xdQ== IFdhbHQ= IGNyZXdz aXRpc20= MzAx IHNoYXJwbHk= dW1lZA== IHJlZGlyZWN0 cmF0b3Jz SW5m IFdlYXBvbnM= IHRlYXNw MTk5OQ== TGl2ZQ== IEVzcGVjaWFsbHk= IFN0ZXI= IFZldGVyYW5z IGludHJv b3RoZXJhcHk= IG1hbHdhcmU= IGJyZWVkaW5n IG1vbGVjdWxhcg== IFJvdXRl IENvbW1lbnQ= b2NoZW0= IGFpbg== U2Vhc29u IGxpbmViYWNrZXI= xKs= IEVjb25vbWljcw== ZXNhcg== IExpdmVz IEVtbWE= IGtpbg== IFRlcnJpdA== IHBsYW50ZWQ= b3Rvbg== IEJ1dHRlcg== IFNwb25z UEVS IGR1bmdlb24= IHN5bWJvbGlj IGZpbG1lZA== IGRpZXRz IGNvbmNsdWRlcw== IGNlcnRhaW50eQ== IEZvcm1hdA== IHN0cmFuZ2Vycw== Zm9ybWF0 IFBoYXNl IGNvcGllZA== IG1ldHJlcw== bGRh IFVzZXJz IGRlbGliZXJhdGU= IHdhc2hlZA== IExhbmNl aW1hdGlvbg== IGltcHJvcGVy IEdlbmVzaXM= aWNrcg== IEt1c2g= IHJlYWxpc2U= IGVtYmFycmFzc2luZw== YWxraW5n YnVja3M= IHZlcmlmaWVk IG91dGxpbmU= eWVhcnM= IEluY29tZQ== MjAy IHpvbWJpZXM= RmluYWw= IE1pbGxlbm4= IG1vZGlmaWNhdGlvbnM= IFZpc2lvbg== IE1vc2Vz dmVyYg== aXRlcnJhbmVhbg== IEpldA== IG5hdmFs IEFnZw== IHVybA== IHZpY3Rvcmllcw== IG5vbmV0aGVsZXNz IGluanVzdA== IEZhY3Q= 55o= IGluc3VmZmljaWVudA== cmV2aWV3 ZmFjZWJvb2s= IG5lZ290aWF0aW5n IGd1YXJhbnRlZXM= aW1lbg== dXRlbmJlcmc= IGdhbWJsaW5n IGNvbmdy TG9hZGluZw== IG5ldmVydGhlbGVzcw== IHByZXNpZGVudHM= IEluZHVzdHJpYWw= IDExOA== IHBvdXJlZA== IFRvcnk= IDE3NQ== IDo9 U2NvdHQ= YW5nZXJlZA== VG9r IG9yZ2FuaXplcnM= TWF0 IEdyb3d0aA== IGFkdWw= IGVuc3VyZXM= IDExNw== 6b6N5Q== IG1hc3NhY3Jl IGdyYWRlcw== YmVmb3Jl QURWRVJUSVNFTUVOVA== IFNsb3c= IE1NQQ== 4oCUIg== IFZhdGljYW4= UWFlZGE= IG93ZQ== NjY2Ng== IFNvcnJ5 IEdyYXNz IGJhY2tncm91bmRz IGV4aGF1c3RlZA== IGNsYW4= IGNvbXByb21pc2Vk IEVsZg== IElzYWFj ZW5zb24= SW52ZXN0 SUZB IGludGVycnVwdGVk 44OJ44Op IHR3aXN0ZWQ= IERyYWdvbnM= TW9kZQ== IEtyZW1saW4= IGZlcnRpbA== aGVyZXM= cGhhbg== IE5vZGU= ZmVk IE9yYw== IHVud2lsbGluZw== Q2VudA== IHByaW9yaXQ= IGdyYWR1YXRlcw== IHN1YmplY3RpdmU= IGlzc3Vpbmc= IEx0 IHZpZXdlcg== IHdva2U= VGh1cw== YnJvb2s= IGRlcHJlc3NlZA== IGJyYWNrZXQ= IEdvcg== IEZpZ2h0aW5n IHN0cmlrZXI= UmVwb3J0 IFBvcnR1Z2Fs IG5lbw== d2Vk MTk5 IGZsZWVpbmc= c2hhZG93 aWRlbnRpZmllZA== VVNF U3RlYW0= IHN0cmV0Y2hlZA== IHJldmVsYXRpb25z YXJ0ZWQ= IER3 IGFsaWdubWVudA== ZXN0b24= IEphcmVk U2Vw IGJsb2dz dXBkYXRl Z29t cmlzaw== IGNsYXNo IEhvdXI= IHJ1bnRpbWU= IHVud2FudGVk IHNjYW0= IHJhY2s= IGVubGlnaHQ= b25lc3Q= IEZlcnI= IGNvbnZpY3Rpb25z IHBpYW5v IGNpcmN1bGF0aW9u IFdlbGNvbWU= IGJhY2tsYXNo IFdhZGU= IHJlY2VpdmVycw== b3RpdmU= SmVmZg== IG5ldHdvcmtpbmc= IFByZXA= IEV4cGxvcmVy IGxlY3R1cmU= IHVwbG9hZGVk IE1lYXQ= QkxF IE5hemlz IFN5bmQ= c3R1ZA== cm9vdHM= cmlhbnM= IHBvcnRyYXllZA== ID8/ IEJ1ZGRoYQ== c3Vu Um9iZXJ0 IENvbXBsZXg= IG92ZXJzZWU= IHN0ZWFsdGg= VGl0bGU= IEpvYnM= IEt1bQ== IGFwcHJlY2lhdGlvbg== IE1PRA== IGJhc2ljcw== IGNsaXBz IG51cnNpbmc= IHByb3Bvc2l0aW9u IHJlYWxpc2Vk IE5ZQw== IGFsbG9jYXRlZA== cml1bQ== YXJhbg== IFByb2R1Y3Rpb24= IFZvdGU= IHNtdWdn IGh1bnRlcg== YXplcg== IENoYW5nZXM= IGZsdWN0 eW9u QXJyYXk= IGtpdHM= V2F0ZXI= IHVuY29tbW9u IHJlc3Rpbmc= ZWxscw== d291bGQ= IHB1cnN1ZWQ= IGFzc2VydGlvbg== b21ldG93bg== IE1vc3Vs IFBsYXRmb3Jt aW9sZXQ= IHNoYXJlaG9sZGVycw== IHRyYWlscw== UGF5 IEVuZm9yY2VtZW50 dHlwZXM= IEFub255bW91cw== IHNhdGlzZnlpbmc= aWxvZ3k= ICgn d2F2ZQ== Y2l0eQ== U3RldmU= IGNvbmZyb250YXRpb24= IEVsZA== Q2FwdA== YWhhbg== aHRt IEN0cmw= T05T MjMw aWZh aG9sZGluZw== IGRlbGljYXRl IGphdw== IEdvaW5n b3J1bQ== U2Fs IGR1bGw= IEJldGg= IHByaXNvbnM= IGVnbw== IEVsc2E= YXZvcml0ZQ== IEdhbmc= IE51Y2xlYXI= IHNwaWRlcg== YXRzdQ== IHNhbXBsaW5n IGFic29yYmVk IFBoYXJt aWV0aA== IGJ1Y2tldA== IFJlY29tbQ== T0Y= IEZhY3Rvcnk= QU5DRQ== IGJhY3Rlcg== SGFz IE9ic2Vydg== MTIx IHByZW1pZXJl RGV2ZWxvcA== IGN1cnJlbmNpZXM= Q2FzdA== IGFjY29tcGFueWluZw== IE5hc2h2aWxsZQ== IGZhdHR5 IEJyZW5k IGxvY2tz IGNlbnRlcmVk IFVU YXVnaHM= b3JpZQ== IEFmZm9yZGFibGU= dmFuY2U= REw= ZW1ldA== IHRocm9uZQ== IEJsdWV0b290aA== IG5hbWluZw== aWZ0cw== QURF IGNvcnJlY3RlZA== IHByb21wdGx5 IFNUUg== IGdlbm9tZQ== IGNvcGU= IHZhbGxleQ== IHJvdW5kZWQ= IEtlbmQ= YWxpb24= cGVycw== IHRvdXJpc20= IHN0YXJr dmw= IGJsb3dpbmc= IFNjaGVkdWxl c3Rk IHVuaGFwcHk= IGxpdGlnYXRpb24= Y2VkZXM= IGFuZHJvaWQ= IGludGVncmFs ZXJlcnM= dWRlZA== dGF4 IHJlaXRlcg== IE1vdG9ycw== b2NpYXRlZA== IHdvbmRlcnM= IEFwb3N0 dWNraW5n IFJvb3NldmVsdA== ZnJhbQ== IHlpZWxkcw== IGNvbnN0aXR1dGVz YXdr SW50ZXJlc3Q= IGludGVyaW0= IGJyZWFrdGhyb3VnaA== IENoZXI= IHByb3NlYw== IERq IE1U UmVzcA== IFBU IHNwZXJt ZWRpdA== QlQ= TGludXg= Y291bnRyeQ== bGVhZ3Vl IGRpY2s= IG9jdA== IGluc2VydGluZw== IHNjcmE= IEJyZXdpbmc= IDE5NjY= IHJ1bm5lcnM= IHBsdW4= aWR5 IERpYW4= IGR5c2Z1bmN0aW9u IGV4Y2x1c2lvbg== IGRpc2dy IGluY29ycG9yYXRl IHJlY29uYw== IG5vbWluYXRlZA== IEFyY2hlcg== ZHJhdw== YWNoZWxvcg== IHdyaXRpbmdz IHNoYWxsb3c= IGhhc3Q= IEJNVw== IFJT IHRoaWdo IDE5NjM= IGxhbWI= IGZhdm9yZWQ= YWdsZQ== IGNvb2xlcg== IEhvdXJz IEdV IE9yaWdpbg== IGdsaW1wc2U= LS0tLS0tLS0tLS0tLS0tLS0tLS0= TGlt IGNoZWVr IGplYWxvdXM= LSc= IGhhcm5lc3M= IFBvaXNvbg== IGRpc2FiaWxpdGllcw== bmVhcG9saXM= IG91dGxvb2s= IG5vdGlmeQ== IEluZGlhbmFwb2xpcw== IGFicnVwdA== bnNpYw== IGVuY3J5cHRlZA== IGZvcmZl cmVhdGg= IHJhYmI= IGZvdW5kYXRpb25z IGNvbXBsaW1lbnQ= IEludGVydmlldw== IFN3ZQ== IGFkb2xlc2M= IG1vbml0b3Jz IFNhY3JhbWVudG8= IHRpbWVseQ== IGNvbnRlbXBs IHBvc2l0aW9uZWQ= IHBvc3RlcnM= cGhpZXM= aW92YXNjdWxhcg== dm9pZA== IEZpZnRo IGludmVzdGlnYXRpdmU= T1VO IGludGVncmF0ZQ== IElOQw== aXNoYQ== aWJsaW5ncw== IFJlcXVlc3Q= IFJvZHJpZ3Vleg== IHNsaWRlcw== IERY IGZlbWluaXNt IGRhdGFz IGJlbmQ= aXJ1cw== IE5pZ2VyaWE= Rm94 Q2hhbmdl IGFpcnBsYW5l IExhZGVu IHB1YmxpY2l0eQ== aXh0eQ== IGNvbW1pdG1lbnRz IGFnZ3JlZ2F0ZQ== IGRpc3BsYXlpbmc= IEFycm93 IDEyMg== IHJlc3BlY3Rz YW5kcm9pZA== c2l4 IFNoYQ== IHJlc3RvcmF0aW9u KVw= V1M= b3lz IGlsbHVzdHJhdGU= d2l0aG91dA== MTI2 IOKUgg== IHBpY2t1cA== bmVscw== IC4uLi4= Zm9vZA== IEZlbg== KT8= IHBoZW5vbWVuYQ== IGNvbXBhbmlvbnM= IFdyaXRl IHNwaWxs IGJyaWRnZXM= IFVwZGF0ZWQ= IEZv IGluc2VjdHM= QVNISU5HVE9O IHNjYXJl aWx0cg== IFpoYW5n IHNldmVyaXR5 IGluZHVs MTQ5 IENvZmZlZQ== IG5vcm1z IHB1bHNl IEZU IGhvcnJpZmlj IERlc3Ryb3k= IEpTT04= IG9saXZl IGRpc2N1c3Nlcw== UmVzdA== RWxlY3Q= IFdpbm4= IFN1cnZpdg== IEhhaXQ= U3VyZQ== b3BlZA== IHJvb3RlZA== IFNrZQ== IEJyb256ZQ== IGxvbA== RGVmYXVsdA== IGNvbW1vZGl0eQ== cmVkaXRlZA== IGxpYmVydGFyaWFu IGZvcmJpZGRlbg== IGdyYW4= 4Kg= IGxhZw== ZW56 ZHJpdmU= IG1hdGhlbWF0aWNz IHdpcmVz IGNyaXRpY2FsbHk= IGNhcmJvaHlk IENoYW5jZWxsb3I= IEVkZGll IGJhbm5pbmc= IEZyaQ== IGNvbXBsaWNhdGlvbnM= ZXRyaWM= IEJhbmdsYWRlc2g= IGJhbmR3aWR0aA== U3RvcA== IE9yaWdpbmFsbHk= IGhhbGZ3YXk= eW5hc3R5 c2hpbmU= IHRhbGVz cml0aWVz YXZpZXI= IHNwaW5uaW5n IFdITw== IG5laWdoYm91cmhvb2Q= YmFjaA== IGNvbW1lcmNl IFNsZQ== QlU= IGVudHJlcHJlbmV1cg== IHBlY3VsaWFy IENvbW1lbnRz ZnJl MzIw SUNT IGltYWdlcnk= IENhbm9u IEVsZWN0cm9uaWM= c2hvcnQ= KCg= RGln IGNvbW1lbQ== dWNlZA== IGluY2xpbmVk IFN1bW1vbg== IGNsaWZm IE1lZGl0ZXJyYW5lYW4= IHBvZXRyeQ== IHByb3NwZXJpdHk= IFJlY2U= IHBpbGxz bWVtYmVy IGZpbmFsZQ== dW5j IEdpZw== 5L0= IGxvZA== IGJhY2t3YXJk LSs= IEZvcndhcmQ= IHRocmk= c3VyZQ== IHNvYXA= IEZY UkVT IFNleHVhbA== b3Vsb3M= IGZvb2xpc2g= IHJpZ2h0ZW91cw== IGNvZmY= dGVycm9yaXNt dXN0YWlu b3Rlcg== IGFidXNlcw== bmV4dA== IGFidXNpdmU= IHRoZXJlYWZ0ZXI= IHByb2hpYml0aW9u IFNVUA== IGRpcA== IHJpcHBlZA== IGluaGVyaXRlZA== IGJhdHM= c3RydQ== R1Q= IGZsYXdlZA== cGhhYmV0 IGZvZw== ZG9vcnM= IGltYWdpbmc= IGRpZ2l0cw== IEh1bmdhcnk= IGFycm9n IHRlYWNoaW5ncw== IHByb3RvY29scw== IEJhbmtz 4Lg= cG91bmQ= IEN1cnQ= LiIp Li8= IGV4ZW1wdGlvbg== ZW5kaXg= IE11bGw= IGltcHJvdmVz IEdhbWVy ZGltZW5zaW9uYWw= SWNvbg== IE1hcmdhcmV0 U3RhdHVz ZGF0ZXM= IGludGVuZHM= IGRlcGljdA== IHBhcmtlZA== Sm9l IE1hcmluZXM= Y2hub2xvZ3k= ISku IGp1ZGdlZA== IHdlaWdodHM= UmF5 IGFwYXJ0bWVudHM= aGVzdGVy IHJlaW5mb3JjZQ== IG9mZmVuZGVy b2NjdXA= IHNvcmU= ZXB0 IFBIUA== IEJyb3c= IGF1dGhvcml6YXRpb24= IFJpc2s= IERlbGF3YXJl IFFV IG5vdGlmaWNhdGlvbnM= IHN1bmxpZ2h0 IGV4Y2x1ZGU= ZGF0 IG1lc2g= IFN1ZGFu IGJlbG9uZ2Vk IHN1YndheQ== IG5vb24= IEludGVyaW9y b2xpY3M= IExha2Vycw== IGNvZGluZw== RGlzY2xhaW1lcg== Q2FsaWY= T2xk IGRpc2w= Pz8/Pz8= IGNvbmZpcm1z IHJlY3J1aXRtZW50 IGhvbWljaWRl Q29uc2lkZXI= IEplZmZyZXk= ZnR5 fTs= IG9iamVjdGlvbg== ZG9pbmc= IExlbw== V2FudA== IGdsb3c= IENsYXJrZQ== IE5vcm1hbg== IHZlcmlmaWNhdGlvbg== IHBhY2tldA== IEZvcm11bGE= IHBsYWc= ZXN2aWxsZQ== IHNob3V0aW5n IG92 IFJFQw== IEJ1Yg== IG5pbnRo IGVuZXJn IHZhbGlkaXR5 IHVwcw== amFjaw== IG5laWdoYm9yaW5n IE5lYw== ZXdvcmtz IEhhYg== YXJleg== IHNwaW5l IGV2ZW50dWFs IExlYWRlcnM= IENhcm4= IHByb2JhdGlvbg== IHJvbWFuY2U= bXNn IE1lY2hhbmljYWw= RVJZ Um9jaw== IHBhcnRpc2Fu Tm9kZQ== YXNzZXRz bWluZW50 IGZvcmVpZ25lcnM= IHRlc3RpZnk= IFVzdWFsbHk= bG9yZHM= IEdyZW4= IFBvd2VsbA== QklM IHNy IGFkZGljdA== IHNoZWxscw== IHNpZ2g= IFlhbGU= dGVybml0eQ== IDc1MA== RVU= IFJpZmxl IHBhdHJvbg== ZW1h IEJhbm5vbg== YW5pdHk= IHRyb3BpY2Fs IFZJSQ== Y3Jvc3M= RXZlcnl0aGluZw== IElTTw== IGh1bWJsZQ== YXNzaW5n IEZJRw== IHVwZGF0aW5n eXNvbg== IGNhbGNpdW0= IGNvbXBldGVudA== IHN0ZWVyaW5n UHJvdA== IFNZ IEZpbmFscw== IFJ1Zw== MTU5 MTM3 IEdvbGY= IDEyNg== IGFjY29tbW9kYXRpb24= IEh1Z2hlcw== IGFlc3RoZXRpYw== YXJ0aXNhbg== IFR3aWxpZ2h0 IHByaW5jZQ== IEFncmljdWx0dXJl IERpc2Nv IHByZWNlZGVudA== IHR5cGluZw== YXV0aG9yaXplZA== T3B0aW9u IEF1Yg== bGlzaGVz YWNodA== bWFn UGV0ZXI= IFVGTw== bW9udG9u IExpdGg= IGFyb20= IHNlY3VyaW5n IGNvbmZpbmVk cHJpdmF0ZQ== IHN3b3Jkcw== IG1hcmtlcnM= IG1ldGFib2xpYw== c2VsZWN0 IEN1cnNl IE90 Z3Jlc3NpdmU= IGluY3VtYg== IFNhZ2E= IHByaWNlZA== IGNsZWFyYW5jZQ== Q29udGVudA== IGRyaWxsaW5n IG5vdGljZXM= IGJvdXJnZW9pcw== IHZlc3Q= IGNvb2tpZQ== IEd1YXJkaWFucw== cnlz aW55bA== IDEyNA== IHBsYXVzaWJsZQ== b25naA== IE9kaW4= IGNvbmNlcHRpb24= IFl1aw== IEJhZ2hkYWQ= IEZsYWc= QXVzdHJhbA== IElCTQ== IGludGVybmF0aW9uYWxseQ== IFdpa2lMZWFrcw== SUVE IGN5bg== IGNob29zZXM= IFBpbGw= IGNvbWJpbmluZw== IHJhZGk= IE1vaGFtbWVk ZGVmZW5zZQ== YXRjaGluZw== U3ViamVjdA== aWNpZW5jeQ== RnJhbWU= IHsi IGNoZXNz IHRpbWVy MTkw IHRpbg== IG9yZGluYW5jZQ== ZW1ldGVyeQ== IGFjY3VzaW5n IG5vdGljZWFibGU= IGNlbnRyZXM= IGxpZA== IE1pbGxz aW1ndXI= IHpvb20= ZXJnaWM= IGNvbXByZXNzaW9u cHJpbQ== ZmluZA== IHN1cmc= IHBhbmQ= IEtlZQ== IENoYWQ= Y2VsbGVuY2U= b3lsZQ== IHNvY2lhbGlzbQ== IFRyYXZpcw== IE1Ieg== IGd1aWxk QUxMWQ== IFN1YnNjcmliZQ== IFJlbGF0ZWQ= IG9jY3VycmVuY2U= aXRjaGluZw== IGZpY3Rpb25hbA== IGNydXNo IEVB Y29k bWl4 IFRyaXBsZQ== IHJldHJpZXZl IHN0aW11bHVz IHBzeWNoaWF0 IERvb3I= IGhvbW9zZXh1YWxpdHk= IGVsZW1lbnRhcnk= IGNlbGx1bGFy aWRpYW4= IExhdW4= IGludHJpZ3Vpbmc= IGZvYW0= IEJhc3M= aWRp aXRzdQ== IGFzc3VyZQ== IGNvbmdyYXQ= IGJ1c2luZXNzbWFu IEJvb3N0 Y2xvc2U= IGxpZWQ= IHNjaWVuY2Vz IE9tZWdh IEdyYXBoaWNz IDw9 c3Bva2Vu IGNvbm5lY3Rpdml0eQ== U2F0dXJkYXk= IEF2ZW5nZXJz IHRvZ2dsZQ== IGFua2xl IG5hdGlvbmFsaXN0 bW9kZWw= IFBvb2w= b3Bob2JpYQ== VmFy IE1vbnM= YXRvcmllcw== IGFnZ3Jlc3NpdmVseQ== Q2xlYXI= Rm9yZ2U= YWN0ZXJz IGhlZGdl IHBpcGVz IGJsdW50 IHNx IHJlbW90ZWx5 V2Vk YXNlcnM= IHJlZnJpZ2Vy IHRpbGVz IHJlc2N1ZWQ= IGNvbXByaXNlZA== aW5za3k= IG1hbmlm YXZhbmF1Z2g= IHByb2xpZmVy IGFsaWduZWQ= eG1s IHRyaXY= IGNvb3JkaW5hdGlvbg== IFBFUg== IFF1b3Rl MTM0 YmY= IFNhdw== IHRlcm1pbmF0aW9u IDE5MA== IGFkZGl0aW9ucw== IHRyaW8= IHByb2plY3Rpb25z IHBvc2l0aXZlbHk= IGluY2x1c2l2ZQ== IG1lbWJy MTk5MA== b2xkZXI= IHByYWN0aWNlZA== aW5rbGU= QXJjaA== IHN0YXJ0ZXJz YXJpdXM= IGludGVybWVkaWF0ZQ== IEJlbmVm IEtpbGxlcg== IGludGVydmVudGlvbnM= IEtpbA== IEZseWluZw== SW52 IHByZW1hdHVyZQ== IHBzeWNoaWF0cmlj IGluZGll IGNvbGxhcg== IFJhaW5ib3c= YWZp IGRpc3J1cHRpb24= IEZPWA== Y2FzdGluZw== IG1pc2RlbQ== Y3Jv IHdpcGU= YXJkb24= IGJhc3Q= IFRvbW15 IFJlcHJlc2VudGF0aXZl IGJlbGx5 IFBP IEJyZWl0YmFydA== MTMy IG1lc3NhZ2luZw== U2hvdWxk UmVmZXJlbmNlcw== IEdSRQ== aXN0aWNhbA== TFA= IENhdg== IENyYXp5 IGludHVpdGl2ZQ== a2VlcGluZw== IE1vc3M= IGRpc2NvbnRpbg== IE1vZHVsZQ== IHVucmVsYXRlZA== IFByYWN0aWNl IFRyYW5zcG9ydA== IHN0YXRpc3RpY2FsbHk= b3Jucw== IHNpemVk cHU= IGNhZg== IFdvcmxkcw== IFJvZGdlcnM= IEx1bg== IENvbWlj bGl2aW5n IGNhcmVk IGNsaW1iZWQ= KXs= IGNvbnNpc3RlZA== IG1lZGlldmFs Zm9saw== IGhhY2tlZA== IGRpcmU= IEhlcm1pb25l IHRlbmRlZA== Y2VhbnM= RGFuaWVs d2VudA== IGxlZ2lzbGF0b3Jz IHJlZGVz Z2FtZXM= IGdu YW1pbGlhcg== ICsr Z2d5 dGhyZWF0 IG1hZ25ldA== IHBlcmNlaXZl IHppcA== IGluZGljdG1lbnQ= IGNyaXRpcXVl Z2FyZA== IFNhZmU= IENyZWFt IGFkdmVudA== b2Jh IHZvd2Vk b3VzYW5kcw== IHNraQ== IGFib3J0aW9ucw== dWFydA== IHN0dW5uZWQ= IGFkdmFuY2luZw== IGxhY2tlZA== IFwi IHNjaGl6b3BocmVu IGVsZWdhbnQ= IGNvbmZlcmVuY2Vz IGNhbmNlbGVk IEh1ZHNvbg== IEhvcGVmdWxseQ== IHRydW1w IGZyZXF1ZW5jaWVz IG1ldGVvcg== IEp1bmlvcg== IEZsZWV0 IE1hbGNvbG0= IFRvb2xz IC4uLi4uLi4u IGhvYmJ5 IEV1cm9wZWFucw== IDE1MDA= IEludG8= IHN3YXk= IEFwcHJv IENvbXBs Q29tbXVuaXR5 IHRpZGU= IFN1bW1pdA== 5Ls= IGludGVydmFscw== IEV0aGVy IGhhYml0YXQ= IFN0ZXZlbnM= bGlzaGluZw== IERvbWFpbg== IHRyaWdnZXJz IGNoYXNpbmc= IGNoYXJt IEZsb3dlcg== aXRvcmVk IGJsZXNzaW5n IHRleHR1cmVz Rml2ZQ== IGxpcXVvcg== UlA= RklO IDE5NjI= Q0FS VW5rbm93bg== IHJlc2ls IExpbHk= IGFidW5kYW5jZQ== IHByZWRpY3RhYmxl cmFy IGJ1bGxzaGl0 bGVlbg== Y2hldA== TW9y TXVjaA== 5Lk= IGVtcGhhc2l6ZWQ= IGNydXN0 IHByaW1pdGl2ZQ== IGVuam95YWJsZQ== IFBpY3R1cmVz IHRlYW1tYXRl cGxlcg== IFRvbA== IEthbmU= IHN1bW1vbmVk dGh5 cmFtYQ== IEhvbmRh IHJlYWxpemluZw== IHF1aWNrZXI= IGNvbmNlbnRyYXRl Y2xlYXI= IDIxMA== IEVyZG9nYW4= YXJpcw== IHJlc3BvbmRz IEJJ IGVsaWdpYmlsaXR5 IHB1c2hlcw== IElkYWhv IGFnZ3Jhdg== IHJ1aW5z dXJhdGlvbnM= IGJhbnM= IGFuYXQ= c2hhcmU= IGdyaW5k aGlu dW1lbg== IHV0aWxpdGllcw== IFlhbmtlZXM= IGRhdGFiYXNlcw== IERE IGRpc3BsYWNlZA== IGRlcGVuZGVuY2llcw== IHN0aW11bGF0aW9u aHVu aG91c2Vz IFByZXR0eQ== IFJhdmVucw== IFRPREFZ IGFzc29jaWF0ZXM= IHRoZXJhcGU= Y2xlZA== IGRlZXI= IHJlcGFpcnM= cmVudGljZQ== IHJlY2VwdG9ycw== IHJlbWVk IENl IG1hcnJpYWdlcw== IGJhbGxvdHM= IFNvbGRpZXI= IGhpbGFyaW91cw== b3Bs MTM4 IGluaGVyZW50bHk= IGlnbm9yYW50 IGJvdW5jZQ== IEVhc3Rlcg== UkVMQVRFRA== IEN1cnJlbmN5 RVY= 44Oe IExlYWQ= IGRlY2Vhc2Vk QnJpZW4= IE11c2s= SlM= IG1lcmdl aGVhcnRlZA== Y3JlYXQ= bWl0dA== bXVuZA== IOKAiw== IEJhZw== IHByb2plY3Rpb24= IGphdmE= IFN0YW5kYXJkcw== IExlb25hcmQ= IGNvY29udXQ= IFBvcHVsYXRpb24= IHRyYWplY3Q= IGltcGx5 IGN1cmlvc2l0eQ== IERC IEZyZXNo IFBvcg== IGhlYXZpZXI= bmV5cw== Z29tZXJ5 IGRlc2VydmVk IHBocmFzZXM= IEdD IHllYXN0 ZGVzYw== RGVhdGg= IHJlYm9vdA== IG1ldGFkYXRh SUNBTA== IHJlcGF5 IEluZGVwZW5kZW5jZQ== IHN1YnVyYmFu aWNhbHM= IGF0b3A= IGFsbG9jYXRpb24= Z2VuZXJhdGlvbg== IEdyYW0= IG1vaXN0dXJl IHBpbmU= IExpYmVyYWxz IGFpZGVz IHVuZGVyZXN0 IEJlcnJ5 IGNlcmVtb24= Mzcw YXN0cm91cw== IFBpcmF0ZXM= IHRlbnNl IEluZHVzdHJpZXM= IEFwcGVhbHM= IE5lYXI= IOijj+c= IGxvdmVycw== IENBUA== IENyYXc= IGdpYW50cw== IGVmZmljYWN5 RWxlbWVudA== IEJlaGF2aW9y IFRveW90YQ== IGludGVzdA== UHJpdg== QUk= IG1hbmV1dmVy IHBlcmZlY3Rpb24= IGJhbmc= cGFwZXI= cmlsbA== R2Vvcmdl Ym9yZGVy aW50ZXJz IFNldGg= IGNsdWVz IExldmk= IFJldmVudWU= MTQ3 IHZhcG9y IGZvcnR1bmF0ZQ== IHRocmVhdGVucw== IHZldA== IGRlcGVuZGVuY3k= ZXJzZWQ= YXJ0aWNsZQ== IEJsaXp6YXJk IGNobG9y IG1pbnVz IEJpbGxz IGNyeXB0b2N1cnJlbmN5 IG1ldGFib2xpc20= dGVyaW5n IHBlc3RpYw== c3RlcHM= IFRyZWFzdXJl cmFjdGVk IENvbnN0YW50 IHRlbXA= MTM5 IERldGVjdGl2ZQ== dXJhbGx5 IHJlY292ZXJpbmc= IGNvcnRleA== IDE0NA== Y2xvc2Vk IHByZWp1ZGljZQ== YXVudGVk IHN0b3Jtcw== IE5PVw== IG1hY2hpbmVyeQ== QWRkcmVzcw== IGNvbXBlbGxlZA== Mjcw IGRlc3BhaXI= YmFuZQ== IHZlZ2V0YWJsZQ== IGJlZHM= TGVhcm4= IGNvbG9yZnVs IHNwaWtl IG1hcmdpbnM= IHN5bXBhdGh5 IHdvcmtzaG9w IENCQw== U2F0 IGJ1cm5z IEdlbmRlcg== IDEyOQ== IENhYmxl IGRlYnRz IFRoZXJlc2E= IHJlZmxlY3Rpbmc= IGFpcnN0 IHJpbQ== cmFtaWQ= IHdlYWtuZXNzZXM= V3JpdA== b2dnbGU= dGk= IENoYXJnZQ== IHdlaWdoZWQ= ICgu IGxhdWdodGVy IHJvdXRlcg== IERlbW9jcmFjeQ== RGVhcg== IGhhc2h0 IGR5 IGhpbnRz cnVubmluZw== IGZpbmlzaGVz YXJ1cw== TWFzcw== cmVzdWx0 YXNjdXM= IHZpbnRhZ2U= IGNvbnF1 IHdpbGRseQ== YWNpc3Q= IGxpbmd1 IHByb3RhZ29uaXN0 c3Ryb20= dGVlbnRo IFNvbG8= bWFj ZmlsbGVk IHJlbm93bg== aXRpdmVz IG1vdGl2ZQ== IEFudGFy IE1hbm4= IEFkanVzdA== IHJvY2tldHM= IHRyb3VibGluZw== ZWk= IG9yZ2FuaXNtcw== YXNzaXM= Q2hyaXN0aWFu IDE0NQ== IEhhc3M= IHN3YWxs IHdheA== IFN1cnZpdmFs VlM= IE11cmQ= dmQ= c3RhbmRhcmQ= IGRyYWdvbnM= IGFjY2VsZXJhdGlvbg== cmF0aW9uYWw= ZmluYWw= IHBhaXJlZA== IEV0aGVyZXVt IGludGVyZmFjZXM= IHJlc2VudA== IGFydGlmYWN0cw== xas= YXJlbA== IGNvbXBldGl0b3I= IE5pY2hvbGFz IFN1cmZhY2U= Y3Bw IFRvdA== IGVjb25vbWljYWxseQ== IG9yZ2FuaXNlZA== IGVuZm9yY2Vk aW5obw== IHZhcmlldGllcw== IGFiZG9t IEJhaWxleQ== aWRhdg== IFNhbHY= cGFpZA== IGFsdGl0dWRl ZXNzZXJ0 IEd1dGVuYmVyZw== YXJlYQ== b3BvdWxvcw== IHByb2Zlc3NvcnM= aWdncw== IEZhdGU= aGV5 IDMwMDA= RGlzdA== IHR3aW5z Y2lsbA== IE1hcHM= IHRyYXBz IHdlZWQ= IEtpc3M= IHlvZ2E= IHJlY2lwaWVudHM= IFdlc3RtaW5zdGVy IHBvb2xz IFdhbG1hcnQ= MTg4 IFNjaG9vbHM= YXR0YWNr IEFSTQ== cGFyYWdyYXBo V2FybmluZw== amw= IHNlbGZpc2g= YW5jaGV6 IEhlaWdodHM= RnJl IFNvcGg= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t dG1s MzMz IHJhaWRz IHNhdGVsbGl0ZXM= S0VZ IGxhc3Rz 0YI= SW5z IERhbWU= IHVucHJlZGljdA== Ly8v Z2hhaQ== IGFydGlsbGVyeQ== IGNydWlzZQ== IGdlbA== IENhYmluZXQ= IGJsb3dz IEVzcA== IHByb3hpbWl0eQ== b3RoZQ== IFNraWxscw== IFVwcGVy b2Jv IE5EUA== IGVuam95cw== IHJlcGVhdGluZw== IENvbnN0cnVjdGlvbg== IFF1ZXN0aW9ucw== SGlsbGFyeQ== IHVpbnQ= IHByb2Nlc3NvcnM= IEdpYnNvbg== IE11bHRpcGxl cWE= IEJvbQ== IE1pbGVz dmVudGlvbmFs IGh1cnRz c2tpbg== IEFJRFM= IGFkdmlzZXJz IFJvb3Q= IG1ldGhvZG9sb2d5 IERhbGU= IGRldG9u IEtub3dsZWRnZQ== c2VxdWVudGx5 IDEyMQ== IGNvbm5lY3Rz Q3k= IERhbmdlcg== IGNvbnRyaWJ1dG9ycw== IEJlbnQ= IGJyYXNz IEd1bnM= aW50bw== IEZvcnR1bmU= IGJyb2tlcg== YmFsYW5jZQ== IGxlbmd0aHM= IHZpYw== IGF2ZXJhZ2luZw== IGFwcHJvcHJpYXRlbHk= IENhbWVyYQ== IHNhbmR3aWNo IENEQw== IGNvb3JkaW5hdGU= IG5hdmln IGdvb2RuZXNz bGFpbQ== IGJyYWtl IGV4dHJlbWlzdA== IFdha2U= IE1lbmQ= IFRpbnk= IENPTA== IFJG IER1YWw= IFdpbmU= Q2FzZQ== IHJlZmluZWQ= IGxhbXA= TGVhZA== IGJhcHQ= IENhcmI= IFNhZGQ= IE1pbm5lYXBvbGlz UERG RWFybHk= IEhpZGRlbg== SXRz IFRJTUU= IHBhcA== IGNvbW1pc3Npb25lZA== IEZldw== IENvbHRz IEJyZW4= IGJvdGhlcmVk IGxpa2V3aXNl RXhwZXI= IFNjaHc= Y3J5 bm4= IE1pdGNo aW1vbg== TUc= Ym0= VU1Q cmF5cw== IHJlZ2lzdHJ5 IDI3MA== YWNoaW5l cmVsbGE= YW50aW5n MDAwMDA= IHJ1aW5lZA== c3BvdA== IHRh IG1heGltaXpl IGluY29udmVu RGVhZA== SHVtYW4= RW5hYmxlZA== IE1hcmll IGNoaWxs IFBhcmFkaXNl IHN0YXJyaW5n IExhdGlubw== IFByb3RvY29s IEVWRVI= IHN1cHBsaWVycw== bWVzc2FnZQ== IEJyb2Nr IHNlcnVt 4paI4paI4paI4paI IGVuY29tcA== IGFtYml0aW9u dWVzZQ== IGFycm93cw== QW5kcmV3 IGFudGVubmE= IDE5NjE= IEJhcms= IGJvb2w= 44Kq IFN0b3JhZ2U= IHJhaWx3YXk= IHRvdWdoZXI= IENhZA== IHdhc2hpbmc= UHk= J10= ZW1iZWQ= IE1lbXBoaXM= YWNrbGU= IGZhbW91c2x5 IEZvcnR1bmF0ZWx5 b3ZpZXM= IG1pbmRzZXQ= IHNuZWFr IERo UkFX IFNpbXBzb24= IGxpdmVzdA== IGxhbmRtYXJr IGNlbWVudA== TG93 IHRocmlsbGVk IENvdXJzZQ== aW5lbA== IGNodWNr aWRhdGU= Z2xvYmFs IHdoaXQ= IO+/vQ== YWRheXM= c2tp IFNW IHZpcnVzZXM= MzA2 IFJlc3BvbnM= IHRoZWF0ZXJz IEJyYW5jaA== IEdlbmV2YQ== IE1L IHVuYmVsaWV2 IGNvbW11bmlzdA== T3JpZ2luYWw= IFJlY2VpdmVk IFRyYW5zZmVy IEFyZw== SW5wdXQ= IFN0cmF0ZWd5 IHBhbGFjZQ== dGhlbmluZw== RHJp IHNlbnRlbmNpbmc= dW1ibmFpbA== IHBpbnM= cmVjeQ== IHNpYmxpbmdz R2V0dGluZw== IEJV IE5vcnRod2VzdA== IHByb2xvbmdlZA== IFNha3VyYQ== Q29tYg== IEJvdXI= IGluYWRlcXVhdGU= IEthc2g= IHVzZXJuYW1l IEltcHJvdmU= IGJhdHRsaW5n IE1BQw== IGN1cnJpY3VsdW0= IHNvZGE= IENhbm5vbg== IHNlbnNpYmxl c3BvbnM= RGVjZW1iZXI= IHdpY2tlZA== IFBlbmd1 IGRpY3RhdG9ycw== IEhlYXJ0cw== b2d5bg== IHNpbWlsYXJpdGllcw== IFN0YXRz IGhvbGxvdw== aXRhdGlvbnM= Ijpb IGhvdmVy IExpc3Rlbg== c2No U3VuZA== IGNhZA== IFBhcmtz IGx1cg== IGh5cGU= IExlbQ== TkFNRQ== aXN1cmU= RnJpZGF5 IHNob290cw== IGNsb3Nlcw== IGRi IFJpZGdl IERpZmZlcmVudA== IHJlcGxpZXM= IEJyb2Fkd2F5 b3BlcnM= IGludG9sZXI= IFpldXM= YWtlc3Bl IHByb3ByaWV0YXJ5 IHJlcXVlc3Rpbmc= IGNvbnRyb2xsZXJz IE1JTg== aW1lZGlh YmVjY2E= IGV4cGFucw== IG9pbHM= Qm90 IENoYW5k IHByaW50ZXI= IHRvcHBlZA== IFBPTA== IEVhcmxpZXI= U29jaWFs YXZpbg== IGRlY3JlYXNlcw== IFNlYg== IHNwZWNpZmljYXRpb25z IEJsYXN0 IEt1cnQ= IGZyZWVs QnJvd24= IGRpbGln cm9l IFByb2JsZW0= IFF1YWQ= IGRlY2VudHJhbA== IFZlY3Rvcg== YW51dA== IHBsdWdpbnM= IEdyZWdvcnk= IGZ1Y2tlZA== ZWxpbmVz IEFtYmFzc2Fkb3I= dGFrZQ== IGNsZWFucw== b25neWFuZw== QW5vbnltb3Vz c3Rybw== In0= YWxpbmU= IE9kZA== IEV1Zw== MjE2 IGJvaWw= IFBvd2Vycw== IG51cnNlcw== T2J2aW91c2x5 IFRlY2huaWNhbA== IGV4Y2VlZGVk T1JT IGV4dHJlbWlzdHM= IHRyYWNlcw== ZXhwbA== IGNvbXI= IFNhY2g= KS8= IG1hc2tz IHNjaQ== Qm9u IHJlZ3Jlc3Npb24= d2VnaWFu IGFkdmlzb3I= aXR1cmVz IFZv ZXhhbXBsZQ== IEluc3RydWN0 IHNpZWdl IHJlZHVjdGlvbnM= cHRy IHN0YXR1dG9yeQ== IHJlbW92ZXM= IHB1Y2s= cmVkaXRz IGJlZQ== IHNhbGFk IHByb21vdGlvbnM= IEpvc2h1YQ== d2l0aHN0YW5kaW5n RVRI IENoYQ== aW11cw== IGV4cGVuZGl0dXJl YXVudGluZw== IGRlbGlnaHRlZA== IDE1NQ== YmVo IGNhcnBldA== IFNwYXJ0 IGp1bmdsZQ== bGlzdHM= IGJ1bGx5aW5n IE5vYmVs IEdsZW4= IHJlZmVyZW5jZWQ= IGludHJvZHVjZXM= c2Vpbg== IGNob3BwZWQ= Z2xhc3M= IFdyZXN0 IG5ldXRyYWxpdHk= IOKZ IGludmVzdGlnYXRvcg== IHNoZWx2ZXM= IHVuY29uc3RpdHV0aW9uYWw= IHJlcHJvZHVjdGlvbg== IG1lcmNoYW50 bWlh IG1ldHJpY3M= IGV4cGxvc2l2ZXM= IFNvbmlh IGJvZGlseQ== IHRoaWNrbmVzcw== IHByZWRvbWluYW50bHk= IEFiaWxpdHk= IG1vbml0b3JlZA== SUNI IF0u IE1hcnRpbmV6 IHZpc2liaWxpdHk= IHF1ZXJpZXM= IGdlbm9jaWRl IFdhcmZhcmU= UXVlcnk= IHN0dWRpb3M= IGVtYnJ5 IGNvcnJpZG9y IGNsZWFuZWQ= Y29tcGxldGU= IE1I IGVucm9sbG1lbnQ= SU5HUw== IGltcGFjdGVk IGRpc2FzdHJvdXM= IFl1bg== IENsYWlyZQ== IEJhc2ljYWxseQ== eXQ= dXN0ZXJpdHk= IGluZGlyZWN0bHk= d2lr IGRvZA== IENhcnI= IGFtcA== IHByb2hpYml0 IEluaXRpYWw= IFJk aWpp IGVkdWNhdGU= Y29ybg== aW90dA== IEJlYXV0eQ== IGRldGVjdGl2ZQ== IENvbm4= c2luY2U= IHN0YWdnZXI= IG9iZXNl IGJyZWU= b2xvZ2lj aXNzZQ== d2Fsa2Vy IGJsYWRlcw== IGxhd2Z1bA== ZnVuYw== IEJlaGluZA== IGFwcGV0aXRl ICgq IHRlbm5pcw== IG9mZnNwcmluZw== IGpldHM= IHN0cnVjdHVyZWQ= IGFmb3JlbWVudGlvbmVk Tm92 IHNjYWxpbmc= ZmlsbA== IHN0ZXc= IGN1cmI= IFN0ZXBoYW4= ZWRJbg== U0Y= b2JpYw== 6a2U b3Vn IE1N IGdlbmV0aWNhbGx5 b3Bleg== MTM2 IHVtYg== YW5jZXJz IGNvaG9ydA== IG1lcmNoYW5kaXNl IGltcG9zaW5n IExlZ2lzbGF0dXJl IEFyY2hpdmU= aXZpYQ== IE5hdmFs IG9mZmVuY2Vz IG1pcmFjbGU= IHNuYXBwZWQ= IGZvZXM= IGV4dGVuc2l2ZWx5 IFJhZg== IGNhdGVy ZWRpZW5jZQ== S2l0 IEJpbg== IHJlY29tbWVuZHM= IENpdGllcw== IHJpZ2lk IFJFQUQ= IE5vYmxl IFRpYW4= IGNlcnRpZmljYXRlcw== YW50aXM= b2lsZXI= IEJ1ZGRoaXN0 ZGlk IHN1cnZleWVk IGRvd253YXJk IHByaW50cw== IE1vdGlvbg== cm9uaWNz IFNhbnM= b3NzaWJseQ== dWN0aW9ucw== IGNvbG9uaWVz IERhbmlzaA== dW5pdA== IHNwb2ls IGFkdmlzb3J5 YmVycmllcw== UGxhbg== IHNwZWNpZmljYXRpb24= b3BoZXJz IFJlc291cmNl IHNoaXJ0cw== cHJpc2luZ2x5 Y29tbXVuaWNhdGlvbnM= IHRyaXZpYWw= IG1lbnRpb25pbmc= aXNleHVhbA== IHN1cHBsZW1lbnRz IHN1cGVydmlzaW9u QlA= dm9y IHdpdA== IGNvb2xkb3du IHBsYWludGlmZg== IFJldmlld3M= IFNyaQ== IE1pbnQ= IFN1Z2Fy IGFmdGVyd2FyZA== IFByaWVzdA== IEludmVzdG1lbnQ= b2dlbmU= IFRha2luZw== IHN0cmV0Y2hpbmc= IGluZmxhbW1hdGlvbg== IFRlaHJhbg== IGxpbmluZw== IGZyZWV6aW5n IEVudGl0eQ== IGluc3BpcmluZw== c3BlY2lhbA== cHJpY2U= IHN1ZQ== IFBvcnRlcg== b3VuZ2U= RVRB IERlcmVr IEx1aXM= dW8= eW1waA== IGV4dGVyaW9y aWhpbA== IEFzaGxleQ== aW5hdG9y IG51dHJpZW50cw== IFRocm9uZXM= IGZpbmFuY2Vz IEluc3BlY3Q= IHNwZWNpYWxseQ== IFJlcXVpcmVk IFBUUw== IFZpb2xlbmNl b2ludGVk c2hvdHM= IGV4Y2VycHQ= Y29vbg== SU5T IEdyaQ== IHJlY29nbmlzZWQ= V2Vlaw== WW91bmc= IHZvbQ== aXNsZQ== IEN1cnJ5 IEJ1ZGRo IG5vdGVib29r IGR1cmFibGU= Lz8= IEdhZA== IFB1cHA= IGZvcmdpdmU= cGFyaw== IHBlcnNvbmFsaXRpZXM= YW5hbHlzaXM= Y2xhbWF0aW9u IGVsZXZhdG9y IHdhcmVob3VzZQ== IFJvbGU= dW5u IGlsbHVzdHJhdGlvbg== IFNjYW4= IGF0bW9zcGhlcmlj SW1wb3J0 QU5D cmljdGVk ZnU= MDEw IGFyY2hl IHJld2FyZGVk YWtlc3BlYXJl IGludGVybmFsbHk= IFJCSQ== YWxrZXI= IGVsZXBoYW50 b3dpdHo= IFBpenph IGJpcGFydGlzYW4= w6lz IHNsb3dlZA== IFN0YXJr IG92ZXJyaWRl T1VT IDMyMA== dW5kcmVkcw== IERlY2s= IENlbnN1cw== YmVl MTQ2 b3Rvcg== IGlw IHVi b2NhdGlvbnM= IEJ1dHRvbg== cmljZQ== IGNyaXBw ZmZm IG9yaWdpbmF0ZWQ= IG92ZXJ3aGVsbWVk YXBwYQ== IGZvcmVtb3N0 4oCR IExFRw== cmVsZWFzZQ== ZWF0dXJlZA== YXRjaGVz IHJlcHM= IGxlbmRpbmc= IFJlZmVyZW5jZQ== IENsaWVudA== MTY1 dmVudGg= Q29tcGxldGU= IFBhdHJvbA== IHN3b3Ju Y2Ft IHNodXR0bGU= IFJhbHBo IGhvbWV0b3du LSw= b25hbA== IEJQ 5Y8= IHBlcnN1YWRl IEFsZXhhbmQ= IGNvbWJpbmVz IHZpdmlk IExhZw== IGVuY29kaW5n IHNhbHZhdGlvbg== d2Vu IFJlY292ZXJ5 aXlh VW5pdmVyc2l0eQ== IEJpZGVu IGJ1ZGdldHM= IFRleGFucw== Zml0cw== IGhvbm9yZWQ= IHB5dGhvbg== VEQ= IyMj Y2xvbmU= IGJsaW5r IExpcXVpZA== IHVuZW1wbG95ZWQ= IGNsYXNoZXM= IENvdW5zZWw= IGRpcmVjdGluZw== IHB1bmN0 IEZhbGNvbnM= IHNoYXJr IERhbWFzY3Vz IGplYW5z IGVtYmFyaw== IHNlaXpl IHVwd2FyZHM= Mjgw IEV6 IEFueXRoaW5n IGV4b3RpYw== bG93ZXI= IENyZWF0b3I= IFVt IHN1YnVyYnM= YmVyZ2Vy IFdlbmQ= IG1pbnQ= IFhY IERybw== IHN1ZmZlcnM= IGhlcmI= dHJlZQ== IGZyYWdpbGU= IGZsb29kZWQ= IEFsY29ob2w= b2xlYW4= bnlkZXI= IEtP RnJhbQ== IDEzNg== IG93ZWQ= IE1lbGVl IEhhc2g= IHdoaXNr IHN1ZG8= cnI= UXVpY2s= YXBwcm8= IGlp IEV4YW1wbGVz aGVl IHByb21vdGVz cGVyYXR1cmU= a2Fy IEhvbm9y IHNvZGl1bQ== IExpZg== cm9zc28= aW50ZW5kZW50 IGNvcnJlc3BvbmRlbnQ= Rm91bmQ= c2VjcmV0 IGlkZW50aWZpZXM= YWduZQ== IGxvdQ== IFBQ IGNvaW5jaWRlbmNl bW92ZQ== IG1pbGl0aWE= IGluZmlsdHI= IFByaW1hcnk= IHBpdGNoaW5n IEli IEdPT0Q= 44K4 IFdpemFyZHM= aXJhbA== IFZlbnVz UlI= IOKAlQ== IENhc2V5 IHNhZGx5 IGFkbWlyZQ== IGVtYmFycmFzc2Vk Y2I= TWVs IHR1YmVz IGJlYXV0aWZ1bGx5 IFF1ZWVuc2xhbmQ= QmVsb3c= cmV6 cXVldA== cGxlYXNhbnQ= IMKr Q2FtcA== IGRlY2lzaXZl MTk5OA== IExhbWI= dXR0b24= aG4= IEphZ3U= YXVuZGVy IENvcmQ= IGNsZXJr IGNhZmZl IHdpcGVk IHJlaW0= IE1vdW50YWlucw== IGltcHJpc29uZWQ= IGRldmVsb3Bz IFByYQ== IG1vZGVsaW5n QW55b25l YW5jZWw= IFNpdA== IHNoaWVsZHM= IGxhd24= IGNhcmRpb3Zhc2N1bGFy IGRlbW9uc3RyYXRpbmc= IHBhcnNl IElzcmFlbGlz IGV1cm9z MTQz IGdsb3Jpb3Vz aW5za2k= ZWNk IGNvbmRpdGlvbmluZw== IGhlbHBsZXNz IG1pY3Jvc2M= IEhhcmJvcg== IHN0YWtlcw== IDI2MA== IHVuZXF1 IEZsb3lk IGRhbXA= IGFwcGFyYXR1cw== IExhd3M= IGNvdW50ZXJz IGluZHVjZQ== YXRhYmxl IEFobWVk IHNsYW0= Tm92ZW1iZXI= IHBlcnNpc3Q= IGltbWluZW50 w6Fu IHNocmVk IHBoYXNlcw== IEVkbW9udG9u IEFybXN0cm9uZw== IE1lZXQ= IEtpdHR5 0YA= Y2lyYw== IEFkdWx0 IGFyb3Nl IFhlbg== RGFu Z293 IHN1cGVyZg== IEFkbWly IGVuZHVyZQ== IGtleXdvcmQ= eXJ1cw== IHlhcm4= IHBhdGh3YXk= IEhvcGtpbnM= bWlkdA== IGNlbnNvcnNoaXA= ZGVwZW5kZW50 IGluc3RydWN0b3I= U291cmNlcw== IHRvZQ== IGJhbGxvb24= Tm9i IHN3ZWFy IENhc3Rybw== IGdsb3Nz IEthdmFuYXVnaA== IHJlbWFya2FibHk= UGhvdG9z IE5vbQ== IFNvdXRoZWFzdA== eWVycw== IHZhbGlkYXRpb24= IGNhbm5vbg== IFZpY3Rvcnk= IFBpZXJyZQ== IGNhdXRpb3Vz QXVkaW8= IGZldGNo IEdpZnQ= IEh5cA== IHJlbWVkeQ== WkU= IHNjZW50 IGJlYXJk IFJ1dA== LSI= IHBhdGVudHM= SHk= IHVuanVzdA== IHBvdGF0bw== IGZvcnRoY29taW5n IGNoZWY= IFJpZnQ= YWZmZQ== IFJPTQ== IExhdW5jaA== IHBhZHM= IE5lbw== IG9uc2V0 IHNxdWVlemU= c2FmZQ== IHByZWZpeA== IFRN IE5lYXJseQ== IENsaW5pY2Fs IE1lbnRhbA== b3RpYXRpb24= IFVuaWM= YW50cnk= IENpcg== IGVwaXQ= w6Y= IGV4dHJhY3RlZA== dmVyc2VseQ== cmlhZA== IHN0cmFpbnM= IHRvcHM= IHBvZW0= IFJhbmR5 IE1hcGxl VEhFUg== dXBpdGVy IFNTRA== muk= IHVuY29u cGVyaW5n IHNsZXB0 aW5lcnM= IHVuZGVyd2F0ZXI= IEV2aWRlbmNl Z29uZQ== MjA1 IGhpc3RvcmlhbnM= IHN5bnRoZXNpcw== IGZyb2c= YmFza2V0YmFsbA== IHZpYnJhbnQ= IHN1Ym9yZA== IDM2NQ== IERpYWw= IGNvb3BlcmF0ZQ== SEFIQQ== IGdyZWV0ZWQ= MTU4 IGpheno= IGludG94 IFdhbGtpbmc= IHN1cGVydmlzb3I= IEZ1c2lvbg== IE1lcmNlZGVz c2VuZA== SGFt c2Q= bmw= IHRvdXJz IEZJRkE= IGN1bHA= Z2Q= MzA0 IHBsZWFz IGlsbHVzdHJhdGVz IENvbG9tYmlh IGhpZ2hsaWdodGluZw== IFN1bW1hcnk= IGV4cG9zaW5n IERydQ== IGlyb255 cml0aW9uYWw= IENhcnJvbGw= IEVsbGlz UGljdA== IFJhcHQ= IGFkYXB0ZXI= IHVubQ== IGNvcnBzZQ== IGNlbGVicml0aWVz RGVu YXR1bQ== IEFwb2NhbHlwc2U= IFdhZw== bGluaW5n IGhvcm1vbmVz UnVi IFhp IFZhdWx0cw== MjA4 YWxreXJpZQ== aW5vc2F1cg== IGZlZWRz dml0eQ== IGRlZmVhdGluZw== V2FpdA== IGVtcGhhc2l6ZQ== IFN0ZWVsZXJz eXJpbnRo bGV5cw== IFdoZW5ldmVy Q3VycmVudGx5 IENsb2Nr IGNvbGxlY3RpdmVseQ== YW55b24= IEpQ IG1lbnRhbGl0eQ== IGRvd25sb2Fkcw== IHN1cnJvdW5kaW5ncw== IEJhcm5lcw== IGZsYWdzaGlw IGluZGljYXRvcnM= IGdyYXBw SmFudWFyeQ== IEVsZW1lbnRhbA== IEF0aGVuYQ== aWJhbA== IHNpZ2h0cw== IGNhcGl0YQ== IFRyZWF0eQ== IHZvaWNlZA== IEdheg== bGV0dGU= IHlh IGV4cGlyZWQ= TGVnZW5k SG90 bmF0dXJl IHVuc3RhYmxl IDI4MA== w7o= Q29tbWVudA== QUxF IHF1ZXN0cw== IGhhbmRsZXI= bmlz IHZlcnNhdGlsZQ== IGNvbmNlYWw= ZW5nZWFuY2U= IEludGVyYWN0aXZl IG9ic2Vzc2Vk IERvZ3M= IGNyYWNrZWQ= U291bmQ= c3Y= IER5bGFu cm9hZHM= Zng= IENhdGhvbGljcw== IEhhZw== IHNsYW1tZWQ= IGdsb3dpbmc= c2FsZQ== IHRpc3N1ZXM= IENoaQ== bmVl IGNoZXI= c2lj dXJyZWN0aW9u IGJhY29u dWxhdG9yeQ== KS4i IGlycmVndWxhcg== Rk9STQ== YXNzZWQ= IGludGVudGlvbmFs IGNvbXBlbnNhdGU= IFNwZWFraW5n IFNldHM= MTUz IGNvbnZlbnRpb25z YmFuZHM= ZW1hZGU= IGVjYw== IFdpbnN0b24= IEFzc2Fzc2lu IEJlbGdpYW4= IGRlcGVuZGVuY2U= IG5pY2hl IGJhcms= IEpheno= IGRpc2FkdmFudGFnZQ== IGdhc29saW5l IDE2NQ== 55qE ZXNzYQ== bW9kdWxl YW5ndWxhcg== T1k= IFRyZWF0bWVudA== aXRhcw== b2xhdGlvbg== IEFybm9sZA== IGZldWQ= IE5lc3Q= IHRoZWF0cmU= ZXdhdGVy IG1pbm9ycw== b2xpY3k= IEhhdmVu ZGl2aXNpb24= IHRydW5r RmFy IFB1bGw= IGNhcHR1cmluZw== IDE4MDA= IFRlZW4= IGV4ZW1wbA== IGNsaW5pY3M= IEJ1cmc= IHN1YnN0aXQ= IHBheWxvYWQ= IExhdg== IFRyb3k= IFdpdG5lc3M= IGZyYWdtZW50cw== IHBhc3N3b3Jkcw== IGdvc3BlbA== IEdpbg== IHRlbmFudHM= b2xpdGg= U2l4 UHJldmlvdXM= IEFnZXM= IERhcndpbg== IGJsYXQ= IGVtcGF0aHk= c21pdGg= YmFn IEVjaG8= IENhbWI= IE1hZGQ= IEJvbw== IHJlZGU= IEJ1cm5pbmc= IHNtb290aGx5 IEFkcmlhbg== IFZhbXBpcmU= IE1vbnN0ZXJz c3RlYW0= U3R5bGU= TWE= cmVh IER3YXI= YWx5c3Q= dXJzb3I= IGVsaW1pbmF0aW9u IGNyeXB0bw== Y2h0 IEV0ZXJuYWw= 4oCmXQ== IFNvcmNl SWxs TkVS IHVo Q29uY2x1c2lvbg== d2FnZQ== IHJlc3Bpcg== IHJlbWluaXM= aGV0aWNhbA== IGd5 IHV0aWxpemVk aWNpZGFs IDE5MDA= IGh1bnRlcnM= IFN3YW4= IFJlYWN0 IHZpc2l0b3I= IFRoYW5rc2dpdmluZw== MzA4 UG9zdHM= IGhpcHM= MTk5Nw== b21lcnM= IGtub2NraW5n IFZlaGljbGU= IHRpbA== IDEzOA== IG1p IEludmVzdGlnYXRpb24= IEtlbnlh IGNhc2lubw== IG1vdGl2ZXM= IHJlZ2Fpbg== cmV4 IHdlZWtlbmRz IHN0YWJiZWQ= Ym9ybw== IGV4cGxvaXRlZA== IEhBVkU= IFRlbGV2aXNpb24= Y29jaw== IHByZXBhcmF0aW9ucw== IGVuZGVhdg== IFJlbW90ZQ== IE1ha2Vy IFByb2R1 IEV2YW4= IGluZm9ybWF0aW9uYWw= IExvdWlzdmlsbGU= MTU0 IERyZWFtcw== IHBsb3Rz IFJ1bm5lcg== IGh1cnRpbmc= IGFjYWRlbXk= IE1vbnRnb21lcnk= bm0= IExhbmM= IEFseg== MjEw ZWxvbmc= IHJldGFpbGVy IGFyaXNpbmc= IHJlYmVsbGlvbg== IGJsb25kZQ== cGxheWVk IGluc3RydW1lbnRhbA== Q3Jvc3M= IHJldGVudGlvbg== IHRoZXJhcGV1dGlj IHNlYXM= IGluZmFudHJ5 IENsaW50 IHByb21wdGluZw== IGJpdGNo IHN0ZW1z IEtyYQ== IHRoZXNpcw== IEJvZw== cnVlZA== IGtpbmdz IGNsYXk= aWZpY2VudA== IFlFUw== IFRoaW5n IEN1YnM= dmV5YXJk ZWxzaA== aW5hcmlseQ== IEV5 IFJvbGxpbmc= IGV2b2x2aW5n SW5kaWE= IHJlY29nbml6ZXM= IGdyYWR1YXRpb24= aXNlcnM= IGZlcnRpbGl0eQ== IE1pbGFu Q29tbWFuZA== IGJveGluZw== IDE5NDM= IGdsdXRlbg== IEVtaXI= IGlkb2w= IGNvbmNlaXZlZA== IENyZWF0aW9u TWVyaXQ= dWRkeQ== dXNzaW9ucw== IExpZXV0ZW5hbnQ= aWV0YWw= IHVuY2hhbmdlZA== IFNjYWxl IENyaW1lYQ== YmFsbHM= YXRvcmlhbA== IGRlcHRocw== IGVtcGlyaWNhbA== IHRyYW5zbQ== IHVuc2FmZQ== bWlzc2libGU= Y29tZm9ydA== MTU2 IG1lY2hhbmlj MDAy bGlucw== IHNtb2tlZA== UG9z IHNsb3dpbmc= IGxhdg== VGV4YXM= IGNoZWF0aW5n IE1ldHJvcG9saXRhbg== ZXRoeWw= IGRpc2NvdmVyaW5n YXNzZQ== IHBlbmNpbA== IFB5b25neWFuZw== IGNsb3NldA== IFNoZWV0 IEVudHJ5 b3VzdGlj IG15c3Q= ZXJhdGU= YXJpYXQ= IG1pbmVyYWxz IG11c2ljaWFu IFB1bA== IE1heg== MjQ5 IHBlcm1pc3Npb25z IGl2 ZW5hcnk= aWNrZXJz IEJpbmc= aGVh ZW5hYmxl IGdyaWV2 IGFzc2VydGVk IENvbG9uZWw= IGFmZmlkYXY= d28= IHNlYXRlZA== IFJpZGU= IHBhaW50aW5ncw== IFBpeA== IDEzNw== aXNoaQ== dW1iYWk= Z290dGVu IEVhcmw= IGlubmluZw== IGNlbnN1cw== IHRyYXZlbGxlZA== IENvbnN1bHQ= MTg1 YmluZA== IHNpbXBsaWNpdHk= IG92ZXJsb29rZWQ= IEhlbHBmdWw= IG1vbmtleQ== IG92ZXJ3aGVsbWluZ2x5 Qmxvb2Q= IEZsaW50 IEphbWE= IFByZXNlbnQ= IFJhZ2U= IFRB cHRpdmU= IHR1cm5vdXQ= d2FsZA== IERvbHBoaW5z IFZQTg== IG9uaW9u IGNyYWZ0aW5n bW1h IE1lcmN1cnk= IGFycmFuZ2U= IGFsZXJ0cw== IE9U emJvbGxhaA== IGdhc2Vz IFJpY2hhcmRzb24= c2Fs bGFy IGZyb3N0 IGxvd2VyaW5n IGFjY2xhaW0= IHN0YXJ0dXBz IEdhaW4= ZXNzbWVudA== IGd1YXJkaWFu 5Lq6 IFBpZQ== IExpbmtz IG1lcml0cw== IGF3YWtl IHBhcmVudGFs IGV4Y2VlZHM= IGlkbGU= IFBpbG90 IGVCYXk= IEFjY2VwdA== aXBlZw== Q2Ft IEtvdA== IHRyYWRlcnM= b2xpdGljcw== dW5rZXI= IFBhbGU= b3Np YW5tYXI= IDE5NDc= IEZlbGw= ZXN0aWFs aXRhdGluZw== R0Y= IFNy aWZ0ZWQ= IGNvbm5lY3Rvcg== IEJvbmU= aWxsZXM= MjYw aG1h IG92ZXJsYXA= IEdpdEh1Yg== IGNsZWFuZXI= IEJhcHRpc3Q= IFdBUw== IGx1bmdz 0YE= IEJVVA== IGNpdGU= IHBpdGNoZWQ= cmVhdG1lbnQ= IHRyb3BoaWVz IE51 Mzg2 IFByaWRl IGF0dGVuZGVlcw== W10= MTc5 IHNwYXRpYWw= IHByaXplcw== IFJlbGlnaW9u IHNob3djYXNl IENhdGVnb3J5 dmlkaWE= VGFyZ2V0 UHJvcGVydHk= Pyw= IGZ1c2lvbg== cGll IFVDTEE= IHNvdW5kdHJhY2s= IHByaW5jZXNz IENhdmFs c2hvdWxk IGxpbWJz QmFja2dyb3VuZA== IGxvbmVseQ== IGNvcmVz IFRhaWw= c2hlZXQ= IDEzMg== UmE= 44Kr IEJvbHQ= IGJvb2tlZA== IGFkbWluaXN0ZXI= IGVxdWFscw== d3k= IG9ic2VydmluZw== IEJhcm9u IEFkb2Jl IHZpcmdpbg== IFNvY2lhbGlzdA== TW92ZQ== Z2hhemk= IExpbmRh MjEy IGJyZXdpbmc= IG1lcmNoYW50cw== YnVyc2U= IGRpdm9y IG1ldGFscw== IE5lcg== IHN1bXM= IEVuZW15 IGVudmlzaW9u IGdyYW50aW5n IEhvbmV5 IFNreXJpbQ== IHNvY2lv Z3JhZGVk IHNlbGVjdGl2ZQ== V0FTSElOR1RPTg== IDE5NDg= IFNpcml1cw== IEdyb3Nz YWN0aXZpdHk= IEl2YW4= IGZ1cmlvdXM= QlNE IFByZXZpb3Vz IHJlc3BvbnNpdmU= IGNoYXJpdGFibGU= IGxlYW5pbmc= IFBldw== IHZpb2xhdGVz XFxcXFxcXFw= IENvbWluZw== d2lyZQ== IHBvZXQ= IHJlc29sdXRpb25z Y29tbWFuZA== IFBvcnR1Z3Vlc2U= IG5pY2tuYW1l IGRlYWY= RmVicnVhcnk= IHJlY29nbmlzZQ== IGVudGlyZXR5 IHNlYXNvbmFs cGxhY2Vk IFRlbGVncmFwaA== IG1pY3JvcGhvbmU= b3VyaW5n IGdyYWlucw== IGdvdmVybmVk IHBvc3Rw IFdhdGVycw== aW5lbWVudA== IHVuZG9jdW1lbnRlZA== IENvbWNhc3Q= IGZveA== IGFzc2F1bHRz cmVvbg== bWFueQ== IEplbmtpbnM= IEFueXdheQ== IGFzc2Vzc21lbnRz IGRvd25z IE1vdXNl IHN1cGVyYg== a3Q= IERvdw== IHRheGF0aW9u NDAx IHNtaWxlcw== IHVuZGVydGFrZW4= IGV4aA== IGVudGh1c2lhc3RpYw== IHR3ZW50 IGdvdmVybm1lbnRhbA== IGF1dG9ub215 IFRlY2hub2xvZ2llcw== IENoYWlu IHByZXZhbGVudA== ZmI= IG5pY290aW5l b2dyYW0= am9i IGF3YWl0aW5n IE1lbnU= IGRlcHV0aWVz a292 aXNob3Bz QnV0dG9u IFNoYW5naGFp IGRpZXNlbA== IER1Y2s= Unlhbg== IFBDcw== TkY= anVyeQ== ZW50ZQ== IGluYWNjdXJhdGU= ZWRkeQ== V2hhdGV2ZXI= IHNob3dj IE5hZA== b2R1cw== ZXRy IHBsYWludGlmZnM= IFdPUg== IEFzc2FuZ2U= IHByaXZhdA== IHByZW1pdW1z IHRhbQ== VVJM IGVsaXRlcw== IFJhbmdlcg== b3R0ZW5oYW0= IEhvZmY= IEF0aGVucw== IGRlZmluaXRl IHNpZ2hlZA== IGV2ZW5seQ== MjEx IEFtYmVy YWtpYQ== IG1haWxpbmc= IGNyYXNoaW5n IENvbmZlZGVyYXRl cnVnZ2Vk V2Fs IERlcHRocw== IGp1dmVuaWxl IHJlYWN0b3I= SW50cm9kdWN0aW9u IERlbHV4ZQ== MTk5NQ== IFNhbmNoZXo= IE1lYWQ= aXZhYmxl Oi0= IFBsYW5uaW5n IFRyYXA= cXVpbg== IFByb3RlY3Q= dmVyZWQ= SW5mb3JtYXRpb24= IGtpZG5leQ== aW5uYW1vbg== bGFz IHBvbGljaW5n IHRvbGVyYXRl IFFp IGJpYXNlZA== Rm9ydA== IEtp c2F2ZQ== IHByaXZpbGVnZWQ= IGJlYXN0cw== IEdsYXM= IENpbmVt IGNvbWViYWNr U3VuZGF5 IGV4dGluY3Rpb24= aG9wcw== IHRyYW5zbWl0 IGRvdWJsZXM= IEZsYXQ= MTY3 IGRpc3B1dGVk IGluanVzdGljZQ== Zm9v VmljdA== cm9sZXVt IEp1bGll Q29udGV4dA== IFJhcml0eQ== aXNzdWU= Q29tcG9uZW50 IGNvdW5zZWxpbmc= YW5uZQ== ZGFyaw== IG9iamVjdGlvbnM= dWlsdA== IGdhc3Q= IHBsYWM= IHVudXNlZA== 44OH IFRyaWFs IEphcw== aGVkcmFs b2Ji IHRlbXBvcmFs IFBSTw== IE5X IEFubml2ZXJzYXJ5 TGFyZ2U= IHRoZXJt IGRhdmlk IHN5c3RlbWlj IFNoaXI= bXV0 IE5lcHQ= YWRkcmVzcw== IHNjYW5uaW5n IHVuZGVyc3RhbmRhYmxl IGNhbnZhcw== Q2F0 IFpvbw== IGFuZ2Vscw== TE8= IFN0YXRlbWVudA== IFNpZw== b3ZhYmxl IEF3YXk= c2hhcmluZw== b2NyYXRz c3RhdGVk IHdlaWdoaW5n Tm9y d2lsZA== QmV5 IGFzdG9uaXNoaW5n IFJleW5vbGRz IG9wZW5lcg== IHRyYWluZXI= IHN1cmdpY2Fs cG4= IGFkanVzdGluZw== d2hlZWw= IGZyb3du ZXJ2YXRpdmU= IHN1c3BlbmQ= V2l0aGlu dGVpbg== IG9ic3RhY2xl IGxpYmVydGllcw== eW1lcw== IHVyYW5pdW0= YW5zb20= YW5vbA== dWJh IExvc3M= IGFyb3Vz IEhlbmRlcnNvbg== V293 c3Bs Y3Vy IMKt IHRoZWlycw== RGFtYWdl IGRvd25sb2FkaW5n IGRpc2Nlcm4= IFN0bw== IEZsYQ== IGhhdGg= IEFq IHVucGxlYXNhbnQ= RXVyb3BlYW4= ZXhwZW5zaXZl IHNjcmVlbnNob3Q= IFVW IGFsbGllZA== IFBlcnNpYW4= IG1vbm9wb2x5 IGF0b20= IFJlZHNraW5z Ij48 IGNhbmNlbGw= IGNpbmVtYQ== MTMx ZmFpcg== IEFsZnJlZA== IGR1Y2s= YXJncw== MjIz IElTSQ== IHNpZ25hbGluZw== aW5hcg== IGxhdWdocw== IGZvcndhcmRz IHJlY2tsZXNz IGxpc3RlbmVycw== YXRpdml0eQ== IHZhc3RseQ== bmFudA== TGVzcw== IEh1bnRpbmc= IFNjaWVudGlmaWM= SVRFRA== IGtuaWdodA== IEhUQw== dXNh dG1w IHJ1ZGU= IExlZ2VuZGFyeQ== IGFyaXNlcw== QmFk IENsYWlt cGVn IHJlYWxpdGllcw== VGhpbms= IMKw IHJvZGU= IHN0cml2ZQ== IGFuZWNk IHNob3J0cw== IGh5cG90aGVz IGNvb3JkaW5hdGVk IEdhbmRoaQ== IEZQUw== UkVE IHN1c2NlcHRpYmxl IHNocmluaw== IENoYXJ0 SGVscA== IGlvbg== ZGVlcA== cmliZXM= IEthaQ== IEN1c3RvbWVy U3VtbWFyeQ== IGNvdWdo d2lmZQ== IGxlbmQ= IHBvc2l0aW9uaW5n IGxvdHRlcnk= IENhbnlvbg== IGZhZGU= IGJyb256ZQ== IEtlbm55 IGJvYXN0cw== IEVuaGFuY2Vk cmVjb3Jk IGVtZXJnZW5jZQ== IGFraW4= IEJlcnQ= aXRvdXM= 4paR IHN0aXA= IGV4Y2hhbmdlZA== b21vcmU= YWxzaA== IHJlc2Vydm9pcg== IHN0YW5kcG9pbnQ= V00= IGluaXRpYXRl IGRlY2F5 IGJyZXdlcnk= IHRlcnJpYmx5 IG1vcnRhbA== bGV2YXJk IHJldmlz Tkk= ZWxv IGNvbmZlc3M= IE1TTkJD IHN1Ym1pc3Npb25z Q29udHJvbGxlcg== IDIwMg== IFJ1dGg= fSk7 IEF6dXJl IC4i MjA2 IE1hcmtldGluZw== IGxhdW5k aWVuY2llcw== IHJlbm93bmVk IFRyb3U= IE5HTw== YmxlbXM= IHRlcnJpZmllZA== IHdhcm5z IHBlcnQ= IHVuc3VyZQ== NDgw YWxleg== dWx0eg== IE91dHNpZGU= IHN0eWw= IFVuZGVyZ3JvdW5k IHBhbmM= IGRpY3Rpb25hcnk= IGZvZQ== cmltaW5hbA== IE5vcndlZ2lhbg== IGphaWxlZA== IG1hdGVybmFs w6ll IEx1Y3k= Y29w Q2hv IHVuc2lnbmVk IFplbGRh IEluc2lkZXI= IENvbnRpbnVlZA== IDEzMw== IE5hcnV0bw== IE1ham9yaXR5 MTY5 IFdv 44KT IHBhc3Rvcg== IGluZm9ybWFs 0L0= YW50aHJvcA== am9pbg== 44GX aXRhdGlvbmFs TlA= IFdyaXRpbmc= Zm4= IEJldmVy MTk1 IHllbGxpbmc= IGRyYXN0aWNhbGx5 IGVqZWN0 IG5ldXQ= IHRocml2ZQ== IEZyZXF1 b3V4 IHBvc3Nlc3Nlcw== IFNlbmF0b3Jz IERFUw== IFNoYWtlc3BlYXJl IEZyYW5jbw== IExC dWNoaQ== IGluY2Fybg== IGZvdW5kZXJz RnVuY3Rpb24= IGJyaWdodG5lc3M= IEJU IHdoYWxl IFRoZWF0ZXI= bWFzcw== IERvbGw= U29tZXRoaW5n IGVjaG9lZA== IEhleA== Y3JpdA== YWZpYQ== IGdvZGRlc3M= IGVsZXZlbg== IFByZXZpZXc= IEF1cm9yYQ== IDQwMQ== dWxzaXZl IExvZ2Fu aW5idXJnaA== IENlbnRlcnM= IE9OTFk= IEFpZA== IHBhcmFkb3g= IGh1cmQ= IExD RHVl Y291cnQ= IG9mZmVuZGVk IGV2YWx1YXRpbmc= IE1hdHRoZXdz IHRvbWI= IHBheXJvbGw= IGV4dHJhY3Rpb24= IEhhbmRz aWZp IHN1cGVybmF0dXJhbA== IENPTU0= XT0= ZG9ncw== IDUxMg== IE1lZXRpbmc= UmljaGFyZA== IE1heGltdW0= IGlkZWFscw== VGhpbmdz bWFuZA== IFJlZ2FyZGxlc3M= IGh1bWlsaQ== YnVmZmVy TGl0dGxl IERhbmk= IE5haw== IGxpYmVyYXRpb24= IEFiZQ== IE9M IHN0dWZmZWQ= YWNh aW5kYQ== cmFwaGlj IG1vc3F1 IGNhbXBhaWduaW5n IG9jY3VweQ== U3F1 cmluYQ== IFdlbA== IFZT IHBoeXNpYw== IHB1bHM= cmludA== b2FkZWQ= RVRG IEFyY2hpdmVz IHZlbnVlcw== aG5lcg== IFR1cmJv IGx1c3Q= IGFwcGVhbGVk cXVleg== aWxpYg== IFRpbW90aHk= IG9tbg== ZHJv IG9ic2Vzc2lvbg== IFNhdmFnZQ== MTk5Ng== R2xvYmFs SmVz MjE0 IHNsaWRpbmc= IGRpc2FwcHJv IE1hZ2ljYWw= IHZvbHVudGFyaWx5 Z2I= YW5leQ== IHByb3BoZXQ= IFJlaW4= IEp1bGlh IFdvcnRo YXVydXM= IGJvdW5kcw== aWV1 KSkp IGNyb3Jl IENpdGl6ZW4= U2t5 IGNvbHVtbmlzdA== IHNlZWtlcnM= b25kbw== SVNB IExlbmd0aA== IG5vc3RhbGc= IG5ld2NvbQ== IGRldHJpbQ== ZW50cmlj Mzc1 IEdF IGF1dG9w IGFjYWRlbWljcw== QXBwRGF0YQ== IFNoZW4= IGlkaW90 IFRyYW5zaXQ= IHRlYXNwb29u V2ls S08= IENvbWVkeQ== Piw= IHBvcHVsYXRlZA== V0Q= IHBpZ3M= IE9jdWx1cw== IHN5bXBhdGhldGlj IG1hcmF0aG9u MTk4 IHNlaXp1cmU= c2lkZWQ= IGRvcA== aXJ0dWFs TGFuZA== IEZsb29y b3NhdXJz Li4uXQ== IGxvcw== IHN1YnNpZGlhcnk= RVk= IFBhcnRz IFN0ZWY= IEp1ZGljaWFyeQ== IDEzNA== IG1pcnJvcnM= IGtldA== dGltZXM= IG5ldXJvbG9n IGNhdg== IEd1ZXN0 IHR1bW9y c2NpbGw= IExsb3lk RXN0 IGNsZWFyZXI= IHN0ZXJlb3R5cGVz IGR1cg== bm90aGluZw== UmVkZGl0 IG5lZ290aWF0ZWQ= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t MjM1 IGZsb3du IFNlb3Vs IFJlc2lkZW50 IFNDSA== IGRpc2FwcGVhcmFuY2U= IFZpbmNl Z3Jvd24= IGdyYWJz cmls IEluZmluaXRl IFR3ZW50eQ== IHBlZGVzdHJpYW4= IGplcnNleQ== IEZ1cg== IEluZmluaXR5 IEVsbGlvdHQ= IG1lbnRvcg== IG1vcmFsbHk= IG9iZXk= c2VjdXJl aWZmZQ== IGFudGliaW90aWNz YW5nbGVk IEZyZWVtYW4= IEludHJvZHVjdGlvbg== SnVu IG1hcnNo aWNhbnM= IEVWRU5UUw== b2Nob25k V2FsbA== aWN1bHR5 IG1pc2RlbWVhbm9y IGx5 VGhvbWFz IFJlc29sdXRpb24= IGFuaW1hdGlvbnM= IERyeQ== IGludGVyY291cnNl IE5ld2Nhc3RsZQ== IEhvZw== IEVxdWlwbWVudA== MTc3 IHRlcnJpdG9yaWFs IGFyY2hpdmVz MjAz RmlsdGVy IE11bmljaA== IGNvbW1hbmRlZA== IFdhbmQ= IHBpdGNoZXM= IENyb2F0 IHJhdGlvcw== IE1pdHM= IGFjY3VtdWxhdGVk IFNwZWNpZmljYWxseQ== IGdlbnRsZW1hbg== YWNlcmI= IHBlbm4= IGFrYQ== IEZ1aw== IGludGVydmVuZQ== IFJlZnVnZQ== IEFsemhlaW1lcg== IHN1Y2Nlc3Npb24= b2hhbg== ZG9lcw== TG9yZA== IHNlcGFyYXQ= IGNvcnJlc3BvbmRlbmNl IHNoaW55 UHJpb3I= IHN1bGY= IG1pc2VyYWJsZQ== IGRlZGljYXRpb24= KCku IHNwZWNpYWxpc3Rz IGRlZmVjdHM= IEN1bHQ= IFhpYQ== IGplb3BhcmQ= IE9yZQ== QWJpbGl0eQ== IGxlYXI= IGFtYml0aW9ucw== IEJNSQ== IEFyYWJz IDE5NDI= IHByZXNlcnZhdGlvbg== aWZpY2F0ZQ== IGFzaGFtZWQ= bG9zcw== IFJlc3RhdXI= IHJlc2VtYmxl IGVucmljaA== IEtO IENsYW4= ZmxvYXQ= IHBsYXlhYmxl SVRU IGhhcm1vbnk= YXJyaXNvbg== IFdlaW5zdGVpbg== d2VyZQ== IHBvaXNvbmluZw== IENvbXB1dA== IFdvcmRQcmVzcw== bWFqb3I= IFZhbHZl RmFu IFRocm93 IFJvbWFucw== IERlcHJlc3Npb24= YWRvcw== IHRvcnR1cmVk IGJhbGFuY2luZw== Ym90dG9t IGFjcXVpcmluZw== IE1vbnRl YXJkaQ== IGF1cmE= ICMj IFN0YW5kaW5n IEF0bGFz Q0Y= IGludHJpbnM= IEJlbmdoYXpp IGNhbXBpbmc= IHRhcHBlZA== YmxhZGU= c3Ryb3Vz IFJhYmI= IFdyaXR0ZW4= dGlw IE5laWdo c3RlcmRhbQ== IEFsbG93 IEhlYWxpbmc= IFJob2Q= bnVt IGNhZmZlaW5l IFBlcmNlbnQ= IGJvbw== IGFwcGxlcw== MzA1 IHdlbGNvbWluZw== IGFwcGxhdWQ= IGF1c3Rlcml0eQ== wrE= IFJlYWxpdHk= ZWZl 5a4= IHN1Y2tz IHRhYnM= IFBheVBhbA== IGJhY2twYWNr IGdpZnRlZA== YWJ1bGFyeQ== IFNjb3V0 aXJ0ZWVu IGNoaW4= IG9taXR0ZWQ= IG5lZ2F0aXZlbHk= IGFjY2Vzc2luZw== IEVhcm4= IGFtYnVsYW5jZQ== IGhlYWRwaG9uZXM= IDIwNQ== IFJlZnJlc2g= cHJlc2lkZW50 IEtpdGNoZW4= IEVudGVyZWQ= IFNueWRlcg== MDA1 b21pY2Fs IGJvcnJvd2Vk IE5lbQ== IGF2aWF0aW9u IHN0YWxs cmltaW5hdGlvbg== IHVuaWZvcm1z aXRpbWU= IFNpbW1vbnM= ZW5lcmd5 YWJsaXNoZWQ= eXk= cXVhbGlmaWVk IHJhbGxpZXM= IFN0dWFydA== ZmxpZ2h0 IGdhbmdz cmFn IHZhdWx0 bHV4 IENvbXBhcg== IGRlc2lnbmF0aW9u MjA5 IEpvcw== ZG9sbGFy emVybw== IHdlbGxz MzAz IGNvbnN0aXR1ZW50cw== IGhlY2s= IGNvd3M= IGNvbW1hbmRlcnM= IGRpZmZlcmVudGlhbA== IENhdGhlcmluZQ== Mjk5 IHZhbHZl IGJyYWNl IHBlcnNwZWN0aXZlcw== Y2VydA== ZmFjdA== aWN1bGFybHk= IE1jTg== cGxhbmVz IGludHJpYw== IHBlYXM= b3Zhbg== IHRvc3NlZA== cmV0Y2g= IExvcGV6 IHVuZmFtaWxpYXI= ZGVhdGg= IEFwYXJ0 IENoYW5n IHJlbGlldmVk cm9waGU= IGFpcnBvcnRz IGZyZWFr dXRpbA== TWlsbA== IENoaW4= IE93ZW4= bWFsZQ== IEJyb2tlbg== IFdpbmRz cm9i cmlzaW5n IGZpcmVmaWdodGVycw== IGF1dGhvcml0YXJpYW4= IDE0OA== Qml0Y29pbg== ZXh0ZXJuYWw= IGJyb3dzZXJz aWNoZXZlcg== b3JpYW4= IHVuYg== IHBva2U= IFpvdA== TWlk IFBvcHVsYXI= IGNvdmVydA== IGNvbnRyaWJ1dGVz IDY1MA== IGNvbnRlbnRpb24= R2F0ZQ== IGNvbnNvbGVz IGNocm9tb3M= IElY IHZpc3VhbGx5 IEVpc2Vu IGpld2Vscnk= IGRlbGVnYXRpb24= IGFjY2VsZXJhdGU= IFJpbGV5 IHNsb3Bl IGluZG9vcg== aXRpYWxseQ== IGh1Z2VseQ== IHR1bm5lbHM= IGZpbmVk IGRpcmVjdGl2ZQ== IGZvcmVoZWFk dXN0b21lZA== IHNrYXRl TXVzaWM= Z2Fz IHJlY29nbml6aW5n YW1ibw== IG92ZXJ3ZWlnaHQ= IEdyYWRl 2Yo= IHNvdW5kaW5n IGxvY2tpbmc= IFJFTQ== U3RvcmU= IGV4Y2F2 IExpa2V3aXNl IExpZ2h0cw== IGVsYm93 IFN1cHBseQ== d2lj IGhhbmRzb21l MTk5NA== Q29sbA== IGFkZXF1YXRlbHk= IEFzc29jaWF0ZQ== IHN0cmlwcw== IGNyYWNrZG93bg== IG1hcnZlbA== IEt1bg== IHBhc3NhZ2Vz QEBAQA== IFRhbGw= IHRob3VnaHRmdWw= bmFtZXNl IHByb3N0aXR1dGlvbg== YnVzaW5lc3M= IGJhbGxpc3RpYw== cGVyc29uYWw= Y2ln aXphdGlvbmFs Um91bmQ= IMKgIMKgIMKgIMKg IENvbGVtYW4= IGFkbWl0dGluZw== IFBsdWc= IGJpdGNvaW5z IFN1eg== IGZhaXJuZXNz IHN1cHBsaWVy IGNhdGFzdHJvcGhpYw== IEhlbGVu b3F1 TWFyYw== IEFydGljbGVz Z2ll IGVuZGFuZ2VyZWQ= IGRlc3Rpbnk= IFZvbHQ= b2xpYQ== YXhpcw== IGNoZWF0 IHVuaWZpZWQ= SUNP cXVvdGU= MzAy IFNlZA== IHN1cHByZXNzaW9u IGFuYWx5emluZw== IHNxdWF0 IGZpZ3VyaW5n IGNvb3JkaW5hdGVz IGNodW5rcw== IDE5NDY= IHN1YnA= IHdpa2k= IEZvcmJlcw== IEp1cGl0ZXI= IEVyaWs= aW1lcg== IENvbW1lcmNpYWw= XCk= IGxlZ2l0aW1hY3k= IGRlbnRhbA== IE1lYW4= IGRlZmljaXRz NTUw T3JpZ2luYWxseQ== IEhvcnJvcg== IGNvbnRhbWluYXRpb24= bGxhaA== IGNvbmZpc2M= IENsYXJl VEI= IEZhaWxlZA== YW5lZA== IHJ1bGVy IENvbnRyb2xsZXI= IGZlbWluaXN0cw== Rml4 Z2F5 MjA3 IHJhYmJpdA== VGhpcmQ= b3dudG93bg== IGdsdWU= IHZvbGF0aWxl IHNoaW5pbmc= IGZvbGw= IGltcGFpcmVk IHN1cGVycw== 5og= IGNsdXRjaA== mumGkg== IHByb2xldA== ICgh IHllbGxlZA== IEtpZXY= IEVybg== IFNob2Nr S0I= IHNpdHVhdGVk cXVlcnk= IE5hcw== IGFubmV4 Y2hhcmFjdGVy IEhvbGlkYXk= IGF1dG9tYXRpb24= IEppbGw= IFJlbWFzdGVyZWQ= IGxpbmVt IHdpbGRlcm5lc3M= IEhvcml6b24= IEd1aW5lYQ== QVo= IG1haW5sYW5k IHNlY3JlY3k= TEVBU0U= IHB1bms= IFByb3ZpbmNl KCks U3BlZWQ= IGhhbmRpbmc= IFNlYmFzdA== U2ly cmFzZQ== IGpvdXJuYWxz IGNvbmdlc3Q= IFR1dA== aXJyZWw= IHNjaGl6b3BocmVuaWE= IG1pc29neW4= aGVhbHRoeQ== SXJvbg== IHJlYWN0ZWQ= LSQ= MjUy IHBsdXJhbA== IHBsdW0= IGJhcmdhaW4= IGdyb3VuZGVk ZmluZGVy IGRpc3Nl IExheg== T09E IGF0cm9j RmFjdG9yeQ== IG1pbmlvbnM= IG9yaQ== IEJyYXZl IFBSRQ== IE15YW5tYXI= IEhvZA== IGV4cGVkaXRpb24= IGV4cGxvZGU= IENvb3Jk IGV4dHI= IEJyaWVm IEFESEQ= IGhhcmRjb3Jl ZmVlZGluZw== IGRpbGU= IEZydWl0 IHZhY2NpbmF0aW9u IE1hbw== b3NwaGVyZQ== IGNvbnRlc3Rz LXw= IGZyZW4= aXNwaGVyZQ== Um9t IFNoYXJw IFRyZW5k IGRpc2Nvbm5lY3Q= 4oCi4oCi IHBlcnNlY3V0aW9u RWFydGg= IGhlYWx0aGllcg== Mzg0 IGNvYg== IFRyaW5pdHk= T1dT QU5O IHNwZWNpYWx0eQ== IGdydQ== IGNvb3BlcmF0aXZl d2h5 U3RhcnRpbmc= IElzc3Vlcw== c3RyZQ== ZW5zb3I= IDE4NQ== QWR2 IT8= IFJldmVs ZW1pYQ== IEh1bGs= IGNlbGVicmF0aW9ucw== IFNvdQ== cmF1ZA== IEtsZWlu IHVucmVhbA== Y29udGV4dA== IHBhcnRuZXJzaGlwcw== IGFkb3B0aW5n dGljYWw= IHNwbGFzaA== IEhlemJvbGxhaA== Y2F0ZWdvcnk= Y3ljbG9w eHRvbg== IERvdA== dXJkeQ== dHo= IGVudmVsb3Bl IE5M 4pU= IHdoZXJlaW4= U3BlYw== MTg0 IHRlbGV2 YWxpYXRpb24= IG15dGhz 5bA= IHJpZ29yb3Vz IGNvbW11bmljYXRpbmc= IG9ic2VydmVy IHJlaGU= IFdhc2g= IGFwb2xvZ2l6ZWQ= IFRpbg== IGV4cGVuZGl0dXJlcw== d29ya2Vycw== ZG9jdW1lbnQ= IGhlc2l0YXRl IExlbmlu IHVucHJlZGljdGFibGU= IHJlbmV3YWw= Y2xlcg== b2tpYQ== IENPTlQ= IHBvc3RzZWFzb24= VG9rZW5z IGV4YWNlcmI= IGJldHRpbmc= IDE0Nw== IGVsZXZhdGlvbg== V29vZA== IFNvbG9tb24= MTk0 MDA0 b3V0cHV0 IHJlZHVuZA== IE11bWJhaQ== IHBI IHJlcHJvZHVjZQ== IER1cmF0aW9u TUFY IGJvZw== Q0JT IEJhbGFuY2U= IFNndA== IFJlY2VudA== IGNk IHBvcHBlZA== IGluY29tcGV0 cHJvcA== YXlhbg== Z3V5 UGFjaWZpYw== IHR5cg== IHt7 IE15c3RpYw== IERhbmE= IG1hc3R1cmI= IGdlb21ldHJ5 w6I= IENvcnJlY3Q= IHRyYWplY3Rvcnk= IGRpc3RyYWN0ZWQ= IGZvbw== IFdlbHNo THVj bWl0aA== IHJ1Z2J5 IHJlc3BpcmF0b3J5 IHRyaWFuZ2xl IDIxNQ== IHVuZGVyZ3JhZHVhdGU= IFN1cGVyaW9y Y2hhbmdpbmc= Xy0= IHJpZ2h0bHk= IHJlZmVyZWU= IGx1Y3JhdGl2ZQ== IHVuYXV0aG9yaXplZA== IHJlc2VtYmxlcw== IEdOVQ== IERlcmJ5 IHBhdGh3YXlz IExlZA== IGVuZHVyYW5jZQ== IHN0aW50 IGNvbGxlY3Rvcg== RmFzdA== IGRvdHM= IG5hdGlvbmFscw== IFNlY3VyaXRpZXM= IHdoaXA= UGFyYW0= IGxlYXJucw== TWFnaWM= IGRldGFpbGluZw== bW9vbg== IGJyb2FkY2FzdGluZw== IGJha2Vk MjY1 aG9sbQ== IFNhaA== IEh1c3NlaW4= IENvdXJ0ZXN5 MTc0 IDE0Ng== IGdlb2dyYXBoaWM= cGVhY2U= IGp1ZGdpbmc= IFN0ZXJu QnVy IHN0b3J5bGluZQ== R3Vu IFN0aWNr MjQ1 MzA3 44K044Oz IEFkbWluaXN0cmF0b3I= IGJ1cm50 IHBhdmU= Y2hvZXM= RXhlYw== IGNhbXB1c2Vz UmVzdWx0 IG11dGF0aW9ucw== IENoYXJ0ZXI= IGNhcHR1cmVz IGNvbXBhcmVz IGJhZGdl U2NpZW50 IGVyYWQ= aWVyeQ== b2k= ZXR0ZXM= IEVzdGF0ZQ== IHN0cmFw IHByb3VkbHk= IGZyaWVk IHdpdGhkcmF3bg== IFZveQ== cGhvbnk= SXRlbXM= IFBpZXJjZQ== YmFyZA== IGFubm90YXRpb24= YW50b24= aWxsb24= SW1wcm8= Li4uKQ== IGhhcHBpZXI= LS0tLS0t YWRqdXN0 IHN0YWZmZXJz IGFjdGl2aXNt IHBlcmY= IGFscmlnaHQ= TmVlZA== IGNvbW1lbmNl IG9waW9pZA== IEFtYW5kYQ== RXM= IFBhcnM= IEthdw== V29ya3M= MjQ4 IGluZG8= dGM= ZW5kYW50 IE1vdG8= IGxlZ2FsaXphdGlvbg== T1RF IHRhc2tlZA== IHRzcA== IEFDVElPTlM= MTY2 IHJlZnJlc2hpbmc= IE5S IFBlcmV6 IGluZnJpbmdlbWVudA== U1k= TGlzdGVu aW5uaW5n a3U= IHJvdGF0ZQ== cHJvZ3JhbQ== YXJhaA== RGVzaWdu ICjCow== IHN0b3Jpbmc= IHdhcnJhbnRz IGp1ZGdlbWVudA== IEJyaXN0 dXN1YWxseQ== cGhvdG8= IFJhbg== IFBpbmU= IG91dHJhZ2VvdXM= IFZhbGVudGluZQ== bHVlbmNl IEV2ZXJ5Ym9keQ== QWx0ZXJu IHJlbGV2YW5jZQ== IHRlcm1pbmF0ZWQ= IGRlc3NlcnQ= IGZ1bGZpbGxlZA== IHByb3NlY3V0ZWQ= IFdvcmRz IG1pZ3JhbnQ= IGN1bHRpdmF0aW9u w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgg== aWRlbGl0eQ== IFZlcm4= IExvZ2lu IG1ldGFwaG9y IFRpcA== IHJlY3J1aXRz IFBpZw== cmliaW5n IGVudGh1c2lhc3Rz ZXhwZXI= IGZyaWdodGVuaW5n IEhhaXI= YW5zb24= c3RyYXRl IGhp SGVpZ2h0 IG93bmluZw== bm9uZQ== IGRpc2xpa2U= IGtuaXZlcw== cGhlcmQ= IGxvdWRseQ== IEFQSXM= RGlzcGxheQ== IExhYw== IFVTUw== YWJs dmVyYWdlcw== SmV3 IDE3Mg== IEhpc3RvcmljYWw= YXRvb24= IFBoeXNpY3M= aW50ZXJu IHdhcm10aA== IHRvcHA= RE0= IGd1bm1hbg== IGVtcGVyb3I= b2Rp 44Oj aW5hdG9yeQ== IFJpYg== IDEzMQ== IFNhdHVybg== IFNoaW5pbmc= IHdha2luZw== UXVvdGVz IGNvbWVkaWFu ZW5iZXJn wr0= IGJlbGlldmVycw== IHBhcGVyd29yaw== Y3VzdG9t IGxldg== IGxhbWVudA== IHBvdXJpbmc= MjIy cG9saXRpY2Fs IFN1cHBsZW1lbnQ= bWFpZA== IGNydWVsdHk= IHRyZWFk eXNpY3M= QXc= cml0ZXM= IG1vZGlmaWVy IFBvc2l0aW9u QWRhbQ== bGI= dWJz IGltcGVyZmVjdA== IGNsdXN0ZXJz IEVuZ2luZWVy IENoZXJyeQ== IGluYXVndXJhdGlvbg== IFNhdQ== IGVtYm9kaW1lbnQ= IFVuY2xl IG92ZXJy IGV4cGxvc2lvbnM= Y3VsZQ== IFByaW5jZXRvbg== IEFuZHJlYQ== IGluY29ycmVjdGx5 IGVhcm5lc3Q= IHBpbGdy IFNwcmludA== IHNsZWV2ZQ== IGhlYXJz IEFtYXppbmc= IGJyb3dzaW5n YWdpbg== IGhvbWVsYW5k IGhhdw== IGRpdmluZw== aXN0ZXJlZA== MTc4 IGJhcmdhaW5pbmc= IEFyY2FkZQ== IGRlbGVnYXRl dGVyc29u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== IEphY2tzb252aWxsZQ== Mjc1 IHN0YWdu IGFkYW0= IFNoZXJtYW4= Q0I= IHN1YnVyYg== IEZvb2Rz IGNvbnZlcnRpbmc= IEFyaXN0 IGNoYW1iZXJz bG92ZQ== IGFtaW5v IEdhbg== IG1hZG5lc3M= bWM= IFVTRQ== ZGVmaW5lZA== IHVsdHI= aW5kdXN0 IHdvbHZlcw== bGFuY2U= QWRkaXRpb25hbGx5 IGNyYWNrcw== YXNpYQ== IFJlYXNvbg== IFB1bXA= IGFjY2lkZW50YWw= IExhc2Vy IFJpZA== IGluaXRpYWxpemVk ZWxsaQ== IHVubmFtZWQ= IG5vdW4= IFBhc3NlZA== IGhvc3RhZ2U= IEV0aGlvcA== c2hpcnRz IHVucmVs IEVtYmFzc3k= IDE5NDE= IGF0b21z IHB1cnBvcnRlZA== MTY0 IEZp IGdhbGxvbnM= IE1vbmljYQ== IHBn ZW5tZW50 IHNvcnRlZA== IEdvc3BlbA== IGhlaWdodHM= IHRyYWNlZA== IHVuZGVyZ29pbmc= U2hlbGw= IHNhY2tz IHByb3BvcnRpb25z IGhhbGx1Yw== Rm9udA== YWNldA== IHdhcm1lcg== IElOVEVS IGdyYWJiaW5n UGx1Zw== IHJlYWxpemF0aW9u IEJ1cmtl IGVuY2hhbnQ= QVRFUg== IFNlZWQ= IGFidW5kYW50 Rk0= IGNpdmlj VnM= aXNp IHZvdw== IHJlcGVy IFBhcnRuZXJzaGlw IHBlbmV0cmF0aW9u IGF4ZQ== IHNoYXR0ZXJlZA== IFpvbWJpZXM= IHZpbnls IEFsZXJ0 ZW9u IG9ibGlnZWQ= IElsbHVzdA== IFBsYXph IEZyb250aWVy IGRhdmlkamw= IFNlcmlhbA== IEhhdg== IE51dHJpdGlvbg== Qmk= IOKWiA== IEpheXM= bGludXg= IGh1cnJ5 IHZveQ== IGhvcGVsZXNz IFN0ZWFsdGg= IOOB ZXNzb3Jz dHRsZQ== Ym9yZw== IFNhZmFyaQ== ZmVsbA== IHdhcnk= ZHVl IEFib3Zl SGE= RUxM IG5vdG9y IFdvbg== VG9v IG9jY3VwYXRpb25z IHBvc3Nlc3Npb25z IGludml0aW5n IHByZWRhdG9ycw== IGFjY2VsZXJhdGVk IDE1Nw== dXRlcnRl IEN1YmU= ZWFzdA== YWNjb3VudA== R2l2ZQ== IHRyYW5zcGxhbnQ= cmVkaWVudHM= aWRhYmxl IHNjcmVlbnNob3Rz IEd1bmQ= IEZT IHRyYXZlbGVycw== IHNlbnNvcnk= IEZpYXQ= IFJvY2tldHM= jos= X3s= RnJpZW5k IGNoYXJtaW5n QUxT IGVuam95bWVudA== bXBo IDUwMDA= IFJFRw== 2YY= Ymlh IGNvbXBpbGF0aW9u cm9zdA== IFZQ IFNjaG5l MjAxOQ== IGNvcHlpbmc= TU9SRQ== IEZsb3Jl ZmFsbHM= MjE1 dG90YWw= IGRpc2NpcGxlcw== ZG91Ymxl IGV4Y2VlZGluZw== IHNtYXNoZWQ= IGNvbmNlcHR1YWw= IFJvbWFuaWE= IEJyZW50 IElDRQ== IFRvdQ== IGdyYXA= IG5haWxz MTg5 44OY IHByb2N1cmU= ZXVy IGNvbmZpcm1pbmc= IENlYw== YXdp IEVkZW4= IG5n IGVuZ2luZWVyZWQ= YXRpY3M= IGhvb2tlZA== IGRpc2d1c3Rpbmc= IE11cmRlcg== 44K/ TGlicmFyeQ== IDE2OA== QWxtb3N0 aGVtYXRpYw== TWVudQ== IE5vdHJl IEp1cg== IGtpZG5hcHBlZA== IGhhY2tlcg== IEphZGU= IGNyZWVweQ== IGRyYXdpbmdz IFNwb25zb3I= IGN5Y2xpc3Rz IEdvYmxpbg== IG9wdGltaXplZA== IHN0YWdlZA== IE1jRA== YmV0d2Vlbg== QWdl ZW5v U2V4 IFdpZGU= bmluZ3M= YXZpcw== IGluY2FwYWJsZQ== IEtvYg== IHJld2FyZGluZw== IExvbmU= b2xlc2NlbnQ= IGNvbnRyYWN0ZWQ= IHN0aWNreQ== Sm9zZQ== QmFsbA== ZmVzdA== IElucHV0 IFJlY2VudGx5 IHRvbWF0 c3F1YXJl QXBwbGljYXRpb24= IG5pdHJvZ2Vu IGR1cGxpY2F0ZQ== IFJlY29u IERlYXI= TG9uZG9u IGludHJh IGRvY2s= IG91dHJlYWNo IE1pbGxpb24= IG1hbW1hbHM= YW1wdG9u VkFM IHNuYXBz IGRvcw== IFdob2xl IFJlYWR5 VHJ5 IFdpbm5pcGVn ZWFyYW5jZQ== IGluY3VycmVk cmVuY2hlZA== IE5TVw== aWxvdA== cmFpbmU= IGN1YmU= Z290 IHJ1bndheQ== ZXRlcm1pbmVk IEhhd2tz IHN1cnZpdm9y IFdpc2g= IERpbg== IERFRg== IFZhdWx0 MTg3 IG11c2hyb29tcw== IGNyaXNw YmV5 IERpc2NvdmVyeQ== IGRldmVsb3BtZW50YWw= IHBhcmFkaWdt IGNoYW90aWM= IFRzdQ== IDMzMw== Ym9ucw== IGJhY3RlcmlhbA== IGNvbW1pdHM= IGNvc21pYw== IG1lZ2E= b2NhdGl2ZQ== IFBhaW50 b3Bob2JpYw== IHZhaW4= IGNhcnZlZA== IFRoaWVm IEd1bA== b3dzaGlw IGNpdGVz IEVkaW5idXJnaA== IGRpbWluaXNoZWQ= IGFja25vd2xlZGdlcw== IEtpbGxz IG1pY3Jvdw== IEhlcmE= IHNlbmlvcnM= IHdoZXJlYnk= SG9w YXRyb24= IHVuYXZhaWxhYmxl IE5hdGU= IDQ4MA== IHNsYXRlZA== IFJlYmVjY2E= IEJhdHRlcnk= IGdyYW1tYXI= IGhlYWRzZXQ= IGN1cnNvcg== IGV4Y2x1ZGluZw== YW55ZQ== YXVuZGVyaW5n ZWJpbg== IGZlYXNpYmxl IFB1Ymxpc2hpbmc= IExhYnM= IENsaWZm IEZlcnJhcmk= IHBhYw== dmlzaWJsZQ== bWFya2Vk cGVsbA== IHBvbGl0ZQ== IHN0YWdnZXJpbmc= IEdhbGFjdGlj IHN1cGVyc3Q= IHBhcmFu IE9mZmljZXJz 44CB IHNwZWNpZmljcw== dWx1cw== MjM5 IFBhc3Rl QU1Q IFBhbmFtYQ== IERlbGV0ZQ== YW5ndWFyZA== cmVzdHJpYWw= IGhlcm9pYw== IER5 2KfZhA== IGluY3VtYmVudA== IGNydW5jaA== dHJv IHNjb29w IGJsb2dnZXI= IHNlbGxlcnM= dXJlbg== IG1lZGljaW5lcw== IENhcHM= IEFuaW1hdGlvbg== b3h5 IG91dHdhcmQ= IGlucXVpcmllcw== MjI5 IHBzeWNob2xvZ2lzdA== IFNhc2s= ZXZpbA== IGNvbnRhbWluYXRlZA== 44Ko aGVyZW5jZQ== IGJyYW5kZWQ= IEFiZHVs emg= IHBhcmFncmFwaHM= IG1pbnM= IGNvcnJlbGF0ZWQ= ZXJi IGltcGFydA== IG1pbGVzdG9uZQ== IFNvbHV0aW9ucw== b3RsZQ== IHVuZGVyY292ZXI= IG1hcmNoZWQ= IENoYXJnZXJz ZmF4 IFNlY3JldHM= IHJ1dGg= d2VhdGhlcg== IGZlbWluaW5l IHNoYW0= IHByZXN0aWdpb3Vz aWdnaW5z IHN1bmc= aGlzdG9yeQ== ZXR0bGU= Z2dpZQ== IG91dGRhdGVk b2xhbmQ= IHBlcmNlcHRpb25z IFNlc3Npb24= IERvZGdlcnM= dWo= IEVORA== RG9j IGRlZmljaWVuY3k= R3JhbmQ= IEpva2Vy IHJldHJvc3BlY3Q= IGRpYWdub3N0aWM= IGhhcm1sZXNz IHJvZ3Vl IEF2YWw= RXF1 IHRyYW5zYw== IFJvYmVydHNvbg== IERlcGVuZGluZw== IEJ1cm5z aXZv IGhvc3RpbGl0eQ== RmVhdHVyZXM= k5g= IGRpc2NvbWZvcnQ= IExDRA== c3BlY2lmaWVk IEV4cGVjdA== MzQw IGltcGVyYXRpdmU= IFJlZ3VsYXI= Q2hpbmVzZQ== IHN0YXRld2lkZQ== IHN5bW0= IGxvb3Bz IGF1dHVtbg== Tmljaw== IHNoYXBpbmc= IHF1b3Q= IGNoZXJyeQ== IENyb3NzcmVm 6Kaa6YaS U3RhbmRhcmQ= aGVlZA== IERlbGw= IFZpZXRuYW1lc2U= IG9zdA== IFZhbGt5cmll T0E= QXNzYWQ= IHJlYm91bmQ= IFRyYWZmaWM= cGxhY2Vz 5pg= IEJ1Yw== MTcy IHNoZWx0ZXJz IGluc2lzdGluZw== IENlcnRhaW5seQ== IEtlbm5ldGg= IFRDUA== IHBlbmFs IFJlcGxheQ== aGVhcmQ= IGRpYWxlY3Q= aXph IEZZ aXRjaGVy IERM IHNwaXJhbA== IHF1YXJ0ZXJiYWNrcw== IGh1bGw= IGdvb2dsZQ== IHRvZGQ= IFN0ZXJsaW5n IFBsYXRl IHNweWluZw== bWJvbA== IFJlYWxt IFByb2NlZA== IENyYXNo IHRlcm1pbmF0ZQ== IHByb3Rlc3Rpbmc= Q2VudGVy Z3VpZGVk IHVuY292ZXI= IGJveWNvdHQ= IHJlYWxpemVz c291bmQ= IHByZXRlbmRpbmc= IFZhcw== MTk4MA== IGZyYW1lZA== IDEzOQ== IGRlc2NlbmRlZA== IHJlaGFiaWxpdGF0aW9u IGJvcnJvd2luZw== IEJ1Y2g= IGJsdXI= Um9u IEZyb3plbg== ZW56YQ== Q2hpZWY= IFBvb3I= IHRyYW5zbGF0ZXM= TUlO IDIxMg== SkVDVA== IGVydXB0ZWQ= IHN1Y2Nlc3Nlcw== U0VD IHBsYWd1ZQ== IGdlbXM= ZG9tcw== IHN0cmV0Y2hlcw== IFNweQ== IHN0b3J5dGVsbGluZw== Q3JlZGl0 IFB1c2g= IHRyYWN0aW9u IGluZWZmZWN0aXZl IEx1bmE= IHRhcGVz IGFuYWx5dGljcw== ZXJjaXNl IHByb2dyYW1tZXM= IENhcmJvbg== IGJlaG9sZA== aGVhdnk= IENvbnNlcnZhdGlvbg== IEZJUg== IHNhY2s= dGVybWlu cmlja3M= IGhvdXNlZA== IHVudXN1YWxseQ== SWNl IGV4ZWN1dGluZw== IE1vcm9j ZWRheQ== IGVkaXRpb25z IHNtYXJ0ZXI= IEJB IG91dGxhdw== IHZhbmlzaGVk aWJh QUxTRQ== IFNpbHZh MjM4 Q291bGQ= IHBoaWxvc29waGVy IGV2YWN1YXRlZA== U2VjcmV0 MTQy IHZpc2Fz 44Ks IE1hbHQ= IENsZWFybHk= IE5pZ2Vy IENhaXJv IEZpc3Q= Mzgw IFhNTA== YXV0bw== aXRhbnQ= IHJlaW5mb3JjZWQ= UmVjb3Jk IFN1cnZpdm9y R0h6 IHNjcmV3cw== cGFyZW50cw== IG9jZWFucw== bWFyZXM= IGJyYWtlcw== dmFzaXZl IGhlbGxv IFNJTQ== cmltcA== IG9yZQ== IEFybW91cg== MjQ3 IHRlcnJpZmlj IHRvbmVz MTQx IE1pbnV0ZXM= RXBpc29kZQ== IGN1cnZlcw== IGluZmxhbW1hdG9yeQ== IGJhdHRpbmc= IEJlYXV0aWZ1bA== TGF5 IHVucG9w dmFibGU= IHJpb3Rz IFRhY3RpY3M= YmF1Z2g= IENvY2s= IG9yZ2FzbQ== IFNhcw== IGNvbnN0cnVjdG9y ZXR6 R292 IGFudGFnb24= IHRoZWF0 IGRlZWRz aGFv Y3V0cw== IE1jQ2w= IHVt IFNjaWVudGlzdHM= IGdyYXNzcm9vdHM= eXNzZXk= Il09Pg== IHN1cmZhY2Vk IHNoYWRlcw== IG5laWdoYm91cnM= IGFkdmVydGlz b3lh IG1lcmdlZA== VXBvbg== IGdhZA== IGFudGljaXBhdGU= QW55d2F5 IHNsb2dhbg== IGRpc3Jlc3BlY3Q= SXJhbg== IFRC YWN0ZWQ= IHN1YnBvZW4= bWVkaWF0ZWx5 T09PTw== IHdhaXZlcg== IHZ1bG5lcmFiaWxpdGllcw== b3R0ZXN2aWxsZQ== IEh1ZmZpbmd0b24= Sm9zaA== IERI TW9uZGF5 IEVsbGVu S25vdw== eG9u aXRlbXM= MjI4 IGZpbGxz IE5pa2U= IGN1bXVsYXRpdmU= YW5kYWxz SXI= IOw= IGZyaWN0aW9u aWdhdG9y IHNjYW5z IFZpZW5uYQ== bGRvbQ== IHBlcmZvcm1lcnM= UHJpbQ== IGJpZGRpbmc= TXVy IGxlYW5lZA== IFByaXg= YWxrcw== IFvigKZd IFR3aXRjaA== IERldmVsb3Blcg== IEdpcg== IGNhbGxiYWNr QWJzdHJhY3Q= IGFjY3VzdG9tZWQ= IGZyZWVkb21z IFBH dXJhY3k= IGx1bXA= aXNtYW4= LCwsLA== MTk5Mg== IFJFRA== IHdvcm0= TWF0Y2g= IFBsYXRpbnVt SUo= IE93bmVy VHJpdmlh Y29tcGw= IG5ld2Jvcm4= IGZhbnRhcw== T3du IDE5NTk= IHN5bXBhdGg= IHViaXF1 IG91dHB1dHM= IGFsbGV2 IHByYWc= S2V2aW4= IGZhdm9ycw== IGJ1cmlhbA== IG51cnQ= c29sZXRl Y2FjaGU= IDE1Ng== IHVubG9ja3M= dGVjaG4= TWFraW5n IGNvbnF1ZXI= YWRpYw== 5pY= IGVsZg== IGVsZWN0b3JhdGU= IEt1cmRz IFN0YWNr IFNhbXVyYWk= IOKYhQ== IHt9 IFNhaWQ= IEZhbGxvdXQ= IGtpbmRuZXNz IEN1c3RvbXM= IEJvdWxldmFyZA== IGhlbGljb3B0ZXJz b3RpY3M= IFZlZ2V0 Y29tbWVudA== IGNyaXRpY2lzZWQ= IHBvbGlzaGVk IFJlbWl4 IEN1bHR1cmFs IHJlY29ucw== IGRvaQ== YXRlbQ== U2NyZWVu IGJhcnJlZA== Q29tbWVudHM= IEdlbmVyYWxseQ== IHNsYXA= NzIw VmFyaQ== cGluZQ== IGVtcHQ= IGhhdHM= IFBsYXlpbmc= bGFi YXZlcmFnZQ== Zm9ybXM= IENvdHRvbg== IGNhbnM= IERPTg== IFNvbWFsaWE= Q3J5cHQ= IEluY3JlYXNlcw== RXZlcg== bW9kZXJu IHN1cmdlb24= MzAwMA== IHJhbmRvbWl6ZWQ= PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== QmVybg== aW1wbA== IENPUg== IHByb2NsYWlt dGhvdXNl IHRvZXM= IGFtcGxl IHByZXNlcnZpbmc= IGRpc2JlbA== Z3JhbmQ= QmVzaWRlcw== IHNpbGs= IFBhdHRlcm4= aG0= IGVudGVycHJpc2Vz IGFmZmlkYXZpdA== IEFkdmlzb3J5 IGFkdmVydGlzZWQ= IFJlbGlnaW91cw== c2VjdGlvbnM= cHN5Y2g= IEZpZWxkcw== YXdheXM= IGhhc2h0YWc= IE5pZ2h0bWFyZQ== IHZhbXBpcmU= IGZvcmVuc2lj cm9zc292ZXI= bmFy IG5hdnk= IHZhY2FudA== IER1ZWw= IGhhbGx3YXk= IGZhY2Vib29r aWRlbnRhbGx5 IE5SQQ== IG1hdHQ= IGh1cnJpY2FuZQ== IEtpcmJ5 IFB1enpsZQ== IHNraXJ0 b3VzdA== ZHVsbGFo IGFuYWxvZ3k= aW5pb24= IHRvbWF0b2Vz IE5W IFBlYWs= IE1leWVy IGFwcG9pbnRtZW50cw== IG1hc2M= IGFsbGV5 cmVoZW5k IGNoYXJpdGllcw== IHVuZG8= IGRlc3RpbmF0aW9ucw== IFRlc3Rpbmc= Ij48Lw== IGRlc3RpbmVk IGltcGxlbWVudHM= IEhhcm9sZA== UkVDVA== IG9wdGltaXphdGlvbg== IGtpbG9tZXRyZXM= IGNtZA== IGltcGFpcm1lbnQ= IHVuc3VjY2Vzc2Z1bA== IHN3aWZ0bHk= IEdsYXNnb3c= YXJ0ZW4= IFNoYXJlcw== IEFuc3dlcg== IEFsYnVt IG51dHJpdGlvbmFs 44OW IEZ1dA== IGJsb2M= IE5GQw== IHdob2xlc2FsZQ== IENX IG5lZ2xlY3RlZA== IGxhdW5jaGVy IGFubm91bmNlbWVudHM= T1VMRA== Y29tYg== IHJvdGF0aW5n IHJlc3Rz IFRpY2tldA== Y2hlZGVs TG91 IFZpYw== ICIn IHRlbXBsYXRlcw== IHJlcGxhY2Vz QXJj Ojo6Og== IEdpbGJlcnQ= IGlsbG5lc3Nlcw== IHNjaGVkdWxlcw== IGhldGVyb3NleHVhbA== TElORQ== IGhlcmVpbg== IGNvZXJj IGRlY3JlYXNpbmc= IGRlcG9ydGF0aW9u c3Vkbw== IEluZGlnZW5vdXM= IHdlaWdocw== QWxvbmc= Jyk7 IEJlbmdhbHM= NzA3 IGpvaW50cw== dmVydHM= IDE0OQ== bmFpcmU= IHNpbXBsZXN0 IGxvcmU= MTA4MA== ZmljdGlvbg== IERhdGFiYXNl IHJlc2VydmF0aW9u IHNvdQ== IHNhbmN0dWFyeQ== YXVkaW8= YXBsZQ== IHZlZ2V0YXJpYW4= IGFudGljaXBhdGlvbg== bWljcm8= IGVuZHVyaW5n IGRlcGFydGVk IHNpZGV3YWxr IHByb2hpYml0cw== IEZvbnQ= IGNvbXB1dGU= IFNlY3Q= IDE1OA== QmF0dGxl IGJvbWJlcg== IGRpc3RyYWN0aW9u IGVuZHVyZWQ= IHByYWN0aXRpb25lcnM= IGRpc3R1cmJlZA== IGRyYW5r b3JkZXJlZA== IHN1cnByaXNlcw== c2VhdA== U2VjdXJpdHk= IFdpc2RvbQ== b2dv IHN1YnBhcmFncmFwaA== IFBlbmluc3VsYQ== IE9yaWdpbnM= aXJlbg== IFBhdg== aWdnbGU= IGdyYXRpdHVkZQ== IEdyYXZpdHk= b3ZlcnR5 aW1hbg== Y3Ry IENhZXNhcg== Y291bGQ= Z2Vt IHNraWVz IGNoYW1w IGFncmVlaW5n RmFtaWx5 RGl2 MTc2 IG1lc3N5 dW1wdGlvbg== RmVkZXJhbA== ZXJubw== IENoYXQ= QmV5b25k IGRldm90ZQ== IFdhbHNo IGR1bXBlZA== IGFjY3VtdWxhdGlvbg== c3RhZA== aGliaXRpb24= IHNtb2tlcnM= IGluc3BlY3Rvcg== RnJlbmNo aXNzYW4= IFZpdGE= IHJlc2VhcmNoaW5n UkFN IENlbHRpY3M= IGNsb2Fr IFRlcnJh TWFyeQ== c29sZA== IERPTQ== bW9kcw== SW50ZWw= IG11bHRpdHVkZQ== IEltcHJvdmVk IHJlbGlhbmNl IGFydGlmYWN0 IGFsYXJtaW5n UHJvbQ== aG9u VElPTg== bWVkaXVt IHJlZmxleA== IEV4Y2Vs IHdlYWtlbmVk MTYz MjI0 IGNvc3R1bWVz IHVuaXF1ZWx5 IHNvcnJvdw== IG1hbnNpb24= d3A= IHNhbHY= IEdyb3Zl YnNw IFNuaXBlcg== IFNoaXBwaW5n IFBPVw== IHVuZGlz IGJyYW5kaW5n R2lybA== IEFobWFk IExha2Vz IENvcmV5 IGluaGVyaXRhbmNl ZW5lcnk= IHBhY2tpbmc= IFByZXN0 RGVzdA== Rlc= IHJlZ3VsYXRvcg== bG9ja2Vk IGNvbnRlc3RlZA== IE1lbGlzc2E= IER1Yw== IHVucG9wdWxhcg== IHN0YWNrZWQ= IDE5MTc= IHllYXJseQ== IHN0YXJl IGFzc2Vzc2luZw== w7g= IGJldmVyYWdlcw== IGNvbXBldGl0aW9ucw== IHN0cmVuZ3RoZW5pbmc= YWxvbmc= IEx1ZA== IG1lbHRlZA== c3RhbmJ1bA== IGJvdW50eQ== RU5D IExhbmRz IGRlY2xhcmVz IGN1c3RvbWl6ZQ== IGNvbXBvc2l0ZQ== 44Os Q00= b2dyYXBoaWNz IFRlbXA= IGNvbnRlbmRlcg== IGluc2lnbg== IExBTg== IGRpc2FzdGVycw== aW5zcGlyZWQ= IGp1ZGdtZW50cw== dXN0YWluYWJsZQ== dXJzaW9u IHZhcmlhbmNl IFVsdGltYXRlbHk= IC0tLS0tLS0t dWFkb3I= IFJY IG1lbHRpbmc= IEV4dGVuZGVk IFR3ZQ== TWFqb3I= IEJpbA== IHN5cnVw cXVpY2s= IEhvbGRlcg== IGlubm9jZW5jZQ== VUxF IE1pZ2h0 OTk5OQ== IGZhbA== IGNvbnRpbnVpdHk= IDE5NTM= IEJT c3RpbGw= TGF0 IEFidXNl IHVuc3VwcG9ydGVk eHh4eHh4eHg= IGluc3RpdHV0ZQ== IGZyYWdtZW50 IFBlcA== V2VzdGVybg== IENhdXNl IEZyYWc= IEFycw== 4KU= YXN0aWNz IGJpc2hvcA== IGNyb3NzZXM= IDE1NA== IFVwZ3JhZGU= IG1pdGlnYXRl IFJheW1vbmQ= TW9kcw== IHRvbWF0bw== IHN0dW1ibGVk IGRpZmZlcnM= SW5pdGlhbA== IFJhc3BiZXJyeQ== IGlnbm9yZXM= IHRhbnQ= w6A= IHJlbGF5 IGJpc2V4dWFs IGNvbmZlc3Npb24= IGRlbWVudA== aW5hcw== IEhlYXRoZXI= cGxhdGZvcm0= ZHJpdmluZw== Ym91cmc= IE11c2g= IGh5c3Rlcg== RGV0YWlscw== IGRyaWZ0 IFdhbGQ= IEx1Y2tpbHk= b3Jm IGV4cGlyZQ== IFB1bmNo enltZQ== Z29sZA== IHVucGFpZA== IFRyZW50 IHVuYXJtZWQ= IGlsbGljaXQ= IFRvdHRlbmhhbQ== IHNtYXNo SW50ZXJuYXRpb25hbA== aW5rZXI= IHN0aW5n IFNhZGRhbQ== IEFSVA== IHRydXRocw== YmlydGg= IHNvYmVy IE5pdA== IGli IHVzYWJsZQ== IHN0YWNrcw== IFN5bHY= IG5vcnRoZWFzdA== IGRvbWluYXRpb24= IE1vdXI= RU5TRQ== IE1lYXN1cmU= IHByb2dyYW1tZXI= IDwt MTgy IENvbmRpdGlvbg== IGJhY2t5YXJk aXJsaW5n IEplYg== IENyZWVk IEhhbmc= IENPTVA= RkVS IElzaA== IGRldGVjdGl2ZXM= LS0tLS0tLS0tLS0tLS0t IE1lc3Nlbmdlcg== IGxvb3Bo IGdhdGV3YXk= MTUx IE1hdGVyaWFscw== IERU IGRvb21lZA== b2Rv IHNsaWNlcw== IGVtYWlsZWQ= IFBlcmw= IHJlbm92 VVRI b2R5bmFt IFNvdXRod2VzdA== Z2V0aWM= IFRQUA== IG9wdGltaXNt IFRvdw== dWxhdG9ycw== cHJvdGVjdGVk eWxlcw== wqs= IGV4aWxl ZW52 UHJvcA== IFppbW1lcm1hbg== 2Y4= Q2E= b21hbHk= 44OG IHJhaWxyb2Fk TGVl MjMy IHJlcGxpY2F0ZQ== IGNvbWZvcnRhYmx5 YWN0bHk= IHJhdg== IHRlbGVzY29wZQ== IGhvbmVzdHk= IFBlcHBlcg== IEJyaW5n IHJpY2hlc3Q= IG91dGRvb3Jz IGhhbGxz IGNvbnRlbmQ= SVNF IHN1Ym1pdHRpbmc= IG5haXZl YXJhdGlvbnM= IDE0Mw== IHBvaXNlZA== cmVzcG9uc2libGU= IHNvY2tz IFNrdWxs UXVlc3Rpb24= IGRpc2NvdmVyaWVz Sm9pbmVk IEVuZW1pZXM= IFdpcmVsZXNz IFJldmVuZ2U= IHB1enpsZXM= IGNlYXNlZA== Mjkw Y3JpcHRpb25z IENvbnNvbGU= IGJvaWxpbmc= IGRpc2NyZXA= IGRlZHVjdGlvbg== IGFyc2VuYWw= WFhYWA== IEFtc3RlcmRhbQ== cm94aW1hdGVseQ== IFNoYW5l IHBvc2luZw== IEFDTFU= IENvbXBhbmllcw== IHRoZW9sb2d5 IFVn cXVhcnRlcg== IEhhbms= Q29pbg== IEx2 IGFsbGVnYXRpb24= IEF2b2lk IGluZGVmaW5pdGVseQ== IGNvbW1vZGl0aWVz IGJyaWc= IE1hbml0 IHRlbnRo bWV0aG9k IEtuaWNrcw== IOKAjg== IGludm9rZWQ= RGlhbA== QVJB IGNhdWN1cw== MjI3 IEphYg== IG91bmNlcw== YmF5 IGJ1ZGR5 ZmFu MjM0 IEhpbA== YWRo IFRZ IElORA== IDE5Mzk= IGl0ZXJhdGlvbg== IEdvbnphbGV6 IFZlcnQ= IElP ZW1i cmVyYQ== ZW5jaA== IFJlcXVpcmVtZW50cw== IFdpbnM= IGxpdmVzdG9jaw== aG91cnM= IuKApg== YnJhbA== TWFyZw== IERvbmU= IHdhc3Rpbmc= aW5nZWQ= Z3JvdXBz IHdpc2hpbmc= IFR1bWJscg== IHRhcHBpbmc= IG5hdGlvbmFsaXNt IEJ5cg== IHNxdWFyZXM= IEFjdGlvbnM= 44Ol SW5zaWRl ZGVidWc= IGFwcGVuZA== IHN0dWJib3Ju IENpbmQ= VGVsbA== IHRlYXJpbmc= IFJleQ== b3Jj IERheXRvbg== IE5I IE1hZG5lc3M= Q2hhcmw= IE1vcnJpc29u ZmlsdGVy IGFjY3VzZQ== IC4v IHRvcnJlbnQ= IGRlY2xpbmVz Z2FsbGVyeQ== TWluZQ== IG5lZ290aWF0aW9u IEJhc2hhcg== b3BpYQ== MTk5Mw== ZW1vcnQ= IE5vdmVs IEZhbmc= ZXJzaXZl IEluc3RhbnQ= IHJvbGxlcg== QXJvdW5k IEVsZWN0aW9ucw== R2FtZXM= IGluZXhwZW5zaXZl IHdvcnM= IHZ1bA== IEhvbGU= IHVuYmVsaWV2YWJsZQ== IG5hdXNl IGVudHI= Ym9hdA== IFNURQ== IGJ1c2g= IEhhc3Nhbg== IHdv IHBhdXNlZA== IE1pZw== bGl2ZWQ= IHNjb3V0 IGxpdGg= UHVibGlzaGVk ZHVpbm8= Y29vbA== IGNpcmN1bGF0aW5n aWRhcw== IFBhbQ== dmlvbGVudA== IENyYXdmb3Jk dWRkbGU= IExldHRlcnM= R3VhcmQ= bW9ycGg= IHdhbmRlcmluZw== IHNvcGhvbW9yZQ== IHF1ZWVy IEJsaW5k cnVl IE1hcnJpYWdl RG9t IHBhZGRpbmc= IGZvbGRlcnM= IG1lYW5pbmdsZXNz IGNhbmRpZGFjeQ== YWZvcnQ= IHdoaXN0bGVibA== IElkZW50aWZpZWQ= IGNpZ2Fy IGhpZA== IER1YmFp IHBvc3R1cmU= IGhpa2luZw== IFRlcm1pbmFs TGVnZW5kYXJ5 IFRQ IEFUSw== IFN0YXJidWNrcw== IFJpb3Q= MTk5MQ== IEJvdHRvbQ== ZWZmaWM= IEV1Z2VuZQ== IFd5b21pbmc= IFJvY2t5 IHNhbG1vbg== IG1ldHJv IGJpbGF0ZXJhbA== IGNlbGVicmF0ZXM= TGVuZ3Ro YmlsbGlvbg== QmF0 IHJlbGVn IHBzZXVkbw== RFQ= IFJob2Rl UGFyZW50 cGxldGlvbg== IGF0dHJpYnV0 IHR1bmluZw== IE5PVEU= IFJlYmVs aWN1cw== RnVuZA== IGNvY2t0YWls IDUwMQ== IHNwb29u IGJydXRhbGl0eQ== IHVuaXRl IG1pY3JvYmk= IFJlaWNo cG9zaXRpdmU= IGFtYXplZA== IE5U RGVzYw== RUNUSU9O IGZhbHNlbHk= IEhpZ2hsYW5kZXI= IENyaXN0 IFZpY3Rvcmlhbg== IGRpc3RyaWJ1dGlvbnM= dGhlaXI= IEVpbnN0ZWlu IHBvZA== IGVwaWRlbQ== IGhlYXA= IFJhbmNo IGFudGhlbQ== IHJlYXBw IEF1YnVybg== IGNvbmN1cnJlbnQ= IFRocm91Z2hvdXQ= IFBPU1Q= 4pg= IGhvbWVtYWRl a2ljaw== QmVn IGNoYXNzaXM= Y291bnRlcg== IG1lcmdlcg== IGxhcHM= MjE3 dW5pb24= IFRyaWdnZXI= IGRlYmF0ZWQ= IHNpbGVudGx5 IHJlc3RyYWludA== QmFs MDAwMDAwMA== IGZvcm1pZGFibGU= IEZpbGlw IHNhY3JpZmljZXM= Rm9vZA== IGR3YXJm IFNlcXU= aW5pYW4= TW9yZW92ZXI= IHRhbmdpYmxl b3BzaXM= IE1pbmVjcmFmdA== IFJlZ2lzdHJhdGlvbg== b2Fu IHJlcHJlc2VudGF0aW9ucw== IHRoaXJzdA== IGNvcnA= aXJlbWVudA== TWFkZQ== bG9l PiI= Y2F0cw== Ki4= IGdlc3R1cmVz Z2VuZXJhbA== TGVhZ3Vl IHBhY2tldHM= IEluc3BlY3Rvcg== IEJlcmc= IGZyYXVkdWxlbnQ= IGNyaXRpY2l6ZQ== RnVu IGJsYW1pbmc= bmRyYQ== IHNsYXNo IEVzdG9u IHByb3Bvc2luZw== IHdoYWxlcw== IHRoZXJhcGlzdA== IHN1YnNldA== IGxlaXN1cmU= RUxE IENWRQ== IEFjdGl2aXR5 IGN1bG1pbg== c2hvcA== IERBWQ== aXNjaGVy IEFkbWlyYWw= IEF0dGFja3M= IDE5NTg= IG1lbW9pcg== IGZvbGRlZA== IHNleGlzdA== IDE1Mw== IExJ IHJlYWRpbmdz IGVtYmFycmFzc21lbnQ= IEVtcGxveW1lbnQ= d2FydA== Y2hpbg== IGNvbnRpbnVhdGlvbg== bGlh UmVjZW50bHk= IGR1ZWw= IGV2YWN1YXRpb24= IEthc2htaXI= IGRpc3Bvc2l0aW9u IFJpZw== IGJvbHRz IGluc3VyZXJz NDY3 TWV4 IHJldGFsaWF0aW9u IG1pc2VyeQ== IHVucmVhc29uYWJsZQ== cmFpbmluZw== SW1t IFBV ZW1lcg== IGdlbml0YWw= 44Kz IENhbmR5 IG9uaW9ucw== IFBhdHQ= bGluZXI= IGNvbmNlZGVk IGZh IGZvcmM= IEhlcm5hbmRleg== IEdlb2Zm ZGViaWFu IFRlYW1z IGNyaWVz IGhvbWVvd25lcnM= MjM3 QUJD IHN0aXRjaA== IHN0YXRpc3RpYw== IGhlYWRlcnM= IEJpb2xvZ3k= IG1vdG9ycw== IEdFTg== IExpcA== IGhhdGVz IGhlZWw= U2VsZg== aXBs RURJVA== b3J0aW5n IGFubm90 IFNwZWVjaA== b2xkZW1vcnQ= IEphdmFzY3JpcHQ= IExlQnJvbg== IGZvb3RwcmludA== IGZu IHNlaXp1cmVz bmFz aGlkZQ== IDE5NTQ= IEJlZQ== IERlY2xhcmF0aW9u IEthdGll IHJlc2VydmF0aW9ucw== TlI= ZmVtYWxl IHNhdHVyYXRlZA== IGJpYmxpY2Fs IHRyb2xscw== RGV2aWNl cGhvdG9z IGRydW1z 44OJ44Op44K044Oz TmlnaHQ= ZmlnaHRlcg== IEhhaw== cmliZXI= IGN1c2g= IGRpc2NpcGxpbmFyeQ== YmF1bQ== IEdI IFNjaG1pZHQ= aWxpYnJpdW0= IHNpeHR5 IEt1c2huZXI= cm90cw== IHB1bmQ= IFJhYw== IHNwcmluZ3M= IGNvbnZl QnVzaW5lc3M= RmFsbA== IHF1YWxpZmljYXRpb25z IHZlcnNlcw== IG5hcmNpc3M= IEtvaA== IFdvdw== IENoYXJsb3R0ZXN2aWxsZQ== ZWRv IGludGVycm9nYXRpb24= IFdvb2w= MzY1 QnJpYW4= IOKckw== IGFsbGVnZXM= b25kcw== aWRhdGlvbg== IEphY2tpZQ== eXU= IGxha2Vz IHdvcnRod2hpbGU= IGNyeXN0YWxz IEp1ZGE= IGNvbXByZWhlbmQ= IGZsdXNo IGFic29ycHRpb24= IE9D IGZyaWdodGVuZWQ= IENob2NvbGF0ZQ== TWFydGlu IGJ1eXM= IGJ1Y2tz IGFwcGVsbA== IENoYW1waW9uc2hpcHM= IGxpc3RlbmVy IERlZmVuc2l2ZQ== IGN6 dWRz IE1hdGU= IHJlcGxheQ== IGRlY29yYXRlZA== IHN1bms= IFZJUA== IEFuaw== IDE5NQ== YWFhYQ== Tm9ib2R5 IE1pbGs= IEd1cg== IE1r IFNhcmE= IHNlYXRpbmc= IFdpZA== VHJhY2s= IGVtcGxveXM= IGdpZ2FudGlj QVBQ 44Kn aW52ZW50b3J5 IHRvd2Vs YXRjaGU= bGFzdGluZw== IFRM IGxhdGVuY3k= IGtuZQ== QmVy bWVhbmluZw== IHVwaGVsZA== IHBsYXlncm91bmQ= IG1hbnQ= U2lkZQ== IHN0ZXJlbw== IG5vcnRod2VzdA== IGV4Y2VwdGlvbmFsbHk= IHJheXM= IHJlY3VycmluZw== RHJpdmU= IHVwcmlnaHQ= IGFiZHVjdA== IE1hcmF0aG9u IGdvb2RieWU= IGFscGhhYmV0 aHA= IGNvdXJ0cm9vbQ== cmluZ3Rvbg== b3RoaW5n VGFn IGRpcGxvbWF0cw== IGJhcmJhcg== IEFxdWE= MTgz MzMzMw== IG1hdHVyaXR5 IGluc3RhYmlsaXR5 IEFwYWNoZQ== ID09PQ== IGZhc3Rpbmc= IEdyaWQ= TW9kTG9hZGVy IDE1Mg== QWJz IE9wZXJhdGluZw== ZXR0aQ== IGFjcXVhaW50 RG9ubmVsbA== IEtlbQ== IEZvcmdl IGFybW9yZWQ= TWls IHBoaWxvc29waGVycw== aW52ZXN0 UGxheWVycw== 4og= IG15cmlhZA== IGNvbXJhZGVz Um90 IHJlbWVtYmVyaW5n IGNvcnJlc3BvbmRz IHByb2dyYW1tZXJz IEx5bm4= IG9saWc= IGNvaGVyZW50 eW5jaHJvbg== IENoZW1pY2Fs IGp1Z2c= cGFpcg== cG9zdHM= RXll IElubmVy IHNlbWVzdGVy b3R0ZXN0 IEVtaXJhdGVz cmljYW5lcw== b3JvdXNseQ== bWl0cw== IFdpcw== IGRvZGdl bG9jYXRpb24= IGZhZGVk QW1hem9u IFByb2NlZWQ= IElORk8= am91cm5hbA== IFRydWNr VGVu IDIxNw== IHN0YXR1dGVz bW9iaWxl IFR5cGVz UmVjb21t YnVzdGVy cGV4 IGxlZ2VuZHM= IGhlYWRhY2hl ZmFjZWQ= IFdpRmk= aWZ0eQ== IEhFUg== IGNpcmN1aXRz RVJST1I= MjI2 b2xpbg== IGN5bGluZGVy b3NwYWNl aWtlcnM= UHJlbQ== UXVhbnQ= IGNvbmZsaWN0aW5n IHNsaWdodGVzdA== IGZvcmdlZA== aW9uYWdl U3RlcGhlbg== IEt1Yg== IE9wcG9ydHVu IEhlYWw= IGJsbw== IHJ1bGVycw== IGh1aA== IHN1Ym1hcmluZQ== Znk= YXNzZXI= IGFsbG93YW5jZQ== IEthc2ljaA== IFRhcw== IEF1c3RyYWxpYW5z Rm9yZ2VNb2RMb2FkZXI= IOKGkQ== IE1hdHJpeA== YW1pbnM= IDEyMDA= IEFjcXU= MjM2 RG9jdW1lbnQ= IEJyZWFraW5n MTkz IFN1YnN0 IFJvbGxlcg== IFByb3BlcnRpZXM= IE5J dGllcg== IGNydXNoaW5n IGFkdm9jYXRpbmc= RnVydGhlcm1vcmU= a2VlcGVycw== IHNleGlzbQ== eGQ= IGNhbGxlcg== IFNlbnNl Y2hpZXZl IFRG IGZ1ZWxlZA== IHJlbWluaXNjZW50 IG9ic2Vzcw== dXJzdA== IHVwaG9sZA== IEZhbnM= aGV0aWNz IOKX IEJhdGg= IGJldmVyYWdl IG9zY2lsbA== MjU0 IHBvbGVz IGdyYWR1YWw= IGV4dGluZw== IFN1ZmY= IFN1ZGRlbmx5 IGxpa2luZw== IDE5NDk= dW5jaWF0aW9u YW1pbmF0aW9u IE9tYXI= IExW IENvbnNlcXVlbnRseQ== IHN5bnRoZXM= IEdJRg== IHBhaW5z IGludGVyYWN0aW5n dW91c2x5 aW5jcmU= IHJ1bW9y IFNjaWVudG9sb2d5 MTk3 IFppZw== IHNwZWxsaW5n IEFTUw== IGV4dGluZ3U= bXNvbg== IGdo IHJlbWFya2Vk IFN0cmF0ZWdpYw== IE1PTg== 5aU= Z2Fl IFdIQVQ= RXJpYw== IENhbXB1cw== IG1ldGhhbmU= IGltYWdpbg== SlVTVA== IEFsbQ== WFQ= aXE= IFJTUw== IHdyb25nZG9pbmc= YXR0YQ== IGJpZ290 IGRlbW9uc3RyYXRvcnM= IENhbHZpbg== IFZpbGxh IG1lbWJyYW5l IEF3ZXNvbWU= IGJlbmVmaWM= MjY4 IG1hZ25pZmljZW50 IExvdHM= R3JlZw== IEJvcmlz IGRldGFpbmVlcw== IEhlcm1hbg== IHdoaXNwZXJlZA== IGF3ZQ== UHJvZmVzc29y ZnVuZGluZw== IHBoeXNpb2xvZ2ljYWw= IERlc3RydWN0aW9u IGxpbWI= IG1hbmlwdWxhdGVk IGJ1YmJsZXM= IHBzZXVk IGh5ZHJh IEJyaXN0b2w= IHN0ZWxsYXI= IEV4cGFuc2lvbg== IEtlbGw= IEludGVyZXN0aW5nbHk= IG1hbnM= IGRyYWdnaW5n IGVjb2xvZ2ljYWw= IEZpdA== IGdlbnQ= IGJlbmVmaXRlZA== IEhhaXRp IHBvbHln 44OO IDIwMzA= IHByb3c= IHJlY29uc3RydWN0aW9u IHdhc3Q= IHBzeWNoaWM= IEdyZWVrcw== SGFuZGxlcg== MTYy IFB1bHNl IHNvbGljaXQ= IHN5cw== IGluZmx1eA== IEdlbnRsZQ== cGVyY2VudA== IHByb2xpZmVyYXRpb24= IHRheGFibGU= IGRpc3JlZ2FyZA== IGVzY2FwaW5n IGdpbmdlcg== IHdpdGhzdGFuZA== IGRldmFzdGF0ZWQ= IERldw== c2VyaWVz IGluamVjdGVk ZWxhaWRl IHR1cm5vdmVy aGVhdA== mYI= SGFwcHk= IFNpbGVudA== 44Kt aXZpc20= IGlycmF0aW9uYWw= QU1B IHJlZWY= cnVi IDE2Mg== IGJhbmtlcnM= IEV0aGljcw== dnY= IGNyaXRpY2lzbXM= S24= MTg2 TW92aWU= IFRvcmllcw== IG5vb2Q= IGRpc3RvcnRpb24= RmFsc2U= b2RvcmU= IHRhc3R5 UmVzZWFyY2g= IFVJRA== LSk= IGRpdm9yY2Vk IE1V IEhheWVz IElzbg== aWFuaQ== IEhR ICIj aWduYW50 IHRyYXVtYXRpYw== IExpbmc= SHVu IHNhYm90 b25saW5l cmFuZG9t IHJlbmFtZWQ= cmFyZWQ= S0E= ZGVhZA== w6l0 IEFzc2lzdGFuY2U= IHNlYWY= KysrKysrKys= IHNlbGRvbQ== IFdlYmI= IGJvb2xlYW4= dWxldA== IHJlZnJhaW4= IERJWQ== cnVsZQ== IHNodXR0aW5n IHV0aWxpemluZw== bG9hZGluZw== IFBhcmFt Y29hbA== b290ZXI= IGF0dHJhY3Rpbmc= IERvbA== IGhlcnM= YWduZXRpYw== IFJlYWNo aW1v IGRpc2NhcmRlZA== IFBpcA== MDE1 w7xy IG11Zw== SW1hZ2luZQ== Q09M IGN1cnNlZA== IFNob3dz IEN1cnRpcw== IFNhY2hz c3BlYWtpbmc= IFZpc3Rh IEZyYW1ld29yaw== b25nbw== IHN1YnJlZGRpdA== IGNydXM= IE92YWw= Um93 Z3Jvd2luZw== IGluc3RhbGxtZW50 IGdsYWM= IEFkdmFuY2U= RUNL IExHQlRR TEVZ IGFjZXQ= IHN1Y2Nlc3NpdmU= IE5pY29sZQ== IDE5NTc= UXVvdGU= IGNpcmN1bXN0YW5jZQ== YWNrZXRz IDE0Mg== b3J0aXVt IGd1ZXNzZWQ= IEZyYW1l IHBlcnBldHJhdG9ycw== IEF2aWF0aW9u IEJlbmNo IGhhbmRj QXA= IDE5NTY= MjU5 cmFuZA== TmV0TWVzc2FnZQ== ZGlu dXJ0bGVz aGln IFZJSUk= ZmZpdGk= IFN3b3Jkcw== YmlhbA== IGtpZG5hcHBpbmc= ZGV2aWNl IGJhcm4= IEVsaQ== YXVjYXM= U2VuZA== Q29uc3RydWN0ZWQ= IMK9 IG5lZWRsZXM= IGFkdmVydGlzZW1lbnRz IHZvdQ== IGV4aGliaXRlZA== IEZvcnRyZXNz QXNr QmVycnk= VFlQRQ== IGNhbmNlcnM= dW1waW5n IFRlcnJpdG9yeQ== IHBydWQ= IG5hcw== IGF0aGVpc3Q= IGJhbGFuY2Vz 44Gf IFNoYXdu JiY= IGxhbmRzYw== IFJHQg== IHBldHR5 IGV4Y2VsbGVuY2U= IHRyYW5zbGF0aW9ucw== IHBhcmNlbA== IENoZXY= RWFzdA== IE91dHB1dA== aW1p IGFtYmllbnQ= IFRocmVhdA== IHZpbGxhaW5z IDU1MA== SUNB IHRhbGxlcg== IGxlYWtpbmc= Y3Vw IHBvbGlzaA== IGluZmVjdGlvdXM= IEtD IEBA YmFja2dyb3VuZA== IGJ1cmVhdWNyYWN5 IFNhaQ== dW5sZXNz aXRpb3Vz IFNreXBl QXRs SURFTlQ= MDA4 IGh5cG9jcg== IHBpdGNoZXJz IGd1ZXNzaW5n IEZJTkFM QmV0d2Vlbg== IHZpbGxhZ2Vycw== IDI1Mg== ZmFzaGlvbg== IFR1bmlz QmVo IEV4Yw== IE1JRA== Mjg4 IEhhc2tlbGw= MTk2 IE5PUg== IHNwZWNz IGludmFyaQ== IGdsdXQ= IENhcnM= IGltcHVsc2U= IGhvbm9ycw== Z2Vs IGp1cmlzZGljdGlvbnM= IEJ1bmRsZQ== dWxhcw== Q2FsaWZvcm5pYQ== IEluY3JlYXNl IHBlYXI= IHNpbmdsZXM= IGN1ZXM= IHVuZGVyd2VudA== IFdT IGV4YWdnZXJhdGVk IGR1YmlvdXM= IGZsYXNoaW5n TE9H KV0u Sm91cm5hbA== dGc= VmFu IElzdGFuYnVs IEluc3A= IEZyYW5rZW4= RHJhdw== IHNhZG5lc3M= IGlyb25pYw== IEZyeQ== eGM= IDE2NA== aXNjaA== V2F5 IFByb3Rlc3RhbnQ= aG9ybg== IHVuYWZm IFZpdg== aWxsYXM= IFByb2R1Y3Rpb25z IEhvZ2Fu IHBlcmltZXRlcg== IFNpc3RlcnM= IHNwb250YW5lb3Vz IGRvd25zaWRl IGRlc2NlbmRhbnRz IG9ybg== d29ybQ== SmFwYW5lc2U= IDE5NTU= IDE1MQ== IERvaW5n ZWxzZW4= dW1ibGVz IHJhZGljYWxseQ== IERydW0= IEJhY2g= IGxpYWJpbGl0aWVz IE9C IEVsZW1lbnRhcnk= IG1lbWU= eW5lcw== IGZpbmdlcnByaW50 IEdyYWI= IHVuZGVydGFrZQ== TWVtYmVycw== IFJlYWRlcg== IFNpbXM= Z29k IGh5cG90aGV0aWNhbA== c2NpZW50 IEFK IGNoYXJpc20= IGFkbWlzc2lvbnM= IE1pc3NpbGU= dHJhZGU= IGV4ZXJjaXNpbmc= IEJhY2tncm91bmQ= V3JpdHRlbg== IHZvY2Fscw== d2hldGhlcg== IHZp IFdpbm5lcg== IGxpdHRlcg== IFNob290aW5n U1RFTQ== 44Kh IEFGTA== IHZhcmlhYmlsaXR5 IGVhdHM= IERQUw== YnJvdw== IGVsZXBoYW50cw== IHN0cmF0 IMU= IHNldHRsZXJz TWF0dGhldw== IGluYWR2ZXJ0 SEk= IElNRg== IEdvYWw= IG5lcnZlcw== Sm9obnNvbg== ZXll YWJsaXNobWVudA== VGh1cnNkYXk= QklMSVRZ SGFk YW1vdG8= aGV0YW1pbmU= ZXBz IG1pdG9jaG9uZA== IGNvbXByZXNzZWQ= IFRyZXZvcg== IEFuaW1hbHM= VG9vbA== TG9jaw== IHR3ZWFr IHBpbmNo IGNhbmNlbGxhdGlvbg== UG90 IGZvY2Fs IEFzdHJvbg== MTcz IEFTQw== IE9USEVS dW1uaQ== IGRlbWlzZQ== ZGw= 2YU= U2VtaXRpc20= IGNyYWNraW5n IGNvbGxhYm9yYXRpdmU= IGV4cGxvcmVz c3Fs IGhlcmJz IGNvbmZpZ3VyYXRpb25z bWlz IFJlc3VsdA== YWNleQ== IFNtb2tl IHNhbmN0 ZWxpYQ== IGRlZ2VuZXI= IGRlZXBlc3Q= IHNjcmVhbWVk IG5hcA== U29mdHdhcmU= IFNUQVI= RUY= IFhpbg== c3BvbnNvcmVk bWFuc2hpcA== MjMz IHByaW1hcmllcw== IGZpbHRlcmluZw== IGFzc2VtYmxl bWls IE15ZXJz Ym93cw== IHB1bmNoZWQ= TWlj IGlubm92YXRpb25z IGZ1bmM= YW5kbw== IGZyYWNraW5n IFZ1bA== 0L7Q b3Nob3A= IEltbXVu IHNldHRsaW5n IGFkb2xlc2NlbnRz IHJlYnVpbGRpbmc= IHRyYW5zZm9ybWluZw== IHBhcm9sZQ== IGhhcmJvcg== IGJvb2tpbmc= b3Rpb25hbA== b25nZXZpdHk= IFlv YnVn IGVtZXJnZXM= IE1ldGhvZHM= IENodQ== UHJlcw== IER1bmdlb25z IHRyYWlsaW5n IFJ1bQ== IEh1Z2g= 5aSp IEVyYQ== IEJhdHRsZXM= UmVzdWx0cw== IFRyYWRpbmc= IHZlcnNh Y3Nz YXhpZXM= aGVldA== IGdyZWVk MTk4OQ== IGdhcmRlbnM= IGNvbnRpbmdlbnQ= UGFyaw== IExlYWZz aG9vaw== cm9iZQ== IGRpcGxvbWFjeQ== IEZ1ZWw= IEludmFzaW9u IHVwZ3JhZGluZw== TWFsZQ== IGVsaWM= IHJlbGVudGxlc3M= IENvdmVuYW50 YXBlc2g= IFRyb3A= VHk= cHJvZHVjdGlvbg== YXJ0eQ== IHB1bmNoZXM= YWtv Y3ljbG9wZWRpYQ== IFJhYmJpdA== IEhETUk= IDE0MQ== IGZvaWw= SXRlbUltYWdl IEZH IGltcGxlbWVudGF0aW9ucw== IFBvbQ== aXh0dXJlcw== IGF3YWl0 IDMzMA== YW11cw== IHVtYnJlbGxh IGZvcmVzZWU= c2VwYXI= IGNpcmN1bWNpc2lvbg== IHBlcmlwaGVyYWw= U2F5 IEV4cGVydA== SW5j IHdpdGhkcmV3 IEFuZGVycw== ZnJpZWQ= IHJhZGlvYWN0aXZl IE9wZW5pbmc= IGJvYXJkaW5n IE5E IG92ZXJ0aHJvdw== QWN0aXY= V1A= IEFjdHM= 15k= IG1vdGlvbnM= dmlj IE1pZ2h0eQ== IERlZmVuZGVy YWVy IHRoYW5rZnVs IEtpbGxpbmc= IEJyaXM= bW9pbA== IHByZWRpY3Rpbmc= MjY2 Y2hvaWNl IGtpbGxlcnM= IGluY3Vi IENoZXN0 YXRoZXJpbmc= IHByb2NsYWltZWQ= Zmxvd2Vy b3Nzb20= dW1ibGVkb3Jl IEN5Y2xpbmc= IE9jY3VweQ== QUdFUw== UGVu IFl1Zw== IHBhY2thZ2Vk IGhlaWdodGVuZWQ= Y290 c3RhY2s= Q29uZA== IHN0YW1wcw== bWFnZQ== IHBlcnN1YWRlZA== IGVuc2w= IENhcmRpbmFs IHNvbGl0YXJ5 IHBvc3Nlc3Npbmc= IENvcms= IGV2aWQ= IFRheQ== IGJsdWVz IGV4dHJlbWlzbQ== IGx1bmFy IGNsb3du VGVjaG4= IGZlc3RpdmFscw== IFB2UA== IExhcg== IGNvbnNlcXVlbnRseQ== cHJlc2VudA== IHNvbWVkYXk= 546L IE1ldGVvcg== IHRvdXJpbmc= Y3VsdHVyZQ== IGJlYWNoZXM= U2hpcA== Y2F1c2U= IEZsb29k 44Ov IHB1cml0eQ== dGhvc2U= IGVtaXNzaW9u Ym9sdA== IGNob3Jk IFNjcmlwdHVyZQ== THU= ICR7 Y3JlYXRlZA== T3RoZXJz MjU4 IGVsZW1lbnRhbA== IGFubm95ZWQ= IEFF ZGFu IFNhZw== UmVzZWFyY2hlcnM= IGZhaXJ5 4oCT4oCT PT09PT09PT09PT09 U21hcnQ= R0dHRw== IHNrZWxldG9ucw== IHB1cGlscw== bGlua2Vk IHVyZ2VuY3k= ZW5hYmxlZA== IEZ1Y2s= IGNvdW5jaWxs cmFi VUFM VEk= IGxpZmVz IGNvbmZlc3NlZA== QnVn IGhhcm1vbg== IENPTkZJRw== IE5ldXRyYWw= RG91Ymxl IHN0YXBsZQ== IFNIQQ== QnJpdGlzaA== IFNOUA== QVRPUg== b2Nv IHN3aW5naW5n Z2V4 b2xlb24= cGxhaW4= IE1pc3Npbmc= IFRyb3BoeQ== dmFyaQ== cmFuY2g= IDMwMQ== NDQw MDAwMDAwMDAwMDAwMDAwMA== IHJlc3RvcmluZw== IGhhdWw= dWNpbmc= bmVyZw== IGZ1dHVyZXM= IHN0cmF0ZWdpc3Q= cXVlc3Rpb24= IGxhdGVyYWw= IEJhcmQ= IHNvcg== IFJob2Rlcw== IERvd250b3du Pz8/Pz8t IExpdA== IEJlbmVk IGNvaWw= c3RyZWV0 IFBvcnRhbA== RklMRQ== IEdydQ== Kiw= MjMx bmV1bQ== IHN1Y2tlZA== IHJhcHBlcg== IHRlbmRlbmNpZXM= IExhdXJlbg== Y2VsbGFuZW91cw== MjY3 IGJyb3dzZQ== IG92ZXJj aGVhZGVy b2lzZQ== IGJlZXQ= IEdsZQ== U3RheQ== IG11bQ== IHR5cGVk IGRpc2NvdW50cw== VGFsaw== IE9n ZXhpc3Rpbmc= IFNlbGw= dXBo Q0k= IEF1c3RyaWFu IFdhcm0= IGRpc21pc3NhbA== IGF2ZXJhZ2Vz Y2FtZXJh IGFsbGVnaWFuY2U= TEFO PSIj IGNvbW1lbnRhdG9ycw== IFNldHRpbmc= IE1pZHdlc3Q= IHBoYXJtYWM= IEVYUA== IHN0YWlubGVzcw== Q2hpY2Fnbw== IHRhbg== MjQ0 IGNvdW50cnlzaWRl IFZhYw== Mjk1 IHBpbm5lZA== IGNyaXNlcw== IHN0YW5kYXJkaXplZA== VGFzaw== IEphaWw= IERvY2tlcg== Y29sb3JlZA== Zm9ydGg= In0s IHBhdHJvbnM= IHNwaWNl IG1vdXJu IE1vb2Q= IGxhdW5kcnk= IGVxdWlw IE1vbGU= eWxs IFRIQw== bmF0aW9u IFNoZXJsb2Nr IGlzc3U= IEtyZQ== IEFtZXJpY2Fz IEFBQQ== IHN5c3RlbWF0aWNhbGx5 IGNvbnRyYQ== IFNhbGx5 IHJhdGlvbmFsZQ== IGNhcnJpYWdl IHBlYWtz IGNvbnRyYWRpY3Rpb24= ZW5zYXRpb24= IEZhaWx1cmU= IHByb3Bz IG5hbWVzcGFjZQ== IGNvdmU= ZmllbGRz 44KL IHdvb2w= IENhdGNo IHByZXN1bWVk IERpYW5h cmFnb24= aWdp IGhhbW0= IHN0dW50 IEdVSQ== IE9ic2VydmF0b3J5 IFNob3Jl IHNtZWxscw== YW5uYWg= IGNvY2twaXQ= IER1dGVydGU= ODUw IG9wcHJlc3NlZA== YnJlYWtlcg== IENvbnRyaWJ1dA== IFBlcnU= IE1vbnNhbnRv IEF0dGVtcHQ= IGNvbW1hbmRpbmc= IGZyaWRnZQ== IFJpbg== IENoZXNz dWFsaXR5 IG9s UmVwdWJsaWNhbg== IEdsb3J5 IFdJTg== Li4uLi4uLg== YWdlbnQ= cmVhZGluZw== IGluaA== Sm9uZXM= IGNsaWNrcw== YWxhbg== IFtdOw== IE1hamVzdHk= IENlZA== b3B1cw== YXRlbA== w6o= QVJD IEVjdWFkb3I= 44Og IEt1cm8= IHJpdHVhbHM= IGNhcHRpdmU= IG91bmNl IGRpc2FncmVlbWVudA== IHNsb2c= ZnVlbA== UGV0 TWFpbA== IGV4ZXJjaXNlZA== IHNvbGlj IHJhaW5mYWxs IGRldm90aW9u IEFzc2Vzc21lbnQ= IHJvYm90aWM= b3B0aW9ucw== IFJQ IEZhbWlsaWVz IEZsYW1lcw== IGFzc2lnbm1lbnRz MDA3 YWtlZG93bg== IHZvY2FidWxhcnk= UmVpbGx5 IGNhdmFs Z2Fycw== IHN1cHByZXNzZWQ= IFNFVA== IEpvaG5z IHdhcnA= YnJva2Vu IHN0YXR1ZXM= IGFkdm9jYXRlZA== IDI3NQ== IHBlcmls b21vcnBo IEZlbWlu cGVyZmVjdA== IGhhdGNo TGli NTEy IGxpZmVsb25n MzEz IGNoZWVrcw== IG51bWJlcmVk IE11Zw== Qm9keQ== cmF2ZWw= V2VpZ2h0 IEphaw== IEhlYXRo IGtpc3Npbmc= IEpVU1Q= IHdhdmluZw== dXBsb2Fk IGluc2lkZXI= IFByb2dyZXNzaXZl IEZpbHRlcg== dHRh IEJlYW0= IHZpb2xlbnRseQ== aXBhdGlvbg== IHNrZXB0aWNpc20= IDE5MTg= IEFubmll IFNJ IGdlbmV0aWNz IG9uYm9hcmQ= YXRs IEZyaWVkbWFu IEJyaQ== Y2VwdGl2ZQ== IHBpcmF0ZQ== IFJlcG9ydGVy Mjc4 IG15dGhvbG9neQ== IGVjbGlwc2U= IHNraW5z IGdseXBo aW5naGFt RmlsZXM= Q291cg== d29tZW4= IHJlZ2ltZXM= IHBob3RvZ3JhcGhlZA== S2F0 IE1BWA== T2ZmaWNpYWxz IHVuZXhwZWN0ZWRseQ== IGltcHJlc3Npb25z RnJvbnQ= Ozs7Ozs7Ozs= IHN1cHJlbWFjeQ== IHNhbmc= IGFnZ3JhdmF0ZWQ= IGFicnVwdGx5 IFNlY3Rvcg== IGV4Y3VzZXM= IGNvc3Rpbmc= aWRlcHJlc3M= U3RhY2s= IFJOQQ== b2JpbA== IGdob3N0cw== bGRvbg== YXRpYmlsaXR5 VG9waWNz IHJlaW1idXJzZQ== IEhN IERlZw== IHRoaWVm eWV0 b2dlbmVzaXM= bGVhbmluZw== IEtvbA== IEJhc2tldGJhbGw= IGZp IFNlZWluZw== IHJlY3ljbGluZw== IFst Q29uZ3Jlc3M= IGxlY3R1cmVz UHN5 IG5lcA== IG1haWQ= IG9yaWVudGVk QVg= IHJlc3BlY3RmdWw= cmVuZQ== Zmx1c2g= IFVubG9hZGVk cmVxdWVzdA== Z3JpZA== IEFsdGVybmF0aXZlbHk= IEh1Z28= IGRlY3JlZQ== IEJ1ZGRoaXNt YW5kdW0= QW5kcm9pZA== IENvbmdv IEpveWNl IGFja25vd2xlZGdpbmc= aGVzaXZl IFRvbW9ycm93 IEhpcm8= dGhyZW4= IE1hY2Vk IGhvYXg= IEluY3JlYXNlZA== IFByYWRlc2g= V2lsZA== X19fX19f MTYx IGF1bnQ= IGRpc3RyaWJ1dGluZw== IFR1Y2tlcg== IFNTTA== IFdvbHZlcw== QnVpbGRpbmc= b3VsdA== IEx1bw== IFlhcw== IFNwaXI= IFNoYXBl IENhbWJvZA== IElQdg== IG1s IGV4dHJhZA== Mzkw IFBlbm55 ZHJlYW0= IHN0YXRpb25lZA== b3B0aW9uYWw= ZXdvcnRoeQ== Ljwv IHVuZGVydGFraW5n IGNoaWNrZW5z IHN0aW11bGk= IEVsc2U= aWdhdG9ycw== IEJlZ2lubmluZw== Y3Rvcnk= IHByZXBhcmVz IGRlbHRh IHZpY2luaXR5 dG9vbA== IHdvcmtzaG9wcw== TUh6 IGFjY3VzYXRpb24= IGhpc3Rvcmllcw== cm9wb2xpcw== IENodXJjaGlsbA== IG5lb24= IGJhZmY= ZGllcw== bWF5YmU= IOijj+immumGkg== IHN5bXB0b20= RUNI IE1hbnVlbA== IGJhbmFuYQ== IEhC ICoqKio= IEtvcmVhbnM= Y29sbA== RkI= IHByYXlpbmc= IENhbm5vdA== IE1pbGU= IGVtYnJhY2luZw== IFNpbGs= Mzkz b3RlcnM= RkQ= IGRheWxpZ2h0 YWxpYXM= IEJyaWdhZGU= IEhhbm5haA== IGNsZXJneQ== IHNvdXRoZWFzdA== IGFsY29ob2xpYw== IHByb3Bvc2Vz bGl2aW9u IGNhbGN1bGF0aW5n IHN0aW11bGF0ZQ== IHNwbGl0dGluZw== ZWlnaHQ= IEluZHk= cGxheXM= IFBpaw== IGRvbWVzdA== IGZvcmdpdmVuZXNz IFJpbmdz cGF0aWVudA== a2luc29u TW9udA== aWdpYmxl OyI= IHBlcmlvZGljYWxseQ== YW1tYWQ= IEJyaXR0 cGFyZA== IGFyYml0cmF0aW9u IFNjaG5laWRlcg== IENvcnBvcmF0ZQ== IE1heWE= IHNuYWtlcw== YXVt IGJsYXN0ZWQ= IG15c3Rlcmllcw== IHJldml2ZQ== b2NhbXA= IERvZGdl IE9wZXJh Mjc5 IG9ycGhhbg== IHNwZWNpZmllcw== IE1ldHM= RHVyYXRpb24= SGVu IGZpcmV3b3Jrcw== IHByb3NlY3V0ZQ== IFRpbGxlcnNvbg== ZHA= dXNhZ2U= bGluZXNz IERlYmlhbg== IDIyNA== cmlzZXM= IEluZmVjdA== YXRyYQ== IFJS IExvcg== ZGlmZg== IENoYXJsZXN0b24= IGFjb3VzdGlj IGFtdXNl MzMw IGNlcg== IFRhYw== IFsr IGNhcmRpYWM= IFJlc3RhdXJhbnQ= ZXJneQ== IGZ1eno= IGJpdGVz IGhhemFyZG91cw== IGJyaWdodGVy cmFucw== IFN0ZXBoYW5pZQ== ZXh0cmE= UkVU IENocmlzdGluZQ== IFN1ZQ== c3RhdGVtZW50 IGJvbHN0ZXI= IGFudGl0 UmFkaW8= QklU 44Kw IHZpc2lvbnM= IENvbmNlcHQ= IGlubGluZQ== IFBoaWxvc29waHk= aXNhbnM= IElydmluZw== w6M= dGFraW5n IGluY29uc2lzdA== IEt1bWFy IGxpZw== IFNjaHVtZXI= IFJlZ3VsYXRpb25z IEh6 dGhybw== IFZvbGRlbW9ydA== IE1FRA== IEZyZWRlcmljaw== UGFk MjIx IGFsbGVnaW5n IENvbW11bmljYXRpb24= IDE2Nw== IGZvcmVjYXN0cw== IHNwaWRlcnM= T3JnYW4= IFBhcnRpY2lwYW50cw== IE9wcw== ZGVzaWdu Q2xvc2U= IGZhY3Rv IGJvbWJlcnM= cmVzaXN0YW50 YXRlZ29yaWVz U2Nob29s IGhvbWV3b3Jr IGNvcnJv VHVlc2RheQ== IEJyZW5kYW4= IE1Y IFRT IFN0cmk= IHN0YWtlaG9sZGVycw== IE1pbGxlbm5pdW0= IHRyYW5zZmVycmluZw== SnVk IHRhYw== IDE2MDA= IFNESw== cmI= IGludGVycHJldGF0aW9ucw== IFNH IHVwc3RhaXJz IEhhcnZlc3Q= IHZhZ2luYQ== IGluZ2VzdA== eGY= IE9yaW9u IEpvZXk= IHNhbmR3aWM= IGltbW9ydGFs IGZsaXBwZWQ= b3J0ZXg= dGhyZWF0ZW5pbmc= IHNuaXBlcg== IGNvbnZlcnRz IGluc3RhbGxhdGlvbnM= IEJ1bGdhcg== b3JzY2hl bWFpbHM= IGx1cmU= IG5hcnJvd2x5 IGdyZW5hZGU= IEdpbmc= IHVuZGVyd2Vhcg== LS0tLS0tLS0tLS0tLS0= IGNoYXNlZA== IFZBTA== IHBhcmVudGluZw== IEhhbWI= IEJsYXo= IGFuYXJjaGlzdA== IE1lZGlhbg== IFByb2dyYW1z zr0= IG9iag== IE5va2lh b3JtYW4= YW5xdQ== YXRpc20= b3Bh IGZ1bGZpbGxpbmc= IHB1cHB5 IGVudGl0 IFNlYmFzdGlhbg== IHNob290ZXJz IHJpY2hlcg== 6KE= IHRlbXB0ZWQ= IEFUVA== IENW IHRvcmU= UmVzb3VyY2U= IERldmlscw== NDA4 aW5hdGlvbmFs IGFzc3VyYW5jZQ== IERhcnJlbg== IHdoaWNoZXZlcg== cG9zdXJl IGZ1cnk= U3RvY2s= IHVuaXZlcnNhbGx5 cmVzcG9uc2U= IG9haw== IHdvcmtsb2Fk IENvcm5lcg== ZWVsZQ== Ii4uLg== IGRlcHJpdmVk a293c2tp IGNhc3Rz IGFmZmlsaWF0aW9u IEFjaA== IEFza2Vk YXRoZQ== IGxhY3Q= IFRodQ== cm0= IGFpcmxpbmVz IG5vdGlvbnM= Rm9ybWF0 IEZBQQ== 44OK ZHJpdmVy IHRyYW5zY2VuZA== U2V0dGluZ3M= IFByb3NlY3V0 IHNwaW5hbA== IGRlZmF1bHRz Rks= IHByZWZlcnM= cmVuZGVyZWQ= dGh1cw== ZmlsbQ== IHRpZ2Vy IFNwaWNlcg== cmVjb2du IFJ1Z2J5 TmV0d29yaw== IHBpdHk= IGNvbXBhcnRtZW50 Y2FzdGVycw== IE1vbnJvZQ== IDcyMA== IGNvcnJlY3Rpb25z IGRvcGFtaW5l IEFa Q3V0 IHJvb21t IHNwZWN1bGF0ZQ== SGFzaA== IHJlc3RyaWN0aXZl MTExMQ== cmVkaWJsZQ== b25lbA== IHJhbXBhbnQ= cmVwb3J0ZWQ= IFN1aXRl IE1pbmltdW0= YWx5cw== YXphcmQ= bG9vcA== IGxlbnQ= c2hh IHZhbmRhbA== bWVudQ== IEJvZWhuZXI= IG5hcnJhdGl2ZXM= IGF1dGhlbnRpY2l0eQ== MjY5 YW5pYw== ZHV0eQ== Mjg1 IHRoYW5rZWQ= IGJldHJheWVk bGlmdA== IHNvdXRod2VzdA== IERleHRlcg== IEJvZA== IGtleXdvcmRz QXZlcmFnZQ== RElT IGV0aG5pY2l0eQ== ISks IE5hdGlvbmFscw== 4bk= IFRhaA== aW94aWQ= IHdpZGdldA== IHBhc3Rh IGJpbGxpbmc= IHRyaWxvZ3k= IExpbmVz IHNuaWZm IG5lcGhldw== TGF0ZQ== IHByaW5jaXA= IExvb3A= IE1hcnhpc3Q= IGRpc3NvbHZlZA== IGNvbnRleHRz IEFtb3VudA== IFNwaWtl IHRvdGFscw== IG9yZ2FuaXplcg== IHVwcmlzaW5n c2hpcHM= WVk= IE5vcnRoZWFzdA== bW9uZXk= Z3JhZGF0aW9u IGdvYWxrZWVwZXI= IEhlYXI= IHN0ZWFr IEJ1enpGZWVk IHNvbGVtbg== IFNjYW5k IHBvcHBpbmc= IGFkaGVyZQ== IEFsbGVn Ynl0ZQ== IFdvbHZlcg== IHVuaW4= IHJlY29s aXR1ZA== IG1pbWlj aWJ1cw== IHByZWRpY3Rz IEtlZXBlcg== aWF0aW5n IGRlY2VwdGlvbg== IGxlYXJudA== IGRpYXJ5 IGNvbmRpdGlvbmFs IHJlbGlj IGludm9rZQ== aWVuY2Vk 5Yg= IFBvbnQ= IGNlbGxwaG9uZQ== IHNwZWVkaW5n IHRhY2tsaW5n IG51ZGU= b3BlbmVk IE1hbmFmb3J0 IDE5NTI= IG1ham9ycw== IFNpbGVuY2U= IGxvZ2lzdGljcw== IHdlaWdodGVk IFBzeWNoaWF0 IjpbIg== IHNpY2tuZXNz IGRpdmlkZW5kcw== em9u UmVsZWFzZQ== IEtleXM= IEljaA== IGVueg== IEZlcm5hbmQ= IM6x IG1lYW5pbmdz IHBlbm55 IHN0ZXJu IGxhcg== IFB1Ymxpc2hlZA== IGJhY2tkcm9w S2lt IFN5bnQ= IGRlYnV0ZWQ= d20= IElzbGU= IHJlZ3VsYXRpbmc= b3R0aQ== IFNjaG9sYXJz aWNlc3Rlcg== IENoZWY= IHBvcHM= IExhdW5jaGVy IFZhcmlvdXM= IGNvbW1lbnRpbmc= b3NsYXY= ZW56aWU= IHJpdmFscnk= 4oKs UmVhbGx5 IG9yYw== IGJlYW4= IEp1ZHk= Tm90aWNl IEJpa2U= P10= IHJlbnRlZA== c3Rlbg== IGZvcmVmcm9udA== IEJhbGR3aW4= IHlpZWxkZWQ= dGFpbHM= UHJpbWU= IFNvdXJjZXM= aWNhdG9y U2Vhbg== IG1hcmNoaW5n T3V0cHV0 IEp1bmdsZQ== IHJlc2lkZQ== enpsZQ== IEFuZHJld3M= IHRvcnF1ZQ== QmFzaWM= QWN0dWFsbHk= c3RyYXA= cGVudGVy IGV4YW1z IFlh IDE1OQ== IERlY2lzaW9u IHJhbnNvbQ== ZXRlZW50aA== ZW5zaW5n MjEz IHN1bnNldA== NDA0 IFJhcGlk IEhlaW4= IEFib3JpZ2luYWw= IG9yZ2FuaXNt IFNldmVy IGNsYQ== YWpp U2ltcGxl IEZsYXZvcg== IEV2YWw= cHJ1cw== IGNob3J1cw== REFZ IGRlbm91bmNlZA== IGJpb2dyYXBoeQ== IFR1cm5idWxs UmVjZW50 Tm9ybWFs bGVjdGlvbnM= V29yZA== IGZlcnJ5 IFdhZ25lcg== aG9t VW5pdA== IHN1cGVybWFya2V0 IFNpdGg= IG5vbWluZWVz IGRpY3RhdG9yc2hpcA== aWRkbGVy IGFubm91bmNlcw== IFRoZW0= IE5lcHR1bmU= IGRlaXR5 IFlp IG1vbmFyY2g= QVJS IGludmFkZWQ= IEhvaw== dW50YXJ5 Q2VydGFpbg== ZWdh IGtpZGRpbmc= IFJlZ3VsYXRpb24= IHRyYXk= IHBob3RvZ3JhcGhlcnM= IEFyY2FuZQ== IGRpc2NoYXJnZWQ= IGV2YW5nZWxpY2Fs IGludGVyY2hhbmdl IGZpbG1tYWtlcg== IEVuZGxlc3M= IDI5MA== IFNhbHZhZG9y QVNZ IFNpZ25hbA== IHdyYXRo 4pw= bG90 Jy8= IHByb2plY3RpbGU= IGVtcGxveWluZw== IEludGVyZmFjZQ== MTkx YXRlbGxpdGU= IFJhdGg= cGFja2FnZQ== IGluZGljYXRpb25z SmFzb24= IGFyZ3M= IEdIeg== IHRpbHQ= bmFudHM= d29u 44K1 cmVkZA== cmVzY2VudA== IENhbGVuZGFy IG1vZHVsYXI= IGFzc2lzdGluZw== IHJlZGVlbQ== IEJlYW4= IHdvcnNo IGRlY2VudHJhbGl6ZWQ= KS4uLg== Mzc3 IGFycmF5cw== IGFjY29tcGxpc2htZW50cw== zr8= ZG90 IG11dHVhbGx5 IG9ic3RydWN0 IG1pc3JlcHJlc2VudA== b3Jlc3Q= aW9uaWM= cnVjZQ== JTs= IGtub3dpbmdseQ== cG9ydGluZw== aW5lbnRseQ== QXJp IFNjaHVsdHo= RGE= IENlcmU= IG9ic29sZXRl hYs= Z2l2ZQ== IGJhaXQ= IGVubGFyZw== TmVpbGw= IDE5MzM= IHJlY29uc2lkZXI= IFNlcmdlYW50 IERpYW5l IENvZ24= IEljb24= UG9zaXRpb24= IGZvc3Q= IHN0aXJyaW5n c2V2ZW4= IFNwYWNlWA== dWdnZXRz IG1lZGQ= R2Fs IFNpc3Rlcg== Qm95 IHRyaWdnZXJpbmc= VGFraW5n IHNjcmVhbXM= IGNhdXNhbA== IGF3YWtlbg== QXJt Mjk3 IGRpc3BhdGNoZWQ= IEZBTFNF IG9yZ2FuaXphdGlvbmFs IFRvbmc= IGRpbGVtbWE= ZGVtb24= U3Bs IGhvb2tz dWRpbmc= IHZhbGlkYXRl IHBvdGlvbg== IGNsYXc= IGJ1cmds IHF1aXI= QUNB IEJyZW5uYW4= IGR1cmFiaWxpdHk= IGJvbWJpbmdz IFdpbmRvdw== IGN1bHByaXQ= MzI1 VGhlcmVmb3Jl dW1iZXJlZA== cGVyZm9ybWFuY2U= d2FydHM= IGVuZm9yY2luZw== IEJsb3c= IHJlcHJpbnQ= aWZheA== YWxwaGE= IHNpbmlzdGVy IGJ1cmdlcg== ZmlnaHRpbmc= U2NvcmU= IFN0b25lcw== aWVt NDA1 Y2hlbXk= IHZpbmVnYXI= bm9t IHByZXZhaWxpbmc= IExhdGVzdA== wrY= IGJh IFdyaXRlcg== IDE3Nw== IENvbndheQ== IGNvbGxlY3Rz IHF1YW50aXRhdGl2ZQ== IGhvcnJvcnM= b2dlbnM= IFNsb3Y= IGxheXM= aGF3 IFNsYXNo IG5pZ2h0Y2x1Yg== IERhdmllcw== IGJyaWRl IFNjYXJsZXQ= eW1t IEFwcGxpY2F0aW9ucw== dmVsZW5ndGg= IHJldml2YWw= IHNvZnRseQ== IHpvbw== aXRhaXJl Q3Vy IGVsZWN0cm9t IHBsYW50aW5n T1RP IEVsZW1lbnRz IHN3YWxsb3c= cG9ydGVy IGxhcHRvcHM= IHBlYW51dA== IGxvYmJ5aXN0cw== zrI= UGFuZWw= IEpvYW4= aW1pbA== dG5j IHJlc2lzdGVk IG91dHdl IHJldGFpbmluZw== YXRyaQ== IHBvb3Jlcg== IFN5cmlhbnM= IEhhbW1vbmQ= IHdlbGQ= dWRlcg== dG9waWM= IFRU cmljaWE= IHRoaWV2ZXM= TGlj IEd1c3Q= IFdheXM= YXJldGg= MjQz IGJyb2FkY2FzdGVy c2hpZWxk YXNzaXVt dWJsZQ== IGFpcnN0cmlrZXM= b25zbw== IHBlZGFs IGNvbGxlY3RvcnM= IFZhbmRlcg== IE1lc2E= IGRpY3RhdG9y IGRpcg== ZW50b24= Y2FydA== c2NvcmU= YWRkZXI= Q3J5 IHNzaA== Z2dlcg== IGRydW5rZW4= IEdT IFNlYXQ= IGNvcm5lcmJhY2s= IHNraXBwZWQ= IFJlc2VhcmNoZXJz IEF1ZGk= UmVmZXJlbmNl IGhhdW50ZWQ= w6s= IENsaW5pYw== Y3o= IHBz IFBhbGFkaW4= IFJlY2lwZQ== IHN0aWdtYQ== b3BweQ== IG1vbmtleXM= IEhhd2s= U2Fk Ii8+ IFdvcmtzaG9w IFJldGFpbA== IEF2YXRhcg== NjI1 TmE= IFZD IFNlY3VyZQ== TVk= MTk4OA== b3NzaXA= IHByb3N0YXRl IHVuZGVu IGdhbWVy IENvbnRlbnRz IFdhcmhhbW1lcg== IFNlbnRpbmVs MzEw IHNlZ3JlZ2F0aW9u IEZsZXg= IE1BWQ== IGRyaWxscw== IERydWdz SXNsYW1pYw== IHNwdXI= IGNhZmU= IGltYWdpbmFyeQ== IGd1aWRpbmc= IHN3aW5ncw== IFRoZW1l b2J5 IG51ZA== IGJlZ2dpbmc= IHN0cm9uZ2g= IHJlamVjdGluZw== IHBlZGVzdHJpYW5z IFByb3NwZWN0 UmFyZQ== c2xl IGNvbmNlc3Npb25z IENvbnN0aXR1dGlvbmFs IGJlYW1z IGZpYmVycw== cG9vbg== IGluc3RpbmN0cw== cHJvcGVydHk= IEJJRw== U2FuZGVycw== aW1hdGVz IGNvYXRpbmc= IGNvcnBzZXM= IFRSVUU= Y2hlY2tlZA== IDE2Ng== QXNo IEpT IEZpY3Rpb24= IGNvbW11bmFs IGVuZXJnZXRpYw== b29vb29vb28= IG5vd2FkYXlz SUxE aWJv IFNVVg== UmVu IGR3ZWxsaW5n U2lsdmVy IHRhbGx5 IE1vdmluZw== IGNvd2FyZA== IGdlbmVyYWxz IGhvcm5z IGNpcmN1bGF0ZWQ= IHJvYmJlZA== IFVubGltaXRlZA== IGhhcmFzc2Vk IGluaGliaXQ= IGNvbXBvc2Vy IFNwb3RpZnk= IHNwcmVhZHM= MzY0 IHN1aWNpZGFs IG5vaXNlcw== IFN0dXI= IHNhZ2E= IEthZw== aXNv IHRoZW9yZXRpY2FsbHk= TW9uZXk= IHNpbWlsYXJpdHk= IHNsaWNlZA== dXRpbHM= aW5nZXM= Ii0= IGFudGg= IGltcGVk TW9kdWxl VGhyb3VnaG91dA== IG1lbnVz Y29tbWl0dGVl YW5kaQ== b2Jq aW5hdg== ZmlyZWQ= IEFiZHVsbGFo IHVuZGVhZA== IGZvbnRz SG9sZA== RU5H IHN1c3RhaW5hYmlsaXR5 IGZsaWNr IHJhem9y IEZlc3Q= IENoYXJhY3RlcnM= IHdvcmRpbmc= IHBvcHVsaXN0 IGNyaXRpY2l6aW5n IG11c2U= dmluZQ== IGNhcmRib2FyZA== IGtpbmRseQ== IGZyaW5nZQ== IFRoZWZ0 aWN1bHR1cmFs IGdvdmVybm9ycw== IO+/ve+/ve+/ve+/vQ== IDE2Mw== IHRpbWVvdXQ= IEF1dGg= Q2hpbGRyZW4= QVU= IHJlZGVtcHRpb24= IEFsZ2Vy IDE5MTQ= IHdhdmVk IGFzdHJvbmF1dHM= b2dyYW1z IHN3YW1w IEZpbm5pc2g= IGNhbmRsZQ== IHRvbm5lcw== dXRt IHJheQ== IHNwdW4= IGZlYXJmdWw= YXJ0aWNsZXM= IGNhdXM= b3JpY2FsbHk= IFJlcXVpcmVz IEdvbA== IHBvcGU= IGluYXVndXJhbA== IGdsZQ== QURB IElTSUw= IE9mZmVuc2l2ZQ== IHdhdGNoZG9n IGJhbGNvbg== ZW50aXR5 IEhvbw== IGdhbGxvbg== QUND IGRvdWJsaW5n IGltcGxpY2F0aW9u IFNpZ2h0 IGRvY3Ry LS0tLS0tLQ== IFxc IG1hbHQ= Um9sbA== IOKJpQ== IHJlY2Fw YWRkaW5n dWNlcw== IEJlbmQ= ZmlndXJl IHR1cmtleQ== IHNvY2lldGFs IFRpY2tldHM= IGNvbW1lcmNpYWxseQ== IHNwaWN5 IDIxNg== IFJhbXA= IHN1cGVyaW9yaXR5 w68= IFRyYWNrZXI= Q2FybA== IENveQ== IFBhdHJpb3Q= IGNvbnN1bHRlZA== IGxpc3Rpbmdz IHNsZXc= cmVlbnNob3Q= IEdvbmU= IFsuLi5d MzA5 IGhvdHRlc3Q= 2LE= IHJvY2t5 IERpYXo= IG1hc3NhZ2U= IHBhcmFseQ== IHBvbnk= QXo= IGNhcnRyaWRnZQ== IE5a IHNuYWNr IExhbWFy cGxlbWVudA== IExlc2xpZQ== IG1hdGVy IHNuaXBw MjQ2 IGpvaW50bHk= IEJyaXNiYW5l IGlQb2Q= IHB1bXBpbmc= IGdvYXQ= IFNoYXJvbg== ZWFsaW5n IGNvcm9u IGFub21hbA== cmFoaW0= IENvbm5lY3Rpb24= IHNjdWxwdHVyZQ== IHNjaGVkdWxpbmc= IERhZGR5 YXRoaW5n IGV5ZWJyb3dz IGN1cnZlZA== IHNlbnRpbWVudHM= IGRyYWZ0aW5n RHJvcA== KFs= IG5vbWluYWw= IExlYWRlcnNoaXA= IEdyb3c= IDE3Ng== IGNvbnN0cnVjdGl2ZQ== aXZhdGlvbg== IGNvcnJ1cHRlZA== Z2VyYWxk IENyb3M= IENoZXN0ZXI= IExhcA== 44Gq T1RI REFUQQ== IGFsbW9uZA== cHJvYmFibHk= SW1w IGZlYXN0 IFdhcmNyYWZ0 Rmxvcg== IGNoZWNrcG9pbnQ= IHRyYW5zY3JpcHRpb24= IDIwNA== IHR3ZWFrcw== IHJlbGlldmU= U2NpZW5jZQ== IHBlcmZvcm1lcg== Wm9uZQ== IHR1cm1vaWw= aWdhdGVk aGliaXQ= IENhZmU= dGhlbWVk IGZsdW9y YmVuY2g= IGRlY29t IFVudA== IEJhcnJldHQ= IEZhY3Rz IHRhc3Rpbmc= IFBUU0Q= IFNlYWw= IEp1ZGFpc20= IER5bmFtaWM= IENvcnM= VmU= IE1pbmc= IFRyYW5zZm9ybQ== dm9u IERlZmVuZGVycw== IFRhY3RpY2Fs IFZvbg== IFVuaXZlcnM= IGRpc3RvcnRlZA== IEJyZWF0aA== Pyci IGFnb24= IERlYWRseQ== IGxhbg== IEN5Y2xl b3JuZWQ= IHJlbGlhYmx5 IGdsb3I= IE1vbmtleQ== 44Oh IGFkcmVu IG1pY3Jvd2F2ZQ== IEFsYmFu aXJjcmFmdA== ZGlnaXQ= c21hcnQ= IERyZWFk wq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq8= e3s= IFJvY2hlc3Rlcg== IHNpbXBsaWZpZWQ= IGluZmxpY3RlZA== IHRha2VvdmVy IHlvdXJzZWx2ZXM= YWRpdGlvbmFs IG11c2N1bGFy S1M= IGluZ2Vu VGF4 IEZlYXR1cmU= Mjc3 IGNydWM= IGNyYXRl IHVuaWRlbnRpZmllZA== IGFjY2xhaW1lZA== IE1hbmdh IEZyYW5jZXM= IE5lcGFs IEdlcmFsZA== IEt1d2FpdA== IHNsYWlu IEhlYg== IEdva3U= 44Gu5g== Mjg2 TXJz IENvZHk= IFNhbmN0dWFyeQ== MDE2 IGRpc21hbnQ= IGRhdGFzZXQ= IEhvbmQ= YnVjaw== IFBhdHRlcnNvbg== IHBhbGV0dGU= IEdE aWNvbA== IExvZGdl IHBsYW5ldGFyeQ== YWtpbg== IFJlZ2lzdGVyZWQ= YWJ3ZQ== IFBldGVyc2J1cmc= IGhhaWxlZA== IFBpZWNl U2NoZQ== IERPSg== IGVudW1lcg== MTgx IE9ic2VydmVy IEJvbGQ= Zm91bmRlZA== Y29tbWVyY2U= IGV4cGxvaXRz IEZpbmRpbmc= VVJO IFNuZQ== IEFjaWQ= YXlldHRl IFZhbHVlcw== IGRyYXN0aWM= IGFyY2hpdGVjdHVyYWw= ICIu 15U= dW1wZWQ= IHdyYXBwaW5n IHdpZG93 IFNsYXllcg== bGFjZQ== b25jZQ== R2VybWFueQ== YXZvaWQ= IHRlbXBsZXM= UEFS w7Q= IEx1Y2lmZXI= IEZsaWNrcg== bG92 Zm9yY2Vz IHNjb3V0aW5n IGxvdWRlcg== dGVzeQ== IGJlZm9yZWhhbmQ= xJM= IE5lb24= IFdvbA== IFR5cGljYWxseQ== IFBvbGl0aWNv LSstKw== IGJ1aWxkZXI= IGRlcml2ZQ== S2lsbA== IHBva2Vy IGFtYmlndW91cw== IGxpZnRz IGN5dA== IHJpYnM= b29kbGU= IFNvdW5kcw== aGFpcg== IFN5bmRyb21l dGY= IHByb3BvcnRpb25hbA== dWlk IHBlcnRhaW5pbmc= IEtpbmRsZQ== IE5lZ3Jv IHJlaXRlcmF0ZWQ= IFRvbmlnaHQ= b3Rocw== IENvcm5lbGw= IG93aW5n IDIwOA== ZWxmYXJl b2NhdGluZw== IEJpcmRz U3Vic2NyaWJl IGVzc2F5cw== IGJ1cmRlbnM= IGlsbHVzdHJhdGlvbnM= YXJpb3Vz RVJBTA== IENhbGN1bA== IHhlbg== IExpbmtlZElu IEp1bmc= IHJlZGVzaWdu Q29ubm9y Mjk2 IHJldmVyc2Fs IEFkZWxhaWRl IExM IHNpbmtpbmc= IGd1bQ== VVNI Y2FwdA== IEdyaW1t IGZvb3RzdGVwcw== IENCRA== aXNwZXJz IHByb3Nl V2VkbmVzZGF5 IE1vdmllcw== ZWRpbg== IG92ZXJ0dXJuZWQ= IGNvbnRlbnRpb3Vz VVNC fn5+fn5+fn5+fn5+fn5+fg== IENvcHBlcg== IHBvaW50bGVzcw== TlY= dmFsdWVz b2xwaGlu ZGFpbg== IGRlcG9zaXRlZA== IEdX IHByZWNlZGVk IENsYQ== IEdvbGVt IE5pbQ== IM6y IEVuZ2luZWVycw== bWlkZGxl IGZsYXR0 b3BlcmF0aXZl IGNvdW5jaWxz aW1iYWJ3ZQ== ZWxpbg== IHN0cmVzc2Z1bA== IExE IHJlc2g= bGFrZQ== IHdoZWVsY2hhaXI= IEFsdGVybmF0aXZl IG9wdGltaXpl b3BlcmF0aW9u IHBlZWs= IG9uZXNlbGY= aWdpbA== IHRyYW5zaXRpb25z b3BhdGh5 Ymxhbms= IDE2OQ== MTcx X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== IGxhdW5kZXJpbmc= RW5j IERFQw== IHdvcmtvdXRz IHNwaWtlcw== IGRpbm9zYXVycw== IGRpc2NyaW1pbmF0b3J5 UG9vbA== UmF0aGVy Mzg1 Uk5B dGVzdGVycw== ZXRv IElkZW50aXR5 IHZlaW4= IEJ1cnRvbg== IGFyY2FkZQ== NDIw VWx0aW1hdGVseQ== IFNhZGx5 w7A= cGlsbA== IGN1Ymlj IFNwZWN0cnVt dGhlc2U= c3RhdGVz IHVub2ZmaWNpYWw= aGF3a3M= IEVWRVJZ IHJhaW5ib3c= IGluY2FyY2VyYXRpb24= YW5kaW5n IHN5bGw= IEV2ZXJ0b24= IDE3OQ== IFNlcmJpYQ== IDE4OQ== bWV0ZXI= IE1pY2tleQ== IGFudGlxdQ== IGZhY3R1YWw= bmVjaw== IE5hcmU= bm9ybQ== bXVzdA== IGhpZ2h3YXlz IGdsYW0= IGRpdmlkaW5n IFNxdWFkcm9u IE1hcnRoYQ== IGJpcnRocw== Q292ZXI= Ly8vLy8vLy8vLy8vLy8vLw== IFdvbmc= UGhvdA== IEFMUw== cmlv IE5vbmV0aGVsZXNz IExlbW9u IDIwNg== IEVF IGRlcml2YXRpdmU= IFdXSUk= dm90ZQ== IHRoZXJlaW4= IHNlcGFyYXRpbmc= NDQ2 c3luYw== IFN0cmVldHM= IHJhdHQ= IG11bmljaXBhbGl0eQ== IFNob3J0bHk= IG1vbms= KSwi IHNjcnVi IG9wZXJhdGl2ZXM= TmVpdGhlcg== UGxhY2U= IExpbWl0 RmVtYWxl IEFjdG9y Q2hhcmFjdGVy IGNvbnN0aXR1dGVk MzU3 IHByb3Rlc3RlZA== IFN0cmF3 IEhlaWdodA== aWxkYQ== IFR5cGg= IGZsb29kcw== IGNvc21ldGlj V0FZ cGVydHVyZQ== dXBvbg== dG9ucw== ZXNzaW5n IFBvY2tldA== IHJvb2Z0 IENhdWNhcw== IGFudGlkZXByZXNz IGluY29tcGF0aWJsZQ== RUNE IG9wZXJh IENvbnRlc3Q= IGdlbmVyYXRvcnM= bGltZQ== RGVmZW5zZQ== MTk4Nw== Zm9ydW0= IHNhdmFnZQ== IEh1bmdhcmlhbg== bno= IG1ldGFsbGlj IGV4cGVsbGVk IHJlc2lkZW5jeQ== IGRyZXNzZXM= NjY2 IENsZW1lbnQ= ZmlyZXM= Q2F0ZWdvcnk= IGdlZWs= YWxpcw== IGNlbWV0ZXJ5 ZWR1Y2F0ZWQ= IGNyYXds IFVuYWJsZQ== IFR5c29u YWtpcw== IHBhcmRvbg== IFdyYQ== IHN0cmVuZ3RoZW5lZA== IEZvcnM= MzM1 IEhD IE1vbmQ= IHZpc3VhbHM= IEJlYXRsZXM= ZXR0bGVtZW50 IO8= Z3Jv IGJhc2g= IHBvb3Jlc3Q= IGV4Y2Vs IGFzcGlyYXRpb25z IE11bmljaXA= ZW5zaWJsZQ== IGNlcmVtb25pZXM= IGludGltaWRhdGlvbg== IENPTlRS YmVjaw== IEthcA== YXN1 IHRyYWRlbWFya3M= IFNldw== IENvbXBldGl0aW9u bmV0d29yaw== IEFycmk= IFRldA== Um9hbWluZw== V0M= RGF0 IHNvYg== IHBhaXJpbmc= IG92ZXJkb3Nl U0FZ YWJlcg== IHJldm9sdA== IEZhaA== YWN0aW5n ZXE= ZXN0YXRpb24= RmlnaHQ= IE1hcmtz Mjcz IDE3OA== UmF3 44GL MzQ5 YmxvY2tz IHZlcmdl ZXN0aW5l IFBvZGVzdGE= IGludmFzaXZl IHByb2ZvdW5kbHk= IEFv ZWFjaA== IGxlc3Q= aW50ZXJwcmV0 IHNocmlua2luZw== IGVycm9uZQ== IGNoZWVz bHlz IEl2eQ== IERpcmVjdG9yeQ== IGhpbnRlZA== VklDRQ== IGNvbnRhY3Rpbmc= IEdlbnQ= aGVp IGxhYmVsaW5n IG1lcmN1cnk= IExpdGU= IGV4cGlyZXM= IGRlc3RhYmls cml0aXM= Y3U= IGZlYXRoZXJz IHN0ZWVy IHByb2dyYW1tZWQ= IFZhZGVy R29pbmc= IEVsaW0= IHlv IE1pY2hl IDIwMw== IHNsZWV2ZXM= IGJ1bGx5 IEh1bWFucw== MzY4 IGNvbXByZXNz IEJhbm5lcg== QVJT IGF3aGlsZQ== IGNhbGli IHNwb25zb3JzaGlw IERpZmZpY3VsdHk= IFBhcGVycw== IGlkZW50aWZpZXI= fS4= IHlvZw== IFNoaWE= IGNsZWFudXA= IHZpYmU= aW50cm9kdQ== aW1taW5n QXVzdHJhbGlh IG91dGxpbmVz IFlvdXR1YmU= dHJhaW4= IE1ha2Vz IGRlcG9ydGVk IGNlbnRy IER1Zw== IEJvdWxkZXI= IEJ1ZmZ5 IGluanVuY3Rpb24= IEhhcmxleQ== IEdyb3Vwcw== IER1bWJsZWRvcmU= IENsYXJh ICIt IHNhY3JpZmljZWQ= ZXBo U2hhZG93 aWJsaW5n IGZyZWVsYW5jZQ== IGV2aWRlbnRseQ== cGhhbA== IHJldGFpbnM= TWly IGZpbml0ZQ== ZGFy IENvdXM= IHJlcGFpcmVk IHBlcmlvZGlj IGNoYW1waW9uc2hpcHM= IGFzdGVyb2lk YmxpbmQ= IGV4cHJlc3NseQ== IEFzdHJvcw== IHNjYWxlZA== IGdlb2dyYXBoaWNhbA== IFJhcGlkcw== RW5qb3k= IGVsYXN0aWM= IE1vaGFtZWQ= TWFya2V0 YmVnaW4= IGRpc2NvdmVycw== IHRlbGVjb21tdW5pY2F0aW9ucw== IHNjYW5uZXI= IGVubGFyZ2U= IHNoYXJrcw== IHBzeWNoZWRlbA== IFJvdWdl IHNuYXBzaG90 aXNpbmU= WFA= IHBlc3RpY2lkZXM= IExTRA== IERpc3RyaWJ1dGlvbg== cmVhbGx5 IGRlZ3JhZGF0aW9u IGRpc2d1aXNl IGJpb20= IEVYVA== IGVxdWF0aW9ucw== IGhhemFyZHM= IENvbXBhcmVk KSo= IHZpcnR1ZXM= IGVsZGVycw== IGVuaGFuY2luZw== IEFjcm9zcw== ZXJvcw== YW5nbGluZw== IGNvbWJ1c3Q= dWNjaQ== IGNvbmN1c3Npb24= IGNvbnRyYWNlcHRpb24= IEthbmc= IGV4cHJlc3Nlcw== IGF1eA== IFBpb25l IGV4aGliaXRz RGVidWc= T1RBTA== IEFscmVhZHk= IFdoZWVsZXI= IGV4cGFuZHM= Pzo= IHJlY29uY2lsaWF0aW9u IHBpcmF0ZXM= IHB1cnNl IGRpc2NvdXJhZ2U= IHNwZWN0YWNsZQ== UmFuaw== IHdyYXBz IFRob3VnaHQ= IGltcGVuZGluZw== T3Bw IEFuZ2xv IEVVUg== IHNjcmV3ZWQ= cmV0Y2hlZA== IGVuY291cmFnZW1lbnQ= bW9kZWxz IGNvbmZ1c2U= bW1t IFZpdGFtaW4= 4paR4paR Q3J1 IGtuaWdodHM= IGRpc2NhcmQ= IGJpc2hvcHM= IFdlYXI= IEdhcnJldHQ= a2Fu 44Of IG1hc2N1bGluZQ== Y2FwaXRhbA== IEF1cw== IGZhdGFsbHk= dGhhbmtz IEFV IEd1dA== MTIwMA== IDAwMDAwMDAw IHN1cnJvZw== IEJJT1M= cmFpdHM= IFdhdHRz IHJlc3VycmVjdGlvbg== IEVsZWN0b3JhbA== IFRpcHM= NDAwMA== IG51dHJpZW50 IGRlcGljdGluZw== IHNwcmluaw== IG11ZmY= IExJTQ== IFNhbXBsZQ== cHNj aWJp Z2VuZXJhdGVk IHNwZWNpbWVucw== IGRpc3NhdGlzZg== IHRhaWxvcmVk IGhvbGRpbmdz IE1vbnRobHk= IEVhdA== cG9vbnM= IG5lYw== IENhZ2U= IExvdHVz IExhbnRlcm4= IGZyb250aWVy IHBlbnNpb25z IGpva2Vk IEhhcmR5 PS09LT0tPS0= cmFkZQ== VUlE IHJhaWxz IGVtaXQ= IHNsYXRl IHNtdWc= IHNwaXQ= IENhbGxz IEphY29icw== ZmVhdA== IFVF IHJlc3RydWN0 IHJlZ2VuZXJhdGlvbg== IGVuZXJnaWVz IENvbm5vcg== T0hO IENoZWVzZQ== IGdlcg== IHJlc3VycmVjdA== bWFuYWdlbWVudA== Tlc= IHByZXNlbnRseQ== IEJydWlucw== TWVtYmVy IE1hbmc= aWRhbg== IGJvb3N0aW5n d3lu Ky4= cmVxdWlzaXRl IE5ZUEQ= IE1lZ2Fu IENvbmRpdGlvbnM= IHBpY3M= bmVzaXVt IFJhc2g= IDE3NA== IER1Y2tz IGVtYnJv enU= b25pYW4= cmVsaWdpb3Vz IGNyYXo= IEFDQQ== IFp1Y2tlcg== RU1B IFByb3M= V2VhcG9u IEtub3g= IEFyZHVpbm8= IHN0b3Zl IGhlYXZlbnM= IFB1cmNoYXNl IGhlcmQ= IGZ1bmRyYWlzZXI= RGlnaXRhbA== NTAwMA== IHByb3BvbmVudHM= L+KAiw== IGplbGx5 IFZpc2E= IG1vbmtz IGFkdmFuY2VtZW50 IFdlcg== IDE4Nw== ZXVz ZXJ0aWxpdHk= IGZldGFs IDE5MzY= TG8= IG91dGZpdHM= IHN0YWlyY2FzZQ== Ym9tYg== IGN1c3RvbWl6ZWQ= Y2xhaXI= VHJlZQ== IG1hcHBlZA== IENvbnNpZGVyaW5n IFRvcnJlcw== IG1ldGh5bA== IGFwcHJveGltYXRl IGRvb20= IEhhbnNlbg== IGNyb3Nzb3Zlcg== IHN0YW5kYWxvbmU= 5Lw= IGludml0ZXM= IGdyYXZleWFyZA== IGhw RG9uYWxkVHJ1bXA= IGVzY29ydA== R2Fy IHByZWRlY2Vzc29ycw== IGhheQ== IGVuenltZQ== IFN0cmFpZ2h0 dmlzb3Jz SW5n YW5lb3VzbHk= IEFwcGxpZWQ= IGZlYw== IER1cmFudA== IG91dHNwb2tlbg== b3Ji IHplYWw= IGRpc2dyYWNl Jyku IENoZW5n Mjg5 IFJlbmE= IFN1aWNpZGU= Mjk0 IG91dHJhZ2Vk IE5ld21hbg== IE52aWRpYQ== IEFiZXI= IEJlcnM= IHJlY3JlYXRpb24= V2luZG93 IERQ eGU= IHBlZG9waA== IGZhbGxvdXQ= YW1ib28= IHByZXNlbnRhdGlvbnM= IEFwcHM= IGh0bWw= MzQ1 IFhYWA== IHJ1YmJpbmc= IExlYXRoZXI= IGh1bWlkaXR5 c2V5cw== ZXN0YWJsaXNoZWQ= IFVuaXRz NjQ2 IHJlc3BlY3RhYmxl QXV0bw== IHRocml2aW5n IElubm92YXRpb24= YW5ncw== RXh0cmE= cmVndWxhdGlvbg== Mjk4 cGljaw== RXhhbXBsZXM= IENK QXR0YWNr IGRyYWNvbg== TFQ= IHN0aWNrZXI= cmVycw== IHN1bm55 SXNz cmVndWxhdGVk ZGlt IEFic3RyYWN0 IGh1c2JhbmRz T2ZmaWNl b21pbmF0aW9u aXRhcnM= QU5HRQ== YXNjYWw= IEtyaXM= IEluZmFudHJ5 IG1hbGY= IEF0aGU= IFJhbGx5 YmFsYW5jZWQ= Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u T1VQ IG1vbGVjdWxl bWV0aWNz IFNwbGl0 IEluc3RydWN0aW9ucw== IE5pZ2h0cw== Y2FyZHM= IHR1Zw== IGNvbmU= 5a0= IHR4 IERpc2N1c3Npb24= IGNhdGFzdHJvcGhl cHBl Z2lv IGNvbW11bmlzbQ== IGhhbHRlZA== IEd1YW50 Y2xlYW4= IFNjaGVk IEthbnll IHdhbmRlcg== IFNlcmlvdXNseQ== IDE4OA== ZW5uaWFs Zm9sbG93 cHJvZHVjdGl2ZQ== IEZsb3c= IFNhaWw= IGNyYXc= IHNpbXVsYXRpb25z b3J1 YW5nbGVz IE5vbGFu IG1lbnN0cnU= NDcw IDIwNw== YWph IGNhc3VhbGx5 Ym9hcmRpbmc= IDIyMg== b3Z5 IE51bWJlcnM= dW1hdA== T0U= Mjg3 IENsZW1zb24= IGNlcnRz IHNsaWQ= IFRyaWJl IHRvYXN0 IGZvcnR1bmVz IGZhbHM= IENvbW1pdHRlZXM= IGdw IGZpZXJ5 IE5ldHM= IEFuaW1l UGFja2FnZQ== IENvbXBhcmU= bGF1Z2h0ZXI= aW5mZWN0 IGF0cm9jaXRpZXM= IGp1c3RpY2Vz IGluc3VsdHM= IFZlcm5vbg== IHNoYWtlbg== IHBlcnNvbmE= ZXN0YW1w MzY3 YnJhaW4= IGV4cGVyaW1lbnRpbmc= S2Vu IEVsZWN0cm9uaWNz IDE2MQ== ZG9tYWlu IGdyYXBoaWNhbA== YmlzaG9w IHdob3BwaW5n IEV2YW5nZWw= IGFkdmVydGlzZXJz IFNwZWFy IGJpZHM= IGRlc3Ryb3lz dXR6 IHVuZGVyc2M= IEFERA== IGFudHM= IEN1bQ== aXBwbGVz IEZpbGw= IGdsYW5jZWQ= IGluZGljdGVk IEVmZg== IG1pc2Nvbg== IERlc2t0b3A= IGFiaWRl 44OA IElv IENvdWw= IGNhcHN1bGU= IENocnlz TU9O IHVuZGVz IElSQQ== IGNpdGF0aW9u IGRpY3RhdGU= IE5ldHdvcmtz IENvbmZsaWN0 IFN0dWZm eGE= aXNlYw== IENoZW1pc3RyeQ== IHF1YXJ0ZXJseQ== V2lsbGlhbXM= YW5hbg== T3B0 IEFsZXhhbmRyaWE= b3V0aGVhc3Rlcm4= IFNwcmluZ2ZpZWxk IEJsYWNrcw== IGdlb2dyYXBoeQ== MjQy IHV0bW9zdA== IEV4eG9u YWJvdXRz RVZB IEVuYWJsZQ== IEJhcnI= IGRpc2FncmVlZA== IEN5cHJ1cw== IGRlbWVudGlh IGxhYnM= IHViaXF1aXRvdXM= IExPVkU= IGNvbnNvbGlkYXRlZA== c3I= IGNyZWFteQ== IFRpbWJlcg== UmVnYXJkbGVzcw== IENlcnRpZmljYXRl ICIuLi4= b2dlbm91cw== Q2FwdGFpbg== IGluc3VsdGluZw== IFNvcm9z IEluc3Ry IEJ1bGdhcmlh YmV0dGVy IHN1Y2tpbmc= IERhdmlkc29u YXR6 IGNvbGxhdGVyYWw= Z2lm IHBsYWd1ZWQ= IENhbmNlbA== IEdhcmRuZXI= UkI= IHNpeHRlZW4= UmVtb3Zl dXJpc3RpYw== Y29vaw== Um9k IGNvbXByaXNpbmc= Zmxl KeKAlA== IFZpa2luZw== Z3Jvd3Ro YWdvbmFs IHNyZg== YWZldHk= bW90 TmVhcmx5 c3Rvd24= IEZhY3Rvcg== IGF1dG9tb2JpbGU= IHByb2NlZHVyYWw= bWFzaw== YW1waXJlcw== IGRpc2FwcGVhcnM= amFi MzE1 IDE5NTE= bmVlZGVk IGRhcmluZw== bGVhZGVy IHBvZGl1bQ== IHVuaGVhbHRoeQ== IG11bmQ= IHB5cmFtaWQ= b2NyZQ== IGtpc3NlZA== IGRyZWFtZWQ= IEZhbnRhc3RpYw== IEdseQ== 5Yo= IGdyZWF0bmVzcw== IHNwaWNlcw== IG1ldHJvcG9saXRhbg== IGNvbXB1bHM= aWV0cw== MTAxNg== IFNoYW0= IFB5cg== ZmxpZXM= IE1pZG5pZ2h0 IHN3YWxsb3dlZA== IGdlbnJlcw== IEx1Y2t5 IFJld2FyZHM= IGRpc3BhdGNo IElQQQ== IEFwcGx5 IGF2ZW4= YWxpdGllcw== MzEy dGhpbmdz ICgpLg== IG1hdGVz IFN6 IENPUA== b2xhdGU= T0ZG IHJlY2hhcmdl Y2Fwcw== IFlvcmtlcg== aWNvbmU= IGdhbGF4aWVz aWxlYWtz RGF2ZQ== IFB1eno= IENlbHRpYw== IEFGQw== Mjc2 IFNvbnM= IGFmZmlybWF0aXZl SG9y IHR1dG9yaWFscw== IENJVFk= IFJvc2E= IEV4dGVuc2lvbg== U2VyaWVz IGZhdHM= IHJhYg== bGlz IHVuaWM= IGV2ZQ== IFNwaW4= IGFkdWx0aG9vZA== dHlw IHNlY3Rhcmlhbg== IGNoZWNrb3V0 IEN5Y2w= U2luZ2xl IG1hcnR5cg== IGNoaWxsaW5n ODg4 b3VmbA== IF07 IGNvbmdlc3Rpb24= bWs= IFdoZXJlYXM= IDE5Mzg= dXJyZW5jaWVz ZXJpb24= IGJvYXN0 IFBhdGllbnRz IGNoYXA= IEJE cmVhbERvbmFsZFRydW1w IGV4YW1pbmVz aG92 IHN0YXJ0bGluZw== IEJhYnlsb24= d2lk b21ldw== YnJhbmNl IE9keXNzZXk= d2ln IHRvcmNo IFZveA== IE1veg== IFRyb2xs IEFucw== U2ltaWxhcmx5 IEZ1bA== MDA2 VW5sZXNz IEFsb25l c3RlYWQ= IFB1Ymxpc2hlcg== cmlnaHRz dHU= IERvZXNu IHByb2Zlc3Npb25hbGx5 IGNsbw== aWN6 IHN0ZWFscw== IOE= MTk4Ng== IHN0dXJkeQ== IEpvaGFubg== IG1lZGFscw== IGZpbGluZ3M= IEZyYXNlcg== ZG9uZQ== IG11bHRpbmF0aW9uYWw= IGZlZGVy IHdvcnRobGVzcw== IHBlc3Q= WWVzdGVyZGF5 YW5raW5k IGdheXM= IGJvcm5l IFBPUw== UGljdHVyZQ== IHBlcmNlbnRhZ2Vz MjUx cmFtZQ== IHBvdGlvbnM= QU1E IExlYmFuZXNl IHJhbmc= IExTVQ== b25ncw== IHBlbmluc3VsYQ== IENsYXVzZQ== QUxL b2hh IE1hY0Jvb2s= IHVuYW5pbW91cw== IGxlbmRlcnM= IGhhbmdz IGZyYW5jaGlzZXM= b3JlcnM= IFVwZGF0ZXM= IGlzb2xhdGU= YW5kcm8= U29vbg== IGRpc3J1cHRpdmU= IFN1cnZl IHN0aXRjaGVz IFNjb3Jw IERvbWluaW9u IHN1cHBseWluZw== QXJn IHR1cnJldA== IEx1aw== IGJyYWNrZXRz Kik= IFJldm9sdXRpb25hcnk= IEhvbmVzdA== IG5vdGljaW5n IFNoYW5ub24= IGFmZm9yZGVk IHRoYQ== IEphbmV0 IS0t IE5hcmVuZHJh IFBsb3Q= SG9s c2V2ZXI= ZWVudGg= IG9ic3RydWN0aW9u IDEwMjQ= c3RhZmY= amFz b3JnZXQ= c2NlbmVz bGF1Z2hz IEZhcmdv Y3JpbWU= IG9yY2hlc3Ry IGRlbGV0 aWxpYXJ5 cmlldmVk IG1pbGl0YXI= IEdyZWVuZQ== 4peP 44Gm IEd1YXJkcw== IHVubGVhc2hlZA== IFdlYmVy IGFkanVzdGFibGU= IGNhbGliZXI= IG1vdGl2YXRpb25z IMOg bUFo IExhbmth aGFuZGxl IHBlbnQ= IFJhdg== IEFuZ3VsYXI= IEthdQ== dW1iaW5n IHBoaWxhbnRocm9w IGRlaHlk IHRveGljaXR5 ZWVy IFlPUks= d2l0eg== 5bw= IElF Y29tbXVuaXR5 IEFI IHJldGFsaQ== IG1hc3NpdmVseQ== IERhbmllbHM= IERFTA== IGNhcmNpbg== VXJs IHJvdXRpbmc= IE5QQ3M= IFJBRg== cnljZQ== IHdhaXZlZA== IEd1YXRlbQ== RXZlcnlib2R5 IGNvdmVuYW50 IDE3Mw== IHJlbGF4aW5n IHF1YXJ0 YWxtb3N0 IGd1YXJkZWQ= IFNvbGRpZXJz IFBMQVk= IG91dGdvaW5n TEFORA== IHJld3JpdGU= IE1PVg== IEltcGVy IFNvbHV0aW9u IHBoZW5vbWVuYWw= IGxvbmdldml0eQ== IGltcGF0 IE5pc3Nhbg== aXJpZQ== IG9kb3I= IFphcg== b2tz IG1pbGl0aWFz IFNQRUM= IHRvbGVyYXRlZA== YXJzZXI= IEJyYWRmb3Jk Kyw= IHN1cnJlYWw= c2Y= Q2FuYWRpYW4= IHJlc2VtYmxhbmNl IGNhcmJvaHlkcmF0ZQ== VklFVw== IGFjY2Vzc29yeQ== bWVhbA== bGFyZ2VzdA== aWVnZWw= U29tZW9uZQ== IHRvdWdoZXN0 b3Nv IGZ1bm5lbA== IGNvbmRlbW5hdGlvbg== bHVlbnQ= IHdpcmVk IFN1bnNldA== SmVzdXM= IFBTVA== IFBhZ2Vz IFR5Y29vbg== IFBG IHNlbGVjdGlvbnM= IOCk cGFydGlzYW4= IGhpZ2hz IFJ1bmU= IGNyYWZ0cw== bGVhZA== IFBhcmVudHM= IHJlY2xhaW0= ZWtlcg== IEFsbGllZA== YWVwZXI= IGxvb21pbmc= IGJlbmVmaWNpYXJpZXM= IEh1bGw= U3R1ZGVudHM= SmV3aXNo ZGo= IHBhY3Q= dGVtcGxhdGU= IE9mZmljaWFscw== IEJheWxvcg== IGhlbXA= IHlvdXRocw== IExldmVscw== IFhpYW8= IENoZXM= IGVuZGVhdm9y IFJlbW92ZWQ= IGhpcHBvY2FtcA== SGVsbA== 44KK ODA1 IGRpbm9zYXVy IFdyYXRo IEluZG9uZXNpYW4= IGNhbGN1bGF0b3I= IERpY3Rpb25hcnk= IDQyMA== IE1BRw== KF8= ISw= dGFyaWFucw== IHJlc3RyaWN0aW5n cmFjdXNl IHdlZWtkYXk= T1VOVA== IHNocnVnZ2Vk bGVncm91bmQ= IGJhbGQ= IERvY3RvcnM= IHRvdXRlZA== IE1heHdlbGw= IDIxNA== IGRpcGxvbWF0 IHJlcHJlc3Npb24= IGNvbnN0aXR1ZW5jeQ== dmljZQ== cmFua2Vk IE5hcG9sZW9u Z2FuZw== IEZvcmV2ZXI= dHVu IGJ1bGI= IFBEVA== IENpc2Nv VkVO IHJlc3VtZWQ= U3RldmVu IE1hbml0b2Jh IGZhYnVsb3Vz IEFnZW50cw== MTk4NA== IGFtdXNpbmc= IE15c3Rlcmllcw== IG9ydGhvZG94 Zmxvb3I= IHF1ZXN0aW9ubmFpcmU= IHBlbmV0cmF0ZQ== IGZpbG1tYWtlcnM= IFVuYw== IHN0YW1wZWQ= IHRoaXJ0ZWVu IG91dGZpZWxk IGZvcndhcmRlZA== IGFwcHJh IGFpZGVk dHJ5 IHVuZm9jdXNlZA== IExpeg== IFdlbmR5 IFNjZW5l Q2hhcmc= IHJlamVjdHM= IGxlZnRpc3Q= IFByb3ZpZGVuY2U= IEJyaWQ= cmVnbg== IHByb3BoZWN5 IExJVkU= NDk5 IGZvcmdl IEZNTA== IGludHJpbnNpYw== IEZyb2c= IHdvbnQ= IEhvbHQ= IGZhbWVk Q0xVUw== YWVwZXJuaWNr IEhhdGU= IENheQ== IHJlZ2lzdGVyaW5n b3J0YWxpdHk= cm9weQ== b2NhbHlwdGlj YWFu bmF2 IGZhc2Npc3Q= SUZJRUQ= IGltcGxpY2F0ZWQ= IFJlc29ydA== IENoYW5kbGVy IEJyaWNr UGlu eXNj VXNhZ2U= IEhlbG0= dXNyYQ== 4piF4piF IEFiYmFz IHVuYW5pbW91c2x5 IGtlZXBlcg== IGFkZGljdGVk Pz8/ IGhlbG1ldHM= IGFudGlveGlk YXBzZWQ= ODA4 Z2llbmU= IHdhaXRz IG1pbmlvbg== cmF2ZWQ= IFBvcnNjaGU= IGRyZWFtaW5n IDE3MQ== IENhaW4= IHVuZm9y YXNzbw== IENvbmZpZ3VyYXRpb24= a3Vu aGFyZHQ= IG5lc3RlZA== IExEUw== TEVT IHR5aW5n ZW5vcw== IGN1ZQ== IE1hcnF1 c2tpcnRz IGNsaWNrZWQ= IGV4cGlyYXRpb24= IEFjY29yZGluZ2x5 IFdD IGJsZXNzaW5ncw== IGFkZGljdGl2ZQ== IE5hcnI= eXg= IEphZ3VhcnM= IHJlbnRz IFNpYmVy IHRpcHBlZA== b3Vzc2U= IEZpdHpnZXJhbGQ= IGhpZXJhcmNo b3V0aW5l IHdhdmVsZW5ndGg= Pi4= Y2hpZA== IFByb2Nlc3Npbmc= Lys= cmFua2luZw== RWFzeQ== IENvbnN0cnVjdA== IHRldA== aW5zdXJlZA== SFVE IHF1b3Rpbmc= IGNvbW11bmljYXRlZA== aW54 IGlubWF0ZQ== IGVyZWN0ZWQ= IEFic29sdXRlbHk= IFN1cmVseQ== IHVuaW0= IFRocm9uZQ== aGVpZA== IGNsYXdz IHN1cGVyc3Rhcg== IExlbm4= IFdoaXM= VWs= YWJvbA== IHNrZXQ= IE5pZXQ= IHBlcmtz IGFmZmluaXR5 IG9wZW5pbmdz cGhhc2lz IGRpc2NyaW1pbmF0ZQ== VGlw dmM= IGdyaW5kaW5n IEplbm55 IGFzdGhtYQ== aG9sZXM= IEhvbWVy IHJlZ2lzdGVycw== IEdsYWQ= IGNyZWF0aW9ucw== IGxpdGhpdW0= IGFwcGxhdXNl dW50aWw= SnVzdGljZQ== IFR1cmtz IHNjYW5kYWxz IGJha2U= dGFuaw== TWVjaA== IE1lYW5z IE1haWQ= UmVwdWJsaWNhbnM= aXNhbA== d2luZG93cw== IFNhbnRvcw== IHZlZ2V0YXRpb24= MzM4 dHJp IGZsdXg= aW5zZXJ0 IGNsYXJpZmllZA== IG1vcnRn IENoaW0= IFRvcnQ= IGRpc2NsYWlt bWV0YWw= IEFzaWRl IGluZHVjdGlvbg== IGluZmw= IGF0aGVpc3Rz YW1waA== IGV0aGVy IFZpdGFs IEJ1aWx0 TWluZA== IHdlYXBvbnJ5 U0VU IDE4Ng== YWRtaW4= Z2Ft Y29udHJhY3Q= YWZh IGRlcml2YXRpdmVz IHNuYWNrcw== IGNodXJu RWNvbm9t IGNhcHBlZA== IFVuZGVyc3RhbmRpbmc= IEhlcnM= IEl6 IGR1Y3Q= SUVOVA== YXVnaHR5 IOKclA== IE5Q IHNhaWxpbmc= SW5pdGlhbGl6ZWQ= IHRlZA== IHJlYWN0b3Jz IExvbWI= IGNob2tl IFdvcm0= IGFkbWlyYXRpb24= IHN3dW5n ZW5zaWJseQ== IHJhc2g= IEdvYWxz IEltcG9ydGFudA== U2hvdA== IFJhcw== IHRyYWluZXJz IEJ1bg== V29ya2luZw== IGhhcm1lZA== IFBhbmRvcmE= IExURQ== IG11c2hyb29t IENIQVI= IEZlZQ== IE1veQ== Qm9ybg== b2xpYmVyYWw= IE1hcnRpYWw= IGdlbnRsZW1lbg== IGxpbmdlcmluZw== T2ZmaWNpYWw= IGdyYWZmaXRp IE5hbWVz RGVy IHF1aW50 aXN0cmF0ZQ== YXplZXJh IE5PVElDRQ== IEZsb3JlbmNl IHBheWFibGU= IGRlcGljdHM= IFNwZWNpZXM= SGVhcnQ= 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IGVuY2xvc2Vk SW5jcmVhc2Vz RGFpbHk= IExpcw== IGVuYWN0bWVudA== IEJhY29u IFN0ZWVsZQ== ZGVtYW5k IDE4Mw== IG1vdXRocw== IHN0cmFuZGVk IGVuaGFuY2VtZW50 MDEx IFdoYXRz IGhlYWxlZA== ZW55 IFJhYg== IDM0MA== IExhYnlyaW50aA== cm9hY2g= IFlvc2g= IENsaXBwZXJz IGNvbmNlcnRz SW50ZXJuZXQ= MzU1 IHN0aWNrZXJz IHRlcm1lZA== IEF4ZQ== IGdyYW5kcGFyZW50cw== RnJhbmNl IENsaW0= IFVo dWxpYw== IHRocmlsbA== Y2VudHJpYw== IE92ZXJ2aWV3 IENvbmR1Y3Q= IHN1YnN0YW50aXZl IDE4Mg== bXVy IHN0cmF5 IENvZmY= IHJlcGV0aXRpdmU= IEZvcmdvdHRlbg== IHF1YWxpZmljYXRpb24= ZXdpdG5lc3M= IFppbWJhYndl IHNpbXVsYXRlZA== IEpE MjUz IFdhcmU= IHVuc2M= VGltZXM= IHN1bW1vbnM= IGRpc2Nvbm5lY3RlZA== IDE4NA== Y2l1cw== IEd1amFy b2RrYQ== IGVyYXNl IFRvYmFjY28= ZWxlY3RlZA== IHVuY29udA== IFNoZXBhcmQ= IExhbXA= IGFsZXJ0ZWQ= IG9wZXJhdGl2ZQ== YXJuYQ== dWludA== IG5lZ2xpZ2VuY2U= YWNlbWVudHM= IHN1cHJh IHByZXZhaWw= IFNoYXJr IGJlbHRz 44Gr IHRpZ2h0ZXI= RW5naW5lZXJz IGluYWN0aXZl IGV4cG9uZW50 IFdpbGxpZQ== YXBsZXM= IGhlaXI= IEhpdHM= aWFubg== IFNheXM= IGN1cnJlbnRz IEJlbmdhbA== IGFyaXN0 QnVmZmVy IGJyZWV6ZQ== IFdlc2xleQ== Q29sYQ== IHByb25vdW4= IGRlZWQ= IEtsaW5n IG9mdA== IGluZmxpY3Q= IHB1bmlzaGluZw== IG5t aWt1 T0RVQ1Q= MDE0 IHN1YnNpZHk= IERFQQ== IEhlcmJlcnQ= IEphbA== QmFuaw== IGRlZmVycmVk IHNoaXBtZW50 Qm90dA== IGFsbGU= YmVhcmluZw== SFRNTA== T2ZmbGluZQ== IDIxMw== IHNjcm9sbGluZw== IHNjYW5uZWQ= IExpYnlhbg== IFRPUA== Y2hyb20= ZHQ= Y29sdW1u UHN5TmV0TWVzc2FnZQ== WmVybw== IHRvcnNv MDUw 4pWQ IGltcGVyc29u IFNjaHdhcnR6 dWRpYw== IHBpc3NlZA== IFNhcHA= MjU3 IElTUHM= b2ds IHN1cGVydmlzZWQ= IGFkb2xlc2NlbnQ= IGF0dGFpbmVk IERlbGl2ZXJ5 IEJ1bm55 IDE5Mzc= IG1pbmlhdHVyZQ== IG9z IDM3MA== NjA4 IE1vdXJpbmhv IGlubmF0ZQ== IHRlbXBv IE5N IEZhbGxlbg== MDA5 IHByb3ZvY2F0aXZl U3RyZWFtZXI= IEJlbmVkaWN0 IEJvbHNoZQ== IHR1cnRsZQ== IFBDQg== IEVxdWFs RGlyZWN0b3I= IFJlbmQ= IGZsdWlkcw== QXV0aG9yaXRpZXM= IGNvdXNpbnM= cmVxdWVuY3k= IE5laWdoYm9y c2V0cw== c2hhcmVk Q2hhcmxlcw== cGFzc3dvcmQ= IGdlYXJz IDIxMQ== IEhhcmR3YXJl cmlrYQ== IHVwc3RyZWFt SG9t IGRpc3Byb3BvcnRpb25hdGVseQ== aXZpdGllcw== IHVuZGVmaW5lZA== IGVsZWN0cm9ucw== IGNvbW1lbW9y RXZlbnR1YWxseQ== ID48 IGlycmVzcG9uc2libGU= MjE4 IFJlbGVhc2Vk IE9WRVI= IElHTg== IEJyZWFk c3RlbGxhcg== IFNhZ2U= dHRlZA== ZGFtYWdl ZWRpdGlvbg== IFByZWM= IGxpbWU= IGNvbmZpbmVtZW50 IGNhbG9yaWU= d2VhcG9u IGRpZmZlcmluZw== IFNpbmE= bXlz YW1k IGludHJpY2F0ZQ== a2s= IFBBVA== w6Nv c3RvbmVz bGlua3M= IHJhbmNo U2VtaXRpYw== IGRpZmZlcmVudGlhdGU= IFNpbmdlcg== b2NjdXBpZWQ= IGZvcnRyZXNz Y21k IGludGVyY2VwdGlvbg== IEFua2FyYQ== IHJlcHQ= IFNvbGl0YWlyZQ== IHJlbWFrZQ== cHJlZA== IGRhcmVk YXV0aW9ucw== IEJBQ0s= UnVubmluZw== IGRlYnVnZ2luZw== IGdyYXBocw== Mzk5 IE5pZ2Vs IGJ1bg== IHBpbGxvdw== IHByb2dyZXNzZWQ= ZmFzaGlvbmVk IG9iZWRpZW5jZQ== RVJO IHJlaGVhcnM= Q2VsbA== dGw= U2hlcg== IGhlcmFsZA== IFBheW1lbnQ= IENvcnk= IERlcHQ= IHJlcGVudA== IFdlYWs= dWNrbGFuZA== IHBsZWFzaW5n IHNob3J0YWdlcw== IGp1cm9ycw== IEthYg== cXFh QW50aQ== IHdvdw== IFJDTVA= IHRzdW4= IFNpYw== IGNvbXByaXNlcw== IHNwaWVz IHByZWNpbmN0 bnU= IHVyZ2Vz IHRpbWVk IHN0cmlwZXM= IEJvb3Rz IHllbg== QWR2YW5jZWQ= IGRpc2NyZXRl IEFyY2hhbmdlbA== ZW1wbG95bWVudA== RGlmZg== IG1vbnVtZW50cw== IDIwOQ== d29ya2Vy IDE5Ng== IEln dXR0ZXJzdG9jaw== VFBT SmFj IGhvbWVsZXNzbmVzcw== IGNvbW1lbnRhdG9y IHJhY2lhbGx5 ZmluZw== c2VlZA== RWxl ZWxsYXRpb24= IGV0aGFub2w= IHBhcmlzaA== IERvbmc= IEF3YWtlbmluZw== IGRldmlhdGlvbg== IEJlYXJpbmc= IFRzdWs= IHJlY2Vzcw== IGx5bXBo IENhbm5hYmlz 5Zw= IE5FV1M= IGRyYQ== IFN0ZWZhbg== IFdyb25n IFNBTQ== IGxvb3NlbHk= IGludGVycHJldGVy IFBsYWlu R292ZXJubWVudA== IGJpZ290cnk= IGdyZW5hZGVz YXZleg== cGljdHVyZWQ= IG1hbmRhdGVk IE1vbms= IFBlZHJv IGxhdmE= Mjc0 IGN5bmljYWw= IFNjcm9sbHM= bG9ja3M= TXA= IGNvbmdyZWdhdGlvbg== b3JuaW5ncw== cGhpbA== IEliaWQ= IGZlcnY= IGRpc2FwcGVhcmluZw== IGFycm9nYW50 c3lu IE1hdmVy IFN1aXQ= MjQx IGFiYnJl YWNrZXJz UGE= IFllbA== V2hlbmV2ZXI= IDIzNQ== IFZpbmU= IEFuYXQ= IGV4dGluY3Q= TEVU IGV4ZWN1dGFibGU= VkVSUw== b3hpZGU= RE5B IFByZWw= IHJlc2VudG1lbnQ= IGNvbXByaXNl IEF2aXY= IGludGVyY2VwdGlvbnM= IHByb2xpZmlj SU5B IEVyaW4= dGhvdWdodA== MjE5 IFBzeWNoaWF0cnk= dW5reQ== Y2hlbWlzdA== SG8= IE1jQ295 IGJyaWNrcw== TG9z cmlseQ== IFVTU1I= IHJ1ZA== IGxhdWQ= IFdpc2U= IEVtZXJhbGQ= IHJldml2ZWQ= IGRhbW5lZA== IFJlcGFpcg== aWRlbQ== Y3RpY2E= IHBhdHJpYXJjaA== IE51cnM= bWVn IGNoZWFwZXN0 cmVlbWVudHM= ZW1wdHk= IENlbGVicg== IGRlcHJpdmF0aW9u Y2hhbnRlZA== IFRodW1ibmFpbHM= RW5lcmd5 IEV0aGFu IFFpbmc= IG9wcG9zZXM= V0lORA== dmlr IE1hdQ== IFNVQg== NjY3 R1JF IFZvbHVudGU= bnRvbg== Q29vaw== 5ZA= ZXNxdWU= IHBsdW1tZXQ= IHN1aW5n IHByb25vdW5jZQ== IHJlc2lzdGluZw== IEZpc2hpbmc= IFRyaWFscw== IHllbGw= IDMxMA== IGluZHVjdA== IHBlcnNvbmFsaXplZA== b2Z0ZW4= UmVi RU1CRVI= IHZpZXdwb2ludA== IGV4aXN0ZW50aWFs KCkp cmVtb3Zl TUVOVFM= bGFzc2Vz IGV2YXBvcg== IGFpc2xl bWV0YQ== IHJlZmxlY3RpdmU= IGVudGl0bGVtZW50 IGRldmlzZWQ= bXVzaWM= YXNjYWRl IHdpbmRpbmc= b2Zmc2V0 IGFjY2Vzc2liaWxpdHk= a2VyZWQ= QmV0dGVy IEpvaG5zdG9u dGhpbmtpbmc= U25vdw== IENyb2F0aWE= IEF0b21pYw== Mjcx MzQ4 IHRleHRib29r IFNpeHRo INin2YQ= IHNsaWRlcg== IEJ1cmdlcg== Ym9s U3luYw== IGdyYW5kY2hpbGRyZW4= IGNlcnY= Kyk= IGV0ZXJuaXR5 IHR3ZWV0aW5n IHNwZWN1bGF0aXZl IHBpdm90YWw= IFdQ IFRFUg== eW5hbWlj IHVwbA== IENhdHM= cGVyaGFwcw== IGNsYXNzbWF0ZXM= IGJsYXRhbnQ= Jy0= IGxha2g= YW50aW5l IEJvcmc= aW9t Lyg= IEF0aGxldGlj IHNhcg== T1RB IEhvZmZtYW4= TmV2ZXJ0aGVsZXNz IGFkb3JhYmxl IHNwYXduZWQ= QXNzb2NpYXRlZA== IERvbWVzdGlj IGltcGxhbnQ= IEx1eGVt IEtlbnM= IHB1bXBz IFNBVA== QXR0cmlidXRlcw== NTA5 YXZvdXI= IGNlbnRyYWxpemVk IFRO IGZyZXNobHk= IEFjaGlldmU= IG91dHNpZGVycw== aGVydHk= IFJlZQ== IFRvd2Vycw== IERhcnQ= YWthYmxl IG1w IEhlYXZlbmx5 IHJpcGU= IENhcm9saW5l cnlhbg== IGNsYXNzaWNz IHJldGlyaW5n IDIyOA== IGFo IGRlYWxpbmdz IHB1bmNoaW5n IENoYXBtYW4= T3B0aW9ucw== bWF4d2VsbA== dm9sdW1l IHN0YWw= IGV4cG9ydGVk IFF1aXRl IG51bWVyaWNhbA== QnVybg== RmFjdA== IEtleXN0b25l IHRyZW5kaW5n IGFsdGVyaW5n IEFmcmljYW5z NDc4 IE1O IEtub2Nr IHRlbXB0YXRpb24= IHByZXN0aWdl T3ZlcnZpZXc= IFRyYWRpdGlvbmFs IEJhaHJhaW4= UHJpdmF0ZQ== IEhPVQ== IGJhcnI= IFRhdA== Q3ViZQ== VVNE IEdyYW5kZQ== IEdhdA== IEZsbw== IHJlc2lkZXM= IGluZGVj dm9sZW50 IHBlcnBldHVhbA== dWJlcw== IHdvcmxkdmlldw== IFF1YW50dW0= IGZpbHRlcmVk IGVuc3U= b3JnZXRvd24= RVJTT04= IE1pbGQ= Mzc5 T1RU w6U= IHZpdGFtaW5z IHJpYmJvbg== IHNpbmNlcmVseQ== IEhpbg== IGVpZ2h0ZWVu IGNvbnRyYWRpY3Rvcnk= IGdsYXJpbmc= IGV4cGVjdGFuY3k= IGNvbnNwaXI= IG1vbnN0cm91cw== IDM4MA== cmVjaQ== IGhhbmRpYw== IHB1bXBlZA== IGluZGljYXRpdmU= IHJhcHA= IGF2YWls IExFR08= IE1hcmlqdWFuYQ== MTk4NQ== ZXJ0b24= IHR3ZW50aWV0aA== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IFN3YW1w IHZhbHVhdGlvbg== IGFmZmlsaWF0ZXM= YWRqdXN0ZWQ= IEZhY2lsaXR5 MjYy IGVuenltZXM= aXR1ZGluYWw= IGltcHJpbnQ= U2l0ZQ== IGluc3RhbGxlcg== IFRSQQ== bW9sb2d5 bGluZWFy IENvbGxlY3RpdmU= aWdhdGluZw== IFRva2Vu IHNwZWN1bGF0ZWQ= S04= IENseQ== b3JpdHk= IGRlZmVy IGluc3BlY3RvcnM= YXBwcm92ZWQ= Uk0= IFN1bnM= IGluZm9ybWluZw== IFN5cmFjdXNl aWJsaQ== NzY1 IGdsb3Zl IGF1dGhvcml6ZQ== 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm IENydWlzZQ== IGNvbnRyYWN0aW5n c2hlbGw= SUZF IEpld2Vs cHJhY3Q= IFBob3Rvc2hvcA== IEtub3dpbmc= aGFybQ== IGF0dHJhY3Rpb25z YWRhbg== ZXR1cw== MDE4 d2FnZW4= QWx0 IG11bHRpcGx5 IGVxdWlsaWJyaXVt Ons= IEZpZ2h0ZXJz IEVkZ2Fy IGZvdXJ0ZWVu R292ZXJu IG1pc3VzZQ== IGFidXNpbmc= IGFuY2VzdHJ5 cmFtZXI= NjQ0 IHdvcm1z IHRoaWNrZXI= IENvbWJpbmU= IHBlYXNhbnRz IHZpbmQ= IGNvbnF1ZXN0 IG1vY2tlZA== IGNpbm5hbW9u IENhbGQ= IEdhbGx1cA== IGF2b2lkYW5jZQ== IGluY2FybmF0aW9u IFN0cmF0 IHRhc3RlZA== ZW50YQ== IE5lYWw= cGFyZWQ= IHRlcm1pbm9sb2d5 amVjdGlvbg== U2NpZW50aXN0cw== IElOUw== IERlZQ== IGRpcmVjdG9yaWVz Um9hZA== IFNoYXA= YnJpZ2h0 IERpcmVjdG9ycw== IENvbHVtbg== IGJvYg== IHByZWZlcmFibHk= IGdsaXRjaA== ZnVydA== IGVn aWRpcw== Q0JD IHN1cnJlbmRlcmVk IHRlc3RhbWVudA== MzM2 dWdnZXN0 IE5pbA== YW5vdGhlcg== IHBhdGhldGlj IERvbm5h IDIxOA== IEF2ZXJ5 IHdoaXNrZXk= IGZpeHR1cmU= IENvbnF1ZXN0 IGJldHM= T2Nj IExlaWNlc3Rlcg== XS4i ICkpOw== IGZsYXNoZXM= NDU2 IG1hc2tlZA== Z2VicmE= IGNvbXB1dGVk Y2hlbA== YXVkZXI= IGRlZmVhdHM= IExpYmVyYXRpb24= IE9zYW1h IFZpdmU= Q2hhbmdlcw== Q2hhbm5lbA== IHRhcmlmZnM= IG1hZ2U= IFNheA== IGluYWR2ZXJ0ZW50bHk= IENSRQ== IFJlYXBlcg== aW5reQ== Z3JhZGluZw== IHN0ZXJlb3R5cA== IGN1cmw= IEZBTlQ= IGZyYW1ld29ya3M= TW9t IEFuY2g= IGZsYXZvdXI= Y2FyYm9u IHBlcm1pdHRpbmc= bGV0Y2hlcg== IE1vemlsbGE= IFBhcmtpbmc= IENoYW1w U2Nyb2xs IG11cmRlcmVy IHJlc3RlZA== IG93ZXM= IFBvc3M= QURE SUZG cmVzb2x1dGlvbg== IE1pbmluZw== IGNvbXBhcmF0aXZl RGlt IG5laWdoYm91cmluZw== IEFTVA== IFRveGlj IGJpYXNlcw== IGd1bmZpcmU= dXJvdXM= IE1vbWVudA== MTk4Mw== IHBlcnZhc2l2ZQ== dHRw IE5vcm1hbGx5 cmly U2FyYWg= IEFsYmFueQ== IHVuc2V0dA== IFNNUw== aXBlcnM= bGF5ZXI= IFdoaXRlcw== dXBsZQ== IHR1cmJv IExlZWRz IHRoYXRz IE1pbmVy TUVS IFJlaWdu IHBlcm1l IEJsaXR6 IDE5MzQ= IGludGltaWRhdGluZw== dHViZQ== IGVjY2VudHJpYw== YWJvbGlj Ym94ZXM= IEFzc29jaWF0ZXM= dm90ZXM= IHNpbXVsYXRl dW1ibw== YXN0ZXJ5 IHNoaXBtZW50cw== RkZGRg== YW50aA== IHNlYXNvbmVk IGV4cGVyaW1lbnRhdGlvbg== 4pag bGF3cw== TWVldA== aWRkbGVz YW50aWNz UmF0aW5n SVNJUw== aGlmdA== IGZyb250cw== YnVm MDE3 IHVuYXR0 IERpbA== bGVhc2Vz IEdhcmRlbnM= Nzc3 dG91Y2g= dmVsbA== NDU4 ID09PT09 c2F2aW5n IGVyb3Npb24= IFF1aW4= IGVhcm5z IGFjY29tcGxpc2htZW50 IFdlaQ== IDxb X19fX18= IGlycmln IFRlZGR5 IGNvbnF1ZXJlZA== IEFybW9yZWQ= IGFzc2VydHM= IG1hbmlwdWxhdGluZw== csOp IHRyYW5zY3JpcHRz R2FsbGVyeQ== IHBsb3R0aW5n TmVpbA== IGJldHJheWFs bG9hZGVy IFN1bA== IGRpc3BsYWNlbWVudA== IHJveWFsdHk= IFdJ aGVpdA== IERldmljZXM= YWxsZWw= IG11bmljaXBhbGl0aWVz IGNhbmFs U3RhcnM= IFVBRQ== ICLigKY= IENV YWJvdmU= IHJlc29uYW5jZQ== IGd1aUFjdGl2ZVVu YWRkZWQ= IEJyYXZlcw== IElibg== IGhlcmVieQ== IEJSRQ== IHNoYXJlaG9sZGVy IEhpcg== IEpp IHN0cmFuZ2VseQ== IGFkbWlyZWQ= IHBsaWdodA== IGJhY2hlbG9y IFBvbGU= Y2lwbGluYXJ5 VG9ueQ== IEFybWVuaWFu IHVubWFu IFppb25pc3Q= U3RhZ2U= aXNjb3Zlcg== IGF1dG9tb3RpdmU= IHNpZGVsaW5lcw== IHNsaWNr IFJlbmFpc3NhbmNl IEZVTg== SW1hZ2Vz IEhhag== IHBpbmc= IHNob3J0Y3V0 IEJsdmQ= IExvb2tz IGJ1cnN0cw== IGNsYW1w IG1pc2g= IHNvcnRpbmc= IHBhdHJpb3Q= IGNvcnJlY3RuZXNz IFNjYW5kaW5hdg== IENhdmFsaWVycw== cHl0aG9u YXphcg== IDM3NQ== IEphdW5l NDA5 IGRldHJpbWVudGFs IHN0YWJiaW5n IHBvaXNvbmVk IGZvdW50YWlu b2NlbnQ= b3JzdA== IE1hcmk= IHJhaW5z IE92ZXJz IEluc3RpdHV0aW9u dWRnZXQ= QU1Z dGFsZQ== IEtS IFByaWNlcw== IGhlYWRhY2hlcw== IGxhbmRzbA== IEF1cmE= Qm9udXM= IFpoYW8= IEhpcA== IGhvcHM= IEt1cmRpc3Rhbg== IGV4cGxvaXRpbmc= cnlu IGh5cG9jcmlzeQ== b3BlbmluZw== IGd1bnNob3Q= IHdlZA== aW50ZXJzdGl0aWFs SW50ZXJzdGl0aWFs IGFtZW4= QnJlYWtpbmc= IG1hcmtldGVk V2lyZQ== IENyb3dk Q29udGludWU= IEtub3du IEVmZmVjdGl2ZQ== b3JlYW4= aXpvbnM= Sm9zZXBo IGVzY2FsYXRpb24= dXNlcm5hbWU= IGN1cnRhaW4= QVRFUw== IFBBUg== IE1peQ== IGNvdW50ZXJmZQ== bGVuZQ== IGNvbnRlbmRlcnM= ZGFpbHk= IEFzYw== IFBoaWxsaXA= bW9zdGx5 IGZpbGVuYW1l aGVuZQ== IHJlc2VtYmxpbmc= IHN0YWdpbmc= IENobG9l IHdpcmluZw== SG9u IFJlbmV3 b3R0YWdl IEh5YnJpZA== bXVjaA== IHN0cm9rZXM= IHBvbGljeW1ha2Vycw== QVBURVI= IEFya2hhbQ== cGxvdA== IGFzc2lzdGFudHM= IGRlcG9ydA== IFNlZ2E= IGluZmx1ZW56YQ== IEN1cnNlZA== IEtvYmU= IHNraW5ueQ== UHJvdmlkZXI= IFJpcA== IGluY3JlbWVudGFs cHJvZHVjdHM= QkY= IGRvbWU= IENyZWRpdHM= IGxvc2Vycw== aW50cw== IEJldHR5 IFRhbGVudA== IERBTQ== THY= RXNz IGRlbnM= dGVtcA== SnVkZ2U= b2RpYw== ICco VVJFUw== ZXRzaw== Vk8= IHJldHJpZXZlZA== IGFyY2hpdGVjdHM= 2Yc= IGV0aGlj IFNlY29uZGFyeQ== c3RvY2tz YWRpYQ== IDMyNQ== IE9waW5pb24= IHNpbXVsdGFuZW91cw== IGRpeno= dWxw IHNtdWdnbGluZw== aXBwZXJ5 UmFuZG9t ZmFjaW5n IERhcw== IHN0b2NrcA== IGRpc2Nsb3N1cmVz cG9pbnRlcg== IGNvcmFs IFNlbGVjdGlvbg== IFBpa2U= aXZhbGVudA== IHJ1dGhsZXNz IFJpbQ== IGVuc3Vpbmc= IEV4cGVyaW1lbnQ= IGNvbmdyZXNzbWFu IGJlbGlldmVy IHVuc3BlY2lmaWVk IE1vcmQ= IGtub3dsZWRnZWFibGU= IFZFUlk= VFg= IHN0cmFwcw== IHR1cmY= YXBlc2hpZnRlcg== IG1hcml0YWw= IGZsb2Nr 44GG MjYz QU1FUw== IE9wcG9zaXRpb24= IHRyZWFzdXJlcw== IEdPRA== IG1vZGVsZWQ= IFdPUkxE IChb IFVzYWdl SEY= ICQo dXNzZWQ= IHBpb25lZXI= RWlnaHQ= cGFyc2U= YnJlYWQ= cml0eg== IE1pcmFuZGE= IEthbnQ= Kysp b3Jlbg== IHByb3Zva2Vk IGJyZWVkcw== IEluY2x1ZGVz IFBhc3RlYmlu IEZsaXA= SmF2YQ== IGJyaW5r IHJ1bW9yZWQ= IHVuc2Vlbg== IGdhcm5lcmVk IERlZmlu YWx0ZWQ= IHRhdHRvb3M= IGhlc2l0YXRpb24= aXNpdGlvbnM= IFdlYXZlcg== IFJlcG9ydGluZw== IHRoZXJhcGllcw== IGNvbnN1bHRhbnRz IHJlc2lkdWFs IE1hbGk= IFJvbWE= aWFnbw== IFJlc2lkZW50cw== dWJp IHJlbWVkaWVz IGFkYXB0aXZl IEFsaXZl IEJhcmNs IHdhbGxldHM= Y3J5cHQ= ZXRlcm1pbmF0aW9u IFBlbG9zaQ== IHNsaXBwaW5n b3Rvbmlu IGFsbGlhbmNlcw== cGF0cmljaw== aXJpcw== IG9ydGg= IFBlcmtpbnM= IERlVg== IEdldHM= IGRyeWluZw== Z2Vl Zm9yZXN0 IEZvcmdldA== b3JlbQ== MzM5 IHZhZ3VlbHk= IERpb24= IFBvcm4= IEhPVw== IHBuZXVt IHJ1YmJsZQ== IFRhc3Rl ZW5jaWE= IEdlbA== IGRzdA== IDI0NQ== IE1vcm9jY28= aW5mbGFtbQ== IFR3aW5z IGJvdHM= ZGF1Z2h0ZXI= IEJhbGs= IGJyZXRocmVu IGxvZ29z IGdvYmw= ZnBz IHN1YmRpdmlzaW9u IHBhd24= IHNxdWVlemVk IG1vcmFsZQ== IERX JyI= IGtub3Q= b29reQ== IGRpdmlzaXZl IGJvb3N0ZWQ= Y2h5 44OQ aWZhY3Q= IG5ld2NvbWVycw== IFdyZXN0bGluZw== IHNjb3V0cw== d29sdmVz UmF0 IG5pbmV0ZWVudGg= IE9zYm9ybmU= U3RhdHM= IGVtcG93ZXJlZA== IHBzeWNob3BhdGg= IE9FTQ== dWdnYWdl IFBL IE1vaGFtbWFk UGFr IGFuYXJjaGlzdHM= IEV4dHJhY3Q= ZXN0aGVz IFN0b2NraG9sbQ== bG9v IEdyYXBo IGRlcGxveWluZw== IFN0cmFuZ2Vy IE1vbGQ= IHN0YWZmZXI= IGRpc2NvdW50ZWQ= dWNrbGU= cGxlYXNl IExhbmRpbmc= w61h IDE5Mw== IGFudGU= IHJlcGV0aXRpb24= ICsvLQ== IHBhcm9keQ== IGxpdmVseQ== QUFB IEhvcnVz IHBpdHM= aW5kZXJz TE9D IFZlbmljZQ== NDA2 IERpc2NvdmVy 4oY= ZWxsZWN0dWFs IHBlbnM= IGV5ZWw= aWd1b3Vz SW1wbA== IGpva2luZw== IGludmFs IEJlbGZhc3Q= IGNyZWRpdG9ycw== IFNreXdhbGtlcg== b3Zza3k= IGNlYXNlZmlyZQ== IHNlYWxz aXNvZnQ= KSku IEZlbGl4 SVRT IHRyZXNw IEJsb2NrY2hhaW4= ZXdhcmU= IFNjaHdhcg== ZW5uZQ== bW91bnRlZA== IEJlYWNvbg== bGVzaA== IGltbWVuc2VseQ== IGNoZWVyaW5n RW1wbG95 c2NlbmU= aXNobHk= YXRjaGV3YW4= IE5pY29sYXM= IGRyYWluZWQ= IEV4aXQ= IEF6ZXJi anVu IGZsb2F0ZWQ= dWFuaWE= RGVlcA== IHN1cGVydg== IG15c3RpY2Fs IERvbGxhcg== IEFwb3N0bGU= IFJFTA== IFByb3ZpZGVk IEJ1Y2tz 44O0 Y3V0dGluZw== IGVuaGFuY2VtZW50cw== IFBlbmd1aW5z IElzYWlhaA== IGplcms= IFd5bg== IHN0YWxsZWQ= IGNyeXB0b2N1cnJlbmNpZXM= IFJvbGFuZA== c2luZ2xl IGx1bWlu IEZlbGxvdw== IENhcGFjaXR5 IEthemFraA== V04= IGZpbmFuY2Vk Mzg5 IHRpZA== IGNvbGx1c2lvbg== IE15cg== 7oA= U2VuYXRvcg== IHBlZGlhdHJpYw== IG5lYXRseQ== IHNhbmR3aWNoZXM= IEFyY2hpdGVjdHVyZQ== IHR1Y2tlZA== IGJhbGNvbnk= IGVhcnRocXVha2Vz cXVpcmU= RnV0dXJl IGhlZnR5 6Zc= IHNwZWNpYWxpemVz IHN0cmVzc2Vz IHNlbmRlcg== IG1pc3VuZGVyc3RhbmRpbmc= IGVwaWxl IHByb3Zva2U= IENvbG9ycw== IGRpc21heQ== dWtv W18= NTg2 bmV1dHJhbA== IGRvbmF0aW5n IFJhbmRhbGw= TXVsdGk= IGNvbnZlbmllbnRseQ== IFN1bmc= IENvY2E= IHRlbnRz IEFjY2VsZXI= IHBhcnRuZXJlZA== Mjcy aXJtaW5n IEJBUw== c29tZXRpbWVz IG9iamVjdGVk dWJyaWM= cG9zZWQ= TENT Z3Jhc3M= IGF0dHJpYnV0YWJsZQ== VklT SXNyYWVsaQ== IHJlcGVhdHM= IFJN dmFn dXRh aW5vdXM= IGluZXJ0 IE1pZ3VlbA== 5q0= IEhhd2FpaWFu Qm9hcmQ= IGFydGlmaWM= IEF6ZXJiYWk= YXNpbw== IFJlbnQ= QUlO IGFwcGxpYW5jZXM= IG5hdGlvbmFsaXR5 IGFzc2hvbGU= IE5lYg== IG5vdGNo aGFuaQ== IEJyaWRl QXZhaWxhYmlsaXR5 IGludGVyY2VwdGVk IGNvbnRpbmVudGFs IHN3ZWxsaW5n IFBlcnNwZWN0 Ymllcw== Ljw= aXRobWV0aWM= IExhcmE= IHRlbXB0aW5n YWRkcg== IG92ZXJzZWVpbmc= Y2xhZA== IERW IEdpbmdyaWNo IG11bg== IEFwcHJvcHJp IGFsdGVyYXRpb25z IFBhdHJlb24= IGhhdm9j IGRpc2NpcGxpbmVz IG5vdG9yaW91c2x5 YWt1eWE= aWVyaQ== Pyku IFdlbnQ= IHNpbGljb24= IHRyZW1i Q29udGFpbmVy S25vd24= IG1vcnRhcg== ZXN0ZQ== aWNrYQ== QXJ0aHVy IFByZXZpb3VzbHk= IE1hcnR5 IHNwYXJzZQ== Z2lucw== IGlud2FyZA== IFBhcnRpY2lwYW50 Q29weQ== IE1pc2M= IGFudGliaW90aWM= IFJldHJv IGVsdXNpdmU= IGFzc2FpbA== IEJhdHRhbGlvbg== IEJvdWdodA== IGRpbWluaXNo IEV1cm9wYQ== c2Vzc2lvbg== IERhbmdlcm91cw== aWVzZWw= IGRpc2JlbGllZg== IGJsYXN0cw== ZXh0cmVtZQ== IEJveWQ= IFByb2plY3Rz IEd1eXM= IHVuZGVyZ29uZQ== IGdyaWxs IER3aWdodA== IDE5Nw== VVNFUg== IGZpbGVzeXN0ZW0= IGNsb2Nrcw== VGF5bG9y IHdyYXBwZXI= IGZvbGRpbmc= b3VzYW5k IFBoaWxpcHBpbmU= QVRJT05BTA== IFBlcnRo IGFzaGVz IGFjY3VtdWxhdGU= IEdhdGV3YXk= U2hvcA== b3Jrc2hpcmU= SGFu IEJhcnJlbA== IExlaA== IFhW IHdoaW0= IHJlcG8= IENH IE1hbQ== IGluY29ycG9yYXRpbmc= IGJhaWxvdXQ= IGxpbmd1aXN0aWM= IGRpc2ludGVn Q0xF IGNpbmVtYXRpYw== IEZpYmVy U3lu aWxpb24= IENvbXBvcw== Y2hlbnM= IG5lb2M= IGJvaWxlZA== RklORQ== b25v dW5jbGU= aWtlbg== IEJN zrk= IHJlY2VpcHRz IGRpc3Bvc2Vk IFRoaXJ0eQ== IFJvdWdo IEFCUw== IG5vdHdpdGhzdGFuZGluZw== b2xsZW4= IyQ= IHVucmVsaWFibGU= IGJsb29t IG1lZGlvY3Jl IHRyYW0= IFRhc21hbg== IHNoYWtlcw== IG1hbmlmZXN0bw== IE1X IHNhdGlzZmFjdG9yeQ== IHNob3Jlcw== IGNvbXB1dGF0aW9u IGFzc2VydGlvbnM= b3Jtb25z YXJhZw== YWJpdA== RGVtb2NyYXRz IExvb3Q= IFZvbGtz aGFpcmVk IGdyYXZpdGF0aW9uYWw= U2luZw== IE1peg== IHRocm90dGxl IHR5cmFubnk= IFZpZXdz IHJvYmJlcg== IE1pbm9yaXR5 IHNocmluZQ== c2NvcGU= cHVycG9zZQ== IG51Y2xldXM= b3VyY2luZw== IFVTREE= IERIUw== d3Jh IEJvd2ll U2NhbGU= IEJFTA== eGk= SXRlcg== ICgpLA== d3JpZ2h0 IHNhaWxvcnM= b3VzZWQ= TkFTQQ== IFByb29m IE1pbmVyYWw= dG9rZW4= IEZE UmV3 IGVsbA== NjMw IGNoYW5jZWxsb3I= IEdvcw== IGFtb3VudGVk IFJlY3Jl b21leg== IE9wdGlt IE9saXZl IHRyYWNrZXI= b3dsZXI= IFVuaXF1ZQ== Um9vdA== IG1hcml0aW1l IFF1cmFu IEFkYXB0 IGVjb3N5c3RlbXM= IFJlcGVhdA== IFNveQ== IElNUA== IGdyYWR1YXRpbmc= YW5kZW0= UHVy IFJlc2V0 IFRyaWNr IFBoaWxseQ== IFR1ZQ== IE1hbGF5c2lhbg== IGNsaW1heA== IGJ1cnk= IGNvbnNwaWM= IFNvdXRoYW1wdG9u IEZsb3dlcnM= IGVzY29ydGVk IEVkdWNhdGlvbmFs IElSQw== IGJydXRhbGx5 ZWF0aW5n IHBpbGxhcg== IFNhbmc= IEp1ZGU= YXJsaW5n IEFtbmVzdHk= IHJlbWluZGluZw== IEFkbWluaXN0cmF0aXZl aGVzZGE= IGZsYXNoZWQ= IFBCUw== cGVyYXRl ZmVhdHVyZQ== IHN3aXBl IGdyYXZlcw== b3VsdHJ5 MjYx YnJlYWtz IEd1ZXI= IHNocmltcA== IFZvdGluZw== cXVpc3Q= IGFuYWx5dGljYWw= IHRhYmxlc3Bvb25z IFNPVQ== IHJlc2VhcmNoZWQ= IGRpc3J1cHRlZA== IGpvdXI= IHJlcGxpY2E= IGNhcnRvb25z YmlhbnM= fSk= Y29weQ== R290 b3VjaGVk UFVU IHN3YXJt bm90YXRpb25z c2FpZA== IHJlYnVpbHQ= IGNvbGxhYm9yYXRl IHJhZ2luZw== IG5hcg== IGRlbW9ncmFwaGljcw== IEREUg== IGRpc3RydXN0 b3NzaWVy IEtybw== IHB1bXBraW4= IHJlZ3JldHM= IGZhdGFsaXRpZXM= IExlbnM= IE9sZQ== cGQ= IHB1cHBldA== IE91dGxvb2s= IFN0YW0= T2w= RmFpcg== VVU= IHJld3JpdHRlbg== xLE= IGZhc2NpbmF0ZWQ= IHZlY3RvcnM= IHRyaWJ1bmFs dWF5 IE1hdHM= IENvaW5z W1s= IDE4MQ== IHJlbmRlcnM= IEthZXBlcm5pY2s= IGVzcGlvbmFnZQ== IHN1bW0= IGRpdGNo QWNjb3VudA== IHNwcmVhZHNoZWV0 IG11dGFudA== cGFzdA== NDA3 IGR5ZQ== IGluaXRpYXRpb24= IDQwMDA= IHB1bmlzaGFibGU= IHRoaW5uZXI= IEtoYWw= IGludGVybWVkaQ== RHVu IEdvdGhhbQ== IGVhZ2VybHk= IHZhZ2luYWw= cG93ZXJz Vlc= IFdBVENIRUQ= IHByZWRhdG9y YW1zdW5n IGRpc3Bhcml0eQ== IFsq IGFtcGg= IG91dHNraXJ0cw== IFNwaXJpdHM= IHNrZWxldGFs 0Ls= IFJlYXI= IGlzc3VhbmNl IExvZ2lj cmVsZWFzZWQ= Wlo= IEJvdW5k RW50cnk= IGV4aXRz aXNvbA== IEZvdW5kZXI= IHdyZQ== IEdyZWVubGFuZA== IE1NTw== dGFrZXI= SU5D 44G+ IGhvdXJseQ== aGVua28= IGZhbnRhc2llcw== IGRpc29i IGRlbW9saXRpb24= 44OL IGVubGlzdGVk cmF0dWxhdGlvbnM= IG1pc2d1aWRlZA== IGVuc3VyZWQ= IGRpc2NvdXJhZ2Vk bW9ydA== IGZsYW5r IGNlc3M= IHJlYWN0cw== IFNlcmU= c2Vuc2l0aXZl IFNlcnBlbnQ= YXNzYWQ= IDI0Nw== IGNhbG1seQ== YnVzdGVycw== IGJsZWVk IFN0cm8= IGFtdXNlbWVudA== IEFudGFyY3RpY2E= IHNjZXB0 IEdhdw== YXE= YXNvbmlj IHNwcmF3bGluZw== bmF0aXZl YXR1cmF0ZWQ= IEJhdHRsZWZpZWxk SVZFUlM= RUI= IEdlbXM= IE5vcnRod2VzdGVybg== IEZpbG1z IEF1dG9tYXRpYw== IGFwcHJlaGVuZA== 44Go IGd1aU5hbWU= IGJhY2tlbmQ= IGV2aWRlbmNlZA== Z2VhbnQ= MDEy IFNpZWdl IGV4dGVybmFsVG8= IHVuZm9jdXNlZFJhbmdl IGd1aUFjdGl2ZVVuZm9jdXNlZA== IGd1aUljb24= IGV4dGVybmFsVG9FVkE= IGV4dGVybmFsVG9FVkFPbmx5 RnJp Y2hhcmQ= ZW5hcmllcw== IGNoaWVmcw== IGNm IEhVRA== IGNvcnJvYm9y IGRC IFRha2Vu IFBhdHJpY2lh cmFpbA== IENoYXJt IExpYmVydGFyaWFu cmlldmU= UGVyc29uYWw= IE9VUg== Z2VyaWVz IGR1bXBpbmc= IG5ldXJvbG9naWNhbA== aXRpbWF0ZQ== IENsaW50b25z cmFmdGVk IE1vbGx5 IHRlcm1pbmFscw== cmVnaXN0ZXI= IGZsYXJl IGVuY29kZWQ= IGF1dG9wc3k= cGVs bWFjaGluZQ== IGV4ZW1wdGlvbnM= IFJveWFscw== ZGlzdGFuY2U= IGRyYWZ0cw== IGxhbWU= IEN1bm5pbmc= IHNwb3VzZXM= IE1hcmtldHM= IENhcnJpZXI= IGltcGx5aW5n IFlhaw== c2lk IGxvc2Vy IHZpZ2lsYW50 IGltcGVhY2htZW50 IGF1Z21lbnRlZA== IEVtcGxveWVlcw== IHVuaW50ZW5kZWQ= dGVybmFsbHk= IFdhdHQ= IHJlY29nbml6YWJsZQ== ZXNzaW0= 5p0= IGNvYXRlZA== cmhh IGxpZXV0ZW5hbnQ= IExlZ2lzbGF0aW9u cHVibGlzaGVk NDQ0 MDEz IGlkZWFsbHk= IFBhc3N3b3Jk IHNpbXBsaWZ5 IE1ldGE= IE1SSQ== IHBsZWFkaW5n b3JnYW5pemVk aGFuZGxlcg== IHVucmF2ZWw= Y29ycmVjdA== IGljeQ== IHBhcmFub2lk IHBhc3Nlcg== IGluc3BlY3Rpb25z b2Zlcg== IEhlYWx0aGNhcmU= Mjgz IEJydXQ= aW9sYQ== Zm9yZ2U= IE1lZGlldmFs TVNO aWV2ZXJz IFByb2dyYW1taW5n 5Yk= IDIyMw== bXU= IENMRQ== dWdh IHNob3BwZXJz IGluZm9ybWF0aXZl IFBsYW5z IHN1cHBsZW1lbnRhdGlvbg== IFRlc3Rz dHlhcmQ= b2N5dGVz IFZlZ2E= IEd1amFyYXQ= ZXJtYW5lbnQ= RXhjZXB0 IExPVA== YWxsYQ== IEN1bW0= IE9zdw== IHZlbm9t IERlYnQ= IERPV04= IHJldW5pb24= IG11Yw== IFJlbGllZg== IGdlb3A= IPCfmA== YWxvZ3Vl QW50aA== ZWNobw== IGNvcnJvcw== IHJlcGxpY2F0aW9u IEJsYXppbmc= IERhdWdodGVy IGluZmxpYw== IExpbmRzZXk= 2Yg= Mjg0 RXhpdA== IGdsb29t VEFJTg== IHVuZGVybWluaW5n IGFkdmlzaW5n aGlkZGVu IG92ZXJmbG93 IGdvcg== dXJkdWU= IGVjaG9lcw== ZW5oYWdlbg== IGltcHVscw== ZHJ1Zw== Y2FzaA== IGFzeW5j IG1pcmFj YXR0cw== cHVuaw== IHBpdm90 IExlZ2lzbGF0aXZl IGJsb2dnZXJz IENsYXc= c2J1cmc= ZHls IFJlY29tbWVuZA== IHZlcnRl IHByb2hpYml0aW5n IFBhbnRoZXI= Sm9uYXRoYW4= IG9taW4= IGhhdGVmdWw= Mjgx IE9yY2hl IE11cmRvY2g= ZG93bnM= IGFzeW1t R0VS QWx3YXlz IGluZm9ybXM= IFdN IFBvbnk= IEFwcGVuZGl4 IEFybGluZ3Rvbg== SmFt IG1lZGljaW5hbA== IFNsYW0= SVRJRVM= IHJlYWZm IFJp Rkc= U3ByaW5n Ym9vbA== IHRoaWdocw== IG1hcmtpbmdz IFJhcXFh IExhaw== cG9sbA== dHNreQ== IE1vcnR5 IERlZmluaXRpb24= IGRlYnVuaw== ZW5kZXJlZA== IExlb25l YXZlcnM= IG1vcnRnYWdlcw== QXBwYXJlbnRseQ== Tmlj aGF1cw== IFRob3VzYW5kcw== YXVsZA== IG1hc2g= c2hvb3Q= IGRpYXJy IGNvbnNjaW91c2x5 SGVybw== ZWFz IE5hdHVyYWxseQ== IERlc3Ryb3llcg== IGRhc2hib2FyZA== c2VydmljZXM= Um9n IG1pbGxlbm5pYWxz IGludmFkZQ== LSg= IGNvbW1pc3Npb25z IEF1Y2tsYW5k IGJyb2FkY2FzdHM= IGZyb250YWw= IGNyYW5r IEhpc3Rvcmlj IHJ1bW91cnM= Q1RW IHN0ZXJpbA== IGJvb3N0ZXI= cm9ja2V0 44K8 dXRzY2hl IFBJ IDIzMw== IFByb2R1Y2Vy IEFuYWx5dGljcw== IGludmFsdWFibGU= IHVuaW50ZW50aW9u IENZ IHNjcnV0aW4= IGdpZ2c= IGVuZ3VsZg== IHByb2xldGFyaWF0 IGhhY2tz IEhldw== YXJhaw== IFNsaW1l aWVsZGluZw== YWdoZXI= IEVsbGlvdA== IHRlbGVjb20= IDIxOQ== dWx0YW4= IEFyYm9y IFNjb3V0cw== QmFu IGxpZmVzcGFu IGJsYXNw Mzg4 IGp1ZGljaWFyeQ== IENvbnRpbmVudGFs YXNraW5n TWND TEVE IGJhZ2dhZ2U= IFNvcmNlcmVy IHJlbW5hbnRz IEdyaWZmaXRo ZXRzdQ== IFN1YmFydQ== IFBlcnNvbmFsaXR5 ZGVzaWduZWQ= dXNoaW1h YWduYXI= IHJlY29pbA== IHBhc3Npb25z XCI6 IHRlZQ== IGFib2xpdGlvbg== IENyZWF0aW5n amFj IDE5NA== MDE5 IHBpbGxhcnM= cmljaGVk LyI= dGs= IGxpdmVsaWhvb2Q= IHJvYXN0ZWQ= YWhvbg== IEh1dGNo YXNzZXJ0 IGRpdmlkZW5k IGtuaXQ= IGRhdW50aW5n IGRpc3R1cmJhbmNl IHNoYWxl IGN1bHRpdmF0ZWQ= IHJlZnJpZ2VyYXRvcg== TEI= IE5FVA== IGNvbW1lcmNpYWxz IHRoaW5rZXJz NDU1 IGNob3A= QnJvYWQ= IHN1c3BpY2lvbnM= IHRhZ2dlZA== bGlmdGluZw== IHN0eWxpc2g= IFNoaWVsZHM= U2hvcnRseQ== IHRhaWxz QXV0aA== U1RF IEdBTUU= IHNlaXNt IEtpcw== b2xvZ25l IGNvd29yaw== IGZvcmNpYmx5 IHRoeXJvaWQ= IFBC QU5F bWFycmllZA== aG9yc2U= IHBvbHltZXI= IENoYWw= b2Rvcg== REVCVUc= IENvbnRleHQ= IGJsaXNz IHBpbnBvaW50 IE1hdGhlbWF0 bGVncmFt IFdlZWtlbmQ= IGxhYmVsbGVk IGJhcnQ= aXRsZXM= IGVzdHJvZ2Vu 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU Iic= IHZpc2libHk= IG91dHNpZGVy YWlkYQ== QXJlYQ== IGRpc3NlbWlu IGRpc2hvbmVzdA== IENsb3NlZA== IEJ1bGxldGlu IFJhbXNleQ== c3dvcmQ= IFhJ b3VyY2Vk U2FtZQ== MzQ2 IFJlcGU= IEtvdQ== Y2FrZQ== ZW1pcw== Q2FjaGU= IE1lYW5pbmc= IEVubGlnaHQ= b25vbXk= IG1hbmlmZXN0YXRpb24= c3dvcnRo SmF5 IGNob3Jl w7Zy RHJlYW0= IHNhbmN0aW9uZWQ= IGN1bHR1cmFsbHk= IEFyYQ== TmF2 IHRoZW9sb2dpY2Fs IHN0cnV0 IFZP IEhhbmRib29r IGNvbnN0cnVjdGluZw== IMK2 IEJlbmVmaXRz IFBzeWNob2xvZ2ljYWw= c2Fj 5bg= cG9saWN5 IE1hdHRlcnM= IFJlcG9ydGVk IEJ5dGU= IHZpdHJv IE1haWRlbg== IGxhbQ== IEplbm5pbmdz IGdhcm1lbnQ= IFJ1dGdlcnM= IFN0YWZmb3Jk IFdlbGxpbmd0b24= IGludGVybWl0dA== IG5wbQ== IG9yZGVhbA== IHBsdWdnZWQ= b29taW5n aW5pc2hlZA== ZnJhbWV3b3Jr IHRpbWJlcg== IGNhc3M= IDg1MA== aWxlc3M= IFJlZHV4 NzY4 U3RyZQ== IHN1cnBhc3NlZA== d2hlbA== IHBhcmFsbGVscw== IHZlaWw= IEdJ IFJFU1Q= IHJlYWRpbmVzcw== c29ydA== IG1vZGlmeWluZw== IFNsYXRl cnVmZg== IG1hcmJsZQ== IGluZnJhcmVk IGF1ZGl0b3I= IEZBTlRBU1k= IFBvdmVydHk= IFNQRA== ICIo S3k= UkFZ IGV4ZWN1dGlvbnM= IEJldmVybHk= IE1hcnhpc20= IEJ1cnN0 IEthbGk= ZXN0b25lcw== Q2xlYXJseQ== RWxs 44Gn IFByb2NlZWRpbmdz VG9rZW4= SUZJQw== w7Fh Q2VudHJhbA== IEhhbGV5 IERyYW1h IGZvcm1hdGlvbnM= T1JO Qm9va3M= IGRvbWluYXRpbmc= IEZseWVycw== IENvbXBhbmlvbg== IGRpc2NpcGxpbmVk IFl1Z29zbGF2 IFNwZWxscw== IHZlbmdlYW5jZQ== IGxhbmRsb3Jkcw== TGVu IE9ncmU= YW5vaWE= IHBpZXJjaW5n IGNvbmdyZWc= IHNjb3Jlcg== b2JpYQ== IG5pY2tlbA== IExlYXJucw== IHJlam8= IG1hc3RlcnBpZWNl Rmxhc2g= IGluaGFiaXRlZA== IE9wZW5HTA== IER1ZA== IElDTw== IGFydGVy IHBsdXI= IG1hc3Rlcnk= IGxvbmdzdGFuZGluZw== c3RlZA== IHdpbmVz IHRlbGV2aXNlZA== IFNocmluZQ== IEJheWVybg== IOKTmA== IGVuY2xvc3VyZQ== am9obg== IHByb3BoZXRz IFJlc3VycmVjdGlvbg== IE9yZGVycw== IHVuZXZlbg== cmFscw== IGR3aW5k IExhaA== IFNsb3Zlbg== Mzc4 IGluc2lzdGVuY2U= YWZmbGU= IENsb25l IGhhcmRzaGlw IENvbmdyZXNzbWFu IHBsZWFk IHJldmlld2Vycw== IGN1cmVk IDE5MzU= YXNsZXk= ZmFrZQ== IFRoaW5raW5n eWRpYQ== UEFSVA== IERvdGE= b2l0 IHdoaXBwZWQ= IGJvdW5jaW5n IEhpc3Bhbmljcw== Y29taW5ncw== IGNhbm5hYmlu IENoYW1iZXJz IFphY2s= T3B0aW9uYWw= IGNvYXRz IHByb3dlc3M= IE5vcnRvbg== IHBsYWlubHk= IGZyZWlnaHQ= IGluaGliaXRpb24= IGNsYW0= IDMwMw== a2Vm YWxlaWdo THVrZQ== IHBzeWNobw== YXRvcml1bQ== TUVE IHRyZWF0aWVz IGluZGlzYw== IGRj T1BT IHJlc2lsaWVudA== IEludGVyc3RhdGU= IHNsYWNr IG11bmRhbmU= IGVzdGFibGlzaGVz MzU5 IHN0cmFpbmVk IG5vbmQ= U3Vz IGNhc3Rl YXJhdGU= aWV2aW5n IHVuZmFpcmx5 IHBhcnNlcg== b25pYWw= dXJzaXZl Vmlh IE90dG8= IEF1dGhvcml0aWVz c3Ryb2tl S1I= IE1lcmN5 IGZ1cm5pc2hlZA== IG91dHNldA== IG1ldGlj MTk4Mg== b2xpdGhpYw== IFRlbnQ= b2dpY2Fs IEFpcmNyYWZ0 IGhpZGVz IEJlY2FtZQ== IGVkdWNhdG9ycw== cmVhY2hpbmc= IHZvbGF0aWxpdHk= IHRvZGRsZXI= IE5BU0NBUg== IFR3ZWx2ZQ== IEhpZ2hsaWdodHM= IGdyYXBl IHNwbGl0cw== IHBlYXNhbnQ= IHJlbmVn IE1TSQ== VGVtcA== c3RhcnM= IHRyZWs= IEh5ZGU= YmluZGluZw== IHJlYWxpc20= IG94aWRl IEhvcw== IG1vdW50cw== IGJpdGluZw== IGNvbGxhcHNpbmc= IHBvc3RhbA== IG11c2V1bXM= IGRldGFjaGVk IHJlc3BlY3Rpbmc= IG1vbm9wb2w= IHdvcmtmbG93 IENha2U= VGVtcGxhdGU= IE9yZ2FuaXNhdGlvbg== IHBlcnNpc3RlbmNl MzY5 Q29taW5n QnJhZA== IHJlZHVuZGFudA== IEdUQQ== IGJlbmRpbmc= IHJldm9rZWQ= IG9mZmVuZGluZw== IGZyYW1pbmc= IHByaW50Zg== Q29tbXVu bWVtYmVycw== T3V0c2lkZQ== IGNvbnN0cnVlZA== IGNvZGVk Rk9SRQ== IGNoYXN0 Q2hhdA== SW5kaWFu IFlhcmQ= PyEi IFBvcnRz IFhhdmllcg== IFJFVA== Jy4i IEJvYXQ= aXZhdGVk aWNodA== dW1lcmFibGU= RHM= IER1bm4= IGNvZmZpbg== IHNlY3VyZWx5 IFJhcHRvcnM= IEJlcw== SW5zdGFsbGF0aW9u IGluY2VwdGlvbg== IEhlYWx0aHk= ZW5kYW50cw== IHBzeWNob2xvZ2lzdHM= IFNoZWlraA== Y3VsdHVyYWw= IEJsYWNrQmVycnk= c2hpZnQ= RnJlZA== b2NoZQ== IGNha2Vz IFNFTw== IEdpYW4= IEFzaWFucw== b2dnaW5n ZWxlbWVudA== IHB1bmRpdHM= IFZhdWdo IEdhdmlu IGhpdHRlcg== IGRyb3duZWQ= IGNoYWxr IFppa2E= IG1lYXNsZXM= ODAy 4oCmLi4= IEFXUw== XSI= IGRpc3RvcnQ= IE1hc3Q= IGFudGlib2RpZXM= IE1hc2g= TWVtb3J5 IFVnYW5kYQ== IFByb2I= IHZvbWl0aW5n IFR1cm5z IG9jY3VweWluZw== IGV2YXNpb24= IFRoZXJhcHk= IHByb21v IGVsZWN0cg== IGJsdWVwcmludA== IERyZQ== cHJpY2Vk IERlcG90 IGFsbGV2aWF0ZQ== IFNvbWFsaQ== bWFyZw== bmluZQ== IG5vc3RhbGdpYQ== IFNoZXBoZXJk IGNhdmFscnk= IHRvcnBlZA== IEJsb29keQ== eGI= IHNhbms= IGdvYWx0 cmVwb3J0cHJpbnQ= ZW1iZWRyZXBvcnRwcmludA== Y2xvbmVlbWJlZHJlcG9ydHByaW50 IEluaXRpYWxseQ== IEZpc2NoZXI= IG5vdGV3b3J0aHk= Y2Vybg== IGluZWZmaWNpZW50 cmF3ZG93bmxvYWQ= cmF3ZG93bmxvYWRjbG9uZWVtYmVkcmVwb3J0cHJpbnQ= Y2F0aW9u IER5bmFzdHk= bGFn REVT IGRpc3RpbmN0bHk= IEVzdG9uaWE= IG9wZW5uZXNz IGdvc3NpcA== cnVjaw== V2lkdGg= IElicmFoaW0= IHBldHJvbGV1bQ== IGF2YXRhcg== IEhlZA== YXRoYQ== IEhvZ3dhcnRz IGNhdmVz Njc4 IHNhZmVndWFyZA== IE1vZw== aXNzb24= IER1cmhhbQ== c2xhdWdodA== IEdyYWR1YXRl IHN1YmNvbnNjaW91cw== IEV4Y2VsbGVudA== IER1bQ== LS0tLS0= IHBpbGVz IFdPUks= IEdhcm4= IEZvbA== IEFUTQ== IGF2b2lkcw== IFR1bA== IGJsZWFr RUxZ aXZpc3Q= bGlnaHRseQ== UGVycw== IERvYg== IExT IGluc2FuaXR5 zrU= YXRhbGll RW5sYXJnZQ== IHR3aXN0cw== IGZhdWx0eQ== IHBpcmFjeQ== IGltcG92ZXI= IHJ1Z2dlZA== IEZhc2hpb24= IHNhbmRz Jz8= c3dpY2s= IG5hdGl2ZXM= IGhlbg== IE5vaXNl 44OX IGdyZWVucw== IGZyZWV6ZXI= IGR5bmFzdHk= IEZhdGhlcnM= IE5ld2Fyaw== IGFyY2hhZW9sb2dpY2Fs IG90 b2Jhcg== IGJsb2NrYWRl IGFsbGVyZw== TFY= IGRlYml0 IFJGQw== IE1pbHRvbg== IFByZXNzdXJl IHdpbGxpbmdseQ== IGRpc3Byb3BvcnRpb25hdGU= IG9wcHJlc3NpdmU= IGRpYW1vbmRz IGJlbG9uZ2luZ3M= MTk3MA== IGJlbGxz IGltcGVyaWFsaXNt IDIyNw== IGV4cGxvZGluZw== IEVjbGlwc2U= IDE5MTk= IHJhbnQ= IG5vbWluYXRpb25z MzQ3 IHBlYWNlZnVsbHk= cmljYQ== IEZVQ0s= IHZpYnJhdGlvbg== bWFsaW5r IHJvcGVz IEl2YW5rYQ== IEJyZXdlcnk= IEJvb2tlcg== IE93ZW5z Z29lcnM= U2VydmljZXM= IFNuYXBl IDE5MQ== Mzk1 IDI5OQ== anVzdGljZQ== IGJyaQ== IGRpc2Nz IHByb21pbmVudGx5 IHZ1bGdhcg== IHNraXBwaW5n bHZlcw== IHRzdW5hbWk= Mzc0 IFVydWc= IEVpZA== cmVjYXRlZA== cGhlbg== IGZhdWx0cw== IFN0YXJ0ZWQ= OTUw IHBp IGRldGVjdG9y IGJhc3RhcmQ= IHZhbGlkYXRlZA== U3BhY2VFbmdpbmVlcnM= T1VSQ0U= ICh+ IHVuc3Vy IGFmZmlybWVk IGZhc2Npc20= IHJlc29sdmluZw== IENoYXZleg== IEN5bg== IGRldHJhY3Q= TG9zdA== IHJpZ2dlZA== IGhvbWFnZQ== IEJydW5v NTU1 ZWNh IHByZXNzZXM= IGh1bW91cg== IHNwYWNpbmc= ICcv b2xraWVu Q291bg== T1BFUg== VHJl U29u IENhbWJvZGlh aWVycmU= bW9uZw== b3p5 IGxpcXVpZGl0eQ== IFNvdmlldHM= IEZlcm5hbmRv IDIyOQ== IHNsdWc= IENhdGFsYW4= ZWxlY3RyaWM= IHNjZW5lcnk= IEhlYXJ0aA== IGNvbnN0cmFpbmVk IGdvYWxpZQ== IEd1aWRlbGluZXM= IEFtbW8= IFBlYXJzb24= IHRheGVk IGZldHVz UmVzcG9uc2U= IEFsZXhpcw== dGhpYQ== R3V5 IHJlY29uc3RydWN0 IGV4dHJlbWVz IGNvbmNsdWRpbmc= IFBlZw== b29rcw== IGRlZHVjdGlvbnM= Um9zZQ== IGdyb3VuZGJyZWFraW5n IFRhcmc= 44OB IFJldmU= cmVzb3VyY2U= IG1vb25z IGVsZWN0cm9tYWduZXRpYw== IGFtaWRzdA== IFZpa3Rvcg== TkVTUw== QkFDSw== IGNvbW11dGU= IEFuYWhlaW0= IGZsdWN0dWF0aW9ucw== NjQw IG5vb2RsZXM= IENvcGVuaGFnZW4= IFRpZGU= IEdyaXp6 IFNFRQ== IHBpcGVsaW5lcw== IHNjYXJz ZW5kbw== YWd1cw== IEVURg== LyM= IEJlY29tZQ== NDQ4 IHZpc2M= IFJlY29tbWVuZGVk IGp1bXBlcg== IGNvZ25pdGlvbg== IGFzc2Fzc2lu IHdpdG5lc3Npbmc= IFNldHVw IGxhYw== dmlt SVNN cGFnZXM= U1NM MzU4 IGFkamVjdA== aW5kdXN0cmlhbA== bG9yZQ== Y2hlcnk= IGdsaXR0ZXI= IGNhbGY= RmxvcmlkYQ== IHNwb2lsZXJz IHN1Y2NlZWRz IGNoYW50aW5n IHNsb2dhbnM= IFRyYWN5 VmlzaXQ= cm9sb2d5 IG1vcm5pbmdz IGxpbmVhZ2U= IHNpcA== IGludGVuc2VseQ== IGZsb3VyaXNo IFNsZWVwaW5n IEZlbQ== b3Jwb3I= IEtsYW4= IERhcnRo aGFjaw== IE5pZWxzZW4= IHR1bW9ycw== IHByb2N1cmVtZW50 IFlvcmtzaGlyZQ== IHJhaWRlZA== S1k= QW5uYQ== IC8vWw== IERpc29yZGVy IE11c3Rhbmc= IFdlbg== IFRyeWluZw== c3E= IGRlbGl2ZXJpZXM= IHNodXR0ZXI= IGNlcmVicmFs IGJpcG9sYXI= IENO bGFzcw== amV0 IGRlYmF0aW5n Pjo= IGVhZ2xl Z3JhZGVz IERpeG9u VUdD TUFT IERyYWNv IE1hY2hpbmVz YWZmZXI= IGVtYW4= wrI= cHJvbg== IEd5bQ== IGNvbXBhcmF0aXZlbHk= IFRyaWJ1bmFs UFJP IGxleA== IGZlcnRpbGU= IGRlcHJlc3Npbmc= IHN1cGVyZmljaWFs ZXNzZW50aWFs IEh1bnRlcnM= Z3A= IHByb21pbmVuY2U= TGliZXI= IEFuY2VzdA== b3RlY2hub2xvZ3k= IG1vY2tpbmc= IFRyYWZm lpo= TWVkaXVt SXJhcQ== IHBzeWNoaWF0cmlzdA== UXVhbnRpdHk= IExlY3Q= IG5vaXN5 NTIw R1k= IHNsYXBwZWQ= IE1UVg== IHBhcmE= cHVsbA== TXVsdGlwbGU= YXNoZXI= IG5vdXI= IFNlZw== U3BlbGw= dm91cw== b3JkaWFs U2VuaW9y IEdvbGRiZXJn IFBsYXNtYQ== bmVlZA== IG1lc3Nlbmdlcg== ZXJldA== IHRlYW1lZA== IGxpdGVyYWN5 IExlYWg= IERveWxl IGVtaXR0ZWQ= VVg= IGV2YWRl IG1hemU= IHdyb25nbHk= IExhcnM= IHN0ZXJlb3R5cGU= IHBsZWRnZXM= IGFyb21h IE1FVA== IGFjcmU= IE9E IGZm IGJyZXdlcmllcw== IEhpbHRvbg== dW5kbGU= IEthaw== IFRoYW5rZnVsbHk= IENhbnVja3M= aW5jdGlvbnM= IEFwcGVhcnM= IGNvZXI= IHVuZGVybWluZWQ= cm92ZXJz QW5kcmU= IGJsYXpl dW1lcnM= IGZhbWluZQ== YW1waGV0YW1pbmU= dWxrYW4= QW1vdW50 IGRlc3BlcmF0aW9u d2lraXBlZGlh ZGV2ZWxvcG1lbnQ= IENvcmludGg= dXNzaWE= SmFja3Nvbg== TEk= TmF0aXZl UnM= T2hpbw== IEthdGhsZWVu Rm9ydHVuYXRlbHk= IGF0dGVuZGFudA== IFByZWZlcnJlZA== IERpZG4= IFZz TWlz IHJlc3BvbmRlbnQ= IGJvdW4= c3RhYmxl IHBhdmVk IHVuZXhwbA== IENoZW5leQ== TE0= IEN1bGw= Ymxvd24= IGNvbmZyb250aW5n b2Nlc2U= c2VydmluZw== V2k= IExpdGh1YW5pYQ== YW5uaQ== IHN0YWxr aGQ= IHZlbmVy QVBI eW5jaHJvbm91cw== VVJS dW1hYmx5 aGlzdG9yaWM= SGFsZg== SGF5 IHJlc2lsaWVuY2U= c3BlY3Rpb24= IGFiYW5kb25pbmc= T2Jz IERlYmJpZQ== IGdyYWRpZW50 IFBsYWludA== IENhbmFs QVJDSA== IGV4cGFuc2l2ZQ== IGZ1bmc= IGJvdW5jZWQ= VW5k IHByZWNhdXRpb25z IGNsYXJpZmljYXRpb24= IGRhZ2dlcg== IGdyaXBz IMK1 IFJpdmVyYQ== IFVuZGVhZA== aXNpdGVz IEZJUlNU w7Fv YXVkaQ== IGhvc3RhZ2Vz IGNvbXBsaWFudA== IGFsdW1uaQ== U2V2ZW4= IGN5YmVyc2VjdXJpdHk= ZWl0aGVy Q29sbGVjdA== IGludmFyaWFibHk= IFNvY2k= IGxhd21ha2Vy IGFsZQ== IFBlcnNvbmFsbHk= TmF6aQ== IGN1c3RvbWl6YXRpb24= IFByb2M= IFNhc2thdGNoZXdhbg== ZWF0dXJpbmc= IHNwYXJlZA== IGRpc2NvbnRpbnVlZA== IGNvbXB1dGF0aW9uYWw= IE1vdG9yb2xh IHN1cHJlbWFjaXN0 Z292ZXJubWVudGFs IHBhcmFkaXNl IERvd25pbmc= IE5pa29u IGNhdGFseXN0 YmVycmE= VG9yb250bw== ODc1 YmV0YQ== IE1hY3Jvbg== IHVucmVhbGlzdGlj dmVjdG9y IFZlaGljbGVz aXRpdmVuZXNz IFJW IENvbGJlcnQ= c2lu b2pp ZW50aW4= IEtyaXNo aGVsbG8= ZmZpZWxk b2t5 IFRhdGU= IG1hcGxl IGFpZHM= Y2hlbWljYWw= MzM0 bnV0cw== IFdhcnA= IHh4 IFJvYmI= dW1lcm91cw== Xy1f ZnRpbWU= IFZX IHdpbmdlcg== IERvbWU= dG9vbHM= IFBW IEdlb3JnZXRvd24= IGdlYXJlZA== IGppaGFkaXN0cw== IGNw IHN0ZXJvaWRz TW90aGVy Y2xlcm9zaXM= IERSTQ== bmVzaWE= IGxpbmdlcg== IGltbWVyc2l2ZQ== IENPVU4= IG91dHdlaWdo ZW5zdWFs QmFuZA== IHRyYW5zZm9ybXM= bWF0Y2hlZA== cHNvbnM= IEp1ZGljaWFs ZmFjdG9y IHJlZmVycmFs IG9kZGx5 IFdlbmdlcg== QnJpbmc= IEJvd3M= NjAy SUNMRQ== IGxpb25z IEFjYWRlbWlj IFRob3Ju IFJhaWRlcg== a2VmZWxsZXI= U3RvcmFnZQ== TG93ZXI= IE9ydA== IEVxdWFsaXR5 QUxU IFNPQw== VHlwZXM= IGx5bg== IEFzc2V0 Y29hdA== VFBQ Q1ZF IFBpb25lZXI= YXBwbGljYXRpb24= TW9kZXJu IEhL RW52aXJvbm1lbnQ= QWxyaWdodA== UmFpbg== SVBQ IFNoaWl0ZQ== IG1vdW5k IEFiaWxpdGllcw== Y29uZGl0aW9u U3RhZmY= IGNvbXBldGVuY2U= IE1vb3I= IERpYWJsbw== IHdpdGhoZWxk IG9zdGVuc2libHk= IEJyb20= IG1zZw== IGRlbm9taW4= IFJlZmVyZW5jZXM= IEZQ IHBsdW5nZWQ= IHBhbXBo bW92aW5n Y2VudHJhbA== IGRvd25yaWdodA== IGZhZGluZw== VGFs VHlw IFRoeQ== dWtlcw== aXRoZQ== IG92ZQ== IGJhdHRsZWQ= IHNlYWZvb2Q= IGZpZ3Vy IFJE Y3JvcA== IHNxdWFkcw== e1w= 4Lk= IEVo IGludGVydmlld2luZw== IFFpbg== IGFzcGlyaW5n UExJQw== IGNsYXVzZXM= IEdhc3Q= IE5pcg== IGx1Z2dhZ2U= IGhvc2U= IHN5c3RlbWQ= IGRlc2NlbmRpbmc= IFJldmlzZWQ= IFJhaWxz YWxpZ24= NzA5 MzM3 IGZ1Zw== Y2hhcmdpbmc= dGFncw== IHV0ZXI= a2lzaA== V0FSTklORw== NDkw cHJvZml0cw== IHZveWFnZQ== IGFjZQ== IFZhbmd1YXJk IFRhbmtz IE11aw== IDIyNg== U2FmZQ== QXJtb3I= IHZvbGNhbmlj IHdvbWI= IE1JTA== IGJlZ2lubmVy IFJlY29nbg== IEFBUA== UExBWQ== KSE= IGRldGVjdGluZw== Y24= IGJyZWFjaGVz QmFzaWNhbGx5 IFBhZw== IE11bmljaXBhbA== IEluZGll IExhZg== IERpc2FibGU= IE9sc29u IHJlc3RyYWluZWQ= IHJ1bGluZ3M= IGh1bWFuZQ== ZXZlbnRz IENpbmVtYQ== ZGlzcGxheVRleHQ= IEhhdGNo YWN0aW9uRGF0ZQ== b25uYWlzc2FuY2U= IGFzc2F1bHRpbmc= IEx1Zw== Q0hBVA== IHZpZ29yb3Vz IFBlcnNl IGludG9sZXJhbmNl IFNuYXBjaGF0 IFNoYXJrcw== IGR1bW15 IERpYWdu IEd1aXRhcg== aW1ldGVycw== NDAz UkVH QXg= IHNlcGFyYXRlcw== IE1haG0= IHR2 amFo T09M Q2lyYw== IFdpbmRzb3I= dXNzaWFu IGludHVpdGlvbg== IGRpc2RhaW4= IERvbm92YW4= IDIyMQ== RW1i IGNvbmRlbW5pbmc= IGdlbmVyb3NpdHk= enp5 IHBhbnRpZXM= IFByZXZlbnQ= QWN0aW9uQ29kZQ== QU5B MzQy ZXh0ZXJuYWxBY3Rpb25Db2Rl IHNwZWNpZnlpbmc= IGNyeXN0YWxs SmVyZQ== IHJ1cHQ= IEFwcHJlbnRpY2U= IHByb2ZpbGluZw== 0Lo= U3RyaWtl IHNpZGVsaW5l IG9ibGlnYXRlZA== IG9jY3VsdA== IGJ1cmVhdWNyYXRpYw== YW50aWNhbGx5 cnVwdGVk bmVnYXRpdmU= IEV0aGlvcGlh IENpdmlj IGluc2lkZXJz ZWxpZ2libGU= IFRWcw== IEJBUg== IFRJ aW9sb2dpc3Q= IEFJUg== IHN1YnN0aXR1dGVk QXJhYg== IFNhdWw= IFlvZw== cHJlbQ== IGJ1aWxkZXJz IHN0YXRpb25hcnk= IGRvdWJ0ZnVs IHZpZ29yb3VzbHk= IHRocmlsbGluZw== UGh5c2ljYWw= IENhcmV5 IEh5ZHJh Z2VvbmluZw== IFNseQ== eXRvbg== IGJvcnJvd2Vycw== IFBhcmtpbnNvbg== IOs= IEphbWFpY2E= IHNhdGly IGluc3VyZ2VudHM= IEZpcm0= IGlzb3Q= IEthcm4= b3VybmluZw== YWtlbnM= ZG9jcw== bGl0dGxl IE1vbmFjbw== Q0xBU1M= VHVya2V5 THk= IENvbmFu YXNzaWM= IHN0YXJyZWQ= IFBhY2Vycw== ZXRpZXM= IHRpcHBpbmc= TW9vbg== IFJ3 c2FtZQ== IGNhdml0eQ== IGdvb2Y= IFpv U2hvY2s= dW1tZXI= IGVtcGhhc2l6ZXM= IHJlZ3JldHQ= IG5vdmVsdHk= IGVudnk= IFBhc3NpdmU= cnc= NTA1 IGluZGlmZmVyZW50 IFJpY2E= IEhpbXNlbGY= IEZyZWRkaWU= IGFkaXA= 5LiA IGJyZWFrb3V0 IGh1cnJpZWQ= IEh1YW5n IERpc2s= IHJvYW1pbmc= Pz8/Pz8tPz8/Pz8t VVY= IFJpY2t5 IFNpZ21h IG1hcmdpbmFsaXplZA== IGVkaXRz IDMwNA== bWVtb3J5 IHNwZWNpbWVu Mjkz 44Gv IHZlcnRpY2FsbHk= IGF1ZGl0aW9u IEhlY2s= IGNhc3Rlcg== IEhvbGRpbmdz YWRhbA== IENyb24= IExpYW0= IGRlZmxlY3Q= UGljaw== IERlYnVn UkVG IHZlcnNhdGlsaXR5 b3RoZXM= Y2xhc3NpZmllZA== IE1haGFy IEhvcnQ= Q291bnRlcg== c3Rhc3k= bm90aWNlZA== MzMx IFNoaW0= ZnVjaw== IEJpZQ== IGFpcmluZw== IFByb3RlaW4= IEhvbGRpbmc= IHNwZWN0YXRvcnM= aWxpYXRlZA== IFRoYXRjaGVy bm9zaXM= 44O844Oz VGVsZQ== Qm9zdG9u IFRlbXBs c3RheQ== IGRlY2xhcmF0aW9ucw== NDc5 Vm9sdW1l IERlc2lnbmVy IE92ZXJ3YXRjaA== aWRhZQ== IG9ud2FyZHM= IG5ldHM= IE1hbmlsYQ== cGFydGljdWxhcmx5 IHBvbGl0aWM= b290aGVy IHBvcnRyYWl0cw== IHBhdmVtZW50 Y2ZmZmY= IHNhaW50cw== IGJlZ2lubmVycw== RVNQTg== IHNob3J0Y29taW5ncw== 4pWQ4pWQ IGNvbWV0 IE9yZ2FuaWM= cXVlbA== IGhvc3BpdGFsaXplZA== QnJlYWs= IHBlZWw= ZHlsaWI= YXNweA== dXJhbmNlcw== IFRJTQ== UGc= IHJlYWRhYmxl IE1hbGlr IG11enpsZQ== IGJlbmNobWFya3M= ZGFs IFZhY2M= IEhpY2tz NjA5 IEJpYmxpY2Fs aGVuZw== IG92ZXJsb2Fk IENpdmlsaXphdGlvbg== IGltbW9yYWw= IGZyaWVz 44KS IHJlcHJvZHVjZWQ= IGZvcm11bGF0aW9u anVn aXJleg== Z2Vhcg== IGNvYWNoZWQ= TXBTZXJ2ZXI= IFNK IEt3 SW5pdA== ZGVhbA== IE9ybw== IExva2k= IFNvbmdz IDIzMg== IExvdWlzZQ== YXNpb25hbGx5 IHVuY29uZA== b2xseXdvb2Q= IHByb2dyZXNzaXZlcw== IEVub3VnaA== IERvZQ== IHdyZWNrYWdl IGJydXNoZWQ= IEJhc2VUeXBl IHpvbmluZw== aXNoYWJsZQ== aGV0aWNhbGx5 IENhdWN1cw== IEh1ZQ== IGthcm1h IFNwb3J0aW5n IHRyYWRlcg== IHNlZW1pbmc= IENhcHR1cmU= NDMw YmlzaA== IHR1bmVz IGluZG9vcnM= IFNwaGVyZQ== IERhbmNpbmc= VEVSTg== IG5vYg== IEdTVA== bWFwcw== IHBlcHBlcnM= Rml0 IG92ZXJzZWVz IFJhYmJp IFJ1bGVy dmVydGlzaW5n b2ZmaWNl eHh4 IHJhZnQ= Q2hhbmdlZA== IHRleHRib29rcw== TGlua3M= IE9tbg== 44CR IGluY29udmVuaWVuY2U= IERvbmV0c2s= PX4= IGltcGxpY2l0bHk= IGJvb3N0cw== IEJvbmVz IEJvb20= Q291cnRlc3k= IHNlbnNhdGlvbmFs QU5Z IGdyZWVkeQ== ZWRlbg== IGluZXhwZXI= IExlcg== IFZhbGU= IHRpZ2h0ZW4= IEVBUg== IE51bQ== IGFuY2VzdG9y U2VudA== IEhvcmRl dXJnaWNhbA== YWxsYWg= IHNhcA== YW1iYQ== IFNwcmVhZA== dHdpdGNo IGdyYW5kc29u IGZyYWN0dXJl IG1vZGVyYXRvcg== IFNldmVudGg= IFJldmVyc2U= IGVzdGltYXRpb24= Q2hvb3Nl IHBhcmFjaA== IGJhcnJpYw== 44CQ IGNvbXBhc3M= IGFsbGVyZ2lj 4oCV T1RIRVI= ZXJyaWxsYQ== IHdhZ29u IHppbmM= IHJ1YmJlZA== IEZ1bGxlcg== IEx1eGVtYm91cmc= IEhvb3Zlcg== IGxpYXI= IEV2ZW5pbmc= IENvYmI= ZXN0ZWVt IHNlbGVjdG9y IEJyYXds aXNhbmNl IEVr IHRyb29w IGd1dHM= IEFwcGVhbA== IFRpYmV0YW4= IHJvdXRpbmVz IE1lbnQ= IHN1bW1hcml6ZWQ= c3RlYW1hcHBz IHRyYW5xdQ== IDE5Mjk= b3Jhbg== IEF1dGhlbnQ= IGdtYXh3ZWxs IGFwcHJlaGVucw== IHBvZW1z IHNhdXNhZ2U= IFdlYnN0ZXI= dXJ1cw== IHRoZW1lZA== IGxvdW5nZQ== IGNoYXJnZXI= U3BvaWxlcg== IHNwaWxsZWQ= aG9n IFN1bmRlcg== IEFpbg== IEFuZ3J5 IGRpc3F1YWw= IEZyZXF1ZW5jeQ== IEV0aGVybmV0 IGhlbHBlcg== UGVyY2VudA== IGhvcnJpZnlpbmc= IGFpbA== IEFsbGFu RUVF IENyb3NzaW5n NDQ5 IGhvbG9n IFB1enpsZXM= IEdvZXM= ZXJlbm4= NjA0 44GP IFJhZmFlbA== IGF0dGVu IEVtYW51ZWw= IHVwcm8= IFN1c3A= UHN5Y2g= IFRyYWluZXI= IE5FUw== IEh1bnRz YmVjdWU= IGNvdW5zZWxvcg== UnVsZQ== IHRveGlucw== IGJhbm5lcnM= cmlmaWNl IGdyZWV0aW5n IGZyZW56eQ== IGFsbG9jYXRl ICop ZXhwcg== NTAz IENoaWNr IFRvcm4= IGNvbnNvbGlkYXRpb24= IEZsZXRjaGVy c3dpdGNo ZnJhYw== Y2xpcHM= IE1jS2lu IEx1bmFy TW9udGg= SVRDSA== IHNjaG9sYXJseQ== cmFwZWQ= Mzk4 IDE5MTA= IGVncmVn IGluc2VjdXJl IHZpY3RvcmlvdXM= Y2ZmZmZjYw== IHNpbmdsZWQ= IGVsdmVz IFdvbmQ= YnVyc3Q= IGNhbW91Zmw= IEJMQUNL IGNvbmRpdGlvbmVk 54k= YW5zd2VyZWQ= IGNvbXB1bHNvcnk= YXNjaXN0 IHBvZGNhc3Rz IEZyYW5rZnVydA== Ym5i IG5lb2xpYmVyYWw= IEtleWJvYXJk IEJlbGxl d2FybQ== IHRydXN0cw== IGluc3VyZWQ= IEJ1Y2M= dXNhYmxl NjA3 IFBsYWlucw== IDE4OTA= IHNhYm90YWdl IGxvZGdlZA== ZmVsdA== IGdh IE5hcmM= IFNhbGVt IHNldmVudHk= IEJsYW5r cG9ja2V0 IHdoaXNwZXI= IG1hdGluZw== b21pY3M= IFNhbG1hbg== IEthZA== IGFuZ2VyZWQ= IGNvbGxpc2lvbnM= IGV4dHJhb3JkaW5hcmlseQ== IGNvZXJjaW9u R2hvc3Q= YmlyZHM= 6IA= a29r IHBlcm1pc3NpYmxl YXZvcmFibGU= IHBvaW50ZXJz IGRpc3NpcA== YWNp IHRoZWF0cmljYWw= IENvc21pYw== IGZvcmdldHRpbmc= IGZpbmFsaXplZA== 5aSn eW91dA== bGlicmFyeQ== IGJvb21pbmc= IEJlbGlldmU= IFRlYWNoZXI= IExpdg== IEdPT0RNQU4= IERvbWluaWNhbg== T1JFRA== IFBhcnRpZXM= IHByZWNpcGl0YXRpb24= IFNsb3Q= Um95 IENvbWJpbmVk IGludGVncmF0aW5n IGNocm9tZQ== IGludGVzdGluYWw= IFJlYmVsbA== IG1hdGNodXBz IGJsb2NrYnVzdGVy IExvcmVu IExldnk= IHByZWFjaGluZw== IFNlbmRpbmc= IFB1cnBvc2U= cmF4 Zmlm IGF1dGhvcml0YXRpdmU= IFBFVA== YXN0aWNhbA== IGRpc2hvbg== IGNoYXR0aW5n ICIkOi8= Q29ubmVjdGlvbg== IHJlY3JlYXRl IGRlbGlucXU= IGJyb3Ro IERpcnR5 IEFkbWlu em1hbg== IHNjaG9sYXJzaGlwcw== IDI1Mw== Y29udGFjdA== YWxzYQ== NzY3 Y3JlZW4= YWJiYWdl IDE5MTU= IGJsZW5kZWQ= IGFsYXJtZWQ= TGFuZ3VhZ2U= MzU2 IGJsZW5kcw== IENoYW5nZWQ= V29sZg== IGhlcGF0 Q3JlYXRpbmc= IHBlcnNlY3V0 IHN3ZWV0bmVzcw== YXJ0ZQ== IGZvcmZlaXR1cmU= IFJvYmVydG8= aW1wcm8= TkZM IE1hZ25ldA== RGV0YWlsZWQ= IGluc2lnbmlmaWNhbnQ= IFBPTElU IEJCUQ== IENQUw== IHNlYXc= YW1pbmVy bUw= ZW5kaWY= ZmluYWxz IDI2NQ== dWlzaA== IH0p IFByb2JsZW1z IGVtYmxlbQ== IHNlcmlvdXNuZXNz IHBhcnNpbmc= IHN1YnN0aXR1dGlvbg== IHByZXNzdXJlZA== IHJlY3ljbGVk YWxlYg== UnVieQ== IHByb2ZpY2llbmN5 RHJpdmVy IFdlc3Rlcg== Oic= QUZUQQ== IG1hbnRsZQ== IENsYXl0b24= ZmxhZw== IHByYWN0aXRpb25lcg== Y292ZXJlZA== IFN0cnVjdA== YWRkYWZp NDI1 IFRvd25zaGlw IEh5ZHJv TG91aXM= MzQz IGNvbmRv IFRhbw== IHV0aWxpemF0aW9u IG5hdXNlYQ== IERlbXM= cmlkZ2Vz cGF1c2U= IGZvcm11bGFz IGNoYWxsZW5nZXI= Mzc2 IGRlZmVjdGl2ZQ== IFJhaWx3YXk= IFB1Yk1lZA== IHlvZ3VydA== bGJz IE5vcmZvbGs= T1BF IE1vb2R5 IGRpc3RyaWJ1dG9y IHNjcm9sbHM= IGV4dHJhY3Rz U3Rhbg== IHZpYWJpbGl0eQ== IGV4cG9zZXM= IHN0YXJ2YXRpb24= IFN0ZXBz IERvZGQ= ZmV3 U1RE MzMy IGNsb3N1cmVz IGNvbXBsZW1lbnRhcnk= IFNhc2hh dW1weQ== IG1vbmV0 IGFydGljdWxhdGU= IERvY3Q= a2lsbGVy IHNjcmlt IDI2NA== IHByb3N0aXR1dGVz IHNldmVyZWQ= IGF0dGFjaG1lbnRz IGNvb2xlZA== TGV2 IEZhbGs= ZmFpbA== IHBvbGljZW1hbg== IERhZw== IHByYXllZA== IEtlcm5lbA== IGNsdXQ= IGNhdGg= IGFub21hbHk= U3Rvcm0= ZW1ha2Vy IEJyZWFrZmFzdA== dWxp b2lyZQ== Sko= aHo= T3BlcmF0aW9u IFNpY2s= MzU0 IEd1YXRlbWFsYQ== UmF0ZQ== IGV4cG9zdXJlcw== ZmFjZXM= IEFyY2hhZQ== cmFm IE1pYQ== IDIwMjU= IG9wYXF1ZQ== IGRpc2d1aXNlZA== IEhlYWRxdWFydGVycw== U2Fo IHBvdHM= OTc4 IE1hbGY= IGZyb3duZWQ= IHBvaXNvbm91cw== IENvbnZlcnM= ZWVrcw== IGNyYWI= LiIi IHRyZWFzb24= IHJhbmM= IGVzY2FsYXRpbmc= IHdhcnI= IG1vYnM= IGxhbXBz IFN1bnNoaW5l IEJydW5zd2ljaw== UGhvbmVz IHNwZWxsZWQ= IFNraXA= IDIwNTA= IDE5MTE= IFBsdXRv IEFtZW5k IG1lYXRz Mzg3 IHN0b21w IFpob3U= IExldmlhdGhhbg== IEhhemFyZA== YWR2 IE9yd2VsbA== IGFsb3Vk IGJ1bXBlcg== IEFuYXJjaA== dWJ1bnR1 IFNlcmlvdXM= Zml0dGluZw== IE9wdGlvbmFs IENlY2ls UkVBTQ== IHNlcm90b25pbg== IGN1bHRpdmF0ZQ== YWdvZ3Vl fVw= IG1vc3F1ZXM= IFN1bm55 IHJlYWN0aXZl cmV2b2x1dGlvbg== IEx1cA== IEZlZG9yYQ== IGRlZmVuc2VtYW4= IFZJRA== aXN0aW5l IGRyb3duaW5n IEJyb2FkY2FzdGluZw== IHRocmlsbGVy IFNjeQ== IGFjY2VsZXJhdGluZw== IGRpcmVjdHM= b2RpZWQ= YmlrZQ== ZHVyYXRpb24= IHBhaW5mdWxseQ== UmVkZA== IHByb2R1Y3Rpb25z IGdhZw== IHdoaXN0 IHNvY2s= IGluZmluaXRlbHk= IENvbmNlcm4= IENpdGFkZWw= IGxpZXU= IGNhbmRsZXM= b2dlbmVvdXM= YXJnZXI= IGhlYXZlbmx5 aW5mbGFtbWF0b3J5 UGVyZm9ybWFuY2U= Q3M= cnVjdG9zZQ== YXpha2k= IHBlc3NpbQ== IGluZmVyZW5jZQ== IHBvd2Q= IFpvZQ== IHBhaW50cw== IGRheno= cHRh LS0tLS0tLS0tLS0= IGluc3Bpcg== IEV4cGVyaW1lbnRhbA== IEtuaWZl cmVnb3I= Ym9ycw== IHNob3dlcnM= cm9tZWRh IHNhaW50 IGJlbmlnbg== IEppYW5n IGVudmlzaW9uZWQ= IHNocm91ZA== SUZU SE8= IHNodWZm IElDQw== IHNlZ3JlZw== IHJldmlzaXQ= aWdodGhvdXNl TGk= IHN1YnN0cmF0ZQ== IFNlYXM= IFJld2FyZA== IEhlcA== IEJyYXNz c2Jt IGVsaW1pbmF0ZXM= IHN0YW1pbmE= IFZBVA== IExvYW4= IGNvbnN0cmFpbnQ= IGFwcHJvcHJpYXRlZA== IHBlcw== IEFMRQ== cmFuZ2luZw== IDQwNA== Mzky IGludGVsbGVjdHVhbHM= YWNodQ== IHJlc3RydWN0dXJpbmc= IExldmlu IHJ1bmVz IGRlbGlnaHRmdWw= IGNhcmJvaHlkcmF0ZXM= IE1vZGVscw== IEV4cG8= IHRyYW5zcG9ydGluZw== YWxsb2M= IHJpbmdpbmc= U2Ftc3VuZw== IHNjYXJjZWx5 IFVSTHM= IE1BUw== IHByb3RvdHlwZXM= IG5hcnJhdG9y IENQVXM= Y2Ru IEJhcnRvbg== IGRlY2lkZWRseQ== IFNodQ== aXhpcg== b2Npb3Vz IE15c3Q= TmludGVuZG8= IHJldXNl IGZvcmdpdmVu RmV3 aW5pY2Fs bmF0 IHNlYW1sZXNz IEV2YQ== IEVWRQ== IEpP bGFuZGVycw== IHNvZnRlcg== bmVnaWU= IHRyYW5zaWVudA== IG9yYml0YWw= IGZ1bGZpbA== IEtvbQ== SG9wZWZ1bGx5 IGR5bmFtaWNhbGx5 IEh1bmdlcg== 5Zs= IEFybWVuaWE= ZWxtYW4= YmVydG8= IHBpZ2U= IElEcw== bGltaXQ= IHZlaW5z IHNvYXJpbmc= cGFja3M= R29sZGVu IENyYWI= aXN0b3I= IFJQTQ== ICQk Z3Jlc3Npb24= IGppaGFkaXN0 IGdhbWJsZQ== IGNhcmVn IGluZmxhdGVk RmFjZQ== IEZpcmVhcm1z IEVtbWFudWVs 4p0= IHNob2Nrcw== Z3JhYg== IHNwbGVuZA== IEhQVg== YWJvcnRpb24= QWJvdmU= RW50aXR5 cGxheWVycw== IGNvbW1lbmNlZA== dWxlbmNl IGZ1bGZpbGxtZW50 IGVtYm9kaW1lbnRz IFdlbGZhcmU= IGhhaWw= IDxA dHRlbg== IGNhdGNoZXI= IEphemVlcmE= IHZvbGNhbm8= IHN0YWJpbGl6ZQ== IEhhbmRsZXI= IGludGVuc2lmaWVk IEFicmFtcw== IGh1bWlsaWF0aW9u cGFjZWQ= NjA1 IENlbnRPUw== U3BlY2lmaWM= IGhlZWQ= IENBTQ== IEdhbGlsZQ== RGll IGFib2xpc2hlZA== IFRob21zb24= IFRlYWNoZXJz IFdhc3M= am9uZw== IElTQk4= IEFsbGllcw== c2hha2U= 5bc= dmljdA== SG93YXJk IGRlZW0= IGV4Y2VlZGluZ2x5 IFNtYXJ0c3RvY2tz aWJl IGRvb3J3YXk= IGNvbXBldGVk aWdtYXQ= IG5hdGlvbmFsaXN0cw== IGdyb29t IEtlZW4= IGRpc3Bvc2FibGU= ZGVjbA== IFRvbGtpZW4= IFNjaGVtZQ== IGJpb2Q= IGF2aWQ= IEVsb24= YWdhcg== IFRTQQ== Um9tYW4= IGFydGlmaWNpYWxseQ== IGFkdmlzb3Jz WEw= IEluZmVybm8= MzY2 IHRlZGlvdXM= IFBob3RvZ3JhcGh5 IENhcnJpZQ== IHRyb3Bl IFNhbmRyYQ== IGRlY2ltYWw= UXVlZW4= IEd1bmRhbQ== IE9N b3RlY2g= TkJB IDE5MzI= IGVudHJlbmNoZWQ= IE1hcmlvbg== IGZyYXRlcm5pdHk= TGFib3Vy SGVucnk= IGxhdGl0dWRl RWl0aGVy IGVuaGFuY2Vz IFBvdGVudGlhbA== IHNoaW5lcw== aWRhZA== IGJyZWFkdGg= IGNhcGFjaXRpZXM= IPCfmYI= IEJyb254 IHNleGVz IGRpZmZlcmVudGlhdGlvbg== IGhlYXZ5d2VpZ2h0 IFRhag== ZHJh IG1pZ3JhdGU= IGV4aGF1c3Rpb24= IFJVTg== ZWxzaXVz IEN1b21v IGd1aXRhcnM= IGNsb25lcw== IFNvbWV3 IFByeQ== LS0tLS0tLS0tLS0tLQ== IHdhcnJhbnRlZA== Y3ljbGVz IHNhbHZhZ2U= IGRpc2tz UkFOVA== IE5HT3M= IE1hcnRpYW4= IjpbeyI= IGFkZGljdHM= b2p1cmU= aWxsZXQ= IGFtYXppbmdseQ== YXJ0bWVudHM= cGl4ZWw= IEdQVXM= TGF5b3V0 6KM= IFRhbWls IEJhc2ls IGltcGFydGlhbA== IFN0cnVjdHVyZQ== Zm9yaw== YnJ5Y2U= IHJpZGdl IEhhbWJ1cmc= cmlvdXM= IGJsaXR6 Y2lnYXJldHRlcw== IGNhbm5lZA== NDAy IGlyb25pY2FsbHk= IGNvbXBhc3Npb25hdGU= IEhhd2tpbnM= LiM= IENhdGhlZHJhbA== IHJhbGxpZWQ= aW50ZXJuYWw= IHF1b3Rh c3Rha2Vz VEVYVA== bW9t IGNvbXBsZXRlcw== IDIzOA== IHNocnVn 44OR IE5pbnRo IHJldmlzZQ== IFByb3ZpZGVy IHRyZWFjaGVy IHF1YXNp IFBSRVM= IGRlcG9zaXRpb24= IGNvbmZpZGVudGlhbGl0eQ== aXNzb3Jz IGltYmFsYW5jZQ== IHNwYW5uaW5n IGFuZ3VsYXI= IEN1bA== Y29tbXVuaWNhdGlvbg== IE5vcmE= IEdlbml1cw== b3B0ZXI= IHNhY2tlZA== U3BvdA== IGZpbmVseQ== IENIUg== Mjgy d2F2ZXM= UGFsZXN0 IFJvaGluZw== Tkw= 6L8= IHNoaXR0eQ== IFNjYWxpYQ== NDc1 UHJvZ3Jlc3M= IHJlZmVyZW5jaW5n IGNsYXNzcm9vbXM= YWJlZQ== IHNvZA== aGVzaW9u NzA4 IFp1Y2tlcmJlcmc= IEZpbmlzaA== IFNjb3RpYQ== IFNhdmlvcg== IEluc3RhbGxhdGlvbg== YW50aGE= KC0= IDMwMg== IFB1bms= IGNyYXRlcg== eW91dHU= IHJvYXN0 IGluZmx1ZW5jaW5n IGR1cA== IEpS IEdyYXY= IHN0YXR1cmU= IGJhdGhyb29tcw== QXNpZGU= V2lraQ== bWVhbg== IFphaw== IE9uZXM= IE5hdGg= IGh5cGVydA== IGNvbW1lbmNlbWVudA== Q2l2aWw= IG1vZGVyYXRlbHk= IGRpc3RyaWJ1dG9ycw== IGJyZWFzdGZlZWRpbmc= IDk4MA== IFNpaw== IENpZw== IEFNRVI= UklQ IENhcmVlcg== dXN0aW5n IG1lc3NlZA== IGVo IEplbnNlbg== LyQ= IGJsYWNrbWFpbA== IGNvbnZlcnNpb25z IHNjaWVudGlmaWNhbGx5 IG1hbnRyYQ== cGF5aW5n IGl2b3J5 IENvdXJ0cw== T1VHSA== YXVudGxldA== U2VyaWFs QnJvdw== IEh1bmRyZWRz MzIz IHBlZQ== IGxpbnV4 IHN1Ym1lcg== IFByaW5jaXBhbA== NDg1 IERTTA== IENvdXNpbnM= IGRvY3RyaW5lcw== IEF0aGxldGljcw== IDMxNQ== IEthcm1h IGF0dGVudA== dXJnZXI= IHByZXNjcmliZQ== IGVuY2Fwcw== IENhbWU= IHNlY3JldGl2ZQ== IENyaW1lcw== ZG4= Q2xlYW4= IEVneXB0aWFucw== IENhcnBlbnRlcg== IGxs SHVt IE1pbG8= IGNhcGl0YWxpc3Rz IGJyaWVmZWQ= VHdl IEJhc2lu ZWx2ZXQ= TW9z IHBsdW5nZQ== IEthaXNlcg== IEZ1ag== aWxsaW4= IHNhZmVndWFyZHM= IG9zdGU= IE9wcG9ydHVuaXR5 IE1hZmlh IENhbGxpbmc= YXBh dXJiYW4= YnJ1c2g= aWxsYXJk Y8Op aW50ZWxsaWdlbmNl IExvYg== IERydWlk IHNtb290aGVy IGZvb3Rpbmc= IG1vdG9yaXN0cw== YXJjaXR5 IG1hc2N1bGluaXR5 IG1pc20= IGFiZG9taW5hbA== IFRhdmVybg== IFJvaA== IGVzY2FwZXM= c2lnbmVk QW50aG9ueQ== IHNhY3JpZmljaW5n IGludGltYWN5 IGFudGVyaW9y IEtvZA== IG1vdGlm IGdyYXo= IHZpc3VhbGl6YXRpb24= IGd1aXRhcmlzdA== IFRyb3Rza3k= bWFnaWM= RGFy IE1vcmk= IHdhcmRz IHRvaWxldHM= bGVzdA== IHRlbGVwb3J0 IFN1bmRheXM= IFBsYXQ= RVRT IGVTcG9ydHM= UGF0cmljaw== IEthdGhlcmluZQ== ZW5rbw== IGhhc3NsZQ== IE1pY2s= Z2dsZXM= IGhvYg== YWludGFpbg== IGFpcmJvcm5l IHNwYW5z IGNoaWxp IGFwZXJ0dXJl IHZvbHVudGVlcmVk IEluY2lkZW50 IEZyZXM= IFZldGVyYW4= YXVnaHRlcmVk aW5nbw== IHVuaW5zdXJlZA== Q0xPU0U= IGZ1c2U= IGVyb3RpYw== IGFkdmVydGlzZQ== cmFpc2luZw== VGV4dHVyZQ== IGF0dGVuZHM= IFJFQUw= dWRkbGVk IHNtb290 IDMwNQ== IFdpbGxpcw== IGJsb25k QW5hbHlzaXM= IFZU b25pY2E= IHN0cm9uZ2hvbGQ= UkY= Tk0= Lj4+ IHByb3NwZXJvdXM= IGJvYXN0ZWQ= Mjky IE1hbnVmYWN0dXJpbmc= UFJFU1M= Z3Jlbg== IHBoYXJtYWN5 IFJvY2tlZmVsbGVy a2Fp IHRodW1icw== IEh1dA== IG1vdGhlcmJvYXJk IGd1YXJkaWFucw== IEFsdGVy bGx1bGFy IHNoYWNr IHdpc2VseQ== IGJhY2tib25l ZXJ2YQ== IHN1aWNpZGVz IE1jR3JlZ29y aWphaA== RW1lcg== IEJyYXY= IGRlc2lnbmF0ZQ== UE9TVA== cHJvZHVjZWQ= IGNsZWFuc2luZw== aXJsd2luZA== ZXhpc3RlbnQ= IEh1bXBo IFBheW5l IHZlc3RlZA== xaE= IHN0cmluZ2VudA== aW9uYQ== IHVuc3Vi IHN1bW1lZA== IEhlcmN1bGVz c3ViamVjdA== IFJhZ25hcg== IE5vcw== IGNoYXJhY3Rlcml6YXRpb24= IHNhdnZ5 IERhd3Nvbg== IENhc2lubw== IGZyaQ== IEJhcnJpZXI= IG1pc2luZm9ybWF0aW9u IGluc3VsYXRpb24= IGNvcnJpZG9ycw== IGFpcnBsYW5lcw== IE5vY3Q= YWhp IDE5MTY= a2I= YXJtYWM= IHNodW4= IHNjaGVtYQ== IGhvcnJpZmllZA== IDIzOQ== YXVuZGVycw== TkI= aWF0ZXM= ZXJpdHk= IFNoYXJk IHJhcml0eQ== IGdyb3VwZWQ= IEdoYW5h YWdhaW5zdA== IEJpb2xvZ2ljYWw= IEF3YXJl b3dlbGw= z4Q= IEJlYXU= c2hhdw== SGFjaw== IEp1bGl1cw== VVNT b2xzb24= YXVuYQ== Y3J1 IE1hdXJpY2U= IElr IHNlcXVlbmNpbmc= IHJhZGljYWxz ICg/LA== dmlydHVhbA== IGFueXdheXM= IHJlcGVyYw== IGhhbmRsZXJz IGhlc2l0YW50 6YM= IE1G cGxlbWVudGF0aW9u YXNzb2NpYXRlZA== IGNhbXBhaWduZWQ= IFl1ZQ== dXRhdGlvbnM= IFlvZ2E= IHNpbW1lcg== IHJvZHM= IG1lbG9keQ== IGNvbnZveQ== dmlkZW9z IHNjcmVlbmVk TmVn b2NoZW1pY2Fs ICgpKQ== IHVsdHJhcw== IGFudGlw IElzbGFuZGVycw== NzA0 IGZldGlzaA== IHJpZGljdWxvdXNseQ== IEthcnQ= IG1pdG9jaG9uZHJpYWw= IGludGVyZmVyaW5n QnVpbGRlcg== IG92ZXJmbA== IGFjbmU= IE11ZA== IEtlcnI= ZmxleA== IFBvc3RhbA== IEJhbHRpYw== NDc3 IFBlcnNvbnM= b3VyYWdl SEI= IE11c2U= IEltbW9ydGFs IERyaXZpbmc= IHBldGl0aW9ucw== IHN1YnNjcmlwdA== IHNvcmNl IFByb2Nlc3Nvcg== dXRvbg== U29ueQ== IHBob24= IHJhY2Vk IEFudGhyb3A= IGRheXRpbWU= IEV4ZXJjaXNl QWRkaW5n IGVuZ2FnZXM= IFF1YWxjb21t IG1pcmFjbGVz IG1lbWVz IERyaW5r IE9yaW9sZXM= IGhhaXJz IFBvbGFy YXRob20= IHNsaXBwZXJ5 IFJlbXk= IGNhcmFtZWw= IFlFQVI= IGFsaw== SWdu YXV0aW9u IE1lcmxpbg== IENyYW4= IGFwb2xvZ2llcw== IDQxMA== IG91dGluZw== IE1lbW9yaWVz YXBwb2ludGVk IGNvdW50ZXJlZA== dWxk cG9zaW5n IGZpcmV3YWxs IFdhc3Q= IFdldA== d29ya2Vk c2VsbGVy IHJlcGVhbGVk ZXJlbw== YXNzdW1pbmc= QkxJQw== bWl0ZQ== IENFT3M= IENoYXBlbA== ZWxsaWdlbnQ= X19fX19fX19fX19fX19fX19fX19fX19f RG9n IHdhcnQ= IHN1YnNjcmliZXI= c3BvcnRz IGJlZ2dlZA== IE1W IHNlbWlm ZXRoaWNhbA== IHByZWFjaA== IHJldml0YWw= IHB1bml0aXZl IHNob3J0Y3V0cw== IGluc3RpdHV0ZWQ= IFdhcnNhdw== IGFiZG9tZW4= IEtJTkc= IHN1cGVyaW50ZW5kZW50 IGZyeQ== IEdlbw== VE9S IGNvbnRyYWRpY3Rpb25z YXB0aWM= IGxhbmRzY2FwZXM= YnVncw== IGNsdXN0 IHZvbGxleQ== Y3JpYmVk IHRhbmRlbQ== IHJvYmVz V0hBVA== IHByb21vdGVy IGVsb3F1 cmV2aWV3ZWQ= IERL IFBsYXRv IGZwcw== VGFuaw== IERlcnJpY2s= IHByaW9yaXRpemU= YXNwZXI= IEhvbmR1cmFz IENvbXBsZXRlZA== bmVj IG1vZw== bmly IE1heW8= REVG c3RhbGw= aW5uZXNz IFZvbGtzd2FnZW4= IHByZWNhdXRpb24= IE1lbGw= aWFr aXN0cmllcw== IDI0OA== IG92ZXJsYXBwaW5n U2VuYXRl IEVuaGFuY2U= cmVzeQ== cmFjaWFs T1JUUw== IE1vcm1vbnM= U3Ryb25n IENvY2g= TWV4aWNv IE1hZHVybw== IGphcnM= IGNhbmU= V2lr b2xsYQ== aWZmZXJlbmNl IHBoeXNpY2lzdA== IE1hZ2dpZQ== IDI4NQ== IGRlcGljdGlvbg== IE1jTGFyZW4= SnU= IHNsb3dz IGNvbW1pc3Npb25lcnM= IFdpbGxvdw== IEV4cGxvcw== aG92YWg= IHRlY2huaWNpYW4= IGhvbWljaWRlcw== IEZsYXY= IFRydW1hbg== IDEwMDAw dWN0b3I= IHNoYWRlcg== TmV3c2xldHRlcg== NDU3 IHJldmVy IGhhcmRlbmVk IHdoZXJlYWJvdXRz IHJlZGV2ZWxvcA== IGNhcmJz IHRyYXZlcnM= IHNxdWlycmVs IGZvbGxvd2Vy IHNpbmdz NTA4 IHJhYmJpdHM= ZW1vbml1bQ== IGRvY3VtZW50aW5n IG1pc3VuZGVyc3Rvb2Q= KSc= Umljaw== Z2dpZXM= IHByZW1pZQ== IHNrYXRpbmc= IHBhc3Nwb3J0cw== IGZpc3Rz YWdlZGRvbg== SGF3 QUNQ MDgw IFRob3VnaHRz IENhcmxzb24= IHByaWVzdGhvb2Q= aHVh IGR1bmdlb25z IExvYW5z IGFudGlz IGZhbWlsaWFyaXR5 IFNhYmI= b3BhbA== IEluaw== c3RyaWtl IGNyYW0= IGxlZ2FsaXplZA== IGN1aXNpbmU= IGZpYnJl VHJhdmVs IE1vbnVtZW50 T0RZ ZXRoeQ== IGludGVyc3RhdGU= IFBVUg== ZW1wb3Jhcnk= IEFyYWJpYW4= ZGV2ZWxvcGVk IHNhZGRsZQ== IGdpdGh1Yg== IE9mZmVy IElTUA== cm9sZXQ= IFNVUEVS IERlbmlz IG11bHRpcGxpZXI= IHN0aXJyZWQ= SW50ZXJlc3RpbmdseQ== IGN1c3RvbWFyeQ== IGJpbGxlZA== aGV4 IG11bHRpcGxpZWQ= IGZsaXBwaW5n IENyb3NieQ== IGZ1bmRhbWVudGFscw== aWFl IFBsYXllZA== IEF0b20= YW1hem9u IEZsYW0= ZWV6 YWN0aXZhdGVk IHRhYmxlc3Bvb24= IGxpYmVyYWxpc20= IFBhbGlu IFBhdGVs TnVt IFRBTQ== IHN1cm4= IFJlbG9hZGVk IGNvaW5lZA== Il0s IENsYXNo IEFndQ== IHByYWdtYXRpYw== IEFjdGl2YXRl IDgwMg== IHRyYWlsZXJz IHNpbGhvdQ== IHByb2Jlcw== IGNpcmN1cw== IEJhaW4= IExpbmRzYXk= IEFiYmV5 RGVsaXZlcnk= IGNvbmNlc3Npb24= IGdhc3Rybw== IFNwcml0ZQ== xJ8= YW5kZWw= IGdpbW0= IGF1dG9iaQ== IFR1cnRsZQ== IHdvbmRlcmZ1bGx5 IEhhcmFt IFdvcmxkd2lkZQ== IEhhbmRsZQ== IHRoZW9yaXN0cw== IHNsZWVr IFpodQ== b2dyYXBoaWNhbGx5 RUdB IE93bmVycw== YXRocw== IEFudGFyY3RpYw== bmF0YWw= PSIi ZmxhZ3M= YGBgYA== IHN1bA== S2g= IHBvdGFzc2l1bQ== IGxpbmVtYW4= IGNlcmVhbA== IFNlYXNvbnM= IDIwMjI= IG1hdGhlbWF0aWM= IGFzdHJvbm9tZXJz cHJvZmVzc2lvbmFs IGZhcmVz Y2tub3dsZWQ= IGNoaQ== IHlvdW5nc3RlcnM= IG1pc3Rha2VubHk= IGhlbWlzcGhlcmU= IERpdmluaXR5 cm9uZQ== ICIs cmluZ3M= IGF0dHJhY3Rz dmFuYQ== 5bk= Q0FQ IHBsYXlsaXN0 IHBvcmNo 44Gj IGluY29ycG9yYXRlcw== IHNvYWs= IGFzc2VydGluZw== IFRlcnJvcmlzbQ== IFBhYmxv SmE= Y2VzdGVy IGZlYXJpbmc= IFByYXllcg== IGVzY2FsYXRlZA== R1c= IHJvYmU= IEJyaWdodG9u YWNpc3Rz IFN5bXBob255 IER3YXJm IFBhcmFkZQ== IExlZ28= IGluZXhwbA== IGxvcmRz bGVhZg== UkFH bGliZXI= IGNpZ2Fycw== IEplaG92YWg= NjA2 V0lORE9XUw== IExpYmVyaWE= ZWJ1cw== SGVhdnk= IGx1YnJpYw== IFJX YW5ndWFnZXM= IG5hcnJvd2Vk Y29tcHV0ZXI= IEVtYmVy IG11cmRlcmluZw== IGRvd25zdHJlYW0= IFR1bHM= IFRhYmxlcw== VG9waWM= IEFjY3VyYWN5 PS8= bG9zdA== IFJlaQ== IHByb2dyZXNzZXM= YmVhcg== IGVzdGFibGlzaG1lbnRz SnVzdGlu IFBlYWNo IEdvbWV6 5b8= IFRyaWFuZ2xl SWRlbnQ= IEhpdmU= UmVzb3VyY2Vz IG1peGVz IEFzc3VtaW5n TXU= IGh5cG9j IHNhbmU= IFdhbg== aWRpb3Vz U3VjY2Vzcw== IGlv QW5nZWw= IGRhbmdlcm91c2x5 IENyZWF0dXJl V09SSw== Ols= IEthdHJpbmE= TGlzdGVuZXI= TWlsbGVy IElkbGli aGFuZw== IGNpcmN1bXZlbnQ= aHJlZg== IGNlbGVzdGlhbA== IFdlZWtz IFB1Zw== IERhbHRvbg== IHN1YnBvZW5h dWt1 IHBlcnNpc3RlZA== cGVp b2xkaW5n IERvY3VtZW50cw== IEhhc3Q= IENFTlQ= IHByaW1lcg== IHN5bm9ueW1vdXM= IG5pYg== b21icw== IG5vdGF0aW9u IERpc2g= IEF0bW9zcA== IGZvcmJpZA== IEFORw== cGF0dGVybg== bG9z IHByb2plY3RpbGVz YnJvd24= LiIs IFZlbm9t IGZpZXJjZWx5 dWJsaXNoZWQ= IFVyYW4= IE5pY2FyYWc= NDEw IENBTA== T1RPUw== IE1pcmFjbGU= IEVuY2hhbnQ= IGd1YXJkaW5n YXBwZW5k QXR0YWNo IGxldmVsZWQ= IGNvbmRvbXM= aWhpbGF0aW9u NjQ5 IG5pZ2h0bWFyZXM= IFRIRVk= IFNUQVJU IEtpbm4= IHJvb21tYXRl IGh5Z2llbmU= b3BwaW5n Sm9i IGx2bA== IFZFUg== IEtlZXBpbmc= YWJldGlj IGZvcm1hdHRpbmc= ZXJhbGE= IHJldmlzaW9ucw== IHJlc3VyZw== VGVs IEdvb2RtYW4= MzUz cG9k IGluZGlzcA== IFRyYW5zbGF0aW9u IGdvd24= IE11bmQ= IGNpcw== IGJ5c3RhbmQ= Y29sbGVjdA== IFB1bmphYg== YWN0aXZlbHk= IEdhbWI= dGVsbA== IGltcG9ydGluZw== Z2VuY2llcw== IGxvY29t IEJyaWxs SG9seQ== IEJlcmdlcg== IHNob3dkb3du IHJlc3BvbmRlcnM= SUxZ IHRha2Vkb3du bGV0ZWQ= IG1hdHRlcmVk IHByZWRpY3RpdmU= IG92ZXJsYXk= R1BV IFZpY2s= IGNvbnZleWVk VGFi cGVlcg== U2Nhbg== IGRlZmVuc2l2ZWx5 dmFl IGFwcHJvdmluZw== IHRpZXJz IFZpYQ== cXVlcmFkZQ== IFNhdWRpcw== IGRlbW9saXNoZWQ= IFByb3BoZQ== IG1vbm8= IGhvc3BpdGFsaXR5 SEFN IEFyaWVs TU9E IFRvcmFo IGJsYWg= IEJlbGFydXM= ZXJlbnRpYWw= IFR1Yw== IGJhbmtlcg== Mzk3 IG1vc3F1aXQ= IFNjaWVudGlzdA== IE11c2ljYWw= IGh1c3Q= U2hpZnQ= IHRvcm1lbnQ= IHN0YW5kb2Zm RWR1Yw== IEZvZw== IGFtcGxpZmllcg== U2hhcGU= SW5zdGFuY2U= IENyaXRpY3M= IGRhZW1vbg== SG91c3Rvbg== IG1hdHRyZXNz IElERg== IG9ic2NlbmU= IEFtZXI= aGV0dGk= IGNvbXBpbGluZw== MzUy dmVyZXR0 IFJlZHVjdGlvbg== aXN0cmF0aW9u IEJsZXNzZWQ= IEJhY2hlbG9y MzE2 IHByYW5r IFZ1bGNhbg== ZGRpbmc= IG1vdXJuaW5n IFF1aW50 IEJsYXN0ZXI= dGVzdGluZw== IHNlZGltZW50 Pj4+ IEV0ZXJuaXR5 IFdIRVJF IE1hemU= IHJlYWN0aW5n IEFsdg== b21zZGF5 IENSQQ== IHRyYW5zbGF0b3I= IGJvZ3Vz YXR1 V2Vic2l0ZQ== b2xscw== IGJhcHRpc20= IHNpYmxpbmc= IEF1dHVtbg== dmV6 44Gu6Q== Z3VhcmRz R2Vvcmc= YXNzYWRvcnM= IEZyZXVk IGNvbnRpbmVudHM= IFJlZ2lzdHJ5 QmVybmll lprlo6s= IHRvbGVyYW50 IFVX IGhvcnJpYmx5 OTk1 IE1JREk= IGltcGF0aWVudA== b2NhZG8= ZXJp IFdvcnN0 IE5vcnJpcw== IFRhbGtpbmc= IGRlZmVuZHM= ZW5zYWJsZQ== IDIwMjE= IGFuYXRvbXk= TGV3 IGRyYXdlcg== IENhbmJlcnJh IHBhdHJpb3RpYw== 6b6N5Zaa5aOr IEF2Zw== QVJN IHVuZGlzY2xvc2Vk IGZhcmV3ZWxs NDU5 YmFibGU= IEFsbGlzb24= T0xPRw== IGNvbmNv dGlnaHQ= IEFDUEk= IE1pbmVz bGljaA== IOKUnA== cmVwcmVzZW50ZWQ= MjAwMDAw IGVudGh1c2lhc3Q= T1RT Ymls IEluZ3JlZGllbnRz IGludmVudG9y IE15U1FM wqDCoMKg IEFCT1VU d2l0aGlu IG1r QnVs IEZha2U= IGRyYWNvbmlhbg== V2E= aGVsbQ== IFRlcnJhbg== ZXJ2aWxsZQ== IGNvbW1vbnBsYWNl U0laRQ== ICI8 cmVwbGFjZQ== b2dyYXBocw== IFNFTEVDVA== aW5jaWJsZQ== IE1vc3RseQ== IFNoZWZmaWVsZA== IElERQ== dWdnbGU= IGNpdGF0aW9ucw== aHVyc3Q= IFVuaXg= IHVubGVhc2g= IFBpcGVy IE5hbm8= IHN1Y2N1bWI= IHJlbHVjdGFuY2U= IDI1MDA= IE1lcmNoYW50 IHdpcmV0 IGNvbWJvcw== IEJpcnRoZGF5 IGNoYXJjb2Fs IFVQUw== IEZhaXJmYXg= IGRyaXZld2F5 IFRlaw== IFBpdGNo b3ZlcmU= IHRlY2huaWNpYW5z IEFjdHVhbA== ZmxhdGlvbg== IEZpc2NhbA== IEVtcHR5 YW5hbW8= IG1hZ25lc2l1bQ== IHNsdXQ= IGdyb3dlcnM= SW52ZXN0aWdhdG9ycw== KCk6 IFNhdGVsbGl0ZQ== IEtleW5lcw== bWlzc2l2ZQ== bGFuZQ== IGJvcm91Z2g= MzQ0 IFRFQU0= IEJldGhlc2Rh Q1Y= aG93ZXI= IFJBRA== IGNoYW50 IFJpeQ== IGNvbXBvc2l0aW9ucw== IG1pbGRseQ== IG1lZGRsaW5n IGFnaWxpdHk= YW5lZXJz NTAx IHN5bnRo bGluZ2Vy Mjkx IGV4Y2xhaW1lZA== UGFydHk= IGNvbnRhbWlu IE1hbm9y IFJlc3BvbmQ= IHByYWlzaW5n IG1hbm5lcnM= ZmxlZXQ= U3VtbWVy IEx5bmQ= IERlZmluaXRlbHk= Z3JpbQ== IGJvd2xpbmc= c3RyaQ== 55s= eW50 IG1hbmRhdGVz RElW IHJlY29uY2lsZQ== dmlld3M= IERhbW9u dmV0dGU= Rmxv IEdyZWF0ZXN0 aWxvbg== aWNpYQ== IHBvcnRyYXlhbA== IGN1c2hpb24= NTA0 MTk3OQ== b3NzYWw= QXBwbGlj c2NyaXB0aW9u IG1pdGlnYXRpb24= QVRT cGFj IGVyYXNlZA== IGRlZmljaWVuY2llcw== IEhvbGxhbmRl IFh1 IGJyZWQ= IHByZWduYW5jaWVz ZmVtaW4= IGVtcGg= IHBsYW5uZXJz IG91dHBlcg== dXR0ZXJpbmc= IHBlcnBldHJhdG9y IG1vdHRv IEVsbGlzb24= IE5FVkVS IGFkbWl0dGVkbHk= QVJJ IEF6ZXJiYWlqYW4= IG1pbGxpc2Vj IGNvbWJ1c3Rpb24= IEJvdHRsZQ== IEx1bmQ= IFBz IERyZXNz IGZhYnJpY2F0ZWQ= IGJhdHRlcmVk IHNpZGVs IE5vdHRpbmc= Rm9yZWlnbg== IEplcm9tZQ== MDIw IEFyYml0 IGtub3Rz IFJJR0hU TW92aW5n 44GZ IHN1cmdlcmllcw== IGNvdXJ0aG91c2U= IG1hc3RlcmVk IGhvdmVyaW5n IEJyYW4= IEFsaXNvbg== IHNhZmVzdA== bWlsaXRhcnk= IGJ1bGxpZWQ= IGJhcnJhZ2U= UmVhZGVy RVNF IEdlb2dyYXBoaWM= VG9vbHM= MzE0 IEdlZWs= cm90aA== Z2xlcnM= IEZJTg== z4E= IEFzdG9u YWx0ZXJu NDg4 IHZldGVyaW4= R2FtZXI= IGludGVs cmVuY2hlcw== U2hpZWxk IGFtbmVzdHk= IEJoYXI= IHBpbGVk IGhvbm9yYWJsZQ== IEluc3RpdHV0ZXM= IHNvYWtlZA== IGNvbWE= IEVGRg== MzQx Ynl0ZXM= IEdtYWls bGVpbg== IENhbmFkaWVucw== bWF0ZXJpYWw= SWw= IGluc3RydWN0b3Jz IEtZ IGNvbmNlaXZl dWJi IFBvc3NpYmxl IGVhc2luZw== IENocmlzdGluYQ== IGNhcmlj IEhEUg== Uk9N IHNob3ZlbA== ZGVsZXRl IHB1ZmY= IENoYW5naW5n IHNlYW1sZXNzbHk= QXR0cmlidXRl IGFjcXVpc2l0aW9ucw== YWtlcnk= IEVG IGF1dGlzdGlj IFRha2Vz IFBvd2Rlcg== IFN0aXI= NTEw IEJ1YmJsZQ== c2V0dGluZ3M= IEZvd2xlcg== IG11c3RhcmQ= IG1vcmVvdmVy IGNvcHlyaWdodGVk IExFRHM= MTUwMA== 5ok= IEhJUw== ZW5m IGN1c3RvZA== IEh1Y2s= R2k= IGltZw== QW5zd2Vy Q3Q= amF5 IEluZnJhc3RydWN0dXJl IGZlZGVyYWxseQ== TG9j IG1pY3JvYmVz IG92ZXJydW4= ZGRz b3RlbnQ= YWRpYXRvcg== Pj4+Pj4+Pj4= IHRvcm5hZG8= IGFkanVk IGludHJpZ3VlZA== IHNp IFJldmVsYXRpb24= cHJvZ3Jlc3M= IGJ1cmdsYXJ5 IFNhaXlhbg== IEthdGh5 IHNlcnBlbnQ= IEFuZHJlYXM= IGNvbXBlbA== ZXNzbGVy IFBsYXN0aWM= IEFkdmVudA== IFBvc2l0aXZl IFF0 IEhpbmR1cw== cmVnaXN0ZXJlZA== dWxhcml0eQ== IHJpZ2h0ZW91c25lc3M= IGRlbW9uaWM= dWl0aXZl IEJEUw== IEdyZWdn Y2lh IENydXNhZGU= IFNpbmFp V0FSRQ== Kyg= IG1lbGw= IGRlcmFpbA== eWFyZHM= QXN0 IG5vdGljZWFibHk= IE9iZXI= UmFt IHVubm90aWNlZA== IHNlcQ== YXZhZ2U= VHM= IDY0MA== IGNvbmNlZGU= IF0p RmlsbA== IGNhcHRpdml0eQ== IEltcHJvdmVtZW50 IENydXNhZGVy YXJhb2g= TUFQ 5pc= IHN0cmlkZQ== YWx3YXlz Rmx5 Tml0 IGFsZ2Fl IENvb2tpbmc= IERvb3Jz TWFsbGV5 IHBvbGljZW1lbg== 44GN IGFzdHJvbmF1dA== YWNjZXNzaWJsZQ== NDk1 IFJBVw== Y2xpZmZl dWRpY3JvdXM= IGRlcGVuZGVk YWxhY2g= IHZlbnR1cmVz cmFrZQ== IHRpdHM= IEhvdQ== IGNvbmRvbQ== b3Jtb25hbA== IGluZGVudA== IHVwbG9hZGluZw== Rm9vdG5vdGU= SW1wb3J0YW50 IDI3MQ== IG1pbmRmdWw= IGNvbnRlbmRz Q3Jh IGNhbGlicg== IE9FQ0Q= cGx1Z2lu RmF0 IElTUw== IER5bmFtaWNz YW5zZW4= Njg2 Jyks IHNwcml0ZQ== IGhhbmRoZWxk IEhpcHA= PX49fg== VHJ1c3Q= IHNlbWFudGljcw== IEJ1bmRlcw== IFJlbm8= IExpdGVyYXR1cmU= c2Vuc2U= R2FyeQ== IEFlZw== IFRyaW4= RUVL IGNsZXJpYw== IFNTSA== IGNocmlzdA== IGludmFkaW5n aWJ1 IGVudW0= YXVyYQ== IGFsbGVnZQ== IEluY3JlZGlibGU= QkJD IHRocnU= IHNhaWxlZA== IGVtdWxhdGU= IGluc2VjdXJpdHk= IGNyb3U= IGFjY29tbW9kYXRpb25z IGluY29tcGV0ZW50 IHNsaXBz IEVhcnRocXU= c2FtYQ== SUxMRQ== IGlQaG9uZXM= YXNha2k= IGJ5ZQ== IGFyZA== IGV4dHJhcw== IHNsYXVnaHRlcmVk IGNyb3dkZnVuZGluZw== cmVzc28= IGZpbGli IEVSUk9S IFRMUw== ZWdn IEl0YWw= IGVubGlzdA== IENhdGFsb25pYQ== IFNjb3Rz IHNlcmdlYW50 IGRpc3NvbHZl Tkg= IHN0YW5kaW5ncw== cmlxdWU= SVE= IGJlbmVmaWNpYXJ5 IGFxdWFyaXVt WW91VHViZQ== IFBvd2VyU2hlbGw= IGJyaWdodGVzdA== IFdhcnJhbnQ= U29sZA== V3JpdGluZw== IGJlZ2lubmluZ3M= IFJlc2VydmVk IExhdGlub3M= aGVhZGluZw== IDQ0MA== IHJvb2Z0b3A= QVRJTkc= IDM5MA== VlBO R3M= a2VybmVs dHVybmVk IHByZWZlcmFibGU= IHR1cm5vdmVycw== IEhlbHM= U2E= IFNoaW5qaQ== dmVo IE1PRFVMRQ== VmlvbA== IGV4aXRpbmc= IGphYg== IFZhbmlsbGE= IGFjcm9u IEdhcA== YmVybg== QWs= IE1jR3U= IGVuZGxlc3NseQ== IEZhcmFnZQ== IE5vZWw= VmE= TUs= IGJydXRl IEtydQ== IEVTVg== IE9saXZpYQ== 4oCg IEthZg== IHRydXN0aW5n IGhvdHM= MzI0 IG1hbGFyaWE= IGpzb24= IHBvdW5kaW5n b3J0bWVudA== Q291bnRyeQ== IHBvc3Rwb25lZA== IHVuZXF1aXY= Pyks IFJvb25leQ== dWRkaW5n IExlYXA= dXJyZW5jZQ== c2hhcGVzaGlmdGVy IEhBUw== b3NhdGU= IGNhdmVybg== IGNvbnNlcnZhdGlzbQ== IEJBRA== IG1pbGVhZ2U= IGFycmVzdGluZw== VmF1bHRz IG1peGVy RGVtb2NyYXRpYw== IEJlbnNvbg== IGF1dGhvcmVk ODAwMA== IHByb2FjdGl2ZQ== IFNwaXJpdHVhbA== dHJl IGluY2FyY2VyYXRlZA== IFNvcnQ= IHBlYWtlZA== IHdpZWxkaW5n cmVjaWF0aW9u 15nX UGF0Y2g= IEVtbXk= IGV4cXU= dHRv IFJhdGlv IFBpY2tz IEdyeQ== cGhhbnQ= IGZyZXQ= IGV0aG4= IGFyY2hpdmVk JS0= Y2FzZXM= IEJsYXpl IGltYg== Y3Y= eXNz aW1vbnk= IGNvdW50ZG93bg== IGF3YWtlbmluZw== IFR1bmlzaWE= IFJlZmVy IE1K IHVubmF0dXJhbA== IENhcm5lZ2ll aXplbg== IE51Z2dldHM= aGVzcw== IGV2aWxz NjQ3 IGludHJvZHVjdG9yeQ== bG92aW5n IE1jTWFob24= IGFtYmlndWl0eQ== TGFiZWw= IEFsbWlnaHR5 IGNvbG9yaW5n IENsYXVz c2V0dGluZw== TlVMTA== IEZhdm9yaXRl IFNJRw== Pig= IFNoaXZh IE1heWVy IHN0b3JtZWQ= IENvdmVyYWdl d2VhcG9ucw== aWdoYW0= IHVuYW5zd2VyZWQ= IGxldmU= IGNveQ== Y2Fz YmFncw== YXN1cmVk U2VhdHRsZQ== IFNhbnRvcnVt c2VyaW91cw== IGNvdXJhZ2VvdXM= IFNvdXA= IGNvbmZpc2NhdGVk IC8vLw== IHVuY29udmVudGlvbmFs IG1vbXM= IFJvaGluZ3lh IE9yY2hlc3RyYQ== IFBvdGlvbg== IGRpc2NyZWRpdA== IEZJTA== Zml4ZWQ= IERlZXI= ZG9p IERpbWVuc2lvbg== IGJ1cmVhdWNyYXRz ZXRlZW4= IGFjdGlvbkdyb3Vw b2ht IGJ1bXBz IFV0aWxpdHk= IHN1Ym1hcmluZXM= cmVuaGVpdA== cmVzZWFyY2g= IFNoYXBpcm8= IHNrZXRjaGVz IGRlY2VwdGl2ZQ== IFZpbA== ZXNhbWU= IEVzc2VudGlhbGx5 IHJhbXBhZ2U= aXNreQ== IG11dHRlcmVk dGhyaXRpcw== IDIzNg== ZmV0 YmFycw== IHB1cGls IFRob3U= b1M= c29uZw== IGZyYWN0dXJlZA== IHJldmVydA== cGljdHVyZQ== IGNyaXRlcmlvbg== dXNoZXI= IHJlcGVyY3Vzc2lvbnM= IFZpbnRhZ2U= IFN1cGVyaW50ZW5kZW50 T2ZmaWNlcnM= IGZsYWdnZWQ= IGJsYW1lcw== IGludmVyc2U= b2dyYXBoZXJz IG1ha2VzaGlmdA== IGRldm9pZA== IGZvc3NpbHM= IEFyaXN0b3RsZQ== IEZ1bmRz IGRlcGxldGVk IEZsdQ== IFl1YW4= IHdvZXM= IGxpcGlk IHNpdHU= cmVxdWlzaXRlcw== IGZ1cm5pc2g= IFNhbWFy IHNoYW1lZnVs IGFkdmVyc2VseQ== IGFkZXB0 IHJlbW9yc2U= IG11cmRlcm91cw== dWNrbGVz IEVTTA== IDMxNA== c2VudA== IHJlZGVm IENhY2hl IFB1cnM= aWdhbnM= IDQ2MA== IHByZXNjcmlwdGlvbnM= IGZyZXM= RnVjaw== b2NyYXRlcw== VHdlbnR5 IFdlaXJk IFRvZ2dsZQ== IENhbGxlZA== aXRpemVucw== IHBvdWx0cnk= IGhhcnZlc3Rpbmc= 44Km44K5 Qm90dG9t IGNhdXRpb25lZA== dG4= Mzk2 IE5pa2tp IGV2YWx1YXRpb25z IGhhcmFzc2luZw== IGJpbmRpbmdz IE1vbmV0YXJ5 IGhpdHRlcnM= IGFkdmVyc2FyeQ== dW50cw== IHNldGJhY2s= IGVuY3J5cHQ= IENhaXQ= IGxvd3M= ZW5nZXM= IE5vcm4= IGJ1bGJz IGJvdHRsZWQ= IFZveWFnZXI= MzE3 IHNwaGVyZXM= cG9saXRpY3M= IHN1YnRyYWN0 IHNlbnNhdGlvbnM= IGFwcGFsbGluZw== IDMxNg== IGVudmlyb25tZW50YWxseQ== IFNURU0= IHB1Ymxpc2hlcw== NTYw IGRpbGlnZW5jZQ== NDg0 IGFkdmlzZXM= IHBldHJvbA== IGltYWdpbmluZw== IHBhdHJvbHM= IEludGVnZXI= IEFzaGVz YWN0dXM= IFJhZGlhbnQ= IExU aXRhYmlsaXR5 aHRha2luZw== U2V0dGluZw== IG51YW5jZWQ= IFJlZWY= IERldmVsb3BlcnM= Tmk= cGllY2Vz OTkw TGljZW5zZQ== IGxvd2Vycw== IE90dG9tYW4= MzI3 b29v IHF1aXR0aW5n bWFya2V0cw== QmVoaW5k IGJhc2lu IGRvY3M= YW5pZQ== Zmxhc2g= Y3Rs IGNpdmlsaXplZA== IEZ1a3VzaGltYQ== Il0sIg== IEtT IEhvbmVzdGx5 YXJhdA== IGNvbnN0cnVjdHM= IExhbnM= IERpcmU= IExJS0U= IFRyb3VibGU= IHdpdGhob2xkaW5n IE9ibGl2aW9u IHNhbml0eQ== YW55YQ== Q29uc3Q= IGdyb2Nlcg== IENlbHNpdXM= IHJlY291bnRlZA== IFdpZmU= Qm9yZGVy YXRlcmVk aGFwcHk= IHNwb2lsZXI= IGxvZ2ljYWxseQ== SGFsbA== IHN1Y2NlZWRpbmc= IHBvbHltb3JwaA== IGF4ZXM= IFNob3RndW4= IFNsaW0= IFByaW5jaXBsZXM= IExldGg= YXJ0YQ== IHNjb3I= U2NyZWVuc2hvdA== IHJlbGF4YXRpb24= IyQjJA== IGRldGVycmVudA== aWRkeQ== IHBvd2VybGVzcw== IGxlc2JpYW5z IGNob3Jkcw== IEVkaXRlZA== c2VsZWN0ZWQ= IHNlcGFyYXRpc3Rz MDAwMg== IGFpcnNwYWNl IHR1cm5hcm91bmQ= IGN1bm5pbmc= UEFUSA== UG9seQ== IGJvbWJlZA== IHRpb24= eHM= IHdpdGhob2xk IHdhZ2Vk IExpYmVydGllcw== RmxhZw== IGNvbWZvcnRpbmc= NDU0 IElyaXM= YXJlcnM= IHJhZw== IHJlbG9jYXRlZA== IEd1YXJhbnQ= IHN0cmF0ZWdpY2FsbHk= IGdhbW1h dWJlcnR5 IExvY2toZWVk Z3Jlcw== IGdyaWxsZWQ= IExvd2U= c3RhdHM= IFJvY2tz IHNlbnNpbmc= IHJlbnRpbmc= IEdlb2xvZ2ljYWw= 2KfY b3Ryb3A= IHNldw== IGltcHJvcGVybHk= NDg2 IOKWoA== IHN0YXJ2aW5n IEJq RGlzY3Vzc2lvbg== MzI4 IENvbWJv IEZpeGVz TkFU IHN0cml2aW5n dGhvcmE= IGhhcnZlc3RlZA== IFBpbmc= IHBsYXlmdWw= IGF2ZW51ZXM= IG9jY3VwYXRpb25hbA== IHdha2Vz IENvdXJpZXI= IGRydW1tZXI= IEJyb3dzZXI= IEhvdXRo aXR1 IGFwcGFyZWw= cGFzdGU= IGh1bnRlZA== IFNlY29uZGx5 bGFpbg== WFk= IFBJTg== aWNvbnM= IGNvY2t0YWlscw== IHNpemFibGU= IGh1cmRsZXM= ZXN0aW5hbA== IFJlY3JlYXRpb24= IGVjbw== NjQ4 IERpZWQ= bWludA== IGZpbmdlcnByaW50cw== IGRpc3Bvc2U= IEJvc25pYQ== dHN5 MjIwMA== IGluc3BlY3RlZA== IEZvdQ== IGZ1c3M= IGFtYnVzaA== IFJhaw== IG1hbmlmZXN0ZWQ= UHJvc2VjdXQ= IHN1ZmZpY2U= cmVuY2Vz IGNvbXBlbnNhdGVk IEN5cnVz IGdlbnVz IFdvbHZlcmluZQ== IFRyZW5kcw== IGhpa2Vz IFNlZW4= IGVucm9s Q29sZA== IHBvbGl0ZWx5 IFNsYXY= IFJ1cGVydA== IGV5ZXdpdG5lc3M= IEFsdG8= IHVuY29tcA== IHBvc3Rlcmlvcg== TXVzdA== IEhlcno= IHByb2dyZXNzaXZlbHk= IDIzNA== IGluZGlmZmVyZW5jZQ== IEN1bm5pbmdoYW0= IGFjYWRlbWlh IHNld2Vy IGFzdG91bmRpbmc= IEFFUw== cmF0aGVy IGVsZGVzdA== IGNsaW1icw== IEFkZHM= IG91dGNyeQ== IGNvbnRhZw== IEhvdXNlcw== IHBlcHQ= IE1lbGFuaWE= aW50ZXJlc3RlZA== IFVDSA== IFJvb3Rz IEh1YmJhcmQ= IFRCRA== IFJvbWFuaWFu ZmlsZW5hbWU= U3RvbmU= IEltcGw= IGNocm9tb3NvbWU= Q2xl ZHg= IHNjcmFtYmxlZA== IFB0 IDI0Mg== T1BMRQ== IHRyZW1lbmRvdXNseQ== U3RyZWV0 IGNyYXZpbmc= IGJ1bmRsZWQ= IFJH cGlwZQ== IGluanVyaW5n IGFyY2FuZQ== UGFydGljaXA= IEhlcm9pYw== c3R5 IHRvcHBpbmc= IFRlbXBlc3Q= cmVudGljZXM= Ymg= IHBhcmFub2lh IFVuaWNvZGU= IGVncmVnaW91cw== IFwn IE9zd2FsZA== IGdyYXZlbA== IFNpbXBzb25z IGJsYW5k IEd1YW50YW5hbW8= V3JpdGVy bGluZXJz IERpY2U= SkM= IHBhcml0eQ== IHNpZGVk IDIzNw== IFB5cnJoYQ== YXR0ZXJz ZGs= RmluZQ== Y29tcGFu IGZvcm11bGF0ZWQ= IElkb2w= aWxlcnM= aGVtb3Ro IEZhdg== IGludHJ1c2lvbg== IGNhcnJvdHM= IExheWVy IEhhY2tlcg== IC0tLS0tLS0tLS0tLS0tLS0= IG1vZGVyYXRpb24= 6YE= b2NvYw== IGNoYXJhY3Rlcml6ZQ== IFRlcmVzYQ== IHNvY2lvZWNvbm9taWM= IHBlcms= IFBhcnRpY2lwYXRpb24= dHJhaW5pbmc= IFBhdWxv cGh5cw== IHRydXN0d29ydGh5 IGVtYm9kaWVk IE1lcmNo Y3VycmVuY3k= IFByaW9yaXR5 IHRlYXNpbmc= IGFic29yYmluZw== IHVuZmluaXNoZWQ= IENvbXBhcmlzb24= IGRpc3BsZQ== d3JpdGVycw== IHByb2Zlc3Npb25z IFBlbmd1aW4= IGFuZ3JpbHk= IExJTks= Njg4 IENvcnJlc3BvbmQ= IHByZXZhaWxlZA== IGNhcnRlbA== bHA= YXNtcw== IFJlZGVtcHRpb24= IElzbGFtaXN0cw== ZWZmZWN0cw== ZG9zZQ== IExhdHRlcg== IEhhbGlmYXg= IHZhcw== IFRvcGljcw== IE5hbWVk YWR2ZXJ0aXNpbmc= enph SUNFUw== IHJldGFyZGVk YWNoYWJsZQ== IFB1cHBldA== IEl0ZW1MZXZlbA== IHJldHJhY3Q= IGlkZW50aWZpYWJsZQ== QWFyb24= IEJ1c3Rlcg== c29s aGVsbGU= YXNzZW1i SG9wZQ== cmFuZ2Vk QmE= IFB1cmNo 6YA= IFNpcmk= IGFycml2YWxz IDE5MTI= IHNob3J0ZW5lZA== IDMxMg== IGRpc2NyZXBhbmN5 IFRlbXBlcmF0dXJl IFdhbHRvbg== IGtpbmRlcmc= cG9saXQ= IHJlbWl4 IGNvbm5lY3RvcnM= 44OY44Op IEthemFraHN0YW4= ZG9taW5hdGVk IHN1Z2Fycw== aW1ibGU= IFBhbmlj IERlbWFuZA== IENvbG9ueQ== b25lbg== IE1FUg== Nzc1 dXJpYQ== YXphYXI= IERlZ3JlZQ== UHJp IHN1bnNoaW5l IDI1MQ== IHBzeWNoZWRlbGlj IGRpZ2l0YWxseQ== IEJyYXVu IHNoaW1tZXI= IHNoYXZl IFRlbGVzYw== IEFzdHJhbA== IFZlbmV6dWVsYW4= IE9H IGNyYXdsaW5n SW50ZWc= IEZlYXRoZXI= IHVuZm9sZGluZw== IGFwcHJvcHJpYXRpb24= IOijj+g= IE1vYmlsaXR5 IE5leQ== LS4= YmlsdA== TElO IFR1YmU= IENvbnZlcnNlbHk= IGtleWJvYXJkcw== IENhbw== IG92ZXJ0aA== IGxhdXJl Pj5c IFZpcGVy YWNoYQ== T2Zmc2V0 IFJhbGVpZ2g= IEphZQ== Sm9yZGFu anA= IHRvdGFsaXRhcmlhbg== Q29ubmVjdG9y IG9ic2VydmVz IFNwYXJ0YW4= IEltbWVkaWF0ZWx5 IFNjYWw= Q29vbA== IHRhcHM= IHJvYXI= UGFzdA== IGNoYXJz IEJlbmRlcg== IFNoZWxkb24= IHBhaW50ZXI= IGJlYWNvbg== IENyZWF0dXJlcw== IGRvd250dXJu IGhpbmRlcg== IEFuZHJvbWVkYQ== w5s= Y2NvbGk= IEZpdG5lc3M= ZXRyaWNhbA== IHV0aWxpemVz IHNlbmF0ZQ== IGVuc2VtYmxl IGNoZWVycw== VFc= IGFmZmx1ZW50 a2ls cnlsaWM= b3JkZXJpbmc= Q29tcHV0ZXI= IGdydWVzb21l b3N0aWNz IFViaXNvZnQ= IEtlbGxleQ== IHdyZW5jaA== IGJvdXJnZW9pc2ll SUJMRQ== IFByZXN0b24= d29ybg== YXJpc3Q= cmVhdGluZw== IHN0YWluZWQ= YXJpbmU= IHNsaW1l RU5O IGNoZXN0cw== IGdyb3VuZHdhdGVy YW5ub3Q= IFRyYXk= IExvY2tl IENUUg== IGR1ZGVz IEV4dGVybmFs IERlY29kZXI= IHBhcmFtZWQ= IE1lZGxpbmU= ODA5 IERpbm5lcg== cnVwYWw= Z3o= IEd1bQ== IERlbW8= amVl IGRo YmVybWFu YXJjaHM= IGVucXU= IEVwc3RlaW4= IGRldmFzdGF0aW9u IGZyaWVuZHNoaXBz IEFyZA== IDIzMQ== IFJ1Ymlu IERpc3RhbmNl IHNwdXJyZWQ= IGRvc3NpZXI= IG92ZXJsb29raW5n XFxcXFxcXFxcXFxcXFxcXA== Rm9yZXN0 IENvbWVz XCIs IElyYW5pYW5z IGZpeHR1cmVz TGF1Z2hz IGN1cnJ5 IEtpbmdzdG9u IHNxdWFzaA== IGNhdGFsb2d1ZQ== IGFibm9ybWFsaXRpZXM= IGRpZ2VzdGl2ZQ== Li4uLi4uLi4u IHN1Ym9yZGluYXRl b2dseQ== IDI0OQ== TWlkZGxl IG1hc3NhYw== IGJ1cmdlcnM= IGRvd25zdGFpcnM= IDE5MzE= Mzk0 IFZH IGxhc2Vycw== IFNpa2g= IEFsZXhh ZGVyaXZlZA== IGN5Y2xpc3Q= 44Gu6a2U b25lbGluZXNz ISEhISEhISE= IGJ1ZmZz bGVnYXRl IHJhcGluZw== IHJlY29tbWVuZGluZw== cm9yZWQ= IG11bHRpY3VsdHVyYWw= dW5pcXVl IGJ1c2luZXNzbWVu IHVuZWFzeQ== IE1BUA== IGRpc3BlcnNlZA== Y2lwbGluZQ== SmVzcw== IEtlcmFsYQ== 5ac= IGFic3RyYWN0aW9u U3Vydg== VWg= IHByaW50ZXJz aWph b3dkZXI= IGFuYWxvZ291cw== IEFTUA== YWZlcg== IHVuZm9sZGVk IGxldmVsaW5n IGJyZWFjaGVk IEhlYXJpbmc= IG5hdA== IHRyYW5zbGF0aW5n Y3JpdGljYWw= IGFudGFnb25pc3Q= IFllc3RlcmRheQ== IGZ1enp5 d2FzaA== bWVyZQ== IGJld2lsZA== IE1hZQ== VmlyZ2lu cGhyYXNl IHNpZ25hbGVk IEhJR0g= IHByb3Rlc3Rlcg== IGdhcm5lcg== dW5rbm93bg== IGtheQ== IGFiZHVjdGVk IHN0YWxraW5n YW1u IGRlc2VydmluZw== IFJpdg== IEpvcmdl IHNjcmF0Y2hpbmc= IFNhdmluZw== aXBpbmc= IHRlYXNl IG1pc3Npb25hcnk= IE1vcnJvdw== VElNRQ== UHJlc2VudA== IGNoZW1vdGhlcmFweQ== dGVybmVzcw== IEhvbWVz IFB1cmR1ZQ== IHN0YXVuY2g= IFdoaXRuZXk= IFRIRVJF zrw= aWF0dXM= IEVybmVzdA== IERlcGxveQ== IGNvdmV0ZWQ= Rk1M IERpYWxvZ3Vl IGV4aXRlZA== ZnJ1aXQ= IG5lcmQ= IjoiIiwi IHZpdm8= cnVseQ== NDYw IEFtZW4= cmVoZW5zaWJsZQ== IOKY RElS IGFkaGVyZW5jZQ== IGNoZXc= IENva2U= IFNlcmdlaQ== ZGlnaXRhbA== IE5lY2s= Z2VudGx5 ZW50aGFs Lyk= IHdlYXJ5 IGd1aXNl IENvbmNvcmQ= IE9uaW9u YXRjaGVy IGJpbmdl IERpcmVjdGl2ZQ== IG1hbm5lZA== YW5zaw== IGlsbHVzaW9ucw== IGJpbGxpb25haXJlcw== Mzgz b2x5bg== b2R5bmFtaWM= IFdoZWF0 IEFsaWM= IGNvbG91cmVk IE5BRlRB YWJv IG1hY3Jvcw== aW5kZXBlbmRlbnQ= c3dlZXQ= IHNwYWM= IEthYnVs IMQ= ZW1l IGRpY3RhdGVk IHNob3V0cw== PXs= IHJpcHBpbmc= IFNoYXk= IENyaWNrZXQ= ZGlyZWN0ZWQ= IGFuYWx5c2Vk IFdBUlJBTlQ= YWdvbnM= IEJsYXplcnM= IGNoZWVyZWQ= IGFyaXRobWV0aWM= IFRhbno= Mzcz IEZsYWdz IDI5NQ== IHdpdGNoZXM= IEluY2x1ZGVk IEdhaW5lZA== IEJsYWRlcw== R2Ft IFNhbWFudGhh IEF0bGFudGlz IFByYXR0 IHNwb2lsZWQ= IElC IFJhbWlyZXo= UHJvYmFibHk= cmVybw== IE5n IFdhcmxvY2s= dHA= IG92ZXJoZQ== IGFkbWluaXN0cmF0aW9ucw== IHRpbnQ= IHJlZ2ltZW50 IHBpc3RvbHM= IGJsYW5rZXRz IGVwaXN0 IGJvd2xz IGh5ZHJhdWxpYw== IGRlYW4= IGp1bmc= IGFzY2VuZA== NzA1 IFNhbnRpYWdv w64= IHVuYXZvaWQ= IFNoYW1hbg== cmVi IHN0ZW1taW5n OTk4 IE1H c3RpY2tz ZXN0aGVzaWE= RVJP IG1vcmJpZA== IEdyaWxs IFBvZQ== YW55bA== IGRlbGV0aW5n IFN1cnZlaWxsYW5jZQ== IGRpcmVjdGl2ZXM= IGl0ZXJhdGlvbnM= IFJveA== IE1pbGt5 RmF0aGVy IHBhdGVudGVk NDQ3 IHByZWN1cnNvcg== IG1haWRlbg== IFBoZW4= IFZlZ2Fu IFBhdGVudA== S2VsbHk= UmVkZGl0b3I= IG5vZHM= IHZlbnRpbGF0aW9u IFNjaHdhcno= IHdpemFyZHM= IG9taW5vdXM= IEhlYWRz IEJH IGx1bWJlcg== IFNwaWVs IGlzRW5hYmxlZA== IGFuY2VzdHJhbA== IFNoaXBz IHdyZXN0bGVy cGhp IHl1YW4= IFJlYmVsbGlvbg== IGljZWJlcmc= IG1hZ2ljYWxseQ== IGRpdmVyc2lvbg== YXJybw== eXRobQ== IFJpZGVycw== IFJvYmJpZQ== IEthcmE= IE1haW50ZW5hbmNl IEhlcmI= IGhhcm1z cGFja2Vk IEZlaW5zdGVpbg== IG1hcnJ5aW5n IGJsZW5kaW5n IFJhdGVz IDE4ODA= IHdyaW5r IFVuY2g= IFRvcmNo ZGVzY3JpYmVk IGh1bWFub2lk aWxpdGF0aW5n IENvbnY= IEZlbGQ= SUdIVFM= IHdoaXN0bGVibG93ZXI= b3J0bXVuZA== ZXRzeQ== YXJyZXR0 IE1vbm8= IElrZQ== IENOQkM= IFdBWQ== IE1ETUE= IEluZGl2aWR1YWxz IHN1cHBsZW1lbnRhbA== IHBvd2VyaG91c2U= IFN0cnU= Rm9jdXM= YXBoYWVs IENvbGxlZw== YXR0aQ== WkE= IHBlcmVubg== IFNpZ25hdHVyZQ== IFJvZG5leQ== IGN1YmVz aWRkbGVk IERhbnRl IElOVg== aWxpbmd1YWw= IEN0aA== IHNvZmE= IGludGltaWRhdGU= IFJvZQ== IERpcGxvbQ== IENvdW50cmllcw== YXlzb24= IGV4dHJhZGl0aW9u IGRpc2FibGluZw== IENhcmRpZmY= IG1lbW9yYW5kdW0= IFRyYWNl ID8/Pw== c2VjdG9y IFJvdWhhbmk= IFlhdGVz IEZyZWV6ZQ== IGJsYWRkZXI= TW90b3I= IFByb21pc2U= YW50YXN5 IGZvcmVzZWVhYmxl IENvbG9nbmU= Y29udGFpbmVy IFRyZWVz IEdvcnM= IFNpbmNsYWly IGJhcnJpbmc= a2V5ZQ== IHNsYXNoZWQ= IFN0YXRpc3RpY2Fs 6Yc= IOKWug== QWxsb3dz IGh1bWlsaXR5 IGRyaWxsZWQ= IEZ1cm4= NDQz IHNld2FnZQ== IGhvbWVwYWdl IGNvdXJ0eWFyZA== IHZpbGU= IHN1YnNpZGlhcmllcw== YWpv ZGlyZWN0b3J5 IGFtbW9u VmVycw== Y2hhcmdlcw== IH19 IENoYWlucw== IDI0Ng== bm9i IHBlcmNlcHQ= IGdyaXQ= IGZpc2hlcm1lbg== IElyYXFpcw== IERJU1RS IEZVTEw= IEV2YWx1YXRpb24= Z3JhcGg= YXRpYWw= IGNvb3BlcmF0aW5n IG1lbGFu IGVubGlnaHRlbmVk IGFsaQ== dGFpbGVk IHNhbHV0ZQ== IHdlYWtlc3Q= IEJ1bGxkb2dz VUE= IEFsbG95 IHNlbWVu b2NlbmU= IFdpbGxpYW1zb24= c3By LOKAlA== IEdG aXR0ZW5z QmVhdA== IEp1bms= aXBoYXRl IEZhcm1lcnM= IEJpdGNvaW5z aWdlcnM= ZGg= IExveWFs cGF5ZXI= IGVudGVydGFpbmVk IHBlbm5lZA== IGNvdXBvbg== UXVldWU= IHdlYWtlbmluZw== Y2Fycnk= IHVuZGVyZXN0aW1hdGU= IHNob290b3V0 IGNoYXJpc21hdGlj IFByb2NlZHVyZQ== IHBydWRlbnQ= aW5hbmNlcw== IHJpY2hlcw== IGNvcnRpY2Fs IHN0cmlkZXM= IGRyaWI= IE9pbGVycw== NTQw IFBlcmZvcm0= IEJhbmdrb2s= IGV1dGg= U0VS IHNpbXBsaXN0aWM= dG9wcw== Y2FtcGFpZ24= UXVhbGl0eQ== IGltcG92ZXJpc2hlZA== IEVpc2VuaG93ZXI= IGF1Z21lbnQ= IEhhcmRlbg== IGludGVydmVuZWQ= IGxpc3RlbnM= IEtvaw== IHNhZ2U= IHJ1YmJpc2g= IERlZA== IG11bGw= cGVsbGluZw== IHZpZGVvdA== UHJvZHVjdGlvbg== REo= bWlhaA== IGFkYXB0YXRpb25z IG1lZGljYWxseQ== IGJvYXJkZWQ= IGFycm9nYW5jZQ== IHNjcmFwcGVk IG9wcHJlc3M= Rk9STUFUSU9O IGp1bmN0aW9u NDE1 RUVFRQ== U2tpbGw= IHN1YmR1 IFN1Z2dlc3Q= IFBldHQ= IGxldHQ= IE1hbmlw IENhZg== IENvb3BlcmF0aW9u VGhlcg== IHJlZ2FpbmVk tuY= cmVmbGVjdA== IHRodWdz IFNoZWxieQ== IGRpY3RhdGVz IFdlaW5lcg== IEhhbGU= IGJhdHRsZWdyb3VuZA== c2NoaWxk IGNvbmRvbA== aHVudA== b3NpdG9yaWVz IGFjY3VzZXM= RmlsZW5hbWU= IHNocmk= IG1vdGl2YXRl IHJlZmxlY3Rpb25z TnVsbA== IExvYmJ5 pbU= IFNBVEE= IEJhY2t1cA== 0YM= bmlu IENvcnJlY3Rpb24= IGp1aWN5 dXRyYQ== IFByaWM= IHJlc3RyYWluaW5n IEFpcmJuYg== IEFycmVzdA== IGFwcHJvcHJpYXRpb25z IHNsb3Blcw== IG1hbnNsYXVnaHRlcg== IHdvcmtpbmdz IEh1c3M= IEZyZXk= TGVhdmU= IEhhcm1vbnk= IEZlZGVy IDQzMA== IHRyZW5jaA== IGdsYWRseQ== IGJ1bGxwZW4= IEdhdQ== Ym9uZXM= IGdyb292ZQ== IHByZXRleHQ= 44WL IHRyYW5zbWl0dGVy IENvbXBvbmVudA== IHVuZGVyYWdl IEVtcGlyZXM= VGlsZQ== IG95 IE1hcnZpbg== IENBUw== IGJsb3Nz IHJlcGxpY2F0ZWQ= IE1hcmluZXJz TWFyY3Vz IEJsb2Nrcw== IGxpYmVyYXRlZA== IGJ1dHRlcmZseQ== RmVlbA== IGZlcm1lbnRhdGlvbg== IHlvdXR1YmU= IG9mZmVuZA== IFRlcm0= cmVzaXN0 IGNlc3NhdGlvbg== IGluc3VyZ2VuY3k= IGJpcg== IFJhaXNl NTk1 IGh5cG90aGVzZXM= NTAy IHBsYXF1ZQ== b2NyYXQ= IGphY2tldHM= IEh1ZmZQb3N0 YW1vbmc= IGNvbmZlcg== NDg3 IExpbGx5 IGFkYXB0aW5n IEZheQ== IHNob3ZlZA== dmVj IHJlZmluZQ== IGdvbg== IGd1bm1lbg== emFp IFNodXR0bGU= IEl6YW4= IDE5MTM= IHBsZXRob3Jh wrfCtw== IDUxMA== IHB1YmVydHk= IDI0MQ== IFdlYWx0aA== IEFsbWE= IE1FTQ== IEFkdWx0cw== Q2Fz cHJpc29u UmFjZQ== IHdhdGVycHJvb2Y= IGF0aGxldGljaXNt IGNhcGl0YWxpemU= IEp1aWNl IGlsbHVtaW5hdGVk IFBhc2NhbA== IGlycml0YXRpb24= IFdpdG5lc3Nlcw== YWRsZQ== IEFzdHJv IGZheA== IEVsdmlz UHJpbWFyeQ== IExpY2g= IEVsdmVz IHJlc2lkaW5n IHN0dW1ibGU= MzE5 IFBLSw== IGFkdmVyc2FyaWVz RE9T IFJpdHVhbA== IHNtZWFy IGFyc29u aWRlbnRhbA== IHNjYW50 IG1vbmFyY2h5 IGhhbGZ0aW1l IHJlc2lkdWU= IGluZGlnbg== IFNoYXVu IEVsbQ== YXVyaQ== QWZm V0FUQ0g= IEx5b24= aGVscHM= MzYx IGxvYmJ5aXN0 IGRpbWluaXNoaW5n IG91dGJyZWFrcw== IGdvYXRz ZmF2b3JpdGU= IE5haA== c29uaWFu IEJvb3N0ZXI= IHNhbmRib3g= IEZhcmU= IE1hbHRh IGF0dFJvdA== IE1PUg== bGRl IG5hdmlnYXRpbmc= VG91Y2g= IHVudHJ1ZQ== IERpc2FzdGVy IGx1ZGljcm91cw== UGFzc3dvcmQ= IEpGSw== YmxvZ3Nwb3Q= NDE2 IFVOREVS ZXJuYWw= IGRlbGF5aW5n VE9Q IGltcGxhbnRz IEFWRw== IEh1Z2U= YXR0cg== IGpvdXJuYWxpc3RpYw== IFBleXRvbg== IElB UmFw Z29hbA== IFByb2dyYW1tZQ== IHNtYXNoaW5n d2l2ZXM= cHJpbnRsbg== IFBsYWd1ZQ== aW51cw== RUVQ IGNydWlzZXI= IFBhcmlzaA== dW1pbml1bQ== IG9jY3VwYW50cw== IEppaGFk bW9w IHBpbnQ= IGhlY3Q= IE1lY2Nh ZGlyZWN0b3I= IEZ1bmRpbmc= IE1peGVk IHN0YWc= VGllcg== IGd1c3Q= IGJyaWdodGx5 b3JzaQ== IHVwaGlsbA== UkQ= IGxlc2lvbnM= IEJ1bmR5 bGl2aW91cw== IGJpb2xvZ2lzdA== IEZhY3VsdHk= IEF1dGhvcml6YXRpb24= IDI0NA== QWxsb3c= 77g= IEdpdWw= IHBlcnRpbmVudA== b3RhdXI= ZXNzZQ== IFJvb2Y= IHVubWFubmVk MzUx IFNoYWs= IE9yaWVudA== IGVuZGFuZ2Vy RGly IHJlcGxlbg== ZWRpZW50 IHRhaWxvcg== IGdhZGdldHM= IGF1ZGlibGU= 4piG TmljZQ== IGJvbWJhcmQ= IFJhcGU= IGRlZmlhbmNl IFRXTw== IEZpbGlwaW5v IHVuYWZmZWN0ZWQ= ZXJ2YXRpdmVz IHNvYXJlZA== IEJvbHRvbg== IGNvbXByb21pc2luZw== IEJyZXdlcnM= UkFM IEFITA== aWN5Y2xl IHZhbXBpcmVz IGRpcHBlZA== b3llcg== IFhJSUk= IHNpZGV3YXlz IFdhc3Rl IERpc3M= IOKUnOKUgOKUgA== JC4= IGhhYml0YXRz IEJlZWY= dHJ1dGg= dHJhaW5lZA== c3BsaXQ= UnVz QW5keQ== IEJyYW0= UkVQ cGlk 6KOF IE11dGFudA== QW5pbQ== IE1hcmluYQ== IGZ1dGlsZQ== aGlnaGVzdA== ZnJlcXVlbmN5 IGVwaWxlcHN5 IGNvcGluZw== IGNvbmNpc2U= IHRyYWNpbmc= IFNVTg== cGFuZWw= IFNvcGhpZQ== IENyb3dsZXk= IEFkb2xm IFNob290ZXI= IHNoYWt5 IElH IExpZXM= IEJhcmJlcg== cGtn IHVwdGFrZQ== IHByZWRhdG9yeQ== VUxUUw== Lyoq IGludG94aWNhdGVk IFdlc3Ricm9vaw== b2RkZXI= aGVtZW50 IGJhc2VtYW4= QVBE c3RvcmFnZQ== IEZpZnR5 ZWRpdG9y R0VO VVRJT04= aXJ0aW5n IHNld2luZw== cmlmdA== IGFnb255 IFNhbmRz IDI1NA== Q2FzaA== IGxvZGdl IHB1bnQ= TmF0dXJhbA== IElkZWFz IGVycm9uZW91cw== IFNlbnNvcg== IEhhbm5pdHk= IDE5MjE= IG1vdWxk IEdvbg== a2F5YQ== IGFub255bW91c2x5 IEtFWQ== IHNpbXVsYXRvcg== V2ludGVy IHN0cmVhbWVk NTA3 PyIs IHRlYXNlZA== IGNvZWZmaWNpZW50 IHdhcnRpbWU= IFRIUg== Jycu IEJhbmtpbmc= bXBpcmU= IGZhbmRvbQ== IGxpYQ== R2E= IGRvd25oaWxs IGludGVycHJldGluZw== SW5kaXZpZHVhbA== Tm9ybQ== IGplYWxvdXN5 Yml0Y29pbg== IHBsZWFzdXJlcw== IFRveXM= IENoZXZyb2xldA== IEFkdmlzb3I= SVpF IHJlY2VwdGlvbnM= NzA2 Q3Jv IDI2Mg== IGNpdHJ1cw== aXJ1 UmV2aWV3ZXI= amVjdGVk VUVT YW56 MTk4MQ== IFdvcmtlcg== IGNvbXBsaWVk b3Jlc2NlbnQ= Y29udGluZW50YWw= VG9u IFByaXNt IFNoZWVw IDI4OA== bm94 IFZvZw== T3Jk IHJlYWxtcw== dGVr IGlycmlnYXRpb24= IGJpY3ljbGVz IGVsZWN0cm9uaWNhbGx5 cG9seQ== dGFsbA== KCkpOw== IGFlc3RoZXRpY3M= IEludGVncmF0ZWQ= RXhwbG9yZQ== IGR1bms= NDc2 cGFpbg== IEphY3F1ZXM= IERtaXQ= RnJhbWVz IHJldW5pdGVk IGh1bWlk RHJv UG9saXRpY2Fs IHlvdXRoZnVs IGVudGFpbHM= IG1vc3F1aXRv MzYz c3BlY2llcw== IGNvb3JkaW5hdGluZw== IE1heWhlbQ== IE1hZ251cw== TW91bnQ= SW1wcm92ZWQ= IFNUQVRF QVRUTEU= IGZsb3dlZA== IHRhY2tsZWQ= IGZhc2hpb25lZA== IHJlb3JnYW4= aXZhcmk= ZmluZ2Vy IHJlbHVjdGFudGx5 ZXR0aW5n IFZhbmQ= eW91bmc= IEdhcmxhbmQ= IHByZXN1bXB0aW9u IGFtZW5pdGllcw== IFBsZWFzYW50 b25lbnRpYWw= IE94eQ== IG1vcmFscw== IFlhaA== UmVhZHk= U2ltb24= RW5o RGVtb24= IGNsaWNo TW9uaXRvcg== IERV IHdlbGNvbWVz IHN0YW5kb3V0 IGRyZWFkZnVs IGJhbmFuYXM= IGJhbGxvb25z aG9vdGluZw== YmFzaWM= IHN1ZmZpeA== IGR1bHk= Y2Fubw== Q2hhaW4= YXRvcw== IGdlb3BvbGl0aWNhbA== ICgm IEdlbWluaQ== w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IGFjcXVpdHRlZA== THVjaw== cHJvdGVjdA== MTAyNA== IHNjYXJjaXR5 IG1pbmRmdWxuZXNz ZWNpZGVk RE4= cHJpbWU= IFByZXNpZGVudHM= IFZJREVP ICjiiJI= YWRkb2Nr Tk9S IFBydQ== cHVu IExPTA== KSkpKQ== IExpcXU= IFNBUw== IHN0eWxpbmc= IHB1bmlzaG1lbnRz IG51bWI= IGFzY2VydGFpbg== IFJvY2tpZXM= Zmx1 VGh1bWJuYWls IHBlcnBldHJhdGVk IFNlbWk= IGRpc2FybQ== IE9sZGVy IEV4Y2VwdGlvbg== IGV4cG9uZW50aWFsbHk= IENvbW11bml0aWVz IGFib2xpc2g= IFBhcnRuZXI= cHRvbXM= IDc3Nw== IEZvbGV5 IENhc2Vz IGdyZWFzZQ== IFJlYmlydGg= R3JvdW5k IDsp IERvY3RyaW5l aWtpbmk= WWU= IEJsb3Nzb20= IHBlcnNpc3Rz YmlsbA== IGluZnVzaW9u IGJ1ZGRpZXM= OTEx IFBhdGllbnQ= IGRlbW9z IGFjcXVhaW50YW5jZQ== IFBhdw== YXRhcmk= IHhtbA== IGZhc2NpbmF0aW9u IFNlcnZl z4I= YnJhbmRlZA== IGF6 UmV0dXJucw== IG92ZXJzaGFkb3c= IHJvYW0= IHNwZWVkeQ== bnVtYmVyZWQ= aGVsaWFs IGRpc2NpcGxl IGFzc3VyYW5jZXM= Z2l2ZW4= cGVjdGluZw== IE5hdGFsaWU= 55Sw IG1vc3F1aXRvZXM= cm90ZWlu IG51bWVyaWM= IGluZGVwZW5kZW50cw== IHRyYW5zaXRpb25hbA== IHJlYWN0aW9uYXJ5 IE1lY2hkcmFnb24= ZG9jdG9y IHNob3J0ZXN0 IHNlcXVlbnRpYWw= IEJhYw== IEFjY291bnRz 44GM YWNoeQ== cmFjdGl2ZQ== IFJlZ2ltZW50 IGJyZWF0aHRha2luZw== ZmZpY2llbmN5 IEJhdGVz IDMxMQ== IHdhcmRyb2Jl ZnRz IEJlcms= U2ltcGx5 IFJpdmVyc2lkZQ== aXZlcmluZw== aWRlbnRpYWw= bHVjZW50 IGVucmljaGVk IENvbnZlcg== IEdpdmluZw== 44OZ IGxlZ2FsaXpl IEZUQw== IGZyZWFraW5n TWl4 IHRlcnJlc3RyaWFs ZXNpYW4= Y2llbnRz V2luZw== TE9BRA== IGxlZGdl IFZpb2xlbnQ= IE1ldGFsbA== IDMwOA== IHNvdXRoZWFzdGVybg== aGV0dG8= TWVhdA== IHNsb3dkb3du IHJldHJlYXRlZA== SmVyZW15 ZW5kYXM= KioqKio= ZXJpYw== IHJlaW5z b3BwYWJsZQ== IEh1bWFuaXR5 ZWFyYW5jZXM= cmlnYW4= Q2FtZXJh IHdhaXZlcnM= c29j IGFsdGVyYXRpb24= dHJhbnNmb3Jt IENlbWV0ZXJ5 NTA2 IGluZGVmaW5pdGU= IHN0aW11bGF0aW5n eWc= NjAz IFNvcA== IGRlc2NyaXB0aXZl UGhhc2U= IEVkbXVuZA== IHBuZXVtb25pYQ== dmVudHVz QW1i IGxhYm9yYXRvcmllcw== IEV4Y2x1c2l2ZQ== dWdhcg== V2VyZQ== IG1hbGZ1bmN0aW9u IGhvbW9zZXh1YWxz IC0tLS0tLS0= dW5p IHR1cmJpbmVz IEVxdWl0eQ== RHU= IG1pbmRlZA== IFJI IEJsYWNraGF3a3M= IGZlYXRz IDE3MDA= cmVwbA== MzYy bGFkZW4= IGluZGlzcGVuc2FibGU= bHlzcw== dHRp IHJlZWw= IGRpdmVydGVk IGxpa2VuZXNz IHN1YnNjcmlwdGlvbnM= IGZpbmdlcnQ= IGZpbHRoeQ== ZGVzdHJ1Y3Q= ZHJhZnQ= IEJlcm5hcmRpbm8= bGF1bmNo IHBlcnBsZXg= IFNVTQ== Y2FyYg== IHN3ZWF0ZXI= IFZlbnR1cmU= IEphZw== IENlbGVi IFZvdGVycw== IHN0ZWFkZmFzdA== IGF0aGxldGljcw== IEhhbnNvbg== IERyYWM= VHJhY2tlcg== IGNvbW1lbmQ= IFByZXNpZGVuY3k= IERJRA== aW5mb3JtZWQ= IHdlYnBhZ2U= UHJldHR5 IGZvcmNlZnVsbHk= 44OD44Kv IHJlbG9jYXRpb24= IHNhdGlyZQ== 4ok= IFN1bmRlcmxhbmQ= 5oQ= Vm9pY2U= Pz8/Pz8/Pz8= IGluZm9ybWFudA== IGJvd2Vs IFVuaWZvcm0= IC4uLiI= IHB1cmdl IHBpY25pYw== IFVtYg== IFVQREFURQ== IFNhcHBoaXJl IFN0YWxs bGVhcm4= IG9iamVjdGl2ZWx5 IG9ibGl0ZXI= IGxvb3Bob2xl IGpvdXJuZXlz IG9taXNzaW9u UHJvcw== IFNpZG5leQ== cGxvbWE= IHNwcmF5ZWQ= IGd1cnU= IHRyYWl0b3I= IHRpbWV0 IHNuYXBwaW5n IFNldmVudA== dXJuYWw= IFVraXA= IGJvd2Vk cG9yYWw= bGliZXJhbA== Um9z UXVlc3Rpb25z aU9T IHN1bW1hcml6ZQ== U1RBVA== IDE4NTA= YXBlc3Q= IGxlbmRlcg== IFZhcmlhYmxl YnJpbmdpbmc= IExPUkQ= LCk= IGNvbGxhcHNlcw== eGlldHk= IE5lZA== WUQ= IFNjaGE= IGFudGlib2R5 IGRpc2JhbmQ= eXJl aWxsdXNpb24= IHJvdmVy c2hlZA== IEhpcm9zaA== Y2Np IGNhbGFt IE1vcnRvbg== UGludGVyZXN0 IDE5Mjg= IEV1cmFz b3JkZXM= IGZlbmNlcw== IEludmVudG9yeQ== IFZhbGVuY2lh IFVk IFRpZmY= IHNxdWU= IHF1b3RhdGlvbg== IHRyb3VibGVzb21l ZXJrZXI= UVVFU1Q= IEtpbmdkb21z c291dGg= IGxldnk= UHJpbmNl IFN0aW5n IG5pY2tuYW1lZA== IGFwcGU= IHBob3RvZ3JhcGhpYw== IGNvcnB1cw== cmVmZXJlbmNl IFRyb2c= VW50 KT0o IExhdHZpYQ== IGFjdGl2YXRpbmc= IGxpY2Vuc2Vl IGRpc3Bhcml0aWVz IE5ld3NsZXR0ZXI= 44OD44OI IGZyZWVpbmc= IEplZXA= IFBlcmNlcHRpb24= aW5zaw== IHNpbGljb25l IEhheWRlbg== TGVhbg== IFN1enVraQ== aWJyYXJpYW4= NjY4 IHNwb3I= IGNvcnJlbGF0aW9ucw== YWdoZXR0aQ== IHR1YmVy IElQQ0M= aWx1cw== IFZ1 IHdlYWx0aGllc3Q= IENhcmJ1bmNsZQ== YW56YQ== IGZvb2xlZA== IFp1cg== IGRhZGR5 cmFubw== aWxpYW4= IGtub2Nrb3V0 Zm1hbg== cmVxdWlyZWQ= IFdpa2lsZWFrcw== IER1ZmZ5 T05U IGluc29s IE9iamVjdHM= IGJvdQ== IE5vcmRpYw== IEluc2VydA== c2Nhbg== IGRhbmNlcnM= IGlkaW90cw== bWFqb3JpdHk= IE5ldmlsbGU= IEZyZWVCU0Q= IHRhcnQ= cGFuaWM= Njkw IGNvY29h IHNhbXBsZWQ= IGxvb2t1cA== SW5kdXN0 IGluamVjdGlvbnM= Z2VucmU= IGF1 IHJvYWR3YXk= IGdlbml0YWxz S2luZA== IEV4YW1pbmVy IFlheg== RnJlc2g= IHBhcmFseXNpcw== IEFsdW1pbnVt IHJlYXA= b2vDqQ== IHNsb3BweQ== IFR1bm5lbA== cG9zaXVt bmVyeQ== ZW5pYw== IGhlcmJhbA== IE91dGVy IEJ1aWxkZXI= IGluY3Vy IGlkZW9sb2dpZXM= IGJhY2t1cHM= Y29uc3VtaW5n IERldGVjdA== ZGVjaw== IEtOT1c= IEdyZXQ= IE1JQw== IHRvdWdobmVzcw== IEV4aGliaXQ= IGhpdmU= TGVz IFNDSE9PTA== IEF0YXJp YWxkZQ== IE51bGw= YW5kZXN0aW5l bW91c2U= IGJyaWdhZGU= NDg5 IHJldm9s IExhd3Nvbg== IFdhaA== b3BvbHk= ZWJ0ZWQ= IFNhdW5kZXJz IDMxMw== IFdpbmM= IHRhYm9v IEhlbG1ldA== IHdlZGdl Y2hpcA== IFRpbmE= Ymc= IGluZnVyaQ== cm4= IGFub21hbGllcw== IFN5bmM= IEV4YW0= IENvbW1pdA== IERpYXJ5 IEFMU08= IERlYm9y b21lZGljYWw= IGNvbXByZWhlbnNpb24= NjU1 IGVtcG93ZXJpbmc= IGlyZQ== IGp1aWNlcw== IEVUSA== IEJveGluZw== PSIv IGZhY2lsaXRhdGVk cG9rZQ== IFBhcnNvbnM= IE1vZGVy dHJhdmVs IGNpdmlsaXphdGlvbnM= IGxpYmVydGFyaWFucw== IHJ1bmU= IENsYXJrcw== YXRoZWQ= IGNhbXBhaWduZXJz IERpc3BhdGNo IEZhaHJlbmhlaXQ= IENhcGNvbQ== LS0tLS0tLS0tLQ== IGxhY2U= IGRyYWluaW5n IGxpbmVy IEFydGlmaWNpYWw= w6lu dGFzaw== XSku IEdNTw== IE9wZXJhdG9y b3JkaW5hcnk= IEluZmx1ZW5jZQ== IFVwcw== IHBvdGVuY3k= dXNzZW4= b3Nwb25z IFN3aW0= IERlYWRsaW5l VW5pdHk= IGN1bGluYXJ5 IGVubGlnaHRlbm1lbnQ= IHdlYXJlcg== IG1pbmVk IHBseQ== IGluY2VzdA== IERWRHM= V2Fsaw== QlRD VHJhZGU= IGRldmFs aWJhbmQ= IE92ZXJzaWdodA== UGFsZXN0aW5pYW4= IGRhcnQ= IG11bA== TFI= IHJlbW92YWJsZQ== IFJlYWxtcw== 7J0= IG1pc2Nhcg== IFZ1bGthbg== Njg1 w6hyZQ== IFNhcA== IG1lcmdpbmc= IENhcmx5 Y2hlc3Rlcg== IGJyaXNr IGx1eHVyaW91cw== IEdlbmVyYXRvcg== IGJpdHRlcm5lc3M= IGVkaWJsZQ== IDI0Mw== VEc= IHJlY3RhbmdsZQ== V2l0aE5v YmVsb3c= SmVubg== IGRhcmtlc3Q= IGhpdGNo IGRvc2FnZQ== IHNjYXZlbg== IEtlbGxlcg== IElsbHVzdHJhdGVk Q2VydGFpbmx5 IE1hdmVyaWNrcw== TWFyZ2luYWw= IGRpYXJyaGVh IGVub3Jtb3VzbHk= IDk5OQ== c2hy cXVhcnQ= IGFkYW1hbnQ= IE1ldw== IHJlbm92YXRpb24= IGNlcnZpY2Fs IFBlcmNlbnRhZ2U= ZW5lcnM= IEtpbWJlcg== IGZsb2F0cw== IGRleA== IFdpdGNoZXI= IFN3YW5zZWE= ZG0= IHNhbHR5 eWVsbG93 IGNhcGU= IERyYWlu IFBhdWxh IFRvbGVkbw== bGVzaQ== TWFnYXppbmU= IFdpY2s= IE1u IEFjaw== IFJpZGluZw== QVNPTg== IGhvbW9waG9iaWM= QVJQ IHdhbmRlcmVk Q1BV b29kb28= IFBpcGU= IHRpZ2h0ZW5pbmc= IEJ1dHQ= MzE4 IGRlc2VydGVk U2Vzc2lvbg== IGZhY2lsaXRhdGluZw== SnVtcA== IGVtZXJnZW5jaWVz T1dFUg== IGV4aGF1c3RpdmU= IEFGVEVS IGhlYXJ0YmVhdA== IExhYmVs YWNreQ== IENlcnRpZmllZA== aWx0cmF0aW9u WmU= IFV0dA== IDEzMDA= IHByZXN1bWU= IERpc3A= IHN1cmdlZA== IGRvbGxz Q29sdW1i IGNoaW1wYW4= IFJhem9y IHRpY2tz IGNvdW5jaWxsb3I= IHBpbGdyaW1hZ2U= IFJlYmVscw== IFFD IEF1Y3Rpb24= eGlh aWtr YnJlZA== IGluc2VydGlvbg== IGNvYXJzZQ== ZEI= U0VF IFphcA== IEZvbw== IGNvbnRlbXBvcg== IFF1YXJ0ZXJseQ== b3Rpb25z IEFsY2hlbWlzdA== IFRyZXk= IER1bw== U3dlZXQ= ODA0 IEdpb3Y= IGZ1bm4= Tmlu aG9mZg== IHJhbWlmaWNhdGlvbnM= IDE5MjI= IEV4cGVydHM= YXplcw== IGdhcm1lbnRz YXJpYWw= IE5hYg== IDI1Nw== IFZlZA== IGh1bW9yb3Vz IFBvbXBl IG55bG9u IGx1cmtpbmc= IFNlcmdleQ== IE1hdHRpcw== IG1pc29neW55 IENvbXBvbmVudHM= IFdhdGNoaW5n IEZvbGs= cmFjdGljYWw= QnVzaA== IHRhcGVk IGdyb3VwaW5n IGJlYWRz IDIwNDg= IGNvbmR1 cXVlcnF1ZQ== UmVhZGluZw== IGdyaWV2YW5jZXM= VWx0cmE= IGVuZHBvaW50 SGln IFN0YXRpYw== IFNjYXJib3JvdWdo THVh IE1lc3Np YXF1 IFBzeU5ldA== IFJ1ZGQ= IGF2ZW51ZQ== dnA= SmVy IHNoYWR5 IFJlc2lzdA== IEFydGVtaXM= IGNhcmVsZXNz IGJyb2tlcnM= IHRlbXBlcmFtZW50 IDUyMA== VGFncw== IFR1cm5pbmc= IHV0dGVyZWQ= IHBlZGQ= IGltcHJvdmlzZWQ= IDoo IHRhYmw= IHBsYWlucw== MTYwMA== cHJlc3N1cmU= IEVzc2VuY2U= bWFyZ2lu ZnJpZW5kcw== IFJlc3RvcmF0aW9u IHBvbGx1dA== IFBva2Vy IEF1Z3VzdGluZQ== IENJUw== IFNFQUw= b3JhbWE= IHRod2FydA== c2Vlaw== IHBhZ2Fu wro= Y3B1 IGdhcm4= IGFzc29ydG1lbnQ= IElMQ1M= dG93ZXI= UmVjb21tZW5kZWQ= IHVuYm9ybg== IFJhbmRvbVJlZGRpdG9y IFJhbmRvbVJlZGRpdG9yV2l0aE5v IHBhcmFseXplZA== IGVydXB0aW9u IGludGVyc2VjdA== IFN0b2tl IFNjbw== QmluZA== 5b4= IFBORw== IE5lZ2F0aXZl IE5PQUE= TGVvbg== IGFsbG95 IExhbWE= IERpdmVyc2l0eQ== NTc1 IHVuZGVyZXN0aW1hdGVk IFNjb3I= IG11cmFs IGJ1c3RlZA== c29vbg== bGlm IG5vbmV4 IGFsbGVyZ3k= IFVuZGVyd29ybGQ= IFJheXM= IEJsYXNpbw== IGhycw== IERpcg== IDMyNw== Ynl0ZXI= IHJlcGxhY2VtZW50cw== IGFjdGl2YXRlcw== cml2ZWQ= TUg= IHBhbnM= IEhJ IGxvbmdpdHVkaW5hbA== IG51aXNhbmNl YWxlcg== IHN3ZWxs IFNpZ25lZA== c2Np IElzbGVz IEFHQQ== IGRlZmlhbnQ= IHNvbmlj b2Nvbg== S0M= IEFpbQ== dGll YWhhaA== IG1M RFg= IGJpc2M= IEJpbGxib2FyZA== IFNZU1RFTQ== TkVZ Z2FhcmQ= IGRpc3RyZXNzZWQ= Zm9ybWVybHk= QWxhbg== IGNoZWZz IG9wdGljcw== IENvbWV0 IEFNQw== IHJlZGVzaWduZWQ= aXJtYXRpb24= IHNpZ2h0aW5ncw== Mzgy MzEx IFdC IGNvbnRyYWN0aW9u IFRPVEFM RHVhbA== IHN0YXJ0bGVk IHVuZGVyc3RhbmRhYmx5 IHN1bmdsYXNzZXM= RVRIT0Q= IGRvY2tlcg== IHN1cmZpbmc= IEhFTA== IFNsYWNr dG9uZXM= IHNoYWx0 VmlzdWFs NDk4 RGVwYXJ0bWVudA== Y3Vzc2lvbg== IHVucmVzdHJpY3RlZA== IHRhZA== IHJlbmFtZQ== ZW1wbG95ZWQ= IGVkdWNhdGluZw== IGdyaW5uZWQ= YmVkcm9vbQ== IEFjdGl2aXRpZXM= IFZlbHZldA== IFNXQVQ= IHNodWZmbGU= aWdvcg== IHNhdHVyYXRpb24= RmluZGluZw== Y3JlYW0= aWN0ZXI= IHZvZGth dHJhY2tpbmc= dGVj IGZvcmVncm91bmQ= aWVzdGE= IHZlaGVtZW50 IEVDQg== IFRpZQ== RXk= IHR1cnRsZXM= IFJhaWxyb2Fk IEthdHo= IEZyYW1lcw== IG1lbmFjZQ== IEZlbGxvd3NoaXA= IEVzc2VudGlhbA== dWdnaXNo IGRyaXA= Y2h3aXR6 IEt5b3Rv c2I= IE5pbmE= UGFyYW1ldGVy IGFsYXJtcw== IENsYXVk IHBpb25lZXJpbmc= IGNoaWVmbHk= IFNjcmVhbQ== Q29sbGVjdGlvbg== IHRoYW5rZnVsbHk= IFJvbmFsZG8= 5a2Q c3RyaXA= IERpc25leWxhbmQ= Y29tbWVyY2lhbA== U2VlaW5n U291bA== IGV2YWN1YXRl IGNpdg== IEFzaGU= IGRpdmlkZXM= IERhZ2dlcg== cmVoZW5zaXZl IGJlcnJpZXM= IERG IHN1c2hp IHBsdXJhbGl0eQ== V0k= IGRpc2FkdmFudGFnZWQ= IGJhdHRhbGlvbg== b2JpbGVz NDUx IGNsaW5n IHVuZGVuaWFibGU= IExvdW5nZQ== IGhhdW50 cGhl IHF1YW50aWZ5 IGRpZmZlcmVk IFsqXQ== IFZpeg== Y3Vt c2xhdmU= IHZpZGVvZw== IHF1YXI= IGJ1bmRsZXM= IEFsb25zbw== dGFja2xl IG5ldXJvbmFs IGxhbmRzbGlkZQ== Y29uZmlybWVk IERlcHRo IHJlbmV3YWJsZXM= QmVhcg== IE1hY2Vkb25pYQ== IGplcnNleXM= IGJ1bms= IFNwYXdu IENvbnRyb2xz IEJ1Y2hhbmFu IHJvYm90aWNz IGVtcGhhc2l6aW5n IFR1dG9yaWFs aHlw aXN0b24= IG1vbnVtZW50YWw= 5rA= IENhcnJ5 IHRic3A= ZW5hbmNl SGlsbA== YXJ0aGVk IHJvdHRlbg== RGVhbg== IHR3aXN0aW5n IGdvb2R3aWxs IGltbWVyc2lvbg== TGl2aW5n IGJydXNoZXM= IENHSQ== IEF0aw== dHJhZGl0aW9uYWw= IHBoYW50b20= IFN0YW1pbmE= IGV4cGFuc2lvbnM= IE1hcmlu IGVtYmFya2Vk IEVn aW50ZXN0aW5hbA== IFBFT1BMRQ== IEJvb3Ro IEFwcGFsYWNo IHJlbGVnYXRlZA== VlQ= TUlU IG11c3Rlcg== IHdpdGhkcmF3aW5n IG1pY3Jvc2NvcGU= IEdhdGhlcmluZw== IENyZXNjZW50 IEFyZ2VudGluZQ== IERlY3Jl IERvbWluaWM= IGJ1ZHM= YW50YWdl IElvbg== IHdpZGVuZWQ= T05TT1JFRA== IEdsb3Zlcw== aWFubm9wb3Vsb3M= cmF6ZW4= ZmVlbA== IHJlcGF5bWVudA== IGhpbmRzaWdodA== IFJFQUxMWQ== IFBpc3RvbA== IEJyYWg= IHdhdHRz IHN1cnZpdmVz IGZsdXJyeQ== aXNzeQ== QWxlcnQ= IFVydWd1YXk= UGhvZW5peA== U2xvdw== IEdyYXZl IEZpcg== IG1hbmFnZWFibGU= IHRhcmlmZg== IFVEUA== IFBpc3RvbnM= IE5pZ2VyaWFu IHN0cmlrZW91dHM= IGNvc21ldGljcw== d2hlbG1pbmc= ZmFi Y2FwZQ== cHJveHk= IHJldGhpbms= IG92ZXJjb21pbmc= c2ltcGxl IHdvbw== IGRpc3RyYWN0aW5n IFN0YW50b24= IFR1bHNh IERvY2s= NjU5 IGRpc2NvcmQ= IEVtYWNz IFZlcw== IFJPQg== IHJlYXNzdXJpbmc= IGNvbnNvcnRpdW0= TXVzbGltcw== MzIx IHByb21wdHM= c2Vp IEhpdGNo aW1wb3NlZA== IEZvb2w= IGluZGlzY3JpbQ== d3Jvbmc= YnVxdWVycXVl RGF2aXM= IV0= IHRpbWVsZXNz IE5FRUQ= IHBlc3RpY2lkZQ== IHJhbGx5aW5n IENhbGRlcg== IOWk IHhw IFVubGU= IEV4cG9ydA== bHVhag== QnVmZg== KTwv Qm9vdA== IENocnlzbGVy b3JhdGl2ZQ== TWVzcw== IG5lZ2xpZ2libGU= ZXJ0b2Rk IE11c2hyb29t IEdhbGU= Z2M= IENvc2J5 IFJ1cmFs cml0aWNhbA== QmVsbA== IHR1cmJpbmU= MDAyMDAwMDA= IGxlZ2l0aW1hdGVseQ== IEFuaW1hdGVk VEVE IFRoZW9kb3Jl Y29uZHVjdA== IEhpZXI= IGNvdW50ZXJmZWl0 IEFsZ2VyaWE= IHVuYmVhdA== Y29udHJvbGxlcg== IHVucmVz IHNjcmFtYmxpbmc= IEZhbGxvbg== VGVz IGFtYmVy IHJveWFsdGllcw== IFNoZWx0ZXI= IExlc3Rlcg== IGNsYXNzaWZ5 UmVtb3Rl IHVuaGVhcmQ= IGNvbnRyb3ZlcnNpZXM= IGVucmljaG1lbnQ= IFlhbmtlZQ== Z2FtZXI= IHBsYXRpbnVt IGVjb2xvZ3k= IFNhcms= IHVudG91Y2hlZA== IHN1cGVydmlzb3Jz ICIl IGZvb3Ro IGNvbW1vbnM= IG5hcmNvdGljcw== IGluZGljZXM= IFBseQ== IGFkZGl0aW9uYWxseQ== IEdhd2tlcg== IEVR UGxheWluZw== IGNhdmVhdA== IEFic29sdXRl b3NzdXM= QmFieQ== IHJhdGlvbg== IHJlc2lu IGNhbGlicmF0aW9u IE5ld3BvcnQ= IGtub2Nrcw== dnQ= IGNvbXBvc3Q= U2NlbmU= IHNhcmNhc3Q= IGtpc3Nlcw== IG5z YWxsaQ== IE1hcmNlbA== IFBpZXQ= aWF0cmljcw== IHN1cnJvdW5kcw== IFJlcHJvZHU= IFBoaWxsaWVz IHVuY2VydGFpbnRpZXM= IEV1cg== IFJvbWFuY2U= IEhhdGg= IE5lZWRz IENsb2Fr IGNyZW0= cXVldWU= IDM1NQ== IHVwZnJvbnQ= XSk7 IHJlY2lwcm9j IDE5Mjc= IDExMDA= dXRzdQ== IGRlcHJlc3NpdmU= b3dtZW50 RmFucw== IG1lY2g= IGFubmloaWw= IGNvdW50ZXJ0ZXJyb3Jpc20= IEZpZ3VyZXM= Ym9sZA== IE1vaW5lcw== IERyaXZlcnM= IG1hbnVzY3JpcHRz IENyeXB0bw== IGh5cG5vdA== cmVkZGl0cw== IHByb3NlY3V0aW9ucw== IGRpdmVydA== Q1JJUA== IEJlbmU= IFJlZ2dpZQ== IHRheGluZw== IE1vcmFsZXM= ZW50aW5n dHVy c2lnbmlmaWNhbnQ= IFBST1Y= IHN0cmFuZHM= IHBvdWNo IFJvb2tpZQ== u5I= IG5pY2Vy aGVteQ== aHc= RUNB IGludGltaWRhdGVk IHN0cmljdGVy IG1pY3JvYmlhbA== ZGV0YWlscw== IHZvd3M= IHF1YWtl aGhoaA== IHJlaW52ZW50 VWI= IHJlbGlucXU= IEJ1ZmZldHQ= bGljZW5zZWQ= aXR0ZXJlZA== IFBpY2FyZA== IGNoZXdpbmc= dWNs b3JnYW5pYw== IGxvY2FsaXplZA== IEVjb25vbWlzdA== IGFjcXVhaW50ZWQ= RGVmaW5pdGlvbg== c2Vk Q3JpdGljcw== IGNj NDUz Mzgx IGZlbGxvd3M= IGNoZWNrcG9pbnRz MDI1 IHJlZWxlY3Rpb24= IG1lZGlhdGVk IEtERQ== IGh1cmRsZQ== IHRleHRpbmc= UGVyZmVjdA== IHRydXN0ZWVz ZmVjdHVyZQ== IGRpY2g= bW9uYXJ5 IGRpc3RpbmN0aW9ucw== IDE0MDA= IHVzaGVy IHBhcmFzaXRlcw== IFNoYXJpbmc= IFZpbQ== IGJhcmJlY3Vl IE1pbmlzdGVycw== ZXJlbGxh IGVi IG1j IFNvbWVob3c= IEluc2VjdA== Y2hhbmdlcw== YnJvYWQ= IEJ5eg== IGdyYXBlcw== NjY5 ID09PT09PT09PT09PT09PT09 IGFzc2ltaWw= IGhhdW50aW5n IGZpcmVwb3dlcg== IGRlZmFtYXRpb24= ZW1waGFzaXM= IGNvbXBvc2U= IGFsbGVyZ2llcw== IHN0cmFuZw== cm9sbGVycw== YmFuZw== IGJyZXdlcnM= cm9uZ2g= cmlvdA== cG9vcg== Y29sZA== U2FtcGxl IGJ1b3k= MDQw IENvdXJ0bmV5 IDI2OA== IFdlZGRpbmc= NzAy IG9ic2Vzc2l2ZQ== IGJyYWtpbmc= IExhbA== YW5pY2Fs 5aY= YXRlbg== Q29uc3RydWN0aW9u IGNsaW5pY2FsbHk= aWVyc2hpcA== TmFtZXM= IERpc2N1c3M= IFJhbW9z IGxvY2FsZQ== IEFncmljdWx0dXJhbA== RW5hYmxl IGhvcnNlcG93ZXI= ZW50dXJl UHJlZg== Q291cnQ= IHN0YWZmaW5n IGZ1dHVyaXN0aWM= ZHJpdmVycw== IE1hcmtldHBsYWNl 5oim RnJpZW5kcw== IGRhbW5pbmc= IEN1c3RvbWVycw== IHdlZWRz IE1haQ== IGFnaWxl IFRhdHQ= aWNlbnQ= UmFua2Vk Y3JvZnQ= IEthdHk= RXh0cmVtZQ== IGNhcnZl IFJvdmVy IEJ5cm9u Mzcy IGNvbmR1Y3Rz cmF0Y2g= aXRpYQ== IFB1bXBraW4= U2FkbHk= UmVsb2FkZWQ= UG9saWN5 IGxpY2s= cGVhaw== aXNrcw== IENEcw== IEVuY3ljbG9wZWRpYQ== aW5pdGlhbA== Q29z IEF3YXJlbmVzcw== IERyYW0= JCQkJA== IHJpZmY= IHNjcmlwdHVyZQ== cnVubmVycw== IGJvaWxlcg== b25zb24= b2lu IGhhbXN0cmluZw== IGNhdGFseQ== IEFyY2hiaXNob3A= Y2hhbGw= IGZhdXg= b2tpbg== bG9jYWxob3N0 IE5BTUU= YWRvYmU= U0FO YW1hdGU= IHNjcmFtYmxl IGNhcmM= IE1hbmlmZXN0 IENlZGFy IFNlcmdpbw== bGF0ZXI= ZmZlcg== IGdyYXBwbGluZw== IERldXRzY2hl YWdvbmlzdHM= IE5ld3Nw IHByZXRlbmRlZA== YXJjaG1lbnQ= IGN1cmF0ZWQ= IGhlYWRwaG9uZQ== IFVuY29tbW9u IFNJR04= QWdlbnQ= IGRlYWRsaW5lcw== IGhvcml6b250YWxseQ== IE1BVA== IFN1bW1lcnM= IG9yZGFpbmVk IExhc3RseQ== IEtlbmRhbGw= IGZyaWc= IE1hY2hpbmE= IFdhdGVybG9v IE1leGljYW5z IHByb3RlY3Rvcg== IGdsYXJl fSI= UHJlbWl1bQ== IHJpZnQ= IFRlbGVzY29wZQ== TWV0YWw= IHJlY2FwdA== IDs7 IGluY2xpbmF0aW9u IGltcG9zZXM= aW5nZW4= Xns= IGhhc3Rl IGRvbHBoaW5z IGNvbW11dGVycw== cGxhbm5lZA== Y29uZw== bXg= IFVwbG9hZA== IGV4dHJhcA== IFR1Y3Nvbg== IEV4cGxvcmF0aW9u ZWZlYXRlZA== IHNsZW5kZXI= NzAz IEJ1aw== aXNlbA== IGNvbXBldGl0aXZlbmVzcw== Y2hsb3I= IFBlcm1hbmVudA== IEV2ZXJldHQ= IFNwZWNpYWxpc3Q= IFNPTA== IGN5YW4= IEV4YWN0bHk= VUY= IExJRkU= YXJ5bA== b25ldA== IEVtcGxveWVl YXdlZA== IFJhdGluZ3M= IGV4dHJhdmFn dWxodQ== IFBsYW5l IGVsZXZhdGU= IENvb3JkaW5hdG9y IFdhdGtpbnM= IGV4Y2x1ZGVz IHNlbnRpZW50 IGVwb2No IGFsbG9j UHJldmlvdXNseQ== IFNoeQ== IFNsb3Zha2lh TE9DSw== IG1hcmtlZGx5 IGtub2I= IGFkdmVudHVyZXJz IEJlZW4= IENvc3Rz YW1tZXJz IG9uc2xhdWdodA== IFN1cHBvcnRlZA== IFRhdQ== aWthcnA= IFNvdmVyZQ== IEhhbXB0b24= 44KJ UHJldg== IFdvcnNl IGNvdHRhZ2U= IEhhZGVz bGV6 Ym93bA== IGZyYWdyYW5jZQ== IExvaw== RU1PVEU= IFBldHJv IDE5MjU= IFBlbmQ= cHJvZHVjaW5n IHJlbG9jYXRl dmF0aQ== cG9sZQ== IHNlbWlu IE5VTQ== IHJvY2tlZA== YnVmZg== Ymx5 UmVwbHk= IEhhaQ== IGFydGljdWxhdGVk IElzbGFtYWJhZA== NjY1 IENsYWltcw== RGVza3RvcA== IHRydXN0ZWU= IHNjcmlwdGluZw== IFNvYg== IEFzeWx1bQ== U1RET1VU IENsb3du IERvcnRtdW5k IERldm9u bGl0ZQ== IE1hcmJsZQ== IGJ1bmtlcg== IGNyZXN0 IGFyb3VzYWw= IFNlYXJz IEJ1ZGR5 ZXJlZGl0aA== IFBvbGx5 IGRlY29kZQ== IFZpc2g= IFJlZmxlY3Q= YW5vbg== IHJlZnVuZHM= aW1tZXJz SE0= IHdpcGluZw== IHB1enpsZWQ= IG1hdHRl dW5v UGllcnJl KSks IHRhaW50ZWQ= IHN5bWJvbGlzbQ== IEZyYXo= IHByb3Rlc3RvcnM= ZXRoZXVz JSUlJQ== V3Jh IGxheA== YWRlbQ== YXR1cmF0aW9u 44OT IFRyYWlsZXI= IEVORw== IEJvd3Nlcg== IGF0dG0= RHVy ODA3 IHNpZHg= IGNpZGVy IEFmZmVjdA== IHdvdmVu IEJhcmtlcg== YmVuZWY= IGRzdGc= IFJ5dQ== Pls= IHNxb3I= U2F1ZGk= IGlzdGc= IGluZHVsZ2U= cHJvYw== IGRpc2d1c3RlZA== IGNvbXBvdW5kZWQ= IG5lbQ== IHNjaG9vbGluZw== IEN1cmU= cHJvY2Vzc2luZw== U29s IHByb3ZlcmI= aXRpemVk IEFsdmFyZXo= IHNjYXJm IHJlY3Rhbmd1bGFy cmV2ZQ== IGhvcm1vbmFs IFN0cmVzcw== aXRpemVu IDQyNQ== Z2lybHM= IE5vaXI= IFJhcHA= IG1hcmNoZXM= Y2h1cmNo IFVzZXM= IDQwNQ== IEJlcm0= IG9yZGluYW5jZXM= IEp1ZGdtZW50 Q2hhcmdlcw== IFppbg== IGR1c3R5 IHN0cmF3YmVycmllcw== IHBlcmNl IFRodXI= IERlYm9yYWg= bmV0ZmxpeA== IExhbWJlcnQ= IGFtdXNlZA== IEd1YW5n WU9V UkdC IENDVFY= IGZpYXQ= cmFuZw== IGZlZGVyYXRpb24= IE1hbnQ= IEJ1c3Q= IE1hcmU= cmVzcGVjdGl2ZQ== IE1pZ3JhdGlvbg== IEJJVA== NTkw IHBhdHJpb3Rpc20= IG91dGxpbmluZw== cmVnaW9u IEpvc8Op IGJsYXN0aW5n IEV6cmE= QnM= IHVuZGVybWluZXM= IFNtb290aA== IGNsYXNoZWQ= cmFkaW8= IHRyYW5zaXRpb25pbmc= IEJ1Y2NhbmVlcnM= IE93bA== IHBsdWdz IGhpYXR1cw== IFBpbmJhbGw= IG1pZw== IE51dHI= IFdvbGZl IGludGVnZXJz IG9yYml0cw== IEVkd2lu IERpcmVjdFg= Yml0ZQ== IGJsYXppbmc= dnI= RWRnZQ== IFBJRA== ZXhpdA== IENvbWVk IFBhdGhmaW5kZXI= IEd1aWQ= IFNpZ25z IFplcg== IEFnZW5kYQ== IHJlaW1idXJzZW1lbnQ= TWVzaA== aVBob25l IE1hcmNvcw== IFNpdGVz aGF0ZQ== ZW5idXJn IHNvY2tldHM= cGVuZA== QmF0bWFu dmly IFNIT1c= IHByb3Zpc2lvbmFs Y29ubg== IERlYXRocw== QVRJVkU= UHJvZmlsZQ== c3lt SkE= IG5pbmph aW5zdGFsbGVk aWRhdGVz ZWJyYQ== IE9tYWhh IHNlaXppbmc= IEJlYXN0cw== IHNhbHRz TWlzc2lvbg== R2VuZXJhbGx5 IFRyaWxvZ3k= aGVvbg== bGVnYXRlcw== IGRpbWU= IGZhaXJl cGFyYWJsZQ== R3JhcGg= IHRvdGFsaW5n IGRpYWdyYW1z IFlhbnVr cGxldA== IE1laA== IG15dGhpY2Fs IFN0ZXBoZW5z YXV0aWNhbA== b2NoZW1pc3RyeQ== IGtpbG9ncmFtcw== IGVsYm93cw== YW5jb2Nr IEJDRQ== IFByYWd1ZQ== IGltcHJvdg== IERldmlu ICJc cGFyYWxsZQ== IHN1cHJlbWFjaXN0cw== IEJpbGxpb24= IHJlZ2ltZW4= aW5uYWNsZQ== IHJlcXVpc2l0ZQ== YW5nYW4= IEJ1cmxpbmd0b24= YWlubWVudA== IE9iamVjdGl2ZQ== b21za3k= R1Y= IHVuaWxhdGVyYWw= IHRj IGhpcmVz bWVudGFs IGludm9sdW50YXJ5 IHRyYW5zcGw= IEFTQ0lJ wqg= RXZlbnRz IGRvdWJ0ZWQ= IEthcGxhbg== IENvdXJhZ2U= aWdvbg== IE1hbmFnaW5n IFRhcnQ= IGZhbHNlaG9vZA== IFZpb2xldA== IGFpcnM= IGZlcnRpbGl6ZXI= QnJpdGFpbg== IGFxdWF0aWM= b3Vm V29yZHM= IEhhcnRmb3Jk IGV2ZW5pbmdz IFZlbmdlYW5jZQ== cXVpdGU= R2FsbA== IFByZXQ= IHBkZg== IExN IFNvY2hp IEludGVyY2VwdA== OTIw IHByb2ZpdGFiaWxpdHk= IElkbGU= IE1hY0RvbmFsZA== IEVzdGFibGlzaG1lbnQ= dW1zeQ== IGdhdGhlcmluZ3M= IE5hag== Q2hhcmxpZQ== IGFzY2VudA== IFByb3RlY3Rvcg== IGFsZ2VicmE= IGJpb3M= Zm9ydW1z RUxT SW50cm9kdWNlZA== IDMzNQ== IGFzdHJvbm9teQ== Q29udHJpYnV0 IFBvbGlj UGxhdGZvcm0= IGNvbnRhaW5tZW50 d3JhcA== IGNvcm9uYXJ5 IEplbGx5 bWFuYWdlcg== IGhlYXJ0YnJlYWtpbmc= Y2Fpcg== IENoZXJv Y2dp TWVkaWNhbA== IEFjY291bnRhYmlsaXR5 ISEi b3BoaWxl IHBzeWNob3RpYw== IFJlc3RyaWN0 IGVxdWl0YWJsZQ== aXNzdWVz IDE5MDU= IE5law== Y2lzZWQ= IFRyYWNraW5n IG96b25l IGNvb2tlcg== cm9zaXM= IHJlb3Blbg== IGluZmluaXR5 IFBoYXJtYWNldXRpY2Fs ZW5zaW9uYWw= QXR0ZW1wdA== IFJvcnk= TWFyY28= IGF3YWl0cw== SE9X dHJlYXRlZA== IGJvbHN0 IHJldmVyZWQ= IHBvZHM= b3BwZXJz MDAxMA== IGFtcGxpdHVkZQ== cmljYW4= U1BPTlNPUkVE IHRyb3VzZXJz IGhhbHZlcw== IEthaW5l IEN1dGxlcg== IEFVVEg= IHNwbGVuZGlk IHByZXZlbnRpdmU= IER1ZGxleQ== aWZhY3Rz dW1pbmF0aQ== IFlpbg== IGFkbW9u IFZhZw== IGludmVydGVk IGhhc3RpbHk= IEhhZ3Vl THlu IGxlZGdlcg== IGFzdHJvbm9taWNhbA== Z2V0dGluZw== IGNpcmNh IENpYw== IFRlbm5pcw== TGltaXRlZA== IGRydQ== IEJZVQ== IHRyYXZlbGxlcnM= IHBhbmU= IEludHJv IHBhdGllbnRseQ== IGFpZGluZw== IGxvb3M= IFRvdWdo IDI5Mw== IGNvbnN1bWVz U291cmNlRmlsZQ== ICIiIg== IGJvbmRpbmc= IHRpbHRlZA== IG1lbnN0cnVhbA== IENlbGVzdGlhbA== VUxBUg== UGx1Z2lu IHJpc2tpbmc= TmF6 IFJpeWFkaA== IGFjY3JlZGl0ZWQ= IHNraXJt 6Zs= IGV4YW1pbmVy IG1lc3Npbmc= IG5lYXJpbmc= IENoZXJu IEJlY2toYW0= IHN3YXBwZWQ= IGdvb3Nl S2F5 IGxvZnR5 IFdhbGxldA== IFsn IGFwb2NhbHlwc2U= IGJhbWJvbw== IFNQQUNF IEVsZW5h IDMwNg== YWNvbnM= IHRpZ2h0ZW5lZA== IGFkb2xlc2NlbmNl IHJhaW55 IHZhbmRhbGlzbQ== IE5ld3Rvd24= IGNvbmplY3Q= Y2FrZXM= IGNoZWF0ZWQ= IG1vZGVyYXRvcnM= cGFyYW1z RUZG IGRlY2VpdA== IFNUTA== IFRhbnphbmlh IFJJ IDE5MjM= IEV4aWxl dGhlbA== IHRoZW9sb2c= IHF1aXJreQ== IElydmluZQ== IG5lZWR5 b3Jpcw== VW0= S2E= IG1haWxib3g= MzIy IGJvcw== IFBldHJh S0lORw== IGVubGFyZ2Vk T2Z0ZW4= IGJhZGFzcw== IDM0Mw== IFBsYWNlcw== IENBRA== IHByaXN0aW5l IGludGVydmVuaW5n ZGlyZWN0aW9u IGxheg== IERTTQ== IHByb2plY3Rpbmc= IEZ1bms= YWdvZw== cGF5bWVudA== bm92 IGNoYXR0ZXI= QVJC IGV4YW1pbmF0aW9ucw== IEhvdXNlaG9sZA== IEd1cw== Rm9yZA== NDE0 Qm9zcw== IG15c3RpYw== IGxlYXBz IEJhdg== dWx6 YnVkZ2V0 Rm9vdGJhbGw= IHN1YnNpZGl6ZWQ= IGZpcnN0aGFuZA== IGNvaW5jaWRl b2N1bGFy Q29ubg== IENvbGxhYm9y IGZvb2xz YW11cmE= YWhhcg== cmlzdHM= IHN3b2xsZW4= IGV4cGVuZGVk IFBhdQ== c3Vw IHNwYXI= IGtleW5vdGU= c3VmZg== IHVuZXF1YWw= IHByb2dyZXNzaW5n c3RyaW5ncw== IEdhbWVyZ2F0ZQ== RGlzbmV5 IEVsZXZlbg== b21uaWE= IHNjcmlwdGVk IGVhcm5lcnM= YnJvdGhlcg== IEVuYWJsZWQ= 5rM= IGxhcnZhZQ== IExPQw== bWVzcw== V2lsc29u IFRlbXBsYXRl c3VjY2Vzc2Z1bGx5 IHBhcmFtb3VudA== IGNhbW91ZmxhZ2U= IGJpbmRz IFF1aWV0 IFNodXR0ZXJzdG9jaw== cnVzaA== IG1hc2NvdA== Zm9ydHVuZQ== IENvbHQ= IEJleW9u aGFiaQ== IGhhaXJj IDI2Nw== IERldXM= IHR3aXRjaA== IGNvbmNlbnRyYXRpbmc= IG5pcHBsZXM= Y2libGU= IGdpcg== Tlo= TWF0aA== bmlo UmVxdWlyZWQ= IHBvbmRlcg== IFNBTg== IHdlZGRpbmdz IGxvbmVsaW5lc3M= TkVT IE1haGpvbmc= Njk1 YWRkbGU= IEdhcm5lcg== IENPVVI= QnJpZGdl IHNwcmVl IENhbGR3ZWxs IGJyaWJlcnk= IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQ== cGx1Z2lucw== IHJhY2tldA== IGNoYW1wYWduZQ== dmVyc2libGU= Vm90ZQ== IG1vZGlmaWVycw== TWF5b3I= Njgw IGFzc2VtYmxpZXM= IFN1bHRhbg== IE5pbmc= IExhZGllcw== IHN1bGZ1cg== IG9yYnM= IC0tLS0t X19fX19fXw== IEpvdXJuYWxpc20= IGVzcG9ydHM= IGx1c2g= IGh1ZQ== IHNwZWN0cmFs SG9uZXN0 44OP IGJ1c2hlcw== IHJlaW5mb3JjZW1lbnQ= IHJlb3BlbmVk IFdoZWVscw== IE1vcmc= cmlldmluZw== IGF1eGlsaWFyeQ== IGpRdWVyeQ== IEJBVA== dGVzcXVl IHZlcnRleA== cHVyZQ== ZnJleQ== 44K6 ZG9z IHR5cGg= IGN1bGw= IGVx IGRlY29u IHRvc3Npbmc= IGRpc3BhcmF0ZQ== IEJyaWdoYW0= cHJpbnRm bGVkZ2Vk IHN1bmQ= IGNvenk= IGhlcGF0aXRpcw== cGVyZm9ybWluZw== IGF2YWw= IEdH ZnV0dXJl IHBldGVydG9kZA== IEtvc292bw== IG1hZ25ldHM= QWxyZWFkeQ== IEVkaXNvbg== IENlcmVz IFJBSUQ= IGJyaWxsaWFuY2U= NTc2 IGRlcml2ZXM= IGh5cGVydGVuc2lvbg== IM6U IGxhbWJkYQ== IGZsYWly IG1pc3Npb25hcmllcw== IHJhcGVz IFN0YXJ0ZXI= IE1vbnRocw== IGRlZnk= IHNlaXNtaWM= IFJhcGhhZWw= IGV1cm96b25l NjU2 enNjaGU= IHNjcmF0Y2hlZA== IGJvd3M= IExlbm5vbg== IEdhaWE= IGRyaXBwaW5n ZmFjdHM= QWxl IGZyb2dz IEJyZWFzdA== b2dlbmVpdHk= IFByb3NlY3V0b3I= IGFtcGxpZmllZA== IEhvZGc= IEZu VGhvdXNhbmRz IE5JSA== IE1vbml0b3Jpbmc= RlRXQVJF IFByaWVidXM= IEdyb3dpbmc= aHVudGVy IGRpYWdub3Nl IE1hbGQ= IExS IGNyb3duZWQ= IGJ1cnN0aW5n IGRpc3NvbHV0aW9u amF2YXNjcmlwdA== IHVzZWZ1bG5lc3M= IEV4ZWN1dGlvbg== Oig= IEl2b3J5 YWFo IHBlcnNlY3V0ZWQ= dmlvbGVuY2U= aXN0YXM= IENyYXRl IGltcHVsc2Vz IFNwYW5p ZWRlcw== SGFuZGxl IFplcmc= dGhpbmthYmxl TGFzdGx5 IHNwb250YW5lb3VzbHk= IGluY29udmVuaWVudA== IGRpc21pc3Npbmc= IHBsb3R0ZWQ= IGVpZ2h0eQ== IDczNw== cmlzaA== IFRob3JudG9u YXRoYW0= IHNpdGNvbQ== VmVu UmVjaXBl dGVs bHVuZA== IGNsZWFycw== IFNhc3VrZQ== IDI1OA== IG9wdGluZw== IGVucmFnZWQ= ZXN0aGV0aWM= IEFl dWNocw== UHJlcA== Rmxvdw== IHJ1bm9mZg== IEVhdGluZw== IEdpbGVz IEFjdGluZw== cmVzb3VyY2Vz aWJhYmE= IHJwbQ== IHNrZXdlZA== IEJsYW5j IFNha3V5YQ== IGhvdHRlcg== IDE5MjQ= b3BpYW4= Y2tv IGNydW1ibGluZw== IGNhcHRhaW5z IEFwcHJvcHJpYXRpb25z bGVhZGVycw== ZHJvcHBpbmc= YW51dHM= IHJldmVyc2luZw== IFBvc2U= IFNlaw== U2NvdA== IElkZWE= Y2lzZQ== IFNsb3Zlbmlh IDMxNw== RG9jdG9y IGNyb2NvZA== YWxkaQ== U2Vh IEZhcnJlbGw= IG1lcmNlbmFyaWVz IFJOQw== IEd1ZXNz IHBhY2luZw== TWFjaGluZQ== U3RyZWFtZXJCb3Q= IENoYXJpdHk= IDI5OA== IGNhbm5vbnM= IFRvYnk= VFBQU3RyZWFtZXJCb3Q= IFBhc3Npb24= Y2Zn VGhvbQ== IGJhZGdlcw== IEJlcm5zdGVpbg== LuKAkw== IFBPUA== IENvbmo= IGluaXRpYWxpemF0aW9u IGJpb2RpdmVyc2l0eQ== RHVi IGZldWRhbA== IGRpc2NsYWltZXI= IGNyb3c= IGlnbml0aW9u YXJm U0hB IGtIeg== aGF6YXJk IEFydGlzdHM= b2V1dg== Njc5 IFJ1ZHk= TmluZQ== IFJhbWFkYW4= 5b0= aXR0bw== IGFkcmVuYWxpbmU= Q2VydA== IHNtZWxsZWQ= IGltcHVuaXR5 IGFnZW5kYXM= IFJlYm9ybg== IENvbmNlbnQ= IFNlZW1z IG9tZWdh IER1c3Rpbg== IGJhY2tlcg== IFNhdWNl IEJveWxl V0lO IHNwaW5z IHBhdXNlcw== dXB0 IHNocmVkZGVk IHN0cmFwcGVk IENvcnJ1cHRpb24= IHNjcmF0Y2hlcw== IG5p IGF0dGlyZQ== IFNBRg== RmFjdG9yeVJlbG9hZGVk IElQUw== ICgl IHNlbWluYXI= Zm9jdXM= Y2l2aWw= IDE4NjA= aW50b3No IGNvbnRpbnVhbA== IGFiYnJldmk= IFNvaw== b2NvYm8= WE0= IGZyYW50aWM= IHVuYXZvaWRhYmxl IGFydGVyeQ== IGFubm90YXRpb25z YmF0aA== Q2xpbWF0ZQ== IGRvcnM= IFNsaWRl Y29vcmQ= IFJlbG9hZA== IExETA== IExvdmVjcmFmdA== IHVuaW1hZ2lu IHJlc2VtYmxlZA== IGJhcnJhY2tz bnA= IHN1cnJvZ2F0ZQ== IGNhdGVnb3JpemVk 44Kp IHZhY2NpbmF0ZWQ= IGRyYWluYWdl IGluZGlzdA== IFdoYXRzQXBw IDE4NzA= b2xlcmFuY2U= aW52b2tl YW1vcnBo IHJlY29ubmVjdA== IGVtYW5j IGJsaW5kbmVzcw== IDEyODA= aW50ZXJuZXQ= Y29sbGFy IGFsdHJ1 IGFieXNz IFRSSQ== NjU3 IGluZnVzZWQ= SEVBRA== IGZvcmVzdHJ5 IFdvb2R5 IENp d2k= c2Ft Nzg0 aG9saWRheQ== IG1vZ3Vs IEZlZXM= IERFTg== SW50ZXJuYWw= dXJiZWQ= ZnVzYw== YXRvbQ== IElsbHVzaW9u IHBvbGxlZA== IGZsYXA= IGNvYXg= TEdCVA== QW5hbHk= IFNlY3Rpb25z IENhbGlmb3Ju ZW1u IGhpdGhlcg== IE5JR0hU IG5haWxlZA== IFBpcGVsaW5l Mzkx b29m IFByaW1hbA== dmVyZW5k IHNsYXNoaW5n IHJldHJp YXZpb3Vy IGRlcGFydGluZw== Z2ls SVND IG1pZHdheQ== IHVsdHJhc291bmQ= IGJlaGF2aW5n IFRhcmE= Y2xhc3Nlcw== VmlydHVhbA== IENvbG9uaWFs IHN0cmlwcGluZw== IG9yY2hlc3RyYXRlZA== IEdyYXZlcw== NDUy IElyb25pY2FsbHk= IFdyaXRlcnM= IGxlbmRz IE1hbno= IHJhdmVu IG94aWRhdGl2ZQ== IDI2Ng== RUxG YWN0dWFsbHk= YXNjYXI= RHJhZnQ= IGZhdm91cmFibGU= IGh1bWlsaWF0aW5n IGZpZGVsaXR5 IEhvZg== IFh1YW4= NDk2 IGxheWVyZWQ= YXRpcw== Nzkw IHBheWNoZWNr aXRvbg== S2Fy IFZNd2FyZQ== IEZhcm1lcg== IHNlcnZpYw== Z2xvbWVy IHNsdW1w IEZhYnJpYw== IERPQw== ZXN0aW5n IHJlYXNzdXJl IHBoeWw= dm9sdA== aXRvcnk= UnVsZXM= IG94aWRhdGlvbg== IHByaXplZA== IG1pc3RyZXNz IERqYW5nbw== V0FSTg== 5ZE= IGVuY29kZQ== IEZlZWRiYWNr IHN0dXBpZGl0eQ== SWFu IFl1Z29zbGF2aWE= 16g= YWNs VVRF MTk3Nw== IHF1YWxpZmllcw== IHB1bHNlcw== cHJldHR5 IGZyb3pl IHNz SXRlcmF0b3I= IHVyZ2VudGx5 IG1haWxlZA== IENoYW0= IHN1c3RhaW5pbmc= IGJhc2ls IHB1cHBpZXM= aWxhbnQ= IFBMRUFTRQ== bGFw YWNlb3Vz RmVhcg== IE1hc3Rlcnk= YXV0b21hdGlj IFRBRw== IGFudGlt YWdsZXM= NDcz ZnJhbWVz IHdoaXNwZXJz IFdob2V2ZXI= IGJyYXZlcnk= IFVLSVA= cmFjdGlvbnM= IiIi IHRhbWU= IHBhcnRlZA== ZXZlcnl0aGluZw== Q09OVA== IGluZGVidGVk IGFkZHI= cmVr SVJFRA== IGVtaW5lbnQ= Y2xpbnRvbg== IG91c3RlZA== IHJldmlld2Vy IG1lbHRkb3du IHJlYXJy IFlhbw== dGhlcmVhbA== YWJ5dGU= IHN0dW1ibGluZw== IGJhdGNoZXM= IDI1OQ== IGNvbnRyYWNlcHRpdmU= IHByb3N0aXR1dGU= ZW5zaXM= RGVjbA== IFN0cmlrZXM= TWlsaXRhcnk= IE9hdGg= dmFjYw== cHBpbmdz MDUy IHBhcnROYW1l YW1waW5n UmVwb3J0cw== S0k= Q0hS IHN1YnRseQ== c3dlcnM= Qmxha2U= dXN1YWw= IGNvbnRlc3RhbnRz IGNhcnRyaWRnZXM= IEdSRUFU IGJsdXNo IOKAug== NDcy IHJlYXNvbmVk 44Ok cGFyYWxsZWxlZA== IGR5bg== YWdhdGU= IG5pZ2h0bHk= 5YY= NTU2 IHNlbWFudGlj IEFkdm9j ICEh IGRpc2FncmVlcw== IEJX VmVo IGhhcm1pbmc= IGVtYnJhY2Vz IHN0cml2ZXM= IGlubGFuZA== IEthcmQ= IGhlYXRz IEdpbm55 dXRhbg== ZXJuYXV0 eWxlbmU= IEVsZXY= SkQ= IGhhcnM= IFN0YXJy IHNreXNj IGNvbGxhYm9yYXRvcnM= VXN1YWxseQ== IHJldm9sdXRpb25z IFNUQVRT IGRpc21hbnRsZQ== IGNvbmZpZGVudGx5 IGtpbmV0aWM= QWxp IHBlcmNlbnRpbGU= IGV4dHJhY3Rpbmc= aWxsaWFu ZXN0ZWFk IHBoeXNpY2lzdHM= IE1hcnNoYWw= IGZlbGxvd3NoaXA= IGRhc2hlZA== IFVS IFNpb3V4 IENvbXBhY3Q= YW1pZGU= UHl0aG9u IExlaWdo IFBoYXJtYWM= aXN0cmF0ZXM= aGVyaWNhbA== IGZ1ZQ== IEVtaW4= ICh7 IE5laWdoYm9yaG9vZA== IGRpc3J1cHRpbmc= IER1cA== IGdsYW5k IFNldg== IE1hcmlhbg== YXJnb24= IER1bmQ= IDwhLS0= IHN0cmFuZA== IHN0YWRpdW1z em9z IHBzeWNob3Npcw== IFJhY2s= IGJyaWxsaWFudGx5 77iP IHN1Ym1lcmdlZA== IEluc3RpdA== IENob3c= IGNhZ2Vz IEhhdHM= IFVycw== IGRpbHV0ZWQ= dXNhdA== aWVubmU= IE1lbWJlcnNoaXA= IEJ1cms= IGll IGFyY2hldHlwZQ== RHJ1Zw== dWx0b24= IFNwb2Nr IE1jS2F5 IERlcGVuZA== RmVhdHVyZWQ= U29j MTk3OA== IEJlcmU= IHJlbGVudGxlc3NseQ== IGNyaXBwbGluZw== IGFydGhyaXRpcw== 55Sf IFRyb3BpY2Fs IEJ1bGc= IENoZXJ5bA== IGFkbWlyYWJsZQ== IHN1YnRpdGxl T3ZlcnJpZGU= IG9yaWdpbmF0aW5n IENDUA== IHN3b3Jl IFNvbGU= IERpc29yZGVycw== MzI5 IHByb2Nlc3Npb24= IHJlZnVyYg== IGltbWVyc2Vk cmVxdWVudGx5 IHNrZXB0aWNz IGNlcmFtaWM= bWl0dGVy ZW5zdGVpbg== YmVsdA== IFRJVA== YmlkZGVu IGZpcg== bWlzdA== Pl0= IHdlYXZl IFBhcmFkb3g= IGVudHJ1c3RlZA== IEJhcmNsYXlz IG5vdmVsaXN0 b2dpZQ== ODA2 IG5pbmV0eQ== IGRpc2FncmVlbWVudHM= QEBAQEBAQEA= IEF1c2Nod2l0eg== Y2Fycw== IExFVA== dHVi YXJhbnRpbmU= UE9T IGJhY2tzdG9yeQ== IGNoZWVyZnVs IFJhZw== ZWth Ymlhc2Vk IGluZXhwZXJpZW5jZWQ= YWtyYQ== IFdpdHQ= dGFu IHJhcGlzdA== IHBsYXRlYXU= Y2hhbA== IElucXVpcw== ZXhwcmVzc2lvbg== IGNpcGhlcg== IHNoYXZpbmc= YWRkZW4= cmVseQ== KFw= aXNtYQ== IFJlZ3VsYXRvcnk= Q0hBUg== aWx5bg== TlZJRElB R1U= IG11cm0= bGF1cw== Q2hyaXN0b3BoZXI= IGNvbnRyYWN0dWFs IFByb3h5 IEphaW1l IE1ldGhvZGlzdA== IHN0ZXdhcmRz c3Rh cGVyaWE= IHBoeXNpb2xvZ3k= IGJ1bXBlZA== IGZydWN0b3Nl QXVzdHJhbGlhbg== IE1ldGFsbGlj IE1hc3F1ZXJhZGU= YXJi IHByb211bA== IGRvd25mYWxs IGJ1dGNoZXI= IGJvdXI= IElORk9STUFUSU9O IEJpcw== cGVjdHM= YWRlbmE= IGNvbnRlbXBsYXRpbmc= YXJvbw== Y2VudGVyZWQ= IFBlYWtz VXNlZA== IG1vZGVt IGdlbmRlcnM= IDgwMDA= Mzcx IG1hdGVybml0eQ== IFJheg== IHJvY2tpbmc= IGhhbmRndW5z IERBQ0E= QXV0b20= IE5pbGU= IHR1bXVsdA== IEJlbmVmaXQ= IEFwcHJvYWNo d29ya3Nob3A= IExlYXZpbmc= R2Vy aW5zdGVhZA== IHZpYnJhdGlvbnM= IHJlcG9zaXRvcmllcw== NDk3 IEF1bnQ= IEp1Yg== IEV4cGVkaXRpb24= QWxwaGE= IHNhbnM= IG92ZXJkdWU= IG92ZXJjcm93ZA== IGxlZ2lzbGF0dXJlcw== IHBhdGVybmFs IExlb25hcmRv IGV4cHJlc3NpdmU= IGRpc3RyYWN0aW9ucw== IHNpbGVuY2Vk dHJ1c3Q= IGJpa2luZw== IDU2MA== IHByb3ByaWV0 IGltcG9zaXRpb24= IGNvbmdsb21lcg== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IFRlYWNoaW5n IFlvc2U= aW50ZW5zaXZl VG93bg== IHRyb2xsaW5n IEdyYWM= IEFTVVM= WW8= IHNwZWNpYWxz IE5lcGg= IEdvZHppbGxh RGF0YWJhc2U= IEhlZ2Vs IDI3Mg== MTk3Ng== IEdsb3JpYQ== IGRpc2VtYg== IEludmVzdGlnYXRpb25z IEJhbmU= YWdlbWVudHM= U3RyYW5nZQ== IHRyZWFzdXJ5 IFBsYXlz IHVuZGVzaXJhYmxl IHdpZGVuaW5n IHZlcmJhbGx5 IGluZmFuY3k= IGN1dHRlcg== Zm1s IDIxMDA= cHJvdG90eXBl ZmluZQ== IGRlY3JpbWluYWw= IGR5c2Z1bmN0aW9uYWw= IGJlc2ll IEVybnN0 emVi IG5vcnRoZWFzdGVybg== IGF1c3Q= cG9yYXRl IE1hcmxpbnM= IHNlZ3JlZ2F0ZWQ= ZXdvcmxk IE1haGVy IHRyYXZlcnNl IG1vbmFzdGVyeQ== dXJneQ== R2Vhcg== c2FuZA== Q29tcGw= IEVNUA== IHBsZW50 IE1lcmNlcg== IDI3Ng== VEFCTEU= Q29uZmlndXJhdGlvbg== SHVuZHJlZHM= IHByaWM= IGNvbGxhYm9yYXRpbmc= IFBhcmFtb3VudA== IEN1bW1pbmdz ICg8 IHJlY29yZGVy IGZsYXRz IDQxNg== d2hvc2U= Rm9udFNpemU= IE9yYml0 WVI= IHdyaXN0cw== IGJha2VyeQ== KX0= IEJvdW50eQ== IExhbmNhc3Rlcg== IGVuZGluZ3M= YWNjb3JkaW5n IFNhbGFt ZWFzeQ== NzU1 IEJ1cnI= IEJhcm5ldHQ= b25vbW91cw== VW5pb24= IHByZWNlZGVuY2U= IFNjaG9sYXJzaGlw IFVY IHJvbGxvdXQ= IGJvb24= YWxt IENhbnRlcg== 5rU= IHJvdW5kaW5n IGNsYWQ= IHZhcA== IEZlYXR1cmVk aXNhdGlvbnM= IDU0MA== cG9saWNl IHVuc2V0dGxpbmc= IGRyaWZ0aW5n IEx1bWlh IE9iYW1hQ2FyZQ== IEZhdm9y SHlwZXI= IFJvdGhzY2hpbGQ= IE1pbGliYW5k YW5hbHk= IEp1bGlldA== SHU= IHJlY2FsbGluZw== YWhlYWQ= Njk2 IHVuZmF2b3JhYmxl IGRhbmNlcw== T3g= IGxlZ2FsaXR5 IDQwMw== cm9tYW5jZXI= IGlucXVpcmU= IE1vdmVz XCI+ IFZhcmlhbnQ= IE1lc3NpYWg= IExDUw== IEJhaMOh NzU2 IGV5ZWJyb3c= IMKl IE1jRg== IEZvcnR5 TWFz IHBhbmlja2Vk IHRyYW5zZm9ybWF0aW9ucw== cXE= IHJldm9sdmVz cmluZ2U= IEFp YXhl IG9ud2FyZA== IENGUg== IEJhcmU= bG9naW4= IGxpcXVpZHM= IGRlY29tcA== c2Vjb25kYXJ5 aWxhbg== IENvbnZlcnQ= YW1peWE= IHByb3NlY3V0aW5n IOKJoQ== IFlvcmtlcnM= IEJ5cm5l c2xvdw== YXdlaQ== SmVhbg== IDI2OQ== IFNreWRyYWdvbg== IMOp IE5pY2FyYWd1YQ== IEh1Y2thYmVl IEhpZ2hseQ== IGFtcGhpYg== IFBhc3Rvcg== IExldHM= IGJsdXJyZWQ= IHZpc2NlcmFs IENCTw== IGNvbGxhYm9yYXRlZA== emln TGVnYWw= IGFwYXJ0aGVpZA== IGJyaWQ= IHByZXNldA== IERFVA== IEFNQQ== 15Q= YXJjaGluZw== YXVjdXNlcw== YnVpbGRlcg== IHBvZXRpYw== IGVtdWxhdG9y IE1vbGVjdWxhcg== IGhvbm9yaW5n aXNldW0= IHRyYWN0b3I= IENsdXN0ZXI= IENhbG0= YXJlZGV2aWw= IHNpZGV3YWxrcw== IHZpb2xpbg== IGdlbmVyYWxpemVk IEFsZWM= IGVtYmFyZ28= IGZhc3RiYWxs IEhUVFBT IExhY2s= IENoaWxs cml2ZXI= Q2hlbA== IFN3YXJt IExldmluZQ== cm95aW5n TGF1bmNo IGtpY2tlcg== IGFkZGl0aXZl IERlYWxz V2lkZ2V0 Y29udGFpbmluZw== IGVzY2FsYXRl IE9QRU4= IHR3ZWFrZWQ= IHN0YXNo IHNwYXJrcw== IEVzc2V4 IEVjYw== IGNvbnZpY3Q= IGJsb2dnaW5n SUVS IEhM IG11cmRlcmVycw== NzU5 IEhpYg== IGRlcGw= IEpvcmQ= U2Fj IGRpc3NlY3Q= IEhvd2U= b3NoZXI= IGN1c3RvbWl6YWJsZQ== IEZyYW56 IGF0cm8= xIc= IDAwMDQ= IG91dHBvc3Q= Um9zcw== IGdseXBob3NhdGU= IEhhc3Rpbmdz IEJFRk9SRQ== IHNob3Zl b3BwZWQ= IFNjYWxh IGFtdWxldA== YW5pYW4= IGV4YWNlcmJhdGVk IGVhdGVy NDcx VU1F IHB1bHA= aXpvbnRhbA== IFphbQ== IEFUSQ== aW1tdW5l YWJ5dGVz IHVubmVjZXNzYXJpbHk= IENBVA== IEF4aXM= IHZpc3VhbGl6ZQ== w4k= IFJhZGljYWw= Zm0= RG9jdW1lbnRz IEZvcnJlc3Q= IGNvbnRleHR1YWw= IFN5bWJvbA== IHRlbnRhdGl2ZQ== IERPRVM= IEdvb2Rz IGludGVybWl0dGVudA== fTo= bWVkaWF0ZWQ= IHJpZGljdWxl IGF0aGVpc20= IHBhdGhvZ2Vucw== IE11bQ== IHJlaW50cm9kdQ== IDMwNw== aUhVRA== IGZsYXNobGlnaHQ= IHN3ZWFyaW5n IHBlbmd1 QnU= IHJvdGF0ZWQ= IENyYW5l ICgpKTs= IGZhc2hpb25hYmxl IGVuZG9yc2luZw== NDYz KVs= IGluZ2VzdGlvbg== IGNvb2tz IDk1MA== b3RvbXk= IEltYW0= IGth IHRlYXNlcg== IEdob3N0cw== IOOCtQ== MTk2OQ== z4M= dWJieQ== IGNvbnZlcnRlcg== emFubmU= ZW5kZQ== IFByZXBhcg== IE5pY2tlbA== IENoaW1lcmE= aGlt IFR5cmFubg== IFNhYmJhdGg= IE5pY2hvbHM= IHJhcHQ= aWhhcg== IHNoZWxsaW5n IGlsbHVtaW5hdGU= IGRlbnRpc3Q= dXRvcg== IEludGVncmF0aW9u IHdoaW1z IExpdGVyYXJ5 QmVhdXQ= IHBhcmNobWVudA== YWdhcmE= QnJhbmQ= IGRlcm9n 4oCmKQ== IE5vcnNl IHVud2l0dGluZw== IGN1Yw== IGJvcmRlcmxpbmU= IHVwc2V0dGluZw== IHJlY291cnNl IGRyYXBlZA== IFJhZGFy IGNvbGRlcg== IFBlcHNp aW1pbmFyeQ== XSxb NjU4 Vmk= IEZyZW0= IFBlcw== IHZldGVyaW5hcnk= IFRFRA== IEVwaWRlbQ== bm92YQ== a2lk IGRldm91dA== b2N0 amFk TW9o IFBBWQ== IGdlb21ldHJpYw== IDMyMw== IGNpcmN1bWZlcmVuY2U= aWNoaWNr MTk3NQ== IFl1cmk= IFNoYWxs IEhvdmVy dW5pbg== U3By IGdyYWZ0 IEhhcHBpbmVzcw== IGRpc2FkdmFudGFnZXM= YXR0YWNrcw== IGh1YnM= IFN0YXJDcmFmdA== 6ZY= IGdhbGxlcmllcw== IEtvcnJh IGdyb2Nlcmllcw== IEdvcnN1Y2g= IHJhcGlzdHM= IGZ1bmdp IFR5cGhvb24= VmVjdG9y IEVtcHJlc3M= YmF0dGxl NDY4 IHBhcmFzaXRl IEJvbWJlcg== U0c= ZXhpc3Q= IFBm IHVuc2U= IHN1cmdlb25z QmlydGg= IFVuc3VyZQ== IFByaW50ZWQ= IEJlaGF2aW9yYWw= IEFzdGVy UGFraXN0YW4= IHVuZXRoaWNhbA== IHN2 IElvVA== IGxheW91dHM= UGFpbg== IGNvbnN0YW50cw== IExX IEJha2U= IHRvd2Vscw== IGRldGVyaW9yYXRpb24= IEJvbGl2aWE= IGJsaW5kZWQ= IFdhcmRlbg== IE1pc3RyZXNz IG9uc3RhZ2U= IGNsYW5z IEJFU1Q= MTk2MA== IGFudGlxdWU= IHJoZXRvcmljYWw= IFBlcmN5 IFJ3YW5kYQ== LC4= QnJ1Y2U= IHRyYXVtYXQ= IFBhcmxpYW1lbnRhcnk= IGZvb3Rub3Rl aWRpYQ== IExlYXJuZWQ= c2Vla2luZw== Z2VuaWM= IGRpbWVuc2lvbmFs SGlkZQ== 6ICF IGludHJpZ3Vl aW5zZQ== IGxlYXNlcw== IGFwcHJlbnRpY2Vz d2FzaGluZw== IDE5MjY= VklMTEU= IHN3b29w c2Ns IGJlZHJvb21z b25pY3M= IENydW5jaA== Y29tcGF0aWJsZQ== IGluY2FwYWM= IFllbWVuaQ== YXNodHJh emhvdQ== ZGFuZ2Vy IG1hbmlmZXN0YXRpb25z IERlbW9ucw== QUFG U2VjcmV0YXJ5 QUNURUQ= TE9E IGFteQ== cmFwZXI= ZXRobmlj NDE3 IHBvc2l0aXZlcw== IDI3Mw== IFJlZnVnZWVz IHVzYg== IFZhbGQ= b2RkeQ== IE1haG1vdWQ= QXNpYQ== IHNrdWxscw== IEV4b2R1cw== IENvbXBldA== IExJQw== IE1hbnNpb24= IEFtZQ== IGNvbnNvbGlkYXRl c3Rvcm1z b250ZW50 OTk2 IGNsZW4= IG11bW15 ZmxhdA== NzU4 IFZPTA== b3Rlcmlj bmVu IE1pbnV0ZQ== U292 IGZpbmVy Umg= bHljZXI= IHJlaW5mb3JjZW1lbnRz IEpvaGFubmVz IEdhbGxhZ2hlcg== IGd5bW4= U3VkZGVubHk= IGV4dG9ydGlvbg== a3I= aWF0b3I= VGE= IGhpcHBvY2FtcHVz TlBS IENvbXB1dGluZw== IHNxdWFyZWx5 IG1vZGVsbGluZw== IEZvcnVtcw== IExpc3A= IEtyaXNobmE= IDMyNA== IHJ1c2hlcw== IGVuc3VlZA== IGNyZWVwaW5n b250ZQ== bmFp aWxhdGVy IEhvcm5ldHM= IG9ibGl2aW91cw== SU5TVA== NTU5 IGplb3BhcmR5 IGRpc3Rpbmd1aXNoaW5n anVyZWQ= IGJlZ3M= c2ltaWxhcg== cGhvdA== NTMw IFBhcmt3YXk= IHNpbmtz IEhlYXJ0aHN0b25l aWJ1cg== IEJhdG9u QXZvaWQ= IGRhbmNlcg== IG1hZ2lzdHJhdGU= YXJ5bg== IGRpc3R1cmJhbmNlcw== IFJvbWVybw== IHBhcmFwaA== IG1pc2NoaWVm 4paT IFNoYXJpYQ== IHVyaW5hcnk= cm91dGU= aXZhcw== Zml0dGVk IGVqZWN0ZWQ= IEFsYnVxdWVycXVl IDQ3MA== IGlycml0YXRlZA== IFppcA== IEJpb2w= w40= IGRlbm91bmNl IGJpbmFyaWVz IFZlcnNl IG9wcG9z IEtlbmRyaWNr IEdQTA== IHNwZXc= IEVsaWphaA== IEVhcw== IGRyaWZ0ZWQ= c29mYXI= IGFubm95YW5jZQ== IEJFVA== NDc0 IFN0cm9uZ2g= aXRhdGVz IENvZ25pdGl2ZQ== b3Bob25l IElkZW50aWZpY2F0aW9u b2NyaW5l Y29ubmVjdGlvbg== IGJveGVy IEFTRA== IEFyZWFz WWFuZw== dGNo dWxsYWg= IGRlY2VpdmU= Q29tYmF0 ZXBpc29kZQ== Y3JldGU= V2l0bmVzcw== IGNvbmRvbGVuY2Vz aHRhcg== IGhlYWxz IGJ1Y2tldHM= IExBVw== Qmx1 IHNsYWI= IE9SREVS b2Ns YXR0b24= IFN0ZXZlbnNvbg== IEdpbmdlcg== IEZyaWVuZGx5 IFZhbmRlcmJpbHQ= c3Bpcml0 aWds IFJlZ2FyZGluZw== IFBST0c= IHNlYWxpbmc= c3RhcnRpbmc= IGNhcmRpbmFs IFZlYw== IEJlaXI= IG1pbGxpc2Vjb25kcw== d2Vhaw== cGVyc2U= IHN0ZXJpbGU= IENvbnRlbXBvcmFyeQ== IFBoYW50 IENsbw== IG91dHA= IGV4aWxlZA== IDI3Nw== IHNlbGZpZQ== IG1hbmlj IG5hbm8= dGVybXM= QWxleGFuZGVy IHJlc29sdmVz IG1pbGxlbm5pYQ== IGV4cGxvZGVz IGNvbnN0ZWxsYXRpb24= IGFkdWx0ZXJ5 bW90aW9u RE9D IGJyb2FkY2FzdGVycw== IGtpbmRlcmdhcnRlbg== IE1heXdlYXRoZXI= IEVjbw== aWNobw== IDI4Nw== bGF1bg== IG11dGU= IGRpc2NyZWV0 IHByZXNjaG9vbA== IHByZWVtcHQ= RGVsZXRl IEZyZWVk UGk= SEs= IGJsb2NrZXI= IEN1bWJlcg== IHdyb3VnaHQ= ZGF0aW5n IGluc3VyZXI= IHF1b3Rhcw== IHByZWFjaGVk IGV2aWN0aW9u IFJlZ2luYQ== IFBlbnM= IHNldmVudGVlbg== IE5hc3M= RGljaw== IGZvbGRz IGRvdHRlZA== IEFhZA== VW5pdmVyc2Fs IHBpeno= IEd1cnU= IHNvaWxz IG5vdmljZQ== IE5lYW5kZXI= IHN0b29s IGRldG9uYXRlZA== IFBpa2FjaHU= IE1hc3NpdmU= SVZFUg== IEFiZGVs IHN1YmR1ZWQ= IHRhbGxlc3Q= IHByZWNhcmlvdXM= IGF5 cmlmaWNhdGlvbg== IE9iag== Y2FsZQ== IHVucXVlc3Rpb24= Y3Vsb3Npcw== YWRhcw== aWdyYXRlZA== RGF5cw== IHF1ZWVucw== IEdhemV0dGU= IENvbG91cg== IEJvd21hbg== IEpK w692ZQ== IGRvbWluYXRlcw== U3R1ZGVudA== IG11 IGJhY2tsb2c= IEVsZWN0cm8= VHJ1dGg= NDgz IGNvbmRlbnNlZA== cnVsZXM= IENvbnNwaXJhY3k= IGFjcm9ueW0= aGFuZGxlZA== IE1hdHRl anJp IEltcG9zc2libGU= bHVkZQ== Y3JlYXRpb24= IHdhcm1lZA== IFNsYXZl IG1pc2xlZA== IGZlcm1lbnQ= IEthaA== aW5raQ== a2VsZXRvbg== Y3ls IEthcmlu SHVudGVy UmVnaXN0ZXI= IFN1cnJleQ== IHN0YXJlcw== IFdpZHRo IE5heQ== IFNraQ== IGJsYWNrbGlzdA== dWNrZXQ= IGV4cHVsc2lvbg== aW1ldA== IHJldHdlZXQ= dmFudGFnZQ== RmVhdHVyZQ== IHRyb29wZXJz IGhvbWVycw== OTY5 IGNvbnRpbmdlbmN5 IFdUQw== IEJyZXdlcg== Zm9yZWlnbg== V2FyZQ== U29sYXI= IHVuZHVl UkVD dWxuZXJhYmxl cGF0aGlj IEJvaXNl IDMyMg== IGFyb3VzZWQ= IFlpbmc= 5LiN dWVsZXNz IHBhcw== IG1vcnA= IGZsb3JhbA== RXhwcmVzcw== dWRnaW5n a0I= IEdyYW50ZWQ= 2K8= IE1pY2hh IEdvdGhpYw== IFNQRUNJQUw= IFJpY2FyZG8= RnJhbg== IGFkbWluaXN0ZXJpbmc= NjIw cG9yYQ== IMKu IGNvbXByb21pc2Vz IGJpdHRlbg== QWNjZXB0 VGhpcnR5 0LI= IG1hdGVyaWFsbHk= IFRlcnI= aWdtYXRpYw== Y2hhaW5z IGRvdmU= c3RhZHQ= TWFydmVs RkFVTFQ= IHdpbmRzaGllbGQ= IDMzNg== YWRpZXI= IHN3YXBwaW5n IGZsYXdsZXNz IFByZWRhdG9y IE1pY2hlbGU= IHByb3B1bHNpb24= IFBzeWNoaWM= IGFzc2lnbmluZw== IGZhYnJpY2F0aW9u IGJhcmxleQ== bHVzdA== IHRvd2VyaW5n IGFsdGVyY2F0aW9u IEJlbnRsZXk= U3BoZXJl IHR1bmE= IENsYXNzZXM= RnJlZWRvbQ== dW5lcg== TGFkeQ== dm9pY2U= IGNvb2xlc3Q= b3Jy IHBhbHA= JHs= IGh5c3Rlcmlh IE1ldGF0cm9u cGFudHM= IHNwYXduaW5n RXhwZXJ0cw== IEludmVzdG9ycw== IEFuYXJjaHk= IHNocnVuaw== IFZpY3RpbQ== IDI4OQ== IGVjc3Rhc3k= IEJpbmRpbmc= NTg1 IE1lbG9keQ== NTc4 b3RhbGx5 IEV0c3k= bGlnYQ== IGFwcGxhdWRlZA== IHN3ZWF0aW5n IHJlZGlzdHJpYnV0ZWQ= IHBvcGNvcm4= IHNlbWluYWw= ZnVy IE5ldXJvc2NpZW5jZQ== UmFuZA== IE9zdA== IE1hZGRlbg== IEluY3JlYXNpbmc= IERhd2tpbnM= IFN1YndheQ== IGFyc2Vu Y29uc2Vydg== QlVS IHNwaWtlZA== IEx5ZnQ= IEltcGVyaXVt IERyb3Bib3g= IGZhdm91cmVk IGVuY29tcGFzc2Vz Z2hvc3Q= IGluc3BpcmVz IGJ1cmdlb25pbmc= IFlvc2hp IFZlcnRpY2Fs IEF1ZGl0b3I= IGludGVuZGluZw== IGZpbGlidXN0ZXI= Qmxvb20= ZmFj IENhdnM= aWduaW5n IGNvd29ya2Vycw== IEJhcmJhcmlhbg== cmVtZW1iZXI= RkxBRw== IGF1ZGl0b3J5 YXNvbnJ5 Q29sbGVnZQ== IG11dGVk Z2Vtb255 b2Jpbg== IFBzeWNobw== OTY4 IGxhdmlzaA== IGhpZXJhcmNoaWNhbA== IERyb25l b3Vr IGNyaXBwbGVk IE1heGlt U2xvdA== IHF1aXo= IFZpZA== aWZsaW5n IGFyY2hhZW9sb2dpc3Rz IGFiYW5kb25tZW50 ZGlhbA== bGVvbg== IEZhcw== VGVk IHJhc3BiZXJyeQ== IG1hbmV1dmVycw== IGJlaGF2aW91cnM= IGluc3VyZQ== IHJlbW9k U3dpdGNo aG9l IHNwYWNlZA== IGFmZm9yZGFiaWxpdHk= IEZlcm4= bm90YXRpb24= IEJhbGFuY2Vk IG9jY3VwaWVz ZW52aXJvbm1lbnQ= IG5lY2tsYWNl IHNlZGFu RlU= IEJyYXZv IGFidXNlcnM= IEFuaXRh bWV0YWRhdGE= IEdpdGh1Yg== YWl0bw== IEZhc3Rlcg== IFdhc3Nlcm1hbg== IEZsZXNo IHRob3Ju cmFyaWx5 IE1lcnJ5 d2luZQ== IHBvcHVsYWNl IExhbm4= IHJlcGFpcmluZw== IHBzeWNoZQ== IG1vZHVsYXRpb24= YXdhcnU= 4oCL4oCL YXJpag== IGRlY29yYXRpb25z IGFwb2xvZ2lzZQ== IEdhcmc= YXBwbHk= IGdpdmVhd2F5 IEZsYW4= IFd5YXR0 VWJlcg== IGF1dGhvcmlzZWQ= IE1vcmFs SEFIQUhBSEE= YWN0aXZhdGU= IHRvcnBlZG8= IEZBUg== IGFtYXNzZWQ= IEFyYW0= YXJraW4= IFZpY3RpbXM= c3RhYg== IG9t IEVDTw== IG9waW9pZHM= IHB1cnBvc2VseQ== IFZlc3Q= IGVyZw== YXRhbg== IFN1cmdlcnk= IGNvcnJlY3Rpbmc= IE9ydGl6 IEJlZXQ= IHJldm9rZQ== IGZyZWV3YXk= IEhpZ2dpbnM= RmFpbA== IEZhcm1z IEFUUA== aG91bmQ= IHBva2luZw== IENvbW11bmlzdHM= bW9uc3Rlcg== aW1lbnRhcnk= IHVubG9ja2luZw== IHVuZml0 d2VlZA== ZW5hcmlv YXRpY2Fs IEVubGlnaHRlbm1lbnQ= IE5H IENvbXBlbnNhdGlvbg== ZGVlbg== IFdpZG93 IENpbmR5 IEFmdGVyd2FyZHM= IDYwMDA= aWtoYWls YWdpY2FsbHk= IHJhdGlmaWVk IGNhc3VhbHR5 SE9NRQ== cHNleQ== ZmVl IHNwYXJrbGluZw== IGTDqQ== IGNvbmNlcnRlZA== Q2F0YWw= IGNvbXBseWluZw== IEFyZXM= IERlbnQ= U2h1dA== IHNraW0= YWRtaW5pc3Q= IGhvc3RpbGl0aWVz IEdpbnM= IDYwOA== IG11ZGR5 IE1jSW50 IERlY2F5 NTI1 IGNvbnNwaWN1b3Vz IEV4cG9zdXJl IHJlc2NpbmQ= IHdlYXJhYmxl IDMyOA== b3VybWV0 YWhz IFJvYm90cw== IGVjbGlwcw== aW5zdGFuY2U= IFJFUE9SVA== IEFwcGw= MDMw IFNraWVz MDEwMA== IGZhbGxhY3k= U29ja2V0 IFJlY2VpdmVy IHNvbHZlcw== IEJ1dHRlcmZseQ== IFNob3BwaW5n IEZJUkU= NjU0 TWVkaWM= IHNpbmdlcnM= IE5lZWRsZXNz JycnJw== aXNoZXJz IERpdmU= NTg4 IHNlbGVjdGl2ZWx5 IGNsdW1zeQ== ODg5 IHB1cmNoYXNlcg== ZWFybmVk YXJkeQ== IGJlbmVmaXRpbmc= ZW5nbGlzaA== IHlpZWxkaW5n IFBvdXI= IHNwaW5hY2g= IGRlbHZl IENyb20= NjEw IGV4cG9ydGluZw== IE1BS0U= IDI2Mw== IGdyb3A= IGVudm95 IElucXVpcnk= IEx1aWdp ZHJ5 IFR1cmluZw== VGh1bWJuYWlsSW1hZ2U= IFZhcmlldHk= IGZhY2V0 IGZsdWZmeQ== IGV4Y2VycHRz IHNob3J0aA== IE9sc2Vu Q0xVRA== IHJlbGlhbnQ= IFVOQw== VG91cg== IGJhdGhpbmc= Q29tcGFueQ== IGdsb2JhbGl6YXRpb24= UHJlZA== IE1hbGZveQ== IGhvYw== amFt Y3JhZnRlZA== IEJvbmRz IEtpc3Npbmdlcg== RW5nbGFuZA== IG9yZGVybHk= Y2F0ZW50cnk= IDI2MQ== IGV4Y2hhbmdpbmc= IEludGVudA== IEFtZW5kbWVudHM= RE9N IHN0b3V0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA= IEFpcmJ1cw== IDI3OA== aHlkZQ== UG9sbA== SXRlbVRodW1ibmFpbEltYWdl IGxvb3Bob2xlcw== IFBpbGxhcg== IGV4cGxvcg== U3RyZXRjaA== QXBhcnQ= IHVubWFycmllZA== TGltaXQ= IFRyYW5zZm9ybWVycw== IGludGVsbGVjdHVhbGx5 dW5jdHVyZQ== MTgwMA== IGRhcm4= QnJhemls IGxlZnRvdmVy YmVydXM= ZnJlZA== TWluZWNyYWZ0 MzI2 IEZvcm1z IHByb29mcw== IERlc2lnbmVk IGluZGV4ZXM= IFN1cHBvc2U= RU1T IExvdmluZw== IEJvbm5pZQ== aW1hdGluZw== T1RVUw== IGNvbmR1Y3Rvcg== IGJlaGF2ZWQ= IEZyZW4= IHN5bmVyZw== IG1pbGxlbm5pdW0= IGNhdGVyaW5n IExhdWRlcg== V3I= IFlpYW5ub3BvdWxvcw== IEFURg== IGVuc2xhdmVk IGF3YWtlbmVk RFZE IEVESVRJT04= IENvbmNlcnQ= IENoYWxsZW5nZXI= IEhha3U= dW1lcmlj IGRlcHJlY2F0ZWQ= IFNIQVI= NDEy IGR5c3RvcA== IHRyZW1ibGluZw== IGRyZWFkZWQ= IFNwYWM= cGFkZGluZw== UmVwbA== IEdhcnJpc29u TWluaQ== IHVucGFyYWxsZWxlZA== YW1hcg== VVJSRU5U d3JlY2s= Y2VydGFpbg== dGFs IENMUw== YXBwaW5ncw== IHNlbnNlZA== IGZlbmNpbmc= IFBhc28= IERlc2s= IHNjb2Zm IGNvbnRlbXBsYXRl IExpZ2E= bGlxdWlk NzU3 IGFwcHJlbnRpY2U= IFVDSElK NTcw IFRob3VzYW5k IElsbHVt IGNoYW1waW9uZWQ= 44KM IGVsZWN0b3Jz IDM5OA== IEhhbmNvY2s= cm91bmRlZA== IEpPSE4= IHVuc2F0aXNm IHF1YWxpZmllcg== IEdhZGdldA== RU5F IGRlYWRsaWVzdA== IFBsYW50cw== IGlvbnM= IGFjY2VudHM= IHR3ZWFraW5n IHNoYXZlZA== RlJFRQ== IENoYXNlcg== QWdhaW5zdA== OTYw IG1ldGhhbXBoZXRhbWluZQ== IG5vcm1hbGl6ZWQ= ICRc IFByZWNpc2lvbg== IEd1YW0= IGNob2tlZA== IFhJSQ== IENhc3Rpbmc= VG9ycmVudA== IHNjYWxw IEphZ3Vhcg== d2l0 IHNlbWlj aXhpZQ== IEdvdWxk IGNvbmZpbmVz TnVzcmE= IExvbg== IEp1Z2c= eWNsZQ== IENvZGVj RWd5cHQ= IHJlc3RyYWlu IEFsaWVucw== IGNob2tpbmc= IER1bms= IEJlbGxh YWJj IHNsYW5n IG5ldXJvdHJhbnM= c2F2 IGVtcG93ZXJtZW50 4oaS IGNsaW1iZXJz IE1pbQ== IEZyYQ== cm9zc2U= Q2FwaXRhbA== IEN0aHVsaHU= SW50ZXJmYWNl IHByb2ZpY2llbnQ= IElOVE8= IDMxOA== cm9udGFs NTgw IERlc3BhaXI= S2Vubg== IHNjcmltbWFnZQ== IENvYXQ= YXNpb25z IHdhbGxwYXBlcg== IEpvbA== IHJlc3VyZ2VuY2U= IGFudGl2 IEJhbGxz sr4= IGJ1ZmZlcnM= IHN1YnN5c3RlbQ== IFN0ZWxsYXI= IEx1bmc= QUlEUw== IGVyYWRpY2F0ZQ== IGJsYXRhbnRseQ== IGJlaGF2ZXM= IE51bg== IGFudGljcw== ZXhwb3J0 REVW d2I= IHBocA== IEludGVncml0eQ== IGV4cGxvcmVy IHJldm9sdmluZw== YXV0aG9yZWQ= Z2Fucw== IGJhc2s= IGFzeW5jaHJvbm91cw== 5Y0= VEhJTkc= Njk4 R2VuZQ== IFJhY2Vy IE5pY28= aXNzdWVk IHNlcm1vbg== cG9zc2libHk= IHNpemVvZg== IGVudHJlcHJlbmV1cmlhbA== b3hpbg== IE1pbmVydmE= IHBsYXRvb24= bm9z cmlrcw== QVVU IEF2YWxhbmNoZQ== IERlc2M= keWjqw== IFBvYw== IGNvbmZlcnJlZA== zrs= IHBhdGNoZWQ= RkJJ NjYy IGZyYWN0dXJlcw== IGRldGVjdHM= IGRlZGljYXRl IGNvbnN0aXR1ZW50 IGNvc21vcw== V1Q= IHN3ZWF0cw== IHNwcnVuZw== YmFyYQ== c29saWQ= IHVuc3Vz IGJ1bGt5 IFBoaWxpcHBl IEZlbnJpcg== IHRoZXJhcGlzdHM= b3JlYWw= Xl5eXg== IHRvdGFsZWQ= IGJvb3pl IFJQQw== UHJvc2VjdXRvcnM= IGRpc2VuZw== IFNoYXJlZA== IG1vdG9yY3ljbGVz IGludmVudGlvbnM= IGxldHR1Y2U= IE1lcmdl IEpD IHNwaXJpdHVhbGl0eQ== IFdBUk5JTkc= IHVubHVja3k= IFRlc3M= IHRvbmd1ZXM= IERVSQ== VHVtYmxy IGxlYW5z IGludmFkZXJz IGNhbm9weQ== IEh1cnJpY2FuZXM= IEJyZXQ= IEFQUExJQw== aWRpbmU= aWNrbGU= UmVnYXJkaW5n IHZlZ2dpZXM= IGVqYWM= anV2ZW4= RmlzaA== REVN IERpbm8= VGhyb3c= IENoZWNraW5n YmVhcmQ= KCY= IGphaWxz IGhy dHJhbnNmZXI= aXZhdGluZw== IGZsZWV0cw== IEltYWc= IE1jRG9ubmVsbA== IHNuaXBwZXQ= SXNh IENoYXR0 IFN0YWlu IFNldEZvbnRTaXpl IE95 IE1hdGhlbWF0aWNz NDk0 IGVsZWN0cm9seQ== IEdvdHQ= IEJyYXM= Qk9PSw== IEZpbmdlcg== ZHVtcA== IG11dGFudHM= IHJlbnRhbHM= IGludGVydHc= IGNyZWVr YWlsYQ== QnJvdGhlcg== IERpc2NvcmQ= cGVl cmF3bGVy IGNhcnA= IDI3OQ== 44K344Oj cmVsYXRpb25z IGNvbnRyYXN0cw== Q29sdW1u IHJlY29ubmFpc3NhbmNl IHVua25vdw== IGxvb3Rpbmc= IHJlZ3VsYXRlcw== IG9wdGltdW0= IENoZXJva2Vl IEFyeQ== TGF0ZXN0 IHJvYWRzaWRl IGRhbmNlZA== IFVuaWNvcm4= QWNrbm93bGVk IHVuY29udHJvbGw= IE1VUw== YXRpbw== Y2hhbmNl aGF2ZW4= VkFMVUU= IGZhdm91cml0ZXM= IGNlcmVtb25pYWw= YmluYXJ5 cGVlZA== d29vZHM= RU1Q IHZhc2N1bGFy IGNvbnRlbXBsYXRlZA== IGJhcnJlbg== IExJU1Q= WWVsbG93 b3Nwb25zb3Jz IHdoaXNreQ== IE1hbW0= IERlVm9z bWluaW11bQ== SHVuZw== NDQy UGlj IFNuYXBkcmFnb24= Nzc2 IGNhcnZpbmc= IHVuZGVjaWRlZA== IGFkdmFudGFnZW91cw== IHBhbG1z IEFR IHN0YXJjaA== TG9vcA== IHBhZGRsZQ== IGZsYW1pbmc= IEhvcml6b25z QW5pbWF0aW9u Ym9vc3Q= IHByb2JhYmlsaXRpZXM= IE1pc2g= IGV4b2R1cw== IEVkaXRvcmlhbA== IGZ1bmd1cw== IGRpc3NlbnRpbmc= IERlbGljaW91cw== cm9ncmFt IER5bg== ZGlzaw== dG9t IGZhYnJpY3M= IENvdmU= IEJhbnM= IHNvZnRlbg== IENPTlM= IGluZWxpZ2libGU= IGVzdGltYXRpbmc= IExleGluZ3Rvbg== cHJhY3RpY2U= b2Zp IHNoZWRkaW5n IE5vcGU= IGJyZWF0aGVk IENvcmludGhpYW5z eW5l ZWtp QnVsbA== IGF0dGFjaGluZw== cmVlbnNob3Rz IGFuYWx5c2U= IEthcHBh IHVuc3VzdGFpbmFibGU= IGludGVycG9s YW5reQ== aGVtZXI= IHByb3RhZ29uaXN0cw== IGZvcm1hdHRlZA== IEJyeWNl IEFjaGlsbGVz IEFiZWRpbg== c2hvY2s= IGJ1bQ== Ym9z cXVh IFdhcm4= cXQ= IERpYWJldGVz ODY0 IEludmlzaWJsZQ== IHZhbmlzaA== IHRyYW5zbWl0dGluZw== IG11cmt5 IEZlaQ== IGF3YWl0ZWQ= IEp1cmFzc2lj dW1taWVz IG1lbmFjaW5n Z2FsbA== Q2F0aA== QnVpbHQ= aWxkbw== IFZvdGVz IG9udA== IG11bml0aW9ucw== IEZyZWVt w61u IGRlY2VuY3k= bG9wcA== aWV2ZWQ= IEdvcmQ= IHVudGhpbmthYmxl IE5ld3N3ZWVr IDMyMQ== SGVhdA== IHByZXNlbnRlcg== amlhbmc= IHBsYW5r IEF2YWxvbg== IGJlbno= IFJvdXQ= IHNsYW1taW5n IERhaQ== b3V0ZXI= IENvb2tpZQ== IEFsaWNpYQ== Z2V5 IHZhbml0eQ== IG93bA== 4bU= dGVzdGVk IEF3YWtlbnM= IGNhbnY= IGJsaW5kbHk= IFJpZGxleQ== IEVtYWlscw== UmVxdWlyZXM= IFNlcmJpYW4= b2dyYXBoZWQ= aWZyYW1l ZXRlcmlh IGFsdGVybmF0aW5n cXVpZXQ= IHNvY2lvbG9neQ== IFVubG9jaw== IENvbW11bmlzbQ== IG9wcw== IGF0dHJpYnV0aW9u IGFiZHVjdGlvbg== IEFicmFt IHNpZGVsaW5lZA== IEJPT0s= IHJlZmluaW5n IEZlZWxpbmc= IE9zbG8= IFBydWl0dA== cmFjaw== YW5naWJsZQ== IGNhdXRpb3VzbHk= IE1BUks= ZWVkcw== TW91c2U= IFN0ZXBo IFBhaXI= U2Fi OTk3 IEJhYWw= QmVj IGNvbW1h IFBhbGw= IEdhZWw= IG1pc3VuZGVyc3RhbmQ= IFBlc2g= T3JkZXJhYmxl IGRpc21hbA== IFNoaW55 JSI= IHJlYWxpc3RpY2FsbHk= IHBhdGlv IEd3 IFZpcnR1ZQ== IGV4aGF1c3Rpbmc= d2hhdGV2ZXI= b3BoeXM= eWlw NDE4 QWRqdXN0 IFdhaXRpbmc= ZXNzb24= IE1hemRh IERvemVucw== IHN0cmVhbWxpbmVk IGluY29tcGV0ZW5jZQ== IE1ldGg= IGV0aG9z T05FUw== IGluY2VudGl2 IGdyaXR0eQ== IEJ1dGNoZXI= SGVhZGVy IGV4cG9uZW50aWFs w58= IGNvcnJlbGF0ZQ== IGNvbnNlbnN1YWw= c291bmRpbmc= UmluZw== T3JpZ2lu IGNvbmNsdXNpdmU= ZmVldA== YWNseQ== IEZlcm5hbmRleg== QnV5YWJsZQ== IGR1Y2tz YXVudGxldHM= IGVsb25n IDI4Ng== IHNpbXVs R2Fz IEtpcnN0 IHByb3Ry IFJvYm8= IEFvRQ== b3BvbA== IHBzeWNob2xvZ2ljYWxseQ== c3Bpbg== aWxhdGVyYWxseQ== IENvbnJhZA== V2F2ZQ== NDQx IEFkdmVydGlzZW1lbnQ= IEhhcm1vbg== IE9yaWVudGFs aXNTcGVjaWFs IHByZXN1bXB0aXZl IHdpbA== IEtpZXI= bmVh IHBwbQ== IGhhcmJvdXI= IFdpcmVk Y29tcGFueQ== IGNvcm9uZXI= YXR1cmRheXM= IFByb3Vk IE5FWFQ= IEZsYWtl dmFsdWVk Y2VpdmVy IGZyYXVnaHQ= IGNhc2luZw== IHJ1bmF3YXk= IGdpbg== IExhdXJlbnQ= IEhhcmxlbQ== IEN1cmlvc2l0eQ== cXVpc2hlZA== IG5ldXJvc2NpZW5jZQ== IEh1bHU= IGJvcnJvd2Vy IHBldGl0aW9uZXI= IENvb2xkb3du V0FSRA== IGludm9raW5n Y29uZmlkZW5jZQ== Rm9yd2FyZA== IHN0cw== cG9wdWxhdGlvbg== RGVsaXZlcnlEYXRl RmlsbQ== IENvdg== cXVpY2tTaGlw cXVpY2tTaGlwQXZhaWxhYmxl cHJpbWFyeQ== aXNTcGVjaWFsT3JkZXJhYmxl aW52ZW50b3J5UXVhbnRpdHk= Y2hhbm5lbEF2YWlsYWJpbGl0eQ== Qk9Y IE11bHRpcGxheWVy IEplbm5lcg== Nzc4 IE1k IH4vLg== TU4= IGNoaWxkaXNo IGFudGlveGlkYW50 IENocm9tZWJvb2s= IDI3NA== IHNjcmVlbnBsYXk= IGFkdmVudHVyb3Vz IFJlbGF0aW9uc2hpcA== cmVzcG9uc2l2ZQ== bWluZ3Rvbg== IGNvcm5lcnN0b25l IEZleQ== RklS IHJvb2tpZXM= IEZlYXR1cmluZw== IG9yaWdpbmF0ZQ== IGVsZWN0cm9kZXM= YW50ZXM= IHNjcmlwdHVyZXM= IGdsdWVk IGRpc2NvbnRlbnQ= IGFmZmxpY3RlZA== bGF5b3V0 QnJhdmU= IG1vc2E= IFF1YW50aXR5 IEhpaw== d2lubmVy SG91cnM= IGVudGFpbA== IENlbGxz b2xvZ3Vl IHZpbA== IHByZWFjaGVy IGRlY29yYXRpdmU= ZGlmZmVyZW50 IHByZWp1ZGljZXM= IFNtb2tpbmc= IE5vdHRpbmdoYW0= c29UeXBl IHJoeXRobXM= IEFscGg= Ymxhc3Q= U3RlZWw= IERhbmllbGxl IHN0cmlmZQ== IHJlbWF0Y2g= c29EZWxpdmVyeURhdGU= IEZvcms= dHJpcA== b2x1bHU= aGVzZXM= Q0c= IFBPTElUSUNP b3N0YQ== IERyaWZ0 6b6N5aU= 6b6N5aWR5aOr IHZldHRpbmc= IEppbnBpbmc= IFJlY2Vzc2lvbg== TWlub3I= IEZyYXVk ZW5mcmFuY2g= IGNvbnZlbmVk IE5BQUNQ IE1pbGxpb25z IEZhcm1pbmc= IFdvbw== IEZsYXJl cml0bw== aW1taWdyYW50 IHZhY2FuY3k= IEhFQUQ= IFZhag== ZWdhbA== IFZpZ2ls U3R1ZHk= IHJ1aW5pbmc= IHJhY2tz IGhlYXRlcg== IFJhbmRvbHBo IEJydXNo IFRpcg== 2Kg= IGNvdg== JV0= IHJlY291bnRz IE9QVA== IE1lbHQ= IHRydWNl IGNhc2lub3M= IGNydXNhZGU= IGNhcm5hZ2U= IHN0cmlwZQ== IEt5bA== VGV4dHVyZXM= IDY5OA== IHByb2NsYW1hdGlvbg== IGdvb2RpZXM= IC4uLi4uLi4uLi4= cHJvY2xhaW1lZA== UG9saXQ= IHRvcGljYWw= IHNwZWNpYWxpemU= IEFtaW4= Z20= IGFuY2hvcmVk IGJlYXJpbmdz c2FtcGxl IEhpZ2hsYW5k IEF1dGlzbQ== IG1lcmNlbmFyeQ== IGludGVydmlld2Vy TEVS IFNvbWVycw== IGVtYnJ5bw== IEFzc3k= IDI4MQ== IEVkaXRpbmc= IENob3Nlbg== NjYw IHBjaQ== IFRodW5kZXJib2x0 QklMTA== IGNodWNrbGVk anJpd2Fs aG9m IGVhcnRobHk= KCl7 aW5kZXBlbmRlbmNl IGRpc3BlcnM= IFZlbmRvcg== IEdhcmV0aA== IHBhbHM= UGVubg== IFN1Ym1pdA== aWN1bQ== VGh1 IGNsYW5kZXN0aW5l IGNhbm5pYmFs IENsZXJr RVN0cmVhbQ== Z2FsaXRhcmlhbg== 4pml Z2V3 IGhvcnJlbmQ= IExvdg== IFJlYWN0aW9u b2NyaW4= Q2xhc3NpYw== IGVjaG9pbmc= IGRpc2Nsb3Npbmc= IEluc2lnaHQ= b2d1bg== IEluY2Fybg== dXBsb2Fkcw== cHBlcmM= Z3V5ZW4= IDE5MDE= IEJhcnM= Njg3 IGJyaWJlcw== IEZyZXNubw== dXJhdA== IFJlZXNl IGludHJ1c2l2ZQ== IGdyaXBwaW5n IEJsdWVwcmludA== IFJhc20= dW5pYQ== bWFuYWdlZA== IEhlYmRv IDM0NQ== IGRlY29kaW5n IHBvZXRz IGphd3M= IEZJR0hU YW1lbGVzcw== IE1lYWRvd3M= IEhhcmJhdWdo SW50ZXJ2aWV3 IEhvc3A= IEJSQQ== IGRlbGV0aW9u bW9i V2Fsa2Vy IE1vb25saWdodA== IEplZA== IFNvcGhpYQ== IHVzdXI= IGZvcnR1bmF0ZWx5 IFB1dHRpbmc= IEZvbGQ= IHNhbml0YXRpb24= IHBhcnRpc2Fucw== SVNPTg== Qm93 IENPTkM= IFJlZHVjZWQ= IFN1dHRvbg== IHRvdWNoc2NyZWVu IGVtYnJ5b3M= 4oCi4oCi4oCi4oCi IEtydWc= Y29tYmF0 IFBldHJvbGV1bQ== IGFtZA== IENvc21vcw== IHByZXNjcmliaW5n IGNvbmZvcm1pdHk= b3Vyc2Vz IHBsZW50aWZ1bA== IGRpc2lsbHVzaW9u IEVjb2xvZ3k= aXR0YWw= IGZhbmM= IGFzc2Fzc2luYXRlZA== cmVnbmFuY3k= IHBlcmVubmlhbA== IEJ1bGxldHM= IHN0YWxl IGNhY2hlZA== IEp1ZGl0aA== IERpc2Vhc2Vz QWxsZW4= IGxhcw== IHNoYXJkcw== IFN1YXJleg== IEZyaWVuZHNoaXA= aW50ZXJmYWNl IFN1cHBvcnRlcnM= YWRkb25z NDYy IEltcmFu IFdpbQ== IG5ld2ZvdW5k IE1i QW5pbWFs IGRhcmxpbmc= YW5kZQ== IHJoeQ== IFR3aXN0ZWQ= cG9zYWw= eW5za2k= VmFyaW91cw== 15w= IEtpdw== dXlvbWk= IHdlbGxiZWluZw== IExhdQ== YW5vcw== IHVubWlzdA== IG1hY09T IHJlc3Ryb29t IE9saXY= IEFpcndheXM= IHRpbWV0YWJsZQ== OTgw IHJhZGlvcw== dm95 aWFzY28= IGNsb3VkeQ== IERyYXdpbmc= QW55dGhpbmc= U3lyaWE= IEhlcnQ= c3Rha2luZw== IHVuY2hlY2tlZA== IGJyYXplbg== IE5SUw== Njk3 b25vbWlj ZXN0YWJsaXNo IGxlbmc= IGRpYWdvbmFs IEZpb3I= TGFpcg== IFN0YXJk IGRlZmljaWVudA== am9pbmluZw== YmVhbQ== IG9tbmlw IGJsZW5kZXI= IHN1bnJpc2U= TW9vcmU= IEZhdWx0 IENvc3R1bWU= IE11Yg== RmxhZ3M= YW5zZQ== IHBheW91dA== IEdvdmVybm9ycw== IERpbGxvbg== IEJhbmFuYQ== TmFy IHRyYWlsZWQ= IGltcGVyaWFsaXN0 dW1hbm4= YXRzdWtp NDM1 IFJvYWRz IHNsdXI= IElkZWFsbHk= IHRyZW5jaGVz Q3RybA== IG1pcnJvcmVk IFplbA== IENyZXN0 Q29tcGF0 IFJvbGxz c2NyaWI= IFRyYWlscw== b21ldGVycw== d2ludGVy IGltbW9ydGFsaXR5 aWxhdGVk IGNvbnRyYWRpY3Rz dW5pdmVyc2Fs aWxsaW9ucw== IE1hbWE= b3B0aW0= QVRVUkU= IGdlbw== ZXR0ZXI= IENhcmxv NDI0 IGNhbm9uaWNhbA== IFN0cm9uZ2hvbGQ= bmVhcg== IHBlcmZ1bWU= IG9yY2hlc3RyYQ== b2RpYWM= IHVwaGU= IHJlaWduaW5n dmVyc2l2ZQ== IGNhdWN1c2Vz IERFTQ== IGluc3VsdGVk IC0tLS0tLQ== IENydXNo IHJvb3Rpbmc= IFdyYWl0aA== IHdob3Jl IHRvZnU= Q21k IEJyZWU= ICRf IHJpdmU= IEFkdmVydGlzaW5n IHdhdHQ= IEhP IHBlcnN1YXNpdmU= IFBhcmFtZXRlcnM= IG9ic2VydmF0aW9uYWw= IE5DVA== IE1vag== IFNhbG9u IHRydW5j IGV4cXVpc2l0ZQ== IE1hcmE= IHBvb3A= IEFOTg== RXhj IFdvbmRlcmZ1bA== IFRhY28= IGhvbWVvd25lcg== IFNtaXRoc29uaWFu b3Jwb3JhdGVk bW1tbQ== IGxvYWY= IFlhbWF0bw== IEluZG8= IGNsaW5naW5n w6Fz IGltbXV0YWJsZQ== aHVi T3Jhbmdl IGZpbmdlcnRpcHM= IFdvb2Rlbg== IEtpZGQ= IEpQTQ== IERhbW4= Q293 Y29kZXM= NDgy IGluaXRpYXRpbmc= IEVsaw== IEN1dHRpbmc= IGFic2VudGVl IFZhbmNl IExpbGl0aA== R1VJ IG9ic2N1cmVk IGR3YXJ2ZXM= IENob3A= IEJva28= VmFsdWVz IG11bHRpbWVkaWE= IGJyZXdlZA== UmVndWxhcg== Q1JJUFRJT04= IE1vcnRhbA== IGFwZXg= IHRyYXZlbGVy IGJvaWxz IHNwcmF5aW5n UmVwcmVzZW50 IFN0YXJzaGlw NDI4 IGRpc2FwcHJvdmFs IHNoYWRvd3k= IGxhbWVudGVk IFJlcGxhY2U= IEZyYW7Dpw== Njc3 ZG9y IHVuc3RvcHBhYmxl IGNvaG9ydHM= Z3lu IENsYXNzaWNz IEFtcGg= IHNsdWdnaXNo IEFkZGljdGlvbg== IFBhZHJlcw== IGluc2NyaXB0aW9u IGluaHVtYW4= bWludXM= IEplcmVtaWFo YXRhcnM= VGVycm9y IFRvcw== IFNoYXJtYQ== YXN0YQ== Y2F0Y2g= IHBsdW1iaW5n IFRpbWJlcnM= U2hhcg== SGFs IE9zYw== IGNvdXBsaW5n aHVtYW5z IHNwb25nZQ== IGlkb2xz IFNwYQ== IEFkdm9jYXRl IEJlYXRz bHVh IHRpY2tpbmc= IGxvYWRlcg== IEdyb24= ODEw IHN0aW11bGF0ZWQ= IHNpZGViYXI= IE1hbnVmYWN0dXJlcg== b3JlQW5k MTk3Mw== IHByYWlzZXM= IEZsb3Jlcw== ZGlzYWJsZQ== IEVsZWN0cmljYWw= cmFpc2U= RXRo IG1pZ3JhdGVk IGxlY3R1cmVy S2lkcw== IENhdmVybg== IGtldHRsZQ== IGdseWM= IE1hbmRlbGE= IEZ1bGx5 5aer RklORVNU IHNxdWVlemluZw== IFJ5ZGVy YW1wb28= b3JlQW5kT25saW5l SW5zdG9yZUFuZE9ubGluZQ== QnV5YWJsZUluc3RvcmVBbmRPbmxpbmU= IGNvbW1lbW9yYXRl IFJhbXBhZ2U= QXVzdGlu IFNocm91ZA== IFJ1aW5z OTE1 IEtI IHdhdGVyZnJvbnQ= IEVTQw== YmFieQ== IENvdXQ= IEVtYmxlbQ== IGVxdWl2YWxlbnRz NDky VW5pcXVl IE5pZXR6c2NoZQ== YnJvd3Nlcg== IGltaXRhdGlvbg== IFdlcmV3b2xm IEtpcmlu YWNhcw== Jywi IMO+ UmV2aWV3ZWQ= IGN1bnQ= IHZvaWM= IExlbm92bw== IGJvbmRlZA== NDgx IGluaGliaXRvcnM= IGVuZGVhdm9ycw== IEhhdmFuYQ== IFN0b3V0 IEpvbGx5 QWN0b3I= Ki8o IG9jY3VycmVuY2Vz IFRlbnM= SW5jcmVhc2Vk IEFDVElPTg== IOOAjA== IFJhbmtpbmdz IEJyZWF0 IDMwOQ== RG91 IGltcGFjdGluZw== IER1Y2hlc3M= cHJlZml4 UUI= IHN1bW1vbmluZw== IGJlc3Rvd2Vk IEtlcGxlcg== IFBPV0VS Y3ViZQ== IEtpdHM= IEdyaXA= IG9waXVt IHJlcHV0YWJsZQ== dG9j aWNoYWVs IFJpcHBsZQ== IGNhZsOp IFpvb20= IEJ1cm1h IHdhaXZl IHN0YWxscw== IGRlbWVhbm9y aW5jZXJpdHk= IGZsdW9yaWRl IFNIT1VMRA== UGFyaXM= IGxvbmdpbmc= IHBsYXQ= IGdyb3NzbHk= IGJ1bGxz IHNob3djYXNpbmc= ZXhwZWN0ZWQ= IEdhZGRhZmk= ZW5naW5lZXJpbmc= UmVwZWF0 IEt1dA== IGNvbmNlaXZhYmxl IHRyaW1tZWQ= b3Njb3Bl IENhbmRpZGF0ZQ== IFRlYXJz cm9sb2c= TGV3aXM= U1VQ IHJvYWRtYXA= IHNhbGl2YQ== IHRydW1wZXQ= SmltbXk= IG1pcmFjdWxvdXM= IGNvbG9uaXphdGlvbg== IGFtcHV0 IEdOT01F YXRlY2g= RGlmZmVyZW50 IEVMRQ== IEdvdmVybm1lbnRz IEFoZWFk 44WL44WL d29yZHByZXNz TElC IEluY2x1ZGU= IERvcm90aHk= MDQ1 IENvbG9tYmlhbg== IGxlYXNlZA== ODg0 IGRlZ3JhZGluZw== IERhaXN5 aWF0aW9ucw== IGJhcHRpemVk IHN1cm5hbWU= Y294 IGJsaW5rZWQ= 44Oi IHBvbGxlbg== IGRlcm1hdA== IHJlZ2V4 IE5pY2hvbHNvbg== IEVhdGVy 55w= cmFkb3I= IG5hcnJvd2Vy IGh1cnJpY2FuZXM= IGhhbGx1Y2luYXRpb25z cmlkZGVu SVNTSU9O IEZpcmVmbHk= IGF0dGFpbm1lbnQ= IG5vbWluYXRl IGF2b2NhZG8= IE1lcmVkaXRo IHRz IHJldmVyZW5jZQ== IGV1cGg= IGNyYXRlcw== IFRFWFQ= IDQ0Mw== IDMxOQ== SlNPTg== aXF1ZXR0ZQ== IHNob3J0c3RvcA== aWNrZXk= IHByb3BlbGxlZA== IGFwaQ== IFRoaWV2ZXM= Nzc5 IG92ZXJzYXc= IGNvbGk= IE5pY29sYQ== IG92ZXJjbA== aWthd2E= IEN5cg== IDM4NA== Nzg5 IEFsbG93cw== MTAyNw== RGV0cm9pdA== VFJZ c2V0dXA= IFNvY2lhbGlzbQ== U292aWV0 c3VzcA== IEFQUg== IFNodXRkb3du IGFsdW1pbml1bQ== emJlaw== IExvdmVy R0dHR0dHR0c= IGRlbW9jcmFjaWVz IDE5MDg= IE1lcnJpbGw= IEZyYW5jb2lz Z2RhbGE= IHRyYWZmaWNrZXJz IFRpbA== IEdvYXQ= IHNwZWQ= IFJlc2Vydg== IHByb2Q= NTUy IGNhYw== IFVuaXY= IFNjaHdl IHN3aXJsaW5n IFdpbGRlcm5lc3M= IEVnZ3M= IHNhZGRlbmVk IGFyY2hhaWM= SHlk IGV4Y2Vzc2l2ZWx5 QlJF IGFlcm9zcGFjZQ== IFZvaWNlcw== Q3JhaWc= IGlnbml0ZWQ= SW5pdGlhbGx5 IE1jQQ== IGhhbmRzZXQ= IHJlZm9ybWluZw== IGZydXN0cmF0aW9ucw== IERlYWRwb29s IEJlbGljaGljaw== cmFjdG9y IFJhZ25hcm9r IERydXBhbA== IEFwcHJveGltYXRlbHk= MTkyMA== IEh1YmJsZQ== YXJtb3I= IFNhcmFz IEpvbmFz IG5vc3RhbGdpYw== IGZlYXNpYmlsaXR5 U2FoYXJhbg== IG9yYml0aW5n IDk3MA== UnU= IHNoaW4= IEludmVzdGlnYXRvcnM= IGluY29uc2lzdGVuY2llcw== IFBBTg== Qkc= IGdyYXppbmc= IGRldGVjdG9ycw== IFN0YXJ0dXA= IEZ1bm55 IE5hb21p Q29uc2lkZXJpbmc= IGhvZw== dXRm Y2VtaWM= IGZvcnRpZmllZA== IEZ1bmN0aW9ucw== IGNvZGVj bnV0cml0aW9u SGF0 IiE= bWljcm9zb2Z0 NTU4 IFRoaW4= IEFDRQ== QWxpYXM= IE9QUw== cGFwZXJz UEs= 44CO IGltcHJvYmFibGU= Tm9ydGhlcm4= ZXF1YWw= IGxvb2tvdXQ= IHR5cmVz IE1vZGlmaWVk IEtvcA== QWJzb2x1dGVseQ== IGJ1aWxkdXA= c2lsdmVy IGF1ZGk= IGdyb3Rlc3F1ZQ== IFNhYmVy IFByZXNieXRlcg== T05Z IGdsYWNpZXJz IFNob2Fscw== IEthc3M= IEhSQw== IE5pY29s IEx1bmNo IEZvc3M= 4paS QURSQQ== IE9uZVBsdXM= b2luZw== Z3JvdW5kcw== IGluY2lkZW50YWw= IGRhdGFzZXRz Njg5 IENsYXJrc29u IGFzc2VtYmxpbmc= IENvcnJlY3Rpb25z IGRyaW5rZXJz IHF1YWxpZmllcnM= IGxlYXNo IHVuZm91bmRlZA== IEh1bmRyZWQ= IGtpY2tvZmY= VGk= IHJlY29uY2ls IEdyYW50cw== IENvbXBsaWFuY2U= IERleHRlcml0eQ== IDE5MDY= d2Fybg== RGFsbGFz TWF4aW11bQ== bmFyZA== YXZpYQ== YmVhdXQ= ZW5zaXRpdml0eQ== dHJhY2U= IHBpb25lZXJz IEZyYWN0 44CP IHByZWNlcHQ= IGdsb3NzeQ== IElFRUU= QWNyb3Nz IDY4MA== U2xlZXA= Y2hlb24= IHNhdGlyaWNhbA== IE1pbm90YXVy IENsYXVkZQ== IHLDqQ== YXBlZ28= IGNhcnJvdA== IFNlbWlu aW5vYQ== IHpv SW5kZXBlbmRlbnQ= IGRpYWdub3Nlcw== IEN1ZQ== TUFS IHJlbmRpdGlvbg== IEtpaw== IHBhdGhvbG9neQ== IHNlbGVjdHM= TGlua2VkSW4= IGFzc2F5 IERyZXM= IHRleHR1YWw= cG9zdGVk SVRBTA== IE1hdWw= TmVhbA== IGludGVyY29ubmVjdGVk IGVycmF0aWM= IFZpcnVz IDUzMA== IGVudmlyb25tZW50YWxpc3Rz IFBoZWxwcw== IGVuZ2FnZW1lbnRz IElOU1Q= IGVjb25vbWljYWw= bm94aW91cw== IGdlYXJpbmc= aXp6eQ== IGZhdm9yYWJseQ== IE1jR2lsbA== VGVybQ== IGhhbmdlZA== IGJhbGxwYXJr IFJleWVz IGJld2FyZQ== IFBzYWw= IE1hc3NhY3Jl cWk= IGluYWNjZXNzaWJsZQ== YWNseXNt IGZyYXk= aWxsYWM= IGJpdHRlcmx5 IENlcnRpZmljYXRpb24= TWljaGlnYW4= IGlycmVzcGVjdGl2ZQ== YWxvcmU= RW1wdHk= IGVuZG9yc2VtZW50cw== IHVuZGV0 Zmc= ZXF1aXBwZWQ= IG1lcmNpbGVzcw== IEN1c3Q= IGltbWF0dXJl IHZvdWNoZXI= IEJsYWNrd2VsbA== 0Y8= aGF3aw== ZGlzY2lwbGluYXJ5 aWxlZQ== IE1ha290bw== IER1ZGU= 44OH44Kj WWVhcnM= IGludmVy IHNoYW1hbg== IFlvbmc= aXBlbA== ZWxsZW4= IENhdGh5 YnJpZHM= IHNhcmM= NjUx TmVhcg== IGdyb3VuZHdvcms= IGFtYXo= IDQxNQ== IEh1bnRpbmd0b24= aGV3cw== IEJ1bmc= IGFyYml0cmFyaWx5 IFdpdA== IEFsYmVydG8= IGRpc3F1YWxpZmllZA== YmVzdG9z NDYx IHBj IDI4NA== cm9iYXQ= Um9iaW4= IGh1Z3M= IFRyYW5zaXRpb24= IE9jY2FzaW9uYWxseQ== IDMyNg== IFdoaWxzdA== IExleQ== IHNwYWNlc2hpcA== Y3N2 IHVuc3VjY2Vzc2Z1bGx5 IEF1 bGVjaw== IFdpbmdlZA== IEdyaXp6bGllcw== Lu+/vQ== IG5lYXJlcg== IFNvcmNlcmVzcw== IEluZGlnbw== RWxzZQ== ODQw bGV0ZXM= Q29hY2g= IHVwYnJpbmdpbmc= IEtlcw== IHNlcGFyYXRpc3Q= IHJhY2lzdHM= IGNoYWluZWQ= IGFic3RpbmVuY2U= bGVhcm5pbmc= IHJlaW5zdGF0ZWQ= IHN5bW1ldHJ5 IHJlbWluZGVycw== IENoZXZ5 IG1vbnQ= IGV4ZW1wbGFyeQ== IFRPUg== Wlg= IHF1YWxpdGF0aXZl IFN0YW1w IFNhdmFubmFo IFJvc3Np IHBhZWQ= IGRpc3BlbnNhcmllcw== IFdhbGxz IENocm9uaWM= IGNvbXBsaW1lbnRhcnk= IEJlaXJ1dA== ICstLS0= aWdzbGlzdA== IGNyeXB0b2dyYXBoaWM= bWFzdGVycw== IENhcGl0YWxz IG1heGltYWw= IGVudHJvcHk= UG9pbnRz IGNvbWJhdGFudHM= bGlw IEdsb2I= IEJNQw== cGhhc2U= dGhhbms= SFRUUA== IGNvbW11dGVy IFwoXA== Li4v IFJlZ2VuZXI= IERPSQ== IEFjdGl2aXNpb24= IHNsaXQ= b3NhbA== UkVN IGNoYW50cw== WXU= S2V5cw== QnJleGl0 IEZvcmNlZA== QXJpem9uYQ== IHNxdWFkcm9u SVNP IE1hbG9uZQ== IDMzOA== IGNvbnRyYXN0aW5n IHRpZGFs IGxpYmVs IGltcGxhbnRlZA== IHVwcm9hcg== IENhdGVy IHByb3Bvc2l0aW9ucw== TWFuY2hlc3Rlcg== IEV1cm9z aXRhbWlu R2ls IEVsdmVu IFNlZWs= IEJhaQ== IHJlZGV2ZWxvcG1lbnQ= IFRvd25z IEx1Yg== ISIs YWxvbg== S3Jpc3Q= IG1lYXN1cmFibGU= IGltYWdpbmFibGU= IGFwb3N0bGVz WU4= NzYw IHN0ZXJvaWQ= IHNwZWNpZmljaXR5 IExvY2F0ZWQ= IEJlY2tlcg== IEVkdQ== IERpZXRhcnk= dXRzY2g= IE1hcmlseW4= IGJsaXN0ZXI= IE1FUA== IEtveg== IENNUw== eWFob28= IENhcm5leQ== IGJvYXN0aW5n IENhbGVi Qnl0ZQ== cmVhZHM= YWRlbg== UHJvYmxlbQ== IFdvb2R3YXJk U3dl U3Vw IEtHQg== U2V0dXA= IHRhY2l0 IHJldHJpYnV0aW9u IGR1ZXM= IE3DvA== Lj8= 5Lit cG90cw== IGNhbWVv IFBBTA== ZWR1Y2F0aW9u QW15 bGlrZWx5 Z2xpbmc= IGNvbnN0aXR1dGlvbmFsbHk= IEhhbW0= IFNwZWFr IHdpZGdldHM= YnJhdGU= IGNyYXBweQ== IEl0ZXI= IGFudGljaXBhdGluZw== IEJvdXQ= UGl4ZWw= IFllcA== IExhdXJpZQ== IGh1dA== IGJ1bGxldGlu IFNhbHZhdGlvbg== IGNoYXRz ZWFyYWJsZQ== SG9uZXN0bHk= QUxUSA== b25zZXF1 Y3VsdA== aXNjb3Zlcnk= b3Z5Y2g= IHNlbHZlcw== IFNhdG9zaGk= U291bmRz IGNvbnZlcmdlbmNl IFJvc2VuYmVyZw== MTk3NA== IG5hc2Fs IGZ1bGxlc3Q= IGZlcm9jaW91cw== eHVz aXN0ZQ== QU1T IGxvYmJpZWQ= IHNvb3RoaW5n IEd1bm4= dG9kYXk= MDI0 IGluc3BpcmF0aW9uYWw= IE5CTg== cGI= Z2V3YXRlcg== b3JhaA== YWxsb3dlZA== IENvbGlzZXVt IHNwZWNpYWxpemluZw== IGluc2FuZWx5 IFRhcGU= ZGVsYXk= IHRhcm4= IFBvdW5k IG1lbGFuY2g= IGRlcGxveW1lbnRz aWxhbmQ= IGxlc3Nlbg== IGZ1cnJ5 IFVFRkE= IGJsb29kc2hlZA== IE1laWVy aXRoZXJpbmc= IGhlaXJz IEphdw== YXh0ZXI= IFB1YmxpY2F0aW9ucw== IGFsdGVycw== aW50ZW50aW9u IFdpbmNoZXN0ZXI= ZGV0ZXJtaW5hdGlvbg== IExpZmV0aW1l dGhpbg== TW9uc3Rlcg== Nzgw IGFwcHJveGltYXRpb24= IHN1cGVybWFya2V0cw== IFNlY29uZHM= b3Jvcw== aHVnZQ== IGJyaWJl IExJTUlURUQ= dW5lZA== IG1pc2ludGVycHJldA== IEluanVyeQ== IDM2Nw== IHRocmVzaG9sZHM= IENhcm5pdmFs IGdhc3Ryb2ludGVzdGluYWw= IGd1aWRlbGluZQ== IGRlY2VpdmVk ZmVhdHVyZXM= IHB1cnBvcnRlZGx5 IFJvbm5pZQ== IE5ld3Q= IHNwYWNpb3Vz YXN1cw== IHN1cGVyaGVyb2Vz IEN5bnRoaWE= bGVnZ2Vk a2FtcA== Y2hpbw== IHRodW1ibmFpbA== IFNoaXJsZXk= aWxsYXRpb24= IHNoZWRz IFp5 RVBB IGRhbXM= IHlhd24= bmFo IFBlZ2d5 IEVyaWU= IEp1dmVudHVz IEZvdW50YWlu cng= ZG9uYWxk YWxidW0= IENvbXByZWhlbnNpdmU= IGNhY2hpbmc= IFV6 dWxuZXJhYmlsaXR5 IFByaW5jaXBsZQ== IEppYW4= aW5nZXJz Y2FzdHM= IE9zaXJpcw== Y2hhcnQ= dGlsZQ== IFRpZmZhbnk= IFBhdHRvbg== IFdoaXA= IG92ZXJzaXplZA== SmU= IENpbmRlcmVsbGE= IEJvcmRlcnM= IERhZXNo TWFo IGRvZ21h IGNvbW11bmlzdHM= dnU= Q291bmNpbA== IGZyZXNod2F0ZXI= IHdvdW5kaW5n IGRlYmFjbGU= IHlvdW5nc3Rlcg== IHRocmVhZGVk IEJvdHM= IFNhdmluZ3M= 44GC b2xpbmc= b2hv IGlsbHVtaW5hdGlvbg== TVJJ IGxvb3Nlbg== dHJ1bXA= YWdlbmN5 dXJpb24= IG1vbWVudGFyaWx5 IENodW4= IEJ1ZGFwZXN0 IEFsbGV5 RGlzaw== IGFzdG9uaXNoZWQ= IENvbnF1ZXI= IEFjY291bnRpbmc= aGF2aW5n IFdlaW4= IEFscmlnaHQ= IHJldm9sdmVy IGRlbHVzaW9u IHJlbGljcw== IGFkaGVyZW50 cXVhbnQ= IGhhbmRtYWRl b3Jpbw== IGNvbWJhdGluZw== Y29kZWQ= IHF1YWRydQ== cmV0aA== Tmlr IFRyaWJhbA== IE15c3RlcmlvdXM= IGluaGFs IFdpbm5pbmc= IENsYXNzaWZpY2F0aW9u Y2hhbmdlZA== IHVuYWI= IHNjb3Ju aWNpcGF0ZWQ= d2w= b25kdWN0b3I= IHJlaW5mb3JjaW5n IENoaWxkaG9vZA== YW5vdmE= IGFkdmVudHVyZXI= IGRvY3RvcmFs IFN0cmF0ZWdpZXM= IGVuZ3VsZmVk IEVuY291bnRlcg== IGxhc2hlcw== Q3JpdGljYWw= cmljdWxhcg== IFVURg== b2NpYXRpb24= Y2hlY2tpbmc= IENvbnN1bHRpbmc= UnVudGltZQ== cGVyaW9k IEFzZ2FyZA== IGRpc3RpbGxlZA== IFBhc2FkZW5h IER5aW5n IENPVU5UWQ== IGdyYW5pdGU= IHNtYWNr IHBhcmFjaHV0ZQ== IFNVUg== VmlyZ2luaWE= IEZ1cmlvdXM= Nzg3 IE9raW4= IGNhbWVs IE1icHM= MTk3Mg== IENoYW8= IEN5YW4= am9pY2U= ZWZlcg== IFdyYXA= IERlYmF0ZQ== U2Vn IGZvcmVhcm0= IElnbm9yZQ== IHRpbWVzdGFtcA== IHByb2Jpbmc= IE5vb24= IEdyYWls ZmVu IGRvcm1hbnQ= IEZpcnN0bHk= IEVpZ2h0aA== IEhVTg== IERlc2lyZQ== b3Jhcw== R2lybHM= IERlc21vbmQ= emFy YW1pbmVz T0FE ZXhlY3V0ZQ== IGJvb2Jz IEFUTA== Xyg= Q2hlbHNlYQ== IG1hc3R1cmJhdGlvbg== IENvQw== IGRlc3Ryb3llcg== IENob21za3k= IHNjYXR0ZXI= IEFzc2V0cw== Nzk2 IENhcmdv IHJlY2VwdGl2ZQ== IFNjb3Bl IG1hcmtldGVycw== IGxhdW5jaGVycw== IGF4bGU= IFNFQQ== c2Vx IE1vZmY= ZmluZGluZw== IEdpYmJz R2VvcmdpYQ== ZXh0cmVtZWx5 Tko= IGxhYm9yZXJz c3RhbHM= IG1lZGlhdGlvbg== IEhlZGdl YXRvd24= IGlvZA== ZGVzcGl0ZQ== dmlsbA== SmFuZQ== ZXhpc3RlbmNl IGNvaW5jaWRlZA== IFV0aWxpdGllcw== IENoZWFw IGxvZ2lzdGljYWw= IGN1bG1pbmF0aW9u IE5pY290aW5l cGFr Rm9sZGVy IHJvZGVudHM= c3R1ZmY= IGxhd2Z1bGx5 IHJlcGVydG8= aW9jaA== amo= RGlhbG9ndWU= SEhISA== bGljdGlvbg== TG9va3M= IDI5Nw== IHR1cnJldHM= IEFiYW5kb24= IGluY2Vzcw== IFRyYWZmb3Jk IGN1cmxlZA== IHByZWZlcnJpbmc= IHByaXZhdGl6YXRpb24= IGlycmVzaXN0 IFBhbmRh IFNoYWtl IE1jR3I= 44OE dW5kZXJz IGRpc2NyaW1pbmF0ZWQ= IGJhcnRlbmRlcg== SUxF QXRsYW50aWM= IHByb3BlbnNpdHk= IFdpeg== IEdpbQ== Y29uZmVyZW5jZQ== IHJlaW5mb3JjZXM= R2g= d2Fnb24= IGVlcmll RmFs IGh1Z2dlZA== cmFjaXN0 UklD RnU= IGZpbGxlcg== IFN0dWI= IGVuZ3JhdmVk IFdyZXN0bGU= IGltYWdpbmF0aXZl IFBlZXI= IEZhY3RvcnM= YW51cw== IERyYWN1bGE= bW9uaXRvcg== IHJvdXRlcnM= aWJpYQ== IEJvb2xlYW4= ZW5kYWxl IFNsYXVnaHRlcg== IFNoYWNr UkZD IFNwaWVsYmVyZw== U2F4 IFBIT1RP IENsb3Zlcg== IFJhZQ== RGVwZW5kaW5n IE1lbW9y YXJhbQ== IHBpZXJjZWQ= IGN1cnRhaW5z dmFsZQ== IElucXVpc2l0aW9u IFBva2U= IGZvcmVjYXN0aW5n IGNvbXBsYWlucw== U2Vuc2U= IEhlcm1lcw== aXNjb3ZlcmVk IGJpYmxl IE1vcnBo IGdlcm0= Nzg1 RE9O IGNvbmdlbg== IGNyYW5l IERQUg== IHJlc3BlY3RmdWxseQ== Um9vbQ== IE5hdw== IERhbGFp cmVhc29u IEFuZ3Vz RWR1Y2F0aW9u IFRpdGFuaWM= y5w= IG92YWw= dW5pdGVk IHRoaXJkcw== IG1vaXN0dXI= IENQQw== TWlhbWk= IHRlbnRhY2xlcw== IFBvbGFyaXM= ZXhj ZXhjbHVzaXZl IFByYWlyaWU= IGNvbG9zc2Fs IEJsZW5k c3VycHJpc2luZ2x5 w61z IGluZG9jdHI= IGJhc2Fs IE1QRUc= dW5kbw== U3BsaXQ= RGV2ZWxvcG1lbnQ= IGxhbnRlcm4= MTk3MQ== IHByb3ZvY2F0aW9u IGFuZ3Vpc2g= IEJpbmQ= IExlaWE= ZHVjZXJz aXBweQ== Y29uc2VydmFuY3k= IGluaXRpYWxpemU= IFR3aWNl IFN1aw== IHByZWRpYw== IGRpcGxvbWE= IHNvY2lvcA== SW5ncmVkaWVudHM= IGhhbW1lcmVk IElybWE= UWFpZGE= IGdsaW1wcw== IEJpYW4= IHN0YWNraW5n IGZlbmQ= Z292dHJhY2s= IHVubg== ZGVtb2NyYXRpYw== aWdyZWU= IDU4MA== IDI5NA== IHN0cmF3YmVycnk= SURFUg== IGNoZXJpc2hlZA== IEhvdHM= IGluZmVycmVk IDgwOA== IFNvY3JhdGVz T3JlZ29u IFJvc2Vz IEZPSUE= IGluc2Vuc2l0aXZl IDQwOA== UmVjb21tZW5k IFNoaW5l IHBhaW5zdGFraW5n VUdF IEhlbGxlcg== IEVudGVycHJpc2Vz SU9S YWRq TlJT TEc= IGFsaWVuYXRlZA== IGFja25vd2xlZGdlbWVudA== IEFVRA== IFJlbmVn IHZvdWNoZXJz IDk2MA== IG1vb3Q= IERpbWVuc2lvbnM= IGNhYmJhZ2U= QnJpZ2h0 Z2F0 IEtsdQ== IGxhdGVudA== IHpl IE1lbmc= IGRpc3BlcnNl IHBhbmRlbW9uaXVt SFE= IHZpcnR1b3Vz IExvY2F0aW9ucw== ZWVwZXI= cHJvdmlkZWQ= IHNlYW1z IFdU aXpv UFJPVg== IHRpdGFuaXVt IHJlY29sbGVjdGlvbg== IGNyYW4= IDc4MA== IE5G NDkx NjQy cGFja2luZw== NTk4 dGV4dHVyZQ== U3BpZGVy ZnJlZWRvbQ== Y2lwbGVk IFRBTUFEUkE= 4pmm YXV0aGVudA== IFdBTlQ= cmlmaWVk IHJpdGVz IHV0ZXJ1cw== a2lzcw== IOKJpA== IHNraWxsZXQ= IGRpc2VuZnJhbmNo IEdhYWw= Q29tcGFu IGFnZWluZw== Z3VpZGU= QmFsdA== IGl0ZXJhdG9y IGRpc2NyZXRpb25hcnk= dGlwcw== IHByaW1hdGVz IFRlY2huaXF1ZQ== IFBheW1lbnRz YXplbA== IFJPQ0s= c3RhbnRpYWw= MDYw IGRtZw== IEphY2tldHM= IFBsYXlvZmY= IG51cnNlcnk= IFN5bWI= YXJ0b24= IGFubmV4YXRpb24= Q29sb3JhZG8= IGNvaWxz IFNob2Vz 4oSiOg== IFJveg== Q09NUExF IEV2ZXJlc3Q= IFRyaXVtcGg= Sm95 R3JpZA== 4Lw= cHJvY2Vzc29y IFByb3NwZXI= IFNldmVydXM= IFNlbGVjdGVk cmc= IFRheXlpcA== U3RyYQ== IHNraWluZw== ID8p IHBlZw== VGVzbGE= IHRpbWVmcmFtZQ== IG1hc3Rlcm1pbmQ= IE5C c2NpZW50aWZpYw== IFNoaXQ= Z2VuZXJpYw== SU5URVI= TlVN IHN0cm9sbA== IEVuaXg= IE1NUg== IEVNUw== bW92aWU= gqo= IG1pbmltaXppbmc= aWRkbGluZw== IGlsbGVnaXRpbWF0ZQ== IHByb3RvdHlw IHByZW1hdHVyZWx5 IG1hbnVhbHM= b2JiaWVz IENhc3NpZHk= REVD ZGVza3RvcA== IGFlcm9z IHNjcmVlbmluZ3M= IGRlYmlsaXRhdGluZw== IEdyaW5k bmF0dXJlY29uc2VydmFuY3k= IGZhZGVz dGVybWluYXRpb24= YXNzZXRzYWRvYmU= RmFjdG9y IGRlZmluaXRpdmVseQ== UG9rw6k= YXB1bHQ= IExhZmF5ZXR0ZQ== Q29ybg== IENvcmFs IHN0YWduYW50 VHVl IGRpc3NhdGlzZmFjdGlvbg== R2VuZGVy IGtpZG5leXM= IEdvdw== IERlZmVhdA== IEFzaHRvbg== IGNhcnRlbHM= IGZvcmVjbG9zdXJl IEV4cGxvcmU= c3RyZW5ndGg= b3Rpbg== IHZldGVyaW5hcmlhbg== IGZ1bWJsZQ== IHBhcmFw IFN0cmFpdA== cmlscw== IHByaWNr IEJlcm11ZGE= IEFtbXVuaXRpb24= c2tpbm5lZA== IGFib3VuZA== IEJyYXo= IHNoYXJwZXI= IEFzY2Vuc2lvbg== IDk3OA== IHByZXZpZXdz IGNvbW11bmlvbg== IFhZ IHBob255 IG5ld2NvbWVy IDMzMg== LiIsIg== IHJlZGlzdHJpYnV0aW9u UHJvdGVjdA== IFNvZg== S2Fs IGxpcHN0aWNr d29yc3Q= IHRhbmdsZWQ= IHJldHJvc3BlY3RpdmU= aW50ZWdlcg== IHZvbHVudGVlcmluZw== IDE5MDc= IC0tLS0tLS0tLS0tLS0tLS0tLS0t aWNoZW4= IHVudmVpbGluZw== IHNlbnNlbGVzcw== IGZpc2hlcmllcw== XC0= IGhpbmdlcw== IGNhbGN1bHVz TXl0aA== IHVuZGVmZWF0ZWQ= IG9wdGltaXphdGlvbnM= IGRlcHJlc3M= IGJpbGxib2FyZA== IFlhZA== IFB5cmFtaWQ= SXNu SWRl IGxlZ2lvbg== IEtyYW1lcg== ZW50YW55bA== IHBlbmV0cmF0aW5n IEhhd3Ro IFBST0RVQ1Q= IEdlcmFyZA== IFBhY3Q= IEluY2x1ZGluZw== IEVsaWFz IEVsYWluZQ== dmlzdWFs IGh1bW1pbmc= IGNvbmRlc2M= IEZhc2M= 5LiK IGVnYWxpdGFyaWFu IGRldnM= IERhaGw= T3Bz REg= IEJvdW5jZQ== aWRhdGVk YWxkbw== IHJlcHVibGljYW4= IGhhbWI= IFNldHQ= b2dyYXBoaWVz Q0hBUFRFUg== IHRyYW5zc2V4dWFs IHNreXJvY2tldA== YW5zd2Vy IG1hcmt1cA== 2Ko= IGhlcm9pbmU= Q29tcGFyZQ== IFRhdg== QmVhc3Q= IHN1Y2Nlc3NvcnM= IG5hw692ZQ== IEJ1Y2tsZXk= c3RyZXNz bWVhdA== IGRvd25sb2FkYWJsZQ== IGluZGV4ZWQ= IHNjYWZm IEx1bXA= IEhvbW8= U3R1ZGlv SW5zcA== IHJhY2tlZA== ZmFyaW91cw== IFBldHR5 RXh0ZXJuYWw= IDE5MDk= V2Fycw== Y29tbWl0 cHV0ZXJz IHVub2I= IEVycg== IEVH IEFsYW0= IFNpYmVyaWE= IEF0bW9zcGhlcmlj SVNURVI= IFNhdGFuaWM= dHJhbnNsYXRpb24= IExvdWQ= dHJhdW1hdGlj bGlxdWU= IHJlc29uYXRl IFdlbGNo IHNwYXJraW5n IFRPTQ== dG9uZQ== IG91dGw= IGhhbmRjdWZmZWQ= IFNlcmll ODAx IGxhbmRtYXJrcw== IFJlZXZlcw== IHNvZnRlbmVk IGRhenpsaW5n IFdhbnRlZA== bW9udGhz TWFnaWthcnA= IHVudHJlYXRlZA== IEJlZGZvcmQ= TWk= IER5bmFtbw== T3Jl Nzk1 IHdyb25nZnVs IGx1cmVk IGNvcnRpc29s IHZleA== ZHJhd24= aWxldA== RG93bmxvYWRoYQ== IEZhY3Rpb24= IGxhYnlyaW50aA== IGhpamFja2Vk d2F0ZXJz ZXJpY2s= IHN1cGVyaW9ycw== IFJvd2xpbmc= IEd1aW5uZXNz IHRk OTky IHVuZWFydGhlZA== IGNlbnRyaWY= IHNoYW1lbGVzcw== UG9k IEZpYg== IGljaW5n IHByZWRpY3Rvcg== IDI5Mg== Zm9yZXN0YXRpb24= Y29uc3RydWN0 Q2FuZA== QCM= IGFnaXRhdGVk IHJlcHI= T1ZB IGtuaXR0aW5n IExpbWE= IGZvZGRlcg== Njg0 IFBlcnNvbmE= a2w= NzAx IGJyZWFrdXA= 4bg= IGFwcGFsbGVk IGFudGlkZXByZXNzYW50cw== IFN1c3NleA== SGFycmlz IFRoZXJtYWw= ZWVlZQ== VXBsb2Fk IGd1bGY= IGRvb3JzdGVw IFNoYW5r TFU= IE1FTg== IFBvbmQ= c29ycnk= IG1pc2ZvcnR1bmU= bmFuY2U= IGJvbmE= TXV0 IGRlZ3JhZGVk IExPRw== IE5lc3M= YW5pbWFs IGF2ZXJzaW9u dW5kb3du IHN1cHBsZW1lbnRlZA== IEN1cHM= IDUwNA== IGRlcHJpdmU= IFNwYXJrbGU= xYI= IE1lZGl0YXRpb24= YXV0aG9ycw== IFNhYmFu IE5ha2Vk YWlyZA== IE1hbmRhcmlu IFNjcmlwdHVyZXM= IFBlcnNvbm5lbA== IE1haGFyYXNodHJh IDE5MDM= IFBhaQ== IE1pcmFnZQ== b21iYXQ= QWNjZXNzb3J5 IGZyYWdtZW50ZWQ= VG9nZXRoZXI= IGJlbGlldmFibGU= IEdsYWRpYXRvcg== YWxpZ25lZA== IFNsdWc= TUFU IGNvbnZlcnRpYmxl IEJvdXJib24= YW1lcm9u IFJlaGFi bnRheA== IHBvd2RlcmVk cGlsbGFy IHNtb2tlcg== IE1hbnNvbg== IEJG NTEx IEdvb2RlbGw= IERBUg== bXVk Z2FydA== IG9iZWRpZW50 IFRyYW5zbWlzc2lvbg== IERvbmF0aW9u ODgw IGJvdGhlcmluZw== TWF0ZXJpYWxz 44Kx ZGVzdHJveQ== IGZvcmVnb2luZw== IGFuYXJjaGlzbQ== IEtyeQ== aWNlcHM= IGxpdHRlcmVk IFNjaGlmZg== IGFuZWNkb3RhbA== dW5pdHM= IGZpYW4= IFN0aW0= IFNPTUU= IEludmFkZXJz IGJlaGF2aW91cmFs IFZlbnR1cmVz IHN1YmxpbWU= IGZydWl0aW9u IFBlbmFsdHk= IGNvcnJvc2lvbg== toU= IGxpa2VuZWQ= IGJlc2llZ2Vk d2VlbmV5 IENyZWVw IGxpbmVtZW4= bXVsdGk= aWNhYmx5 dWRkZXI= IHZpdGFsaXR5 IHNob3J0ZmFsbA== IFBhbnRz YXBpc3Q= SGlkZGVu IERyb3Bz bWVkaWNhbA== IHByb251bmNpYXRpb24= IE5STA== IGluc2lnaHRmdWw= SlY= IEJlYXJk IENob3U= IGNoYXJtcw== IGJpbnM= IGFtYmFzc2Fkb3Jz IFNhdHVyZGF5cw== IGluaGliaXRvcg== IEZyYW5jaA== NjAx Jywn IENvbm9y YXJ0bmV5 IFhwZXJpYQ== Z3JhdmU= YmVlcw== IFByb3Rlc3RhbnRz IHNvYWtpbmc= IE1hbmRhbA== IHBoYXNlZA== IDY2MA== IHNjYW1z IGJ1enppbmc= IEl0YWxpYW5z IExvcmVuem8= IEpB IGhlc2l0YXRlZA== IGNsaWZmcw== IEdPVA== aW5ndWlzaGFibGU= IGtv IGludGVycnVwdGlvbg== Wmlw TGVhcm5pbmc= IHVuZGVyc2NvcmVz IEJsaW5r S3U= NTc5 IEF1dG9i SVJF IHdhdGVyaW5n IHBhc3RyeQ== ODIw IHZpc2lvbmFyeQ== IFRlbXBsYXI= YXdhaXRlZA== IHBpc3Rvbg== IGFudGlk Y3VycmVudGx5 IHBhcmQ= IHdhZ2luZw== IG5vYmlsaXR5 IFl1cw== IGluamVjdGluZw== ZmFpdGg= IFBBU1M= 5bo= IHJldGFrZQ== IFBST0M= IGNhdGhlZHJhbA== YmFzaA== IHdyZXN0bGVycw== IHBhcnRuZXJpbmc= IG5vc2Vz IDM1OA== VHJhbnNmb3Jt YW1lbg== IGJvdXRz IElkZWFs IENvbnN0YW50aW4= IHNlcA== IE1vbmFyY2g= YXR0ZW4= IFBlb3BsZXM= bW9kaWZpZWQ= IG1vcmF0b3JpdW0= IHBlbmNoYW50 IG9mZmVuc2l2ZWx5 IHByb3hpZXM= b2thbmU= IFRhaXdhbmVzZQ== IFBvbw== IEhPTUU= dXNpb25hbA== IHZlcmJz IE9tYW4= dmlzb3J5 IHBlcnN1YXNpb24= IG11bHRpdA== IHNjaXNzb3Jz R2F5 b3dheQ== b3BoeXNpY2Fs bHVz Z251 IGFwb2NhbHlwdGlj IGFic3VyZGl0eQ== IHBsYXlib29r IGF1dG9iaW9ncmFwaHk= SVVN IHNuZWFraW5n IFNpbXVsYXRpb24= cHBz ZWxsZXJ5 UGxhbmV0 IHJpZ2h0ZnVsbHk= IG5pZWNl IE5FQw== IElQTw== IERpc2Nsb3N1cmU= bGVhbm9y b3VzeQ== U1RFUg== IDI4Mg== Q3J1eg== Q2hhbGw= NjQz IFN1cnZpdmU= IEZhdGFs IEFtaWQ= YXBv V2VhcG9ucw== REVO Nzcw IEdyZWVud2FsZA== IGxpbmVu YWxvcw== IHBvbGx1dGFudHM= IFBDSWU= a2F0 IHBhdw== IEtyYWZ0 Q2hlbQ== IFRlcm1pbmF0b3I= IHJlaW5jYXJu IF1b IFNlZWRz IHNpbGhvdWV0dGU= IFN0b3Jlcw== IGdyb29taW5n IERpcmVjdGlvbg== IElzYWJlbA== IEJyaWRnZXM= 8J+R RUVE IE1vcnNp IHZhbHZlcw== IFJhbmtlZA== IFBoYXJtYQ== IE9yZ2FuaXphdGlvbnM= IHBlbmV0cmF0ZWQ= IFJvZGhhbQ== IFByb3Rvc3M= IG92ZXJlc3Q= IGV4YXNwZXI= IFRK IDAwMDAwMA== IHRyaWNrbGU= IGJvdXJib24= V0hP IHdyZXRjaGVk IG1pY3Jvc2NvcGlj IGNoZWNrbGlzdA== IGFkb3JuZWQ= Um95YWw= QWRtaW5pc3Q= IFJldGlyZW1lbnQ= IEhpZ2hlc3Q= V2VhdGhlcg== aWxlZ2U= IGluY3JlbWVudHM= IENvc3BvbnNvcnM= IG1hc3Nl IFNpbm4= cmY= IGhvcmRlcw== YXNzZW1ibHk= NzU0 IE5hdGFzaGE= IFRZUEU= IEdFTkVSQUw= IGFycmFuZ2luZw== IDQwNw== bGF0b3I= IGdsZWFu IGRpc2NyZWRpdGVk IGNsaW5pY2lhbnM= VU5F IGFjaGlldmVz IEVtZXJzb24= Y29tcGxleA== PVs= IHByaW5jaXBhbGx5 IGZyYWls cGlja2Vk IHRoYW5raW5n IHJlY2w= IExBU1Q= IHN1cHByZXNzaW5n aWxpYw== IGFudGlkZXByZXNzYW50 IExpc2Jvbg== IHRob3I= IHNwYQ== IGtpbmdkb21z IFBlYXJjZQ== ZW1v IHBsdW5n IGRpdmVzdA== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ymlz b3NwZWxz YWRy U3Bpcml0 aGFsbGE= UGluaw== ZW5kZXo= IHJlc3VycmVjdGVk ZXNjYXBl IFJvc2Vuc3RlaW4= IGdlb2xvZ2ljYWw= IG5lY2Vzc2l0aWVz IGNhcm5pdg== IEVseXM= IEJhcm5leQ== IDI5Ng== ZGlneQ== U1RPTg== RE9XTg== IG1pbGVzdG9uZXM= IGtlcg== IGRpc21hbnRsaW5n IHJlcHJpbQ== IGNyb3NzaW5ncw== MTk0NQ== IHBhdHJpYXJjaHk= IGJsYXNwaGVteQ== IDM1OQ== bWV0cnk= IE9iZXNpdHk= IERpZmZlcmVuY2Vz YmxvY2tpbmc= 44OV44Kh aWNoaXRh IFNhYmhh cGhhbHQ= IENvbG8= dWFsYQ== ZWZmaWNpZW50cw== IE1lZGluYQ== Y29uc29sZQ== NTU3 IEhhbm5pYmFs IEhhYml0 IEZldmVy IHRoZW5jZQ== IHN5bmFnb2d1ZQ== IGVzc2VudGlhbHM= IHdpbms= IFRyYWRlcg== SURB IFNwb2lsZXI= IEljZWxhbmRpYw== IEhheXdhcmQ= IHBlYWM= IG1hbGljZQ== IGZsYXNoYmFjaw== IHRodw== IGxheW9mZnM= TGlxdWlk IHRyb29wZXI= IGhpbmdl IFJlYWRlcnM= UGhpbGw= IEJhdWVy Q3JlYXRlZA== IGF1ZGl0cw== YWNjb21wYW4= IHVuc3VzcGVjdGluZw== aWVyYQ== NjY2NjY2NjY= IGJyb2No IGFwcHJlaGVuZGVk IE1hbGs= Y2VybmluZw== IENvZGV4 T1ZFUg== TWFyc2g= IERlbmc= IEV4cHJlc3Npb24= IGRpc3Jlc3BlY3RmdWw= IGFzY2VuZGluZw== dGVzdHM= IFBsYWludGlmZg== c3Rlcnk= IEFsaWJhYmE= ZGluYW5k IERlbXBzZXk= QXBwbGljYXRpb25z bW9yYWw= IHRocm91Z2hwdXQ= IHF1YXJyZWw= IG1pbGxz IGhlbW9y IENBU0U= dGVycm9yaXN0 c3RpbQ== aWZlc3R5bGU= cm96ZW4= Q0VQVA== QXJr dWNp bGVjdGlj IGlycml0YXRpbmc= c2hlZXRz QXk= IHJlZGVlbWVk IGhvcm55 IFRlYWNo IFNlYXI= ZGVtb2NyYWN5 NDY1 IFJlc3RvcmU= IHN0YW5kYnk= IFBpcw== aWZmaW4= IHNsZWVweQ== IGV4dHJhdGVy IGNvbXBsaW1lbnRz RnJhbWV3b3Jrcw== IGluc3RhbGxz IGJhbmdpbmc= c3VyZmFjZQ== Zm91bmRsYW5k IG1ldGFwaHlzaWNhbA== IDI4Mw== b3Vscw== ZGV2aWNlcw== QXJncw== IFNhY3JpZmljZQ== IE1jQ29ybQ== ZXNvbg== Q29uc2VydmF0aXZl IE1pa2hhaWw= c2VlaW5n aXNpdmVseQ== IFJvb21z IEdlbmVyaWM= IGVudGh1c2lhc3RpY2FsbHk= IGdyaXBwZWQ= IGNvbWVkaWM= IEVsZWN0cmljaXR5 IGd1ZXJyaWxsYQ== IGRlY29yYXRpb24= IFBlcnNwZWN0aXZl IGNvbnN1bHRhdGlvbnM= IHVuYW1i IHBsYWdpYXI= IG1hZ2ljaWFu IGVyZWN0aW9u IFRvdXJpc20= b3JpZWQ= cm94eQ== MTEwMA== VGFt iOg= zrM= 16o= IFByZWRhdG9ycw== Tml0cm9tZQ== IHRlbGVzY29wZXM= cHJvamVjdHM= IHVucHJvdGVjdGVk IHN0b2NrZWQ= IEVudHJlcHJlbmU= bmV4cGVjdGVk IHdhc3Rld2F0ZXI= VmlsbA== IGludGltYXRlbHk= IGlDbG91ZA== IENvbnN0YWJsZQ== IHNwb29m IG5lZmFyaW91cw== IGZpbnM= IGNlbnNvcg== IE1vZGVz IEVzcGVy YXJib24= IGludGVyc2VjdGlvbnM= IGxhdWRlZA== IHBoeXNp IGdlbmVyb3VzbHk= IFRoZU5pdHJvbWU= IFRoZU5pdHJvbWVGYW4= IGFyaXNlbg== INmI IGdsYW5kcw== IFBhdmlsaW9u IEd1cHRh IHVuaWZvcm1seQ== IHJhbXBz cmlldA== IFdIRU4= IFZhbmVzc2E= IHJvdXRlZA== IGxpbXA= IENQSQ== cHRlcg== aW50dWl0aXZl IHZhcGluZw== IGV4cGVyaW1lbnRlZA== IE9seW1wdXM= IEFtb24= IHNpZ2h0aW5n IGluZmlsdHJhdGU= IEdlbnRsZW1hbg== IHNpZ25pbmdz IE1lb3c= IE5hdmlnYXRpb24= Y2hlY2tz NDMz IGVsYXBzZWQ= IEJ1bGdhcmlhbg== ZXNwaWU= IFNPTQ== ZHVyaW5n IHNwaWxscw== YW5jYQ== IFBseW1vdXRo TUFM IGRvbWVzdGljYWxseQ== IFdhdGVyZ2F0ZQ== IEZBTQ== a2lsbGVk ZWRpdGVk IFlvdXJzZWxm IHN5bmNocm9uaXphdGlvbg== IFByYWN0aWNlcw== U1RFUA== IGdlbm9tZXM= IFFS bm90aWNl IGxvY2F0aW5n emlu IDMyOQ== YWxjb2hvbA== IGtpdHRlbg== Vm8= IHJpbnNl IGdyYXBwbGU= IFNjcmV3 IER1bA== QUlS IGxlYXNpbmc= IENhZsOp IHJvc2Vz IFJlc3BlY3Q= IG1pc2xlYWQ= IHBlcmZlY3RlZA== IG51ZGl0eQ== IG5vbnBhcnRpc2Fu IENvbnN1bXB0aW9u UmVwb3J0aW5n IG51YW5jZXM= IGRlZHVjdGlibGU= IFNob3Rz IDM3Nw== IOac YW5vb2dh QmVuZWY= IEJhbQ== IFNhbXA= aWZpeA== IGdhbHZhbg== IE1lZGFscw== cmFkaXVz IG5vYmxlcw== IGVhdmVz aWdyYXRl S1Q= IEhhcmJvdXI= dWVycw== IHJpc2tlZA== cmVx IG5ldXJvdA== Z2V0dGFibGU= YWluYQ== Um9tbmV5 IHVuZGVycGlu IGxvZnQ= IFN1YmNvbW1pdHRlZQ== IE1vbmdvbA== Yml6 IG1hbmlmZXN0cw== YXNzaXN0ZWQ= IEdhZ2E= IHN5bmVyZ3k= IHJlbGlnaW91c2x5 IFByZWY= IEdlcnJ5 VEFH IENob2k= NDY2 YmVoaW5k IE91 R29sZE1hZ2lrYXJw IGhlbW9ycmg= Uml2ZXI= IHRlbmRvbg== IGluanVyZQ== IEZpb25h IHBhZw== IGFnaXRhdGlvbg== fHx8fA== dXJhbg== IEVTQQ== IGVzdGVlbQ== IGRvZGdpbmc= IDQxMg== cnNz IGNlYXNlcw== ZXhjbHVkaW5n IGludGFrZXM= IGluc2VydHM= IGVtYm9sZA== IE9yYWw= dXB1bmN0dXJl NDEx IFVuaWZpZWQ= IERlbGU= IGZ1cm5hY2U= IENveW90ZXM= IEJyYWNo TGFib3I= IGhhbmRzaGFrZQ== IGJydWlzZXM= R3JhZGU= 6ZeY IEdyYW1teQ== aWxlZW4= U3RhdGVz IFNjYW5kaW5hdmlhbg== IEthcmRhc2g= ODY2 IGVmZm9ydGxlc3NseQ== IERJUkVDVA== IFRIRU4= IE1laQ== ZXJ0YXRpb24= MTk2OA== IGdyb2lu d2l0Y2g= UmVxdWlyZW1lbnRz OTg1 IHJvb2Zz IGVzdGF0ZXM= IEhG IGhhaGE= IGRlbnNlbHk= IE9DVA== IHBsYXN0aWNz IGluY2lkZW50YWxseQ== IFRyYWNrcw== IFRheGVz IGNoYW50ZWQ= IGZvcmNlZnVs IEJpZWJlcg== IEthaG4= S2VudA== IENvdA== bGljdHM= RmVk IGhpZGVvdXM= IFZlcmQ= IFN5bmRpY2F0ZQ== IElsbGVnYWw= SmV0 IERBVg== cmVhc29uYWJsZQ== Y3Jldw== IGZ1bmRhbWVudGFsaXN0 IHRydXRoZnVs IEppbmc= IGxpbA== IGRvd25lZA== IGVuY2hhbnRlZA== IFBvbGljaWVz IE1jTWFzdGVy IEhhcmU= aWRlc2hvdw== IHBhcmFtcw== ZW5jZXJz Z29yaXRobQ== IGFsbG93YW5jZXM= IHR1cmJ1bGVudA== IGNvbXBsZXhpdGllcw== IEtU IDMzNw== IEdlbmV0aWM= RlVO RG91Zw== dGljaw== IGdpZ3M= dW1lbnRoYWw= IHBhdHJpYXJjaGFs IGNhbGM= LC4uLg== IGNvdXQ= IEd1YW4= IHBhdGhvbG9naWNhbA== IFJpdmFscw== IHVuZGVycmF0ZWQ= IGZsdW9yZXNjZW50 IEppdQ== YXJuYWV2 IFF1YW4= IDQyOQ== IOCo TWFyaW8= Q29uc3RydWN0 IENpdGF0aW9u IFJhY2lhbA== IFJTQQ== IEZpZGVs IDM5NQ== UGVyc29uYWxseQ== Q2F1c2U= w7s= cmFkaWNhbA== aW5lbg== IHZlaGVtZW50bHk= IFBhcGE= IGludGVybnNoaXA= IGZsYWtlcw== IFJlY2s= THVja2lseQ== QnJh MjAyMA== cmF2aW5ncw== Uk4= V29uZGVy U2VyaW91c2x5 IHJldXNhYmxl IHBvbGx1dGVk IFBlbmc= bGVpZ2g= aW5kbGU= IGNpcmN1aXRyeQ== IE1hZG9ubmE= IEJBUlQ= UmVzaWRlbnRz YXR0cmlidXRl UGhpbGFkZWxwaGlh Q2x1Yg== IHBsYW5uZXI= IGZyYW50aWNhbGx5 IGZhaXRoZnVsbHk= IFRlcnJpdG9yaWVz IExBVA== IEFuZGVyc2Vu YW51 IFBBUks= IFNvcmE= aWFnZQ== IFBsYXlvZmZz IEdDQw== NDI3 IGFibm9ybQ== IExldmVy IGRpc29iZWRpZW5jZQ== QXN5bmM= IFNoZWE= VmVydA== IHNraXJ0cw== IFNhd3llcg== eHA= IHdvcnNlbmluZw== IHNjYXBlZ28= IEFuZ2xl b3RoYWw= IHRyb3Zl IFN0eQ== IE5ndXllbg== bWFyaW5l aWRlb24= RGVwdGhz QmxvZw== IElsbHVtaW5hdGk= IHRyYWN0cw== IG9yZ2FuaXNl IG9zdHI= RnM= IGxldmVyYWdpbmc= IERhcmVkZXZpbA== YXNhcg== IGxhbmc= IGV4dGVybWlu dXJzaW9ucw== IFJvbW8= 44Kk44OI IGNvbnRlbmRlZA== IGVuY291bnRlcmluZw== IFRhYmxldA== IEFsdGVybmF0ZQ== c2tpbGw= IHN3ZWV0cw== IGNvaGVzaXZl Y2FwYWNpdHk= IHJlcHVk IGxpemFyZA== cm9v IHBpbGdyaW1z IFJ1ZmY= IEluc3RydW1lbnQ= IExvZ28= dWl0b3Vz RUg= IHNhbGVzbWFu IGFua2xlcw== TGVk IFBhdHR5 dWRvcw== T3duZXI= IGRpc2NyZXBhbmNpZXM= a2o= TVU= IHVuY29uZGl0aW9uYWw= RHJhZ29uTWFnYXppbmU= aWFyZA== T2Fr IENvbnZlcnNhdGlvbg== YmVlcg== IE9zYWth RGVsdGE= dXNreQ== IHNlY3JldGlvbg== IHBsYXph IG1pbmc= IGRlcGxldGlvbg== IE1vdXM= IElUUw== IEhpbWFs IEZsZW1pbmc= IGN5dG9r IEhpY2s= IGJhdHRlcnM= IEludGVsbGVjdHVhbA== Njc1 w6ly SVNJT04= IFF1ZW50aW4= IENoYXB0ZXJz aWhhZGk= IGNvYXN0ZXI= V0FZUw== IExpemFyZA== IFlvcg== YW5kZXJpbmc= U2tpbg== aGF1c3Q= YWJieQ== IHBvcnRyYXlpbmc= IHdpZWxkZWQ= ZGFzaA== IHByb3BvbmVudA== IHJpcHBsZQ== IGdyYXBoZW5l IGZseWVy IHJlY3VycmVudA== IGRldmlscw== IHdhdGVyZmFsbA== 5piv Z29v VGV4dENvbG9y IHRhbXBlcmluZw== SVZFUw== VFJVTVA= IEFiZWw= IFNBTA== IEhlbmRyaWNrcw== IEx1Y2l1cw== Ym90cw== IDQwOTY= SVNUT1JZ R3Vlc3Q= IE5Y aW5hbnQ= QmVueg== IExvYWRlZA== IENsZXZlcg== dHJlYXRtZW50 IHRhdmVybg== IDMzOQ== IFROVA== aWZpY2FudGx5 VGVtcGVyYXR1cmU= RmVs IHVuZGVyd29ybGQ= IEp1ZGdlcw== IDwr IHN0dW1w IG9jY3VwYW5jeQ== IGFiZXI= IEZpbmRlcg== KSIs IE51bmVz cmVzZXQ= aW5ldA== ZWN0b215 IHdlbGxuZXNz IFBlYg== cXVhcnRlcmVk YW5kYW4= IG5lZ2F0aXZlcw== IFRoaWVs IENsaXA= IExURA== IGJsaWdodA== IHJlcGVydG9pcmU= S3lsZQ== IHF1ZXI= IENlcw== IGhhcGw= OTg5 IFRoYW1lcw== aXNjb3BhbA== RGVzaw== aXZhcmlhdGU= IEV4Y2VsbGVuY2U= Zm91bmRhdGlvbg== IOKH WGk= IG15c3RlcmlvdXNseQ== ZXN0eWxlcw== IHBlcmlzaA== IEVuZ2Vscw== IERFQUQ= MDkw fX19 IFVucmVhbA== IHJlc3RsZXNz SURFUw== b3J0aG9kb3g= IEludGVybWVkaWF0ZQ== IGRpbm5lcnM= IFRyb3V0 IFNleW0= IEhhbGxz b2dnZWQ= IHRyYWdlZGllcw== IGRpZG50 Njc2 IGFpbG1lbnRz IG9ic2VydmFibGU= IFZpZGU= YWRhcHQ= IER1c2s= IHByb2Zlc3Npb25hbGlzbQ== IFByZXNjb3R0 IEluZGllcw== cG94 IE1laHJhbg== V2lkZQ== IGVuZGVtaWM= IFBhcmFu QmlyZA== IHBlZGFscw== IElV IEFkYW1hbnQ= IEh1cnQ= IGNvcnJlbGF0ZXM= dXJkZW4= IHNwb25zb3Jpbmc= Y2xpbWF0ZQ== IFVuaXZlcnNpdGllcw== IEtub3Q= ZW5uZXM= IERhbWlhbg== IEF4ZWw= U3BvcnQ= IGJhcmI= IFNubw== c2hvd24= c3RlZW4= dWRlbmNl IG5vbnZpb2xlbnQ= IGhvbW9waG9iaWE= IGJpb21hc3M= IERldGFpbA== IHNyZk4= IFR1bmU= YWNjb21wYW5pZWQ= SUVOQ0U= QWxiZXJ0 IE1vbmdv eng= IENlcmJlcnVz b3JiaXQ= Y2Vucw== IHNsYXk= U0hBUkU= SFk= IGJyYXds IFByb2Jl IG5vbmV4aXN0ZW50 IENsYXJlbmNl IEJsYWNrYnVybg== IHBvcnRhbHM= IFJpdGE= IFJlbWFpbg== IExldmFudA== IHRyaWNrZWQ= IEZlcnJ5 YXZlcmluZw== IFN0cmF3YmVycnk= IEFuc3dlcnM= IGhvcnJlbmRvdXM= IEFtYW4= U3VwcGxlbWVudA== IFRvYWQ= IHBlZWxlZA== IG1hbm9ldXY= IFV6YmVr bW9uZHM= IEhlY3Rvcg== IDQwMg== cGVlcw== Zml4ZXM= IGRq IHJlc3VtZXM= IGFjY291bnRhbnQ= IGFkdmVyc2l0eQ== IGhhbXBlcmVk IExhcnNvbg== IGRvcGluZw== cGFydHM= SHVy IGJlYXJkZWQ= IHly IFBsdWdpbg== 5aWz IC8qKg== cm9sbGV5 IHdhdGVyc2hlZA== IFN1Ym1pc3Npb24= aWZsb3dlcg== QVND IGNob2ly IHNjdWxwdHVyZXM= bUE= aW5jcmVhc2luZw== YWlp IHNuZWFrZXJz IGNvbmZyb250cw== IEVsZXBoYW50 IEVsaXhpcg== IHJlY2Fs IFRUTA== d2lkZ2V0 IFdheA== IEdyYXlzb24= IGhhaXJzdA== IGh1bWlsaWF0ZWQ= IFdBUk4= YXBwaW5lc3M= IFRUQw== RnVlbA== IHBvbGlv IGNvbXBsZXhlcw== IGJhYmU= IFhJVg== UEY= KS5b UGFydHM= IDQzNQ== TWVn IFlhcmRz IEFMUA== IHllbGxz IHByaW5jZXM= IGJ1bGxpZXM= IENhcGl0YWxpc20= ZXhlbXB0 RkFR IFNwb25nZQ== IEFsYQ== IHBsZWFzYW50bHk= IGJ1Zg== IGRlbm90ZQ== IHVucHVibGlzaGVk IGtuZWVsaW5n YXNjYQ== IGxhcHNl YWxpZW4= OTk0 IHJlZmVyZWVz IExhd3llcnM= U2FudGE= IHB1enpsaW5n IFByb21ldGhldXM= IFBoYXJhb2g= IERlbGF5 IGZhY2lsaXRhdGVz IENFUw== IGpld2Vscw== IGJvb2tsZXQ= b25kaW5n IHBvbGFyaXphdGlvbg== IE1vcmFu IFNhbGFk IFNPUw== IEFkdmljZQ== UEhPVE9T SUNBTg== aWF0dXJlcw== ZXhwcmVzcw== IFdvbmRlcmxhbmQ= IENPREU= IENMQVNT OTc1 IGdyZXA= IERpZXNlbA== IEdsYWM= IT8i IHJt b2luZQ== ZGlzY3JpbWluYXRpb24= IE51cnNl bWFsbG93 IHZvcnRleA== IENvbnNvcnRpdW0= IGxhcmdlRG93bmxvYWQ= c3RyYWlnaHQ= YXVnaGxpbg== R3JhZA== IHB1YmxpY2l6ZWQ= IFdhdmVz IFJlZGQ= IGZlc3Rpdml0aWVz IE1hbmU= YXJvdg== IGZsZWV0aW5n IERydW5r dWdlbg== Q2VsZQ== IGNocm9tb3NvbWVz IERPVA== LSstKy0rLSs= IGJ1c2llc3Q= IEJlYXZlcg== U3lyaWFu IEt5cg== a2Fz IENyb3NzUmVm MTk1MA== NzYwMQ== IHJlcGVhbGluZw== IFdpbm5lcnM= IE1hY3Jv IERPRA== YmxhbmNl U29ydA== NjQx IG1ldHJl IERpcms= IGdvZ2dsZXM= IGRyYXdiYWNrcw== IGNvbXBsYWluYW50 IGF1dGhvcml6aW5n IGFudGl0cnVzdA== b3BlcmF0ZWQ= IG1haA== IGV4YWdnZXJhdGlvbg== QW1hemluZw== IFNlcmFwaA== IGhhemU= d293 IGV4dGluZ3Vpc2hlZA== IGNhbnlvbg== IEJvc2g= IHZlbnRz IHNjcmFwZQ== Q29ycmVjdA== NDI2 IGF2Zw== RGVtYW5k IOKIvA== IG1pY3JvYmlvdGE= In1dLCI= IFN0ZXY= Qmlv IFBsYW5lcw== IHN1Z2dlc3RpdmU= IGRlY2lwaGVy IFJlZnVnZWU= IEtlanJpd2Fs IEdyZWVucGVhY2U= IGRlY2xhc3M= IFNvdW5kZXJz IHRobw== IGRlY3J5cHQ= IGJydXNoaW5n IEphbmVpcm8= aXBvcA== U2k= ODc3 IEdlb2ZmcmV5 IGNwdQ== IEhhemVs IHZpZXdwb2ludHM= IGNyaXNweQ== IE5vdGlmaWNhdGlvbg== IHNvbGRlcg== IE1vZGVzdA== IEhlbWlzcGhlcmU= IGNhc3NldHRl aW5jbHVkZXM= IGlkZW50aWZpZXJz IENBTEw= aW5jZW50 VG9kZA== IFN3ZWVw IDMzNA== Ym9zcw== IHNtaXI= Z2lueA== IHRvd25zaGlw IGdyaWV2aW5n IE1vc3F1ZQ== TmV0ZmxpeA== QVNFRA== IE1pbGxlbm5pYWxz b2NvbQ== MTk2Nw== IGJvbGRseQ== c2xlZXA= IGVzY2hl YXJpanVhbmE= IHN3aXJs IFBlbmFs IG5lZ2xpZ2VudA== IFN0ZXBoZW5zb24= S0VS IFpvcm8= cmlzaXM= IGxvY2FsaXphdGlvbg== IFNleW1vdXI= IEFuZ2xpYw== cmVkaXRhdGlvbg== cHJvdGVjdGlvbg== IFBhaWdl IG9taXQ= IFJvdXNzZQ== IFR1Yg== IGludml0YXRpb25z dHR5 IG1vc3M= cGh5c2ljYWw= Q3JlZGl0cw== IGFuYXJjaHk= IGNoaWxkY2FyZQ== IGx1bGw= IE1law== IExhbmd1YWdlcw== bGF0ZXN0 IFNhbmZvcmQ= IHVzYWJpbGl0eQ== IGRpZmZ1c2U= IERBVEE= IHNwcml0ZXM= IFZlZ2V0YQ== IFByb21vdGlvbg== 44O844Kv cmljdGluZw== emVl VHVya2lzaA== IFREcw== cHJvdmVu NTcx IHNtdWdnbGVycw== NzA3MTA= IHJlZm9ybWVk IExvaXM= IHVuZmw= IFdJVEhPVVQ= IFJldHVybmluZw== YW5uaWU= IFRvbWFz RnJhbmM= IFByb2ZpdA== IFNFUlY= IFJ1bWJsZQ== aWt1bWFu ZXNhbg== IHRlc3RlcnM= IGdhZGdldA== IGJyYWNlbGV0 IEZTQQ== Y29tcG9uZW50 IHBhcmFtZWRpY3M= IGphbg== IFJlbWVt IFNraW5uZXI= IGxvdg== IFF1YWtl cm9tYQ== IGZsYXNr UHJpbmM= IG92ZXJwb3dlcg== IGxvZGdpbmc= IEtLSw== cmV0dGU= IGFic29yYnM= d3JvdGU= ICwi S2luZ3M= IEhhaWw= IEZhbGxpbmc= eHRhcA== IEhlbGVuYQ== aXJlbnM= TGFycnk= IHBhbXBobGV0 IENQUg== R3Jv IEhpcm9zaGltYQ== IGhvbGlzdGlj Ii5b IGRldGFjaG1lbnQ= IGFzcGlyZQ== IGNvbXBsaWNpdA== IEdyZWVud29vZA== IHJlc3Bhd24= IFN0dXBpZA== IEZpbmlzaGVk ZmFs YmFzcw== IGFiaG9y IG1vY2tlcnk= IEZlYXN0 VklERU8= IGNvbnNlYw== IEh1bmdyeQ== UHVsbA== IEh1c3Q= aXRhbmNl P+OAjQ== KS0t IFBhcmFsbGVs Y29udg== NDY5 aGFhcg== d2FudA== UGFwZXI= bWlucw== IFRvcm8= IFRSVU1Q IFJhaQ== RFc= IFdpY2tlZA== IExlcA== IGZ1bmt5 IGRldHJpbWVudA== aW9zaXM= YWNoZXY= IGRlZ3JhZGU= aW1pbGF0aW9u IHJldGFyZA== IGZyYWdtZW50YXRpb24= IGNvd2JveQ== IFlQRw== IEhBTA== UGFyZW50cw== IFNpZWc= IFN0cmF1c3M= IFJ1YmJlcg== 15A= RnJhZw== IHB0 IG9wdGlvbmFsbHk= IFpJUA== IFRyYW5zY3JpcHQ= IER3ZWxs ODgy TWVyYw== IE1PVA== 44Ov44Oz IGh1bnRz IGV4ZWN1dGVz SW5jbHVkZXM= IGFjaWRpYw== IFJlc3BvbnNpYmlsaXR5 IER1bWI= d2Vp QW5kZXJzb24= IEphc3Blcg== aWdodG9u YWJzb2x1dGVseQ== QWR1bHQ= IHBsdW5kZXI= TW9ybmluZw== IFRvdXJz IERhbmU= zro= IFRFU1Q= IEdpbmE= IGNhbmluZQ== YXdhbg== IHNvY2lhbGlzdHM= IFNvZGE= IGltcGV0dXM= IFN1cHBsZW1lbnRhcnk= b2xpYXRo IEtpbm5pa3VtYW4= bWl0dGVkbHk= c2Vjb25kcw== IG9yZ2FuaXNlcnM= IGRvY3VtZW50YXJpZXM= VmFyaWFibGU= R1JFRU4= IHJlc29ydHM= IGJyYWdnaW5n IDM2OA== QXJ0aXN0 d2s= YmxlcnM= VW5jb21tb24= IFJldHJpZXZlZA== IGhlY3RhcmVz IHRveGlu cmFuaw== IGZhaXRocw== IEdyYXBoaWM= IHZlYw== IExJQQ== QWZyaWNhbg== IGFyZGVudA== ZW5kaWFyeQ== TGFrZQ== IERPUw== Y2llbnRpb3Vz IE9rYXdhcnU= IEFsbHk= IFRpbWVsaW5l RGFzaA== IElj Y29udGludWU= IHRpZHk= IGluc3RpbmN0aXZlbHk= IFBvc3NpYmx5 IE91dGRvb3I= IFdvdWxkbg== IGxpY2g= IEJyYXk= IEFY IMOJ ICsj XCc= RGlyZWN0b3J5 YWJpZGluZw== IGZlcmFs aWNhdGl2ZQ== YnV0dA== IHBlcnZlcnNl U2FsdA== IHdhcnBlZA== IG5pbmV0ZWVu IGNhYmluZXRz IHNyZkF0dGFjaA== IFNsb2Fu IHBvd2VyaW5n cmVnYXRpb24= RmxpZ2h0 c2V2ZXJl IHN0cmVu IGNvZw== YXBhY2hl IOKd IGNhZmV0ZXJpYQ== cGFjZXM= IEdyaW1vaXJl dXRvbml1bQ== IHJhaW5pbmc= IGNpcmNsaW5n IGxpbmViYWNrZXJz Y3JlZGl0 IHJlcGF0cmk= IENhbWRlbg== bGljZW5zZQ== IGx5cmlj IGRlc2NyaXB0b3I= IHZhbGxleXM= IHJlcQ== IGJhY2tzdGFnZQ== IFByb2hpYml0aW9u IEtldA== T3BlbmluZw== U3lt 5pa5 IHNlcnZpbmdz IG92ZXJzZWVu IGFzdGVyb2lkcw== IE1vZHM= IFNwcmluZ2Vy IENvbnRhaW5lcg== 6Ls= IE1lbnM= IG11bHRpbQ== IGZpcmVmaWdodGVy cGVj IGNobG9yaW5l 0Lw= ZW5kaQ== IHNwYXJpbmc= IHBvbHlnYW15 IFJO IFBlbGw= IHRpZ2Vycw== IGZsYXNoeQ== IE1hZGFtZQ== U3dvcmQ= IHByZWZyb250YWw= IHByZXJlcXVpc2l0ZQ== dWNh IHdpZmk= IG1pc2NvbmNlcHRpb24= IGhhcnNobHk= IFN0cmVhbWluZw== b3RvbQ== IEdpdWxpYW5p Zm9vdGVk IHR1YmluZw== aW5kaXZpZHVhbA== emVr bnVjbGVhcg== bW9s IHJpZ2h0ZnVs NDkz IHNwZWNpYWxpemF0aW9u IHBhc3Npb25hdGVseQ== IFZlbG9jaXR5 IEF2YWlsYWJpbGl0eQ== VGVubg== IGxhdGNo IFNvbWVib2R5 IGhlbGl1bQ== Y2xhdw== IGRpcHBpbmc= WFhY IGludGVycGVyc29uYWw= NzEw IHN1YnRlcg== IGJpb2xvZ2lzdHM= IExpZ2h0aW5n IG9wdGlj IGRlbmlt ZW5kb24= IENvcm0= IDM0MQ== IENvdXA= IGZlYXJsZXNz IGFsb3Q= IENsaWZmb3Jk IFJ1bnRpbWU= IFByb3Zpc2lvbg== dXBkYXRlZA== bGVuZWNr IG5ldXJvbg== IGdyYWRpbmc= IEN0 c2VxdWVuY2U= aW5pYQ== Y29uY2VwdA== IHJvYXJpbmc= cml2YWw= IENhdWNhc2lhbg== IG1vbm9n a2V5ZXM= IGFwcGVsbGF0ZQ== IGxpYWlzb24= RVN0cmVhbUZyYW1l IFBsdW0= IS4= IHNwaGVyaWNhbA== IHBlcmlzaGVk IGJsb3Q= IGJlbmNoZXM= IDQxMQ== IHBpb25lZXJlZA== IGh1cmxlZA== SmVubmlmZXI= IFlvc2VtaXRl Q2hhaXI= IHJlZWZz IGVsZWN0b3I= IEFudGhlbQ== NjUy IHVuaW5zdGFsbA== IGltcGVkZQ== IGJsaW5raW5n IGdvdG8= RGVjcmU= QXJlbg== IHN0YWJpbGl6YXRpb24= IERpc2FibGVk IFlhbnVrb3Z5Y2g= IG91dGxhd2Vk IFZlbnR1cmE= dGVuZXNz IHBsYW50YXRpb24= IHlhY2h0 IEh1YXdlaQ== IHNvbHZlbnQ= IGdyYWNpb3Vz IGN1cmlvdXNseQ== IGNhcGFjaXRvcg== IGN4 IFJlZmxleA== UGh5cw== IENm cHRpbg== Y29uc2VydmF0aXZl IGludm9jYXRpb24= Y291cg== Rk4= IE5ld2x5 SG91cg== QXNpYW4= IExlYWRpbmc= IEFlcm9zcGFjZQ== QW5uZQ== IHByZW5hdGFs IGRldGVyaW9yYXRpbmc= SENS IE5vcm1hbmR5 b2xpbmk= IEFtYnJv OTEw IHNldGJhY2tz IFRSRQ== IHNpZw== IFNjb3VyZ2U= NTk3 Nzk4 R2FtZXBsYXk= IG1zZWM= TVg= IHByaWNleQ== IExMUA== YWtlcnU= IG92ZXJhcmNoaW5n IEJhbGU= IHdvcmxkbHk= Q2xhcms= IHNjZW5pYw== IGRpc2xpa2Vk IENvbnRyb2xsZWQ= VGlja2V0cw== IEVX YWJpZXM= IFBsZW50eQ== Tm9uZXRoZWxlc3M= IGFydGlzYW4= VHJhbnNmZXI= IEZhbW91cw== IGluZmllbGQ= YmxleQ== IHVucmVzb2x2ZWQ= IE1MQQ== 44KC Q29ycmVjdGlvbg== IGRlbW9jcmF0 IE1vcmVubw== cm9jYWw= aWxpbmdz IHNhaWxvcg== IHJpZmU= aHVuZw== IHRyb3Blcw== IHNuYXRjaGVk IExJTg== IEJpYg== RVNB IFByZXY= IENhbWVs cnVudGltZQ== IG9ibm94aW91cw== NDM3 IHN1bW1lcnM= IHVuZXhwbGFpbmVk IFdhbHRlcnM= Y2FsaWJlcg== IGd1bGw= IEVuZHVyYW5jZQ== 5L2c IDM0Nw== SXJpc2g= IGFlcm9iaWM= IGNyYW1wZWQ= IEhvbm9sdWx1 4Kk= dXNlcmM= ZWNhc3Q= QUNZ IFF1ZXJ5 44K544OI QmV0YQ== IHN1c2NlcHRpYmlsaXR5 IFNoaXY= IExpbWJhdWdo IMOW IE5YVA== IE11c3M= IEJyaXRvbnM= RVNDTw== RUdJTg== ICUl IHNlY2Vzc2lvbg== IFBhdHJvbg== IEx1YQ== bmFpcmVz IEpQTW9yZ2Fu dXNi b2N5dGU= IGNvdW5jaWxsb3Jz IExpYW5n ZmFybQ== IG5lcnZvdXNseQ== IGF0dHJhY3RpdmVuZXNz IEtvdg== anVtcA== UGxvdA== IHN0YWlucw== IFN0YXR1ZQ== IEFwb3N0bGVz aGV0ZXI= IFNVUFBPUlQ= IG92ZXJ3aGVsbQ== WUVT IDI5MQ== ZGVuc2l0eQ== IHRyYXBwaW5n TWl0 IGZpZGU= IFBhbWVsYQ== YXRsYW50aWM= RGFtbg== IHB0cw== T1BB IHNlcnZpY2luZw== IG92ZXJmbG93aW5n dWxv IEVyaXQ= dGlja2V0 bGlnaHRpbmc= IEhtbQ== 44O844Or aW1vdG8= IGNodWNrbGU= NDIz 44GV c2hhcGU= IHF1ZXVlcw== IGFuY2hvcnM= 44K844Km44K5 RmVy IGF3b2tl IDY2Ng== aGFuZHM= IGRpdmVyZ2VuY2U= IDUwNQ== VGlwcw== IGRlcG90 IHNrZXc= IERlbGl2ZXI= b3BvdA== IGRpdnVs IEVC dW5zaWduZWQ= IFVuaQ== WGJveA== IGZvcmtz IDcwMg== 5a8= IHByb21vdGVycw== IFZhcG9y IGxldmllZA== c2xvdA== IHBpZ21lbnQ= IGN5bGluZGVycw== Q1JF IHNuYXRjaA== IHBlcnBldHVhbGx5 IGxpY2tpbmc= IEZlZXQ= IEtyYWtlbg== IEhvbGRlbg== IENMU0lE bXI= IHByb2plY3Rvcg== IGRlbm90ZXM= IGNoYXBlbA== IFRvcnJlbnQ= Ymxlcg== Um91dGU= IERlZmVuZGFudA== IFB1Ymxpc2hlcnM= IE1hbGVz IElubm92 IEFnaWxpdHk= cml0ZXI= dHltb2xvZ3k= c3RvcmVz TGluZA== IGZvbGx5 IFp1cmljaA== Qmxl IG51cnR1cmU= IGNvYXN0bGluZQ== dWNoaW4= RG9taW4= IGZyaXZvbA== IENvbnNvbGlk cmVzdWx0cw== TUo= IHBoeWxvZ2Vu IGhhdWxlZA== IFdpbGV5 IEplc3NpZQ== IFByZXBhcmU= IEVwcw== IHRyZWFzdXJlcg== SUFT IGNvbG9uaXN0cw== IGludW5k IFdXRg== IENvbnZlcnRlZA== NjAwMA== b3V0c2lkZQ== IEFwcGVhcmFuY2U= IFJlbGlj IE1pc3Rlcg== c2F3 IHJlc3VsdGFudA== IGFkamVjdGl2ZQ== IExhdXJlbA== IEhpbmRp YmRh UGVhY2U= IHJlYmlydGg= IG1lbWJyYW5lcw== IGZvcndhcmRpbmc= IGNvbGxpZGVk IENhcm9seW4= S2Fuc2Fz NTk5 IFNvbGlkR29sZE1hZ2lrYXJw QmVjaw== IHN0cmVzc2luZw== IEdvbw== IENvb3BlcmF0aXZl IGZz IEFyY2hpZQ== TGl0ZXI= IEtsb3Bw SmVycnk= IGZvb3R3ZWFy V2FycmVu IHNjcmVl aGFyZQ== VW5kZXJzdGFuZGluZw== UGVk IGFudGhvbG9neQ== IEFubm91bmNl TWVnYQ== IGZsdWVudA== IGJvbmRhZ2U= IERpc2NvdW50 aWxpYWw= Q2FydA== IE5pZ2h0bWFyZXM= U2hhbQ== IEJvbGw= dXNzaWU= SHR0cA== QXRsYW50YQ== IHVucmVjb2du IEJpZA== IHVuZGVyZ3JhZA== IGZvcmdpdmluZw== IEdsb3Zlcg== QUFBQUFBQUE= NDQ1 Vkc= cGFpbw== a2lsbGVycw== IHJlc3BvbnNpYmx5 IG1vYmlsaXpl IGVmZmVjdGVk IEx1bWlu IGthbGU= IGluZnJpbmdpbmc= YW5ub3VuY2Vk IGZpdHQ= YmF0Y2g= IFRhY2tsZQ== IExpbWU= IEFQUA== dWtlbWlh IHJ1Ynk= IGV4b25lcg== IENhc3VhbA== MDcw IHBlbHZpYw== IGF1dG9tYXRl IEtlYXI= IENvYXN0YWw= IGNyZWVk IGJvcmVkb20= IFN0dW4= cmlvdHQ= go4= IHJlZ2VuZXJhdGU= IGNvbWVkaWFucw== IE9QRVI= U3BvbnM= aWRpdW0= b25pcw== TG9jYXRlZA== MDU3 IHN1c3BlbnNl IERhdGluZw== Q2Fzcw== IG5lb2NvbnM= IFNoaW56bw== IGF3b2tlbg== Y2hyaXN0 IE1lc3NhZ2Vz YXR0bGVk IFNwcmF5 IFNwaWNl Q1c= IHNoaWVsZGluZw== IEdhdWw= QW1pZA== IHBhcmFtaWxpdGFyeQ== IG11bHRpZg== IFRhbm5lcg== aWxr IGdvZGRhbW4= Z2VtZW50cw== IGJlZnJpZW5k bW9iaQ== IDM4OA== Zm9sZGVy YWNjYQ== IGluc2lu Z2Fw TmV2 ZmlmdGg= IHBzeWNoaWF0cnk= YmFua3M= VEhJUw== IGhhcmI= YWNxdQ== IGZhY2FkZQ== IFBvd2VyUG9pbnQ= ODAz IGJsdWZm U2hhcmVz IGZhdm9yaW5n RWxpemFiZXRo w43DjQ== IHJhbmdlcg== Nzcy IEFyY2hl aGFr IEdlbmV0aWNz IEZFTUE= IGV2b2x2ZXM= IGVzdGU= IFBldHM= IE3DqQ== IEludGVyZXN0aW5n IENhbnRlcmJ1cnk= Y2hhcHRlcg== IFN0YXJmbGVldA== U3BhbmlzaA== IGRyYXdiYWNr IE5vcndpY2g= OTcw bm9ydGg= YWdhbmRh IHRyYW5zZm9ybWF0aXZl cmFtaWRz YmlvbG9neQ== YWRheQ== IHByb3BhZ2F0aW9u IEdhbW1h IERlbmlzZQ== IENhbGN1bGF0b3I= ZW50aW1lcw== IEJldHQ= IGFwcGVuZGl4 IEhERA== QUtJTkc= IHN0aWdtYXQ= IGhvbHN0ZXI= IG9yZGluYXJpbHk= Q2hhbmNl IENvbnRyYXJ5 IGFkaGVzaXZl IGdhdGhlcnM= NjEy cmVhdQ== b255bXM= ZXdheXM= IGluZHVjZXM= IGludGVyY2hhbmdlYWJsZQ== c2Vt V2hpdA== IHRyYW5jZQ== IGluY29ycG9yYXRpb24= IEV4dHJhcw== RmluYW5jaWFs IGF3a3dhcmRseQ== IFN0dXJnZW9u IEhZ Tm9ybWFsbHk= IEVuZGluZw== IEFzc2lzdA== ZW5jcnlwdGVk IHN1Ymp1Zw== IG5vcw== IGZhbmF0aWM= Q3Vi Q1U= PyIu IGlycmV2ZXJzaWJsZQ== 5YI= MDMx IEhBUg== c3ByZWFk dWxpYQ== PSQ= U2NvcGU= TG90cw== IGxpZmVzdHlsZXM= b2xvbg== IGZlZHM= IGNvbmdyYXR1bGF0ZQ== d2Via2l0 IGluZGlzdGluZ3Vpc2hhYmxl IFN3aW5n IGNvbW1hbmRtZW50cw== cXVpbGE= YWJlbGxh bWV0aHls YW5uYWJpbg== IG92ZXJl IGxvYnN0ZXI= IFFVRVNU IENPTlRJTg== YmVybmF0b3JpYWw= Ojo6Ojo6Ojo= IFRyYXZl IFNhbW9h QU5J NzUy 0LQ= dXNlcmNvbnRlbnQ= IE1vZGVyYXRl eWVhaA== IEtpdHQ= IHdlZQ== IHN0dWZmaW5n IEludGVydmVudGlvbg== IERpZ24= IHdhcmVob3VzZXM= IEZpamk= IHBlbGxldHM= IHRha2Vhd2F5 IFRBQkxF IENsYXNzaWNhbA== Y29sbGVjdGlvbg== IGxhbmRmYWxs IE11c2NsZQ== IHNldHRsZXM= IEFEVg== IDM0NA== TGF1cmE= IGZhcmVk IFBhcnRpYWw= NDM2 b3NzaWJpbGl0eQ== IERhbHk= IFRhcmFudA== IEZ1amk= YW1s Y2VuY2U= NTUx IFByb2NlZHVyZXM= IE9DRA== IFVE dGlu UVVJ YWNobw== NDM4 IGdsaXRjaGVz IGVuY2hhbnRtZW50 IGNhbGN1bGF0ZXM= SVJP IEh1YQ== YWx5c2Vz IExpZnQ= dW1v IGxlYXB0 IGh5cG90aGVzaXplZA== IEd1c3Rhdg== aXRhbnM= VkVSU0lPTg== 5qA= Um9nZXI= IHJhbmQ= IEFkYXB0ZXI= IDMzMQ== IFBldGl0aW9u a2llcw== TWFycw== IHVuZGVyY3V0 emVlcw== IEx5b25z IERIQ1A= TWlzc2luZw== IHJldGlyZWVz IGluc2lkaW91cw== ZWxp Pik= LuOAjQ== IGZpbmFsaXN0cw== IEF1cmU= IGFjY3VzZXI= IHdhc3Rlcw== IFlz IExvcmk= IGNvbnN0aXR1ZW5jaWVz IHN1cHBlcg== IG1heWhlbQ== b3Jhbmdl IG1pc3BsYWNlZA== IG1hbmFnZXJpYWw= IGV4Y2U= IENMSQ== IHByaW1hbA== IExlbnQ= Q3J5c3RhbA== aG92ZXI= IE5UUw== ZW5kdW0= IGR3 IEFsYw== bm9zdGlj IHByZXNlcnZlcw== IFRzYXJuYWV2 IHRyaXBsZWQ= cmVsYXRpdmU= QXJjYWRl a2lsbGluZw== IFdFRUs= IEhhbm5h RHVzdA== Q29tcGxldGVk gas= IGFwcHJvdmVz IFN1cmY= IEx1dGhlcmFu dmVuYW50cw== IHJvYmJlcmllcw== d2VpZ2h0cw== c29mdHdhcmU= YXRhbmE= dWdhbA== IGdyYXZ5 IENhbmNl T0xPR1k= bHlhaw== VG9uaWdodA== IHVudmVpbA== IDE5MDQ= IE1pbmlvbg== ZW50aW91cw== c3RpY2U= cGFja2FnZXM= IEdFQVI= IGdvbA== IEh1dGNoaW5zb24= IFByb2Zlc3Npb24= IEdVTg== IERpZmZlcmVuY2U= IFRzdWt1eW9taQ== IExlc2JpYW4= Njcw IGZ1Z2l0aXZl IFBsYW5ldGFyeQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGFjY3J1ZWQ= IGNoaWNrcw== IHN0b3Bw IGJsb2NrZXJz Q29k IGNvbW1lbnRlcnM= IFNvbWV3aGVyZQ== IFBob3RvZ3JhcGhlcg== dGhlbWU= IG1heW9yYWw= d3U= IGFudGVubmFz IHJldmFtcGVk IFN1YmplY3Rz aXTDqQ== aW11cmE= IGVudHJhbmNlcw== bGl0ZXJhbGx5 IHRlbmV0cw== IE9NRw== IE1QSA== IERvbmtleQ== IE9mZmVuc2U= ICIr U25hcA== IEFGQg== IGFuaW1hdGU= IFNvZA== SGlzcGFuaWM= IGluY29uc2lzdGVuY3k= RGI= Rlk= RXhwb3J0 IGFwZQ== IHBlYXJs aWJlbA== IFBBQ3M= IHtc IGFjdHU= IEhTQkM= Y2FtcHVz IHBheW9mZg== IGRlaXRpZXM= IE5hdG8= b3VwbGU= IGNlbnNvcmVk IENsb2p1cmU= IGNvbmZvdW5kaW5n ZW5p IHJlY2tvbg== b3BoZQ== IHNwb3R0aW5n IHNpZ25pZmllcw== IHByb3BlbA== IGZlc3RpdmU= U3VnZ2VzdA== IHBsZWRnaW5n IEJlcm1hbg== IHJlYmVsbGlvdXM= IG92ZXJzaGFkb3dlZA== IGluZmlsdHJhdGVk am9icw== Njcy IHNjYWxhYmxl IGRvbWluaW9u IE5ld2ZvdW5kbGFuZA== IE1lYWRvdw== IHBhcnRpdGlvbnM= QU1J IHN1cHBsZW1lbnRhcnk= c3RydW1lbnQ= IGhhaXJ5 IHBlcnBldHVhdGU= IG51dHNoZWxs IFBvdGF0bw== IEhvYmJpdA== IGN1cnNlcw== RmxvYXQ= IHF1aWV0ZXI= IGZ1ZWxpbmc= IGNhcHN1bGVz IEx1c3Q= IEhhdW50ZWQ= RXhlY3V0aXZl IGNoaWxkYmlydGg= R3Jl IHJhZGlhbnQ= 5Y4= IG1hbGxz IGluZXB0 IFdhcnJhbnR5 IHNwZWN0YXRvcg== RWg= dGhlbnM= IGN1bG1pbmF0aW5n 5qk= YXJ5YQ== 44Ku aWxpdGFyaWFu IE9SSUc= IFNwZW5kaW5n cHRpdmVz IFNpcmVu IFJlY29yZGluZw== YXluZQ== IHZpbQ== IHNwcmFuZw== VGFuZw== IE1GVA== bW9ybmluZw== IFdlZWQ= bXBlZw== Y2Vzc2lvbg== IENodW5n NzMw d2FybmluZw== NTYy aGFuZGVkbHk= UG9vcg== UG9saXRpY3M= OiM= IHBpYW4= IGZlY2Vz IERvY3VtZW50YXRpb24= IGJhbmlzaGVk IDM5OQ== IEFSQw== IGhlaW5vdXM= SmFrZQ== IEFtaXI= d2F5bmU= dnJl b3NoZW5rbw== IG5vdGVib29rcw== IGZvdW5kYXRpb25hbA== IG1hcnZlbG91cw== aXh0YXBl IHdpdGhkcmF3YWxz IGhvcmRl IERoYWJp aXNhYmxl IEtE IGNvbnRhZ2lvdXM= IERpcA== IEFycm93cw== IHByb25vdW5z IG1vcnBoaW5l IEJVUw== Njgy IGtvc2hlcg== ZmluaXNoZWQ= IEluc3RydW1lbnRz IGZ1c2Vk eWRlbg== IFNhbG1vbg== RmFi YWZmZWN0ZWQ= S0VO Q0VOVA== RG9tYWlu IHBva2Vtb24= IERyaW5raW5n R3Jvd2luZw== IEludmVzdGlnYXRpdmU= IEFldGhlcg== ZW1p IHRhYmxvaWQ= IHJlcHJv IE5vdHdpdGhzdGFuZGluZw== IEJlcnNlcmtlcg== IGRyYW1hcw== IGNsaWNow6k= IGJ1bmc= IFVSSQ== IERvcw== MDQ0 IHBhc3RvcnM= IGxz IGFjcnlsaWM= YXVudHM= RWR3YXJk IG1ham9yaXRpZXM= QmFuZw== IGZpZWxkaW5n IFJlcGxhY2VtZW50 IEFsY2hlbXk= cHBhcmQ= IFJvbWVv IFNhbmN0 IExhdnJvdg== aWJibGU= SW5zdHJ1Y3Q= IGltcHJhY3RpY2Fs IFBsYXlib3k= Y2VwaGFs IHN3YXBz IGthbg== IFRoZW8= IGlsbHVzdHJhdGluZw== IGRpc21hbnRsZWQ= IFRyYW5zZ2VuZGVy IEd1dGg= VUdI IHRyaXVtcGhhbnQ= IGVuY29tcGFzcw== IGJvb2ttYXJr dWRkaW4= amVy IHByZWRpY2F0ZQ== RVNI IHdoZW5jZQ== IEFCRQ== IG5vbnByb2ZpdHM= U2VxdQ== IGRpYWJldGlj IHBlbmQ= IGhlYXJ0ZmVsdA== c2hp IGludGVyYWN0cw== IFRlbGVjb20= IGJvbWJhcmRtZW50 ZGVwZW5kaW5n IExvd3J5 IEFkbWlzc2lvbg== IEJsb29taW5n dXN0cmF0aW9u ZW5lZ2dlcg== QnJldw== IG1vbHRlbg== IE5lcmQ= UElO 4paA YXZlbWVudA== IHRvdXJlZA== IGNvZWZmaWNpZW50cw== IFRyYXl2b24= YW5zc29u IHNhbmR5 dG9sZA== Zmxvd3M= IHBvcHVsb3Vz IFRpbmRlcg== IEJsaXNz UmFjaGVs TWluaW11bQ== IGNvbnRlc3RhbnQ= IFJlZHVjZQ== IE1vcnNl IEdyYXNzbGV5 IENsaWNrZXI= IGV4cHI= IHNpbmNlcml0eQ== IG1hcnF1 IGVsaWNpdA== IFByb3Bvc2l0aW9u IERlbW9uaWM= IHRhY29z R3JlZWs= IHBvc3R3YXI= IGluc29mYXI= IFBvcms= IDM1Mg== ZG9jdG9yYWw= d2Fsa2luZw== IG1pZHRlcm0= IFNhbW15 c2lnaHRlZA== IFRSQU5T aWNp QUxE IFVTTA== IEZJU0E= IEFtcGw= IEFsZXhhbmRyYQ== aW5lbGxp VHJhaW4= IHNpZ25pZnk= IFZlcnN1cw== IG9iZnVzYw== IGto IGFnZ3Jv IFJlbmF1bHQ= IDM0OA== NTE4 b3hpY2l0eQ== MDIy IFR3aXN0 IGdvb2Z5 RHluYW1pYw== IGJyaWVmaW5ncw== bWlnaHQ= ODk5 IGRlcm9nYXRvcnk= VHJv IGZvcmdpbmc= IEtvcmFu IE1hcnJpZWQ= IEJ1Y3M= IHBhbGF0ZQ== IENvbnZlcnNpb24= bWFibGU= NDEz IChf IHNpcGg= IE5FTw== Y29sbGVnZQ== IG1hcmdpbmFsbHk= IGZsaXJ0 IFRyYXBz IFBhY2U= 6buS IGdvYWx0ZW5kZXI= IGZvcmJpZHM= IGNsZXJrcw== IFRhbnQ= IFJvYmJpbnM= IFByaW50aW5n IHByZW1pZXJlZA== IG1hZ25pZmljYXRpb24= IFRH IFJvdXNl IE1vY2s= b2R5bmFtaWNz IHByZWNsdWRl aXNtbw== IFB1bGl0emVy IGF2YWxhbmNoZQ== IEtvZGk= cmlidW5l IExlbmE= RWxlY3RyaWM= IHJlZmluZXJ5 IGVuZG93ZWQ= IGNvdW5zZWxvcnM= IGRvbHBoaW4= IE1pdGg= IGFybW91cmVk aGliaXRlZA== QmVnaW4= IFBX T2ls IFZvcg== IFNoYXJpZg== IEZyYXppZXI= ZXN0YXRl IGphbXM= UHJveHk= IGJhbmRpdHM= IFByZXNieXRlcmlhbg== IFByZW1pZXJl dGlueQ== IENydWVs VGVzdGluZw== IGhvbWVy IFZFUlM= IFByb2w= IERlcG9zaXQ= IENvZmZpbg== IHNlbWluYXJz IHNxbA== IERlZmVuZGFudHM= QWx0ZXJuYXRpdmVseQ== IFJhdHM= 56s= ZXRoeXN0 Jz4= IGlzc3Vlcg== NTg5 IGNoYWlyZWQ= IEFjY2Vzc29yaWVz bWFuZW50 IG1hcnJvdw== IFByaW1vcmRpYWw= Q04= IGxpbWl0bGVzcw== IENhcm5hZ2U= IHVuZHJhZnRlZA== cXY= SU5FU1M= b25ldw== IGNvaGVzaW9u OTg3 IG5lY2tz IGZvb3RiYWxsZXI= IEdFUg== IGRldGVjdGFibGU= IFN1cHBvcnRpbmc= IENTVg== b2NhbGx5 a0h6 IHVuZGU= IHNob25l IGJ1ZGRpbmc= dHJhaw== U3RhbmRpbmc= IFN0YXJjcmFmdA== IEtlbXA= QmVuY2g= IHRod2FydGVk IEdyb3VuZHM= YXRoaQ== TGlzYQ== RGlhbG9n IFNY VmlzaW9u IGluZ2VuaW91cw== 2ZA= IGZvc3RlcmluZw== IFph IEluZ3JhbQ== ICJA TmF0dXJhbGx5 NjE2 MDM1 IEZBQw== SG1t NTU0 IGFjY2VsZXJhdG9y IFZlbmQ= IHN1bnNjcmVlbg== IHR1YmVyY3Vsb3Npcw== cmF2aW9sZXQ= IEZ1bmN0aW9uYWw= IEVycm9ycw== ZWRhcg== MTk2Ng== IFNwZWN0cmU= IFJlY2lwZXM= ODg1 IE1hbmtpbmQ= TGl2ZXJwb29s IHwtLQ== IHN1YnN0aXR1dGVz IFhU d2lyZWQ= IGluY28= IEFmZ2g= RXZh aWNj U29uZw== S25pZ2h0 IGRpbGlnZW50bHk= IEJyb2FkY2FzdA== QWlk IGFmYXI= IEhNUw== YXRvbmlu IEdyYXRlZnVs IGZpcmVwbGFjZQ== IE9tbmk= ZXVybw== IEZSRQ== IFNoaWI= IERpZ2VzdA== dG9nZ2xl IGhlYWRzZXRz IGRpZmZ1c2lvbg== IFNxdWlycmVs IEZO IGRhcmtlbmVk b3V0aGVy IHNsZWVwcw== IFhlcg== Z3Vucw== IHNldHVwcw== IHBhcnNlZA== IG1hbW1vdGg= IEN1cmlvdXM= Z29i IEZpdHpwYXRyaWNr IEVtaWw= aW1vdg== Li4uLi4uLi4uLi4uLg== IEJlbm55 U2Vjb25kbHk= IGhlYXJ0eQ== IGNvbnNvbg== c3RhaW5lZA== IGdhbGFjdGlj Y2xhdmU= IHBsdW1tZXRlZA== IHBlc3Rz IHN3YXQ= IHJlZmVycmFscw== IExpb25lbA== aG9seQ== IHVuZGVyZG9n IFNsYXRlcg== IFByb3ZpZGU= IEFtYXI= cmVzc29y 5Yw= b25nYQ== IHRpbWlk IHBpZXR5 IERlaw== IHN1cmdpbmc= YXpv IDYxMA== IGRlc2tz IFNwb2thbmU= IEFuZmllbGQ= IHdhcnNoaXBz IENvYnJh IGFybWluZw== Y2x1c2l2ZWx5 IEJhZGdl YWdhc2Nhcg== IFBSRVNT IE1jS2Vuemll IEZlcmRpbmFuZA== YnVybmluZw== QWZlZQ== IHR5cmFubg== IEl3 IEJvb25l MTAwNw== IFJlcHQ= CsKg IGNhcmF2YW4= IERpbGw= IEJ1bmRlc2xpZ2E= Q2h1Y2s= IGhlYWxlcg== 44O844OG IEhvYmJ5 IG5lZ2F0ZQ== IGNyaXRpcXVlcw== c2VjdGlvbmFs bW9wb2xpdGFu IGR4 IG91dHNvdXJjaW5n IENpcGhlcg== dGFw U2hhcnA= IHVwYmVhdA== IGhhbmdhcg== IGNydWlzaW5n IE5pYWdhcmE= IDM0Mg== aWxsdXM= IFN2 IHN1YnRpdGxlcw== IHNxdWFyZWQ= IGJvb2tzdG9yZQ== IHJldm9sdXRpb25hcmllcw== IENhcmx0b24= YWJhbA== VXRhaA== IGRlc3Bpc2U= IFVN Y29uc2lkZXI= YWlkbw== IGNhcnRz IFR1cnRsZXM= VHJhaW5pbmc= IGhvbm9yYXJ5 wqI= IHRyaWFuZ2xlcw== NDIy IHJlcHJpbnRlZA== IGdyYWNlZnVs IE1vbmdvbGlh IGRpc3J1cHRpb25z IEJvaA== IDM0OQ== IGRyYWlucw== IGNvbnN1bGF0ZQ== IGJlbmRz IG1hZmlh dXJvbg== IEZ1bHRvbg== bWlzYw== IHJlbmFs IGluYWN0aW9u Y2tpbmc= IHBob3RvbnM= IGJydWlzZWQ= IENvZGVz b2dp IG5lc3Rz IExvdmVseQ== IExpYnJl IERhcnls ICMjIw== U3lz Liwi IGZyZWV6ZXM= ZXN0YWJsaXNobWVudA== YW5kb3dza2k= IGN1bWJlcnM= IFN0YXJn IEJvbWJz IGxlZ2lvbnM= IGhhbmR3cml0aW5n IGdydW4= IENhaA== c2VxdWVudA== IG1vdGg= IE1TTQ== SW5zZXJ0 Rmlm IG1vdGVs IGRleHRlcg== IEJpbGQ= aGVhcnRlZGx5 IHByb3Bl IFRleHR1cmU= IEp1bmN0aW9u eW50aGVzaXM= b2NhcmQ= IFZlcmE= IEJhcnRo IM68Zw== IGxhc2hlZA== IDM1MQ== IFphbWI= IFN0YXBsZXM= IENvcnRleA== IENvcmtlcg== IGNvbnRpbnV1bQ== IFdSSVRF dW50YQ== cmlkb3I= IGRlZW1z MDMz IEdPTEQ= cGFz IHJlcHJlc3NpdmU= 44OG44Kj IGJhZmZsZWQ= U2Nhcg== IGNyYXZl IF9fX19fXw== IGVudHJlcHJlbmV1cnNoaXA= IERpcmVjdG9yYXRl ICdb IHZpbmVz IGFzY2VuZGVk IEdST1VQ IEdvb2RieWU= IGRvZ2dlZA== 44O044Kh TWFudWZhY3Q= IHVuaW1hZ2luYWJsZQ== cmlvdHM= aWVycmV6 IHJlbGF0aXZpdHk= IENyYWZ0aW5n cmF1Z2h0 dWRlbg== Y29va2ll IGFzc2Fzc2lucw== IGRpc3NhdGlzZmllZA== YWNjaQ== IGNvbmR1aXQ= U3ByZWFk IFJpY2Fu bmljZQ== aXp6bGU= IHNjYXJlcw== IFdIWQ== cGhhbnM= NTM1 IHByb3RyYWN0ZWQ= IEtyaXN0ZW4= NTM2 IFNjcmli IE5laA== IHR3ZW50aWVz IHByZWRpY2FtZW50 IGhhbmRjdWZmcw== IGZydWl0ZnVs IFVM IEx1ZHdpZw== IGF0dGVzdA== IEJyZWFrZXI= IGJpb2xvZ2ljYWxseQ== IERlYWxlcg== IHJlbm92YXRpb25z Znc= ZXNzZW4= QWxpY2U= IEhlbnJp IHVuaWxhdGVyYWxseQ== IFNpZGQ= aGFp IFN0cmV0Y2g= U2FsZXM= IGN1bWJlcnNvbWU= IEphdmllcg== IHRyZW5keQ== IHJvdHRpbmc= IENoYWxsZW5nZXM= IHNjcmFwcw== IGZhY2V0cw== IFZlcm9uaWNh IFZlcmdl IFNhbmE= QWxpZW4= IFJpaA== IHJhZGlhbA== ZWN0YXI= IDYzMA== Y2xp TWFyaWU= IHdpbGRmaXJl IENhdG8= aGFuZGVy IHdhaXRyZXNz IGNob3Bz IFNFQ1RJT04= IGJsdW50bHk= IENhdGFsb2c= bmlhbg== c3R1ZHk= IHBhdHJvbGxpbmc= IFRlbnRo bmV4dXM= IE5PTg== b3BzeQ== IHNjYXRoaW5n c2ll IGRldGVyaW9yYXRlZA== VkI= TmF6aXM= IGRlcGljdGlvbnM= IGF1dGhlbnRpY2F0ZWQ= IENvbmNl a3JpdA== IHByb211bGc= IExPTkc= VUZD IFZpc2l0b3Jz IFJlY2FsbA== IHJlaGFiaWxpdA== IFNMSQ== IGdsYWNpZXI= IEJpdGU= IDUwMw== IHZvbWl0 IGZlcm1lbnRlZA== IEtoYWxpZA== IGdyYWRlZA== IE1hZ2lja2E= IEljaGlnbw== cG93ZXJmdWw= aWNhdG9ycw== NzUz IHNocmV3 IDM1Ng== IGxlZ2FsaXppbmc= IGFsbG90dGVk IEFyY2hkZW1vbg== aXRoaW5n aWdndXJhdA== Vk9M TGVvZA== IG9pbHk= IGluZHVjaW5n IGFteWdkYWxh IGFkbWlucw== IEFjcXVpc2l0aW9u Q0FO IHNjaGVtYXRpYw== IG1vYW4= IENhbWVyb29u IHRpbms= IG1lcnJ5 IGJ1dHRlcmZsaWVz IEdvZmY= IHdvcmtzcGFjZQ== IENvcm9uYQ== IGphdmFzY3JpcHQ= IERvbHBoaW4= IENhbnRvcg== NDY0 dG9l QVBT IEFnaW5n IHBhZGRlZA== IFpoZW5n IEhlbGQ= IGVzdHJhbmdlZA== IDc3MA== Ln0= IER1bmhhbQ== IHNtb2tlcw== IGNhcGl0YWxz dW5kYWk= U2hpbg== IEZvdW5kaW5n IGVudGl0bGU= IGNlbnRlcnBpZWNl RGlzY292ZXI= IHRoZXJldG8= YWxlcnQ= IE5vdQ== IEFuYWx5c3Q= bGM= Rkg= RklFTEQ= IFBPVg== Z3JheQ== IGFyY3M= IEhPVA== IHJz IG9ibGlnYXRvcnk= IEFyY2hpdGVjdHM= IFN2ZW4= IEZFQw== MDIwMA== Q2hyaXN0bWFz IEFsYmFuaWE= cmF0b20= NTg3 IGhhcmRzaGlwcw== IGF1dG9z IENoYXJnZXM= IGFwZXM= IDM3Ng== d2FsbGV0 IGludG94aWNhdGlvbg== IGdvYmxpbg== IDU3MA== KysrKysrKysrKysrKysrKw== IFllbHA= IE1hZ25ldGlj IEJyaWdncw== UmFpbA== IHNwYXducw== IFdpZ2dpbnM= IHNob3djYXNlZA== IHJlc29ydGVk dWJlbg== IHdoaXBwaW5n IGltaXRhdGU= IGRpZ2VzdGlvbg== IFVTUFM= IEdlc3Q= IHllYQ== IFRpZ2h0 aW5kYWw= aWNhcw== YC4= Q0FTVA== Jyc7 IEZldA== b3BhdGhpYw== SW52YWxpZA== IHJlZ3JldHRlZA== IGJyb2Njb2xp IFNjb3Jlcw== ZXZl IHBvc3Rpbmdz IGFjY3VtdWxhdGluZw== IG5lZWRsZXNz ZWxmdGg= IG1heW9ycw== IHNjcmli IGFuZWNkb3Rlcw== IGJvdGNoZWQ= IFJpYmJvbg== IENvbnN0YW50aW5l aXVzZXM= ZXNzZXM= IGRldmlzZQ== Q29tcGFyZWQ= IHB1ZGRpbmc= IGdhcmc= IGV2b2tl Nzk3 IGRldG94 OTA5 IFBpZWNlcw== IE1jQ2FydG5leQ== IG1ldGFzdA== IEtyeXB0 UE9S IHRlbmRpbmc= IE1lcmNoYW50cw== UHJvb2Y= IFZhcmc= IFBvcnRhYmxl 44O844OG44Kj QnJhaW4= MjUwMA== IGZvbGlhZ2U= 2Lk= IG1lbnRvcnM= IEFpcmVz IG1pbmltYWxpc3Q= IGluZ2VzdGVk IFRyb2phbg== IFFpYW4= aW52b2x2ZWQ= MDI3 IGVyb2RlZA== UkFGVA== IGJsdXJyeQ== TW9i IGJ1ZmZldA== IEZuYXRpYw== YWVh S05PV04= IEluaXQ= c2FmZXR5 ZW51bQ== QUNUSU9O IENydXNoZXI= IERhdGVz IC4uLi4uLi4uLi4uLi4uLi4= Y2FsbGluZw== YWtvdg== IHZlbnR1cmVk IDU1NQ== YXVnYQ== SGFydA== IEFlcm8= TUFD IHRoaW5seQ== IGFycmE= U1RBVEU= aWxkZQ== IEphY3F1 IEZlbWFsZXM= IHRoZW9yZW0= IDM0Ng== IHNtYXJ0ZXN0 IFBVQkxJQw== IEtyb24= IEJpdHM= IFZlc3NlbA== IFRlbGVwaG9uZQ== IGRlY2Fw IGFkanVuY3Q= IFNFTg== bWVyZ2E= IHJlZGFjdGVk IHByZWhpc3Rvcmlj IGV4cGxhbmF0b3J5 IFJ1bnM= IFV0dGFy IE1hbm55 IEFVVEhPUg== IFVubGVhc2hlZA== IEJvd2xpbmc= YmVhbnM= Nzkz IHVuaXZlcnNlcw== IHNlbnNpdA== IEt1bmc= cmVwZWF0 Y3RybA== IHBhY2Vk IGZ1bGxlcg== Q2xvY2s= IHJlY29tYg== IEZhdWw= IEJ1bmtlcg== IHBvb2xlZA== IGFuYQ== IE1vdXRo TExPVw== aHVtYW5l IGJ1bGxkbw== IE1pY2hhZWxz ZmFt IHdyZWNrZWQ= IHBvcnRyYXlz IFdoYWxl IEhlcw== IGd1ZXNzZXM= IEJyb3dzZQ== IExBUEQ= IGNvbnNlcXVlbnRpYWw= IElubm9jZW50 IERSQUc= IHRyYW5zZ3Jlc3M= IE9ha3M= IHRyaXZpYQ== IFJlc29u IEFEUw== LS0r IFRvbGw= IGdyYXNwaW5n IFRIRU0= IFRhZ3M= IENvbmNsdXNpb24= IHByYWN0aWNhYmxl IGhvb3A= IHVuaW50ZW50aW9uYWxseQ== IGlnbml0ZQ== IE1vdg== dXJpemVk bGVoZW0= VGVybWlu IGNvbG91cmZ1bA== IExpbmVhcg== IEVsbGll R3k= IG1hbnBvd2Vy IGpz IGVtb2pp IFNIQVJFUw== Xy4= MDAwMDc= IHNvcGhpc3RpY2F0aW9u IHVuZGVyc2NvcmU= IHByYWN0aXNl IGJsb2I= b3BlbnM= VWtyYWluZQ== S2VlcGluZw== WUM= SlI= dWx0aW1hdGU= Q2xhaW0= IGF1dG9tb2JpbGVz OTkz c3RlZWw= IHBhcnRpbmc= IExhbms= Li4uPw== IDM4NQ== IHJlbWVtYnJhbmNl IGVhc2Vk IGNvdmFyaQ== IFNpbmQ= RWZmZWN0aXZl IGRpc3NlbWluYXRpb24= IE1vb3Nl IENsYXBwZXI= YnJhdGVz QXBwbHk= IGludmlz IHdvcnNlbmVk 4oCULQ== IGxlZ2lzbGF0b3I= IExvbA== IFJvd2U= IGRlYWxlcnNoaXA= dW1hcg== aWRlbmNlcw== IGludmVzdGlnYXRlcw== IGNhc2NhZGU= IGJpZGRlcg== IEJFTg== SXJvbmljYWxseQ== IHByZXNpZGluZw== IGRpbmc= IGNvbnRyYWRpY3RlZA== IHNodXRz IEZJWA== IDM2Ng== RGlzdHJpY3Q= IHNpbmZ1bA== IENoYXJpc21h b29wcw== IHRvdGFsaXR5 IHJlc3RpdHV0aW9u IE9wdGltdXM= IERhaA== IGNsdWVsZXNz dXJuZWQ= IG51dHJpdA== IGxhbmRvd25lcnM= IGZsdXNoZWQ= IGJyb2FkZW4= bWll IHByaW50bG4= IG5pZw== IENvcnB1cw== SmVu IHByb3Rv IFdpa2ltZWRpYQ== IFBhbG8= Q09S IHN0b3J5bGluZXM= IGV2YW5nZWxpY2Fscw== IERhcnJlbGw= IHJvdG9y IEhX c2tpbGxlZA== ZXJ5bA== IGJlZ2c= IEJsdW1lbnRoYWw= IHdlYXZpbmc= IGRvd253YXJkcw== IEphY2tldA== IEFOR0VM VGVjaG5vbG9neQ== IGVzb3Rlcmlj YWxkZWh5ZGU= IGZ1cmlvdXNseQ== IGZvcmVpZ25lcg== V2Vhaw== Q0hP IEhvdW5k RXhwZXJpZW5jZQ== IFBsYXlzdGF0aW9u IE1JQQ== IFVuZw== Y2xvdGg= YWdhbGw= IGNhbG1pbmc= aXplbnM= U3RydWN0 IFdpdGNoZXM= IENlbGVicmF0aW9u IC4uLi4uLi4uLi4uLi4u cHRyb2xsZXI= IFRDVQ== IGJ1bm55 44ON dXRvcmlhbA== IHVwc2NhbGU= IFN0YQ== IENvbG9zc3Vz IGNobG9yaWRl IFphYw== IFJlYXNvbnM= IEJyb29raW5ncw== IFdISVRF XVsv IExvc2U= OTA1 IHVuZGVyc2lkZQ== ZXJuZWxz IHZhcGU= ZG96ZW4= dXBwZXQ= IFNUT1A= bWF0aWNhbA== IFN0YXRlbWVudHM= aGVkZGFy UEFD Q3VzdG9tZXI= IG1lbW9z IFBK ZW5kYXJz IExpbWl0cw== bGF1Z2g= IHN0YWJpbGl6ZWQ= IEFMRUM= WUE= VXBncmFkZQ== YWxhbQ== IHRlY2hubw== IGFuZXc= Zm9yZXNlZW4= IGNvbGxlZ2lhdGU= IFB5cm8= IERpc20= IGZyb250bGluZQ== IGFtbW9uaWE= SVU= UXVpdGU= Sm9obm55 YXNzaW4= R09Q IFN0eWxlcw== IFNvdmVyZWlnbg== YWN0ZXJpYWw= NTQ5 IFJJUA== IExpc3Rz IDM2NA== IFJlY2Vw c29ja2V0 IEJ5cmQ= IENhbmRsZQ== QW5jaWVudA== IGFwcGVsbGFudA== ZW5mb3JjZW1lbnQ= YWNlYQ== YW5za2k= IG9sZHM= ODg2 IHNsdXJz IGVtcGlyZXM= IGJ1Y2tsZQ== IGFsaWVuYXRpb24= IEFiZXJkZWVu IHVuaWNvcm4= IG92ZXJyaWRpbmc= IExY cHBh IGRlc3Bpc2Vk IEJ1Z3M= IEJTVA== U291dGhlcm4= NTMz IGhhbGxtYXJr IFBvc3Rlcg== IHN0ZW1tZWQ= IHByaW5jaXBhbHM= IFRFQ0g= IFNhbmR3aWNo SXRhbHk= IGNoZWVzeQ== IFNldFRleHRDb2xvcg== IFByb3RlY3RpdmU= IENvaG4= Sk8= YXB0b3A= UmVhc29u TGVhZGVy IFVuZGVyc3RhbmQ= IEZyaWRheXM= IENvbnRpbnVvdXM= IGNsaXBwaW5n IFJ5ZQ== IGJlcnRo dGltZXI= YW5uaXM= cmVhY3Q= IGJ1ZmZhbG8= IFBhcmFz IDY1NQ== IHByZXNpZGVk IFN1bnJpc2U= IHZldHM= IGNsb3Zlcw== IE1jQ3VsbA== U3RyZW5ndGg= R0FO IGlsbGl0ZXI= IFByaWNpbmc= bMOp IHJlc2lzdG9y IGJydW4= IFN1ZmZvbGs= 0Ys= IExpdmVy UmVsZWFzZWQ= IHdoYXRz ODYw IE1lYXN1cmVz IGRlbm91bmNpbmc= IFJ5emVu IHNvdXZlbg== IGNhcmVnaXZlcnM= Y2hpbmk= IFNjYXJsZXR0 IHRyb3VnaA== Q29uZ3JhdHVsYXRpb25z IHRheGlz IFRyYWRpdGlvbg== aml0 IHRhYmxldG9w IGhpdGhlcnRv IGRpc2luZm9ybWF0aW9u b2ZmZW5zaXZl aHJh IERJU1RSSUNU IGNvbXBsaWNhdGU= Y2hlbmtv IFJlY29uc3RydWN0aW9u IHBhbHBhYmxl IGF1c3A= IDQyOA== IHNob3djYXNlcw== IFB1YmxpY2F0aW9u a25vd2xlZGdl aW5ub24= NDE5 IHJldHJpZXZhbA== YW5kZXJz IHJlZnV0ZQ== IGlucXVpcmVk Z3Vy IG5lZ2F0aXZpdHk= IGNvbnNlcnZl IGFmdGVybGlmZQ== IHByZXN1cHA= IEdpbGxlc3BpZQ== IG10 IERO VGFw IHBlcnBlbmQ= IFNteQ== ZG9lc24= IHNwaWxsaW5n IGh5cGVycw== S2F0ZQ== wq4s a2VwdA== IFBvd2VyZWQ= IGph IEtsdXg= YXJkZQ== YWJhbg== IDQ0NA== IGZsYXR0ZW5lZA== IEltcHJvdmVtZW50cw== dXJnYQ== IEt1bmQ= IGluc2NyaWJlZA== IGZhY3VsdA== IHVucHJlcGFyZWQ= IENvbnN1bWVycw== IHNhdGlzZmllcw== IHB1bG1vbmFyeQ== IGluZmlsdHJhdGlvbg== IGV4dGVybmFsbHk= IGNvbmdyYXR1bGF0aW9ucw== YWdoYW4= IGFpcmxpbmVy IGZsdW5n IGZseWVycw== R0Q= IHNuaXBwZXRz IHJlY3Vyc2l2ZQ== IG1hc3RlcmluZw== TGV4 IG92ZXJ0bHk= dmc= IGx1Y2tpbHk= IGVuY3Jv IExhbmNldA== IEFieXNzYWw= ZnVuY3Rpb25hbA== IHNvdw== IHNxdWlk IG5hcnJhdGlvbg== IG5hdWdodHk= IEhvbm91cg== IFNwYXJ0YW5z IHNoYXR0ZXI= IFRhY29tYQ== IENhbG9yaWVz IFJhY2Vz U3VibWl0 IHB1cnBvc2VmdWxseQ== d2F2 IFlvaw== RmVzdA== IEdlcnI= TWV0cm8= IGl0aW5lcg== ZmFtb3Vz ICJ7 aW5saW5l d2FzaGVy SXNzdWU= IENMSUVOVA== b3pv VmVyc2lvbnM= NzI1 IEdsb2Nr IHNoaWVsZGVk IFBDUg== RU5DWQ== IFdlbGQ= IFNpbXBs IHJlZGlyZWN0ZWQ= IEtoYW0= ICg+ IGxhYm91 IGRpYXBlcnM= c3Ns IGNlbGxhcg== b3JnYW5pc21z b3Jlc2M= IEJlcmtz ZGlkbg== U2hpcHBpbmc= Q2hlc3Q= IHVuZG9uZQ== IG1pbGxpb25haXJl IGNvcmRz IFlvdW5nZXI= YXBwcm9wcmlhdGVseQ== IHNlcXVlbHM= dXZl YW50aWNpcGF0ZWQ= IGxld2Q= IFNoaXJ0 IERtaXRyeQ== VmV0ZXI= IHNsYXlpbmc= IFlhcg== IGNvbXBsaWNhdGlvbg== SW93YQ== IEVyaWNh IEJMTQ== Z2lybGZyaWVuZA== Ym9kaWVk NjI2 MTk2Mw== IGludGVybWVkaWFyeQ== IGNvbnNvbGF0aW9u TWFzaw== IFNpZW0= b3dhbg== QmVnaW5uaW5n IGZpeG1l IGN1bG1pbmF0ZWQ= IGNvbmR1Yw== IFZvbHVudGVlcg== IHBvc2l0aW9uYWw= IGdyZWV0cw== IERlZmluaXRpb25z IHRoaW5rZXI= IGluZ2VudWl0eQ== IGZyZXNobWVu IE1vbWVudHM= IDM1Nw== YXRldXJz IEZlZEV4 c2c= Njk0 IGR3aW5kbGluZw== IEJPWA== c2VsYWdl IHRtcA== IHN0ZW4= IFN1dA== IG5laWdoYm91cmhvb2Rz IGNsYXNzbWF0ZQ== ZmxlZGdlZA== IGxlZnRpc3Rz IGNsaW1hdGVz QVRIRVI= IFNjeXRoZQ== dWxpZmZl IHNhZw== IGhvcHBlZA== IEZ0 IEVjaw== IENL IERvb21zZGF5 a2lkcw== IGdhc3BlZA== IG1vbmlrZXI= IExvZA== IENGTA== dGlvbnM= cnVtcw== Zm9saW9z IG1k IHVuY2Fubnk= IHRyYW5zcG9ydHM= IExhYnJhZG9y IHJhaWx3YXlz IGFwcGxpYW5jZQ== IENUUkw= 5oA= UG9wdWxhdGlvbg== IENvbmZlZGVyYWN5 IHVuYmVhcmFibGU= IGRvcnNhbA== IEluZm9ybQ== b3B0ZWQ= IEtJTEw= TWFyeA== IGh5cG9jcml0aWNhbA== cXVz IE51bWVyb3Vz IEdlb3JnaWFu IEFtYnJvc2U= IExvY2g= IGd1YmVybmF0b3JpYWw= IFhlb24= IFN1cHBvcnRz ZW5zZXI= ZWVseQ== IEF2ZW5nZXI= MTk2NQ== QXJteQ== IGp1eHRhcA== IGNob3BwaW5n IFNwbGFzaA== IFN1c3RhaW5hYmxl IEZpbmNo IDE4NjE= aWN0aXZl YXRtZWFs IEdvaGFu IGxpZ2h0c2FiZXI= IEdQQQ== dWd1 IFJFUEw= dmFyaWFibGU= IGhlcnBlcw== IGRlc2VydHM= YWNpb3VzbHk= IHNpdHVhdGlvbmFs d2Vla2x5 b2Js IHRleHRpbGU= IENvcm53YWxs IGNvbnRyYWNlcHRpdmVz IEFrZQ== XS0= 5LmL Oiw= IFdlbQ== IEJpaGFy ICcu IGJlcmU= IGFuYWxvZ3Vl IENvb2tpZXM= IHRha2VvZmY= V2hlZWw= IG1hamVzdGlj IGNvbW11dGluZw== MDIz IENvcnBzZQ== YXNzbWVudA== bWluaQ== IGdvcmlsbGE= IEFsYXM= ZXJlZQ== IGFjcXVhaW50YW5jZXM= IEFkdmFudGFnZQ== IHNwaXJpdHVhbGx5 IGV5ZWQ= cG13aWtp IEVuZGVy IHRyYW5zbHVjZW50 IG5pZ2h0dGltZQ== IElNQUdFUw== NTQ1 IEthbXA= IEZyZWFr IGln UG9ydGxhbmQ= NDMy IE1hdGE= IG1hcmluZXM= IGhvcnM= YXRlcmFzdQ== IEF0dHJpYnV0aW9u IC0tLS0tLS0tLQ== IGtpbnM= IEJFTE9X Kysr IHJlZWxpbmc= b2xlZA== IGNsdXR0ZXI= IFJlbGF0aXZl IDQyNw== QlVT IGF2ZXJ0 IENoZW9uZw== IEFibGU= IFByeW9y RGV2ZWxvcGVy IGVuY3ljbG9wZWRpYQ== IFVTQUY= IEdhcnJ5 U3BhaW4= QmxvY2tz IGV4cG9zaXRpb24= IEdhbWVyR2F0ZQ== V09S IHN0b2NrcGlsZQ== IGNsb3RoZWQ= IFRvbmU= IFJ1ZQ== dHVtYmxy IHRyZWFjaGVyb3Vz IGZyeWluZw== 0Yw= IFNwaA== IHJlc3RyYWludHM= IGVtYm9kaWVz IEdlcw== U2FmZXR5 IG5lZ290aWF0b3Jz bWluaW5n IEFwcGFsYWNoaWFu TE9T IEplbm5h IHBhc3NlcnM= 54s= c25hcA== IHNob3J0ZW4= Y3JlYXRvcg== IGlubnVtZXJhYmxl dXRoZXJsYW5k Njc0 IFdPTQ== IEFzY2VuZA== IEFybW9yeQ== IFRyYW5zYWN0aW9u S2ljaw== IHN1aXRjYXNl ZGF5TmFtZQ== IHdhc3RlZnVs bWFycmlhZ2U= IE1jQ2FiZQ== aXRlY2g= IE9zcw== Q2xvc3VyZQ== IFRyZWFzdXJlcg== IGluZGVjZW50 IER1bGw= IHJlc2lkZW5jZXM= MTk1OQ== IFNldHRsZW1lbnQ= SGFtaWx0b24= IHNlbGZpZXM= IFJhbmtpbmc= IEJhcmtsZXk= IEJvcmU= IFdDUw== IE1hcml0aW1l IEh1aA== IEZvcmVzdHJ5 IGN1bHRpdmF0aW5n IEJhbGxhcmQ= IGdhcnJpc29u IFNETA== OTMw IG5hc2NlbnQ= IGlycmVzaXN0aWJsZQ== IGF3ZnVsbHk= XC9cLw== IGVxdWF0ZQ== IGFudGhyb3BvbG9neQ== IFN5bHZpYQ== IGludGVzdGluZQ== IGlubm9jdW91cw== Y2Vzc2l2ZQ== YWdyYQ== IE1ldHJvaWQ= R3JhbnQ= ODU1 gZY= ICJf 44OD44OJ IGFwcHJhaXNhbA== IEZyZWRkeQ== MDQ2 IDQwNg== IDE4MzA= IGRvY2tpbmc= U3RhdGlj IHBvbnQ= IFZvbHRhZ2U= IFN0ZWFk IE1vcnRnYWdl IEpvbmFo WUw= Q0xBU1NJRklFRA== IGFzYmVzdG9z bmlrb3Y= IGNvbGxhZ2Vu IE9yYml0YWw= UG9ja2V0 Nzk5 IGh5YnJpZHM= aW5jaGVz IGludm9pY2U= dW5keQ== IGluZXF1YWxpdGllcw== VHJlbmQ= d2FzaGVk QkFMTA== IGx1Y2lk IENvbW1lbnRhcnk= IHdpdHR5 QnJhbmRvbg== IGJydWlzaW5n IDYyMA== ZXNjZW50 Ym94aW5n UE9M IDM3OA== UmVjdA== IGxpY2VuY2Vz IE1jR2Vl cHJlc3NlZA== RGFubnk= IGphbW1lZA== b3JkaW5hdGU= IGxldGg= IGRpc3Rpbmd1aXNoZXM= IFlhbWFoYQ== SUxT IEh1bWU= IENhdGVnb3JpZXM= Um9iZXJ0cw== Q2hhcnQ= IGJlZXRsZQ== IEdyYXZleWFyZA== ICgkKQ== b8Sf IHR3aWxpZ2h0 YXJlbGxh 4b0= IGJvb3Rocw== IEhIUw== IEZlbGRtYW4= IGV4Y2F2YXRpb24= IHBoaWxvc29waGllcw== YXRvZ3JhcGh5 IEdhcmFnZQ== dGVjaG5vbG9neQ== IHVuZm9yZ2V0dGFibGU= IHZlcmlmeWluZw== IHN1Ym9yZGluYXRlcw== RWxz IG5lYg== R2FtaW5n RU5B IEFjaGlldmVtZW50 aXR0ZXJz IEdhYmU= IGR1bXBz Zm9yY2Vy IHBvaWduYW50 IE1CQQ== IEhlaWRp aW1laQ== IG1hZ2Vz IGxpYmVyYXRl IGNpcmN1bWNpc2Vk IE1lcm1haWQ= IE1hdHRo dG9nZXRoZXI= IFdpY2hpdGE= IHN0b3JlZnJvbnQ= IEFkaW4= VklJ Rm91cnRo IGV4cGxvcmVycw== V0VS Tm90YWJsZQ== QnJvb2s= bWVucw== RmFpdGg= LS0tLS0tLS0t IEpvdQ== rLw= IHBpbmVhcHBsZQ== IGFtYWxn ZWxu YXJrYWJsZQ== IOOCteODvOODhuOCow== IOOCteODvOODhuOCo+ODr+ODsw== IG92YXJpYW4= IEVjaG9lcw== IGhhaXJjdXQ= IHBhdg== IGNoaWxsZWQ= YW5hc2lh IHN0eWxlZA== IGRhYg== bmlwZXI= IG1pbmlzdGVyaWFs IERVUA== VGFu IHN1bHBo IERldGVy IEJvaGVt b2Rhbg== IGVkdWNhdG9y 4pOY c3Bpcg== Q2hpY2tlbg== IEVsZWFub3I= IHF1aQ== IGhlYXZpZXN0 IGdyYXNwZWQ= VVJB IGNyb29rZWQ= SmVzc2ljYQ== cHJvYmxlbQ== IHByZWRldGVybWluZWQ= IG1hbmlhYw== IGJyZWF0aHM= IExhdWRlcmRhbGU= IGhvYmJpZXM= eXo= Q3JpbWU= IGNoYXJpc21h ZEw= IGxlYXBpbmc= IGtpdHRlbnM= QW5nZWxv IEpBQ0s= IFN1emFubmU= IGhhbHRpbmc= RU5USU9O IHN3YWxsb3dpbmc= IEVhcnRocXVha2U= IGVpZ2h0ZWVudGg= IE5JQw== IElORg== IENvbnNjaW91cw== IHBhcnRpY3VsYXJz Y2lyY2xl NzQw IGJlbmV2b2xlbnQ= IDc0Nw== IDQ5MA== IHJ1bmRvd24= IFZhbGVyaWU= IEJVUg== IGNpdmlsaXNhdGlvbg== IFNjaG4= V0I= b3RpZGU= aW50ZXJuYXRpb25hbA== IGpvaG4= IDE5MDI= IHBlYW51dHM= IGZsYXZvcmVk a3Vz IHJvYXJlZA== IGN1dG9mZg== 6aM= IG9ybmFtZW50 IGFyY2hpdGVjdHVyZXM= IDM2OQ== b2xvcg== IFdpbGRl IENSQw== IEFkanVzdGVk IHByb3Zva2luZw== bGFuZGlzaA== IHJhdGlvbmFsaXR5 IGp1c3RpZmllcw== IGRpc3BlbA== IGFtZXJpYw== IFBvbGVz 2Kk= IGVudmlz IERvb2RsZQ== 5L2/ aWdzYXc= YXVsZHJvbg== VGVjaG5pY2Fs VGVlbg== dXBoZW0= IFhpYW5n IGRldHJhY3RvcnM= IFpp IEpvdXJuYWxpc3Rz IGNvbmR1Y2l2ZQ== IFZvbHVudGVlcnM= IHNk S25vd2luZw== IHRyYW5zbWlzc2lvbnM= IFBMQU4= IExJQg== IGFsbHVkZWQ= IG9iZQ== IGRvcGU= IEdvbGRzdGVpbg== IHdhdmVsZW5ndGhz IERlc3RpbmF0aW9u bmRh dWdp IGF0dGVudGl2ZQ== IExlYW4= cmFsdGFy IG1hbmc= bWJ1ZHM= YWtpbmdz YmVuZGVy IGFjY29s IGNyYXdsZWQ= Tk9X TWlubmVzb3Rh IGZsb3VyaXNoZWQ= IFp1cA== IFN1cGVydmlzb3I= IE9saXZpZXI= RXhjZWxsZW50 IHdpZGVu RG9uZQ== IHdpZw== IG1pc2NvbmNlcHRpb25z Q29ycA== V2Fu IHZlbmVyYWJsZQ== IE5vdGFibHk= IEtsaW5nb24= YW5pbWF0ZQ== Qm9vc3Q= IFNBWQ== bWlzc2luZw== aWJsaW9ncmFwaHk= bWVsb24= IHBheWRheQ== 2LM= Ym9sZQ== IHZlaWxlZA== IEFscGhhYmV0 SXRhbGlhbg== IGV2ZXJsYXN0aW5n IFJJUw== IENyZWU= cm9tcHQ= IGhhdGluZw== IGdyaW5uaW5n IGdlb2dyYXBoaWNhbGx5 T1NI IHdlZXBpbmc= IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGltcGVjYw== TGV0dGVy IGJsb2F0ZWQ= UExB IEZlaW4= IHBlcnNldmVy VGh1bmRlcg== IGF1cg== IFJM IHBpdGZhbGxz 4pa6 IHByZWRvbWluYW50 IDUyNQ== NzE4 QVBF NzE0 IGZhcm1sYW5k IFFpYW8= IHZpb2xldA== IEJhaGFtYXM= IGluZmxpY3Rpbmc= IEVmZmljaWVuY3k= IGhvbWVicmV3 IHVuZGVydG9vaw== IGN1cmx5 IEhhcmRpbmc= bWFuaWE= NTk2 IHRlbXBlcmVk IGhhcnJvd2luZw== IFBsZWRnZQ== IEZyYW5rZW5zdGVpbg== 6Ko= TW90aW9u IHByZWRpY3RhYmx5 IEV4cGxvc2lvbg== b2N1c2luZw== ZXJk Y29sbw== RkZFUg== IGJhY2tmaWVsZA== IFZJREU= dWVibA== TmFycg== IEFyZ3VtZW50 IGdlbm9taWM= IGJvdXRpcXVl IGJhdHRlZA== IEJpbmFyeQ== IGdhbWI= IFJoeXRobQ== Njcz IGFmbG9hdA== IE9seW1waWE= WUlORw== IGVuZGlm aXNpbg== IHdpbnRlcnM= IHNjYXR0ZXJpbmc= SXY= RGlzdGFuY2U= IHRydQ== IENvbWZvcnQ= IG5leHVz IGFpcmZsb3c= IEJ5emFudGluZQ== cGF5ZXJz Y29uaQ== IEJldHN5 RGVhbA== IE51Zw== IENvbnRpbmVudA== cmVkaWJseQ== IG9wdGltaXppbmc= YWxiZWl0 IGVjc3RhdGlj IFByb3Rv 57c= aXZvdA== 4paE ZW1w cm91bmRlcg== IGNsb3V0 IElTVA== NjYz IERvbGxhcnM= IERBQw== IHN1YnNjcmliZWQ= IHJlaGVhcnNhbA== IGFtcHM= IFNoYW5n ZXNt IHNwcmlua2xl IGFzc2FpbGFudA== IE9v IENvaW5iYXNl VGFjdA== IHJldGluYQ== IG51bnM= Uk9O YXR0bw== IGp1Zw== IFNWRw== IGJpa2luaQ== IEZJTEU= IEZvdW5kZXJz ZXBvcnQ= IEtQ IHJlc3RvcmVz IFRoaWNr IGFzaG9yZQ== IGFwcHJvdmFscw== UmVuZGVy TUFH R3JhaGFt IENvcnRhbmE= 44Oz44K4 c3No b3JpYW5z YXJzaXR5 IEluc3BpcmVk dXBwZXI= IHNpZ25hbGxpbmc= IHJlYnVrZQ== IGZsYXJlcw== IGRvd250aW1l U3R1ZGllcw== IHN0YWduYXRpb24= IFNlcXVlbmNl IGdydW50 IGFzc3VyZXM= IFBMQQ== NTky IGludHJhdmVu ZGVwZW5k U3VzYW4= IE1hbnppZWw= TWFuaWE= Q29udHJhY3Q= IHNsYW1z IGN1bHR1cmVk IGNyZWRpdG9y TElTVA== IEhVTQ== IENoYXR0YW5vb2dh c2VydmVk IGNsb2FrZWQ= IEZUUA== cG93ZGVy IFN0ZWxsYQ== dWN0aXZl IGNoZWFwbHk= IE1VQ0g= IEdhbGlsZW8= IHN1aXRlcw== c3BlZWNo IGRlbGliZXJhdGlvbnM= IENoaXBz q5g= QmFsYW5jZQ== IFd5bm5l IEFrcm9u QXNzZXQ= IGhvbm91cmVk IGVkZ2Vk TGlrZXdpc2U= YW5pbW91cw== IFdhZ2U= IEV6ZWs= YWR2ZXJ0aXNlbWVudA== IFJUWA== IE1BRA== IG1pZ3JhdGluZw== IFNRVQ== IDQ3NQ== RWRpdGVk IHNob3J0aGFuZA== IEJhc2ljcw== IGNyb3RjaA== IEVWRU4= IHZt ZWZmaWNpZW5jeQ== IGNhbHZlcw== IEZyaWU= IEJyaWxsaWFudA== IHN0cmlrZXJz IHJlcGVudGFuY2U= IGFydGVyaWVz cmw= QmVk aGFw IGNyeXB0b2dyYXBoeQ== IFNhYnJlcw== IDQxNA== dmlrcw== aWhhcmE= YXBzZXM= VGFsa2luZw== IGludGVydHdpbmVk IGRvY2tz IGFsbGVsZQ== IEFydGlmYWN0 IEhJTQ== dG9ybg== 55U= IG9wYWNpdHk= IEVseQ== b3N1a2U= IG5pcHBsZQ== IGhhbmR3cml0dGVu IFZL IENoYW1iZXJsYWlu IExhb3M= aWdyYXBo Z3Jvdw== IHRyaWxsaW9ucw== IGRlc2NlbmRhbnQ= IFNhaWxvcg== YXN1cmluZw== IGNlaWxpbmdz IFdhcmVob3VzZQ== Zmx5aW5n IEdsb3c= IG5vbnQ= IG1pc2NhcnJpYWdl IHJpZ3M= IG1pbmlzdHJpZXM= IGVsYWJvcmF0ZWQ= IGRlbHVzaW9uYWw= IEh1bWFuZQ== IDM3OQ== bmV0cw== IGJsYWNrb3V0 YWRkZXJz IG5w IFRpcmU= cm9zYw== IHN1YmRpdg== IGxpbmthZ2U= IGNocm9ub2xvZ2ljYWw= IEhFUk8= IHJlc2V0dGxlbWVudA== IFZpbnls IHBhc3RvcmFs IE1vYmls IEJhcmJhcg== Q29vbGRvd24= IEZyaXR6 Y3JpbWluYWw= cmVwZQ== IGJlbGxpZw== IEJyZWVk IDQxOA== IHNlbWJsYW5jZQ== aWpr IGN1cnRhaWw= IGNsaW5jaA== Y29udGFpbmVk IFByb21wdA== YXN0b24= IHdp IHB1cnN1aXRz NTE1 IEdsb3Nz IGZsaXBz IGNvdXBvbnM= IGNsb25pbmc= IExpa2VseQ== UmVtb3ZlZA== IFF1YXJ0eg== cmljZXM= IFNwZWFycw== IHBpb3Vz IGRlcHJlY2lhdGlvbg== IERhcmU= b3VuY2Vz YW1heg== T250 IHBpbm5hY2xl ZG9ja2Vy MDI2 IFd5cg== IFByb3Blcg== y4g= bmls Qnl0ZXM= IHNlZWtlcg== dHJpYWw= IHVuZm9sZHM= IE1hcnNl IGV4dHJhdmFnYW50 IFN1cnZpdm9ycw== UkVEQUNURUQ= IFNwZWVkd2F5 IENyYWlnc2xpc3Q= c3VibWl0 IEdlbmVyYXRpb25z IHVwaG9sZGluZw== IGJsb29kc3RyZWFt IE1pc3Npb25z IExhd24= IGxpbWJv ZW5laQ== SHVo IFdpbGRjYXRz cHJlcA== IE1hcmt1cw== IEZvcmJpZGRlbg== cml0aWM= SU5P IGV4aGliaXRpbmc= cmVxdWVudA== Y2h1aw== IGhhYml0dWFs IENvbXBhdGliaWxpdHk= RHJhZw== UklQVA== dWphaA== R1JPVU5E IGRlbGlucXVlbnQ= IGJ1cm5lcg== IGNvbnRlbXBvcmFyaWVz IGdpbW1pY2s= bG9hZHM= IG5venpsZQ== cG9kY2FzdA== IFdhaw== IFN0YXRlbg== IEt1aA== 44GT aW50ZXJydXB0ZWQ= IGludmluY2libGU= IEJ1cm5ldHQ= Y2lnYXJldHRl IFBlYmJsZQ== IFRlbXBvcmFyeQ== IE1hcmlubw== NTgy IHdhc3RlbGFuZA== aWRlbnRseQ== VHg= IHJpdGU= IFBhbmFzb25pYw== IE1pZGRsZXM= IEhvcnRvbg== YWV1cw== IGN1cmluZw== IG1hdHM= IGFkam91cm4= IGZlYXJzb21l cGV6 Ym9hdHM= IHByb3BlbGw= IGNvbmZsaWN0ZWQ= IEFuZ2Vy IGluc3VyZ2VudA== S2FybA== IGNvYWxlcw== IHNvdXRod2VzdGVybg== IGRpc3N1 IE92ZXJ0 KioqKioqKioqKioq IGJveGVk IEJydW5l YWFh IGdhcmRlbmluZw== IEVuZ2Vs dHJhY2tz IHB1cmlmaWVk IHBsYWNlaG9sZGVy IExpa2Vz IGRhbg== R2Fi IGVjdA== IEZhdw== IEVsaW90 ICcs b3Ryb3BpYw== IFJ1aW4= aGVkb24= IGNhdWw= IGFmdA== IENhZGlsbGFj Z2hh YXNzaWFu dWRlYg== IFRpY2s= IGFkanVzdHM= QVJHRVQ= NTM3 aXNjaGU= YW50eQ== IEZyaWVkcmljaA== IEJsaXp6 IEFPTA== Q2FtcGFpZ24= IG1hbW1hbA== IFZlaWw= IEtldg== IE1hdXJpdA== IERhbWllbg== TmF0aW9u RWFzdGVybg== IHs6 ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHN0ZXJlb3R5cGljYWw= IGF0dGlj IEN5Ym9yZw== cmVxdWlyZQ== IGF3YXJkaW5n IFBhcHVh YnRu YmVudA== Qm9v ICg9 IFhhbmRlcg== IFNvbWVyc2V0 IGNhdGNoeQ== IGNlcnRpZnk= U1RSVUNU IGl0YWw= IHRpZGVz IEJyYW5kcw== R3JheQ== Y29tcGV0aXRpdmU= IGN1cmF0b3I= IERH b21pbml1bQ== IEdNT3M= Y2lhdGluZw== IENhcm1lbg== b3dhcmQ= QmFsdGltb3Jl IHJnYg== Q3U= IHdpcGVz c3BlbGw= SVRORVNT IHN1bW1hcml6ZXM= IFJldmlz IHdoaXN0bGVibG93ZXJz IEJyZWFjaA== IGNyb2NoZXQ= a29z ZXdza2k= IHJlcGV0 IGNyaW1zb24= IEthcmFjaGk= cmVhZGFibGU= ZGltZW5zaW9u IElnb3I= aWxkZWQ= IFplZA== IEtlYW5l IENvc21ldGlj REVQ IHJldHJlYXRpbmc= IFVB ZW5zaWNhbA== IGR1c2s= IERpY2tlbnM= IGFyZW5hcw== IFBhc3NhZ2U= bGV2ZWxz IGN1cnY= UG9wZQ== IGNob3Jlcw== IEVsaXNl IENvbXBhc3M= YnVi IG1hbW1hbGlhbg== IFNhbnNrcml0 IEFOQw== IENyYWNr UXVhbA== TGF1bg== YW1wdW5r IGxlYXJuZXJz IGdsYW1vcm91cw== IGZ1cnRoZQ== ZXJtb3R0 Y2FuZA== R2VuZXJpYw== IG5hcnJhdGVk IGRpc29yZGVybHk= IFRyYW5zYWN0aW9ucw== IERldGVudGlvbg== IFJva3U= xI0= IHVuZGVyc3RhdGVtZW50 IFNhdXI= IFJvZHJpZ28= IEFTQVA= U2lu IHJlam9pY2U= TWV0aG9kcw== IGVsZWN0cm9kZQ== IHdvcnNoaXBwZWQ= IGlkaQ== IFBoeXNpY2lhbnM= IHBvcHVw IGRlZnQ= IFJlbW92YWw= IEJ1ZW5vcw== dmVyYnM= IGZ1bms= dXNoYQ== cmljdGlvbg== b3JlYQ== IEJhbmdhbG9yZQ== IEtlbm9iaQ== enpp IG5vcm1hdGl2ZQ== IGdvYmxpbnM= IGNhZmVz IFVOQ0xBU1NJRklFRA== IEZpcmVk U0lHTg== IHNjbGVyb3Npcw== IFZvdGVy IFNvbm55 IEV4dGVuZA== IEVWcw== QXJzZW5hbA== IHBzaQ== IHdpZGVzdA== IFR1cw== IGxvb21z IGp1c3RpZnlpbmc= IEdyYW5nZXI= 6K8= UmVmZXI= NTgz IGZsb3VyaXNoaW5n YWJyZQ== IHJhdmU= IENvbnRyYQ== IDE4OTg= QWRkcw== IGZ1bA== IENvb2tl c29tZW9uZQ== PSM= Njcx IHlhaw== IGFydGU= IE1pc2NlbGxhbmVvdXM= IERldGVjdGlvbg== IENsYW5jeQ== 4oE= YXNzaWVz IHZhbGlhbnQ= IEZlbWluaXN0 Y29ycnVwdGlvbg== VmVs UGVhcg== IHN1Y2NpbmN0 IHF1aWNrZXN0 a3c= IHNwaXR0aW5n IExpYnJhcmllcw== 5YWJ YW50eg== RGFk IFNwZWNpZmljYXRpb25z cnVwdWxvdXM= YW5kcg== UkVTVUxUUw== IHNub3diYWxs IHByZWRpcw== IEJheHRlcg== IE51cnNpbmc= IENoYWZm c3dl IG91dGFnZQ== IG5lc3Rpbmc= IG5vdG9yaWV0eQ== dHJpZ2dlcg== b25pdGU= am9u IGZvdQ== b29rZWQ= IENlbGVicml0eQ== cmVhbGl0eQ== IGZhdGln IGh1Z2dpbmc= IGJvdGhlcnM= IFBhbnplcg== IENoYW5kcmE= ZmlndXJlZA== IHZvbHRz IENsb3Vkcw== IGZlZWJsZQ== IEN1cnZl IEFzdXM= Nzg2 YWJzb3I= IFZJQ0U= IEhlc3M= IG1hbnVmYWN0dXJlcw== IGdyaXp6 IFBvd2VyZnVs YWNpZA== IHN1YnNlY3Rpb25z IEtydWdtYW4= IEFscHM= aXN1 IHNlcXVlc3Q= IFVsdHJvbg== IFRpbmtlcg== IEdvb3Nl IG1pc21hdGNo QXR0b3JuZXk= IG1vcnBob2xvZ3k= IFNpeGVycw== dXR0ZXJlZA== IEVMRUNU Z3Jhbg== UnVzc2VsbA== IEdTTA== IGZvcnRuaWdodA== IC4p IGFwb3N0bGU= cHJvbmU= ZWxpc3Q= VW50aXRsZWQ= IEltcGxlbWVudGF0aW9u aXN0b3Jz IHRhbmtlcg== IHBsdXNo IGF0dGVuZGFudHM= IFRpaw== IEdyZWVud2ljaA== IFlvbg== IFNQTA== Y2VsbHM= dW50bGVk U29sdXRpb24= IFF1w6k= IHZhY2F0ZWQ= IHVwdGljaw== IE1lcmlkaWFu 5oM= IERyaWxs OTI1 NTg0 IHJlbm92YXRlZA== IEt1YnJpY2s= enlr IGxvdXN5 cHBlbA== b2h5ZHJhdGU= IEl6enk= bGVzaWFzdGljYWw= Q0ND IEFqYXg= IGFkYXB0ZXJz IFBldHJhZXVz IGFmZmlybWF0aW9u IFNUT1I= bGVtcw== YWRvZXM= IENvbnN0YW50aW5vcGxl IHBvbmllcw== IGxpZ2h0aG91c2U= IGFkaGVyZW50cw== IEJyZWVz b21vcnBoaWM= RmlnaHRpbmc= IHBsYXN0ZXI= IFBWQw== IE9ic3Q= IGRlYXJseQ== IFRvb3Ro aWNrc29u IHNoYW1pbmc= UGxleA== QWdn IOKApiI= IHN1YnJlZGRpdHM= IHBpZ2Vvbg== IFJlc2lkZW50aWFs IFBhc3Npbmc= IGx1bQ== IFBlbnNpb24= IHBlc3NpbWlzdGlj IDQzMg== emluc2tp Y2FkZQ== MDc1 IGFwb2xvZ2lzZWQ= aXlhaA== UHV0dGluZw== IGdsb29teQ== IEx5bWU= PS09LT0tPS09LT0tPS09LQ== IFRvbWU= IFBzeWNoaWF0cmlj IEhJVA== Y21z YXBvbG9n IGJyZWFrZXI= IGRlZXBlbg== IHRoZW9yaXN0 IEhpZ2hsYW5kcw== IGJha2Vy IHN0YXBsZXM= IGludGVyZmVyZWQ= IEFib3J0aW9u am9pbmVk Y2h1 IGZvcm11bGF0ZQ== IHZhY2NpbmF0aW9ucw== IGJhbnRlcg== cGhldXM= IG91dGZpZWxkZXI= IE1ldGVy ICMjIyMj IDE4OTU= IG5hcnJvd2luZw== IFNUT1JZ ZnA= IENTVA== aWdub3Jl IHByb2NsYWltaW5n IFJV IEJBTEw= eW5h NjUz IHBvc2l0 UFJF NTk0 IFJlZ2lzdHJhcg== IFBpbGdyaW0= aWNpbw== IHByZXR0 IGxpZmVsZXNz IF9fXw== TmVpZ2g= IENodXJjaGVz b3Jubw== IG9yY3M= IGtpbmRyZWQ= IEF1ZGl0 IG1pbGxlbm5pYWw= IFBlcnNpYQ== Z3Jhdml0eQ== IERpc2FiaWxpdHk= IERBUks= V3M= b2Rvbg== IGdyYW5kZGF1Z2h0ZXI= IEJyb29rZQ== IEFEQQ== RVJB IHBpY2t1cHM= IFdpbGtpbnNvbg== IFNoYXJkcw== IE5L IGV4cGVs IEtpc2x5YWs= IGphcmdvbg== IHBvbGFyaXplZA== aWFuZQ== UHVibGlzaGVy IHJlYnV0dA== IGFwcHJlaGVuc2lvbg== IEtlc3NsZXI= IHByaXNt RlVM MTk2NA== IExvbGw= 5L8= bGV0aGFs xZ8= IGdoZXR0bw== IGJvdWxkZXI= IFNsb3dseQ== IE9zY2Fycw== IEluc3RydWN0aW9u IFVsdHI= IE1vZQ== TmljaA== IFBBVEg= KCo= IFJFTEVBU0U= dW5pbmc= cm91c2U= ZW5lZw== IHJlaW1i IERldGVjdGVk RG9T IHN0ZXJsaW5n IGFnZ3JlZ2F0aW9u IExvbmVseQ== IEF0dGVuZA== aGlnaGVy IGFpcnN0cmlrZQ== a3Nvbg== U0VMRUNU IGRlZmxhdGlvbg== IEhlcnJlcmE= Q29sZQ== cml0Y2g= IGFkdmlzYWJsZQ== RmF4 IHdvcmthcm91bmQ= IHBpZA== bW9ydGVt ZXJzZW4= IHR5cG8= IGFsdW0= Nzgy IEphbWFs c2NyaXB0cw== IGNhcHRpdmVz IFByZXNlbmNl IExpZWJlcm1hbg== YW5nZWxv IGFsY29ob2xpc20= YXNzaQ== IHJlY2l0ZQ== IGdhcGluZw== IGJhc2tldHM= IEdvdQ== QnJvd3Nlcg== bmVhdQ== IGNvcnJlY3RpdmU= dW5kYQ== c2NvcmluZw== IFhE IGZpbGFtZW50 IGRlZXBlbmluZw== IFN0YWlubGVzcw== SW50ZWdlcg== IGJ1Z2d5 IHRlbmFuY3k= IE11YmFyYWs= IHR1cGxl IERyb2lk IFNpdHRpbmc= IGZvcmZlaXQ= IFJhc211c3Nlbg== aXh0aWVz ZXNp IEtpbW1lbA== IG1ldGljdWxvdXNseQ== IGFwb3B0 IFNlbGxlcg== MDg4 ZWNha2U= aGVtYXRpY2FsbHk= VE4= IG1pbmRsZXNz IGRpZ3M= IEFjY29yZA== b25zZW5zZQ== ZW1pbmc= YnJhY2U= IGVCb29r IERpc3RyaWJ1dA== IEludmVzdG1lbnRz d3Q= XSks YmVoYXZpb3I= NTYz IGJsaW5kaW5n IFByb3Rlc3RlcnM= dG9waWE= IHJlYm9ybg== IEtlbHZpbg== IERvdmVy IERhaXJ5 IE91dHM= IFsv z4A= YnA= IFZhbml0eQ== IFJlY2Fw IEhPVVNF IEZBQ0U= IDQyMg== Njky IEFudGlvY2g= Y29va2Vk IGNvbGxpZGU= IGFwcg== IHNsZWVwZXI= IEphcnZpcw== IGFsdGVybmF0aXZlbHk= IExlYXZlcw== IE1hdw== IGFudGlxdWl0eQ== IEFkaW5pZGE= IGFidXNlcg== UG9rw6ltb24= IGFzc29ydGVk IFJldmlzaW9u IFBpYW5v IEdpZGVvbg== T2NlYW4= IHNhbG9u IGJ1c3RsaW5n b2duaXRpdmU= IFJhaG1hbg== IHdhaXRlcg== IHByZXNldHM= IE9zaA== IEdIQw== b3BlcmF0b3I= IHJlcHRpbGVz IDQxMw== IEdhcnI= IENoYWs= IGhhc2hlcw== IGZhaWxpbmdz IGZvbGtsb3Jl IGFibA== IENlbmE= IE1hY0FydGh1cg== IENPVVJU IHBlcmlwaGVyeQ== YXBwZXJz IHJlY2tvbmVk IEluZmx1 IENFVA== IDM3Mg== IERlZmluaXRpdmU= YXNzYXVsdA== NDIx IHJlc2Vydm9pcnM= IGRpdmVz IENvaWw= REFR IHZpdmlkbHk= IFJK IEJlbGxldg== IGVjbGVjdGlj IFNob3dkb3du IEtN aXBlZA== cmVldGluZ3M= IEFzdWth TGliZXJhbA== IM+E IGJ5c3RhbmRlcnM= IEdvb2R3aW4= dWtvbmc= U2l0 IFRyZW0= IGNyaW1pbmFsbHk= IENpcmN1cw== Y2hyb21l ODg3 IG5hbm9w IE9iaQ== IExPVw== b2do IEF1dGhvcnM= b2J5bA== VXJiYW4= IHRp IFdlaXI= dHJhcA== YWd5 IHBhcmVudGhlc2Vz IG91dG51bWJlcmVk IGNvdW50ZXJwcm9kdWN0aXZl IFRvYmlhcw== dWJpcw== UGFyc2Vy U1RBUg== IHN5bmFwdGlj IEdlYXJz IGhpYmVy IGRlYnVua2Vk IGV4YWx0ZWQ= YXdhdHRz SE9V Q2h1cmNo IFBpeGll IFVyaQ== IEZvcm1hdGlvbg== IFByZWRpY3Rpb24= Q0VP IHRocm90dA== IEJyaXRhbm4= IE1hZGFnYXNjYXI= 64s= IGJpbGxib2FyZHM= IFJQR3M= IEJlZXM= Y29tcGxldGVseQ== RklM IGRvZXNudA== IEdyZWVuYmVyZw== cmV5cw== IHNsaW5n IGVtcHRpZWQ= IFBpeGFy IERoYXJtYQ== bHVjaw== aW5ndWlzaGVk IGVuZG90 IGJhYnlz MDU5 Y2hlc3Q= cmF0cw== IHJpZGRlbg== IGJlZXRsZXM= IGlsbHVtaW5hdGluZw== IGZpY3RpdGlvdXM= IFByb3ZpbmNpYWw= IDc2OA== IHNoZXBoZXJk IFJlbmRlcg== IDE4OTY= Q3Jldw== IG1vbGRlZA== IFhpYW9taQ== IFNwaXJhbA== IGRlbGlt IG9yZ2FuaXNpbmc= IGhvb3Bz IEJlaQ== emhlbg== IGZ1Y2tpbg== IGRlY2Fk IHVuYmlhc2Vk YW1teQ== c3dpbmc= IHNtdWdnbGVk IGtpb3M= IFBFUlNPTg== IElucXVpc2l0b3I= IHNub3d5 IHNjcmFwaW5n IEJ1cmdlc3M= UHRy YWdhbWU= Ulc= IGRyb2lk IEx5cw== IENhc3NhbmRyYQ== SmFjb2I= IDM1NA== IHBhc3R1cmU= IGZyYW5j IFNjb3RjaA== IEVuZHM= IElHRg== ZGVmaW5pdGlvbg== IGh5c3RlcmljYWw= IEJyb3duZQ== Nzcx IG1vYmlsaXphdGlvbg== 5pU= aXF1ZW5lc3M= VGhvcg== IHNwZWFyaGVhZGVk IGVtYnJvaWxlZA== IGNvbmplY3R1cmU= anVkaWNpYWw= Q2hvaWNl IHBhcGVyYmFjaw== UGly IHJlY292ZXJz IFN1cmdl IFNob2d1bg== IFBlZGlhdHJpY3M= 44Gg IHN3ZWVwcw== IExhYm9yYXRvcmllcw== IFBhY2tz YWx1cw== YWRkaW4= IGhlYWRsaWdodHM= Z3Jh RXZpZGVuY2U= Q09MT1I= QWRtaW4= irE= IGNvbmNvY3Q= c3VmZmljaWVudA== IHVubWFya2Vk IHJpY2huZXNz IGRpc3NlcnRhdGlvbg== IHNlYXNvbmluZw== IGdpYg== IE1hZ2Vz dW5jdGlvbnM= IE5pZA== Y2hlYXQ= IFRNWg== Y2l0aXplbnM= IENhdGhvbGljaXNt bmI= IGRpc2VtYmFyaw== IFBST0dSQU0= YXF1ZXM= VHlsZXI= T3Jn IFNsYXk= IE5lcm8= IFRvd25zZW5k SU5UT04= dGVsZQ== IG1lc21lcg== OTAx IGZpcmViYWxs ZXZpZGVuY2U= YWZmaWxpYXRlZA== IEZyZW5jaG1hbg== IEF1Z3VzdGE= MDIx IHNsZWQ= IHJldXNlZA== IEltbXVuaXR5 IHdyZXN0bGU= YXNzZW1ibGVk TWFyaWE= IGd1bnNob3Rz IEJhcmJpZQ== IGNhbm5hYmlub2lkcw== IFRvYXN0 IEtpbmRlcg== SVJE IHJlanV2ZW4= IGdvcmU= IHJ1cHR1cmU= IGJyZWFjaGluZw== IENhcnRvb24= IDQ1NQ== IFBhbGVv NjE0 IHNwZWFycw== IEFtZXM= YWJ1cw== TWFkaXNvbg== R1JPVVA= IGFib3J0ZWQ= eWFo IGZlbG9u IGNhdXNhdGlvbg== IHByZXBhaWQ= IHBpdHRlZA== b3BsYW4= IFNoZWxsZXk= IFJ1c3Nv IFBhZ2Fu IHdpbGxmdWxseQ== IENhbmF2ZXI= dW5kcnVt IFNhbGFyeQ== IEFycGFpbw== cmVhZGVy IFJhdGlvbmFs IE92ZXJzZQ== IENhdXNlcw== ICou IHdvYg== S2VpdGg= IENvbnNlbnQ= bWFuYWM= Nzcz NjIz IGZhdGVmdWw= ZXRpbWVz IHNwaXJpdGVk IER5cw== IGhlZ2Vtb255 IGJveWNvdA== IEVucmlxdWU= ZW1vdXRo IHRpbWVsaW5lcw== IFNhaGFyYQ== IFJlbGF4 IFF1aW5jeQ== IExlc3NvbnM= IEVRVQ== U0VB Tks= IENvc3Rjbw== SW5jcmVhc2U= IG1vdGl2YXRpbmc= IENob25n YW1hcnU= IERpdmlkZQ== IHBlZGlncmVl IFRhc21hbmlh IFByZWx1ZGU= TGFz OTQw NTc0 IGNoYXU= IFNwaWVnZWw= dW5pYw== LS0+ IFBoaWxpcHM= IEthZmth IHVwaGVhdmFs IHNlbnRpbWVudGFs IHNheA== IEFraXJh c2VyaWFs TWF0cml4 IGVsZWN0aW5n IGNvbW1lbnRlcg== IE5lYnVsYQ== cGxldHM= IE5hZHU= IEFkcmVu IGVuc2hy IFJBTkQ= ZmluYW5jaWFs IENseWRl dXRoZXJmb3Jk IHNpZ25hZ2U= IGRlbGluZQ== IHBob3NwaGF0ZQ== cm92ZXJzaWFs ZmFzY2lzdA== IFZhbGw= IEJldGhsZWhlbQ== IGZvcnM= IGVuZ2xpc2g= U29saWQ= TmF0dXJl IHZh IEd1ZXN0cw== IHRhbnRhbA== IGF1dG9pbW11bmU= Ozs7Ozs7Ozs7Ozs7 IFRvdGFsbHk= IE92 IGRlZmVuY2Vz IENvY29udXQ= IHRyYW5xdWls IHBsb3k= IGZsYXZvdXJz IEZsYXNr 44Ko44Or IFdlc3Rvbg== IFZvbHZv ODcw IG1pY3JvcGhvbmVz dmVyYmFs UlBH IGlpaQ== O30= MDI4 IGhlYWRsaW5lZA== IHByaW1lZA== IGhvYXJk IFNoYWQ= IEVOVEVS IHRyaWFuZ3VsYXI= IGNhcGl0 bGlr IEFuY2llbnRz IGxhc2g= IGNvbnZvbA== IGNvbG9uZWw= ZW5lbXk= R3Jh IHB1YnM= dXR0ZXJz IGFzc2lnbnM= IFBlbmV0 IE1vbnN0cm91cw== IEJvd2Vu aWx2ZXI= SGF1bnRlZA== IERpbmc= c3RhcnRlZA== cGxpbg== IGNvbnRhbWluYW50cw== IERPRQ== ZmZlbg== IFRlY2huaWNpYW4= Unk= IHJvYmJlcnM= IGhvdGxpbmU= IEd1YXJkaW9sYQ== IEthdWZtYW4= cm93ZXI= IERyZXNkZW4= IEFscGluZQ== RWxm IGZtdA== IFNhcmQ= dXJzZXM= Z3B1 VW5peA== IHVuZXF1aXZvY2FsbHk= IENpdGl6ZW5zaGlw cXVhZA== bWlyZQ== IFN3ZWVuZXk= QmF0dGVyeQ== NjE1 IHBhbmNha2Vz IG9hdHM= TWFwcw== IENvbnRyYXN0 bWJ1ZHNtYW4= IEVQUw== IHN1YmNvbW1pdHRlZQ== IHNvdXJjaW5n IHNpemluZw== IEJ1ZmZlcg== IE1hbmRhdG9yeQ== IG1vZGVyYXRlcw== IFBhdHRlcm5z IENob2NvYm8= IFphbg== IFNUQVRFUw== IEp1ZGdpbmc= IEluaGVy Kjo= IGJpbA== IFllbg== IGV4aGlsYXI= b2xsb3dlcg== emVycw== IHNudWc= bWF4aW11bQ== IGRlc3BpY2FibGU= IFBBQ0s= IEFubmV4 IHNhcmNhc3RpYw== IGxhdGV4 IHRhbXA= IFNhbw== YmFo IFJldmVyZW5k IENoaW5hdG93bg== IEFVVA== ZG9jdW1lbnRlZA== IEdBQkE= IENhbmFhbg== INmF IGdvdmVybnM= cHJldg== RXNj IEVzdGltYXRlcw== T1NQ IGVuZGVhdm91cg== IENsb3Npbmc= b21ldGltZQ== ZXZlcnlvbmU= IHdvcnNlbg== IHNjYW5uZXJz IGRldmlhdGlvbnM= IFJvYm90aWNz IENvbXB0b24= IHNvcmNlcmVy IGVuZG9nZW5vdXM= IGVtdWxhdGlvbg== IFBpZXJjaW5n IEFwaA== IFNvY2tldA== IGJvdWxk IE9V IEJvcmRlcmxhbmRz IDE4NjM= R29yZG9u IFdUTw== IHJlc3RyaWN0cw== IG1vc2FpYw== IG1lbG9kaWVz 54Q= VGFy IGRpc3Nvbg== IFByb3ZpZGVz IC4uLi4uLg== YmVr RklY IGJyb29t YW5zaGlw RG9jdG9ycw== IG5lcmRz IFJlZ2lvbnM= bmFpc3NhbmNl IG1ldGU= IGNyZXB0 cGxpbmdz IGdpcmxmcmllbmRz a25pdA== aWdlbnQ= b3dl IHVzaGVyZWQ= IEJheg== TW9iaWw= NDM0 IFByZXNlbnRz b3JpZ2lu IGluc29tbmlh IEF1eA== NDM5 IENoaWxp aXJzY2g= R0FNRQ== IGdlc3RhdGlvbg== YWxnaWE= cm9taXNpbmc= JCw= Y3Jvdw== IEluc3BlY3Rpb24= YXRvbWlj UmVsYXRpb25z Sk9ITg== cm9tYW4= IENsb2Nrd29yaw== IEJha3I= bW9uZQ== TUVU IHRoaXJzdHk= IGJj IGZhY3VsdGllcw== UnVt IG51YW5jZQ== IERhcml1cw== cGxldGluZw== ZnRlcnM= ZXRjaHVw UmVnaXN0cmF0aW9u IEtF UmFo IHByZWZlcmVudGlhbA== IExhc2g= IEhI VmFsaWQ= IE5BVg== IHN0YXJ2ZQ== IEdvbmc= enluc2tp IEFjdHJlc3M= IHdpaw== IHVuYWNjb21wYW5pZWQ= bHZs QnJpZGU= QURT IENvbW1hbmRv IFZhdWdobg== V2FsbGV0 IGhvcHBpbmc= IFZpZQ== IGNhdmVhdHM= IGFsYXM= aWZsZWQ= YWJ1c2U= NjYx IGlibg== IGd1bA== IHJvYmJpbmc= dGls SUxB IG1pdGlnYXRpbmc= IGFwdGx5 IHR5cmFudA== IG1pZGRheQ== IEdpbG1vcmU= IERlY2tlcg== IMKnwqc= cGFydGlhbA== RXhhY3RseQ== IHBoZW5vdHlwZQ== IFsrXQ== IFBsZXg= IElwcw== dmVyc2lvbnM= IGVib29r IGNoaWM= Z3Jvc3M= IjoiIn0seyI= IFN1cnByaXNpbmdseQ== TW9yZ2Fu IHJlc2lkdWVz IENvbmZlZGVyYXRpb24= aW5mZWxk IGx5cg== bW9kZXJhdGU= IHBlcnBlbmRpY3VsYXI= Vks= IHN5bmNocm9uaXplZA== IHJlZnJlc2hlZA== IGFkb3Jl IFRvcm1lbnQ= b2xpbmE= IDI2MDA= SXRlbVRyYWNrZXI= IHBpZXM= IEZBVA== IFJIUA== MDQ4 IFJFU1A= IEJK YWxsb3dz UGFuZA== IHVud2VsY29tZQ== IFZvYw== IEJhc3RhcmQ= IE9X IExBUg== IEhlYWxlcg== RW52aXJvbm1lbnRhbA== IEtlbnlhbg== IFRyYW5jZQ== IFBhdHM= IGFsaWFzZXM= IEdhcmZpZWxk IGNhbXBhaWduZXI= IGFkdmFuY2VtZW50cw== IE9raW5hd2E= IENvaA== b3dza3k= IHN0YXJ2ZWQ= IHNpemVhYmxl IDotKQ== IG1STkE= IHN1c3BlbnNpb25z aXN0YXI= U2NvdGxhbmQ= UHJpbg== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IDUwMg== IHRlYXNwb29ucw== IDEwNTA= IGNvZXJjaXZl IE1hc29uaWM= ZWRkZWQ= IFBhc3Nlbmdlcg== IGxhdHQ= IGJyYWNlcw== IFN0ZWFs IE5ZVA== IEthdHM= IENlbGVzdA== YWV6 VHU= IENvdWx0ZXI= 8J+Y RmxpY2ty IFdpbG1pbmd0b24= aXRocw== Kys7 IHZlbmRpbmc= IG5lZ3Jv IFBoaQ== IFllbGxvd3N0b25l Q2FsbGJhY2s= IHNoYW1wb28= IFNoYWRlcw== d2F0 IHN1cGVyaHVtYW4= IHJpZGljdWxlZA== IGhvbGllc3Q= b21ibw== IGludGVybnM= IGhvbmU= IFBhcmFndQ== VVJJ IGRhbmdsaW5n 44K7 c292 aWN0aW9uYWw= YXZhaWxhYmlsaXR5 IHJldm9jYXRpb24= IGRvdw== aW5pYw== IFRIRUlS IGlzbw== IG91dGluZ3M= IExldGhhbA== ICkpKQ== IGluYWNjdXI= IG91dGxhbmRpc2g= IGFudXM= bGV0aWNv aWRvbg== bG9s IHVucmVndWxhdGVk IHN1Y2N1bWJlZA== IGN1ZmY= IFdhc3RlbGFuZA== bGV0YWw= IHN1YnN0cg== IGNvZmZlcnM= IGF1dG9tYWtlcnM= b3Zp IFh1ZQ== IERheXRvbmE= IGphcnJpbmc= IGZ1bWVz IGRpc2JhbmRlZA== emlr aXR0b24= IHN0cmlraW5nbHk= IHNwb3Jlcw== QWRhcHRlcg== Lik6 IEx5bmRvbg== aXZhbHJ5 IG9yYWxseQ== IHR1bXVsdHVvdXM= IGRpc3BsZWFzdXJl IGNvbmVz b3JyZWN0 IGFwcGVhc2U= IGRlcmJ5 IFRyaXBvbGk= IEFsZXNz IHBva2Vk IEd1aWx0eQ== dlA= RW5vdWdo IG9yaWdpbmFscw== Njk5 IHJhYmJp IHByb3ZlcmJpYWw= IHBvc3Rwb25l ZWxvcGU= IE1pc3R5 IHN0YWZmZWQ= IFVuZW1wbG95bWVudA== cmVkaXRhcnk= IGRpbGlnZW50 cmVjb21t bWVhc3VyZXM= YXNpbg== ODI1 IHBvbmRz IG1tb2w= IFNBUg== IENBUkU= IDM3MQ== IGNsZW5jaGVk IENvcnNhaXI= IGNhcmljYXR1cmU= em4= YXR0YWNo IFNjaHJv c3BlYWs= cGFpbnRlZA== IFN1Yw== IEVOVA== IGNlbGx1bA== IFBhaWQ= ZGlhZ24= V0hFUkU= IHRleHRlZA== QmFybg== IHJldHJhY3RlZA== IFJlZmVycmVk U2F2 IHVwa2VlcA== IHdvcmtwbGFjZXM= IFRva2Vucw== IGFtcGxpZnk= Y2xpbmljYWw= IG11bHRpYw== bWJlcmc= IGNvbnZvbHV0ZWQ= UmVnaW9u NTY1 IFRvcGlj IHNuYWls IHNhbGluZQ== IGluc3VycmVjdGlvbg== IFBldHI= Zm9ydHM= QkFU IE5hdmFqbw== IHJ1ZGltZW50YXJ5 IExha3No T05ET04= TWVhc3VyZQ== IHRyYW5zZm9ybWVy IEdvZGRhcmQ= IGNvaW5jaWRlcw== aXJpbg== UmV4 IEJvaw== cXVpdA== IHNob3RndW5z IHByb2xldGFyaWFu IHNjb3Jw IEFkYQ== NTE0 IHNsYW5kZXI= cmVjb3JkZWQ= IGVtYmVsbA== cmlzb21l IGFwb2xvZ2l6aW5n IE11bGNhaXI= IEdpYnJhbHRhcg== Q2xh IGFsbG90 IEF0dGVudGlvbg== IDQzMw== bGVhdmU= IHdoaW5l IElzc2E= IEZhdXN0 IEJhcnJvbg== aGVueQ== IHZpY3RpbWl6ZWQ= SmV3cw== IG51cnR1cmluZw== ZXR0ZWw= V2luZ2Vk IFN1YnRsZQ== IGZsYXZvcmZ1bA== IFJlcHM= ZW5nZWQ= Y2FsbGJhY2s= IGRpcmVjdGlvbmFs IGNsYXNw IERpcmVjdGlvbnM= cGxhbmV0 aWN1bHR1cmU= SGVscGVy aWNpb24= YWNpYQ== IOelng== IHN1cmdlcw== IGNhbm9l IFByZW1pZXJzaGlw YmVlbg== IGRlZmllZA== IFRyb29wZXI= IHRyaXBvZA== IGdhc3A= IEV1cGg= IEFkcw== dmVybmlnaHQ= aGlnaGx5 Um9sZQ== IGVudGFuZ2xlZA== IFplaXQ= NjE4 IFJ1c3R5 IGhhdmVucw== IFZhdWdoYW4= SEFFTA== IFNFUlZJQ0U= Lyw= IHN0cmlja2Vu IGRlbHVzaW9ucw== IGJpcw== IEhhZg== IGdyYXRpZmljYXRpb24= IGVudGljaW5n VU5DSA== QWRhbXM= IE9MRUQ= IEJlZXRsZQ== IDE4OTk= IFNPRlRXQVJF YXRlZ29y Vkw= IFRvdGVt IEdhdG9ycw== QVRVUkVT IGltcGVkYW5jZQ== UmVnaXN0ZXJlZA== IENhcnk= IEFlcmlhbA== b25uZQ== ZW5pdW0= IGRyZWQ= IEJlZw== IGNvbmN1cnJlbnRseQ== IHN1cGVycG93ZXI= IFhhbg== amV3 aW1lc3Rlcg== IERpY2tpbnNvbg== 4pSB Rmxh IHByZWU= IFJvbGxpbnM= qbbm IGRlbm9taW5hdGlvbg== IExhbmE= NTE2 IGluY2l0aW5n c2NyaWJlZA== anVyaWVz IFdvbmRlcnM= YXBwcm94aW1hdGVseQ== IHN1c3BlbmRpbmc= IG1vdW50YWlub3Vz IExhdWdo b2lkYWw= TnM= RGV0ZWN0 KT0= IEx1dGhvcg== IFNjaHdhcnplbmVnZ2Vy IE11bGxlcg== IERldmk= ZWN5Y2xl SmFy NjEz IExvbmdo QmFo IFNQT1JUUw== bnc= IHJlZmluZW1lbnQ= IHdhdGVyd2F5cw== IGRpbmVy QmxhZGU= Njgz RmFj IGluaXRpYWxz IHJvZw== IHBhcmFub3JtYWw= QlVU IFso IFN3YW5zb24= IE1lc2g= 4pas SW1wcm92ZQ== IFJhZGlhdGlvbg== IEVzdGhlcg== IEVzaw== IEFseQ== aWt5 IGlycmFk IEJ1Y2tpbmdoYW0= IHJlZmlsbA== IC5f UmVwZQ== Q09OQ0xVUw== IGRpZmZlcmVudGlhdGVk IGNoaXJvcA== IEF0a2lucw== UGF0dGVybg== IGV4Y2lzZQ== IGNhYmFs TlNB IFNUQQ== IFNJTA== IFBhcmFseQ== IHJ5ZQ== IEhvd2VsbA== IENvdW50ZG93bg== bmVzc2Vz YWx5c2Vk IHJlc2l6ZQ== 44K9 IGJ1ZGdldGFyeQ== IFN0cmFz d2FuZw== IGFwaWVjZQ== IHByZWNpbmN0cw== IHBlYWNo IHNreWxpbmU= IDM1Mw== cG9wdWxhcg== QXBwZWFyYW5jZXM= IE1lY2hhbmljcw== IERldk9ubGluZQ== U3VsbGl2YW4= WmVu IHB1 b3BvbGlz NTQ0 IGRlZm9ybQ== IGNvdW50ZXJhY3Q= IExhbmdl IDQxNw== Q29uc29sZQ== Nzc0 IG5vZGRpbmc= IHBvcHVsaXNt IGhlcA== IGNvdW5zZWxsaW5n Y29tcGxpYW5jZQ== VUZG IHVuZGVuaWFibHk= IHJhaWxpbmc= IEhvcm93aXR6 IFNpbW9uZQ== IEJ1bmdpZQ== IGFr IFRhbGtz eGZm Zmxha2U= Q3Jhc2g= IHN3ZWF0eQ== IGJhbnF1ZXQ= IE9GRklD IGludmVudGl2ZQ== IGFzdHJvbm9tZXI= IFN0YW1mb3Jk IFNjYXJl IEdSRUVO b2xpY2l0ZWQ= IHJ1c2hlcg== IGNlbnRyaXN0 aWdodGluZw== IHN1YmNsYXNz IGRpc2F2 IGRlZnVuZA== IE5hbnRv b2NpYXRl bWFzdA== IHBhY2lm IG1lbmQ= ZWVycw== aW1taWdyYXRpb24= RVNTSU9O IG51bWJlcmluZw== IGxhdWdoYWJsZQ== IEVuZGVk dmlhdGlvbg== ZW1hcms= UGl0dA== IG1ldGljdWxvdXM= IExG IGNvbmdyYXR1bGF0ZWQ= IEJpcmNo IHN3YXllZA== IHNlbWlmaW5hbHM= IGh1bWFua2luZA== bWF0dGVy IEVxdWlw b3BhdXNhbA== U2FpZA== IExheW91dA== IHZvaWNpbmc= IHRodWc= IHBvcm5vZ3JhcGhpYw== SVBT IG1vYW5pbmc= IGdyaWV2YW5jZQ== IGNvbmZlc3Npb25z ZXNjYWw= VEVYVFVSRQ== QXV0aGVudA== b3NhdXJ1cw== UHVyY2hhc2U= IHJlbGVnYXRpb24= YWx0ZXI= IMKgwqA= IHJpZGRsZWQ= IG9ncmU= IExvd2VsbA== T2NjdXA= RWF0 IEh5ZGVy IEFkdmlzZXI= Q29tbWVyY2U= SHVudA== IE9ydGg= IENvbXBldGl0aXZl IENMQQ== Q0RD IHNhbGFkcw== Rmxl IGluZHVzdHJpYWxpemVk YCw= IE9XTg== IGJlY2s= IFBhcnRpY3VsYXJseQ== b3VidA== IG1N IEh1c3NhaW4= IENoZW5uYWk= IDkyMA== IGFwcG9pbnRpbmc= IEN1bGxlbg== LCwsLCwsLCw= IHBvcmVz dmVyaWZpZWQ= IGJpb2NoZW1pY2Fs ZW1hdGU= IGNvd2FyZGx5 IEhlbHNpbmtp IEV0aGlvcGlhbg== U09VUkNF RVJD ZXN0cm8= IGJpb3RlY2g= IFNvdXI= IGJyZXdlcg== Qmxvb21iZXJn IGludGVuc2lmeQ== R2xhc3M= YW5jbw== IEZEUg== Z3JlU1FM IEZpcmVz qbbmpbU= ZWNv MTAwMQ== IEhvbWVsZXNz IGluc3RhbnRhbmVvdXM= IEhhc3Rl aWdlbA== RGlhbW9uZA== IHBhdmluZw== IGxhbmRmaWxs IGRhZHM= aG91bg== Ol0= IGluY2VuZGlhcnk= IExpdmluZ3N0b24= IEhpbGJlcnQ= IENoZWNrcw== c3R5bGVz aW5hdG9ycw== IENsaXZl cGhyaW5l IGNoaW1wYW56ZWVz IHBhbGw= IEpN IEFhZGhhYXI= 8J0= IGFjaGlldmFibGU= ZGlzYWJsZWQ= UEVU T09PT09PT08= TW90 IGludGFuZ2libGU= IGJhbGxldA== IFdlYnM= IEVzdGltYXRlZA== RWZmZWN0cw== IGJhaWxlZA== Sm9zaHVh IHR1cmJ1bGVuY2U= IG9jY3VwYW50 IERheWxpZ2h0 IDM2MQ== bWVldA== IHN0YXRpY2FsbHk= IG9ubG9vaw== IGtp aWxsZWdhbA== IHZlbHZldA== IGRlaHlkcmF0aW9u IGFjcXVpZXM= IFJleg== YWt1cmE= IFVwdG9u YXRybw== IGluY29tcHJlaGVuc2libGU= IGJhY2tkb29y IFJoaW5v NzI3 IG1hdGhz KSs= IGhlcmVzeQ== IGRm IFJvY2hl IEx5ZGlh IHBhbmNyZWF0 cmVwbHk= YXJyZWxs IHNvbGljaXRhdGlvbg== IGNpcmNhZGlhbg== QklQ IGZvcmF5 IGNyeXB0aWM= aXp1 aW1lbw== IFRvbWF0bw== IEhvbXM= ZXhhbWluYXRpb24= IHF1YXJyeQ== IFZhbGlhbnQ= IEplcmljaG8= IElOQ0xVRA== IDE4NDA= NTE5 IHJlc2lzdHM= IHNuYXBzaG90cw== IFNwdXI= IEFudGlxdQ== TG9naW4= IGJlc3RzZWxsaW5n IGFudGlj IFN1dGhlcmxhbmQ= 44Ki44Or IH4v IFBhcm0= 6IM= UGFnZXM= aW50ZW5zaXR5 IGltbW9iaWw= IDE4NjU= enpv IG5pZnR5 IGZlbnRhbnls IFByZXNlcnZhdGlvbg== b3BoZW4= IGRhcnRz IERpbm9zYXVy cG9pbnRlcnM= IFJpdGU= c3VnZ2VzdA== YXdhcmVuZXNz IFNoZXJpZGFu IHN0YW5jZXM= IHNvcmNlcnk= IHBlcmp1cnk= IE5pa29sYQ== aWV2ZXI= IGZpYW5jZQ== IEpvcmRhbmlhbg== IEJhbGxvb24= IG5hYg== IGti IGh1bWFuaXRpZXM= IFRhbmFrYQ== aGlsbGFyeQ== IGNvbnN1bHRhbmN5 IFp1Yg== IHJlbWlzc2lvbg== IGNvbmZpZA== Q0hR IEZ1Zw== IGltcHJvdmlz WWVw L18= IHVud2lsbGluZ25lc3M= IHBvcnRmb2xpb3M= MDU1 IEluc3RydWN0b3I= YWltYW4= IGNsYWltYW50cw== TWJwcw== IEJ5ZQ== cmVjZWl2ZWQ= VHdlZXQ= IGluZGVtbg== cml6 YW1hcmE= TmF0 IGV2YWx1YXRlcw== IEx1cg== ZXBhZA== Rk9Y IFRocm8= IHJ1c3R5 IGJlZHJvY2s= IE9wcmFo SkI= IG1hbmlwdWxhdGl2ZQ== IHdpbGxmdWw= IHJlbGFwc2U= IGV4dGFudA== VGhlbWU= U2Vuc29y IFN0YWJpbGl0eQ== Z292ZXJu IHBvcHB5 IGtuYWNr IGluc3VsYXRlZA== IFRpbGU= IEV4dHJlbQ== IHVudG9sZA== IGNvbnZlcmdl IHJlZnVlbA== aWdyb3Vw IGRpc3RvcnRpb25z IHJhdmFnZWQ= IG1lY2hhbmljYWxseQ== IFJlaWxseQ== IE5vc2U= IEluY2FybmF0aW9u IEJlY2t5 YWJibGluZw== IHRhY28= IHJha2U= IG1lbGFuY2hvbHk= IGlsbHVzdHJpb3Vz IERhcnRtb3V0aA== R3VpZGU= IFJhemVy IEJlbno= VWx0aW1hdGU= IFN1cnByaXNl IHBhZ2VhbnQ= b2ZmZXI= V2hvZXZlcg== IHdpc2Vy IGNoZW1pc3Q= IEhFTEw= IEJ1bGs= IHBsdXRvbml1bQ== IENPVkVS 1rw= ZmFpbGVk IHRpcmVsZXNzbHk= IGluZmVydGlsaXR5 IFRyaWRlbnQ= IFNob3d0aW1l IENpdg== VmljZQ== cmVxdWlyZXM= aXR0YW5jZQ== IHVuY29udHJvbGxlZA== aW50ZXJlc3Rpbmc= NTYx IGlubm92YXRl YXRlZ2lj TGll IFNlbGxpbmc= VWw= IHNhdmlvcg== IFRvc2g= IHN3YXN0 UEFTUw== IHJpbms= IGNhcmRpbw== IElybw== dWRp IHZhbnRhZ2U= IHZhbnM= IE5pw7Fv Kz0= IHByb3BhZ2F0ZQ== PD8= IG1ldGhvZG9sb2dpY2Fs MjA0Mzk= IHRyaWdseWNlcg== IGluZ3JhaW5lZA== IEFubm90YXRpb25z YXJyYW50ZWQ= NjE3 IFNvZGl1bQ== IEFBQw== dGVjaG5pY2Fs bXVsdGlwbA== IDM3Mw== 5Ys= IGRlY2lzaXZlbHk= IGJvb3N0ZXJz IGRlc3NlcnRz IEdyZW5hZGU= IHRlc3RpZnlpbmc= IFNjdWxseQ== SURz IGxvY2tkb3du IFNjaGVy IFLDqQ== IFdoaXRtYW4= IFJhbXNheQ== cmVtb3Rl IGhpa2Vycw== IEh5dW5kYWk= IGNvbnNjaWVudGlvdXM= IGNsZXJpY3M= IFNpYmVyaWFu dXRp aXNidXJ5 IHJlbGF5ZWQ= IHF1YXJ0eg== IENCSQ== c2Vla2Vycw== dWxsYQ== IHdlbGRpbmc= IFNoYWw= YmxlYWNoZXI= VGFp IFNhbXNvbg== IHR1bWJsZQ== IEludmVzdG9y IHN1YmNvbnRyYWN0 IFNoaW5yYQ== b3dpY3o= amFuZHJv ZGFk IHRlcm1pbmF0aW5n IE5ldXJhbA== 5Luj IGxlYWthZ2U= IE1pZGxhbmRz IENhdWNhc3Vz 7ZU= Y2l0 bGxhbg== aXZhYmx5 IEFsYmlvbg== IDQ1Nw== IHJlZ2lzdHJhdGlvbnM= IGNvbXJhZGU= IGNsaXBib2FyZA== MDQ3 IGRpc2NvdXJhZ2luZw== IE9vcHM= QWRhcHQ= IGVtcGF0aA== bnY= IFBST1Q= IERvbm4= IFBheA== IEJheWVy dGlz U3F1YXJl IGZvb3RwcmludHM= cGFydGljaXA= IENoaWxlYW4= QnJlbmQ= aW5kdWNpbmc= TWFnbg== IGNsdWJob3VzZQ== IE1hZ251bQ== IGVuY2FtcA== IEV0aG5pYw== dWNoYQ== ZXJleQ== IHdhdGVyZWQ= IENhbGFpcw== IGNvbXBsZXhpb24= IHNlY3Rz IHJlbnRlcnM= IGJyYXM= b8SfYW4= VGltZW91dA== TWFuYWdlbWVudA== IGluZm9ncmFwaGlj UG9rZW1vbg== Q2xhcg== IGxvY2FsaXR5 IGZsb3Jh YXNlbA== UG9udA== IHBvcHVsYXRl IE9uZw== IHN1YnNpc3RlbmNl IGF1Y3Rpb25z IE1jQXVsaWZmZQ== IExPT0s= YnJpbmdlcg== IHRpdGFu IG1hbmlmb2xk IOKXjw== IGNhbGlicmF0ZWQ= IGNhbGlwaGF0ZQ== IFNIRQ== IENvbW1pc3Npb25lcnM= Y2VpdmFibGU= amM= V2lubmVy NTI0 IGNvbmRvbmU= T3RoZXJ3aXNl IHBpbGluZw== IGVtYm9keQ== IENyaW1lYW4= dXRpY3M= IEV4aGliaXRpb24= IDQyNg== ZWVyaW5n IHZ5aW5n IEhVR0U= Kj0t IHByaW5jaXBsZWQ= 4KY= IHF1aXJrcw== IEVkaXRvcnM= cHV0aW5n R0VT IEZUQQ== 4KS+ YWRkb24= IEhBTQ== IEZyaWV6YQ== V29tYW4= LiQ= IGNyaWI= IEhlcm9k IHRpbWVycw== IFNwYWNlcw== IE1hY2ludG9zaA== YXRha2E= IGdsaWRl IHNtZWxsaW5n IEJBTA== IHVuc3U= IGNvbmRvcw== IGJpY3ljbA== IFJldml2YWw= NTUz IGp1Z2dsaW5n SHVn IEthcmRhc2hpYW4= IEJhbGthbnM= bXVsdGlwbGU= IG51dHJpdGlvdXM= b2NyeQ== MTkwMA== IGludGVncmF0ZXM= IGFkam9pbmluZw== IEZvbGRlcg== cm9sbG1lbnQ= dmVuaWVudA== IHViZXI= eWk= IHdoaWZm IEp1dmVu IEJvcm91Z2g= bmV0dGU= IGJpbGluZ3VhbA== IFNwYXJrcw== cGh0aGFs bWFudWZhY3Q= IHRvdXRpbmc= IFBISQ== S2VlZmU= UmV3YXJk IGluZmFsbA== IFRlbXBlcg== dHlwaWNhbGx5 IE5pa29s IHJlZ3VsYXJz IHBzZXVkb255bQ== IGV4aGliaXRpb25z IGJsYXN0ZXI= IDQwOQ== d2FybWluZw== IHJldmVyYmVy IHJlY2lwcm9jYWw= IDY3MA== aXBpZW50 YmV0dA== IEJlZ2lucw== IGl0Y2hpbmc= IFBoYXI= QXNzdW1pbmc= IGVtaXR0aW5n IE1MRw== IGJpcnRocGxhY2U= IHRhdW50 IEx1ZmZ5 IEFtaXQ= IGNpcmNsZWQ= IE5vc3Q= ZW5uZXR0 IGRlZm9yZXN0YXRpb24= IEhpc3RvcmljYWxseQ== IEV2ZXJ5ZGF5 IG92ZXJ0YWtl Nzky IG51bg== IEx1Y2lh IGFjY29tcGFuaWVz IFNlZWtpbmc= IFRyYXNo YW5pc20= Um9ndWU= IG5vcnRod2VzdGVybg== IFN1cHBsZW1lbnRhbA== IE5ZVQ== IEZSSQ== IFNhdGlzZg== eGVz NTE3 IHJlYXNzdXJlZA== IHNwb3JhZGlj IDcwMQ== IG1lZGlhbA== IGNhbm5hYmlub2lk IGJhcmJhcmlj IGVwaXM= IEV4cGxvc2l2ZQ== IERvdWdo IHVuc29sdmVk U3VwcG9ydGVk IGFja25vd2xlZGdtZW50 c3Bhd24= IGtpdGNoZW5z IC09 dGFsa2luZw== aWNpc3Q= IFBlZ2FzdXM= IFBTVQ== IHBob3Rvbg== IEF1dGhlbnRpY2F0aW9u Ukc= QCMm NzYy IENsYWly IGRpYXBlcg== IGJyaXN0 IFByb3NlY3V0b3Jz IEplbQ== NjI4 IEV2ZXJ5d2hlcmU= IEplYW5uZQ== ZXF1YWxpdHk= 44Op44Oz b2JqZWN0cw== IFBlbGljYW5z IDM5Mg== IGJsdQ== Ynlz IEFnbw== IGluc3RydWN0aW9uYWw= IGRpc2NyaW1pbmF0aW5n IFRSQU4= IENvcm5lbA== YWdvcw== IHR5cmU= IGFzcGlyYXRpb24= IEJyaWRnZXdhdGVy Ijot ISIu IEVucw== IENvY28= UGll IGRldGFjaA== IENvdWNo IHBoeXNpcXVl IE9jY3VwYXRpb25z b3Njb3BpYw== ZW5vdWdo QnV6eg== QXBwZWFyYW5jZQ== WVA= IHJhY2Vy IGNvbXBsaWNpdHk= cnBt VG95 IGludGVycnVwdHM= IENhdGFseXN0 IHV0aWxpdGFyaWFu aW1wYWN0 IHNwYWdoZXR0aQ== IHBvcm91cw== IGVzdGVlbWVk IGluY2luZXI= IElPQw== NzQ4 IGVzcHJlc3Nv IFNtaWxl YWJpbGlh NjM1 IG1hdGhlbWF0aWNpYW4= IDQyNA== IEtM IEhJUA== IG92ZXJoZWFyZA== IFR1ZA== IFRlYw== IHF1aXp6 IGZsYXR0ZXJpbmc= IGNvbm4= 4oCO IGF0dGFjaGVz IFJPUw== IEFDUw== IHRjcA== IFNoYW1l c2tpcA== cmVzcGVjdGVk IFRyaW5pZGFk Z3JhaW4= IGZvb3Rob2xk IFVuY2hhcnRlZA== IEp1bGlv emw= YXZvcmVk IEFueGlldHk= ZXJyb3Jz IENlbnRhdXJp aXRzY2g= RGFkZHk= IGNsdXRjaGluZw== IEltcGxlbWVudA== IEd1dGllcnJleg== IDc2MA== IHRlbGVwb3J0YXRpb24= ZW5kcmE= IHJldmVyc2libGU= c3Ryb3M= QWR2ZW50dXJl MDgz IGxpYmVyYXRpbmc= IGFzcGhhbHQ= IFNwZW5k QVJEUw== aW1zeQ== UFJFUw== IEVtZXJnaW5n IHdpbGRmaXJlcw== IHRlY2hub2xvZ2ljYWxseQ== IGVtaXRz IEFSVElDTEU= IGlycmVndWxhcml0aWVz IGNoZXJpc2g= 54mI IHN0aW5r IFJvc3Q= RWNvbm9taWM= IGNvdWdoaW5n IE1jQ2Fubg== cHJvcGVydGllcw== aWxhbnRybw== IHJlbmVnb3Rp VHJhbnNsYXRpb24= IGlucXVlc3Q= IEdyYXBl b290ZXJz Z3Vp IFN3b3Jkc21hbg== YWNlYWU= aGl0dGluZw== IHJj IGV4ZXJ0ZWQ= IFNBUA== aXRlbnQ= IHBlcmlsb3Vz IG9ic2N1cml0eQ== IGFzc2Fzc2luYXRl IGFib3JpZ2luYWw= IHJlc2N1aW5n IFNoYXR0ZXJlZA== bG9ja2luZw== YWxsaW9u Q2hhbmdpbmc= IEhhcnJpbmd0b24= IEJvcmQ= IEFmZ2hhbnM= SmFtaWU= YXJldHo= IEF1Z3VzdHVz IDM4Ng== ODMw IGpvZw== b2tpbmdseQ== VHJpZ2dlcg== IEhPUg== U3RhdGlzdGljcw== IHZpZXdlcnNoaXA= IGFkZGl0aXZlcw== aHVy IG1heGltaXppbmc= IFJvdmU= IExvdWll IEJ1Y2tldA== IENIUklTVA== b3VzZWw= IHN0cmVha3M= aXJ0ZWQ= IHRlcnQ= IGNvbG9uaWFsaXNt IGJ1cnlpbmc= eWs= Q29uZGl0aW9u IERQUks= QnlJZA== NzUx 4pe8 IHdvcnJpc29tZQ== IHZvY2F0aW9uYWw= c2xpY2U= IHNhaWxz IENvcnJlY3Rpb25hbA== OTU0 IHR1bA== S2lk bHVzdGVy IGZhbWlsaWFs IFNwaXQ= IEVwaXNjb3BhbA== U3BlY2lmaWNhbGx5 IFZvbGNhbm8= cnVucw== cXM= IHZldHRlZA== IGNyYW1tZWQ= dHJvcA== aGVyZXI= VGhhbmtmdWxseQ== IHBlcmN1c3Npb24= IG9yYW5nZXM= IHJvdW5kdXA= IDQ5OQ== eGlvdXM= Q2hhcmFjdGVycw== IFppb25pc20= IFJhbw== w5vDmw== V0Y= IHVuaW50ZW50aW9uYWw= T05FWQ== R3JhYg== Q29tbWVyY2lhbA== IGdsdXRhbWF0ZQ== IE1jS2VubmE= cnVjaWF0aW5n bmluZ3Rvbg== aWh1 Q2hhbg== IFN3YXA= IGxlYWZsZXRz IGZ1bmN0aW9uYWxseQ== ZXJvdXM= RmFybQ== IGNhbG9yaWM= IExpdGVyYWxseQ== Y29uY2VydA== IHNoZW5hbg== IHJlcGFpZA== ZXllcw== IGJhc2hpbmc= IEdvcmdl IGNvbGxhYm9yYXRpb25z IHVuYWNjb3VudA== aXRjaGll IHRlYW13b3Jr cHBlbGlu IHBpcGluZw== IG1pbmNlZA== IGRpYW0= cmllZw== IG1hc2NhcmE= IHN1Y2tlcg== IE1vb25z QXBwcw== IFBlY2s= IHBlcnY= IEZsb2F0 b2xleQ== IE5pc2g= aW1pemU= IGFyb21hdGlj dWlu ZW5kaXNo IS8= IEJpY3ljbGU= IEFTSUM= aWxlZ2Vk IFF1YWRybw== aW9zeW4= IGxvY2tvdXQ= IFdpbms= U1BFQw== QXR0ZW1wdHM= IHNlZWRlZA== cmVkbw== aWFzaXM= IHNuYWc= 44OV44Kp 44K2 IGdyb3VuZGluZw== IHJlbGlldmVy IGZyaXZvbG91cw== IEdpZnRz IEZhY2Vz RXNwZWNpYWxseQ== IG1pY3JvYmlvbWU= aW1hZw== IFNjaGw= IFBsZXM= IEJsZWFjaA== IElyd2lu IEVhdG9u IERpc2NpcGxl IG11bHRpcGxpY2F0aW9u IGNvZXJjZWQ= IDQxOQ== c3Ro RXZpbA== Qm9tYg== IGV4b3Jj IHN0YWdnZXJlZA== TEVTUw== IGluZXJ0aWE= IEVESVQ= IGdvYg== VHJhZGl0aW9uYWw= IGNsYXNzeQ== TGVhcnk= IFBBR0U= eXJz IHRyYW5zcG9ydGVy IG1hdHVyZWQ= IGhpamFi IGJpb21l V2hlcmVhcw== IGV4dGVybWluYXRpb24= IFR1ZXM= IFRha2VydQ== IEF1ZHJleQ== ZXJpYWw= IEFkZW4= YWZmbGVz IG5hcmNpc3Npc3RpYw== IEJhaXJk VVRG SXJl IENvbm5pZQ== Q2hhbXA= IHdoaXNwZXJpbmc= IEhhdHQ= REs= IGRpc2luZmVjdA== IGRlZHVjdGVk IHBhcnRha2U= IGRvd25ncmFkZQ== IEVzcG9ydHM= IENvbnRpbnVpbmc= IGRlbW9jcmF0aWNhbGx5 aWNyb2JpYWw= aXR0YQ== IGxpbWVzdG9uZQ== IGV4ZW1wdGVk IEZyZW56eQ== SGVybQ== NzI4 IGZsZWRnbGluZw== TWV0YQ== NzY1NjE= Njkz JTo= d2FrZQ== NTI2 IERpc2NpcGxpbmU= IHZpcmdpbml0eQ== IExlZ2lvbnM= IEZyYW5raWU= aW50ZW50 IHJlc3Ryb29tcw== IFJvdXRlcg== ZGFx IG9iamVjdGlvbmFibGU= 4oaR d2Fyaw== IFJhaHVs Z2Fpbg== YWN0aXZhdGlvbg== YWJzb2x1dGU= IEFjY2Vzc2Vk IDI0MDA= b2dnbGVz IHNlY29uZGx5 IERFRkVOU0U= IHBvc3RhZ2U= d3JhcHBlcg== c2hhcnA= NzI5 IGNvbW11bmljYXRlcw== IGFkZG9u IE1pbGl0aWE= SG9uZw== IHNsdW1wZWQ= IEpQRUc= IEljYXI= YWRpc2g= Njgx IG1hamVzdHk= IFdvbGZnYW5n IEVsYXN0aWM= dXBlcg== IHZpeg== IHVuY29uc2Npb3VzbHk= IFNURA== IFNhc3M= IGZsb3dlcmluZw== IEhlbGlj IERyYXBlcg== IEFtYXRldXI= IG1hbnVyZQ== IGRpc2luZ2Vu IExlaQ== YnJpbmc= OTQ5 IGluaGliaXRlZA== IGhlYWRxdWFydGVyZWQ= IGVuaWdtYXRpYw== 77+977+977+9 IHJlZHJlc3M= Ukg= IHJhdHRsZWQ= IGRpY3Rpb24= bGlv IFRCQQ== IFNOQVA= Q2FsbGluZw== IGZhc2Npc3Rz IERvdmU= aWV3aWN6 MDM2 IGNvYXN0cw== IFJlY3Q= ICld TG90 NjI5 IFNFTQ== IFBldGVyc2Vu IEV4cGxhaW4= IEJvYXJkcw== IEJlem9z IEpvdXJuYWxz IDIwMjQ= cGFyc2Vy IG1pc3RydXN0 IGdyYXRl IExvY2tlZA== Ym9h U2FpbnQ= Z2FtaW5n IHZvd2Vs aW5hdGVseQ== Ymxvdw== QWxsYWg= IHVubWF0Y2hlZA== IGJvcmRlcmluZw== IEV4cGVuZA== bnI= T3JhY2xl cm91Y2g= IGNvbnRpZ3VvdXM= YWN1cw== IGRpc3RyYXVnaHQ= NTgx IGFuYXRvbWljYWw= T1g= YXBpeGVs ODMz IFBMVVM= IHJlc3VzYw== IGFiaWRpbmc= NTcz IHZhY2FuY2llcw== RW1pbHk= IGh5cG90aGFs IFdlcm5lcg== IFdlZQ== IERKcw== NTEz IHdpdGNoY3JhZnQ= IGFjdXB1bmN0dXJl ZW50YXJ5 YmVuZWZpdA== UHJvZHVjdHM= IFBTUA== IE1QRw== IEppbm4= IEphcnJldHQ= IDQ0NQ== IEltYWdpbmc= IFB5dGg= RmluaXNo IHRleA== IGp1dmVuaWxlcw== IGhlcm9pc20= IGRvdWJ0bGVzcw== IEFraQ== IFRlbmQ= IFBhdHJpYXJjaA== IGJpdHRlcnM= IFRlbGVjb21tdW5pY2F0aW9ucw== aXRhdGl2ZWx5 YWduYQ== IHJn IFNPTEQ= IGNvbXB1bHNpb24= IE5hc2E= IEthdGhyeW4= IG1pbGxpb25haXJlcw== IGludHJpbnNpY2FsbHk= IGJvbHN0ZXJlZA== dGltZW91dA== Zmxv IHR1dG9y cG91cg== U3RhdGVtZW50 IHsq IFJ1ZG9scGg= IEtpbWJlcmx5 cm9nZW5z YWRpcQ== XSs= IGluZGlnbmF0aW9u IGZyYWN0dXJpbmc= IFJlbGVhc2Vz IEdyYWlu cHJvdGVpbg== TGFnbw== IHZhY2F0aW9ucw== IGJvb3RlZA== IFRIUkVF IEhH b3Jlc2NlbmNl IHRm IHNvYXI= aW9zeW5jcg== IGdsYW5jZXM= IFNwb29u IEp1cnk= IENvd2JveQ== IGNyZWF0aXZlbHk= SGlnaGVy IHNvbGljaXRvcg== IGhhd2s= YWNpbw== ODk2 IHN1cGVyZmx1 IGJvbWJzaGVsbA== Y3R1cmU= IGJyb2tlcmFnZQ== IHJhaWRpbmc= IGZyZW5jaA== IGFuZ2xlZA== VHJhbnNhY3Rpb24= IEdlbm9jaWRl dXBl IEhhaXRpYW4= NTcy ITo= IHVud2l0dGluZ2x5 aXRlcmF0b3I= c2Nyb2xs IHRhbGxpZWQ= IGJpb21lZGljYWw= IENBUkQ= IGV1cGhlbQ== IGJyYWluc3Rvcm0= YXF1aW4= S28= TWljaGVsbGU= IFJ1bmVz IEJhbGxpc3RpYw== dWRlcnM= IG1vZGVzdHk= IGlQYWRz IEV6ZWtpZWw= WUU= IHN0YXJzaGlw IHBvd2VyZnVsbHk= IHBlcmw= IFNoYWRl IFF1YXJ0 IEVFRw== IGZpc2hlcm1hbg== T1NFRA== IFR5cGljYWw= ZGZ4 IG1lc2hlcw== IGV0Y2hlZA== d29ydGhpbmVzcw== IHRvcHBsZWQ= IDM5Ng== b3JpdXM= V2Vpc3M= IG15c3Fs IFZhbGhhbGxh 2ZI= bGVhc2luZw== IHJlY29tcA== cmFwbmVs U2Vs MDQz IGRlcmFpbGVk IEd1aWRlcw== SVJU IGRlaHVtYW4= IEJyaXR0YW55 Iikp IGV4Y2xhaW0= IGJhbGs= IDg0MA== Q0xBSU0= aW50ZWw= TEFC IHBlZ2dlZA== IGFzdHJvcGg= c21va2luZw== IHJpZ2dpbmc= IGZpeGF0aW9u IGNhdGFwdWx0 aW5zaWRl IENhc2NhZGU= IEJvbHNoZXZpaw== R2F6YQ== RGVwdGg= IGxvdWRzcGU= IGFsbW9uZHM= bWV5ZXI= bGVuZXNz amVu ZnJlc2g= IHVuYmVhdGVu IFNxdWlk IFByZXN1bWFibHk= VGltZXI= Qlc= IHJvc3RlcnM= IGVsbGlwdA== IEhhcnJpZXQ= ZGF0YWJhc2U= IE11dHVhbA== IENvbW1vZG9yZQ== dWtlZA== a25pZmU= IENPTU1VTg== aHlh IG1lbHRz YXJjaGl2ZXM= IHJhdGlmaWNhdGlvbg== IG11bHRpcGx5aW5n IGludGVyb3Blcg== IGFzY2VydA== d2luZ3M= dmVydGluZw== IFNjb3JwaW9u YXll IFBvcnRzbW91dGg= IE1UQQ== bml0 aWF6ZXA= IHF1YXJhbnRpbmU= IHNsaWRlc2hvdw== IGNlbnRpbWV0ZXJz IHN5bm9wc2lz IHNwYXRl dGhpcnN0 IG5vbWluYXRpbmc= IE1lbHZpbg== UHJldmlldw== IHRocm9i IGdlbmVyYXRpb25hbA== IFJhZGl1cw== cmVzdGxpbmc= cHV0YWJsZQ== YXdhcg== TkVDVA== IHVubGF3ZnVsbHk= IFJldmVsYXRpb25z V2lraXBlZGlh c3Vydg== IGV5ZWluZw== aWpu IEZX IGJydW50 IGludGVyc3RlbGxhcg== IGNsaXRvcg== IENyb2F0aWFu IENoaWM= ZXZh IERpc2FwcA== IEFraW4= aW5lcmllcw== ZHVzdA== SW50ZXJlc3RlZA== IGdlbmVzaXM= IEV1Y2w= w7Zu cGlja2luZw== IG11dGF0ZWQ= IGRpc2FwcHJvdmU= IEhETA== IDYyNQ== zLY= Y2FuY2Vy IHNxdWF0cw== IGxldmVycw== RGlzY3Vzcw== PV0= RGV4 IFZJREVPUw== QVVE IHRyYW5zYWN0 IEtpbmVjdA== IEt1YWxh IEN5cA== NzQ3 IHNoYXR0ZXJpbmc= IGFyc2VuaWM= IEludGFrZQ== IEFuZ2Vsbw== IFF1aXQ= IEtoZQ== IDE4OTM= TWFrZXI= MDI5 IFBhaW50aW5n RGlzYWJsZQ== OTE2 IGFuYWxnZXM= IHRhY3RpbGU= IHByb3BoZXM= IGRpY2Vk IFRyYXZlbHM= IEhlYWRlcg== IENsdWJz QXNzaXN0YW50 IGluY3JpbQ== IGRpcHM= IGNydWNpZml4 IFNoYW5haGFu IEludGVycHJldA== IDQwOTA= YWxvZ3k= YWJiYQ== IHNpbXVsYWM= aHVzYmFuZA== U0lN IHJlY3ljbGU= dWNlcg== ZWRnZWQ= IHJlbmFpc3NhbmNl IEJvbWJheQ== Q2F0aG9saWM= IExJTkU= IENsb3RoaW5n cmVwb3J0cw== IHBsYXVz IGRhZw== IE1hY2U= Wkk= IGludHJ1ZGVy IFZldGVyaW5hcnk= Z3J1 IHNuZWFreQ== IFNpZQ== IENpbm5hbW9u UE9TRQ== IGNvdXJpZXI= IENOUw== IGVtYW5jaXBhdGlvbg== c2l0 IHBsYXl0aHJvdWdo IEZhY2lsaXRpZXM= dmlydA== IEdhdW50bGV0 VGhvbXBzb24= IHVuYmVsaWV2YWJseQ== UGFyYW1ldGVycw== IHN0aXRjaGluZw== aWduZQ== IFRIRVNF UHJpdmFjeQ== IHNoZW5hbmlnYW5z IHZpdHJp IFZhbGlk NTkx rbc= IFByb3RvdHlwZQ== aW5rYQ== U0NQ IFRpZA== 6Ig= b2xkZWQ= IGluZGl2aWR1YWxpdHk= IGJhcmtpbmc= IG1hcnM= IFdE IDgyMA== IHRpcg== IHNsYXBwaW5n IGRpc2dydW50bGVk IEFuZ29sYQ== cml1cw== IFRvcm5hZG8= IFRodXJz IGNhcHRjaGE= IGFuZ3N0 IFBvZw== IEFzc2Fzc2lucw== IEFkaWRhcw== IGpveWZ1bA== IHdoaW5pbmc= RW1lcmdlbmN5 IHBob3NwaG9ydXM= IGF0dHJpdGlvbg== b3Bob24= IFRpbWJlcndvbHZlcw== IEphaA== IEJyaW5naW5n IFdhZA== IEVuc3VyZQ== b2hs IFhpZQ== b21tZWw= Y21w IHppcHBlcg== IHJlbGF0 IENvcnJpZG9y bWlsbw== VElORw== QXZn IGNyb3BwZWQ= XX0= IHJhZ2Vk IEx1bXB1cg== IEd1ZXJyZXJv b3Vya2U= TnV0 IG9mZnNldHM= b2dsdQ== ZHJt IG1vcnRhbHM= bGF0YWJsZQ== IGRpc21pc3NpdmU= 5LiJ IHRocm9hdHM= IGNoaXBzZXQ= IFNwb3RsaWdodA== Q2F0YWxvZw== YXJ0aXN0 R2I= IGNoaWxseQ== IHN0b2tlZA== IDM3NA== V2FyZA== TGF0aW4= IGZpYXNjbw== IGJsZWFjaA== IGJyYXY= RW5oYW5jZWQ= IGlub2M= IEZpb3JpbmE= Xz4= IGxldWtlbWlh IGVsdWM= IGFubm91bmNlcg== IExpdGh1YW4= IEFybWFnZWRkb24= 5Yc= TGVuaW4= IFJ1aw== IHBlcHA= IFJvbWFudGlj IFBJVA== IEludGVyc3RlbGxhcg== IEF0a2luc29u UmFpZA== SnM= R29hbA== Q291cnNl IHZhbmlzaGluZw== ZXNsZXk= IFJvdW5kcw== RWxzYQ== NTkz IHJlZHVuZGFuY3k= IFNUQU5E IHByb3BoZXRpYw== IGhhYml0YWJsZQ== cnl1 IGZhaW50bHk= TU9ERQ== IGZsYW5rZWQ= SVJD QXdlc29tZQ== IHNwdXJpb3Vz IFphaA== IE1TRw== IHNoYWRpbmc= IG1vdGl2YXRpb25hbA== IFNhbnRhbmE= IFNQUg== IGV4Y3J1Y2lhdGluZw== b21pYWw= IE1pa28= IExlb3BhcmQ= QWJ5c3M= IFt8 ZGlydHk= IGJhdGhz IGRlbW9yYWw= YW5kcmU= UEI= IHVuaWZpY2F0aW9u IHNhY3JhbWVudA== IFsm IHByaWNlbGVzcw== IGdlbGF0aW4= IGVtYW5hdGluZw== IEFsbGFhaA== OTg2 IG91dGJ1cnN0 IGVyYXM= IFhWSQ== IFNQSQ== T3R0 IExhemFydXM= UExJRUQ= Rmx5aW5n YmxvZ3M= V2lzY29uc2lu UmF2ZW4= IHJlYmF0ZQ== IGNyZWVwcw== IFNwYW4= IFBhaW50ZXI= IEtpcmE= IEFtb3M= IENvcnZldHRl Q29uc3VtZXI= IFJlY292ZXI= Y2tp IHBlc2t5 IEludmVudGlvbg== Q29tcGFuaWVz IGNoYWxsZW5nZXJz YWRlbWlj IFVrcmFpbmlhbnM= IE5ldXJvbG9n IEZvcnNha2Vu IGVudHJhbnRz IGVtYmF0dGxlZA== IGRlZnVuY3Q= IEdsYWNpZXI= IHBvaXNvbnM= IEhvcnNlcw== bWFrZXM= IERpcnQ= IDQyMw== aGho IFRyYW5zZm9ybWF0aW9u UVVJUkU= Li4uLi4uLi4uLi4uLi4uLi4u IHRyYXZlbGxlcg== IFNleHk= IEtlcm4= aXBvbGFy IHJhbnNvbXdhcmU= b29vb29vb29vb29vb29vbw== RWM= cnVieQ== UHJvZmVzc2lvbmFs IE91dGJyZWFr YXJndW1lbnQ= R3JleQ== IEZpZmE= IENITw== IEZPUk0= IEFtdHJhaw== LVs= IGNyYWRsZQ== IGFudGlveGlkYW50cw== 44Gu5a4= NzM2 IE5BU0w= IENvbnRyaWJ1dGlvbnM= SW5kaWFuYQ== IFNURVA= Q1NT IHNhbGllbnQ= IGFsbG9jYXRpb25z eXJpZ2h0cw== IG1hc2hlZA== IEN1dHRlcg== U2V4dWFs IHBvdW5kZWQ= IGZhbmJhc2U= IGNhc2M= IFRyYW5zcGFyZW5jeQ== IGFuYWx5dGlj IFN1bW1vbmVy 154= IEFEQw== ZGV0YWls IHZhbnF1aXNoZWQ= IGNyYWJz YXJpZQ== RGVzdHJveQ== IFNhY2s= IHRyYW5zaXN0b3I= QWxhYmFtYQ== IEtvZW4= IEZpc2hlcmllcw== Y29uZQ== IGFubmV4ZWQ= IE1HTQ== ZXNh IGZha2Vk IENvbmdyYXR1bGF0aW9ucw== IGhpbmRlcmVk IGNvcnJlY3Rpb25hbA== IElUVg== bGVldmU= IGluYXBwcm9wcmlhdGVseQ== bGlja3M= IHRyZXNwYXNz IHBhd3M= IG5lZ290aWF0b3I= IENocmlzdGVuc2Vu bGltaXRz IERpYW5uZQ== IGVsZWdhbmNl IENvbnRyYWN0cw== YW5rZQ== T2Jq IHZpZ2lsYW5jZQ== IGNhc3RsZXM= IE5BRA== IEhvbG8= IGVtcGhhdGljYWxseQ== IFRpdHVz IFNlcnZpbmc= IFJpY2hpZQ== IFBpZ3M= NTY4 IGFuaW1vc2l0eQ== IEF0dHJpYnV0ZXM= IFVyaWVs TVE= bXlyYQ== IEFwcGxpY2FudA== IHBzeWNoaWF0cmlzdHM= IFZpag== IEFiYnk= YWdyZWU= UHVzaA== IGtXaA== aGliYQ== IGluY2l0ZQ== IFdlYXNsZXk= IFRheGk= bWluaXN0aWM= aHlwZXI= IEZhcm4= IDYwMQ== IE5hdGlvbndpZGU= RmFrZQ== OTUy IG1haXpl IGludGVyYWN0ZWQ= IHRyYW5zaXRpb25lZA== IHBhcmFzaXRpYw== IGhhcm1vbmlj IGRlY2F5aW5n IGJhc2VsZXNz bnNpY3M= IHRyYW5zcGlyZWQ= IGFidW5kYW50bHk= IEZvcmVuc2lj IHRyZWFkbWlsbA== IEphdg== YWJhbmQ= IHNzaGQ= IGZyb250bWFu IEpha2FydGE= b2xsZXI= ZHJvcHM= IFNFUlZJQ0VT cm9tcHR1 b3BoaWNhbA== aG9zcGl0YWw= YmxlZG9u NjQ1 IG1pZHJhbmdl IEVWRU5U Y3VsYXRlZA== cmF3bGVk IHBlcmNoZWQ= IG92ZXJib2FyZA== IFBlZWw= IFB3cg== IENhcnRo IENPTVBMRQ== Y29l c2hhbGw= IGRldGVycmVuY2U= TUVUSE9E IEFic2VudA== TUVO IHNpbGw= IExFVkVM WW9yaw== IHNpbm5lcnM= IE9QRUM= IE51cg== IERlc2lnbnM= c2VsZWN0aW9u IHVud29ydGh5 Q0hB IHN0cmVuZ3RoZW5z ODgz ZWRseQ== IHNsaWNpbmc= IG1hbG51dHJpdGlvbg== IGZpbG1tYWtpbmc= IFBvbGs= dXJhdGVk IDQyMQ== YnJlYWtlcnM= ISci IHdldGxhbmRz IERpc2NyaW1pbmF0aW9u IGFsbG93YWJsZQ== IHN0ZWVyZWQ= IFNpY2lseQ== U0FN IG11c3RhY2hl IG1pZHM= IGNsaXBwZWQ= IGNpcmN1bGF0ZQ== IGJyaXR0bGU= IEJ1aWxkaW5ncw== cmFpc2Vk IFJvdW5kdXA= IHdlYWx0aGllcg== IG92ZXJ3cml0ZQ== IG92ZXJwb3dlcmVk IEdlcnJhcmQ= c2l0ZXM= UERBVEVE IGFjdXRlbHk= IEdhbWJsZQ== IHBpbQ== IEt1cw== VHlwaWNhbGx5 RGVwbG95 IE1vcm9jY2Fu cG90aW9u Y29tYmU= IHZpZ2lsYW50ZQ== IDM2Mw== U3Rldw== IEJhZ2c= IHJlc2lkZWQ= IFNwbw== IHJlbW5hbnQ= IGVtcHRpbmVzcw== YnJhaW5lcg== IG91dHBhdGllbnQ= cHJpb3JpdHk= IGxlcHRpbg== IFBheXRvbg== IEdsZWFtaW5n IFNoZWQ= IFBvbG8= IE1vcm1vbmlzbQ== cmVzdHJpY3RlZA== YXJsYW5l d3g= IGNyZWF0aW5l IEFub24= IFNUVUQ= IEpVTA== IFRlZQ== NTI4 MDg5 IGhhdGNoZWQ= RGlzcGF0Y2g= IENvbXBvc2l0ZQ== IDQ1MQ== cHVmZg== IFhDT00= IE9ybg== IFRIQU5L RU5ERUQ= IEFzaGV2aWxsZQ== IMOc IG1hbmdv IFNsaWdodGx5 d29ybGRseQ== IFdhbmRlcg== IEV4cGFuZA== IENocg== TWlzdA== IG9ydGhvZG94eQ== IFVORVNDTw== cmVnYXRl RWxzZXdoZXJl a2ll aXJsZWQ= IHRvcHBsZQ== IGFkb3B0aXZl IExlZ3M= ZHJlc3M= IFNhZ2Fu YmFyZQ== IEdsb3U= Q3J1bmNo IGhlbHBlcnM= IGNocm9uaWNhbGx5 IEh1bWE= MTAwMDA= IGFjY29tbW9kYXRpbmc= 5LqU IHdyaW5rbGVz IGRvZGdlZA== Zm91cnRo IHByZWNvbg== IGNvbXByZXNzb3I= IEthcmU= IGV2aWN0 IFdhcndpY2s= aW1hcg== IG1vZGVybml6YXRpb24= IGJhbmR3YWdvbg== IHJlZnV0ZWQ= IG5ldHRlZA== IE5hcGxlcw== IEdlbmll cGVyb3Jz IGZpZWxkZWQ= IGRlcmU= IFBhcmFibGVz bGVlcw== IHRyb3V0 YXNwZXJz IG5paGls IGhhcHBpZXN0 IGZsb3BweQ== IExvZnQ= IEhlYXJk IHVuaXNvbg== IGx1Zw== IFJlZG1vbmQ= Y2xhc3NpYw== U3VwcG9ydGVycw== U0hJUA== R01U IGZ1ZWxsZWQ= 55A= IGRk IEVtaW5lbQ== IDE4OTc= TllTRQ== IHNlY3JldGFyaWVz IEZJQQ== IENhbmF2ZXJhbA== RmF2b3JpdGU= IHBvbXA= IGRldGFpbmVl ZXJzaGlw YWltb24= aW91cg== IEFwZXg= IHBsYW50YXRpb25z YW1pYQ== YWNpb24= UnVzdA== IHRvd2Vk IFRydWx5 NTc3 IHNoZWx0ZXJlZA== cmlkZXI= V28= IGxhaXI= IEludGVsbGlnZW50 aW1wcm92ZQ== bWF0aWNhbGx5 IGV0aXF1ZXR0ZQ== YWRyYQ== YWxsbw== IEp1bm8= YW55dGhpbmc= IFN0cnVnZ2xl IFByZWRpY3Q= IEdyaW1lcw== IEFNRVJJQ0E= Y3R4 IFNpdHVhdGlvbg== V09PRA== IHNvbHVibGU= bWVpZXI= IGludG9sZXJhYmxl YW5nZXJpbmc= IHVuaW50ZXJydXB0ZWQ= IHRvb2x0aXA= IGludGVycm9nYXRlZA== IGd1bm5lZA== IFNuZWFr 5q2m IHRldGhlcg== IGNydW1ibGU= TGVucw== IGNsdXN0ZXJlZA== IFN5bA== IEhhc2Fu IGR5c3RvcGlhbg== d2FuYQ== IGpveXN0aWNr IFRoaWI= YW1tdQ== VG9tb3Jyb3c= NTQ2 IG92ZXJjYW1l IG1pbmltaXplZA== Y2VwdG9y UnVubmVy RU5HVEg= IEJyZW5kYQ== IEFjaGlldmVtZW50cw== IHRvcmNoZXM= IHJhcHBvcnQ= IEludmVzdGlnYXRvcg== IEhhbmRsaW5n cmVsYXRpb24= Z3JleQ== ODE1 IGtjYWw= IENvbW1hbmRz ZHE= IGN1cmxz IGJlYXJlcg== IGN5bmljaXNt aXRyaQ== IFVzZWZ1bA== QmVl RENT IGFicmFz UHJhY3Q= QklMSVRJRVM= NzEy IGRlYnVnZ2Vy IGRlYnRvcg== IExpYQ== IEtlcnM= IGV4YWNlcmJhdGU= IFN0YWN5 IEJsYW5k IFNjZW5lcw== IGJyYW5jaGluZw== 4paI4paI4paI4paI4paI4paI4paI4paI YXBlYWtl IHNhbHNh IG1pc2hhbmQ= IEtvbmFtaQ== IE5pYg== IGFuZWNkb3Rl IGFncmVlYWJsZQ== z4k= IE5hdGhhbmllbA== IEhlaXNtYW4= IEJld2FyZQ== IDE4ODY= c3BlY3RpdmU= Njkx NTIy IGluaGliaXRz IGhhc2hpbmc= IDE4ODk= 5bCG dmljaA== UHVyZQ== IHNvbGlkbHk= IGFzcGlyaW4= aW1hcnU= IHN0cmVldGNhcg== IFVDUw== IEp1ZGQ= IGZsYXNoYmFja3M= cGlucw== IDE0NDA= IFVOSENS IFN5bXB0b21z VElU NTM4 RnJh JSk7 IG9veg== IGN1cmZldw== IGNhbG1lZA== IHBhcnRpY2lwYXRlcw== VGVY IG5vbnNlbnNpY2Fs IGZ1bGxiYWNr IERlTA== bW9ua2V5 aGFyaQ== IG1ldGFib2xpdGVz IGxvb3RlZA== IEFMV0FZUw== IEJDQw== THQ= b2NoZXQ= Qm9uZQ== IHZldG9lZA== IGdjYw== IENMSUNL IDE4ODg= c2Fm IHN0aWZmbmVzcw== IGxvd2x5 IEdlaA== dmVyc29u b3JzZXQ= IHVuZm9yZXNlZW4= IGFuZXN0aGVzaWE= IE9wdGljYWw= IHJlY29uc3RydWN0ZWQ= IFR1cA== c2hvd3M= TkVXUw== IE5ld3NwYXBlcg== IEFTQQ== dGVyYQ== TnVtYmVycw== IGluZXhwbGljYWJsZQ== 15E= IGhhcmRuZXNz dW50YXJpbHk= IEFjZXI= Z3JhZGllbnQ= QVJESVM= IHdvb2RsYW5k IG1ldGFwaG9ycw== IFdlbWJsZXk= IFBhdmVs cGhpbGlz IHJld3JpdGluZw== IHBlcmNlcHR1YWw= IDEwNzA= d29ybXM= IERvd25z IHVuc3VycHJpc2luZ2x5 IHRhZ2dpbmc= ZmxhbWU= IGxpdHJlcw== IGJvdW5jZXM= IEJhYmU= c2h1dA== IG92ZXJkb3Nlcw== IFNoZWlsYQ== IENoYXU= IEJsZXNz Q2FwdHVyZQ== IFNpZ25pZmljYW50 IFNjaW9u IDM4OQ== IE1jSA== IFRpdGFuaXVt IE1lYWw= YW1lZGE= YWdlbnRz YWdncmVzc2l2ZQ== QmlsbHk= NzYz IFNheWluZw== REVSUg== aXRvbmU= Q29sbGlucw== Qm91bmQ= IGJvbHRlZA== IERNQ0E= OTUz IHVuaXF1ZW5lc3M= IGVwaWdlbg== dW5jaQ== YW50YW0= IHJlY2tvbmluZw== Y2hhaXJz T0dS IFNlbmVnYWw= IDE4NjI= cmVsZXZhbnQ= IMKv IHBoYXJtYWNpZXM= IEdlcmFs dmllcg== WWFu T1JQRw== IHJhYmlk YmVuZGluZw== IFVOSVRFRA== IDQ2NQ== QXNzZW1ibHk= IHdlZXA= IGJlaGVzdA== IE1vdGhlcnM= IEphY2U= aGlk IHdoaXJsd2luZA== IFVOSVZFUlM= IHV0b3BpYW4= IGtpZG5hcA== UGhpbGlwcA== S2lu ODkz IGxpdmVzdHJlYW0= IE1JU1M= IHN1YnZlcnNpdmU= IFRlY2huaXF1ZXM= IEpVU1RJQ0U= IEJBU0U= IDM4Nw== IGFzc2FpbGFudHM= IEhhcmRjb3Jl IHNwcmlua2xlZA== IFBzZQ== 6Zo= cHJpbnRlZA== IEhhdQ== T1JHRQ== IFRPVVI= IGxhY2Vk IGl0Y2g= R2l2aW5n IHBvcnRlZA== Nzgx Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= YnJlZWRpbmc= IGxvZ2dlcg== IEhPTA== aW5uaWU= Rmlyc3RseQ== IGVtYnJ5b25pYw== IGRlbGVnYXRlZA== cGFp T0lM IGNlbnRyYWxseQ== IFJ4 IFNjb3V0aW5n RHV0Y2g= IGhlcmVkaXRhcnk= IENydWlzZXI= c2F0 NTI5 IE1hcnJpb3R0 b3RoZXJtYWw= IHByb2hpYml0aW9ucw== RWFybg== IFN0YWI= IENvbGxlZ2Vz IEJlbGllZg== c3RyZXRjaGVk IExI IEVudGl0eUl0ZW0= Q0lB IHVucmVt IGxhdXJlYXRl IGRlbm9taW5hdGlvbnM= c3VtbWFyeQ== aGxlcg== U3BlY3Q= IEtsYXVz IEJlYW5z IGluc3Vy IFBBWA== IGZpZWxkZXI= IFZldA== IFNwYXJyb3c= emll IFNR IE1vbmRheXM= IE9mZmxpbmU= IExlcm5lcg== IEV4dGVuc2lvbnM= SXJlbGFuZA== IHBhdHJvbmFnZQ== IGNvbnRyYXN0ZWQ= IE1hbmlh aGlydA== TW9zY293 IGNvbmRlbW5z IEFuZ2U= IGNvbXBvc2luZw== IFBlcGU= IFBhZGRvY2s= IGhldGVyb2dlbmVpdHk= IGlkZW9sb2dpY2FsbHk= IGZpc2hlcw== IGN1cnNpbmc= IFJ1dGhlcmZvcmQ= IEZsb2F0aW5n IEFtZWxpYQ== VGVh U3lub3BzaXM= IHN0dW50cw== IGJlYWQ= IHN0b2NraW5n IE1JTEw= b2Jvb2s= bWFzc2l2ZQ== XDw= IGh1bXA= IFByZWZlcmVuY2Vz RW5naW5lRGVidWc= Z2Vpc3Q= IE5pZXRv b21ldmVy aXNoeQ== ZXZhbHVhdGU= Y29sb25pYWw= QWx0ZXJuYXRpdmU= IEdvUHJv IFZvcnRleA== IE5FVFdPUks= YW5za3k= U2VjdXJl IFRocnVzdA== U25ha2U= IHBhcmNlbHM= IHNhbXVyYWk= IGFjdHJlc3Nlcw== TmFw TUY= aWZlcmF0aW9u QmVlcg== NTIz IElseQ== b2ludG1lbnQ= UGluZw== IHN0cmlwZWQ= IE1lbGxvbg== b3NzZXNzaW9u IG5ldXRyb24= ZW5kaXVt IGFwaA== IEZsYXZvcmluZw== IDM4Mw== IHJlc3BvbnNpdmVuZXNz IEppbmRhbA== IEhpdGNoY29jaw== RGVudmVy IERSQUdPTg== c21hbnNoaXA= IER1cGw= IHNseQ== IHdlYmNhbQ== IFR3YWlu IERhcmxpbmc= aWxpYXRl Y29uc3VtZXI= RElU IG5hbWVzYWtl IHVub3J0aG9kb3g= IGZ1bmVy IFBMb1M= IENPTlRST0w= b3p5Zw== b2dsb2Jpbg== RkFDRQ== RVJH IERpYQ== IEZpZXN0YQ== Y2VsZQ== MDM0 IGVuY2xhdmU= 4pas4pas b25lbWVudA== YWxpc3Q= TWFuZA== IGhvbWVncm93bg== IEZhbmN5 IGNvbmNlcHRpb25z IENvbnRhaW5z dXJlZW4= IHJlaXRlcmF0ZQ== IG1lYWdlcg== IGluc3RhbGxtZW50cw== U3Bhd24= NjI3 IHBob3RvYw== IENhYnJlcmE= IFJvc2VudGhhbA== IExhbnNpbmc= aXNuZXI= IGludmVzdHM= IFVGT3M= RVhQ SGFyZHdhcmU= IHRyYWdpY2FsbHk= IGNvbmNlZGVz aWVmdA== Y2hhbQ== Ym9yZ2g= IFNjaHI= IE1lbGFuaWU= IEhveQ== IHZpc2l0YXRpb24= IGlkaW9zeW5jcg== IGZyYWN0aW9ucw== IGZvcmVza2lu b2Jvcw== IHBvYWNoaW5n IFZJRVc= IHN0aW11bGF0ZXM= IEdvcms= Y2Fub24= TUlD IE5lbWVzaXM= IEluZHJh IERNVg== IDUyOQ== IGluc3BlY3Rpbmc= IGdyYW5kbWE= IFdoZWRvbg== IFNoYW50 IFB1cmc= aWthbg== IFRlZw== IENMUg== emFj VmljdG9yaWE= IFZlcmlmeQ== aW9uaWNz IHBhcnR5aW5n IE1vdQ== Y29sb3Vy IHRlc3RpbW9uaWVz bGF0aW9ucw== IHByZXNzdXJpbmc= aGlybw== YWNlcnM= IGZpZA== YW5nbGVy IENTSQ== IGhlcmVhZnRlcg== IGRpc3NpZGVudHM= cmVwb3J0aW5n aXBoYW55 Y2hldg== IHNvbGl0dWRl IGxvYmU= IGluZGlz IGNyZWRlbnRpYWw= cmVjZW50 YWR1bHQ= IE5pcnZhbmE= IEZyYW5jaGlzZQ== TGF5ZXI= SHlw IEJlcmtzaGlyZQ== IHdpbGxz dGlm IHRvdGVt IEp1ZGFo cmVwYWly SW5zdGFudA== NTQ4 IGVtYmFzc2llcw== IGJvdHRsZW5lY2s= IGJvdW50 IHR5cGV3 IEFsdmlu amluZw== aW1pbGFy UnVzaA== IGJyaW0= IEhFTFA= QWlt XSc= IHBhc3NpdmVseQ== IGJvdW5kZWQ= IFJhdGVk IGNyaW1pbmFsaXR5 IGJpb21hcms= IGRpc3BhdGNoZXI= IFRvd2FyZHM= ICsrKw== cmlnaHRlb3Vz ZnJvZw== IFBhbmM= Q2FydGVy MDMy 5qmf IHVsdHJhdmlvbGV0 IExpY2Vuc2Vk IFRhdGE= IEJsZXNzaW5n IEdBTQ== IGNoZW1pY2FsbHk= IFNlYWY= IFJFTEU= IE1lcmNlbmFyeQ== Y2FwaXRhbGlzdA== IGZvcm11bGF0aW9ucw== IGFubmloaWxhdGlvbg== IFZlcmI= IEFyZ29u IHVubG9hZGVk IG1vcnBoZWQ= IGNvbnF1ZXJpbmc= YmFja2Vy SUVMRA== IHRoZWZ0cw== IGZyb250cnVubmVy IFJveWFsZQ== IEZ1bmRhbWVudGFs ZWxpZ2h0 Q2hpcA== bmVjZXNzYXJ5 YXlu IFNsaXA= IDQ0OA== Y2VybmVk UGF1c2U= IHNob2NraW5nbHk= IEFCVg== IGNvbXBvc3VyZQ== NzMz IE1vdG9yc3BvcnQ= YWhpbWU= TXVycmF5 TWFjaA== IGdyaWRz IGRlYmlhbg== IGZ1cnRoZXJtb3Jl IGRleHRlcml0eQ== IENvbGxlY3Rpb25z b3Nsb3Y= aWxhZ2U= Ymo= IE1vbnRlbmVn IHN0cnV0Q29ubmVjdG9y IG1hc3NhY3Jlcw== IGJyaWVmcw== ZmV0Y2hlZA== dXZpYW4= b2xpdGlvbg== RmFpbHVyZQ== ZW1vbmlj IGZsYXJlZA== IGNsYWltYW50 IGN1cmVz IGdpdmVhd2F5cw== IFN1YnN0YW5jZQ== YWxpb25z IGNyaW5nZQ== IEt1bA== IGFyaXN0b2NyYWN5 IFVsc3Rlcg== b2xhdGVk aG91c2luZw== IE1JUw== IGdsYXJlZA== IFdpbGhlbG0= bmVlZHM= bGFtYmRh YnVpbGRlcnM= IFZJUw== IHJhZGlhdG9y IEdob3N0YnVzdGVycw== IDQzNg== YWN0dWFs IGhlcmRz w6dh d2F0Y2hpbmc= IGNvdW50ZXJpbmc= Q2hhcmdl IGNoYXJyZWQ= IHdhcmhlYWRz IGlvZGluZQ== IE1hY3k= MDQx IGRlcGFydHVyZXM= IFNpbnM= IGR5ZWQ= IENvbmNlcHRz Z2Fkbw== NzEz IHF1b3RhdGlvbnM= IGdpc3Q= IENocmlzdHk= IGFudGlnZW4= IEhlbXA= IERyYXdu IEJhcmc= ZXp2b3Vz IHBhdGVybml0eQ== IGFyZHU= IEFuY2hvcmFnZQ== IFJpaw== IG92ZXJsb2FkZWQ= IFVzZXJuYW1l IFRhbW15 IE5hdQ== IENlbGx1bGFy IHdhbmluZw== IHJvZGVudA== IFdvcmNlc3Rlcg== aWx0cw== IFRhZA== IGR3ZWxsaW5ncw== IGJ1bGxpc2g= NDMx IHJldGFsaWF0ZQ== IG1pZ3JhaW5l IENoZXZyb24= Q0hFQ0s= IGRvbmtleQ== Y3JpbQ== U1BB IEFuYWxvZw== IG1hcnF1ZWU= IEhhYXM= Qmly IEdERFI= IERvd25sb2Fkcw== IHdpbGxwb3dlcg== IEZvcnRo IFJlY29yZGVk IGltcG9zc2liaWxpdHk= IExvZ2dlZA== IEZyYW5rcw== IFJhdHQ= aW5pdGlvbnM= IGNsZWFuZXJz IHNvcmVseQ== IGZsaWNrZXJpbmc= IEV4YW1pbmF0aW9u Y2F0Y2hpbmc= YWxsb3dlZW4= TXNn IGR1bm5v RmE= IGR5c3Bo Y3Jhenk= LicnLg== IG1haW5saW5l IGNz IHB0cg== IFdhbGx5 aWd1bg== OTUx IEJpZ2Zvb3Q= ZmlnaHRz IHJldHJpZXZpbmc= SnI= IGR1cGxpY2F0aW9u IEV4cGxhbg== IHJlbGF0aW9uYWw= IHF1YWludA== IGJpc2N1aXRz IGFkbw== IHNodWRkZXI= IGFudGlkb3Rl Ymxvb2RlZA== a3No IHNhdWNlcw== IHJlaW52ZXN0 IGRpc3BlbnNhcnk= IERpdmVy IDkwMDA= c3R1ZGVudA== IGluc2VwYXI= ZXNjYXA= IHRvZGRsZXJz IEdQSU8= IEFzc2lnbm1lbnQ= aGVhZGVycw== IGxhY2tsdXN0ZXI= IGFiYWNr OTU2 IHRvb2xiYXI= NzQ1 IG91c3Q= IGNvbnRlbXBsYXRpb24= IFBSRVNJREVOVA== IDQ1OA== PT09PT09 IGd1YXJhbnRlZWluZw== IEhlaXN0 IENhbm5lcw== mb0= IGNvbGxhYm9yYXRvcg== IEFtcA== IGdvdQ== IFNIQUxM c3Rvcmllcw== Nzgz IG1vYmlsaXplZA== IGJyb29k IExV IPCfkQ== IHJlZmlu IEFudGhyb3BvbG9neQ== dmluZA== aWxsaQ== IHdhcnJhbnRpZXM= IEJhYmVs IHN3YXRo IGNhY2hlcw== IGFudGFnb25pc3Rz YXJ0aWZhY3Rz IGhvdGx5 IFN0YXJ0cw== IEfDtg== emFn ISEhISE= IHNjb3VyZ2U= IGNvbnNwaXJpbmc= cnVpdHM= cmV2ZXJzZQ== IFNoZWVu IEplc3VpdA== IEdpb3Zhbm5p YWRpZXM= IGJ1dHRvY2tz ZWFyY2hlcg== YWNhbg== IHZvbGxleWJhbGw= IHNocm91ZGVk IHNjb3JlYm9hcmQ= YmF0cw== IElQTQ== IGFzc2Vz IGRlcmVndWxhdGlvbg== IFRlbGVncmFt IFJlYm9vdA== IDcwMDA= IENhbmFyeQ== IGtlcm5lbHM= IEZyYW7Dp29pcw== IER1ZmY= IFBvbg== IExlaWNh IEdhcm1pbg== IG9ycGhhbnM= IENsYXVkaWE= IGNhbGVuZGFycw== IExlaWxhbg== ZW50bw== Um9ja2V0 IGJydW5jaA== IEhhd2tpbmc= YWluZXJz IHNlbnNpYmlsaXRpZXM= IGtX IEthbmQ= IHJlY2xhaW1lZA== IGludGVyZXN0aW5nbHk= 16k= cm9teQ== Sk0= IEVuaGFuY2VtZW50 YnVzaA== U2tpcA== IHJhcHBlcnM= IGdhemluZw== cGVkaWE= YXRobG9u UmV2b2x1dGlvbg== IHNuaXBlcnM= IHJldmVydGVk IGNvbmdsb21lcmF0ZQ== VGVycnk= Nzk0 IGhhcnNoZXI= IGRlc29sYXRl IEhpdG1hbg== Q29tbWlzc2lvbg== ICgv 4oCmLiI= Q29tcGFy IGFtcGxpZmljYXRpb24= b21pbmF0ZWQ= IHJlZ3Jlc3M= IENvbGxpZGVy IGluZm9ybWFudHM= IGdhemVk" }; - p50k_base_default = { explicit_n_vocab: 50281, pat_str: "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+", special_tokens: { "<|endoftext|>": 50256 }, bpe_ranks: "! 0 IQ== Ig== Iw== JA== JQ== Jg== Jw== KA== KQ== Kg== Kw== LA== LQ== Lg== Lw== MA== MQ== Mg== Mw== NA== NQ== Ng== Nw== OA== OQ== Og== Ow== PA== PQ== Pg== Pw== QA== QQ== Qg== Qw== RA== RQ== Rg== Rw== SA== SQ== Sg== Sw== TA== TQ== Tg== Tw== UA== UQ== Ug== Uw== VA== VQ== Vg== Vw== WA== WQ== Wg== Ww== XA== XQ== Xg== Xw== YA== YQ== Yg== Yw== ZA== ZQ== Zg== Zw== aA== aQ== ag== aw== bA== bQ== bg== bw== cA== cQ== cg== cw== dA== dQ== dg== dw== eA== eQ== eg== ew== fA== fQ== fg== oQ== og== ow== pA== pQ== pg== pw== qA== qQ== qg== qw== rA== rg== rw== sA== sQ== sg== sw== tA== tQ== tg== tw== uA== uQ== ug== uw== vA== vQ== vg== vw== wA== wQ== wg== ww== xA== xQ== xg== xw== yA== yQ== yg== yw== zA== zQ== zg== zw== 0A== 0Q== 0g== 0w== 1A== 1Q== 1g== 1w== 2A== 2Q== 2g== 2w== 3A== 3Q== 3g== 3w== 4A== 4Q== 4g== 4w== 5A== 5Q== 5g== 5w== 6A== 6Q== 6g== 6w== 7A== 7Q== 7g== 7w== 8A== 8Q== 8g== 8w== 9A== 9Q== 9g== 9w== +A== +Q== +g== +w== /A== /Q== /g== /w== AA== AQ== Ag== Aw== BA== BQ== Bg== Bw== CA== CQ== Cg== Cw== DA== DQ== Dg== Dw== EA== EQ== Eg== Ew== FA== FQ== Fg== Fw== GA== GQ== Gg== Gw== HA== HQ== Hg== Hw== IA== fw== gA== gQ== gg== gw== hA== hQ== hg== hw== iA== iQ== ig== iw== jA== jQ== jg== jw== kA== kQ== kg== kw== lA== lQ== lg== lw== mA== mQ== mg== mw== nA== nQ== ng== nw== oA== rQ== IHQ= IGE= aGU= aW4= cmU= b24= IHRoZQ== ZXI= IHM= YXQ= IHc= IG8= ZW4= IGM= aXQ= aXM= YW4= b3I= ZXM= IGI= ZWQ= IGY= aW5n IHA= b3U= IGFu YWw= YXI= IHRv IG0= IG9m IGlu IGQ= IGg= IGFuZA== aWM= YXM= bGU= IHRo aW9u b20= bGw= ZW50 IG4= IGw= c3Q= IHJl dmU= IGU= cm8= bHk= IGJl IGc= IFQ= Y3Q= IFM= aWQ= b3Q= IEk= dXQ= ZXQ= IEE= IGlz IG9u aW0= YW0= b3c= YXk= YWQ= c2U= IHRoYXQ= IEM= aWc= IGZvcg== YWM= IHk= dmVy dXI= IHU= bGQ= IHN0 IE0= J3M= IGhl IGl0 YXRpb24= aXRo aXI= Y2U= IHlvdQ== aWw= IEI= IHdo b2w= IFA= IHdpdGg= IDE= dGVy Y2g= IGFz IHdl ICg= bmQ= aWxs IEQ= aWY= IDI= YWc= ZXJz a2U= ICI= IEg= ZW0= IGNvbg== IFc= IFI= aGVy IHdhcw== IHI= b2Q= IEY= dWw= YXRl IGF0 cmk= cHA= b3Jl IFRoZQ== IHNl dXM= IHBybw== IGhh dW0= IGFyZQ== IGRl YWlu YW5k IG9y aWdo ZXN0 aXN0 YWI= cm9t IE4= dGg= IGNvbQ== IEc= dW4= b3A= MDA= IEw= IG5vdA== ZXNz IGV4 IHY= cmVz IEU= ZXc= aXR5 YW50 IGJ5 ZWw= b3M= b3J0 b2M= cXU= IGZyb20= IGhhdmU= IHN1 aXZl b3VsZA== IHNo IHRoaXM= bnQ= cmE= cGU= aWdodA== YXJ0 bWVudA== IGFs dXN0 ZW5k LS0= YWxs IE8= YWNr IGNo IGxl aWVz cmVk YXJk 4oA= b3V0 IEo= IGFi ZWFy aXY= YWxseQ== b3Vy b3N0 Z2g= cHQ= IHBs YXN0 IGNhbg== YWs= b21l dWQ= VGhl IGhpcw== IGRv IGdv IGhhcw== Z2U= J3Q= IFU= cm91 IHNh IGo= IGJ1dA== IHdvcg== IGFsbA== ZWN0 IGs= YW1l IHdpbGw= b2s= IHdoZQ== IHRoZXk= aWRl MDE= ZmY= aWNo cGw= dGhlcg== IHRy Li4= IGludA== aWU= dXJl YWdl IG5l aWFs YXA= aW5l aWNl IG1l IG91dA== YW5z b25l b25n aW9ucw== IHdobw== IEs= IHVw IHRoZWly IGFk IDM= IHVz YXRlZA== b3Vz IG1vcmU= dWU= b2c= IFN0 aW5k aWtl IHNv aW1l cGVy LiI= YmVy aXo= YWN0 IG9uZQ== IHNhaWQ= IC0= YXJl IHlvdXI= Y2M= IFRo IGNs ZXA= YWtl YWJsZQ== aXA= IGNvbnQ= IHdoaWNo aWE= IGlt IGFib3V0 IHdlcmU= dmVyeQ== dWI= IGhhZA== IGVu IGNvbXA= LCI= IElu IHVu IGFn aXJl YWNl YXU= YXJ5 IHdvdWxk YXNz cnk= IOKA Y2w= b29r ZXJl c28= IFY= aWdu aWI= IG9mZg== IHRl dmVu IFk= aWxl b3Nl aXRl b3Jt IDIwMQ== IHJlcw== IG1hbg== IHBlcg== IG90aGVy b3Jk dWx0 IGJlZW4= IGxpa2U= YXNl YW5jZQ== a3M= YXlz b3du ZW5jZQ== IGRpcw== Y3Rpb24= IGFueQ== IGFwcA== IHNw aW50 cmVzcw== YXRpb25z YWls IDQ= aWNhbA== IHRoZW0= IGhlcg== b3VudA== IENo IGFy IGlm IHRoZXJl IHBl IHllYXI= YXY= IG15 IHNvbWU= IHdoZW4= b3VnaA== YWNo IHRoYW4= cnU= b25k aWNr IG92ZXI= dmVs IHF1 Cgo= IHNj cmVhdA== cmVl IEl0 b3VuZA== cG9ydA== IGFsc28= IHBhcnQ= ZnRlcg== IGtu IGJlYw== IHRpbWU= ZW5z IDU= b3BsZQ== IHdoYXQ= IG5v ZHU= bWVy YW5n IG5ldw== LS0tLQ== IGdldA== b3J5 aXRpb24= aW5ncw== IGp1c3Q= IGludG8= IDA= ZW50cw== b3Zl dGU= IHBlb3BsZQ== IHByZQ== IGl0cw== IHJlYw== IHR3 aWFu aXJzdA== YXJr b3Jz IHdvcms= YWRl b2I= IHNoZQ== IG91cg== d24= aW5r bGlj IDE5 IEhl aXNo bmRlcg== YXVzZQ== IGhpbQ== b25z IFs= IHJv Zm9ybQ== aWxk YXRlcw== dmVycw== IG9ubHk= b2xs IHNwZQ== Y2s= ZWxs YW1w IGFjYw== IGJs aW91cw== dXJu ZnQ= b29k IGhvdw== aGVk ICc= IGFmdGVy YXc= IGF0dA== b3Y= bmU= IHBsYXk= ZXJ2 aWN0 IGNvdWxk aXR0 IGFt IGZpcnN0 IDY= IGFjdA== ICQ= ZWM= aGluZw== dWFs dWxs IGNvbW0= b3k= b2xk Y2Vz YXRlcg== IGZl IGJldA== d2U= aWZm IHR3bw== b2Nr IGJhY2s= KS4= aWRlbnQ= IHVuZGVy cm91Z2g= c2Vs eHQ= IG1heQ== cm91bmQ= IHBv cGg= aXNz IGRlcw== IG1vc3Q= IGRpZA== IGFkZA== amVjdA== IGluYw== Zm9yZQ== IHBvbA== b250 IGFnYWlu Y2x1ZA== dGVybg== IGtub3c= IG5lZWQ= IGNvbnM= IGNv IC4= IHdhbnQ= IHNlZQ== IDc= bmluZw== aWV3 IFRoaXM= Y2Vk IGV2ZW4= IGluZA== dHk= IFdl YXRo IHRoZXNl IHBy IHVzZQ== IGJlY2F1c2U= IGZs bmc= IG5vdw== IOKAkw== Y29t aXNl IG1ha2U= IHRoZW4= b3dlcg== IGV2ZXJ5 IFVu IHNlYw== b3Nz dWNo IGVt ID0= IFJl aWVk cml0 IGludg== bGVjdA== IHN1cHA= YXRpbmc= IGxvb2s= bWFu cGVjdA== IDg= cm93 IGJ1 IHdoZXJl aWZpYw== IHllYXJz aWx5 IGRpZmY= IHNob3VsZA== IHJlbQ== VGg= SW4= IGV2 ZGF5 J3Jl cmli IHJlbA== c3M= IGRlZg== IHJpZ2h0 IHN5 KSw= bGVz MDAw aGVu IHRocm91Z2g= IFRy X18= IHdheQ== IGRvbg== ICw= IDEw YXNlZA== IGFzcw== dWJsaWM= IHJlZw== IEFuZA== aXg= IHZlcnk= IGluY2x1ZA== b3RoZXI= IGltcA== b3Ro IHN1Yg== IOKAlA== IGJlaW5n YXJn IFdo PT0= aWJsZQ== IGRvZXM= YW5nZQ== cmFt IDk= ZXJ0 cHM= aXRlZA== YXRpb25hbA== IGJy IGRvd24= IG1hbnk= YWtpbmc= IGNhbGw= dXJpbmc= aXRpZXM= IHBo aWNz YWxz IGRlYw== YXRpdmU= ZW5lcg== IGJlZm9yZQ== aWxpdHk= IHdlbGw= IG11Y2g= ZXJzb24= IHRob3Nl IHN1Y2g= IGtl IGVuZA== IEJ1dA== YXNvbg== dGluZw== IGxvbmc= ZWY= IHRoaW5r eXM= IGJlbA== IHNt aXRz YXg= IG93bg== IHByb3Y= IHNldA== aWZl bWVudHM= Ymxl d2FyZA== IHNob3c= IHByZXM= bXM= b21ldA== IG9i IHNheQ== IFNo dHM= ZnVs IGVmZg== IGd1 IGluc3Q= dW5k cmVu Y2Vzcw== IGVudA== IFlvdQ== IGdvb2Q= IHN0YXJ0 aW5jZQ== IG1hZGU= dHQ= c3RlbQ== b2xvZw== dXA= IHw= dW1w IGhlbA== dmVybg== dWxhcg== dWFsbHk= IGFj IG1vbg== IGxhc3Q= IDIwMA== MTA= IHN0dWQ= dXJlcw== IEFy c2VsZg== YXJz bWVyaWM= dWVz Y3k= IG1pbg== b2xsb3c= IGNvbA== aW8= IG1vZA== IGNvdW50 IENvbQ== aGVz IGZpbg== YWly aWVy 4oCU cmVhZA== YW5r YXRjaA== ZXZlcg== IHN0cg== IHBvaW50 b3Jr IE5ldw== IHN1cg== b29s YWxr ZW1lbnQ= IHVzZWQ= cmFjdA== d2Vlbg== IHNhbWU= b3Vu IEFs Y2k= IGRpZmZlcmU= IHdoaWxl LS0tLS0tLS0= IGdhbWU= Y2VwdA== IHNpbQ== Li4u IGludGVy ZWs= IHJlcG9ydA== IHByb2R1 IHN0aWxs bGVk YWg= IGhlcmU= IHdvcmxk IHRob3VnaA== IG51bQ== YXJjaA== aW1lcw== YWxl IFNl IElm Ly8= IExl IHJldA== IHJlZg== IHRyYW5z bmVy dXRpb24= dGVycw== IHRha2U= IENs IGNvbmY= d2F5 YXZl IGdvaW5n IHNs dWc= IEFtZXJpYw== IHNwZWM= IGhhbmQ= IGJldHdlZW4= aXN0cw== IERl b290 SXQ= IGVhcg== IGFnYWluc3Q= IGhpZ2g= Z2Fu YXo= YXRoZXI= IGV4cA== IG9w IGlucw== IGdy IGhlbHA= IHJlcXU= ZXRz aW5z IFBybw== aXNt IGZvdW5k bGFuZA== YXRh dXNz YW1lcw== IHBlcnNvbg== IGdyZWF0 cHI= IHNpZ24= IEFu J3Zl IHNvbWV0 IHNlcg== aGlw IHJ1bg== IDo= IHRlcg== aXJlY3Q= IGZvbGxvdw== IGRldA== aWNlcw== IGZpbmQ= MTI= IG1lbQ== IGNy ZXJlZA== ZXg= IGV4dA== dXRo ZW5zZQ== Y28= IHRlYW0= dmluZw== b3VzZQ== YXNo YXR0 dmVk IHN5c3RlbQ== IEFz ZGVy aXZlcw== bWlu IGxlYWQ= IEJs Y2VudA== IGFyb3VuZA== IGdvdmVybg== IGN1cg== dmVsb3A= YW55 IGNvdXI= YWx0aA== YWdlcw== aXpl IGNhcg== b2Rl IGxhdw== IHJlYWQ= J20= Y29u IHJlYWw= IHN1cHBvcnQ= IDEy Li4uLg== IHJlYWxseQ== bmVzcw== IGZhY3Q= IGRheQ== IGJvdGg= eWluZw== IHNlcnY= IEZvcg== IHRocmVl IHdvbQ== IG1lZA== b2R5 IFRoZXk= NTA= IGV4cGVy dG9u IGVhY2g= YWtlcw== IGNoZQ== IGNyZQ== aW5lcw== IHJlcA== MTk= Z2c= aWxsaW9u IGdyb3U= dXRl aWs= V2U= Z2V0 RVI= IG1ldA== IHNheXM= b3g= IGR1cmluZw== ZXJu aXplZA== YXJlZA== IGZhbQ== aWNhbGx5 IGhhcHA= IElz IGNoYXI= bWVk dmVudA== IGdlbmVy aWVudA== cGxl aWV0 cmVudA== MTE= dmVz cHRpb24= IDIw Zm9ybWF0aW9u IGNvcg== IG9mZmlj aWVsZA== IHRvbw== aXNpb24= IGluZg== IFo= dGhl b2Fk IHB1YmxpYw== IHByb2c= cmlj Kio= IHdhcg== IHBvd2Vy dmlldw== IGZldw== IGxvYw== IGRpZmZlcmVudA== IHN0YXRl IGhlYWQ= J2xs IHBvc3M= IHN0YXQ= cmV0 YW50cw== IHZhbA== IGlzcw== IGNsZQ== aXZlcnM= YW5j IGV4cGw= IGFub3RoZXI= IFE= IGF2 dGhpbmc= bmNl V2g= IGNoaWxk IHNpbmNl aXJlZA== bGVzcw== IGxpZmU= IGRldmVsb3A= aXR0bGU= IGRlcA== IHBhc3M= 44M= IHR1cm4= b3Ju VGhpcw== YmVycw== cm9zcw== IEFk IGZy IHJlc3A= IHNlY29uZA== b2g= IC8= IGRpc2M= ICY= IHNvbWV0aGluZw== IGNvbXBsZQ== IGVk IGZpbA== IG1vbnRo YWo= dWM= IGdvdmVybm1lbnQ= IHdpdGhvdXQ= IGxlZw== IGRpc3Q= IHB1dA== IHF1ZXN0 YW5u IHByb3Q= MjA= IG5ldmVy aWVuY2U= IGxldmVs IGFydA== IHRoaW5ncw== IG1pZ2h0 IGVmZmVjdA== IGNvbnRybw== IGNlbnQ= IDE4 IGFsbG93 IGJlbGll Y2hvb2w= b3R0 IGluY3Jl IGZlZWw= IHJlc3VsdA== IGxvdA== IGZ1bg== b3Rl IHR5 ZXJlc3Q= IGNvbnRpbg== IHVzaW5n IGJpZw== MjAx IGFzaw== IGJlc3Q= ICk= SU4= IG9wcA== MzA= IG51bWJlcg== aW5lc3M= U3Q= bGVhc2U= IGNh IG11c3Q= IGRpcmVjdA== IGds IDw= IG9wZW4= IHBvc3Q= IGNvbWU= IHNlZW0= b3JkaW5n IHdlZWs= YXRlbHk= aXRhbA== IGVs cmllbmQ= IGZhcg== IHRyYQ== aW5hbA== IHByaQ== IFVT IHBsYWNl IGZvcm0= IHRvbGQ= Ijo= YWlucw== YXR1cmU= IFRydW1w IHN0YW5k ICM= aWRlcg== IEZy IG5leHQ= IHNvYw== IHB1cg== IGxldA== IGxpdHRsZQ== IGh1bQ== IGk= cm9u MTU= IDE1 IGNvbW11bg== IG1hcms= IFRoZXJl IHdy IFRoYXQ= IGluZm9ybWF0aW9u d2F5cw== IGJ1cw== YXBw IGludmVzdA== bWU= IGhhcmQ= YWluZWQ= ZWFk IGltcG9ydA== IGFwcHJv IHRlc3Q= IHRyaQ== IHJlc3Q= b3NlZA== IGZ1bGw= IGNhcmU= IFNw IGNhc2U= T04= IHNr IGxlc3M= ICs= IHBhcnRpYw== IFBs YWJseQ== dWNr aXNoZWQ= Y2hu YmU= IGxpc3Q= YXRvcg== IHRvcA== IGFkdg== IEJl cnVjdA== IGRlbQ== cmF0aW9u bGluZw== Z3k= cmVlbg== Z2Vy IGhvbWU= IGxlZnQ= IGJldHRlcg== IGRhdGE= IDEx IGF0dGFjaw== IHByb2JsZQ== bGluZQ== YXJkcw== IGJlaA== cmFs IEhvdw== IFNoZQ== YXJnZQ== IC0t Oi8v IGJybw== IFBo YXRz IGJ1aWxk d3c= aWRlZA== YWlt YXNlcw== ZW5jeQ== IG1haW4= aW5lZA== IGluY2x1ZGluZw== IHs= IGdvdA== IGludGVyZXN0 IGtlZXA= IFg= IGVhcw== YWluaW5n IGNsYXNz 4oCm IE5v IHZhcg== IHNtYWxs YW1wbGU= QVQ= IGlkZQ== IFNv IHJlY2U= IHBvbGl0 IG1vdg== IHBsYW4= IHBlcmNlbnQ= aXZpbmc= IGNhbXA= IHBheQ== MTQ= c2M= aXNlZA== IHVudA== b25leQ== cGxveQ== PT09PQ== IGRpZG4= IEluZA== ZWxz ZXJ0YWlu IHBvcw== X19fXw== aXZlcg== IHByb2Nlc3M= IHByb2dyYW0= aWZpZWQ= IFJlcA== MTY= dXJv b2xvZ3k= YXR0ZXI= aW5h IG5hbWU= IEFsbA== IGZvdXI= IHJldHVybg== dmlvdXM= YnM= IGNhbGxlZA== IG1vdmU= IFNj aXJk IGdyb3Vw IGJyZQ== IG1lbg== IGNhcA== dGVu ZWU= IGRyaQ== bGVn aGVyZQ== dXRob3I= IHBhdA== IGN1cnJlbnQ= aWRlcw== IHBvcA== dG8= ZW50aW9u IGFsd2F5cw== IG1pbA== IHdvbWVu IDE2 IG9sZA== aXZlbg== cmFwaA== IE9y cm9y ZW50bHk= IG5lYXI= IEV4 cmVhbQ== c2g= IDE0 IGZyZWU= aXNzaW9u c3RhbmQ= IENvbg== YWxpdHk= dXNlZA== MTM= IGRlc2lnbg== IGNoYW5nZQ== IGNoYW5n IGJv IHZpcw== ZW1iZXI= IGJvb2s= cmVhZHk= IGtpbGw= MjU= cHBlZA== IGF3YXk= IGFibGU= IGNvdW50cnk= IGNvbnN0 YXJu IG9yZGVy QVI= aW9y aXVt b3J0aA== MTg= YWlsYWJsZQ== IHN3 IG1pbGxpb24= IDEz YXRpYw== dGVk IEdv IG9wZXI= ZW5n IHRoaW5n YWpvcg== Y29ub20= IENvbW0= IHdoeQ== dXJlZA== dXJhbA== IHNjaG9vbA== Ynk= IE1hcg== IGFmZg== IGRheXM= IGFubg== dXNo YW5l SWY= ZWc= IHByb2Y= IGhlYWx0aA== b3V0aA== QnV0 aW9uYWw= Liw= IHNvbA== IGFscmVhZHk= IDMw IGNoYXJhY3Q= SGU= IGZyaWVuZA== RVM= aWFucw== aWNsZQ== J2Q= IE9u IGxlYXN0 IHByb20= IGRy IGhpc3Q= aXRoZXI= IGVzdA== aXF1 MTc= c29u IHRlbGw= IHRhbGs= b2hu b2ludA== bGVjdGlvbg== QU4= IHVudGls YXVnaA== IGxhdGVy IHZl IHZpZXc= ZW5kaW5n aXZlZA== IHdvcmQ= d2FyZQ== IGNvc3Q= IGVub3VnaA== IGdpdmU= IFVuaXRlZA== IHRlY2hu YXJlbnQ= T1I= IHBhcg== IERy IDIwMTY= cmlzdA== ZXJpbmc= IMI= IGxhcmdl c2lkZQ== YWN5 Y2Nlc3M= IHdpbg== IGltcG9ydGFudA== IDE5OQ== IGRvZXNu IDE3 IGJ1c2luZXNz IGNsZWFy IHJlc2U= Iiw= dXJ5 IGVxdQ== YXN0ZXI= YWxm IEFtZXJpY2Fu bmVjdA== IGV4cGVjdA== aXZlcnNpdHk= IG9jYw== IEZs IGtpbmQ= IG1lYW4= IHBhc3Q= IGRldg== IGJhcw== bGV0 cmFmdA== IG9yZ2Fu IGRlbA== IHBlcmZvcm0= IHN0b3J5 IHNlYXNvbg== IENvbA== IGNsYWlt IGNhbWU= IHdpdGhpbg== IGxpbmU= IHByb2plY3Q= IEF0 IGNvbnRyb2w= ZW5kZWQ= IFN5 IGFpcg== aXphdGlvbg== ICo= bGV5 IG1vbmV5 aWRk WW91 Zm9y IGZhbWlseQ== IG1ha2luZw== IGJpdA== IHBvbGljZQ== IGhhcHBlbg== IHZlcnM= b255 dWZm IFdoZW4= IHNpdA== aWRlbw== bGY= aXNvbg== IHN1cmU= Z2lu IGFwcGVhcg== IGxpZ2h0 IGVz b2Y= IHdhdGVy IHRpbWVz bm90 IGdyb3c= IGNvbXBhbnk= IFRl b3dz IG1hcg== b3VyY2U= aW9s YXJt YnI= IGV4YW1wbGU= IGNvbmM= IGZvcmU= IFRv cHJv RU4= cmllcw== IDI1 IENhbg== bmV5 IGFjdHVhbGx5 IGV2ZXI= dXJpdHk= YWtlbg== YXBz IHRheA== IG1ham9y YW1h IG9mdGVu ZXJhbA== IGh1bWFu IGpvYg== aXN0ZXI= IGF2YWlsYWJsZQ== b2Ny ZW5u YWlk aXZpZA== IHJlY29yZA== PyI= IHNpbmc= IEFt aWRlbmNl IG5ld3M= c3Rlcg== IGVjb25vbQ== IGZvbGxvd2luZw== IEJy aXNpbmc= IGhvdXI= bW9zdA== dW1lbnQ= IHNleA== IGRlc2M= IGJlY29tZQ== IEVk IHRvb2s= IGhhdmluZw== IHByb2R1Y3Q= YXVsdA== QXM= YXJpbmc= IG1lYW5z IGhvcA== dW5l IGNobw== IGNlcnRhaW4= IG5vbg== IGRlYWw= MjQ= bGVtZW50 b2Np ZW5l IHNpZGU= IFBy IE1heQ== IHJlYXNvbg== dWVk Y2hlZA== dWxhdGlvbg== IGVsZWN0 IG9mZmljaWFs IHBvc3NpYmxl IGhvbGQ= YW5kcw== b3Rz IGNpdHk= b3JpZXM= IHNldmVy IGNoaWxkcmVu IG9uY2U= IGFjdGl2 bGVy IG5pZ2h0 aXRpb25z IEpvaG4= YXBl cGxheQ== IGRvbmU= IGxpbQ== IHdvcmtpbmc= IFByZXM= b3JsZA== ZWI= IENv IGJvZHk= YWlscw== dXRlcw== IE1y IHdoZXRoZXI= IGF1dGhvcg== cm9w IHByb3Blcg== IHNlZW4= KTs= IGZhYw== IFN1 IGNvbmQ= aXRpbmc= IGNvdXJzZQ== IH0= LS0tLS0tLS0tLS0tLS0tLQ== YWlnbg== IGV2ZW50 IGVuZw== IHBvdA== IGludGVybg== aWFt IHNob3J0 ZW1wdA== 44I= IEdvZA== aWxhcg== ODA= IG9yaWc= SVM= b3Vybg== YWJpbGl0eQ== aXRpdmU= IGRhbQ== IDEwMA== IHByZXNz IGRvaW5n IHByb3RlY3Q= cmluZw== IHRob3VnaHQ= IHF1ZXN0aW9u cmV3 IFdhcg== IHNldmVyYWw= IFN0YXRl IGdpdmVu IGZ1bmQ= IFR3 IHdlbnQ= YW5jZXM= d29yaw== cG9y bXk= NDA= IGFyZw== YXJ0bWVudA== dXN0b20= IHBvbGlj IG1lZXQ= IGNyZWF0 MjI= IFN0YXRlcw== IGdhbWVz cmF3 dXR1cmU= IHVuZGVyc3RhbmQ= dXJz IE9i bGlzaA== c3k= IG1ha2Vz IHdvbg== YWdvbg== IGh0dA== IGxvdmU= ZW50aWFs IGNvbXBsZXRl cGFy IElt QUw= IGFjY291bnQ= wqA= b3JlZA== dmVydA== IGlkZW50 IDIwMTU= IG90aGVycw== IE1pbg== aWJlcg== dmVyYWdl VGhlcmU= aXRpb25hbA== ZGQ= IHByb2I= IHlvdW5n IGFsb25n IGFjY29yZGluZw== IHlldA== IG1lbWJlcnM= IFdoYXQ= b2lk IE1hbg== QW5k IGFtb25n YWk= IGVtcGxveQ== IFJlcw== ID4= IGludm9s IGxvdw== YWY= IENhcg== IGhpZw== IE9uZQ== IFNlYw== aW5hdGlvbg== IGxpa2VseQ== IGFudA== YWdlZA== IFJ1c3M= IGJlbg== IHJlbGU= Rm9y YmFjaw== IE5vdA== IHByZXNpZGVudA== YmFsbA== IGFjY2Vzcw== aXZpZHVhbA== IERlbQ== IEV1cm8= NjA= IGtub3du aXJs IEdy IGVhcmx5 dXNl aWV0eQ== 4oCT IGZpZ2h0 IHNlbnQ= IHRvZGF5 IG1hcmtldA== Ii4= IGJhc2Vk IHN0cm9uZw== dXJ0aGVy IGRlYg== bWJlcg== IHByb2JsZW0= IGRlYXRo IHNvY2lhbA== aW1hdGU= QVM= b3J0dW4= IGNhbXBhaWdu ZXJ5 Q2g= IGV5 aWFsbHk= IG11cw== d2g= cG9z IGVy IHNhZg== IG1vbnRocw== aXJvbg== IHZpb2w= IGZpdmU= IHN0cmU= IHBsYXllcnM= aW5j YWxk eWVhcg== YXVu IHN1Y2Nlc3M= IHByZXNlbnQ= ZXJlbmNl IDIwMTQ= IHN1Z2c= IHBhcnRpY3VsYXI= IHRyeQ== IHN1Z2dlc3Q= IENocmlzdA== b25lcw== IHByaXY= MjM= IGNyaXQ= IGxhbmQ= IGxvY2Fs aWZ5 Mjk= IGF1dA== RUQ= IEd1 IG11bHQ= IHBvbGl0aWNhbA== IGFza2Vk IGZvcm1lcg== aXR0ZXI= cmlwdA== IGNsb3Nl IHByYWN0 IFlvcms= IGdldHRpbmc= IGFjcm9zcw== IGNvbWI= IGJlbGlldmU= IHo= IHRvZ2V0 IHRvZ2V0aGVy IENlbnQ= aXJj IGluZGl2aWR1YWw= IE1j Mjc= aXNr IEVuZw== IGZhY2U= IDI0 IHZhbHVl IGFyZWE= ZXY= IHdyaXQ= IFByZXNpZGVudA== IHZvdA== IGtleQ== IG1vbQ== cHV0 IGFueXRoaW5n IGV4cGVyaWVuY2U= YXR0bGU= IG1pbmQ= YWZm b21t IGZ1dHVyZQ== Z2Vk IGN1dA== IHRvdA== aXRjaA== IHZpZGVv IGludmVzdGln IG5ldA== IE15 cmljdA== aWVu Lik= IGltcHJv dGhvdWdo d2FyZHM= IGNvbm5lY3Q= IE1lZA== c2VsdmVz ZW5zaXZl bWI= b2Jlcg== YXRvcnM= QW4= IDUw IHJlZHU= cmVzZW50 IGFib3Zl IGZyZQ== IEV1cm9wZQ== c3c= IGFtb3VudA== IEFwcA== IGVpdGhlcg== IG1pbGl0 IGFuYWw= IGZhaWw= IEVu YWxlcw== IHNwZWNpYWw= IGJsYWNr SVQ= Y2hlcg== IGxvb2tpbmc= IGZpcmU= eW4= IGFsbW9zdA== b29u IHN0dWR5 IG1pc3M= Y2hlcw== cm93bg== IHRyZQ== IGNvbW11bml0eQ== IG1lZGlh IGZvb2Q= IGNvbWVz IFVuaXZlcnNpdHk= IHNpbmdsZQ== V2hhdA== dWx5 IGhhbGY= YWd1ZQ== aG9k IFJlcHVibGlj IHN0YXJ0ZWQ= IHF1aWNr b3Rv Ym9vaw== IGlzc3Vl aXRvcg== IGVsc2U= IGNvbnNpZGVy MjY= cm9kdQ== IHRha2Vu Mjg= OTk= IFdpdGg= IHRydWU= IHdh IHRyYWQ= IGFnbw== IG1lc3M= aWVm IGFkZGVk b2tl IGJhZA== IGZhdg== MzM= IHNpbWlsYXI= YXNr IERvbg== IGNoYXJhY3Rlcg== b3J0cw== IEhvdXNl IHJlcG9ydGVk IHR5cGU= dmFs aW9k IEhvd2V2ZXI= IHRhcmc= IGVudGlyZQ== cHBpbmc= IGhpc3Rvcnk= IGxpdmU= ZmZpYw== Li4uLi4uLi4= ZWRlcmFs IHRyeWluZw== IGRpc2N1c3M= IEhhcg== YWNlcw== bGlzaGVk IHNlbGY= b3Nw cmVzdA== IHJvb20= ZWx0 IGZhbGw= b2x1dGlvbg== IGV0 IHg= IGlzbg== IGlkZWE= Ym8= IHNvdW5k IERlcA== IHNvbWVvbmU= Y2lhbGx5 dWxseQ== IGZvYw== IG9iamVjdA== aWZ0 YXBlcg== IHBsYXllcg== IHJhdGhlcg== IHNlcnZpY2U= YXNoaW5n IERv IFBhcnQ= cnVn bW9u cGx5 IG1vcg== IG5vdGhpbmc= IHByb3ZpZGU= SUM= dW5n IHBhcnR5 IGV4aXN0 IG1hZw== NzA= IHJ1bA== IGhvdXNl IGJlaGluZA== IGhvd2V2ZXI= IFdvcmxk IHN1bQ== IGFwcGxpYw== IDs= IGZ1bmN0aW9u Z3I= IFBvbA== IGZyb250 MjAw IHNlcmllcw== IHRlbQ== IHR5cA== aWxscw== IG9wdA== IHBvaW50cw== IGJlbG93 aXR0ZWQ= IHNwZWNpZmlj IDIwMTc= dW1i IHJh IHByZXZpb3Vz IHByZXQ= cmVtZQ== IGN1c3RvbQ== IGNvdXJ0 IE1l IHJlcGw= IHdob2xl Z28= Y2Vy IHRyZWF0 IEFjdA== IHByb2JhYmx5 IGxlYXJu ZW5kZXI= IEFzcw== IHZlcnNpb24= bm93 IGNoZWNr IENhbA== UkU= bWluaXN0 T24= b3VyY2Vz IGJlbmVm IGRvYw== IGRldGVy IGVuYw== IHN1cGVy IGFkZHJlc3M= IHZpY3Q= IDIwMTM= IG1lYXM= dHI= IGZpZWxk V2hlbg== IHNpZ25pZmlj dWdl IGZlYXQ= IGNvbW1vbg== bG9hZA== IGJlZ2lu IGJyaW5n IGFjdGlvbg== ZXJtYW4= IGRlc2NyaWI= IGluZHVzdA== IHdhbnRlZA== cmllZA== bWluZw== IGF0dGVtcHQ= NDU= ZmVy IGR1ZQ== cmVzc2lvbg== IyM= IHNoYWxs IHNpeA== b28= IHN0ZXA= IHB1Yg== IGhpbXNlbGY= IDIz IGNvcA== IGRlc3Q= IHN0b3A= QUM= aWJpbGl0eQ== IGxhYg== aWN1bHQ= IGhvdXJz IGNyZWF0ZQ== IGZ1cnRoZXI= IEFtZXJpY2E= IENpdHk= IGRvdQ== aGVhZA== U1Q= IE5vcnRo Y2luZw== IG5hdGlvbmFs dWxl IEluc3Q= IHRha2luZw== IFF1 aXJ0 IHJlZA== IHJlc2VhcmNo dmlyb24= IEdl IGJyZWFr YW5h IHNwYWNl YXRlcmlhbA== IHJlY2VudA== IEFi IGdlbmVyYWw= IGhpdA== IHBlcmlvZA== IGV2ZXJ5dGhpbmc= aXZlbHk= IHBoeXM= IHNheWluZw== YW5rcw== IGNvdQ== IGN1bHQ= YWNlZA== ZWFs dWF0aW9u IGNvdW4= bHU= IGluY2x1ZGU= IHBvc2l0aW9u IEFmdGVy IENhbmFk IEVt IGltbQ== IFJlZA== IHBpY2s= IGNvbXBs IG1hdHRlcg== cmVn ZXh0 YW5ndQ== aXNj b2xl YXV0 IGNvbXBldA== ZWVk ZmVjdA== IDIx IFNlbg== IFRoZXNl YXNpbmc= IGNhbm5vdA== IGluaXQ= IHJlbGF0aW9ucw== YWNoZWQ= IGJhcg== IDQw IFRI IDIwMTI= IHZvbA== IGdyb3VuZA== IHNlY3VyaXR5 IHVwZA== aWx0 MzU= IGNvbmNlcm4= IEp1c3Q= IHdoaXRl IHNlZW1z IEhlcg== cGVjaWFsbHk= aWVudHM= IGFubm91bg== IGZpZw== aWdodHM= IHN0cmk= bGlrZQ== aWRz IHN1cw== IHdhdGNo IOI= IHdpbmQ= IENvbnQ= IGl0c2VsZg== IG1hc3M= QWw= eWxl aXF1ZQ== IE5hdGlvbmFs IGFicw== IHBhY2s= IG91dHNpZGU= IGFuaW0= IHBhaW4= ZXRlcg== IG1hbmFn ZHVjdA== b2du IF0= IFNlcHQ= c2Vj b2Zm IEphbg== IGZvb3Q= YWRlcw== IHRoaXJk IG1vdA== IGV2aWRlbmNl aW50b24= IHRocmVhdA== YXB0 cGxlcw== Y2xl IGxv IGRlY2w= IGl0ZW0= bWVkaQ== IHJlcHJlc2VudA== b21i YW1lcg== IHNpZ25pZmljYW50 b2dyYXBo c3U= IGNhbA== aXJlcw== MDAwMA== SUQ= QU0= IHNpbXBseQ== IGxvbmdlcg== IGZpbGU= T1Q= Y2hl U28= YXRlZw== b3Jn IEhpcw== IGVuZXI= IGRvbQ== IHVwb24= aWxp Ijoi IHRoZW1zZWx2ZXM= IGNvbWluZw== IHF1aXRl IGRpZmZpY3VsdA== IEJhcg== aWxpdGllcw== cmVs ZW5kcw== Y2lhbA== NjQ= IHdvbWFu cmFw eXI= IG5lY2Vzcw== aXBz IHRleHQ= IHJlcXVpcmU= IG1pbGl0YXJ5 IHJldmlldw== IHJlc3BvbnM= NzU= IHN1YmplY3Q= IGluc3RlYWQ= IGlzc3Vlcw== IGdlbg== Iiwi IG1pbnV0ZXM= IHdlYXA= cmF5 YW1lZA== dGltZQ== Ymw= SG93 IGNvZGU= IFNt IGhpZ2hlcg== IFN0ZQ== cmlz IHBhZ2U= IHN0dWRlbnRz IEludGVybg== IG1ldGhvZA== IEF1Zw== IFBlcg== IEFn IHBvbGljeQ== IFN3 IGV4ZWM= IGFjY2VwdA== dW1l cmlidXQ= IHdvcmRz IGZpbmFs IGNoYW5nZXM= IERlbW9jcg== IGZyaWVuZHM= IHJlc3BlY3Q= IGVw IGNvbXBhbg== aXZpbA== IGRhbWFnZQ== KioqKg== b2dsZQ== dmlyb25tZW50 IG5lZw== ZW50YWw= IGFw IHRvdGFs aXZhbA== ISI= bGlt IG5lZWRz IGFncmU= IGRldmVsb3BtZW50 IGFnZQ== aXBsZQ== MjE= IHJlc3VsdHM= IEFm U2g= IGd1bg== IE9iYW1h cm9sbA== IEA= IHJpZ2h0cw== IEJyaXQ= IHJ1bm5pbmc= IHdhc24= IHBvcnQ= IHJhdGU= IHByZXR0eQ== IHRhcmdldA== IHNhdw== IGNpcmM= IHdvcmtz aWNybw== YWx0 b3Zlcg== d3d3 VGhhdA== bGllcg== IGV2ZXJ5b25l dWRl IHBpZQ== aWRkbGU= cmFlbA== IHJhZA== IGJsb2Nr IHdhbGs= VG8= 44E= bmVz IEF1c3Q= YXVs cm90ZQ== IFNvdXRo ZXNzaW9u b3Bo IHNob3dz IHNpdGU= IGpv IHJpc2s= Y2x1cw== bHQ= IGluag== aWRpbmc= IFNwZQ== IGNoYWxs aXJt IDIy aXR0aW5n c3Ry IGh5 TEU= a2V5 IGJlZ2Fu YXR1cg== YXNoaW5ndG9u bGFt IERhdg== Yml0 IHNpemU= IFBhcg== Mzg= b3VybmFs ZmFjZQ== IGRlY2lzaW9u IGxhcmc= IGp1ZA== cmVjdA== IGNvbnRpbnVl IE9jdA== b3ZlcmVk IEludA== PT09PT09PT0= IHBhcmVudA== IFdpbGw= IGVhc3k= IGRydWc= YW5nZXI= IHNlbnNl IGRp aWRheQ== IGVuZXJneQ== aXN0aWM= IGFzc29jaQ== YXJ0ZXI= b2JhbA== ZWtz IEVs dXJjaA== IGdpcmw= b2U= aXRsZQ== IDI4 IENoZQ== IHJlcXVlc3Q= IHNvb24= IGhvc3Q= a3k= IHN0YXRlcw== b21lcw== IG1hdGVyaWFs bGV4 IG1vbWVudA== IGFuc3c= b25zZQ== IGVzcGVjaWFsbHk= IG5vcm0= IHNlcnZpY2Vz cGl0ZQ== cmFu IHJvbGU= NDQ= KTo= IGNyZWQ= Q2w= X19fX19fX18= IG1hdA== IGxvZw== IENsaW50b24= T1U= IG9mZmljZQ== IDI2 IGNoYXJn IHRyYWNr bWE= IGhlYXJ0 IGJhbGw= IHBlcnNvbmFs IGJ1aWxkaW5n bmE= c2V0 Ym9keQ== IEJsYWNr IGluY3JlYXNl aXR0ZW4= IG5lZWRlZA== MzY= MzI= PSI= IGxvc3Q= IGJlY2FtZQ== IGdyb3Vwcw== IE11cw== IHdyb3Rl IFBl IHByb3A= am95 w6k= IFdoaXRl IGRlYWQ= Lic= IGh0dHA= IHdlYnM= T1M= IGluc2lkZQ== IHdyb25n IHN0YXRlbWVudA== IC4uLg== eWw= IGZpbG0= IG11c2lj IHNoYXJl aWZpY2F0aW9u IHJlbGVhc2U= IGZvcndhcmQ= IHN0YXk= IGNvbXB1dA== aXR0ZQ== c2Vy IG9yaWdpbmFs IGNhcmQ= IGNhbmQ= IGRpdg== YXR1cmFs IGZhdm9y T00= IGNhc2Vz dXNlcw== IHNlY3Rpb24= IGxlYXZl Z2luZw== b3ZlZA== IFdhc2hpbmd0b24= Mzk= IEds IHJlcXVpcmVk YWN0aW9u YXBhbg== b29y aXRlcg== IEtpbmc= IGNvdW50cmllcw== IEdlcm1hbg== bGxpbmc= IDI3 MzQ= IHF1ZXN0aW9ucw== IHByaW0= IGNlbGw= IHNob290 IGFueW9uZQ== IFdlc3Q= IGFmZmVjdA== ZXBlbmQ= IG9ubGluZQ== IElzcmFlbA== IFNlcHRlbWJlcg== IGFiaWxpdHk= IGNvbnRlbnQ= aXNlcw== IHJldmU= IGxhdW4= IGluZGlj IGZvcmNl Y2FzdA== IHNvbGQ= YXZpbmc= Zmw= IHNvZnQ= IGNvbXBhbmllcw== Y2VlZA== IGFydGljbGU= IGF1ZA== IHJldg== IGVkdWM= IHBsYXlpbmc= MDU= IGhlbGQ= Y3Rvcg== IHJlbGVhc2Vk IGZlZGVyYWw= Mzc= IGFkbWluaXN0 IGludGVydmlldw== IGluc3RhbGw= IHJlY2VpdmVk IHNvdXJjZQ== dWs= UGg= IHNlcmlvdXM= IGNyZWF0ZWQ= IGNhdXNl IGltbWVkaQ== IGRlZmlu dWVs IERlcGFydG1lbnQ= Y3Rpb25z IENvdXI= IE5vdw== emU= aXRlcw== aXR1dGlvbg== IGxhdGU= IHNwZWFr bmVycw== IGxlZ2Fs YXJp IENvcg== IHdlZWtz IG1vZGVs IHByZWQ= IGV4YWN0 QkM= IEJ5 SU5H b3Npbmc= IHRha2Vz IHJlZ2FyZA== IG9wcG9ydHVu IHByaWNl IDE5OA== IEFwcg== ZnVsbHk= IG9yZA== IHByb2JsZW1z cnVjdGlvbg== aGFt IENvdW50 bGVnZQ== IGxlYWRlcnM= RVQ= bGV2 IGRlZXA= b2xvZ2ljYWw= ZXNl aGFwcw== IFNvbWU= IHBlcnM= IGNvbnRyYWN0 IHJlbGF0aW9uc2hpcA== c3A= b3Vk IGJhc2U= NDg= bWl0 QWQ= YW5jaWFs IGNvbnN1bQ== IHBvdGVudGlhbA== IGxhbmd1 cmVt ZXRo IHJlbGln cmVzc2Vk NjY= IGxpbms= IGxvd2Vy YXllcg== IEp1bmU= IGZlbQ== dW50 ZXJj dXJk IGNvbnRhY3Q= IGlsbA== IG1vdGhlcg== IGVzdGFi aHR0 IE1hcmNo IEJybw== IENoaW5h IDI5 IHNxdQ== IHByb3ZpZGVk IGF2ZXJhZ2U= YXNvbnM= IDIwMTE= IGV4YW0= bGlu NTU= bmVk IHBlcmZlY3Q= IHRvdQ== YWxzZQ== dXg= IGJ1eQ== IHNob3Q= IGNvbGxlY3Q= IHBob3Q= IHBsYXllZA== IHN1cnBy IG9mZmljaWFscw== IHNpbXBsZQ== YXZ5 IGluZHVzdHJ5 IGhhbmRz Z3JvdW5k IHB1bGw= IHJvdW5k IHVzZXI= IHJhbmdl dWFyeQ== IHByaXZhdGU= b3Bz ZWVz IHdheXM= IE1pY2g= IHZlaA== IGV4Y2VwdA== IHRlcm1z aW11bQ== cHBlcg== SU9O b3Jlcw== IERyYWdvbg== b3Vs IGRlbg== IHBlcmZvcm1hbmNl IGJpbGw= Y2ls NDc= IGVudmlyb25tZW50 IGV4Yw== YWRk IHdvcnRo IHBpY3Q= IGNoYW5jZQ== IDIwMTg= Ym9y IHNwZWVk aWN0aW9u IGFsbGVn IEphcGFu YXRvcnk= cmVldA== IG1hdGNo IElJ IHN0cnU= b3JkZXI= IHN0ZQ== IGxpdmluZw== IHN0cnVjdA== aW5v IHNlcGFy aGVybg== IHJlc3BvbnNl IGVuam95 IHZpYQ== QUQ= dW1lbnRz YWNlYm9vaw== IG1lbWJlcg== aWJy aXppbmc= IHRvb2w= IE1vbg== IFdoaWxl aG9vZA== IEFuZw== IERlZg== IG9mZmVy VHI= YXVy IHR1cm5lZA== IEp1bHk= ZG93bg== YW5jZWQ= IHJlY2VudGx5 IEVhcg== IGNl IFN0YXI= IENvbmc= cm91Z2h0 IGJsb29k IGhvcGU= IGNvbW1lbnQ= YWludA== IGFycmk= aWxlcw== IHBhcnRpY2lw b3VnaHQ= cmlwdGlvbg== MDg= NDk= IGdhdmU= IHNlbGVjdA== IGtpbGxlZA== c3ljaA== IGdvZXM= aWo= IGNvbGw= IGltcGFjdA== YXRpdmVz IFNlcg== MDk= IEF1Z3VzdA== IGJveQ== ZGU= IERlcw== IGZlbHQ= VVM= IGV4cGVjdGVk IGltYWdl IE1hcms= Y2NvcmRpbmc= b2ljZQ== RUM= IE1hZw== ZW5lZA== aG9sZA== IFBvc3Q= IHByZXZlbnQ= Tm8= IGludm9sdmVk IGV5ZXM= IHF1aWNrbHk= QXQ= dW5r IGJlaGF2 IHVy IGxlZA== Y29tZQ== ZXk= IGNhbmRpZA== IGVhcmxpZXI= IGZvY3Vz ZXR5 UHJv bGVkZ2U= aXhlZA== aWxsZWQ= IHBvcHVsYXI= QVA= IHNldHQ= bGlnaHQ= IHZhcmlvdXM= aW5rcw== IGxldmVscw== IHJvYWQ= ZWxsaWc= YWJsZXM= aGVs aXR0ZWU= IEdlbmVy eXBl IGhlYXJk aWNsZXM= IG1pcw== IHVzZXJz IFNhbg== IGltcHJvdmU= IGZhdGhlcg== IHNlYXJjaA== VGhleQ== dmls IHByb2Zlc3M= IGtuZXc= IGxvc3M= IGV2ZW50cw== NjU= IGJpbGxpb24= MDc= MDI= IE5ld3M= IEFN IGNvdmVy d2hlcmU= ZW5zaW9u IGJvdHQ= IGFyZWFz ZW5jZXM= b3Bl IFR3aXR0ZXI= YWVs IGdldHM= IEdvb2dsZQ== IHNu aWFudA== IHZvdGU= IG5lYXJseQ== IGluY2x1ZGVk IHJlY29nbg== eno= bW0= YWxlZA== IGhhcHBlbmVk MDQ= IGhvdA== IHdob3Nl IGNpdmls IHN1ZmY= b2Vz aXRpeg== IFN5cmk= IHJlc3BvbmQ= IGhvbg== IGZlYXR1cmVz IGVjb25vbWlj IEFwcmls cmlt IHRlY2hub2xvZ3k= IG9wdGlvbg== YWdpbmc= IHB1cmNo UmU= IGxhdA== Y2hpZQ== aXNs IHJlY29tbQ== dWY= IHRyYWluaW5n IGVmZmVjdHM= IGZhc3Q= IDIwMTA= IG9jY3Vy IHdlYnNpdGU= IGVtYWls IHNlbnM= ZWNo IG9pbA== IGluZmx1 IGN1cnJlbnRseQ== IFNjaA== IEFkZA== IGdvYWw= IHNjaWVudA== IGNvbnY= MTAw ZW15 IGRlY2lkZWQ= IHRyYXZlbA== IG1lbnRpb24= TEw= MDM= IGVsZWN0aW9u IHBob25l IGxvb2tz IHNpdHVhdGlvbg== IGN5 IGhvcg== YmVk IENvdXJ0 YWlseQ== YXZlcw== IHF1YWxpdHk= IENvbXA= d2lzZQ== IHRhYmxl IHN0YWZm IFdpbmQ= ZXR0 IHRyaWVk aWRlcmVk IGFkZGl0aW9u IGJveA== IGxhY2s= YXJpbHk= IHdpZGU= IG1pZA== IGJvYXJk eXNpcw== IGFudGk= aGE= IGRpZw== ZW5pbmc= IGRybw== Q29u Njg= IHNsb3c= YmFzZWQ= c2VxdQ== IHBhdGg= RXg= YWtlcg== IHdvcmtlZA== IHBlbg== IGVuZ2luZQ== IGxvb2tlZA== IFN1cGVy IFNlcnY= IHZpY3RpbQ== VW4= IHByb3BlcnR5 IGludHJvZHU= IGV4ZWN1dA== IFBN TGU= IGNvbG9y IE1vcmU= IDYw IG5ldHdvcms= IGRhdGU= Y3Vs aWRnZQ== IGV4dHJh MzE= IHNsZQ== Njc= IHdvbmQ= IHJlcG9ydHM= anVzdA== IEF1c3RyYWw= IGNhcGl0YWw= IGVucw== IGNvbW1hbmQ= IGFsbG93ZWQ= IHByZXA= IGNhcHQ= aGli IG51bWJlcnM= Y2hhbg== IGZhaXI= bXA= b21z IHJlYWNo V2l0aA== dGFpbg== IGJyb2Fk IGNvdXBsZQ== ZWNhdXNl bHlpbmc= IEZlYg== IHNjcmVlbg== IGxpdmVz IHByaW9y IENvbmdyZXNz QXI= IGFwcHJvYWNo IGVtZXI= YXJpZXM= IERpcw== c2Vydg== IE5l IGJ1aWx0 Y2llcw== IHJlcGU= IHJ1bGVz Zm9yY2U= IFBhbA== IGZpbmFuY2lhbA== IGNvbnNpZGVyZWQ= IENoYXI= bmNlcw== IElT IGJyb3VnaHQ= IGJp aWVycw== IFNpbQ== T1A= IHByb2R1Y3Rz IHZpc2l0 IGRvY3VtZW50 IGNvbmR1Y3Q= IGNvbXBsZXRlbHk= aW5pbmc= IENhbGlm aWJseQ== IHdyaXR0ZW4= IFRW ZW1lbnRz IGRyYXc= T25l IHB1Ymxpc2hlZA== IHNlY3JldA== cmFpbg== aGV0 IEZhY2Vib29r b25kYXk= IFVw IHNleHVhbA== IHRob3Vz IFBhdA== IGVzcw== IHN0YW5kYXJk IGFybQ== Z2Vz ZWN0aW9u IGZlbGw= IGZvcmVpZ24= YW5p IEZyaWRheQ== IHJlZ3VsYXI= aW5hcnk= IGluY3JlYXNlZA== IHVzdWFsbHk= IGRlbW9u IGRhcms= IGFkZGl0aW9uYWw= cm9s IE9m IHByb2R1Y3Rpb24= ISE= dW5kcmVk IGludGVybmF0aW9uYWw= aWRlbnRz IEZyZWU= cm91cA== IHJhY2U= IG1hY2g= IGh1Z2U= QWxs bGVhcg== b3ZlbWJlcg== IHRvd24= IGF0dGVudGlvbg== IE9mZg== eW9uZA== IFRoZW4= ZmllbGQ= IHRlcnJvcg== cmF6 IEJv IG1lZXRpbmc= IFBhcms= IGFycmVzdA== IGZlYXI= IGF3 IFZhbA== b3Jpbmc= Jyw= IGV4dHJlbWU= YXJy IHdvcmtlcnM= QWZ0ZXI= IDMx bmV0 YW1lbnQ= IGRpcmVjdGx5 IHBvcHVsYXRpb24= dWJl IE9jdG9iZXI= IElO IEphbnVhcnk= NTk= IERhdmlk IGNyb3Nz Y2VtYmVy IEZpcnN0 IG1lc3NhZ2U= aXJpdA== IG5hdGlvbg== IHBvbGw= aXNpb25z IGFuc3dlcg== bnk= aXNvZGU= IGNhcnJ5 IFJ1c3NpYQ== IGhlYXI= ZW5ndGg= cm95 IG5hdHVyYWw= aW5hbGx5 IGRvZw== bWl0dGVk IHRyYWRl IHN1YnN0 IG11bHRpcGxl IEFmcmlj IGZhbnM= IHNvcnQ= IGdsb2JhbA== aWNhdGlvbg== IFdlZA== YXJh IGFjaGll IGxhbmd1YWdl dmV5 IHRhbA== IG5lY2Vzc2FyeQ== IGRldGFpbHM= IHNlbg== IFN1bmQ= IFJlZw== IFJlYw== MDY= IHNpbA== cmVzc2l2ZQ== IG1lZGljYWw= dW5jaA== b3JuaWE= IHVuZA== Zm9ydA== b2Nrcw== IE1vbmRheQ== dWVzZGF5 Y3JhZnQ= Nzc= dXJ0 IHZlcg== IEhpbGw= IHJlY2VpdmU= IG1vcm5pbmc= ZXN0ZXJu IGJhbms= IHNhdA== aXJ0aA== IEhpZ2g= IGRldmljZQ== IFRIRQ== IENlbnRlcg== IHNhZmU= IHBsZQ== IENhbmFkYQ== IHN5c3RlbXM= IGFzc2lzdA== IHN1cnY= IGJhdHRsZQ== IFNvYw== dmVydGlz U2hl IHBhcGVy IGdyb3d0aA== IGNhc3Q= U2M= IHBsYW5z bGxlZA== IHBhcnRz IHdhbGw= IG1vdmVtZW50 IHByYWN0aWNl aW1hdGVseQ== IGRpc3BsYXk= IHNvbWV0aW1lcw== b21w IFBhdWw= IFllcw== a2luZw== NTg= b2x5 IHNvbg== IGF2b2lk b2tlcw== IEpldw== IHRvd2FyZHM= YXNj IC8v IEtvcmU= IHRhbGtpbmc= IGNvcnJlY3Q= IHNwZW50 aWNrcw== aWFibGU= ZWFyZWQ= IHRlcm0= IHdhbnRz b21pbmc= IHV0 IGRvdWI= IGZvcmNlcw== IHBsZWFzZQ== Njk= IE5vdmVtYmVy YXRmb3Jt b25kb24= IG9uZXM= IGltbWVkaWF0ZWx5 IFJ1c3NpYW4= IE1ldA== IGRlZw== IHBhcmVudHM= Q0g= IEFtZXJpY2Fucw== YWx5 IE1vZA== IHNob3du IGNvbmRpdGlvbnM= IHN0dWZm IHJlYg== IFlvdXI= IGluY2x1ZGVz bm93bg== IFNhbQ== IGV4cGVyaWVu bWlzc2lvbg== IEV2ZW4= YXVnaHQ= IGFubm91bmNlZA== IFJlcHVibGljYW4= IGRldGVybWlu IGRlc2NyaWJlZA== IENvdW50eQ== KCk= IGRvb3I= IGNoYW5nZWQ= IG5laWdo IEhlcmU= IGNsZWFu IHBhbg== IERlY2VtYmVy IEV1cm9wZWFu aXJpbmc= YXB0ZXI= IGNsdWI= IFR1ZXNkYXk= IHBhaWQ= IE5ldA== IGF0dGFja3M= IGNoYXJhY3RlcnM= IGFsb25l IGRpcmVjdG9y ZG9t IDM1 IGxvYWQ= IHJvdXQ= IENhbGlmb3JuaWE= IGZpbmFsbHk= IHJhYw== IGNvbnRy IGV4YWN0bHk= cmVzaA== cHJp IElzbGFt IG5hdHVyZQ== IGNhcmVlcg== IGxhdGVzdA== IGNvbnZlcnM= IFNs cG9zZQ== Y2llbnQ= IEluYw== aXZpdHk= ODg= IEF0dA== IE1vcg== bmVzZGF5 IHdlaWdodA== a2Vu IG5vdGU= IHRlYW1z IFw= YWlycw== IEdyZWVu IGh1bmRyZWQ= b25lbnQ= IHN0cmVuZw== IGNvbnNpc3Q= aWNhdGVk IHJlZ3Vs IGxpYw== YXN0aWM= IHRlbg== dXJzZGF5 ZWxsaWdlbmNl b3VzbHk= IFVL Qkk= IGNvc3Rz IGluZGVwZW5k IEFQ IG5vcm1hbA== IGhvbQ== IG9idmlvdXM= IHN3ZQ== IHN0YXI= IHJlYWR5 YWNoZXI= IGltcGxlbWVudA== Z2VzdA== IHNvbmc= IEdldA== IExhYg== IGludGVyZXN0aW5n dXNpbmc= IGdpdmluZw== IFN1bmRheQ== IGV0Yw== IG1pZGRsZQ== IHJlbWVtYmVy cmlnaHQ= b3NpdGlvbg== dXRpb25z IG1heA== NDY= IHlvdXJzZWxm IGRlbWFuZA== IHRyZWF0bWVudA== IGRhbmdlcg== IENvbnM= IGd1eQ== IEJyaXRpc2g= IHBoeXNpY2Fs IHJlbGF0ZWQ= IHJlbWFpbg== IGNvdWxkbg== IHJlZmVy IGNpdGl6 Ym94 RU5U Ym9hcmQ= IGlubg== SUc= ZXJv IFN0cmVldA== b3NwaXRhbA== cmVuY2g= Y2hlcnM= IHN0cmE= T0w= YWdlcg== IEFO IGVhc2lseQ== SUE= ZW5nZQ== aW55 IGNsb3M= b2NrZWQ= IHVzZXM= IENvdW4= SW0= dWlsZA== Pz8= bW9yZQ== IGFuZw== IHdyaXRl b2x1dGU= NTc= IGxlYWRlcg== IHJlYWRpbmc= PC8= IGF1dG9t ZXN0cw== NDM= IGxlZ2lzbA== IEdvbGQ= IGRlc2lnbmVk IFNU IExlZw== YXJlcw== IGJlYXV0 IFRleA== IGFwcGVhcnM= IHN0cnVnZw== IFJvbQ== IDAw IGNob2ljZQ== IHBhcnRpY3VsYXJseQ== IEZyb20= b3Blcg== IExvbmRvbg== YW5uZWQ= IGFsbG93cw== b2JpbGU= IGRpZmZlcmVuY2U= 4oCi IFZpZXc= IFdlZG5lc2RheQ== IGFsdGhvdWdo IHJlbGF0aXZl IGFwcGxpY2F0aW9u YXRldmVy IGFyZW4= IG15c2VsZg== IGltYWc= IGRpc2U= IHNvY2lldHk= IGZyZXF1 IEVuZ2xpc2g= IHBvb3I= IERheQ== IHdyaXRpbmc= IHNldmVu IHN0YXJ0aW5n IGJ1ZA== IHByaW50 IFRyYW5z dWZhY3Q= IFN0dWQ= bmV3 IGNyaW0= IGdpdmVz IGNvb2w= YWU= aWFuY2U= IEdlbmVyYWw= IHRoaW5raW5n IHNhdmU= IGxpbWl0ZWQ= IFBhcnR5 IG1lYW5pbmc= cGVu b3dlcnM= IEphY2s= RU0= IG5pY2U= cnVwdA== IGdhcw== IGVpZ2h0 IGZlZXQ= IGVmZm9ydA== IGlnbg== aWNpdA== Qmw= Y29pbg== IG9waW4= IGJyYWlu V2hpbGU= aGVzdA== IFRodXJzZGF5 IHdvdWxkbg== YXVnaHRlcg== IHRvdWNo bGVtZW50cw== IHN0dWRpZXM= IGNlbnRlcg== Y29udA== b3JnZQ== IGNvbXB1dGVy IGludmVzdGlnYXRpb24= UGw= b3Jrcw== IDIwMDg= IGluY3JlYXNpbmc= IHN0b3Jl IGNvbW1lbnRz IGJhbA== bWVu IGRvbGw= IGxpYmVy IHdpZmU= IGxhd3M= YXR1cmRheQ== aXRuZXNz IG1vZGVybg== IFNr IGFkbWluaXN0cmF0aW9u IG9wcG9ydHVuaXR5 IHNhbA== IHBvd2VyZnVs TXk= IGNsYWltcw== IEVhcnRo b3Jkcw== IHRpdGxl IGVzYw== bmFtZQ== Tm90 b21lbg== IGJleW9uZA== IGNhbWVy IHNlbGw= aXR1dGU= ZWFyY2g= IGFwcGw= aW1lbnQ= NDI= IEFydA== IHVuZg== IHZpb2xlbmNl dXJn IEVhc3Q= IGNvbXBhcmVk IG9wdGlvbnM= IHRocm91Z2hvdXQ= IHZz aWdy Lls= YWNoZXM= Nzg= IGZpbGVz Rkw= RUw= YXJpYW4= IEphbWVz IEFpcg== YW5jaA== IGRldGFpbA== IHBpZWNl UFM= IG5hbWVk IGVkdWNhdGlvbg== IGRyaXZl IGl0ZW1z IHN0dWRlbnQ= aWNlZA== Ojo= aWNv IHRocm93 IHNjZW5l IGNvbXBsZXg= IDIwMDk= IHByZWM= IEJyZQ== Nzk= IGNvbmNlcHQ= IHN0YXR1cw== YW1pbmc= IGRpZWQ= IGtub3dsZWRnZQ== IGJlZ2lubmluZw== T0Q= cnVhcnk= IGNlcnRhaW5seQ== IGd1eXM= IHNsaWdodA== aW5u b3VuZHM= IGZpbmU= IGZhdA== aWNhdGlvbnM= IHBlcmhhcHM= IEFudA== IGluY29tZQ== IGh0dHBz IG1ham9yaXR5 cG9ydHM= c3Rvbg== IGdyZWF0ZXI= IGZlZWQ= ZW50aWFsbHk= IHNhZmV0eQ== IHVuaXF1ZQ== YW5kb20= IGdvbmU= IHNob3dlZA== IGhpc3Rvcg== IGNvdW50ZXI= aXVz aWRh IGxlYWRpbmc= aXBl IHNlbmQ= IERvbmFsZA== ZXJ2ZQ== IGRlZmVuc2U= aW5lc2U= IHllcw== IEZpcmU= IE11c2xpbQ== cmFx IGNvbnRpbnVlZA== b3No IHByb3ZpZGVz IHByaXNvbg== IFByZQ== IGhhcHB5 IGVjb25vbXk= IHRydXN0 YWdz IEdhbWU= IHdlYXBvbnM= dW1hbg== IENsZQ== aXRhdGlvbg== IGFuYWx5c2lz IFRpbWVz IHNjaWVuY2U= LT4= IGZpZ3VyZQ== IGRpc2FwcA== ZW50eQ== IHNvZnR3YXJl IHVsdA== IG9mZmljZXJz TmV3 SXM= IHJlbWFpbnM= IEluZGlh IHBzeWNo cmllZg== IGNhdA== ZXNj IG9ic2Vydg== IHN0YWdl IERhcms= IGVudGVy Y2hhbmdl IHBhc3NlZA== IGRlc3BpdGU= IE91dA== IG1vdmll cnM= IHZvaWNl bWluZQ== IFBsYXk= IHRvd2FyZA== IFRlcg== IHJlZ2lvbg== IHZhbHVlcw== b3J0ZXJz IG1vdW50 IG9mZmljZXI= IE90aGVy YmFu IGhvdXM= d29vZA== cm9vbQ== SVY= IFN1bg== c2Vl IE92ZXI= cm9n OTA= IGxheQ== IFR1cg== YXdu IHByZXNzdXJl IFN1Yg== IGJvb2tz ZWRvbQ== IFNhbmQ= QUE= YWdv IHJlYXNvbnM= Zm9yZA== IGFjdGl2aXR5 VVQ= Tm93 IFNlbmF0ZQ== Y2VsbA== bmlnaHQ= IGNhbGxz aW50ZXI= IGxldHRlcg== IFJvYg== IEpl IGNob29zZQ== IExhdw== R2V0 QmU= IHJvYg== IHR5cGVz IHBsYXRmb3Jt IHF1YXJ0ZXI= UkE= IFRpbWU= IG1heWJl IENy OTU= cHJl IG1vdmluZw== IGxpZg== IGdvbGQ= IHNvbQ== IHBhdGllbnRz IHRydXRo IEtl dXJhbmNl YW50bHk= bWFy IGNoYXJnZQ== IEdyZWF0 IGNlbGU= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHJvY2s= cm9pZA== YW5jeQ== IGNyZWRpdA== YXVk Qnk= IEV2ZXJ5 IG1vdmVk aW5nZXI= cmlidXRpb24= IG5hbWVz IHN0cmFpZ2h0 IEhlYWx0aA== IFdlbGw= IGZlYXR1cmU= IHJ1bGU= IHNjaGU= aW5hdGVk IE1pY2hhZWw= YmVyZw== NDE= aWxlZA== YmFuZA== IGNsaWNr IEFuZ2Vs b25lbnRz wq0= IElyYXE= IFNhdHVyZGF5 IGF3YXJl cGFydA== IHBhdHRlcm4= T1c= IExldA== IGdyYWQ= aWduZWQ= IGFzc29jaWF0ZWQ= IHN0eWxl bm8= aWF0aW9u YWl0aA== aWxpZXM= IHN0b3JpZXM= dXJhdGlvbg== IGluZGl2aWR1YWxz IOKApg== bWlzcw== IEFzc29jaQ== aXNoaW5n YWJ5 IHN1bW1lcg== IEJlbg== IDMy IGFyY2g= dXR5 IFRleGFz aG9s IGZ1bGx5 IG1pbGw= IGZvbGxvd2Vk IEJpbGw= IEluZGlhbg== IFNlY3JldA== IEJlbA== IEZlYnJ1YXJ5 IGpvYnM= IHNlZW1lZA== IEdvdmVybg== aXBwZWQ= IHJlYWxpdHk= IGxpbmVz IHBhcms= IG1lYXN1cmU= IE91cg== SU0= IGJyb3RoZXI= IGdyb3dpbmc= IGJhbg== IGVzdGlt IGNyeQ== IFNjaG9vbA== IG1lY2hhbg== IE9G IFdpbmRvd3M= IHJhdGVz IE9o IHBvc2l0aXZl IGN1bHR1cmU= aXN0aWNz aWNh IGhhcg== eWE= aXRlbHk= aXBw IG1hcA== ZW5jaWVz IFdpbGxpYW0= SUk= YWtlcnM= NTY= IE1hcnQ= IFJlbQ== IGFsdGVybg== aXR1ZGU= IGNvYWNo cm93ZA== RG9u IGtpZHM= IGpvdXJuYWw= IGNvcnBvcg== IGZhbHNl IHdlYg== IHNsZWVw IGNvbnRhaW4= IHN0bw== IGJlZA== aXZlcnNl IFJpY2g= IENoaW5lc2U= IHB1bg== IG1lYW50 a25vd24= IG5vdGljZQ== IGZhdm9yaXRl YXZlbg== IGNvbmRpdGlvbg== IHB1cnBvc2U= KSk= IG9yZ2FuaXphdGlvbg== IGNoYWxsZW5n IG1hbnVmYWN0 IHN1c3A= IEFj IGNyaXRpYw== dW5lcw== dWNsZWFy IG1lcg== dmVudGlvbg== IDgw IG1pc3Q= IFVz IFRvcg== aHR0cA== b2xm IGxhcmdlcg== IGFkdmFudA== IHJlc2Vhcg== IGFjdGlvbnM= bWw= IGtlcHQ= IGFpbQ== LCc= Y29s IGJlbmVmaXRz aWZ5aW5n IGFjdHVhbA== IEludGVybmF0aW9uYWw= IHZlaGljbGU= IGNoaWVm IGVmZm9ydHM= IExlYWd1ZQ== IE1vc3Q= IHdhaXQ= IGFkdWx0 IG92ZXJhbGw= IHNwZWVjaA== IGhpZ2hseQ== IGZlbWFsZQ== IGVycm9y IGVmZmVjdGl2ZQ== NTQ= IGVuY291cg== d2VsbA== IGZhaWxlZA== IGNvbnNlcnY= IHByb2dyYW1z IHRyb3U= IGFoZWFk NTAw dmVydGlzZW1lbnQ= SVA= IEZvdW5k cGly ICU= IGNyaW1l YW5kZXI= IGxvY2F0aW9u IElyYW4= IGJlaGF2aW9y YXppbmc= IHJhcmU= IGVtYg== IGNhdXNlZA== IHNoaXA= IGFjdGl2ZQ== IGNvbnRyaWJ1dA== IGdyZWVu IGFjcXU= IHJlZmxlY3Q= dmVudWU= IGZpcm0= IGJpcnRo XS4= IGNsZWFybHk= IGVtb3Q= IGFnZW5jeQ== cmlhZ2U= IG1lbW9yeQ== OTg= U0E= IFNlZQ== YWNpbmc= Q0M= IGJpZ2dlc3Q= IHJhcA== IGJhc2lj IGJhbmQ= ZWF0 IHN1c3BlY3Q= IE1hYw== IDkw bWFyaw== aXN0YW4= IHNwcmVhZA== YW1z a2k= YXN5 cmF2 IFJvYmVy IGRlbW9uc3Ry cmF0ZWQ= IGFic29sdXRl IHBsYWNlcw== IGltcGw= aWJyYXJ5 IGNhcmRz IGRlc3Ryb3k= IHZpcnQ= dmVyZQ== IGFwcGVhcmVk eWFu cG9pbnQ= IGJlZw== IHRlbXBlcg== c3Bl YW50ZWQ= ZWFycw== IERpcmVjdA== IGxlbmd0aA== IGJsb2c= YW1i IGludGVn IHJlc291cmNlcw== YWNj aWZ1bA== IHNwb3Q= IGZvcmNlZA== IHRob3VzYW5kcw== IE1pbmlzdGVy IHF1YWw= IEZyZW5jaA== YXRpY2FsbHk= IGdlbmVyYWxseQ== IGRyaW5r IHRodXM= SUw= b2Rlcw== IGFwcHJvcHJp IFJlYWQ= IHdob20= IGV5ZQ== IGNvbGxlZ2U= IDQ1 aXJlY3Rpb24= IGVuc3VyZQ== IGFwcGFyZW50 aWRlcnM= IHJlbGlnaW91cw== IG1pbm9y b2xpYw== IHRybw== IFdoeQ== cmlidXRl bWV0 IHByaW1hcnk= IGRldmVsb3BlZA== IHBlYWNl IHNraW4= c3Rl YXZh IGJsdWU= IGZhbWlsaWVz IGly IGFwcGx5 IGluZm9ybQ== IFNtaXRo Q1Q= aWk= IGxpbWl0 IHJlc2lzdA== Li4uLi4uLi4uLi4uLi4uLg== dW1u IGNvbmZsaWM= IHR3ZQ== dWRk IFRvbQ== IGxpdGVy cXVl Ym9u IGhhaXI= IGV2ZW50dWFsbHk= IHB1cw== IGhlbHBlZA== IGFnZw== b3JuZXk= IEFwcGxl IGZpdA== IFN1cg== IHByZW0= IHNhbGVz IHNlY29uZHM= IHN0cmVuZ3Ro IGZlZWxpbmc= v70= IHRvdXI= IGtub3dz b29t IGV4ZXJj IHNvbWV3 77+9 Pj4= IHNwb2tlcw== IGlkZWFz IHJlZ2lzdA== c29mdA== IERlbA== IFBD IHByb3Bvcw== IGxhdW5jaA== IGJvdHRvbQ== VEg= IFBsZWFzZQ== dmVzdA== aXR6 IEludGVy IHNjcmlwdA== IHJhdA== YXJuaW5n IGls IEplcg== IEFyZQ== IHdoYXRldmVy b2tlbg== Y2llbmNl IG1vZGU= IGFncmVl IHNvdXJjZXM= IGluaXRpYWw= IHJlc3RyaWN0 IHdvbmRlcg== dXNpb24= IyMjIw== IFNpbA== dmlsbGU= IGJ1cm4= dHc= YXNpb24= IMKj IG5vcg== dWluZw== IHJlYWNoZWQ= IHN1bg== IGNhdGVn aWdyYXRpb24= IGNvb2s= IHByb21vdA== IG1hbGU= IGNsaW1hdGU= IGZpeA== IGFsbGVnZWQ= VVI= YWxsZWQ= IGltYWdlcw== Q29udA== b3Rh IHNjaG9vbHM= aW9z IGRyb3A= IHN0cmVhbQ== IE1v IHByZXZpb3VzbHk= YWxpbmc= IHBldA== IGRvdWJsZQ== IChA YW5uZWw= IGRlZmF1bHQ= dGllcw== IHJhbms= IERlYw== IENvdW5jaWw= IHdlYXBvbg== IHN0b2Nr IGFuYWx5 IFN0cg== IHBpY3R1cmU= IFBvbGljZQ== ZmVyZW5jZQ== IGNlbnR1cnk= IGNpdGl6ZW5z IG9udG8= IGV4cGFuZA== IGhlcm8= IFNvbA== IHdpbGQ= IHVwZGF0ZQ== IGN1c3RvbWVycw== cm9udA== ZGVm IGxpaw== IGNyaW1pbmFs IENocmlzdGlhbg== U1A= NzY= IGxlYXZpbmc= IG90aGVyd2lzZQ== IERpc3Q= IGJhc2lz NTI= NTM= aWNpcA== IEJlcg== IHJlY29tbWVuZA== IGZsb29y IGNyb3dk b2xlcw== IDcw IGNlbnRyYWw= IEV2 IGRyZWFt IGRvd25sb2Fk IGNvbmZpcg== IFRob20= IHdpbmRvdw== IGhhcHBlbnM= IHVuaXQ= IHRlbmQ= IHNwbA== IGJlY29tZXM= IGZpZ2h0aW5n IHByZWRpY3Q= IFByZXNz IFBvd2Vy IGhlYXZ5 YWtlZA== IGZhbg== b3J0ZXI= YXRlZ3k= QkE= aXplcw== IHNwZW5k SGVyZQ== IDIwMDc= IGFkb3A= IEhhbQ== IGZvb3RiYWxs IFBvcnQ= b2RheQ== NTE= YW1waW9ucw== IHRyYW5zZmVy aHQ= IDM4 dGVybQ== YWNpdHk= IGJ1cg== XSw= dGVybmFs cmln YnV0 IHRoZXJlZm9yZQ== IEJlY2F1c2U= cmVzcA== cmV5 IG1pc3Npb24= U29tZQ== IG5vdGVk IGFzc3Vt IGRpc2Vhc2U= IGVkaXQ= IHByb2dyZXNz cmQ= IEJyb3du b2NhbA== IGFkZGluZw== IHJhaXNlZA== IEFueQ== IHRpY2s= IHNlZWluZw== IFBlb3BsZQ== IGFncmVlbWVudA== IHNlcnZlcg== IHdhdA== IGRlYmF0ZQ== IHN1cHBvc2Vk aWxpbmc= IGxhcmdlc3Q= IHN1Y2Nlc3NmdWw= IFByaQ== IERlbW9jcmF0aWM= IGp1bXA= IFN5cmlh IG93bmVycw== IG9mZmVycw== IHNob290aW5n IGVmZmlj c2V5 IGhhdmVu dmVyc2U= dGVyZWQ= IExpZ2h0 aW1hbA== IEJpZw== IGRlZmVuZA== IGJlYXQ= IHJlY29yZHM= JSk= IHNjZW4= IGVtcGxveWVlcw== IGRldmljZXM= aGVt IGNvbW1lcg== IE1leA== IGJlbmVmaXQ= IFByb2Y= IGlsbGVn IHN1cmZhY2U= IEFsc28= IGhhcm0= aW5nbHk= d2lkZQ== IEFsZXg= IHNodXQ= IEN1cg== IGxvc2U= cG0= IGNoYWxsZW5nZQ== c2VtYg== IHN0YXRpb24= IGludGVsbGlnZW5jZQ== IGFjY3Vy IEZsb3I= IHJlcXVpcmVz IE1hbA== YnVt IGhvc3BpdGFs IHNwaXJpdA== IG9mZmVyZWQ= IHByb2R1Y2U= IENvbW11bg== IGNyZWF0aW5n IGNyaXM= c3BlY3Q= IGVuZGVk IGRhaWx5 IHZvdGVycw== bGFuZHM= aWFz aWg= b25h IHNtYXJ0 IE9mZmljZQ== IExvcmQ= cmlhbA== IEludGVybmV0 IGNpcmN1bQ== IGV4dHJlbWVseQ== Jy4= IG9waW5pb24= IE1pbA== IGdhaW4= QlM= IEZpbg== eXA= IHVzZWZ1bA== IGJ1ZGdldA== IGNvbWZvcnQ= aXNm IGJhY2tncm91bmQ= ZWxpbmU= IGVwaXNvZGU= IGVuZW15 IHRyaWFs IGVzdGFibGlzaA== ZGF0ZQ== IENhcA== IGNvbnRpbnVlcw== IHNob3dpbmc= IFVuaW9u d2l0aA== IHBvc3RlZA== IFN5c3RlbQ== IGVhdA== cmlhbg== IHJpc2U= IEdlcm1hbnk= aWxz IHNpZ25lZA== IHZpbGw= IGdyYW5k bW9y IEVuZ2xhbmQ= IHByb2plY3Rz dW1iZXI= IGNvbmZlcmVuY2U= emE= IHJlc3BvbnNpYmxl IEFyYWI= IGxlYXJuZWQ= 4oCU4oCU aXBwaW5n IEdlb3JnZQ== T0M= IHJldHVybmVk IEF1c3RyYWxpYQ== IGJyaWVm UXU= IGJyYW5k aWxsaW5n YWJsZWQ= IGhpZ2hlc3Q= IHRyYWlu IENvbW1pc3Npb24= d2hpbGU= IG5vbQ== Y2VwdGlvbg== IG11dA== IEJsdWU= IGluY2lkZW50 dmFudA== ODY= IElE IG51Y2xlYXI= NzQ= IExpa2U= IFJF IE1pY3Jv bGk= bWFpbA== IGNoYXJnZXM= ODk= IGFkanVzdA== YWRv IGVhcnRo TkE= IHByaWNlcw== UEE= IGRyYWZ0 IHJ1bnM= IGNhbmRpZGF0ZQ== ZW5zZXM= IG1hbmFnZW1lbnQ= IFBoaWw= IE1pc3M= IHRlYWNo Z3JhbQ== IHVuZGVyc3RhbmRpbmc= YWl0 aWNhZ28= QWRk IEVw c2VjdXQ= IHNlcGFyYXRl IGluc3RhbmNl IGV0aA== IHVubGVzcw== KioqKioqKio= IEZvcmU= aW5hdGU= IG9wZXJhdGlvbnM= U3A= IGZhaXRo Z2Fy IENodXJjaA== cm9uaWM= IGNvbmZpZw== b3N1cmU= IGFjdGl2aXRpZXM= IHRyYWRpdGlvbmFs IDM2 IGRpcmVjdGlvbg== IG1hY2hpbmU= IHN1cnJvdW5k IHB1c2g= dW5jdGlvbg== IEVV IGVhc2llcg== IGFyZ3VtZW50 R0I= IG1pY3Jv IHNwZW5kaW5n aXphdGlvbnM= IHRoZW9yeQ== YWRvdw== IGNhbGxpbmc= IExhc3Q= IGRlcg== IGluZmx1ZW5jZQ== IGNvbW1pdA== IHBob3Rv IHVuYw== aXN0cnk= Z24= YXN0ZQ== YWNrcw== IGRpc3A= YWR5 ZG8= IEdvb2Q= IGA= IHdpc2g= IHJldmVhbGVk wqDCoA== bGln IGVuZm9yY2U= IENvbW1pdHRlZQ== IGNoZW0= IG1pbGVz IGludGVyZXN0ZWQ= IHNvbHV0aW9u aWN5 aW5jdA== IC0+ IERldA== IHJlbW92ZWQ= IGNvbXBhcg== ZWFo IHBsYW50 IFNpbmNl IGFjaGlldmU= IGFkdmFudGFnZQ== IHNsaWdodGx5 YmluZw== IHBsYWNlZA== dW5kZXI= MjAxNQ== IE1hZA== IHRpbQ== b3Nlcw== IGNydQ== IFJvY2s= IG1vc3RseQ== IG5lZ2F0aXZl IHNldHRpbmc= IHByb2R1Y2Vk IG11cg== IGNvbm5lY3Rpb24= IE1lcg== IGRyaXZlcg== IGV4ZWN1dGl2ZQ== IGFzc2F1bHQ= IGJvcm4= IFZlcg== dGFpbmVk IHN0cnVjdHVyZQ== IHJlZHVjZQ== IGRlY2FkZXM= IGRlZA== dWtl IE1hbnk= aWRkZW4= IGxlYWd1ZQ== U2U= IGpvaW4= IGRpc2Nv IGRpZQ== Y2tz YWN0aW9ucw== IGFzc2Vzcw== YWdu IGdvYWxz b3Vycw== SVI= IHNlbmlvcg== aWxsZXI= bW9k aXBtZW50 b2NvbA== dXk= IFF1ZQ== IHBhcnRpZXM= aXJnaW4= IGxlYXJuaW5n aXRhYmxl IHN0cmVldA== IGNhbWVyYQ== QXBw IHNraWxscw== YnJl Y2lvdXM= IGNlbGVicg== IEZyYW5j IGV4aXN0aW5n IHdpbGxpbmc= bG9y IGlk IFNwYWNl IGNyaXRpY2Fs IExh b3J0dW5hdGVseQ== IHNlcnZl IGNvbGQ= IHNwZWNpZXM= VFM= IGFuaW1hbHM= IEJheQ== IG9sZGVy IFVuZGVy ZXN0aWM= IFRyZQ== IHRlYWNoZXI= IHByZWZlcg== dmlz IHRocmVhZA== IE1hdHQ= IG1hbmFnZXI= 44O7 IHByb2Zlc3Npb25hbA== IFZvbA== IG5vdGVz VGhlc2U= dWxh IGZyZXNo ZW50ZWQ= dXp6 ZWR5 Y2x1c2lvbg== IFJlbA== IGRvdWJ0 RU8= IG9wZW5lZA== IEJpdA== QWR2ZXJ0aXNlbWVudA== IGd1ZXNz IFVO IHNlcXU= IGV4cGxhaW4= b3R0ZW4= IGF0dHJhY3Q= YWtz IHN0cmluZw== IGNvbnRleHQ= b3NzaWJsZQ== IFJlcHVibGljYW5z IHNvbGlk IGNpdGllcw== IGFza2luZw== IHJhbmRvbQ== dXBz dXJpZXM= YXJhbnQ= ZGRlbg== Z2w= IEZsb3JpZGE= IGRlcGVuZA== IFNjb3R0 IDMz IGlU aWNvbg== IG1lbnRpb25lZA== IDIwMDA= IGNsYWltZWQ= IGRlZmluaXRlbHk= dWxm IGNvcmU= IG9wZW5pbmc= IENvbnN0 d2hpY2g= IFRyYQ== QUc= NzI= IGJlbGlldmVk YWRh IDQ4 IFNlY3VyaXR5 eXJpZ2h0 IFBldA== IExvdQ== IGhvbGRpbmc= PT09PT09PT09PT09PT09PQ== IGljZQ== IGJyb3c= IGF1dGhvcml0aWVz aG9zdA== d29yZA== IHNjb3Jl IERpdg== IGNlbGxz IHRyYW5zbA== IG5laWdoYm9y IHJlbW92ZQ== dWN0 IGRpc3RyaWN0 IEFjY29yZGluZw== IHdvcnNl IGNvbmNlcm5z IHByZXNpZGVudGlhbA== IHBvbGljaWVz IEhhbGw= NzM= IGh1cw== QVk= IDIwMDY= IEp1ZA== IGluZGVwZW5kZW50 IEp1c3RpY2U= aWxpYXI= cHJpbnQ= aWdodGVy IHByb3RlY3Rpb24= emVu IHN1ZGRlbg== aG91c2U= IEplcw== UFI= IEluZg== IGJ1bA== IF8= IFNlcnZpY2U= IFBS IHN0cmF0ZWd5 ZmZlY3Q= IGdpcmxz IG1pc3Npbmc= b3lhbA== IFRlYW0= dWxhdGVk IGRhdA== IHBvbGl0aWNz YWJvcg== QWNjb3JkaW5n IHNwZWxs IGdyYXBo b3J0aGVybg== VEM= QWI= IGxhYm9y aXNoZXI= IGtpY2s= IGlUdW5lcw== IHN0ZXBz cG9zZXM= IHNtYWxsZXI= RW4= YmVydA== IHJvbGw= IHJlc2VhcmNoZXJz IGNsb3NlZA== IHRyYW5zcG9ydA== IGxhd3k= X19fX19fX19fX19fX19fXw== IENoaWNhZ28= IGFzcGVjdA== IG5vbmU= IG1hcnJpYWdl OTY= IGVsZW1lbnRz IEZyZQ== IFNhbA== IGRyYW0= RkM= dG9w ZXF1 IGhlYXJpbmc= IHN1cHBvcnRlZA== IHRlc3Rpbmc= Y29ob2w= IG1hc3NpdmU= IHN0aWNr IGd1YXJk aXNjbw== cGhvbmU= RnJvbQ== SG93ZXZlcg== IGJvcmRlcg== IGNvcHk= b2dyYXBoeQ== bGlzdA== NzE= IG93bmVy Y2xhc3M= cnVpdA== cmF0ZQ== IE9uY2U= IGRpZ2l0YWw= IHRhc2s= RVJT IGluY3JlZA== dGVz Kys= IEZyYW5jZQ== IGJyZWF0 b3ds IGlzc3VlZA== IFdlc3Rlcm4= IGRldGVjdA== IHBhcnRuZXJz IHNoYXJlZA== IENhbGw= IGNhbmNlcg== YWNoZQ== cmliZQ== IGV4cGxhaW5lZA== IGhlYXQ= eyI= IGludmVzdG1lbnQ= IEJvb2s= IHdvb2Q= IHRvb2xz IEFsdGhvdWdo IGJlbGllZg== IGNyaXNpcw== IGdl IE1Q IG9wZXJhdGlvbg== dHlwZQ== fn4= Z2E= IGNvbnRhaW5z YW50YQ== IGV4cHJlc3M= IEdyb3Vw IEpvdXJuYWw= a2E= IGFtYg== IFVTQQ== IGZpbmRpbmc= IGZ1bmRpbmc= aG93 IGVzdGFibGlzaGVk aWRlb3M= IGRlZ3JlZQ== IGRhbmdlcm91cw== YW5naW5n IGZyZWVkb20= cHBvcnQ= b3V0aGVybg== IGNodXJjaA== IGNhdGNo IFR3bw== IHByZXNlbmNl IEd1YXJk VXA= IGF1dGhvcml0eQ== IFByb2plY3Q= IGJ1dHRvbg== IGNvbnNlcXU= IHZhbGlk IHdlYWs= IHN0YXJ0cw== IHJlZmVyZW5jZQ== IE1lbQ== Iik= VU4= b3JhZ2U= IE9wZW4= IGNvbGxlY3Rpb24= eW0= Z2VuY3k= IGJlYXV0aWZ1bA== cm9z IHRlbGxz IHdhaXRpbmc= bmVs IHByb3ZpZGluZw== IERlbW9jcmF0cw== IGRhdWdodGVy IG1hc3Rlcg== IHB1cnBvc2Vz IEphcGFuZXNl IGVxdWFs IHR1cm5z IGRvY3VtZW50cw== IHdhdGNoaW5n UmVz IHJhbg== MjAxNA== IHJlamVjdA== IEtvcmVh IHZpY3RpbXM= TGV2ZWw= ZXJlbmNlcw== IHdpdG5lc3M= IDM0 IHJlZm9ybQ== Y29taW5n IG9jY3Vw IGNhdWdodA== IHRyYWZmaWM= YWRpbmc= IG1vZGVscw== YXJpbw== IHNlcnZlZA== IGJhdHRlcg== dWF0ZQ== IFNlY3JldGFyeQ== IGFncmVlZA== IHRydWx5 eW5hbQ== IFJldA== IHVuaXRz IFJlc2VhcmNo aGFuZA== YXppbmU= IE1pa2U= IHZhcmlldHk= b3RhbA== IGFtYXppbmc= IGNvbmZpcm1lZA== IGVudGlyZWx5 IHB1cmNoYXNl IGVsZW1lbnQ= IGNhc2g= IGRldGVybWluZQ== RGU= IGNhcnM= IFdhbGw= 4pY= IHZpZXdz IGRydWdz IGRlcGFydG1lbnQ= IFN0ZXA= dWl0 IDM5 YXN1cmU= IENsYXNz IGNvdmVyZWQ= IEJhbms= IG1lcmU= dWFuYQ== IG11bHRp IG1peA== IHVubGlrZQ== bGV2aXNpb24= IHN0b3BwZWQ= IHNlbQ== IEdhbA== dWxlcw== IHdlbA== IEpvaG5zb24= bGE= IHNraWxs IGJlY29taW5n cmll IGFwcHJvcHJpYXRl ZmU= ZWxsb3c= IFByb3Q= dWxhdGU= b2NhdGlvbg== IHdlZWtlbmQ= b2RpZXM= IHNpdGVz IGFuaW1hbA== IFRpbQ== IHNjYWxl IGNoYXJnZWQ= IGluc3RydWN0 aWxsYQ== IG1ldGhvZHM= IGNlcnQ= IGp1ZGdl IEhlbA== IGRvbGxhcnM= IHN0YW5kaW5n IFNxdQ== IGRlYnQ= bGlhbQ== IGRyaXZpbmc= IFN1bQ== IEVkaXRpb24= IGFsYnVt YW5kb24= SUY= IFVr NjM= YWRlcg== IGNvbW1lcmNpYWw= ZXNo IEdvdmVybm1lbnQ= IGRpc2NvdmVyZWQ= IG91dHB1dA== IEhpbGxhcnk= IENhcm9s IDIwMDU= IGFidXNl YW5jaW5n IHN3aXRjaA== IGFubnVhbA== VHc= IHN0YXRlZA== YWdlbWVudA== aW5uZXI= IGRlbW9jcg== IHJlc2lkZW50cw== IGFsbG93aW5n IGZhY3RvcnM= b2Rk IGZ1Y2s= ZW1pZXM= IG9jY3VycmVk b3Rp IG5vcnRo IFB1YmxpYw== IGluanVyeQ== IGluc3VyYW5jZQ== Q0w= b2xseQ== 44A= IHJlcGVhdGVk IGFybXM= YW5nZWQ= IGNvbnN0cnVjdGlvbg== IGZsZQ== UFU= aWNpYW5z IGZvcm1z IE1jQw== YW50aWM= IG1lbnRhbA== cGlyZQ== IGVxdWlwbWVudA== IGZhbnQ= IGRpc2N1c3Npb24= IHJlZ2FyZGluZw== a2lu YXJw IGNoYWly b2d1ZQ== IHByb2NlZWQ= IElk T3Vy IG11cmRlcg== TWFu IDQ5 YXNw IHN1cHBseQ== IGlucHV0 IHdlYWx0aA== bGlhbWVudA== IHByb2NlZA== b3JpYWw= IFN0YXQ= IE5GTA== aGVucw== IEluc3RpdHV0ZQ== IHB1dHRpbmc= b3VybmFtZW50 ZXRpYw== IGxvY2F0ZWQ= IGtpZA== ZXJpYQ== cnVu IHByaW5j ICE= Z29pbmc= IEJldA== IGNsb3Q= IHRlbGxpbmc= IHByb3Bvc2Vk aW90 b3JyeQ== IGZ1bmRz Z21lbnQ= IExpZmU= IGJhYnk= IEJhY2s= IHNwb2tl SW1hZ2U= IGVhcm4= IEFU Z3U= IGV4Y2hhbmdl IExpbg== b3Zpbmc= IHBhaXI= TW9yZQ== YXpvbg== IGFycmVzdGVk IGtpbGxpbmc= Y2Fu IENhcmQ= eWQ= IGlkZW50aWZpZWQ= IG1vYmlsZQ== IHRoYW5rcw== b255bQ== IEZvcm0= IGh1bmRyZWRz IENocmlz IENhdA== IHRyZW5k aGF0 IEF2 b21hbg== IGVsZWN0cmlj IFdpbA== U0U= T2Y= IHJlc3RhdXI= b3RlZA== IHRyaWc= IG5pbmU= IGJvbWI= V2h5 wq8= IGNvdmVyYWdl IGFwcGVhbA== IFJvYmVydA== IFN1cA== IGZpbmlzaGVk IGZsb3c= IGRlbGl2ZXI= IGNhbGN1bA== IHBob3Rvcw== IHBoaWw= IHBpZWNlcw== IGFwcHJl a2Vz IHJvdWdo RG8= IHBhcnRuZXI= IGNvbmNlcm5lZA== IDM3 IEdlbg== Q29s Y3RvcnM= ID0+ c3RhdGU= IHN1Z2dlc3RlZA== IEZvcmNl Q0U= IGhlcnNlbGY= IFBsYW4= d29ya3M= b290aA== cmVuY3k= IGNvcm5lcg== IGh1c2JhbmQ= IGludGVybmV0 IEF1dA== ZW1z b3Nlbg== IEF0bA== Z2Vu IGJhbGFuY2U= NjI= IHNvdW5kcw== dGV4dA== IGFycg== b3Zlcw== IG1pbGxpb25z IHJhZGlv IHNhdGlzZg== IERhbQ== TXI= R28= U3Bl IGNvbWJhdA== cmFudA== IEdyZWU= IGZ1ZWw= IGRpc3RhbmNl IHRlc3Rz IGRlY3Jl IEVy IG1hbmFnZWQ= RFM= IHRpdA== IG1lYXN1cmVz IExpYmVy IGF0dGVuZA== YXNoZWQ= IEpvc2U= IE5pZ2h0 ZGl0 IE5vdg== IEVuZA== b3V0cw== IGdlbmVyYXRpb24= IGFkdm9j eXRo IGNvbnZlcnNhdGlvbg== IFNreQ== YWN0aXZl Y2Vs cmllcg== IEZyYW5r IGdlbmRlcg== IGNvbmNlbnQ= IGNhcnJpZWQ= YW5kYQ== IFZpcmdpbg== IGFycml2ZWQ= aWNpZGU= YWRlZA== IGZhaWx1cmU= IG1pbmltdW0= bGV0cw== IHdvcnN0 IGtlZXBpbmc= IGludGVuZGVk IGlsbGVnYWw= IHN1YnNj IGRldGVybWluZWQ= IHRyaXA= WWVz IHJhaXNl IH4= IGZlZWxz IHBhY2thZ2U= IEpv aGk= MjAxNg== cmVhbA== IGZyYQ== IHN5bWI= TWU= dWNreQ== cHJldA== IEto IEVkaXQ= IFdlYg== ZW1pYw== IENvbG9y IGp1c3RpY2U= SW50 IGZhcm0= Y2tub3c= Ij4= ZWxlc3M= IHJlZHVjZWQ= IDUwMA== eHg= IFJhZA== IFdvb2Q= IGNsaW4= IGh5cA== aWxlcg== dXJh a2lucw== ODU= NjE= IFRoZWly IE1hcnk= IHNhbg== IG5vdmVs IFdobw== IGNhcGFjaXR5 IGltcG9zc2libGU= IHBsYXlz IG1pbmlzdGVy aWp1YW5h aWNhdGU= IFNldA== IGZyYW0= IGluZw== IGNvbW11bml0aWVz IEZCSQ== aXRh IGJvbg== IHN0cmF0ZWc= IGludGVyZXN0cw== bG9jaw== Z2Vycw== bWFz IEFORA== IGNvbmZsaWN0 IHJlcXVpcmVtZW50cw== IHNhYw== IG9wZXJhdGluZw== aW5p cmVsYXRlZA== IGNvbW1pdHRlZA== IHJlbGF0aXZlbHk= IHNvdXRo wq/Crw== IGFmZm9yZA== IGlkZW50aXR5 IGRlY2lzaW9ucw== IGFjY3VzZWQ= cGxhY2U= IHZpY3Rvcnk= b2No aWF0 TmFtZQ== Q29t dGlvbg== ZWRz IHNlZWs= IHRpZ2h0 IEltYWdlcw== IGluaXRp IGh1bWFucw== IGZhbWlsaWFy IGF1ZGllbmNl IGludGVybmFs dmVudHVyZQ== IHNpZGVz IFRP IGRpbQ== IGNvbmNsdWQ= IGFwcG9pbnQ= IGVuZm9yY2VtZW50 IEppbQ== IEFzc29jaWF0aW9u IGNpcmN1bXN0 IENhbmFkaWFu IGpvaW5lZA== IGRpZmZlcmVuY2Vz IExvcw== IHByb3Rlc3Q= IHR3aWNl d2lu IGdsYXNz YXJzaA== IEFybXk= IGV4cHJlc3Npb24= IGRlY2lkZQ== IHBsYW5uaW5n YW5pYQ== IGhhbmRsZQ== IE1pY3Jvc29mdA== IE5vcg== IG1heGltdW0= IFJldg== IHNlYQ== IGV2YWw= IGhlbHBz cmVm IGJvdW5k IG1vdXRo IHN0YW5kYXJkcw== IGNsaW0= IENhbXA= IEZveA== Y2xlcw== IGFybXk= IFRlY2hu YWNraW5n eHk= U1M= IDQy IGJ1Zw== IFVrcmFpbg== IE1heA== IEpvbmVz IFNob3c= bG8= IHBsYW5ldA== IDc1 IHdpbm5pbmc= IGZhc3Rlcg== IHNwZWN0 IGJyb2tlbg== VFI= IGRlZmluZWQ= IGhlYWx0aHk= IGNvbXBldGl0aW9u aHR0cHM= IElzbGFuZA== IEZl IGFubm91bmNl IEN1cA== IEluc3RlYWQ= IGNsaWVudA== IHBvc3NpYmx5 c2VjdGlvbg== b2NrZXQ= bG9vaw== IGZpbmlzaA== IGNyZXc= IHJlc2Vydg== IGVkaXRvcg== IGhhdGU= IHNhbGU= IGNvbnRyb3ZlcnM= IHBhZ2Vz d2luZw== IG51bWVy IG9wcG9zaXRpb24= IDIwMDQ= IHJlZnVnZQ== IGZsaWdodA== IGFwYXJ0 IExhdA== QW1lcmlj IEFmcmljYQ== IGFwcGxpY2F0aW9ucw== IFBhbGVzdA== IEJ1cg== IGdhcg== IFNvY2lhbA== IHVwZ3I= IHNoYXBl IHNwZWFraW5n YW5zaW9u YW8= IFNu IHdvcnJ5 IEJyaXRhaW4= UGxlYXNl cm91ZA== IGh1bg== IGludHJvZHVjZWQ= IGRpZXQ= SW5k IFNlY29uZA== IGZ1bmN0aW9ucw== dXRz IEVhY2g= IEplZmY= IHN0cmVzcw== IGFjY291bnRz IGd1YXJhbnQ= IEFubg== ZWRpYQ== IGhvbmVzdA== IHRyZWU= IEFmcmljYW4= IEJ1c2g= fSw= IHNjaA== IE9ubHk= IGZpZg== aWdhbg== IGV4ZXJjaXNl IEV4cA== IHNjaWVudGlzdHM= IGxlZ2lzbGF0aW9u IFdvcms= IFNwcg== w4I= IEh1bWFu IOg= IHN1cnZleQ== IHJpY2g= cmlw IG1haW50YWlu IGZsbw== IGxlYWRlcnNoaXA= c3RyZWFt IElzbGFtaWM= IDAx IENvbGxlZ2U= IG1hZ2lj IFByaW1l IGZpZ3VyZXM= MjAxNw== aW5kZXI= eHVhbA== IERlYWQ= IGFic29sdXRlbHk= IGZvdXJ0aA== IHByZXNlbnRlZA== cmVzcG9uZA== cmlibGU= IGFsY29ob2w= YXRv IERF cG9yYXJ5 IGdyYWI= IHZhcmk= IHF1YW50 IFBob3Rv IHBsdXM= cmljaw== YXJrcw== IGFsdGVybmF0aXZl IHBpbA== IGFwcHJveA== dGhhdA== IG9iamVjdHM= IFJv IEFuZHJvaWQ= IHNpZ25pZmljYW50bHk= IFJvYWQ= a2F5 UmVhZA== YXZvcg== IGFja25vdw== IEhE IFNpbmc= T3I= IE1vbnQ= IHVucw== cHJvZg== IG5lZ290aQ== IEFyY2g= aWtp IHRlbGV2aXNpb24= IEpld2lzaA== IGNvbW1pdHRlZQ== IG1vdG9y IGFwcGVhcmFuY2U= IHNpdHRpbmc= IHN0cmlrZQ== IERvd24= Y29tcA== IEhpc3Q= IGZvbGQ= YWNlbWVudA== IExvdWlz IGJlbG9uZw== IOKAog== IG1vcnQ= IHByZXBhcmVk IDY0 IE1hc3Rlcg== IGluZGVlZA== IERlbg== IHJlbnQ= VEE= b3VybmV5 YXJj U3U= OTc= IGFkdmljZQ== IGNoYW5naW5n IGxpc3RlZA== IGxhdW5jaGVk aXNhdGlvbg== IFBldGVy aXNoZXM= IGxpdmVk IE1lbA== IFN1cHJlbWU= IEZlZGVyYWw= ICk7 cnVjdHVyZQ== IHNldHM= IHBoaWxvcw== dW91cw== IMKg IGFwcGxpZWQ= IE5PVA== IGhvdXNpbmc= IE1vdW50 IG9kZA== IHN1c3Q= REE= ZmZpY2llbnQ= ID8= b2x2ZWQ= IHBvd2Vycw== IHRocg== IHJlbWFpbmluZw== IFdhdGVy TEM= IGNhdXNlcw== 44Gu IG1hbm5lcg== YWRz IHN1Z2dlc3Rz IGVuZHM= c3RhbmRpbmc= Zmln IER1bg== aWR0aA== IGdheQ== IHRlcm1pbg== IEFuZ2VsZXM= TVM= IHNjaWVudGlmaWM= IGNvYWw= YXBlcnM= YmFy IFRob21hcw== IHN5bQ== IFJ1bg== dGhpcw== UEM= aWdyYW50cw== IG1pbnV0ZQ== IERpc3RyaWN0 Y2VsbGVudA== IGxlYXZlcw== IGNvbXBsZXRlZA== YW1pbg== IGZvY3VzZWQ= IG1vbml0b3I= IHZlaGljbGVz TUE= IE1hc3M= IEdyYW5k IGFmZmVjdGVk aXR1dGlvbmFs IGNvbnN0cnVjdA== IGZvbGxvd3M= IHRvbg== cmVlbnM= IGhvbWVz IEV4dA== IExldmVs cmFzdA== IEly IGVsaW0= IGxhcmdlbHk= IEpvZQ== IHZvdGVz YWxscw== IGJ1c2luZXNzZXM= IEZvdW5kYXRpb24= IENlbnRyYWw= IHlhcmRz IG1hdGVyaWFscw== dWxuZXI= IGd1aWRl IGNsb3Nlcg== dW1z IHNwb3J0cw== ZWRlcg== SnVzdA== IHRheGVz ODQ= IE9sZA== IGRlY2FkZQ== b2xh IHZpcg== IGRyb3BwZWQ= IGRlbGF5 aXRlY3Q= IHNlY3VyZQ== c3RlaW4= bGV2ZWw= IHRyZWF0ZWQ= IGZpbGVk YWluZQ== IHZhbg== IG1pcg== IGNvbHVtbg== aWN0ZWQ= ZXBlcg== IHJvdA== IGNvbnN1bHQ= IGVudHJ5 IG1hcmlqdWFuYQ== IERvdQ== IGFwcGFyZW50bHk= b2tpbmc= Y2x1c2l2ZQ== IGluY3JlYXNlcw== YW5v IHNwZWNpZmljYWxseQ== IHRlbGU= ZW5zaW9ucw== IHJlbGlnaW9u YWJpbGl0aWVz IGZyYW1l IE5vdGU= IExlZQ== IGhlbHBpbmc= IGVkZ2U= b3N0b24= IG9yZ2FuaXphdGlvbnM= w4M= IEJvdGg= aGlwcw== IGJpZ2dlcg== IGJvb3N0 IFN0YW5k IHJvdw== dWxz YWJhc2U= IHJpZA== TGV0 YXJlbg== cmF2ZQ== IHN0cmV0 UEQ= IHZpc2lvbg== IHdlYXJpbmc= IGFwcHJlY2k= IGF3YXJk IFVzZQ== IGZhY3Rvcg== d2Fy dWxhdGlvbnM= KSg= IGdvZA== IHRlcnJpdA== IHBhcmFt YXN0cw== ODc= IGVuZW1pZXM= IEdhbWVz RkY= IGFjY2lkZW50 V2VsbA== IE1hcnRpbg== VEVS IGF0aA== IEhlbGw= IGZvcmc= IHZldGVy IE1lZGlj ZnJlZQ== IHN0YXJz IGV4cGVuc2l2ZQ== IGFjYWQ= cmF3bg== IFdoZQ== IGxvY2s= IGZvcm1hdA== IHNvbGRpZXJz c20= IGFnZW50 IHJlc3BvbnNpYmlsaXR5 b3Jh IFNjaWVuY2U= IHJhcGlk IHRvdWdo IEplc3Vz IGJlbGlldmVz TUw= IHdlYXI= bGV0ZQ== w4PDgg== IERyaQ== IGNvbW1pc3Npb24= IEJvYg== T2g= YXBlZA== IHdhcm0= w4PDgsODw4I= IDIwMDM= b3J0aW9u IGhhc24= dXN0ZXI= IHVuaXZlcnM= IElsbA== IGtpbmc= b2xvZ2llcw== OTQ= IFRlbQ== IE1vcw== IHBhdGllbnQ= IE1leGljbw== Y2Vhbg== IERlYXRo IFNhbmRlcnM= eW91 IENhc3Q= IENvbXBhbnk= cHR5 IGhhcHBlbmluZw== RlA= IEJhdHRsZQ== IGJvdWdodA== QW0= TW9k VXM= dXRlcnM= IENyZQ== IFRob3Nl IDQ0 aXNlcg== IHNvdWw= IFRvcA== IEhhcnJ5 IEF3 IHNlYXQ= ZmZlZQ== IHJldm9sdXRpb24= ICgi IER1cmluZw== ZXR0ZQ== IHJpbmc= IG9mZmVuc2l2ZQ== IHJldHVybnM= IHZpZGVvcw== IGRpc2Ns IGZhbW91cw== ZW5jZWQ= IFNpZ24= IFJpdmVy IDMwMA== UE0= IEJ1cw== IENI IGNhbmRpZGF0ZXM= YXJkZW4= IHBlcmNlbnRhZ2U= IHZpc3VhbA== IHRoYW5r IHRyb3VibGU= bmVyZ3k= IDIwMDE= IHByb3Zl YXNoaW9u IGVuaA== IExvbmc= VU0= IGNvbm5lY3RlZA== IHBvc3NpYmlsaXR5 T3Zlcg== IGV4cGVydA== IGxpYnJhcnk= YXJ0cw== IERpcmVjdG9y IGZlbGxvdw== OTI= aXJ0eQ== IGRyeQ== IHNpZ25z IExvdmU= IHF1aWV0 Zm9vdA== IHB1cmU= IEh1bg== IGZpbGxlZA== cGhhcw== IEVsZWN0 ZW5kbWVudA== IEV4cGw= IHVuYWJsZQ== bnM= bW8= IHZhc3Q= b2Jl IGlkZW50aWZ5 YXBwaW5n IENhcm9saW5h Z3Jlc3M= IHByb3Rl IGZpc2g= IGNpcmN1bXN0YW5jZXM= cmF6eQ== IFBob3Q= IGJvZGllcw== IE11cg== IGRldmVsb3Bpbmc= IEFS IGV4cGVyaWVuY2Vk IHN1YnN0YW50 IEJvYXJk ZXNvbWU= IGRvbWVzdGlj IGNvbWJpbmVk IFB1dA== IGNoZW1pY2Fs IENoaWxk IHBvb2w= IEN5 IGVnZw== Y29ucw== c3RlcnM= IGh1cnQ= IG1hcmtldHM= IGNvbnNlcnZhdGl2ZQ== IHN1cHBvcnRlcnM= IGFnZW5jaWVz aWRlbA== T2I= dXJi IDQz IERlZmVuc2U= eWU= IEFw ZHVsZQ== IHRlbXBlcmF0dXJl IGNvbmR1Y3RlZA== IENoaWVm IHB1bGxlZA== IGZvbA== TGFzdA== b250bw== b3Npcw== VkVS RGVz IFBhbg== Rmlyc3Q= IGFkdmFuY2U= IGxpY2Vuc2U= cm9ycw== IEpvbg== IGltYWdpbmU= IGhlbGw= IGZpeGVk IGluY29y b3NpdGU= IExvZw== aWNrZW4= XTo= IHN1cnByaXNl aGFi IGNyYWZ0 b2x0 IEp1bA== IGRpYWw= IHJlbGV2YW50 IGVudGVyZWQ= IGxlYWRz IEFE IENsZWFu IHBpY3R1cmVz ZXNzb3I= IGFsdA== IHBheWluZw== UGVy IE1hcmtldA== IHVwZGF0ZXM= YW1pbHk= IFR5cGU= IEhvbWU= IDU1 c2VtYmx5 cm9tZQ== ODM= IGdyZWF0ZXN0 IGhlaWdodA== IGhlYXY= YWludHM= IGxpc3Rlbg== YXNlcg== IFNI IGNhcGFibGU= YWNsZQ== IHBlcnNwZWN0 aW5hdGluZw== IG9mZmVyaW5n cnlwdA== IERldmVsb3A= YWJpbg== cmM= IGJyaWdodA== YWx0eQ== YXJyb3c= IHN1cHBs aW5kaW5n YWNrZWQ= Z3lwdA== IEFub3RoZXI= cGc= IFZpcmdpbmlh IEx1 IHBsYW5uZWQ= IHBpdA== IHN3ZWV0 VHlwZQ== IERp IHR5cGljYWxseQ== IEZyYW5jaXNjbw== IHByb3NwZWN0 IERhbg== IHRlZW4= cmVlcw== IHNjaGVk IGhvbA== IHNjcg== IGxvdHM= bGlmZQ== IG5ld3Nw IGZvcmdldA== IE5vbmU= IE1pZGRsZQ== IFJ5YW4= ZWRk IHNldmVyZQ== IHN1aXQ= bGxlcg== OTM= IGNvcnJlc3BvbmQ= IGV4cGxvcw== dWF0aW9ucw== IGZsYWc= Z2FtZQ== cmlk IHByaW4= IERhdGE= IGRlcGxveQ== IEVudGVy c3VpdA== Z2hhbg== IE1lbg== IHRob3VnaHRz IG1hdHRlcnM= IGFkYXB0 IEFyaQ== IGZpbGw= IGZvcnRo IHNhbQ== IDQx IHBheW1lbnQ= IEhvcg== IHNwcmluZw== ZHVj IGxvc2luZw== IGJyaW5naW5n Rk8= YWxh IGRpc3RyaWJ1dGlvbg== aGVyZWQ= Ym91cg== IElzcmFlbGk= b21h IGNvbWJpbmF0aW9u IHBsZW50eQ== VkU= Q2Fu IEhhdw== IHBlcm1hbg== IFNwZWNpYWw= IHRvdw== IHNlZWtpbmc= IGV4YW1wbGVz IGNsYXNzZXM= Y3I= IGJlZXI= IG1vdmVz IElQ IEtu IHBhbmVs RXZlbg== IHByb3Blcmx5 IHJpcw== IHBsdWc= IGVzdGltYXRlZA== RXZlcnk= IGRlZmVuc2l2ZQ== YWdyYXBo IHByZWdu IGluc3RpdA== IFZpY3Q= IHZvbHVtZQ== IHBvc2l0aW9ucw== IGxpbmtz IFByb2dyYW0= IFdlZWs= YWd1ZXM= IHRyYW5zZm9ybQ== a2Vy IENFTw== IGNhcw== IG9wcG9uZW50 IHR3ZWV0 IENvZGU= IHNob3A= IGZseQ== IHRhbGtz IGJhZw== UGhvbmU= IGFpZA== IHBsYW50cw== IDY1 IGF0dG9ybmV5 YXJ0ZXJz cXVlc3Q= IE1hZ2lj IGJlZ2lucw== IG15c3Rlcg== IGVudmlyb25tZW50YWw= IHN0b3JhZ2U= Tk4= IG1hcmc= IHNrZQ== IG1ldGFs ZWxseQ== IG9yZGVyZWQ= IHJlbWFpbmVk IGxvdmVk IHByb21wdA== IHVwZGF0ZWQ= IGV4cGVydHM= IHdhbGtpbmc= IGFuY2llbnQ= IHBlcmZvcm1lZA== QVRF IG5laXRoZXI= aWVuY3k= IG1hbnVmYWN0dXJl IFBhaw== IHNlbGVjdGVk IG1pbmU= IHVsdGltYXRlbHk= IGV4cGxhbg== IGxhYmVs IFNlcnZpY2Vz cmlidXRlZA== VHJ1bXA= IHN5bg== IFVsdA== U0M= IG1lYXQ= IGdpYW50 IFdhcnM= IE9O IGFkbQ== IGludGVycHJldA== IGV2ZW5pbmc= IGV2aWw= IEJvc3Rvbg== IFdpbGQ= IMM= IEJpdGNvaW4= IEFtYXpvbg== RHI= IEluZm9ybWF0aW9u IG9idmlvdXNseQ== IGFkdmFuY2Vk UGhvdG8= b2xhcg== IHdlYXRoZXI= IHN5bWJvbA== IHNvbGU= IHBvdGVudGlhbGx5 b3N0ZXI= IG9yaWdpbmFsbHk= bXVu MzAw YXpl ZXNzaW9ucw== IGRlY2s= IHN0b29k IHlvdXRo IEJlcm4= UmVw IFRlc3Q= IGJhc2ljYWxseQ== b3RpYw== IGludm9sdmU= b2xpdA== bHlu U2Vl IGFpcmNyYWZ0 IGNvbmZpcm0= RVc= IG1lc3NhZ2Vz IFJpY2hhcmQ= IGtpdA== IHByb2hpYg== IHZ1bG5lcg== aXN0ZXJz IGV4aXN0ZW5jZQ== IHR1cm5pbmc= IFNQ IGRlc2lyZQ== IGZsYXQ= IG1lbnQ= c2Vhc29u YW5nZXM= IG5laWdoYm9yaG9vZA== IExha2U= QVRJT04= IHBvaW50ZWQ= YnVy IGlubm92 dWNrcw== VUw= IHByb2Zlc3Nvcg== IGV4cHJlc3NlZA== QUI= aWNpb3Vz IDIwMDI= IERldg== IHNlc3Npb24= IGJhcmU= c2Vu IGRpc3M= IENhdGg= IFBhc3M= IFBvaW50 IGRvY3Rvcg== b3Jyb3c= YWlsZWQ= IFJ1Yg== IERD IENoYXJs cGVyc29u IHdyaXRlcg== aWdodGVycw== dXJlYXU= IG9ibGln IHJlY29yZGVk IGJyb2tl IG9yZGVycw== aWx0eQ== IG1vdGlvbg== aW5pdHk= bGF3 YWRpdW0= IGltbWlncmF0aW9u IGNvbnRyYXN0 IGJhdHQ= IGV4Y2VsbGVudA== IHRlY2huaWNhbA== YW1p IHR1bg== IGNsb3Vk IFllYXI= Z2Vvbg== IGNyZWF0aW9u IHN0cmFuZ2U= IGF1dGg= IGZvcnQ= Ym9ybg== IGV4dGVudA== IFRvZGF5 IENsdWI= IHJhaW4= IHNhbXBsZQ== IGFjY2VwdGVk IHRhY3Q= IGZpcmVk IFNvbg== IHN0YW5kcw== IGJvb3Q= IDQ3 IHN0YXRlbWVudHM= IHZlcnNpb25z IHNlbGxpbmc= b3VuZGVk IDE5OTA= IHdlcmVu IFdhdGNo IGV4cGVyaW1lbnQ= UG9zdA== IHJldGFpbA== dWxlZA== SW5zdA== dW50ZQ== 44O8 IGRlcGFydA== IGJvbmQ= aXZlcnk= b21wbA== IHJlYWN0aW9u IFN5cmlhbg== IFBhYw== YXBwZWQ= YW5pZWw= RFA= IHJlc29sdXRpb24= IHJlYWN0 IGFwcHJvdmVk b25vbQ== bW9uZA== IE9mZmlj LS0t IHJlcGxhY2U= IHRhY2s= IHNwb3J0 IGNoYWlu IGVtZXJnZW5jeQ== cmFk IFBhbGVzdGlu IDQ2 IGF1dG9tYXRpY2FsbHk= IHJvdXRl IHBhbA== IGJhbmtz IFBhcmlz IE1lZGlh cm9hZA== aWNpbmc= aXh0 aXN0ZWQ= IGdyZXc= IGNvb3Jk IFdoZXJl b21pbg== IHN1YnM= 77+977+9 IMKx IGNvcnBvcmF0ZQ== IHNlbGVjdGlvbg== bm9vbg== IFJlcG9ydA== Y3M= Y2x1ZGluZw== b3JkZXJz YW5jaGU= IEl0cw== IHNsb3dseQ== IEVneXB0 IEFjYw== IGNvbGxl aXF1ZXM= RVg= IGF0dGVtcHRz dXJs IENyb3Nz IGZpbmRpbmdz IFND IE9S IGluZGV4 ZW5zaXR5 IFdheQ== IExhbmQ= IHNob2Nr ZGlz IGR5bmFt IGNhcnQ= bW9zcA== U2luY2U= aWVzdA== IEJveQ== IHN0b3Jt IENvbnRpbg== MjAxMw== aGV3 aWxpdA== IGVzc2VudGlhbA== aXF1aWQ= T3RoZXI= aXZlcmVk IHJlYXNvbmFibGU= QWN0 IHN1YnNlcXU= IFBhY2s= IEZvcnQ= IGNvbnNpZGVyaW5n IHVuaXZlcnNpdHk= bG9n IG1hcnJpZWQ= IGlsbHVzdA== IFRydWU= o48= IG51bWVyb3Vz cmFzdHJ1Y3R1cmU= IHNlcmlvdXNseQ== IHJlZmVycmVk dWE= IGNvbnNpc3RlbnQ= b25uYQ== IFJlYWw= cnVwdGlvbg== Y2lwbGVz IGZhY3Rz OTE= b3Rlcw== ZXJn VGhlbg== IGFjY29tcGw= Tm90ZQ== IHJldmVudWU= IHBhc3Npbmc= IG1hbA== ZWVu IFlldA== IGdhdGhlcg== dGVyZGF5 ZXdvcms= IEF1dGhvcg== UGU= IG9wdGlt IHJ1Yg== IOijjw== IHVua25vd24= c3RvbmU= IHVuaW9u b2x2ZQ== IG9wcG9ydHVuaXRpZXM= IGJyb3dzZXI= IFdhbA== IENvc3Q= IHJlcG9ydGluZw== c3Rz cGV0 IHNhbmQ= IHN1ZGRlbmx5 IHN1cnByaXNpbmc= IFZS IHNvbWV3aGF0 IEJhcw== dWx0dXJl aXp6 IENE IGNoYWxsZW5nZXM= IHNldHRpbmdz IGV4cGVyaWVuY2Vz IEZ1bGw= IGNhbm4= IHJlY2VpdmluZw== RVNU IGpvaW50 IGN1bHR1cmFs IGFzdA== ODI= YXN0ZXJu Y2VpdmVk IENydQ== IGJ1bGw= cGlyZWQ= YW1t IGZhY2luZw== cG93ZXI= IGJvc3M= IEhvbA== IGluc3Ry IGluY3JlYXNpbmdseQ== IHNoaWZ0 IHN0cmVldHM= IFdpbGxpYW1z YWJi IGxpZQ== IGxhdWdo IENh UEw= IGFkdWx0cw== IGN1c3RvbWVy IG9idGFpbmVk IHN1cHBvcnRpbmc= aHRtbA== ZmlyZQ== IGRldGFpbGVk IHBpY2tlZA== IFJpZ2h0 bGRlcg== RUU= c3Rvb2Q= IEtpbQ== IHdpcmU= IHNpZ2h0 IGRldmVsb3BlcnM= IHBlcnNvbnM= IHNhZA== IGN1cA== IHdhcm5pbmc= IGJveXM= bG9uZw== IGJpcmQ= Zm8= IHdhbA== IG9ic2VydmVk IHpvbmU= aXZlbmVzcw== IGNoYW5uZWw= Y3JpcHQ= IHJlZnVzZWQ= IEFnYWlu IHN1Yw== IHNwb2tlc21hbg== IFJlZg== cml0ZQ== b3VzdG9u 44Oz IFNoZXI= IGFjdHM= IE5hbWU= IHN0cnVnZ2xl YXJyeQ== b21ldGltZXM= IGRpc2NyaW0= SFQ= IGNhdGVnb3J5 IHJlYWxpemU= IGVtcGxveWVl IEFmZ2hhbg== ZW5nZXI= IGd1bnM= IFN0ZXZl IE1vdA== IE9s b2tlZA== IHRoaWNr IGZhaXJseQ== aWxseQ== IHN1cnZl IE1hdA== d2VpZ2h0 4pQ= IHRyb29wcw== IGFnZW50cw== IGJhdHRlcnk= IG1vdGl2 w6E= U2Vj ZGVu b3Zlcnk= TFM= IGZsdQ== IGNvbmZpZGVudA== IE9wZXI= IGVtcHR5 IHBoZW4= IHNlY3Rvcg== IGV4Y2l0ZWQ= IHJlbW90ZQ== YXBo b2Vu IGRlc3Ryb3llZA== IG1vcmFs IEhQ IFJvbg== IGRyZXNz IEJhdA== IGxpdA== IE1T IGFm SEw= cnVt aXNtcw== IHNob3VsZG4= IHN5bXB0 IFRvcm9udG8= aGV0aWM= IGNhcmJvbg== IGluc3RhbGxlZA== IHZpb2xlbnQ= IHNvbGFy amE= IHByYWN0aWNlcw== IHJpZGU= IFBlbm4= IGltcHJvdmVk IGF1ZGlv IGJlaGF2aQ== IFBT IGVhdGluZw== RGF0YQ== IFJldmlldw== cGFzcw== Y2xhaW0= dWF0ZWQ= YW5nZXJz Y2hlbg== IHByb3BlcnRpZXM= IGFueXdoZXJl QW5vdGhlcg== IGJsb3c= IEphY2tzb24= IHByb3Vk IHBsYW5l bGluZXM= IHNxdWFyZQ== IHByb29m YW5zYXM= IHRhbGtlZA== bWFrZXJz IHNpc3Rlcg== IGhvbGRz IHJlc2lkZW50 ID09 IHJlc2lzdGFuY2U= IHNwbGl0 IHByb3NlY3V0 IGNvbmZpZGVuY2U= cmVzZW50cw== IGN1dHM= IGV4Y2VwdGlvbg== IHplcm8= R2V0dHk= IGNvcHlyaWdodA== IHRvdGFsbHk= b3JtYWw= aWZpY2F0aW9ucw== IEF1c3RyYWxpYW4= IHNpY2s= IDE1MA== IGhvdXNlaG9sZA== IGZlZXM= IGRyaXZlcnM= b2dlbg== IE5Z IG5lY2Vzc2FyaWx5 IHJlZ3VsYXRpb25z ZWFyaW5n c2w= IHBlcnNwZWN0aXZl Y2FyZQ== aWNpYWw= SGlz IGVzY2FwZQ== IHN1cnByaXNlZA== IFZhbg== dXJyZW50 IHZhYw== ODE= IFRodXM= IGVtcGhhcw== IENoYW1waW9ucw== IEljZQ== IG5hcnI= IGhlYWRz IGNhdXNpbmc= YmVs Zm9ydHVuYXRlbHk= IE1h IHRhcmdldHM= Y2lwbA== IGFmdGVybm9vbg== IGFkZHM= IE1heWJl IEZvdXI= ZXNzZWQ= cGxldGU= IHVzdWFs Y2hv aW5ndQ== IHdpdGhk IEVuZXJneQ== IEVjb25vbQ== T08= IGFydGljbGVz IGluanVyZWQ= IG1hbmFnZQ== IGV4cGxhaW5z IGRpYWdu UmVj YXR1cmVz IGxpbmtlZA== IGRpc2N1c3NlZA== IGV4cGxv IG9jY2FzaW9u YXRoYW4= IG9wcG9zaXRl IGZhY2Vz IGRlbmllZA== IEtuaWdodA== IG51dA== IGFwcHJveGltYXRlbHk= IGRpc2FwcG9pbnQ= b255bW91cw== IEJlc3Q= IExv IEh5 IEFmZg== IHZvdGluZw== YW53aGlsZQ== IElJSQ== IGluc3RpdHV0aW9ucw== YWdyYW0= IERhaWx5 IGRyYWc= IG5lYXJieQ== IGd1aWx0eQ== IGNvbnZlcg== UHJl c2hpcA== IHJld2FyZA== IHBoaWxvc29waA== IFNT dWdo IGFwcHM= ZnJpZW5k IHVwcGVy IGFkdmVydA== IHNub3c= IGZydXN0 IG91cnNlbHZlcw== RnI= IERpZQ== YW1waW9u IGRpc21pc3M= IGNlcmU= IHNpZ25hbA== ZnJvbQ== ICku IDUy IGNyaW1lcw== aXRvcnM= ZXN0aXZhbA== dXNldW0= IGNvdW5jaWw= IFNhdWQ= TWF5 IEd1bg== aWNpYW4= ZXRoZXI= IHN1ZmZpY2llbnQ= IEhlbg== c29sZQ== IGhpc3RvcmljYWw= IEZhcg== IFR1cm4= IHBpbg== IHN1Y2NlZWQ= bWF0 bHltcA== IHRyYWRpdGlvbg== IE9r IGNybw== IGRlc2NyaXB0aW9u YWxsZQ== IHNreQ== VGU= IHdpZGVseQ== IHdhdmU= IGRlZmluaXRpb24= IEpld3M= IGN5Y2xl IHJlZmVyZQ== IGJyaW5ncw== dXNhbA== IGFsaXZl IGZyZXF1ZW50bHk= IGludGVudGlvbg== IENvbnRyb2w= bHY= eXN0ZW0= IHByaXZhY3k= Z2VudA== cmVuY2U= IFF1ZXN0 IENocmlzdG1hcw== IHJhaWw= IGNvb3Blcg== IHRlc3RlZA== IENhcHQ= YXNrcw== IGNvbWZvcnRhYmxl IGRlbGl2ZXJlZA== c2NhcGU= IGRlcHRo IEdPUA== IHdyaXRlcw== IGFzc2V0cw== IHNhdg== aW1lbnRz IHRyYW5zaXRpb24= IGFydGlzdA== IExvb2s= IGxvYg== IGNvbXBvbmVudHM= YXJpdHk= IHdhbGtlZA== IHJvb3Q= IHBhcnRpY2lwYW50cw== IG5vdGljZWQ= IHJlc2M= IG5hdg== IEFkbWluaXN0 ZGE= dXRyYWw= cGxhdGU= IGltcG9ydGFuY2U= IGFzc2VydA== aW91c2x5 Y3JpcHRpb24= IGluanVyaWVz IENoZWNr IHJlZ2lzdGVyZWQ= IGludGVudA== IG1pc3NlZA== b2dyYXBoaWM= IHNlbnRlbmNl b3VudGVy IGFzc2lzdGFuY2U= ZXZpbg== IGRhdGFiYXNl IGJ1aWxkaW5ncw== IGNsYXNzaWM= IHRoaW5rcw== IE9oaW8= UHI= dWdn IGZlZQ== cGFu IGVmZmVjdGl2ZWx5 IGZhY2lsaXR5 IGJlYXI= IGNoYXB0ZXI= IGRvZ3M= IENvbHVtYg== IGxhdHRlcg== aXRpYWw= IGFkbWl0dGVk VFY= IEdlb3Jn IHBvc3Rz XFw= IGxhd3llcg== IGVxdWl2YWw= IG1hbmQ= IGNvbnRyb2xsZWQ= IFdhbGs= IEFuZHJldw== IG1lbnU= YW1lbnRhbA== IHByb3RlY3RlZA== dmE= IGFkbWluaXN0cg== b3JhbA== IHJlaW4= IFNhcg== IGFtb3VudHM= IG5hdGl2ZQ== IE1vb24= IHJlcHJlc2VudHM= IGFiYW5kb24= IGNhcnJ5aW5n IHRhbms= bWFyeQ== IGRlY2xhcmVk VHViZQ== IGhhdA== IHB1bmlzaA== ZWxsZWN0 bWVz IHVuaXZlcnNl IFJvZA== cGh5 IGluZnJhc3RydWN0dXJl IDUx IG9wcG9zZWQ= b3dudA== Y2E= IE1ha2U= IGhhcmR3YXJl IGNvZmZlZQ== UmVs YmFs d29ybGQ= IFNhZg== IFNlYQ== aW5hbHM= IG93bmVk IGhhbGw= ZXJzaW9u IGRlc2NyaWJl IFBvdA== IHBvcnRpb24= IGF0bW9zcA== IGdvdmVybm1lbnRz IGRlcGVuZGluZw== IG9mZmVuc2U= IHRyaWNr YXdh IExpbmU= IFZpcw== IEhhcmQ= IE9yaWc= IENsaWNr IGRlc2s= IFZhbGxleQ== IFNvdg== IG1vdmllcw== IHJlbWFyaw== IG1haWw= IGNvbnNjaW91cw== IHJ1bGluZw== IFJpZ2h0cw== IG1lZGlj aGVudA== IFdvbWVu Pjw= IHJlcGxhY2Vk IFByZW0= IFRoYW5rcw== IHJlbmV3 IEJhbGw= aWZvcm0= IHNob3Rz Q29tbQ== IGFybWVk IGNvbnN0YW50 IHRhc3Rl IHJlYWxpemVk IGJ1ZmY= IG1v IGVmZmljaWVudA== TW9zdA== b3JhdGlvbg== aWZpZXM= IGNvbW11bmljYXRpb24= IGZsb29k IGNvbnNlcXVlbmNlcw== IGFueXdheQ== aWdn IEdN IFRoYW5r IGlyb24= IGV2b2x1dGlvbg== IENvcA== dHdpdHRlcg== IDk1 IHJlbGF0aW9uc2hpcHM= YWRlbA== IFlvdW5n IHByb3Bvc2Fs YXllcnM= dWlsZGluZw== IEhvdA== T1JF Y29z IGNvbGxhYm9y UEc= YXh5 IGtub3dpbmc= IHN1cHBvcnRz b3dlZA== IGNvbnRyb2xz IG1lcmVseQ== dW1lcg== IGF0aGxldA== IGZhc2hpb24= cGF0aA== IGdpZnQ= IGVyYQ== QU5E IGtpbmRz IEtvcmVhbg== IGxlZ2l0 dWxvdXM= IGVzc2VudGlhbGx5 IHRoZXJhcA== bmlj IHN1ZmZlcmVk IGh1cg== IHByb21pc2U= IGV4Y2Vzcw== IG92ZXJ3 IHByaW1l IEhvdXN0b24= ZXJyeQ== IE1z UlM= MjAxMg== IHN0b3Jlcw== IE9seW1w IGpvdXJuZXk= QWx0aG91Z2g= U3Vi IEVkdWM= IENoYXB0ZXI= IHJlcXVlc3Rz IGNvbnN1bWVycw== IHRpbnk= IGlzb2w= IEZhaXI= YmE= IFlPVQ== IGNyYXNo Y2VsZXI= IGVtb3Rpb25hbA== IGdvb2Rz IGVsZWN0ZWQ= IG1vZGVy IExpbnV4 IGJsb2Nrcw== IGlzbGFuZA== IFNvY2lldHk= IGVsZWN0aW9ucw== IGJyb2FkY2FzdA== IGNoZWFw IG5hdGlvbnM= IHNlYXNvbnM= NDAw IHdhc3Rl IFNhdA== IGZpZWxkcw== ZW1wbG95 IHByb2ZpbGU= IGF1dGhvcnM= QUxM IEdyYQ== d2VzdA== IFR5 IGRlYXRocw== IHZhY2M= IGZvcm1lZA== IGR1 IG9uZ29pbmc= IE11c2xpbXM= ZWxm aWd1cmU= IGFzc3VtZQ== IFVrcmFpbmU= d2F0ZXI= IGNvYXN0 IHZvdGVk Z29y IEFT IE1pY2hpZ2Fu YXph IEFybQ== aXJv IGZsZXg= YXN0ZXJz Jyc= IHdlbGNvbWU= YXJs IGxvY2F0aW9ucw== aWdhdGlvbg== IEZpbA== IGJ1eWluZw== IGFyY2hpdGVjdA== IGhhcmRlcg== IEN1Yg== IGludGVyZmFjZQ== IHJlc3RhdXJhbnQ= IGRpc2NvdmVy IGV4Y2VlZA== IGZhdm91cg== Z2VyeQ== IGR1dHk= IHBpdGNo YWRvcg== IE1hY2g= Ym95 IHJlc3BvbmRlZA== IGV4dGVuZGVk aGVycw== TWFueQ== cmFpZA== aWZlcg== IElucw== U2Vy IG1lZGl1bQ== c2hl IFNwb3J0cw== IG1hZ2F6aW5l dXRhdGlvbg== IGxpbWl0cw== IEdhbGw= IGV4dGVybmFs cmF6aWw= IHlvdW5nZXI= dGxl IHJlbWluZA== IENPTg== IGltbWVkaWF0ZQ== IGhpZGRlbg== IHZvbHVudGU= IHNpbXBs b2RjYXN0 IHBoYXNl ZHI= IHBsb3Q= IGV4cG9zdXJl Ukk= b2dyYXA= dmlu YW5pc2g= IEFjYWQ= IEVuZ2luZQ== IGV4cGFuc2lvbg== IFBheQ== WW91cg== IHB1c2hlZA== IEVsbA== IEhlYWQ= IG1hcmtldGluZw== IEFD a2V0 IGhpdHM= IGdybw== IEFnZQ== IFNjb3Q= XVs= IHN0aW0= IGlQaG9uZQ== iJI= IG5hcnJvdw== IEdldHR5 IFR1cmtleQ== IHBlcmZlY3RseQ== IGVuYWJsZQ== dXRjaA== IHByZWNpc2U= IHJlZ2ltZQ== IHNoaWY= IGNvbXBlbnM= Z3Vu ZGl2 IGNob3Nlbg== IEtlbg== QW55 IHRyZWVz IHJlY29tbWVuZGVk IFJlbg== dWFibGU= IEhU Rm9sbG93 RUc= IEhhbmQ= IEtlbm4= IGFyZ3VtZW50cw== IGV4aXN0cw== IGJpa2U= IENvbnNlcnY= IGJyZWFraW5n IEdhcg== IGNyYXp5 IHZpcnR1YWw= YXlsb3I= aXhlbA== IDE5ODA= IHBlcm1pc3Npb24= IFNlcmllcw== IGNvbnN1bWVy IGNsb3NlbHk= Y2FsbGVk IDU0 IGhvcGVz IGFycmF5 IFdpbg== IExhYm91cg== IHNwb25z IElyZQ== IHBvdw== IHJlYWRlcnM= IGVtcGxveW1lbnQ= IGNyZWF0dXJl IHJlc3VsdGluZw== IGFjY3VyYXRl IG1vbWVudHM= IGFyZ3VlZA== IHBlZA== RHVyaW5n IDUz IFRhbA== IHNvdWdodA== IHN1ZmZlcmluZw== IGljb24= bGVl ICgk YWxpYW4= wrA= IHByYQ== IGJvbnVz KCI= a28= IGFjdGluZw== REU= ZmFsbA== IGNvbXBhcmlzb24= IHNtb290aA== IE5BUw== dXBw IEpvc2VwaA== ZXBpbmc= IFRha2U= IE1pZA== IHNlbmRpbmc= ZmFzdA== IEZhbGw= IGRlYWxpbmc= dXNlcg== IE9yZ2Fu Q28= IGF0dGFjaGVk IHNlZXM= JS4= IHR5cGljYWw= QVJU IGZpbmRz IEFzaWE= dW1pbg== IENvcmU= IEVudA== aW5lbnQ= dWNl IEJsb29k IE5ldmVy IGVtYWlscw== IGhpZ2hsaWdodA== IGNvbmZyb250 YXR1cw== dXRlZA== IHVudXM= IHRvcGlj IEFkYW0= IGJsZQ== YXRp IHVuZGVyc3Rvb2Q= U2V0 c3RydWN0 VFA= IG1vYg== YWE= IFN0YXJ0 cGVjdGVk c2VsbA== IGRlZGljYXRlZA== IENB dWFu IHNvbmdz ZXNjcmlwdGlvbg== IHRlY2g= IHJhcGU= IGFzaWRl IGdyYW50 IDU2 c3Vi IGFyZ3Vl IGNvbnRhaW5pbmc= IHNjaGVkdWxl IGxpYmVyYWw= IHB1YmxpY2x5 IGhlYXZpbHk= IFV0 aW5lcg== IFNlY3Rpb24= IENhcmU= d2VldA== bHM= RGlz 4pSA IEZvbGxvdw== QmFjaw== IElU IGJlcw== amk= IEhpdA== ZXN0ZWQ= IGV2ZXJ5Ym9keQ== IFN3ZWQ= IGZlbWlu IGZhY2lsaXRpZXM= IGNvbnZlbg== Q29tcA== IE9T Y29yZQ== IGFueA== IGRpdmlzaW9u IENhbQ== IFN0YW4= bWF0ZXM= IGV4cGxvcmU= cGxvbQ== IHNoYXJlcw== cGxvYWQ= YW5lcw== IGlkZWFs ZXRlcnM= IEJhc2U= IHBsYXN0aWM= IGRpc3RpbmN0 IE5ldHdvcms= IFNlYXR0bGU= IHRyYWRpbmc= ZW5zdXM= aW50ZW5k IGV4aGli IGluaXRpYWxseQ== IEZvb2Q= IHRob3VzYW5k IEJ1c2luZXNz YWN0ZXI= IHBhcmFncmFwaA== IHJvdWdobHk= IHd3dw== IGNyZWF0aXZl IENvbmY= IGNvbnN1bXB0aW9u IGZpbG1z YWdhbg== IG9idGFpbg== IHRhbGw= IHRvcg== IGFja25vd2xlZA== IGdyb3du YWxv S0U= IDQwMA== ZW5kZXJz dGFpbmluZw== VUc= IHN1aWNpZGU= IHdhdGNoZWQ= IExpc3Q= YWxp cmVoZW5z IHN1cnJvdW5kaW5n IHBpcA== IGZseWluZw== IEphdmE= b3JkYW4= IHNlcnZpbmc= aW5hdGlvbnM= cG9zdA== IHNobw== QXY= IGphaWw= enk= IDE5OTk= IDwv IGxpdGVyYWxseQ== IFNpcg== IGV4cG9zZWQ= IGxpZXM= c3Rhcg== IGJhdA== IGVhcm5lZA== IERpZw== IHNwZWNpZmllZA== IFNlYXNvbg== IGRlZ3JlZXM= RG9uYWxk IGNlbnRyZQ== IHNoYXJpbmc= IHdpbnRlcg== IENP Q2hl IM4= TVA= IHVudw== IGZld2Vy IE1pcg== IHNvbWV3aGVyZQ== IEtleQ== IGF0dGFja2Vk IEtpcg== IGRvbWFpbg== IHN0cm9uZ2Vy IDk5 IHBlbmFsdHk= SWQ= U2NyaXB0 IGRlY2xpbmVk IG5lY2s= IGZyYXVk IGN1cnJlbmN5 IHJpc2luZw== UkM= 4oCm4oCm SHo= IHRhYg== IHRhbGVudA== bmFt IE5CQQ== IHZpbGxhZ2U= IGxlZ3M= IE5leHQ= RWQ= IGFjaWQ= IGh5ZA== ODAw IGludm9sdmluZw== IEltYWdl IEJlZm9yZQ== Rmw= IHllc3RlcmRheQ== U291cmNl IHRlcnJvcmlzdA== IHN1cA== IHN5bnQ= IFNhdWRp IHdlc3Q= IHJ1 YnVyZw== IHZpc2libGU= IHN0cnVjaw== cmlzb24= IGF3ZXNvbWU= IGRyYXdu IGFuc3dlcnM= IEdpcmw= IFJhbQ== IHRocmVhdHM= IGRlZmVhdA== b3NpdA== IHZlbnQ= YXR1cmFsbHk= QW1lcmljYW4= ZW5kYQ== IEhvbHk= IHJ1bQ== JSw= Y2FzZQ== IEhpc3Rvcnk= IFlvdVR1YmU= IHNpdHVhdGlvbnM= IEROQQ== U3Rl IHNhdmVk SXRlbQ== IHJlY2lw b2xvZ2lzdA== IGZhY2Vk IGVsaWc= T25jZQ== IExp dWg= IG1pc3Rha2U= IERpdmlzaW9u IEJlbGw= IHN5bXB0b21z wq4= IGRvbWlu IGZhbGxpbmc= IGVuZGluZw== YXNoZXM= IG1hdGNoZXM= IE9ubGluZQ== IGV4cGxhbmF0aW9u RGVm cmVkaXQ= IGFueW1vcmU= IFRvdGFs IEZPUg== dXNoZWQ= IGxldHRlcnM= IHJpc2tz IE9L IHJlcG9ydGVkbHk= Olw= IHBsYXRl IHN1YmplY3Rz IGF0dGVtcHRlZA== aWZpZXI= aWFuYQ== IHVubGlrZWx5 IFRob3VnaA== dW1h IEludmVzdA== IFByaW4= aWNhbg== IERhcg== IENvbG9yYWRv YXVn IHZlZ2V0 YW9z cmlh IHNoZWw= IG1hcmtlZA== ICgp IHNwcg== cG8= IExpbms= IGRlZmU= IEpy IHRoZW1l IHBhc3Npb24= IFBlbg== IGluZm8= aXplcg== IHNoaXQ= IENpdmls YXBzZQ== Y3Jl IHBvbHk= IGNvbXBvbmVudA== IENoYXJsZXM= IElyZWxhbmQ= IFByb3Y= IGRvY3RvcnM= IGdyYW50ZWQ= IHBhaW50 IGhvbm9y IHNtb2tl IHBheW1lbnRz IHByaW1hcmlseQ== IEtpbmdkb20= cmljaA== YXRlbGw= IGRlYWxz IHNjaGVkdWxlZA== IGZ1bmRhbWVudGFs IHByb3RlaW4= IG5ld3NwYXBlcg== IGNsaWVudHM= eXRob24= IERhdGU= aHVz IGZlZWRiYWNr IHN0cmV0Y2g= IGNvY2s= IGhvdGVs IFF1ZWVu IHN1Z2Fy IGp1 IG1pbGs= IGFwcHJvdmFs IExpdmU= IGVxdWl2YWxlbnQ= ZWZ1bGx5 IGluc2VydA== em9uYQ== IGV4dGVuc2lvbg== ZHJp Sm9obg== IGFjY29tcA== U20= IEZ1bmQ= IGNvbnN0YW50bHk= IGBg IGdlbmVyYXRlZA== IEFjdGlvbg== IFBzeWNo IFRyaQ== IHJlY29nbml6ZQ== IHZhcnk= cGhh IFJh ZGY= ZXRjaA== IFNvdmlldA== VHdv IHBhdHRlcm5z IHByb2Zlc3Npb24= YW5pbmc= VGltZQ== IExpbQ== IGNvbG9ycw== IEF6 IFRS IGluZmVjdA== IHBoZW5vbWVu IHNoZWxs QWxzbw== IHB1dHM= IGRlbGl2ZXJ5 IGJyb3du IHByb2Nlc3Npbmc= IGxpZ2h0cw== ZXNzYWdl IEJyb29r IEF1ZA== bGF0aW9u IGluZHVzdHJpYWw= TGlrZQ== IEJyYXppbA== cm91cw== RVNT IEx1Yw== IHNvbWVob3c= IDg1 IHByb3BvcnQ= IHBvbGl0aWNpYW5z IGluZGljYXRl IGhvbGU= IHRlY2huaXF1ZXM= IGNvbXBldGl0aXZl IHBocg== IHZv aXN0ZW50 IERyZWFt IGNhbXB1cw== IGFzcGVjdHM= IGhlbHBmdWw= IHNoaWVsZA== b3JzZQ== IHRyaWdnZXI= bWFs IDU4 IHRvcnQ= IHBlcnNvbmFsbHk= IHRhZw== IGtlZXBz IFZpZGVv IGJlbmNo IGdhcA== YWlyZQ== IGVhc3Q= IHJlY292ZXJ5 cGVyaWFs IHByb2ZpdA== IE1pYw== IDU3 IGNvbG9u IHN0cm9uZ2x5 c3R5bGU= IGFsbGVnYXRpb25z aGFu IHJlcG9ydGVycw== am8= cmluZQ== YXJnZXQ= YW5kYWw= IDAz IGZsYXNo dHJhbnM= IHN0cmljdA== IHBhcmtpbmc= IFBha2lzdGFu IGxp IHdlaXJk IEVyaWM= IHJlZ2lvbnM= IEp1bg== IGludGVsbGVjdA== IFdI b2Rpbmc= cmlidXRlcw== dXBpZA== IFRpdA== IGZpbmdlcg== b3JpYQ== IGVsZXY= IEZpZWxk IGNvbmNsdXNpb24= Ozs= IGZlZWxpbmdz IGV4dGVuc2l2ZQ== IG1peGVk IG5ldXJv dnk= IGhhcmFzcw== IENpcmM= b3VjaA== IHRlcnJpdG9yeQ== IHN1Y2Nlc3NmdWxseQ== TWFy IGluZ3JlZA== IG92ZXJ3aGVs IGxheWVy Vmlldw== IGFsbGllcw== aWxsYW5jZQ== IFRocmVl IGJ1bmNo IG5vcm1hbGx5 IG5ldHdvcmtz IHNhY3I= IENJQQ== Ymxlcw== IGNob3Nl IG9wcG9uZW50cw== IHJlZ2FyZGxlc3M= IGZyYW5jaA== IHByZWY= IFBv IGJyaWRnZQ== YW5uYQ== IFNpbHZlcg== IHdhZ2U= cGFnZQ== cmlvcg== IHJhZGljYWw= IExpdHRsZQ== IG1hbmlw IHNlY3JldGFyeQ== IGdhbmc= RFI= RkE= IGRlY2VudA== IFNwaXJpdA== IHVuY2xl IERldmVsb3BtZW50 IGludmVzdG9ycw== IHdhbGxz IHB1Ymxpc2g= IGdlbmVyYXRl aXNzaW9ucw== Y2Fy IHByb21vdGU= IGN1dHRpbmc= IGNoZXN0 IGRyaW5raW5n IGNvbGxlY3RlZA== IDcy IGhvcGluZw== IGVtYnI= Z29yaXRo IHdhcm5lZA== IGluc3RydWN0aW9ucw== T0c= IERpZA== IEFnZW5jeQ== IGdlYXI= IGNyaXRpY2lzbQ== IEZ1cnRoZXI= IHV0aWw= YW5ueQ== UmVk IGNvdW5zZWw= IEFzaWFu IHJlZHVjdGlvbg== cG9vbA== IHRlYWNoaW5n IGRlZXBseQ== aXk= IGVzdGltYXRlcw== IGNob2ljZXM= IHBlcm1hbmVudA== aW5lbQ== a2Vs IGZhc2M= cHNl ZmlsZQ== IExvdw== IFBlcnNvbg== IHRvdXJuYW1lbnQ= c3RhbA== IG1lbA== VVNU IFJheQ== YXpp VmFs IGNvbnRhaW5lZA== IEhvbGx5 IHdha2U= IHJldmVhbA== IHByb2Nlc3Nlcw== IElTSVM= IDA5 IGJsaW5k IHN0ZWVs IEJhZA== IGNhcmVmdWxseQ== YXBweQ== cm9pdA== IGdhbWluZw== IGhvdXNlcw== IENvbGw= IHRydWNr ZXJt IHNjb3JlZA== IG9jY2Fz cmV0dXJu Ym91bmQ= dmFy IHNoYXJw IGFmcmFpZA== IEVY YW1iZXI= Y2lmaWM= IHNjaGVtZQ== TkM= IFBvbGl0 IGRlY2xpbmU= IDE5OTg= IHB1c2hpbmc= IHBvc3Nlc3Npb24= IHByaXZpbGU= IHRlYWNoZXJz IHlpZWxk SEE= IERhdmlz aXRsZWQ= IyMjIyMjIyM= IHJpZw== IERhbmllbA== YWNvbg== IGhpZGU= dXRlbg== IGNvbGxlYWd1ZXM= IHByaW5jaXBsZXM= IGxvdWQ= IHNpbg== IERlbW9u IHN0b25l IDAy IHRhdWdodA== IHRlcnJpYmxl IHN0dWNr IFBvbGljeQ== dGVlbg== IGltcGxlbWVudGF0aW9u IEJCQw== IEFQSQ== IHdoZWVs YWxsYXM= IGNoYW1waW9ucw== b2xhcnM= cGxheWVy IHJlcGVhdGVkbHk= IFN0aWxs IGxpa2Vz YXN0eQ== ZXN0ZXI= IENhdGhvbGlj Ukw= IGJhdGg= IG5vaXNl dGl0bGU= IG5vcnRoZXJu UGFydA== IG1hZ24= IGZhYg== IEFzaA== IGRpc3Bs IHRpY2tldA== IG11cmQ= IGFsb25nc2lkZQ== IE11c2lj IHJpdmVy IFN0ZWVs IENM IFBsYXllcg== IE11bHQ= b3dpbmc= cmVw c2l6ZQ== IHR1cg== IEdlb3JnaWE= aXNjYWw= cmFjdGlvbg== IGNhYmxl IDU5 IHdpbnM= IHVwY29taW5n IHN1cnZpdmU= IGluc3BpcmVk IEVkdWNhdGlvbg== IHN0YXRpc3RpY3M= IEZvb3Q= aWFtaQ== IHllbGxvdw== IFBhZ2U= Li0= IEhhcw== IHVyYmFu IGF4 ZXNzZWw= XCI= IHF1YXJ0ZXJiYWNr IHJlZ2lzdGVy IExhYm9y IGFiaWxpdGllcw== IEZhbWlseQ== IHZhcmlhYmxl IFByaWNl IGNvbnRlbQ== IHRoaW4= IEVxdQ== ZGF0YQ== IGdvdHRlbg== IGNvbnN0aXQ= IGFza3M= IHRhaWw= IGV4Y2l0aW5n IEVmZmVjdA== IFNwYW5pc2g= IGVuY291cmFnZQ== aW5zb24= IEFo IGNvbW1pdG1lbnQ= Q1M= IHJhbGx5 IDo6 IHN1YnNpZA== IHNwaW4= IGNhcHR1cmVk MjAxOA== IGlubm9j IGFsbGVnZWRseQ== IENvbWU= IGFydGlzdHM= IE51bWJlcg== IGVsZWN0cm9uaWM= IHJlZ2lvbmFs YXBlcw== IHdyYQ== IG15dGg= cHJpc2U= IE1pbGxlcg== IENyZWF0 IEVwaXNvZGU= YmVsbA== IGRpcmVjdGVk IGV4dHJhY3Q= IHNvcnJ5 IHZpY2U= YWdnZXI= IFN1cHBvcnQ= IDY2 IElyb24= IHdvbmRlcmZ1bA== IGdyYQ== TmV0 aW9uZQ== RW5n IHNoaXBz aWtlcw== IEtldmlu aXRhcg== IGFjdGl2aXN0cw== dHJ1ZQ== IEFyaXpvbmE= ZW50aA== IERlc3BpdGU= IFNF IGhhYml0 ZXJuZWw= IGlucXU= IGFib3J0aW9u IHZvaWQ= IGV4cGxpY2l0 IGVuZ2FnZWQ= IGFuZ3J5 IHJhdGluZw== IGZyYWc= YnJv aWNraW5n ZGV2 IHdvcnJpZWQ= IG9ic2Vy IGFwYXJ0bWVudA== IEdU IGVzdGF0ZQ== IENvbnN0aXR1dGlvbg== ZW1vbg== IFNub3c= IGNvdW50eQ== IGRpc2Fn IFN0ZXBoZW4= IGltbWlncmFudHM= d2luZA== IE5hdGlvbnM= IGZvbGtz T3V0 IGdhbGw= IHRhcmdldGVk IHN0ZWFk IEJvbg== IExpYg== IGluZm9ybWVk IDEyMA== Y2hhaW4= aWRlbGluZXM= b3JvdWdo IGRyaXZlbg== IHJlZ3VsYXJseQ== IGJhc2tldA== IHByaW5jaXBsZQ== b2N1bWVudA== IHN0dW4= aWJpbGl0aWVz IFJvbWFu IEFib3V0 IGFsZXJ0 IGRlbW9jcmFjeQ== IHJlcHJlc2VudGVk SFM= Y2Vycw== cGFyZW50 QXJ0 cGFjaw== IGRpcGxvbQ== cmV0cw== IE5P IGNhcHR1cmU= IEFkdg== hKI= IGFubm91bmNlbWVudA== IExlYXI= IGhvb2s= IHB1cnM= IFN1Y2g= IENhbWVy IHJlZnVnZWVz IFZl UG9s IHJlY29nbml6ZWQ= bGli IGhhZG4= QXNz IHBpbG90 dXNoaW5n IHJldHVybmluZw== IHRyYWls IFN0b25l IHJvdXRpbmU= IGNvdXJ0cw== IGRlc3Blcg== IGZyaWVuZGx5 IEl0YWx5 IHBsZWQ= IGJyZWF0aA== IHN0dWRpbw== TlM= IGltcHJlc3NpdmU= IEFmZ2hhbmlzdGFu IGZpbmc= IGRvd250 aW5raW5n IFJvZw== aWFyeQ== Y29sb3I= c2V4 YXJvbg== IGZhdWx0 IE5pY2s= RG93bg== IFJvc2U= IFNvdXRoZXJu WFg= aXNvZGVz TGlzdA== NjAw IG91dGNvbWU= ZXJy IGVsc2V3aGVyZQ== IHJldGlyZQ== IHBvdW5kcw== IEdsb2JhbA== UGVvcGxl IGNvbW11bmljYXRpb25z IGxvYW4= IHJhdGlv IEVtcGlyZQ== IGdvbm5h IGludmVudA== REY= IDE5NzA= IENvbW1vbg== cGF0 IHByb21pc2Vk IGRpbm5lcg== IEhvbQ== IGNyZWF0ZXM= IG9wZXJhdGU= dmVydHk= IEpvcmRhbg== ZXRpbWU= IHN1c3RhaW4= UmVn IGluY3JlZGlibGU= aW1h IHdhcnJhbnQ= IG1t QXR0 IGxhd3N1aXQ= IHJldmlld3M= aXR1cmU= IFNvdXJjZQ== bGlnaHRz IEZvcmQ= IDYz Z3JvdXA= c3RvcmU= IGZlYXR1cmVk IGZvcmV2ZXI= IHBvdmVydHk= IFBvcA== IENOTg== YXp6 YWJpcw== YWNoaW5n IGxhaWQ= IFN1cHA= IGZpbHRlcg== ZW5h IENvbW11bml0eQ== IGNyZWF0dXJlcw== dWN0aW9u IFJveWFs IGFzc29jaWF0aW9u IENvbm5lY3Q= IEJyYWQ= 4paI bGVycw== dGhlcmU= IEdp IHZhbHVhYmxl QUNL IFRheWxvcg== IGxpcXVpZA== IEF0dG9ybmV5 IENhcmw= IEZpbmFs YWdh IFdpbHNvbg== QmVjYXVzZQ== IFByb2Zlc3Nvcg== YWth IGluY3JlZGlibHk= cmFuY2U= ISk= UmVm c2s= IHNvbHV0aW9ucw== IGF0bW9zcGhlcmU= IGJsYW1l dW1lcw== IE5vYg== Q0E= dW1wcw== cmljYWw= IFB1dGlu IERlc3Q= b3JpYw== IFBB IHJlc3BlY3RpdmVseQ== d2Fu IGZpZnRo 4oSi IENyeQ== IGdvdmVybm9y cmVzaWRlbnQ= IHB1cmNoYXNlZA== IGhhY2s= IGludGVuc2U= b2Jz IG9yaWdpbg== IGRlZmluZQ== IGNhcmVmdWw= Kioq IHNob3VsZGVy Q2xpY2s= IHRpZWQ= IGRlc3RydWN0aW9u b3VyZWQ= IG5vYm9keQ== IGhv IEV4cGVy IHRpcA== Ijs= IHRlY2huaXF1ZQ== IGp1cg== IFBvaw== Ym93 IGxlZ2VuZA== IGFjY29yZA== IGJ1c3k= IEludGVs IGhhbmc= YWtp Ll0= 4oCU4oCU4oCU4oCU IHN1cmdlcnk= IHJlcHJvZHU= IHVuaWZvcm0= IHNjZW5lcw== Y29kZQ== IDYy bGlzaGVy IEhhdmU= cGhpYQ== IGNyeXB0 IHJlY29u IHNjcmVhbQ== IGFkb3B0ZWQ= IHNjb3Jlcw== TmU= IEl0YWxpYW4= aW5jbHVkaW5n Qk8= IGluZGljYXRlZA== IGVudGVydGFpbg== R3U= VGV4dA== aWVs IHR3ZW50eQ== IGVuZ2FnZQ== b2Zmcw== IFBhY2lmaWM= IHNtaWxl IHBlcnNvbm5lbA== IHRvbGVy IGRvb3Jz IHRvbmU= IG1hY2hpbmVz IGVudGVyaW5n dGVuYW5jZQ== Q08= IEplcnNleQ== IGZvcmVzdA== IGhvcnNl IGNvbXBsYWludA== IFNwcmluZw== eW8= IFBsdXM= ZWRpbmc= IFJldHVybg== cXVhcnRlcnM= aWFscw== Y293 IGFjYWRlbWlj IGZydWl0 IDE5OTY= b2dldGhlcg== IHdpbmU= IHB1cnN1 IFN0ZXZlbg== IGxpY2Vucw== V2hv IGNsb3RoZXM= cmVjdGlvbg== IHNxdWFk IHN0YWJsZQ== IHJhdw== emVucw== U3Rhcg== dXRpZXM= YW5jZXI= IGtleXM= IE11 IGNvbXBsaWNhdGVk aWdlcg== IFRleHQ= IGFic29y IDY4 IGZ1bm55 IHJlbGllZg== IExldw== IENvb2s= IGNoYXJ0 IGRyYXdpbmc= R0U= IG1vZHVsZQ== IEJ1bGw= SUxM IHNhbHQ= MDAwMDAwMDA= aWxsZQ== IHJlc291cmNl YXdheQ== YWRlbHBoaWE= IEJydQ== IDY3 IHNvbWVib2R5 IHBhcnRpY2lwYXRl IHJvc2U= d2VyZWQ= IG11c2NsZQ== IGNvbnNlbnQ= IGNvbnRpbnVpbmc= IEd1YXJkaWFu IE9yZGVy cmVnb24= IHJlYXI= IHByb3Zpc2lvbg== IGxpa2Vk cmllbnQ= IGJyYQ== VHJhbnM= IG1lZXRpbmdz IHRveA== IGNvbnZlbnQ= IGF1dG8= IHJlY29yZGluZw== IFNvZnQ= MDAx IFJvbGw= IHByb2dyYW1taW5n IHBpYw== IHByb3ZlZA== IHN0YWI= IEFzdA== IGNhcHRpb24= dWxhdGluZw== IEF0dGFjaw== IG5ld2x5 IDE5OTc= ZnI= IGRpc2NpcGw= IEdyZWVr IGVkaXRpb24= IERvZXM= IEJveA== aWZsZQ== YWNrZXQ= IHBhc3Nlcw== IGd1ZXN0 IGFjY2VsZXI= aXRhbHM= VUQ= IGF1dGhlbnQ= IFJlc3Q= b3ZhbA== dGE= dWluZQ== IGFybW9y IFRvd24= IGNvbXBhdA== IGluY2hlcw== RGVzcGl0ZQ== IGFzc2lnbg== aGVyZW50 IHByZXBhcmU= IE1lZw== b2NrZXk= IGRlcGVuZHM= IHRyYWNrcw== d2F0Y2g= IGxpc3Rz IE5vcnRoZXJu IGFsdGVy cmVj IEVhc3Rlcm4= IGNvbmRlbQ== IGV2ZXJ5d2hlcmU= Pyc= IGFmZmlsaQ== IGZvdWdodA== Ijp7Ig== IG1hYw== aXRhcmlhbg== IHNjb3Bl IEFM YXdz YXJtcw== IHF1ZQ== IGVuam95ZWQ= bmVzb3Rh IGFnZ3Jlc3NpdmU= IFN0b3J5 IElW IHJlY2lwZQ== IHJhcmVseQ== IE1lZGljYWw= dmFsdWU= YW5nZWw= YXlpbmc= b21ldGhpbmc= IHN1YnNlY3Rpb24= IHNvdXRoZXJu IGZyZXF1ZW5jeQ== cmV0ZQ== cm9sbGVk dWx0cw== IE5pYw== IGJlaGFsZg== IHNlcXVlbmNl YWJldA== IGNvbnRyb3ZlcnNpYWw= IGNvbXByb20= IHdvcmtlcg== IG1haW5seQ== IGFsZ29yaXRo IE1ham9y b3JjZQ== Z2VuZGVy IG9yZ2FuaXplZA== IGZha2U= IGNvbmNsdWRlZA== IEVE IEV4ZWM= cmFnZQ== IGNoYW5jZXM= YmVycnk= IFRyYWQ= IGNvbmZpZ3VyYXRpb24= IHdpdGhkcmF3 IGZybw== dWRlcw== IEJyb3RoZXI= IEJyaWFu IHRyaWVz IHNhbXBsZXM= IGJpZA== IEdvbGRlbg== IHBob3RvZ3JhcGg= aWZlc3Q= IERP IFBhcmxpYW1lbnQ= KioqKioqKioqKioqKioqKg== UmVt IGNvbnRlc3Q= IHNpZ25pbmc= cHg= IFplYWw= 4pSA4pSA RWFy IGV4aXQ= QmVmb3Jl IENvcnBvcg== bnVsbA== bW9udGg= IHJhY2lhbA== b3R0ZWQ= IFZlZw== IFJldXRlcnM= IHN3b3Jk cHNvbg== IFJvbW5leQ== YWVk IHRyaWI= IGlubmVy IHByb3RvY29s IEJp IE1pYW1p ZXZlcmFs cHJlc3M= IHNoaXBwaW5n IEFtZW5kbWVudA== IEhvd2FyZA== Y29ubmVjdA== IERpc2M= IEphYw== aWFtb25k IFRoZXJlZm9yZQ== c2Vz IFByaW5jZXNz IFVTQg== IEFudGg= IHN1cnZlaWxsYW5jZQ== IGFwb2xvZw== IDYx b3dh IGZ1bGY= anM= IGx1Y2s= dXN0ZWQ= IMKn bmk= IGFudGljaXA= ZW1hbg== IHdpbm5lcg== IHNpbHZlcg== bGxh aWNpdHk= IHVudXN1YWw= IGNyYWNr IHRpZXM= ZXo= IHByYWN0aWNhbA== IHByb3ZpbmNl IFBsYWNl IHByaW9yaXR5 SUNF IGRlc2NyaWJlcw== IGJyYW5jaA== Rm9ybQ== YXNrYQ== bWlzc2lvbnM= Ymk= IHBvcm4= IFR1cms= IGVudGh1cw== IGZpZ2h0ZXJz IDA4 IERldHJvaXQ= IGZvdW5kYXRpb24= YXZpZA== QXJl IGp1ZGdtZW50 Y2xpbmc= IHNvbHZl IERlc2lnbg== V2hlcmU= aGVzaXM= IFRybw== YWZ0ZXI= IG5ldXRyYWw= IFBhbGVzdGluaWFu IEhvbGx5d29vZA== IGFkdmlz IE5vbg== eWVz b2xpcw== IHJlcHV0YXRpb24= IHNtZWxs IGJyZWFk IEJ1bA== IEJlYWNo IGNsYWltaW5n IGdlbmV0aWM= IHRlY2hub2xvZ2llcw== IHVwZ3JhZGU= cm93cw== IGRldmVsb3Blcg== IEpvc2g= IERpc25leQ== ZXJ2ZWQ= aXBhbA== IHVuZXg= IGJhcmVseQ== dGhlbg== IFB1Yg== IGlsbG5lc3M= ZXRhcnk= IEJhbA== IHBhdGNo IGJ1dHQ= IHN0dXBpZA== IERvZw== IERhbGxhcw== ZnJvbnQ= aWVjZQ== IHByb3Rlc3Rz IGNoYXQ= b2VuaXg= IHdpbmc= IHBhcmxpYW1lbnQ= IDc3 b3NleHVhbA== IHJlbmRlcg== cHRpb25z IENvYXN0 b3Nh IEdyZWc= aG9w IE1hbmFnZW1lbnQ= IGJpdGNvaW4= IHJlY292ZXI= IGluY29ycG9y b3JuZQ== IFVzaW5n IHByZWNlZA== IHRocmVhdGVuZWQ= IHNwaXJpdHVhbA== IEV2ZW50 IEZyZWQ= IGFkdmVydGlzaW5n IGltcHJvdmVtZW50cw== IEN1c3RvbQ== IGVycm9ycw== IHNlbnNpdGl2ZQ== IE5hdnk= IGNyZWFt TG9vaw== IGV4Y2x1c2l2ZQ== IGNvbXByZWhlbnM= IGRlbGVn IGNvbmNl IHJlbWVt IHN0cnVjdHVyZXM= IHN0b3JlZA== TkQ= IDEwMDA= VVA= IEJ1ZGQ= QUY= d29tYW4= IEFjYWRlbXk= 8J8= c2Vh IHRlbXBvcmFyeQ== QWJvdXQ= ZXN0ZXJz IHRpY2tldHM= IHBvc3Nlc3M= aW5jaA== b3o= IGxh IGNvbnRyYWN0cw== IHVucA== IGNpZw== IEthdA== dWx0dXJhbA== YXNt IG1vdW50YWlu IENhcHRhaW4= U3RlcA== bWFraW5n IFNwYWlu IGVxdWFsbHk= IGxhbmRz YXRlcnM= IHJlamVjdGVk ZXJh aW1t cml4 Q0Q= IHRyYW5zYWN0aW9u Z2VuZXI= bGVzc2x5 IHx8 IGNvcw== IEhlbnJ5 IHByb3Zpc2lvbnM= IGdhaW5lZA== IGRpcmVjdG9yeQ== IHJhaXNpbmc= IFNlcA== b2xlbg== b25kZXI= IGNvbnNvbGU= aW5zdA== IGJvbQ== IHVuY2VydGFpbg== MTUw b2NraW5n IG1lYXN1cmVk IHBsYWlu IHNlYXRz IGRpY3Q= U0w= YWZl IGVzdGltYXRl aXpvbg== YXRoZXJlZA== IGNvbnRyaWJ1dGVk IGVwaXNvZGVz b21tb2Q= R3I= QU5U IDY5 R2VuZXI= IDI1MA== dmlvdXNseQ== cm9nZW4= IHRlcnJvcmlzbQ== IG1vdmVtZW50cw== ZW50bGU= b3VuY2U= IFNvdWw= IHByZXY= IFRhYmxl YWN0cw== cmlvcnM= dGFi IHN1ZmZlcg== IG5lcnY= IG1haW5zdHJlYW0= IFdvbGY= IGZyYW5jaGlzZQ== YmF0 IGRlbWFuZHM= IGFnZW5kYQ== IGRvemVu IGNsaW5pY2Fs aXphcmQ= IE9w dGQ= IHZpc2l0ZWQ= IFBlcmhhcHM= IGFjdG9y IGRlbGlj IGNvbnRyaWJ1dGU= IGluamVjdA== IEVz YWNjbw== IGxpc3RlbmluZw== IGNvbmdyZXNz ZXBlbmRlbnQ= IHByZW1pdW0= IDc2 IElyaXNo IGFzc2lnbmVk IFBoeXM= IHdvcmxkd2lkZQ== IG5hcnJhdGl2ZQ== b3R5cGU= bW9udA== YmFzZQ== IEJvd2w= IEFkbWluaXN0cmF0aW9u IHJlbGF0aW9u IEVW Q1A= IGNvdmVycw== IDc4 IGNlcnRpZmlj IGdyYXNz IDA0 cGlyYWN5 aXJh IGVuZ2luZWVyaW5n IE1hcnM= IHVuZW1wbG95 IEZvcmVpZ24= c3RyYWN0 IHZlbg== IHN0ZWFs IHJlcGxpZWQ= IHVsdGltYXRl IHRpdGxlcw== ZGF0ZWQ= IGpveQ== YXVz IGh5cGVy YWt1 IG9mZmljaWFsbHk= IFByb2R1Y3Q= IGRpZmZpY3VsdHk= cGVyb3I= IHJlc3VsdGVk cmliZWQ= bGluaw== d2hv fn5+fg== IFNwZWVk IFZpZXQ= V2luZA== IEJhcmFjaw== IHJlc3RyaWN0aW9ucw== IFNoYXJl IDE5OTU= aXRpb25hbGx5 IGJlYXV0eQ== b3B0 IG1hcHM= IENS IE5hdGlvbg== IENydXo= V2lsbA== IGVsZWN0cmljaXR5 IG9yZw== IGJ1cmQ= IHZpb2xhdGlvbg== IHVzYWdl IHBlcm1pdA== IENocm9u IEZhbnQ= IG5hdHVyYWxseQ== IDA3 IHRocm93bg== IEF3b2tlbg== IGFsaWVu IEhlcm8= IEtlbnQ= IFJpY2s= cmlrZQ== IHBhY2U= fSx7Ig== R0w= IHBvaXNvbg== IFRvd2Vy IGZvcm1hbA== YWx5c2lz IGdlbnVpbmU= IGtpbA== YXZlcg== IHByb2NlZHVyZQ== IFByb3A= aW50ZW5kbw== IE1haW4= YXNhbnQ= IHRyYWluZWQ= R2FtZQ== IExvYWQ= IE1B IGNydWNpYWw= IGxldHM= IEZS IGNoYW1waW9u MTAx IENvbmZlcmVuY2U= IHdyaXRlcnM= IGNvbm5lY3Rpb25z IG9rYXk= aXJtcw== IFJhbmQ= IGVuY291bnRlcg== IEJ1ZmY= IGFjaGlldmVk IGNoZWNrcw== aXNjb25z IGFzc2lzdGFudA== IHdoZW5ldmVy IEFjY2Vzcw== IFVy Ymlu IGNsb2Nr aXNw b3BoZXI= IGJvcnJvdw== IG1hZA== IHBlcnNvbmFsaXR5 b25seQ== SVNU YWJhbWE= IGdhaW5z IGNvbW1vbmx5 IHRlcnI= IGh5cG90 IHJlbHk= IHRpc3M= aXNjb25zaW4= IHJpZGlj ZnVuY3Rpb24= IE9yZWdvbg== IHVuY29t cmF0aW5n ZWxhbmQ= IE5D IG1vb24= YW5ub24= IHZ1bG5lcmFibGU= dXRpdmU= wqDCoMKgwqA= IFJhZGlv IHdlc3Rlcm4= c2VjdA== IFRvbnk= IG9jY3Vycw== IE9z IEhvbg== w60= IHZlc3NlbA== IFNjb3RsYW5k IGRpc2NyaW1pbmF0aW9u IHN1YnNlcXVlbnQ= c3RyaW5n IGZhbnRhc3k= IFNoYWRvdw== IHRlc3RpbQ== V0U= aXRp cmFz IGJvYXQ= IG1hcmtz IG9yZGluYXJ5 IHJlbg== IHJlcHJlc2VudGF0aXZl IHBldGl0aW9u IDcz IGFkdmVudHVyZQ== IGlnbm9yZQ== IFBoaWxhZGVscGhpYQ== IFNhdg== VlA= IGZhY3Rvcnk= IHRhc2tz IGRlcHJlc3Npb24= emVk Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= IFN0b3Jt IGNvZ24= IGVsaWdpYmxl IHJlZHVjaW5n dmlh IDA1 IHN0cmlraW5n IGRvbGxhcg== aG8= T1Y= IGluc3RydW1lbnQ= IHBoaWxvc29waHk= IE1vb3Jl IEF2ZW51ZQ== IHJ1bGVk IEZyb250 SU5F IE1haA== IHNjZW5hcmlv IE5BU0E= IGVub3Jt IGRlYnV0 IHRlYQ== VG9kYXk= IGFic2VuY2U= U2lt IGhhbQ== bGVlcA== IHRhYmxlcw== IEhlYXJ0 TUk= S2U= cmVxdQ== VkQ= bWFw IGNoYWlybWFu IHB1bXA= IHJhcGlkbHk= dmk= IHN1YnN0YW50aWFs RVA= ZGVz Y2hhbnQ= aWxpcHA= IFNhbnRh cmllcnM= YW5jaGVzdGVy TG9hZA== IENhc2U= IHNhdmluZw== IDc0 IEFGUA== ZXJuaW5n b3VuY2Vk IE1pbm5lc290YQ== IFdhcw== IHJlY3J1 IGFzc2Vzc21lbnQ= IEJyb24= VUU= IGR5bmFtaWM= IGZ1cm4= dWxhdG9y IHByb3BhZw== aGlnaA== IGFjY29tbW9k IHN0YWNr IFN1cw== d3JpdA== IHJldmVu IEdvZGQ= IFplYWxhbmQ= YWJz IGJydXQ= IHBlcnBldA== aG90 IGhhcmRseQ== IEJ1cm4= 44K5 IHN0eQ== IHRyYW5zYWN0aW9ucw== IGdhdGU= IHNjcmVlbnM= IHN1Ym1pdHRlZA== IDEwMQ== IGxhbmd1YWdlcw== dWdodA== ZW1lbg== IGZhbGxz IGNvYw== gqw= IHN0cmlrZXM= cGE= IGRlbGliZXI= IElN IHJlbGF4 YW5uZWxz IFNlbmF0b3I= IGV4dHJlbQ== IH0s IERlYg== IGJlbGw= IGRpc29yZGVy Y3V0 IGlPUw== IGxvY2tlZA== IGVtaXNzaW9ucw== IHNob3J0bHk= Il0= IEp1ZGdl IFNvbWV0aW1lcw== IHJpdmFs IGR1c3Q= IHJlYWNoaW5n RmlsZQ== wq/Cr8Kvwq8= aW5vaXM= IEphc29u IHNhdGVsbA== YXJldA== IHN0YXRpb25z IGFncmlj IFRlY2hub2xvZ3k= Y29tZXM= IFVuZm9ydHVuYXRlbHk= IENoaWxkcmVu IGFwcGxpZXM= YXN0ZWQ= IGFuZ2Vy YWlsYWJpbGl0eQ== IERhbWFnZQ== IGNvbXBhcmU= IFN0YW5kYXJk IGFpbWVk IEJh YW5ndWFnZQ== IHJlZ3VsYXRpb24= IGp1cnk= IGFpcnBvcnQ= IHNlY3Rpb25z IFByaW5jZQ== ZW1lZA== IG1lZGljaW5l IGhpdHRpbmc= IHNwYXJr b2x2ZXM= IGFkcw== U3RhdGU= IGZvb2Rz IHJlcGxhY2VtZW50 IGNoaWNrZW4= IGxvd2VzdA== IG1pbmRz IGludm9sdmVz dWk= IGFycmFuZw== IHByb2NlZHVyZXM= IFdoaWNo aXZlcnNhcnk= IGJpbGxz IGltcHJvdmVtZW50 IGluZXY= IGV4cGVjdGF0aW9ucw== IGludGVsbGVjdHVhbA== IHNwYWNlcw== IG1lY2hhbmlzbQ== MjUw YnJlYWs= IFpl IFRlbm4= IEJhbHQ= IGJhcnJlbA== IHN0YXRpYw== bWFubg== UG9saWNl IHRpcHM= IGhhbmRsaW5n Y3Vz b2RlZA== aWx0b24= aXJ5 IGpvdXJuYWxpc3Rz b3Vyc2U= IGNvbWlj IG5vbWluZQ== SVRZ IHZlcnN1cw== IGxvb3A= IHN1cmY= IEluZHVzdA== IEh1bnRlcg== IGJlbGllZnM= aXNhbg== IHNldHVw IGJyZXc= aW1hZ2U= IGNvbXB1dGVycw== Zm9s fSwi IE1lZGFs IHRheHA= IGRpc3BsYXllZA== IGdyYXY= IGZpc2NhbA== TW9u IE1vc2Nvdw== IEtvbmc= IENlbnRyZQ== IGNhbWVyYXM= IE1ycw== IEhheQ== IGF2ZXI= IEtlbGx5 cHk= IHJlcXVpcmVtZW50 IGVudGl0bGVk b21iaWU= IHNoYWRvdw== YWdpYw== IEFr IGVsaXRl IGRpdmlkZWQ= IGhlYWRpbmc= IGNvcGllcw== IGxvc3Nlcw== IHZpdA== a2Vk IEJyeQ== IGFucw== IFN0ZWFt IHJlcG9ydGVy aGVpbQ== IEl0ZW0= IHN1cGVyaW9y ZG9u ZXJlbnQ= w7Y= IHRoZXJhcHk= IHBlYWs= IE1vZGVs IGx5aW5n IGdhbQ== emVy cml0dGVu IHJlc3BvbnNlcw== IGNvbnNpZGVyYXRpb24= IEJpYmxl IGxveWFs IGluc3RhbnQ= IHBt IEZvcmVzdA== w7w= IGV4dGVuZA== IGNvbnZpY3RlZA== IGZvdW5kZXI= IGNvbnZpbg== IE9haw== Y2hlY2s= IHNjaG9sYXJz cGVk IG92ZXJzZQ== VG9w Y291bnQ= IEFyaw== wrc= IDA2 IExB bWQ= IExhdGlu aW1lbnRhbA== IENQVQ== IHN1YnN0YW5jZQ== IG1pbm9yaXR5 IG1hbnVmYWN0dXJpbmc= RXI= b2NvbGF0ZQ== IGF0dGVuZGVk IE1hbmFnZXI= cmF0aW9ucw== IGFwcHJlY2lhdGU= b215 R0JU aWRlbmN5 Qkw= IGd1YXJhbnRlZQ== cG9zaXRpb24= IG9jZWFu Y2x1ZGU= IGhlYWRlZA== IHRhcGU= IGxvb3Nl IGxvZ2lj IHByb3Zlbg== IHNwaXI= IGFkbWl0 aXNh IGludmVzdGlnYXRl IDE5OTQ= c3lsdg== IExvc3Q= Y2VzdA== IDcx IHJlcXVlc3RlZA== IHdpbmRvd3M= IFBva8Op IFdpdGhvdXQ= TWV0 IGJlaGF2aW91cg== IHJlYWRlcg== IGh1bmc= IEtlZXA= IHJvbGVz IGltcGxlbWVudGVk IGJsYW5r IHNlcnZlcw== IEpheQ== IGNpdGVk IEZyaWVuZA== cHJvZml0 YXBvbg== IHJlcGFpcg== aXRlbQ== YXJyYXNz IGNyaXRpY3M= YWRp IEZhdGhlcg== IHNob3V0 IGZvb2w= IDg4 IHByb2R1Y2luZw== IGxpYg== IHJvdW5kcw== IGNpcmNsZQ== IHByZXBhcg== IHN1Ym1pdA== IG5pYw== bW9ycm93 44Or VW5kZXI= IHZpdGFs YXRlcm4= IHBhc3N3b3Jk IHB1YmxpY2F0aW9u IHByb21pbmVudA== IHNwZWFrcw== IGJhcnM= IGRlZXBlcg== IE1pbGw= cG9ydGVk IHdpZA== IGJ1dHRlcg== IHNtb2tpbmc= IGluZGljYXRlcw== S2V5 cm9wcmk= IEZpbGU= YWxsaW5n YXN0aW5n IFJ1cw== IGFkag== IDc5 YXZhbA== IHByZXN1bQ== YnVyZ2g= b25pYw== IGZ1cg== IHBvbGxz aWth IHNlY29uZGFyeQ== IG1vbnN0ZXI= aWdz IEN1cnJlbnQ= RXZlbnQ= IG93bmVyc2hpcA== ZW5kYXI= IGFycml2ZQ== IFRheA== IG51bGw= IFByaXY= IHRocm8= IGtpc3M= Y2F0 IHVwc2V0 YW5nbGU= aXRjaGVz ZWN0b3I= b2xvZ2lzdHM= IEdhbGF4eQ== IGNvcnJ1cHRpb24= IGhpbnQ= ZW50ZXI= IEhvc3BpdGFs IGdyZWF0bHk= IGJlZ3Vu ZXN5 IHNvaWw= IEFudG9u IG1haW50ZW5hbmNl 44Op IGRvemVucw== IGh1bWFuaXR5 IEFsYWJhbWE= IHJvbQ== d29ydGg= YXBpbmc= c3lsdmFuaWE= bGFo IGdhdGhlcmVk R0E= IGF0dGFja2luZw== Zm91bmQ= IFNxdWFyZQ== IGFyYml0 aWN0aW9ucw== IFdpc2NvbnNpbg== IGRhbmNl IFNhaW50 YXJjaHk= IGJhc2ViYWxs IGNvbnRyaWJ1dGlvbnM= IGxpdGVyYXR1cmU= IGV4aGE= cGVydHk= dGVzdA== IGJhYg== IGNvbnRhaW5lcg== bGV0dGVy IGZhbGxlbg== IHdlYnNpdGVz IGJvdHRsZQ== IFNhYw== IGJyZWFzdA== IFBM IHZldGVyYW4= IGludGVydmlld3M= IEFsZQ== IGJhbm5lZA== ZW5nZXJz IFJldm9sdXRpb24= aW50aA== IGNvbmNlcm5pbmc= SVZF IGV4cGVuc2Vz IE1hdHRoZXc= IENvbHVtYmlh ZHM= aXN0YW5jZQ== IGVudGl0eQ== Li4uIg== IHJlbGlhYmxl IHBhcmFsbGU= IENocmlzdGlhbnM= IG9waW5pb25z IGluZHU= bG93 IGNvbXBldGU= IHRob3JvdWdo IGVtcGxveWVk IGVzdGFibGlzaG1lbnQ= aWdlbg== IENybw== IGxhd3llcnM= IFN0YXRpb24= VEU= IExpbmQ= IFB1cg== aXRhcnk= IGVmZmljaWVuY3k= 4oCQ IEx5 IG1hc2s= IGRpc2FzdGVy IGFnZXM= RVJF ZXNpcw== IEhvbGQ= IGNhc3VhbA== YmxlZA== IGVuYWJsZWQ= IEVudmlyb25tZW50 IEludGVsbGlnZW5jZQ== aXBlcg== IE1hcA== IEJF IGVtZXJnZWQ= aXNkb20= IGNhYmlu IHJlZ2lzdHJhdGlvbg== IGZpbmdlcnM= IHJvc3Rlcg== IGZyYW1ld29yaw== IERvY3Rvcg== ZXR0cw== IHRyYW5zcG9ydGF0aW9u IGF3YXJlbmVzcw== SGVy IGF0dGVtcHRpbmc= T2Zm IFN0b3Jl w4PDgsODw4LDg8OCw4PDgg== IEtub3c= IGRlZmVuY2U= IHNjYW4= IFRlbg== IENoYWly IFBI IEF0bGFudGE= IGZ1Y2tpbmc= IGFuc3dlcmVk Ym4= IEthcg== IGNhdGVnb3JpZXM= IHJhdGlvbmFs IGN1c3Q= IHJvYm90 IGNvcnJlY3RseQ== IGdpZg== IGdyYXBoaWNz bWlj IGdyb3VuZHM= IE9wcA== aWF0ZQ== IGRpc3RyaWJ1dGVk IHNhbmN0aW9ucw== IGNoYWxsZW5naW5n dXRv IGluZ3JlZGllbnRz IGludml0ZWQ= IGZvdW5kZWQ= IFJlcXU= ZGVk IGJvd2w= IGJyb3RoZXJz IEhh SU8= IHdhZ2Vz aW1vcmU= b2NpYWw= IHNlZWQ= YXRpdmVseQ== IGFkZHJlc3Nlcw== IElvd2E= YWJldGg= IGF0dGl0dWRl aXNk Y2hpbGQ= IG1vbGU= IGRpc2NvdmVyeQ== eWFyZA== QnI= IDgy IHN1cHBsaWVz ZWxsaW5n IGRpc3Rpbmd1 Q1I= IHJlY2VwdA== IHZlcnQ= IHN3aW0= YmVj ZG9vcg== IFllYWg= IGdhbA== IGludGVyYWN0 IEVTUA== IENT YW1wcw== IGNvbnZpbmNlZA== IG9iamVjdGl2ZQ== IGRpc2g= IFBob3Rvcw== bGFk IGRvd250b3du b2ls aW5jdGlvbg== IHRvbW9ycm93 IENPTQ== IHN1cnZpdmFs c2hvdA== IHNldHRsZW1lbnQ= Q29ucw== IFhib3g= aW50ZXJlc3Q= IFNN YXJnbw== ZW5lc3M= IGV0aG5pYw== YmVyZWQ= TWlu IFRvaw== IGluY2VudA== IENvbW1hbmQ= IG1haW50YWluZWQ= IGJyZWFrcw== YnJpZGdl YXRhcg== YWdn IEZpbmFsbHk= dW5pY2lw IE9udA== bGVmdA== IHJlY29nbml0aW9u ICov IFBlcnM= IHdlbGY= IGFkZHJlc3NlZA== IEthbnNhcw== IHZpcnVz IHdoZXJlYXM= IHBhcGVycw== cmFtcw== IE1pbmlzdHJ5 IHBsZWFzdXJl IGFjcXVpcmVk IGR1cmF0aW9u anBn IGNhbG0= IE5ITA== IGJ1cm5pbmc= IGZvbGRlcg== aWNrZWQ= IFB5 IElsbGlub2lz Q2xhc3M= IEdvZGRlc3M= IHBlcmZvcm1pbmc= IHdlbGZhcmU= amFy SW50ZXI= IGxpbg== IGVuaGFuY2U= IG5vdGlvbg== ZmFyZQ== eXBlcw== IEFyZWE= IGNhbm5hYmlz IERpZWdv ZnM= IE1hbmNoZXN0ZXI= Y29tbQ== aW5pdGU= IGNvdmVyaW5n IFNvdW5k IDE5NjA= IDg0 ZWxlY3Q= emluZw== IGNpdGl6ZW4= IHBob25lcw== IHJhaWQ= IGlnbm9yZWQ= IE9iamVjdA== IHVwbG9hZA== Y2FyZA== IG1vZGlmaWVk IHJvb21z aWFo cmFuZ2U= aGVhc3Q= YWNodXM= IHN1Z2dlc3Rpbmc= 4oCL Z3JhZGU= RWw= IGNsb3RoaW5n IHJo IEhhbg== dW5pdHk= ZW5jaW5n IEF1c3Rpbg== c2VjdXRpb24= dHJh ZGVt IFF1YWw= IGhlYXZlbg== IHN0YWdlcw== IHdlZGQ= cGx1cw== aWZpY2lhbA== IEltbQ== IEhv aWV0aWVz IHBocmFzZQ== IGJyaWxs YWN0b3J5 IHByb3ZpZGVycw== IHNpbGVuY2U= IGFlcg== IEFJ IEFkdmVudHVyZQ== IHBsYXRmb3Jtcw== IGRlbW9uc3RyYXRlZA== IGludGVyZg== aW5ndG9u IHJhY2Vz IGdyYWRl dWx0YW5l IFRocm91Z2g= ZmFsc2U= IGJvdw== IEFC IGZsYXZvcg== IGhpc3Rvcmlj Z292 IGNvbG91cg== IHZpZXdlZA== IEVtYWls ZWxjb21l IGludGVydmVudGlvbg== IGRpdmVyc2l0eQ== IHBlcmlvZHM= IHJldmVyc2U= IFZlcnk= IHF1b3Rl IExlZnQ= dGhyb3VnaA== IHNjcmV3 IGxhbmRpbmc= IHBpbGw= IHdldA== IHByb3Rlc3RlcnM= IHJlcGVhdA== YXZlZA== ZXJr IHNhbGFyeQ== IFBlbm5zeWx2YW5pYQ== U3RpbGw= IG1heW9y IGtpdGNoZW4= IGZlYXR1cmluZw== IE11c2V1bQ== IFRvdXJuYW1lbnQ= IEZhbA== IHNlcnZlcnM= VUM= IGFueWJvZHk= aW1n IFRyYWRl aXh0dXJl dGhlbGVzcw== IGZpbmFuY2U= IGNsb3Npbmc= IFBhdHJp aWFj YWJlbA== ID4+ b3JvdXM= IGZpcm1z c2NyZWVu dW5h IGVtYmFycmFzcw== dWxzZQ== IGxldHRpbmc= IHRocmV3 aWxleQ== IGNoYW5uZWxz bGFu IFZlZ2Fz IHNlYXI= IGZhbnRhc3RpYw== YXJyZQ== dXp6bGU= IERlcg== VGhvc2U= IHN3aW5n IHNoZWV0 aW5kZXg= Y292ZXI= b2dhbg== IHZhcmlhYmxlcw== IFRlY2g= IHNwb2tlbg== YWNoZWw= IERh IE1vdW50YWlu IGxvYWRlZA== IGZvb3RhZ2U= dmVyc2lvbg== IHVubA== IFBob2VuaXg= IHRocm93aW5n IGZpcmluZw== IHRyYWNraW5n IHdpZHRo IHN0cnVnZ2xpbmc= cm9vbXM= b3Rpb24= IG1vbnRobHk= IFNlcnZlcg== IGVnZ3M= b3Blbg== TUM= IDE5OTM= IGhpcmVk IHN0YXllZA== IEFsbGVu IHN0cm8= IDk4 c3RlcA== IFR1cmtpc2g= IGZhYnJpYw== aXN0aW5n IERvbQ== IGRhdGVz IHByb24= IGJhc2tldGJhbGw= IGx1Y2t5 IEFyYWJpYQ== IGFzc3VtZWQ= ZXN0eQ== IGFmZmFpcnM= IGdsYWQ= IEluZGVlZA== IEZB IFdvcmQ= IGpvaW5pbmc= aWZpY2U= cHJlYWQ= aXJ0cw== IFNlbGVjdA== IHBvcHVsYXRpb25z YXdhcmU= IG5vc2U= IGNvbXBsYWludHM= c3RhcnQ= IHNjb3Jpbmc= VGhhbmtz IG1pbmluZw== IHZpc2l0b3Jz U0g= IGRhbWFnZWQ= IGNoYXJhY3RlcmlzdGljcw== IFBlbnQ= REM= IDgz IFNpeA== cmF0ZXM= IGZsYWdz IEJyZXc= ZG9n TWFyaw== Ly8vLw== IGV4ZWN1dGlvbg== IGpva2U= cGhvbmVz IHRlc3RpbW9ueQ== IG9ic3Q= UUw= IEN1dA== IHN0dWRpZWQ= IE5pbnRlbmRv aWNrZXQ= IE5CQw== IGxhZA== IEJyYQ== IE1vaA== IGtlcm5lbA== IG92ZXJ3aGVsbWluZw== IGFnZWQ= IGFwcGxpY2FibGU= IENvbmQ= IHJvYWRz IEJsb2Nr bWFkZQ== b2RnZQ== IGNvbW1hbmRz IG9mZmljZXM= dmVsYW5k IHR1dA== IHJlY2VpdmVy IEZybw== IHNob3BwaW5n IGlQ IFN0cmU= IEFCQw== IGVudGVydGFpbm1lbnQ= IEJvdw== b3J0ZWQ= TWM= IHJlYWRz Z3JhZA== IENvbGxlY3Q= IOKIkg== IENhcGl0YWw= ZWRlcmF0aW9u IGVtcGxveWVy IGludm9sdmVtZW50 IGFueGlldHk= YWxpYQ== IHJvb2Y= IEFtb25n IERlbW9jcmF0 IHN0YXRz IFZpbGw= IGNvbnN0aXR1dGlvbmFs IHJlZmVycmluZw== aXR0eQ== IHRhY2tsZQ== b3V0dWJl IGJhY2tlZA== IEhvbmc= IEJyb2Fk IGVsZQ== IE90dA== IDE5OTI= aG91cg== YWNodXNldHRz Q2Fs IGRlZmVhdGVk IDgx ZXNw IHNlZW1pbmdseQ== d2Fz IEplbm4= IEt1cmQ= IGdlbmU= IGRpc2NvdW50 UmV0 RUNU KCk7 IGNsdWJz IHNpZA== IE1hcnNo Q2hlY2s= IHBw IEVhZw== aWRlc3ByZWFk IGJlaW5ncw== RlQ= IGludHJvZHVjdGlvbg== IENoYW5nZQ== QVJE IDExMA== YWRvd3M= aWVyY2U= IG1lYWw= YXV0aG9y IEJhbmc= bGFob21h IHJhbmtz MjAxMQ== Pz8/Pw== bWF4 IGNvbGxhcHNl IG9wZW5z IGVjaG8= IHNvcGg= IHJhY2lzdA== IGVub3Jtb3Vz IHdhdmVz IHRhcA== IGNvbXByZWhlbnNpdmU= Li0t IFJveQ== IGZhcm1lcnM= UmVsYXRlZA== YWlyZWQ= cm9uZXM= IENyaW0= IHByb3BvcnRpb24= IGRlc2lnbnM= IG5lZ290aWF0aW9ucw== IHZpcnR1YWxseQ== IEJhdG1hbg== IHdhcm4= IGxlZ2l0aW1hdGU= bWF0ZQ== IGNvbnZlbnRpb24= LCw= bmV0aWM= IFNE IGNvbnNpc3RlbnRseQ== IGNvbXBlbnNhdGlvbg== IHB1bmlzaG1lbnQ= IHll IHRpZQ== IEJ1cmVhdQ== aXJsZg== IEJ1 IEFyZW4= IFBoaWxpcHA= IGtuaWZl IG1lbW9yaWVz IFJvc3M= IGFuZ2xl IDg2 IFRodW5kZXI= IHJlbmQ= IFRvdXI= IGNvdW50cw== c3VuZw== IEltcA== IGVkdWNhdGlvbmFs IGFjY2Vzc2libGU= Q09N IGRyZXc= eWVy R2w= YW1pbmU= T1JU T0I= SUI= bWFzdGVy IHRyaWFscw== b2d5 aGFy IFRydXN0 IHByZWZlcnJlZA== aXJsZnJpZW5k IE5ldg== IGJpbg== IGNvdw== UGFnZQ== IHNpZ25hdHVyZQ== IEJM NzAw IHJldGlyZWQ= IGJ5dGVz IG5laWdoYg== IExlZ2VuZA== IGRldmFzdA== IHN1c3BlY3RlZA== aXNvbnM= IFBva8OpbW9u c2NhbGU= IGNhcGFiaWxpdGllcw== IHJldmVs IGNoZWVzZQ== ZHk= aWdyYW50 IGZhaWxpbmc= Yml0cw== IEhlcm9lcw== IEdob3N0 IFNjaWVudA== IGFwcG9pbnRlZA== dXJp IGluc3RpdHV0aW9u IGV4cGFuZGVk Z3JlZw== IG1vbml0b3Jpbmc= IHBvZGNhc3Q= IGNvYWxpdGlvbg== IDk2 Sm8= IHN0b2xlbg== IFNhYg== IHN0b3Bz IGhvbGlkYXk= IGludHI= Q2Fy QmxhY2s= IExHQlQ= IHdhcm1pbmc= IEFuZGVyc29u IDg5 IHByb2R1Y2Vy TWVk IGFjY3VyYWN5 IE1hcnZlbA== aXphYmV0aA== IFBhdHJpY2s= bW9ueQ== IG1pbmk= YWNsZXM= IG92ZXJ0 dGhleQ== IG1lbWJlcnNoaXA= IFZlbg== IGV4Y2g= IHJlbW92YWw= IERhdmU= VFk= bWFk IEZpbmQ= IGFkZXF1 IGVj IHRlZXRo IGVtb3Rpb24= IHBlcm0= IHNvbGVseQ== ZGI= IGV4dHJhb3Jk SUdIVA== Y2Fs IGd1aWRlbGluZXM= IGR5aW5n IHN1c3BlbmRlZA== IFByZW1pZXI= IEFudGhvbnk= ZWx2ZQ== IGRhZA== IEV0aA== IEZvb3RiYWxs IGFiYW5kb25lZA== IDw8 IG1hcmNo IGhvcnJvcg== 4oCmIg== IGNoaWxkaG9vZA== IGNhbXBhaWducw== IGx1bmNo IEFsYmVydA== YmxvY2s= 4paI4paI b3VuZGluZw== IGJvbmU= b3JnYW4= YWRlcnM= IEZsYXNo IERyaXZl IHRvbmlnaHQ= IHdhcnM= IEZM IGZvcm1hdGlvbg== Y29uc3Q= TmV3cw== IGNvbXBl b3Jpb3Vz IFN0YWZm IGRpc2N1c3Npb25z IFByb3RlY3Rpb24= IEphbQ== IGNyaXRlcmlh IGluc3RhbGxhdGlvbg== IGFjY29tcGxpc2g= aXp6YQ== IHB1Ymxpc2hlcg== IHJlc2N1ZQ== IFRyeQ== VUxM IFNvbQ== IEhvcA== b3JldA== dGhz b3Jkb24= IHBvY2tldA== IEludg== RG93bmxvYWQ= IENyaW1l IGJlbmU= IEd1aWRl IEFzc2VtYmx5 IHBhcmFtZXRlcnM= SUU= IEFsZXhhbmRlcg== IGNvbmNlcnQ= IFNjaGU= IHNob2Vz IHZpc2l0aW5n IHJlY2FsbA== IGJ1Yg== IHJ1cmFs IGNvbmNyZXRl IFJvcw== TmV4dA== UnVzcw== IGxvYW5z IFNoaWVsZA== IHRyZW0= aGVtYXQ= a2c= IEhhcnJpcw== aXNpdGlvbg== IE1vdmU= IEZD IGZhdGU= IENobw== IHRpcmVk IHByaW5jaXBhbA== aGlzdA== aWVuY2Vz YXRoeQ== IHNldmVudA== IG1vb2Q= IHN0cmF0ZWdpYw== IGRpc2Vhc2Vz IGZvcnVt IHRlbXBvcg== IGhlYWRxdWFydGVycw== UGFy aWdl ZmxpeA== IGd1aXRhcg== IDk0 T25seQ== IHJlbGVhc2Vz cm9waA== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IDYwMA== IENvbnRpbnVl aWdhdGU= IENyaXQ= c3lzdGVt IGRpc2FibGVk IHVuZXhwZWN0ZWQ= aXRodWI= IHVuY2xlYXI= IEVzdA== IGNvbnRyYWQ= IHN0cmF0ZWdpZXM= dmVudHVyZXM= IHBhc3NhZ2U= QU1F IGltcHJvdmluZw== IHJldmVhbHM= IGRlY3JlYXNl b3Zh IGFubm95 IFNob3J0 IExpYnJhcnk= IGN5YmVy bmVsbA== IEh1cg== IENC IHBob3RvZ3JhcA== VUk= IHNlZA== R2U= IDg3 IGRpdmVyc2U= IGVuY291cmFnZWQ= IGNvbnNwaXJhY3k= IGJpcmRz IG9wZXJhdG9y IGhhbmRmdWw= IGNsYXNzaWZpZWQ= Pyk= IGRyYW1hdGlj IGludmVzdGlnYXRvcnM= aXRv IHdpZGVzcHJlYWQ= IFJvb20= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGNvbGxlY3RpdmU= IGpvdXJuYWxpc3Q= U3RyaW5n IHRlbXBlcmF0dXJlcw== aWxh IGd1aWQ= IGluc3BlY3Q= IG1pc3NpbGU= IE1heW9y IG1hbnVhbA== IHNpbXVsdGFuZQ== IHJhdGluZ3M= IHN1Y2s= IDk3 IHVuaXZlcnNhbA== IHBoYXJt IGRpc3J1cHQ= aWFubw== QVY= IGZ0 IHN0YXRpc3Q= b2xkcw== IFdhbGtlcg== cGhw IHVuZGVydA== IExhcw== aXNob3A= bnRpbA== cmVzaG9sZA== IFdoZXRoZXI= TXM= IGRlbnk= IENsb3Vk IHByb3ZpZGVy IHN1cnZpdg== IFVwZGF0ZQ== aGFz IG1pc3Rha2Vz Y2hhcmdl cGxlZA== cml0eQ== IG5vZGU= IE1hc3NhY2h1c2V0dHM= b29scw== bGljYXRpb24= IGZhaWxz ZW1hbGU= b3Jp YmFja3M= IHNoaXJ0 ICcn IE5BVA== IHdhdGVycw== ZWxzb24= IGVhc2U= IHNjYXI= IGNvbnRlbnRz bWluZA== IGNvbnRyaWJ1dGlvbg== IHNocg== IGhhbmRlZA== IHN0YWJpbGl0eQ== IHRyYXZl RW0= IG1pcnJvcg== MTIz IHdlaWdo IGZpY3Rpb24= b3V2ZXI= aXN0YW50 cml0aW9u IEZlZA== IHBoeXNpY2FsbHk= IHN0YWtl IEFydGljbGU= IEFyYw== IExld2lz IE1pbmQ= IGRlbW9uc3RyYXRl IHByb2ZpdHM= dmlzaW9u b21pYw== b2xpZA== IGJhdHRsZXM= IGRyaXZlcw== IGVhc3Rlcm4= IFNvbnk= ISEh YXJhdGlvbg== dmFyZA== IEdM cG9ydGF0aW9u IDky IGxhd21ha2Vycw== IHByb3RlY3Rpbmc= IEVQQQ== IHllYWg= IHNoYW1l b2xwaA== ZXZlbg== eGl0 IGF0dGFjaA== IHJlcHJlc2VudGluZw== IG9icw== IFV0YWg= aWZmcw== IEZyZWVkb20= w7M= QUs= IGluY2lkZW50cw== aXRhZ2U= IHZpZXdlcnM= Y2Q= IG1vdXNl IGNsYXI= IGFjY29yZGFuY2U= IGJvdA== Y29y IFN1bW1lcg== aGVsZA== IGlubm9jZW50 IGluaXRpYXRpdmU= b2xz X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= IHNwb3Rz cGFjZQ== IGNvbnZlbnRpb25hbA== IGNvcnBvcmF0aW9ucw== IGJsb2NrZWQ= SEQ= YXR0ZXJlZA== IHJlZmVycw== IGJ1Y2s= IERpZ2l0YWw= MTIw IHRvcGljcw== VEY= xIE= YnJpZA== cmVlbWVudA== IHVuZGVybHlpbmc= IE1lbWJlcg== IGludmVzdGlnYXRpbmc= IHByZWduYW5jeQ== IHRvdWNoZG93bg== IEJhbmQ= IENhbGxlcg== IGluc3RhbmNlcw== UFA= d2E= R29vZA== IDE5OTE= IENvbGQ= IGZlYXJz IHJlbWFya3M= hpI= YXRhbA== IG1pdA== IGV4cGVyaW1lbnRz aXB0 Q29sb3I= aW5kdQ== VXBkYXRl IDkz QWc= IOU= YW5jb3V2ZXI= Qm90aA== IGp1ZGdlcw== T2JqZWN0 IHN0ZXJl dW1ibg== IHBhcnRpY2lwYXRpb24= IFN0YXJz IEplcmU= IHdlZWtseQ== IEJhbg== IGNvbnZlcnNhdGlvbnM= IFBpdHQ= dXo= IEluZGlhbmE= IEtpY2s= IGluZmVjdGlvbg== IGhlcm9lcw== IHNldHRsZWQ= IHN0cmlw IGhhbA== IGR1bXA= IFNjaQ== IGxlcw== IHJlZmVyZW5jZXM= IFVSTA== IEJyaWRnZQ== IHdhbnRpbmc= Rm9yY2U= IGV4Y2x1cw== TWVhbndoaWxl bW4= IGdlbnRsZQ== bWFrZXI= c2VuYWw= IEdybw== b3VyaQ== IFJhaW4= IEFsbGlhbmNl IGxpZnQ= ZWxh U0Q= IENsZXZlbGFuZA== IHJhbmtlZA== IHN0YWRpdW0= IGRlYWRseQ== 5Lg= IHJpZGluZw== YXJpYQ== IEFybW9y IGRvY3VtZW50YXRpb24= IEdyZWVjZQ== cmVlaw== IGxlbnM= IFNh IGdyb3Nz IEVtZXI= YWdlcnM= IER1Yg== IFJo IEFNRA== IGFycml2YWw= IGRlc2VydA== IHN1cHBsZW1lbnQ= IFJlc3A= IGtuZWU= IG1hcmdpbg== Zm9udA== b2dn MjAxMA== IFBpcg== IFByb20= aXZhbHM= IGludGFrZQ== IGRpZmZlcmVudGx5 dWdz IGJpdHM= Y2x1ZGVk IHNlYXJjaGluZw== IER1 dW1ibGU= IGZ1bmN0aW9uYWw= IEJhbHRpbW9yZQ== IENvdWxk IGRlc2lyZWQ= IGNpcmN1aXQ= IEx5bg== IEdP IEZhbHNl cmVwcmU= Jzo= YWx0aWVz IG1pbmlt IGRyb3Zl IFNob3VsZA== IGhpcA== IHByb3M= IHV0aWxpdHk= IE5hdHVyZQ== IE1vZGU= UHJlc2lkZW50 b3Bw cmF0 Zm9ybWFuY2U= IGNvbmNlbnRyYXRpb24= IGZvbnQ= IEJ1ZA== IGFtaWQ= IHJldmVycw== IE1M QmFy IGludGVyYWN0aW9u IGp1cmlzZA== IHNwZWxscw== ZGVw Zmls IGNpdmlsaWFucw== dXR0ZXI= IENvb3Blcg== IEJlbG93 IGVudHJhbmNl IGNvbnZlcnQ= IGNvbnRyb3ZlcnN5 b3dlcmVk IGNvbnRyYXJ5 IGFyYw== IEV4ZWN1dGl2ZQ== IE9mZmljZXI= IHBhY2thZ2Vz IHByb2dyZXNzaXZl d2lkdGg= IHJlc2VydmVk dm9s IFNhbXN1bmc= IHByaW50ZWQ= IGNlbnRlcnM= IGludHJvZHVjZQ== IEtlbm5lZHk= IG9kZHM= IHN1cmVseQ== IGluZGVwZW5kZW5jZQ== IHBhc3NlbmdlcnM= cmVwcmVuZQ== IEJlaA== IGxvdmVz IEVTUE4= IGZhY2lsaXQ= IGlkZW50aWNhbA== IGRvY3Q= IHBhcnRuZXJzaGlw Y29uZg== IEhpZGU= IGNvbmZ1c2Vk IENvdw== TWVu IHdyZXN0 IElyYXFp IGhvbGVz IFN0dWRpZXM= IHByZWduYW50 aGFyZA== IHNpZ25hbHM= SVg= IHB1bGxpbmc= IGdyYWR1YXRl IG5vbWluZWU= RGF0ZQ== IHBlcm1pdHRlZA== IOKCrA== IE9rbGFob21h U3RhcnQ= IGF1dGhvcml6ZWQ= IGFsYXJt IENvcw== dmFu IGdlbmVyYXRpb25z Y3VsYXI= IGRyYWdvbg== IFNvZnR3YXJl IEVkd2FyZA== IGNvbnRyb2xsZXI= U2Vu Z2VyZWQ= IFZpaw== IGFwcHJvYWNoZWQ= VGhhbms= IGNhbmNl IGZvcm11bGE= IFNtYWxs IHdlYWtuZXNz IHJhbXA= aXR1ZGVz anVk IGJyaWxsaWFudA== IGFjY3Vz c291cmNl IDgwMA== IEV2aWw= U3c= IGhvbWVsZXNz d2Vlaw== aWVucw== cmljcw== IFRoaXJk VE8= IG9yZ2FuaWM= IHByZXNlbnRhdGlvbg== YWdo IERvd25sb2Fk dmF0aW9u IGFzc2VtYmx5 b3JhYmxl aG9sZGVycw== IEJlcm5pZQ== IEhlbHA= IHRvbmc= IEZpZ2h0 IGJlYWNo Qm9vaw== IExpYw== IHJ1c2g= IFJvdW5k b3Vw IE1hcng= IGNhbGN1bGF0ZWQ= IERldmls IFNhcmFo IG9jY2FzaW9uYWxseQ== IGJ1bGxldA== QXZhaWxhYmxl Z2F0ZQ== IDkx IGhvc3A= IHByb21pc2Vz IEhJVg== IFN0YWRpdW0= IFN0b2Nr IENvcnBvcmF0aW9u Z2FnZQ== Tkc= IENyZWRpdA== IHNuZQ== aWJs IGFjY3Vt c3VjaA== IHRlcnJvcmlzdHM= IGNvbnNjaW91c25lc3M= IFpo IGRyYW1h b29sYQ== cGlyYXRpb24= IGxhYm91cg== IE5pbg== IHV0dGVy IGRlbW9jcmF0aWM= IGFzc2Fzcw== aWxhdGlvbg== IGdlc3Q= IGFicm9hZA== IG1ldGFi IHNvcnRz IGZsYXY= VUI= IG1n IE5vdGhpbmc= IE9k IG11c2ljYWw= MjAwOQ== IGRyb3Bz b2NhdGVk YXRlcmFs MDAwMDAw IGdyZQ== IGVxdWFsaXR5 IGJ1cmRlbg== IHZpZw== IExlYWRlcg== LS0tLS0tLS0tLS0t IGNlcmVtb255 IGZpZ2h0ZXI= IGFjdG9ycw== IOY= YW1hbg== Rmk= IGFsaWdu cHV0ZXI= IGVsZGVy IE5TQQ== IHJlcHJlc2VudGF0aW9u IE9udGFyaW8= SVRI dXNhbGVt IGhhcmFzc21lbnQ= aXR6ZXI= IHN5bXA= IGJveGVz IERS IG1hbmlmZXN0 YXRyZQ== IF4= IGRpZXM= bGV0b24= IG1pc3Npb25z ZXRoZQ== IHJlc29sdmU= IGZvbGxvd2Vycw== IGFzYw== IGtt bG9yZA== YW1tZWQ= IHNpbGVudA== IEFzc29jaWF0ZWQ= IHRpbWluZw== IHByaXNvbmVycw== IEtpbmdz IEZpdmU= IHRvd2Vy IGFwcHJvYWNoZXM= IHByZWNpc2VseQ== IGJ1cmVhdQ== IE1vdGhlcg== IElzcw== IGtleWJvYXJk aXR1YWw= IGZ1bmRlZA== IHN0YXlpbmc= IHBzeWNob2xvZ2ljYWw= IG1pbGU= IExlb24= IEJhcmI= d2lsbA== IHdpZGVy IEF0bGFudGlj IHRpbGw= IFJvbWU= cm90 IGFjY29tcGFu IGZsb3Vy YWNv V29ybGQ= IEV4cHJlc3M= IFl1 Q29y IHBsZWFzZWQ= cGFydHk= IHBvaW50aW5n IGluZmxhdGlvbg== IHJveQ== ICks YWluZXI= IHdlZGRpbmc= b3Jtb24= IHJlcXVpcmluZw== IHF1YWxpZmllZA== IHNlZ21lbnQ= RU5E IHNpemVz ZWFscw== IGNvcnJ1cHQ= YXNzYWRvcg== IGNlbGVi IGRyZWFtcw== IE1lc3M= IGNoZWNraW5n IFZlcnNpb24= IHByZXBhcmluZw== IGFjdGl2ZWx5 IERpZmY= IGx1eA== IFdpbnRlcg== YWN0ZXJpYQ== IE5F IGRlcHV0eQ== IHRyYW5zZ2VuZGVy IHN1bW1hcnk= IGluaGVy ZXJpZXM= Y2hhcg== IFlhbg== IGtub2Nr IFBhdGg= IGxpcA== cm9sbGVy IGltcHJlc3Npb24= IGNlbGVicmF0ZQ== IHNsaWRl IGd1ZXN0cw== IGNsaXA= RlM= IHNhdmluZ3M= IGNhcHRhaW4= IGxlZ2FjeQ== IERlbnZlcg== IHdvdW5kZWQ= dGFib29sYQ== QUNU IHB1cnN1ZQ== IG94eQ== IHE= IHNlbWk= IE5lZWQ= IEFmZmFpcnM= IG9ic2M= IGNoZWNrZWQ= IGR1YWw= Q29kZQ== IE1E bGVt dWx0eQ== IMKp IEVsaXphYmV0aA== IGNlbnR1cmllcw== YXJkZWQ= c3Jj IGV2aWRlbnQ= ZW5uaXM= YXRpbg== IHVuZW1wbG95bWVudA== IE1hcmlv IGludGlt Q2hyaXN0 IGJpb2xvZ2ljYWw= IHNvbGRpZXI= IEFkZGVk IG1hdGg= IEdpbA== IGJpYXM= IGRhdGluZw== IE9jZWFu IG1pY2U= TXVz aGlyZQ== IFRlcw== U2VydmVy bGltaXRlZA== U2l6ZQ== IG1ldGVycw== IHJvY2tldA== ZXNzZWU= IGNlcnRpZmljYXRl IElyYW5pYW4= QVNT IGdyaWQ= RGVj IHJvbGxpbmc= Y29tbXVu IFN3ZWRlbg== YnVyeQ== IHRpc3N1ZQ== IHJhY2lzbQ== IExvY2Fs IG15c3Rlcnk= IGV4YW1pbmU= IHN0ZW0= IHNpdHM= IGhvcGVk b3Rpbmc= IGRpYWxvZ3Vl IHBlcnN1 V2F0Y2g= bGF5 TUFO IGNocm9uaWM= IFBvcnRsYW5k bWFya2V0 IFNFQw== IHBhcmFsbGVs IHNjYW5kYWw= IGNhcnJpZXM= IHBoZW5vbWVub24= aHVtYW4= YWNrZXI= IE94 IHJldGlyZW1lbnQ= dGFpbm1lbnQ= b3ZpZQ== IEdlYXI= IGR1dGllcw== IGRvc2U= IHNjcm9sbA== TUI= aW5m IHNhdWNl IGxhbmRzY2FwZQ== cmVkZGl0 IENoYW1waW9uc2hpcA== IFJlZGRpdA== YWxpZA== IGNvaW4= IG92ZXJz IHBvc3Rpbmc= YWJvdXQ= IGZlbA== YW5keQ== IGJvbGQ= IGZvY3VzaW5n ZWZmZWN0 R1I= IGRlZW1lZA== IHJlY29tbWVuZGF0aW9ucw== IHN0ZXBwZWQ= IHZvdGVy IERlZXA= IEluc3RhZ3JhbQ== IG1vZGVyYXRl IE1hcnlsYW5k IHJlc3RyaWN0ZWQ= IE1C IENoYWxs IHRvYg== IGNpcg== IE9jYw== IEV2ZXI= IGNvbGxhcHM= SU5GTw== PS0= IFBpY3Q= IEFjY291bnQ= bmM= IG91Z2h0 IGV4cG9ydA== IGRydW5r KCc= IHdpc2U= IE1vcnQ= bmVjZXNz IGFuY2VzdA== IEluY3Jl IGZyZXF1ZW50 bWly IGludGVycHJldGF0aW9u IGRlcGVuZGVudA== IGNvaW5z IEJvbA== VmlkZW8= IEp1c3Rpbg== IGZhdGFs IGNvb2tpbmc= IGNvbmZ1c2lvbg== aXBoZXI= IGN1c3RvZHk= IE1vcmdhbg== b21hY2g= IEdvdmVybm9y IHJlc3RhdXJhbnRz ZWxpbmc= IGFja25vd2xlZGdlZA== IHRoZXI= IGdlbmVz Y2hpbmc= SGV5 IHRhY3RpY3M= IE1leGljYW4= IHZlbmQ= IGhlcw== cXVlcg== IG5vdGluZw== IENhbWVyb24= IHRhcmdldGluZw== cm9jaw== IGNyZWRpdHM= IGVtb3Rpb25z IHJlcHJlc2VudGF0aXZlcw== bmV3cw== IGxlZ2lzbGF0aXZl IHJlbW92aW5n IHR3ZWV0ZWQ= IENhcnRlcg== IEZpeGVk IGZvcmNpbmc= IHNwZWFrZXI= IG1hbGVz IFZpZXRuYW0= bGluZWQ= IGNvbmNlcHRz IHZvaWNlcw== b2ly IFRyaWI= V2hl IEplcnVzYWxlbQ== IFNhbnQ= IGN1bA== IGxhZHk= IEhhd2Fp IGFydHM= IElubg== IE1hY2hpbmU= IEVtcGVyb3I= IHNsb3Q= Z2x5 IFByb2Nlc3M= SUlJ IGF0aGxldGVz IFRlbXBsZQ== IFJlcHJlc2VudA== IHByZXNj IHRvbnM= IGdvbGRlbg== IHB1bmNo IEdS aXZlcnBvb2w= IGVuYWN0 IGxvYmJ5 IG1vcw== IHBpY2tpbmc= IGxpZmV0aW1l IGNvZ25pdGl2ZQ== RWFjaA== em8= IGR1Yg== IGNvbnNpc3Rz b2xu IGZlc3RpdmFs YW1vdXM= IGludGVsbGln d29yZHM= IFNtYXJ0 IGRlbGU= IGxhcHQ= IG1hZ2ljYWw= IFNpbg== YnVz dXJpdGllcw== aWdodGg= IFJ1Ynk= IFN1cmU= b2x2aW5n IGp1bg== T1NU IGltcG9zZWQ= IGFzdHJvbg== IGNvcnJlbA== IE5T IEtpdA== IEZ1dHVyZQ== YnVybg== IGltbXVuZQ== b2N1cw== IGNvdXJzZXM= IFN0cmluZw== IGxlYW4= IGdob3N0 IG91dGNvbWVz IGV4cGVuc2U= IGV2ZXJ5ZGF5 IGFjY2VwdGFibGU= QWg= IGVxdWlwcGVk IG9yYW5nZQ== RlI= IER1dGNo VGhvdWdo IFJhbms= UVU= IFJvYmVydHM= d2hhdA== cmVuZA== IGRpc2FwcGVhcg== IHNwYXdu IExhbQ== b2lz IGRlc2VydmU= IG1pbmltYWw= IG5lcnZvdXM= IFdvdWxk IHJvb2s= IFZhbmNvdXZlcg== IHJlc2lnbg== c2hpcmU= IFdvcmtz IEJ1aWxk IGFmZm9yZGFibGU= IEdhcnk= IEFyZW5h IGhhbmdpbmc= IGltcGxpY2F0aW9ucw== IFNvbmc= IG1haW50YWluaW5n IGd1YXJkcw== Q09O IGRlcml2ZWQ= IGV4ZWN1dGVk IHRoZW9yaWVz IHF1b3RlZA== IEFuZHJl b2dh c2VsZXNz aW5mbw== IEJlbGc= IHRlYXJz IFN1cnY= IGJpcnRoZGF5 aWdpb3Vz aW1tZXI= IHNwZWN0cnVt IGFyY2hpdGVjdHVyZQ== IHJlY3J1aXQ= YXJtYQ== VGFibGU= IG1vbnN0ZXJz IEdvdg== IGRlc3RpbmF0aW9u IGF0dHJhY3RpdmU= IGZvc3M= IE1vcmVvdmVy IHByZXNlbnRz VEhF IHJlcGx5 cHRvbg== IGN1bQ== IGRlbGlnaHQ= IGFmZmVjdHM= IGRvbmF0aW9ucw== IFRveQ== IEhpbQ== TUVOVA== IG92ZXJjb21l aXRjaGVk IEZhbnRhc3k= IEhhdA== IEJlYXN0 Ym90dA== IGludmVzdGlnYXRpb25z UnVu IGh1bnRpbmc= ZGk= ZnVuZA== IHNlc3Npb25z ZXN0eWxl IHBvcnRyYXk= b2lkcw== WWVhaA== IGNvbW11bmljYXRl IGNvbWVkeQ== IFlhbmc= IGJlbHQ= IE1hcmluZQ== IHByZWRpY3RlZA== UGxheQ== IGltcG9ydGFudGx5 IHJlbWFya2FibGU= IGVsaW1pbmF0ZQ== RGF2aWQ= IGJpbmQ= VklE IGFkdm9jYXRlcw== IEdhemE= aW1w REI= IE5h IFNpbWlsYXI= SUVT IGNoYXJpdHk= dmFz bWF0aA== IOKW b2tlcg== bmR1bQ== IGNhcHM= IEhhbA== MjAwMA== ZWFu IGZsZWV0 IHJlY3Jl UmlnaHQ= IHNsZWVwaW5n aWppbmc= a2luZA== IGRlc2lnbmF0ZWQ= w6Q= IGFuaW1hdGlvbg== a2Vl IEludHJvZHU= IC8+ IGRlbGF5ZWQ= IHRyZW1lbmQ= IGN1cmlvdXM= VXNl IGxlY3Q= ZGFt IGlubm92YXRpb24= IFBvaW50cw== IGxvYWRpbmc= IGRpc3B1dGU= Y3RpYw== aXJkcw== IEJZ IG51cnM= IFZhbHVl SU9OUw== IEh1bQ== IHRlbXBsYXRl bWVycw== IGFwcGVhcmFuY2Vz IEVudGVydGFpbm1lbnQ= IHRyYW5zbGF0aW9u IHNha2U= IGJlbmVhdGg= IGluaGli IGV1cm8= YWJldGVz IHN0dWR5aW5n IE1hcw== IHBlcmNlaXZlZA== IGV4YW1pbmVk IGVhZ2Vy IGNvYWNoZXM= IGltcGVy Y2hp IHByb2R1Y2Vz Iiku IEV2ZXJ5b25l IG11bmljaXA= IGdpcmxmcmllbmQ= IGhpcmU= IFZpY2U= IHN1aXRhYmxl b3B5 IGluZXF1 IER1a2U= ZmlzaA== Zmlyc3Q= IE9icw== IGludGVyaW9y IEJydWNl IFJ5 IGFuYWx5cw== IGNvbnNpZGVyYWJsZQ== IGZvcmVjYXN0 IGZlcnQ= b3JzaGlw IERydWc= IEFMTA== OiI= dGh1cg== IE1haWw= IGJhbGxvdA== IGluc3RhbnRseQ== IENoYW5uZWw= IHBpY2tz IDE5ODk= IHRlbnQ= b2xp IGNpdmlsaWFu Ymxpbmc= ZWxsbw== YnU= IGluY2g= IGxvZ28= IGNvb3BlcmF0aW9u IHdhbGtz IGludmVzdG1lbnRz IGltcHJpc29u IEZlc3RpdmFs IEt5 IGxlZ2FsbHk= IGdyaQ== Y2hhcmc= U2w= IHRocmVhdGVuaW5n ZHVjdGlvbg== Zmxvdw== IGRpc21pc3NlZA== aWJyYXJpZXM= Y2Fw ZWxl IE1jRw== IEhhcnZhcmQ= IENvbnNlcnZhdGl2ZQ== IENCUw== cG5n IHJvb3Rz IEhhdmluZw== dW1ibGVk IEZ1bg== XC8= IFNlYXJjaA== cGxleA== IGRpc2N1c3Npbmc= IGNvbnRpbnU= IFRhaQ== IFdpaw== RnJlZQ== Zml0 IHJlZnVzZQ== IG1hbmFnaW5n IHN5bmQ= aXBlZGlh d2Fsaw== IHByb2Zlc3Npb25hbHM= IGd1aWRhbmNl IHVuaXZlcnNpdGllcw== IGFzc2VtYg== dW50dQ== RmluYWxseQ== QVNF IEF1dG8= IEhhZA== IGFubml2ZXJzYXJ5 TEQ= IER1cg== IFVsdGltYXRl aWhhZA== cHJvZHVjdA== IHRyYW5zaXQ= IHJlc3RvcmU= IGV4cGxhaW5pbmc= IGFzc2V0 IHRyYW5zZmVycmVk IGJ1cnN0 YXBvbGlz IE1hZ2F6aW5l IENyYQ== IEJS Z2dlZA== IEhF TWljaA== YmV0 IExhZHk= eWx1bQ== ZXJ2ZXM= IG1lZXRz d2hpdGU= TG9n IGNvcnJlc3BvbmRpbmc= IGluc2lzdGVk R0c= IHN1cnJvdW5kZWQ= IHRlbnM= IGxhbmU= IGNvaW5j aG9tZQ== IGV4aXN0ZWQ= ZWN0ZWQ= IERvdWJsZQ== bGFtbQ== IHNrZXB0 ZXhw IHBlcmNlcHRpb24= aWV2 IEJlaW5n b2Z0 IGFkb3B0 Ljo= XTs= V2luZG93cw== IHNhdGVsbGl0ZQ== QVNI IGluZmFudA== ZGVzY3JpcHRpb24= IE1lYW53aGlsZQ== Y20= b2Nh IFRyZWF0 YWN0b3I= IHRvYmFjY28= IE5vcm0= ZW1wdGlvbg== IGZsZXNo IGpl b29w IEhlYXZlbg== IGJlYXRpbmc= YW5pbQ== IGdhdGhlcmluZw== IGN1bHRpdg== R08= YWJl IEpvbmF0aGFu IFNhZmV0eQ== IGJhZGx5 cHJvdA== IGNob29zaW5n IGNvbnRhY3RlZA== IHF1aXQ= IGRpc3R1cg== IHN0aXI= IHRva2Vu RGV0 IFBh IGZ1bmN0aW9uYWxpdHk= MDAz c29tZQ== IGxpbWl0YXRpb25z IG1ldGg= YnVpbGQ= Y29uZmln TlQ= cmVsbA== YmxlbQ== IE1vbQ== IHZldGVyYW5z IEh1 IHRyZW5kcw== YXJlcg== IEdpdmVu IENhcHRpb24= bWF5 QVNU IHdvbmRlcmluZw== IENsYXJr bm9ybWFs IHNlcGFyYXRlZA== IGRlc3A= c3RpYw== YnJldw== IHJlbGF0aW5n IE5paw== IEZhcm0= IGVudGh1c2k= Z29vZA== ZGVi IGFjdGl2aXN0 IG1hcnQ= IGV4cGxvc2lvbg== IEVjb25vbWlj TGluaw== IGluc2lnaHQ= IGNvbnZlbmllbnQ= IGNvdW50ZXJwYXJ0 c3VwcG9ydA== IFZpcnQ= YWdlbg== IFRlbm5lc3NlZQ== IFNpbW9u IEF3YXJk T0NL IEZpZ3VyZQ== IG92ZXJzZWFz IHByaWRl IENhcw== bm90ZQ== bWc= Q3VycmVudA== IGRpc3BsYXlz Y29udGVudA== IHRyYXZlbGluZw== IGhvc3BpdGFscw== IEZpbmFuY2lhbA== IFBhc3Q= IGRlZmVuZGFudA== IHN0cmVhbWluZw== bWJsZQ== IEJlcmxpbg== dWtp IGRpc3RyaWJ1dA== IGFudGli IGNob2NvbGF0ZQ== IENhc3RsZQ== IGludGVycnVwdA== IFJvdw== IGNvbnZlcnNpb24= IGJ1Z3M= IFJhdGhlcg== bGllc3Q= TFk= IEplYW4= Y29tbW9u YWto IDEzMA== b3R0b24= IERlYW4= IGFtZW5kbWVudA== IGdhbWVwbGF5 IFdhcnJlbg== b2Rh IGhpZ2hsaWdodHM= IGlycmU= IE5BVE8= IGJhbGxz IGRlbWFuZGluZw== VVJF IEx1a2U= RmlndXJl c3RvcA== b25pYQ== em9uZQ== aXplcnM= IFdS IGF3YXJkZWQ= IHJlZ3VsYXRvcnk= IEhhcnQ= IFNO cGxpbmc= IHNvdXI= IFBpeGVs dXNpdmU= IGZldA== IFNlbnQ= IGF1dG9tYXRpYw== IGZlcg== dmVybm1lbnQ= IEtoYW4= VE9O ZmF0aGVy IGV4dHJhb3JkaW5hcnk= dGhyb3A= IFB5dGhvbg== IEdQVQ== IHNleHVhbGx5 IGRlc2t0b3A= aXRpdml0eQ== IEFudG9uaW8= IG9yaWVudA== IGVhcnM= b2JieQ== b3VzZXM= dmVydGlzZW1lbnRz IG1hbnVmYWN0dXJlcnM= aWNpZW50 bWludXRl IGNvbnZpY3Rpb24= IGdhcmRlbg== cHVibGlj IHNhdGlzZmllZA== Zm9sZA== T0s= IGluaGFi IFRoaW5r IHByb2dyYW1tZQ== IHN0b21hY2g= IGNvb3JkaW4= IGhvbHk= IHRocmVzaG9sZA== IHJoZXQ= IHNlcmlhbA== IGVtcGxveWVycw== IEV2ZXJ5dGhpbmc= cmFo IGJvdGhlcg== IGJyYW5kcw== VmFsdWU= IFRlZA== IFBsYW5ldA== IHBpbms= IEZ1cnRoZXJtb3Jl c2E= UEU= cmVjaw== IFVTRA== b3R0ZQ== ICYm IGxhbmRlZA== Z2V0cw== IHByb2R1Y2Vycw== IGhlYWx0aGNhcmU= IGRvbWluYW50 IGRlc3Rybw== IGFtZW5kZWQ= Y2hyb24= IGZpdHM= IFN5ZA== IEF1dGhvcml0eQ== QVRDSA== IGZpZ2h0cw== IExMQw== IC0tLQ== IENvcnA= IHRveGlj c3BlY2lmaWM= IENvcm4= IENoZWw= IHRlbGVwaG9uZQ== IFBhbnQ= IG15c3RlcmlvdXM= YXVuY2g= b2RveA== bWVkaWE= IHdpdG5lc3Nlcw== YWd1 IHF1ZXN0aW9uZWQ= IEJyZXhpdA== IFJlbWVtYmVy ZW5leg== IGVuZG9yc2U= aWF0cmlj IElkZW50 IHJpZGljdWxvdXM= MTEw IHByYXllcg== IHNjaWVudGlzdA== IDE5NTA= IEFxdQ== IHVuZGVyZ3JvdW5k IFVGQw== bWFyZQ== IExhdGVy d2ljaA== IHN1YnNjcmli IGhvc3Rz IGVycg== IGdyYW50cw== YW50b20= IHN1bW1vbg== ZWFybHk= IENsZWFy IFByaW0= IHN1c3BlbnNpb24= IGd1YXJhbnRlZWQ= YXBwZXI= IHJpY2U= IFNlYW4= IFNoaW4= IHJlZmVyZW5kdW0= IGZsZWQ= cnVzdA== IDM2MA== dGVyeQ== IHNob2NrZWQ= QlI= IE9pbA== IEFsbGFo IHBhcnRseQ== IGlnbm9y IHRyYW5zbWlzc2lvbg== IGhvbW9zZXh1YWw= aXZlcnNhbA== IGhvcGVmdWxseQ== 44Kk IGxlc3Nvbg== TGVn IC4u WWV0 dGFibGU= YXBwcm9wcmk= cmV0dA== IGJvYXJkcw== IGluY29ycmVjdA== IGJhY3Rlcmlh YXJ1 YW1hYw== IHNuYXA= Lici IHBhcmFk dGVt aGVhcnQ= IGF2YWlsYWJpbGl0eQ== IHdpc2RvbQ== ICgr IHByaWVzdA== IMKgIMKg T3Blbg== IHNwYW4= IHBhcmFtZXRlcg== IGNvbnZpbmNl ICglKQ== cmFj IGZv IHNhZmVseQ== IGNvbnZlcnRlZA== IE9seW1waWM= IHJlc2VydmU= IGhlYWxpbmc= IE1pbmU= TWF4 IGluaGVyZW50 IEdyYWhhbQ== IGludGVncmF0ZWQ= RGVt IHBpcGVsaW5l IGFwcGx5aW5n IGVtYmVk IENoYXJsaWU= IGNhdmU= MjAwOA== IGNvbnNlbnN1cw== IHJld2FyZHM= UGFs IEhUTUw= IHBvcHVsYXJpdHk= bG9va2luZw== IFN3b3Jk IEFydHM= Jyk= IGVsZWN0cm9u Y2x1c2lvbnM= IGludGVncml0eQ== IGV4Y2x1c2l2ZWx5 IGdyYWNl IHRvcnR1cmU= IGJ1cm5lZA== dHdv IDE4MA== UHJvZHU= IGVudHJlcHJlbmU= cmFwaGljcw== IGd5bQ== cmljYW5l IFRhbQ== IGFkbWluaXN0cmF0aXZl IG1hbnVmYWN0dXJlcg== IHZlbA== IE5p IGlzb2xhdGVk IE1lZGljaW5l IGJhY2t1cA== IHByb21vdGluZw== IGNvbW1hbmRlcg== IGZsZWU= IFJ1c3NlbGw= IGZvcmdvdHRlbg== IE1pc3NvdXJp IHJlc2lkZW5jZQ== bW9ucw== IHJlc2VtYg== IHdhbmQ= IG1lYW5pbmdmdWw= UFQ= IGJvbA== IGhlbGlj IHdlYWx0aHk= IHJpZmxl c3Ryb25n cm93aW5n cGxhbg== YXN1cnk= 4oCmLg== IGV4cGFuZGluZw== IEhhbWlsdG9u IHJlY2VpdmVz U0k= ZWF0dXJlcw== IEFuaW0= UkVF UHV0 IGJyaWVmbHk= cml2ZQ== IHN0aW11bA== IGBgKA== IF9f IGNoaXA= IGhheg== IHByaXpl IFRoaW5ncw== QUNF dWxpbg== ZGljdA== b2t1 IGFzc29jaWF0ZQ== b2NrZXRz eW91dHViZQ== U3Rvcnk= YXRlZ29yeQ== IG1pbGQ= YWlsaW5n IFll T3JpZw== IEth b3JpZw== IHByb3BhZ2FuZGE= IGFub255bW91cw== IHN0cnVnZ2xlZA== IG91dHJhZ2U= QVRFRA== IEJlaWppbmc= cmFyeQ== IGxlYXRoZXI= IHdvcmxkcw== IGJyb2FkZXI= MTI1 aWRhbA== IEJldHRlcg== IHRlYXI= RXh0 IHByb3Bvc2Fscw== IGl0ZXI= IFNxdWFk IHZvbHVudA== bWk= RGlk IFB1 cGlu IHNwZWFrZXJz IGJvcmRlcnM= IGZpZ3VyZWQ= PSc= IHNpbXVsdGFuZW91c2x5 YWVkYQ== IGNoYXJnaW5n IHVyZ2Vk IGNvbmo= MjU2 IEdvcmRvbg== bWVyY2U= IGRvY3VtZW50YXJ5 U2hhcmU= aXRvbA== T05F IEdhcmRlbg== aGF0dA== IFRob21wc29u YW5lb3Vz YXBvcmU= IHRhbmtz IGxlc3NvbnM= dHJhY2s= IG91dHN0YW5kaW5n IHZvbHVudGVlcnM= IHNwcmF5 IG1hbmFnZXJz bGFyZ2U= IGNhbXBz IGFydGlmaWNpYWw= IFJ1 IGJhZ3M= dGhhbA== IGNvbXBhdGlibGU= IEJsYWRl IGZlZA== IGFyZ3Vlcw== Rkk= IHVuZmFpcg== IGNvcm4= IG9mZnNldA== IGRpcmVjdGlvbnM= IGRpc2FwcG9pbnRlZA== IENvbnZlbnRpb24= IHZpZXdpbmc= TUU= b2NpdHk= IHRvd25z IGxheWVycw== IHJvbGxlZA== IGp1bXBlZA== IGF0dHJpYnV0ZQ== IHVubmVjZXNz aW5jb2xu IHN1cHBvc2U= IE5ldGhlcg== Y2hh IGJ1cmllZA== IHNpeHRo QmVu cmVzc2luZw== T1VS IHdvdW5k IGN5Y2w= IG1lY2hhbmlzbXM= IGNvbmdyZXNzaW9uYWw= IEVsZW1lbnQ= IGFncmVlbWVudHM= IGRlY29y IGNsb3Nlc3Q= IE1pdA== R29vZ2xl fX0= IG1peHR1cmU= IGZsdWlk U2lnbg== IFNjaG9sYXI= IHBpc3Q= YXNrZXQ= YWJsaW5n IHJhY2luZw== aGVybw== cmllbA== YXNzeQ== IGNoZWFwZXI= YmVu IHZlcnRpY2Fs YW1hY2FyZQ== IFJlYWRpbmc= Z21lbnRz IGhlbGljb3A= IHNhY3JpZmljZQ== YXlh cGFyZW4= VkE= IExlcw== IFN0dWRpbw== IHZpb2xhdGlvbnM= IEFubmE= YWNlcg== 6b4= IFJhdA== IEJlY2s= IERpY2s= IEFDVA== IGNvbXBvc2l0aW9u IHRleHR1cmU= IE93bg== IHNtYXJ0cGhvbmU= IE5B IGZvcmI= aW1wb3J0 IGRlZmVuZGluZw== aWxzdA== cmVy IG9o IEplcmVteQ== IGJhbmtpbmc= Y2VwdGlvbnM= IHJlc3BlY3RpdmU= Ly4= IGRyaW5rcw== IFdp IGJhbmRz IExpdmVycG9vbA== IGdyaXA= IEJ1eQ== IG9wZW5seQ== IHJldmlld2Vk cGVydA== IHZlcmlmeQ== IENvbGU= IFdhbGVz TU8= IHVucHJl IHNoZWx0ZXI= IEltcGVyaWFs IGd1aQ== IERhaw== IHN1Z2dlc3Rpb25z IGV4cGxpY2l0bHk= IHNsYXZl IGJsb2NrY2hhaW4= IGNvbXBldGluZw== IHByb21pc2luZw== U09O IHNvY2Nlcg== IGNvbnN0aXR1dGlvbg== NDI5 IGRpc3RyYWN0 IFVzZXI= ZXNpZGVz IE1ldGhvZA== IFRva3lv IGFjY29tcGFuaWVk Q2xpZW50 c3Vy YWxvZw== IGlkZW50aWZpY2F0aW9u IGludmFzaW9u YXNtYQ== IGluZHVzdHJpZXM= cHBlcnM= IHN1YnRsZQ== IFVuaXQ= bmF0dXJhbA== IHN1cnZpdmVk IGZsYXc= mIU= IEhvbGw= IGRlZmljaXQ= IHR1dG9yaWFs IENoYW5jZQ== IGFyZ3Vpbmc= IGNvbnRlbXBvcmFyeQ== IGludGVncmF0aW9u Zm9yd2FyZA== IHR1bQ== aXRpcw== IGhpZGluZw== IERvbWlu IFRhbg== IEJ1aWxkaW5n IFZpbg== IHNwb2tlc3BlcnNvbg== IE5vdGVz IGVtZXJnaW5n IHByZXBhcmF0aW9u IHByb3N0 IHN1c3BlY3Rz IGF1dG9ub20= RGVzY3JpcHRpb24= IGRlYWx0 IFBlYXI= IHN0ZWFkeQ== IGRlY3JlYXNlZA== IHNvdmVyZQ== IENsaW4= IGdyYWR1YWxseQ== b3JzZXM= IFdBUg== U2Vydg== 44Ki aHI= IGRpcnR5 IEJhcm4= IEJD IGRpbA== IGNhbGVuZGFy IGNvbXBsaWFuY2U= IGNoYW1iZXI= YmI= IHBhc3Nlbmdlcg== YXRlZnVs IFRpdGxl IFN5ZG5leQ== IEdvdA== IGRhcmtuZXNz IGRlZmVjdA== IHBhY2tlZA== YXNzaW9u IGdvZHM= IGhhcnNo SUNL bGVhbnM= IGFsZ29yaXRobQ== IG94eWdlbg== IHZpc2l0cw== IGJsYWRl IGtpbG9tZXQ= IEtlbnR1Y2t5 IGtpbGxlcg== UGFjaw== ZW5ueQ== IGRpdmluZQ== IG5vbWluYXRpb24= YmVpbmc= IGVuZ2luZXM= IGNhdHM= IGJ1ZmZlcg== IFBoaWxs IHRyYWZm QUdF IHRvbmd1ZQ== IHJhZGlhdGlvbg== ZXJlcg== bWVt IEV4cGxpY2l0 6b6N IGNvdXBsZXM= IHBoeXNpY3M= IE1jSw== IHBvbGl0aWNhbGx5 YXdrcw== IEJsb29t IHdvcnNoaXA= ZWdlcg== dXRlcg== IEZP IG1hdGhlbWF0 IHNlbnRlbmNlZA== IGRpc2s= IE1hcmc= IC8q UEk= IG9wdGlvbmFs IGJhYmllcw== IHNlZWRz IFNjb3R0aXNo IHRoeQ== XV0= IEhpdGxlcg== UEg= bmd0aA== IHJlY292ZXJlZA== aW5nZQ== IHBvd2Rlcg== IGxpcHM= IGRlc2lnbmVy IGRpc29yZGVycw== IGNvdXJhZ2U= IGNoYW9z In0seyI= IGNhcnJpZXI= YmFibHk= SGlnaA== IFJU ZXNpdHk= bGVu IHJvdXRlcw== dWF0aW5n Rmls Tk9U d2FsbA== c2J1cmdo IGVuZ2FnaW5n IEphdmFTY3JpcHQ= b3Jlcg== bGlob29k IHVuaW9ucw== IEZlZGVyYXRpb24= IFRlc2xh IGNvbXBsZXRpb24= IFRh IHByaXZpbGVnZQ== IE9yYW5nZQ== IG5ldXI= cGFyZW5jeQ== IGJvbmVz IHRpdGxlZA== IHByb3NlY3V0b3Jz IE1F IGVuZ2luZWVy IFVuaXZlcnNl IEhpZw== bmll b2FyZA== IGhlYXJ0cw== IEdyZQ== dXNzaW9u IG1pbmlzdHJ5 IHBlbmV0 IE51dA== IE93 IFhQ aW5zdGVpbg== IGJ1bGs= U3lzdGVt aWNpc20= IE1hcmtldGFibGU= IHByZXZhbA== IHBvc3Rlcg== IGF0dGVuZGluZw== dXJhYmxl IGxpY2Vuc2Vk IEdo ZXRyeQ== IFRyYWRhYmxl IGJsYXN0 4KQ= IFRpdGFu ZWxsZWQ= ZGll SGF2ZQ== IEZsYW1l IHByb2ZvdW5k IHBhcnRpY2lwYXRpbmc= IGFuaW1l IEVzcw== IHNwZWNpZnk= IHJlZ2FyZGVk IFNwZWxs IHNvbnM= b3duZWQ= IG1lcmM= IGV4cGVyaW1lbnRhbA== bGFuZG8= aHM= IER1bmdlb24= aW5vcw== IGNvbXBseQ== IFN5c3RlbXM= YXJ0aA== IHNlaXplZA== bG9jYWw= IEdpcmxz dWRv b25lZA== IEZsZQ== IGNvbnN0cnVjdGVk IGhvc3RlZA== IHNjYXJlZA== YWN0aWM= IElzbGFuZHM= IE1PUkU= IGJsZXNz IGJsb2NraW5n IGNoaXBz IGV2YWM= UHM= IGNvcnBvcmF0aW9u IG94 IGxpZ2h0aW5n IG5laWdoYm9ycw== IFVi YXJv IGJlZWY= IFViZXI= RmFjZWJvb2s= YXJtZWQ= aXRhdGU= IFJhdGluZw== IFF1aWNr IG9jY3VwaWVk IGFpbXM= IEFkZGl0aW9uYWxseQ== IEludGVyZXN0 IGRyYW1hdGljYWxseQ== IGhlYWw= IHBhaW50aW5n IGVuZ2luZWVycw== TU0= IE11c3Q= IHF1YW50aXR5 UGF1bA== IGVhcm5pbmdz IFBvc3Rz c3RyYQ== 44O844M= IHN0YW5jZQ== IGRyb3BwaW5n c2NyaXB0 IGRyZXNzZWQ= TWFrZQ== IGp1c3RpZnk= IEx0ZA== IHByb21wdGVk IHNjcnV0 IHNwZWVkcw== IEdpYW50cw== b21lcg== IEVkaXRvcg== IGRlc2NyaWJpbmc= IExpZQ== bWVudGVk IG5vd2hlcmU= b2NhbHk= IGluc3RydWN0aW9u Zm9ydGFibGU= IGVudGl0aWVz IGNt IE5hdHVyYWw= IGlucXVpcnk= IHByZXNzZWQ= aXpvbnQ= Zm9yY2Vk IHJhaXNlcw== IE5ldGZsaXg= IFNpZGU= IG91dGVy IGFtb25nc3Q= aW1z b3dza2k= IGNsaW1i bmV2ZXI= IGNvbWJpbmU= ZGluZw== IGNvbXBy IHNpZ25pZmljYW5jZQ== IHJlbWVtYmVyZWQ= IE5ldmFkYQ== IFRlbA== IFNjYXI= IFdhcnJpb3Jz IEphbmU= IGNvdXA= YmFz IHRlcm1pbmFs LC0= T0g= IHRlbnNpb24= IHdpbmdz IE15c3Rlcg== 77+977+977+977+9 IFVubGlrZQ== dmFsaWQ= dmlyb25tZW50cw== IEFsaQ== IG5ha2Vk Ym9va3M= IE11bg== IEd1bGY= IGRlbnNpdHk= IGRpbWlu IGRlc3BlcmF0ZQ== IHByZXNpZGVuY3k= IDE5ODY= aHk= SU5E IHVubG9jaw== aW1lbnM= IGhhbmRsZWQ= IEVi IGRpc2FwcGVhcmVk IGdlbnJl IDE5ODg= IGRldGVybWluYXRpb24= U3RyZWFt aWtv YXB0ZXJz IGFja25vd2xlZGdl SmFu IGNhcGl0YWxpc20= UGF0 IDIwMjA= IHBhaW5mdWw= IGN1cnZl IGJvbWJz c3Rvcm0= IE1ldGFs ZW5jZXI= IEZpZw== IEFhcm9u YW5jaGVz IGluc3BpcmF0aW9u IGV4aGF1c3Q= dGFpbnM= YXNoaQ== IGRlc2NyaXB0 IHJpdHVhbA== IENoZWxzZWE= IHByb21vdGlvbg== IEh1bmc= IFdhcmQ= aXZh IEVU IHRvc3M= YWxsb3c= IEZyYW5jaXM= RGVw IGhhcHBpbmVzcw== IEdsYXNz IGJldGE= IHN0cmVuZ3RoZW4= TkU= b2E= IGJ1dHRvbnM= IE11cnJheQ== IGtpY2tlZA== UXVlc3Q= IFRhbGs= IFNldmVyYWw= IFplcm8= IGRyb25l dWxr IGNhbQ== IE1vYmlsZQ== IHByZXZlbnRpbmc= IHJldHJv IEF4 IGNydWVs IGZsb2F0 Liks IGZpbGluZw== IEdyYW50 IEJvcg== IHJpYg== IGNoYW1waW9uc2hpcA== IE1lcmM= IHN0eWxlcw== IGNha2U= IGJ1aWxkcw== IFNlbGY= aW94 IGVwaWM= b3lk QmVs IFN0ZXc= Lig= YWh1 IEJleW9uZA== IG91dHM= IHNvbG8= IFRyZWU= IHByZXNlcnZl IHR1Yg== QVJF cm9j IEltcHJv IFdyaWdodA== IGJ1bmQ= IHRyYWdlZA== IG9jY2FzaW9uYWw= Ymlhbg== U2Vjb25k cm9ucw== IGludGVyYWN0aW9ucw== Zm9ybWVk c2luZw== IG93bnM= IGhvY2tleQ== R2VuZXJhbA== IGxvZ2ljYWw= IGV4cGVuZA== IGVzY2Fs IEdyaWZm IENyb3du IFJlc2VydmU= IHN0b3BwaW5n IGV4Y3VzZQ== c2Vjb25k IG9wZXJhdGVk IHJlYWNoZXM= IE1hbGF5cw== IHBvbGx1dGlvbg== IEJyb29rbHlu IGRlbGV0ZQ== IGhhc2g= QmxvY2s= YWhh 4oCz IHNob3J0ZXI= cGllY2U= Pjwv IGhvcm0= IFdhdA== IEJyZWFr IHByb2hpYml0ZWQ= IGludGVuc2l0eQ== IEFsYW4= IGxpYWJpbGl0eQ== PyE= YW5kZWQ= IG5laWdoYm91cg== IENvbGxlY3Rpb24= IGZpcmVz IHJldm9sdXRpb25hcnk= Zmx5 IE9ybGVhbnM= V2hpdGU= IFdyaXQ= IERhd24= IHNldHRsZQ== IGV4ZWN1dGU= Qk0= IHNwb2tlc3dvbWFu IGxpZmVzdHlsZQ== IGNsaWNraW5n IEtpbGw= IExpYmVyYWw= IE5hemk= IHRyYWlsZXI= IG1vdW50YWlucw== IGRhbW4= emVz cGVz IHByZXNzaW5n IGJhaWw= IE9yZ2FuaXphdGlvbg== IHBpcg== IHRoaXJ0eQ== IGVsZWN0cmljYWw= IDExNQ== IFBvbHk= IFJhcA== IFN0cmlrZQ== IENhbm4= IGRlbWFuZGVk IGJhY2tpbmc= ZGVmYXVsdA== c3BlZWQ= IExlZ2lzbA== IG1vdGhlcnM= IEJvZHk= IHZhcmlhdGlvbg== Y2VkZW50ZWQ= cG93ZXJlZA== bGVhZGluZw== TmV2ZXI= IGdyYXZl IEFudGk= QVc= IGludGVydmlld2Vk IEdhYg== IEZhdA== IHJvb2tpZQ== dXU= IGRlcG9z aXhvbg== IGFtcGw= cmV0aW9u IEhlYXQ= IHBlYWNlZnVs U00= aWV2ZQ== IGRpdmVy IFZpY3Rvcmlh IG1pYw== cGRm IHN0YXRpbmc= IGx1bmc= IGNyaXRpY2l6ZWQ= IHZhY2NpbmU= IExvYWRpbmc= dXJzZQ== VGFrZQ== IEZyYW4= IFNvbGQ= IFJvYmlu IGRldGVjdGVk IFNjcmlwdA== IGFkanVzdGVk IHNlbmF0b3I= IG9wcG9zaW5n RXJyb3I= Q291bnQ= IGNvbmZsaWN0cw== IG93 IEFyZ2VudA== IG1hdGNoaW5n aGg= IFRyZWs= c3RhcnRlcg== Iiks IEFG b2Rlcg== eHh4eA== IEFsdA== YWNyZQ== IFBpY2s= IFNvbGFy IERhbA== T2N0 IEJhdHQ= IHNyYw== IGVuZ2FnZW1lbnQ= IGV4ZWN1dGl2ZXM= IGxpYmVydHk= amF2YQ== IHRhbGVudGVk aWdlbm91cw== IGNvbnNlY3V0 Li4uLi4= SW5mbw== IGhvcnJpYmxl IHN1cnByaXNpbmdseQ== ZmVlZA== aWNhdGluZw== IExFRA== IGZlbWFsZXM= U3RhdGlvbg== ZWxsZXI= IE9ha2xhbmQ= IG1lY2hhbmljYWw= aW9sb2d5 IFZhcg== IHJvYnVzdA== ZXR0aW5ncw== b3R0YQ== IHRoZW9yZXQ= IHJldGFpbg== a3dhcmQ= IGRh IGRlcGxveWVk ZGVs IEFuZHk= IHN1YnNjcmliZQ== d2Vi IG5h IE1pY2hlbA== IHBhcnRpYWxseQ== IENvbWV5 IGNyb3du IE1hag== IEJsdQ== cmF0b3I= RGF5 SU5U IGRvY3VtZW50ZWQ= IEdEUA== Z2k= Y2hlbGw= IGJydXRhbA== IEJhYg== c3RyYXRpb24= IHRoZWZ0 IHR1YmU= QEA= IHF1ZXJ5 IExpbmNvbG4= IHB1Ymxpc2hpbmc= IHdvcmU= b3JpY2Fs IHJpYw== IG5vdGFibGU= IHN1YnNlcXVlbnRseQ== bmV4 IG9ic2VydmU= IEJvZQ== IGNvZGVz bWFpbg== V0g= IFNM IHJlc2lkZW50aWFs YXZhbg== IG1hcw== YXJlc3Q= YWRlb24= T1VU IHNvcGhpc3RpYw== YW50ZQ== IGNlbnM= ICoq IG1vcnRhbGl0eQ== IHlvdXJz IG9jY2FzaW9ucw== IHJlY2FsbGVk IERyaXZlcg== IHZvY2Fs IGJhdGhyb29t IHNob3Bz IGNvbGxhYm9yYXRpb24= IE9iYW1hY2FyZQ== IENlbGw= Q2hhcg== U3VwZXI= Q3Jl IHRlbmRz IHRvcm4= IGVjb25vbWljcw== YXZlcnk= IFJhaWQ= IFNlbQ== IHNob3VsZGVycw== IGV4cGVjdGluZw== IGV4YW1pbmF0aW9u ZW5hbWU= IFVJ aWFiaWxpdHk= b2xhcw== IEFtYg== IERyYQ== IG1pZGZpZWxk IElD IGxheW91dA== IGZsb2F0aW5n Zmk= aXRhdGl2ZQ== IHRyZW1lbmRvdXM= INA= IGFidW5k V29yaw== IExpZ2h0bmluZw== IHNpbWlsYXJseQ== IGNvbnNlcnZhdGl2ZXM= IHByYXk= QkU= aXphcnJl IHRlbXB0 IGVtcGhhc2lz IE1ldHJv IGZpc2hpbmc= IG1hcnJ5 bmVn IFN0dWR5 IHJlY2s= IGRpc3Bvcw== b25pbmc= YnNpdGU= IHN1c3BpYw== IG1lcmNo IEdpYg== IERlc2NyaXB0aW9u IERWRA== d2hl IFllbWVu IGVudmlyb25tZW50cw== b290aW5n IE1vZGVybg== ZXU= IHJlZmxlY3Rz IGhvbmV5 IGFuYWx5c3Q= IGd1dA== ZGVj QWN0aW9u IGhvdXNlaG9sZHM= IHN0ZXI= IHRlbXBsZQ== IHJlZm9ybXM= IGZhdm91cml0ZQ== IGRlYWRsaW5l IExF VGhyZWU= IFdpdGhpbg== QXVn IG5pZ2h0cw== ZWx0YQ== IGludmFsaWQ= IEV4Y2hhbmdl IERlbGhp d2hlbg== aW5jb21l IPCf IHdpcmVsZXNz c2NyaWJl aXN0YQ== IGhvc3RpbGU= IGFsbHk= IGdpZw== IG91dGxldHM= IERvcg== RU1FTlQ= IGFzaA== IGFic3RyYWN0 T1JE IE1vdG9y IGFkdmlzZXI= aXN0bGU= IGJhc2Vz IGNvdXJ0ZXN5 IGNyb3NzaW5n IGNsZWFyZWQ= IHJlZnVnZWU= Y29zeXN0ZW0= IHRocm93cw== ZnVu Ym91cm5l ZGF5cw== IGRpc2FncmVl IE5hdGl2ZQ== IHJlZmxlY3RlZA== IEZhc3Q= IFllbGxvdw== IFNpbmdhcG9yZQ== IFJhdmVu IGVtYnJhY2U= IEt1 IENoZW4= IEVhcmx5 IGFwcG9pbnRtZW50 IE1pbmk= aXRlbWVudA== IHBsYWNpbmc= IGJpY3k= U1I= IHdoaXM= U1U= IGludmVzdGlnYXRlZA== IHBob3RvZ3JhcGhz Z2l0aHVi IEJlYXQ= IFJpbmc= aWdoZWQ= aWFy IGV2b2x2ZWQ= ZXJhbGQ= IGR1bg== IGh1Yg== SUFM IGVuY291cmFnaW5n IFByaW50 IERheXM= IHByb3NlY3V0aW9u IHBhbnRz YXp5 bGl2ZQ== IGZvc3NpbA== IEp1 IHJvY2tz dWRnZQ== IFJhY2U= IGdyZWV0 Ymll IGZpbGxpbmc= IExlbg== IGRpYWJldGVz IGZpcmVhcm1z dW1pbmc= ZW5lenVlbA== IEJC IGFjY2VwdGluZw== QVRI IHJlc29ydA== IGh1bnQ= cmlr dWNrZXI= YW1lbnRz IHN1c3RhaW5lZA== IGNyb3NzZWQ= IGJyZWFrZmFzdA== IGF0dHJpYnV0ZXM= bGVjdGVk YXRpbGU= IHZpYnI= IEthbA== YXJzb24= b3BsZXM= IHRvdWNoZWQ= IGRhbWFnZXM= IGltcHJlc3NlZA== cnVw IGFuY2g= IEFkYW1z SGVs IFZpY3Rvcg== IG1vdW50ZWQ= IEND IGRlbGljaW91cw== c3Bhbg== ZWxsYQ== IGVsYWJvcg== YW1wbGVz IGRlZmlj IGNvbnN0aXR1 dWF0ZXM= IE1pc3Npb24= IFRoZXI= IE1vbnN0ZXI= YmVz UmV1dGVycw== IEluZG9uZXM= aGlsbA== bXVuaXRpb24= IGNvbmZpcm1hdGlvbg== IENvbnNpZGVy YWNlbnQ= IGpldA== IEVtcGxveQ== IEdUWA== bmFu IFNwaWRlcg== IHByb2Nlc3Nvcg== IHBhdHJp IFBlbnRhZ29u IFJvYmluc29u IHJlYWxpc3RpYw== w7E= IGFwcGVhcmluZw== IHBpcGU= b21lZA== IGZydQ== IGF3ZnVs IGV2YWx1YXRpb24= IGludGVsbGlnZW50 IENpdGl6 IGZ1bmRyYQ== b2RpdW0= IHR3ZWV0cw== IHdvcm4= cHJpbmc= IGtpZG4= IHJlYmVscw== IEthbQ== IE5ldGhlcmxhbmRz IFNX IGFjcXVpc2l0aW9u IE1hbGU= 44Oq b21iaWVz IHRyYWRlbQ== IFN0YXR1cw== QnJl IFRISVM= IGFkdmVyc2U= IE5FVw== c2lnbg== IG9yZ2FuaXNhdGlvbg== ZW5j IEhhcnBlcg== YXBvcg== IE1lbWJlcnM= IFBlYWNl IEFpcnBvcnQ= IE90aGVycw== IHNjcmF0Y2g= IFBpbA== IHNlbnNvcg== IGFkb3B0aW9u IEhvdGVs IERyYWc= IGhvbmVzdGx5 IHlhcmQ= IEZvcmNlcw== IHBhdGVudA== IGJhc3M= IHF1aWV0bHk= IGJyZWF0aGluZw== IHBvc2U= aW9ycw== IEplc3M= c3RhdGlj SVRF T2ZmaWM= IGpldw== d2Nz IDE0MA== IHByZXZpZXc= aXBwaQ== IHVuZm9ydHVuYXRlbHk= b2tlbW9u IGhvcm4= IHJlYXNz IHBlZXI= b2NrZXI= IHVudG8= IEdyYXk= IGNsZWFuaW5n IGF0dHJhY3RlZA== MjAwNw== UG9pbnQ= a2lsbA== IEFncmVlbWVudA== dXJjaGVz IGhvcnI= IE1pc3Npc3M= IHdvcnRoeQ== IGZsb3dlcnM= dG93bg== ZGxs IHJlYWN0aW9ucw== IGRlY2U= IGluZGljYXRpbmc= TUQ= IHByZWZlcmVuY2U= IE1WUA== ZXNzaW9uYWw= IFRhcmdldA== Z2VuY2U= IEluZGlhbnM= IG1pc2M= IGZyZWVseQ== IG11c2NsZXM= IGxpbmV1cA== IGltcGFjdHM= b3VzaW5n b21p YWN1bGFy IGNvbnRyb2xsaW5n YWdpbmU= Y2VyeQ== aGVsbA== IHJhbmtpbmc= IE5pY2g= IEF2ZQ== MTI4 IGhpZ2h3YXk= IGluY29ucw== IGJpbmRpbmc= IHN0cnVnZ2xlcw== IFBpdHRzYnVyZ2g= IGdyYXk= cmlu IGNvbWljcw== IFNwb3J0 IHJlbGF0aXZlcw== IGZyaWdodA== IHByb2Jl IFBvcnR1Zw== IHZvYw== IHR1 IENvcnBz IHBvc3NpYmlsaXRpZXM= IHF1YWxpZnk= d2Nzc3RvcmU= IGxpYnJhcmllcw== IG1pZ3JhbnRz IGVudHJpZXM= IGNvbnNlY3V0aXZl dmFscw== IENoYWlybWFu IGhpbGw= SU1F IEdhcmQ= IGluZXF1YWxpdHk= Zm94 IFNhdmU= IGNvcnQ= Y2xhaW1lZA== IHRyYWl0cw== IHBvdXI= IG1pc3NpbGVz IGVzc2VuY2U= IHNlbmRz IGFsbGlhbmNl IHdpc2hlcw== IENocmlzdG9waGVy Qmln Tlk= IEphY29i c2Fu dXJyZWQ= IFNP bGx5 IGFkdm9jYXRl IEJvbmQ= ICIv VXNpbmc= IGRpc3RyaWN0cw== IEdhdGU= IEJpcg== cmlkZ2U= IE5heg== IFJz Ym9hcmRz IEdh IFJlYWdhbg== IGluZmx1ZW5jZWQ= MTAwMA== YXB5 IGNoYWxsZW5nZWQ= IGJhcmc= IGZhY3VsdHk= IEZpZg== IGFjcXVpcmU= QWM= IGluc2VjdA== IGluc3RydW1lbnRz IGxlYWY= dGhvZG94 TWVzc2FnZQ== IHRhbGU= IHRoZXJlYnk= IHRyYXA= IHN0cm9uZ2VzdA== IE1pbGl0YXJ5 aXNpYmxl IDE5ODQ= ZXRoZWxlc3M= IGZsZXhpYmxl IGtpbGxz IGZpbmlzaGluZw== IFNpemU= IHJlZHVjZXM= IGVwaWQ= IG9yaWVudGF0aW9u ZnVsbA== IHRyYWNl IGxhc2Vy IG9wcG9zZQ== IGVkaXRpbmc= IG1vbWVudHVt 5Lo= c2hvdw== Vkk= IExhZA== IDE5ODU= IG11cmRlcmVk OTAw dXRoZXI= IHByb2JhYmlsaXR5 IFBvbGw= IHJlbHVjdA== IENoZW0= IE1vbnRyZWFs IGFkZXF1YXRl IFBvbGFuZA== IFNoZXJpZmY= dW1waA== IG9r IDAwMA== ICJb IG9wZXJhdG9ycw== IEZlcg== IG1vZGVz IEV2ZQ== IGRpc2NpcGxpbmU= TkVU SGFuZA== IG9yYWw= IFdF ZW1haWw= SlA= IFBhbGVzdGluaWFucw== IGhlbmNl IExlc3M= IG92ZXJs ZGln IGludGltaWQ= IENvYWw= IHJhbmdpbmc= dGhh IGRpc3RhbnQ= IGZpYg== IEluZGV4 IFdvbmRlcg== IFBlbA== aGF0dGFu IEh1Zw== w5c= cmFpdA== IHdyYXBwZWQ= IFJQRw== IGNoZW1pY2Fscw== IE1vbmV5 IGZyb3plbg== IGluZGlyZWN0 IEFnYWluc3Q= RW5k IHVuY29tZm9ydGFibGU= IEdhbGxlcnk= IFBvc3RlZA== 2Kc= b25kdWN0 IGNvbnNlcXVlbmNl IGJpdHRlcg== IDE5ODc= cG9w IGNvdW50bGVzcw== IEFsYXNrYQ== ZmZmZg== IGRlcGFydHVyZQ== IHJlZnVuZA== IElhbg== aWF0ZWQ= IHNlZWtz IG1lY2hhbmljcw== IGp1cmlzZGljdGlvbg== bHlubg== IGFsaWtl IEh1bnQ= YXRob24= IHJlc29sdmVk IGNhY2hl IGRpc3RpbmN0aW9u ZGlyZWN0 IGVuY291bnQ= b3Vi YmVhdA== IENvdW50cnk= c2VhcmNo IGNvbnRpbnVvdXM= IG1vZGVzdA== IFJhaWw= dGhvb2Q= MTMw QlVH IGNyaW1pbmFscw== IGluZGljYXRpb24= IGVuY291bnRlcmVk bGFzdA== IFd5 IGlkZW9sb2d5 IFBERg== c2VjdXJpdHk= XSk= IEppbW15 IEVO IGhpcmluZw== VGVt IHBpZw== YXVudA== IENyeXN0YWw= IHBlbmFsdGllcw== IGNhcGFiaWxpdHk= IHB5 IHByb2R1Y3RpdmU= IGJhbGFuY2Vk IEdlRm9yY2U= Y2xpY2s= b2xpdGFu b2Rz IGFmdGVyd2FyZHM= IHBsYXlvZmZz IEdpbGw= VXNlcg== IGJhY2tz cHVi dGFn IGFic3VyZA== cGlyaW5n IGNpdGluZw== IHRyaWxsaW9u IG9ibGlnYXRpb24= IG1heGlt YWhvbw== Y2Y= dW1p IEFscGhh IE5lbHNvbg== IHB1cnN1YW50 aW5pdGVseQ== IGZyYWN0 ZW50cnk= YmVyeQ== IFRob3I= QWRkZWQ= IERK IEdlbmU= IGF3a3dhcmQ= U3R1ZA== IHdhbGxldA== IERpdmluZQ== YXJpb3M= IHJlbGVhc2luZw== IGVkaXRlZA== IGFjY29tcGxpc2hlZA== QmVzdA== IGVkZ2Vz IHBsYW5lcw== IGZlZWRpbmc= In0sIg== IGRpc2Nsb3N1cmU= IGdyYWlu YWlyeQ== b29ucw== ZXJuYW5k VlI= IHJlYXNvbmFibHk= IGRydW0= IHBhcnRpYWw= IGdyYXBoaWM= IHVucHJlY2VkZW50ZWQ= IGFkdmlzZWQ= TWljcm8= IEFzc2Fk cG9pbnRz c2Nhcg== IFpvbmU= dHRlcw== IDcwMA== dm8= IEhhbXA= IGZpeGVz IGNhdXRpb24= IHN0cmluZ3M= IHBhbmVscw== IGxlYWs= IHByaWNpbmc= cm93dGg= IEVycm9y IFNhaW50cw== Zml4 IG9ic2VydmF0aW9ucw== IEFicw== IHN1Z2dlc3Rpb24= IFVrcmFpbmlhbg== IGJhcnJpZXI= IHBhaW50ZWQ= QmV0 aW1pcg== IFNwZWN0 cG90 b3JuZXlz IGNvbXBvdW5k IGJlYXJz IFJ1c2g= IGx1eHVyeQ== U3Vt IG9yYml0 IE1hcmM= IGV4ZW1wdA== IFRyYWls IE1P IEhhbnM= IFdlYXBvbg== b2N1c2Vk dW1pbnVt IEplcnJ5 IGJ1c3Q= IEFH IFdpa2k= IGVuZGxlc3M= IFZsYWQ= IEJhaA== IFJhZGVvbg== a2V5cw== IFN1cnZleQ== IFZpb2w= ZGVmaW5l bGVhbg== IGNvbW1vZA== IHJldmVudWVz xY0= IGZ1cm5pdHVyZQ== IGNhc3Rpbmc= IGRpcGxvbWF0aWM= IFBsYXllcnM= IEtpbGxlZA== IG1vZGlmeQ== IGlubm92YXRpdmU= IEFidQ== bm9y IGJvbmRz IGNvYWNoaW5n TWVy IG1vZHVsZXM= IFBhdHJpb3Rz IGVuaGFuY2Vk IHByb2NlZWRpbmdz IHRlYW1tYXRlcw== IDEyOA== YXJkbw== IGNvbXByb21pc2U= IE11Y2g= IGZsZXc= IEVkZ2U= IHVubmVjZXNzYXJ5 IGRvY3RyaW5l cmVwb3J0 IE9ybGFuZG8= IFByb2ZpbGU= IHBsYXlvZmY= ZnJpZW5kbHk= IGNvbXBsYWlu IE1D IE9wdA== IEdC IGJlYXRlbg== IGdvbGY= IHBsYWNlbWVudA== Qml0 IG5ld3NsZXR0ZXI= IDIwMTk= dmlzb3I= cmF3bA== IGlQYWQ= IGFjdGVk IGp1aWNl IGRlY2tz UE4= c3VjY2Vzcw== IEhhbGY= IGRlbGV0ZWQ= IHNlY3JldHM= IGFzeWx1bQ== TWFydA== IEFjdGl2 IEd1eQ== IFRz IGR5cw== IGFzc3VtaW5n IG1hbmE= IHN1YnVy IDEyNQ== TWVkaWE= QVJZ cmlkZQ== Y3A= IGRpZmZpY3VsdGllcw== IGNvbGxlY3Rpbmc= IGJhbmtydXB0 bm9u IGNvbXBvc2Vk IHZvbHQ= IG1pbGl0YW50cw== ID4+Pg== IE1vcm1vbg== dG9y IHBhcnRpY2xlcw== IEJhcnQ= cnlwdGlvbg== IGFkbWlu IHNxdWVl VklESUE= IGNyZWF0b3I= aWFtZXRlcg== aWN1bGFy TkJD IGdyYWJiZWQ= IG5vZGQ= IHJhdGVk IHJvdGF0aW9u IGdyYXNw IGV4Y2Vzc2l2ZQ== IEVD IFdoaXQ= IGludmVudG9yeQ== YXVsdHM= IEZC IGVjb3N5c3RlbQ== IGJpbGxpb25z IHZlbnR1cmU= bmFtZWQ= IGRlZmVuZGVy b3V0ZQ== SW5zdGVhZA== aXJhYmxl V2Fy IGFzc3VtcHRpb24= IGJpdGU= IGVhcnRocXU= dGFpbA== c3BhY2U= IGdpZnRz Ym95cw== IGluZXZpdGFibGU= IHN0cnVjdHVyYWw= IGJlbmVmaWNpYWw= IGNvbXBlbGxpbmc= aG9sZQ== ZXJ2YXRpb24= IGNvYXQ= b2o= aW5jYXJu IFllYXJz IGRldGVybWluaW5n IHJoZXRvcmlj IGJvdW5kYXJpZXM= IHdoaXRlcw== QW50 YWRkeQ== KS0= cmFoYW0= ZXRlcm1pbg== IGhhcnZlc3Q= IENvbmM= IGxhcHRvcA== IE1hdGNo IGVuam95aW5n Y2Nh b2xsYXI= IHRyaXBz IGFkZGljdGlvbg== IFNhaw== IHBvd2VyZWQ= IGNvdXM= IFJ1c3NpYW5z aWVyZQ== IHJldHJpZQ== cXVhbGl0eQ== IGRpZmZlcg== IGtpbmdkb20= IExhdXI= IENhcGl0b2w= IGNvbmNsdXNpb25z IEFsdGVybg== IE5hdg== IHRyYW5zcGFyZW50 QkVS R3JvdXA= IENvbXBsZXRl IGluZmVy IGludHJpZw== IGluc2FuZQ== Uk8= b3Bob2I= aXNlbg== cXVhbA== TWljaGFlbA== IG11c2V1bQ== IFBvcGU= IHJlc2V0 cmF0aXZl Zml2ZQ== IGFnZ3JlZw== aXR0ZWVz b3NpdG9yeQ== IGNhcmI= IFJlY29yZA== IGRlY2lkZXM= IEZpeA== IGV4Y2VwdGlvbnM= IENvbW1pc3Npb25lcg== dW5z IEVudmlyb25tZW50YWw= IGxlZ2VuZGFyeQ== aXN0ZW5jZQ== IHR1bm5lbA== a20= IGluc3VsdA== IHRyb2xs IHNoYWtl IGRldGVudGlvbg== cXVlcw== IENocm9tZQ== IEZpbGVz IHN1YnQ= IHByb3NwZWN0cw== IHByb2w= cmVuZGVy cHJvb2Y= IHBlcmZvcm1hbmNlcw== U3Ry IGhyZWY= ZXJuYW1l IGFjaGlldmVtZW50 IGZ1dA== RnVsbA== IExlYmFu Z29vZ2xl 44OI YW1wYQ== TWF5YmU= IHByb2plY3RlZA== IEVtYg== IGNvbGxlZw== IGF3YXJkcw== IOKU R29sZA== IEJsYWtl IFJhag== aWZ0aW5n IHBlbmRpbmc= IGluc3RpbmN0 IGRldmVsb3BtZW50cw== Q29ubmVjdA== IE1hbmQ= IFdJVEg= IFBoaWxpcHBpbmVz cHJvZmlsZQ== IGFsdG9nZXRoZXI= IEJ1bmQ= IFRE b29vbw== YW1wZWQ= aXBo IHN0ZWFt IG9sZGVzdA== IGRldGVjdGlvbg== dWxwdA== IOc= IFdheW5l MjAwNg== ZmE= IGNpcmNsZXM= IEZ1 IGRvbm9ycw== YXBwcm9wcmlhdGU= IERha290YQ== amFtaW4= IG1vdGl2YXRlZA== IHB1cmNoYXNlcw== IExvdWlzaWFuYQ== IFNwbA== IGdsb2Jl IDEwNQ== emlw Y2FsbA== IGRlcGFydG1lbnRz IHN1c3RhaW5hYmxl MTA1 IE9Q aWZpZXJz IHByZXZlbnRlZA== IGluY29tcA== IENvbW1hbmRlcg== IGRvbWluYXRlZA== IMK7 IGludmVzdGVk IGNvbXBsZXhpdHk= IGluY2w= IGVuc3VyaW5n IHJlYWxt eW5j IEluZGVwZW5kZW50 cmFpbmVk IEplbg== IEZsaWdodA== IGF0aGU= IHNwZWN1bGF0aW9u IFRF b2NhdGU= dGlj IHBsYWludA== aGVycnk= IHRveQ== IDExMQ== IHBsYXRlcw== c3RhdHVz IElzYQ== IGRldm90ZWQ= Q29w IEVT MjU1 dXJyZW5jeQ== TWFpbg== IHNsYXZlcw== IHBlcHBlcg== IHF1b3Rlcw== IGNlaWxpbmc= IEZpc2g= IHRyYW5zZm9ybWF0aW9u IGZyYWN0aW9u IGFkdmFudGFnZXM= IHRvaWxl IHN0dW5uaW5n IG1vaXN0 YnJlYWtpbmc= c2k= IExvY2F0aW9u IE1lZGl1bQ== IHRleHRz IHVnbHk= IGJpbw== LuKAlA== IEJhc2Vk IHRyYWlucw== IFdpbmc= IEFuY2llbnQ= IFJlY29yZHM= IEhvcGU= U3BlY2lhbA== YWRlc2g= b2Jp Wy8= IHRlbXBvcmFyaWx5 VmVy aHU= b3Nlcg== IG92ZXJuaWdodA== IG1hbW0= IFRyZWFzdXJ5 IFZlbmV6dWVs IE1lZ2E= IHRhcg== IGV4cGVjdHM= YmxhY2s= b3JwaA== XFxcXA== IGFjY2VwdGFuY2U= IHJhZGFy c2lz IGp1bmlvcg== IGZyYW1lcw== IG9ic2VydmF0aW9u YWNpZXM= UG93ZXI= IEFkdmFuY2Vk TWFn b2xvZ2ljYWxseQ== IE1lY2hhbg== IHNlbnRlbmNlcw== IGFuYWx5c3Rz YXVnaHRlcnM= Zm9yY2VtZW50 IHZhZ3Vl IGNsYXVzZQ== IGRpcmVjdG9ycw== IGV2YWx1YXRl IGNhYmluZXQ= TWF0dA== IENsYXNzaWM= QW5n IGNsZXI= IEJ1Y2s= IHJlc2VhcmNoZXI= IDE2MA== IHBvb3JseQ== IGV4cGVyaWVuY2luZw== IFBlZA== IE1hbmhhdHRhbg== IGZyZWVk IHRoZW1lcw== YWR2YW50 IG5pbg== IHByYWlzZQ== MTA0 IExpYnlh YmVzdA== IHRydXN0ZWQ= IGNlYXNl IGRpZ24= RGlyZWN0 IGJvbWJpbmc= IG1pZ3JhdGlvbg== IFNjaWVuY2Vz IG11bmljaXBhbA== IEF2ZXJhZ2U= IGdsb3J5 IHJldmVhbGluZw== IGFyZW5h IHVuY2VydGFpbnR5 IGJhdHRsZWZpZWxk aWFv R29k IGNpbmVt cmFwZQ== ZWxsZQ== YXBvbnM= IGxpc3Rpbmc= IHdhaXRlZA== IHNwb3R0ZWQ= a2VsZXk= IEF1ZGlv ZW9y YXJkaW5n aWRkaW5n aWdtYQ== IE5lZw== IGxvbmU= IC0tLS0= ZXhl ZGVn IHRyYW5zZg== IHdhc2g= IHNsYXZlcnk= IGV4cGxvcmluZw== IFdX YXRzb24= IGVuY2w= bGllcw== IENyZWVr IHdvb2Rlbg== TWFuYWdlcg== IEJyYW5k dW1teQ== IEFydGh1cg== IGJ1cmVhdWNy IGJsZW5k YXJpYW5z RnVydGhlcg== IHN1cHBvc2VkbHk= IHdpbmRz IDE5Nzk= IGdyYXZpdHk= IGFuYWx5c2Vz IFRyYXZlbA== IFZldGVy IGR1bWI= IGFsdGVybmF0ZQ== Z2Fs IGNvbnN1bWVk IGVmZmVjdGl2ZW5lc3M= Licn IHBhdGhz b25kYQ== TEE= IFN0cm9uZw== IGVuYWJsZXM= IGVzY2FwZWQ= ICIi IDExMg== IDE5ODM= IHNtaWxlZA== IHRlbmRlbmN5 RmlyZQ== IHBhcnM= IFJvYw== IGxha2U= IGZpdG5lc3M= IEF0aA== IEhvcm4= IGhpZXI= IGltcG9zZQ== bW90aGVy IHBlbnNpb24= aWN1dA== Ym9ybmU= aWNpYXJ5 Ll8= IFNV IHBvbGFy aXN5 ZW5ndQ== aXRpYWxpemVk QVRB d3JpdGU= IGV4ZXJjaXNlcw== IERpYW1vbmQ= b3R5cGVz IGhhcm1mdWw= b256 IHByaW50aW5n c3Rvcnk= IGV4cGVydGlzZQ== IEdlcg== IHRyYWdlZHk= IEZseQ== IGRpdmlk YW1waXJl c3RvY2s= TWVt IHJlaWdu IHVudmU= IGFtZW5k IFByb3BoZXQ= IG11dHVhbA== IEZhYw== IHJlcGxhY2luZw== SGFy IENpcmN1aXQ= IHRocm9hdA== IFNob3Q= IGJhdHRlcmllcw== IHRvbGw= IGFkZHJlc3Npbmc= IE1lZGljYWlk IHB1cHA= IE5hcg== b2xr IGVxdWl0eQ== TVI= IEhpc3Bhbg== IExhcmdl bWlk RGV2 IGV4cGVk IGRlbW8= IE1hcnNoYWxs ZXJndXM= IGZpYmVy IGRpdm9yY2U= IENyZWF0ZQ== IHNsb3dlcg== IFBhcmtlcg== IFN0dWRlbnQ= IFRyYWluaW5n UmV0dXJu IFRydQ== IGN1Yg== IFJlYWNoZWQ= IHBhbmlj IHF1YXJ0ZXJz IHJlY3Q= IHRyZWF0aW5n IHJhdHM= IENocmlzdGlhbml0eQ== b2xlcg== IHNhY3JlZA== IGRlY2xhcmU= dWxhdGl2ZQ== ZXRpbmc= IGRlbGl2ZXJpbmc= ZXN0b25l IHRlbA== IExhcnJ5 IG1ldGE= YWNjZXB0 YXJ0eg== IFJvZ2Vy aGFuZGVk IGhlYWRlcg== IHRyYXBwZWQ= IENlbnR1cnk= IGtub2NrZWQ= IE94Zm9yZA== IHN1cnZpdm9ycw== Ym90 IGRlbW9uc3RyYXRpb24= IGRpcnQ= IGFzc2lzdHM= T01F IERyYWZ0 b3J0dW5hdGU= Zm9saW8= cGVyZWQ= dXN0ZXJz Z3Q= IExvY2s= IGp1ZGljaWFs dmVydGVk IHNlY3VyZWQ= b3V0aW5n IEJvb2tz IGhvc3Rpbmc= IGxpZnRlZA== bGVuZ3Ro IGplcg== IHdoZWVscw== IFJhbmdl dW1ibmFpbHM= IGRpYWdub3Npcw== dGVjaA== IFN0ZXdhcnQ= IFByYWN0 IG5hdGlvbndpZGU= IGRlYXI= IG9ibGlnYXRpb25z IGdyb3dz IG1hbmRhdG9yeQ== IHN1c3BpY2lvdXM= ISc= QXBy R3JlYXQ= IG1vcnRnYWdl IHByb3NlY3V0b3I= IGVkaXRvcmlhbA== IEty IHByb2Nlc3NlZA== dW5nbGU= IGZsZXhpYmlsaXR5 RWFybGllcg== IENhcnQ= IFN1Zw== IGZvY3VzZXM= IHN0YXJ0dXA= IGJyZWFjaA== IFRvYg== Y3ljbGU= 44CM cm9zZQ== IGJpemFycmU= 44CN IHZlZ2V0YWJsZXM= JCQ= IHJldHJlYXQ= b3NoaQ== IFNob3A= IEdyb3VuZA== IFN0b3A= IEhhd2FpaQ== IEF5 UGVyaGFwcw== IEJlYXV0 dWZmZXI= ZW5uYQ== IHByb2R1Y3Rpdml0eQ== Rml4ZWQ= Y29udHJvbA== IGFic2VudA== IENhbXBhaWdu R3JlZW4= IGlkZW50aWZ5aW5n IHJlZ3JldA== IHByb21vdGVk IFNldmVu IGVydQ== bmVhdGg= YXVnaGVk IFBpbg== IExpdmluZw== Q29zdA== b21hdGlj bWVnYQ== IE5pZw== b2N5 IGluYm94 IGVtcGlyZQ== IGhvcml6b250 IGJyYW5jaGVz IG1ldGFwaA== QWN0aXZl ZWRp IEZpbG0= IFNvbWV0aGluZw== IG1vZHM= aW5jaWFs IE9yaWdpbmFs R2Vu IHNwaXJpdHM= IGVhcm5pbmc= SGlzdA== IHJpZGVycw== IHNhY3JpZmlj TVQ= IFZB IFNhbHQ= IG9jY3VwYXRpb24= IE1p IGRpc2c= bGljdA== IG5pdA== IG5vZGVz ZWVt IFBpZXI= IGhhdHJlZA== cHN5 44OJ IHRoZWF0ZXI= IHNvcGhpc3RpY2F0ZWQ= IGRlZmVuZGVk IGJlc2lkZXM= IHRob3JvdWdobHk= IE1lZGljYXJl IGJsYW1lZA== YXJlbnRseQ== IGNyeWluZw== Rk9S cHJpdg== IHNpbmdpbmc= IEls IGN1dGU= b2lkZWQ= b2xpdGljYWw= IE5ldXJv 5aQ= IGRvbmF0aW9u IEVhZ2xlcw== IEdpdmU= VG9t IHN1YnN0YW50aWFsbHk= IExpY2Vuc2U= IEph IGdyZXk= IEFuaW1hbA== IEVS IFVuZA== IGtlZW4= IGNvbmNsdWRl IE1pc3Npc3NpcHBp RW5naW5l IFN0dWRpb3M= UHJlc3M= b3ZlcnM= bGxlcnM= IDM1MA== IFJhbmdlcnM= IHJvdQ== ZXJ0bw== RXA= aXNzYQ== aXZhbg== IHNlYWw= IFJlZ2lzdA== ZGlzcGxheQ== IHdlYWtlbg== dXVt IENvbW1vbnM= IFNheQ== IGN1bHR1cmVz IGxhdWdoZWQ= IHNsaXA= IHRyZWF0bWVudHM= aXphYmxl bWFydA== IFJpY2U= IGJlYXN0 IG9iZXNpdHk= IExhdXJl aWdh V2hpY2g= aG9sZGVy IGVsZGVybHk= IHBheXM= IGNvbXBsYWluZWQ= IGNyb3A= IHByb2M= IGV4cGxvc2l2ZQ== IEZhbg== IEFyc2VuYWw= QXV0aG9y ZWZ1bA== IG1lYWxz ICgt aWRheXM= IGltYWdpbmF0aW9u IGFubnVhbGx5 IG1z YXN1cmVz SGVhZA== aWto bWF0aWM= IGJveWZyaWVuZA== IENvbXB1dGVy IGJ1bXA= IHN1cmdl IENyYWln IEtpcms= RGVs bWVkaWF0ZQ== IHNjZW5hcmlvcw== IE11dA== IFN0cmVhbQ== IGNvbXBldGl0b3Jz 2YQ= IFN0YW5mb3Jk IFJlc291cmNlcw== YXplZA== YmFnZQ== IG9yZ2FuaXM= IFJlbGVhc2U= IHNlcGFyYXRlbHk= IGhhYml0cw== IG1lYXN1cmVtZW50cw== IENsb3Nl IGFjY29tcGFueQ== IGdseQ== IHRhbmc= IFJvdQ== IHBsdWdpbg== IGNvbnZleQ== IENoYWxsZW5nZQ== b290cw== amFu IGN1cnM= IFJlbGF0aW9ucw== a2VlcGVy IGFwcHJvYWNoaW5n cGluZw== U3BlYWtpbmc= IGFycmFuZ2VtZW50 IFZJ YXJldHRlcw== IGFmZmVjdGluZw== IHBlcm1pdHM= YmVjYXVzZQ== IHVzZWxlc3M= IEh1cw== ISEhIQ== IGRlc3Ryb3lpbmc= VW5mb3J0dW5hdGVseQ== IGZhc2NpbmF0aW5n U2Vt IGVsZWN0b3JhbA== IHRyYW5zcGFyZW5jeQ== IENoYW9z IHZvbHVudGVlcg== IHN0YXRpc3RpY2Fs IGFjdGl2YXRlZA== cm94 V2Vi SEU= IEhhbXBzaGlyZQ== aXNpdmU= TWFw IHRyYXNo IExhd3JlbmNl c3RpY2s= Q3I= IHJpbmdz RVhU IG9wZXJhdGlvbmFs b3Blcw== RG9lcw== IEV2YW5z IHdpdG5lc3NlZA== UG9ydA== IGxhdW5jaGluZw== ZWNvbm9t d2Vhcg== IFBhcnRpY2lw dW1t Y3VsZXM= IFJBTQ== IFR1bg== IGFzc3VyZWQ= IGJpbmFyeQ== IGJldHJheQ== IGV4cGxvcmF0aW9u IEZlbA== IGFkbWlzc2lvbg== aXRhdGVk U3k= IGF2b2lkZWQ= IFNpbXVsYXRvcg== IGNlbGVicmF0ZWQ= IEVsZWN0cmlj pZ4= IGNsdXN0ZXI= aXR6ZXJsYW5k aGVhbHRo TGluZQ== IE5hc2g= YXRvbg== IHNwYXJl IGVudGVycHJpc2U= IERJUw== Y2x1ZGVz IGZsaWdodHM= IHJlZ2FyZHM= IMOX aGFsZg== IHRydWNrcw== IGNvbnRhY3Rz IHVuY29ucw== IENsaW1hdGU= IGltbWVuc2U= TkVX b2Nj ZWN0aXZl IGVtYm9k IHBhdHJvbA== IGJlc2lkZQ== IHZpYWJsZQ== IGNyZWVw IHRyaWdnZXJlZA== dmVybmluZw== IGNvbXBhcmFibGU= cWw= IGdhaW5pbmc= YXNzZXM= ICgpOw== IEdyZXk= IE1MUw== c2l6ZWQ= IHByb3NwZXI= Ij8= IHBvbGxpbmc= IHNoYXI= IFJD IGZpcmVhcm0= b3JpZW50 IGZlbmNl IHZhcmlhdGlvbnM= Z2l2aW5n IFBp b3NwZWw= IHBsZWRnZQ== IGN1cmU= IHNweQ== IHZpb2xhdGVk IHJ1c2hlZA== IHN0cm9rZQ== IEJsb2c= c2Vscw== IEVj LCcn IHBhbGU= IENvbGxpbnM= dGVycm9y IENhbmFkaWFucw== IHR1bmU= IGxhYm9yYXRvcnk= IG5vbnM= dGFyaWFu IGRpc2FiaWxpdHk= IEdhbQ== IHNpbmdlcg== YWxn IFNlbmlvcg== IHRyYWRlZA== IFdhcnJpb3I= IGluZnJpbmc= IEZyYW5rbGlu IHN0cmFpbg== IFN3ZWRpc2g= IHNldmVudGg= IEJlbm4= IFRlbGw= IHN5bmRyb21l IHdvbmRlcmVk aWRlbg== KysrKw== aWdv IHB1cnBsZQ== IGpvdXJuYWxpc20= IHJlYmVs IGZ1 YmxvZw== IGludml0ZQ== cmVuY2llcw== IENvbnRhY3Q= SXNyYWVs IENvbnRlbnQ= IGNoZWVy IGJlZHJvb20= IEVuZ2luZWVyaW5n IFF1ZWVucw== IGR3ZWxs IFBsYXlTdGF0aW9u IERpbQ== IENvbG9u bHI= IG9wZXJhdGVz IG1vdGl2YXRpb24= VVNB YXN0ZXJlZA== Q29yZQ== IFRydXRo b2xv T1NF IE1lbW9yeQ== IHByZWRlYw== IGFuYXJjaA== IDE5MjA= IFlhbQ== w6g= Ymlk IGdyYXRlZnVs IGV4Y2l0ZW1lbnQ= IHRyZWFzdXJl IGxvbmdlc3Q= Y3RpdmU= IGRlc2VydmVz IHJlc2VydmVz IGNvcHM= IE90dGF3YQ== IEVneXB0aWFu YW5rZWQ= IGFydGlm IGh5cG90aGVzaXM= Oi8= IHB1cmNoYXNpbmc= IGxvdmVseQ== SFA= IGRpdmlkZQ== IHN0cmljdGx5 IHF1ZXN0aW9uaW5n IHRheHBheWVycw== IEpveQ== IHJvbGxz IEhlYXZ5 IHBvcnRz IG1hZ25ldGlj IGluZmxhbW0= IGJydXNo dGljcw== 4oiS IGJvdHRsZXM= cHB5 IHBhZGQ= 44Kv bWlsbGlvbg== IGRldmFzdGF0aW5n IGNvbXBpbGVk IG1lZGljYXRpb24= IHR3ZWx2ZQ== IFBlcnJ5 U3BhY2U= aW1i eW91cg== IGxlYWtlZA== IFRhcg== IHVuaXR5 IGluZmVjdGVk IHRyYXZlbGVk SURF IE1jRG9uYWxk dHh0 IFByaW5j IGludGVydmVu IFRhaXdhbg== IFBvdw== IGJlYXJpbmc= IFRocmVhZA== IHpvbmVz aXphcmRz dW5rcw== Q2hhcHRlcg== bGxvcg== IMK3 IHdvdW5kcw== IGRpc2NyZXRpb24= IHN1Y2NlZWRlZA== aWtpbmc= IGljb25pYw== Q2FsbA== IHNjcmVlbmluZw== IE1pcw== aWN0cw== IG1pbmlzdGVycw== IHNlcGFyYXRpb24= UGxheWVy IGJpcA== IGJlbG92ZWQ= IGNvdW50aW5n IEV5ZQ== YXJvdW5k aW5naW5n IHRhYmxldA== IG9mZmVuY2U= aW5hbmNl aGF2ZQ== IEluZm8= IE5pbmph IHByb3RlY3RpdmU= IENhc3M= TWFj IFF1YWxpdHk= Tm9ydGg= IGlj IEN1YmE= IENocm9uaWNsZQ== IFByb3BlcnR5 IGZhc3Rlc3Q= b3Rvcw== IEdlcm0= T1dO IGJvb20= IFN0YW5sZXk= ZXJndXNvbg== IGNsZXZlcg== IGVudGVycw== bW9kZQ== dGVyaW9y IFNlbnM= IGxpbmVhcg== QVJL IGNvbXBhcmluZw== IHB1cmVseQ== IHNhZmVy IFBvdHRlcg== IGN1cHM= UlQ= IGdsdWM= IGF0dHJpYnV0ZWQ= IGR1cGw= IFBhcA== IHByZWNpb3Vz IHBh aWN0aW9uYXJ5 IFRpZw== IFRvbw== b2x1dGlvbnM= c3Rhbg== IHJvYm90cw== IGxvYmI= IHN0YXR1dGU= IHByZXZlbnRpb24= d2VzdGVybg== MTYw IEFjdGl2ZQ== IE1hcmlh aGFs Tm9uZQ== ZWxsYXI= IEtC IFBhcnRuZXJz IFNpbmdsZQ== IEZvbGxvd2luZw== YW5nbw== YWNpb3Vz IHRob3U= IGtn IGluZmx1ZW50aWFs IEZyaWVuZHM= U3Vy YWludGVk IGZvcnVtcw== IHN0YXJ0ZXI= IGNpdGl6ZW5zaGlw IEVsZWN0aW9u b25nZQ== b3RhdGlvbg== b3NwaA== Ozs7Ow== dXRpY2Fs cHVy ZXJlbg== IGFjY3VzYXRpb25z Yml0aW91cw== YWJiaXQ= IE9yZA== UG9zdGVk aXJr IHNlbnNpdGl2aXR5 aWNoZQ== IEFteQ== IEZhYg== IHN1bW1pdA== IHBlZGVzdA== IHJ1YmJlcg== IGFncmljdWx0dXJhbA== IGNhbmNlbA== QUU= IGluYXVn IGNvbnRhbQ== IGZpcm1seQ== aXc= c3RhZ2U= IEthbg== IHRpZXI= IGludmVudGlvbg== IHRyYW5zbGF0ZWQ= IFJ1bGVz Qm94 VHdpdHRlcg== SURT IHBpenph IGRlYnVn IERyb3A= dnM= IGhvcnNlcw== Ymln IGJvcmluZw== IGhvb2Q= IE1jQ2Fpbg== YXRjaGVk IEJyb3M= IHNraXA= IGVzc2F5 c3RhdA== IExlZ2VuZHM= IGFtbXVuaXRpb24= YXVj IHNob290ZXI= IHVuaA== IHN1cHBsaWVk IGdlbmVyaWM= IFNL aWJhbg== eXJpY3M= IDI1NQ== IGNsaW1iaW5n Rm9ybWVy IGZsaXA= IGp1bXBpbmc= IGZydXN0cmF0aW9u IFRlcnJ5 IG5laWdoYm9yaG9vZHM= IG1lZGlhbg== YmVhbg== IGJyYWlucw== Rm9sbG93aW5n IHNoYXBlZA== IGRyYXdz IGFsdGVyZWQ= SmFjaw== IHJlY2lwZXM= IHNraWxsZWQ= d2VhbHRo YWNoaQ== ZWxlY3Rpb24= IGJlaGF2aW9ycw== ZGVhbHM= IFVudGls RmU= IGRlY2xhcmF0aW9u bWFya3M= IEJldHdlZW4= Y2Vsb25h IHJlc29u IGJ1YmJsZQ== QW1vbmc= IGltcGVyaWFs R1M= IGZlbWluaXN0 MjAwNQ== IEt5bGU= IGFjY291bnRpbmc= IFRlbGU= IFR5cg== IGNvbm5lY3Rpbmc= IHJlaGFi IFByZWQ= c2lt IG1lYW50aW1l IHBoeXNpY2lhbg== TVc= IENhbXBiZWxs IEJyYW5kb24= IGNvbnRyaWJ1dGluZw== IFJ1bGU= IFdlaWdodA== IE5hcA== IGludGVyYWN0aXZl IHZhZw== IGhlbG1ldA== IENvbWI= Zm91cg== IHNoaXBwZWQ= IGNvbXBsZXRpbmc= IFBE UERBVEU= IHNwcmVhZGluZw== IHNjYXJ5 ZXJ2aW5n IEdhcw== IGZyYW5r c2Nob29s IHJvbWFudGlj IHN0YWJpbA== Um9i IGFjY3VyYXRlbHk= IGFjdXRl IEhhbm4= IHN5bWJvbHM= IGNpdmlsaXphdGlvbg== IEFX IGxpZ2h0bmluZw== IGNvbnNpZGVycw== IHZlbnVl INc= IG92ZW4= IFNG aGlz IG51 IExlYXJu IHBlb3BsZXM= IHN0ZA== IHNsZWU= IHNsaWM= IFN0YXRpc3RpY3M= IGNvcm5lcnM= IEJha2Vy IDop bWVudGF0aW9u b2x2ZXI= IGxhdWdoaW5n IFRvZGQ= b25kZQ== IEhpbGxz IG51dHM= IFdvbWFu cGxhbmU= IGxpdmVy IEluc2lkZQ== U29ycnk= IGFncmVlcw== IGZ1bmRhbWVudA== IEZpc2hlcg== IGF1Y3Rpb24= IHRocmVhZHM= Z2xhcw== IEJhc2lj IE5hdA== IGxhY2tpbmc= IGNlbGVicmF0aW9u anU= IHNpbGx5 RXVybw== IHRhdHQ= aWdodHk= Y29udHJvbGxlZA== VGVzdA== IFNpbmdo IHJhZ2U= IHJoeXRo b2ZmaWM= IFBoYW50b20= IGhlYWRsaW5lcw== IHJlc3BvbmRpbmc= IE1vcm5pbmc= IHZpdGFtaW4= IGJvb3Rz IFNpdGU= YWxpbg== cGk= IHZpcmFs IFVD REVS IFNleA== IHN0b2Nrcw== Y3VycmVudA== IGNodXJjaGVz IFJhcmU= IE11cnBoeQ== IGRlbmlhbA== IEdhbWluZw== IHRvdWc= IG5pY2s= IG1ha2Vycw== IFJvbmFsZA== IGdlbmVyb3Vz IERvYw== IE1vcnJpcw== IHRyYW5zZm9ybWVk IE5vcm1hbA== IDEwNA== IEtpY2tzdGFydGVy IFVwb24= T25saW5l IElSUw== IHdyYXA= IGxvdmluZw== IGFycml2ZXM= IER1ZQ== IGhldGVy IE1hZGU= IHJlbnRhbA== IGJlbG9uZ3M= IGF0dG9ybmV5cw== IGNyb3Bz IG1hdGNoZWQ= dWx1bQ== b2xpbmU= MTA5 IGRpc3Bhcg== IGJ1eWVycw== IENhbWJyaWRnZQ== IGV0aGljcw== cm91cHM= IGp1c3RpZmllZA== IG1hcmdpbmFs IHJlc3BlY3RlZA== d2lubmluZw== IG5vZGRlZA== IFNlcmdl IEZvcm1lcg== Q3JhZnQ= IyMjIyMjIyMjIyMjIyMjIw== IFdhcm5lcg== IGRhc2g= ZXRl IGVudGVydA== IEVzY2FwZQ== b3V0aGVhc3Q= IGtuZWVz IEJvbWI= IHJ1Zw== UGFzcw== IGF0dGl0dWRlcw== Z292ZXJubWVudA== IFByaW9y IHF1YWxpdGllcw== IG5vdGlmaWNhdGlvbg== IFBob25l bGll IGFudGljaXBhdGVk IENvbWJhdA== IEJhcnJ5 IDE5ODI= VXNlcnM= b25lcg== IGNvbXB1dGluZw== IENvbm5lY3RpY3V0 IGxlc3Nlcg== IHBlZXJz IEN1 IHRlY2huaWNhbGx5 IHN1Ym1pc3Npb24= IFVuaXZlcnNhbA== IG1hbnVhbGx5 b3VyZ2U= IHJlc3BvbmRlbnRz IEJUQw== IEhvc3Q= IGZhcmU= IEJpcmQ= IHJlY2VpcHQ= YWxzbw== IGphY2s= IGFncmljdWx0dXJl IHNrdWxs ICE9 IHBhc3NpdmU= IENJ IHNvY2lldGllcw== IHJlbWluZGVk IGludGVyZmVyZW5jZQ== QnV5 IOKc Z29u IHNjcnV0aW55 IFdpdGNo IGNvbmR1Y3Rpbmc= IOOD IGV4Y2hhbmdlcw== IE1pdGNoZWxs IGluaGFiaXQ= IHR3aXN0 QkQ= IHdoZXJldmVy Z3JvdXBvbg== IGpva2Vz IEJlbmphbWlu IFJhbmRvbQ== ZnJhbWU= IExpb25z IGhpZ2hsaWdodGVk IEFya2Fuc2Fz RW50 IHBpbGU= IHByZWxpbQ== Z3M= bWluZGVk IGZlbG9ueQ== IEdB IEx1Y2s= IHByYWN0aWNhbGx5 IEJvcw== IGFjdHJlc3M= RGFt IEJvdQ== IHZpc2E= IGVtYmVkZGVk IGh5YnJpZA== IGVhcmxpZXN0 IHNvb25lcg== c29jaWFs IEhB IHN0ZWVw IGRpc2FkdmFudA== IGV4cGxvaXQ= IEVnZw== IFVsdHJh IG5lY2Vzc2l0eQ== TG9jYWw= aWVnZQ== IGRhdGVk IG1hc3Nlcw== IHN1YnNjcmlwdGlvbg== cGxlc3M= IGFub255bQ== IHByZXN1bWFibHk= Qmx1ZQ== VGhlaXI= YXNrZXRiYWxs IFBoaWxpcA== IGNvbWVk bG9hZGVk cmFuZQ== IHJlZmxlY3Rpb24= Q2hpbmE= IGV4dGVuZHM= IGZvcm1pbmc= IHVuZGVycw== MjAwMQ== IGdyYXQ= IGNvbmNlbnRyYXRpb25z IGluc3VsaW4= IHNlY3VsYXI= IHdoaWxzdA== IHdpbm5lcnM= QWR2ZXJ0aXNlbWVudHM= IGRlbGliZXJhdGVseQ== IFdvcmtpbmc= IHNpbms= ZXRpY3M= ZGFsZQ== IG1hbmRhdGU= IGdyYW0= IHZhY2F0aW9u IHdhcm5pbmdz cmlwcA== IFRIQVQ= IGNvbW1lbnRhcnk= IGludHU= IGFlc3Q= IHJlYXNvbmluZw== IGJyZWFrZG93bg== IFpvbWJpZQ== IC0tPg== IFBvbGl0aWNhbA== Y290dA== IHRocnVzdA== IHRlY2hub2xvZ2ljYWw= IGRlY2lkaW5n IHRyYWZmaWNraW5n TG9uZw== V2VsY29tZQ== cHJpc2luZw== IENvbW11bmljYXRpb25z IGVuZG9ycw== IHN3aWZ0 IG1ldGFib2w= Y29pbnM= cmVzYQ== IEhUVFA= IGVucm9sbA== IEhhcHB5 dXNy aW50YWdl IFsi dWFibHk= IE1hdGVyaWFs IHJlcGVhbA== U2VwdA== a2g= IE1vZGk= IHVuZGVybmVhdGg= IElM c2hvcmU= IGRpYWdub3NlZA== YWNldXRpY2Fs IHNob3dlcg== YXV4 IFN3aXRjaA== IFN0cmVuZ3Ro IGppaGFk bmF0aW9uYWw= IHRyYXVtYQ== dXNzeQ== b25p IGNvbnNvbGlk IGNhbG9yaWVz IEZseW5u YWdnZWQ= MTY4 IFBpbms= IGZ1bGZpbGw= IGNoYWlucw== IG5vdGFibHk= IEFW TGlmZQ== IENodWNr bXVz IFVyYmFu IEhlbmQ= IGRlcG9zaXQ= IFNhZA== IGFmZmFpcg== T1JL aWV2YWw= IEZEQQ== IHRyb3A= IE92ZXJhbGw= IHZpcnR1ZQ== IHNhdGlzZmFjdGlvbg== YXVuZA== IGx1bg== IFN3aXR6ZXJsYW5k IE9wZXJhdGlvbg== cHJvY2Vzcw== IHNob29r IGNvdW50aWVz bGVhc2Vk IENoYXJsb3R0ZQ== MTEy IHRyYW5zY3JpcHQ= IHJlZGQ= cHVzaA== IEhleQ== IEFuYWx5c2lz WyI= IGFsdGVybmF0aXZlcw== YXJkbGVzcw== IGVsZXBo IHByZWp1ZA== IExlYWY= SGF2aW5n IEh1Yg== IGV4cHJlc3Npb25z IFZvbHVtZQ== IHNob2NraW5n IFJlZHM= IHJlYWRpbHk= IHBsYW5ldHM= YWRhdGE= IGNvbGxhcHNlZA== IE1hZHJpZA== IGlycml0 aXBwZXI= IEVuYw== IFdpcmU= IGJ1eno= IEdQ YXNoYQ== IGFjY2lkZW50YWxseQ== dXJ1 IGZydXN0cmF0ZWQ= IFNB IGh1bmdyeQ== IEh1ZmY= IGxhYmVscw== YW50bw== IEVQ IGJhcnJpZXJz KXw= IEJlcmtlbGV5 IEpldHM= IHBhaXJz IExhbg== SmFtZXM= IEJlYXI= IGh1bW9y IExpYmVydHk= IG1hZ25pdHVkZQ== IGFnaW5n IE1hc29u IGZyaWVuZHNoaXA= dW1ibGluZw== IGVtZXJnZQ== IG5ld3NwYXBlcnM= IGFtYml0aW91cw== IFJpY2hhcmRz YXRlcm5hbA== IDE5ODE= IGNvb2tpZXM= IHNjdWxwdA== IHB1cnN1aXQ= TG9jYXRpb24= IHNjcmlwdHM= cGM= IGFycmFuZ2VtZW50cw== IGRpYW1ldGVy IGxvc2Vz YW1hdGlvbg== IGxpcXU= IEpha2U= YXJldHRl IHVuZGVyc3RhbmRz IFplbg== dm0= IGFwcHJvdmU= IHdpcA== IHVsdHJh IGludGVuZA== IERJ YXNjdWxhcg== IHN0YXlz IEtvcg== IEts IGludmVzdGluZw== TGE= IGJlbGlldmluZw== YmFk bW91dGg= IHRheHBheWVy 44OD IFF1ZWJlYw== IGxhcA== IFN3aXNz ZHJvcA== IGRyYWlu aXJp ZXRj ZnRlbg== IE5leA== IHN0cmF3 IHNjcmVhbWluZw== IGNvdW50ZWQ= IGRhbWFnaW5n IGFtYmFzc2Fkb3I= Y2VudHVyeQ== IHByb3g= IGFycmVzdHM= dXY= aWxhdGVyYWw= IENoYXJn IHByZXNjcmliZWQ= IGluZGVwZW5kZW50bHk= IGZpZXJjZQ== IEJhYnk= IGJyYXZl IHN1aXRz PT4= IGJhc2VsaW5l IFJhdGU= IGlzbGFuZHM= ICgo Z3JlZW4= aXhlbHM= IG5hbWVseQ== IFZpbGxhZ2U= dGhhbg== YW15 VmVyc2lvbg== Z21haWw= ZW50aWFscw== IFN1ZA== IE1lbGJvdXJuZQ== IGFycml2aW5n IHF1YW50dW0= ZWZm cm9wb2xpdGFu VHJp IGZ1bmVyYWw= IElS w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IENvYg== aXRhYmx5 IHR1cmI= IGNvbWJv UmV2aWV3 IGRlcGxveW1lbnQ= dWl0eQ== IEJvdHQ= IGludmlzaWJsZQ== IHJlbmRlcmluZw== IHVubG9ja2Vk IGFxdQ== IFZsYWRpbWly IHBhZA== IEJyYWlu IExlZ2FjeQ== ZHJhZ29u IEt1cmRpc2g= IHNvdW5kZWQ= IGRldGFpbmVk IERN Z2FyeQ== IGRhdWdodGVycw== IGRpc3R1cmJpbmc= dWth IFBhcmFk IHRhc3Q= IHVuZm9ydHVuYXRl IHVs ZW1pbg== IGF0dGVuZGFuY2U= dHJs IHBhcmtz IE1lbW9yaWFs IEFsaWNl b3RoeQ== Z3VhcmQ= IERpc2U= IFNoYW4= IEZvcnVt UmljaA== IHNoaWZ0ZWQ= dWV6 IGxpZ2h0ZXI= IE1hZ24= IGNvZA== U2No aGFtbWFk UHVi MzUw IFBva2Vtb24= IHByb3RvdHlwZQ== IHVucmU= QmFzZQ== IFN0dWRlbnRz IFJlcGx5 IENvbW11bmlzdA== IGdhdQ== IFR5bGVy SVo= IHBhcnRpY2lwYXRlZA== IHN1cHJlbQ== IERldGFpbHM= IHZlc3NlbHM= cm9k IHRyaWJl a2VlcA== IGFzc3VtcHRpb25z IHBvdW5k IGNydWRl IEF2YWlsYWJsZQ== IHN3aW1taW5n IGluY2x1c2lvbg== IGFkdmFuY2Vz Y3VsYXRpb24= IGNvbnNlcnZhdGlvbg== IG92ZXJk IEJ1ZmZhbG8= QXJ0aWNsZQ== ZWRnZQ== IGF3YQ== IE1hZGlzb24= IHNpZGV3 IGNhdGFzdA== IEtyaXN0 dWNsZQ== IEhpZ2h3YXk= IFRlcnJvcg== IGFjdGl2YXRpb24= IHVuY29uc2Npb3Vz IFNhdGFu IFN1c2Fu aWxsZXJ5 IGFycmFuZ2Vk aW9w IHJ1bW9ycw== dXJyaW5n dGhpbms= IEtlaXRo IEtpbmQ= IGF2b2lkaW5n Ynlu bnV0 IFNwZWFrZXI= cnVz bmFtZXM= IGd1aWx0 IE9seW1waWNz IHNhaWw= IE1lcw== bGV2YW50 IENvbHVtYnVz YWZ0 Q2l0eQ== U291dGg= IEhhcnZleQ== IFB1bg== U2V2ZXJhbA== IG1lbnRhbGx5 IGltcHJlc3M= bW91bnQ= IFVidW50dQ== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU IFN1cGVybWFu IE1Qcw== IGludGVudGlvbnM= IFJhY2luZw== IGxpa2VsaWhvb2Q= IDI0MA== VG90YWw= IHRveXM= IFdhdHNvbg== IHVyZ2U= TGVhcg== IFBhcGVy IG9jY3VycmluZw== IEJlbmc= IENlcnQ= IHN0b25lcw== VGlt IFR3aW4= emI= IER5bmFt IHBvbGl0aWNpYW4= a2Vucw== IEVudGVycHJpc2U= VVRFUlM= IGFib2w= IHJlZnJlc2g= IGFyYml0cmFyeQ== cGVjdGlvbg== IHRyb3VibGVz IH0pOw== dHY= IHBpbG90cw== IGRpc3RyaWJ1dGU= IGF1ZGl0 IHBhdXNl b3JpZ2luYWw= IHJpdmFscw== wqM= Rmln VEw= YWJpbA== cnlpbmc= TGlu aW9uZWQ= bG9u IGZhbmN5 IGNyYXNoZWQ= IHRyYWN0 IHNoZWQ= IGNvbnN1bWU= QmFzZWQ= ZG93bmxvYWQ= aW5pdA== IHZvbHRhZ2U= SW50cm9kdQ== IGNvbmRlbW5lZA== IEZpbmFuY2U= cmVzcGVjdA== IGV4Y2x1ZGVk IGVzdGFibGlzaGluZw== aGVyaWM= IGhlcml0YWdl IHNwZWN0YWN1bGFy IHVuc3Q= IFNub3dkZW4= IExhbmU= U2Fu IHByb3RlY3Rpb25z c3RydWN0aW9u aW5jaW5u IG1hY3Jv Q3VzdG9t aW9zaXR5 IGVzcA== IGZ1bmN0aW9uaW5n IG11c2g= IHB1enpsZQ== IGV0aGljYWw= TWFs IGdvdmVybmluZw== IEZlcmd1c29u IHJlc3RvcmVk IHN0cmVzc2Vk IENvdW50ZXI= IEthcw== Y2xpcA== QU5T IHNlaXo= VUs= Ynlzcw== b2xkb3du YXBp IHBlcm1hbmVudGx5 b3VudGVycw== V2VzdA== VGhyb3VnaA== TGlnaHQ= YXRvZXM= IG5lYXQ= IGNvcmQ= dXJlcg== IHNldmVyZWx5 IEF2ZW4= IGludGVycm9n IHRyaXBsZQ== R2l2ZW4= TnVtYmVy IGFyaXNl IHNoZXI= cGxhbnQ= IGZsb3dlcg== IENvdQ== IGF0ZQ== IG5ld2Vy YnVs IG1lYW53aGlsZQ== IExhaXI= IGFkanVzdG1lbnQ= IENvcHlyaWdodA== IGRpdmVycw== aW9sb2dpY2Fs IGdhbWVycw== b2F0 IGhpc3RvcmljYWxseQ== IGFuYWxvZw== IGxvbmd0aW1l IHByZXNjcmlwdGlvbg== IE1pc3Q= IEh5cGVy IE1haW5l IERlaXR5 IG11bHRpcGw= IFJlaW5jYXJu IEh5ZA== IFBpYw== U2ls cmFudHM= IENyaXM= Ljs= KHs= ZXBlbmRlbmNl IHJlY3k= YXRldXI= IHF1YWQ= IGdsb2I= IGNvbmNlZA== dGVhbQ== IGNhcGl0YWxpc3Q= IExvdA== IHJveWFs IEN5YmVy IGJsYWNrcw== bWV0aWM= cml2 IERhbm55 IHNwbw== IFJP IGFuaW1hdGVk cnlwdGVk IERlcHV0eQ== IHJlbmRlcmVk RkU= IHN0cmVhaw== IGNsb3Vkcw== IERvdWc= fn5+fn5+fn4= IGRpc2NvdXI= IFZlaA== IHBzeWNob2xvZ3k= IEpvdXJuZXk= IGNyeXN0YWw= IEZyb3N0 IHN1c3BpY2lvbg== IHJlbGF0ZQ== b3J1cw== IENyeXB0 IE5WSURJQQ== Y29tZWQ= dXRpbmc= aW5jaW5uYXRp IHZ1bG5lcmFiaWxpdHk= b3N0aWM= IGlzb2xhdGlvbg== IGNvb2xpbmc= IENvYWxpdGlvbg== IDExOQ== Rm91cg== IERlYWw= IOKJ c2VtYmxl cmFtZW50 IEJhcmNlbG9uYQ== IDEwMg== IGNvY2FpbmU= b2NhbHlwc2U= RmVi b2dlbmlj IG11dGF0aW9u IGNyeXB0b2M= IEtlbA== IEdpdA== YWlz IHNpc3RlcnM= QU5L IGFjdGl2YXRl VGVy IGRyZWFk eWxvbg== IHByb3ByaQ== QXVzdA== IERlZmF1bHQ= IG91dGRvb3I= IHNoZWVy Y2VpdmU= IGdlbnRseQ== 0L4= UHJvZ3JhbQ== IOKGkg== IHZlZ2Fu IENydXM= IHJlc3BvbnNpYmlsaXRpZXM= IEhS T0xE IHByZXZlbnRz IHN0aWZm IFdlcmU= IGF0aGxldGlj IFNjb3Jl ICk6 IGNvbHVtbnM= IExvYw== YXZhaWxhYmxl IEZyYW0= IFNlc3Npb25z IGNvbXBhbmlvbg== IHBhY2tz MTQw IEtuaWdodHM= IGZhcnQ= IHN0cmVhbXM= IHNob3Jl IGFwcGVhbHM= IFBlcmZvcm1hbmNl aGF1bA== IFN0cmE= IE5hZw== MTAz IFRyYW5zcG9ydGF0aW9u QkI= RXY= emFu UHVibGlj IHR3aW4= dWxzaW9u TXVsdA== IGVsZWN0cm8= IHN0YXR1ZQ== YXRpb25hbGx5 IE5vcnQ= IGluc3BlY3Rpb24= Lyo= aWd1ZQ== IGNvbXBhc3Npb24= IFRhbGVz IFN0ZWlu IFNjcmVlbg== IEJ1Zw== IExpb24= Z2lybA== IHdpdGhkcmF3YWw= IG9iamVjdGl2ZXM= IGJsb29keQ== IHByZWxpbWluYXJ5 IGphY2tldA== IGRpbWVuc2lvbnM= IENvb2w= IE9jY3Vw IHdyZWNr IGRvdWJsZWQ= YW5raW5n IDE5NzU= IGdsYXNzZXM= IFdhbmc= cHJvdg== UGF0aA== Y29ubmVjdGVk IE11bHRp IE5vcndheQ== YWdvbmlzdA== IGZlYXJlZA== IHRvdWNoaW5n IGFyZ3VhYmx5 wq/Cr8Kvwq/Cr8Kvwq/Crw== IE5DQUE= Y2hlbQ== IHNwYXQ= IFdXRQ== IENlbA== aWdnZXI= IGF0dGFja2Vy IEpvaW4= b2JqZWN0 ZXR0YQ== IGVsaW1pbmF0ZWQ= ZGV0 IGRlc3RydWN0 IEx1Y2Fz Y3R1YXJ5 MTgw IEJyYWR5 IEJsdWVz QmF5 YXVrZWU= IHRpbWVsaW5l IGRlbGVnYXRlcw== d3JpdHRlbg== dWZmaWNpZW50 IHNoYXBlcw== Q29weXJpZ2h0 b3VibGU= c2VydmljZQ== IHBpb25l IGNvbGxlZ2Vz IHJvd3M= IHNwaXRl IGFzc2Vzc2Vk MzYw IGxlYXNl IGNvbmZpZGVudGlhbA== Y2tlcg== IE1hbm5pbmc= IFZvaWNl IHNlYWxlZA== IGNhbGN1bGF0ZQ== Tk8= IEFzc2lzdGFudA== IHRlZW5hZ2Vy dWxlbnQ= YXRoZXJpbmU= IG1vY2s= IGRpYW1vbmQ= IGZlc3Q= IHN3aXRjaGVk IHJlc3VtZQ== IFB1ZXJ0bw== IGxhbmVz aXJhdGlvbg== IFNpbWlsYXJseQ== IHJvZA== IFNlbA== IFBhbGFjZQ== IExpbWl0ZWQ= ZW91cw== IHZhcmlhbnQ= IHdhcmQ= ICkp U2hvdw== T09L QWxleA== IE5lcA== YnJpcw== IFdpa2lwZWRpYQ== IGV4Y2VwdGlvbmFs IG1hbmFnZXM= IERyYXc= QWdhaW4= IGNvcHBlcg== dXR0 IGV4cG9ydHM= IHBvcnRmb2xpbw== IGVsZXZhdGVk UmF0ZWQ= IE90aGVyd2lzZQ== IFRhY3Q= IFNoZWw= IFRY IuKAlA== IHJlc3Vy IFdh dmVuYW50 IG1vbmV0YXJ5 cGVvcGxl RW1haWw= IGZpZnR5 IFN3ZWV0 IE1hbGF5c2lh IGNvbmZ1c2luZw== IFJpbw== dWRh dXRlbmFudA== Iik7 IHByYWlzZWQ= IHZvbHVtZXM= dHVybg== IG1hdHVyZQ== IG5vbnByb2ZpdA== IHBhc3Npb25hdGU= IFByaXZhdGU= IDEwMw== IGRlc2NlbmQ= 56We dWZmeQ== aGVhZGVk V2hldGhlcg== cmllbg== emVjaA== YmVpdA== IGNocm9t IE1jTQ== IGRhbmNpbmc= IGVsZWc= IE5vdGljZWQ= MTE1 IGFkdm9jYWN5 RU5UUw== YW1ibGluZw== IE1pbm9y IEZpbm4= IHByaW9yaXRpZXM= IHRoZXJlb2Y= IFN0YWdl IFJvZ2Vycw== IHN1YnN0aXR1dGU= IEphcg== IEplZmZlcnNvbg== IGxpZ2h0bHk= MTAy IExpc2E= dWl0cw== eXNpY2Fs IHNoaWZ0cw== IGRyb25lcw== IHdvcmtwbGFjZQ== IHJlc2lk ZW5zZWQ= YWhu IHByZWZlcmVuY2Vz c2VydmVy IGRlYmF0ZXM= ZG9j IEdvZHM= IGhlbGljb3B0ZXI= IGhvbm91cg== IGNvbnNpZGVyYWJseQ== ZWRlZA== IEZlbWFsZQ== IEFubmU= IHJldW4= IEZhY2U= IEhhbGxvdw== IEJ1ZGdldA== IGNvbmRlbW4= IHRlbmRlcg== UHJvZg== b2NyYXRpYw== IFR1cm5lcg== IEFncmlj IDE5NzY= IGFwdA== ZGlzYw== IEZpZ2h0ZXI= IEF1cg== IGdhcmJhZ2U= aW5wdXQ= IEthcmw= IE9saXZlcg== IExhbmd1YWdl a24= Tm9u IENsYXI= IHRyYWRpdGlvbnM= IGFkdmVydGlzZW1lbnQ= IFNvcg== IGFyY2hpdmU= IHZpbGxhZ2Vz NzUw IGltcGxlbWVudGluZw== d2F1a2Vl IGRpZXRhcnk= IHN3aXRjaGluZw== UmVwdWJsaWM= IHZlbG9jaXR5 IGNpdA== IEF3YXJkcw== IGZpbmFuY2luZw== IGxhc3RlZA== KV0= IHJlbWluZGVy UGVyc29u IHByZWNpc2lvbg== IGRlc2lnbmVycw== IEZyaWVk IEJvcmRlcg== IHRyYWdpYw== IHdpZWxk IGluaXRpYXRpdmVz IFRhbms= d2Vy IGpvaW5z Um8= aW5lcnk= IGFycm93 IGdlbmVyYXRpbmc= Zm91bmRlcg== IHNlYXJjaGVz IHJhbmRvbWx5 QWNjZXNz IGJhdGNo IHBvc2Vk bGF0 IHB1cnN1aW5n YXNh IHRlc3RpZmllZA== Zm9ybWluZw== IFNoYXI= d2lraQ== IEVpdGhlcg== U29tZXRpbWVz IHNlbmF0b3Jz IEpvaG5ueQ== IFRhbGliYW4= IEdQUw== IjoiLw== 44Gu5Q== IGFuYWx5emVk IFJ1Ymlv IE1vdmVtZW50 b3BhcmQ= aWlp U3RhbmQ= ZmlnaHQ= IGlnbm9yaW5n aWFuZw== IEdO c29ldmVy IFNUQVQ= IHJlZnVzaW5n IHN3ZWF0 IGJheQ== UE9SVA== aXJtZWQ= YWt5 IGRpc3Bybw== IGxhYmVsZWQ= IDEwOA== SGVsbG8= IHBsZWFzYW50 YWJh IHRyaXVtcGg= IGFib2FyZA== IGluY29t IENyb3c= bGV0dA== IGZvbGs= IGNoYXNl YGA= IEJydXM= IHRlZW5z Y3Vl IHRlcnJhaW4= aHlk aWxpZ2h0 T1JZ U3VwcG9ydA== ZXdz bGxp cmFpbnRz IENhbmQ= IGFidXNlZA== YWNobWVudA== bGFyZw== QmFz IENhbmNlcg== IDE5Nzg= IHN1cHBvcnRlcg== YWNjZXNz IFRlcm1pbg== IFRhbXBh IEFOWQ== IG5ld2VzdA== IENyaW1pbmFs ZWR1 IDE5MzA= IGFkbWl0cw== IGVuZGU= IGZhaWx1cmVz dXJhdGU= ZnVsbmVzcw== Y3ljbA== IFN1YmplY3Q= IGluZmluaXRl dGhyZWU= V0E= cGl0 IEluc3RhbGw= UmFk aWxpYXRpb24= R00= IGNvbnRpbmVudA== IGFjY29tbW9kYXRl IENsYXk= IHB1cA== IEZ1bmN0aW9u IGhhbW1lcg== IEFsYmVydGE= IHJldmlzZWQ= IG1pbm9yaXRpZXM= IG1lYXN1cmVtZW50 Q29ubmVsbA== IGRpc2FibGU= IE1peA== SW5jcmU= IGZvcms= IFJvc2Vu IGltcGxpZXM= dW1ibHI= QU5H IHByb3RlaW5z IGFnZ3Jlc3Npb24= IGZhY2lsaXRhdGU= U04= IGlsbGVnYWxseQ== dWVy IGFjYWRlbQ== IHB1eno= IFNoaWZ0 cGF5 b2xsbw== IGF1ZGllbmNlcw== QnVpbGQ= IG5vYmxl IHN5bnRheA== 4piF IGJlYW0= IEJlZA== IEFsZA== IG9yaWdpbnM= dmlkZW8= IDE5Nzc= IEFzc2F1bHQ= IGdhcmFnZQ== VGVhbQ== IHZlcmRpY3Q= IGR3YXI= IFZpcnR1YWw= ZXZlbnQ= S2VlcA== IHNlbnRpbWVudA== IHdpbGRsaWZl c2hpcnQ= IGJ1cmc= IHJlY29tbWVuZGF0aW9u cmVwcmVzZW50 IGdhbGxlcnk= b3duZXJz IHNjaG9sYXI= IGNvbnZlbmllbmNl IFN3aWZ0 IGNvbnZpbmM= Q2Fw IHdhcmZhcmU= IFZpc3VhbA== IGNvbnN0aXR1dGU= IGFib3J0 IFdlYXRoZXI= IExvb2tpbmc= IEhlbQ== IG1hcnRpYWw= IGluY29taW5n ZXRpdGlvbg== IHRvbGVyYW5jZQ== IENyZWF0ZWQ= IGZsb3dz IEVsZGVy IHNvdWxz IGZvdWw= IFBhaW4= IENBTg== IDIyMA== YmM= aGVuZA== IGdlbml1cw== UmVhbA== IFdy b21ldGVy cGFk IGxpbWl0aW5n IFNp IExvcmU= IEFkdmVudHVyZXM= IHZhcmllZA== RGlzYw== Zmlu IFBlcnNvbmFs Q2hyaXM= IGludmVudGVk IGRpdmU= IFJpc2U= IG96 IENvbWljcw== IGV4cG9zZQ== IFJlYg== bGV0dGVycw== c2l0ZQ== aW1hdGVk IGhhY2tpbmc= IGVkdWNhdGVk IE5vYm9keQ== IGRlcHJp IGluY2VudGl2ZQ== 44K3 IG92ZXJzaWdodA== IHRyaWJlcw== IEJlbGdpdW0= IGxpY2Vuc2luZw== b3VydA== UHJvZHVjdA== YWhs IEdlbQ== IHNwZWNpYWxpc3Q= IGNyYQ== YW5uZXJz IENvcmJ5bg== IDE5NzM= UkVBRA== IHN1bW1hcg== IG92ZXJsb29r IEFwcGxpY2F0aW9u IGluYXBwcm9wcmlhdGU= IGRvd25sb2FkZWQ= UXVl IEJlYXJz IHRodW1i IENoYXJhY3Rlcg== IFJlaW5jYXJuYXRlZA== IFNpZA== IGRlbW9uc3RyYXRlcw== c2t5 IEJsb29tYmVyZw== IEFycmF5 IFJlc3VsdHM= IEZvdXJ0aA== IEVEVA== IE9zY2Fy Y2VuZA== IDEwNg== IE5VTEw= IEhFUkU= bWF0Y2g= IEJydW4= IGdsdWNvc2U= aWVn ZWd1 IGNlcnRpZmllZA== IHJlbGll IGh1bWFuaXRhcmlhbg== IHByYXllcnM= S2luZw== IG5hbg== aG91 MTA4 dWx1 IHJlbmV3YWJsZQ== IGRpc3Rpbmd1aXNo IGRlbnNl IFZlbnQ= IFBhY2thZ2U= IEJvc3M= IGVkaXRvcnM= IG1pZ3I= VHJh IFBldGVycw== IEFyY3RpYw== MjAwNA== IENhcGU= IGxvY2FsbHk= IGxhc3Rpbmc= IGhhbmR5 Liku UGFu IFJFUw== SW5kZXg= IHRlbnNpb25z IGZvcm1lcmx5 IGlkZW9sb2dpY2Fs IHNlbnNvcnM= IGRlYWxlcnM= IGRlZmluZXM= U2s= IHByb2NlZWRz IHByb3h5 YXppbmVz IEJhc2g= IFBhZA== IENyYWZ0 ZWFsb3Vz IHNoZWV0cw== b21ldHJ5 SnVuZQ== Y2xvY2s= VFQ= IFRoZWF0cmU= IEJ1eno= IGNoYXB0ZXJz IG1pbGxlbm4= IGRvdWdo IENvbmdyZXNzaW9uYWw= IGltYWdpbmVk YXZpb3I= IGNsaW5pYw== IDE5NDU= IGhvbGRlcg== cm9vdA== b2xlc3Rlcg== IHJlc3RhcnQ= Qk4= IEhhbWFz IEpvYg== IG9yYg== IHJhbQ== IGRpc2Nsb3Nl IHRyYW5zbGF0ZQ== IGltbWlncmFudA== IGFubm95aW5n IHRyZWF0eQ== YW5pdW0= IFRlYQ== IExlZ2lvbg== IGNyb3dkcw== IEJlYw== IEFlcg== b2h5ZA== QnJv TG9va2luZw== IGxicw== IGFnZ3Jlc3M= IHNlYW0= IGludGVyY2VwdA== IE1J bWVyY2lhbA== YWN0aXY= IENpdA== IGRpbWVuc2lvbg== IGNvbnNpc3RlbmN5 IHJ1c2hpbmc= IERvdWdsYXM= IHRyaW0= SW5zdGFsbA== aWNrZXI= IHNoeQ== MTA2 IG1lbnRpb25z cGVsbGVk IFRhaw== Y29zdA== IGNsYXNzcm9vbQ== IGZvcnR1bmU= ZHJpdmVu IHVubGU= IFdoZWVs IGludmVzdG9y IE1hc3RlcnM= a2l0 IGFzc29jaWF0aW9ucw== IEV2b2x1dGlvbg== b3Bpbmc= dXNjcmlwdA== IHByb3ZpbmNpYWw= IFdhbHRlcg== YXZp U08= IHVubGltaXRlZA== RW5nbGlzaA== IENhcmRz IEVib2xh bmVyZWQ= IHJldmVuZ2U= IG91dHJpZ2h0 dW1wZXI= IGZpdHRpbmc= IFNvbGlk IGZvcm1hbGx5 IHByb2JsZW1hdGlj IGhhemFyZA== IGVuY3J5cHRpb24= IHN0cmFpZ2h0Zm9yd2FyZA== IEFL IHBzZQ== IE9yYg== IENoYW1iZXI= IE1haw== Q29udGVudHM= IGxveWFsdHk= IGx5cmljcw== IFN5bQ== IHdlbGNvbWVk IGNvb2tlZA== IG1vbm9w IG51cnNl IG1pc2xlYWRpbmc= IGV0ZXJuYWw= IHNoaWZ0aW5n ICs9 Vmlz IGluc3RpdHV0aW9uYWw= aWxsYXJ5 IHBhbnQ= VkVSVA== IEFDQw== IEVuaA== IGluY29u IFJFVVRFUlM= IGRvbmF0ZWQ= 4oCm4oCm4oCm4oCm SW50ZXJu IGV4aGliaXQ= IHRpcmU= IFJpYw== IENoYW1waW9u IE11aGFtbWFk TklORw== IFNvY2Nlcg== IG1vYmlsaXR5 IHZhcnlpbmc= IE1vdmll IGxvcmQ= b2Fr RmllbGQ= IHZlY3Rvcg== dXNpb25z IHNjcmFw IGVuYWJsaW5n bWFrZQ== VG9y Lio= fHw= IFdlYnNpdGU= IE5QQw== IHNvY2lhbGlzdA== IEJpbGx5 IEFkZGl0aW9uYWw= IGNhcmdv IGZhcm1z IFNvb24= IFByaXpl IG1pZG5pZ2h0 IDkwMA== c2Vlbg== IFNwb3Q= IHNoZWVw IHNwb25zb3JlZA== IEhp IEp1bXA= IDE5Njc= TWljcm9zb2Z0 IEFnZW50 IGNoYXJ0cw== ZGly IGFkamFjZW50 IHRyaWNrcw== IG1hbmdh IGV4YWdnZXI= Lz4= Zm9vdGJhbGw= IEZDQw== R0M= IFRpZXI= YW5kcmE= T1VORA== JSks IGZydWl0cw== VkM= IEFB Um9iZXI= IG1pZHN0 4pc= YW5rYQ== IGxlZ2lzbGF0dXJl IE5laWw= IHRvdXJpc3Rz IiI= IFdhcm5pbmc= IE5ldmVydGhlbGVzcw== IE9mZmljaWFs IFdoYXRldmVy IG1vbGQ= IGRyYWZ0ZWQ= IHN1YnN0YW5jZXM= IGJyZWVk IHRhZ3M= IFRhc2s= IHZlcmI= IG1hbnVmYWN0dXJlZA== Y29tbWVudHM= IFBvbGlzaA== UHJvdg== IGRldGVybWluZXM= T2JhbWE= a2Vycw== IHV0dGVybHk= IHNlY3Q= c2NoZQ== IEdhdGVz IENoYXA= IGFsdW1pbnVt IHpvbWJpZQ== IFRvdWNo IFVQ IHNhdGlzZnk= IHByZWRvbWlu YXNjcmlwdA== IGVsYWJvcmF0ZQ== IDE5Njg= IG1lYXN1cmluZw== IFZhcmk= YW55YWh1 IHNpcg== dWxhdGVz aWRnZXM= aWNrZXRz IFNwZW5jZXI= VE0= b3VidGVk IHByZXk= IGluc3RhbGxpbmc= IENhYg== cmVlZA== cmVhdGVk U3VwcA== IHdyaXN0 IEtlcnJ5 MTA3 IEtsZQ== IFJhY2hlbA== IGNvdHRvbg== IEFSRQ== IEVsZQ== Q29udHJvbA== IGxvYWRz IERvZA== YW5hcw== Ym9uZQ== IGNsYXNzaWNhbA== IFJlZ2lvbmFs IEludGVn Vk0= IGRlc2lyZXM= IGF1dGlzbQ== c3VwcG9ydGVk IE1lc3NhZ2U= IGNvbXBhY3Q= d3JpdGVy IDEwOQ== IEh1cnJpY2FuZQ== Y2lzaW9u IGN5Y2xlcw== IGRyaWxs IGNvbGxlYWd1ZQ== IG1ha2Vy R2VybWFu IG1pc3Rha2Vu U3Vu IEdheQ== IHdoYXRzb2V2ZXI= IHNlbGxz IEFpcmw= bGl2 IE9wdGlvbg== IHNvbHZlZA== IHNlY3RvcnM= IGhvcml6b250YWw= IGVxdWF0aW9u IFNraWxs IEJpbw== Z2VtZW50 IFNuYXA= IExlZ2Fs IHRyYWRlbWFyaw== IG1ha2V1cA== IGFzc2VtYmxlZA== IHNhdmVz IEhhbGxvd2Vlbg== IFZlcm1vbnQ= IEZST00= IGZhcm1pbmc= IFBvZGNhc3Q= YWNjZXB0YWJsZQ== IEhpZ2hlcg== IGFzbGVlcA== dWxsaXZhbg== IHJlZmVyZW4= IExldg== IGJ1bGxldHM= b2tv SEM= IHN0YWlycw== IG1haW50YWlucw== IExvd2Vy IFZp IG1hcmluZQ== IGFjcmVz IGNvb3JkaW5hdG9y IEpvaA== IGNvdW50ZXJwYXJ0cw== IEJyb3RoZXJz IGluZGljdA== YnJh IGNodW5r IGNlbnRz SG9tZQ== IE1vbnRo IGFjY29yZGluZ2x5 aWZsZXM= IEdlcm1hbnM= IFN5bg== SHVi IGV5ZWI= 4pSA4pSA4pSA4pSA IHJhbmdlcw== IEhvbGxhbmQ= IFJvYm90 ZmM= TWlrZQ== IHBsYXNtYQ== IHN3YXA= IGF0aGxldGU= IFJhbXM= LCci IGluZmVjdGlvbnM= IGNvcnJpZA== IHZpYg== IHBhdGNoZXM= IHRyYWRpdGlvbmFsbHk= IHJldmVsYXRpb24= IHN3ZWVw IGdsYW5jZQ== IGluZXg= MjAwMw== IFJhdw== d29ya2luZw== b3N1cmVz IERhdA== IEx5bmNo IGxldmVyYWdl IFJlaWQ= IGNvcnJlbGF0aW9u aWFuY2Vz YXZhc2NyaXB0 IHJlcG9zaXRvcnk= cmV0dHk= IDE5NzI= MjQw IG91bg== cG9s IFJlZWQ= IHRhY3RpY2Fs aXNpdGU= QXBwbGU= IFF1aW5u IHJhcGVk aWxsbw== RXVyb3Bl IGFsZ29yaXRobXM= IFJvZHJpZw== aXU= IGlsbHVt IGZhbWU= IGludHJvZHVjaW5n IGRlbGF5cw== IFJhaWRlcnM= IHdoaXN0bGU= IG5vdmVscw== IFJlYWxseQ== IGRlcml2 IHB1YmxpY2F0aW9ucw== IE5laXRoZXI= IENvbW1lcmNl IGFzdG9u bGFuZ3VhZ2U= Tm90ZXM= IFJvdGg= IEZlYXI= IG1hdGU= IHBhcmFkZQ== IFFC IG1hbmV1 IENpbmNpbm5hdGk= bWl0dGluZw== IHdhaXN0 IFJldw== IGRpc2NvbnQ= 0LA= IHN0YXJpbmc= IGFsaWFz IHNlY3VyaXRpZXM= IHRvaWxldA== IEplZGk= IHVubGF3 dmlzZWQ= Ly8vLy8vLy8= XSg= IFdlaXNz IHByZXN0 IENvbXBhbg== IG1lbW8= IEdyYWNl SnVseQ== IEVsaXRl Y2VudGVy IFN0YXk= IGdhbGF4eQ== IHRvb3Ro IFNldHRpbmdz IHN1YmplY3RlZA== 44Km IGxpbmViYWNr IHJldGFpbGVycw== IFdhbnQ= IGRhbmdlcnM= QWly IHZvbHVudGFyeQ== ZXdheQ== IGludGVycHJldGVk b3RpbmU= w6c= IHBlbA== U2VydmljZQ== IEV2ZW50dWFsbHk= IGNhcmVlcnM= IHRocmVhdGVu IG1lbW9y IEJyYWRsZXk= YW5jaWVz c24= IFVua25vd24= TmF0aW9uYWw= IHNoYWRvd3M= YWlsYW5k IERhc2g= RXZlcnlvbmU= aXp6YXJk TWFyY2g= PSg= IHB1bGxz IHN0cmFuZ2Vy IGJhY2t3YXJkcw== IEJlcm5hcmQ= aW1lbnNpb25hbA== IGNocm9u IHRoZW9yZXRpY2Fs a3RvcA== IHdhcmU= IEludmVzdGln IEluaXRp IE9wZXJhdGlvbnM= b3Zlbg== b2NpZGU= Ki8= IGZsYW1lcw== IENhc2g= c2hpdA== IGNhYg== IEFuYWx5 IFNlYWg= IGRlZmluaW5n IG9yZGVyaW5n IGltbXVu IHBlcnNpc3RlbnQ= QUNI UnVzc2lhbg== bWFucw== IGhpbmQ= IHBob3RvZ3JhcGh5 wqk= IGh1Zw== IDEwNw== IEhlbmNl aW90cw== dWRlYXU= IHN1YnNpZGllcw== IHJvdXRpbmVseQ== IERldmljZQ== aXRpYw== IGRpc2d1c3Q= bGFuZGVy IDE5NDA= IGFzc2lnbm1lbnQ= IEJlc2lkZXM= d2ljaw== IER1c3Q= dXNj c3RydWN0ZWQ= MTEx ZGV2ZWxvcA== IGZvbmQ= IGludGVyc2VjdGlvbg== IGRpZ25pdHk= IGNvbW1pc3Npb25lcg== V2l0aG91dA== cmVhY2g= IGNhcnRvb24= IHNjYWxlcw== 44Ot RklH IHN1cnZleXM= IEluZG9uZXNpYQ== IGFydHdvcms= IHVuY2g= IGN5Y2xpbmc= dW5jdA== YXVlcg== b3JhdGU= IE9idmlvdXNseQ== IGNoYXJhY3Rlcml6ZWQ= ZmVsZA== IGFmZmlybQ== IGlubmluZ3M= IOk= IGFsaWVucw== IGNsb3Ro ZXRvb3Ro IENlcnRhaW4= wqc= IGRpZ2VzdA== a25vdw== IFhM IHByZWRpY3Rpb25z IGRpbg== V0FS IGFmdGVybWF0aA== RXhhbXBsZQ== IFN1Y2Nlc3M= IFRocg== SUdO IG1pbmVy QnVz IGNsYXJpdHk= aGVpbWVy IE9VVA== IFNlbmQ= IENpcmNsZQ== IERpZXQ= IHByb25vdW5jZWQ= IGNyZWF0b3Jz IGVhcnRocXVha2U= YXR0ZXJ5 Z2VvbnM= IG9k IGxheWluZw== b3Jw VWx0 cHJvamVjdA== IHVuZGVybWlu IHNlcXVlbA== U2Ft IERhcmtuZXNz IHJlY2VwdGlvbg== YnVsbA== WVM= IFZpcg== IHNlcXVlbmNlcw== IENvaW4= IG91dGZpdA== IFdhaXQ= MTE5 IGRlbGl2ZXJz Li4uLi4u IGJsb3du IEVzYw== IE1hdGg= cGVybQ== IFVs IGdsaW0= IGZhY2lhbA== IGdyZWVuaG91c2U= IHRva2Vucw== Ly0= IEFubnVhbA== IE9ORQ== IHRlZW5hZ2U= IFBoeXNpY2Fs IExhbmc= IENlbHQ= IHN1ZWQ= aXZpZHVhbGx5 IHBhdGllbmNl Y2hhaXI= cmVndWxhcg== IGF1Zw== aW52 ZXhjZXB0 IExpbA== IG5lc3Q= ZmQ= c3Vt IENoYXNl UnVzc2lh IEplbm5pZmVy IG9mZnNlYXNvbg== T3ZlcmFsbA== Rm9yZQ== IHJpb3Q= QXVk Zm9ybWVy IGRlZmVuZGVycw== IENU aW90aWM= cmlibHk= IGF1dG9tYXRlZA== IHBlbmlz IGluc2lzdA== IGRpYWdyYW0= IFNRTA== IEdhcmM= IHdpdGNo Y2xpZW50 aWVycmE= YW1iZXJz IHJlY291bnQ= ZmFy VmVyeQ== b3N0ZXJvbmU= IGFwcHJlY2lhdGVk IFBlcmZlY3Q= U2VjdGlvbg== IGRvc2Vz b2NhdXN0 IGNvc3RseQ== IGdyYW1z IFNoaQ== IHdyZXN0bGluZw== IDE5NzE= IHRyb3BoeQ== IG5lcnZl IEtheg== IEV4cGVyaWVuY2U= IHBsZWRnZWQ= IHBsYXliYWNr IGNyZWF0aXZpdHk= Ynll IGF0dGFja2Vycw== IGhvbGRlcnM= IENvYWNo IFBoRA== IHRyYW5zZmVycw== IGNvbG9yZWQ= IEhpbmR1 IGRyb3du IGxpc3RlbmVk IFdB aWFzbQ== UE8= IGFwcGVhbGluZw== IGRpc2Nsb3NlZA== IENoaWNrZW4= YWdnaW5n IHBsZWFkZWQ= IG5hdmlnYXRpb24= IFJldHVybnM= IFtb Uk9S RUE= IHBob3RvZ3JhcGhlcg== IFJpZGVy aXBwZXJz IHNsaWNl IGVyZWN0 IGhlZA== aXNzYW5jZQ== IFZpa2luZ3M= dXJpb3Vz IGFwcGV0 b3VidGVkbHk= Q2hpbGQ= IGF1dGhlbnRpYw== b29z IE1ha2luZw== IGFubm91bmNpbmc= IGJvZA== IG1ldGVy IE5pbmU= IFJvZ3Vl IHdvcmtmb3JjZQ== IHJlbmV3ZWQ= IG9yZ2FuaXNhdGlvbnM= YWNz UExF U2hvcnQ= IGNvbXBvdW5kcw== IFZpc2l0 IGVudmVsb3A= ZWFydGg= IHN1cHBvcnRpdmU= Z2dsZQ== IEJydXNzZWxz IEd1aWxk Q3JlYXRl UkVM IGF2ZXJhZ2Vk IDE5Njk= cmlhZ2Vz IGxlbmd0aHk= IGZvcmdvdA== T2theQ== IEVyZA== IGRlYWxlcg== IHJlY2Vzc2lvbg== REQ= IGRlc3BlcmF0ZWx5 IGh1bmdlcg== IHN0aWNrcw== IG1waA== IEZhaXRo IGludGVudGlvbmFsbHk= IGRlbW9s dWVsbGVy IFNhbGU= IGRlYnJpcw== c3ByaW5n IGxlYXA= Pj4+Pg== IGNvbnRhaW5lcnM= c2VsbGluZw== cmFuZWFu YXR0ZXJpbmc= IGNvbW1lbnRlZA== IENN b251dA== IHdvb2Rz ZXNwZWNpYWxseQ== IG9yZ2FuaXpl aXZpYw== IFdvb2Rz YW5nYQ== c3F1 IG1hag== YW1vbg== IGF4aXM= IDE5NzQ= IERlbm1hcms= IHdhcnJpb3I= IFBhbmQ= IG91dGxpbmVk IEJP aW5zdWxh emlsbGE= ZWJvb2s= IGRhcmU= IHNlYXJjaGVk IG5hdmlnYXRl U24= d3JpdGluZw== IHVuaXRlZA== SmFwYW4= IEhlYnJldw== IGZsYW1l IHJlbGllcw== IGNhdGNoaW5n IFNobw== IGltcHJpc29ubWVudA== IHBvY2tldHM= IGNsb3N1cmU= IEZhbQ== dGlt YWRlcXU= QWN0aXZpdHk= IHJlY3J1aXRpbmc= IFdBVENI IEFyZ2VudGluYQ== ZGVzdA== IGFwb2xvZ2l6ZQ== b3Jv IGxhY2tz IHR1bmVk IEdyaWZmaW4= IGluZmFtb3Vz IGNlbGVicml0eQ== c3Nvbg== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IElzaXM= IERpc3BsYXk= IGNyZWRpYmlsaXR5 IGVjb25vbWllcw== IGhlYWRsaW5l IENvd2JveXM= IGluZGVm IGxhdGVseQ== IGluY2VudGl2ZXM= YnV0dG9u IE1vYg== QXV0 IHJlc2lnbmVk IE9t Y2FtcA== IHByb2ZpbGVz IHNjaGVtZXM= b2xwaGlucw== YXllZA== Q2xpbnRvbg== ZW5o IFlhaG9v IGFic3Q= IGFuaw== c3VpdHM= IHdpc2hlZA== IE1hcmNv dWRkZW4= IHNwaGVyZQ== IEJpc2hvcA== IGluY29ycG9yYXRlZA== IFBsYW50 MTE0 IGhhdGVk cGlj IGRvbmF0ZQ== IGxpbmVk IGJlYW5z IHN0ZWFsaW5n IGNvc3R1bWU= IHNoZXJpZmY= IGZvcnR5 IGludGFjdA== IGFkYXB0ZWQ= IHRyYXZlbGxpbmc= YmFydA== IG5pY2VseQ== IGRyaWVk IHNjYWw= b3NpdHk= Tk9URQ== IEJo IEJyb25jb3M= IElnbg== IGludGltYXRl IGNoZW1pc3RyeQ== IG9wdGltYWw= RGVi IEdlbmVyYXRpb24= IF0s aWNoaQ== IFdpaQ== IFlPVVI= dmVudGlvbnM= V3JpdGU= IHBvcHVs dW5uaW5n IFdvcg== Vm9s IHF1ZWVu aGVhZHM= S0s= IGFuYWx5emU= b3BpYw== ZWFyY2hlcnM= IGRvdA== bGVncmFwaA== YXN0aWNhbGx5 IHVwZ3JhZGVz IGNhcmVz IGV4dGVuZGluZw== IGZyZWV6ZQ== IGluYWJpbGl0eQ== IG9yZ2Fucw== IHByZXRlbmQ= IG91dGxldA== MTEz b2xhbg== IE1hbGw= dWxpbmc= dGFsaw== IGV4cHJlc3Npbmc= IEFsd2F5cw== IEJlZ2lu ZmlsZXM= IGxpY2Vuc2Vz JSU= IE1pdHQ= IGZpbHRlcnM= IE1pbHdhdWtlZQ== R04= IHVuZm9sZA== TW8= IG51dHJpdGlvbg== cHBv Qm8= IGZvdW5kaW5n IHVuZGVybWluZQ== IGVhc2llc3Q= IEN6ZWNo IE1hY2s= IHNleHVhbGl0eQ== IE5peG9u V2lu IEFybg== IEtpbg== 44Kj aWNlcg== IGZvcnR1bg== IHN1cmZhY2Vz YWdoZA== IGNhcnJpZXJz IFBBUlQ= IFRpYg== IGludGVydmFs IGZydXN0cmF0aW5n IFNoaXA= IEFybWVk ZmZl IGJvYXRz IEFicmFoYW0= aW5pcw== IHN1aXRlZA== dGhyZWFk aW92 YWJ1bA== IFZlbmV6dWVsYQ== IHRvbQ== c3VwZXI= IGNhc3RsZQ== YWx0aG91Z2g= aW94aWRl ZWNoZXM= IGV2b2x1dGlvbmFyeQ== IG5lZ290aWF0ZQ== IGNvbmZyb250ZWQ= UmVtZW1iZXI= IDE3MA== U3VjaA== IDkxMQ== bXVsdA== IEFieXNz dXJyeQ== a2Vlcw== c3BlYw== IEJhcmJhcmE= IGJlbG9uZ2luZw== IHZpbGxhaW4= aXN0YW5p IGFjY291bnRhYmxl IHBvcnRpb25z IERlY2w= VXI= IEthdGU= Z3Jl IG1hZ2F6aW5lcw== VUNL IHJlZ3VsYXRl b21vbg== IEFsbW9zdA== IG92ZXJ2aWV3 IHNjcmFt IGxvb3Q= IEZpdHo= IGNoYXJhY3RlcmlzdGlj IFNuYWtl c2F5 IFJpY28= IHRyYWl0 IEpvaW5lZA== YXVjdXM= IGFkYXB0YXRpb24= IEFpcmxpbmVz IGFyY2hhZQ== IElkZQ== IGJpa2Vz IGxpdGVyYXJ5 IGluZmx1ZW5jZXM= IFVzZWQ= Q3JlYXQ= IHBsZWE= IERlZmVuY2U= IEFzc2Fzcw== IHBvbmQ= VUxU KSI= IGV2YWx1YXRlZA== IG9idGFpbmluZw== IGRlbW9ncmFwaGlj IHZpZ2ls YWxleQ== IHNwb3VzZQ== IFNlYWhhd2tz cmVzcG9ucw== IEJlbHQ= dW1hdGlj IHJpc2Vz cnVubmVy IE1pY2hlbGxl IHBvdGVudA== cmFjZQ== IFBBQw== RmluZA== b2xlc3Rlcm9s SVNT IEludHJvZHVjZWQ= cmVzc2Vz aWdubWVudA== T3M= IFR1 IERleA== aWNpZGVz IHNwYXJrZWQ= IExhdXJh IEJyeWFudA== IHNtaWxpbmc= IE5leHVz IGRlZmVuZGFudHM= IENhdGFs IGRpc2hlcw== c2hhcGVk IHByb2xvbmc= bXQ= KCQ= 44CC IGNhbGN1bGF0aW9ucw== IFNhbWU= IHBpdg== SEg= IGNhbmNlbGxlZA== IGdyaW4= IHRlcnJpdG9yaWVz aXN0aWNhbGx5 Q29tZQ== IFBhcmVudA== UHJvamVjdA== IG5lZ2xpZw== IFByaXZhY3k= IGFtbW8= TEVDVA== b2x1dGVseQ== IEVwaWM= IG1pc3VuZGVy d2Fs QXByaWw= bW9z cGF0aHk= IENhcnNvbg== IGFsYnVtcw== IEVhc3k= IHBpc3RvbA== PDw= IFwo dGFyZ2V0 aGVscA== IGludGVycHJl Y29uc2Npb3Vz IEhvdXNpbmc= IEpvaW50 MTI3 IGJlZXJz c2NpZW5jZQ== IEZpcmVmb3g= ZWZmZWN0aXZl IENhYmlu IE9rYXk= IEFwcGxpYw== IHNwYWNlY3JhZnQ= IFNS dmV0 IFN0cmFuZ2U= U0I= IGNvcnBz aWJlcmFs ZWZmaWNpZW50 IHByZXZhbGVuY2U= IGVjb25vbWlzdHM= MTE4 VGhyZWFk b3JkYWJsZQ== T0RF IENhbnQ= PS09LQ== aWZpYWJsZQ== IEFyb3VuZA== IHBvbGU= IHdpbGxpbmduZXNz Q0xB IEtpZA== IGNvbXBsZW1lbnQ= IHNjYXR0ZXJlZA== IGlubWF0ZXM= IGJsZWVkaW5n ZXZlcnk= IHF1ZXVl IFRyYWlu IGhpag== IG1lbGVl cGxldGVk IGRpZ2l0 IGdlbQ== b2ZmaWNpYWw= IGxpZnRpbmc= 0LU= UmVxdQ== aXR1dGVz IHBhY2thZ2luZw== IFdvcmtlcnM= aHJhbg== IExlYmFub24= b2xlc2M= IHB1bmlzaGVk IEp1YW4= IGphbQ== IERvY3VtZW50 IG1hcHBpbmc= aWNhdGVz IGluZXZpdGFibHk= IHZhbmlsbGE= IFRvbg== IHdhdGNoZXM= IGxlYWd1ZXM= IGluaXRpYXRlZA== ZGVncmVl cG9ydGlvbg== IHJlY2FsbHM= IHJ1aW4= IG1lbHQ= SUFO IGhlbQ== RXhw IGJha2luZw== IENvbG9tYg== YXRpYmxl IHJhZGl1cw== cGx1Zw== IElG ZXRpY2FsbHk= IGZpY3Q= SEVS IFRhcA== YXRpbnVt IGluaw== IGNvaA== IFdpemFyZA== Ym90aA== dGV4 IHNwZW5kcw== IEN1cnJlbnRseQ== IFBpdA== IG5ldXJvbnM= aWdudA== IHJhbGw= IGJ1c2Vz YnVpbGRpbmc= IGFkanVzdG1lbnRz IGNyaWVk aWJsaWNhbA== YXR0ZWQ= IFppb24= IE1hdHRlcg== IG1lZGl0YXRpb24= IERlbm5pcw== IG91cnM= IFRhYg== IHJhbmtpbmdz b3J0YWw= IGFkdmVycw== IHN1cnJlbmRlcg== IEdvYg== Y2l1bQ== b21hcw== aW1ldGVy IG11bHRpcGxheWVy IGhlcm9pbg== IG9wdGltaXN0aWM= IGluZGljYXRvcg== IEJyaWc= IGdyb2Nlcnk= IGFwcGxpY2FudA== IFJvY2tldA== dmlk RXhjZXB0aW9u cGVudA== IG9yZ2FuaXppbmc= IGVuY291bnRlcnM= IFRPRA== IGpld2Vs U2F2ZQ== IENocmlzdGll IGhlYXRpbmc= IGxhenk= IENQ IGNvdXNpbg== Q29uZmln IHJlZ2VuZXI= IG5lYXJlc3Q= IGFjaGlldmluZw== RU5T dGhyb3c= IFJpY2htb25k YW50bGU= MjAwMg== IGFudGVu YmlyZA== MTMz IG5hcmM= cmFpbnQ= dW5ueQ== IEhpc3Bhbmlj b3VybmFtZW50cw== IHByb3BoZQ== IFRoYWlsYW5k IFRp IGluamVjdGlvbg== IGluaGVyaXQ= cmF2aXM= IG1lZGk= IHdob2V2ZXI= IERFQlVH R1A= IEh1ZA== Q2FyZA== cHJvbQ== IHBvcg== IG92ZXJoZWFk TGF3 IHZpb2xhdGU= IGhlYXRlZA== IGRlc2NyaXB0aW9ucw== IGFjaGlldmVtZW50cw== IEJlZXI= IFF1YW50 V2Fz IGVpZ2h0aA== IEl2 IHNwZWNpYWxpemVk VVBEQVRF IERlbHRh UG9w SnVs IEFzaw== b3BoeQ== IG5ld3NsZXR0ZXJz IFRvb2w= IGdhcmQ= IENvbmZlZGVy IEdNVA== IEFiYm90dA== IGltbXVuaXR5 IFZN SXNsYW0= IGltcGxpY2l0 d2Q= IDE5NDQ= cmF2aXR5 b21ldHJpYw== IHN1cnZpdmluZw== dXJhaQ== IFByaXNvbg== IHJ1c3Q= IFNrZXRjaA== IGJlZXM= IFRoZW9yeQ== IG1lcml0 VGV4 Y2hhdA== IG1pbQ== IHBhc3Rl IEtvY2g= IGlnbm9yYW5jZQ== IFNob290 IGJhc2VtZW50 VW5pdGVk IEFkdmlz aGVpZ2h0 IGZvc3Rlcg== IGRldGFpbg== aW5mb3JtYXRpb24= IG5ldXJhbA== Jzs= IHByb3Zlcw== YWxsZXJ5 IGludml0YXRpb24= dW1iZXJz IGNhdHRsZQ== IGJpY3ljbGU= emk= IGNvbnN1bHRhbnQ= IGFwb2xvZ3k= IFRpZ2Vy IDEyMw== OTk5 IGluZGl2aWR1YWxseQ== cnQ= aWdpb24= IEJyYXppbGlhbg== IGRpc3R1cmI= IGVudHJlcHJlbmV1cnM= IGZvcmVzdHM= Y2VycHQ= cGxhdGVz cGhlcg== Y2xpcHNl IHR3aXR0ZXI= IGFjaWRz b2dyYXBoaWNhbA== aHVt IEJhbGQ= aWZ1bGx5 IGNvbXBpbGVy IERB IGRvbm9y YXNp IHRyaWJhbA== bGFzaA== IENvbmZpZw== IGFwcGxpY2FudHM= IHNhbGFyaWVz MTM1 UHV0aW4= IEZvY3Vz aXJz IG1pc2NvbmR1Y3Q= IEhheg== IGVhdGVu TW9iaWxl TXVzbGlt IE1hcmN1cw== dmlvbA== IGZhdm9yYWJsZQ== IHN0dWI= YWRpbg== IEhvYg== IGZhaXRoZnVs IGVsZWN0cm9uaWNz IHZhY3V1bQ== d2FpdA== YmFja2Vk ZWNvbm9taWM= ZGlzdA== IHRlbnVyZQ== IHNpbmNlcmU= IFRvZ2V0aGVy IFdhdmU= IHByb2dyZXNzaW9u IGRlbnlpbmc= IGRpc3RyZXNz YnJhc2th dGhpcmQ= IG1peGluZw== IGNvbG9uaWFs IHByaXZhdGVseQ== IHVucmVzdA== YXRlcm5pdHk= IHByZW1pc2Vz YW50aQ== Z3JlZ2F0aW9u IGxpY2VuY2U= IEhpbmQ= IFNhbXVlbA== IGNvbnZpbmNpbmc= IEFjZQ== IFJ1c3Q= IE5ldGFueWFodQ== IGhhbmRsZXM= IFBhdGNo b3JpZW50ZWQ= YWhv IEdvbno= IGhhY2tlcnM= Y2xhaW1lcg== IGN1c3RvbXM= IEdyYW4= ZmlnaHRlcnM= IGx1Yw== IG1hbnVzY3JpcHQ= YXJlbnRob29k IGRldmls IHdhcnJpb3Jz IG9mZmVuZGVycw== V2lsbGlhbQ== IGhvbGlkYXlz IG5pZ2h0bWFyZQ== IGxldmVy aWZmZXJlbnQ= U3RhdA== IGV4aGliaXRpb24= cHV0ZWQ= IFB1cmU= IGFscGhh IGVudGh1c2lhc20= IFJlcHJlc2VudGF0aXZlcw== RUFS IFR5cA== IHdoZWF0 IEFsZg== IGNvcnJlY3Rpb24= IGV2YW5nZWw= QVRU TWlzcw== IHNvdXA= IGltcGxpZWQ= cGFyYW0= IHNleHk= IEx1eA== IHJlcHVibGlj cGF0Y2g= YWJsaXNo IGljb25z IGZhdGhlcnM= IEdFVA== IENhcmli IHJlZ3VsYXRlZA== IENvaGVu IEJvYmJ5 IG5lcg== IGJlbnQ= dmVudG9yeQ== IEFsb25n IEVTVA== IFdhbGxhY2U= IG11cmRlcnM= cmlzZQ== a2VsbA== IENvbW1vbndlYWx0aA== IG5hc3R5 ZXRh IE1JVA== IGFkbWluaXN0ZXJlZA== IGdlbnVpbmVseQ== RWRpdG9y bmljaw== IGh5ZHJv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IEJsZQ== IGZpbmVz IGdvcmdl YXVzaWJsZQ== cmg= IGFwcGxl bWVudGlvbmVk IHJvcGU= b3R5cA== SFI= IGRpc2FwcG9pbnRpbmc= IGNhZ2U= bmlr IGRvdWJ0cw== IEZSRUU= cHJpbnRz IE1VU1Q= IHZlbmRvcnM= IElucXU= IGxpYmVyYWxz IGNvbnRyYWN0b3I= IHVwc2lkZQ== Y2hpbGRyZW4= IHRyaWNreQ== IHJlZ3VsYXRvcnM= Y2hhcmdlZA== bGl0ZXI= ICoqKg== IHJlYmVsbA== bGFuZw== IGxvY2Fscw== IHBoeXNpY2lhbnM= IGhleQ== YXJzZQ== dG0= IExleA== IGJlaGF2aW9yYWw= c3VjY2Vzc2Z1bA== Rlg= IGJyaWNr b3ZpYw== IGNvbmZvcm0= IHJldmlld2luZw== IGluc2lnaHRz IGJpb2xvZ3k= IFJlbW92ZQ== IEV4dHJh IGNvbW1pdHRpbmc= aW5kdWNlZA== aWdudHk= aWdt IGF0b21pYw== Q29tbW9u IEVN IFBlcmU= IEl0ZW1z ZWg= IHByZXNlcnZlZA== IEhvb2Q= IHByaXNvbmVy IGJhbmtydXB0Y3k= IGdyZW4= dXNoZXM= IGV4cGxvaXRhdGlvbg== IHNpZ25hdHVyZXM= IGZpbmFu XSwi IE1S IG1lZw== cmVtbGlu IG11c2ljaWFucw== IHNlbGVjdGluZw== IGV4YW1pbmluZw== SU5L bGF0ZWQ= SGk= IGFydGlj IHBldHM= IGltcGFpcg== IE1BTg== IHRhYmxldHM= aW5jbHVkZQ== UmFuZ2U= IGNhdXQ= IGxvZ3M= IG1vdW50aW5n IHVuYXdhcmU= IGR5bmFtaWNz IFBhbGVzdGluZQ== IFF1YXJ0ZXI= IFB1cnBsZQ== IG1h IEltcG9ydA== IGNvbGxlY3Rpb25z Y2lhdGlvbg== IHN1Y2Nlc3Nvcg== IGNsb25l IGFpbWluZw== IHBvc3Nlc3NlZA== IHN0aWNraW5n IHNoYWtpbmc= IGxvY2F0ZQ== IEhvY2tleQ== VHVybg== MTcw IGZpZnRlZW4= IEhhcnJpc29u IGNvbnRpbnVvdXNseQ== IFRD IFZhbGVudA== IFJlc2N1ZQ== IGJ5cGFzcw== YW1vdW50 IG1hc3Q= IHByb3RlY3Rz IGFydGlzdGlj IHNvbWV0aW1l IHNob2U= IHNob3V0ZWQ= aWZpY2FudA== ZXRpdGl2ZQ== IFJlZ2lzdGVy IEppbg== IGNvbmNlbnRyYXRlZA== bGluZ3Rvbg== b25pZXM= IGdlbmVyYXRvcg== eXJpbQ== IEFybWVu IGNsZWFyaW5n aWRv IFRX YWxwaA== IGxhZGllcw== SGFyZA== IGRpYWxvZw== IGlucHV0cw== 5pw= IHBvc2Vz IHNsb3Rz IFByZW1pdW0= IGxlYWtz IGJvc3Nlcw== IDExMw== Y291cnNl QWNj IE5ld3Rvbg== IEF1c3RyaWE= IE1hZ2U= IHRlYWNoZXM= YWJhZA== IHdlYXJz IGN5bA== IGN1cnNl IFNhbGVz IFdpbmdz IHBzeQ== IGdhcHM= IEljZWxhbmQ= IFBpbnRlcmVzdA== IGxhbmRsb3Jk IGRlZmluaXRpb25z IEtlcg== IHN1ZmZpY2llbnRseQ== IFBlbmNl IEFyY2hpdGVjdA== IHN1cnBhc3M= IDExNA== IHN1cGVyaGVybw== IERpc2Vhc2U= IHByaWVzdHM= IEN1bHR1cmU= IGRlZmluaXRpdmU= IHNlY3JldGx5 IERhbmNl aW5zdGFsbA== Y2hpZWY= IEplc3NpY2E= V291bGQ= VXBkYXRlZA== IGxvY2tlcg== IEtheQ== IG1lbW9yaWFs 6KY= ZmF0 IGRpc2d1 IGZsYXZvcnM= IEJhc2ViYWxs IFJlc2lzdGFuY2U= IGtpY2tz IGVudg== IHRlZW5hZ2Vycw== RGFyaw== IENBUg== IGhhbHQ= IExH IEdhYnJpZWw= IGZldmVy IHNhdHVy IG1hbGw= IGFmZmlsaWF0ZQ== IFNsZWVw IFNwZWNpZmlj IFZlbA== IGphcg== IFNhY3JlZA== IEVkd2FyZHM= IEFDTA== IHJldGFpbmVk IEdpYW50 IGxpbWl0YXRpb24= aW5jZXM= IHJlZnVzYWw= IFRhbGU= IEJ1dGxlcg== IGFjY2lkZW50cw== IENTUw== IGltcG9ydGVk IENvcHk= zrE= RVJU emVs IGRpdmlzaW9ucw== aG90cw== IEFsYg== IERT TG9hZGVy V2FzaGluZ3Rvbg== YXRpc2Y= IENyZWF0aXZl XC4= IEF1dG9t cmVkaWN0 IHJlY2VwdG9y IENhcmxvcw== TWV0aG9k b2th IG1hbGljaW91cw== IHN0ZXBwaW5n LFs= IERhZA== IGF0dHJhY3Rpb24= IEVmZmVjdHM= IFBpcmF0ZQ== IENlcg== IEluZHVzdHJ5 IFJ1ZA== IGNoYXJ0ZXI= IGRpbmluZw== IGluc2lzdHM= IGNvbmZpZ3VyZQ== ICgj IFNpbXBsZQ== IFNjcm9sbA== VVRD MTc1 IEtvbg== IG1hcmtldHBsYWNl IOOC IHJlZnJlcw== IGdhdGVz ZXJyZWQ= IFBvZA== IGJlaGF2ZQ== RnJhbms= bm9kZQ== IGVuZG9yc2Vk aGV0dA== YXNpdmU= IEhvbWVsYW5k IHJpZGVz IExlYXZl ZXJuZXNz IGZsb29kaW5n QUZQ IHJpc2Vu IGNvbnRpbnVhbGx5 IHVuYW5pbQ== IENvbnRyYWN0 IFBhcw== IGd1aWRlZA== IENoaWxl YmQ= IHN1Y2M= cHRpYw== IGNvbW1pdHRlZXM= IEx1dGhlcg== IEFueW9uZQ== IHNhYg== MTI0 IHBpeGVs IEJhaw== IFRhZw== IEJlbm5ldHQ= RW50ZXI= c21hbGw= IFByZXNpZGVudGlhbA== IHB1bA== IGNvbnRyYWNl YXJjaGl2ZQ== IGNvYXN0YWw= IEtpZHM= MTky 4oCy aWNreQ== SU5HVE9O IHdvbGY= IFN0YWxpbg== VHVy aWRnZXQ= YW1hcw== IFVubGVzcw== IHNwb25zb3I= IG1vcnBo IENob29zZQ== IHJ1bm5lcg== IHVuYmVs IG11ZA== IE1hbmE= IGR1YmJlZA== IGdvZGQ= dXJlcnM= d2luZG93 IHJlbGllZA== IGNlbGVicmF0aW5n b3Nj IDEzNQ== IGxvYmJ5aW5n IGluY29tcGxldGU= IHJlc3RyaWN0aW9u IGluY2Fw aXR1cw== IGV4cGVjdGF0aW9u IEFwb2xsbw== IGludGVucw== IHN5bmM= R0g= IG1hbmlwdWxhdGlvbg== Qlk= IHNwZWFy IGJyZWFzdHM= IHZvbGNhbg== aWxpYQ== TWF0ZXJpYWw= IGZvcm1hdHM= IEJhc3Q= IHBhcmxpYW1lbnRhcnk= IHNuYWtl IHNlcnZhbnRz IFRydWRlYXU= IEdyaW0= IEFyYWJpYw== IFNDUA== IEJveXM= c3RhdGlvbg== IHByb3NwZWN0aXZl b3JkZQ== aW5pdGlhbGl6ZWQ= IGJvcmVk QUJMRQ== IGFjY2Vzc2Vk IHRheGk= IFNoZWxs YWlkZW4= dXJzZWQ= aW5hdGVz IEluc3VyYW5jZQ== IFBldGU= U2VwdGVtYmVy NjUw IGFkdmVudHVyZXM= IENvdmVy IHRyaWJ1dGU= IHNrZXRjaA== IGVtcG93ZXI= INg= IEdsZW5u IERhdw== PVwi IFBvbGl0aWNz IGd1aWRlcw== IGRpb3hpZGU= IEdvcmU= IEJyaWdodA== IFNpZXJyYQ== IHZhbHVlZA== Y29uZA== IHBvaW50ZXI= U2VsZWN0 IHJpc2t5 IGFic29yYg== aW1hZ2Vz IHJlZnVzZXM= IGJvbnVzZXM= X19f IGhpbGFy IEZlYXR1cmVz MjIw IENvbGxlY3Rvcg== Rm9vdA== IDE5NjQ= Y3VsdXM= IGRhd24= IHdvcmtvdXQ= IExP IHBoaWxvc29waGljYWw= IFNhbmR5 IFlvdXRo IGxpYWJsZQ== QWY= Ymx1ZQ== IG92ZXJ0dXJu bGVzc25lc3M= IFRyaWJ1bmU= IEluZw== IGZhY3Rvcmllcw== IGNhdGNoZXM= IHByb25l IG1hdHJpeA== IGxvZ2lu IGluYWNj IGV4ZXJ0 c3lz IG5lZWRsZQ== IFF1cg== IG5vdGlmaWVk b3VsZGVy dHg= IHJlbWluZHM= IHB1Ymxpc2hlcnM= IG5vcnQ= IGdpdA== IGZsaWVz IEVtaWx5 IGZsb3dpbmc= IEFsaWVu IFN0cmF0ZWc= IGhhcmRlc3Q= IG1vZGlmaWNhdGlvbg== QVBJ IE1Z IGNyYXNoZXM= c3RhaXJz bnVtYmVy IHVyZ2luZw== Y2hhbm5lbA== IEZhbGNvbg== IGluaGFiaXRhbnRz IHRlcnJpZnlpbmc= IHV0aWxpemU= IGJhbm5lcg== IGNpZ2FyZXR0ZXM= IHNlbnNlcw== IEhvbG1lcw== IHByYWN0aXRpb24= IFBoaWxsaXBz b3R0bw== IGNvbXBpbGU= TW9kZWw= IEtv IFtd QW1lcmljYW5z IFRlcm1z IG1lZGljYXRpb25z IEFuYQ== IGZ1bmRhbWVudGFsbHk= IE5vdGljZQ== IHdlYWtlcg== IDAwMDA= IGdhcmxpYw== IG91dGJyZWFr IGVjb25vbWlzdA== IEJpcnRo IG9ic3RhY2xlcw== YXJjZXI= IE9ydGhvZG94 IHBsYWNlYm8= IENyZXc= YXNwYmVycnk= IEFuZ2Vscw== IGRpc2NoYXJnZQ== IGRlc3RydWN0aXZl MTE3 IFJpc2luZw== IGRhaXJ5 bGF0ZQ== IGNvbGxpc2lvbg== IFRpZ2Vycw== ZWFub3I= b2N1bWVudGVk IEludmFsaWQ= IGRvbnQ= IExpdGVy IFZh IGh5ZHJvZ2Vu IHZhcmlhbnRz IEJyb3ducw== IDE5NjU= IGluZGlnZW5vdXM= IHRyYWRlcw== IHJlbWFpbmRlcg== IHN3ZXB0 IEltcGFjdA== IHJlZGlzdA== IHVuaW50 Z3JhZHVhdGU= 44OV IFdJTEw= 44Gu5w== IENyaXRpY2Fs IGZpc2hlcg== IHZpY2lvdXM= IHJldmVyc2Vk WWVhcg== IFNveA== IHNob290aW5ncw== IGZpbG1pbmc= IHRvdWNoZG93bnM= YWlyZXM= bWVs IGdyYW5kZmF0aGVy IGFmZmVjdGlvbg== aW5nbGU= IG92ZXJseQ== QWRkaXRpb25hbA== IHN1cHJlbWU= IEdyYWQ= IHNwb3J0aW5n IG1lcmN5 IEJyb29rcw== b3VudHk= IHBlcmZvcm1z IHRpZ2h0bHk= IGRlbW9ucw== IGtpbGxpbmdz IGZhY3Rpb24= IE5vdmE= YXV0cw== IHVuZG91YnRlZGx5 YXJpbg== IHVuZGVyd2F5 cmFr IGxpdg== IFJlZ2lvbg== IGJyaWVmaW5n c2Vycw== Y2xvdWQ= IE1paw== dXNw IHByZWRpY3Rpb24= YXpvcg== IHBvcnRhYmxl IEdhbmQ= IHByZXNlbnRpbmc= IDEwODA= wrs= dXNoaQ== IFNwYXJr dGhlcmV1bQ== IGp1c3RpZmljYXRpb24= IE55 IGNvbnRyYWN0b3Jz bWluZ2hhbQ== IFN0eWxl 5YU= IENocm9uaWNsZXM= IFBpY3R1cmU= IHByb3Zpbmc= IHdpdmVz c2V0dA== IG1vbGVjdWxlcw== IEZhaXJ5 IGNvbnNpc3Rpbmc= IHBpZXI= YWxvbmU= aW5pdGlvbg== IG51Y2xl anNvbg== IGdvdHRh IG1vYmls IHZlcmJhbA== YXJpdW0= IG1vbnVtZW50 dWNrZWQ= IDI1Ng== VGVjaA== bWluZWNyYWZ0 IFRyYWNr IHRpbGU= IGNvbXBhdGliaWxpdHk= YXNpcw== IHNhZGQ= IGluc3RydWN0ZWQ= IE11ZWxsZXI= IGxldGhhbA== IGhvcm1vbmU= IG9yY2hl ZWxzZQ== IHNrZWxldA== IGVudGVydGFpbmluZw== IG1pbmltaXpl YWdhaW4= IHVuZGVyZ28= IGNvbnN0cmFpbnRz IGNpZ2FyZXR0ZQ== IElzbGFtaXN0 IHRyYXZlbHM= IFBhbnRoZXJz bGluZ3M= Q2FyZQ== IGxhd3N1aXRz dXJhcw== IGNyeXN0 IGxvd2VyZWQ= IGFlcmlhbA== IGNvbWJpbmF0aW9ucw== IGhhdW4= IGNoYQ== IHZpbmU= IHF1YW50aXRpZXM= IGxpbmtpbmc= YmFuaw== IHNveQ== QmlsbA== IEFuZ2VsYQ== IHJlY2lwaWVudA== IFByb3Rlc3Q= IHNvY2tldA== IHNvbGlkYXJpdHk= IOKG bWlsbA== IHZhcmllcw== IFBha2lzdGFuaQ== RHJhZ29u IHVuZQ== IGhvcml6b24= wqDCoMKgwqDCoMKgwqDCoA== IHByb3ZpbmNlcw== IGZyYW5rbHk= IGVuYWN0ZWQ= bm90ZXM= Wyc= IDE5Mg== b2NyYWN5 IGVuZG9yc2VtZW50 IG92ZXJ0aW1l VHJ1ZQ== TGFi bGljdGVk IEROQw== IGJlYXRz IEphbWll MTUy IElOVA== Q29udGFjdA== IGFjY291bnRlZA== aGFzaA== IFBhY2tlcnM= cGlyZXM= IGxlc2JpYW4= IGFtZW5kbWVudHM= IGhvcGVmdWw= IEZpbmxhbmQ= IHNwb3RsaWdodA== IGNvbmZpZ3VyZWQ= IHRyb3VibGVk IGdhemU= IENhbGdhcnk= IHJlbGlhYmlsaXR5 IGluc3VyZw== c3dlcg== YnV5 IFNraW4= IHBpeGVscw== IGhhbmRndW4= IHBhcmFz IGNhdGVnb3I= IEVM IFJleA== SW5kZWVk IGtpbmRh IGNvbmp1bmN0aW9u IEJyeWFu IE1hbnVmYWN0 eWFuZw== UGx1cw== U1FM aXNobWVudA== IGRvbWluYXRl IG5haWw= IG9hdGg= IGVydXB0 IEZpbmU= aXRiYXJ0 IENoaXA= IEFiZA== IE5hbQ== IGJ1eWVy IGRpc3NlbnQ= TGVha3M= Q29udGlu IHJpZGVy IFNvbWVvbmU= IGlsbHVzaW9u Y2lu IEJvZWluZw== IGluYWRlcXU= b3ZhdGlvbg== aWFudHM= IHJlYnVpbGQ= NDUw IERlc3Rpbnk= U1c= IFRpbGw= SGl0 aWF6 IEJhbmds YWNoZXJz IFJlZm9ybQ== IHNlZ21lbnRz IHN5c3RlbWF0aWM= ZGM= IENvbnNlcnZhdGl2ZXM= IHBvcnRhbA== aG9y IERyYWdvbmJvdW5k IGRyYWdnZWQ= b21v IHRoZWU= YWR2ZXJ0 IFJlcG9ydHM= IEV0 IGJhcnJlbHM= QXVndXN0 IGNvbXBhcmlzb25z IGhleA== IGFudGhyb3A= Ils= Ym9yb3VnaA== YWJp IHBpY3R1cmVk cGxheWluZw== IEFkZHJlc3M= IE1pcnJvcg== U21pdGg= IHRpcmVz IE5QUg== QUFBQQ== IGNsYXNzaWZpY2F0aW9u IFRoYW4= IEhhcm0= IFJB IHJlamVjdGlvbg== bWluYXRpb24= IHJhbmdlZA== IEZhbGxz REk= SG9zdA== 44K0 IEV4YW1wbGU= bGlzdGVk dGhpcmRz IHNhZmVndQ== YnJhbmQ= IHByb2JhYmxl Q2FuYWRh SVRJT04= IFFhZWRh IGNoaWNr IGltcG9ydHM= aGl0 bG9j V1c= IGJsZXc= IGFueXRpbWU= IHdob2xlcw== aWtlZA== IGNhbGN1bGF0aW9u Y3JlYXRl IE9yaQ== IHVwZ3JhZGVk IGFwcGFy dXRvcnk= IE1vbA== QnJpdA== IEpvbmc= SU5BTA== IFN0YXJ0aW5n IGRpY2U= dXJ0bGU= IHJlbHlpbmc= Y2xvc3VyZQ== IHByb2ZpdGFibGU= IHNsYXVnaHRlcg== IE1hbnVhbA== Y2FzdGVy ICIk IGZlYXRoZXI= IFNpbXBseQ== aWV2ZXM= IGRldGVyaW9y IFBDSQ== IHN0YW1w IGZsYXdz IHNoYWRl aGFtbWVy IHBhc3Nwb3J0 IGNvbnRpbmc= YW1lbA== IG9ic2VydmVycw== IG5lZ2xlY3Q= IFJC IEJyb3RoZXJob29k IHNrZXB0aWNhbA== ZmFtaWx5 dXNr IGVtb3Rpb25hbGx5 4pk= IEJldGE= YXNvbmFibGU= aWRpdHk= IE11bA== IGtpY2tpbmc= IENhcm0= b2xsYWg= VkVSVElT IEF0aGVu IGxhZGRlcg== IEJ1bGxldA== 5aM= MDAwMQ== IFdpbGRsaWZl IE1hc2s= IE5hbg== UmV2 IHVuYWNjZXB0YWJsZQ== bGVnYWw= IGNyb3dkZWQ= YWdp IENveA== amU= IG1vcmFsaXR5 IGZ1ZWxz IGNhYmxlcw== IG1hbmtpbmQ= IENhcmliYmVhbg== IGFuY2hvcg== IGJ5dGU= IE9mdGVu IE96 IGNyYWZ0ZWQ= IGhpc3Rvcmlhbg== IFd1 IHRvd2Vycw== IENpdGl6ZW5z IGhlbG0= IGNyZWRlbnRpYWxz IHNpbmd1bGFy IEplc3Nl IHRhY2tsZXM= IGNvbnRlbXB0 IGFmb3Jl IFNoYWRvd3M= IG5pbA== IHVyZ2VudA== YXBwbGU= Ymxvb2Q= IHZvbg== IG9mZmxpbmU= IGJyZWF0aGU= IGp1bXBz IGlycmVsZXZhbnQ= b3hpYw== b21hbA== aW1wb3J0YW50 Smlt IGdsb3Zlcw== YXJtaW5n ZGVwdGg= IHRhbGVudHM= b29raWU= IFNC IHBhbG0= dWZmcw== ZXN0YQ== SUdI IGNhbm9u IFZlcml6b24= IFBsZQ== IGNvdXBsZWQ= dmVsdA== IGZ1bmRyYWlzaW5n IEdldHRpbmc= IERMQw== IG1hdGhlbWF0aWNhbA== IEhT IENhcmRpbmFscw== dGVsbGluZw== IHNwb25zb3Jz IM8= IEJ1bGxz b3B0aW9u IHByb3Bvc2U= IG1lbW9yYWJsZQ== IGVtYnJhY2Vk IGRlY2xpbmluZw== SGVhbHRo ZWRh IH07 IHNwYW0= bWlsZQ== IHBpdGNoZXI= IEVpZ2h0 IGNhcmluZw== dXRpYw== cm9sZQ== IGFpcmxpbmU= ZXJuYW5kZXo= IEF0aGxldA== IGNlcnRpZmljYXRpb24= dXhl cmlnZXI= IGVtcGly IHNlbnNhdGlvbg== IGRpc20= IGJvbHQ= IGV2b2x2ZQ== SG91c2U= IGNvbnN1bHRhdGlvbg== IER1dHk= IHRvdWNoZXM= IE5hdGhhbg== IGZhaW50 aGFk Iig= IENvbnN1bWVy IEV4dHJlbWU= IDEyNw== IEhlcm0= IFNhY3JhbWVudA== aXpvcGg= IGFueGlvdXM= dWxvdXNseQ== IHNvY2lhbGx5 IFVUQw== IHNvbHZpbmc= IExldHRlcg== SGlzdG9yeQ== ZWR1Yw== UHJpY2U= KSk7 IHJlbG9hZA== YW1pYw== IHBvcms= IGRpc2NvdXJzZQ== IHRvdXJuYW1lbnRz YWlybw== IEt1cg== IENvc3Rh IHZpb2xhdGluZw== IGludGVyZmVyZQ== IHJlY3JlYXRpb25hbA== dWZmbGU= IHNwZWVjaGVz IG5lZWRpbmc= IHJlbWVtYmVycw== IGNyZWRpdGVk bmlh Zm9jdXNlZA== YW1lcmE= IGJydQ== dW1icw== IEN1YmFu IHByZWNlZGluZw== IG5vbnNlbnNl YWNpYWw= IHNtYXJ0cGhvbmVz IFN0b3JpZXM= U3BvcnRz IEVtZXJnZW5jeQ== b3VuY2luZw== ZWZpbmVk IGJlcg== IGNvbnN1bHRpbmc= IG1hc3RlcnM= aGVhc3Rlcm4= LiJb IFJ1bm5pbmc= IHN1c2NlcHQ= IEZlbmc= QW1lcmljYQ== cHJpc2Vz c3RpdGlhbA== IFdlZWtseQ== IEdyZWF0ZXI= bW9kdWxlcw== aWZ0ZXI= R3JhcGhpY3M= dWxlcg== IHdob2xseQ== IHN1cHByZXNz IGNvbmNlYWxlZA== IGhhcHBpbHk= IGFjY2VwdHM= IEVuam95 IHJpdmVycw== IEV4Y2VwdA== MjI1 IE5IUw== IE1jQ29ubmVsbA== IHB1c3N5 ZmVycmVk dXRhYmxl IGF0dGFpbg== ID49 IGRlcG9zaXRz cm9waGlj IG5vdG9yaW91cw== IFNoYXc= aWxpdGF0aW9u IGVwaWRlbWlj YWxsaWM= IHNtYWxsZXN0 b3ZpY2g= IGFjY2Vzc29yaWVz cGVydGllcw== IHN1cnBsdXM= IE1lY2g= IGFtYmln IEltbWlncmF0aW9u IGNoaW0= ZXZhbA== IHByYWN0aWNpbmc= IE15c3Rlcnk= IGRvbWFpbnM= IFNpbGljb24= YXBwcw== IGtpbG9tZXRlcnM= ZWE= IFNtYXNo IHdhcnJhbnR5 IG5vc3Q= c2ls cmV2 Sm9u IER1Ymxpbg== IHRhc3Rlcw== IGJvdXQ= Z3JlYXQ= ZXJyb3I= IHN3aXRjaGVz IEJhcHQ= RE8= b2tp IHNvdXJjZWQ= cHJvZHU= IGF0dGFjaG1lbnQ= IElzc3Vl IFF1ZXN0aW9u Sm9pbg== IGZpdHRlZA== IHVubGF3ZnVs Xl4= ZXJlaw== IGF1dGhlbnRpY2F0aW9u IHN0b2xl IGFjY291bnRhYmlsaXR5 bGFiZWw= U2VhcmNo IGFsYmVpdA== YXRpY2Fu ZnVuZGVk IEFkZGluZw== IElR IHN1Ym1hcg== bGl0 YXF1ZQ== IExlYXJuaW5n IGludGVnZXI= TWFzdGVy IENocm9t IHByZW1pZXI= T3A= IExpdQ== IGJsZXNzZWQ= IEdsb2Jl IFJlc3BvbnNl IGxlZ2l0aW0= IE1lcmtlbA== IGRpc3Bvc2Fs wrQ= IGdhdWdl cGVhdA== IGluZHVjZWQ= IHF1ZXN0aW9uYWJsZQ== YXJ0aHk= IFZpdA== IEZlZWQ= VW50aWw= VXQ= d29ydGh5 Ulk= IEhlcmFsZA== IEhhbW1lcg== IG1lZGFs IFJpdmVycw== IEhhY2s= IGNsYXJpZnk= IHRyYWNrZWQ= IGF1dG9ub21vdXM= IHRlbmFudA== IFFhdGFy ZXJpZQ== IGdyaW0= IE1vbml0b3I= IHJlc2lzdGFudA== IFNwZWM= IFdlbGxz TkFT MTQ4 IG1pbmVycw== aW90aWNz IG1pc3Nlcw== MTE2 Z2lhbg== Z2l0 IEV5ZXM= cHJlcw== IGdyYWR1YXRlZA== IGFuZ2Vs IHN5bmNocm9u IGVmZmljaWVudGx5 IHRyYW5zbWl0dGVk SGFycnk= IGdsb2JhbGx5 RU5DRQ== IE1vbnRhbmE= cmFnZWQ= IFByZXZlbnRpb24= IHBpc3M= IExs IHNoZWxm IEJKUA== IFRlc3RhbWVudA== IExhdGU= aWtlcg== IEhhcHA= IEp1bGlhbg== aGFsbA== IHNwb250 IHNodXRkb3du IGluY29uc2lzdGVudA== IHN1YnNjcmliZXJz IHNrZWxldG9u IE5lYnJhc2th IGluc3BpcmU= IFZvaWQ= RmVlZA== IGFuZ2xlcw== IFNwcmluZ3M= IGJlbmNobWFyaw== IHZhY2NpbmVz aXpvcGhyZW4= c2V4dWFs dWZmZWQ= IHNoaW5l IEthdGg= IGdlc3R1cmU= aW5lYQ== IHJpcA== IG9wcHJlc3Npb24= IGNvbnNjaWVuY2U= YnQ= IEx1bQ== IGluY2lkZW5jZQ== IEZh d3I= IG1pbmVyYWw= IFNwdXJz YWxreQ== IHRodW5kZXI= IG9waW8= QmVpbmc= IFBhbG0= IHdhc3RlZA== IGxi aWFyaWVz IEluaXRpYXRpdmU= IGN1cnJpYw== IG1hcmtlcg== IE1jTA== IGV4dGVuc2lvbnM= IFB2 IEFybXM= IG9mZmVyaW5ncw== IGRlZmVuc2Vz IHZlbmRvcg== IGNvbnRyYWRpY3Q= IENvbGlu IHJlZGRpdA== IHBlcmlwaGVy MTIy IHNpbnM= RWRpdA== SUNU U29mdA== IFNoYWg= IGFkbWluaXN0cmF0b3I= IFRyaXA= IHBvcm5vZ3JhcGh5 IHR1aXRpb24= aW5lbmNl IFByb2dyZXNz IGNhdGFsb2c= IHN1aXRl IGhpa2U= IHJlcHJvZHVjdGl2ZQ== ZW5naW5l IGRyb3VnaHQ= IE5vYWg= IDIzMA== IGR1ZGU= IHJlbGF4ZWQ= IHBhcnRpdGlvbg== IHBhcnRpY2lwYW50 IHRlbGVzYw== IGZlYXM= IEZG b3duZXI= IHN3ZWVwaW5n IGxlbnNlcw== IG1hdGNodXA= IFJlcGw= b3VybmFscw== IGNyZWRpYmxl IGdyYW5kbW90aGVy IHRoZXJtYWw= IHN1YnNjcmliaW5n IGlkZW50aXRpZXM= Y29sbQ== VUNU IHJlbHVjdGFudA== dXNlcnM= IENvcnQ= IGFzc2lzdGVk T1NT QVRJT05T SVNI IHBoYXJtYWNldXRpY2Fs aWNhYmxl YWRpYW4= IFNvbmlj IEZ1cnk= IE1vbmc= QUg= IFBzeWNob2xvZ3k= IHBob3NwaA== IHRyZWF0cw== rZQ= IHN0ZWFkaWx5 IEhlbGxv IHJlbGF0ZXM= IGNsdWU= RXhwbA== YXV0aA== IHJldmlzaW9u IGVsZA== b3Npb24= IGJyb24= MTQ0 cmlrZXM= IG1pbmVz IGJsYW5rZXQ= IEZhaWw= ZWxlZA== IEltYWdpbmU= IFBsYW5uZWQ= YWlj UmVxdWVzdA== TWFk IEhvcnNl IEVhZ2xl IGNhcGFj MTU3 IGxpbmc= IE5pY2U= IFBhcmVudGhvb2Q= bWluc3Rlcg== b2dz ZW5zaXRpdmU= Tm90aGluZw== IGNhcm4= Rmlu IFBF IHJpZmxlcw== IExQ U2FuZA== IGd1aUFjdGl2ZQ== IHRvdXJpc3Q= Q05O IHVudmVpbGVk IHByZWRlY2Vzc29y fXs= dWJlcg== IG9mZnNob3Jl IG9wdGljYWw= IFJvdA== IFBlYXJs ZXRvbg== IHN0YXJlZA== IGZhcnRoZXI= YXRpbGl0eQ== Y29udGlu IEd5 IEZvc3Rlcg== IENvYw== cmllbnRz IGRlc2lnbmluZw== IEVjb25vbXk= T05H V29tZW4= IE5hbmN5 ZXJ2ZXI= IG1hc2N1bA== IGNhc3VhbHRpZXM= IDIyNQ== IFN1bGxpdmFu IENob2ljZQ== IGFzdGVy d3M= IGhvdGVscw== IGNvbnNpZGVyYXRpb25z IGNvdWNo IFN0cmlw IEdu IG1hbmlwdWxhdGU= bGllZA== IHN5bnRoZXRpYw== IGFzc2F1bHRlZA== IG9mZmVuc2Vz IERyYWtl IGltcGU= T2N0b2Jlcg== IEhlcml0YWdl aGw= IEJsYWly VW5saWtl IGdyaWVm IDQ1MA== IG9wdGVk IHJlc2lnbmF0aW9u aWxv IHZlcnNl IFRvbWI= IHVwdA== IGFpcmVk IEhvb2s= IE1MQg== IGFzc3VtZXM= b3V0ZWQ= IFZlcnM= IGluZmVyaW9y IGJ1bmRsZQ== IEROUw== b2dyYXBoZXI= IG11bHRpcA== IFNvdWxz IGlsbHVzdHJhdGVk IHRhY3RpYw== IGRyZXNzaW5n IGR1bw== Q29uZg== IHJlbGVudA== IGNhbnQ= IHNjYXJjZQ== IGNhbmR5 IENG IGFmZmlsaWF0ZWQ= IHNwcmludA== eWxhbg== IEdhcmNpYQ== IGp1bms= UHJpbnQ= ZXhlYw== Q3JpdA== IHBvcnRyYWl0 aXJpZXM= IE9GRg== IGRpc3B1dGVz V1I= TG92ZQ== 44GE IFJleW4= IGhpcHA= b3BhdGg= IGZsb29ycw== IEZlZWw= IHdvcnJpZXM= IHNldHRsZW1lbnRz IFBvcw== IG1vc3F1ZQ== IGZpbmFscw== IGNydXNoZWQ= IFByb2JhYmx5 IEJvdA== IE1hbnM= IFBlcmlvZA== IHNvdmVyZWlnbnR5 IHNlbGxlcg== IGFwb3N0 IGFtYXRldXI= IGRvcm0= IGNvbnN1bWluZw== IGFybW91cg== IFJvb3Nl IGludGVuc2l2ZQ== IGVsaW1pbmF0aW5n IFN1bm5p IEFsZXBwbw== amlu IGFkdmlzZQ== cGFs IEhhbG8= IGRlc2NlbnQ= IHNpbXBsZXI= IGJvb3Ro U1RS TGF0ZXI= IENhdmU= PT09 IG1vbA== IGZpc3Q= IHNob3RndW4= c3VwcA== IHJvYmJlcnk= RWZmZWN0 IG9ic2N1cmU= IFByb2Zlc3Npb25hbA== IGVtYmFzc3k= IG1pbGl0YW50 IGluY2FyY2Vy IGdlbmVyYXRlcw== IGxhdW5jaGVz IGFkbWluaXN0cmF0b3Jz IHNoYWZ0 IGNpcmN1bGFy IGZyZXNobWFu IFdlcw== IEpvZWw= IERyZXc= IER1bmNhbg== IEFwcGFyZW50bHk= c2lnaHQ= IEludGVybmFs IEluZGl2aWR1YWw= IEZF IGJvcmU= IE10 IGJyb2FkbHk= IE9wdGlvbnM= b3VudGFpbg== aXBlcw== IFZpZGVvcw== MjA0 IGhpbGxz IHNpbXVsYXRpb24= IGRpc2FwcG9pbnRtZW50 aXRhbg== IExhYm9yYXRvcnk= IHVwd2FyZA== IGJvdW5kYXJ5 IGRhcmtlcg== aGFydA== IGRvbWluYW5jZQ== Q29uZw== IE9yYWNsZQ== IExvcmRz IHNjaG9sYXJzaGlw IFZpbmNlbnQ= ZWRl IFJhaA== IGVuY291cmFnZXM= cm92 IHF1bw== IHByZW1pc2U= IENyaXNpcw== IEhvbG9jYXVzdA== IHJoeXRobQ== IG1ldHJpYw== Y2x1Yg== IHRyYW5zcG9ydGVk IG5vZA== IFBpc3Q= IGFuY2VzdG9ycw== IEZyZWRlcg== dGh1bWJuYWlscw== IENF T05E UGhpbA== dmVuZ2U= IFByb2R1Y3Rz Y2FzdGxl IHF1YWxpZnlpbmc= IEthcmVu VkVSVElTRU1FTlQ= IG1pZ2h0eQ== IGV4cGxhbmF0aW9ucw== IGZpeGluZw== RGk= IGRlY2xhcmluZw== IGFub255bWl0eQ== IGp1dmVu IE5vcmQ= IERvb20= IEFjdHVhbGx5 T2s= cGhpcw== IERlc2VydA== IDExNg== SUs= IEZN IGluY29tZXM= VkVM b2tlcnM= IHBlY3Vs IGxpZ2h0d2VpZ2h0 Z3Vl IGFjY2VudA== IGluY3JlbWVudA== IENoYW4= IGNvbXBsYWluaW5n IEJhZ2hk IG1pZGZpZWxkZXI= IG92ZXJoYXVs UHJvY2Vzcw== IEhvbGxvdw== IFRpdGFucw== U21hbGw= bWFudWVs IFVuaXR5 IEV2ZW50cw== U3R5 IGRpc3Byb3BvcnRpb24= bmVzdHk= ZW5lcw== IENvZA== IGRlbW9uc3RyYXRpb25z IENyaW1zb24= IE9I IGVucm9sbGVk IGNlbA== IEJyZXR0 IGFpZGU= IGhlZWxz IGJyb2FkYmFuZA== IG1hcmtpbmc= IHdpemFyZA== IE5K IENoaWVmcw== IGluZ3JlZGllbnQ= IGR1Zw== IFNodXQ= dXJjaGFzZQ== ZW5kb3I= IGZhcm1lcg== IEdvbGRtYW4= MTI5 MTU1 T3JkZXI= IGxpb24= aWFibHk= IHN0YWlu YXJyYXk= aWxpdGFyeQ== IEZBUQ== IGV4cGxvZGVk IE1jQ2FydGh5 IFR3ZWV0 IEdyZWVucw== ZWtpbmc= bG4= ZW5zZW4= IG1vdG9yY3ljbGU= IHBhcnRpY2xl IGNob2xlc3Rlcm9s QnJvbg== IHN0YWly IG94aWQ= IGRlc2lyYWJsZQ== aWJsZXM= IHRoZW9y Zm9yY2luZw== IHByb21vdGlvbmFs b3Zv Ym9vdA== IEJvbnVz cmF3bGluZw== IHNob3J0YWdl IFBzeQ== IHJlY3J1aXRlZA== IGluZmFudHM= IHRlc3Rvc3Rlcm9uZQ== IGRlZHVjdA== IGRpc3RpbmN0aXZl IGZpcm13YXJl YnVpbHQ= MTQ1 IGV4cGxvcmVk IGZhY3Rpb25z IHZpZGU= IHRhdHRvbw== IGZpbmFuY2lhbGx5 IGZhdGlndWU= IHByb2NlZWRpbmc= Y29uc3RpdHV0aW9uYWw= IG1pc2Vy IGNoYWlycw== Z2dpbmc= aXBwbGU= IGRlbnQ= IGRpc3JlZw== 55Q= c3RhbnQ= bGxv YnBz YWtlbmluZw== IGFibm9ybWFs IEVSQQ== 5aOr IEhCTw== IE1BUg== IGNvbmNlc3M= IHNlcnZhbnQ= IGFzcGly bGF2 IFBhbmVs YW1v IHByZWNpcA== IHJlY29yZGluZ3M= IHByb2NlZWRlZA== IGNvbG9ueQ== IFRhbmc= YWJsbw== IHN0cmlwcGVk TGVmdA== dG9v IHBvdGF0b2Vz IGZpbmVzdA== JSku IGNyYXA= IFphY2g= YWJhc2Vz IEdvdGg= IGJpbGxpb25haXJl d29sZg== IHNhbmN0aW9u U0s= IGxvZ2dlZA== UG8= ZXllZA== dW5hbA== IGNyaWNrZXQ= IGFybWllcw== IHVuY292ZXJlZA== Q2xvdWQ= w7Nu IHJlYm91bmRz IG1lcw== T3Blcg== UGFj IG5hdGlvbmFsbHk= IGluc2VydGVk cGljdA== IGdvdmVybmFuY2U= 0Lg= IHByaXZpbGVnZXM= R0VU IGZhdm9yaXRlcw== aW1pdHk= IGxvdmVy dGhlbQ== ZW1wbA== IGdvcmdlb3Vz QW5u IHNsaXBwZWQ= IHZldG8= Qm9i IHNsaW0= dWNj IEZhbWU= dWRkZW5seQ== IGRlbmllcw== IE1hdXI= IGRpc3RhbmNlcw== IHdhbm5h dGFy IFNFUg== IOKI IGxlbW9u YXRoZXRpYw== IGxpdGVyYWw= IGRpc3Rpbmd1aXNoZWQ= IGFuc3dlcmluZw== R0k= IHJlbGlnaW9ucw== IFBoaWxvcw== IExheQ== IGNvbXBvcw== aXJlbWVudHM= IEtvcw== aW5leg== cm9sbGluZw== IHlvdW5nZXN0 YW5kaXNl IEJvcm4= IGFsdGFy YW1pbmE= IEJvb3Q= dm9j IGRpZ2dpbmc= IHByZXNzdXJlcw== IGxlbg== MjY0 IGFzc2Fzc2luYXRpb24= IEJpcm1pbmdoYW0= IE15dGg= IHNvdmVyZWlnbg== IEFydGlzdA== IFBob3RvZ3JhcGg= IGRlcGljdGVk IGRpc3BlbnM= b3J0aHk= IGFtYnVs aW50ZWc= IENlbGU= IFRpYmV0 IGhpZXJhcmNoeQ== IGN1 IHByZXNlYXNvbg== IFBldGVyc29u IGNvbG91cnM= IHdvcnJ5aW5n IGJhY2tlcnM= IFBhbG1lcg== IM68 IGNvbnRyaWJ1dG9y IGhlYXJpbmdz IHVyaW5l INk= b3VyZ2VvaXM= U2ltaWxhcg== IFppbW1lcg== c29tZXRoaW5n IFVTQw== IHN0cmVuZ3Rocw== IEZJ IGxvZ2dpbmc= QXNrZWQ= IFRoYWk= aW5xdQ== IFdhbHQ= IGNyZXdz aXRpc20= MzAx IHNoYXJwbHk= dW1lZA== IHJlZGlyZWN0 cmF0b3Jz SW5m IFdlYXBvbnM= IHRlYXNw MTk5OQ== TGl2ZQ== IEVzcGVjaWFsbHk= IFN0ZXI= IFZldGVyYW5z IGludHJv b3RoZXJhcHk= IG1hbHdhcmU= IGJyZWVkaW5n IG1vbGVjdWxhcg== IFJvdXRl IENvbW1lbnQ= b2NoZW0= IGFpbg== U2Vhc29u IGxpbmViYWNrZXI= xKs= IEVjb25vbWljcw== ZXNhcg== IExpdmVz IEVtbWE= IGtpbg== IFRlcnJpdA== IHBsYW50ZWQ= b3Rvbg== IEJ1dHRlcg== IFNwb25z UEVS IGR1bmdlb24= IHN5bWJvbGlj IGZpbG1lZA== IGRpZXRz IGNvbmNsdWRlcw== IGNlcnRhaW50eQ== IEZvcm1hdA== IHN0cmFuZ2Vycw== Zm9ybWF0 IFBoYXNl IGNvcGllZA== IG1ldHJlcw== bGRh IFVzZXJz IGRlbGliZXJhdGU= IHdhc2hlZA== IExhbmNl aW1hdGlvbg== IGltcHJvcGVy IEdlbmVzaXM= aWNrcg== IEt1c2g= IHJlYWxpc2U= IGVtYmFycmFzc2luZw== YWxraW5n YnVja3M= IHZlcmlmaWVk IG91dGxpbmU= eWVhcnM= IEluY29tZQ== MjAy IHpvbWJpZXM= RmluYWw= IE1pbGxlbm4= IG1vZGlmaWNhdGlvbnM= IFZpc2lvbg== IE1vc2Vz dmVyYg== aXRlcnJhbmVhbg== IEpldA== IG5hdmFs IEFnZw== IHVybA== IHZpY3Rvcmllcw== IG5vbmV0aGVsZXNz IGluanVzdA== IEZhY3Q= 55o= IGluc3VmZmljaWVudA== cmV2aWV3 ZmFjZWJvb2s= IG5lZ290aWF0aW5n IGd1YXJhbnRlZXM= aW1lbg== dXRlbmJlcmc= IGdhbWJsaW5n IGNvbmdy TG9hZGluZw== IG5ldmVydGhlbGVzcw== IHByZXNpZGVudHM= IEluZHVzdHJpYWw= IDExOA== IHBvdXJlZA== IFRvcnk= IDE3NQ== IDo9 U2NvdHQ= YW5nZXJlZA== VG9r IG9yZ2FuaXplcnM= TWF0 IEdyb3d0aA== IGFkdWw= IGVuc3VyZXM= IDExNw== 6b6N5Q== IG1hc3NhY3Jl IGdyYWRlcw== YmVmb3Jl QURWRVJUSVNFTUVOVA== IFNsb3c= IE1NQQ== 4oCUIg== IFZhdGljYW4= UWFlZGE= IG93ZQ== NjY2Ng== IFNvcnJ5 IEdyYXNz IGJhY2tncm91bmRz IGV4aGF1c3RlZA== IGNsYW4= IGNvbXByb21pc2Vk IEVsZg== IElzYWFj ZW5zb24= SW52ZXN0 SUZB IGludGVycnVwdGVk 44OJ44Op IHR3aXN0ZWQ= IERyYWdvbnM= TW9kZQ== IEtyZW1saW4= IGZlcnRpbA== aGVyZXM= cGhhbg== IE5vZGU= ZmVk IE9yYw== IHVud2lsbGluZw== Q2VudA== IHByaW9yaXQ= IGdyYWR1YXRlcw== IHN1YmplY3RpdmU= IGlzc3Vpbmc= IEx0 IHZpZXdlcg== IHdva2U= VGh1cw== YnJvb2s= IGRlcHJlc3NlZA== IGJyYWNrZXQ= IEdvcg== IEZpZ2h0aW5n IHN0cmlrZXI= UmVwb3J0 IFBvcnR1Z2Fs IG5lbw== d2Vk MTk5 IGZsZWVpbmc= c2hhZG93 aWRlbnRpZmllZA== VVNF U3RlYW0= IHN0cmV0Y2hlZA== IHJldmVsYXRpb25z YXJ0ZWQ= IER3 IGFsaWdubWVudA== ZXN0b24= IEphcmVk U2Vw IGJsb2dz dXBkYXRl Z29t cmlzaw== IGNsYXNo IEhvdXI= IHJ1bnRpbWU= IHVud2FudGVk IHNjYW0= IHJhY2s= IGVubGlnaHQ= b25lc3Q= IEZlcnI= IGNvbnZpY3Rpb25z IHBpYW5v IGNpcmN1bGF0aW9u IFdlbGNvbWU= IGJhY2tsYXNo IFdhZGU= IHJlY2VpdmVycw== b3RpdmU= SmVmZg== IG5ldHdvcmtpbmc= IFByZXA= IEV4cGxvcmVy IGxlY3R1cmU= IHVwbG9hZGVk IE1lYXQ= QkxF IE5hemlz IFN5bmQ= c3R1ZA== cm9vdHM= cmlhbnM= IHBvcnRyYXllZA== ID8/ IEJ1ZGRoYQ== c3Vu Um9iZXJ0 IENvbXBsZXg= IG92ZXJzZWU= IHN0ZWFsdGg= VGl0bGU= IEpvYnM= IEt1bQ== IGFwcHJlY2lhdGlvbg== IE1PRA== IGJhc2ljcw== IGNsaXBz IG51cnNpbmc= IHByb3Bvc2l0aW9u IHJlYWxpc2Vk IE5ZQw== IGFsbG9jYXRlZA== cml1bQ== YXJhbg== IFByb2R1Y3Rpb24= IFZvdGU= IHNtdWdn IGh1bnRlcg== YXplcg== IENoYW5nZXM= IGZsdWN0 eW9u QXJyYXk= IGtpdHM= V2F0ZXI= IHVuY29tbW9u IHJlc3Rpbmc= ZWxscw== d291bGQ= IHB1cnN1ZWQ= IGFzc2VydGlvbg== b21ldG93bg== IE1vc3Vs IFBsYXRmb3Jt aW9sZXQ= IHNoYXJlaG9sZGVycw== IHRyYWlscw== UGF5 IEVuZm9yY2VtZW50 dHlwZXM= IEFub255bW91cw== IHNhdGlzZnlpbmc= aWxvZ3k= ICgn d2F2ZQ== Y2l0eQ== U3RldmU= IGNvbmZyb250YXRpb24= IEVsZA== Q2FwdA== YWhhbg== aHRt IEN0cmw= T05T MjMw aWZh aG9sZGluZw== IGRlbGljYXRl IGphdw== IEdvaW5n b3J1bQ== U2Fs IGR1bGw= IEJldGg= IHByaXNvbnM= IGVnbw== IEVsc2E= YXZvcml0ZQ== IEdhbmc= IE51Y2xlYXI= IHNwaWRlcg== YXRzdQ== IHNhbXBsaW5n IGFic29yYmVk IFBoYXJt aWV0aA== IGJ1Y2tldA== IFJlY29tbQ== T0Y= IEZhY3Rvcnk= QU5DRQ== IGJhY3Rlcg== SGFz IE9ic2Vydg== MTIx IHByZW1pZXJl RGV2ZWxvcA== IGN1cnJlbmNpZXM= Q2FzdA== IGFjY29tcGFueWluZw== IE5hc2h2aWxsZQ== IGZhdHR5 IEJyZW5k IGxvY2tz IGNlbnRlcmVk IFVU YXVnaHM= b3JpZQ== IEFmZm9yZGFibGU= dmFuY2U= REw= ZW1ldA== IHRocm9uZQ== IEJsdWV0b290aA== IG5hbWluZw== aWZ0cw== QURF IGNvcnJlY3RlZA== IHByb21wdGx5 IFNUUg== IGdlbm9tZQ== IGNvcGU= IHZhbGxleQ== IHJvdW5kZWQ= IEtlbmQ= YWxpb24= cGVycw== IHRvdXJpc20= IHN0YXJr dmw= IGJsb3dpbmc= IFNjaGVkdWxl c3Rk IHVuaGFwcHk= IGxpdGlnYXRpb24= Y2VkZXM= IGFuZHJvaWQ= IGludGVncmFs ZXJlcnM= dWRlZA== dGF4 IHJlaXRlcg== IE1vdG9ycw== b2NpYXRlZA== IHdvbmRlcnM= IEFwb3N0 dWNraW5n IFJvb3NldmVsdA== ZnJhbQ== IHlpZWxkcw== IGNvbnN0aXR1dGVz YXdr SW50ZXJlc3Q= IGludGVyaW0= IGJyZWFrdGhyb3VnaA== IENoZXI= IHByb3NlYw== IERq IE1U UmVzcA== IFBU IHNwZXJt ZWRpdA== QlQ= TGludXg= Y291bnRyeQ== bGVhZ3Vl IGRpY2s= IG9jdA== IGluc2VydGluZw== IHNjcmE= IEJyZXdpbmc= IDE5NjY= IHJ1bm5lcnM= IHBsdW4= aWR5 IERpYW4= IGR5c2Z1bmN0aW9u IGV4Y2x1c2lvbg== IGRpc2dy IGluY29ycG9yYXRl IHJlY29uYw== IG5vbWluYXRlZA== IEFyY2hlcg== ZHJhdw== YWNoZWxvcg== IHdyaXRpbmdz IHNoYWxsb3c= IGhhc3Q= IEJNVw== IFJT IHRoaWdo IDE5NjM= IGxhbWI= IGZhdm9yZWQ= YWdsZQ== IGNvb2xlcg== IEhvdXJz IEdV IE9yaWdpbg== IGdsaW1wc2U= LS0tLS0tLS0tLS0tLS0tLS0tLS0= TGlt IGNoZWVr IGplYWxvdXM= LSc= IGhhcm5lc3M= IFBvaXNvbg== IGRpc2FiaWxpdGllcw== bmVhcG9saXM= IG91dGxvb2s= IG5vdGlmeQ== IEluZGlhbmFwb2xpcw== IGFicnVwdA== bnNpYw== IGVuY3J5cHRlZA== IGZvcmZl cmVhdGg= IHJhYmI= IGZvdW5kYXRpb25z IGNvbXBsaW1lbnQ= IEludGVydmlldw== IFN3ZQ== IGFkb2xlc2M= IG1vbml0b3Jz IFNhY3JhbWVudG8= IHRpbWVseQ== IGNvbnRlbXBs IHBvc2l0aW9uZWQ= IHBvc3RlcnM= cGhpZXM= aW92YXNjdWxhcg== dm9pZA== IEZpZnRo IGludmVzdGlnYXRpdmU= T1VO IGludGVncmF0ZQ== IElOQw== aXNoYQ== aWJsaW5ncw== IFJlcXVlc3Q= IFJvZHJpZ3Vleg== IHNsaWRlcw== IERY IGZlbWluaXNt IGRhdGFz IGJlbmQ= aXJ1cw== IE5pZ2VyaWE= Rm94 Q2hhbmdl IGFpcnBsYW5l IExhZGVu IHB1YmxpY2l0eQ== aXh0eQ== IGNvbW1pdG1lbnRz IGFnZ3JlZ2F0ZQ== IGRpc3BsYXlpbmc= IEFycm93 IDEyMg== IHJlc3BlY3Rz YW5kcm9pZA== c2l4 IFNoYQ== IHJlc3RvcmF0aW9u KVw= V1M= b3lz IGlsbHVzdHJhdGU= d2l0aG91dA== MTI2 IOKUgg== IHBpY2t1cA== bmVscw== IC4uLi4= Zm9vZA== IEZlbg== KT8= IHBoZW5vbWVuYQ== IGNvbXBhbmlvbnM= IFdyaXRl IHNwaWxs IGJyaWRnZXM= IFVwZGF0ZWQ= IEZv IGluc2VjdHM= QVNISU5HVE9O IHNjYXJl aWx0cg== IFpoYW5n IHNldmVyaXR5 IGluZHVs MTQ5 IENvZmZlZQ== IG5vcm1z IHB1bHNl IEZU IGhvcnJpZmlj IERlc3Ryb3k= IEpTT04= IG9saXZl IGRpc2N1c3Nlcw== UmVzdA== RWxlY3Q= IFdpbm4= IFN1cnZpdg== IEhhaXQ= U3VyZQ== b3BlZA== IHJvb3RlZA== IFNrZQ== IEJyb256ZQ== IGxvbA== RGVmYXVsdA== IGNvbW1vZGl0eQ== cmVkaXRlZA== IGxpYmVydGFyaWFu IGZvcmJpZGRlbg== IGdyYW4= 4Kg= IGxhZw== ZW56 ZHJpdmU= IG1hdGhlbWF0aWNz IHdpcmVz IGNyaXRpY2FsbHk= IGNhcmJvaHlk IENoYW5jZWxsb3I= IEVkZGll IGJhbm5pbmc= IEZyaQ== IGNvbXBsaWNhdGlvbnM= ZXRyaWM= IEJhbmdsYWRlc2g= IGJhbmR3aWR0aA== U3RvcA== IE9yaWdpbmFsbHk= IGhhbGZ3YXk= eW5hc3R5 c2hpbmU= IHRhbGVz cml0aWVz YXZpZXI= IHNwaW5uaW5n IFdITw== IG5laWdoYm91cmhvb2Q= YmFjaA== IGNvbW1lcmNl IFNsZQ== QlU= IGVudHJlcHJlbmV1cg== IHBlY3VsaWFy IENvbW1lbnRz ZnJl MzIw SUNT IGltYWdlcnk= IENhbm9u IEVsZWN0cm9uaWM= c2hvcnQ= KCg= RGln IGNvbW1lbQ== dWNlZA== IGluY2xpbmVk IFN1bW1vbg== IGNsaWZm IE1lZGl0ZXJyYW5lYW4= IHBvZXRyeQ== IHByb3NwZXJpdHk= IFJlY2U= IHBpbGxz bWVtYmVy IGZpbmFsZQ== dW5j IEdpZw== 5L0= IGxvZA== IGJhY2t3YXJk LSs= IEZvcndhcmQ= IHRocmk= c3VyZQ== IHNvYXA= IEZY UkVT IFNleHVhbA== b3Vsb3M= IGZvb2xpc2g= IHJpZ2h0ZW91cw== IGNvZmY= dGVycm9yaXNt dXN0YWlu b3Rlcg== IGFidXNlcw== bmV4dA== IGFidXNpdmU= IHRoZXJlYWZ0ZXI= IHByb2hpYml0aW9u IFNVUA== IGRpcA== IHJpcHBlZA== IGluaGVyaXRlZA== IGJhdHM= c3RydQ== R1Q= IGZsYXdlZA== cGhhYmV0 IGZvZw== ZG9vcnM= IGltYWdpbmc= IGRpZ2l0cw== IEh1bmdhcnk= IGFycm9n IHRlYWNoaW5ncw== IHByb3RvY29scw== IEJhbmtz 4Lg= cG91bmQ= IEN1cnQ= LiIp Li8= IGV4ZW1wdGlvbg== ZW5kaXg= IE11bGw= IGltcHJvdmVz IEdhbWVy ZGltZW5zaW9uYWw= SWNvbg== IE1hcmdhcmV0 U3RhdHVz ZGF0ZXM= IGludGVuZHM= IGRlcGljdA== IHBhcmtlZA== Sm9l IE1hcmluZXM= Y2hub2xvZ3k= ISku IGp1ZGdlZA== IHdlaWdodHM= UmF5 IGFwYXJ0bWVudHM= aGVzdGVy IHJlaW5mb3JjZQ== IG9mZmVuZGVy b2NjdXA= IHNvcmU= ZXB0 IFBIUA== IEJyb3c= IGF1dGhvcml6YXRpb24= IFJpc2s= IERlbGF3YXJl IFFV IG5vdGlmaWNhdGlvbnM= IHN1bmxpZ2h0 IGV4Y2x1ZGU= ZGF0 IG1lc2g= IFN1ZGFu IGJlbG9uZ2Vk IHN1YndheQ== IG5vb24= IEludGVyaW9y b2xpY3M= IExha2Vycw== IGNvZGluZw== RGlzY2xhaW1lcg== Q2FsaWY= T2xk IGRpc2w= Pz8/Pz8= IGNvbmZpcm1z IHJlY3J1aXRtZW50 IGhvbWljaWRl Q29uc2lkZXI= IEplZmZyZXk= ZnR5 fTs= IG9iamVjdGlvbg== ZG9pbmc= IExlbw== V2FudA== IGdsb3c= IENsYXJrZQ== IE5vcm1hbg== IHZlcmlmaWNhdGlvbg== IHBhY2tldA== IEZvcm11bGE= IHBsYWc= ZXN2aWxsZQ== IHNob3V0aW5n IG92 IFJFQw== IEJ1Yg== IG5pbnRo IGVuZXJn IHZhbGlkaXR5 IHVwcw== amFjaw== IG5laWdoYm9yaW5n IE5lYw== ZXdvcmtz IEhhYg== YXJleg== IHNwaW5l IGV2ZW50dWFs IExlYWRlcnM= IENhcm4= IHByb2JhdGlvbg== IHJvbWFuY2U= bXNn IE1lY2hhbmljYWw= RVJZ Um9jaw== IHBhcnRpc2Fu Tm9kZQ== YXNzZXRz bWluZW50 IGZvcmVpZ25lcnM= IHRlc3RpZnk= IFVzdWFsbHk= bG9yZHM= IEdyZW4= IFBvd2VsbA== QklM IHNy IGFkZGljdA== IHNoZWxscw== IHNpZ2g= IFlhbGU= dGVybml0eQ== IDc1MA== RVU= IFJpZmxl IHBhdHJvbg== ZW1h IEJhbm5vbg== YW5pdHk= IHRyb3BpY2Fs IFZJSQ== Y3Jvc3M= RXZlcnl0aGluZw== IElTTw== IGh1bWJsZQ== YXNzaW5n IEZJRw== IHVwZGF0aW5n eXNvbg== IGNhbGNpdW0= IGNvbXBldGVudA== IHN0ZWVyaW5n UHJvdA== IFNZ IEZpbmFscw== IFJ1Zw== MTU5 MTM3 IEdvbGY= IDEyNg== IGFjY29tbW9kYXRpb24= IEh1Z2hlcw== IGFlc3RoZXRpYw== YXJ0aXNhbg== IFR3aWxpZ2h0 IHByaW5jZQ== IEFncmljdWx0dXJl IERpc2Nv IHByZWNlZGVudA== IHR5cGluZw== YXV0aG9yaXplZA== T3B0aW9u IEF1Yg== bGlzaGVz YWNodA== bWFn UGV0ZXI= IFVGTw== bW9udG9u IExpdGg= IGFyb20= IHNlY3VyaW5n IGNvbmZpbmVk cHJpdmF0ZQ== IHN3b3Jkcw== IG1hcmtlcnM= IG1ldGFib2xpYw== c2VsZWN0 IEN1cnNl IE90 Z3Jlc3NpdmU= IGluY3VtYg== IFNhZ2E= IHByaWNlZA== IGNsZWFyYW5jZQ== Q29udGVudA== IGRyaWxsaW5n IG5vdGljZXM= IGJvdXJnZW9pcw== IHZlc3Q= IGNvb2tpZQ== IEd1YXJkaWFucw== cnlz aW55bA== IDEyNA== IHBsYXVzaWJsZQ== b25naA== IE9kaW4= IGNvbmNlcHRpb24= IFl1aw== IEJhZ2hkYWQ= IEZsYWc= QXVzdHJhbA== IElCTQ== IGludGVybmF0aW9uYWxseQ== IFdpa2lMZWFrcw== SUVE IGN5bg== IGNob29zZXM= IFBpbGw= IGNvbWJpbmluZw== IHJhZGk= IE1vaGFtbWVk ZGVmZW5zZQ== YXRjaGluZw== U3ViamVjdA== aWNpZW5jeQ== RnJhbWU= IHsi IGNoZXNz IHRpbWVy MTkw IHRpbg== IG9yZGluYW5jZQ== ZW1ldGVyeQ== IGFjY3VzaW5n IG5vdGljZWFibGU= IGNlbnRyZXM= IGxpZA== IE1pbGxz aW1ndXI= IHpvb20= ZXJnaWM= IGNvbXByZXNzaW9u cHJpbQ== ZmluZA== IHN1cmc= IHBhbmQ= IEtlZQ== IENoYWQ= Y2VsbGVuY2U= b3lsZQ== IHNvY2lhbGlzbQ== IFRyYXZpcw== IE1Ieg== IGd1aWxk QUxMWQ== IFN1YnNjcmliZQ== IFJlbGF0ZWQ= IG9jY3VycmVuY2U= aXRjaGluZw== IGZpY3Rpb25hbA== IGNydXNo IEVB Y29k bWl4 IFRyaXBsZQ== IHJldHJpZXZl IHN0aW11bHVz IHBzeWNoaWF0 IERvb3I= IGhvbW9zZXh1YWxpdHk= IGVsZW1lbnRhcnk= IGNlbGx1bGFy aWRpYW4= IExhdW4= IGludHJpZ3Vpbmc= IGZvYW0= IEJhc3M= aWRp aXRzdQ== IGFzc3VyZQ== IGNvbmdyYXQ= IGJ1c2luZXNzbWFu IEJvb3N0 Y2xvc2U= IGxpZWQ= IHNjaWVuY2Vz IE9tZWdh IEdyYXBoaWNz IDw9 c3Bva2Vu IGNvbm5lY3Rpdml0eQ== U2F0dXJkYXk= IEF2ZW5nZXJz IHRvZ2dsZQ== IGFua2xl IG5hdGlvbmFsaXN0 bW9kZWw= IFBvb2w= b3Bob2JpYQ== VmFy IE1vbnM= YXRvcmllcw== IGFnZ3Jlc3NpdmVseQ== Q2xlYXI= Rm9yZ2U= YWN0ZXJz IGhlZGdl IHBpcGVz IGJsdW50 IHNx IHJlbW90ZWx5 V2Vk YXNlcnM= IHJlZnJpZ2Vy IHRpbGVz IHJlc2N1ZWQ= IGNvbXByaXNlZA== aW5za3k= IG1hbmlm YXZhbmF1Z2g= IHByb2xpZmVy IGFsaWduZWQ= eG1s IHRyaXY= IGNvb3JkaW5hdGlvbg== IFBFUg== IFF1b3Rl MTM0 YmY= IFNhdw== IHRlcm1pbmF0aW9u IDE5MA== IGFkZGl0aW9ucw== IHRyaW8= IHByb2plY3Rpb25z IHBvc2l0aXZlbHk= IGluY2x1c2l2ZQ== IG1lbWJy MTk5MA== b2xkZXI= IHByYWN0aWNlZA== aW5rbGU= QXJjaA== IHN0YXJ0ZXJz YXJpdXM= IGludGVybWVkaWF0ZQ== IEJlbmVm IEtpbGxlcg== IGludGVydmVudGlvbnM= IEtpbA== IEZseWluZw== SW52 IHByZW1hdHVyZQ== IHBzeWNoaWF0cmlj IGluZGll IGNvbGxhcg== IFJhaW5ib3c= YWZp IGRpc3J1cHRpb24= IEZPWA== Y2FzdGluZw== IG1pc2RlbQ== Y3Jv IHdpcGU= YXJkb24= IGJhc3Q= IFRvbW15 IFJlcHJlc2VudGF0aXZl IGJlbGx5 IFBP IEJyZWl0YmFydA== MTMy IG1lc3NhZ2luZw== U2hvdWxk UmVmZXJlbmNlcw== IEdSRQ== aXN0aWNhbA== TFA= IENhdg== IENyYXp5 IGludHVpdGl2ZQ== a2VlcGluZw== IE1vc3M= IGRpc2NvbnRpbg== IE1vZHVsZQ== IHVucmVsYXRlZA== IFByYWN0aWNl IFRyYW5zcG9ydA== IHN0YXRpc3RpY2FsbHk= b3Jucw== IHNpemVk cHU= IGNhZg== IFdvcmxkcw== IFJvZGdlcnM= IEx1bg== IENvbWlj bGl2aW5n IGNhcmVk IGNsaW1iZWQ= KXs= IGNvbnNpc3RlZA== IG1lZGlldmFs Zm9saw== IGhhY2tlZA== IGRpcmU= IEhlcm1pb25l IHRlbmRlZA== Y2VhbnM= RGFuaWVs d2VudA== IGxlZ2lzbGF0b3Jz IHJlZGVz Z2FtZXM= IGdu YW1pbGlhcg== ICsr Z2d5 dGhyZWF0 IG1hZ25ldA== IHBlcmNlaXZl IHppcA== IGluZGljdG1lbnQ= IGNyaXRpcXVl Z2FyZA== IFNhZmU= IENyZWFt IGFkdmVudA== b2Jh IHZvd2Vk b3VzYW5kcw== IHNraQ== IGFib3J0aW9ucw== dWFydA== IHN0dW5uZWQ= IGFkdmFuY2luZw== IGxhY2tlZA== IFwi IHNjaGl6b3BocmVu IGVsZWdhbnQ= IGNvbmZlcmVuY2Vz IGNhbmNlbGVk IEh1ZHNvbg== IEhvcGVmdWxseQ== IHRydW1w IGZyZXF1ZW5jaWVz IG1ldGVvcg== IEp1bmlvcg== IEZsZWV0 IE1hbGNvbG0= IFRvb2xz IC4uLi4uLi4u IGhvYmJ5 IEV1cm9wZWFucw== IDE1MDA= IEludG8= IHN3YXk= IEFwcHJv IENvbXBs Q29tbXVuaXR5 IHRpZGU= IFN1bW1pdA== 5Ls= IGludGVydmFscw== IEV0aGVy IGhhYml0YXQ= IFN0ZXZlbnM= bGlzaGluZw== IERvbWFpbg== IHRyaWdnZXJz IGNoYXNpbmc= IGNoYXJt IEZsb3dlcg== aXRvcmVk IGJsZXNzaW5n IHRleHR1cmVz Rml2ZQ== IGxpcXVvcg== UlA= RklO IDE5NjI= Q0FS VW5rbm93bg== IHJlc2ls IExpbHk= IGFidW5kYW5jZQ== IHByZWRpY3RhYmxl cmFy IGJ1bGxzaGl0 bGVlbg== Y2hldA== TW9y TXVjaA== 5Lk= IGVtcGhhc2l6ZWQ= IGNydXN0 IHByaW1pdGl2ZQ== IGVuam95YWJsZQ== IFBpY3R1cmVz IHRlYW1tYXRl cGxlcg== IFRvbA== IEthbmU= IHN1bW1vbmVk dGh5 cmFtYQ== IEhvbmRh IHJlYWxpemluZw== IHF1aWNrZXI= IGNvbmNlbnRyYXRl Y2xlYXI= IDIxMA== IEVyZG9nYW4= YXJpcw== IHJlc3BvbmRz IEJJ IGVsaWdpYmlsaXR5 IHB1c2hlcw== IElkYWhv IGFnZ3Jhdg== IHJ1aW5z dXJhdGlvbnM= IGJhbnM= IGFuYXQ= c2hhcmU= IGdyaW5k aGlu dW1lbg== IHV0aWxpdGllcw== IFlhbmtlZXM= IGRhdGFiYXNlcw== IERE IGRpc3BsYWNlZA== IGRlcGVuZGVuY2llcw== IHN0aW11bGF0aW9u aHVu aG91c2Vz IFByZXR0eQ== IFJhdmVucw== IFRPREFZ IGFzc29jaWF0ZXM= IHRoZXJhcGU= Y2xlZA== IGRlZXI= IHJlcGFpcnM= cmVudGljZQ== IHJlY2VwdG9ycw== IHJlbWVk IENl IG1hcnJpYWdlcw== IGJhbGxvdHM= IFNvbGRpZXI= IGhpbGFyaW91cw== b3Bs MTM4 IGluaGVyZW50bHk= IGlnbm9yYW50 IGJvdW5jZQ== IEVhc3Rlcg== UkVMQVRFRA== IEN1cnJlbmN5 RVY= 44Oe IExlYWQ= IGRlY2Vhc2Vk QnJpZW4= IE11c2s= SlM= IG1lcmdl aGVhcnRlZA== Y3JlYXQ= bWl0dA== bXVuZA== IOKAiw== IEJhZw== IHByb2plY3Rpb24= IGphdmE= IFN0YW5kYXJkcw== IExlb25hcmQ= IGNvY29udXQ= IFBvcHVsYXRpb24= IHRyYWplY3Q= IGltcGx5 IGN1cmlvc2l0eQ== IERC IEZyZXNo IFBvcg== IGhlYXZpZXI= bmV5cw== Z29tZXJ5 IGRlc2VydmVk IHBocmFzZXM= IEdD IHllYXN0 ZGVzYw== RGVhdGg= IHJlYm9vdA== IG1ldGFkYXRh SUNBTA== IHJlcGF5 IEluZGVwZW5kZW5jZQ== IHN1YnVyYmFu aWNhbHM= IGF0b3A= IGFsbG9jYXRpb24= Z2VuZXJhdGlvbg== IEdyYW0= IG1vaXN0dXJl IHBpbmU= IExpYmVyYWxz IGFpZGVz IHVuZGVyZXN0 IEJlcnJ5 IGNlcmVtb24= Mzcw YXN0cm91cw== IFBpcmF0ZXM= IHRlbnNl IEluZHVzdHJpZXM= IEFwcGVhbHM= IE5lYXI= IOijj+c= IGxvdmVycw== IENBUA== IENyYXc= IGdpYW50cw== IGVmZmljYWN5 RWxlbWVudA== IEJlaGF2aW9y IFRveW90YQ== IGludGVzdA== UHJpdg== QUk= IG1hbmV1dmVy IHBlcmZlY3Rpb24= IGJhbmc= cGFwZXI= cmlsbA== R2Vvcmdl Ym9yZGVy aW50ZXJz IFNldGg= IGNsdWVz IExldmk= IFJldmVudWU= MTQ3 IHZhcG9y IGZvcnR1bmF0ZQ== IHRocmVhdGVucw== IHZldA== IGRlcGVuZGVuY3k= ZXJzZWQ= YXJ0aWNsZQ== IEJsaXp6YXJk IGNobG9y IG1pbnVz IEJpbGxz IGNyeXB0b2N1cnJlbmN5 IG1ldGFib2xpc20= dGVyaW5n IHBlc3RpYw== c3RlcHM= IFRyZWFzdXJl cmFjdGVk IENvbnN0YW50 IHRlbXA= MTM5 IERldGVjdGl2ZQ== dXJhbGx5 IHJlY292ZXJpbmc= IGNvcnRleA== IDE0NA== Y2xvc2Vk IHByZWp1ZGljZQ== YXVudGVk IHN0b3Jtcw== IE5PVw== IG1hY2hpbmVyeQ== QWRkcmVzcw== IGNvbXBlbGxlZA== Mjcw IGRlc3BhaXI= YmFuZQ== IHZlZ2V0YWJsZQ== IGJlZHM= TGVhcm4= IGNvbG9yZnVs IHNwaWtl IG1hcmdpbnM= IHN5bXBhdGh5 IHdvcmtzaG9w IENCQw== U2F0 IGJ1cm5z IEdlbmRlcg== IDEyOQ== IENhYmxl IGRlYnRz IFRoZXJlc2E= IHJlZmxlY3Rpbmc= IGFpcnN0 IHJpbQ== cmFtaWQ= IHdlYWtuZXNzZXM= V3JpdA== b2dnbGU= dGk= IENoYXJnZQ== IHdlaWdoZWQ= ICgu IGxhdWdodGVy IHJvdXRlcg== IERlbW9jcmFjeQ== RGVhcg== IGhhc2h0 IGR5 IGhpbnRz cnVubmluZw== IGZpbmlzaGVz YXJ1cw== TWFzcw== cmVzdWx0 YXNjdXM= IHZpbnRhZ2U= IGNvbnF1 IHdpbGRseQ== YWNpc3Q= IGxpbmd1 IHByb3RhZ29uaXN0 c3Ryb20= dGVlbnRo IFNvbG8= bWFj ZmlsbGVk IHJlbm93bg== aXRpdmVz IG1vdGl2ZQ== IEFudGFy IE1hbm4= IEFkanVzdA== IHJvY2tldHM= IHRyb3VibGluZw== ZWk= IG9yZ2FuaXNtcw== YXNzaXM= Q2hyaXN0aWFu IDE0NQ== IEhhc3M= IHN3YWxs IHdheA== IFN1cnZpdmFs VlM= IE11cmQ= dmQ= c3RhbmRhcmQ= IGRyYWdvbnM= IGFjY2VsZXJhdGlvbg== cmF0aW9uYWw= ZmluYWw= IHBhaXJlZA== IEV0aGVyZXVt IGludGVyZmFjZXM= IHJlc2VudA== IGFydGlmYWN0cw== xas= YXJlbA== IGNvbXBldGl0b3I= IE5pY2hvbGFz IFN1cmZhY2U= Y3Bw IFRvdA== IGVjb25vbWljYWxseQ== IG9yZ2FuaXNlZA== IGVuZm9yY2Vk aW5obw== IHZhcmlldGllcw== IGFiZG9t IEJhaWxleQ== aWRhdg== IFNhbHY= cGFpZA== IGFsdGl0dWRl ZXNzZXJ0 IEd1dGVuYmVyZw== YXJlYQ== b3BvdWxvcw== IHByb2Zlc3NvcnM= aWdncw== IEZhdGU= aGV5 IDMwMDA= RGlzdA== IHR3aW5z Y2lsbA== IE1hcHM= IHRyYXBz IHdlZWQ= IEtpc3M= IHlvZ2E= IHJlY2lwaWVudHM= IFdlc3RtaW5zdGVy IHBvb2xz IFdhbG1hcnQ= MTg4 IFNjaG9vbHM= YXR0YWNr IEFSTQ== cGFyYWdyYXBo V2FybmluZw== amw= IHNlbGZpc2g= YW5jaGV6 IEhlaWdodHM= RnJl IFNvcGg= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t dG1s MzMz IHJhaWRz IHNhdGVsbGl0ZXM= S0VZ IGxhc3Rz 0YI= SW5z IERhbWU= IHVucHJlZGljdA== Ly8v Z2hhaQ== IGFydGlsbGVyeQ== IGNydWlzZQ== IGdlbA== IENhYmluZXQ= IGJsb3dz IEVzcA== IHByb3hpbWl0eQ== b3RoZQ== IFNraWxscw== IFVwcGVy b2Jv IE5EUA== IGVuam95cw== IHJlcGVhdGluZw== IENvbnN0cnVjdGlvbg== IFF1ZXN0aW9ucw== SGlsbGFyeQ== IHVpbnQ= IHByb2Nlc3NvcnM= IEdpYnNvbg== IE11bHRpcGxl cWE= IEJvbQ== IE1pbGVz dmVudGlvbmFs IGh1cnRz c2tpbg== IEFJRFM= IGFkdmlzZXJz IFJvb3Q= IG1ldGhvZG9sb2d5 IERhbGU= IGRldG9u IEtub3dsZWRnZQ== c2VxdWVudGx5 IDEyMQ== IGNvbm5lY3Rz Q3k= IERhbmdlcg== IGNvbnRyaWJ1dG9ycw== IEJlbnQ= IGJyYXNz IEd1bnM= aW50bw== IEZvcnR1bmU= IGJyb2tlcg== YmFsYW5jZQ== IGxlbmd0aHM= IHZpYw== IGF2ZXJhZ2luZw== IGFwcHJvcHJpYXRlbHk= IENhbWVyYQ== IHNhbmR3aWNo IENEQw== IGNvb3JkaW5hdGU= IG5hdmln IGdvb2RuZXNz bGFpbQ== IGJyYWtl IGV4dHJlbWlzdA== IFdha2U= IE1lbmQ= IFRpbnk= IENPTA== IFJG IER1YWw= IFdpbmU= Q2FzZQ== IHJlZmluZWQ= IGxhbXA= TGVhZA== IGJhcHQ= IENhcmI= IFNhZGQ= IE1pbm5lYXBvbGlz UERG RWFybHk= IEhpZGRlbg== SXRz IFRJTUU= IHBhcA== IGNvbW1pc3Npb25lZA== IEZldw== IENvbHRz IEJyZW4= IGJvdGhlcmVk IGxpa2V3aXNl RXhwZXI= IFNjaHc= Y3J5 bm4= IE1pdGNo aW1vbg== TUc= Ym0= VU1Q cmF5cw== IHJlZ2lzdHJ5 IDI3MA== YWNoaW5l cmVsbGE= YW50aW5n MDAwMDA= IHJ1aW5lZA== c3BvdA== IHRh IG1heGltaXpl IGluY29udmVu RGVhZA== SHVtYW4= RW5hYmxlZA== IE1hcmll IGNoaWxs IFBhcmFkaXNl IHN0YXJyaW5n IExhdGlubw== IFByb3RvY29s IEVWRVI= IHN1cHBsaWVycw== bWVzc2FnZQ== IEJyb2Nr IHNlcnVt 4paI4paI4paI4paI IGVuY29tcA== IGFtYml0aW9u dWVzZQ== IGFycm93cw== QW5kcmV3 IGFudGVubmE= IDE5NjE= IEJhcms= IGJvb2w= 44Kq IFN0b3JhZ2U= IHJhaWx3YXk= IHRvdWdoZXI= IENhZA== IHdhc2hpbmc= UHk= J10= ZW1iZWQ= IE1lbXBoaXM= YWNrbGU= IGZhbW91c2x5 IEZvcnR1bmF0ZWx5 b3ZpZXM= IG1pbmRzZXQ= IHNuZWFr IERo UkFX IFNpbXBzb24= IGxpdmVzdA== IGxhbmRtYXJr IGNlbWVudA== TG93 IHRocmlsbGVk IENvdXJzZQ== aW5lbA== IGNodWNr aWRhdGU= Z2xvYmFs IHdoaXQ= IO+/vQ== YWRheXM= c2tp IFNW IHZpcnVzZXM= MzA2 IFJlc3BvbnM= IHRoZWF0ZXJz IEJyYW5jaA== IEdlbmV2YQ== IE1L IHVuYmVsaWV2 IGNvbW11bmlzdA== T3JpZ2luYWw= IFJlY2VpdmVk IFRyYW5zZmVy IEFyZw== SW5wdXQ= IFN0cmF0ZWd5 IHBhbGFjZQ== dGhlbmluZw== RHJp IHNlbnRlbmNpbmc= dW1ibmFpbA== IHBpbnM= cmVjeQ== IHNpYmxpbmdz R2V0dGluZw== IEJV IE5vcnRod2VzdA== IHByb2xvbmdlZA== IFNha3VyYQ== Q29tYg== IEJvdXI= IGluYWRlcXVhdGU= IEthc2g= IHVzZXJuYW1l IEltcHJvdmU= IGJhdHRsaW5n IE1BQw== IGN1cnJpY3VsdW0= IHNvZGE= IENhbm5vbg== IHNlbnNpYmxl c3BvbnM= RGVjZW1iZXI= IHdpY2tlZA== IFBlbmd1 IGRpY3RhdG9ycw== IEhlYXJ0cw== b2d5bg== IHNpbWlsYXJpdGllcw== IFN0YXRz IGhvbGxvdw== aXRhdGlvbnM= Ijpb IGhvdmVy IExpc3Rlbg== c2No U3VuZA== IGNhZA== IFBhcmtz IGx1cg== IGh5cGU= IExlbQ== TkFNRQ== aXN1cmU= RnJpZGF5 IHNob290cw== IGNsb3Nlcw== IGRi IFJpZGdl IERpZmZlcmVudA== IHJlcGxpZXM= IEJyb2Fkd2F5 b3BlcnM= IGludG9sZXI= IFpldXM= YWtlc3Bl IHByb3ByaWV0YXJ5 IHJlcXVlc3Rpbmc= IGNvbnRyb2xsZXJz IE1JTg== aW1lZGlh YmVjY2E= IGV4cGFucw== IG9pbHM= Qm90 IENoYW5k IHByaW50ZXI= IHRvcHBlZA== IFBPTA== IEVhcmxpZXI= U29jaWFs YXZpbg== IGRlY3JlYXNlcw== IFNlYg== IHNwZWNpZmljYXRpb25z IEJsYXN0 IEt1cnQ= IGZyZWVs QnJvd24= IGRpbGln cm9l IFByb2JsZW0= IFF1YWQ= IGRlY2VudHJhbA== IFZlY3Rvcg== YW51dA== IHBsdWdpbnM= IEdyZWdvcnk= IGZ1Y2tlZA== ZWxpbmVz IEFtYmFzc2Fkb3I= dGFrZQ== IGNsZWFucw== b25neWFuZw== QW5vbnltb3Vz c3Rybw== In0= YWxpbmU= IE9kZA== IEV1Zw== MjE2 IGJvaWw= IFBvd2Vycw== IG51cnNlcw== T2J2aW91c2x5 IFRlY2huaWNhbA== IGV4Y2VlZGVk T1JT IGV4dHJlbWlzdHM= IHRyYWNlcw== ZXhwbA== IGNvbXI= IFNhY2g= KS8= IG1hc2tz IHNjaQ== Qm9u IHJlZ3Jlc3Npb24= d2VnaWFu IGFkdmlzb3I= aXR1cmVz IFZv ZXhhbXBsZQ== IEluc3RydWN0 IHNpZWdl IHJlZHVjdGlvbnM= cHRy IHN0YXR1dG9yeQ== IHJlbW92ZXM= IHB1Y2s= cmVkaXRz IGJlZQ== IHNhbGFk IHByb21vdGlvbnM= IEpvc2h1YQ== d2l0aHN0YW5kaW5n RVRI IENoYQ== aW11cw== IGV4cGVuZGl0dXJl YXVudGluZw== IGRlbGlnaHRlZA== IDE1NQ== YmVo IGNhcnBldA== IFNwYXJ0 IGp1bmdsZQ== bGlzdHM= IGJ1bGx5aW5n IE5vYmVs IEdsZW4= IHJlZmVyZW5jZWQ= IGludHJvZHVjZXM= c2Vpbg== IGNob3BwZWQ= Z2xhc3M= IFdyZXN0 IG5ldXRyYWxpdHk= IOKZ IGludmVzdGlnYXRvcg== IHNoZWx2ZXM= IHVuY29uc3RpdHV0aW9uYWw= IHJlcHJvZHVjdGlvbg== IG1lcmNoYW50 bWlh IG1ldHJpY3M= IGV4cGxvc2l2ZXM= IFNvbmlh IGJvZGlseQ== IHRoaWNrbmVzcw== IHByZWRvbWluYW50bHk= IEFiaWxpdHk= IG1vbml0b3JlZA== SUNI IF0u IE1hcnRpbmV6 IHZpc2liaWxpdHk= IHF1ZXJpZXM= IGdlbm9jaWRl IFdhcmZhcmU= UXVlcnk= IHN0dWRpb3M= IGVtYnJ5 IGNvcnJpZG9y IGNsZWFuZWQ= Y29tcGxldGU= IE1I IGVucm9sbG1lbnQ= SU5HUw== IGltcGFjdGVk IGRpc2FzdHJvdXM= IFl1bg== IENsYWlyZQ== IEJhc2ljYWxseQ== eXQ= dXN0ZXJpdHk= IGluZGlyZWN0bHk= d2lr IGRvZA== IENhcnI= IGFtcA== IHByb2hpYml0 IEluaXRpYWw= IFJk aWpp IGVkdWNhdGU= Y29ybg== aW90dA== IEJlYXV0eQ== IGRldGVjdGl2ZQ== IENvbm4= c2luY2U= IHN0YWdnZXI= IG9iZXNl IGJyZWU= b2xvZ2lj aXNzZQ== d2Fsa2Vy IGJsYWRlcw== IGxhd2Z1bA== ZnVuYw== IEJlaGluZA== IGFwcGV0aXRl ICgq IHRlbm5pcw== IG9mZnNwcmluZw== IGpldHM= IHN0cnVjdHVyZWQ= IGFmb3JlbWVudGlvbmVk Tm92 IHNjYWxpbmc= ZmlsbA== IHN0ZXc= IGN1cmI= IFN0ZXBoYW4= ZWRJbg== U0Y= b2JpYw== 6a2U b3Vn IE1N IGdlbmV0aWNhbGx5 b3Bleg== MTM2 IHVtYg== YW5jZXJz IGNvaG9ydA== IG1lcmNoYW5kaXNl IGltcG9zaW5n IExlZ2lzbGF0dXJl IEFyY2hpdmU= aXZpYQ== IE5hdmFs IG9mZmVuY2Vz IG1pcmFjbGU= IHNuYXBwZWQ= IGZvZXM= IGV4dGVuc2l2ZWx5 IFJhZg== IGNhdGVy ZWRpZW5jZQ== S2l0 IEJpbg== IHJlY29tbWVuZHM= IENpdGllcw== IHJpZ2lk IFJFQUQ= IE5vYmxl IFRpYW4= IGNlcnRpZmljYXRlcw== YW50aXM= b2lsZXI= IEJ1ZGRoaXN0 ZGlk IHN1cnZleWVk IGRvd253YXJk IHByaW50cw== IE1vdGlvbg== cm9uaWNz IFNhbnM= b3NzaWJseQ== dWN0aW9ucw== IGNvbG9uaWVz IERhbmlzaA== dW5pdA== IHNwb2ls IGFkdmlzb3J5 YmVycmllcw== UGxhbg== IHNwZWNpZmljYXRpb24= b3BoZXJz IFJlc291cmNl IHNoaXJ0cw== cHJpc2luZ2x5 Y29tbXVuaWNhdGlvbnM= IHRyaXZpYWw= IG1lbnRpb25pbmc= aXNleHVhbA== IHN1cHBsZW1lbnRz IHN1cGVydmlzaW9u QlA= dm9y IHdpdA== IGNvb2xkb3du IHBsYWludGlmZg== IFJldmlld3M= IFNyaQ== IE1pbnQ= IFN1Z2Fy IGFmdGVyd2FyZA== IFByaWVzdA== IEludmVzdG1lbnQ= b2dlbmU= IFRha2luZw== IHN0cmV0Y2hpbmc= IGluZmxhbW1hdGlvbg== IFRlaHJhbg== IGxpbmluZw== IGZyZWV6aW5n IEVudGl0eQ== IGluc3BpcmluZw== c3BlY2lhbA== cHJpY2U= IHN1ZQ== IFBvcnRlcg== b3VuZ2U= RVRB IERlcmVr IEx1aXM= dW8= eW1waA== IGV4dGVyaW9y aWhpbA== IEFzaGxleQ== aW5hdG9y IG51dHJpZW50cw== IFRocm9uZXM= IGZpbmFuY2Vz IEluc3BlY3Q= IHNwZWNpYWxseQ== IFJlcXVpcmVk IFBUUw== IFZpb2xlbmNl b2ludGVk c2hvdHM= IGV4Y2VycHQ= Y29vbg== SU5T IEdyaQ== IHJlY29nbmlzZWQ= V2Vlaw== WW91bmc= IHZvbQ== aXNsZQ== IEN1cnJ5 IEJ1ZGRo IG5vdGVib29r IGR1cmFibGU= Lz8= IEdhZA== IFB1cHA= IGZvcmdpdmU= cGFyaw== IHBlcnNvbmFsaXRpZXM= YW5hbHlzaXM= Y2xhbWF0aW9u IGVsZXZhdG9y IHdhcmVob3VzZQ== IFJvbGU= dW5u IGlsbHVzdHJhdGlvbg== IFNjYW4= IGF0bW9zcGhlcmlj SW1wb3J0 QU5D cmljdGVk ZnU= MDEw IGFyY2hl IHJld2FyZGVk YWtlc3BlYXJl IGludGVybmFsbHk= IFJCSQ== YWxrZXI= IGVsZXBoYW50 b3dpdHo= IFBpenph IGJpcGFydGlzYW4= w6lz IHNsb3dlZA== IFN0YXJr IG92ZXJyaWRl T1VT IDMyMA== dW5kcmVkcw== IERlY2s= IENlbnN1cw== YmVl MTQ2 b3Rvcg== IGlw IHVi b2NhdGlvbnM= IEJ1dHRvbg== cmljZQ== IGNyaXBw ZmZm IG9yaWdpbmF0ZWQ= IG92ZXJ3aGVsbWVk YXBwYQ== IGZvcmVtb3N0 4oCR IExFRw== cmVsZWFzZQ== ZWF0dXJlZA== YXRjaGVz IHJlcHM= IGxlbmRpbmc= IFJlZmVyZW5jZQ== IENsaWVudA== MTY1 dmVudGg= Q29tcGxldGU= IFBhdHJvbA== IHN3b3Ju Y2Ft IHNodXR0bGU= IFJhbHBo IGhvbWV0b3du LSw= b25hbA== IEJQ 5Y8= IHBlcnN1YWRl IEFsZXhhbmQ= IGNvbWJpbmVz IHZpdmlk IExhZw== IGVuY29kaW5n IHNhbHZhdGlvbg== d2Vu IFJlY292ZXJ5 aXlh VW5pdmVyc2l0eQ== IEJpZGVu IGJ1ZGdldHM= IFRleGFucw== Zml0cw== IGhvbm9yZWQ= IHB5dGhvbg== VEQ= IyMj Y2xvbmU= IGJsaW5r IExpcXVpZA== IHVuZW1wbG95ZWQ= IGNsYXNoZXM= IENvdW5zZWw= IGRpcmVjdGluZw== IHB1bmN0 IEZhbGNvbnM= IHNoYXJr IERhbWFzY3Vz IGplYW5z IGVtYmFyaw== IHNlaXpl IHVwd2FyZHM= Mjgw IEV6 IEFueXRoaW5n IGV4b3RpYw== bG93ZXI= IENyZWF0b3I= IFVt IHN1YnVyYnM= YmVyZ2Vy IFdlbmQ= IG1pbnQ= IFhY IERybw== IHN1ZmZlcnM= IGhlcmI= dHJlZQ== IGZyYWdpbGU= IGZsb29kZWQ= IEFsY29ob2w= b2xlYW4= bnlkZXI= IEtP RnJhbQ== IDEzNg== IG93ZWQ= IE1lbGVl IEhhc2g= IHdoaXNr IHN1ZG8= cnI= UXVpY2s= YXBwcm8= IGlp IEV4YW1wbGVz aGVl IHByb21vdGVz cGVyYXR1cmU= a2Fy IEhvbm9y IHNvZGl1bQ== IExpZg== cm9zc28= aW50ZW5kZW50 IGNvcnJlc3BvbmRlbnQ= Rm91bmQ= c2VjcmV0 IGlkZW50aWZpZXM= YWduZQ== IGxvdQ== IFBQ IGNvaW5jaWRlbmNl bW92ZQ== IG1pbGl0aWE= IGluZmlsdHI= IFByaW1hcnk= IHBpdGNoaW5n IEli IEdPT0Q= 44K4 IFdpemFyZHM= aXJhbA== IFZlbnVz UlI= IOKAlQ== IENhc2V5 IHNhZGx5 IGFkbWlyZQ== IGVtYmFycmFzc2Vk Y2I= TWVs IHR1YmVz IGJlYXV0aWZ1bGx5 IFF1ZWVuc2xhbmQ= QmVsb3c= cmV6 cXVldA== cGxlYXNhbnQ= IMKr Q2FtcA== IGRlY2lzaXZl MTk5OA== IExhbWI= dXR0b24= aG4= IEphZ3U= YXVuZGVy IENvcmQ= IGNsZXJr IGNhZmZl IHdpcGVk IHJlaW0= IE1vdW50YWlucw== IGltcHJpc29uZWQ= IGRldmVsb3Bz IFByYQ== IG1vZGVsaW5n QW55b25l YW5jZWw= IFNpdA== IHNoaWVsZHM= IGxhd24= IGNhcmRpb3Zhc2N1bGFy IGRlbW9uc3RyYXRpbmc= IHBhcnNl IElzcmFlbGlz IGV1cm9z MTQz IGdsb3Jpb3Vz aW5za2k= ZWNk IGNvbmRpdGlvbmluZw== IGhlbHBsZXNz IG1pY3Jvc2M= IEhhcmJvcg== IHN0YWtlcw== IDI2MA== IHVuZXF1 IEZsb3lk IGRhbXA= IGFwcGFyYXR1cw== IExhd3M= IGNvdW50ZXJz IGluZHVjZQ== YXRhYmxl IEFobWVk IHNsYW0= Tm92ZW1iZXI= IHBlcnNpc3Q= IGltbWluZW50 w6Fu IHNocmVk IHBoYXNlcw== IEVkbW9udG9u IEFybXN0cm9uZw== IE1lZXQ= IEtpdHR5 0YA= Y2lyYw== IEFkdWx0 IGFyb3Nl IFhlbg== RGFu Z293 IHN1cGVyZg== IEFkbWly IGVuZHVyZQ== IGtleXdvcmQ= eXJ1cw== IHlhcm4= IHBhdGh3YXk= IEhvcGtpbnM= bWlkdA== IGNlbnNvcnNoaXA= ZGVwZW5kZW50 IGluc3RydWN0b3I= U291cmNlcw== IHRvZQ== IGJhbGxvb24= Tm9i IHN3ZWFy IENhc3Rybw== IGdsb3Nz IEthdmFuYXVnaA== IHJlbWFya2FibHk= UGhvdG9z IE5vbQ== IFNvdXRoZWFzdA== eWVycw== IHZhbGlkYXRpb24= IGNhbm5vbg== IFZpY3Rvcnk= IFBpZXJyZQ== IGNhdXRpb3Vz QXVkaW8= IGZldGNo IEdpZnQ= IEh5cA== IHJlbWVkeQ== WkU= IHNjZW50 IGJlYXJk IFJ1dA== LSI= IHBhdGVudHM= SHk= IHVuanVzdA== IHBvdGF0bw== IGZvcnRoY29taW5n IGNoZWY= IFJpZnQ= YWZmZQ== IFJPTQ== IExhdW5jaA== IHBhZHM= IE5lbw== IG9uc2V0 IHNxdWVlemU= c2FmZQ== IHByZWZpeA== IFRN IE5lYXJseQ== IENsaW5pY2Fs IE1lbnRhbA== b3RpYXRpb24= IFVuaWM= YW50cnk= IENpcg== IGVwaXQ= w6Y= IGV4dHJhY3RlZA== dmVyc2VseQ== cmlhZA== IHN0cmFpbnM= IHRvcHM= IHBvZW0= IFJhbmR5 IE1hcGxl VEhFUg== dXBpdGVy IFNTRA== muk= IHVuY29u cGVyaW5n IHNsZXB0 aW5lcnM= IHVuZGVyd2F0ZXI= IEV2aWRlbmNl Z29uZQ== MjA1 IGhpc3RvcmlhbnM= IHN5bnRoZXNpcw== IGZyb2c= YmFza2V0YmFsbA== IHZpYnJhbnQ= IHN1Ym9yZA== IDM2NQ== IERpYWw= IGNvb3BlcmF0ZQ== SEFIQQ== IGdyZWV0ZWQ= MTU4 IGpheno= IGludG94 IFdhbGtpbmc= IHN1cGVydmlzb3I= IEZ1c2lvbg== IE1lcmNlZGVz c2VuZA== SGFt c2Q= bmw= IHRvdXJz IEZJRkE= IGN1bHA= Z2Q= MzA0 IHBsZWFz IGlsbHVzdHJhdGVz IENvbG9tYmlh IGhpZ2hsaWdodGluZw== IFN1bW1hcnk= IGV4cG9zaW5n IERydQ== IGlyb255 cml0aW9uYWw= IENhcnJvbGw= IEVsbGlz UGljdA== IFJhcHQ= IGFkYXB0ZXI= IHVubQ== IGNvcnBzZQ== IGNlbGVicml0aWVz RGVu YXR1bQ== IEFwb2NhbHlwc2U= IFdhZw== bGluaW5n IGhvcm1vbmVz UnVi IFhp IFZhdWx0cw== MjA4 YWxreXJpZQ== aW5vc2F1cg== IGZlZWRz dml0eQ== IGRlZmVhdGluZw== V2FpdA== IGVtcGhhc2l6ZQ== IFN0ZWVsZXJz eXJpbnRo bGV5cw== IFdoZW5ldmVy Q3VycmVudGx5 IENsb2Nr IGNvbGxlY3RpdmVseQ== YW55b24= IEpQ IG1lbnRhbGl0eQ== IGRvd25sb2Fkcw== IHN1cnJvdW5kaW5ncw== IEJhcm5lcw== IGZsYWdzaGlw IGluZGljYXRvcnM= IGdyYXBw SmFudWFyeQ== IEVsZW1lbnRhbA== IEF0aGVuYQ== aWJhbA== IHNpZ2h0cw== IGNhcGl0YQ== IFRyZWF0eQ== IHZvaWNlZA== IEdheg== bGV0dGU= IHlh IGV4cGlyZWQ= TGVnZW5k SG90 bmF0dXJl IHVuc3RhYmxl IDI4MA== w7o= Q29tbWVudA== QUxF IHF1ZXN0cw== IGhhbmRsZXI= bmlz IHZlcnNhdGlsZQ== IGNvbmNlYWw= ZW5nZWFuY2U= IEludGVyYWN0aXZl IG9ic2Vzc2Vk IERvZ3M= IGNyYWNrZWQ= U291bmQ= c3Y= IER5bGFu cm9hZHM= Zng= IENhdGhvbGljcw== IEhhZw== IHNsYW1tZWQ= IGdsb3dpbmc= c2FsZQ== IHRpc3N1ZXM= IENoaQ== bmVl IGNoZXI= c2lj dXJyZWN0aW9u IGJhY29u dWxhdG9yeQ== KS4i IGlycmVndWxhcg== Rk9STQ== YXNzZWQ= IGludGVudGlvbmFs IGNvbXBlbnNhdGU= IFNwZWFraW5n IFNldHM= MTUz IGNvbnZlbnRpb25z YmFuZHM= ZW1hZGU= IGVjYw== IFdpbnN0b24= IEFzc2Fzc2lu IEJlbGdpYW4= IGRlcGVuZGVuY2U= IG5pY2hl IGJhcms= IEpheno= IGRpc2FkdmFudGFnZQ== IGdhc29saW5l IDE2NQ== 55qE ZXNzYQ== bW9kdWxl YW5ndWxhcg== T1k= IFRyZWF0bWVudA== aXRhcw== b2xhdGlvbg== IEFybm9sZA== IGZldWQ= IE5lc3Q= IHRoZWF0cmU= ZXdhdGVy IG1pbm9ycw== b2xpY3k= IEhhdmVu ZGl2aXNpb24= IHRydW5r RmFy IFB1bGw= IGNhcHR1cmluZw== IDE4MDA= IFRlZW4= IGV4ZW1wbA== IGNsaW5pY3M= IEJ1cmc= IHN1YnN0aXQ= IHBheWxvYWQ= IExhdg== IFRyb3k= IFdpdG5lc3M= IGZyYWdtZW50cw== IHBhc3N3b3Jkcw== IGdvc3BlbA== IEdpbg== IHRlbmFudHM= b2xpdGg= U2l4 UHJldmlvdXM= IEFnZXM= IERhcndpbg== IGJsYXQ= IGVtcGF0aHk= c21pdGg= YmFn IEVjaG8= IENhbWI= IE1hZGQ= IEJvbw== IHJlZGU= IEJ1cm5pbmc= IHNtb290aGx5 IEFkcmlhbg== IFZhbXBpcmU= IE1vbnN0ZXJz c3RlYW0= U3R5bGU= TWE= cmVh IER3YXI= YWx5c3Q= dXJzb3I= IGVsaW1pbmF0aW9u IGNyeXB0bw== Y2h0 IEV0ZXJuYWw= 4oCmXQ== IFNvcmNl SWxs TkVS IHVo Q29uY2x1c2lvbg== d2FnZQ== IHJlc3Bpcg== IHJlbWluaXM= aGV0aWNhbA== IGd5 IHV0aWxpemVk aWNpZGFs IDE5MDA= IGh1bnRlcnM= IFN3YW4= IFJlYWN0 IHZpc2l0b3I= IFRoYW5rc2dpdmluZw== MzA4 UG9zdHM= IGhpcHM= MTk5Nw== b21lcnM= IGtub2NraW5n IFZlaGljbGU= IHRpbA== IDEzOA== IG1p IEludmVzdGlnYXRpb24= IEtlbnlh IGNhc2lubw== IG1vdGl2ZXM= IHJlZ2Fpbg== cmV4 IHdlZWtlbmRz IHN0YWJiZWQ= Ym9ybw== IGV4cGxvaXRlZA== IEhBVkU= IFRlbGV2aXNpb24= Y29jaw== IHByZXBhcmF0aW9ucw== IGVuZGVhdg== IFJlbW90ZQ== IE1ha2Vy IFByb2R1 IEV2YW4= IGluZm9ybWF0aW9uYWw= IExvdWlzdmlsbGU= MTU0 IERyZWFtcw== IHBsb3Rz IFJ1bm5lcg== IGh1cnRpbmc= IGFjYWRlbXk= IE1vbnRnb21lcnk= bm0= IExhbmM= IEFseg== MjEw ZWxvbmc= IHJldGFpbGVy IGFyaXNpbmc= IHJlYmVsbGlvbg== IGJsb25kZQ== cGxheWVk IGluc3RydW1lbnRhbA== Q3Jvc3M= IHJldGVudGlvbg== IHRoZXJhcGV1dGlj IHNlYXM= IGluZmFudHJ5 IENsaW50 IHByb21wdGluZw== IGJpdGNo IHN0ZW1z IEtyYQ== IHRoZXNpcw== IEJvZw== cnVlZA== IGtpbmdz IGNsYXk= aWZpY2VudA== IFlFUw== IFRoaW5n IEN1YnM= dmV5YXJk ZWxzaA== aW5hcmlseQ== IEV5 IFJvbGxpbmc= IGV2b2x2aW5n SW5kaWE= IHJlY29nbml6ZXM= IGdyYWR1YXRpb24= aXNlcnM= IGZlcnRpbGl0eQ== IE1pbGFu Q29tbWFuZA== IGJveGluZw== IDE5NDM= IGdsdXRlbg== IEVtaXI= IGlkb2w= IGNvbmNlaXZlZA== IENyZWF0aW9u TWVyaXQ= dWRkeQ== dXNzaW9ucw== IExpZXV0ZW5hbnQ= aWV0YWw= IHVuY2hhbmdlZA== IFNjYWxl IENyaW1lYQ== YmFsbHM= YXRvcmlhbA== IGRlcHRocw== IGVtcGlyaWNhbA== IHRyYW5zbQ== IHVuc2FmZQ== bWlzc2libGU= Y29tZm9ydA== MTU2 IG1lY2hhbmlj MDAy bGlucw== IHNtb2tlZA== UG9z IHNsb3dpbmc= IGxhdg== VGV4YXM= IGNoZWF0aW5n IE1ldHJvcG9saXRhbg== ZXRoeWw= IGRpc2NvdmVyaW5n YXNzZQ== IHBlbmNpbA== IFB5b25neWFuZw== IGNsb3NldA== IFNoZWV0 IEVudHJ5 b3VzdGlj IG15c3Q= ZXJhdGU= YXJpYXQ= IG1pbmVyYWxz IG11c2ljaWFu IFB1bA== IE1heg== MjQ5 IHBlcm1pc3Npb25z IGl2 ZW5hcnk= aWNrZXJz IEJpbmc= aGVh ZW5hYmxl IGdyaWV2 IGFzc2VydGVk IENvbG9uZWw= IGFmZmlkYXY= d28= IHNlYXRlZA== IFJpZGU= IHBhaW50aW5ncw== IFBpeA== IDEzNw== aXNoaQ== dW1iYWk= Z290dGVu IEVhcmw= IGlubmluZw== IGNlbnN1cw== IHRyYXZlbGxlZA== IENvbnN1bHQ= MTg1 YmluZA== IHNpbXBsaWNpdHk= IG92ZXJsb29rZWQ= IEhlbHBmdWw= IG1vbmtleQ== IG92ZXJ3aGVsbWluZ2x5 Qmxvb2Q= IEZsaW50 IEphbWE= IFByZXNlbnQ= IFJhZ2U= IFRB cHRpdmU= IHR1cm5vdXQ= d2FsZA== IERvbHBoaW5z IFZQTg== IG9uaW9u IGNyYWZ0aW5n bW1h IE1lcmN1cnk= IGFycmFuZ2U= IGFsZXJ0cw== IE9U emJvbGxhaA== IGdhc2Vz IFJpY2hhcmRzb24= c2Fs bGFy IGZyb3N0 IGxvd2VyaW5n IGFjY2xhaW0= IHN0YXJ0dXBz IEdhaW4= ZXNzbWVudA== IGd1YXJkaWFu 5Lq6 IFBpZQ== IExpbmtz IG1lcml0cw== IGF3YWtl IHBhcmVudGFs IGV4Y2VlZHM= IGlkbGU= IFBpbG90 IGVCYXk= IEFjY2VwdA== aXBlZw== Q2Ft IEtvdA== IHRyYWRlcnM= b2xpdGljcw== dW5rZXI= IFBhbGU= b3Np YW5tYXI= IDE5NDc= IEZlbGw= ZXN0aWFs aXRhdGluZw== R0Y= IFNy aWZ0ZWQ= IGNvbm5lY3Rvcg== IEJvbmU= aWxsZXM= MjYw aG1h IG92ZXJsYXA= IEdpdEh1Yg== IGNsZWFuZXI= IEJhcHRpc3Q= IFdBUw== IGx1bmdz 0YE= IEJVVA== IGNpdGU= IHBpdGNoZWQ= cmVhdG1lbnQ= IHRyb3BoaWVz IE51 Mzg2 IFByaWRl IGF0dGVuZGVlcw== W10= MTc5 IHNwYXRpYWw= IHByaXplcw== IFJlbGlnaW9u IHNob3djYXNl IENhdGVnb3J5 dmlkaWE= VGFyZ2V0 UHJvcGVydHk= Pyw= IGZ1c2lvbg== cGll IFVDTEE= IHNvdW5kdHJhY2s= IHByaW5jZXNz IENhdmFs c2hvdWxk IGxpbWJz QmFja2dyb3VuZA== IGxvbmVseQ== IGNvcmVz IFRhaWw= c2hlZXQ= IDEzMg== UmE= 44Kr IEJvbHQ= IGJvb2tlZA== IGFkbWluaXN0ZXI= IGVxdWFscw== d3k= IG9ic2VydmluZw== IEJhcm9u IEFkb2Jl IHZpcmdpbg== IFNvY2lhbGlzdA== TW92ZQ== Z2hhemk= IExpbmRh MjEy IGJyZXdpbmc= IG1lcmNoYW50cw== YnVyc2U= IGRpdm9y IG1ldGFscw== IE5lcg== IHN1bXM= IEVuZW15 IGVudmlzaW9u IGdyYW50aW5n IEhvbmV5 IFNreXJpbQ== IHNvY2lv Z3JhZGVk IHNlbGVjdGl2ZQ== V0FTSElOR1RPTg== IDE5NDg= IFNpcml1cw== IEdyb3Nz YWN0aXZpdHk= IEl2YW4= IGZ1cmlvdXM= QlNE IFByZXZpb3Vz IHJlc3BvbnNpdmU= IGNoYXJpdGFibGU= IGxlYW5pbmc= IFBldw== IHZpb2xhdGVz XFxcXFxcXFw= IENvbWluZw== d2lyZQ== IHBvZXQ= IHJlc29sdXRpb25z Y29tbWFuZA== IFBvcnR1Z3Vlc2U= IG5pY2tuYW1l IGRlYWY= RmVicnVhcnk= IHJlY29nbmlzZQ== IGVudGlyZXR5 IHNlYXNvbmFs cGxhY2Vk IFRlbGVncmFwaA== IG1pY3JvcGhvbmU= b3VyaW5n IGdyYWlucw== IGdvdmVybmVk IHBvc3Rw IFdhdGVycw== aW5lbWVudA== IHVuZG9jdW1lbnRlZA== IENvbWNhc3Q= IGZveA== IGFzc2F1bHRz cmVvbg== bWFueQ== IEplbmtpbnM= IEFueXdheQ== IGFzc2Vzc21lbnRz IGRvd25z IE1vdXNl IHN1cGVyYg== a3Q= IERvdw== IHRheGF0aW9u NDAx IHNtaWxlcw== IHVuZGVydGFrZW4= IGV4aA== IGVudGh1c2lhc3RpYw== IHR3ZW50 IGdvdmVybm1lbnRhbA== IGF1dG9ub215 IFRlY2hub2xvZ2llcw== IENoYWlu IHByZXZhbGVudA== ZmI= IG5pY290aW5l b2dyYW0= am9i IGF3YWl0aW5n IE1lbnU= IGRlcHV0aWVz a292 aXNob3Bz QnV0dG9u IFNoYW5naGFp IGRpZXNlbA== IER1Y2s= Unlhbg== IFBDcw== TkY= anVyeQ== ZW50ZQ== IGluYWNjdXJhdGU= ZWRkeQ== V2hhdGV2ZXI= IHNob3dj IE5hZA== b2R1cw== ZXRy IHBsYWludGlmZnM= IFdPUg== IEFzc2FuZ2U= IHByaXZhdA== IHByZW1pdW1z IHRhbQ== VVJM IGVsaXRlcw== IFJhbmdlcg== b3R0ZW5oYW0= IEhvZmY= IEF0aGVucw== IGRlZmluaXRl IHNpZ2hlZA== IGV2ZW5seQ== MjEx IEFtYmVy YWtpYQ== IG1haWxpbmc= IGNyYXNoaW5n IENvbmZlZGVyYXRl cnVnZ2Vk V2Fs IERlcHRocw== IGp1dmVuaWxl IHJlYWN0b3I= SW50cm9kdWN0aW9u IERlbHV4ZQ== MTk5NQ== IFNhbmNoZXo= IE1lYWQ= aXZhYmxl Oi0= IFBsYW5uaW5n IFRyYXA= cXVpbg== IFByb3RlY3Q= dmVyZWQ= SW5mb3JtYXRpb24= IGtpZG5leQ== aW5uYW1vbg== bGFz IHBvbGljaW5n IHRvbGVyYXRl IFFp IGJpYXNlZA== Rm9ydA== IEtp c2F2ZQ== IHByaXZpbGVnZWQ= IGJlYXN0cw== IEdsYXM= IENpbmVt IGNvbWViYWNr U3VuZGF5 IGV4dGluY3Rpb24= aG9wcw== IHRyYW5zbWl0 IGRvdWJsZXM= IEZsYXQ= MTY3 IGRpc3B1dGVk IGluanVzdGljZQ== Zm9v VmljdA== cm9sZXVt IEp1bGll Q29udGV4dA== IFJhcml0eQ== aXNzdWU= Q29tcG9uZW50 IGNvdW5zZWxpbmc= YW5uZQ== ZGFyaw== IG9iamVjdGlvbnM= dWlsdA== IGdhc3Q= IHBsYWM= IHVudXNlZA== 44OH IFRyaWFs IEphcw== aGVkcmFs b2Ji IHRlbXBvcmFs IFBSTw== IE5X IEFubml2ZXJzYXJ5 TGFyZ2U= IHRoZXJt IGRhdmlk IHN5c3RlbWlj IFNoaXI= bXV0 IE5lcHQ= YWRkcmVzcw== IHNjYW5uaW5n IHVuZGVyc3RhbmRhYmxl IGNhbnZhcw== Q2F0 IFpvbw== IGFuZ2Vscw== TE8= IFN0YXRlbWVudA== IFNpZw== b3ZhYmxl IEF3YXk= c2hhcmluZw== b2NyYXRz c3RhdGVk IHdlaWdoaW5n Tm9y d2lsZA== QmV5 IGFzdG9uaXNoaW5n IFJleW5vbGRz IG9wZW5lcg== IHRyYWluZXI= IHN1cmdpY2Fs cG4= IGFkanVzdGluZw== d2hlZWw= IGZyb3du ZXJ2YXRpdmU= IHN1c3BlbmQ= V2l0aGlu dGVpbg== IG9ic3RhY2xl IGxpYmVydGllcw== eW1lcw== IHVyYW5pdW0= YW5zb20= YW5vbA== dWJh IExvc3M= IGFyb3Vz IEhlbmRlcnNvbg== V293 c3Bs Y3Vy IMKt IHRoZWlycw== RGFtYWdl IGRvd25sb2FkaW5n IGRpc2Nlcm4= IFN0bw== IEZsYQ== IGhhdGg= IEFq IHVucGxlYXNhbnQ= RXVyb3BlYW4= ZXhwZW5zaXZl IHNjcmVlbnNob3Q= IFVW IGFsbGllZA== IFBlcnNpYW4= IG1vbm9wb2x5 IGF0b20= IFJlZHNraW5z Ij48 IGNhbmNlbGw= IGNpbmVtYQ== MTMx ZmFpcg== IEFsZnJlZA== IGR1Y2s= YXJncw== MjIz IElTSQ== IHNpZ25hbGluZw== aW5hcg== IGxhdWdocw== IGZvcndhcmRz IHJlY2tsZXNz IGxpc3RlbmVycw== YXRpdml0eQ== IHZhc3RseQ== bmFudA== TGVzcw== IEh1bnRpbmc= IFNjaWVudGlmaWM= SVRFRA== IGtuaWdodA== IEhUQw== dXNh dG1w IHJ1ZGU= IExlZ2VuZGFyeQ== IGFyaXNlcw== QmFk IENsYWlt cGVn IHJlYWxpdGllcw== VGhpbms= IMKw IHJvZGU= IHN0cml2ZQ== IGFuZWNk IHNob3J0cw== IGh5cG90aGVz IGNvb3JkaW5hdGVk IEdhbmRoaQ== IEZQUw== UkVE IHN1c2NlcHRpYmxl IHNocmluaw== IENoYXJ0 SGVscA== IGlvbg== ZGVlcA== cmliZXM= IEthaQ== IEN1c3RvbWVy U3VtbWFyeQ== IGNvdWdo d2lmZQ== IGxlbmQ= IHBvc2l0aW9uaW5n IGxvdHRlcnk= IENhbnlvbg== IGZhZGU= IGJyb256ZQ== IEtlbm55 IGJvYXN0cw== IEVuaGFuY2Vk cmVjb3Jk IGVtZXJnZW5jZQ== IGFraW4= IEJlcnQ= aXRvdXM= 4paR IHN0aXA= IGV4Y2hhbmdlZA== b21vcmU= YWxzaA== IHJlc2Vydm9pcg== IHN0YW5kcG9pbnQ= V00= IGluaXRpYXRl IGRlY2F5 IGJyZXdlcnk= IHRlcnJpYmx5 IG1vcnRhbA== bGV2YXJk IHJldmlz Tkk= ZWxv IGNvbmZlc3M= IE1TTkJD IHN1Ym1pc3Npb25z Q29udHJvbGxlcg== IDIwMg== IFJ1dGg= fSk7 IEF6dXJl IC4i MjA2 IE1hcmtldGluZw== IGxhdW5k aWVuY2llcw== IHJlbm93bmVk IFRyb3U= IE5HTw== YmxlbXM= IHRlcnJpZmllZA== IHdhcm5z IHBlcnQ= IHVuc3VyZQ== NDgw YWxleg== dWx0eg== IE91dHNpZGU= IHN0eWw= IFVuZGVyZ3JvdW5k IHBhbmM= IGRpY3Rpb25hcnk= IGZvZQ== cmltaW5hbA== IE5vcndlZ2lhbg== IGphaWxlZA== IG1hdGVybmFs w6ll IEx1Y3k= Y29w Q2hv IHVuc2lnbmVk IFplbGRh IEluc2lkZXI= IENvbnRpbnVlZA== IDEzMw== IE5hcnV0bw== IE1ham9yaXR5 MTY5 IFdv 44KT IHBhc3Rvcg== IGluZm9ybWFs 0L0= YW50aHJvcA== am9pbg== 44GX aXRhdGlvbmFs TlA= IFdyaXRpbmc= Zm4= IEJldmVy MTk1 IHllbGxpbmc= IGRyYXN0aWNhbGx5 IGVqZWN0 IG5ldXQ= IHRocml2ZQ== IEZyZXF1 b3V4 IHBvc3Nlc3Nlcw== IFNlbmF0b3Jz IERFUw== IFNoYWtlc3BlYXJl IEZyYW5jbw== IExC dWNoaQ== IGluY2Fybg== IGZvdW5kZXJz RnVuY3Rpb24= IGJyaWdodG5lc3M= IEJU IHdoYWxl IFRoZWF0ZXI= bWFzcw== IERvbGw= U29tZXRoaW5n IGVjaG9lZA== IEhleA== Y3JpdA== YWZpYQ== IGdvZGRlc3M= IGVsZXZlbg== IFByZXZpZXc= IEF1cm9yYQ== IDQwMQ== dWxzaXZl IExvZ2Fu aW5idXJnaA== IENlbnRlcnM= IE9OTFk= IEFpZA== IHBhcmFkb3g= IGh1cmQ= IExD RHVl Y291cnQ= IG9mZmVuZGVk IGV2YWx1YXRpbmc= IE1hdHRoZXdz IHRvbWI= IHBheXJvbGw= IGV4dHJhY3Rpb24= IEhhbmRz aWZp IHN1cGVybmF0dXJhbA== IENPTU0= XT0= ZG9ncw== IDUxMg== IE1lZXRpbmc= UmljaGFyZA== IE1heGltdW0= IGlkZWFscw== VGhpbmdz bWFuZA== IFJlZ2FyZGxlc3M= IGh1bWlsaQ== YnVmZmVy TGl0dGxl IERhbmk= IE5haw== IGxpYmVyYXRpb24= IEFiZQ== IE9M IHN0dWZmZWQ= YWNh aW5kYQ== cmFwaGlj IG1vc3F1 IGNhbXBhaWduaW5n IG9jY3VweQ== U3F1 cmluYQ== IFdlbA== IFZT IHBoeXNpYw== IHB1bHM= cmludA== b2FkZWQ= RVRG IEFyY2hpdmVz IHZlbnVlcw== aG5lcg== IFR1cmJv IGx1c3Q= IGFwcGVhbGVk cXVleg== aWxpYg== IFRpbW90aHk= IG9tbg== ZHJv IG9ic2Vzc2lvbg== IFNhdmFnZQ== MTk5Ng== R2xvYmFs SmVz MjE0 IHNsaWRpbmc= IGRpc2FwcHJv IE1hZ2ljYWw= IHZvbHVudGFyaWx5 Z2I= YW5leQ== IHByb3BoZXQ= IFJlaW4= IEp1bGlh IFdvcnRo YXVydXM= IGJvdW5kcw== aWV1 KSkp IGNyb3Jl IENpdGl6ZW4= U2t5 IGNvbHVtbmlzdA== IHNlZWtlcnM= b25kbw== SVNB IExlbmd0aA== IG5vc3RhbGc= IG5ld2NvbQ== IGRldHJpbQ== ZW50cmlj Mzc1 IEdF IGF1dG9w IGFjYWRlbWljcw== QXBwRGF0YQ== IFNoZW4= IGlkaW90 IFRyYW5zaXQ= IHRlYXNwb29u V2ls S08= IENvbWVkeQ== Piw= IHBvcHVsYXRlZA== V0Q= IHBpZ3M= IE9jdWx1cw== IHN5bXBhdGhldGlj IG1hcmF0aG9u MTk4 IHNlaXp1cmU= c2lkZWQ= IGRvcA== aXJ0dWFs TGFuZA== IEZsb29y b3NhdXJz Li4uXQ== IGxvcw== IHN1YnNpZGlhcnk= RVk= IFBhcnRz IFN0ZWY= IEp1ZGljaWFyeQ== IDEzNA== IG1pcnJvcnM= IGtldA== dGltZXM= IG5ldXJvbG9n IGNhdg== IEd1ZXN0 IHR1bW9y c2NpbGw= IExsb3lk RXN0 IGNsZWFyZXI= IHN0ZXJlb3R5cGVz IGR1cg== bm90aGluZw== UmVkZGl0 IG5lZ290aWF0ZWQ= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t MjM1 IGZsb3du IFNlb3Vs IFJlc2lkZW50 IFNDSA== IGRpc2FwcGVhcmFuY2U= IFZpbmNl Z3Jvd24= IGdyYWJz cmls IEluZmluaXRl IFR3ZW50eQ== IHBlZGVzdHJpYW4= IGplcnNleQ== IEZ1cg== IEluZmluaXR5 IEVsbGlvdHQ= IG1lbnRvcg== IG1vcmFsbHk= IG9iZXk= c2VjdXJl aWZmZQ== IGFudGliaW90aWNz YW5nbGVk IEZyZWVtYW4= IEludHJvZHVjdGlvbg== SnVu IG1hcnNo aWNhbnM= IEVWRU5UUw== b2Nob25k V2FsbA== aWN1bHR5 IG1pc2RlbWVhbm9y IGx5 VGhvbWFz IFJlc29sdXRpb24= IGFuaW1hdGlvbnM= IERyeQ== IGludGVyY291cnNl IE5ld2Nhc3RsZQ== IEhvZw== IEVxdWlwbWVudA== MTc3 IHRlcnJpdG9yaWFs IGFyY2hpdmVz MjAz RmlsdGVy IE11bmljaA== IGNvbW1hbmRlZA== IFdhbmQ= IHBpdGNoZXM= IENyb2F0 IHJhdGlvcw== IE1pdHM= IGFjY3VtdWxhdGVk IFNwZWNpZmljYWxseQ== IGdlbnRsZW1hbg== YWNlcmI= IHBlbm4= IGFrYQ== IEZ1aw== IGludGVydmVuZQ== IFJlZnVnZQ== IEFsemhlaW1lcg== IHN1Y2Nlc3Npb24= b2hhbg== ZG9lcw== TG9yZA== IHNlcGFyYXQ= IGNvcnJlc3BvbmRlbmNl IHNoaW55 UHJpb3I= IHN1bGY= IG1pc2VyYWJsZQ== IGRlZGljYXRpb24= KCku IHNwZWNpYWxpc3Rz IGRlZmVjdHM= IEN1bHQ= IFhpYQ== IGplb3BhcmQ= IE9yZQ== QWJpbGl0eQ== IGxlYXI= IGFtYml0aW9ucw== IEJNSQ== IEFyYWJz IDE5NDI= IHByZXNlcnZhdGlvbg== aWZpY2F0ZQ== IGFzaGFtZWQ= bG9zcw== IFJlc3RhdXI= IHJlc2VtYmxl IGVucmljaA== IEtO IENsYW4= ZmxvYXQ= IHBsYXlhYmxl SVRU IGhhcm1vbnk= YXJyaXNvbg== IFdlaW5zdGVpbg== d2VyZQ== IHBvaXNvbmluZw== IENvbXB1dA== IFdvcmRQcmVzcw== bWFqb3I= IFZhbHZl RmFu IFRocm93 IFJvbWFucw== IERlcHJlc3Npb24= YWRvcw== IHRvcnR1cmVk IGJhbGFuY2luZw== Ym90dG9t IGFjcXVpcmluZw== IE1vbnRl YXJkaQ== IGF1cmE= ICMj IFN0YW5kaW5n IEF0bGFz Q0Y= IGludHJpbnM= IEJlbmdoYXpp IGNhbXBpbmc= IHRhcHBlZA== YmxhZGU= c3Ryb3Vz IFJhYmI= IFdyaXR0ZW4= dGlw IE5laWdo c3RlcmRhbQ== IEFsbG93 IEhlYWxpbmc= IFJob2Q= bnVt IGNhZmZlaW5l IFBlcmNlbnQ= IGJvbw== IGFwcGxlcw== MzA1 IHdlbGNvbWluZw== IGFwcGxhdWQ= IGF1c3Rlcml0eQ== wrE= IFJlYWxpdHk= ZWZl 5a4= IHN1Y2tz IHRhYnM= IFBheVBhbA== IGJhY2twYWNr IGdpZnRlZA== YWJ1bGFyeQ== IFNjb3V0 aXJ0ZWVu IGNoaW4= IG9taXR0ZWQ= IG5lZ2F0aXZlbHk= IGFjY2Vzc2luZw== IEVhcm4= IGFtYnVsYW5jZQ== IGhlYWRwaG9uZXM= IDIwNQ== IFJlZnJlc2g= cHJlc2lkZW50 IEtpdGNoZW4= IEVudGVyZWQ= IFNueWRlcg== MDA1 b21pY2Fs IGJvcnJvd2Vk IE5lbQ== IGF2aWF0aW9u IHN0YWxs cmltaW5hdGlvbg== IHVuaWZvcm1z aXRpbWU= IFNpbW1vbnM= ZW5lcmd5 YWJsaXNoZWQ= eXk= cXVhbGlmaWVk IHJhbGxpZXM= IFN0dWFydA== ZmxpZ2h0 IGdhbmdz cmFn IHZhdWx0 bHV4 IENvbXBhcg== IGRlc2lnbmF0aW9u MjA5 IEpvcw== ZG9sbGFy emVybw== IHdlbGxz MzAz IGNvbnN0aXR1ZW50cw== IGhlY2s= IGNvd3M= IGNvbW1hbmRlcnM= IGRpZmZlcmVudGlhbA== IENhdGhlcmluZQ== Mjk5 IHZhbHZl IGJyYWNl IHBlcnNwZWN0aXZlcw== Y2VydA== ZmFjdA== aWN1bGFybHk= IE1jTg== cGxhbmVz IGludHJpYw== IHBlYXM= b3Zhbg== IHRvc3NlZA== cmV0Y2g= IExvcGV6 IHVuZmFtaWxpYXI= ZGVhdGg= IEFwYXJ0 IENoYW5n IHJlbGlldmVk cm9waGU= IGFpcnBvcnRz IGZyZWFr dXRpbA== TWlsbA== IENoaW4= IE93ZW4= bWFsZQ== IEJyb2tlbg== IFdpbmRz cm9i cmlzaW5n IGZpcmVmaWdodGVycw== IGF1dGhvcml0YXJpYW4= IDE0OA== Qml0Y29pbg== ZXh0ZXJuYWw= IGJyb3dzZXJz aWNoZXZlcg== b3JpYW4= IHVuYg== IHBva2U= IFpvdA== TWlk IFBvcHVsYXI= IGNvdmVydA== IGNvbnRyaWJ1dGVz IDY1MA== IGNvbnRlbnRpb24= R2F0ZQ== IGNvbnNvbGVz IGNocm9tb3M= IElY IHZpc3VhbGx5 IEVpc2Vu IGpld2Vscnk= IGRlbGVnYXRpb24= IGFjY2VsZXJhdGU= IFJpbGV5 IHNsb3Bl IGluZG9vcg== aXRpYWxseQ== IGh1Z2VseQ== IHR1bm5lbHM= IGZpbmVk IGRpcmVjdGl2ZQ== IGZvcmVoZWFk dXN0b21lZA== IHNrYXRl TXVzaWM= Z2Fz IHJlY29nbml6aW5n YW1ibw== IG92ZXJ3ZWlnaHQ= IEdyYWRl 2Yo= IHNvdW5kaW5n IGxvY2tpbmc= IFJFTQ== U3RvcmU= IGV4Y2F2 IExpa2V3aXNl IExpZ2h0cw== IGVsYm93 IFN1cHBseQ== d2lj IGhhbmRzb21l MTk5NA== Q29sbA== IGFkZXF1YXRlbHk= IEFzc29jaWF0ZQ== IHN0cmlwcw== IGNyYWNrZG93bg== IG1hcnZlbA== IEt1bg== IHBhc3NhZ2Vz QEBAQA== IFRhbGw= IHRob3VnaHRmdWw= bmFtZXNl IHByb3N0aXR1dGlvbg== YnVzaW5lc3M= IGJhbGxpc3RpYw== cGVyc29uYWw= Y2ln aXphdGlvbmFs Um91bmQ= IMKgIMKgIMKgIMKg IENvbGVtYW4= IGFkbWl0dGluZw== IFBsdWc= IGJpdGNvaW5z IFN1eg== IGZhaXJuZXNz IHN1cHBsaWVy IGNhdGFzdHJvcGhpYw== IEhlbGVu b3F1 TWFyYw== IEFydGljbGVz Z2ll IGVuZGFuZ2VyZWQ= IGRlc3Rpbnk= IFZvbHQ= b2xpYQ== YXhpcw== IGNoZWF0 IHVuaWZpZWQ= SUNP cXVvdGU= MzAy IFNlZA== IHN1cHByZXNzaW9u IGFuYWx5emluZw== IHNxdWF0 IGZpZ3VyaW5n IGNvb3JkaW5hdGVz IGNodW5rcw== IDE5NDY= IHN1YnA= IHdpa2k= IEZvcmJlcw== IEp1cGl0ZXI= IEVyaWs= aW1lcg== IENvbW1lcmNpYWw= XCk= IGxlZ2l0aW1hY3k= IGRlbnRhbA== IE1lYW4= IGRlZmljaXRz NTUw T3JpZ2luYWxseQ== IEhvcnJvcg== IGNvbnRhbWluYXRpb24= bGxhaA== IGNvbmZpc2M= IENsYXJl VEI= IEZhaWxlZA== YW5lZA== IHJ1bGVy IENvbnRyb2xsZXI= IGZlbWluaXN0cw== Rml4 Z2F5 MjA3 IHJhYmJpdA== VGhpcmQ= b3dudG93bg== IGdsdWU= IHZvbGF0aWxl IHNoaW5pbmc= IGZvbGw= IGltcGFpcmVk IHN1cGVycw== 5og= IGNsdXRjaA== mumGkg== IHByb2xldA== ICgh IHllbGxlZA== IEtpZXY= IEVybg== IFNob2Nr S0I= IHNpdHVhdGVk cXVlcnk= IE5hcw== IGFubmV4 Y2hhcmFjdGVy IEhvbGlkYXk= IGF1dG9tYXRpb24= IEppbGw= IFJlbWFzdGVyZWQ= IGxpbmVt IHdpbGRlcm5lc3M= IEhvcml6b24= IEd1aW5lYQ== QVo= IG1haW5sYW5k IHNlY3JlY3k= TEVBU0U= IHB1bms= IFByb3ZpbmNl KCks U3BlZWQ= IGhhbmRpbmc= IFNlYmFzdA== U2ly cmFzZQ== IGpvdXJuYWxz IGNvbmdlc3Q= IFR1dA== aXJyZWw= IHNjaGl6b3BocmVuaWE= IG1pc29neW4= aGVhbHRoeQ== SXJvbg== IHJlYWN0ZWQ= LSQ= MjUy IHBsdXJhbA== IHBsdW0= IGJhcmdhaW4= IGdyb3VuZGVk ZmluZGVy IGRpc3Nl IExheg== T09E IGF0cm9j RmFjdG9yeQ== IG1pbmlvbnM= IG9yaQ== IEJyYXZl IFBSRQ== IE15YW5tYXI= IEhvZA== IGV4cGVkaXRpb24= IGV4cGxvZGU= IENvb3Jk IGV4dHI= IEJyaWVm IEFESEQ= IGhhcmRjb3Jl ZmVlZGluZw== IGRpbGU= IEZydWl0 IHZhY2NpbmF0aW9u IE1hbw== b3NwaGVyZQ== IGNvbnRlc3Rz LXw= IGZyZW4= aXNwaGVyZQ== Um9t IFNoYXJw IFRyZW5k IGRpc2Nvbm5lY3Q= 4oCi4oCi IHBlcnNlY3V0aW9u RWFydGg= IGhlYWx0aGllcg== Mzg0 IGNvYg== IFRyaW5pdHk= T1dT QU5O IHNwZWNpYWx0eQ== IGdydQ== IGNvb3BlcmF0aXZl d2h5 U3RhcnRpbmc= IElzc3Vlcw== c3RyZQ== ZW5zb3I= IDE4NQ== QWR2 IT8= IFJldmVs ZW1pYQ== IEh1bGs= IGNlbGVicmF0aW9ucw== IFNvdQ== cmF1ZA== IEtsZWlu IHVucmVhbA== Y29udGV4dA== IHBhcnRuZXJzaGlwcw== IGFkb3B0aW5n dGljYWw= IHNwbGFzaA== IEhlemJvbGxhaA== Y2F0ZWdvcnk= Y3ljbG9w eHRvbg== IERvdA== dXJkeQ== dHo= IGVudmVsb3Bl IE5M 4pU= IHdoZXJlaW4= U3BlYw== MTg0 IHRlbGV2 YWxpYXRpb24= IG15dGhz 5bA= IHJpZ29yb3Vz IGNvbW11bmljYXRpbmc= IG9ic2VydmVy IHJlaGU= IFdhc2g= IGFwb2xvZ2l6ZWQ= IFRpbg== IGV4cGVuZGl0dXJlcw== d29ya2Vycw== ZG9jdW1lbnQ= IGhlc2l0YXRl IExlbmlu IHVucHJlZGljdGFibGU= IHJlbmV3YWw= Y2xlcg== b2tpYQ== IENPTlQ= IHBvc3RzZWFzb24= VG9rZW5z IGV4YWNlcmI= IGJldHRpbmc= IDE0Nw== IGVsZXZhdGlvbg== V29vZA== IFNvbG9tb24= MTk0 MDA0 b3V0cHV0 IHJlZHVuZA== IE11bWJhaQ== IHBI IHJlcHJvZHVjZQ== IER1cmF0aW9u TUFY IGJvZw== Q0JT IEJhbGFuY2U= IFNndA== IFJlY2VudA== IGNk IHBvcHBlZA== IGluY29tcGV0 cHJvcA== YXlhbg== Z3V5 UGFjaWZpYw== IHR5cg== IHt7 IE15c3RpYw== IERhbmE= IG1hc3R1cmI= IGdlb21ldHJ5 w6I= IENvcnJlY3Q= IHRyYWplY3Rvcnk= IGRpc3RyYWN0ZWQ= IGZvbw== IFdlbHNo THVj bWl0aA== IHJ1Z2J5 IHJlc3BpcmF0b3J5 IHRyaWFuZ2xl IDIxNQ== IHVuZGVyZ3JhZHVhdGU= IFN1cGVyaW9y Y2hhbmdpbmc= Xy0= IHJpZ2h0bHk= IHJlZmVyZWU= IGx1Y3JhdGl2ZQ== IHVuYXV0aG9yaXplZA== IHJlc2VtYmxlcw== IEdOVQ== IERlcmJ5 IHBhdGh3YXlz IExlZA== IGVuZHVyYW5jZQ== IHN0aW50 IGNvbGxlY3Rvcg== RmFzdA== IGRvdHM= IG5hdGlvbmFscw== IFNlY3VyaXRpZXM= IHdoaXA= UGFyYW0= IGxlYXJucw== TWFnaWM= IGRldGFpbGluZw== bW9vbg== IGJyb2FkY2FzdGluZw== IGJha2Vk MjY1 aG9sbQ== IFNhaA== IEh1c3NlaW4= IENvdXJ0ZXN5 MTc0 IDE0Ng== IGdlb2dyYXBoaWM= cGVhY2U= IGp1ZGdpbmc= IFN0ZXJu QnVy IHN0b3J5bGluZQ== R3Vu IFN0aWNr MjQ1 MzA3 44K044Oz IEFkbWluaXN0cmF0b3I= IGJ1cm50 IHBhdmU= Y2hvZXM= RXhlYw== IGNhbXB1c2Vz UmVzdWx0 IG11dGF0aW9ucw== IENoYXJ0ZXI= IGNhcHR1cmVz IGNvbXBhcmVz IGJhZGdl U2NpZW50 IGVyYWQ= aWVyeQ== b2k= ZXR0ZXM= IEVzdGF0ZQ== IHN0cmFw IHByb3VkbHk= IGZyaWVk IHdpdGhkcmF3bg== IFZveQ== cGhvbnk= SXRlbXM= IFBpZXJjZQ== YmFyZA== IGFubm90YXRpb24= YW50b24= aWxsb24= SW1wcm8= Li4uKQ== IGhhcHBpZXI= LS0tLS0t YWRqdXN0 IHN0YWZmZXJz IGFjdGl2aXNt IHBlcmY= IGFscmlnaHQ= TmVlZA== IGNvbW1lbmNl IG9waW9pZA== IEFtYW5kYQ== RXM= IFBhcnM= IEthdw== V29ya3M= MjQ4 IGluZG8= dGM= ZW5kYW50 IE1vdG8= IGxlZ2FsaXphdGlvbg== T1RF IHRhc2tlZA== IHRzcA== IEFDVElPTlM= MTY2 IHJlZnJlc2hpbmc= IE5S IFBlcmV6 IGluZnJpbmdlbWVudA== U1k= TGlzdGVu aW5uaW5n a3U= IHJvdGF0ZQ== cHJvZ3JhbQ== YXJhaA== RGVzaWdu ICjCow== IHN0b3Jpbmc= IHdhcnJhbnRz IGp1ZGdlbWVudA== IEJyaXN0 dXN1YWxseQ== cGhvdG8= IFJhbg== IFBpbmU= IG91dHJhZ2VvdXM= IFZhbGVudGluZQ== bHVlbmNl IEV2ZXJ5Ym9keQ== QWx0ZXJu IHJlbGV2YW5jZQ== IHRlcm1pbmF0ZWQ= IGRlc3NlcnQ= IGZ1bGZpbGxlZA== IHByb3NlY3V0ZWQ= IFdvcmRz IG1pZ3JhbnQ= IGN1bHRpdmF0aW9u w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgg== aWRlbGl0eQ== IFZlcm4= IExvZ2lu IG1ldGFwaG9y IFRpcA== IHJlY3J1aXRz IFBpZw== cmliaW5n IGVudGh1c2lhc3Rz ZXhwZXI= IGZyaWdodGVuaW5n IEhhaXI= YW5zb24= c3RyYXRl IGhp SGVpZ2h0 IG93bmluZw== bm9uZQ== IGRpc2xpa2U= IGtuaXZlcw== cGhlcmQ= IGxvdWRseQ== IEFQSXM= RGlzcGxheQ== IExhYw== IFVTUw== YWJs dmVyYWdlcw== SmV3 IDE3Mg== IEhpc3RvcmljYWw= YXRvb24= IFBoeXNpY3M= aW50ZXJu IHdhcm10aA== IHRvcHA= RE0= IGd1bm1hbg== IGVtcGVyb3I= b2Rp 44Oj aW5hdG9yeQ== IFJpYg== IDEzMQ== IFNhdHVybg== IFNoaW5pbmc= IHdha2luZw== UXVvdGVz IGNvbWVkaWFu ZW5iZXJn wr0= IGJlbGlldmVycw== IHBhcGVyd29yaw== Y3VzdG9t IGxldg== IGxhbWVudA== IHBvdXJpbmc= MjIy cG9saXRpY2Fs IFN1cHBsZW1lbnQ= bWFpZA== IGNydWVsdHk= IHRyZWFk eXNpY3M= QXc= cml0ZXM= IG1vZGlmaWVy IFBvc2l0aW9u QWRhbQ== bGI= dWJz IGltcGVyZmVjdA== IGNsdXN0ZXJz IEVuZ2luZWVy IENoZXJyeQ== IGluYXVndXJhdGlvbg== IFNhdQ== IGVtYm9kaW1lbnQ= IFVuY2xl IG92ZXJy IGV4cGxvc2lvbnM= Y3VsZQ== IFByaW5jZXRvbg== IEFuZHJlYQ== IGluY29ycmVjdGx5 IGVhcm5lc3Q= IHBpbGdy IFNwcmludA== IHNsZWV2ZQ== IGhlYXJz IEFtYXppbmc= IGJyb3dzaW5n YWdpbg== IGhvbWVsYW5k IGhhdw== IGRpdmluZw== aXN0ZXJlZA== MTc4 IGJhcmdhaW5pbmc= IEFyY2FkZQ== IGRlbGVnYXRl dGVyc29u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== IEphY2tzb252aWxsZQ== Mjc1 IHN0YWdu IGFkYW0= IFNoZXJtYW4= Q0I= IHN1YnVyYg== IEZvb2Rz IGNvbnZlcnRpbmc= IEFyaXN0 IGNoYW1iZXJz bG92ZQ== IGFtaW5v IEdhbg== IG1hZG5lc3M= bWM= IFVTRQ== ZGVmaW5lZA== IHVsdHI= aW5kdXN0 IHdvbHZlcw== bGFuY2U= QWRkaXRpb25hbGx5 IGNyYWNrcw== YXNpYQ== IFJlYXNvbg== IFB1bXA= IGFjY2lkZW50YWw= IExhc2Vy IFJpZA== IGluaXRpYWxpemVk ZWxsaQ== IHVubmFtZWQ= IG5vdW4= IFBhc3NlZA== IGhvc3RhZ2U= IEV0aGlvcA== c2hpcnRz IHVucmVs IEVtYmFzc3k= IDE5NDE= IGF0b21z IHB1cnBvcnRlZA== MTY0 IEZp IGdhbGxvbnM= IE1vbmljYQ== IHBn ZW5tZW50 IHNvcnRlZA== IEdvc3BlbA== IGhlaWdodHM= IHRyYWNlZA== IHVuZGVyZ29pbmc= U2hlbGw= IHNhY2tz IHByb3BvcnRpb25z IGhhbGx1Yw== Rm9udA== YWNldA== IHdhcm1lcg== IElOVEVS IGdyYWJiaW5n UGx1Zw== IHJlYWxpemF0aW9u IEJ1cmtl IGVuY2hhbnQ= QVRFUg== IFNlZWQ= IGFidW5kYW50 Rk0= IGNpdmlj VnM= aXNp IHZvdw== IHJlcGVy IFBhcnRuZXJzaGlw IHBlbmV0cmF0aW9u IGF4ZQ== IHNoYXR0ZXJlZA== IFpvbWJpZXM= IHZpbnls IEFsZXJ0 ZW9u IG9ibGlnZWQ= IElsbHVzdA== IFBsYXph IEZyb250aWVy IGRhdmlkamw= IFNlcmlhbA== IEhhdg== IE51dHJpdGlvbg== Qmk= IOKWiA== IEpheXM= bGludXg= IGh1cnJ5 IHZveQ== IGhvcGVsZXNz IFN0ZWFsdGg= IOOB ZXNzb3Jz dHRsZQ== Ym9yZw== IFNhZmFyaQ== ZmVsbA== IHdhcnk= ZHVl IEFib3Zl SGE= RUxM IG5vdG9y IFdvbg== VG9v IG9jY3VwYXRpb25z IHBvc3Nlc3Npb25z IGludml0aW5n IHByZWRhdG9ycw== IGFjY2VsZXJhdGVk IDE1Nw== dXRlcnRl IEN1YmU= ZWFzdA== YWNjb3VudA== R2l2ZQ== IHRyYW5zcGxhbnQ= cmVkaWVudHM= aWRhYmxl IHNjcmVlbnNob3Rz IEd1bmQ= IEZT IHRyYXZlbGVycw== IHNlbnNvcnk= IEZpYXQ= IFJvY2tldHM= jos= X3s= RnJpZW5k IGNoYXJtaW5n QUxT IGVuam95bWVudA== bXBo IDUwMDA= IFJFRw== 2YY= Ymlh IGNvbXBpbGF0aW9u cm9zdA== IFZQ IFNjaG5l MjAxOQ== IGNvcHlpbmc= TU9SRQ== IEZsb3Jl ZmFsbHM= MjE1 dG90YWw= IGRpc2NpcGxlcw== ZG91Ymxl IGV4Y2VlZGluZw== IHNtYXNoZWQ= IGNvbmNlcHR1YWw= IFJvbWFuaWE= IEJyZW50 IElDRQ== IFRvdQ== IGdyYXA= IG5haWxz MTg5 44OY IHByb2N1cmU= ZXVy IGNvbmZpcm1pbmc= IENlYw== YXdp IEVkZW4= IG5n IGVuZ2luZWVyZWQ= YXRpY3M= IGhvb2tlZA== IGRpc2d1c3Rpbmc= IE11cmRlcg== 44K/ TGlicmFyeQ== IDE2OA== QWxtb3N0 aGVtYXRpYw== TWVudQ== IE5vdHJl IEp1cg== IGtpZG5hcHBlZA== IGhhY2tlcg== IEphZGU= IGNyZWVweQ== IGRyYXdpbmdz IFNwb25zb3I= IGN5Y2xpc3Rz IEdvYmxpbg== IG9wdGltaXplZA== IHN0YWdlZA== IE1jRA== YmV0d2Vlbg== QWdl ZW5v U2V4 IFdpZGU= bmluZ3M= YXZpcw== IGluY2FwYWJsZQ== IEtvYg== IHJld2FyZGluZw== IExvbmU= b2xlc2NlbnQ= IGNvbnRyYWN0ZWQ= IHN0aWNreQ== Sm9zZQ== QmFsbA== ZmVzdA== IElucHV0 IFJlY2VudGx5 IHRvbWF0 c3F1YXJl QXBwbGljYXRpb24= IG5pdHJvZ2Vu IGR1cGxpY2F0ZQ== IFJlY29u IERlYXI= TG9uZG9u IGludHJh IGRvY2s= IG91dHJlYWNo IE1pbGxpb24= IG1hbW1hbHM= YW1wdG9u VkFM IHNuYXBz IGRvcw== IFdob2xl IFJlYWR5 VHJ5 IFdpbm5pcGVn ZWFyYW5jZQ== IGluY3VycmVk cmVuY2hlZA== IE5TVw== aWxvdA== cmFpbmU= IGN1YmU= Z290 IHJ1bndheQ== ZXRlcm1pbmVk IEhhd2tz IHN1cnZpdm9y IFdpc2g= IERpbg== IERFRg== IFZhdWx0 MTg3 IG11c2hyb29tcw== IGNyaXNw YmV5 IERpc2NvdmVyeQ== IGRldmVsb3BtZW50YWw= IHBhcmFkaWdt IGNoYW90aWM= IFRzdQ== IDMzMw== Ym9ucw== IGJhY3RlcmlhbA== IGNvbW1pdHM= IGNvc21pYw== IG1lZ2E= b2NhdGl2ZQ== IFBhaW50 b3Bob2JpYw== IHZhaW4= IGNhcnZlZA== IFRoaWVm IEd1bA== b3dzaGlw IGNpdGVz IEVkaW5idXJnaA== IGRpbWluaXNoZWQ= IGFja25vd2xlZGdlcw== IEtpbGxz IG1pY3Jvdw== IEhlcmE= IHNlbmlvcnM= IHdoZXJlYnk= SG9w YXRyb24= IHVuYXZhaWxhYmxl IE5hdGU= IDQ4MA== IHNsYXRlZA== IFJlYmVjY2E= IEJhdHRlcnk= IGdyYW1tYXI= IGhlYWRzZXQ= IGN1cnNvcg== IGV4Y2x1ZGluZw== YW55ZQ== YXVuZGVyaW5n ZWJpbg== IGZlYXNpYmxl IFB1Ymxpc2hpbmc= IExhYnM= IENsaWZm IEZlcnJhcmk= IHBhYw== dmlzaWJsZQ== bWFya2Vk cGVsbA== IHBvbGl0ZQ== IHN0YWdnZXJpbmc= IEdhbGFjdGlj IHN1cGVyc3Q= IHBhcmFu IE9mZmljZXJz 44CB IHNwZWNpZmljcw== dWx1cw== MjM5 IFBhc3Rl QU1Q IFBhbmFtYQ== IERlbGV0ZQ== YW5ndWFyZA== cmVzdHJpYWw= IGhlcm9pYw== IER5 2KfZhA== IGluY3VtYmVudA== IGNydW5jaA== dHJv IHNjb29w IGJsb2dnZXI= IHNlbGxlcnM= dXJlbg== IG1lZGljaW5lcw== IENhcHM= IEFuaW1hdGlvbg== b3h5 IG91dHdhcmQ= IGlucXVpcmllcw== MjI5 IHBzeWNob2xvZ2lzdA== IFNhc2s= ZXZpbA== IGNvbnRhbWluYXRlZA== 44Ko aGVyZW5jZQ== IGJyYW5kZWQ= IEFiZHVs emg= IHBhcmFncmFwaHM= IG1pbnM= IGNvcnJlbGF0ZWQ= ZXJi IGltcGFydA== IG1pbGVzdG9uZQ== IFNvbHV0aW9ucw== b3RsZQ== IHVuZGVyY292ZXI= IG1hcmNoZWQ= IENoYXJnZXJz ZmF4 IFNlY3JldHM= IHJ1dGg= d2VhdGhlcg== IGZlbWluaW5l IHNoYW0= IHByZXN0aWdpb3Vz aWdnaW5z IHN1bmc= aGlzdG9yeQ== ZXR0bGU= Z2dpZQ== IG91dGRhdGVk b2xhbmQ= IHBlcmNlcHRpb25z IFNlc3Npb24= IERvZGdlcnM= dWo= IEVORA== RG9j IGRlZmljaWVuY3k= R3JhbmQ= IEpva2Vy IHJldHJvc3BlY3Q= IGRpYWdub3N0aWM= IGhhcm1sZXNz IHJvZ3Vl IEF2YWw= RXF1 IHRyYW5zYw== IFJvYmVydHNvbg== IERlcGVuZGluZw== IEJ1cm5z aXZv IGhvc3RpbGl0eQ== RmVhdHVyZXM= k5g= IGRpc2NvbWZvcnQ= IExDRA== c3BlY2lmaWVk IEV4cGVjdA== MzQw IGltcGVyYXRpdmU= IFJlZ3VsYXI= Q2hpbmVzZQ== IHN0YXRld2lkZQ== IHN5bW0= IGxvb3Bz IGF1dHVtbg== Tmljaw== IHNoYXBpbmc= IHF1b3Q= IGNoZXJyeQ== IENyb3NzcmVm 6Kaa6YaS U3RhbmRhcmQ= aGVlZA== IERlbGw= IFZpZXRuYW1lc2U= IG9zdA== IFZhbGt5cmll T0E= QXNzYWQ= IHJlYm91bmQ= IFRyYWZmaWM= cGxhY2Vz 5pg= IEJ1Yw== MTcy IHNoZWx0ZXJz IGluc2lzdGluZw== IENlcnRhaW5seQ== IEtlbm5ldGg= IFRDUA== IHBlbmFs IFJlcGxheQ== aGVhcmQ= IGRpYWxlY3Q= aXph IEZZ aXRjaGVy IERM IHNwaXJhbA== IHF1YXJ0ZXJiYWNrcw== IGh1bGw= IGdvb2dsZQ== IHRvZGQ= IFN0ZXJsaW5n IFBsYXRl IHNweWluZw== bWJvbA== IFJlYWxt IFByb2NlZA== IENyYXNo IHRlcm1pbmF0ZQ== IHByb3Rlc3Rpbmc= Q2VudGVy Z3VpZGVk IHVuY292ZXI= IGJveWNvdHQ= IHJlYWxpemVz c291bmQ= IHByZXRlbmRpbmc= IFZhcw== MTk4MA== IGZyYW1lZA== IDEzOQ== IGRlc2NlbmRlZA== IHJlaGFiaWxpdGF0aW9u IGJvcnJvd2luZw== IEJ1Y2g= IGJsdXI= Um9u IEZyb3plbg== ZW56YQ== Q2hpZWY= IFBvb3I= IHRyYW5zbGF0ZXM= TUlO IDIxMg== SkVDVA== IGVydXB0ZWQ= IHN1Y2Nlc3Nlcw== U0VD IHBsYWd1ZQ== IGdlbXM= ZG9tcw== IHN0cmV0Y2hlcw== IFNweQ== IHN0b3J5dGVsbGluZw== Q3JlZGl0 IFB1c2g= IHRyYWN0aW9u IGluZWZmZWN0aXZl IEx1bmE= IHRhcGVz IGFuYWx5dGljcw== ZXJjaXNl IHByb2dyYW1tZXM= IENhcmJvbg== IGJlaG9sZA== aGVhdnk= IENvbnNlcnZhdGlvbg== IEZJUg== IHNhY2s= dGVybWlu cmlja3M= IGhvdXNlZA== IHVudXN1YWxseQ== SWNl IGV4ZWN1dGluZw== IE1vcm9j ZWRheQ== IGVkaXRpb25z IHNtYXJ0ZXI= IEJB IG91dGxhdw== IHZhbmlzaGVk aWJh QUxTRQ== IFNpbHZh MjM4 Q291bGQ= IHBoaWxvc29waGVy IGV2YWN1YXRlZA== U2VjcmV0 MTQy IHZpc2Fz 44Ks IE1hbHQ= IENsZWFybHk= IE5pZ2Vy IENhaXJv IEZpc3Q= Mzgw IFhNTA== YXV0bw== aXRhbnQ= IHJlaW5mb3JjZWQ= UmVjb3Jk IFN1cnZpdm9y R0h6 IHNjcmV3cw== cGFyZW50cw== IG9jZWFucw== bWFyZXM= IGJyYWtlcw== dmFzaXZl IGhlbGxv IFNJTQ== cmltcA== IG9yZQ== IEFybW91cg== MjQ3 IHRlcnJpZmlj IHRvbmVz MTQx IE1pbnV0ZXM= RXBpc29kZQ== IGN1cnZlcw== IGluZmxhbW1hdG9yeQ== IGJhdHRpbmc= IEJlYXV0aWZ1bA== TGF5 IHVucG9w dmFibGU= IHJpb3Rz IFRhY3RpY3M= YmF1Z2g= IENvY2s= IG9yZ2FzbQ== IFNhcw== IGNvbnN0cnVjdG9y ZXR6 R292 IGFudGFnb24= IHRoZWF0 IGRlZWRz aGFv Y3V0cw== IE1jQ2w= IHVt IFNjaWVudGlzdHM= IGdyYXNzcm9vdHM= eXNzZXk= Il09Pg== IHN1cmZhY2Vk IHNoYWRlcw== IG5laWdoYm91cnM= IGFkdmVydGlz b3lh IG1lcmdlZA== VXBvbg== IGdhZA== IGFudGljaXBhdGU= QW55d2F5 IHNsb2dhbg== IGRpc3Jlc3BlY3Q= SXJhbg== IFRC YWN0ZWQ= IHN1YnBvZW4= bWVkaWF0ZWx5 T09PTw== IHdhaXZlcg== IHZ1bG5lcmFiaWxpdGllcw== b3R0ZXN2aWxsZQ== IEh1ZmZpbmd0b24= Sm9zaA== IERI TW9uZGF5 IEVsbGVu S25vdw== eG9u aXRlbXM= MjI4 IGZpbGxz IE5pa2U= IGN1bXVsYXRpdmU= YW5kYWxz SXI= IOw= IGZyaWN0aW9u aWdhdG9y IHNjYW5z IFZpZW5uYQ== bGRvbQ== IHBlcmZvcm1lcnM= UHJpbQ== IGJpZGRpbmc= TXVy IGxlYW5lZA== IFByaXg= YWxrcw== IFvigKZd IFR3aXRjaA== IERldmVsb3Blcg== IEdpcg== IGNhbGxiYWNr QWJzdHJhY3Q= IGFjY3VzdG9tZWQ= IGZyZWVkb21z IFBH dXJhY3k= IGx1bXA= aXNtYW4= LCwsLA== MTk5Mg== IFJFRA== IHdvcm0= TWF0Y2g= IFBsYXRpbnVt SUo= IE93bmVy VHJpdmlh Y29tcGw= IG5ld2Jvcm4= IGZhbnRhcw== T3du IDE5NTk= IHN5bXBhdGg= IHViaXF1 IG91dHB1dHM= IGFsbGV2 IHByYWc= S2V2aW4= IGZhdm9ycw== IGJ1cmlhbA== IG51cnQ= c29sZXRl Y2FjaGU= IDE1Ng== IHVubG9ja3M= dGVjaG4= TWFraW5n IGNvbnF1ZXI= YWRpYw== 5pY= IGVsZg== IGVsZWN0b3JhdGU= IEt1cmRz IFN0YWNr IFNhbXVyYWk= IOKYhQ== IHt9 IFNhaWQ= IEZhbGxvdXQ= IGtpbmRuZXNz IEN1c3RvbXM= IEJvdWxldmFyZA== IGhlbGljb3B0ZXJz b3RpY3M= IFZlZ2V0 Y29tbWVudA== IGNyaXRpY2lzZWQ= IHBvbGlzaGVk IFJlbWl4 IEN1bHR1cmFs IHJlY29ucw== IGRvaQ== YXRlbQ== U2NyZWVu IGJhcnJlZA== Q29tbWVudHM= IEdlbmVyYWxseQ== IHNsYXA= NzIw VmFyaQ== cGluZQ== IGVtcHQ= IGhhdHM= IFBsYXlpbmc= bGFi YXZlcmFnZQ== Zm9ybXM= IENvdHRvbg== IGNhbnM= IERPTg== IFNvbWFsaWE= Q3J5cHQ= IEluY3JlYXNlcw== RXZlcg== bW9kZXJu IHN1cmdlb24= MzAwMA== IHJhbmRvbWl6ZWQ= PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== QmVybg== aW1wbA== IENPUg== IHByb2NsYWlt dGhvdXNl IHRvZXM= IGFtcGxl IHByZXNlcnZpbmc= IGRpc2JlbA== Z3JhbmQ= QmVzaWRlcw== IHNpbGs= IFBhdHRlcm4= aG0= IGVudGVycHJpc2Vz IGFmZmlkYXZpdA== IEFkdmlzb3J5 IGFkdmVydGlzZWQ= IFJlbGlnaW91cw== c2VjdGlvbnM= cHN5Y2g= IEZpZWxkcw== YXdheXM= IGhhc2h0YWc= IE5pZ2h0bWFyZQ== IHZhbXBpcmU= IGZvcmVuc2lj cm9zc292ZXI= bmFy IG5hdnk= IHZhY2FudA== IER1ZWw= IGhhbGx3YXk= IGZhY2Vib29r aWRlbnRhbGx5 IE5SQQ== IG1hdHQ= IGh1cnJpY2FuZQ== IEtpcmJ5 IFB1enpsZQ== IHNraXJ0 b3VzdA== ZHVsbGFo IGFuYWxvZ3k= aW5pb24= IHRvbWF0b2Vz IE5W IFBlYWs= IE1leWVy IGFwcG9pbnRtZW50cw== IG1hc2M= IGFsbGV5 cmVoZW5k IGNoYXJpdGllcw== IHVuZG8= IGRlc3RpbmF0aW9ucw== IFRlc3Rpbmc= Ij48Lw== IGRlc3RpbmVk IGltcGxlbWVudHM= IEhhcm9sZA== UkVDVA== IG9wdGltaXphdGlvbg== IGtpbG9tZXRyZXM= IGNtZA== IGltcGFpcm1lbnQ= IHVuc3VjY2Vzc2Z1bA== IHN3aWZ0bHk= IEdsYXNnb3c= YXJ0ZW4= IFNoYXJlcw== IEFuc3dlcg== IEFsYnVt IG51dHJpdGlvbmFs 44OW IEZ1dA== IGJsb2M= IE5GQw== IHdob2xlc2FsZQ== IENX IG5lZ2xlY3RlZA== IGxhdW5jaGVy IGFubm91bmNlbWVudHM= T1VMRA== Y29tYg== IHJvdGF0aW5n IHJlc3Rz IFRpY2tldA== Y2hlZGVs TG91 IFZpYw== ICIn IHRlbXBsYXRlcw== IHJlcGxhY2Vz QXJj Ojo6Og== IEdpbGJlcnQ= IGlsbG5lc3Nlcw== IHNjaGVkdWxlcw== IGhldGVyb3NleHVhbA== TElORQ== IGhlcmVpbg== IGNvZXJj IGRlY3JlYXNpbmc= IGRlcG9ydGF0aW9u c3Vkbw== IEluZGlnZW5vdXM= IHdlaWdocw== QWxvbmc= Jyk7 IEJlbmdhbHM= NzA3 IGpvaW50cw== dmVydHM= IDE0OQ== bmFpcmU= IHNpbXBsZXN0 IGxvcmU= MTA4MA== ZmljdGlvbg== IERhdGFiYXNl IHJlc2VydmF0aW9u IHNvdQ== IHNhbmN0dWFyeQ== YXVkaW8= YXBsZQ== IHZlZ2V0YXJpYW4= IGFudGljaXBhdGlvbg== bWljcm8= IGVuZHVyaW5n IGRlcGFydGVk IHNpZGV3YWxr IHByb2hpYml0cw== IEZvbnQ= IGNvbXB1dGU= IFNlY3Q= IDE1OA== QmF0dGxl IGJvbWJlcg== IGRpc3RyYWN0aW9u IGVuZHVyZWQ= IHByYWN0aXRpb25lcnM= IGRpc3R1cmJlZA== IGRyYW5r b3JkZXJlZA== IHN1cnByaXNlcw== c2VhdA== U2VjdXJpdHk= IFdpc2RvbQ== b2dv IHN1YnBhcmFncmFwaA== IFBlbmluc3VsYQ== IE9yaWdpbnM= aXJlbg== IFBhdg== aWdnbGU= IGdyYXRpdHVkZQ== IEdyYXZpdHk= b3ZlcnR5 aW1hbg== Y3Ry IENhZXNhcg== Y291bGQ= Z2Vt IHNraWVz IGNoYW1w IGFncmVlaW5n RmFtaWx5 RGl2 MTc2 IG1lc3N5 dW1wdGlvbg== RmVkZXJhbA== ZXJubw== IENoYXQ= QmV5b25k IGRldm90ZQ== IFdhbHNo IGR1bXBlZA== IGFjY3VtdWxhdGlvbg== c3RhZA== aGliaXRpb24= IHNtb2tlcnM= IGluc3BlY3Rvcg== RnJlbmNo aXNzYW4= IFZpdGE= IHJlc2VhcmNoaW5n UkFN IENlbHRpY3M= IGNsb2Fr IFRlcnJh TWFyeQ== c29sZA== IERPTQ== bW9kcw== SW50ZWw= IG11bHRpdHVkZQ== IEltcHJvdmVk IHJlbGlhbmNl IGFydGlmYWN0 IGFsYXJtaW5n UHJvbQ== aG9u VElPTg== bWVkaXVt IHJlZmxleA== IEV4Y2Vs IHdlYWtlbmVk MTYz MjI0 IGNvc3R1bWVz IHVuaXF1ZWx5 IHNvcnJvdw== IG1hbnNpb24= d3A= IHNhbHY= IEdyb3Zl YnNw IFNuaXBlcg== IFNoaXBwaW5n IFBPVw== IHVuZGlz IGJyYW5kaW5n R2lybA== IEFobWFk IExha2Vz IENvcmV5 IGluaGVyaXRhbmNl ZW5lcnk= IHBhY2tpbmc= IFByZXN0 RGVzdA== Rlc= IHJlZ3VsYXRvcg== bG9ja2Vk IGNvbnRlc3RlZA== IE1lbGlzc2E= IER1Yw== IHVucG9wdWxhcg== IHN0YWNrZWQ= IDE5MTc= IHllYXJseQ== IHN0YXJl IGFzc2Vzc2luZw== w7g= IGJldmVyYWdlcw== IGNvbXBldGl0aW9ucw== IHN0cmVuZ3RoZW5pbmc= YWxvbmc= IEx1ZA== IG1lbHRlZA== c3RhbmJ1bA== IGJvdW50eQ== RU5D IExhbmRz IGRlY2xhcmVz IGN1c3RvbWl6ZQ== IGNvbXBvc2l0ZQ== 44Os Q00= b2dyYXBoaWNz IFRlbXA= IGNvbnRlbmRlcg== IGluc2lnbg== IExBTg== IGRpc2FzdGVycw== aW5zcGlyZWQ= IGp1ZGdtZW50cw== dXN0YWluYWJsZQ== dXJzaW9u IHZhcmlhbmNl IFVsdGltYXRlbHk= IC0tLS0tLS0t dWFkb3I= IFJY IG1lbHRpbmc= IEV4dGVuZGVk IFR3ZQ== TWFqb3I= IEJpbA== IHN5cnVw cXVpY2s= IEhvbGRlcg== IGlubm9jZW5jZQ== VUxF IE1pZ2h0 OTk5OQ== IGZhbA== IGNvbnRpbnVpdHk= IDE5NTM= IEJT c3RpbGw= TGF0 IEFidXNl IHVuc3VwcG9ydGVk eHh4eHh4eHg= IGluc3RpdHV0ZQ== IGZyYWdtZW50 IFBlcA== V2VzdGVybg== IENhdXNl IEZyYWc= IEFycw== 4KU= YXN0aWNz IGJpc2hvcA== IGNyb3NzZXM= IDE1NA== IFVwZ3JhZGU= IG1pdGlnYXRl IFJheW1vbmQ= TW9kcw== IHRvbWF0bw== IHN0dW1ibGVk IGRpZmZlcnM= SW5pdGlhbA== IFJhc3BiZXJyeQ== IGlnbm9yZXM= IHRhbnQ= w6A= IHJlbGF5 IGJpc2V4dWFs IGNvbmZlc3Npb24= IGRlbWVudA== aW5hcw== IEhlYXRoZXI= cGxhdGZvcm0= ZHJpdmluZw== Ym91cmc= IE11c2g= IGh5c3Rlcg== RGV0YWlscw== IGRyaWZ0 IFdhbGQ= IEx1Y2tpbHk= b3Jm IGV4cGlyZQ== IFB1bmNo enltZQ== Z29sZA== IHVucGFpZA== IFRyZW50 IHVuYXJtZWQ= IGlsbGljaXQ= IFRvdHRlbmhhbQ== IHNtYXNo SW50ZXJuYXRpb25hbA== aW5rZXI= IHN0aW5n IFNhZGRhbQ== IEFSVA== IHRydXRocw== YmlydGg= IHNvYmVy IE5pdA== IGli IHVzYWJsZQ== IHN0YWNrcw== IFN5bHY= IG5vcnRoZWFzdA== IGRvbWluYXRpb24= IE1vdXI= RU5TRQ== IE1lYXN1cmU= IHByb2dyYW1tZXI= IDwt MTgy IENvbmRpdGlvbg== IGJhY2t5YXJk aXJsaW5n IEplYg== IENyZWVk IEhhbmc= IENPTVA= RkVS IElzaA== IGRldGVjdGl2ZXM= LS0tLS0tLS0tLS0tLS0t IE1lc3Nlbmdlcg== IGxvb3Bo IGdhdGV3YXk= MTUx IE1hdGVyaWFscw== IERU IGRvb21lZA== b2Rv IHNsaWNlcw== IGVtYWlsZWQ= IFBlcmw= IHJlbm92 VVRI b2R5bmFt IFNvdXRod2VzdA== Z2V0aWM= IFRQUA== IG9wdGltaXNt IFRvdw== dWxhdG9ycw== cHJvdGVjdGVk eWxlcw== wqs= IGV4aWxl ZW52 UHJvcA== IFppbW1lcm1hbg== 2Y4= Q2E= b21hbHk= 44OG IHJhaWxyb2Fk TGVl MjMy IHJlcGxpY2F0ZQ== IGNvbWZvcnRhYmx5 YWN0bHk= IHJhdg== IHRlbGVzY29wZQ== IGhvbmVzdHk= IFBlcHBlcg== IEJyaW5n IHJpY2hlc3Q= IG91dGRvb3Jz IGhhbGxz IGNvbnRlbmQ= SVNF IHN1Ym1pdHRpbmc= IG5haXZl YXJhdGlvbnM= IDE0Mw== IHBvaXNlZA== cmVzcG9uc2libGU= IHNvY2tz IFNrdWxs UXVlc3Rpb24= IGRpc2NvdmVyaWVz Sm9pbmVk IEVuZW1pZXM= IFdpcmVsZXNz IFJldmVuZ2U= IHB1enpsZXM= IGNlYXNlZA== Mjkw Y3JpcHRpb25z IENvbnNvbGU= IGJvaWxpbmc= IGRpc2NyZXA= IGRlZHVjdGlvbg== IGFyc2VuYWw= WFhYWA== IEFtc3RlcmRhbQ== cm94aW1hdGVseQ== IFNoYW5l IHBvc2luZw== IEFDTFU= IENvbXBhbmllcw== IHRoZW9sb2d5 IFVn cXVhcnRlcg== IEhhbms= Q29pbg== IEx2 IGFsbGVnYXRpb24= IEF2b2lk IGluZGVmaW5pdGVseQ== IGNvbW1vZGl0aWVz IGJyaWc= IE1hbml0 IHRlbnRo bWV0aG9k IEtuaWNrcw== IOKAjg== IGludm9rZWQ= RGlhbA== QVJB IGNhdWN1cw== MjI3 IEphYg== IG91bmNlcw== YmF5 IGJ1ZGR5 ZmFu MjM0 IEhpbA== YWRo IFRZ IElORA== IDE5Mzk= IGl0ZXJhdGlvbg== IEdvbnphbGV6 IFZlcnQ= IElP ZW1i cmVyYQ== ZW5jaA== IFJlcXVpcmVtZW50cw== IFdpbnM= IGxpdmVzdG9jaw== aG91cnM= IuKApg== YnJhbA== TWFyZw== IERvbmU= IHdhc3Rpbmc= aW5nZWQ= Z3JvdXBz IHdpc2hpbmc= IFR1bWJscg== IHRhcHBpbmc= IG5hdGlvbmFsaXNt IEJ5cg== IHNxdWFyZXM= IEFjdGlvbnM= 44Ol SW5zaWRl ZGVidWc= IGFwcGVuZA== IHN0dWJib3Ju IENpbmQ= VGVsbA== IHRlYXJpbmc= IFJleQ== b3Jj IERheXRvbg== IE5I IE1hZG5lc3M= Q2hhcmw= IE1vcnJpc29u ZmlsdGVy IGFjY3VzZQ== IC4v IHRvcnJlbnQ= IGRlY2xpbmVz Z2FsbGVyeQ== TWluZQ== IG5lZ290aWF0aW9u IEJhc2hhcg== b3BpYQ== MTk5Mw== ZW1vcnQ= IE5vdmVs IEZhbmc= ZXJzaXZl IEluc3RhbnQ= IHJvbGxlcg== QXJvdW5k IEVsZWN0aW9ucw== R2FtZXM= IGluZXhwZW5zaXZl IHdvcnM= IHZ1bA== IEhvbGU= IHVuYmVsaWV2YWJsZQ== IG5hdXNl IGVudHI= Ym9hdA== IFNURQ== IGJ1c2g= IEhhc3Nhbg== IHdv IHBhdXNlZA== IE1pZw== bGl2ZWQ= IHNjb3V0 IGxpdGg= UHVibGlzaGVk ZHVpbm8= Y29vbA== IGNpcmN1bGF0aW5n aWRhcw== IFBhbQ== dmlvbGVudA== IENyYXdmb3Jk dWRkbGU= IExldHRlcnM= R3VhcmQ= bW9ycGg= IHdhbmRlcmluZw== IHNvcGhvbW9yZQ== IHF1ZWVy IEJsaW5k cnVl IE1hcnJpYWdl RG9t IHBhZGRpbmc= IGZvbGRlcnM= IG1lYW5pbmdsZXNz IGNhbmRpZGFjeQ== YWZvcnQ= IHdoaXN0bGVibA== IElkZW50aWZpZWQ= IGNpZ2Fy IGhpZA== IER1YmFp IHBvc3R1cmU= IGhpa2luZw== IFRlcm1pbmFs TGVnZW5kYXJ5 IFRQ IEFUSw== IFN0YXJidWNrcw== IFJpb3Q= MTk5MQ== IEJvdHRvbQ== ZWZmaWM= IEV1Z2VuZQ== IFd5b21pbmc= IFJvY2t5 IHNhbG1vbg== IG1ldHJv IGJpbGF0ZXJhbA== IGNlbGVicmF0ZXM= TGVuZ3Ro YmlsbGlvbg== QmF0 IHJlbGVn IHBzZXVkbw== RFQ= IFJob2Rl UGFyZW50 cGxldGlvbg== IGF0dHJpYnV0 IHR1bmluZw== IE5PVEU= IFJlYmVs aWN1cw== RnVuZA== IGNvY2t0YWls IDUwMQ== IHNwb29u IGJydXRhbGl0eQ== IHVuaXRl IG1pY3JvYmk= IFJlaWNo cG9zaXRpdmU= IGFtYXplZA== IE5U RGVzYw== RUNUSU9O IGZhbHNlbHk= IEhpZ2hsYW5kZXI= IENyaXN0 IFZpY3Rvcmlhbg== IGRpc3RyaWJ1dGlvbnM= dGhlaXI= IEVpbnN0ZWlu IHBvZA== IGVwaWRlbQ== IGhlYXA= IFJhbmNo IGFudGhlbQ== IHJlYXBw IEF1YnVybg== IGNvbmN1cnJlbnQ= IFRocm91Z2hvdXQ= IFBPU1Q= 4pg= IGhvbWVtYWRl a2ljaw== QmVn IGNoYXNzaXM= Y291bnRlcg== IG1lcmdlcg== IGxhcHM= MjE3 dW5pb24= IFRyaWdnZXI= IGRlYmF0ZWQ= IHNpbGVudGx5 IHJlc3RyYWludA== QmFs MDAwMDAwMA== IGZvcm1pZGFibGU= IEZpbGlw IHNhY3JpZmljZXM= Rm9vZA== IGR3YXJm IFNlcXU= aW5pYW4= TW9yZW92ZXI= IHRhbmdpYmxl b3BzaXM= IE1pbmVjcmFmdA== IFJlZ2lzdHJhdGlvbg== b2Fu IHJlcHJlc2VudGF0aW9ucw== IHRoaXJzdA== IGNvcnA= aXJlbWVudA== TWFkZQ== bG9l PiI= Y2F0cw== Ki4= IGdlc3R1cmVz Z2VuZXJhbA== TGVhZ3Vl IHBhY2tldHM= IEluc3BlY3Rvcg== IEJlcmc= IGZyYXVkdWxlbnQ= IGNyaXRpY2l6ZQ== RnVu IGJsYW1pbmc= bmRyYQ== IHNsYXNo IEVzdG9u IHByb3Bvc2luZw== IHdoYWxlcw== IHRoZXJhcGlzdA== IHN1YnNldA== IGxlaXN1cmU= RUxE IENWRQ== IEFjdGl2aXR5 IGN1bG1pbg== c2hvcA== IERBWQ== aXNjaGVy IEFkbWlyYWw= IEF0dGFja3M= IDE5NTg= IG1lbW9pcg== IGZvbGRlZA== IHNleGlzdA== IDE1Mw== IExJ IHJlYWRpbmdz IGVtYmFycmFzc21lbnQ= IEVtcGxveW1lbnQ= d2FydA== Y2hpbg== IGNvbnRpbnVhdGlvbg== bGlh UmVjZW50bHk= IGR1ZWw= IGV2YWN1YXRpb24= IEthc2htaXI= IGRpc3Bvc2l0aW9u IFJpZw== IGJvbHRz IGluc3VyZXJz NDY3 TWV4 IHJldGFsaWF0aW9u IG1pc2VyeQ== IHVucmVhc29uYWJsZQ== cmFpbmluZw== SW1t IFBV ZW1lcg== IGdlbml0YWw= 44Kz IENhbmR5 IG9uaW9ucw== IFBhdHQ= bGluZXI= IGNvbmNlZGVk IGZh IGZvcmM= IEhlcm5hbmRleg== IEdlb2Zm ZGViaWFu IFRlYW1z IGNyaWVz IGhvbWVvd25lcnM= MjM3 QUJD IHN0aXRjaA== IHN0YXRpc3RpYw== IGhlYWRlcnM= IEJpb2xvZ3k= IG1vdG9ycw== IEdFTg== IExpcA== IGhhdGVz IGhlZWw= U2VsZg== aXBs RURJVA== b3J0aW5n IGFubm90 IFNwZWVjaA== b2xkZW1vcnQ= IEphdmFzY3JpcHQ= IExlQnJvbg== IGZvb3RwcmludA== IGZu IHNlaXp1cmVz bmFz aGlkZQ== IDE5NTQ= IEJlZQ== IERlY2xhcmF0aW9u IEthdGll IHJlc2VydmF0aW9ucw== TlI= ZmVtYWxl IHNhdHVyYXRlZA== IGJpYmxpY2Fs IHRyb2xscw== RGV2aWNl cGhvdG9z IGRydW1z 44OJ44Op44K044Oz TmlnaHQ= ZmlnaHRlcg== IEhhaw== cmliZXI= IGN1c2g= IGRpc2NpcGxpbmFyeQ== YmF1bQ== IEdI IFNjaG1pZHQ= aWxpYnJpdW0= IHNpeHR5 IEt1c2huZXI= cm90cw== IHB1bmQ= IFJhYw== IHNwcmluZ3M= IGNvbnZl QnVzaW5lc3M= RmFsbA== IHF1YWxpZmljYXRpb25z IHZlcnNlcw== IG5hcmNpc3M= IEtvaA== IFdvdw== IENoYXJsb3R0ZXN2aWxsZQ== ZWRv IGludGVycm9nYXRpb24= IFdvb2w= MzY1 QnJpYW4= IOKckw== IGFsbGVnZXM= b25kcw== aWRhdGlvbg== IEphY2tpZQ== eXU= IGxha2Vz IHdvcnRod2hpbGU= IGNyeXN0YWxz IEp1ZGE= IGNvbXByZWhlbmQ= IGZsdXNo IGFic29ycHRpb24= IE9D IGZyaWdodGVuZWQ= IENob2NvbGF0ZQ== TWFydGlu IGJ1eXM= IGJ1Y2tz IGFwcGVsbA== IENoYW1waW9uc2hpcHM= IGxpc3RlbmVy IERlZmVuc2l2ZQ== IGN6 dWRz IE1hdGU= IHJlcGxheQ== IGRlY29yYXRlZA== IHN1bms= IFZJUA== IEFuaw== IDE5NQ== YWFhYQ== Tm9ib2R5 IE1pbGs= IEd1cg== IE1r IFNhcmE= IHNlYXRpbmc= IFdpZA== VHJhY2s= IGVtcGxveXM= IGdpZ2FudGlj QVBQ 44Kn aW52ZW50b3J5 IHRvd2Vs YXRjaGU= bGFzdGluZw== IFRM IGxhdGVuY3k= IGtuZQ== QmVy bWVhbmluZw== IHVwaGVsZA== IHBsYXlncm91bmQ= IG1hbnQ= U2lkZQ== IHN0ZXJlbw== IG5vcnRod2VzdA== IGV4Y2VwdGlvbmFsbHk= IHJheXM= IHJlY3VycmluZw== RHJpdmU= IHVwcmlnaHQ= IGFiZHVjdA== IE1hcmF0aG9u IGdvb2RieWU= IGFscGhhYmV0 aHA= IGNvdXJ0cm9vbQ== cmluZ3Rvbg== b3RoaW5n VGFn IGRpcGxvbWF0cw== IGJhcmJhcg== IEFxdWE= MTgz MzMzMw== IG1hdHVyaXR5 IGluc3RhYmlsaXR5 IEFwYWNoZQ== ID09PQ== IGZhc3Rpbmc= IEdyaWQ= TW9kTG9hZGVy IDE1Mg== QWJz IE9wZXJhdGluZw== ZXR0aQ== IGFjcXVhaW50 RG9ubmVsbA== IEtlbQ== IEZvcmdl IGFybW9yZWQ= TWls IHBoaWxvc29waGVycw== aW52ZXN0 UGxheWVycw== 4og= IG15cmlhZA== IGNvbXJhZGVz Um90 IHJlbWVtYmVyaW5n IGNvcnJlc3BvbmRz IHByb2dyYW1tZXJz IEx5bm4= IG9saWc= IGNvaGVyZW50 eW5jaHJvbg== IENoZW1pY2Fs IGp1Z2c= cGFpcg== cG9zdHM= RXll IElubmVy IHNlbWVzdGVy b3R0ZXN0 IEVtaXJhdGVz cmljYW5lcw== b3JvdXNseQ== bWl0cw== IFdpcw== IGRvZGdl bG9jYXRpb24= IGZhZGVk QW1hem9u IFByb2NlZWQ= IElORk8= am91cm5hbA== IFRydWNr VGVu IDIxNw== IHN0YXR1dGVz bW9iaWxl IFR5cGVz UmVjb21t YnVzdGVy cGV4 IGxlZ2VuZHM= IGhlYWRhY2hl ZmFjZWQ= IFdpRmk= aWZ0eQ== IEhFUg== IGNpcmN1aXRz RVJST1I= MjI2 b2xpbg== IGN5bGluZGVy b3NwYWNl aWtlcnM= UHJlbQ== UXVhbnQ= IGNvbmZsaWN0aW5n IHNsaWdodGVzdA== IGZvcmdlZA== aW9uYWdl U3RlcGhlbg== IEt1Yg== IE9wcG9ydHVu IEhlYWw= IGJsbw== IHJ1bGVycw== IGh1aA== IHN1Ym1hcmluZQ== Znk= YXNzZXI= IGFsbG93YW5jZQ== IEthc2ljaA== IFRhcw== IEF1c3RyYWxpYW5z Rm9yZ2VNb2RMb2FkZXI= IOKGkQ== IE1hdHJpeA== YW1pbnM= IDEyMDA= IEFjcXU= MjM2 RG9jdW1lbnQ= IEJyZWFraW5n MTkz IFN1YnN0 IFJvbGxlcg== IFByb3BlcnRpZXM= IE5J dGllcg== IGNydXNoaW5n IGFkdm9jYXRpbmc= RnVydGhlcm1vcmU= a2VlcGVycw== IHNleGlzbQ== eGQ= IGNhbGxlcg== IFNlbnNl Y2hpZXZl IFRG IGZ1ZWxlZA== IHJlbWluaXNjZW50 IG9ic2Vzcw== dXJzdA== IHVwaG9sZA== IEZhbnM= aGV0aWNz IOKX IEJhdGg= IGJldmVyYWdl IG9zY2lsbA== MjU0 IHBvbGVz IGdyYWR1YWw= IGV4dGluZw== IFN1ZmY= IFN1ZGRlbmx5 IGxpa2luZw== IDE5NDk= dW5jaWF0aW9u YW1pbmF0aW9u IE9tYXI= IExW IENvbnNlcXVlbnRseQ== IHN5bnRoZXM= IEdJRg== IHBhaW5z IGludGVyYWN0aW5n dW91c2x5 aW5jcmU= IHJ1bW9y IFNjaWVudG9sb2d5 MTk3 IFppZw== IHNwZWxsaW5n IEFTUw== IGV4dGluZ3U= bXNvbg== IGdo IHJlbWFya2Vk IFN0cmF0ZWdpYw== IE1PTg== 5aU= Z2Fl IFdIQVQ= RXJpYw== IENhbXB1cw== IG1ldGhhbmU= IGltYWdpbg== SlVTVA== IEFsbQ== WFQ= aXE= IFJTUw== IHdyb25nZG9pbmc= YXR0YQ== IGJpZ290 IGRlbW9uc3RyYXRvcnM= IENhbHZpbg== IFZpbGxh IG1lbWJyYW5l IEF3ZXNvbWU= IGJlbmVmaWM= MjY4 IG1hZ25pZmljZW50 IExvdHM= R3JlZw== IEJvcmlz IGRldGFpbmVlcw== IEhlcm1hbg== IHdoaXNwZXJlZA== IGF3ZQ== UHJvZmVzc29y ZnVuZGluZw== IHBoeXNpb2xvZ2ljYWw= IERlc3RydWN0aW9u IGxpbWI= IG1hbmlwdWxhdGVk IGJ1YmJsZXM= IHBzZXVk IGh5ZHJh IEJyaXN0b2w= IHN0ZWxsYXI= IEV4cGFuc2lvbg== IEtlbGw= IEludGVyZXN0aW5nbHk= IG1hbnM= IGRyYWdnaW5n IGVjb2xvZ2ljYWw= IEZpdA== IGdlbnQ= IGJlbmVmaXRlZA== IEhhaXRp IHBvbHln 44OO IDIwMzA= IHByb3c= IHJlY29uc3RydWN0aW9u IHdhc3Q= IHBzeWNoaWM= IEdyZWVrcw== SGFuZGxlcg== MTYy IFB1bHNl IHNvbGljaXQ= IHN5cw== IGluZmx1eA== IEdlbnRsZQ== cGVyY2VudA== IHByb2xpZmVyYXRpb24= IHRheGFibGU= IGRpc3JlZ2FyZA== IGVzY2FwaW5n IGdpbmdlcg== IHdpdGhzdGFuZA== IGRldmFzdGF0ZWQ= IERldw== c2VyaWVz IGluamVjdGVk ZWxhaWRl IHR1cm5vdmVy aGVhdA== mYI= SGFwcHk= IFNpbGVudA== 44Kt aXZpc20= IGlycmF0aW9uYWw= QU1B IHJlZWY= cnVi IDE2Mg== IGJhbmtlcnM= IEV0aGljcw== dnY= IGNyaXRpY2lzbXM= S24= MTg2 TW92aWU= IFRvcmllcw== IG5vb2Q= IGRpc3RvcnRpb24= RmFsc2U= b2RvcmU= IHRhc3R5 UmVzZWFyY2g= IFVJRA== LSk= IGRpdm9yY2Vk IE1V IEhheWVz IElzbg== aWFuaQ== IEhR ICIj aWduYW50 IHRyYXVtYXRpYw== IExpbmc= SHVu IHNhYm90 b25saW5l cmFuZG9t IHJlbmFtZWQ= cmFyZWQ= S0E= ZGVhZA== w6l0 IEFzc2lzdGFuY2U= IHNlYWY= KysrKysrKys= IHNlbGRvbQ== IFdlYmI= IGJvb2xlYW4= dWxldA== IHJlZnJhaW4= IERJWQ== cnVsZQ== IHNodXR0aW5n IHV0aWxpemluZw== bG9hZGluZw== IFBhcmFt Y29hbA== b290ZXI= IGF0dHJhY3Rpbmc= IERvbA== IGhlcnM= YWduZXRpYw== IFJlYWNo aW1v IGRpc2NhcmRlZA== IFBpcA== MDE1 w7xy IG11Zw== SW1hZ2luZQ== Q09M IGN1cnNlZA== IFNob3dz IEN1cnRpcw== IFNhY2hz c3BlYWtpbmc= IFZpc3Rh IEZyYW1ld29yaw== b25nbw== IHN1YnJlZGRpdA== IGNydXM= IE92YWw= Um93 Z3Jvd2luZw== IGluc3RhbGxtZW50 IGdsYWM= IEFkdmFuY2U= RUNL IExHQlRR TEVZ IGFjZXQ= IHN1Y2Nlc3NpdmU= IE5pY29sZQ== IDE5NTc= UXVvdGU= IGNpcmN1bXN0YW5jZQ== YWNrZXRz IDE0Mg== b3J0aXVt IGd1ZXNzZWQ= IEZyYW1l IHBlcnBldHJhdG9ycw== IEF2aWF0aW9u IEJlbmNo IGhhbmRj QXA= IDE5NTY= MjU5 cmFuZA== TmV0TWVzc2FnZQ== ZGlu dXJ0bGVz aGln IFZJSUk= ZmZpdGk= IFN3b3Jkcw== YmlhbA== IGtpZG5hcHBpbmc= ZGV2aWNl IGJhcm4= IEVsaQ== YXVjYXM= U2VuZA== Q29uc3RydWN0ZWQ= IMK9 IG5lZWRsZXM= IGFkdmVydGlzZW1lbnRz IHZvdQ== IGV4aGliaXRlZA== IEZvcnRyZXNz QXNr QmVycnk= VFlQRQ== IGNhbmNlcnM= dW1waW5n IFRlcnJpdG9yeQ== IHBydWQ= IG5hcw== IGF0aGVpc3Q= IGJhbGFuY2Vz 44Gf IFNoYXdu JiY= IGxhbmRzYw== IFJHQg== IHBldHR5 IGV4Y2VsbGVuY2U= IHRyYW5zbGF0aW9ucw== IHBhcmNlbA== IENoZXY= RWFzdA== IE91dHB1dA== aW1p IGFtYmllbnQ= IFRocmVhdA== IHZpbGxhaW5z IDU1MA== SUNB IHRhbGxlcg== IGxlYWtpbmc= Y3Vw IHBvbGlzaA== IGluZmVjdGlvdXM= IEtD IEBA YmFja2dyb3VuZA== IGJ1cmVhdWNyYWN5 IFNhaQ== dW5sZXNz aXRpb3Vz IFNreXBl QXRs SURFTlQ= MDA4 IGh5cG9jcg== IHBpdGNoZXJz IGd1ZXNzaW5n IEZJTkFM QmV0d2Vlbg== IHZpbGxhZ2Vycw== IDI1Mg== ZmFzaGlvbg== IFR1bmlz QmVo IEV4Yw== IE1JRA== Mjg4 IEhhc2tlbGw= MTk2 IE5PUg== IHNwZWNz IGludmFyaQ== IGdsdXQ= IENhcnM= IGltcHVsc2U= IGhvbm9ycw== Z2Vs IGp1cmlzZGljdGlvbnM= IEJ1bmRsZQ== dWxhcw== Q2FsaWZvcm5pYQ== IEluY3JlYXNl IHBlYXI= IHNpbmdsZXM= IGN1ZXM= IHVuZGVyd2VudA== IFdT IGV4YWdnZXJhdGVk IGR1YmlvdXM= IGZsYXNoaW5n TE9H KV0u Sm91cm5hbA== dGc= VmFu IElzdGFuYnVs IEluc3A= IEZyYW5rZW4= RHJhdw== IHNhZG5lc3M= IGlyb25pYw== IEZyeQ== eGM= IDE2NA== aXNjaA== V2F5 IFByb3Rlc3RhbnQ= aG9ybg== IHVuYWZm IFZpdg== aWxsYXM= IFByb2R1Y3Rpb25z IEhvZ2Fu IHBlcmltZXRlcg== IFNpc3RlcnM= IHNwb250YW5lb3Vz IGRvd25zaWRl IGRlc2NlbmRhbnRz IG9ybg== d29ybQ== SmFwYW5lc2U= IDE5NTU= IDE1MQ== IERvaW5n ZWxzZW4= dW1ibGVz IHJhZGljYWxseQ== IERydW0= IEJhY2g= IGxpYWJpbGl0aWVz IE9C IEVsZW1lbnRhcnk= IG1lbWU= eW5lcw== IGZpbmdlcnByaW50 IEdyYWI= IHVuZGVydGFrZQ== TWVtYmVycw== IFJlYWRlcg== IFNpbXM= Z29k IGh5cG90aGV0aWNhbA== c2NpZW50 IEFK IGNoYXJpc20= IGFkbWlzc2lvbnM= IE1pc3NpbGU= dHJhZGU= IGV4ZXJjaXNpbmc= IEJhY2tncm91bmQ= V3JpdHRlbg== IHZvY2Fscw== d2hldGhlcg== IHZp IFdpbm5lcg== IGxpdHRlcg== IFNob290aW5n U1RFTQ== 44Kh IEFGTA== IHZhcmlhYmlsaXR5 IGVhdHM= IERQUw== YnJvdw== IGVsZXBoYW50cw== IHN0cmF0 IMU= IHNldHRsZXJz TWF0dGhldw== IGluYWR2ZXJ0 SEk= IElNRg== IEdvYWw= IG5lcnZlcw== Sm9obnNvbg== ZXll YWJsaXNobWVudA== VGh1cnNkYXk= QklMSVRZ SGFk YW1vdG8= aGV0YW1pbmU= ZXBz IG1pdG9jaG9uZA== IGNvbXByZXNzZWQ= IFRyZXZvcg== IEFuaW1hbHM= VG9vbA== TG9jaw== IHR3ZWFr IHBpbmNo IGNhbmNlbGxhdGlvbg== UG90 IGZvY2Fs IEFzdHJvbg== MTcz IEFTQw== IE9USEVS dW1uaQ== IGRlbWlzZQ== ZGw= 2YU= U2VtaXRpc20= IGNyYWNraW5n IGNvbGxhYm9yYXRpdmU= IGV4cGxvcmVz c3Fs IGhlcmJz IGNvbmZpZ3VyYXRpb25z bWlz IFJlc3VsdA== YWNleQ== IFNtb2tl IHNhbmN0 ZWxpYQ== IGRlZ2VuZXI= IGRlZXBlc3Q= IHNjcmVhbWVk IG5hcA== U29mdHdhcmU= IFNUQVI= RUY= IFhpbg== c3BvbnNvcmVk bWFuc2hpcA== MjMz IHByaW1hcmllcw== IGZpbHRlcmluZw== IGFzc2VtYmxl bWls IE15ZXJz Ym93cw== IHB1bmNoZWQ= TWlj IGlubm92YXRpb25z IGZ1bmM= YW5kbw== IGZyYWNraW5n IFZ1bA== 0L7Q b3Nob3A= IEltbXVu IHNldHRsaW5n IGFkb2xlc2NlbnRz IHJlYnVpbGRpbmc= IHRyYW5zZm9ybWluZw== IHBhcm9sZQ== IGhhcmJvcg== IGJvb2tpbmc= b3Rpb25hbA== b25nZXZpdHk= IFlv YnVn IGVtZXJnZXM= IE1ldGhvZHM= IENodQ== UHJlcw== IER1bmdlb25z IHRyYWlsaW5n IFJ1bQ== IEh1Z2g= 5aSp IEVyYQ== IEJhdHRsZXM= UmVzdWx0cw== IFRyYWRpbmc= IHZlcnNh Y3Nz YXhpZXM= aGVldA== IGdyZWVk MTk4OQ== IGdhcmRlbnM= IGNvbnRpbmdlbnQ= UGFyaw== IExlYWZz aG9vaw== cm9iZQ== IGRpcGxvbWFjeQ== IEZ1ZWw= IEludmFzaW9u IHVwZ3JhZGluZw== TWFsZQ== IGVsaWM= IHJlbGVudGxlc3M= IENvdmVuYW50 YXBlc2g= IFRyb3A= VHk= cHJvZHVjdGlvbg== YXJ0eQ== IHB1bmNoZXM= YWtv Y3ljbG9wZWRpYQ== IFJhYmJpdA== IEhETUk= IDE0MQ== IGZvaWw= SXRlbUltYWdl IEZH IGltcGxlbWVudGF0aW9ucw== IFBvbQ== aXh0dXJlcw== IGF3YWl0 IDMzMA== YW11cw== IHVtYnJlbGxh IGZvcmVzZWU= c2VwYXI= IGNpcmN1bWNpc2lvbg== IHBlcmlwaGVyYWw= U2F5 IEV4cGVydA== SW5j IHdpdGhkcmV3 IEFuZGVycw== ZnJpZWQ= IHJhZGlvYWN0aXZl IE9wZW5pbmc= IGJvYXJkaW5n IE5E IG92ZXJ0aHJvdw== QWN0aXY= V1A= IEFjdHM= 15k= IG1vdGlvbnM= dmlj IE1pZ2h0eQ== IERlZmVuZGVy YWVy IHRoYW5rZnVs IEtpbGxpbmc= IEJyaXM= bW9pbA== IHByZWRpY3Rpbmc= MjY2 Y2hvaWNl IGtpbGxlcnM= IGluY3Vi IENoZXN0 YXRoZXJpbmc= IHByb2NsYWltZWQ= Zmxvd2Vy b3Nzb20= dW1ibGVkb3Jl IEN5Y2xpbmc= IE9jY3VweQ== QUdFUw== UGVu IFl1Zw== IHBhY2thZ2Vk IGhlaWdodGVuZWQ= Y290 c3RhY2s= Q29uZA== IHN0YW1wcw== bWFnZQ== IHBlcnN1YWRlZA== IGVuc2w= IENhcmRpbmFs IHNvbGl0YXJ5 IHBvc3Nlc3Npbmc= IENvcms= IGV2aWQ= IFRheQ== IGJsdWVz IGV4dHJlbWlzbQ== IGx1bmFy IGNsb3du VGVjaG4= IGZlc3RpdmFscw== IFB2UA== IExhcg== IGNvbnNlcXVlbnRseQ== cHJlc2VudA== IHNvbWVkYXk= 546L IE1ldGVvcg== IHRvdXJpbmc= Y3VsdHVyZQ== IGJlYWNoZXM= U2hpcA== Y2F1c2U= IEZsb29k 44Ov IHB1cml0eQ== dGhvc2U= IGVtaXNzaW9u Ym9sdA== IGNob3Jk IFNjcmlwdHVyZQ== THU= ICR7 Y3JlYXRlZA== T3RoZXJz MjU4 IGVsZW1lbnRhbA== IGFubm95ZWQ= IEFF ZGFu IFNhZw== UmVzZWFyY2hlcnM= IGZhaXJ5 4oCT4oCT PT09PT09PT09PT09 U21hcnQ= R0dHRw== IHNrZWxldG9ucw== IHB1cGlscw== bGlua2Vk IHVyZ2VuY3k= ZW5hYmxlZA== IEZ1Y2s= IGNvdW5jaWxs cmFi VUFM VEk= IGxpZmVz IGNvbmZlc3NlZA== QnVn IGhhcm1vbg== IENPTkZJRw== IE5ldXRyYWw= RG91Ymxl IHN0YXBsZQ== IFNIQQ== QnJpdGlzaA== IFNOUA== QVRPUg== b2Nv IHN3aW5naW5n Z2V4 b2xlb24= cGxhaW4= IE1pc3Npbmc= IFRyb3BoeQ== dmFyaQ== cmFuY2g= IDMwMQ== NDQw MDAwMDAwMDAwMDAwMDAwMA== IHJlc3RvcmluZw== IGhhdWw= dWNpbmc= bmVyZw== IGZ1dHVyZXM= IHN0cmF0ZWdpc3Q= cXVlc3Rpb24= IGxhdGVyYWw= IEJhcmQ= IHNvcg== IFJob2Rlcw== IERvd250b3du Pz8/Pz8t IExpdA== IEJlbmVk IGNvaWw= c3RyZWV0 IFBvcnRhbA== RklMRQ== IEdydQ== Kiw= MjMx bmV1bQ== IHN1Y2tlZA== IHJhcHBlcg== IHRlbmRlbmNpZXM= IExhdXJlbg== Y2VsbGFuZW91cw== MjY3 IGJyb3dzZQ== IG92ZXJj aGVhZGVy b2lzZQ== IGJlZXQ= IEdsZQ== U3RheQ== IG11bQ== IHR5cGVk IGRpc2NvdW50cw== VGFsaw== IE9n ZXhpc3Rpbmc= IFNlbGw= dXBo Q0k= IEF1c3RyaWFu IFdhcm0= IGRpc21pc3NhbA== IGF2ZXJhZ2Vz Y2FtZXJh IGFsbGVnaWFuY2U= TEFO PSIj IGNvbW1lbnRhdG9ycw== IFNldHRpbmc= IE1pZHdlc3Q= IHBoYXJtYWM= IEVYUA== IHN0YWlubGVzcw== Q2hpY2Fnbw== IHRhbg== MjQ0 IGNvdW50cnlzaWRl IFZhYw== Mjk1 IHBpbm5lZA== IGNyaXNlcw== IHN0YW5kYXJkaXplZA== VGFzaw== IEphaWw= IERvY2tlcg== Y29sb3JlZA== Zm9ydGg= In0s IHBhdHJvbnM= IHNwaWNl IG1vdXJu IE1vb2Q= IGxhdW5kcnk= IGVxdWlw IE1vbGU= eWxs IFRIQw== bmF0aW9u IFNoZXJsb2Nr IGlzc3U= IEtyZQ== IEFtZXJpY2Fz IEFBQQ== IHN5c3RlbWF0aWNhbGx5 IGNvbnRyYQ== IFNhbGx5 IHJhdGlvbmFsZQ== IGNhcnJpYWdl IHBlYWtz IGNvbnRyYWRpY3Rpb24= ZW5zYXRpb24= IEZhaWx1cmU= IHByb3Bz IG5hbWVzcGFjZQ== IGNvdmU= ZmllbGRz 44KL IHdvb2w= IENhdGNo IHByZXN1bWVk IERpYW5h cmFnb24= aWdp IGhhbW0= IHN0dW50 IEdVSQ== IE9ic2VydmF0b3J5 IFNob3Jl IHNtZWxscw== YW5uYWg= IGNvY2twaXQ= IER1dGVydGU= ODUw IG9wcHJlc3NlZA== YnJlYWtlcg== IENvbnRyaWJ1dA== IFBlcnU= IE1vbnNhbnRv IEF0dGVtcHQ= IGNvbW1hbmRpbmc= IGZyaWRnZQ== IFJpbg== IENoZXNz dWFsaXR5 IG9s UmVwdWJsaWNhbg== IEdsb3J5 IFdJTg== Li4uLi4uLg== YWdlbnQ= cmVhZGluZw== IGluaA== Sm9uZXM= IGNsaWNrcw== YWxhbg== IFtdOw== IE1hamVzdHk= IENlZA== b3B1cw== YXRlbA== w6o= QVJD IEVjdWFkb3I= 44Og IEt1cm8= IHJpdHVhbHM= IGNhcHRpdmU= IG91bmNl IGRpc2FncmVlbWVudA== IHNsb2c= ZnVlbA== UGV0 TWFpbA== IGV4ZXJjaXNlZA== IHNvbGlj IHJhaW5mYWxs IGRldm90aW9u IEFzc2Vzc21lbnQ= IHJvYm90aWM= b3B0aW9ucw== IFJQ IEZhbWlsaWVz IEZsYW1lcw== IGFzc2lnbm1lbnRz MDA3 YWtlZG93bg== IHZvY2FidWxhcnk= UmVpbGx5 IGNhdmFs Z2Fycw== IHN1cHByZXNzZWQ= IFNFVA== IEpvaG5z IHdhcnA= YnJva2Vu IHN0YXR1ZXM= IGFkdm9jYXRlZA== IDI3NQ== IHBlcmls b21vcnBo IEZlbWlu cGVyZmVjdA== IGhhdGNo TGli NTEy IGxpZmVsb25n MzEz IGNoZWVrcw== IG51bWJlcmVk IE11Zw== Qm9keQ== cmF2ZWw= V2VpZ2h0 IEphaw== IEhlYXRo IGtpc3Npbmc= IEpVU1Q= IHdhdmluZw== dXBsb2Fk IGluc2lkZXI= IFByb2dyZXNzaXZl IEZpbHRlcg== dHRh IEJlYW0= IHZpb2xlbnRseQ== aXBhdGlvbg== IHNrZXB0aWNpc20= IDE5MTg= IEFubmll IFNJ IGdlbmV0aWNz IG9uYm9hcmQ= YXRs IEZyaWVkbWFu IEJyaQ== Y2VwdGl2ZQ== IHBpcmF0ZQ== IFJlcG9ydGVy Mjc4 IG15dGhvbG9neQ== IGVjbGlwc2U= IHNraW5z IGdseXBo aW5naGFt RmlsZXM= Q291cg== d29tZW4= IHJlZ2ltZXM= IHBob3RvZ3JhcGhlZA== S2F0 IE1BWA== T2ZmaWNpYWxz IHVuZXhwZWN0ZWRseQ== IGltcHJlc3Npb25z RnJvbnQ= Ozs7Ozs7Ozs= IHN1cHJlbWFjeQ== IHNhbmc= IGFnZ3JhdmF0ZWQ= IGFicnVwdGx5 IFNlY3Rvcg== IGV4Y3VzZXM= IGNvc3Rpbmc= aWRlcHJlc3M= U3RhY2s= IFJOQQ== b2JpbA== IGdob3N0cw== bGRvbg== YXRpYmlsaXR5 VG9waWNz IHJlaW1idXJzZQ== IEhN IERlZw== IHRoaWVm eWV0 b2dlbmVzaXM= bGVhbmluZw== IEtvbA== IEJhc2tldGJhbGw= IGZp IFNlZWluZw== IHJlY3ljbGluZw== IFst Q29uZ3Jlc3M= IGxlY3R1cmVz UHN5 IG5lcA== IG1haWQ= IG9yaWVudGVk QVg= IHJlc3BlY3RmdWw= cmVuZQ== Zmx1c2g= IFVubG9hZGVk cmVxdWVzdA== Z3JpZA== IEFsdGVybmF0aXZlbHk= IEh1Z28= IGRlY3JlZQ== IEJ1ZGRoaXNt YW5kdW0= QW5kcm9pZA== IENvbmdv IEpveWNl IGFja25vd2xlZGdpbmc= aGVzaXZl IFRvbW9ycm93 IEhpcm8= dGhyZW4= IE1hY2Vk IGhvYXg= IEluY3JlYXNlZA== IFByYWRlc2g= V2lsZA== X19fX19f MTYx IGF1bnQ= IGRpc3RyaWJ1dGluZw== IFR1Y2tlcg== IFNTTA== IFdvbHZlcw== QnVpbGRpbmc= b3VsdA== IEx1bw== IFlhcw== IFNwaXI= IFNoYXBl IENhbWJvZA== IElQdg== IG1s IGV4dHJhZA== Mzkw IFBlbm55 ZHJlYW0= IHN0YXRpb25lZA== b3B0aW9uYWw= ZXdvcnRoeQ== Ljwv IHVuZGVydGFraW5n IGNoaWNrZW5z IHN0aW11bGk= IEVsc2U= aWdhdG9ycw== IEJlZ2lubmluZw== Y3Rvcnk= IHByZXBhcmVz IGRlbHRh IHZpY2luaXR5 dG9vbA== IHdvcmtzaG9wcw== TUh6 IGFjY3VzYXRpb24= IGhpc3Rvcmllcw== cm9wb2xpcw== IENodXJjaGlsbA== IG5lb24= IGJhZmY= ZGllcw== bWF5YmU= IOijj+immumGkg== IHN5bXB0b20= RUNI IE1hbnVlbA== IGJhbmFuYQ== IEhC ICoqKio= IEtvcmVhbnM= Y29sbA== RkI= IHByYXlpbmc= IENhbm5vdA== IE1pbGU= IGVtYnJhY2luZw== IFNpbGs= Mzkz b3RlcnM= RkQ= IGRheWxpZ2h0 YWxpYXM= IEJyaWdhZGU= IEhhbm5haA== IGNsZXJneQ== IHNvdXRoZWFzdA== IGFsY29ob2xpYw== IHByb3Bvc2Vz bGl2aW9u IGNhbGN1bGF0aW5n IHN0aW11bGF0ZQ== IHNwbGl0dGluZw== ZWlnaHQ= IEluZHk= cGxheXM= IFBpaw== IGRvbWVzdA== IGZvcmdpdmVuZXNz IFJpbmdz cGF0aWVudA== a2luc29u TW9udA== aWdpYmxl OyI= IHBlcmlvZGljYWxseQ== YW1tYWQ= IEJyaXR0 cGFyZA== IGFyYml0cmF0aW9u IFNjaG5laWRlcg== IENvcnBvcmF0ZQ== IE1heWE= IHNuYWtlcw== YXVt IGJsYXN0ZWQ= IG15c3Rlcmllcw== IHJldml2ZQ== b2NhbXA= IERvZGdl IE9wZXJh Mjc5 IG9ycGhhbg== IHNwZWNpZmllcw== IE1ldHM= RHVyYXRpb24= SGVu IGZpcmV3b3Jrcw== IHByb3NlY3V0ZQ== IFRpbGxlcnNvbg== ZHA= dXNhZ2U= bGluZXNz IERlYmlhbg== IDIyNA== cmlzZXM= IEluZmVjdA== YXRyYQ== IFJS IExvcg== ZGlmZg== IENoYXJsZXN0b24= IGFjb3VzdGlj IGFtdXNl MzMw IGNlcg== IFRhYw== IFsr IGNhcmRpYWM= IFJlc3RhdXJhbnQ= ZXJneQ== IGZ1eno= IGJpdGVz IGhhemFyZG91cw== IGJyaWdodGVy cmFucw== IFN0ZXBoYW5pZQ== ZXh0cmE= UkVU IENocmlzdGluZQ== IFN1ZQ== c3RhdGVtZW50 IGJvbHN0ZXI= IGFudGl0 UmFkaW8= QklU 44Kw IHZpc2lvbnM= IENvbmNlcHQ= IGlubGluZQ== IFBoaWxvc29waHk= aXNhbnM= IElydmluZw== w6M= dGFraW5n IGluY29uc2lzdA== IEt1bWFy IGxpZw== IFNjaHVtZXI= IFJlZ3VsYXRpb25z IEh6 dGhybw== IFZvbGRlbW9ydA== IE1FRA== IEZyZWRlcmljaw== UGFk MjIx IGFsbGVnaW5n IENvbW11bmljYXRpb24= IDE2Nw== IGZvcmVjYXN0cw== IHNwaWRlcnM= T3JnYW4= IFBhcnRpY2lwYW50cw== IE9wcw== ZGVzaWdu Q2xvc2U= IGZhY3Rv IGJvbWJlcnM= cmVzaXN0YW50 YXRlZ29yaWVz U2Nob29s IGhvbWV3b3Jr IGNvcnJv VHVlc2RheQ== IEJyZW5kYW4= IE1Y IFRT IFN0cmk= IHN0YWtlaG9sZGVycw== IE1pbGxlbm5pdW0= IHRyYW5zZmVycmluZw== SnVk IHRhYw== IDE2MDA= IFNESw== cmI= IGludGVycHJldGF0aW9ucw== IFNH IHVwc3RhaXJz IEhhcnZlc3Q= IHZhZ2luYQ== IGluZ2VzdA== eGY= IE9yaW9u IEpvZXk= IHNhbmR3aWM= IGltbW9ydGFs IGZsaXBwZWQ= b3J0ZXg= dGhyZWF0ZW5pbmc= IHNuaXBlcg== IGNvbnZlcnRz IGluc3RhbGxhdGlvbnM= IEJ1bGdhcg== b3JzY2hl bWFpbHM= IGx1cmU= IG5hcnJvd2x5 IGdyZW5hZGU= IEdpbmc= IHVuZGVyd2Vhcg== LS0tLS0tLS0tLS0tLS0= IGNoYXNlZA== IFZBTA== IHBhcmVudGluZw== IEhhbWI= IEJsYXo= IGFuYXJjaGlzdA== IE1lZGlhbg== IFByb2dyYW1z zr0= IG9iag== IE5va2lh b3JtYW4= YW5xdQ== YXRpc20= b3Bh IGZ1bGZpbGxpbmc= IHB1cHB5 IGVudGl0 IFNlYmFzdGlhbg== IHNob290ZXJz IHJpY2hlcg== 6KE= IHRlbXB0ZWQ= IEFUVA== IENW IHRvcmU= UmVzb3VyY2U= IERldmlscw== NDA4 aW5hdGlvbmFs IGFzc3VyYW5jZQ== IERhcnJlbg== IHdoaWNoZXZlcg== cG9zdXJl IGZ1cnk= U3RvY2s= IHVuaXZlcnNhbGx5 cmVzcG9uc2U= IG9haw== IHdvcmtsb2Fk IENvcm5lcg== ZWVsZQ== Ii4uLg== IGRlcHJpdmVk a293c2tp IGNhc3Rz IGFmZmlsaWF0aW9u IEFjaA== IEFza2Vk YXRoZQ== IGxhY3Q= IFRodQ== cm0= IGFpcmxpbmVz IG5vdGlvbnM= Rm9ybWF0 IEZBQQ== 44OK ZHJpdmVy IHRyYW5zY2VuZA== U2V0dGluZ3M= IFByb3NlY3V0 IHNwaW5hbA== IGRlZmF1bHRz Rks= IHByZWZlcnM= cmVuZGVyZWQ= dGh1cw== ZmlsbQ== IHRpZ2Vy IFNwaWNlcg== cmVjb2du IFJ1Z2J5 TmV0d29yaw== IHBpdHk= IGNvbXBhcnRtZW50 Y2FzdGVycw== IE1vbnJvZQ== IDcyMA== IGNvcnJlY3Rpb25z IGRvcGFtaW5l IEFa Q3V0 IHJvb21t IHNwZWN1bGF0ZQ== SGFzaA== IHJlc3RyaWN0aXZl MTExMQ== cmVkaWJsZQ== b25lbA== IHJhbXBhbnQ= cmVwb3J0ZWQ= IFN1aXRl IE1pbmltdW0= YWx5cw== YXphcmQ= bG9vcA== IGxlbnQ= c2hh IHZhbmRhbA== bWVudQ== IEJvZWhuZXI= IG5hcnJhdGl2ZXM= IGF1dGhlbnRpY2l0eQ== MjY5 YW5pYw== ZHV0eQ== Mjg1 IHRoYW5rZWQ= IGJldHJheWVk bGlmdA== IHNvdXRod2VzdA== IERleHRlcg== IEJvZA== IGtleXdvcmRz QXZlcmFnZQ== RElT IGV0aG5pY2l0eQ== ISks IE5hdGlvbmFscw== 4bk= IFRhaA== aW94aWQ= IHdpZGdldA== IHBhc3Rh IGJpbGxpbmc= IHRyaWxvZ3k= IExpbmVz IHNuaWZm IG5lcGhldw== TGF0ZQ== IHByaW5jaXA= IExvb3A= IE1hcnhpc3Q= IGRpc3NvbHZlZA== IGNvbnRleHRz IEFtb3VudA== IFNwaWtl IHRvdGFscw== IG9yZ2FuaXplcg== IHVwcmlzaW5n c2hpcHM= WVk= IE5vcnRoZWFzdA== bW9uZXk= Z3JhZGF0aW9u IGdvYWxrZWVwZXI= IEhlYXI= IHN0ZWFr IEJ1enpGZWVk IHNvbGVtbg== IFNjYW5k IHBvcHBpbmc= IGFkaGVyZQ== IEFsbGVn Ynl0ZQ== IFdvbHZlcg== IHVuaW4= IHJlY29s aXR1ZA== IG1pbWlj aWJ1cw== IHByZWRpY3Rz IEtlZXBlcg== aWF0aW5n IGRlY2VwdGlvbg== IGxlYXJudA== IGRpYXJ5 IGNvbmRpdGlvbmFs IHJlbGlj IGludm9rZQ== aWVuY2Vk 5Yg= IFBvbnQ= IGNlbGxwaG9uZQ== IHNwZWVkaW5n IHRhY2tsaW5n IG51ZGU= b3BlbmVk IE1hbmFmb3J0 IDE5NTI= IG1ham9ycw== IFNpbGVuY2U= IGxvZ2lzdGljcw== IHdlaWdodGVk IFBzeWNoaWF0 IjpbIg== IHNpY2tuZXNz IGRpdmlkZW5kcw== em9u UmVsZWFzZQ== IEtleXM= IEljaA== IGVueg== IEZlcm5hbmQ= IM6x IG1lYW5pbmdz IHBlbm55 IHN0ZXJu IGxhcg== IFB1Ymxpc2hlZA== IGJhY2tkcm9w S2lt IFN5bnQ= IGRlYnV0ZWQ= d20= IElzbGU= IHJlZ3VsYXRpbmc= b3R0aQ== IFNjaG9sYXJz aWNlc3Rlcg== IENoZWY= IHBvcHM= IExhdW5jaGVy IFZhcmlvdXM= IGNvbW1lbnRpbmc= b3NsYXY= ZW56aWU= IHJpdmFscnk= 4oKs UmVhbGx5 IG9yYw== IGJlYW4= IEp1ZHk= Tm90aWNl IEJpa2U= P10= IHJlbnRlZA== c3Rlbg== IGZvcmVmcm9udA== IEJhbGR3aW4= IHlpZWxkZWQ= dGFpbHM= UHJpbWU= IFNvdXJjZXM= aWNhdG9y U2Vhbg== IG1hcmNoaW5n T3V0cHV0 IEp1bmdsZQ== IHJlc2lkZQ== enpsZQ== IEFuZHJld3M= IHRvcnF1ZQ== QmFzaWM= QWN0dWFsbHk= c3RyYXA= cGVudGVy IGV4YW1z IFlh IDE1OQ== IERlY2lzaW9u IHJhbnNvbQ== ZXRlZW50aA== ZW5zaW5n MjEz IHN1bnNldA== NDA0 IFJhcGlk IEhlaW4= IEFib3JpZ2luYWw= IG9yZ2FuaXNt IFNldmVy IGNsYQ== YWpp U2ltcGxl IEZsYXZvcg== IEV2YWw= cHJ1cw== IGNob3J1cw== REFZ IGRlbm91bmNlZA== IGJpb2dyYXBoeQ== IFR1cm5idWxs UmVjZW50 Tm9ybWFs bGVjdGlvbnM= V29yZA== IGZlcnJ5 IFdhZ25lcg== aG9t VW5pdA== IHN1cGVybWFya2V0 IFNpdGg= IG5vbWluZWVz IGRpY3RhdG9yc2hpcA== aWRkbGVy IGFubm91bmNlcw== IFRoZW0= IE5lcHR1bmU= IGRlaXR5 IFlp IG1vbmFyY2g= QVJS IGludmFkZWQ= IEhvaw== dW50YXJ5 Q2VydGFpbg== ZWdh IGtpZGRpbmc= IFJlZ3VsYXRpb24= IHRyYXk= IHBob3RvZ3JhcGhlcnM= IEFyY2FuZQ== IGRpc2NoYXJnZWQ= IGV2YW5nZWxpY2Fs IGludGVyY2hhbmdl IGZpbG1tYWtlcg== IEVuZGxlc3M= IDI5MA== IFNhbHZhZG9y QVNZ IFNpZ25hbA== IHdyYXRo 4pw= bG90 Jy8= IHByb2plY3RpbGU= IGVtcGxveWluZw== IEludGVyZmFjZQ== MTkx YXRlbGxpdGU= IFJhdGg= cGFja2FnZQ== IGluZGljYXRpb25z SmFzb24= IGFyZ3M= IEdIeg== IHRpbHQ= bmFudHM= d29u 44K1 cmVkZA== cmVzY2VudA== IENhbGVuZGFy IG1vZHVsYXI= IGFzc2lzdGluZw== IHJlZGVlbQ== IEJlYW4= IHdvcnNo IGRlY2VudHJhbGl6ZWQ= KS4uLg== Mzc3 IGFycmF5cw== IGFjY29tcGxpc2htZW50cw== zr8= ZG90 IG11dHVhbGx5 IG9ic3RydWN0 IG1pc3JlcHJlc2VudA== b3Jlc3Q= aW9uaWM= cnVjZQ== JTs= IGtub3dpbmdseQ== cG9ydGluZw== aW5lbnRseQ== QXJp IFNjaHVsdHo= RGE= IENlcmU= IG9ic29sZXRl hYs= Z2l2ZQ== IGJhaXQ= IGVubGFyZw== TmVpbGw= IDE5MzM= IHJlY29uc2lkZXI= IFNlcmdlYW50 IERpYW5l IENvZ24= IEljb24= UG9zaXRpb24= IGZvc3Q= IHN0aXJyaW5n c2V2ZW4= IFNwYWNlWA== dWdnZXRz IG1lZGQ= R2Fs IFNpc3Rlcg== Qm95 IHRyaWdnZXJpbmc= VGFraW5n IHNjcmVhbXM= IGNhdXNhbA== IGF3YWtlbg== QXJt Mjk3 IGRpc3BhdGNoZWQ= IEZBTFNF IG9yZ2FuaXphdGlvbmFs IFRvbmc= IGRpbGVtbWE= ZGVtb24= U3Bs IGhvb2tz dWRpbmc= IHZhbGlkYXRl IHBvdGlvbg== IGNsYXc= IGJ1cmds IHF1aXI= QUNB IEJyZW5uYW4= IGR1cmFiaWxpdHk= IGJvbWJpbmdz IFdpbmRvdw== IGN1bHByaXQ= MzI1 VGhlcmVmb3Jl dW1iZXJlZA== cGVyZm9ybWFuY2U= d2FydHM= IGVuZm9yY2luZw== IEJsb3c= IHJlcHJpbnQ= aWZheA== YWxwaGE= IHNpbmlzdGVy IGJ1cmdlcg== ZmlnaHRpbmc= U2NvcmU= IFN0b25lcw== aWVt NDA1 Y2hlbXk= IHZpbmVnYXI= bm9t IHByZXZhaWxpbmc= IExhdGVzdA== wrY= IGJh IFdyaXRlcg== IDE3Nw== IENvbndheQ== IGNvbGxlY3Rz IHF1YW50aXRhdGl2ZQ== IGhvcnJvcnM= b2dlbnM= IFNsb3Y= IGxheXM= aGF3 IFNsYXNo IG5pZ2h0Y2x1Yg== IERhdmllcw== IGJyaWRl IFNjYXJsZXQ= eW1t IEFwcGxpY2F0aW9ucw== dmVsZW5ndGg= IHJldml2YWw= IHNvZnRseQ== IHpvbw== aXRhaXJl Q3Vy IGVsZWN0cm9t IHBsYW50aW5n T1RP IEVsZW1lbnRz IHN3YWxsb3c= cG9ydGVy IGxhcHRvcHM= IHBlYW51dA== IGxvYmJ5aXN0cw== zrI= UGFuZWw= IEpvYW4= aW1pbA== dG5j IHJlc2lzdGVk IG91dHdl IHJldGFpbmluZw== YXRyaQ== IHBvb3Jlcg== IFN5cmlhbnM= IEhhbW1vbmQ= IHdlbGQ= dWRlcg== dG9waWM= IFRU cmljaWE= IHRoaWV2ZXM= TGlj IEd1c3Q= IFdheXM= YXJldGg= MjQz IGJyb2FkY2FzdGVy c2hpZWxk YXNzaXVt dWJsZQ== IGFpcnN0cmlrZXM= b25zbw== IHBlZGFs IGNvbGxlY3RvcnM= IFZhbmRlcg== IE1lc2E= IGRpY3RhdG9y IGRpcg== ZW50b24= Y2FydA== c2NvcmU= YWRkZXI= Q3J5 IHNzaA== Z2dlcg== IGRydW5rZW4= IEdT IFNlYXQ= IGNvcm5lcmJhY2s= IHNraXBwZWQ= IFJlc2VhcmNoZXJz IEF1ZGk= UmVmZXJlbmNl IGhhdW50ZWQ= w6s= IENsaW5pYw== Y3o= IHBz IFBhbGFkaW4= IFJlY2lwZQ== IHN0aWdtYQ== b3BweQ== IG1vbmtleXM= IEhhd2s= U2Fk Ii8+ IFdvcmtzaG9w IFJldGFpbA== IEF2YXRhcg== NjI1 TmE= IFZD IFNlY3VyZQ== TVk= MTk4OA== b3NzaXA= IHByb3N0YXRl IHVuZGVu IGdhbWVy IENvbnRlbnRz IFdhcmhhbW1lcg== IFNlbnRpbmVs MzEw IHNlZ3JlZ2F0aW9u IEZsZXg= IE1BWQ== IGRyaWxscw== IERydWdz SXNsYW1pYw== IHNwdXI= IGNhZmU= IGltYWdpbmFyeQ== IGd1aWRpbmc= IHN3aW5ncw== IFRoZW1l b2J5 IG51ZA== IGJlZ2dpbmc= IHN0cm9uZ2g= IHJlamVjdGluZw== IHBlZGVzdHJpYW5z IFByb3NwZWN0 UmFyZQ== c2xl IGNvbmNlc3Npb25z IENvbnN0aXR1dGlvbmFs IGJlYW1z IGZpYmVycw== cG9vbg== IGluc3RpbmN0cw== cHJvcGVydHk= IEJJRw== U2FuZGVycw== aW1hdGVz IGNvYXRpbmc= IGNvcnBzZXM= IFRSVUU= Y2hlY2tlZA== IDE2Ng== QXNo IEpT IEZpY3Rpb24= IGNvbW11bmFs IGVuZXJnZXRpYw== b29vb29vb28= IG5vd2FkYXlz SUxE aWJv IFNVVg== UmVu IGR3ZWxsaW5n U2lsdmVy IHRhbGx5 IE1vdmluZw== IGNvd2FyZA== IGdlbmVyYWxz IGhvcm5z IGNpcmN1bGF0ZWQ= IHJvYmJlZA== IFVubGltaXRlZA== IGhhcmFzc2Vk IGluaGliaXQ= IGNvbXBvc2Vy IFNwb3RpZnk= IHNwcmVhZHM= MzY0 IHN1aWNpZGFs IG5vaXNlcw== IFN0dXI= IHNhZ2E= IEthZw== aXNv IHRoZW9yZXRpY2FsbHk= TW9uZXk= IHNpbWlsYXJpdHk= IHNsaWNlZA== dXRpbHM= aW5nZXM= Ii0= IGFudGg= IGltcGVk TW9kdWxl VGhyb3VnaG91dA== IG1lbnVz Y29tbWl0dGVl YW5kaQ== b2Jq aW5hdg== ZmlyZWQ= IEFiZHVsbGFo IHVuZGVhZA== IGZvbnRz SG9sZA== RU5H IHN1c3RhaW5hYmlsaXR5 IGZsaWNr IHJhem9y IEZlc3Q= IENoYXJhY3RlcnM= IHdvcmRpbmc= IHBvcHVsaXN0 IGNyaXRpY2l6aW5n IG11c2U= dmluZQ== IGNhcmRib2FyZA== IGtpbmRseQ== IGZyaW5nZQ== IFRoZWZ0 aWN1bHR1cmFs IGdvdmVybm9ycw== IO+/ve+/ve+/ve+/vQ== IDE2Mw== IHRpbWVvdXQ= IEF1dGg= Q2hpbGRyZW4= QVU= IHJlZGVtcHRpb24= IEFsZ2Vy IDE5MTQ= IHdhdmVk IGFzdHJvbmF1dHM= b2dyYW1z IHN3YW1w IEZpbm5pc2g= IGNhbmRsZQ== IHRvbm5lcw== dXRt IHJheQ== IHNwdW4= IGZlYXJmdWw= YXJ0aWNsZXM= IGNhdXM= b3JpY2FsbHk= IFJlcXVpcmVz IEdvbA== IHBvcGU= IGluYXVndXJhbA== IGdsZQ== QURB IElTSUw= IE9mZmVuc2l2ZQ== IHdhdGNoZG9n IGJhbGNvbg== ZW50aXR5 IEhvbw== IGdhbGxvbg== QUND IGRvdWJsaW5n IGltcGxpY2F0aW9u IFNpZ2h0 IGRvY3Ry LS0tLS0tLQ== IFxc IG1hbHQ= Um9sbA== IOKJpQ== IHJlY2Fw YWRkaW5n dWNlcw== IEJlbmQ= ZmlndXJl IHR1cmtleQ== IHNvY2lldGFs IFRpY2tldHM= IGNvbW1lcmNpYWxseQ== IHNwaWN5 IDIxNg== IFJhbXA= IHN1cGVyaW9yaXR5 w68= IFRyYWNrZXI= Q2FybA== IENveQ== IFBhdHJpb3Q= IGNvbnN1bHRlZA== IGxpc3Rpbmdz IHNsZXc= cmVlbnNob3Q= IEdvbmU= IFsuLi5d MzA5 IGhvdHRlc3Q= 2LE= IHJvY2t5 IERpYXo= IG1hc3NhZ2U= IHBhcmFseQ== IHBvbnk= QXo= IGNhcnRyaWRnZQ== IE5a IHNuYWNr IExhbWFy cGxlbWVudA== IExlc2xpZQ== IG1hdGVy IHNuaXBw MjQ2 IGpvaW50bHk= IEJyaXNiYW5l IGlQb2Q= IHB1bXBpbmc= IGdvYXQ= IFNoYXJvbg== ZWFsaW5n IGNvcm9u IGFub21hbA== cmFoaW0= IENvbm5lY3Rpb24= IHNjdWxwdHVyZQ== IHNjaGVkdWxpbmc= IERhZGR5 YXRoaW5n IGV5ZWJyb3dz IGN1cnZlZA== IHNlbnRpbWVudHM= IGRyYWZ0aW5n RHJvcA== KFs= IG5vbWluYWw= IExlYWRlcnNoaXA= IEdyb3c= IDE3Ng== IGNvbnN0cnVjdGl2ZQ== aXZhdGlvbg== IGNvcnJ1cHRlZA== Z2VyYWxk IENyb3M= IENoZXN0ZXI= IExhcA== 44Gq T1RI REFUQQ== IGFsbW9uZA== cHJvYmFibHk= SW1w IGZlYXN0 IFdhcmNyYWZ0 Rmxvcg== IGNoZWNrcG9pbnQ= IHRyYW5zY3JpcHRpb24= IDIwNA== IHR3ZWFrcw== IHJlbGlldmU= U2NpZW5jZQ== IHBlcmZvcm1lcg== Wm9uZQ== IHR1cm1vaWw= aWdhdGVk aGliaXQ= IENhZmU= dGhlbWVk IGZsdW9y YmVuY2g= IGRlY29t IFVudA== IEJhcnJldHQ= IEZhY3Rz IHRhc3Rpbmc= IFBUU0Q= IFNlYWw= IEp1ZGFpc20= IER5bmFtaWM= IENvcnM= VmU= IE1pbmc= IFRyYW5zZm9ybQ== dm9u IERlZmVuZGVycw== IFRhY3RpY2Fs IFZvbg== IFVuaXZlcnM= IGRpc3RvcnRlZA== IEJyZWF0aA== Pyci IGFnb24= IERlYWRseQ== IGxhbg== IEN5Y2xl b3JuZWQ= IHJlbGlhYmx5 IGdsb3I= IE1vbmtleQ== 44Oh IGFkcmVu IG1pY3Jvd2F2ZQ== IEFsYmFu aXJjcmFmdA== ZGlnaXQ= c21hcnQ= IERyZWFk wq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq8= e3s= IFJvY2hlc3Rlcg== IHNpbXBsaWZpZWQ= IGluZmxpY3RlZA== IHRha2VvdmVy IHlvdXJzZWx2ZXM= YWRpdGlvbmFs IG11c2N1bGFy S1M= IGluZ2Vu VGF4 IEZlYXR1cmU= Mjc3 IGNydWM= IGNyYXRl IHVuaWRlbnRpZmllZA== IGFjY2xhaW1lZA== IE1hbmdh IEZyYW5jZXM= IE5lcGFs IEdlcmFsZA== IEt1d2FpdA== IHNsYWlu IEhlYg== IEdva3U= 44Gu5g== Mjg2 TXJz IENvZHk= IFNhbmN0dWFyeQ== MDE2 IGRpc21hbnQ= IGRhdGFzZXQ= IEhvbmQ= YnVjaw== IFBhdHRlcnNvbg== IHBhbGV0dGU= IEdE aWNvbA== IExvZGdl IHBsYW5ldGFyeQ== YWtpbg== IFJlZ2lzdGVyZWQ= YWJ3ZQ== IFBldGVyc2J1cmc= IGhhaWxlZA== IFBpZWNl U2NoZQ== IERPSg== IGVudW1lcg== MTgx IE9ic2VydmVy IEJvbGQ= Zm91bmRlZA== Y29tbWVyY2U= IGV4cGxvaXRz IEZpbmRpbmc= VVJO IFNuZQ== IEFjaWQ= YXlldHRl IFZhbHVlcw== IGRyYXN0aWM= IGFyY2hpdGVjdHVyYWw= ICIu 15U= dW1wZWQ= IHdyYXBwaW5n IHdpZG93 IFNsYXllcg== bGFjZQ== b25jZQ== R2VybWFueQ== YXZvaWQ= IHRlbXBsZXM= UEFS w7Q= IEx1Y2lmZXI= IEZsaWNrcg== bG92 Zm9yY2Vz IHNjb3V0aW5n IGxvdWRlcg== dGVzeQ== IGJlZm9yZWhhbmQ= xJM= IE5lb24= IFdvbA== IFR5cGljYWxseQ== IFBvbGl0aWNv LSstKw== IGJ1aWxkZXI= IGRlcml2ZQ== S2lsbA== IHBva2Vy IGFtYmlndW91cw== IGxpZnRz IGN5dA== IHJpYnM= b29kbGU= IFNvdW5kcw== aGFpcg== IFN5bmRyb21l dGY= IHByb3BvcnRpb25hbA== dWlk IHBlcnRhaW5pbmc= IEtpbmRsZQ== IE5lZ3Jv IHJlaXRlcmF0ZWQ= IFRvbmlnaHQ= b3Rocw== IENvcm5lbGw= IG93aW5n IDIwOA== ZWxmYXJl b2NhdGluZw== IEJpcmRz U3Vic2NyaWJl IGVzc2F5cw== IGJ1cmRlbnM= IGlsbHVzdHJhdGlvbnM= YXJpb3Vz RVJBTA== IENhbGN1bA== IHhlbg== IExpbmtlZElu IEp1bmc= IHJlZGVzaWdu Q29ubm9y Mjk2 IHJldmVyc2Fs IEFkZWxhaWRl IExM IHNpbmtpbmc= IGd1bQ== VVNI Y2FwdA== IEdyaW1t IGZvb3RzdGVwcw== IENCRA== aXNwZXJz IHByb3Nl V2VkbmVzZGF5 IE1vdmllcw== ZWRpbg== IG92ZXJ0dXJuZWQ= IGNvbnRlbnRpb3Vz VVNC fn5+fn5+fn5+fn5+fn5+fg== IENvcHBlcg== IHBvaW50bGVzcw== TlY= dmFsdWVz b2xwaGlu ZGFpbg== IGRlcG9zaXRlZA== IEdX IHByZWNlZGVk IENsYQ== IEdvbGVt IE5pbQ== IM6y IEVuZ2luZWVycw== bWlkZGxl IGZsYXR0 b3BlcmF0aXZl IGNvdW5jaWxz aW1iYWJ3ZQ== ZWxpbg== IHN0cmVzc2Z1bA== IExE IHJlc2g= bGFrZQ== IHdoZWVsY2hhaXI= IEFsdGVybmF0aXZl IG9wdGltaXpl b3BlcmF0aW9u IHBlZWs= IG9uZXNlbGY= aWdpbA== IHRyYW5zaXRpb25z b3BhdGh5 Ymxhbms= IDE2OQ== MTcx X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== IGxhdW5kZXJpbmc= RW5j IERFQw== IHdvcmtvdXRz IHNwaWtlcw== IGRpbm9zYXVycw== IGRpc2NyaW1pbmF0b3J5 UG9vbA== UmF0aGVy Mzg1 Uk5B dGVzdGVycw== ZXRv IElkZW50aXR5 IHZlaW4= IEJ1cnRvbg== IGFyY2FkZQ== NDIw VWx0aW1hdGVseQ== IFNhZGx5 w7A= cGlsbA== IGN1Ymlj IFNwZWN0cnVt dGhlc2U= c3RhdGVz IHVub2ZmaWNpYWw= aGF3a3M= IEVWRVJZ IHJhaW5ib3c= IGluY2FyY2VyYXRpb24= YW5kaW5n IHN5bGw= IEV2ZXJ0b24= IDE3OQ== IFNlcmJpYQ== IDE4OQ== bWV0ZXI= IE1pY2tleQ== IGFudGlxdQ== IGZhY3R1YWw= bmVjaw== IE5hcmU= bm9ybQ== bXVzdA== IGhpZ2h3YXlz IGdsYW0= IGRpdmlkaW5n IFNxdWFkcm9u IE1hcnRoYQ== IGJpcnRocw== Q292ZXI= Ly8vLy8vLy8vLy8vLy8vLw== IFdvbmc= UGhvdA== IEFMUw== cmlv IE5vbmV0aGVsZXNz IExlbW9u IDIwNg== IEVF IGRlcml2YXRpdmU= IFdXSUk= dm90ZQ== IHRoZXJlaW4= IHNlcGFyYXRpbmc= NDQ2 c3luYw== IFN0cmVldHM= IHJhdHQ= IG11bmljaXBhbGl0eQ== IFNob3J0bHk= IG1vbms= KSwi IHNjcnVi IG9wZXJhdGl2ZXM= TmVpdGhlcg== UGxhY2U= IExpbWl0 RmVtYWxl IEFjdG9y Q2hhcmFjdGVy IGNvbnN0aXR1dGVk MzU3 IHByb3Rlc3RlZA== IFN0cmF3 IEhlaWdodA== aWxkYQ== IFR5cGg= IGZsb29kcw== IGNvc21ldGlj V0FZ cGVydHVyZQ== dXBvbg== dG9ucw== ZXNzaW5n IFBvY2tldA== IHJvb2Z0 IENhdWNhcw== IGFudGlkZXByZXNz IGluY29tcGF0aWJsZQ== RUNE IG9wZXJh IENvbnRlc3Q= IGdlbmVyYXRvcnM= bGltZQ== RGVmZW5zZQ== MTk4Nw== Zm9ydW0= IHNhdmFnZQ== IEh1bmdhcmlhbg== bno= IG1ldGFsbGlj IGV4cGVsbGVk IHJlc2lkZW5jeQ== IGRyZXNzZXM= NjY2 IENsZW1lbnQ= ZmlyZXM= Q2F0ZWdvcnk= IGdlZWs= YWxpcw== IGNlbWV0ZXJ5 ZWR1Y2F0ZWQ= IGNyYXds IFVuYWJsZQ== IFR5c29u YWtpcw== IHBhcmRvbg== IFdyYQ== IHN0cmVuZ3RoZW5lZA== IEZvcnM= MzM1 IEhD IE1vbmQ= IHZpc3VhbHM= IEJlYXRsZXM= ZXR0bGVtZW50 IO8= Z3Jv IGJhc2g= IHBvb3Jlc3Q= IGV4Y2Vs IGFzcGlyYXRpb25z IE11bmljaXA= ZW5zaWJsZQ== IGNlcmVtb25pZXM= IGludGltaWRhdGlvbg== IENPTlRS YmVjaw== IEthcA== YXN1 IHRyYWRlbWFya3M= IFNldw== IENvbXBldGl0aW9u bmV0d29yaw== IEFycmk= IFRldA== Um9hbWluZw== V0M= RGF0 IHNvYg== IHBhaXJpbmc= IG92ZXJkb3Nl U0FZ YWJlcg== IHJldm9sdA== IEZhaA== YWN0aW5n ZXE= ZXN0YXRpb24= RmlnaHQ= IE1hcmtz Mjcz IDE3OA== UmF3 44GL MzQ5 YmxvY2tz IHZlcmdl ZXN0aW5l IFBvZGVzdGE= IGludmFzaXZl IHByb2ZvdW5kbHk= IEFv ZWFjaA== IGxlc3Q= aW50ZXJwcmV0 IHNocmlua2luZw== IGVycm9uZQ== IGNoZWVz bHlz IEl2eQ== IERpcmVjdG9yeQ== IGhpbnRlZA== VklDRQ== IGNvbnRhY3Rpbmc= IEdlbnQ= aGVp IGxhYmVsaW5n IG1lcmN1cnk= IExpdGU= IGV4cGlyZXM= IGRlc3RhYmls cml0aXM= Y3U= IGZlYXRoZXJz IHN0ZWVy IHByb2dyYW1tZWQ= IFZhZGVy R29pbmc= IEVsaW0= IHlv IE1pY2hl IDIwMw== IHNsZWV2ZXM= IGJ1bGx5 IEh1bWFucw== MzY4 IGNvbXByZXNz IEJhbm5lcg== QVJT IGF3aGlsZQ== IGNhbGli IHNwb25zb3JzaGlw IERpZmZpY3VsdHk= IFBhcGVycw== IGlkZW50aWZpZXI= fS4= IHlvZw== IFNoaWE= IGNsZWFudXA= IHZpYmU= aW50cm9kdQ== aW1taW5n QXVzdHJhbGlh IG91dGxpbmVz IFlvdXR1YmU= dHJhaW4= IE1ha2Vz IGRlcG9ydGVk IGNlbnRy IER1Zw== IEJvdWxkZXI= IEJ1ZmZ5 IGluanVuY3Rpb24= IEhhcmxleQ== IEdyb3Vwcw== IER1bWJsZWRvcmU= IENsYXJh ICIt IHNhY3JpZmljZWQ= ZXBo U2hhZG93 aWJsaW5n IGZyZWVsYW5jZQ== IGV2aWRlbnRseQ== cGhhbA== IHJldGFpbnM= TWly IGZpbml0ZQ== ZGFy IENvdXM= IHJlcGFpcmVk IHBlcmlvZGlj IGNoYW1waW9uc2hpcHM= IGFzdGVyb2lk YmxpbmQ= IGV4cHJlc3NseQ== IEFzdHJvcw== IHNjYWxlZA== IGdlb2dyYXBoaWNhbA== IFJhcGlkcw== RW5qb3k= IGVsYXN0aWM= IE1vaGFtZWQ= TWFya2V0 YmVnaW4= IGRpc2NvdmVycw== IHRlbGVjb21tdW5pY2F0aW9ucw== IHNjYW5uZXI= IGVubGFyZ2U= IHNoYXJrcw== IHBzeWNoZWRlbA== IFJvdWdl IHNuYXBzaG90 aXNpbmU= WFA= IHBlc3RpY2lkZXM= IExTRA== IERpc3RyaWJ1dGlvbg== cmVhbGx5 IGRlZ3JhZGF0aW9u IGRpc2d1aXNl IGJpb20= IEVYVA== IGVxdWF0aW9ucw== IGhhemFyZHM= IENvbXBhcmVk KSo= IHZpcnR1ZXM= IGVsZGVycw== IGVuaGFuY2luZw== IEFjcm9zcw== ZXJvcw== YW5nbGluZw== IGNvbWJ1c3Q= dWNjaQ== IGNvbmN1c3Npb24= IGNvbnRyYWNlcHRpb24= IEthbmc= IGV4cHJlc3Nlcw== IGF1eA== IFBpb25l IGV4aGliaXRz RGVidWc= T1RBTA== IEFscmVhZHk= IFdoZWVsZXI= IGV4cGFuZHM= Pzo= IHJlY29uY2lsaWF0aW9u IHBpcmF0ZXM= IHB1cnNl IGRpc2NvdXJhZ2U= IHNwZWN0YWNsZQ== UmFuaw== IHdyYXBz IFRob3VnaHQ= IGltcGVuZGluZw== T3Bw IEFuZ2xv IEVVUg== IHNjcmV3ZWQ= cmV0Y2hlZA== IGVuY291cmFnZW1lbnQ= bW9kZWxz IGNvbmZ1c2U= bW1t IFZpdGFtaW4= 4paR4paR Q3J1 IGtuaWdodHM= IGRpc2NhcmQ= IGJpc2hvcHM= IFdlYXI= IEdhcnJldHQ= a2Fu 44Of IG1hc2N1bGluZQ== Y2FwaXRhbA== IEF1cw== IGZhdGFsbHk= dGhhbmtz IEFV IEd1dA== MTIwMA== IDAwMDAwMDAw IHN1cnJvZw== IEJJT1M= cmFpdHM= IFdhdHRz IHJlc3VycmVjdGlvbg== IEVsZWN0b3JhbA== IFRpcHM= NDAwMA== IG51dHJpZW50 IGRlcGljdGluZw== IHNwcmluaw== IG11ZmY= IExJTQ== IFNhbXBsZQ== cHNj aWJp Z2VuZXJhdGVk IHNwZWNpbWVucw== IGRpc3NhdGlzZg== IHRhaWxvcmVk IGhvbGRpbmdz IE1vbnRobHk= IEVhdA== cG9vbnM= IG5lYw== IENhZ2U= IExvdHVz IExhbnRlcm4= IGZyb250aWVy IHBlbnNpb25z IGpva2Vk IEhhcmR5 PS09LT0tPS0= cmFkZQ== VUlE IHJhaWxz IGVtaXQ= IHNsYXRl IHNtdWc= IHNwaXQ= IENhbGxz IEphY29icw== ZmVhdA== IFVF IHJlc3RydWN0 IHJlZ2VuZXJhdGlvbg== IGVuZXJnaWVz IENvbm5vcg== T0hO IENoZWVzZQ== IGdlcg== IHJlc3VycmVjdA== bWFuYWdlbWVudA== Tlc= IHByZXNlbnRseQ== IEJydWlucw== TWVtYmVy IE1hbmc= aWRhbg== IGJvb3N0aW5n d3lu Ky4= cmVxdWlzaXRl IE5ZUEQ= IE1lZ2Fu IENvbmRpdGlvbnM= IHBpY3M= bmVzaXVt IFJhc2g= IDE3NA== IER1Y2tz IGVtYnJv enU= b25pYW4= cmVsaWdpb3Vz IGNyYXo= IEFDQQ== IFp1Y2tlcg== RU1B IFByb3M= V2VhcG9u IEtub3g= IEFyZHVpbm8= IHN0b3Zl IGhlYXZlbnM= IFB1cmNoYXNl IGhlcmQ= IGZ1bmRyYWlzZXI= RGlnaXRhbA== NTAwMA== IHByb3BvbmVudHM= L+KAiw== IGplbGx5 IFZpc2E= IG1vbmtz IGFkdmFuY2VtZW50 IFdlcg== IDE4Nw== ZXVz ZXJ0aWxpdHk= IGZldGFs IDE5MzY= TG8= IG91dGZpdHM= IHN0YWlyY2FzZQ== Ym9tYg== IGN1c3RvbWl6ZWQ= Y2xhaXI= VHJlZQ== IG1hcHBlZA== IENvbnNpZGVyaW5n IFRvcnJlcw== IG1ldGh5bA== IGFwcHJveGltYXRl IGRvb20= IEhhbnNlbg== IGNyb3Nzb3Zlcg== IHN0YW5kYWxvbmU= 5Lw= IGludml0ZXM= IGdyYXZleWFyZA== IGhw RG9uYWxkVHJ1bXA= IGVzY29ydA== R2Fy IHByZWRlY2Vzc29ycw== IGhheQ== IGVuenltZQ== IFN0cmFpZ2h0 dmlzb3Jz SW5n YW5lb3VzbHk= IEFwcGxpZWQ= IGZlYw== IER1cmFudA== IG91dHNwb2tlbg== b3Ji IHplYWw= IGRpc2dyYWNl Jyku IENoZW5n Mjg5 IFJlbmE= IFN1aWNpZGU= Mjk0 IG91dHJhZ2Vk IE5ld21hbg== IE52aWRpYQ== IEFiZXI= IEJlcnM= IHJlY3JlYXRpb24= V2luZG93 IERQ eGU= IHBlZG9waA== IGZhbGxvdXQ= YW1ib28= IHByZXNlbnRhdGlvbnM= IEFwcHM= IGh0bWw= MzQ1 IFhYWA== IHJ1YmJpbmc= IExlYXRoZXI= IGh1bWlkaXR5 c2V5cw== ZXN0YWJsaXNoZWQ= IFVuaXRz NjQ2 IHJlc3BlY3RhYmxl QXV0bw== IHRocml2aW5n IElubm92YXRpb24= YW5ncw== RXh0cmE= cmVndWxhdGlvbg== Mjk4 cGljaw== RXhhbXBsZXM= IENK QXR0YWNr IGRyYWNvbg== TFQ= IHN0aWNrZXI= cmVycw== IHN1bm55 SXNz cmVndWxhdGVk ZGlt IEFic3RyYWN0 IGh1c2JhbmRz T2ZmaWNl b21pbmF0aW9u aXRhcnM= QU5HRQ== YXNjYWw= IEtyaXM= IEluZmFudHJ5 IG1hbGY= IEF0aGU= IFJhbGx5 YmFsYW5jZWQ= Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u T1VQ IG1vbGVjdWxl bWV0aWNz IFNwbGl0 IEluc3RydWN0aW9ucw== IE5pZ2h0cw== Y2FyZHM= IHR1Zw== IGNvbmU= 5a0= IHR4 IERpc2N1c3Npb24= IGNhdGFzdHJvcGhl cHBl Z2lv IGNvbW11bmlzbQ== IGhhbHRlZA== IEd1YW50 Y2xlYW4= IFNjaGVk IEthbnll IHdhbmRlcg== IFNlcmlvdXNseQ== IDE4OA== ZW5uaWFs Zm9sbG93 cHJvZHVjdGl2ZQ== IEZsb3c= IFNhaWw= IGNyYXc= IHNpbXVsYXRpb25z b3J1 YW5nbGVz IE5vbGFu IG1lbnN0cnU= NDcw IDIwNw== YWph IGNhc3VhbGx5 Ym9hcmRpbmc= IDIyMg== b3Z5 IE51bWJlcnM= dW1hdA== T0U= Mjg3 IENsZW1zb24= IGNlcnRz IHNsaWQ= IFRyaWJl IHRvYXN0 IGZvcnR1bmVz IGZhbHM= IENvbW1pdHRlZXM= IGdw IGZpZXJ5 IE5ldHM= IEFuaW1l UGFja2FnZQ== IENvbXBhcmU= bGF1Z2h0ZXI= aW5mZWN0 IGF0cm9jaXRpZXM= IGp1c3RpY2Vz IGluc3VsdHM= IFZlcm5vbg== IHNoYWtlbg== IHBlcnNvbmE= ZXN0YW1w MzY3 YnJhaW4= IGV4cGVyaW1lbnRpbmc= S2Vu IEVsZWN0cm9uaWNz IDE2MQ== ZG9tYWlu IGdyYXBoaWNhbA== YmlzaG9w IHdob3BwaW5n IEV2YW5nZWw= IGFkdmVydGlzZXJz IFNwZWFy IGJpZHM= IGRlc3Ryb3lz dXR6 IHVuZGVyc2M= IEFERA== IGFudHM= IEN1bQ== aXBwbGVz IEZpbGw= IGdsYW5jZWQ= IGluZGljdGVk IEVmZg== IG1pc2Nvbg== IERlc2t0b3A= IGFiaWRl 44OA IElv IENvdWw= IGNhcHN1bGU= IENocnlz TU9O IHVuZGVz IElSQQ== IGNpdGF0aW9u IGRpY3RhdGU= IE5ldHdvcmtz IENvbmZsaWN0 IFN0dWZm eGE= aXNlYw== IENoZW1pc3RyeQ== IHF1YXJ0ZXJseQ== V2lsbGlhbXM= YW5hbg== T3B0 IEFsZXhhbmRyaWE= b3V0aGVhc3Rlcm4= IFNwcmluZ2ZpZWxk IEJsYWNrcw== IGdlb2dyYXBoeQ== MjQy IHV0bW9zdA== IEV4eG9u YWJvdXRz RVZB IEVuYWJsZQ== IEJhcnI= IGRpc2FncmVlZA== IEN5cHJ1cw== IGRlbWVudGlh IGxhYnM= IHViaXF1aXRvdXM= IExPVkU= IGNvbnNvbGlkYXRlZA== c3I= IGNyZWFteQ== IFRpbWJlcg== UmVnYXJkbGVzcw== IENlcnRpZmljYXRl ICIuLi4= b2dlbm91cw== Q2FwdGFpbg== IGluc3VsdGluZw== IFNvcm9z IEluc3Ry IEJ1bGdhcmlh YmV0dGVy IHN1Y2tpbmc= IERhdmlkc29u YXR6 IGNvbGxhdGVyYWw= Z2lm IHBsYWd1ZWQ= IENhbmNlbA== IEdhcmRuZXI= UkI= IHNpeHRlZW4= UmVtb3Zl dXJpc3RpYw== Y29vaw== Um9k IGNvbXByaXNpbmc= Zmxl KeKAlA== IFZpa2luZw== Z3Jvd3Ro YWdvbmFs IHNyZg== YWZldHk= bW90 TmVhcmx5 c3Rvd24= IEZhY3Rvcg== IGF1dG9tb2JpbGU= IHByb2NlZHVyYWw= bWFzaw== YW1waXJlcw== IGRpc2FwcGVhcnM= amFi MzE1 IDE5NTE= bmVlZGVk IGRhcmluZw== bGVhZGVy IHBvZGl1bQ== IHVuaGVhbHRoeQ== IG11bmQ= IHB5cmFtaWQ= b2NyZQ== IGtpc3NlZA== IGRyZWFtZWQ= IEZhbnRhc3RpYw== IEdseQ== 5Yo= IGdyZWF0bmVzcw== IHNwaWNlcw== IG1ldHJvcG9saXRhbg== IGNvbXB1bHM= aWV0cw== MTAxNg== IFNoYW0= IFB5cg== ZmxpZXM= IE1pZG5pZ2h0 IHN3YWxsb3dlZA== IGdlbnJlcw== IEx1Y2t5 IFJld2FyZHM= IGRpc3BhdGNo IElQQQ== IEFwcGx5 IGF2ZW4= YWxpdGllcw== MzEy dGhpbmdz ICgpLg== IG1hdGVz IFN6 IENPUA== b2xhdGU= T0ZG IHJlY2hhcmdl Y2Fwcw== IFlvcmtlcg== aWNvbmU= IGdhbGF4aWVz aWxlYWtz RGF2ZQ== IFB1eno= IENlbHRpYw== IEFGQw== Mjc2 IFNvbnM= IGFmZmlybWF0aXZl SG9y IHR1dG9yaWFscw== IENJVFk= IFJvc2E= IEV4dGVuc2lvbg== U2VyaWVz IGZhdHM= IHJhYg== bGlz IHVuaWM= IGV2ZQ== IFNwaW4= IGFkdWx0aG9vZA== dHlw IHNlY3Rhcmlhbg== IGNoZWNrb3V0 IEN5Y2w= U2luZ2xl IG1hcnR5cg== IGNoaWxsaW5n ODg4 b3VmbA== IF07 IGNvbmdlc3Rpb24= bWs= IFdoZXJlYXM= IDE5Mzg= dXJyZW5jaWVz ZXJpb24= IGJvYXN0 IFBhdGllbnRz IGNoYXA= IEJE cmVhbERvbmFsZFRydW1w IGV4YW1pbmVz aG92 IHN0YXJ0bGluZw== IEJhYnlsb24= d2lk b21ldw== YnJhbmNl IE9keXNzZXk= d2ln IHRvcmNo IFZveA== IE1veg== IFRyb2xs IEFucw== U2ltaWxhcmx5 IEZ1bA== MDA2 VW5sZXNz IEFsb25l c3RlYWQ= IFB1Ymxpc2hlcg== cmlnaHRz dHU= IERvZXNu IHByb2Zlc3Npb25hbGx5 IGNsbw== aWN6 IHN0ZWFscw== IOE= MTk4Ng== IHN0dXJkeQ== IEpvaGFubg== IG1lZGFscw== IGZpbGluZ3M= IEZyYXNlcg== ZG9uZQ== IG11bHRpbmF0aW9uYWw= IGZlZGVy IHdvcnRobGVzcw== IHBlc3Q= WWVzdGVyZGF5 YW5raW5k IGdheXM= IGJvcm5l IFBPUw== UGljdHVyZQ== IHBlcmNlbnRhZ2Vz MjUx cmFtZQ== IHBvdGlvbnM= QU1E IExlYmFuZXNl IHJhbmc= IExTVQ== b25ncw== IHBlbmluc3VsYQ== IENsYXVzZQ== QUxL b2hh IE1hY0Jvb2s= IHVuYW5pbW91cw== IGxlbmRlcnM= IGhhbmdz IGZyYW5jaGlzZXM= b3JlcnM= IFVwZGF0ZXM= IGlzb2xhdGU= YW5kcm8= U29vbg== IGRpc3J1cHRpdmU= IFN1cnZl IHN0aXRjaGVz IFNjb3Jw IERvbWluaW9u IHN1cHBseWluZw== QXJn IHR1cnJldA== IEx1aw== IGJyYWNrZXRz Kik= IFJldm9sdXRpb25hcnk= IEhvbmVzdA== IG5vdGljaW5n IFNoYW5ub24= IGFmZm9yZGVk IHRoYQ== IEphbmV0 IS0t IE5hcmVuZHJh IFBsb3Q= SG9s c2V2ZXI= ZWVudGg= IG9ic3RydWN0aW9u IDEwMjQ= c3RhZmY= amFz b3JnZXQ= c2NlbmVz bGF1Z2hz IEZhcmdv Y3JpbWU= IG9yY2hlc3Ry IGRlbGV0 aWxpYXJ5 cmlldmVk IG1pbGl0YXI= IEdyZWVuZQ== 4peP 44Gm IEd1YXJkcw== IHVubGVhc2hlZA== IFdlYmVy IGFkanVzdGFibGU= IGNhbGliZXI= IG1vdGl2YXRpb25z IMOg bUFo IExhbmth aGFuZGxl IHBlbnQ= IFJhdg== IEFuZ3VsYXI= IEthdQ== dW1iaW5n IHBoaWxhbnRocm9w IGRlaHlk IHRveGljaXR5 ZWVy IFlPUks= d2l0eg== 5bw= IElF Y29tbXVuaXR5 IEFI IHJldGFsaQ== IG1hc3NpdmVseQ== IERhbmllbHM= IERFTA== IGNhcmNpbg== VXJs IHJvdXRpbmc= IE5QQ3M= IFJBRg== cnljZQ== IHdhaXZlZA== IEd1YXRlbQ== RXZlcnlib2R5 IGNvdmVuYW50 IDE3Mw== IHJlbGF4aW5n IHF1YXJ0 YWxtb3N0 IGd1YXJkZWQ= IFNvbGRpZXJz IFBMQVk= IG91dGdvaW5n TEFORA== IHJld3JpdGU= IE1PVg== IEltcGVy IFNvbHV0aW9u IHBoZW5vbWVuYWw= IGxvbmdldml0eQ== IGltcGF0 IE5pc3Nhbg== aXJpZQ== IG9kb3I= IFphcg== b2tz IG1pbGl0aWFz IFNQRUM= IHRvbGVyYXRlZA== YXJzZXI= IEJyYWRmb3Jk Kyw= IHN1cnJlYWw= c2Y= Q2FuYWRpYW4= IHJlc2VtYmxhbmNl IGNhcmJvaHlkcmF0ZQ== VklFVw== IGFjY2Vzc29yeQ== bWVhbA== bGFyZ2VzdA== aWVnZWw= U29tZW9uZQ== IHRvdWdoZXN0 b3Nv IGZ1bm5lbA== IGNvbmRlbW5hdGlvbg== bHVlbnQ= IHdpcmVk IFN1bnNldA== SmVzdXM= IFBTVA== IFBhZ2Vz IFR5Y29vbg== IFBG IHNlbGVjdGlvbnM= IOCk cGFydGlzYW4= IGhpZ2hz IFJ1bmU= IGNyYWZ0cw== bGVhZA== IFBhcmVudHM= IHJlY2xhaW0= ZWtlcg== IEFsbGllZA== YWVwZXI= IGxvb21pbmc= IGJlbmVmaWNpYXJpZXM= IEh1bGw= U3R1ZGVudHM= SmV3aXNo ZGo= IHBhY3Q= dGVtcGxhdGU= IE9mZmljaWFscw== IEJheWxvcg== IGhlbXA= IHlvdXRocw== IExldmVscw== IFhpYW8= IENoZXM= IGVuZGVhdm9y IFJlbW92ZWQ= IGhpcHBvY2FtcA== SGVsbA== 44KK ODA1 IGRpbm9zYXVy IFdyYXRo IEluZG9uZXNpYW4= IGNhbGN1bGF0b3I= IERpY3Rpb25hcnk= IDQyMA== IE1BRw== KF8= ISw= dGFyaWFucw== IHJlc3RyaWN0aW5n cmFjdXNl IHdlZWtkYXk= T1VOVA== IHNocnVnZ2Vk bGVncm91bmQ= IGJhbGQ= IERvY3RvcnM= IHRvdXRlZA== IE1heHdlbGw= IDIxNA== IGRpcGxvbWF0 IHJlcHJlc3Npb24= IGNvbnN0aXR1ZW5jeQ== dmljZQ== cmFua2Vk IE5hcG9sZW9u Z2FuZw== IEZvcmV2ZXI= dHVu IGJ1bGI= IFBEVA== IENpc2Nv VkVO IHJlc3VtZWQ= U3RldmVu IE1hbml0b2Jh IGZhYnVsb3Vz IEFnZW50cw== MTk4NA== IGFtdXNpbmc= IE15c3Rlcmllcw== IG9ydGhvZG94 Zmxvb3I= IHF1ZXN0aW9ubmFpcmU= IHBlbmV0cmF0ZQ== IGZpbG1tYWtlcnM= IFVuYw== IHN0YW1wZWQ= IHRoaXJ0ZWVu IG91dGZpZWxk IGZvcndhcmRlZA== IGFwcHJh IGFpZGVk dHJ5 IHVuZm9jdXNlZA== IExpeg== IFdlbmR5 IFNjZW5l Q2hhcmc= IHJlamVjdHM= IGxlZnRpc3Q= IFByb3ZpZGVuY2U= IEJyaWQ= cmVnbg== IHByb3BoZWN5 IExJVkU= NDk5 IGZvcmdl IEZNTA== IGludHJpbnNpYw== IEZyb2c= IHdvbnQ= IEhvbHQ= IGZhbWVk Q0xVUw== YWVwZXJuaWNr IEhhdGU= IENheQ== IHJlZ2lzdGVyaW5n b3J0YWxpdHk= cm9weQ== b2NhbHlwdGlj YWFu bmF2 IGZhc2Npc3Q= SUZJRUQ= IGltcGxpY2F0ZWQ= IFJlc29ydA== IENoYW5kbGVy IEJyaWNr UGlu eXNj VXNhZ2U= IEhlbG0= dXNyYQ== 4piF4piF IEFiYmFz IHVuYW5pbW91c2x5 IGtlZXBlcg== IGFkZGljdGVk Pz8/ IGhlbG1ldHM= IGFudGlveGlk YXBzZWQ= ODA4 Z2llbmU= IHdhaXRz IG1pbmlvbg== cmF2ZWQ= IFBvcnNjaGU= IGRyZWFtaW5n IDE3MQ== IENhaW4= IHVuZm9y YXNzbw== IENvbmZpZ3VyYXRpb24= a3Vu aGFyZHQ= IG5lc3RlZA== IExEUw== TEVT IHR5aW5n ZW5vcw== IGN1ZQ== IE1hcnF1 c2tpcnRz IGNsaWNrZWQ= IGV4cGlyYXRpb24= IEFjY29yZGluZ2x5 IFdD IGJsZXNzaW5ncw== IGFkZGljdGl2ZQ== IE5hcnI= eXg= IEphZ3VhcnM= IHJlbnRz IFNpYmVy IHRpcHBlZA== b3Vzc2U= IEZpdHpnZXJhbGQ= IGhpZXJhcmNo b3V0aW5l IHdhdmVsZW5ndGg= Pi4= Y2hpZA== IFByb2Nlc3Npbmc= Lys= cmFua2luZw== RWFzeQ== IENvbnN0cnVjdA== IHRldA== aW5zdXJlZA== SFVE IHF1b3Rpbmc= IGNvbW11bmljYXRlZA== aW54 IGlubWF0ZQ== IGVyZWN0ZWQ= IEFic29sdXRlbHk= IFN1cmVseQ== IHVuaW0= IFRocm9uZQ== aGVpZA== IGNsYXdz IHN1cGVyc3Rhcg== IExlbm4= IFdoaXM= VWs= YWJvbA== IHNrZXQ= IE5pZXQ= IHBlcmtz IGFmZmluaXR5 IG9wZW5pbmdz cGhhc2lz IGRpc2NyaW1pbmF0ZQ== VGlw dmM= IGdyaW5kaW5n IEplbm55 IGFzdGhtYQ== aG9sZXM= IEhvbWVy IHJlZ2lzdGVycw== IEdsYWQ= IGNyZWF0aW9ucw== IGxpdGhpdW0= IGFwcGxhdXNl dW50aWw= SnVzdGljZQ== IFR1cmtz IHNjYW5kYWxz IGJha2U= dGFuaw== TWVjaA== IE1lYW5z IE1haWQ= UmVwdWJsaWNhbnM= aXNhbA== d2luZG93cw== IFNhbnRvcw== IHZlZ2V0YXRpb24= MzM4 dHJp IGZsdXg= aW5zZXJ0 IGNsYXJpZmllZA== IG1vcnRn IENoaW0= IFRvcnQ= IGRpc2NsYWlt bWV0YWw= IEFzaWRl IGluZHVjdGlvbg== IGluZmw= IGF0aGVpc3Rz YW1waA== IGV0aGVy IFZpdGFs IEJ1aWx0 TWluZA== IHdlYXBvbnJ5 U0VU IDE4Ng== YWRtaW4= Z2Ft Y29udHJhY3Q= YWZh IGRlcml2YXRpdmVz IHNuYWNrcw== IGNodXJu RWNvbm9t IGNhcHBlZA== IFVuZGVyc3RhbmRpbmc= IEhlcnM= IEl6 IGR1Y3Q= SUVOVA== YXVnaHR5 IOKclA== IE5Q IHNhaWxpbmc= SW5pdGlhbGl6ZWQ= IHRlZA== IHJlYWN0b3Jz IExvbWI= IGNob2tl IFdvcm0= IGFkbWlyYXRpb24= IHN3dW5n ZW5zaWJseQ== IHJhc2g= IEdvYWxz IEltcG9ydGFudA== U2hvdA== IFJhcw== IHRyYWluZXJz IEJ1bg== V29ya2luZw== IGhhcm1lZA== IFBhbmRvcmE= IExURQ== IG11c2hyb29t IENIQVI= IEZlZQ== IE1veQ== Qm9ybg== b2xpYmVyYWw= IE1hcnRpYWw= IGdlbnRsZW1lbg== IGxpbmdlcmluZw== T2ZmaWNpYWw= IGdyYWZmaXRp IE5hbWVz RGVy IHF1aW50 aXN0cmF0ZQ== YXplZXJh IE5PVElDRQ== IEZsb3JlbmNl IHBheWFibGU= IGRlcGljdHM= IFNwZWNpZXM= SGVhcnQ= 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IGVuY2xvc2Vk SW5jcmVhc2Vz RGFpbHk= IExpcw== IGVuYWN0bWVudA== IEJhY29u IFN0ZWVsZQ== ZGVtYW5k IDE4Mw== IG1vdXRocw== IHN0cmFuZGVk IGVuaGFuY2VtZW50 MDEx IFdoYXRz IGhlYWxlZA== ZW55 IFJhYg== IDM0MA== IExhYnlyaW50aA== cm9hY2g= IFlvc2g= IENsaXBwZXJz IGNvbmNlcnRz SW50ZXJuZXQ= MzU1 IHN0aWNrZXJz IHRlcm1lZA== IEF4ZQ== IGdyYW5kcGFyZW50cw== RnJhbmNl IENsaW0= IFVo dWxpYw== IHRocmlsbA== Y2VudHJpYw== IE92ZXJ2aWV3 IENvbmR1Y3Q= IHN1YnN0YW50aXZl IDE4Mg== bXVy IHN0cmF5 IENvZmY= IHJlcGV0aXRpdmU= IEZvcmdvdHRlbg== IHF1YWxpZmljYXRpb24= ZXdpdG5lc3M= IFppbWJhYndl IHNpbXVsYXRlZA== IEpE MjUz IFdhcmU= IHVuc2M= VGltZXM= IHN1bW1vbnM= IGRpc2Nvbm5lY3RlZA== IDE4NA== Y2l1cw== IEd1amFy b2RrYQ== IGVyYXNl IFRvYmFjY28= ZWxlY3RlZA== IHVuY29udA== IFNoZXBhcmQ= IExhbXA= IGFsZXJ0ZWQ= IG9wZXJhdGl2ZQ== YXJuYQ== dWludA== IG5lZ2xpZ2VuY2U= YWNlbWVudHM= IHN1cHJh IHByZXZhaWw= IFNoYXJr IGJlbHRz 44Gr IHRpZ2h0ZXI= RW5naW5lZXJz IGluYWN0aXZl IGV4cG9uZW50 IFdpbGxpZQ== YXBsZXM= IGhlaXI= IEhpdHM= aWFubg== IFNheXM= IGN1cnJlbnRz IEJlbmdhbA== IGFyaXN0 QnVmZmVy IGJyZWV6ZQ== IFdlc2xleQ== Q29sYQ== IHByb25vdW4= IGRlZWQ= IEtsaW5n IG9mdA== IGluZmxpY3Q= IHB1bmlzaGluZw== IG5t aWt1 T0RVQ1Q= MDE0 IHN1YnNpZHk= IERFQQ== IEhlcmJlcnQ= IEphbA== QmFuaw== IGRlZmVycmVk IHNoaXBtZW50 Qm90dA== IGFsbGU= YmVhcmluZw== SFRNTA== T2ZmbGluZQ== IDIxMw== IHNjcm9sbGluZw== IHNjYW5uZWQ= IExpYnlhbg== IFRPUA== Y2hyb20= ZHQ= Y29sdW1u UHN5TmV0TWVzc2FnZQ== WmVybw== IHRvcnNv MDUw 4pWQ IGltcGVyc29u IFNjaHdhcnR6 dWRpYw== IHBpc3NlZA== IFNhcHA= MjU3 IElTUHM= b2ds IHN1cGVydmlzZWQ= IGFkb2xlc2NlbnQ= IGF0dGFpbmVk IERlbGl2ZXJ5 IEJ1bm55 IDE5Mzc= IG1pbmlhdHVyZQ== IG9z IDM3MA== NjA4 IE1vdXJpbmhv IGlubmF0ZQ== IHRlbXBv IE5N IEZhbGxlbg== MDA5 IHByb3ZvY2F0aXZl U3RyZWFtZXI= IEJlbmVkaWN0 IEJvbHNoZQ== IHR1cnRsZQ== IFBDQg== IEVxdWFs RGlyZWN0b3I= IFJlbmQ= IGZsdWlkcw== QXV0aG9yaXRpZXM= IGNvdXNpbnM= cmVxdWVuY3k= IE5laWdoYm9y c2V0cw== c2hhcmVk Q2hhcmxlcw== cGFzc3dvcmQ= IGdlYXJz IDIxMQ== IEhhcmR3YXJl cmlrYQ== IHVwc3RyZWFt SG9t IGRpc3Byb3BvcnRpb25hdGVseQ== aXZpdGllcw== IHVuZGVmaW5lZA== IGVsZWN0cm9ucw== IGNvbW1lbW9y RXZlbnR1YWxseQ== ID48 IGlycmVzcG9uc2libGU= MjE4 IFJlbGVhc2Vk IE9WRVI= IElHTg== IEJyZWFk c3RlbGxhcg== IFNhZ2U= dHRlZA== ZGFtYWdl ZWRpdGlvbg== IFByZWM= IGxpbWU= IGNvbmZpbmVtZW50 IGNhbG9yaWU= d2VhcG9u IGRpZmZlcmluZw== IFNpbmE= bXlz YW1k IGludHJpY2F0ZQ== a2s= IFBBVA== w6Nv c3RvbmVz bGlua3M= IHJhbmNo U2VtaXRpYw== IGRpZmZlcmVudGlhdGU= IFNpbmdlcg== b2NjdXBpZWQ= IGZvcnRyZXNz Y21k IGludGVyY2VwdGlvbg== IEFua2FyYQ== IHJlcHQ= IFNvbGl0YWlyZQ== IHJlbWFrZQ== cHJlZA== IGRhcmVk YXV0aW9ucw== IEJBQ0s= UnVubmluZw== IGRlYnVnZ2luZw== IGdyYXBocw== Mzk5 IE5pZ2Vs IGJ1bg== IHBpbGxvdw== IHByb2dyZXNzZWQ= ZmFzaGlvbmVk IG9iZWRpZW5jZQ== RVJO IHJlaGVhcnM= Q2VsbA== dGw= U2hlcg== IGhlcmFsZA== IFBheW1lbnQ= IENvcnk= IERlcHQ= IHJlcGVudA== IFdlYWs= dWNrbGFuZA== IHBsZWFzaW5n IHNob3J0YWdlcw== IGp1cm9ycw== IEthYg== cXFh QW50aQ== IHdvdw== IFJDTVA= IHRzdW4= IFNpYw== IGNvbXByaXNlcw== IHNwaWVz IHByZWNpbmN0 bnU= IHVyZ2Vz IHRpbWVk IHN0cmlwZXM= IEJvb3Rz IHllbg== QWR2YW5jZWQ= IGRpc2NyZXRl IEFyY2hhbmdlbA== ZW1wbG95bWVudA== RGlmZg== IG1vbnVtZW50cw== IDIwOQ== d29ya2Vy IDE5Ng== IEln dXR0ZXJzdG9jaw== VFBT SmFj IGhvbWVsZXNzbmVzcw== IGNvbW1lbnRhdG9y IHJhY2lhbGx5 ZmluZw== c2VlZA== RWxl ZWxsYXRpb24= IGV0aGFub2w= IHBhcmlzaA== IERvbmc= IEF3YWtlbmluZw== IGRldmlhdGlvbg== IEJlYXJpbmc= IFRzdWs= IHJlY2Vzcw== IGx5bXBo IENhbm5hYmlz 5Zw= IE5FV1M= IGRyYQ== IFN0ZWZhbg== IFdyb25n IFNBTQ== IGxvb3NlbHk= IGludGVycHJldGVy IFBsYWlu R292ZXJubWVudA== IGJpZ290cnk= IGdyZW5hZGVz YXZleg== cGljdHVyZWQ= IG1hbmRhdGVk IE1vbms= IFBlZHJv IGxhdmE= Mjc0 IGN5bmljYWw= IFNjcm9sbHM= bG9ja3M= TXA= IGNvbmdyZWdhdGlvbg== b3JuaW5ncw== cGhpbA== IEliaWQ= IGZlcnY= IGRpc2FwcGVhcmluZw== IGFycm9nYW50 c3lu IE1hdmVy IFN1aXQ= MjQx IGFiYnJl YWNrZXJz UGE= IFllbA== V2hlbmV2ZXI= IDIzNQ== IFZpbmU= IEFuYXQ= IGV4dGluY3Q= TEVU IGV4ZWN1dGFibGU= VkVSUw== b3hpZGU= RE5B IFByZWw= IHJlc2VudG1lbnQ= IGNvbXByaXNl IEF2aXY= IGludGVyY2VwdGlvbnM= IHByb2xpZmlj SU5B IEVyaW4= dGhvdWdodA== MjE5 IFBzeWNoaWF0cnk= dW5reQ== Y2hlbWlzdA== SG8= IE1jQ295 IGJyaWNrcw== TG9z cmlseQ== IFVTU1I= IHJ1ZA== IGxhdWQ= IFdpc2U= IEVtZXJhbGQ= IHJldml2ZWQ= IGRhbW5lZA== IFJlcGFpcg== aWRlbQ== Y3RpY2E= IHBhdHJpYXJjaA== IE51cnM= bWVn IGNoZWFwZXN0 cmVlbWVudHM= ZW1wdHk= IENlbGVicg== IGRlcHJpdmF0aW9u Y2hhbnRlZA== IFRodW1ibmFpbHM= RW5lcmd5 IEV0aGFu IFFpbmc= IG9wcG9zZXM= V0lORA== dmlr IE1hdQ== IFNVQg== NjY3 R1JF IFZvbHVudGU= bnRvbg== Q29vaw== 5ZA= ZXNxdWU= IHBsdW1tZXQ= IHN1aW5n IHByb25vdW5jZQ== IHJlc2lzdGluZw== IEZpc2hpbmc= IFRyaWFscw== IHllbGw= IDMxMA== IGluZHVjdA== IHBlcnNvbmFsaXplZA== b2Z0ZW4= UmVi RU1CRVI= IHZpZXdwb2ludA== IGV4aXN0ZW50aWFs KCkp cmVtb3Zl TUVOVFM= bGFzc2Vz IGV2YXBvcg== IGFpc2xl bWV0YQ== IHJlZmxlY3RpdmU= IGVudGl0bGVtZW50 IGRldmlzZWQ= bXVzaWM= YXNjYWRl IHdpbmRpbmc= b2Zmc2V0 IGFjY2Vzc2liaWxpdHk= a2VyZWQ= QmV0dGVy IEpvaG5zdG9u dGhpbmtpbmc= U25vdw== IENyb2F0aWE= IEF0b21pYw== Mjcx MzQ4 IHRleHRib29r IFNpeHRo INin2YQ= IHNsaWRlcg== IEJ1cmdlcg== Ym9s U3luYw== IGdyYW5kY2hpbGRyZW4= IGNlcnY= Kyk= IGV0ZXJuaXR5 IHR3ZWV0aW5n IHNwZWN1bGF0aXZl IHBpdm90YWw= IFdQ IFRFUg== eW5hbWlj IHVwbA== IENhdHM= cGVyaGFwcw== IGNsYXNzbWF0ZXM= IGJsYXRhbnQ= Jy0= IGxha2g= YW50aW5l IEJvcmc= aW9t Lyg= IEF0aGxldGlj IHNhcg== T1RB IEhvZmZtYW4= TmV2ZXJ0aGVsZXNz IGFkb3JhYmxl IHNwYXduZWQ= QXNzb2NpYXRlZA== IERvbWVzdGlj IGltcGxhbnQ= IEx1eGVt IEtlbnM= IHB1bXBz IFNBVA== QXR0cmlidXRlcw== NTA5 YXZvdXI= IGNlbnRyYWxpemVk IFRO IGZyZXNobHk= IEFjaGlldmU= IG91dHNpZGVycw== aGVydHk= IFJlZQ== IFRvd2Vycw== IERhcnQ= YWthYmxl IG1w IEhlYXZlbmx5 IHJpcGU= IENhcm9saW5l cnlhbg== IGNsYXNzaWNz IHJldGlyaW5n IDIyOA== IGFo IGRlYWxpbmdz IHB1bmNoaW5n IENoYXBtYW4= T3B0aW9ucw== bWF4d2VsbA== dm9sdW1l IHN0YWw= IGV4cG9ydGVk IFF1aXRl IG51bWVyaWNhbA== QnVybg== RmFjdA== IEtleXN0b25l IHRyZW5kaW5n IGFsdGVyaW5n IEFmcmljYW5z NDc4 IE1O IEtub2Nr IHRlbXB0YXRpb24= IHByZXN0aWdl T3ZlcnZpZXc= IFRyYWRpdGlvbmFs IEJhaHJhaW4= UHJpdmF0ZQ== IEhPVQ== IGJhcnI= IFRhdA== Q3ViZQ== VVNE IEdyYW5kZQ== IEdhdA== IEZsbw== IHJlc2lkZXM= IGluZGVj dm9sZW50 IHBlcnBldHVhbA== dWJlcw== IHdvcmxkdmlldw== IFF1YW50dW0= IGZpbHRlcmVk IGVuc3U= b3JnZXRvd24= RVJTT04= IE1pbGQ= Mzc5 T1RU w6U= IHZpdGFtaW5z IHJpYmJvbg== IHNpbmNlcmVseQ== IEhpbg== IGVpZ2h0ZWVu IGNvbnRyYWRpY3Rvcnk= IGdsYXJpbmc= IGV4cGVjdGFuY3k= IGNvbnNwaXI= IG1vbnN0cm91cw== IDM4MA== cmVjaQ== IGhhbmRpYw== IHB1bXBlZA== IGluZGljYXRpdmU= IHJhcHA= IGF2YWls IExFR08= IE1hcmlqdWFuYQ== MTk4NQ== ZXJ0b24= IHR3ZW50aWV0aA== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IFN3YW1w IHZhbHVhdGlvbg== IGFmZmlsaWF0ZXM= YWRqdXN0ZWQ= IEZhY2lsaXR5 MjYy IGVuenltZXM= aXR1ZGluYWw= IGltcHJpbnQ= U2l0ZQ== IGluc3RhbGxlcg== IFRSQQ== bW9sb2d5 bGluZWFy IENvbGxlY3RpdmU= aWdhdGluZw== IFRva2Vu IHNwZWN1bGF0ZWQ= S04= IENseQ== b3JpdHk= IGRlZmVy IGluc3BlY3RvcnM= YXBwcm92ZWQ= Uk0= IFN1bnM= IGluZm9ybWluZw== IFN5cmFjdXNl aWJsaQ== NzY1 IGdsb3Zl IGF1dGhvcml6ZQ== 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm IENydWlzZQ== IGNvbnRyYWN0aW5n c2hlbGw= SUZF IEpld2Vs cHJhY3Q= IFBob3Rvc2hvcA== IEtub3dpbmc= aGFybQ== IGF0dHJhY3Rpb25z YWRhbg== ZXR1cw== MDE4 d2FnZW4= QWx0 IG11bHRpcGx5 IGVxdWlsaWJyaXVt Ons= IEZpZ2h0ZXJz IEVkZ2Fy IGZvdXJ0ZWVu R292ZXJu IG1pc3VzZQ== IGFidXNpbmc= IGFuY2VzdHJ5 cmFtZXI= NjQ0 IHdvcm1z IHRoaWNrZXI= IENvbWJpbmU= IHBlYXNhbnRz IHZpbmQ= IGNvbnF1ZXN0 IG1vY2tlZA== IGNpbm5hbW9u IENhbGQ= IEdhbGx1cA== IGF2b2lkYW5jZQ== IGluY2FybmF0aW9u IFN0cmF0 IHRhc3RlZA== ZW50YQ== IE5lYWw= cGFyZWQ= IHRlcm1pbm9sb2d5 amVjdGlvbg== U2NpZW50aXN0cw== IElOUw== IERlZQ== IGRpcmVjdG9yaWVz Um9hZA== IFNoYXA= YnJpZ2h0 IERpcmVjdG9ycw== IENvbHVtbg== IGJvYg== IHByZWZlcmFibHk= IGdsaXRjaA== ZnVydA== IGVn aWRpcw== Q0JD IHN1cnJlbmRlcmVk IHRlc3RhbWVudA== MzM2 dWdnZXN0 IE5pbA== YW5vdGhlcg== IHBhdGhldGlj IERvbm5h IDIxOA== IEF2ZXJ5 IHdoaXNrZXk= IGZpeHR1cmU= IENvbnF1ZXN0 IGJldHM= T2Nj IExlaWNlc3Rlcg== XS4i ICkpOw== IGZsYXNoZXM= NDU2 IG1hc2tlZA== Z2VicmE= IGNvbXB1dGVk Y2hlbA== YXVkZXI= IGRlZmVhdHM= IExpYmVyYXRpb24= IE9zYW1h IFZpdmU= Q2hhbmdlcw== Q2hhbm5lbA== IHRhcmlmZnM= IG1hZ2U= IFNheA== IGluYWR2ZXJ0ZW50bHk= IENSRQ== IFJlYXBlcg== aW5reQ== Z3JhZGluZw== IHN0ZXJlb3R5cA== IGN1cmw= IEZBTlQ= IGZyYW1ld29ya3M= TW9t IEFuY2g= IGZsYXZvdXI= Y2FyYm9u IHBlcm1pdHRpbmc= bGV0Y2hlcg== IE1vemlsbGE= IFBhcmtpbmc= IENoYW1w U2Nyb2xs IG11cmRlcmVy IHJlc3RlZA== IG93ZXM= IFBvc3M= QURE SUZG cmVzb2x1dGlvbg== IE1pbmluZw== IGNvbXBhcmF0aXZl RGlt IG5laWdoYm91cmluZw== IEFTVA== IFRveGlj IGJpYXNlcw== IGd1bmZpcmU= dXJvdXM= IE1vbWVudA== MTk4Mw== IHBlcnZhc2l2ZQ== dHRw IE5vcm1hbGx5 cmly U2FyYWg= IEFsYmFueQ== IHVuc2V0dA== IFNNUw== aXBlcnM= bGF5ZXI= IFdoaXRlcw== dXBsZQ== IHR1cmJv IExlZWRz IHRoYXRz IE1pbmVy TUVS IFJlaWdu IHBlcm1l IEJsaXR6 IDE5MzQ= IGludGltaWRhdGluZw== dHViZQ== IGVjY2VudHJpYw== YWJvbGlj Ym94ZXM= IEFzc29jaWF0ZXM= dm90ZXM= IHNpbXVsYXRl dW1ibw== YXN0ZXJ5 IHNoaXBtZW50cw== RkZGRg== YW50aA== IHNlYXNvbmVk IGV4cGVyaW1lbnRhdGlvbg== 4pag bGF3cw== TWVldA== aWRkbGVz YW50aWNz UmF0aW5n SVNJUw== aGlmdA== IGZyb250cw== YnVm MDE3 IHVuYXR0 IERpbA== bGVhc2Vz IEdhcmRlbnM= Nzc3 dG91Y2g= dmVsbA== NDU4 ID09PT09 c2F2aW5n IGVyb3Npb24= IFF1aW4= IGVhcm5z IGFjY29tcGxpc2htZW50 IFdlaQ== IDxb X19fX18= IGlycmln IFRlZGR5 IGNvbnF1ZXJlZA== IEFybW9yZWQ= IGFzc2VydHM= IG1hbmlwdWxhdGluZw== csOp IHRyYW5zY3JpcHRz R2FsbGVyeQ== IHBsb3R0aW5n TmVpbA== IGJldHJheWFs bG9hZGVy IFN1bA== IGRpc3BsYWNlbWVudA== IHJveWFsdHk= IFdJ aGVpdA== IERldmljZXM= YWxsZWw= IG11bmljaXBhbGl0aWVz IGNhbmFs U3RhcnM= IFVBRQ== ICLigKY= IENV YWJvdmU= IHJlc29uYW5jZQ== IGd1aUFjdGl2ZVVu YWRkZWQ= IEJyYXZlcw== IElibg== IGhlcmVieQ== IEJSRQ== IHNoYXJlaG9sZGVy IEhpcg== IEpp IHN0cmFuZ2VseQ== IGFkbWlyZWQ= IHBsaWdodA== IGJhY2hlbG9y IFBvbGU= Y2lwbGluYXJ5 VG9ueQ== IEFybWVuaWFu IHVubWFu IFppb25pc3Q= U3RhZ2U= aXNjb3Zlcg== IGF1dG9tb3RpdmU= IHNpZGVsaW5lcw== IHNsaWNr IFJlbmFpc3NhbmNl IEZVTg== SW1hZ2Vz IEhhag== IHBpbmc= IHNob3J0Y3V0 IEJsdmQ= IExvb2tz IGJ1cnN0cw== IGNsYW1w IG1pc2g= IHNvcnRpbmc= IHBhdHJpb3Q= IGNvcnJlY3RuZXNz IFNjYW5kaW5hdg== IENhdmFsaWVycw== cHl0aG9u YXphcg== IDM3NQ== IEphdW5l NDA5 IGRldHJpbWVudGFs IHN0YWJiaW5n IHBvaXNvbmVk IGZvdW50YWlu b2NlbnQ= b3JzdA== IE1hcmk= IHJhaW5z IE92ZXJz IEluc3RpdHV0aW9u dWRnZXQ= QU1Z dGFsZQ== IEtS IFByaWNlcw== IGhlYWRhY2hlcw== IGxhbmRzbA== IEF1cmE= Qm9udXM= IFpoYW8= IEhpcA== IGhvcHM= IEt1cmRpc3Rhbg== IGV4cGxvaXRpbmc= cnlu IGh5cG9jcmlzeQ== b3BlbmluZw== IGd1bnNob3Q= IHdlZA== aW50ZXJzdGl0aWFs SW50ZXJzdGl0aWFs IGFtZW4= QnJlYWtpbmc= IG1hcmtldGVk V2lyZQ== IENyb3dk Q29udGludWU= IEtub3du IEVmZmVjdGl2ZQ== b3JlYW4= aXpvbnM= Sm9zZXBo IGVzY2FsYXRpb24= dXNlcm5hbWU= IGN1cnRhaW4= QVRFUw== IFBBUg== IE1peQ== IGNvdW50ZXJmZQ== bGVuZQ== IGNvbnRlbmRlcnM= ZGFpbHk= IEFzYw== IFBoaWxsaXA= bW9zdGx5 IGZpbGVuYW1l aGVuZQ== IHJlc2VtYmxpbmc= IHN0YWdpbmc= IENobG9l IHdpcmluZw== SG9u IFJlbmV3 b3R0YWdl IEh5YnJpZA== bXVjaA== IHN0cm9rZXM= IHBvbGljeW1ha2Vycw== QVBURVI= IEFya2hhbQ== cGxvdA== IGFzc2lzdGFudHM= IGRlcG9ydA== IFNlZ2E= IGluZmx1ZW56YQ== IEN1cnNlZA== IEtvYmU= IHNraW5ueQ== UHJvdmlkZXI= IFJpcA== IGluY3JlbWVudGFs cHJvZHVjdHM= QkY= IGRvbWU= IENyZWRpdHM= IGxvc2Vycw== aW50cw== IEJldHR5 IFRhbGVudA== IERBTQ== THY= RXNz IGRlbnM= dGVtcA== SnVkZ2U= b2RpYw== ICco VVJFUw== ZXRzaw== Vk8= IHJldHJpZXZlZA== IGFyY2hpdGVjdHM= 2Yc= IGV0aGlj IFNlY29uZGFyeQ== c3RvY2tz YWRpYQ== IDMyNQ== IE9waW5pb24= IHNpbXVsdGFuZW91cw== IGRpeno= dWxw IHNtdWdnbGluZw== aXBwZXJ5 UmFuZG9t ZmFjaW5n IERhcw== IHN0b2NrcA== IGRpc2Nsb3N1cmVz cG9pbnRlcg== IGNvcmFs IFNlbGVjdGlvbg== IFBpa2U= aXZhbGVudA== IHJ1dGhsZXNz IFJpbQ== IGVuc3Vpbmc= IEV4cGVyaW1lbnQ= IGNvbmdyZXNzbWFu IGJlbGlldmVy IHVuc3BlY2lmaWVk IE1vcmQ= IGtub3dsZWRnZWFibGU= IFZFUlk= VFg= IHN0cmFwcw== IHR1cmY= YXBlc2hpZnRlcg== IG1hcml0YWw= IGZsb2Nr 44GG MjYz QU1FUw== IE9wcG9zaXRpb24= IHRyZWFzdXJlcw== IEdPRA== IG1vZGVsZWQ= IFdPUkxE IChb IFVzYWdl SEY= ICQo dXNzZWQ= IHBpb25lZXI= RWlnaHQ= cGFyc2U= YnJlYWQ= cml0eg== IE1pcmFuZGE= IEthbnQ= Kysp b3Jlbg== IHByb3Zva2Vk IGJyZWVkcw== IEluY2x1ZGVz IFBhc3RlYmlu IEZsaXA= SmF2YQ== IGJyaW5r IHJ1bW9yZWQ= IHVuc2Vlbg== IGdhcm5lcmVk IERlZmlu YWx0ZWQ= IHRhdHRvb3M= IGhlc2l0YXRpb24= aXNpdGlvbnM= IFdlYXZlcg== IFJlcG9ydGluZw== IHRoZXJhcGllcw== IGNvbnN1bHRhbnRz IHJlc2lkdWFs IE1hbGk= IFJvbWE= aWFnbw== IFJlc2lkZW50cw== dWJp IHJlbWVkaWVz IGFkYXB0aXZl IEFsaXZl IEJhcmNs IHdhbGxldHM= Y3J5cHQ= ZXRlcm1pbmF0aW9u IFBlbG9zaQ== IHNsaXBwaW5n b3Rvbmlu IGFsbGlhbmNlcw== cGF0cmljaw== aXJpcw== IG9ydGg= IFBlcmtpbnM= IERlVg== IEdldHM= IGRyeWluZw== Z2Vl Zm9yZXN0 IEZvcmdldA== b3JlbQ== MzM5 IHZhZ3VlbHk= IERpb24= IFBvcm4= IEhPVw== IHBuZXVt IHJ1YmJsZQ== IFRhc3Rl ZW5jaWE= IEdlbA== IGRzdA== IDI0NQ== IE1vcm9jY28= aW5mbGFtbQ== IFR3aW5z IGJvdHM= ZGF1Z2h0ZXI= IEJhbGs= IGJyZXRocmVu IGxvZ29z IGdvYmw= ZnBz IHN1YmRpdmlzaW9u IHBhd24= IHNxdWVlemVk IG1vcmFsZQ== IERX JyI= IGtub3Q= b29reQ== IGRpdmlzaXZl IGJvb3N0ZWQ= Y2h5 44OQ aWZhY3Q= IG5ld2NvbWVycw== IFdyZXN0bGluZw== IHNjb3V0cw== d29sdmVz UmF0 IG5pbmV0ZWVudGg= IE9zYm9ybmU= U3RhdHM= IGVtcG93ZXJlZA== IHBzeWNob3BhdGg= IE9FTQ== dWdnYWdl IFBL IE1vaGFtbWFk UGFr IGFuYXJjaGlzdHM= IEV4dHJhY3Q= ZXN0aGVz IFN0b2NraG9sbQ== bG9v IEdyYXBo IGRlcGxveWluZw== IFN0cmFuZ2Vy IE1vbGQ= IHN0YWZmZXI= IGRpc2NvdW50ZWQ= dWNrbGU= cGxlYXNl IExhbmRpbmc= w61h IDE5Mw== IGFudGU= IHJlcGV0aXRpb24= ICsvLQ== IHBhcm9keQ== IGxpdmVseQ== QUFB IEhvcnVz IHBpdHM= aW5kZXJz TE9D IFZlbmljZQ== NDA2 IERpc2NvdmVy 4oY= ZWxsZWN0dWFs IHBlbnM= IGV5ZWw= aWd1b3Vz SW1wbA== IGpva2luZw== IGludmFs IEJlbGZhc3Q= IGNyZWRpdG9ycw== IFNreXdhbGtlcg== b3Zza3k= IGNlYXNlZmlyZQ== IHNlYWxz aXNvZnQ= KSku IEZlbGl4 SVRT IHRyZXNw IEJsb2NrY2hhaW4= ZXdhcmU= IFNjaHdhcg== ZW5uZQ== bW91bnRlZA== IEJlYWNvbg== bGVzaA== IGltbWVuc2VseQ== IGNoZWVyaW5n RW1wbG95 c2NlbmU= aXNobHk= YXRjaGV3YW4= IE5pY29sYXM= IGRyYWluZWQ= IEV4aXQ= IEF6ZXJi anVu IGZsb2F0ZWQ= dWFuaWE= RGVlcA== IHN1cGVydg== IG15c3RpY2Fs IERvbGxhcg== IEFwb3N0bGU= IFJFTA== IFByb3ZpZGVk IEJ1Y2tz 44O0 Y3V0dGluZw== IGVuaGFuY2VtZW50cw== IFBlbmd1aW5z IElzYWlhaA== IGplcms= IFd5bg== IHN0YWxsZWQ= IGNyeXB0b2N1cnJlbmNpZXM= IFJvbGFuZA== c2luZ2xl IGx1bWlu IEZlbGxvdw== IENhcGFjaXR5 IEthemFraA== V04= IGZpbmFuY2Vk Mzg5 IHRpZA== IGNvbGx1c2lvbg== IE15cg== 7oA= U2VuYXRvcg== IHBlZGlhdHJpYw== IG5lYXRseQ== IHNhbmR3aWNoZXM= IEFyY2hpdGVjdHVyZQ== IHR1Y2tlZA== IGJhbGNvbnk= IGVhcnRocXVha2Vz cXVpcmU= RnV0dXJl IGhlZnR5 6Zc= IHNwZWNpYWxpemVz IHN0cmVzc2Vz IHNlbmRlcg== IG1pc3VuZGVyc3RhbmRpbmc= IGVwaWxl IHByb3Zva2U= IENvbG9ycw== IGRpc21heQ== dWtv W18= NTg2 bmV1dHJhbA== IGRvbmF0aW5n IFJhbmRhbGw= TXVsdGk= IGNvbnZlbmllbnRseQ== IFN1bmc= IENvY2E= IHRlbnRz IEFjY2VsZXI= IHBhcnRuZXJlZA== Mjcy aXJtaW5n IEJBUw== c29tZXRpbWVz IG9iamVjdGVk dWJyaWM= cG9zZWQ= TENT Z3Jhc3M= IGF0dHJpYnV0YWJsZQ== VklT SXNyYWVsaQ== IHJlcGVhdHM= IFJN dmFn dXRh aW5vdXM= IGluZXJ0 IE1pZ3VlbA== 5q0= IEhhd2FpaWFu Qm9hcmQ= IGFydGlmaWM= IEF6ZXJiYWk= YXNpbw== IFJlbnQ= QUlO IGFwcGxpYW5jZXM= IG5hdGlvbmFsaXR5 IGFzc2hvbGU= IE5lYg== IG5vdGNo aGFuaQ== IEJyaWRl QXZhaWxhYmlsaXR5 IGludGVyY2VwdGVk IGNvbnRpbmVudGFs IHN3ZWxsaW5n IFBlcnNwZWN0 Ymllcw== Ljw= aXRobWV0aWM= IExhcmE= IHRlbXB0aW5n YWRkcg== IG92ZXJzZWVpbmc= Y2xhZA== IERW IEdpbmdyaWNo IG11bg== IEFwcHJvcHJp IGFsdGVyYXRpb25z IFBhdHJlb24= IGhhdm9j IGRpc2NpcGxpbmVz IG5vdG9yaW91c2x5 YWt1eWE= aWVyaQ== Pyku IFdlbnQ= IHNpbGljb24= IHRyZW1i Q29udGFpbmVy S25vd24= IG1vcnRhcg== ZXN0ZQ== aWNrYQ== QXJ0aHVy IFByZXZpb3VzbHk= IE1hcnR5 IHNwYXJzZQ== Z2lucw== IGlud2FyZA== IFBhcnRpY2lwYW50 Q29weQ== IE1pc2M= IGFudGliaW90aWM= IFJldHJv IGVsdXNpdmU= IGFzc2FpbA== IEJhdHRhbGlvbg== IEJvdWdodA== IGRpbWluaXNo IEV1cm9wYQ== c2Vzc2lvbg== IERhbmdlcm91cw== aWVzZWw= IGRpc2JlbGllZg== IGJsYXN0cw== ZXh0cmVtZQ== IEJveWQ= IFByb2plY3Rz IEd1eXM= IHVuZGVyZ29uZQ== IGdyaWxs IER3aWdodA== IDE5Nw== VVNFUg== IGZpbGVzeXN0ZW0= IGNsb2Nrcw== VGF5bG9y IHdyYXBwZXI= IGZvbGRpbmc= b3VzYW5k IFBoaWxpcHBpbmU= QVRJT05BTA== IFBlcnRo IGFzaGVz IGFjY3VtdWxhdGU= IEdhdGV3YXk= U2hvcA== b3Jrc2hpcmU= SGFu IEJhcnJlbA== IExlaA== IFhW IHdoaW0= IHJlcG8= IENH IE1hbQ== IGluY29ycG9yYXRpbmc= IGJhaWxvdXQ= IGxpbmd1aXN0aWM= IGRpc2ludGVn Q0xF IGNpbmVtYXRpYw== IEZpYmVy U3lu aWxpb24= IENvbXBvcw== Y2hlbnM= IG5lb2M= IGJvaWxlZA== RklORQ== b25v dW5jbGU= aWtlbg== IEJN zrk= IHJlY2VpcHRz IGRpc3Bvc2Vk IFRoaXJ0eQ== IFJvdWdo IEFCUw== IG5vdHdpdGhzdGFuZGluZw== b2xsZW4= IyQ= IHVucmVsaWFibGU= IGJsb29t IG1lZGlvY3Jl IHRyYW0= IFRhc21hbg== IHNoYWtlcw== IG1hbmlmZXN0bw== IE1X IHNhdGlzZmFjdG9yeQ== IHNob3Jlcw== IGNvbXB1dGF0aW9u IGFzc2VydGlvbnM= b3Jtb25z YXJhZw== YWJpdA== RGVtb2NyYXRz IExvb3Q= IFZvbGtz aGFpcmVk IGdyYXZpdGF0aW9uYWw= U2luZw== IE1peg== IHRocm90dGxl IHR5cmFubnk= IFZpZXdz IHJvYmJlcg== IE1pbm9yaXR5 IHNocmluZQ== c2NvcGU= cHVycG9zZQ== IG51Y2xldXM= b3VyY2luZw== IFVTREE= IERIUw== d3Jh IEJvd2ll U2NhbGU= IEJFTA== eGk= SXRlcg== ICgpLA== d3JpZ2h0 IHNhaWxvcnM= b3VzZWQ= TkFTQQ== IFByb29m IE1pbmVyYWw= dG9rZW4= IEZE UmV3 IGVsbA== NjMw IGNoYW5jZWxsb3I= IEdvcw== IGFtb3VudGVk IFJlY3Jl b21leg== IE9wdGlt IE9saXZl IHRyYWNrZXI= b3dsZXI= IFVuaXF1ZQ== Um9vdA== IG1hcml0aW1l IFF1cmFu IEFkYXB0 IGVjb3N5c3RlbXM= IFJlcGVhdA== IFNveQ== IElNUA== IGdyYWR1YXRpbmc= YW5kZW0= UHVy IFJlc2V0 IFRyaWNr IFBoaWxseQ== IFR1ZQ== IE1hbGF5c2lhbg== IGNsaW1heA== IGJ1cnk= IGNvbnNwaWM= IFNvdXRoYW1wdG9u IEZsb3dlcnM= IGVzY29ydGVk IEVkdWNhdGlvbmFs IElSQw== IGJydXRhbGx5 ZWF0aW5n IHBpbGxhcg== IFNhbmc= IEp1ZGU= YXJsaW5n IEFtbmVzdHk= IHJlbWluZGluZw== IEFkbWluaXN0cmF0aXZl aGVzZGE= IGZsYXNoZWQ= IFBCUw== cGVyYXRl ZmVhdHVyZQ== IHN3aXBl IGdyYXZlcw== b3VsdHJ5 MjYx YnJlYWtz IEd1ZXI= IHNocmltcA== IFZvdGluZw== cXVpc3Q= IGFuYWx5dGljYWw= IHRhYmxlc3Bvb25z IFNPVQ== IHJlc2VhcmNoZWQ= IGRpc3J1cHRlZA== IGpvdXI= IHJlcGxpY2E= IGNhcnRvb25z YmlhbnM= fSk= Y29weQ== R290 b3VjaGVk UFVU IHN3YXJt bm90YXRpb25z c2FpZA== IHJlYnVpbHQ= IGNvbGxhYm9yYXRl IHJhZ2luZw== IG5hcg== IGRlbW9ncmFwaGljcw== IEREUg== IGRpc3RydXN0 b3NzaWVy IEtybw== IHB1bXBraW4= IHJlZ3JldHM= IGZhdGFsaXRpZXM= IExlbnM= IE9sZQ== cGQ= IHB1cHBldA== IE91dGxvb2s= IFN0YW0= T2w= RmFpcg== VVU= IHJld3JpdHRlbg== xLE= IGZhc2NpbmF0ZWQ= IHZlY3RvcnM= IHRyaWJ1bmFs dWF5 IE1hdHM= IENvaW5z W1s= IDE4MQ== IHJlbmRlcnM= IEthZXBlcm5pY2s= IGVzcGlvbmFnZQ== IHN1bW0= IGRpdGNo QWNjb3VudA== IHNwcmVhZHNoZWV0 IG11dGFudA== cGFzdA== NDA3 IGR5ZQ== IGluaXRpYXRpb24= IDQwMDA= IHB1bmlzaGFibGU= IHRoaW5uZXI= IEtoYWw= IGludGVybWVkaQ== RHVu IEdvdGhhbQ== IGVhZ2VybHk= IHZhZ2luYWw= cG93ZXJz Vlc= IFdBVENIRUQ= IHByZWRhdG9y YW1zdW5n IGRpc3Bhcml0eQ== IFsq IGFtcGg= IG91dHNraXJ0cw== IFNwaXJpdHM= IHNrZWxldGFs 0Ls= IFJlYXI= IGlzc3VhbmNl IExvZ2lj cmVsZWFzZWQ= Wlo= IEJvdW5k RW50cnk= IGV4aXRz aXNvbA== IEZvdW5kZXI= IHdyZQ== IEdyZWVubGFuZA== IE1NTw== dGFrZXI= SU5D 44G+ IGhvdXJseQ== aGVua28= IGZhbnRhc2llcw== IGRpc29i IGRlbW9saXRpb24= 44OL IGVubGlzdGVk cmF0dWxhdGlvbnM= IG1pc2d1aWRlZA== IGVuc3VyZWQ= IGRpc2NvdXJhZ2Vk bW9ydA== IGZsYW5r IGNlc3M= IHJlYWN0cw== IFNlcmU= c2Vuc2l0aXZl IFNlcnBlbnQ= YXNzYWQ= IDI0Nw== IGNhbG1seQ== YnVzdGVycw== IGJsZWVk IFN0cm8= IGFtdXNlbWVudA== IEFudGFyY3RpY2E= IHNjZXB0 IEdhdw== YXE= YXNvbmlj IHNwcmF3bGluZw== bmF0aXZl YXR1cmF0ZWQ= IEJhdHRsZWZpZWxk SVZFUlM= RUI= IEdlbXM= IE5vcnRod2VzdGVybg== IEZpbG1z IEF1dG9tYXRpYw== IGFwcHJlaGVuZA== 44Go IGd1aU5hbWU= IGJhY2tlbmQ= IGV2aWRlbmNlZA== Z2VhbnQ= MDEy IFNpZWdl IGV4dGVybmFsVG8= IHVuZm9jdXNlZFJhbmdl IGd1aUFjdGl2ZVVuZm9jdXNlZA== IGd1aUljb24= IGV4dGVybmFsVG9FVkE= IGV4dGVybmFsVG9FVkFPbmx5 RnJp Y2hhcmQ= ZW5hcmllcw== IGNoaWVmcw== IGNm IEhVRA== IGNvcnJvYm9y IGRC IFRha2Vu IFBhdHJpY2lh cmFpbA== IENoYXJt IExpYmVydGFyaWFu cmlldmU= UGVyc29uYWw= IE9VUg== Z2VyaWVz IGR1bXBpbmc= IG5ldXJvbG9naWNhbA== aXRpbWF0ZQ== IENsaW50b25z cmFmdGVk IE1vbGx5 IHRlcm1pbmFscw== cmVnaXN0ZXI= IGZsYXJl IGVuY29kZWQ= IGF1dG9wc3k= cGVs bWFjaGluZQ== IGV4ZW1wdGlvbnM= IFJveWFscw== ZGlzdGFuY2U= IGRyYWZ0cw== IGxhbWU= IEN1bm5pbmc= IHNwb3VzZXM= IE1hcmtldHM= IENhcnJpZXI= IGltcGx5aW5n IFlhaw== c2lk IGxvc2Vy IHZpZ2lsYW50 IGltcGVhY2htZW50 IGF1Z21lbnRlZA== IEVtcGxveWVlcw== IHVuaW50ZW5kZWQ= dGVybmFsbHk= IFdhdHQ= IHJlY29nbml6YWJsZQ== ZXNzaW0= 5p0= IGNvYXRlZA== cmhh IGxpZXV0ZW5hbnQ= IExlZ2lzbGF0aW9u cHVibGlzaGVk NDQ0 MDEz IGlkZWFsbHk= IFBhc3N3b3Jk IHNpbXBsaWZ5 IE1ldGE= IE1SSQ== IHBsZWFkaW5n b3JnYW5pemVk aGFuZGxlcg== IHVucmF2ZWw= Y29ycmVjdA== IGljeQ== IHBhcmFub2lk IHBhc3Nlcg== IGluc3BlY3Rpb25z b2Zlcg== IEhlYWx0aGNhcmU= Mjgz IEJydXQ= aW9sYQ== Zm9yZ2U= IE1lZGlldmFs TVNO aWV2ZXJz IFByb2dyYW1taW5n 5Yk= IDIyMw== bXU= IENMRQ== dWdh IHNob3BwZXJz IGluZm9ybWF0aXZl IFBsYW5z IHN1cHBsZW1lbnRhdGlvbg== IFRlc3Rz dHlhcmQ= b2N5dGVz IFZlZ2E= IEd1amFyYXQ= ZXJtYW5lbnQ= RXhjZXB0 IExPVA== YWxsYQ== IEN1bW0= IE9zdw== IHZlbm9t IERlYnQ= IERPV04= IHJldW5pb24= IG11Yw== IFJlbGllZg== IGdlb3A= IPCfmA== YWxvZ3Vl QW50aA== ZWNobw== IGNvcnJvcw== IHJlcGxpY2F0aW9u IEJsYXppbmc= IERhdWdodGVy IGluZmxpYw== IExpbmRzZXk= 2Yg= Mjg0 RXhpdA== IGdsb29t VEFJTg== IHVuZGVybWluaW5n IGFkdmlzaW5n aGlkZGVu IG92ZXJmbG93 IGdvcg== dXJkdWU= IGVjaG9lcw== ZW5oYWdlbg== IGltcHVscw== ZHJ1Zw== Y2FzaA== IGFzeW5j IG1pcmFj YXR0cw== cHVuaw== IHBpdm90 IExlZ2lzbGF0aXZl IGJsb2dnZXJz IENsYXc= c2J1cmc= ZHls IFJlY29tbWVuZA== IHZlcnRl IHByb2hpYml0aW5n IFBhbnRoZXI= Sm9uYXRoYW4= IG9taW4= IGhhdGVmdWw= Mjgx IE9yY2hl IE11cmRvY2g= ZG93bnM= IGFzeW1t R0VS QWx3YXlz IGluZm9ybXM= IFdN IFBvbnk= IEFwcGVuZGl4 IEFybGluZ3Rvbg== SmFt IG1lZGljaW5hbA== IFNsYW0= SVRJRVM= IHJlYWZm IFJp Rkc= U3ByaW5n Ym9vbA== IHRoaWdocw== IG1hcmtpbmdz IFJhcXFh IExhaw== cG9sbA== dHNreQ== IE1vcnR5 IERlZmluaXRpb24= IGRlYnVuaw== ZW5kZXJlZA== IExlb25l YXZlcnM= IG1vcnRnYWdlcw== QXBwYXJlbnRseQ== Tmlj aGF1cw== IFRob3VzYW5kcw== YXVsZA== IG1hc2g= c2hvb3Q= IGRpYXJy IGNvbnNjaW91c2x5 SGVybw== ZWFz IE5hdHVyYWxseQ== IERlc3Ryb3llcg== IGRhc2hib2FyZA== c2VydmljZXM= Um9n IG1pbGxlbm5pYWxz IGludmFkZQ== LSg= IGNvbW1pc3Npb25z IEF1Y2tsYW5k IGJyb2FkY2FzdHM= IGZyb250YWw= IGNyYW5r IEhpc3Rvcmlj IHJ1bW91cnM= Q1RW IHN0ZXJpbA== IGJvb3N0ZXI= cm9ja2V0 44K8 dXRzY2hl IFBJ IDIzMw== IFByb2R1Y2Vy IEFuYWx5dGljcw== IGludmFsdWFibGU= IHVuaW50ZW50aW9u IENZ IHNjcnV0aW4= IGdpZ2c= IGVuZ3VsZg== IHByb2xldGFyaWF0 IGhhY2tz IEhldw== YXJhaw== IFNsaW1l aWVsZGluZw== YWdoZXI= IEVsbGlvdA== IHRlbGVjb20= IDIxOQ== dWx0YW4= IEFyYm9y IFNjb3V0cw== QmFu IGxpZmVzcGFu IGJsYXNw Mzg4 IGp1ZGljaWFyeQ== IENvbnRpbmVudGFs YXNraW5n TWND TEVE IGJhZ2dhZ2U= IFNvcmNlcmVy IHJlbW5hbnRz IEdyaWZmaXRo ZXRzdQ== IFN1YmFydQ== IFBlcnNvbmFsaXR5 ZGVzaWduZWQ= dXNoaW1h YWduYXI= IHJlY29pbA== IHBhc3Npb25z XCI6 IHRlZQ== IGFib2xpdGlvbg== IENyZWF0aW5n amFj IDE5NA== MDE5 IHBpbGxhcnM= cmljaGVk LyI= dGs= IGxpdmVsaWhvb2Q= IHJvYXN0ZWQ= YWhvbg== IEh1dGNo YXNzZXJ0 IGRpdmlkZW5k IGtuaXQ= IGRhdW50aW5n IGRpc3R1cmJhbmNl IHNoYWxl IGN1bHRpdmF0ZWQ= IHJlZnJpZ2VyYXRvcg== TEI= IE5FVA== IGNvbW1lcmNpYWxz IHRoaW5rZXJz NDU1 IGNob3A= QnJvYWQ= IHN1c3BpY2lvbnM= IHRhZ2dlZA== bGlmdGluZw== IHN0eWxpc2g= IFNoaWVsZHM= U2hvcnRseQ== IHRhaWxz QXV0aA== U1RF IEdBTUU= IHNlaXNt IEtpcw== b2xvZ25l IGNvd29yaw== IGZvcmNpYmx5 IHRoeXJvaWQ= IFBC QU5F bWFycmllZA== aG9yc2U= IHBvbHltZXI= IENoYWw= b2Rvcg== REVCVUc= IENvbnRleHQ= IGJsaXNz IHBpbnBvaW50 IE1hdGhlbWF0 bGVncmFt IFdlZWtlbmQ= IGxhYmVsbGVk IGJhcnQ= aXRsZXM= IGVzdHJvZ2Vu 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU Iic= IHZpc2libHk= IG91dHNpZGVy YWlkYQ== QXJlYQ== IGRpc3NlbWlu IGRpc2hvbmVzdA== IENsb3NlZA== IEJ1bGxldGlu IFJhbXNleQ== c3dvcmQ= IFhJ b3VyY2Vk U2FtZQ== MzQ2 IFJlcGU= IEtvdQ== Y2FrZQ== ZW1pcw== Q2FjaGU= IE1lYW5pbmc= IEVubGlnaHQ= b25vbXk= IG1hbmlmZXN0YXRpb24= c3dvcnRo SmF5 IGNob3Jl w7Zy RHJlYW0= IHNhbmN0aW9uZWQ= IGN1bHR1cmFsbHk= IEFyYQ== TmF2 IHRoZW9sb2dpY2Fs IHN0cnV0 IFZP IEhhbmRib29r IGNvbnN0cnVjdGluZw== IMK2 IEJlbmVmaXRz IFBzeWNob2xvZ2ljYWw= c2Fj 5bg= cG9saWN5 IE1hdHRlcnM= IFJlcG9ydGVk IEJ5dGU= IHZpdHJv IE1haWRlbg== IGxhbQ== IEplbm5pbmdz IGdhcm1lbnQ= IFJ1dGdlcnM= IFN0YWZmb3Jk IFdlbGxpbmd0b24= IGludGVybWl0dA== IG5wbQ== IG9yZGVhbA== IHBsdWdnZWQ= b29taW5n aW5pc2hlZA== ZnJhbWV3b3Jr IHRpbWJlcg== IGNhc3M= IDg1MA== aWxlc3M= IFJlZHV4 NzY4 U3RyZQ== IHN1cnBhc3NlZA== d2hlbA== IHBhcmFsbGVscw== IHZlaWw= IEdJ IFJFU1Q= IHJlYWRpbmVzcw== c29ydA== IG1vZGlmeWluZw== IFNsYXRl cnVmZg== IG1hcmJsZQ== IGluZnJhcmVk IGF1ZGl0b3I= IEZBTlRBU1k= IFBvdmVydHk= IFNQRA== ICIo S3k= UkFZ IGV4ZWN1dGlvbnM= IEJldmVybHk= IE1hcnhpc20= IEJ1cnN0 IEthbGk= ZXN0b25lcw== Q2xlYXJseQ== RWxs 44Gn IFByb2NlZWRpbmdz VG9rZW4= SUZJQw== w7Fh Q2VudHJhbA== IEhhbGV5 IERyYW1h IGZvcm1hdGlvbnM= T1JO Qm9va3M= IGRvbWluYXRpbmc= IEZseWVycw== IENvbXBhbmlvbg== IGRpc2NpcGxpbmVk IFl1Z29zbGF2 IFNwZWxscw== IHZlbmdlYW5jZQ== IGxhbmRsb3Jkcw== TGVu IE9ncmU= YW5vaWE= IHBpZXJjaW5n IGNvbmdyZWc= IHNjb3Jlcg== b2JpYQ== IG5pY2tlbA== IExlYXJucw== IHJlam8= IG1hc3RlcnBpZWNl Rmxhc2g= IGluaGFiaXRlZA== IE9wZW5HTA== IER1ZA== IElDTw== IGFydGVy IHBsdXI= IG1hc3Rlcnk= IGxvbmdzdGFuZGluZw== c3RlZA== IHdpbmVz IHRlbGV2aXNlZA== IFNocmluZQ== IEJheWVybg== IOKTmA== IGVuY2xvc3VyZQ== am9obg== IHByb3BoZXRz IFJlc3VycmVjdGlvbg== IE9yZGVycw== IHVuZXZlbg== cmFscw== IGR3aW5k IExhaA== IFNsb3Zlbg== Mzc4 IGluc2lzdGVuY2U= YWZmbGU= IENsb25l IGhhcmRzaGlw IENvbmdyZXNzbWFu IHBsZWFk IHJldmlld2Vycw== IGN1cmVk IDE5MzU= YXNsZXk= ZmFrZQ== IFRoaW5raW5n eWRpYQ== UEFSVA== IERvdGE= b2l0 IHdoaXBwZWQ= IGJvdW5jaW5n IEhpc3Bhbmljcw== Y29taW5ncw== IGNhbm5hYmlu IENoYW1iZXJz IFphY2s= T3B0aW9uYWw= IGNvYXRz IHByb3dlc3M= IE5vcnRvbg== IHBsYWlubHk= IGZyZWlnaHQ= IGluaGliaXRpb24= IGNsYW0= IDMwMw== a2Vm YWxlaWdo THVrZQ== IHBzeWNobw== YXRvcml1bQ== TUVE IHRyZWF0aWVz IGluZGlzYw== IGRj T1BT IHJlc2lsaWVudA== IEludGVyc3RhdGU= IHNsYWNr IG11bmRhbmU= IGVzdGFibGlzaGVz MzU5 IHN0cmFpbmVk IG5vbmQ= U3Vz IGNhc3Rl YXJhdGU= aWV2aW5n IHVuZmFpcmx5 IHBhcnNlcg== b25pYWw= dXJzaXZl Vmlh IE90dG8= IEF1dGhvcml0aWVz c3Ryb2tl S1I= IE1lcmN5 IGZ1cm5pc2hlZA== IG91dHNldA== IG1ldGlj MTk4Mg== b2xpdGhpYw== IFRlbnQ= b2dpY2Fs IEFpcmNyYWZ0 IGhpZGVz IEJlY2FtZQ== IGVkdWNhdG9ycw== cmVhY2hpbmc= IHZvbGF0aWxpdHk= IHRvZGRsZXI= IE5BU0NBUg== IFR3ZWx2ZQ== IEhpZ2hsaWdodHM= IGdyYXBl IHNwbGl0cw== IHBlYXNhbnQ= IHJlbmVn IE1TSQ== VGVtcA== c3RhcnM= IHRyZWs= IEh5ZGU= YmluZGluZw== IHJlYWxpc20= IG94aWRl IEhvcw== IG1vdW50cw== IGJpdGluZw== IGNvbGxhcHNpbmc= IHBvc3RhbA== IG11c2V1bXM= IGRldGFjaGVk IHJlc3BlY3Rpbmc= IG1vbm9wb2w= IHdvcmtmbG93 IENha2U= VGVtcGxhdGU= IE9yZ2FuaXNhdGlvbg== IHBlcnNpc3RlbmNl MzY5 Q29taW5n QnJhZA== IHJlZHVuZGFudA== IEdUQQ== IGJlbmRpbmc= IHJldm9rZWQ= IG9mZmVuZGluZw== IGZyYW1pbmc= IHByaW50Zg== Q29tbXVu bWVtYmVycw== T3V0c2lkZQ== IGNvbnN0cnVlZA== IGNvZGVk Rk9SRQ== IGNoYXN0 Q2hhdA== SW5kaWFu IFlhcmQ= PyEi IFBvcnRz IFhhdmllcg== IFJFVA== Jy4i IEJvYXQ= aXZhdGVk aWNodA== dW1lcmFibGU= RHM= IER1bm4= IGNvZmZpbg== IHNlY3VyZWx5 IFJhcHRvcnM= IEJlcw== SW5zdGFsbGF0aW9u IGluY2VwdGlvbg== IEhlYWx0aHk= ZW5kYW50cw== IHBzeWNob2xvZ2lzdHM= IFNoZWlraA== Y3VsdHVyYWw= IEJsYWNrQmVycnk= c2hpZnQ= RnJlZA== b2NoZQ== IGNha2Vz IFNFTw== IEdpYW4= IEFzaWFucw== b2dnaW5n ZWxlbWVudA== IHB1bmRpdHM= IFZhdWdo IEdhdmlu IGhpdHRlcg== IGRyb3duZWQ= IGNoYWxr IFppa2E= IG1lYXNsZXM= ODAy 4oCmLi4= IEFXUw== XSI= IGRpc3RvcnQ= IE1hc3Q= IGFudGlib2RpZXM= IE1hc2g= TWVtb3J5 IFVnYW5kYQ== IFByb2I= IHZvbWl0aW5n IFR1cm5z IG9jY3VweWluZw== IGV2YXNpb24= IFRoZXJhcHk= IHByb21v IGVsZWN0cg== IGJsdWVwcmludA== IERyZQ== cHJpY2Vk IERlcG90 IGFsbGV2aWF0ZQ== IFNvbWFsaQ== bWFyZw== bmluZQ== IG5vc3RhbGdpYQ== IFNoZXBoZXJk IGNhdmFscnk= IHRvcnBlZA== IEJsb29keQ== eGI= IHNhbms= IGdvYWx0 cmVwb3J0cHJpbnQ= ZW1iZWRyZXBvcnRwcmludA== Y2xvbmVlbWJlZHJlcG9ydHByaW50 IEluaXRpYWxseQ== IEZpc2NoZXI= IG5vdGV3b3J0aHk= Y2Vybg== IGluZWZmaWNpZW50 cmF3ZG93bmxvYWQ= cmF3ZG93bmxvYWRjbG9uZWVtYmVkcmVwb3J0cHJpbnQ= Y2F0aW9u IER5bmFzdHk= bGFn REVT IGRpc3RpbmN0bHk= IEVzdG9uaWE= IG9wZW5uZXNz IGdvc3NpcA== cnVjaw== V2lkdGg= IElicmFoaW0= IHBldHJvbGV1bQ== IGF2YXRhcg== IEhlZA== YXRoYQ== IEhvZ3dhcnRz IGNhdmVz Njc4 IHNhZmVndWFyZA== IE1vZw== aXNzb24= IER1cmhhbQ== c2xhdWdodA== IEdyYWR1YXRl IHN1YmNvbnNjaW91cw== IEV4Y2VsbGVudA== IER1bQ== LS0tLS0= IHBpbGVz IFdPUks= IEdhcm4= IEZvbA== IEFUTQ== IGF2b2lkcw== IFR1bA== IGJsZWFr RUxZ aXZpc3Q= bGlnaHRseQ== UGVycw== IERvYg== IExT IGluc2FuaXR5 zrU= YXRhbGll RW5sYXJnZQ== IHR3aXN0cw== IGZhdWx0eQ== IHBpcmFjeQ== IGltcG92ZXI= IHJ1Z2dlZA== IEZhc2hpb24= IHNhbmRz Jz8= c3dpY2s= IG5hdGl2ZXM= IGhlbg== IE5vaXNl 44OX IGdyZWVucw== IGZyZWV6ZXI= IGR5bmFzdHk= IEZhdGhlcnM= IE5ld2Fyaw== IGFyY2hhZW9sb2dpY2Fs IG90 b2Jhcg== IGJsb2NrYWRl IGFsbGVyZw== TFY= IGRlYml0 IFJGQw== IE1pbHRvbg== IFByZXNzdXJl IHdpbGxpbmdseQ== IGRpc3Byb3BvcnRpb25hdGU= IG9wcHJlc3NpdmU= IGRpYW1vbmRz IGJlbG9uZ2luZ3M= MTk3MA== IGJlbGxz IGltcGVyaWFsaXNt IDIyNw== IGV4cGxvZGluZw== IEVjbGlwc2U= IDE5MTk= IHJhbnQ= IG5vbWluYXRpb25z MzQ3 IHBlYWNlZnVsbHk= cmljYQ== IEZVQ0s= IHZpYnJhdGlvbg== bWFsaW5r IHJvcGVz IEl2YW5rYQ== IEJyZXdlcnk= IEJvb2tlcg== IE93ZW5z Z29lcnM= U2VydmljZXM= IFNuYXBl IDE5MQ== Mzk1 IDI5OQ== anVzdGljZQ== IGJyaQ== IGRpc2Nz IHByb21pbmVudGx5 IHZ1bGdhcg== IHNraXBwaW5n bHZlcw== IHRzdW5hbWk= Mzc0 IFVydWc= IEVpZA== cmVjYXRlZA== cGhlbg== IGZhdWx0cw== IFN0YXJ0ZWQ= OTUw IHBp IGRldGVjdG9y IGJhc3RhcmQ= IHZhbGlkYXRlZA== U3BhY2VFbmdpbmVlcnM= T1VSQ0U= ICh+ IHVuc3Vy IGFmZmlybWVk IGZhc2Npc20= IHJlc29sdmluZw== IENoYXZleg== IEN5bg== IGRldHJhY3Q= TG9zdA== IHJpZ2dlZA== IGhvbWFnZQ== IEJydW5v NTU1 ZWNh IHByZXNzZXM= IGh1bW91cg== IHNwYWNpbmc= ICcv b2xraWVu Q291bg== T1BFUg== VHJl U29u IENhbWJvZGlh aWVycmU= bW9uZw== b3p5 IGxpcXVpZGl0eQ== IFNvdmlldHM= IEZlcm5hbmRv IDIyOQ== IHNsdWc= IENhdGFsYW4= ZWxlY3RyaWM= IHNjZW5lcnk= IEhlYXJ0aA== IGNvbnN0cmFpbmVk IGdvYWxpZQ== IEd1aWRlbGluZXM= IEFtbW8= IFBlYXJzb24= IHRheGVk IGZldHVz UmVzcG9uc2U= IEFsZXhpcw== dGhpYQ== R3V5 IHJlY29uc3RydWN0 IGV4dHJlbWVz IGNvbmNsdWRpbmc= IFBlZw== b29rcw== IGRlZHVjdGlvbnM= Um9zZQ== IGdyb3VuZGJyZWFraW5n IFRhcmc= 44OB IFJldmU= cmVzb3VyY2U= IG1vb25z IGVsZWN0cm9tYWduZXRpYw== IGFtaWRzdA== IFZpa3Rvcg== TkVTUw== QkFDSw== IGNvbW11dGU= IEFuYWhlaW0= IGZsdWN0dWF0aW9ucw== NjQw IG5vb2RsZXM= IENvcGVuaGFnZW4= IFRpZGU= IEdyaXp6 IFNFRQ== IHBpcGVsaW5lcw== IHNjYXJz ZW5kbw== YWd1cw== IEVURg== LyM= IEJlY29tZQ== NDQ4 IHZpc2M= IFJlY29tbWVuZGVk IGp1bXBlcg== IGNvZ25pdGlvbg== IGFzc2Fzc2lu IHdpdG5lc3Npbmc= IFNldHVw IGxhYw== dmlt SVNN cGFnZXM= U1NM MzU4 IGFkamVjdA== aW5kdXN0cmlhbA== bG9yZQ== Y2hlcnk= IGdsaXR0ZXI= IGNhbGY= RmxvcmlkYQ== IHNwb2lsZXJz IHN1Y2NlZWRz IGNoYW50aW5n IHNsb2dhbnM= IFRyYWN5 VmlzaXQ= cm9sb2d5 IG1vcm5pbmdz IGxpbmVhZ2U= IHNpcA== IGludGVuc2VseQ== IGZsb3VyaXNo IFNsZWVwaW5n IEZlbQ== b3Jwb3I= IEtsYW4= IERhcnRo aGFjaw== IE5pZWxzZW4= IHR1bW9ycw== IHByb2N1cmVtZW50 IFlvcmtzaGlyZQ== IHJhaWRlZA== S1k= QW5uYQ== IC8vWw== IERpc29yZGVy IE11c3Rhbmc= IFdlbg== IFRyeWluZw== c3E= IGRlbGl2ZXJpZXM= IHNodXR0ZXI= IGNlcmVicmFs IGJpcG9sYXI= IENO bGFzcw== amV0 IGRlYmF0aW5n Pjo= IGVhZ2xl Z3JhZGVz IERpeG9u VUdD TUFT IERyYWNv IE1hY2hpbmVz YWZmZXI= IGVtYW4= wrI= cHJvbg== IEd5bQ== IGNvbXBhcmF0aXZlbHk= IFRyaWJ1bmFs UFJP IGxleA== IGZlcnRpbGU= IGRlcHJlc3Npbmc= IHN1cGVyZmljaWFs ZXNzZW50aWFs IEh1bnRlcnM= Z3A= IHByb21pbmVuY2U= TGliZXI= IEFuY2VzdA== b3RlY2hub2xvZ3k= IG1vY2tpbmc= IFRyYWZm lpo= TWVkaXVt SXJhcQ== IHBzeWNoaWF0cmlzdA== UXVhbnRpdHk= IExlY3Q= IG5vaXN5 NTIw R1k= IHNsYXBwZWQ= IE1UVg== IHBhcmE= cHVsbA== TXVsdGlwbGU= YXNoZXI= IG5vdXI= IFNlZw== U3BlbGw= dm91cw== b3JkaWFs U2VuaW9y IEdvbGRiZXJn IFBsYXNtYQ== bmVlZA== IG1lc3Nlbmdlcg== ZXJldA== IHRlYW1lZA== IGxpdGVyYWN5 IExlYWg= IERveWxl IGVtaXR0ZWQ= VVg= IGV2YWRl IG1hemU= IHdyb25nbHk= IExhcnM= IHN0ZXJlb3R5cGU= IHBsZWRnZXM= IGFyb21h IE1FVA== IGFjcmU= IE9E IGZm IGJyZXdlcmllcw== IEhpbHRvbg== dW5kbGU= IEthaw== IFRoYW5rZnVsbHk= IENhbnVja3M= aW5jdGlvbnM= IEFwcGVhcnM= IGNvZXI= IHVuZGVybWluZWQ= cm92ZXJz QW5kcmU= IGJsYXpl dW1lcnM= IGZhbWluZQ== YW1waGV0YW1pbmU= dWxrYW4= QW1vdW50 IGRlc3BlcmF0aW9u d2lraXBlZGlh ZGV2ZWxvcG1lbnQ= IENvcmludGg= dXNzaWE= SmFja3Nvbg== TEk= TmF0aXZl UnM= T2hpbw== IEthdGhsZWVu Rm9ydHVuYXRlbHk= IGF0dGVuZGFudA== IFByZWZlcnJlZA== IERpZG4= IFZz TWlz IHJlc3BvbmRlbnQ= IGJvdW4= c3RhYmxl IHBhdmVk IHVuZXhwbA== IENoZW5leQ== TE0= IEN1bGw= Ymxvd24= IGNvbmZyb250aW5n b2Nlc2U= c2VydmluZw== V2k= IExpdGh1YW5pYQ== YW5uaQ== IHN0YWxr aGQ= IHZlbmVy QVBI eW5jaHJvbm91cw== VVJS dW1hYmx5 aGlzdG9yaWM= SGFsZg== SGF5 IHJlc2lsaWVuY2U= c3BlY3Rpb24= IGFiYW5kb25pbmc= T2Jz IERlYmJpZQ== IGdyYWRpZW50 IFBsYWludA== IENhbmFs QVJDSA== IGV4cGFuc2l2ZQ== IGZ1bmc= IGJvdW5jZWQ= VW5k IHByZWNhdXRpb25z IGNsYXJpZmljYXRpb24= IGRhZ2dlcg== IGdyaXBz IMK1 IFJpdmVyYQ== IFVuZGVhZA== aXNpdGVz IEZJUlNU w7Fv YXVkaQ== IGhvc3RhZ2Vz IGNvbXBsaWFudA== IGFsdW1uaQ== U2V2ZW4= IGN5YmVyc2VjdXJpdHk= ZWl0aGVy Q29sbGVjdA== IGludmFyaWFibHk= IFNvY2k= IGxhd21ha2Vy IGFsZQ== IFBlcnNvbmFsbHk= TmF6aQ== IGN1c3RvbWl6YXRpb24= IFByb2M= IFNhc2thdGNoZXdhbg== ZWF0dXJpbmc= IHNwYXJlZA== IGRpc2NvbnRpbnVlZA== IGNvbXB1dGF0aW9uYWw= IE1vdG9yb2xh IHN1cHJlbWFjaXN0 Z292ZXJubWVudGFs IHBhcmFkaXNl IERvd25pbmc= IE5pa29u IGNhdGFseXN0 YmVycmE= VG9yb250bw== ODc1 YmV0YQ== IE1hY3Jvbg== IHVucmVhbGlzdGlj dmVjdG9y IFZlaGljbGVz aXRpdmVuZXNz IFJW IENvbGJlcnQ= c2lu b2pp ZW50aW4= IEtyaXNo aGVsbG8= ZmZpZWxk b2t5 IFRhdGU= IG1hcGxl IGFpZHM= Y2hlbWljYWw= MzM0 bnV0cw== IFdhcnA= IHh4 IFJvYmI= dW1lcm91cw== Xy1f ZnRpbWU= IFZX IHdpbmdlcg== IERvbWU= dG9vbHM= IFBW IEdlb3JnZXRvd24= IGdlYXJlZA== IGppaGFkaXN0cw== IGNw IHN0ZXJvaWRz TW90aGVy Y2xlcm9zaXM= IERSTQ== bmVzaWE= IGxpbmdlcg== IGltbWVyc2l2ZQ== IENPVU4= IG91dHdlaWdo ZW5zdWFs QmFuZA== IHRyYW5zZm9ybXM= bWF0Y2hlZA== cHNvbnM= IEp1ZGljaWFs ZmFjdG9y IHJlZmVycmFs IG9kZGx5 IFdlbmdlcg== QnJpbmc= IEJvd3M= NjAy SUNMRQ== IGxpb25z IEFjYWRlbWlj IFRob3Ju IFJhaWRlcg== a2VmZWxsZXI= U3RvcmFnZQ== TG93ZXI= IE9ydA== IEVxdWFsaXR5 QUxU IFNPQw== VHlwZXM= IGx5bg== IEFzc2V0 Y29hdA== VFBQ Q1ZF IFBpb25lZXI= YXBwbGljYXRpb24= TW9kZXJu IEhL RW52aXJvbm1lbnQ= QWxyaWdodA== UmFpbg== SVBQ IFNoaWl0ZQ== IG1vdW5k IEFiaWxpdGllcw== Y29uZGl0aW9u U3RhZmY= IGNvbXBldGVuY2U= IE1vb3I= IERpYWJsbw== IHdpdGhoZWxk IG9zdGVuc2libHk= IEJyb20= IG1zZw== IGRlbm9taW4= IFJlZmVyZW5jZXM= IEZQ IHBsdW5nZWQ= IHBhbXBo bW92aW5n Y2VudHJhbA== IGRvd25yaWdodA== IGZhZGluZw== VGFs VHlw IFRoeQ== dWtlcw== aXRoZQ== IG92ZQ== IGJhdHRsZWQ= IHNlYWZvb2Q= IGZpZ3Vy IFJE Y3JvcA== IHNxdWFkcw== e1w= 4Lk= IEVo IGludGVydmlld2luZw== IFFpbg== IGFzcGlyaW5n UExJQw== IGNsYXVzZXM= IEdhc3Q= IE5pcg== IGx1Z2dhZ2U= IGhvc2U= IHN5c3RlbWQ= IGRlc2NlbmRpbmc= IFJldmlzZWQ= IFJhaWxz YWxpZ24= NzA5 MzM3 IGZ1Zw== Y2hhcmdpbmc= dGFncw== IHV0ZXI= a2lzaA== V0FSTklORw== NDkw cHJvZml0cw== IHZveWFnZQ== IGFjZQ== IFZhbmd1YXJk IFRhbmtz IE11aw== IDIyNg== U2FmZQ== QXJtb3I= IHZvbGNhbmlj IHdvbWI= IE1JTA== IGJlZ2lubmVy IFJlY29nbg== IEFBUA== UExBWQ== KSE= IGRldGVjdGluZw== Y24= IGJyZWFjaGVz QmFzaWNhbGx5 IFBhZw== IE11bmljaXBhbA== IEluZGll IExhZg== IERpc2FibGU= IE9sc29u IHJlc3RyYWluZWQ= IHJ1bGluZ3M= IGh1bWFuZQ== ZXZlbnRz IENpbmVtYQ== ZGlzcGxheVRleHQ= IEhhdGNo YWN0aW9uRGF0ZQ== b25uYWlzc2FuY2U= IGFzc2F1bHRpbmc= IEx1Zw== Q0hBVA== IHZpZ29yb3Vz IFBlcnNl IGludG9sZXJhbmNl IFNuYXBjaGF0 IFNoYXJrcw== IGR1bW15 IERpYWdu IEd1aXRhcg== aW1ldGVycw== NDAz UkVH QXg= IHNlcGFyYXRlcw== IE1haG0= IHR2 amFo T09M Q2lyYw== IFdpbmRzb3I= dXNzaWFu IGludHVpdGlvbg== IGRpc2RhaW4= IERvbm92YW4= IDIyMQ== RW1i IGNvbmRlbW5pbmc= IGdlbmVyb3NpdHk= enp5 IHBhbnRpZXM= IFByZXZlbnQ= QWN0aW9uQ29kZQ== QU5B MzQy ZXh0ZXJuYWxBY3Rpb25Db2Rl IHNwZWNpZnlpbmc= IGNyeXN0YWxs SmVyZQ== IHJ1cHQ= IEFwcHJlbnRpY2U= IHByb2ZpbGluZw== 0Lo= U3RyaWtl IHNpZGVsaW5l IG9ibGlnYXRlZA== IG9jY3VsdA== IGJ1cmVhdWNyYXRpYw== YW50aWNhbGx5 cnVwdGVk bmVnYXRpdmU= IEV0aGlvcGlh IENpdmlj IGluc2lkZXJz ZWxpZ2libGU= IFRWcw== IEJBUg== IFRJ aW9sb2dpc3Q= IEFJUg== IHN1YnN0aXR1dGVk QXJhYg== IFNhdWw= IFlvZw== cHJlbQ== IGJ1aWxkZXJz IHN0YXRpb25hcnk= IGRvdWJ0ZnVs IHZpZ29yb3VzbHk= IHRocmlsbGluZw== UGh5c2ljYWw= IENhcmV5 IEh5ZHJh Z2VvbmluZw== IFNseQ== eXRvbg== IGJvcnJvd2Vycw== IFBhcmtpbnNvbg== IOs= IEphbWFpY2E= IHNhdGly IGluc3VyZ2VudHM= IEZpcm0= IGlzb3Q= IEthcm4= b3VybmluZw== YWtlbnM= ZG9jcw== bGl0dGxl IE1vbmFjbw== Q0xBU1M= VHVya2V5 THk= IENvbmFu YXNzaWM= IHN0YXJyZWQ= IFBhY2Vycw== ZXRpZXM= IHRpcHBpbmc= TW9vbg== IFJ3 c2FtZQ== IGNhdml0eQ== IGdvb2Y= IFpv U2hvY2s= dW1tZXI= IGVtcGhhc2l6ZXM= IHJlZ3JldHQ= IG5vdmVsdHk= IGVudnk= IFBhc3NpdmU= cnc= NTA1 IGluZGlmZmVyZW50 IFJpY2E= IEhpbXNlbGY= IEZyZWRkaWU= IGFkaXA= 5LiA IGJyZWFrb3V0 IGh1cnJpZWQ= IEh1YW5n IERpc2s= IHJvYW1pbmc= Pz8/Pz8tPz8/Pz8t VVY= IFJpY2t5 IFNpZ21h IG1hcmdpbmFsaXplZA== IGVkaXRz IDMwNA== bWVtb3J5 IHNwZWNpbWVu Mjkz 44Gv IHZlcnRpY2FsbHk= IGF1ZGl0aW9u IEhlY2s= IGNhc3Rlcg== IEhvbGRpbmdz YWRhbA== IENyb24= IExpYW0= IGRlZmxlY3Q= UGljaw== IERlYnVn UkVG IHZlcnNhdGlsaXR5 b3RoZXM= Y2xhc3NpZmllZA== IE1haGFy IEhvcnQ= Q291bnRlcg== c3Rhc3k= bm90aWNlZA== MzMx IFNoaW0= ZnVjaw== IEJpZQ== IGFpcmluZw== IFByb3RlaW4= IEhvbGRpbmc= IHNwZWN0YXRvcnM= aWxpYXRlZA== IFRoYXRjaGVy bm9zaXM= 44O844Oz VGVsZQ== Qm9zdG9u IFRlbXBs c3RheQ== IGRlY2xhcmF0aW9ucw== NDc5 Vm9sdW1l IERlc2lnbmVy IE92ZXJ3YXRjaA== aWRhZQ== IG9ud2FyZHM= IG5ldHM= IE1hbmlsYQ== cGFydGljdWxhcmx5 IHBvbGl0aWM= b290aGVy IHBvcnRyYWl0cw== IHBhdmVtZW50 Y2ZmZmY= IHNhaW50cw== IGJlZ2lubmVycw== RVNQTg== IHNob3J0Y29taW5ncw== 4pWQ4pWQ IGNvbWV0 IE9yZ2FuaWM= cXVlbA== IGhvc3BpdGFsaXplZA== QnJlYWs= IHBlZWw= ZHlsaWI= YXNweA== dXJhbmNlcw== IFRJTQ== UGc= IHJlYWRhYmxl IE1hbGlr IG11enpsZQ== IGJlbmNobWFya3M= ZGFs IFZhY2M= IEhpY2tz NjA5 IEJpYmxpY2Fs aGVuZw== IG92ZXJsb2Fk IENpdmlsaXphdGlvbg== IGltbW9yYWw= IGZyaWVz 44KS IHJlcHJvZHVjZWQ= IGZvcm11bGF0aW9u anVn aXJleg== Z2Vhcg== IGNvYWNoZWQ= TXBTZXJ2ZXI= IFNK IEt3 SW5pdA== ZGVhbA== IE9ybw== IExva2k= IFNvbmdz IDIzMg== IExvdWlzZQ== YXNpb25hbGx5 IHVuY29uZA== b2xseXdvb2Q= IHByb2dyZXNzaXZlcw== IEVub3VnaA== IERvZQ== IHdyZWNrYWdl IGJydXNoZWQ= IEJhc2VUeXBl IHpvbmluZw== aXNoYWJsZQ== aGV0aWNhbGx5 IENhdWN1cw== IEh1ZQ== IGthcm1h IFNwb3J0aW5n IHRyYWRlcg== IHNlZW1pbmc= IENhcHR1cmU= NDMw YmlzaA== IHR1bmVz IGluZG9vcnM= IFNwaGVyZQ== IERhbmNpbmc= VEVSTg== IG5vYg== IEdTVA== bWFwcw== IHBlcHBlcnM= Rml0 IG92ZXJzZWVz IFJhYmJp IFJ1bGVy dmVydGlzaW5n b2ZmaWNl eHh4 IHJhZnQ= Q2hhbmdlZA== IHRleHRib29rcw== TGlua3M= IE9tbg== 44CR IGluY29udmVuaWVuY2U= IERvbmV0c2s= PX4= IGltcGxpY2l0bHk= IGJvb3N0cw== IEJvbmVz IEJvb20= Q291cnRlc3k= IHNlbnNhdGlvbmFs QU5Z IGdyZWVkeQ== ZWRlbg== IGluZXhwZXI= IExlcg== IFZhbGU= IHRpZ2h0ZW4= IEVBUg== IE51bQ== IGFuY2VzdG9y U2VudA== IEhvcmRl dXJnaWNhbA== YWxsYWg= IHNhcA== YW1iYQ== IFNwcmVhZA== dHdpdGNo IGdyYW5kc29u IGZyYWN0dXJl IG1vZGVyYXRvcg== IFNldmVudGg= IFJldmVyc2U= IGVzdGltYXRpb24= Q2hvb3Nl IHBhcmFjaA== IGJhcnJpYw== 44CQ IGNvbXBhc3M= IGFsbGVyZ2lj 4oCV T1RIRVI= ZXJyaWxsYQ== IHdhZ29u IHppbmM= IHJ1YmJlZA== IEZ1bGxlcg== IEx1eGVtYm91cmc= IEhvb3Zlcg== IGxpYXI= IEV2ZW5pbmc= IENvYmI= ZXN0ZWVt IHNlbGVjdG9y IEJyYXds aXNhbmNl IEVr IHRyb29w IGd1dHM= IEFwcGVhbA== IFRpYmV0YW4= IHJvdXRpbmVz IE1lbnQ= IHN1bW1hcml6ZWQ= c3RlYW1hcHBz IHRyYW5xdQ== IDE5Mjk= b3Jhbg== IEF1dGhlbnQ= IGdtYXh3ZWxs IGFwcHJlaGVucw== IHBvZW1z IHNhdXNhZ2U= IFdlYnN0ZXI= dXJ1cw== IHRoZW1lZA== IGxvdW5nZQ== IGNoYXJnZXI= U3BvaWxlcg== IHNwaWxsZWQ= aG9n IFN1bmRlcg== IEFpbg== IEFuZ3J5 IGRpc3F1YWw= IEZyZXF1ZW5jeQ== IEV0aGVybmV0 IGhlbHBlcg== UGVyY2VudA== IGhvcnJpZnlpbmc= IGFpbA== IEFsbGFu RUVF IENyb3NzaW5n NDQ5 IGhvbG9n IFB1enpsZXM= IEdvZXM= ZXJlbm4= NjA0 44GP IFJhZmFlbA== IGF0dGVu IEVtYW51ZWw= IHVwcm8= IFN1c3A= UHN5Y2g= IFRyYWluZXI= IE5FUw== IEh1bnRz YmVjdWU= IGNvdW5zZWxvcg== UnVsZQ== IHRveGlucw== IGJhbm5lcnM= cmlmaWNl IGdyZWV0aW5n IGZyZW56eQ== IGFsbG9jYXRl ICop ZXhwcg== NTAz IENoaWNr IFRvcm4= IGNvbnNvbGlkYXRpb24= IEZsZXRjaGVy c3dpdGNo ZnJhYw== Y2xpcHM= IE1jS2lu IEx1bmFy TW9udGg= SVRDSA== IHNjaG9sYXJseQ== cmFwZWQ= Mzk4 IDE5MTA= IGVncmVn IGluc2VjdXJl IHZpY3RvcmlvdXM= Y2ZmZmZjYw== IHNpbmdsZWQ= IGVsdmVz IFdvbmQ= YnVyc3Q= IGNhbW91Zmw= IEJMQUNL IGNvbmRpdGlvbmVk 54k= YW5zd2VyZWQ= IGNvbXB1bHNvcnk= YXNjaXN0 IHBvZGNhc3Rz IEZyYW5rZnVydA== Ym5i IG5lb2xpYmVyYWw= IEtleWJvYXJk IEJlbGxl d2FybQ== IHRydXN0cw== IGluc3VyZWQ= IEJ1Y2M= dXNhYmxl NjA3 IFBsYWlucw== IDE4OTA= IHNhYm90YWdl IGxvZGdlZA== ZmVsdA== IGdh IE5hcmM= IFNhbGVt IHNldmVudHk= IEJsYW5r cG9ja2V0 IHdoaXNwZXI= IG1hdGluZw== b21pY3M= IFNhbG1hbg== IEthZA== IGFuZ2VyZWQ= IGNvbGxpc2lvbnM= IGV4dHJhb3JkaW5hcmlseQ== IGNvZXJjaW9u R2hvc3Q= YmlyZHM= 6IA= a29r IHBlcm1pc3NpYmxl YXZvcmFibGU= IHBvaW50ZXJz IGRpc3NpcA== YWNp IHRoZWF0cmljYWw= IENvc21pYw== IGZvcmdldHRpbmc= IGZpbmFsaXplZA== 5aSn eW91dA== bGlicmFyeQ== IGJvb21pbmc= IEJlbGlldmU= IFRlYWNoZXI= IExpdg== IEdPT0RNQU4= IERvbWluaWNhbg== T1JFRA== IFBhcnRpZXM= IHByZWNpcGl0YXRpb24= IFNsb3Q= Um95 IENvbWJpbmVk IGludGVncmF0aW5n IGNocm9tZQ== IGludGVzdGluYWw= IFJlYmVsbA== IG1hdGNodXBz IGJsb2NrYnVzdGVy IExvcmVu IExldnk= IHByZWFjaGluZw== IFNlbmRpbmc= IFB1cnBvc2U= cmF4 Zmlm IGF1dGhvcml0YXRpdmU= IFBFVA== YXN0aWNhbA== IGRpc2hvbg== IGNoYXR0aW5n ICIkOi8= Q29ubmVjdGlvbg== IHJlY3JlYXRl IGRlbGlucXU= IGJyb3Ro IERpcnR5 IEFkbWlu em1hbg== IHNjaG9sYXJzaGlwcw== IDI1Mw== Y29udGFjdA== YWxzYQ== NzY3 Y3JlZW4= YWJiYWdl IDE5MTU= IGJsZW5kZWQ= IGFsYXJtZWQ= TGFuZ3VhZ2U= MzU2 IGJsZW5kcw== IENoYW5nZWQ= V29sZg== IGhlcGF0 Q3JlYXRpbmc= IHBlcnNlY3V0 IHN3ZWV0bmVzcw== YXJ0ZQ== IGZvcmZlaXR1cmU= IFJvYmVydG8= aW1wcm8= TkZM IE1hZ25ldA== RGV0YWlsZWQ= IGluc2lnbmlmaWNhbnQ= IFBPTElU IEJCUQ== IENQUw== IHNlYXc= YW1pbmVy bUw= ZW5kaWY= ZmluYWxz IDI2NQ== dWlzaA== IH0p IFByb2JsZW1z IGVtYmxlbQ== IHNlcmlvdXNuZXNz IHBhcnNpbmc= IHN1YnN0aXR1dGlvbg== IHByZXNzdXJlZA== IHJlY3ljbGVk YWxlYg== UnVieQ== IHByb2ZpY2llbmN5 RHJpdmVy IFdlc3Rlcg== Oic= QUZUQQ== IG1hbnRsZQ== IENsYXl0b24= ZmxhZw== IHByYWN0aXRpb25lcg== Y292ZXJlZA== IFN0cnVjdA== YWRkYWZp NDI1 IFRvd25zaGlw IEh5ZHJv TG91aXM= MzQz IGNvbmRv IFRhbw== IHV0aWxpemF0aW9u IG5hdXNlYQ== IERlbXM= cmlkZ2Vz cGF1c2U= IGZvcm11bGFz IGNoYWxsZW5nZXI= Mzc2 IGRlZmVjdGl2ZQ== IFJhaWx3YXk= IFB1Yk1lZA== IHlvZ3VydA== bGJz IE5vcmZvbGs= T1BF IE1vb2R5 IGRpc3RyaWJ1dG9y IHNjcm9sbHM= IGV4dHJhY3Rz U3Rhbg== IHZpYWJpbGl0eQ== IGV4cG9zZXM= IHN0YXJ2YXRpb24= IFN0ZXBz IERvZGQ= ZmV3 U1RE MzMy IGNsb3N1cmVz IGNvbXBsZW1lbnRhcnk= IFNhc2hh dW1weQ== IG1vbmV0 IGFydGljdWxhdGU= IERvY3Q= a2lsbGVy IHNjcmlt IDI2NA== IHByb3N0aXR1dGVz IHNldmVyZWQ= IGF0dGFjaG1lbnRz IGNvb2xlZA== TGV2 IEZhbGs= ZmFpbA== IHBvbGljZW1hbg== IERhZw== IHByYXllZA== IEtlcm5lbA== IGNsdXQ= IGNhdGg= IGFub21hbHk= U3Rvcm0= ZW1ha2Vy IEJyZWFrZmFzdA== dWxp b2lyZQ== Sko= aHo= T3BlcmF0aW9u IFNpY2s= MzU0 IEd1YXRlbWFsYQ== UmF0ZQ== IGV4cG9zdXJlcw== ZmFjZXM= IEFyY2hhZQ== cmFm IE1pYQ== IDIwMjU= IG9wYXF1ZQ== IGRpc2d1aXNlZA== IEhlYWRxdWFydGVycw== U2Fo IHBvdHM= OTc4 IE1hbGY= IGZyb3duZWQ= IHBvaXNvbm91cw== IENvbnZlcnM= ZWVrcw== IGNyYWI= LiIi IHRyZWFzb24= IHJhbmM= IGVzY2FsYXRpbmc= IHdhcnI= IG1vYnM= IGxhbXBz IFN1bnNoaW5l IEJydW5zd2ljaw== UGhvbmVz IHNwZWxsZWQ= IFNraXA= IDIwNTA= IDE5MTE= IFBsdXRv IEFtZW5k IG1lYXRz Mzg3 IHN0b21w IFpob3U= IExldmlhdGhhbg== IEhhemFyZA== YWR2 IE9yd2VsbA== IGFsb3Vk IGJ1bXBlcg== IEFuYXJjaA== dWJ1bnR1 IFNlcmlvdXM= Zml0dGluZw== IE9wdGlvbmFs IENlY2ls UkVBTQ== IHNlcm90b25pbg== IGN1bHRpdmF0ZQ== YWdvZ3Vl fVw= IG1vc3F1ZXM= IFN1bm55 IHJlYWN0aXZl cmV2b2x1dGlvbg== IEx1cA== IEZlZG9yYQ== IGRlZmVuc2VtYW4= IFZJRA== aXN0aW5l IGRyb3duaW5n IEJyb2FkY2FzdGluZw== IHRocmlsbGVy IFNjeQ== IGFjY2VsZXJhdGluZw== IGRpcmVjdHM= b2RpZWQ= YmlrZQ== ZHVyYXRpb24= IHBhaW5mdWxseQ== UmVkZA== IHByb2R1Y3Rpb25z IGdhZw== IHdoaXN0 IHNvY2s= IGluZmluaXRlbHk= IENvbmNlcm4= IENpdGFkZWw= IGxpZXU= IGNhbmRsZXM= b2dlbmVvdXM= YXJnZXI= IGhlYXZlbmx5 aW5mbGFtbWF0b3J5 UGVyZm9ybWFuY2U= Q3M= cnVjdG9zZQ== YXpha2k= IHBlc3NpbQ== IGluZmVyZW5jZQ== IHBvd2Q= IFpvZQ== IHBhaW50cw== IGRheno= cHRh LS0tLS0tLS0tLS0= IGluc3Bpcg== IEV4cGVyaW1lbnRhbA== IEtuaWZl cmVnb3I= Ym9ycw== IHNob3dlcnM= cm9tZWRh IHNhaW50 IGJlbmlnbg== IEppYW5n IGVudmlzaW9uZWQ= IHNocm91ZA== SUZU SE8= IHNodWZm IElDQw== IHNlZ3JlZw== IHJldmlzaXQ= aWdodGhvdXNl TGk= IHN1YnN0cmF0ZQ== IFNlYXM= IFJld2FyZA== IEhlcA== IEJyYXNz c2Jt IGVsaW1pbmF0ZXM= IHN0YW1pbmE= IFZBVA== IExvYW4= IGNvbnN0cmFpbnQ= IGFwcHJvcHJpYXRlZA== IHBlcw== IEFMRQ== cmFuZ2luZw== IDQwNA== Mzky IGludGVsbGVjdHVhbHM= YWNodQ== IHJlc3RydWN0dXJpbmc= IExldmlu IHJ1bmVz IGRlbGlnaHRmdWw= IGNhcmJvaHlkcmF0ZXM= IE1vZGVscw== IEV4cG8= IHRyYW5zcG9ydGluZw== YWxsb2M= IHJpbmdpbmc= U2Ftc3VuZw== IHNjYXJjZWx5 IFVSTHM= IE1BUw== IHByb3RvdHlwZXM= IG5hcnJhdG9y IENQVXM= Y2Ru IEJhcnRvbg== IGRlY2lkZWRseQ== IFNodQ== aXhpcg== b2Npb3Vz IE15c3Q= TmludGVuZG8= IHJldXNl IGZvcmdpdmVu RmV3 aW5pY2Fs bmF0 IHNlYW1sZXNz IEV2YQ== IEVWRQ== IEpP bGFuZGVycw== IHNvZnRlcg== bmVnaWU= IHRyYW5zaWVudA== IG9yYml0YWw= IGZ1bGZpbA== IEtvbQ== SG9wZWZ1bGx5 IGR5bmFtaWNhbGx5 IEh1bmdlcg== 5Zs= IEFybWVuaWE= ZWxtYW4= YmVydG8= IHBpZ2U= IElEcw== bGltaXQ= IHZlaW5z IHNvYXJpbmc= cGFja3M= R29sZGVu IENyYWI= aXN0b3I= IFJQTQ== ICQk Z3Jlc3Npb24= IGppaGFkaXN0 IGdhbWJsZQ== IGNhcmVn IGluZmxhdGVk RmFjZQ== IEZpcmVhcm1z IEVtbWFudWVs 4p0= IHNob2Nrcw== Z3JhYg== IHNwbGVuZA== IEhQVg== YWJvcnRpb24= QWJvdmU= RW50aXR5 cGxheWVycw== IGNvbW1lbmNlZA== dWxlbmNl IGZ1bGZpbGxtZW50 IGVtYm9kaW1lbnRz IFdlbGZhcmU= IGhhaWw= IDxA dHRlbg== IGNhdGNoZXI= IEphemVlcmE= IHZvbGNhbm8= IHN0YWJpbGl6ZQ== IEhhbmRsZXI= IGludGVuc2lmaWVk IEFicmFtcw== IGh1bWlsaWF0aW9u cGFjZWQ= NjA1 IENlbnRPUw== U3BlY2lmaWM= IGhlZWQ= IENBTQ== IEdhbGlsZQ== RGll IGFib2xpc2hlZA== IFRob21zb24= IFRlYWNoZXJz IFdhc3M= am9uZw== IElTQk4= IEFsbGllcw== c2hha2U= 5bc= dmljdA== SG93YXJk IGRlZW0= IGV4Y2VlZGluZ2x5 IFNtYXJ0c3RvY2tz aWJl IGRvb3J3YXk= IGNvbXBldGVk aWdtYXQ= IG5hdGlvbmFsaXN0cw== IGdyb29t IEtlZW4= IGRpc3Bvc2FibGU= ZGVjbA== IFRvbGtpZW4= IFNjaGVtZQ== IGJpb2Q= IGF2aWQ= IEVsb24= YWdhcg== IFRTQQ== Um9tYW4= IGFydGlmaWNpYWxseQ== IGFkdmlzb3Jz WEw= IEluZmVybm8= MzY2 IHRlZGlvdXM= IFBob3RvZ3JhcGh5 IENhcnJpZQ== IHRyb3Bl IFNhbmRyYQ== IGRlY2ltYWw= UXVlZW4= IEd1bmRhbQ== IE9N b3RlY2g= TkJB IDE5MzI= IGVudHJlbmNoZWQ= IE1hcmlvbg== IGZyYXRlcm5pdHk= TGFib3Vy SGVucnk= IGxhdGl0dWRl RWl0aGVy IGVuaGFuY2Vz IFBvdGVudGlhbA== IHNoaW5lcw== aWRhZA== IGJyZWFkdGg= IGNhcGFjaXRpZXM= IPCfmYI= IEJyb254 IHNleGVz IGRpZmZlcmVudGlhdGlvbg== IGhlYXZ5d2VpZ2h0 IFRhag== ZHJh IG1pZ3JhdGU= IGV4aGF1c3Rpb24= IFJVTg== ZWxzaXVz IEN1b21v IGd1aXRhcnM= IGNsb25lcw== IFNvbWV3 IFByeQ== LS0tLS0tLS0tLS0tLQ== IHdhcnJhbnRlZA== Y3ljbGVz IHNhbHZhZ2U= IGRpc2tz UkFOVA== IE5HT3M= IE1hcnRpYW4= IjpbeyI= IGFkZGljdHM= b2p1cmU= aWxsZXQ= IGFtYXppbmdseQ== YXJ0bWVudHM= cGl4ZWw= IEdQVXM= TGF5b3V0 6KM= IFRhbWls IEJhc2ls IGltcGFydGlhbA== IFN0cnVjdHVyZQ== Zm9yaw== YnJ5Y2U= IHJpZGdl IEhhbWJ1cmc= cmlvdXM= IGJsaXR6 Y2lnYXJldHRlcw== IGNhbm5lZA== NDAy IGlyb25pY2FsbHk= IGNvbXBhc3Npb25hdGU= IEhhd2tpbnM= LiM= IENhdGhlZHJhbA== IHJhbGxpZWQ= aW50ZXJuYWw= IHF1b3Rh c3Rha2Vz VEVYVA== bW9t IGNvbXBsZXRlcw== IDIzOA== IHNocnVn 44OR IE5pbnRo IHJldmlzZQ== IFByb3ZpZGVy IHRyZWFjaGVy IHF1YXNp IFBSRVM= IGRlcG9zaXRpb24= IGNvbmZpZGVudGlhbGl0eQ== aXNzb3Jz IGltYmFsYW5jZQ== IHNwYW5uaW5n IGFuZ3VsYXI= IEN1bA== Y29tbXVuaWNhdGlvbg== IE5vcmE= IEdlbml1cw== b3B0ZXI= IHNhY2tlZA== U3BvdA== IGZpbmVseQ== IENIUg== Mjgy d2F2ZXM= UGFsZXN0 IFJvaGluZw== Tkw= 6L8= IHNoaXR0eQ== IFNjYWxpYQ== NDc1 UHJvZ3Jlc3M= IHJlZmVyZW5jaW5n IGNsYXNzcm9vbXM= YWJlZQ== IHNvZA== aGVzaW9u NzA4 IFp1Y2tlcmJlcmc= IEZpbmlzaA== IFNjb3RpYQ== IFNhdmlvcg== IEluc3RhbGxhdGlvbg== YW50aGE= KC0= IDMwMg== IFB1bms= IGNyYXRlcg== eW91dHU= IHJvYXN0 IGluZmx1ZW5jaW5n IGR1cA== IEpS IEdyYXY= IHN0YXR1cmU= IGJhdGhyb29tcw== QXNpZGU= V2lraQ== bWVhbg== IFphaw== IE9uZXM= IE5hdGg= IGh5cGVydA== IGNvbW1lbmNlbWVudA== Q2l2aWw= IG1vZGVyYXRlbHk= IGRpc3RyaWJ1dG9ycw== IGJyZWFzdGZlZWRpbmc= IDk4MA== IFNpaw== IENpZw== IEFNRVI= UklQ IENhcmVlcg== dXN0aW5n IG1lc3NlZA== IGVo IEplbnNlbg== LyQ= IGJsYWNrbWFpbA== IGNvbnZlcnNpb25z IHNjaWVudGlmaWNhbGx5 IG1hbnRyYQ== cGF5aW5n IGl2b3J5 IENvdXJ0cw== T1VHSA== YXVudGxldA== U2VyaWFs QnJvdw== IEh1bmRyZWRz MzIz IHBlZQ== IGxpbnV4 IHN1Ym1lcg== IFByaW5jaXBhbA== NDg1 IERTTA== IENvdXNpbnM= IGRvY3RyaW5lcw== IEF0aGxldGljcw== IDMxNQ== IEthcm1h IGF0dGVudA== dXJnZXI= IHByZXNjcmliZQ== IGVuY2Fwcw== IENhbWU= IHNlY3JldGl2ZQ== IENyaW1lcw== ZG4= Q2xlYW4= IEVneXB0aWFucw== IENhcnBlbnRlcg== IGxs SHVt IE1pbG8= IGNhcGl0YWxpc3Rz IGJyaWVmZWQ= VHdl IEJhc2lu ZWx2ZXQ= TW9z IHBsdW5nZQ== IEthaXNlcg== IEZ1ag== aWxsaW4= IHNhZmVndWFyZHM= IG9zdGU= IE9wcG9ydHVuaXR5 IE1hZmlh IENhbGxpbmc= YXBh dXJiYW4= YnJ1c2g= aWxsYXJk Y8Op aW50ZWxsaWdlbmNl IExvYg== IERydWlk IHNtb290aGVy IGZvb3Rpbmc= IG1vdG9yaXN0cw== YXJjaXR5 IG1hc2N1bGluaXR5 IG1pc20= IGFiZG9taW5hbA== IFRhdmVybg== IFJvaA== IGVzY2FwZXM= c2lnbmVk QW50aG9ueQ== IHNhY3JpZmljaW5n IGludGltYWN5 IGFudGVyaW9y IEtvZA== IG1vdGlm IGdyYXo= IHZpc3VhbGl6YXRpb24= IGd1aXRhcmlzdA== IFRyb3Rza3k= bWFnaWM= RGFy IE1vcmk= IHdhcmRz IHRvaWxldHM= bGVzdA== IHRlbGVwb3J0 IFN1bmRheXM= IFBsYXQ= RVRT IGVTcG9ydHM= UGF0cmljaw== IEthdGhlcmluZQ== ZW5rbw== IGhhc3NsZQ== IE1pY2s= Z2dsZXM= IGhvYg== YWludGFpbg== IGFpcmJvcm5l IHNwYW5z IGNoaWxp IGFwZXJ0dXJl IHZvbHVudGVlcmVk IEluY2lkZW50 IEZyZXM= IFZldGVyYW4= YXVnaHRlcmVk aW5nbw== IHVuaW5zdXJlZA== Q0xPU0U= IGZ1c2U= IGVyb3RpYw== IGFkdmVydGlzZQ== cmFpc2luZw== VGV4dHVyZQ== IGF0dGVuZHM= IFJFQUw= dWRkbGVk IHNtb290 IDMwNQ== IFdpbGxpcw== IGJsb25k QW5hbHlzaXM= IFZU b25pY2E= IHN0cm9uZ2hvbGQ= UkY= Tk0= Lj4+ IHByb3NwZXJvdXM= IGJvYXN0ZWQ= Mjky IE1hbnVmYWN0dXJpbmc= UFJFU1M= Z3Jlbg== IHBoYXJtYWN5 IFJvY2tlZmVsbGVy a2Fp IHRodW1icw== IEh1dA== IG1vdGhlcmJvYXJk IGd1YXJkaWFucw== IEFsdGVy bGx1bGFy IHNoYWNr IHdpc2VseQ== IGJhY2tib25l ZXJ2YQ== IHN1aWNpZGVz IE1jR3JlZ29y aWphaA== RW1lcg== IEJyYXY= IGRlc2lnbmF0ZQ== UE9TVA== cHJvZHVjZWQ= IGNsZWFuc2luZw== aXJsd2luZA== ZXhpc3RlbnQ= IEh1bXBo IFBheW5l IHZlc3RlZA== xaE= IHN0cmluZ2VudA== aW9uYQ== IHVuc3Vi IHN1bW1lZA== IEhlcmN1bGVz c3ViamVjdA== IFJhZ25hcg== IE5vcw== IGNoYXJhY3Rlcml6YXRpb24= IHNhdnZ5 IERhd3Nvbg== IENhc2lubw== IGZyaQ== IEJhcnJpZXI= IG1pc2luZm9ybWF0aW9u IGluc3VsYXRpb24= IGNvcnJpZG9ycw== IGFpcnBsYW5lcw== IE5vY3Q= YWhp IDE5MTY= a2I= YXJtYWM= IHNodW4= IHNjaGVtYQ== IGhvcnJpZmllZA== IDIzOQ== YXVuZGVycw== TkI= aWF0ZXM= ZXJpdHk= IFNoYXJk IHJhcml0eQ== IGdyb3VwZWQ= IEdoYW5h YWdhaW5zdA== IEJpb2xvZ2ljYWw= IEF3YXJl b3dlbGw= z4Q= IEJlYXU= c2hhdw== SGFjaw== IEp1bGl1cw== VVNT b2xzb24= YXVuYQ== Y3J1 IE1hdXJpY2U= IElr IHNlcXVlbmNpbmc= IHJhZGljYWxz ICg/LA== dmlydHVhbA== IGFueXdheXM= IHJlcGVyYw== IGhhbmRsZXJz IGhlc2l0YW50 6YM= IE1G cGxlbWVudGF0aW9u YXNzb2NpYXRlZA== IGNhbXBhaWduZWQ= IFl1ZQ== dXRhdGlvbnM= IFlvZ2E= IHNpbW1lcg== IHJvZHM= IG1lbG9keQ== IGNvbnZveQ== dmlkZW9z IHNjcmVlbmVk TmVn b2NoZW1pY2Fs ICgpKQ== IHVsdHJhcw== IGFudGlw IElzbGFuZGVycw== NzA0 IGZldGlzaA== IHJpZGljdWxvdXNseQ== IEthcnQ= IG1pdG9jaG9uZHJpYWw= IGludGVyZmVyaW5n QnVpbGRlcg== IG92ZXJmbA== IGFjbmU= IE11ZA== IEtlcnI= ZmxleA== IFBvc3RhbA== IEJhbHRpYw== NDc3 IFBlcnNvbnM= b3VyYWdl SEI= IE11c2U= IEltbW9ydGFs IERyaXZpbmc= IHBldGl0aW9ucw== IHN1YnNjcmlwdA== IHNvcmNl IFByb2Nlc3Nvcg== dXRvbg== U29ueQ== IHBob24= IHJhY2Vk IEFudGhyb3A= IGRheXRpbWU= IEV4ZXJjaXNl QWRkaW5n IGVuZ2FnZXM= IFF1YWxjb21t IG1pcmFjbGVz IG1lbWVz IERyaW5r IE9yaW9sZXM= IGhhaXJz IFBvbGFy YXRob20= IHNsaXBwZXJ5 IFJlbXk= IGNhcmFtZWw= IFlFQVI= IGFsaw== SWdu YXV0aW9u IE1lcmxpbg== IENyYW4= IGFwb2xvZ2llcw== IDQxMA== IG91dGluZw== IE1lbW9yaWVz YXBwb2ludGVk IGNvdW50ZXJlZA== dWxk cG9zaW5n IGZpcmV3YWxs IFdhc3Q= IFdldA== d29ya2Vk c2VsbGVy IHJlcGVhbGVk ZXJlbw== YXNzdW1pbmc= QkxJQw== bWl0ZQ== IENFT3M= IENoYXBlbA== ZWxsaWdlbnQ= X19fX19fX19fX19fX19fX19fX19fX19f RG9n IHdhcnQ= IHN1YnNjcmliZXI= c3BvcnRz IGJlZ2dlZA== IE1W IHNlbWlm ZXRoaWNhbA== IHByZWFjaA== IHJldml0YWw= IHB1bml0aXZl IHNob3J0Y3V0cw== IGluc3RpdHV0ZWQ= IFdhcnNhdw== IGFiZG9tZW4= IEtJTkc= IHN1cGVyaW50ZW5kZW50 IGZyeQ== IEdlbw== VE9S IGNvbnRyYWRpY3Rpb25z YXB0aWM= IGxhbmRzY2FwZXM= YnVncw== IGNsdXN0 IHZvbGxleQ== Y3JpYmVk IHRhbmRlbQ== IHJvYmVz V0hBVA== IHByb21vdGVy IGVsb3F1 cmV2aWV3ZWQ= IERL IFBsYXRv IGZwcw== VGFuaw== IERlcnJpY2s= IHByaW9yaXRpemU= YXNwZXI= IEhvbmR1cmFz IENvbXBsZXRlZA== bmVj IG1vZw== bmly IE1heW8= REVG c3RhbGw= aW5uZXNz IFZvbGtzd2FnZW4= IHByZWNhdXRpb24= IE1lbGw= aWFr aXN0cmllcw== IDI0OA== IG92ZXJsYXBwaW5n U2VuYXRl IEVuaGFuY2U= cmVzeQ== cmFjaWFs T1JUUw== IE1vcm1vbnM= U3Ryb25n IENvY2g= TWV4aWNv IE1hZHVybw== IGphcnM= IGNhbmU= V2lr b2xsYQ== aWZmZXJlbmNl IHBoeXNpY2lzdA== IE1hZ2dpZQ== IDI4NQ== IGRlcGljdGlvbg== IE1jTGFyZW4= SnU= IHNsb3dz IGNvbW1pc3Npb25lcnM= IFdpbGxvdw== IEV4cGxvcw== aG92YWg= IHRlY2huaWNpYW4= IGhvbWljaWRlcw== IEZsYXY= IFRydW1hbg== IDEwMDAw dWN0b3I= IHNoYWRlcg== TmV3c2xldHRlcg== NDU3 IHJldmVy IGhhcmRlbmVk IHdoZXJlYWJvdXRz IHJlZGV2ZWxvcA== IGNhcmJz IHRyYXZlcnM= IHNxdWlycmVs IGZvbGxvd2Vy IHNpbmdz NTA4 IHJhYmJpdHM= ZW1vbml1bQ== IGRvY3VtZW50aW5n IG1pc3VuZGVyc3Rvb2Q= KSc= Umljaw== Z2dpZXM= IHByZW1pZQ== IHNrYXRpbmc= IHBhc3Nwb3J0cw== IGZpc3Rz YWdlZGRvbg== SGF3 QUNQ MDgw IFRob3VnaHRz IENhcmxzb24= IHByaWVzdGhvb2Q= aHVh IGR1bmdlb25z IExvYW5z IGFudGlz IGZhbWlsaWFyaXR5 IFNhYmI= b3BhbA== IEluaw== c3RyaWtl IGNyYW0= IGxlZ2FsaXplZA== IGN1aXNpbmU= IGZpYnJl VHJhdmVs IE1vbnVtZW50 T0RZ ZXRoeQ== IGludGVyc3RhdGU= IFBVUg== ZW1wb3Jhcnk= IEFyYWJpYW4= ZGV2ZWxvcGVk IHNhZGRsZQ== IGdpdGh1Yg== IE9mZmVy IElTUA== cm9sZXQ= IFNVUEVS IERlbmlz IG11bHRpcGxpZXI= IHN0aXJyZWQ= SW50ZXJlc3RpbmdseQ== IGN1c3RvbWFyeQ== IGJpbGxlZA== aGV4 IG11bHRpcGxpZWQ= IGZsaXBwaW5n IENyb3NieQ== IGZ1bmRhbWVudGFscw== aWFl IFBsYXllZA== IEF0b20= YW1hem9u IEZsYW0= ZWV6 YWN0aXZhdGVk IHRhYmxlc3Bvb24= IGxpYmVyYWxpc20= IFBhbGlu IFBhdGVs TnVt IFRBTQ== IHN1cm4= IFJlbG9hZGVk IGNvaW5lZA== Il0s IENsYXNo IEFndQ== IHByYWdtYXRpYw== IEFjdGl2YXRl IDgwMg== IHRyYWlsZXJz IHNpbGhvdQ== IHByb2Jlcw== IGNpcmN1cw== IEJhaW4= IExpbmRzYXk= IEFiYmV5 RGVsaXZlcnk= IGNvbmNlc3Npb24= IGdhc3Rybw== IFNwcml0ZQ== xJ8= YW5kZWw= IGdpbW0= IGF1dG9iaQ== IFR1cnRsZQ== IHdvbmRlcmZ1bGx5 IEhhcmFt IFdvcmxkd2lkZQ== IEhhbmRsZQ== IHRoZW9yaXN0cw== IHNsZWVr IFpodQ== b2dyYXBoaWNhbGx5 RUdB IE93bmVycw== YXRocw== IEFudGFyY3RpYw== bmF0YWw= PSIi ZmxhZ3M= YGBgYA== IHN1bA== S2g= IHBvdGFzc2l1bQ== IGxpbmVtYW4= IGNlcmVhbA== IFNlYXNvbnM= IDIwMjI= IG1hdGhlbWF0aWM= IGFzdHJvbm9tZXJz cHJvZmVzc2lvbmFs IGZhcmVz Y2tub3dsZWQ= IGNoaQ== IHlvdW5nc3RlcnM= IG1pc3Rha2VubHk= IGhlbWlzcGhlcmU= IERpdmluaXR5 cm9uZQ== ICIs cmluZ3M= IGF0dHJhY3Rz dmFuYQ== 5bk= Q0FQ IHBsYXlsaXN0 IHBvcmNo 44Gj IGluY29ycG9yYXRlcw== IHNvYWs= IGFzc2VydGluZw== IFRlcnJvcmlzbQ== IFBhYmxv SmE= Y2VzdGVy IGZlYXJpbmc= IFByYXllcg== IGVzY2FsYXRlZA== R1c= IHJvYmU= IEJyaWdodG9u YWNpc3Rz IFN5bXBob255 IER3YXJm IFBhcmFkZQ== IExlZ28= IGluZXhwbA== IGxvcmRz bGVhZg== UkFH bGliZXI= IGNpZ2Fycw== IEplaG92YWg= NjA2 V0lORE9XUw== IExpYmVyaWE= ZWJ1cw== SGVhdnk= IGx1YnJpYw== IFJX YW5ndWFnZXM= IG5hcnJvd2Vk Y29tcHV0ZXI= IEVtYmVy IG11cmRlcmluZw== IGRvd25zdHJlYW0= IFR1bHM= IFRhYmxlcw== VG9waWM= IEFjY3VyYWN5 PS8= bG9zdA== IFJlaQ== IHByb2dyZXNzZXM= YmVhcg== IGVzdGFibGlzaG1lbnRz SnVzdGlu IFBlYWNo IEdvbWV6 5b8= IFRyaWFuZ2xl SWRlbnQ= IEhpdmU= UmVzb3VyY2Vz IG1peGVz IEFzc3VtaW5n TXU= IGh5cG9j IHNhbmU= IFdhbg== aWRpb3Vz U3VjY2Vzcw== IGlv QW5nZWw= IGRhbmdlcm91c2x5 IENyZWF0dXJl V09SSw== Ols= IEthdHJpbmE= TGlzdGVuZXI= TWlsbGVy IElkbGli aGFuZw== IGNpcmN1bXZlbnQ= aHJlZg== IGNlbGVzdGlhbA== IFdlZWtz IFB1Zw== IERhbHRvbg== IHN1YnBvZW5h dWt1 IHBlcnNpc3RlZA== cGVp b2xkaW5n IERvY3VtZW50cw== IEhhc3Q= IENFTlQ= IHByaW1lcg== IHN5bm9ueW1vdXM= IG5pYg== b21icw== IG5vdGF0aW9u IERpc2g= IEF0bW9zcA== IGZvcmJpZA== IEFORw== cGF0dGVybg== bG9z IHByb2plY3RpbGVz YnJvd24= LiIs IFZlbm9t IGZpZXJjZWx5 dWJsaXNoZWQ= IFVyYW4= IE5pY2FyYWc= NDEw IENBTA== T1RPUw== IE1pcmFjbGU= IEVuY2hhbnQ= IGd1YXJkaW5n YXBwZW5k QXR0YWNo IGxldmVsZWQ= IGNvbmRvbXM= aWhpbGF0aW9u NjQ5 IG5pZ2h0bWFyZXM= IFRIRVk= IFNUQVJU IEtpbm4= IHJvb21tYXRl IGh5Z2llbmU= b3BwaW5n Sm9i IGx2bA== IFZFUg== IEtlZXBpbmc= YWJldGlj IGZvcm1hdHRpbmc= ZXJhbGE= IHJldmlzaW9ucw== IHJlc3VyZw== VGVs IEdvb2RtYW4= MzUz cG9k IGluZGlzcA== IFRyYW5zbGF0aW9u IGdvd24= IE11bmQ= IGNpcw== IGJ5c3RhbmQ= Y29sbGVjdA== IFB1bmphYg== YWN0aXZlbHk= IEdhbWI= dGVsbA== IGltcG9ydGluZw== Z2VuY2llcw== IGxvY29t IEJyaWxs SG9seQ== IEJlcmdlcg== IHNob3dkb3du IHJlc3BvbmRlcnM= SUxZ IHRha2Vkb3du bGV0ZWQ= IG1hdHRlcmVk IHByZWRpY3RpdmU= IG92ZXJsYXk= R1BV IFZpY2s= IGNvbnZleWVk VGFi cGVlcg== U2Nhbg== IGRlZmVuc2l2ZWx5 dmFl IGFwcHJvdmluZw== IHRpZXJz IFZpYQ== cXVlcmFkZQ== IFNhdWRpcw== IGRlbW9saXNoZWQ= IFByb3BoZQ== IG1vbm8= IGhvc3BpdGFsaXR5 SEFN IEFyaWVs TU9E IFRvcmFo IGJsYWg= IEJlbGFydXM= ZXJlbnRpYWw= IFR1Yw== IGJhbmtlcg== Mzk3 IG1vc3F1aXQ= IFNjaWVudGlzdA== IE11c2ljYWw= IGh1c3Q= U2hpZnQ= IHRvcm1lbnQ= IHN0YW5kb2Zm RWR1Yw== IEZvZw== IGFtcGxpZmllcg== U2hhcGU= SW5zdGFuY2U= IENyaXRpY3M= IGRhZW1vbg== SG91c3Rvbg== IG1hdHRyZXNz IElERg== IG9ic2NlbmU= IEFtZXI= aGV0dGk= IGNvbXBpbGluZw== MzUy dmVyZXR0 IFJlZHVjdGlvbg== aXN0cmF0aW9u IEJsZXNzZWQ= IEJhY2hlbG9y MzE2 IHByYW5r IFZ1bGNhbg== ZGRpbmc= IG1vdXJuaW5n IFF1aW50 IEJsYXN0ZXI= dGVzdGluZw== IHNlZGltZW50 Pj4+ IEV0ZXJuaXR5 IFdIRVJF IE1hemU= IHJlYWN0aW5n IEFsdg== b21zZGF5 IENSQQ== IHRyYW5zbGF0b3I= IGJvZ3Vz YXR1 V2Vic2l0ZQ== b2xscw== IGJhcHRpc20= IHNpYmxpbmc= IEF1dHVtbg== dmV6 44Gu6Q== Z3VhcmRz R2Vvcmc= YXNzYWRvcnM= IEZyZXVk IGNvbnRpbmVudHM= IFJlZ2lzdHJ5 QmVybmll lprlo6s= IHRvbGVyYW50 IFVX IGhvcnJpYmx5 OTk1 IE1JREk= IGltcGF0aWVudA== b2NhZG8= ZXJp IFdvcnN0 IE5vcnJpcw== IFRhbGtpbmc= IGRlZmVuZHM= ZW5zYWJsZQ== IDIwMjE= IGFuYXRvbXk= TGV3 IGRyYXdlcg== IENhbmJlcnJh IHBhdHJpb3RpYw== 6b6N5Zaa5aOr IEF2Zw== QVJN IHVuZGlzY2xvc2Vk IGZhcmV3ZWxs NDU5 YmFibGU= IEFsbGlzb24= T0xPRw== IGNvbmNv dGlnaHQ= IEFDUEk= IE1pbmVz bGljaA== IOKUnA== cmVwcmVzZW50ZWQ= MjAwMDAw IGVudGh1c2lhc3Q= T1RT Ymls IEluZ3JlZGllbnRz IGludmVudG9y IE15U1FM wqDCoMKg IEFCT1VU d2l0aGlu IG1r QnVs IEZha2U= IGRyYWNvbmlhbg== V2E= aGVsbQ== IFRlcnJhbg== ZXJ2aWxsZQ== IGNvbW1vbnBsYWNl U0laRQ== ICI8 cmVwbGFjZQ== b2dyYXBocw== IFNFTEVDVA== aW5jaWJsZQ== IE1vc3RseQ== IFNoZWZmaWVsZA== IElERQ== dWdnbGU= IGNpdGF0aW9ucw== aHVyc3Q= IFVuaXg= IHVubGVhc2g= IFBpcGVy IE5hbm8= IHN1Y2N1bWI= IHJlbHVjdGFuY2U= IDI1MDA= IE1lcmNoYW50 IHdpcmV0 IGNvbWJvcw== IEJpcnRoZGF5 IGNoYXJjb2Fs IFVQUw== IEZhaXJmYXg= IGRyaXZld2F5 IFRlaw== IFBpdGNo b3ZlcmU= IHRlY2huaWNpYW5z IEFjdHVhbA== ZmxhdGlvbg== IEZpc2NhbA== IEVtcHR5 YW5hbW8= IG1hZ25lc2l1bQ== IHNsdXQ= IGdyb3dlcnM= SW52ZXN0aWdhdG9ycw== KCk6 IFNhdGVsbGl0ZQ== IEtleW5lcw== bWlzc2l2ZQ== bGFuZQ== IGJvcm91Z2g= MzQ0 IFRFQU0= IEJldGhlc2Rh Q1Y= aG93ZXI= IFJBRA== IGNoYW50 IFJpeQ== IGNvbXBvc2l0aW9ucw== IG1pbGRseQ== IG1lZGRsaW5n IGFnaWxpdHk= YW5lZXJz NTAx IHN5bnRo bGluZ2Vy Mjkx IGV4Y2xhaW1lZA== UGFydHk= IGNvbnRhbWlu IE1hbm9y IFJlc3BvbmQ= IHByYWlzaW5n IG1hbm5lcnM= ZmxlZXQ= U3VtbWVy IEx5bmQ= IERlZmluaXRlbHk= Z3JpbQ== IGJvd2xpbmc= c3RyaQ== 55s= eW50 IG1hbmRhdGVz RElW IHJlY29uY2lsZQ== dmlld3M= IERhbW9u dmV0dGU= Rmxv IEdyZWF0ZXN0 aWxvbg== aWNpYQ== IHBvcnRyYXlhbA== IGN1c2hpb24= NTA0 MTk3OQ== b3NzYWw= QXBwbGlj c2NyaXB0aW9u IG1pdGlnYXRpb24= QVRT cGFj IGVyYXNlZA== IGRlZmljaWVuY2llcw== IEhvbGxhbmRl IFh1 IGJyZWQ= IHByZWduYW5jaWVz ZmVtaW4= IGVtcGg= IHBsYW5uZXJz IG91dHBlcg== dXR0ZXJpbmc= IHBlcnBldHJhdG9y IG1vdHRv IEVsbGlzb24= IE5FVkVS IGFkbWl0dGVkbHk= QVJJ IEF6ZXJiYWlqYW4= IG1pbGxpc2Vj IGNvbWJ1c3Rpb24= IEJvdHRsZQ== IEx1bmQ= IFBz IERyZXNz IGZhYnJpY2F0ZWQ= IGJhdHRlcmVk IHNpZGVs IE5vdHRpbmc= Rm9yZWlnbg== IEplcm9tZQ== MDIw IEFyYml0 IGtub3Rz IFJJR0hU TW92aW5n 44GZ IHN1cmdlcmllcw== IGNvdXJ0aG91c2U= IG1hc3RlcmVk IGhvdmVyaW5n IEJyYW4= IEFsaXNvbg== IHNhZmVzdA== bWlsaXRhcnk= IGJ1bGxpZWQ= IGJhcnJhZ2U= UmVhZGVy RVNF IEdlb2dyYXBoaWM= VG9vbHM= MzE0 IEdlZWs= cm90aA== Z2xlcnM= IEZJTg== z4E= IEFzdG9u YWx0ZXJu NDg4 IHZldGVyaW4= R2FtZXI= IGludGVs cmVuY2hlcw== U2hpZWxk IGFtbmVzdHk= IEJoYXI= IHBpbGVk IGhvbm9yYWJsZQ== IEluc3RpdHV0ZXM= IHNvYWtlZA== IGNvbWE= IEVGRg== MzQx Ynl0ZXM= IEdtYWls bGVpbg== IENhbmFkaWVucw== bWF0ZXJpYWw= SWw= IGluc3RydWN0b3Jz IEtZ IGNvbmNlaXZl dWJi IFBvc3NpYmxl IGVhc2luZw== IENocmlzdGluYQ== IGNhcmlj IEhEUg== Uk9N IHNob3ZlbA== ZGVsZXRl IHB1ZmY= IENoYW5naW5n IHNlYW1sZXNzbHk= QXR0cmlidXRl IGFjcXVpc2l0aW9ucw== YWtlcnk= IEVG IGF1dGlzdGlj IFRha2Vz IFBvd2Rlcg== IFN0aXI= NTEw IEJ1YmJsZQ== c2V0dGluZ3M= IEZvd2xlcg== IG11c3RhcmQ= IG1vcmVvdmVy IGNvcHlyaWdodGVk IExFRHM= MTUwMA== 5ok= IEhJUw== ZW5m IGN1c3RvZA== IEh1Y2s= R2k= IGltZw== QW5zd2Vy Q3Q= amF5 IEluZnJhc3RydWN0dXJl IGZlZGVyYWxseQ== TG9j IG1pY3JvYmVz IG92ZXJydW4= ZGRz b3RlbnQ= YWRpYXRvcg== Pj4+Pj4+Pj4= IHRvcm5hZG8= IGFkanVk IGludHJpZ3VlZA== IHNp IFJldmVsYXRpb24= cHJvZ3Jlc3M= IGJ1cmdsYXJ5 IFNhaXlhbg== IEthdGh5 IHNlcnBlbnQ= IEFuZHJlYXM= IGNvbXBlbA== ZXNzbGVy IFBsYXN0aWM= IEFkdmVudA== IFBvc2l0aXZl IFF0 IEhpbmR1cw== cmVnaXN0ZXJlZA== dWxhcml0eQ== IHJpZ2h0ZW91c25lc3M= IGRlbW9uaWM= dWl0aXZl IEJEUw== IEdyZWdn Y2lh IENydXNhZGU= IFNpbmFp V0FSRQ== Kyg= IG1lbGw= IGRlcmFpbA== eWFyZHM= QXN0 IG5vdGljZWFibHk= IE9iZXI= UmFt IHVubm90aWNlZA== IHNlcQ== YXZhZ2U= VHM= IDY0MA== IGNvbmNlZGU= IF0p RmlsbA== IGNhcHRpdml0eQ== IEltcHJvdmVtZW50 IENydXNhZGVy YXJhb2g= TUFQ 5pc= IHN0cmlkZQ== YWx3YXlz Rmx5 Tml0 IGFsZ2Fl IENvb2tpbmc= IERvb3Jz TWFsbGV5 IHBvbGljZW1lbg== 44GN IGFzdHJvbmF1dA== YWNjZXNzaWJsZQ== NDk1 IFJBVw== Y2xpZmZl dWRpY3JvdXM= IGRlcGVuZGVk YWxhY2g= IHZlbnR1cmVz cmFrZQ== IHRpdHM= IEhvdQ== IGNvbmRvbQ== b3Jtb25hbA== IGluZGVudA== IHVwbG9hZGluZw== Rm9vdG5vdGU= SW1wb3J0YW50 IDI3MQ== IG1pbmRmdWw= IGNvbnRlbmRz Q3Jh IGNhbGlicg== IE9FQ0Q= cGx1Z2lu RmF0 IElTUw== IER5bmFtaWNz YW5zZW4= Njg2 Jyks IHNwcml0ZQ== IGhhbmRoZWxk IEhpcHA= PX49fg== VHJ1c3Q= IHNlbWFudGljcw== IEJ1bmRlcw== IFJlbm8= IExpdGVyYXR1cmU= c2Vuc2U= R2FyeQ== IEFlZw== IFRyaW4= RUVL IGNsZXJpYw== IFNTSA== IGNocmlzdA== IGludmFkaW5n aWJ1 IGVudW0= YXVyYQ== IGFsbGVnZQ== IEluY3JlZGlibGU= QkJD IHRocnU= IHNhaWxlZA== IGVtdWxhdGU= IGluc2VjdXJpdHk= IGNyb3U= IGFjY29tbW9kYXRpb25z IGluY29tcGV0ZW50 IHNsaXBz IEVhcnRocXU= c2FtYQ== SUxMRQ== IGlQaG9uZXM= YXNha2k= IGJ5ZQ== IGFyZA== IGV4dHJhcw== IHNsYXVnaHRlcmVk IGNyb3dkZnVuZGluZw== cmVzc28= IGZpbGli IEVSUk9S IFRMUw== ZWdn IEl0YWw= IGVubGlzdA== IENhdGFsb25pYQ== IFNjb3Rz IHNlcmdlYW50 IGRpc3NvbHZl Tkg= IHN0YW5kaW5ncw== cmlxdWU= SVE= IGJlbmVmaWNpYXJ5 IGFxdWFyaXVt WW91VHViZQ== IFBvd2VyU2hlbGw= IGJyaWdodGVzdA== IFdhcnJhbnQ= U29sZA== V3JpdGluZw== IGJlZ2lubmluZ3M= IFJlc2VydmVk IExhdGlub3M= aGVhZGluZw== IDQ0MA== IHJvb2Z0b3A= QVRJTkc= IDM5MA== VlBO R3M= a2VybmVs dHVybmVk IHByZWZlcmFibGU= IHR1cm5vdmVycw== IEhlbHM= U2E= IFNoaW5qaQ== dmVo IE1PRFVMRQ== VmlvbA== IGV4aXRpbmc= IGphYg== IFZhbmlsbGE= IGFjcm9u IEdhcA== YmVybg== QWs= IE1jR3U= IGVuZGxlc3NseQ== IEZhcmFnZQ== IE5vZWw= VmE= TUs= IGJydXRl IEtydQ== IEVTVg== IE9saXZpYQ== 4oCg IEthZg== IHRydXN0aW5n IGhvdHM= MzI0 IG1hbGFyaWE= IGpzb24= IHBvdW5kaW5n b3J0bWVudA== Q291bnRyeQ== IHBvc3Rwb25lZA== IHVuZXF1aXY= Pyks IFJvb25leQ== dWRkaW5n IExlYXA= dXJyZW5jZQ== c2hhcGVzaGlmdGVy IEhBUw== b3NhdGU= IGNhdmVybg== IGNvbnNlcnZhdGlzbQ== IEJBRA== IG1pbGVhZ2U= IGFycmVzdGluZw== VmF1bHRz IG1peGVy RGVtb2NyYXRpYw== IEJlbnNvbg== IGF1dGhvcmVk ODAwMA== IHByb2FjdGl2ZQ== IFNwaXJpdHVhbA== dHJl IGluY2FyY2VyYXRlZA== IFNvcnQ= IHBlYWtlZA== IHdpZWxkaW5n cmVjaWF0aW9u 15nX UGF0Y2g= IEVtbXk= IGV4cXU= dHRv IFJhdGlv IFBpY2tz IEdyeQ== cGhhbnQ= IGZyZXQ= IGV0aG4= IGFyY2hpdmVk JS0= Y2FzZXM= IEJsYXpl IGltYg== Y3Y= eXNz aW1vbnk= IGNvdW50ZG93bg== IGF3YWtlbmluZw== IFR1bmlzaWE= IFJlZmVy IE1K IHVubmF0dXJhbA== IENhcm5lZ2ll aXplbg== IE51Z2dldHM= aGVzcw== IGV2aWxz NjQ3 IGludHJvZHVjdG9yeQ== bG92aW5n IE1jTWFob24= IGFtYmlndWl0eQ== TGFiZWw= IEFsbWlnaHR5 IGNvbG9yaW5n IENsYXVz c2V0dGluZw== TlVMTA== IEZhdm9yaXRl IFNJRw== Pig= IFNoaXZh IE1heWVy IHN0b3JtZWQ= IENvdmVyYWdl d2VhcG9ucw== aWdoYW0= IHVuYW5zd2VyZWQ= IGxldmU= IGNveQ== Y2Fz YmFncw== YXN1cmVk U2VhdHRsZQ== IFNhbnRvcnVt c2VyaW91cw== IGNvdXJhZ2VvdXM= IFNvdXA= IGNvbmZpc2NhdGVk IC8vLw== IHVuY29udmVudGlvbmFs IG1vbXM= IFJvaGluZ3lh IE9yY2hlc3RyYQ== IFBvdGlvbg== IGRpc2NyZWRpdA== IEZJTA== Zml4ZWQ= IERlZXI= ZG9p IERpbWVuc2lvbg== IGJ1cmVhdWNyYXRz ZXRlZW4= IGFjdGlvbkdyb3Vw b2ht IGJ1bXBz IFV0aWxpdHk= IHN1Ym1hcmluZXM= cmVuaGVpdA== cmVzZWFyY2g= IFNoYXBpcm8= IHNrZXRjaGVz IGRlY2VwdGl2ZQ== IFZpbA== ZXNhbWU= IEVzc2VudGlhbGx5 IHJhbXBhZ2U= aXNreQ== IG11dHRlcmVk dGhyaXRpcw== IDIzNg== ZmV0 YmFycw== IHB1cGls IFRob3U= b1M= c29uZw== IGZyYWN0dXJlZA== IHJldmVydA== cGljdHVyZQ== IGNyaXRlcmlvbg== dXNoZXI= IHJlcGVyY3Vzc2lvbnM= IFZpbnRhZ2U= IFN1cGVyaW50ZW5kZW50 T2ZmaWNlcnM= IGZsYWdnZWQ= IGJsYW1lcw== IGludmVyc2U= b2dyYXBoZXJz IG1ha2VzaGlmdA== IGRldm9pZA== IGZvc3NpbHM= IEFyaXN0b3RsZQ== IEZ1bmRz IGRlcGxldGVk IEZsdQ== IFl1YW4= IHdvZXM= IGxpcGlk IHNpdHU= cmVxdWlzaXRlcw== IGZ1cm5pc2g= IFNhbWFy IHNoYW1lZnVs IGFkdmVyc2VseQ== IGFkZXB0 IHJlbW9yc2U= IG11cmRlcm91cw== dWNrbGVz IEVTTA== IDMxNA== c2VudA== IHJlZGVm IENhY2hl IFB1cnM= aWdhbnM= IDQ2MA== IHByZXNjcmlwdGlvbnM= IGZyZXM= RnVjaw== b2NyYXRlcw== VHdlbnR5 IFdlaXJk IFRvZ2dsZQ== IENhbGxlZA== aXRpemVucw== IHBvdWx0cnk= IGhhcnZlc3Rpbmc= 44Km44K5 Qm90dG9t IGNhdXRpb25lZA== dG4= Mzk2 IE5pa2tp IGV2YWx1YXRpb25z IGhhcmFzc2luZw== IGJpbmRpbmdz IE1vbmV0YXJ5 IGhpdHRlcnM= IGFkdmVyc2FyeQ== dW50cw== IHNldGJhY2s= IGVuY3J5cHQ= IENhaXQ= IGxvd3M= ZW5nZXM= IE5vcm4= IGJ1bGJz IGJvdHRsZWQ= IFZveWFnZXI= MzE3 IHNwaGVyZXM= cG9saXRpY3M= IHN1YnRyYWN0 IHNlbnNhdGlvbnM= IGFwcGFsbGluZw== IDMxNg== IGVudmlyb25tZW50YWxseQ== IFNURU0= IHB1Ymxpc2hlcw== NTYw IGRpbGlnZW5jZQ== NDg0 IGFkdmlzZXM= IHBldHJvbA== IGltYWdpbmluZw== IHBhdHJvbHM= IEludGVnZXI= IEFzaGVz YWN0dXM= IFJhZGlhbnQ= IExU aXRhYmlsaXR5 aHRha2luZw== U2V0dGluZw== IG51YW5jZWQ= IFJlZWY= IERldmVsb3BlcnM= Tmk= cGllY2Vz OTkw TGljZW5zZQ== IGxvd2Vycw== IE90dG9tYW4= MzI3 b29v IHF1aXR0aW5n bWFya2V0cw== QmVoaW5k IGJhc2lu IGRvY3M= YW5pZQ== Zmxhc2g= Y3Rs IGNpdmlsaXplZA== IEZ1a3VzaGltYQ== Il0sIg== IEtT IEhvbmVzdGx5 YXJhdA== IGNvbnN0cnVjdHM= IExhbnM= IERpcmU= IExJS0U= IFRyb3VibGU= IHdpdGhob2xkaW5n IE9ibGl2aW9u IHNhbml0eQ== YW55YQ== Q29uc3Q= IGdyb2Nlcg== IENlbHNpdXM= IHJlY291bnRlZA== IFdpZmU= Qm9yZGVy YXRlcmVk aGFwcHk= IHNwb2lsZXI= IGxvZ2ljYWxseQ== SGFsbA== IHN1Y2NlZWRpbmc= IHBvbHltb3JwaA== IGF4ZXM= IFNob3RndW4= IFNsaW0= IFByaW5jaXBsZXM= IExldGg= YXJ0YQ== IHNjb3I= U2NyZWVuc2hvdA== IHJlbGF4YXRpb24= IyQjJA== IGRldGVycmVudA== aWRkeQ== IHBvd2VybGVzcw== IGxlc2JpYW5z IGNob3Jkcw== IEVkaXRlZA== c2VsZWN0ZWQ= IHNlcGFyYXRpc3Rz MDAwMg== IGFpcnNwYWNl IHR1cm5hcm91bmQ= IGN1bm5pbmc= UEFUSA== UG9seQ== IGJvbWJlZA== IHRpb24= eHM= IHdpdGhob2xk IHdhZ2Vk IExpYmVydGllcw== RmxhZw== IGNvbWZvcnRpbmc= NDU0 IElyaXM= YXJlcnM= IHJhZw== IHJlbG9jYXRlZA== IEd1YXJhbnQ= IHN0cmF0ZWdpY2FsbHk= IGdhbW1h dWJlcnR5 IExvY2toZWVk Z3Jlcw== IGdyaWxsZWQ= IExvd2U= c3RhdHM= IFJvY2tz IHNlbnNpbmc= IHJlbnRpbmc= IEdlb2xvZ2ljYWw= 2KfY b3Ryb3A= IHNldw== IGltcHJvcGVybHk= NDg2 IOKWoA== IHN0YXJ2aW5n IEJq RGlzY3Vzc2lvbg== MzI4 IENvbWJv IEZpeGVz TkFU IHN0cml2aW5n dGhvcmE= IGhhcnZlc3RlZA== IFBpbmc= IHBsYXlmdWw= IGF2ZW51ZXM= IG9jY3VwYXRpb25hbA== IHdha2Vz IENvdXJpZXI= IGRydW1tZXI= IEJyb3dzZXI= IEhvdXRo aXR1 IGFwcGFyZWw= cGFzdGU= IGh1bnRlZA== IFNlY29uZGx5 bGFpbg== WFk= IFBJTg== aWNvbnM= IGNvY2t0YWlscw== IHNpemFibGU= IGh1cmRsZXM= ZXN0aW5hbA== IFJlY3JlYXRpb24= IGVjbw== NjQ4 IERpZWQ= bWludA== IGZpbmdlcnByaW50cw== IGRpc3Bvc2U= IEJvc25pYQ== dHN5 MjIwMA== IGluc3BlY3RlZA== IEZvdQ== IGZ1c3M= IGFtYnVzaA== IFJhaw== IG1hbmlmZXN0ZWQ= UHJvc2VjdXQ= IHN1ZmZpY2U= cmVuY2Vz IGNvbXBlbnNhdGVk IEN5cnVz IGdlbnVz IFdvbHZlcmluZQ== IFRyZW5kcw== IGhpa2Vz IFNlZW4= IGVucm9s Q29sZA== IHBvbGl0ZWx5 IFNsYXY= IFJ1cGVydA== IGV5ZXdpdG5lc3M= IEFsdG8= IHVuY29tcA== IHBvc3Rlcmlvcg== TXVzdA== IEhlcno= IHByb2dyZXNzaXZlbHk= IDIzNA== IGluZGlmZmVyZW5jZQ== IEN1bm5pbmdoYW0= IGFjYWRlbWlh IHNld2Vy IGFzdG91bmRpbmc= IEFFUw== cmF0aGVy IGVsZGVzdA== IGNsaW1icw== IEFkZHM= IG91dGNyeQ== IGNvbnRhZw== IEhvdXNlcw== IHBlcHQ= IE1lbGFuaWE= aW50ZXJlc3RlZA== IFVDSA== IFJvb3Rz IEh1YmJhcmQ= IFRCRA== IFJvbWFuaWFu ZmlsZW5hbWU= U3RvbmU= IEltcGw= IGNocm9tb3NvbWU= Q2xl ZHg= IHNjcmFtYmxlZA== IFB0 IDI0Mg== T1BMRQ== IHRyZW1lbmRvdXNseQ== U3RyZWV0 IGNyYXZpbmc= IGJ1bmRsZWQ= IFJH cGlwZQ== IGluanVyaW5n IGFyY2FuZQ== UGFydGljaXA= IEhlcm9pYw== c3R5 IHRvcHBpbmc= IFRlbXBlc3Q= cmVudGljZXM= Ymg= IHBhcmFub2lh IFVuaWNvZGU= IGVncmVnaW91cw== IFwn IE9zd2FsZA== IGdyYXZlbA== IFNpbXBzb25z IGJsYW5k IEd1YW50YW5hbW8= V3JpdGVy bGluZXJz IERpY2U= SkM= IHBhcml0eQ== IHNpZGVk IDIzNw== IFB5cnJoYQ== YXR0ZXJz ZGs= RmluZQ== Y29tcGFu IGZvcm11bGF0ZWQ= IElkb2w= aWxlcnM= aGVtb3Ro IEZhdg== IGludHJ1c2lvbg== IGNhcnJvdHM= IExheWVy IEhhY2tlcg== IC0tLS0tLS0tLS0tLS0tLS0= IG1vZGVyYXRpb24= 6YE= b2NvYw== IGNoYXJhY3Rlcml6ZQ== IFRlcmVzYQ== IHNvY2lvZWNvbm9taWM= IHBlcms= IFBhcnRpY2lwYXRpb24= dHJhaW5pbmc= IFBhdWxv cGh5cw== IHRydXN0d29ydGh5 IGVtYm9kaWVk IE1lcmNo Y3VycmVuY3k= IFByaW9yaXR5 IHRlYXNpbmc= IGFic29yYmluZw== IHVuZmluaXNoZWQ= IENvbXBhcmlzb24= IGRpc3BsZQ== d3JpdGVycw== IHByb2Zlc3Npb25z IFBlbmd1aW4= IGFuZ3JpbHk= IExJTks= Njg4 IENvcnJlc3BvbmQ= IHByZXZhaWxlZA== IGNhcnRlbA== bHA= YXNtcw== IFJlZGVtcHRpb24= IElzbGFtaXN0cw== ZWZmZWN0cw== ZG9zZQ== IExhdHRlcg== IEhhbGlmYXg= IHZhcw== IFRvcGljcw== IE5hbWVk YWR2ZXJ0aXNpbmc= enph SUNFUw== IHJldGFyZGVk YWNoYWJsZQ== IFB1cHBldA== IEl0ZW1MZXZlbA== IHJldHJhY3Q= IGlkZW50aWZpYWJsZQ== QWFyb24= IEJ1c3Rlcg== c29s aGVsbGU= YXNzZW1i SG9wZQ== cmFuZ2Vk QmE= IFB1cmNo 6YA= IFNpcmk= IGFycml2YWxz IDE5MTI= IHNob3J0ZW5lZA== IDMxMg== IGRpc2NyZXBhbmN5 IFRlbXBlcmF0dXJl IFdhbHRvbg== IGtpbmRlcmc= cG9saXQ= IHJlbWl4 IGNvbm5lY3RvcnM= 44OY44Op IEthemFraHN0YW4= ZG9taW5hdGVk IHN1Z2Fycw== aW1ibGU= IFBhbmlj IERlbWFuZA== IENvbG9ueQ== b25lbg== IE1FUg== Nzc1 dXJpYQ== YXphYXI= IERlZ3JlZQ== UHJp IHN1bnNoaW5l IDI1MQ== IHBzeWNoZWRlbGlj IGRpZ2l0YWxseQ== IEJyYXVu IHNoaW1tZXI= IHNoYXZl IFRlbGVzYw== IEFzdHJhbA== IFZlbmV6dWVsYW4= IE9H IGNyYXdsaW5n SW50ZWc= IEZlYXRoZXI= IHVuZm9sZGluZw== IGFwcHJvcHJpYXRpb24= IOijj+g= IE1vYmlsaXR5 IE5leQ== LS4= YmlsdA== TElO IFR1YmU= IENvbnZlcnNlbHk= IGtleWJvYXJkcw== IENhbw== IG92ZXJ0aA== IGxhdXJl Pj5c IFZpcGVy YWNoYQ== T2Zmc2V0 IFJhbGVpZ2g= IEphZQ== Sm9yZGFu anA= IHRvdGFsaXRhcmlhbg== Q29ubmVjdG9y IG9ic2VydmVz IFNwYXJ0YW4= IEltbWVkaWF0ZWx5 IFNjYWw= Q29vbA== IHRhcHM= IHJvYXI= UGFzdA== IGNoYXJz IEJlbmRlcg== IFNoZWxkb24= IHBhaW50ZXI= IGJlYWNvbg== IENyZWF0dXJlcw== IGRvd250dXJu IGhpbmRlcg== IEFuZHJvbWVkYQ== w5s= Y2NvbGk= IEZpdG5lc3M= ZXRyaWNhbA== IHV0aWxpemVz IHNlbmF0ZQ== IGVuc2VtYmxl IGNoZWVycw== VFc= IGFmZmx1ZW50 a2ls cnlsaWM= b3JkZXJpbmc= Q29tcHV0ZXI= IGdydWVzb21l b3N0aWNz IFViaXNvZnQ= IEtlbGxleQ== IHdyZW5jaA== IGJvdXJnZW9pc2ll SUJMRQ== IFByZXN0b24= d29ybg== YXJpc3Q= cmVhdGluZw== IHN0YWluZWQ= YXJpbmU= IHNsaW1l RU5O IGNoZXN0cw== IGdyb3VuZHdhdGVy YW5ub3Q= IFRyYXk= IExvY2tl IENUUg== IGR1ZGVz IEV4dGVybmFs IERlY29kZXI= IHBhcmFtZWQ= IE1lZGxpbmU= ODA5 IERpbm5lcg== cnVwYWw= Z3o= IEd1bQ== IERlbW8= amVl IGRo YmVybWFu YXJjaHM= IGVucXU= IEVwc3RlaW4= IGRldmFzdGF0aW9u IGZyaWVuZHNoaXBz IEFyZA== IDIzMQ== IFJ1Ymlu IERpc3RhbmNl IHNwdXJyZWQ= IGRvc3NpZXI= IG92ZXJsb29raW5n XFxcXFxcXFxcXFxcXFxcXA== Rm9yZXN0 IENvbWVz XCIs IElyYW5pYW5z IGZpeHR1cmVz TGF1Z2hz IGN1cnJ5 IEtpbmdzdG9u IHNxdWFzaA== IGNhdGFsb2d1ZQ== IGFibm9ybWFsaXRpZXM= IGRpZ2VzdGl2ZQ== Li4uLi4uLi4u IHN1Ym9yZGluYXRl b2dseQ== IDI0OQ== TWlkZGxl IG1hc3NhYw== IGJ1cmdlcnM= IGRvd25zdGFpcnM= IDE5MzE= Mzk0 IFZH IGxhc2Vycw== IFNpa2g= IEFsZXhh ZGVyaXZlZA== IGN5Y2xpc3Q= 44Gu6a2U b25lbGluZXNz ISEhISEhISE= IGJ1ZmZz bGVnYXRl IHJhcGluZw== IHJlY29tbWVuZGluZw== cm9yZWQ= IG11bHRpY3VsdHVyYWw= dW5pcXVl IGJ1c2luZXNzbWVu IHVuZWFzeQ== IE1BUA== IGRpc3BlcnNlZA== Y2lwbGluZQ== SmVzcw== IEtlcmFsYQ== 5ac= IGFic3RyYWN0aW9u U3Vydg== VWg= IHByaW50ZXJz aWph b3dkZXI= IGFuYWxvZ291cw== IEFTUA== YWZlcg== IHVuZm9sZGVk IGxldmVsaW5n IGJyZWFjaGVk IEhlYXJpbmc= IG5hdA== IHRyYW5zbGF0aW5n Y3JpdGljYWw= IGFudGFnb25pc3Q= IFllc3RlcmRheQ== IGZ1enp5 d2FzaA== bWVyZQ== IGJld2lsZA== IE1hZQ== VmlyZ2lu cGhyYXNl IHNpZ25hbGVk IEhJR0g= IHByb3Rlc3Rlcg== IGdhcm5lcg== dW5rbm93bg== IGtheQ== IGFiZHVjdGVk IHN0YWxraW5n YW1u IGRlc2VydmluZw== IFJpdg== IEpvcmdl IHNjcmF0Y2hpbmc= IFNhdmluZw== aXBpbmc= IHRlYXNl IG1pc3Npb25hcnk= IE1vcnJvdw== VElNRQ== UHJlc2VudA== IGNoZW1vdGhlcmFweQ== dGVybmVzcw== IEhvbWVz IFB1cmR1ZQ== IHN0YXVuY2g= IFdoaXRuZXk= IFRIRVJF zrw= aWF0dXM= IEVybmVzdA== IERlcGxveQ== IGNvdmV0ZWQ= Rk1M IERpYWxvZ3Vl IGV4aXRlZA== ZnJ1aXQ= IG5lcmQ= IjoiIiwi IHZpdm8= cnVseQ== NDYw IEFtZW4= cmVoZW5zaWJsZQ== IOKY RElS IGFkaGVyZW5jZQ== IGNoZXc= IENva2U= IFNlcmdlaQ== ZGlnaXRhbA== IE5lY2s= Z2VudGx5 ZW50aGFs Lyk= IHdlYXJ5 IGd1aXNl IENvbmNvcmQ= IE9uaW9u YXRjaGVy IGJpbmdl IERpcmVjdGl2ZQ== IG1hbm5lZA== YW5zaw== IGlsbHVzaW9ucw== IGJpbGxpb25haXJlcw== Mzgz b2x5bg== b2R5bmFtaWM= IFdoZWF0 IEFsaWM= IGNvbG91cmVk IE5BRlRB YWJv IG1hY3Jvcw== aW5kZXBlbmRlbnQ= c3dlZXQ= IHNwYWM= IEthYnVs IMQ= ZW1l IGRpY3RhdGVk IHNob3V0cw== PXs= IHJpcHBpbmc= IFNoYXk= IENyaWNrZXQ= ZGlyZWN0ZWQ= IGFuYWx5c2Vk IFdBUlJBTlQ= YWdvbnM= IEJsYXplcnM= IGNoZWVyZWQ= IGFyaXRobWV0aWM= IFRhbno= Mzcz IEZsYWdz IDI5NQ== IHdpdGNoZXM= IEluY2x1ZGVk IEdhaW5lZA== IEJsYWRlcw== R2Ft IFNhbWFudGhh IEF0bGFudGlz IFByYXR0 IHNwb2lsZWQ= IElC IFJhbWlyZXo= UHJvYmFibHk= cmVybw== IE5n IFdhcmxvY2s= dHA= IG92ZXJoZQ== IGFkbWluaXN0cmF0aW9ucw== IHRpbnQ= IHJlZ2ltZW50 IHBpc3RvbHM= IGJsYW5rZXRz IGVwaXN0 IGJvd2xz IGh5ZHJhdWxpYw== IGRlYW4= IGp1bmc= IGFzY2VuZA== NzA1 IFNhbnRpYWdv w64= IHVuYXZvaWQ= IFNoYW1hbg== cmVi IHN0ZW1taW5n OTk4 IE1H c3RpY2tz ZXN0aGVzaWE= RVJP IG1vcmJpZA== IEdyaWxs IFBvZQ== YW55bA== IGRlbGV0aW5n IFN1cnZlaWxsYW5jZQ== IGRpcmVjdGl2ZXM= IGl0ZXJhdGlvbnM= IFJveA== IE1pbGt5 RmF0aGVy IHBhdGVudGVk NDQ3 IHByZWN1cnNvcg== IG1haWRlbg== IFBoZW4= IFZlZ2Fu IFBhdGVudA== S2VsbHk= UmVkZGl0b3I= IG5vZHM= IHZlbnRpbGF0aW9u IFNjaHdhcno= IHdpemFyZHM= IG9taW5vdXM= IEhlYWRz IEJH IGx1bWJlcg== IFNwaWVs IGlzRW5hYmxlZA== IGFuY2VzdHJhbA== IFNoaXBz IHdyZXN0bGVy cGhp IHl1YW4= IFJlYmVsbGlvbg== IGljZWJlcmc= IG1hZ2ljYWxseQ== IGRpdmVyc2lvbg== YXJybw== eXRobQ== IFJpZGVycw== IFJvYmJpZQ== IEthcmE= IE1haW50ZW5hbmNl IEhlcmI= IGhhcm1z cGFja2Vk IEZlaW5zdGVpbg== IG1hcnJ5aW5n IGJsZW5kaW5n IFJhdGVz IDE4ODA= IHdyaW5r IFVuY2g= IFRvcmNo ZGVzY3JpYmVk IGh1bWFub2lk aWxpdGF0aW5n IENvbnY= IEZlbGQ= SUdIVFM= IHdoaXN0bGVibG93ZXI= b3J0bXVuZA== ZXRzeQ== YXJyZXR0 IE1vbm8= IElrZQ== IENOQkM= IFdBWQ== IE1ETUE= IEluZGl2aWR1YWxz IHN1cHBsZW1lbnRhbA== IHBvd2VyaG91c2U= IFN0cnU= Rm9jdXM= YXBoYWVs IENvbGxlZw== YXR0aQ== WkE= IHBlcmVubg== IFNpZ25hdHVyZQ== IFJvZG5leQ== IGN1YmVz aWRkbGVk IERhbnRl IElOVg== aWxpbmd1YWw= IEN0aA== IHNvZmE= IGludGltaWRhdGU= IFJvZQ== IERpcGxvbQ== IENvdW50cmllcw== YXlzb24= IGV4dHJhZGl0aW9u IGRpc2FibGluZw== IENhcmRpZmY= IG1lbW9yYW5kdW0= IFRyYWNl ID8/Pw== c2VjdG9y IFJvdWhhbmk= IFlhdGVz IEZyZWV6ZQ== IGJsYWRkZXI= TW90b3I= IFByb21pc2U= YW50YXN5 IGZvcmVzZWVhYmxl IENvbG9nbmU= Y29udGFpbmVy IFRyZWVz IEdvcnM= IFNpbmNsYWly IGJhcnJpbmc= a2V5ZQ== IHNsYXNoZWQ= IFN0YXRpc3RpY2Fs 6Yc= IOKWug== QWxsb3dz IGh1bWlsaXR5 IGRyaWxsZWQ= IEZ1cm4= NDQz IHNld2FnZQ== IGhvbWVwYWdl IGNvdXJ0eWFyZA== IHZpbGU= IHN1YnNpZGlhcmllcw== YWpv ZGlyZWN0b3J5 IGFtbW9u VmVycw== Y2hhcmdlcw== IH19 IENoYWlucw== IDI0Ng== bm9i IHBlcmNlcHQ= IGdyaXQ= IGZpc2hlcm1lbg== IElyYXFpcw== IERJU1RS IEZVTEw= IEV2YWx1YXRpb24= Z3JhcGg= YXRpYWw= IGNvb3BlcmF0aW5n IG1lbGFu IGVubGlnaHRlbmVk IGFsaQ== dGFpbGVk IHNhbHV0ZQ== IHdlYWtlc3Q= IEJ1bGxkb2dz VUE= IEFsbG95 IHNlbWVu b2NlbmU= IFdpbGxpYW1zb24= c3By LOKAlA== IEdG aXR0ZW5z QmVhdA== IEp1bms= aXBoYXRl IEZhcm1lcnM= IEJpdGNvaW5z aWdlcnM= ZGg= IExveWFs cGF5ZXI= IGVudGVydGFpbmVk IHBlbm5lZA== IGNvdXBvbg== UXVldWU= IHdlYWtlbmluZw== Y2Fycnk= IHVuZGVyZXN0aW1hdGU= IHNob290b3V0 IGNoYXJpc21hdGlj IFByb2NlZHVyZQ== IHBydWRlbnQ= aW5hbmNlcw== IHJpY2hlcw== IGNvcnRpY2Fs IHN0cmlkZXM= IGRyaWI= IE9pbGVycw== NTQw IFBlcmZvcm0= IEJhbmdrb2s= IGV1dGg= U0VS IHNpbXBsaXN0aWM= dG9wcw== Y2FtcGFpZ24= UXVhbGl0eQ== IGltcG92ZXJpc2hlZA== IEVpc2VuaG93ZXI= IGF1Z21lbnQ= IEhhcmRlbg== IGludGVydmVuZWQ= IGxpc3RlbnM= IEtvaw== IHNhZ2U= IHJ1YmJpc2g= IERlZA== IG11bGw= cGVsbGluZw== IHZpZGVvdA== UHJvZHVjdGlvbg== REo= bWlhaA== IGFkYXB0YXRpb25z IG1lZGljYWxseQ== IGJvYXJkZWQ= IGFycm9nYW5jZQ== IHNjcmFwcGVk IG9wcHJlc3M= Rk9STUFUSU9O IGp1bmN0aW9u NDE1 RUVFRQ== U2tpbGw= IHN1YmR1 IFN1Z2dlc3Q= IFBldHQ= IGxldHQ= IE1hbmlw IENhZg== IENvb3BlcmF0aW9u VGhlcg== IHJlZ2FpbmVk tuY= cmVmbGVjdA== IHRodWdz IFNoZWxieQ== IGRpY3RhdGVz IFdlaW5lcg== IEhhbGU= IGJhdHRsZWdyb3VuZA== c2NoaWxk IGNvbmRvbA== aHVudA== b3NpdG9yaWVz IGFjY3VzZXM= RmlsZW5hbWU= IHNocmk= IG1vdGl2YXRl IHJlZmxlY3Rpb25z TnVsbA== IExvYmJ5 pbU= IFNBVEE= IEJhY2t1cA== 0YM= bmlu IENvcnJlY3Rpb24= IGp1aWN5 dXRyYQ== IFByaWM= IHJlc3RyYWluaW5n IEFpcmJuYg== IEFycmVzdA== IGFwcHJvcHJpYXRpb25z IHNsb3Blcw== IG1hbnNsYXVnaHRlcg== IHdvcmtpbmdz IEh1c3M= IEZyZXk= TGVhdmU= IEhhcm1vbnk= IEZlZGVy IDQzMA== IHRyZW5jaA== IGdsYWRseQ== IGJ1bGxwZW4= IEdhdQ== Ym9uZXM= IGdyb292ZQ== IHByZXRleHQ= 44WL IHRyYW5zbWl0dGVy IENvbXBvbmVudA== IHVuZGVyYWdl IEVtcGlyZXM= VGlsZQ== IG95 IE1hcnZpbg== IENBUw== IGJsb3Nz IHJlcGxpY2F0ZWQ= IE1hcmluZXJz TWFyY3Vz IEJsb2Nrcw== IGxpYmVyYXRlZA== IGJ1dHRlcmZseQ== RmVlbA== IGZlcm1lbnRhdGlvbg== IHlvdXR1YmU= IG9mZmVuZA== IFRlcm0= cmVzaXN0 IGNlc3NhdGlvbg== IGluc3VyZ2VuY3k= IGJpcg== IFJhaXNl NTk1 IGh5cG90aGVzZXM= NTAy IHBsYXF1ZQ== b2NyYXQ= IGphY2tldHM= IEh1ZmZQb3N0 YW1vbmc= IGNvbmZlcg== NDg3 IExpbGx5 IGFkYXB0aW5n IEZheQ== IHNob3ZlZA== dmVj IHJlZmluZQ== IGdvbg== IGd1bm1lbg== emFp IFNodXR0bGU= IEl6YW4= IDE5MTM= IHBsZXRob3Jh wrfCtw== IDUxMA== IHB1YmVydHk= IDI0MQ== IFdlYWx0aA== IEFsbWE= IE1FTQ== IEFkdWx0cw== Q2Fz cHJpc29u UmFjZQ== IHdhdGVycHJvb2Y= IGF0aGxldGljaXNt IGNhcGl0YWxpemU= IEp1aWNl IGlsbHVtaW5hdGVk IFBhc2NhbA== IGlycml0YXRpb24= IFdpdG5lc3Nlcw== YWRsZQ== IEFzdHJv IGZheA== IEVsdmlz UHJpbWFyeQ== IExpY2g= IEVsdmVz IHJlc2lkaW5n IHN0dW1ibGU= MzE5 IFBLSw== IGFkdmVyc2FyaWVz RE9T IFJpdHVhbA== IHNtZWFy IGFyc29u aWRlbnRhbA== IHNjYW50 IG1vbmFyY2h5 IGhhbGZ0aW1l IHJlc2lkdWU= IGluZGlnbg== IFNoYXVu IEVsbQ== YXVyaQ== QWZm V0FUQ0g= IEx5b24= aGVscHM= MzYx IGxvYmJ5aXN0 IGRpbWluaXNoaW5n IG91dGJyZWFrcw== IGdvYXRz ZmF2b3JpdGU= IE5haA== c29uaWFu IEJvb3N0ZXI= IHNhbmRib3g= IEZhcmU= IE1hbHRh IGF0dFJvdA== IE1PUg== bGRl IG5hdmlnYXRpbmc= VG91Y2g= IHVudHJ1ZQ== IERpc2FzdGVy IGx1ZGljcm91cw== UGFzc3dvcmQ= IEpGSw== YmxvZ3Nwb3Q= NDE2 IFVOREVS ZXJuYWw= IGRlbGF5aW5n VE9Q IGltcGxhbnRz IEFWRw== IEh1Z2U= YXR0cg== IGpvdXJuYWxpc3RpYw== IFBleXRvbg== IElB UmFw Z29hbA== IFByb2dyYW1tZQ== IHNtYXNoaW5n d2l2ZXM= cHJpbnRsbg== IFBsYWd1ZQ== aW51cw== RUVQ IGNydWlzZXI= IFBhcmlzaA== dW1pbml1bQ== IG9jY3VwYW50cw== IEppaGFk bW9w IHBpbnQ= IGhlY3Q= IE1lY2Nh ZGlyZWN0b3I= IEZ1bmRpbmc= IE1peGVk IHN0YWc= VGllcg== IGd1c3Q= IGJyaWdodGx5 b3JzaQ== IHVwaGlsbA== UkQ= IGxlc2lvbnM= IEJ1bmR5 bGl2aW91cw== IGJpb2xvZ2lzdA== IEZhY3VsdHk= IEF1dGhvcml6YXRpb24= IDI0NA== QWxsb3c= 77g= IEdpdWw= IHBlcnRpbmVudA== b3RhdXI= ZXNzZQ== IFJvb2Y= IHVubWFubmVk MzUx IFNoYWs= IE9yaWVudA== IGVuZGFuZ2Vy RGly IHJlcGxlbg== ZWRpZW50 IHRhaWxvcg== IGdhZGdldHM= IGF1ZGlibGU= 4piG TmljZQ== IGJvbWJhcmQ= IFJhcGU= IGRlZmlhbmNl IFRXTw== IEZpbGlwaW5v IHVuYWZmZWN0ZWQ= ZXJ2YXRpdmVz IHNvYXJlZA== IEJvbHRvbg== IGNvbXByb21pc2luZw== IEJyZXdlcnM= UkFM IEFITA== aWN5Y2xl IHZhbXBpcmVz IGRpcHBlZA== b3llcg== IFhJSUk= IHNpZGV3YXlz IFdhc3Rl IERpc3M= IOKUnOKUgOKUgA== JC4= IGhhYml0YXRz IEJlZWY= dHJ1dGg= dHJhaW5lZA== c3BsaXQ= UnVz QW5keQ== IEJyYW0= UkVQ cGlk 6KOF IE11dGFudA== QW5pbQ== IE1hcmluYQ== IGZ1dGlsZQ== aGlnaGVzdA== ZnJlcXVlbmN5 IGVwaWxlcHN5 IGNvcGluZw== IGNvbmNpc2U= IHRyYWNpbmc= IFNVTg== cGFuZWw= IFNvcGhpZQ== IENyb3dsZXk= IEFkb2xm IFNob290ZXI= IHNoYWt5 IElH IExpZXM= IEJhcmJlcg== cGtn IHVwdGFrZQ== IHByZWRhdG9yeQ== VUxUUw== Lyoq IGludG94aWNhdGVk IFdlc3Ricm9vaw== b2RkZXI= aGVtZW50 IGJhc2VtYW4= QVBE c3RvcmFnZQ== IEZpZnR5 ZWRpdG9y R0VO VVRJT04= aXJ0aW5n IHNld2luZw== cmlmdA== IGFnb255 IFNhbmRz IDI1NA== Q2FzaA== IGxvZGdl IHB1bnQ= TmF0dXJhbA== IElkZWFz IGVycm9uZW91cw== IFNlbnNvcg== IEhhbm5pdHk= IDE5MjE= IG1vdWxk IEdvbg== a2F5YQ== IGFub255bW91c2x5 IEtFWQ== IHNpbXVsYXRvcg== V2ludGVy IHN0cmVhbWVk NTA3 PyIs IHRlYXNlZA== IGNvZWZmaWNpZW50 IHdhcnRpbWU= IFRIUg== Jycu IEJhbmtpbmc= bXBpcmU= IGZhbmRvbQ== IGxpYQ== R2E= IGRvd25oaWxs IGludGVycHJldGluZw== SW5kaXZpZHVhbA== Tm9ybQ== IGplYWxvdXN5 Yml0Y29pbg== IHBsZWFzdXJlcw== IFRveXM= IENoZXZyb2xldA== IEFkdmlzb3I= SVpF IHJlY2VwdGlvbnM= NzA2 Q3Jv IDI2Mg== IGNpdHJ1cw== aXJ1 UmV2aWV3ZXI= amVjdGVk VUVT YW56 MTk4MQ== IFdvcmtlcg== IGNvbXBsaWVk b3Jlc2NlbnQ= Y29udGluZW50YWw= VG9u IFByaXNt IFNoZWVw IDI4OA== bm94 IFZvZw== T3Jk IHJlYWxtcw== dGVr IGlycmlnYXRpb24= IGJpY3ljbGVz IGVsZWN0cm9uaWNhbGx5 cG9seQ== dGFsbA== KCkpOw== IGFlc3RoZXRpY3M= IEludGVncmF0ZWQ= RXhwbG9yZQ== IGR1bms= NDc2 cGFpbg== IEphY3F1ZXM= IERtaXQ= RnJhbWVz IHJldW5pdGVk IGh1bWlk RHJv UG9saXRpY2Fs IHlvdXRoZnVs IGVudGFpbHM= IG1vc3F1aXRv MzYz c3BlY2llcw== IGNvb3JkaW5hdGluZw== IE1heWhlbQ== IE1hZ251cw== TW91bnQ= SW1wcm92ZWQ= IFNUQVRF QVRUTEU= IGZsb3dlZA== IHRhY2tsZWQ= IGZhc2hpb25lZA== IHJlb3JnYW4= aXZhcmk= ZmluZ2Vy IHJlbHVjdGFudGx5 ZXR0aW5n IFZhbmQ= eW91bmc= IEdhcmxhbmQ= IHByZXN1bXB0aW9u IGFtZW5pdGllcw== IFBsZWFzYW50 b25lbnRpYWw= IE94eQ== IG1vcmFscw== IFlhaA== UmVhZHk= U2ltb24= RW5o RGVtb24= IGNsaWNo TW9uaXRvcg== IERV IHdlbGNvbWVz IHN0YW5kb3V0 IGRyZWFkZnVs IGJhbmFuYXM= IGJhbGxvb25z aG9vdGluZw== YmFzaWM= IHN1ZmZpeA== IGR1bHk= Y2Fubw== Q2hhaW4= YXRvcw== IGdlb3BvbGl0aWNhbA== ICgm IEdlbWluaQ== w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IGFjcXVpdHRlZA== THVjaw== cHJvdGVjdA== MTAyNA== IHNjYXJjaXR5 IG1pbmRmdWxuZXNz ZWNpZGVk RE4= cHJpbWU= IFByZXNpZGVudHM= IFZJREVP ICjiiJI= YWRkb2Nr Tk9S IFBydQ== cHVu IExPTA== KSkpKQ== IExpcXU= IFNBUw== IHN0eWxpbmc= IHB1bmlzaG1lbnRz IG51bWI= IGFzY2VydGFpbg== IFJvY2tpZXM= Zmx1 VGh1bWJuYWls IHBlcnBldHJhdGVk IFNlbWk= IGRpc2FybQ== IE9sZGVy IEV4Y2VwdGlvbg== IGV4cG9uZW50aWFsbHk= IENvbW11bml0aWVz IGFib2xpc2g= IFBhcnRuZXI= cHRvbXM= IDc3Nw== IEZvbGV5 IENhc2Vz IGdyZWFzZQ== IFJlYmlydGg= R3JvdW5k IDsp IERvY3RyaW5l aWtpbmk= WWU= IEJsb3Nzb20= IHBlcnNpc3Rz YmlsbA== IGluZnVzaW9u IGJ1ZGRpZXM= OTEx IFBhdGllbnQ= IGRlbW9z IGFjcXVhaW50YW5jZQ== IFBhdw== YXRhcmk= IHhtbA== IGZhc2NpbmF0aW9u IFNlcnZl z4I= YnJhbmRlZA== IGF6 UmV0dXJucw== IG92ZXJzaGFkb3c= IHJvYW0= IHNwZWVkeQ== bnVtYmVyZWQ= aGVsaWFs IGRpc2NpcGxl IGFzc3VyYW5jZXM= Z2l2ZW4= cGVjdGluZw== IE5hdGFsaWU= 55Sw IG1vc3F1aXRvZXM= cm90ZWlu IG51bWVyaWM= IGluZGVwZW5kZW50cw== IHRyYW5zaXRpb25hbA== IHJlYWN0aW9uYXJ5 IE1lY2hkcmFnb24= ZG9jdG9y IHNob3J0ZXN0 IHNlcXVlbnRpYWw= IEJhYw== IEFjY291bnRz 44GM YWNoeQ== cmFjdGl2ZQ== IFJlZ2ltZW50 IGJyZWF0aHRha2luZw== ZmZpY2llbmN5 IEJhdGVz IDMxMQ== IHdhcmRyb2Jl ZnRz IEJlcms= U2ltcGx5 IFJpdmVyc2lkZQ== aXZlcmluZw== aWRlbnRpYWw= bHVjZW50 IGVucmljaGVk IENvbnZlcg== IEdpdmluZw== 44OZ IGxlZ2FsaXpl IEZUQw== IGZyZWFraW5n TWl4 IHRlcnJlc3RyaWFs ZXNpYW4= Y2llbnRz V2luZw== TE9BRA== IGxlZGdl IFZpb2xlbnQ= IE1ldGFsbA== IDMwOA== IHNvdXRoZWFzdGVybg== aGV0dG8= TWVhdA== IHNsb3dkb3du IHJldHJlYXRlZA== SmVyZW15 ZW5kYXM= KioqKio= ZXJpYw== IHJlaW5z b3BwYWJsZQ== IEh1bWFuaXR5 ZWFyYW5jZXM= cmlnYW4= Q2FtZXJh IHdhaXZlcnM= c29j IGFsdGVyYXRpb24= dHJhbnNmb3Jt IENlbWV0ZXJ5 NTA2 IGluZGVmaW5pdGU= IHN0aW11bGF0aW5n eWc= NjAz IFNvcA== IGRlc2NyaXB0aXZl UGhhc2U= IEVkbXVuZA== IHBuZXVtb25pYQ== dmVudHVz QW1i IGxhYm9yYXRvcmllcw== IEV4Y2x1c2l2ZQ== dWdhcg== V2VyZQ== IG1hbGZ1bmN0aW9u IGhvbW9zZXh1YWxz IC0tLS0tLS0= dW5p IHR1cmJpbmVz IEVxdWl0eQ== RHU= IG1pbmRlZA== IFJI IEJsYWNraGF3a3M= IGZlYXRz IDE3MDA= cmVwbA== MzYy bGFkZW4= IGluZGlzcGVuc2FibGU= bHlzcw== dHRp IHJlZWw= IGRpdmVydGVk IGxpa2VuZXNz IHN1YnNjcmlwdGlvbnM= IGZpbmdlcnQ= IGZpbHRoeQ== ZGVzdHJ1Y3Q= ZHJhZnQ= IEJlcm5hcmRpbm8= bGF1bmNo IHBlcnBsZXg= IFNVTQ== Y2FyYg== IHN3ZWF0ZXI= IFZlbnR1cmU= IEphZw== IENlbGVi IFZvdGVycw== IHN0ZWFkZmFzdA== IGF0aGxldGljcw== IEhhbnNvbg== IERyYWM= VHJhY2tlcg== IGNvbW1lbmQ= IFByZXNpZGVuY3k= IERJRA== aW5mb3JtZWQ= IHdlYnBhZ2U= UHJldHR5 IGZvcmNlZnVsbHk= 44OD44Kv IHJlbG9jYXRpb24= IHNhdGlyZQ== 4ok= IFN1bmRlcmxhbmQ= 5oQ= Vm9pY2U= Pz8/Pz8/Pz8= IGluZm9ybWFudA== IGJvd2Vs IFVuaWZvcm0= IC4uLiI= IHB1cmdl IHBpY25pYw== IFVtYg== IFVQREFURQ== IFNhcHBoaXJl IFN0YWxs bGVhcm4= IG9iamVjdGl2ZWx5 IG9ibGl0ZXI= IGxvb3Bob2xl IGpvdXJuZXlz IG9taXNzaW9u UHJvcw== IFNpZG5leQ== cGxvbWE= IHNwcmF5ZWQ= IGd1cnU= IHRyYWl0b3I= IHRpbWV0 IHNuYXBwaW5n IFNldmVudA== dXJuYWw= IFVraXA= IGJvd2Vk cG9yYWw= bGliZXJhbA== Um9z UXVlc3Rpb25z aU9T IHN1bW1hcml6ZQ== U1RBVA== IDE4NTA= YXBlc3Q= IGxlbmRlcg== IFZhcmlhYmxl YnJpbmdpbmc= IExPUkQ= LCk= IGNvbGxhcHNlcw== eGlldHk= IE5lZA== WUQ= IFNjaGE= IGFudGlib2R5 IGRpc2JhbmQ= eXJl aWxsdXNpb24= IHJvdmVy c2hlZA== IEhpcm9zaA== Y2Np IGNhbGFt IE1vcnRvbg== UGludGVyZXN0 IDE5Mjg= IEV1cmFz b3JkZXM= IGZlbmNlcw== IEludmVudG9yeQ== IFZhbGVuY2lh IFVk IFRpZmY= IHNxdWU= IHF1b3RhdGlvbg== IHRyb3VibGVzb21l ZXJrZXI= UVVFU1Q= IEtpbmdkb21z c291dGg= IGxldnk= UHJpbmNl IFN0aW5n IG5pY2tuYW1lZA== IGFwcGU= IHBob3RvZ3JhcGhpYw== IGNvcnB1cw== cmVmZXJlbmNl IFRyb2c= VW50 KT0o IExhdHZpYQ== IGFjdGl2YXRpbmc= IGxpY2Vuc2Vl IGRpc3Bhcml0aWVz IE5ld3NsZXR0ZXI= 44OD44OI IGZyZWVpbmc= IEplZXA= IFBlcmNlcHRpb24= aW5zaw== IHNpbGljb25l IEhheWRlbg== TGVhbg== IFN1enVraQ== aWJyYXJpYW4= NjY4 IHNwb3I= IGNvcnJlbGF0aW9ucw== YWdoZXR0aQ== IHR1YmVy IElQQ0M= aWx1cw== IFZ1 IHdlYWx0aGllc3Q= IENhcmJ1bmNsZQ== YW56YQ== IGZvb2xlZA== IFp1cg== IGRhZGR5 cmFubw== aWxpYW4= IGtub2Nrb3V0 Zm1hbg== cmVxdWlyZWQ= IFdpa2lsZWFrcw== IER1ZmZ5 T05U IGluc29s IE9iamVjdHM= IGJvdQ== IE5vcmRpYw== IEluc2VydA== c2Nhbg== IGRhbmNlcnM= IGlkaW90cw== bWFqb3JpdHk= IE5ldmlsbGU= IEZyZWVCU0Q= IHRhcnQ= cGFuaWM= Njkw IGNvY29h IHNhbXBsZWQ= IGxvb2t1cA== SW5kdXN0 IGluamVjdGlvbnM= Z2VucmU= IGF1 IHJvYWR3YXk= IGdlbml0YWxz S2luZA== IEV4YW1pbmVy IFlheg== RnJlc2g= IHBhcmFseXNpcw== IEFsdW1pbnVt IHJlYXA= b2vDqQ== IHNsb3BweQ== IFR1bm5lbA== cG9zaXVt bmVyeQ== ZW5pYw== IGhlcmJhbA== IE91dGVy IEJ1aWxkZXI= IGluY3Vy IGlkZW9sb2dpZXM= IGJhY2t1cHM= Y29uc3VtaW5n IERldGVjdA== ZGVjaw== IEtOT1c= IEdyZXQ= IE1JQw== IHRvdWdobmVzcw== IEV4aGliaXQ= IGhpdmU= TGVz IFNDSE9PTA== IEF0YXJp YWxkZQ== IE51bGw= YW5kZXN0aW5l bW91c2U= IGJyaWdhZGU= NDg5 IHJldm9s IExhd3Nvbg== IFdhaA== b3BvbHk= ZWJ0ZWQ= IFNhdW5kZXJz IDMxMw== IFdpbmM= IHRhYm9v IEhlbG1ldA== IHdlZGdl Y2hpcA== IFRpbmE= Ymc= IGluZnVyaQ== cm4= IGFub21hbGllcw== IFN5bmM= IEV4YW0= IENvbW1pdA== IERpYXJ5 IEFMU08= IERlYm9y b21lZGljYWw= IGNvbXByZWhlbnNpb24= NjU1 IGVtcG93ZXJpbmc= IGlyZQ== IGp1aWNlcw== IEVUSA== IEJveGluZw== PSIv IGZhY2lsaXRhdGVk cG9rZQ== IFBhcnNvbnM= IE1vZGVy dHJhdmVs IGNpdmlsaXphdGlvbnM= IGxpYmVydGFyaWFucw== IHJ1bmU= IENsYXJrcw== YXRoZWQ= IGNhbXBhaWduZXJz IERpc3BhdGNo IEZhaHJlbmhlaXQ= IENhcGNvbQ== LS0tLS0tLS0tLQ== IGxhY2U= IGRyYWluaW5n IGxpbmVy IEFydGlmaWNpYWw= w6lu dGFzaw== XSku IEdNTw== IE9wZXJhdG9y b3JkaW5hcnk= IEluZmx1ZW5jZQ== IFVwcw== IHBvdGVuY3k= dXNzZW4= b3Nwb25z IFN3aW0= IERlYWRsaW5l VW5pdHk= IGN1bGluYXJ5 IGVubGlnaHRlbm1lbnQ= IHdlYXJlcg== IG1pbmVk IHBseQ== IGluY2VzdA== IERWRHM= V2Fsaw== QlRD VHJhZGU= IGRldmFs aWJhbmQ= IE92ZXJzaWdodA== UGFsZXN0aW5pYW4= IGRhcnQ= IG11bA== TFI= IHJlbW92YWJsZQ== IFJlYWxtcw== 7J0= IG1pc2Nhcg== IFZ1bGthbg== Njg1 w6hyZQ== IFNhcA== IG1lcmdpbmc= IENhcmx5 Y2hlc3Rlcg== IGJyaXNr IGx1eHVyaW91cw== IEdlbmVyYXRvcg== IGJpdHRlcm5lc3M= IGVkaWJsZQ== IDI0Mw== VEc= IHJlY3RhbmdsZQ== V2l0aE5v YmVsb3c= SmVubg== IGRhcmtlc3Q= IGhpdGNo IGRvc2FnZQ== IHNjYXZlbg== IEtlbGxlcg== IElsbHVzdHJhdGVk Q2VydGFpbmx5 IE1hdmVyaWNrcw== TWFyZ2luYWw= IGRpYXJyaGVh IGVub3Jtb3VzbHk= IDk5OQ== c2hy cXVhcnQ= IGFkYW1hbnQ= IE1ldw== IHJlbm92YXRpb24= IGNlcnZpY2Fs IFBlcmNlbnRhZ2U= ZW5lcnM= IEtpbWJlcg== IGZsb2F0cw== IGRleA== IFdpdGNoZXI= IFN3YW5zZWE= ZG0= IHNhbHR5 eWVsbG93 IGNhcGU= IERyYWlu IFBhdWxh IFRvbGVkbw== bGVzaQ== TWFnYXppbmU= IFdpY2s= IE1u IEFjaw== IFJpZGluZw== QVNPTg== IGhvbW9waG9iaWM= QVJQ IHdhbmRlcmVk Q1BV b29kb28= IFBpcGU= IHRpZ2h0ZW5pbmc= IEJ1dHQ= MzE4 IGRlc2VydGVk U2Vzc2lvbg== IGZhY2lsaXRhdGluZw== SnVtcA== IGVtZXJnZW5jaWVz T1dFUg== IGV4aGF1c3RpdmU= IEFGVEVS IGhlYXJ0YmVhdA== IExhYmVs YWNreQ== IENlcnRpZmllZA== aWx0cmF0aW9u WmU= IFV0dA== IDEzMDA= IHByZXN1bWU= IERpc3A= IHN1cmdlZA== IGRvbGxz Q29sdW1i IGNoaW1wYW4= IFJhem9y IHRpY2tz IGNvdW5jaWxsb3I= IHBpbGdyaW1hZ2U= IFJlYmVscw== IFFD IEF1Y3Rpb24= eGlh aWtr YnJlZA== IGluc2VydGlvbg== IGNvYXJzZQ== ZEI= U0VF IFphcA== IEZvbw== IGNvbnRlbXBvcg== IFF1YXJ0ZXJseQ== b3Rpb25z IEFsY2hlbWlzdA== IFRyZXk= IER1bw== U3dlZXQ= ODA0 IEdpb3Y= IGZ1bm4= Tmlu aG9mZg== IHJhbWlmaWNhdGlvbnM= IDE5MjI= IEV4cGVydHM= YXplcw== IGdhcm1lbnRz YXJpYWw= IE5hYg== IDI1Nw== IFZlZA== IGh1bW9yb3Vz IFBvbXBl IG55bG9u IGx1cmtpbmc= IFNlcmdleQ== IE1hdHRpcw== IG1pc29neW55 IENvbXBvbmVudHM= IFdhdGNoaW5n IEZvbGs= cmFjdGljYWw= QnVzaA== IHRhcGVk IGdyb3VwaW5n IGJlYWRz IDIwNDg= IGNvbmR1 cXVlcnF1ZQ== UmVhZGluZw== IGdyaWV2YW5jZXM= VWx0cmE= IGVuZHBvaW50 SGln IFN0YXRpYw== IFNjYXJib3JvdWdo THVh IE1lc3Np YXF1 IFBzeU5ldA== IFJ1ZGQ= IGF2ZW51ZQ== dnA= SmVy IHNoYWR5 IFJlc2lzdA== IEFydGVtaXM= IGNhcmVsZXNz IGJyb2tlcnM= IHRlbXBlcmFtZW50 IDUyMA== VGFncw== IFR1cm5pbmc= IHV0dGVyZWQ= IHBlZGQ= IGltcHJvdmlzZWQ= IDoo IHRhYmw= IHBsYWlucw== MTYwMA== cHJlc3N1cmU= IEVzc2VuY2U= bWFyZ2lu ZnJpZW5kcw== IFJlc3RvcmF0aW9u IHBvbGx1dA== IFBva2Vy IEF1Z3VzdGluZQ== IENJUw== IFNFQUw= b3JhbWE= IHRod2FydA== c2Vlaw== IHBhZ2Fu wro= Y3B1 IGdhcm4= IGFzc29ydG1lbnQ= IElMQ1M= dG93ZXI= UmVjb21tZW5kZWQ= IHVuYm9ybg== IFJhbmRvbVJlZGRpdG9y IFJhbmRvbVJlZGRpdG9yV2l0aE5v IHBhcmFseXplZA== IGVydXB0aW9u IGludGVyc2VjdA== IFN0b2tl IFNjbw== QmluZA== 5b4= IFBORw== IE5lZ2F0aXZl IE5PQUE= TGVvbg== IGFsbG95 IExhbWE= IERpdmVyc2l0eQ== NTc1 IHVuZGVyZXN0aW1hdGVk IFNjb3I= IG11cmFs IGJ1c3RlZA== c29vbg== bGlm IG5vbmV4 IGFsbGVyZ3k= IFVuZGVyd29ybGQ= IFJheXM= IEJsYXNpbw== IGhycw== IERpcg== IDMyNw== Ynl0ZXI= IHJlcGxhY2VtZW50cw== IGFjdGl2YXRlcw== cml2ZWQ= TUg= IHBhbnM= IEhJ IGxvbmdpdHVkaW5hbA== IG51aXNhbmNl YWxlcg== IHN3ZWxs IFNpZ25lZA== c2Np IElzbGVz IEFHQQ== IGRlZmlhbnQ= IHNvbmlj b2Nvbg== S0M= IEFpbQ== dGll YWhhaA== IG1M RFg= IGJpc2M= IEJpbGxib2FyZA== IFNZU1RFTQ== TkVZ Z2FhcmQ= IGRpc3RyZXNzZWQ= Zm9ybWVybHk= QWxhbg== IGNoZWZz IG9wdGljcw== IENvbWV0 IEFNQw== IHJlZGVzaWduZWQ= aXJtYXRpb24= IHNpZ2h0aW5ncw== Mzgy MzEx IFdC IGNvbnRyYWN0aW9u IFRPVEFM RHVhbA== IHN0YXJ0bGVk IHVuZGVyc3RhbmRhYmx5 IHN1bmdsYXNzZXM= RVRIT0Q= IGRvY2tlcg== IHN1cmZpbmc= IEhFTA== IFNsYWNr dG9uZXM= IHNoYWx0 VmlzdWFs NDk4 RGVwYXJ0bWVudA== Y3Vzc2lvbg== IHVucmVzdHJpY3RlZA== IHRhZA== IHJlbmFtZQ== ZW1wbG95ZWQ= IGVkdWNhdGluZw== IGdyaW5uZWQ= YmVkcm9vbQ== IEFjdGl2aXRpZXM= IFZlbHZldA== IFNXQVQ= IHNodWZmbGU= aWdvcg== IHNhdHVyYXRpb24= RmluZGluZw== Y3JlYW0= aWN0ZXI= IHZvZGth dHJhY2tpbmc= dGVj IGZvcmVncm91bmQ= aWVzdGE= IHZlaGVtZW50 IEVDQg== IFRpZQ== RXk= IHR1cnRsZXM= IFJhaWxyb2Fk IEthdHo= IEZyYW1lcw== IG1lbmFjZQ== IEZlbGxvd3NoaXA= IEVzc2VudGlhbA== dWdnaXNo IGRyaXA= Y2h3aXR6 IEt5b3Rv c2I= IE5pbmE= UGFyYW1ldGVy IGFsYXJtcw== IENsYXVk IHBpb25lZXJpbmc= IGNoaWVmbHk= IFNjcmVhbQ== Q29sbGVjdGlvbg== IHRoYW5rZnVsbHk= IFJvbmFsZG8= 5a2Q c3RyaXA= IERpc25leWxhbmQ= Y29tbWVyY2lhbA== U2VlaW5n U291bA== IGV2YWN1YXRl IGNpdg== IEFzaGU= IGRpdmlkZXM= IERhZ2dlcg== cmVoZW5zaXZl IGJlcnJpZXM= IERG IHN1c2hp IHBsdXJhbGl0eQ== V0k= IGRpc2FkdmFudGFnZWQ= IGJhdHRhbGlvbg== b2JpbGVz NDUx IGNsaW5n IHVuZGVuaWFibGU= IExvdW5nZQ== IGhhdW50 cGhl IHF1YW50aWZ5 IGRpZmZlcmVk IFsqXQ== IFZpeg== Y3Vt c2xhdmU= IHZpZGVvZw== IHF1YXI= IGJ1bmRsZXM= IEFsb25zbw== dGFja2xl IG5ldXJvbmFs IGxhbmRzbGlkZQ== Y29uZmlybWVk IERlcHRo IHJlbmV3YWJsZXM= QmVhcg== IE1hY2Vkb25pYQ== IGplcnNleXM= IGJ1bms= IFNwYXdu IENvbnRyb2xz IEJ1Y2hhbmFu IHJvYm90aWNz IGVtcGhhc2l6aW5n IFR1dG9yaWFs aHlw aXN0b24= IG1vbnVtZW50YWw= 5rA= IENhcnJ5 IHRic3A= ZW5hbmNl SGlsbA== YXJ0aGVk IHJvdHRlbg== RGVhbg== IHR3aXN0aW5n IGdvb2R3aWxs IGltbWVyc2lvbg== TGl2aW5n IGJydXNoZXM= IENHSQ== IEF0aw== dHJhZGl0aW9uYWw= IHBoYW50b20= IFN0YW1pbmE= IGV4cGFuc2lvbnM= IE1hcmlu IGVtYmFya2Vk IEVn aW50ZXN0aW5hbA== IFBFT1BMRQ== IEJvb3Ro IEFwcGFsYWNo IHJlbGVnYXRlZA== VlQ= TUlU IG11c3Rlcg== IHdpdGhkcmF3aW5n IG1pY3Jvc2NvcGU= IEdhdGhlcmluZw== IENyZXNjZW50 IEFyZ2VudGluZQ== IERlY3Jl IERvbWluaWM= IGJ1ZHM= YW50YWdl IElvbg== IHdpZGVuZWQ= T05TT1JFRA== IEdsb3Zlcw== aWFubm9wb3Vsb3M= cmF6ZW4= ZmVlbA== IHJlcGF5bWVudA== IGhpbmRzaWdodA== IFJFQUxMWQ== IFBpc3RvbA== IEJyYWg= IHdhdHRz IHN1cnZpdmVz IGZsdXJyeQ== aXNzeQ== QWxlcnQ= IFVydWd1YXk= UGhvZW5peA== U2xvdw== IEdyYXZl IEZpcg== IG1hbmFnZWFibGU= IHRhcmlmZg== IFVEUA== IFBpc3RvbnM= IE5pZ2VyaWFu IHN0cmlrZW91dHM= IGNvc21ldGljcw== d2hlbG1pbmc= ZmFi Y2FwZQ== cHJveHk= IHJldGhpbms= IG92ZXJjb21pbmc= c2ltcGxl IHdvbw== IGRpc3RyYWN0aW5n IFN0YW50b24= IFR1bHNh IERvY2s= NjU5 IGRpc2NvcmQ= IEVtYWNz IFZlcw== IFJPQg== IHJlYXNzdXJpbmc= IGNvbnNvcnRpdW0= TXVzbGltcw== MzIx IHByb21wdHM= c2Vp IEhpdGNo aW1wb3NlZA== IEZvb2w= IGluZGlzY3JpbQ== d3Jvbmc= YnVxdWVycXVl RGF2aXM= IV0= IHRpbWVsZXNz IE5FRUQ= IHBlc3RpY2lkZQ== IHJhbGx5aW5n IENhbGRlcg== IOWk IHhw IFVubGU= IEV4cG9ydA== bHVhag== QnVmZg== KTwv Qm9vdA== IENocnlzbGVy b3JhdGl2ZQ== TWVzcw== IG5lZ2xpZ2libGU= ZXJ0b2Rk IE11c2hyb29t IEdhbGU= Z2M= IENvc2J5 IFJ1cmFs cml0aWNhbA== QmVsbA== IHR1cmJpbmU= MDAyMDAwMDA= IGxlZ2l0aW1hdGVseQ== IEFuaW1hdGVk VEVE IFRoZW9kb3Jl Y29uZHVjdA== IEhpZXI= IGNvdW50ZXJmZWl0 IEFsZ2VyaWE= IHVuYmVhdA== Y29udHJvbGxlcg== IHVucmVz IHNjcmFtYmxpbmc= IEZhbGxvbg== VGVz IGFtYmVy IHJveWFsdGllcw== IFNoZWx0ZXI= IExlc3Rlcg== IGNsYXNzaWZ5 UmVtb3Rl IHVuaGVhcmQ= IGNvbnRyb3ZlcnNpZXM= IGVucmljaG1lbnQ= IFlhbmtlZQ== Z2FtZXI= IHBsYXRpbnVt IGVjb2xvZ3k= IFNhcms= IHVudG91Y2hlZA== IHN1cGVydmlzb3Jz ICIl IGZvb3Ro IGNvbW1vbnM= IG5hcmNvdGljcw== IGluZGljZXM= IFBseQ== IGFkZGl0aW9uYWxseQ== IEdhd2tlcg== IEVR UGxheWluZw== IGNhdmVhdA== IEFic29sdXRl b3NzdXM= QmFieQ== IHJhdGlvbg== IHJlc2lu IGNhbGlicmF0aW9u IE5ld3BvcnQ= IGtub2Nrcw== dnQ= IGNvbXBvc3Q= U2NlbmU= IHNhcmNhc3Q= IGtpc3Nlcw== IG5z YWxsaQ== IE1hcmNlbA== IFBpZXQ= aWF0cmljcw== IHN1cnJvdW5kcw== IFJlcHJvZHU= IFBoaWxsaWVz IHVuY2VydGFpbnRpZXM= IEV1cg== IFJvbWFuY2U= IEhhdGg= IE5lZWRz IENsb2Fr IGNyZW0= cXVldWU= IDM1NQ== IHVwZnJvbnQ= XSk7 IHJlY2lwcm9j IDE5Mjc= IDExMDA= dXRzdQ== IGRlcHJlc3NpdmU= b3dtZW50 RmFucw== IG1lY2g= IGFubmloaWw= IGNvdW50ZXJ0ZXJyb3Jpc20= IEZpZ3VyZXM= Ym9sZA== IE1vaW5lcw== IERyaXZlcnM= IG1hbnVzY3JpcHRz IENyeXB0bw== IGh5cG5vdA== cmVkZGl0cw== IHByb3NlY3V0aW9ucw== IGRpdmVydA== Q1JJUA== IEJlbmU= IFJlZ2dpZQ== IHRheGluZw== IE1vcmFsZXM= ZW50aW5n dHVy c2lnbmlmaWNhbnQ= IFBST1Y= IHN0cmFuZHM= IHBvdWNo IFJvb2tpZQ== u5I= IG5pY2Vy aGVteQ== aHc= RUNB IGludGltaWRhdGVk IHN0cmljdGVy IG1pY3JvYmlhbA== ZGV0YWlscw== IHZvd3M= IHF1YWtl aGhoaA== IHJlaW52ZW50 VWI= IHJlbGlucXU= IEJ1ZmZldHQ= bGljZW5zZWQ= aXR0ZXJlZA== IFBpY2FyZA== IGNoZXdpbmc= dWNs b3JnYW5pYw== IGxvY2FsaXplZA== IEVjb25vbWlzdA== IGFjcXVhaW50ZWQ= RGVmaW5pdGlvbg== c2Vk Q3JpdGljcw== IGNj NDUz Mzgx IGZlbGxvd3M= IGNoZWNrcG9pbnRz MDI1 IHJlZWxlY3Rpb24= IG1lZGlhdGVk IEtERQ== IGh1cmRsZQ== IHRleHRpbmc= UGVyZmVjdA== IHRydXN0ZWVz ZmVjdHVyZQ== IGRpY2g= bW9uYXJ5 IGRpc3RpbmN0aW9ucw== IDE0MDA= IHVzaGVy IHBhcmFzaXRlcw== IFNoYXJpbmc= IFZpbQ== IGJhcmJlY3Vl IE1pbmlzdGVycw== ZXJlbGxh IGVi IG1j IFNvbWVob3c= IEluc2VjdA== Y2hhbmdlcw== YnJvYWQ= IEJ5eg== IGdyYXBlcw== NjY5 ID09PT09PT09PT09PT09PT09 IGFzc2ltaWw= IGhhdW50aW5n IGZpcmVwb3dlcg== IGRlZmFtYXRpb24= ZW1waGFzaXM= IGNvbXBvc2U= IGFsbGVyZ2llcw== IHN0cmFuZw== cm9sbGVycw== YmFuZw== IGJyZXdlcnM= cm9uZ2g= cmlvdA== cG9vcg== Y29sZA== U2FtcGxl IGJ1b3k= MDQw IENvdXJ0bmV5 IDI2OA== IFdlZGRpbmc= NzAy IG9ic2Vzc2l2ZQ== IGJyYWtpbmc= IExhbA== YW5pY2Fs 5aY= YXRlbg== Q29uc3RydWN0aW9u IGNsaW5pY2FsbHk= aWVyc2hpcA== TmFtZXM= IERpc2N1c3M= IFJhbW9z IGxvY2FsZQ== IEFncmljdWx0dXJhbA== RW5hYmxl IGhvcnNlcG93ZXI= ZW50dXJl UHJlZg== Q291cnQ= IHN0YWZmaW5n IGZ1dHVyaXN0aWM= ZHJpdmVycw== IE1hcmtldHBsYWNl 5oim RnJpZW5kcw== IGRhbW5pbmc= IEN1c3RvbWVycw== IHdlZWRz IE1haQ== IGFnaWxl IFRhdHQ= aWNlbnQ= UmFua2Vk Y3JvZnQ= IEthdHk= RXh0cmVtZQ== IGNhcnZl IFJvdmVy IEJ5cm9u Mzcy IGNvbmR1Y3Rz cmF0Y2g= aXRpYQ== IFB1bXBraW4= U2FkbHk= UmVsb2FkZWQ= UG9saWN5 IGxpY2s= cGVhaw== aXNrcw== IENEcw== IEVuY3ljbG9wZWRpYQ== aW5pdGlhbA== Q29z IEF3YXJlbmVzcw== IERyYW0= JCQkJA== IHJpZmY= IHNjcmlwdHVyZQ== cnVubmVycw== IGJvaWxlcg== b25zb24= b2lu IGhhbXN0cmluZw== IGNhdGFseQ== IEFyY2hiaXNob3A= Y2hhbGw= IGZhdXg= b2tpbg== bG9jYWxob3N0 IE5BTUU= YWRvYmU= U0FO YW1hdGU= IHNjcmFtYmxl IGNhcmM= IE1hbmlmZXN0 IENlZGFy IFNlcmdpbw== bGF0ZXI= ZmZlcg== IGdyYXBwbGluZw== IERldXRzY2hl YWdvbmlzdHM= IE5ld3Nw IHByZXRlbmRlZA== YXJjaG1lbnQ= IGN1cmF0ZWQ= IGhlYWRwaG9uZQ== IFVuY29tbW9u IFNJR04= QWdlbnQ= IGRlYWRsaW5lcw== IGhvcml6b250YWxseQ== IE1BVA== IFN1bW1lcnM= IG9yZGFpbmVk IExhc3RseQ== IEtlbmRhbGw= IGZyaWc= IE1hY2hpbmE= IFdhdGVybG9v IE1leGljYW5z IHByb3RlY3Rvcg== IGdsYXJl fSI= UHJlbWl1bQ== IHJpZnQ= IFRlbGVzY29wZQ== TWV0YWw= IHJlY2FwdA== IDs7 IGluY2xpbmF0aW9u IGltcG9zZXM= aW5nZW4= Xns= IGhhc3Rl IGRvbHBoaW5z IGNvbW11dGVycw== cGxhbm5lZA== Y29uZw== bXg= IFVwbG9hZA== IGV4dHJhcA== IFR1Y3Nvbg== IEV4cGxvcmF0aW9u ZWZlYXRlZA== IHNsZW5kZXI= NzAz IEJ1aw== aXNlbA== IGNvbXBldGl0aXZlbmVzcw== Y2hsb3I= IFBlcm1hbmVudA== IEV2ZXJldHQ= IFNwZWNpYWxpc3Q= IFNPTA== IGN5YW4= IEV4YWN0bHk= VUY= IExJRkU= YXJ5bA== b25ldA== IEVtcGxveWVl YXdlZA== IFJhdGluZ3M= IGV4dHJhdmFn dWxodQ== IFBsYW5l IGVsZXZhdGU= IENvb3JkaW5hdG9y IFdhdGtpbnM= IGV4Y2x1ZGVz IHNlbnRpZW50 IGVwb2No IGFsbG9j UHJldmlvdXNseQ== IFNoeQ== IFNsb3Zha2lh TE9DSw== IG1hcmtlZGx5 IGtub2I= IGFkdmVudHVyZXJz IEJlZW4= IENvc3Rz YW1tZXJz IG9uc2xhdWdodA== IFN1cHBvcnRlZA== IFRhdQ== aWthcnA= IFNvdmVyZQ== IEhhbXB0b24= 44KJ UHJldg== IFdvcnNl IGNvdHRhZ2U= IEhhZGVz bGV6 Ym93bA== IGZyYWdyYW5jZQ== IExvaw== RU1PVEU= IFBldHJv IDE5MjU= IFBlbmQ= cHJvZHVjaW5n IHJlbG9jYXRl dmF0aQ== cG9sZQ== IHNlbWlu IE5VTQ== IHJvY2tlZA== YnVmZg== Ymx5 UmVwbHk= IEhhaQ== IGFydGljdWxhdGVk IElzbGFtYWJhZA== NjY1 IENsYWltcw== RGVza3RvcA== IHRydXN0ZWU= IHNjcmlwdGluZw== IFNvYg== IEFzeWx1bQ== U1RET1VU IENsb3du IERvcnRtdW5k IERldm9u bGl0ZQ== IE1hcmJsZQ== IGJ1bmtlcg== IGNyZXN0 IGFyb3VzYWw= IFNlYXJz IEJ1ZGR5 ZXJlZGl0aA== IFBvbGx5 IGRlY29kZQ== IFZpc2g= IFJlZmxlY3Q= YW5vbg== IHJlZnVuZHM= aW1tZXJz SE0= IHdpcGluZw== IHB1enpsZWQ= IG1hdHRl dW5v UGllcnJl KSks IHRhaW50ZWQ= IHN5bWJvbGlzbQ== IEZyYXo= IHByb3Rlc3RvcnM= ZXRoZXVz JSUlJQ== V3Jh IGxheA== YWRlbQ== YXR1cmF0aW9u 44OT IFRyYWlsZXI= IEVORw== IEJvd3Nlcg== IGF0dG0= RHVy ODA3 IHNpZHg= IGNpZGVy IEFmZmVjdA== IHdvdmVu IEJhcmtlcg== YmVuZWY= IGRzdGc= IFJ5dQ== Pls= IHNxb3I= U2F1ZGk= IGlzdGc= IGluZHVsZ2U= cHJvYw== IGRpc2d1c3RlZA== IGNvbXBvdW5kZWQ= IG5lbQ== IHNjaG9vbGluZw== IEN1cmU= cHJvY2Vzc2luZw== U29s IHByb3ZlcmI= aXRpemVk IEFsdmFyZXo= IHNjYXJm IHJlY3Rhbmd1bGFy cmV2ZQ== IGhvcm1vbmFs IFN0cmVzcw== aXRpemVu IDQyNQ== Z2lybHM= IE5vaXI= IFJhcHA= IG1hcmNoZXM= Y2h1cmNo IFVzZXM= IDQwNQ== IEJlcm0= IG9yZGluYW5jZXM= IEp1ZGdtZW50 Q2hhcmdlcw== IFppbg== IGR1c3R5 IHN0cmF3YmVycmllcw== IHBlcmNl IFRodXI= IERlYm9yYWg= bmV0ZmxpeA== IExhbWJlcnQ= IGFtdXNlZA== IEd1YW5n WU9V UkdC IENDVFY= IGZpYXQ= cmFuZw== IGZlZGVyYXRpb24= IE1hbnQ= IEJ1c3Q= IE1hcmU= cmVzcGVjdGl2ZQ== IE1pZ3JhdGlvbg== IEJJVA== NTkw IHBhdHJpb3Rpc20= IG91dGxpbmluZw== cmVnaW9u IEpvc8Op IGJsYXN0aW5n IEV6cmE= QnM= IHVuZGVybWluZXM= IFNtb290aA== IGNsYXNoZWQ= cmFkaW8= IHRyYW5zaXRpb25pbmc= IEJ1Y2NhbmVlcnM= IE93bA== IHBsdWdz IGhpYXR1cw== IFBpbmJhbGw= IG1pZw== IE51dHI= IFdvbGZl IGludGVnZXJz IG9yYml0cw== IEVkd2lu IERpcmVjdFg= Yml0ZQ== IGJsYXppbmc= dnI= RWRnZQ== IFBJRA== ZXhpdA== IENvbWVk IFBhdGhmaW5kZXI= IEd1aWQ= IFNpZ25z IFplcg== IEFnZW5kYQ== IHJlaW1idXJzZW1lbnQ= TWVzaA== aVBob25l IE1hcmNvcw== IFNpdGVz aGF0ZQ== ZW5idXJn IHNvY2tldHM= cGVuZA== QmF0bWFu dmly IFNIT1c= IHByb3Zpc2lvbmFs Y29ubg== IERlYXRocw== QVRJVkU= UHJvZmlsZQ== c3lt SkE= IG5pbmph aW5zdGFsbGVk aWRhdGVz ZWJyYQ== IE9tYWhh IHNlaXppbmc= IEJlYXN0cw== IHNhbHRz TWlzc2lvbg== R2VuZXJhbGx5 IFRyaWxvZ3k= aGVvbg== bGVnYXRlcw== IGRpbWU= IGZhaXJl cGFyYWJsZQ== R3JhcGg= IHRvdGFsaW5n IGRpYWdyYW1z IFlhbnVr cGxldA== IE1laA== IG15dGhpY2Fs IFN0ZXBoZW5z YXV0aWNhbA== b2NoZW1pc3RyeQ== IGtpbG9ncmFtcw== IGVsYm93cw== YW5jb2Nr IEJDRQ== IFByYWd1ZQ== IGltcHJvdg== IERldmlu ICJc cGFyYWxsZQ== IHN1cHJlbWFjaXN0cw== IEJpbGxpb24= IHJlZ2ltZW4= aW5uYWNsZQ== IHJlcXVpc2l0ZQ== YW5nYW4= IEJ1cmxpbmd0b24= YWlubWVudA== IE9iamVjdGl2ZQ== b21za3k= R1Y= IHVuaWxhdGVyYWw= IHRj IGhpcmVz bWVudGFs IGludm9sdW50YXJ5 IHRyYW5zcGw= IEFTQ0lJ wqg= RXZlbnRz IGRvdWJ0ZWQ= IEthcGxhbg== IENvdXJhZ2U= aWdvbg== IE1hbmFnaW5n IFRhcnQ= IGZhbHNlaG9vZA== IFZpb2xldA== IGFpcnM= IGZlcnRpbGl6ZXI= QnJpdGFpbg== IGFxdWF0aWM= b3Vm V29yZHM= IEhhcnRmb3Jk IGV2ZW5pbmdz IFZlbmdlYW5jZQ== cXVpdGU= R2FsbA== IFByZXQ= IHBkZg== IExN IFNvY2hp IEludGVyY2VwdA== OTIw IHByb2ZpdGFiaWxpdHk= IElkbGU= IE1hY0RvbmFsZA== IEVzdGFibGlzaG1lbnQ= dW1zeQ== IGdhdGhlcmluZ3M= IE5hag== Q2hhcmxpZQ== IGFzY2VudA== IFByb3RlY3Rvcg== IGFsZ2VicmE= IGJpb3M= Zm9ydW1z RUxT SW50cm9kdWNlZA== IDMzNQ== IGFzdHJvbm9teQ== Q29udHJpYnV0 IFBvbGlj UGxhdGZvcm0= IGNvbnRhaW5tZW50 d3JhcA== IGNvcm9uYXJ5 IEplbGx5 bWFuYWdlcg== IGhlYXJ0YnJlYWtpbmc= Y2Fpcg== IENoZXJv Y2dp TWVkaWNhbA== IEFjY291bnRhYmlsaXR5 ISEi b3BoaWxl IHBzeWNob3RpYw== IFJlc3RyaWN0 IGVxdWl0YWJsZQ== aXNzdWVz IDE5MDU= IE5law== Y2lzZWQ= IFRyYWNraW5n IG96b25l IGNvb2tlcg== cm9zaXM= IHJlb3Blbg== IGluZmluaXR5 IFBoYXJtYWNldXRpY2Fs ZW5zaW9uYWw= QXR0ZW1wdA== IFJvcnk= TWFyY28= IGF3YWl0cw== SE9X dHJlYXRlZA== IGJvbHN0 IHJldmVyZWQ= IHBvZHM= b3BwZXJz MDAxMA== IGFtcGxpdHVkZQ== cmljYW4= U1BPTlNPUkVE IHRyb3VzZXJz IGhhbHZlcw== IEthaW5l IEN1dGxlcg== IEFVVEg= IHNwbGVuZGlk IHByZXZlbnRpdmU= IER1ZGxleQ== aWZhY3Rz dW1pbmF0aQ== IFlpbg== IGFkbW9u IFZhZw== IGludmVydGVk IGhhc3RpbHk= IEhhZ3Vl THlu IGxlZGdlcg== IGFzdHJvbm9taWNhbA== Z2V0dGluZw== IGNpcmNh IENpYw== IFRlbm5pcw== TGltaXRlZA== IGRydQ== IEJZVQ== IHRyYXZlbGxlcnM= IHBhbmU= IEludHJv IHBhdGllbnRseQ== IGFpZGluZw== IGxvb3M= IFRvdWdo IDI5Mw== IGNvbnN1bWVz U291cmNlRmlsZQ== ICIiIg== IGJvbmRpbmc= IHRpbHRlZA== IG1lbnN0cnVhbA== IENlbGVzdGlhbA== VUxBUg== UGx1Z2lu IHJpc2tpbmc= TmF6 IFJpeWFkaA== IGFjY3JlZGl0ZWQ= IHNraXJt 6Zs= IGV4YW1pbmVy IG1lc3Npbmc= IG5lYXJpbmc= IENoZXJu IEJlY2toYW0= IHN3YXBwZWQ= IGdvb3Nl S2F5 IGxvZnR5 IFdhbGxldA== IFsn IGFwb2NhbHlwc2U= IGJhbWJvbw== IFNQQUNF IEVsZW5h IDMwNg== YWNvbnM= IHRpZ2h0ZW5lZA== IGFkb2xlc2NlbmNl IHJhaW55 IHZhbmRhbGlzbQ== IE5ld3Rvd24= IGNvbmplY3Q= Y2FrZXM= IGNoZWF0ZWQ= IG1vZGVyYXRvcnM= cGFyYW1z RUZG IGRlY2VpdA== IFNUTA== IFRhbnphbmlh IFJJ IDE5MjM= IEV4aWxl dGhlbA== IHRoZW9sb2c= IHF1aXJreQ== IElydmluZQ== IG5lZWR5 b3Jpcw== VW0= S2E= IG1haWxib3g= MzIy IGJvcw== IFBldHJh S0lORw== IGVubGFyZ2Vk T2Z0ZW4= IGJhZGFzcw== IDM0Mw== IFBsYWNlcw== IENBRA== IHByaXN0aW5l IGludGVydmVuaW5n ZGlyZWN0aW9u IGxheg== IERTTQ== IHByb2plY3Rpbmc= IEZ1bms= YWdvZw== cGF5bWVudA== bm92 IGNoYXR0ZXI= QVJC IGV4YW1pbmF0aW9ucw== IEhvdXNlaG9sZA== IEd1cw== Rm9yZA== NDE0 Qm9zcw== IG15c3RpYw== IGxlYXBz IEJhdg== dWx6 YnVkZ2V0 Rm9vdGJhbGw= IHN1YnNpZGl6ZWQ= IGZpcnN0aGFuZA== IGNvaW5jaWRl b2N1bGFy Q29ubg== IENvbGxhYm9y IGZvb2xz YW11cmE= YWhhcg== cmlzdHM= IHN3b2xsZW4= IGV4cGVuZGVk IFBhdQ== c3Vw IHNwYXI= IGtleW5vdGU= c3VmZg== IHVuZXF1YWw= IHByb2dyZXNzaW5n c3RyaW5ncw== IEdhbWVyZ2F0ZQ== RGlzbmV5 IEVsZXZlbg== b21uaWE= IHNjcmlwdGVk IGVhcm5lcnM= YnJvdGhlcg== IEVuYWJsZWQ= 5rM= IGxhcnZhZQ== IExPQw== bWVzcw== V2lsc29u IFRlbXBsYXRl c3VjY2Vzc2Z1bGx5 IHBhcmFtb3VudA== IGNhbW91ZmxhZ2U= IGJpbmRz IFF1aWV0 IFNodXR0ZXJzdG9jaw== cnVzaA== IG1hc2NvdA== Zm9ydHVuZQ== IENvbHQ= IEJleW9u aGFiaQ== IGhhaXJj IDI2Nw== IERldXM= IHR3aXRjaA== IGNvbmNlbnRyYXRpbmc= IG5pcHBsZXM= Y2libGU= IGdpcg== Tlo= TWF0aA== bmlo UmVxdWlyZWQ= IHBvbmRlcg== IFNBTg== IHdlZGRpbmdz IGxvbmVsaW5lc3M= TkVT IE1haGpvbmc= Njk1 YWRkbGU= IEdhcm5lcg== IENPVVI= QnJpZGdl IHNwcmVl IENhbGR3ZWxs IGJyaWJlcnk= IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQ== cGx1Z2lucw== IHJhY2tldA== IGNoYW1wYWduZQ== dmVyc2libGU= Vm90ZQ== IG1vZGlmaWVycw== TWF5b3I= Njgw IGFzc2VtYmxpZXM= IFN1bHRhbg== IE5pbmc= IExhZGllcw== IHN1bGZ1cg== IG9yYnM= IC0tLS0t X19fX19fXw== IEpvdXJuYWxpc20= IGVzcG9ydHM= IGx1c2g= IGh1ZQ== IHNwZWN0cmFs SG9uZXN0 44OP IGJ1c2hlcw== IHJlaW5mb3JjZW1lbnQ= IHJlb3BlbmVk IFdoZWVscw== IE1vcmc= cmlldmluZw== IGF1eGlsaWFyeQ== IGpRdWVyeQ== IEJBVA== dGVzcXVl IHZlcnRleA== cHVyZQ== ZnJleQ== 44K6 ZG9z IHR5cGg= IGN1bGw= IGVx IGRlY29u IHRvc3Npbmc= IGRpc3BhcmF0ZQ== IEJyaWdoYW0= cHJpbnRm bGVkZ2Vk IHN1bmQ= IGNvenk= IGhlcGF0aXRpcw== cGVyZm9ybWluZw== IGF2YWw= IEdH ZnV0dXJl IHBldGVydG9kZA== IEtvc292bw== IG1hZ25ldHM= QWxyZWFkeQ== IEVkaXNvbg== IENlcmVz IFJBSUQ= IGJyaWxsaWFuY2U= NTc2 IGRlcml2ZXM= IGh5cGVydGVuc2lvbg== IM6U IGxhbWJkYQ== IGZsYWly IG1pc3Npb25hcmllcw== IHJhcGVz IFN0YXJ0ZXI= IE1vbnRocw== IGRlZnk= IHNlaXNtaWM= IFJhcGhhZWw= IGV1cm96b25l NjU2 enNjaGU= IHNjcmF0Y2hlZA== IGJvd3M= IExlbm5vbg== IEdhaWE= IGRyaXBwaW5n ZmFjdHM= QWxl IGZyb2dz IEJyZWFzdA== b2dlbmVpdHk= IFByb3NlY3V0b3I= IGFtcGxpZmllZA== IEhvZGc= IEZu VGhvdXNhbmRz IE5JSA== IE1vbml0b3Jpbmc= RlRXQVJF IFByaWVidXM= IEdyb3dpbmc= aHVudGVy IGRpYWdub3Nl IE1hbGQ= IExS IGNyb3duZWQ= IGJ1cnN0aW5n IGRpc3NvbHV0aW9u amF2YXNjcmlwdA== IHVzZWZ1bG5lc3M= IEV4ZWN1dGlvbg== Oig= IEl2b3J5 YWFo IHBlcnNlY3V0ZWQ= dmlvbGVuY2U= aXN0YXM= IENyYXRl IGltcHVsc2Vz IFNwYW5p ZWRlcw== SGFuZGxl IFplcmc= dGhpbmthYmxl TGFzdGx5 IHNwb250YW5lb3VzbHk= IGluY29udmVuaWVudA== IGRpc21pc3Npbmc= IHBsb3R0ZWQ= IGVpZ2h0eQ== IDczNw== cmlzaA== IFRob3JudG9u YXRoYW0= IHNpdGNvbQ== VmVu UmVjaXBl dGVs bHVuZA== IGNsZWFycw== IFNhc3VrZQ== IDI1OA== IG9wdGluZw== IGVucmFnZWQ= ZXN0aGV0aWM= IEFl dWNocw== UHJlcA== Rmxvdw== IHJ1bm9mZg== IEVhdGluZw== IEdpbGVz IEFjdGluZw== cmVzb3VyY2Vz aWJhYmE= IHJwbQ== IHNrZXdlZA== IEJsYW5j IFNha3V5YQ== IGhvdHRlcg== IDE5MjQ= b3BpYW4= Y2tv IGNydW1ibGluZw== IGNhcHRhaW5z IEFwcHJvcHJpYXRpb25z bGVhZGVycw== ZHJvcHBpbmc= YW51dHM= IHJldmVyc2luZw== IFBvc2U= IFNlaw== U2NvdA== IElkZWE= Y2lzZQ== IFNsb3Zlbmlh IDMxNw== RG9jdG9y IGNyb2NvZA== YWxkaQ== U2Vh IEZhcnJlbGw= IG1lcmNlbmFyaWVz IFJOQw== IEd1ZXNz IHBhY2luZw== TWFjaGluZQ== U3RyZWFtZXJCb3Q= IENoYXJpdHk= IDI5OA== IGNhbm5vbnM= IFRvYnk= VFBQU3RyZWFtZXJCb3Q= IFBhc3Npb24= Y2Zn VGhvbQ== IGJhZGdlcw== IEJlcm5zdGVpbg== LuKAkw== IFBPUA== IENvbmo= IGluaXRpYWxpemF0aW9u IGJpb2RpdmVyc2l0eQ== RHVi IGZldWRhbA== IGRpc2NsYWltZXI= IGNyb3c= IGlnbml0aW9u YXJm U0hB IGtIeg== aGF6YXJk IEFydGlzdHM= b2V1dg== Njc5 IFJ1ZHk= TmluZQ== IFJhbWFkYW4= 5b0= aXR0bw== IGFkcmVuYWxpbmU= Q2VydA== IHNtZWxsZWQ= IGltcHVuaXR5 IGFnZW5kYXM= IFJlYm9ybg== IENvbmNlbnQ= IFNlZW1z IG9tZWdh IER1c3Rpbg== IGJhY2tlcg== IFNhdWNl IEJveWxl V0lO IHNwaW5z IHBhdXNlcw== dXB0 IHNocmVkZGVk IHN0cmFwcGVk IENvcnJ1cHRpb24= IHNjcmF0Y2hlcw== IG5p IGF0dGlyZQ== IFNBRg== RmFjdG9yeVJlbG9hZGVk IElQUw== ICgl IHNlbWluYXI= Zm9jdXM= Y2l2aWw= IDE4NjA= aW50b3No IGNvbnRpbnVhbA== IGFiYnJldmk= IFNvaw== b2NvYm8= WE0= IGZyYW50aWM= IHVuYXZvaWRhYmxl IGFydGVyeQ== IGFubm90YXRpb25z YmF0aA== Q2xpbWF0ZQ== IGRvcnM= IFNsaWRl Y29vcmQ= IFJlbG9hZA== IExETA== IExvdmVjcmFmdA== IHVuaW1hZ2lu IHJlc2VtYmxlZA== IGJhcnJhY2tz bnA= IHN1cnJvZ2F0ZQ== IGNhdGVnb3JpemVk 44Kp IHZhY2NpbmF0ZWQ= IGRyYWluYWdl IGluZGlzdA== IFdoYXRzQXBw IDE4NzA= b2xlcmFuY2U= aW52b2tl YW1vcnBo IHJlY29ubmVjdA== IGVtYW5j IGJsaW5kbmVzcw== IDEyODA= aW50ZXJuZXQ= Y29sbGFy IGFsdHJ1 IGFieXNz IFRSSQ== NjU3 IGluZnVzZWQ= SEVBRA== IGZvcmVzdHJ5 IFdvb2R5 IENp d2k= c2Ft Nzg0 aG9saWRheQ== IG1vZ3Vs IEZlZXM= IERFTg== SW50ZXJuYWw= dXJiZWQ= ZnVzYw== YXRvbQ== IElsbHVzaW9u IHBvbGxlZA== IGZsYXA= IGNvYXg= TEdCVA== QW5hbHk= IFNlY3Rpb25z IENhbGlmb3Ju ZW1u IGhpdGhlcg== IE5JR0hU IG5haWxlZA== IFBpcGVsaW5l Mzkx b29m IFByaW1hbA== dmVyZW5k IHNsYXNoaW5n IHJldHJp YXZpb3Vy IGRlcGFydGluZw== Z2ls SVND IG1pZHdheQ== IHVsdHJhc291bmQ= IGJlaGF2aW5n IFRhcmE= Y2xhc3Nlcw== VmlydHVhbA== IENvbG9uaWFs IHN0cmlwcGluZw== IG9yY2hlc3RyYXRlZA== IEdyYXZlcw== NDUy IElyb25pY2FsbHk= IFdyaXRlcnM= IGxlbmRz IE1hbno= IHJhdmVu IG94aWRhdGl2ZQ== IDI2Ng== RUxG YWN0dWFsbHk= YXNjYXI= RHJhZnQ= IGZhdm91cmFibGU= IGh1bWlsaWF0aW5n IGZpZGVsaXR5 IEhvZg== IFh1YW4= NDk2 IGxheWVyZWQ= YXRpcw== Nzkw IHBheWNoZWNr aXRvbg== S2Fy IFZNd2FyZQ== IEZhcm1lcg== IHNlcnZpYw== Z2xvbWVy IHNsdW1w IEZhYnJpYw== IERPQw== ZXN0aW5n IHJlYXNzdXJl IHBoeWw= dm9sdA== aXRvcnk= UnVsZXM= IG94aWRhdGlvbg== IHByaXplZA== IG1pc3RyZXNz IERqYW5nbw== V0FSTg== 5ZE= IGVuY29kZQ== IEZlZWRiYWNr IHN0dXBpZGl0eQ== SWFu IFl1Z29zbGF2aWE= 16g= YWNs VVRF MTk3Nw== IHF1YWxpZmllcw== IHB1bHNlcw== cHJldHR5 IGZyb3pl IHNz SXRlcmF0b3I= IHVyZ2VudGx5 IG1haWxlZA== IENoYW0= IHN1c3RhaW5pbmc= IGJhc2ls IHB1cHBpZXM= aWxhbnQ= IFBMRUFTRQ== bGFw YWNlb3Vz RmVhcg== IE1hc3Rlcnk= YXV0b21hdGlj IFRBRw== IGFudGlt YWdsZXM= NDcz ZnJhbWVz IHdoaXNwZXJz IFdob2V2ZXI= IGJyYXZlcnk= IFVLSVA= cmFjdGlvbnM= IiIi IHRhbWU= IHBhcnRlZA== ZXZlcnl0aGluZw== Q09OVA== IGluZGVidGVk IGFkZHI= cmVr SVJFRA== IGVtaW5lbnQ= Y2xpbnRvbg== IG91c3RlZA== IHJldmlld2Vy IG1lbHRkb3du IHJlYXJy IFlhbw== dGhlcmVhbA== YWJ5dGU= IHN0dW1ibGluZw== IGJhdGNoZXM= IDI1OQ== IGNvbnRyYWNlcHRpdmU= IHByb3N0aXR1dGU= ZW5zaXM= RGVjbA== IFN0cmlrZXM= TWlsaXRhcnk= IE9hdGg= dmFjYw== cHBpbmdz MDUy IHBhcnROYW1l YW1waW5n UmVwb3J0cw== S0k= Q0hS IHN1YnRseQ== c3dlcnM= Qmxha2U= dXN1YWw= IGNvbnRlc3RhbnRz IGNhcnRyaWRnZXM= IEdSRUFU IGJsdXNo IOKAug== NDcy IHJlYXNvbmVk 44Ok cGFyYWxsZWxlZA== IGR5bg== YWdhdGU= IG5pZ2h0bHk= 5YY= NTU2 IHNlbWFudGlj IEFkdm9j ICEh IGRpc2FncmVlcw== IEJX VmVo IGhhcm1pbmc= IGVtYnJhY2Vz IHN0cml2ZXM= IGlubGFuZA== IEthcmQ= IGhlYXRz IEdpbm55 dXRhbg== ZXJuYXV0 eWxlbmU= IEVsZXY= SkQ= IGhhcnM= IFN0YXJy IHNreXNj IGNvbGxhYm9yYXRvcnM= VXN1YWxseQ== IHJldm9sdXRpb25z IFNUQVRT IGRpc21hbnRsZQ== IGNvbmZpZGVudGx5 IGtpbmV0aWM= QWxp IHBlcmNlbnRpbGU= IGV4dHJhY3Rpbmc= aWxsaWFu ZXN0ZWFk IHBoeXNpY2lzdHM= IE1hcnNoYWw= IGZlbGxvd3NoaXA= IGRhc2hlZA== IFVS IFNpb3V4 IENvbXBhY3Q= YW1pZGU= UHl0aG9u IExlaWdo IFBoYXJtYWM= aXN0cmF0ZXM= aGVyaWNhbA== IGZ1ZQ== IEVtaW4= ICh7 IE5laWdoYm9yaG9vZA== IGRpc3J1cHRpbmc= IER1cA== IGdsYW5k IFNldg== IE1hcmlhbg== YXJnb24= IER1bmQ= IDwhLS0= IHN0cmFuZA== IHN0YWRpdW1z em9z IHBzeWNob3Npcw== IFJhY2s= IGJyaWxsaWFudGx5 77iP IHN1Ym1lcmdlZA== IEluc3RpdA== IENob3c= IGNhZ2Vz IEhhdHM= IFVycw== IGRpbHV0ZWQ= dXNhdA== aWVubmU= IE1lbWJlcnNoaXA= IEJ1cms= IGll IGFyY2hldHlwZQ== RHJ1Zw== dWx0b24= IFNwb2Nr IE1jS2F5 IERlcGVuZA== RmVhdHVyZWQ= U29j MTk3OA== IEJlcmU= IHJlbGVudGxlc3NseQ== IGNyaXBwbGluZw== IGFydGhyaXRpcw== 55Sf IFRyb3BpY2Fs IEJ1bGc= IENoZXJ5bA== IGFkbWlyYWJsZQ== IHN1YnRpdGxl T3ZlcnJpZGU= IG9yaWdpbmF0aW5n IENDUA== IHN3b3Jl IFNvbGU= IERpc29yZGVycw== MzI5 IHByb2Nlc3Npb24= IHJlZnVyYg== IGltbWVyc2Vk cmVxdWVudGx5 IHNrZXB0aWNz IGNlcmFtaWM= bWl0dGVy ZW5zdGVpbg== YmVsdA== IFRJVA== YmlkZGVu IGZpcg== bWlzdA== Pl0= IHdlYXZl IFBhcmFkb3g= IGVudHJ1c3RlZA== IEJhcmNsYXlz IG5vdmVsaXN0 b2dpZQ== ODA2 IG5pbmV0eQ== IGRpc2FncmVlbWVudHM= QEBAQEBAQEA= IEF1c2Nod2l0eg== Y2Fycw== IExFVA== dHVi YXJhbnRpbmU= UE9T IGJhY2tzdG9yeQ== IGNoZWVyZnVs IFJhZw== ZWth Ymlhc2Vk IGluZXhwZXJpZW5jZWQ= YWtyYQ== IFdpdHQ= dGFu IHJhcGlzdA== IHBsYXRlYXU= Y2hhbA== IElucXVpcw== ZXhwcmVzc2lvbg== IGNpcGhlcg== IHNoYXZpbmc= YWRkZW4= cmVseQ== KFw= aXNtYQ== IFJlZ3VsYXRvcnk= Q0hBUg== aWx5bg== TlZJRElB R1U= IG11cm0= bGF1cw== Q2hyaXN0b3BoZXI= IGNvbnRyYWN0dWFs IFByb3h5 IEphaW1l IE1ldGhvZGlzdA== IHN0ZXdhcmRz c3Rh cGVyaWE= IHBoeXNpb2xvZ3k= IGJ1bXBlZA== IGZydWN0b3Nl QXVzdHJhbGlhbg== IE1ldGFsbGlj IE1hc3F1ZXJhZGU= YXJi IHByb211bA== IGRvd25mYWxs IGJ1dGNoZXI= IGJvdXI= IElORk9STUFUSU9O IEJpcw== cGVjdHM= YWRlbmE= IGNvbnRlbXBsYXRpbmc= YXJvbw== Y2VudGVyZWQ= IFBlYWtz VXNlZA== IG1vZGVt IGdlbmRlcnM= IDgwMDA= Mzcx IG1hdGVybml0eQ== IFJheg== IHJvY2tpbmc= IGhhbmRndW5z IERBQ0E= QXV0b20= IE5pbGU= IHR1bXVsdA== IEJlbmVmaXQ= IEFwcHJvYWNo d29ya3Nob3A= IExlYXZpbmc= R2Vy aW5zdGVhZA== IHZpYnJhdGlvbnM= IHJlcG9zaXRvcmllcw== NDk3 IEF1bnQ= IEp1Yg== IEV4cGVkaXRpb24= QWxwaGE= IHNhbnM= IG92ZXJkdWU= IG92ZXJjcm93ZA== IGxlZ2lzbGF0dXJlcw== IHBhdGVybmFs IExlb25hcmRv IGV4cHJlc3NpdmU= IGRpc3RyYWN0aW9ucw== IHNpbGVuY2Vk dHJ1c3Q= IGJpa2luZw== IDU2MA== IHByb3ByaWV0 IGltcG9zaXRpb24= IGNvbmdsb21lcg== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IFRlYWNoaW5n IFlvc2U= aW50ZW5zaXZl VG93bg== IHRyb2xsaW5n IEdyYWM= IEFTVVM= WW8= IHNwZWNpYWxz IE5lcGg= IEdvZHppbGxh RGF0YWJhc2U= IEhlZ2Vs IDI3Mg== MTk3Ng== IEdsb3JpYQ== IGRpc2VtYg== IEludmVzdGlnYXRpb25z IEJhbmU= YWdlbWVudHM= U3RyYW5nZQ== IHRyZWFzdXJ5 IFBsYXlz IHVuZGVzaXJhYmxl IHdpZGVuaW5n IHZlcmJhbGx5 IGluZmFuY3k= IGN1dHRlcg== Zm1s IDIxMDA= cHJvdG90eXBl ZmluZQ== IGRlY3JpbWluYWw= IGR5c2Z1bmN0aW9uYWw= IGJlc2ll IEVybnN0 emVi IG5vcnRoZWFzdGVybg== IGF1c3Q= cG9yYXRl IE1hcmxpbnM= IHNlZ3JlZ2F0ZWQ= ZXdvcmxk IE1haGVy IHRyYXZlcnNl IG1vbmFzdGVyeQ== dXJneQ== R2Vhcg== c2FuZA== Q29tcGw= IEVNUA== IHBsZW50 IE1lcmNlcg== IDI3Ng== VEFCTEU= Q29uZmlndXJhdGlvbg== SHVuZHJlZHM= IHByaWM= IGNvbGxhYm9yYXRpbmc= IFBhcmFtb3VudA== IEN1bW1pbmdz ICg8 IHJlY29yZGVy IGZsYXRz IDQxNg== d2hvc2U= Rm9udFNpemU= IE9yYml0 WVI= IHdyaXN0cw== IGJha2VyeQ== KX0= IEJvdW50eQ== IExhbmNhc3Rlcg== IGVuZGluZ3M= YWNjb3JkaW5n IFNhbGFt ZWFzeQ== NzU1 IEJ1cnI= IEJhcm5ldHQ= b25vbW91cw== VW5pb24= IHByZWNlZGVuY2U= IFNjaG9sYXJzaGlw IFVY IHJvbGxvdXQ= IGJvb24= YWxt IENhbnRlcg== 5rU= IHJvdW5kaW5n IGNsYWQ= IHZhcA== IEZlYXR1cmVk aXNhdGlvbnM= IDU0MA== cG9saWNl IHVuc2V0dGxpbmc= IGRyaWZ0aW5n IEx1bWlh IE9iYW1hQ2FyZQ== IEZhdm9y SHlwZXI= IFJvdGhzY2hpbGQ= IE1pbGliYW5k YW5hbHk= IEp1bGlldA== SHU= IHJlY2FsbGluZw== YWhlYWQ= Njk2 IHVuZmF2b3JhYmxl IGRhbmNlcw== T3g= IGxlZ2FsaXR5 IDQwMw== cm9tYW5jZXI= IGlucXVpcmU= IE1vdmVz XCI+ IFZhcmlhbnQ= IE1lc3NpYWg= IExDUw== IEJhaMOh NzU2 IGV5ZWJyb3c= IMKl IE1jRg== IEZvcnR5 TWFz IHBhbmlja2Vk IHRyYW5zZm9ybWF0aW9ucw== cXE= IHJldm9sdmVz cmluZ2U= IEFp YXhl IG9ud2FyZA== IENGUg== IEJhcmU= bG9naW4= IGxpcXVpZHM= IGRlY29tcA== c2Vjb25kYXJ5 aWxhbg== IENvbnZlcnQ= YW1peWE= IHByb3NlY3V0aW5n IOKJoQ== IFlvcmtlcnM= IEJ5cm5l c2xvdw== YXdlaQ== SmVhbg== IDI2OQ== IFNreWRyYWdvbg== IMOp IE5pY2FyYWd1YQ== IEh1Y2thYmVl IEhpZ2hseQ== IGFtcGhpYg== IFBhc3Rvcg== IExldHM= IGJsdXJyZWQ= IHZpc2NlcmFs IENCTw== IGNvbGxhYm9yYXRlZA== emln TGVnYWw= IGFwYXJ0aGVpZA== IGJyaWQ= IHByZXNldA== IERFVA== IEFNQQ== 15Q= YXJjaGluZw== YXVjdXNlcw== YnVpbGRlcg== IHBvZXRpYw== IGVtdWxhdG9y IE1vbGVjdWxhcg== IGhvbm9yaW5n aXNldW0= IHRyYWN0b3I= IENsdXN0ZXI= IENhbG0= YXJlZGV2aWw= IHNpZGV3YWxrcw== IHZpb2xpbg== IGdlbmVyYWxpemVk IEFsZWM= IGVtYmFyZ28= IGZhc3RiYWxs IEhUVFBT IExhY2s= IENoaWxs cml2ZXI= Q2hlbA== IFN3YXJt IExldmluZQ== cm95aW5n TGF1bmNo IGtpY2tlcg== IGFkZGl0aXZl IERlYWxz V2lkZ2V0 Y29udGFpbmluZw== IGVzY2FsYXRl IE9QRU4= IHR3ZWFrZWQ= IHN0YXNo IHNwYXJrcw== IEVzc2V4 IEVjYw== IGNvbnZpY3Q= IGJsb2dnaW5n SUVS IEhM IG11cmRlcmVycw== NzU5 IEhpYg== IGRlcGw= IEpvcmQ= U2Fj IGRpc3NlY3Q= IEhvd2U= b3NoZXI= IGN1c3RvbWl6YWJsZQ== IEZyYW56 IGF0cm8= xIc= IDAwMDQ= IG91dHBvc3Q= Um9zcw== IGdseXBob3NhdGU= IEhhc3Rpbmdz IEJFRk9SRQ== IHNob3Zl b3BwZWQ= IFNjYWxh IGFtdWxldA== YW5pYW4= IGV4YWNlcmJhdGVk IGVhdGVy NDcx VU1F IHB1bHA= aXpvbnRhbA== IFphbQ== IEFUSQ== aW1tdW5l YWJ5dGVz IHVubmVjZXNzYXJpbHk= IENBVA== IEF4aXM= IHZpc3VhbGl6ZQ== w4k= IFJhZGljYWw= Zm0= RG9jdW1lbnRz IEZvcnJlc3Q= IGNvbnRleHR1YWw= IFN5bWJvbA== IHRlbnRhdGl2ZQ== IERPRVM= IEdvb2Rz IGludGVybWl0dGVudA== fTo= bWVkaWF0ZWQ= IHJpZGljdWxl IGF0aGVpc20= IHBhdGhvZ2Vucw== IE11bQ== IHJlaW50cm9kdQ== IDMwNw== aUhVRA== IGZsYXNobGlnaHQ= IHN3ZWFyaW5n IHBlbmd1 QnU= IHJvdGF0ZWQ= IENyYW5l ICgpKTs= IGZhc2hpb25hYmxl IGVuZG9yc2luZw== NDYz KVs= IGluZ2VzdGlvbg== IGNvb2tz IDk1MA== b3RvbXk= IEltYW0= IGth IHRlYXNlcg== IEdob3N0cw== IOOCtQ== MTk2OQ== z4M= dWJieQ== IGNvbnZlcnRlcg== emFubmU= ZW5kZQ== IFByZXBhcg== IE5pY2tlbA== IENoaW1lcmE= aGlt IFR5cmFubg== IFNhYmJhdGg= IE5pY2hvbHM= IHJhcHQ= aWhhcg== IHNoZWxsaW5n IGlsbHVtaW5hdGU= IGRlbnRpc3Q= dXRvcg== IEludGVncmF0aW9u IHdoaW1z IExpdGVyYXJ5 QmVhdXQ= IHBhcmNobWVudA== YWdhcmE= QnJhbmQ= IGRlcm9n 4oCmKQ== IE5vcnNl IHVud2l0dGluZw== IGN1Yw== IGJvcmRlcmxpbmU= IHVwc2V0dGluZw== IHJlY291cnNl IGRyYXBlZA== IFJhZGFy IGNvbGRlcg== IFBlcHNp aW1pbmFyeQ== XSxb NjU4 Vmk= IEZyZW0= IFBlcw== IHZldGVyaW5hcnk= IFRFRA== IEVwaWRlbQ== bm92YQ== a2lk IGRldm91dA== b2N0 amFk TW9o IFBBWQ== IGdlb21ldHJpYw== IDMyMw== IGNpcmN1bWZlcmVuY2U= aWNoaWNr MTk3NQ== IFl1cmk= IFNoYWxs IEhvdmVy dW5pbg== U3By IGdyYWZ0 IEhhcHBpbmVzcw== IGRpc2FkdmFudGFnZXM= YXR0YWNrcw== IGh1YnM= IFN0YXJDcmFmdA== 6ZY= IGdhbGxlcmllcw== IEtvcnJh IGdyb2Nlcmllcw== IEdvcnN1Y2g= IHJhcGlzdHM= IGZ1bmdp IFR5cGhvb24= VmVjdG9y IEVtcHJlc3M= YmF0dGxl NDY4 IHBhcmFzaXRl IEJvbWJlcg== U0c= ZXhpc3Q= IFBm IHVuc2U= IHN1cmdlb25z QmlydGg= IFVuc3VyZQ== IFByaW50ZWQ= IEJlaGF2aW9yYWw= IEFzdGVy UGFraXN0YW4= IHVuZXRoaWNhbA== IHN2 IElvVA== IGxheW91dHM= UGFpbg== IGNvbnN0YW50cw== IExX IEJha2U= IHRvd2Vscw== IGRldGVyaW9yYXRpb24= IEJvbGl2aWE= IGJsaW5kZWQ= IFdhcmRlbg== IE1pc3RyZXNz IG9uc3RhZ2U= IGNsYW5z IEJFU1Q= MTk2MA== IGFudGlxdWU= IHJoZXRvcmljYWw= IFBlcmN5 IFJ3YW5kYQ== LC4= QnJ1Y2U= IHRyYXVtYXQ= IFBhcmxpYW1lbnRhcnk= IGZvb3Rub3Rl aWRpYQ== IExlYXJuZWQ= c2Vla2luZw== Z2VuaWM= IGRpbWVuc2lvbmFs SGlkZQ== 6ICF IGludHJpZ3Vl aW5zZQ== IGxlYXNlcw== IGFwcHJlbnRpY2Vz d2FzaGluZw== IDE5MjY= VklMTEU= IHN3b29w c2Ns IGJlZHJvb21z b25pY3M= IENydW5jaA== Y29tcGF0aWJsZQ== IGluY2FwYWM= IFllbWVuaQ== YXNodHJh emhvdQ== ZGFuZ2Vy IG1hbmlmZXN0YXRpb25z IERlbW9ucw== QUFG U2VjcmV0YXJ5 QUNURUQ= TE9E IGFteQ== cmFwZXI= ZXRobmlj NDE3 IHBvc2l0aXZlcw== IDI3Mw== IFJlZnVnZWVz IHVzYg== IFZhbGQ= b2RkeQ== IE1haG1vdWQ= QXNpYQ== IHNrdWxscw== IEV4b2R1cw== IENvbXBldA== IExJQw== IE1hbnNpb24= IEFtZQ== IGNvbnNvbGlkYXRl c3Rvcm1z b250ZW50 OTk2 IGNsZW4= IG11bW15 ZmxhdA== NzU4 IFZPTA== b3Rlcmlj bmVu IE1pbnV0ZQ== U292 IGZpbmVy Umg= bHljZXI= IHJlaW5mb3JjZW1lbnRz IEpvaGFubmVz IEdhbGxhZ2hlcg== IGd5bW4= U3VkZGVubHk= IGV4dG9ydGlvbg== a3I= aWF0b3I= VGE= IGhpcHBvY2FtcHVz TlBS IENvbXB1dGluZw== IHNxdWFyZWx5 IG1vZGVsbGluZw== IEZvcnVtcw== IExpc3A= IEtyaXNobmE= IDMyNA== IHJ1c2hlcw== IGVuc3VlZA== IGNyZWVwaW5n b250ZQ== bmFp aWxhdGVy IEhvcm5ldHM= IG9ibGl2aW91cw== SU5TVA== NTU5 IGplb3BhcmR5 IGRpc3Rpbmd1aXNoaW5n anVyZWQ= IGJlZ3M= c2ltaWxhcg== cGhvdA== NTMw IFBhcmt3YXk= IHNpbmtz IEhlYXJ0aHN0b25l aWJ1cg== IEJhdG9u QXZvaWQ= IGRhbmNlcg== IG1hZ2lzdHJhdGU= YXJ5bg== IGRpc3R1cmJhbmNlcw== IFJvbWVybw== IHBhcmFwaA== IG1pc2NoaWVm 4paT IFNoYXJpYQ== IHVyaW5hcnk= cm91dGU= aXZhcw== Zml0dGVk IGVqZWN0ZWQ= IEFsYnVxdWVycXVl IDQ3MA== IGlycml0YXRlZA== IFppcA== IEJpb2w= w40= IGRlbm91bmNl IGJpbmFyaWVz IFZlcnNl IG9wcG9z IEtlbmRyaWNr IEdQTA== IHNwZXc= IEVsaWphaA== IEVhcw== IGRyaWZ0ZWQ= c29mYXI= IGFubm95YW5jZQ== IEJFVA== NDc0 IFN0cm9uZ2g= aXRhdGVz IENvZ25pdGl2ZQ== b3Bob25l IElkZW50aWZpY2F0aW9u b2NyaW5l Y29ubmVjdGlvbg== IGJveGVy IEFTRA== IEFyZWFz WWFuZw== dGNo dWxsYWg= IGRlY2VpdmU= Q29tYmF0 ZXBpc29kZQ== Y3JldGU= V2l0bmVzcw== IGNvbmRvbGVuY2Vz aHRhcg== IGhlYWxz IGJ1Y2tldHM= IExBVw== Qmx1 IHNsYWI= IE9SREVS b2Ns YXR0b24= IFN0ZXZlbnNvbg== IEdpbmdlcg== IEZyaWVuZGx5 IFZhbmRlcmJpbHQ= c3Bpcml0 aWds IFJlZ2FyZGluZw== IFBST0c= IHNlYWxpbmc= c3RhcnRpbmc= IGNhcmRpbmFs IFZlYw== IEJlaXI= IG1pbGxpc2Vjb25kcw== d2Vhaw== cGVyc2U= IHN0ZXJpbGU= IENvbnRlbXBvcmFyeQ== IFBoYW50 IENsbw== IG91dHA= IGV4aWxlZA== IDI3Nw== IHNlbGZpZQ== IG1hbmlj IG5hbm8= dGVybXM= QWxleGFuZGVy IHJlc29sdmVz IG1pbGxlbm5pYQ== IGV4cGxvZGVz IGNvbnN0ZWxsYXRpb24= IGFkdWx0ZXJ5 bW90aW9u RE9D IGJyb2FkY2FzdGVycw== IGtpbmRlcmdhcnRlbg== IE1heXdlYXRoZXI= IEVjbw== aWNobw== IDI4Nw== bGF1bg== IG11dGU= IGRpc2NyZWV0 IHByZXNjaG9vbA== IHByZWVtcHQ= RGVsZXRl IEZyZWVk UGk= SEs= IGJsb2NrZXI= IEN1bWJlcg== IHdyb3VnaHQ= ZGF0aW5n IGluc3VyZXI= IHF1b3Rhcw== IHByZWFjaGVk IGV2aWN0aW9u IFJlZ2luYQ== IFBlbnM= IHNldmVudGVlbg== IE5hc3M= RGljaw== IGZvbGRz IGRvdHRlZA== IEFhZA== VW5pdmVyc2Fs IHBpeno= IEd1cnU= IHNvaWxz IG5vdmljZQ== IE5lYW5kZXI= IHN0b29s IGRldG9uYXRlZA== IFBpa2FjaHU= IE1hc3NpdmU= SVZFUg== IEFiZGVs IHN1YmR1ZWQ= IHRhbGxlc3Q= IHByZWNhcmlvdXM= IGF5 cmlmaWNhdGlvbg== IE9iag== Y2FsZQ== IHVucXVlc3Rpb24= Y3Vsb3Npcw== YWRhcw== aWdyYXRlZA== RGF5cw== IHF1ZWVucw== IEdhemV0dGU= IENvbG91cg== IEJvd21hbg== IEpK w692ZQ== IGRvbWluYXRlcw== U3R1ZGVudA== IG11 IGJhY2tsb2c= IEVsZWN0cm8= VHJ1dGg= NDgz IGNvbmRlbnNlZA== cnVsZXM= IENvbnNwaXJhY3k= IGFjcm9ueW0= aGFuZGxlZA== IE1hdHRl anJp IEltcG9zc2libGU= bHVkZQ== Y3JlYXRpb24= IHdhcm1lZA== IFNsYXZl IG1pc2xlZA== IGZlcm1lbnQ= IEthaA== aW5raQ== a2VsZXRvbg== Y3ls IEthcmlu SHVudGVy UmVnaXN0ZXI= IFN1cnJleQ== IHN0YXJlcw== IFdpZHRo IE5heQ== IFNraQ== IGJsYWNrbGlzdA== dWNrZXQ= IGV4cHVsc2lvbg== aW1ldA== IHJldHdlZXQ= dmFudGFnZQ== RmVhdHVyZQ== IHRyb29wZXJz IGhvbWVycw== OTY5 IGNvbnRpbmdlbmN5 IFdUQw== IEJyZXdlcg== Zm9yZWlnbg== V2FyZQ== U29sYXI= IHVuZHVl UkVD dWxuZXJhYmxl cGF0aGlj IEJvaXNl IDMyMg== IGFyb3VzZWQ= IFlpbmc= 5LiN dWVsZXNz IHBhcw== IG1vcnA= IGZsb3JhbA== RXhwcmVzcw== dWRnaW5n a0I= IEdyYW50ZWQ= 2K8= IE1pY2hh IEdvdGhpYw== IFNQRUNJQUw= IFJpY2FyZG8= RnJhbg== IGFkbWluaXN0ZXJpbmc= NjIw cG9yYQ== IMKu IGNvbXByb21pc2Vz IGJpdHRlbg== QWNjZXB0 VGhpcnR5 0LI= IG1hdGVyaWFsbHk= IFRlcnI= aWdtYXRpYw== Y2hhaW5z IGRvdmU= c3RhZHQ= TWFydmVs RkFVTFQ= IHdpbmRzaGllbGQ= IDMzNg== YWRpZXI= IHN3YXBwaW5n IGZsYXdsZXNz IFByZWRhdG9y IE1pY2hlbGU= IHByb3B1bHNpb24= IFBzeWNoaWM= IGFzc2lnbmluZw== IGZhYnJpY2F0aW9u IGJhcmxleQ== bHVzdA== IHRvd2VyaW5n IGFsdGVyY2F0aW9u IEJlbnRsZXk= U3BoZXJl IHR1bmE= IENsYXNzZXM= RnJlZWRvbQ== dW5lcg== TGFkeQ== dm9pY2U= IGNvb2xlc3Q= b3Jy IHBhbHA= JHs= IGh5c3Rlcmlh IE1ldGF0cm9u cGFudHM= IHNwYXduaW5n RXhwZXJ0cw== IEludmVzdG9ycw== IEFuYXJjaHk= IHNocnVuaw== IFZpY3RpbQ== IDI4OQ== IGVjc3Rhc3k= IEJpbmRpbmc= NTg1 IE1lbG9keQ== NTc4 b3RhbGx5 IEV0c3k= bGlnYQ== IGFwcGxhdWRlZA== IHN3ZWF0aW5n IHJlZGlzdHJpYnV0ZWQ= IHBvcGNvcm4= IHNlbWluYWw= ZnVy IE5ldXJvc2NpZW5jZQ== UmFuZA== IE9zdA== IE1hZGRlbg== IEluY3JlYXNpbmc= IERhd2tpbnM= IFN1YndheQ== IGFyc2Vu Y29uc2Vydg== QlVS IHNwaWtlZA== IEx5ZnQ= IEltcGVyaXVt IERyb3Bib3g= IGZhdm91cmVk IGVuY29tcGFzc2Vz Z2hvc3Q= IGluc3BpcmVz IGJ1cmdlb25pbmc= IFlvc2hp IFZlcnRpY2Fs IEF1ZGl0b3I= IGludGVuZGluZw== IGZpbGlidXN0ZXI= Qmxvb20= ZmFj IENhdnM= aWduaW5n IGNvd29ya2Vycw== IEJhcmJhcmlhbg== cmVtZW1iZXI= RkxBRw== IGF1ZGl0b3J5 YXNvbnJ5 Q29sbGVnZQ== IG11dGVk Z2Vtb255 b2Jpbg== IFBzeWNobw== OTY4 IGxhdmlzaA== IGhpZXJhcmNoaWNhbA== IERyb25l b3Vr IGNyaXBwbGVk IE1heGlt U2xvdA== IHF1aXo= IFZpZA== aWZsaW5n IGFyY2hhZW9sb2dpc3Rz IGFiYW5kb25tZW50 ZGlhbA== bGVvbg== IEZhcw== VGVk IHJhc3BiZXJyeQ== IG1hbmV1dmVycw== IGJlaGF2aW91cnM= IGluc3VyZQ== IHJlbW9k U3dpdGNo aG9l IHNwYWNlZA== IGFmZm9yZGFiaWxpdHk= IEZlcm4= bm90YXRpb24= IEJhbGFuY2Vk IG9jY3VwaWVz ZW52aXJvbm1lbnQ= IG5lY2tsYWNl IHNlZGFu RlU= IEJyYXZv IGFidXNlcnM= IEFuaXRh bWV0YWRhdGE= IEdpdGh1Yg== YWl0bw== IEZhc3Rlcg== IFdhc3Nlcm1hbg== IEZsZXNo IHRob3Ju cmFyaWx5 IE1lcnJ5 d2luZQ== IHBvcHVsYWNl IExhbm4= IHJlcGFpcmluZw== IHBzeWNoZQ== IG1vZHVsYXRpb24= YXdhcnU= 4oCL4oCL YXJpag== IGRlY29yYXRpb25z IGFwb2xvZ2lzZQ== IEdhcmc= YXBwbHk= IGdpdmVhd2F5 IEZsYW4= IFd5YXR0 VWJlcg== IGF1dGhvcmlzZWQ= IE1vcmFs SEFIQUhBSEE= YWN0aXZhdGU= IHRvcnBlZG8= IEZBUg== IGFtYXNzZWQ= IEFyYW0= YXJraW4= IFZpY3RpbXM= c3RhYg== IG9t IEVDTw== IG9waW9pZHM= IHB1cnBvc2VseQ== IFZlc3Q= IGVyZw== YXRhbg== IFN1cmdlcnk= IGNvcnJlY3Rpbmc= IE9ydGl6 IEJlZXQ= IHJldm9rZQ== IGZyZWV3YXk= IEhpZ2dpbnM= RmFpbA== IEZhcm1z IEFUUA== aG91bmQ= IHBva2luZw== IENvbW11bmlzdHM= bW9uc3Rlcg== aW1lbnRhcnk= IHVubG9ja2luZw== IHVuZml0 d2VlZA== ZW5hcmlv YXRpY2Fs IEVubGlnaHRlbm1lbnQ= IE5H IENvbXBlbnNhdGlvbg== ZGVlbg== IFdpZG93 IENpbmR5 IEFmdGVyd2FyZHM= IDYwMDA= aWtoYWls YWdpY2FsbHk= IHJhdGlmaWVk IGNhc3VhbHR5 SE9NRQ== cHNleQ== ZmVl IHNwYXJrbGluZw== IGTDqQ== IGNvbmNlcnRlZA== Q2F0YWw= IGNvbXBseWluZw== IEFyZXM= IERlbnQ= U2h1dA== IHNraW0= YWRtaW5pc3Q= IGhvc3RpbGl0aWVz IEdpbnM= IDYwOA== IG11ZGR5 IE1jSW50 IERlY2F5 NTI1 IGNvbnNwaWN1b3Vz IEV4cG9zdXJl IHJlc2NpbmQ= IHdlYXJhYmxl IDMyOA== b3VybWV0 YWhz IFJvYm90cw== IGVjbGlwcw== aW5zdGFuY2U= IFJFUE9SVA== IEFwcGw= MDMw IFNraWVz MDEwMA== IGZhbGxhY3k= U29ja2V0 IFJlY2VpdmVy IHNvbHZlcw== IEJ1dHRlcmZseQ== IFNob3BwaW5n IEZJUkU= NjU0 TWVkaWM= IHNpbmdlcnM= IE5lZWRsZXNz JycnJw== aXNoZXJz IERpdmU= NTg4 IHNlbGVjdGl2ZWx5 IGNsdW1zeQ== ODg5 IHB1cmNoYXNlcg== ZWFybmVk YXJkeQ== IGJlbmVmaXRpbmc= ZW5nbGlzaA== IHlpZWxkaW5n IFBvdXI= IHNwaW5hY2g= IGRlbHZl IENyb20= NjEw IGV4cG9ydGluZw== IE1BS0U= IDI2Mw== IGdyb3A= IGVudm95 IElucXVpcnk= IEx1aWdp ZHJ5 IFR1cmluZw== VGh1bWJuYWlsSW1hZ2U= IFZhcmlldHk= IGZhY2V0 IGZsdWZmeQ== IGV4Y2VycHRz IHNob3J0aA== IE9sc2Vu Q0xVRA== IHJlbGlhbnQ= IFVOQw== VG91cg== IGJhdGhpbmc= Q29tcGFueQ== IGdsb2JhbGl6YXRpb24= UHJlZA== IE1hbGZveQ== IGhvYw== amFt Y3JhZnRlZA== IEJvbmRz IEtpc3Npbmdlcg== RW5nbGFuZA== IG9yZGVybHk= Y2F0ZW50cnk= IDI2MQ== IGV4Y2hhbmdpbmc= IEludGVudA== IEFtZW5kbWVudHM= RE9N IHN0b3V0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA= IEFpcmJ1cw== IDI3OA== aHlkZQ== UG9sbA== SXRlbVRodW1ibmFpbEltYWdl IGxvb3Bob2xlcw== IFBpbGxhcg== IGV4cGxvcg== U3RyZXRjaA== QXBhcnQ= IHVubWFycmllZA== TGltaXQ= IFRyYW5zZm9ybWVycw== IGludGVsbGVjdHVhbGx5 dW5jdHVyZQ== MTgwMA== IGRhcm4= QnJhemls IGxlZnRvdmVy YmVydXM= ZnJlZA== TWluZWNyYWZ0 MzI2 IEZvcm1z IHByb29mcw== IERlc2lnbmVk IGluZGV4ZXM= IFN1cHBvc2U= RU1T IExvdmluZw== IEJvbm5pZQ== aW1hdGluZw== T1RVUw== IGNvbmR1Y3Rvcg== IGJlaGF2ZWQ= IEZyZW4= IHN5bmVyZw== IG1pbGxlbm5pdW0= IGNhdGVyaW5n IExhdWRlcg== V3I= IFlpYW5ub3BvdWxvcw== IEFURg== IGVuc2xhdmVk IGF3YWtlbmVk RFZE IEVESVRJT04= IENvbmNlcnQ= IENoYWxsZW5nZXI= IEhha3U= dW1lcmlj IGRlcHJlY2F0ZWQ= IFNIQVI= NDEy IGR5c3RvcA== IHRyZW1ibGluZw== IGRyZWFkZWQ= IFNwYWM= cGFkZGluZw== UmVwbA== IEdhcnJpc29u TWluaQ== IHVucGFyYWxsZWxlZA== YW1hcg== VVJSRU5U d3JlY2s= Y2VydGFpbg== dGFs IENMUw== YXBwaW5ncw== IHNlbnNlZA== IGZlbmNpbmc= IFBhc28= IERlc2s= IHNjb2Zm IGNvbnRlbXBsYXRl IExpZ2E= bGlxdWlk NzU3 IGFwcHJlbnRpY2U= IFVDSElK NTcw IFRob3VzYW5k IElsbHVt IGNoYW1waW9uZWQ= 44KM IGVsZWN0b3Jz IDM5OA== IEhhbmNvY2s= cm91bmRlZA== IEpPSE4= IHVuc2F0aXNm IHF1YWxpZmllcg== IEdhZGdldA== RU5F IGRlYWRsaWVzdA== IFBsYW50cw== IGlvbnM= IGFjY2VudHM= IHR3ZWFraW5n IHNoYXZlZA== RlJFRQ== IENoYXNlcg== QWdhaW5zdA== OTYw IG1ldGhhbXBoZXRhbWluZQ== IG5vcm1hbGl6ZWQ= ICRc IFByZWNpc2lvbg== IEd1YW0= IGNob2tlZA== IFhJSQ== IENhc3Rpbmc= VG9ycmVudA== IHNjYWxw IEphZ3Vhcg== d2l0 IHNlbWlj aXhpZQ== IEdvdWxk IGNvbmZpbmVz TnVzcmE= IExvbg== IEp1Z2c= eWNsZQ== IENvZGVj RWd5cHQ= IHJlc3RyYWlu IEFsaWVucw== IGNob2tpbmc= IER1bms= IEJlbGxh YWJj IHNsYW5n IG5ldXJvdHJhbnM= c2F2 IGVtcG93ZXJtZW50 4oaS IGNsaW1iZXJz IE1pbQ== IEZyYQ== cm9zc2U= Q2FwaXRhbA== IEN0aHVsaHU= SW50ZXJmYWNl IHByb2ZpY2llbnQ= IElOVE8= IDMxOA== cm9udGFs NTgw IERlc3BhaXI= S2Vubg== IHNjcmltbWFnZQ== IENvYXQ= YXNpb25z IHdhbGxwYXBlcg== IEpvbA== IHJlc3VyZ2VuY2U= IGFudGl2 IEJhbGxz sr4= IGJ1ZmZlcnM= IHN1YnN5c3RlbQ== IFN0ZWxsYXI= IEx1bmc= QUlEUw== IGVyYWRpY2F0ZQ== IGJsYXRhbnRseQ== IGJlaGF2ZXM= IE51bg== IGFudGljcw== ZXhwb3J0 REVW d2I= IHBocA== IEludGVncml0eQ== IGV4cGxvcmVy IHJldm9sdmluZw== YXV0aG9yZWQ= Z2Fucw== IGJhc2s= IGFzeW5jaHJvbm91cw== 5Y0= VEhJTkc= Njk4 R2VuZQ== IFJhY2Vy IE5pY28= aXNzdWVk IHNlcm1vbg== cG9zc2libHk= IHNpemVvZg== IGVudHJlcHJlbmV1cmlhbA== b3hpbg== IE1pbmVydmE= IHBsYXRvb24= bm9z cmlrcw== QVVU IEF2YWxhbmNoZQ== IERlc2M= keWjqw== IFBvYw== IGNvbmZlcnJlZA== zrs= IHBhdGNoZWQ= RkJJ NjYy IGZyYWN0dXJlcw== IGRldGVjdHM= IGRlZGljYXRl IGNvbnN0aXR1ZW50 IGNvc21vcw== V1Q= IHN3ZWF0cw== IHNwcnVuZw== YmFyYQ== c29saWQ= IHVuc3Vz IGJ1bGt5 IFBoaWxpcHBl IEZlbnJpcg== IHRoZXJhcGlzdHM= b3JlYWw= Xl5eXg== IHRvdGFsZWQ= IGJvb3pl IFJQQw== UHJvc2VjdXRvcnM= IGRpc2VuZw== IFNoYXJlZA== IG1vdG9yY3ljbGVz IGludmVudGlvbnM= IGxldHR1Y2U= IE1lcmdl IEpD IHNwaXJpdHVhbGl0eQ== IFdBUk5JTkc= IHVubHVja3k= IFRlc3M= IHRvbmd1ZXM= IERVSQ== VHVtYmxy IGxlYW5z IGludmFkZXJz IGNhbm9weQ== IEh1cnJpY2FuZXM= IEJyZXQ= IEFQUExJQw== aWRpbmU= aWNrbGU= UmVnYXJkaW5n IHZlZ2dpZXM= IGVqYWM= anV2ZW4= RmlzaA== REVN IERpbm8= VGhyb3c= IENoZWNraW5n YmVhcmQ= KCY= IGphaWxz IGhy dHJhbnNmZXI= aXZhdGluZw== IGZsZWV0cw== IEltYWc= IE1jRG9ubmVsbA== IHNuaXBwZXQ= SXNh IENoYXR0 IFN0YWlu IFNldEZvbnRTaXpl IE95 IE1hdGhlbWF0aWNz NDk0 IGVsZWN0cm9seQ== IEdvdHQ= IEJyYXM= Qk9PSw== IEZpbmdlcg== ZHVtcA== IG11dGFudHM= IHJlbnRhbHM= IGludGVydHc= IGNyZWVr YWlsYQ== QnJvdGhlcg== IERpc2NvcmQ= cGVl cmF3bGVy IGNhcnA= IDI3OQ== 44K344Oj cmVsYXRpb25z IGNvbnRyYXN0cw== Q29sdW1u IHJlY29ubmFpc3NhbmNl IHVua25vdw== IGxvb3Rpbmc= IHJlZ3VsYXRlcw== IG9wdGltdW0= IENoZXJva2Vl IEFyeQ== TGF0ZXN0 IHJvYWRzaWRl IGRhbmNlZA== IFVuaWNvcm4= QWNrbm93bGVk IHVuY29udHJvbGw= IE1VUw== YXRpbw== Y2hhbmNl aGF2ZW4= VkFMVUU= IGZhdm91cml0ZXM= IGNlcmVtb25pYWw= YmluYXJ5 cGVlZA== d29vZHM= RU1Q IHZhc2N1bGFy IGNvbnRlbXBsYXRlZA== IGJhcnJlbg== IExJU1Q= WWVsbG93 b3Nwb25zb3Jz IHdoaXNreQ== IE1hbW0= IERlVm9z bWluaW11bQ== SHVuZw== NDQy UGlj IFNuYXBkcmFnb24= Nzc2 IGNhcnZpbmc= IHVuZGVjaWRlZA== IGFkdmFudGFnZW91cw== IHBhbG1z IEFR IHN0YXJjaA== TG9vcA== IHBhZGRsZQ== IGZsYW1pbmc= IEhvcml6b25z QW5pbWF0aW9u Ym9vc3Q= IHByb2JhYmlsaXRpZXM= IE1pc2g= IGV4b2R1cw== IEVkaXRvcmlhbA== IGZ1bmd1cw== IGRpc3NlbnRpbmc= IERlbGljaW91cw== cm9ncmFt IER5bg== ZGlzaw== dG9t IGZhYnJpY3M= IENvdmU= IEJhbnM= IHNvZnRlbg== IENPTlM= IGluZWxpZ2libGU= IGVzdGltYXRpbmc= IExleGluZ3Rvbg== cHJhY3RpY2U= b2Zp IHNoZWRkaW5n IE5vcGU= IGJyZWF0aGVk IENvcmludGhpYW5z eW5l ZWtp QnVsbA== IGF0dGFjaGluZw== cmVlbnNob3Rz IGFuYWx5c2U= IEthcHBh IHVuc3VzdGFpbmFibGU= IGludGVycG9s YW5reQ== aGVtZXI= IHByb3RhZ29uaXN0cw== IGZvcm1hdHRlZA== IEJyeWNl IEFjaGlsbGVz IEFiZWRpbg== c2hvY2s= IGJ1bQ== Ym9z cXVh IFdhcm4= cXQ= IERpYWJldGVz ODY0 IEludmlzaWJsZQ== IHZhbmlzaA== IHRyYW5zbWl0dGluZw== IG11cmt5 IEZlaQ== IGF3YWl0ZWQ= IEp1cmFzc2lj dW1taWVz IG1lbmFjaW5n Z2FsbA== Q2F0aA== QnVpbHQ= aWxkbw== IFZvdGVz IG9udA== IG11bml0aW9ucw== IEZyZWVt w61u IGRlY2VuY3k= bG9wcA== aWV2ZWQ= IEdvcmQ= IHVudGhpbmthYmxl IE5ld3N3ZWVr IDMyMQ== SGVhdA== IHByZXNlbnRlcg== amlhbmc= IHBsYW5r IEF2YWxvbg== IGJlbno= IFJvdXQ= IHNsYW1taW5n IERhaQ== b3V0ZXI= IENvb2tpZQ== IEFsaWNpYQ== Z2V5 IHZhbml0eQ== IG93bA== 4bU= dGVzdGVk IEF3YWtlbnM= IGNhbnY= IGJsaW5kbHk= IFJpZGxleQ== IEVtYWlscw== UmVxdWlyZXM= IFNlcmJpYW4= b2dyYXBoZWQ= aWZyYW1l ZXRlcmlh IGFsdGVybmF0aW5n cXVpZXQ= IHNvY2lvbG9neQ== IFVubG9jaw== IENvbW11bmlzbQ== IG9wcw== IGF0dHJpYnV0aW9u IGFiZHVjdGlvbg== IEFicmFt IHNpZGVsaW5lZA== IEJPT0s= IHJlZmluaW5n IEZlZWxpbmc= IE9zbG8= IFBydWl0dA== cmFjaw== YW5naWJsZQ== IGNhdXRpb3VzbHk= IE1BUks= ZWVkcw== TW91c2U= IFN0ZXBo IFBhaXI= U2Fi OTk3 IEJhYWw= QmVj IGNvbW1h IFBhbGw= IEdhZWw= IG1pc3VuZGVyc3RhbmQ= IFBlc2g= T3JkZXJhYmxl IGRpc21hbA== IFNoaW55 JSI= IHJlYWxpc3RpY2FsbHk= IHBhdGlv IEd3 IFZpcnR1ZQ== IGV4aGF1c3Rpbmc= d2hhdGV2ZXI= b3BoeXM= eWlw NDE4 QWRqdXN0 IFdhaXRpbmc= ZXNzb24= IE1hemRh IERvemVucw== IHN0cmVhbWxpbmVk IGluY29tcGV0ZW5jZQ== IE1ldGg= IGV0aG9z T05FUw== IGluY2VudGl2 IGdyaXR0eQ== IEJ1dGNoZXI= SGVhZGVy IGV4cG9uZW50aWFs w58= IGNvcnJlbGF0ZQ== IGNvbnNlbnN1YWw= c291bmRpbmc= UmluZw== T3JpZ2lu IGNvbmNsdXNpdmU= ZmVldA== YWNseQ== IEZlcm5hbmRleg== QnV5YWJsZQ== IGR1Y2tz YXVudGxldHM= IGVsb25n IDI4Ng== IHNpbXVs R2Fz IEtpcnN0 IHByb3Ry IFJvYm8= IEFvRQ== b3BvbA== IHBzeWNob2xvZ2ljYWxseQ== c3Bpbg== aWxhdGVyYWxseQ== IENvbnJhZA== V2F2ZQ== NDQx IEFkdmVydGlzZW1lbnQ= IEhhcm1vbg== IE9yaWVudGFs aXNTcGVjaWFs IHByZXN1bXB0aXZl IHdpbA== IEtpZXI= bmVh IHBwbQ== IGhhcmJvdXI= IFdpcmVk Y29tcGFueQ== IGNvcm9uZXI= YXR1cmRheXM= IFByb3Vk IE5FWFQ= IEZsYWtl dmFsdWVk Y2VpdmVy IGZyYXVnaHQ= IGNhc2luZw== IHJ1bmF3YXk= IGdpbg== IExhdXJlbnQ= IEhhcmxlbQ== IEN1cmlvc2l0eQ== cXVpc2hlZA== IG5ldXJvc2NpZW5jZQ== IEh1bHU= IGJvcnJvd2Vy IHBldGl0aW9uZXI= IENvb2xkb3du V0FSRA== IGludm9raW5n Y29uZmlkZW5jZQ== Rm9yd2FyZA== IHN0cw== cG9wdWxhdGlvbg== RGVsaXZlcnlEYXRl RmlsbQ== IENvdg== cXVpY2tTaGlw cXVpY2tTaGlwQXZhaWxhYmxl cHJpbWFyeQ== aXNTcGVjaWFsT3JkZXJhYmxl aW52ZW50b3J5UXVhbnRpdHk= Y2hhbm5lbEF2YWlsYWJpbGl0eQ== Qk9Y IE11bHRpcGxheWVy IEplbm5lcg== Nzc4 IE1k IH4vLg== TU4= IGNoaWxkaXNo IGFudGlveGlkYW50 IENocm9tZWJvb2s= IDI3NA== IHNjcmVlbnBsYXk= IGFkdmVudHVyb3Vz IFJlbGF0aW9uc2hpcA== cmVzcG9uc2l2ZQ== bWluZ3Rvbg== IGNvcm5lcnN0b25l IEZleQ== RklS IHJvb2tpZXM= IEZlYXR1cmluZw== IG9yaWdpbmF0ZQ== IGVsZWN0cm9kZXM= YW50ZXM= IHNjcmlwdHVyZXM= IGdsdWVk IGRpc2NvbnRlbnQ= IGFmZmxpY3RlZA== bGF5b3V0 QnJhdmU= IG1vc2E= IFF1YW50aXR5 IEhpaw== d2lubmVy SG91cnM= IGVudGFpbA== IENlbGxz b2xvZ3Vl IHZpbA== IHByZWFjaGVy IGRlY29yYXRpdmU= ZGlmZmVyZW50 IHByZWp1ZGljZXM= IFNtb2tpbmc= IE5vdHRpbmdoYW0= c29UeXBl IHJoeXRobXM= IEFscGg= Ymxhc3Q= U3RlZWw= IERhbmllbGxl IHN0cmlmZQ== IHJlbWF0Y2g= c29EZWxpdmVyeURhdGU= IEZvcms= dHJpcA== b2x1bHU= aGVzZXM= Q0c= IFBPTElUSUNP b3N0YQ== IERyaWZ0 6b6N5aU= 6b6N5aWR5aOr IHZldHRpbmc= IEppbnBpbmc= IFJlY2Vzc2lvbg== TWlub3I= IEZyYXVk ZW5mcmFuY2g= IGNvbnZlbmVk IE5BQUNQ IE1pbGxpb25z IEZhcm1pbmc= IFdvbw== IEZsYXJl cml0bw== aW1taWdyYW50 IHZhY2FuY3k= IEhFQUQ= IFZhag== ZWdhbA== IFZpZ2ls U3R1ZHk= IHJ1aW5pbmc= IHJhY2tz IGhlYXRlcg== IFJhbmRvbHBo IEJydXNo IFRpcg== 2Kg= IGNvdg== JV0= IHJlY291bnRz IE9QVA== IE1lbHQ= IHRydWNl IGNhc2lub3M= IGNydXNhZGU= IGNhcm5hZ2U= IHN0cmlwZQ== IEt5bA== VGV4dHVyZXM= IDY5OA== IHByb2NsYW1hdGlvbg== IGdvb2RpZXM= IC4uLi4uLi4uLi4= cHJvY2xhaW1lZA== UG9saXQ= IHRvcGljYWw= IHNwZWNpYWxpemU= IEFtaW4= Z20= IGFuY2hvcmVk IGJlYXJpbmdz c2FtcGxl IEhpZ2hsYW5k IEF1dGlzbQ== IG1lcmNlbmFyeQ== IGludGVydmlld2Vy TEVS IFNvbWVycw== IGVtYnJ5bw== IEFzc3k= IDI4MQ== IEVkaXRpbmc= IENob3Nlbg== NjYw IHBjaQ== IFRodW5kZXJib2x0 QklMTA== IGNodWNrbGVk anJpd2Fs aG9m IGVhcnRobHk= KCl7 aW5kZXBlbmRlbmNl IGRpc3BlcnM= IFZlbmRvcg== IEdhcmV0aA== IHBhbHM= UGVubg== IFN1Ym1pdA== aWN1bQ== VGh1 IGNsYW5kZXN0aW5l IGNhbm5pYmFs IENsZXJr RVN0cmVhbQ== Z2FsaXRhcmlhbg== 4pml Z2V3 IGhvcnJlbmQ= IExvdg== IFJlYWN0aW9u b2NyaW4= Q2xhc3NpYw== IGVjaG9pbmc= IGRpc2Nsb3Npbmc= IEluc2lnaHQ= b2d1bg== IEluY2Fybg== dXBsb2Fkcw== cHBlcmM= Z3V5ZW4= IDE5MDE= IEJhcnM= Njg3 IGJyaWJlcw== IEZyZXNubw== dXJhdA== IFJlZXNl IGludHJ1c2l2ZQ== IGdyaXBwaW5n IEJsdWVwcmludA== IFJhc20= dW5pYQ== bWFuYWdlZA== IEhlYmRv IDM0NQ== IGRlY29kaW5n IHBvZXRz IGphd3M= IEZJR0hU YW1lbGVzcw== IE1lYWRvd3M= IEhhcmJhdWdo SW50ZXJ2aWV3 IEhvc3A= IEJSQQ== IGRlbGV0aW9u bW9i V2Fsa2Vy IE1vb25saWdodA== IEplZA== IFNvcGhpYQ== IHVzdXI= IGZvcnR1bmF0ZWx5 IFB1dHRpbmc= IEZvbGQ= IHNhbml0YXRpb24= IHBhcnRpc2Fucw== SVNPTg== Qm93 IENPTkM= IFJlZHVjZWQ= IFN1dHRvbg== IHRvdWNoc2NyZWVu IGVtYnJ5b3M= 4oCi4oCi4oCi4oCi IEtydWc= Y29tYmF0 IFBldHJvbGV1bQ== IGFtZA== IENvc21vcw== IHByZXNjcmliaW5n IGNvbmZvcm1pdHk= b3Vyc2Vz IHBsZW50aWZ1bA== IGRpc2lsbHVzaW9u IEVjb2xvZ3k= aXR0YWw= IGZhbmM= IGFzc2Fzc2luYXRlZA== cmVnbmFuY3k= IHBlcmVubmlhbA== IEJ1bGxldHM= IHN0YWxl IGNhY2hlZA== IEp1ZGl0aA== IERpc2Vhc2Vz QWxsZW4= IGxhcw== IHNoYXJkcw== IFN1YXJleg== IEZyaWVuZHNoaXA= aW50ZXJmYWNl IFN1cHBvcnRlcnM= YWRkb25z NDYy IEltcmFu IFdpbQ== IG5ld2ZvdW5k IE1i QW5pbWFs IGRhcmxpbmc= YW5kZQ== IHJoeQ== IFR3aXN0ZWQ= cG9zYWw= eW5za2k= VmFyaW91cw== 15w= IEtpdw== dXlvbWk= IHdlbGxiZWluZw== IExhdQ== YW5vcw== IHVubWlzdA== IG1hY09T IHJlc3Ryb29t IE9saXY= IEFpcndheXM= IHRpbWV0YWJsZQ== OTgw IHJhZGlvcw== dm95 aWFzY28= IGNsb3VkeQ== IERyYXdpbmc= QW55dGhpbmc= U3lyaWE= IEhlcnQ= c3Rha2luZw== IHVuY2hlY2tlZA== IGJyYXplbg== IE5SUw== Njk3 b25vbWlj ZXN0YWJsaXNo IGxlbmc= IGRpYWdvbmFs IEZpb3I= TGFpcg== IFN0YXJk IGRlZmljaWVudA== am9pbmluZw== YmVhbQ== IG9tbmlw IGJsZW5kZXI= IHN1bnJpc2U= TW9vcmU= IEZhdWx0 IENvc3R1bWU= IE11Yg== RmxhZ3M= YW5zZQ== IHBheW91dA== IEdvdmVybm9ycw== IERpbGxvbg== IEJhbmFuYQ== TmFy IHRyYWlsZWQ= IGltcGVyaWFsaXN0 dW1hbm4= YXRzdWtp NDM1 IFJvYWRz IHNsdXI= IElkZWFsbHk= IHRyZW5jaGVz Q3RybA== IG1pcnJvcmVk IFplbA== IENyZXN0 Q29tcGF0 IFJvbGxz c2NyaWI= IFRyYWlscw== b21ldGVycw== d2ludGVy IGltbW9ydGFsaXR5 aWxhdGVk IGNvbnRyYWRpY3Rz dW5pdmVyc2Fs aWxsaW9ucw== IE1hbWE= b3B0aW0= QVRVUkU= IGdlbw== ZXR0ZXI= IENhcmxv NDI0 IGNhbm9uaWNhbA== IFN0cm9uZ2hvbGQ= bmVhcg== IHBlcmZ1bWU= IG9yY2hlc3RyYQ== b2RpYWM= IHVwaGU= IHJlaWduaW5n dmVyc2l2ZQ== IGNhdWN1c2Vz IERFTQ== IGluc3VsdGVk IC0tLS0tLQ== IENydXNo IHJvb3Rpbmc= IFdyYWl0aA== IHdob3Jl IHRvZnU= Q21k IEJyZWU= ICRf IHJpdmU= IEFkdmVydGlzaW5n IHdhdHQ= IEhP IHBlcnN1YXNpdmU= IFBhcmFtZXRlcnM= IG9ic2VydmF0aW9uYWw= IE5DVA== IE1vag== IFNhbG9u IHRydW5j IGV4cXVpc2l0ZQ== IE1hcmE= IHBvb3A= IEFOTg== RXhj IFdvbmRlcmZ1bA== IFRhY28= IGhvbWVvd25lcg== IFNtaXRoc29uaWFu b3Jwb3JhdGVk bW1tbQ== IGxvYWY= IFlhbWF0bw== IEluZG8= IGNsaW5naW5n w6Fz IGltbXV0YWJsZQ== aHVi T3Jhbmdl IGZpbmdlcnRpcHM= IFdvb2Rlbg== IEtpZGQ= IEpQTQ== IERhbW4= Q293 Y29kZXM= NDgy IGluaXRpYXRpbmc= IEVsaw== IEN1dHRpbmc= IGFic2VudGVl IFZhbmNl IExpbGl0aA== R1VJ IG9ic2N1cmVk IGR3YXJ2ZXM= IENob3A= IEJva28= VmFsdWVz IG11bHRpbWVkaWE= IGJyZXdlZA== UmVndWxhcg== Q1JJUFRJT04= IE1vcnRhbA== IGFwZXg= IHRyYXZlbGVy IGJvaWxz IHNwcmF5aW5n UmVwcmVzZW50 IFN0YXJzaGlw NDI4 IGRpc2FwcHJvdmFs IHNoYWRvd3k= IGxhbWVudGVk IFJlcGxhY2U= IEZyYW7Dpw== Njc3 ZG9y IHVuc3RvcHBhYmxl IGNvaG9ydHM= Z3lu IENsYXNzaWNz IEFtcGg= IHNsdWdnaXNo IEFkZGljdGlvbg== IFBhZHJlcw== IGluc2NyaXB0aW9u IGluaHVtYW4= bWludXM= IEplcmVtaWFo YXRhcnM= VGVycm9y IFRvcw== IFNoYXJtYQ== YXN0YQ== Y2F0Y2g= IHBsdW1iaW5n IFRpbWJlcnM= U2hhcg== SGFs IE9zYw== IGNvdXBsaW5n aHVtYW5z IHNwb25nZQ== IGlkb2xz IFNwYQ== IEFkdm9jYXRl IEJlYXRz bHVh IHRpY2tpbmc= IGxvYWRlcg== IEdyb24= ODEw IHN0aW11bGF0ZWQ= IHNpZGViYXI= IE1hbnVmYWN0dXJlcg== b3JlQW5k MTk3Mw== IHByYWlzZXM= IEZsb3Jlcw== ZGlzYWJsZQ== IEVsZWN0cmljYWw= cmFpc2U= RXRo IG1pZ3JhdGVk IGxlY3R1cmVy S2lkcw== IENhdmVybg== IGtldHRsZQ== IGdseWM= IE1hbmRlbGE= IEZ1bGx5 5aer RklORVNU IHNxdWVlemluZw== IFJ5ZGVy YW1wb28= b3JlQW5kT25saW5l SW5zdG9yZUFuZE9ubGluZQ== QnV5YWJsZUluc3RvcmVBbmRPbmxpbmU= IGNvbW1lbW9yYXRl IFJhbXBhZ2U= QXVzdGlu IFNocm91ZA== IFJ1aW5z OTE1 IEtI IHdhdGVyZnJvbnQ= IEVTQw== YmFieQ== IENvdXQ= IEVtYmxlbQ== IGVxdWl2YWxlbnRz NDky VW5pcXVl IE5pZXR6c2NoZQ== YnJvd3Nlcg== IGltaXRhdGlvbg== IFdlcmV3b2xm IEtpcmlu YWNhcw== Jywi IMO+ UmV2aWV3ZWQ= IGN1bnQ= IHZvaWM= IExlbm92bw== IGJvbmRlZA== NDgx IGluaGliaXRvcnM= IGVuZGVhdm9ycw== IEhhdmFuYQ== IFN0b3V0 IEpvbGx5 QWN0b3I= Ki8o IG9jY3VycmVuY2Vz IFRlbnM= SW5jcmVhc2Vk IEFDVElPTg== IOOAjA== IFJhbmtpbmdz IEJyZWF0 IDMwOQ== RG91 IGltcGFjdGluZw== IER1Y2hlc3M= cHJlZml4 UUI= IHN1bW1vbmluZw== IGJlc3Rvd2Vk IEtlcGxlcg== IFBPV0VS Y3ViZQ== IEtpdHM= IEdyaXA= IG9waXVt IHJlcHV0YWJsZQ== dG9j aWNoYWVs IFJpcHBsZQ== IGNhZsOp IFpvb20= IEJ1cm1h IHdhaXZl IHN0YWxscw== IGRlbWVhbm9y aW5jZXJpdHk= IGZsdW9yaWRl IFNIT1VMRA== UGFyaXM= IGxvbmdpbmc= IHBsYXQ= IGdyb3NzbHk= IGJ1bGxz IHNob3djYXNpbmc= ZXhwZWN0ZWQ= IEdhZGRhZmk= ZW5naW5lZXJpbmc= UmVwZWF0 IEt1dA== IGNvbmNlaXZhYmxl IHRyaW1tZWQ= b3Njb3Bl IENhbmRpZGF0ZQ== IFRlYXJz cm9sb2c= TGV3aXM= U1VQ IHJvYWRtYXA= IHNhbGl2YQ== IHRydW1wZXQ= SmltbXk= IG1pcmFjdWxvdXM= IGNvbG9uaXphdGlvbg== IGFtcHV0 IEdOT01F YXRlY2g= RGlmZmVyZW50 IEVMRQ== IEdvdmVybm1lbnRz IEFoZWFk 44WL44WL d29yZHByZXNz TElC IEluY2x1ZGU= IERvcm90aHk= MDQ1 IENvbG9tYmlhbg== IGxlYXNlZA== ODg0 IGRlZ3JhZGluZw== IERhaXN5 aWF0aW9ucw== IGJhcHRpemVk IHN1cm5hbWU= Y294 IGJsaW5rZWQ= 44Oi IHBvbGxlbg== IGRlcm1hdA== IHJlZ2V4 IE5pY2hvbHNvbg== IEVhdGVy 55w= cmFkb3I= IG5hcnJvd2Vy IGh1cnJpY2FuZXM= IGhhbGx1Y2luYXRpb25z cmlkZGVu SVNTSU9O IEZpcmVmbHk= IGF0dGFpbm1lbnQ= IG5vbWluYXRl IGF2b2NhZG8= IE1lcmVkaXRo IHRz IHJldmVyZW5jZQ== IGV1cGg= IGNyYXRlcw== IFRFWFQ= IDQ0Mw== IDMxOQ== SlNPTg== aXF1ZXR0ZQ== IHNob3J0c3RvcA== aWNrZXk= IHByb3BlbGxlZA== IGFwaQ== IFRoaWV2ZXM= Nzc5 IG92ZXJzYXc= IGNvbGk= IE5pY29sYQ== IG92ZXJjbA== aWthd2E= IEN5cg== IDM4NA== Nzg5 IEFsbG93cw== MTAyNw== RGV0cm9pdA== VFJZ c2V0dXA= IFNvY2lhbGlzbQ== U292aWV0 c3VzcA== IEFQUg== IFNodXRkb3du IGFsdW1pbml1bQ== emJlaw== IExvdmVy R0dHR0dHR0c= IGRlbW9jcmFjaWVz IDE5MDg= IE1lcnJpbGw= IEZyYW5jb2lz Z2RhbGE= IHRyYWZmaWNrZXJz IFRpbA== IEdvYXQ= IHNwZWQ= IFJlc2Vydg== IHByb2Q= NTUy IGNhYw== IFVuaXY= IFNjaHdl IHN3aXJsaW5n IFdpbGRlcm5lc3M= IEVnZ3M= IHNhZGRlbmVk IGFyY2hhaWM= SHlk IGV4Y2Vzc2l2ZWx5 QlJF IGFlcm9zcGFjZQ== IFZvaWNlcw== Q3JhaWc= IGlnbml0ZWQ= SW5pdGlhbGx5 IE1jQQ== IGhhbmRzZXQ= IHJlZm9ybWluZw== IGZydXN0cmF0aW9ucw== IERlYWRwb29s IEJlbGljaGljaw== cmFjdG9y IFJhZ25hcm9r IERydXBhbA== IEFwcHJveGltYXRlbHk= MTkyMA== IEh1YmJsZQ== YXJtb3I= IFNhcmFz IEpvbmFz IG5vc3RhbGdpYw== IGZlYXNpYmlsaXR5 U2FoYXJhbg== IG9yYml0aW5n IDk3MA== UnU= IHNoaW4= IEludmVzdGlnYXRvcnM= IGluY29uc2lzdGVuY2llcw== IFBBTg== Qkc= IGdyYXppbmc= IGRldGVjdG9ycw== IFN0YXJ0dXA= IEZ1bm55 IE5hb21p Q29uc2lkZXJpbmc= IGhvZw== dXRm Y2VtaWM= IGZvcnRpZmllZA== IEZ1bmN0aW9ucw== IGNvZGVj bnV0cml0aW9u SGF0 IiE= bWljcm9zb2Z0 NTU4 IFRoaW4= IEFDRQ== QWxpYXM= IE9QUw== cGFwZXJz UEs= 44CO IGltcHJvYmFibGU= Tm9ydGhlcm4= ZXF1YWw= IGxvb2tvdXQ= IHR5cmVz IE1vZGlmaWVk IEtvcA== QWJzb2x1dGVseQ== IGJ1aWxkdXA= c2lsdmVy IGF1ZGk= IGdyb3Rlc3F1ZQ== IFNhYmVy IFByZXNieXRlcg== T05Z IGdsYWNpZXJz IFNob2Fscw== IEthc3M= IEhSQw== IE5pY29s IEx1bmNo IEZvc3M= 4paS QURSQQ== IE9uZVBsdXM= b2luZw== Z3JvdW5kcw== IGluY2lkZW50YWw= IGRhdGFzZXRz Njg5 IENsYXJrc29u IGFzc2VtYmxpbmc= IENvcnJlY3Rpb25z IGRyaW5rZXJz IHF1YWxpZmllcnM= IGxlYXNo IHVuZm91bmRlZA== IEh1bmRyZWQ= IGtpY2tvZmY= VGk= IHJlY29uY2ls IEdyYW50cw== IENvbXBsaWFuY2U= IERleHRlcml0eQ== IDE5MDY= d2Fybg== RGFsbGFz TWF4aW11bQ== bmFyZA== YXZpYQ== YmVhdXQ= ZW5zaXRpdml0eQ== dHJhY2U= IHBpb25lZXJz IEZyYWN0 44CP IHByZWNlcHQ= IGdsb3NzeQ== IElFRUU= QWNyb3Nz IDY4MA== U2xlZXA= Y2hlb24= IHNhdGlyaWNhbA== IE1pbm90YXVy IENsYXVkZQ== IHLDqQ== YXBlZ28= IGNhcnJvdA== IFNlbWlu aW5vYQ== IHpv SW5kZXBlbmRlbnQ= IGRpYWdub3Nlcw== IEN1ZQ== TUFS IHJlbmRpdGlvbg== IEtpaw== IHBhdGhvbG9neQ== IHNlbGVjdHM= TGlua2VkSW4= IGFzc2F5 IERyZXM= IHRleHR1YWw= cG9zdGVk SVRBTA== IE1hdWw= TmVhbA== IGludGVyY29ubmVjdGVk IGVycmF0aWM= IFZpcnVz IDUzMA== IGVudmlyb25tZW50YWxpc3Rz IFBoZWxwcw== IGVuZ2FnZW1lbnRz IElOU1Q= IGVjb25vbWljYWw= bm94aW91cw== IGdlYXJpbmc= aXp6eQ== IGZhdm9yYWJseQ== IE1jR2lsbA== VGVybQ== IGhhbmdlZA== IGJhbGxwYXJr IFJleWVz IGJld2FyZQ== IFBzYWw= IE1hc3NhY3Jl cWk= IGluYWNjZXNzaWJsZQ== YWNseXNt IGZyYXk= aWxsYWM= IGJpdHRlcmx5 IENlcnRpZmljYXRpb24= TWljaGlnYW4= IGlycmVzcGVjdGl2ZQ== YWxvcmU= RW1wdHk= IGVuZG9yc2VtZW50cw== IHVuZGV0 Zmc= ZXF1aXBwZWQ= IG1lcmNpbGVzcw== IEN1c3Q= IGltbWF0dXJl IHZvdWNoZXI= IEJsYWNrd2VsbA== 0Y8= aGF3aw== ZGlzY2lwbGluYXJ5 aWxlZQ== IE1ha290bw== IER1ZGU= 44OH44Kj WWVhcnM= IGludmVy IHNoYW1hbg== IFlvbmc= aXBlbA== ZWxsZW4= IENhdGh5 YnJpZHM= IHNhcmM= NjUx TmVhcg== IGdyb3VuZHdvcms= IGFtYXo= IDQxNQ== IEh1bnRpbmd0b24= aGV3cw== IEJ1bmc= IGFyYml0cmFyaWx5 IFdpdA== IEFsYmVydG8= IGRpc3F1YWxpZmllZA== YmVzdG9z NDYx IHBj IDI4NA== cm9iYXQ= Um9iaW4= IGh1Z3M= IFRyYW5zaXRpb24= IE9jY2FzaW9uYWxseQ== IDMyNg== IFdoaWxzdA== IExleQ== IHNwYWNlc2hpcA== Y3N2 IHVuc3VjY2Vzc2Z1bGx5 IEF1 bGVjaw== IFdpbmdlZA== IEdyaXp6bGllcw== Lu+/vQ== IG5lYXJlcg== IFNvcmNlcmVzcw== IEluZGlnbw== RWxzZQ== ODQw bGV0ZXM= Q29hY2g= IHVwYnJpbmdpbmc= IEtlcw== IHNlcGFyYXRpc3Q= IHJhY2lzdHM= IGNoYWluZWQ= IGFic3RpbmVuY2U= bGVhcm5pbmc= IHJlaW5zdGF0ZWQ= IHN5bW1ldHJ5 IHJlbWluZGVycw== IENoZXZ5 IG1vbnQ= IGV4ZW1wbGFyeQ== IFRPUg== Wlg= IHF1YWxpdGF0aXZl IFN0YW1w IFNhdmFubmFo IFJvc3Np IHBhZWQ= IGRpc3BlbnNhcmllcw== IFdhbGxz IENocm9uaWM= IGNvbXBsaW1lbnRhcnk= IEJlaXJ1dA== ICstLS0= aWdzbGlzdA== IGNyeXB0b2dyYXBoaWM= bWFzdGVycw== IENhcGl0YWxz IG1heGltYWw= IGVudHJvcHk= UG9pbnRz IGNvbWJhdGFudHM= bGlw IEdsb2I= IEJNQw== cGhhc2U= dGhhbms= SFRUUA== IGNvbW11dGVy IFwoXA== Li4v IFJlZ2VuZXI= IERPSQ== IEFjdGl2aXNpb24= IHNsaXQ= b3NhbA== UkVN IGNoYW50cw== WXU= S2V5cw== QnJleGl0 IEZvcmNlZA== QXJpem9uYQ== IHNxdWFkcm9u SVNP IE1hbG9uZQ== IDMzOA== IGNvbnRyYXN0aW5n IHRpZGFs IGxpYmVs IGltcGxhbnRlZA== IHVwcm9hcg== IENhdGVy IHByb3Bvc2l0aW9ucw== TWFuY2hlc3Rlcg== IEV1cm9z aXRhbWlu R2ls IEVsdmVu IFNlZWs= IEJhaQ== IHJlZGV2ZWxvcG1lbnQ= IFRvd25z IEx1Yg== ISIs YWxvbg== S3Jpc3Q= IG1lYXN1cmFibGU= IGltYWdpbmFibGU= IGFwb3N0bGVz WU4= NzYw IHN0ZXJvaWQ= IHNwZWNpZmljaXR5 IExvY2F0ZWQ= IEJlY2tlcg== IEVkdQ== IERpZXRhcnk= dXRzY2g= IE1hcmlseW4= IGJsaXN0ZXI= IE1FUA== IEtveg== IENNUw== eWFob28= IENhcm5leQ== IGJvYXN0aW5n IENhbGVi Qnl0ZQ== cmVhZHM= YWRlbg== UHJvYmxlbQ== IFdvb2R3YXJk U3dl U3Vw IEtHQg== U2V0dXA= IHRhY2l0 IHJldHJpYnV0aW9u IGR1ZXM= IE3DvA== Lj8= 5Lit cG90cw== IGNhbWVv IFBBTA== ZWR1Y2F0aW9u QW15 bGlrZWx5 Z2xpbmc= IGNvbnN0aXR1dGlvbmFsbHk= IEhhbW0= IFNwZWFr IHdpZGdldHM= YnJhdGU= IGNyYXBweQ== IEl0ZXI= IGFudGljaXBhdGluZw== IEJvdXQ= UGl4ZWw= IFllcA== IExhdXJpZQ== IGh1dA== IGJ1bGxldGlu IFNhbHZhdGlvbg== IGNoYXRz ZWFyYWJsZQ== SG9uZXN0bHk= QUxUSA== b25zZXF1 Y3VsdA== aXNjb3Zlcnk= b3Z5Y2g= IHNlbHZlcw== IFNhdG9zaGk= U291bmRz IGNvbnZlcmdlbmNl IFJvc2VuYmVyZw== MTk3NA== IG5hc2Fs IGZ1bGxlc3Q= IGZlcm9jaW91cw== eHVz aXN0ZQ== QU1T IGxvYmJpZWQ= IHNvb3RoaW5n IEd1bm4= dG9kYXk= MDI0 IGluc3BpcmF0aW9uYWw= IE5CTg== cGI= Z2V3YXRlcg== b3JhaA== YWxsb3dlZA== IENvbGlzZXVt IHNwZWNpYWxpemluZw== IGluc2FuZWx5 IFRhcGU= ZGVsYXk= IHRhcm4= IFBvdW5k IG1lbGFuY2g= IGRlcGxveW1lbnRz aWxhbmQ= IGxlc3Nlbg== IGZ1cnJ5 IFVFRkE= IGJsb29kc2hlZA== IE1laWVy aXRoZXJpbmc= IGhlaXJz IEphdw== YXh0ZXI= IFB1YmxpY2F0aW9ucw== IGFsdGVycw== aW50ZW50aW9u IFdpbmNoZXN0ZXI= ZGV0ZXJtaW5hdGlvbg== IExpZmV0aW1l dGhpbg== TW9uc3Rlcg== Nzgw IGFwcHJveGltYXRpb24= IHN1cGVybWFya2V0cw== IFNlY29uZHM= b3Jvcw== aHVnZQ== IGJyaWJl IExJTUlURUQ= dW5lZA== IG1pc2ludGVycHJldA== IEluanVyeQ== IDM2Nw== IHRocmVzaG9sZHM= IENhcm5pdmFs IGdhc3Ryb2ludGVzdGluYWw= IGd1aWRlbGluZQ== IGRlY2VpdmVk ZmVhdHVyZXM= IHB1cnBvcnRlZGx5 IFJvbm5pZQ== IE5ld3Q= IHNwYWNpb3Vz YXN1cw== IHN1cGVyaGVyb2Vz IEN5bnRoaWE= bGVnZ2Vk a2FtcA== Y2hpbw== IHRodW1ibmFpbA== IFNoaXJsZXk= aWxsYXRpb24= IHNoZWRz IFp5 RVBB IGRhbXM= IHlhd24= bmFo IFBlZ2d5 IEVyaWU= IEp1dmVudHVz IEZvdW50YWlu cng= ZG9uYWxk YWxidW0= IENvbXByZWhlbnNpdmU= IGNhY2hpbmc= IFV6 dWxuZXJhYmlsaXR5 IFByaW5jaXBsZQ== IEppYW4= aW5nZXJz Y2FzdHM= IE9zaXJpcw== Y2hhcnQ= dGlsZQ== IFRpZmZhbnk= IFBhdHRvbg== IFdoaXA= IG92ZXJzaXplZA== SmU= IENpbmRlcmVsbGE= IEJvcmRlcnM= IERhZXNo TWFo IGRvZ21h IGNvbW11bmlzdHM= dnU= Q291bmNpbA== IGZyZXNod2F0ZXI= IHdvdW5kaW5n IGRlYmFjbGU= IHlvdW5nc3Rlcg== IHRocmVhZGVk IEJvdHM= IFNhdmluZ3M= 44GC b2xpbmc= b2hv IGlsbHVtaW5hdGlvbg== TVJJ IGxvb3Nlbg== dHJ1bXA= YWdlbmN5 dXJpb24= IG1vbWVudGFyaWx5 IENodW4= IEJ1ZGFwZXN0 IEFsbGV5 RGlzaw== IGFzdG9uaXNoZWQ= IENvbnF1ZXI= IEFjY291bnRpbmc= aGF2aW5n IFdlaW4= IEFscmlnaHQ= IHJldm9sdmVy IGRlbHVzaW9u IHJlbGljcw== IGFkaGVyZW50 cXVhbnQ= IGhhbmRtYWRl b3Jpbw== IGNvbWJhdGluZw== Y29kZWQ= IHF1YWRydQ== cmV0aA== Tmlr IFRyaWJhbA== IE15c3RlcmlvdXM= IGluaGFs IFdpbm5pbmc= IENsYXNzaWZpY2F0aW9u Y2hhbmdlZA== IHVuYWI= IHNjb3Ju aWNpcGF0ZWQ= d2w= b25kdWN0b3I= IHJlaW5mb3JjaW5n IENoaWxkaG9vZA== YW5vdmE= IGFkdmVudHVyZXI= IGRvY3RvcmFs IFN0cmF0ZWdpZXM= IGVuZ3VsZmVk IEVuY291bnRlcg== IGxhc2hlcw== Q3JpdGljYWw= cmljdWxhcg== IFVURg== b2NpYXRpb24= Y2hlY2tpbmc= IENvbnN1bHRpbmc= UnVudGltZQ== cGVyaW9k IEFzZ2FyZA== IGRpc3RpbGxlZA== IFBhc2FkZW5h IER5aW5n IENPVU5UWQ== IGdyYW5pdGU= IHNtYWNr IHBhcmFjaHV0ZQ== IFNVUg== VmlyZ2luaWE= IEZ1cmlvdXM= Nzg3 IE9raW4= IGNhbWVs IE1icHM= MTk3Mg== IENoYW8= IEN5YW4= am9pY2U= ZWZlcg== IFdyYXA= IERlYmF0ZQ== U2Vn IGZvcmVhcm0= IElnbm9yZQ== IHRpbWVzdGFtcA== IHByb2Jpbmc= IE5vb24= IEdyYWls ZmVu IGRvcm1hbnQ= IEZpcnN0bHk= IEVpZ2h0aA== IEhVTg== IERlc2lyZQ== b3Jhcw== R2lybHM= IERlc21vbmQ= emFy YW1pbmVz T0FE ZXhlY3V0ZQ== IGJvb2Jz IEFUTA== Xyg= Q2hlbHNlYQ== IG1hc3R1cmJhdGlvbg== IENvQw== IGRlc3Ryb3llcg== IENob21za3k= IHNjYXR0ZXI= IEFzc2V0cw== Nzk2 IENhcmdv IHJlY2VwdGl2ZQ== IFNjb3Bl IG1hcmtldGVycw== IGxhdW5jaGVycw== IGF4bGU= IFNFQQ== c2Vx IE1vZmY= ZmluZGluZw== IEdpYmJz R2VvcmdpYQ== ZXh0cmVtZWx5 Tko= IGxhYm9yZXJz c3RhbHM= IG1lZGlhdGlvbg== IEhlZGdl YXRvd24= IGlvZA== ZGVzcGl0ZQ== dmlsbA== SmFuZQ== ZXhpc3RlbmNl IGNvaW5jaWRlZA== IFV0aWxpdGllcw== IENoZWFw IGxvZ2lzdGljYWw= IGN1bG1pbmF0aW9u IE5pY290aW5l cGFr Rm9sZGVy IHJvZGVudHM= c3R1ZmY= IGxhd2Z1bGx5 IHJlcGVydG8= aW9jaA== amo= RGlhbG9ndWU= SEhISA== bGljdGlvbg== TG9va3M= IDI5Nw== IHR1cnJldHM= IEFiYW5kb24= IGluY2Vzcw== IFRyYWZmb3Jk IGN1cmxlZA== IHByZWZlcnJpbmc= IHByaXZhdGl6YXRpb24= IGlycmVzaXN0 IFBhbmRh IFNoYWtl IE1jR3I= 44OE dW5kZXJz IGRpc2NyaW1pbmF0ZWQ= IGJhcnRlbmRlcg== SUxF QXRsYW50aWM= IHByb3BlbnNpdHk= IFdpeg== IEdpbQ== Y29uZmVyZW5jZQ== IHJlaW5mb3JjZXM= R2g= d2Fnb24= IGVlcmll RmFs IGh1Z2dlZA== cmFjaXN0 UklD RnU= IGZpbGxlcg== IFN0dWI= IGVuZ3JhdmVk IFdyZXN0bGU= IGltYWdpbmF0aXZl IFBlZXI= IEZhY3RvcnM= YW51cw== IERyYWN1bGE= bW9uaXRvcg== IHJvdXRlcnM= aWJpYQ== IEJvb2xlYW4= ZW5kYWxl IFNsYXVnaHRlcg== IFNoYWNr UkZD IFNwaWVsYmVyZw== U2F4 IFBIT1RP IENsb3Zlcg== IFJhZQ== RGVwZW5kaW5n IE1lbW9y YXJhbQ== IHBpZXJjZWQ= IGN1cnRhaW5z dmFsZQ== IElucXVpc2l0aW9u IFBva2U= IGZvcmVjYXN0aW5n IGNvbXBsYWlucw== U2Vuc2U= IEhlcm1lcw== aXNjb3ZlcmVk IGJpYmxl IE1vcnBo IGdlcm0= Nzg1 RE9O IGNvbmdlbg== IGNyYW5l IERQUg== IHJlc3BlY3RmdWxseQ== Um9vbQ== IE5hdw== IERhbGFp cmVhc29u IEFuZ3Vz RWR1Y2F0aW9u IFRpdGFuaWM= y5w= IG92YWw= dW5pdGVk IHRoaXJkcw== IG1vaXN0dXI= IENQQw== TWlhbWk= IHRlbnRhY2xlcw== IFBvbGFyaXM= ZXhj ZXhjbHVzaXZl IFByYWlyaWU= IGNvbG9zc2Fs IEJsZW5k c3VycHJpc2luZ2x5 w61z IGluZG9jdHI= IGJhc2Fs IE1QRUc= dW5kbw== U3BsaXQ= RGV2ZWxvcG1lbnQ= IGxhbnRlcm4= MTk3MQ== IHByb3ZvY2F0aW9u IGFuZ3Vpc2g= IEJpbmQ= IExlaWE= ZHVjZXJz aXBweQ== Y29uc2VydmFuY3k= IGluaXRpYWxpemU= IFR3aWNl IFN1aw== IHByZWRpYw== IGRpcGxvbWE= IHNvY2lvcA== SW5ncmVkaWVudHM= IGhhbW1lcmVk IElybWE= UWFpZGE= IGdsaW1wcw== IEJpYW4= IHN0YWNraW5n IGZlbmQ= Z292dHJhY2s= IHVubg== ZGVtb2NyYXRpYw== aWdyZWU= IDU4MA== IDI5NA== IHN0cmF3YmVycnk= SURFUg== IGNoZXJpc2hlZA== IEhvdHM= IGluZmVycmVk IDgwOA== IFNvY3JhdGVz T3JlZ29u IFJvc2Vz IEZPSUE= IGluc2Vuc2l0aXZl IDQwOA== UmVjb21tZW5k IFNoaW5l IHBhaW5zdGFraW5n VUdF IEhlbGxlcg== IEVudGVycHJpc2Vz SU9S YWRq TlJT TEc= IGFsaWVuYXRlZA== IGFja25vd2xlZGdlbWVudA== IEFVRA== IFJlbmVn IHZvdWNoZXJz IDk2MA== IG1vb3Q= IERpbWVuc2lvbnM= IGNhYmJhZ2U= QnJpZ2h0 Z2F0 IEtsdQ== IGxhdGVudA== IHpl IE1lbmc= IGRpc3BlcnNl IHBhbmRlbW9uaXVt SFE= IHZpcnR1b3Vz IExvY2F0aW9ucw== ZWVwZXI= cHJvdmlkZWQ= IHNlYW1z IFdU aXpv UFJPVg== IHRpdGFuaXVt IHJlY29sbGVjdGlvbg== IGNyYW4= IDc4MA== IE5G NDkx NjQy cGFja2luZw== NTk4 dGV4dHVyZQ== U3BpZGVy ZnJlZWRvbQ== Y2lwbGVk IFRBTUFEUkE= 4pmm YXV0aGVudA== IFdBTlQ= cmlmaWVk IHJpdGVz IHV0ZXJ1cw== a2lzcw== IOKJpA== IHNraWxsZXQ= IGRpc2VuZnJhbmNo IEdhYWw= Q29tcGFu IGFnZWluZw== Z3VpZGU= QmFsdA== IGl0ZXJhdG9y IGRpc2NyZXRpb25hcnk= dGlwcw== IHByaW1hdGVz IFRlY2huaXF1ZQ== IFBheW1lbnRz YXplbA== IFJPQ0s= c3RhbnRpYWw= MDYw IGRtZw== IEphY2tldHM= IFBsYXlvZmY= IG51cnNlcnk= IFN5bWI= YXJ0b24= IGFubmV4YXRpb24= Q29sb3JhZG8= IGNvaWxz IFNob2Vz 4oSiOg== IFJveg== Q09NUExF IEV2ZXJlc3Q= IFRyaXVtcGg= Sm95 R3JpZA== 4Lw= cHJvY2Vzc29y IFByb3NwZXI= IFNldmVydXM= IFNlbGVjdGVk cmc= IFRheXlpcA== U3RyYQ== IHNraWluZw== ID8p IHBlZw== VGVzbGE= IHRpbWVmcmFtZQ== IG1hc3Rlcm1pbmQ= IE5C c2NpZW50aWZpYw== IFNoaXQ= Z2VuZXJpYw== SU5URVI= TlVN IHN0cm9sbA== IEVuaXg= IE1NUg== IEVNUw== bW92aWU= gqo= IG1pbmltaXppbmc= aWRkbGluZw== IGlsbGVnaXRpbWF0ZQ== IHByb3RvdHlw IHByZW1hdHVyZWx5 IG1hbnVhbHM= b2JiaWVz IENhc3NpZHk= REVD ZGVza3RvcA== IGFlcm9z IHNjcmVlbmluZ3M= IGRlYmlsaXRhdGluZw== IEdyaW5k bmF0dXJlY29uc2VydmFuY3k= IGZhZGVz dGVybWluYXRpb24= YXNzZXRzYWRvYmU= RmFjdG9y IGRlZmluaXRpdmVseQ== UG9rw6k= YXB1bHQ= IExhZmF5ZXR0ZQ== Q29ybg== IENvcmFs IHN0YWduYW50 VHVl IGRpc3NhdGlzZmFjdGlvbg== R2VuZGVy IGtpZG5leXM= IEdvdw== IERlZmVhdA== IEFzaHRvbg== IGNhcnRlbHM= IGZvcmVjbG9zdXJl IEV4cGxvcmU= c3RyZW5ndGg= b3Rpbg== IHZldGVyaW5hcmlhbg== IGZ1bWJsZQ== IHBhcmFw IFN0cmFpdA== cmlscw== IHByaWNr IEJlcm11ZGE= IEFtbXVuaXRpb24= c2tpbm5lZA== IGFib3VuZA== IEJyYXo= IHNoYXJwZXI= IEFzY2Vuc2lvbg== IDk3OA== IHByZXZpZXdz IGNvbW11bmlvbg== IFhZ IHBob255 IG5ld2NvbWVy IDMzMg== LiIsIg== IHJlZGlzdHJpYnV0aW9u UHJvdGVjdA== IFNvZg== S2Fs IGxpcHN0aWNr d29yc3Q= IHRhbmdsZWQ= IHJldHJvc3BlY3RpdmU= aW50ZWdlcg== IHZvbHVudGVlcmluZw== IDE5MDc= IC0tLS0tLS0tLS0tLS0tLS0tLS0t aWNoZW4= IHVudmVpbGluZw== IHNlbnNlbGVzcw== IGZpc2hlcmllcw== XC0= IGhpbmdlcw== IGNhbGN1bHVz TXl0aA== IHVuZGVmZWF0ZWQ= IG9wdGltaXphdGlvbnM= IGRlcHJlc3M= IGJpbGxib2FyZA== IFlhZA== IFB5cmFtaWQ= SXNu SWRl IGxlZ2lvbg== IEtyYW1lcg== ZW50YW55bA== IHBlbmV0cmF0aW5n IEhhd3Ro IFBST0RVQ1Q= IEdlcmFyZA== IFBhY3Q= IEluY2x1ZGluZw== IEVsaWFz IEVsYWluZQ== dmlzdWFs IGh1bW1pbmc= IGNvbmRlc2M= IEZhc2M= 5LiK IGVnYWxpdGFyaWFu IGRldnM= IERhaGw= T3Bz REg= IEJvdW5jZQ== aWRhdGVk YWxkbw== IHJlcHVibGljYW4= IGhhbWI= IFNldHQ= b2dyYXBoaWVz Q0hBUFRFUg== IHRyYW5zc2V4dWFs IHNreXJvY2tldA== YW5zd2Vy IG1hcmt1cA== 2Ko= IGhlcm9pbmU= Q29tcGFyZQ== IFRhdg== QmVhc3Q= IHN1Y2Nlc3NvcnM= IG5hw692ZQ== IEJ1Y2tsZXk= c3RyZXNz bWVhdA== IGRvd25sb2FkYWJsZQ== IGluZGV4ZWQ= IHNjYWZm IEx1bXA= IEhvbW8= U3R1ZGlv SW5zcA== IHJhY2tlZA== ZmFyaW91cw== IFBldHR5 RXh0ZXJuYWw= IDE5MDk= V2Fycw== Y29tbWl0 cHV0ZXJz IHVub2I= IEVycg== IEVH IEFsYW0= IFNpYmVyaWE= IEF0bW9zcGhlcmlj SVNURVI= IFNhdGFuaWM= dHJhbnNsYXRpb24= IExvdWQ= dHJhdW1hdGlj bGlxdWU= IHJlc29uYXRl IFdlbGNo IHNwYXJraW5n IFRPTQ== dG9uZQ== IG91dGw= IGhhbmRjdWZmZWQ= IFNlcmll ODAx IGxhbmRtYXJrcw== IFJlZXZlcw== IHNvZnRlbmVk IGRhenpsaW5n IFdhbnRlZA== bW9udGhz TWFnaWthcnA= IHVudHJlYXRlZA== IEJlZGZvcmQ= TWk= IER5bmFtbw== T3Jl Nzk1 IHdyb25nZnVs IGx1cmVk IGNvcnRpc29s IHZleA== ZHJhd24= aWxldA== RG93bmxvYWRoYQ== IEZhY3Rpb24= IGxhYnlyaW50aA== IGhpamFja2Vk d2F0ZXJz ZXJpY2s= IHN1cGVyaW9ycw== IFJvd2xpbmc= IEd1aW5uZXNz IHRk OTky IHVuZWFydGhlZA== IGNlbnRyaWY= IHNoYW1lbGVzcw== UG9k IEZpYg== IGljaW5n IHByZWRpY3Rvcg== IDI5Mg== Zm9yZXN0YXRpb24= Y29uc3RydWN0 Q2FuZA== QCM= IGFnaXRhdGVk IHJlcHI= T1ZB IGtuaXR0aW5n IExpbWE= IGZvZGRlcg== Njg0 IFBlcnNvbmE= a2w= NzAx IGJyZWFrdXA= 4bg= IGFwcGFsbGVk IGFudGlkZXByZXNzYW50cw== IFN1c3NleA== SGFycmlz IFRoZXJtYWw= ZWVlZQ== VXBsb2Fk IGd1bGY= IGRvb3JzdGVw IFNoYW5r TFU= IE1FTg== IFBvbmQ= c29ycnk= IG1pc2ZvcnR1bmU= bmFuY2U= IGJvbmE= TXV0 IGRlZ3JhZGVk IExPRw== IE5lc3M= YW5pbWFs IGF2ZXJzaW9u dW5kb3du IHN1cHBsZW1lbnRlZA== IEN1cHM= IDUwNA== IGRlcHJpdmU= IFNwYXJrbGU= xYI= IE1lZGl0YXRpb24= YXV0aG9ycw== IFNhYmFu IE5ha2Vk YWlyZA== IE1hbmRhcmlu IFNjcmlwdHVyZXM= IFBlcnNvbm5lbA== IE1haGFyYXNodHJh IDE5MDM= IFBhaQ== IE1pcmFnZQ== b21iYXQ= QWNjZXNzb3J5 IGZyYWdtZW50ZWQ= VG9nZXRoZXI= IGJlbGlldmFibGU= IEdsYWRpYXRvcg== YWxpZ25lZA== IFNsdWc= TUFU IGNvbnZlcnRpYmxl IEJvdXJib24= YW1lcm9u IFJlaGFi bnRheA== IHBvd2RlcmVk cGlsbGFy IHNtb2tlcg== IE1hbnNvbg== IEJG NTEx IEdvb2RlbGw= IERBUg== bXVk Z2FydA== IG9iZWRpZW50 IFRyYW5zbWlzc2lvbg== IERvbmF0aW9u ODgw IGJvdGhlcmluZw== TWF0ZXJpYWxz 44Kx ZGVzdHJveQ== IGZvcmVnb2luZw== IGFuYXJjaGlzbQ== IEtyeQ== aWNlcHM= IGxpdHRlcmVk IFNjaGlmZg== IGFuZWNkb3RhbA== dW5pdHM= IGZpYW4= IFN0aW0= IFNPTUU= IEludmFkZXJz IGJlaGF2aW91cmFs IFZlbnR1cmVz IHN1YmxpbWU= IGZydWl0aW9u IFBlbmFsdHk= IGNvcnJvc2lvbg== toU= IGxpa2VuZWQ= IGJlc2llZ2Vk d2VlbmV5 IENyZWVw IGxpbmVtZW4= bXVsdGk= aWNhYmx5 dWRkZXI= IHZpdGFsaXR5 IHNob3J0ZmFsbA== IFBhbnRz YXBpc3Q= SGlkZGVu IERyb3Bz bWVkaWNhbA== IHByb251bmNpYXRpb24= IE5STA== IGluc2lnaHRmdWw= SlY= IEJlYXJk IENob3U= IGNoYXJtcw== IGJpbnM= IGFtYmFzc2Fkb3Jz IFNhdHVyZGF5cw== IGluaGliaXRvcg== IEZyYW5jaA== NjAx Jywn IENvbm9y YXJ0bmV5 IFhwZXJpYQ== Z3JhdmU= YmVlcw== IFByb3Rlc3RhbnRz IHNvYWtpbmc= IE1hbmRhbA== IHBoYXNlZA== IDY2MA== IHNjYW1z IGJ1enppbmc= IEl0YWxpYW5z IExvcmVuem8= IEpB IGhlc2l0YXRlZA== IGNsaWZmcw== IEdPVA== aW5ndWlzaGFibGU= IGtv IGludGVycnVwdGlvbg== Wmlw TGVhcm5pbmc= IHVuZGVyc2NvcmVz IEJsaW5r S3U= NTc5 IEF1dG9i SVJF IHdhdGVyaW5n IHBhc3RyeQ== ODIw IHZpc2lvbmFyeQ== IFRlbXBsYXI= YXdhaXRlZA== IHBpc3Rvbg== IGFudGlk Y3VycmVudGx5 IHBhcmQ= IHdhZ2luZw== IG5vYmlsaXR5 IFl1cw== IGluamVjdGluZw== ZmFpdGg= IFBBU1M= 5bo= IHJldGFrZQ== IFBST0M= IGNhdGhlZHJhbA== YmFzaA== IHdyZXN0bGVycw== IHBhcnRuZXJpbmc= IG5vc2Vz IDM1OA== VHJhbnNmb3Jt YW1lbg== IGJvdXRz IElkZWFs IENvbnN0YW50aW4= IHNlcA== IE1vbmFyY2g= YXR0ZW4= IFBlb3BsZXM= bW9kaWZpZWQ= IG1vcmF0b3JpdW0= IHBlbmNoYW50 IG9mZmVuc2l2ZWx5 IHByb3hpZXM= b2thbmU= IFRhaXdhbmVzZQ== IFBvbw== IEhPTUU= dXNpb25hbA== IHZlcmJz IE9tYW4= dmlzb3J5 IHBlcnN1YXNpb24= IG11bHRpdA== IHNjaXNzb3Jz R2F5 b3dheQ== b3BoeXNpY2Fs bHVz Z251 IGFwb2NhbHlwdGlj IGFic3VyZGl0eQ== IHBsYXlib29r IGF1dG9iaW9ncmFwaHk= SVVN IHNuZWFraW5n IFNpbXVsYXRpb24= cHBz ZWxsZXJ5 UGxhbmV0 IHJpZ2h0ZnVsbHk= IG5pZWNl IE5FQw== IElQTw== IERpc2Nsb3N1cmU= bGVhbm9y b3VzeQ== U1RFUg== IDI4Mg== Q3J1eg== Q2hhbGw= NjQz IFN1cnZpdmU= IEZhdGFs IEFtaWQ= YXBv V2VhcG9ucw== REVO Nzcw IEdyZWVud2FsZA== IGxpbmVu YWxvcw== IHBvbGx1dGFudHM= IFBDSWU= a2F0 IHBhdw== IEtyYWZ0 Q2hlbQ== IFRlcm1pbmF0b3I= IHJlaW5jYXJu IF1b IFNlZWRz IHNpbGhvdWV0dGU= IFN0b3Jlcw== IGdyb29taW5n IERpcmVjdGlvbg== IElzYWJlbA== IEJyaWRnZXM= 8J+R RUVE IE1vcnNp IHZhbHZlcw== IFJhbmtlZA== IFBoYXJtYQ== IE9yZ2FuaXphdGlvbnM= IHBlbmV0cmF0ZWQ= IFJvZGhhbQ== IFByb3Rvc3M= IG92ZXJlc3Q= IGV4YXNwZXI= IFRK IDAwMDAwMA== IHRyaWNrbGU= IGJvdXJib24= V0hP IHdyZXRjaGVk IG1pY3Jvc2NvcGlj IGNoZWNrbGlzdA== IGFkb3JuZWQ= Um95YWw= QWRtaW5pc3Q= IFJldGlyZW1lbnQ= IEhpZ2hlc3Q= V2VhdGhlcg== aWxlZ2U= IGluY3JlbWVudHM= IENvc3BvbnNvcnM= IG1hc3Nl IFNpbm4= cmY= IGhvcmRlcw== YXNzZW1ibHk= NzU0 IE5hdGFzaGE= IFRZUEU= IEdFTkVSQUw= IGFycmFuZ2luZw== IDQwNw== bGF0b3I= IGdsZWFu IGRpc2NyZWRpdGVk IGNsaW5pY2lhbnM= VU5F IGFjaGlldmVz IEVtZXJzb24= Y29tcGxleA== PVs= IHByaW5jaXBhbGx5 IGZyYWls cGlja2Vk IHRoYW5raW5n IHJlY2w= IExBU1Q= IHN1cHByZXNzaW5n aWxpYw== IGFudGlkZXByZXNzYW50 IExpc2Jvbg== IHRob3I= IHNwYQ== IGtpbmdkb21z IFBlYXJjZQ== ZW1v IHBsdW5n IGRpdmVzdA== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ymlz b3NwZWxz YWRy U3Bpcml0 aGFsbGE= UGluaw== ZW5kZXo= IHJlc3VycmVjdGVk ZXNjYXBl IFJvc2Vuc3RlaW4= IGdlb2xvZ2ljYWw= IG5lY2Vzc2l0aWVz IGNhcm5pdg== IEVseXM= IEJhcm5leQ== IDI5Ng== ZGlneQ== U1RPTg== RE9XTg== IG1pbGVzdG9uZXM= IGtlcg== IGRpc21hbnRsaW5n IHJlcHJpbQ== IGNyb3NzaW5ncw== MTk0NQ== IHBhdHJpYXJjaHk= IGJsYXNwaGVteQ== IDM1OQ== bWV0cnk= IE9iZXNpdHk= IERpZmZlcmVuY2Vz YmxvY2tpbmc= 44OV44Kh aWNoaXRh IFNhYmhh cGhhbHQ= IENvbG8= dWFsYQ== ZWZmaWNpZW50cw== IE1lZGluYQ== Y29uc29sZQ== NTU3 IEhhbm5pYmFs IEhhYml0 IEZldmVy IHRoZW5jZQ== IHN5bmFnb2d1ZQ== IGVzc2VudGlhbHM= IHdpbms= IFRyYWRlcg== SURB IFNwb2lsZXI= IEljZWxhbmRpYw== IEhheXdhcmQ= IHBlYWM= IG1hbGljZQ== IGZsYXNoYmFjaw== IHRodw== IGxheW9mZnM= TGlxdWlk IHRyb29wZXI= IGhpbmdl IFJlYWRlcnM= UGhpbGw= IEJhdWVy Q3JlYXRlZA== IGF1ZGl0cw== YWNjb21wYW4= IHVuc3VzcGVjdGluZw== aWVyYQ== NjY2NjY2NjY= IGJyb2No IGFwcHJlaGVuZGVk IE1hbGs= Y2VybmluZw== IENvZGV4 T1ZFUg== TWFyc2g= IERlbmc= IEV4cHJlc3Npb24= IGRpc3Jlc3BlY3RmdWw= IGFzY2VuZGluZw== dGVzdHM= IFBsYWludGlmZg== c3Rlcnk= IEFsaWJhYmE= ZGluYW5k IERlbXBzZXk= QXBwbGljYXRpb25z bW9yYWw= IHRocm91Z2hwdXQ= IHF1YXJyZWw= IG1pbGxz IGhlbW9y IENBU0U= dGVycm9yaXN0 c3RpbQ== aWZlc3R5bGU= cm96ZW4= Q0VQVA== QXJr dWNp bGVjdGlj IGlycml0YXRpbmc= c2hlZXRz QXk= IHJlZGVlbWVk IGhvcm55 IFRlYWNo IFNlYXI= ZGVtb2NyYWN5 NDY1 IFJlc3RvcmU= IHN0YW5kYnk= IFBpcw== aWZmaW4= IHNsZWVweQ== IGV4dHJhdGVy IGNvbXBsaW1lbnRz RnJhbWV3b3Jrcw== IGluc3RhbGxz IGJhbmdpbmc= c3VyZmFjZQ== Zm91bmRsYW5k IG1ldGFwaHlzaWNhbA== IDI4Mw== b3Vscw== ZGV2aWNlcw== QXJncw== IFNhY3JpZmljZQ== IE1jQ29ybQ== ZXNvbg== Q29uc2VydmF0aXZl IE1pa2hhaWw= c2VlaW5n aXNpdmVseQ== IFJvb21z IEdlbmVyaWM= IGVudGh1c2lhc3RpY2FsbHk= IGdyaXBwZWQ= IGNvbWVkaWM= IEVsZWN0cmljaXR5 IGd1ZXJyaWxsYQ== IGRlY29yYXRpb24= IFBlcnNwZWN0aXZl IGNvbnN1bHRhdGlvbnM= IHVuYW1i IHBsYWdpYXI= IG1hZ2ljaWFu IGVyZWN0aW9u IFRvdXJpc20= b3JpZWQ= cm94eQ== MTEwMA== VGFt iOg= zrM= 16o= IFByZWRhdG9ycw== Tml0cm9tZQ== IHRlbGVzY29wZXM= cHJvamVjdHM= IHVucHJvdGVjdGVk IHN0b2NrZWQ= IEVudHJlcHJlbmU= bmV4cGVjdGVk IHdhc3Rld2F0ZXI= VmlsbA== IGludGltYXRlbHk= IGlDbG91ZA== IENvbnN0YWJsZQ== IHNwb29m IG5lZmFyaW91cw== IGZpbnM= IGNlbnNvcg== IE1vZGVz IEVzcGVy YXJib24= IGludGVyc2VjdGlvbnM= IGxhdWRlZA== IHBoeXNp IGdlbmVyb3VzbHk= IFRoZU5pdHJvbWU= IFRoZU5pdHJvbWVGYW4= IGFyaXNlbg== INmI IGdsYW5kcw== IFBhdmlsaW9u IEd1cHRh IHVuaWZvcm1seQ== IHJhbXBz cmlldA== IFdIRU4= IFZhbmVzc2E= IHJvdXRlZA== IGxpbXA= IENQSQ== cHRlcg== aW50dWl0aXZl IHZhcGluZw== IGV4cGVyaW1lbnRlZA== IE9seW1wdXM= IEFtb24= IHNpZ2h0aW5n IGluZmlsdHJhdGU= IEdlbnRsZW1hbg== IHNpZ25pbmdz IE1lb3c= IE5hdmlnYXRpb24= Y2hlY2tz NDMz IGVsYXBzZWQ= IEJ1bGdhcmlhbg== ZXNwaWU= IFNPTQ== ZHVyaW5n IHNwaWxscw== YW5jYQ== IFBseW1vdXRo TUFM IGRvbWVzdGljYWxseQ== IFdhdGVyZ2F0ZQ== IEZBTQ== a2lsbGVk ZWRpdGVk IFlvdXJzZWxm IHN5bmNocm9uaXphdGlvbg== IFByYWN0aWNlcw== U1RFUA== IGdlbm9tZXM= IFFS bm90aWNl IGxvY2F0aW5n emlu IDMyOQ== YWxjb2hvbA== IGtpdHRlbg== Vm8= IHJpbnNl IGdyYXBwbGU= IFNjcmV3 IER1bA== QUlS IGxlYXNpbmc= IENhZsOp IHJvc2Vz IFJlc3BlY3Q= IG1pc2xlYWQ= IHBlcmZlY3RlZA== IG51ZGl0eQ== IG5vbnBhcnRpc2Fu IENvbnN1bXB0aW9u UmVwb3J0aW5n IG51YW5jZXM= IGRlZHVjdGlibGU= IFNob3Rz IDM3Nw== IOac YW5vb2dh QmVuZWY= IEJhbQ== IFNhbXA= aWZpeA== IGdhbHZhbg== IE1lZGFscw== cmFkaXVz IG5vYmxlcw== IGVhdmVz aWdyYXRl S1Q= IEhhcmJvdXI= dWVycw== IHJpc2tlZA== cmVx IG5ldXJvdA== Z2V0dGFibGU= YWluYQ== Um9tbmV5 IHVuZGVycGlu IGxvZnQ= IFN1YmNvbW1pdHRlZQ== IE1vbmdvbA== Yml6 IG1hbmlmZXN0cw== YXNzaXN0ZWQ= IEdhZ2E= IHN5bmVyZ3k= IHJlbGlnaW91c2x5 IFByZWY= IEdlcnJ5 VEFH IENob2k= NDY2 YmVoaW5k IE91 R29sZE1hZ2lrYXJw IGhlbW9ycmg= Uml2ZXI= IHRlbmRvbg== IGluanVyZQ== IEZpb25h IHBhZw== IGFnaXRhdGlvbg== fHx8fA== dXJhbg== IEVTQQ== IGVzdGVlbQ== IGRvZGdpbmc= IDQxMg== cnNz IGNlYXNlcw== ZXhjbHVkaW5n IGludGFrZXM= IGluc2VydHM= IGVtYm9sZA== IE9yYWw= dXB1bmN0dXJl NDEx IFVuaWZpZWQ= IERlbGU= IGZ1cm5hY2U= IENveW90ZXM= IEJyYWNo TGFib3I= IGhhbmRzaGFrZQ== IGJydWlzZXM= R3JhZGU= 6ZeY IEdyYW1teQ== aWxlZW4= U3RhdGVz IFNjYW5kaW5hdmlhbg== IEthcmRhc2g= ODY2 IGVmZm9ydGxlc3NseQ== IERJUkVDVA== IFRIRU4= IE1laQ== ZXJ0YXRpb24= MTk2OA== IGdyb2lu d2l0Y2g= UmVxdWlyZW1lbnRz OTg1 IHJvb2Zz IGVzdGF0ZXM= IEhG IGhhaGE= IGRlbnNlbHk= IE9DVA== IHBsYXN0aWNz IGluY2lkZW50YWxseQ== IFRyYWNrcw== IFRheGVz IGNoYW50ZWQ= IGZvcmNlZnVs IEJpZWJlcg== IEthaG4= S2VudA== IENvdA== bGljdHM= RmVk IGhpZGVvdXM= IFZlcmQ= IFN5bmRpY2F0ZQ== IElsbGVnYWw= SmV0 IERBVg== cmVhc29uYWJsZQ== Y3Jldw== IGZ1bmRhbWVudGFsaXN0 IHRydXRoZnVs IEppbmc= IGxpbA== IGRvd25lZA== IGVuY2hhbnRlZA== IFBvbGljaWVz IE1jTWFzdGVy IEhhcmU= aWRlc2hvdw== IHBhcmFtcw== ZW5jZXJz Z29yaXRobQ== IGFsbG93YW5jZXM= IHR1cmJ1bGVudA== IGNvbXBsZXhpdGllcw== IEtU IDMzNw== IEdlbmV0aWM= RlVO RG91Zw== dGljaw== IGdpZ3M= dW1lbnRoYWw= IHBhdHJpYXJjaGFs IGNhbGM= LC4uLg== IGNvdXQ= IEd1YW4= IHBhdGhvbG9naWNhbA== IFJpdmFscw== IHVuZGVycmF0ZWQ= IGZsdW9yZXNjZW50 IEppdQ== YXJuYWV2 IFF1YW4= IDQyOQ== IOCo TWFyaW8= Q29uc3RydWN0 IENpdGF0aW9u IFJhY2lhbA== IFJTQQ== IEZpZGVs IDM5NQ== UGVyc29uYWxseQ== Q2F1c2U= w7s= cmFkaWNhbA== aW5lbg== IHZlaGVtZW50bHk= IFBhcGE= IGludGVybnNoaXA= IGZsYWtlcw== IFJlY2s= THVja2lseQ== QnJh MjAyMA== cmF2aW5ncw== Uk4= V29uZGVy U2VyaW91c2x5 IHJldXNhYmxl IHBvbGx1dGVk IFBlbmc= bGVpZ2g= aW5kbGU= IGNpcmN1aXRyeQ== IE1hZG9ubmE= IEJBUlQ= UmVzaWRlbnRz YXR0cmlidXRl UGhpbGFkZWxwaGlh Q2x1Yg== IHBsYW5uZXI= IGZyYW50aWNhbGx5 IGZhaXRoZnVsbHk= IFRlcnJpdG9yaWVz IExBVA== IEFuZGVyc2Vu YW51 IFBBUks= IFNvcmE= aWFnZQ== IFBsYXlvZmZz IEdDQw== NDI3 IGFibm9ybQ== IExldmVy IGRpc29iZWRpZW5jZQ== QXN5bmM= IFNoZWE= VmVydA== IHNraXJ0cw== IFNhd3llcg== eHA= IHdvcnNlbmluZw== IHNjYXBlZ28= IEFuZ2xl b3RoYWw= IHRyb3Zl IFN0eQ== IE5ndXllbg== bWFyaW5l aWRlb24= RGVwdGhz QmxvZw== IElsbHVtaW5hdGk= IHRyYWN0cw== IG9yZ2FuaXNl IG9zdHI= RnM= IGxldmVyYWdpbmc= IERhcmVkZXZpbA== YXNhcg== IGxhbmc= IGV4dGVybWlu dXJzaW9ucw== IFJvbW8= 44Kk44OI IGNvbnRlbmRlZA== IGVuY291bnRlcmluZw== IFRhYmxldA== IEFsdGVybmF0ZQ== c2tpbGw= IHN3ZWV0cw== IGNvaGVzaXZl Y2FwYWNpdHk= IHJlcHVk IGxpemFyZA== cm9v IHBpbGdyaW1z IFJ1ZmY= IEluc3RydW1lbnQ= IExvZ28= dWl0b3Vz RUg= IHNhbGVzbWFu IGFua2xlcw== TGVk IFBhdHR5 dWRvcw== T3duZXI= IGRpc2NyZXBhbmNpZXM= a2o= TVU= IHVuY29uZGl0aW9uYWw= RHJhZ29uTWFnYXppbmU= aWFyZA== T2Fr IENvbnZlcnNhdGlvbg== YmVlcg== IE9zYWth RGVsdGE= dXNreQ== IHNlY3JldGlvbg== IHBsYXph IG1pbmc= IGRlcGxldGlvbg== IE1vdXM= IElUUw== IEhpbWFs IEZsZW1pbmc= IGN5dG9r IEhpY2s= IGJhdHRlcnM= IEludGVsbGVjdHVhbA== Njc1 w6ly SVNJT04= IFF1ZW50aW4= IENoYXB0ZXJz aWhhZGk= IGNvYXN0ZXI= V0FZUw== IExpemFyZA== IFlvcg== YW5kZXJpbmc= U2tpbg== aGF1c3Q= YWJieQ== IHBvcnRyYXlpbmc= IHdpZWxkZWQ= ZGFzaA== IHByb3BvbmVudA== IHJpcHBsZQ== IGdyYXBoZW5l IGZseWVy IHJlY3VycmVudA== IGRldmlscw== IHdhdGVyZmFsbA== 5piv Z29v VGV4dENvbG9y IHRhbXBlcmluZw== SVZFUw== VFJVTVA= IEFiZWw= IFNBTA== IEhlbmRyaWNrcw== IEx1Y2l1cw== Ym90cw== IDQwOTY= SVNUT1JZ R3Vlc3Q= IE5Y aW5hbnQ= QmVueg== IExvYWRlZA== IENsZXZlcg== dHJlYXRtZW50 IHRhdmVybg== IDMzOQ== IFROVA== aWZpY2FudGx5 VGVtcGVyYXR1cmU= RmVs IHVuZGVyd29ybGQ= IEp1ZGdlcw== IDwr IHN0dW1w IG9jY3VwYW5jeQ== IGFiZXI= IEZpbmRlcg== KSIs IE51bmVz cmVzZXQ= aW5ldA== ZWN0b215 IHdlbGxuZXNz IFBlYg== cXVhcnRlcmVk YW5kYW4= IG5lZ2F0aXZlcw== IFRoaWVs IENsaXA= IExURA== IGJsaWdodA== IHJlcGVydG9pcmU= S3lsZQ== IHF1ZXI= IENlcw== IGhhcGw= OTg5 IFRoYW1lcw== aXNjb3BhbA== RGVzaw== aXZhcmlhdGU= IEV4Y2VsbGVuY2U= Zm91bmRhdGlvbg== IOKH WGk= IG15c3RlcmlvdXNseQ== ZXN0eWxlcw== IHBlcmlzaA== IEVuZ2Vscw== IERFQUQ= MDkw fX19 IFVucmVhbA== IHJlc3RsZXNz SURFUw== b3J0aG9kb3g= IEludGVybWVkaWF0ZQ== IGRpbm5lcnM= IFRyb3V0 IFNleW0= IEhhbGxz b2dnZWQ= IHRyYWdlZGllcw== IGRpZG50 Njc2 IGFpbG1lbnRz IG9ic2VydmFibGU= IFZpZGU= YWRhcHQ= IER1c2s= IHByb2Zlc3Npb25hbGlzbQ== IFByZXNjb3R0 IEluZGllcw== cG94 IE1laHJhbg== V2lkZQ== IGVuZGVtaWM= IFBhcmFu QmlyZA== IHBlZGFscw== IElV IEFkYW1hbnQ= IEh1cnQ= IGNvcnJlbGF0ZXM= dXJkZW4= IHNwb25zb3Jpbmc= Y2xpbWF0ZQ== IFVuaXZlcnNpdGllcw== IEtub3Q= ZW5uZXM= IERhbWlhbg== IEF4ZWw= U3BvcnQ= IGJhcmI= IFNubw== c2hvd24= c3RlZW4= dWRlbmNl IG5vbnZpb2xlbnQ= IGhvbW9waG9iaWE= IGJpb21hc3M= IERldGFpbA== IHNyZk4= IFR1bmU= YWNjb21wYW5pZWQ= SUVOQ0U= QWxiZXJ0 IE1vbmdv eng= IENlcmJlcnVz b3JiaXQ= Y2Vucw== IHNsYXk= U0hBUkU= SFk= IGJyYXds IFByb2Jl IG5vbmV4aXN0ZW50 IENsYXJlbmNl IEJsYWNrYnVybg== IHBvcnRhbHM= IFJpdGE= IFJlbWFpbg== IExldmFudA== IHRyaWNrZWQ= IEZlcnJ5 YXZlcmluZw== IFN0cmF3YmVycnk= IEFuc3dlcnM= IGhvcnJlbmRvdXM= IEFtYW4= U3VwcGxlbWVudA== IFRvYWQ= IHBlZWxlZA== IG1hbm9ldXY= IFV6YmVr bW9uZHM= IEhlY3Rvcg== IDQwMg== cGVlcw== Zml4ZXM= IGRq IHJlc3VtZXM= IGFjY291bnRhbnQ= IGFkdmVyc2l0eQ== IGhhbXBlcmVk IExhcnNvbg== IGRvcGluZw== cGFydHM= SHVy IGJlYXJkZWQ= IHly IFBsdWdpbg== 5aWz IC8qKg== cm9sbGV5 IHdhdGVyc2hlZA== IFN1Ym1pc3Npb24= aWZsb3dlcg== QVND IGNob2ly IHNjdWxwdHVyZXM= bUE= aW5jcmVhc2luZw== YWlp IHNuZWFrZXJz IGNvbmZyb250cw== IEVsZXBoYW50 IEVsaXhpcg== IHJlY2Fs IFRUTA== d2lkZ2V0 IFdheA== IEdyYXlzb24= IGhhaXJzdA== IGh1bWlsaWF0ZWQ= IFdBUk4= YXBwaW5lc3M= IFRUQw== RnVlbA== IHBvbGlv IGNvbXBsZXhlcw== IGJhYmU= IFhJVg== UEY= KS5b UGFydHM= IDQzNQ== TWVn IFlhcmRz IEFMUA== IHllbGxz IHByaW5jZXM= IGJ1bGxpZXM= IENhcGl0YWxpc20= ZXhlbXB0 RkFR IFNwb25nZQ== IEFsYQ== IHBsZWFzYW50bHk= IGJ1Zg== IGRlbm90ZQ== IHVucHVibGlzaGVk IGtuZWVsaW5n YXNjYQ== IGxhcHNl YWxpZW4= OTk0 IHJlZmVyZWVz IExhd3llcnM= U2FudGE= IHB1enpsaW5n IFByb21ldGhldXM= IFBoYXJhb2g= IERlbGF5 IGZhY2lsaXRhdGVz IENFUw== IGpld2Vscw== IGJvb2tsZXQ= b25kaW5n IHBvbGFyaXphdGlvbg== IE1vcmFu IFNhbGFk IFNPUw== IEFkdmljZQ== UEhPVE9T SUNBTg== aWF0dXJlcw== ZXhwcmVzcw== IFdvbmRlcmxhbmQ= IENPREU= IENMQVNT OTc1 IGdyZXA= IERpZXNlbA== IEdsYWM= IT8i IHJt b2luZQ== ZGlzY3JpbWluYXRpb24= IE51cnNl bWFsbG93 IHZvcnRleA== IENvbnNvcnRpdW0= IGxhcmdlRG93bmxvYWQ= c3RyYWlnaHQ= YXVnaGxpbg== R3JhZA== IHB1YmxpY2l6ZWQ= IFdhdmVz IFJlZGQ= IGZlc3Rpdml0aWVz IE1hbmU= YXJvdg== IGZsZWV0aW5n IERydW5r dWdlbg== Q2VsZQ== IGNocm9tb3NvbWVz IERPVA== LSstKy0rLSs= IGJ1c2llc3Q= IEJlYXZlcg== U3lyaWFu IEt5cg== a2Fz IENyb3NzUmVm MTk1MA== NzYwMQ== IHJlcGVhbGluZw== IFdpbm5lcnM= IE1hY3Jv IERPRA== YmxhbmNl U29ydA== NjQx IG1ldHJl IERpcms= IGdvZ2dsZXM= IGRyYXdiYWNrcw== IGNvbXBsYWluYW50 IGF1dGhvcml6aW5n IGFudGl0cnVzdA== b3BlcmF0ZWQ= IG1haA== IGV4YWdnZXJhdGlvbg== QW1hemluZw== IFNlcmFwaA== IGhhemU= d293 IGV4dGluZ3Vpc2hlZA== IGNhbnlvbg== IEJvc2g= IHZlbnRz IHNjcmFwZQ== Q29ycmVjdA== NDI2 IGF2Zw== RGVtYW5k IOKIvA== IG1pY3JvYmlvdGE= In1dLCI= IFN0ZXY= Qmlv IFBsYW5lcw== IHN1Z2dlc3RpdmU= IGRlY2lwaGVy IFJlZnVnZWU= IEtlanJpd2Fs IEdyZWVucGVhY2U= IGRlY2xhc3M= IFNvdW5kZXJz IHRobw== IGRlY3J5cHQ= IGJydXNoaW5n IEphbmVpcm8= aXBvcA== U2k= ODc3 IEdlb2ZmcmV5 IGNwdQ== IEhhemVs IHZpZXdwb2ludHM= IGNyaXNweQ== IE5vdGlmaWNhdGlvbg== IHNvbGRlcg== IE1vZGVzdA== IEhlbWlzcGhlcmU= IGNhc3NldHRl aW5jbHVkZXM= IGlkZW50aWZpZXJz IENBTEw= aW5jZW50 VG9kZA== IFN3ZWVw IDMzNA== Ym9zcw== IHNtaXI= Z2lueA== IHRvd25zaGlw IGdyaWV2aW5n IE1vc3F1ZQ== TmV0ZmxpeA== QVNFRA== IE1pbGxlbm5pYWxz b2NvbQ== MTk2Nw== IGJvbGRseQ== c2xlZXA= IGVzY2hl YXJpanVhbmE= IHN3aXJs IFBlbmFs IG5lZ2xpZ2VudA== IFN0ZXBoZW5zb24= S0VS IFpvcm8= cmlzaXM= IGxvY2FsaXphdGlvbg== IFNleW1vdXI= IEFuZ2xpYw== cmVkaXRhdGlvbg== cHJvdGVjdGlvbg== IFBhaWdl IG9taXQ= IFJvdXNzZQ== IFR1Yg== IGludml0YXRpb25z dHR5 IG1vc3M= cGh5c2ljYWw= Q3JlZGl0cw== IGFuYXJjaHk= IGNoaWxkY2FyZQ== IGx1bGw= IE1law== IExhbmd1YWdlcw== bGF0ZXN0 IFNhbmZvcmQ= IHVzYWJpbGl0eQ== IGRpZmZ1c2U= IERBVEE= IHNwcml0ZXM= IFZlZ2V0YQ== IFByb21vdGlvbg== 44O844Kv cmljdGluZw== emVl VHVya2lzaA== IFREcw== cHJvdmVu NTcx IHNtdWdnbGVycw== NzA3MTA= IHJlZm9ybWVk IExvaXM= IHVuZmw= IFdJVEhPVVQ= IFJldHVybmluZw== YW5uaWU= IFRvbWFz RnJhbmM= IFByb2ZpdA== IFNFUlY= IFJ1bWJsZQ== aWt1bWFu ZXNhbg== IHRlc3RlcnM= IGdhZGdldA== IGJyYWNlbGV0 IEZTQQ== Y29tcG9uZW50 IHBhcmFtZWRpY3M= IGphbg== IFJlbWVt IFNraW5uZXI= IGxvdg== IFF1YWtl cm9tYQ== IGZsYXNr UHJpbmM= IG92ZXJwb3dlcg== IGxvZGdpbmc= IEtLSw== cmV0dGU= IGFic29yYnM= d3JvdGU= ICwi S2luZ3M= IEhhaWw= IEZhbGxpbmc= eHRhcA== IEhlbGVuYQ== aXJlbnM= TGFycnk= IHBhbXBobGV0 IENQUg== R3Jv IEhpcm9zaGltYQ== IGhvbGlzdGlj Ii5b IGRldGFjaG1lbnQ= IGFzcGlyZQ== IGNvbXBsaWNpdA== IEdyZWVud29vZA== IHJlc3Bhd24= IFN0dXBpZA== IEZpbmlzaGVk ZmFs YmFzcw== IGFiaG9y IG1vY2tlcnk= IEZlYXN0 VklERU8= IGNvbnNlYw== IEh1bmdyeQ== UHVsbA== IEh1c3Q= aXRhbmNl P+OAjQ== KS0t IFBhcmFsbGVs Y29udg== NDY5 aGFhcg== d2FudA== UGFwZXI= bWlucw== IFRvcm8= IFRSVU1Q IFJhaQ== RFc= IFdpY2tlZA== IExlcA== IGZ1bmt5 IGRldHJpbWVudA== aW9zaXM= YWNoZXY= IGRlZ3JhZGU= aW1pbGF0aW9u IHJldGFyZA== IGZyYWdtZW50YXRpb24= IGNvd2JveQ== IFlQRw== IEhBTA== UGFyZW50cw== IFNpZWc= IFN0cmF1c3M= IFJ1YmJlcg== 15A= RnJhZw== IHB0 IG9wdGlvbmFsbHk= IFpJUA== IFRyYW5zY3JpcHQ= IER3ZWxs ODgy TWVyYw== IE1PVA== 44Ov44Oz IGh1bnRz IGV4ZWN1dGVz SW5jbHVkZXM= IGFjaWRpYw== IFJlc3BvbnNpYmlsaXR5 IER1bWI= d2Vp QW5kZXJzb24= IEphc3Blcg== aWdodG9u YWJzb2x1dGVseQ== QWR1bHQ= IHBsdW5kZXI= TW9ybmluZw== IFRvdXJz IERhbmU= zro= IFRFU1Q= IEdpbmE= IGNhbmluZQ== YXdhbg== IHNvY2lhbGlzdHM= IFNvZGE= IGltcGV0dXM= IFN1cHBsZW1lbnRhcnk= b2xpYXRo IEtpbm5pa3VtYW4= bWl0dGVkbHk= c2Vjb25kcw== IG9yZ2FuaXNlcnM= IGRvY3VtZW50YXJpZXM= VmFyaWFibGU= R1JFRU4= IHJlc29ydHM= IGJyYWdnaW5n IDM2OA== QXJ0aXN0 d2s= YmxlcnM= VW5jb21tb24= IFJldHJpZXZlZA== IGhlY3RhcmVz IHRveGlu cmFuaw== IGZhaXRocw== IEdyYXBoaWM= IHZlYw== IExJQQ== QWZyaWNhbg== IGFyZGVudA== ZW5kaWFyeQ== TGFrZQ== IERPUw== Y2llbnRpb3Vz IE9rYXdhcnU= IEFsbHk= IFRpbWVsaW5l RGFzaA== IElj Y29udGludWU= IHRpZHk= IGluc3RpbmN0aXZlbHk= IFBvc3NpYmx5 IE91dGRvb3I= IFdvdWxkbg== IGxpY2g= IEJyYXk= IEFY IMOJ ICsj XCc= RGlyZWN0b3J5 YWJpZGluZw== IGZlcmFs aWNhdGl2ZQ== YnV0dA== IHBlcnZlcnNl U2FsdA== IHdhcnBlZA== IG5pbmV0ZWVu IGNhYmluZXRz IHNyZkF0dGFjaA== IFNsb2Fu IHBvd2VyaW5n cmVnYXRpb24= RmxpZ2h0 c2V2ZXJl IHN0cmVu IGNvZw== YXBhY2hl IOKd IGNhZmV0ZXJpYQ== cGFjZXM= IEdyaW1vaXJl dXRvbml1bQ== IHJhaW5pbmc= IGNpcmNsaW5n IGxpbmViYWNrZXJz Y3JlZGl0 IHJlcGF0cmk= IENhbWRlbg== bGljZW5zZQ== IGx5cmlj IGRlc2NyaXB0b3I= IHZhbGxleXM= IHJlcQ== IGJhY2tzdGFnZQ== IFByb2hpYml0aW9u IEtldA== T3BlbmluZw== U3lt 5pa5 IHNlcnZpbmdz IG92ZXJzZWVu IGFzdGVyb2lkcw== IE1vZHM= IFNwcmluZ2Vy IENvbnRhaW5lcg== 6Ls= IE1lbnM= IG11bHRpbQ== IGZpcmVmaWdodGVy cGVj IGNobG9yaW5l 0Lw= ZW5kaQ== IHNwYXJpbmc= IHBvbHlnYW15 IFJO IFBlbGw= IHRpZ2Vycw== IGZsYXNoeQ== IE1hZGFtZQ== U3dvcmQ= IHByZWZyb250YWw= IHByZXJlcXVpc2l0ZQ== dWNh IHdpZmk= IG1pc2NvbmNlcHRpb24= IGhhcnNobHk= IFN0cmVhbWluZw== b3RvbQ== IEdpdWxpYW5p Zm9vdGVk IHR1YmluZw== aW5kaXZpZHVhbA== emVr bnVjbGVhcg== bW9s IHJpZ2h0ZnVs NDkz IHNwZWNpYWxpemF0aW9u IHBhc3Npb25hdGVseQ== IFZlbG9jaXR5 IEF2YWlsYWJpbGl0eQ== VGVubg== IGxhdGNo IFNvbWVib2R5 IGhlbGl1bQ== Y2xhdw== IGRpcHBpbmc= WFhY IGludGVycGVyc29uYWw= NzEw IHN1YnRlcg== IGJpb2xvZ2lzdHM= IExpZ2h0aW5n IG9wdGlj IGRlbmlt ZW5kb24= IENvcm0= IDM0MQ== IENvdXA= IGZlYXJsZXNz IGFsb3Q= IENsaWZmb3Jk IFJ1bnRpbWU= IFByb3Zpc2lvbg== dXBkYXRlZA== bGVuZWNr IG5ldXJvbg== IGdyYWRpbmc= IEN0 c2VxdWVuY2U= aW5pYQ== Y29uY2VwdA== IHJvYXJpbmc= cml2YWw= IENhdWNhc2lhbg== IG1vbm9n a2V5ZXM= IGFwcGVsbGF0ZQ== IGxpYWlzb24= RVN0cmVhbUZyYW1l IFBsdW0= IS4= IHNwaGVyaWNhbA== IHBlcmlzaGVk IGJsb3Q= IGJlbmNoZXM= IDQxMQ== IHBpb25lZXJlZA== IGh1cmxlZA== SmVubmlmZXI= IFlvc2VtaXRl Q2hhaXI= IHJlZWZz IGVsZWN0b3I= IEFudGhlbQ== NjUy IHVuaW5zdGFsbA== IGltcGVkZQ== IGJsaW5raW5n IGdvdG8= RGVjcmU= QXJlbg== IHN0YWJpbGl6YXRpb24= IERpc2FibGVk IFlhbnVrb3Z5Y2g= IG91dGxhd2Vk IFZlbnR1cmE= dGVuZXNz IHBsYW50YXRpb24= IHlhY2h0 IEh1YXdlaQ== IHNvbHZlbnQ= IGdyYWNpb3Vz IGN1cmlvdXNseQ== IGNhcGFjaXRvcg== IGN4 IFJlZmxleA== UGh5cw== IENm cHRpbg== Y29uc2VydmF0aXZl IGludm9jYXRpb24= Y291cg== Rk4= IE5ld2x5 SG91cg== QXNpYW4= IExlYWRpbmc= IEFlcm9zcGFjZQ== QW5uZQ== IHByZW5hdGFs IGRldGVyaW9yYXRpbmc= SENS IE5vcm1hbmR5 b2xpbmk= IEFtYnJv OTEw IHNldGJhY2tz IFRSRQ== IHNpZw== IFNjb3VyZ2U= NTk3 Nzk4 R2FtZXBsYXk= IG1zZWM= TVg= IHByaWNleQ== IExMUA== YWtlcnU= IG92ZXJhcmNoaW5n IEJhbGU= IHdvcmxkbHk= Q2xhcms= IHNjZW5pYw== IGRpc2xpa2Vk IENvbnRyb2xsZWQ= VGlja2V0cw== IEVX YWJpZXM= IFBsZW50eQ== Tm9uZXRoZWxlc3M= IGFydGlzYW4= VHJhbnNmZXI= IEZhbW91cw== IGluZmllbGQ= YmxleQ== IHVucmVzb2x2ZWQ= IE1MQQ== 44KC Q29ycmVjdGlvbg== IGRlbW9jcmF0 IE1vcmVubw== cm9jYWw= aWxpbmdz IHNhaWxvcg== IHJpZmU= aHVuZw== IHRyb3Blcw== IHNuYXRjaGVk IExJTg== IEJpYg== RVNB IFByZXY= IENhbWVs cnVudGltZQ== IG9ibm94aW91cw== NDM3 IHN1bW1lcnM= IHVuZXhwbGFpbmVk IFdhbHRlcnM= Y2FsaWJlcg== IGd1bGw= IEVuZHVyYW5jZQ== 5L2c IDM0Nw== SXJpc2g= IGFlcm9iaWM= IGNyYW1wZWQ= IEhvbm9sdWx1 4Kk= dXNlcmM= ZWNhc3Q= QUNZ IFF1ZXJ5 44K544OI QmV0YQ== IHN1c2NlcHRpYmlsaXR5 IFNoaXY= IExpbWJhdWdo IMOW IE5YVA== IE11c3M= IEJyaXRvbnM= RVNDTw== RUdJTg== ICUl IHNlY2Vzc2lvbg== IFBhdHJvbg== IEx1YQ== bmFpcmVz IEpQTW9yZ2Fu dXNi b2N5dGU= IGNvdW5jaWxsb3Jz IExpYW5n ZmFybQ== IG5lcnZvdXNseQ== IGF0dHJhY3RpdmVuZXNz IEtvdg== anVtcA== UGxvdA== IHN0YWlucw== IFN0YXR1ZQ== IEFwb3N0bGVz aGV0ZXI= IFNVUFBPUlQ= IG92ZXJ3aGVsbQ== WUVT IDI5MQ== ZGVuc2l0eQ== IHRyYXBwaW5n TWl0 IGZpZGU= IFBhbWVsYQ== YXRsYW50aWM= RGFtbg== IHB0cw== T1BB IHNlcnZpY2luZw== IG92ZXJmbG93aW5n dWxv IEVyaXQ= dGlja2V0 bGlnaHRpbmc= IEhtbQ== 44O844Or aW1vdG8= IGNodWNrbGU= NDIz 44GV c2hhcGU= IHF1ZXVlcw== IGFuY2hvcnM= 44K844Km44K5 RmVy IGF3b2tl IDY2Ng== aGFuZHM= IGRpdmVyZ2VuY2U= IDUwNQ== VGlwcw== IGRlcG90 IHNrZXc= IERlbGl2ZXI= b3BvdA== IGRpdnVs IEVC dW5zaWduZWQ= IFVuaQ== WGJveA== IGZvcmtz IDcwMg== 5a8= IHByb21vdGVycw== IFZhcG9y IGxldmllZA== c2xvdA== IHBpZ21lbnQ= IGN5bGluZGVycw== Q1JF IHNuYXRjaA== IHBlcnBldHVhbGx5 IGxpY2tpbmc= IEZlZXQ= IEtyYWtlbg== IEhvbGRlbg== IENMU0lE bXI= IHByb2plY3Rvcg== IGRlbm90ZXM= IGNoYXBlbA== IFRvcnJlbnQ= Ymxlcg== Um91dGU= IERlZmVuZGFudA== IFB1Ymxpc2hlcnM= IE1hbGVz IElubm92 IEFnaWxpdHk= cml0ZXI= dHltb2xvZ3k= c3RvcmVz TGluZA== IGZvbGx5 IFp1cmljaA== Qmxl IG51cnR1cmU= IGNvYXN0bGluZQ== dWNoaW4= RG9taW4= IGZyaXZvbA== IENvbnNvbGlk cmVzdWx0cw== TUo= IHBoeWxvZ2Vu IGhhdWxlZA== IFdpbGV5 IEplc3NpZQ== IFByZXBhcmU= IEVwcw== IHRyZWFzdXJlcg== SUFT IGNvbG9uaXN0cw== IGludW5k IFdXRg== IENvbnZlcnRlZA== NjAwMA== b3V0c2lkZQ== IEFwcGVhcmFuY2U= IFJlbGlj IE1pc3Rlcg== c2F3 IHJlc3VsdGFudA== IGFkamVjdGl2ZQ== IExhdXJlbA== IEhpbmRp YmRh UGVhY2U= IHJlYmlydGg= IG1lbWJyYW5lcw== IGZvcndhcmRpbmc= IGNvbGxpZGVk IENhcm9seW4= S2Fuc2Fz NTk5 IFNvbGlkR29sZE1hZ2lrYXJw QmVjaw== IHN0cmVzc2luZw== IEdvbw== IENvb3BlcmF0aXZl IGZz IEFyY2hpZQ== TGl0ZXI= IEtsb3Bw SmVycnk= IGZvb3R3ZWFy V2FycmVu IHNjcmVl aGFyZQ== VW5kZXJzdGFuZGluZw== UGVk IGFudGhvbG9neQ== IEFubm91bmNl TWVnYQ== IGZsdWVudA== IGJvbmRhZ2U= IERpc2NvdW50 aWxpYWw= Q2FydA== IE5pZ2h0bWFyZXM= U2hhbQ== IEJvbGw= dXNzaWU= SHR0cA== QXRsYW50YQ== IHVucmVjb2du IEJpZA== IHVuZGVyZ3JhZA== IGZvcmdpdmluZw== IEdsb3Zlcg== QUFBQUFBQUE= NDQ1 Vkc= cGFpbw== a2lsbGVycw== IHJlc3BvbnNpYmx5 IG1vYmlsaXpl IGVmZmVjdGVk IEx1bWlu IGthbGU= IGluZnJpbmdpbmc= YW5ub3VuY2Vk IGZpdHQ= YmF0Y2g= IFRhY2tsZQ== IExpbWU= IEFQUA== dWtlbWlh IHJ1Ynk= IGV4b25lcg== IENhc3VhbA== MDcw IHBlbHZpYw== IGF1dG9tYXRl IEtlYXI= IENvYXN0YWw= IGNyZWVk IGJvcmVkb20= IFN0dW4= cmlvdHQ= go4= IHJlZ2VuZXJhdGU= IGNvbWVkaWFucw== IE9QRVI= U3BvbnM= aWRpdW0= b25pcw== TG9jYXRlZA== MDU3 IHN1c3BlbnNl IERhdGluZw== Q2Fzcw== IG5lb2NvbnM= IFNoaW56bw== IGF3b2tlbg== Y2hyaXN0 IE1lc3NhZ2Vz YXR0bGVk IFNwcmF5 IFNwaWNl Q1c= IHNoaWVsZGluZw== IEdhdWw= QW1pZA== IHBhcmFtaWxpdGFyeQ== IG11bHRpZg== IFRhbm5lcg== aWxr IGdvZGRhbW4= Z2VtZW50cw== IGJlZnJpZW5k bW9iaQ== IDM4OA== Zm9sZGVy YWNjYQ== IGluc2lu Z2Fw TmV2 ZmlmdGg= IHBzeWNoaWF0cnk= YmFua3M= VEhJUw== IGhhcmI= YWNxdQ== IGZhY2FkZQ== IFBvd2VyUG9pbnQ= ODAz IGJsdWZm U2hhcmVz IGZhdm9yaW5n RWxpemFiZXRo w43DjQ== IHJhbmdlcg== Nzcy IEFyY2hl aGFr IEdlbmV0aWNz IEZFTUE= IGV2b2x2ZXM= IGVzdGU= IFBldHM= IE3DqQ== IEludGVyZXN0aW5n IENhbnRlcmJ1cnk= Y2hhcHRlcg== IFN0YXJmbGVldA== U3BhbmlzaA== IGRyYXdiYWNr IE5vcndpY2g= OTcw bm9ydGg= YWdhbmRh IHRyYW5zZm9ybWF0aXZl cmFtaWRz YmlvbG9neQ== YWRheQ== IHByb3BhZ2F0aW9u IEdhbW1h IERlbmlzZQ== IENhbGN1bGF0b3I= ZW50aW1lcw== IEJldHQ= IGFwcGVuZGl4 IEhERA== QUtJTkc= IHN0aWdtYXQ= IGhvbHN0ZXI= IG9yZGluYXJpbHk= Q2hhbmNl IENvbnRyYXJ5 IGFkaGVzaXZl IGdhdGhlcnM= NjEy cmVhdQ== b255bXM= ZXdheXM= IGluZHVjZXM= IGludGVyY2hhbmdlYWJsZQ== c2Vt V2hpdA== IHRyYW5jZQ== IGluY29ycG9yYXRpb24= IEV4dHJhcw== RmluYW5jaWFs IGF3a3dhcmRseQ== IFN0dXJnZW9u IEhZ Tm9ybWFsbHk= IEVuZGluZw== IEFzc2lzdA== ZW5jcnlwdGVk IHN1Ymp1Zw== IG5vcw== IGZhbmF0aWM= Q3Vi Q1U= PyIu IGlycmV2ZXJzaWJsZQ== 5YI= MDMx IEhBUg== c3ByZWFk dWxpYQ== PSQ= U2NvcGU= TG90cw== IGxpZmVzdHlsZXM= b2xvbg== IGZlZHM= IGNvbmdyYXR1bGF0ZQ== d2Via2l0 IGluZGlzdGluZ3Vpc2hhYmxl IFN3aW5n IGNvbW1hbmRtZW50cw== cXVpbGE= YWJlbGxh bWV0aHls YW5uYWJpbg== IG92ZXJl IGxvYnN0ZXI= IFFVRVNU IENPTlRJTg== YmVybmF0b3JpYWw= Ojo6Ojo6Ojo= IFRyYXZl IFNhbW9h QU5J NzUy 0LQ= dXNlcmNvbnRlbnQ= IE1vZGVyYXRl eWVhaA== IEtpdHQ= IHdlZQ== IHN0dWZmaW5n IEludGVydmVudGlvbg== IERpZ24= IHdhcmVob3VzZXM= IEZpamk= IHBlbGxldHM= IHRha2Vhd2F5 IFRBQkxF IENsYXNzaWNhbA== Y29sbGVjdGlvbg== IGxhbmRmYWxs IE11c2NsZQ== IHNldHRsZXM= IEFEVg== IDM0NA== TGF1cmE= IGZhcmVk IFBhcnRpYWw= NDM2 b3NzaWJpbGl0eQ== IERhbHk= IFRhcmFudA== IEZ1amk= YW1s Y2VuY2U= NTUx IFByb2NlZHVyZXM= IE9DRA== IFVE dGlu UVVJ YWNobw== NDM4 IGdsaXRjaGVz IGVuY2hhbnRtZW50 IGNhbGN1bGF0ZXM= SVJP IEh1YQ== YWx5c2Vz IExpZnQ= dW1v IGxlYXB0 IGh5cG90aGVzaXplZA== IEd1c3Rhdg== aXRhbnM= VkVSU0lPTg== 5qA= Um9nZXI= IHJhbmQ= IEFkYXB0ZXI= IDMzMQ== IFBldGl0aW9u a2llcw== TWFycw== IHVuZGVyY3V0 emVlcw== IEx5b25z IERIQ1A= TWlzc2luZw== IHJldGlyZWVz IGluc2lkaW91cw== ZWxp Pik= LuOAjQ== IGZpbmFsaXN0cw== IEF1cmU= IGFjY3VzZXI= IHdhc3Rlcw== IFlz IExvcmk= IGNvbnN0aXR1ZW5jaWVz IHN1cHBlcg== IG1heWhlbQ== b3Jhbmdl IG1pc3BsYWNlZA== IG1hbmFnZXJpYWw= IGV4Y2U= IENMSQ== IHByaW1hbA== IExlbnQ= Q3J5c3RhbA== aG92ZXI= IE5UUw== ZW5kdW0= IGR3 IEFsYw== bm9zdGlj IHByZXNlcnZlcw== IFRzYXJuYWV2 IHRyaXBsZWQ= cmVsYXRpdmU= QXJjYWRl a2lsbGluZw== IFdFRUs= IEhhbm5h RHVzdA== Q29tcGxldGVk gas= IGFwcHJvdmVz IFN1cmY= IEx1dGhlcmFu dmVuYW50cw== IHJvYmJlcmllcw== d2VpZ2h0cw== c29mdHdhcmU= YXRhbmE= dWdhbA== IGdyYXZ5 IENhbmNl T0xPR1k= bHlhaw== VG9uaWdodA== IHVudmVpbA== IDE5MDQ= IE1pbmlvbg== ZW50aW91cw== c3RpY2U= cGFja2FnZXM= IEdFQVI= IGdvbA== IEh1dGNoaW5zb24= IFByb2Zlc3Npb24= IEdVTg== IERpZmZlcmVuY2U= IFRzdWt1eW9taQ== IExlc2JpYW4= Njcw IGZ1Z2l0aXZl IFBsYW5ldGFyeQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGFjY3J1ZWQ= IGNoaWNrcw== IHN0b3Bw IGJsb2NrZXJz Q29k IGNvbW1lbnRlcnM= IFNvbWV3aGVyZQ== IFBob3RvZ3JhcGhlcg== dGhlbWU= IG1heW9yYWw= d3U= IGFudGVubmFz IHJldmFtcGVk IFN1YmplY3Rz aXTDqQ== aW11cmE= IGVudHJhbmNlcw== bGl0ZXJhbGx5 IHRlbmV0cw== IE9NRw== IE1QSA== IERvbmtleQ== IE9mZmVuc2U= ICIr U25hcA== IEFGQg== IGFuaW1hdGU= IFNvZA== SGlzcGFuaWM= IGluY29uc2lzdGVuY3k= RGI= Rlk= RXhwb3J0 IGFwZQ== IHBlYXJs aWJlbA== IFBBQ3M= IHtc IGFjdHU= IEhTQkM= Y2FtcHVz IHBheW9mZg== IGRlaXRpZXM= IE5hdG8= b3VwbGU= IGNlbnNvcmVk IENsb2p1cmU= IGNvbmZvdW5kaW5n ZW5p IHJlY2tvbg== b3BoZQ== IHNwb3R0aW5n IHNpZ25pZmllcw== IHByb3BlbA== IGZlc3RpdmU= U3VnZ2VzdA== IHBsZWRnaW5n IEJlcm1hbg== IHJlYmVsbGlvdXM= IG92ZXJzaGFkb3dlZA== IGluZmlsdHJhdGVk am9icw== Njcy IHNjYWxhYmxl IGRvbWluaW9u IE5ld2ZvdW5kbGFuZA== IE1lYWRvdw== IHBhcnRpdGlvbnM= QU1J IHN1cHBsZW1lbnRhcnk= c3RydW1lbnQ= IGhhaXJ5 IHBlcnBldHVhdGU= IG51dHNoZWxs IFBvdGF0bw== IEhvYmJpdA== IGN1cnNlcw== RmxvYXQ= IHF1aWV0ZXI= IGZ1ZWxpbmc= IGNhcHN1bGVz IEx1c3Q= IEhhdW50ZWQ= RXhlY3V0aXZl IGNoaWxkYmlydGg= R3Jl IHJhZGlhbnQ= 5Y4= IG1hbGxz IGluZXB0 IFdhcnJhbnR5 IHNwZWN0YXRvcg== RWg= dGhlbnM= IGN1bG1pbmF0aW5n 5qk= YXJ5YQ== 44Ku aWxpdGFyaWFu IE9SSUc= IFNwZW5kaW5n cHRpdmVz IFNpcmVu IFJlY29yZGluZw== YXluZQ== IHZpbQ== IHNwcmFuZw== VGFuZw== IE1GVA== bW9ybmluZw== IFdlZWQ= bXBlZw== Y2Vzc2lvbg== IENodW5n NzMw d2FybmluZw== NTYy aGFuZGVkbHk= UG9vcg== UG9saXRpY3M= OiM= IHBpYW4= IGZlY2Vz IERvY3VtZW50YXRpb24= IGJhbmlzaGVk IDM5OQ== IEFSQw== IGhlaW5vdXM= SmFrZQ== IEFtaXI= d2F5bmU= dnJl b3NoZW5rbw== IG5vdGVib29rcw== IGZvdW5kYXRpb25hbA== IG1hcnZlbG91cw== aXh0YXBl IHdpdGhkcmF3YWxz IGhvcmRl IERoYWJp aXNhYmxl IEtE IGNvbnRhZ2lvdXM= IERpcA== IEFycm93cw== IHByb25vdW5z IG1vcnBoaW5l IEJVUw== Njgy IGtvc2hlcg== ZmluaXNoZWQ= IEluc3RydW1lbnRz IGZ1c2Vk eWRlbg== IFNhbG1vbg== RmFi YWZmZWN0ZWQ= S0VO Q0VOVA== RG9tYWlu IHBva2Vtb24= IERyaW5raW5n R3Jvd2luZw== IEludmVzdGlnYXRpdmU= IEFldGhlcg== ZW1p IHRhYmxvaWQ= IHJlcHJv IE5vdHdpdGhzdGFuZGluZw== IEJlcnNlcmtlcg== IGRyYW1hcw== IGNsaWNow6k= IGJ1bmc= IFVSSQ== IERvcw== MDQ0 IHBhc3RvcnM= IGxz IGFjcnlsaWM= YXVudHM= RWR3YXJk IG1ham9yaXRpZXM= QmFuZw== IGZpZWxkaW5n IFJlcGxhY2VtZW50 IEFsY2hlbXk= cHBhcmQ= IFJvbWVv IFNhbmN0 IExhdnJvdg== aWJibGU= SW5zdHJ1Y3Q= IGltcHJhY3RpY2Fs IFBsYXlib3k= Y2VwaGFs IHN3YXBz IGthbg== IFRoZW8= IGlsbHVzdHJhdGluZw== IGRpc21hbnRsZWQ= IFRyYW5zZ2VuZGVy IEd1dGg= VUdI IHRyaXVtcGhhbnQ= IGVuY29tcGFzcw== IGJvb2ttYXJr dWRkaW4= amVy IHByZWRpY2F0ZQ== RVNI IHdoZW5jZQ== IEFCRQ== IG5vbnByb2ZpdHM= U2VxdQ== IGRpYWJldGlj IHBlbmQ= IGhlYXJ0ZmVsdA== c2hp IGludGVyYWN0cw== IFRlbGVjb20= IGJvbWJhcmRtZW50 ZGVwZW5kaW5n IExvd3J5 IEFkbWlzc2lvbg== IEJsb29taW5n dXN0cmF0aW9u ZW5lZ2dlcg== QnJldw== IG1vbHRlbg== IE5lcmQ= UElO 4paA YXZlbWVudA== IHRvdXJlZA== IGNvZWZmaWNpZW50cw== IFRyYXl2b24= YW5zc29u IHNhbmR5 dG9sZA== Zmxvd3M= IHBvcHVsb3Vz IFRpbmRlcg== IEJsaXNz UmFjaGVs TWluaW11bQ== IGNvbnRlc3RhbnQ= IFJlZHVjZQ== IE1vcnNl IEdyYXNzbGV5 IENsaWNrZXI= IGV4cHI= IHNpbmNlcml0eQ== IG1hcnF1 IGVsaWNpdA== IFByb3Bvc2l0aW9u IERlbW9uaWM= IHRhY29z R3JlZWs= IHBvc3R3YXI= IGluc29mYXI= IFBvcms= IDM1Mg== ZG9jdG9yYWw= d2Fsa2luZw== IG1pZHRlcm0= IFNhbW15 c2lnaHRlZA== IFRSQU5T aWNp QUxE IFVTTA== IEZJU0E= IEFtcGw= IEFsZXhhbmRyYQ== aW5lbGxp VHJhaW4= IHNpZ25pZnk= IFZlcnN1cw== IG9iZnVzYw== IGto IGFnZ3Jv IFJlbmF1bHQ= IDM0OA== NTE4 b3hpY2l0eQ== MDIy IFR3aXN0 IGdvb2Z5 RHluYW1pYw== IGJyaWVmaW5ncw== bWlnaHQ= ODk5 IGRlcm9nYXRvcnk= VHJv IGZvcmdpbmc= IEtvcmFu IE1hcnJpZWQ= IEJ1Y3M= IHBhbGF0ZQ== IENvbnZlcnNpb24= bWFibGU= NDEz IChf IHNpcGg= IE5FTw== Y29sbGVnZQ== IG1hcmdpbmFsbHk= IGZsaXJ0 IFRyYXBz IFBhY2U= 6buS IGdvYWx0ZW5kZXI= IGZvcmJpZHM= IGNsZXJrcw== IFRhbnQ= IFJvYmJpbnM= IFByaW50aW5n IHByZW1pZXJlZA== IG1hZ25pZmljYXRpb24= IFRH IFJvdXNl IE1vY2s= b2R5bmFtaWNz IHByZWNsdWRl aXNtbw== IFB1bGl0emVy IGF2YWxhbmNoZQ== IEtvZGk= cmlidW5l IExlbmE= RWxlY3RyaWM= IHJlZmluZXJ5 IGVuZG93ZWQ= IGNvdW5zZWxvcnM= IGRvbHBoaW4= IE1pdGg= IGFybW91cmVk aGliaXRlZA== QmVnaW4= IFBX T2ls IFZvcg== IFNoYXJpZg== IEZyYXppZXI= ZXN0YXRl IGphbXM= UHJveHk= IGJhbmRpdHM= IFByZXNieXRlcmlhbg== IFByZW1pZXJl dGlueQ== IENydWVs VGVzdGluZw== IGhvbWVy IFZFUlM= IFByb2w= IERlcG9zaXQ= IENvZmZpbg== IHNlbWluYXJz IHNxbA== IERlZmVuZGFudHM= QWx0ZXJuYXRpdmVseQ== IFJhdHM= 56s= ZXRoeXN0 Jz4= IGlzc3Vlcg== NTg5 IGNoYWlyZWQ= IEFjY2Vzc29yaWVz bWFuZW50 IG1hcnJvdw== IFByaW1vcmRpYWw= Q04= IGxpbWl0bGVzcw== IENhcm5hZ2U= IHVuZHJhZnRlZA== cXY= SU5FU1M= b25ldw== IGNvaGVzaW9u OTg3 IG5lY2tz IGZvb3RiYWxsZXI= IEdFUg== IGRldGVjdGFibGU= IFN1cHBvcnRpbmc= IENTVg== b2NhbGx5 a0h6 IHVuZGU= IHNob25l IGJ1ZGRpbmc= dHJhaw== U3RhbmRpbmc= IFN0YXJjcmFmdA== IEtlbXA= QmVuY2g= IHRod2FydGVk IEdyb3VuZHM= YXRoaQ== TGlzYQ== RGlhbG9n IFNY VmlzaW9u IGluZ2VuaW91cw== 2ZA= IGZvc3RlcmluZw== IFph IEluZ3JhbQ== ICJA TmF0dXJhbGx5 NjE2 MDM1 IEZBQw== SG1t NTU0 IGFjY2VsZXJhdG9y IFZlbmQ= IHN1bnNjcmVlbg== IHR1YmVyY3Vsb3Npcw== cmF2aW9sZXQ= IEZ1bmN0aW9uYWw= IEVycm9ycw== ZWRhcg== MTk2Ng== IFNwZWN0cmU= IFJlY2lwZXM= ODg1 IE1hbmtpbmQ= TGl2ZXJwb29s IHwtLQ== IHN1YnN0aXR1dGVz IFhU d2lyZWQ= IGluY28= IEFmZ2g= RXZh aWNj U29uZw== S25pZ2h0 IGRpbGlnZW50bHk= IEJyb2FkY2FzdA== QWlk IGFmYXI= IEhNUw== YXRvbmlu IEdyYXRlZnVs IGZpcmVwbGFjZQ== IE9tbmk= ZXVybw== IEZSRQ== IFNoaWI= IERpZ2VzdA== dG9nZ2xl IGhlYWRzZXRz IGRpZmZ1c2lvbg== IFNxdWlycmVs IEZO IGRhcmtlbmVk b3V0aGVy IHNsZWVwcw== IFhlcg== Z3Vucw== IHNldHVwcw== IHBhcnNlZA== IG1hbW1vdGg= IEN1cmlvdXM= Z29i IEZpdHpwYXRyaWNr IEVtaWw= aW1vdg== Li4uLi4uLi4uLi4uLg== IEJlbm55 U2Vjb25kbHk= IGhlYXJ0eQ== IGNvbnNvbg== c3RhaW5lZA== IGdhbGFjdGlj Y2xhdmU= IHBsdW1tZXRlZA== IHBlc3Rz IHN3YXQ= IHJlZmVycmFscw== IExpb25lbA== aG9seQ== IHVuZGVyZG9n IFNsYXRlcg== IFByb3ZpZGU= IEFtYXI= cmVzc29y 5Yw= b25nYQ== IHRpbWlk IHBpZXR5 IERlaw== IHN1cmdpbmc= YXpv IDYxMA== IGRlc2tz IFNwb2thbmU= IEFuZmllbGQ= IHdhcnNoaXBz IENvYnJh IGFybWluZw== Y2x1c2l2ZWx5 IEJhZGdl YWdhc2Nhcg== IFBSRVNT IE1jS2Vuemll IEZlcmRpbmFuZA== YnVybmluZw== QWZlZQ== IHR5cmFubg== IEl3 IEJvb25l MTAwNw== IFJlcHQ= CsKg IGNhcmF2YW4= IERpbGw= IEJ1bmRlc2xpZ2E= Q2h1Y2s= IGhlYWxlcg== 44O844OG IEhvYmJ5 IG5lZ2F0ZQ== IGNyaXRpcXVlcw== c2VjdGlvbmFs bW9wb2xpdGFu IGR4 IG91dHNvdXJjaW5n IENpcGhlcg== dGFw U2hhcnA= IHVwYmVhdA== IGhhbmdhcg== IGNydWlzaW5n IE5pYWdhcmE= IDM0Mg== aWxsdXM= IFN2 IHN1YnRpdGxlcw== IHNxdWFyZWQ= IGJvb2tzdG9yZQ== IHJldm9sdXRpb25hcmllcw== IENhcmx0b24= YWJhbA== VXRhaA== IGRlc3Bpc2U= IFVN Y29uc2lkZXI= YWlkbw== IGNhcnRz IFR1cnRsZXM= VHJhaW5pbmc= IGhvbm9yYXJ5 wqI= IHRyaWFuZ2xlcw== NDIy IHJlcHJpbnRlZA== IGdyYWNlZnVs IE1vbmdvbGlh IGRpc3J1cHRpb25z IEJvaA== IDM0OQ== IGRyYWlucw== IGNvbnN1bGF0ZQ== IGJlbmRz IG1hZmlh dXJvbg== IEZ1bHRvbg== bWlzYw== IHJlbmFs IGluYWN0aW9u Y2tpbmc= IHBob3RvbnM= IGJydWlzZWQ= IENvZGVz b2dp IG5lc3Rz IExvdmVseQ== IExpYnJl IERhcnls ICMjIw== U3lz Liwi IGZyZWV6ZXM= ZXN0YWJsaXNobWVudA== YW5kb3dza2k= IGN1bWJlcnM= IFN0YXJn IEJvbWJz IGxlZ2lvbnM= IGhhbmR3cml0aW5n IGdydW4= IENhaA== c2VxdWVudA== IG1vdGg= IE1TTQ== SW5zZXJ0 Rmlm IG1vdGVs IGRleHRlcg== IEJpbGQ= aGVhcnRlZGx5 IHByb3Bl IFRleHR1cmU= IEp1bmN0aW9u eW50aGVzaXM= b2NhcmQ= IFZlcmE= IEJhcnRo IM68Zw== IGxhc2hlZA== IDM1MQ== IFphbWI= IFN0YXBsZXM= IENvcnRleA== IENvcmtlcg== IGNvbnRpbnV1bQ== IFdSSVRF dW50YQ== cmlkb3I= IGRlZW1z MDMz IEdPTEQ= cGFz IHJlcHJlc3NpdmU= 44OG44Kj IGJhZmZsZWQ= U2Nhcg== IGNyYXZl IF9fX19fXw== IGVudHJlcHJlbmV1cnNoaXA= IERpcmVjdG9yYXRl ICdb IHZpbmVz IGFzY2VuZGVk IEdST1VQ IEdvb2RieWU= IGRvZ2dlZA== 44O044Kh TWFudWZhY3Q= IHVuaW1hZ2luYWJsZQ== cmlvdHM= aWVycmV6 IHJlbGF0aXZpdHk= IENyYWZ0aW5n cmF1Z2h0 dWRlbg== Y29va2ll IGFzc2Fzc2lucw== IGRpc3NhdGlzZmllZA== YWNjaQ== IGNvbmR1aXQ= U3ByZWFk IFJpY2Fu bmljZQ== aXp6bGU= IHNjYXJlcw== IFdIWQ== cGhhbnM= NTM1 IHByb3RyYWN0ZWQ= IEtyaXN0ZW4= NTM2 IFNjcmli IE5laA== IHR3ZW50aWVz IHByZWRpY2FtZW50 IGhhbmRjdWZmcw== IGZydWl0ZnVs IFVM IEx1ZHdpZw== IGF0dGVzdA== IEJyZWFrZXI= IGJpb2xvZ2ljYWxseQ== IERlYWxlcg== IHJlbm92YXRpb25z Znc= ZXNzZW4= QWxpY2U= IEhlbnJp IHVuaWxhdGVyYWxseQ== IFNpZGQ= aGFp IFN0cmV0Y2g= U2FsZXM= IGN1bWJlcnNvbWU= IEphdmllcg== IHRyZW5keQ== IHJvdHRpbmc= IENoYWxsZW5nZXM= IHNjcmFwcw== IGZhY2V0cw== IFZlcm9uaWNh IFZlcmdl IFNhbmE= QWxpZW4= IFJpaA== IHJhZGlhbA== ZWN0YXI= IDYzMA== Y2xp TWFyaWU= IHdpbGRmaXJl IENhdG8= aGFuZGVy IHdhaXRyZXNz IGNob3Bz IFNFQ1RJT04= IGJsdW50bHk= IENhdGFsb2c= bmlhbg== c3R1ZHk= IHBhdHJvbGxpbmc= IFRlbnRo bmV4dXM= IE5PTg== b3BzeQ== IHNjYXRoaW5n c2ll IGRldGVyaW9yYXRlZA== VkI= TmF6aXM= IGRlcGljdGlvbnM= IGF1dGhlbnRpY2F0ZWQ= IENvbmNl a3JpdA== IHByb211bGc= IExPTkc= VUZD IFZpc2l0b3Jz IFJlY2FsbA== IHJlaGFiaWxpdA== IFNMSQ== IGdsYWNpZXI= IEJpdGU= IDUwMw== IHZvbWl0 IGZlcm1lbnRlZA== IEtoYWxpZA== IGdyYWRlZA== IE1hZ2lja2E= IEljaGlnbw== cG93ZXJmdWw= aWNhdG9ycw== NzUz IHNocmV3 IDM1Ng== IGxlZ2FsaXppbmc= IGFsbG90dGVk IEFyY2hkZW1vbg== aXRoaW5n aWdndXJhdA== Vk9M TGVvZA== IG9pbHk= IGluZHVjaW5n IGFteWdkYWxh IGFkbWlucw== IEFjcXVpc2l0aW9u Q0FO IHNjaGVtYXRpYw== IG1vYW4= IENhbWVyb29u IHRpbms= IG1lcnJ5 IGJ1dHRlcmZsaWVz IEdvZmY= IHdvcmtzcGFjZQ== IENvcm9uYQ== IGphdmFzY3JpcHQ= IERvbHBoaW4= IENhbnRvcg== NDY0 dG9l QVBT IEFnaW5n IHBhZGRlZA== IFpoZW5n IEhlbGQ= IGVzdHJhbmdlZA== IDc3MA== Ln0= IER1bmhhbQ== IHNtb2tlcw== IGNhcGl0YWxz dW5kYWk= U2hpbg== IEZvdW5kaW5n IGVudGl0bGU= IGNlbnRlcnBpZWNl RGlzY292ZXI= IHRoZXJldG8= YWxlcnQ= IE5vdQ== IEFuYWx5c3Q= bGM= Rkg= RklFTEQ= IFBPVg== Z3JheQ== IGFyY3M= IEhPVA== IHJz IG9ibGlnYXRvcnk= IEFyY2hpdGVjdHM= IFN2ZW4= IEZFQw== MDIwMA== Q2hyaXN0bWFz IEFsYmFuaWE= cmF0b20= NTg3 IGhhcmRzaGlwcw== IGF1dG9z IENoYXJnZXM= IGFwZXM= IDM3Ng== d2FsbGV0 IGludG94aWNhdGlvbg== IGdvYmxpbg== IDU3MA== KysrKysrKysrKysrKysrKw== IFllbHA= IE1hZ25ldGlj IEJyaWdncw== UmFpbA== IHNwYXducw== IFdpZ2dpbnM= IHNob3djYXNlZA== IHJlc29ydGVk dWJlbg== IHdoaXBwaW5n IGltaXRhdGU= IGRpZ2VzdGlvbg== IFVTUFM= IEdlc3Q= IHllYQ== IFRpZ2h0 aW5kYWw= aWNhcw== YC4= Q0FTVA== Jyc7 IEZldA== b3BhdGhpYw== SW52YWxpZA== IHJlZ3JldHRlZA== IGJyb2Njb2xp IFNjb3Jlcw== ZXZl IHBvc3Rpbmdz IGFjY3VtdWxhdGluZw== IG5lZWRsZXNz ZWxmdGg= IG1heW9ycw== IHNjcmli IGFuZWNkb3Rlcw== IGJvdGNoZWQ= IFJpYmJvbg== IENvbnN0YW50aW5l aXVzZXM= ZXNzZXM= IGRldmlzZQ== Q29tcGFyZWQ= IHB1ZGRpbmc= IGdhcmc= IGV2b2tl Nzk3 IGRldG94 OTA5 IFBpZWNlcw== IE1jQ2FydG5leQ== IG1ldGFzdA== IEtyeXB0 UE9S IHRlbmRpbmc= IE1lcmNoYW50cw== UHJvb2Y= IFZhcmc= IFBvcnRhYmxl 44O844OG44Kj QnJhaW4= MjUwMA== IGZvbGlhZ2U= 2Lk= IG1lbnRvcnM= IEFpcmVz IG1pbmltYWxpc3Q= IGluZ2VzdGVk IFRyb2phbg== IFFpYW4= aW52b2x2ZWQ= MDI3 IGVyb2RlZA== UkFGVA== IGJsdXJyeQ== TW9i IGJ1ZmZldA== IEZuYXRpYw== YWVh S05PV04= IEluaXQ= c2FmZXR5 ZW51bQ== QUNUSU9O IENydXNoZXI= IERhdGVz IC4uLi4uLi4uLi4uLi4uLi4= Y2FsbGluZw== YWtvdg== IHZlbnR1cmVk IDU1NQ== YXVnYQ== SGFydA== IEFlcm8= TUFD IHRoaW5seQ== IGFycmE= U1RBVEU= aWxkZQ== IEphY3F1 IEZlbWFsZXM= IHRoZW9yZW0= IDM0Ng== IHNtYXJ0ZXN0 IFBVQkxJQw== IEtyb24= IEJpdHM= IFZlc3NlbA== IFRlbGVwaG9uZQ== IGRlY2Fw IGFkanVuY3Q= IFNFTg== bWVyZ2E= IHJlZGFjdGVk IHByZWhpc3Rvcmlj IGV4cGxhbmF0b3J5 IFJ1bnM= IFV0dGFy IE1hbm55 IEFVVEhPUg== IFVubGVhc2hlZA== IEJvd2xpbmc= YmVhbnM= Nzkz IHVuaXZlcnNlcw== IHNlbnNpdA== IEt1bmc= cmVwZWF0 Y3RybA== IHBhY2Vk IGZ1bGxlcg== Q2xvY2s= IHJlY29tYg== IEZhdWw= IEJ1bmtlcg== IHBvb2xlZA== IGFuYQ== IE1vdXRo TExPVw== aHVtYW5l IGJ1bGxkbw== IE1pY2hhZWxz ZmFt IHdyZWNrZWQ= IHBvcnRyYXlz IFdoYWxl IEhlcw== IGd1ZXNzZXM= IEJyb3dzZQ== IExBUEQ= IGNvbnNlcXVlbnRpYWw= IElubm9jZW50 IERSQUc= IHRyYW5zZ3Jlc3M= IE9ha3M= IHRyaXZpYQ== IFJlc29u IEFEUw== LS0r IFRvbGw= IGdyYXNwaW5n IFRIRU0= IFRhZ3M= IENvbmNsdXNpb24= IHByYWN0aWNhYmxl IGhvb3A= IHVuaW50ZW50aW9uYWxseQ== IGlnbml0ZQ== IE1vdg== dXJpemVk bGVoZW0= VGVybWlu IGNvbG91cmZ1bA== IExpbmVhcg== IEVsbGll R3k= IG1hbnBvd2Vy IGpz IGVtb2pp IFNIQVJFUw== Xy4= MDAwMDc= IHNvcGhpc3RpY2F0aW9u IHVuZGVyc2NvcmU= IHByYWN0aXNl IGJsb2I= b3BlbnM= VWtyYWluZQ== S2VlcGluZw== WUM= SlI= dWx0aW1hdGU= Q2xhaW0= IGF1dG9tb2JpbGVz OTkz c3RlZWw= IHBhcnRpbmc= IExhbms= Li4uPw== IDM4NQ== IHJlbWVtYnJhbmNl IGVhc2Vk IGNvdmFyaQ== IFNpbmQ= RWZmZWN0aXZl IGRpc3NlbWluYXRpb24= IE1vb3Nl IENsYXBwZXI= YnJhdGVz QXBwbHk= IGludmlz IHdvcnNlbmVk 4oCULQ== IGxlZ2lzbGF0b3I= IExvbA== IFJvd2U= IGRlYWxlcnNoaXA= dW1hcg== aWRlbmNlcw== IGludmVzdGlnYXRlcw== IGNhc2NhZGU= IGJpZGRlcg== IEJFTg== SXJvbmljYWxseQ== IHByZXNpZGluZw== IGRpbmc= IGNvbnRyYWRpY3RlZA== IHNodXRz IEZJWA== IDM2Ng== RGlzdHJpY3Q= IHNpbmZ1bA== IENoYXJpc21h b29wcw== IHRvdGFsaXR5 IHJlc3RpdHV0aW9u IE9wdGltdXM= IERhaA== IGNsdWVsZXNz dXJuZWQ= IG51dHJpdA== IGxhbmRvd25lcnM= IGZsdXNoZWQ= IGJyb2FkZW4= bWll IHByaW50bG4= IG5pZw== IENvcnB1cw== SmVu IHByb3Rv IFdpa2ltZWRpYQ== IFBhbG8= Q09S IHN0b3J5bGluZXM= IGV2YW5nZWxpY2Fscw== IERhcnJlbGw= IHJvdG9y IEhX c2tpbGxlZA== ZXJ5bA== IGJlZ2c= IEJsdW1lbnRoYWw= IHdlYXZpbmc= IGRvd253YXJkcw== IEphY2tldA== IEFOR0VM VGVjaG5vbG9neQ== IGVzb3Rlcmlj YWxkZWh5ZGU= IGZ1cmlvdXNseQ== IGZvcmVpZ25lcg== V2Vhaw== Q0hP IEhvdW5k RXhwZXJpZW5jZQ== IFBsYXlzdGF0aW9u IE1JQQ== IFVuZw== Y2xvdGg= YWdhbGw= IGNhbG1pbmc= aXplbnM= U3RydWN0 IFdpdGNoZXM= IENlbGVicmF0aW9u IC4uLi4uLi4uLi4uLi4u cHRyb2xsZXI= IFRDVQ== IGJ1bm55 44ON dXRvcmlhbA== IHVwc2NhbGU= IFN0YQ== IENvbG9zc3Vz IGNobG9yaWRl IFphYw== IFJlYXNvbnM= IEJyb29raW5ncw== IFdISVRF XVsv IExvc2U= OTA1 IHVuZGVyc2lkZQ== ZXJuZWxz IHZhcGU= ZG96ZW4= dXBwZXQ= IFNUT1A= bWF0aWNhbA== IFN0YXRlbWVudHM= aGVkZGFy UEFD Q3VzdG9tZXI= IG1lbW9z IFBK ZW5kYXJz IExpbWl0cw== bGF1Z2g= IHN0YWJpbGl6ZWQ= IEFMRUM= WUE= VXBncmFkZQ== YWxhbQ== IHRlY2hubw== IGFuZXc= Zm9yZXNlZW4= IGNvbGxlZ2lhdGU= IFB5cm8= IERpc20= IGZyb250bGluZQ== IGFtbW9uaWE= SVU= UXVpdGU= Sm9obm55 YXNzaW4= R09Q IFN0eWxlcw== IFNvdmVyZWlnbg== YWN0ZXJpYWw= NTQ5 IFJJUA== IExpc3Rz IDM2NA== IFJlY2Vw c29ja2V0 IEJ5cmQ= IENhbmRsZQ== QW5jaWVudA== IGFwcGVsbGFudA== ZW5mb3JjZW1lbnQ= YWNlYQ== YW5za2k= IG9sZHM= ODg2 IHNsdXJz IGVtcGlyZXM= IGJ1Y2tsZQ== IGFsaWVuYXRpb24= IEFiZXJkZWVu IHVuaWNvcm4= IG92ZXJyaWRpbmc= IExY cHBh IGRlc3Bpc2Vk IEJ1Z3M= IEJTVA== U291dGhlcm4= NTMz IGhhbGxtYXJr IFBvc3Rlcg== IHN0ZW1tZWQ= IHByaW5jaXBhbHM= IFRFQ0g= IFNhbmR3aWNo SXRhbHk= IGNoZWVzeQ== IFNldFRleHRDb2xvcg== IFByb3RlY3RpdmU= IENvaG4= Sk8= YXB0b3A= UmVhc29u TGVhZGVy IFVuZGVyc3RhbmQ= IEZyaWRheXM= IENvbnRpbnVvdXM= IGNsaXBwaW5n IFJ5ZQ== IGJlcnRo dGltZXI= YW5uaXM= cmVhY3Q= IGJ1ZmZhbG8= IFBhcmFz IDY1NQ== IHByZXNpZGVk IFN1bnJpc2U= IHZldHM= IGNsb3Zlcw== IE1jQ3VsbA== U3RyZW5ndGg= R0FO IGlsbGl0ZXI= IFByaWNpbmc= bMOp IHJlc2lzdG9y IGJydW4= IFN1ZmZvbGs= 0Ys= IExpdmVy UmVsZWFzZWQ= IHdoYXRz ODYw IE1lYXN1cmVz IGRlbm91bmNpbmc= IFJ5emVu IHNvdXZlbg== IGNhcmVnaXZlcnM= Y2hpbmk= IFNjYXJsZXR0 IHRyb3VnaA== Q29uZ3JhdHVsYXRpb25z IHRheGlz IFRyYWRpdGlvbg== aml0 IHRhYmxldG9w IGhpdGhlcnRv IGRpc2luZm9ybWF0aW9u b2ZmZW5zaXZl aHJh IERJU1RSSUNU IGNvbXBsaWNhdGU= Y2hlbmtv IFJlY29uc3RydWN0aW9u IHBhbHBhYmxl IGF1c3A= IDQyOA== IHNob3djYXNlcw== IFB1YmxpY2F0aW9u a25vd2xlZGdl aW5ub24= NDE5 IHJldHJpZXZhbA== YW5kZXJz IHJlZnV0ZQ== IGlucXVpcmVk Z3Vy IG5lZ2F0aXZpdHk= IGNvbnNlcnZl IGFmdGVybGlmZQ== IHByZXN1cHA= IEdpbGxlc3BpZQ== IG10 IERO VGFw IHBlcnBlbmQ= IFNteQ== ZG9lc24= IHNwaWxsaW5n IGh5cGVycw== S2F0ZQ== wq4s a2VwdA== IFBvd2VyZWQ= IGph IEtsdXg= YXJkZQ== YWJhbg== IDQ0NA== IGZsYXR0ZW5lZA== IEltcHJvdmVtZW50cw== dXJnYQ== IEt1bmQ= IGluc2NyaWJlZA== IGZhY3VsdA== IHVucHJlcGFyZWQ= IENvbnN1bWVycw== IHNhdGlzZmllcw== IHB1bG1vbmFyeQ== IGluZmlsdHJhdGlvbg== IGV4dGVybmFsbHk= IGNvbmdyYXR1bGF0aW9ucw== YWdoYW4= IGFpcmxpbmVy IGZsdW5n IGZseWVycw== R0Q= IHNuaXBwZXRz IHJlY3Vyc2l2ZQ== IG1hc3RlcmluZw== TGV4 IG92ZXJ0bHk= dmc= IGx1Y2tpbHk= IGVuY3Jv IExhbmNldA== IEFieXNzYWw= ZnVuY3Rpb25hbA== IHNvdw== IHNxdWlk IG5hcnJhdGlvbg== IG5hdWdodHk= IEhvbm91cg== IFNwYXJ0YW5z IHNoYXR0ZXI= IFRhY29tYQ== IENhbG9yaWVz IFJhY2Vz U3VibWl0 IHB1cnBvc2VmdWxseQ== d2F2 IFlvaw== RmVzdA== IEdlcnI= TWV0cm8= IGl0aW5lcg== ZmFtb3Vz ICJ7 aW5saW5l d2FzaGVy SXNzdWU= IENMSUVOVA== b3pv VmVyc2lvbnM= NzI1 IEdsb2Nr IHNoaWVsZGVk IFBDUg== RU5DWQ== IFdlbGQ= IFNpbXBs IHJlZGlyZWN0ZWQ= IEtoYW0= ICg+ IGxhYm91 IGRpYXBlcnM= c3Ns IGNlbGxhcg== b3JnYW5pc21z b3Jlc2M= IEJlcmtz ZGlkbg== U2hpcHBpbmc= Q2hlc3Q= IHVuZG9uZQ== IG1pbGxpb25haXJl IGNvcmRz IFlvdW5nZXI= YXBwcm9wcmlhdGVseQ== IHNlcXVlbHM= dXZl YW50aWNpcGF0ZWQ= IGxld2Q= IFNoaXJ0 IERtaXRyeQ== VmV0ZXI= IHNsYXlpbmc= IFlhcg== IGNvbXBsaWNhdGlvbg== SW93YQ== IEVyaWNh IEJMTQ== Z2lybGZyaWVuZA== Ym9kaWVk NjI2 MTk2Mw== IGludGVybWVkaWFyeQ== IGNvbnNvbGF0aW9u TWFzaw== IFNpZW0= b3dhbg== QmVnaW5uaW5n IGZpeG1l IGN1bG1pbmF0ZWQ= IGNvbmR1Yw== IFZvbHVudGVlcg== IHBvc2l0aW9uYWw= IGdyZWV0cw== IERlZmluaXRpb25z IHRoaW5rZXI= IGluZ2VudWl0eQ== IGZyZXNobWVu IE1vbWVudHM= IDM1Nw== YXRldXJz IEZlZEV4 c2c= Njk0 IGR3aW5kbGluZw== IEJPWA== c2VsYWdl IHRtcA== IHN0ZW4= IFN1dA== IG5laWdoYm91cmhvb2Rz IGNsYXNzbWF0ZQ== ZmxlZGdlZA== IGxlZnRpc3Rz IGNsaW1hdGVz QVRIRVI= IFNjeXRoZQ== dWxpZmZl IHNhZw== IGhvcHBlZA== IEZ0 IEVjaw== IENL IERvb21zZGF5 a2lkcw== IGdhc3BlZA== IG1vbmlrZXI= IExvZA== IENGTA== dGlvbnM= cnVtcw== Zm9saW9z IG1k IHVuY2Fubnk= IHRyYW5zcG9ydHM= IExhYnJhZG9y IHJhaWx3YXlz IGFwcGxpYW5jZQ== IENUUkw= 5oA= UG9wdWxhdGlvbg== IENvbmZlZGVyYWN5 IHVuYmVhcmFibGU= IGRvcnNhbA== IEluZm9ybQ== b3B0ZWQ= IEtJTEw= TWFyeA== IGh5cG9jcml0aWNhbA== cXVz IE51bWVyb3Vz IEdlb3JnaWFu IEFtYnJvc2U= IExvY2g= IGd1YmVybmF0b3JpYWw= IFhlb24= IFN1cHBvcnRz ZW5zZXI= ZWVseQ== IEF2ZW5nZXI= MTk2NQ== QXJteQ== IGp1eHRhcA== IGNob3BwaW5n IFNwbGFzaA== IFN1c3RhaW5hYmxl IEZpbmNo IDE4NjE= aWN0aXZl YXRtZWFs IEdvaGFu IGxpZ2h0c2FiZXI= IEdQQQ== dWd1 IFJFUEw= dmFyaWFibGU= IGhlcnBlcw== IGRlc2VydHM= YWNpb3VzbHk= IHNpdHVhdGlvbmFs d2Vla2x5 b2Js IHRleHRpbGU= IENvcm53YWxs IGNvbnRyYWNlcHRpdmVz IEFrZQ== XS0= 5LmL Oiw= IFdlbQ== IEJpaGFy ICcu IGJlcmU= IGFuYWxvZ3Vl IENvb2tpZXM= IHRha2VvZmY= V2hlZWw= IG1hamVzdGlj IGNvbW11dGluZw== MDIz IENvcnBzZQ== YXNzbWVudA== bWluaQ== IGdvcmlsbGE= IEFsYXM= ZXJlZQ== IGFjcXVhaW50YW5jZXM= IEFkdmFudGFnZQ== IHNwaXJpdHVhbGx5 IGV5ZWQ= cG13aWtp IEVuZGVy IHRyYW5zbHVjZW50 IG5pZ2h0dGltZQ== IElNQUdFUw== NTQ1 IEthbXA= IEZyZWFr IGln UG9ydGxhbmQ= NDMy IE1hdGE= IG1hcmluZXM= IGhvcnM= YXRlcmFzdQ== IEF0dHJpYnV0aW9u IC0tLS0tLS0tLQ== IGtpbnM= IEJFTE9X Kysr IHJlZWxpbmc= b2xlZA== IGNsdXR0ZXI= IFJlbGF0aXZl IDQyNw== QlVT IGF2ZXJ0 IENoZW9uZw== IEFibGU= IFByeW9y RGV2ZWxvcGVy IGVuY3ljbG9wZWRpYQ== IFVTQUY= IEdhcnJ5 U3BhaW4= QmxvY2tz IGV4cG9zaXRpb24= IEdhbWVyR2F0ZQ== V09S IHN0b2NrcGlsZQ== IGNsb3RoZWQ= IFRvbmU= IFJ1ZQ== dHVtYmxy IHRyZWFjaGVyb3Vz IGZyeWluZw== 0Yw= IFNwaA== IHJlc3RyYWludHM= IGVtYm9kaWVz IEdlcw== U2FmZXR5 IG5lZ290aWF0b3Jz bWluaW5n IEFwcGFsYWNoaWFu TE9T IEplbm5h IHBhc3NlcnM= 54s= c25hcA== IHNob3J0ZW4= Y3JlYXRvcg== IGlubnVtZXJhYmxl dXRoZXJsYW5k Njc0 IFdPTQ== IEFzY2VuZA== IEFybW9yeQ== IFRyYW5zYWN0aW9u S2ljaw== IHN1aXRjYXNl ZGF5TmFtZQ== IHdhc3RlZnVs bWFycmlhZ2U= IE1jQ2FiZQ== aXRlY2g= IE9zcw== Q2xvc3VyZQ== IFRyZWFzdXJlcg== IGluZGVjZW50 IER1bGw= IHJlc2lkZW5jZXM= MTk1OQ== IFNldHRsZW1lbnQ= SGFtaWx0b24= IHNlbGZpZXM= IFJhbmtpbmc= IEJhcmtsZXk= IEJvcmU= IFdDUw== IE1hcml0aW1l IEh1aA== IEZvcmVzdHJ5 IGN1bHRpdmF0aW5n IEJhbGxhcmQ= IGdhcnJpc29u IFNETA== OTMw IG5hc2NlbnQ= IGlycmVzaXN0aWJsZQ== IGF3ZnVsbHk= XC9cLw== IGVxdWF0ZQ== IGFudGhyb3BvbG9neQ== IFN5bHZpYQ== IGludGVzdGluZQ== IGlubm9jdW91cw== Y2Vzc2l2ZQ== YWdyYQ== IE1ldHJvaWQ= R3JhbnQ= ODU1 gZY= ICJf 44OD44OJ IGFwcHJhaXNhbA== IEZyZWRkeQ== MDQ2 IDQwNg== IDE4MzA= IGRvY2tpbmc= U3RhdGlj IHBvbnQ= IFZvbHRhZ2U= IFN0ZWFk IE1vcnRnYWdl IEpvbmFo WUw= Q0xBU1NJRklFRA== IGFzYmVzdG9z bmlrb3Y= IGNvbGxhZ2Vu IE9yYml0YWw= UG9ja2V0 Nzk5 IGh5YnJpZHM= aW5jaGVz IGludm9pY2U= dW5keQ== IGluZXF1YWxpdGllcw== VHJlbmQ= d2FzaGVk QkFMTA== IGx1Y2lk IENvbW1lbnRhcnk= IHdpdHR5 QnJhbmRvbg== IGJydWlzaW5n IDYyMA== ZXNjZW50 Ym94aW5n UE9M IDM3OA== UmVjdA== IGxpY2VuY2Vz IE1jR2Vl cHJlc3NlZA== RGFubnk= IGphbW1lZA== b3JkaW5hdGU= IGxldGg= IGRpc3Rpbmd1aXNoZXM= IFlhbWFoYQ== SUxT IEh1bWU= IENhdGVnb3JpZXM= Um9iZXJ0cw== Q2hhcnQ= IGJlZXRsZQ== IEdyYXZleWFyZA== ICgkKQ== b8Sf IHR3aWxpZ2h0 YXJlbGxh 4b0= IGJvb3Rocw== IEhIUw== IEZlbGRtYW4= IGV4Y2F2YXRpb24= IHBoaWxvc29waGllcw== YXRvZ3JhcGh5 IEdhcmFnZQ== dGVjaG5vbG9neQ== IHVuZm9yZ2V0dGFibGU= IHZlcmlmeWluZw== IHN1Ym9yZGluYXRlcw== RWxz IG5lYg== R2FtaW5n RU5B IEFjaGlldmVtZW50 aXR0ZXJz IEdhYmU= IGR1bXBz Zm9yY2Vy IHBvaWduYW50 IE1CQQ== IEhlaWRp aW1laQ== IG1hZ2Vz IGxpYmVyYXRl IGNpcmN1bWNpc2Vk IE1lcm1haWQ= IE1hdHRo dG9nZXRoZXI= IFdpY2hpdGE= IHN0b3JlZnJvbnQ= IEFkaW4= VklJ Rm91cnRo IGV4cGxvcmVycw== V0VS Tm90YWJsZQ== QnJvb2s= bWVucw== RmFpdGg= LS0tLS0tLS0t IEpvdQ== rLw= IHBpbmVhcHBsZQ== IGFtYWxn ZWxu YXJrYWJsZQ== IOOCteODvOODhuOCow== IOOCteODvOODhuOCo+ODr+ODsw== IG92YXJpYW4= IEVjaG9lcw== IGhhaXJjdXQ= IHBhdg== IGNoaWxsZWQ= YW5hc2lh IHN0eWxlZA== IGRhYg== bmlwZXI= IG1pbmlzdGVyaWFs IERVUA== VGFu IHN1bHBo IERldGVy IEJvaGVt b2Rhbg== IGVkdWNhdG9y 4pOY c3Bpcg== Q2hpY2tlbg== IEVsZWFub3I= IHF1aQ== IGhlYXZpZXN0 IGdyYXNwZWQ= VVJB IGNyb29rZWQ= SmVzc2ljYQ== cHJvYmxlbQ== IHByZWRldGVybWluZWQ= IG1hbmlhYw== IGJyZWF0aHM= IExhdWRlcmRhbGU= IGhvYmJpZXM= eXo= Q3JpbWU= IGNoYXJpc21h ZEw= IGxlYXBpbmc= IGtpdHRlbnM= QW5nZWxv IEpBQ0s= IFN1emFubmU= IGhhbHRpbmc= RU5USU9O IHN3YWxsb3dpbmc= IEVhcnRocXVha2U= IGVpZ2h0ZWVudGg= IE5JQw== IElORg== IENvbnNjaW91cw== IHBhcnRpY3VsYXJz Y2lyY2xl NzQw IGJlbmV2b2xlbnQ= IDc0Nw== IDQ5MA== IHJ1bmRvd24= IFZhbGVyaWU= IEJVUg== IGNpdmlsaXNhdGlvbg== IFNjaG4= V0I= b3RpZGU= aW50ZXJuYXRpb25hbA== IGpvaG4= IDE5MDI= IHBlYW51dHM= IGZsYXZvcmVk a3Vz IHJvYXJlZA== IGN1dG9mZg== 6aM= IG9ybmFtZW50 IGFyY2hpdGVjdHVyZXM= IDM2OQ== b2xvcg== IFdpbGRl IENSQw== IEFkanVzdGVk IHByb3Zva2luZw== bGFuZGlzaA== IHJhdGlvbmFsaXR5 IGp1c3RpZmllcw== IGRpc3BlbA== IGFtZXJpYw== IFBvbGVz 2Kk= IGVudmlz IERvb2RsZQ== 5L2/ aWdzYXc= YXVsZHJvbg== VGVjaG5pY2Fs VGVlbg== dXBoZW0= IFhpYW5n IGRldHJhY3RvcnM= IFpp IEpvdXJuYWxpc3Rz IGNvbmR1Y2l2ZQ== IFZvbHVudGVlcnM= IHNk S25vd2luZw== IHRyYW5zbWlzc2lvbnM= IFBMQU4= IExJQg== IGFsbHVkZWQ= IG9iZQ== IGRvcGU= IEdvbGRzdGVpbg== IHdhdmVsZW5ndGhz IERlc3RpbmF0aW9u bmRh dWdp IGF0dGVudGl2ZQ== IExlYW4= cmFsdGFy IG1hbmc= bWJ1ZHM= YWtpbmdz YmVuZGVy IGFjY29s IGNyYXdsZWQ= Tk9X TWlubmVzb3Rh IGZsb3VyaXNoZWQ= IFp1cA== IFN1cGVydmlzb3I= IE9saXZpZXI= RXhjZWxsZW50 IHdpZGVu RG9uZQ== IHdpZw== IG1pc2NvbmNlcHRpb25z Q29ycA== V2Fu IHZlbmVyYWJsZQ== IE5vdGFibHk= IEtsaW5nb24= YW5pbWF0ZQ== Qm9vc3Q= IFNBWQ== bWlzc2luZw== aWJsaW9ncmFwaHk= bWVsb24= IHBheWRheQ== 2LM= Ym9sZQ== IHZlaWxlZA== IEFscGhhYmV0 SXRhbGlhbg== IGV2ZXJsYXN0aW5n IFJJUw== IENyZWU= cm9tcHQ= IGhhdGluZw== IGdyaW5uaW5n IGdlb2dyYXBoaWNhbGx5 T1NI IHdlZXBpbmc= IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGltcGVjYw== TGV0dGVy IGJsb2F0ZWQ= UExB IEZlaW4= IHBlcnNldmVy VGh1bmRlcg== IGF1cg== IFJM IHBpdGZhbGxz 4pa6 IHByZWRvbWluYW50 IDUyNQ== NzE4 QVBF NzE0 IGZhcm1sYW5k IFFpYW8= IHZpb2xldA== IEJhaGFtYXM= IGluZmxpY3Rpbmc= IEVmZmljaWVuY3k= IGhvbWVicmV3 IHVuZGVydG9vaw== IGN1cmx5 IEhhcmRpbmc= bWFuaWE= NTk2 IHRlbXBlcmVk IGhhcnJvd2luZw== IFBsZWRnZQ== IEZyYW5rZW5zdGVpbg== 6Ko= TW90aW9u IHByZWRpY3RhYmx5 IEV4cGxvc2lvbg== b2N1c2luZw== ZXJk Y29sbw== RkZFUg== IGJhY2tmaWVsZA== IFZJREU= dWVibA== TmFycg== IEFyZ3VtZW50 IGdlbm9taWM= IGJvdXRpcXVl IGJhdHRlZA== IEJpbmFyeQ== IGdhbWI= IFJoeXRobQ== Njcz IGFmbG9hdA== IE9seW1waWE= WUlORw== IGVuZGlm aXNpbg== IHdpbnRlcnM= IHNjYXR0ZXJpbmc= SXY= RGlzdGFuY2U= IHRydQ== IENvbWZvcnQ= IG5leHVz IGFpcmZsb3c= IEJ5emFudGluZQ== cGF5ZXJz Y29uaQ== IEJldHN5 RGVhbA== IE51Zw== IENvbnRpbmVudA== cmVkaWJseQ== IG9wdGltaXppbmc= YWxiZWl0 IGVjc3RhdGlj IFByb3Rv 57c= aXZvdA== 4paE ZW1w cm91bmRlcg== IGNsb3V0 IElTVA== NjYz IERvbGxhcnM= IERBQw== IHN1YnNjcmliZWQ= IHJlaGVhcnNhbA== IGFtcHM= IFNoYW5n ZXNt IHNwcmlua2xl IGFzc2FpbGFudA== IE9v IENvaW5iYXNl VGFjdA== IHJldGluYQ== IG51bnM= Uk9O YXR0bw== IGp1Zw== IFNWRw== IGJpa2luaQ== IEZJTEU= IEZvdW5kZXJz ZXBvcnQ= IEtQ IHJlc3RvcmVz IFRoaWNr IGFzaG9yZQ== IGFwcHJvdmFscw== UmVuZGVy TUFH R3JhaGFt IENvcnRhbmE= 44Oz44K4 c3No b3JpYW5z YXJzaXR5 IEluc3BpcmVk dXBwZXI= IHNpZ25hbGxpbmc= IHJlYnVrZQ== IGZsYXJlcw== IGRvd250aW1l U3R1ZGllcw== IHN0YWduYXRpb24= IFNlcXVlbmNl IGdydW50 IGFzc3VyZXM= IFBMQQ== NTky IGludHJhdmVu ZGVwZW5k U3VzYW4= IE1hbnppZWw= TWFuaWE= Q29udHJhY3Q= IHNsYW1z IGN1bHR1cmVk IGNyZWRpdG9y TElTVA== IEhVTQ== IENoYXR0YW5vb2dh c2VydmVk IGNsb2FrZWQ= IEZUUA== cG93ZGVy IFN0ZWxsYQ== dWN0aXZl IGNoZWFwbHk= IE1VQ0g= IEdhbGlsZW8= IHN1aXRlcw== c3BlZWNo IGRlbGliZXJhdGlvbnM= IENoaXBz q5g= QmFsYW5jZQ== IFd5bm5l IEFrcm9u QXNzZXQ= IGhvbm91cmVk IGVkZ2Vk TGlrZXdpc2U= YW5pbW91cw== IFdhZ2U= IEV6ZWs= YWR2ZXJ0aXNlbWVudA== IFJUWA== IE1BRA== IG1pZ3JhdGluZw== IFNRVQ== IDQ3NQ== RWRpdGVk IHNob3J0aGFuZA== IEJhc2ljcw== IGNyb3RjaA== IEVWRU4= IHZt ZWZmaWNpZW5jeQ== IGNhbHZlcw== IEZyaWU= IEJyaWxsaWFudA== IHN0cmlrZXJz IHJlcGVudGFuY2U= IGFydGVyaWVz cmw= QmVk aGFw IGNyeXB0b2dyYXBoeQ== IFNhYnJlcw== IDQxNA== dmlrcw== aWhhcmE= YXBzZXM= VGFsa2luZw== IGludGVydHdpbmVk IGRvY2tz IGFsbGVsZQ== IEFydGlmYWN0 IEhJTQ== dG9ybg== 55U= IG9wYWNpdHk= IEVseQ== b3N1a2U= IG5pcHBsZQ== IGhhbmR3cml0dGVu IFZL IENoYW1iZXJsYWlu IExhb3M= aWdyYXBo Z3Jvdw== IHRyaWxsaW9ucw== IGRlc2NlbmRhbnQ= IFNhaWxvcg== YXN1cmluZw== IGNlaWxpbmdz IFdhcmVob3VzZQ== Zmx5aW5n IEdsb3c= IG5vbnQ= IG1pc2NhcnJpYWdl IHJpZ3M= IG1pbmlzdHJpZXM= IGVsYWJvcmF0ZWQ= IGRlbHVzaW9uYWw= IEh1bWFuZQ== IDM3OQ== bmV0cw== IGJsYWNrb3V0 YWRkZXJz IG5w IFRpcmU= cm9zYw== IHN1YmRpdg== IGxpbmthZ2U= IGNocm9ub2xvZ2ljYWw= IEhFUk8= IHJlc2V0dGxlbWVudA== IFZpbnls IHBhc3RvcmFs IE1vYmls IEJhcmJhcg== Q29vbGRvd24= IEZyaXR6 Y3JpbWluYWw= cmVwZQ== IGJlbGxpZw== IEJyZWVk IDQxOA== IHNlbWJsYW5jZQ== aWpr IGN1cnRhaWw= IGNsaW5jaA== Y29udGFpbmVk IFByb21wdA== YXN0b24= IHdp IHB1cnN1aXRz NTE1 IEdsb3Nz IGZsaXBz IGNvdXBvbnM= IGNsb25pbmc= IExpa2VseQ== UmVtb3ZlZA== IFF1YXJ0eg== cmljZXM= IFNwZWFycw== IHBpb3Vz IGRlcHJlY2lhdGlvbg== IERhcmU= b3VuY2Vz YW1heg== T250 IHBpbm5hY2xl ZG9ja2Vy MDI2 IFd5cg== IFByb3Blcg== y4g= bmls Qnl0ZXM= IHNlZWtlcg== dHJpYWw= IHVuZm9sZHM= IE1hcnNl IGV4dHJhdmFnYW50 IFN1cnZpdm9ycw== UkVEQUNURUQ= IFNwZWVkd2F5 IENyYWlnc2xpc3Q= c3VibWl0 IEdlbmVyYXRpb25z IHVwaG9sZGluZw== IGJsb29kc3RyZWFt IE1pc3Npb25z IExhd24= IGxpbWJv ZW5laQ== SHVo IFdpbGRjYXRz cHJlcA== IE1hcmt1cw== IEZvcmJpZGRlbg== cml0aWM= SU5P IGV4aGliaXRpbmc= cmVxdWVudA== Y2h1aw== IGhhYml0dWFs IENvbXBhdGliaWxpdHk= RHJhZw== UklQVA== dWphaA== R1JPVU5E IGRlbGlucXVlbnQ= IGJ1cm5lcg== IGNvbnRlbXBvcmFyaWVz IGdpbW1pY2s= bG9hZHM= IG5venpsZQ== cG9kY2FzdA== IFdhaw== IFN0YXRlbg== IEt1aA== 44GT aW50ZXJydXB0ZWQ= IGludmluY2libGU= IEJ1cm5ldHQ= Y2lnYXJldHRl IFBlYmJsZQ== IFRlbXBvcmFyeQ== IE1hcmlubw== NTgy IHdhc3RlbGFuZA== aWRlbnRseQ== VHg= IHJpdGU= IFBhbmFzb25pYw== IE1pZGRsZXM= IEhvcnRvbg== YWV1cw== IGN1cmluZw== IG1hdHM= IGFkam91cm4= IGZlYXJzb21l cGV6 Ym9hdHM= IHByb3BlbGw= IGNvbmZsaWN0ZWQ= IEFuZ2Vy IGluc3VyZ2VudA== S2FybA== IGNvYWxlcw== IHNvdXRod2VzdGVybg== IGRpc3N1 IE92ZXJ0 KioqKioqKioqKioq IGJveGVk IEJydW5l YWFh IGdhcmRlbmluZw== IEVuZ2Vs dHJhY2tz IHB1cmlmaWVk IHBsYWNlaG9sZGVy IExpa2Vz IGRhbg== R2Fi IGVjdA== IEZhdw== IEVsaW90 ICcs b3Ryb3BpYw== IFJ1aW4= aGVkb24= IGNhdWw= IGFmdA== IENhZGlsbGFj Z2hh YXNzaWFu dWRlYg== IFRpY2s= IGFkanVzdHM= QVJHRVQ= NTM3 aXNjaGU= YW50eQ== IEZyaWVkcmljaA== IEJsaXp6 IEFPTA== Q2FtcGFpZ24= IG1hbW1hbA== IFZlaWw= IEtldg== IE1hdXJpdA== IERhbWllbg== TmF0aW9u RWFzdGVybg== IHs6 ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHN0ZXJlb3R5cGljYWw= IGF0dGlj IEN5Ym9yZw== cmVxdWlyZQ== IGF3YXJkaW5n IFBhcHVh YnRu YmVudA== Qm9v ICg9 IFhhbmRlcg== IFNvbWVyc2V0 IGNhdGNoeQ== IGNlcnRpZnk= U1RSVUNU IGl0YWw= IHRpZGVz IEJyYW5kcw== R3JheQ== Y29tcGV0aXRpdmU= IGN1cmF0b3I= IERH b21pbml1bQ== IEdNT3M= Y2lhdGluZw== IENhcm1lbg== b3dhcmQ= QmFsdGltb3Jl IHJnYg== Q3U= IHdpcGVz c3BlbGw= SVRORVNT IHN1bW1hcml6ZXM= IFJldmlz IHdoaXN0bGVibG93ZXJz IEJyZWFjaA== IGNyb2NoZXQ= a29z ZXdza2k= IHJlcGV0 IGNyaW1zb24= IEthcmFjaGk= cmVhZGFibGU= ZGltZW5zaW9u IElnb3I= aWxkZWQ= IFplZA== IEtlYW5l IENvc21ldGlj REVQ IHJldHJlYXRpbmc= IFVB ZW5zaWNhbA== IGR1c2s= IERpY2tlbnM= IGFyZW5hcw== IFBhc3NhZ2U= bGV2ZWxz IGN1cnY= UG9wZQ== IGNob3Jlcw== IEVsaXNl IENvbXBhc3M= YnVi IG1hbW1hbGlhbg== IFNhbnNrcml0 IEFOQw== IENyYWNr UXVhbA== TGF1bg== YW1wdW5r IGxlYXJuZXJz IGdsYW1vcm91cw== IGZ1cnRoZQ== ZXJtb3R0 Y2FuZA== R2VuZXJpYw== IG5hcnJhdGVk IGRpc29yZGVybHk= IFRyYW5zYWN0aW9ucw== IERldGVudGlvbg== IFJva3U= xI0= IHVuZGVyc3RhdGVtZW50 IFNhdXI= IFJvZHJpZ28= IEFTQVA= U2lu IHJlam9pY2U= TWV0aG9kcw== IGVsZWN0cm9kZQ== IHdvcnNoaXBwZWQ= IGlkaQ== IFBoeXNpY2lhbnM= IHBvcHVw IGRlZnQ= IFJlbW92YWw= IEJ1ZW5vcw== dmVyYnM= IGZ1bms= dXNoYQ== cmljdGlvbg== b3JlYQ== IEJhbmdhbG9yZQ== IEtlbm9iaQ== enpp IG5vcm1hdGl2ZQ== IGdvYmxpbnM= IGNhZmVz IFVOQ0xBU1NJRklFRA== IEZpcmVk U0lHTg== IHNjbGVyb3Npcw== IFZvdGVy IFNvbm55 IEV4dGVuZA== IEVWcw== QXJzZW5hbA== IHBzaQ== IHdpZGVzdA== IFR1cw== IGxvb21z IGp1c3RpZnlpbmc= IEdyYW5nZXI= 6K8= UmVmZXI= NTgz IGZsb3VyaXNoaW5n YWJyZQ== IHJhdmU= IENvbnRyYQ== IDE4OTg= QWRkcw== IGZ1bA== IENvb2tl c29tZW9uZQ== PSM= Njcx IHlhaw== IGFydGU= IE1pc2NlbGxhbmVvdXM= IERldGVjdGlvbg== IENsYW5jeQ== 4oE= YXNzaWVz IHZhbGlhbnQ= IEZlbWluaXN0 Y29ycnVwdGlvbg== VmVs UGVhcg== IHN1Y2NpbmN0 IHF1aWNrZXN0 a3c= IHNwaXR0aW5n IExpYnJhcmllcw== 5YWJ YW50eg== RGFk IFNwZWNpZmljYXRpb25z cnVwdWxvdXM= YW5kcg== UkVTVUxUUw== IHNub3diYWxs IHByZWRpcw== IEJheHRlcg== IE51cnNpbmc= IENoYWZm c3dl IG91dGFnZQ== IG5lc3Rpbmc= IG5vdG9yaWV0eQ== dHJpZ2dlcg== b25pdGU= am9u IGZvdQ== b29rZWQ= IENlbGVicml0eQ== cmVhbGl0eQ== IGZhdGln IGh1Z2dpbmc= IGJvdGhlcnM= IFBhbnplcg== IENoYW5kcmE= ZmlndXJlZA== IHZvbHRz IENsb3Vkcw== IGZlZWJsZQ== IEN1cnZl IEFzdXM= Nzg2 YWJzb3I= IFZJQ0U= IEhlc3M= IG1hbnVmYWN0dXJlcw== IGdyaXp6 IFBvd2VyZnVs YWNpZA== IHN1YnNlY3Rpb25z IEtydWdtYW4= IEFscHM= aXN1 IHNlcXVlc3Q= IFVsdHJvbg== IFRpbmtlcg== IEdvb3Nl IG1pc21hdGNo QXR0b3JuZXk= IG1vcnBob2xvZ3k= IFNpeGVycw== dXR0ZXJlZA== IEVMRUNU Z3Jhbg== UnVzc2VsbA== IEdTTA== IGZvcnRuaWdodA== IC4p IGFwb3N0bGU= cHJvbmU= ZWxpc3Q= VW50aXRsZWQ= IEltcGxlbWVudGF0aW9u aXN0b3Jz IHRhbmtlcg== IHBsdXNo IGF0dGVuZGFudHM= IFRpaw== IEdyZWVud2ljaA== IFlvbg== IFNQTA== Y2VsbHM= dW50bGVk U29sdXRpb24= IFF1w6k= IHZhY2F0ZWQ= IHVwdGljaw== IE1lcmlkaWFu 5oM= IERyaWxs OTI1 NTg0 IHJlbm92YXRlZA== IEt1YnJpY2s= enlr IGxvdXN5 cHBlbA== b2h5ZHJhdGU= IEl6enk= bGVzaWFzdGljYWw= Q0ND IEFqYXg= IGFkYXB0ZXJz IFBldHJhZXVz IGFmZmlybWF0aW9u IFNUT1I= bGVtcw== YWRvZXM= IENvbnN0YW50aW5vcGxl IHBvbmllcw== IGxpZ2h0aG91c2U= IGFkaGVyZW50cw== IEJyZWVz b21vcnBoaWM= RmlnaHRpbmc= IHBsYXN0ZXI= IFBWQw== IE9ic3Q= IGRlYXJseQ== IFRvb3Ro aWNrc29u IHNoYW1pbmc= UGxleA== QWdn IOKApiI= IHN1YnJlZGRpdHM= IHBpZ2Vvbg== IFJlc2lkZW50aWFs IFBhc3Npbmc= IGx1bQ== IFBlbnNpb24= IHBlc3NpbWlzdGlj IDQzMg== emluc2tp Y2FkZQ== MDc1 IGFwb2xvZ2lzZWQ= aXlhaA== UHV0dGluZw== IGdsb29teQ== IEx5bWU= PS09LT0tPS09LT0tPS09LQ== IFRvbWU= IFBzeWNoaWF0cmlj IEhJVA== Y21z YXBvbG9n IGJyZWFrZXI= IGRlZXBlbg== IHRoZW9yaXN0 IEhpZ2hsYW5kcw== IGJha2Vy IHN0YXBsZXM= IGludGVyZmVyZWQ= IEFib3J0aW9u am9pbmVk Y2h1 IGZvcm11bGF0ZQ== IHZhY2NpbmF0aW9ucw== IGJhbnRlcg== cGhldXM= IG91dGZpZWxkZXI= IE1ldGVy ICMjIyMj IDE4OTU= IG5hcnJvd2luZw== IFNUT1JZ ZnA= IENTVA== aWdub3Jl IHByb2NsYWltaW5n IFJV IEJBTEw= eW5h NjUz IHBvc2l0 UFJF NTk0 IFJlZ2lzdHJhcg== IFBpbGdyaW0= aWNpbw== IHByZXR0 IGxpZmVsZXNz IF9fXw== TmVpZ2g= IENodXJjaGVz b3Jubw== IG9yY3M= IGtpbmRyZWQ= IEF1ZGl0 IG1pbGxlbm5pYWw= IFBlcnNpYQ== Z3Jhdml0eQ== IERpc2FiaWxpdHk= IERBUks= V3M= b2Rvbg== IGdyYW5kZGF1Z2h0ZXI= IEJyb29rZQ== IEFEQQ== RVJB IHBpY2t1cHM= IFdpbGtpbnNvbg== IFNoYXJkcw== IE5L IGV4cGVs IEtpc2x5YWs= IGphcmdvbg== IHBvbGFyaXplZA== aWFuZQ== UHVibGlzaGVy IHJlYnV0dA== IGFwcHJlaGVuc2lvbg== IEtlc3NsZXI= IHByaXNt RlVM MTk2NA== IExvbGw= 5L8= bGV0aGFs xZ8= IGdoZXR0bw== IGJvdWxkZXI= IFNsb3dseQ== IE9zY2Fycw== IEluc3RydWN0aW9u IFVsdHI= IE1vZQ== TmljaA== IFBBVEg= KCo= IFJFTEVBU0U= dW5pbmc= cm91c2U= ZW5lZw== IHJlaW1i IERldGVjdGVk RG9T IHN0ZXJsaW5n IGFnZ3JlZ2F0aW9u IExvbmVseQ== IEF0dGVuZA== aGlnaGVy IGFpcnN0cmlrZQ== a3Nvbg== U0VMRUNU IGRlZmxhdGlvbg== IEhlcnJlcmE= Q29sZQ== cml0Y2g= IGFkdmlzYWJsZQ== RmF4 IHdvcmthcm91bmQ= IHBpZA== bW9ydGVt ZXJzZW4= IHR5cG8= IGFsdW0= Nzgy IEphbWFs c2NyaXB0cw== IGNhcHRpdmVz IFByZXNlbmNl IExpZWJlcm1hbg== YW5nZWxv IGFsY29ob2xpc20= YXNzaQ== IHJlY2l0ZQ== IGdhcGluZw== IGJhc2tldHM= IEdvdQ== QnJvd3Nlcg== bmVhdQ== IGNvcnJlY3RpdmU= dW5kYQ== c2NvcmluZw== IFhE IGZpbGFtZW50 IGRlZXBlbmluZw== IFN0YWlubGVzcw== SW50ZWdlcg== IGJ1Z2d5 IHRlbmFuY3k= IE11YmFyYWs= IHR1cGxl IERyb2lk IFNpdHRpbmc= IGZvcmZlaXQ= IFJhc211c3Nlbg== aXh0aWVz ZXNp IEtpbW1lbA== IG1ldGljdWxvdXNseQ== IGFwb3B0 IFNlbGxlcg== MDg4 ZWNha2U= aGVtYXRpY2FsbHk= VE4= IG1pbmRsZXNz IGRpZ3M= IEFjY29yZA== b25zZW5zZQ== ZW1pbmc= YnJhY2U= IGVCb29r IERpc3RyaWJ1dA== IEludmVzdG1lbnRz d3Q= XSks YmVoYXZpb3I= NTYz IGJsaW5kaW5n IFByb3Rlc3RlcnM= dG9waWE= IHJlYm9ybg== IEtlbHZpbg== IERvdmVy IERhaXJ5 IE91dHM= IFsv z4A= YnA= IFZhbml0eQ== IFJlY2Fw IEhPVVNF IEZBQ0U= IDQyMg== Njky IEFudGlvY2g= Y29va2Vk IGNvbGxpZGU= IGFwcg== IHNsZWVwZXI= IEphcnZpcw== IGFsdGVybmF0aXZlbHk= IExlYXZlcw== IE1hdw== IGFudGlxdWl0eQ== IEFkaW5pZGE= IGFidXNlcg== UG9rw6ltb24= IGFzc29ydGVk IFJldmlzaW9u IFBpYW5v IEdpZGVvbg== T2NlYW4= IHNhbG9u IGJ1c3RsaW5n b2duaXRpdmU= IFJhaG1hbg== IHdhaXRlcg== IHByZXNldHM= IE9zaA== IEdIQw== b3BlcmF0b3I= IHJlcHRpbGVz IDQxMw== IEdhcnI= IENoYWs= IGhhc2hlcw== IGZhaWxpbmdz IGZvbGtsb3Jl IGFibA== IENlbmE= IE1hY0FydGh1cg== IENPVVJU IHBlcmlwaGVyeQ== YXBwZXJz IHJlY2tvbmVk IEluZmx1 IENFVA== IDM3Mg== IERlZmluaXRpdmU= YXNzYXVsdA== NDIx IHJlc2Vydm9pcnM= IGRpdmVz IENvaWw= REFR IHZpdmlkbHk= IFJK IEJlbGxldg== IGVjbGVjdGlj IFNob3dkb3du IEtN aXBlZA== cmVldGluZ3M= IEFzdWth TGliZXJhbA== IM+E IGJ5c3RhbmRlcnM= IEdvb2R3aW4= dWtvbmc= U2l0 IFRyZW0= IGNyaW1pbmFsbHk= IENpcmN1cw== Y2hyb21l ODg3 IG5hbm9w IE9iaQ== IExPVw== b2do IEF1dGhvcnM= b2J5bA== VXJiYW4= IHRp IFdlaXI= dHJhcA== YWd5 IHBhcmVudGhlc2Vz IG91dG51bWJlcmVk IGNvdW50ZXJwcm9kdWN0aXZl IFRvYmlhcw== dWJpcw== UGFyc2Vy U1RBUg== IHN5bmFwdGlj IEdlYXJz IGhpYmVy IGRlYnVua2Vk IGV4YWx0ZWQ= YXdhdHRz SE9V Q2h1cmNo IFBpeGll IFVyaQ== IEZvcm1hdGlvbg== IFByZWRpY3Rpb24= Q0VP IHRocm90dA== IEJyaXRhbm4= IE1hZGFnYXNjYXI= 64s= IGJpbGxib2FyZHM= IFJQR3M= IEJlZXM= Y29tcGxldGVseQ== RklM IGRvZXNudA== IEdyZWVuYmVyZw== cmV5cw== IHNsaW5n IGVtcHRpZWQ= IFBpeGFy IERoYXJtYQ== bHVjaw== aW5ndWlzaGVk IGVuZG90 IGJhYnlz MDU5 Y2hlc3Q= cmF0cw== IHJpZGRlbg== IGJlZXRsZXM= IGlsbHVtaW5hdGluZw== IGZpY3RpdGlvdXM= IFByb3ZpbmNpYWw= IDc2OA== IHNoZXBoZXJk IFJlbmRlcg== IDE4OTY= Q3Jldw== IG1vbGRlZA== IFhpYW9taQ== IFNwaXJhbA== IGRlbGlt IG9yZ2FuaXNpbmc= IGhvb3Bz IEJlaQ== emhlbg== IGZ1Y2tpbg== IGRlY2Fk IHVuYmlhc2Vk YW1teQ== c3dpbmc= IHNtdWdnbGVk IGtpb3M= IFBFUlNPTg== IElucXVpc2l0b3I= IHNub3d5 IHNjcmFwaW5n IEJ1cmdlc3M= UHRy YWdhbWU= Ulc= IGRyb2lk IEx5cw== IENhc3NhbmRyYQ== SmFjb2I= IDM1NA== IHBhc3R1cmU= IGZyYW5j IFNjb3RjaA== IEVuZHM= IElHRg== ZGVmaW5pdGlvbg== IGh5c3RlcmljYWw= IEJyb3duZQ== Nzcx IG1vYmlsaXphdGlvbg== 5pU= aXF1ZW5lc3M= VGhvcg== IHNwZWFyaGVhZGVk IGVtYnJvaWxlZA== IGNvbmplY3R1cmU= anVkaWNpYWw= Q2hvaWNl IHBhcGVyYmFjaw== UGly IHJlY292ZXJz IFN1cmdl IFNob2d1bg== IFBlZGlhdHJpY3M= 44Gg IHN3ZWVwcw== IExhYm9yYXRvcmllcw== IFBhY2tz YWx1cw== YWRkaW4= IGhlYWRsaWdodHM= Z3Jh RXZpZGVuY2U= Q09MT1I= QWRtaW4= irE= IGNvbmNvY3Q= c3VmZmljaWVudA== IHVubWFya2Vk IHJpY2huZXNz IGRpc3NlcnRhdGlvbg== IHNlYXNvbmluZw== IGdpYg== IE1hZ2Vz dW5jdGlvbnM= IE5pZA== Y2hlYXQ= IFRNWg== Y2l0aXplbnM= IENhdGhvbGljaXNt bmI= IGRpc2VtYmFyaw== IFBST0dSQU0= YXF1ZXM= VHlsZXI= T3Jn IFNsYXk= IE5lcm8= IFRvd25zZW5k SU5UT04= dGVsZQ== IG1lc21lcg== OTAx IGZpcmViYWxs ZXZpZGVuY2U= YWZmaWxpYXRlZA== IEZyZW5jaG1hbg== IEF1Z3VzdGE= MDIx IHNsZWQ= IHJldXNlZA== IEltbXVuaXR5 IHdyZXN0bGU= YXNzZW1ibGVk TWFyaWE= IGd1bnNob3Rz IEJhcmJpZQ== IGNhbm5hYmlub2lkcw== IFRvYXN0 IEtpbmRlcg== SVJE IHJlanV2ZW4= IGdvcmU= IHJ1cHR1cmU= IGJyZWFjaGluZw== IENhcnRvb24= IDQ1NQ== IFBhbGVv NjE0 IHNwZWFycw== IEFtZXM= YWJ1cw== TWFkaXNvbg== R1JPVVA= IGFib3J0ZWQ= eWFo IGZlbG9u IGNhdXNhdGlvbg== IHByZXBhaWQ= IHBpdHRlZA== b3BsYW4= IFNoZWxsZXk= IFJ1c3Nv IFBhZ2Fu IHdpbGxmdWxseQ== IENhbmF2ZXI= dW5kcnVt IFNhbGFyeQ== IEFycGFpbw== cmVhZGVy IFJhdGlvbmFs IE92ZXJzZQ== IENhdXNlcw== ICou IHdvYg== S2VpdGg= IENvbnNlbnQ= bWFuYWM= Nzcz NjIz IGZhdGVmdWw= ZXRpbWVz IHNwaXJpdGVk IER5cw== IGhlZ2Vtb255 IGJveWNvdA== IEVucmlxdWU= ZW1vdXRo IHRpbWVsaW5lcw== IFNhaGFyYQ== IFJlbGF4 IFF1aW5jeQ== IExlc3NvbnM= IEVRVQ== U0VB Tks= IENvc3Rjbw== SW5jcmVhc2U= IG1vdGl2YXRpbmc= IENob25n YW1hcnU= IERpdmlkZQ== IHBlZGlncmVl IFRhc21hbmlh IFByZWx1ZGU= TGFz OTQw NTc0 IGNoYXU= IFNwaWVnZWw= dW5pYw== LS0+ IFBoaWxpcHM= IEthZmth IHVwaGVhdmFs IHNlbnRpbWVudGFs IHNheA== IEFraXJh c2VyaWFs TWF0cml4 IGVsZWN0aW5n IGNvbW1lbnRlcg== IE5lYnVsYQ== cGxldHM= IE5hZHU= IEFkcmVu IGVuc2hy IFJBTkQ= ZmluYW5jaWFs IENseWRl dXRoZXJmb3Jk IHNpZ25hZ2U= IGRlbGluZQ== IHBob3NwaGF0ZQ== cm92ZXJzaWFs ZmFzY2lzdA== IFZhbGw= IEJldGhsZWhlbQ== IGZvcnM= IGVuZ2xpc2g= U29saWQ= TmF0dXJl IHZh IEd1ZXN0cw== IHRhbnRhbA== IGF1dG9pbW11bmU= Ozs7Ozs7Ozs7Ozs7 IFRvdGFsbHk= IE92 IGRlZmVuY2Vz IENvY29udXQ= IHRyYW5xdWls IHBsb3k= IGZsYXZvdXJz IEZsYXNr 44Ko44Or IFdlc3Rvbg== IFZvbHZv ODcw IG1pY3JvcGhvbmVz dmVyYmFs UlBH IGlpaQ== O30= MDI4 IGhlYWRsaW5lZA== IHByaW1lZA== IGhvYXJk IFNoYWQ= IEVOVEVS IHRyaWFuZ3VsYXI= IGNhcGl0 bGlr IEFuY2llbnRz IGxhc2g= IGNvbnZvbA== IGNvbG9uZWw= ZW5lbXk= R3Jh IHB1YnM= dXR0ZXJz IGFzc2lnbnM= IFBlbmV0 IE1vbnN0cm91cw== IEJvd2Vu aWx2ZXI= SGF1bnRlZA== IERpbmc= c3RhcnRlZA== cGxpbg== IGNvbnRhbWluYW50cw== IERPRQ== ZmZlbg== IFRlY2huaWNpYW4= Unk= IHJvYmJlcnM= IGhvdGxpbmU= IEd1YXJkaW9sYQ== IEthdWZtYW4= cm93ZXI= IERyZXNkZW4= IEFscGluZQ== RWxm IGZtdA== IFNhcmQ= dXJzZXM= Z3B1 VW5peA== IHVuZXF1aXZvY2FsbHk= IENpdGl6ZW5zaGlw cXVhZA== bWlyZQ== IFN3ZWVuZXk= QmF0dGVyeQ== NjE1 IHBhbmNha2Vz IG9hdHM= TWFwcw== IENvbnRyYXN0 bWJ1ZHNtYW4= IEVQUw== IHN1YmNvbW1pdHRlZQ== IHNvdXJjaW5n IHNpemluZw== IEJ1ZmZlcg== IE1hbmRhdG9yeQ== IG1vZGVyYXRlcw== IFBhdHRlcm5z IENob2NvYm8= IFphbg== IFNUQVRFUw== IEp1ZGdpbmc= IEluaGVy Kjo= IGJpbA== IFllbg== IGV4aGlsYXI= b2xsb3dlcg== emVycw== IHNudWc= bWF4aW11bQ== IGRlc3BpY2FibGU= IFBBQ0s= IEFubmV4 IHNhcmNhc3RpYw== IGxhdGV4 IHRhbXA= IFNhbw== YmFo IFJldmVyZW5k IENoaW5hdG93bg== IEFVVA== ZG9jdW1lbnRlZA== IEdBQkE= IENhbmFhbg== INmF IGdvdmVybnM= cHJldg== RXNj IEVzdGltYXRlcw== T1NQ IGVuZGVhdm91cg== IENsb3Npbmc= b21ldGltZQ== ZXZlcnlvbmU= IHdvcnNlbg== IHNjYW5uZXJz IGRldmlhdGlvbnM= IFJvYm90aWNz IENvbXB0b24= IHNvcmNlcmVy IGVuZG9nZW5vdXM= IGVtdWxhdGlvbg== IFBpZXJjaW5n IEFwaA== IFNvY2tldA== IGJvdWxk IE9V IEJvcmRlcmxhbmRz IDE4NjM= R29yZG9u IFdUTw== IHJlc3RyaWN0cw== IG1vc2FpYw== IG1lbG9kaWVz 54Q= VGFy IGRpc3Nvbg== IFByb3ZpZGVz IC4uLi4uLg== YmVr RklY IGJyb29t YW5zaGlw RG9jdG9ycw== IG5lcmRz IFJlZ2lvbnM= bmFpc3NhbmNl IG1ldGU= IGNyZXB0 cGxpbmdz IGdpcmxmcmllbmRz a25pdA== aWdlbnQ= b3dl IHVzaGVyZWQ= IEJheg== TW9iaWw= NDM0 IFByZXNlbnRz b3JpZ2lu IGluc29tbmlh IEF1eA== NDM5 IENoaWxp aXJzY2g= R0FNRQ== IGdlc3RhdGlvbg== YWxnaWE= cm9taXNpbmc= JCw= Y3Jvdw== IEluc3BlY3Rpb24= YXRvbWlj UmVsYXRpb25z Sk9ITg== cm9tYW4= IENsb2Nrd29yaw== IEJha3I= bW9uZQ== TUVU IHRoaXJzdHk= IGJj IGZhY3VsdGllcw== UnVt IG51YW5jZQ== IERhcml1cw== cGxldGluZw== ZnRlcnM= ZXRjaHVw UmVnaXN0cmF0aW9u IEtF UmFo IHByZWZlcmVudGlhbA== IExhc2g= IEhI VmFsaWQ= IE5BVg== IHN0YXJ2ZQ== IEdvbmc= enluc2tp IEFjdHJlc3M= IHdpaw== IHVuYWNjb21wYW5pZWQ= bHZs QnJpZGU= QURT IENvbW1hbmRv IFZhdWdobg== V2FsbGV0 IGhvcHBpbmc= IFZpZQ== IGNhdmVhdHM= IGFsYXM= aWZsZWQ= YWJ1c2U= NjYx IGlibg== IGd1bA== IHJvYmJpbmc= dGls SUxB IG1pdGlnYXRpbmc= IGFwdGx5 IHR5cmFudA== IG1pZGRheQ== IEdpbG1vcmU= IERlY2tlcg== IMKnwqc= cGFydGlhbA== RXhhY3RseQ== IHBoZW5vdHlwZQ== IFsrXQ== IFBsZXg= IElwcw== dmVyc2lvbnM= IGVib29r IGNoaWM= Z3Jvc3M= IjoiIn0seyI= IFN1cnByaXNpbmdseQ== TW9yZ2Fu IHJlc2lkdWVz IENvbmZlZGVyYXRpb24= aW5mZWxk IGx5cg== bW9kZXJhdGU= IHBlcnBlbmRpY3VsYXI= Vks= IHN5bmNocm9uaXplZA== IHJlZnJlc2hlZA== IGFkb3Jl IFRvcm1lbnQ= b2xpbmE= IDI2MDA= SXRlbVRyYWNrZXI= IHBpZXM= IEZBVA== IFJIUA== MDQ4 IFJFU1A= IEJK YWxsb3dz UGFuZA== IHVud2VsY29tZQ== IFZvYw== IEJhc3RhcmQ= IE9X IExBUg== IEhlYWxlcg== RW52aXJvbm1lbnRhbA== IEtlbnlhbg== IFRyYW5jZQ== IFBhdHM= IGFsaWFzZXM= IEdhcmZpZWxk IGNhbXBhaWduZXI= IGFkdmFuY2VtZW50cw== IE9raW5hd2E= IENvaA== b3dza3k= IHN0YXJ2ZWQ= IHNpemVhYmxl IDotKQ== IG1STkE= IHN1c3BlbnNpb25z aXN0YXI= U2NvdGxhbmQ= UHJpbg== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IDUwMg== IHRlYXNwb29ucw== IDEwNTA= IGNvZXJjaXZl IE1hc29uaWM= ZWRkZWQ= IFBhc3Nlbmdlcg== IGxhdHQ= IGJyYWNlcw== IFN0ZWFs IE5ZVA== IEthdHM= IENlbGVzdA== YWV6 VHU= IENvdWx0ZXI= 8J+Y RmxpY2ty IFdpbG1pbmd0b24= aXRocw== Kys7 IHZlbmRpbmc= IG5lZ3Jv IFBoaQ== IFllbGxvd3N0b25l Q2FsbGJhY2s= IHNoYW1wb28= IFNoYWRlcw== d2F0 IHN1cGVyaHVtYW4= IHJpZGljdWxlZA== IGhvbGllc3Q= b21ibw== IGludGVybnM= IGhvbmU= IFBhcmFndQ== VVJJ IGRhbmdsaW5n 44K7 c292 aWN0aW9uYWw= YXZhaWxhYmlsaXR5 IHJldm9jYXRpb24= IGRvdw== aW5pYw== IFRIRUlS IGlzbw== IG91dGluZ3M= IExldGhhbA== ICkpKQ== IGluYWNjdXI= IG91dGxhbmRpc2g= IGFudXM= bGV0aWNv aWRvbg== bG9s IHVucmVndWxhdGVk IHN1Y2N1bWJlZA== IGN1ZmY= IFdhc3RlbGFuZA== bGV0YWw= IHN1YnN0cg== IGNvZmZlcnM= IGF1dG9tYWtlcnM= b3Zp IFh1ZQ== IERheXRvbmE= IGphcnJpbmc= IGZ1bWVz IGRpc2JhbmRlZA== emlr aXR0b24= IHN0cmlraW5nbHk= IHNwb3Jlcw== QWRhcHRlcg== Lik6 IEx5bmRvbg== aXZhbHJ5 IG9yYWxseQ== IHR1bXVsdHVvdXM= IGRpc3BsZWFzdXJl IGNvbmVz b3JyZWN0 IGFwcGVhc2U= IGRlcmJ5 IFRyaXBvbGk= IEFsZXNz IHBva2Vk IEd1aWx0eQ== dlA= RW5vdWdo IG9yaWdpbmFscw== Njk5 IHJhYmJp IHByb3ZlcmJpYWw= IHBvc3Rwb25l ZWxvcGU= IE1pc3R5 IHN0YWZmZWQ= IFVuZW1wbG95bWVudA== cmVkaXRhcnk= IGRpbGlnZW50 cmVjb21t bWVhc3VyZXM= YXNpbg== ODI1 IHBvbmRz IG1tb2w= IFNBUg== IENBUkU= IDM3MQ== IGNsZW5jaGVk IENvcnNhaXI= IGNhcmljYXR1cmU= em4= YXR0YWNo IFNjaHJv c3BlYWs= cGFpbnRlZA== IFN1Yw== IEVOVA== IGNlbGx1bA== IFBhaWQ= ZGlhZ24= V0hFUkU= IHRleHRlZA== QmFybg== IHJldHJhY3RlZA== IFJlZmVycmVk U2F2 IHVwa2VlcA== IHdvcmtwbGFjZXM= IFRva2Vucw== IGFtcGxpZnk= Y2xpbmljYWw= IG11bHRpYw== bWJlcmc= IGNvbnZvbHV0ZWQ= UmVnaW9u NTY1 IFRvcGlj IHNuYWls IHNhbGluZQ== IGluc3VycmVjdGlvbg== IFBldHI= Zm9ydHM= QkFU IE5hdmFqbw== IHJ1ZGltZW50YXJ5 IExha3No T05ET04= TWVhc3VyZQ== IHRyYW5zZm9ybWVy IEdvZGRhcmQ= IGNvaW5jaWRlcw== aXJpbg== UmV4 IEJvaw== cXVpdA== IHNob3RndW5z IHByb2xldGFyaWFu IHNjb3Jw IEFkYQ== NTE0 IHNsYW5kZXI= cmVjb3JkZWQ= IGVtYmVsbA== cmlzb21l IGFwb2xvZ2l6aW5n IE11bGNhaXI= IEdpYnJhbHRhcg== Q2xh IGFsbG90 IEF0dGVudGlvbg== IDQzMw== bGVhdmU= IHdoaW5l IElzc2E= IEZhdXN0 IEJhcnJvbg== aGVueQ== IHZpY3RpbWl6ZWQ= SmV3cw== IG51cnR1cmluZw== ZXR0ZWw= V2luZ2Vk IFN1YnRsZQ== IGZsYXZvcmZ1bA== IFJlcHM= ZW5nZWQ= Y2FsbGJhY2s= IGRpcmVjdGlvbmFs IGNsYXNw IERpcmVjdGlvbnM= cGxhbmV0 aWN1bHR1cmU= SGVscGVy aWNpb24= YWNpYQ== IOelng== IHN1cmdlcw== IGNhbm9l IFByZW1pZXJzaGlw YmVlbg== IGRlZmllZA== IFRyb29wZXI= IHRyaXBvZA== IGdhc3A= IEV1cGg= IEFkcw== dmVybmlnaHQ= aGlnaGx5 Um9sZQ== IGVudGFuZ2xlZA== IFplaXQ= NjE4 IFJ1c3R5 IGhhdmVucw== IFZhdWdoYW4= SEFFTA== IFNFUlZJQ0U= Lyw= IHN0cmlja2Vu IGRlbHVzaW9ucw== IGJpcw== IEhhZg== IGdyYXRpZmljYXRpb24= IGVudGljaW5n VU5DSA== QWRhbXM= IE9MRUQ= IEJlZXRsZQ== IDE4OTk= IFNPRlRXQVJF YXRlZ29y Vkw= IFRvdGVt IEdhdG9ycw== QVRVUkVT IGltcGVkYW5jZQ== UmVnaXN0ZXJlZA== IENhcnk= IEFlcmlhbA== b25uZQ== ZW5pdW0= IGRyZWQ= IEJlZw== IGNvbmN1cnJlbnRseQ== IHN1cGVycG93ZXI= IFhhbg== amV3 aW1lc3Rlcg== IERpY2tpbnNvbg== 4pSB Rmxh IHByZWU= IFJvbGxpbnM= qbbm IGRlbm9taW5hdGlvbg== IExhbmE= NTE2 IGluY2l0aW5n c2NyaWJlZA== anVyaWVz IFdvbmRlcnM= YXBwcm94aW1hdGVseQ== IHN1c3BlbmRpbmc= IG1vdW50YWlub3Vz IExhdWdo b2lkYWw= TnM= RGV0ZWN0 KT0= IEx1dGhvcg== IFNjaHdhcnplbmVnZ2Vy IE11bGxlcg== IERldmk= ZWN5Y2xl SmFy NjEz IExvbmdo QmFo IFNQT1JUUw== bnc= IHJlZmluZW1lbnQ= IHdhdGVyd2F5cw== IGRpbmVy QmxhZGU= Njgz RmFj IGluaXRpYWxz IHJvZw== IHBhcmFub3JtYWw= QlVU IFso IFN3YW5zb24= IE1lc2g= 4pas SW1wcm92ZQ== IFJhZGlhdGlvbg== IEVzdGhlcg== IEVzaw== IEFseQ== aWt5 IGlycmFk IEJ1Y2tpbmdoYW0= IHJlZmlsbA== IC5f UmVwZQ== Q09OQ0xVUw== IGRpZmZlcmVudGlhdGVk IGNoaXJvcA== IEF0a2lucw== UGF0dGVybg== IGV4Y2lzZQ== IGNhYmFs TlNB IFNUQQ== IFNJTA== IFBhcmFseQ== IHJ5ZQ== IEhvd2VsbA== IENvdW50ZG93bg== bmVzc2Vz YWx5c2Vk IHJlc2l6ZQ== 44K9 IGJ1ZGdldGFyeQ== IFN0cmFz d2FuZw== IGFwaWVjZQ== IHByZWNpbmN0cw== IHBlYWNo IHNreWxpbmU= IDM1Mw== cG9wdWxhcg== QXBwZWFyYW5jZXM= IE1lY2hhbmljcw== IERldk9ubGluZQ== U3VsbGl2YW4= WmVu IHB1 b3BvbGlz NTQ0 IGRlZm9ybQ== IGNvdW50ZXJhY3Q= IExhbmdl IDQxNw== Q29uc29sZQ== Nzc0 IG5vZGRpbmc= IHBvcHVsaXNt IGhlcA== IGNvdW5zZWxsaW5n Y29tcGxpYW5jZQ== VUZG IHVuZGVuaWFibHk= IHJhaWxpbmc= IEhvcm93aXR6 IFNpbW9uZQ== IEJ1bmdpZQ== IGFr IFRhbGtz eGZm Zmxha2U= Q3Jhc2g= IHN3ZWF0eQ== IGJhbnF1ZXQ= IE9GRklD IGludmVudGl2ZQ== IGFzdHJvbm9tZXI= IFN0YW1mb3Jk IFNjYXJl IEdSRUVO b2xpY2l0ZWQ= IHJ1c2hlcg== IGNlbnRyaXN0 aWdodGluZw== IHN1YmNsYXNz IGRpc2F2 IGRlZnVuZA== IE5hbnRv b2NpYXRl bWFzdA== IHBhY2lm IG1lbmQ= ZWVycw== aW1taWdyYXRpb24= RVNTSU9O IG51bWJlcmluZw== IGxhdWdoYWJsZQ== IEVuZGVk dmlhdGlvbg== ZW1hcms= UGl0dA== IG1ldGljdWxvdXM= IExG IGNvbmdyYXR1bGF0ZWQ= IEJpcmNo IHN3YXllZA== IHNlbWlmaW5hbHM= IGh1bWFua2luZA== bWF0dGVy IEVxdWlw b3BhdXNhbA== U2FpZA== IExheW91dA== IHZvaWNpbmc= IHRodWc= IHBvcm5vZ3JhcGhpYw== SVBT IG1vYW5pbmc= IGdyaWV2YW5jZQ== IGNvbmZlc3Npb25z ZXNjYWw= VEVYVFVSRQ== QXV0aGVudA== b3NhdXJ1cw== UHVyY2hhc2U= IHJlbGVnYXRpb24= YWx0ZXI= IMKgwqA= IHJpZGRsZWQ= IG9ncmU= IExvd2VsbA== T2NjdXA= RWF0 IEh5ZGVy IEFkdmlzZXI= Q29tbWVyY2U= SHVudA== IE9ydGg= IENvbXBldGl0aXZl IENMQQ== Q0RD IHNhbGFkcw== Rmxl IGluZHVzdHJpYWxpemVk YCw= IE9XTg== IGJlY2s= IFBhcnRpY3VsYXJseQ== b3VidA== IG1N IEh1c3NhaW4= IENoZW5uYWk= IDkyMA== IGFwcG9pbnRpbmc= IEN1bGxlbg== LCwsLCwsLCw= IHBvcmVz dmVyaWZpZWQ= IGJpb2NoZW1pY2Fs ZW1hdGU= IGNvd2FyZGx5 IEhlbHNpbmtp IEV0aGlvcGlhbg== U09VUkNF RVJD ZXN0cm8= IGJpb3RlY2g= IFNvdXI= IGJyZXdlcg== Qmxvb21iZXJn IGludGVuc2lmeQ== R2xhc3M= YW5jbw== IEZEUg== Z3JlU1FM IEZpcmVz qbbmpbU= ZWNv MTAwMQ== IEhvbWVsZXNz IGluc3RhbnRhbmVvdXM= IEhhc3Rl aWdlbA== RGlhbW9uZA== IHBhdmluZw== IGxhbmRmaWxs IGRhZHM= aG91bg== Ol0= IGluY2VuZGlhcnk= IExpdmluZ3N0b24= IEhpbGJlcnQ= IENoZWNrcw== c3R5bGVz aW5hdG9ycw== IENsaXZl cGhyaW5l IGNoaW1wYW56ZWVz IHBhbGw= IEpN IEFhZGhhYXI= 8J0= IGFjaGlldmFibGU= ZGlzYWJsZWQ= UEVU T09PT09PT08= TW90 IGludGFuZ2libGU= IGJhbGxldA== IFdlYnM= IEVzdGltYXRlZA== RWZmZWN0cw== IGJhaWxlZA== Sm9zaHVh IHR1cmJ1bGVuY2U= IG9jY3VwYW50 IERheWxpZ2h0 IDM2MQ== bWVldA== IHN0YXRpY2FsbHk= IG9ubG9vaw== IGtp aWxsZWdhbA== IHZlbHZldA== IGRlaHlkcmF0aW9u IGFjcXVpZXM= IFJleg== YWt1cmE= IFVwdG9u YXRybw== IGluY29tcHJlaGVuc2libGU= IGJhY2tkb29y IFJoaW5v NzI3 IG1hdGhz KSs= IGhlcmVzeQ== IGRm IFJvY2hl IEx5ZGlh IHBhbmNyZWF0 cmVwbHk= YXJyZWxs IHNvbGljaXRhdGlvbg== IGNpcmNhZGlhbg== QklQ IGZvcmF5 IGNyeXB0aWM= aXp1 aW1lbw== IFRvbWF0bw== IEhvbXM= ZXhhbWluYXRpb24= IHF1YXJyeQ== IFZhbGlhbnQ= IEplcmljaG8= IElOQ0xVRA== IDE4NDA= NTE5 IHJlc2lzdHM= IHNuYXBzaG90cw== IFNwdXI= IEFudGlxdQ== TG9naW4= IGJlc3RzZWxsaW5n IGFudGlj IFN1dGhlcmxhbmQ= 44Ki44Or IH4v IFBhcm0= 6IM= UGFnZXM= aW50ZW5zaXR5 IGltbW9iaWw= IDE4NjU= enpv IG5pZnR5 IGZlbnRhbnls IFByZXNlcnZhdGlvbg== b3BoZW4= IGRhcnRz IERpbm9zYXVy cG9pbnRlcnM= IFJpdGU= c3VnZ2VzdA== YXdhcmVuZXNz IFNoZXJpZGFu IHN0YW5jZXM= IHNvcmNlcnk= IHBlcmp1cnk= IE5pa29sYQ== aWV2ZXI= IGZpYW5jZQ== IEpvcmRhbmlhbg== IEJhbGxvb24= IG5hYg== IGti IGh1bWFuaXRpZXM= IFRhbmFrYQ== aGlsbGFyeQ== IGNvbnN1bHRhbmN5 IFp1Yg== IHJlbWlzc2lvbg== IGNvbmZpZA== Q0hR IEZ1Zw== IGltcHJvdmlz WWVw L18= IHVud2lsbGluZ25lc3M= IHBvcnRmb2xpb3M= MDU1 IEluc3RydWN0b3I= YWltYW4= IGNsYWltYW50cw== TWJwcw== IEJ5ZQ== cmVjZWl2ZWQ= VHdlZXQ= IGluZGVtbg== cml6 YW1hcmE= TmF0 IGV2YWx1YXRlcw== IEx1cg== ZXBhZA== Rk9Y IFRocm8= IHJ1c3R5 IGJlZHJvY2s= IE9wcmFo SkI= IG1hbmlwdWxhdGl2ZQ== IHdpbGxmdWw= IHJlbGFwc2U= IGV4dGFudA== VGhlbWU= U2Vuc29y IFN0YWJpbGl0eQ== Z292ZXJu IHBvcHB5 IGtuYWNr IGluc3VsYXRlZA== IFRpbGU= IEV4dHJlbQ== IHVudG9sZA== IGNvbnZlcmdl IHJlZnVlbA== aWdyb3Vw IGRpc3RvcnRpb25z IHJhdmFnZWQ= IG1lY2hhbmljYWxseQ== IFJlaWxseQ== IE5vc2U= IEluY2FybmF0aW9u IEJlY2t5 YWJibGluZw== IHRhY28= IHJha2U= IG1lbGFuY2hvbHk= IGlsbHVzdHJpb3Vz IERhcnRtb3V0aA== R3VpZGU= IFJhemVy IEJlbno= VWx0aW1hdGU= IFN1cnByaXNl IHBhZ2VhbnQ= b2ZmZXI= V2hvZXZlcg== IHdpc2Vy IGNoZW1pc3Q= IEhFTEw= IEJ1bGs= IHBsdXRvbml1bQ== IENPVkVS 1rw= ZmFpbGVk IHRpcmVsZXNzbHk= IGluZmVydGlsaXR5 IFRyaWRlbnQ= IFNob3d0aW1l IENpdg== VmljZQ== cmVxdWlyZXM= aXR0YW5jZQ== IHVuY29udHJvbGxlZA== aW50ZXJlc3Rpbmc= NTYx IGlubm92YXRl YXRlZ2lj TGll IFNlbGxpbmc= VWw= IHNhdmlvcg== IFRvc2g= IHN3YXN0 UEFTUw== IHJpbms= IGNhcmRpbw== IElybw== dWRp IHZhbnRhZ2U= IHZhbnM= IE5pw7Fv Kz0= IHByb3BhZ2F0ZQ== PD8= IG1ldGhvZG9sb2dpY2Fs MjA0Mzk= IHRyaWdseWNlcg== IGluZ3JhaW5lZA== IEFubm90YXRpb25z YXJyYW50ZWQ= NjE3 IFNvZGl1bQ== IEFBQw== dGVjaG5pY2Fs bXVsdGlwbA== IDM3Mw== 5Ys= IGRlY2lzaXZlbHk= IGJvb3N0ZXJz IGRlc3NlcnRz IEdyZW5hZGU= IHRlc3RpZnlpbmc= IFNjdWxseQ== SURz IGxvY2tkb3du IFNjaGVy IFLDqQ== IFdoaXRtYW4= IFJhbXNheQ== cmVtb3Rl IGhpa2Vycw== IEh5dW5kYWk= IGNvbnNjaWVudGlvdXM= IGNsZXJpY3M= IFNpYmVyaWFu dXRp aXNidXJ5 IHJlbGF5ZWQ= IHF1YXJ0eg== IENCSQ== c2Vla2Vycw== dWxsYQ== IHdlbGRpbmc= IFNoYWw= YmxlYWNoZXI= VGFp IFNhbXNvbg== IHR1bWJsZQ== IEludmVzdG9y IHN1YmNvbnRyYWN0 IFNoaW5yYQ== b3dpY3o= amFuZHJv ZGFk IHRlcm1pbmF0aW5n IE5ldXJhbA== 5Luj IGxlYWthZ2U= IE1pZGxhbmRz IENhdWNhc3Vz 7ZU= Y2l0 bGxhbg== aXZhYmx5 IEFsYmlvbg== IDQ1Nw== IHJlZ2lzdHJhdGlvbnM= IGNvbXJhZGU= IGNsaXBib2FyZA== MDQ3 IGRpc2NvdXJhZ2luZw== IE9vcHM= QWRhcHQ= IGVtcGF0aA== bnY= IFBST1Q= IERvbm4= IFBheA== IEJheWVy dGlz U3F1YXJl IGZvb3RwcmludHM= cGFydGljaXA= IENoaWxlYW4= QnJlbmQ= aW5kdWNpbmc= TWFnbg== IGNsdWJob3VzZQ== IE1hZ251bQ== IGVuY2FtcA== IEV0aG5pYw== dWNoYQ== ZXJleQ== IHdhdGVyZWQ= IENhbGFpcw== IGNvbXBsZXhpb24= IHNlY3Rz IHJlbnRlcnM= IGJyYXM= b8SfYW4= VGltZW91dA== TWFuYWdlbWVudA== IGluZm9ncmFwaGlj UG9rZW1vbg== Q2xhcg== IGxvY2FsaXR5 IGZsb3Jh YXNlbA== UG9udA== IHBvcHVsYXRl IE9uZw== IHN1YnNpc3RlbmNl IGF1Y3Rpb25z IE1jQXVsaWZmZQ== IExPT0s= YnJpbmdlcg== IHRpdGFu IG1hbmlmb2xk IOKXjw== IGNhbGlicmF0ZWQ= IGNhbGlwaGF0ZQ== IFNIRQ== IENvbW1pc3Npb25lcnM= Y2VpdmFibGU= amM= V2lubmVy NTI0 IGNvbmRvbmU= T3RoZXJ3aXNl IHBpbGluZw== IGVtYm9keQ== IENyaW1lYW4= dXRpY3M= IEV4aGliaXRpb24= IDQyNg== ZWVyaW5n IHZ5aW5n IEhVR0U= Kj0t IHByaW5jaXBsZWQ= 4KY= IHF1aXJrcw== IEVkaXRvcnM= cHV0aW5n R0VT IEZUQQ== 4KS+ YWRkb24= IEhBTQ== IEZyaWV6YQ== V29tYW4= LiQ= IGNyaWI= IEhlcm9k IHRpbWVycw== IFNwYWNlcw== IE1hY2ludG9zaA== YXRha2E= IGdsaWRl IHNtZWxsaW5n IEJBTA== IHVuc3U= IGNvbmRvcw== IGJpY3ljbA== IFJldml2YWw= NTUz IGp1Z2dsaW5n SHVn IEthcmRhc2hpYW4= IEJhbGthbnM= bXVsdGlwbGU= IG51dHJpdGlvdXM= b2NyeQ== MTkwMA== IGludGVncmF0ZXM= IGFkam9pbmluZw== IEZvbGRlcg== cm9sbG1lbnQ= dmVuaWVudA== IHViZXI= eWk= IHdoaWZm IEp1dmVu IEJvcm91Z2g= bmV0dGU= IGJpbGluZ3VhbA== IFNwYXJrcw== cGh0aGFs bWFudWZhY3Q= IHRvdXRpbmc= IFBISQ== S2VlZmU= UmV3YXJk IGluZmFsbA== IFRlbXBlcg== dHlwaWNhbGx5 IE5pa29s IHJlZ3VsYXJz IHBzZXVkb255bQ== IGV4aGliaXRpb25z IGJsYXN0ZXI= IDQwOQ== d2FybWluZw== IHJldmVyYmVy IHJlY2lwcm9jYWw= IDY3MA== aXBpZW50 YmV0dA== IEJlZ2lucw== IGl0Y2hpbmc= IFBoYXI= QXNzdW1pbmc= IGVtaXR0aW5n IE1MRw== IGJpcnRocGxhY2U= IHRhdW50 IEx1ZmZ5 IEFtaXQ= IGNpcmNsZWQ= IE5vc3Q= ZW5uZXR0 IGRlZm9yZXN0YXRpb24= IEhpc3RvcmljYWxseQ== IEV2ZXJ5ZGF5 IG92ZXJ0YWtl Nzky IG51bg== IEx1Y2lh IGFjY29tcGFuaWVz IFNlZWtpbmc= IFRyYXNo YW5pc20= Um9ndWU= IG5vcnRod2VzdGVybg== IFN1cHBsZW1lbnRhbA== IE5ZVQ== IEZSSQ== IFNhdGlzZg== eGVz NTE3 IHJlYXNzdXJlZA== IHNwb3JhZGlj IDcwMQ== IG1lZGlhbA== IGNhbm5hYmlub2lk IGJhcmJhcmlj IGVwaXM= IEV4cGxvc2l2ZQ== IERvdWdo IHVuc29sdmVk U3VwcG9ydGVk IGFja25vd2xlZGdtZW50 c3Bhd24= IGtpdGNoZW5z IC09 dGFsa2luZw== aWNpc3Q= IFBlZ2FzdXM= IFBTVQ== IHBob3Rvbg== IEF1dGhlbnRpY2F0aW9u Ukc= QCMm NzYy IENsYWly IGRpYXBlcg== IGJyaXN0 IFByb3NlY3V0b3Jz IEplbQ== NjI4 IEV2ZXJ5d2hlcmU= IEplYW5uZQ== ZXF1YWxpdHk= 44Op44Oz b2JqZWN0cw== IFBlbGljYW5z IDM5Mg== IGJsdQ== Ynlz IEFnbw== IGluc3RydWN0aW9uYWw= IGRpc2NyaW1pbmF0aW5n IFRSQU4= IENvcm5lbA== YWdvcw== IHR5cmU= IGFzcGlyYXRpb24= IEJyaWRnZXdhdGVy Ijot ISIu IEVucw== IENvY28= UGll IGRldGFjaA== IENvdWNo IHBoeXNpcXVl IE9jY3VwYXRpb25z b3Njb3BpYw== ZW5vdWdo QnV6eg== QXBwZWFyYW5jZQ== WVA= IHJhY2Vy IGNvbXBsaWNpdHk= cnBt VG95 IGludGVycnVwdHM= IENhdGFseXN0 IHV0aWxpdGFyaWFu aW1wYWN0 IHNwYWdoZXR0aQ== IHBvcm91cw== IGVzdGVlbWVk IGluY2luZXI= IElPQw== NzQ4 IGVzcHJlc3Nv IFNtaWxl YWJpbGlh NjM1 IG1hdGhlbWF0aWNpYW4= IDQyNA== IEtM IEhJUA== IG92ZXJoZWFyZA== IFR1ZA== IFRlYw== IHF1aXp6 IGZsYXR0ZXJpbmc= IGNvbm4= 4oCO IGF0dGFjaGVz IFJPUw== IEFDUw== IHRjcA== IFNoYW1l c2tpcA== cmVzcGVjdGVk IFRyaW5pZGFk Z3JhaW4= IGZvb3Rob2xk IFVuY2hhcnRlZA== IEp1bGlv emw= YXZvcmVk IEFueGlldHk= ZXJyb3Jz IENlbnRhdXJp aXRzY2g= RGFkZHk= IGNsdXRjaGluZw== IEltcGxlbWVudA== IEd1dGllcnJleg== IDc2MA== IHRlbGVwb3J0YXRpb24= ZW5kcmE= IHJldmVyc2libGU= c3Ryb3M= QWR2ZW50dXJl MDgz IGxpYmVyYXRpbmc= IGFzcGhhbHQ= IFNwZW5k QVJEUw== aW1zeQ== UFJFUw== IEVtZXJnaW5n IHdpbGRmaXJlcw== IHRlY2hub2xvZ2ljYWxseQ== IGVtaXRz IEFSVElDTEU= IGlycmVndWxhcml0aWVz IGNoZXJpc2g= 54mI IHN0aW5r IFJvc3Q= RWNvbm9taWM= IGNvdWdoaW5n IE1jQ2Fubg== cHJvcGVydGllcw== aWxhbnRybw== IHJlbmVnb3Rp VHJhbnNsYXRpb24= IGlucXVlc3Q= IEdyYXBl b290ZXJz Z3Vp IFN3b3Jkc21hbg== YWNlYWU= aGl0dGluZw== IHJj IGV4ZXJ0ZWQ= IFNBUA== aXRlbnQ= IHBlcmlsb3Vz IG9ic2N1cml0eQ== IGFzc2Fzc2luYXRl IGFib3JpZ2luYWw= IHJlc2N1aW5n IFNoYXR0ZXJlZA== bG9ja2luZw== YWxsaW9u Q2hhbmdpbmc= IEhhcnJpbmd0b24= IEJvcmQ= IEFmZ2hhbnM= SmFtaWU= YXJldHo= IEF1Z3VzdHVz IDM4Ng== ODMw IGpvZw== b2tpbmdseQ== VHJpZ2dlcg== IEhPUg== U3RhdGlzdGljcw== IHZpZXdlcnNoaXA= IGFkZGl0aXZlcw== aHVy IG1heGltaXppbmc= IFJvdmU= IExvdWll IEJ1Y2tldA== IENIUklTVA== b3VzZWw= IHN0cmVha3M= aXJ0ZWQ= IHRlcnQ= IGNvbG9uaWFsaXNt IGJ1cnlpbmc= eWs= Q29uZGl0aW9u IERQUks= QnlJZA== NzUx 4pe8 IHdvcnJpc29tZQ== IHZvY2F0aW9uYWw= c2xpY2U= IHNhaWxz IENvcnJlY3Rpb25hbA== OTU0 IHR1bA== S2lk bHVzdGVy IGZhbWlsaWFs IFNwaXQ= IEVwaXNjb3BhbA== U3BlY2lmaWNhbGx5 IFZvbGNhbm8= cnVucw== cXM= IHZldHRlZA== IGNyYW1tZWQ= dHJvcA== aGVyZXI= VGhhbmtmdWxseQ== IHBlcmN1c3Npb24= IG9yYW5nZXM= IHJvdW5kdXA= IDQ5OQ== eGlvdXM= Q2hhcmFjdGVycw== IFppb25pc20= IFJhbw== w5vDmw== V0Y= IHVuaW50ZW50aW9uYWw= T05FWQ== R3JhYg== Q29tbWVyY2lhbA== IGdsdXRhbWF0ZQ== IE1jS2VubmE= cnVjaWF0aW5n bmluZ3Rvbg== aWh1 Q2hhbg== IFN3YXA= IGxlYWZsZXRz IGZ1bmN0aW9uYWxseQ== ZXJvdXM= RmFybQ== IGNhbG9yaWM= IExpdGVyYWxseQ== Y29uY2VydA== IHNoZW5hbg== IHJlcGFpZA== ZXllcw== IGJhc2hpbmc= IEdvcmdl IGNvbGxhYm9yYXRpb25z IHVuYWNjb3VudA== aXRjaGll IHRlYW13b3Jr cHBlbGlu IHBpcGluZw== IG1pbmNlZA== IGRpYW0= cmllZw== IG1hc2NhcmE= IHN1Y2tlcg== IE1vb25z QXBwcw== IFBlY2s= IHBlcnY= IEZsb2F0 b2xleQ== IE5pc2g= aW1pemU= IGFyb21hdGlj dWlu ZW5kaXNo IS8= IEJpY3ljbGU= IEFTSUM= aWxlZ2Vk IFF1YWRybw== aW9zeW4= IGxvY2tvdXQ= IFdpbms= U1BFQw== QXR0ZW1wdHM= IHNlZWRlZA== cmVkbw== aWFzaXM= IHNuYWc= 44OV44Kp 44K2 IGdyb3VuZGluZw== IHJlbGlldmVy IGZyaXZvbG91cw== IEdpZnRz IEZhY2Vz RXNwZWNpYWxseQ== IG1pY3JvYmlvbWU= aW1hZw== IFNjaGw= IFBsZXM= IEJsZWFjaA== IElyd2lu IEVhdG9u IERpc2NpcGxl IG11bHRpcGxpY2F0aW9u IGNvZXJjZWQ= IDQxOQ== c3Ro RXZpbA== Qm9tYg== IGV4b3Jj IHN0YWdnZXJlZA== TEVTUw== IGluZXJ0aWE= IEVESVQ= IGdvYg== VHJhZGl0aW9uYWw= IGNsYXNzeQ== TGVhcnk= IFBBR0U= eXJz IHRyYW5zcG9ydGVy IG1hdHVyZWQ= IGhpamFi IGJpb21l V2hlcmVhcw== IGV4dGVybWluYXRpb24= IFR1ZXM= IFRha2VydQ== IEF1ZHJleQ== ZXJpYWw= IEFkZW4= YWZmbGVz IG5hcmNpc3Npc3RpYw== IEJhaXJk VVRG SXJl IENvbm5pZQ== Q2hhbXA= IHdoaXNwZXJpbmc= IEhhdHQ= REs= IGRpc2luZmVjdA== IGRlZHVjdGVk IHBhcnRha2U= IGRvd25ncmFkZQ== IEVzcG9ydHM= IENvbnRpbnVpbmc= IGRlbW9jcmF0aWNhbGx5 aWNyb2JpYWw= aXR0YQ== IGxpbWVzdG9uZQ== IGV4ZW1wdGVk IEZyZW56eQ== SGVybQ== NzI4 IGZsZWRnbGluZw== TWV0YQ== NzY1NjE= Njkz JTo= d2FrZQ== NTI2 IERpc2NpcGxpbmU= IHZpcmdpbml0eQ== IExlZ2lvbnM= IEZyYW5raWU= aW50ZW50 IHJlc3Ryb29tcw== IFJvdXRlcg== ZGFx IG9iamVjdGlvbmFibGU= 4oaR d2Fyaw== IFJhaHVs Z2Fpbg== YWN0aXZhdGlvbg== YWJzb2x1dGU= IEFjY2Vzc2Vk IDI0MDA= b2dnbGVz IHNlY29uZGx5 IERFRkVOU0U= IHBvc3RhZ2U= d3JhcHBlcg== c2hhcnA= NzI5 IGNvbW11bmljYXRlcw== IGFkZG9u IE1pbGl0aWE= SG9uZw== IHNsdW1wZWQ= IEpQRUc= IEljYXI= YWRpc2g= Njgx IG1hamVzdHk= IFdvbGZnYW5n IEVsYXN0aWM= dXBlcg== IHZpeg== IHVuY29uc2Npb3VzbHk= IFNURA== IFNhc3M= IGZsb3dlcmluZw== IEhlbGlj IERyYXBlcg== IEFtYXRldXI= IG1hbnVyZQ== IGRpc2luZ2Vu IExlaQ== YnJpbmc= OTQ5 IGluaGliaXRlZA== IGhlYWRxdWFydGVyZWQ= IGVuaWdtYXRpYw== 77+977+977+9 IHJlZHJlc3M= Ukg= IHJhdHRsZWQ= IGRpY3Rpb24= bGlv IFRCQQ== IFNOQVA= Q2FsbGluZw== IGZhc2Npc3Rz IERvdmU= aWV3aWN6 MDM2 IGNvYXN0cw== IFJlY3Q= ICld TG90 NjI5 IFNFTQ== IFBldGVyc2Vu IEV4cGxhaW4= IEJvYXJkcw== IEJlem9z IEpvdXJuYWxz IDIwMjQ= cGFyc2Vy IG1pc3RydXN0 IGdyYXRl IExvY2tlZA== Ym9h U2FpbnQ= Z2FtaW5n IHZvd2Vs aW5hdGVseQ== Ymxvdw== QWxsYWg= IHVubWF0Y2hlZA== IGJvcmRlcmluZw== IEV4cGVuZA== bnI= T3JhY2xl cm91Y2g= IGNvbnRpZ3VvdXM= YWN1cw== IGRpc3RyYXVnaHQ= NTgx IGFuYXRvbWljYWw= T1g= YXBpeGVs ODMz IFBMVVM= IHJlc3VzYw== IGFiaWRpbmc= NTcz IHZhY2FuY2llcw== RW1pbHk= IGh5cG90aGFs IFdlcm5lcg== IFdlZQ== IERKcw== NTEz IHdpdGNoY3JhZnQ= IGFjdXB1bmN0dXJl ZW50YXJ5 YmVuZWZpdA== UHJvZHVjdHM= IFBTUA== IE1QRw== IEppbm4= IEphcnJldHQ= IDQ0NQ== IEltYWdpbmc= IFB5dGg= RmluaXNo IHRleA== IGp1dmVuaWxlcw== IGhlcm9pc20= IGRvdWJ0bGVzcw== IEFraQ== IFRlbmQ= IFBhdHJpYXJjaA== IGJpdHRlcnM= IFRlbGVjb21tdW5pY2F0aW9ucw== aXRhdGl2ZWx5 YWduYQ== IHJn IFNPTEQ= IGNvbXB1bHNpb24= IE5hc2E= IEthdGhyeW4= IG1pbGxpb25haXJlcw== IGludHJpbnNpY2FsbHk= IGJvbHN0ZXJlZA== dGltZW91dA== Zmxv IHR1dG9y cG91cg== U3RhdGVtZW50 IHsq IFJ1ZG9scGg= IEtpbWJlcmx5 cm9nZW5z YWRpcQ== XSs= IGluZGlnbmF0aW9u IGZyYWN0dXJpbmc= IFJlbGVhc2Vz IEdyYWlu cHJvdGVpbg== TGFnbw== IHZhY2F0aW9ucw== IGJvb3RlZA== IFRIUkVF IEhH b3Jlc2NlbmNl IHRm IHNvYXI= aW9zeW5jcg== IGdsYW5jZXM= IFNwb29u IEp1cnk= IENvd2JveQ== IGNyZWF0aXZlbHk= SGlnaGVy IHNvbGljaXRvcg== IGhhd2s= YWNpbw== ODk2 IHN1cGVyZmx1 IGJvbWJzaGVsbA== Y3R1cmU= IGJyb2tlcmFnZQ== IHJhaWRpbmc= IGZyZW5jaA== IGFuZ2xlZA== VHJhbnNhY3Rpb24= IEdlbm9jaWRl dXBl IEhhaXRpYW4= NTcy ITo= IHVud2l0dGluZ2x5 aXRlcmF0b3I= c2Nyb2xs IHRhbGxpZWQ= IGJpb21lZGljYWw= IENBUkQ= IGV1cGhlbQ== IGJyYWluc3Rvcm0= YXF1aW4= S28= TWljaGVsbGU= IFJ1bmVz IEJhbGxpc3RpYw== dWRlcnM= IG1vZGVzdHk= IGlQYWRz IEV6ZWtpZWw= WUU= IHN0YXJzaGlw IHBvd2VyZnVsbHk= IHBlcmw= IFNoYWRl IFF1YXJ0 IEVFRw== IGZpc2hlcm1hbg== T1NFRA== IFR5cGljYWw= ZGZ4 IG1lc2hlcw== IGV0Y2hlZA== d29ydGhpbmVzcw== IHRvcHBsZWQ= IDM5Ng== b3JpdXM= V2Vpc3M= IG15c3Fs IFZhbGhhbGxh 2ZI= bGVhc2luZw== IHJlY29tcA== cmFwbmVs U2Vs MDQz IGRlcmFpbGVk IEd1aWRlcw== SVJU IGRlaHVtYW4= IEJyaXR0YW55 Iikp IGV4Y2xhaW0= IGJhbGs= IDg0MA== Q0xBSU0= aW50ZWw= TEFC IHBlZ2dlZA== IGFzdHJvcGg= c21va2luZw== IHJpZ2dpbmc= IGZpeGF0aW9u IGNhdGFwdWx0 aW5zaWRl IENhc2NhZGU= IEJvbHNoZXZpaw== R2F6YQ== RGVwdGg= IGxvdWRzcGU= IGFsbW9uZHM= bWV5ZXI= bGVuZXNz amVu ZnJlc2g= IHVuYmVhdGVu IFNxdWlk IFByZXN1bWFibHk= VGltZXI= Qlc= IHJvc3RlcnM= IGVsbGlwdA== IEhhcnJpZXQ= ZGF0YWJhc2U= IE11dHVhbA== IENvbW1vZG9yZQ== dWtlZA== a25pZmU= IENPTU1VTg== aHlh IG1lbHRz YXJjaGl2ZXM= IHJhdGlmaWNhdGlvbg== IG11bHRpcGx5aW5n IGludGVyb3Blcg== IGFzY2VydA== d2luZ3M= dmVydGluZw== IFNjb3JwaW9u YXll IFBvcnRzbW91dGg= IE1UQQ== bml0 aWF6ZXA= IHF1YXJhbnRpbmU= IHNsaWRlc2hvdw== IGNlbnRpbWV0ZXJz IHN5bm9wc2lz IHNwYXRl dGhpcnN0 IG5vbWluYXRpbmc= IE1lbHZpbg== UHJldmlldw== IHRocm9i IGdlbmVyYXRpb25hbA== IFJhZGl1cw== cmVzdGxpbmc= cHV0YWJsZQ== YXdhcg== TkVDVA== IHVubGF3ZnVsbHk= IFJldmVsYXRpb25z V2lraXBlZGlh c3Vydg== IGV5ZWluZw== aWpu IEZX IGJydW50 IGludGVyc3RlbGxhcg== IGNsaXRvcg== IENyb2F0aWFu IENoaWM= ZXZh IERpc2FwcA== IEFraW4= aW5lcmllcw== ZHVzdA== SW50ZXJlc3RlZA== IGdlbmVzaXM= IEV1Y2w= w7Zu cGlja2luZw== IG11dGF0ZWQ= IGRpc2FwcHJvdmU= IEhETA== IDYyNQ== zLY= Y2FuY2Vy IHNxdWF0cw== IGxldmVycw== RGlzY3Vzcw== PV0= RGV4 IFZJREVPUw== QVVE IHRyYW5zYWN0 IEtpbmVjdA== IEt1YWxh IEN5cA== NzQ3 IHNoYXR0ZXJpbmc= IGFyc2VuaWM= IEludGFrZQ== IEFuZ2Vsbw== IFF1aXQ= IEtoZQ== IDE4OTM= TWFrZXI= MDI5 IFBhaW50aW5n RGlzYWJsZQ== OTE2 IGFuYWxnZXM= IHRhY3RpbGU= IHByb3BoZXM= IGRpY2Vk IFRyYXZlbHM= IEhlYWRlcg== IENsdWJz QXNzaXN0YW50 IGluY3JpbQ== IGRpcHM= IGNydWNpZml4 IFNoYW5haGFu IEludGVycHJldA== IDQwOTA= YWxvZ3k= YWJiYQ== IHNpbXVsYWM= aHVzYmFuZA== U0lN IHJlY3ljbGU= dWNlcg== ZWRnZWQ= IHJlbmFpc3NhbmNl IEJvbWJheQ== Q2F0aG9saWM= IExJTkU= IENsb3RoaW5n cmVwb3J0cw== IHBsYXVz IGRhZw== IE1hY2U= Wkk= IGludHJ1ZGVy IFZldGVyaW5hcnk= Z3J1 IHNuZWFreQ== IFNpZQ== IENpbm5hbW9u UE9TRQ== IGNvdXJpZXI= IENOUw== IGVtYW5jaXBhdGlvbg== c2l0 IHBsYXl0aHJvdWdo IEZhY2lsaXRpZXM= dmlydA== IEdhdW50bGV0 VGhvbXBzb24= IHVuYmVsaWV2YWJseQ== UGFyYW1ldGVycw== IHN0aXRjaGluZw== aWduZQ== IFRIRVNF UHJpdmFjeQ== IHNoZW5hbmlnYW5z IHZpdHJp IFZhbGlk NTkx rbc= IFByb3RvdHlwZQ== aW5rYQ== U0NQ IFRpZA== 6Ig= b2xkZWQ= IGluZGl2aWR1YWxpdHk= IGJhcmtpbmc= IG1hcnM= IFdE IDgyMA== IHRpcg== IHNsYXBwaW5n IGRpc2dydW50bGVk IEFuZ29sYQ== cml1cw== IFRvcm5hZG8= IFRodXJz IGNhcHRjaGE= IGFuZ3N0 IFBvZw== IEFzc2Fzc2lucw== IEFkaWRhcw== IGpveWZ1bA== IHdoaW5pbmc= RW1lcmdlbmN5 IHBob3NwaG9ydXM= IGF0dHJpdGlvbg== b3Bob24= IFRpbWJlcndvbHZlcw== IEphaA== IEJyaW5naW5n IFdhZA== IEVuc3VyZQ== b2hs IFhpZQ== b21tZWw= Y21w IHppcHBlcg== IHJlbGF0 IENvcnJpZG9y bWlsbw== VElORw== QXZn IGNyb3BwZWQ= XX0= IHJhZ2Vk IEx1bXB1cg== IEd1ZXJyZXJv b3Vya2U= TnV0 IG9mZnNldHM= b2dsdQ== ZHJt IG1vcnRhbHM= bGF0YWJsZQ== IGRpc21pc3NpdmU= 5LiJ IHRocm9hdHM= IGNoaXBzZXQ= IFNwb3RsaWdodA== Q2F0YWxvZw== YXJ0aXN0 R2I= IGNoaWxseQ== IHN0b2tlZA== IDM3NA== V2FyZA== TGF0aW4= IGZpYXNjbw== IGJsZWFjaA== IGJyYXY= RW5oYW5jZWQ= IGlub2M= IEZpb3JpbmE= Xz4= IGxldWtlbWlh IGVsdWM= IGFubm91bmNlcg== IExpdGh1YW4= IEFybWFnZWRkb24= 5Yc= TGVuaW4= IFJ1aw== IHBlcHA= IFJvbWFudGlj IFBJVA== IEludGVyc3RlbGxhcg== IEF0a2luc29u UmFpZA== SnM= R29hbA== Q291cnNl IHZhbmlzaGluZw== ZXNsZXk= IFJvdW5kcw== RWxzYQ== NTkz IHJlZHVuZGFuY3k= IFNUQU5E IHByb3BoZXRpYw== IGhhYml0YWJsZQ== cnl1 IGZhaW50bHk= TU9ERQ== IGZsYW5rZWQ= SVJD QXdlc29tZQ== IHNwdXJpb3Vz IFphaA== IE1TRw== IHNoYWRpbmc= IG1vdGl2YXRpb25hbA== IFNhbnRhbmE= IFNQUg== IGV4Y3J1Y2lhdGluZw== b21pYWw= IE1pa28= IExlb3BhcmQ= QWJ5c3M= IFt8 ZGlydHk= IGJhdGhz IGRlbW9yYWw= YW5kcmU= UEI= IHVuaWZpY2F0aW9u IHNhY3JhbWVudA== IFsm IHByaWNlbGVzcw== IGdlbGF0aW4= IGVtYW5hdGluZw== IEFsbGFhaA== OTg2 IG91dGJ1cnN0 IGVyYXM= IFhWSQ== IFNQSQ== T3R0 IExhemFydXM= UExJRUQ= Rmx5aW5n YmxvZ3M= V2lzY29uc2lu UmF2ZW4= IHJlYmF0ZQ== IGNyZWVwcw== IFNwYW4= IFBhaW50ZXI= IEtpcmE= IEFtb3M= IENvcnZldHRl Q29uc3VtZXI= IFJlY292ZXI= Y2tp IHBlc2t5 IEludmVudGlvbg== Q29tcGFuaWVz IGNoYWxsZW5nZXJz YWRlbWlj IFVrcmFpbmlhbnM= IE5ldXJvbG9n IEZvcnNha2Vu IGVudHJhbnRz IGVtYmF0dGxlZA== IGRlZnVuY3Q= IEdsYWNpZXI= IHBvaXNvbnM= IEhvcnNlcw== bWFrZXM= IERpcnQ= IDQyMw== aGho IFRyYW5zZm9ybWF0aW9u UVVJUkU= Li4uLi4uLi4uLi4uLi4uLi4u IHRyYXZlbGxlcg== IFNleHk= IEtlcm4= aXBvbGFy IHJhbnNvbXdhcmU= b29vb29vb29vb29vb29vbw== RWM= cnVieQ== UHJvZmVzc2lvbmFs IE91dGJyZWFr YXJndW1lbnQ= R3JleQ== IEZpZmE= IENITw== IEZPUk0= IEFtdHJhaw== LVs= IGNyYWRsZQ== IGFudGlveGlkYW50cw== 44Gu5a4= NzM2 IE5BU0w= IENvbnRyaWJ1dGlvbnM= SW5kaWFuYQ== IFNURVA= Q1NT IHNhbGllbnQ= IGFsbG9jYXRpb25z eXJpZ2h0cw== IG1hc2hlZA== IEN1dHRlcg== U2V4dWFs IHBvdW5kZWQ= IGZhbmJhc2U= IGNhc2M= IFRyYW5zcGFyZW5jeQ== IGFuYWx5dGlj IFN1bW1vbmVy 154= IEFEQw== ZGV0YWls IHZhbnF1aXNoZWQ= IGNyYWJz YXJpZQ== RGVzdHJveQ== IFNhY2s= IHRyYW5zaXN0b3I= QWxhYmFtYQ== IEtvZW4= IEZpc2hlcmllcw== Y29uZQ== IGFubmV4ZWQ= IE1HTQ== ZXNh IGZha2Vk IENvbmdyYXR1bGF0aW9ucw== IGhpbmRlcmVk IGNvcnJlY3Rpb25hbA== IElUVg== bGVldmU= IGluYXBwcm9wcmlhdGVseQ== bGlja3M= IHRyZXNwYXNz IHBhd3M= IG5lZ290aWF0b3I= IENocmlzdGVuc2Vu bGltaXRz IERpYW5uZQ== IGVsZWdhbmNl IENvbnRyYWN0cw== YW5rZQ== T2Jq IHZpZ2lsYW5jZQ== IGNhc3RsZXM= IE5BRA== IEhvbG8= IGVtcGhhdGljYWxseQ== IFRpdHVz IFNlcnZpbmc= IFJpY2hpZQ== IFBpZ3M= NTY4 IGFuaW1vc2l0eQ== IEF0dHJpYnV0ZXM= IFVyaWVs TVE= bXlyYQ== IEFwcGxpY2FudA== IHBzeWNoaWF0cmlzdHM= IFZpag== IEFiYnk= YWdyZWU= UHVzaA== IGtXaA== aGliYQ== IGluY2l0ZQ== IFdlYXNsZXk= IFRheGk= bWluaXN0aWM= aHlwZXI= IEZhcm4= IDYwMQ== IE5hdGlvbndpZGU= RmFrZQ== OTUy IG1haXpl IGludGVyYWN0ZWQ= IHRyYW5zaXRpb25lZA== IHBhcmFzaXRpYw== IGhhcm1vbmlj IGRlY2F5aW5n IGJhc2VsZXNz bnNpY3M= IHRyYW5zcGlyZWQ= IGFidW5kYW50bHk= IEZvcmVuc2lj IHRyZWFkbWlsbA== IEphdg== YWJhbmQ= IHNzaGQ= IGZyb250bWFu IEpha2FydGE= b2xsZXI= ZHJvcHM= IFNFUlZJQ0VT cm9tcHR1 b3BoaWNhbA== aG9zcGl0YWw= YmxlZG9u NjQ1 IG1pZHJhbmdl IEVWRU5U Y3VsYXRlZA== cmF3bGVk IHBlcmNoZWQ= IG92ZXJib2FyZA== IFBlZWw= IFB3cg== IENhcnRo IENPTVBMRQ== Y29l c2hhbGw= IGRldGVycmVuY2U= TUVUSE9E IEFic2VudA== TUVO IHNpbGw= IExFVkVM WW9yaw== IHNpbm5lcnM= IE9QRUM= IE51cg== IERlc2lnbnM= c2VsZWN0aW9u IHVud29ydGh5 Q0hB IHN0cmVuZ3RoZW5z ODgz ZWRseQ== IHNsaWNpbmc= IG1hbG51dHJpdGlvbg== IGZpbG1tYWtpbmc= IFBvbGs= dXJhdGVk IDQyMQ== YnJlYWtlcnM= ISci IHdldGxhbmRz IERpc2NyaW1pbmF0aW9u IGFsbG93YWJsZQ== IHN0ZWVyZWQ= IFNpY2lseQ== U0FN IG11c3RhY2hl IG1pZHM= IGNsaXBwZWQ= IGNpcmN1bGF0ZQ== IGJyaXR0bGU= IEJ1aWxkaW5ncw== cmFpc2Vk IFJvdW5kdXA= IHdlYWx0aGllcg== IG92ZXJ3cml0ZQ== IG92ZXJwb3dlcmVk IEdlcnJhcmQ= c2l0ZXM= UERBVEVE IGFjdXRlbHk= IEdhbWJsZQ== IHBpbQ== IEt1cw== VHlwaWNhbGx5 RGVwbG95 IE1vcm9jY2Fu cG90aW9u Y29tYmU= IHZpZ2lsYW50ZQ== IDM2Mw== U3Rldw== IEJhZ2c= IHJlc2lkZWQ= IFNwbw== IHJlbW5hbnQ= IGVtcHRpbmVzcw== YnJhaW5lcg== IG91dHBhdGllbnQ= cHJpb3JpdHk= IGxlcHRpbg== IFBheXRvbg== IEdsZWFtaW5n IFNoZWQ= IFBvbG8= IE1vcm1vbmlzbQ== cmVzdHJpY3RlZA== YXJsYW5l d3g= IGNyZWF0aW5l IEFub24= IFNUVUQ= IEpVTA== IFRlZQ== NTI4 MDg5 IGhhdGNoZWQ= RGlzcGF0Y2g= IENvbXBvc2l0ZQ== IDQ1MQ== cHVmZg== IFhDT00= IE9ybg== IFRIQU5L RU5ERUQ= IEFzaGV2aWxsZQ== IMOc IG1hbmdv IFNsaWdodGx5 d29ybGRseQ== IFdhbmRlcg== IEV4cGFuZA== IENocg== TWlzdA== IG9ydGhvZG94eQ== IFVORVNDTw== cmVnYXRl RWxzZXdoZXJl a2ll aXJsZWQ= IHRvcHBsZQ== IGFkb3B0aXZl IExlZ3M= ZHJlc3M= IFNhZ2Fu YmFyZQ== IEdsb3U= Q3J1bmNo IGhlbHBlcnM= IGNocm9uaWNhbGx5 IEh1bWE= MTAwMDA= IGFjY29tbW9kYXRpbmc= 5LqU IHdyaW5rbGVz IGRvZGdlZA== Zm91cnRo IHByZWNvbg== IGNvbXByZXNzb3I= IEthcmU= IGV2aWN0 IFdhcndpY2s= aW1hcg== IG1vZGVybml6YXRpb24= IGJhbmR3YWdvbg== IHJlZnV0ZWQ= IG5ldHRlZA== IE5hcGxlcw== IEdlbmll cGVyb3Jz IGZpZWxkZWQ= IGRlcmU= IFBhcmFibGVz bGVlcw== IHRyb3V0 YXNwZXJz IG5paGls IGhhcHBpZXN0 IGZsb3BweQ== IExvZnQ= IEhlYXJk IHVuaXNvbg== IGx1Zw== IFJlZG1vbmQ= Y2xhc3NpYw== U3VwcG9ydGVycw== U0hJUA== R01U IGZ1ZWxsZWQ= 55A= IGRk IEVtaW5lbQ== IDE4OTc= TllTRQ== IHNlY3JldGFyaWVz IEZJQQ== IENhbmF2ZXJhbA== RmF2b3JpdGU= IHBvbXA= IGRldGFpbmVl ZXJzaGlw YWltb24= aW91cg== IEFwZXg= IHBsYW50YXRpb25z YW1pYQ== YWNpb24= UnVzdA== IHRvd2Vk IFRydWx5 NTc3 IHNoZWx0ZXJlZA== cmlkZXI= V28= IGxhaXI= IEludGVsbGlnZW50 aW1wcm92ZQ== bWF0aWNhbGx5 IGV0aXF1ZXR0ZQ== YWRyYQ== YWxsbw== IEp1bm8= YW55dGhpbmc= IFN0cnVnZ2xl IFByZWRpY3Q= IEdyaW1lcw== IEFNRVJJQ0E= Y3R4 IFNpdHVhdGlvbg== V09PRA== IHNvbHVibGU= bWVpZXI= IGludG9sZXJhYmxl YW5nZXJpbmc= IHVuaW50ZXJydXB0ZWQ= IHRvb2x0aXA= IGludGVycm9nYXRlZA== IGd1bm5lZA== IFNuZWFr 5q2m IHRldGhlcg== IGNydW1ibGU= TGVucw== IGNsdXN0ZXJlZA== IFN5bA== IEhhc2Fu IGR5c3RvcGlhbg== d2FuYQ== IGpveXN0aWNr IFRoaWI= YW1tdQ== VG9tb3Jyb3c= NTQ2 IG92ZXJjYW1l IG1pbmltaXplZA== Y2VwdG9y UnVubmVy RU5HVEg= IEJyZW5kYQ== IEFjaGlldmVtZW50cw== IHRvcmNoZXM= IHJhcHBvcnQ= IEludmVzdGlnYXRvcg== IEhhbmRsaW5n cmVsYXRpb24= Z3JleQ== ODE1 IGtjYWw= IENvbW1hbmRz ZHE= IGN1cmxz IGJlYXJlcg== IGN5bmljaXNt aXRyaQ== IFVzZWZ1bA== QmVl RENT IGFicmFz UHJhY3Q= QklMSVRJRVM= NzEy IGRlYnVnZ2Vy IGRlYnRvcg== IExpYQ== IEtlcnM= IGV4YWNlcmJhdGU= IFN0YWN5 IEJsYW5k IFNjZW5lcw== IGJyYW5jaGluZw== 4paI4paI4paI4paI4paI4paI4paI4paI YXBlYWtl IHNhbHNh IG1pc2hhbmQ= IEtvbmFtaQ== IE5pYg== IGFuZWNkb3Rl IGFncmVlYWJsZQ== z4k= IE5hdGhhbmllbA== IEhlaXNtYW4= IEJld2FyZQ== IDE4ODY= c3BlY3RpdmU= Njkx NTIy IGluaGliaXRz IGhhc2hpbmc= IDE4ODk= 5bCG dmljaA== UHVyZQ== IHNvbGlkbHk= IGFzcGlyaW4= aW1hcnU= IHN0cmVldGNhcg== IFVDUw== IEp1ZGQ= IGZsYXNoYmFja3M= cGlucw== IDE0NDA= IFVOSENS IFN5bXB0b21z VElU NTM4 RnJh JSk7 IG9veg== IGN1cmZldw== IGNhbG1lZA== IHBhcnRpY2lwYXRlcw== VGVY IG5vbnNlbnNpY2Fs IGZ1bGxiYWNr IERlTA== bW9ua2V5 aGFyaQ== IG1ldGFib2xpdGVz IGxvb3RlZA== IEFMV0FZUw== IEJDQw== THQ= b2NoZXQ= Qm9uZQ== IHZldG9lZA== IGdjYw== IENMSUNL IDE4ODg= c2Fm IHN0aWZmbmVzcw== IGxvd2x5 IEdlaA== dmVyc29u b3JzZXQ= IHVuZm9yZXNlZW4= IGFuZXN0aGVzaWE= IE9wdGljYWw= IHJlY29uc3RydWN0ZWQ= IFR1cA== c2hvd3M= TkVXUw== IE5ld3NwYXBlcg== IEFTQQ== dGVyYQ== TnVtYmVycw== IGluZXhwbGljYWJsZQ== 15E= IGhhcmRuZXNz dW50YXJpbHk= IEFjZXI= Z3JhZGllbnQ= QVJESVM= IHdvb2RsYW5k IG1ldGFwaG9ycw== IFdlbWJsZXk= IFBhdmVs cGhpbGlz IHJld3JpdGluZw== IHBlcmNlcHR1YWw= IDEwNzA= d29ybXM= IERvd25z IHVuc3VycHJpc2luZ2x5 IHRhZ2dpbmc= ZmxhbWU= IGxpdHJlcw== IGJvdW5jZXM= IEJhYmU= c2h1dA== IG92ZXJkb3Nlcw== IFNoZWlsYQ== IENoYXU= IEJsZXNz Q2FwdHVyZQ== IFNpZ25pZmljYW50 IFNjaW9u IDM4OQ== IE1jSA== IFRpdGFuaXVt IE1lYWw= YW1lZGE= YWdlbnRz YWdncmVzc2l2ZQ== QmlsbHk= NzYz IFNheWluZw== REVSUg== aXRvbmU= Q29sbGlucw== Qm91bmQ= IGJvbHRlZA== IERNQ0E= OTUz IHVuaXF1ZW5lc3M= IGVwaWdlbg== dW5jaQ== YW50YW0= IHJlY2tvbmluZw== Y2hhaXJz T0dS IFNlbmVnYWw= IDE4NjI= cmVsZXZhbnQ= IMKv IHBoYXJtYWNpZXM= IEdlcmFs dmllcg== WWFu T1JQRw== IHJhYmlk YmVuZGluZw== IFVOSVRFRA== IDQ2NQ== QXNzZW1ibHk= IHdlZXA= IGJlaGVzdA== IE1vdGhlcnM= IEphY2U= aGlk IHdoaXJsd2luZA== IFVOSVZFUlM= IHV0b3BpYW4= IGtpZG5hcA== UGhpbGlwcA== S2lu ODkz IGxpdmVzdHJlYW0= IE1JU1M= IHN1YnZlcnNpdmU= IFRlY2huaXF1ZXM= IEpVU1RJQ0U= IEJBU0U= IDM4Nw== IGFzc2FpbGFudHM= IEhhcmRjb3Jl IHNwcmlua2xlZA== IFBzZQ== 6Zo= cHJpbnRlZA== IEhhdQ== T1JHRQ== IFRPVVI= IGxhY2Vk IGl0Y2g= R2l2aW5n IHBvcnRlZA== Nzgx Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= YnJlZWRpbmc= IGxvZ2dlcg== IEhPTA== aW5uaWU= Rmlyc3RseQ== IGVtYnJ5b25pYw== IGRlbGVnYXRlZA== cGFp T0lM IGNlbnRyYWxseQ== IFJ4 IFNjb3V0aW5n RHV0Y2g= IGhlcmVkaXRhcnk= IENydWlzZXI= c2F0 NTI5 IE1hcnJpb3R0 b3RoZXJtYWw= IHByb2hpYml0aW9ucw== RWFybg== IFN0YWI= IENvbGxlZ2Vz IEJlbGllZg== c3RyZXRjaGVk IExI IEVudGl0eUl0ZW0= Q0lB IHVucmVt IGxhdXJlYXRl IGRlbm9taW5hdGlvbnM= c3VtbWFyeQ== aGxlcg== U3BlY3Q= IEtsYXVz IEJlYW5z IGluc3Vy IFBBWA== IGZpZWxkZXI= IFZldA== IFNwYXJyb3c= emll IFNR IE1vbmRheXM= IE9mZmxpbmU= IExlcm5lcg== IEV4dGVuc2lvbnM= SXJlbGFuZA== IHBhdHJvbmFnZQ== IGNvbnRyYXN0ZWQ= IE1hbmlh aGlydA== TW9zY293 IGNvbmRlbW5z IEFuZ2U= IGNvbXBvc2luZw== IFBlcGU= IFBhZGRvY2s= IGhldGVyb2dlbmVpdHk= IGlkZW9sb2dpY2FsbHk= IGZpc2hlcw== IGN1cnNpbmc= IFJ1dGhlcmZvcmQ= IEZsb2F0aW5n IEFtZWxpYQ== VGVh U3lub3BzaXM= IHN0dW50cw== IGJlYWQ= IHN0b2NraW5n IE1JTEw= b2Jvb2s= bWFzc2l2ZQ== XDw= IGh1bXA= IFByZWZlcmVuY2Vz RW5naW5lRGVidWc= Z2Vpc3Q= IE5pZXRv b21ldmVy aXNoeQ== ZXZhbHVhdGU= Y29sb25pYWw= QWx0ZXJuYXRpdmU= IEdvUHJv IFZvcnRleA== IE5FVFdPUks= YW5za3k= U2VjdXJl IFRocnVzdA== U25ha2U= IHBhcmNlbHM= IHNhbXVyYWk= IGFjdHJlc3Nlcw== TmFw TUY= aWZlcmF0aW9u QmVlcg== NTIz IElseQ== b2ludG1lbnQ= UGluZw== IHN0cmlwZWQ= IE1lbGxvbg== b3NzZXNzaW9u IG5ldXRyb24= ZW5kaXVt IGFwaA== IEZsYXZvcmluZw== IDM4Mw== IHJlc3BvbnNpdmVuZXNz IEppbmRhbA== IEhpdGNoY29jaw== RGVudmVy IERSQUdPTg== c21hbnNoaXA= IER1cGw= IHNseQ== IHdlYmNhbQ== IFR3YWlu IERhcmxpbmc= aWxpYXRl Y29uc3VtZXI= RElU IG5hbWVzYWtl IHVub3J0aG9kb3g= IGZ1bmVy IFBMb1M= IENPTlRST0w= b3p5Zw== b2dsb2Jpbg== RkFDRQ== RVJH IERpYQ== IEZpZXN0YQ== Y2VsZQ== MDM0 IGVuY2xhdmU= 4pas4pas b25lbWVudA== YWxpc3Q= TWFuZA== IGhvbWVncm93bg== IEZhbmN5 IGNvbmNlcHRpb25z IENvbnRhaW5z dXJlZW4= IHJlaXRlcmF0ZQ== IG1lYWdlcg== IGluc3RhbGxtZW50cw== U3Bhd24= NjI3 IHBob3RvYw== IENhYnJlcmE= IFJvc2VudGhhbA== IExhbnNpbmc= aXNuZXI= IGludmVzdHM= IFVGT3M= RVhQ SGFyZHdhcmU= IHRyYWdpY2FsbHk= IGNvbmNlZGVz aWVmdA== Y2hhbQ== Ym9yZ2g= IFNjaHI= IE1lbGFuaWU= IEhveQ== IHZpc2l0YXRpb24= IGlkaW9zeW5jcg== IGZyYWN0aW9ucw== IGZvcmVza2lu b2Jvcw== IHBvYWNoaW5n IFZJRVc= IHN0aW11bGF0ZXM= IEdvcms= Y2Fub24= TUlD IE5lbWVzaXM= IEluZHJh IERNVg== IDUyOQ== IGluc3BlY3Rpbmc= IGdyYW5kbWE= IFdoZWRvbg== IFNoYW50 IFB1cmc= aWthbg== IFRlZw== IENMUg== emFj VmljdG9yaWE= IFZlcmlmeQ== aW9uaWNz IHBhcnR5aW5n IE1vdQ== Y29sb3Vy IHRlc3RpbW9uaWVz bGF0aW9ucw== IHByZXNzdXJpbmc= aGlybw== YWNlcnM= IGZpZA== YW5nbGVy IENTSQ== IGhlcmVhZnRlcg== IGRpc3NpZGVudHM= cmVwb3J0aW5n aXBoYW55 Y2hldg== IHNvbGl0dWRl IGxvYmU= IGluZGlz IGNyZWRlbnRpYWw= cmVjZW50 YWR1bHQ= IE5pcnZhbmE= IEZyYW5jaGlzZQ== TGF5ZXI= SHlw IEJlcmtzaGlyZQ== IHdpbGxz dGlm IHRvdGVt IEp1ZGFo cmVwYWly SW5zdGFudA== NTQ4 IGVtYmFzc2llcw== IGJvdHRsZW5lY2s= IGJvdW50 IHR5cGV3 IEFsdmlu amluZw== aW1pbGFy UnVzaA== IGJyaW0= IEhFTFA= QWlt XSc= IHBhc3NpdmVseQ== IGJvdW5kZWQ= IFJhdGVk IGNyaW1pbmFsaXR5 IGJpb21hcms= IGRpc3BhdGNoZXI= IFRvd2FyZHM= ICsrKw== cmlnaHRlb3Vz ZnJvZw== IFBhbmM= Q2FydGVy MDMy 5qmf IHVsdHJhdmlvbGV0 IExpY2Vuc2Vk IFRhdGE= IEJsZXNzaW5n IEdBTQ== IGNoZW1pY2FsbHk= IFNlYWY= IFJFTEU= IE1lcmNlbmFyeQ== Y2FwaXRhbGlzdA== IGZvcm11bGF0aW9ucw== IGFubmloaWxhdGlvbg== IFZlcmI= IEFyZ29u IHVubG9hZGVk IG1vcnBoZWQ= IGNvbnF1ZXJpbmc= YmFja2Vy SUVMRA== IHRoZWZ0cw== IGZyb250cnVubmVy IFJveWFsZQ== IEZ1bmRhbWVudGFs ZWxpZ2h0 Q2hpcA== bmVjZXNzYXJ5 YXlu IFNsaXA= IDQ0OA== Y2VybmVk UGF1c2U= IHNob2NraW5nbHk= IEFCVg== IGNvbXBvc3VyZQ== NzMz IE1vdG9yc3BvcnQ= YWhpbWU= TXVycmF5 TWFjaA== IGdyaWRz IGRlYmlhbg== IGZ1cnRoZXJtb3Jl IGRleHRlcml0eQ== IENvbGxlY3Rpb25z b3Nsb3Y= aWxhZ2U= Ymo= IE1vbnRlbmVn IHN0cnV0Q29ubmVjdG9y IG1hc3NhY3Jlcw== IGJyaWVmcw== ZmV0Y2hlZA== dXZpYW4= b2xpdGlvbg== RmFpbHVyZQ== ZW1vbmlj IGZsYXJlZA== IGNsYWltYW50 IGN1cmVz IGdpdmVhd2F5cw== IFN1YnN0YW5jZQ== YWxpb25z IGNyaW5nZQ== IEt1bA== IGFyaXN0b2NyYWN5 IFVsc3Rlcg== b2xhdGVk aG91c2luZw== IE1JUw== IGdsYXJlZA== IFdpbGhlbG0= bmVlZHM= bGFtYmRh YnVpbGRlcnM= IFZJUw== IHJhZGlhdG9y IEdob3N0YnVzdGVycw== IDQzNg== YWN0dWFs IGhlcmRz w6dh d2F0Y2hpbmc= IGNvdW50ZXJpbmc= Q2hhcmdl IGNoYXJyZWQ= IHdhcmhlYWRz IGlvZGluZQ== IE1hY3k= MDQx IGRlcGFydHVyZXM= IFNpbnM= IGR5ZWQ= IENvbmNlcHRz Z2Fkbw== NzEz IHF1b3RhdGlvbnM= IGdpc3Q= IENocmlzdHk= IGFudGlnZW4= IEhlbXA= IERyYXdu IEJhcmc= ZXp2b3Vz IHBhdGVybml0eQ== IGFyZHU= IEFuY2hvcmFnZQ== IFJpaw== IG92ZXJsb2FkZWQ= IFVzZXJuYW1l IFRhbW15 IE5hdQ== IENlbGx1bGFy IHdhbmluZw== IHJvZGVudA== IFdvcmNlc3Rlcg== aWx0cw== IFRhZA== IGR3ZWxsaW5ncw== IGJ1bGxpc2g= NDMx IHJldGFsaWF0ZQ== IG1pZ3JhaW5l IENoZXZyb24= Q0hFQ0s= IGRvbmtleQ== Y3JpbQ== U1BB IEFuYWxvZw== IG1hcnF1ZWU= IEhhYXM= Qmly IEdERFI= IERvd25sb2Fkcw== IHdpbGxwb3dlcg== IEZvcnRo IFJlY29yZGVk IGltcG9zc2liaWxpdHk= IExvZ2dlZA== IEZyYW5rcw== IFJhdHQ= aW5pdGlvbnM= IGNsZWFuZXJz IHNvcmVseQ== IGZsaWNrZXJpbmc= IEV4YW1pbmF0aW9u Y2F0Y2hpbmc= YWxsb3dlZW4= TXNn IGR1bm5v RmE= IGR5c3Bo Y3Jhenk= LicnLg== IG1haW5saW5l IGNz IHB0cg== IFdhbGx5 aWd1bg== OTUx IEJpZ2Zvb3Q= ZmlnaHRz IHJldHJpZXZpbmc= SnI= IGR1cGxpY2F0aW9u IEV4cGxhbg== IHJlbGF0aW9uYWw= IHF1YWludA== IGJpc2N1aXRz IGFkbw== IHNodWRkZXI= IGFudGlkb3Rl Ymxvb2RlZA== a3No IHNhdWNlcw== IHJlaW52ZXN0 IGRpc3BlbnNhcnk= IERpdmVy IDkwMDA= c3R1ZGVudA== IGluc2VwYXI= ZXNjYXA= IHRvZGRsZXJz IEdQSU8= IEFzc2lnbm1lbnQ= aGVhZGVycw== IGxhY2tsdXN0ZXI= IGFiYWNr OTU2 IHRvb2xiYXI= NzQ1 IG91c3Q= IGNvbnRlbXBsYXRpb24= IFBSRVNJREVOVA== IDQ1OA== PT09PT09 IGd1YXJhbnRlZWluZw== IEhlaXN0 IENhbm5lcw== mb0= IGNvbGxhYm9yYXRvcg== IEFtcA== IGdvdQ== IFNIQUxM c3Rvcmllcw== Nzgz IG1vYmlsaXplZA== IGJyb29k IExV IPCfkQ== IHJlZmlu IEFudGhyb3BvbG9neQ== dmluZA== aWxsaQ== IHdhcnJhbnRpZXM= IEJhYmVs IHN3YXRo IGNhY2hlcw== IGFudGFnb25pc3Rz YXJ0aWZhY3Rz IGhvdGx5 IFN0YXJ0cw== IEfDtg== emFn ISEhISE= IHNjb3VyZ2U= IGNvbnNwaXJpbmc= cnVpdHM= cmV2ZXJzZQ== IFNoZWVu IEplc3VpdA== IEdpb3Zhbm5p YWRpZXM= IGJ1dHRvY2tz ZWFyY2hlcg== YWNhbg== IHZvbGxleWJhbGw= IHNocm91ZGVk IHNjb3JlYm9hcmQ= YmF0cw== IElQTQ== IGFzc2Vz IGRlcmVndWxhdGlvbg== IFRlbGVncmFt IFJlYm9vdA== IDcwMDA= IENhbmFyeQ== IGtlcm5lbHM= IEZyYW7Dp29pcw== IER1ZmY= IFBvbg== IExlaWNh IEdhcm1pbg== IG9ycGhhbnM= IENsYXVkaWE= IGNhbGVuZGFycw== IExlaWxhbg== ZW50bw== Um9ja2V0 IGJydW5jaA== IEhhd2tpbmc= YWluZXJz IHNlbnNpYmlsaXRpZXM= IGtX IEthbmQ= IHJlY2xhaW1lZA== IGludGVyZXN0aW5nbHk= 16k= cm9teQ== Sk0= IEVuaGFuY2VtZW50 YnVzaA== U2tpcA== IHJhcHBlcnM= IGdhemluZw== cGVkaWE= YXRobG9u UmV2b2x1dGlvbg== IHNuaXBlcnM= IHJldmVydGVk IGNvbmdsb21lcmF0ZQ== VGVycnk= Nzk0 IGhhcnNoZXI= IGRlc29sYXRl IEhpdG1hbg== Q29tbWlzc2lvbg== ICgv 4oCmLiI= Q29tcGFy IGFtcGxpZmljYXRpb24= b21pbmF0ZWQ= IHJlZ3Jlc3M= IENvbGxpZGVy IGluZm9ybWFudHM= IGdhemVk\n! 50257 ICA= ICAg ICAgIA== ICAgICA= ICAgICAg ICAgICAgIA== ICAgICAgICA= ICAgICAgICAg ICAgICAgICAgIA== ICAgICAgICAgICA= ICAgICAgICAgICAg ICAgICAgICAgICAgIA== ICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIA== ICAgICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA== ICAgICAgICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIA== ICAgICAgICAgICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIA==" }; - p50k_edit_default = { pat_str: "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+", special_tokens: { "<|endoftext|>": 50256, "<|fim_prefix|>": 50281, "<|fim_middle|>": 50282, "<|fim_suffix|>": 50283 }, bpe_ranks: "! 0 IQ== Ig== Iw== JA== JQ== Jg== Jw== KA== KQ== Kg== Kw== LA== LQ== Lg== Lw== MA== MQ== Mg== Mw== NA== NQ== Ng== Nw== OA== OQ== Og== Ow== PA== PQ== Pg== Pw== QA== QQ== Qg== Qw== RA== RQ== Rg== Rw== SA== SQ== Sg== Sw== TA== TQ== Tg== Tw== UA== UQ== Ug== Uw== VA== VQ== Vg== Vw== WA== WQ== Wg== Ww== XA== XQ== Xg== Xw== YA== YQ== Yg== Yw== ZA== ZQ== Zg== Zw== aA== aQ== ag== aw== bA== bQ== bg== bw== cA== cQ== cg== cw== dA== dQ== dg== dw== eA== eQ== eg== ew== fA== fQ== fg== oQ== og== ow== pA== pQ== pg== pw== qA== qQ== qg== qw== rA== rg== rw== sA== sQ== sg== sw== tA== tQ== tg== tw== uA== uQ== ug== uw== vA== vQ== vg== vw== wA== wQ== wg== ww== xA== xQ== xg== xw== yA== yQ== yg== yw== zA== zQ== zg== zw== 0A== 0Q== 0g== 0w== 1A== 1Q== 1g== 1w== 2A== 2Q== 2g== 2w== 3A== 3Q== 3g== 3w== 4A== 4Q== 4g== 4w== 5A== 5Q== 5g== 5w== 6A== 6Q== 6g== 6w== 7A== 7Q== 7g== 7w== 8A== 8Q== 8g== 8w== 9A== 9Q== 9g== 9w== +A== +Q== +g== +w== /A== /Q== /g== /w== AA== AQ== Ag== Aw== BA== BQ== Bg== Bw== CA== CQ== Cg== Cw== DA== DQ== Dg== Dw== EA== EQ== Eg== Ew== FA== FQ== Fg== Fw== GA== GQ== Gg== Gw== HA== HQ== Hg== Hw== IA== fw== gA== gQ== gg== gw== hA== hQ== hg== hw== iA== iQ== ig== iw== jA== jQ== jg== jw== kA== kQ== kg== kw== lA== lQ== lg== lw== mA== mQ== mg== mw== nA== nQ== ng== nw== oA== rQ== IHQ= IGE= aGU= aW4= cmU= b24= IHRoZQ== ZXI= IHM= YXQ= IHc= IG8= ZW4= IGM= aXQ= aXM= YW4= b3I= ZXM= IGI= ZWQ= IGY= aW5n IHA= b3U= IGFu YWw= YXI= IHRv IG0= IG9m IGlu IGQ= IGg= IGFuZA== aWM= YXM= bGU= IHRo aW9u b20= bGw= ZW50 IG4= IGw= c3Q= IHJl dmU= IGU= cm8= bHk= IGJl IGc= IFQ= Y3Q= IFM= aWQ= b3Q= IEk= dXQ= ZXQ= IEE= IGlz IG9u aW0= YW0= b3c= YXk= YWQ= c2U= IHRoYXQ= IEM= aWc= IGZvcg== YWM= IHk= dmVy dXI= IHU= bGQ= IHN0 IE0= J3M= IGhl IGl0 YXRpb24= aXRo aXI= Y2U= IHlvdQ== aWw= IEI= IHdo b2w= IFA= IHdpdGg= IDE= dGVy Y2g= IGFz IHdl ICg= bmQ= aWxs IEQ= aWY= IDI= YWc= ZXJz a2U= ICI= IEg= ZW0= IGNvbg== IFc= IFI= aGVy IHdhcw== IHI= b2Q= IEY= dWw= YXRl IGF0 cmk= cHA= b3Jl IFRoZQ== IHNl dXM= IHBybw== IGhh dW0= IGFyZQ== IGRl YWlu YW5k IG9y aWdo ZXN0 aXN0 YWI= cm9t IE4= dGg= IGNvbQ== IEc= dW4= b3A= MDA= IEw= IG5vdA== ZXNz IGV4 IHY= cmVz IEU= ZXc= aXR5 YW50 IGJ5 ZWw= b3M= b3J0 b2M= cXU= IGZyb20= IGhhdmU= IHN1 aXZl b3VsZA== IHNo IHRoaXM= bnQ= cmE= cGU= aWdodA== YXJ0 bWVudA== IGFs dXN0 ZW5k LS0= YWxs IE8= YWNr IGNo IGxl aWVz cmVk YXJk 4oA= b3V0 IEo= IGFi ZWFy aXY= YWxseQ== b3Vy b3N0 Z2g= cHQ= IHBs YXN0 IGNhbg== YWs= b21l dWQ= VGhl IGhpcw== IGRv IGdv IGhhcw== Z2U= J3Q= IFU= cm91 IHNh IGo= IGJ1dA== IHdvcg== IGFsbA== ZWN0 IGs= YW1l IHdpbGw= b2s= IHdoZQ== IHRoZXk= aWRl MDE= ZmY= aWNo cGw= dGhlcg== IHRy Li4= IGludA== aWU= dXJl YWdl IG5l aWFs YXA= aW5l aWNl IG1l IG91dA== YW5z b25l b25n aW9ucw== IHdobw== IEs= IHVw IHRoZWly IGFk IDM= IHVz YXRlZA== b3Vz IG1vcmU= dWU= b2c= IFN0 aW5k aWtl IHNv aW1l cGVy LiI= YmVy aXo= YWN0 IG9uZQ== IHNhaWQ= IC0= YXJl IHlvdXI= Y2M= IFRo IGNs ZXA= YWtl YWJsZQ== aXA= IGNvbnQ= IHdoaWNo aWE= IGlt IGFib3V0 IHdlcmU= dmVyeQ== dWI= IGhhZA== IGVu IGNvbXA= LCI= IElu IHVu IGFn aXJl YWNl YXU= YXJ5 IHdvdWxk YXNz cnk= IOKA Y2w= b29r ZXJl c28= IFY= aWdu aWI= IG9mZg== IHRl dmVu IFk= aWxl b3Nl aXRl b3Jt IDIwMQ== IHJlcw== IG1hbg== IHBlcg== IG90aGVy b3Jk dWx0 IGJlZW4= IGxpa2U= YXNl YW5jZQ== a3M= YXlz b3du ZW5jZQ== IGRpcw== Y3Rpb24= IGFueQ== IGFwcA== IHNw aW50 cmVzcw== YXRpb25z YWls IDQ= aWNhbA== IHRoZW0= IGhlcg== b3VudA== IENo IGFy IGlm IHRoZXJl IHBl IHllYXI= YXY= IG15 IHNvbWU= IHdoZW4= b3VnaA== YWNo IHRoYW4= cnU= b25k aWNr IG92ZXI= dmVs IHF1 Cgo= IHNj cmVhdA== cmVl IEl0 b3VuZA== cG9ydA== IGFsc28= IHBhcnQ= ZnRlcg== IGtu IGJlYw== IHRpbWU= ZW5z IDU= b3BsZQ== IHdoYXQ= IG5v ZHU= bWVy YW5n IG5ldw== LS0tLQ== IGdldA== b3J5 aXRpb24= aW5ncw== IGp1c3Q= IGludG8= IDA= ZW50cw== b3Zl dGU= IHBlb3BsZQ== IHByZQ== IGl0cw== IHJlYw== IHR3 aWFu aXJzdA== YXJr b3Jz IHdvcms= YWRl b2I= IHNoZQ== IG91cg== d24= aW5r bGlj IDE5 IEhl aXNo bmRlcg== YXVzZQ== IGhpbQ== b25z IFs= IHJv Zm9ybQ== aWxk YXRlcw== dmVycw== IG9ubHk= b2xs IHNwZQ== Y2s= ZWxs YW1w IGFjYw== IGJs aW91cw== dXJu ZnQ= b29k IGhvdw== aGVk ICc= IGFmdGVy YXc= IGF0dA== b3Y= bmU= IHBsYXk= ZXJ2 aWN0 IGNvdWxk aXR0 IGFt IGZpcnN0 IDY= IGFjdA== ICQ= ZWM= aGluZw== dWFs dWxs IGNvbW0= b3k= b2xk Y2Vz YXRlcg== IGZl IGJldA== d2U= aWZm IHR3bw== b2Nr IGJhY2s= KS4= aWRlbnQ= IHVuZGVy cm91Z2g= c2Vs eHQ= IG1heQ== cm91bmQ= IHBv cGg= aXNz IGRlcw== IG1vc3Q= IGRpZA== IGFkZA== amVjdA== IGluYw== Zm9yZQ== IHBvbA== b250 IGFnYWlu Y2x1ZA== dGVybg== IGtub3c= IG5lZWQ= IGNvbnM= IGNv IC4= IHdhbnQ= IHNlZQ== IDc= bmluZw== aWV3 IFRoaXM= Y2Vk IGV2ZW4= IGluZA== dHk= IFdl YXRo IHRoZXNl IHBy IHVzZQ== IGJlY2F1c2U= IGZs bmc= IG5vdw== IOKAkw== Y29t aXNl IG1ha2U= IHRoZW4= b3dlcg== IGV2ZXJ5 IFVu IHNlYw== b3Nz dWNo IGVt ID0= IFJl aWVk cml0 IGludg== bGVjdA== IHN1cHA= YXRpbmc= IGxvb2s= bWFu cGVjdA== IDg= cm93 IGJ1 IHdoZXJl aWZpYw== IHllYXJz aWx5 IGRpZmY= IHNob3VsZA== IHJlbQ== VGg= SW4= IGV2 ZGF5 J3Jl cmli IHJlbA== c3M= IGRlZg== IHJpZ2h0 IHN5 KSw= bGVz MDAw aGVu IHRocm91Z2g= IFRy X18= IHdheQ== IGRvbg== ICw= IDEw YXNlZA== IGFzcw== dWJsaWM= IHJlZw== IEFuZA== aXg= IHZlcnk= IGluY2x1ZA== b3RoZXI= IGltcA== b3Ro IHN1Yg== IOKAlA== IGJlaW5n YXJn IFdo PT0= aWJsZQ== IGRvZXM= YW5nZQ== cmFt IDk= ZXJ0 cHM= aXRlZA== YXRpb25hbA== IGJy IGRvd24= IG1hbnk= YWtpbmc= IGNhbGw= dXJpbmc= aXRpZXM= IHBo aWNz YWxz IGRlYw== YXRpdmU= ZW5lcg== IGJlZm9yZQ== aWxpdHk= IHdlbGw= IG11Y2g= ZXJzb24= IHRob3Nl IHN1Y2g= IGtl IGVuZA== IEJ1dA== YXNvbg== dGluZw== IGxvbmc= ZWY= IHRoaW5r eXM= IGJlbA== IHNt aXRz YXg= IG93bg== IHByb3Y= IHNldA== aWZl bWVudHM= Ymxl d2FyZA== IHNob3c= IHByZXM= bXM= b21ldA== IG9i IHNheQ== IFNo dHM= ZnVs IGVmZg== IGd1 IGluc3Q= dW5k cmVu Y2Vzcw== IGVudA== IFlvdQ== IGdvb2Q= IHN0YXJ0 aW5jZQ== IG1hZGU= dHQ= c3RlbQ== b2xvZw== dXA= IHw= dW1w IGhlbA== dmVybg== dWxhcg== dWFsbHk= IGFj IG1vbg== IGxhc3Q= IDIwMA== MTA= IHN0dWQ= dXJlcw== IEFy c2VsZg== YXJz bWVyaWM= dWVz Y3k= IG1pbg== b2xsb3c= IGNvbA== aW8= IG1vZA== IGNvdW50 IENvbQ== aGVz IGZpbg== YWly aWVy 4oCU cmVhZA== YW5r YXRjaA== ZXZlcg== IHN0cg== IHBvaW50 b3Jr IE5ldw== IHN1cg== b29s YWxr ZW1lbnQ= IHVzZWQ= cmFjdA== d2Vlbg== IHNhbWU= b3Vu IEFs Y2k= IGRpZmZlcmU= IHdoaWxl LS0tLS0tLS0= IGdhbWU= Y2VwdA== IHNpbQ== Li4u IGludGVy ZWs= IHJlcG9ydA== IHByb2R1 IHN0aWxs bGVk YWg= IGhlcmU= IHdvcmxk IHRob3VnaA== IG51bQ== YXJjaA== aW1lcw== YWxl IFNl IElm Ly8= IExl IHJldA== IHJlZg== IHRyYW5z bmVy dXRpb24= dGVycw== IHRha2U= IENs IGNvbmY= d2F5 YXZl IGdvaW5n IHNs dWc= IEFtZXJpYw== IHNwZWM= IGhhbmQ= IGJldHdlZW4= aXN0cw== IERl b290 SXQ= IGVhcg== IGFnYWluc3Q= IGhpZ2g= Z2Fu YXo= YXRoZXI= IGV4cA== IG9w IGlucw== IGdy IGhlbHA= IHJlcXU= ZXRz aW5z IFBybw== aXNt IGZvdW5k bGFuZA== YXRh dXNz YW1lcw== IHBlcnNvbg== IGdyZWF0 cHI= IHNpZ24= IEFu J3Zl IHNvbWV0 IHNlcg== aGlw IHJ1bg== IDo= IHRlcg== aXJlY3Q= IGZvbGxvdw== IGRldA== aWNlcw== IGZpbmQ= MTI= IG1lbQ== IGNy ZXJlZA== ZXg= IGV4dA== dXRo ZW5zZQ== Y28= IHRlYW0= dmluZw== b3VzZQ== YXNo YXR0 dmVk IHN5c3RlbQ== IEFz ZGVy aXZlcw== bWlu IGxlYWQ= IEJs Y2VudA== IGFyb3VuZA== IGdvdmVybg== IGN1cg== dmVsb3A= YW55 IGNvdXI= YWx0aA== YWdlcw== aXpl IGNhcg== b2Rl IGxhdw== IHJlYWQ= J20= Y29u IHJlYWw= IHN1cHBvcnQ= IDEy Li4uLg== IHJlYWxseQ== bmVzcw== IGZhY3Q= IGRheQ== IGJvdGg= eWluZw== IHNlcnY= IEZvcg== IHRocmVl IHdvbQ== IG1lZA== b2R5 IFRoZXk= NTA= IGV4cGVy dG9u IGVhY2g= YWtlcw== IGNoZQ== IGNyZQ== aW5lcw== IHJlcA== MTk= Z2c= aWxsaW9u IGdyb3U= dXRl aWs= V2U= Z2V0 RVI= IG1ldA== IHNheXM= b3g= IGR1cmluZw== ZXJu aXplZA== YXJlZA== IGZhbQ== aWNhbGx5 IGhhcHA= IElz IGNoYXI= bWVk dmVudA== IGdlbmVy aWVudA== cGxl aWV0 cmVudA== MTE= dmVz cHRpb24= IDIw Zm9ybWF0aW9u IGNvcg== IG9mZmlj aWVsZA== IHRvbw== aXNpb24= IGluZg== IFo= dGhl b2Fk IHB1YmxpYw== IHByb2c= cmlj Kio= IHdhcg== IHBvd2Vy dmlldw== IGZldw== IGxvYw== IGRpZmZlcmVudA== IHN0YXRl IGhlYWQ= J2xs IHBvc3M= IHN0YXQ= cmV0 YW50cw== IHZhbA== IGlzcw== IGNsZQ== aXZlcnM= YW5j IGV4cGw= IGFub3RoZXI= IFE= IGF2 dGhpbmc= bmNl V2g= IGNoaWxk IHNpbmNl aXJlZA== bGVzcw== IGxpZmU= IGRldmVsb3A= aXR0bGU= IGRlcA== IHBhc3M= 44M= IHR1cm4= b3Ju VGhpcw== YmVycw== cm9zcw== IEFk IGZy IHJlc3A= IHNlY29uZA== b2g= IC8= IGRpc2M= ICY= IHNvbWV0aGluZw== IGNvbXBsZQ== IGVk IGZpbA== IG1vbnRo YWo= dWM= IGdvdmVybm1lbnQ= IHdpdGhvdXQ= IGxlZw== IGRpc3Q= IHB1dA== IHF1ZXN0 YW5u IHByb3Q= MjA= IG5ldmVy aWVuY2U= IGxldmVs IGFydA== IHRoaW5ncw== IG1pZ2h0 IGVmZmVjdA== IGNvbnRybw== IGNlbnQ= IDE4 IGFsbG93 IGJlbGll Y2hvb2w= b3R0 IGluY3Jl IGZlZWw= IHJlc3VsdA== IGxvdA== IGZ1bg== b3Rl IHR5 ZXJlc3Q= IGNvbnRpbg== IHVzaW5n IGJpZw== MjAx IGFzaw== IGJlc3Q= ICk= SU4= IG9wcA== MzA= IG51bWJlcg== aW5lc3M= U3Q= bGVhc2U= IGNh IG11c3Q= IGRpcmVjdA== IGds IDw= IG9wZW4= IHBvc3Q= IGNvbWU= IHNlZW0= b3JkaW5n IHdlZWs= YXRlbHk= aXRhbA== IGVs cmllbmQ= IGZhcg== IHRyYQ== aW5hbA== IHByaQ== IFVT IHBsYWNl IGZvcm0= IHRvbGQ= Ijo= YWlucw== YXR1cmU= IFRydW1w IHN0YW5k ICM= aWRlcg== IEZy IG5leHQ= IHNvYw== IHB1cg== IGxldA== IGxpdHRsZQ== IGh1bQ== IGk= cm9u MTU= IDE1 IGNvbW11bg== IG1hcms= IFRoZXJl IHdy IFRoYXQ= IGluZm9ybWF0aW9u d2F5cw== IGJ1cw== YXBw IGludmVzdA== bWU= IGhhcmQ= YWluZWQ= ZWFk IGltcG9ydA== IGFwcHJv IHRlc3Q= IHRyaQ== IHJlc3Q= b3NlZA== IGZ1bGw= IGNhcmU= IFNw IGNhc2U= T04= IHNr IGxlc3M= ICs= IHBhcnRpYw== IFBs YWJseQ== dWNr aXNoZWQ= Y2hu YmU= IGxpc3Q= YXRvcg== IHRvcA== IGFkdg== IEJl cnVjdA== IGRlbQ== cmF0aW9u bGluZw== Z3k= cmVlbg== Z2Vy IGhvbWU= IGxlZnQ= IGJldHRlcg== IGRhdGE= IDEx IGF0dGFjaw== IHByb2JsZQ== bGluZQ== YXJkcw== IGJlaA== cmFs IEhvdw== IFNoZQ== YXJnZQ== IC0t Oi8v IGJybw== IFBo YXRz IGJ1aWxk d3c= aWRlZA== YWlt YXNlcw== ZW5jeQ== IG1haW4= aW5lZA== IGluY2x1ZGluZw== IHs= IGdvdA== IGludGVyZXN0 IGtlZXA= IFg= IGVhcw== YWluaW5n IGNsYXNz 4oCm IE5v IHZhcg== IHNtYWxs YW1wbGU= QVQ= IGlkZQ== IFNv IHJlY2U= IHBvbGl0 IG1vdg== IHBsYW4= IHBlcmNlbnQ= aXZpbmc= IGNhbXA= IHBheQ== MTQ= c2M= aXNlZA== IHVudA== b25leQ== cGxveQ== PT09PQ== IGRpZG4= IEluZA== ZWxz ZXJ0YWlu IHBvcw== X19fXw== aXZlcg== IHByb2Nlc3M= IHByb2dyYW0= aWZpZWQ= IFJlcA== MTY= dXJv b2xvZ3k= YXR0ZXI= aW5h IG5hbWU= IEFsbA== IGZvdXI= IHJldHVybg== dmlvdXM= YnM= IGNhbGxlZA== IG1vdmU= IFNj aXJk IGdyb3Vw IGJyZQ== IG1lbg== IGNhcA== dGVu ZWU= IGRyaQ== bGVn aGVyZQ== dXRob3I= IHBhdA== IGN1cnJlbnQ= aWRlcw== IHBvcA== dG8= ZW50aW9u IGFsd2F5cw== IG1pbA== IHdvbWVu IDE2 IG9sZA== aXZlbg== cmFwaA== IE9y cm9y ZW50bHk= IG5lYXI= IEV4 cmVhbQ== c2g= IDE0 IGZyZWU= aXNzaW9u c3RhbmQ= IENvbg== YWxpdHk= dXNlZA== MTM= IGRlc2lnbg== IGNoYW5nZQ== IGNoYW5n IGJv IHZpcw== ZW1iZXI= IGJvb2s= cmVhZHk= IGtpbGw= MjU= cHBlZA== IGF3YXk= IGFibGU= IGNvdW50cnk= IGNvbnN0 YXJu IG9yZGVy QVI= aW9y aXVt b3J0aA== MTg= YWlsYWJsZQ== IHN3 IG1pbGxpb24= IDEz YXRpYw== dGVk IEdv IG9wZXI= ZW5n IHRoaW5n YWpvcg== Y29ub20= IENvbW0= IHdoeQ== dXJlZA== dXJhbA== IHNjaG9vbA== Ynk= IE1hcg== IGFmZg== IGRheXM= IGFubg== dXNo YW5l SWY= ZWc= IHByb2Y= IGhlYWx0aA== b3V0aA== QnV0 aW9uYWw= Liw= IHNvbA== IGFscmVhZHk= IDMw IGNoYXJhY3Q= SGU= IGZyaWVuZA== RVM= aWFucw== aWNsZQ== J2Q= IE9u IGxlYXN0 IHByb20= IGRy IGhpc3Q= aXRoZXI= IGVzdA== aXF1 MTc= c29u IHRlbGw= IHRhbGs= b2hu b2ludA== bGVjdGlvbg== QU4= IHVudGls YXVnaA== IGxhdGVy IHZl IHZpZXc= ZW5kaW5n aXZlZA== IHdvcmQ= d2FyZQ== IGNvc3Q= IGVub3VnaA== IGdpdmU= IFVuaXRlZA== IHRlY2hu YXJlbnQ= T1I= IHBhcg== IERy IDIwMTY= cmlzdA== ZXJpbmc= IMI= IGxhcmdl c2lkZQ== YWN5 Y2Nlc3M= IHdpbg== IGltcG9ydGFudA== IDE5OQ== IGRvZXNu IDE3 IGJ1c2luZXNz IGNsZWFy IHJlc2U= Iiw= dXJ5 IGVxdQ== YXN0ZXI= YWxm IEFtZXJpY2Fu bmVjdA== IGV4cGVjdA== aXZlcnNpdHk= IG9jYw== IEZs IGtpbmQ= IG1lYW4= IHBhc3Q= IGRldg== IGJhcw== bGV0 cmFmdA== IG9yZ2Fu IGRlbA== IHBlcmZvcm0= IHN0b3J5 IHNlYXNvbg== IENvbA== IGNsYWlt IGNhbWU= IHdpdGhpbg== IGxpbmU= IHByb2plY3Q= IEF0 IGNvbnRyb2w= ZW5kZWQ= IFN5 IGFpcg== aXphdGlvbg== ICo= bGV5 IG1vbmV5 aWRk WW91 Zm9y IGZhbWlseQ== IG1ha2luZw== IGJpdA== IHBvbGljZQ== IGhhcHBlbg== IHZlcnM= b255 dWZm IFdoZW4= IHNpdA== aWRlbw== bGY= aXNvbg== IHN1cmU= Z2lu IGFwcGVhcg== IGxpZ2h0 IGVz b2Y= IHdhdGVy IHRpbWVz bm90 IGdyb3c= IGNvbXBhbnk= IFRl b3dz IG1hcg== b3VyY2U= aW9s YXJt YnI= IGV4YW1wbGU= IGNvbmM= IGZvcmU= IFRv cHJv RU4= cmllcw== IDI1 IENhbg== bmV5 IGFjdHVhbGx5 IGV2ZXI= dXJpdHk= YWtlbg== YXBz IHRheA== IG1ham9y YW1h IG9mdGVu ZXJhbA== IGh1bWFu IGpvYg== aXN0ZXI= IGF2YWlsYWJsZQ== b2Ny ZW5u YWlk aXZpZA== IHJlY29yZA== PyI= IHNpbmc= IEFt aWRlbmNl IG5ld3M= c3Rlcg== IGVjb25vbQ== IGZvbGxvd2luZw== IEJy aXNpbmc= IGhvdXI= bW9zdA== dW1lbnQ= IHNleA== IGRlc2M= IGJlY29tZQ== IEVk IHRvb2s= IGhhdmluZw== IHByb2R1Y3Q= YXVsdA== QXM= YXJpbmc= IG1lYW5z IGhvcA== dW5l IGNobw== IGNlcnRhaW4= IG5vbg== IGRlYWw= MjQ= bGVtZW50 b2Np ZW5l IHNpZGU= IFBy IE1heQ== IHJlYXNvbg== dWVk Y2hlZA== dWxhdGlvbg== IGVsZWN0 IG9mZmljaWFs IHBvc3NpYmxl IGhvbGQ= YW5kcw== b3Rz IGNpdHk= b3JpZXM= IHNldmVy IGNoaWxkcmVu IG9uY2U= IGFjdGl2 bGVy IG5pZ2h0 aXRpb25z IEpvaG4= YXBl cGxheQ== IGRvbmU= IGxpbQ== IHdvcmtpbmc= IFByZXM= b3JsZA== ZWI= IENv IGJvZHk= YWlscw== dXRlcw== IE1y IHdoZXRoZXI= IGF1dGhvcg== cm9w IHByb3Blcg== IHNlZW4= KTs= IGZhYw== IFN1 IGNvbmQ= aXRpbmc= IGNvdXJzZQ== IH0= LS0tLS0tLS0tLS0tLS0tLQ== YWlnbg== IGV2ZW50 IGVuZw== IHBvdA== IGludGVybg== aWFt IHNob3J0 ZW1wdA== 44I= IEdvZA== aWxhcg== ODA= IG9yaWc= SVM= b3Vybg== YWJpbGl0eQ== aXRpdmU= IGRhbQ== IDEwMA== IHByZXNz IGRvaW5n IHByb3RlY3Q= cmluZw== IHRob3VnaHQ= IHF1ZXN0aW9u cmV3 IFdhcg== IHNldmVyYWw= IFN0YXRl IGdpdmVu IGZ1bmQ= IFR3 IHdlbnQ= YW5jZXM= d29yaw== cG9y bXk= NDA= IGFyZw== YXJ0bWVudA== dXN0b20= IHBvbGlj IG1lZXQ= IGNyZWF0 MjI= IFN0YXRlcw== IGdhbWVz cmF3 dXR1cmU= IHVuZGVyc3RhbmQ= dXJz IE9i bGlzaA== c3k= IG1ha2Vz IHdvbg== YWdvbg== IGh0dA== IGxvdmU= ZW50aWFs IGNvbXBsZXRl cGFy IElt QUw= IGFjY291bnQ= wqA= b3JlZA== dmVydA== IGlkZW50 IDIwMTU= IG90aGVycw== IE1pbg== aWJlcg== dmVyYWdl VGhlcmU= aXRpb25hbA== ZGQ= IHByb2I= IHlvdW5n IGFsb25n IGFjY29yZGluZw== IHlldA== IG1lbWJlcnM= IFdoYXQ= b2lk IE1hbg== QW5k IGFtb25n YWk= IGVtcGxveQ== IFJlcw== ID4= IGludm9s IGxvdw== YWY= IENhcg== IGhpZw== IE9uZQ== IFNlYw== aW5hdGlvbg== IGxpa2VseQ== IGFudA== YWdlZA== IFJ1c3M= IGJlbg== IHJlbGU= Rm9y YmFjaw== IE5vdA== IHByZXNpZGVudA== YmFsbA== IGFjY2Vzcw== aXZpZHVhbA== IERlbQ== IEV1cm8= NjA= IGtub3du aXJs IEdy IGVhcmx5 dXNl aWV0eQ== 4oCT IGZpZ2h0 IHNlbnQ= IHRvZGF5 IG1hcmtldA== Ii4= IGJhc2Vk IHN0cm9uZw== dXJ0aGVy IGRlYg== bWJlcg== IHByb2JsZW0= IGRlYXRo IHNvY2lhbA== aW1hdGU= QVM= b3J0dW4= IGNhbXBhaWdu ZXJ5 Q2g= IGV5 aWFsbHk= IG11cw== d2g= cG9z IGVy IHNhZg== IG1vbnRocw== aXJvbg== IHZpb2w= IGZpdmU= IHN0cmU= IHBsYXllcnM= aW5j YWxk eWVhcg== YXVu IHN1Y2Nlc3M= IHByZXNlbnQ= ZXJlbmNl IDIwMTQ= IHN1Z2c= IHBhcnRpY3VsYXI= IHRyeQ== IHN1Z2dlc3Q= IENocmlzdA== b25lcw== IHByaXY= MjM= IGNyaXQ= IGxhbmQ= IGxvY2Fs aWZ5 Mjk= IGF1dA== RUQ= IEd1 IG11bHQ= IHBvbGl0aWNhbA== IGFza2Vk IGZvcm1lcg== aXR0ZXI= cmlwdA== IGNsb3Nl IHByYWN0 IFlvcms= IGdldHRpbmc= IGFjcm9zcw== IGNvbWI= IGJlbGlldmU= IHo= IHRvZ2V0 IHRvZ2V0aGVy IENlbnQ= aXJj IGluZGl2aWR1YWw= IE1j Mjc= aXNr IEVuZw== IGZhY2U= IDI0 IHZhbHVl IGFyZWE= ZXY= IHdyaXQ= IFByZXNpZGVudA== IHZvdA== IGtleQ== IG1vbQ== cHV0 IGFueXRoaW5n IGV4cGVyaWVuY2U= YXR0bGU= IG1pbmQ= YWZm b21t IGZ1dHVyZQ== Z2Vk IGN1dA== IHRvdA== aXRjaA== IHZpZGVv IGludmVzdGln IG5ldA== IE15 cmljdA== aWVu Lik= IGltcHJv dGhvdWdo d2FyZHM= IGNvbm5lY3Q= IE1lZA== c2VsdmVz ZW5zaXZl bWI= b2Jlcg== YXRvcnM= QW4= IDUw IHJlZHU= cmVzZW50 IGFib3Zl IGZyZQ== IEV1cm9wZQ== c3c= IGFtb3VudA== IEFwcA== IGVpdGhlcg== IG1pbGl0 IGFuYWw= IGZhaWw= IEVu YWxlcw== IHNwZWNpYWw= IGJsYWNr SVQ= Y2hlcg== IGxvb2tpbmc= IGZpcmU= eW4= IGFsbW9zdA== b29u IHN0dWR5 IG1pc3M= Y2hlcw== cm93bg== IHRyZQ== IGNvbW11bml0eQ== IG1lZGlh IGZvb2Q= IGNvbWVz IFVuaXZlcnNpdHk= IHNpbmdsZQ== V2hhdA== dWx5 IGhhbGY= YWd1ZQ== aG9k IFJlcHVibGlj IHN0YXJ0ZWQ= IHF1aWNr b3Rv Ym9vaw== IGlzc3Vl aXRvcg== IGVsc2U= IGNvbnNpZGVy MjY= cm9kdQ== IHRha2Vu Mjg= OTk= IFdpdGg= IHRydWU= IHdh IHRyYWQ= IGFnbw== IG1lc3M= aWVm IGFkZGVk b2tl IGJhZA== IGZhdg== MzM= IHNpbWlsYXI= YXNr IERvbg== IGNoYXJhY3Rlcg== b3J0cw== IEhvdXNl IHJlcG9ydGVk IHR5cGU= dmFs aW9k IEhvd2V2ZXI= IHRhcmc= IGVudGlyZQ== cHBpbmc= IGhpc3Rvcnk= IGxpdmU= ZmZpYw== Li4uLi4uLi4= ZWRlcmFs IHRyeWluZw== IGRpc2N1c3M= IEhhcg== YWNlcw== bGlzaGVk IHNlbGY= b3Nw cmVzdA== IHJvb20= ZWx0 IGZhbGw= b2x1dGlvbg== IGV0 IHg= IGlzbg== IGlkZWE= Ym8= IHNvdW5k IERlcA== IHNvbWVvbmU= Y2lhbGx5 dWxseQ== IGZvYw== IG9iamVjdA== aWZ0 YXBlcg== IHBsYXllcg== IHJhdGhlcg== IHNlcnZpY2U= YXNoaW5n IERv IFBhcnQ= cnVn bW9u cGx5 IG1vcg== IG5vdGhpbmc= IHByb3ZpZGU= SUM= dW5n IHBhcnR5 IGV4aXN0 IG1hZw== NzA= IHJ1bA== IGhvdXNl IGJlaGluZA== IGhvd2V2ZXI= IFdvcmxk IHN1bQ== IGFwcGxpYw== IDs= IGZ1bmN0aW9u Z3I= IFBvbA== IGZyb250 MjAw IHNlcmllcw== IHRlbQ== IHR5cA== aWxscw== IG9wdA== IHBvaW50cw== IGJlbG93 aXR0ZWQ= IHNwZWNpZmlj IDIwMTc= dW1i IHJh IHByZXZpb3Vz IHByZXQ= cmVtZQ== IGN1c3RvbQ== IGNvdXJ0 IE1l IHJlcGw= IHdob2xl Z28= Y2Vy IHRyZWF0 IEFjdA== IHByb2JhYmx5 IGxlYXJu ZW5kZXI= IEFzcw== IHZlcnNpb24= bm93 IGNoZWNr IENhbA== UkU= bWluaXN0 T24= b3VyY2Vz IGJlbmVm IGRvYw== IGRldGVy IGVuYw== IHN1cGVy IGFkZHJlc3M= IHZpY3Q= IDIwMTM= IG1lYXM= dHI= IGZpZWxk V2hlbg== IHNpZ25pZmlj dWdl IGZlYXQ= IGNvbW1vbg== bG9hZA== IGJlZ2lu IGJyaW5n IGFjdGlvbg== ZXJtYW4= IGRlc2NyaWI= IGluZHVzdA== IHdhbnRlZA== cmllZA== bWluZw== IGF0dGVtcHQ= NDU= ZmVy IGR1ZQ== cmVzc2lvbg== IyM= IHNoYWxs IHNpeA== b28= IHN0ZXA= IHB1Yg== IGhpbXNlbGY= IDIz IGNvcA== IGRlc3Q= IHN0b3A= QUM= aWJpbGl0eQ== IGxhYg== aWN1bHQ= IGhvdXJz IGNyZWF0ZQ== IGZ1cnRoZXI= IEFtZXJpY2E= IENpdHk= IGRvdQ== aGVhZA== U1Q= IE5vcnRo Y2luZw== IG5hdGlvbmFs dWxl IEluc3Q= IHRha2luZw== IFF1 aXJ0 IHJlZA== IHJlc2VhcmNo dmlyb24= IEdl IGJyZWFr YW5h IHNwYWNl YXRlcmlhbA== IHJlY2VudA== IEFi IGdlbmVyYWw= IGhpdA== IHBlcmlvZA== IGV2ZXJ5dGhpbmc= aXZlbHk= IHBoeXM= IHNheWluZw== YW5rcw== IGNvdQ== IGN1bHQ= YWNlZA== ZWFs dWF0aW9u IGNvdW4= bHU= IGluY2x1ZGU= IHBvc2l0aW9u IEFmdGVy IENhbmFk IEVt IGltbQ== IFJlZA== IHBpY2s= IGNvbXBs IG1hdHRlcg== cmVn ZXh0 YW5ndQ== aXNj b2xl YXV0 IGNvbXBldA== ZWVk ZmVjdA== IDIx IFNlbg== IFRoZXNl YXNpbmc= IGNhbm5vdA== IGluaXQ= IHJlbGF0aW9ucw== YWNoZWQ= IGJhcg== IDQw IFRI IDIwMTI= IHZvbA== IGdyb3VuZA== IHNlY3VyaXR5 IHVwZA== aWx0 MzU= IGNvbmNlcm4= IEp1c3Q= IHdoaXRl IHNlZW1z IEhlcg== cGVjaWFsbHk= aWVudHM= IGFubm91bg== IGZpZw== aWdodHM= IHN0cmk= bGlrZQ== aWRz IHN1cw== IHdhdGNo IOI= IHdpbmQ= IENvbnQ= IGl0c2VsZg== IG1hc3M= QWw= eWxl aXF1ZQ== IE5hdGlvbmFs IGFicw== IHBhY2s= IG91dHNpZGU= IGFuaW0= IHBhaW4= ZXRlcg== IG1hbmFn ZHVjdA== b2du IF0= IFNlcHQ= c2Vj b2Zm IEphbg== IGZvb3Q= YWRlcw== IHRoaXJk IG1vdA== IGV2aWRlbmNl aW50b24= IHRocmVhdA== YXB0 cGxlcw== Y2xl IGxv IGRlY2w= IGl0ZW0= bWVkaQ== IHJlcHJlc2VudA== b21i YW1lcg== IHNpZ25pZmljYW50 b2dyYXBo c3U= IGNhbA== aXJlcw== MDAwMA== SUQ= QU0= IHNpbXBseQ== IGxvbmdlcg== IGZpbGU= T1Q= Y2hl U28= YXRlZw== b3Jn IEhpcw== IGVuZXI= IGRvbQ== IHVwb24= aWxp Ijoi IHRoZW1zZWx2ZXM= IGNvbWluZw== IHF1aXRl IGRpZmZpY3VsdA== IEJhcg== aWxpdGllcw== cmVs ZW5kcw== Y2lhbA== NjQ= IHdvbWFu cmFw eXI= IG5lY2Vzcw== aXBz IHRleHQ= IHJlcXVpcmU= IG1pbGl0YXJ5 IHJldmlldw== IHJlc3BvbnM= NzU= IHN1YmplY3Q= IGluc3RlYWQ= IGlzc3Vlcw== IGdlbg== Iiwi IG1pbnV0ZXM= IHdlYXA= cmF5 YW1lZA== dGltZQ== Ymw= SG93 IGNvZGU= IFNt IGhpZ2hlcg== IFN0ZQ== cmlz IHBhZ2U= IHN0dWRlbnRz IEludGVybg== IG1ldGhvZA== IEF1Zw== IFBlcg== IEFn IHBvbGljeQ== IFN3 IGV4ZWM= IGFjY2VwdA== dW1l cmlidXQ= IHdvcmRz IGZpbmFs IGNoYW5nZXM= IERlbW9jcg== IGZyaWVuZHM= IHJlc3BlY3Q= IGVw IGNvbXBhbg== aXZpbA== IGRhbWFnZQ== KioqKg== b2dsZQ== dmlyb25tZW50 IG5lZw== ZW50YWw= IGFw IHRvdGFs aXZhbA== ISI= bGlt IG5lZWRz IGFncmU= IGRldmVsb3BtZW50 IGFnZQ== aXBsZQ== MjE= IHJlc3VsdHM= IEFm U2g= IGd1bg== IE9iYW1h cm9sbA== IEA= IHJpZ2h0cw== IEJyaXQ= IHJ1bm5pbmc= IHdhc24= IHBvcnQ= IHJhdGU= IHByZXR0eQ== IHRhcmdldA== IHNhdw== IGNpcmM= IHdvcmtz aWNybw== YWx0 b3Zlcg== d3d3 VGhhdA== bGllcg== IGV2ZXJ5b25l dWRl IHBpZQ== aWRkbGU= cmFlbA== IHJhZA== IGJsb2Nr IHdhbGs= VG8= 44E= bmVz IEF1c3Q= YXVs cm90ZQ== IFNvdXRo ZXNzaW9u b3Bo IHNob3dz IHNpdGU= IGpv IHJpc2s= Y2x1cw== bHQ= IGluag== aWRpbmc= IFNwZQ== IGNoYWxs aXJt IDIy aXR0aW5n c3Ry IGh5 TEU= a2V5 IGJlZ2Fu YXR1cg== YXNoaW5ndG9u bGFt IERhdg== Yml0 IHNpemU= IFBhcg== Mzg= b3VybmFs ZmFjZQ== IGRlY2lzaW9u IGxhcmc= IGp1ZA== cmVjdA== IGNvbnRpbnVl IE9jdA== b3ZlcmVk IEludA== PT09PT09PT0= IHBhcmVudA== IFdpbGw= IGVhc3k= IGRydWc= YW5nZXI= IHNlbnNl IGRp aWRheQ== IGVuZXJneQ== aXN0aWM= IGFzc29jaQ== YXJ0ZXI= b2JhbA== ZWtz IEVs dXJjaA== IGdpcmw= b2U= aXRsZQ== IDI4 IENoZQ== IHJlcXVlc3Q= IHNvb24= IGhvc3Q= a3k= IHN0YXRlcw== b21lcw== IG1hdGVyaWFs bGV4 IG1vbWVudA== IGFuc3c= b25zZQ== IGVzcGVjaWFsbHk= IG5vcm0= IHNlcnZpY2Vz cGl0ZQ== cmFu IHJvbGU= NDQ= KTo= IGNyZWQ= Q2w= X19fX19fX18= IG1hdA== IGxvZw== IENsaW50b24= T1U= IG9mZmljZQ== IDI2 IGNoYXJn IHRyYWNr bWE= IGhlYXJ0 IGJhbGw= IHBlcnNvbmFs IGJ1aWxkaW5n bmE= c2V0 Ym9keQ== IEJsYWNr IGluY3JlYXNl aXR0ZW4= IG5lZWRlZA== MzY= MzI= PSI= IGxvc3Q= IGJlY2FtZQ== IGdyb3Vwcw== IE11cw== IHdyb3Rl IFBl IHByb3A= am95 w6k= IFdoaXRl IGRlYWQ= Lic= IGh0dHA= IHdlYnM= T1M= IGluc2lkZQ== IHdyb25n IHN0YXRlbWVudA== IC4uLg== eWw= IGZpbG0= IG11c2lj IHNoYXJl aWZpY2F0aW9u IHJlbGVhc2U= IGZvcndhcmQ= IHN0YXk= IGNvbXB1dA== aXR0ZQ== c2Vy IG9yaWdpbmFs IGNhcmQ= IGNhbmQ= IGRpdg== YXR1cmFs IGZhdm9y T00= IGNhc2Vz dXNlcw== IHNlY3Rpb24= IGxlYXZl Z2luZw== b3ZlZA== IFdhc2hpbmd0b24= Mzk= IEds IHJlcXVpcmVk YWN0aW9u YXBhbg== b29y aXRlcg== IEtpbmc= IGNvdW50cmllcw== IEdlcm1hbg== bGxpbmc= IDI3 MzQ= IHF1ZXN0aW9ucw== IHByaW0= IGNlbGw= IHNob290 IGFueW9uZQ== IFdlc3Q= IGFmZmVjdA== ZXBlbmQ= IG9ubGluZQ== IElzcmFlbA== IFNlcHRlbWJlcg== IGFiaWxpdHk= IGNvbnRlbnQ= aXNlcw== IHJldmU= IGxhdW4= IGluZGlj IGZvcmNl Y2FzdA== IHNvbGQ= YXZpbmc= Zmw= IHNvZnQ= IGNvbXBhbmllcw== Y2VlZA== IGFydGljbGU= IGF1ZA== IHJldg== IGVkdWM= IHBsYXlpbmc= MDU= IGhlbGQ= Y3Rvcg== IHJlbGVhc2Vk IGZlZGVyYWw= Mzc= IGFkbWluaXN0 IGludGVydmlldw== IGluc3RhbGw= IHJlY2VpdmVk IHNvdXJjZQ== dWs= UGg= IHNlcmlvdXM= IGNyZWF0ZWQ= IGNhdXNl IGltbWVkaQ== IGRlZmlu dWVs IERlcGFydG1lbnQ= Y3Rpb25z IENvdXI= IE5vdw== emU= aXRlcw== aXR1dGlvbg== IGxhdGU= IHNwZWFr bmVycw== IGxlZ2Fs YXJp IENvcg== IHdlZWtz IG1vZGVs IHByZWQ= IGV4YWN0 QkM= IEJ5 SU5H b3Npbmc= IHRha2Vz IHJlZ2FyZA== IG9wcG9ydHVu IHByaWNl IDE5OA== IEFwcg== ZnVsbHk= IG9yZA== IHByb2JsZW1z cnVjdGlvbg== aGFt IENvdW50 bGVnZQ== IGxlYWRlcnM= RVQ= bGV2 IGRlZXA= b2xvZ2ljYWw= ZXNl aGFwcw== IFNvbWU= IHBlcnM= IGNvbnRyYWN0 IHJlbGF0aW9uc2hpcA== c3A= b3Vk IGJhc2U= NDg= bWl0 QWQ= YW5jaWFs IGNvbnN1bQ== IHBvdGVudGlhbA== IGxhbmd1 cmVt ZXRo IHJlbGln cmVzc2Vk NjY= IGxpbms= IGxvd2Vy YXllcg== IEp1bmU= IGZlbQ== dW50 ZXJj dXJk IGNvbnRhY3Q= IGlsbA== IG1vdGhlcg== IGVzdGFi aHR0 IE1hcmNo IEJybw== IENoaW5h IDI5 IHNxdQ== IHByb3ZpZGVk IGF2ZXJhZ2U= YXNvbnM= IDIwMTE= IGV4YW0= bGlu NTU= bmVk IHBlcmZlY3Q= IHRvdQ== YWxzZQ== dXg= IGJ1eQ== IHNob3Q= IGNvbGxlY3Q= IHBob3Q= IHBsYXllZA== IHN1cnBy IG9mZmljaWFscw== IHNpbXBsZQ== YXZ5 IGluZHVzdHJ5 IGhhbmRz Z3JvdW5k IHB1bGw= IHJvdW5k IHVzZXI= IHJhbmdl dWFyeQ== IHByaXZhdGU= b3Bz ZWVz IHdheXM= IE1pY2g= IHZlaA== IGV4Y2VwdA== IHRlcm1z aW11bQ== cHBlcg== SU9O b3Jlcw== IERyYWdvbg== b3Vs IGRlbg== IHBlcmZvcm1hbmNl IGJpbGw= Y2ls NDc= IGVudmlyb25tZW50 IGV4Yw== YWRk IHdvcnRo IHBpY3Q= IGNoYW5jZQ== IDIwMTg= Ym9y IHNwZWVk aWN0aW9u IGFsbGVn IEphcGFu YXRvcnk= cmVldA== IG1hdGNo IElJ IHN0cnU= b3JkZXI= IHN0ZQ== IGxpdmluZw== IHN0cnVjdA== aW5v IHNlcGFy aGVybg== IHJlc3BvbnNl IGVuam95 IHZpYQ== QUQ= dW1lbnRz YWNlYm9vaw== IG1lbWJlcg== aWJy aXppbmc= IHRvb2w= IE1vbg== IFdoaWxl aG9vZA== IEFuZw== IERlZg== IG9mZmVy VHI= YXVy IHR1cm5lZA== IEp1bHk= ZG93bg== YW5jZWQ= IHJlY2VudGx5 IEVhcg== IGNl IFN0YXI= IENvbmc= cm91Z2h0 IGJsb29k IGhvcGU= IGNvbW1lbnQ= YWludA== IGFycmk= aWxlcw== IHBhcnRpY2lw b3VnaHQ= cmlwdGlvbg== MDg= NDk= IGdhdmU= IHNlbGVjdA== IGtpbGxlZA== c3ljaA== IGdvZXM= aWo= IGNvbGw= IGltcGFjdA== YXRpdmVz IFNlcg== MDk= IEF1Z3VzdA== IGJveQ== ZGU= IERlcw== IGZlbHQ= VVM= IGV4cGVjdGVk IGltYWdl IE1hcms= Y2NvcmRpbmc= b2ljZQ== RUM= IE1hZw== ZW5lZA== aG9sZA== IFBvc3Q= IHByZXZlbnQ= Tm8= IGludm9sdmVk IGV5ZXM= IHF1aWNrbHk= QXQ= dW5r IGJlaGF2 IHVy IGxlZA== Y29tZQ== ZXk= IGNhbmRpZA== IGVhcmxpZXI= IGZvY3Vz ZXR5 UHJv bGVkZ2U= aXhlZA== aWxsZWQ= IHBvcHVsYXI= QVA= IHNldHQ= bGlnaHQ= IHZhcmlvdXM= aW5rcw== IGxldmVscw== IHJvYWQ= ZWxsaWc= YWJsZXM= aGVs aXR0ZWU= IEdlbmVy eXBl IGhlYXJk aWNsZXM= IG1pcw== IHVzZXJz IFNhbg== IGltcHJvdmU= IGZhdGhlcg== IHNlYXJjaA== VGhleQ== dmls IHByb2Zlc3M= IGtuZXc= IGxvc3M= IGV2ZW50cw== NjU= IGJpbGxpb24= MDc= MDI= IE5ld3M= IEFN IGNvdmVy d2hlcmU= ZW5zaW9u IGJvdHQ= IGFyZWFz ZW5jZXM= b3Bl IFR3aXR0ZXI= YWVs IGdldHM= IEdvb2dsZQ== IHNu aWFudA== IHZvdGU= IG5lYXJseQ== IGluY2x1ZGVk IHJlY29nbg== eno= bW0= YWxlZA== IGhhcHBlbmVk MDQ= IGhvdA== IHdob3Nl IGNpdmls IHN1ZmY= b2Vz aXRpeg== IFN5cmk= IHJlc3BvbmQ= IGhvbg== IGZlYXR1cmVz IGVjb25vbWlj IEFwcmls cmlt IHRlY2hub2xvZ3k= IG9wdGlvbg== YWdpbmc= IHB1cmNo UmU= IGxhdA== Y2hpZQ== aXNs IHJlY29tbQ== dWY= IHRyYWluaW5n IGVmZmVjdHM= IGZhc3Q= IDIwMTA= IG9jY3Vy IHdlYnNpdGU= IGVtYWls IHNlbnM= ZWNo IG9pbA== IGluZmx1 IGN1cnJlbnRseQ== IFNjaA== IEFkZA== IGdvYWw= IHNjaWVudA== IGNvbnY= MTAw ZW15 IGRlY2lkZWQ= IHRyYXZlbA== IG1lbnRpb24= TEw= MDM= IGVsZWN0aW9u IHBob25l IGxvb2tz IHNpdHVhdGlvbg== IGN5 IGhvcg== YmVk IENvdXJ0 YWlseQ== YXZlcw== IHF1YWxpdHk= IENvbXA= d2lzZQ== IHRhYmxl IHN0YWZm IFdpbmQ= ZXR0 IHRyaWVk aWRlcmVk IGFkZGl0aW9u IGJveA== IGxhY2s= YXJpbHk= IHdpZGU= IG1pZA== IGJvYXJk eXNpcw== IGFudGk= aGE= IGRpZw== ZW5pbmc= IGRybw== Q29u Njg= IHNsb3c= YmFzZWQ= c2VxdQ== IHBhdGg= RXg= YWtlcg== IHdvcmtlZA== IHBlbg== IGVuZ2luZQ== IGxvb2tlZA== IFN1cGVy IFNlcnY= IHZpY3RpbQ== VW4= IHByb3BlcnR5 IGludHJvZHU= IGV4ZWN1dA== IFBN TGU= IGNvbG9y IE1vcmU= IDYw IG5ldHdvcms= IGRhdGU= Y3Vs aWRnZQ== IGV4dHJh MzE= IHNsZQ== Njc= IHdvbmQ= IHJlcG9ydHM= anVzdA== IEF1c3RyYWw= IGNhcGl0YWw= IGVucw== IGNvbW1hbmQ= IGFsbG93ZWQ= IHByZXA= IGNhcHQ= aGli IG51bWJlcnM= Y2hhbg== IGZhaXI= bXA= b21z IHJlYWNo V2l0aA== dGFpbg== IGJyb2Fk IGNvdXBsZQ== ZWNhdXNl bHlpbmc= IEZlYg== IHNjcmVlbg== IGxpdmVz IHByaW9y IENvbmdyZXNz QXI= IGFwcHJvYWNo IGVtZXI= YXJpZXM= IERpcw== c2Vydg== IE5l IGJ1aWx0 Y2llcw== IHJlcGU= IHJ1bGVz Zm9yY2U= IFBhbA== IGZpbmFuY2lhbA== IGNvbnNpZGVyZWQ= IENoYXI= bmNlcw== IElT IGJyb3VnaHQ= IGJp aWVycw== IFNpbQ== T1A= IHByb2R1Y3Rz IHZpc2l0 IGRvY3VtZW50 IGNvbmR1Y3Q= IGNvbXBsZXRlbHk= aW5pbmc= IENhbGlm aWJseQ== IHdyaXR0ZW4= IFRW ZW1lbnRz IGRyYXc= T25l IHB1Ymxpc2hlZA== IHNlY3JldA== cmFpbg== aGV0 IEZhY2Vib29r b25kYXk= IFVw IHNleHVhbA== IHRob3Vz IFBhdA== IGVzcw== IHN0YW5kYXJk IGFybQ== Z2Vz ZWN0aW9u IGZlbGw= IGZvcmVpZ24= YW5p IEZyaWRheQ== IHJlZ3VsYXI= aW5hcnk= IGluY3JlYXNlZA== IHVzdWFsbHk= IGRlbW9u IGRhcms= IGFkZGl0aW9uYWw= cm9s IE9m IHByb2R1Y3Rpb24= ISE= dW5kcmVk IGludGVybmF0aW9uYWw= aWRlbnRz IEZyZWU= cm91cA== IHJhY2U= IG1hY2g= IGh1Z2U= QWxs bGVhcg== b3ZlbWJlcg== IHRvd24= IGF0dGVudGlvbg== IE9mZg== eW9uZA== IFRoZW4= ZmllbGQ= IHRlcnJvcg== cmF6 IEJv IG1lZXRpbmc= IFBhcms= IGFycmVzdA== IGZlYXI= IGF3 IFZhbA== b3Jpbmc= Jyw= IGV4dHJlbWU= YXJy IHdvcmtlcnM= QWZ0ZXI= IDMx bmV0 YW1lbnQ= IGRpcmVjdGx5 IHBvcHVsYXRpb24= dWJl IE9jdG9iZXI= IElO IEphbnVhcnk= NTk= IERhdmlk IGNyb3Nz Y2VtYmVy IEZpcnN0 IG1lc3NhZ2U= aXJpdA== IG5hdGlvbg== IHBvbGw= aXNpb25z IGFuc3dlcg== bnk= aXNvZGU= IGNhcnJ5 IFJ1c3NpYQ== IGhlYXI= ZW5ndGg= cm95 IG5hdHVyYWw= aW5hbGx5 IGRvZw== bWl0dGVk IHRyYWRl IHN1YnN0 IG11bHRpcGxl IEFmcmlj IGZhbnM= IHNvcnQ= IGdsb2JhbA== aWNhdGlvbg== IFdlZA== YXJh IGFjaGll IGxhbmd1YWdl dmV5 IHRhbA== IG5lY2Vzc2FyeQ== IGRldGFpbHM= IHNlbg== IFN1bmQ= IFJlZw== IFJlYw== MDY= IHNpbA== cmVzc2l2ZQ== IG1lZGljYWw= dW5jaA== b3JuaWE= IHVuZA== Zm9ydA== b2Nrcw== IE1vbmRheQ== dWVzZGF5 Y3JhZnQ= Nzc= dXJ0 IHZlcg== IEhpbGw= IHJlY2VpdmU= IG1vcm5pbmc= ZXN0ZXJu IGJhbms= IHNhdA== aXJ0aA== IEhpZ2g= IGRldmljZQ== IFRIRQ== IENlbnRlcg== IHNhZmU= IHBsZQ== IENhbmFkYQ== IHN5c3RlbXM= IGFzc2lzdA== IHN1cnY= IGJhdHRsZQ== IFNvYw== dmVydGlz U2hl IHBhcGVy IGdyb3d0aA== IGNhc3Q= U2M= IHBsYW5z bGxlZA== IHBhcnRz IHdhbGw= IG1vdmVtZW50 IHByYWN0aWNl aW1hdGVseQ== IGRpc3BsYXk= IHNvbWV0aW1lcw== b21w IFBhdWw= IFllcw== a2luZw== NTg= b2x5 IHNvbg== IGF2b2lk b2tlcw== IEpldw== IHRvd2FyZHM= YXNj IC8v IEtvcmU= IHRhbGtpbmc= IGNvcnJlY3Q= IHNwZW50 aWNrcw== aWFibGU= ZWFyZWQ= IHRlcm0= IHdhbnRz b21pbmc= IHV0 IGRvdWI= IGZvcmNlcw== IHBsZWFzZQ== Njk= IE5vdmVtYmVy YXRmb3Jt b25kb24= IG9uZXM= IGltbWVkaWF0ZWx5 IFJ1c3NpYW4= IE1ldA== IGRlZw== IHBhcmVudHM= Q0g= IEFtZXJpY2Fucw== YWx5 IE1vZA== IHNob3du IGNvbmRpdGlvbnM= IHN0dWZm IHJlYg== IFlvdXI= IGluY2x1ZGVz bm93bg== IFNhbQ== IGV4cGVyaWVu bWlzc2lvbg== IEV2ZW4= YXVnaHQ= IGFubm91bmNlZA== IFJlcHVibGljYW4= IGRldGVybWlu IGRlc2NyaWJlZA== IENvdW50eQ== KCk= IGRvb3I= IGNoYW5nZWQ= IG5laWdo IEhlcmU= IGNsZWFu IHBhbg== IERlY2VtYmVy IEV1cm9wZWFu aXJpbmc= YXB0ZXI= IGNsdWI= IFR1ZXNkYXk= IHBhaWQ= IE5ldA== IGF0dGFja3M= IGNoYXJhY3RlcnM= IGFsb25l IGRpcmVjdG9y ZG9t IDM1 IGxvYWQ= IHJvdXQ= IENhbGlmb3JuaWE= IGZpbmFsbHk= IHJhYw== IGNvbnRy IGV4YWN0bHk= cmVzaA== cHJp IElzbGFt IG5hdHVyZQ== IGNhcmVlcg== IGxhdGVzdA== IGNvbnZlcnM= IFNs cG9zZQ== Y2llbnQ= IEluYw== aXZpdHk= ODg= IEF0dA== IE1vcg== bmVzZGF5 IHdlaWdodA== a2Vu IG5vdGU= IHRlYW1z IFw= YWlycw== IEdyZWVu IGh1bmRyZWQ= b25lbnQ= IHN0cmVuZw== IGNvbnNpc3Q= aWNhdGVk IHJlZ3Vs IGxpYw== YXN0aWM= IHRlbg== dXJzZGF5 ZWxsaWdlbmNl b3VzbHk= IFVL Qkk= IGNvc3Rz IGluZGVwZW5k IEFQ IG5vcm1hbA== IGhvbQ== IG9idmlvdXM= IHN3ZQ== IHN0YXI= IHJlYWR5 YWNoZXI= IGltcGxlbWVudA== Z2VzdA== IHNvbmc= IEdldA== IExhYg== IGludGVyZXN0aW5n dXNpbmc= IGdpdmluZw== IFN1bmRheQ== IGV0Yw== IG1pZGRsZQ== IHJlbWVtYmVy cmlnaHQ= b3NpdGlvbg== dXRpb25z IG1heA== NDY= IHlvdXJzZWxm IGRlbWFuZA== IHRyZWF0bWVudA== IGRhbmdlcg== IENvbnM= IGd1eQ== IEJyaXRpc2g= IHBoeXNpY2Fs IHJlbGF0ZWQ= IHJlbWFpbg== IGNvdWxkbg== IHJlZmVy IGNpdGl6 Ym94 RU5U Ym9hcmQ= IGlubg== SUc= ZXJv IFN0cmVldA== b3NwaXRhbA== cmVuY2g= Y2hlcnM= IHN0cmE= T0w= YWdlcg== IEFO IGVhc2lseQ== SUE= ZW5nZQ== aW55 IGNsb3M= b2NrZWQ= IHVzZXM= IENvdW4= SW0= dWlsZA== Pz8= bW9yZQ== IGFuZw== IHdyaXRl b2x1dGU= NTc= IGxlYWRlcg== IHJlYWRpbmc= PC8= IGF1dG9t ZXN0cw== NDM= IGxlZ2lzbA== IEdvbGQ= IGRlc2lnbmVk IFNU IExlZw== YXJlcw== IGJlYXV0 IFRleA== IGFwcGVhcnM= IHN0cnVnZw== IFJvbQ== IDAw IGNob2ljZQ== IHBhcnRpY3VsYXJseQ== IEZyb20= b3Blcg== IExvbmRvbg== YW5uZWQ= IGFsbG93cw== b2JpbGU= IGRpZmZlcmVuY2U= 4oCi IFZpZXc= IFdlZG5lc2RheQ== IGFsdGhvdWdo IHJlbGF0aXZl IGFwcGxpY2F0aW9u YXRldmVy IGFyZW4= IG15c2VsZg== IGltYWc= IGRpc2U= IHNvY2lldHk= IGZyZXF1 IEVuZ2xpc2g= IHBvb3I= IERheQ== IHdyaXRpbmc= IHNldmVu IHN0YXJ0aW5n IGJ1ZA== IHByaW50 IFRyYW5z dWZhY3Q= IFN0dWQ= bmV3 IGNyaW0= IGdpdmVz IGNvb2w= YWU= aWFuY2U= IEdlbmVyYWw= IHRoaW5raW5n IHNhdmU= IGxpbWl0ZWQ= IFBhcnR5 IG1lYW5pbmc= cGVu b3dlcnM= IEphY2s= RU0= IG5pY2U= cnVwdA== IGdhcw== IGVpZ2h0 IGZlZXQ= IGVmZm9ydA== IGlnbg== aWNpdA== Qmw= Y29pbg== IG9waW4= IGJyYWlu V2hpbGU= aGVzdA== IFRodXJzZGF5 IHdvdWxkbg== YXVnaHRlcg== IHRvdWNo bGVtZW50cw== IHN0dWRpZXM= IGNlbnRlcg== Y29udA== b3JnZQ== IGNvbXB1dGVy IGludmVzdGlnYXRpb24= UGw= b3Jrcw== IDIwMDg= IGluY3JlYXNpbmc= IHN0b3Jl IGNvbW1lbnRz IGJhbA== bWVu IGRvbGw= IGxpYmVy IHdpZmU= IGxhd3M= YXR1cmRheQ== aXRuZXNz IG1vZGVybg== IFNr IGFkbWluaXN0cmF0aW9u IG9wcG9ydHVuaXR5 IHNhbA== IHBvd2VyZnVs TXk= IGNsYWltcw== IEVhcnRo b3Jkcw== IHRpdGxl IGVzYw== bmFtZQ== Tm90 b21lbg== IGJleW9uZA== IGNhbWVy IHNlbGw= aXR1dGU= ZWFyY2g= IGFwcGw= aW1lbnQ= NDI= IEFydA== IHVuZg== IHZpb2xlbmNl dXJn IEVhc3Q= IGNvbXBhcmVk IG9wdGlvbnM= IHRocm91Z2hvdXQ= IHZz aWdy Lls= YWNoZXM= Nzg= IGZpbGVz Rkw= RUw= YXJpYW4= IEphbWVz IEFpcg== YW5jaA== IGRldGFpbA== IHBpZWNl UFM= IG5hbWVk IGVkdWNhdGlvbg== IGRyaXZl IGl0ZW1z IHN0dWRlbnQ= aWNlZA== Ojo= aWNv IHRocm93 IHNjZW5l IGNvbXBsZXg= IDIwMDk= IHByZWM= IEJyZQ== Nzk= IGNvbmNlcHQ= IHN0YXR1cw== YW1pbmc= IGRpZWQ= IGtub3dsZWRnZQ== IGJlZ2lubmluZw== T0Q= cnVhcnk= IGNlcnRhaW5seQ== IGd1eXM= IHNsaWdodA== aW5u b3VuZHM= IGZpbmU= IGZhdA== aWNhdGlvbnM= IHBlcmhhcHM= IEFudA== IGluY29tZQ== IGh0dHBz IG1ham9yaXR5 cG9ydHM= c3Rvbg== IGdyZWF0ZXI= IGZlZWQ= ZW50aWFsbHk= IHNhZmV0eQ== IHVuaXF1ZQ== YW5kb20= IGdvbmU= IHNob3dlZA== IGhpc3Rvcg== IGNvdW50ZXI= aXVz aWRh IGxlYWRpbmc= aXBl IHNlbmQ= IERvbmFsZA== ZXJ2ZQ== IGRlZmVuc2U= aW5lc2U= IHllcw== IEZpcmU= IE11c2xpbQ== cmFx IGNvbnRpbnVlZA== b3No IHByb3ZpZGVz IHByaXNvbg== IFByZQ== IGhhcHB5 IGVjb25vbXk= IHRydXN0 YWdz IEdhbWU= IHdlYXBvbnM= dW1hbg== IENsZQ== aXRhdGlvbg== IGFuYWx5c2lz IFRpbWVz IHNjaWVuY2U= LT4= IGZpZ3VyZQ== IGRpc2FwcA== ZW50eQ== IHNvZnR3YXJl IHVsdA== IG9mZmljZXJz TmV3 SXM= IHJlbWFpbnM= IEluZGlh IHBzeWNo cmllZg== IGNhdA== ZXNj IG9ic2Vydg== IHN0YWdl IERhcms= IGVudGVy Y2hhbmdl IHBhc3NlZA== IGRlc3BpdGU= IE91dA== IG1vdmll cnM= IHZvaWNl bWluZQ== IFBsYXk= IHRvd2FyZA== IFRlcg== IHJlZ2lvbg== IHZhbHVlcw== b3J0ZXJz IG1vdW50 IG9mZmljZXI= IE90aGVy YmFu IGhvdXM= d29vZA== cm9vbQ== SVY= IFN1bg== c2Vl IE92ZXI= cm9n OTA= IGxheQ== IFR1cg== YXdu IHByZXNzdXJl IFN1Yg== IGJvb2tz ZWRvbQ== IFNhbmQ= QUE= YWdv IHJlYXNvbnM= Zm9yZA== IGFjdGl2aXR5 VVQ= Tm93 IFNlbmF0ZQ== Y2VsbA== bmlnaHQ= IGNhbGxz aW50ZXI= IGxldHRlcg== IFJvYg== IEpl IGNob29zZQ== IExhdw== R2V0 QmU= IHJvYg== IHR5cGVz IHBsYXRmb3Jt IHF1YXJ0ZXI= UkE= IFRpbWU= IG1heWJl IENy OTU= cHJl IG1vdmluZw== IGxpZg== IGdvbGQ= IHNvbQ== IHBhdGllbnRz IHRydXRo IEtl dXJhbmNl YW50bHk= bWFy IGNoYXJnZQ== IEdyZWF0 IGNlbGU= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHJvY2s= cm9pZA== YW5jeQ== IGNyZWRpdA== YXVk Qnk= IEV2ZXJ5 IG1vdmVk aW5nZXI= cmlidXRpb24= IG5hbWVz IHN0cmFpZ2h0 IEhlYWx0aA== IFdlbGw= IGZlYXR1cmU= IHJ1bGU= IHNjaGU= aW5hdGVk IE1pY2hhZWw= YmVyZw== NDE= aWxlZA== YmFuZA== IGNsaWNr IEFuZ2Vs b25lbnRz wq0= IElyYXE= IFNhdHVyZGF5 IGF3YXJl cGFydA== IHBhdHRlcm4= T1c= IExldA== IGdyYWQ= aWduZWQ= IGFzc29jaWF0ZWQ= IHN0eWxl bm8= aWF0aW9u YWl0aA== aWxpZXM= IHN0b3JpZXM= dXJhdGlvbg== IGluZGl2aWR1YWxz IOKApg== bWlzcw== IEFzc29jaQ== aXNoaW5n YWJ5 IHN1bW1lcg== IEJlbg== IDMy IGFyY2g= dXR5 IFRleGFz aG9s IGZ1bGx5 IG1pbGw= IGZvbGxvd2Vk IEJpbGw= IEluZGlhbg== IFNlY3JldA== IEJlbA== IEZlYnJ1YXJ5 IGpvYnM= IHNlZW1lZA== IEdvdmVybg== aXBwZWQ= IHJlYWxpdHk= IGxpbmVz IHBhcms= IG1lYXN1cmU= IE91cg== SU0= IGJyb3RoZXI= IGdyb3dpbmc= IGJhbg== IGVzdGlt IGNyeQ== IFNjaG9vbA== IG1lY2hhbg== IE9G IFdpbmRvd3M= IHJhdGVz IE9o IHBvc2l0aXZl IGN1bHR1cmU= aXN0aWNz aWNh IGhhcg== eWE= aXRlbHk= aXBw IG1hcA== ZW5jaWVz IFdpbGxpYW0= SUk= YWtlcnM= NTY= IE1hcnQ= IFJlbQ== IGFsdGVybg== aXR1ZGU= IGNvYWNo cm93ZA== RG9u IGtpZHM= IGpvdXJuYWw= IGNvcnBvcg== IGZhbHNl IHdlYg== IHNsZWVw IGNvbnRhaW4= IHN0bw== IGJlZA== aXZlcnNl IFJpY2g= IENoaW5lc2U= IHB1bg== IG1lYW50 a25vd24= IG5vdGljZQ== IGZhdm9yaXRl YXZlbg== IGNvbmRpdGlvbg== IHB1cnBvc2U= KSk= IG9yZ2FuaXphdGlvbg== IGNoYWxsZW5n IG1hbnVmYWN0 IHN1c3A= IEFj IGNyaXRpYw== dW5lcw== dWNsZWFy IG1lcg== dmVudGlvbg== IDgw IG1pc3Q= IFVz IFRvcg== aHR0cA== b2xm IGxhcmdlcg== IGFkdmFudA== IHJlc2Vhcg== IGFjdGlvbnM= bWw= IGtlcHQ= IGFpbQ== LCc= Y29s IGJlbmVmaXRz aWZ5aW5n IGFjdHVhbA== IEludGVybmF0aW9uYWw= IHZlaGljbGU= IGNoaWVm IGVmZm9ydHM= IExlYWd1ZQ== IE1vc3Q= IHdhaXQ= IGFkdWx0 IG92ZXJhbGw= IHNwZWVjaA== IGhpZ2hseQ== IGZlbWFsZQ== IGVycm9y IGVmZmVjdGl2ZQ== NTQ= IGVuY291cg== d2VsbA== IGZhaWxlZA== IGNvbnNlcnY= IHByb2dyYW1z IHRyb3U= IGFoZWFk NTAw dmVydGlzZW1lbnQ= SVA= IEZvdW5k cGly ICU= IGNyaW1l YW5kZXI= IGxvY2F0aW9u IElyYW4= IGJlaGF2aW9y YXppbmc= IHJhcmU= IGVtYg== IGNhdXNlZA== IHNoaXA= IGFjdGl2ZQ== IGNvbnRyaWJ1dA== IGdyZWVu IGFjcXU= IHJlZmxlY3Q= dmVudWU= IGZpcm0= IGJpcnRo XS4= IGNsZWFybHk= IGVtb3Q= IGFnZW5jeQ== cmlhZ2U= IG1lbW9yeQ== OTg= U0E= IFNlZQ== YWNpbmc= Q0M= IGJpZ2dlc3Q= IHJhcA== IGJhc2lj IGJhbmQ= ZWF0 IHN1c3BlY3Q= IE1hYw== IDkw bWFyaw== aXN0YW4= IHNwcmVhZA== YW1z a2k= YXN5 cmF2 IFJvYmVy IGRlbW9uc3Ry cmF0ZWQ= IGFic29sdXRl IHBsYWNlcw== IGltcGw= aWJyYXJ5 IGNhcmRz IGRlc3Ryb3k= IHZpcnQ= dmVyZQ== IGFwcGVhcmVk eWFu cG9pbnQ= IGJlZw== IHRlbXBlcg== c3Bl YW50ZWQ= ZWFycw== IERpcmVjdA== IGxlbmd0aA== IGJsb2c= YW1i IGludGVn IHJlc291cmNlcw== YWNj aWZ1bA== IHNwb3Q= IGZvcmNlZA== IHRob3VzYW5kcw== IE1pbmlzdGVy IHF1YWw= IEZyZW5jaA== YXRpY2FsbHk= IGdlbmVyYWxseQ== IGRyaW5r IHRodXM= SUw= b2Rlcw== IGFwcHJvcHJp IFJlYWQ= IHdob20= IGV5ZQ== IGNvbGxlZ2U= IDQ1 aXJlY3Rpb24= IGVuc3VyZQ== IGFwcGFyZW50 aWRlcnM= IHJlbGlnaW91cw== IG1pbm9y b2xpYw== IHRybw== IFdoeQ== cmlidXRl bWV0 IHByaW1hcnk= IGRldmVsb3BlZA== IHBlYWNl IHNraW4= c3Rl YXZh IGJsdWU= IGZhbWlsaWVz IGly IGFwcGx5 IGluZm9ybQ== IFNtaXRo Q1Q= aWk= IGxpbWl0 IHJlc2lzdA== Li4uLi4uLi4uLi4uLi4uLg== dW1u IGNvbmZsaWM= IHR3ZQ== dWRk IFRvbQ== IGxpdGVy cXVl Ym9u IGhhaXI= IGV2ZW50dWFsbHk= IHB1cw== IGhlbHBlZA== IGFnZw== b3JuZXk= IEFwcGxl IGZpdA== IFN1cg== IHByZW0= IHNhbGVz IHNlY29uZHM= IHN0cmVuZ3Ro IGZlZWxpbmc= v70= IHRvdXI= IGtub3dz b29t IGV4ZXJj IHNvbWV3 77+9 Pj4= IHNwb2tlcw== IGlkZWFz IHJlZ2lzdA== c29mdA== IERlbA== IFBD IHByb3Bvcw== IGxhdW5jaA== IGJvdHRvbQ== VEg= IFBsZWFzZQ== dmVzdA== aXR6 IEludGVy IHNjcmlwdA== IHJhdA== YXJuaW5n IGls IEplcg== IEFyZQ== IHdoYXRldmVy b2tlbg== Y2llbmNl IG1vZGU= IGFncmVl IHNvdXJjZXM= IGluaXRpYWw= IHJlc3RyaWN0 IHdvbmRlcg== dXNpb24= IyMjIw== IFNpbA== dmlsbGU= IGJ1cm4= dHc= YXNpb24= IMKj IG5vcg== dWluZw== IHJlYWNoZWQ= IHN1bg== IGNhdGVn aWdyYXRpb24= IGNvb2s= IHByb21vdA== IG1hbGU= IGNsaW1hdGU= IGZpeA== IGFsbGVnZWQ= VVI= YWxsZWQ= IGltYWdlcw== Q29udA== b3Rh IHNjaG9vbHM= aW9z IGRyb3A= IHN0cmVhbQ== IE1v IHByZXZpb3VzbHk= YWxpbmc= IHBldA== IGRvdWJsZQ== IChA YW5uZWw= IGRlZmF1bHQ= dGllcw== IHJhbms= IERlYw== IENvdW5jaWw= IHdlYXBvbg== IHN0b2Nr IGFuYWx5 IFN0cg== IHBpY3R1cmU= IFBvbGljZQ== ZmVyZW5jZQ== IGNlbnR1cnk= IGNpdGl6ZW5z IG9udG8= IGV4cGFuZA== IGhlcm8= IFNvbA== IHdpbGQ= IHVwZGF0ZQ== IGN1c3RvbWVycw== cm9udA== ZGVm IGxpaw== IGNyaW1pbmFs IENocmlzdGlhbg== U1A= NzY= IGxlYXZpbmc= IG90aGVyd2lzZQ== IERpc3Q= IGJhc2lz NTI= NTM= aWNpcA== IEJlcg== IHJlY29tbWVuZA== IGZsb29y IGNyb3dk b2xlcw== IDcw IGNlbnRyYWw= IEV2 IGRyZWFt IGRvd25sb2Fk IGNvbmZpcg== IFRob20= IHdpbmRvdw== IGhhcHBlbnM= IHVuaXQ= IHRlbmQ= IHNwbA== IGJlY29tZXM= IGZpZ2h0aW5n IHByZWRpY3Q= IFByZXNz IFBvd2Vy IGhlYXZ5 YWtlZA== IGZhbg== b3J0ZXI= YXRlZ3k= QkE= aXplcw== IHNwZW5k SGVyZQ== IDIwMDc= IGFkb3A= IEhhbQ== IGZvb3RiYWxs IFBvcnQ= b2RheQ== NTE= YW1waW9ucw== IHRyYW5zZmVy aHQ= IDM4 dGVybQ== YWNpdHk= IGJ1cg== XSw= dGVybmFs cmln YnV0 IHRoZXJlZm9yZQ== IEJlY2F1c2U= cmVzcA== cmV5 IG1pc3Npb24= U29tZQ== IG5vdGVk IGFzc3Vt IGRpc2Vhc2U= IGVkaXQ= IHByb2dyZXNz cmQ= IEJyb3du b2NhbA== IGFkZGluZw== IHJhaXNlZA== IEFueQ== IHRpY2s= IHNlZWluZw== IFBlb3BsZQ== IGFncmVlbWVudA== IHNlcnZlcg== IHdhdA== IGRlYmF0ZQ== IHN1cHBvc2Vk aWxpbmc= IGxhcmdlc3Q= IHN1Y2Nlc3NmdWw= IFByaQ== IERlbW9jcmF0aWM= IGp1bXA= IFN5cmlh IG93bmVycw== IG9mZmVycw== IHNob290aW5n IGVmZmlj c2V5 IGhhdmVu dmVyc2U= dGVyZWQ= IExpZ2h0 aW1hbA== IEJpZw== IGRlZmVuZA== IGJlYXQ= IHJlY29yZHM= JSk= IHNjZW4= IGVtcGxveWVlcw== IGRldmljZXM= aGVt IGNvbW1lcg== IE1leA== IGJlbmVmaXQ= IFByb2Y= IGlsbGVn IHN1cmZhY2U= IEFsc28= IGhhcm0= aW5nbHk= d2lkZQ== IEFsZXg= IHNodXQ= IEN1cg== IGxvc2U= cG0= IGNoYWxsZW5nZQ== c2VtYg== IHN0YXRpb24= IGludGVsbGlnZW5jZQ== IGFjY3Vy IEZsb3I= IHJlcXVpcmVz IE1hbA== YnVt IGhvc3BpdGFs IHNwaXJpdA== IG9mZmVyZWQ= IHByb2R1Y2U= IENvbW11bg== IGNyZWF0aW5n IGNyaXM= c3BlY3Q= IGVuZGVk IGRhaWx5 IHZvdGVycw== bGFuZHM= aWFz aWg= b25h IHNtYXJ0 IE9mZmljZQ== IExvcmQ= cmlhbA== IEludGVybmV0 IGNpcmN1bQ== IGV4dHJlbWVseQ== Jy4= IG9waW5pb24= IE1pbA== IGdhaW4= QlM= IEZpbg== eXA= IHVzZWZ1bA== IGJ1ZGdldA== IGNvbWZvcnQ= aXNm IGJhY2tncm91bmQ= ZWxpbmU= IGVwaXNvZGU= IGVuZW15 IHRyaWFs IGVzdGFibGlzaA== ZGF0ZQ== IENhcA== IGNvbnRpbnVlcw== IHNob3dpbmc= IFVuaW9u d2l0aA== IHBvc3RlZA== IFN5c3RlbQ== IGVhdA== cmlhbg== IHJpc2U= IEdlcm1hbnk= aWxz IHNpZ25lZA== IHZpbGw= IGdyYW5k bW9y IEVuZ2xhbmQ= IHByb2plY3Rz dW1iZXI= IGNvbmZlcmVuY2U= emE= IHJlc3BvbnNpYmxl IEFyYWI= IGxlYXJuZWQ= 4oCU4oCU aXBwaW5n IEdlb3JnZQ== T0M= IHJldHVybmVk IEF1c3RyYWxpYQ== IGJyaWVm UXU= IGJyYW5k aWxsaW5n YWJsZWQ= IGhpZ2hlc3Q= IHRyYWlu IENvbW1pc3Npb24= d2hpbGU= IG5vbQ== Y2VwdGlvbg== IG11dA== IEJsdWU= IGluY2lkZW50 dmFudA== ODY= IElE IG51Y2xlYXI= NzQ= IExpa2U= IFJF IE1pY3Jv bGk= bWFpbA== IGNoYXJnZXM= ODk= IGFkanVzdA== YWRv IGVhcnRo TkE= IHByaWNlcw== UEE= IGRyYWZ0 IHJ1bnM= IGNhbmRpZGF0ZQ== ZW5zZXM= IG1hbmFnZW1lbnQ= IFBoaWw= IE1pc3M= IHRlYWNo Z3JhbQ== IHVuZGVyc3RhbmRpbmc= YWl0 aWNhZ28= QWRk IEVw c2VjdXQ= IHNlcGFyYXRl IGluc3RhbmNl IGV0aA== IHVubGVzcw== KioqKioqKio= IEZvcmU= aW5hdGU= IG9wZXJhdGlvbnM= U3A= IGZhaXRo Z2Fy IENodXJjaA== cm9uaWM= IGNvbmZpZw== b3N1cmU= IGFjdGl2aXRpZXM= IHRyYWRpdGlvbmFs IDM2 IGRpcmVjdGlvbg== IG1hY2hpbmU= IHN1cnJvdW5k IHB1c2g= dW5jdGlvbg== IEVV IGVhc2llcg== IGFyZ3VtZW50 R0I= IG1pY3Jv IHNwZW5kaW5n aXphdGlvbnM= IHRoZW9yeQ== YWRvdw== IGNhbGxpbmc= IExhc3Q= IGRlcg== IGluZmx1ZW5jZQ== IGNvbW1pdA== IHBob3Rv IHVuYw== aXN0cnk= Z24= YXN0ZQ== YWNrcw== IGRpc3A= YWR5 ZG8= IEdvb2Q= IGA= IHdpc2g= IHJldmVhbGVk wqDCoA== bGln IGVuZm9yY2U= IENvbW1pdHRlZQ== IGNoZW0= IG1pbGVz IGludGVyZXN0ZWQ= IHNvbHV0aW9u aWN5 aW5jdA== IC0+ IERldA== IHJlbW92ZWQ= IGNvbXBhcg== ZWFo IHBsYW50 IFNpbmNl IGFjaGlldmU= IGFkdmFudGFnZQ== IHNsaWdodGx5 YmluZw== IHBsYWNlZA== dW5kZXI= MjAxNQ== IE1hZA== IHRpbQ== b3Nlcw== IGNydQ== IFJvY2s= IG1vc3RseQ== IG5lZ2F0aXZl IHNldHRpbmc= IHByb2R1Y2Vk IG11cg== IGNvbm5lY3Rpb24= IE1lcg== IGRyaXZlcg== IGV4ZWN1dGl2ZQ== IGFzc2F1bHQ= IGJvcm4= IFZlcg== dGFpbmVk IHN0cnVjdHVyZQ== IHJlZHVjZQ== IGRlY2FkZXM= IGRlZA== dWtl IE1hbnk= aWRkZW4= IGxlYWd1ZQ== U2U= IGpvaW4= IGRpc2Nv IGRpZQ== Y2tz YWN0aW9ucw== IGFzc2Vzcw== YWdu IGdvYWxz b3Vycw== SVI= IHNlbmlvcg== aWxsZXI= bW9k aXBtZW50 b2NvbA== dXk= IFF1ZQ== IHBhcnRpZXM= aXJnaW4= IGxlYXJuaW5n aXRhYmxl IHN0cmVldA== IGNhbWVyYQ== QXBw IHNraWxscw== YnJl Y2lvdXM= IGNlbGVicg== IEZyYW5j IGV4aXN0aW5n IHdpbGxpbmc= bG9y IGlk IFNwYWNl IGNyaXRpY2Fs IExh b3J0dW5hdGVseQ== IHNlcnZl IGNvbGQ= IHNwZWNpZXM= VFM= IGFuaW1hbHM= IEJheQ== IG9sZGVy IFVuZGVy ZXN0aWM= IFRyZQ== IHRlYWNoZXI= IHByZWZlcg== dmlz IHRocmVhZA== IE1hdHQ= IG1hbmFnZXI= 44O7 IHByb2Zlc3Npb25hbA== IFZvbA== IG5vdGVz VGhlc2U= dWxh IGZyZXNo ZW50ZWQ= dXp6 ZWR5 Y2x1c2lvbg== IFJlbA== IGRvdWJ0 RU8= IG9wZW5lZA== IEJpdA== QWR2ZXJ0aXNlbWVudA== IGd1ZXNz IFVO IHNlcXU= IGV4cGxhaW4= b3R0ZW4= IGF0dHJhY3Q= YWtz IHN0cmluZw== IGNvbnRleHQ= b3NzaWJsZQ== IFJlcHVibGljYW5z IHNvbGlk IGNpdGllcw== IGFza2luZw== IHJhbmRvbQ== dXBz dXJpZXM= YXJhbnQ= ZGRlbg== Z2w= IEZsb3JpZGE= IGRlcGVuZA== IFNjb3R0 IDMz IGlU aWNvbg== IG1lbnRpb25lZA== IDIwMDA= IGNsYWltZWQ= IGRlZmluaXRlbHk= dWxm IGNvcmU= IG9wZW5pbmc= IENvbnN0 d2hpY2g= IFRyYQ== QUc= NzI= IGJlbGlldmVk YWRh IDQ4 IFNlY3VyaXR5 eXJpZ2h0 IFBldA== IExvdQ== IGhvbGRpbmc= PT09PT09PT09PT09PT09PQ== IGljZQ== IGJyb3c= IGF1dGhvcml0aWVz aG9zdA== d29yZA== IHNjb3Jl IERpdg== IGNlbGxz IHRyYW5zbA== IG5laWdoYm9y IHJlbW92ZQ== dWN0 IGRpc3RyaWN0 IEFjY29yZGluZw== IHdvcnNl IGNvbmNlcm5z IHByZXNpZGVudGlhbA== IHBvbGljaWVz IEhhbGw= NzM= IGh1cw== QVk= IDIwMDY= IEp1ZA== IGluZGVwZW5kZW50 IEp1c3RpY2U= aWxpYXI= cHJpbnQ= aWdodGVy IHByb3RlY3Rpb24= emVu IHN1ZGRlbg== aG91c2U= IEplcw== UFI= IEluZg== IGJ1bA== IF8= IFNlcnZpY2U= IFBS IHN0cmF0ZWd5 ZmZlY3Q= IGdpcmxz IG1pc3Npbmc= b3lhbA== IFRlYW0= dWxhdGVk IGRhdA== IHBvbGl0aWNz YWJvcg== QWNjb3JkaW5n IHNwZWxs IGdyYXBo b3J0aGVybg== VEM= QWI= IGxhYm9y aXNoZXI= IGtpY2s= IGlUdW5lcw== IHN0ZXBz cG9zZXM= IHNtYWxsZXI= RW4= YmVydA== IHJvbGw= IHJlc2VhcmNoZXJz IGNsb3NlZA== IHRyYW5zcG9ydA== IGxhd3k= X19fX19fX19fX19fX19fXw== IENoaWNhZ28= IGFzcGVjdA== IG5vbmU= IG1hcnJpYWdl OTY= IGVsZW1lbnRz IEZyZQ== IFNhbA== IGRyYW0= RkM= dG9w ZXF1 IGhlYXJpbmc= IHN1cHBvcnRlZA== IHRlc3Rpbmc= Y29ob2w= IG1hc3NpdmU= IHN0aWNr IGd1YXJk aXNjbw== cGhvbmU= RnJvbQ== SG93ZXZlcg== IGJvcmRlcg== IGNvcHk= b2dyYXBoeQ== bGlzdA== NzE= IG93bmVy Y2xhc3M= cnVpdA== cmF0ZQ== IE9uY2U= IGRpZ2l0YWw= IHRhc2s= RVJT IGluY3JlZA== dGVz Kys= IEZyYW5jZQ== IGJyZWF0 b3ds IGlzc3VlZA== IFdlc3Rlcm4= IGRldGVjdA== IHBhcnRuZXJz IHNoYXJlZA== IENhbGw= IGNhbmNlcg== YWNoZQ== cmliZQ== IGV4cGxhaW5lZA== IGhlYXQ= eyI= IGludmVzdG1lbnQ= IEJvb2s= IHdvb2Q= IHRvb2xz IEFsdGhvdWdo IGJlbGllZg== IGNyaXNpcw== IGdl IE1Q IG9wZXJhdGlvbg== dHlwZQ== fn4= Z2E= IGNvbnRhaW5z YW50YQ== IGV4cHJlc3M= IEdyb3Vw IEpvdXJuYWw= a2E= IGFtYg== IFVTQQ== IGZpbmRpbmc= IGZ1bmRpbmc= aG93 IGVzdGFibGlzaGVk aWRlb3M= IGRlZ3JlZQ== IGRhbmdlcm91cw== YW5naW5n IGZyZWVkb20= cHBvcnQ= b3V0aGVybg== IGNodXJjaA== IGNhdGNo IFR3bw== IHByZXNlbmNl IEd1YXJk VXA= IGF1dGhvcml0eQ== IFByb2plY3Q= IGJ1dHRvbg== IGNvbnNlcXU= IHZhbGlk IHdlYWs= IHN0YXJ0cw== IHJlZmVyZW5jZQ== IE1lbQ== Iik= VU4= b3JhZ2U= IE9wZW4= IGNvbGxlY3Rpb24= eW0= Z2VuY3k= IGJlYXV0aWZ1bA== cm9z IHRlbGxz IHdhaXRpbmc= bmVs IHByb3ZpZGluZw== IERlbW9jcmF0cw== IGRhdWdodGVy IG1hc3Rlcg== IHB1cnBvc2Vz IEphcGFuZXNl IGVxdWFs IHR1cm5z IGRvY3VtZW50cw== IHdhdGNoaW5n UmVz IHJhbg== MjAxNA== IHJlamVjdA== IEtvcmVh IHZpY3RpbXM= TGV2ZWw= ZXJlbmNlcw== IHdpdG5lc3M= IDM0 IHJlZm9ybQ== Y29taW5n IG9jY3Vw IGNhdWdodA== IHRyYWZmaWM= YWRpbmc= IG1vZGVscw== YXJpbw== IHNlcnZlZA== IGJhdHRlcg== dWF0ZQ== IFNlY3JldGFyeQ== IGFncmVlZA== IHRydWx5 eW5hbQ== IFJldA== IHVuaXRz IFJlc2VhcmNo aGFuZA== YXppbmU= IE1pa2U= IHZhcmlldHk= b3RhbA== IGFtYXppbmc= IGNvbmZpcm1lZA== IGVudGlyZWx5 IHB1cmNoYXNl IGVsZW1lbnQ= IGNhc2g= IGRldGVybWluZQ== RGU= IGNhcnM= IFdhbGw= 4pY= IHZpZXdz IGRydWdz IGRlcGFydG1lbnQ= IFN0ZXA= dWl0 IDM5 YXN1cmU= IENsYXNz IGNvdmVyZWQ= IEJhbms= IG1lcmU= dWFuYQ== IG11bHRp IG1peA== IHVubGlrZQ== bGV2aXNpb24= IHN0b3BwZWQ= IHNlbQ== IEdhbA== dWxlcw== IHdlbA== IEpvaG5zb24= bGE= IHNraWxs IGJlY29taW5n cmll IGFwcHJvcHJpYXRl ZmU= ZWxsb3c= IFByb3Q= dWxhdGU= b2NhdGlvbg== IHdlZWtlbmQ= b2RpZXM= IHNpdGVz IGFuaW1hbA== IFRpbQ== IHNjYWxl IGNoYXJnZWQ= IGluc3RydWN0 aWxsYQ== IG1ldGhvZHM= IGNlcnQ= IGp1ZGdl IEhlbA== IGRvbGxhcnM= IHN0YW5kaW5n IFNxdQ== IGRlYnQ= bGlhbQ== IGRyaXZpbmc= IFN1bQ== IEVkaXRpb24= IGFsYnVt YW5kb24= SUY= IFVr NjM= YWRlcg== IGNvbW1lcmNpYWw= ZXNo IEdvdmVybm1lbnQ= IGRpc2NvdmVyZWQ= IG91dHB1dA== IEhpbGxhcnk= IENhcm9s IDIwMDU= IGFidXNl YW5jaW5n IHN3aXRjaA== IGFubnVhbA== VHc= IHN0YXRlZA== YWdlbWVudA== aW5uZXI= IGRlbW9jcg== IHJlc2lkZW50cw== IGFsbG93aW5n IGZhY3RvcnM= b2Rk IGZ1Y2s= ZW1pZXM= IG9jY3VycmVk b3Rp IG5vcnRo IFB1YmxpYw== IGluanVyeQ== IGluc3VyYW5jZQ== Q0w= b2xseQ== 44A= IHJlcGVhdGVk IGFybXM= YW5nZWQ= IGNvbnN0cnVjdGlvbg== IGZsZQ== UFU= aWNpYW5z IGZvcm1z IE1jQw== YW50aWM= IG1lbnRhbA== cGlyZQ== IGVxdWlwbWVudA== IGZhbnQ= IGRpc2N1c3Npb24= IHJlZ2FyZGluZw== a2lu YXJw IGNoYWly b2d1ZQ== IHByb2NlZWQ= IElk T3Vy IG11cmRlcg== TWFu IDQ5 YXNw IHN1cHBseQ== IGlucHV0 IHdlYWx0aA== bGlhbWVudA== IHByb2NlZA== b3JpYWw= IFN0YXQ= IE5GTA== aGVucw== IEluc3RpdHV0ZQ== IHB1dHRpbmc= b3VybmFtZW50 ZXRpYw== IGxvY2F0ZWQ= IGtpZA== ZXJpYQ== cnVu IHByaW5j ICE= Z29pbmc= IEJldA== IGNsb3Q= IHRlbGxpbmc= IHByb3Bvc2Vk aW90 b3JyeQ== IGZ1bmRz Z21lbnQ= IExpZmU= IGJhYnk= IEJhY2s= IHNwb2tl SW1hZ2U= IGVhcm4= IEFU Z3U= IGV4Y2hhbmdl IExpbg== b3Zpbmc= IHBhaXI= TW9yZQ== YXpvbg== IGFycmVzdGVk IGtpbGxpbmc= Y2Fu IENhcmQ= eWQ= IGlkZW50aWZpZWQ= IG1vYmlsZQ== IHRoYW5rcw== b255bQ== IEZvcm0= IGh1bmRyZWRz IENocmlz IENhdA== IHRyZW5k aGF0 IEF2 b21hbg== IGVsZWN0cmlj IFdpbA== U0U= T2Y= IHJlc3RhdXI= b3RlZA== IHRyaWc= IG5pbmU= IGJvbWI= V2h5 wq8= IGNvdmVyYWdl IGFwcGVhbA== IFJvYmVydA== IFN1cA== IGZpbmlzaGVk IGZsb3c= IGRlbGl2ZXI= IGNhbGN1bA== IHBob3Rvcw== IHBoaWw= IHBpZWNlcw== IGFwcHJl a2Vz IHJvdWdo RG8= IHBhcnRuZXI= IGNvbmNlcm5lZA== IDM3 IEdlbg== Q29s Y3RvcnM= ID0+ c3RhdGU= IHN1Z2dlc3RlZA== IEZvcmNl Q0U= IGhlcnNlbGY= IFBsYW4= d29ya3M= b290aA== cmVuY3k= IGNvcm5lcg== IGh1c2JhbmQ= IGludGVybmV0 IEF1dA== ZW1z b3Nlbg== IEF0bA== Z2Vu IGJhbGFuY2U= NjI= IHNvdW5kcw== dGV4dA== IGFycg== b3Zlcw== IG1pbGxpb25z IHJhZGlv IHNhdGlzZg== IERhbQ== TXI= R28= U3Bl IGNvbWJhdA== cmFudA== IEdyZWU= IGZ1ZWw= IGRpc3RhbmNl IHRlc3Rz IGRlY3Jl IEVy IG1hbmFnZWQ= RFM= IHRpdA== IG1lYXN1cmVz IExpYmVy IGF0dGVuZA== YXNoZWQ= IEpvc2U= IE5pZ2h0 ZGl0 IE5vdg== IEVuZA== b3V0cw== IGdlbmVyYXRpb24= IGFkdm9j eXRo IGNvbnZlcnNhdGlvbg== IFNreQ== YWN0aXZl Y2Vs cmllcg== IEZyYW5r IGdlbmRlcg== IGNvbmNlbnQ= IGNhcnJpZWQ= YW5kYQ== IFZpcmdpbg== IGFycml2ZWQ= aWNpZGU= YWRlZA== IGZhaWx1cmU= IG1pbmltdW0= bGV0cw== IHdvcnN0 IGtlZXBpbmc= IGludGVuZGVk IGlsbGVnYWw= IHN1YnNj IGRldGVybWluZWQ= IHRyaXA= WWVz IHJhaXNl IH4= IGZlZWxz IHBhY2thZ2U= IEpv aGk= MjAxNg== cmVhbA== IGZyYQ== IHN5bWI= TWU= dWNreQ== cHJldA== IEto IEVkaXQ= IFdlYg== ZW1pYw== IENvbG9y IGp1c3RpY2U= SW50 IGZhcm0= Y2tub3c= Ij4= ZWxlc3M= IHJlZHVjZWQ= IDUwMA== eHg= IFJhZA== IFdvb2Q= IGNsaW4= IGh5cA== aWxlcg== dXJh a2lucw== ODU= NjE= IFRoZWly IE1hcnk= IHNhbg== IG5vdmVs IFdobw== IGNhcGFjaXR5 IGltcG9zc2libGU= IHBsYXlz IG1pbmlzdGVy aWp1YW5h aWNhdGU= IFNldA== IGZyYW0= IGluZw== IGNvbW11bml0aWVz IEZCSQ== aXRh IGJvbg== IHN0cmF0ZWc= IGludGVyZXN0cw== bG9jaw== Z2Vycw== bWFz IEFORA== IGNvbmZsaWN0 IHJlcXVpcmVtZW50cw== IHNhYw== IG9wZXJhdGluZw== aW5p cmVsYXRlZA== IGNvbW1pdHRlZA== IHJlbGF0aXZlbHk= IHNvdXRo wq/Crw== IGFmZm9yZA== IGlkZW50aXR5 IGRlY2lzaW9ucw== IGFjY3VzZWQ= cGxhY2U= IHZpY3Rvcnk= b2No aWF0 TmFtZQ== Q29t dGlvbg== ZWRz IHNlZWs= IHRpZ2h0 IEltYWdlcw== IGluaXRp IGh1bWFucw== IGZhbWlsaWFy IGF1ZGllbmNl IGludGVybmFs dmVudHVyZQ== IHNpZGVz IFRP IGRpbQ== IGNvbmNsdWQ= IGFwcG9pbnQ= IGVuZm9yY2VtZW50 IEppbQ== IEFzc29jaWF0aW9u IGNpcmN1bXN0 IENhbmFkaWFu IGpvaW5lZA== IGRpZmZlcmVuY2Vz IExvcw== IHByb3Rlc3Q= IHR3aWNl d2lu IGdsYXNz YXJzaA== IEFybXk= IGV4cHJlc3Npb24= IGRlY2lkZQ== IHBsYW5uaW5n YW5pYQ== IGhhbmRsZQ== IE1pY3Jvc29mdA== IE5vcg== IG1heGltdW0= IFJldg== IHNlYQ== IGV2YWw= IGhlbHBz cmVm IGJvdW5k IG1vdXRo IHN0YW5kYXJkcw== IGNsaW0= IENhbXA= IEZveA== Y2xlcw== IGFybXk= IFRlY2hu YWNraW5n eHk= U1M= IDQy IGJ1Zw== IFVrcmFpbg== IE1heA== IEpvbmVz IFNob3c= bG8= IHBsYW5ldA== IDc1 IHdpbm5pbmc= IGZhc3Rlcg== IHNwZWN0 IGJyb2tlbg== VFI= IGRlZmluZWQ= IGhlYWx0aHk= IGNvbXBldGl0aW9u aHR0cHM= IElzbGFuZA== IEZl IGFubm91bmNl IEN1cA== IEluc3RlYWQ= IGNsaWVudA== IHBvc3NpYmx5 c2VjdGlvbg== b2NrZXQ= bG9vaw== IGZpbmlzaA== IGNyZXc= IHJlc2Vydg== IGVkaXRvcg== IGhhdGU= IHNhbGU= IGNvbnRyb3ZlcnM= IHBhZ2Vz d2luZw== IG51bWVy IG9wcG9zaXRpb24= IDIwMDQ= IHJlZnVnZQ== IGZsaWdodA== IGFwYXJ0 IExhdA== QW1lcmlj IEFmcmljYQ== IGFwcGxpY2F0aW9ucw== IFBhbGVzdA== IEJ1cg== IGdhcg== IFNvY2lhbA== IHVwZ3I= IHNoYXBl IHNwZWFraW5n YW5zaW9u YW8= IFNu IHdvcnJ5 IEJyaXRhaW4= UGxlYXNl cm91ZA== IGh1bg== IGludHJvZHVjZWQ= IGRpZXQ= SW5k IFNlY29uZA== IGZ1bmN0aW9ucw== dXRz IEVhY2g= IEplZmY= IHN0cmVzcw== IGFjY291bnRz IGd1YXJhbnQ= IEFubg== ZWRpYQ== IGhvbmVzdA== IHRyZWU= IEFmcmljYW4= IEJ1c2g= fSw= IHNjaA== IE9ubHk= IGZpZg== aWdhbg== IGV4ZXJjaXNl IEV4cA== IHNjaWVudGlzdHM= IGxlZ2lzbGF0aW9u IFdvcms= IFNwcg== w4I= IEh1bWFu IOg= IHN1cnZleQ== IHJpY2g= cmlw IG1haW50YWlu IGZsbw== IGxlYWRlcnNoaXA= c3RyZWFt IElzbGFtaWM= IDAx IENvbGxlZ2U= IG1hZ2lj IFByaW1l IGZpZ3VyZXM= MjAxNw== aW5kZXI= eHVhbA== IERlYWQ= IGFic29sdXRlbHk= IGZvdXJ0aA== IHByZXNlbnRlZA== cmVzcG9uZA== cmlibGU= IGFsY29ob2w= YXRv IERF cG9yYXJ5 IGdyYWI= IHZhcmk= IHF1YW50 IFBob3Rv IHBsdXM= cmljaw== YXJrcw== IGFsdGVybmF0aXZl IHBpbA== IGFwcHJveA== dGhhdA== IG9iamVjdHM= IFJv IEFuZHJvaWQ= IHNpZ25pZmljYW50bHk= IFJvYWQ= a2F5 UmVhZA== YXZvcg== IGFja25vdw== IEhE IFNpbmc= T3I= IE1vbnQ= IHVucw== cHJvZg== IG5lZ290aQ== IEFyY2g= aWtp IHRlbGV2aXNpb24= IEpld2lzaA== IGNvbW1pdHRlZQ== IG1vdG9y IGFwcGVhcmFuY2U= IHNpdHRpbmc= IHN0cmlrZQ== IERvd24= Y29tcA== IEhpc3Q= IGZvbGQ= YWNlbWVudA== IExvdWlz IGJlbG9uZw== IOKAog== IG1vcnQ= IHByZXBhcmVk IDY0 IE1hc3Rlcg== IGluZGVlZA== IERlbg== IHJlbnQ= VEE= b3VybmV5 YXJj U3U= OTc= IGFkdmljZQ== IGNoYW5naW5n IGxpc3RlZA== IGxhdW5jaGVk aXNhdGlvbg== IFBldGVy aXNoZXM= IGxpdmVk IE1lbA== IFN1cHJlbWU= IEZlZGVyYWw= ICk7 cnVjdHVyZQ== IHNldHM= IHBoaWxvcw== dW91cw== IMKg IGFwcGxpZWQ= IE5PVA== IGhvdXNpbmc= IE1vdW50 IG9kZA== IHN1c3Q= REE= ZmZpY2llbnQ= ID8= b2x2ZWQ= IHBvd2Vycw== IHRocg== IHJlbWFpbmluZw== IFdhdGVy TEM= IGNhdXNlcw== 44Gu IG1hbm5lcg== YWRz IHN1Z2dlc3Rz IGVuZHM= c3RhbmRpbmc= Zmln IER1bg== aWR0aA== IGdheQ== IHRlcm1pbg== IEFuZ2VsZXM= TVM= IHNjaWVudGlmaWM= IGNvYWw= YXBlcnM= YmFy IFRob21hcw== IHN5bQ== IFJ1bg== dGhpcw== UEM= aWdyYW50cw== IG1pbnV0ZQ== IERpc3RyaWN0 Y2VsbGVudA== IGxlYXZlcw== IGNvbXBsZXRlZA== YW1pbg== IGZvY3VzZWQ= IG1vbml0b3I= IHZlaGljbGVz TUE= IE1hc3M= IEdyYW5k IGFmZmVjdGVk aXR1dGlvbmFs IGNvbnN0cnVjdA== IGZvbGxvd3M= IHRvbg== cmVlbnM= IGhvbWVz IEV4dA== IExldmVs cmFzdA== IEly IGVsaW0= IGxhcmdlbHk= IEpvZQ== IHZvdGVz YWxscw== IGJ1c2luZXNzZXM= IEZvdW5kYXRpb24= IENlbnRyYWw= IHlhcmRz IG1hdGVyaWFscw== dWxuZXI= IGd1aWRl IGNsb3Nlcg== dW1z IHNwb3J0cw== ZWRlcg== SnVzdA== IHRheGVz ODQ= IE9sZA== IGRlY2FkZQ== b2xh IHZpcg== IGRyb3BwZWQ= IGRlbGF5 aXRlY3Q= IHNlY3VyZQ== c3RlaW4= bGV2ZWw= IHRyZWF0ZWQ= IGZpbGVk YWluZQ== IHZhbg== IG1pcg== IGNvbHVtbg== aWN0ZWQ= ZXBlcg== IHJvdA== IGNvbnN1bHQ= IGVudHJ5 IG1hcmlqdWFuYQ== IERvdQ== IGFwcGFyZW50bHk= b2tpbmc= Y2x1c2l2ZQ== IGluY3JlYXNlcw== YW5v IHNwZWNpZmljYWxseQ== IHRlbGU= ZW5zaW9ucw== IHJlbGlnaW9u YWJpbGl0aWVz IGZyYW1l IE5vdGU= IExlZQ== IGhlbHBpbmc= IGVkZ2U= b3N0b24= IG9yZ2FuaXphdGlvbnM= w4M= IEJvdGg= aGlwcw== IGJpZ2dlcg== IGJvb3N0 IFN0YW5k IHJvdw== dWxz YWJhc2U= IHJpZA== TGV0 YXJlbg== cmF2ZQ== IHN0cmV0 UEQ= IHZpc2lvbg== IHdlYXJpbmc= IGFwcHJlY2k= IGF3YXJk IFVzZQ== IGZhY3Rvcg== d2Fy dWxhdGlvbnM= KSg= IGdvZA== IHRlcnJpdA== IHBhcmFt YXN0cw== ODc= IGVuZW1pZXM= IEdhbWVz RkY= IGFjY2lkZW50 V2VsbA== IE1hcnRpbg== VEVS IGF0aA== IEhlbGw= IGZvcmc= IHZldGVy IE1lZGlj ZnJlZQ== IHN0YXJz IGV4cGVuc2l2ZQ== IGFjYWQ= cmF3bg== IFdoZQ== IGxvY2s= IGZvcm1hdA== IHNvbGRpZXJz c20= IGFnZW50 IHJlc3BvbnNpYmlsaXR5 b3Jh IFNjaWVuY2U= IHJhcGlk IHRvdWdo IEplc3Vz IGJlbGlldmVz TUw= IHdlYXI= bGV0ZQ== w4PDgg== IERyaQ== IGNvbW1pc3Npb24= IEJvYg== T2g= YXBlZA== IHdhcm0= w4PDgsODw4I= IDIwMDM= b3J0aW9u IGhhc24= dXN0ZXI= IHVuaXZlcnM= IElsbA== IGtpbmc= b2xvZ2llcw== OTQ= IFRlbQ== IE1vcw== IHBhdGllbnQ= IE1leGljbw== Y2Vhbg== IERlYXRo IFNhbmRlcnM= eW91 IENhc3Q= IENvbXBhbnk= cHR5 IGhhcHBlbmluZw== RlA= IEJhdHRsZQ== IGJvdWdodA== QW0= TW9k VXM= dXRlcnM= IENyZQ== IFRob3Nl IDQ0 aXNlcg== IHNvdWw= IFRvcA== IEhhcnJ5 IEF3 IHNlYXQ= ZmZlZQ== IHJldm9sdXRpb24= ICgi IER1cmluZw== ZXR0ZQ== IHJpbmc= IG9mZmVuc2l2ZQ== IHJldHVybnM= IHZpZGVvcw== IGRpc2Ns IGZhbW91cw== ZW5jZWQ= IFNpZ24= IFJpdmVy IDMwMA== UE0= IEJ1cw== IENI IGNhbmRpZGF0ZXM= YXJkZW4= IHBlcmNlbnRhZ2U= IHZpc3VhbA== IHRoYW5r IHRyb3VibGU= bmVyZ3k= IDIwMDE= IHByb3Zl YXNoaW9u IGVuaA== IExvbmc= VU0= IGNvbm5lY3RlZA== IHBvc3NpYmlsaXR5 T3Zlcg== IGV4cGVydA== IGxpYnJhcnk= YXJ0cw== IERpcmVjdG9y IGZlbGxvdw== OTI= aXJ0eQ== IGRyeQ== IHNpZ25z IExvdmU= IHF1aWV0 Zm9vdA== IHB1cmU= IEh1bg== IGZpbGxlZA== cGhhcw== IEVsZWN0 ZW5kbWVudA== IEV4cGw= IHVuYWJsZQ== bnM= bW8= IHZhc3Q= b2Jl IGlkZW50aWZ5 YXBwaW5n IENhcm9saW5h Z3Jlc3M= IHByb3Rl IGZpc2g= IGNpcmN1bXN0YW5jZXM= cmF6eQ== IFBob3Q= IGJvZGllcw== IE11cg== IGRldmVsb3Bpbmc= IEFS IGV4cGVyaWVuY2Vk IHN1YnN0YW50 IEJvYXJk ZXNvbWU= IGRvbWVzdGlj IGNvbWJpbmVk IFB1dA== IGNoZW1pY2Fs IENoaWxk IHBvb2w= IEN5 IGVnZw== Y29ucw== c3RlcnM= IGh1cnQ= IG1hcmtldHM= IGNvbnNlcnZhdGl2ZQ== IHN1cHBvcnRlcnM= IGFnZW5jaWVz aWRlbA== T2I= dXJi IDQz IERlZmVuc2U= eWU= IEFw ZHVsZQ== IHRlbXBlcmF0dXJl IGNvbmR1Y3RlZA== IENoaWVm IHB1bGxlZA== IGZvbA== TGFzdA== b250bw== b3Npcw== VkVS RGVz IFBhbg== Rmlyc3Q= IGFkdmFuY2U= IGxpY2Vuc2U= cm9ycw== IEpvbg== IGltYWdpbmU= IGhlbGw= IGZpeGVk IGluY29y b3NpdGU= IExvZw== aWNrZW4= XTo= IHN1cnByaXNl aGFi IGNyYWZ0 b2x0 IEp1bA== IGRpYWw= IHJlbGV2YW50 IGVudGVyZWQ= IGxlYWRz IEFE IENsZWFu IHBpY3R1cmVz ZXNzb3I= IGFsdA== IHBheWluZw== UGVy IE1hcmtldA== IHVwZGF0ZXM= YW1pbHk= IFR5cGU= IEhvbWU= IDU1 c2VtYmx5 cm9tZQ== ODM= IGdyZWF0ZXN0 IGhlaWdodA== IGhlYXY= YWludHM= IGxpc3Rlbg== YXNlcg== IFNI IGNhcGFibGU= YWNsZQ== IHBlcnNwZWN0 aW5hdGluZw== IG9mZmVyaW5n cnlwdA== IERldmVsb3A= YWJpbg== cmM= IGJyaWdodA== YWx0eQ== YXJyb3c= IHN1cHBs aW5kaW5n YWNrZWQ= Z3lwdA== IEFub3RoZXI= cGc= IFZpcmdpbmlh IEx1 IHBsYW5uZWQ= IHBpdA== IHN3ZWV0 VHlwZQ== IERp IHR5cGljYWxseQ== IEZyYW5jaXNjbw== IHByb3NwZWN0 IERhbg== IHRlZW4= cmVlcw== IHNjaGVk IGhvbA== IHNjcg== IGxvdHM= bGlmZQ== IG5ld3Nw IGZvcmdldA== IE5vbmU= IE1pZGRsZQ== IFJ5YW4= ZWRk IHNldmVyZQ== IHN1aXQ= bGxlcg== OTM= IGNvcnJlc3BvbmQ= IGV4cGxvcw== dWF0aW9ucw== IGZsYWc= Z2FtZQ== cmlk IHByaW4= IERhdGE= IGRlcGxveQ== IEVudGVy c3VpdA== Z2hhbg== IE1lbg== IHRob3VnaHRz IG1hdHRlcnM= IGFkYXB0 IEFyaQ== IGZpbGw= IGZvcnRo IHNhbQ== IDQx IHBheW1lbnQ= IEhvcg== IHNwcmluZw== ZHVj IGxvc2luZw== IGJyaW5naW5n Rk8= YWxh IGRpc3RyaWJ1dGlvbg== aGVyZWQ= Ym91cg== IElzcmFlbGk= b21h IGNvbWJpbmF0aW9u IHBsZW50eQ== VkU= Q2Fu IEhhdw== IHBlcm1hbg== IFNwZWNpYWw= IHRvdw== IHNlZWtpbmc= IGV4YW1wbGVz IGNsYXNzZXM= Y3I= IGJlZXI= IG1vdmVz IElQ IEtu IHBhbmVs RXZlbg== IHByb3Blcmx5 IHJpcw== IHBsdWc= IGVzdGltYXRlZA== RXZlcnk= IGRlZmVuc2l2ZQ== YWdyYXBo IHByZWdu IGluc3RpdA== IFZpY3Q= IHZvbHVtZQ== IHBvc2l0aW9ucw== IGxpbmtz IFByb2dyYW0= IFdlZWs= YWd1ZXM= IHRyYW5zZm9ybQ== a2Vy IENFTw== IGNhcw== IG9wcG9uZW50 IHR3ZWV0 IENvZGU= IHNob3A= IGZseQ== IHRhbGtz IGJhZw== UGhvbmU= IGFpZA== IHBsYW50cw== IDY1 IGF0dG9ybmV5 YXJ0ZXJz cXVlc3Q= IE1hZ2lj IGJlZ2lucw== IG15c3Rlcg== IGVudmlyb25tZW50YWw= IHN0b3JhZ2U= Tk4= IG1hcmc= IHNrZQ== IG1ldGFs ZWxseQ== IG9yZGVyZWQ= IHJlbWFpbmVk IGxvdmVk IHByb21wdA== IHVwZGF0ZWQ= IGV4cGVydHM= IHdhbGtpbmc= IGFuY2llbnQ= IHBlcmZvcm1lZA== QVRF IG5laXRoZXI= aWVuY3k= IG1hbnVmYWN0dXJl IFBhaw== IHNlbGVjdGVk IG1pbmU= IHVsdGltYXRlbHk= IGV4cGxhbg== IGxhYmVs IFNlcnZpY2Vz cmlidXRlZA== VHJ1bXA= IHN5bg== IFVsdA== U0M= IG1lYXQ= IGdpYW50 IFdhcnM= IE9O IGFkbQ== IGludGVycHJldA== IGV2ZW5pbmc= IGV2aWw= IEJvc3Rvbg== IFdpbGQ= IMM= IEJpdGNvaW4= IEFtYXpvbg== RHI= IEluZm9ybWF0aW9u IG9idmlvdXNseQ== IGFkdmFuY2Vk UGhvdG8= b2xhcg== IHdlYXRoZXI= IHN5bWJvbA== IHNvbGU= IHBvdGVudGlhbGx5 b3N0ZXI= IG9yaWdpbmFsbHk= bXVu MzAw YXpl ZXNzaW9ucw== IGRlY2s= IHN0b29k IHlvdXRo IEJlcm4= UmVw IFRlc3Q= IGJhc2ljYWxseQ== b3RpYw== IGludm9sdmU= b2xpdA== bHlu U2Vl IGFpcmNyYWZ0 IGNvbmZpcm0= RVc= IG1lc3NhZ2Vz IFJpY2hhcmQ= IGtpdA== IHByb2hpYg== IHZ1bG5lcg== aXN0ZXJz IGV4aXN0ZW5jZQ== IHR1cm5pbmc= IFNQ IGRlc2lyZQ== IGZsYXQ= IG1lbnQ= c2Vhc29u YW5nZXM= IG5laWdoYm9yaG9vZA== IExha2U= QVRJT04= IHBvaW50ZWQ= YnVy IGlubm92 dWNrcw== VUw= IHByb2Zlc3Nvcg== IGV4cHJlc3NlZA== QUI= aWNpb3Vz IDIwMDI= IERldg== IHNlc3Npb24= IGJhcmU= c2Vu IGRpc3M= IENhdGg= IFBhc3M= IFBvaW50 IGRvY3Rvcg== b3Jyb3c= YWlsZWQ= IFJ1Yg== IERD IENoYXJs cGVyc29u IHdyaXRlcg== aWdodGVycw== dXJlYXU= IG9ibGln IHJlY29yZGVk IGJyb2tl IG9yZGVycw== aWx0eQ== IG1vdGlvbg== aW5pdHk= bGF3 YWRpdW0= IGltbWlncmF0aW9u IGNvbnRyYXN0 IGJhdHQ= IGV4Y2VsbGVudA== IHRlY2huaWNhbA== YW1p IHR1bg== IGNsb3Vk IFllYXI= Z2Vvbg== IGNyZWF0aW9u IHN0cmFuZ2U= IGF1dGg= IGZvcnQ= Ym9ybg== IGV4dGVudA== IFRvZGF5 IENsdWI= IHJhaW4= IHNhbXBsZQ== IGFjY2VwdGVk IHRhY3Q= IGZpcmVk IFNvbg== IHN0YW5kcw== IGJvb3Q= IDQ3 IHN0YXRlbWVudHM= IHZlcnNpb25z IHNlbGxpbmc= b3VuZGVk IDE5OTA= IHdlcmVu IFdhdGNo IGV4cGVyaW1lbnQ= UG9zdA== IHJldGFpbA== dWxlZA== SW5zdA== dW50ZQ== 44O8 IGRlcGFydA== IGJvbmQ= aXZlcnk= b21wbA== IHJlYWN0aW9u IFN5cmlhbg== IFBhYw== YXBwZWQ= YW5pZWw= RFA= IHJlc29sdXRpb24= IHJlYWN0 IGFwcHJvdmVk b25vbQ== bW9uZA== IE9mZmlj LS0t IHJlcGxhY2U= IHRhY2s= IHNwb3J0 IGNoYWlu IGVtZXJnZW5jeQ== cmFk IFBhbGVzdGlu IDQ2 IGF1dG9tYXRpY2FsbHk= IHJvdXRl IHBhbA== IGJhbmtz IFBhcmlz IE1lZGlh cm9hZA== aWNpbmc= aXh0 aXN0ZWQ= IGdyZXc= IGNvb3Jk IFdoZXJl b21pbg== IHN1YnM= 77+977+9 IMKx IGNvcnBvcmF0ZQ== IHNlbGVjdGlvbg== bm9vbg== IFJlcG9ydA== Y3M= Y2x1ZGluZw== b3JkZXJz YW5jaGU= IEl0cw== IHNsb3dseQ== IEVneXB0 IEFjYw== IGNvbGxl aXF1ZXM= RVg= IGF0dGVtcHRz dXJs IENyb3Nz IGZpbmRpbmdz IFND IE9S IGluZGV4 ZW5zaXR5 IFdheQ== IExhbmQ= IHNob2Nr ZGlz IGR5bmFt IGNhcnQ= bW9zcA== U2luY2U= aWVzdA== IEJveQ== IHN0b3Jt IENvbnRpbg== MjAxMw== aGV3 aWxpdA== IGVzc2VudGlhbA== aXF1aWQ= T3RoZXI= aXZlcmVk IHJlYXNvbmFibGU= QWN0 IHN1YnNlcXU= IFBhY2s= IEZvcnQ= IGNvbnNpZGVyaW5n IHVuaXZlcnNpdHk= bG9n IG1hcnJpZWQ= IGlsbHVzdA== IFRydWU= o48= IG51bWVyb3Vz cmFzdHJ1Y3R1cmU= IHNlcmlvdXNseQ== IHJlZmVycmVk dWE= IGNvbnNpc3RlbnQ= b25uYQ== IFJlYWw= cnVwdGlvbg== Y2lwbGVz IGZhY3Rz OTE= b3Rlcw== ZXJn VGhlbg== IGFjY29tcGw= Tm90ZQ== IHJldmVudWU= IHBhc3Npbmc= IG1hbA== ZWVu IFlldA== IGdhdGhlcg== dGVyZGF5 ZXdvcms= IEF1dGhvcg== UGU= IG9wdGlt IHJ1Yg== IOijjw== IHVua25vd24= c3RvbmU= IHVuaW9u b2x2ZQ== IG9wcG9ydHVuaXRpZXM= IGJyb3dzZXI= IFdhbA== IENvc3Q= IHJlcG9ydGluZw== c3Rz cGV0 IHNhbmQ= IHN1ZGRlbmx5 IHN1cnByaXNpbmc= IFZS IHNvbWV3aGF0 IEJhcw== dWx0dXJl aXp6 IENE IGNoYWxsZW5nZXM= IHNldHRpbmdz IGV4cGVyaWVuY2Vz IEZ1bGw= IGNhbm4= IHJlY2VpdmluZw== RVNU IGpvaW50 IGN1bHR1cmFs IGFzdA== ODI= YXN0ZXJu Y2VpdmVk IENydQ== IGJ1bGw= cGlyZWQ= YW1t IGZhY2luZw== cG93ZXI= IGJvc3M= IEhvbA== IGluc3Ry IGluY3JlYXNpbmdseQ== IHNoaWZ0 IHN0cmVldHM= IFdpbGxpYW1z YWJi IGxpZQ== IGxhdWdo IENh UEw= IGFkdWx0cw== IGN1c3RvbWVy IG9idGFpbmVk IHN1cHBvcnRpbmc= aHRtbA== ZmlyZQ== IGRldGFpbGVk IHBpY2tlZA== IFJpZ2h0 bGRlcg== RUU= c3Rvb2Q= IEtpbQ== IHdpcmU= IHNpZ2h0 IGRldmVsb3BlcnM= IHBlcnNvbnM= IHNhZA== IGN1cA== IHdhcm5pbmc= IGJveXM= bG9uZw== IGJpcmQ= Zm8= IHdhbA== IG9ic2VydmVk IHpvbmU= aXZlbmVzcw== IGNoYW5uZWw= Y3JpcHQ= IHJlZnVzZWQ= IEFnYWlu IHN1Yw== IHNwb2tlc21hbg== IFJlZg== cml0ZQ== b3VzdG9u 44Oz IFNoZXI= IGFjdHM= IE5hbWU= IHN0cnVnZ2xl YXJyeQ== b21ldGltZXM= IGRpc2NyaW0= SFQ= IGNhdGVnb3J5 IHJlYWxpemU= IGVtcGxveWVl IEFmZ2hhbg== ZW5nZXI= IGd1bnM= IFN0ZXZl IE1vdA== IE9s b2tlZA== IHRoaWNr IGZhaXJseQ== aWxseQ== IHN1cnZl IE1hdA== d2VpZ2h0 4pQ= IHRyb29wcw== IGFnZW50cw== IGJhdHRlcnk= IG1vdGl2 w6E= U2Vj ZGVu b3Zlcnk= TFM= IGZsdQ== IGNvbmZpZGVudA== IE9wZXI= IGVtcHR5 IHBoZW4= IHNlY3Rvcg== IGV4Y2l0ZWQ= IHJlbW90ZQ== YXBo b2Vu IGRlc3Ryb3llZA== IG1vcmFs IEhQ IFJvbg== IGRyZXNz IEJhdA== IGxpdA== IE1T IGFm SEw= cnVt aXNtcw== IHNob3VsZG4= IHN5bXB0 IFRvcm9udG8= aGV0aWM= IGNhcmJvbg== IGluc3RhbGxlZA== IHZpb2xlbnQ= IHNvbGFy amE= IHByYWN0aWNlcw== IHJpZGU= IFBlbm4= IGltcHJvdmVk IGF1ZGlv IGJlaGF2aQ== IFBT IGVhdGluZw== RGF0YQ== IFJldmlldw== cGFzcw== Y2xhaW0= dWF0ZWQ= YW5nZXJz Y2hlbg== IHByb3BlcnRpZXM= IGFueXdoZXJl QW5vdGhlcg== IGJsb3c= IEphY2tzb24= IHByb3Vk IHBsYW5l bGluZXM= IHNxdWFyZQ== IHByb29m YW5zYXM= IHRhbGtlZA== bWFrZXJz IHNpc3Rlcg== IGhvbGRz IHJlc2lkZW50 ID09 IHJlc2lzdGFuY2U= IHNwbGl0 IHByb3NlY3V0 IGNvbmZpZGVuY2U= cmVzZW50cw== IGN1dHM= IGV4Y2VwdGlvbg== IHplcm8= R2V0dHk= IGNvcHlyaWdodA== IHRvdGFsbHk= b3JtYWw= aWZpY2F0aW9ucw== IEF1c3RyYWxpYW4= IHNpY2s= IDE1MA== IGhvdXNlaG9sZA== IGZlZXM= IGRyaXZlcnM= b2dlbg== IE5Z IG5lY2Vzc2FyaWx5 IHJlZ3VsYXRpb25z ZWFyaW5n c2w= IHBlcnNwZWN0aXZl Y2FyZQ== aWNpYWw= SGlz IGVzY2FwZQ== IHN1cnByaXNlZA== IFZhbg== dXJyZW50 IHZhYw== ODE= IFRodXM= IGVtcGhhcw== IENoYW1waW9ucw== IEljZQ== IG5hcnI= IGhlYWRz IGNhdXNpbmc= YmVs Zm9ydHVuYXRlbHk= IE1h IHRhcmdldHM= Y2lwbA== IGFmdGVybm9vbg== IGFkZHM= IE1heWJl IEZvdXI= ZXNzZWQ= cGxldGU= IHVzdWFs Y2hv aW5ndQ== IHdpdGhk IEVuZXJneQ== IEVjb25vbQ== T08= IGFydGljbGVz IGluanVyZWQ= IG1hbmFnZQ== IGV4cGxhaW5z IGRpYWdu UmVj YXR1cmVz IGxpbmtlZA== IGRpc2N1c3NlZA== IGV4cGxv IG9jY2FzaW9u YXRoYW4= IG9wcG9zaXRl IGZhY2Vz IGRlbmllZA== IEtuaWdodA== IG51dA== IGFwcHJveGltYXRlbHk= IGRpc2FwcG9pbnQ= b255bW91cw== IEJlc3Q= IExv IEh5 IEFmZg== IHZvdGluZw== YW53aGlsZQ== IElJSQ== IGluc3RpdHV0aW9ucw== YWdyYW0= IERhaWx5 IGRyYWc= IG5lYXJieQ== IGd1aWx0eQ== IGNvbnZlcg== UHJl c2hpcA== IHJld2FyZA== IHBoaWxvc29waA== IFNT dWdo IGFwcHM= ZnJpZW5k IHVwcGVy IGFkdmVydA== IHNub3c= IGZydXN0 IG91cnNlbHZlcw== RnI= IERpZQ== YW1waW9u IGRpc21pc3M= IGNlcmU= IHNpZ25hbA== ZnJvbQ== ICku IDUy IGNyaW1lcw== aXRvcnM= ZXN0aXZhbA== dXNldW0= IGNvdW5jaWw= IFNhdWQ= TWF5 IEd1bg== aWNpYW4= ZXRoZXI= IHN1ZmZpY2llbnQ= IEhlbg== c29sZQ== IGhpc3RvcmljYWw= IEZhcg== IFR1cm4= IHBpbg== IHN1Y2NlZWQ= bWF0 bHltcA== IHRyYWRpdGlvbg== IE9r IGNybw== IGRlc2NyaXB0aW9u YWxsZQ== IHNreQ== VGU= IHdpZGVseQ== IHdhdmU= IGRlZmluaXRpb24= IEpld3M= IGN5Y2xl IHJlZmVyZQ== IGJyaW5ncw== dXNhbA== IGFsaXZl IGZyZXF1ZW50bHk= IGludGVudGlvbg== IENvbnRyb2w= bHY= eXN0ZW0= IHByaXZhY3k= Z2VudA== cmVuY2U= IFF1ZXN0 IENocmlzdG1hcw== IHJhaWw= IGNvb3Blcg== IHRlc3RlZA== IENhcHQ= YXNrcw== IGNvbWZvcnRhYmxl IGRlbGl2ZXJlZA== c2NhcGU= IGRlcHRo IEdPUA== IHdyaXRlcw== IGFzc2V0cw== IHNhdg== aW1lbnRz IHRyYW5zaXRpb24= IGFydGlzdA== IExvb2s= IGxvYg== IGNvbXBvbmVudHM= YXJpdHk= IHdhbGtlZA== IHJvb3Q= IHBhcnRpY2lwYW50cw== IG5vdGljZWQ= IHJlc2M= IG5hdg== IEFkbWluaXN0 ZGE= dXRyYWw= cGxhdGU= IGltcG9ydGFuY2U= IGFzc2VydA== aW91c2x5 Y3JpcHRpb24= IGluanVyaWVz IENoZWNr IHJlZ2lzdGVyZWQ= IGludGVudA== IG1pc3NlZA== b2dyYXBoaWM= IHNlbnRlbmNl b3VudGVy IGFzc2lzdGFuY2U= ZXZpbg== IGRhdGFiYXNl IGJ1aWxkaW5ncw== IGNsYXNzaWM= IHRoaW5rcw== IE9oaW8= UHI= dWdn IGZlZQ== cGFu IGVmZmVjdGl2ZWx5 IGZhY2lsaXR5 IGJlYXI= IGNoYXB0ZXI= IGRvZ3M= IENvbHVtYg== IGxhdHRlcg== aXRpYWw= IGFkbWl0dGVk VFY= IEdlb3Jn IHBvc3Rz XFw= IGxhd3llcg== IGVxdWl2YWw= IG1hbmQ= IGNvbnRyb2xsZWQ= IFdhbGs= IEFuZHJldw== IG1lbnU= YW1lbnRhbA== IHByb3RlY3RlZA== dmE= IGFkbWluaXN0cg== b3JhbA== IHJlaW4= IFNhcg== IGFtb3VudHM= IG5hdGl2ZQ== IE1vb24= IHJlcHJlc2VudHM= IGFiYW5kb24= IGNhcnJ5aW5n IHRhbms= bWFyeQ== IGRlY2xhcmVk VHViZQ== IGhhdA== IHB1bmlzaA== ZWxsZWN0 bWVz IHVuaXZlcnNl IFJvZA== cGh5 IGluZnJhc3RydWN0dXJl IDUx IG9wcG9zZWQ= b3dudA== Y2E= IE1ha2U= IGhhcmR3YXJl IGNvZmZlZQ== UmVs YmFs d29ybGQ= IFNhZg== IFNlYQ== aW5hbHM= IG93bmVk IGhhbGw= ZXJzaW9u IGRlc2NyaWJl IFBvdA== IHBvcnRpb24= IGF0bW9zcA== IGdvdmVybm1lbnRz IGRlcGVuZGluZw== IG9mZmVuc2U= IHRyaWNr YXdh IExpbmU= IFZpcw== IEhhcmQ= IE9yaWc= IENsaWNr IGRlc2s= IFZhbGxleQ== IFNvdg== IG1vdmllcw== IHJlbWFyaw== IG1haWw= IGNvbnNjaW91cw== IHJ1bGluZw== IFJpZ2h0cw== IG1lZGlj aGVudA== IFdvbWVu Pjw= IHJlcGxhY2Vk IFByZW0= IFRoYW5rcw== IHJlbmV3 IEJhbGw= aWZvcm0= IHNob3Rz Q29tbQ== IGFybWVk IGNvbnN0YW50 IHRhc3Rl IHJlYWxpemVk IGJ1ZmY= IG1v IGVmZmljaWVudA== TW9zdA== b3JhdGlvbg== aWZpZXM= IGNvbW11bmljYXRpb24= IGZsb29k IGNvbnNlcXVlbmNlcw== IGFueXdheQ== aWdn IEdN IFRoYW5r IGlyb24= IGV2b2x1dGlvbg== IENvcA== dHdpdHRlcg== IDk1 IHJlbGF0aW9uc2hpcHM= YWRlbA== IFlvdW5n IHByb3Bvc2Fs YXllcnM= dWlsZGluZw== IEhvdA== T1JF Y29z IGNvbGxhYm9y UEc= YXh5 IGtub3dpbmc= IHN1cHBvcnRz b3dlZA== IGNvbnRyb2xz IG1lcmVseQ== dW1lcg== IGF0aGxldA== IGZhc2hpb24= cGF0aA== IGdpZnQ= IGVyYQ== QU5E IGtpbmRz IEtvcmVhbg== IGxlZ2l0 dWxvdXM= IGVzc2VudGlhbGx5 IHRoZXJhcA== bmlj IHN1ZmZlcmVk IGh1cg== IHByb21pc2U= IGV4Y2Vzcw== IG92ZXJ3 IHByaW1l IEhvdXN0b24= ZXJyeQ== IE1z UlM= MjAxMg== IHN0b3Jlcw== IE9seW1w IGpvdXJuZXk= QWx0aG91Z2g= U3Vi IEVkdWM= IENoYXB0ZXI= IHJlcXVlc3Rz IGNvbnN1bWVycw== IHRpbnk= IGlzb2w= IEZhaXI= YmE= IFlPVQ== IGNyYXNo Y2VsZXI= IGVtb3Rpb25hbA== IGdvb2Rz IGVsZWN0ZWQ= IG1vZGVy IExpbnV4 IGJsb2Nrcw== IGlzbGFuZA== IFNvY2lldHk= IGVsZWN0aW9ucw== IGJyb2FkY2FzdA== IGNoZWFw IG5hdGlvbnM= IHNlYXNvbnM= NDAw IHdhc3Rl IFNhdA== IGZpZWxkcw== ZW1wbG95 IHByb2ZpbGU= IGF1dGhvcnM= QUxM IEdyYQ== d2VzdA== IFR5 IGRlYXRocw== IHZhY2M= IGZvcm1lZA== IGR1 IG9uZ29pbmc= IE11c2xpbXM= ZWxm aWd1cmU= IGFzc3VtZQ== IFVrcmFpbmU= d2F0ZXI= IGNvYXN0 IHZvdGVk Z29y IEFT IE1pY2hpZ2Fu YXph IEFybQ== aXJv IGZsZXg= YXN0ZXJz Jyc= IHdlbGNvbWU= YXJs IGxvY2F0aW9ucw== aWdhdGlvbg== IEZpbA== IGJ1eWluZw== IGFyY2hpdGVjdA== IGhhcmRlcg== IEN1Yg== IGludGVyZmFjZQ== IHJlc3RhdXJhbnQ= IGRpc2NvdmVy IGV4Y2VlZA== IGZhdm91cg== Z2VyeQ== IGR1dHk= IHBpdGNo YWRvcg== IE1hY2g= Ym95 IHJlc3BvbmRlZA== IGV4dGVuZGVk aGVycw== TWFueQ== cmFpZA== aWZlcg== IElucw== U2Vy IG1lZGl1bQ== c2hl IFNwb3J0cw== IG1hZ2F6aW5l dXRhdGlvbg== IGxpbWl0cw== IEdhbGw= IGV4dGVybmFs cmF6aWw= IHlvdW5nZXI= dGxl IHJlbWluZA== IENPTg== IGltbWVkaWF0ZQ== IGhpZGRlbg== IHZvbHVudGU= IHNpbXBs b2RjYXN0 IHBoYXNl ZHI= IHBsb3Q= IGV4cG9zdXJl Ukk= b2dyYXA= dmlu YW5pc2g= IEFjYWQ= IEVuZ2luZQ== IGV4cGFuc2lvbg== IFBheQ== WW91cg== IHB1c2hlZA== IEVsbA== IEhlYWQ= IG1hcmtldGluZw== IEFD a2V0 IGhpdHM= IGdybw== IEFnZQ== IFNjb3Q= XVs= IHN0aW0= IGlQaG9uZQ== iJI= IG5hcnJvdw== IEdldHR5 IFR1cmtleQ== IHBlcmZlY3RseQ== IGVuYWJsZQ== dXRjaA== IHByZWNpc2U= IHJlZ2ltZQ== IHNoaWY= IGNvbXBlbnM= Z3Vu ZGl2 IGNob3Nlbg== IEtlbg== QW55 IHRyZWVz IHJlY29tbWVuZGVk IFJlbg== dWFibGU= IEhU Rm9sbG93 RUc= IEhhbmQ= IEtlbm4= IGFyZ3VtZW50cw== IGV4aXN0cw== IGJpa2U= IENvbnNlcnY= IGJyZWFraW5n IEdhcg== IGNyYXp5 IHZpcnR1YWw= YXlsb3I= aXhlbA== IDE5ODA= IHBlcm1pc3Npb24= IFNlcmllcw== IGNvbnN1bWVy IGNsb3NlbHk= Y2FsbGVk IDU0 IGhvcGVz IGFycmF5 IFdpbg== IExhYm91cg== IHNwb25z IElyZQ== IHBvdw== IHJlYWRlcnM= IGVtcGxveW1lbnQ= IGNyZWF0dXJl IHJlc3VsdGluZw== IGFjY3VyYXRl IG1vbWVudHM= IGFyZ3VlZA== IHBlZA== RHVyaW5n IDUz IFRhbA== IHNvdWdodA== IHN1ZmZlcmluZw== IGljb24= bGVl ICgk YWxpYW4= wrA= IHByYQ== IGJvbnVz KCI= a28= IGFjdGluZw== REU= ZmFsbA== IGNvbXBhcmlzb24= IHNtb290aA== IE5BUw== dXBw IEpvc2VwaA== ZXBpbmc= IFRha2U= IE1pZA== IHNlbmRpbmc= ZmFzdA== IEZhbGw= IGRlYWxpbmc= dXNlcg== IE9yZ2Fu Q28= IGF0dGFjaGVk IHNlZXM= JS4= IHR5cGljYWw= QVJU IGZpbmRz IEFzaWE= dW1pbg== IENvcmU= IEVudA== aW5lbnQ= dWNl IEJsb29k IE5ldmVy IGVtYWlscw== IGhpZ2hsaWdodA== IGNvbmZyb250 YXR1cw== dXRlZA== IHVudXM= IHRvcGlj IEFkYW0= IGJsZQ== YXRp IHVuZGVyc3Rvb2Q= U2V0 c3RydWN0 VFA= IG1vYg== YWE= IFN0YXJ0 cGVjdGVk c2VsbA== IGRlZGljYXRlZA== IENB dWFu IHNvbmdz ZXNjcmlwdGlvbg== IHRlY2g= IHJhcGU= IGFzaWRl IGdyYW50 IDU2 c3Vi IGFyZ3Vl IGNvbnRhaW5pbmc= IHNjaGVkdWxl IGxpYmVyYWw= IHB1YmxpY2x5 IGhlYXZpbHk= IFV0 aW5lcg== IFNlY3Rpb24= IENhcmU= d2VldA== bHM= RGlz 4pSA IEZvbGxvdw== QmFjaw== IElU IGJlcw== amk= IEhpdA== ZXN0ZWQ= IGV2ZXJ5Ym9keQ== IFN3ZWQ= IGZlbWlu IGZhY2lsaXRpZXM= IGNvbnZlbg== Q29tcA== IE9T Y29yZQ== IGFueA== IGRpdmlzaW9u IENhbQ== IFN0YW4= bWF0ZXM= IGV4cGxvcmU= cGxvbQ== IHNoYXJlcw== cGxvYWQ= YW5lcw== IGlkZWFs ZXRlcnM= IEJhc2U= IHBsYXN0aWM= IGRpc3RpbmN0 IE5ldHdvcms= IFNlYXR0bGU= IHRyYWRpbmc= ZW5zdXM= aW50ZW5k IGV4aGli IGluaXRpYWxseQ== IEZvb2Q= IHRob3VzYW5k IEJ1c2luZXNz YWN0ZXI= IHBhcmFncmFwaA== IHJvdWdobHk= IHd3dw== IGNyZWF0aXZl IENvbmY= IGNvbnN1bXB0aW9u IGZpbG1z YWdhbg== IG9idGFpbg== IHRhbGw= IHRvcg== IGFja25vd2xlZA== IGdyb3du YWxv S0U= IDQwMA== ZW5kZXJz dGFpbmluZw== VUc= IHN1aWNpZGU= IHdhdGNoZWQ= IExpc3Q= YWxp cmVoZW5z IHN1cnJvdW5kaW5n IHBpcA== IGZseWluZw== IEphdmE= b3JkYW4= IHNlcnZpbmc= aW5hdGlvbnM= cG9zdA== IHNobw== QXY= IGphaWw= enk= IDE5OTk= IDwv IGxpdGVyYWxseQ== IFNpcg== IGV4cG9zZWQ= IGxpZXM= c3Rhcg== IGJhdA== IGVhcm5lZA== IERpZw== IHNwZWNpZmllZA== IFNlYXNvbg== IGRlZ3JlZXM= RG9uYWxk IGNlbnRyZQ== IHNoYXJpbmc= IHdpbnRlcg== IENP Q2hl IM4= TVA= IHVudw== IGZld2Vy IE1pcg== IHNvbWV3aGVyZQ== IEtleQ== IGF0dGFja2Vk IEtpcg== IGRvbWFpbg== IHN0cm9uZ2Vy IDk5 IHBlbmFsdHk= SWQ= U2NyaXB0 IGRlY2xpbmVk IG5lY2s= IGZyYXVk IGN1cnJlbmN5 IHJpc2luZw== UkM= 4oCm4oCm SHo= IHRhYg== IHRhbGVudA== bmFt IE5CQQ== IHZpbGxhZ2U= IGxlZ3M= IE5leHQ= RWQ= IGFjaWQ= IGh5ZA== ODAw IGludm9sdmluZw== IEltYWdl IEJlZm9yZQ== Rmw= IHllc3RlcmRheQ== U291cmNl IHRlcnJvcmlzdA== IHN1cA== IHN5bnQ= IFNhdWRp IHdlc3Q= IHJ1 YnVyZw== IHZpc2libGU= IHN0cnVjaw== cmlzb24= IGF3ZXNvbWU= IGRyYXdu IGFuc3dlcnM= IEdpcmw= IFJhbQ== IHRocmVhdHM= IGRlZmVhdA== b3NpdA== IHZlbnQ= YXR1cmFsbHk= QW1lcmljYW4= ZW5kYQ== IEhvbHk= IHJ1bQ== JSw= Y2FzZQ== IEhpc3Rvcnk= IFlvdVR1YmU= IHNpdHVhdGlvbnM= IEROQQ== U3Rl IHNhdmVk SXRlbQ== IHJlY2lw b2xvZ2lzdA== IGZhY2Vk IGVsaWc= T25jZQ== IExp dWg= IG1pc3Rha2U= IERpdmlzaW9u IEJlbGw= IHN5bXB0b21z wq4= IGRvbWlu IGZhbGxpbmc= IGVuZGluZw== YXNoZXM= IG1hdGNoZXM= IE9ubGluZQ== IGV4cGxhbmF0aW9u RGVm cmVkaXQ= IGFueW1vcmU= IFRvdGFs IEZPUg== dXNoZWQ= IGxldHRlcnM= IHJpc2tz IE9L IHJlcG9ydGVkbHk= Olw= IHBsYXRl IHN1YmplY3Rz IGF0dGVtcHRlZA== aWZpZXI= aWFuYQ== IHVubGlrZWx5 IFRob3VnaA== dW1h IEludmVzdA== IFByaW4= aWNhbg== IERhcg== IENvbG9yYWRv YXVn IHZlZ2V0 YW9z cmlh IHNoZWw= IG1hcmtlZA== ICgp IHNwcg== cG8= IExpbms= IGRlZmU= IEpy IHRoZW1l IHBhc3Npb24= IFBlbg== IGluZm8= aXplcg== IHNoaXQ= IENpdmls YXBzZQ== Y3Jl IHBvbHk= IGNvbXBvbmVudA== IENoYXJsZXM= IElyZWxhbmQ= IFByb3Y= IGRvY3RvcnM= IGdyYW50ZWQ= IHBhaW50 IGhvbm9y IHNtb2tl IHBheW1lbnRz IHByaW1hcmlseQ== IEtpbmdkb20= cmljaA== YXRlbGw= IGRlYWxz IHNjaGVkdWxlZA== IGZ1bmRhbWVudGFs IHByb3RlaW4= IG5ld3NwYXBlcg== IGNsaWVudHM= eXRob24= IERhdGU= aHVz IGZlZWRiYWNr IHN0cmV0Y2g= IGNvY2s= IGhvdGVs IFF1ZWVu IHN1Z2Fy IGp1 IG1pbGs= IGFwcHJvdmFs IExpdmU= IGVxdWl2YWxlbnQ= ZWZ1bGx5 IGluc2VydA== em9uYQ== IGV4dGVuc2lvbg== ZHJp Sm9obg== IGFjY29tcA== U20= IEZ1bmQ= IGNvbnN0YW50bHk= IGBg IGdlbmVyYXRlZA== IEFjdGlvbg== IFBzeWNo IFRyaQ== IHJlY29nbml6ZQ== IHZhcnk= cGhh IFJh ZGY= ZXRjaA== IFNvdmlldA== VHdv IHBhdHRlcm5z IHByb2Zlc3Npb24= YW5pbmc= VGltZQ== IExpbQ== IGNvbG9ycw== IEF6 IFRS IGluZmVjdA== IHBoZW5vbWVu IHNoZWxs QWxzbw== IHB1dHM= IGRlbGl2ZXJ5 IGJyb3du IHByb2Nlc3Npbmc= IGxpZ2h0cw== ZXNzYWdl IEJyb29r IEF1ZA== bGF0aW9u IGluZHVzdHJpYWw= TGlrZQ== IEJyYXppbA== cm91cw== RVNT IEx1Yw== IHNvbWVob3c= IDg1 IHByb3BvcnQ= IHBvbGl0aWNpYW5z IGluZGljYXRl IGhvbGU= IHRlY2huaXF1ZXM= IGNvbXBldGl0aXZl IHBocg== IHZv aXN0ZW50 IERyZWFt IGNhbXB1cw== IGFzcGVjdHM= IGhlbHBmdWw= IHNoaWVsZA== b3JzZQ== IHRyaWdnZXI= bWFs IDU4 IHRvcnQ= IHBlcnNvbmFsbHk= IHRhZw== IGtlZXBz IFZpZGVv IGJlbmNo IGdhcA== YWlyZQ== IGVhc3Q= IHJlY292ZXJ5 cGVyaWFs IHByb2ZpdA== IE1pYw== IDU3 IGNvbG9u IHN0cm9uZ2x5 c3R5bGU= IGFsbGVnYXRpb25z aGFu IHJlcG9ydGVycw== am8= cmluZQ== YXJnZXQ= YW5kYWw= IDAz IGZsYXNo dHJhbnM= IHN0cmljdA== IHBhcmtpbmc= IFBha2lzdGFu IGxp IHdlaXJk IEVyaWM= IHJlZ2lvbnM= IEp1bg== IGludGVsbGVjdA== IFdI b2Rpbmc= cmlidXRlcw== dXBpZA== IFRpdA== IGZpbmdlcg== b3JpYQ== IGVsZXY= IEZpZWxk IGNvbmNsdXNpb24= Ozs= IGZlZWxpbmdz IGV4dGVuc2l2ZQ== IG1peGVk IG5ldXJv dnk= IGhhcmFzcw== IENpcmM= b3VjaA== IHRlcnJpdG9yeQ== IHN1Y2Nlc3NmdWxseQ== TWFy IGluZ3JlZA== IG92ZXJ3aGVs IGxheWVy Vmlldw== IGFsbGllcw== aWxsYW5jZQ== IFRocmVl IGJ1bmNo IG5vcm1hbGx5 IG5ldHdvcmtz IHNhY3I= IENJQQ== Ymxlcw== IGNob3Nl IG9wcG9uZW50cw== IHJlZ2FyZGxlc3M= IGZyYW5jaA== IHByZWY= IFBv IGJyaWRnZQ== YW5uYQ== IFNpbHZlcg== IHdhZ2U= cGFnZQ== cmlvcg== IHJhZGljYWw= IExpdHRsZQ== IG1hbmlw IHNlY3JldGFyeQ== IGdhbmc= RFI= RkE= IGRlY2VudA== IFNwaXJpdA== IHVuY2xl IERldmVsb3BtZW50 IGludmVzdG9ycw== IHdhbGxz IHB1Ymxpc2g= IGdlbmVyYXRl aXNzaW9ucw== Y2Fy IHByb21vdGU= IGN1dHRpbmc= IGNoZXN0 IGRyaW5raW5n IGNvbGxlY3RlZA== IDcy IGhvcGluZw== IGVtYnI= Z29yaXRo IHdhcm5lZA== IGluc3RydWN0aW9ucw== T0c= IERpZA== IEFnZW5jeQ== IGdlYXI= IGNyaXRpY2lzbQ== IEZ1cnRoZXI= IHV0aWw= YW5ueQ== UmVk IGNvdW5zZWw= IEFzaWFu IHJlZHVjdGlvbg== cG9vbA== IHRlYWNoaW5n IGRlZXBseQ== aXk= IGVzdGltYXRlcw== IGNob2ljZXM= IHBlcm1hbmVudA== aW5lbQ== a2Vs IGZhc2M= cHNl ZmlsZQ== IExvdw== IFBlcnNvbg== IHRvdXJuYW1lbnQ= c3RhbA== IG1lbA== VVNU IFJheQ== YXpp VmFs IGNvbnRhaW5lZA== IEhvbGx5 IHdha2U= IHJldmVhbA== IHByb2Nlc3Nlcw== IElTSVM= IDA5 IGJsaW5k IHN0ZWVs IEJhZA== IGNhcmVmdWxseQ== YXBweQ== cm9pdA== IGdhbWluZw== IGhvdXNlcw== IENvbGw= IHRydWNr ZXJt IHNjb3JlZA== IG9jY2Fz cmV0dXJu Ym91bmQ= dmFy IHNoYXJw IGFmcmFpZA== IEVY YW1iZXI= Y2lmaWM= IHNjaGVtZQ== TkM= IFBvbGl0 IGRlY2xpbmU= IDE5OTg= IHB1c2hpbmc= IHBvc3Nlc3Npb24= IHByaXZpbGU= IHRlYWNoZXJz IHlpZWxk SEE= IERhdmlz aXRsZWQ= IyMjIyMjIyM= IHJpZw== IERhbmllbA== YWNvbg== IGhpZGU= dXRlbg== IGNvbGxlYWd1ZXM= IHByaW5jaXBsZXM= IGxvdWQ= IHNpbg== IERlbW9u IHN0b25l IDAy IHRhdWdodA== IHRlcnJpYmxl IHN0dWNr IFBvbGljeQ== dGVlbg== IGltcGxlbWVudGF0aW9u IEJCQw== IEFQSQ== IHdoZWVs YWxsYXM= IGNoYW1waW9ucw== b2xhcnM= cGxheWVy IHJlcGVhdGVkbHk= IFN0aWxs IGxpa2Vz YXN0eQ== ZXN0ZXI= IENhdGhvbGlj Ukw= IGJhdGg= IG5vaXNl dGl0bGU= IG5vcnRoZXJu UGFydA== IG1hZ24= IGZhYg== IEFzaA== IGRpc3Bs IHRpY2tldA== IG11cmQ= IGFsb25nc2lkZQ== IE11c2lj IHJpdmVy IFN0ZWVs IENM IFBsYXllcg== IE11bHQ= b3dpbmc= cmVw c2l6ZQ== IHR1cg== IEdlb3JnaWE= aXNjYWw= cmFjdGlvbg== IGNhYmxl IDU5 IHdpbnM= IHVwY29taW5n IHN1cnZpdmU= IGluc3BpcmVk IEVkdWNhdGlvbg== IHN0YXRpc3RpY3M= IEZvb3Q= aWFtaQ== IHllbGxvdw== IFBhZ2U= Li0= IEhhcw== IHVyYmFu IGF4 ZXNzZWw= XCI= IHF1YXJ0ZXJiYWNr IHJlZ2lzdGVy IExhYm9y IGFiaWxpdGllcw== IEZhbWlseQ== IHZhcmlhYmxl IFByaWNl IGNvbnRlbQ== IHRoaW4= IEVxdQ== ZGF0YQ== IGdvdHRlbg== IGNvbnN0aXQ= IGFza3M= IHRhaWw= IGV4Y2l0aW5n IEVmZmVjdA== IFNwYW5pc2g= IGVuY291cmFnZQ== aW5zb24= IEFo IGNvbW1pdG1lbnQ= Q1M= IHJhbGx5 IDo6 IHN1YnNpZA== IHNwaW4= IGNhcHR1cmVk MjAxOA== IGlubm9j IGFsbGVnZWRseQ== IENvbWU= IGFydGlzdHM= IE51bWJlcg== IGVsZWN0cm9uaWM= IHJlZ2lvbmFs YXBlcw== IHdyYQ== IG15dGg= cHJpc2U= IE1pbGxlcg== IENyZWF0 IEVwaXNvZGU= YmVsbA== IGRpcmVjdGVk IGV4dHJhY3Q= IHNvcnJ5 IHZpY2U= YWdnZXI= IFN1cHBvcnQ= IDY2 IElyb24= IHdvbmRlcmZ1bA== IGdyYQ== TmV0 aW9uZQ== RW5n IHNoaXBz aWtlcw== IEtldmlu aXRhcg== IGFjdGl2aXN0cw== dHJ1ZQ== IEFyaXpvbmE= ZW50aA== IERlc3BpdGU= IFNF IGhhYml0 ZXJuZWw= IGlucXU= IGFib3J0aW9u IHZvaWQ= IGV4cGxpY2l0 IGVuZ2FnZWQ= IGFuZ3J5 IHJhdGluZw== IGZyYWc= YnJv aWNraW5n ZGV2 IHdvcnJpZWQ= IG9ic2Vy IGFwYXJ0bWVudA== IEdU IGVzdGF0ZQ== IENvbnN0aXR1dGlvbg== ZW1vbg== IFNub3c= IGNvdW50eQ== IGRpc2Fn IFN0ZXBoZW4= IGltbWlncmFudHM= d2luZA== IE5hdGlvbnM= IGZvbGtz T3V0 IGdhbGw= IHRhcmdldGVk IHN0ZWFk IEJvbg== IExpYg== IGluZm9ybWVk IDEyMA== Y2hhaW4= aWRlbGluZXM= b3JvdWdo IGRyaXZlbg== IHJlZ3VsYXJseQ== IGJhc2tldA== IHByaW5jaXBsZQ== b2N1bWVudA== IHN0dW4= aWJpbGl0aWVz IFJvbWFu IEFib3V0 IGFsZXJ0 IGRlbW9jcmFjeQ== IHJlcHJlc2VudGVk SFM= Y2Vycw== cGFyZW50 QXJ0 cGFjaw== IGRpcGxvbQ== cmV0cw== IE5P IGNhcHR1cmU= IEFkdg== hKI= IGFubm91bmNlbWVudA== IExlYXI= IGhvb2s= IHB1cnM= IFN1Y2g= IENhbWVy IHJlZnVnZWVz IFZl UG9s IHJlY29nbml6ZWQ= bGli IGhhZG4= QXNz IHBpbG90 dXNoaW5n IHJldHVybmluZw== IHRyYWls IFN0b25l IHJvdXRpbmU= IGNvdXJ0cw== IGRlc3Blcg== IGZyaWVuZGx5 IEl0YWx5 IHBsZWQ= IGJyZWF0aA== IHN0dWRpbw== TlM= IGltcHJlc3NpdmU= IEFmZ2hhbmlzdGFu IGZpbmc= IGRvd250 aW5raW5n IFJvZw== aWFyeQ== Y29sb3I= c2V4 YXJvbg== IGZhdWx0 IE5pY2s= RG93bg== IFJvc2U= IFNvdXRoZXJu WFg= aXNvZGVz TGlzdA== NjAw IG91dGNvbWU= ZXJy IGVsc2V3aGVyZQ== IHJldGlyZQ== IHBvdW5kcw== IEdsb2JhbA== UGVvcGxl IGNvbW11bmljYXRpb25z IGxvYW4= IHJhdGlv IEVtcGlyZQ== IGdvbm5h IGludmVudA== REY= IDE5NzA= IENvbW1vbg== cGF0 IHByb21pc2Vk IGRpbm5lcg== IEhvbQ== IGNyZWF0ZXM= IG9wZXJhdGU= dmVydHk= IEpvcmRhbg== ZXRpbWU= IHN1c3RhaW4= UmVn IGluY3JlZGlibGU= aW1h IHdhcnJhbnQ= IG1t QXR0 IGxhd3N1aXQ= IHJldmlld3M= aXR1cmU= IFNvdXJjZQ== bGlnaHRz IEZvcmQ= IDYz Z3JvdXA= c3RvcmU= IGZlYXR1cmVk IGZvcmV2ZXI= IHBvdmVydHk= IFBvcA== IENOTg== YXp6 YWJpcw== YWNoaW5n IGxhaWQ= IFN1cHA= IGZpbHRlcg== ZW5h IENvbW11bml0eQ== IGNyZWF0dXJlcw== dWN0aW9u IFJveWFs IGFzc29jaWF0aW9u IENvbm5lY3Q= IEJyYWQ= 4paI bGVycw== dGhlcmU= IEdp IHZhbHVhYmxl QUNL IFRheWxvcg== IGxpcXVpZA== IEF0dG9ybmV5 IENhcmw= IEZpbmFs YWdh IFdpbHNvbg== QmVjYXVzZQ== IFByb2Zlc3Nvcg== YWth IGluY3JlZGlibHk= cmFuY2U= ISk= UmVm c2s= IHNvbHV0aW9ucw== IGF0bW9zcGhlcmU= IGJsYW1l dW1lcw== IE5vYg== Q0E= dW1wcw== cmljYWw= IFB1dGlu IERlc3Q= b3JpYw== IFBB IHJlc3BlY3RpdmVseQ== d2Fu IGZpZnRo 4oSi IENyeQ== IGdvdmVybm9y cmVzaWRlbnQ= IHB1cmNoYXNlZA== IGhhY2s= IGludGVuc2U= b2Jz IG9yaWdpbg== IGRlZmluZQ== IGNhcmVmdWw= Kioq IHNob3VsZGVy Q2xpY2s= IHRpZWQ= IGRlc3RydWN0aW9u b3VyZWQ= IG5vYm9keQ== IGhv IEV4cGVy IHRpcA== Ijs= IHRlY2huaXF1ZQ== IGp1cg== IFBvaw== Ym93 IGxlZ2VuZA== IGFjY29yZA== IGJ1c3k= IEludGVs IGhhbmc= YWtp Ll0= 4oCU4oCU4oCU4oCU IHN1cmdlcnk= IHJlcHJvZHU= IHVuaWZvcm0= IHNjZW5lcw== Y29kZQ== IDYy bGlzaGVy IEhhdmU= cGhpYQ== IGNyeXB0 IHJlY29u IHNjcmVhbQ== IGFkb3B0ZWQ= IHNjb3Jlcw== TmU= IEl0YWxpYW4= aW5jbHVkaW5n Qk8= IGluZGljYXRlZA== IGVudGVydGFpbg== R3U= VGV4dA== aWVs IHR3ZW50eQ== IGVuZ2FnZQ== b2Zmcw== IFBhY2lmaWM= IHNtaWxl IHBlcnNvbm5lbA== IHRvbGVy IGRvb3Jz IHRvbmU= IG1hY2hpbmVz IGVudGVyaW5n dGVuYW5jZQ== Q08= IEplcnNleQ== IGZvcmVzdA== IGhvcnNl IGNvbXBsYWludA== IFNwcmluZw== eW8= IFBsdXM= ZWRpbmc= IFJldHVybg== cXVhcnRlcnM= aWFscw== Y293 IGFjYWRlbWlj IGZydWl0 IDE5OTY= b2dldGhlcg== IHdpbmU= IHB1cnN1 IFN0ZXZlbg== IGxpY2Vucw== V2hv IGNsb3RoZXM= cmVjdGlvbg== IHNxdWFk IHN0YWJsZQ== IHJhdw== emVucw== U3Rhcg== dXRpZXM= YW5jZXI= IGtleXM= IE11 IGNvbXBsaWNhdGVk aWdlcg== IFRleHQ= IGFic29y IDY4 IGZ1bm55 IHJlbGllZg== IExldw== IENvb2s= IGNoYXJ0 IGRyYXdpbmc= R0U= IG1vZHVsZQ== IEJ1bGw= SUxM IHNhbHQ= MDAwMDAwMDA= aWxsZQ== IHJlc291cmNl YXdheQ== YWRlbHBoaWE= IEJydQ== IDY3 IHNvbWVib2R5 IHBhcnRpY2lwYXRl IHJvc2U= d2VyZWQ= IG11c2NsZQ== IGNvbnNlbnQ= IGNvbnRpbnVpbmc= IEd1YXJkaWFu IE9yZGVy cmVnb24= IHJlYXI= IHByb3Zpc2lvbg== IGxpa2Vk cmllbnQ= IGJyYQ== VHJhbnM= IG1lZXRpbmdz IHRveA== IGNvbnZlbnQ= IGF1dG8= IHJlY29yZGluZw== IFNvZnQ= MDAx IFJvbGw= IHByb2dyYW1taW5n IHBpYw== IHByb3ZlZA== IHN0YWI= IEFzdA== IGNhcHRpb24= dWxhdGluZw== IEF0dGFjaw== IG5ld2x5 IDE5OTc= ZnI= IGRpc2NpcGw= IEdyZWVr IGVkaXRpb24= IERvZXM= IEJveA== aWZsZQ== YWNrZXQ= IHBhc3Nlcw== IGd1ZXN0 IGFjY2VsZXI= aXRhbHM= VUQ= IGF1dGhlbnQ= IFJlc3Q= b3ZhbA== dGE= dWluZQ== IGFybW9y IFRvd24= IGNvbXBhdA== IGluY2hlcw== RGVzcGl0ZQ== IGFzc2lnbg== aGVyZW50 IHByZXBhcmU= IE1lZw== b2NrZXk= IGRlcGVuZHM= IHRyYWNrcw== d2F0Y2g= IGxpc3Rz IE5vcnRoZXJu IGFsdGVy cmVj IEVhc3Rlcm4= IGNvbmRlbQ== IGV2ZXJ5d2hlcmU= Pyc= IGFmZmlsaQ== IGZvdWdodA== Ijp7Ig== IG1hYw== aXRhcmlhbg== IHNjb3Bl IEFM YXdz YXJtcw== IHF1ZQ== IGVuam95ZWQ= bmVzb3Rh IGFnZ3Jlc3NpdmU= IFN0b3J5 IElW IHJlY2lwZQ== IHJhcmVseQ== IE1lZGljYWw= dmFsdWU= YW5nZWw= YXlpbmc= b21ldGhpbmc= IHN1YnNlY3Rpb24= IHNvdXRoZXJu IGZyZXF1ZW5jeQ== cmV0ZQ== cm9sbGVk dWx0cw== IE5pYw== IGJlaGFsZg== IHNlcXVlbmNl YWJldA== IGNvbnRyb3ZlcnNpYWw= IGNvbXByb20= IHdvcmtlcg== IG1haW5seQ== IGFsZ29yaXRo IE1ham9y b3JjZQ== Z2VuZGVy IG9yZ2FuaXplZA== IGZha2U= IGNvbmNsdWRlZA== IEVE IEV4ZWM= cmFnZQ== IGNoYW5jZXM= YmVycnk= IFRyYWQ= IGNvbmZpZ3VyYXRpb24= IHdpdGhkcmF3 IGZybw== dWRlcw== IEJyb3RoZXI= IEJyaWFu IHRyaWVz IHNhbXBsZXM= IGJpZA== IEdvbGRlbg== IHBob3RvZ3JhcGg= aWZlc3Q= IERP IFBhcmxpYW1lbnQ= KioqKioqKioqKioqKioqKg== UmVt IGNvbnRlc3Q= IHNpZ25pbmc= cHg= IFplYWw= 4pSA4pSA RWFy IGV4aXQ= QmVmb3Jl IENvcnBvcg== bnVsbA== bW9udGg= IHJhY2lhbA== b3R0ZWQ= IFZlZw== IFJldXRlcnM= IHN3b3Jk cHNvbg== IFJvbW5leQ== YWVk IHRyaWI= IGlubmVy IHByb3RvY29s IEJp IE1pYW1p ZXZlcmFs cHJlc3M= IHNoaXBwaW5n IEFtZW5kbWVudA== IEhvd2FyZA== Y29ubmVjdA== IERpc2M= IEphYw== aWFtb25k IFRoZXJlZm9yZQ== c2Vz IFByaW5jZXNz IFVTQg== IEFudGg= IHN1cnZlaWxsYW5jZQ== IGFwb2xvZw== IDYx b3dh IGZ1bGY= anM= IGx1Y2s= dXN0ZWQ= IMKn bmk= IGFudGljaXA= ZW1hbg== IHdpbm5lcg== IHNpbHZlcg== bGxh aWNpdHk= IHVudXN1YWw= IGNyYWNr IHRpZXM= ZXo= IHByYWN0aWNhbA== IHByb3ZpbmNl IFBsYWNl IHByaW9yaXR5 SUNF IGRlc2NyaWJlcw== IGJyYW5jaA== Rm9ybQ== YXNrYQ== bWlzc2lvbnM= Ymk= IHBvcm4= IFR1cms= IGVudGh1cw== IGZpZ2h0ZXJz IDA4 IERldHJvaXQ= IGZvdW5kYXRpb24= YXZpZA== QXJl IGp1ZGdtZW50 Y2xpbmc= IHNvbHZl IERlc2lnbg== V2hlcmU= aGVzaXM= IFRybw== YWZ0ZXI= IG5ldXRyYWw= IFBhbGVzdGluaWFu IEhvbGx5d29vZA== IGFkdmlz IE5vbg== eWVz b2xpcw== IHJlcHV0YXRpb24= IHNtZWxs IGJyZWFk IEJ1bA== IEJlYWNo IGNsYWltaW5n IGdlbmV0aWM= IHRlY2hub2xvZ2llcw== IHVwZ3JhZGU= cm93cw== IGRldmVsb3Blcg== IEpvc2g= IERpc25leQ== ZXJ2ZWQ= aXBhbA== IHVuZXg= IGJhcmVseQ== dGhlbg== IFB1Yg== IGlsbG5lc3M= ZXRhcnk= IEJhbA== IHBhdGNo IGJ1dHQ= IHN0dXBpZA== IERvZw== IERhbGxhcw== ZnJvbnQ= aWVjZQ== IHByb3Rlc3Rz IGNoYXQ= b2VuaXg= IHdpbmc= IHBhcmxpYW1lbnQ= IDc3 b3NleHVhbA== IHJlbmRlcg== cHRpb25z IENvYXN0 b3Nh IEdyZWc= aG9w IE1hbmFnZW1lbnQ= IGJpdGNvaW4= IHJlY292ZXI= IGluY29ycG9y b3JuZQ== IFVzaW5n IHByZWNlZA== IHRocmVhdGVuZWQ= IHNwaXJpdHVhbA== IEV2ZW50 IEZyZWQ= IGFkdmVydGlzaW5n IGltcHJvdmVtZW50cw== IEN1c3RvbQ== IGVycm9ycw== IHNlbnNpdGl2ZQ== IE5hdnk= IGNyZWFt TG9vaw== IGV4Y2x1c2l2ZQ== IGNvbXByZWhlbnM= IGRlbGVn IGNvbmNl IHJlbWVt IHN0cnVjdHVyZXM= IHN0b3JlZA== TkQ= IDEwMDA= VVA= IEJ1ZGQ= QUY= d29tYW4= IEFjYWRlbXk= 8J8= c2Vh IHRlbXBvcmFyeQ== QWJvdXQ= ZXN0ZXJz IHRpY2tldHM= IHBvc3Nlc3M= aW5jaA== b3o= IGxh IGNvbnRyYWN0cw== IHVucA== IGNpZw== IEthdA== dWx0dXJhbA== YXNt IG1vdW50YWlu IENhcHRhaW4= U3RlcA== bWFraW5n IFNwYWlu IGVxdWFsbHk= IGxhbmRz YXRlcnM= IHJlamVjdGVk ZXJh aW1t cml4 Q0Q= IHRyYW5zYWN0aW9u Z2VuZXI= bGVzc2x5 IHx8 IGNvcw== IEhlbnJ5 IHByb3Zpc2lvbnM= IGdhaW5lZA== IGRpcmVjdG9yeQ== IHJhaXNpbmc= IFNlcA== b2xlbg== b25kZXI= IGNvbnNvbGU= aW5zdA== IGJvbQ== IHVuY2VydGFpbg== MTUw b2NraW5n IG1lYXN1cmVk IHBsYWlu IHNlYXRz IGRpY3Q= U0w= YWZl IGVzdGltYXRl aXpvbg== YXRoZXJlZA== IGNvbnRyaWJ1dGVk IGVwaXNvZGVz b21tb2Q= R3I= QU5U IDY5 R2VuZXI= IDI1MA== dmlvdXNseQ== cm9nZW4= IHRlcnJvcmlzbQ== IG1vdmVtZW50cw== ZW50bGU= b3VuY2U= IFNvdWw= IHByZXY= IFRhYmxl YWN0cw== cmlvcnM= dGFi IHN1ZmZlcg== IG5lcnY= IG1haW5zdHJlYW0= IFdvbGY= IGZyYW5jaGlzZQ== YmF0 IGRlbWFuZHM= IGFnZW5kYQ== IGRvemVu IGNsaW5pY2Fs aXphcmQ= IE9w dGQ= IHZpc2l0ZWQ= IFBlcmhhcHM= IGFjdG9y IGRlbGlj IGNvbnRyaWJ1dGU= IGluamVjdA== IEVz YWNjbw== IGxpc3RlbmluZw== IGNvbmdyZXNz ZXBlbmRlbnQ= IHByZW1pdW0= IDc2 IElyaXNo IGFzc2lnbmVk IFBoeXM= IHdvcmxkd2lkZQ== IG5hcnJhdGl2ZQ== b3R5cGU= bW9udA== YmFzZQ== IEJvd2w= IEFkbWluaXN0cmF0aW9u IHJlbGF0aW9u IEVW Q1A= IGNvdmVycw== IDc4 IGNlcnRpZmlj IGdyYXNz IDA0 cGlyYWN5 aXJh IGVuZ2luZWVyaW5n IE1hcnM= IHVuZW1wbG95 IEZvcmVpZ24= c3RyYWN0 IHZlbg== IHN0ZWFs IHJlcGxpZWQ= IHVsdGltYXRl IHRpdGxlcw== ZGF0ZWQ= IGpveQ== YXVz IGh5cGVy YWt1 IG9mZmljaWFsbHk= IFByb2R1Y3Q= IGRpZmZpY3VsdHk= cGVyb3I= IHJlc3VsdGVk cmliZWQ= bGluaw== d2hv fn5+fg== IFNwZWVk IFZpZXQ= V2luZA== IEJhcmFjaw== IHJlc3RyaWN0aW9ucw== IFNoYXJl IDE5OTU= aXRpb25hbGx5 IGJlYXV0eQ== b3B0 IG1hcHM= IENS IE5hdGlvbg== IENydXo= V2lsbA== IGVsZWN0cmljaXR5 IG9yZw== IGJ1cmQ= IHZpb2xhdGlvbg== IHVzYWdl IHBlcm1pdA== IENocm9u IEZhbnQ= IG5hdHVyYWxseQ== IDA3 IHRocm93bg== IEF3b2tlbg== IGFsaWVu IEhlcm8= IEtlbnQ= IFJpY2s= cmlrZQ== IHBhY2U= fSx7Ig== R0w= IHBvaXNvbg== IFRvd2Vy IGZvcm1hbA== YWx5c2lz IGdlbnVpbmU= IGtpbA== YXZlcg== IHByb2NlZHVyZQ== IFByb3A= aW50ZW5kbw== IE1haW4= YXNhbnQ= IHRyYWluZWQ= R2FtZQ== IExvYWQ= IE1B IGNydWNpYWw= IGxldHM= IEZS IGNoYW1waW9u MTAx IENvbmZlcmVuY2U= IHdyaXRlcnM= IGNvbm5lY3Rpb25z IG9rYXk= aXJtcw== IFJhbmQ= IGVuY291bnRlcg== IEJ1ZmY= IGFjaGlldmVk IGNoZWNrcw== aXNjb25z IGFzc2lzdGFudA== IHdoZW5ldmVy IEFjY2Vzcw== IFVy Ymlu IGNsb2Nr aXNw b3BoZXI= IGJvcnJvdw== IG1hZA== IHBlcnNvbmFsaXR5 b25seQ== SVNU YWJhbWE= IGdhaW5z IGNvbW1vbmx5 IHRlcnI= IGh5cG90 IHJlbHk= IHRpc3M= aXNjb25zaW4= IHJpZGlj ZnVuY3Rpb24= IE9yZWdvbg== IHVuY29t cmF0aW5n ZWxhbmQ= IE5D IG1vb24= YW5ub24= IHZ1bG5lcmFibGU= dXRpdmU= wqDCoMKgwqA= IFJhZGlv IHdlc3Rlcm4= c2VjdA== IFRvbnk= IG9jY3Vycw== IE9z IEhvbg== w60= IHZlc3NlbA== IFNjb3RsYW5k IGRpc2NyaW1pbmF0aW9u IHN1YnNlcXVlbnQ= c3RyaW5n IGZhbnRhc3k= IFNoYWRvdw== IHRlc3RpbQ== V0U= aXRp cmFz IGJvYXQ= IG1hcmtz IG9yZGluYXJ5 IHJlbg== IHJlcHJlc2VudGF0aXZl IHBldGl0aW9u IDcz IGFkdmVudHVyZQ== IGlnbm9yZQ== IFBoaWxhZGVscGhpYQ== IFNhdg== VlA= IGZhY3Rvcnk= IHRhc2tz IGRlcHJlc3Npb24= emVk Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= IFN0b3Jt IGNvZ24= IGVsaWdpYmxl IHJlZHVjaW5n dmlh IDA1 IHN0cmlraW5n IGRvbGxhcg== aG8= T1Y= IGluc3RydW1lbnQ= IHBoaWxvc29waHk= IE1vb3Jl IEF2ZW51ZQ== IHJ1bGVk IEZyb250 SU5F IE1haA== IHNjZW5hcmlv IE5BU0E= IGVub3Jt IGRlYnV0 IHRlYQ== VG9kYXk= IGFic2VuY2U= U2lt IGhhbQ== bGVlcA== IHRhYmxlcw== IEhlYXJ0 TUk= S2U= cmVxdQ== VkQ= bWFw IGNoYWlybWFu IHB1bXA= IHJhcGlkbHk= dmk= IHN1YnN0YW50aWFs RVA= ZGVz Y2hhbnQ= aWxpcHA= IFNhbnRh cmllcnM= YW5jaGVzdGVy TG9hZA== IENhc2U= IHNhdmluZw== IDc0 IEFGUA== ZXJuaW5n b3VuY2Vk IE1pbm5lc290YQ== IFdhcw== IHJlY3J1 IGFzc2Vzc21lbnQ= IEJyb24= VUU= IGR5bmFtaWM= IGZ1cm4= dWxhdG9y IHByb3BhZw== aGlnaA== IGFjY29tbW9k IHN0YWNr IFN1cw== d3JpdA== IHJldmVu IEdvZGQ= IFplYWxhbmQ= YWJz IGJydXQ= IHBlcnBldA== aG90 IGhhcmRseQ== IEJ1cm4= 44K5 IHN0eQ== IHRyYW5zYWN0aW9ucw== IGdhdGU= IHNjcmVlbnM= IHN1Ym1pdHRlZA== IDEwMQ== IGxhbmd1YWdlcw== dWdodA== ZW1lbg== IGZhbGxz IGNvYw== gqw= IHN0cmlrZXM= cGE= IGRlbGliZXI= IElN IHJlbGF4 YW5uZWxz IFNlbmF0b3I= IGV4dHJlbQ== IH0s IERlYg== IGJlbGw= IGRpc29yZGVy Y3V0 IGlPUw== IGxvY2tlZA== IGVtaXNzaW9ucw== IHNob3J0bHk= Il0= IEp1ZGdl IFNvbWV0aW1lcw== IHJpdmFs IGR1c3Q= IHJlYWNoaW5n RmlsZQ== wq/Cr8Kvwq8= aW5vaXM= IEphc29u IHNhdGVsbA== YXJldA== IHN0YXRpb25z IGFncmlj IFRlY2hub2xvZ3k= Y29tZXM= IFVuZm9ydHVuYXRlbHk= IENoaWxkcmVu IGFwcGxpZXM= YXN0ZWQ= IGFuZ2Vy YWlsYWJpbGl0eQ== IERhbWFnZQ== IGNvbXBhcmU= IFN0YW5kYXJk IGFpbWVk IEJh YW5ndWFnZQ== IHJlZ3VsYXRpb24= IGp1cnk= IGFpcnBvcnQ= IHNlY3Rpb25z IFByaW5jZQ== ZW1lZA== IG1lZGljaW5l IGhpdHRpbmc= IHNwYXJr b2x2ZXM= IGFkcw== U3RhdGU= IGZvb2Rz IHJlcGxhY2VtZW50 IGNoaWNrZW4= IGxvd2VzdA== IG1pbmRz IGludm9sdmVz dWk= IGFycmFuZw== IHByb2NlZHVyZXM= IFdoaWNo aXZlcnNhcnk= IGJpbGxz IGltcHJvdmVtZW50 IGluZXY= IGV4cGVjdGF0aW9ucw== IGludGVsbGVjdHVhbA== IHNwYWNlcw== IG1lY2hhbmlzbQ== MjUw YnJlYWs= IFpl IFRlbm4= IEJhbHQ= IGJhcnJlbA== IHN0YXRpYw== bWFubg== UG9saWNl IHRpcHM= IGhhbmRsaW5n Y3Vz b2RlZA== aWx0b24= aXJ5 IGpvdXJuYWxpc3Rz b3Vyc2U= IGNvbWlj IG5vbWluZQ== SVRZ IHZlcnN1cw== IGxvb3A= IHN1cmY= IEluZHVzdA== IEh1bnRlcg== IGJlbGllZnM= aXNhbg== IHNldHVw IGJyZXc= aW1hZ2U= IGNvbXB1dGVycw== Zm9s fSwi IE1lZGFs IHRheHA= IGRpc3BsYXllZA== IGdyYXY= IGZpc2NhbA== TW9u IE1vc2Nvdw== IEtvbmc= IENlbnRyZQ== IGNhbWVyYXM= IE1ycw== IEhheQ== IGF2ZXI= IEtlbGx5 cHk= IHJlcXVpcmVtZW50 IGVudGl0bGVk b21iaWU= IHNoYWRvdw== YWdpYw== IEFr IGVsaXRl IGRpdmlkZWQ= IGhlYWRpbmc= IGNvcGllcw== IGxvc3Nlcw== IHZpdA== a2Vk IEJyeQ== IGFucw== IFN0ZWFt IHJlcG9ydGVy aGVpbQ== IEl0ZW0= IHN1cGVyaW9y ZG9u ZXJlbnQ= w7Y= IHRoZXJhcHk= IHBlYWs= IE1vZGVs IGx5aW5n IGdhbQ== emVy cml0dGVu IHJlc3BvbnNlcw== IGNvbnNpZGVyYXRpb24= IEJpYmxl IGxveWFs IGluc3RhbnQ= IHBt IEZvcmVzdA== w7w= IGV4dGVuZA== IGNvbnZpY3RlZA== IGZvdW5kZXI= IGNvbnZpbg== IE9haw== Y2hlY2s= IHNjaG9sYXJz cGVk IG92ZXJzZQ== VG9w Y291bnQ= IEFyaw== wrc= IDA2 IExB bWQ= IExhdGlu aW1lbnRhbA== IENQVQ== IHN1YnN0YW5jZQ== IG1pbm9yaXR5 IG1hbnVmYWN0dXJpbmc= RXI= b2NvbGF0ZQ== IGF0dGVuZGVk IE1hbmFnZXI= cmF0aW9ucw== IGFwcHJlY2lhdGU= b215 R0JU aWRlbmN5 Qkw= IGd1YXJhbnRlZQ== cG9zaXRpb24= IG9jZWFu Y2x1ZGU= IGhlYWRlZA== IHRhcGU= IGxvb3Nl IGxvZ2lj IHByb3Zlbg== IHNwaXI= IGFkbWl0 aXNh IGludmVzdGlnYXRl IDE5OTQ= c3lsdg== IExvc3Q= Y2VzdA== IDcx IHJlcXVlc3RlZA== IHdpbmRvd3M= IFBva8Op IFdpdGhvdXQ= TWV0 IGJlaGF2aW91cg== IHJlYWRlcg== IGh1bmc= IEtlZXA= IHJvbGVz IGltcGxlbWVudGVk IGJsYW5r IHNlcnZlcw== IEpheQ== IGNpdGVk IEZyaWVuZA== cHJvZml0 YXBvbg== IHJlcGFpcg== aXRlbQ== YXJyYXNz IGNyaXRpY3M= YWRp IEZhdGhlcg== IHNob3V0 IGZvb2w= IDg4 IHByb2R1Y2luZw== IGxpYg== IHJvdW5kcw== IGNpcmNsZQ== IHByZXBhcg== IHN1Ym1pdA== IG5pYw== bW9ycm93 44Or VW5kZXI= IHZpdGFs YXRlcm4= IHBhc3N3b3Jk IHB1YmxpY2F0aW9u IHByb21pbmVudA== IHNwZWFrcw== IGJhcnM= IGRlZXBlcg== IE1pbGw= cG9ydGVk IHdpZA== IGJ1dHRlcg== IHNtb2tpbmc= IGluZGljYXRlcw== S2V5 cm9wcmk= IEZpbGU= YWxsaW5n YXN0aW5n IFJ1cw== IGFkag== IDc5 YXZhbA== IHByZXN1bQ== YnVyZ2g= b25pYw== IGZ1cg== IHBvbGxz aWth IHNlY29uZGFyeQ== IG1vbnN0ZXI= aWdz IEN1cnJlbnQ= RXZlbnQ= IG93bmVyc2hpcA== ZW5kYXI= IGFycml2ZQ== IFRheA== IG51bGw= IFByaXY= IHRocm8= IGtpc3M= Y2F0 IHVwc2V0 YW5nbGU= aXRjaGVz ZWN0b3I= b2xvZ2lzdHM= IEdhbGF4eQ== IGNvcnJ1cHRpb24= IGhpbnQ= ZW50ZXI= IEhvc3BpdGFs IGdyZWF0bHk= IGJlZ3Vu ZXN5 IHNvaWw= IEFudG9u IG1haW50ZW5hbmNl 44Op IGRvemVucw== IGh1bWFuaXR5 IEFsYWJhbWE= IHJvbQ== d29ydGg= YXBpbmc= c3lsdmFuaWE= bGFo IGdhdGhlcmVk R0E= IGF0dGFja2luZw== Zm91bmQ= IFNxdWFyZQ== IGFyYml0 aWN0aW9ucw== IFdpc2NvbnNpbg== IGRhbmNl IFNhaW50 YXJjaHk= IGJhc2ViYWxs IGNvbnRyaWJ1dGlvbnM= IGxpdGVyYXR1cmU= IGV4aGE= cGVydHk= dGVzdA== IGJhYg== IGNvbnRhaW5lcg== bGV0dGVy IGZhbGxlbg== IHdlYnNpdGVz IGJvdHRsZQ== IFNhYw== IGJyZWFzdA== IFBM IHZldGVyYW4= IGludGVydmlld3M= IEFsZQ== IGJhbm5lZA== ZW5nZXJz IFJldm9sdXRpb24= aW50aA== IGNvbmNlcm5pbmc= SVZF IGV4cGVuc2Vz IE1hdHRoZXc= IENvbHVtYmlh ZHM= aXN0YW5jZQ== IGVudGl0eQ== Li4uIg== IHJlbGlhYmxl IHBhcmFsbGU= IENocmlzdGlhbnM= IG9waW5pb25z IGluZHU= bG93 IGNvbXBldGU= IHRob3JvdWdo IGVtcGxveWVk IGVzdGFibGlzaG1lbnQ= aWdlbg== IENybw== IGxhd3llcnM= IFN0YXRpb24= VEU= IExpbmQ= IFB1cg== aXRhcnk= IGVmZmljaWVuY3k= 4oCQ IEx5 IG1hc2s= IGRpc2FzdGVy IGFnZXM= RVJF ZXNpcw== IEhvbGQ= IGNhc3VhbA== YmxlZA== IGVuYWJsZWQ= IEVudmlyb25tZW50 IEludGVsbGlnZW5jZQ== aXBlcg== IE1hcA== IEJF IGVtZXJnZWQ= aXNkb20= IGNhYmlu IHJlZ2lzdHJhdGlvbg== IGZpbmdlcnM= IHJvc3Rlcg== IGZyYW1ld29yaw== IERvY3Rvcg== ZXR0cw== IHRyYW5zcG9ydGF0aW9u IGF3YXJlbmVzcw== SGVy IGF0dGVtcHRpbmc= T2Zm IFN0b3Jl w4PDgsODw4LDg8OCw4PDgg== IEtub3c= IGRlZmVuY2U= IHNjYW4= IFRlbg== IENoYWly IFBI IEF0bGFudGE= IGZ1Y2tpbmc= IGFuc3dlcmVk Ym4= IEthcg== IGNhdGVnb3JpZXM= IHJhdGlvbmFs IGN1c3Q= IHJvYm90 IGNvcnJlY3RseQ== IGdpZg== IGdyYXBoaWNz bWlj IGdyb3VuZHM= IE9wcA== aWF0ZQ== IGRpc3RyaWJ1dGVk IHNhbmN0aW9ucw== IGNoYWxsZW5naW5n dXRv IGluZ3JlZGllbnRz IGludml0ZWQ= IGZvdW5kZWQ= IFJlcXU= ZGVk IGJvd2w= IGJyb3RoZXJz IEhh SU8= IHdhZ2Vz aW1vcmU= b2NpYWw= IHNlZWQ= YXRpdmVseQ== IGFkZHJlc3Nlcw== IElvd2E= YWJldGg= IGF0dGl0dWRl aXNk Y2hpbGQ= IG1vbGU= IGRpc2NvdmVyeQ== eWFyZA== QnI= IDgy IHN1cHBsaWVz ZWxsaW5n IGRpc3Rpbmd1 Q1I= IHJlY2VwdA== IHZlcnQ= IHN3aW0= YmVj ZG9vcg== IFllYWg= IGdhbA== IGludGVyYWN0 IEVTUA== IENT YW1wcw== IGNvbnZpbmNlZA== IG9iamVjdGl2ZQ== IGRpc2g= IFBob3Rvcw== bGFk IGRvd250b3du b2ls aW5jdGlvbg== IHRvbW9ycm93 IENPTQ== IHN1cnZpdmFs c2hvdA== IHNldHRsZW1lbnQ= Q29ucw== IFhib3g= aW50ZXJlc3Q= IFNN YXJnbw== ZW5lc3M= IGV0aG5pYw== YmVyZWQ= TWlu IFRvaw== IGluY2VudA== IENvbW1hbmQ= IG1haW50YWluZWQ= IGJyZWFrcw== YnJpZGdl YXRhcg== YWdn IEZpbmFsbHk= dW5pY2lw IE9udA== bGVmdA== IHJlY29nbml0aW9u ICov IFBlcnM= IHdlbGY= IGFkZHJlc3NlZA== IEthbnNhcw== IHZpcnVz IHdoZXJlYXM= IHBhcGVycw== cmFtcw== IE1pbmlzdHJ5 IHBsZWFzdXJl IGFjcXVpcmVk IGR1cmF0aW9u anBn IGNhbG0= IE5ITA== IGJ1cm5pbmc= IGZvbGRlcg== aWNrZWQ= IFB5 IElsbGlub2lz Q2xhc3M= IEdvZGRlc3M= IHBlcmZvcm1pbmc= IHdlbGZhcmU= amFy SW50ZXI= IGxpbg== IGVuaGFuY2U= IG5vdGlvbg== ZmFyZQ== eXBlcw== IEFyZWE= IGNhbm5hYmlz IERpZWdv ZnM= IE1hbmNoZXN0ZXI= Y29tbQ== aW5pdGU= IGNvdmVyaW5n IFNvdW5k IDE5NjA= IDg0 ZWxlY3Q= emluZw== IGNpdGl6ZW4= IHBob25lcw== IHJhaWQ= IGlnbm9yZWQ= IE9iamVjdA== IHVwbG9hZA== Y2FyZA== IG1vZGlmaWVk IHJvb21z aWFo cmFuZ2U= aGVhc3Q= YWNodXM= IHN1Z2dlc3Rpbmc= 4oCL Z3JhZGU= RWw= IGNsb3RoaW5n IHJo IEhhbg== dW5pdHk= ZW5jaW5n IEF1c3Rpbg== c2VjdXRpb24= dHJh ZGVt IFF1YWw= IGhlYXZlbg== IHN0YWdlcw== IHdlZGQ= cGx1cw== aWZpY2lhbA== IEltbQ== IEhv aWV0aWVz IHBocmFzZQ== IGJyaWxs YWN0b3J5 IHByb3ZpZGVycw== IHNpbGVuY2U= IGFlcg== IEFJ IEFkdmVudHVyZQ== IHBsYXRmb3Jtcw== IGRlbW9uc3RyYXRlZA== IGludGVyZg== aW5ndG9u IHJhY2Vz IGdyYWRl dWx0YW5l IFRocm91Z2g= ZmFsc2U= IGJvdw== IEFC IGZsYXZvcg== IGhpc3Rvcmlj Z292 IGNvbG91cg== IHZpZXdlZA== IEVtYWls ZWxjb21l IGludGVydmVudGlvbg== IGRpdmVyc2l0eQ== IHBlcmlvZHM= IHJldmVyc2U= IFZlcnk= IHF1b3Rl IExlZnQ= dGhyb3VnaA== IHNjcmV3 IGxhbmRpbmc= IHBpbGw= IHdldA== IHByb3Rlc3RlcnM= IHJlcGVhdA== YXZlZA== ZXJr IHNhbGFyeQ== IFBlbm5zeWx2YW5pYQ== U3RpbGw= IG1heW9y IGtpdGNoZW4= IGZlYXR1cmluZw== IE11c2V1bQ== IFRvdXJuYW1lbnQ= IEZhbA== IHNlcnZlcnM= VUM= IGFueWJvZHk= aW1n IFRyYWRl aXh0dXJl dGhlbGVzcw== IGZpbmFuY2U= IGNsb3Npbmc= IFBhdHJp aWFj YWJlbA== ID4+ b3JvdXM= IGZpcm1z c2NyZWVu dW5h IGVtYmFycmFzcw== dWxzZQ== IGxldHRpbmc= IHRocmV3 aWxleQ== IGNoYW5uZWxz bGFu IFZlZ2Fz IHNlYXI= IGZhbnRhc3RpYw== YXJyZQ== dXp6bGU= IERlcg== VGhvc2U= IHN3aW5n IHNoZWV0 aW5kZXg= Y292ZXI= b2dhbg== IHZhcmlhYmxlcw== IFRlY2g= IHNwb2tlbg== YWNoZWw= IERh IE1vdW50YWlu IGxvYWRlZA== IGZvb3RhZ2U= dmVyc2lvbg== IHVubA== IFBob2VuaXg= IHRocm93aW5n IGZpcmluZw== IHRyYWNraW5n IHdpZHRo IHN0cnVnZ2xpbmc= cm9vbXM= b3Rpb24= IG1vbnRobHk= IFNlcnZlcg== IGVnZ3M= b3Blbg== TUM= IDE5OTM= IGhpcmVk IHN0YXllZA== IEFsbGVu IHN0cm8= IDk4 c3RlcA== IFR1cmtpc2g= IGZhYnJpYw== aXN0aW5n IERvbQ== IGRhdGVz IHByb24= IGJhc2tldGJhbGw= IGx1Y2t5 IEFyYWJpYQ== IGFzc3VtZWQ= ZXN0eQ== IGFmZmFpcnM= IGdsYWQ= IEluZGVlZA== IEZB IFdvcmQ= IGpvaW5pbmc= aWZpY2U= cHJlYWQ= aXJ0cw== IFNlbGVjdA== IHBvcHVsYXRpb25z YXdhcmU= IG5vc2U= IGNvbXBsYWludHM= c3RhcnQ= IHNjb3Jpbmc= VGhhbmtz IG1pbmluZw== IHZpc2l0b3Jz U0g= IGRhbWFnZWQ= IGNoYXJhY3RlcmlzdGljcw== IFBlbnQ= REM= IDgz IFNpeA== cmF0ZXM= IGZsYWdz IEJyZXc= ZG9n TWFyaw== Ly8vLw== IGV4ZWN1dGlvbg== IGpva2U= cGhvbmVz IHRlc3RpbW9ueQ== IG9ic3Q= UUw= IEN1dA== IHN0dWRpZWQ= IE5pbnRlbmRv aWNrZXQ= IE5CQw== IGxhZA== IEJyYQ== IE1vaA== IGtlcm5lbA== IG92ZXJ3aGVsbWluZw== IGFnZWQ= IGFwcGxpY2FibGU= IENvbmQ= IHJvYWRz IEJsb2Nr bWFkZQ== b2RnZQ== IGNvbW1hbmRz IG9mZmljZXM= dmVsYW5k IHR1dA== IHJlY2VpdmVy IEZybw== IHNob3BwaW5n IGlQ IFN0cmU= IEFCQw== IGVudGVydGFpbm1lbnQ= IEJvdw== b3J0ZWQ= TWM= IHJlYWRz Z3JhZA== IENvbGxlY3Q= IOKIkg== IENhcGl0YWw= ZWRlcmF0aW9u IGVtcGxveWVy IGludm9sdmVtZW50 IGFueGlldHk= YWxpYQ== IHJvb2Y= IEFtb25n IERlbW9jcmF0 IHN0YXRz IFZpbGw= IGNvbnN0aXR1dGlvbmFs IHJlZmVycmluZw== aXR0eQ== IHRhY2tsZQ== b3V0dWJl IGJhY2tlZA== IEhvbmc= IEJyb2Fk IGVsZQ== IE90dA== IDE5OTI= aG91cg== YWNodXNldHRz Q2Fs IGRlZmVhdGVk IDgx ZXNw IHNlZW1pbmdseQ== d2Fz IEplbm4= IEt1cmQ= IGdlbmU= IGRpc2NvdW50 UmV0 RUNU KCk7 IGNsdWJz IHNpZA== IE1hcnNo Q2hlY2s= IHBw IEVhZw== aWRlc3ByZWFk IGJlaW5ncw== RlQ= IGludHJvZHVjdGlvbg== IENoYW5nZQ== QVJE IDExMA== YWRvd3M= aWVyY2U= IG1lYWw= YXV0aG9y IEJhbmc= bGFob21h IHJhbmtz MjAxMQ== Pz8/Pw== bWF4 IGNvbGxhcHNl IG9wZW5z IGVjaG8= IHNvcGg= IHJhY2lzdA== IGVub3Jtb3Vz IHdhdmVz IHRhcA== IGNvbXByZWhlbnNpdmU= Li0t IFJveQ== IGZhcm1lcnM= UmVsYXRlZA== YWlyZWQ= cm9uZXM= IENyaW0= IHByb3BvcnRpb24= IGRlc2lnbnM= IG5lZ290aWF0aW9ucw== IHZpcnR1YWxseQ== IEJhdG1hbg== IHdhcm4= IGxlZ2l0aW1hdGU= bWF0ZQ== IGNvbnZlbnRpb24= LCw= bmV0aWM= IFNE IGNvbnNpc3RlbnRseQ== IGNvbXBlbnNhdGlvbg== IHB1bmlzaG1lbnQ= IHll IHRpZQ== IEJ1cmVhdQ== aXJsZg== IEJ1 IEFyZW4= IFBoaWxpcHA= IGtuaWZl IG1lbW9yaWVz IFJvc3M= IGFuZ2xl IDg2 IFRodW5kZXI= IHJlbmQ= IFRvdXI= IGNvdW50cw== c3VuZw== IEltcA== IGVkdWNhdGlvbmFs IGFjY2Vzc2libGU= Q09N IGRyZXc= eWVy R2w= YW1pbmU= T1JU T0I= SUI= bWFzdGVy IHRyaWFscw== b2d5 aGFy IFRydXN0 IHByZWZlcnJlZA== aXJsZnJpZW5k IE5ldg== IGJpbg== IGNvdw== UGFnZQ== IHNpZ25hdHVyZQ== IEJM NzAw IHJldGlyZWQ= IGJ5dGVz IG5laWdoYg== IExlZ2VuZA== IGRldmFzdA== IHN1c3BlY3RlZA== aXNvbnM= IFBva8OpbW9u c2NhbGU= IGNhcGFiaWxpdGllcw== IHJldmVs IGNoZWVzZQ== ZHk= aWdyYW50 IGZhaWxpbmc= Yml0cw== IEhlcm9lcw== IEdob3N0 IFNjaWVudA== IGFwcG9pbnRlZA== dXJp IGluc3RpdHV0aW9u IGV4cGFuZGVk Z3JlZw== IG1vbml0b3Jpbmc= IHBvZGNhc3Q= IGNvYWxpdGlvbg== IDk2 Sm8= IHN0b2xlbg== IFNhYg== IHN0b3Bz IGhvbGlkYXk= IGludHI= Q2Fy QmxhY2s= IExHQlQ= IHdhcm1pbmc= IEFuZGVyc29u IDg5 IHByb2R1Y2Vy TWVk IGFjY3VyYWN5 IE1hcnZlbA== aXphYmV0aA== IFBhdHJpY2s= bW9ueQ== IG1pbmk= YWNsZXM= IG92ZXJ0 dGhleQ== IG1lbWJlcnNoaXA= IFZlbg== IGV4Y2g= IHJlbW92YWw= IERhdmU= VFk= bWFk IEZpbmQ= IGFkZXF1 IGVj IHRlZXRo IGVtb3Rpb24= IHBlcm0= IHNvbGVseQ== ZGI= IGV4dHJhb3Jk SUdIVA== Y2Fs IGd1aWRlbGluZXM= IGR5aW5n IHN1c3BlbmRlZA== IFByZW1pZXI= IEFudGhvbnk= ZWx2ZQ== IGRhZA== IEV0aA== IEZvb3RiYWxs IGFiYW5kb25lZA== IDw8 IG1hcmNo IGhvcnJvcg== 4oCmIg== IGNoaWxkaG9vZA== IGNhbXBhaWducw== IGx1bmNo IEFsYmVydA== YmxvY2s= 4paI4paI b3VuZGluZw== IGJvbmU= b3JnYW4= YWRlcnM= IEZsYXNo IERyaXZl IHRvbmlnaHQ= IHdhcnM= IEZM IGZvcm1hdGlvbg== Y29uc3Q= TmV3cw== IGNvbXBl b3Jpb3Vz IFN0YWZm IGRpc2N1c3Npb25z IFByb3RlY3Rpb24= IEphbQ== IGNyaXRlcmlh IGluc3RhbGxhdGlvbg== IGFjY29tcGxpc2g= aXp6YQ== IHB1Ymxpc2hlcg== IHJlc2N1ZQ== IFRyeQ== VUxM IFNvbQ== IEhvcA== b3JldA== dGhz b3Jkb24= IHBvY2tldA== IEludg== RG93bmxvYWQ= IENyaW1l IGJlbmU= IEd1aWRl IEFzc2VtYmx5 IHBhcmFtZXRlcnM= SUU= IEFsZXhhbmRlcg== IGNvbmNlcnQ= IFNjaGU= IHNob2Vz IHZpc2l0aW5n IHJlY2FsbA== IGJ1Yg== IHJ1cmFs IGNvbmNyZXRl IFJvcw== TmV4dA== UnVzcw== IGxvYW5z IFNoaWVsZA== IHRyZW0= aGVtYXQ= a2c= IEhhcnJpcw== aXNpdGlvbg== IE1vdmU= IEZD IGZhdGU= IENobw== IHRpcmVk IHByaW5jaXBhbA== aGlzdA== aWVuY2Vz YXRoeQ== IHNldmVudA== IG1vb2Q= IHN0cmF0ZWdpYw== IGRpc2Vhc2Vz IGZvcnVt IHRlbXBvcg== IGhlYWRxdWFydGVycw== UGFy aWdl ZmxpeA== IGd1aXRhcg== IDk0 T25seQ== IHJlbGVhc2Vz cm9waA== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IDYwMA== IENvbnRpbnVl aWdhdGU= IENyaXQ= c3lzdGVt IGRpc2FibGVk IHVuZXhwZWN0ZWQ= aXRodWI= IHVuY2xlYXI= IEVzdA== IGNvbnRyYWQ= IHN0cmF0ZWdpZXM= dmVudHVyZXM= IHBhc3NhZ2U= QU1F IGltcHJvdmluZw== IHJldmVhbHM= IGRlY3JlYXNl b3Zh IGFubm95 IFNob3J0 IExpYnJhcnk= IGN5YmVy bmVsbA== IEh1cg== IENC IHBob3RvZ3JhcA== VUk= IHNlZA== R2U= IDg3 IGRpdmVyc2U= IGVuY291cmFnZWQ= IGNvbnNwaXJhY3k= IGJpcmRz IG9wZXJhdG9y IGhhbmRmdWw= IGNsYXNzaWZpZWQ= Pyk= IGRyYW1hdGlj IGludmVzdGlnYXRvcnM= aXRv IHdpZGVzcHJlYWQ= IFJvb20= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGNvbGxlY3RpdmU= IGpvdXJuYWxpc3Q= U3RyaW5n IHRlbXBlcmF0dXJlcw== aWxh IGd1aWQ= IGluc3BlY3Q= IG1pc3NpbGU= IE1heW9y IG1hbnVhbA== IHNpbXVsdGFuZQ== IHJhdGluZ3M= IHN1Y2s= IDk3 IHVuaXZlcnNhbA== IHBoYXJt IGRpc3J1cHQ= aWFubw== QVY= IGZ0 IHN0YXRpc3Q= b2xkcw== IFdhbGtlcg== cGhw IHVuZGVydA== IExhcw== aXNob3A= bnRpbA== cmVzaG9sZA== IFdoZXRoZXI= TXM= IGRlbnk= IENsb3Vk IHByb3ZpZGVy IHN1cnZpdg== IFVwZGF0ZQ== aGFz IG1pc3Rha2Vz Y2hhcmdl cGxlZA== cml0eQ== IG5vZGU= IE1hc3NhY2h1c2V0dHM= b29scw== bGljYXRpb24= IGZhaWxz ZW1hbGU= b3Jp YmFja3M= IHNoaXJ0 ICcn IE5BVA== IHdhdGVycw== ZWxzb24= IGVhc2U= IHNjYXI= IGNvbnRlbnRz bWluZA== IGNvbnRyaWJ1dGlvbg== IHNocg== IGhhbmRlZA== IHN0YWJpbGl0eQ== IHRyYXZl RW0= IG1pcnJvcg== MTIz IHdlaWdo IGZpY3Rpb24= b3V2ZXI= aXN0YW50 cml0aW9u IEZlZA== IHBoeXNpY2FsbHk= IHN0YWtl IEFydGljbGU= IEFyYw== IExld2lz IE1pbmQ= IGRlbW9uc3RyYXRl IHByb2ZpdHM= dmlzaW9u b21pYw== b2xpZA== IGJhdHRsZXM= IGRyaXZlcw== IGVhc3Rlcm4= IFNvbnk= ISEh YXJhdGlvbg== dmFyZA== IEdM cG9ydGF0aW9u IDky IGxhd21ha2Vycw== IHByb3RlY3Rpbmc= IEVQQQ== IHllYWg= IHNoYW1l b2xwaA== ZXZlbg== eGl0 IGF0dGFjaA== IHJlcHJlc2VudGluZw== IG9icw== IFV0YWg= aWZmcw== IEZyZWVkb20= w7M= QUs= IGluY2lkZW50cw== aXRhZ2U= IHZpZXdlcnM= Y2Q= IG1vdXNl IGNsYXI= IGFjY29yZGFuY2U= IGJvdA== Y29y IFN1bW1lcg== aGVsZA== IGlubm9jZW50 IGluaXRpYXRpdmU= b2xz X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= IHNwb3Rz cGFjZQ== IGNvbnZlbnRpb25hbA== IGNvcnBvcmF0aW9ucw== IGJsb2NrZWQ= SEQ= YXR0ZXJlZA== IHJlZmVycw== IGJ1Y2s= IERpZ2l0YWw= MTIw IHRvcGljcw== VEY= xIE= YnJpZA== cmVlbWVudA== IHVuZGVybHlpbmc= IE1lbWJlcg== IGludmVzdGlnYXRpbmc= IHByZWduYW5jeQ== IHRvdWNoZG93bg== IEJhbmQ= IENhbGxlcg== IGluc3RhbmNlcw== UFA= d2E= R29vZA== IDE5OTE= IENvbGQ= IGZlYXJz IHJlbWFya3M= hpI= YXRhbA== IG1pdA== IGV4cGVyaW1lbnRz aXB0 Q29sb3I= aW5kdQ== VXBkYXRl IDkz QWc= IOU= YW5jb3V2ZXI= Qm90aA== IGp1ZGdlcw== T2JqZWN0 IHN0ZXJl dW1ibg== IHBhcnRpY2lwYXRpb24= IFN0YXJz IEplcmU= IHdlZWtseQ== IEJhbg== IGNvbnZlcnNhdGlvbnM= IFBpdHQ= dXo= IEluZGlhbmE= IEtpY2s= IGluZmVjdGlvbg== IGhlcm9lcw== IHNldHRsZWQ= IHN0cmlw IGhhbA== IGR1bXA= IFNjaQ== IGxlcw== IHJlZmVyZW5jZXM= IFVSTA== IEJyaWRnZQ== IHdhbnRpbmc= Rm9yY2U= IGV4Y2x1cw== TWVhbndoaWxl bW4= IGdlbnRsZQ== bWFrZXI= c2VuYWw= IEdybw== b3VyaQ== IFJhaW4= IEFsbGlhbmNl IGxpZnQ= ZWxh U0Q= IENsZXZlbGFuZA== IHJhbmtlZA== IHN0YWRpdW0= IGRlYWRseQ== 5Lg= IHJpZGluZw== YXJpYQ== IEFybW9y IGRvY3VtZW50YXRpb24= IEdyZWVjZQ== cmVlaw== IGxlbnM= IFNh IGdyb3Nz IEVtZXI= YWdlcnM= IER1Yg== IFJo IEFNRA== IGFycml2YWw= IGRlc2VydA== IHN1cHBsZW1lbnQ= IFJlc3A= IGtuZWU= IG1hcmdpbg== Zm9udA== b2dn MjAxMA== IFBpcg== IFByb20= aXZhbHM= IGludGFrZQ== IGRpZmZlcmVudGx5 dWdz IGJpdHM= Y2x1ZGVk IHNlYXJjaGluZw== IER1 dW1ibGU= IGZ1bmN0aW9uYWw= IEJhbHRpbW9yZQ== IENvdWxk IGRlc2lyZWQ= IGNpcmN1aXQ= IEx5bg== IEdP IEZhbHNl cmVwcmU= Jzo= YWx0aWVz IG1pbmlt IGRyb3Zl IFNob3VsZA== IGhpcA== IHByb3M= IHV0aWxpdHk= IE5hdHVyZQ== IE1vZGU= UHJlc2lkZW50 b3Bw cmF0 Zm9ybWFuY2U= IGNvbmNlbnRyYXRpb24= IGZvbnQ= IEJ1ZA== IGFtaWQ= IHJldmVycw== IE1M QmFy IGludGVyYWN0aW9u IGp1cmlzZA== IHNwZWxscw== ZGVw Zmls IGNpdmlsaWFucw== dXR0ZXI= IENvb3Blcg== IEJlbG93 IGVudHJhbmNl IGNvbnZlcnQ= IGNvbnRyb3ZlcnN5 b3dlcmVk IGNvbnRyYXJ5 IGFyYw== IEV4ZWN1dGl2ZQ== IE9mZmljZXI= IHBhY2thZ2Vz IHByb2dyZXNzaXZl d2lkdGg= IHJlc2VydmVk dm9s IFNhbXN1bmc= IHByaW50ZWQ= IGNlbnRlcnM= IGludHJvZHVjZQ== IEtlbm5lZHk= IG9kZHM= IHN1cmVseQ== IGluZGVwZW5kZW5jZQ== IHBhc3NlbmdlcnM= cmVwcmVuZQ== IEJlaA== IGxvdmVz IEVTUE4= IGZhY2lsaXQ= IGlkZW50aWNhbA== IGRvY3Q= IHBhcnRuZXJzaGlw Y29uZg== IEhpZGU= IGNvbmZ1c2Vk IENvdw== TWVu IHdyZXN0 IElyYXFp IGhvbGVz IFN0dWRpZXM= IHByZWduYW50 aGFyZA== IHNpZ25hbHM= SVg= IHB1bGxpbmc= IGdyYWR1YXRl IG5vbWluZWU= RGF0ZQ== IHBlcm1pdHRlZA== IOKCrA== IE9rbGFob21h U3RhcnQ= IGF1dGhvcml6ZWQ= IGFsYXJt IENvcw== dmFu IGdlbmVyYXRpb25z Y3VsYXI= IGRyYWdvbg== IFNvZnR3YXJl IEVkd2FyZA== IGNvbnRyb2xsZXI= U2Vu Z2VyZWQ= IFZpaw== IGFwcHJvYWNoZWQ= VGhhbms= IGNhbmNl IGZvcm11bGE= IFNtYWxs IHdlYWtuZXNz IHJhbXA= aXR1ZGVz anVk IGJyaWxsaWFudA== IGFjY3Vz c291cmNl IDgwMA== IEV2aWw= U3c= IGhvbWVsZXNz d2Vlaw== aWVucw== cmljcw== IFRoaXJk VE8= IG9yZ2FuaWM= IHByZXNlbnRhdGlvbg== YWdo IERvd25sb2Fk dmF0aW9u IGFzc2VtYmx5 b3JhYmxl aG9sZGVycw== IEJlcm5pZQ== IEhlbHA= IHRvbmc= IEZpZ2h0 IGJlYWNo Qm9vaw== IExpYw== IHJ1c2g= IFJvdW5k b3Vw IE1hcng= IGNhbGN1bGF0ZWQ= IERldmls IFNhcmFo IG9jY2FzaW9uYWxseQ== IGJ1bGxldA== QXZhaWxhYmxl Z2F0ZQ== IDkx IGhvc3A= IHByb21pc2Vz IEhJVg== IFN0YWRpdW0= IFN0b2Nr IENvcnBvcmF0aW9u Z2FnZQ== Tkc= IENyZWRpdA== IHNuZQ== aWJs IGFjY3Vt c3VjaA== IHRlcnJvcmlzdHM= IGNvbnNjaW91c25lc3M= IFpo IGRyYW1h b29sYQ== cGlyYXRpb24= IGxhYm91cg== IE5pbg== IHV0dGVy IGRlbW9jcmF0aWM= IGFzc2Fzcw== aWxhdGlvbg== IGdlc3Q= IGFicm9hZA== IG1ldGFi IHNvcnRz IGZsYXY= VUI= IG1n IE5vdGhpbmc= IE9k IG11c2ljYWw= MjAwOQ== IGRyb3Bz b2NhdGVk YXRlcmFs MDAwMDAw IGdyZQ== IGVxdWFsaXR5 IGJ1cmRlbg== IHZpZw== IExlYWRlcg== LS0tLS0tLS0tLS0t IGNlcmVtb255 IGZpZ2h0ZXI= IGFjdG9ycw== IOY= YW1hbg== Rmk= IGFsaWdu cHV0ZXI= IGVsZGVy IE5TQQ== IHJlcHJlc2VudGF0aW9u IE9udGFyaW8= SVRI dXNhbGVt IGhhcmFzc21lbnQ= aXR6ZXI= IHN5bXA= IGJveGVz IERS IG1hbmlmZXN0 YXRyZQ== IF4= IGRpZXM= bGV0b24= IG1pc3Npb25z ZXRoZQ== IHJlc29sdmU= IGZvbGxvd2Vycw== IGFzYw== IGtt bG9yZA== YW1tZWQ= IHNpbGVudA== IEFzc29jaWF0ZWQ= IHRpbWluZw== IHByaXNvbmVycw== IEtpbmdz IEZpdmU= IHRvd2Vy IGFwcHJvYWNoZXM= IHByZWNpc2VseQ== IGJ1cmVhdQ== IE1vdGhlcg== IElzcw== IGtleWJvYXJk aXR1YWw= IGZ1bmRlZA== IHN0YXlpbmc= IHBzeWNob2xvZ2ljYWw= IG1pbGU= IExlb24= IEJhcmI= d2lsbA== IHdpZGVy IEF0bGFudGlj IHRpbGw= IFJvbWU= cm90 IGFjY29tcGFu IGZsb3Vy YWNv V29ybGQ= IEV4cHJlc3M= IFl1 Q29y IHBsZWFzZWQ= cGFydHk= IHBvaW50aW5n IGluZmxhdGlvbg== IHJveQ== ICks YWluZXI= IHdlZGRpbmc= b3Jtb24= IHJlcXVpcmluZw== IHF1YWxpZmllZA== IHNlZ21lbnQ= RU5E IHNpemVz ZWFscw== IGNvcnJ1cHQ= YXNzYWRvcg== IGNlbGVi IGRyZWFtcw== IE1lc3M= IGNoZWNraW5n IFZlcnNpb24= IHByZXBhcmluZw== IGFjdGl2ZWx5 IERpZmY= IGx1eA== IFdpbnRlcg== YWN0ZXJpYQ== IE5F IGRlcHV0eQ== IHRyYW5zZ2VuZGVy IHN1bW1hcnk= IGluaGVy ZXJpZXM= Y2hhcg== IFlhbg== IGtub2Nr IFBhdGg= IGxpcA== cm9sbGVy IGltcHJlc3Npb24= IGNlbGVicmF0ZQ== IHNsaWRl IGd1ZXN0cw== IGNsaXA= RlM= IHNhdmluZ3M= IGNhcHRhaW4= IGxlZ2FjeQ== IERlbnZlcg== IHdvdW5kZWQ= dGFib29sYQ== QUNU IHB1cnN1ZQ== IG94eQ== IHE= IHNlbWk= IE5lZWQ= IEFmZmFpcnM= IG9ic2M= IGNoZWNrZWQ= IGR1YWw= Q29kZQ== IE1E bGVt dWx0eQ== IMKp IEVsaXphYmV0aA== IGNlbnR1cmllcw== YXJkZWQ= c3Jj IGV2aWRlbnQ= ZW5uaXM= YXRpbg== IHVuZW1wbG95bWVudA== IE1hcmlv IGludGlt Q2hyaXN0 IGJpb2xvZ2ljYWw= IHNvbGRpZXI= IEFkZGVk IG1hdGg= IEdpbA== IGJpYXM= IGRhdGluZw== IE9jZWFu IG1pY2U= TXVz aGlyZQ== IFRlcw== U2VydmVy bGltaXRlZA== U2l6ZQ== IG1ldGVycw== IHJvY2tldA== ZXNzZWU= IGNlcnRpZmljYXRl IElyYW5pYW4= QVNT IGdyaWQ= RGVj IHJvbGxpbmc= Y29tbXVu IFN3ZWRlbg== YnVyeQ== IHRpc3N1ZQ== IHJhY2lzbQ== IExvY2Fs IG15c3Rlcnk= IGV4YW1pbmU= IHN0ZW0= IHNpdHM= IGhvcGVk b3Rpbmc= IGRpYWxvZ3Vl IHBlcnN1 V2F0Y2g= bGF5 TUFO IGNocm9uaWM= IFBvcnRsYW5k bWFya2V0 IFNFQw== IHBhcmFsbGVs IHNjYW5kYWw= IGNhcnJpZXM= IHBoZW5vbWVub24= aHVtYW4= YWNrZXI= IE94 IHJldGlyZW1lbnQ= dGFpbm1lbnQ= b3ZpZQ== IEdlYXI= IGR1dGllcw== IGRvc2U= IHNjcm9sbA== TUI= aW5m IHNhdWNl IGxhbmRzY2FwZQ== cmVkZGl0 IENoYW1waW9uc2hpcA== IFJlZGRpdA== YWxpZA== IGNvaW4= IG92ZXJz IHBvc3Rpbmc= YWJvdXQ= IGZlbA== YW5keQ== IGJvbGQ= IGZvY3VzaW5n ZWZmZWN0 R1I= IGRlZW1lZA== IHJlY29tbWVuZGF0aW9ucw== IHN0ZXBwZWQ= IHZvdGVy IERlZXA= IEluc3RhZ3JhbQ== IG1vZGVyYXRl IE1hcnlsYW5k IHJlc3RyaWN0ZWQ= IE1C IENoYWxs IHRvYg== IGNpcg== IE9jYw== IEV2ZXI= IGNvbGxhcHM= SU5GTw== PS0= IFBpY3Q= IEFjY291bnQ= bmM= IG91Z2h0 IGV4cG9ydA== IGRydW5r KCc= IHdpc2U= IE1vcnQ= bmVjZXNz IGFuY2VzdA== IEluY3Jl IGZyZXF1ZW50 bWly IGludGVycHJldGF0aW9u IGRlcGVuZGVudA== IGNvaW5z IEJvbA== VmlkZW8= IEp1c3Rpbg== IGZhdGFs IGNvb2tpbmc= IGNvbmZ1c2lvbg== aXBoZXI= IGN1c3RvZHk= IE1vcmdhbg== b21hY2g= IEdvdmVybm9y IHJlc3RhdXJhbnRz ZWxpbmc= IGFja25vd2xlZGdlZA== IHRoZXI= IGdlbmVz Y2hpbmc= SGV5 IHRhY3RpY3M= IE1leGljYW4= IHZlbmQ= IGhlcw== cXVlcg== IG5vdGluZw== IENhbWVyb24= IHRhcmdldGluZw== cm9jaw== IGNyZWRpdHM= IGVtb3Rpb25z IHJlcHJlc2VudGF0aXZlcw== bmV3cw== IGxlZ2lzbGF0aXZl IHJlbW92aW5n IHR3ZWV0ZWQ= IENhcnRlcg== IEZpeGVk IGZvcmNpbmc= IHNwZWFrZXI= IG1hbGVz IFZpZXRuYW0= bGluZWQ= IGNvbmNlcHRz IHZvaWNlcw== b2ly IFRyaWI= V2hl IEplcnVzYWxlbQ== IFNhbnQ= IGN1bA== IGxhZHk= IEhhd2Fp IGFydHM= IElubg== IE1hY2hpbmU= IEVtcGVyb3I= IHNsb3Q= Z2x5 IFByb2Nlc3M= SUlJ IGF0aGxldGVz IFRlbXBsZQ== IFJlcHJlc2VudA== IHByZXNj IHRvbnM= IGdvbGRlbg== IHB1bmNo IEdS aXZlcnBvb2w= IGVuYWN0 IGxvYmJ5 IG1vcw== IHBpY2tpbmc= IGxpZmV0aW1l IGNvZ25pdGl2ZQ== RWFjaA== em8= IGR1Yg== IGNvbnNpc3Rz b2xu IGZlc3RpdmFs YW1vdXM= IGludGVsbGln d29yZHM= IFNtYXJ0 IGRlbGU= IGxhcHQ= IG1hZ2ljYWw= IFNpbg== YnVz dXJpdGllcw== aWdodGg= IFJ1Ynk= IFN1cmU= b2x2aW5n IGp1bg== T1NU IGltcG9zZWQ= IGFzdHJvbg== IGNvcnJlbA== IE5T IEtpdA== IEZ1dHVyZQ== YnVybg== IGltbXVuZQ== b2N1cw== IGNvdXJzZXM= IFN0cmluZw== IGxlYW4= IGdob3N0 IG91dGNvbWVz IGV4cGVuc2U= IGV2ZXJ5ZGF5 IGFjY2VwdGFibGU= QWg= IGVxdWlwcGVk IG9yYW5nZQ== RlI= IER1dGNo VGhvdWdo IFJhbms= UVU= IFJvYmVydHM= d2hhdA== cmVuZA== IGRpc2FwcGVhcg== IHNwYXdu IExhbQ== b2lz IGRlc2VydmU= IG1pbmltYWw= IG5lcnZvdXM= IFdvdWxk IHJvb2s= IFZhbmNvdXZlcg== IHJlc2lnbg== c2hpcmU= IFdvcmtz IEJ1aWxk IGFmZm9yZGFibGU= IEdhcnk= IEFyZW5h IGhhbmdpbmc= IGltcGxpY2F0aW9ucw== IFNvbmc= IG1haW50YWluaW5n IGd1YXJkcw== Q09O IGRlcml2ZWQ= IGV4ZWN1dGVk IHRoZW9yaWVz IHF1b3RlZA== IEFuZHJl b2dh c2VsZXNz aW5mbw== IEJlbGc= IHRlYXJz IFN1cnY= IGJpcnRoZGF5 aWdpb3Vz aW1tZXI= IHNwZWN0cnVt IGFyY2hpdGVjdHVyZQ== IHJlY3J1aXQ= YXJtYQ== VGFibGU= IG1vbnN0ZXJz IEdvdg== IGRlc3RpbmF0aW9u IGF0dHJhY3RpdmU= IGZvc3M= IE1vcmVvdmVy IHByZXNlbnRz VEhF IHJlcGx5 cHRvbg== IGN1bQ== IGRlbGlnaHQ= IGFmZmVjdHM= IGRvbmF0aW9ucw== IFRveQ== IEhpbQ== TUVOVA== IG92ZXJjb21l aXRjaGVk IEZhbnRhc3k= IEhhdA== IEJlYXN0 Ym90dA== IGludmVzdGlnYXRpb25z UnVu IGh1bnRpbmc= ZGk= ZnVuZA== IHNlc3Npb25z ZXN0eWxl IHBvcnRyYXk= b2lkcw== WWVhaA== IGNvbW11bmljYXRl IGNvbWVkeQ== IFlhbmc= IGJlbHQ= IE1hcmluZQ== IHByZWRpY3RlZA== UGxheQ== IGltcG9ydGFudGx5 IHJlbWFya2FibGU= IGVsaW1pbmF0ZQ== RGF2aWQ= IGJpbmQ= VklE IGFkdm9jYXRlcw== IEdhemE= aW1w REI= IE5h IFNpbWlsYXI= SUVT IGNoYXJpdHk= dmFz bWF0aA== IOKW b2tlcg== bmR1bQ== IGNhcHM= IEhhbA== MjAwMA== ZWFu IGZsZWV0 IHJlY3Jl UmlnaHQ= IHNsZWVwaW5n aWppbmc= a2luZA== IGRlc2lnbmF0ZWQ= w6Q= IGFuaW1hdGlvbg== a2Vl IEludHJvZHU= IC8+ IGRlbGF5ZWQ= IHRyZW1lbmQ= IGN1cmlvdXM= VXNl IGxlY3Q= ZGFt IGlubm92YXRpb24= IFBvaW50cw== IGxvYWRpbmc= IGRpc3B1dGU= Y3RpYw== aXJkcw== IEJZ IG51cnM= IFZhbHVl SU9OUw== IEh1bQ== IHRlbXBsYXRl bWVycw== IGFwcGVhcmFuY2Vz IEVudGVydGFpbm1lbnQ= IHRyYW5zbGF0aW9u IHNha2U= IGJlbmVhdGg= IGluaGli IGV1cm8= YWJldGVz IHN0dWR5aW5n IE1hcw== IHBlcmNlaXZlZA== IGV4YW1pbmVk IGVhZ2Vy IGNvYWNoZXM= IGltcGVy Y2hp IHByb2R1Y2Vz Iiku IEV2ZXJ5b25l IG11bmljaXA= IGdpcmxmcmllbmQ= IGhpcmU= IFZpY2U= IHN1aXRhYmxl b3B5 IGluZXF1 IER1a2U= ZmlzaA== Zmlyc3Q= IE9icw== IGludGVyaW9y IEJydWNl IFJ5 IGFuYWx5cw== IGNvbnNpZGVyYWJsZQ== IGZvcmVjYXN0 IGZlcnQ= b3JzaGlw IERydWc= IEFMTA== OiI= dGh1cg== IE1haWw= IGJhbGxvdA== IGluc3RhbnRseQ== IENoYW5uZWw= IHBpY2tz IDE5ODk= IHRlbnQ= b2xp IGNpdmlsaWFu Ymxpbmc= ZWxsbw== YnU= IGluY2g= IGxvZ28= IGNvb3BlcmF0aW9u IHdhbGtz IGludmVzdG1lbnRz IGltcHJpc29u IEZlc3RpdmFs IEt5 IGxlZ2FsbHk= IGdyaQ== Y2hhcmc= U2w= IHRocmVhdGVuaW5n ZHVjdGlvbg== Zmxvdw== IGRpc21pc3NlZA== aWJyYXJpZXM= Y2Fw ZWxl IE1jRw== IEhhcnZhcmQ= IENvbnNlcnZhdGl2ZQ== IENCUw== cG5n IHJvb3Rz IEhhdmluZw== dW1ibGVk IEZ1bg== XC8= IFNlYXJjaA== cGxleA== IGRpc2N1c3Npbmc= IGNvbnRpbnU= IFRhaQ== IFdpaw== RnJlZQ== Zml0 IHJlZnVzZQ== IG1hbmFnaW5n IHN5bmQ= aXBlZGlh d2Fsaw== IHByb2Zlc3Npb25hbHM= IGd1aWRhbmNl IHVuaXZlcnNpdGllcw== IGFzc2VtYg== dW50dQ== RmluYWxseQ== QVNF IEF1dG8= IEhhZA== IGFubml2ZXJzYXJ5 TEQ= IER1cg== IFVsdGltYXRl aWhhZA== cHJvZHVjdA== IHRyYW5zaXQ= IHJlc3RvcmU= IGV4cGxhaW5pbmc= IGFzc2V0 IHRyYW5zZmVycmVk IGJ1cnN0 YXBvbGlz IE1hZ2F6aW5l IENyYQ== IEJS Z2dlZA== IEhF TWljaA== YmV0 IExhZHk= eWx1bQ== ZXJ2ZXM= IG1lZXRz d2hpdGU= TG9n IGNvcnJlc3BvbmRpbmc= IGluc2lzdGVk R0c= IHN1cnJvdW5kZWQ= IHRlbnM= IGxhbmU= IGNvaW5j aG9tZQ== IGV4aXN0ZWQ= ZWN0ZWQ= IERvdWJsZQ== bGFtbQ== IHNrZXB0 ZXhw IHBlcmNlcHRpb24= aWV2 IEJlaW5n b2Z0 IGFkb3B0 Ljo= XTs= V2luZG93cw== IHNhdGVsbGl0ZQ== QVNI IGluZmFudA== ZGVzY3JpcHRpb24= IE1lYW53aGlsZQ== Y20= b2Nh IFRyZWF0 YWN0b3I= IHRvYmFjY28= IE5vcm0= ZW1wdGlvbg== IGZsZXNo IGpl b29w IEhlYXZlbg== IGJlYXRpbmc= YW5pbQ== IGdhdGhlcmluZw== IGN1bHRpdg== R08= YWJl IEpvbmF0aGFu IFNhZmV0eQ== IGJhZGx5 cHJvdA== IGNob29zaW5n IGNvbnRhY3RlZA== IHF1aXQ= IGRpc3R1cg== IHN0aXI= IHRva2Vu RGV0 IFBh IGZ1bmN0aW9uYWxpdHk= MDAz c29tZQ== IGxpbWl0YXRpb25z IG1ldGg= YnVpbGQ= Y29uZmln TlQ= cmVsbA== YmxlbQ== IE1vbQ== IHZldGVyYW5z IEh1 IHRyZW5kcw== YXJlcg== IEdpdmVu IENhcHRpb24= bWF5 QVNU IHdvbmRlcmluZw== IENsYXJr bm9ybWFs IHNlcGFyYXRlZA== IGRlc3A= c3RpYw== YnJldw== IHJlbGF0aW5n IE5paw== IEZhcm0= IGVudGh1c2k= Z29vZA== ZGVi IGFjdGl2aXN0 IG1hcnQ= IGV4cGxvc2lvbg== IEVjb25vbWlj TGluaw== IGluc2lnaHQ= IGNvbnZlbmllbnQ= IGNvdW50ZXJwYXJ0 c3VwcG9ydA== IFZpcnQ= YWdlbg== IFRlbm5lc3NlZQ== IFNpbW9u IEF3YXJk T0NL IEZpZ3VyZQ== IG92ZXJzZWFz IHByaWRl IENhcw== bm90ZQ== bWc= Q3VycmVudA== IGRpc3BsYXlz Y29udGVudA== IHRyYXZlbGluZw== IGhvc3BpdGFscw== IEZpbmFuY2lhbA== IFBhc3Q= IGRlZmVuZGFudA== IHN0cmVhbWluZw== bWJsZQ== IEJlcmxpbg== dWtp IGRpc3RyaWJ1dA== IGFudGli IGNob2NvbGF0ZQ== IENhc3RsZQ== IGludGVycnVwdA== IFJvdw== IGNvbnZlcnNpb24= IGJ1Z3M= IFJhdGhlcg== bGllc3Q= TFk= IEplYW4= Y29tbW9u YWto IDEzMA== b3R0b24= IERlYW4= IGFtZW5kbWVudA== IGdhbWVwbGF5 IFdhcnJlbg== b2Rh IGhpZ2hsaWdodHM= IGlycmU= IE5BVE8= IGJhbGxz IGRlbWFuZGluZw== VVJF IEx1a2U= RmlndXJl c3RvcA== b25pYQ== em9uZQ== aXplcnM= IFdS IGF3YXJkZWQ= IHJlZ3VsYXRvcnk= IEhhcnQ= IFNO cGxpbmc= IHNvdXI= IFBpeGVs dXNpdmU= IGZldA== IFNlbnQ= IGF1dG9tYXRpYw== IGZlcg== dmVybm1lbnQ= IEtoYW4= VE9O ZmF0aGVy IGV4dHJhb3JkaW5hcnk= dGhyb3A= IFB5dGhvbg== IEdQVQ== IHNleHVhbGx5 IGRlc2t0b3A= aXRpdml0eQ== IEFudG9uaW8= IG9yaWVudA== IGVhcnM= b2JieQ== b3VzZXM= dmVydGlzZW1lbnRz IG1hbnVmYWN0dXJlcnM= aWNpZW50 bWludXRl IGNvbnZpY3Rpb24= IGdhcmRlbg== cHVibGlj IHNhdGlzZmllZA== Zm9sZA== T0s= IGluaGFi IFRoaW5r IHByb2dyYW1tZQ== IHN0b21hY2g= IGNvb3JkaW4= IGhvbHk= IHRocmVzaG9sZA== IHJoZXQ= IHNlcmlhbA== IGVtcGxveWVycw== IEV2ZXJ5dGhpbmc= cmFo IGJvdGhlcg== IGJyYW5kcw== VmFsdWU= IFRlZA== IFBsYW5ldA== IHBpbms= IEZ1cnRoZXJtb3Jl c2E= UEU= cmVjaw== IFVTRA== b3R0ZQ== ICYm IGxhbmRlZA== Z2V0cw== IHByb2R1Y2Vycw== IGhlYWx0aGNhcmU= IGRvbWluYW50 IGRlc3Rybw== IGFtZW5kZWQ= Y2hyb24= IGZpdHM= IFN5ZA== IEF1dGhvcml0eQ== QVRDSA== IGZpZ2h0cw== IExMQw== IC0tLQ== IENvcnA= IHRveGlj c3BlY2lmaWM= IENvcm4= IENoZWw= IHRlbGVwaG9uZQ== IFBhbnQ= IG15c3RlcmlvdXM= YXVuY2g= b2RveA== bWVkaWE= IHdpdG5lc3Nlcw== YWd1 IHF1ZXN0aW9uZWQ= IEJyZXhpdA== IFJlbWVtYmVy ZW5leg== IGVuZG9yc2U= aWF0cmlj IElkZW50 IHJpZGljdWxvdXM= MTEw IHByYXllcg== IHNjaWVudGlzdA== IDE5NTA= IEFxdQ== IHVuZGVyZ3JvdW5k IFVGQw== bWFyZQ== IExhdGVy d2ljaA== IHN1YnNjcmli IGhvc3Rz IGVycg== IGdyYW50cw== YW50b20= IHN1bW1vbg== ZWFybHk= IENsZWFy IFByaW0= IHN1c3BlbnNpb24= IGd1YXJhbnRlZWQ= YXBwZXI= IHJpY2U= IFNlYW4= IFNoaW4= IHJlZmVyZW5kdW0= IGZsZWQ= cnVzdA== IDM2MA== dGVyeQ== IHNob2NrZWQ= QlI= IE9pbA== IEFsbGFo IHBhcnRseQ== IGlnbm9y IHRyYW5zbWlzc2lvbg== IGhvbW9zZXh1YWw= aXZlcnNhbA== IGhvcGVmdWxseQ== 44Kk IGxlc3Nvbg== TGVn IC4u WWV0 dGFibGU= YXBwcm9wcmk= cmV0dA== IGJvYXJkcw== IGluY29ycmVjdA== IGJhY3Rlcmlh YXJ1 YW1hYw== IHNuYXA= Lici IHBhcmFk dGVt aGVhcnQ= IGF2YWlsYWJpbGl0eQ== IHdpc2RvbQ== ICgr IHByaWVzdA== IMKgIMKg T3Blbg== IHNwYW4= IHBhcmFtZXRlcg== IGNvbnZpbmNl ICglKQ== cmFj IGZv IHNhZmVseQ== IGNvbnZlcnRlZA== IE9seW1waWM= IHJlc2VydmU= IGhlYWxpbmc= IE1pbmU= TWF4 IGluaGVyZW50 IEdyYWhhbQ== IGludGVncmF0ZWQ= RGVt IHBpcGVsaW5l IGFwcGx5aW5n IGVtYmVk IENoYXJsaWU= IGNhdmU= MjAwOA== IGNvbnNlbnN1cw== IHJld2FyZHM= UGFs IEhUTUw= IHBvcHVsYXJpdHk= bG9va2luZw== IFN3b3Jk IEFydHM= Jyk= IGVsZWN0cm9u Y2x1c2lvbnM= IGludGVncml0eQ== IGV4Y2x1c2l2ZWx5 IGdyYWNl IHRvcnR1cmU= IGJ1cm5lZA== dHdv IDE4MA== UHJvZHU= IGVudHJlcHJlbmU= cmFwaGljcw== IGd5bQ== cmljYW5l IFRhbQ== IGFkbWluaXN0cmF0aXZl IG1hbnVmYWN0dXJlcg== IHZlbA== IE5p IGlzb2xhdGVk IE1lZGljaW5l IGJhY2t1cA== IHByb21vdGluZw== IGNvbW1hbmRlcg== IGZsZWU= IFJ1c3NlbGw= IGZvcmdvdHRlbg== IE1pc3NvdXJp IHJlc2lkZW5jZQ== bW9ucw== IHJlc2VtYg== IHdhbmQ= IG1lYW5pbmdmdWw= UFQ= IGJvbA== IGhlbGlj IHdlYWx0aHk= IHJpZmxl c3Ryb25n cm93aW5n cGxhbg== YXN1cnk= 4oCmLg== IGV4cGFuZGluZw== IEhhbWlsdG9u IHJlY2VpdmVz U0k= ZWF0dXJlcw== IEFuaW0= UkVF UHV0 IGJyaWVmbHk= cml2ZQ== IHN0aW11bA== IGBgKA== IF9f IGNoaXA= IGhheg== IHByaXpl IFRoaW5ncw== QUNF dWxpbg== ZGljdA== b2t1 IGFzc29jaWF0ZQ== b2NrZXRz eW91dHViZQ== U3Rvcnk= YXRlZ29yeQ== IG1pbGQ= YWlsaW5n IFll T3JpZw== IEth b3JpZw== IHByb3BhZ2FuZGE= IGFub255bW91cw== IHN0cnVnZ2xlZA== IG91dHJhZ2U= QVRFRA== IEJlaWppbmc= cmFyeQ== IGxlYXRoZXI= IHdvcmxkcw== IGJyb2FkZXI= MTI1 aWRhbA== IEJldHRlcg== IHRlYXI= RXh0 IHByb3Bvc2Fscw== IGl0ZXI= IFNxdWFk IHZvbHVudA== bWk= RGlk IFB1 cGlu IHNwZWFrZXJz IGJvcmRlcnM= IGZpZ3VyZWQ= PSc= IHNpbXVsdGFuZW91c2x5 YWVkYQ== IGNoYXJnaW5n IHVyZ2Vk IGNvbmo= MjU2 IEdvcmRvbg== bWVyY2U= IGRvY3VtZW50YXJ5 U2hhcmU= aXRvbA== T05F IEdhcmRlbg== aGF0dA== IFRob21wc29u YW5lb3Vz YXBvcmU= IHRhbmtz IGxlc3NvbnM= dHJhY2s= IG91dHN0YW5kaW5n IHZvbHVudGVlcnM= IHNwcmF5 IG1hbmFnZXJz bGFyZ2U= IGNhbXBz IGFydGlmaWNpYWw= IFJ1 IGJhZ3M= dGhhbA== IGNvbXBhdGlibGU= IEJsYWRl IGZlZA== IGFyZ3Vlcw== Rkk= IHVuZmFpcg== IGNvcm4= IG9mZnNldA== IGRpcmVjdGlvbnM= IGRpc2FwcG9pbnRlZA== IENvbnZlbnRpb24= IHZpZXdpbmc= TUU= b2NpdHk= IHRvd25z IGxheWVycw== IHJvbGxlZA== IGp1bXBlZA== IGF0dHJpYnV0ZQ== IHVubmVjZXNz aW5jb2xu IHN1cHBvc2U= IE5ldGhlcg== Y2hh IGJ1cmllZA== IHNpeHRo QmVu cmVzc2luZw== T1VS IHdvdW5k IGN5Y2w= IG1lY2hhbmlzbXM= IGNvbmdyZXNzaW9uYWw= IEVsZW1lbnQ= IGFncmVlbWVudHM= IGRlY29y IGNsb3Nlc3Q= IE1pdA== R29vZ2xl fX0= IG1peHR1cmU= IGZsdWlk U2lnbg== IFNjaG9sYXI= IHBpc3Q= YXNrZXQ= YWJsaW5n IHJhY2luZw== aGVybw== cmllbA== YXNzeQ== IGNoZWFwZXI= YmVu IHZlcnRpY2Fs YW1hY2FyZQ== IFJlYWRpbmc= Z21lbnRz IGhlbGljb3A= IHNhY3JpZmljZQ== YXlh cGFyZW4= VkE= IExlcw== IFN0dWRpbw== IHZpb2xhdGlvbnM= IEFubmE= YWNlcg== 6b4= IFJhdA== IEJlY2s= IERpY2s= IEFDVA== IGNvbXBvc2l0aW9u IHRleHR1cmU= IE93bg== IHNtYXJ0cGhvbmU= IE5B IGZvcmI= aW1wb3J0 IGRlZmVuZGluZw== aWxzdA== cmVy IG9o IEplcmVteQ== IGJhbmtpbmc= Y2VwdGlvbnM= IHJlc3BlY3RpdmU= Ly4= IGRyaW5rcw== IFdp IGJhbmRz IExpdmVycG9vbA== IGdyaXA= IEJ1eQ== IG9wZW5seQ== IHJldmlld2Vk cGVydA== IHZlcmlmeQ== IENvbGU= IFdhbGVz TU8= IHVucHJl IHNoZWx0ZXI= IEltcGVyaWFs IGd1aQ== IERhaw== IHN1Z2dlc3Rpb25z IGV4cGxpY2l0bHk= IHNsYXZl IGJsb2NrY2hhaW4= IGNvbXBldGluZw== IHByb21pc2luZw== U09O IHNvY2Nlcg== IGNvbnN0aXR1dGlvbg== NDI5 IGRpc3RyYWN0 IFVzZXI= ZXNpZGVz IE1ldGhvZA== IFRva3lv IGFjY29tcGFuaWVk Q2xpZW50 c3Vy YWxvZw== IGlkZW50aWZpY2F0aW9u IGludmFzaW9u YXNtYQ== IGluZHVzdHJpZXM= cHBlcnM= IHN1YnRsZQ== IFVuaXQ= bmF0dXJhbA== IHN1cnZpdmVk IGZsYXc= mIU= IEhvbGw= IGRlZmljaXQ= IHR1dG9yaWFs IENoYW5jZQ== IGFyZ3Vpbmc= IGNvbnRlbXBvcmFyeQ== IGludGVncmF0aW9u Zm9yd2FyZA== IHR1bQ== aXRpcw== IGhpZGluZw== IERvbWlu IFRhbg== IEJ1aWxkaW5n IFZpbg== IHNwb2tlc3BlcnNvbg== IE5vdGVz IGVtZXJnaW5n IHByZXBhcmF0aW9u IHByb3N0 IHN1c3BlY3Rz IGF1dG9ub20= RGVzY3JpcHRpb24= IGRlYWx0 IFBlYXI= IHN0ZWFkeQ== IGRlY3JlYXNlZA== IHNvdmVyZQ== IENsaW4= IGdyYWR1YWxseQ== b3JzZXM= IFdBUg== U2Vydg== 44Ki aHI= IGRpcnR5 IEJhcm4= IEJD IGRpbA== IGNhbGVuZGFy IGNvbXBsaWFuY2U= IGNoYW1iZXI= YmI= IHBhc3Nlbmdlcg== YXRlZnVs IFRpdGxl IFN5ZG5leQ== IEdvdA== IGRhcmtuZXNz IGRlZmVjdA== IHBhY2tlZA== YXNzaW9u IGdvZHM= IGhhcnNo SUNL bGVhbnM= IGFsZ29yaXRobQ== IG94eWdlbg== IHZpc2l0cw== IGJsYWRl IGtpbG9tZXQ= IEtlbnR1Y2t5 IGtpbGxlcg== UGFjaw== ZW5ueQ== IGRpdmluZQ== IG5vbWluYXRpb24= YmVpbmc= IGVuZ2luZXM= IGNhdHM= IGJ1ZmZlcg== IFBoaWxs IHRyYWZm QUdF IHRvbmd1ZQ== IHJhZGlhdGlvbg== ZXJlcg== bWVt IEV4cGxpY2l0 6b6N IGNvdXBsZXM= IHBoeXNpY3M= IE1jSw== IHBvbGl0aWNhbGx5 YXdrcw== IEJsb29t IHdvcnNoaXA= ZWdlcg== dXRlcg== IEZP IG1hdGhlbWF0 IHNlbnRlbmNlZA== IGRpc2s= IE1hcmc= IC8q UEk= IG9wdGlvbmFs IGJhYmllcw== IHNlZWRz IFNjb3R0aXNo IHRoeQ== XV0= IEhpdGxlcg== UEg= bmd0aA== IHJlY292ZXJlZA== aW5nZQ== IHBvd2Rlcg== IGxpcHM= IGRlc2lnbmVy IGRpc29yZGVycw== IGNvdXJhZ2U= IGNoYW9z In0seyI= IGNhcnJpZXI= YmFibHk= SGlnaA== IFJU ZXNpdHk= bGVu IHJvdXRlcw== dWF0aW5n Rmls Tk9U d2FsbA== c2J1cmdo IGVuZ2FnaW5n IEphdmFTY3JpcHQ= b3Jlcg== bGlob29k IHVuaW9ucw== IEZlZGVyYXRpb24= IFRlc2xh IGNvbXBsZXRpb24= IFRh IHByaXZpbGVnZQ== IE9yYW5nZQ== IG5ldXI= cGFyZW5jeQ== IGJvbmVz IHRpdGxlZA== IHByb3NlY3V0b3Jz IE1F IGVuZ2luZWVy IFVuaXZlcnNl IEhpZw== bmll b2FyZA== IGhlYXJ0cw== IEdyZQ== dXNzaW9u IG1pbmlzdHJ5 IHBlbmV0 IE51dA== IE93 IFhQ aW5zdGVpbg== IGJ1bGs= U3lzdGVt aWNpc20= IE1hcmtldGFibGU= IHByZXZhbA== IHBvc3Rlcg== IGF0dGVuZGluZw== dXJhYmxl IGxpY2Vuc2Vk IEdo ZXRyeQ== IFRyYWRhYmxl IGJsYXN0 4KQ= IFRpdGFu ZWxsZWQ= ZGll SGF2ZQ== IEZsYW1l IHByb2ZvdW5k IHBhcnRpY2lwYXRpbmc= IGFuaW1l IEVzcw== IHNwZWNpZnk= IHJlZ2FyZGVk IFNwZWxs IHNvbnM= b3duZWQ= IG1lcmM= IGV4cGVyaW1lbnRhbA== bGFuZG8= aHM= IER1bmdlb24= aW5vcw== IGNvbXBseQ== IFN5c3RlbXM= YXJ0aA== IHNlaXplZA== bG9jYWw= IEdpcmxz dWRv b25lZA== IEZsZQ== IGNvbnN0cnVjdGVk IGhvc3RlZA== IHNjYXJlZA== YWN0aWM= IElzbGFuZHM= IE1PUkU= IGJsZXNz IGJsb2NraW5n IGNoaXBz IGV2YWM= UHM= IGNvcnBvcmF0aW9u IG94 IGxpZ2h0aW5n IG5laWdoYm9ycw== IFVi YXJv IGJlZWY= IFViZXI= RmFjZWJvb2s= YXJtZWQ= aXRhdGU= IFJhdGluZw== IFF1aWNr IG9jY3VwaWVk IGFpbXM= IEFkZGl0aW9uYWxseQ== IEludGVyZXN0 IGRyYW1hdGljYWxseQ== IGhlYWw= IHBhaW50aW5n IGVuZ2luZWVycw== TU0= IE11c3Q= IHF1YW50aXR5 UGF1bA== IGVhcm5pbmdz IFBvc3Rz c3RyYQ== 44O844M= IHN0YW5jZQ== IGRyb3BwaW5n c2NyaXB0 IGRyZXNzZWQ= TWFrZQ== IGp1c3RpZnk= IEx0ZA== IHByb21wdGVk IHNjcnV0 IHNwZWVkcw== IEdpYW50cw== b21lcg== IEVkaXRvcg== IGRlc2NyaWJpbmc= IExpZQ== bWVudGVk IG5vd2hlcmU= b2NhbHk= IGluc3RydWN0aW9u Zm9ydGFibGU= IGVudGl0aWVz IGNt IE5hdHVyYWw= IGlucXVpcnk= IHByZXNzZWQ= aXpvbnQ= Zm9yY2Vk IHJhaXNlcw== IE5ldGZsaXg= IFNpZGU= IG91dGVy IGFtb25nc3Q= aW1z b3dza2k= IGNsaW1i bmV2ZXI= IGNvbWJpbmU= ZGluZw== IGNvbXBy IHNpZ25pZmljYW5jZQ== IHJlbWVtYmVyZWQ= IE5ldmFkYQ== IFRlbA== IFNjYXI= IFdhcnJpb3Jz IEphbmU= IGNvdXA= YmFz IHRlcm1pbmFs LC0= T0g= IHRlbnNpb24= IHdpbmdz IE15c3Rlcg== 77+977+977+977+9 IFVubGlrZQ== dmFsaWQ= dmlyb25tZW50cw== IEFsaQ== IG5ha2Vk Ym9va3M= IE11bg== IEd1bGY= IGRlbnNpdHk= IGRpbWlu IGRlc3BlcmF0ZQ== IHByZXNpZGVuY3k= IDE5ODY= aHk= SU5E IHVubG9jaw== aW1lbnM= IGhhbmRsZWQ= IEVi IGRpc2FwcGVhcmVk IGdlbnJl IDE5ODg= IGRldGVybWluYXRpb24= U3RyZWFt aWtv YXB0ZXJz IGFja25vd2xlZGdl SmFu IGNhcGl0YWxpc20= UGF0 IDIwMjA= IHBhaW5mdWw= IGN1cnZl IGJvbWJz c3Rvcm0= IE1ldGFs ZW5jZXI= IEZpZw== IEFhcm9u YW5jaGVz IGluc3BpcmF0aW9u IGV4aGF1c3Q= dGFpbnM= YXNoaQ== IGRlc2NyaXB0 IHJpdHVhbA== IENoZWxzZWE= IHByb21vdGlvbg== IEh1bmc= IFdhcmQ= aXZh IEVU IHRvc3M= YWxsb3c= IEZyYW5jaXM= RGVw IGhhcHBpbmVzcw== IEdsYXNz IGJldGE= IHN0cmVuZ3RoZW4= TkU= b2E= IGJ1dHRvbnM= IE11cnJheQ== IGtpY2tlZA== UXVlc3Q= IFRhbGs= IFNldmVyYWw= IFplcm8= IGRyb25l dWxr IGNhbQ== IE1vYmlsZQ== IHByZXZlbnRpbmc= IHJldHJv IEF4 IGNydWVs IGZsb2F0 Liks IGZpbGluZw== IEdyYW50 IEJvcg== IHJpYg== IGNoYW1waW9uc2hpcA== IE1lcmM= IHN0eWxlcw== IGNha2U= IGJ1aWxkcw== IFNlbGY= aW94 IGVwaWM= b3lk QmVs IFN0ZXc= Lig= YWh1 IEJleW9uZA== IG91dHM= IHNvbG8= IFRyZWU= IHByZXNlcnZl IHR1Yg== QVJF cm9j IEltcHJv IFdyaWdodA== IGJ1bmQ= IHRyYWdlZA== IG9jY2FzaW9uYWw= Ymlhbg== U2Vjb25k cm9ucw== IGludGVyYWN0aW9ucw== Zm9ybWVk c2luZw== IG93bnM= IGhvY2tleQ== R2VuZXJhbA== IGxvZ2ljYWw= IGV4cGVuZA== IGVzY2Fs IEdyaWZm IENyb3du IFJlc2VydmU= IHN0b3BwaW5n IGV4Y3VzZQ== c2Vjb25k IG9wZXJhdGVk IHJlYWNoZXM= IE1hbGF5cw== IHBvbGx1dGlvbg== IEJyb29rbHlu IGRlbGV0ZQ== IGhhc2g= QmxvY2s= YWhh 4oCz IHNob3J0ZXI= cGllY2U= Pjwv IGhvcm0= IFdhdA== IEJyZWFr IHByb2hpYml0ZWQ= IGludGVuc2l0eQ== IEFsYW4= IGxpYWJpbGl0eQ== PyE= YW5kZWQ= IG5laWdoYm91cg== IENvbGxlY3Rpb24= IGZpcmVz IHJldm9sdXRpb25hcnk= Zmx5 IE9ybGVhbnM= V2hpdGU= IFdyaXQ= IERhd24= IHNldHRsZQ== IGV4ZWN1dGU= Qk0= IHNwb2tlc3dvbWFu IGxpZmVzdHlsZQ== IGNsaWNraW5n IEtpbGw= IExpYmVyYWw= IE5hemk= IHRyYWlsZXI= IG1vdW50YWlucw== IGRhbW4= emVz cGVz IHByZXNzaW5n IGJhaWw= IE9yZ2FuaXphdGlvbg== IHBpcg== IHRoaXJ0eQ== IGVsZWN0cmljYWw= IDExNQ== IFBvbHk= IFJhcA== IFN0cmlrZQ== IENhbm4= IGRlbWFuZGVk IGJhY2tpbmc= ZGVmYXVsdA== c3BlZWQ= IExlZ2lzbA== IG1vdGhlcnM= IEJvZHk= IHZhcmlhdGlvbg== Y2VkZW50ZWQ= cG93ZXJlZA== bGVhZGluZw== TmV2ZXI= IGdyYXZl IEFudGk= QVc= IGludGVydmlld2Vk IEdhYg== IEZhdA== IHJvb2tpZQ== dXU= IGRlcG9z aXhvbg== IGFtcGw= cmV0aW9u IEhlYXQ= IHBlYWNlZnVs U00= aWV2ZQ== IGRpdmVy IFZpY3Rvcmlh IG1pYw== cGRm IHN0YXRpbmc= IGx1bmc= IGNyaXRpY2l6ZWQ= IHZhY2NpbmU= IExvYWRpbmc= dXJzZQ== VGFrZQ== IEZyYW4= IFNvbGQ= IFJvYmlu IGRldGVjdGVk IFNjcmlwdA== IGFkanVzdGVk IHNlbmF0b3I= IG9wcG9zaW5n RXJyb3I= Q291bnQ= IGNvbmZsaWN0cw== IG93 IEFyZ2VudA== IG1hdGNoaW5n aGg= IFRyZWs= c3RhcnRlcg== Iiks IEFG b2Rlcg== eHh4eA== IEFsdA== YWNyZQ== IFBpY2s= IFNvbGFy IERhbA== T2N0 IEJhdHQ= IHNyYw== IGVuZ2FnZW1lbnQ= IGV4ZWN1dGl2ZXM= IGxpYmVydHk= amF2YQ== IHRhbGVudGVk aWdlbm91cw== IGNvbnNlY3V0 Li4uLi4= SW5mbw== IGhvcnJpYmxl IHN1cnByaXNpbmdseQ== ZmVlZA== aWNhdGluZw== IExFRA== IGZlbWFsZXM= U3RhdGlvbg== ZWxsZXI= IE9ha2xhbmQ= IG1lY2hhbmljYWw= aW9sb2d5 IFZhcg== IHJvYnVzdA== ZXR0aW5ncw== b3R0YQ== IHRoZW9yZXQ= IHJldGFpbg== a3dhcmQ= IGRh IGRlcGxveWVk ZGVs IEFuZHk= IHN1YnNjcmliZQ== d2Vi IG5h IE1pY2hlbA== IHBhcnRpYWxseQ== IENvbWV5 IGNyb3du IE1hag== IEJsdQ== cmF0b3I= RGF5 SU5U IGRvY3VtZW50ZWQ= IEdEUA== Z2k= Y2hlbGw= IGJydXRhbA== IEJhYg== c3RyYXRpb24= IHRoZWZ0 IHR1YmU= QEA= IHF1ZXJ5 IExpbmNvbG4= IHB1Ymxpc2hpbmc= IHdvcmU= b3JpY2Fs IHJpYw== IG5vdGFibGU= IHN1YnNlcXVlbnRseQ== bmV4 IG9ic2VydmU= IEJvZQ== IGNvZGVz bWFpbg== V0g= IFNM IHJlc2lkZW50aWFs YXZhbg== IG1hcw== YXJlc3Q= YWRlb24= T1VU IHNvcGhpc3RpYw== YW50ZQ== IGNlbnM= ICoq IG1vcnRhbGl0eQ== IHlvdXJz IG9jY2FzaW9ucw== IHJlY2FsbGVk IERyaXZlcg== IHZvY2Fs IGJhdGhyb29t IHNob3Bz IGNvbGxhYm9yYXRpb24= IE9iYW1hY2FyZQ== IENlbGw= Q2hhcg== U3VwZXI= Q3Jl IHRlbmRz IHRvcm4= IGVjb25vbWljcw== YXZlcnk= IFJhaWQ= IFNlbQ== IHNob3VsZGVycw== IGV4cGVjdGluZw== IGV4YW1pbmF0aW9u ZW5hbWU= IFVJ aWFiaWxpdHk= b2xhcw== IEFtYg== IERyYQ== IG1pZGZpZWxk IElD IGxheW91dA== IGZsb2F0aW5n Zmk= aXRhdGl2ZQ== IHRyZW1lbmRvdXM= INA= IGFidW5k V29yaw== IExpZ2h0bmluZw== IHNpbWlsYXJseQ== IGNvbnNlcnZhdGl2ZXM= IHByYXk= QkU= aXphcnJl IHRlbXB0 IGVtcGhhc2lz IE1ldHJv IGZpc2hpbmc= IG1hcnJ5 bmVn IFN0dWR5 IHJlY2s= IGRpc3Bvcw== b25pbmc= YnNpdGU= IHN1c3BpYw== IG1lcmNo IEdpYg== IERlc2NyaXB0aW9u IERWRA== d2hl IFllbWVu IGVudmlyb25tZW50cw== b290aW5n IE1vZGVybg== ZXU= IHJlZmxlY3Rz IGhvbmV5 IGFuYWx5c3Q= IGd1dA== ZGVj QWN0aW9u IGhvdXNlaG9sZHM= IHN0ZXI= IHRlbXBsZQ== IHJlZm9ybXM= IGZhdm91cml0ZQ== IGRlYWRsaW5l IExF VGhyZWU= IFdpdGhpbg== QXVn IG5pZ2h0cw== ZWx0YQ== IGludmFsaWQ= IEV4Y2hhbmdl IERlbGhp d2hlbg== aW5jb21l IPCf IHdpcmVsZXNz c2NyaWJl aXN0YQ== IGhvc3RpbGU= IGFsbHk= IGdpZw== IG91dGxldHM= IERvcg== RU1FTlQ= IGFzaA== IGFic3RyYWN0 T1JE IE1vdG9y IGFkdmlzZXI= aXN0bGU= IGJhc2Vz IGNvdXJ0ZXN5 IGNyb3NzaW5n IGNsZWFyZWQ= IHJlZnVnZWU= Y29zeXN0ZW0= IHRocm93cw== ZnVu Ym91cm5l ZGF5cw== IGRpc2FncmVl IE5hdGl2ZQ== IHJlZmxlY3RlZA== IEZhc3Q= IFllbGxvdw== IFNpbmdhcG9yZQ== IFJhdmVu IGVtYnJhY2U= IEt1 IENoZW4= IEVhcmx5 IGFwcG9pbnRtZW50 IE1pbmk= aXRlbWVudA== IHBsYWNpbmc= IGJpY3k= U1I= IHdoaXM= U1U= IGludmVzdGlnYXRlZA== IHBob3RvZ3JhcGhz Z2l0aHVi IEJlYXQ= IFJpbmc= aWdoZWQ= aWFy IGV2b2x2ZWQ= ZXJhbGQ= IGR1bg== IGh1Yg== SUFM IGVuY291cmFnaW5n IFByaW50 IERheXM= IHByb3NlY3V0aW9u IHBhbnRz YXp5 bGl2ZQ== IGZvc3NpbA== IEp1 IHJvY2tz dWRnZQ== IFJhY2U= IGdyZWV0 Ymll IGZpbGxpbmc= IExlbg== IGRpYWJldGVz IGZpcmVhcm1z dW1pbmc= ZW5lenVlbA== IEJC IGFjY2VwdGluZw== QVRI IHJlc29ydA== IGh1bnQ= cmlr dWNrZXI= YW1lbnRz IHN1c3RhaW5lZA== IGNyb3NzZWQ= IGJyZWFrZmFzdA== IGF0dHJpYnV0ZXM= bGVjdGVk YXRpbGU= IHZpYnI= IEthbA== YXJzb24= b3BsZXM= IHRvdWNoZWQ= IGRhbWFnZXM= IGltcHJlc3NlZA== cnVw IGFuY2g= IEFkYW1z SGVs IFZpY3Rvcg== IG1vdW50ZWQ= IEND IGRlbGljaW91cw== c3Bhbg== ZWxsYQ== IGVsYWJvcg== YW1wbGVz IGRlZmlj IGNvbnN0aXR1 dWF0ZXM= IE1pc3Npb24= IFRoZXI= IE1vbnN0ZXI= YmVz UmV1dGVycw== IEluZG9uZXM= aGlsbA== bXVuaXRpb24= IGNvbmZpcm1hdGlvbg== IENvbnNpZGVy YWNlbnQ= IGpldA== IEVtcGxveQ== IEdUWA== bmFu IFNwaWRlcg== IHByb2Nlc3Nvcg== IHBhdHJp IFBlbnRhZ29u IFJvYmluc29u IHJlYWxpc3RpYw== w7E= IGFwcGVhcmluZw== IHBpcGU= b21lZA== IGZydQ== IGF3ZnVs IGV2YWx1YXRpb24= IGludGVsbGlnZW50 IENpdGl6 IGZ1bmRyYQ== b2RpdW0= IHR3ZWV0cw== IHdvcm4= cHJpbmc= IGtpZG4= IHJlYmVscw== IEthbQ== IE5ldGhlcmxhbmRz IFNX IGFjcXVpc2l0aW9u IE1hbGU= 44Oq b21iaWVz IHRyYWRlbQ== IFN0YXR1cw== QnJl IFRISVM= IGFkdmVyc2U= IE5FVw== c2lnbg== IG9yZ2FuaXNhdGlvbg== ZW5j IEhhcnBlcg== YXBvcg== IE1lbWJlcnM= IFBlYWNl IEFpcnBvcnQ= IE90aGVycw== IHNjcmF0Y2g= IFBpbA== IHNlbnNvcg== IGFkb3B0aW9u IEhvdGVs IERyYWc= IGhvbmVzdGx5 IHlhcmQ= IEZvcmNlcw== IHBhdGVudA== IGJhc3M= IHF1aWV0bHk= IGJyZWF0aGluZw== IHBvc2U= aW9ycw== IEplc3M= c3RhdGlj SVRF T2ZmaWM= IGpldw== d2Nz IDE0MA== IHByZXZpZXc= aXBwaQ== IHVuZm9ydHVuYXRlbHk= b2tlbW9u IGhvcm4= IHJlYXNz IHBlZXI= b2NrZXI= IHVudG8= IEdyYXk= IGNsZWFuaW5n IGF0dHJhY3RlZA== MjAwNw== UG9pbnQ= a2lsbA== IEFncmVlbWVudA== dXJjaGVz IGhvcnI= IE1pc3Npc3M= IHdvcnRoeQ== IGZsb3dlcnM= dG93bg== ZGxs IHJlYWN0aW9ucw== IGRlY2U= IGluZGljYXRpbmc= TUQ= IHByZWZlcmVuY2U= IE1WUA== ZXNzaW9uYWw= IFRhcmdldA== Z2VuY2U= IEluZGlhbnM= IG1pc2M= IGZyZWVseQ== IG11c2NsZXM= IGxpbmV1cA== IGltcGFjdHM= b3VzaW5n b21p YWN1bGFy IGNvbnRyb2xsaW5n YWdpbmU= Y2VyeQ== aGVsbA== IHJhbmtpbmc= IE5pY2g= IEF2ZQ== MTI4 IGhpZ2h3YXk= IGluY29ucw== IGJpbmRpbmc= IHN0cnVnZ2xlcw== IFBpdHRzYnVyZ2g= IGdyYXk= cmlu IGNvbWljcw== IFNwb3J0 IHJlbGF0aXZlcw== IGZyaWdodA== IHByb2Jl IFBvcnR1Zw== IHZvYw== IHR1 IENvcnBz IHBvc3NpYmlsaXRpZXM= IHF1YWxpZnk= d2Nzc3RvcmU= IGxpYnJhcmllcw== IG1pZ3JhbnRz IGVudHJpZXM= IGNvbnNlY3V0aXZl dmFscw== IENoYWlybWFu IGhpbGw= SU1F IEdhcmQ= IGluZXF1YWxpdHk= Zm94 IFNhdmU= IGNvcnQ= Y2xhaW1lZA== IHRyYWl0cw== IHBvdXI= IG1pc3NpbGVz IGVzc2VuY2U= IHNlbmRz IGFsbGlhbmNl IHdpc2hlcw== IENocmlzdG9waGVy Qmln Tlk= IEphY29i c2Fu dXJyZWQ= IFNP bGx5 IGFkdm9jYXRl IEJvbmQ= ICIv VXNpbmc= IGRpc3RyaWN0cw== IEdhdGU= IEJpcg== cmlkZ2U= IE5heg== IFJz Ym9hcmRz IEdh IFJlYWdhbg== IGluZmx1ZW5jZWQ= MTAwMA== YXB5 IGNoYWxsZW5nZWQ= IGJhcmc= IGZhY3VsdHk= IEZpZg== IGFjcXVpcmU= QWM= IGluc2VjdA== IGluc3RydW1lbnRz IGxlYWY= dGhvZG94 TWVzc2FnZQ== IHRhbGU= IHRoZXJlYnk= IHRyYXA= IHN0cm9uZ2VzdA== IE1pbGl0YXJ5 aXNpYmxl IDE5ODQ= ZXRoZWxlc3M= IGZsZXhpYmxl IGtpbGxz IGZpbmlzaGluZw== IFNpemU= IHJlZHVjZXM= IGVwaWQ= IG9yaWVudGF0aW9u ZnVsbA== IHRyYWNl IGxhc2Vy IG9wcG9zZQ== IGVkaXRpbmc= IG1vbWVudHVt 5Lo= c2hvdw== Vkk= IExhZA== IDE5ODU= IG11cmRlcmVk OTAw dXRoZXI= IHByb2JhYmlsaXR5 IFBvbGw= IHJlbHVjdA== IENoZW0= IE1vbnRyZWFs IGFkZXF1YXRl IFBvbGFuZA== IFNoZXJpZmY= dW1waA== IG9r IDAwMA== ICJb IG9wZXJhdG9ycw== IEZlcg== IG1vZGVz IEV2ZQ== IGRpc2NpcGxpbmU= TkVU SGFuZA== IG9yYWw= IFdF ZW1haWw= SlA= IFBhbGVzdGluaWFucw== IGhlbmNl IExlc3M= IG92ZXJs ZGln IGludGltaWQ= IENvYWw= IHJhbmdpbmc= dGhh IGRpc3RhbnQ= IGZpYg== IEluZGV4 IFdvbmRlcg== IFBlbA== aGF0dGFu IEh1Zw== w5c= cmFpdA== IHdyYXBwZWQ= IFJQRw== IGNoZW1pY2Fscw== IE1vbmV5 IGZyb3plbg== IGluZGlyZWN0 IEFnYWluc3Q= RW5k IHVuY29tZm9ydGFibGU= IEdhbGxlcnk= IFBvc3RlZA== 2Kc= b25kdWN0 IGNvbnNlcXVlbmNl IGJpdHRlcg== IDE5ODc= cG9w IGNvdW50bGVzcw== IEFsYXNrYQ== ZmZmZg== IGRlcGFydHVyZQ== IHJlZnVuZA== IElhbg== aWF0ZWQ= IHNlZWtz IG1lY2hhbmljcw== IGp1cmlzZGljdGlvbg== bHlubg== IGFsaWtl IEh1bnQ= YXRob24= IHJlc29sdmVk IGNhY2hl IGRpc3RpbmN0aW9u ZGlyZWN0 IGVuY291bnQ= b3Vi YmVhdA== IENvdW50cnk= c2VhcmNo IGNvbnRpbnVvdXM= IG1vZGVzdA== IFJhaWw= dGhvb2Q= MTMw QlVH IGNyaW1pbmFscw== IGluZGljYXRpb24= IGVuY291bnRlcmVk bGFzdA== IFd5 IGlkZW9sb2d5 IFBERg== c2VjdXJpdHk= XSk= IEppbW15 IEVO IGhpcmluZw== VGVt IHBpZw== YXVudA== IENyeXN0YWw= IHBlbmFsdGllcw== IGNhcGFiaWxpdHk= IHB5 IHByb2R1Y3RpdmU= IGJhbGFuY2Vk IEdlRm9yY2U= Y2xpY2s= b2xpdGFu b2Rz IGFmdGVyd2FyZHM= IHBsYXlvZmZz IEdpbGw= VXNlcg== IGJhY2tz cHVi dGFn IGFic3VyZA== cGlyaW5n IGNpdGluZw== IHRyaWxsaW9u IG9ibGlnYXRpb24= IG1heGlt YWhvbw== Y2Y= dW1p IEFscGhh IE5lbHNvbg== IHB1cnN1YW50 aW5pdGVseQ== IGZyYWN0 ZW50cnk= YmVyeQ== IFRob3I= QWRkZWQ= IERK IEdlbmU= IGF3a3dhcmQ= U3R1ZA== IHdhbGxldA== IERpdmluZQ== YXJpb3M= IHJlbGVhc2luZw== IGVkaXRlZA== IGFjY29tcGxpc2hlZA== QmVzdA== IGVkZ2Vz IHBsYW5lcw== IGZlZWRpbmc= In0sIg== IGRpc2Nsb3N1cmU= IGdyYWlu YWlyeQ== b29ucw== ZXJuYW5k VlI= IHJlYXNvbmFibHk= IGRydW0= IHBhcnRpYWw= IGdyYXBoaWM= IHVucHJlY2VkZW50ZWQ= IGFkdmlzZWQ= TWljcm8= IEFzc2Fk cG9pbnRz c2Nhcg== IFpvbmU= dHRlcw== IDcwMA== dm8= IEhhbXA= IGZpeGVz IGNhdXRpb24= IHN0cmluZ3M= IHBhbmVscw== IGxlYWs= IHByaWNpbmc= cm93dGg= IEVycm9y IFNhaW50cw== Zml4 IG9ic2VydmF0aW9ucw== IEFicw== IHN1Z2dlc3Rpb24= IFVrcmFpbmlhbg== IGJhcnJpZXI= IHBhaW50ZWQ= QmV0 aW1pcg== IFNwZWN0 cG90 b3JuZXlz IGNvbXBvdW5k IGJlYXJz IFJ1c2g= IGx1eHVyeQ== U3Vt IG9yYml0 IE1hcmM= IGV4ZW1wdA== IFRyYWls IE1P IEhhbnM= IFdlYXBvbg== b2N1c2Vk dW1pbnVt IEplcnJ5 IGJ1c3Q= IEFH IFdpa2k= IGVuZGxlc3M= IFZsYWQ= IEJhaA== IFJhZGVvbg== a2V5cw== IFN1cnZleQ== IFZpb2w= ZGVmaW5l bGVhbg== IGNvbW1vZA== IHJldmVudWVz xY0= IGZ1cm5pdHVyZQ== IGNhc3Rpbmc= IGRpcGxvbWF0aWM= IFBsYXllcnM= IEtpbGxlZA== IG1vZGlmeQ== IGlubm92YXRpdmU= IEFidQ== bm9y IGJvbmRz IGNvYWNoaW5n TWVy IG1vZHVsZXM= IFBhdHJpb3Rz IGVuaGFuY2Vk IHByb2NlZWRpbmdz IHRlYW1tYXRlcw== IDEyOA== YXJkbw== IGNvbXByb21pc2U= IE11Y2g= IGZsZXc= IEVkZ2U= IHVubmVjZXNzYXJ5 IGRvY3RyaW5l cmVwb3J0 IE9ybGFuZG8= IFByb2ZpbGU= IHBsYXlvZmY= ZnJpZW5kbHk= IGNvbXBsYWlu IE1D IE9wdA== IEdC IGJlYXRlbg== IGdvbGY= IHBsYWNlbWVudA== Qml0 IG5ld3NsZXR0ZXI= IDIwMTk= dmlzb3I= cmF3bA== IGlQYWQ= IGFjdGVk IGp1aWNl IGRlY2tz UE4= c3VjY2Vzcw== IEhhbGY= IGRlbGV0ZWQ= IHNlY3JldHM= IGFzeWx1bQ== TWFydA== IEFjdGl2 IEd1eQ== IFRz IGR5cw== IGFzc3VtaW5n IG1hbmE= IHN1YnVy IDEyNQ== TWVkaWE= QVJZ cmlkZQ== Y3A= IGRpZmZpY3VsdGllcw== IGNvbGxlY3Rpbmc= IGJhbmtydXB0 bm9u IGNvbXBvc2Vk IHZvbHQ= IG1pbGl0YW50cw== ID4+Pg== IE1vcm1vbg== dG9y IHBhcnRpY2xlcw== IEJhcnQ= cnlwdGlvbg== IGFkbWlu IHNxdWVl VklESUE= IGNyZWF0b3I= aWFtZXRlcg== aWN1bGFy TkJD IGdyYWJiZWQ= IG5vZGQ= IHJhdGVk IHJvdGF0aW9u IGdyYXNw IGV4Y2Vzc2l2ZQ== IEVD IFdoaXQ= IGludmVudG9yeQ== YXVsdHM= IEZC IGVjb3N5c3RlbQ== IGJpbGxpb25z IHZlbnR1cmU= bmFtZWQ= IGRlZmVuZGVy b3V0ZQ== SW5zdGVhZA== aXJhYmxl V2Fy IGFzc3VtcHRpb24= IGJpdGU= IGVhcnRocXU= dGFpbA== c3BhY2U= IGdpZnRz Ym95cw== IGluZXZpdGFibGU= IHN0cnVjdHVyYWw= IGJlbmVmaWNpYWw= IGNvbXBlbGxpbmc= aG9sZQ== ZXJ2YXRpb24= IGNvYXQ= b2o= aW5jYXJu IFllYXJz IGRldGVybWluaW5n IHJoZXRvcmlj IGJvdW5kYXJpZXM= IHdoaXRlcw== QW50 YWRkeQ== KS0= cmFoYW0= ZXRlcm1pbg== IGhhcnZlc3Q= IENvbmM= IGxhcHRvcA== IE1hdGNo IGVuam95aW5n Y2Nh b2xsYXI= IHRyaXBz IGFkZGljdGlvbg== IFNhaw== IHBvd2VyZWQ= IGNvdXM= IFJ1c3NpYW5z aWVyZQ== IHJldHJpZQ== cXVhbGl0eQ== IGRpZmZlcg== IGtpbmdkb20= IExhdXI= IENhcGl0b2w= IGNvbmNsdXNpb25z IEFsdGVybg== IE5hdg== IHRyYW5zcGFyZW50 QkVS R3JvdXA= IENvbXBsZXRl IGluZmVy IGludHJpZw== IGluc2FuZQ== Uk8= b3Bob2I= aXNlbg== cXVhbA== TWljaGFlbA== IG11c2V1bQ== IFBvcGU= IHJlc2V0 cmF0aXZl Zml2ZQ== IGFnZ3JlZw== aXR0ZWVz b3NpdG9yeQ== IGNhcmI= IFJlY29yZA== IGRlY2lkZXM= IEZpeA== IGV4Y2VwdGlvbnM= IENvbW1pc3Npb25lcg== dW5z IEVudmlyb25tZW50YWw= IGxlZ2VuZGFyeQ== aXN0ZW5jZQ== IHR1bm5lbA== a20= IGluc3VsdA== IHRyb2xs IHNoYWtl IGRldGVudGlvbg== cXVlcw== IENocm9tZQ== IEZpbGVz IHN1YnQ= IHByb3NwZWN0cw== IHByb2w= cmVuZGVy cHJvb2Y= IHBlcmZvcm1hbmNlcw== U3Ry IGhyZWY= ZXJuYW1l IGFjaGlldmVtZW50 IGZ1dA== RnVsbA== IExlYmFu Z29vZ2xl 44OI YW1wYQ== TWF5YmU= IHByb2plY3RlZA== IEVtYg== IGNvbGxlZw== IGF3YXJkcw== IOKU R29sZA== IEJsYWtl IFJhag== aWZ0aW5n IHBlbmRpbmc= IGluc3RpbmN0 IGRldmVsb3BtZW50cw== Q29ubmVjdA== IE1hbmQ= IFdJVEg= IFBoaWxpcHBpbmVz cHJvZmlsZQ== IGFsdG9nZXRoZXI= IEJ1bmQ= IFRE b29vbw== YW1wZWQ= aXBo IHN0ZWFt IG9sZGVzdA== IGRldGVjdGlvbg== dWxwdA== IOc= IFdheW5l MjAwNg== ZmE= IGNpcmNsZXM= IEZ1 IGRvbm9ycw== YXBwcm9wcmlhdGU= IERha290YQ== amFtaW4= IG1vdGl2YXRlZA== IHB1cmNoYXNlcw== IExvdWlzaWFuYQ== IFNwbA== IGdsb2Jl IDEwNQ== emlw Y2FsbA== IGRlcGFydG1lbnRz IHN1c3RhaW5hYmxl MTA1 IE9Q aWZpZXJz IHByZXZlbnRlZA== IGluY29tcA== IENvbW1hbmRlcg== IGRvbWluYXRlZA== IMK7 IGludmVzdGVk IGNvbXBsZXhpdHk= IGluY2w= IGVuc3VyaW5n IHJlYWxt eW5j IEluZGVwZW5kZW50 cmFpbmVk IEplbg== IEZsaWdodA== IGF0aGU= IHNwZWN1bGF0aW9u IFRF b2NhdGU= dGlj IHBsYWludA== aGVycnk= IHRveQ== IDExMQ== IHBsYXRlcw== c3RhdHVz IElzYQ== IGRldm90ZWQ= Q29w IEVT MjU1 dXJyZW5jeQ== TWFpbg== IHNsYXZlcw== IHBlcHBlcg== IHF1b3Rlcw== IGNlaWxpbmc= IEZpc2g= IHRyYW5zZm9ybWF0aW9u IGZyYWN0aW9u IGFkdmFudGFnZXM= IHRvaWxl IHN0dW5uaW5n IG1vaXN0 YnJlYWtpbmc= c2k= IExvY2F0aW9u IE1lZGl1bQ== IHRleHRz IHVnbHk= IGJpbw== LuKAlA== IEJhc2Vk IHRyYWlucw== IFdpbmc= IEFuY2llbnQ= IFJlY29yZHM= IEhvcGU= U3BlY2lhbA== YWRlc2g= b2Jp Wy8= IHRlbXBvcmFyaWx5 VmVy aHU= b3Nlcg== IG92ZXJuaWdodA== IG1hbW0= IFRyZWFzdXJ5 IFZlbmV6dWVs IE1lZ2E= IHRhcg== IGV4cGVjdHM= YmxhY2s= b3JwaA== XFxcXA== IGFjY2VwdGFuY2U= IHJhZGFy c2lz IGp1bmlvcg== IGZyYW1lcw== IG9ic2VydmF0aW9u YWNpZXM= UG93ZXI= IEFkdmFuY2Vk TWFn b2xvZ2ljYWxseQ== IE1lY2hhbg== IHNlbnRlbmNlcw== IGFuYWx5c3Rz YXVnaHRlcnM= Zm9yY2VtZW50 IHZhZ3Vl IGNsYXVzZQ== IGRpcmVjdG9ycw== IGV2YWx1YXRl IGNhYmluZXQ= TWF0dA== IENsYXNzaWM= QW5n IGNsZXI= IEJ1Y2s= IHJlc2VhcmNoZXI= IDE2MA== IHBvb3JseQ== IGV4cGVyaWVuY2luZw== IFBlZA== IE1hbmhhdHRhbg== IGZyZWVk IHRoZW1lcw== YWR2YW50 IG5pbg== IHByYWlzZQ== MTA0 IExpYnlh YmVzdA== IHRydXN0ZWQ= IGNlYXNl IGRpZ24= RGlyZWN0 IGJvbWJpbmc= IG1pZ3JhdGlvbg== IFNjaWVuY2Vz IG11bmljaXBhbA== IEF2ZXJhZ2U= IGdsb3J5 IHJldmVhbGluZw== IGFyZW5h IHVuY2VydGFpbnR5 IGJhdHRsZWZpZWxk aWFv R29k IGNpbmVt cmFwZQ== ZWxsZQ== YXBvbnM= IGxpc3Rpbmc= IHdhaXRlZA== IHNwb3R0ZWQ= a2VsZXk= IEF1ZGlv ZW9y YXJkaW5n aWRkaW5n aWdtYQ== IE5lZw== IGxvbmU= IC0tLS0= ZXhl ZGVn IHRyYW5zZg== IHdhc2g= IHNsYXZlcnk= IGV4cGxvcmluZw== IFdX YXRzb24= IGVuY2w= bGllcw== IENyZWVr IHdvb2Rlbg== TWFuYWdlcg== IEJyYW5k dW1teQ== IEFydGh1cg== IGJ1cmVhdWNy IGJsZW5k YXJpYW5z RnVydGhlcg== IHN1cHBvc2VkbHk= IHdpbmRz IDE5Nzk= IGdyYXZpdHk= IGFuYWx5c2Vz IFRyYXZlbA== IFZldGVy IGR1bWI= IGFsdGVybmF0ZQ== Z2Fs IGNvbnN1bWVk IGVmZmVjdGl2ZW5lc3M= Licn IHBhdGhz b25kYQ== TEE= IFN0cm9uZw== IGVuYWJsZXM= IGVzY2FwZWQ= ICIi IDExMg== IDE5ODM= IHNtaWxlZA== IHRlbmRlbmN5 RmlyZQ== IHBhcnM= IFJvYw== IGxha2U= IGZpdG5lc3M= IEF0aA== IEhvcm4= IGhpZXI= IGltcG9zZQ== bW90aGVy IHBlbnNpb24= aWN1dA== Ym9ybmU= aWNpYXJ5 Ll8= IFNV IHBvbGFy aXN5 ZW5ndQ== aXRpYWxpemVk QVRB d3JpdGU= IGV4ZXJjaXNlcw== IERpYW1vbmQ= b3R5cGVz IGhhcm1mdWw= b256 IHByaW50aW5n c3Rvcnk= IGV4cGVydGlzZQ== IEdlcg== IHRyYWdlZHk= IEZseQ== IGRpdmlk YW1waXJl c3RvY2s= TWVt IHJlaWdu IHVudmU= IGFtZW5k IFByb3BoZXQ= IG11dHVhbA== IEZhYw== IHJlcGxhY2luZw== SGFy IENpcmN1aXQ= IHRocm9hdA== IFNob3Q= IGJhdHRlcmllcw== IHRvbGw= IGFkZHJlc3Npbmc= IE1lZGljYWlk IHB1cHA= IE5hcg== b2xr IGVxdWl0eQ== TVI= IEhpc3Bhbg== IExhcmdl bWlk RGV2 IGV4cGVk IGRlbW8= IE1hcnNoYWxs ZXJndXM= IGZpYmVy IGRpdm9yY2U= IENyZWF0ZQ== IHNsb3dlcg== IFBhcmtlcg== IFN0dWRlbnQ= IFRyYWluaW5n UmV0dXJu IFRydQ== IGN1Yg== IFJlYWNoZWQ= IHBhbmlj IHF1YXJ0ZXJz IHJlY3Q= IHRyZWF0aW5n IHJhdHM= IENocmlzdGlhbml0eQ== b2xlcg== IHNhY3JlZA== IGRlY2xhcmU= dWxhdGl2ZQ== ZXRpbmc= IGRlbGl2ZXJpbmc= ZXN0b25l IHRlbA== IExhcnJ5 IG1ldGE= YWNjZXB0 YXJ0eg== IFJvZ2Vy aGFuZGVk IGhlYWRlcg== IHRyYXBwZWQ= IENlbnR1cnk= IGtub2NrZWQ= IE94Zm9yZA== IHN1cnZpdm9ycw== Ym90 IGRlbW9uc3RyYXRpb24= IGRpcnQ= IGFzc2lzdHM= T01F IERyYWZ0 b3J0dW5hdGU= Zm9saW8= cGVyZWQ= dXN0ZXJz Z3Q= IExvY2s= IGp1ZGljaWFs dmVydGVk IHNlY3VyZWQ= b3V0aW5n IEJvb2tz IGhvc3Rpbmc= IGxpZnRlZA== bGVuZ3Ro IGplcg== IHdoZWVscw== IFJhbmdl dW1ibmFpbHM= IGRpYWdub3Npcw== dGVjaA== IFN0ZXdhcnQ= IFByYWN0 IG5hdGlvbndpZGU= IGRlYXI= IG9ibGlnYXRpb25z IGdyb3dz IG1hbmRhdG9yeQ== IHN1c3BpY2lvdXM= ISc= QXBy R3JlYXQ= IG1vcnRnYWdl IHByb3NlY3V0b3I= IGVkaXRvcmlhbA== IEty IHByb2Nlc3NlZA== dW5nbGU= IGZsZXhpYmlsaXR5 RWFybGllcg== IENhcnQ= IFN1Zw== IGZvY3VzZXM= IHN0YXJ0dXA= IGJyZWFjaA== IFRvYg== Y3ljbGU= 44CM cm9zZQ== IGJpemFycmU= 44CN IHZlZ2V0YWJsZXM= JCQ= IHJldHJlYXQ= b3NoaQ== IFNob3A= IEdyb3VuZA== IFN0b3A= IEhhd2FpaQ== IEF5 UGVyaGFwcw== IEJlYXV0 dWZmZXI= ZW5uYQ== IHByb2R1Y3Rpdml0eQ== Rml4ZWQ= Y29udHJvbA== IGFic2VudA== IENhbXBhaWdu R3JlZW4= IGlkZW50aWZ5aW5n IHJlZ3JldA== IHByb21vdGVk IFNldmVu IGVydQ== bmVhdGg= YXVnaGVk IFBpbg== IExpdmluZw== Q29zdA== b21hdGlj bWVnYQ== IE5pZw== b2N5 IGluYm94 IGVtcGlyZQ== IGhvcml6b250 IGJyYW5jaGVz IG1ldGFwaA== QWN0aXZl ZWRp IEZpbG0= IFNvbWV0aGluZw== IG1vZHM= aW5jaWFs IE9yaWdpbmFs R2Vu IHNwaXJpdHM= IGVhcm5pbmc= SGlzdA== IHJpZGVycw== IHNhY3JpZmlj TVQ= IFZB IFNhbHQ= IG9jY3VwYXRpb24= IE1p IGRpc2c= bGljdA== IG5pdA== IG5vZGVz ZWVt IFBpZXI= IGhhdHJlZA== cHN5 44OJ IHRoZWF0ZXI= IHNvcGhpc3RpY2F0ZWQ= IGRlZmVuZGVk IGJlc2lkZXM= IHRob3JvdWdobHk= IE1lZGljYXJl IGJsYW1lZA== YXJlbnRseQ== IGNyeWluZw== Rk9S cHJpdg== IHNpbmdpbmc= IEls IGN1dGU= b2lkZWQ= b2xpdGljYWw= IE5ldXJv 5aQ= IGRvbmF0aW9u IEVhZ2xlcw== IEdpdmU= VG9t IHN1YnN0YW50aWFsbHk= IExpY2Vuc2U= IEph IGdyZXk= IEFuaW1hbA== IEVS IFVuZA== IGtlZW4= IGNvbmNsdWRl IE1pc3Npc3NpcHBp RW5naW5l IFN0dWRpb3M= UHJlc3M= b3ZlcnM= bGxlcnM= IDM1MA== IFJhbmdlcnM= IHJvdQ== ZXJ0bw== RXA= aXNzYQ== aXZhbg== IHNlYWw= IFJlZ2lzdA== ZGlzcGxheQ== IHdlYWtlbg== dXVt IENvbW1vbnM= IFNheQ== IGN1bHR1cmVz IGxhdWdoZWQ= IHNsaXA= IHRyZWF0bWVudHM= aXphYmxl bWFydA== IFJpY2U= IGJlYXN0 IG9iZXNpdHk= IExhdXJl aWdh V2hpY2g= aG9sZGVy IGVsZGVybHk= IHBheXM= IGNvbXBsYWluZWQ= IGNyb3A= IHByb2M= IGV4cGxvc2l2ZQ== IEZhbg== IEFyc2VuYWw= QXV0aG9y ZWZ1bA== IG1lYWxz ICgt aWRheXM= IGltYWdpbmF0aW9u IGFubnVhbGx5 IG1z YXN1cmVz SGVhZA== aWto bWF0aWM= IGJveWZyaWVuZA== IENvbXB1dGVy IGJ1bXA= IHN1cmdl IENyYWln IEtpcms= RGVs bWVkaWF0ZQ== IHNjZW5hcmlvcw== IE11dA== IFN0cmVhbQ== IGNvbXBldGl0b3Jz 2YQ= IFN0YW5mb3Jk IFJlc291cmNlcw== YXplZA== YmFnZQ== IG9yZ2FuaXM= IFJlbGVhc2U= IHNlcGFyYXRlbHk= IGhhYml0cw== IG1lYXN1cmVtZW50cw== IENsb3Nl IGFjY29tcGFueQ== IGdseQ== IHRhbmc= IFJvdQ== IHBsdWdpbg== IGNvbnZleQ== IENoYWxsZW5nZQ== b290cw== amFu IGN1cnM= IFJlbGF0aW9ucw== a2VlcGVy IGFwcHJvYWNoaW5n cGluZw== U3BlYWtpbmc= IGFycmFuZ2VtZW50 IFZJ YXJldHRlcw== IGFmZmVjdGluZw== IHBlcm1pdHM= YmVjYXVzZQ== IHVzZWxlc3M= IEh1cw== ISEhIQ== IGRlc3Ryb3lpbmc= VW5mb3J0dW5hdGVseQ== IGZhc2NpbmF0aW5n U2Vt IGVsZWN0b3JhbA== IHRyYW5zcGFyZW5jeQ== IENoYW9z IHZvbHVudGVlcg== IHN0YXRpc3RpY2Fs IGFjdGl2YXRlZA== cm94 V2Vi SEU= IEhhbXBzaGlyZQ== aXNpdmU= TWFw IHRyYXNo IExhd3JlbmNl c3RpY2s= Q3I= IHJpbmdz RVhU IG9wZXJhdGlvbmFs b3Blcw== RG9lcw== IEV2YW5z IHdpdG5lc3NlZA== UG9ydA== IGxhdW5jaGluZw== ZWNvbm9t d2Vhcg== IFBhcnRpY2lw dW1t Y3VsZXM= IFJBTQ== IFR1bg== IGFzc3VyZWQ= IGJpbmFyeQ== IGJldHJheQ== IGV4cGxvcmF0aW9u IEZlbA== IGFkbWlzc2lvbg== aXRhdGVk U3k= IGF2b2lkZWQ= IFNpbXVsYXRvcg== IGNlbGVicmF0ZWQ= IEVsZWN0cmlj pZ4= IGNsdXN0ZXI= aXR6ZXJsYW5k aGVhbHRo TGluZQ== IE5hc2g= YXRvbg== IHNwYXJl IGVudGVycHJpc2U= IERJUw== Y2x1ZGVz IGZsaWdodHM= IHJlZ2FyZHM= IMOX aGFsZg== IHRydWNrcw== IGNvbnRhY3Rz IHVuY29ucw== IENsaW1hdGU= IGltbWVuc2U= TkVX b2Nj ZWN0aXZl IGVtYm9k IHBhdHJvbA== IGJlc2lkZQ== IHZpYWJsZQ== IGNyZWVw IHRyaWdnZXJlZA== dmVybmluZw== IGNvbXBhcmFibGU= cWw= IGdhaW5pbmc= YXNzZXM= ICgpOw== IEdyZXk= IE1MUw== c2l6ZWQ= IHByb3NwZXI= Ij8= IHBvbGxpbmc= IHNoYXI= IFJD IGZpcmVhcm0= b3JpZW50 IGZlbmNl IHZhcmlhdGlvbnM= Z2l2aW5n IFBp b3NwZWw= IHBsZWRnZQ== IGN1cmU= IHNweQ== IHZpb2xhdGVk IHJ1c2hlZA== IHN0cm9rZQ== IEJsb2c= c2Vscw== IEVj LCcn IHBhbGU= IENvbGxpbnM= dGVycm9y IENhbmFkaWFucw== IHR1bmU= IGxhYm9yYXRvcnk= IG5vbnM= dGFyaWFu IGRpc2FiaWxpdHk= IEdhbQ== IHNpbmdlcg== YWxn IFNlbmlvcg== IHRyYWRlZA== IFdhcnJpb3I= IGluZnJpbmc= IEZyYW5rbGlu IHN0cmFpbg== IFN3ZWRpc2g= IHNldmVudGg= IEJlbm4= IFRlbGw= IHN5bmRyb21l IHdvbmRlcmVk aWRlbg== KysrKw== aWdv IHB1cnBsZQ== IGpvdXJuYWxpc20= IHJlYmVs IGZ1 YmxvZw== IGludml0ZQ== cmVuY2llcw== IENvbnRhY3Q= SXNyYWVs IENvbnRlbnQ= IGNoZWVy IGJlZHJvb20= IEVuZ2luZWVyaW5n IFF1ZWVucw== IGR3ZWxs IFBsYXlTdGF0aW9u IERpbQ== IENvbG9u bHI= IG9wZXJhdGVz IG1vdGl2YXRpb24= VVNB YXN0ZXJlZA== Q29yZQ== IFRydXRo b2xv T1NF IE1lbW9yeQ== IHByZWRlYw== IGFuYXJjaA== IDE5MjA= IFlhbQ== w6g= Ymlk IGdyYXRlZnVs IGV4Y2l0ZW1lbnQ= IHRyZWFzdXJl IGxvbmdlc3Q= Y3RpdmU= IGRlc2VydmVz IHJlc2VydmVz IGNvcHM= IE90dGF3YQ== IEVneXB0aWFu YW5rZWQ= IGFydGlm IGh5cG90aGVzaXM= Oi8= IHB1cmNoYXNpbmc= IGxvdmVseQ== SFA= IGRpdmlkZQ== IHN0cmljdGx5 IHF1ZXN0aW9uaW5n IHRheHBheWVycw== IEpveQ== IHJvbGxz IEhlYXZ5 IHBvcnRz IG1hZ25ldGlj IGluZmxhbW0= IGJydXNo dGljcw== 4oiS IGJvdHRsZXM= cHB5 IHBhZGQ= 44Kv bWlsbGlvbg== IGRldmFzdGF0aW5n IGNvbXBpbGVk IG1lZGljYXRpb24= IHR3ZWx2ZQ== IFBlcnJ5 U3BhY2U= aW1i eW91cg== IGxlYWtlZA== IFRhcg== IHVuaXR5 IGluZmVjdGVk IHRyYXZlbGVk SURF IE1jRG9uYWxk dHh0 IFByaW5j IGludGVydmVu IFRhaXdhbg== IFBvdw== IGJlYXJpbmc= IFRocmVhZA== IHpvbmVz aXphcmRz dW5rcw== Q2hhcHRlcg== bGxvcg== IMK3 IHdvdW5kcw== IGRpc2NyZXRpb24= IHN1Y2NlZWRlZA== aWtpbmc= IGljb25pYw== Q2FsbA== IHNjcmVlbmluZw== IE1pcw== aWN0cw== IG1pbmlzdGVycw== IHNlcGFyYXRpb24= UGxheWVy IGJpcA== IGJlbG92ZWQ= IGNvdW50aW5n IEV5ZQ== YXJvdW5k aW5naW5n IHRhYmxldA== IG9mZmVuY2U= aW5hbmNl aGF2ZQ== IEluZm8= IE5pbmph IHByb3RlY3RpdmU= IENhc3M= TWFj IFF1YWxpdHk= Tm9ydGg= IGlj IEN1YmE= IENocm9uaWNsZQ== IFByb3BlcnR5 IGZhc3Rlc3Q= b3Rvcw== IEdlcm0= T1dO IGJvb20= IFN0YW5sZXk= ZXJndXNvbg== IGNsZXZlcg== IGVudGVycw== bW9kZQ== dGVyaW9y IFNlbnM= IGxpbmVhcg== QVJL IGNvbXBhcmluZw== IHB1cmVseQ== IHNhZmVy IFBvdHRlcg== IGN1cHM= UlQ= IGdsdWM= IGF0dHJpYnV0ZWQ= IGR1cGw= IFBhcA== IHByZWNpb3Vz IHBh aWN0aW9uYXJ5 IFRpZw== IFRvbw== b2x1dGlvbnM= c3Rhbg== IHJvYm90cw== IGxvYmI= IHN0YXR1dGU= IHByZXZlbnRpb24= d2VzdGVybg== MTYw IEFjdGl2ZQ== IE1hcmlh aGFs Tm9uZQ== ZWxsYXI= IEtC IFBhcnRuZXJz IFNpbmdsZQ== IEZvbGxvd2luZw== YW5nbw== YWNpb3Vz IHRob3U= IGtn IGluZmx1ZW50aWFs IEZyaWVuZHM= U3Vy YWludGVk IGZvcnVtcw== IHN0YXJ0ZXI= IGNpdGl6ZW5zaGlw IEVsZWN0aW9u b25nZQ== b3RhdGlvbg== b3NwaA== Ozs7Ow== dXRpY2Fs cHVy ZXJlbg== IGFjY3VzYXRpb25z Yml0aW91cw== YWJiaXQ= IE9yZA== UG9zdGVk aXJr IHNlbnNpdGl2aXR5 aWNoZQ== IEFteQ== IEZhYg== IHN1bW1pdA== IHBlZGVzdA== IHJ1YmJlcg== IGFncmljdWx0dXJhbA== IGNhbmNlbA== QUU= IGluYXVn IGNvbnRhbQ== IGZpcm1seQ== aXc= c3RhZ2U= IEthbg== IHRpZXI= IGludmVudGlvbg== IHRyYW5zbGF0ZWQ= IFJ1bGVz Qm94 VHdpdHRlcg== SURT IHBpenph IGRlYnVn IERyb3A= dnM= IGhvcnNlcw== Ymln IGJvcmluZw== IGhvb2Q= IE1jQ2Fpbg== YXRjaGVk IEJyb3M= IHNraXA= IGVzc2F5 c3RhdA== IExlZ2VuZHM= IGFtbXVuaXRpb24= YXVj IHNob290ZXI= IHVuaA== IHN1cHBsaWVk IGdlbmVyaWM= IFNL aWJhbg== eXJpY3M= IDI1NQ== IGNsaW1iaW5n Rm9ybWVy IGZsaXA= IGp1bXBpbmc= IGZydXN0cmF0aW9u IFRlcnJ5 IG5laWdoYm9yaG9vZHM= IG1lZGlhbg== YmVhbg== IGJyYWlucw== Rm9sbG93aW5n IHNoYXBlZA== IGRyYXdz IGFsdGVyZWQ= SmFjaw== IHJlY2lwZXM= IHNraWxsZWQ= d2VhbHRo YWNoaQ== ZWxlY3Rpb24= IGJlaGF2aW9ycw== ZGVhbHM= IFVudGls RmU= IGRlY2xhcmF0aW9u bWFya3M= IEJldHdlZW4= Y2Vsb25h IHJlc29u IGJ1YmJsZQ== QW1vbmc= IGltcGVyaWFs R1M= IGZlbWluaXN0 MjAwNQ== IEt5bGU= IGFjY291bnRpbmc= IFRlbGU= IFR5cg== IGNvbm5lY3Rpbmc= IHJlaGFi IFByZWQ= c2lt IG1lYW50aW1l IHBoeXNpY2lhbg== TVc= IENhbXBiZWxs IEJyYW5kb24= IGNvbnRyaWJ1dGluZw== IFJ1bGU= IFdlaWdodA== IE5hcA== IGludGVyYWN0aXZl IHZhZw== IGhlbG1ldA== IENvbWI= Zm91cg== IHNoaXBwZWQ= IGNvbXBsZXRpbmc= IFBE UERBVEU= IHNwcmVhZGluZw== IHNjYXJ5 ZXJ2aW5n IEdhcw== IGZyYW5r c2Nob29s IHJvbWFudGlj IHN0YWJpbA== Um9i IGFjY3VyYXRlbHk= IGFjdXRl IEhhbm4= IHN5bWJvbHM= IGNpdmlsaXphdGlvbg== IEFX IGxpZ2h0bmluZw== IGNvbnNpZGVycw== IHZlbnVl INc= IG92ZW4= IFNG aGlz IG51 IExlYXJu IHBlb3BsZXM= IHN0ZA== IHNsZWU= IHNsaWM= IFN0YXRpc3RpY3M= IGNvcm5lcnM= IEJha2Vy IDop bWVudGF0aW9u b2x2ZXI= IGxhdWdoaW5n IFRvZGQ= b25kZQ== IEhpbGxz IG51dHM= IFdvbWFu cGxhbmU= IGxpdmVy IEluc2lkZQ== U29ycnk= IGFncmVlcw== IGZ1bmRhbWVudA== IEZpc2hlcg== IGF1Y3Rpb24= IHRocmVhZHM= Z2xhcw== IEJhc2lj IE5hdA== IGxhY2tpbmc= IGNlbGVicmF0aW9u anU= IHNpbGx5 RXVybw== IHRhdHQ= aWdodHk= Y29udHJvbGxlZA== VGVzdA== IFNpbmdo IHJhZ2U= IHJoeXRo b2ZmaWM= IFBoYW50b20= IGhlYWRsaW5lcw== IHJlc3BvbmRpbmc= IE1vcm5pbmc= IHZpdGFtaW4= IGJvb3Rz IFNpdGU= YWxpbg== cGk= IHZpcmFs IFVD REVS IFNleA== IHN0b2Nrcw== Y3VycmVudA== IGNodXJjaGVz IFJhcmU= IE11cnBoeQ== IGRlbmlhbA== IEdhbWluZw== IHRvdWc= IG5pY2s= IG1ha2Vycw== IFJvbmFsZA== IGdlbmVyb3Vz IERvYw== IE1vcnJpcw== IHRyYW5zZm9ybWVk IE5vcm1hbA== IDEwNA== IEtpY2tzdGFydGVy IFVwb24= T25saW5l IElSUw== IHdyYXA= IGxvdmluZw== IGFycml2ZXM= IER1ZQ== IGhldGVy IE1hZGU= IHJlbnRhbA== IGJlbG9uZ3M= IGF0dG9ybmV5cw== IGNyb3Bz IG1hdGNoZWQ= dWx1bQ== b2xpbmU= MTA5 IGRpc3Bhcg== IGJ1eWVycw== IENhbWJyaWRnZQ== IGV0aGljcw== cm91cHM= IGp1c3RpZmllZA== IG1hcmdpbmFs IHJlc3BlY3RlZA== d2lubmluZw== IG5vZGRlZA== IFNlcmdl IEZvcm1lcg== Q3JhZnQ= IyMjIyMjIyMjIyMjIyMjIw== IFdhcm5lcg== IGRhc2g= ZXRl IGVudGVydA== IEVzY2FwZQ== b3V0aGVhc3Q= IGtuZWVz IEJvbWI= IHJ1Zw== UGFzcw== IGF0dGl0dWRlcw== Z292ZXJubWVudA== IFByaW9y IHF1YWxpdGllcw== IG5vdGlmaWNhdGlvbg== IFBob25l bGll IGFudGljaXBhdGVk IENvbWJhdA== IEJhcnJ5 IDE5ODI= VXNlcnM= b25lcg== IGNvbXB1dGluZw== IENvbm5lY3RpY3V0 IGxlc3Nlcg== IHBlZXJz IEN1 IHRlY2huaWNhbGx5 IHN1Ym1pc3Npb24= IFVuaXZlcnNhbA== IG1hbnVhbGx5 b3VyZ2U= IHJlc3BvbmRlbnRz IEJUQw== IEhvc3Q= IGZhcmU= IEJpcmQ= IHJlY2VpcHQ= YWxzbw== IGphY2s= IGFncmljdWx0dXJl IHNrdWxs ICE9 IHBhc3NpdmU= IENJ IHNvY2lldGllcw== IHJlbWluZGVk IGludGVyZmVyZW5jZQ== QnV5 IOKc Z29u IHNjcnV0aW55 IFdpdGNo IGNvbmR1Y3Rpbmc= IOOD IGV4Y2hhbmdlcw== IE1pdGNoZWxs IGluaGFiaXQ= IHR3aXN0 QkQ= IHdoZXJldmVy Z3JvdXBvbg== IGpva2Vz IEJlbmphbWlu IFJhbmRvbQ== ZnJhbWU= IExpb25z IGhpZ2hsaWdodGVk IEFya2Fuc2Fz RW50 IHBpbGU= IHByZWxpbQ== Z3M= bWluZGVk IGZlbG9ueQ== IEdB IEx1Y2s= IHByYWN0aWNhbGx5 IEJvcw== IGFjdHJlc3M= RGFt IEJvdQ== IHZpc2E= IGVtYmVkZGVk IGh5YnJpZA== IGVhcmxpZXN0 IHNvb25lcg== c29jaWFs IEhB IHN0ZWVw IGRpc2FkdmFudA== IGV4cGxvaXQ= IEVnZw== IFVsdHJh IG5lY2Vzc2l0eQ== TG9jYWw= aWVnZQ== IGRhdGVk IG1hc3Nlcw== IHN1YnNjcmlwdGlvbg== cGxlc3M= IGFub255bQ== IHByZXN1bWFibHk= Qmx1ZQ== VGhlaXI= YXNrZXRiYWxs IFBoaWxpcA== IGNvbWVk bG9hZGVk cmFuZQ== IHJlZmxlY3Rpb24= Q2hpbmE= IGV4dGVuZHM= IGZvcm1pbmc= IHVuZGVycw== MjAwMQ== IGdyYXQ= IGNvbmNlbnRyYXRpb25z IGluc3VsaW4= IHNlY3VsYXI= IHdoaWxzdA== IHdpbm5lcnM= QWR2ZXJ0aXNlbWVudHM= IGRlbGliZXJhdGVseQ== IFdvcmtpbmc= IHNpbms= ZXRpY3M= ZGFsZQ== IG1hbmRhdGU= IGdyYW0= IHZhY2F0aW9u IHdhcm5pbmdz cmlwcA== IFRIQVQ= IGNvbW1lbnRhcnk= IGludHU= IGFlc3Q= IHJlYXNvbmluZw== IGJyZWFrZG93bg== IFpvbWJpZQ== IC0tPg== IFBvbGl0aWNhbA== Y290dA== IHRocnVzdA== IHRlY2hub2xvZ2ljYWw= IGRlY2lkaW5n IHRyYWZmaWNraW5n TG9uZw== V2VsY29tZQ== cHJpc2luZw== IENvbW11bmljYXRpb25z IGVuZG9ycw== IHN3aWZ0 IG1ldGFib2w= Y29pbnM= cmVzYQ== IEhUVFA= IGVucm9sbA== IEhhcHB5 dXNy aW50YWdl IFsi dWFibHk= IE1hdGVyaWFs IHJlcGVhbA== U2VwdA== a2g= IE1vZGk= IHVuZGVybmVhdGg= IElM c2hvcmU= IGRpYWdub3NlZA== YWNldXRpY2Fs IHNob3dlcg== YXV4 IFN3aXRjaA== IFN0cmVuZ3Ro IGppaGFk bmF0aW9uYWw= IHRyYXVtYQ== dXNzeQ== b25p IGNvbnNvbGlk IGNhbG9yaWVz IEZseW5u YWdnZWQ= MTY4 IFBpbms= IGZ1bGZpbGw= IGNoYWlucw== IG5vdGFibHk= IEFW TGlmZQ== IENodWNr bXVz IFVyYmFu IEhlbmQ= IGRlcG9zaXQ= IFNhZA== IGFmZmFpcg== T1JL aWV2YWw= IEZEQQ== IHRyb3A= IE92ZXJhbGw= IHZpcnR1ZQ== IHNhdGlzZmFjdGlvbg== YXVuZA== IGx1bg== IFN3aXR6ZXJsYW5k IE9wZXJhdGlvbg== cHJvY2Vzcw== IHNob29r IGNvdW50aWVz bGVhc2Vk IENoYXJsb3R0ZQ== MTEy IHRyYW5zY3JpcHQ= IHJlZGQ= cHVzaA== IEhleQ== IEFuYWx5c2lz WyI= IGFsdGVybmF0aXZlcw== YXJkbGVzcw== IGVsZXBo IHByZWp1ZA== IExlYWY= SGF2aW5n IEh1Yg== IGV4cHJlc3Npb25z IFZvbHVtZQ== IHNob2NraW5n IFJlZHM= IHJlYWRpbHk= IHBsYW5ldHM= YWRhdGE= IGNvbGxhcHNlZA== IE1hZHJpZA== IGlycml0 aXBwZXI= IEVuYw== IFdpcmU= IGJ1eno= IEdQ YXNoYQ== IGFjY2lkZW50YWxseQ== dXJ1 IGZydXN0cmF0ZWQ= IFNB IGh1bmdyeQ== IEh1ZmY= IGxhYmVscw== YW50bw== IEVQ IGJhcnJpZXJz KXw= IEJlcmtlbGV5 IEpldHM= IHBhaXJz IExhbg== SmFtZXM= IEJlYXI= IGh1bW9y IExpYmVydHk= IG1hZ25pdHVkZQ== IGFnaW5n IE1hc29u IGZyaWVuZHNoaXA= dW1ibGluZw== IGVtZXJnZQ== IG5ld3NwYXBlcnM= IGFtYml0aW91cw== IFJpY2hhcmRz YXRlcm5hbA== IDE5ODE= IGNvb2tpZXM= IHNjdWxwdA== IHB1cnN1aXQ= TG9jYXRpb24= IHNjcmlwdHM= cGM= IGFycmFuZ2VtZW50cw== IGRpYW1ldGVy IGxvc2Vz YW1hdGlvbg== IGxpcXU= IEpha2U= YXJldHRl IHVuZGVyc3RhbmRz IFplbg== dm0= IGFwcHJvdmU= IHdpcA== IHVsdHJh IGludGVuZA== IERJ YXNjdWxhcg== IHN0YXlz IEtvcg== IEts IGludmVzdGluZw== TGE= IGJlbGlldmluZw== YmFk bW91dGg= IHRheHBheWVy 44OD IFF1ZWJlYw== IGxhcA== IFN3aXNz ZHJvcA== IGRyYWlu aXJp ZXRj ZnRlbg== IE5leA== IHN0cmF3 IHNjcmVhbWluZw== IGNvdW50ZWQ= IGRhbWFnaW5n IGFtYmFzc2Fkb3I= Y2VudHVyeQ== IHByb3g= IGFycmVzdHM= dXY= aWxhdGVyYWw= IENoYXJn IHByZXNjcmliZWQ= IGluZGVwZW5kZW50bHk= IGZpZXJjZQ== IEJhYnk= IGJyYXZl IHN1aXRz PT4= IGJhc2VsaW5l IFJhdGU= IGlzbGFuZHM= ICgo Z3JlZW4= aXhlbHM= IG5hbWVseQ== IFZpbGxhZ2U= dGhhbg== YW15 VmVyc2lvbg== Z21haWw= ZW50aWFscw== IFN1ZA== IE1lbGJvdXJuZQ== IGFycml2aW5n IHF1YW50dW0= ZWZm cm9wb2xpdGFu VHJp IGZ1bmVyYWw= IElS w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IENvYg== aXRhYmx5 IHR1cmI= IGNvbWJv UmV2aWV3 IGRlcGxveW1lbnQ= dWl0eQ== IEJvdHQ= IGludmlzaWJsZQ== IHJlbmRlcmluZw== IHVubG9ja2Vk IGFxdQ== IFZsYWRpbWly IHBhZA== IEJyYWlu IExlZ2FjeQ== ZHJhZ29u IEt1cmRpc2g= IHNvdW5kZWQ= IGRldGFpbmVk IERN Z2FyeQ== IGRhdWdodGVycw== IGRpc3R1cmJpbmc= dWth IFBhcmFk IHRhc3Q= IHVuZm9ydHVuYXRl IHVs ZW1pbg== IGF0dGVuZGFuY2U= dHJs IHBhcmtz IE1lbW9yaWFs IEFsaWNl b3RoeQ== Z3VhcmQ= IERpc2U= IFNoYW4= IEZvcnVt UmljaA== IHNoaWZ0ZWQ= dWV6 IGxpZ2h0ZXI= IE1hZ24= IGNvZA== U2No aGFtbWFk UHVi MzUw IFBva2Vtb24= IHByb3RvdHlwZQ== IHVucmU= QmFzZQ== IFN0dWRlbnRz IFJlcGx5 IENvbW11bmlzdA== IGdhdQ== IFR5bGVy SVo= IHBhcnRpY2lwYXRlZA== IHN1cHJlbQ== IERldGFpbHM= IHZlc3NlbHM= cm9k IHRyaWJl a2VlcA== IGFzc3VtcHRpb25z IHBvdW5k IGNydWRl IEF2YWlsYWJsZQ== IHN3aW1taW5n IGluY2x1c2lvbg== IGFkdmFuY2Vz Y3VsYXRpb24= IGNvbnNlcnZhdGlvbg== IG92ZXJk IEJ1ZmZhbG8= QXJ0aWNsZQ== ZWRnZQ== IGF3YQ== IE1hZGlzb24= IHNpZGV3 IGNhdGFzdA== IEtyaXN0 dWNsZQ== IEhpZ2h3YXk= IFRlcnJvcg== IGFjdGl2YXRpb24= IHVuY29uc2Npb3Vz IFNhdGFu IFN1c2Fu aWxsZXJ5 IGFycmFuZ2Vk aW9w IHJ1bW9ycw== dXJyaW5n dGhpbms= IEtlaXRo IEtpbmQ= IGF2b2lkaW5n Ynlu bnV0 IFNwZWFrZXI= cnVz bmFtZXM= IGd1aWx0 IE9seW1waWNz IHNhaWw= IE1lcw== bGV2YW50 IENvbHVtYnVz YWZ0 Q2l0eQ== U291dGg= IEhhcnZleQ== IFB1bg== U2V2ZXJhbA== IG1lbnRhbGx5 IGltcHJlc3M= bW91bnQ= IFVidW50dQ== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU IFN1cGVybWFu IE1Qcw== IGludGVudGlvbnM= IFJhY2luZw== IGxpa2VsaWhvb2Q= IDI0MA== VG90YWw= IHRveXM= IFdhdHNvbg== IHVyZ2U= TGVhcg== IFBhcGVy IG9jY3VycmluZw== IEJlbmc= IENlcnQ= IHN0b25lcw== VGlt IFR3aW4= emI= IER5bmFt IHBvbGl0aWNpYW4= a2Vucw== IEVudGVycHJpc2U= VVRFUlM= IGFib2w= IHJlZnJlc2g= IGFyYml0cmFyeQ== cGVjdGlvbg== IHRyb3VibGVz IH0pOw== dHY= IHBpbG90cw== IGRpc3RyaWJ1dGU= IGF1ZGl0 IHBhdXNl b3JpZ2luYWw= IHJpdmFscw== wqM= Rmln VEw= YWJpbA== cnlpbmc= TGlu aW9uZWQ= bG9u IGZhbmN5 IGNyYXNoZWQ= IHRyYWN0 IHNoZWQ= IGNvbnN1bWU= QmFzZWQ= ZG93bmxvYWQ= aW5pdA== IHZvbHRhZ2U= SW50cm9kdQ== IGNvbmRlbW5lZA== IEZpbmFuY2U= cmVzcGVjdA== IGV4Y2x1ZGVk IGVzdGFibGlzaGluZw== aGVyaWM= IGhlcml0YWdl IHNwZWN0YWN1bGFy IHVuc3Q= IFNub3dkZW4= IExhbmU= U2Fu IHByb3RlY3Rpb25z c3RydWN0aW9u aW5jaW5u IG1hY3Jv Q3VzdG9t aW9zaXR5 IGVzcA== IGZ1bmN0aW9uaW5n IG11c2g= IHB1enpsZQ== IGV0aGljYWw= TWFs IGdvdmVybmluZw== IEZlcmd1c29u IHJlc3RvcmVk IHN0cmVzc2Vk IENvdW50ZXI= IEthcw== Y2xpcA== QU5T IHNlaXo= VUs= Ynlzcw== b2xkb3du YXBp IHBlcm1hbmVudGx5 b3VudGVycw== V2VzdA== VGhyb3VnaA== TGlnaHQ= YXRvZXM= IG5lYXQ= IGNvcmQ= dXJlcg== IHNldmVyZWx5 IEF2ZW4= IGludGVycm9n IHRyaXBsZQ== R2l2ZW4= TnVtYmVy IGFyaXNl IHNoZXI= cGxhbnQ= IGZsb3dlcg== IENvdQ== IGF0ZQ== IG5ld2Vy YnVs IG1lYW53aGlsZQ== IExhaXI= IGFkanVzdG1lbnQ= IENvcHlyaWdodA== IGRpdmVycw== aW9sb2dpY2Fs IGdhbWVycw== b2F0 IGhpc3RvcmljYWxseQ== IGFuYWxvZw== IGxvbmd0aW1l IHByZXNjcmlwdGlvbg== IE1pc3Q= IEh5cGVy IE1haW5l IERlaXR5 IG11bHRpcGw= IFJlaW5jYXJu IEh5ZA== IFBpYw== U2ls cmFudHM= IENyaXM= Ljs= KHs= ZXBlbmRlbmNl IHJlY3k= YXRldXI= IHF1YWQ= IGdsb2I= IGNvbmNlZA== dGVhbQ== IGNhcGl0YWxpc3Q= IExvdA== IHJveWFs IEN5YmVy IGJsYWNrcw== bWV0aWM= cml2 IERhbm55 IHNwbw== IFJP IGFuaW1hdGVk cnlwdGVk IERlcHV0eQ== IHJlbmRlcmVk RkU= IHN0cmVhaw== IGNsb3Vkcw== IERvdWc= fn5+fn5+fn4= IGRpc2NvdXI= IFZlaA== IHBzeWNob2xvZ3k= IEpvdXJuZXk= IGNyeXN0YWw= IEZyb3N0 IHN1c3BpY2lvbg== IHJlbGF0ZQ== b3J1cw== IENyeXB0 IE5WSURJQQ== Y29tZWQ= dXRpbmc= aW5jaW5uYXRp IHZ1bG5lcmFiaWxpdHk= b3N0aWM= IGlzb2xhdGlvbg== IGNvb2xpbmc= IENvYWxpdGlvbg== IDExOQ== Rm91cg== IERlYWw= IOKJ c2VtYmxl cmFtZW50 IEJhcmNlbG9uYQ== IDEwMg== IGNvY2FpbmU= b2NhbHlwc2U= RmVi b2dlbmlj IG11dGF0aW9u IGNyeXB0b2M= IEtlbA== IEdpdA== YWlz IHNpc3RlcnM= QU5L IGFjdGl2YXRl VGVy IGRyZWFk eWxvbg== IHByb3ByaQ== QXVzdA== IERlZmF1bHQ= IG91dGRvb3I= IHNoZWVy Y2VpdmU= IGdlbnRseQ== 0L4= UHJvZ3JhbQ== IOKGkg== IHZlZ2Fu IENydXM= IHJlc3BvbnNpYmlsaXRpZXM= IEhS T0xE IHByZXZlbnRz IHN0aWZm IFdlcmU= IGF0aGxldGlj IFNjb3Jl ICk6 IGNvbHVtbnM= IExvYw== YXZhaWxhYmxl IEZyYW0= IFNlc3Npb25z IGNvbXBhbmlvbg== IHBhY2tz MTQw IEtuaWdodHM= IGZhcnQ= IHN0cmVhbXM= IHNob3Jl IGFwcGVhbHM= IFBlcmZvcm1hbmNl aGF1bA== IFN0cmE= IE5hZw== MTAz IFRyYW5zcG9ydGF0aW9u QkI= RXY= emFu UHVibGlj IHR3aW4= dWxzaW9u TXVsdA== IGVsZWN0cm8= IHN0YXR1ZQ== YXRpb25hbGx5 IE5vcnQ= IGluc3BlY3Rpb24= Lyo= aWd1ZQ== IGNvbXBhc3Npb24= IFRhbGVz IFN0ZWlu IFNjcmVlbg== IEJ1Zw== IExpb24= Z2lybA== IHdpdGhkcmF3YWw= IG9iamVjdGl2ZXM= IGJsb29keQ== IHByZWxpbWluYXJ5 IGphY2tldA== IGRpbWVuc2lvbnM= IENvb2w= IE9jY3Vw IHdyZWNr IGRvdWJsZWQ= YW5raW5n IDE5NzU= IGdsYXNzZXM= IFdhbmc= cHJvdg== UGF0aA== Y29ubmVjdGVk IE11bHRp IE5vcndheQ== YWdvbmlzdA== IGZlYXJlZA== IHRvdWNoaW5n IGFyZ3VhYmx5 wq/Cr8Kvwq/Cr8Kvwq/Crw== IE5DQUE= Y2hlbQ== IHNwYXQ= IFdXRQ== IENlbA== aWdnZXI= IGF0dGFja2Vy IEpvaW4= b2JqZWN0 ZXR0YQ== IGVsaW1pbmF0ZWQ= ZGV0 IGRlc3RydWN0 IEx1Y2Fz Y3R1YXJ5 MTgw IEJyYWR5 IEJsdWVz QmF5 YXVrZWU= IHRpbWVsaW5l IGRlbGVnYXRlcw== d3JpdHRlbg== dWZmaWNpZW50 IHNoYXBlcw== Q29weXJpZ2h0 b3VibGU= c2VydmljZQ== IHBpb25l IGNvbGxlZ2Vz IHJvd3M= IHNwaXRl IGFzc2Vzc2Vk MzYw IGxlYXNl IGNvbmZpZGVudGlhbA== Y2tlcg== IE1hbm5pbmc= IFZvaWNl IHNlYWxlZA== IGNhbGN1bGF0ZQ== Tk8= IEFzc2lzdGFudA== IHRlZW5hZ2Vy dWxlbnQ= YXRoZXJpbmU= IG1vY2s= IGRpYW1vbmQ= IGZlc3Q= IHN3aXRjaGVk IHJlc3VtZQ== IFB1ZXJ0bw== IGxhbmVz aXJhdGlvbg== IFNpbWlsYXJseQ== IHJvZA== IFNlbA== IFBhbGFjZQ== IExpbWl0ZWQ= ZW91cw== IHZhcmlhbnQ= IHdhcmQ= ICkp U2hvdw== T09L QWxleA== IE5lcA== YnJpcw== IFdpa2lwZWRpYQ== IGV4Y2VwdGlvbmFs IG1hbmFnZXM= IERyYXc= QWdhaW4= IGNvcHBlcg== dXR0 IGV4cG9ydHM= IHBvcnRmb2xpbw== IGVsZXZhdGVk UmF0ZWQ= IE90aGVyd2lzZQ== IFRhY3Q= IFNoZWw= IFRY IuKAlA== IHJlc3Vy IFdh dmVuYW50 IG1vbmV0YXJ5 cGVvcGxl RW1haWw= IGZpZnR5 IFN3ZWV0 IE1hbGF5c2lh IGNvbmZ1c2luZw== IFJpbw== dWRh dXRlbmFudA== Iik7 IHByYWlzZWQ= IHZvbHVtZXM= dHVybg== IG1hdHVyZQ== IG5vbnByb2ZpdA== IHBhc3Npb25hdGU= IFByaXZhdGU= IDEwMw== IGRlc2NlbmQ= 56We dWZmeQ== aGVhZGVk V2hldGhlcg== cmllbg== emVjaA== YmVpdA== IGNocm9t IE1jTQ== IGRhbmNpbmc= IGVsZWc= IE5vdGljZWQ= MTE1 IGFkdm9jYWN5 RU5UUw== YW1ibGluZw== IE1pbm9y IEZpbm4= IHByaW9yaXRpZXM= IHRoZXJlb2Y= IFN0YWdl IFJvZ2Vycw== IHN1YnN0aXR1dGU= IEphcg== IEplZmZlcnNvbg== IGxpZ2h0bHk= MTAy IExpc2E= dWl0cw== eXNpY2Fs IHNoaWZ0cw== IGRyb25lcw== IHdvcmtwbGFjZQ== IHJlc2lk ZW5zZWQ= YWhu IHByZWZlcmVuY2Vz c2VydmVy IGRlYmF0ZXM= ZG9j IEdvZHM= IGhlbGljb3B0ZXI= IGhvbm91cg== IGNvbnNpZGVyYWJseQ== ZWRlZA== IEZlbWFsZQ== IEFubmU= IHJldW4= IEZhY2U= IEhhbGxvdw== IEJ1ZGdldA== IGNvbmRlbW4= IHRlbmRlcg== UHJvZg== b2NyYXRpYw== IFR1cm5lcg== IEFncmlj IDE5NzY= IGFwdA== ZGlzYw== IEZpZ2h0ZXI= IEF1cg== IGdhcmJhZ2U= aW5wdXQ= IEthcmw= IE9saXZlcg== IExhbmd1YWdl a24= Tm9u IENsYXI= IHRyYWRpdGlvbnM= IGFkdmVydGlzZW1lbnQ= IFNvcg== IGFyY2hpdmU= IHZpbGxhZ2Vz NzUw IGltcGxlbWVudGluZw== d2F1a2Vl IGRpZXRhcnk= IHN3aXRjaGluZw== UmVwdWJsaWM= IHZlbG9jaXR5 IGNpdA== IEF3YXJkcw== IGZpbmFuY2luZw== IGxhc3RlZA== KV0= IHJlbWluZGVy UGVyc29u IHByZWNpc2lvbg== IGRlc2lnbmVycw== IEZyaWVk IEJvcmRlcg== IHRyYWdpYw== IHdpZWxk IGluaXRpYXRpdmVz IFRhbms= d2Vy IGpvaW5z Um8= aW5lcnk= IGFycm93 IGdlbmVyYXRpbmc= Zm91bmRlcg== IHNlYXJjaGVz IHJhbmRvbWx5 QWNjZXNz IGJhdGNo IHBvc2Vk bGF0 IHB1cnN1aW5n YXNh IHRlc3RpZmllZA== Zm9ybWluZw== IFNoYXI= d2lraQ== IEVpdGhlcg== U29tZXRpbWVz IHNlbmF0b3Jz IEpvaG5ueQ== IFRhbGliYW4= IEdQUw== IjoiLw== 44Gu5Q== IGFuYWx5emVk IFJ1Ymlv IE1vdmVtZW50 b3BhcmQ= aWlp U3RhbmQ= ZmlnaHQ= IGlnbm9yaW5n aWFuZw== IEdO c29ldmVy IFNUQVQ= IHJlZnVzaW5n IHN3ZWF0 IGJheQ== UE9SVA== aXJtZWQ= YWt5 IGRpc3Bybw== IGxhYmVsZWQ= IDEwOA== SGVsbG8= IHBsZWFzYW50 YWJh IHRyaXVtcGg= IGFib2FyZA== IGluY29t IENyb3c= bGV0dA== IGZvbGs= IGNoYXNl YGA= IEJydXM= IHRlZW5z Y3Vl IHRlcnJhaW4= aHlk aWxpZ2h0 T1JZ U3VwcG9ydA== ZXdz bGxp cmFpbnRz IENhbmQ= IGFidXNlZA== YWNobWVudA== bGFyZw== QmFz IENhbmNlcg== IDE5Nzg= IHN1cHBvcnRlcg== YWNjZXNz IFRlcm1pbg== IFRhbXBh IEFOWQ== IG5ld2VzdA== IENyaW1pbmFs ZWR1 IDE5MzA= IGFkbWl0cw== IGVuZGU= IGZhaWx1cmVz dXJhdGU= ZnVsbmVzcw== Y3ljbA== IFN1YmplY3Q= IGluZmluaXRl dGhyZWU= V0E= cGl0 IEluc3RhbGw= UmFk aWxpYXRpb24= R00= IGNvbnRpbmVudA== IGFjY29tbW9kYXRl IENsYXk= IHB1cA== IEZ1bmN0aW9u IGhhbW1lcg== IEFsYmVydGE= IHJldmlzZWQ= IG1pbm9yaXRpZXM= IG1lYXN1cmVtZW50 Q29ubmVsbA== IGRpc2FibGU= IE1peA== SW5jcmU= IGZvcms= IFJvc2Vu IGltcGxpZXM= dW1ibHI= QU5H IHByb3RlaW5z IGFnZ3Jlc3Npb24= IGZhY2lsaXRhdGU= U04= IGlsbGVnYWxseQ== dWVy IGFjYWRlbQ== IHB1eno= IFNoaWZ0 cGF5 b2xsbw== IGF1ZGllbmNlcw== QnVpbGQ= IG5vYmxl IHN5bnRheA== 4piF IGJlYW0= IEJlZA== IEFsZA== IG9yaWdpbnM= dmlkZW8= IDE5Nzc= IEFzc2F1bHQ= IGdhcmFnZQ== VGVhbQ== IHZlcmRpY3Q= IGR3YXI= IFZpcnR1YWw= ZXZlbnQ= S2VlcA== IHNlbnRpbWVudA== IHdpbGRsaWZl c2hpcnQ= IGJ1cmc= IHJlY29tbWVuZGF0aW9u cmVwcmVzZW50 IGdhbGxlcnk= b3duZXJz IHNjaG9sYXI= IGNvbnZlbmllbmNl IFN3aWZ0 IGNvbnZpbmM= Q2Fw IHdhcmZhcmU= IFZpc3VhbA== IGNvbnN0aXR1dGU= IGFib3J0 IFdlYXRoZXI= IExvb2tpbmc= IEhlbQ== IG1hcnRpYWw= IGluY29taW5n ZXRpdGlvbg== IHRvbGVyYW5jZQ== IENyZWF0ZWQ= IGZsb3dz IEVsZGVy IHNvdWxz IGZvdWw= IFBhaW4= IENBTg== IDIyMA== YmM= aGVuZA== IGdlbml1cw== UmVhbA== IFdy b21ldGVy cGFk IGxpbWl0aW5n IFNp IExvcmU= IEFkdmVudHVyZXM= IHZhcmllZA== RGlzYw== Zmlu IFBlcnNvbmFs Q2hyaXM= IGludmVudGVk IGRpdmU= IFJpc2U= IG96 IENvbWljcw== IGV4cG9zZQ== IFJlYg== bGV0dGVycw== c2l0ZQ== aW1hdGVk IGhhY2tpbmc= IGVkdWNhdGVk IE5vYm9keQ== IGRlcHJp IGluY2VudGl2ZQ== 44K3 IG92ZXJzaWdodA== IHRyaWJlcw== IEJlbGdpdW0= IGxpY2Vuc2luZw== b3VydA== UHJvZHVjdA== YWhs IEdlbQ== IHNwZWNpYWxpc3Q= IGNyYQ== YW5uZXJz IENvcmJ5bg== IDE5NzM= UkVBRA== IHN1bW1hcg== IG92ZXJsb29r IEFwcGxpY2F0aW9u IGluYXBwcm9wcmlhdGU= IGRvd25sb2FkZWQ= UXVl IEJlYXJz IHRodW1i IENoYXJhY3Rlcg== IFJlaW5jYXJuYXRlZA== IFNpZA== IGRlbW9uc3RyYXRlcw== c2t5 IEJsb29tYmVyZw== IEFycmF5 IFJlc3VsdHM= IEZvdXJ0aA== IEVEVA== IE9zY2Fy Y2VuZA== IDEwNg== IE5VTEw= IEhFUkU= bWF0Y2g= IEJydW4= IGdsdWNvc2U= aWVn ZWd1 IGNlcnRpZmllZA== IHJlbGll IGh1bWFuaXRhcmlhbg== IHByYXllcnM= S2luZw== IG5hbg== aG91 MTA4 dWx1 IHJlbmV3YWJsZQ== IGRpc3Rpbmd1aXNo IGRlbnNl IFZlbnQ= IFBhY2thZ2U= IEJvc3M= IGVkaXRvcnM= IG1pZ3I= VHJh IFBldGVycw== IEFyY3RpYw== MjAwNA== IENhcGU= IGxvY2FsbHk= IGxhc3Rpbmc= IGhhbmR5 Liku UGFu IFJFUw== SW5kZXg= IHRlbnNpb25z IGZvcm1lcmx5 IGlkZW9sb2dpY2Fs IHNlbnNvcnM= IGRlYWxlcnM= IGRlZmluZXM= U2s= IHByb2NlZWRz IHByb3h5 YXppbmVz IEJhc2g= IFBhZA== IENyYWZ0 ZWFsb3Vz IHNoZWV0cw== b21ldHJ5 SnVuZQ== Y2xvY2s= VFQ= IFRoZWF0cmU= IEJ1eno= IGNoYXB0ZXJz IG1pbGxlbm4= IGRvdWdo IENvbmdyZXNzaW9uYWw= IGltYWdpbmVk YXZpb3I= IGNsaW5pYw== IDE5NDU= IGhvbGRlcg== cm9vdA== b2xlc3Rlcg== IHJlc3RhcnQ= Qk4= IEhhbWFz IEpvYg== IG9yYg== IHJhbQ== IGRpc2Nsb3Nl IHRyYW5zbGF0ZQ== IGltbWlncmFudA== IGFubm95aW5n IHRyZWF0eQ== YW5pdW0= IFRlYQ== IExlZ2lvbg== IGNyb3dkcw== IEJlYw== IEFlcg== b2h5ZA== QnJv TG9va2luZw== IGxicw== IGFnZ3Jlc3M= IHNlYW0= IGludGVyY2VwdA== IE1J bWVyY2lhbA== YWN0aXY= IENpdA== IGRpbWVuc2lvbg== IGNvbnNpc3RlbmN5 IHJ1c2hpbmc= IERvdWdsYXM= IHRyaW0= SW5zdGFsbA== aWNrZXI= IHNoeQ== MTA2 IG1lbnRpb25z cGVsbGVk IFRhaw== Y29zdA== IGNsYXNzcm9vbQ== IGZvcnR1bmU= ZHJpdmVu IHVubGU= IFdoZWVs IGludmVzdG9y IE1hc3RlcnM= a2l0 IGFzc29jaWF0aW9ucw== IEV2b2x1dGlvbg== b3Bpbmc= dXNjcmlwdA== IHByb3ZpbmNpYWw= IFdhbHRlcg== YXZp U08= IHVubGltaXRlZA== RW5nbGlzaA== IENhcmRz IEVib2xh bmVyZWQ= IHJldmVuZ2U= IG91dHJpZ2h0 dW1wZXI= IGZpdHRpbmc= IFNvbGlk IGZvcm1hbGx5 IHByb2JsZW1hdGlj IGhhemFyZA== IGVuY3J5cHRpb24= IHN0cmFpZ2h0Zm9yd2FyZA== IEFL IHBzZQ== IE9yYg== IENoYW1iZXI= IE1haw== Q29udGVudHM= IGxveWFsdHk= IGx5cmljcw== IFN5bQ== IHdlbGNvbWVk IGNvb2tlZA== IG1vbm9w IG51cnNl IG1pc2xlYWRpbmc= IGV0ZXJuYWw= IHNoaWZ0aW5n ICs9 Vmlz IGluc3RpdHV0aW9uYWw= aWxsYXJ5 IHBhbnQ= VkVSVA== IEFDQw== IEVuaA== IGluY29u IFJFVVRFUlM= IGRvbmF0ZWQ= 4oCm4oCm4oCm4oCm SW50ZXJu IGV4aGliaXQ= IHRpcmU= IFJpYw== IENoYW1waW9u IE11aGFtbWFk TklORw== IFNvY2Nlcg== IG1vYmlsaXR5 IHZhcnlpbmc= IE1vdmll IGxvcmQ= b2Fr RmllbGQ= IHZlY3Rvcg== dXNpb25z IHNjcmFw IGVuYWJsaW5n bWFrZQ== VG9y Lio= fHw= IFdlYnNpdGU= IE5QQw== IHNvY2lhbGlzdA== IEJpbGx5 IEFkZGl0aW9uYWw= IGNhcmdv IGZhcm1z IFNvb24= IFByaXpl IG1pZG5pZ2h0 IDkwMA== c2Vlbg== IFNwb3Q= IHNoZWVw IHNwb25zb3JlZA== IEhp IEp1bXA= IDE5Njc= TWljcm9zb2Z0 IEFnZW50 IGNoYXJ0cw== ZGly IGFkamFjZW50 IHRyaWNrcw== IG1hbmdh IGV4YWdnZXI= Lz4= Zm9vdGJhbGw= IEZDQw== R0M= IFRpZXI= YW5kcmE= T1VORA== JSks IGZydWl0cw== VkM= IEFB Um9iZXI= IG1pZHN0 4pc= YW5rYQ== IGxlZ2lzbGF0dXJl IE5laWw= IHRvdXJpc3Rz IiI= IFdhcm5pbmc= IE5ldmVydGhlbGVzcw== IE9mZmljaWFs IFdoYXRldmVy IG1vbGQ= IGRyYWZ0ZWQ= IHN1YnN0YW5jZXM= IGJyZWVk IHRhZ3M= IFRhc2s= IHZlcmI= IG1hbnVmYWN0dXJlZA== Y29tbWVudHM= IFBvbGlzaA== UHJvdg== IGRldGVybWluZXM= T2JhbWE= a2Vycw== IHV0dGVybHk= IHNlY3Q= c2NoZQ== IEdhdGVz IENoYXA= IGFsdW1pbnVt IHpvbWJpZQ== IFRvdWNo IFVQ IHNhdGlzZnk= IHByZWRvbWlu YXNjcmlwdA== IGVsYWJvcmF0ZQ== IDE5Njg= IG1lYXN1cmluZw== IFZhcmk= YW55YWh1 IHNpcg== dWxhdGVz aWRnZXM= aWNrZXRz IFNwZW5jZXI= VE0= b3VidGVk IHByZXk= IGluc3RhbGxpbmc= IENhYg== cmVlZA== cmVhdGVk U3VwcA== IHdyaXN0 IEtlcnJ5 MTA3 IEtsZQ== IFJhY2hlbA== IGNvdHRvbg== IEFSRQ== IEVsZQ== Q29udHJvbA== IGxvYWRz IERvZA== YW5hcw== Ym9uZQ== IGNsYXNzaWNhbA== IFJlZ2lvbmFs IEludGVn Vk0= IGRlc2lyZXM= IGF1dGlzbQ== c3VwcG9ydGVk IE1lc3NhZ2U= IGNvbXBhY3Q= d3JpdGVy IDEwOQ== IEh1cnJpY2FuZQ== Y2lzaW9u IGN5Y2xlcw== IGRyaWxs IGNvbGxlYWd1ZQ== IG1ha2Vy R2VybWFu IG1pc3Rha2Vu U3Vu IEdheQ== IHdoYXRzb2V2ZXI= IHNlbGxz IEFpcmw= bGl2 IE9wdGlvbg== IHNvbHZlZA== IHNlY3RvcnM= IGhvcml6b250YWw= IGVxdWF0aW9u IFNraWxs IEJpbw== Z2VtZW50 IFNuYXA= IExlZ2Fs IHRyYWRlbWFyaw== IG1ha2V1cA== IGFzc2VtYmxlZA== IHNhdmVz IEhhbGxvd2Vlbg== IFZlcm1vbnQ= IEZST00= IGZhcm1pbmc= IFBvZGNhc3Q= YWNjZXB0YWJsZQ== IEhpZ2hlcg== IGFzbGVlcA== dWxsaXZhbg== IHJlZmVyZW4= IExldg== IGJ1bGxldHM= b2tv SEM= IHN0YWlycw== IG1haW50YWlucw== IExvd2Vy IFZp IG1hcmluZQ== IGFjcmVz IGNvb3JkaW5hdG9y IEpvaA== IGNvdW50ZXJwYXJ0cw== IEJyb3RoZXJz IGluZGljdA== YnJh IGNodW5r IGNlbnRz SG9tZQ== IE1vbnRo IGFjY29yZGluZ2x5 aWZsZXM= IEdlcm1hbnM= IFN5bg== SHVi IGV5ZWI= 4pSA4pSA4pSA4pSA IHJhbmdlcw== IEhvbGxhbmQ= IFJvYm90 ZmM= TWlrZQ== IHBsYXNtYQ== IHN3YXA= IGF0aGxldGU= IFJhbXM= LCci IGluZmVjdGlvbnM= IGNvcnJpZA== IHZpYg== IHBhdGNoZXM= IHRyYWRpdGlvbmFsbHk= IHJldmVsYXRpb24= IHN3ZWVw IGdsYW5jZQ== IGluZXg= MjAwMw== IFJhdw== d29ya2luZw== b3N1cmVz IERhdA== IEx5bmNo IGxldmVyYWdl IFJlaWQ= IGNvcnJlbGF0aW9u aWFuY2Vz YXZhc2NyaXB0 IHJlcG9zaXRvcnk= cmV0dHk= IDE5NzI= MjQw IG91bg== cG9s IFJlZWQ= IHRhY3RpY2Fs aXNpdGU= QXBwbGU= IFF1aW5u IHJhcGVk aWxsbw== RXVyb3Bl IGFsZ29yaXRobXM= IFJvZHJpZw== aXU= IGlsbHVt IGZhbWU= IGludHJvZHVjaW5n IGRlbGF5cw== IFJhaWRlcnM= IHdoaXN0bGU= IG5vdmVscw== IFJlYWxseQ== IGRlcml2 IHB1YmxpY2F0aW9ucw== IE5laXRoZXI= IENvbW1lcmNl IGFzdG9u bGFuZ3VhZ2U= Tm90ZXM= IFJvdGg= IEZlYXI= IG1hdGU= IHBhcmFkZQ== IFFC IG1hbmV1 IENpbmNpbm5hdGk= bWl0dGluZw== IHdhaXN0 IFJldw== IGRpc2NvbnQ= 0LA= IHN0YXJpbmc= IGFsaWFz IHNlY3VyaXRpZXM= IHRvaWxldA== IEplZGk= IHVubGF3 dmlzZWQ= Ly8vLy8vLy8= XSg= IFdlaXNz IHByZXN0 IENvbXBhbg== IG1lbW8= IEdyYWNl SnVseQ== IEVsaXRl Y2VudGVy IFN0YXk= IGdhbGF4eQ== IHRvb3Ro IFNldHRpbmdz IHN1YmplY3RlZA== 44Km IGxpbmViYWNr IHJldGFpbGVycw== IFdhbnQ= IGRhbmdlcnM= QWly IHZvbHVudGFyeQ== ZXdheQ== IGludGVycHJldGVk b3RpbmU= w6c= IHBlbA== U2VydmljZQ== IEV2ZW50dWFsbHk= IGNhcmVlcnM= IHRocmVhdGVu IG1lbW9y IEJyYWRsZXk= YW5jaWVz c24= IFVua25vd24= TmF0aW9uYWw= IHNoYWRvd3M= YWlsYW5k IERhc2g= RXZlcnlvbmU= aXp6YXJk TWFyY2g= PSg= IHB1bGxz IHN0cmFuZ2Vy IGJhY2t3YXJkcw== IEJlcm5hcmQ= aW1lbnNpb25hbA== IGNocm9u IHRoZW9yZXRpY2Fs a3RvcA== IHdhcmU= IEludmVzdGln IEluaXRp IE9wZXJhdGlvbnM= b3Zlbg== b2NpZGU= Ki8= IGZsYW1lcw== IENhc2g= c2hpdA== IGNhYg== IEFuYWx5 IFNlYWg= IGRlZmluaW5n IG9yZGVyaW5n IGltbXVu IHBlcnNpc3RlbnQ= QUNI UnVzc2lhbg== bWFucw== IGhpbmQ= IHBob3RvZ3JhcGh5 wqk= IGh1Zw== IDEwNw== IEhlbmNl aW90cw== dWRlYXU= IHN1YnNpZGllcw== IHJvdXRpbmVseQ== IERldmljZQ== aXRpYw== IGRpc2d1c3Q= bGFuZGVy IDE5NDA= IGFzc2lnbm1lbnQ= IEJlc2lkZXM= d2ljaw== IER1c3Q= dXNj c3RydWN0ZWQ= MTEx ZGV2ZWxvcA== IGZvbmQ= IGludGVyc2VjdGlvbg== IGRpZ25pdHk= IGNvbW1pc3Npb25lcg== V2l0aG91dA== cmVhY2g= IGNhcnRvb24= IHNjYWxlcw== 44Ot RklH IHN1cnZleXM= IEluZG9uZXNpYQ== IGFydHdvcms= IHVuY2g= IGN5Y2xpbmc= dW5jdA== YXVlcg== b3JhdGU= IE9idmlvdXNseQ== IGNoYXJhY3Rlcml6ZWQ= ZmVsZA== IGFmZmlybQ== IGlubmluZ3M= IOk= IGFsaWVucw== IGNsb3Ro ZXRvb3Ro IENlcnRhaW4= wqc= IGRpZ2VzdA== a25vdw== IFhM IHByZWRpY3Rpb25z IGRpbg== V0FS IGFmdGVybWF0aA== RXhhbXBsZQ== IFN1Y2Nlc3M= IFRocg== SUdO IG1pbmVy QnVz IGNsYXJpdHk= aGVpbWVy IE9VVA== IFNlbmQ= IENpcmNsZQ== IERpZXQ= IHByb25vdW5jZWQ= IGNyZWF0b3Jz IGVhcnRocXVha2U= YXR0ZXJ5 Z2VvbnM= IG9k IGxheWluZw== b3Jw VWx0 cHJvamVjdA== IHVuZGVybWlu IHNlcXVlbA== U2Ft IERhcmtuZXNz IHJlY2VwdGlvbg== YnVsbA== WVM= IFZpcg== IHNlcXVlbmNlcw== IENvaW4= IG91dGZpdA== IFdhaXQ= MTE5 IGRlbGl2ZXJz Li4uLi4u IGJsb3du IEVzYw== IE1hdGg= cGVybQ== IFVs IGdsaW0= IGZhY2lhbA== IGdyZWVuaG91c2U= IHRva2Vucw== Ly0= IEFubnVhbA== IE9ORQ== IHRlZW5hZ2U= IFBoeXNpY2Fs IExhbmc= IENlbHQ= IHN1ZWQ= aXZpZHVhbGx5 IHBhdGllbmNl Y2hhaXI= cmVndWxhcg== IGF1Zw== aW52 ZXhjZXB0 IExpbA== IG5lc3Q= ZmQ= c3Vt IENoYXNl UnVzc2lh IEplbm5pZmVy IG9mZnNlYXNvbg== T3ZlcmFsbA== Rm9yZQ== IHJpb3Q= QXVk Zm9ybWVy IGRlZmVuZGVycw== IENU aW90aWM= cmlibHk= IGF1dG9tYXRlZA== IHBlbmlz IGluc2lzdA== IGRpYWdyYW0= IFNRTA== IEdhcmM= IHdpdGNo Y2xpZW50 aWVycmE= YW1iZXJz IHJlY291bnQ= ZmFy VmVyeQ== b3N0ZXJvbmU= IGFwcHJlY2lhdGVk IFBlcmZlY3Q= U2VjdGlvbg== IGRvc2Vz b2NhdXN0 IGNvc3RseQ== IGdyYW1z IFNoaQ== IHdyZXN0bGluZw== IDE5NzE= IHRyb3BoeQ== IG5lcnZl IEtheg== IEV4cGVyaWVuY2U= IHBsZWRnZWQ= IHBsYXliYWNr IGNyZWF0aXZpdHk= Ynll IGF0dGFja2Vycw== IGhvbGRlcnM= IENvYWNo IFBoRA== IHRyYW5zZmVycw== IGNvbG9yZWQ= IEhpbmR1 IGRyb3du IGxpc3RlbmVk IFdB aWFzbQ== UE8= IGFwcGVhbGluZw== IGRpc2Nsb3NlZA== IENoaWNrZW4= YWdnaW5n IHBsZWFkZWQ= IG5hdmlnYXRpb24= IFJldHVybnM= IFtb Uk9S RUE= IHBob3RvZ3JhcGhlcg== IFJpZGVy aXBwZXJz IHNsaWNl IGVyZWN0 IGhlZA== aXNzYW5jZQ== IFZpa2luZ3M= dXJpb3Vz IGFwcGV0 b3VidGVkbHk= Q2hpbGQ= IGF1dGhlbnRpYw== b29z IE1ha2luZw== IGFubm91bmNpbmc= IGJvZA== IG1ldGVy IE5pbmU= IFJvZ3Vl IHdvcmtmb3JjZQ== IHJlbmV3ZWQ= IG9yZ2FuaXNhdGlvbnM= YWNz UExF U2hvcnQ= IGNvbXBvdW5kcw== IFZpc2l0 IGVudmVsb3A= ZWFydGg= IHN1cHBvcnRpdmU= Z2dsZQ== IEJydXNzZWxz IEd1aWxk Q3JlYXRl UkVM IGF2ZXJhZ2Vk IDE5Njk= cmlhZ2Vz IGxlbmd0aHk= IGZvcmdvdA== T2theQ== IEVyZA== IGRlYWxlcg== IHJlY2Vzc2lvbg== REQ= IGRlc3BlcmF0ZWx5 IGh1bmdlcg== IHN0aWNrcw== IG1waA== IEZhaXRo IGludGVudGlvbmFsbHk= IGRlbW9s dWVsbGVy IFNhbGU= IGRlYnJpcw== c3ByaW5n IGxlYXA= Pj4+Pg== IGNvbnRhaW5lcnM= c2VsbGluZw== cmFuZWFu YXR0ZXJpbmc= IGNvbW1lbnRlZA== IENN b251dA== IHdvb2Rz ZXNwZWNpYWxseQ== IG9yZ2FuaXpl aXZpYw== IFdvb2Rz YW5nYQ== c3F1 IG1hag== YW1vbg== IGF4aXM= IDE5NzQ= IERlbm1hcms= IHdhcnJpb3I= IFBhbmQ= IG91dGxpbmVk IEJP aW5zdWxh emlsbGE= ZWJvb2s= IGRhcmU= IHNlYXJjaGVk IG5hdmlnYXRl U24= d3JpdGluZw== IHVuaXRlZA== SmFwYW4= IEhlYnJldw== IGZsYW1l IHJlbGllcw== IGNhdGNoaW5n IFNobw== IGltcHJpc29ubWVudA== IHBvY2tldHM= IGNsb3N1cmU= IEZhbQ== dGlt YWRlcXU= QWN0aXZpdHk= IHJlY3J1aXRpbmc= IFdBVENI IEFyZ2VudGluYQ== ZGVzdA== IGFwb2xvZ2l6ZQ== b3Jv IGxhY2tz IHR1bmVk IEdyaWZmaW4= IGluZmFtb3Vz IGNlbGVicml0eQ== c3Nvbg== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IElzaXM= IERpc3BsYXk= IGNyZWRpYmlsaXR5 IGVjb25vbWllcw== IGhlYWRsaW5l IENvd2JveXM= IGluZGVm IGxhdGVseQ== IGluY2VudGl2ZXM= YnV0dG9u IE1vYg== QXV0 IHJlc2lnbmVk IE9t Y2FtcA== IHByb2ZpbGVz IHNjaGVtZXM= b2xwaGlucw== YXllZA== Q2xpbnRvbg== ZW5o IFlhaG9v IGFic3Q= IGFuaw== c3VpdHM= IHdpc2hlZA== IE1hcmNv dWRkZW4= IHNwaGVyZQ== IEJpc2hvcA== IGluY29ycG9yYXRlZA== IFBsYW50 MTE0 IGhhdGVk cGlj IGRvbmF0ZQ== IGxpbmVk IGJlYW5z IHN0ZWFsaW5n IGNvc3R1bWU= IHNoZXJpZmY= IGZvcnR5 IGludGFjdA== IGFkYXB0ZWQ= IHRyYXZlbGxpbmc= YmFydA== IG5pY2VseQ== IGRyaWVk IHNjYWw= b3NpdHk= Tk9URQ== IEJo IEJyb25jb3M= IElnbg== IGludGltYXRl IGNoZW1pc3RyeQ== IG9wdGltYWw= RGVi IEdlbmVyYXRpb24= IF0s aWNoaQ== IFdpaQ== IFlPVVI= dmVudGlvbnM= V3JpdGU= IHBvcHVs dW5uaW5n IFdvcg== Vm9s IHF1ZWVu aGVhZHM= S0s= IGFuYWx5emU= b3BpYw== ZWFyY2hlcnM= IGRvdA== bGVncmFwaA== YXN0aWNhbGx5 IHVwZ3JhZGVz IGNhcmVz IGV4dGVuZGluZw== IGZyZWV6ZQ== IGluYWJpbGl0eQ== IG9yZ2Fucw== IHByZXRlbmQ= IG91dGxldA== MTEz b2xhbg== IE1hbGw= dWxpbmc= dGFsaw== IGV4cHJlc3Npbmc= IEFsd2F5cw== IEJlZ2lu ZmlsZXM= IGxpY2Vuc2Vz JSU= IE1pdHQ= IGZpbHRlcnM= IE1pbHdhdWtlZQ== R04= IHVuZm9sZA== TW8= IG51dHJpdGlvbg== cHBv Qm8= IGZvdW5kaW5n IHVuZGVybWluZQ== IGVhc2llc3Q= IEN6ZWNo IE1hY2s= IHNleHVhbGl0eQ== IE5peG9u V2lu IEFybg== IEtpbg== 44Kj aWNlcg== IGZvcnR1bg== IHN1cmZhY2Vz YWdoZA== IGNhcnJpZXJz IFBBUlQ= IFRpYg== IGludGVydmFs IGZydXN0cmF0aW5n IFNoaXA= IEFybWVk ZmZl IGJvYXRz IEFicmFoYW0= aW5pcw== IHN1aXRlZA== dGhyZWFk aW92 YWJ1bA== IFZlbmV6dWVsYQ== IHRvbQ== c3VwZXI= IGNhc3RsZQ== YWx0aG91Z2g= aW94aWRl ZWNoZXM= IGV2b2x1dGlvbmFyeQ== IG5lZ290aWF0ZQ== IGNvbmZyb250ZWQ= UmVtZW1iZXI= IDE3MA== U3VjaA== IDkxMQ== bXVsdA== IEFieXNz dXJyeQ== a2Vlcw== c3BlYw== IEJhcmJhcmE= IGJlbG9uZ2luZw== IHZpbGxhaW4= aXN0YW5p IGFjY291bnRhYmxl IHBvcnRpb25z IERlY2w= VXI= IEthdGU= Z3Jl IG1hZ2F6aW5lcw== VUNL IHJlZ3VsYXRl b21vbg== IEFsbW9zdA== IG92ZXJ2aWV3 IHNjcmFt IGxvb3Q= IEZpdHo= IGNoYXJhY3RlcmlzdGlj IFNuYWtl c2F5 IFJpY28= IHRyYWl0 IEpvaW5lZA== YXVjdXM= IGFkYXB0YXRpb24= IEFpcmxpbmVz IGFyY2hhZQ== IElkZQ== IGJpa2Vz IGxpdGVyYXJ5 IGluZmx1ZW5jZXM= IFVzZWQ= Q3JlYXQ= IHBsZWE= IERlZmVuY2U= IEFzc2Fzcw== IHBvbmQ= VUxU KSI= IGV2YWx1YXRlZA== IG9idGFpbmluZw== IGRlbW9ncmFwaGlj IHZpZ2ls YWxleQ== IHNwb3VzZQ== IFNlYWhhd2tz cmVzcG9ucw== IEJlbHQ= dW1hdGlj IHJpc2Vz cnVubmVy IE1pY2hlbGxl IHBvdGVudA== cmFjZQ== IFBBQw== RmluZA== b2xlc3Rlcm9s SVNT IEludHJvZHVjZWQ= cmVzc2Vz aWdubWVudA== T3M= IFR1 IERleA== aWNpZGVz IHNwYXJrZWQ= IExhdXJh IEJyeWFudA== IHNtaWxpbmc= IE5leHVz IGRlZmVuZGFudHM= IENhdGFs IGRpc2hlcw== c2hhcGVk IHByb2xvbmc= bXQ= KCQ= 44CC IGNhbGN1bGF0aW9ucw== IFNhbWU= IHBpdg== SEg= IGNhbmNlbGxlZA== IGdyaW4= IHRlcnJpdG9yaWVz aXN0aWNhbGx5 Q29tZQ== IFBhcmVudA== UHJvamVjdA== IG5lZ2xpZw== IFByaXZhY3k= IGFtbW8= TEVDVA== b2x1dGVseQ== IEVwaWM= IG1pc3VuZGVy d2Fs QXByaWw= bW9z cGF0aHk= IENhcnNvbg== IGFsYnVtcw== IEVhc3k= IHBpc3RvbA== PDw= IFwo dGFyZ2V0 aGVscA== IGludGVycHJl Y29uc2Npb3Vz IEhvdXNpbmc= IEpvaW50 MTI3 IGJlZXJz c2NpZW5jZQ== IEZpcmVmb3g= ZWZmZWN0aXZl IENhYmlu IE9rYXk= IEFwcGxpYw== IHNwYWNlY3JhZnQ= IFNS dmV0 IFN0cmFuZ2U= U0I= IGNvcnBz aWJlcmFs ZWZmaWNpZW50 IHByZXZhbGVuY2U= IGVjb25vbWlzdHM= MTE4 VGhyZWFk b3JkYWJsZQ== T0RF IENhbnQ= PS09LQ== aWZpYWJsZQ== IEFyb3VuZA== IHBvbGU= IHdpbGxpbmduZXNz Q0xB IEtpZA== IGNvbXBsZW1lbnQ= IHNjYXR0ZXJlZA== IGlubWF0ZXM= IGJsZWVkaW5n ZXZlcnk= IHF1ZXVl IFRyYWlu IGhpag== IG1lbGVl cGxldGVk IGRpZ2l0 IGdlbQ== b2ZmaWNpYWw= IGxpZnRpbmc= 0LU= UmVxdQ== aXR1dGVz IHBhY2thZ2luZw== IFdvcmtlcnM= aHJhbg== IExlYmFub24= b2xlc2M= IHB1bmlzaGVk IEp1YW4= IGphbQ== IERvY3VtZW50 IG1hcHBpbmc= aWNhdGVz IGluZXZpdGFibHk= IHZhbmlsbGE= IFRvbg== IHdhdGNoZXM= IGxlYWd1ZXM= IGluaXRpYXRlZA== ZGVncmVl cG9ydGlvbg== IHJlY2FsbHM= IHJ1aW4= IG1lbHQ= SUFO IGhlbQ== RXhw IGJha2luZw== IENvbG9tYg== YXRpYmxl IHJhZGl1cw== cGx1Zw== IElG ZXRpY2FsbHk= IGZpY3Q= SEVS IFRhcA== YXRpbnVt IGluaw== IGNvaA== IFdpemFyZA== Ym90aA== dGV4 IHNwZW5kcw== IEN1cnJlbnRseQ== IFBpdA== IG5ldXJvbnM= aWdudA== IHJhbGw= IGJ1c2Vz YnVpbGRpbmc= IGFkanVzdG1lbnRz IGNyaWVk aWJsaWNhbA== YXR0ZWQ= IFppb24= IE1hdHRlcg== IG1lZGl0YXRpb24= IERlbm5pcw== IG91cnM= IFRhYg== IHJhbmtpbmdz b3J0YWw= IGFkdmVycw== IHN1cnJlbmRlcg== IEdvYg== Y2l1bQ== b21hcw== aW1ldGVy IG11bHRpcGxheWVy IGhlcm9pbg== IG9wdGltaXN0aWM= IGluZGljYXRvcg== IEJyaWc= IGdyb2Nlcnk= IGFwcGxpY2FudA== IFJvY2tldA== dmlk RXhjZXB0aW9u cGVudA== IG9yZ2FuaXppbmc= IGVuY291bnRlcnM= IFRPRA== IGpld2Vs U2F2ZQ== IENocmlzdGll IGhlYXRpbmc= IGxhenk= IENQ IGNvdXNpbg== Q29uZmln IHJlZ2VuZXI= IG5lYXJlc3Q= IGFjaGlldmluZw== RU5T dGhyb3c= IFJpY2htb25k YW50bGU= MjAwMg== IGFudGVu YmlyZA== MTMz IG5hcmM= cmFpbnQ= dW5ueQ== IEhpc3Bhbmlj b3VybmFtZW50cw== IHByb3BoZQ== IFRoYWlsYW5k IFRp IGluamVjdGlvbg== IGluaGVyaXQ= cmF2aXM= IG1lZGk= IHdob2V2ZXI= IERFQlVH R1A= IEh1ZA== Q2FyZA== cHJvbQ== IHBvcg== IG92ZXJoZWFk TGF3 IHZpb2xhdGU= IGhlYXRlZA== IGRlc2NyaXB0aW9ucw== IGFjaGlldmVtZW50cw== IEJlZXI= IFF1YW50 V2Fz IGVpZ2h0aA== IEl2 IHNwZWNpYWxpemVk VVBEQVRF IERlbHRh UG9w SnVs IEFzaw== b3BoeQ== IG5ld3NsZXR0ZXJz IFRvb2w= IGdhcmQ= IENvbmZlZGVy IEdNVA== IEFiYm90dA== IGltbXVuaXR5 IFZN SXNsYW0= IGltcGxpY2l0 d2Q= IDE5NDQ= cmF2aXR5 b21ldHJpYw== IHN1cnZpdmluZw== dXJhaQ== IFByaXNvbg== IHJ1c3Q= IFNrZXRjaA== IGJlZXM= IFRoZW9yeQ== IG1lcml0 VGV4 Y2hhdA== IG1pbQ== IHBhc3Rl IEtvY2g= IGlnbm9yYW5jZQ== IFNob290 IGJhc2VtZW50 VW5pdGVk IEFkdmlz aGVpZ2h0 IGZvc3Rlcg== IGRldGFpbg== aW5mb3JtYXRpb24= IG5ldXJhbA== Jzs= IHByb3Zlcw== YWxsZXJ5 IGludml0YXRpb24= dW1iZXJz IGNhdHRsZQ== IGJpY3ljbGU= emk= IGNvbnN1bHRhbnQ= IGFwb2xvZ3k= IFRpZ2Vy IDEyMw== OTk5 IGluZGl2aWR1YWxseQ== cnQ= aWdpb24= IEJyYXppbGlhbg== IGRpc3R1cmI= IGVudHJlcHJlbmV1cnM= IGZvcmVzdHM= Y2VycHQ= cGxhdGVz cGhlcg== Y2xpcHNl IHR3aXR0ZXI= IGFjaWRz b2dyYXBoaWNhbA== aHVt IEJhbGQ= aWZ1bGx5 IGNvbXBpbGVy IERB IGRvbm9y YXNp IHRyaWJhbA== bGFzaA== IENvbmZpZw== IGFwcGxpY2FudHM= IHNhbGFyaWVz MTM1 UHV0aW4= IEZvY3Vz aXJz IG1pc2NvbmR1Y3Q= IEhheg== IGVhdGVu TW9iaWxl TXVzbGlt IE1hcmN1cw== dmlvbA== IGZhdm9yYWJsZQ== IHN0dWI= YWRpbg== IEhvYg== IGZhaXRoZnVs IGVsZWN0cm9uaWNz IHZhY3V1bQ== d2FpdA== YmFja2Vk ZWNvbm9taWM= ZGlzdA== IHRlbnVyZQ== IHNpbmNlcmU= IFRvZ2V0aGVy IFdhdmU= IHByb2dyZXNzaW9u IGRlbnlpbmc= IGRpc3RyZXNz YnJhc2th dGhpcmQ= IG1peGluZw== IGNvbG9uaWFs IHByaXZhdGVseQ== IHVucmVzdA== YXRlcm5pdHk= IHByZW1pc2Vz YW50aQ== Z3JlZ2F0aW9u IGxpY2VuY2U= IEhpbmQ= IFNhbXVlbA== IGNvbnZpbmNpbmc= IEFjZQ== IFJ1c3Q= IE5ldGFueWFodQ== IGhhbmRsZXM= IFBhdGNo b3JpZW50ZWQ= YWhv IEdvbno= IGhhY2tlcnM= Y2xhaW1lcg== IGN1c3RvbXM= IEdyYW4= ZmlnaHRlcnM= IGx1Yw== IG1hbnVzY3JpcHQ= YXJlbnRob29k IGRldmls IHdhcnJpb3Jz IG9mZmVuZGVycw== V2lsbGlhbQ== IGhvbGlkYXlz IG5pZ2h0bWFyZQ== IGxldmVy aWZmZXJlbnQ= U3RhdA== IGV4aGliaXRpb24= cHV0ZWQ= IFB1cmU= IGFscGhh IGVudGh1c2lhc20= IFJlcHJlc2VudGF0aXZlcw== RUFS IFR5cA== IHdoZWF0 IEFsZg== IGNvcnJlY3Rpb24= IGV2YW5nZWw= QVRU TWlzcw== IHNvdXA= IGltcGxpZWQ= cGFyYW0= IHNleHk= IEx1eA== IHJlcHVibGlj cGF0Y2g= YWJsaXNo IGljb25z IGZhdGhlcnM= IEdFVA== IENhcmli IHJlZ3VsYXRlZA== IENvaGVu IEJvYmJ5 IG5lcg== IGJlbnQ= dmVudG9yeQ== IEFsb25n IEVTVA== IFdhbGxhY2U= IG11cmRlcnM= cmlzZQ== a2VsbA== IENvbW1vbndlYWx0aA== IG5hc3R5 ZXRh IE1JVA== IGFkbWluaXN0ZXJlZA== IGdlbnVpbmVseQ== RWRpdG9y bmljaw== IGh5ZHJv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IEJsZQ== IGZpbmVz IGdvcmdl YXVzaWJsZQ== cmg= IGFwcGxl bWVudGlvbmVk IHJvcGU= b3R5cA== SFI= IGRpc2FwcG9pbnRpbmc= IGNhZ2U= bmlr IGRvdWJ0cw== IEZSRUU= cHJpbnRz IE1VU1Q= IHZlbmRvcnM= IElucXU= IGxpYmVyYWxz IGNvbnRyYWN0b3I= IHVwc2lkZQ== Y2hpbGRyZW4= IHRyaWNreQ== IHJlZ3VsYXRvcnM= Y2hhcmdlZA== bGl0ZXI= ICoqKg== IHJlYmVsbA== bGFuZw== IGxvY2Fscw== IHBoeXNpY2lhbnM= IGhleQ== YXJzZQ== dG0= IExleA== IGJlaGF2aW9yYWw= c3VjY2Vzc2Z1bA== Rlg= IGJyaWNr b3ZpYw== IGNvbmZvcm0= IHJldmlld2luZw== IGluc2lnaHRz IGJpb2xvZ3k= IFJlbW92ZQ== IEV4dHJh IGNvbW1pdHRpbmc= aW5kdWNlZA== aWdudHk= aWdt IGF0b21pYw== Q29tbW9u IEVN IFBlcmU= IEl0ZW1z ZWg= IHByZXNlcnZlZA== IEhvb2Q= IHByaXNvbmVy IGJhbmtydXB0Y3k= IGdyZW4= dXNoZXM= IGV4cGxvaXRhdGlvbg== IHNpZ25hdHVyZXM= IGZpbmFu XSwi IE1S IG1lZw== cmVtbGlu IG11c2ljaWFucw== IHNlbGVjdGluZw== IGV4YW1pbmluZw== SU5L bGF0ZWQ= SGk= IGFydGlj IHBldHM= IGltcGFpcg== IE1BTg== IHRhYmxldHM= aW5jbHVkZQ== UmFuZ2U= IGNhdXQ= IGxvZ3M= IG1vdW50aW5n IHVuYXdhcmU= IGR5bmFtaWNz IFBhbGVzdGluZQ== IFF1YXJ0ZXI= IFB1cnBsZQ== IG1h IEltcG9ydA== IGNvbGxlY3Rpb25z Y2lhdGlvbg== IHN1Y2Nlc3Nvcg== IGNsb25l IGFpbWluZw== IHBvc3Nlc3NlZA== IHN0aWNraW5n IHNoYWtpbmc= IGxvY2F0ZQ== IEhvY2tleQ== VHVybg== MTcw IGZpZnRlZW4= IEhhcnJpc29u IGNvbnRpbnVvdXNseQ== IFRD IFZhbGVudA== IFJlc2N1ZQ== IGJ5cGFzcw== YW1vdW50 IG1hc3Q= IHByb3RlY3Rz IGFydGlzdGlj IHNvbWV0aW1l IHNob2U= IHNob3V0ZWQ= aWZpY2FudA== ZXRpdGl2ZQ== IFJlZ2lzdGVy IEppbg== IGNvbmNlbnRyYXRlZA== bGluZ3Rvbg== b25pZXM= IGdlbmVyYXRvcg== eXJpbQ== IEFybWVu IGNsZWFyaW5n aWRv IFRX YWxwaA== IGxhZGllcw== SGFyZA== IGRpYWxvZw== IGlucHV0cw== 5pw= IHBvc2Vz IHNsb3Rz IFByZW1pdW0= IGxlYWtz IGJvc3Nlcw== IDExMw== Y291cnNl QWNj IE5ld3Rvbg== IEF1c3RyaWE= IE1hZ2U= IHRlYWNoZXM= YWJhZA== IHdlYXJz IGN5bA== IGN1cnNl IFNhbGVz IFdpbmdz IHBzeQ== IGdhcHM= IEljZWxhbmQ= IFBpbnRlcmVzdA== IGxhbmRsb3Jk IGRlZmluaXRpb25z IEtlcg== IHN1ZmZpY2llbnRseQ== IFBlbmNl IEFyY2hpdGVjdA== IHN1cnBhc3M= IDExNA== IHN1cGVyaGVybw== IERpc2Vhc2U= IHByaWVzdHM= IEN1bHR1cmU= IGRlZmluaXRpdmU= IHNlY3JldGx5 IERhbmNl aW5zdGFsbA== Y2hpZWY= IEplc3NpY2E= V291bGQ= VXBkYXRlZA== IGxvY2tlcg== IEtheQ== IG1lbW9yaWFs 6KY= ZmF0 IGRpc2d1 IGZsYXZvcnM= IEJhc2ViYWxs IFJlc2lzdGFuY2U= IGtpY2tz IGVudg== IHRlZW5hZ2Vycw== RGFyaw== IENBUg== IGhhbHQ= IExH IEdhYnJpZWw= IGZldmVy IHNhdHVy IG1hbGw= IGFmZmlsaWF0ZQ== IFNsZWVw IFNwZWNpZmlj IFZlbA== IGphcg== IFNhY3JlZA== IEVkd2FyZHM= IEFDTA== IHJldGFpbmVk IEdpYW50 IGxpbWl0YXRpb24= aW5jZXM= IHJlZnVzYWw= IFRhbGU= IEJ1dGxlcg== IGFjY2lkZW50cw== IENTUw== IGltcG9ydGVk IENvcHk= zrE= RVJU emVs IGRpdmlzaW9ucw== aG90cw== IEFsYg== IERT TG9hZGVy V2FzaGluZ3Rvbg== YXRpc2Y= IENyZWF0aXZl XC4= IEF1dG9t cmVkaWN0 IHJlY2VwdG9y IENhcmxvcw== TWV0aG9k b2th IG1hbGljaW91cw== IHN0ZXBwaW5n LFs= IERhZA== IGF0dHJhY3Rpb24= IEVmZmVjdHM= IFBpcmF0ZQ== IENlcg== IEluZHVzdHJ5 IFJ1ZA== IGNoYXJ0ZXI= IGRpbmluZw== IGluc2lzdHM= IGNvbmZpZ3VyZQ== ICgj IFNpbXBsZQ== IFNjcm9sbA== VVRD MTc1 IEtvbg== IG1hcmtldHBsYWNl IOOC IHJlZnJlcw== IGdhdGVz ZXJyZWQ= IFBvZA== IGJlaGF2ZQ== RnJhbms= bm9kZQ== IGVuZG9yc2Vk aGV0dA== YXNpdmU= IEhvbWVsYW5k IHJpZGVz IExlYXZl ZXJuZXNz IGZsb29kaW5n QUZQ IHJpc2Vu IGNvbnRpbnVhbGx5 IHVuYW5pbQ== IENvbnRyYWN0 IFBhcw== IGd1aWRlZA== IENoaWxl YmQ= IHN1Y2M= cHRpYw== IGNvbW1pdHRlZXM= IEx1dGhlcg== IEFueW9uZQ== IHNhYg== MTI0 IHBpeGVs IEJhaw== IFRhZw== IEJlbm5ldHQ= RW50ZXI= c21hbGw= IFByZXNpZGVudGlhbA== IHB1bA== IGNvbnRyYWNl YXJjaGl2ZQ== IGNvYXN0YWw= IEtpZHM= MTky 4oCy aWNreQ== SU5HVE9O IHdvbGY= IFN0YWxpbg== VHVy aWRnZXQ= YW1hcw== IFVubGVzcw== IHNwb25zb3I= IG1vcnBo IENob29zZQ== IHJ1bm5lcg== IHVuYmVs IG11ZA== IE1hbmE= IGR1YmJlZA== IGdvZGQ= dXJlcnM= d2luZG93 IHJlbGllZA== IGNlbGVicmF0aW5n b3Nj IDEzNQ== IGxvYmJ5aW5n IGluY29tcGxldGU= IHJlc3RyaWN0aW9u IGluY2Fw aXR1cw== IGV4cGVjdGF0aW9u IEFwb2xsbw== IGludGVucw== IHN5bmM= R0g= IG1hbmlwdWxhdGlvbg== Qlk= IHNwZWFy IGJyZWFzdHM= IHZvbGNhbg== aWxpYQ== TWF0ZXJpYWw= IGZvcm1hdHM= IEJhc3Q= IHBhcmxpYW1lbnRhcnk= IHNuYWtl IHNlcnZhbnRz IFRydWRlYXU= IEdyaW0= IEFyYWJpYw== IFNDUA== IEJveXM= c3RhdGlvbg== IHByb3NwZWN0aXZl b3JkZQ== aW5pdGlhbGl6ZWQ= IGJvcmVk QUJMRQ== IGFjY2Vzc2Vk IHRheGk= IFNoZWxs YWlkZW4= dXJzZWQ= aW5hdGVz IEluc3VyYW5jZQ== IFBldGU= U2VwdGVtYmVy NjUw IGFkdmVudHVyZXM= IENvdmVy IHRyaWJ1dGU= IHNrZXRjaA== IGVtcG93ZXI= INg= IEdsZW5u IERhdw== PVwi IFBvbGl0aWNz IGd1aWRlcw== IGRpb3hpZGU= IEdvcmU= IEJyaWdodA== IFNpZXJyYQ== IHZhbHVlZA== Y29uZA== IHBvaW50ZXI= U2VsZWN0 IHJpc2t5 IGFic29yYg== aW1hZ2Vz IHJlZnVzZXM= IGJvbnVzZXM= X19f IGhpbGFy IEZlYXR1cmVz MjIw IENvbGxlY3Rvcg== Rm9vdA== IDE5NjQ= Y3VsdXM= IGRhd24= IHdvcmtvdXQ= IExP IHBoaWxvc29waGljYWw= IFNhbmR5 IFlvdXRo IGxpYWJsZQ== QWY= Ymx1ZQ== IG92ZXJ0dXJu bGVzc25lc3M= IFRyaWJ1bmU= IEluZw== IGZhY3Rvcmllcw== IGNhdGNoZXM= IHByb25l IG1hdHJpeA== IGxvZ2lu IGluYWNj IGV4ZXJ0 c3lz IG5lZWRsZQ== IFF1cg== IG5vdGlmaWVk b3VsZGVy dHg= IHJlbWluZHM= IHB1Ymxpc2hlcnM= IG5vcnQ= IGdpdA== IGZsaWVz IEVtaWx5 IGZsb3dpbmc= IEFsaWVu IFN0cmF0ZWc= IGhhcmRlc3Q= IG1vZGlmaWNhdGlvbg== QVBJ IE1Z IGNyYXNoZXM= c3RhaXJz bnVtYmVy IHVyZ2luZw== Y2hhbm5lbA== IEZhbGNvbg== IGluaGFiaXRhbnRz IHRlcnJpZnlpbmc= IHV0aWxpemU= IGJhbm5lcg== IGNpZ2FyZXR0ZXM= IHNlbnNlcw== IEhvbG1lcw== IHByYWN0aXRpb24= IFBoaWxsaXBz b3R0bw== IGNvbXBpbGU= TW9kZWw= IEtv IFtd QW1lcmljYW5z IFRlcm1z IG1lZGljYXRpb25z IEFuYQ== IGZ1bmRhbWVudGFsbHk= IE5vdGljZQ== IHdlYWtlcg== IDAwMDA= IGdhcmxpYw== IG91dGJyZWFr IGVjb25vbWlzdA== IEJpcnRo IG9ic3RhY2xlcw== YXJjZXI= IE9ydGhvZG94 IHBsYWNlYm8= IENyZXc= YXNwYmVycnk= IEFuZ2Vscw== IGRpc2NoYXJnZQ== IGRlc3RydWN0aXZl MTE3 IFJpc2luZw== IGRhaXJ5 bGF0ZQ== IGNvbGxpc2lvbg== IFRpZ2Vycw== ZWFub3I= b2N1bWVudGVk IEludmFsaWQ= IGRvbnQ= IExpdGVy IFZh IGh5ZHJvZ2Vu IHZhcmlhbnRz IEJyb3ducw== IDE5NjU= IGluZGlnZW5vdXM= IHRyYWRlcw== IHJlbWFpbmRlcg== IHN3ZXB0 IEltcGFjdA== IHJlZGlzdA== IHVuaW50 Z3JhZHVhdGU= 44OV IFdJTEw= 44Gu5w== IENyaXRpY2Fs IGZpc2hlcg== IHZpY2lvdXM= IHJldmVyc2Vk WWVhcg== IFNveA== IHNob290aW5ncw== IGZpbG1pbmc= IHRvdWNoZG93bnM= YWlyZXM= bWVs IGdyYW5kZmF0aGVy IGFmZmVjdGlvbg== aW5nbGU= IG92ZXJseQ== QWRkaXRpb25hbA== IHN1cHJlbWU= IEdyYWQ= IHNwb3J0aW5n IG1lcmN5 IEJyb29rcw== b3VudHk= IHBlcmZvcm1z IHRpZ2h0bHk= IGRlbW9ucw== IGtpbGxpbmdz IGZhY3Rpb24= IE5vdmE= YXV0cw== IHVuZG91YnRlZGx5 YXJpbg== IHVuZGVyd2F5 cmFr IGxpdg== IFJlZ2lvbg== IGJyaWVmaW5n c2Vycw== Y2xvdWQ= IE1paw== dXNw IHByZWRpY3Rpb24= YXpvcg== IHBvcnRhYmxl IEdhbmQ= IHByZXNlbnRpbmc= IDEwODA= wrs= dXNoaQ== IFNwYXJr dGhlcmV1bQ== IGp1c3RpZmljYXRpb24= IE55 IGNvbnRyYWN0b3Jz bWluZ2hhbQ== IFN0eWxl 5YU= IENocm9uaWNsZXM= IFBpY3R1cmU= IHByb3Zpbmc= IHdpdmVz c2V0dA== IG1vbGVjdWxlcw== IEZhaXJ5 IGNvbnNpc3Rpbmc= IHBpZXI= YWxvbmU= aW5pdGlvbg== IG51Y2xl anNvbg== IGdvdHRh IG1vYmls IHZlcmJhbA== YXJpdW0= IG1vbnVtZW50 dWNrZWQ= IDI1Ng== VGVjaA== bWluZWNyYWZ0 IFRyYWNr IHRpbGU= IGNvbXBhdGliaWxpdHk= YXNpcw== IHNhZGQ= IGluc3RydWN0ZWQ= IE11ZWxsZXI= IGxldGhhbA== IGhvcm1vbmU= IG9yY2hl ZWxzZQ== IHNrZWxldA== IGVudGVydGFpbmluZw== IG1pbmltaXpl YWdhaW4= IHVuZGVyZ28= IGNvbnN0cmFpbnRz IGNpZ2FyZXR0ZQ== IElzbGFtaXN0 IHRyYXZlbHM= IFBhbnRoZXJz bGluZ3M= Q2FyZQ== IGxhd3N1aXRz dXJhcw== IGNyeXN0 IGxvd2VyZWQ= IGFlcmlhbA== IGNvbWJpbmF0aW9ucw== IGhhdW4= IGNoYQ== IHZpbmU= IHF1YW50aXRpZXM= IGxpbmtpbmc= YmFuaw== IHNveQ== QmlsbA== IEFuZ2VsYQ== IHJlY2lwaWVudA== IFByb3Rlc3Q= IHNvY2tldA== IHNvbGlkYXJpdHk= IOKG bWlsbA== IHZhcmllcw== IFBha2lzdGFuaQ== RHJhZ29u IHVuZQ== IGhvcml6b24= wqDCoMKgwqDCoMKgwqDCoA== IHByb3ZpbmNlcw== IGZyYW5rbHk= IGVuYWN0ZWQ= bm90ZXM= Wyc= IDE5Mg== b2NyYWN5 IGVuZG9yc2VtZW50 IG92ZXJ0aW1l VHJ1ZQ== TGFi bGljdGVk IEROQw== IGJlYXRz IEphbWll MTUy IElOVA== Q29udGFjdA== IGFjY291bnRlZA== aGFzaA== IFBhY2tlcnM= cGlyZXM= IGxlc2JpYW4= IGFtZW5kbWVudHM= IGhvcGVmdWw= IEZpbmxhbmQ= IHNwb3RsaWdodA== IGNvbmZpZ3VyZWQ= IHRyb3VibGVk IGdhemU= IENhbGdhcnk= IHJlbGlhYmlsaXR5 IGluc3VyZw== c3dlcg== YnV5 IFNraW4= IHBpeGVscw== IGhhbmRndW4= IHBhcmFz IGNhdGVnb3I= IEVM IFJleA== SW5kZWVk IGtpbmRh IGNvbmp1bmN0aW9u IEJyeWFu IE1hbnVmYWN0 eWFuZw== UGx1cw== U1FM aXNobWVudA== IGRvbWluYXRl IG5haWw= IG9hdGg= IGVydXB0 IEZpbmU= aXRiYXJ0 IENoaXA= IEFiZA== IE5hbQ== IGJ1eWVy IGRpc3NlbnQ= TGVha3M= Q29udGlu IHJpZGVy IFNvbWVvbmU= IGlsbHVzaW9u Y2lu IEJvZWluZw== IGluYWRlcXU= b3ZhdGlvbg== aWFudHM= IHJlYnVpbGQ= NDUw IERlc3Rpbnk= U1c= IFRpbGw= SGl0 aWF6 IEJhbmds YWNoZXJz IFJlZm9ybQ== IHNlZ21lbnRz IHN5c3RlbWF0aWM= ZGM= IENvbnNlcnZhdGl2ZXM= IHBvcnRhbA== aG9y IERyYWdvbmJvdW5k IGRyYWdnZWQ= b21v IHRoZWU= YWR2ZXJ0 IFJlcG9ydHM= IEV0 IGJhcnJlbHM= QXVndXN0 IGNvbXBhcmlzb25z IGhleA== IGFudGhyb3A= Ils= Ym9yb3VnaA== YWJp IHBpY3R1cmVk cGxheWluZw== IEFkZHJlc3M= IE1pcnJvcg== U21pdGg= IHRpcmVz IE5QUg== QUFBQQ== IGNsYXNzaWZpY2F0aW9u IFRoYW4= IEhhcm0= IFJB IHJlamVjdGlvbg== bWluYXRpb24= IHJhbmdlZA== IEZhbGxz REk= SG9zdA== 44K0 IEV4YW1wbGU= bGlzdGVk dGhpcmRz IHNhZmVndQ== YnJhbmQ= IHByb2JhYmxl Q2FuYWRh SVRJT04= IFFhZWRh IGNoaWNr IGltcG9ydHM= aGl0 bG9j V1c= IGJsZXc= IGFueXRpbWU= IHdob2xlcw== aWtlZA== IGNhbGN1bGF0aW9u Y3JlYXRl IE9yaQ== IHVwZ3JhZGVk IGFwcGFy dXRvcnk= IE1vbA== QnJpdA== IEpvbmc= SU5BTA== IFN0YXJ0aW5n IGRpY2U= dXJ0bGU= IHJlbHlpbmc= Y2xvc3VyZQ== IHByb2ZpdGFibGU= IHNsYXVnaHRlcg== IE1hbnVhbA== Y2FzdGVy ICIk IGZlYXRoZXI= IFNpbXBseQ== aWV2ZXM= IGRldGVyaW9y IFBDSQ== IHN0YW1w IGZsYXdz IHNoYWRl aGFtbWVy IHBhc3Nwb3J0 IGNvbnRpbmc= YW1lbA== IG9ic2VydmVycw== IG5lZ2xlY3Q= IFJC IEJyb3RoZXJob29k IHNrZXB0aWNhbA== ZmFtaWx5 dXNr IGVtb3Rpb25hbGx5 4pk= IEJldGE= YXNvbmFibGU= aWRpdHk= IE11bA== IGtpY2tpbmc= IENhcm0= b2xsYWg= VkVSVElT IEF0aGVu IGxhZGRlcg== IEJ1bGxldA== 5aM= MDAwMQ== IFdpbGRsaWZl IE1hc2s= IE5hbg== UmV2 IHVuYWNjZXB0YWJsZQ== bGVnYWw= IGNyb3dkZWQ= YWdp IENveA== amU= IG1vcmFsaXR5 IGZ1ZWxz IGNhYmxlcw== IG1hbmtpbmQ= IENhcmliYmVhbg== IGFuY2hvcg== IGJ5dGU= IE9mdGVu IE96 IGNyYWZ0ZWQ= IGhpc3Rvcmlhbg== IFd1 IHRvd2Vycw== IENpdGl6ZW5z IGhlbG0= IGNyZWRlbnRpYWxz IHNpbmd1bGFy IEplc3Nl IHRhY2tsZXM= IGNvbnRlbXB0 IGFmb3Jl IFNoYWRvd3M= IG5pbA== IHVyZ2VudA== YXBwbGU= Ymxvb2Q= IHZvbg== IG9mZmxpbmU= IGJyZWF0aGU= IGp1bXBz IGlycmVsZXZhbnQ= b3hpYw== b21hbA== aW1wb3J0YW50 Smlt IGdsb3Zlcw== YXJtaW5n ZGVwdGg= IHRhbGVudHM= b29raWU= IFNC IHBhbG0= dWZmcw== ZXN0YQ== SUdI IGNhbm9u IFZlcml6b24= IFBsZQ== IGNvdXBsZWQ= dmVsdA== IGZ1bmRyYWlzaW5n IEdldHRpbmc= IERMQw== IG1hdGhlbWF0aWNhbA== IEhT IENhcmRpbmFscw== dGVsbGluZw== IHNwb25zb3Jz IM8= IEJ1bGxz b3B0aW9u IHByb3Bvc2U= IG1lbW9yYWJsZQ== IGVtYnJhY2Vk IGRlY2xpbmluZw== SGVhbHRo ZWRh IH07 IHNwYW0= bWlsZQ== IHBpdGNoZXI= IEVpZ2h0 IGNhcmluZw== dXRpYw== cm9sZQ== IGFpcmxpbmU= ZXJuYW5kZXo= IEF0aGxldA== IGNlcnRpZmljYXRpb24= dXhl cmlnZXI= IGVtcGly IHNlbnNhdGlvbg== IGRpc20= IGJvbHQ= IGV2b2x2ZQ== SG91c2U= IGNvbnN1bHRhdGlvbg== IER1dHk= IHRvdWNoZXM= IE5hdGhhbg== IGZhaW50 aGFk Iig= IENvbnN1bWVy IEV4dHJlbWU= IDEyNw== IEhlcm0= IFNhY3JhbWVudA== aXpvcGg= IGFueGlvdXM= dWxvdXNseQ== IHNvY2lhbGx5 IFVUQw== IHNvbHZpbmc= IExldHRlcg== SGlzdG9yeQ== ZWR1Yw== UHJpY2U= KSk7 IHJlbG9hZA== YW1pYw== IHBvcms= IGRpc2NvdXJzZQ== IHRvdXJuYW1lbnRz YWlybw== IEt1cg== IENvc3Rh IHZpb2xhdGluZw== IGludGVyZmVyZQ== IHJlY3JlYXRpb25hbA== dWZmbGU= IHNwZWVjaGVz IG5lZWRpbmc= IHJlbWVtYmVycw== IGNyZWRpdGVk bmlh Zm9jdXNlZA== YW1lcmE= IGJydQ== dW1icw== IEN1YmFu IHByZWNlZGluZw== IG5vbnNlbnNl YWNpYWw= IHNtYXJ0cGhvbmVz IFN0b3JpZXM= U3BvcnRz IEVtZXJnZW5jeQ== b3VuY2luZw== ZWZpbmVk IGJlcg== IGNvbnN1bHRpbmc= IG1hc3RlcnM= aGVhc3Rlcm4= LiJb IFJ1bm5pbmc= IHN1c2NlcHQ= IEZlbmc= QW1lcmljYQ== cHJpc2Vz c3RpdGlhbA== IFdlZWtseQ== IEdyZWF0ZXI= bW9kdWxlcw== aWZ0ZXI= R3JhcGhpY3M= dWxlcg== IHdob2xseQ== IHN1cHByZXNz IGNvbmNlYWxlZA== IGhhcHBpbHk= IGFjY2VwdHM= IEVuam95 IHJpdmVycw== IEV4Y2VwdA== MjI1 IE5IUw== IE1jQ29ubmVsbA== IHB1c3N5 ZmVycmVk dXRhYmxl IGF0dGFpbg== ID49 IGRlcG9zaXRz cm9waGlj IG5vdG9yaW91cw== IFNoYXc= aWxpdGF0aW9u IGVwaWRlbWlj YWxsaWM= IHNtYWxsZXN0 b3ZpY2g= IGFjY2Vzc29yaWVz cGVydGllcw== IHN1cnBsdXM= IE1lY2g= IGFtYmln IEltbWlncmF0aW9u IGNoaW0= ZXZhbA== IHByYWN0aWNpbmc= IE15c3Rlcnk= IGRvbWFpbnM= IFNpbGljb24= YXBwcw== IGtpbG9tZXRlcnM= ZWE= IFNtYXNo IHdhcnJhbnR5 IG5vc3Q= c2ls cmV2 Sm9u IER1Ymxpbg== IHRhc3Rlcw== IGJvdXQ= Z3JlYXQ= ZXJyb3I= IHN3aXRjaGVz IEJhcHQ= RE8= b2tp IHNvdXJjZWQ= cHJvZHU= IGF0dGFjaG1lbnQ= IElzc3Vl IFF1ZXN0aW9u Sm9pbg== IGZpdHRlZA== IHVubGF3ZnVs Xl4= ZXJlaw== IGF1dGhlbnRpY2F0aW9u IHN0b2xl IGFjY291bnRhYmlsaXR5 bGFiZWw= U2VhcmNo IGFsYmVpdA== YXRpY2Fu ZnVuZGVk IEFkZGluZw== IElR IHN1Ym1hcg== bGl0 YXF1ZQ== IExlYXJuaW5n IGludGVnZXI= TWFzdGVy IENocm9t IHByZW1pZXI= T3A= IExpdQ== IGJsZXNzZWQ= IEdsb2Jl IFJlc3BvbnNl IGxlZ2l0aW0= IE1lcmtlbA== IGRpc3Bvc2Fs wrQ= IGdhdWdl cGVhdA== IGluZHVjZWQ= IHF1ZXN0aW9uYWJsZQ== YXJ0aHk= IFZpdA== IEZlZWQ= VW50aWw= VXQ= d29ydGh5 Ulk= IEhlcmFsZA== IEhhbW1lcg== IG1lZGFs IFJpdmVycw== IEhhY2s= IGNsYXJpZnk= IHRyYWNrZWQ= IGF1dG9ub21vdXM= IHRlbmFudA== IFFhdGFy ZXJpZQ== IGdyaW0= IE1vbml0b3I= IHJlc2lzdGFudA== IFNwZWM= IFdlbGxz TkFT MTQ4 IG1pbmVycw== aW90aWNz IG1pc3Nlcw== MTE2 Z2lhbg== Z2l0 IEV5ZXM= cHJlcw== IGdyYWR1YXRlZA== IGFuZ2Vs IHN5bmNocm9u IGVmZmljaWVudGx5 IHRyYW5zbWl0dGVk SGFycnk= IGdsb2JhbGx5 RU5DRQ== IE1vbnRhbmE= cmFnZWQ= IFByZXZlbnRpb24= IHBpc3M= IExs IHNoZWxm IEJKUA== IFRlc3RhbWVudA== IExhdGU= aWtlcg== IEhhcHA= IEp1bGlhbg== aGFsbA== IHNwb250 IHNodXRkb3du IGluY29uc2lzdGVudA== IHN1YnNjcmliZXJz IHNrZWxldG9u IE5lYnJhc2th IGluc3BpcmU= IFZvaWQ= RmVlZA== IGFuZ2xlcw== IFNwcmluZ3M= IGJlbmNobWFyaw== IHZhY2NpbmVz aXpvcGhyZW4= c2V4dWFs dWZmZWQ= IHNoaW5l IEthdGg= IGdlc3R1cmU= aW5lYQ== IHJpcA== IG9wcHJlc3Npb24= IGNvbnNjaWVuY2U= YnQ= IEx1bQ== IGluY2lkZW5jZQ== IEZh d3I= IG1pbmVyYWw= IFNwdXJz YWxreQ== IHRodW5kZXI= IG9waW8= QmVpbmc= IFBhbG0= IHdhc3RlZA== IGxi aWFyaWVz IEluaXRpYXRpdmU= IGN1cnJpYw== IG1hcmtlcg== IE1jTA== IGV4dGVuc2lvbnM= IFB2 IEFybXM= IG9mZmVyaW5ncw== IGRlZmVuc2Vz IHZlbmRvcg== IGNvbnRyYWRpY3Q= IENvbGlu IHJlZGRpdA== IHBlcmlwaGVy MTIy IHNpbnM= RWRpdA== SUNU U29mdA== IFNoYWg= IGFkbWluaXN0cmF0b3I= IFRyaXA= IHBvcm5vZ3JhcGh5 IHR1aXRpb24= aW5lbmNl IFByb2dyZXNz IGNhdGFsb2c= IHN1aXRl IGhpa2U= IHJlcHJvZHVjdGl2ZQ== ZW5naW5l IGRyb3VnaHQ= IE5vYWg= IDIzMA== IGR1ZGU= IHJlbGF4ZWQ= IHBhcnRpdGlvbg== IHBhcnRpY2lwYW50 IHRlbGVzYw== IGZlYXM= IEZG b3duZXI= IHN3ZWVwaW5n IGxlbnNlcw== IG1hdGNodXA= IFJlcGw= b3VybmFscw== IGNyZWRpYmxl IGdyYW5kbW90aGVy IHRoZXJtYWw= IHN1YnNjcmliaW5n IGlkZW50aXRpZXM= Y29sbQ== VUNU IHJlbHVjdGFudA== dXNlcnM= IENvcnQ= IGFzc2lzdGVk T1NT QVRJT05T SVNI IHBoYXJtYWNldXRpY2Fs aWNhYmxl YWRpYW4= IFNvbmlj IEZ1cnk= IE1vbmc= QUg= IFBzeWNob2xvZ3k= IHBob3NwaA== IHRyZWF0cw== rZQ= IHN0ZWFkaWx5 IEhlbGxv IHJlbGF0ZXM= IGNsdWU= RXhwbA== YXV0aA== IHJldmlzaW9u IGVsZA== b3Npb24= IGJyb24= MTQ0 cmlrZXM= IG1pbmVz IGJsYW5rZXQ= IEZhaWw= ZWxlZA== IEltYWdpbmU= IFBsYW5uZWQ= YWlj UmVxdWVzdA== TWFk IEhvcnNl IEVhZ2xl IGNhcGFj MTU3 IGxpbmc= IE5pY2U= IFBhcmVudGhvb2Q= bWluc3Rlcg== b2dz ZW5zaXRpdmU= Tm90aGluZw== IGNhcm4= Rmlu IFBF IHJpZmxlcw== IExQ U2FuZA== IGd1aUFjdGl2ZQ== IHRvdXJpc3Q= Q05O IHVudmVpbGVk IHByZWRlY2Vzc29y fXs= dWJlcg== IG9mZnNob3Jl IG9wdGljYWw= IFJvdA== IFBlYXJs ZXRvbg== IHN0YXJlZA== IGZhcnRoZXI= YXRpbGl0eQ== Y29udGlu IEd5 IEZvc3Rlcg== IENvYw== cmllbnRz IGRlc2lnbmluZw== IEVjb25vbXk= T05H V29tZW4= IE5hbmN5 ZXJ2ZXI= IG1hc2N1bA== IGNhc3VhbHRpZXM= IDIyNQ== IFN1bGxpdmFu IENob2ljZQ== IGFzdGVy d3M= IGhvdGVscw== IGNvbnNpZGVyYXRpb25z IGNvdWNo IFN0cmlw IEdu IG1hbmlwdWxhdGU= bGllZA== IHN5bnRoZXRpYw== IGFzc2F1bHRlZA== IG9mZmVuc2Vz IERyYWtl IGltcGU= T2N0b2Jlcg== IEhlcml0YWdl aGw= IEJsYWly VW5saWtl IGdyaWVm IDQ1MA== IG9wdGVk IHJlc2lnbmF0aW9u aWxv IHZlcnNl IFRvbWI= IHVwdA== IGFpcmVk IEhvb2s= IE1MQg== IGFzc3VtZXM= b3V0ZWQ= IFZlcnM= IGluZmVyaW9y IGJ1bmRsZQ== IEROUw== b2dyYXBoZXI= IG11bHRpcA== IFNvdWxz IGlsbHVzdHJhdGVk IHRhY3RpYw== IGRyZXNzaW5n IGR1bw== Q29uZg== IHJlbGVudA== IGNhbnQ= IHNjYXJjZQ== IGNhbmR5 IENG IGFmZmlsaWF0ZWQ= IHNwcmludA== eWxhbg== IEdhcmNpYQ== IGp1bms= UHJpbnQ= ZXhlYw== Q3JpdA== IHBvcnRyYWl0 aXJpZXM= IE9GRg== IGRpc3B1dGVz V1I= TG92ZQ== 44GE IFJleW4= IGhpcHA= b3BhdGg= IGZsb29ycw== IEZlZWw= IHdvcnJpZXM= IHNldHRsZW1lbnRz IFBvcw== IG1vc3F1ZQ== IGZpbmFscw== IGNydXNoZWQ= IFByb2JhYmx5 IEJvdA== IE1hbnM= IFBlcmlvZA== IHNvdmVyZWlnbnR5 IHNlbGxlcg== IGFwb3N0 IGFtYXRldXI= IGRvcm0= IGNvbnN1bWluZw== IGFybW91cg== IFJvb3Nl IGludGVuc2l2ZQ== IGVsaW1pbmF0aW5n IFN1bm5p IEFsZXBwbw== amlu IGFkdmlzZQ== cGFs IEhhbG8= IGRlc2NlbnQ= IHNpbXBsZXI= IGJvb3Ro U1RS TGF0ZXI= IENhdmU= PT09 IG1vbA== IGZpc3Q= IHNob3RndW4= c3VwcA== IHJvYmJlcnk= RWZmZWN0 IG9ic2N1cmU= IFByb2Zlc3Npb25hbA== IGVtYmFzc3k= IG1pbGl0YW50 IGluY2FyY2Vy IGdlbmVyYXRlcw== IGxhdW5jaGVz IGFkbWluaXN0cmF0b3Jz IHNoYWZ0 IGNpcmN1bGFy IGZyZXNobWFu IFdlcw== IEpvZWw= IERyZXc= IER1bmNhbg== IEFwcGFyZW50bHk= c2lnaHQ= IEludGVybmFs IEluZGl2aWR1YWw= IEZF IGJvcmU= IE10 IGJyb2FkbHk= IE9wdGlvbnM= b3VudGFpbg== aXBlcw== IFZpZGVvcw== MjA0 IGhpbGxz IHNpbXVsYXRpb24= IGRpc2FwcG9pbnRtZW50 aXRhbg== IExhYm9yYXRvcnk= IHVwd2FyZA== IGJvdW5kYXJ5 IGRhcmtlcg== aGFydA== IGRvbWluYW5jZQ== Q29uZw== IE9yYWNsZQ== IExvcmRz IHNjaG9sYXJzaGlw IFZpbmNlbnQ= ZWRl IFJhaA== IGVuY291cmFnZXM= cm92 IHF1bw== IHByZW1pc2U= IENyaXNpcw== IEhvbG9jYXVzdA== IHJoeXRobQ== IG1ldHJpYw== Y2x1Yg== IHRyYW5zcG9ydGVk IG5vZA== IFBpc3Q= IGFuY2VzdG9ycw== IEZyZWRlcg== dGh1bWJuYWlscw== IENF T05E UGhpbA== dmVuZ2U= IFByb2R1Y3Rz Y2FzdGxl IHF1YWxpZnlpbmc= IEthcmVu VkVSVElTRU1FTlQ= IG1pZ2h0eQ== IGV4cGxhbmF0aW9ucw== IGZpeGluZw== RGk= IGRlY2xhcmluZw== IGFub255bWl0eQ== IGp1dmVu IE5vcmQ= IERvb20= IEFjdHVhbGx5 T2s= cGhpcw== IERlc2VydA== IDExNg== SUs= IEZN IGluY29tZXM= VkVM b2tlcnM= IHBlY3Vs IGxpZ2h0d2VpZ2h0 Z3Vl IGFjY2VudA== IGluY3JlbWVudA== IENoYW4= IGNvbXBsYWluaW5n IEJhZ2hk IG1pZGZpZWxkZXI= IG92ZXJoYXVs UHJvY2Vzcw== IEhvbGxvdw== IFRpdGFucw== U21hbGw= bWFudWVs IFVuaXR5 IEV2ZW50cw== U3R5 IGRpc3Byb3BvcnRpb24= bmVzdHk= ZW5lcw== IENvZA== IGRlbW9uc3RyYXRpb25z IENyaW1zb24= IE9I IGVucm9sbGVk IGNlbA== IEJyZXR0 IGFpZGU= IGhlZWxz IGJyb2FkYmFuZA== IG1hcmtpbmc= IHdpemFyZA== IE5K IENoaWVmcw== IGluZ3JlZGllbnQ= IGR1Zw== IFNodXQ= dXJjaGFzZQ== ZW5kb3I= IGZhcm1lcg== IEdvbGRtYW4= MTI5 MTU1 T3JkZXI= IGxpb24= aWFibHk= IHN0YWlu YXJyYXk= aWxpdGFyeQ== IEZBUQ== IGV4cGxvZGVk IE1jQ2FydGh5 IFR3ZWV0 IEdyZWVucw== ZWtpbmc= bG4= ZW5zZW4= IG1vdG9yY3ljbGU= IHBhcnRpY2xl IGNob2xlc3Rlcm9s QnJvbg== IHN0YWly IG94aWQ= IGRlc2lyYWJsZQ== aWJsZXM= IHRoZW9y Zm9yY2luZw== IHByb21vdGlvbmFs b3Zv Ym9vdA== IEJvbnVz cmF3bGluZw== IHNob3J0YWdl IFBzeQ== IHJlY3J1aXRlZA== IGluZmFudHM= IHRlc3Rvc3Rlcm9uZQ== IGRlZHVjdA== IGRpc3RpbmN0aXZl IGZpcm13YXJl YnVpbHQ= MTQ1 IGV4cGxvcmVk IGZhY3Rpb25z IHZpZGU= IHRhdHRvbw== IGZpbmFuY2lhbGx5 IGZhdGlndWU= IHByb2NlZWRpbmc= Y29uc3RpdHV0aW9uYWw= IG1pc2Vy IGNoYWlycw== Z2dpbmc= aXBwbGU= IGRlbnQ= IGRpc3JlZw== 55Q= c3RhbnQ= bGxv YnBz YWtlbmluZw== IGFibm9ybWFs IEVSQQ== 5aOr IEhCTw== IE1BUg== IGNvbmNlc3M= IHNlcnZhbnQ= IGFzcGly bGF2 IFBhbmVs YW1v IHByZWNpcA== IHJlY29yZGluZ3M= IHByb2NlZWRlZA== IGNvbG9ueQ== IFRhbmc= YWJsbw== IHN0cmlwcGVk TGVmdA== dG9v IHBvdGF0b2Vz IGZpbmVzdA== JSku IGNyYXA= IFphY2g= YWJhc2Vz IEdvdGg= IGJpbGxpb25haXJl d29sZg== IHNhbmN0aW9u U0s= IGxvZ2dlZA== UG8= ZXllZA== dW5hbA== IGNyaWNrZXQ= IGFybWllcw== IHVuY292ZXJlZA== Q2xvdWQ= w7Nu IHJlYm91bmRz IG1lcw== T3Blcg== UGFj IG5hdGlvbmFsbHk= IGluc2VydGVk cGljdA== IGdvdmVybmFuY2U= 0Lg= IHByaXZpbGVnZXM= R0VU IGZhdm9yaXRlcw== aW1pdHk= IGxvdmVy dGhlbQ== ZW1wbA== IGdvcmdlb3Vz QW5u IHNsaXBwZWQ= IHZldG8= Qm9i IHNsaW0= dWNj IEZhbWU= dWRkZW5seQ== IGRlbmllcw== IE1hdXI= IGRpc3RhbmNlcw== IHdhbm5h dGFy IFNFUg== IOKI IGxlbW9u YXRoZXRpYw== IGxpdGVyYWw= IGRpc3Rpbmd1aXNoZWQ= IGFuc3dlcmluZw== R0k= IHJlbGlnaW9ucw== IFBoaWxvcw== IExheQ== IGNvbXBvcw== aXJlbWVudHM= IEtvcw== aW5leg== cm9sbGluZw== IHlvdW5nZXN0 YW5kaXNl IEJvcm4= IGFsdGFy YW1pbmE= IEJvb3Q= dm9j IGRpZ2dpbmc= IHByZXNzdXJlcw== IGxlbg== MjY0 IGFzc2Fzc2luYXRpb24= IEJpcm1pbmdoYW0= IE15dGg= IHNvdmVyZWlnbg== IEFydGlzdA== IFBob3RvZ3JhcGg= IGRlcGljdGVk IGRpc3BlbnM= b3J0aHk= IGFtYnVs aW50ZWc= IENlbGU= IFRpYmV0 IGhpZXJhcmNoeQ== IGN1 IHByZXNlYXNvbg== IFBldGVyc29u IGNvbG91cnM= IHdvcnJ5aW5n IGJhY2tlcnM= IFBhbG1lcg== IM68 IGNvbnRyaWJ1dG9y IGhlYXJpbmdz IHVyaW5l INk= b3VyZ2VvaXM= U2ltaWxhcg== IFppbW1lcg== c29tZXRoaW5n IFVTQw== IHN0cmVuZ3Rocw== IEZJ IGxvZ2dpbmc= QXNrZWQ= IFRoYWk= aW5xdQ== IFdhbHQ= IGNyZXdz aXRpc20= MzAx IHNoYXJwbHk= dW1lZA== IHJlZGlyZWN0 cmF0b3Jz SW5m IFdlYXBvbnM= IHRlYXNw MTk5OQ== TGl2ZQ== IEVzcGVjaWFsbHk= IFN0ZXI= IFZldGVyYW5z IGludHJv b3RoZXJhcHk= IG1hbHdhcmU= IGJyZWVkaW5n IG1vbGVjdWxhcg== IFJvdXRl IENvbW1lbnQ= b2NoZW0= IGFpbg== U2Vhc29u IGxpbmViYWNrZXI= xKs= IEVjb25vbWljcw== ZXNhcg== IExpdmVz IEVtbWE= IGtpbg== IFRlcnJpdA== IHBsYW50ZWQ= b3Rvbg== IEJ1dHRlcg== IFNwb25z UEVS IGR1bmdlb24= IHN5bWJvbGlj IGZpbG1lZA== IGRpZXRz IGNvbmNsdWRlcw== IGNlcnRhaW50eQ== IEZvcm1hdA== IHN0cmFuZ2Vycw== Zm9ybWF0 IFBoYXNl IGNvcGllZA== IG1ldHJlcw== bGRh IFVzZXJz IGRlbGliZXJhdGU= IHdhc2hlZA== IExhbmNl aW1hdGlvbg== IGltcHJvcGVy IEdlbmVzaXM= aWNrcg== IEt1c2g= IHJlYWxpc2U= IGVtYmFycmFzc2luZw== YWxraW5n YnVja3M= IHZlcmlmaWVk IG91dGxpbmU= eWVhcnM= IEluY29tZQ== MjAy IHpvbWJpZXM= RmluYWw= IE1pbGxlbm4= IG1vZGlmaWNhdGlvbnM= IFZpc2lvbg== IE1vc2Vz dmVyYg== aXRlcnJhbmVhbg== IEpldA== IG5hdmFs IEFnZw== IHVybA== IHZpY3Rvcmllcw== IG5vbmV0aGVsZXNz IGluanVzdA== IEZhY3Q= 55o= IGluc3VmZmljaWVudA== cmV2aWV3 ZmFjZWJvb2s= IG5lZ290aWF0aW5n IGd1YXJhbnRlZXM= aW1lbg== dXRlbmJlcmc= IGdhbWJsaW5n IGNvbmdy TG9hZGluZw== IG5ldmVydGhlbGVzcw== IHByZXNpZGVudHM= IEluZHVzdHJpYWw= IDExOA== IHBvdXJlZA== IFRvcnk= IDE3NQ== IDo9 U2NvdHQ= YW5nZXJlZA== VG9r IG9yZ2FuaXplcnM= TWF0 IEdyb3d0aA== IGFkdWw= IGVuc3VyZXM= IDExNw== 6b6N5Q== IG1hc3NhY3Jl IGdyYWRlcw== YmVmb3Jl QURWRVJUSVNFTUVOVA== IFNsb3c= IE1NQQ== 4oCUIg== IFZhdGljYW4= UWFlZGE= IG93ZQ== NjY2Ng== IFNvcnJ5 IEdyYXNz IGJhY2tncm91bmRz IGV4aGF1c3RlZA== IGNsYW4= IGNvbXByb21pc2Vk IEVsZg== IElzYWFj ZW5zb24= SW52ZXN0 SUZB IGludGVycnVwdGVk 44OJ44Op IHR3aXN0ZWQ= IERyYWdvbnM= TW9kZQ== IEtyZW1saW4= IGZlcnRpbA== aGVyZXM= cGhhbg== IE5vZGU= ZmVk IE9yYw== IHVud2lsbGluZw== Q2VudA== IHByaW9yaXQ= IGdyYWR1YXRlcw== IHN1YmplY3RpdmU= IGlzc3Vpbmc= IEx0 IHZpZXdlcg== IHdva2U= VGh1cw== YnJvb2s= IGRlcHJlc3NlZA== IGJyYWNrZXQ= IEdvcg== IEZpZ2h0aW5n IHN0cmlrZXI= UmVwb3J0 IFBvcnR1Z2Fs IG5lbw== d2Vk MTk5 IGZsZWVpbmc= c2hhZG93 aWRlbnRpZmllZA== VVNF U3RlYW0= IHN0cmV0Y2hlZA== IHJldmVsYXRpb25z YXJ0ZWQ= IER3 IGFsaWdubWVudA== ZXN0b24= IEphcmVk U2Vw IGJsb2dz dXBkYXRl Z29t cmlzaw== IGNsYXNo IEhvdXI= IHJ1bnRpbWU= IHVud2FudGVk IHNjYW0= IHJhY2s= IGVubGlnaHQ= b25lc3Q= IEZlcnI= IGNvbnZpY3Rpb25z IHBpYW5v IGNpcmN1bGF0aW9u IFdlbGNvbWU= IGJhY2tsYXNo IFdhZGU= IHJlY2VpdmVycw== b3RpdmU= SmVmZg== IG5ldHdvcmtpbmc= IFByZXA= IEV4cGxvcmVy IGxlY3R1cmU= IHVwbG9hZGVk IE1lYXQ= QkxF IE5hemlz IFN5bmQ= c3R1ZA== cm9vdHM= cmlhbnM= IHBvcnRyYXllZA== ID8/ IEJ1ZGRoYQ== c3Vu Um9iZXJ0 IENvbXBsZXg= IG92ZXJzZWU= IHN0ZWFsdGg= VGl0bGU= IEpvYnM= IEt1bQ== IGFwcHJlY2lhdGlvbg== IE1PRA== IGJhc2ljcw== IGNsaXBz IG51cnNpbmc= IHByb3Bvc2l0aW9u IHJlYWxpc2Vk IE5ZQw== IGFsbG9jYXRlZA== cml1bQ== YXJhbg== IFByb2R1Y3Rpb24= IFZvdGU= IHNtdWdn IGh1bnRlcg== YXplcg== IENoYW5nZXM= IGZsdWN0 eW9u QXJyYXk= IGtpdHM= V2F0ZXI= IHVuY29tbW9u IHJlc3Rpbmc= ZWxscw== d291bGQ= IHB1cnN1ZWQ= IGFzc2VydGlvbg== b21ldG93bg== IE1vc3Vs IFBsYXRmb3Jt aW9sZXQ= IHNoYXJlaG9sZGVycw== IHRyYWlscw== UGF5 IEVuZm9yY2VtZW50 dHlwZXM= IEFub255bW91cw== IHNhdGlzZnlpbmc= aWxvZ3k= ICgn d2F2ZQ== Y2l0eQ== U3RldmU= IGNvbmZyb250YXRpb24= IEVsZA== Q2FwdA== YWhhbg== aHRt IEN0cmw= T05T MjMw aWZh aG9sZGluZw== IGRlbGljYXRl IGphdw== IEdvaW5n b3J1bQ== U2Fs IGR1bGw= IEJldGg= IHByaXNvbnM= IGVnbw== IEVsc2E= YXZvcml0ZQ== IEdhbmc= IE51Y2xlYXI= IHNwaWRlcg== YXRzdQ== IHNhbXBsaW5n IGFic29yYmVk IFBoYXJt aWV0aA== IGJ1Y2tldA== IFJlY29tbQ== T0Y= IEZhY3Rvcnk= QU5DRQ== IGJhY3Rlcg== SGFz IE9ic2Vydg== MTIx IHByZW1pZXJl RGV2ZWxvcA== IGN1cnJlbmNpZXM= Q2FzdA== IGFjY29tcGFueWluZw== IE5hc2h2aWxsZQ== IGZhdHR5 IEJyZW5k IGxvY2tz IGNlbnRlcmVk IFVU YXVnaHM= b3JpZQ== IEFmZm9yZGFibGU= dmFuY2U= REw= ZW1ldA== IHRocm9uZQ== IEJsdWV0b290aA== IG5hbWluZw== aWZ0cw== QURF IGNvcnJlY3RlZA== IHByb21wdGx5 IFNUUg== IGdlbm9tZQ== IGNvcGU= IHZhbGxleQ== IHJvdW5kZWQ= IEtlbmQ= YWxpb24= cGVycw== IHRvdXJpc20= IHN0YXJr dmw= IGJsb3dpbmc= IFNjaGVkdWxl c3Rk IHVuaGFwcHk= IGxpdGlnYXRpb24= Y2VkZXM= IGFuZHJvaWQ= IGludGVncmFs ZXJlcnM= dWRlZA== dGF4 IHJlaXRlcg== IE1vdG9ycw== b2NpYXRlZA== IHdvbmRlcnM= IEFwb3N0 dWNraW5n IFJvb3NldmVsdA== ZnJhbQ== IHlpZWxkcw== IGNvbnN0aXR1dGVz YXdr SW50ZXJlc3Q= IGludGVyaW0= IGJyZWFrdGhyb3VnaA== IENoZXI= IHByb3NlYw== IERq IE1U UmVzcA== IFBU IHNwZXJt ZWRpdA== QlQ= TGludXg= Y291bnRyeQ== bGVhZ3Vl IGRpY2s= IG9jdA== IGluc2VydGluZw== IHNjcmE= IEJyZXdpbmc= IDE5NjY= IHJ1bm5lcnM= IHBsdW4= aWR5 IERpYW4= IGR5c2Z1bmN0aW9u IGV4Y2x1c2lvbg== IGRpc2dy IGluY29ycG9yYXRl IHJlY29uYw== IG5vbWluYXRlZA== IEFyY2hlcg== ZHJhdw== YWNoZWxvcg== IHdyaXRpbmdz IHNoYWxsb3c= IGhhc3Q= IEJNVw== IFJT IHRoaWdo IDE5NjM= IGxhbWI= IGZhdm9yZWQ= YWdsZQ== IGNvb2xlcg== IEhvdXJz IEdV IE9yaWdpbg== IGdsaW1wc2U= LS0tLS0tLS0tLS0tLS0tLS0tLS0= TGlt IGNoZWVr IGplYWxvdXM= LSc= IGhhcm5lc3M= IFBvaXNvbg== IGRpc2FiaWxpdGllcw== bmVhcG9saXM= IG91dGxvb2s= IG5vdGlmeQ== IEluZGlhbmFwb2xpcw== IGFicnVwdA== bnNpYw== IGVuY3J5cHRlZA== IGZvcmZl cmVhdGg= IHJhYmI= IGZvdW5kYXRpb25z IGNvbXBsaW1lbnQ= IEludGVydmlldw== IFN3ZQ== IGFkb2xlc2M= IG1vbml0b3Jz IFNhY3JhbWVudG8= IHRpbWVseQ== IGNvbnRlbXBs IHBvc2l0aW9uZWQ= IHBvc3RlcnM= cGhpZXM= aW92YXNjdWxhcg== dm9pZA== IEZpZnRo IGludmVzdGlnYXRpdmU= T1VO IGludGVncmF0ZQ== IElOQw== aXNoYQ== aWJsaW5ncw== IFJlcXVlc3Q= IFJvZHJpZ3Vleg== IHNsaWRlcw== IERY IGZlbWluaXNt IGRhdGFz IGJlbmQ= aXJ1cw== IE5pZ2VyaWE= Rm94 Q2hhbmdl IGFpcnBsYW5l IExhZGVu IHB1YmxpY2l0eQ== aXh0eQ== IGNvbW1pdG1lbnRz IGFnZ3JlZ2F0ZQ== IGRpc3BsYXlpbmc= IEFycm93 IDEyMg== IHJlc3BlY3Rz YW5kcm9pZA== c2l4 IFNoYQ== IHJlc3RvcmF0aW9u KVw= V1M= b3lz IGlsbHVzdHJhdGU= d2l0aG91dA== MTI2 IOKUgg== IHBpY2t1cA== bmVscw== IC4uLi4= Zm9vZA== IEZlbg== KT8= IHBoZW5vbWVuYQ== IGNvbXBhbmlvbnM= IFdyaXRl IHNwaWxs IGJyaWRnZXM= IFVwZGF0ZWQ= IEZv IGluc2VjdHM= QVNISU5HVE9O IHNjYXJl aWx0cg== IFpoYW5n IHNldmVyaXR5 IGluZHVs MTQ5 IENvZmZlZQ== IG5vcm1z IHB1bHNl IEZU IGhvcnJpZmlj IERlc3Ryb3k= IEpTT04= IG9saXZl IGRpc2N1c3Nlcw== UmVzdA== RWxlY3Q= IFdpbm4= IFN1cnZpdg== IEhhaXQ= U3VyZQ== b3BlZA== IHJvb3RlZA== IFNrZQ== IEJyb256ZQ== IGxvbA== RGVmYXVsdA== IGNvbW1vZGl0eQ== cmVkaXRlZA== IGxpYmVydGFyaWFu IGZvcmJpZGRlbg== IGdyYW4= 4Kg= IGxhZw== ZW56 ZHJpdmU= IG1hdGhlbWF0aWNz IHdpcmVz IGNyaXRpY2FsbHk= IGNhcmJvaHlk IENoYW5jZWxsb3I= IEVkZGll IGJhbm5pbmc= IEZyaQ== IGNvbXBsaWNhdGlvbnM= ZXRyaWM= IEJhbmdsYWRlc2g= IGJhbmR3aWR0aA== U3RvcA== IE9yaWdpbmFsbHk= IGhhbGZ3YXk= eW5hc3R5 c2hpbmU= IHRhbGVz cml0aWVz YXZpZXI= IHNwaW5uaW5n IFdITw== IG5laWdoYm91cmhvb2Q= YmFjaA== IGNvbW1lcmNl IFNsZQ== QlU= IGVudHJlcHJlbmV1cg== IHBlY3VsaWFy IENvbW1lbnRz ZnJl MzIw SUNT IGltYWdlcnk= IENhbm9u IEVsZWN0cm9uaWM= c2hvcnQ= KCg= RGln IGNvbW1lbQ== dWNlZA== IGluY2xpbmVk IFN1bW1vbg== IGNsaWZm IE1lZGl0ZXJyYW5lYW4= IHBvZXRyeQ== IHByb3NwZXJpdHk= IFJlY2U= IHBpbGxz bWVtYmVy IGZpbmFsZQ== dW5j IEdpZw== 5L0= IGxvZA== IGJhY2t3YXJk LSs= IEZvcndhcmQ= IHRocmk= c3VyZQ== IHNvYXA= IEZY UkVT IFNleHVhbA== b3Vsb3M= IGZvb2xpc2g= IHJpZ2h0ZW91cw== IGNvZmY= dGVycm9yaXNt dXN0YWlu b3Rlcg== IGFidXNlcw== bmV4dA== IGFidXNpdmU= IHRoZXJlYWZ0ZXI= IHByb2hpYml0aW9u IFNVUA== IGRpcA== IHJpcHBlZA== IGluaGVyaXRlZA== IGJhdHM= c3RydQ== R1Q= IGZsYXdlZA== cGhhYmV0 IGZvZw== ZG9vcnM= IGltYWdpbmc= IGRpZ2l0cw== IEh1bmdhcnk= IGFycm9n IHRlYWNoaW5ncw== IHByb3RvY29scw== IEJhbmtz 4Lg= cG91bmQ= IEN1cnQ= LiIp Li8= IGV4ZW1wdGlvbg== ZW5kaXg= IE11bGw= IGltcHJvdmVz IEdhbWVy ZGltZW5zaW9uYWw= SWNvbg== IE1hcmdhcmV0 U3RhdHVz ZGF0ZXM= IGludGVuZHM= IGRlcGljdA== IHBhcmtlZA== Sm9l IE1hcmluZXM= Y2hub2xvZ3k= ISku IGp1ZGdlZA== IHdlaWdodHM= UmF5 IGFwYXJ0bWVudHM= aGVzdGVy IHJlaW5mb3JjZQ== IG9mZmVuZGVy b2NjdXA= IHNvcmU= ZXB0 IFBIUA== IEJyb3c= IGF1dGhvcml6YXRpb24= IFJpc2s= IERlbGF3YXJl IFFV IG5vdGlmaWNhdGlvbnM= IHN1bmxpZ2h0 IGV4Y2x1ZGU= ZGF0 IG1lc2g= IFN1ZGFu IGJlbG9uZ2Vk IHN1YndheQ== IG5vb24= IEludGVyaW9y b2xpY3M= IExha2Vycw== IGNvZGluZw== RGlzY2xhaW1lcg== Q2FsaWY= T2xk IGRpc2w= Pz8/Pz8= IGNvbmZpcm1z IHJlY3J1aXRtZW50 IGhvbWljaWRl Q29uc2lkZXI= IEplZmZyZXk= ZnR5 fTs= IG9iamVjdGlvbg== ZG9pbmc= IExlbw== V2FudA== IGdsb3c= IENsYXJrZQ== IE5vcm1hbg== IHZlcmlmaWNhdGlvbg== IHBhY2tldA== IEZvcm11bGE= IHBsYWc= ZXN2aWxsZQ== IHNob3V0aW5n IG92 IFJFQw== IEJ1Yg== IG5pbnRo IGVuZXJn IHZhbGlkaXR5 IHVwcw== amFjaw== IG5laWdoYm9yaW5n IE5lYw== ZXdvcmtz IEhhYg== YXJleg== IHNwaW5l IGV2ZW50dWFs IExlYWRlcnM= IENhcm4= IHByb2JhdGlvbg== IHJvbWFuY2U= bXNn IE1lY2hhbmljYWw= RVJZ Um9jaw== IHBhcnRpc2Fu Tm9kZQ== YXNzZXRz bWluZW50 IGZvcmVpZ25lcnM= IHRlc3RpZnk= IFVzdWFsbHk= bG9yZHM= IEdyZW4= IFBvd2VsbA== QklM IHNy IGFkZGljdA== IHNoZWxscw== IHNpZ2g= IFlhbGU= dGVybml0eQ== IDc1MA== RVU= IFJpZmxl IHBhdHJvbg== ZW1h IEJhbm5vbg== YW5pdHk= IHRyb3BpY2Fs IFZJSQ== Y3Jvc3M= RXZlcnl0aGluZw== IElTTw== IGh1bWJsZQ== YXNzaW5n IEZJRw== IHVwZGF0aW5n eXNvbg== IGNhbGNpdW0= IGNvbXBldGVudA== IHN0ZWVyaW5n UHJvdA== IFNZ IEZpbmFscw== IFJ1Zw== MTU5 MTM3 IEdvbGY= IDEyNg== IGFjY29tbW9kYXRpb24= IEh1Z2hlcw== IGFlc3RoZXRpYw== YXJ0aXNhbg== IFR3aWxpZ2h0 IHByaW5jZQ== IEFncmljdWx0dXJl IERpc2Nv IHByZWNlZGVudA== IHR5cGluZw== YXV0aG9yaXplZA== T3B0aW9u IEF1Yg== bGlzaGVz YWNodA== bWFn UGV0ZXI= IFVGTw== bW9udG9u IExpdGg= IGFyb20= IHNlY3VyaW5n IGNvbmZpbmVk cHJpdmF0ZQ== IHN3b3Jkcw== IG1hcmtlcnM= IG1ldGFib2xpYw== c2VsZWN0 IEN1cnNl IE90 Z3Jlc3NpdmU= IGluY3VtYg== IFNhZ2E= IHByaWNlZA== IGNsZWFyYW5jZQ== Q29udGVudA== IGRyaWxsaW5n IG5vdGljZXM= IGJvdXJnZW9pcw== IHZlc3Q= IGNvb2tpZQ== IEd1YXJkaWFucw== cnlz aW55bA== IDEyNA== IHBsYXVzaWJsZQ== b25naA== IE9kaW4= IGNvbmNlcHRpb24= IFl1aw== IEJhZ2hkYWQ= IEZsYWc= QXVzdHJhbA== IElCTQ== IGludGVybmF0aW9uYWxseQ== IFdpa2lMZWFrcw== SUVE IGN5bg== IGNob29zZXM= IFBpbGw= IGNvbWJpbmluZw== IHJhZGk= IE1vaGFtbWVk ZGVmZW5zZQ== YXRjaGluZw== U3ViamVjdA== aWNpZW5jeQ== RnJhbWU= IHsi IGNoZXNz IHRpbWVy MTkw IHRpbg== IG9yZGluYW5jZQ== ZW1ldGVyeQ== IGFjY3VzaW5n IG5vdGljZWFibGU= IGNlbnRyZXM= IGxpZA== IE1pbGxz aW1ndXI= IHpvb20= ZXJnaWM= IGNvbXByZXNzaW9u cHJpbQ== ZmluZA== IHN1cmc= IHBhbmQ= IEtlZQ== IENoYWQ= Y2VsbGVuY2U= b3lsZQ== IHNvY2lhbGlzbQ== IFRyYXZpcw== IE1Ieg== IGd1aWxk QUxMWQ== IFN1YnNjcmliZQ== IFJlbGF0ZWQ= IG9jY3VycmVuY2U= aXRjaGluZw== IGZpY3Rpb25hbA== IGNydXNo IEVB Y29k bWl4 IFRyaXBsZQ== IHJldHJpZXZl IHN0aW11bHVz IHBzeWNoaWF0 IERvb3I= IGhvbW9zZXh1YWxpdHk= IGVsZW1lbnRhcnk= IGNlbGx1bGFy aWRpYW4= IExhdW4= IGludHJpZ3Vpbmc= IGZvYW0= IEJhc3M= aWRp aXRzdQ== IGFzc3VyZQ== IGNvbmdyYXQ= IGJ1c2luZXNzbWFu IEJvb3N0 Y2xvc2U= IGxpZWQ= IHNjaWVuY2Vz IE9tZWdh IEdyYXBoaWNz IDw9 c3Bva2Vu IGNvbm5lY3Rpdml0eQ== U2F0dXJkYXk= IEF2ZW5nZXJz IHRvZ2dsZQ== IGFua2xl IG5hdGlvbmFsaXN0 bW9kZWw= IFBvb2w= b3Bob2JpYQ== VmFy IE1vbnM= YXRvcmllcw== IGFnZ3Jlc3NpdmVseQ== Q2xlYXI= Rm9yZ2U= YWN0ZXJz IGhlZGdl IHBpcGVz IGJsdW50 IHNx IHJlbW90ZWx5 V2Vk YXNlcnM= IHJlZnJpZ2Vy IHRpbGVz IHJlc2N1ZWQ= IGNvbXByaXNlZA== aW5za3k= IG1hbmlm YXZhbmF1Z2g= IHByb2xpZmVy IGFsaWduZWQ= eG1s IHRyaXY= IGNvb3JkaW5hdGlvbg== IFBFUg== IFF1b3Rl MTM0 YmY= IFNhdw== IHRlcm1pbmF0aW9u IDE5MA== IGFkZGl0aW9ucw== IHRyaW8= IHByb2plY3Rpb25z IHBvc2l0aXZlbHk= IGluY2x1c2l2ZQ== IG1lbWJy MTk5MA== b2xkZXI= IHByYWN0aWNlZA== aW5rbGU= QXJjaA== IHN0YXJ0ZXJz YXJpdXM= IGludGVybWVkaWF0ZQ== IEJlbmVm IEtpbGxlcg== IGludGVydmVudGlvbnM= IEtpbA== IEZseWluZw== SW52 IHByZW1hdHVyZQ== IHBzeWNoaWF0cmlj IGluZGll IGNvbGxhcg== IFJhaW5ib3c= YWZp IGRpc3J1cHRpb24= IEZPWA== Y2FzdGluZw== IG1pc2RlbQ== Y3Jv IHdpcGU= YXJkb24= IGJhc3Q= IFRvbW15 IFJlcHJlc2VudGF0aXZl IGJlbGx5 IFBP IEJyZWl0YmFydA== MTMy IG1lc3NhZ2luZw== U2hvdWxk UmVmZXJlbmNlcw== IEdSRQ== aXN0aWNhbA== TFA= IENhdg== IENyYXp5 IGludHVpdGl2ZQ== a2VlcGluZw== IE1vc3M= IGRpc2NvbnRpbg== IE1vZHVsZQ== IHVucmVsYXRlZA== IFByYWN0aWNl IFRyYW5zcG9ydA== IHN0YXRpc3RpY2FsbHk= b3Jucw== IHNpemVk cHU= IGNhZg== IFdvcmxkcw== IFJvZGdlcnM= IEx1bg== IENvbWlj bGl2aW5n IGNhcmVk IGNsaW1iZWQ= KXs= IGNvbnNpc3RlZA== IG1lZGlldmFs Zm9saw== IGhhY2tlZA== IGRpcmU= IEhlcm1pb25l IHRlbmRlZA== Y2VhbnM= RGFuaWVs d2VudA== IGxlZ2lzbGF0b3Jz IHJlZGVz Z2FtZXM= IGdu YW1pbGlhcg== ICsr Z2d5 dGhyZWF0 IG1hZ25ldA== IHBlcmNlaXZl IHppcA== IGluZGljdG1lbnQ= IGNyaXRpcXVl Z2FyZA== IFNhZmU= IENyZWFt IGFkdmVudA== b2Jh IHZvd2Vk b3VzYW5kcw== IHNraQ== IGFib3J0aW9ucw== dWFydA== IHN0dW5uZWQ= IGFkdmFuY2luZw== IGxhY2tlZA== IFwi IHNjaGl6b3BocmVu IGVsZWdhbnQ= IGNvbmZlcmVuY2Vz IGNhbmNlbGVk IEh1ZHNvbg== IEhvcGVmdWxseQ== IHRydW1w IGZyZXF1ZW5jaWVz IG1ldGVvcg== IEp1bmlvcg== IEZsZWV0 IE1hbGNvbG0= IFRvb2xz IC4uLi4uLi4u IGhvYmJ5 IEV1cm9wZWFucw== IDE1MDA= IEludG8= IHN3YXk= IEFwcHJv IENvbXBs Q29tbXVuaXR5 IHRpZGU= IFN1bW1pdA== 5Ls= IGludGVydmFscw== IEV0aGVy IGhhYml0YXQ= IFN0ZXZlbnM= bGlzaGluZw== IERvbWFpbg== IHRyaWdnZXJz IGNoYXNpbmc= IGNoYXJt IEZsb3dlcg== aXRvcmVk IGJsZXNzaW5n IHRleHR1cmVz Rml2ZQ== IGxpcXVvcg== UlA= RklO IDE5NjI= Q0FS VW5rbm93bg== IHJlc2ls IExpbHk= IGFidW5kYW5jZQ== IHByZWRpY3RhYmxl cmFy IGJ1bGxzaGl0 bGVlbg== Y2hldA== TW9y TXVjaA== 5Lk= IGVtcGhhc2l6ZWQ= IGNydXN0 IHByaW1pdGl2ZQ== IGVuam95YWJsZQ== IFBpY3R1cmVz IHRlYW1tYXRl cGxlcg== IFRvbA== IEthbmU= IHN1bW1vbmVk dGh5 cmFtYQ== IEhvbmRh IHJlYWxpemluZw== IHF1aWNrZXI= IGNvbmNlbnRyYXRl Y2xlYXI= IDIxMA== IEVyZG9nYW4= YXJpcw== IHJlc3BvbmRz IEJJ IGVsaWdpYmlsaXR5 IHB1c2hlcw== IElkYWhv IGFnZ3Jhdg== IHJ1aW5z dXJhdGlvbnM= IGJhbnM= IGFuYXQ= c2hhcmU= IGdyaW5k aGlu dW1lbg== IHV0aWxpdGllcw== IFlhbmtlZXM= IGRhdGFiYXNlcw== IERE IGRpc3BsYWNlZA== IGRlcGVuZGVuY2llcw== IHN0aW11bGF0aW9u aHVu aG91c2Vz IFByZXR0eQ== IFJhdmVucw== IFRPREFZ IGFzc29jaWF0ZXM= IHRoZXJhcGU= Y2xlZA== IGRlZXI= IHJlcGFpcnM= cmVudGljZQ== IHJlY2VwdG9ycw== IHJlbWVk IENl IG1hcnJpYWdlcw== IGJhbGxvdHM= IFNvbGRpZXI= IGhpbGFyaW91cw== b3Bs MTM4 IGluaGVyZW50bHk= IGlnbm9yYW50 IGJvdW5jZQ== IEVhc3Rlcg== UkVMQVRFRA== IEN1cnJlbmN5 RVY= 44Oe IExlYWQ= IGRlY2Vhc2Vk QnJpZW4= IE11c2s= SlM= IG1lcmdl aGVhcnRlZA== Y3JlYXQ= bWl0dA== bXVuZA== IOKAiw== IEJhZw== IHByb2plY3Rpb24= IGphdmE= IFN0YW5kYXJkcw== IExlb25hcmQ= IGNvY29udXQ= IFBvcHVsYXRpb24= IHRyYWplY3Q= IGltcGx5 IGN1cmlvc2l0eQ== IERC IEZyZXNo IFBvcg== IGhlYXZpZXI= bmV5cw== Z29tZXJ5 IGRlc2VydmVk IHBocmFzZXM= IEdD IHllYXN0 ZGVzYw== RGVhdGg= IHJlYm9vdA== IG1ldGFkYXRh SUNBTA== IHJlcGF5 IEluZGVwZW5kZW5jZQ== IHN1YnVyYmFu aWNhbHM= IGF0b3A= IGFsbG9jYXRpb24= Z2VuZXJhdGlvbg== IEdyYW0= IG1vaXN0dXJl IHBpbmU= IExpYmVyYWxz IGFpZGVz IHVuZGVyZXN0 IEJlcnJ5 IGNlcmVtb24= Mzcw YXN0cm91cw== IFBpcmF0ZXM= IHRlbnNl IEluZHVzdHJpZXM= IEFwcGVhbHM= IE5lYXI= IOijj+c= IGxvdmVycw== IENBUA== IENyYXc= IGdpYW50cw== IGVmZmljYWN5 RWxlbWVudA== IEJlaGF2aW9y IFRveW90YQ== IGludGVzdA== UHJpdg== QUk= IG1hbmV1dmVy IHBlcmZlY3Rpb24= IGJhbmc= cGFwZXI= cmlsbA== R2Vvcmdl Ym9yZGVy aW50ZXJz IFNldGg= IGNsdWVz IExldmk= IFJldmVudWU= MTQ3 IHZhcG9y IGZvcnR1bmF0ZQ== IHRocmVhdGVucw== IHZldA== IGRlcGVuZGVuY3k= ZXJzZWQ= YXJ0aWNsZQ== IEJsaXp6YXJk IGNobG9y IG1pbnVz IEJpbGxz IGNyeXB0b2N1cnJlbmN5 IG1ldGFib2xpc20= dGVyaW5n IHBlc3RpYw== c3RlcHM= IFRyZWFzdXJl cmFjdGVk IENvbnN0YW50 IHRlbXA= MTM5 IERldGVjdGl2ZQ== dXJhbGx5 IHJlY292ZXJpbmc= IGNvcnRleA== IDE0NA== Y2xvc2Vk IHByZWp1ZGljZQ== YXVudGVk IHN0b3Jtcw== IE5PVw== IG1hY2hpbmVyeQ== QWRkcmVzcw== IGNvbXBlbGxlZA== Mjcw IGRlc3BhaXI= YmFuZQ== IHZlZ2V0YWJsZQ== IGJlZHM= TGVhcm4= IGNvbG9yZnVs IHNwaWtl IG1hcmdpbnM= IHN5bXBhdGh5 IHdvcmtzaG9w IENCQw== U2F0 IGJ1cm5z IEdlbmRlcg== IDEyOQ== IENhYmxl IGRlYnRz IFRoZXJlc2E= IHJlZmxlY3Rpbmc= IGFpcnN0 IHJpbQ== cmFtaWQ= IHdlYWtuZXNzZXM= V3JpdA== b2dnbGU= dGk= IENoYXJnZQ== IHdlaWdoZWQ= ICgu IGxhdWdodGVy IHJvdXRlcg== IERlbW9jcmFjeQ== RGVhcg== IGhhc2h0 IGR5 IGhpbnRz cnVubmluZw== IGZpbmlzaGVz YXJ1cw== TWFzcw== cmVzdWx0 YXNjdXM= IHZpbnRhZ2U= IGNvbnF1 IHdpbGRseQ== YWNpc3Q= IGxpbmd1 IHByb3RhZ29uaXN0 c3Ryb20= dGVlbnRo IFNvbG8= bWFj ZmlsbGVk IHJlbm93bg== aXRpdmVz IG1vdGl2ZQ== IEFudGFy IE1hbm4= IEFkanVzdA== IHJvY2tldHM= IHRyb3VibGluZw== ZWk= IG9yZ2FuaXNtcw== YXNzaXM= Q2hyaXN0aWFu IDE0NQ== IEhhc3M= IHN3YWxs IHdheA== IFN1cnZpdmFs VlM= IE11cmQ= dmQ= c3RhbmRhcmQ= IGRyYWdvbnM= IGFjY2VsZXJhdGlvbg== cmF0aW9uYWw= ZmluYWw= IHBhaXJlZA== IEV0aGVyZXVt IGludGVyZmFjZXM= IHJlc2VudA== IGFydGlmYWN0cw== xas= YXJlbA== IGNvbXBldGl0b3I= IE5pY2hvbGFz IFN1cmZhY2U= Y3Bw IFRvdA== IGVjb25vbWljYWxseQ== IG9yZ2FuaXNlZA== IGVuZm9yY2Vk aW5obw== IHZhcmlldGllcw== IGFiZG9t IEJhaWxleQ== aWRhdg== IFNhbHY= cGFpZA== IGFsdGl0dWRl ZXNzZXJ0 IEd1dGVuYmVyZw== YXJlYQ== b3BvdWxvcw== IHByb2Zlc3NvcnM= aWdncw== IEZhdGU= aGV5 IDMwMDA= RGlzdA== IHR3aW5z Y2lsbA== IE1hcHM= IHRyYXBz IHdlZWQ= IEtpc3M= IHlvZ2E= IHJlY2lwaWVudHM= IFdlc3RtaW5zdGVy IHBvb2xz IFdhbG1hcnQ= MTg4 IFNjaG9vbHM= YXR0YWNr IEFSTQ== cGFyYWdyYXBo V2FybmluZw== amw= IHNlbGZpc2g= YW5jaGV6 IEhlaWdodHM= RnJl IFNvcGg= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t dG1s MzMz IHJhaWRz IHNhdGVsbGl0ZXM= S0VZ IGxhc3Rz 0YI= SW5z IERhbWU= IHVucHJlZGljdA== Ly8v Z2hhaQ== IGFydGlsbGVyeQ== IGNydWlzZQ== IGdlbA== IENhYmluZXQ= IGJsb3dz IEVzcA== IHByb3hpbWl0eQ== b3RoZQ== IFNraWxscw== IFVwcGVy b2Jv IE5EUA== IGVuam95cw== IHJlcGVhdGluZw== IENvbnN0cnVjdGlvbg== IFF1ZXN0aW9ucw== SGlsbGFyeQ== IHVpbnQ= IHByb2Nlc3NvcnM= IEdpYnNvbg== IE11bHRpcGxl cWE= IEJvbQ== IE1pbGVz dmVudGlvbmFs IGh1cnRz c2tpbg== IEFJRFM= IGFkdmlzZXJz IFJvb3Q= IG1ldGhvZG9sb2d5 IERhbGU= IGRldG9u IEtub3dsZWRnZQ== c2VxdWVudGx5 IDEyMQ== IGNvbm5lY3Rz Q3k= IERhbmdlcg== IGNvbnRyaWJ1dG9ycw== IEJlbnQ= IGJyYXNz IEd1bnM= aW50bw== IEZvcnR1bmU= IGJyb2tlcg== YmFsYW5jZQ== IGxlbmd0aHM= IHZpYw== IGF2ZXJhZ2luZw== IGFwcHJvcHJpYXRlbHk= IENhbWVyYQ== IHNhbmR3aWNo IENEQw== IGNvb3JkaW5hdGU= IG5hdmln IGdvb2RuZXNz bGFpbQ== IGJyYWtl IGV4dHJlbWlzdA== IFdha2U= IE1lbmQ= IFRpbnk= IENPTA== IFJG IER1YWw= IFdpbmU= Q2FzZQ== IHJlZmluZWQ= IGxhbXA= TGVhZA== IGJhcHQ= IENhcmI= IFNhZGQ= IE1pbm5lYXBvbGlz UERG RWFybHk= IEhpZGRlbg== SXRz IFRJTUU= IHBhcA== IGNvbW1pc3Npb25lZA== IEZldw== IENvbHRz IEJyZW4= IGJvdGhlcmVk IGxpa2V3aXNl RXhwZXI= IFNjaHc= Y3J5 bm4= IE1pdGNo aW1vbg== TUc= Ym0= VU1Q cmF5cw== IHJlZ2lzdHJ5 IDI3MA== YWNoaW5l cmVsbGE= YW50aW5n MDAwMDA= IHJ1aW5lZA== c3BvdA== IHRh IG1heGltaXpl IGluY29udmVu RGVhZA== SHVtYW4= RW5hYmxlZA== IE1hcmll IGNoaWxs IFBhcmFkaXNl IHN0YXJyaW5n IExhdGlubw== IFByb3RvY29s IEVWRVI= IHN1cHBsaWVycw== bWVzc2FnZQ== IEJyb2Nr IHNlcnVt 4paI4paI4paI4paI IGVuY29tcA== IGFtYml0aW9u dWVzZQ== IGFycm93cw== QW5kcmV3 IGFudGVubmE= IDE5NjE= IEJhcms= IGJvb2w= 44Kq IFN0b3JhZ2U= IHJhaWx3YXk= IHRvdWdoZXI= IENhZA== IHdhc2hpbmc= UHk= J10= ZW1iZWQ= IE1lbXBoaXM= YWNrbGU= IGZhbW91c2x5 IEZvcnR1bmF0ZWx5 b3ZpZXM= IG1pbmRzZXQ= IHNuZWFr IERo UkFX IFNpbXBzb24= IGxpdmVzdA== IGxhbmRtYXJr IGNlbWVudA== TG93 IHRocmlsbGVk IENvdXJzZQ== aW5lbA== IGNodWNr aWRhdGU= Z2xvYmFs IHdoaXQ= IO+/vQ== YWRheXM= c2tp IFNW IHZpcnVzZXM= MzA2 IFJlc3BvbnM= IHRoZWF0ZXJz IEJyYW5jaA== IEdlbmV2YQ== IE1L IHVuYmVsaWV2 IGNvbW11bmlzdA== T3JpZ2luYWw= IFJlY2VpdmVk IFRyYW5zZmVy IEFyZw== SW5wdXQ= IFN0cmF0ZWd5 IHBhbGFjZQ== dGhlbmluZw== RHJp IHNlbnRlbmNpbmc= dW1ibmFpbA== IHBpbnM= cmVjeQ== IHNpYmxpbmdz R2V0dGluZw== IEJV IE5vcnRod2VzdA== IHByb2xvbmdlZA== IFNha3VyYQ== Q29tYg== IEJvdXI= IGluYWRlcXVhdGU= IEthc2g= IHVzZXJuYW1l IEltcHJvdmU= IGJhdHRsaW5n IE1BQw== IGN1cnJpY3VsdW0= IHNvZGE= IENhbm5vbg== IHNlbnNpYmxl c3BvbnM= RGVjZW1iZXI= IHdpY2tlZA== IFBlbmd1 IGRpY3RhdG9ycw== IEhlYXJ0cw== b2d5bg== IHNpbWlsYXJpdGllcw== IFN0YXRz IGhvbGxvdw== aXRhdGlvbnM= Ijpb IGhvdmVy IExpc3Rlbg== c2No U3VuZA== IGNhZA== IFBhcmtz IGx1cg== IGh5cGU= IExlbQ== TkFNRQ== aXN1cmU= RnJpZGF5 IHNob290cw== IGNsb3Nlcw== IGRi IFJpZGdl IERpZmZlcmVudA== IHJlcGxpZXM= IEJyb2Fkd2F5 b3BlcnM= IGludG9sZXI= IFpldXM= YWtlc3Bl IHByb3ByaWV0YXJ5 IHJlcXVlc3Rpbmc= IGNvbnRyb2xsZXJz IE1JTg== aW1lZGlh YmVjY2E= IGV4cGFucw== IG9pbHM= Qm90 IENoYW5k IHByaW50ZXI= IHRvcHBlZA== IFBPTA== IEVhcmxpZXI= U29jaWFs YXZpbg== IGRlY3JlYXNlcw== IFNlYg== IHNwZWNpZmljYXRpb25z IEJsYXN0 IEt1cnQ= IGZyZWVs QnJvd24= IGRpbGln cm9l IFByb2JsZW0= IFF1YWQ= IGRlY2VudHJhbA== IFZlY3Rvcg== YW51dA== IHBsdWdpbnM= IEdyZWdvcnk= IGZ1Y2tlZA== ZWxpbmVz IEFtYmFzc2Fkb3I= dGFrZQ== IGNsZWFucw== b25neWFuZw== QW5vbnltb3Vz c3Rybw== In0= YWxpbmU= IE9kZA== IEV1Zw== MjE2 IGJvaWw= IFBvd2Vycw== IG51cnNlcw== T2J2aW91c2x5 IFRlY2huaWNhbA== IGV4Y2VlZGVk T1JT IGV4dHJlbWlzdHM= IHRyYWNlcw== ZXhwbA== IGNvbXI= IFNhY2g= KS8= IG1hc2tz IHNjaQ== Qm9u IHJlZ3Jlc3Npb24= d2VnaWFu IGFkdmlzb3I= aXR1cmVz IFZv ZXhhbXBsZQ== IEluc3RydWN0 IHNpZWdl IHJlZHVjdGlvbnM= cHRy IHN0YXR1dG9yeQ== IHJlbW92ZXM= IHB1Y2s= cmVkaXRz IGJlZQ== IHNhbGFk IHByb21vdGlvbnM= IEpvc2h1YQ== d2l0aHN0YW5kaW5n RVRI IENoYQ== aW11cw== IGV4cGVuZGl0dXJl YXVudGluZw== IGRlbGlnaHRlZA== IDE1NQ== YmVo IGNhcnBldA== IFNwYXJ0 IGp1bmdsZQ== bGlzdHM= IGJ1bGx5aW5n IE5vYmVs IEdsZW4= IHJlZmVyZW5jZWQ= IGludHJvZHVjZXM= c2Vpbg== IGNob3BwZWQ= Z2xhc3M= IFdyZXN0 IG5ldXRyYWxpdHk= IOKZ IGludmVzdGlnYXRvcg== IHNoZWx2ZXM= IHVuY29uc3RpdHV0aW9uYWw= IHJlcHJvZHVjdGlvbg== IG1lcmNoYW50 bWlh IG1ldHJpY3M= IGV4cGxvc2l2ZXM= IFNvbmlh IGJvZGlseQ== IHRoaWNrbmVzcw== IHByZWRvbWluYW50bHk= IEFiaWxpdHk= IG1vbml0b3JlZA== SUNI IF0u IE1hcnRpbmV6 IHZpc2liaWxpdHk= IHF1ZXJpZXM= IGdlbm9jaWRl IFdhcmZhcmU= UXVlcnk= IHN0dWRpb3M= IGVtYnJ5 IGNvcnJpZG9y IGNsZWFuZWQ= Y29tcGxldGU= IE1I IGVucm9sbG1lbnQ= SU5HUw== IGltcGFjdGVk IGRpc2FzdHJvdXM= IFl1bg== IENsYWlyZQ== IEJhc2ljYWxseQ== eXQ= dXN0ZXJpdHk= IGluZGlyZWN0bHk= d2lr IGRvZA== IENhcnI= IGFtcA== IHByb2hpYml0 IEluaXRpYWw= IFJk aWpp IGVkdWNhdGU= Y29ybg== aW90dA== IEJlYXV0eQ== IGRldGVjdGl2ZQ== IENvbm4= c2luY2U= IHN0YWdnZXI= IG9iZXNl IGJyZWU= b2xvZ2lj aXNzZQ== d2Fsa2Vy IGJsYWRlcw== IGxhd2Z1bA== ZnVuYw== IEJlaGluZA== IGFwcGV0aXRl ICgq IHRlbm5pcw== IG9mZnNwcmluZw== IGpldHM= IHN0cnVjdHVyZWQ= IGFmb3JlbWVudGlvbmVk Tm92 IHNjYWxpbmc= ZmlsbA== IHN0ZXc= IGN1cmI= IFN0ZXBoYW4= ZWRJbg== U0Y= b2JpYw== 6a2U b3Vn IE1N IGdlbmV0aWNhbGx5 b3Bleg== MTM2 IHVtYg== YW5jZXJz IGNvaG9ydA== IG1lcmNoYW5kaXNl IGltcG9zaW5n IExlZ2lzbGF0dXJl IEFyY2hpdmU= aXZpYQ== IE5hdmFs IG9mZmVuY2Vz IG1pcmFjbGU= IHNuYXBwZWQ= IGZvZXM= IGV4dGVuc2l2ZWx5 IFJhZg== IGNhdGVy ZWRpZW5jZQ== S2l0 IEJpbg== IHJlY29tbWVuZHM= IENpdGllcw== IHJpZ2lk IFJFQUQ= IE5vYmxl IFRpYW4= IGNlcnRpZmljYXRlcw== YW50aXM= b2lsZXI= IEJ1ZGRoaXN0 ZGlk IHN1cnZleWVk IGRvd253YXJk IHByaW50cw== IE1vdGlvbg== cm9uaWNz IFNhbnM= b3NzaWJseQ== dWN0aW9ucw== IGNvbG9uaWVz IERhbmlzaA== dW5pdA== IHNwb2ls IGFkdmlzb3J5 YmVycmllcw== UGxhbg== IHNwZWNpZmljYXRpb24= b3BoZXJz IFJlc291cmNl IHNoaXJ0cw== cHJpc2luZ2x5 Y29tbXVuaWNhdGlvbnM= IHRyaXZpYWw= IG1lbnRpb25pbmc= aXNleHVhbA== IHN1cHBsZW1lbnRz IHN1cGVydmlzaW9u QlA= dm9y IHdpdA== IGNvb2xkb3du IHBsYWludGlmZg== IFJldmlld3M= IFNyaQ== IE1pbnQ= IFN1Z2Fy IGFmdGVyd2FyZA== IFByaWVzdA== IEludmVzdG1lbnQ= b2dlbmU= IFRha2luZw== IHN0cmV0Y2hpbmc= IGluZmxhbW1hdGlvbg== IFRlaHJhbg== IGxpbmluZw== IGZyZWV6aW5n IEVudGl0eQ== IGluc3BpcmluZw== c3BlY2lhbA== cHJpY2U= IHN1ZQ== IFBvcnRlcg== b3VuZ2U= RVRB IERlcmVr IEx1aXM= dW8= eW1waA== IGV4dGVyaW9y aWhpbA== IEFzaGxleQ== aW5hdG9y IG51dHJpZW50cw== IFRocm9uZXM= IGZpbmFuY2Vz IEluc3BlY3Q= IHNwZWNpYWxseQ== IFJlcXVpcmVk IFBUUw== IFZpb2xlbmNl b2ludGVk c2hvdHM= IGV4Y2VycHQ= Y29vbg== SU5T IEdyaQ== IHJlY29nbmlzZWQ= V2Vlaw== WW91bmc= IHZvbQ== aXNsZQ== IEN1cnJ5 IEJ1ZGRo IG5vdGVib29r IGR1cmFibGU= Lz8= IEdhZA== IFB1cHA= IGZvcmdpdmU= cGFyaw== IHBlcnNvbmFsaXRpZXM= YW5hbHlzaXM= Y2xhbWF0aW9u IGVsZXZhdG9y IHdhcmVob3VzZQ== IFJvbGU= dW5u IGlsbHVzdHJhdGlvbg== IFNjYW4= IGF0bW9zcGhlcmlj SW1wb3J0 QU5D cmljdGVk ZnU= MDEw IGFyY2hl IHJld2FyZGVk YWtlc3BlYXJl IGludGVybmFsbHk= IFJCSQ== YWxrZXI= IGVsZXBoYW50 b3dpdHo= IFBpenph IGJpcGFydGlzYW4= w6lz IHNsb3dlZA== IFN0YXJr IG92ZXJyaWRl T1VT IDMyMA== dW5kcmVkcw== IERlY2s= IENlbnN1cw== YmVl MTQ2 b3Rvcg== IGlw IHVi b2NhdGlvbnM= IEJ1dHRvbg== cmljZQ== IGNyaXBw ZmZm IG9yaWdpbmF0ZWQ= IG92ZXJ3aGVsbWVk YXBwYQ== IGZvcmVtb3N0 4oCR IExFRw== cmVsZWFzZQ== ZWF0dXJlZA== YXRjaGVz IHJlcHM= IGxlbmRpbmc= IFJlZmVyZW5jZQ== IENsaWVudA== MTY1 dmVudGg= Q29tcGxldGU= IFBhdHJvbA== IHN3b3Ju Y2Ft IHNodXR0bGU= IFJhbHBo IGhvbWV0b3du LSw= b25hbA== IEJQ 5Y8= IHBlcnN1YWRl IEFsZXhhbmQ= IGNvbWJpbmVz IHZpdmlk IExhZw== IGVuY29kaW5n IHNhbHZhdGlvbg== d2Vu IFJlY292ZXJ5 aXlh VW5pdmVyc2l0eQ== IEJpZGVu IGJ1ZGdldHM= IFRleGFucw== Zml0cw== IGhvbm9yZWQ= IHB5dGhvbg== VEQ= IyMj Y2xvbmU= IGJsaW5r IExpcXVpZA== IHVuZW1wbG95ZWQ= IGNsYXNoZXM= IENvdW5zZWw= IGRpcmVjdGluZw== IHB1bmN0 IEZhbGNvbnM= IHNoYXJr IERhbWFzY3Vz IGplYW5z IGVtYmFyaw== IHNlaXpl IHVwd2FyZHM= Mjgw IEV6 IEFueXRoaW5n IGV4b3RpYw== bG93ZXI= IENyZWF0b3I= IFVt IHN1YnVyYnM= YmVyZ2Vy IFdlbmQ= IG1pbnQ= IFhY IERybw== IHN1ZmZlcnM= IGhlcmI= dHJlZQ== IGZyYWdpbGU= IGZsb29kZWQ= IEFsY29ob2w= b2xlYW4= bnlkZXI= IEtP RnJhbQ== IDEzNg== IG93ZWQ= IE1lbGVl IEhhc2g= IHdoaXNr IHN1ZG8= cnI= UXVpY2s= YXBwcm8= IGlp IEV4YW1wbGVz aGVl IHByb21vdGVz cGVyYXR1cmU= a2Fy IEhvbm9y IHNvZGl1bQ== IExpZg== cm9zc28= aW50ZW5kZW50 IGNvcnJlc3BvbmRlbnQ= Rm91bmQ= c2VjcmV0 IGlkZW50aWZpZXM= YWduZQ== IGxvdQ== IFBQ IGNvaW5jaWRlbmNl bW92ZQ== IG1pbGl0aWE= IGluZmlsdHI= IFByaW1hcnk= IHBpdGNoaW5n IEli IEdPT0Q= 44K4 IFdpemFyZHM= aXJhbA== IFZlbnVz UlI= IOKAlQ== IENhc2V5 IHNhZGx5 IGFkbWlyZQ== IGVtYmFycmFzc2Vk Y2I= TWVs IHR1YmVz IGJlYXV0aWZ1bGx5 IFF1ZWVuc2xhbmQ= QmVsb3c= cmV6 cXVldA== cGxlYXNhbnQ= IMKr Q2FtcA== IGRlY2lzaXZl MTk5OA== IExhbWI= dXR0b24= aG4= IEphZ3U= YXVuZGVy IENvcmQ= IGNsZXJr IGNhZmZl IHdpcGVk IHJlaW0= IE1vdW50YWlucw== IGltcHJpc29uZWQ= IGRldmVsb3Bz IFByYQ== IG1vZGVsaW5n QW55b25l YW5jZWw= IFNpdA== IHNoaWVsZHM= IGxhd24= IGNhcmRpb3Zhc2N1bGFy IGRlbW9uc3RyYXRpbmc= IHBhcnNl IElzcmFlbGlz IGV1cm9z MTQz IGdsb3Jpb3Vz aW5za2k= ZWNk IGNvbmRpdGlvbmluZw== IGhlbHBsZXNz IG1pY3Jvc2M= IEhhcmJvcg== IHN0YWtlcw== IDI2MA== IHVuZXF1 IEZsb3lk IGRhbXA= IGFwcGFyYXR1cw== IExhd3M= IGNvdW50ZXJz IGluZHVjZQ== YXRhYmxl IEFobWVk IHNsYW0= Tm92ZW1iZXI= IHBlcnNpc3Q= IGltbWluZW50 w6Fu IHNocmVk IHBoYXNlcw== IEVkbW9udG9u IEFybXN0cm9uZw== IE1lZXQ= IEtpdHR5 0YA= Y2lyYw== IEFkdWx0 IGFyb3Nl IFhlbg== RGFu Z293 IHN1cGVyZg== IEFkbWly IGVuZHVyZQ== IGtleXdvcmQ= eXJ1cw== IHlhcm4= IHBhdGh3YXk= IEhvcGtpbnM= bWlkdA== IGNlbnNvcnNoaXA= ZGVwZW5kZW50 IGluc3RydWN0b3I= U291cmNlcw== IHRvZQ== IGJhbGxvb24= Tm9i IHN3ZWFy IENhc3Rybw== IGdsb3Nz IEthdmFuYXVnaA== IHJlbWFya2FibHk= UGhvdG9z IE5vbQ== IFNvdXRoZWFzdA== eWVycw== IHZhbGlkYXRpb24= IGNhbm5vbg== IFZpY3Rvcnk= IFBpZXJyZQ== IGNhdXRpb3Vz QXVkaW8= IGZldGNo IEdpZnQ= IEh5cA== IHJlbWVkeQ== WkU= IHNjZW50 IGJlYXJk IFJ1dA== LSI= IHBhdGVudHM= SHk= IHVuanVzdA== IHBvdGF0bw== IGZvcnRoY29taW5n IGNoZWY= IFJpZnQ= YWZmZQ== IFJPTQ== IExhdW5jaA== IHBhZHM= IE5lbw== IG9uc2V0 IHNxdWVlemU= c2FmZQ== IHByZWZpeA== IFRN IE5lYXJseQ== IENsaW5pY2Fs IE1lbnRhbA== b3RpYXRpb24= IFVuaWM= YW50cnk= IENpcg== IGVwaXQ= w6Y= IGV4dHJhY3RlZA== dmVyc2VseQ== cmlhZA== IHN0cmFpbnM= IHRvcHM= IHBvZW0= IFJhbmR5 IE1hcGxl VEhFUg== dXBpdGVy IFNTRA== muk= IHVuY29u cGVyaW5n IHNsZXB0 aW5lcnM= IHVuZGVyd2F0ZXI= IEV2aWRlbmNl Z29uZQ== MjA1 IGhpc3RvcmlhbnM= IHN5bnRoZXNpcw== IGZyb2c= YmFza2V0YmFsbA== IHZpYnJhbnQ= IHN1Ym9yZA== IDM2NQ== IERpYWw= IGNvb3BlcmF0ZQ== SEFIQQ== IGdyZWV0ZWQ= MTU4 IGpheno= IGludG94 IFdhbGtpbmc= IHN1cGVydmlzb3I= IEZ1c2lvbg== IE1lcmNlZGVz c2VuZA== SGFt c2Q= bmw= IHRvdXJz IEZJRkE= IGN1bHA= Z2Q= MzA0 IHBsZWFz IGlsbHVzdHJhdGVz IENvbG9tYmlh IGhpZ2hsaWdodGluZw== IFN1bW1hcnk= IGV4cG9zaW5n IERydQ== IGlyb255 cml0aW9uYWw= IENhcnJvbGw= IEVsbGlz UGljdA== IFJhcHQ= IGFkYXB0ZXI= IHVubQ== IGNvcnBzZQ== IGNlbGVicml0aWVz RGVu YXR1bQ== IEFwb2NhbHlwc2U= IFdhZw== bGluaW5n IGhvcm1vbmVz UnVi IFhp IFZhdWx0cw== MjA4 YWxreXJpZQ== aW5vc2F1cg== IGZlZWRz dml0eQ== IGRlZmVhdGluZw== V2FpdA== IGVtcGhhc2l6ZQ== IFN0ZWVsZXJz eXJpbnRo bGV5cw== IFdoZW5ldmVy Q3VycmVudGx5 IENsb2Nr IGNvbGxlY3RpdmVseQ== YW55b24= IEpQ IG1lbnRhbGl0eQ== IGRvd25sb2Fkcw== IHN1cnJvdW5kaW5ncw== IEJhcm5lcw== IGZsYWdzaGlw IGluZGljYXRvcnM= IGdyYXBw SmFudWFyeQ== IEVsZW1lbnRhbA== IEF0aGVuYQ== aWJhbA== IHNpZ2h0cw== IGNhcGl0YQ== IFRyZWF0eQ== IHZvaWNlZA== IEdheg== bGV0dGU= IHlh IGV4cGlyZWQ= TGVnZW5k SG90 bmF0dXJl IHVuc3RhYmxl IDI4MA== w7o= Q29tbWVudA== QUxF IHF1ZXN0cw== IGhhbmRsZXI= bmlz IHZlcnNhdGlsZQ== IGNvbmNlYWw= ZW5nZWFuY2U= IEludGVyYWN0aXZl IG9ic2Vzc2Vk IERvZ3M= IGNyYWNrZWQ= U291bmQ= c3Y= IER5bGFu cm9hZHM= Zng= IENhdGhvbGljcw== IEhhZw== IHNsYW1tZWQ= IGdsb3dpbmc= c2FsZQ== IHRpc3N1ZXM= IENoaQ== bmVl IGNoZXI= c2lj dXJyZWN0aW9u IGJhY29u dWxhdG9yeQ== KS4i IGlycmVndWxhcg== Rk9STQ== YXNzZWQ= IGludGVudGlvbmFs IGNvbXBlbnNhdGU= IFNwZWFraW5n IFNldHM= MTUz IGNvbnZlbnRpb25z YmFuZHM= ZW1hZGU= IGVjYw== IFdpbnN0b24= IEFzc2Fzc2lu IEJlbGdpYW4= IGRlcGVuZGVuY2U= IG5pY2hl IGJhcms= IEpheno= IGRpc2FkdmFudGFnZQ== IGdhc29saW5l IDE2NQ== 55qE ZXNzYQ== bW9kdWxl YW5ndWxhcg== T1k= IFRyZWF0bWVudA== aXRhcw== b2xhdGlvbg== IEFybm9sZA== IGZldWQ= IE5lc3Q= IHRoZWF0cmU= ZXdhdGVy IG1pbm9ycw== b2xpY3k= IEhhdmVu ZGl2aXNpb24= IHRydW5r RmFy IFB1bGw= IGNhcHR1cmluZw== IDE4MDA= IFRlZW4= IGV4ZW1wbA== IGNsaW5pY3M= IEJ1cmc= IHN1YnN0aXQ= IHBheWxvYWQ= IExhdg== IFRyb3k= IFdpdG5lc3M= IGZyYWdtZW50cw== IHBhc3N3b3Jkcw== IGdvc3BlbA== IEdpbg== IHRlbmFudHM= b2xpdGg= U2l4 UHJldmlvdXM= IEFnZXM= IERhcndpbg== IGJsYXQ= IGVtcGF0aHk= c21pdGg= YmFn IEVjaG8= IENhbWI= IE1hZGQ= IEJvbw== IHJlZGU= IEJ1cm5pbmc= IHNtb290aGx5 IEFkcmlhbg== IFZhbXBpcmU= IE1vbnN0ZXJz c3RlYW0= U3R5bGU= TWE= cmVh IER3YXI= YWx5c3Q= dXJzb3I= IGVsaW1pbmF0aW9u IGNyeXB0bw== Y2h0 IEV0ZXJuYWw= 4oCmXQ== IFNvcmNl SWxs TkVS IHVo Q29uY2x1c2lvbg== d2FnZQ== IHJlc3Bpcg== IHJlbWluaXM= aGV0aWNhbA== IGd5 IHV0aWxpemVk aWNpZGFs IDE5MDA= IGh1bnRlcnM= IFN3YW4= IFJlYWN0 IHZpc2l0b3I= IFRoYW5rc2dpdmluZw== MzA4 UG9zdHM= IGhpcHM= MTk5Nw== b21lcnM= IGtub2NraW5n IFZlaGljbGU= IHRpbA== IDEzOA== IG1p IEludmVzdGlnYXRpb24= IEtlbnlh IGNhc2lubw== IG1vdGl2ZXM= IHJlZ2Fpbg== cmV4 IHdlZWtlbmRz IHN0YWJiZWQ= Ym9ybw== IGV4cGxvaXRlZA== IEhBVkU= IFRlbGV2aXNpb24= Y29jaw== IHByZXBhcmF0aW9ucw== IGVuZGVhdg== IFJlbW90ZQ== IE1ha2Vy IFByb2R1 IEV2YW4= IGluZm9ybWF0aW9uYWw= IExvdWlzdmlsbGU= MTU0 IERyZWFtcw== IHBsb3Rz IFJ1bm5lcg== IGh1cnRpbmc= IGFjYWRlbXk= IE1vbnRnb21lcnk= bm0= IExhbmM= IEFseg== MjEw ZWxvbmc= IHJldGFpbGVy IGFyaXNpbmc= IHJlYmVsbGlvbg== IGJsb25kZQ== cGxheWVk IGluc3RydW1lbnRhbA== Q3Jvc3M= IHJldGVudGlvbg== IHRoZXJhcGV1dGlj IHNlYXM= IGluZmFudHJ5 IENsaW50 IHByb21wdGluZw== IGJpdGNo IHN0ZW1z IEtyYQ== IHRoZXNpcw== IEJvZw== cnVlZA== IGtpbmdz IGNsYXk= aWZpY2VudA== IFlFUw== IFRoaW5n IEN1YnM= dmV5YXJk ZWxzaA== aW5hcmlseQ== IEV5 IFJvbGxpbmc= IGV2b2x2aW5n SW5kaWE= IHJlY29nbml6ZXM= IGdyYWR1YXRpb24= aXNlcnM= IGZlcnRpbGl0eQ== IE1pbGFu Q29tbWFuZA== IGJveGluZw== IDE5NDM= IGdsdXRlbg== IEVtaXI= IGlkb2w= IGNvbmNlaXZlZA== IENyZWF0aW9u TWVyaXQ= dWRkeQ== dXNzaW9ucw== IExpZXV0ZW5hbnQ= aWV0YWw= IHVuY2hhbmdlZA== IFNjYWxl IENyaW1lYQ== YmFsbHM= YXRvcmlhbA== IGRlcHRocw== IGVtcGlyaWNhbA== IHRyYW5zbQ== IHVuc2FmZQ== bWlzc2libGU= Y29tZm9ydA== MTU2 IG1lY2hhbmlj MDAy bGlucw== IHNtb2tlZA== UG9z IHNsb3dpbmc= IGxhdg== VGV4YXM= IGNoZWF0aW5n IE1ldHJvcG9saXRhbg== ZXRoeWw= IGRpc2NvdmVyaW5n YXNzZQ== IHBlbmNpbA== IFB5b25neWFuZw== IGNsb3NldA== IFNoZWV0 IEVudHJ5 b3VzdGlj IG15c3Q= ZXJhdGU= YXJpYXQ= IG1pbmVyYWxz IG11c2ljaWFu IFB1bA== IE1heg== MjQ5 IHBlcm1pc3Npb25z IGl2 ZW5hcnk= aWNrZXJz IEJpbmc= aGVh ZW5hYmxl IGdyaWV2 IGFzc2VydGVk IENvbG9uZWw= IGFmZmlkYXY= d28= IHNlYXRlZA== IFJpZGU= IHBhaW50aW5ncw== IFBpeA== IDEzNw== aXNoaQ== dW1iYWk= Z290dGVu IEVhcmw= IGlubmluZw== IGNlbnN1cw== IHRyYXZlbGxlZA== IENvbnN1bHQ= MTg1 YmluZA== IHNpbXBsaWNpdHk= IG92ZXJsb29rZWQ= IEhlbHBmdWw= IG1vbmtleQ== IG92ZXJ3aGVsbWluZ2x5 Qmxvb2Q= IEZsaW50 IEphbWE= IFByZXNlbnQ= IFJhZ2U= IFRB cHRpdmU= IHR1cm5vdXQ= d2FsZA== IERvbHBoaW5z IFZQTg== IG9uaW9u IGNyYWZ0aW5n bW1h IE1lcmN1cnk= IGFycmFuZ2U= IGFsZXJ0cw== IE9U emJvbGxhaA== IGdhc2Vz IFJpY2hhcmRzb24= c2Fs bGFy IGZyb3N0 IGxvd2VyaW5n IGFjY2xhaW0= IHN0YXJ0dXBz IEdhaW4= ZXNzbWVudA== IGd1YXJkaWFu 5Lq6 IFBpZQ== IExpbmtz IG1lcml0cw== IGF3YWtl IHBhcmVudGFs IGV4Y2VlZHM= IGlkbGU= IFBpbG90 IGVCYXk= IEFjY2VwdA== aXBlZw== Q2Ft IEtvdA== IHRyYWRlcnM= b2xpdGljcw== dW5rZXI= IFBhbGU= b3Np YW5tYXI= IDE5NDc= IEZlbGw= ZXN0aWFs aXRhdGluZw== R0Y= IFNy aWZ0ZWQ= IGNvbm5lY3Rvcg== IEJvbmU= aWxsZXM= MjYw aG1h IG92ZXJsYXA= IEdpdEh1Yg== IGNsZWFuZXI= IEJhcHRpc3Q= IFdBUw== IGx1bmdz 0YE= IEJVVA== IGNpdGU= IHBpdGNoZWQ= cmVhdG1lbnQ= IHRyb3BoaWVz IE51 Mzg2 IFByaWRl IGF0dGVuZGVlcw== W10= MTc5 IHNwYXRpYWw= IHByaXplcw== IFJlbGlnaW9u IHNob3djYXNl IENhdGVnb3J5 dmlkaWE= VGFyZ2V0 UHJvcGVydHk= Pyw= IGZ1c2lvbg== cGll IFVDTEE= IHNvdW5kdHJhY2s= IHByaW5jZXNz IENhdmFs c2hvdWxk IGxpbWJz QmFja2dyb3VuZA== IGxvbmVseQ== IGNvcmVz IFRhaWw= c2hlZXQ= IDEzMg== UmE= 44Kr IEJvbHQ= IGJvb2tlZA== IGFkbWluaXN0ZXI= IGVxdWFscw== d3k= IG9ic2VydmluZw== IEJhcm9u IEFkb2Jl IHZpcmdpbg== IFNvY2lhbGlzdA== TW92ZQ== Z2hhemk= IExpbmRh MjEy IGJyZXdpbmc= IG1lcmNoYW50cw== YnVyc2U= IGRpdm9y IG1ldGFscw== IE5lcg== IHN1bXM= IEVuZW15 IGVudmlzaW9u IGdyYW50aW5n IEhvbmV5 IFNreXJpbQ== IHNvY2lv Z3JhZGVk IHNlbGVjdGl2ZQ== V0FTSElOR1RPTg== IDE5NDg= IFNpcml1cw== IEdyb3Nz YWN0aXZpdHk= IEl2YW4= IGZ1cmlvdXM= QlNE IFByZXZpb3Vz IHJlc3BvbnNpdmU= IGNoYXJpdGFibGU= IGxlYW5pbmc= IFBldw== IHZpb2xhdGVz XFxcXFxcXFw= IENvbWluZw== d2lyZQ== IHBvZXQ= IHJlc29sdXRpb25z Y29tbWFuZA== IFBvcnR1Z3Vlc2U= IG5pY2tuYW1l IGRlYWY= RmVicnVhcnk= IHJlY29nbmlzZQ== IGVudGlyZXR5 IHNlYXNvbmFs cGxhY2Vk IFRlbGVncmFwaA== IG1pY3JvcGhvbmU= b3VyaW5n IGdyYWlucw== IGdvdmVybmVk IHBvc3Rw IFdhdGVycw== aW5lbWVudA== IHVuZG9jdW1lbnRlZA== IENvbWNhc3Q= IGZveA== IGFzc2F1bHRz cmVvbg== bWFueQ== IEplbmtpbnM= IEFueXdheQ== IGFzc2Vzc21lbnRz IGRvd25z IE1vdXNl IHN1cGVyYg== a3Q= IERvdw== IHRheGF0aW9u NDAx IHNtaWxlcw== IHVuZGVydGFrZW4= IGV4aA== IGVudGh1c2lhc3RpYw== IHR3ZW50 IGdvdmVybm1lbnRhbA== IGF1dG9ub215 IFRlY2hub2xvZ2llcw== IENoYWlu IHByZXZhbGVudA== ZmI= IG5pY290aW5l b2dyYW0= am9i IGF3YWl0aW5n IE1lbnU= IGRlcHV0aWVz a292 aXNob3Bz QnV0dG9u IFNoYW5naGFp IGRpZXNlbA== IER1Y2s= Unlhbg== IFBDcw== TkY= anVyeQ== ZW50ZQ== IGluYWNjdXJhdGU= ZWRkeQ== V2hhdGV2ZXI= IHNob3dj IE5hZA== b2R1cw== ZXRy IHBsYWludGlmZnM= IFdPUg== IEFzc2FuZ2U= IHByaXZhdA== IHByZW1pdW1z IHRhbQ== VVJM IGVsaXRlcw== IFJhbmdlcg== b3R0ZW5oYW0= IEhvZmY= IEF0aGVucw== IGRlZmluaXRl IHNpZ2hlZA== IGV2ZW5seQ== MjEx IEFtYmVy YWtpYQ== IG1haWxpbmc= IGNyYXNoaW5n IENvbmZlZGVyYXRl cnVnZ2Vk V2Fs IERlcHRocw== IGp1dmVuaWxl IHJlYWN0b3I= SW50cm9kdWN0aW9u IERlbHV4ZQ== MTk5NQ== IFNhbmNoZXo= IE1lYWQ= aXZhYmxl Oi0= IFBsYW5uaW5n IFRyYXA= cXVpbg== IFByb3RlY3Q= dmVyZWQ= SW5mb3JtYXRpb24= IGtpZG5leQ== aW5uYW1vbg== bGFz IHBvbGljaW5n IHRvbGVyYXRl IFFp IGJpYXNlZA== Rm9ydA== IEtp c2F2ZQ== IHByaXZpbGVnZWQ= IGJlYXN0cw== IEdsYXM= IENpbmVt IGNvbWViYWNr U3VuZGF5 IGV4dGluY3Rpb24= aG9wcw== IHRyYW5zbWl0 IGRvdWJsZXM= IEZsYXQ= MTY3 IGRpc3B1dGVk IGluanVzdGljZQ== Zm9v VmljdA== cm9sZXVt IEp1bGll Q29udGV4dA== IFJhcml0eQ== aXNzdWU= Q29tcG9uZW50 IGNvdW5zZWxpbmc= YW5uZQ== ZGFyaw== IG9iamVjdGlvbnM= dWlsdA== IGdhc3Q= IHBsYWM= IHVudXNlZA== 44OH IFRyaWFs IEphcw== aGVkcmFs b2Ji IHRlbXBvcmFs IFBSTw== IE5X IEFubml2ZXJzYXJ5 TGFyZ2U= IHRoZXJt IGRhdmlk IHN5c3RlbWlj IFNoaXI= bXV0 IE5lcHQ= YWRkcmVzcw== IHNjYW5uaW5n IHVuZGVyc3RhbmRhYmxl IGNhbnZhcw== Q2F0 IFpvbw== IGFuZ2Vscw== TE8= IFN0YXRlbWVudA== IFNpZw== b3ZhYmxl IEF3YXk= c2hhcmluZw== b2NyYXRz c3RhdGVk IHdlaWdoaW5n Tm9y d2lsZA== QmV5 IGFzdG9uaXNoaW5n IFJleW5vbGRz IG9wZW5lcg== IHRyYWluZXI= IHN1cmdpY2Fs cG4= IGFkanVzdGluZw== d2hlZWw= IGZyb3du ZXJ2YXRpdmU= IHN1c3BlbmQ= V2l0aGlu dGVpbg== IG9ic3RhY2xl IGxpYmVydGllcw== eW1lcw== IHVyYW5pdW0= YW5zb20= YW5vbA== dWJh IExvc3M= IGFyb3Vz IEhlbmRlcnNvbg== V293 c3Bs Y3Vy IMKt IHRoZWlycw== RGFtYWdl IGRvd25sb2FkaW5n IGRpc2Nlcm4= IFN0bw== IEZsYQ== IGhhdGg= IEFq IHVucGxlYXNhbnQ= RXVyb3BlYW4= ZXhwZW5zaXZl IHNjcmVlbnNob3Q= IFVW IGFsbGllZA== IFBlcnNpYW4= IG1vbm9wb2x5 IGF0b20= IFJlZHNraW5z Ij48 IGNhbmNlbGw= IGNpbmVtYQ== MTMx ZmFpcg== IEFsZnJlZA== IGR1Y2s= YXJncw== MjIz IElTSQ== IHNpZ25hbGluZw== aW5hcg== IGxhdWdocw== IGZvcndhcmRz IHJlY2tsZXNz IGxpc3RlbmVycw== YXRpdml0eQ== IHZhc3RseQ== bmFudA== TGVzcw== IEh1bnRpbmc= IFNjaWVudGlmaWM= SVRFRA== IGtuaWdodA== IEhUQw== dXNh dG1w IHJ1ZGU= IExlZ2VuZGFyeQ== IGFyaXNlcw== QmFk IENsYWlt cGVn IHJlYWxpdGllcw== VGhpbms= IMKw IHJvZGU= IHN0cml2ZQ== IGFuZWNk IHNob3J0cw== IGh5cG90aGVz IGNvb3JkaW5hdGVk IEdhbmRoaQ== IEZQUw== UkVE IHN1c2NlcHRpYmxl IHNocmluaw== IENoYXJ0 SGVscA== IGlvbg== ZGVlcA== cmliZXM= IEthaQ== IEN1c3RvbWVy U3VtbWFyeQ== IGNvdWdo d2lmZQ== IGxlbmQ= IHBvc2l0aW9uaW5n IGxvdHRlcnk= IENhbnlvbg== IGZhZGU= IGJyb256ZQ== IEtlbm55 IGJvYXN0cw== IEVuaGFuY2Vk cmVjb3Jk IGVtZXJnZW5jZQ== IGFraW4= IEJlcnQ= aXRvdXM= 4paR IHN0aXA= IGV4Y2hhbmdlZA== b21vcmU= YWxzaA== IHJlc2Vydm9pcg== IHN0YW5kcG9pbnQ= V00= IGluaXRpYXRl IGRlY2F5 IGJyZXdlcnk= IHRlcnJpYmx5 IG1vcnRhbA== bGV2YXJk IHJldmlz Tkk= ZWxv IGNvbmZlc3M= IE1TTkJD IHN1Ym1pc3Npb25z Q29udHJvbGxlcg== IDIwMg== IFJ1dGg= fSk7 IEF6dXJl IC4i MjA2 IE1hcmtldGluZw== IGxhdW5k aWVuY2llcw== IHJlbm93bmVk IFRyb3U= IE5HTw== YmxlbXM= IHRlcnJpZmllZA== IHdhcm5z IHBlcnQ= IHVuc3VyZQ== NDgw YWxleg== dWx0eg== IE91dHNpZGU= IHN0eWw= IFVuZGVyZ3JvdW5k IHBhbmM= IGRpY3Rpb25hcnk= IGZvZQ== cmltaW5hbA== IE5vcndlZ2lhbg== IGphaWxlZA== IG1hdGVybmFs w6ll IEx1Y3k= Y29w Q2hv IHVuc2lnbmVk IFplbGRh IEluc2lkZXI= IENvbnRpbnVlZA== IDEzMw== IE5hcnV0bw== IE1ham9yaXR5 MTY5 IFdv 44KT IHBhc3Rvcg== IGluZm9ybWFs 0L0= YW50aHJvcA== am9pbg== 44GX aXRhdGlvbmFs TlA= IFdyaXRpbmc= Zm4= IEJldmVy MTk1 IHllbGxpbmc= IGRyYXN0aWNhbGx5 IGVqZWN0 IG5ldXQ= IHRocml2ZQ== IEZyZXF1 b3V4 IHBvc3Nlc3Nlcw== IFNlbmF0b3Jz IERFUw== IFNoYWtlc3BlYXJl IEZyYW5jbw== IExC dWNoaQ== IGluY2Fybg== IGZvdW5kZXJz RnVuY3Rpb24= IGJyaWdodG5lc3M= IEJU IHdoYWxl IFRoZWF0ZXI= bWFzcw== IERvbGw= U29tZXRoaW5n IGVjaG9lZA== IEhleA== Y3JpdA== YWZpYQ== IGdvZGRlc3M= IGVsZXZlbg== IFByZXZpZXc= IEF1cm9yYQ== IDQwMQ== dWxzaXZl IExvZ2Fu aW5idXJnaA== IENlbnRlcnM= IE9OTFk= IEFpZA== IHBhcmFkb3g= IGh1cmQ= IExD RHVl Y291cnQ= IG9mZmVuZGVk IGV2YWx1YXRpbmc= IE1hdHRoZXdz IHRvbWI= IHBheXJvbGw= IGV4dHJhY3Rpb24= IEhhbmRz aWZp IHN1cGVybmF0dXJhbA== IENPTU0= XT0= ZG9ncw== IDUxMg== IE1lZXRpbmc= UmljaGFyZA== IE1heGltdW0= IGlkZWFscw== VGhpbmdz bWFuZA== IFJlZ2FyZGxlc3M= IGh1bWlsaQ== YnVmZmVy TGl0dGxl IERhbmk= IE5haw== IGxpYmVyYXRpb24= IEFiZQ== IE9M IHN0dWZmZWQ= YWNh aW5kYQ== cmFwaGlj IG1vc3F1 IGNhbXBhaWduaW5n IG9jY3VweQ== U3F1 cmluYQ== IFdlbA== IFZT IHBoeXNpYw== IHB1bHM= cmludA== b2FkZWQ= RVRG IEFyY2hpdmVz IHZlbnVlcw== aG5lcg== IFR1cmJv IGx1c3Q= IGFwcGVhbGVk cXVleg== aWxpYg== IFRpbW90aHk= IG9tbg== ZHJv IG9ic2Vzc2lvbg== IFNhdmFnZQ== MTk5Ng== R2xvYmFs SmVz MjE0 IHNsaWRpbmc= IGRpc2FwcHJv IE1hZ2ljYWw= IHZvbHVudGFyaWx5 Z2I= YW5leQ== IHByb3BoZXQ= IFJlaW4= IEp1bGlh IFdvcnRo YXVydXM= IGJvdW5kcw== aWV1 KSkp IGNyb3Jl IENpdGl6ZW4= U2t5 IGNvbHVtbmlzdA== IHNlZWtlcnM= b25kbw== SVNB IExlbmd0aA== IG5vc3RhbGc= IG5ld2NvbQ== IGRldHJpbQ== ZW50cmlj Mzc1 IEdF IGF1dG9w IGFjYWRlbWljcw== QXBwRGF0YQ== IFNoZW4= IGlkaW90 IFRyYW5zaXQ= IHRlYXNwb29u V2ls S08= IENvbWVkeQ== Piw= IHBvcHVsYXRlZA== V0Q= IHBpZ3M= IE9jdWx1cw== IHN5bXBhdGhldGlj IG1hcmF0aG9u MTk4 IHNlaXp1cmU= c2lkZWQ= IGRvcA== aXJ0dWFs TGFuZA== IEZsb29y b3NhdXJz Li4uXQ== IGxvcw== IHN1YnNpZGlhcnk= RVk= IFBhcnRz IFN0ZWY= IEp1ZGljaWFyeQ== IDEzNA== IG1pcnJvcnM= IGtldA== dGltZXM= IG5ldXJvbG9n IGNhdg== IEd1ZXN0 IHR1bW9y c2NpbGw= IExsb3lk RXN0 IGNsZWFyZXI= IHN0ZXJlb3R5cGVz IGR1cg== bm90aGluZw== UmVkZGl0 IG5lZ290aWF0ZWQ= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t MjM1 IGZsb3du IFNlb3Vs IFJlc2lkZW50 IFNDSA== IGRpc2FwcGVhcmFuY2U= IFZpbmNl Z3Jvd24= IGdyYWJz cmls IEluZmluaXRl IFR3ZW50eQ== IHBlZGVzdHJpYW4= IGplcnNleQ== IEZ1cg== IEluZmluaXR5 IEVsbGlvdHQ= IG1lbnRvcg== IG1vcmFsbHk= IG9iZXk= c2VjdXJl aWZmZQ== IGFudGliaW90aWNz YW5nbGVk IEZyZWVtYW4= IEludHJvZHVjdGlvbg== SnVu IG1hcnNo aWNhbnM= IEVWRU5UUw== b2Nob25k V2FsbA== aWN1bHR5 IG1pc2RlbWVhbm9y IGx5 VGhvbWFz IFJlc29sdXRpb24= IGFuaW1hdGlvbnM= IERyeQ== IGludGVyY291cnNl IE5ld2Nhc3RsZQ== IEhvZw== IEVxdWlwbWVudA== MTc3 IHRlcnJpdG9yaWFs IGFyY2hpdmVz MjAz RmlsdGVy IE11bmljaA== IGNvbW1hbmRlZA== IFdhbmQ= IHBpdGNoZXM= IENyb2F0 IHJhdGlvcw== IE1pdHM= IGFjY3VtdWxhdGVk IFNwZWNpZmljYWxseQ== IGdlbnRsZW1hbg== YWNlcmI= IHBlbm4= IGFrYQ== IEZ1aw== IGludGVydmVuZQ== IFJlZnVnZQ== IEFsemhlaW1lcg== IHN1Y2Nlc3Npb24= b2hhbg== ZG9lcw== TG9yZA== IHNlcGFyYXQ= IGNvcnJlc3BvbmRlbmNl IHNoaW55 UHJpb3I= IHN1bGY= IG1pc2VyYWJsZQ== IGRlZGljYXRpb24= KCku IHNwZWNpYWxpc3Rz IGRlZmVjdHM= IEN1bHQ= IFhpYQ== IGplb3BhcmQ= IE9yZQ== QWJpbGl0eQ== IGxlYXI= IGFtYml0aW9ucw== IEJNSQ== IEFyYWJz IDE5NDI= IHByZXNlcnZhdGlvbg== aWZpY2F0ZQ== IGFzaGFtZWQ= bG9zcw== IFJlc3RhdXI= IHJlc2VtYmxl IGVucmljaA== IEtO IENsYW4= ZmxvYXQ= IHBsYXlhYmxl SVRU IGhhcm1vbnk= YXJyaXNvbg== IFdlaW5zdGVpbg== d2VyZQ== IHBvaXNvbmluZw== IENvbXB1dA== IFdvcmRQcmVzcw== bWFqb3I= IFZhbHZl RmFu IFRocm93 IFJvbWFucw== IERlcHJlc3Npb24= YWRvcw== IHRvcnR1cmVk IGJhbGFuY2luZw== Ym90dG9t IGFjcXVpcmluZw== IE1vbnRl YXJkaQ== IGF1cmE= ICMj IFN0YW5kaW5n IEF0bGFz Q0Y= IGludHJpbnM= IEJlbmdoYXpp IGNhbXBpbmc= IHRhcHBlZA== YmxhZGU= c3Ryb3Vz IFJhYmI= IFdyaXR0ZW4= dGlw IE5laWdo c3RlcmRhbQ== IEFsbG93 IEhlYWxpbmc= IFJob2Q= bnVt IGNhZmZlaW5l IFBlcmNlbnQ= IGJvbw== IGFwcGxlcw== MzA1 IHdlbGNvbWluZw== IGFwcGxhdWQ= IGF1c3Rlcml0eQ== wrE= IFJlYWxpdHk= ZWZl 5a4= IHN1Y2tz IHRhYnM= IFBheVBhbA== IGJhY2twYWNr IGdpZnRlZA== YWJ1bGFyeQ== IFNjb3V0 aXJ0ZWVu IGNoaW4= IG9taXR0ZWQ= IG5lZ2F0aXZlbHk= IGFjY2Vzc2luZw== IEVhcm4= IGFtYnVsYW5jZQ== IGhlYWRwaG9uZXM= IDIwNQ== IFJlZnJlc2g= cHJlc2lkZW50 IEtpdGNoZW4= IEVudGVyZWQ= IFNueWRlcg== MDA1 b21pY2Fs IGJvcnJvd2Vk IE5lbQ== IGF2aWF0aW9u IHN0YWxs cmltaW5hdGlvbg== IHVuaWZvcm1z aXRpbWU= IFNpbW1vbnM= ZW5lcmd5 YWJsaXNoZWQ= eXk= cXVhbGlmaWVk IHJhbGxpZXM= IFN0dWFydA== ZmxpZ2h0 IGdhbmdz cmFn IHZhdWx0 bHV4 IENvbXBhcg== IGRlc2lnbmF0aW9u MjA5 IEpvcw== ZG9sbGFy emVybw== IHdlbGxz MzAz IGNvbnN0aXR1ZW50cw== IGhlY2s= IGNvd3M= IGNvbW1hbmRlcnM= IGRpZmZlcmVudGlhbA== IENhdGhlcmluZQ== Mjk5 IHZhbHZl IGJyYWNl IHBlcnNwZWN0aXZlcw== Y2VydA== ZmFjdA== aWN1bGFybHk= IE1jTg== cGxhbmVz IGludHJpYw== IHBlYXM= b3Zhbg== IHRvc3NlZA== cmV0Y2g= IExvcGV6 IHVuZmFtaWxpYXI= ZGVhdGg= IEFwYXJ0 IENoYW5n IHJlbGlldmVk cm9waGU= IGFpcnBvcnRz IGZyZWFr dXRpbA== TWlsbA== IENoaW4= IE93ZW4= bWFsZQ== IEJyb2tlbg== IFdpbmRz cm9i cmlzaW5n IGZpcmVmaWdodGVycw== IGF1dGhvcml0YXJpYW4= IDE0OA== Qml0Y29pbg== ZXh0ZXJuYWw= IGJyb3dzZXJz aWNoZXZlcg== b3JpYW4= IHVuYg== IHBva2U= IFpvdA== TWlk IFBvcHVsYXI= IGNvdmVydA== IGNvbnRyaWJ1dGVz IDY1MA== IGNvbnRlbnRpb24= R2F0ZQ== IGNvbnNvbGVz IGNocm9tb3M= IElY IHZpc3VhbGx5 IEVpc2Vu IGpld2Vscnk= IGRlbGVnYXRpb24= IGFjY2VsZXJhdGU= IFJpbGV5 IHNsb3Bl IGluZG9vcg== aXRpYWxseQ== IGh1Z2VseQ== IHR1bm5lbHM= IGZpbmVk IGRpcmVjdGl2ZQ== IGZvcmVoZWFk dXN0b21lZA== IHNrYXRl TXVzaWM= Z2Fz IHJlY29nbml6aW5n YW1ibw== IG92ZXJ3ZWlnaHQ= IEdyYWRl 2Yo= IHNvdW5kaW5n IGxvY2tpbmc= IFJFTQ== U3RvcmU= IGV4Y2F2 IExpa2V3aXNl IExpZ2h0cw== IGVsYm93 IFN1cHBseQ== d2lj IGhhbmRzb21l MTk5NA== Q29sbA== IGFkZXF1YXRlbHk= IEFzc29jaWF0ZQ== IHN0cmlwcw== IGNyYWNrZG93bg== IG1hcnZlbA== IEt1bg== IHBhc3NhZ2Vz QEBAQA== IFRhbGw= IHRob3VnaHRmdWw= bmFtZXNl IHByb3N0aXR1dGlvbg== YnVzaW5lc3M= IGJhbGxpc3RpYw== cGVyc29uYWw= Y2ln aXphdGlvbmFs Um91bmQ= IMKgIMKgIMKgIMKg IENvbGVtYW4= IGFkbWl0dGluZw== IFBsdWc= IGJpdGNvaW5z IFN1eg== IGZhaXJuZXNz IHN1cHBsaWVy IGNhdGFzdHJvcGhpYw== IEhlbGVu b3F1 TWFyYw== IEFydGljbGVz Z2ll IGVuZGFuZ2VyZWQ= IGRlc3Rpbnk= IFZvbHQ= b2xpYQ== YXhpcw== IGNoZWF0 IHVuaWZpZWQ= SUNP cXVvdGU= MzAy IFNlZA== IHN1cHByZXNzaW9u IGFuYWx5emluZw== IHNxdWF0 IGZpZ3VyaW5n IGNvb3JkaW5hdGVz IGNodW5rcw== IDE5NDY= IHN1YnA= IHdpa2k= IEZvcmJlcw== IEp1cGl0ZXI= IEVyaWs= aW1lcg== IENvbW1lcmNpYWw= XCk= IGxlZ2l0aW1hY3k= IGRlbnRhbA== IE1lYW4= IGRlZmljaXRz NTUw T3JpZ2luYWxseQ== IEhvcnJvcg== IGNvbnRhbWluYXRpb24= bGxhaA== IGNvbmZpc2M= IENsYXJl VEI= IEZhaWxlZA== YW5lZA== IHJ1bGVy IENvbnRyb2xsZXI= IGZlbWluaXN0cw== Rml4 Z2F5 MjA3 IHJhYmJpdA== VGhpcmQ= b3dudG93bg== IGdsdWU= IHZvbGF0aWxl IHNoaW5pbmc= IGZvbGw= IGltcGFpcmVk IHN1cGVycw== 5og= IGNsdXRjaA== mumGkg== IHByb2xldA== ICgh IHllbGxlZA== IEtpZXY= IEVybg== IFNob2Nr S0I= IHNpdHVhdGVk cXVlcnk= IE5hcw== IGFubmV4 Y2hhcmFjdGVy IEhvbGlkYXk= IGF1dG9tYXRpb24= IEppbGw= IFJlbWFzdGVyZWQ= IGxpbmVt IHdpbGRlcm5lc3M= IEhvcml6b24= IEd1aW5lYQ== QVo= IG1haW5sYW5k IHNlY3JlY3k= TEVBU0U= IHB1bms= IFByb3ZpbmNl KCks U3BlZWQ= IGhhbmRpbmc= IFNlYmFzdA== U2ly cmFzZQ== IGpvdXJuYWxz IGNvbmdlc3Q= IFR1dA== aXJyZWw= IHNjaGl6b3BocmVuaWE= IG1pc29neW4= aGVhbHRoeQ== SXJvbg== IHJlYWN0ZWQ= LSQ= MjUy IHBsdXJhbA== IHBsdW0= IGJhcmdhaW4= IGdyb3VuZGVk ZmluZGVy IGRpc3Nl IExheg== T09E IGF0cm9j RmFjdG9yeQ== IG1pbmlvbnM= IG9yaQ== IEJyYXZl IFBSRQ== IE15YW5tYXI= IEhvZA== IGV4cGVkaXRpb24= IGV4cGxvZGU= IENvb3Jk IGV4dHI= IEJyaWVm IEFESEQ= IGhhcmRjb3Jl ZmVlZGluZw== IGRpbGU= IEZydWl0 IHZhY2NpbmF0aW9u IE1hbw== b3NwaGVyZQ== IGNvbnRlc3Rz LXw= IGZyZW4= aXNwaGVyZQ== Um9t IFNoYXJw IFRyZW5k IGRpc2Nvbm5lY3Q= 4oCi4oCi IHBlcnNlY3V0aW9u RWFydGg= IGhlYWx0aGllcg== Mzg0 IGNvYg== IFRyaW5pdHk= T1dT QU5O IHNwZWNpYWx0eQ== IGdydQ== IGNvb3BlcmF0aXZl d2h5 U3RhcnRpbmc= IElzc3Vlcw== c3RyZQ== ZW5zb3I= IDE4NQ== QWR2 IT8= IFJldmVs ZW1pYQ== IEh1bGs= IGNlbGVicmF0aW9ucw== IFNvdQ== cmF1ZA== IEtsZWlu IHVucmVhbA== Y29udGV4dA== IHBhcnRuZXJzaGlwcw== IGFkb3B0aW5n dGljYWw= IHNwbGFzaA== IEhlemJvbGxhaA== Y2F0ZWdvcnk= Y3ljbG9w eHRvbg== IERvdA== dXJkeQ== dHo= IGVudmVsb3Bl IE5M 4pU= IHdoZXJlaW4= U3BlYw== MTg0 IHRlbGV2 YWxpYXRpb24= IG15dGhz 5bA= IHJpZ29yb3Vz IGNvbW11bmljYXRpbmc= IG9ic2VydmVy IHJlaGU= IFdhc2g= IGFwb2xvZ2l6ZWQ= IFRpbg== IGV4cGVuZGl0dXJlcw== d29ya2Vycw== ZG9jdW1lbnQ= IGhlc2l0YXRl IExlbmlu IHVucHJlZGljdGFibGU= IHJlbmV3YWw= Y2xlcg== b2tpYQ== IENPTlQ= IHBvc3RzZWFzb24= VG9rZW5z IGV4YWNlcmI= IGJldHRpbmc= IDE0Nw== IGVsZXZhdGlvbg== V29vZA== IFNvbG9tb24= MTk0 MDA0 b3V0cHV0 IHJlZHVuZA== IE11bWJhaQ== IHBI IHJlcHJvZHVjZQ== IER1cmF0aW9u TUFY IGJvZw== Q0JT IEJhbGFuY2U= IFNndA== IFJlY2VudA== IGNk IHBvcHBlZA== IGluY29tcGV0 cHJvcA== YXlhbg== Z3V5 UGFjaWZpYw== IHR5cg== IHt7 IE15c3RpYw== IERhbmE= IG1hc3R1cmI= IGdlb21ldHJ5 w6I= IENvcnJlY3Q= IHRyYWplY3Rvcnk= IGRpc3RyYWN0ZWQ= IGZvbw== IFdlbHNo THVj bWl0aA== IHJ1Z2J5 IHJlc3BpcmF0b3J5 IHRyaWFuZ2xl IDIxNQ== IHVuZGVyZ3JhZHVhdGU= IFN1cGVyaW9y Y2hhbmdpbmc= Xy0= IHJpZ2h0bHk= IHJlZmVyZWU= IGx1Y3JhdGl2ZQ== IHVuYXV0aG9yaXplZA== IHJlc2VtYmxlcw== IEdOVQ== IERlcmJ5 IHBhdGh3YXlz IExlZA== IGVuZHVyYW5jZQ== IHN0aW50 IGNvbGxlY3Rvcg== RmFzdA== IGRvdHM= IG5hdGlvbmFscw== IFNlY3VyaXRpZXM= IHdoaXA= UGFyYW0= IGxlYXJucw== TWFnaWM= IGRldGFpbGluZw== bW9vbg== IGJyb2FkY2FzdGluZw== IGJha2Vk MjY1 aG9sbQ== IFNhaA== IEh1c3NlaW4= IENvdXJ0ZXN5 MTc0 IDE0Ng== IGdlb2dyYXBoaWM= cGVhY2U= IGp1ZGdpbmc= IFN0ZXJu QnVy IHN0b3J5bGluZQ== R3Vu IFN0aWNr MjQ1 MzA3 44K044Oz IEFkbWluaXN0cmF0b3I= IGJ1cm50 IHBhdmU= Y2hvZXM= RXhlYw== IGNhbXB1c2Vz UmVzdWx0 IG11dGF0aW9ucw== IENoYXJ0ZXI= IGNhcHR1cmVz IGNvbXBhcmVz IGJhZGdl U2NpZW50 IGVyYWQ= aWVyeQ== b2k= ZXR0ZXM= IEVzdGF0ZQ== IHN0cmFw IHByb3VkbHk= IGZyaWVk IHdpdGhkcmF3bg== IFZveQ== cGhvbnk= SXRlbXM= IFBpZXJjZQ== YmFyZA== IGFubm90YXRpb24= YW50b24= aWxsb24= SW1wcm8= Li4uKQ== IGhhcHBpZXI= LS0tLS0t YWRqdXN0 IHN0YWZmZXJz IGFjdGl2aXNt IHBlcmY= IGFscmlnaHQ= TmVlZA== IGNvbW1lbmNl IG9waW9pZA== IEFtYW5kYQ== RXM= IFBhcnM= IEthdw== V29ya3M= MjQ4 IGluZG8= dGM= ZW5kYW50 IE1vdG8= IGxlZ2FsaXphdGlvbg== T1RF IHRhc2tlZA== IHRzcA== IEFDVElPTlM= MTY2 IHJlZnJlc2hpbmc= IE5S IFBlcmV6 IGluZnJpbmdlbWVudA== U1k= TGlzdGVu aW5uaW5n a3U= IHJvdGF0ZQ== cHJvZ3JhbQ== YXJhaA== RGVzaWdu ICjCow== IHN0b3Jpbmc= IHdhcnJhbnRz IGp1ZGdlbWVudA== IEJyaXN0 dXN1YWxseQ== cGhvdG8= IFJhbg== IFBpbmU= IG91dHJhZ2VvdXM= IFZhbGVudGluZQ== bHVlbmNl IEV2ZXJ5Ym9keQ== QWx0ZXJu IHJlbGV2YW5jZQ== IHRlcm1pbmF0ZWQ= IGRlc3NlcnQ= IGZ1bGZpbGxlZA== IHByb3NlY3V0ZWQ= IFdvcmRz IG1pZ3JhbnQ= IGN1bHRpdmF0aW9u w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgg== aWRlbGl0eQ== IFZlcm4= IExvZ2lu IG1ldGFwaG9y IFRpcA== IHJlY3J1aXRz IFBpZw== cmliaW5n IGVudGh1c2lhc3Rz ZXhwZXI= IGZyaWdodGVuaW5n IEhhaXI= YW5zb24= c3RyYXRl IGhp SGVpZ2h0 IG93bmluZw== bm9uZQ== IGRpc2xpa2U= IGtuaXZlcw== cGhlcmQ= IGxvdWRseQ== IEFQSXM= RGlzcGxheQ== IExhYw== IFVTUw== YWJs dmVyYWdlcw== SmV3 IDE3Mg== IEhpc3RvcmljYWw= YXRvb24= IFBoeXNpY3M= aW50ZXJu IHdhcm10aA== IHRvcHA= RE0= IGd1bm1hbg== IGVtcGVyb3I= b2Rp 44Oj aW5hdG9yeQ== IFJpYg== IDEzMQ== IFNhdHVybg== IFNoaW5pbmc= IHdha2luZw== UXVvdGVz IGNvbWVkaWFu ZW5iZXJn wr0= IGJlbGlldmVycw== IHBhcGVyd29yaw== Y3VzdG9t IGxldg== IGxhbWVudA== IHBvdXJpbmc= MjIy cG9saXRpY2Fs IFN1cHBsZW1lbnQ= bWFpZA== IGNydWVsdHk= IHRyZWFk eXNpY3M= QXc= cml0ZXM= IG1vZGlmaWVy IFBvc2l0aW9u QWRhbQ== bGI= dWJz IGltcGVyZmVjdA== IGNsdXN0ZXJz IEVuZ2luZWVy IENoZXJyeQ== IGluYXVndXJhdGlvbg== IFNhdQ== IGVtYm9kaW1lbnQ= IFVuY2xl IG92ZXJy IGV4cGxvc2lvbnM= Y3VsZQ== IFByaW5jZXRvbg== IEFuZHJlYQ== IGluY29ycmVjdGx5 IGVhcm5lc3Q= IHBpbGdy IFNwcmludA== IHNsZWV2ZQ== IGhlYXJz IEFtYXppbmc= IGJyb3dzaW5n YWdpbg== IGhvbWVsYW5k IGhhdw== IGRpdmluZw== aXN0ZXJlZA== MTc4 IGJhcmdhaW5pbmc= IEFyY2FkZQ== IGRlbGVnYXRl dGVyc29u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== IEphY2tzb252aWxsZQ== Mjc1 IHN0YWdu IGFkYW0= IFNoZXJtYW4= Q0I= IHN1YnVyYg== IEZvb2Rz IGNvbnZlcnRpbmc= IEFyaXN0 IGNoYW1iZXJz bG92ZQ== IGFtaW5v IEdhbg== IG1hZG5lc3M= bWM= IFVTRQ== ZGVmaW5lZA== IHVsdHI= aW5kdXN0 IHdvbHZlcw== bGFuY2U= QWRkaXRpb25hbGx5 IGNyYWNrcw== YXNpYQ== IFJlYXNvbg== IFB1bXA= IGFjY2lkZW50YWw= IExhc2Vy IFJpZA== IGluaXRpYWxpemVk ZWxsaQ== IHVubmFtZWQ= IG5vdW4= IFBhc3NlZA== IGhvc3RhZ2U= IEV0aGlvcA== c2hpcnRz IHVucmVs IEVtYmFzc3k= IDE5NDE= IGF0b21z IHB1cnBvcnRlZA== MTY0 IEZp IGdhbGxvbnM= IE1vbmljYQ== IHBn ZW5tZW50 IHNvcnRlZA== IEdvc3BlbA== IGhlaWdodHM= IHRyYWNlZA== IHVuZGVyZ29pbmc= U2hlbGw= IHNhY2tz IHByb3BvcnRpb25z IGhhbGx1Yw== Rm9udA== YWNldA== IHdhcm1lcg== IElOVEVS IGdyYWJiaW5n UGx1Zw== IHJlYWxpemF0aW9u IEJ1cmtl IGVuY2hhbnQ= QVRFUg== IFNlZWQ= IGFidW5kYW50 Rk0= IGNpdmlj VnM= aXNp IHZvdw== IHJlcGVy IFBhcnRuZXJzaGlw IHBlbmV0cmF0aW9u IGF4ZQ== IHNoYXR0ZXJlZA== IFpvbWJpZXM= IHZpbnls IEFsZXJ0 ZW9u IG9ibGlnZWQ= IElsbHVzdA== IFBsYXph IEZyb250aWVy IGRhdmlkamw= IFNlcmlhbA== IEhhdg== IE51dHJpdGlvbg== Qmk= IOKWiA== IEpheXM= bGludXg= IGh1cnJ5 IHZveQ== IGhvcGVsZXNz IFN0ZWFsdGg= IOOB ZXNzb3Jz dHRsZQ== Ym9yZw== IFNhZmFyaQ== ZmVsbA== IHdhcnk= ZHVl IEFib3Zl SGE= RUxM IG5vdG9y IFdvbg== VG9v IG9jY3VwYXRpb25z IHBvc3Nlc3Npb25z IGludml0aW5n IHByZWRhdG9ycw== IGFjY2VsZXJhdGVk IDE1Nw== dXRlcnRl IEN1YmU= ZWFzdA== YWNjb3VudA== R2l2ZQ== IHRyYW5zcGxhbnQ= cmVkaWVudHM= aWRhYmxl IHNjcmVlbnNob3Rz IEd1bmQ= IEZT IHRyYXZlbGVycw== IHNlbnNvcnk= IEZpYXQ= IFJvY2tldHM= jos= X3s= RnJpZW5k IGNoYXJtaW5n QUxT IGVuam95bWVudA== bXBo IDUwMDA= IFJFRw== 2YY= Ymlh IGNvbXBpbGF0aW9u cm9zdA== IFZQ IFNjaG5l MjAxOQ== IGNvcHlpbmc= TU9SRQ== IEZsb3Jl ZmFsbHM= MjE1 dG90YWw= IGRpc2NpcGxlcw== ZG91Ymxl IGV4Y2VlZGluZw== IHNtYXNoZWQ= IGNvbmNlcHR1YWw= IFJvbWFuaWE= IEJyZW50 IElDRQ== IFRvdQ== IGdyYXA= IG5haWxz MTg5 44OY IHByb2N1cmU= ZXVy IGNvbmZpcm1pbmc= IENlYw== YXdp IEVkZW4= IG5n IGVuZ2luZWVyZWQ= YXRpY3M= IGhvb2tlZA== IGRpc2d1c3Rpbmc= IE11cmRlcg== 44K/ TGlicmFyeQ== IDE2OA== QWxtb3N0 aGVtYXRpYw== TWVudQ== IE5vdHJl IEp1cg== IGtpZG5hcHBlZA== IGhhY2tlcg== IEphZGU= IGNyZWVweQ== IGRyYXdpbmdz IFNwb25zb3I= IGN5Y2xpc3Rz IEdvYmxpbg== IG9wdGltaXplZA== IHN0YWdlZA== IE1jRA== YmV0d2Vlbg== QWdl ZW5v U2V4 IFdpZGU= bmluZ3M= YXZpcw== IGluY2FwYWJsZQ== IEtvYg== IHJld2FyZGluZw== IExvbmU= b2xlc2NlbnQ= IGNvbnRyYWN0ZWQ= IHN0aWNreQ== Sm9zZQ== QmFsbA== ZmVzdA== IElucHV0 IFJlY2VudGx5 IHRvbWF0 c3F1YXJl QXBwbGljYXRpb24= IG5pdHJvZ2Vu IGR1cGxpY2F0ZQ== IFJlY29u IERlYXI= TG9uZG9u IGludHJh IGRvY2s= IG91dHJlYWNo IE1pbGxpb24= IG1hbW1hbHM= YW1wdG9u VkFM IHNuYXBz IGRvcw== IFdob2xl IFJlYWR5 VHJ5 IFdpbm5pcGVn ZWFyYW5jZQ== IGluY3VycmVk cmVuY2hlZA== IE5TVw== aWxvdA== cmFpbmU= IGN1YmU= Z290 IHJ1bndheQ== ZXRlcm1pbmVk IEhhd2tz IHN1cnZpdm9y IFdpc2g= IERpbg== IERFRg== IFZhdWx0 MTg3 IG11c2hyb29tcw== IGNyaXNw YmV5 IERpc2NvdmVyeQ== IGRldmVsb3BtZW50YWw= IHBhcmFkaWdt IGNoYW90aWM= IFRzdQ== IDMzMw== Ym9ucw== IGJhY3RlcmlhbA== IGNvbW1pdHM= IGNvc21pYw== IG1lZ2E= b2NhdGl2ZQ== IFBhaW50 b3Bob2JpYw== IHZhaW4= IGNhcnZlZA== IFRoaWVm IEd1bA== b3dzaGlw IGNpdGVz IEVkaW5idXJnaA== IGRpbWluaXNoZWQ= IGFja25vd2xlZGdlcw== IEtpbGxz IG1pY3Jvdw== IEhlcmE= IHNlbmlvcnM= IHdoZXJlYnk= SG9w YXRyb24= IHVuYXZhaWxhYmxl IE5hdGU= IDQ4MA== IHNsYXRlZA== IFJlYmVjY2E= IEJhdHRlcnk= IGdyYW1tYXI= IGhlYWRzZXQ= IGN1cnNvcg== IGV4Y2x1ZGluZw== YW55ZQ== YXVuZGVyaW5n ZWJpbg== IGZlYXNpYmxl IFB1Ymxpc2hpbmc= IExhYnM= IENsaWZm IEZlcnJhcmk= IHBhYw== dmlzaWJsZQ== bWFya2Vk cGVsbA== IHBvbGl0ZQ== IHN0YWdnZXJpbmc= IEdhbGFjdGlj IHN1cGVyc3Q= IHBhcmFu IE9mZmljZXJz 44CB IHNwZWNpZmljcw== dWx1cw== MjM5 IFBhc3Rl QU1Q IFBhbmFtYQ== IERlbGV0ZQ== YW5ndWFyZA== cmVzdHJpYWw= IGhlcm9pYw== IER5 2KfZhA== IGluY3VtYmVudA== IGNydW5jaA== dHJv IHNjb29w IGJsb2dnZXI= IHNlbGxlcnM= dXJlbg== IG1lZGljaW5lcw== IENhcHM= IEFuaW1hdGlvbg== b3h5 IG91dHdhcmQ= IGlucXVpcmllcw== MjI5 IHBzeWNob2xvZ2lzdA== IFNhc2s= ZXZpbA== IGNvbnRhbWluYXRlZA== 44Ko aGVyZW5jZQ== IGJyYW5kZWQ= IEFiZHVs emg= IHBhcmFncmFwaHM= IG1pbnM= IGNvcnJlbGF0ZWQ= ZXJi IGltcGFydA== IG1pbGVzdG9uZQ== IFNvbHV0aW9ucw== b3RsZQ== IHVuZGVyY292ZXI= IG1hcmNoZWQ= IENoYXJnZXJz ZmF4 IFNlY3JldHM= IHJ1dGg= d2VhdGhlcg== IGZlbWluaW5l IHNoYW0= IHByZXN0aWdpb3Vz aWdnaW5z IHN1bmc= aGlzdG9yeQ== ZXR0bGU= Z2dpZQ== IG91dGRhdGVk b2xhbmQ= IHBlcmNlcHRpb25z IFNlc3Npb24= IERvZGdlcnM= dWo= IEVORA== RG9j IGRlZmljaWVuY3k= R3JhbmQ= IEpva2Vy IHJldHJvc3BlY3Q= IGRpYWdub3N0aWM= IGhhcm1sZXNz IHJvZ3Vl IEF2YWw= RXF1 IHRyYW5zYw== IFJvYmVydHNvbg== IERlcGVuZGluZw== IEJ1cm5z aXZv IGhvc3RpbGl0eQ== RmVhdHVyZXM= k5g= IGRpc2NvbWZvcnQ= IExDRA== c3BlY2lmaWVk IEV4cGVjdA== MzQw IGltcGVyYXRpdmU= IFJlZ3VsYXI= Q2hpbmVzZQ== IHN0YXRld2lkZQ== IHN5bW0= IGxvb3Bz IGF1dHVtbg== Tmljaw== IHNoYXBpbmc= IHF1b3Q= IGNoZXJyeQ== IENyb3NzcmVm 6Kaa6YaS U3RhbmRhcmQ= aGVlZA== IERlbGw= IFZpZXRuYW1lc2U= IG9zdA== IFZhbGt5cmll T0E= QXNzYWQ= IHJlYm91bmQ= IFRyYWZmaWM= cGxhY2Vz 5pg= IEJ1Yw== MTcy IHNoZWx0ZXJz IGluc2lzdGluZw== IENlcnRhaW5seQ== IEtlbm5ldGg= IFRDUA== IHBlbmFs IFJlcGxheQ== aGVhcmQ= IGRpYWxlY3Q= aXph IEZZ aXRjaGVy IERM IHNwaXJhbA== IHF1YXJ0ZXJiYWNrcw== IGh1bGw= IGdvb2dsZQ== IHRvZGQ= IFN0ZXJsaW5n IFBsYXRl IHNweWluZw== bWJvbA== IFJlYWxt IFByb2NlZA== IENyYXNo IHRlcm1pbmF0ZQ== IHByb3Rlc3Rpbmc= Q2VudGVy Z3VpZGVk IHVuY292ZXI= IGJveWNvdHQ= IHJlYWxpemVz c291bmQ= IHByZXRlbmRpbmc= IFZhcw== MTk4MA== IGZyYW1lZA== IDEzOQ== IGRlc2NlbmRlZA== IHJlaGFiaWxpdGF0aW9u IGJvcnJvd2luZw== IEJ1Y2g= IGJsdXI= Um9u IEZyb3plbg== ZW56YQ== Q2hpZWY= IFBvb3I= IHRyYW5zbGF0ZXM= TUlO IDIxMg== SkVDVA== IGVydXB0ZWQ= IHN1Y2Nlc3Nlcw== U0VD IHBsYWd1ZQ== IGdlbXM= ZG9tcw== IHN0cmV0Y2hlcw== IFNweQ== IHN0b3J5dGVsbGluZw== Q3JlZGl0 IFB1c2g= IHRyYWN0aW9u IGluZWZmZWN0aXZl IEx1bmE= IHRhcGVz IGFuYWx5dGljcw== ZXJjaXNl IHByb2dyYW1tZXM= IENhcmJvbg== IGJlaG9sZA== aGVhdnk= IENvbnNlcnZhdGlvbg== IEZJUg== IHNhY2s= dGVybWlu cmlja3M= IGhvdXNlZA== IHVudXN1YWxseQ== SWNl IGV4ZWN1dGluZw== IE1vcm9j ZWRheQ== IGVkaXRpb25z IHNtYXJ0ZXI= IEJB IG91dGxhdw== IHZhbmlzaGVk aWJh QUxTRQ== IFNpbHZh MjM4 Q291bGQ= IHBoaWxvc29waGVy IGV2YWN1YXRlZA== U2VjcmV0 MTQy IHZpc2Fz 44Ks IE1hbHQ= IENsZWFybHk= IE5pZ2Vy IENhaXJv IEZpc3Q= Mzgw IFhNTA== YXV0bw== aXRhbnQ= IHJlaW5mb3JjZWQ= UmVjb3Jk IFN1cnZpdm9y R0h6 IHNjcmV3cw== cGFyZW50cw== IG9jZWFucw== bWFyZXM= IGJyYWtlcw== dmFzaXZl IGhlbGxv IFNJTQ== cmltcA== IG9yZQ== IEFybW91cg== MjQ3 IHRlcnJpZmlj IHRvbmVz MTQx IE1pbnV0ZXM= RXBpc29kZQ== IGN1cnZlcw== IGluZmxhbW1hdG9yeQ== IGJhdHRpbmc= IEJlYXV0aWZ1bA== TGF5 IHVucG9w dmFibGU= IHJpb3Rz IFRhY3RpY3M= YmF1Z2g= IENvY2s= IG9yZ2FzbQ== IFNhcw== IGNvbnN0cnVjdG9y ZXR6 R292 IGFudGFnb24= IHRoZWF0 IGRlZWRz aGFv Y3V0cw== IE1jQ2w= IHVt IFNjaWVudGlzdHM= IGdyYXNzcm9vdHM= eXNzZXk= Il09Pg== IHN1cmZhY2Vk IHNoYWRlcw== IG5laWdoYm91cnM= IGFkdmVydGlz b3lh IG1lcmdlZA== VXBvbg== IGdhZA== IGFudGljaXBhdGU= QW55d2F5 IHNsb2dhbg== IGRpc3Jlc3BlY3Q= SXJhbg== IFRC YWN0ZWQ= IHN1YnBvZW4= bWVkaWF0ZWx5 T09PTw== IHdhaXZlcg== IHZ1bG5lcmFiaWxpdGllcw== b3R0ZXN2aWxsZQ== IEh1ZmZpbmd0b24= Sm9zaA== IERI TW9uZGF5 IEVsbGVu S25vdw== eG9u aXRlbXM= MjI4 IGZpbGxz IE5pa2U= IGN1bXVsYXRpdmU= YW5kYWxz SXI= IOw= IGZyaWN0aW9u aWdhdG9y IHNjYW5z IFZpZW5uYQ== bGRvbQ== IHBlcmZvcm1lcnM= UHJpbQ== IGJpZGRpbmc= TXVy IGxlYW5lZA== IFByaXg= YWxrcw== IFvigKZd IFR3aXRjaA== IERldmVsb3Blcg== IEdpcg== IGNhbGxiYWNr QWJzdHJhY3Q= IGFjY3VzdG9tZWQ= IGZyZWVkb21z IFBH dXJhY3k= IGx1bXA= aXNtYW4= LCwsLA== MTk5Mg== IFJFRA== IHdvcm0= TWF0Y2g= IFBsYXRpbnVt SUo= IE93bmVy VHJpdmlh Y29tcGw= IG5ld2Jvcm4= IGZhbnRhcw== T3du IDE5NTk= IHN5bXBhdGg= IHViaXF1 IG91dHB1dHM= IGFsbGV2 IHByYWc= S2V2aW4= IGZhdm9ycw== IGJ1cmlhbA== IG51cnQ= c29sZXRl Y2FjaGU= IDE1Ng== IHVubG9ja3M= dGVjaG4= TWFraW5n IGNvbnF1ZXI= YWRpYw== 5pY= IGVsZg== IGVsZWN0b3JhdGU= IEt1cmRz IFN0YWNr IFNhbXVyYWk= IOKYhQ== IHt9 IFNhaWQ= IEZhbGxvdXQ= IGtpbmRuZXNz IEN1c3RvbXM= IEJvdWxldmFyZA== IGhlbGljb3B0ZXJz b3RpY3M= IFZlZ2V0 Y29tbWVudA== IGNyaXRpY2lzZWQ= IHBvbGlzaGVk IFJlbWl4 IEN1bHR1cmFs IHJlY29ucw== IGRvaQ== YXRlbQ== U2NyZWVu IGJhcnJlZA== Q29tbWVudHM= IEdlbmVyYWxseQ== IHNsYXA= NzIw VmFyaQ== cGluZQ== IGVtcHQ= IGhhdHM= IFBsYXlpbmc= bGFi YXZlcmFnZQ== Zm9ybXM= IENvdHRvbg== IGNhbnM= IERPTg== IFNvbWFsaWE= Q3J5cHQ= IEluY3JlYXNlcw== RXZlcg== bW9kZXJu IHN1cmdlb24= MzAwMA== IHJhbmRvbWl6ZWQ= PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== QmVybg== aW1wbA== IENPUg== IHByb2NsYWlt dGhvdXNl IHRvZXM= IGFtcGxl IHByZXNlcnZpbmc= IGRpc2JlbA== Z3JhbmQ= QmVzaWRlcw== IHNpbGs= IFBhdHRlcm4= aG0= IGVudGVycHJpc2Vz IGFmZmlkYXZpdA== IEFkdmlzb3J5 IGFkdmVydGlzZWQ= IFJlbGlnaW91cw== c2VjdGlvbnM= cHN5Y2g= IEZpZWxkcw== YXdheXM= IGhhc2h0YWc= IE5pZ2h0bWFyZQ== IHZhbXBpcmU= IGZvcmVuc2lj cm9zc292ZXI= bmFy IG5hdnk= IHZhY2FudA== IER1ZWw= IGhhbGx3YXk= IGZhY2Vib29r aWRlbnRhbGx5 IE5SQQ== IG1hdHQ= IGh1cnJpY2FuZQ== IEtpcmJ5 IFB1enpsZQ== IHNraXJ0 b3VzdA== ZHVsbGFo IGFuYWxvZ3k= aW5pb24= IHRvbWF0b2Vz IE5W IFBlYWs= IE1leWVy IGFwcG9pbnRtZW50cw== IG1hc2M= IGFsbGV5 cmVoZW5k IGNoYXJpdGllcw== IHVuZG8= IGRlc3RpbmF0aW9ucw== IFRlc3Rpbmc= Ij48Lw== IGRlc3RpbmVk IGltcGxlbWVudHM= IEhhcm9sZA== UkVDVA== IG9wdGltaXphdGlvbg== IGtpbG9tZXRyZXM= IGNtZA== IGltcGFpcm1lbnQ= IHVuc3VjY2Vzc2Z1bA== IHN3aWZ0bHk= IEdsYXNnb3c= YXJ0ZW4= IFNoYXJlcw== IEFuc3dlcg== IEFsYnVt IG51dHJpdGlvbmFs 44OW IEZ1dA== IGJsb2M= IE5GQw== IHdob2xlc2FsZQ== IENX IG5lZ2xlY3RlZA== IGxhdW5jaGVy IGFubm91bmNlbWVudHM= T1VMRA== Y29tYg== IHJvdGF0aW5n IHJlc3Rz IFRpY2tldA== Y2hlZGVs TG91 IFZpYw== ICIn IHRlbXBsYXRlcw== IHJlcGxhY2Vz QXJj Ojo6Og== IEdpbGJlcnQ= IGlsbG5lc3Nlcw== IHNjaGVkdWxlcw== IGhldGVyb3NleHVhbA== TElORQ== IGhlcmVpbg== IGNvZXJj IGRlY3JlYXNpbmc= IGRlcG9ydGF0aW9u c3Vkbw== IEluZGlnZW5vdXM= IHdlaWdocw== QWxvbmc= Jyk7 IEJlbmdhbHM= NzA3 IGpvaW50cw== dmVydHM= IDE0OQ== bmFpcmU= IHNpbXBsZXN0 IGxvcmU= MTA4MA== ZmljdGlvbg== IERhdGFiYXNl IHJlc2VydmF0aW9u IHNvdQ== IHNhbmN0dWFyeQ== YXVkaW8= YXBsZQ== IHZlZ2V0YXJpYW4= IGFudGljaXBhdGlvbg== bWljcm8= IGVuZHVyaW5n IGRlcGFydGVk IHNpZGV3YWxr IHByb2hpYml0cw== IEZvbnQ= IGNvbXB1dGU= IFNlY3Q= IDE1OA== QmF0dGxl IGJvbWJlcg== IGRpc3RyYWN0aW9u IGVuZHVyZWQ= IHByYWN0aXRpb25lcnM= IGRpc3R1cmJlZA== IGRyYW5r b3JkZXJlZA== IHN1cnByaXNlcw== c2VhdA== U2VjdXJpdHk= IFdpc2RvbQ== b2dv IHN1YnBhcmFncmFwaA== IFBlbmluc3VsYQ== IE9yaWdpbnM= aXJlbg== IFBhdg== aWdnbGU= IGdyYXRpdHVkZQ== IEdyYXZpdHk= b3ZlcnR5 aW1hbg== Y3Ry IENhZXNhcg== Y291bGQ= Z2Vt IHNraWVz IGNoYW1w IGFncmVlaW5n RmFtaWx5 RGl2 MTc2 IG1lc3N5 dW1wdGlvbg== RmVkZXJhbA== ZXJubw== IENoYXQ= QmV5b25k IGRldm90ZQ== IFdhbHNo IGR1bXBlZA== IGFjY3VtdWxhdGlvbg== c3RhZA== aGliaXRpb24= IHNtb2tlcnM= IGluc3BlY3Rvcg== RnJlbmNo aXNzYW4= IFZpdGE= IHJlc2VhcmNoaW5n UkFN IENlbHRpY3M= IGNsb2Fr IFRlcnJh TWFyeQ== c29sZA== IERPTQ== bW9kcw== SW50ZWw= IG11bHRpdHVkZQ== IEltcHJvdmVk IHJlbGlhbmNl IGFydGlmYWN0 IGFsYXJtaW5n UHJvbQ== aG9u VElPTg== bWVkaXVt IHJlZmxleA== IEV4Y2Vs IHdlYWtlbmVk MTYz MjI0 IGNvc3R1bWVz IHVuaXF1ZWx5 IHNvcnJvdw== IG1hbnNpb24= d3A= IHNhbHY= IEdyb3Zl YnNw IFNuaXBlcg== IFNoaXBwaW5n IFBPVw== IHVuZGlz IGJyYW5kaW5n R2lybA== IEFobWFk IExha2Vz IENvcmV5 IGluaGVyaXRhbmNl ZW5lcnk= IHBhY2tpbmc= IFByZXN0 RGVzdA== Rlc= IHJlZ3VsYXRvcg== bG9ja2Vk IGNvbnRlc3RlZA== IE1lbGlzc2E= IER1Yw== IHVucG9wdWxhcg== IHN0YWNrZWQ= IDE5MTc= IHllYXJseQ== IHN0YXJl IGFzc2Vzc2luZw== w7g= IGJldmVyYWdlcw== IGNvbXBldGl0aW9ucw== IHN0cmVuZ3RoZW5pbmc= YWxvbmc= IEx1ZA== IG1lbHRlZA== c3RhbmJ1bA== IGJvdW50eQ== RU5D IExhbmRz IGRlY2xhcmVz IGN1c3RvbWl6ZQ== IGNvbXBvc2l0ZQ== 44Os Q00= b2dyYXBoaWNz IFRlbXA= IGNvbnRlbmRlcg== IGluc2lnbg== IExBTg== IGRpc2FzdGVycw== aW5zcGlyZWQ= IGp1ZGdtZW50cw== dXN0YWluYWJsZQ== dXJzaW9u IHZhcmlhbmNl IFVsdGltYXRlbHk= IC0tLS0tLS0t dWFkb3I= IFJY IG1lbHRpbmc= IEV4dGVuZGVk IFR3ZQ== TWFqb3I= IEJpbA== IHN5cnVw cXVpY2s= IEhvbGRlcg== IGlubm9jZW5jZQ== VUxF IE1pZ2h0 OTk5OQ== IGZhbA== IGNvbnRpbnVpdHk= IDE5NTM= IEJT c3RpbGw= TGF0 IEFidXNl IHVuc3VwcG9ydGVk eHh4eHh4eHg= IGluc3RpdHV0ZQ== IGZyYWdtZW50 IFBlcA== V2VzdGVybg== IENhdXNl IEZyYWc= IEFycw== 4KU= YXN0aWNz IGJpc2hvcA== IGNyb3NzZXM= IDE1NA== IFVwZ3JhZGU= IG1pdGlnYXRl IFJheW1vbmQ= TW9kcw== IHRvbWF0bw== IHN0dW1ibGVk IGRpZmZlcnM= SW5pdGlhbA== IFJhc3BiZXJyeQ== IGlnbm9yZXM= IHRhbnQ= w6A= IHJlbGF5 IGJpc2V4dWFs IGNvbmZlc3Npb24= IGRlbWVudA== aW5hcw== IEhlYXRoZXI= cGxhdGZvcm0= ZHJpdmluZw== Ym91cmc= IE11c2g= IGh5c3Rlcg== RGV0YWlscw== IGRyaWZ0 IFdhbGQ= IEx1Y2tpbHk= b3Jm IGV4cGlyZQ== IFB1bmNo enltZQ== Z29sZA== IHVucGFpZA== IFRyZW50 IHVuYXJtZWQ= IGlsbGljaXQ= IFRvdHRlbmhhbQ== IHNtYXNo SW50ZXJuYXRpb25hbA== aW5rZXI= IHN0aW5n IFNhZGRhbQ== IEFSVA== IHRydXRocw== YmlydGg= IHNvYmVy IE5pdA== IGli IHVzYWJsZQ== IHN0YWNrcw== IFN5bHY= IG5vcnRoZWFzdA== IGRvbWluYXRpb24= IE1vdXI= RU5TRQ== IE1lYXN1cmU= IHByb2dyYW1tZXI= IDwt MTgy IENvbmRpdGlvbg== IGJhY2t5YXJk aXJsaW5n IEplYg== IENyZWVk IEhhbmc= IENPTVA= RkVS IElzaA== IGRldGVjdGl2ZXM= LS0tLS0tLS0tLS0tLS0t IE1lc3Nlbmdlcg== IGxvb3Bo IGdhdGV3YXk= MTUx IE1hdGVyaWFscw== IERU IGRvb21lZA== b2Rv IHNsaWNlcw== IGVtYWlsZWQ= IFBlcmw= IHJlbm92 VVRI b2R5bmFt IFNvdXRod2VzdA== Z2V0aWM= IFRQUA== IG9wdGltaXNt IFRvdw== dWxhdG9ycw== cHJvdGVjdGVk eWxlcw== wqs= IGV4aWxl ZW52 UHJvcA== IFppbW1lcm1hbg== 2Y4= Q2E= b21hbHk= 44OG IHJhaWxyb2Fk TGVl MjMy IHJlcGxpY2F0ZQ== IGNvbWZvcnRhYmx5 YWN0bHk= IHJhdg== IHRlbGVzY29wZQ== IGhvbmVzdHk= IFBlcHBlcg== IEJyaW5n IHJpY2hlc3Q= IG91dGRvb3Jz IGhhbGxz IGNvbnRlbmQ= SVNF IHN1Ym1pdHRpbmc= IG5haXZl YXJhdGlvbnM= IDE0Mw== IHBvaXNlZA== cmVzcG9uc2libGU= IHNvY2tz IFNrdWxs UXVlc3Rpb24= IGRpc2NvdmVyaWVz Sm9pbmVk IEVuZW1pZXM= IFdpcmVsZXNz IFJldmVuZ2U= IHB1enpsZXM= IGNlYXNlZA== Mjkw Y3JpcHRpb25z IENvbnNvbGU= IGJvaWxpbmc= IGRpc2NyZXA= IGRlZHVjdGlvbg== IGFyc2VuYWw= WFhYWA== IEFtc3RlcmRhbQ== cm94aW1hdGVseQ== IFNoYW5l IHBvc2luZw== IEFDTFU= IENvbXBhbmllcw== IHRoZW9sb2d5 IFVn cXVhcnRlcg== IEhhbms= Q29pbg== IEx2 IGFsbGVnYXRpb24= IEF2b2lk IGluZGVmaW5pdGVseQ== IGNvbW1vZGl0aWVz IGJyaWc= IE1hbml0 IHRlbnRo bWV0aG9k IEtuaWNrcw== IOKAjg== IGludm9rZWQ= RGlhbA== QVJB IGNhdWN1cw== MjI3 IEphYg== IG91bmNlcw== YmF5 IGJ1ZGR5 ZmFu MjM0 IEhpbA== YWRo IFRZ IElORA== IDE5Mzk= IGl0ZXJhdGlvbg== IEdvbnphbGV6 IFZlcnQ= IElP ZW1i cmVyYQ== ZW5jaA== IFJlcXVpcmVtZW50cw== IFdpbnM= IGxpdmVzdG9jaw== aG91cnM= IuKApg== YnJhbA== TWFyZw== IERvbmU= IHdhc3Rpbmc= aW5nZWQ= Z3JvdXBz IHdpc2hpbmc= IFR1bWJscg== IHRhcHBpbmc= IG5hdGlvbmFsaXNt IEJ5cg== IHNxdWFyZXM= IEFjdGlvbnM= 44Ol SW5zaWRl ZGVidWc= IGFwcGVuZA== IHN0dWJib3Ju IENpbmQ= VGVsbA== IHRlYXJpbmc= IFJleQ== b3Jj IERheXRvbg== IE5I IE1hZG5lc3M= Q2hhcmw= IE1vcnJpc29u ZmlsdGVy IGFjY3VzZQ== IC4v IHRvcnJlbnQ= IGRlY2xpbmVz Z2FsbGVyeQ== TWluZQ== IG5lZ290aWF0aW9u IEJhc2hhcg== b3BpYQ== MTk5Mw== ZW1vcnQ= IE5vdmVs IEZhbmc= ZXJzaXZl IEluc3RhbnQ= IHJvbGxlcg== QXJvdW5k IEVsZWN0aW9ucw== R2FtZXM= IGluZXhwZW5zaXZl IHdvcnM= IHZ1bA== IEhvbGU= IHVuYmVsaWV2YWJsZQ== IG5hdXNl IGVudHI= Ym9hdA== IFNURQ== IGJ1c2g= IEhhc3Nhbg== IHdv IHBhdXNlZA== IE1pZw== bGl2ZWQ= IHNjb3V0 IGxpdGg= UHVibGlzaGVk ZHVpbm8= Y29vbA== IGNpcmN1bGF0aW5n aWRhcw== IFBhbQ== dmlvbGVudA== IENyYXdmb3Jk dWRkbGU= IExldHRlcnM= R3VhcmQ= bW9ycGg= IHdhbmRlcmluZw== IHNvcGhvbW9yZQ== IHF1ZWVy IEJsaW5k cnVl IE1hcnJpYWdl RG9t IHBhZGRpbmc= IGZvbGRlcnM= IG1lYW5pbmdsZXNz IGNhbmRpZGFjeQ== YWZvcnQ= IHdoaXN0bGVibA== IElkZW50aWZpZWQ= IGNpZ2Fy IGhpZA== IER1YmFp IHBvc3R1cmU= IGhpa2luZw== IFRlcm1pbmFs TGVnZW5kYXJ5 IFRQ IEFUSw== IFN0YXJidWNrcw== IFJpb3Q= MTk5MQ== IEJvdHRvbQ== ZWZmaWM= IEV1Z2VuZQ== IFd5b21pbmc= IFJvY2t5 IHNhbG1vbg== IG1ldHJv IGJpbGF0ZXJhbA== IGNlbGVicmF0ZXM= TGVuZ3Ro YmlsbGlvbg== QmF0 IHJlbGVn IHBzZXVkbw== RFQ= IFJob2Rl UGFyZW50 cGxldGlvbg== IGF0dHJpYnV0 IHR1bmluZw== IE5PVEU= IFJlYmVs aWN1cw== RnVuZA== IGNvY2t0YWls IDUwMQ== IHNwb29u IGJydXRhbGl0eQ== IHVuaXRl IG1pY3JvYmk= IFJlaWNo cG9zaXRpdmU= IGFtYXplZA== IE5U RGVzYw== RUNUSU9O IGZhbHNlbHk= IEhpZ2hsYW5kZXI= IENyaXN0 IFZpY3Rvcmlhbg== IGRpc3RyaWJ1dGlvbnM= dGhlaXI= IEVpbnN0ZWlu IHBvZA== IGVwaWRlbQ== IGhlYXA= IFJhbmNo IGFudGhlbQ== IHJlYXBw IEF1YnVybg== IGNvbmN1cnJlbnQ= IFRocm91Z2hvdXQ= IFBPU1Q= 4pg= IGhvbWVtYWRl a2ljaw== QmVn IGNoYXNzaXM= Y291bnRlcg== IG1lcmdlcg== IGxhcHM= MjE3 dW5pb24= IFRyaWdnZXI= IGRlYmF0ZWQ= IHNpbGVudGx5 IHJlc3RyYWludA== QmFs MDAwMDAwMA== IGZvcm1pZGFibGU= IEZpbGlw IHNhY3JpZmljZXM= Rm9vZA== IGR3YXJm IFNlcXU= aW5pYW4= TW9yZW92ZXI= IHRhbmdpYmxl b3BzaXM= IE1pbmVjcmFmdA== IFJlZ2lzdHJhdGlvbg== b2Fu IHJlcHJlc2VudGF0aW9ucw== IHRoaXJzdA== IGNvcnA= aXJlbWVudA== TWFkZQ== bG9l PiI= Y2F0cw== Ki4= IGdlc3R1cmVz Z2VuZXJhbA== TGVhZ3Vl IHBhY2tldHM= IEluc3BlY3Rvcg== IEJlcmc= IGZyYXVkdWxlbnQ= IGNyaXRpY2l6ZQ== RnVu IGJsYW1pbmc= bmRyYQ== IHNsYXNo IEVzdG9u IHByb3Bvc2luZw== IHdoYWxlcw== IHRoZXJhcGlzdA== IHN1YnNldA== IGxlaXN1cmU= RUxE IENWRQ== IEFjdGl2aXR5 IGN1bG1pbg== c2hvcA== IERBWQ== aXNjaGVy IEFkbWlyYWw= IEF0dGFja3M= IDE5NTg= IG1lbW9pcg== IGZvbGRlZA== IHNleGlzdA== IDE1Mw== IExJ IHJlYWRpbmdz IGVtYmFycmFzc21lbnQ= IEVtcGxveW1lbnQ= d2FydA== Y2hpbg== IGNvbnRpbnVhdGlvbg== bGlh UmVjZW50bHk= IGR1ZWw= IGV2YWN1YXRpb24= IEthc2htaXI= IGRpc3Bvc2l0aW9u IFJpZw== IGJvbHRz IGluc3VyZXJz NDY3 TWV4 IHJldGFsaWF0aW9u IG1pc2VyeQ== IHVucmVhc29uYWJsZQ== cmFpbmluZw== SW1t IFBV ZW1lcg== IGdlbml0YWw= 44Kz IENhbmR5 IG9uaW9ucw== IFBhdHQ= bGluZXI= IGNvbmNlZGVk IGZh IGZvcmM= IEhlcm5hbmRleg== IEdlb2Zm ZGViaWFu IFRlYW1z IGNyaWVz IGhvbWVvd25lcnM= MjM3 QUJD IHN0aXRjaA== IHN0YXRpc3RpYw== IGhlYWRlcnM= IEJpb2xvZ3k= IG1vdG9ycw== IEdFTg== IExpcA== IGhhdGVz IGhlZWw= U2VsZg== aXBs RURJVA== b3J0aW5n IGFubm90 IFNwZWVjaA== b2xkZW1vcnQ= IEphdmFzY3JpcHQ= IExlQnJvbg== IGZvb3RwcmludA== IGZu IHNlaXp1cmVz bmFz aGlkZQ== IDE5NTQ= IEJlZQ== IERlY2xhcmF0aW9u IEthdGll IHJlc2VydmF0aW9ucw== TlI= ZmVtYWxl IHNhdHVyYXRlZA== IGJpYmxpY2Fs IHRyb2xscw== RGV2aWNl cGhvdG9z IGRydW1z 44OJ44Op44K044Oz TmlnaHQ= ZmlnaHRlcg== IEhhaw== cmliZXI= IGN1c2g= IGRpc2NpcGxpbmFyeQ== YmF1bQ== IEdI IFNjaG1pZHQ= aWxpYnJpdW0= IHNpeHR5 IEt1c2huZXI= cm90cw== IHB1bmQ= IFJhYw== IHNwcmluZ3M= IGNvbnZl QnVzaW5lc3M= RmFsbA== IHF1YWxpZmljYXRpb25z IHZlcnNlcw== IG5hcmNpc3M= IEtvaA== IFdvdw== IENoYXJsb3R0ZXN2aWxsZQ== ZWRv IGludGVycm9nYXRpb24= IFdvb2w= MzY1 QnJpYW4= IOKckw== IGFsbGVnZXM= b25kcw== aWRhdGlvbg== IEphY2tpZQ== eXU= IGxha2Vz IHdvcnRod2hpbGU= IGNyeXN0YWxz IEp1ZGE= IGNvbXByZWhlbmQ= IGZsdXNo IGFic29ycHRpb24= IE9D IGZyaWdodGVuZWQ= IENob2NvbGF0ZQ== TWFydGlu IGJ1eXM= IGJ1Y2tz IGFwcGVsbA== IENoYW1waW9uc2hpcHM= IGxpc3RlbmVy IERlZmVuc2l2ZQ== IGN6 dWRz IE1hdGU= IHJlcGxheQ== IGRlY29yYXRlZA== IHN1bms= IFZJUA== IEFuaw== IDE5NQ== YWFhYQ== Tm9ib2R5 IE1pbGs= IEd1cg== IE1r IFNhcmE= IHNlYXRpbmc= IFdpZA== VHJhY2s= IGVtcGxveXM= IGdpZ2FudGlj QVBQ 44Kn aW52ZW50b3J5 IHRvd2Vs YXRjaGU= bGFzdGluZw== IFRM IGxhdGVuY3k= IGtuZQ== QmVy bWVhbmluZw== IHVwaGVsZA== IHBsYXlncm91bmQ= IG1hbnQ= U2lkZQ== IHN0ZXJlbw== IG5vcnRod2VzdA== IGV4Y2VwdGlvbmFsbHk= IHJheXM= IHJlY3VycmluZw== RHJpdmU= IHVwcmlnaHQ= IGFiZHVjdA== IE1hcmF0aG9u IGdvb2RieWU= IGFscGhhYmV0 aHA= IGNvdXJ0cm9vbQ== cmluZ3Rvbg== b3RoaW5n VGFn IGRpcGxvbWF0cw== IGJhcmJhcg== IEFxdWE= MTgz MzMzMw== IG1hdHVyaXR5 IGluc3RhYmlsaXR5 IEFwYWNoZQ== ID09PQ== IGZhc3Rpbmc= IEdyaWQ= TW9kTG9hZGVy IDE1Mg== QWJz IE9wZXJhdGluZw== ZXR0aQ== IGFjcXVhaW50 RG9ubmVsbA== IEtlbQ== IEZvcmdl IGFybW9yZWQ= TWls IHBoaWxvc29waGVycw== aW52ZXN0 UGxheWVycw== 4og= IG15cmlhZA== IGNvbXJhZGVz Um90 IHJlbWVtYmVyaW5n IGNvcnJlc3BvbmRz IHByb2dyYW1tZXJz IEx5bm4= IG9saWc= IGNvaGVyZW50 eW5jaHJvbg== IENoZW1pY2Fs IGp1Z2c= cGFpcg== cG9zdHM= RXll IElubmVy IHNlbWVzdGVy b3R0ZXN0 IEVtaXJhdGVz cmljYW5lcw== b3JvdXNseQ== bWl0cw== IFdpcw== IGRvZGdl bG9jYXRpb24= IGZhZGVk QW1hem9u IFByb2NlZWQ= IElORk8= am91cm5hbA== IFRydWNr VGVu IDIxNw== IHN0YXR1dGVz bW9iaWxl IFR5cGVz UmVjb21t YnVzdGVy cGV4 IGxlZ2VuZHM= IGhlYWRhY2hl ZmFjZWQ= IFdpRmk= aWZ0eQ== IEhFUg== IGNpcmN1aXRz RVJST1I= MjI2 b2xpbg== IGN5bGluZGVy b3NwYWNl aWtlcnM= UHJlbQ== UXVhbnQ= IGNvbmZsaWN0aW5n IHNsaWdodGVzdA== IGZvcmdlZA== aW9uYWdl U3RlcGhlbg== IEt1Yg== IE9wcG9ydHVu IEhlYWw= IGJsbw== IHJ1bGVycw== IGh1aA== IHN1Ym1hcmluZQ== Znk= YXNzZXI= IGFsbG93YW5jZQ== IEthc2ljaA== IFRhcw== IEF1c3RyYWxpYW5z Rm9yZ2VNb2RMb2FkZXI= IOKGkQ== IE1hdHJpeA== YW1pbnM= IDEyMDA= IEFjcXU= MjM2 RG9jdW1lbnQ= IEJyZWFraW5n MTkz IFN1YnN0 IFJvbGxlcg== IFByb3BlcnRpZXM= IE5J dGllcg== IGNydXNoaW5n IGFkdm9jYXRpbmc= RnVydGhlcm1vcmU= a2VlcGVycw== IHNleGlzbQ== eGQ= IGNhbGxlcg== IFNlbnNl Y2hpZXZl IFRG IGZ1ZWxlZA== IHJlbWluaXNjZW50 IG9ic2Vzcw== dXJzdA== IHVwaG9sZA== IEZhbnM= aGV0aWNz IOKX IEJhdGg= IGJldmVyYWdl IG9zY2lsbA== MjU0 IHBvbGVz IGdyYWR1YWw= IGV4dGluZw== IFN1ZmY= IFN1ZGRlbmx5 IGxpa2luZw== IDE5NDk= dW5jaWF0aW9u YW1pbmF0aW9u IE9tYXI= IExW IENvbnNlcXVlbnRseQ== IHN5bnRoZXM= IEdJRg== IHBhaW5z IGludGVyYWN0aW5n dW91c2x5 aW5jcmU= IHJ1bW9y IFNjaWVudG9sb2d5 MTk3 IFppZw== IHNwZWxsaW5n IEFTUw== IGV4dGluZ3U= bXNvbg== IGdo IHJlbWFya2Vk IFN0cmF0ZWdpYw== IE1PTg== 5aU= Z2Fl IFdIQVQ= RXJpYw== IENhbXB1cw== IG1ldGhhbmU= IGltYWdpbg== SlVTVA== IEFsbQ== WFQ= aXE= IFJTUw== IHdyb25nZG9pbmc= YXR0YQ== IGJpZ290 IGRlbW9uc3RyYXRvcnM= IENhbHZpbg== IFZpbGxh IG1lbWJyYW5l IEF3ZXNvbWU= IGJlbmVmaWM= MjY4 IG1hZ25pZmljZW50 IExvdHM= R3JlZw== IEJvcmlz IGRldGFpbmVlcw== IEhlcm1hbg== IHdoaXNwZXJlZA== IGF3ZQ== UHJvZmVzc29y ZnVuZGluZw== IHBoeXNpb2xvZ2ljYWw= IERlc3RydWN0aW9u IGxpbWI= IG1hbmlwdWxhdGVk IGJ1YmJsZXM= IHBzZXVk IGh5ZHJh IEJyaXN0b2w= IHN0ZWxsYXI= IEV4cGFuc2lvbg== IEtlbGw= IEludGVyZXN0aW5nbHk= IG1hbnM= IGRyYWdnaW5n IGVjb2xvZ2ljYWw= IEZpdA== IGdlbnQ= IGJlbmVmaXRlZA== IEhhaXRp IHBvbHln 44OO IDIwMzA= IHByb3c= IHJlY29uc3RydWN0aW9u IHdhc3Q= IHBzeWNoaWM= IEdyZWVrcw== SGFuZGxlcg== MTYy IFB1bHNl IHNvbGljaXQ= IHN5cw== IGluZmx1eA== IEdlbnRsZQ== cGVyY2VudA== IHByb2xpZmVyYXRpb24= IHRheGFibGU= IGRpc3JlZ2FyZA== IGVzY2FwaW5n IGdpbmdlcg== IHdpdGhzdGFuZA== IGRldmFzdGF0ZWQ= IERldw== c2VyaWVz IGluamVjdGVk ZWxhaWRl IHR1cm5vdmVy aGVhdA== mYI= SGFwcHk= IFNpbGVudA== 44Kt aXZpc20= IGlycmF0aW9uYWw= QU1B IHJlZWY= cnVi IDE2Mg== IGJhbmtlcnM= IEV0aGljcw== dnY= IGNyaXRpY2lzbXM= S24= MTg2 TW92aWU= IFRvcmllcw== IG5vb2Q= IGRpc3RvcnRpb24= RmFsc2U= b2RvcmU= IHRhc3R5 UmVzZWFyY2g= IFVJRA== LSk= IGRpdm9yY2Vk IE1V IEhheWVz IElzbg== aWFuaQ== IEhR ICIj aWduYW50 IHRyYXVtYXRpYw== IExpbmc= SHVu IHNhYm90 b25saW5l cmFuZG9t IHJlbmFtZWQ= cmFyZWQ= S0E= ZGVhZA== w6l0 IEFzc2lzdGFuY2U= IHNlYWY= KysrKysrKys= IHNlbGRvbQ== IFdlYmI= IGJvb2xlYW4= dWxldA== IHJlZnJhaW4= IERJWQ== cnVsZQ== IHNodXR0aW5n IHV0aWxpemluZw== bG9hZGluZw== IFBhcmFt Y29hbA== b290ZXI= IGF0dHJhY3Rpbmc= IERvbA== IGhlcnM= YWduZXRpYw== IFJlYWNo aW1v IGRpc2NhcmRlZA== IFBpcA== MDE1 w7xy IG11Zw== SW1hZ2luZQ== Q09M IGN1cnNlZA== IFNob3dz IEN1cnRpcw== IFNhY2hz c3BlYWtpbmc= IFZpc3Rh IEZyYW1ld29yaw== b25nbw== IHN1YnJlZGRpdA== IGNydXM= IE92YWw= Um93 Z3Jvd2luZw== IGluc3RhbGxtZW50 IGdsYWM= IEFkdmFuY2U= RUNL IExHQlRR TEVZ IGFjZXQ= IHN1Y2Nlc3NpdmU= IE5pY29sZQ== IDE5NTc= UXVvdGU= IGNpcmN1bXN0YW5jZQ== YWNrZXRz IDE0Mg== b3J0aXVt IGd1ZXNzZWQ= IEZyYW1l IHBlcnBldHJhdG9ycw== IEF2aWF0aW9u IEJlbmNo IGhhbmRj QXA= IDE5NTY= MjU5 cmFuZA== TmV0TWVzc2FnZQ== ZGlu dXJ0bGVz aGln IFZJSUk= ZmZpdGk= IFN3b3Jkcw== YmlhbA== IGtpZG5hcHBpbmc= ZGV2aWNl IGJhcm4= IEVsaQ== YXVjYXM= U2VuZA== Q29uc3RydWN0ZWQ= IMK9 IG5lZWRsZXM= IGFkdmVydGlzZW1lbnRz IHZvdQ== IGV4aGliaXRlZA== IEZvcnRyZXNz QXNr QmVycnk= VFlQRQ== IGNhbmNlcnM= dW1waW5n IFRlcnJpdG9yeQ== IHBydWQ= IG5hcw== IGF0aGVpc3Q= IGJhbGFuY2Vz 44Gf IFNoYXdu JiY= IGxhbmRzYw== IFJHQg== IHBldHR5 IGV4Y2VsbGVuY2U= IHRyYW5zbGF0aW9ucw== IHBhcmNlbA== IENoZXY= RWFzdA== IE91dHB1dA== aW1p IGFtYmllbnQ= IFRocmVhdA== IHZpbGxhaW5z IDU1MA== SUNB IHRhbGxlcg== IGxlYWtpbmc= Y3Vw IHBvbGlzaA== IGluZmVjdGlvdXM= IEtD IEBA YmFja2dyb3VuZA== IGJ1cmVhdWNyYWN5 IFNhaQ== dW5sZXNz aXRpb3Vz IFNreXBl QXRs SURFTlQ= MDA4 IGh5cG9jcg== IHBpdGNoZXJz IGd1ZXNzaW5n IEZJTkFM QmV0d2Vlbg== IHZpbGxhZ2Vycw== IDI1Mg== ZmFzaGlvbg== IFR1bmlz QmVo IEV4Yw== IE1JRA== Mjg4 IEhhc2tlbGw= MTk2 IE5PUg== IHNwZWNz IGludmFyaQ== IGdsdXQ= IENhcnM= IGltcHVsc2U= IGhvbm9ycw== Z2Vs IGp1cmlzZGljdGlvbnM= IEJ1bmRsZQ== dWxhcw== Q2FsaWZvcm5pYQ== IEluY3JlYXNl IHBlYXI= IHNpbmdsZXM= IGN1ZXM= IHVuZGVyd2VudA== IFdT IGV4YWdnZXJhdGVk IGR1YmlvdXM= IGZsYXNoaW5n TE9H KV0u Sm91cm5hbA== dGc= VmFu IElzdGFuYnVs IEluc3A= IEZyYW5rZW4= RHJhdw== IHNhZG5lc3M= IGlyb25pYw== IEZyeQ== eGM= IDE2NA== aXNjaA== V2F5 IFByb3Rlc3RhbnQ= aG9ybg== IHVuYWZm IFZpdg== aWxsYXM= IFByb2R1Y3Rpb25z IEhvZ2Fu IHBlcmltZXRlcg== IFNpc3RlcnM= IHNwb250YW5lb3Vz IGRvd25zaWRl IGRlc2NlbmRhbnRz IG9ybg== d29ybQ== SmFwYW5lc2U= IDE5NTU= IDE1MQ== IERvaW5n ZWxzZW4= dW1ibGVz IHJhZGljYWxseQ== IERydW0= IEJhY2g= IGxpYWJpbGl0aWVz IE9C IEVsZW1lbnRhcnk= IG1lbWU= eW5lcw== IGZpbmdlcnByaW50 IEdyYWI= IHVuZGVydGFrZQ== TWVtYmVycw== IFJlYWRlcg== IFNpbXM= Z29k IGh5cG90aGV0aWNhbA== c2NpZW50 IEFK IGNoYXJpc20= IGFkbWlzc2lvbnM= IE1pc3NpbGU= dHJhZGU= IGV4ZXJjaXNpbmc= IEJhY2tncm91bmQ= V3JpdHRlbg== IHZvY2Fscw== d2hldGhlcg== IHZp IFdpbm5lcg== IGxpdHRlcg== IFNob290aW5n U1RFTQ== 44Kh IEFGTA== IHZhcmlhYmlsaXR5 IGVhdHM= IERQUw== YnJvdw== IGVsZXBoYW50cw== IHN0cmF0 IMU= IHNldHRsZXJz TWF0dGhldw== IGluYWR2ZXJ0 SEk= IElNRg== IEdvYWw= IG5lcnZlcw== Sm9obnNvbg== ZXll YWJsaXNobWVudA== VGh1cnNkYXk= QklMSVRZ SGFk YW1vdG8= aGV0YW1pbmU= ZXBz IG1pdG9jaG9uZA== IGNvbXByZXNzZWQ= IFRyZXZvcg== IEFuaW1hbHM= VG9vbA== TG9jaw== IHR3ZWFr IHBpbmNo IGNhbmNlbGxhdGlvbg== UG90 IGZvY2Fs IEFzdHJvbg== MTcz IEFTQw== IE9USEVS dW1uaQ== IGRlbWlzZQ== ZGw= 2YU= U2VtaXRpc20= IGNyYWNraW5n IGNvbGxhYm9yYXRpdmU= IGV4cGxvcmVz c3Fs IGhlcmJz IGNvbmZpZ3VyYXRpb25z bWlz IFJlc3VsdA== YWNleQ== IFNtb2tl IHNhbmN0 ZWxpYQ== IGRlZ2VuZXI= IGRlZXBlc3Q= IHNjcmVhbWVk IG5hcA== U29mdHdhcmU= IFNUQVI= RUY= IFhpbg== c3BvbnNvcmVk bWFuc2hpcA== MjMz IHByaW1hcmllcw== IGZpbHRlcmluZw== IGFzc2VtYmxl bWls IE15ZXJz Ym93cw== IHB1bmNoZWQ= TWlj IGlubm92YXRpb25z IGZ1bmM= YW5kbw== IGZyYWNraW5n IFZ1bA== 0L7Q b3Nob3A= IEltbXVu IHNldHRsaW5n IGFkb2xlc2NlbnRz IHJlYnVpbGRpbmc= IHRyYW5zZm9ybWluZw== IHBhcm9sZQ== IGhhcmJvcg== IGJvb2tpbmc= b3Rpb25hbA== b25nZXZpdHk= IFlv YnVn IGVtZXJnZXM= IE1ldGhvZHM= IENodQ== UHJlcw== IER1bmdlb25z IHRyYWlsaW5n IFJ1bQ== IEh1Z2g= 5aSp IEVyYQ== IEJhdHRsZXM= UmVzdWx0cw== IFRyYWRpbmc= IHZlcnNh Y3Nz YXhpZXM= aGVldA== IGdyZWVk MTk4OQ== IGdhcmRlbnM= IGNvbnRpbmdlbnQ= UGFyaw== IExlYWZz aG9vaw== cm9iZQ== IGRpcGxvbWFjeQ== IEZ1ZWw= IEludmFzaW9u IHVwZ3JhZGluZw== TWFsZQ== IGVsaWM= IHJlbGVudGxlc3M= IENvdmVuYW50 YXBlc2g= IFRyb3A= VHk= cHJvZHVjdGlvbg== YXJ0eQ== IHB1bmNoZXM= YWtv Y3ljbG9wZWRpYQ== IFJhYmJpdA== IEhETUk= IDE0MQ== IGZvaWw= SXRlbUltYWdl IEZH IGltcGxlbWVudGF0aW9ucw== IFBvbQ== aXh0dXJlcw== IGF3YWl0 IDMzMA== YW11cw== IHVtYnJlbGxh IGZvcmVzZWU= c2VwYXI= IGNpcmN1bWNpc2lvbg== IHBlcmlwaGVyYWw= U2F5 IEV4cGVydA== SW5j IHdpdGhkcmV3 IEFuZGVycw== ZnJpZWQ= IHJhZGlvYWN0aXZl IE9wZW5pbmc= IGJvYXJkaW5n IE5E IG92ZXJ0aHJvdw== QWN0aXY= V1A= IEFjdHM= 15k= IG1vdGlvbnM= dmlj IE1pZ2h0eQ== IERlZmVuZGVy YWVy IHRoYW5rZnVs IEtpbGxpbmc= IEJyaXM= bW9pbA== IHByZWRpY3Rpbmc= MjY2 Y2hvaWNl IGtpbGxlcnM= IGluY3Vi IENoZXN0 YXRoZXJpbmc= IHByb2NsYWltZWQ= Zmxvd2Vy b3Nzb20= dW1ibGVkb3Jl IEN5Y2xpbmc= IE9jY3VweQ== QUdFUw== UGVu IFl1Zw== IHBhY2thZ2Vk IGhlaWdodGVuZWQ= Y290 c3RhY2s= Q29uZA== IHN0YW1wcw== bWFnZQ== IHBlcnN1YWRlZA== IGVuc2w= IENhcmRpbmFs IHNvbGl0YXJ5 IHBvc3Nlc3Npbmc= IENvcms= IGV2aWQ= IFRheQ== IGJsdWVz IGV4dHJlbWlzbQ== IGx1bmFy IGNsb3du VGVjaG4= IGZlc3RpdmFscw== IFB2UA== IExhcg== IGNvbnNlcXVlbnRseQ== cHJlc2VudA== IHNvbWVkYXk= 546L IE1ldGVvcg== IHRvdXJpbmc= Y3VsdHVyZQ== IGJlYWNoZXM= U2hpcA== Y2F1c2U= IEZsb29k 44Ov IHB1cml0eQ== dGhvc2U= IGVtaXNzaW9u Ym9sdA== IGNob3Jk IFNjcmlwdHVyZQ== THU= ICR7 Y3JlYXRlZA== T3RoZXJz MjU4 IGVsZW1lbnRhbA== IGFubm95ZWQ= IEFF ZGFu IFNhZw== UmVzZWFyY2hlcnM= IGZhaXJ5 4oCT4oCT PT09PT09PT09PT09 U21hcnQ= R0dHRw== IHNrZWxldG9ucw== IHB1cGlscw== bGlua2Vk IHVyZ2VuY3k= ZW5hYmxlZA== IEZ1Y2s= IGNvdW5jaWxs cmFi VUFM VEk= IGxpZmVz IGNvbmZlc3NlZA== QnVn IGhhcm1vbg== IENPTkZJRw== IE5ldXRyYWw= RG91Ymxl IHN0YXBsZQ== IFNIQQ== QnJpdGlzaA== IFNOUA== QVRPUg== b2Nv IHN3aW5naW5n Z2V4 b2xlb24= cGxhaW4= IE1pc3Npbmc= IFRyb3BoeQ== dmFyaQ== cmFuY2g= IDMwMQ== NDQw MDAwMDAwMDAwMDAwMDAwMA== IHJlc3RvcmluZw== IGhhdWw= dWNpbmc= bmVyZw== IGZ1dHVyZXM= IHN0cmF0ZWdpc3Q= cXVlc3Rpb24= IGxhdGVyYWw= IEJhcmQ= IHNvcg== IFJob2Rlcw== IERvd250b3du Pz8/Pz8t IExpdA== IEJlbmVk IGNvaWw= c3RyZWV0 IFBvcnRhbA== RklMRQ== IEdydQ== Kiw= MjMx bmV1bQ== IHN1Y2tlZA== IHJhcHBlcg== IHRlbmRlbmNpZXM= IExhdXJlbg== Y2VsbGFuZW91cw== MjY3 IGJyb3dzZQ== IG92ZXJj aGVhZGVy b2lzZQ== IGJlZXQ= IEdsZQ== U3RheQ== IG11bQ== IHR5cGVk IGRpc2NvdW50cw== VGFsaw== IE9n ZXhpc3Rpbmc= IFNlbGw= dXBo Q0k= IEF1c3RyaWFu IFdhcm0= IGRpc21pc3NhbA== IGF2ZXJhZ2Vz Y2FtZXJh IGFsbGVnaWFuY2U= TEFO PSIj IGNvbW1lbnRhdG9ycw== IFNldHRpbmc= IE1pZHdlc3Q= IHBoYXJtYWM= IEVYUA== IHN0YWlubGVzcw== Q2hpY2Fnbw== IHRhbg== MjQ0 IGNvdW50cnlzaWRl IFZhYw== Mjk1 IHBpbm5lZA== IGNyaXNlcw== IHN0YW5kYXJkaXplZA== VGFzaw== IEphaWw= IERvY2tlcg== Y29sb3JlZA== Zm9ydGg= In0s IHBhdHJvbnM= IHNwaWNl IG1vdXJu IE1vb2Q= IGxhdW5kcnk= IGVxdWlw IE1vbGU= eWxs IFRIQw== bmF0aW9u IFNoZXJsb2Nr IGlzc3U= IEtyZQ== IEFtZXJpY2Fz IEFBQQ== IHN5c3RlbWF0aWNhbGx5 IGNvbnRyYQ== IFNhbGx5 IHJhdGlvbmFsZQ== IGNhcnJpYWdl IHBlYWtz IGNvbnRyYWRpY3Rpb24= ZW5zYXRpb24= IEZhaWx1cmU= IHByb3Bz IG5hbWVzcGFjZQ== IGNvdmU= ZmllbGRz 44KL IHdvb2w= IENhdGNo IHByZXN1bWVk IERpYW5h cmFnb24= aWdp IGhhbW0= IHN0dW50 IEdVSQ== IE9ic2VydmF0b3J5 IFNob3Jl IHNtZWxscw== YW5uYWg= IGNvY2twaXQ= IER1dGVydGU= ODUw IG9wcHJlc3NlZA== YnJlYWtlcg== IENvbnRyaWJ1dA== IFBlcnU= IE1vbnNhbnRv IEF0dGVtcHQ= IGNvbW1hbmRpbmc= IGZyaWRnZQ== IFJpbg== IENoZXNz dWFsaXR5 IG9s UmVwdWJsaWNhbg== IEdsb3J5 IFdJTg== Li4uLi4uLg== YWdlbnQ= cmVhZGluZw== IGluaA== Sm9uZXM= IGNsaWNrcw== YWxhbg== IFtdOw== IE1hamVzdHk= IENlZA== b3B1cw== YXRlbA== w6o= QVJD IEVjdWFkb3I= 44Og IEt1cm8= IHJpdHVhbHM= IGNhcHRpdmU= IG91bmNl IGRpc2FncmVlbWVudA== IHNsb2c= ZnVlbA== UGV0 TWFpbA== IGV4ZXJjaXNlZA== IHNvbGlj IHJhaW5mYWxs IGRldm90aW9u IEFzc2Vzc21lbnQ= IHJvYm90aWM= b3B0aW9ucw== IFJQ IEZhbWlsaWVz IEZsYW1lcw== IGFzc2lnbm1lbnRz MDA3 YWtlZG93bg== IHZvY2FidWxhcnk= UmVpbGx5 IGNhdmFs Z2Fycw== IHN1cHByZXNzZWQ= IFNFVA== IEpvaG5z IHdhcnA= YnJva2Vu IHN0YXR1ZXM= IGFkdm9jYXRlZA== IDI3NQ== IHBlcmls b21vcnBo IEZlbWlu cGVyZmVjdA== IGhhdGNo TGli NTEy IGxpZmVsb25n MzEz IGNoZWVrcw== IG51bWJlcmVk IE11Zw== Qm9keQ== cmF2ZWw= V2VpZ2h0 IEphaw== IEhlYXRo IGtpc3Npbmc= IEpVU1Q= IHdhdmluZw== dXBsb2Fk IGluc2lkZXI= IFByb2dyZXNzaXZl IEZpbHRlcg== dHRh IEJlYW0= IHZpb2xlbnRseQ== aXBhdGlvbg== IHNrZXB0aWNpc20= IDE5MTg= IEFubmll IFNJ IGdlbmV0aWNz IG9uYm9hcmQ= YXRs IEZyaWVkbWFu IEJyaQ== Y2VwdGl2ZQ== IHBpcmF0ZQ== IFJlcG9ydGVy Mjc4 IG15dGhvbG9neQ== IGVjbGlwc2U= IHNraW5z IGdseXBo aW5naGFt RmlsZXM= Q291cg== d29tZW4= IHJlZ2ltZXM= IHBob3RvZ3JhcGhlZA== S2F0 IE1BWA== T2ZmaWNpYWxz IHVuZXhwZWN0ZWRseQ== IGltcHJlc3Npb25z RnJvbnQ= Ozs7Ozs7Ozs= IHN1cHJlbWFjeQ== IHNhbmc= IGFnZ3JhdmF0ZWQ= IGFicnVwdGx5 IFNlY3Rvcg== IGV4Y3VzZXM= IGNvc3Rpbmc= aWRlcHJlc3M= U3RhY2s= IFJOQQ== b2JpbA== IGdob3N0cw== bGRvbg== YXRpYmlsaXR5 VG9waWNz IHJlaW1idXJzZQ== IEhN IERlZw== IHRoaWVm eWV0 b2dlbmVzaXM= bGVhbmluZw== IEtvbA== IEJhc2tldGJhbGw= IGZp IFNlZWluZw== IHJlY3ljbGluZw== IFst Q29uZ3Jlc3M= IGxlY3R1cmVz UHN5 IG5lcA== IG1haWQ= IG9yaWVudGVk QVg= IHJlc3BlY3RmdWw= cmVuZQ== Zmx1c2g= IFVubG9hZGVk cmVxdWVzdA== Z3JpZA== IEFsdGVybmF0aXZlbHk= IEh1Z28= IGRlY3JlZQ== IEJ1ZGRoaXNt YW5kdW0= QW5kcm9pZA== IENvbmdv IEpveWNl IGFja25vd2xlZGdpbmc= aGVzaXZl IFRvbW9ycm93 IEhpcm8= dGhyZW4= IE1hY2Vk IGhvYXg= IEluY3JlYXNlZA== IFByYWRlc2g= V2lsZA== X19fX19f MTYx IGF1bnQ= IGRpc3RyaWJ1dGluZw== IFR1Y2tlcg== IFNTTA== IFdvbHZlcw== QnVpbGRpbmc= b3VsdA== IEx1bw== IFlhcw== IFNwaXI= IFNoYXBl IENhbWJvZA== IElQdg== IG1s IGV4dHJhZA== Mzkw IFBlbm55 ZHJlYW0= IHN0YXRpb25lZA== b3B0aW9uYWw= ZXdvcnRoeQ== Ljwv IHVuZGVydGFraW5n IGNoaWNrZW5z IHN0aW11bGk= IEVsc2U= aWdhdG9ycw== IEJlZ2lubmluZw== Y3Rvcnk= IHByZXBhcmVz IGRlbHRh IHZpY2luaXR5 dG9vbA== IHdvcmtzaG9wcw== TUh6 IGFjY3VzYXRpb24= IGhpc3Rvcmllcw== cm9wb2xpcw== IENodXJjaGlsbA== IG5lb24= IGJhZmY= ZGllcw== bWF5YmU= IOijj+immumGkg== IHN5bXB0b20= RUNI IE1hbnVlbA== IGJhbmFuYQ== IEhC ICoqKio= IEtvcmVhbnM= Y29sbA== RkI= IHByYXlpbmc= IENhbm5vdA== IE1pbGU= IGVtYnJhY2luZw== IFNpbGs= Mzkz b3RlcnM= RkQ= IGRheWxpZ2h0 YWxpYXM= IEJyaWdhZGU= IEhhbm5haA== IGNsZXJneQ== IHNvdXRoZWFzdA== IGFsY29ob2xpYw== IHByb3Bvc2Vz bGl2aW9u IGNhbGN1bGF0aW5n IHN0aW11bGF0ZQ== IHNwbGl0dGluZw== ZWlnaHQ= IEluZHk= cGxheXM= IFBpaw== IGRvbWVzdA== IGZvcmdpdmVuZXNz IFJpbmdz cGF0aWVudA== a2luc29u TW9udA== aWdpYmxl OyI= IHBlcmlvZGljYWxseQ== YW1tYWQ= IEJyaXR0 cGFyZA== IGFyYml0cmF0aW9u IFNjaG5laWRlcg== IENvcnBvcmF0ZQ== IE1heWE= IHNuYWtlcw== YXVt IGJsYXN0ZWQ= IG15c3Rlcmllcw== IHJldml2ZQ== b2NhbXA= IERvZGdl IE9wZXJh Mjc5 IG9ycGhhbg== IHNwZWNpZmllcw== IE1ldHM= RHVyYXRpb24= SGVu IGZpcmV3b3Jrcw== IHByb3NlY3V0ZQ== IFRpbGxlcnNvbg== ZHA= dXNhZ2U= bGluZXNz IERlYmlhbg== IDIyNA== cmlzZXM= IEluZmVjdA== YXRyYQ== IFJS IExvcg== ZGlmZg== IENoYXJsZXN0b24= IGFjb3VzdGlj IGFtdXNl MzMw IGNlcg== IFRhYw== IFsr IGNhcmRpYWM= IFJlc3RhdXJhbnQ= ZXJneQ== IGZ1eno= IGJpdGVz IGhhemFyZG91cw== IGJyaWdodGVy cmFucw== IFN0ZXBoYW5pZQ== ZXh0cmE= UkVU IENocmlzdGluZQ== IFN1ZQ== c3RhdGVtZW50 IGJvbHN0ZXI= IGFudGl0 UmFkaW8= QklU 44Kw IHZpc2lvbnM= IENvbmNlcHQ= IGlubGluZQ== IFBoaWxvc29waHk= aXNhbnM= IElydmluZw== w6M= dGFraW5n IGluY29uc2lzdA== IEt1bWFy IGxpZw== IFNjaHVtZXI= IFJlZ3VsYXRpb25z IEh6 dGhybw== IFZvbGRlbW9ydA== IE1FRA== IEZyZWRlcmljaw== UGFk MjIx IGFsbGVnaW5n IENvbW11bmljYXRpb24= IDE2Nw== IGZvcmVjYXN0cw== IHNwaWRlcnM= T3JnYW4= IFBhcnRpY2lwYW50cw== IE9wcw== ZGVzaWdu Q2xvc2U= IGZhY3Rv IGJvbWJlcnM= cmVzaXN0YW50 YXRlZ29yaWVz U2Nob29s IGhvbWV3b3Jr IGNvcnJv VHVlc2RheQ== IEJyZW5kYW4= IE1Y IFRT IFN0cmk= IHN0YWtlaG9sZGVycw== IE1pbGxlbm5pdW0= IHRyYW5zZmVycmluZw== SnVk IHRhYw== IDE2MDA= IFNESw== cmI= IGludGVycHJldGF0aW9ucw== IFNH IHVwc3RhaXJz IEhhcnZlc3Q= IHZhZ2luYQ== IGluZ2VzdA== eGY= IE9yaW9u IEpvZXk= IHNhbmR3aWM= IGltbW9ydGFs IGZsaXBwZWQ= b3J0ZXg= dGhyZWF0ZW5pbmc= IHNuaXBlcg== IGNvbnZlcnRz IGluc3RhbGxhdGlvbnM= IEJ1bGdhcg== b3JzY2hl bWFpbHM= IGx1cmU= IG5hcnJvd2x5 IGdyZW5hZGU= IEdpbmc= IHVuZGVyd2Vhcg== LS0tLS0tLS0tLS0tLS0= IGNoYXNlZA== IFZBTA== IHBhcmVudGluZw== IEhhbWI= IEJsYXo= IGFuYXJjaGlzdA== IE1lZGlhbg== IFByb2dyYW1z zr0= IG9iag== IE5va2lh b3JtYW4= YW5xdQ== YXRpc20= b3Bh IGZ1bGZpbGxpbmc= IHB1cHB5 IGVudGl0 IFNlYmFzdGlhbg== IHNob290ZXJz IHJpY2hlcg== 6KE= IHRlbXB0ZWQ= IEFUVA== IENW IHRvcmU= UmVzb3VyY2U= IERldmlscw== NDA4 aW5hdGlvbmFs IGFzc3VyYW5jZQ== IERhcnJlbg== IHdoaWNoZXZlcg== cG9zdXJl IGZ1cnk= U3RvY2s= IHVuaXZlcnNhbGx5 cmVzcG9uc2U= IG9haw== IHdvcmtsb2Fk IENvcm5lcg== ZWVsZQ== Ii4uLg== IGRlcHJpdmVk a293c2tp IGNhc3Rz IGFmZmlsaWF0aW9u IEFjaA== IEFza2Vk YXRoZQ== IGxhY3Q= IFRodQ== cm0= IGFpcmxpbmVz IG5vdGlvbnM= Rm9ybWF0 IEZBQQ== 44OK ZHJpdmVy IHRyYW5zY2VuZA== U2V0dGluZ3M= IFByb3NlY3V0 IHNwaW5hbA== IGRlZmF1bHRz Rks= IHByZWZlcnM= cmVuZGVyZWQ= dGh1cw== ZmlsbQ== IHRpZ2Vy IFNwaWNlcg== cmVjb2du IFJ1Z2J5 TmV0d29yaw== IHBpdHk= IGNvbXBhcnRtZW50 Y2FzdGVycw== IE1vbnJvZQ== IDcyMA== IGNvcnJlY3Rpb25z IGRvcGFtaW5l IEFa Q3V0 IHJvb21t IHNwZWN1bGF0ZQ== SGFzaA== IHJlc3RyaWN0aXZl MTExMQ== cmVkaWJsZQ== b25lbA== IHJhbXBhbnQ= cmVwb3J0ZWQ= IFN1aXRl IE1pbmltdW0= YWx5cw== YXphcmQ= bG9vcA== IGxlbnQ= c2hh IHZhbmRhbA== bWVudQ== IEJvZWhuZXI= IG5hcnJhdGl2ZXM= IGF1dGhlbnRpY2l0eQ== MjY5 YW5pYw== ZHV0eQ== Mjg1 IHRoYW5rZWQ= IGJldHJheWVk bGlmdA== IHNvdXRod2VzdA== IERleHRlcg== IEJvZA== IGtleXdvcmRz QXZlcmFnZQ== RElT IGV0aG5pY2l0eQ== ISks IE5hdGlvbmFscw== 4bk= IFRhaA== aW94aWQ= IHdpZGdldA== IHBhc3Rh IGJpbGxpbmc= IHRyaWxvZ3k= IExpbmVz IHNuaWZm IG5lcGhldw== TGF0ZQ== IHByaW5jaXA= IExvb3A= IE1hcnhpc3Q= IGRpc3NvbHZlZA== IGNvbnRleHRz IEFtb3VudA== IFNwaWtl IHRvdGFscw== IG9yZ2FuaXplcg== IHVwcmlzaW5n c2hpcHM= WVk= IE5vcnRoZWFzdA== bW9uZXk= Z3JhZGF0aW9u IGdvYWxrZWVwZXI= IEhlYXI= IHN0ZWFr IEJ1enpGZWVk IHNvbGVtbg== IFNjYW5k IHBvcHBpbmc= IGFkaGVyZQ== IEFsbGVn Ynl0ZQ== IFdvbHZlcg== IHVuaW4= IHJlY29s aXR1ZA== IG1pbWlj aWJ1cw== IHByZWRpY3Rz IEtlZXBlcg== aWF0aW5n IGRlY2VwdGlvbg== IGxlYXJudA== IGRpYXJ5 IGNvbmRpdGlvbmFs IHJlbGlj IGludm9rZQ== aWVuY2Vk 5Yg= IFBvbnQ= IGNlbGxwaG9uZQ== IHNwZWVkaW5n IHRhY2tsaW5n IG51ZGU= b3BlbmVk IE1hbmFmb3J0 IDE5NTI= IG1ham9ycw== IFNpbGVuY2U= IGxvZ2lzdGljcw== IHdlaWdodGVk IFBzeWNoaWF0 IjpbIg== IHNpY2tuZXNz IGRpdmlkZW5kcw== em9u UmVsZWFzZQ== IEtleXM= IEljaA== IGVueg== IEZlcm5hbmQ= IM6x IG1lYW5pbmdz IHBlbm55 IHN0ZXJu IGxhcg== IFB1Ymxpc2hlZA== IGJhY2tkcm9w S2lt IFN5bnQ= IGRlYnV0ZWQ= d20= IElzbGU= IHJlZ3VsYXRpbmc= b3R0aQ== IFNjaG9sYXJz aWNlc3Rlcg== IENoZWY= IHBvcHM= IExhdW5jaGVy IFZhcmlvdXM= IGNvbW1lbnRpbmc= b3NsYXY= ZW56aWU= IHJpdmFscnk= 4oKs UmVhbGx5 IG9yYw== IGJlYW4= IEp1ZHk= Tm90aWNl IEJpa2U= P10= IHJlbnRlZA== c3Rlbg== IGZvcmVmcm9udA== IEJhbGR3aW4= IHlpZWxkZWQ= dGFpbHM= UHJpbWU= IFNvdXJjZXM= aWNhdG9y U2Vhbg== IG1hcmNoaW5n T3V0cHV0 IEp1bmdsZQ== IHJlc2lkZQ== enpsZQ== IEFuZHJld3M= IHRvcnF1ZQ== QmFzaWM= QWN0dWFsbHk= c3RyYXA= cGVudGVy IGV4YW1z IFlh IDE1OQ== IERlY2lzaW9u IHJhbnNvbQ== ZXRlZW50aA== ZW5zaW5n MjEz IHN1bnNldA== NDA0 IFJhcGlk IEhlaW4= IEFib3JpZ2luYWw= IG9yZ2FuaXNt IFNldmVy IGNsYQ== YWpp U2ltcGxl IEZsYXZvcg== IEV2YWw= cHJ1cw== IGNob3J1cw== REFZ IGRlbm91bmNlZA== IGJpb2dyYXBoeQ== IFR1cm5idWxs UmVjZW50 Tm9ybWFs bGVjdGlvbnM= V29yZA== IGZlcnJ5 IFdhZ25lcg== aG9t VW5pdA== IHN1cGVybWFya2V0 IFNpdGg= IG5vbWluZWVz IGRpY3RhdG9yc2hpcA== aWRkbGVy IGFubm91bmNlcw== IFRoZW0= IE5lcHR1bmU= IGRlaXR5 IFlp IG1vbmFyY2g= QVJS IGludmFkZWQ= IEhvaw== dW50YXJ5 Q2VydGFpbg== ZWdh IGtpZGRpbmc= IFJlZ3VsYXRpb24= IHRyYXk= IHBob3RvZ3JhcGhlcnM= IEFyY2FuZQ== IGRpc2NoYXJnZWQ= IGV2YW5nZWxpY2Fs IGludGVyY2hhbmdl IGZpbG1tYWtlcg== IEVuZGxlc3M= IDI5MA== IFNhbHZhZG9y QVNZ IFNpZ25hbA== IHdyYXRo 4pw= bG90 Jy8= IHByb2plY3RpbGU= IGVtcGxveWluZw== IEludGVyZmFjZQ== MTkx YXRlbGxpdGU= IFJhdGg= cGFja2FnZQ== IGluZGljYXRpb25z SmFzb24= IGFyZ3M= IEdIeg== IHRpbHQ= bmFudHM= d29u 44K1 cmVkZA== cmVzY2VudA== IENhbGVuZGFy IG1vZHVsYXI= IGFzc2lzdGluZw== IHJlZGVlbQ== IEJlYW4= IHdvcnNo IGRlY2VudHJhbGl6ZWQ= KS4uLg== Mzc3 IGFycmF5cw== IGFjY29tcGxpc2htZW50cw== zr8= ZG90 IG11dHVhbGx5 IG9ic3RydWN0 IG1pc3JlcHJlc2VudA== b3Jlc3Q= aW9uaWM= cnVjZQ== JTs= IGtub3dpbmdseQ== cG9ydGluZw== aW5lbnRseQ== QXJp IFNjaHVsdHo= RGE= IENlcmU= IG9ic29sZXRl hYs= Z2l2ZQ== IGJhaXQ= IGVubGFyZw== TmVpbGw= IDE5MzM= IHJlY29uc2lkZXI= IFNlcmdlYW50 IERpYW5l IENvZ24= IEljb24= UG9zaXRpb24= IGZvc3Q= IHN0aXJyaW5n c2V2ZW4= IFNwYWNlWA== dWdnZXRz IG1lZGQ= R2Fs IFNpc3Rlcg== Qm95 IHRyaWdnZXJpbmc= VGFraW5n IHNjcmVhbXM= IGNhdXNhbA== IGF3YWtlbg== QXJt Mjk3 IGRpc3BhdGNoZWQ= IEZBTFNF IG9yZ2FuaXphdGlvbmFs IFRvbmc= IGRpbGVtbWE= ZGVtb24= U3Bs IGhvb2tz dWRpbmc= IHZhbGlkYXRl IHBvdGlvbg== IGNsYXc= IGJ1cmds IHF1aXI= QUNB IEJyZW5uYW4= IGR1cmFiaWxpdHk= IGJvbWJpbmdz IFdpbmRvdw== IGN1bHByaXQ= MzI1 VGhlcmVmb3Jl dW1iZXJlZA== cGVyZm9ybWFuY2U= d2FydHM= IGVuZm9yY2luZw== IEJsb3c= IHJlcHJpbnQ= aWZheA== YWxwaGE= IHNpbmlzdGVy IGJ1cmdlcg== ZmlnaHRpbmc= U2NvcmU= IFN0b25lcw== aWVt NDA1 Y2hlbXk= IHZpbmVnYXI= bm9t IHByZXZhaWxpbmc= IExhdGVzdA== wrY= IGJh IFdyaXRlcg== IDE3Nw== IENvbndheQ== IGNvbGxlY3Rz IHF1YW50aXRhdGl2ZQ== IGhvcnJvcnM= b2dlbnM= IFNsb3Y= IGxheXM= aGF3 IFNsYXNo IG5pZ2h0Y2x1Yg== IERhdmllcw== IGJyaWRl IFNjYXJsZXQ= eW1t IEFwcGxpY2F0aW9ucw== dmVsZW5ndGg= IHJldml2YWw= IHNvZnRseQ== IHpvbw== aXRhaXJl Q3Vy IGVsZWN0cm9t IHBsYW50aW5n T1RP IEVsZW1lbnRz IHN3YWxsb3c= cG9ydGVy IGxhcHRvcHM= IHBlYW51dA== IGxvYmJ5aXN0cw== zrI= UGFuZWw= IEpvYW4= aW1pbA== dG5j IHJlc2lzdGVk IG91dHdl IHJldGFpbmluZw== YXRyaQ== IHBvb3Jlcg== IFN5cmlhbnM= IEhhbW1vbmQ= IHdlbGQ= dWRlcg== dG9waWM= IFRU cmljaWE= IHRoaWV2ZXM= TGlj IEd1c3Q= IFdheXM= YXJldGg= MjQz IGJyb2FkY2FzdGVy c2hpZWxk YXNzaXVt dWJsZQ== IGFpcnN0cmlrZXM= b25zbw== IHBlZGFs IGNvbGxlY3RvcnM= IFZhbmRlcg== IE1lc2E= IGRpY3RhdG9y IGRpcg== ZW50b24= Y2FydA== c2NvcmU= YWRkZXI= Q3J5 IHNzaA== Z2dlcg== IGRydW5rZW4= IEdT IFNlYXQ= IGNvcm5lcmJhY2s= IHNraXBwZWQ= IFJlc2VhcmNoZXJz IEF1ZGk= UmVmZXJlbmNl IGhhdW50ZWQ= w6s= IENsaW5pYw== Y3o= IHBz IFBhbGFkaW4= IFJlY2lwZQ== IHN0aWdtYQ== b3BweQ== IG1vbmtleXM= IEhhd2s= U2Fk Ii8+ IFdvcmtzaG9w IFJldGFpbA== IEF2YXRhcg== NjI1 TmE= IFZD IFNlY3VyZQ== TVk= MTk4OA== b3NzaXA= IHByb3N0YXRl IHVuZGVu IGdhbWVy IENvbnRlbnRz IFdhcmhhbW1lcg== IFNlbnRpbmVs MzEw IHNlZ3JlZ2F0aW9u IEZsZXg= IE1BWQ== IGRyaWxscw== IERydWdz SXNsYW1pYw== IHNwdXI= IGNhZmU= IGltYWdpbmFyeQ== IGd1aWRpbmc= IHN3aW5ncw== IFRoZW1l b2J5 IG51ZA== IGJlZ2dpbmc= IHN0cm9uZ2g= IHJlamVjdGluZw== IHBlZGVzdHJpYW5z IFByb3NwZWN0 UmFyZQ== c2xl IGNvbmNlc3Npb25z IENvbnN0aXR1dGlvbmFs IGJlYW1z IGZpYmVycw== cG9vbg== IGluc3RpbmN0cw== cHJvcGVydHk= IEJJRw== U2FuZGVycw== aW1hdGVz IGNvYXRpbmc= IGNvcnBzZXM= IFRSVUU= Y2hlY2tlZA== IDE2Ng== QXNo IEpT IEZpY3Rpb24= IGNvbW11bmFs IGVuZXJnZXRpYw== b29vb29vb28= IG5vd2FkYXlz SUxE aWJv IFNVVg== UmVu IGR3ZWxsaW5n U2lsdmVy IHRhbGx5 IE1vdmluZw== IGNvd2FyZA== IGdlbmVyYWxz IGhvcm5z IGNpcmN1bGF0ZWQ= IHJvYmJlZA== IFVubGltaXRlZA== IGhhcmFzc2Vk IGluaGliaXQ= IGNvbXBvc2Vy IFNwb3RpZnk= IHNwcmVhZHM= MzY0 IHN1aWNpZGFs IG5vaXNlcw== IFN0dXI= IHNhZ2E= IEthZw== aXNv IHRoZW9yZXRpY2FsbHk= TW9uZXk= IHNpbWlsYXJpdHk= IHNsaWNlZA== dXRpbHM= aW5nZXM= Ii0= IGFudGg= IGltcGVk TW9kdWxl VGhyb3VnaG91dA== IG1lbnVz Y29tbWl0dGVl YW5kaQ== b2Jq aW5hdg== ZmlyZWQ= IEFiZHVsbGFo IHVuZGVhZA== IGZvbnRz SG9sZA== RU5H IHN1c3RhaW5hYmlsaXR5 IGZsaWNr IHJhem9y IEZlc3Q= IENoYXJhY3RlcnM= IHdvcmRpbmc= IHBvcHVsaXN0 IGNyaXRpY2l6aW5n IG11c2U= dmluZQ== IGNhcmRib2FyZA== IGtpbmRseQ== IGZyaW5nZQ== IFRoZWZ0 aWN1bHR1cmFs IGdvdmVybm9ycw== IO+/ve+/ve+/ve+/vQ== IDE2Mw== IHRpbWVvdXQ= IEF1dGg= Q2hpbGRyZW4= QVU= IHJlZGVtcHRpb24= IEFsZ2Vy IDE5MTQ= IHdhdmVk IGFzdHJvbmF1dHM= b2dyYW1z IHN3YW1w IEZpbm5pc2g= IGNhbmRsZQ== IHRvbm5lcw== dXRt IHJheQ== IHNwdW4= IGZlYXJmdWw= YXJ0aWNsZXM= IGNhdXM= b3JpY2FsbHk= IFJlcXVpcmVz IEdvbA== IHBvcGU= IGluYXVndXJhbA== IGdsZQ== QURB IElTSUw= IE9mZmVuc2l2ZQ== IHdhdGNoZG9n IGJhbGNvbg== ZW50aXR5 IEhvbw== IGdhbGxvbg== QUND IGRvdWJsaW5n IGltcGxpY2F0aW9u IFNpZ2h0 IGRvY3Ry LS0tLS0tLQ== IFxc IG1hbHQ= Um9sbA== IOKJpQ== IHJlY2Fw YWRkaW5n dWNlcw== IEJlbmQ= ZmlndXJl IHR1cmtleQ== IHNvY2lldGFs IFRpY2tldHM= IGNvbW1lcmNpYWxseQ== IHNwaWN5 IDIxNg== IFJhbXA= IHN1cGVyaW9yaXR5 w68= IFRyYWNrZXI= Q2FybA== IENveQ== IFBhdHJpb3Q= IGNvbnN1bHRlZA== IGxpc3Rpbmdz IHNsZXc= cmVlbnNob3Q= IEdvbmU= IFsuLi5d MzA5 IGhvdHRlc3Q= 2LE= IHJvY2t5 IERpYXo= IG1hc3NhZ2U= IHBhcmFseQ== IHBvbnk= QXo= IGNhcnRyaWRnZQ== IE5a IHNuYWNr IExhbWFy cGxlbWVudA== IExlc2xpZQ== IG1hdGVy IHNuaXBw MjQ2 IGpvaW50bHk= IEJyaXNiYW5l IGlQb2Q= IHB1bXBpbmc= IGdvYXQ= IFNoYXJvbg== ZWFsaW5n IGNvcm9u IGFub21hbA== cmFoaW0= IENvbm5lY3Rpb24= IHNjdWxwdHVyZQ== IHNjaGVkdWxpbmc= IERhZGR5 YXRoaW5n IGV5ZWJyb3dz IGN1cnZlZA== IHNlbnRpbWVudHM= IGRyYWZ0aW5n RHJvcA== KFs= IG5vbWluYWw= IExlYWRlcnNoaXA= IEdyb3c= IDE3Ng== IGNvbnN0cnVjdGl2ZQ== aXZhdGlvbg== IGNvcnJ1cHRlZA== Z2VyYWxk IENyb3M= IENoZXN0ZXI= IExhcA== 44Gq T1RI REFUQQ== IGFsbW9uZA== cHJvYmFibHk= SW1w IGZlYXN0 IFdhcmNyYWZ0 Rmxvcg== IGNoZWNrcG9pbnQ= IHRyYW5zY3JpcHRpb24= IDIwNA== IHR3ZWFrcw== IHJlbGlldmU= U2NpZW5jZQ== IHBlcmZvcm1lcg== Wm9uZQ== IHR1cm1vaWw= aWdhdGVk aGliaXQ= IENhZmU= dGhlbWVk IGZsdW9y YmVuY2g= IGRlY29t IFVudA== IEJhcnJldHQ= IEZhY3Rz IHRhc3Rpbmc= IFBUU0Q= IFNlYWw= IEp1ZGFpc20= IER5bmFtaWM= IENvcnM= VmU= IE1pbmc= IFRyYW5zZm9ybQ== dm9u IERlZmVuZGVycw== IFRhY3RpY2Fs IFZvbg== IFVuaXZlcnM= IGRpc3RvcnRlZA== IEJyZWF0aA== Pyci IGFnb24= IERlYWRseQ== IGxhbg== IEN5Y2xl b3JuZWQ= IHJlbGlhYmx5 IGdsb3I= IE1vbmtleQ== 44Oh IGFkcmVu IG1pY3Jvd2F2ZQ== IEFsYmFu aXJjcmFmdA== ZGlnaXQ= c21hcnQ= IERyZWFk wq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq8= e3s= IFJvY2hlc3Rlcg== IHNpbXBsaWZpZWQ= IGluZmxpY3RlZA== IHRha2VvdmVy IHlvdXJzZWx2ZXM= YWRpdGlvbmFs IG11c2N1bGFy S1M= IGluZ2Vu VGF4 IEZlYXR1cmU= Mjc3 IGNydWM= IGNyYXRl IHVuaWRlbnRpZmllZA== IGFjY2xhaW1lZA== IE1hbmdh IEZyYW5jZXM= IE5lcGFs IEdlcmFsZA== IEt1d2FpdA== IHNsYWlu IEhlYg== IEdva3U= 44Gu5g== Mjg2 TXJz IENvZHk= IFNhbmN0dWFyeQ== MDE2 IGRpc21hbnQ= IGRhdGFzZXQ= IEhvbmQ= YnVjaw== IFBhdHRlcnNvbg== IHBhbGV0dGU= IEdE aWNvbA== IExvZGdl IHBsYW5ldGFyeQ== YWtpbg== IFJlZ2lzdGVyZWQ= YWJ3ZQ== IFBldGVyc2J1cmc= IGhhaWxlZA== IFBpZWNl U2NoZQ== IERPSg== IGVudW1lcg== MTgx IE9ic2VydmVy IEJvbGQ= Zm91bmRlZA== Y29tbWVyY2U= IGV4cGxvaXRz IEZpbmRpbmc= VVJO IFNuZQ== IEFjaWQ= YXlldHRl IFZhbHVlcw== IGRyYXN0aWM= IGFyY2hpdGVjdHVyYWw= ICIu 15U= dW1wZWQ= IHdyYXBwaW5n IHdpZG93 IFNsYXllcg== bGFjZQ== b25jZQ== R2VybWFueQ== YXZvaWQ= IHRlbXBsZXM= UEFS w7Q= IEx1Y2lmZXI= IEZsaWNrcg== bG92 Zm9yY2Vz IHNjb3V0aW5n IGxvdWRlcg== dGVzeQ== IGJlZm9yZWhhbmQ= xJM= IE5lb24= IFdvbA== IFR5cGljYWxseQ== IFBvbGl0aWNv LSstKw== IGJ1aWxkZXI= IGRlcml2ZQ== S2lsbA== IHBva2Vy IGFtYmlndW91cw== IGxpZnRz IGN5dA== IHJpYnM= b29kbGU= IFNvdW5kcw== aGFpcg== IFN5bmRyb21l dGY= IHByb3BvcnRpb25hbA== dWlk IHBlcnRhaW5pbmc= IEtpbmRsZQ== IE5lZ3Jv IHJlaXRlcmF0ZWQ= IFRvbmlnaHQ= b3Rocw== IENvcm5lbGw= IG93aW5n IDIwOA== ZWxmYXJl b2NhdGluZw== IEJpcmRz U3Vic2NyaWJl IGVzc2F5cw== IGJ1cmRlbnM= IGlsbHVzdHJhdGlvbnM= YXJpb3Vz RVJBTA== IENhbGN1bA== IHhlbg== IExpbmtlZElu IEp1bmc= IHJlZGVzaWdu Q29ubm9y Mjk2 IHJldmVyc2Fs IEFkZWxhaWRl IExM IHNpbmtpbmc= IGd1bQ== VVNI Y2FwdA== IEdyaW1t IGZvb3RzdGVwcw== IENCRA== aXNwZXJz IHByb3Nl V2VkbmVzZGF5 IE1vdmllcw== ZWRpbg== IG92ZXJ0dXJuZWQ= IGNvbnRlbnRpb3Vz VVNC fn5+fn5+fn5+fn5+fn5+fg== IENvcHBlcg== IHBvaW50bGVzcw== TlY= dmFsdWVz b2xwaGlu ZGFpbg== IGRlcG9zaXRlZA== IEdX IHByZWNlZGVk IENsYQ== IEdvbGVt IE5pbQ== IM6y IEVuZ2luZWVycw== bWlkZGxl IGZsYXR0 b3BlcmF0aXZl IGNvdW5jaWxz aW1iYWJ3ZQ== ZWxpbg== IHN0cmVzc2Z1bA== IExE IHJlc2g= bGFrZQ== IHdoZWVsY2hhaXI= IEFsdGVybmF0aXZl IG9wdGltaXpl b3BlcmF0aW9u IHBlZWs= IG9uZXNlbGY= aWdpbA== IHRyYW5zaXRpb25z b3BhdGh5 Ymxhbms= IDE2OQ== MTcx X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== IGxhdW5kZXJpbmc= RW5j IERFQw== IHdvcmtvdXRz IHNwaWtlcw== IGRpbm9zYXVycw== IGRpc2NyaW1pbmF0b3J5 UG9vbA== UmF0aGVy Mzg1 Uk5B dGVzdGVycw== ZXRv IElkZW50aXR5 IHZlaW4= IEJ1cnRvbg== IGFyY2FkZQ== NDIw VWx0aW1hdGVseQ== IFNhZGx5 w7A= cGlsbA== IGN1Ymlj IFNwZWN0cnVt dGhlc2U= c3RhdGVz IHVub2ZmaWNpYWw= aGF3a3M= IEVWRVJZ IHJhaW5ib3c= IGluY2FyY2VyYXRpb24= YW5kaW5n IHN5bGw= IEV2ZXJ0b24= IDE3OQ== IFNlcmJpYQ== IDE4OQ== bWV0ZXI= IE1pY2tleQ== IGFudGlxdQ== IGZhY3R1YWw= bmVjaw== IE5hcmU= bm9ybQ== bXVzdA== IGhpZ2h3YXlz IGdsYW0= IGRpdmlkaW5n IFNxdWFkcm9u IE1hcnRoYQ== IGJpcnRocw== Q292ZXI= Ly8vLy8vLy8vLy8vLy8vLw== IFdvbmc= UGhvdA== IEFMUw== cmlv IE5vbmV0aGVsZXNz IExlbW9u IDIwNg== IEVF IGRlcml2YXRpdmU= IFdXSUk= dm90ZQ== IHRoZXJlaW4= IHNlcGFyYXRpbmc= NDQ2 c3luYw== IFN0cmVldHM= IHJhdHQ= IG11bmljaXBhbGl0eQ== IFNob3J0bHk= IG1vbms= KSwi IHNjcnVi IG9wZXJhdGl2ZXM= TmVpdGhlcg== UGxhY2U= IExpbWl0 RmVtYWxl IEFjdG9y Q2hhcmFjdGVy IGNvbnN0aXR1dGVk MzU3 IHByb3Rlc3RlZA== IFN0cmF3 IEhlaWdodA== aWxkYQ== IFR5cGg= IGZsb29kcw== IGNvc21ldGlj V0FZ cGVydHVyZQ== dXBvbg== dG9ucw== ZXNzaW5n IFBvY2tldA== IHJvb2Z0 IENhdWNhcw== IGFudGlkZXByZXNz IGluY29tcGF0aWJsZQ== RUNE IG9wZXJh IENvbnRlc3Q= IGdlbmVyYXRvcnM= bGltZQ== RGVmZW5zZQ== MTk4Nw== Zm9ydW0= IHNhdmFnZQ== IEh1bmdhcmlhbg== bno= IG1ldGFsbGlj IGV4cGVsbGVk IHJlc2lkZW5jeQ== IGRyZXNzZXM= NjY2 IENsZW1lbnQ= ZmlyZXM= Q2F0ZWdvcnk= IGdlZWs= YWxpcw== IGNlbWV0ZXJ5 ZWR1Y2F0ZWQ= IGNyYXds IFVuYWJsZQ== IFR5c29u YWtpcw== IHBhcmRvbg== IFdyYQ== IHN0cmVuZ3RoZW5lZA== IEZvcnM= MzM1 IEhD IE1vbmQ= IHZpc3VhbHM= IEJlYXRsZXM= ZXR0bGVtZW50 IO8= Z3Jv IGJhc2g= IHBvb3Jlc3Q= IGV4Y2Vs IGFzcGlyYXRpb25z IE11bmljaXA= ZW5zaWJsZQ== IGNlcmVtb25pZXM= IGludGltaWRhdGlvbg== IENPTlRS YmVjaw== IEthcA== YXN1 IHRyYWRlbWFya3M= IFNldw== IENvbXBldGl0aW9u bmV0d29yaw== IEFycmk= IFRldA== Um9hbWluZw== V0M= RGF0 IHNvYg== IHBhaXJpbmc= IG92ZXJkb3Nl U0FZ YWJlcg== IHJldm9sdA== IEZhaA== YWN0aW5n ZXE= ZXN0YXRpb24= RmlnaHQ= IE1hcmtz Mjcz IDE3OA== UmF3 44GL MzQ5 YmxvY2tz IHZlcmdl ZXN0aW5l IFBvZGVzdGE= IGludmFzaXZl IHByb2ZvdW5kbHk= IEFv ZWFjaA== IGxlc3Q= aW50ZXJwcmV0 IHNocmlua2luZw== IGVycm9uZQ== IGNoZWVz bHlz IEl2eQ== IERpcmVjdG9yeQ== IGhpbnRlZA== VklDRQ== IGNvbnRhY3Rpbmc= IEdlbnQ= aGVp IGxhYmVsaW5n IG1lcmN1cnk= IExpdGU= IGV4cGlyZXM= IGRlc3RhYmls cml0aXM= Y3U= IGZlYXRoZXJz IHN0ZWVy IHByb2dyYW1tZWQ= IFZhZGVy R29pbmc= IEVsaW0= IHlv IE1pY2hl IDIwMw== IHNsZWV2ZXM= IGJ1bGx5 IEh1bWFucw== MzY4 IGNvbXByZXNz IEJhbm5lcg== QVJT IGF3aGlsZQ== IGNhbGli IHNwb25zb3JzaGlw IERpZmZpY3VsdHk= IFBhcGVycw== IGlkZW50aWZpZXI= fS4= IHlvZw== IFNoaWE= IGNsZWFudXA= IHZpYmU= aW50cm9kdQ== aW1taW5n QXVzdHJhbGlh IG91dGxpbmVz IFlvdXR1YmU= dHJhaW4= IE1ha2Vz IGRlcG9ydGVk IGNlbnRy IER1Zw== IEJvdWxkZXI= IEJ1ZmZ5 IGluanVuY3Rpb24= IEhhcmxleQ== IEdyb3Vwcw== IER1bWJsZWRvcmU= IENsYXJh ICIt IHNhY3JpZmljZWQ= ZXBo U2hhZG93 aWJsaW5n IGZyZWVsYW5jZQ== IGV2aWRlbnRseQ== cGhhbA== IHJldGFpbnM= TWly IGZpbml0ZQ== ZGFy IENvdXM= IHJlcGFpcmVk IHBlcmlvZGlj IGNoYW1waW9uc2hpcHM= IGFzdGVyb2lk YmxpbmQ= IGV4cHJlc3NseQ== IEFzdHJvcw== IHNjYWxlZA== IGdlb2dyYXBoaWNhbA== IFJhcGlkcw== RW5qb3k= IGVsYXN0aWM= IE1vaGFtZWQ= TWFya2V0 YmVnaW4= IGRpc2NvdmVycw== IHRlbGVjb21tdW5pY2F0aW9ucw== IHNjYW5uZXI= IGVubGFyZ2U= IHNoYXJrcw== IHBzeWNoZWRlbA== IFJvdWdl IHNuYXBzaG90 aXNpbmU= WFA= IHBlc3RpY2lkZXM= IExTRA== IERpc3RyaWJ1dGlvbg== cmVhbGx5 IGRlZ3JhZGF0aW9u IGRpc2d1aXNl IGJpb20= IEVYVA== IGVxdWF0aW9ucw== IGhhemFyZHM= IENvbXBhcmVk KSo= IHZpcnR1ZXM= IGVsZGVycw== IGVuaGFuY2luZw== IEFjcm9zcw== ZXJvcw== YW5nbGluZw== IGNvbWJ1c3Q= dWNjaQ== IGNvbmN1c3Npb24= IGNvbnRyYWNlcHRpb24= IEthbmc= IGV4cHJlc3Nlcw== IGF1eA== IFBpb25l IGV4aGliaXRz RGVidWc= T1RBTA== IEFscmVhZHk= IFdoZWVsZXI= IGV4cGFuZHM= Pzo= IHJlY29uY2lsaWF0aW9u IHBpcmF0ZXM= IHB1cnNl IGRpc2NvdXJhZ2U= IHNwZWN0YWNsZQ== UmFuaw== IHdyYXBz IFRob3VnaHQ= IGltcGVuZGluZw== T3Bw IEFuZ2xv IEVVUg== IHNjcmV3ZWQ= cmV0Y2hlZA== IGVuY291cmFnZW1lbnQ= bW9kZWxz IGNvbmZ1c2U= bW1t IFZpdGFtaW4= 4paR4paR Q3J1 IGtuaWdodHM= IGRpc2NhcmQ= IGJpc2hvcHM= IFdlYXI= IEdhcnJldHQ= a2Fu 44Of IG1hc2N1bGluZQ== Y2FwaXRhbA== IEF1cw== IGZhdGFsbHk= dGhhbmtz IEFV IEd1dA== MTIwMA== IDAwMDAwMDAw IHN1cnJvZw== IEJJT1M= cmFpdHM= IFdhdHRz IHJlc3VycmVjdGlvbg== IEVsZWN0b3JhbA== IFRpcHM= NDAwMA== IG51dHJpZW50 IGRlcGljdGluZw== IHNwcmluaw== IG11ZmY= IExJTQ== IFNhbXBsZQ== cHNj aWJp Z2VuZXJhdGVk IHNwZWNpbWVucw== IGRpc3NhdGlzZg== IHRhaWxvcmVk IGhvbGRpbmdz IE1vbnRobHk= IEVhdA== cG9vbnM= IG5lYw== IENhZ2U= IExvdHVz IExhbnRlcm4= IGZyb250aWVy IHBlbnNpb25z IGpva2Vk IEhhcmR5 PS09LT0tPS0= cmFkZQ== VUlE IHJhaWxz IGVtaXQ= IHNsYXRl IHNtdWc= IHNwaXQ= IENhbGxz IEphY29icw== ZmVhdA== IFVF IHJlc3RydWN0 IHJlZ2VuZXJhdGlvbg== IGVuZXJnaWVz IENvbm5vcg== T0hO IENoZWVzZQ== IGdlcg== IHJlc3VycmVjdA== bWFuYWdlbWVudA== Tlc= IHByZXNlbnRseQ== IEJydWlucw== TWVtYmVy IE1hbmc= aWRhbg== IGJvb3N0aW5n d3lu Ky4= cmVxdWlzaXRl IE5ZUEQ= IE1lZ2Fu IENvbmRpdGlvbnM= IHBpY3M= bmVzaXVt IFJhc2g= IDE3NA== IER1Y2tz IGVtYnJv enU= b25pYW4= cmVsaWdpb3Vz IGNyYXo= IEFDQQ== IFp1Y2tlcg== RU1B IFByb3M= V2VhcG9u IEtub3g= IEFyZHVpbm8= IHN0b3Zl IGhlYXZlbnM= IFB1cmNoYXNl IGhlcmQ= IGZ1bmRyYWlzZXI= RGlnaXRhbA== NTAwMA== IHByb3BvbmVudHM= L+KAiw== IGplbGx5 IFZpc2E= IG1vbmtz IGFkdmFuY2VtZW50 IFdlcg== IDE4Nw== ZXVz ZXJ0aWxpdHk= IGZldGFs IDE5MzY= TG8= IG91dGZpdHM= IHN0YWlyY2FzZQ== Ym9tYg== IGN1c3RvbWl6ZWQ= Y2xhaXI= VHJlZQ== IG1hcHBlZA== IENvbnNpZGVyaW5n IFRvcnJlcw== IG1ldGh5bA== IGFwcHJveGltYXRl IGRvb20= IEhhbnNlbg== IGNyb3Nzb3Zlcg== IHN0YW5kYWxvbmU= 5Lw= IGludml0ZXM= IGdyYXZleWFyZA== IGhw RG9uYWxkVHJ1bXA= IGVzY29ydA== R2Fy IHByZWRlY2Vzc29ycw== IGhheQ== IGVuenltZQ== IFN0cmFpZ2h0 dmlzb3Jz SW5n YW5lb3VzbHk= IEFwcGxpZWQ= IGZlYw== IER1cmFudA== IG91dHNwb2tlbg== b3Ji IHplYWw= IGRpc2dyYWNl Jyku IENoZW5n Mjg5 IFJlbmE= IFN1aWNpZGU= Mjk0 IG91dHJhZ2Vk IE5ld21hbg== IE52aWRpYQ== IEFiZXI= IEJlcnM= IHJlY3JlYXRpb24= V2luZG93 IERQ eGU= IHBlZG9waA== IGZhbGxvdXQ= YW1ib28= IHByZXNlbnRhdGlvbnM= IEFwcHM= IGh0bWw= MzQ1 IFhYWA== IHJ1YmJpbmc= IExlYXRoZXI= IGh1bWlkaXR5 c2V5cw== ZXN0YWJsaXNoZWQ= IFVuaXRz NjQ2 IHJlc3BlY3RhYmxl QXV0bw== IHRocml2aW5n IElubm92YXRpb24= YW5ncw== RXh0cmE= cmVndWxhdGlvbg== Mjk4 cGljaw== RXhhbXBsZXM= IENK QXR0YWNr IGRyYWNvbg== TFQ= IHN0aWNrZXI= cmVycw== IHN1bm55 SXNz cmVndWxhdGVk ZGlt IEFic3RyYWN0 IGh1c2JhbmRz T2ZmaWNl b21pbmF0aW9u aXRhcnM= QU5HRQ== YXNjYWw= IEtyaXM= IEluZmFudHJ5 IG1hbGY= IEF0aGU= IFJhbGx5 YmFsYW5jZWQ= Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u T1VQ IG1vbGVjdWxl bWV0aWNz IFNwbGl0 IEluc3RydWN0aW9ucw== IE5pZ2h0cw== Y2FyZHM= IHR1Zw== IGNvbmU= 5a0= IHR4 IERpc2N1c3Npb24= IGNhdGFzdHJvcGhl cHBl Z2lv IGNvbW11bmlzbQ== IGhhbHRlZA== IEd1YW50 Y2xlYW4= IFNjaGVk IEthbnll IHdhbmRlcg== IFNlcmlvdXNseQ== IDE4OA== ZW5uaWFs Zm9sbG93 cHJvZHVjdGl2ZQ== IEZsb3c= IFNhaWw= IGNyYXc= IHNpbXVsYXRpb25z b3J1 YW5nbGVz IE5vbGFu IG1lbnN0cnU= NDcw IDIwNw== YWph IGNhc3VhbGx5 Ym9hcmRpbmc= IDIyMg== b3Z5 IE51bWJlcnM= dW1hdA== T0U= Mjg3 IENsZW1zb24= IGNlcnRz IHNsaWQ= IFRyaWJl IHRvYXN0 IGZvcnR1bmVz IGZhbHM= IENvbW1pdHRlZXM= IGdw IGZpZXJ5 IE5ldHM= IEFuaW1l UGFja2FnZQ== IENvbXBhcmU= bGF1Z2h0ZXI= aW5mZWN0 IGF0cm9jaXRpZXM= IGp1c3RpY2Vz IGluc3VsdHM= IFZlcm5vbg== IHNoYWtlbg== IHBlcnNvbmE= ZXN0YW1w MzY3 YnJhaW4= IGV4cGVyaW1lbnRpbmc= S2Vu IEVsZWN0cm9uaWNz IDE2MQ== ZG9tYWlu IGdyYXBoaWNhbA== YmlzaG9w IHdob3BwaW5n IEV2YW5nZWw= IGFkdmVydGlzZXJz IFNwZWFy IGJpZHM= IGRlc3Ryb3lz dXR6 IHVuZGVyc2M= IEFERA== IGFudHM= IEN1bQ== aXBwbGVz IEZpbGw= IGdsYW5jZWQ= IGluZGljdGVk IEVmZg== IG1pc2Nvbg== IERlc2t0b3A= IGFiaWRl 44OA IElv IENvdWw= IGNhcHN1bGU= IENocnlz TU9O IHVuZGVz IElSQQ== IGNpdGF0aW9u IGRpY3RhdGU= IE5ldHdvcmtz IENvbmZsaWN0 IFN0dWZm eGE= aXNlYw== IENoZW1pc3RyeQ== IHF1YXJ0ZXJseQ== V2lsbGlhbXM= YW5hbg== T3B0 IEFsZXhhbmRyaWE= b3V0aGVhc3Rlcm4= IFNwcmluZ2ZpZWxk IEJsYWNrcw== IGdlb2dyYXBoeQ== MjQy IHV0bW9zdA== IEV4eG9u YWJvdXRz RVZB IEVuYWJsZQ== IEJhcnI= IGRpc2FncmVlZA== IEN5cHJ1cw== IGRlbWVudGlh IGxhYnM= IHViaXF1aXRvdXM= IExPVkU= IGNvbnNvbGlkYXRlZA== c3I= IGNyZWFteQ== IFRpbWJlcg== UmVnYXJkbGVzcw== IENlcnRpZmljYXRl ICIuLi4= b2dlbm91cw== Q2FwdGFpbg== IGluc3VsdGluZw== IFNvcm9z IEluc3Ry IEJ1bGdhcmlh YmV0dGVy IHN1Y2tpbmc= IERhdmlkc29u YXR6 IGNvbGxhdGVyYWw= Z2lm IHBsYWd1ZWQ= IENhbmNlbA== IEdhcmRuZXI= UkI= IHNpeHRlZW4= UmVtb3Zl dXJpc3RpYw== Y29vaw== Um9k IGNvbXByaXNpbmc= Zmxl KeKAlA== IFZpa2luZw== Z3Jvd3Ro YWdvbmFs IHNyZg== YWZldHk= bW90 TmVhcmx5 c3Rvd24= IEZhY3Rvcg== IGF1dG9tb2JpbGU= IHByb2NlZHVyYWw= bWFzaw== YW1waXJlcw== IGRpc2FwcGVhcnM= amFi MzE1 IDE5NTE= bmVlZGVk IGRhcmluZw== bGVhZGVy IHBvZGl1bQ== IHVuaGVhbHRoeQ== IG11bmQ= IHB5cmFtaWQ= b2NyZQ== IGtpc3NlZA== IGRyZWFtZWQ= IEZhbnRhc3RpYw== IEdseQ== 5Yo= IGdyZWF0bmVzcw== IHNwaWNlcw== IG1ldHJvcG9saXRhbg== IGNvbXB1bHM= aWV0cw== MTAxNg== IFNoYW0= IFB5cg== ZmxpZXM= IE1pZG5pZ2h0 IHN3YWxsb3dlZA== IGdlbnJlcw== IEx1Y2t5 IFJld2FyZHM= IGRpc3BhdGNo IElQQQ== IEFwcGx5 IGF2ZW4= YWxpdGllcw== MzEy dGhpbmdz ICgpLg== IG1hdGVz IFN6 IENPUA== b2xhdGU= T0ZG IHJlY2hhcmdl Y2Fwcw== IFlvcmtlcg== aWNvbmU= IGdhbGF4aWVz aWxlYWtz RGF2ZQ== IFB1eno= IENlbHRpYw== IEFGQw== Mjc2 IFNvbnM= IGFmZmlybWF0aXZl SG9y IHR1dG9yaWFscw== IENJVFk= IFJvc2E= IEV4dGVuc2lvbg== U2VyaWVz IGZhdHM= IHJhYg== bGlz IHVuaWM= IGV2ZQ== IFNwaW4= IGFkdWx0aG9vZA== dHlw IHNlY3Rhcmlhbg== IGNoZWNrb3V0 IEN5Y2w= U2luZ2xl IG1hcnR5cg== IGNoaWxsaW5n ODg4 b3VmbA== IF07 IGNvbmdlc3Rpb24= bWs= IFdoZXJlYXM= IDE5Mzg= dXJyZW5jaWVz ZXJpb24= IGJvYXN0 IFBhdGllbnRz IGNoYXA= IEJE cmVhbERvbmFsZFRydW1w IGV4YW1pbmVz aG92 IHN0YXJ0bGluZw== IEJhYnlsb24= d2lk b21ldw== YnJhbmNl IE9keXNzZXk= d2ln IHRvcmNo IFZveA== IE1veg== IFRyb2xs IEFucw== U2ltaWxhcmx5 IEZ1bA== MDA2 VW5sZXNz IEFsb25l c3RlYWQ= IFB1Ymxpc2hlcg== cmlnaHRz dHU= IERvZXNu IHByb2Zlc3Npb25hbGx5 IGNsbw== aWN6 IHN0ZWFscw== IOE= MTk4Ng== IHN0dXJkeQ== IEpvaGFubg== IG1lZGFscw== IGZpbGluZ3M= IEZyYXNlcg== ZG9uZQ== IG11bHRpbmF0aW9uYWw= IGZlZGVy IHdvcnRobGVzcw== IHBlc3Q= WWVzdGVyZGF5 YW5raW5k IGdheXM= IGJvcm5l IFBPUw== UGljdHVyZQ== IHBlcmNlbnRhZ2Vz MjUx cmFtZQ== IHBvdGlvbnM= QU1E IExlYmFuZXNl IHJhbmc= IExTVQ== b25ncw== IHBlbmluc3VsYQ== IENsYXVzZQ== QUxL b2hh IE1hY0Jvb2s= IHVuYW5pbW91cw== IGxlbmRlcnM= IGhhbmdz IGZyYW5jaGlzZXM= b3JlcnM= IFVwZGF0ZXM= IGlzb2xhdGU= YW5kcm8= U29vbg== IGRpc3J1cHRpdmU= IFN1cnZl IHN0aXRjaGVz IFNjb3Jw IERvbWluaW9u IHN1cHBseWluZw== QXJn IHR1cnJldA== IEx1aw== IGJyYWNrZXRz Kik= IFJldm9sdXRpb25hcnk= IEhvbmVzdA== IG5vdGljaW5n IFNoYW5ub24= IGFmZm9yZGVk IHRoYQ== IEphbmV0 IS0t IE5hcmVuZHJh IFBsb3Q= SG9s c2V2ZXI= ZWVudGg= IG9ic3RydWN0aW9u IDEwMjQ= c3RhZmY= amFz b3JnZXQ= c2NlbmVz bGF1Z2hz IEZhcmdv Y3JpbWU= IG9yY2hlc3Ry IGRlbGV0 aWxpYXJ5 cmlldmVk IG1pbGl0YXI= IEdyZWVuZQ== 4peP 44Gm IEd1YXJkcw== IHVubGVhc2hlZA== IFdlYmVy IGFkanVzdGFibGU= IGNhbGliZXI= IG1vdGl2YXRpb25z IMOg bUFo IExhbmth aGFuZGxl IHBlbnQ= IFJhdg== IEFuZ3VsYXI= IEthdQ== dW1iaW5n IHBoaWxhbnRocm9w IGRlaHlk IHRveGljaXR5 ZWVy IFlPUks= d2l0eg== 5bw= IElF Y29tbXVuaXR5 IEFI IHJldGFsaQ== IG1hc3NpdmVseQ== IERhbmllbHM= IERFTA== IGNhcmNpbg== VXJs IHJvdXRpbmc= IE5QQ3M= IFJBRg== cnljZQ== IHdhaXZlZA== IEd1YXRlbQ== RXZlcnlib2R5 IGNvdmVuYW50 IDE3Mw== IHJlbGF4aW5n IHF1YXJ0 YWxtb3N0 IGd1YXJkZWQ= IFNvbGRpZXJz IFBMQVk= IG91dGdvaW5n TEFORA== IHJld3JpdGU= IE1PVg== IEltcGVy IFNvbHV0aW9u IHBoZW5vbWVuYWw= IGxvbmdldml0eQ== IGltcGF0 IE5pc3Nhbg== aXJpZQ== IG9kb3I= IFphcg== b2tz IG1pbGl0aWFz IFNQRUM= IHRvbGVyYXRlZA== YXJzZXI= IEJyYWRmb3Jk Kyw= IHN1cnJlYWw= c2Y= Q2FuYWRpYW4= IHJlc2VtYmxhbmNl IGNhcmJvaHlkcmF0ZQ== VklFVw== IGFjY2Vzc29yeQ== bWVhbA== bGFyZ2VzdA== aWVnZWw= U29tZW9uZQ== IHRvdWdoZXN0 b3Nv IGZ1bm5lbA== IGNvbmRlbW5hdGlvbg== bHVlbnQ= IHdpcmVk IFN1bnNldA== SmVzdXM= IFBTVA== IFBhZ2Vz IFR5Y29vbg== IFBG IHNlbGVjdGlvbnM= IOCk cGFydGlzYW4= IGhpZ2hz IFJ1bmU= IGNyYWZ0cw== bGVhZA== IFBhcmVudHM= IHJlY2xhaW0= ZWtlcg== IEFsbGllZA== YWVwZXI= IGxvb21pbmc= IGJlbmVmaWNpYXJpZXM= IEh1bGw= U3R1ZGVudHM= SmV3aXNo ZGo= IHBhY3Q= dGVtcGxhdGU= IE9mZmljaWFscw== IEJheWxvcg== IGhlbXA= IHlvdXRocw== IExldmVscw== IFhpYW8= IENoZXM= IGVuZGVhdm9y IFJlbW92ZWQ= IGhpcHBvY2FtcA== SGVsbA== 44KK ODA1 IGRpbm9zYXVy IFdyYXRo IEluZG9uZXNpYW4= IGNhbGN1bGF0b3I= IERpY3Rpb25hcnk= IDQyMA== IE1BRw== KF8= ISw= dGFyaWFucw== IHJlc3RyaWN0aW5n cmFjdXNl IHdlZWtkYXk= T1VOVA== IHNocnVnZ2Vk bGVncm91bmQ= IGJhbGQ= IERvY3RvcnM= IHRvdXRlZA== IE1heHdlbGw= IDIxNA== IGRpcGxvbWF0 IHJlcHJlc3Npb24= IGNvbnN0aXR1ZW5jeQ== dmljZQ== cmFua2Vk IE5hcG9sZW9u Z2FuZw== IEZvcmV2ZXI= dHVu IGJ1bGI= IFBEVA== IENpc2Nv VkVO IHJlc3VtZWQ= U3RldmVu IE1hbml0b2Jh IGZhYnVsb3Vz IEFnZW50cw== MTk4NA== IGFtdXNpbmc= IE15c3Rlcmllcw== IG9ydGhvZG94 Zmxvb3I= IHF1ZXN0aW9ubmFpcmU= IHBlbmV0cmF0ZQ== IGZpbG1tYWtlcnM= IFVuYw== IHN0YW1wZWQ= IHRoaXJ0ZWVu IG91dGZpZWxk IGZvcndhcmRlZA== IGFwcHJh IGFpZGVk dHJ5 IHVuZm9jdXNlZA== IExpeg== IFdlbmR5 IFNjZW5l Q2hhcmc= IHJlamVjdHM= IGxlZnRpc3Q= IFByb3ZpZGVuY2U= IEJyaWQ= cmVnbg== IHByb3BoZWN5 IExJVkU= NDk5 IGZvcmdl IEZNTA== IGludHJpbnNpYw== IEZyb2c= IHdvbnQ= IEhvbHQ= IGZhbWVk Q0xVUw== YWVwZXJuaWNr IEhhdGU= IENheQ== IHJlZ2lzdGVyaW5n b3J0YWxpdHk= cm9weQ== b2NhbHlwdGlj YWFu bmF2 IGZhc2Npc3Q= SUZJRUQ= IGltcGxpY2F0ZWQ= IFJlc29ydA== IENoYW5kbGVy IEJyaWNr UGlu eXNj VXNhZ2U= IEhlbG0= dXNyYQ== 4piF4piF IEFiYmFz IHVuYW5pbW91c2x5 IGtlZXBlcg== IGFkZGljdGVk Pz8/ IGhlbG1ldHM= IGFudGlveGlk YXBzZWQ= ODA4 Z2llbmU= IHdhaXRz IG1pbmlvbg== cmF2ZWQ= IFBvcnNjaGU= IGRyZWFtaW5n IDE3MQ== IENhaW4= IHVuZm9y YXNzbw== IENvbmZpZ3VyYXRpb24= a3Vu aGFyZHQ= IG5lc3RlZA== IExEUw== TEVT IHR5aW5n ZW5vcw== IGN1ZQ== IE1hcnF1 c2tpcnRz IGNsaWNrZWQ= IGV4cGlyYXRpb24= IEFjY29yZGluZ2x5 IFdD IGJsZXNzaW5ncw== IGFkZGljdGl2ZQ== IE5hcnI= eXg= IEphZ3VhcnM= IHJlbnRz IFNpYmVy IHRpcHBlZA== b3Vzc2U= IEZpdHpnZXJhbGQ= IGhpZXJhcmNo b3V0aW5l IHdhdmVsZW5ndGg= Pi4= Y2hpZA== IFByb2Nlc3Npbmc= Lys= cmFua2luZw== RWFzeQ== IENvbnN0cnVjdA== IHRldA== aW5zdXJlZA== SFVE IHF1b3Rpbmc= IGNvbW11bmljYXRlZA== aW54 IGlubWF0ZQ== IGVyZWN0ZWQ= IEFic29sdXRlbHk= IFN1cmVseQ== IHVuaW0= IFRocm9uZQ== aGVpZA== IGNsYXdz IHN1cGVyc3Rhcg== IExlbm4= IFdoaXM= VWs= YWJvbA== IHNrZXQ= IE5pZXQ= IHBlcmtz IGFmZmluaXR5 IG9wZW5pbmdz cGhhc2lz IGRpc2NyaW1pbmF0ZQ== VGlw dmM= IGdyaW5kaW5n IEplbm55 IGFzdGhtYQ== aG9sZXM= IEhvbWVy IHJlZ2lzdGVycw== IEdsYWQ= IGNyZWF0aW9ucw== IGxpdGhpdW0= IGFwcGxhdXNl dW50aWw= SnVzdGljZQ== IFR1cmtz IHNjYW5kYWxz IGJha2U= dGFuaw== TWVjaA== IE1lYW5z IE1haWQ= UmVwdWJsaWNhbnM= aXNhbA== d2luZG93cw== IFNhbnRvcw== IHZlZ2V0YXRpb24= MzM4 dHJp IGZsdXg= aW5zZXJ0 IGNsYXJpZmllZA== IG1vcnRn IENoaW0= IFRvcnQ= IGRpc2NsYWlt bWV0YWw= IEFzaWRl IGluZHVjdGlvbg== IGluZmw= IGF0aGVpc3Rz YW1waA== IGV0aGVy IFZpdGFs IEJ1aWx0 TWluZA== IHdlYXBvbnJ5 U0VU IDE4Ng== YWRtaW4= Z2Ft Y29udHJhY3Q= YWZh IGRlcml2YXRpdmVz IHNuYWNrcw== IGNodXJu RWNvbm9t IGNhcHBlZA== IFVuZGVyc3RhbmRpbmc= IEhlcnM= IEl6 IGR1Y3Q= SUVOVA== YXVnaHR5 IOKclA== IE5Q IHNhaWxpbmc= SW5pdGlhbGl6ZWQ= IHRlZA== IHJlYWN0b3Jz IExvbWI= IGNob2tl IFdvcm0= IGFkbWlyYXRpb24= IHN3dW5n ZW5zaWJseQ== IHJhc2g= IEdvYWxz IEltcG9ydGFudA== U2hvdA== IFJhcw== IHRyYWluZXJz IEJ1bg== V29ya2luZw== IGhhcm1lZA== IFBhbmRvcmE= IExURQ== IG11c2hyb29t IENIQVI= IEZlZQ== IE1veQ== Qm9ybg== b2xpYmVyYWw= IE1hcnRpYWw= IGdlbnRsZW1lbg== IGxpbmdlcmluZw== T2ZmaWNpYWw= IGdyYWZmaXRp IE5hbWVz RGVy IHF1aW50 aXN0cmF0ZQ== YXplZXJh IE5PVElDRQ== IEZsb3JlbmNl IHBheWFibGU= IGRlcGljdHM= IFNwZWNpZXM= SGVhcnQ= 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IGVuY2xvc2Vk SW5jcmVhc2Vz RGFpbHk= IExpcw== IGVuYWN0bWVudA== IEJhY29u IFN0ZWVsZQ== ZGVtYW5k IDE4Mw== IG1vdXRocw== IHN0cmFuZGVk IGVuaGFuY2VtZW50 MDEx IFdoYXRz IGhlYWxlZA== ZW55 IFJhYg== IDM0MA== IExhYnlyaW50aA== cm9hY2g= IFlvc2g= IENsaXBwZXJz IGNvbmNlcnRz SW50ZXJuZXQ= MzU1 IHN0aWNrZXJz IHRlcm1lZA== IEF4ZQ== IGdyYW5kcGFyZW50cw== RnJhbmNl IENsaW0= IFVo dWxpYw== IHRocmlsbA== Y2VudHJpYw== IE92ZXJ2aWV3 IENvbmR1Y3Q= IHN1YnN0YW50aXZl IDE4Mg== bXVy IHN0cmF5 IENvZmY= IHJlcGV0aXRpdmU= IEZvcmdvdHRlbg== IHF1YWxpZmljYXRpb24= ZXdpdG5lc3M= IFppbWJhYndl IHNpbXVsYXRlZA== IEpE MjUz IFdhcmU= IHVuc2M= VGltZXM= IHN1bW1vbnM= IGRpc2Nvbm5lY3RlZA== IDE4NA== Y2l1cw== IEd1amFy b2RrYQ== IGVyYXNl IFRvYmFjY28= ZWxlY3RlZA== IHVuY29udA== IFNoZXBhcmQ= IExhbXA= IGFsZXJ0ZWQ= IG9wZXJhdGl2ZQ== YXJuYQ== dWludA== IG5lZ2xpZ2VuY2U= YWNlbWVudHM= IHN1cHJh IHByZXZhaWw= IFNoYXJr IGJlbHRz 44Gr IHRpZ2h0ZXI= RW5naW5lZXJz IGluYWN0aXZl IGV4cG9uZW50 IFdpbGxpZQ== YXBsZXM= IGhlaXI= IEhpdHM= aWFubg== IFNheXM= IGN1cnJlbnRz IEJlbmdhbA== IGFyaXN0 QnVmZmVy IGJyZWV6ZQ== IFdlc2xleQ== Q29sYQ== IHByb25vdW4= IGRlZWQ= IEtsaW5n IG9mdA== IGluZmxpY3Q= IHB1bmlzaGluZw== IG5t aWt1 T0RVQ1Q= MDE0 IHN1YnNpZHk= IERFQQ== IEhlcmJlcnQ= IEphbA== QmFuaw== IGRlZmVycmVk IHNoaXBtZW50 Qm90dA== IGFsbGU= YmVhcmluZw== SFRNTA== T2ZmbGluZQ== IDIxMw== IHNjcm9sbGluZw== IHNjYW5uZWQ= IExpYnlhbg== IFRPUA== Y2hyb20= ZHQ= Y29sdW1u UHN5TmV0TWVzc2FnZQ== WmVybw== IHRvcnNv MDUw 4pWQ IGltcGVyc29u IFNjaHdhcnR6 dWRpYw== IHBpc3NlZA== IFNhcHA= MjU3 IElTUHM= b2ds IHN1cGVydmlzZWQ= IGFkb2xlc2NlbnQ= IGF0dGFpbmVk IERlbGl2ZXJ5 IEJ1bm55 IDE5Mzc= IG1pbmlhdHVyZQ== IG9z IDM3MA== NjA4 IE1vdXJpbmhv IGlubmF0ZQ== IHRlbXBv IE5N IEZhbGxlbg== MDA5 IHByb3ZvY2F0aXZl U3RyZWFtZXI= IEJlbmVkaWN0 IEJvbHNoZQ== IHR1cnRsZQ== IFBDQg== IEVxdWFs RGlyZWN0b3I= IFJlbmQ= IGZsdWlkcw== QXV0aG9yaXRpZXM= IGNvdXNpbnM= cmVxdWVuY3k= IE5laWdoYm9y c2V0cw== c2hhcmVk Q2hhcmxlcw== cGFzc3dvcmQ= IGdlYXJz IDIxMQ== IEhhcmR3YXJl cmlrYQ== IHVwc3RyZWFt SG9t IGRpc3Byb3BvcnRpb25hdGVseQ== aXZpdGllcw== IHVuZGVmaW5lZA== IGVsZWN0cm9ucw== IGNvbW1lbW9y RXZlbnR1YWxseQ== ID48 IGlycmVzcG9uc2libGU= MjE4 IFJlbGVhc2Vk IE9WRVI= IElHTg== IEJyZWFk c3RlbGxhcg== IFNhZ2U= dHRlZA== ZGFtYWdl ZWRpdGlvbg== IFByZWM= IGxpbWU= IGNvbmZpbmVtZW50 IGNhbG9yaWU= d2VhcG9u IGRpZmZlcmluZw== IFNpbmE= bXlz YW1k IGludHJpY2F0ZQ== a2s= IFBBVA== w6Nv c3RvbmVz bGlua3M= IHJhbmNo U2VtaXRpYw== IGRpZmZlcmVudGlhdGU= IFNpbmdlcg== b2NjdXBpZWQ= IGZvcnRyZXNz Y21k IGludGVyY2VwdGlvbg== IEFua2FyYQ== IHJlcHQ= IFNvbGl0YWlyZQ== IHJlbWFrZQ== cHJlZA== IGRhcmVk YXV0aW9ucw== IEJBQ0s= UnVubmluZw== IGRlYnVnZ2luZw== IGdyYXBocw== Mzk5 IE5pZ2Vs IGJ1bg== IHBpbGxvdw== IHByb2dyZXNzZWQ= ZmFzaGlvbmVk IG9iZWRpZW5jZQ== RVJO IHJlaGVhcnM= Q2VsbA== dGw= U2hlcg== IGhlcmFsZA== IFBheW1lbnQ= IENvcnk= IERlcHQ= IHJlcGVudA== IFdlYWs= dWNrbGFuZA== IHBsZWFzaW5n IHNob3J0YWdlcw== IGp1cm9ycw== IEthYg== cXFh QW50aQ== IHdvdw== IFJDTVA= IHRzdW4= IFNpYw== IGNvbXByaXNlcw== IHNwaWVz IHByZWNpbmN0 bnU= IHVyZ2Vz IHRpbWVk IHN0cmlwZXM= IEJvb3Rz IHllbg== QWR2YW5jZWQ= IGRpc2NyZXRl IEFyY2hhbmdlbA== ZW1wbG95bWVudA== RGlmZg== IG1vbnVtZW50cw== IDIwOQ== d29ya2Vy IDE5Ng== IEln dXR0ZXJzdG9jaw== VFBT SmFj IGhvbWVsZXNzbmVzcw== IGNvbW1lbnRhdG9y IHJhY2lhbGx5 ZmluZw== c2VlZA== RWxl ZWxsYXRpb24= IGV0aGFub2w= IHBhcmlzaA== IERvbmc= IEF3YWtlbmluZw== IGRldmlhdGlvbg== IEJlYXJpbmc= IFRzdWs= IHJlY2Vzcw== IGx5bXBo IENhbm5hYmlz 5Zw= IE5FV1M= IGRyYQ== IFN0ZWZhbg== IFdyb25n IFNBTQ== IGxvb3NlbHk= IGludGVycHJldGVy IFBsYWlu R292ZXJubWVudA== IGJpZ290cnk= IGdyZW5hZGVz YXZleg== cGljdHVyZWQ= IG1hbmRhdGVk IE1vbms= IFBlZHJv IGxhdmE= Mjc0 IGN5bmljYWw= IFNjcm9sbHM= bG9ja3M= TXA= IGNvbmdyZWdhdGlvbg== b3JuaW5ncw== cGhpbA== IEliaWQ= IGZlcnY= IGRpc2FwcGVhcmluZw== IGFycm9nYW50 c3lu IE1hdmVy IFN1aXQ= MjQx IGFiYnJl YWNrZXJz UGE= IFllbA== V2hlbmV2ZXI= IDIzNQ== IFZpbmU= IEFuYXQ= IGV4dGluY3Q= TEVU IGV4ZWN1dGFibGU= VkVSUw== b3hpZGU= RE5B IFByZWw= IHJlc2VudG1lbnQ= IGNvbXByaXNl IEF2aXY= IGludGVyY2VwdGlvbnM= IHByb2xpZmlj SU5B IEVyaW4= dGhvdWdodA== MjE5 IFBzeWNoaWF0cnk= dW5reQ== Y2hlbWlzdA== SG8= IE1jQ295 IGJyaWNrcw== TG9z cmlseQ== IFVTU1I= IHJ1ZA== IGxhdWQ= IFdpc2U= IEVtZXJhbGQ= IHJldml2ZWQ= IGRhbW5lZA== IFJlcGFpcg== aWRlbQ== Y3RpY2E= IHBhdHJpYXJjaA== IE51cnM= bWVn IGNoZWFwZXN0 cmVlbWVudHM= ZW1wdHk= IENlbGVicg== IGRlcHJpdmF0aW9u Y2hhbnRlZA== IFRodW1ibmFpbHM= RW5lcmd5 IEV0aGFu IFFpbmc= IG9wcG9zZXM= V0lORA== dmlr IE1hdQ== IFNVQg== NjY3 R1JF IFZvbHVudGU= bnRvbg== Q29vaw== 5ZA= ZXNxdWU= IHBsdW1tZXQ= IHN1aW5n IHByb25vdW5jZQ== IHJlc2lzdGluZw== IEZpc2hpbmc= IFRyaWFscw== IHllbGw= IDMxMA== IGluZHVjdA== IHBlcnNvbmFsaXplZA== b2Z0ZW4= UmVi RU1CRVI= IHZpZXdwb2ludA== IGV4aXN0ZW50aWFs KCkp cmVtb3Zl TUVOVFM= bGFzc2Vz IGV2YXBvcg== IGFpc2xl bWV0YQ== IHJlZmxlY3RpdmU= IGVudGl0bGVtZW50 IGRldmlzZWQ= bXVzaWM= YXNjYWRl IHdpbmRpbmc= b2Zmc2V0 IGFjY2Vzc2liaWxpdHk= a2VyZWQ= QmV0dGVy IEpvaG5zdG9u dGhpbmtpbmc= U25vdw== IENyb2F0aWE= IEF0b21pYw== Mjcx MzQ4 IHRleHRib29r IFNpeHRo INin2YQ= IHNsaWRlcg== IEJ1cmdlcg== Ym9s U3luYw== IGdyYW5kY2hpbGRyZW4= IGNlcnY= Kyk= IGV0ZXJuaXR5 IHR3ZWV0aW5n IHNwZWN1bGF0aXZl IHBpdm90YWw= IFdQ IFRFUg== eW5hbWlj IHVwbA== IENhdHM= cGVyaGFwcw== IGNsYXNzbWF0ZXM= IGJsYXRhbnQ= Jy0= IGxha2g= YW50aW5l IEJvcmc= aW9t Lyg= IEF0aGxldGlj IHNhcg== T1RB IEhvZmZtYW4= TmV2ZXJ0aGVsZXNz IGFkb3JhYmxl IHNwYXduZWQ= QXNzb2NpYXRlZA== IERvbWVzdGlj IGltcGxhbnQ= IEx1eGVt IEtlbnM= IHB1bXBz IFNBVA== QXR0cmlidXRlcw== NTA5 YXZvdXI= IGNlbnRyYWxpemVk IFRO IGZyZXNobHk= IEFjaGlldmU= IG91dHNpZGVycw== aGVydHk= IFJlZQ== IFRvd2Vycw== IERhcnQ= YWthYmxl IG1w IEhlYXZlbmx5 IHJpcGU= IENhcm9saW5l cnlhbg== IGNsYXNzaWNz IHJldGlyaW5n IDIyOA== IGFo IGRlYWxpbmdz IHB1bmNoaW5n IENoYXBtYW4= T3B0aW9ucw== bWF4d2VsbA== dm9sdW1l IHN0YWw= IGV4cG9ydGVk IFF1aXRl IG51bWVyaWNhbA== QnVybg== RmFjdA== IEtleXN0b25l IHRyZW5kaW5n IGFsdGVyaW5n IEFmcmljYW5z NDc4 IE1O IEtub2Nr IHRlbXB0YXRpb24= IHByZXN0aWdl T3ZlcnZpZXc= IFRyYWRpdGlvbmFs IEJhaHJhaW4= UHJpdmF0ZQ== IEhPVQ== IGJhcnI= IFRhdA== Q3ViZQ== VVNE IEdyYW5kZQ== IEdhdA== IEZsbw== IHJlc2lkZXM= IGluZGVj dm9sZW50 IHBlcnBldHVhbA== dWJlcw== IHdvcmxkdmlldw== IFF1YW50dW0= IGZpbHRlcmVk IGVuc3U= b3JnZXRvd24= RVJTT04= IE1pbGQ= Mzc5 T1RU w6U= IHZpdGFtaW5z IHJpYmJvbg== IHNpbmNlcmVseQ== IEhpbg== IGVpZ2h0ZWVu IGNvbnRyYWRpY3Rvcnk= IGdsYXJpbmc= IGV4cGVjdGFuY3k= IGNvbnNwaXI= IG1vbnN0cm91cw== IDM4MA== cmVjaQ== IGhhbmRpYw== IHB1bXBlZA== IGluZGljYXRpdmU= IHJhcHA= IGF2YWls IExFR08= IE1hcmlqdWFuYQ== MTk4NQ== ZXJ0b24= IHR3ZW50aWV0aA== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IFN3YW1w IHZhbHVhdGlvbg== IGFmZmlsaWF0ZXM= YWRqdXN0ZWQ= IEZhY2lsaXR5 MjYy IGVuenltZXM= aXR1ZGluYWw= IGltcHJpbnQ= U2l0ZQ== IGluc3RhbGxlcg== IFRSQQ== bW9sb2d5 bGluZWFy IENvbGxlY3RpdmU= aWdhdGluZw== IFRva2Vu IHNwZWN1bGF0ZWQ= S04= IENseQ== b3JpdHk= IGRlZmVy IGluc3BlY3RvcnM= YXBwcm92ZWQ= Uk0= IFN1bnM= IGluZm9ybWluZw== IFN5cmFjdXNl aWJsaQ== NzY1 IGdsb3Zl IGF1dGhvcml6ZQ== 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm IENydWlzZQ== IGNvbnRyYWN0aW5n c2hlbGw= SUZF IEpld2Vs cHJhY3Q= IFBob3Rvc2hvcA== IEtub3dpbmc= aGFybQ== IGF0dHJhY3Rpb25z YWRhbg== ZXR1cw== MDE4 d2FnZW4= QWx0 IG11bHRpcGx5 IGVxdWlsaWJyaXVt Ons= IEZpZ2h0ZXJz IEVkZ2Fy IGZvdXJ0ZWVu R292ZXJu IG1pc3VzZQ== IGFidXNpbmc= IGFuY2VzdHJ5 cmFtZXI= NjQ0 IHdvcm1z IHRoaWNrZXI= IENvbWJpbmU= IHBlYXNhbnRz IHZpbmQ= IGNvbnF1ZXN0 IG1vY2tlZA== IGNpbm5hbW9u IENhbGQ= IEdhbGx1cA== IGF2b2lkYW5jZQ== IGluY2FybmF0aW9u IFN0cmF0 IHRhc3RlZA== ZW50YQ== IE5lYWw= cGFyZWQ= IHRlcm1pbm9sb2d5 amVjdGlvbg== U2NpZW50aXN0cw== IElOUw== IERlZQ== IGRpcmVjdG9yaWVz Um9hZA== IFNoYXA= YnJpZ2h0 IERpcmVjdG9ycw== IENvbHVtbg== IGJvYg== IHByZWZlcmFibHk= IGdsaXRjaA== ZnVydA== IGVn aWRpcw== Q0JD IHN1cnJlbmRlcmVk IHRlc3RhbWVudA== MzM2 dWdnZXN0 IE5pbA== YW5vdGhlcg== IHBhdGhldGlj IERvbm5h IDIxOA== IEF2ZXJ5 IHdoaXNrZXk= IGZpeHR1cmU= IENvbnF1ZXN0 IGJldHM= T2Nj IExlaWNlc3Rlcg== XS4i ICkpOw== IGZsYXNoZXM= NDU2 IG1hc2tlZA== Z2VicmE= IGNvbXB1dGVk Y2hlbA== YXVkZXI= IGRlZmVhdHM= IExpYmVyYXRpb24= IE9zYW1h IFZpdmU= Q2hhbmdlcw== Q2hhbm5lbA== IHRhcmlmZnM= IG1hZ2U= IFNheA== IGluYWR2ZXJ0ZW50bHk= IENSRQ== IFJlYXBlcg== aW5reQ== Z3JhZGluZw== IHN0ZXJlb3R5cA== IGN1cmw= IEZBTlQ= IGZyYW1ld29ya3M= TW9t IEFuY2g= IGZsYXZvdXI= Y2FyYm9u IHBlcm1pdHRpbmc= bGV0Y2hlcg== IE1vemlsbGE= IFBhcmtpbmc= IENoYW1w U2Nyb2xs IG11cmRlcmVy IHJlc3RlZA== IG93ZXM= IFBvc3M= QURE SUZG cmVzb2x1dGlvbg== IE1pbmluZw== IGNvbXBhcmF0aXZl RGlt IG5laWdoYm91cmluZw== IEFTVA== IFRveGlj IGJpYXNlcw== IGd1bmZpcmU= dXJvdXM= IE1vbWVudA== MTk4Mw== IHBlcnZhc2l2ZQ== dHRw IE5vcm1hbGx5 cmly U2FyYWg= IEFsYmFueQ== IHVuc2V0dA== IFNNUw== aXBlcnM= bGF5ZXI= IFdoaXRlcw== dXBsZQ== IHR1cmJv IExlZWRz IHRoYXRz IE1pbmVy TUVS IFJlaWdu IHBlcm1l IEJsaXR6 IDE5MzQ= IGludGltaWRhdGluZw== dHViZQ== IGVjY2VudHJpYw== YWJvbGlj Ym94ZXM= IEFzc29jaWF0ZXM= dm90ZXM= IHNpbXVsYXRl dW1ibw== YXN0ZXJ5 IHNoaXBtZW50cw== RkZGRg== YW50aA== IHNlYXNvbmVk IGV4cGVyaW1lbnRhdGlvbg== 4pag bGF3cw== TWVldA== aWRkbGVz YW50aWNz UmF0aW5n SVNJUw== aGlmdA== IGZyb250cw== YnVm MDE3 IHVuYXR0 IERpbA== bGVhc2Vz IEdhcmRlbnM= Nzc3 dG91Y2g= dmVsbA== NDU4 ID09PT09 c2F2aW5n IGVyb3Npb24= IFF1aW4= IGVhcm5z IGFjY29tcGxpc2htZW50 IFdlaQ== IDxb X19fX18= IGlycmln IFRlZGR5 IGNvbnF1ZXJlZA== IEFybW9yZWQ= IGFzc2VydHM= IG1hbmlwdWxhdGluZw== csOp IHRyYW5zY3JpcHRz R2FsbGVyeQ== IHBsb3R0aW5n TmVpbA== IGJldHJheWFs bG9hZGVy IFN1bA== IGRpc3BsYWNlbWVudA== IHJveWFsdHk= IFdJ aGVpdA== IERldmljZXM= YWxsZWw= IG11bmljaXBhbGl0aWVz IGNhbmFs U3RhcnM= IFVBRQ== ICLigKY= IENV YWJvdmU= IHJlc29uYW5jZQ== IGd1aUFjdGl2ZVVu YWRkZWQ= IEJyYXZlcw== IElibg== IGhlcmVieQ== IEJSRQ== IHNoYXJlaG9sZGVy IEhpcg== IEpp IHN0cmFuZ2VseQ== IGFkbWlyZWQ= IHBsaWdodA== IGJhY2hlbG9y IFBvbGU= Y2lwbGluYXJ5 VG9ueQ== IEFybWVuaWFu IHVubWFu IFppb25pc3Q= U3RhZ2U= aXNjb3Zlcg== IGF1dG9tb3RpdmU= IHNpZGVsaW5lcw== IHNsaWNr IFJlbmFpc3NhbmNl IEZVTg== SW1hZ2Vz IEhhag== IHBpbmc= IHNob3J0Y3V0 IEJsdmQ= IExvb2tz IGJ1cnN0cw== IGNsYW1w IG1pc2g= IHNvcnRpbmc= IHBhdHJpb3Q= IGNvcnJlY3RuZXNz IFNjYW5kaW5hdg== IENhdmFsaWVycw== cHl0aG9u YXphcg== IDM3NQ== IEphdW5l NDA5 IGRldHJpbWVudGFs IHN0YWJiaW5n IHBvaXNvbmVk IGZvdW50YWlu b2NlbnQ= b3JzdA== IE1hcmk= IHJhaW5z IE92ZXJz IEluc3RpdHV0aW9u dWRnZXQ= QU1Z dGFsZQ== IEtS IFByaWNlcw== IGhlYWRhY2hlcw== IGxhbmRzbA== IEF1cmE= Qm9udXM= IFpoYW8= IEhpcA== IGhvcHM= IEt1cmRpc3Rhbg== IGV4cGxvaXRpbmc= cnlu IGh5cG9jcmlzeQ== b3BlbmluZw== IGd1bnNob3Q= IHdlZA== aW50ZXJzdGl0aWFs SW50ZXJzdGl0aWFs IGFtZW4= QnJlYWtpbmc= IG1hcmtldGVk V2lyZQ== IENyb3dk Q29udGludWU= IEtub3du IEVmZmVjdGl2ZQ== b3JlYW4= aXpvbnM= Sm9zZXBo IGVzY2FsYXRpb24= dXNlcm5hbWU= IGN1cnRhaW4= QVRFUw== IFBBUg== IE1peQ== IGNvdW50ZXJmZQ== bGVuZQ== IGNvbnRlbmRlcnM= ZGFpbHk= IEFzYw== IFBoaWxsaXA= bW9zdGx5 IGZpbGVuYW1l aGVuZQ== IHJlc2VtYmxpbmc= IHN0YWdpbmc= IENobG9l IHdpcmluZw== SG9u IFJlbmV3 b3R0YWdl IEh5YnJpZA== bXVjaA== IHN0cm9rZXM= IHBvbGljeW1ha2Vycw== QVBURVI= IEFya2hhbQ== cGxvdA== IGFzc2lzdGFudHM= IGRlcG9ydA== IFNlZ2E= IGluZmx1ZW56YQ== IEN1cnNlZA== IEtvYmU= IHNraW5ueQ== UHJvdmlkZXI= IFJpcA== IGluY3JlbWVudGFs cHJvZHVjdHM= QkY= IGRvbWU= IENyZWRpdHM= IGxvc2Vycw== aW50cw== IEJldHR5 IFRhbGVudA== IERBTQ== THY= RXNz IGRlbnM= dGVtcA== SnVkZ2U= b2RpYw== ICco VVJFUw== ZXRzaw== Vk8= IHJldHJpZXZlZA== IGFyY2hpdGVjdHM= 2Yc= IGV0aGlj IFNlY29uZGFyeQ== c3RvY2tz YWRpYQ== IDMyNQ== IE9waW5pb24= IHNpbXVsdGFuZW91cw== IGRpeno= dWxw IHNtdWdnbGluZw== aXBwZXJ5 UmFuZG9t ZmFjaW5n IERhcw== IHN0b2NrcA== IGRpc2Nsb3N1cmVz cG9pbnRlcg== IGNvcmFs IFNlbGVjdGlvbg== IFBpa2U= aXZhbGVudA== IHJ1dGhsZXNz IFJpbQ== IGVuc3Vpbmc= IEV4cGVyaW1lbnQ= IGNvbmdyZXNzbWFu IGJlbGlldmVy IHVuc3BlY2lmaWVk IE1vcmQ= IGtub3dsZWRnZWFibGU= IFZFUlk= VFg= IHN0cmFwcw== IHR1cmY= YXBlc2hpZnRlcg== IG1hcml0YWw= IGZsb2Nr 44GG MjYz QU1FUw== IE9wcG9zaXRpb24= IHRyZWFzdXJlcw== IEdPRA== IG1vZGVsZWQ= IFdPUkxE IChb IFVzYWdl SEY= ICQo dXNzZWQ= IHBpb25lZXI= RWlnaHQ= cGFyc2U= YnJlYWQ= cml0eg== IE1pcmFuZGE= IEthbnQ= Kysp b3Jlbg== IHByb3Zva2Vk IGJyZWVkcw== IEluY2x1ZGVz IFBhc3RlYmlu IEZsaXA= SmF2YQ== IGJyaW5r IHJ1bW9yZWQ= IHVuc2Vlbg== IGdhcm5lcmVk IERlZmlu YWx0ZWQ= IHRhdHRvb3M= IGhlc2l0YXRpb24= aXNpdGlvbnM= IFdlYXZlcg== IFJlcG9ydGluZw== IHRoZXJhcGllcw== IGNvbnN1bHRhbnRz IHJlc2lkdWFs IE1hbGk= IFJvbWE= aWFnbw== IFJlc2lkZW50cw== dWJp IHJlbWVkaWVz IGFkYXB0aXZl IEFsaXZl IEJhcmNs IHdhbGxldHM= Y3J5cHQ= ZXRlcm1pbmF0aW9u IFBlbG9zaQ== IHNsaXBwaW5n b3Rvbmlu IGFsbGlhbmNlcw== cGF0cmljaw== aXJpcw== IG9ydGg= IFBlcmtpbnM= IERlVg== IEdldHM= IGRyeWluZw== Z2Vl Zm9yZXN0 IEZvcmdldA== b3JlbQ== MzM5 IHZhZ3VlbHk= IERpb24= IFBvcm4= IEhPVw== IHBuZXVt IHJ1YmJsZQ== IFRhc3Rl ZW5jaWE= IEdlbA== IGRzdA== IDI0NQ== IE1vcm9jY28= aW5mbGFtbQ== IFR3aW5z IGJvdHM= ZGF1Z2h0ZXI= IEJhbGs= IGJyZXRocmVu IGxvZ29z IGdvYmw= ZnBz IHN1YmRpdmlzaW9u IHBhd24= IHNxdWVlemVk IG1vcmFsZQ== IERX JyI= IGtub3Q= b29reQ== IGRpdmlzaXZl IGJvb3N0ZWQ= Y2h5 44OQ aWZhY3Q= IG5ld2NvbWVycw== IFdyZXN0bGluZw== IHNjb3V0cw== d29sdmVz UmF0 IG5pbmV0ZWVudGg= IE9zYm9ybmU= U3RhdHM= IGVtcG93ZXJlZA== IHBzeWNob3BhdGg= IE9FTQ== dWdnYWdl IFBL IE1vaGFtbWFk UGFr IGFuYXJjaGlzdHM= IEV4dHJhY3Q= ZXN0aGVz IFN0b2NraG9sbQ== bG9v IEdyYXBo IGRlcGxveWluZw== IFN0cmFuZ2Vy IE1vbGQ= IHN0YWZmZXI= IGRpc2NvdW50ZWQ= dWNrbGU= cGxlYXNl IExhbmRpbmc= w61h IDE5Mw== IGFudGU= IHJlcGV0aXRpb24= ICsvLQ== IHBhcm9keQ== IGxpdmVseQ== QUFB IEhvcnVz IHBpdHM= aW5kZXJz TE9D IFZlbmljZQ== NDA2 IERpc2NvdmVy 4oY= ZWxsZWN0dWFs IHBlbnM= IGV5ZWw= aWd1b3Vz SW1wbA== IGpva2luZw== IGludmFs IEJlbGZhc3Q= IGNyZWRpdG9ycw== IFNreXdhbGtlcg== b3Zza3k= IGNlYXNlZmlyZQ== IHNlYWxz aXNvZnQ= KSku IEZlbGl4 SVRT IHRyZXNw IEJsb2NrY2hhaW4= ZXdhcmU= IFNjaHdhcg== ZW5uZQ== bW91bnRlZA== IEJlYWNvbg== bGVzaA== IGltbWVuc2VseQ== IGNoZWVyaW5n RW1wbG95 c2NlbmU= aXNobHk= YXRjaGV3YW4= IE5pY29sYXM= IGRyYWluZWQ= IEV4aXQ= IEF6ZXJi anVu IGZsb2F0ZWQ= dWFuaWE= RGVlcA== IHN1cGVydg== IG15c3RpY2Fs IERvbGxhcg== IEFwb3N0bGU= IFJFTA== IFByb3ZpZGVk IEJ1Y2tz 44O0 Y3V0dGluZw== IGVuaGFuY2VtZW50cw== IFBlbmd1aW5z IElzYWlhaA== IGplcms= IFd5bg== IHN0YWxsZWQ= IGNyeXB0b2N1cnJlbmNpZXM= IFJvbGFuZA== c2luZ2xl IGx1bWlu IEZlbGxvdw== IENhcGFjaXR5 IEthemFraA== V04= IGZpbmFuY2Vk Mzg5 IHRpZA== IGNvbGx1c2lvbg== IE15cg== 7oA= U2VuYXRvcg== IHBlZGlhdHJpYw== IG5lYXRseQ== IHNhbmR3aWNoZXM= IEFyY2hpdGVjdHVyZQ== IHR1Y2tlZA== IGJhbGNvbnk= IGVhcnRocXVha2Vz cXVpcmU= RnV0dXJl IGhlZnR5 6Zc= IHNwZWNpYWxpemVz IHN0cmVzc2Vz IHNlbmRlcg== IG1pc3VuZGVyc3RhbmRpbmc= IGVwaWxl IHByb3Zva2U= IENvbG9ycw== IGRpc21heQ== dWtv W18= NTg2 bmV1dHJhbA== IGRvbmF0aW5n IFJhbmRhbGw= TXVsdGk= IGNvbnZlbmllbnRseQ== IFN1bmc= IENvY2E= IHRlbnRz IEFjY2VsZXI= IHBhcnRuZXJlZA== Mjcy aXJtaW5n IEJBUw== c29tZXRpbWVz IG9iamVjdGVk dWJyaWM= cG9zZWQ= TENT Z3Jhc3M= IGF0dHJpYnV0YWJsZQ== VklT SXNyYWVsaQ== IHJlcGVhdHM= IFJN dmFn dXRh aW5vdXM= IGluZXJ0 IE1pZ3VlbA== 5q0= IEhhd2FpaWFu Qm9hcmQ= IGFydGlmaWM= IEF6ZXJiYWk= YXNpbw== IFJlbnQ= QUlO IGFwcGxpYW5jZXM= IG5hdGlvbmFsaXR5 IGFzc2hvbGU= IE5lYg== IG5vdGNo aGFuaQ== IEJyaWRl QXZhaWxhYmlsaXR5 IGludGVyY2VwdGVk IGNvbnRpbmVudGFs IHN3ZWxsaW5n IFBlcnNwZWN0 Ymllcw== Ljw= aXRobWV0aWM= IExhcmE= IHRlbXB0aW5n YWRkcg== IG92ZXJzZWVpbmc= Y2xhZA== IERW IEdpbmdyaWNo IG11bg== IEFwcHJvcHJp IGFsdGVyYXRpb25z IFBhdHJlb24= IGhhdm9j IGRpc2NpcGxpbmVz IG5vdG9yaW91c2x5 YWt1eWE= aWVyaQ== Pyku IFdlbnQ= IHNpbGljb24= IHRyZW1i Q29udGFpbmVy S25vd24= IG1vcnRhcg== ZXN0ZQ== aWNrYQ== QXJ0aHVy IFByZXZpb3VzbHk= IE1hcnR5 IHNwYXJzZQ== Z2lucw== IGlud2FyZA== IFBhcnRpY2lwYW50 Q29weQ== IE1pc2M= IGFudGliaW90aWM= IFJldHJv IGVsdXNpdmU= IGFzc2FpbA== IEJhdHRhbGlvbg== IEJvdWdodA== IGRpbWluaXNo IEV1cm9wYQ== c2Vzc2lvbg== IERhbmdlcm91cw== aWVzZWw= IGRpc2JlbGllZg== IGJsYXN0cw== ZXh0cmVtZQ== IEJveWQ= IFByb2plY3Rz IEd1eXM= IHVuZGVyZ29uZQ== IGdyaWxs IER3aWdodA== IDE5Nw== VVNFUg== IGZpbGVzeXN0ZW0= IGNsb2Nrcw== VGF5bG9y IHdyYXBwZXI= IGZvbGRpbmc= b3VzYW5k IFBoaWxpcHBpbmU= QVRJT05BTA== IFBlcnRo IGFzaGVz IGFjY3VtdWxhdGU= IEdhdGV3YXk= U2hvcA== b3Jrc2hpcmU= SGFu IEJhcnJlbA== IExlaA== IFhW IHdoaW0= IHJlcG8= IENH IE1hbQ== IGluY29ycG9yYXRpbmc= IGJhaWxvdXQ= IGxpbmd1aXN0aWM= IGRpc2ludGVn Q0xF IGNpbmVtYXRpYw== IEZpYmVy U3lu aWxpb24= IENvbXBvcw== Y2hlbnM= IG5lb2M= IGJvaWxlZA== RklORQ== b25v dW5jbGU= aWtlbg== IEJN zrk= IHJlY2VpcHRz IGRpc3Bvc2Vk IFRoaXJ0eQ== IFJvdWdo IEFCUw== IG5vdHdpdGhzdGFuZGluZw== b2xsZW4= IyQ= IHVucmVsaWFibGU= IGJsb29t IG1lZGlvY3Jl IHRyYW0= IFRhc21hbg== IHNoYWtlcw== IG1hbmlmZXN0bw== IE1X IHNhdGlzZmFjdG9yeQ== IHNob3Jlcw== IGNvbXB1dGF0aW9u IGFzc2VydGlvbnM= b3Jtb25z YXJhZw== YWJpdA== RGVtb2NyYXRz IExvb3Q= IFZvbGtz aGFpcmVk IGdyYXZpdGF0aW9uYWw= U2luZw== IE1peg== IHRocm90dGxl IHR5cmFubnk= IFZpZXdz IHJvYmJlcg== IE1pbm9yaXR5 IHNocmluZQ== c2NvcGU= cHVycG9zZQ== IG51Y2xldXM= b3VyY2luZw== IFVTREE= IERIUw== d3Jh IEJvd2ll U2NhbGU= IEJFTA== eGk= SXRlcg== ICgpLA== d3JpZ2h0 IHNhaWxvcnM= b3VzZWQ= TkFTQQ== IFByb29m IE1pbmVyYWw= dG9rZW4= IEZE UmV3 IGVsbA== NjMw IGNoYW5jZWxsb3I= IEdvcw== IGFtb3VudGVk IFJlY3Jl b21leg== IE9wdGlt IE9saXZl IHRyYWNrZXI= b3dsZXI= IFVuaXF1ZQ== Um9vdA== IG1hcml0aW1l IFF1cmFu IEFkYXB0 IGVjb3N5c3RlbXM= IFJlcGVhdA== IFNveQ== IElNUA== IGdyYWR1YXRpbmc= YW5kZW0= UHVy IFJlc2V0 IFRyaWNr IFBoaWxseQ== IFR1ZQ== IE1hbGF5c2lhbg== IGNsaW1heA== IGJ1cnk= IGNvbnNwaWM= IFNvdXRoYW1wdG9u IEZsb3dlcnM= IGVzY29ydGVk IEVkdWNhdGlvbmFs IElSQw== IGJydXRhbGx5 ZWF0aW5n IHBpbGxhcg== IFNhbmc= IEp1ZGU= YXJsaW5n IEFtbmVzdHk= IHJlbWluZGluZw== IEFkbWluaXN0cmF0aXZl aGVzZGE= IGZsYXNoZWQ= IFBCUw== cGVyYXRl ZmVhdHVyZQ== IHN3aXBl IGdyYXZlcw== b3VsdHJ5 MjYx YnJlYWtz IEd1ZXI= IHNocmltcA== IFZvdGluZw== cXVpc3Q= IGFuYWx5dGljYWw= IHRhYmxlc3Bvb25z IFNPVQ== IHJlc2VhcmNoZWQ= IGRpc3J1cHRlZA== IGpvdXI= IHJlcGxpY2E= IGNhcnRvb25z YmlhbnM= fSk= Y29weQ== R290 b3VjaGVk UFVU IHN3YXJt bm90YXRpb25z c2FpZA== IHJlYnVpbHQ= IGNvbGxhYm9yYXRl IHJhZ2luZw== IG5hcg== IGRlbW9ncmFwaGljcw== IEREUg== IGRpc3RydXN0 b3NzaWVy IEtybw== IHB1bXBraW4= IHJlZ3JldHM= IGZhdGFsaXRpZXM= IExlbnM= IE9sZQ== cGQ= IHB1cHBldA== IE91dGxvb2s= IFN0YW0= T2w= RmFpcg== VVU= IHJld3JpdHRlbg== xLE= IGZhc2NpbmF0ZWQ= IHZlY3RvcnM= IHRyaWJ1bmFs dWF5 IE1hdHM= IENvaW5z W1s= IDE4MQ== IHJlbmRlcnM= IEthZXBlcm5pY2s= IGVzcGlvbmFnZQ== IHN1bW0= IGRpdGNo QWNjb3VudA== IHNwcmVhZHNoZWV0 IG11dGFudA== cGFzdA== NDA3 IGR5ZQ== IGluaXRpYXRpb24= IDQwMDA= IHB1bmlzaGFibGU= IHRoaW5uZXI= IEtoYWw= IGludGVybWVkaQ== RHVu IEdvdGhhbQ== IGVhZ2VybHk= IHZhZ2luYWw= cG93ZXJz Vlc= IFdBVENIRUQ= IHByZWRhdG9y YW1zdW5n IGRpc3Bhcml0eQ== IFsq IGFtcGg= IG91dHNraXJ0cw== IFNwaXJpdHM= IHNrZWxldGFs 0Ls= IFJlYXI= IGlzc3VhbmNl IExvZ2lj cmVsZWFzZWQ= Wlo= IEJvdW5k RW50cnk= IGV4aXRz aXNvbA== IEZvdW5kZXI= IHdyZQ== IEdyZWVubGFuZA== IE1NTw== dGFrZXI= SU5D 44G+ IGhvdXJseQ== aGVua28= IGZhbnRhc2llcw== IGRpc29i IGRlbW9saXRpb24= 44OL IGVubGlzdGVk cmF0dWxhdGlvbnM= IG1pc2d1aWRlZA== IGVuc3VyZWQ= IGRpc2NvdXJhZ2Vk bW9ydA== IGZsYW5r IGNlc3M= IHJlYWN0cw== IFNlcmU= c2Vuc2l0aXZl IFNlcnBlbnQ= YXNzYWQ= IDI0Nw== IGNhbG1seQ== YnVzdGVycw== IGJsZWVk IFN0cm8= IGFtdXNlbWVudA== IEFudGFyY3RpY2E= IHNjZXB0 IEdhdw== YXE= YXNvbmlj IHNwcmF3bGluZw== bmF0aXZl YXR1cmF0ZWQ= IEJhdHRsZWZpZWxk SVZFUlM= RUI= IEdlbXM= IE5vcnRod2VzdGVybg== IEZpbG1z IEF1dG9tYXRpYw== IGFwcHJlaGVuZA== 44Go IGd1aU5hbWU= IGJhY2tlbmQ= IGV2aWRlbmNlZA== Z2VhbnQ= MDEy IFNpZWdl IGV4dGVybmFsVG8= IHVuZm9jdXNlZFJhbmdl IGd1aUFjdGl2ZVVuZm9jdXNlZA== IGd1aUljb24= IGV4dGVybmFsVG9FVkE= IGV4dGVybmFsVG9FVkFPbmx5 RnJp Y2hhcmQ= ZW5hcmllcw== IGNoaWVmcw== IGNm IEhVRA== IGNvcnJvYm9y IGRC IFRha2Vu IFBhdHJpY2lh cmFpbA== IENoYXJt IExpYmVydGFyaWFu cmlldmU= UGVyc29uYWw= IE9VUg== Z2VyaWVz IGR1bXBpbmc= IG5ldXJvbG9naWNhbA== aXRpbWF0ZQ== IENsaW50b25z cmFmdGVk IE1vbGx5 IHRlcm1pbmFscw== cmVnaXN0ZXI= IGZsYXJl IGVuY29kZWQ= IGF1dG9wc3k= cGVs bWFjaGluZQ== IGV4ZW1wdGlvbnM= IFJveWFscw== ZGlzdGFuY2U= IGRyYWZ0cw== IGxhbWU= IEN1bm5pbmc= IHNwb3VzZXM= IE1hcmtldHM= IENhcnJpZXI= IGltcGx5aW5n IFlhaw== c2lk IGxvc2Vy IHZpZ2lsYW50 IGltcGVhY2htZW50 IGF1Z21lbnRlZA== IEVtcGxveWVlcw== IHVuaW50ZW5kZWQ= dGVybmFsbHk= IFdhdHQ= IHJlY29nbml6YWJsZQ== ZXNzaW0= 5p0= IGNvYXRlZA== cmhh IGxpZXV0ZW5hbnQ= IExlZ2lzbGF0aW9u cHVibGlzaGVk NDQ0 MDEz IGlkZWFsbHk= IFBhc3N3b3Jk IHNpbXBsaWZ5 IE1ldGE= IE1SSQ== IHBsZWFkaW5n b3JnYW5pemVk aGFuZGxlcg== IHVucmF2ZWw= Y29ycmVjdA== IGljeQ== IHBhcmFub2lk IHBhc3Nlcg== IGluc3BlY3Rpb25z b2Zlcg== IEhlYWx0aGNhcmU= Mjgz IEJydXQ= aW9sYQ== Zm9yZ2U= IE1lZGlldmFs TVNO aWV2ZXJz IFByb2dyYW1taW5n 5Yk= IDIyMw== bXU= IENMRQ== dWdh IHNob3BwZXJz IGluZm9ybWF0aXZl IFBsYW5z IHN1cHBsZW1lbnRhdGlvbg== IFRlc3Rz dHlhcmQ= b2N5dGVz IFZlZ2E= IEd1amFyYXQ= ZXJtYW5lbnQ= RXhjZXB0 IExPVA== YWxsYQ== IEN1bW0= IE9zdw== IHZlbm9t IERlYnQ= IERPV04= IHJldW5pb24= IG11Yw== IFJlbGllZg== IGdlb3A= IPCfmA== YWxvZ3Vl QW50aA== ZWNobw== IGNvcnJvcw== IHJlcGxpY2F0aW9u IEJsYXppbmc= IERhdWdodGVy IGluZmxpYw== IExpbmRzZXk= 2Yg= Mjg0 RXhpdA== IGdsb29t VEFJTg== IHVuZGVybWluaW5n IGFkdmlzaW5n aGlkZGVu IG92ZXJmbG93 IGdvcg== dXJkdWU= IGVjaG9lcw== ZW5oYWdlbg== IGltcHVscw== ZHJ1Zw== Y2FzaA== IGFzeW5j IG1pcmFj YXR0cw== cHVuaw== IHBpdm90 IExlZ2lzbGF0aXZl IGJsb2dnZXJz IENsYXc= c2J1cmc= ZHls IFJlY29tbWVuZA== IHZlcnRl IHByb2hpYml0aW5n IFBhbnRoZXI= Sm9uYXRoYW4= IG9taW4= IGhhdGVmdWw= Mjgx IE9yY2hl IE11cmRvY2g= ZG93bnM= IGFzeW1t R0VS QWx3YXlz IGluZm9ybXM= IFdN IFBvbnk= IEFwcGVuZGl4 IEFybGluZ3Rvbg== SmFt IG1lZGljaW5hbA== IFNsYW0= SVRJRVM= IHJlYWZm IFJp Rkc= U3ByaW5n Ym9vbA== IHRoaWdocw== IG1hcmtpbmdz IFJhcXFh IExhaw== cG9sbA== dHNreQ== IE1vcnR5 IERlZmluaXRpb24= IGRlYnVuaw== ZW5kZXJlZA== IExlb25l YXZlcnM= IG1vcnRnYWdlcw== QXBwYXJlbnRseQ== Tmlj aGF1cw== IFRob3VzYW5kcw== YXVsZA== IG1hc2g= c2hvb3Q= IGRpYXJy IGNvbnNjaW91c2x5 SGVybw== ZWFz IE5hdHVyYWxseQ== IERlc3Ryb3llcg== IGRhc2hib2FyZA== c2VydmljZXM= Um9n IG1pbGxlbm5pYWxz IGludmFkZQ== LSg= IGNvbW1pc3Npb25z IEF1Y2tsYW5k IGJyb2FkY2FzdHM= IGZyb250YWw= IGNyYW5r IEhpc3Rvcmlj IHJ1bW91cnM= Q1RW IHN0ZXJpbA== IGJvb3N0ZXI= cm9ja2V0 44K8 dXRzY2hl IFBJ IDIzMw== IFByb2R1Y2Vy IEFuYWx5dGljcw== IGludmFsdWFibGU= IHVuaW50ZW50aW9u IENZ IHNjcnV0aW4= IGdpZ2c= IGVuZ3VsZg== IHByb2xldGFyaWF0 IGhhY2tz IEhldw== YXJhaw== IFNsaW1l aWVsZGluZw== YWdoZXI= IEVsbGlvdA== IHRlbGVjb20= IDIxOQ== dWx0YW4= IEFyYm9y IFNjb3V0cw== QmFu IGxpZmVzcGFu IGJsYXNw Mzg4 IGp1ZGljaWFyeQ== IENvbnRpbmVudGFs YXNraW5n TWND TEVE IGJhZ2dhZ2U= IFNvcmNlcmVy IHJlbW5hbnRz IEdyaWZmaXRo ZXRzdQ== IFN1YmFydQ== IFBlcnNvbmFsaXR5 ZGVzaWduZWQ= dXNoaW1h YWduYXI= IHJlY29pbA== IHBhc3Npb25z XCI6 IHRlZQ== IGFib2xpdGlvbg== IENyZWF0aW5n amFj IDE5NA== MDE5 IHBpbGxhcnM= cmljaGVk LyI= dGs= IGxpdmVsaWhvb2Q= IHJvYXN0ZWQ= YWhvbg== IEh1dGNo YXNzZXJ0 IGRpdmlkZW5k IGtuaXQ= IGRhdW50aW5n IGRpc3R1cmJhbmNl IHNoYWxl IGN1bHRpdmF0ZWQ= IHJlZnJpZ2VyYXRvcg== TEI= IE5FVA== IGNvbW1lcmNpYWxz IHRoaW5rZXJz NDU1 IGNob3A= QnJvYWQ= IHN1c3BpY2lvbnM= IHRhZ2dlZA== bGlmdGluZw== IHN0eWxpc2g= IFNoaWVsZHM= U2hvcnRseQ== IHRhaWxz QXV0aA== U1RF IEdBTUU= IHNlaXNt IEtpcw== b2xvZ25l IGNvd29yaw== IGZvcmNpYmx5 IHRoeXJvaWQ= IFBC QU5F bWFycmllZA== aG9yc2U= IHBvbHltZXI= IENoYWw= b2Rvcg== REVCVUc= IENvbnRleHQ= IGJsaXNz IHBpbnBvaW50 IE1hdGhlbWF0 bGVncmFt IFdlZWtlbmQ= IGxhYmVsbGVk IGJhcnQ= aXRsZXM= IGVzdHJvZ2Vu 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU Iic= IHZpc2libHk= IG91dHNpZGVy YWlkYQ== QXJlYQ== IGRpc3NlbWlu IGRpc2hvbmVzdA== IENsb3NlZA== IEJ1bGxldGlu IFJhbXNleQ== c3dvcmQ= IFhJ b3VyY2Vk U2FtZQ== MzQ2 IFJlcGU= IEtvdQ== Y2FrZQ== ZW1pcw== Q2FjaGU= IE1lYW5pbmc= IEVubGlnaHQ= b25vbXk= IG1hbmlmZXN0YXRpb24= c3dvcnRo SmF5 IGNob3Jl w7Zy RHJlYW0= IHNhbmN0aW9uZWQ= IGN1bHR1cmFsbHk= IEFyYQ== TmF2 IHRoZW9sb2dpY2Fs IHN0cnV0 IFZP IEhhbmRib29r IGNvbnN0cnVjdGluZw== IMK2 IEJlbmVmaXRz IFBzeWNob2xvZ2ljYWw= c2Fj 5bg= cG9saWN5 IE1hdHRlcnM= IFJlcG9ydGVk IEJ5dGU= IHZpdHJv IE1haWRlbg== IGxhbQ== IEplbm5pbmdz IGdhcm1lbnQ= IFJ1dGdlcnM= IFN0YWZmb3Jk IFdlbGxpbmd0b24= IGludGVybWl0dA== IG5wbQ== IG9yZGVhbA== IHBsdWdnZWQ= b29taW5n aW5pc2hlZA== ZnJhbWV3b3Jr IHRpbWJlcg== IGNhc3M= IDg1MA== aWxlc3M= IFJlZHV4 NzY4 U3RyZQ== IHN1cnBhc3NlZA== d2hlbA== IHBhcmFsbGVscw== IHZlaWw= IEdJ IFJFU1Q= IHJlYWRpbmVzcw== c29ydA== IG1vZGlmeWluZw== IFNsYXRl cnVmZg== IG1hcmJsZQ== IGluZnJhcmVk IGF1ZGl0b3I= IEZBTlRBU1k= IFBvdmVydHk= IFNQRA== ICIo S3k= UkFZ IGV4ZWN1dGlvbnM= IEJldmVybHk= IE1hcnhpc20= IEJ1cnN0 IEthbGk= ZXN0b25lcw== Q2xlYXJseQ== RWxs 44Gn IFByb2NlZWRpbmdz VG9rZW4= SUZJQw== w7Fh Q2VudHJhbA== IEhhbGV5 IERyYW1h IGZvcm1hdGlvbnM= T1JO Qm9va3M= IGRvbWluYXRpbmc= IEZseWVycw== IENvbXBhbmlvbg== IGRpc2NpcGxpbmVk IFl1Z29zbGF2 IFNwZWxscw== IHZlbmdlYW5jZQ== IGxhbmRsb3Jkcw== TGVu IE9ncmU= YW5vaWE= IHBpZXJjaW5n IGNvbmdyZWc= IHNjb3Jlcg== b2JpYQ== IG5pY2tlbA== IExlYXJucw== IHJlam8= IG1hc3RlcnBpZWNl Rmxhc2g= IGluaGFiaXRlZA== IE9wZW5HTA== IER1ZA== IElDTw== IGFydGVy IHBsdXI= IG1hc3Rlcnk= IGxvbmdzdGFuZGluZw== c3RlZA== IHdpbmVz IHRlbGV2aXNlZA== IFNocmluZQ== IEJheWVybg== IOKTmA== IGVuY2xvc3VyZQ== am9obg== IHByb3BoZXRz IFJlc3VycmVjdGlvbg== IE9yZGVycw== IHVuZXZlbg== cmFscw== IGR3aW5k IExhaA== IFNsb3Zlbg== Mzc4 IGluc2lzdGVuY2U= YWZmbGU= IENsb25l IGhhcmRzaGlw IENvbmdyZXNzbWFu IHBsZWFk IHJldmlld2Vycw== IGN1cmVk IDE5MzU= YXNsZXk= ZmFrZQ== IFRoaW5raW5n eWRpYQ== UEFSVA== IERvdGE= b2l0 IHdoaXBwZWQ= IGJvdW5jaW5n IEhpc3Bhbmljcw== Y29taW5ncw== IGNhbm5hYmlu IENoYW1iZXJz IFphY2s= T3B0aW9uYWw= IGNvYXRz IHByb3dlc3M= IE5vcnRvbg== IHBsYWlubHk= IGZyZWlnaHQ= IGluaGliaXRpb24= IGNsYW0= IDMwMw== a2Vm YWxlaWdo THVrZQ== IHBzeWNobw== YXRvcml1bQ== TUVE IHRyZWF0aWVz IGluZGlzYw== IGRj T1BT IHJlc2lsaWVudA== IEludGVyc3RhdGU= IHNsYWNr IG11bmRhbmU= IGVzdGFibGlzaGVz MzU5 IHN0cmFpbmVk IG5vbmQ= U3Vz IGNhc3Rl YXJhdGU= aWV2aW5n IHVuZmFpcmx5 IHBhcnNlcg== b25pYWw= dXJzaXZl Vmlh IE90dG8= IEF1dGhvcml0aWVz c3Ryb2tl S1I= IE1lcmN5 IGZ1cm5pc2hlZA== IG91dHNldA== IG1ldGlj MTk4Mg== b2xpdGhpYw== IFRlbnQ= b2dpY2Fs IEFpcmNyYWZ0 IGhpZGVz IEJlY2FtZQ== IGVkdWNhdG9ycw== cmVhY2hpbmc= IHZvbGF0aWxpdHk= IHRvZGRsZXI= IE5BU0NBUg== IFR3ZWx2ZQ== IEhpZ2hsaWdodHM= IGdyYXBl IHNwbGl0cw== IHBlYXNhbnQ= IHJlbmVn IE1TSQ== VGVtcA== c3RhcnM= IHRyZWs= IEh5ZGU= YmluZGluZw== IHJlYWxpc20= IG94aWRl IEhvcw== IG1vdW50cw== IGJpdGluZw== IGNvbGxhcHNpbmc= IHBvc3RhbA== IG11c2V1bXM= IGRldGFjaGVk IHJlc3BlY3Rpbmc= IG1vbm9wb2w= IHdvcmtmbG93 IENha2U= VGVtcGxhdGU= IE9yZ2FuaXNhdGlvbg== IHBlcnNpc3RlbmNl MzY5 Q29taW5n QnJhZA== IHJlZHVuZGFudA== IEdUQQ== IGJlbmRpbmc= IHJldm9rZWQ= IG9mZmVuZGluZw== IGZyYW1pbmc= IHByaW50Zg== Q29tbXVu bWVtYmVycw== T3V0c2lkZQ== IGNvbnN0cnVlZA== IGNvZGVk Rk9SRQ== IGNoYXN0 Q2hhdA== SW5kaWFu IFlhcmQ= PyEi IFBvcnRz IFhhdmllcg== IFJFVA== Jy4i IEJvYXQ= aXZhdGVk aWNodA== dW1lcmFibGU= RHM= IER1bm4= IGNvZmZpbg== IHNlY3VyZWx5 IFJhcHRvcnM= IEJlcw== SW5zdGFsbGF0aW9u IGluY2VwdGlvbg== IEhlYWx0aHk= ZW5kYW50cw== IHBzeWNob2xvZ2lzdHM= IFNoZWlraA== Y3VsdHVyYWw= IEJsYWNrQmVycnk= c2hpZnQ= RnJlZA== b2NoZQ== IGNha2Vz IFNFTw== IEdpYW4= IEFzaWFucw== b2dnaW5n ZWxlbWVudA== IHB1bmRpdHM= IFZhdWdo IEdhdmlu IGhpdHRlcg== IGRyb3duZWQ= IGNoYWxr IFppa2E= IG1lYXNsZXM= ODAy 4oCmLi4= IEFXUw== XSI= IGRpc3RvcnQ= IE1hc3Q= IGFudGlib2RpZXM= IE1hc2g= TWVtb3J5 IFVnYW5kYQ== IFByb2I= IHZvbWl0aW5n IFR1cm5z IG9jY3VweWluZw== IGV2YXNpb24= IFRoZXJhcHk= IHByb21v IGVsZWN0cg== IGJsdWVwcmludA== IERyZQ== cHJpY2Vk IERlcG90 IGFsbGV2aWF0ZQ== IFNvbWFsaQ== bWFyZw== bmluZQ== IG5vc3RhbGdpYQ== IFNoZXBoZXJk IGNhdmFscnk= IHRvcnBlZA== IEJsb29keQ== eGI= IHNhbms= IGdvYWx0 cmVwb3J0cHJpbnQ= ZW1iZWRyZXBvcnRwcmludA== Y2xvbmVlbWJlZHJlcG9ydHByaW50 IEluaXRpYWxseQ== IEZpc2NoZXI= IG5vdGV3b3J0aHk= Y2Vybg== IGluZWZmaWNpZW50 cmF3ZG93bmxvYWQ= cmF3ZG93bmxvYWRjbG9uZWVtYmVkcmVwb3J0cHJpbnQ= Y2F0aW9u IER5bmFzdHk= bGFn REVT IGRpc3RpbmN0bHk= IEVzdG9uaWE= IG9wZW5uZXNz IGdvc3NpcA== cnVjaw== V2lkdGg= IElicmFoaW0= IHBldHJvbGV1bQ== IGF2YXRhcg== IEhlZA== YXRoYQ== IEhvZ3dhcnRz IGNhdmVz Njc4 IHNhZmVndWFyZA== IE1vZw== aXNzb24= IER1cmhhbQ== c2xhdWdodA== IEdyYWR1YXRl IHN1YmNvbnNjaW91cw== IEV4Y2VsbGVudA== IER1bQ== LS0tLS0= IHBpbGVz IFdPUks= IEdhcm4= IEZvbA== IEFUTQ== IGF2b2lkcw== IFR1bA== IGJsZWFr RUxZ aXZpc3Q= bGlnaHRseQ== UGVycw== IERvYg== IExT IGluc2FuaXR5 zrU= YXRhbGll RW5sYXJnZQ== IHR3aXN0cw== IGZhdWx0eQ== IHBpcmFjeQ== IGltcG92ZXI= IHJ1Z2dlZA== IEZhc2hpb24= IHNhbmRz Jz8= c3dpY2s= IG5hdGl2ZXM= IGhlbg== IE5vaXNl 44OX IGdyZWVucw== IGZyZWV6ZXI= IGR5bmFzdHk= IEZhdGhlcnM= IE5ld2Fyaw== IGFyY2hhZW9sb2dpY2Fs IG90 b2Jhcg== IGJsb2NrYWRl IGFsbGVyZw== TFY= IGRlYml0 IFJGQw== IE1pbHRvbg== IFByZXNzdXJl IHdpbGxpbmdseQ== IGRpc3Byb3BvcnRpb25hdGU= IG9wcHJlc3NpdmU= IGRpYW1vbmRz IGJlbG9uZ2luZ3M= MTk3MA== IGJlbGxz IGltcGVyaWFsaXNt IDIyNw== IGV4cGxvZGluZw== IEVjbGlwc2U= IDE5MTk= IHJhbnQ= IG5vbWluYXRpb25z MzQ3 IHBlYWNlZnVsbHk= cmljYQ== IEZVQ0s= IHZpYnJhdGlvbg== bWFsaW5r IHJvcGVz IEl2YW5rYQ== IEJyZXdlcnk= IEJvb2tlcg== IE93ZW5z Z29lcnM= U2VydmljZXM= IFNuYXBl IDE5MQ== Mzk1 IDI5OQ== anVzdGljZQ== IGJyaQ== IGRpc2Nz IHByb21pbmVudGx5 IHZ1bGdhcg== IHNraXBwaW5n bHZlcw== IHRzdW5hbWk= Mzc0 IFVydWc= IEVpZA== cmVjYXRlZA== cGhlbg== IGZhdWx0cw== IFN0YXJ0ZWQ= OTUw IHBp IGRldGVjdG9y IGJhc3RhcmQ= IHZhbGlkYXRlZA== U3BhY2VFbmdpbmVlcnM= T1VSQ0U= ICh+ IHVuc3Vy IGFmZmlybWVk IGZhc2Npc20= IHJlc29sdmluZw== IENoYXZleg== IEN5bg== IGRldHJhY3Q= TG9zdA== IHJpZ2dlZA== IGhvbWFnZQ== IEJydW5v NTU1 ZWNh IHByZXNzZXM= IGh1bW91cg== IHNwYWNpbmc= ICcv b2xraWVu Q291bg== T1BFUg== VHJl U29u IENhbWJvZGlh aWVycmU= bW9uZw== b3p5 IGxpcXVpZGl0eQ== IFNvdmlldHM= IEZlcm5hbmRv IDIyOQ== IHNsdWc= IENhdGFsYW4= ZWxlY3RyaWM= IHNjZW5lcnk= IEhlYXJ0aA== IGNvbnN0cmFpbmVk IGdvYWxpZQ== IEd1aWRlbGluZXM= IEFtbW8= IFBlYXJzb24= IHRheGVk IGZldHVz UmVzcG9uc2U= IEFsZXhpcw== dGhpYQ== R3V5 IHJlY29uc3RydWN0 IGV4dHJlbWVz IGNvbmNsdWRpbmc= IFBlZw== b29rcw== IGRlZHVjdGlvbnM= Um9zZQ== IGdyb3VuZGJyZWFraW5n IFRhcmc= 44OB IFJldmU= cmVzb3VyY2U= IG1vb25z IGVsZWN0cm9tYWduZXRpYw== IGFtaWRzdA== IFZpa3Rvcg== TkVTUw== QkFDSw== IGNvbW11dGU= IEFuYWhlaW0= IGZsdWN0dWF0aW9ucw== NjQw IG5vb2RsZXM= IENvcGVuaGFnZW4= IFRpZGU= IEdyaXp6 IFNFRQ== IHBpcGVsaW5lcw== IHNjYXJz ZW5kbw== YWd1cw== IEVURg== LyM= IEJlY29tZQ== NDQ4 IHZpc2M= IFJlY29tbWVuZGVk IGp1bXBlcg== IGNvZ25pdGlvbg== IGFzc2Fzc2lu IHdpdG5lc3Npbmc= IFNldHVw IGxhYw== dmlt SVNN cGFnZXM= U1NM MzU4 IGFkamVjdA== aW5kdXN0cmlhbA== bG9yZQ== Y2hlcnk= IGdsaXR0ZXI= IGNhbGY= RmxvcmlkYQ== IHNwb2lsZXJz IHN1Y2NlZWRz IGNoYW50aW5n IHNsb2dhbnM= IFRyYWN5 VmlzaXQ= cm9sb2d5 IG1vcm5pbmdz IGxpbmVhZ2U= IHNpcA== IGludGVuc2VseQ== IGZsb3VyaXNo IFNsZWVwaW5n IEZlbQ== b3Jwb3I= IEtsYW4= IERhcnRo aGFjaw== IE5pZWxzZW4= IHR1bW9ycw== IHByb2N1cmVtZW50 IFlvcmtzaGlyZQ== IHJhaWRlZA== S1k= QW5uYQ== IC8vWw== IERpc29yZGVy IE11c3Rhbmc= IFdlbg== IFRyeWluZw== c3E= IGRlbGl2ZXJpZXM= IHNodXR0ZXI= IGNlcmVicmFs IGJpcG9sYXI= IENO bGFzcw== amV0 IGRlYmF0aW5n Pjo= IGVhZ2xl Z3JhZGVz IERpeG9u VUdD TUFT IERyYWNv IE1hY2hpbmVz YWZmZXI= IGVtYW4= wrI= cHJvbg== IEd5bQ== IGNvbXBhcmF0aXZlbHk= IFRyaWJ1bmFs UFJP IGxleA== IGZlcnRpbGU= IGRlcHJlc3Npbmc= IHN1cGVyZmljaWFs ZXNzZW50aWFs IEh1bnRlcnM= Z3A= IHByb21pbmVuY2U= TGliZXI= IEFuY2VzdA== b3RlY2hub2xvZ3k= IG1vY2tpbmc= IFRyYWZm lpo= TWVkaXVt SXJhcQ== IHBzeWNoaWF0cmlzdA== UXVhbnRpdHk= IExlY3Q= IG5vaXN5 NTIw R1k= IHNsYXBwZWQ= IE1UVg== IHBhcmE= cHVsbA== TXVsdGlwbGU= YXNoZXI= IG5vdXI= IFNlZw== U3BlbGw= dm91cw== b3JkaWFs U2VuaW9y IEdvbGRiZXJn IFBsYXNtYQ== bmVlZA== IG1lc3Nlbmdlcg== ZXJldA== IHRlYW1lZA== IGxpdGVyYWN5 IExlYWg= IERveWxl IGVtaXR0ZWQ= VVg= IGV2YWRl IG1hemU= IHdyb25nbHk= IExhcnM= IHN0ZXJlb3R5cGU= IHBsZWRnZXM= IGFyb21h IE1FVA== IGFjcmU= IE9E IGZm IGJyZXdlcmllcw== IEhpbHRvbg== dW5kbGU= IEthaw== IFRoYW5rZnVsbHk= IENhbnVja3M= aW5jdGlvbnM= IEFwcGVhcnM= IGNvZXI= IHVuZGVybWluZWQ= cm92ZXJz QW5kcmU= IGJsYXpl dW1lcnM= IGZhbWluZQ== YW1waGV0YW1pbmU= dWxrYW4= QW1vdW50 IGRlc3BlcmF0aW9u d2lraXBlZGlh ZGV2ZWxvcG1lbnQ= IENvcmludGg= dXNzaWE= SmFja3Nvbg== TEk= TmF0aXZl UnM= T2hpbw== IEthdGhsZWVu Rm9ydHVuYXRlbHk= IGF0dGVuZGFudA== IFByZWZlcnJlZA== IERpZG4= IFZz TWlz IHJlc3BvbmRlbnQ= IGJvdW4= c3RhYmxl IHBhdmVk IHVuZXhwbA== IENoZW5leQ== TE0= IEN1bGw= Ymxvd24= IGNvbmZyb250aW5n b2Nlc2U= c2VydmluZw== V2k= IExpdGh1YW5pYQ== YW5uaQ== IHN0YWxr aGQ= IHZlbmVy QVBI eW5jaHJvbm91cw== VVJS dW1hYmx5 aGlzdG9yaWM= SGFsZg== SGF5 IHJlc2lsaWVuY2U= c3BlY3Rpb24= IGFiYW5kb25pbmc= T2Jz IERlYmJpZQ== IGdyYWRpZW50 IFBsYWludA== IENhbmFs QVJDSA== IGV4cGFuc2l2ZQ== IGZ1bmc= IGJvdW5jZWQ= VW5k IHByZWNhdXRpb25z IGNsYXJpZmljYXRpb24= IGRhZ2dlcg== IGdyaXBz IMK1 IFJpdmVyYQ== IFVuZGVhZA== aXNpdGVz IEZJUlNU w7Fv YXVkaQ== IGhvc3RhZ2Vz IGNvbXBsaWFudA== IGFsdW1uaQ== U2V2ZW4= IGN5YmVyc2VjdXJpdHk= ZWl0aGVy Q29sbGVjdA== IGludmFyaWFibHk= IFNvY2k= IGxhd21ha2Vy IGFsZQ== IFBlcnNvbmFsbHk= TmF6aQ== IGN1c3RvbWl6YXRpb24= IFByb2M= IFNhc2thdGNoZXdhbg== ZWF0dXJpbmc= IHNwYXJlZA== IGRpc2NvbnRpbnVlZA== IGNvbXB1dGF0aW9uYWw= IE1vdG9yb2xh IHN1cHJlbWFjaXN0 Z292ZXJubWVudGFs IHBhcmFkaXNl IERvd25pbmc= IE5pa29u IGNhdGFseXN0 YmVycmE= VG9yb250bw== ODc1 YmV0YQ== IE1hY3Jvbg== IHVucmVhbGlzdGlj dmVjdG9y IFZlaGljbGVz aXRpdmVuZXNz IFJW IENvbGJlcnQ= c2lu b2pp ZW50aW4= IEtyaXNo aGVsbG8= ZmZpZWxk b2t5 IFRhdGU= IG1hcGxl IGFpZHM= Y2hlbWljYWw= MzM0 bnV0cw== IFdhcnA= IHh4 IFJvYmI= dW1lcm91cw== Xy1f ZnRpbWU= IFZX IHdpbmdlcg== IERvbWU= dG9vbHM= IFBW IEdlb3JnZXRvd24= IGdlYXJlZA== IGppaGFkaXN0cw== IGNw IHN0ZXJvaWRz TW90aGVy Y2xlcm9zaXM= IERSTQ== bmVzaWE= IGxpbmdlcg== IGltbWVyc2l2ZQ== IENPVU4= IG91dHdlaWdo ZW5zdWFs QmFuZA== IHRyYW5zZm9ybXM= bWF0Y2hlZA== cHNvbnM= IEp1ZGljaWFs ZmFjdG9y IHJlZmVycmFs IG9kZGx5 IFdlbmdlcg== QnJpbmc= IEJvd3M= NjAy SUNMRQ== IGxpb25z IEFjYWRlbWlj IFRob3Ju IFJhaWRlcg== a2VmZWxsZXI= U3RvcmFnZQ== TG93ZXI= IE9ydA== IEVxdWFsaXR5 QUxU IFNPQw== VHlwZXM= IGx5bg== IEFzc2V0 Y29hdA== VFBQ Q1ZF IFBpb25lZXI= YXBwbGljYXRpb24= TW9kZXJu IEhL RW52aXJvbm1lbnQ= QWxyaWdodA== UmFpbg== SVBQ IFNoaWl0ZQ== IG1vdW5k IEFiaWxpdGllcw== Y29uZGl0aW9u U3RhZmY= IGNvbXBldGVuY2U= IE1vb3I= IERpYWJsbw== IHdpdGhoZWxk IG9zdGVuc2libHk= IEJyb20= IG1zZw== IGRlbm9taW4= IFJlZmVyZW5jZXM= IEZQ IHBsdW5nZWQ= IHBhbXBo bW92aW5n Y2VudHJhbA== IGRvd25yaWdodA== IGZhZGluZw== VGFs VHlw IFRoeQ== dWtlcw== aXRoZQ== IG92ZQ== IGJhdHRsZWQ= IHNlYWZvb2Q= IGZpZ3Vy IFJE Y3JvcA== IHNxdWFkcw== e1w= 4Lk= IEVo IGludGVydmlld2luZw== IFFpbg== IGFzcGlyaW5n UExJQw== IGNsYXVzZXM= IEdhc3Q= IE5pcg== IGx1Z2dhZ2U= IGhvc2U= IHN5c3RlbWQ= IGRlc2NlbmRpbmc= IFJldmlzZWQ= IFJhaWxz YWxpZ24= NzA5 MzM3 IGZ1Zw== Y2hhcmdpbmc= dGFncw== IHV0ZXI= a2lzaA== V0FSTklORw== NDkw cHJvZml0cw== IHZveWFnZQ== IGFjZQ== IFZhbmd1YXJk IFRhbmtz IE11aw== IDIyNg== U2FmZQ== QXJtb3I= IHZvbGNhbmlj IHdvbWI= IE1JTA== IGJlZ2lubmVy IFJlY29nbg== IEFBUA== UExBWQ== KSE= IGRldGVjdGluZw== Y24= IGJyZWFjaGVz QmFzaWNhbGx5 IFBhZw== IE11bmljaXBhbA== IEluZGll IExhZg== IERpc2FibGU= IE9sc29u IHJlc3RyYWluZWQ= IHJ1bGluZ3M= IGh1bWFuZQ== ZXZlbnRz IENpbmVtYQ== ZGlzcGxheVRleHQ= IEhhdGNo YWN0aW9uRGF0ZQ== b25uYWlzc2FuY2U= IGFzc2F1bHRpbmc= IEx1Zw== Q0hBVA== IHZpZ29yb3Vz IFBlcnNl IGludG9sZXJhbmNl IFNuYXBjaGF0 IFNoYXJrcw== IGR1bW15 IERpYWdu IEd1aXRhcg== aW1ldGVycw== NDAz UkVH QXg= IHNlcGFyYXRlcw== IE1haG0= IHR2 amFo T09M Q2lyYw== IFdpbmRzb3I= dXNzaWFu IGludHVpdGlvbg== IGRpc2RhaW4= IERvbm92YW4= IDIyMQ== RW1i IGNvbmRlbW5pbmc= IGdlbmVyb3NpdHk= enp5 IHBhbnRpZXM= IFByZXZlbnQ= QWN0aW9uQ29kZQ== QU5B MzQy ZXh0ZXJuYWxBY3Rpb25Db2Rl IHNwZWNpZnlpbmc= IGNyeXN0YWxs SmVyZQ== IHJ1cHQ= IEFwcHJlbnRpY2U= IHByb2ZpbGluZw== 0Lo= U3RyaWtl IHNpZGVsaW5l IG9ibGlnYXRlZA== IG9jY3VsdA== IGJ1cmVhdWNyYXRpYw== YW50aWNhbGx5 cnVwdGVk bmVnYXRpdmU= IEV0aGlvcGlh IENpdmlj IGluc2lkZXJz ZWxpZ2libGU= IFRWcw== IEJBUg== IFRJ aW9sb2dpc3Q= IEFJUg== IHN1YnN0aXR1dGVk QXJhYg== IFNhdWw= IFlvZw== cHJlbQ== IGJ1aWxkZXJz IHN0YXRpb25hcnk= IGRvdWJ0ZnVs IHZpZ29yb3VzbHk= IHRocmlsbGluZw== UGh5c2ljYWw= IENhcmV5 IEh5ZHJh Z2VvbmluZw== IFNseQ== eXRvbg== IGJvcnJvd2Vycw== IFBhcmtpbnNvbg== IOs= IEphbWFpY2E= IHNhdGly IGluc3VyZ2VudHM= IEZpcm0= IGlzb3Q= IEthcm4= b3VybmluZw== YWtlbnM= ZG9jcw== bGl0dGxl IE1vbmFjbw== Q0xBU1M= VHVya2V5 THk= IENvbmFu YXNzaWM= IHN0YXJyZWQ= IFBhY2Vycw== ZXRpZXM= IHRpcHBpbmc= TW9vbg== IFJ3 c2FtZQ== IGNhdml0eQ== IGdvb2Y= IFpv U2hvY2s= dW1tZXI= IGVtcGhhc2l6ZXM= IHJlZ3JldHQ= IG5vdmVsdHk= IGVudnk= IFBhc3NpdmU= cnc= NTA1 IGluZGlmZmVyZW50 IFJpY2E= IEhpbXNlbGY= IEZyZWRkaWU= IGFkaXA= 5LiA IGJyZWFrb3V0 IGh1cnJpZWQ= IEh1YW5n IERpc2s= IHJvYW1pbmc= Pz8/Pz8tPz8/Pz8t VVY= IFJpY2t5 IFNpZ21h IG1hcmdpbmFsaXplZA== IGVkaXRz IDMwNA== bWVtb3J5 IHNwZWNpbWVu Mjkz 44Gv IHZlcnRpY2FsbHk= IGF1ZGl0aW9u IEhlY2s= IGNhc3Rlcg== IEhvbGRpbmdz YWRhbA== IENyb24= IExpYW0= IGRlZmxlY3Q= UGljaw== IERlYnVn UkVG IHZlcnNhdGlsaXR5 b3RoZXM= Y2xhc3NpZmllZA== IE1haGFy IEhvcnQ= Q291bnRlcg== c3Rhc3k= bm90aWNlZA== MzMx IFNoaW0= ZnVjaw== IEJpZQ== IGFpcmluZw== IFByb3RlaW4= IEhvbGRpbmc= IHNwZWN0YXRvcnM= aWxpYXRlZA== IFRoYXRjaGVy bm9zaXM= 44O844Oz VGVsZQ== Qm9zdG9u IFRlbXBs c3RheQ== IGRlY2xhcmF0aW9ucw== NDc5 Vm9sdW1l IERlc2lnbmVy IE92ZXJ3YXRjaA== aWRhZQ== IG9ud2FyZHM= IG5ldHM= IE1hbmlsYQ== cGFydGljdWxhcmx5 IHBvbGl0aWM= b290aGVy IHBvcnRyYWl0cw== IHBhdmVtZW50 Y2ZmZmY= IHNhaW50cw== IGJlZ2lubmVycw== RVNQTg== IHNob3J0Y29taW5ncw== 4pWQ4pWQ IGNvbWV0 IE9yZ2FuaWM= cXVlbA== IGhvc3BpdGFsaXplZA== QnJlYWs= IHBlZWw= ZHlsaWI= YXNweA== dXJhbmNlcw== IFRJTQ== UGc= IHJlYWRhYmxl IE1hbGlr IG11enpsZQ== IGJlbmNobWFya3M= ZGFs IFZhY2M= IEhpY2tz NjA5 IEJpYmxpY2Fs aGVuZw== IG92ZXJsb2Fk IENpdmlsaXphdGlvbg== IGltbW9yYWw= IGZyaWVz 44KS IHJlcHJvZHVjZWQ= IGZvcm11bGF0aW9u anVn aXJleg== Z2Vhcg== IGNvYWNoZWQ= TXBTZXJ2ZXI= IFNK IEt3 SW5pdA== ZGVhbA== IE9ybw== IExva2k= IFNvbmdz IDIzMg== IExvdWlzZQ== YXNpb25hbGx5 IHVuY29uZA== b2xseXdvb2Q= IHByb2dyZXNzaXZlcw== IEVub3VnaA== IERvZQ== IHdyZWNrYWdl IGJydXNoZWQ= IEJhc2VUeXBl IHpvbmluZw== aXNoYWJsZQ== aGV0aWNhbGx5 IENhdWN1cw== IEh1ZQ== IGthcm1h IFNwb3J0aW5n IHRyYWRlcg== IHNlZW1pbmc= IENhcHR1cmU= NDMw YmlzaA== IHR1bmVz IGluZG9vcnM= IFNwaGVyZQ== IERhbmNpbmc= VEVSTg== IG5vYg== IEdTVA== bWFwcw== IHBlcHBlcnM= Rml0 IG92ZXJzZWVz IFJhYmJp IFJ1bGVy dmVydGlzaW5n b2ZmaWNl eHh4 IHJhZnQ= Q2hhbmdlZA== IHRleHRib29rcw== TGlua3M= IE9tbg== 44CR IGluY29udmVuaWVuY2U= IERvbmV0c2s= PX4= IGltcGxpY2l0bHk= IGJvb3N0cw== IEJvbmVz IEJvb20= Q291cnRlc3k= IHNlbnNhdGlvbmFs QU5Z IGdyZWVkeQ== ZWRlbg== IGluZXhwZXI= IExlcg== IFZhbGU= IHRpZ2h0ZW4= IEVBUg== IE51bQ== IGFuY2VzdG9y U2VudA== IEhvcmRl dXJnaWNhbA== YWxsYWg= IHNhcA== YW1iYQ== IFNwcmVhZA== dHdpdGNo IGdyYW5kc29u IGZyYWN0dXJl IG1vZGVyYXRvcg== IFNldmVudGg= IFJldmVyc2U= IGVzdGltYXRpb24= Q2hvb3Nl IHBhcmFjaA== IGJhcnJpYw== 44CQ IGNvbXBhc3M= IGFsbGVyZ2lj 4oCV T1RIRVI= ZXJyaWxsYQ== IHdhZ29u IHppbmM= IHJ1YmJlZA== IEZ1bGxlcg== IEx1eGVtYm91cmc= IEhvb3Zlcg== IGxpYXI= IEV2ZW5pbmc= IENvYmI= ZXN0ZWVt IHNlbGVjdG9y IEJyYXds aXNhbmNl IEVr IHRyb29w IGd1dHM= IEFwcGVhbA== IFRpYmV0YW4= IHJvdXRpbmVz IE1lbnQ= IHN1bW1hcml6ZWQ= c3RlYW1hcHBz IHRyYW5xdQ== IDE5Mjk= b3Jhbg== IEF1dGhlbnQ= IGdtYXh3ZWxs IGFwcHJlaGVucw== IHBvZW1z IHNhdXNhZ2U= IFdlYnN0ZXI= dXJ1cw== IHRoZW1lZA== IGxvdW5nZQ== IGNoYXJnZXI= U3BvaWxlcg== IHNwaWxsZWQ= aG9n IFN1bmRlcg== IEFpbg== IEFuZ3J5 IGRpc3F1YWw= IEZyZXF1ZW5jeQ== IEV0aGVybmV0 IGhlbHBlcg== UGVyY2VudA== IGhvcnJpZnlpbmc= IGFpbA== IEFsbGFu RUVF IENyb3NzaW5n NDQ5 IGhvbG9n IFB1enpsZXM= IEdvZXM= ZXJlbm4= NjA0 44GP IFJhZmFlbA== IGF0dGVu IEVtYW51ZWw= IHVwcm8= IFN1c3A= UHN5Y2g= IFRyYWluZXI= IE5FUw== IEh1bnRz YmVjdWU= IGNvdW5zZWxvcg== UnVsZQ== IHRveGlucw== IGJhbm5lcnM= cmlmaWNl IGdyZWV0aW5n IGZyZW56eQ== IGFsbG9jYXRl ICop ZXhwcg== NTAz IENoaWNr IFRvcm4= IGNvbnNvbGlkYXRpb24= IEZsZXRjaGVy c3dpdGNo ZnJhYw== Y2xpcHM= IE1jS2lu IEx1bmFy TW9udGg= SVRDSA== IHNjaG9sYXJseQ== cmFwZWQ= Mzk4 IDE5MTA= IGVncmVn IGluc2VjdXJl IHZpY3RvcmlvdXM= Y2ZmZmZjYw== IHNpbmdsZWQ= IGVsdmVz IFdvbmQ= YnVyc3Q= IGNhbW91Zmw= IEJMQUNL IGNvbmRpdGlvbmVk 54k= YW5zd2VyZWQ= IGNvbXB1bHNvcnk= YXNjaXN0 IHBvZGNhc3Rz IEZyYW5rZnVydA== Ym5i IG5lb2xpYmVyYWw= IEtleWJvYXJk IEJlbGxl d2FybQ== IHRydXN0cw== IGluc3VyZWQ= IEJ1Y2M= dXNhYmxl NjA3 IFBsYWlucw== IDE4OTA= IHNhYm90YWdl IGxvZGdlZA== ZmVsdA== IGdh IE5hcmM= IFNhbGVt IHNldmVudHk= IEJsYW5r cG9ja2V0 IHdoaXNwZXI= IG1hdGluZw== b21pY3M= IFNhbG1hbg== IEthZA== IGFuZ2VyZWQ= IGNvbGxpc2lvbnM= IGV4dHJhb3JkaW5hcmlseQ== IGNvZXJjaW9u R2hvc3Q= YmlyZHM= 6IA= a29r IHBlcm1pc3NpYmxl YXZvcmFibGU= IHBvaW50ZXJz IGRpc3NpcA== YWNp IHRoZWF0cmljYWw= IENvc21pYw== IGZvcmdldHRpbmc= IGZpbmFsaXplZA== 5aSn eW91dA== bGlicmFyeQ== IGJvb21pbmc= IEJlbGlldmU= IFRlYWNoZXI= IExpdg== IEdPT0RNQU4= IERvbWluaWNhbg== T1JFRA== IFBhcnRpZXM= IHByZWNpcGl0YXRpb24= IFNsb3Q= Um95 IENvbWJpbmVk IGludGVncmF0aW5n IGNocm9tZQ== IGludGVzdGluYWw= IFJlYmVsbA== IG1hdGNodXBz IGJsb2NrYnVzdGVy IExvcmVu IExldnk= IHByZWFjaGluZw== IFNlbmRpbmc= IFB1cnBvc2U= cmF4 Zmlm IGF1dGhvcml0YXRpdmU= IFBFVA== YXN0aWNhbA== IGRpc2hvbg== IGNoYXR0aW5n ICIkOi8= Q29ubmVjdGlvbg== IHJlY3JlYXRl IGRlbGlucXU= IGJyb3Ro IERpcnR5 IEFkbWlu em1hbg== IHNjaG9sYXJzaGlwcw== IDI1Mw== Y29udGFjdA== YWxzYQ== NzY3 Y3JlZW4= YWJiYWdl IDE5MTU= IGJsZW5kZWQ= IGFsYXJtZWQ= TGFuZ3VhZ2U= MzU2 IGJsZW5kcw== IENoYW5nZWQ= V29sZg== IGhlcGF0 Q3JlYXRpbmc= IHBlcnNlY3V0 IHN3ZWV0bmVzcw== YXJ0ZQ== IGZvcmZlaXR1cmU= IFJvYmVydG8= aW1wcm8= TkZM IE1hZ25ldA== RGV0YWlsZWQ= IGluc2lnbmlmaWNhbnQ= IFBPTElU IEJCUQ== IENQUw== IHNlYXc= YW1pbmVy bUw= ZW5kaWY= ZmluYWxz IDI2NQ== dWlzaA== IH0p IFByb2JsZW1z IGVtYmxlbQ== IHNlcmlvdXNuZXNz IHBhcnNpbmc= IHN1YnN0aXR1dGlvbg== IHByZXNzdXJlZA== IHJlY3ljbGVk YWxlYg== UnVieQ== IHByb2ZpY2llbmN5 RHJpdmVy IFdlc3Rlcg== Oic= QUZUQQ== IG1hbnRsZQ== IENsYXl0b24= ZmxhZw== IHByYWN0aXRpb25lcg== Y292ZXJlZA== IFN0cnVjdA== YWRkYWZp NDI1 IFRvd25zaGlw IEh5ZHJv TG91aXM= MzQz IGNvbmRv IFRhbw== IHV0aWxpemF0aW9u IG5hdXNlYQ== IERlbXM= cmlkZ2Vz cGF1c2U= IGZvcm11bGFz IGNoYWxsZW5nZXI= Mzc2 IGRlZmVjdGl2ZQ== IFJhaWx3YXk= IFB1Yk1lZA== IHlvZ3VydA== bGJz IE5vcmZvbGs= T1BF IE1vb2R5 IGRpc3RyaWJ1dG9y IHNjcm9sbHM= IGV4dHJhY3Rz U3Rhbg== IHZpYWJpbGl0eQ== IGV4cG9zZXM= IHN0YXJ2YXRpb24= IFN0ZXBz IERvZGQ= ZmV3 U1RE MzMy IGNsb3N1cmVz IGNvbXBsZW1lbnRhcnk= IFNhc2hh dW1weQ== IG1vbmV0 IGFydGljdWxhdGU= IERvY3Q= a2lsbGVy IHNjcmlt IDI2NA== IHByb3N0aXR1dGVz IHNldmVyZWQ= IGF0dGFjaG1lbnRz IGNvb2xlZA== TGV2 IEZhbGs= ZmFpbA== IHBvbGljZW1hbg== IERhZw== IHByYXllZA== IEtlcm5lbA== IGNsdXQ= IGNhdGg= IGFub21hbHk= U3Rvcm0= ZW1ha2Vy IEJyZWFrZmFzdA== dWxp b2lyZQ== Sko= aHo= T3BlcmF0aW9u IFNpY2s= MzU0 IEd1YXRlbWFsYQ== UmF0ZQ== IGV4cG9zdXJlcw== ZmFjZXM= IEFyY2hhZQ== cmFm IE1pYQ== IDIwMjU= IG9wYXF1ZQ== IGRpc2d1aXNlZA== IEhlYWRxdWFydGVycw== U2Fo IHBvdHM= OTc4 IE1hbGY= IGZyb3duZWQ= IHBvaXNvbm91cw== IENvbnZlcnM= ZWVrcw== IGNyYWI= LiIi IHRyZWFzb24= IHJhbmM= IGVzY2FsYXRpbmc= IHdhcnI= IG1vYnM= IGxhbXBz IFN1bnNoaW5l IEJydW5zd2ljaw== UGhvbmVz IHNwZWxsZWQ= IFNraXA= IDIwNTA= IDE5MTE= IFBsdXRv IEFtZW5k IG1lYXRz Mzg3 IHN0b21w IFpob3U= IExldmlhdGhhbg== IEhhemFyZA== YWR2 IE9yd2VsbA== IGFsb3Vk IGJ1bXBlcg== IEFuYXJjaA== dWJ1bnR1 IFNlcmlvdXM= Zml0dGluZw== IE9wdGlvbmFs IENlY2ls UkVBTQ== IHNlcm90b25pbg== IGN1bHRpdmF0ZQ== YWdvZ3Vl fVw= IG1vc3F1ZXM= IFN1bm55 IHJlYWN0aXZl cmV2b2x1dGlvbg== IEx1cA== IEZlZG9yYQ== IGRlZmVuc2VtYW4= IFZJRA== aXN0aW5l IGRyb3duaW5n IEJyb2FkY2FzdGluZw== IHRocmlsbGVy IFNjeQ== IGFjY2VsZXJhdGluZw== IGRpcmVjdHM= b2RpZWQ= YmlrZQ== ZHVyYXRpb24= IHBhaW5mdWxseQ== UmVkZA== IHByb2R1Y3Rpb25z IGdhZw== IHdoaXN0 IHNvY2s= IGluZmluaXRlbHk= IENvbmNlcm4= IENpdGFkZWw= IGxpZXU= IGNhbmRsZXM= b2dlbmVvdXM= YXJnZXI= IGhlYXZlbmx5 aW5mbGFtbWF0b3J5 UGVyZm9ybWFuY2U= Q3M= cnVjdG9zZQ== YXpha2k= IHBlc3NpbQ== IGluZmVyZW5jZQ== IHBvd2Q= IFpvZQ== IHBhaW50cw== IGRheno= cHRh LS0tLS0tLS0tLS0= IGluc3Bpcg== IEV4cGVyaW1lbnRhbA== IEtuaWZl cmVnb3I= Ym9ycw== IHNob3dlcnM= cm9tZWRh IHNhaW50 IGJlbmlnbg== IEppYW5n IGVudmlzaW9uZWQ= IHNocm91ZA== SUZU SE8= IHNodWZm IElDQw== IHNlZ3JlZw== IHJldmlzaXQ= aWdodGhvdXNl TGk= IHN1YnN0cmF0ZQ== IFNlYXM= IFJld2FyZA== IEhlcA== IEJyYXNz c2Jt IGVsaW1pbmF0ZXM= IHN0YW1pbmE= IFZBVA== IExvYW4= IGNvbnN0cmFpbnQ= IGFwcHJvcHJpYXRlZA== IHBlcw== IEFMRQ== cmFuZ2luZw== IDQwNA== Mzky IGludGVsbGVjdHVhbHM= YWNodQ== IHJlc3RydWN0dXJpbmc= IExldmlu IHJ1bmVz IGRlbGlnaHRmdWw= IGNhcmJvaHlkcmF0ZXM= IE1vZGVscw== IEV4cG8= IHRyYW5zcG9ydGluZw== YWxsb2M= IHJpbmdpbmc= U2Ftc3VuZw== IHNjYXJjZWx5 IFVSTHM= IE1BUw== IHByb3RvdHlwZXM= IG5hcnJhdG9y IENQVXM= Y2Ru IEJhcnRvbg== IGRlY2lkZWRseQ== IFNodQ== aXhpcg== b2Npb3Vz IE15c3Q= TmludGVuZG8= IHJldXNl IGZvcmdpdmVu RmV3 aW5pY2Fs bmF0 IHNlYW1sZXNz IEV2YQ== IEVWRQ== IEpP bGFuZGVycw== IHNvZnRlcg== bmVnaWU= IHRyYW5zaWVudA== IG9yYml0YWw= IGZ1bGZpbA== IEtvbQ== SG9wZWZ1bGx5 IGR5bmFtaWNhbGx5 IEh1bmdlcg== 5Zs= IEFybWVuaWE= ZWxtYW4= YmVydG8= IHBpZ2U= IElEcw== bGltaXQ= IHZlaW5z IHNvYXJpbmc= cGFja3M= R29sZGVu IENyYWI= aXN0b3I= IFJQTQ== ICQk Z3Jlc3Npb24= IGppaGFkaXN0 IGdhbWJsZQ== IGNhcmVn IGluZmxhdGVk RmFjZQ== IEZpcmVhcm1z IEVtbWFudWVs 4p0= IHNob2Nrcw== Z3JhYg== IHNwbGVuZA== IEhQVg== YWJvcnRpb24= QWJvdmU= RW50aXR5 cGxheWVycw== IGNvbW1lbmNlZA== dWxlbmNl IGZ1bGZpbGxtZW50 IGVtYm9kaW1lbnRz IFdlbGZhcmU= IGhhaWw= IDxA dHRlbg== IGNhdGNoZXI= IEphemVlcmE= IHZvbGNhbm8= IHN0YWJpbGl6ZQ== IEhhbmRsZXI= IGludGVuc2lmaWVk IEFicmFtcw== IGh1bWlsaWF0aW9u cGFjZWQ= NjA1 IENlbnRPUw== U3BlY2lmaWM= IGhlZWQ= IENBTQ== IEdhbGlsZQ== RGll IGFib2xpc2hlZA== IFRob21zb24= IFRlYWNoZXJz IFdhc3M= am9uZw== IElTQk4= IEFsbGllcw== c2hha2U= 5bc= dmljdA== SG93YXJk IGRlZW0= IGV4Y2VlZGluZ2x5 IFNtYXJ0c3RvY2tz aWJl IGRvb3J3YXk= IGNvbXBldGVk aWdtYXQ= IG5hdGlvbmFsaXN0cw== IGdyb29t IEtlZW4= IGRpc3Bvc2FibGU= ZGVjbA== IFRvbGtpZW4= IFNjaGVtZQ== IGJpb2Q= IGF2aWQ= IEVsb24= YWdhcg== IFRTQQ== Um9tYW4= IGFydGlmaWNpYWxseQ== IGFkdmlzb3Jz WEw= IEluZmVybm8= MzY2 IHRlZGlvdXM= IFBob3RvZ3JhcGh5 IENhcnJpZQ== IHRyb3Bl IFNhbmRyYQ== IGRlY2ltYWw= UXVlZW4= IEd1bmRhbQ== IE9N b3RlY2g= TkJB IDE5MzI= IGVudHJlbmNoZWQ= IE1hcmlvbg== IGZyYXRlcm5pdHk= TGFib3Vy SGVucnk= IGxhdGl0dWRl RWl0aGVy IGVuaGFuY2Vz IFBvdGVudGlhbA== IHNoaW5lcw== aWRhZA== IGJyZWFkdGg= IGNhcGFjaXRpZXM= IPCfmYI= IEJyb254 IHNleGVz IGRpZmZlcmVudGlhdGlvbg== IGhlYXZ5d2VpZ2h0 IFRhag== ZHJh IG1pZ3JhdGU= IGV4aGF1c3Rpb24= IFJVTg== ZWxzaXVz IEN1b21v IGd1aXRhcnM= IGNsb25lcw== IFNvbWV3 IFByeQ== LS0tLS0tLS0tLS0tLQ== IHdhcnJhbnRlZA== Y3ljbGVz IHNhbHZhZ2U= IGRpc2tz UkFOVA== IE5HT3M= IE1hcnRpYW4= IjpbeyI= IGFkZGljdHM= b2p1cmU= aWxsZXQ= IGFtYXppbmdseQ== YXJ0bWVudHM= cGl4ZWw= IEdQVXM= TGF5b3V0 6KM= IFRhbWls IEJhc2ls IGltcGFydGlhbA== IFN0cnVjdHVyZQ== Zm9yaw== YnJ5Y2U= IHJpZGdl IEhhbWJ1cmc= cmlvdXM= IGJsaXR6 Y2lnYXJldHRlcw== IGNhbm5lZA== NDAy IGlyb25pY2FsbHk= IGNvbXBhc3Npb25hdGU= IEhhd2tpbnM= LiM= IENhdGhlZHJhbA== IHJhbGxpZWQ= aW50ZXJuYWw= IHF1b3Rh c3Rha2Vz VEVYVA== bW9t IGNvbXBsZXRlcw== IDIzOA== IHNocnVn 44OR IE5pbnRo IHJldmlzZQ== IFByb3ZpZGVy IHRyZWFjaGVy IHF1YXNp IFBSRVM= IGRlcG9zaXRpb24= IGNvbmZpZGVudGlhbGl0eQ== aXNzb3Jz IGltYmFsYW5jZQ== IHNwYW5uaW5n IGFuZ3VsYXI= IEN1bA== Y29tbXVuaWNhdGlvbg== IE5vcmE= IEdlbml1cw== b3B0ZXI= IHNhY2tlZA== U3BvdA== IGZpbmVseQ== IENIUg== Mjgy d2F2ZXM= UGFsZXN0 IFJvaGluZw== Tkw= 6L8= IHNoaXR0eQ== IFNjYWxpYQ== NDc1 UHJvZ3Jlc3M= IHJlZmVyZW5jaW5n IGNsYXNzcm9vbXM= YWJlZQ== IHNvZA== aGVzaW9u NzA4 IFp1Y2tlcmJlcmc= IEZpbmlzaA== IFNjb3RpYQ== IFNhdmlvcg== IEluc3RhbGxhdGlvbg== YW50aGE= KC0= IDMwMg== IFB1bms= IGNyYXRlcg== eW91dHU= IHJvYXN0 IGluZmx1ZW5jaW5n IGR1cA== IEpS IEdyYXY= IHN0YXR1cmU= IGJhdGhyb29tcw== QXNpZGU= V2lraQ== bWVhbg== IFphaw== IE9uZXM= IE5hdGg= IGh5cGVydA== IGNvbW1lbmNlbWVudA== Q2l2aWw= IG1vZGVyYXRlbHk= IGRpc3RyaWJ1dG9ycw== IGJyZWFzdGZlZWRpbmc= IDk4MA== IFNpaw== IENpZw== IEFNRVI= UklQ IENhcmVlcg== dXN0aW5n IG1lc3NlZA== IGVo IEplbnNlbg== LyQ= IGJsYWNrbWFpbA== IGNvbnZlcnNpb25z IHNjaWVudGlmaWNhbGx5 IG1hbnRyYQ== cGF5aW5n IGl2b3J5 IENvdXJ0cw== T1VHSA== YXVudGxldA== U2VyaWFs QnJvdw== IEh1bmRyZWRz MzIz IHBlZQ== IGxpbnV4 IHN1Ym1lcg== IFByaW5jaXBhbA== NDg1 IERTTA== IENvdXNpbnM= IGRvY3RyaW5lcw== IEF0aGxldGljcw== IDMxNQ== IEthcm1h IGF0dGVudA== dXJnZXI= IHByZXNjcmliZQ== IGVuY2Fwcw== IENhbWU= IHNlY3JldGl2ZQ== IENyaW1lcw== ZG4= Q2xlYW4= IEVneXB0aWFucw== IENhcnBlbnRlcg== IGxs SHVt IE1pbG8= IGNhcGl0YWxpc3Rz IGJyaWVmZWQ= VHdl IEJhc2lu ZWx2ZXQ= TW9z IHBsdW5nZQ== IEthaXNlcg== IEZ1ag== aWxsaW4= IHNhZmVndWFyZHM= IG9zdGU= IE9wcG9ydHVuaXR5 IE1hZmlh IENhbGxpbmc= YXBh dXJiYW4= YnJ1c2g= aWxsYXJk Y8Op aW50ZWxsaWdlbmNl IExvYg== IERydWlk IHNtb290aGVy IGZvb3Rpbmc= IG1vdG9yaXN0cw== YXJjaXR5 IG1hc2N1bGluaXR5 IG1pc20= IGFiZG9taW5hbA== IFRhdmVybg== IFJvaA== IGVzY2FwZXM= c2lnbmVk QW50aG9ueQ== IHNhY3JpZmljaW5n IGludGltYWN5 IGFudGVyaW9y IEtvZA== IG1vdGlm IGdyYXo= IHZpc3VhbGl6YXRpb24= IGd1aXRhcmlzdA== IFRyb3Rza3k= bWFnaWM= RGFy IE1vcmk= IHdhcmRz IHRvaWxldHM= bGVzdA== IHRlbGVwb3J0 IFN1bmRheXM= IFBsYXQ= RVRT IGVTcG9ydHM= UGF0cmljaw== IEthdGhlcmluZQ== ZW5rbw== IGhhc3NsZQ== IE1pY2s= Z2dsZXM= IGhvYg== YWludGFpbg== IGFpcmJvcm5l IHNwYW5z IGNoaWxp IGFwZXJ0dXJl IHZvbHVudGVlcmVk IEluY2lkZW50 IEZyZXM= IFZldGVyYW4= YXVnaHRlcmVk aW5nbw== IHVuaW5zdXJlZA== Q0xPU0U= IGZ1c2U= IGVyb3RpYw== IGFkdmVydGlzZQ== cmFpc2luZw== VGV4dHVyZQ== IGF0dGVuZHM= IFJFQUw= dWRkbGVk IHNtb290 IDMwNQ== IFdpbGxpcw== IGJsb25k QW5hbHlzaXM= IFZU b25pY2E= IHN0cm9uZ2hvbGQ= UkY= Tk0= Lj4+ IHByb3NwZXJvdXM= IGJvYXN0ZWQ= Mjky IE1hbnVmYWN0dXJpbmc= UFJFU1M= Z3Jlbg== IHBoYXJtYWN5 IFJvY2tlZmVsbGVy a2Fp IHRodW1icw== IEh1dA== IG1vdGhlcmJvYXJk IGd1YXJkaWFucw== IEFsdGVy bGx1bGFy IHNoYWNr IHdpc2VseQ== IGJhY2tib25l ZXJ2YQ== IHN1aWNpZGVz IE1jR3JlZ29y aWphaA== RW1lcg== IEJyYXY= IGRlc2lnbmF0ZQ== UE9TVA== cHJvZHVjZWQ= IGNsZWFuc2luZw== aXJsd2luZA== ZXhpc3RlbnQ= IEh1bXBo IFBheW5l IHZlc3RlZA== xaE= IHN0cmluZ2VudA== aW9uYQ== IHVuc3Vi IHN1bW1lZA== IEhlcmN1bGVz c3ViamVjdA== IFJhZ25hcg== IE5vcw== IGNoYXJhY3Rlcml6YXRpb24= IHNhdnZ5 IERhd3Nvbg== IENhc2lubw== IGZyaQ== IEJhcnJpZXI= IG1pc2luZm9ybWF0aW9u IGluc3VsYXRpb24= IGNvcnJpZG9ycw== IGFpcnBsYW5lcw== IE5vY3Q= YWhp IDE5MTY= a2I= YXJtYWM= IHNodW4= IHNjaGVtYQ== IGhvcnJpZmllZA== IDIzOQ== YXVuZGVycw== TkI= aWF0ZXM= ZXJpdHk= IFNoYXJk IHJhcml0eQ== IGdyb3VwZWQ= IEdoYW5h YWdhaW5zdA== IEJpb2xvZ2ljYWw= IEF3YXJl b3dlbGw= z4Q= IEJlYXU= c2hhdw== SGFjaw== IEp1bGl1cw== VVNT b2xzb24= YXVuYQ== Y3J1 IE1hdXJpY2U= IElr IHNlcXVlbmNpbmc= IHJhZGljYWxz ICg/LA== dmlydHVhbA== IGFueXdheXM= IHJlcGVyYw== IGhhbmRsZXJz IGhlc2l0YW50 6YM= IE1G cGxlbWVudGF0aW9u YXNzb2NpYXRlZA== IGNhbXBhaWduZWQ= IFl1ZQ== dXRhdGlvbnM= IFlvZ2E= IHNpbW1lcg== IHJvZHM= IG1lbG9keQ== IGNvbnZveQ== dmlkZW9z IHNjcmVlbmVk TmVn b2NoZW1pY2Fs ICgpKQ== IHVsdHJhcw== IGFudGlw IElzbGFuZGVycw== NzA0 IGZldGlzaA== IHJpZGljdWxvdXNseQ== IEthcnQ= IG1pdG9jaG9uZHJpYWw= IGludGVyZmVyaW5n QnVpbGRlcg== IG92ZXJmbA== IGFjbmU= IE11ZA== IEtlcnI= ZmxleA== IFBvc3RhbA== IEJhbHRpYw== NDc3 IFBlcnNvbnM= b3VyYWdl SEI= IE11c2U= IEltbW9ydGFs IERyaXZpbmc= IHBldGl0aW9ucw== IHN1YnNjcmlwdA== IHNvcmNl IFByb2Nlc3Nvcg== dXRvbg== U29ueQ== IHBob24= IHJhY2Vk IEFudGhyb3A= IGRheXRpbWU= IEV4ZXJjaXNl QWRkaW5n IGVuZ2FnZXM= IFF1YWxjb21t IG1pcmFjbGVz IG1lbWVz IERyaW5r IE9yaW9sZXM= IGhhaXJz IFBvbGFy YXRob20= IHNsaXBwZXJ5 IFJlbXk= IGNhcmFtZWw= IFlFQVI= IGFsaw== SWdu YXV0aW9u IE1lcmxpbg== IENyYW4= IGFwb2xvZ2llcw== IDQxMA== IG91dGluZw== IE1lbW9yaWVz YXBwb2ludGVk IGNvdW50ZXJlZA== dWxk cG9zaW5n IGZpcmV3YWxs IFdhc3Q= IFdldA== d29ya2Vk c2VsbGVy IHJlcGVhbGVk ZXJlbw== YXNzdW1pbmc= QkxJQw== bWl0ZQ== IENFT3M= IENoYXBlbA== ZWxsaWdlbnQ= X19fX19fX19fX19fX19fX19fX19fX19f RG9n IHdhcnQ= IHN1YnNjcmliZXI= c3BvcnRz IGJlZ2dlZA== IE1W IHNlbWlm ZXRoaWNhbA== IHByZWFjaA== IHJldml0YWw= IHB1bml0aXZl IHNob3J0Y3V0cw== IGluc3RpdHV0ZWQ= IFdhcnNhdw== IGFiZG9tZW4= IEtJTkc= IHN1cGVyaW50ZW5kZW50 IGZyeQ== IEdlbw== VE9S IGNvbnRyYWRpY3Rpb25z YXB0aWM= IGxhbmRzY2FwZXM= YnVncw== IGNsdXN0 IHZvbGxleQ== Y3JpYmVk IHRhbmRlbQ== IHJvYmVz V0hBVA== IHByb21vdGVy IGVsb3F1 cmV2aWV3ZWQ= IERL IFBsYXRv IGZwcw== VGFuaw== IERlcnJpY2s= IHByaW9yaXRpemU= YXNwZXI= IEhvbmR1cmFz IENvbXBsZXRlZA== bmVj IG1vZw== bmly IE1heW8= REVG c3RhbGw= aW5uZXNz IFZvbGtzd2FnZW4= IHByZWNhdXRpb24= IE1lbGw= aWFr aXN0cmllcw== IDI0OA== IG92ZXJsYXBwaW5n U2VuYXRl IEVuaGFuY2U= cmVzeQ== cmFjaWFs T1JUUw== IE1vcm1vbnM= U3Ryb25n IENvY2g= TWV4aWNv IE1hZHVybw== IGphcnM= IGNhbmU= V2lr b2xsYQ== aWZmZXJlbmNl IHBoeXNpY2lzdA== IE1hZ2dpZQ== IDI4NQ== IGRlcGljdGlvbg== IE1jTGFyZW4= SnU= IHNsb3dz IGNvbW1pc3Npb25lcnM= IFdpbGxvdw== IEV4cGxvcw== aG92YWg= IHRlY2huaWNpYW4= IGhvbWljaWRlcw== IEZsYXY= IFRydW1hbg== IDEwMDAw dWN0b3I= IHNoYWRlcg== TmV3c2xldHRlcg== NDU3 IHJldmVy IGhhcmRlbmVk IHdoZXJlYWJvdXRz IHJlZGV2ZWxvcA== IGNhcmJz IHRyYXZlcnM= IHNxdWlycmVs IGZvbGxvd2Vy IHNpbmdz NTA4 IHJhYmJpdHM= ZW1vbml1bQ== IGRvY3VtZW50aW5n IG1pc3VuZGVyc3Rvb2Q= KSc= Umljaw== Z2dpZXM= IHByZW1pZQ== IHNrYXRpbmc= IHBhc3Nwb3J0cw== IGZpc3Rz YWdlZGRvbg== SGF3 QUNQ MDgw IFRob3VnaHRz IENhcmxzb24= IHByaWVzdGhvb2Q= aHVh IGR1bmdlb25z IExvYW5z IGFudGlz IGZhbWlsaWFyaXR5 IFNhYmI= b3BhbA== IEluaw== c3RyaWtl IGNyYW0= IGxlZ2FsaXplZA== IGN1aXNpbmU= IGZpYnJl VHJhdmVs IE1vbnVtZW50 T0RZ ZXRoeQ== IGludGVyc3RhdGU= IFBVUg== ZW1wb3Jhcnk= IEFyYWJpYW4= ZGV2ZWxvcGVk IHNhZGRsZQ== IGdpdGh1Yg== IE9mZmVy IElTUA== cm9sZXQ= IFNVUEVS IERlbmlz IG11bHRpcGxpZXI= IHN0aXJyZWQ= SW50ZXJlc3RpbmdseQ== IGN1c3RvbWFyeQ== IGJpbGxlZA== aGV4 IG11bHRpcGxpZWQ= IGZsaXBwaW5n IENyb3NieQ== IGZ1bmRhbWVudGFscw== aWFl IFBsYXllZA== IEF0b20= YW1hem9u IEZsYW0= ZWV6 YWN0aXZhdGVk IHRhYmxlc3Bvb24= IGxpYmVyYWxpc20= IFBhbGlu IFBhdGVs TnVt IFRBTQ== IHN1cm4= IFJlbG9hZGVk IGNvaW5lZA== Il0s IENsYXNo IEFndQ== IHByYWdtYXRpYw== IEFjdGl2YXRl IDgwMg== IHRyYWlsZXJz IHNpbGhvdQ== IHByb2Jlcw== IGNpcmN1cw== IEJhaW4= IExpbmRzYXk= IEFiYmV5 RGVsaXZlcnk= IGNvbmNlc3Npb24= IGdhc3Rybw== IFNwcml0ZQ== xJ8= YW5kZWw= IGdpbW0= IGF1dG9iaQ== IFR1cnRsZQ== IHdvbmRlcmZ1bGx5 IEhhcmFt IFdvcmxkd2lkZQ== IEhhbmRsZQ== IHRoZW9yaXN0cw== IHNsZWVr IFpodQ== b2dyYXBoaWNhbGx5 RUdB IE93bmVycw== YXRocw== IEFudGFyY3RpYw== bmF0YWw= PSIi ZmxhZ3M= YGBgYA== IHN1bA== S2g= IHBvdGFzc2l1bQ== IGxpbmVtYW4= IGNlcmVhbA== IFNlYXNvbnM= IDIwMjI= IG1hdGhlbWF0aWM= IGFzdHJvbm9tZXJz cHJvZmVzc2lvbmFs IGZhcmVz Y2tub3dsZWQ= IGNoaQ== IHlvdW5nc3RlcnM= IG1pc3Rha2VubHk= IGhlbWlzcGhlcmU= IERpdmluaXR5 cm9uZQ== ICIs cmluZ3M= IGF0dHJhY3Rz dmFuYQ== 5bk= Q0FQ IHBsYXlsaXN0 IHBvcmNo 44Gj IGluY29ycG9yYXRlcw== IHNvYWs= IGFzc2VydGluZw== IFRlcnJvcmlzbQ== IFBhYmxv SmE= Y2VzdGVy IGZlYXJpbmc= IFByYXllcg== IGVzY2FsYXRlZA== R1c= IHJvYmU= IEJyaWdodG9u YWNpc3Rz IFN5bXBob255 IER3YXJm IFBhcmFkZQ== IExlZ28= IGluZXhwbA== IGxvcmRz bGVhZg== UkFH bGliZXI= IGNpZ2Fycw== IEplaG92YWg= NjA2 V0lORE9XUw== IExpYmVyaWE= ZWJ1cw== SGVhdnk= IGx1YnJpYw== IFJX YW5ndWFnZXM= IG5hcnJvd2Vk Y29tcHV0ZXI= IEVtYmVy IG11cmRlcmluZw== IGRvd25zdHJlYW0= IFR1bHM= IFRhYmxlcw== VG9waWM= IEFjY3VyYWN5 PS8= bG9zdA== IFJlaQ== IHByb2dyZXNzZXM= YmVhcg== IGVzdGFibGlzaG1lbnRz SnVzdGlu IFBlYWNo IEdvbWV6 5b8= IFRyaWFuZ2xl SWRlbnQ= IEhpdmU= UmVzb3VyY2Vz IG1peGVz IEFzc3VtaW5n TXU= IGh5cG9j IHNhbmU= IFdhbg== aWRpb3Vz U3VjY2Vzcw== IGlv QW5nZWw= IGRhbmdlcm91c2x5 IENyZWF0dXJl V09SSw== Ols= IEthdHJpbmE= TGlzdGVuZXI= TWlsbGVy IElkbGli aGFuZw== IGNpcmN1bXZlbnQ= aHJlZg== IGNlbGVzdGlhbA== IFdlZWtz IFB1Zw== IERhbHRvbg== IHN1YnBvZW5h dWt1 IHBlcnNpc3RlZA== cGVp b2xkaW5n IERvY3VtZW50cw== IEhhc3Q= IENFTlQ= IHByaW1lcg== IHN5bm9ueW1vdXM= IG5pYg== b21icw== IG5vdGF0aW9u IERpc2g= IEF0bW9zcA== IGZvcmJpZA== IEFORw== cGF0dGVybg== bG9z IHByb2plY3RpbGVz YnJvd24= LiIs IFZlbm9t IGZpZXJjZWx5 dWJsaXNoZWQ= IFVyYW4= IE5pY2FyYWc= NDEw IENBTA== T1RPUw== IE1pcmFjbGU= IEVuY2hhbnQ= IGd1YXJkaW5n YXBwZW5k QXR0YWNo IGxldmVsZWQ= IGNvbmRvbXM= aWhpbGF0aW9u NjQ5 IG5pZ2h0bWFyZXM= IFRIRVk= IFNUQVJU IEtpbm4= IHJvb21tYXRl IGh5Z2llbmU= b3BwaW5n Sm9i IGx2bA== IFZFUg== IEtlZXBpbmc= YWJldGlj IGZvcm1hdHRpbmc= ZXJhbGE= IHJldmlzaW9ucw== IHJlc3VyZw== VGVs IEdvb2RtYW4= MzUz cG9k IGluZGlzcA== IFRyYW5zbGF0aW9u IGdvd24= IE11bmQ= IGNpcw== IGJ5c3RhbmQ= Y29sbGVjdA== IFB1bmphYg== YWN0aXZlbHk= IEdhbWI= dGVsbA== IGltcG9ydGluZw== Z2VuY2llcw== IGxvY29t IEJyaWxs SG9seQ== IEJlcmdlcg== IHNob3dkb3du IHJlc3BvbmRlcnM= SUxZ IHRha2Vkb3du bGV0ZWQ= IG1hdHRlcmVk IHByZWRpY3RpdmU= IG92ZXJsYXk= R1BV IFZpY2s= IGNvbnZleWVk VGFi cGVlcg== U2Nhbg== IGRlZmVuc2l2ZWx5 dmFl IGFwcHJvdmluZw== IHRpZXJz IFZpYQ== cXVlcmFkZQ== IFNhdWRpcw== IGRlbW9saXNoZWQ= IFByb3BoZQ== IG1vbm8= IGhvc3BpdGFsaXR5 SEFN IEFyaWVs TU9E IFRvcmFo IGJsYWg= IEJlbGFydXM= ZXJlbnRpYWw= IFR1Yw== IGJhbmtlcg== Mzk3 IG1vc3F1aXQ= IFNjaWVudGlzdA== IE11c2ljYWw= IGh1c3Q= U2hpZnQ= IHRvcm1lbnQ= IHN0YW5kb2Zm RWR1Yw== IEZvZw== IGFtcGxpZmllcg== U2hhcGU= SW5zdGFuY2U= IENyaXRpY3M= IGRhZW1vbg== SG91c3Rvbg== IG1hdHRyZXNz IElERg== IG9ic2NlbmU= IEFtZXI= aGV0dGk= IGNvbXBpbGluZw== MzUy dmVyZXR0 IFJlZHVjdGlvbg== aXN0cmF0aW9u IEJsZXNzZWQ= IEJhY2hlbG9y MzE2 IHByYW5r IFZ1bGNhbg== ZGRpbmc= IG1vdXJuaW5n IFF1aW50 IEJsYXN0ZXI= dGVzdGluZw== IHNlZGltZW50 Pj4+ IEV0ZXJuaXR5 IFdIRVJF IE1hemU= IHJlYWN0aW5n IEFsdg== b21zZGF5 IENSQQ== IHRyYW5zbGF0b3I= IGJvZ3Vz YXR1 V2Vic2l0ZQ== b2xscw== IGJhcHRpc20= IHNpYmxpbmc= IEF1dHVtbg== dmV6 44Gu6Q== Z3VhcmRz R2Vvcmc= YXNzYWRvcnM= IEZyZXVk IGNvbnRpbmVudHM= IFJlZ2lzdHJ5 QmVybmll lprlo6s= IHRvbGVyYW50 IFVX IGhvcnJpYmx5 OTk1 IE1JREk= IGltcGF0aWVudA== b2NhZG8= ZXJp IFdvcnN0 IE5vcnJpcw== IFRhbGtpbmc= IGRlZmVuZHM= ZW5zYWJsZQ== IDIwMjE= IGFuYXRvbXk= TGV3 IGRyYXdlcg== IENhbmJlcnJh IHBhdHJpb3RpYw== 6b6N5Zaa5aOr IEF2Zw== QVJN IHVuZGlzY2xvc2Vk IGZhcmV3ZWxs NDU5 YmFibGU= IEFsbGlzb24= T0xPRw== IGNvbmNv dGlnaHQ= IEFDUEk= IE1pbmVz bGljaA== IOKUnA== cmVwcmVzZW50ZWQ= MjAwMDAw IGVudGh1c2lhc3Q= T1RT Ymls IEluZ3JlZGllbnRz IGludmVudG9y IE15U1FM wqDCoMKg IEFCT1VU d2l0aGlu IG1r QnVs IEZha2U= IGRyYWNvbmlhbg== V2E= aGVsbQ== IFRlcnJhbg== ZXJ2aWxsZQ== IGNvbW1vbnBsYWNl U0laRQ== ICI8 cmVwbGFjZQ== b2dyYXBocw== IFNFTEVDVA== aW5jaWJsZQ== IE1vc3RseQ== IFNoZWZmaWVsZA== IElERQ== dWdnbGU= IGNpdGF0aW9ucw== aHVyc3Q= IFVuaXg= IHVubGVhc2g= IFBpcGVy IE5hbm8= IHN1Y2N1bWI= IHJlbHVjdGFuY2U= IDI1MDA= IE1lcmNoYW50 IHdpcmV0 IGNvbWJvcw== IEJpcnRoZGF5 IGNoYXJjb2Fs IFVQUw== IEZhaXJmYXg= IGRyaXZld2F5 IFRlaw== IFBpdGNo b3ZlcmU= IHRlY2huaWNpYW5z IEFjdHVhbA== ZmxhdGlvbg== IEZpc2NhbA== IEVtcHR5 YW5hbW8= IG1hZ25lc2l1bQ== IHNsdXQ= IGdyb3dlcnM= SW52ZXN0aWdhdG9ycw== KCk6 IFNhdGVsbGl0ZQ== IEtleW5lcw== bWlzc2l2ZQ== bGFuZQ== IGJvcm91Z2g= MzQ0 IFRFQU0= IEJldGhlc2Rh Q1Y= aG93ZXI= IFJBRA== IGNoYW50 IFJpeQ== IGNvbXBvc2l0aW9ucw== IG1pbGRseQ== IG1lZGRsaW5n IGFnaWxpdHk= YW5lZXJz NTAx IHN5bnRo bGluZ2Vy Mjkx IGV4Y2xhaW1lZA== UGFydHk= IGNvbnRhbWlu IE1hbm9y IFJlc3BvbmQ= IHByYWlzaW5n IG1hbm5lcnM= ZmxlZXQ= U3VtbWVy IEx5bmQ= IERlZmluaXRlbHk= Z3JpbQ== IGJvd2xpbmc= c3RyaQ== 55s= eW50 IG1hbmRhdGVz RElW IHJlY29uY2lsZQ== dmlld3M= IERhbW9u dmV0dGU= Rmxv IEdyZWF0ZXN0 aWxvbg== aWNpYQ== IHBvcnRyYXlhbA== IGN1c2hpb24= NTA0 MTk3OQ== b3NzYWw= QXBwbGlj c2NyaXB0aW9u IG1pdGlnYXRpb24= QVRT cGFj IGVyYXNlZA== IGRlZmljaWVuY2llcw== IEhvbGxhbmRl IFh1 IGJyZWQ= IHByZWduYW5jaWVz ZmVtaW4= IGVtcGg= IHBsYW5uZXJz IG91dHBlcg== dXR0ZXJpbmc= IHBlcnBldHJhdG9y IG1vdHRv IEVsbGlzb24= IE5FVkVS IGFkbWl0dGVkbHk= QVJJ IEF6ZXJiYWlqYW4= IG1pbGxpc2Vj IGNvbWJ1c3Rpb24= IEJvdHRsZQ== IEx1bmQ= IFBz IERyZXNz IGZhYnJpY2F0ZWQ= IGJhdHRlcmVk IHNpZGVs IE5vdHRpbmc= Rm9yZWlnbg== IEplcm9tZQ== MDIw IEFyYml0 IGtub3Rz IFJJR0hU TW92aW5n 44GZ IHN1cmdlcmllcw== IGNvdXJ0aG91c2U= IG1hc3RlcmVk IGhvdmVyaW5n IEJyYW4= IEFsaXNvbg== IHNhZmVzdA== bWlsaXRhcnk= IGJ1bGxpZWQ= IGJhcnJhZ2U= UmVhZGVy RVNF IEdlb2dyYXBoaWM= VG9vbHM= MzE0 IEdlZWs= cm90aA== Z2xlcnM= IEZJTg== z4E= IEFzdG9u YWx0ZXJu NDg4 IHZldGVyaW4= R2FtZXI= IGludGVs cmVuY2hlcw== U2hpZWxk IGFtbmVzdHk= IEJoYXI= IHBpbGVk IGhvbm9yYWJsZQ== IEluc3RpdHV0ZXM= IHNvYWtlZA== IGNvbWE= IEVGRg== MzQx Ynl0ZXM= IEdtYWls bGVpbg== IENhbmFkaWVucw== bWF0ZXJpYWw= SWw= IGluc3RydWN0b3Jz IEtZ IGNvbmNlaXZl dWJi IFBvc3NpYmxl IGVhc2luZw== IENocmlzdGluYQ== IGNhcmlj IEhEUg== Uk9N IHNob3ZlbA== ZGVsZXRl IHB1ZmY= IENoYW5naW5n IHNlYW1sZXNzbHk= QXR0cmlidXRl IGFjcXVpc2l0aW9ucw== YWtlcnk= IEVG IGF1dGlzdGlj IFRha2Vz IFBvd2Rlcg== IFN0aXI= NTEw IEJ1YmJsZQ== c2V0dGluZ3M= IEZvd2xlcg== IG11c3RhcmQ= IG1vcmVvdmVy IGNvcHlyaWdodGVk IExFRHM= MTUwMA== 5ok= IEhJUw== ZW5m IGN1c3RvZA== IEh1Y2s= R2k= IGltZw== QW5zd2Vy Q3Q= amF5 IEluZnJhc3RydWN0dXJl IGZlZGVyYWxseQ== TG9j IG1pY3JvYmVz IG92ZXJydW4= ZGRz b3RlbnQ= YWRpYXRvcg== Pj4+Pj4+Pj4= IHRvcm5hZG8= IGFkanVk IGludHJpZ3VlZA== IHNp IFJldmVsYXRpb24= cHJvZ3Jlc3M= IGJ1cmdsYXJ5 IFNhaXlhbg== IEthdGh5 IHNlcnBlbnQ= IEFuZHJlYXM= IGNvbXBlbA== ZXNzbGVy IFBsYXN0aWM= IEFkdmVudA== IFBvc2l0aXZl IFF0 IEhpbmR1cw== cmVnaXN0ZXJlZA== dWxhcml0eQ== IHJpZ2h0ZW91c25lc3M= IGRlbW9uaWM= dWl0aXZl IEJEUw== IEdyZWdn Y2lh IENydXNhZGU= IFNpbmFp V0FSRQ== Kyg= IG1lbGw= IGRlcmFpbA== eWFyZHM= QXN0 IG5vdGljZWFibHk= IE9iZXI= UmFt IHVubm90aWNlZA== IHNlcQ== YXZhZ2U= VHM= IDY0MA== IGNvbmNlZGU= IF0p RmlsbA== IGNhcHRpdml0eQ== IEltcHJvdmVtZW50 IENydXNhZGVy YXJhb2g= TUFQ 5pc= IHN0cmlkZQ== YWx3YXlz Rmx5 Tml0 IGFsZ2Fl IENvb2tpbmc= IERvb3Jz TWFsbGV5 IHBvbGljZW1lbg== 44GN IGFzdHJvbmF1dA== YWNjZXNzaWJsZQ== NDk1 IFJBVw== Y2xpZmZl dWRpY3JvdXM= IGRlcGVuZGVk YWxhY2g= IHZlbnR1cmVz cmFrZQ== IHRpdHM= IEhvdQ== IGNvbmRvbQ== b3Jtb25hbA== IGluZGVudA== IHVwbG9hZGluZw== Rm9vdG5vdGU= SW1wb3J0YW50 IDI3MQ== IG1pbmRmdWw= IGNvbnRlbmRz Q3Jh IGNhbGlicg== IE9FQ0Q= cGx1Z2lu RmF0 IElTUw== IER5bmFtaWNz YW5zZW4= Njg2 Jyks IHNwcml0ZQ== IGhhbmRoZWxk IEhpcHA= PX49fg== VHJ1c3Q= IHNlbWFudGljcw== IEJ1bmRlcw== IFJlbm8= IExpdGVyYXR1cmU= c2Vuc2U= R2FyeQ== IEFlZw== IFRyaW4= RUVL IGNsZXJpYw== IFNTSA== IGNocmlzdA== IGludmFkaW5n aWJ1 IGVudW0= YXVyYQ== IGFsbGVnZQ== IEluY3JlZGlibGU= QkJD IHRocnU= IHNhaWxlZA== IGVtdWxhdGU= IGluc2VjdXJpdHk= IGNyb3U= IGFjY29tbW9kYXRpb25z IGluY29tcGV0ZW50 IHNsaXBz IEVhcnRocXU= c2FtYQ== SUxMRQ== IGlQaG9uZXM= YXNha2k= IGJ5ZQ== IGFyZA== IGV4dHJhcw== IHNsYXVnaHRlcmVk IGNyb3dkZnVuZGluZw== cmVzc28= IGZpbGli IEVSUk9S IFRMUw== ZWdn IEl0YWw= IGVubGlzdA== IENhdGFsb25pYQ== IFNjb3Rz IHNlcmdlYW50 IGRpc3NvbHZl Tkg= IHN0YW5kaW5ncw== cmlxdWU= SVE= IGJlbmVmaWNpYXJ5 IGFxdWFyaXVt WW91VHViZQ== IFBvd2VyU2hlbGw= IGJyaWdodGVzdA== IFdhcnJhbnQ= U29sZA== V3JpdGluZw== IGJlZ2lubmluZ3M= IFJlc2VydmVk IExhdGlub3M= aGVhZGluZw== IDQ0MA== IHJvb2Z0b3A= QVRJTkc= IDM5MA== VlBO R3M= a2VybmVs dHVybmVk IHByZWZlcmFibGU= IHR1cm5vdmVycw== IEhlbHM= U2E= IFNoaW5qaQ== dmVo IE1PRFVMRQ== VmlvbA== IGV4aXRpbmc= IGphYg== IFZhbmlsbGE= IGFjcm9u IEdhcA== YmVybg== QWs= IE1jR3U= IGVuZGxlc3NseQ== IEZhcmFnZQ== IE5vZWw= VmE= TUs= IGJydXRl IEtydQ== IEVTVg== IE9saXZpYQ== 4oCg IEthZg== IHRydXN0aW5n IGhvdHM= MzI0 IG1hbGFyaWE= IGpzb24= IHBvdW5kaW5n b3J0bWVudA== Q291bnRyeQ== IHBvc3Rwb25lZA== IHVuZXF1aXY= Pyks IFJvb25leQ== dWRkaW5n IExlYXA= dXJyZW5jZQ== c2hhcGVzaGlmdGVy IEhBUw== b3NhdGU= IGNhdmVybg== IGNvbnNlcnZhdGlzbQ== IEJBRA== IG1pbGVhZ2U= IGFycmVzdGluZw== VmF1bHRz IG1peGVy RGVtb2NyYXRpYw== IEJlbnNvbg== IGF1dGhvcmVk ODAwMA== IHByb2FjdGl2ZQ== IFNwaXJpdHVhbA== dHJl IGluY2FyY2VyYXRlZA== IFNvcnQ= IHBlYWtlZA== IHdpZWxkaW5n cmVjaWF0aW9u 15nX UGF0Y2g= IEVtbXk= IGV4cXU= dHRv IFJhdGlv IFBpY2tz IEdyeQ== cGhhbnQ= IGZyZXQ= IGV0aG4= IGFyY2hpdmVk JS0= Y2FzZXM= IEJsYXpl IGltYg== Y3Y= eXNz aW1vbnk= IGNvdW50ZG93bg== IGF3YWtlbmluZw== IFR1bmlzaWE= IFJlZmVy IE1K IHVubmF0dXJhbA== IENhcm5lZ2ll aXplbg== IE51Z2dldHM= aGVzcw== IGV2aWxz NjQ3 IGludHJvZHVjdG9yeQ== bG92aW5n IE1jTWFob24= IGFtYmlndWl0eQ== TGFiZWw= IEFsbWlnaHR5 IGNvbG9yaW5n IENsYXVz c2V0dGluZw== TlVMTA== IEZhdm9yaXRl IFNJRw== Pig= IFNoaXZh IE1heWVy IHN0b3JtZWQ= IENvdmVyYWdl d2VhcG9ucw== aWdoYW0= IHVuYW5zd2VyZWQ= IGxldmU= IGNveQ== Y2Fz YmFncw== YXN1cmVk U2VhdHRsZQ== IFNhbnRvcnVt c2VyaW91cw== IGNvdXJhZ2VvdXM= IFNvdXA= IGNvbmZpc2NhdGVk IC8vLw== IHVuY29udmVudGlvbmFs IG1vbXM= IFJvaGluZ3lh IE9yY2hlc3RyYQ== IFBvdGlvbg== IGRpc2NyZWRpdA== IEZJTA== Zml4ZWQ= IERlZXI= ZG9p IERpbWVuc2lvbg== IGJ1cmVhdWNyYXRz ZXRlZW4= IGFjdGlvbkdyb3Vw b2ht IGJ1bXBz IFV0aWxpdHk= IHN1Ym1hcmluZXM= cmVuaGVpdA== cmVzZWFyY2g= IFNoYXBpcm8= IHNrZXRjaGVz IGRlY2VwdGl2ZQ== IFZpbA== ZXNhbWU= IEVzc2VudGlhbGx5 IHJhbXBhZ2U= aXNreQ== IG11dHRlcmVk dGhyaXRpcw== IDIzNg== ZmV0 YmFycw== IHB1cGls IFRob3U= b1M= c29uZw== IGZyYWN0dXJlZA== IHJldmVydA== cGljdHVyZQ== IGNyaXRlcmlvbg== dXNoZXI= IHJlcGVyY3Vzc2lvbnM= IFZpbnRhZ2U= IFN1cGVyaW50ZW5kZW50 T2ZmaWNlcnM= IGZsYWdnZWQ= IGJsYW1lcw== IGludmVyc2U= b2dyYXBoZXJz IG1ha2VzaGlmdA== IGRldm9pZA== IGZvc3NpbHM= IEFyaXN0b3RsZQ== IEZ1bmRz IGRlcGxldGVk IEZsdQ== IFl1YW4= IHdvZXM= IGxpcGlk IHNpdHU= cmVxdWlzaXRlcw== IGZ1cm5pc2g= IFNhbWFy IHNoYW1lZnVs IGFkdmVyc2VseQ== IGFkZXB0 IHJlbW9yc2U= IG11cmRlcm91cw== dWNrbGVz IEVTTA== IDMxNA== c2VudA== IHJlZGVm IENhY2hl IFB1cnM= aWdhbnM= IDQ2MA== IHByZXNjcmlwdGlvbnM= IGZyZXM= RnVjaw== b2NyYXRlcw== VHdlbnR5 IFdlaXJk IFRvZ2dsZQ== IENhbGxlZA== aXRpemVucw== IHBvdWx0cnk= IGhhcnZlc3Rpbmc= 44Km44K5 Qm90dG9t IGNhdXRpb25lZA== dG4= Mzk2 IE5pa2tp IGV2YWx1YXRpb25z IGhhcmFzc2luZw== IGJpbmRpbmdz IE1vbmV0YXJ5 IGhpdHRlcnM= IGFkdmVyc2FyeQ== dW50cw== IHNldGJhY2s= IGVuY3J5cHQ= IENhaXQ= IGxvd3M= ZW5nZXM= IE5vcm4= IGJ1bGJz IGJvdHRsZWQ= IFZveWFnZXI= MzE3 IHNwaGVyZXM= cG9saXRpY3M= IHN1YnRyYWN0 IHNlbnNhdGlvbnM= IGFwcGFsbGluZw== IDMxNg== IGVudmlyb25tZW50YWxseQ== IFNURU0= IHB1Ymxpc2hlcw== NTYw IGRpbGlnZW5jZQ== NDg0 IGFkdmlzZXM= IHBldHJvbA== IGltYWdpbmluZw== IHBhdHJvbHM= IEludGVnZXI= IEFzaGVz YWN0dXM= IFJhZGlhbnQ= IExU aXRhYmlsaXR5 aHRha2luZw== U2V0dGluZw== IG51YW5jZWQ= IFJlZWY= IERldmVsb3BlcnM= Tmk= cGllY2Vz OTkw TGljZW5zZQ== IGxvd2Vycw== IE90dG9tYW4= MzI3 b29v IHF1aXR0aW5n bWFya2V0cw== QmVoaW5k IGJhc2lu IGRvY3M= YW5pZQ== Zmxhc2g= Y3Rs IGNpdmlsaXplZA== IEZ1a3VzaGltYQ== Il0sIg== IEtT IEhvbmVzdGx5 YXJhdA== IGNvbnN0cnVjdHM= IExhbnM= IERpcmU= IExJS0U= IFRyb3VibGU= IHdpdGhob2xkaW5n IE9ibGl2aW9u IHNhbml0eQ== YW55YQ== Q29uc3Q= IGdyb2Nlcg== IENlbHNpdXM= IHJlY291bnRlZA== IFdpZmU= Qm9yZGVy YXRlcmVk aGFwcHk= IHNwb2lsZXI= IGxvZ2ljYWxseQ== SGFsbA== IHN1Y2NlZWRpbmc= IHBvbHltb3JwaA== IGF4ZXM= IFNob3RndW4= IFNsaW0= IFByaW5jaXBsZXM= IExldGg= YXJ0YQ== IHNjb3I= U2NyZWVuc2hvdA== IHJlbGF4YXRpb24= IyQjJA== IGRldGVycmVudA== aWRkeQ== IHBvd2VybGVzcw== IGxlc2JpYW5z IGNob3Jkcw== IEVkaXRlZA== c2VsZWN0ZWQ= IHNlcGFyYXRpc3Rz MDAwMg== IGFpcnNwYWNl IHR1cm5hcm91bmQ= IGN1bm5pbmc= UEFUSA== UG9seQ== IGJvbWJlZA== IHRpb24= eHM= IHdpdGhob2xk IHdhZ2Vk IExpYmVydGllcw== RmxhZw== IGNvbWZvcnRpbmc= NDU0 IElyaXM= YXJlcnM= IHJhZw== IHJlbG9jYXRlZA== IEd1YXJhbnQ= IHN0cmF0ZWdpY2FsbHk= IGdhbW1h dWJlcnR5 IExvY2toZWVk Z3Jlcw== IGdyaWxsZWQ= IExvd2U= c3RhdHM= IFJvY2tz IHNlbnNpbmc= IHJlbnRpbmc= IEdlb2xvZ2ljYWw= 2KfY b3Ryb3A= IHNldw== IGltcHJvcGVybHk= NDg2 IOKWoA== IHN0YXJ2aW5n IEJq RGlzY3Vzc2lvbg== MzI4 IENvbWJv IEZpeGVz TkFU IHN0cml2aW5n dGhvcmE= IGhhcnZlc3RlZA== IFBpbmc= IHBsYXlmdWw= IGF2ZW51ZXM= IG9jY3VwYXRpb25hbA== IHdha2Vz IENvdXJpZXI= IGRydW1tZXI= IEJyb3dzZXI= IEhvdXRo aXR1 IGFwcGFyZWw= cGFzdGU= IGh1bnRlZA== IFNlY29uZGx5 bGFpbg== WFk= IFBJTg== aWNvbnM= IGNvY2t0YWlscw== IHNpemFibGU= IGh1cmRsZXM= ZXN0aW5hbA== IFJlY3JlYXRpb24= IGVjbw== NjQ4 IERpZWQ= bWludA== IGZpbmdlcnByaW50cw== IGRpc3Bvc2U= IEJvc25pYQ== dHN5 MjIwMA== IGluc3BlY3RlZA== IEZvdQ== IGZ1c3M= IGFtYnVzaA== IFJhaw== IG1hbmlmZXN0ZWQ= UHJvc2VjdXQ= IHN1ZmZpY2U= cmVuY2Vz IGNvbXBlbnNhdGVk IEN5cnVz IGdlbnVz IFdvbHZlcmluZQ== IFRyZW5kcw== IGhpa2Vz IFNlZW4= IGVucm9s Q29sZA== IHBvbGl0ZWx5 IFNsYXY= IFJ1cGVydA== IGV5ZXdpdG5lc3M= IEFsdG8= IHVuY29tcA== IHBvc3Rlcmlvcg== TXVzdA== IEhlcno= IHByb2dyZXNzaXZlbHk= IDIzNA== IGluZGlmZmVyZW5jZQ== IEN1bm5pbmdoYW0= IGFjYWRlbWlh IHNld2Vy IGFzdG91bmRpbmc= IEFFUw== cmF0aGVy IGVsZGVzdA== IGNsaW1icw== IEFkZHM= IG91dGNyeQ== IGNvbnRhZw== IEhvdXNlcw== IHBlcHQ= IE1lbGFuaWE= aW50ZXJlc3RlZA== IFVDSA== IFJvb3Rz IEh1YmJhcmQ= IFRCRA== IFJvbWFuaWFu ZmlsZW5hbWU= U3RvbmU= IEltcGw= IGNocm9tb3NvbWU= Q2xl ZHg= IHNjcmFtYmxlZA== IFB0 IDI0Mg== T1BMRQ== IHRyZW1lbmRvdXNseQ== U3RyZWV0 IGNyYXZpbmc= IGJ1bmRsZWQ= IFJH cGlwZQ== IGluanVyaW5n IGFyY2FuZQ== UGFydGljaXA= IEhlcm9pYw== c3R5 IHRvcHBpbmc= IFRlbXBlc3Q= cmVudGljZXM= Ymg= IHBhcmFub2lh IFVuaWNvZGU= IGVncmVnaW91cw== IFwn IE9zd2FsZA== IGdyYXZlbA== IFNpbXBzb25z IGJsYW5k IEd1YW50YW5hbW8= V3JpdGVy bGluZXJz IERpY2U= SkM= IHBhcml0eQ== IHNpZGVk IDIzNw== IFB5cnJoYQ== YXR0ZXJz ZGs= RmluZQ== Y29tcGFu IGZvcm11bGF0ZWQ= IElkb2w= aWxlcnM= aGVtb3Ro IEZhdg== IGludHJ1c2lvbg== IGNhcnJvdHM= IExheWVy IEhhY2tlcg== IC0tLS0tLS0tLS0tLS0tLS0= IG1vZGVyYXRpb24= 6YE= b2NvYw== IGNoYXJhY3Rlcml6ZQ== IFRlcmVzYQ== IHNvY2lvZWNvbm9taWM= IHBlcms= IFBhcnRpY2lwYXRpb24= dHJhaW5pbmc= IFBhdWxv cGh5cw== IHRydXN0d29ydGh5 IGVtYm9kaWVk IE1lcmNo Y3VycmVuY3k= IFByaW9yaXR5 IHRlYXNpbmc= IGFic29yYmluZw== IHVuZmluaXNoZWQ= IENvbXBhcmlzb24= IGRpc3BsZQ== d3JpdGVycw== IHByb2Zlc3Npb25z IFBlbmd1aW4= IGFuZ3JpbHk= IExJTks= Njg4 IENvcnJlc3BvbmQ= IHByZXZhaWxlZA== IGNhcnRlbA== bHA= YXNtcw== IFJlZGVtcHRpb24= IElzbGFtaXN0cw== ZWZmZWN0cw== ZG9zZQ== IExhdHRlcg== IEhhbGlmYXg= IHZhcw== IFRvcGljcw== IE5hbWVk YWR2ZXJ0aXNpbmc= enph SUNFUw== IHJldGFyZGVk YWNoYWJsZQ== IFB1cHBldA== IEl0ZW1MZXZlbA== IHJldHJhY3Q= IGlkZW50aWZpYWJsZQ== QWFyb24= IEJ1c3Rlcg== c29s aGVsbGU= YXNzZW1i SG9wZQ== cmFuZ2Vk QmE= IFB1cmNo 6YA= IFNpcmk= IGFycml2YWxz IDE5MTI= IHNob3J0ZW5lZA== IDMxMg== IGRpc2NyZXBhbmN5 IFRlbXBlcmF0dXJl IFdhbHRvbg== IGtpbmRlcmc= cG9saXQ= IHJlbWl4 IGNvbm5lY3RvcnM= 44OY44Op IEthemFraHN0YW4= ZG9taW5hdGVk IHN1Z2Fycw== aW1ibGU= IFBhbmlj IERlbWFuZA== IENvbG9ueQ== b25lbg== IE1FUg== Nzc1 dXJpYQ== YXphYXI= IERlZ3JlZQ== UHJp IHN1bnNoaW5l IDI1MQ== IHBzeWNoZWRlbGlj IGRpZ2l0YWxseQ== IEJyYXVu IHNoaW1tZXI= IHNoYXZl IFRlbGVzYw== IEFzdHJhbA== IFZlbmV6dWVsYW4= IE9H IGNyYXdsaW5n SW50ZWc= IEZlYXRoZXI= IHVuZm9sZGluZw== IGFwcHJvcHJpYXRpb24= IOijj+g= IE1vYmlsaXR5 IE5leQ== LS4= YmlsdA== TElO IFR1YmU= IENvbnZlcnNlbHk= IGtleWJvYXJkcw== IENhbw== IG92ZXJ0aA== IGxhdXJl Pj5c IFZpcGVy YWNoYQ== T2Zmc2V0 IFJhbGVpZ2g= IEphZQ== Sm9yZGFu anA= IHRvdGFsaXRhcmlhbg== Q29ubmVjdG9y IG9ic2VydmVz IFNwYXJ0YW4= IEltbWVkaWF0ZWx5 IFNjYWw= Q29vbA== IHRhcHM= IHJvYXI= UGFzdA== IGNoYXJz IEJlbmRlcg== IFNoZWxkb24= IHBhaW50ZXI= IGJlYWNvbg== IENyZWF0dXJlcw== IGRvd250dXJu IGhpbmRlcg== IEFuZHJvbWVkYQ== w5s= Y2NvbGk= IEZpdG5lc3M= ZXRyaWNhbA== IHV0aWxpemVz IHNlbmF0ZQ== IGVuc2VtYmxl IGNoZWVycw== VFc= IGFmZmx1ZW50 a2ls cnlsaWM= b3JkZXJpbmc= Q29tcHV0ZXI= IGdydWVzb21l b3N0aWNz IFViaXNvZnQ= IEtlbGxleQ== IHdyZW5jaA== IGJvdXJnZW9pc2ll SUJMRQ== IFByZXN0b24= d29ybg== YXJpc3Q= cmVhdGluZw== IHN0YWluZWQ= YXJpbmU= IHNsaW1l RU5O IGNoZXN0cw== IGdyb3VuZHdhdGVy YW5ub3Q= IFRyYXk= IExvY2tl IENUUg== IGR1ZGVz IEV4dGVybmFs IERlY29kZXI= IHBhcmFtZWQ= IE1lZGxpbmU= ODA5 IERpbm5lcg== cnVwYWw= Z3o= IEd1bQ== IERlbW8= amVl IGRo YmVybWFu YXJjaHM= IGVucXU= IEVwc3RlaW4= IGRldmFzdGF0aW9u IGZyaWVuZHNoaXBz IEFyZA== IDIzMQ== IFJ1Ymlu IERpc3RhbmNl IHNwdXJyZWQ= IGRvc3NpZXI= IG92ZXJsb29raW5n XFxcXFxcXFxcXFxcXFxcXA== Rm9yZXN0 IENvbWVz XCIs IElyYW5pYW5z IGZpeHR1cmVz TGF1Z2hz IGN1cnJ5 IEtpbmdzdG9u IHNxdWFzaA== IGNhdGFsb2d1ZQ== IGFibm9ybWFsaXRpZXM= IGRpZ2VzdGl2ZQ== Li4uLi4uLi4u IHN1Ym9yZGluYXRl b2dseQ== IDI0OQ== TWlkZGxl IG1hc3NhYw== IGJ1cmdlcnM= IGRvd25zdGFpcnM= IDE5MzE= Mzk0 IFZH IGxhc2Vycw== IFNpa2g= IEFsZXhh ZGVyaXZlZA== IGN5Y2xpc3Q= 44Gu6a2U b25lbGluZXNz ISEhISEhISE= IGJ1ZmZz bGVnYXRl IHJhcGluZw== IHJlY29tbWVuZGluZw== cm9yZWQ= IG11bHRpY3VsdHVyYWw= dW5pcXVl IGJ1c2luZXNzbWVu IHVuZWFzeQ== IE1BUA== IGRpc3BlcnNlZA== Y2lwbGluZQ== SmVzcw== IEtlcmFsYQ== 5ac= IGFic3RyYWN0aW9u U3Vydg== VWg= IHByaW50ZXJz aWph b3dkZXI= IGFuYWxvZ291cw== IEFTUA== YWZlcg== IHVuZm9sZGVk IGxldmVsaW5n IGJyZWFjaGVk IEhlYXJpbmc= IG5hdA== IHRyYW5zbGF0aW5n Y3JpdGljYWw= IGFudGFnb25pc3Q= IFllc3RlcmRheQ== IGZ1enp5 d2FzaA== bWVyZQ== IGJld2lsZA== IE1hZQ== VmlyZ2lu cGhyYXNl IHNpZ25hbGVk IEhJR0g= IHByb3Rlc3Rlcg== IGdhcm5lcg== dW5rbm93bg== IGtheQ== IGFiZHVjdGVk IHN0YWxraW5n YW1u IGRlc2VydmluZw== IFJpdg== IEpvcmdl IHNjcmF0Y2hpbmc= IFNhdmluZw== aXBpbmc= IHRlYXNl IG1pc3Npb25hcnk= IE1vcnJvdw== VElNRQ== UHJlc2VudA== IGNoZW1vdGhlcmFweQ== dGVybmVzcw== IEhvbWVz IFB1cmR1ZQ== IHN0YXVuY2g= IFdoaXRuZXk= IFRIRVJF zrw= aWF0dXM= IEVybmVzdA== IERlcGxveQ== IGNvdmV0ZWQ= Rk1M IERpYWxvZ3Vl IGV4aXRlZA== ZnJ1aXQ= IG5lcmQ= IjoiIiwi IHZpdm8= cnVseQ== NDYw IEFtZW4= cmVoZW5zaWJsZQ== IOKY RElS IGFkaGVyZW5jZQ== IGNoZXc= IENva2U= IFNlcmdlaQ== ZGlnaXRhbA== IE5lY2s= Z2VudGx5 ZW50aGFs Lyk= IHdlYXJ5 IGd1aXNl IENvbmNvcmQ= IE9uaW9u YXRjaGVy IGJpbmdl IERpcmVjdGl2ZQ== IG1hbm5lZA== YW5zaw== IGlsbHVzaW9ucw== IGJpbGxpb25haXJlcw== Mzgz b2x5bg== b2R5bmFtaWM= IFdoZWF0 IEFsaWM= IGNvbG91cmVk IE5BRlRB YWJv IG1hY3Jvcw== aW5kZXBlbmRlbnQ= c3dlZXQ= IHNwYWM= IEthYnVs IMQ= ZW1l IGRpY3RhdGVk IHNob3V0cw== PXs= IHJpcHBpbmc= IFNoYXk= IENyaWNrZXQ= ZGlyZWN0ZWQ= IGFuYWx5c2Vk IFdBUlJBTlQ= YWdvbnM= IEJsYXplcnM= IGNoZWVyZWQ= IGFyaXRobWV0aWM= IFRhbno= Mzcz IEZsYWdz IDI5NQ== IHdpdGNoZXM= IEluY2x1ZGVk IEdhaW5lZA== IEJsYWRlcw== R2Ft IFNhbWFudGhh IEF0bGFudGlz IFByYXR0 IHNwb2lsZWQ= IElC IFJhbWlyZXo= UHJvYmFibHk= cmVybw== IE5n IFdhcmxvY2s= dHA= IG92ZXJoZQ== IGFkbWluaXN0cmF0aW9ucw== IHRpbnQ= IHJlZ2ltZW50 IHBpc3RvbHM= IGJsYW5rZXRz IGVwaXN0 IGJvd2xz IGh5ZHJhdWxpYw== IGRlYW4= IGp1bmc= IGFzY2VuZA== NzA1 IFNhbnRpYWdv w64= IHVuYXZvaWQ= IFNoYW1hbg== cmVi IHN0ZW1taW5n OTk4 IE1H c3RpY2tz ZXN0aGVzaWE= RVJP IG1vcmJpZA== IEdyaWxs IFBvZQ== YW55bA== IGRlbGV0aW5n IFN1cnZlaWxsYW5jZQ== IGRpcmVjdGl2ZXM= IGl0ZXJhdGlvbnM= IFJveA== IE1pbGt5 RmF0aGVy IHBhdGVudGVk NDQ3 IHByZWN1cnNvcg== IG1haWRlbg== IFBoZW4= IFZlZ2Fu IFBhdGVudA== S2VsbHk= UmVkZGl0b3I= IG5vZHM= IHZlbnRpbGF0aW9u IFNjaHdhcno= IHdpemFyZHM= IG9taW5vdXM= IEhlYWRz IEJH IGx1bWJlcg== IFNwaWVs IGlzRW5hYmxlZA== IGFuY2VzdHJhbA== IFNoaXBz IHdyZXN0bGVy cGhp IHl1YW4= IFJlYmVsbGlvbg== IGljZWJlcmc= IG1hZ2ljYWxseQ== IGRpdmVyc2lvbg== YXJybw== eXRobQ== IFJpZGVycw== IFJvYmJpZQ== IEthcmE= IE1haW50ZW5hbmNl IEhlcmI= IGhhcm1z cGFja2Vk IEZlaW5zdGVpbg== IG1hcnJ5aW5n IGJsZW5kaW5n IFJhdGVz IDE4ODA= IHdyaW5r IFVuY2g= IFRvcmNo ZGVzY3JpYmVk IGh1bWFub2lk aWxpdGF0aW5n IENvbnY= IEZlbGQ= SUdIVFM= IHdoaXN0bGVibG93ZXI= b3J0bXVuZA== ZXRzeQ== YXJyZXR0 IE1vbm8= IElrZQ== IENOQkM= IFdBWQ== IE1ETUE= IEluZGl2aWR1YWxz IHN1cHBsZW1lbnRhbA== IHBvd2VyaG91c2U= IFN0cnU= Rm9jdXM= YXBoYWVs IENvbGxlZw== YXR0aQ== WkE= IHBlcmVubg== IFNpZ25hdHVyZQ== IFJvZG5leQ== IGN1YmVz aWRkbGVk IERhbnRl IElOVg== aWxpbmd1YWw= IEN0aA== IHNvZmE= IGludGltaWRhdGU= IFJvZQ== IERpcGxvbQ== IENvdW50cmllcw== YXlzb24= IGV4dHJhZGl0aW9u IGRpc2FibGluZw== IENhcmRpZmY= IG1lbW9yYW5kdW0= IFRyYWNl ID8/Pw== c2VjdG9y IFJvdWhhbmk= IFlhdGVz IEZyZWV6ZQ== IGJsYWRkZXI= TW90b3I= IFByb21pc2U= YW50YXN5 IGZvcmVzZWVhYmxl IENvbG9nbmU= Y29udGFpbmVy IFRyZWVz IEdvcnM= IFNpbmNsYWly IGJhcnJpbmc= a2V5ZQ== IHNsYXNoZWQ= IFN0YXRpc3RpY2Fs 6Yc= IOKWug== QWxsb3dz IGh1bWlsaXR5 IGRyaWxsZWQ= IEZ1cm4= NDQz IHNld2FnZQ== IGhvbWVwYWdl IGNvdXJ0eWFyZA== IHZpbGU= IHN1YnNpZGlhcmllcw== YWpv ZGlyZWN0b3J5 IGFtbW9u VmVycw== Y2hhcmdlcw== IH19 IENoYWlucw== IDI0Ng== bm9i IHBlcmNlcHQ= IGdyaXQ= IGZpc2hlcm1lbg== IElyYXFpcw== IERJU1RS IEZVTEw= IEV2YWx1YXRpb24= Z3JhcGg= YXRpYWw= IGNvb3BlcmF0aW5n IG1lbGFu IGVubGlnaHRlbmVk IGFsaQ== dGFpbGVk IHNhbHV0ZQ== IHdlYWtlc3Q= IEJ1bGxkb2dz VUE= IEFsbG95 IHNlbWVu b2NlbmU= IFdpbGxpYW1zb24= c3By LOKAlA== IEdG aXR0ZW5z QmVhdA== IEp1bms= aXBoYXRl IEZhcm1lcnM= IEJpdGNvaW5z aWdlcnM= ZGg= IExveWFs cGF5ZXI= IGVudGVydGFpbmVk IHBlbm5lZA== IGNvdXBvbg== UXVldWU= IHdlYWtlbmluZw== Y2Fycnk= IHVuZGVyZXN0aW1hdGU= IHNob290b3V0 IGNoYXJpc21hdGlj IFByb2NlZHVyZQ== IHBydWRlbnQ= aW5hbmNlcw== IHJpY2hlcw== IGNvcnRpY2Fs IHN0cmlkZXM= IGRyaWI= IE9pbGVycw== NTQw IFBlcmZvcm0= IEJhbmdrb2s= IGV1dGg= U0VS IHNpbXBsaXN0aWM= dG9wcw== Y2FtcGFpZ24= UXVhbGl0eQ== IGltcG92ZXJpc2hlZA== IEVpc2VuaG93ZXI= IGF1Z21lbnQ= IEhhcmRlbg== IGludGVydmVuZWQ= IGxpc3RlbnM= IEtvaw== IHNhZ2U= IHJ1YmJpc2g= IERlZA== IG11bGw= cGVsbGluZw== IHZpZGVvdA== UHJvZHVjdGlvbg== REo= bWlhaA== IGFkYXB0YXRpb25z IG1lZGljYWxseQ== IGJvYXJkZWQ= IGFycm9nYW5jZQ== IHNjcmFwcGVk IG9wcHJlc3M= Rk9STUFUSU9O IGp1bmN0aW9u NDE1 RUVFRQ== U2tpbGw= IHN1YmR1 IFN1Z2dlc3Q= IFBldHQ= IGxldHQ= IE1hbmlw IENhZg== IENvb3BlcmF0aW9u VGhlcg== IHJlZ2FpbmVk tuY= cmVmbGVjdA== IHRodWdz IFNoZWxieQ== IGRpY3RhdGVz IFdlaW5lcg== IEhhbGU= IGJhdHRsZWdyb3VuZA== c2NoaWxk IGNvbmRvbA== aHVudA== b3NpdG9yaWVz IGFjY3VzZXM= RmlsZW5hbWU= IHNocmk= IG1vdGl2YXRl IHJlZmxlY3Rpb25z TnVsbA== IExvYmJ5 pbU= IFNBVEE= IEJhY2t1cA== 0YM= bmlu IENvcnJlY3Rpb24= IGp1aWN5 dXRyYQ== IFByaWM= IHJlc3RyYWluaW5n IEFpcmJuYg== IEFycmVzdA== IGFwcHJvcHJpYXRpb25z IHNsb3Blcw== IG1hbnNsYXVnaHRlcg== IHdvcmtpbmdz IEh1c3M= IEZyZXk= TGVhdmU= IEhhcm1vbnk= IEZlZGVy IDQzMA== IHRyZW5jaA== IGdsYWRseQ== IGJ1bGxwZW4= IEdhdQ== Ym9uZXM= IGdyb292ZQ== IHByZXRleHQ= 44WL IHRyYW5zbWl0dGVy IENvbXBvbmVudA== IHVuZGVyYWdl IEVtcGlyZXM= VGlsZQ== IG95 IE1hcnZpbg== IENBUw== IGJsb3Nz IHJlcGxpY2F0ZWQ= IE1hcmluZXJz TWFyY3Vz IEJsb2Nrcw== IGxpYmVyYXRlZA== IGJ1dHRlcmZseQ== RmVlbA== IGZlcm1lbnRhdGlvbg== IHlvdXR1YmU= IG9mZmVuZA== IFRlcm0= cmVzaXN0 IGNlc3NhdGlvbg== IGluc3VyZ2VuY3k= IGJpcg== IFJhaXNl NTk1 IGh5cG90aGVzZXM= NTAy IHBsYXF1ZQ== b2NyYXQ= IGphY2tldHM= IEh1ZmZQb3N0 YW1vbmc= IGNvbmZlcg== NDg3 IExpbGx5 IGFkYXB0aW5n IEZheQ== IHNob3ZlZA== dmVj IHJlZmluZQ== IGdvbg== IGd1bm1lbg== emFp IFNodXR0bGU= IEl6YW4= IDE5MTM= IHBsZXRob3Jh wrfCtw== IDUxMA== IHB1YmVydHk= IDI0MQ== IFdlYWx0aA== IEFsbWE= IE1FTQ== IEFkdWx0cw== Q2Fz cHJpc29u UmFjZQ== IHdhdGVycHJvb2Y= IGF0aGxldGljaXNt IGNhcGl0YWxpemU= IEp1aWNl IGlsbHVtaW5hdGVk IFBhc2NhbA== IGlycml0YXRpb24= IFdpdG5lc3Nlcw== YWRsZQ== IEFzdHJv IGZheA== IEVsdmlz UHJpbWFyeQ== IExpY2g= IEVsdmVz IHJlc2lkaW5n IHN0dW1ibGU= MzE5 IFBLSw== IGFkdmVyc2FyaWVz RE9T IFJpdHVhbA== IHNtZWFy IGFyc29u aWRlbnRhbA== IHNjYW50 IG1vbmFyY2h5 IGhhbGZ0aW1l IHJlc2lkdWU= IGluZGlnbg== IFNoYXVu IEVsbQ== YXVyaQ== QWZm V0FUQ0g= IEx5b24= aGVscHM= MzYx IGxvYmJ5aXN0 IGRpbWluaXNoaW5n IG91dGJyZWFrcw== IGdvYXRz ZmF2b3JpdGU= IE5haA== c29uaWFu IEJvb3N0ZXI= IHNhbmRib3g= IEZhcmU= IE1hbHRh IGF0dFJvdA== IE1PUg== bGRl IG5hdmlnYXRpbmc= VG91Y2g= IHVudHJ1ZQ== IERpc2FzdGVy IGx1ZGljcm91cw== UGFzc3dvcmQ= IEpGSw== YmxvZ3Nwb3Q= NDE2 IFVOREVS ZXJuYWw= IGRlbGF5aW5n VE9Q IGltcGxhbnRz IEFWRw== IEh1Z2U= YXR0cg== IGpvdXJuYWxpc3RpYw== IFBleXRvbg== IElB UmFw Z29hbA== IFByb2dyYW1tZQ== IHNtYXNoaW5n d2l2ZXM= cHJpbnRsbg== IFBsYWd1ZQ== aW51cw== RUVQ IGNydWlzZXI= IFBhcmlzaA== dW1pbml1bQ== IG9jY3VwYW50cw== IEppaGFk bW9w IHBpbnQ= IGhlY3Q= IE1lY2Nh ZGlyZWN0b3I= IEZ1bmRpbmc= IE1peGVk IHN0YWc= VGllcg== IGd1c3Q= IGJyaWdodGx5 b3JzaQ== IHVwaGlsbA== UkQ= IGxlc2lvbnM= IEJ1bmR5 bGl2aW91cw== IGJpb2xvZ2lzdA== IEZhY3VsdHk= IEF1dGhvcml6YXRpb24= IDI0NA== QWxsb3c= 77g= IEdpdWw= IHBlcnRpbmVudA== b3RhdXI= ZXNzZQ== IFJvb2Y= IHVubWFubmVk MzUx IFNoYWs= IE9yaWVudA== IGVuZGFuZ2Vy RGly IHJlcGxlbg== ZWRpZW50 IHRhaWxvcg== IGdhZGdldHM= IGF1ZGlibGU= 4piG TmljZQ== IGJvbWJhcmQ= IFJhcGU= IGRlZmlhbmNl IFRXTw== IEZpbGlwaW5v IHVuYWZmZWN0ZWQ= ZXJ2YXRpdmVz IHNvYXJlZA== IEJvbHRvbg== IGNvbXByb21pc2luZw== IEJyZXdlcnM= UkFM IEFITA== aWN5Y2xl IHZhbXBpcmVz IGRpcHBlZA== b3llcg== IFhJSUk= IHNpZGV3YXlz IFdhc3Rl IERpc3M= IOKUnOKUgOKUgA== JC4= IGhhYml0YXRz IEJlZWY= dHJ1dGg= dHJhaW5lZA== c3BsaXQ= UnVz QW5keQ== IEJyYW0= UkVQ cGlk 6KOF IE11dGFudA== QW5pbQ== IE1hcmluYQ== IGZ1dGlsZQ== aGlnaGVzdA== ZnJlcXVlbmN5 IGVwaWxlcHN5 IGNvcGluZw== IGNvbmNpc2U= IHRyYWNpbmc= IFNVTg== cGFuZWw= IFNvcGhpZQ== IENyb3dsZXk= IEFkb2xm IFNob290ZXI= IHNoYWt5 IElH IExpZXM= IEJhcmJlcg== cGtn IHVwdGFrZQ== IHByZWRhdG9yeQ== VUxUUw== Lyoq IGludG94aWNhdGVk IFdlc3Ricm9vaw== b2RkZXI= aGVtZW50 IGJhc2VtYW4= QVBE c3RvcmFnZQ== IEZpZnR5 ZWRpdG9y R0VO VVRJT04= aXJ0aW5n IHNld2luZw== cmlmdA== IGFnb255 IFNhbmRz IDI1NA== Q2FzaA== IGxvZGdl IHB1bnQ= TmF0dXJhbA== IElkZWFz IGVycm9uZW91cw== IFNlbnNvcg== IEhhbm5pdHk= IDE5MjE= IG1vdWxk IEdvbg== a2F5YQ== IGFub255bW91c2x5 IEtFWQ== IHNpbXVsYXRvcg== V2ludGVy IHN0cmVhbWVk NTA3 PyIs IHRlYXNlZA== IGNvZWZmaWNpZW50 IHdhcnRpbWU= IFRIUg== Jycu IEJhbmtpbmc= bXBpcmU= IGZhbmRvbQ== IGxpYQ== R2E= IGRvd25oaWxs IGludGVycHJldGluZw== SW5kaXZpZHVhbA== Tm9ybQ== IGplYWxvdXN5 Yml0Y29pbg== IHBsZWFzdXJlcw== IFRveXM= IENoZXZyb2xldA== IEFkdmlzb3I= SVpF IHJlY2VwdGlvbnM= NzA2 Q3Jv IDI2Mg== IGNpdHJ1cw== aXJ1 UmV2aWV3ZXI= amVjdGVk VUVT YW56 MTk4MQ== IFdvcmtlcg== IGNvbXBsaWVk b3Jlc2NlbnQ= Y29udGluZW50YWw= VG9u IFByaXNt IFNoZWVw IDI4OA== bm94 IFZvZw== T3Jk IHJlYWxtcw== dGVr IGlycmlnYXRpb24= IGJpY3ljbGVz IGVsZWN0cm9uaWNhbGx5 cG9seQ== dGFsbA== KCkpOw== IGFlc3RoZXRpY3M= IEludGVncmF0ZWQ= RXhwbG9yZQ== IGR1bms= NDc2 cGFpbg== IEphY3F1ZXM= IERtaXQ= RnJhbWVz IHJldW5pdGVk IGh1bWlk RHJv UG9saXRpY2Fs IHlvdXRoZnVs IGVudGFpbHM= IG1vc3F1aXRv MzYz c3BlY2llcw== IGNvb3JkaW5hdGluZw== IE1heWhlbQ== IE1hZ251cw== TW91bnQ= SW1wcm92ZWQ= IFNUQVRF QVRUTEU= IGZsb3dlZA== IHRhY2tsZWQ= IGZhc2hpb25lZA== IHJlb3JnYW4= aXZhcmk= ZmluZ2Vy IHJlbHVjdGFudGx5 ZXR0aW5n IFZhbmQ= eW91bmc= IEdhcmxhbmQ= IHByZXN1bXB0aW9u IGFtZW5pdGllcw== IFBsZWFzYW50 b25lbnRpYWw= IE94eQ== IG1vcmFscw== IFlhaA== UmVhZHk= U2ltb24= RW5o RGVtb24= IGNsaWNo TW9uaXRvcg== IERV IHdlbGNvbWVz IHN0YW5kb3V0 IGRyZWFkZnVs IGJhbmFuYXM= IGJhbGxvb25z aG9vdGluZw== YmFzaWM= IHN1ZmZpeA== IGR1bHk= Y2Fubw== Q2hhaW4= YXRvcw== IGdlb3BvbGl0aWNhbA== ICgm IEdlbWluaQ== w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IGFjcXVpdHRlZA== THVjaw== cHJvdGVjdA== MTAyNA== IHNjYXJjaXR5 IG1pbmRmdWxuZXNz ZWNpZGVk RE4= cHJpbWU= IFByZXNpZGVudHM= IFZJREVP ICjiiJI= YWRkb2Nr Tk9S IFBydQ== cHVu IExPTA== KSkpKQ== IExpcXU= IFNBUw== IHN0eWxpbmc= IHB1bmlzaG1lbnRz IG51bWI= IGFzY2VydGFpbg== IFJvY2tpZXM= Zmx1 VGh1bWJuYWls IHBlcnBldHJhdGVk IFNlbWk= IGRpc2FybQ== IE9sZGVy IEV4Y2VwdGlvbg== IGV4cG9uZW50aWFsbHk= IENvbW11bml0aWVz IGFib2xpc2g= IFBhcnRuZXI= cHRvbXM= IDc3Nw== IEZvbGV5 IENhc2Vz IGdyZWFzZQ== IFJlYmlydGg= R3JvdW5k IDsp IERvY3RyaW5l aWtpbmk= WWU= IEJsb3Nzb20= IHBlcnNpc3Rz YmlsbA== IGluZnVzaW9u IGJ1ZGRpZXM= OTEx IFBhdGllbnQ= IGRlbW9z IGFjcXVhaW50YW5jZQ== IFBhdw== YXRhcmk= IHhtbA== IGZhc2NpbmF0aW9u IFNlcnZl z4I= YnJhbmRlZA== IGF6 UmV0dXJucw== IG92ZXJzaGFkb3c= IHJvYW0= IHNwZWVkeQ== bnVtYmVyZWQ= aGVsaWFs IGRpc2NpcGxl IGFzc3VyYW5jZXM= Z2l2ZW4= cGVjdGluZw== IE5hdGFsaWU= 55Sw IG1vc3F1aXRvZXM= cm90ZWlu IG51bWVyaWM= IGluZGVwZW5kZW50cw== IHRyYW5zaXRpb25hbA== IHJlYWN0aW9uYXJ5 IE1lY2hkcmFnb24= ZG9jdG9y IHNob3J0ZXN0 IHNlcXVlbnRpYWw= IEJhYw== IEFjY291bnRz 44GM YWNoeQ== cmFjdGl2ZQ== IFJlZ2ltZW50 IGJyZWF0aHRha2luZw== ZmZpY2llbmN5 IEJhdGVz IDMxMQ== IHdhcmRyb2Jl ZnRz IEJlcms= U2ltcGx5 IFJpdmVyc2lkZQ== aXZlcmluZw== aWRlbnRpYWw= bHVjZW50 IGVucmljaGVk IENvbnZlcg== IEdpdmluZw== 44OZ IGxlZ2FsaXpl IEZUQw== IGZyZWFraW5n TWl4 IHRlcnJlc3RyaWFs ZXNpYW4= Y2llbnRz V2luZw== TE9BRA== IGxlZGdl IFZpb2xlbnQ= IE1ldGFsbA== IDMwOA== IHNvdXRoZWFzdGVybg== aGV0dG8= TWVhdA== IHNsb3dkb3du IHJldHJlYXRlZA== SmVyZW15 ZW5kYXM= KioqKio= ZXJpYw== IHJlaW5z b3BwYWJsZQ== IEh1bWFuaXR5 ZWFyYW5jZXM= cmlnYW4= Q2FtZXJh IHdhaXZlcnM= c29j IGFsdGVyYXRpb24= dHJhbnNmb3Jt IENlbWV0ZXJ5 NTA2 IGluZGVmaW5pdGU= IHN0aW11bGF0aW5n eWc= NjAz IFNvcA== IGRlc2NyaXB0aXZl UGhhc2U= IEVkbXVuZA== IHBuZXVtb25pYQ== dmVudHVz QW1i IGxhYm9yYXRvcmllcw== IEV4Y2x1c2l2ZQ== dWdhcg== V2VyZQ== IG1hbGZ1bmN0aW9u IGhvbW9zZXh1YWxz IC0tLS0tLS0= dW5p IHR1cmJpbmVz IEVxdWl0eQ== RHU= IG1pbmRlZA== IFJI IEJsYWNraGF3a3M= IGZlYXRz IDE3MDA= cmVwbA== MzYy bGFkZW4= IGluZGlzcGVuc2FibGU= bHlzcw== dHRp IHJlZWw= IGRpdmVydGVk IGxpa2VuZXNz IHN1YnNjcmlwdGlvbnM= IGZpbmdlcnQ= IGZpbHRoeQ== ZGVzdHJ1Y3Q= ZHJhZnQ= IEJlcm5hcmRpbm8= bGF1bmNo IHBlcnBsZXg= IFNVTQ== Y2FyYg== IHN3ZWF0ZXI= IFZlbnR1cmU= IEphZw== IENlbGVi IFZvdGVycw== IHN0ZWFkZmFzdA== IGF0aGxldGljcw== IEhhbnNvbg== IERyYWM= VHJhY2tlcg== IGNvbW1lbmQ= IFByZXNpZGVuY3k= IERJRA== aW5mb3JtZWQ= IHdlYnBhZ2U= UHJldHR5 IGZvcmNlZnVsbHk= 44OD44Kv IHJlbG9jYXRpb24= IHNhdGlyZQ== 4ok= IFN1bmRlcmxhbmQ= 5oQ= Vm9pY2U= Pz8/Pz8/Pz8= IGluZm9ybWFudA== IGJvd2Vs IFVuaWZvcm0= IC4uLiI= IHB1cmdl IHBpY25pYw== IFVtYg== IFVQREFURQ== IFNhcHBoaXJl IFN0YWxs bGVhcm4= IG9iamVjdGl2ZWx5 IG9ibGl0ZXI= IGxvb3Bob2xl IGpvdXJuZXlz IG9taXNzaW9u UHJvcw== IFNpZG5leQ== cGxvbWE= IHNwcmF5ZWQ= IGd1cnU= IHRyYWl0b3I= IHRpbWV0 IHNuYXBwaW5n IFNldmVudA== dXJuYWw= IFVraXA= IGJvd2Vk cG9yYWw= bGliZXJhbA== Um9z UXVlc3Rpb25z aU9T IHN1bW1hcml6ZQ== U1RBVA== IDE4NTA= YXBlc3Q= IGxlbmRlcg== IFZhcmlhYmxl YnJpbmdpbmc= IExPUkQ= LCk= IGNvbGxhcHNlcw== eGlldHk= IE5lZA== WUQ= IFNjaGE= IGFudGlib2R5 IGRpc2JhbmQ= eXJl aWxsdXNpb24= IHJvdmVy c2hlZA== IEhpcm9zaA== Y2Np IGNhbGFt IE1vcnRvbg== UGludGVyZXN0 IDE5Mjg= IEV1cmFz b3JkZXM= IGZlbmNlcw== IEludmVudG9yeQ== IFZhbGVuY2lh IFVk IFRpZmY= IHNxdWU= IHF1b3RhdGlvbg== IHRyb3VibGVzb21l ZXJrZXI= UVVFU1Q= IEtpbmdkb21z c291dGg= IGxldnk= UHJpbmNl IFN0aW5n IG5pY2tuYW1lZA== IGFwcGU= IHBob3RvZ3JhcGhpYw== IGNvcnB1cw== cmVmZXJlbmNl IFRyb2c= VW50 KT0o IExhdHZpYQ== IGFjdGl2YXRpbmc= IGxpY2Vuc2Vl IGRpc3Bhcml0aWVz IE5ld3NsZXR0ZXI= 44OD44OI IGZyZWVpbmc= IEplZXA= IFBlcmNlcHRpb24= aW5zaw== IHNpbGljb25l IEhheWRlbg== TGVhbg== IFN1enVraQ== aWJyYXJpYW4= NjY4 IHNwb3I= IGNvcnJlbGF0aW9ucw== YWdoZXR0aQ== IHR1YmVy IElQQ0M= aWx1cw== IFZ1 IHdlYWx0aGllc3Q= IENhcmJ1bmNsZQ== YW56YQ== IGZvb2xlZA== IFp1cg== IGRhZGR5 cmFubw== aWxpYW4= IGtub2Nrb3V0 Zm1hbg== cmVxdWlyZWQ= IFdpa2lsZWFrcw== IER1ZmZ5 T05U IGluc29s IE9iamVjdHM= IGJvdQ== IE5vcmRpYw== IEluc2VydA== c2Nhbg== IGRhbmNlcnM= IGlkaW90cw== bWFqb3JpdHk= IE5ldmlsbGU= IEZyZWVCU0Q= IHRhcnQ= cGFuaWM= Njkw IGNvY29h IHNhbXBsZWQ= IGxvb2t1cA== SW5kdXN0 IGluamVjdGlvbnM= Z2VucmU= IGF1 IHJvYWR3YXk= IGdlbml0YWxz S2luZA== IEV4YW1pbmVy IFlheg== RnJlc2g= IHBhcmFseXNpcw== IEFsdW1pbnVt IHJlYXA= b2vDqQ== IHNsb3BweQ== IFR1bm5lbA== cG9zaXVt bmVyeQ== ZW5pYw== IGhlcmJhbA== IE91dGVy IEJ1aWxkZXI= IGluY3Vy IGlkZW9sb2dpZXM= IGJhY2t1cHM= Y29uc3VtaW5n IERldGVjdA== ZGVjaw== IEtOT1c= IEdyZXQ= IE1JQw== IHRvdWdobmVzcw== IEV4aGliaXQ= IGhpdmU= TGVz IFNDSE9PTA== IEF0YXJp YWxkZQ== IE51bGw= YW5kZXN0aW5l bW91c2U= IGJyaWdhZGU= NDg5 IHJldm9s IExhd3Nvbg== IFdhaA== b3BvbHk= ZWJ0ZWQ= IFNhdW5kZXJz IDMxMw== IFdpbmM= IHRhYm9v IEhlbG1ldA== IHdlZGdl Y2hpcA== IFRpbmE= Ymc= IGluZnVyaQ== cm4= IGFub21hbGllcw== IFN5bmM= IEV4YW0= IENvbW1pdA== IERpYXJ5 IEFMU08= IERlYm9y b21lZGljYWw= IGNvbXByZWhlbnNpb24= NjU1 IGVtcG93ZXJpbmc= IGlyZQ== IGp1aWNlcw== IEVUSA== IEJveGluZw== PSIv IGZhY2lsaXRhdGVk cG9rZQ== IFBhcnNvbnM= IE1vZGVy dHJhdmVs IGNpdmlsaXphdGlvbnM= IGxpYmVydGFyaWFucw== IHJ1bmU= IENsYXJrcw== YXRoZWQ= IGNhbXBhaWduZXJz IERpc3BhdGNo IEZhaHJlbmhlaXQ= IENhcGNvbQ== LS0tLS0tLS0tLQ== IGxhY2U= IGRyYWluaW5n IGxpbmVy IEFydGlmaWNpYWw= w6lu dGFzaw== XSku IEdNTw== IE9wZXJhdG9y b3JkaW5hcnk= IEluZmx1ZW5jZQ== IFVwcw== IHBvdGVuY3k= dXNzZW4= b3Nwb25z IFN3aW0= IERlYWRsaW5l VW5pdHk= IGN1bGluYXJ5 IGVubGlnaHRlbm1lbnQ= IHdlYXJlcg== IG1pbmVk IHBseQ== IGluY2VzdA== IERWRHM= V2Fsaw== QlRD VHJhZGU= IGRldmFs aWJhbmQ= IE92ZXJzaWdodA== UGFsZXN0aW5pYW4= IGRhcnQ= IG11bA== TFI= IHJlbW92YWJsZQ== IFJlYWxtcw== 7J0= IG1pc2Nhcg== IFZ1bGthbg== Njg1 w6hyZQ== IFNhcA== IG1lcmdpbmc= IENhcmx5 Y2hlc3Rlcg== IGJyaXNr IGx1eHVyaW91cw== IEdlbmVyYXRvcg== IGJpdHRlcm5lc3M= IGVkaWJsZQ== IDI0Mw== VEc= IHJlY3RhbmdsZQ== V2l0aE5v YmVsb3c= SmVubg== IGRhcmtlc3Q= IGhpdGNo IGRvc2FnZQ== IHNjYXZlbg== IEtlbGxlcg== IElsbHVzdHJhdGVk Q2VydGFpbmx5 IE1hdmVyaWNrcw== TWFyZ2luYWw= IGRpYXJyaGVh IGVub3Jtb3VzbHk= IDk5OQ== c2hy cXVhcnQ= IGFkYW1hbnQ= IE1ldw== IHJlbm92YXRpb24= IGNlcnZpY2Fs IFBlcmNlbnRhZ2U= ZW5lcnM= IEtpbWJlcg== IGZsb2F0cw== IGRleA== IFdpdGNoZXI= IFN3YW5zZWE= ZG0= IHNhbHR5 eWVsbG93 IGNhcGU= IERyYWlu IFBhdWxh IFRvbGVkbw== bGVzaQ== TWFnYXppbmU= IFdpY2s= IE1u IEFjaw== IFJpZGluZw== QVNPTg== IGhvbW9waG9iaWM= QVJQ IHdhbmRlcmVk Q1BV b29kb28= IFBpcGU= IHRpZ2h0ZW5pbmc= IEJ1dHQ= MzE4 IGRlc2VydGVk U2Vzc2lvbg== IGZhY2lsaXRhdGluZw== SnVtcA== IGVtZXJnZW5jaWVz T1dFUg== IGV4aGF1c3RpdmU= IEFGVEVS IGhlYXJ0YmVhdA== IExhYmVs YWNreQ== IENlcnRpZmllZA== aWx0cmF0aW9u WmU= IFV0dA== IDEzMDA= IHByZXN1bWU= IERpc3A= IHN1cmdlZA== IGRvbGxz Q29sdW1i IGNoaW1wYW4= IFJhem9y IHRpY2tz IGNvdW5jaWxsb3I= IHBpbGdyaW1hZ2U= IFJlYmVscw== IFFD IEF1Y3Rpb24= eGlh aWtr YnJlZA== IGluc2VydGlvbg== IGNvYXJzZQ== ZEI= U0VF IFphcA== IEZvbw== IGNvbnRlbXBvcg== IFF1YXJ0ZXJseQ== b3Rpb25z IEFsY2hlbWlzdA== IFRyZXk= IER1bw== U3dlZXQ= ODA0 IEdpb3Y= IGZ1bm4= Tmlu aG9mZg== IHJhbWlmaWNhdGlvbnM= IDE5MjI= IEV4cGVydHM= YXplcw== IGdhcm1lbnRz YXJpYWw= IE5hYg== IDI1Nw== IFZlZA== IGh1bW9yb3Vz IFBvbXBl IG55bG9u IGx1cmtpbmc= IFNlcmdleQ== IE1hdHRpcw== IG1pc29neW55 IENvbXBvbmVudHM= IFdhdGNoaW5n IEZvbGs= cmFjdGljYWw= QnVzaA== IHRhcGVk IGdyb3VwaW5n IGJlYWRz IDIwNDg= IGNvbmR1 cXVlcnF1ZQ== UmVhZGluZw== IGdyaWV2YW5jZXM= VWx0cmE= IGVuZHBvaW50 SGln IFN0YXRpYw== IFNjYXJib3JvdWdo THVh IE1lc3Np YXF1 IFBzeU5ldA== IFJ1ZGQ= IGF2ZW51ZQ== dnA= SmVy IHNoYWR5 IFJlc2lzdA== IEFydGVtaXM= IGNhcmVsZXNz IGJyb2tlcnM= IHRlbXBlcmFtZW50 IDUyMA== VGFncw== IFR1cm5pbmc= IHV0dGVyZWQ= IHBlZGQ= IGltcHJvdmlzZWQ= IDoo IHRhYmw= IHBsYWlucw== MTYwMA== cHJlc3N1cmU= IEVzc2VuY2U= bWFyZ2lu ZnJpZW5kcw== IFJlc3RvcmF0aW9u IHBvbGx1dA== IFBva2Vy IEF1Z3VzdGluZQ== IENJUw== IFNFQUw= b3JhbWE= IHRod2FydA== c2Vlaw== IHBhZ2Fu wro= Y3B1 IGdhcm4= IGFzc29ydG1lbnQ= IElMQ1M= dG93ZXI= UmVjb21tZW5kZWQ= IHVuYm9ybg== IFJhbmRvbVJlZGRpdG9y IFJhbmRvbVJlZGRpdG9yV2l0aE5v IHBhcmFseXplZA== IGVydXB0aW9u IGludGVyc2VjdA== IFN0b2tl IFNjbw== QmluZA== 5b4= IFBORw== IE5lZ2F0aXZl IE5PQUE= TGVvbg== IGFsbG95 IExhbWE= IERpdmVyc2l0eQ== NTc1 IHVuZGVyZXN0aW1hdGVk IFNjb3I= IG11cmFs IGJ1c3RlZA== c29vbg== bGlm IG5vbmV4 IGFsbGVyZ3k= IFVuZGVyd29ybGQ= IFJheXM= IEJsYXNpbw== IGhycw== IERpcg== IDMyNw== Ynl0ZXI= IHJlcGxhY2VtZW50cw== IGFjdGl2YXRlcw== cml2ZWQ= TUg= IHBhbnM= IEhJ IGxvbmdpdHVkaW5hbA== IG51aXNhbmNl YWxlcg== IHN3ZWxs IFNpZ25lZA== c2Np IElzbGVz IEFHQQ== IGRlZmlhbnQ= IHNvbmlj b2Nvbg== S0M= IEFpbQ== dGll YWhhaA== IG1M RFg= IGJpc2M= IEJpbGxib2FyZA== IFNZU1RFTQ== TkVZ Z2FhcmQ= IGRpc3RyZXNzZWQ= Zm9ybWVybHk= QWxhbg== IGNoZWZz IG9wdGljcw== IENvbWV0 IEFNQw== IHJlZGVzaWduZWQ= aXJtYXRpb24= IHNpZ2h0aW5ncw== Mzgy MzEx IFdC IGNvbnRyYWN0aW9u IFRPVEFM RHVhbA== IHN0YXJ0bGVk IHVuZGVyc3RhbmRhYmx5 IHN1bmdsYXNzZXM= RVRIT0Q= IGRvY2tlcg== IHN1cmZpbmc= IEhFTA== IFNsYWNr dG9uZXM= IHNoYWx0 VmlzdWFs NDk4 RGVwYXJ0bWVudA== Y3Vzc2lvbg== IHVucmVzdHJpY3RlZA== IHRhZA== IHJlbmFtZQ== ZW1wbG95ZWQ= IGVkdWNhdGluZw== IGdyaW5uZWQ= YmVkcm9vbQ== IEFjdGl2aXRpZXM= IFZlbHZldA== IFNXQVQ= IHNodWZmbGU= aWdvcg== IHNhdHVyYXRpb24= RmluZGluZw== Y3JlYW0= aWN0ZXI= IHZvZGth dHJhY2tpbmc= dGVj IGZvcmVncm91bmQ= aWVzdGE= IHZlaGVtZW50 IEVDQg== IFRpZQ== RXk= IHR1cnRsZXM= IFJhaWxyb2Fk IEthdHo= IEZyYW1lcw== IG1lbmFjZQ== IEZlbGxvd3NoaXA= IEVzc2VudGlhbA== dWdnaXNo IGRyaXA= Y2h3aXR6 IEt5b3Rv c2I= IE5pbmE= UGFyYW1ldGVy IGFsYXJtcw== IENsYXVk IHBpb25lZXJpbmc= IGNoaWVmbHk= IFNjcmVhbQ== Q29sbGVjdGlvbg== IHRoYW5rZnVsbHk= IFJvbmFsZG8= 5a2Q c3RyaXA= IERpc25leWxhbmQ= Y29tbWVyY2lhbA== U2VlaW5n U291bA== IGV2YWN1YXRl IGNpdg== IEFzaGU= IGRpdmlkZXM= IERhZ2dlcg== cmVoZW5zaXZl IGJlcnJpZXM= IERG IHN1c2hp IHBsdXJhbGl0eQ== V0k= IGRpc2FkdmFudGFnZWQ= IGJhdHRhbGlvbg== b2JpbGVz NDUx IGNsaW5n IHVuZGVuaWFibGU= IExvdW5nZQ== IGhhdW50 cGhl IHF1YW50aWZ5 IGRpZmZlcmVk IFsqXQ== IFZpeg== Y3Vt c2xhdmU= IHZpZGVvZw== IHF1YXI= IGJ1bmRsZXM= IEFsb25zbw== dGFja2xl IG5ldXJvbmFs IGxhbmRzbGlkZQ== Y29uZmlybWVk IERlcHRo IHJlbmV3YWJsZXM= QmVhcg== IE1hY2Vkb25pYQ== IGplcnNleXM= IGJ1bms= IFNwYXdu IENvbnRyb2xz IEJ1Y2hhbmFu IHJvYm90aWNz IGVtcGhhc2l6aW5n IFR1dG9yaWFs aHlw aXN0b24= IG1vbnVtZW50YWw= 5rA= IENhcnJ5 IHRic3A= ZW5hbmNl SGlsbA== YXJ0aGVk IHJvdHRlbg== RGVhbg== IHR3aXN0aW5n IGdvb2R3aWxs IGltbWVyc2lvbg== TGl2aW5n IGJydXNoZXM= IENHSQ== IEF0aw== dHJhZGl0aW9uYWw= IHBoYW50b20= IFN0YW1pbmE= IGV4cGFuc2lvbnM= IE1hcmlu IGVtYmFya2Vk IEVn aW50ZXN0aW5hbA== IFBFT1BMRQ== IEJvb3Ro IEFwcGFsYWNo IHJlbGVnYXRlZA== VlQ= TUlU IG11c3Rlcg== IHdpdGhkcmF3aW5n IG1pY3Jvc2NvcGU= IEdhdGhlcmluZw== IENyZXNjZW50 IEFyZ2VudGluZQ== IERlY3Jl IERvbWluaWM= IGJ1ZHM= YW50YWdl IElvbg== IHdpZGVuZWQ= T05TT1JFRA== IEdsb3Zlcw== aWFubm9wb3Vsb3M= cmF6ZW4= ZmVlbA== IHJlcGF5bWVudA== IGhpbmRzaWdodA== IFJFQUxMWQ== IFBpc3RvbA== IEJyYWg= IHdhdHRz IHN1cnZpdmVz IGZsdXJyeQ== aXNzeQ== QWxlcnQ= IFVydWd1YXk= UGhvZW5peA== U2xvdw== IEdyYXZl IEZpcg== IG1hbmFnZWFibGU= IHRhcmlmZg== IFVEUA== IFBpc3RvbnM= IE5pZ2VyaWFu IHN0cmlrZW91dHM= IGNvc21ldGljcw== d2hlbG1pbmc= ZmFi Y2FwZQ== cHJveHk= IHJldGhpbms= IG92ZXJjb21pbmc= c2ltcGxl IHdvbw== IGRpc3RyYWN0aW5n IFN0YW50b24= IFR1bHNh IERvY2s= NjU5 IGRpc2NvcmQ= IEVtYWNz IFZlcw== IFJPQg== IHJlYXNzdXJpbmc= IGNvbnNvcnRpdW0= TXVzbGltcw== MzIx IHByb21wdHM= c2Vp IEhpdGNo aW1wb3NlZA== IEZvb2w= IGluZGlzY3JpbQ== d3Jvbmc= YnVxdWVycXVl RGF2aXM= IV0= IHRpbWVsZXNz IE5FRUQ= IHBlc3RpY2lkZQ== IHJhbGx5aW5n IENhbGRlcg== IOWk IHhw IFVubGU= IEV4cG9ydA== bHVhag== QnVmZg== KTwv Qm9vdA== IENocnlzbGVy b3JhdGl2ZQ== TWVzcw== IG5lZ2xpZ2libGU= ZXJ0b2Rk IE11c2hyb29t IEdhbGU= Z2M= IENvc2J5 IFJ1cmFs cml0aWNhbA== QmVsbA== IHR1cmJpbmU= MDAyMDAwMDA= IGxlZ2l0aW1hdGVseQ== IEFuaW1hdGVk VEVE IFRoZW9kb3Jl Y29uZHVjdA== IEhpZXI= IGNvdW50ZXJmZWl0 IEFsZ2VyaWE= IHVuYmVhdA== Y29udHJvbGxlcg== IHVucmVz IHNjcmFtYmxpbmc= IEZhbGxvbg== VGVz IGFtYmVy IHJveWFsdGllcw== IFNoZWx0ZXI= IExlc3Rlcg== IGNsYXNzaWZ5 UmVtb3Rl IHVuaGVhcmQ= IGNvbnRyb3ZlcnNpZXM= IGVucmljaG1lbnQ= IFlhbmtlZQ== Z2FtZXI= IHBsYXRpbnVt IGVjb2xvZ3k= IFNhcms= IHVudG91Y2hlZA== IHN1cGVydmlzb3Jz ICIl IGZvb3Ro IGNvbW1vbnM= IG5hcmNvdGljcw== IGluZGljZXM= IFBseQ== IGFkZGl0aW9uYWxseQ== IEdhd2tlcg== IEVR UGxheWluZw== IGNhdmVhdA== IEFic29sdXRl b3NzdXM= QmFieQ== IHJhdGlvbg== IHJlc2lu IGNhbGlicmF0aW9u IE5ld3BvcnQ= IGtub2Nrcw== dnQ= IGNvbXBvc3Q= U2NlbmU= IHNhcmNhc3Q= IGtpc3Nlcw== IG5z YWxsaQ== IE1hcmNlbA== IFBpZXQ= aWF0cmljcw== IHN1cnJvdW5kcw== IFJlcHJvZHU= IFBoaWxsaWVz IHVuY2VydGFpbnRpZXM= IEV1cg== IFJvbWFuY2U= IEhhdGg= IE5lZWRz IENsb2Fr IGNyZW0= cXVldWU= IDM1NQ== IHVwZnJvbnQ= XSk7 IHJlY2lwcm9j IDE5Mjc= IDExMDA= dXRzdQ== IGRlcHJlc3NpdmU= b3dtZW50 RmFucw== IG1lY2g= IGFubmloaWw= IGNvdW50ZXJ0ZXJyb3Jpc20= IEZpZ3VyZXM= Ym9sZA== IE1vaW5lcw== IERyaXZlcnM= IG1hbnVzY3JpcHRz IENyeXB0bw== IGh5cG5vdA== cmVkZGl0cw== IHByb3NlY3V0aW9ucw== IGRpdmVydA== Q1JJUA== IEJlbmU= IFJlZ2dpZQ== IHRheGluZw== IE1vcmFsZXM= ZW50aW5n dHVy c2lnbmlmaWNhbnQ= IFBST1Y= IHN0cmFuZHM= IHBvdWNo IFJvb2tpZQ== u5I= IG5pY2Vy aGVteQ== aHc= RUNB IGludGltaWRhdGVk IHN0cmljdGVy IG1pY3JvYmlhbA== ZGV0YWlscw== IHZvd3M= IHF1YWtl aGhoaA== IHJlaW52ZW50 VWI= IHJlbGlucXU= IEJ1ZmZldHQ= bGljZW5zZWQ= aXR0ZXJlZA== IFBpY2FyZA== IGNoZXdpbmc= dWNs b3JnYW5pYw== IGxvY2FsaXplZA== IEVjb25vbWlzdA== IGFjcXVhaW50ZWQ= RGVmaW5pdGlvbg== c2Vk Q3JpdGljcw== IGNj NDUz Mzgx IGZlbGxvd3M= IGNoZWNrcG9pbnRz MDI1 IHJlZWxlY3Rpb24= IG1lZGlhdGVk IEtERQ== IGh1cmRsZQ== IHRleHRpbmc= UGVyZmVjdA== IHRydXN0ZWVz ZmVjdHVyZQ== IGRpY2g= bW9uYXJ5 IGRpc3RpbmN0aW9ucw== IDE0MDA= IHVzaGVy IHBhcmFzaXRlcw== IFNoYXJpbmc= IFZpbQ== IGJhcmJlY3Vl IE1pbmlzdGVycw== ZXJlbGxh IGVi IG1j IFNvbWVob3c= IEluc2VjdA== Y2hhbmdlcw== YnJvYWQ= IEJ5eg== IGdyYXBlcw== NjY5 ID09PT09PT09PT09PT09PT09 IGFzc2ltaWw= IGhhdW50aW5n IGZpcmVwb3dlcg== IGRlZmFtYXRpb24= ZW1waGFzaXM= IGNvbXBvc2U= IGFsbGVyZ2llcw== IHN0cmFuZw== cm9sbGVycw== YmFuZw== IGJyZXdlcnM= cm9uZ2g= cmlvdA== cG9vcg== Y29sZA== U2FtcGxl IGJ1b3k= MDQw IENvdXJ0bmV5 IDI2OA== IFdlZGRpbmc= NzAy IG9ic2Vzc2l2ZQ== IGJyYWtpbmc= IExhbA== YW5pY2Fs 5aY= YXRlbg== Q29uc3RydWN0aW9u IGNsaW5pY2FsbHk= aWVyc2hpcA== TmFtZXM= IERpc2N1c3M= IFJhbW9z IGxvY2FsZQ== IEFncmljdWx0dXJhbA== RW5hYmxl IGhvcnNlcG93ZXI= ZW50dXJl UHJlZg== Q291cnQ= IHN0YWZmaW5n IGZ1dHVyaXN0aWM= ZHJpdmVycw== IE1hcmtldHBsYWNl 5oim RnJpZW5kcw== IGRhbW5pbmc= IEN1c3RvbWVycw== IHdlZWRz IE1haQ== IGFnaWxl IFRhdHQ= aWNlbnQ= UmFua2Vk Y3JvZnQ= IEthdHk= RXh0cmVtZQ== IGNhcnZl IFJvdmVy IEJ5cm9u Mzcy IGNvbmR1Y3Rz cmF0Y2g= aXRpYQ== IFB1bXBraW4= U2FkbHk= UmVsb2FkZWQ= UG9saWN5 IGxpY2s= cGVhaw== aXNrcw== IENEcw== IEVuY3ljbG9wZWRpYQ== aW5pdGlhbA== Q29z IEF3YXJlbmVzcw== IERyYW0= JCQkJA== IHJpZmY= IHNjcmlwdHVyZQ== cnVubmVycw== IGJvaWxlcg== b25zb24= b2lu IGhhbXN0cmluZw== IGNhdGFseQ== IEFyY2hiaXNob3A= Y2hhbGw= IGZhdXg= b2tpbg== bG9jYWxob3N0 IE5BTUU= YWRvYmU= U0FO YW1hdGU= IHNjcmFtYmxl IGNhcmM= IE1hbmlmZXN0 IENlZGFy IFNlcmdpbw== bGF0ZXI= ZmZlcg== IGdyYXBwbGluZw== IERldXRzY2hl YWdvbmlzdHM= IE5ld3Nw IHByZXRlbmRlZA== YXJjaG1lbnQ= IGN1cmF0ZWQ= IGhlYWRwaG9uZQ== IFVuY29tbW9u IFNJR04= QWdlbnQ= IGRlYWRsaW5lcw== IGhvcml6b250YWxseQ== IE1BVA== IFN1bW1lcnM= IG9yZGFpbmVk IExhc3RseQ== IEtlbmRhbGw= IGZyaWc= IE1hY2hpbmE= IFdhdGVybG9v IE1leGljYW5z IHByb3RlY3Rvcg== IGdsYXJl fSI= UHJlbWl1bQ== IHJpZnQ= IFRlbGVzY29wZQ== TWV0YWw= IHJlY2FwdA== IDs7 IGluY2xpbmF0aW9u IGltcG9zZXM= aW5nZW4= Xns= IGhhc3Rl IGRvbHBoaW5z IGNvbW11dGVycw== cGxhbm5lZA== Y29uZw== bXg= IFVwbG9hZA== IGV4dHJhcA== IFR1Y3Nvbg== IEV4cGxvcmF0aW9u ZWZlYXRlZA== IHNsZW5kZXI= NzAz IEJ1aw== aXNlbA== IGNvbXBldGl0aXZlbmVzcw== Y2hsb3I= IFBlcm1hbmVudA== IEV2ZXJldHQ= IFNwZWNpYWxpc3Q= IFNPTA== IGN5YW4= IEV4YWN0bHk= VUY= IExJRkU= YXJ5bA== b25ldA== IEVtcGxveWVl YXdlZA== IFJhdGluZ3M= IGV4dHJhdmFn dWxodQ== IFBsYW5l IGVsZXZhdGU= IENvb3JkaW5hdG9y IFdhdGtpbnM= IGV4Y2x1ZGVz IHNlbnRpZW50 IGVwb2No IGFsbG9j UHJldmlvdXNseQ== IFNoeQ== IFNsb3Zha2lh TE9DSw== IG1hcmtlZGx5 IGtub2I= IGFkdmVudHVyZXJz IEJlZW4= IENvc3Rz YW1tZXJz IG9uc2xhdWdodA== IFN1cHBvcnRlZA== IFRhdQ== aWthcnA= IFNvdmVyZQ== IEhhbXB0b24= 44KJ UHJldg== IFdvcnNl IGNvdHRhZ2U= IEhhZGVz bGV6 Ym93bA== IGZyYWdyYW5jZQ== IExvaw== RU1PVEU= IFBldHJv IDE5MjU= IFBlbmQ= cHJvZHVjaW5n IHJlbG9jYXRl dmF0aQ== cG9sZQ== IHNlbWlu IE5VTQ== IHJvY2tlZA== YnVmZg== Ymx5 UmVwbHk= IEhhaQ== IGFydGljdWxhdGVk IElzbGFtYWJhZA== NjY1 IENsYWltcw== RGVza3RvcA== IHRydXN0ZWU= IHNjcmlwdGluZw== IFNvYg== IEFzeWx1bQ== U1RET1VU IENsb3du IERvcnRtdW5k IERldm9u bGl0ZQ== IE1hcmJsZQ== IGJ1bmtlcg== IGNyZXN0 IGFyb3VzYWw= IFNlYXJz IEJ1ZGR5 ZXJlZGl0aA== IFBvbGx5 IGRlY29kZQ== IFZpc2g= IFJlZmxlY3Q= YW5vbg== IHJlZnVuZHM= aW1tZXJz SE0= IHdpcGluZw== IHB1enpsZWQ= IG1hdHRl dW5v UGllcnJl KSks IHRhaW50ZWQ= IHN5bWJvbGlzbQ== IEZyYXo= IHByb3Rlc3RvcnM= ZXRoZXVz JSUlJQ== V3Jh IGxheA== YWRlbQ== YXR1cmF0aW9u 44OT IFRyYWlsZXI= IEVORw== IEJvd3Nlcg== IGF0dG0= RHVy ODA3 IHNpZHg= IGNpZGVy IEFmZmVjdA== IHdvdmVu IEJhcmtlcg== YmVuZWY= IGRzdGc= IFJ5dQ== Pls= IHNxb3I= U2F1ZGk= IGlzdGc= IGluZHVsZ2U= cHJvYw== IGRpc2d1c3RlZA== IGNvbXBvdW5kZWQ= IG5lbQ== IHNjaG9vbGluZw== IEN1cmU= cHJvY2Vzc2luZw== U29s IHByb3ZlcmI= aXRpemVk IEFsdmFyZXo= IHNjYXJm IHJlY3Rhbmd1bGFy cmV2ZQ== IGhvcm1vbmFs IFN0cmVzcw== aXRpemVu IDQyNQ== Z2lybHM= IE5vaXI= IFJhcHA= IG1hcmNoZXM= Y2h1cmNo IFVzZXM= IDQwNQ== IEJlcm0= IG9yZGluYW5jZXM= IEp1ZGdtZW50 Q2hhcmdlcw== IFppbg== IGR1c3R5 IHN0cmF3YmVycmllcw== IHBlcmNl IFRodXI= IERlYm9yYWg= bmV0ZmxpeA== IExhbWJlcnQ= IGFtdXNlZA== IEd1YW5n WU9V UkdC IENDVFY= IGZpYXQ= cmFuZw== IGZlZGVyYXRpb24= IE1hbnQ= IEJ1c3Q= IE1hcmU= cmVzcGVjdGl2ZQ== IE1pZ3JhdGlvbg== IEJJVA== NTkw IHBhdHJpb3Rpc20= IG91dGxpbmluZw== cmVnaW9u IEpvc8Op IGJsYXN0aW5n IEV6cmE= QnM= IHVuZGVybWluZXM= IFNtb290aA== IGNsYXNoZWQ= cmFkaW8= IHRyYW5zaXRpb25pbmc= IEJ1Y2NhbmVlcnM= IE93bA== IHBsdWdz IGhpYXR1cw== IFBpbmJhbGw= IG1pZw== IE51dHI= IFdvbGZl IGludGVnZXJz IG9yYml0cw== IEVkd2lu IERpcmVjdFg= Yml0ZQ== IGJsYXppbmc= dnI= RWRnZQ== IFBJRA== ZXhpdA== IENvbWVk IFBhdGhmaW5kZXI= IEd1aWQ= IFNpZ25z IFplcg== IEFnZW5kYQ== IHJlaW1idXJzZW1lbnQ= TWVzaA== aVBob25l IE1hcmNvcw== IFNpdGVz aGF0ZQ== ZW5idXJn IHNvY2tldHM= cGVuZA== QmF0bWFu dmly IFNIT1c= IHByb3Zpc2lvbmFs Y29ubg== IERlYXRocw== QVRJVkU= UHJvZmlsZQ== c3lt SkE= IG5pbmph aW5zdGFsbGVk aWRhdGVz ZWJyYQ== IE9tYWhh IHNlaXppbmc= IEJlYXN0cw== IHNhbHRz TWlzc2lvbg== R2VuZXJhbGx5 IFRyaWxvZ3k= aGVvbg== bGVnYXRlcw== IGRpbWU= IGZhaXJl cGFyYWJsZQ== R3JhcGg= IHRvdGFsaW5n IGRpYWdyYW1z IFlhbnVr cGxldA== IE1laA== IG15dGhpY2Fs IFN0ZXBoZW5z YXV0aWNhbA== b2NoZW1pc3RyeQ== IGtpbG9ncmFtcw== IGVsYm93cw== YW5jb2Nr IEJDRQ== IFByYWd1ZQ== IGltcHJvdg== IERldmlu ICJc cGFyYWxsZQ== IHN1cHJlbWFjaXN0cw== IEJpbGxpb24= IHJlZ2ltZW4= aW5uYWNsZQ== IHJlcXVpc2l0ZQ== YW5nYW4= IEJ1cmxpbmd0b24= YWlubWVudA== IE9iamVjdGl2ZQ== b21za3k= R1Y= IHVuaWxhdGVyYWw= IHRj IGhpcmVz bWVudGFs IGludm9sdW50YXJ5 IHRyYW5zcGw= IEFTQ0lJ wqg= RXZlbnRz IGRvdWJ0ZWQ= IEthcGxhbg== IENvdXJhZ2U= aWdvbg== IE1hbmFnaW5n IFRhcnQ= IGZhbHNlaG9vZA== IFZpb2xldA== IGFpcnM= IGZlcnRpbGl6ZXI= QnJpdGFpbg== IGFxdWF0aWM= b3Vm V29yZHM= IEhhcnRmb3Jk IGV2ZW5pbmdz IFZlbmdlYW5jZQ== cXVpdGU= R2FsbA== IFByZXQ= IHBkZg== IExN IFNvY2hp IEludGVyY2VwdA== OTIw IHByb2ZpdGFiaWxpdHk= IElkbGU= IE1hY0RvbmFsZA== IEVzdGFibGlzaG1lbnQ= dW1zeQ== IGdhdGhlcmluZ3M= IE5hag== Q2hhcmxpZQ== IGFzY2VudA== IFByb3RlY3Rvcg== IGFsZ2VicmE= IGJpb3M= Zm9ydW1z RUxT SW50cm9kdWNlZA== IDMzNQ== IGFzdHJvbm9teQ== Q29udHJpYnV0 IFBvbGlj UGxhdGZvcm0= IGNvbnRhaW5tZW50 d3JhcA== IGNvcm9uYXJ5 IEplbGx5 bWFuYWdlcg== IGhlYXJ0YnJlYWtpbmc= Y2Fpcg== IENoZXJv Y2dp TWVkaWNhbA== IEFjY291bnRhYmlsaXR5 ISEi b3BoaWxl IHBzeWNob3RpYw== IFJlc3RyaWN0 IGVxdWl0YWJsZQ== aXNzdWVz IDE5MDU= IE5law== Y2lzZWQ= IFRyYWNraW5n IG96b25l IGNvb2tlcg== cm9zaXM= IHJlb3Blbg== IGluZmluaXR5 IFBoYXJtYWNldXRpY2Fs ZW5zaW9uYWw= QXR0ZW1wdA== IFJvcnk= TWFyY28= IGF3YWl0cw== SE9X dHJlYXRlZA== IGJvbHN0 IHJldmVyZWQ= IHBvZHM= b3BwZXJz MDAxMA== IGFtcGxpdHVkZQ== cmljYW4= U1BPTlNPUkVE IHRyb3VzZXJz IGhhbHZlcw== IEthaW5l IEN1dGxlcg== IEFVVEg= IHNwbGVuZGlk IHByZXZlbnRpdmU= IER1ZGxleQ== aWZhY3Rz dW1pbmF0aQ== IFlpbg== IGFkbW9u IFZhZw== IGludmVydGVk IGhhc3RpbHk= IEhhZ3Vl THlu IGxlZGdlcg== IGFzdHJvbm9taWNhbA== Z2V0dGluZw== IGNpcmNh IENpYw== IFRlbm5pcw== TGltaXRlZA== IGRydQ== IEJZVQ== IHRyYXZlbGxlcnM= IHBhbmU= IEludHJv IHBhdGllbnRseQ== IGFpZGluZw== IGxvb3M= IFRvdWdo IDI5Mw== IGNvbnN1bWVz U291cmNlRmlsZQ== ICIiIg== IGJvbmRpbmc= IHRpbHRlZA== IG1lbnN0cnVhbA== IENlbGVzdGlhbA== VUxBUg== UGx1Z2lu IHJpc2tpbmc= TmF6 IFJpeWFkaA== IGFjY3JlZGl0ZWQ= IHNraXJt 6Zs= IGV4YW1pbmVy IG1lc3Npbmc= IG5lYXJpbmc= IENoZXJu IEJlY2toYW0= IHN3YXBwZWQ= IGdvb3Nl S2F5 IGxvZnR5 IFdhbGxldA== IFsn IGFwb2NhbHlwc2U= IGJhbWJvbw== IFNQQUNF IEVsZW5h IDMwNg== YWNvbnM= IHRpZ2h0ZW5lZA== IGFkb2xlc2NlbmNl IHJhaW55 IHZhbmRhbGlzbQ== IE5ld3Rvd24= IGNvbmplY3Q= Y2FrZXM= IGNoZWF0ZWQ= IG1vZGVyYXRvcnM= cGFyYW1z RUZG IGRlY2VpdA== IFNUTA== IFRhbnphbmlh IFJJ IDE5MjM= IEV4aWxl dGhlbA== IHRoZW9sb2c= IHF1aXJreQ== IElydmluZQ== IG5lZWR5 b3Jpcw== VW0= S2E= IG1haWxib3g= MzIy IGJvcw== IFBldHJh S0lORw== IGVubGFyZ2Vk T2Z0ZW4= IGJhZGFzcw== IDM0Mw== IFBsYWNlcw== IENBRA== IHByaXN0aW5l IGludGVydmVuaW5n ZGlyZWN0aW9u IGxheg== IERTTQ== IHByb2plY3Rpbmc= IEZ1bms= YWdvZw== cGF5bWVudA== bm92 IGNoYXR0ZXI= QVJC IGV4YW1pbmF0aW9ucw== IEhvdXNlaG9sZA== IEd1cw== Rm9yZA== NDE0 Qm9zcw== IG15c3RpYw== IGxlYXBz IEJhdg== dWx6 YnVkZ2V0 Rm9vdGJhbGw= IHN1YnNpZGl6ZWQ= IGZpcnN0aGFuZA== IGNvaW5jaWRl b2N1bGFy Q29ubg== IENvbGxhYm9y IGZvb2xz YW11cmE= YWhhcg== cmlzdHM= IHN3b2xsZW4= IGV4cGVuZGVk IFBhdQ== c3Vw IHNwYXI= IGtleW5vdGU= c3VmZg== IHVuZXF1YWw= IHByb2dyZXNzaW5n c3RyaW5ncw== IEdhbWVyZ2F0ZQ== RGlzbmV5 IEVsZXZlbg== b21uaWE= IHNjcmlwdGVk IGVhcm5lcnM= YnJvdGhlcg== IEVuYWJsZWQ= 5rM= IGxhcnZhZQ== IExPQw== bWVzcw== V2lsc29u IFRlbXBsYXRl c3VjY2Vzc2Z1bGx5 IHBhcmFtb3VudA== IGNhbW91ZmxhZ2U= IGJpbmRz IFF1aWV0 IFNodXR0ZXJzdG9jaw== cnVzaA== IG1hc2NvdA== Zm9ydHVuZQ== IENvbHQ= IEJleW9u aGFiaQ== IGhhaXJj IDI2Nw== IERldXM= IHR3aXRjaA== IGNvbmNlbnRyYXRpbmc= IG5pcHBsZXM= Y2libGU= IGdpcg== Tlo= TWF0aA== bmlo UmVxdWlyZWQ= IHBvbmRlcg== IFNBTg== IHdlZGRpbmdz IGxvbmVsaW5lc3M= TkVT IE1haGpvbmc= Njk1 YWRkbGU= IEdhcm5lcg== IENPVVI= QnJpZGdl IHNwcmVl IENhbGR3ZWxs IGJyaWJlcnk= IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQ== cGx1Z2lucw== IHJhY2tldA== IGNoYW1wYWduZQ== dmVyc2libGU= Vm90ZQ== IG1vZGlmaWVycw== TWF5b3I= Njgw IGFzc2VtYmxpZXM= IFN1bHRhbg== IE5pbmc= IExhZGllcw== IHN1bGZ1cg== IG9yYnM= IC0tLS0t X19fX19fXw== IEpvdXJuYWxpc20= IGVzcG9ydHM= IGx1c2g= IGh1ZQ== IHNwZWN0cmFs SG9uZXN0 44OP IGJ1c2hlcw== IHJlaW5mb3JjZW1lbnQ= IHJlb3BlbmVk IFdoZWVscw== IE1vcmc= cmlldmluZw== IGF1eGlsaWFyeQ== IGpRdWVyeQ== IEJBVA== dGVzcXVl IHZlcnRleA== cHVyZQ== ZnJleQ== 44K6 ZG9z IHR5cGg= IGN1bGw= IGVx IGRlY29u IHRvc3Npbmc= IGRpc3BhcmF0ZQ== IEJyaWdoYW0= cHJpbnRm bGVkZ2Vk IHN1bmQ= IGNvenk= IGhlcGF0aXRpcw== cGVyZm9ybWluZw== IGF2YWw= IEdH ZnV0dXJl IHBldGVydG9kZA== IEtvc292bw== IG1hZ25ldHM= QWxyZWFkeQ== IEVkaXNvbg== IENlcmVz IFJBSUQ= IGJyaWxsaWFuY2U= NTc2 IGRlcml2ZXM= IGh5cGVydGVuc2lvbg== IM6U IGxhbWJkYQ== IGZsYWly IG1pc3Npb25hcmllcw== IHJhcGVz IFN0YXJ0ZXI= IE1vbnRocw== IGRlZnk= IHNlaXNtaWM= IFJhcGhhZWw= IGV1cm96b25l NjU2 enNjaGU= IHNjcmF0Y2hlZA== IGJvd3M= IExlbm5vbg== IEdhaWE= IGRyaXBwaW5n ZmFjdHM= QWxl IGZyb2dz IEJyZWFzdA== b2dlbmVpdHk= IFByb3NlY3V0b3I= IGFtcGxpZmllZA== IEhvZGc= IEZu VGhvdXNhbmRz IE5JSA== IE1vbml0b3Jpbmc= RlRXQVJF IFByaWVidXM= IEdyb3dpbmc= aHVudGVy IGRpYWdub3Nl IE1hbGQ= IExS IGNyb3duZWQ= IGJ1cnN0aW5n IGRpc3NvbHV0aW9u amF2YXNjcmlwdA== IHVzZWZ1bG5lc3M= IEV4ZWN1dGlvbg== Oig= IEl2b3J5 YWFo IHBlcnNlY3V0ZWQ= dmlvbGVuY2U= aXN0YXM= IENyYXRl IGltcHVsc2Vz IFNwYW5p ZWRlcw== SGFuZGxl IFplcmc= dGhpbmthYmxl TGFzdGx5 IHNwb250YW5lb3VzbHk= IGluY29udmVuaWVudA== IGRpc21pc3Npbmc= IHBsb3R0ZWQ= IGVpZ2h0eQ== IDczNw== cmlzaA== IFRob3JudG9u YXRoYW0= IHNpdGNvbQ== VmVu UmVjaXBl dGVs bHVuZA== IGNsZWFycw== IFNhc3VrZQ== IDI1OA== IG9wdGluZw== IGVucmFnZWQ= ZXN0aGV0aWM= IEFl dWNocw== UHJlcA== Rmxvdw== IHJ1bm9mZg== IEVhdGluZw== IEdpbGVz IEFjdGluZw== cmVzb3VyY2Vz aWJhYmE= IHJwbQ== IHNrZXdlZA== IEJsYW5j IFNha3V5YQ== IGhvdHRlcg== IDE5MjQ= b3BpYW4= Y2tv IGNydW1ibGluZw== IGNhcHRhaW5z IEFwcHJvcHJpYXRpb25z bGVhZGVycw== ZHJvcHBpbmc= YW51dHM= IHJldmVyc2luZw== IFBvc2U= IFNlaw== U2NvdA== IElkZWE= Y2lzZQ== IFNsb3Zlbmlh IDMxNw== RG9jdG9y IGNyb2NvZA== YWxkaQ== U2Vh IEZhcnJlbGw= IG1lcmNlbmFyaWVz IFJOQw== IEd1ZXNz IHBhY2luZw== TWFjaGluZQ== U3RyZWFtZXJCb3Q= IENoYXJpdHk= IDI5OA== IGNhbm5vbnM= IFRvYnk= VFBQU3RyZWFtZXJCb3Q= IFBhc3Npb24= Y2Zn VGhvbQ== IGJhZGdlcw== IEJlcm5zdGVpbg== LuKAkw== IFBPUA== IENvbmo= IGluaXRpYWxpemF0aW9u IGJpb2RpdmVyc2l0eQ== RHVi IGZldWRhbA== IGRpc2NsYWltZXI= IGNyb3c= IGlnbml0aW9u YXJm U0hB IGtIeg== aGF6YXJk IEFydGlzdHM= b2V1dg== Njc5 IFJ1ZHk= TmluZQ== IFJhbWFkYW4= 5b0= aXR0bw== IGFkcmVuYWxpbmU= Q2VydA== IHNtZWxsZWQ= IGltcHVuaXR5 IGFnZW5kYXM= IFJlYm9ybg== IENvbmNlbnQ= IFNlZW1z IG9tZWdh IER1c3Rpbg== IGJhY2tlcg== IFNhdWNl IEJveWxl V0lO IHNwaW5z IHBhdXNlcw== dXB0 IHNocmVkZGVk IHN0cmFwcGVk IENvcnJ1cHRpb24= IHNjcmF0Y2hlcw== IG5p IGF0dGlyZQ== IFNBRg== RmFjdG9yeVJlbG9hZGVk IElQUw== ICgl IHNlbWluYXI= Zm9jdXM= Y2l2aWw= IDE4NjA= aW50b3No IGNvbnRpbnVhbA== IGFiYnJldmk= IFNvaw== b2NvYm8= WE0= IGZyYW50aWM= IHVuYXZvaWRhYmxl IGFydGVyeQ== IGFubm90YXRpb25z YmF0aA== Q2xpbWF0ZQ== IGRvcnM= IFNsaWRl Y29vcmQ= IFJlbG9hZA== IExETA== IExvdmVjcmFmdA== IHVuaW1hZ2lu IHJlc2VtYmxlZA== IGJhcnJhY2tz bnA= IHN1cnJvZ2F0ZQ== IGNhdGVnb3JpemVk 44Kp IHZhY2NpbmF0ZWQ= IGRyYWluYWdl IGluZGlzdA== IFdoYXRzQXBw IDE4NzA= b2xlcmFuY2U= aW52b2tl YW1vcnBo IHJlY29ubmVjdA== IGVtYW5j IGJsaW5kbmVzcw== IDEyODA= aW50ZXJuZXQ= Y29sbGFy IGFsdHJ1 IGFieXNz IFRSSQ== NjU3 IGluZnVzZWQ= SEVBRA== IGZvcmVzdHJ5 IFdvb2R5 IENp d2k= c2Ft Nzg0 aG9saWRheQ== IG1vZ3Vs IEZlZXM= IERFTg== SW50ZXJuYWw= dXJiZWQ= ZnVzYw== YXRvbQ== IElsbHVzaW9u IHBvbGxlZA== IGZsYXA= IGNvYXg= TEdCVA== QW5hbHk= IFNlY3Rpb25z IENhbGlmb3Ju ZW1u IGhpdGhlcg== IE5JR0hU IG5haWxlZA== IFBpcGVsaW5l Mzkx b29m IFByaW1hbA== dmVyZW5k IHNsYXNoaW5n IHJldHJp YXZpb3Vy IGRlcGFydGluZw== Z2ls SVND IG1pZHdheQ== IHVsdHJhc291bmQ= IGJlaGF2aW5n IFRhcmE= Y2xhc3Nlcw== VmlydHVhbA== IENvbG9uaWFs IHN0cmlwcGluZw== IG9yY2hlc3RyYXRlZA== IEdyYXZlcw== NDUy IElyb25pY2FsbHk= IFdyaXRlcnM= IGxlbmRz IE1hbno= IHJhdmVu IG94aWRhdGl2ZQ== IDI2Ng== RUxG YWN0dWFsbHk= YXNjYXI= RHJhZnQ= IGZhdm91cmFibGU= IGh1bWlsaWF0aW5n IGZpZGVsaXR5 IEhvZg== IFh1YW4= NDk2 IGxheWVyZWQ= YXRpcw== Nzkw IHBheWNoZWNr aXRvbg== S2Fy IFZNd2FyZQ== IEZhcm1lcg== IHNlcnZpYw== Z2xvbWVy IHNsdW1w IEZhYnJpYw== IERPQw== ZXN0aW5n IHJlYXNzdXJl IHBoeWw= dm9sdA== aXRvcnk= UnVsZXM= IG94aWRhdGlvbg== IHByaXplZA== IG1pc3RyZXNz IERqYW5nbw== V0FSTg== 5ZE= IGVuY29kZQ== IEZlZWRiYWNr IHN0dXBpZGl0eQ== SWFu IFl1Z29zbGF2aWE= 16g= YWNs VVRF MTk3Nw== IHF1YWxpZmllcw== IHB1bHNlcw== cHJldHR5 IGZyb3pl IHNz SXRlcmF0b3I= IHVyZ2VudGx5 IG1haWxlZA== IENoYW0= IHN1c3RhaW5pbmc= IGJhc2ls IHB1cHBpZXM= aWxhbnQ= IFBMRUFTRQ== bGFw YWNlb3Vz RmVhcg== IE1hc3Rlcnk= YXV0b21hdGlj IFRBRw== IGFudGlt YWdsZXM= NDcz ZnJhbWVz IHdoaXNwZXJz IFdob2V2ZXI= IGJyYXZlcnk= IFVLSVA= cmFjdGlvbnM= IiIi IHRhbWU= IHBhcnRlZA== ZXZlcnl0aGluZw== Q09OVA== IGluZGVidGVk IGFkZHI= cmVr SVJFRA== IGVtaW5lbnQ= Y2xpbnRvbg== IG91c3RlZA== IHJldmlld2Vy IG1lbHRkb3du IHJlYXJy IFlhbw== dGhlcmVhbA== YWJ5dGU= IHN0dW1ibGluZw== IGJhdGNoZXM= IDI1OQ== IGNvbnRyYWNlcHRpdmU= IHByb3N0aXR1dGU= ZW5zaXM= RGVjbA== IFN0cmlrZXM= TWlsaXRhcnk= IE9hdGg= dmFjYw== cHBpbmdz MDUy IHBhcnROYW1l YW1waW5n UmVwb3J0cw== S0k= Q0hS IHN1YnRseQ== c3dlcnM= Qmxha2U= dXN1YWw= IGNvbnRlc3RhbnRz IGNhcnRyaWRnZXM= IEdSRUFU IGJsdXNo IOKAug== NDcy IHJlYXNvbmVk 44Ok cGFyYWxsZWxlZA== IGR5bg== YWdhdGU= IG5pZ2h0bHk= 5YY= NTU2 IHNlbWFudGlj IEFkdm9j ICEh IGRpc2FncmVlcw== IEJX VmVo IGhhcm1pbmc= IGVtYnJhY2Vz IHN0cml2ZXM= IGlubGFuZA== IEthcmQ= IGhlYXRz IEdpbm55 dXRhbg== ZXJuYXV0 eWxlbmU= IEVsZXY= SkQ= IGhhcnM= IFN0YXJy IHNreXNj IGNvbGxhYm9yYXRvcnM= VXN1YWxseQ== IHJldm9sdXRpb25z IFNUQVRT IGRpc21hbnRsZQ== IGNvbmZpZGVudGx5 IGtpbmV0aWM= QWxp IHBlcmNlbnRpbGU= IGV4dHJhY3Rpbmc= aWxsaWFu ZXN0ZWFk IHBoeXNpY2lzdHM= IE1hcnNoYWw= IGZlbGxvd3NoaXA= IGRhc2hlZA== IFVS IFNpb3V4 IENvbXBhY3Q= YW1pZGU= UHl0aG9u IExlaWdo IFBoYXJtYWM= aXN0cmF0ZXM= aGVyaWNhbA== IGZ1ZQ== IEVtaW4= ICh7 IE5laWdoYm9yaG9vZA== IGRpc3J1cHRpbmc= IER1cA== IGdsYW5k IFNldg== IE1hcmlhbg== YXJnb24= IER1bmQ= IDwhLS0= IHN0cmFuZA== IHN0YWRpdW1z em9z IHBzeWNob3Npcw== IFJhY2s= IGJyaWxsaWFudGx5 77iP IHN1Ym1lcmdlZA== IEluc3RpdA== IENob3c= IGNhZ2Vz IEhhdHM= IFVycw== IGRpbHV0ZWQ= dXNhdA== aWVubmU= IE1lbWJlcnNoaXA= IEJ1cms= IGll IGFyY2hldHlwZQ== RHJ1Zw== dWx0b24= IFNwb2Nr IE1jS2F5 IERlcGVuZA== RmVhdHVyZWQ= U29j MTk3OA== IEJlcmU= IHJlbGVudGxlc3NseQ== IGNyaXBwbGluZw== IGFydGhyaXRpcw== 55Sf IFRyb3BpY2Fs IEJ1bGc= IENoZXJ5bA== IGFkbWlyYWJsZQ== IHN1YnRpdGxl T3ZlcnJpZGU= IG9yaWdpbmF0aW5n IENDUA== IHN3b3Jl IFNvbGU= IERpc29yZGVycw== MzI5 IHByb2Nlc3Npb24= IHJlZnVyYg== IGltbWVyc2Vk cmVxdWVudGx5 IHNrZXB0aWNz IGNlcmFtaWM= bWl0dGVy ZW5zdGVpbg== YmVsdA== IFRJVA== YmlkZGVu IGZpcg== bWlzdA== Pl0= IHdlYXZl IFBhcmFkb3g= IGVudHJ1c3RlZA== IEJhcmNsYXlz IG5vdmVsaXN0 b2dpZQ== ODA2 IG5pbmV0eQ== IGRpc2FncmVlbWVudHM= QEBAQEBAQEA= IEF1c2Nod2l0eg== Y2Fycw== IExFVA== dHVi YXJhbnRpbmU= UE9T IGJhY2tzdG9yeQ== IGNoZWVyZnVs IFJhZw== ZWth Ymlhc2Vk IGluZXhwZXJpZW5jZWQ= YWtyYQ== IFdpdHQ= dGFu IHJhcGlzdA== IHBsYXRlYXU= Y2hhbA== IElucXVpcw== ZXhwcmVzc2lvbg== IGNpcGhlcg== IHNoYXZpbmc= YWRkZW4= cmVseQ== KFw= aXNtYQ== IFJlZ3VsYXRvcnk= Q0hBUg== aWx5bg== TlZJRElB R1U= IG11cm0= bGF1cw== Q2hyaXN0b3BoZXI= IGNvbnRyYWN0dWFs IFByb3h5 IEphaW1l IE1ldGhvZGlzdA== IHN0ZXdhcmRz c3Rh cGVyaWE= IHBoeXNpb2xvZ3k= IGJ1bXBlZA== IGZydWN0b3Nl QXVzdHJhbGlhbg== IE1ldGFsbGlj IE1hc3F1ZXJhZGU= YXJi IHByb211bA== IGRvd25mYWxs IGJ1dGNoZXI= IGJvdXI= IElORk9STUFUSU9O IEJpcw== cGVjdHM= YWRlbmE= IGNvbnRlbXBsYXRpbmc= YXJvbw== Y2VudGVyZWQ= IFBlYWtz VXNlZA== IG1vZGVt IGdlbmRlcnM= IDgwMDA= Mzcx IG1hdGVybml0eQ== IFJheg== IHJvY2tpbmc= IGhhbmRndW5z IERBQ0E= QXV0b20= IE5pbGU= IHR1bXVsdA== IEJlbmVmaXQ= IEFwcHJvYWNo d29ya3Nob3A= IExlYXZpbmc= R2Vy aW5zdGVhZA== IHZpYnJhdGlvbnM= IHJlcG9zaXRvcmllcw== NDk3 IEF1bnQ= IEp1Yg== IEV4cGVkaXRpb24= QWxwaGE= IHNhbnM= IG92ZXJkdWU= IG92ZXJjcm93ZA== IGxlZ2lzbGF0dXJlcw== IHBhdGVybmFs IExlb25hcmRv IGV4cHJlc3NpdmU= IGRpc3RyYWN0aW9ucw== IHNpbGVuY2Vk dHJ1c3Q= IGJpa2luZw== IDU2MA== IHByb3ByaWV0 IGltcG9zaXRpb24= IGNvbmdsb21lcg== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IFRlYWNoaW5n IFlvc2U= aW50ZW5zaXZl VG93bg== IHRyb2xsaW5n IEdyYWM= IEFTVVM= WW8= IHNwZWNpYWxz IE5lcGg= IEdvZHppbGxh RGF0YWJhc2U= IEhlZ2Vs IDI3Mg== MTk3Ng== IEdsb3JpYQ== IGRpc2VtYg== IEludmVzdGlnYXRpb25z IEJhbmU= YWdlbWVudHM= U3RyYW5nZQ== IHRyZWFzdXJ5 IFBsYXlz IHVuZGVzaXJhYmxl IHdpZGVuaW5n IHZlcmJhbGx5 IGluZmFuY3k= IGN1dHRlcg== Zm1s IDIxMDA= cHJvdG90eXBl ZmluZQ== IGRlY3JpbWluYWw= IGR5c2Z1bmN0aW9uYWw= IGJlc2ll IEVybnN0 emVi IG5vcnRoZWFzdGVybg== IGF1c3Q= cG9yYXRl IE1hcmxpbnM= IHNlZ3JlZ2F0ZWQ= ZXdvcmxk IE1haGVy IHRyYXZlcnNl IG1vbmFzdGVyeQ== dXJneQ== R2Vhcg== c2FuZA== Q29tcGw= IEVNUA== IHBsZW50 IE1lcmNlcg== IDI3Ng== VEFCTEU= Q29uZmlndXJhdGlvbg== SHVuZHJlZHM= IHByaWM= IGNvbGxhYm9yYXRpbmc= IFBhcmFtb3VudA== IEN1bW1pbmdz ICg8 IHJlY29yZGVy IGZsYXRz IDQxNg== d2hvc2U= Rm9udFNpemU= IE9yYml0 WVI= IHdyaXN0cw== IGJha2VyeQ== KX0= IEJvdW50eQ== IExhbmNhc3Rlcg== IGVuZGluZ3M= YWNjb3JkaW5n IFNhbGFt ZWFzeQ== NzU1 IEJ1cnI= IEJhcm5ldHQ= b25vbW91cw== VW5pb24= IHByZWNlZGVuY2U= IFNjaG9sYXJzaGlw IFVY IHJvbGxvdXQ= IGJvb24= YWxt IENhbnRlcg== 5rU= IHJvdW5kaW5n IGNsYWQ= IHZhcA== IEZlYXR1cmVk aXNhdGlvbnM= IDU0MA== cG9saWNl IHVuc2V0dGxpbmc= IGRyaWZ0aW5n IEx1bWlh IE9iYW1hQ2FyZQ== IEZhdm9y SHlwZXI= IFJvdGhzY2hpbGQ= IE1pbGliYW5k YW5hbHk= IEp1bGlldA== SHU= IHJlY2FsbGluZw== YWhlYWQ= Njk2 IHVuZmF2b3JhYmxl IGRhbmNlcw== T3g= IGxlZ2FsaXR5 IDQwMw== cm9tYW5jZXI= IGlucXVpcmU= IE1vdmVz XCI+ IFZhcmlhbnQ= IE1lc3NpYWg= IExDUw== IEJhaMOh NzU2 IGV5ZWJyb3c= IMKl IE1jRg== IEZvcnR5 TWFz IHBhbmlja2Vk IHRyYW5zZm9ybWF0aW9ucw== cXE= IHJldm9sdmVz cmluZ2U= IEFp YXhl IG9ud2FyZA== IENGUg== IEJhcmU= bG9naW4= IGxpcXVpZHM= IGRlY29tcA== c2Vjb25kYXJ5 aWxhbg== IENvbnZlcnQ= YW1peWE= IHByb3NlY3V0aW5n IOKJoQ== IFlvcmtlcnM= IEJ5cm5l c2xvdw== YXdlaQ== SmVhbg== IDI2OQ== IFNreWRyYWdvbg== IMOp IE5pY2FyYWd1YQ== IEh1Y2thYmVl IEhpZ2hseQ== IGFtcGhpYg== IFBhc3Rvcg== IExldHM= IGJsdXJyZWQ= IHZpc2NlcmFs IENCTw== IGNvbGxhYm9yYXRlZA== emln TGVnYWw= IGFwYXJ0aGVpZA== IGJyaWQ= IHByZXNldA== IERFVA== IEFNQQ== 15Q= YXJjaGluZw== YXVjdXNlcw== YnVpbGRlcg== IHBvZXRpYw== IGVtdWxhdG9y IE1vbGVjdWxhcg== IGhvbm9yaW5n aXNldW0= IHRyYWN0b3I= IENsdXN0ZXI= IENhbG0= YXJlZGV2aWw= IHNpZGV3YWxrcw== IHZpb2xpbg== IGdlbmVyYWxpemVk IEFsZWM= IGVtYmFyZ28= IGZhc3RiYWxs IEhUVFBT IExhY2s= IENoaWxs cml2ZXI= Q2hlbA== IFN3YXJt IExldmluZQ== cm95aW5n TGF1bmNo IGtpY2tlcg== IGFkZGl0aXZl IERlYWxz V2lkZ2V0 Y29udGFpbmluZw== IGVzY2FsYXRl IE9QRU4= IHR3ZWFrZWQ= IHN0YXNo IHNwYXJrcw== IEVzc2V4 IEVjYw== IGNvbnZpY3Q= IGJsb2dnaW5n SUVS IEhM IG11cmRlcmVycw== NzU5 IEhpYg== IGRlcGw= IEpvcmQ= U2Fj IGRpc3NlY3Q= IEhvd2U= b3NoZXI= IGN1c3RvbWl6YWJsZQ== IEZyYW56 IGF0cm8= xIc= IDAwMDQ= IG91dHBvc3Q= Um9zcw== IGdseXBob3NhdGU= IEhhc3Rpbmdz IEJFRk9SRQ== IHNob3Zl b3BwZWQ= IFNjYWxh IGFtdWxldA== YW5pYW4= IGV4YWNlcmJhdGVk IGVhdGVy NDcx VU1F IHB1bHA= aXpvbnRhbA== IFphbQ== IEFUSQ== aW1tdW5l YWJ5dGVz IHVubmVjZXNzYXJpbHk= IENBVA== IEF4aXM= IHZpc3VhbGl6ZQ== w4k= IFJhZGljYWw= Zm0= RG9jdW1lbnRz IEZvcnJlc3Q= IGNvbnRleHR1YWw= IFN5bWJvbA== IHRlbnRhdGl2ZQ== IERPRVM= IEdvb2Rz IGludGVybWl0dGVudA== fTo= bWVkaWF0ZWQ= IHJpZGljdWxl IGF0aGVpc20= IHBhdGhvZ2Vucw== IE11bQ== IHJlaW50cm9kdQ== IDMwNw== aUhVRA== IGZsYXNobGlnaHQ= IHN3ZWFyaW5n IHBlbmd1 QnU= IHJvdGF0ZWQ= IENyYW5l ICgpKTs= IGZhc2hpb25hYmxl IGVuZG9yc2luZw== NDYz KVs= IGluZ2VzdGlvbg== IGNvb2tz IDk1MA== b3RvbXk= IEltYW0= IGth IHRlYXNlcg== IEdob3N0cw== IOOCtQ== MTk2OQ== z4M= dWJieQ== IGNvbnZlcnRlcg== emFubmU= ZW5kZQ== IFByZXBhcg== IE5pY2tlbA== IENoaW1lcmE= aGlt IFR5cmFubg== IFNhYmJhdGg= IE5pY2hvbHM= IHJhcHQ= aWhhcg== IHNoZWxsaW5n IGlsbHVtaW5hdGU= IGRlbnRpc3Q= dXRvcg== IEludGVncmF0aW9u IHdoaW1z IExpdGVyYXJ5 QmVhdXQ= IHBhcmNobWVudA== YWdhcmE= QnJhbmQ= IGRlcm9n 4oCmKQ== IE5vcnNl IHVud2l0dGluZw== IGN1Yw== IGJvcmRlcmxpbmU= IHVwc2V0dGluZw== IHJlY291cnNl IGRyYXBlZA== IFJhZGFy IGNvbGRlcg== IFBlcHNp aW1pbmFyeQ== XSxb NjU4 Vmk= IEZyZW0= IFBlcw== IHZldGVyaW5hcnk= IFRFRA== IEVwaWRlbQ== bm92YQ== a2lk IGRldm91dA== b2N0 amFk TW9o IFBBWQ== IGdlb21ldHJpYw== IDMyMw== IGNpcmN1bWZlcmVuY2U= aWNoaWNr MTk3NQ== IFl1cmk= IFNoYWxs IEhvdmVy dW5pbg== U3By IGdyYWZ0 IEhhcHBpbmVzcw== IGRpc2FkdmFudGFnZXM= YXR0YWNrcw== IGh1YnM= IFN0YXJDcmFmdA== 6ZY= IGdhbGxlcmllcw== IEtvcnJh IGdyb2Nlcmllcw== IEdvcnN1Y2g= IHJhcGlzdHM= IGZ1bmdp IFR5cGhvb24= VmVjdG9y IEVtcHJlc3M= YmF0dGxl NDY4 IHBhcmFzaXRl IEJvbWJlcg== U0c= ZXhpc3Q= IFBm IHVuc2U= IHN1cmdlb25z QmlydGg= IFVuc3VyZQ== IFByaW50ZWQ= IEJlaGF2aW9yYWw= IEFzdGVy UGFraXN0YW4= IHVuZXRoaWNhbA== IHN2 IElvVA== IGxheW91dHM= UGFpbg== IGNvbnN0YW50cw== IExX IEJha2U= IHRvd2Vscw== IGRldGVyaW9yYXRpb24= IEJvbGl2aWE= IGJsaW5kZWQ= IFdhcmRlbg== IE1pc3RyZXNz IG9uc3RhZ2U= IGNsYW5z IEJFU1Q= MTk2MA== IGFudGlxdWU= IHJoZXRvcmljYWw= IFBlcmN5 IFJ3YW5kYQ== LC4= QnJ1Y2U= IHRyYXVtYXQ= IFBhcmxpYW1lbnRhcnk= IGZvb3Rub3Rl aWRpYQ== IExlYXJuZWQ= c2Vla2luZw== Z2VuaWM= IGRpbWVuc2lvbmFs SGlkZQ== 6ICF IGludHJpZ3Vl aW5zZQ== IGxlYXNlcw== IGFwcHJlbnRpY2Vz d2FzaGluZw== IDE5MjY= VklMTEU= IHN3b29w c2Ns IGJlZHJvb21z b25pY3M= IENydW5jaA== Y29tcGF0aWJsZQ== IGluY2FwYWM= IFllbWVuaQ== YXNodHJh emhvdQ== ZGFuZ2Vy IG1hbmlmZXN0YXRpb25z IERlbW9ucw== QUFG U2VjcmV0YXJ5 QUNURUQ= TE9E IGFteQ== cmFwZXI= ZXRobmlj NDE3 IHBvc2l0aXZlcw== IDI3Mw== IFJlZnVnZWVz IHVzYg== IFZhbGQ= b2RkeQ== IE1haG1vdWQ= QXNpYQ== IHNrdWxscw== IEV4b2R1cw== IENvbXBldA== IExJQw== IE1hbnNpb24= IEFtZQ== IGNvbnNvbGlkYXRl c3Rvcm1z b250ZW50 OTk2 IGNsZW4= IG11bW15 ZmxhdA== NzU4 IFZPTA== b3Rlcmlj bmVu IE1pbnV0ZQ== U292 IGZpbmVy Umg= bHljZXI= IHJlaW5mb3JjZW1lbnRz IEpvaGFubmVz IEdhbGxhZ2hlcg== IGd5bW4= U3VkZGVubHk= IGV4dG9ydGlvbg== a3I= aWF0b3I= VGE= IGhpcHBvY2FtcHVz TlBS IENvbXB1dGluZw== IHNxdWFyZWx5 IG1vZGVsbGluZw== IEZvcnVtcw== IExpc3A= IEtyaXNobmE= IDMyNA== IHJ1c2hlcw== IGVuc3VlZA== IGNyZWVwaW5n b250ZQ== bmFp aWxhdGVy IEhvcm5ldHM= IG9ibGl2aW91cw== SU5TVA== NTU5 IGplb3BhcmR5 IGRpc3Rpbmd1aXNoaW5n anVyZWQ= IGJlZ3M= c2ltaWxhcg== cGhvdA== NTMw IFBhcmt3YXk= IHNpbmtz IEhlYXJ0aHN0b25l aWJ1cg== IEJhdG9u QXZvaWQ= IGRhbmNlcg== IG1hZ2lzdHJhdGU= YXJ5bg== IGRpc3R1cmJhbmNlcw== IFJvbWVybw== IHBhcmFwaA== IG1pc2NoaWVm 4paT IFNoYXJpYQ== IHVyaW5hcnk= cm91dGU= aXZhcw== Zml0dGVk IGVqZWN0ZWQ= IEFsYnVxdWVycXVl IDQ3MA== IGlycml0YXRlZA== IFppcA== IEJpb2w= w40= IGRlbm91bmNl IGJpbmFyaWVz IFZlcnNl IG9wcG9z IEtlbmRyaWNr IEdQTA== IHNwZXc= IEVsaWphaA== IEVhcw== IGRyaWZ0ZWQ= c29mYXI= IGFubm95YW5jZQ== IEJFVA== NDc0 IFN0cm9uZ2g= aXRhdGVz IENvZ25pdGl2ZQ== b3Bob25l IElkZW50aWZpY2F0aW9u b2NyaW5l Y29ubmVjdGlvbg== IGJveGVy IEFTRA== IEFyZWFz WWFuZw== dGNo dWxsYWg= IGRlY2VpdmU= Q29tYmF0 ZXBpc29kZQ== Y3JldGU= V2l0bmVzcw== IGNvbmRvbGVuY2Vz aHRhcg== IGhlYWxz IGJ1Y2tldHM= IExBVw== Qmx1 IHNsYWI= IE9SREVS b2Ns YXR0b24= IFN0ZXZlbnNvbg== IEdpbmdlcg== IEZyaWVuZGx5 IFZhbmRlcmJpbHQ= c3Bpcml0 aWds IFJlZ2FyZGluZw== IFBST0c= IHNlYWxpbmc= c3RhcnRpbmc= IGNhcmRpbmFs IFZlYw== IEJlaXI= IG1pbGxpc2Vjb25kcw== d2Vhaw== cGVyc2U= IHN0ZXJpbGU= IENvbnRlbXBvcmFyeQ== IFBoYW50 IENsbw== IG91dHA= IGV4aWxlZA== IDI3Nw== IHNlbGZpZQ== IG1hbmlj IG5hbm8= dGVybXM= QWxleGFuZGVy IHJlc29sdmVz IG1pbGxlbm5pYQ== IGV4cGxvZGVz IGNvbnN0ZWxsYXRpb24= IGFkdWx0ZXJ5 bW90aW9u RE9D IGJyb2FkY2FzdGVycw== IGtpbmRlcmdhcnRlbg== IE1heXdlYXRoZXI= IEVjbw== aWNobw== IDI4Nw== bGF1bg== IG11dGU= IGRpc2NyZWV0 IHByZXNjaG9vbA== IHByZWVtcHQ= RGVsZXRl IEZyZWVk UGk= SEs= IGJsb2NrZXI= IEN1bWJlcg== IHdyb3VnaHQ= ZGF0aW5n IGluc3VyZXI= IHF1b3Rhcw== IHByZWFjaGVk IGV2aWN0aW9u IFJlZ2luYQ== IFBlbnM= IHNldmVudGVlbg== IE5hc3M= RGljaw== IGZvbGRz IGRvdHRlZA== IEFhZA== VW5pdmVyc2Fs IHBpeno= IEd1cnU= IHNvaWxz IG5vdmljZQ== IE5lYW5kZXI= IHN0b29s IGRldG9uYXRlZA== IFBpa2FjaHU= IE1hc3NpdmU= SVZFUg== IEFiZGVs IHN1YmR1ZWQ= IHRhbGxlc3Q= IHByZWNhcmlvdXM= IGF5 cmlmaWNhdGlvbg== IE9iag== Y2FsZQ== IHVucXVlc3Rpb24= Y3Vsb3Npcw== YWRhcw== aWdyYXRlZA== RGF5cw== IHF1ZWVucw== IEdhemV0dGU= IENvbG91cg== IEJvd21hbg== IEpK w692ZQ== IGRvbWluYXRlcw== U3R1ZGVudA== IG11 IGJhY2tsb2c= IEVsZWN0cm8= VHJ1dGg= NDgz IGNvbmRlbnNlZA== cnVsZXM= IENvbnNwaXJhY3k= IGFjcm9ueW0= aGFuZGxlZA== IE1hdHRl anJp IEltcG9zc2libGU= bHVkZQ== Y3JlYXRpb24= IHdhcm1lZA== IFNsYXZl IG1pc2xlZA== IGZlcm1lbnQ= IEthaA== aW5raQ== a2VsZXRvbg== Y3ls IEthcmlu SHVudGVy UmVnaXN0ZXI= IFN1cnJleQ== IHN0YXJlcw== IFdpZHRo IE5heQ== IFNraQ== IGJsYWNrbGlzdA== dWNrZXQ= IGV4cHVsc2lvbg== aW1ldA== IHJldHdlZXQ= dmFudGFnZQ== RmVhdHVyZQ== IHRyb29wZXJz IGhvbWVycw== OTY5 IGNvbnRpbmdlbmN5 IFdUQw== IEJyZXdlcg== Zm9yZWlnbg== V2FyZQ== U29sYXI= IHVuZHVl UkVD dWxuZXJhYmxl cGF0aGlj IEJvaXNl IDMyMg== IGFyb3VzZWQ= IFlpbmc= 5LiN dWVsZXNz IHBhcw== IG1vcnA= IGZsb3JhbA== RXhwcmVzcw== dWRnaW5n a0I= IEdyYW50ZWQ= 2K8= IE1pY2hh IEdvdGhpYw== IFNQRUNJQUw= IFJpY2FyZG8= RnJhbg== IGFkbWluaXN0ZXJpbmc= NjIw cG9yYQ== IMKu IGNvbXByb21pc2Vz IGJpdHRlbg== QWNjZXB0 VGhpcnR5 0LI= IG1hdGVyaWFsbHk= IFRlcnI= aWdtYXRpYw== Y2hhaW5z IGRvdmU= c3RhZHQ= TWFydmVs RkFVTFQ= IHdpbmRzaGllbGQ= IDMzNg== YWRpZXI= IHN3YXBwaW5n IGZsYXdsZXNz IFByZWRhdG9y IE1pY2hlbGU= IHByb3B1bHNpb24= IFBzeWNoaWM= IGFzc2lnbmluZw== IGZhYnJpY2F0aW9u IGJhcmxleQ== bHVzdA== IHRvd2VyaW5n IGFsdGVyY2F0aW9u IEJlbnRsZXk= U3BoZXJl IHR1bmE= IENsYXNzZXM= RnJlZWRvbQ== dW5lcg== TGFkeQ== dm9pY2U= IGNvb2xlc3Q= b3Jy IHBhbHA= JHs= IGh5c3Rlcmlh IE1ldGF0cm9u cGFudHM= IHNwYXduaW5n RXhwZXJ0cw== IEludmVzdG9ycw== IEFuYXJjaHk= IHNocnVuaw== IFZpY3RpbQ== IDI4OQ== IGVjc3Rhc3k= IEJpbmRpbmc= NTg1 IE1lbG9keQ== NTc4 b3RhbGx5 IEV0c3k= bGlnYQ== IGFwcGxhdWRlZA== IHN3ZWF0aW5n IHJlZGlzdHJpYnV0ZWQ= IHBvcGNvcm4= IHNlbWluYWw= ZnVy IE5ldXJvc2NpZW5jZQ== UmFuZA== IE9zdA== IE1hZGRlbg== IEluY3JlYXNpbmc= IERhd2tpbnM= IFN1YndheQ== IGFyc2Vu Y29uc2Vydg== QlVS IHNwaWtlZA== IEx5ZnQ= IEltcGVyaXVt IERyb3Bib3g= IGZhdm91cmVk IGVuY29tcGFzc2Vz Z2hvc3Q= IGluc3BpcmVz IGJ1cmdlb25pbmc= IFlvc2hp IFZlcnRpY2Fs IEF1ZGl0b3I= IGludGVuZGluZw== IGZpbGlidXN0ZXI= Qmxvb20= ZmFj IENhdnM= aWduaW5n IGNvd29ya2Vycw== IEJhcmJhcmlhbg== cmVtZW1iZXI= RkxBRw== IGF1ZGl0b3J5 YXNvbnJ5 Q29sbGVnZQ== IG11dGVk Z2Vtb255 b2Jpbg== IFBzeWNobw== OTY4 IGxhdmlzaA== IGhpZXJhcmNoaWNhbA== IERyb25l b3Vr IGNyaXBwbGVk IE1heGlt U2xvdA== IHF1aXo= IFZpZA== aWZsaW5n IGFyY2hhZW9sb2dpc3Rz IGFiYW5kb25tZW50 ZGlhbA== bGVvbg== IEZhcw== VGVk IHJhc3BiZXJyeQ== IG1hbmV1dmVycw== IGJlaGF2aW91cnM= IGluc3VyZQ== IHJlbW9k U3dpdGNo aG9l IHNwYWNlZA== IGFmZm9yZGFiaWxpdHk= IEZlcm4= bm90YXRpb24= IEJhbGFuY2Vk IG9jY3VwaWVz ZW52aXJvbm1lbnQ= IG5lY2tsYWNl IHNlZGFu RlU= IEJyYXZv IGFidXNlcnM= IEFuaXRh bWV0YWRhdGE= IEdpdGh1Yg== YWl0bw== IEZhc3Rlcg== IFdhc3Nlcm1hbg== IEZsZXNo IHRob3Ju cmFyaWx5 IE1lcnJ5 d2luZQ== IHBvcHVsYWNl IExhbm4= IHJlcGFpcmluZw== IHBzeWNoZQ== IG1vZHVsYXRpb24= YXdhcnU= 4oCL4oCL YXJpag== IGRlY29yYXRpb25z IGFwb2xvZ2lzZQ== IEdhcmc= YXBwbHk= IGdpdmVhd2F5 IEZsYW4= IFd5YXR0 VWJlcg== IGF1dGhvcmlzZWQ= IE1vcmFs SEFIQUhBSEE= YWN0aXZhdGU= IHRvcnBlZG8= IEZBUg== IGFtYXNzZWQ= IEFyYW0= YXJraW4= IFZpY3RpbXM= c3RhYg== IG9t IEVDTw== IG9waW9pZHM= IHB1cnBvc2VseQ== IFZlc3Q= IGVyZw== YXRhbg== IFN1cmdlcnk= IGNvcnJlY3Rpbmc= IE9ydGl6 IEJlZXQ= IHJldm9rZQ== IGZyZWV3YXk= IEhpZ2dpbnM= RmFpbA== IEZhcm1z IEFUUA== aG91bmQ= IHBva2luZw== IENvbW11bmlzdHM= bW9uc3Rlcg== aW1lbnRhcnk= IHVubG9ja2luZw== IHVuZml0 d2VlZA== ZW5hcmlv YXRpY2Fs IEVubGlnaHRlbm1lbnQ= IE5H IENvbXBlbnNhdGlvbg== ZGVlbg== IFdpZG93 IENpbmR5 IEFmdGVyd2FyZHM= IDYwMDA= aWtoYWls YWdpY2FsbHk= IHJhdGlmaWVk IGNhc3VhbHR5 SE9NRQ== cHNleQ== ZmVl IHNwYXJrbGluZw== IGTDqQ== IGNvbmNlcnRlZA== Q2F0YWw= IGNvbXBseWluZw== IEFyZXM= IERlbnQ= U2h1dA== IHNraW0= YWRtaW5pc3Q= IGhvc3RpbGl0aWVz IEdpbnM= IDYwOA== IG11ZGR5 IE1jSW50 IERlY2F5 NTI1 IGNvbnNwaWN1b3Vz IEV4cG9zdXJl IHJlc2NpbmQ= IHdlYXJhYmxl IDMyOA== b3VybWV0 YWhz IFJvYm90cw== IGVjbGlwcw== aW5zdGFuY2U= IFJFUE9SVA== IEFwcGw= MDMw IFNraWVz MDEwMA== IGZhbGxhY3k= U29ja2V0 IFJlY2VpdmVy IHNvbHZlcw== IEJ1dHRlcmZseQ== IFNob3BwaW5n IEZJUkU= NjU0 TWVkaWM= IHNpbmdlcnM= IE5lZWRsZXNz JycnJw== aXNoZXJz IERpdmU= NTg4 IHNlbGVjdGl2ZWx5 IGNsdW1zeQ== ODg5 IHB1cmNoYXNlcg== ZWFybmVk YXJkeQ== IGJlbmVmaXRpbmc= ZW5nbGlzaA== IHlpZWxkaW5n IFBvdXI= IHNwaW5hY2g= IGRlbHZl IENyb20= NjEw IGV4cG9ydGluZw== IE1BS0U= IDI2Mw== IGdyb3A= IGVudm95 IElucXVpcnk= IEx1aWdp ZHJ5 IFR1cmluZw== VGh1bWJuYWlsSW1hZ2U= IFZhcmlldHk= IGZhY2V0 IGZsdWZmeQ== IGV4Y2VycHRz IHNob3J0aA== IE9sc2Vu Q0xVRA== IHJlbGlhbnQ= IFVOQw== VG91cg== IGJhdGhpbmc= Q29tcGFueQ== IGdsb2JhbGl6YXRpb24= UHJlZA== IE1hbGZveQ== IGhvYw== amFt Y3JhZnRlZA== IEJvbmRz IEtpc3Npbmdlcg== RW5nbGFuZA== IG9yZGVybHk= Y2F0ZW50cnk= IDI2MQ== IGV4Y2hhbmdpbmc= IEludGVudA== IEFtZW5kbWVudHM= RE9N IHN0b3V0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA= IEFpcmJ1cw== IDI3OA== aHlkZQ== UG9sbA== SXRlbVRodW1ibmFpbEltYWdl IGxvb3Bob2xlcw== IFBpbGxhcg== IGV4cGxvcg== U3RyZXRjaA== QXBhcnQ= IHVubWFycmllZA== TGltaXQ= IFRyYW5zZm9ybWVycw== IGludGVsbGVjdHVhbGx5 dW5jdHVyZQ== MTgwMA== IGRhcm4= QnJhemls IGxlZnRvdmVy YmVydXM= ZnJlZA== TWluZWNyYWZ0 MzI2 IEZvcm1z IHByb29mcw== IERlc2lnbmVk IGluZGV4ZXM= IFN1cHBvc2U= RU1T IExvdmluZw== IEJvbm5pZQ== aW1hdGluZw== T1RVUw== IGNvbmR1Y3Rvcg== IGJlaGF2ZWQ= IEZyZW4= IHN5bmVyZw== IG1pbGxlbm5pdW0= IGNhdGVyaW5n IExhdWRlcg== V3I= IFlpYW5ub3BvdWxvcw== IEFURg== IGVuc2xhdmVk IGF3YWtlbmVk RFZE IEVESVRJT04= IENvbmNlcnQ= IENoYWxsZW5nZXI= IEhha3U= dW1lcmlj IGRlcHJlY2F0ZWQ= IFNIQVI= NDEy IGR5c3RvcA== IHRyZW1ibGluZw== IGRyZWFkZWQ= IFNwYWM= cGFkZGluZw== UmVwbA== IEdhcnJpc29u TWluaQ== IHVucGFyYWxsZWxlZA== YW1hcg== VVJSRU5U d3JlY2s= Y2VydGFpbg== dGFs IENMUw== YXBwaW5ncw== IHNlbnNlZA== IGZlbmNpbmc= IFBhc28= IERlc2s= IHNjb2Zm IGNvbnRlbXBsYXRl IExpZ2E= bGlxdWlk NzU3 IGFwcHJlbnRpY2U= IFVDSElK NTcw IFRob3VzYW5k IElsbHVt IGNoYW1waW9uZWQ= 44KM IGVsZWN0b3Jz IDM5OA== IEhhbmNvY2s= cm91bmRlZA== IEpPSE4= IHVuc2F0aXNm IHF1YWxpZmllcg== IEdhZGdldA== RU5F IGRlYWRsaWVzdA== IFBsYW50cw== IGlvbnM= IGFjY2VudHM= IHR3ZWFraW5n IHNoYXZlZA== RlJFRQ== IENoYXNlcg== QWdhaW5zdA== OTYw IG1ldGhhbXBoZXRhbWluZQ== IG5vcm1hbGl6ZWQ= ICRc IFByZWNpc2lvbg== IEd1YW0= IGNob2tlZA== IFhJSQ== IENhc3Rpbmc= VG9ycmVudA== IHNjYWxw IEphZ3Vhcg== d2l0 IHNlbWlj aXhpZQ== IEdvdWxk IGNvbmZpbmVz TnVzcmE= IExvbg== IEp1Z2c= eWNsZQ== IENvZGVj RWd5cHQ= IHJlc3RyYWlu IEFsaWVucw== IGNob2tpbmc= IER1bms= IEJlbGxh YWJj IHNsYW5n IG5ldXJvdHJhbnM= c2F2 IGVtcG93ZXJtZW50 4oaS IGNsaW1iZXJz IE1pbQ== IEZyYQ== cm9zc2U= Q2FwaXRhbA== IEN0aHVsaHU= SW50ZXJmYWNl IHByb2ZpY2llbnQ= IElOVE8= IDMxOA== cm9udGFs NTgw IERlc3BhaXI= S2Vubg== IHNjcmltbWFnZQ== IENvYXQ= YXNpb25z IHdhbGxwYXBlcg== IEpvbA== IHJlc3VyZ2VuY2U= IGFudGl2 IEJhbGxz sr4= IGJ1ZmZlcnM= IHN1YnN5c3RlbQ== IFN0ZWxsYXI= IEx1bmc= QUlEUw== IGVyYWRpY2F0ZQ== IGJsYXRhbnRseQ== IGJlaGF2ZXM= IE51bg== IGFudGljcw== ZXhwb3J0 REVW d2I= IHBocA== IEludGVncml0eQ== IGV4cGxvcmVy IHJldm9sdmluZw== YXV0aG9yZWQ= Z2Fucw== IGJhc2s= IGFzeW5jaHJvbm91cw== 5Y0= VEhJTkc= Njk4 R2VuZQ== IFJhY2Vy IE5pY28= aXNzdWVk IHNlcm1vbg== cG9zc2libHk= IHNpemVvZg== IGVudHJlcHJlbmV1cmlhbA== b3hpbg== IE1pbmVydmE= IHBsYXRvb24= bm9z cmlrcw== QVVU IEF2YWxhbmNoZQ== IERlc2M= keWjqw== IFBvYw== IGNvbmZlcnJlZA== zrs= IHBhdGNoZWQ= RkJJ NjYy IGZyYWN0dXJlcw== IGRldGVjdHM= IGRlZGljYXRl IGNvbnN0aXR1ZW50 IGNvc21vcw== V1Q= IHN3ZWF0cw== IHNwcnVuZw== YmFyYQ== c29saWQ= IHVuc3Vz IGJ1bGt5 IFBoaWxpcHBl IEZlbnJpcg== IHRoZXJhcGlzdHM= b3JlYWw= Xl5eXg== IHRvdGFsZWQ= IGJvb3pl IFJQQw== UHJvc2VjdXRvcnM= IGRpc2VuZw== IFNoYXJlZA== IG1vdG9yY3ljbGVz IGludmVudGlvbnM= IGxldHR1Y2U= IE1lcmdl IEpD IHNwaXJpdHVhbGl0eQ== IFdBUk5JTkc= IHVubHVja3k= IFRlc3M= IHRvbmd1ZXM= IERVSQ== VHVtYmxy IGxlYW5z IGludmFkZXJz IGNhbm9weQ== IEh1cnJpY2FuZXM= IEJyZXQ= IEFQUExJQw== aWRpbmU= aWNrbGU= UmVnYXJkaW5n IHZlZ2dpZXM= IGVqYWM= anV2ZW4= RmlzaA== REVN IERpbm8= VGhyb3c= IENoZWNraW5n YmVhcmQ= KCY= IGphaWxz IGhy dHJhbnNmZXI= aXZhdGluZw== IGZsZWV0cw== IEltYWc= IE1jRG9ubmVsbA== IHNuaXBwZXQ= SXNh IENoYXR0 IFN0YWlu IFNldEZvbnRTaXpl IE95 IE1hdGhlbWF0aWNz NDk0 IGVsZWN0cm9seQ== IEdvdHQ= IEJyYXM= Qk9PSw== IEZpbmdlcg== ZHVtcA== IG11dGFudHM= IHJlbnRhbHM= IGludGVydHc= IGNyZWVr YWlsYQ== QnJvdGhlcg== IERpc2NvcmQ= cGVl cmF3bGVy IGNhcnA= IDI3OQ== 44K344Oj cmVsYXRpb25z IGNvbnRyYXN0cw== Q29sdW1u IHJlY29ubmFpc3NhbmNl IHVua25vdw== IGxvb3Rpbmc= IHJlZ3VsYXRlcw== IG9wdGltdW0= IENoZXJva2Vl IEFyeQ== TGF0ZXN0 IHJvYWRzaWRl IGRhbmNlZA== IFVuaWNvcm4= QWNrbm93bGVk IHVuY29udHJvbGw= IE1VUw== YXRpbw== Y2hhbmNl aGF2ZW4= VkFMVUU= IGZhdm91cml0ZXM= IGNlcmVtb25pYWw= YmluYXJ5 cGVlZA== d29vZHM= RU1Q IHZhc2N1bGFy IGNvbnRlbXBsYXRlZA== IGJhcnJlbg== IExJU1Q= WWVsbG93 b3Nwb25zb3Jz IHdoaXNreQ== IE1hbW0= IERlVm9z bWluaW11bQ== SHVuZw== NDQy UGlj IFNuYXBkcmFnb24= Nzc2 IGNhcnZpbmc= IHVuZGVjaWRlZA== IGFkdmFudGFnZW91cw== IHBhbG1z IEFR IHN0YXJjaA== TG9vcA== IHBhZGRsZQ== IGZsYW1pbmc= IEhvcml6b25z QW5pbWF0aW9u Ym9vc3Q= IHByb2JhYmlsaXRpZXM= IE1pc2g= IGV4b2R1cw== IEVkaXRvcmlhbA== IGZ1bmd1cw== IGRpc3NlbnRpbmc= IERlbGljaW91cw== cm9ncmFt IER5bg== ZGlzaw== dG9t IGZhYnJpY3M= IENvdmU= IEJhbnM= IHNvZnRlbg== IENPTlM= IGluZWxpZ2libGU= IGVzdGltYXRpbmc= IExleGluZ3Rvbg== cHJhY3RpY2U= b2Zp IHNoZWRkaW5n IE5vcGU= IGJyZWF0aGVk IENvcmludGhpYW5z eW5l ZWtp QnVsbA== IGF0dGFjaGluZw== cmVlbnNob3Rz IGFuYWx5c2U= IEthcHBh IHVuc3VzdGFpbmFibGU= IGludGVycG9s YW5reQ== aGVtZXI= IHByb3RhZ29uaXN0cw== IGZvcm1hdHRlZA== IEJyeWNl IEFjaGlsbGVz IEFiZWRpbg== c2hvY2s= IGJ1bQ== Ym9z cXVh IFdhcm4= cXQ= IERpYWJldGVz ODY0 IEludmlzaWJsZQ== IHZhbmlzaA== IHRyYW5zbWl0dGluZw== IG11cmt5 IEZlaQ== IGF3YWl0ZWQ= IEp1cmFzc2lj dW1taWVz IG1lbmFjaW5n Z2FsbA== Q2F0aA== QnVpbHQ= aWxkbw== IFZvdGVz IG9udA== IG11bml0aW9ucw== IEZyZWVt w61u IGRlY2VuY3k= bG9wcA== aWV2ZWQ= IEdvcmQ= IHVudGhpbmthYmxl IE5ld3N3ZWVr IDMyMQ== SGVhdA== IHByZXNlbnRlcg== amlhbmc= IHBsYW5r IEF2YWxvbg== IGJlbno= IFJvdXQ= IHNsYW1taW5n IERhaQ== b3V0ZXI= IENvb2tpZQ== IEFsaWNpYQ== Z2V5 IHZhbml0eQ== IG93bA== 4bU= dGVzdGVk IEF3YWtlbnM= IGNhbnY= IGJsaW5kbHk= IFJpZGxleQ== IEVtYWlscw== UmVxdWlyZXM= IFNlcmJpYW4= b2dyYXBoZWQ= aWZyYW1l ZXRlcmlh IGFsdGVybmF0aW5n cXVpZXQ= IHNvY2lvbG9neQ== IFVubG9jaw== IENvbW11bmlzbQ== IG9wcw== IGF0dHJpYnV0aW9u IGFiZHVjdGlvbg== IEFicmFt IHNpZGVsaW5lZA== IEJPT0s= IHJlZmluaW5n IEZlZWxpbmc= IE9zbG8= IFBydWl0dA== cmFjaw== YW5naWJsZQ== IGNhdXRpb3VzbHk= IE1BUks= ZWVkcw== TW91c2U= IFN0ZXBo IFBhaXI= U2Fi OTk3 IEJhYWw= QmVj IGNvbW1h IFBhbGw= IEdhZWw= IG1pc3VuZGVyc3RhbmQ= IFBlc2g= T3JkZXJhYmxl IGRpc21hbA== IFNoaW55 JSI= IHJlYWxpc3RpY2FsbHk= IHBhdGlv IEd3 IFZpcnR1ZQ== IGV4aGF1c3Rpbmc= d2hhdGV2ZXI= b3BoeXM= eWlw NDE4 QWRqdXN0 IFdhaXRpbmc= ZXNzb24= IE1hemRh IERvemVucw== IHN0cmVhbWxpbmVk IGluY29tcGV0ZW5jZQ== IE1ldGg= IGV0aG9z T05FUw== IGluY2VudGl2 IGdyaXR0eQ== IEJ1dGNoZXI= SGVhZGVy IGV4cG9uZW50aWFs w58= IGNvcnJlbGF0ZQ== IGNvbnNlbnN1YWw= c291bmRpbmc= UmluZw== T3JpZ2lu IGNvbmNsdXNpdmU= ZmVldA== YWNseQ== IEZlcm5hbmRleg== QnV5YWJsZQ== IGR1Y2tz YXVudGxldHM= IGVsb25n IDI4Ng== IHNpbXVs R2Fz IEtpcnN0 IHByb3Ry IFJvYm8= IEFvRQ== b3BvbA== IHBzeWNob2xvZ2ljYWxseQ== c3Bpbg== aWxhdGVyYWxseQ== IENvbnJhZA== V2F2ZQ== NDQx IEFkdmVydGlzZW1lbnQ= IEhhcm1vbg== IE9yaWVudGFs aXNTcGVjaWFs IHByZXN1bXB0aXZl IHdpbA== IEtpZXI= bmVh IHBwbQ== IGhhcmJvdXI= IFdpcmVk Y29tcGFueQ== IGNvcm9uZXI= YXR1cmRheXM= IFByb3Vk IE5FWFQ= IEZsYWtl dmFsdWVk Y2VpdmVy IGZyYXVnaHQ= IGNhc2luZw== IHJ1bmF3YXk= IGdpbg== IExhdXJlbnQ= IEhhcmxlbQ== IEN1cmlvc2l0eQ== cXVpc2hlZA== IG5ldXJvc2NpZW5jZQ== IEh1bHU= IGJvcnJvd2Vy IHBldGl0aW9uZXI= IENvb2xkb3du V0FSRA== IGludm9raW5n Y29uZmlkZW5jZQ== Rm9yd2FyZA== IHN0cw== cG9wdWxhdGlvbg== RGVsaXZlcnlEYXRl RmlsbQ== IENvdg== cXVpY2tTaGlw cXVpY2tTaGlwQXZhaWxhYmxl cHJpbWFyeQ== aXNTcGVjaWFsT3JkZXJhYmxl aW52ZW50b3J5UXVhbnRpdHk= Y2hhbm5lbEF2YWlsYWJpbGl0eQ== Qk9Y IE11bHRpcGxheWVy IEplbm5lcg== Nzc4 IE1k IH4vLg== TU4= IGNoaWxkaXNo IGFudGlveGlkYW50 IENocm9tZWJvb2s= IDI3NA== IHNjcmVlbnBsYXk= IGFkdmVudHVyb3Vz IFJlbGF0aW9uc2hpcA== cmVzcG9uc2l2ZQ== bWluZ3Rvbg== IGNvcm5lcnN0b25l IEZleQ== RklS IHJvb2tpZXM= IEZlYXR1cmluZw== IG9yaWdpbmF0ZQ== IGVsZWN0cm9kZXM= YW50ZXM= IHNjcmlwdHVyZXM= IGdsdWVk IGRpc2NvbnRlbnQ= IGFmZmxpY3RlZA== bGF5b3V0 QnJhdmU= IG1vc2E= IFF1YW50aXR5 IEhpaw== d2lubmVy SG91cnM= IGVudGFpbA== IENlbGxz b2xvZ3Vl IHZpbA== IHByZWFjaGVy IGRlY29yYXRpdmU= ZGlmZmVyZW50 IHByZWp1ZGljZXM= IFNtb2tpbmc= IE5vdHRpbmdoYW0= c29UeXBl IHJoeXRobXM= IEFscGg= Ymxhc3Q= U3RlZWw= IERhbmllbGxl IHN0cmlmZQ== IHJlbWF0Y2g= c29EZWxpdmVyeURhdGU= IEZvcms= dHJpcA== b2x1bHU= aGVzZXM= Q0c= IFBPTElUSUNP b3N0YQ== IERyaWZ0 6b6N5aU= 6b6N5aWR5aOr IHZldHRpbmc= IEppbnBpbmc= IFJlY2Vzc2lvbg== TWlub3I= IEZyYXVk ZW5mcmFuY2g= IGNvbnZlbmVk IE5BQUNQ IE1pbGxpb25z IEZhcm1pbmc= IFdvbw== IEZsYXJl cml0bw== aW1taWdyYW50 IHZhY2FuY3k= IEhFQUQ= IFZhag== ZWdhbA== IFZpZ2ls U3R1ZHk= IHJ1aW5pbmc= IHJhY2tz IGhlYXRlcg== IFJhbmRvbHBo IEJydXNo IFRpcg== 2Kg= IGNvdg== JV0= IHJlY291bnRz IE9QVA== IE1lbHQ= IHRydWNl IGNhc2lub3M= IGNydXNhZGU= IGNhcm5hZ2U= IHN0cmlwZQ== IEt5bA== VGV4dHVyZXM= IDY5OA== IHByb2NsYW1hdGlvbg== IGdvb2RpZXM= IC4uLi4uLi4uLi4= cHJvY2xhaW1lZA== UG9saXQ= IHRvcGljYWw= IHNwZWNpYWxpemU= IEFtaW4= Z20= IGFuY2hvcmVk IGJlYXJpbmdz c2FtcGxl IEhpZ2hsYW5k IEF1dGlzbQ== IG1lcmNlbmFyeQ== IGludGVydmlld2Vy TEVS IFNvbWVycw== IGVtYnJ5bw== IEFzc3k= IDI4MQ== IEVkaXRpbmc= IENob3Nlbg== NjYw IHBjaQ== IFRodW5kZXJib2x0 QklMTA== IGNodWNrbGVk anJpd2Fs aG9m IGVhcnRobHk= KCl7 aW5kZXBlbmRlbmNl IGRpc3BlcnM= IFZlbmRvcg== IEdhcmV0aA== IHBhbHM= UGVubg== IFN1Ym1pdA== aWN1bQ== VGh1 IGNsYW5kZXN0aW5l IGNhbm5pYmFs IENsZXJr RVN0cmVhbQ== Z2FsaXRhcmlhbg== 4pml Z2V3 IGhvcnJlbmQ= IExvdg== IFJlYWN0aW9u b2NyaW4= Q2xhc3NpYw== IGVjaG9pbmc= IGRpc2Nsb3Npbmc= IEluc2lnaHQ= b2d1bg== IEluY2Fybg== dXBsb2Fkcw== cHBlcmM= Z3V5ZW4= IDE5MDE= IEJhcnM= Njg3 IGJyaWJlcw== IEZyZXNubw== dXJhdA== IFJlZXNl IGludHJ1c2l2ZQ== IGdyaXBwaW5n IEJsdWVwcmludA== IFJhc20= dW5pYQ== bWFuYWdlZA== IEhlYmRv IDM0NQ== IGRlY29kaW5n IHBvZXRz IGphd3M= IEZJR0hU YW1lbGVzcw== IE1lYWRvd3M= IEhhcmJhdWdo SW50ZXJ2aWV3 IEhvc3A= IEJSQQ== IGRlbGV0aW9u bW9i V2Fsa2Vy IE1vb25saWdodA== IEplZA== IFNvcGhpYQ== IHVzdXI= IGZvcnR1bmF0ZWx5 IFB1dHRpbmc= IEZvbGQ= IHNhbml0YXRpb24= IHBhcnRpc2Fucw== SVNPTg== Qm93 IENPTkM= IFJlZHVjZWQ= IFN1dHRvbg== IHRvdWNoc2NyZWVu IGVtYnJ5b3M= 4oCi4oCi4oCi4oCi IEtydWc= Y29tYmF0 IFBldHJvbGV1bQ== IGFtZA== IENvc21vcw== IHByZXNjcmliaW5n IGNvbmZvcm1pdHk= b3Vyc2Vz IHBsZW50aWZ1bA== IGRpc2lsbHVzaW9u IEVjb2xvZ3k= aXR0YWw= IGZhbmM= IGFzc2Fzc2luYXRlZA== cmVnbmFuY3k= IHBlcmVubmlhbA== IEJ1bGxldHM= IHN0YWxl IGNhY2hlZA== IEp1ZGl0aA== IERpc2Vhc2Vz QWxsZW4= IGxhcw== IHNoYXJkcw== IFN1YXJleg== IEZyaWVuZHNoaXA= aW50ZXJmYWNl IFN1cHBvcnRlcnM= YWRkb25z NDYy IEltcmFu IFdpbQ== IG5ld2ZvdW5k IE1i QW5pbWFs IGRhcmxpbmc= YW5kZQ== IHJoeQ== IFR3aXN0ZWQ= cG9zYWw= eW5za2k= VmFyaW91cw== 15w= IEtpdw== dXlvbWk= IHdlbGxiZWluZw== IExhdQ== YW5vcw== IHVubWlzdA== IG1hY09T IHJlc3Ryb29t IE9saXY= IEFpcndheXM= IHRpbWV0YWJsZQ== OTgw IHJhZGlvcw== dm95 aWFzY28= IGNsb3VkeQ== IERyYXdpbmc= QW55dGhpbmc= U3lyaWE= IEhlcnQ= c3Rha2luZw== IHVuY2hlY2tlZA== IGJyYXplbg== IE5SUw== Njk3 b25vbWlj ZXN0YWJsaXNo IGxlbmc= IGRpYWdvbmFs IEZpb3I= TGFpcg== IFN0YXJk IGRlZmljaWVudA== am9pbmluZw== YmVhbQ== IG9tbmlw IGJsZW5kZXI= IHN1bnJpc2U= TW9vcmU= IEZhdWx0 IENvc3R1bWU= IE11Yg== RmxhZ3M= YW5zZQ== IHBheW91dA== IEdvdmVybm9ycw== IERpbGxvbg== IEJhbmFuYQ== TmFy IHRyYWlsZWQ= IGltcGVyaWFsaXN0 dW1hbm4= YXRzdWtp NDM1 IFJvYWRz IHNsdXI= IElkZWFsbHk= IHRyZW5jaGVz Q3RybA== IG1pcnJvcmVk IFplbA== IENyZXN0 Q29tcGF0 IFJvbGxz c2NyaWI= IFRyYWlscw== b21ldGVycw== d2ludGVy IGltbW9ydGFsaXR5 aWxhdGVk IGNvbnRyYWRpY3Rz dW5pdmVyc2Fs aWxsaW9ucw== IE1hbWE= b3B0aW0= QVRVUkU= IGdlbw== ZXR0ZXI= IENhcmxv NDI0 IGNhbm9uaWNhbA== IFN0cm9uZ2hvbGQ= bmVhcg== IHBlcmZ1bWU= IG9yY2hlc3RyYQ== b2RpYWM= IHVwaGU= IHJlaWduaW5n dmVyc2l2ZQ== IGNhdWN1c2Vz IERFTQ== IGluc3VsdGVk IC0tLS0tLQ== IENydXNo IHJvb3Rpbmc= IFdyYWl0aA== IHdob3Jl IHRvZnU= Q21k IEJyZWU= ICRf IHJpdmU= IEFkdmVydGlzaW5n IHdhdHQ= IEhP IHBlcnN1YXNpdmU= IFBhcmFtZXRlcnM= IG9ic2VydmF0aW9uYWw= IE5DVA== IE1vag== IFNhbG9u IHRydW5j IGV4cXVpc2l0ZQ== IE1hcmE= IHBvb3A= IEFOTg== RXhj IFdvbmRlcmZ1bA== IFRhY28= IGhvbWVvd25lcg== IFNtaXRoc29uaWFu b3Jwb3JhdGVk bW1tbQ== IGxvYWY= IFlhbWF0bw== IEluZG8= IGNsaW5naW5n w6Fz IGltbXV0YWJsZQ== aHVi T3Jhbmdl IGZpbmdlcnRpcHM= IFdvb2Rlbg== IEtpZGQ= IEpQTQ== IERhbW4= Q293 Y29kZXM= NDgy IGluaXRpYXRpbmc= IEVsaw== IEN1dHRpbmc= IGFic2VudGVl IFZhbmNl IExpbGl0aA== R1VJ IG9ic2N1cmVk IGR3YXJ2ZXM= IENob3A= IEJva28= VmFsdWVz IG11bHRpbWVkaWE= IGJyZXdlZA== UmVndWxhcg== Q1JJUFRJT04= IE1vcnRhbA== IGFwZXg= IHRyYXZlbGVy IGJvaWxz IHNwcmF5aW5n UmVwcmVzZW50 IFN0YXJzaGlw NDI4 IGRpc2FwcHJvdmFs IHNoYWRvd3k= IGxhbWVudGVk IFJlcGxhY2U= IEZyYW7Dpw== Njc3 ZG9y IHVuc3RvcHBhYmxl IGNvaG9ydHM= Z3lu IENsYXNzaWNz IEFtcGg= IHNsdWdnaXNo IEFkZGljdGlvbg== IFBhZHJlcw== IGluc2NyaXB0aW9u IGluaHVtYW4= bWludXM= IEplcmVtaWFo YXRhcnM= VGVycm9y IFRvcw== IFNoYXJtYQ== YXN0YQ== Y2F0Y2g= IHBsdW1iaW5n IFRpbWJlcnM= U2hhcg== SGFs IE9zYw== IGNvdXBsaW5n aHVtYW5z IHNwb25nZQ== IGlkb2xz IFNwYQ== IEFkdm9jYXRl IEJlYXRz bHVh IHRpY2tpbmc= IGxvYWRlcg== IEdyb24= ODEw IHN0aW11bGF0ZWQ= IHNpZGViYXI= IE1hbnVmYWN0dXJlcg== b3JlQW5k MTk3Mw== IHByYWlzZXM= IEZsb3Jlcw== ZGlzYWJsZQ== IEVsZWN0cmljYWw= cmFpc2U= RXRo IG1pZ3JhdGVk IGxlY3R1cmVy S2lkcw== IENhdmVybg== IGtldHRsZQ== IGdseWM= IE1hbmRlbGE= IEZ1bGx5 5aer RklORVNU IHNxdWVlemluZw== IFJ5ZGVy YW1wb28= b3JlQW5kT25saW5l SW5zdG9yZUFuZE9ubGluZQ== QnV5YWJsZUluc3RvcmVBbmRPbmxpbmU= IGNvbW1lbW9yYXRl IFJhbXBhZ2U= QXVzdGlu IFNocm91ZA== IFJ1aW5z OTE1 IEtI IHdhdGVyZnJvbnQ= IEVTQw== YmFieQ== IENvdXQ= IEVtYmxlbQ== IGVxdWl2YWxlbnRz NDky VW5pcXVl IE5pZXR6c2NoZQ== YnJvd3Nlcg== IGltaXRhdGlvbg== IFdlcmV3b2xm IEtpcmlu YWNhcw== Jywi IMO+ UmV2aWV3ZWQ= IGN1bnQ= IHZvaWM= IExlbm92bw== IGJvbmRlZA== NDgx IGluaGliaXRvcnM= IGVuZGVhdm9ycw== IEhhdmFuYQ== IFN0b3V0 IEpvbGx5 QWN0b3I= Ki8o IG9jY3VycmVuY2Vz IFRlbnM= SW5jcmVhc2Vk IEFDVElPTg== IOOAjA== IFJhbmtpbmdz IEJyZWF0 IDMwOQ== RG91 IGltcGFjdGluZw== IER1Y2hlc3M= cHJlZml4 UUI= IHN1bW1vbmluZw== IGJlc3Rvd2Vk IEtlcGxlcg== IFBPV0VS Y3ViZQ== IEtpdHM= IEdyaXA= IG9waXVt IHJlcHV0YWJsZQ== dG9j aWNoYWVs IFJpcHBsZQ== IGNhZsOp IFpvb20= IEJ1cm1h IHdhaXZl IHN0YWxscw== IGRlbWVhbm9y aW5jZXJpdHk= IGZsdW9yaWRl IFNIT1VMRA== UGFyaXM= IGxvbmdpbmc= IHBsYXQ= IGdyb3NzbHk= IGJ1bGxz IHNob3djYXNpbmc= ZXhwZWN0ZWQ= IEdhZGRhZmk= ZW5naW5lZXJpbmc= UmVwZWF0 IEt1dA== IGNvbmNlaXZhYmxl IHRyaW1tZWQ= b3Njb3Bl IENhbmRpZGF0ZQ== IFRlYXJz cm9sb2c= TGV3aXM= U1VQ IHJvYWRtYXA= IHNhbGl2YQ== IHRydW1wZXQ= SmltbXk= IG1pcmFjdWxvdXM= IGNvbG9uaXphdGlvbg== IGFtcHV0 IEdOT01F YXRlY2g= RGlmZmVyZW50 IEVMRQ== IEdvdmVybm1lbnRz IEFoZWFk 44WL44WL d29yZHByZXNz TElC IEluY2x1ZGU= IERvcm90aHk= MDQ1 IENvbG9tYmlhbg== IGxlYXNlZA== ODg0 IGRlZ3JhZGluZw== IERhaXN5 aWF0aW9ucw== IGJhcHRpemVk IHN1cm5hbWU= Y294 IGJsaW5rZWQ= 44Oi IHBvbGxlbg== IGRlcm1hdA== IHJlZ2V4 IE5pY2hvbHNvbg== IEVhdGVy 55w= cmFkb3I= IG5hcnJvd2Vy IGh1cnJpY2FuZXM= IGhhbGx1Y2luYXRpb25z cmlkZGVu SVNTSU9O IEZpcmVmbHk= IGF0dGFpbm1lbnQ= IG5vbWluYXRl IGF2b2NhZG8= IE1lcmVkaXRo IHRz IHJldmVyZW5jZQ== IGV1cGg= IGNyYXRlcw== IFRFWFQ= IDQ0Mw== IDMxOQ== SlNPTg== aXF1ZXR0ZQ== IHNob3J0c3RvcA== aWNrZXk= IHByb3BlbGxlZA== IGFwaQ== IFRoaWV2ZXM= Nzc5 IG92ZXJzYXc= IGNvbGk= IE5pY29sYQ== IG92ZXJjbA== aWthd2E= IEN5cg== IDM4NA== Nzg5 IEFsbG93cw== MTAyNw== RGV0cm9pdA== VFJZ c2V0dXA= IFNvY2lhbGlzbQ== U292aWV0 c3VzcA== IEFQUg== IFNodXRkb3du IGFsdW1pbml1bQ== emJlaw== IExvdmVy R0dHR0dHR0c= IGRlbW9jcmFjaWVz IDE5MDg= IE1lcnJpbGw= IEZyYW5jb2lz Z2RhbGE= IHRyYWZmaWNrZXJz IFRpbA== IEdvYXQ= IHNwZWQ= IFJlc2Vydg== IHByb2Q= NTUy IGNhYw== IFVuaXY= IFNjaHdl IHN3aXJsaW5n IFdpbGRlcm5lc3M= IEVnZ3M= IHNhZGRlbmVk IGFyY2hhaWM= SHlk IGV4Y2Vzc2l2ZWx5 QlJF IGFlcm9zcGFjZQ== IFZvaWNlcw== Q3JhaWc= IGlnbml0ZWQ= SW5pdGlhbGx5 IE1jQQ== IGhhbmRzZXQ= IHJlZm9ybWluZw== IGZydXN0cmF0aW9ucw== IERlYWRwb29s IEJlbGljaGljaw== cmFjdG9y IFJhZ25hcm9r IERydXBhbA== IEFwcHJveGltYXRlbHk= MTkyMA== IEh1YmJsZQ== YXJtb3I= IFNhcmFz IEpvbmFz IG5vc3RhbGdpYw== IGZlYXNpYmlsaXR5 U2FoYXJhbg== IG9yYml0aW5n IDk3MA== UnU= IHNoaW4= IEludmVzdGlnYXRvcnM= IGluY29uc2lzdGVuY2llcw== IFBBTg== Qkc= IGdyYXppbmc= IGRldGVjdG9ycw== IFN0YXJ0dXA= IEZ1bm55 IE5hb21p Q29uc2lkZXJpbmc= IGhvZw== dXRm Y2VtaWM= IGZvcnRpZmllZA== IEZ1bmN0aW9ucw== IGNvZGVj bnV0cml0aW9u SGF0 IiE= bWljcm9zb2Z0 NTU4 IFRoaW4= IEFDRQ== QWxpYXM= IE9QUw== cGFwZXJz UEs= 44CO IGltcHJvYmFibGU= Tm9ydGhlcm4= ZXF1YWw= IGxvb2tvdXQ= IHR5cmVz IE1vZGlmaWVk IEtvcA== QWJzb2x1dGVseQ== IGJ1aWxkdXA= c2lsdmVy IGF1ZGk= IGdyb3Rlc3F1ZQ== IFNhYmVy IFByZXNieXRlcg== T05Z IGdsYWNpZXJz IFNob2Fscw== IEthc3M= IEhSQw== IE5pY29s IEx1bmNo IEZvc3M= 4paS QURSQQ== IE9uZVBsdXM= b2luZw== Z3JvdW5kcw== IGluY2lkZW50YWw= IGRhdGFzZXRz Njg5 IENsYXJrc29u IGFzc2VtYmxpbmc= IENvcnJlY3Rpb25z IGRyaW5rZXJz IHF1YWxpZmllcnM= IGxlYXNo IHVuZm91bmRlZA== IEh1bmRyZWQ= IGtpY2tvZmY= VGk= IHJlY29uY2ls IEdyYW50cw== IENvbXBsaWFuY2U= IERleHRlcml0eQ== IDE5MDY= d2Fybg== RGFsbGFz TWF4aW11bQ== bmFyZA== YXZpYQ== YmVhdXQ= ZW5zaXRpdml0eQ== dHJhY2U= IHBpb25lZXJz IEZyYWN0 44CP IHByZWNlcHQ= IGdsb3NzeQ== IElFRUU= QWNyb3Nz IDY4MA== U2xlZXA= Y2hlb24= IHNhdGlyaWNhbA== IE1pbm90YXVy IENsYXVkZQ== IHLDqQ== YXBlZ28= IGNhcnJvdA== IFNlbWlu aW5vYQ== IHpv SW5kZXBlbmRlbnQ= IGRpYWdub3Nlcw== IEN1ZQ== TUFS IHJlbmRpdGlvbg== IEtpaw== IHBhdGhvbG9neQ== IHNlbGVjdHM= TGlua2VkSW4= IGFzc2F5 IERyZXM= IHRleHR1YWw= cG9zdGVk SVRBTA== IE1hdWw= TmVhbA== IGludGVyY29ubmVjdGVk IGVycmF0aWM= IFZpcnVz IDUzMA== IGVudmlyb25tZW50YWxpc3Rz IFBoZWxwcw== IGVuZ2FnZW1lbnRz IElOU1Q= IGVjb25vbWljYWw= bm94aW91cw== IGdlYXJpbmc= aXp6eQ== IGZhdm9yYWJseQ== IE1jR2lsbA== VGVybQ== IGhhbmdlZA== IGJhbGxwYXJr IFJleWVz IGJld2FyZQ== IFBzYWw= IE1hc3NhY3Jl cWk= IGluYWNjZXNzaWJsZQ== YWNseXNt IGZyYXk= aWxsYWM= IGJpdHRlcmx5 IENlcnRpZmljYXRpb24= TWljaGlnYW4= IGlycmVzcGVjdGl2ZQ== YWxvcmU= RW1wdHk= IGVuZG9yc2VtZW50cw== IHVuZGV0 Zmc= ZXF1aXBwZWQ= IG1lcmNpbGVzcw== IEN1c3Q= IGltbWF0dXJl IHZvdWNoZXI= IEJsYWNrd2VsbA== 0Y8= aGF3aw== ZGlzY2lwbGluYXJ5 aWxlZQ== IE1ha290bw== IER1ZGU= 44OH44Kj WWVhcnM= IGludmVy IHNoYW1hbg== IFlvbmc= aXBlbA== ZWxsZW4= IENhdGh5 YnJpZHM= IHNhcmM= NjUx TmVhcg== IGdyb3VuZHdvcms= IGFtYXo= IDQxNQ== IEh1bnRpbmd0b24= aGV3cw== IEJ1bmc= IGFyYml0cmFyaWx5 IFdpdA== IEFsYmVydG8= IGRpc3F1YWxpZmllZA== YmVzdG9z NDYx IHBj IDI4NA== cm9iYXQ= Um9iaW4= IGh1Z3M= IFRyYW5zaXRpb24= IE9jY2FzaW9uYWxseQ== IDMyNg== IFdoaWxzdA== IExleQ== IHNwYWNlc2hpcA== Y3N2 IHVuc3VjY2Vzc2Z1bGx5 IEF1 bGVjaw== IFdpbmdlZA== IEdyaXp6bGllcw== Lu+/vQ== IG5lYXJlcg== IFNvcmNlcmVzcw== IEluZGlnbw== RWxzZQ== ODQw bGV0ZXM= Q29hY2g= IHVwYnJpbmdpbmc= IEtlcw== IHNlcGFyYXRpc3Q= IHJhY2lzdHM= IGNoYWluZWQ= IGFic3RpbmVuY2U= bGVhcm5pbmc= IHJlaW5zdGF0ZWQ= IHN5bW1ldHJ5 IHJlbWluZGVycw== IENoZXZ5 IG1vbnQ= IGV4ZW1wbGFyeQ== IFRPUg== Wlg= IHF1YWxpdGF0aXZl IFN0YW1w IFNhdmFubmFo IFJvc3Np IHBhZWQ= IGRpc3BlbnNhcmllcw== IFdhbGxz IENocm9uaWM= IGNvbXBsaW1lbnRhcnk= IEJlaXJ1dA== ICstLS0= aWdzbGlzdA== IGNyeXB0b2dyYXBoaWM= bWFzdGVycw== IENhcGl0YWxz IG1heGltYWw= IGVudHJvcHk= UG9pbnRz IGNvbWJhdGFudHM= bGlw IEdsb2I= IEJNQw== cGhhc2U= dGhhbms= SFRUUA== IGNvbW11dGVy IFwoXA== Li4v IFJlZ2VuZXI= IERPSQ== IEFjdGl2aXNpb24= IHNsaXQ= b3NhbA== UkVN IGNoYW50cw== WXU= S2V5cw== QnJleGl0 IEZvcmNlZA== QXJpem9uYQ== IHNxdWFkcm9u SVNP IE1hbG9uZQ== IDMzOA== IGNvbnRyYXN0aW5n IHRpZGFs IGxpYmVs IGltcGxhbnRlZA== IHVwcm9hcg== IENhdGVy IHByb3Bvc2l0aW9ucw== TWFuY2hlc3Rlcg== IEV1cm9z aXRhbWlu R2ls IEVsdmVu IFNlZWs= IEJhaQ== IHJlZGV2ZWxvcG1lbnQ= IFRvd25z IEx1Yg== ISIs YWxvbg== S3Jpc3Q= IG1lYXN1cmFibGU= IGltYWdpbmFibGU= IGFwb3N0bGVz WU4= NzYw IHN0ZXJvaWQ= IHNwZWNpZmljaXR5 IExvY2F0ZWQ= IEJlY2tlcg== IEVkdQ== IERpZXRhcnk= dXRzY2g= IE1hcmlseW4= IGJsaXN0ZXI= IE1FUA== IEtveg== IENNUw== eWFob28= IENhcm5leQ== IGJvYXN0aW5n IENhbGVi Qnl0ZQ== cmVhZHM= YWRlbg== UHJvYmxlbQ== IFdvb2R3YXJk U3dl U3Vw IEtHQg== U2V0dXA= IHRhY2l0 IHJldHJpYnV0aW9u IGR1ZXM= IE3DvA== Lj8= 5Lit cG90cw== IGNhbWVv IFBBTA== ZWR1Y2F0aW9u QW15 bGlrZWx5 Z2xpbmc= IGNvbnN0aXR1dGlvbmFsbHk= IEhhbW0= IFNwZWFr IHdpZGdldHM= YnJhdGU= IGNyYXBweQ== IEl0ZXI= IGFudGljaXBhdGluZw== IEJvdXQ= UGl4ZWw= IFllcA== IExhdXJpZQ== IGh1dA== IGJ1bGxldGlu IFNhbHZhdGlvbg== IGNoYXRz ZWFyYWJsZQ== SG9uZXN0bHk= QUxUSA== b25zZXF1 Y3VsdA== aXNjb3Zlcnk= b3Z5Y2g= IHNlbHZlcw== IFNhdG9zaGk= U291bmRz IGNvbnZlcmdlbmNl IFJvc2VuYmVyZw== MTk3NA== IG5hc2Fs IGZ1bGxlc3Q= IGZlcm9jaW91cw== eHVz aXN0ZQ== QU1T IGxvYmJpZWQ= IHNvb3RoaW5n IEd1bm4= dG9kYXk= MDI0 IGluc3BpcmF0aW9uYWw= IE5CTg== cGI= Z2V3YXRlcg== b3JhaA== YWxsb3dlZA== IENvbGlzZXVt IHNwZWNpYWxpemluZw== IGluc2FuZWx5 IFRhcGU= ZGVsYXk= IHRhcm4= IFBvdW5k IG1lbGFuY2g= IGRlcGxveW1lbnRz aWxhbmQ= IGxlc3Nlbg== IGZ1cnJ5 IFVFRkE= IGJsb29kc2hlZA== IE1laWVy aXRoZXJpbmc= IGhlaXJz IEphdw== YXh0ZXI= IFB1YmxpY2F0aW9ucw== IGFsdGVycw== aW50ZW50aW9u IFdpbmNoZXN0ZXI= ZGV0ZXJtaW5hdGlvbg== IExpZmV0aW1l dGhpbg== TW9uc3Rlcg== Nzgw IGFwcHJveGltYXRpb24= IHN1cGVybWFya2V0cw== IFNlY29uZHM= b3Jvcw== aHVnZQ== IGJyaWJl IExJTUlURUQ= dW5lZA== IG1pc2ludGVycHJldA== IEluanVyeQ== IDM2Nw== IHRocmVzaG9sZHM= IENhcm5pdmFs IGdhc3Ryb2ludGVzdGluYWw= IGd1aWRlbGluZQ== IGRlY2VpdmVk ZmVhdHVyZXM= IHB1cnBvcnRlZGx5 IFJvbm5pZQ== IE5ld3Q= IHNwYWNpb3Vz YXN1cw== IHN1cGVyaGVyb2Vz IEN5bnRoaWE= bGVnZ2Vk a2FtcA== Y2hpbw== IHRodW1ibmFpbA== IFNoaXJsZXk= aWxsYXRpb24= IHNoZWRz IFp5 RVBB IGRhbXM= IHlhd24= bmFo IFBlZ2d5 IEVyaWU= IEp1dmVudHVz IEZvdW50YWlu cng= ZG9uYWxk YWxidW0= IENvbXByZWhlbnNpdmU= IGNhY2hpbmc= IFV6 dWxuZXJhYmlsaXR5 IFByaW5jaXBsZQ== IEppYW4= aW5nZXJz Y2FzdHM= IE9zaXJpcw== Y2hhcnQ= dGlsZQ== IFRpZmZhbnk= IFBhdHRvbg== IFdoaXA= IG92ZXJzaXplZA== SmU= IENpbmRlcmVsbGE= IEJvcmRlcnM= IERhZXNo TWFo IGRvZ21h IGNvbW11bmlzdHM= dnU= Q291bmNpbA== IGZyZXNod2F0ZXI= IHdvdW5kaW5n IGRlYmFjbGU= IHlvdW5nc3Rlcg== IHRocmVhZGVk IEJvdHM= IFNhdmluZ3M= 44GC b2xpbmc= b2hv IGlsbHVtaW5hdGlvbg== TVJJ IGxvb3Nlbg== dHJ1bXA= YWdlbmN5 dXJpb24= IG1vbWVudGFyaWx5 IENodW4= IEJ1ZGFwZXN0 IEFsbGV5 RGlzaw== IGFzdG9uaXNoZWQ= IENvbnF1ZXI= IEFjY291bnRpbmc= aGF2aW5n IFdlaW4= IEFscmlnaHQ= IHJldm9sdmVy IGRlbHVzaW9u IHJlbGljcw== IGFkaGVyZW50 cXVhbnQ= IGhhbmRtYWRl b3Jpbw== IGNvbWJhdGluZw== Y29kZWQ= IHF1YWRydQ== cmV0aA== Tmlr IFRyaWJhbA== IE15c3RlcmlvdXM= IGluaGFs IFdpbm5pbmc= IENsYXNzaWZpY2F0aW9u Y2hhbmdlZA== IHVuYWI= IHNjb3Ju aWNpcGF0ZWQ= d2w= b25kdWN0b3I= IHJlaW5mb3JjaW5n IENoaWxkaG9vZA== YW5vdmE= IGFkdmVudHVyZXI= IGRvY3RvcmFs IFN0cmF0ZWdpZXM= IGVuZ3VsZmVk IEVuY291bnRlcg== IGxhc2hlcw== Q3JpdGljYWw= cmljdWxhcg== IFVURg== b2NpYXRpb24= Y2hlY2tpbmc= IENvbnN1bHRpbmc= UnVudGltZQ== cGVyaW9k IEFzZ2FyZA== IGRpc3RpbGxlZA== IFBhc2FkZW5h IER5aW5n IENPVU5UWQ== IGdyYW5pdGU= IHNtYWNr IHBhcmFjaHV0ZQ== IFNVUg== VmlyZ2luaWE= IEZ1cmlvdXM= Nzg3 IE9raW4= IGNhbWVs IE1icHM= MTk3Mg== IENoYW8= IEN5YW4= am9pY2U= ZWZlcg== IFdyYXA= IERlYmF0ZQ== U2Vn IGZvcmVhcm0= IElnbm9yZQ== IHRpbWVzdGFtcA== IHByb2Jpbmc= IE5vb24= IEdyYWls ZmVu IGRvcm1hbnQ= IEZpcnN0bHk= IEVpZ2h0aA== IEhVTg== IERlc2lyZQ== b3Jhcw== R2lybHM= IERlc21vbmQ= emFy YW1pbmVz T0FE ZXhlY3V0ZQ== IGJvb2Jz IEFUTA== Xyg= Q2hlbHNlYQ== IG1hc3R1cmJhdGlvbg== IENvQw== IGRlc3Ryb3llcg== IENob21za3k= IHNjYXR0ZXI= IEFzc2V0cw== Nzk2 IENhcmdv IHJlY2VwdGl2ZQ== IFNjb3Bl IG1hcmtldGVycw== IGxhdW5jaGVycw== IGF4bGU= IFNFQQ== c2Vx IE1vZmY= ZmluZGluZw== IEdpYmJz R2VvcmdpYQ== ZXh0cmVtZWx5 Tko= IGxhYm9yZXJz c3RhbHM= IG1lZGlhdGlvbg== IEhlZGdl YXRvd24= IGlvZA== ZGVzcGl0ZQ== dmlsbA== SmFuZQ== ZXhpc3RlbmNl IGNvaW5jaWRlZA== IFV0aWxpdGllcw== IENoZWFw IGxvZ2lzdGljYWw= IGN1bG1pbmF0aW9u IE5pY290aW5l cGFr Rm9sZGVy IHJvZGVudHM= c3R1ZmY= IGxhd2Z1bGx5 IHJlcGVydG8= aW9jaA== amo= RGlhbG9ndWU= SEhISA== bGljdGlvbg== TG9va3M= IDI5Nw== IHR1cnJldHM= IEFiYW5kb24= IGluY2Vzcw== IFRyYWZmb3Jk IGN1cmxlZA== IHByZWZlcnJpbmc= IHByaXZhdGl6YXRpb24= IGlycmVzaXN0 IFBhbmRh IFNoYWtl IE1jR3I= 44OE dW5kZXJz IGRpc2NyaW1pbmF0ZWQ= IGJhcnRlbmRlcg== SUxF QXRsYW50aWM= IHByb3BlbnNpdHk= IFdpeg== IEdpbQ== Y29uZmVyZW5jZQ== IHJlaW5mb3JjZXM= R2g= d2Fnb24= IGVlcmll RmFs IGh1Z2dlZA== cmFjaXN0 UklD RnU= IGZpbGxlcg== IFN0dWI= IGVuZ3JhdmVk IFdyZXN0bGU= IGltYWdpbmF0aXZl IFBlZXI= IEZhY3RvcnM= YW51cw== IERyYWN1bGE= bW9uaXRvcg== IHJvdXRlcnM= aWJpYQ== IEJvb2xlYW4= ZW5kYWxl IFNsYXVnaHRlcg== IFNoYWNr UkZD IFNwaWVsYmVyZw== U2F4 IFBIT1RP IENsb3Zlcg== IFJhZQ== RGVwZW5kaW5n IE1lbW9y YXJhbQ== IHBpZXJjZWQ= IGN1cnRhaW5z dmFsZQ== IElucXVpc2l0aW9u IFBva2U= IGZvcmVjYXN0aW5n IGNvbXBsYWlucw== U2Vuc2U= IEhlcm1lcw== aXNjb3ZlcmVk IGJpYmxl IE1vcnBo IGdlcm0= Nzg1 RE9O IGNvbmdlbg== IGNyYW5l IERQUg== IHJlc3BlY3RmdWxseQ== Um9vbQ== IE5hdw== IERhbGFp cmVhc29u IEFuZ3Vz RWR1Y2F0aW9u IFRpdGFuaWM= y5w= IG92YWw= dW5pdGVk IHRoaXJkcw== IG1vaXN0dXI= IENQQw== TWlhbWk= IHRlbnRhY2xlcw== IFBvbGFyaXM= ZXhj ZXhjbHVzaXZl IFByYWlyaWU= IGNvbG9zc2Fs IEJsZW5k c3VycHJpc2luZ2x5 w61z IGluZG9jdHI= IGJhc2Fs IE1QRUc= dW5kbw== U3BsaXQ= RGV2ZWxvcG1lbnQ= IGxhbnRlcm4= MTk3MQ== IHByb3ZvY2F0aW9u IGFuZ3Vpc2g= IEJpbmQ= IExlaWE= ZHVjZXJz aXBweQ== Y29uc2VydmFuY3k= IGluaXRpYWxpemU= IFR3aWNl IFN1aw== IHByZWRpYw== IGRpcGxvbWE= IHNvY2lvcA== SW5ncmVkaWVudHM= IGhhbW1lcmVk IElybWE= UWFpZGE= IGdsaW1wcw== IEJpYW4= IHN0YWNraW5n IGZlbmQ= Z292dHJhY2s= IHVubg== ZGVtb2NyYXRpYw== aWdyZWU= IDU4MA== IDI5NA== IHN0cmF3YmVycnk= SURFUg== IGNoZXJpc2hlZA== IEhvdHM= IGluZmVycmVk IDgwOA== IFNvY3JhdGVz T3JlZ29u IFJvc2Vz IEZPSUE= IGluc2Vuc2l0aXZl IDQwOA== UmVjb21tZW5k IFNoaW5l IHBhaW5zdGFraW5n VUdF IEhlbGxlcg== IEVudGVycHJpc2Vz SU9S YWRq TlJT TEc= IGFsaWVuYXRlZA== IGFja25vd2xlZGdlbWVudA== IEFVRA== IFJlbmVn IHZvdWNoZXJz IDk2MA== IG1vb3Q= IERpbWVuc2lvbnM= IGNhYmJhZ2U= QnJpZ2h0 Z2F0 IEtsdQ== IGxhdGVudA== IHpl IE1lbmc= IGRpc3BlcnNl IHBhbmRlbW9uaXVt SFE= IHZpcnR1b3Vz IExvY2F0aW9ucw== ZWVwZXI= cHJvdmlkZWQ= IHNlYW1z IFdU aXpv UFJPVg== IHRpdGFuaXVt IHJlY29sbGVjdGlvbg== IGNyYW4= IDc4MA== IE5G NDkx NjQy cGFja2luZw== NTk4 dGV4dHVyZQ== U3BpZGVy ZnJlZWRvbQ== Y2lwbGVk IFRBTUFEUkE= 4pmm YXV0aGVudA== IFdBTlQ= cmlmaWVk IHJpdGVz IHV0ZXJ1cw== a2lzcw== IOKJpA== IHNraWxsZXQ= IGRpc2VuZnJhbmNo IEdhYWw= Q29tcGFu IGFnZWluZw== Z3VpZGU= QmFsdA== IGl0ZXJhdG9y IGRpc2NyZXRpb25hcnk= dGlwcw== IHByaW1hdGVz IFRlY2huaXF1ZQ== IFBheW1lbnRz YXplbA== IFJPQ0s= c3RhbnRpYWw= MDYw IGRtZw== IEphY2tldHM= IFBsYXlvZmY= IG51cnNlcnk= IFN5bWI= YXJ0b24= IGFubmV4YXRpb24= Q29sb3JhZG8= IGNvaWxz IFNob2Vz 4oSiOg== IFJveg== Q09NUExF IEV2ZXJlc3Q= IFRyaXVtcGg= Sm95 R3JpZA== 4Lw= cHJvY2Vzc29y IFByb3NwZXI= IFNldmVydXM= IFNlbGVjdGVk cmc= IFRheXlpcA== U3RyYQ== IHNraWluZw== ID8p IHBlZw== VGVzbGE= IHRpbWVmcmFtZQ== IG1hc3Rlcm1pbmQ= IE5C c2NpZW50aWZpYw== IFNoaXQ= Z2VuZXJpYw== SU5URVI= TlVN IHN0cm9sbA== IEVuaXg= IE1NUg== IEVNUw== bW92aWU= gqo= IG1pbmltaXppbmc= aWRkbGluZw== IGlsbGVnaXRpbWF0ZQ== IHByb3RvdHlw IHByZW1hdHVyZWx5 IG1hbnVhbHM= b2JiaWVz IENhc3NpZHk= REVD ZGVza3RvcA== IGFlcm9z IHNjcmVlbmluZ3M= IGRlYmlsaXRhdGluZw== IEdyaW5k bmF0dXJlY29uc2VydmFuY3k= IGZhZGVz dGVybWluYXRpb24= YXNzZXRzYWRvYmU= RmFjdG9y IGRlZmluaXRpdmVseQ== UG9rw6k= YXB1bHQ= IExhZmF5ZXR0ZQ== Q29ybg== IENvcmFs IHN0YWduYW50 VHVl IGRpc3NhdGlzZmFjdGlvbg== R2VuZGVy IGtpZG5leXM= IEdvdw== IERlZmVhdA== IEFzaHRvbg== IGNhcnRlbHM= IGZvcmVjbG9zdXJl IEV4cGxvcmU= c3RyZW5ndGg= b3Rpbg== IHZldGVyaW5hcmlhbg== IGZ1bWJsZQ== IHBhcmFw IFN0cmFpdA== cmlscw== IHByaWNr IEJlcm11ZGE= IEFtbXVuaXRpb24= c2tpbm5lZA== IGFib3VuZA== IEJyYXo= IHNoYXJwZXI= IEFzY2Vuc2lvbg== IDk3OA== IHByZXZpZXdz IGNvbW11bmlvbg== IFhZ IHBob255 IG5ld2NvbWVy IDMzMg== LiIsIg== IHJlZGlzdHJpYnV0aW9u UHJvdGVjdA== IFNvZg== S2Fs IGxpcHN0aWNr d29yc3Q= IHRhbmdsZWQ= IHJldHJvc3BlY3RpdmU= aW50ZWdlcg== IHZvbHVudGVlcmluZw== IDE5MDc= IC0tLS0tLS0tLS0tLS0tLS0tLS0t aWNoZW4= IHVudmVpbGluZw== IHNlbnNlbGVzcw== IGZpc2hlcmllcw== XC0= IGhpbmdlcw== IGNhbGN1bHVz TXl0aA== IHVuZGVmZWF0ZWQ= IG9wdGltaXphdGlvbnM= IGRlcHJlc3M= IGJpbGxib2FyZA== IFlhZA== IFB5cmFtaWQ= SXNu SWRl IGxlZ2lvbg== IEtyYW1lcg== ZW50YW55bA== IHBlbmV0cmF0aW5n IEhhd3Ro IFBST0RVQ1Q= IEdlcmFyZA== IFBhY3Q= IEluY2x1ZGluZw== IEVsaWFz IEVsYWluZQ== dmlzdWFs IGh1bW1pbmc= IGNvbmRlc2M= IEZhc2M= 5LiK IGVnYWxpdGFyaWFu IGRldnM= IERhaGw= T3Bz REg= IEJvdW5jZQ== aWRhdGVk YWxkbw== IHJlcHVibGljYW4= IGhhbWI= IFNldHQ= b2dyYXBoaWVz Q0hBUFRFUg== IHRyYW5zc2V4dWFs IHNreXJvY2tldA== YW5zd2Vy IG1hcmt1cA== 2Ko= IGhlcm9pbmU= Q29tcGFyZQ== IFRhdg== QmVhc3Q= IHN1Y2Nlc3NvcnM= IG5hw692ZQ== IEJ1Y2tsZXk= c3RyZXNz bWVhdA== IGRvd25sb2FkYWJsZQ== IGluZGV4ZWQ= IHNjYWZm IEx1bXA= IEhvbW8= U3R1ZGlv SW5zcA== IHJhY2tlZA== ZmFyaW91cw== IFBldHR5 RXh0ZXJuYWw= IDE5MDk= V2Fycw== Y29tbWl0 cHV0ZXJz IHVub2I= IEVycg== IEVH IEFsYW0= IFNpYmVyaWE= IEF0bW9zcGhlcmlj SVNURVI= IFNhdGFuaWM= dHJhbnNsYXRpb24= IExvdWQ= dHJhdW1hdGlj bGlxdWU= IHJlc29uYXRl IFdlbGNo IHNwYXJraW5n IFRPTQ== dG9uZQ== IG91dGw= IGhhbmRjdWZmZWQ= IFNlcmll ODAx IGxhbmRtYXJrcw== IFJlZXZlcw== IHNvZnRlbmVk IGRhenpsaW5n IFdhbnRlZA== bW9udGhz TWFnaWthcnA= IHVudHJlYXRlZA== IEJlZGZvcmQ= TWk= IER5bmFtbw== T3Jl Nzk1 IHdyb25nZnVs IGx1cmVk IGNvcnRpc29s IHZleA== ZHJhd24= aWxldA== RG93bmxvYWRoYQ== IEZhY3Rpb24= IGxhYnlyaW50aA== IGhpamFja2Vk d2F0ZXJz ZXJpY2s= IHN1cGVyaW9ycw== IFJvd2xpbmc= IEd1aW5uZXNz IHRk OTky IHVuZWFydGhlZA== IGNlbnRyaWY= IHNoYW1lbGVzcw== UG9k IEZpYg== IGljaW5n IHByZWRpY3Rvcg== IDI5Mg== Zm9yZXN0YXRpb24= Y29uc3RydWN0 Q2FuZA== QCM= IGFnaXRhdGVk IHJlcHI= T1ZB IGtuaXR0aW5n IExpbWE= IGZvZGRlcg== Njg0 IFBlcnNvbmE= a2w= NzAx IGJyZWFrdXA= 4bg= IGFwcGFsbGVk IGFudGlkZXByZXNzYW50cw== IFN1c3NleA== SGFycmlz IFRoZXJtYWw= ZWVlZQ== VXBsb2Fk IGd1bGY= IGRvb3JzdGVw IFNoYW5r TFU= IE1FTg== IFBvbmQ= c29ycnk= IG1pc2ZvcnR1bmU= bmFuY2U= IGJvbmE= TXV0 IGRlZ3JhZGVk IExPRw== IE5lc3M= YW5pbWFs IGF2ZXJzaW9u dW5kb3du IHN1cHBsZW1lbnRlZA== IEN1cHM= IDUwNA== IGRlcHJpdmU= IFNwYXJrbGU= xYI= IE1lZGl0YXRpb24= YXV0aG9ycw== IFNhYmFu IE5ha2Vk YWlyZA== IE1hbmRhcmlu IFNjcmlwdHVyZXM= IFBlcnNvbm5lbA== IE1haGFyYXNodHJh IDE5MDM= IFBhaQ== IE1pcmFnZQ== b21iYXQ= QWNjZXNzb3J5 IGZyYWdtZW50ZWQ= VG9nZXRoZXI= IGJlbGlldmFibGU= IEdsYWRpYXRvcg== YWxpZ25lZA== IFNsdWc= TUFU IGNvbnZlcnRpYmxl IEJvdXJib24= YW1lcm9u IFJlaGFi bnRheA== IHBvd2RlcmVk cGlsbGFy IHNtb2tlcg== IE1hbnNvbg== IEJG NTEx IEdvb2RlbGw= IERBUg== bXVk Z2FydA== IG9iZWRpZW50 IFRyYW5zbWlzc2lvbg== IERvbmF0aW9u ODgw IGJvdGhlcmluZw== TWF0ZXJpYWxz 44Kx ZGVzdHJveQ== IGZvcmVnb2luZw== IGFuYXJjaGlzbQ== IEtyeQ== aWNlcHM= IGxpdHRlcmVk IFNjaGlmZg== IGFuZWNkb3RhbA== dW5pdHM= IGZpYW4= IFN0aW0= IFNPTUU= IEludmFkZXJz IGJlaGF2aW91cmFs IFZlbnR1cmVz IHN1YmxpbWU= IGZydWl0aW9u IFBlbmFsdHk= IGNvcnJvc2lvbg== toU= IGxpa2VuZWQ= IGJlc2llZ2Vk d2VlbmV5 IENyZWVw IGxpbmVtZW4= bXVsdGk= aWNhYmx5 dWRkZXI= IHZpdGFsaXR5 IHNob3J0ZmFsbA== IFBhbnRz YXBpc3Q= SGlkZGVu IERyb3Bz bWVkaWNhbA== IHByb251bmNpYXRpb24= IE5STA== IGluc2lnaHRmdWw= SlY= IEJlYXJk IENob3U= IGNoYXJtcw== IGJpbnM= IGFtYmFzc2Fkb3Jz IFNhdHVyZGF5cw== IGluaGliaXRvcg== IEZyYW5jaA== NjAx Jywn IENvbm9y YXJ0bmV5 IFhwZXJpYQ== Z3JhdmU= YmVlcw== IFByb3Rlc3RhbnRz IHNvYWtpbmc= IE1hbmRhbA== IHBoYXNlZA== IDY2MA== IHNjYW1z IGJ1enppbmc= IEl0YWxpYW5z IExvcmVuem8= IEpB IGhlc2l0YXRlZA== IGNsaWZmcw== IEdPVA== aW5ndWlzaGFibGU= IGtv IGludGVycnVwdGlvbg== Wmlw TGVhcm5pbmc= IHVuZGVyc2NvcmVz IEJsaW5r S3U= NTc5 IEF1dG9i SVJF IHdhdGVyaW5n IHBhc3RyeQ== ODIw IHZpc2lvbmFyeQ== IFRlbXBsYXI= YXdhaXRlZA== IHBpc3Rvbg== IGFudGlk Y3VycmVudGx5 IHBhcmQ= IHdhZ2luZw== IG5vYmlsaXR5 IFl1cw== IGluamVjdGluZw== ZmFpdGg= IFBBU1M= 5bo= IHJldGFrZQ== IFBST0M= IGNhdGhlZHJhbA== YmFzaA== IHdyZXN0bGVycw== IHBhcnRuZXJpbmc= IG5vc2Vz IDM1OA== VHJhbnNmb3Jt YW1lbg== IGJvdXRz IElkZWFs IENvbnN0YW50aW4= IHNlcA== IE1vbmFyY2g= YXR0ZW4= IFBlb3BsZXM= bW9kaWZpZWQ= IG1vcmF0b3JpdW0= IHBlbmNoYW50 IG9mZmVuc2l2ZWx5 IHByb3hpZXM= b2thbmU= IFRhaXdhbmVzZQ== IFBvbw== IEhPTUU= dXNpb25hbA== IHZlcmJz IE9tYW4= dmlzb3J5 IHBlcnN1YXNpb24= IG11bHRpdA== IHNjaXNzb3Jz R2F5 b3dheQ== b3BoeXNpY2Fs bHVz Z251 IGFwb2NhbHlwdGlj IGFic3VyZGl0eQ== IHBsYXlib29r IGF1dG9iaW9ncmFwaHk= SVVN IHNuZWFraW5n IFNpbXVsYXRpb24= cHBz ZWxsZXJ5 UGxhbmV0 IHJpZ2h0ZnVsbHk= IG5pZWNl IE5FQw== IElQTw== IERpc2Nsb3N1cmU= bGVhbm9y b3VzeQ== U1RFUg== IDI4Mg== Q3J1eg== Q2hhbGw= NjQz IFN1cnZpdmU= IEZhdGFs IEFtaWQ= YXBv V2VhcG9ucw== REVO Nzcw IEdyZWVud2FsZA== IGxpbmVu YWxvcw== IHBvbGx1dGFudHM= IFBDSWU= a2F0 IHBhdw== IEtyYWZ0 Q2hlbQ== IFRlcm1pbmF0b3I= IHJlaW5jYXJu IF1b IFNlZWRz IHNpbGhvdWV0dGU= IFN0b3Jlcw== IGdyb29taW5n IERpcmVjdGlvbg== IElzYWJlbA== IEJyaWRnZXM= 8J+R RUVE IE1vcnNp IHZhbHZlcw== IFJhbmtlZA== IFBoYXJtYQ== IE9yZ2FuaXphdGlvbnM= IHBlbmV0cmF0ZWQ= IFJvZGhhbQ== IFByb3Rvc3M= IG92ZXJlc3Q= IGV4YXNwZXI= IFRK IDAwMDAwMA== IHRyaWNrbGU= IGJvdXJib24= V0hP IHdyZXRjaGVk IG1pY3Jvc2NvcGlj IGNoZWNrbGlzdA== IGFkb3JuZWQ= Um95YWw= QWRtaW5pc3Q= IFJldGlyZW1lbnQ= IEhpZ2hlc3Q= V2VhdGhlcg== aWxlZ2U= IGluY3JlbWVudHM= IENvc3BvbnNvcnM= IG1hc3Nl IFNpbm4= cmY= IGhvcmRlcw== YXNzZW1ibHk= NzU0 IE5hdGFzaGE= IFRZUEU= IEdFTkVSQUw= IGFycmFuZ2luZw== IDQwNw== bGF0b3I= IGdsZWFu IGRpc2NyZWRpdGVk IGNsaW5pY2lhbnM= VU5F IGFjaGlldmVz IEVtZXJzb24= Y29tcGxleA== PVs= IHByaW5jaXBhbGx5 IGZyYWls cGlja2Vk IHRoYW5raW5n IHJlY2w= IExBU1Q= IHN1cHByZXNzaW5n aWxpYw== IGFudGlkZXByZXNzYW50 IExpc2Jvbg== IHRob3I= IHNwYQ== IGtpbmdkb21z IFBlYXJjZQ== ZW1v IHBsdW5n IGRpdmVzdA== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ymlz b3NwZWxz YWRy U3Bpcml0 aGFsbGE= UGluaw== ZW5kZXo= IHJlc3VycmVjdGVk ZXNjYXBl IFJvc2Vuc3RlaW4= IGdlb2xvZ2ljYWw= IG5lY2Vzc2l0aWVz IGNhcm5pdg== IEVseXM= IEJhcm5leQ== IDI5Ng== ZGlneQ== U1RPTg== RE9XTg== IG1pbGVzdG9uZXM= IGtlcg== IGRpc21hbnRsaW5n IHJlcHJpbQ== IGNyb3NzaW5ncw== MTk0NQ== IHBhdHJpYXJjaHk= IGJsYXNwaGVteQ== IDM1OQ== bWV0cnk= IE9iZXNpdHk= IERpZmZlcmVuY2Vz YmxvY2tpbmc= 44OV44Kh aWNoaXRh IFNhYmhh cGhhbHQ= IENvbG8= dWFsYQ== ZWZmaWNpZW50cw== IE1lZGluYQ== Y29uc29sZQ== NTU3 IEhhbm5pYmFs IEhhYml0 IEZldmVy IHRoZW5jZQ== IHN5bmFnb2d1ZQ== IGVzc2VudGlhbHM= IHdpbms= IFRyYWRlcg== SURB IFNwb2lsZXI= IEljZWxhbmRpYw== IEhheXdhcmQ= IHBlYWM= IG1hbGljZQ== IGZsYXNoYmFjaw== IHRodw== IGxheW9mZnM= TGlxdWlk IHRyb29wZXI= IGhpbmdl IFJlYWRlcnM= UGhpbGw= IEJhdWVy Q3JlYXRlZA== IGF1ZGl0cw== YWNjb21wYW4= IHVuc3VzcGVjdGluZw== aWVyYQ== NjY2NjY2NjY= IGJyb2No IGFwcHJlaGVuZGVk IE1hbGs= Y2VybmluZw== IENvZGV4 T1ZFUg== TWFyc2g= IERlbmc= IEV4cHJlc3Npb24= IGRpc3Jlc3BlY3RmdWw= IGFzY2VuZGluZw== dGVzdHM= IFBsYWludGlmZg== c3Rlcnk= IEFsaWJhYmE= ZGluYW5k IERlbXBzZXk= QXBwbGljYXRpb25z bW9yYWw= IHRocm91Z2hwdXQ= IHF1YXJyZWw= IG1pbGxz IGhlbW9y IENBU0U= dGVycm9yaXN0 c3RpbQ== aWZlc3R5bGU= cm96ZW4= Q0VQVA== QXJr dWNp bGVjdGlj IGlycml0YXRpbmc= c2hlZXRz QXk= IHJlZGVlbWVk IGhvcm55 IFRlYWNo IFNlYXI= ZGVtb2NyYWN5 NDY1 IFJlc3RvcmU= IHN0YW5kYnk= IFBpcw== aWZmaW4= IHNsZWVweQ== IGV4dHJhdGVy IGNvbXBsaW1lbnRz RnJhbWV3b3Jrcw== IGluc3RhbGxz IGJhbmdpbmc= c3VyZmFjZQ== Zm91bmRsYW5k IG1ldGFwaHlzaWNhbA== IDI4Mw== b3Vscw== ZGV2aWNlcw== QXJncw== IFNhY3JpZmljZQ== IE1jQ29ybQ== ZXNvbg== Q29uc2VydmF0aXZl IE1pa2hhaWw= c2VlaW5n aXNpdmVseQ== IFJvb21z IEdlbmVyaWM= IGVudGh1c2lhc3RpY2FsbHk= IGdyaXBwZWQ= IGNvbWVkaWM= IEVsZWN0cmljaXR5 IGd1ZXJyaWxsYQ== IGRlY29yYXRpb24= IFBlcnNwZWN0aXZl IGNvbnN1bHRhdGlvbnM= IHVuYW1i IHBsYWdpYXI= IG1hZ2ljaWFu IGVyZWN0aW9u IFRvdXJpc20= b3JpZWQ= cm94eQ== MTEwMA== VGFt iOg= zrM= 16o= IFByZWRhdG9ycw== Tml0cm9tZQ== IHRlbGVzY29wZXM= cHJvamVjdHM= IHVucHJvdGVjdGVk IHN0b2NrZWQ= IEVudHJlcHJlbmU= bmV4cGVjdGVk IHdhc3Rld2F0ZXI= VmlsbA== IGludGltYXRlbHk= IGlDbG91ZA== IENvbnN0YWJsZQ== IHNwb29m IG5lZmFyaW91cw== IGZpbnM= IGNlbnNvcg== IE1vZGVz IEVzcGVy YXJib24= IGludGVyc2VjdGlvbnM= IGxhdWRlZA== IHBoeXNp IGdlbmVyb3VzbHk= IFRoZU5pdHJvbWU= IFRoZU5pdHJvbWVGYW4= IGFyaXNlbg== INmI IGdsYW5kcw== IFBhdmlsaW9u IEd1cHRh IHVuaWZvcm1seQ== IHJhbXBz cmlldA== IFdIRU4= IFZhbmVzc2E= IHJvdXRlZA== IGxpbXA= IENQSQ== cHRlcg== aW50dWl0aXZl IHZhcGluZw== IGV4cGVyaW1lbnRlZA== IE9seW1wdXM= IEFtb24= IHNpZ2h0aW5n IGluZmlsdHJhdGU= IEdlbnRsZW1hbg== IHNpZ25pbmdz IE1lb3c= IE5hdmlnYXRpb24= Y2hlY2tz NDMz IGVsYXBzZWQ= IEJ1bGdhcmlhbg== ZXNwaWU= IFNPTQ== ZHVyaW5n IHNwaWxscw== YW5jYQ== IFBseW1vdXRo TUFM IGRvbWVzdGljYWxseQ== IFdhdGVyZ2F0ZQ== IEZBTQ== a2lsbGVk ZWRpdGVk IFlvdXJzZWxm IHN5bmNocm9uaXphdGlvbg== IFByYWN0aWNlcw== U1RFUA== IGdlbm9tZXM= IFFS bm90aWNl IGxvY2F0aW5n emlu IDMyOQ== YWxjb2hvbA== IGtpdHRlbg== Vm8= IHJpbnNl IGdyYXBwbGU= IFNjcmV3 IER1bA== QUlS IGxlYXNpbmc= IENhZsOp IHJvc2Vz IFJlc3BlY3Q= IG1pc2xlYWQ= IHBlcmZlY3RlZA== IG51ZGl0eQ== IG5vbnBhcnRpc2Fu IENvbnN1bXB0aW9u UmVwb3J0aW5n IG51YW5jZXM= IGRlZHVjdGlibGU= IFNob3Rz IDM3Nw== IOac YW5vb2dh QmVuZWY= IEJhbQ== IFNhbXA= aWZpeA== IGdhbHZhbg== IE1lZGFscw== cmFkaXVz IG5vYmxlcw== IGVhdmVz aWdyYXRl S1Q= IEhhcmJvdXI= dWVycw== IHJpc2tlZA== cmVx IG5ldXJvdA== Z2V0dGFibGU= YWluYQ== Um9tbmV5 IHVuZGVycGlu IGxvZnQ= IFN1YmNvbW1pdHRlZQ== IE1vbmdvbA== Yml6 IG1hbmlmZXN0cw== YXNzaXN0ZWQ= IEdhZ2E= IHN5bmVyZ3k= IHJlbGlnaW91c2x5 IFByZWY= IEdlcnJ5 VEFH IENob2k= NDY2 YmVoaW5k IE91 R29sZE1hZ2lrYXJw IGhlbW9ycmg= Uml2ZXI= IHRlbmRvbg== IGluanVyZQ== IEZpb25h IHBhZw== IGFnaXRhdGlvbg== fHx8fA== dXJhbg== IEVTQQ== IGVzdGVlbQ== IGRvZGdpbmc= IDQxMg== cnNz IGNlYXNlcw== ZXhjbHVkaW5n IGludGFrZXM= IGluc2VydHM= IGVtYm9sZA== IE9yYWw= dXB1bmN0dXJl NDEx IFVuaWZpZWQ= IERlbGU= IGZ1cm5hY2U= IENveW90ZXM= IEJyYWNo TGFib3I= IGhhbmRzaGFrZQ== IGJydWlzZXM= R3JhZGU= 6ZeY IEdyYW1teQ== aWxlZW4= U3RhdGVz IFNjYW5kaW5hdmlhbg== IEthcmRhc2g= ODY2 IGVmZm9ydGxlc3NseQ== IERJUkVDVA== IFRIRU4= IE1laQ== ZXJ0YXRpb24= MTk2OA== IGdyb2lu d2l0Y2g= UmVxdWlyZW1lbnRz OTg1 IHJvb2Zz IGVzdGF0ZXM= IEhG IGhhaGE= IGRlbnNlbHk= IE9DVA== IHBsYXN0aWNz IGluY2lkZW50YWxseQ== IFRyYWNrcw== IFRheGVz IGNoYW50ZWQ= IGZvcmNlZnVs IEJpZWJlcg== IEthaG4= S2VudA== IENvdA== bGljdHM= RmVk IGhpZGVvdXM= IFZlcmQ= IFN5bmRpY2F0ZQ== IElsbGVnYWw= SmV0 IERBVg== cmVhc29uYWJsZQ== Y3Jldw== IGZ1bmRhbWVudGFsaXN0 IHRydXRoZnVs IEppbmc= IGxpbA== IGRvd25lZA== IGVuY2hhbnRlZA== IFBvbGljaWVz IE1jTWFzdGVy IEhhcmU= aWRlc2hvdw== IHBhcmFtcw== ZW5jZXJz Z29yaXRobQ== IGFsbG93YW5jZXM= IHR1cmJ1bGVudA== IGNvbXBsZXhpdGllcw== IEtU IDMzNw== IEdlbmV0aWM= RlVO RG91Zw== dGljaw== IGdpZ3M= dW1lbnRoYWw= IHBhdHJpYXJjaGFs IGNhbGM= LC4uLg== IGNvdXQ= IEd1YW4= IHBhdGhvbG9naWNhbA== IFJpdmFscw== IHVuZGVycmF0ZWQ= IGZsdW9yZXNjZW50 IEppdQ== YXJuYWV2 IFF1YW4= IDQyOQ== IOCo TWFyaW8= Q29uc3RydWN0 IENpdGF0aW9u IFJhY2lhbA== IFJTQQ== IEZpZGVs IDM5NQ== UGVyc29uYWxseQ== Q2F1c2U= w7s= cmFkaWNhbA== aW5lbg== IHZlaGVtZW50bHk= IFBhcGE= IGludGVybnNoaXA= IGZsYWtlcw== IFJlY2s= THVja2lseQ== QnJh MjAyMA== cmF2aW5ncw== Uk4= V29uZGVy U2VyaW91c2x5 IHJldXNhYmxl IHBvbGx1dGVk IFBlbmc= bGVpZ2g= aW5kbGU= IGNpcmN1aXRyeQ== IE1hZG9ubmE= IEJBUlQ= UmVzaWRlbnRz YXR0cmlidXRl UGhpbGFkZWxwaGlh Q2x1Yg== IHBsYW5uZXI= IGZyYW50aWNhbGx5 IGZhaXRoZnVsbHk= IFRlcnJpdG9yaWVz IExBVA== IEFuZGVyc2Vu YW51 IFBBUks= IFNvcmE= aWFnZQ== IFBsYXlvZmZz IEdDQw== NDI3 IGFibm9ybQ== IExldmVy IGRpc29iZWRpZW5jZQ== QXN5bmM= IFNoZWE= VmVydA== IHNraXJ0cw== IFNhd3llcg== eHA= IHdvcnNlbmluZw== IHNjYXBlZ28= IEFuZ2xl b3RoYWw= IHRyb3Zl IFN0eQ== IE5ndXllbg== bWFyaW5l aWRlb24= RGVwdGhz QmxvZw== IElsbHVtaW5hdGk= IHRyYWN0cw== IG9yZ2FuaXNl IG9zdHI= RnM= IGxldmVyYWdpbmc= IERhcmVkZXZpbA== YXNhcg== IGxhbmc= IGV4dGVybWlu dXJzaW9ucw== IFJvbW8= 44Kk44OI IGNvbnRlbmRlZA== IGVuY291bnRlcmluZw== IFRhYmxldA== IEFsdGVybmF0ZQ== c2tpbGw= IHN3ZWV0cw== IGNvaGVzaXZl Y2FwYWNpdHk= IHJlcHVk IGxpemFyZA== cm9v IHBpbGdyaW1z IFJ1ZmY= IEluc3RydW1lbnQ= IExvZ28= dWl0b3Vz RUg= IHNhbGVzbWFu IGFua2xlcw== TGVk IFBhdHR5 dWRvcw== T3duZXI= IGRpc2NyZXBhbmNpZXM= a2o= TVU= IHVuY29uZGl0aW9uYWw= RHJhZ29uTWFnYXppbmU= aWFyZA== T2Fr IENvbnZlcnNhdGlvbg== YmVlcg== IE9zYWth RGVsdGE= dXNreQ== IHNlY3JldGlvbg== IHBsYXph IG1pbmc= IGRlcGxldGlvbg== IE1vdXM= IElUUw== IEhpbWFs IEZsZW1pbmc= IGN5dG9r IEhpY2s= IGJhdHRlcnM= IEludGVsbGVjdHVhbA== Njc1 w6ly SVNJT04= IFF1ZW50aW4= IENoYXB0ZXJz aWhhZGk= IGNvYXN0ZXI= V0FZUw== IExpemFyZA== IFlvcg== YW5kZXJpbmc= U2tpbg== aGF1c3Q= YWJieQ== IHBvcnRyYXlpbmc= IHdpZWxkZWQ= ZGFzaA== IHByb3BvbmVudA== IHJpcHBsZQ== IGdyYXBoZW5l IGZseWVy IHJlY3VycmVudA== IGRldmlscw== IHdhdGVyZmFsbA== 5piv Z29v VGV4dENvbG9y IHRhbXBlcmluZw== SVZFUw== VFJVTVA= IEFiZWw= IFNBTA== IEhlbmRyaWNrcw== IEx1Y2l1cw== Ym90cw== IDQwOTY= SVNUT1JZ R3Vlc3Q= IE5Y aW5hbnQ= QmVueg== IExvYWRlZA== IENsZXZlcg== dHJlYXRtZW50 IHRhdmVybg== IDMzOQ== IFROVA== aWZpY2FudGx5 VGVtcGVyYXR1cmU= RmVs IHVuZGVyd29ybGQ= IEp1ZGdlcw== IDwr IHN0dW1w IG9jY3VwYW5jeQ== IGFiZXI= IEZpbmRlcg== KSIs IE51bmVz cmVzZXQ= aW5ldA== ZWN0b215 IHdlbGxuZXNz IFBlYg== cXVhcnRlcmVk YW5kYW4= IG5lZ2F0aXZlcw== IFRoaWVs IENsaXA= IExURA== IGJsaWdodA== IHJlcGVydG9pcmU= S3lsZQ== IHF1ZXI= IENlcw== IGhhcGw= OTg5 IFRoYW1lcw== aXNjb3BhbA== RGVzaw== aXZhcmlhdGU= IEV4Y2VsbGVuY2U= Zm91bmRhdGlvbg== IOKH WGk= IG15c3RlcmlvdXNseQ== ZXN0eWxlcw== IHBlcmlzaA== IEVuZ2Vscw== IERFQUQ= MDkw fX19 IFVucmVhbA== IHJlc3RsZXNz SURFUw== b3J0aG9kb3g= IEludGVybWVkaWF0ZQ== IGRpbm5lcnM= IFRyb3V0 IFNleW0= IEhhbGxz b2dnZWQ= IHRyYWdlZGllcw== IGRpZG50 Njc2 IGFpbG1lbnRz IG9ic2VydmFibGU= IFZpZGU= YWRhcHQ= IER1c2s= IHByb2Zlc3Npb25hbGlzbQ== IFByZXNjb3R0 IEluZGllcw== cG94 IE1laHJhbg== V2lkZQ== IGVuZGVtaWM= IFBhcmFu QmlyZA== IHBlZGFscw== IElV IEFkYW1hbnQ= IEh1cnQ= IGNvcnJlbGF0ZXM= dXJkZW4= IHNwb25zb3Jpbmc= Y2xpbWF0ZQ== IFVuaXZlcnNpdGllcw== IEtub3Q= ZW5uZXM= IERhbWlhbg== IEF4ZWw= U3BvcnQ= IGJhcmI= IFNubw== c2hvd24= c3RlZW4= dWRlbmNl IG5vbnZpb2xlbnQ= IGhvbW9waG9iaWE= IGJpb21hc3M= IERldGFpbA== IHNyZk4= IFR1bmU= YWNjb21wYW5pZWQ= SUVOQ0U= QWxiZXJ0 IE1vbmdv eng= IENlcmJlcnVz b3JiaXQ= Y2Vucw== IHNsYXk= U0hBUkU= SFk= IGJyYXds IFByb2Jl IG5vbmV4aXN0ZW50 IENsYXJlbmNl IEJsYWNrYnVybg== IHBvcnRhbHM= IFJpdGE= IFJlbWFpbg== IExldmFudA== IHRyaWNrZWQ= IEZlcnJ5 YXZlcmluZw== IFN0cmF3YmVycnk= IEFuc3dlcnM= IGhvcnJlbmRvdXM= IEFtYW4= U3VwcGxlbWVudA== IFRvYWQ= IHBlZWxlZA== IG1hbm9ldXY= IFV6YmVr bW9uZHM= IEhlY3Rvcg== IDQwMg== cGVlcw== Zml4ZXM= IGRq IHJlc3VtZXM= IGFjY291bnRhbnQ= IGFkdmVyc2l0eQ== IGhhbXBlcmVk IExhcnNvbg== IGRvcGluZw== cGFydHM= SHVy IGJlYXJkZWQ= IHly IFBsdWdpbg== 5aWz IC8qKg== cm9sbGV5 IHdhdGVyc2hlZA== IFN1Ym1pc3Npb24= aWZsb3dlcg== QVND IGNob2ly IHNjdWxwdHVyZXM= bUE= aW5jcmVhc2luZw== YWlp IHNuZWFrZXJz IGNvbmZyb250cw== IEVsZXBoYW50 IEVsaXhpcg== IHJlY2Fs IFRUTA== d2lkZ2V0 IFdheA== IEdyYXlzb24= IGhhaXJzdA== IGh1bWlsaWF0ZWQ= IFdBUk4= YXBwaW5lc3M= IFRUQw== RnVlbA== IHBvbGlv IGNvbXBsZXhlcw== IGJhYmU= IFhJVg== UEY= KS5b UGFydHM= IDQzNQ== TWVn IFlhcmRz IEFMUA== IHllbGxz IHByaW5jZXM= IGJ1bGxpZXM= IENhcGl0YWxpc20= ZXhlbXB0 RkFR IFNwb25nZQ== IEFsYQ== IHBsZWFzYW50bHk= IGJ1Zg== IGRlbm90ZQ== IHVucHVibGlzaGVk IGtuZWVsaW5n YXNjYQ== IGxhcHNl YWxpZW4= OTk0 IHJlZmVyZWVz IExhd3llcnM= U2FudGE= IHB1enpsaW5n IFByb21ldGhldXM= IFBoYXJhb2g= IERlbGF5 IGZhY2lsaXRhdGVz IENFUw== IGpld2Vscw== IGJvb2tsZXQ= b25kaW5n IHBvbGFyaXphdGlvbg== IE1vcmFu IFNhbGFk IFNPUw== IEFkdmljZQ== UEhPVE9T SUNBTg== aWF0dXJlcw== ZXhwcmVzcw== IFdvbmRlcmxhbmQ= IENPREU= IENMQVNT OTc1 IGdyZXA= IERpZXNlbA== IEdsYWM= IT8i IHJt b2luZQ== ZGlzY3JpbWluYXRpb24= IE51cnNl bWFsbG93 IHZvcnRleA== IENvbnNvcnRpdW0= IGxhcmdlRG93bmxvYWQ= c3RyYWlnaHQ= YXVnaGxpbg== R3JhZA== IHB1YmxpY2l6ZWQ= IFdhdmVz IFJlZGQ= IGZlc3Rpdml0aWVz IE1hbmU= YXJvdg== IGZsZWV0aW5n IERydW5r dWdlbg== Q2VsZQ== IGNocm9tb3NvbWVz IERPVA== LSstKy0rLSs= IGJ1c2llc3Q= IEJlYXZlcg== U3lyaWFu IEt5cg== a2Fz IENyb3NzUmVm MTk1MA== NzYwMQ== IHJlcGVhbGluZw== IFdpbm5lcnM= IE1hY3Jv IERPRA== YmxhbmNl U29ydA== NjQx IG1ldHJl IERpcms= IGdvZ2dsZXM= IGRyYXdiYWNrcw== IGNvbXBsYWluYW50 IGF1dGhvcml6aW5n IGFudGl0cnVzdA== b3BlcmF0ZWQ= IG1haA== IGV4YWdnZXJhdGlvbg== QW1hemluZw== IFNlcmFwaA== IGhhemU= d293 IGV4dGluZ3Vpc2hlZA== IGNhbnlvbg== IEJvc2g= IHZlbnRz IHNjcmFwZQ== Q29ycmVjdA== NDI2 IGF2Zw== RGVtYW5k IOKIvA== IG1pY3JvYmlvdGE= In1dLCI= IFN0ZXY= Qmlv IFBsYW5lcw== IHN1Z2dlc3RpdmU= IGRlY2lwaGVy IFJlZnVnZWU= IEtlanJpd2Fs IEdyZWVucGVhY2U= IGRlY2xhc3M= IFNvdW5kZXJz IHRobw== IGRlY3J5cHQ= IGJydXNoaW5n IEphbmVpcm8= aXBvcA== U2k= ODc3 IEdlb2ZmcmV5 IGNwdQ== IEhhemVs IHZpZXdwb2ludHM= IGNyaXNweQ== IE5vdGlmaWNhdGlvbg== IHNvbGRlcg== IE1vZGVzdA== IEhlbWlzcGhlcmU= IGNhc3NldHRl aW5jbHVkZXM= IGlkZW50aWZpZXJz IENBTEw= aW5jZW50 VG9kZA== IFN3ZWVw IDMzNA== Ym9zcw== IHNtaXI= Z2lueA== IHRvd25zaGlw IGdyaWV2aW5n IE1vc3F1ZQ== TmV0ZmxpeA== QVNFRA== IE1pbGxlbm5pYWxz b2NvbQ== MTk2Nw== IGJvbGRseQ== c2xlZXA= IGVzY2hl YXJpanVhbmE= IHN3aXJs IFBlbmFs IG5lZ2xpZ2VudA== IFN0ZXBoZW5zb24= S0VS IFpvcm8= cmlzaXM= IGxvY2FsaXphdGlvbg== IFNleW1vdXI= IEFuZ2xpYw== cmVkaXRhdGlvbg== cHJvdGVjdGlvbg== IFBhaWdl IG9taXQ= IFJvdXNzZQ== IFR1Yg== IGludml0YXRpb25z dHR5 IG1vc3M= cGh5c2ljYWw= Q3JlZGl0cw== IGFuYXJjaHk= IGNoaWxkY2FyZQ== IGx1bGw= IE1law== IExhbmd1YWdlcw== bGF0ZXN0 IFNhbmZvcmQ= IHVzYWJpbGl0eQ== IGRpZmZ1c2U= IERBVEE= IHNwcml0ZXM= IFZlZ2V0YQ== IFByb21vdGlvbg== 44O844Kv cmljdGluZw== emVl VHVya2lzaA== IFREcw== cHJvdmVu NTcx IHNtdWdnbGVycw== NzA3MTA= IHJlZm9ybWVk IExvaXM= IHVuZmw= IFdJVEhPVVQ= IFJldHVybmluZw== YW5uaWU= IFRvbWFz RnJhbmM= IFByb2ZpdA== IFNFUlY= IFJ1bWJsZQ== aWt1bWFu ZXNhbg== IHRlc3RlcnM= IGdhZGdldA== IGJyYWNlbGV0 IEZTQQ== Y29tcG9uZW50 IHBhcmFtZWRpY3M= IGphbg== IFJlbWVt IFNraW5uZXI= IGxvdg== IFF1YWtl cm9tYQ== IGZsYXNr UHJpbmM= IG92ZXJwb3dlcg== IGxvZGdpbmc= IEtLSw== cmV0dGU= IGFic29yYnM= d3JvdGU= ICwi S2luZ3M= IEhhaWw= IEZhbGxpbmc= eHRhcA== IEhlbGVuYQ== aXJlbnM= TGFycnk= IHBhbXBobGV0 IENQUg== R3Jv IEhpcm9zaGltYQ== IGhvbGlzdGlj Ii5b IGRldGFjaG1lbnQ= IGFzcGlyZQ== IGNvbXBsaWNpdA== IEdyZWVud29vZA== IHJlc3Bhd24= IFN0dXBpZA== IEZpbmlzaGVk ZmFs YmFzcw== IGFiaG9y IG1vY2tlcnk= IEZlYXN0 VklERU8= IGNvbnNlYw== IEh1bmdyeQ== UHVsbA== IEh1c3Q= aXRhbmNl P+OAjQ== KS0t IFBhcmFsbGVs Y29udg== NDY5 aGFhcg== d2FudA== UGFwZXI= bWlucw== IFRvcm8= IFRSVU1Q IFJhaQ== RFc= IFdpY2tlZA== IExlcA== IGZ1bmt5 IGRldHJpbWVudA== aW9zaXM= YWNoZXY= IGRlZ3JhZGU= aW1pbGF0aW9u IHJldGFyZA== IGZyYWdtZW50YXRpb24= IGNvd2JveQ== IFlQRw== IEhBTA== UGFyZW50cw== IFNpZWc= IFN0cmF1c3M= IFJ1YmJlcg== 15A= RnJhZw== IHB0 IG9wdGlvbmFsbHk= IFpJUA== IFRyYW5zY3JpcHQ= IER3ZWxs ODgy TWVyYw== IE1PVA== 44Ov44Oz IGh1bnRz IGV4ZWN1dGVz SW5jbHVkZXM= IGFjaWRpYw== IFJlc3BvbnNpYmlsaXR5 IER1bWI= d2Vp QW5kZXJzb24= IEphc3Blcg== aWdodG9u YWJzb2x1dGVseQ== QWR1bHQ= IHBsdW5kZXI= TW9ybmluZw== IFRvdXJz IERhbmU= zro= IFRFU1Q= IEdpbmE= IGNhbmluZQ== YXdhbg== IHNvY2lhbGlzdHM= IFNvZGE= IGltcGV0dXM= IFN1cHBsZW1lbnRhcnk= b2xpYXRo IEtpbm5pa3VtYW4= bWl0dGVkbHk= c2Vjb25kcw== IG9yZ2FuaXNlcnM= IGRvY3VtZW50YXJpZXM= VmFyaWFibGU= R1JFRU4= IHJlc29ydHM= IGJyYWdnaW5n IDM2OA== QXJ0aXN0 d2s= YmxlcnM= VW5jb21tb24= IFJldHJpZXZlZA== IGhlY3RhcmVz IHRveGlu cmFuaw== IGZhaXRocw== IEdyYXBoaWM= IHZlYw== IExJQQ== QWZyaWNhbg== IGFyZGVudA== ZW5kaWFyeQ== TGFrZQ== IERPUw== Y2llbnRpb3Vz IE9rYXdhcnU= IEFsbHk= IFRpbWVsaW5l RGFzaA== IElj Y29udGludWU= IHRpZHk= IGluc3RpbmN0aXZlbHk= IFBvc3NpYmx5 IE91dGRvb3I= IFdvdWxkbg== IGxpY2g= IEJyYXk= IEFY IMOJ ICsj XCc= RGlyZWN0b3J5 YWJpZGluZw== IGZlcmFs aWNhdGl2ZQ== YnV0dA== IHBlcnZlcnNl U2FsdA== IHdhcnBlZA== IG5pbmV0ZWVu IGNhYmluZXRz IHNyZkF0dGFjaA== IFNsb2Fu IHBvd2VyaW5n cmVnYXRpb24= RmxpZ2h0 c2V2ZXJl IHN0cmVu IGNvZw== YXBhY2hl IOKd IGNhZmV0ZXJpYQ== cGFjZXM= IEdyaW1vaXJl dXRvbml1bQ== IHJhaW5pbmc= IGNpcmNsaW5n IGxpbmViYWNrZXJz Y3JlZGl0 IHJlcGF0cmk= IENhbWRlbg== bGljZW5zZQ== IGx5cmlj IGRlc2NyaXB0b3I= IHZhbGxleXM= IHJlcQ== IGJhY2tzdGFnZQ== IFByb2hpYml0aW9u IEtldA== T3BlbmluZw== U3lt 5pa5 IHNlcnZpbmdz IG92ZXJzZWVu IGFzdGVyb2lkcw== IE1vZHM= IFNwcmluZ2Vy IENvbnRhaW5lcg== 6Ls= IE1lbnM= IG11bHRpbQ== IGZpcmVmaWdodGVy cGVj IGNobG9yaW5l 0Lw= ZW5kaQ== IHNwYXJpbmc= IHBvbHlnYW15 IFJO IFBlbGw= IHRpZ2Vycw== IGZsYXNoeQ== IE1hZGFtZQ== U3dvcmQ= IHByZWZyb250YWw= IHByZXJlcXVpc2l0ZQ== dWNh IHdpZmk= IG1pc2NvbmNlcHRpb24= IGhhcnNobHk= IFN0cmVhbWluZw== b3RvbQ== IEdpdWxpYW5p Zm9vdGVk IHR1YmluZw== aW5kaXZpZHVhbA== emVr bnVjbGVhcg== bW9s IHJpZ2h0ZnVs NDkz IHNwZWNpYWxpemF0aW9u IHBhc3Npb25hdGVseQ== IFZlbG9jaXR5 IEF2YWlsYWJpbGl0eQ== VGVubg== IGxhdGNo IFNvbWVib2R5 IGhlbGl1bQ== Y2xhdw== IGRpcHBpbmc= WFhY IGludGVycGVyc29uYWw= NzEw IHN1YnRlcg== IGJpb2xvZ2lzdHM= IExpZ2h0aW5n IG9wdGlj IGRlbmlt ZW5kb24= IENvcm0= IDM0MQ== IENvdXA= IGZlYXJsZXNz IGFsb3Q= IENsaWZmb3Jk IFJ1bnRpbWU= IFByb3Zpc2lvbg== dXBkYXRlZA== bGVuZWNr IG5ldXJvbg== IGdyYWRpbmc= IEN0 c2VxdWVuY2U= aW5pYQ== Y29uY2VwdA== IHJvYXJpbmc= cml2YWw= IENhdWNhc2lhbg== IG1vbm9n a2V5ZXM= IGFwcGVsbGF0ZQ== IGxpYWlzb24= RVN0cmVhbUZyYW1l IFBsdW0= IS4= IHNwaGVyaWNhbA== IHBlcmlzaGVk IGJsb3Q= IGJlbmNoZXM= IDQxMQ== IHBpb25lZXJlZA== IGh1cmxlZA== SmVubmlmZXI= IFlvc2VtaXRl Q2hhaXI= IHJlZWZz IGVsZWN0b3I= IEFudGhlbQ== NjUy IHVuaW5zdGFsbA== IGltcGVkZQ== IGJsaW5raW5n IGdvdG8= RGVjcmU= QXJlbg== IHN0YWJpbGl6YXRpb24= IERpc2FibGVk IFlhbnVrb3Z5Y2g= IG91dGxhd2Vk IFZlbnR1cmE= dGVuZXNz IHBsYW50YXRpb24= IHlhY2h0 IEh1YXdlaQ== IHNvbHZlbnQ= IGdyYWNpb3Vz IGN1cmlvdXNseQ== IGNhcGFjaXRvcg== IGN4 IFJlZmxleA== UGh5cw== IENm cHRpbg== Y29uc2VydmF0aXZl IGludm9jYXRpb24= Y291cg== Rk4= IE5ld2x5 SG91cg== QXNpYW4= IExlYWRpbmc= IEFlcm9zcGFjZQ== QW5uZQ== IHByZW5hdGFs IGRldGVyaW9yYXRpbmc= SENS IE5vcm1hbmR5 b2xpbmk= IEFtYnJv OTEw IHNldGJhY2tz IFRSRQ== IHNpZw== IFNjb3VyZ2U= NTk3 Nzk4 R2FtZXBsYXk= IG1zZWM= TVg= IHByaWNleQ== IExMUA== YWtlcnU= IG92ZXJhcmNoaW5n IEJhbGU= IHdvcmxkbHk= Q2xhcms= IHNjZW5pYw== IGRpc2xpa2Vk IENvbnRyb2xsZWQ= VGlja2V0cw== IEVX YWJpZXM= IFBsZW50eQ== Tm9uZXRoZWxlc3M= IGFydGlzYW4= VHJhbnNmZXI= IEZhbW91cw== IGluZmllbGQ= YmxleQ== IHVucmVzb2x2ZWQ= IE1MQQ== 44KC Q29ycmVjdGlvbg== IGRlbW9jcmF0 IE1vcmVubw== cm9jYWw= aWxpbmdz IHNhaWxvcg== IHJpZmU= aHVuZw== IHRyb3Blcw== IHNuYXRjaGVk IExJTg== IEJpYg== RVNB IFByZXY= IENhbWVs cnVudGltZQ== IG9ibm94aW91cw== NDM3 IHN1bW1lcnM= IHVuZXhwbGFpbmVk IFdhbHRlcnM= Y2FsaWJlcg== IGd1bGw= IEVuZHVyYW5jZQ== 5L2c IDM0Nw== SXJpc2g= IGFlcm9iaWM= IGNyYW1wZWQ= IEhvbm9sdWx1 4Kk= dXNlcmM= ZWNhc3Q= QUNZ IFF1ZXJ5 44K544OI QmV0YQ== IHN1c2NlcHRpYmlsaXR5 IFNoaXY= IExpbWJhdWdo IMOW IE5YVA== IE11c3M= IEJyaXRvbnM= RVNDTw== RUdJTg== ICUl IHNlY2Vzc2lvbg== IFBhdHJvbg== IEx1YQ== bmFpcmVz IEpQTW9yZ2Fu dXNi b2N5dGU= IGNvdW5jaWxsb3Jz IExpYW5n ZmFybQ== IG5lcnZvdXNseQ== IGF0dHJhY3RpdmVuZXNz IEtvdg== anVtcA== UGxvdA== IHN0YWlucw== IFN0YXR1ZQ== IEFwb3N0bGVz aGV0ZXI= IFNVUFBPUlQ= IG92ZXJ3aGVsbQ== WUVT IDI5MQ== ZGVuc2l0eQ== IHRyYXBwaW5n TWl0 IGZpZGU= IFBhbWVsYQ== YXRsYW50aWM= RGFtbg== IHB0cw== T1BB IHNlcnZpY2luZw== IG92ZXJmbG93aW5n dWxv IEVyaXQ= dGlja2V0 bGlnaHRpbmc= IEhtbQ== 44O844Or aW1vdG8= IGNodWNrbGU= NDIz 44GV c2hhcGU= IHF1ZXVlcw== IGFuY2hvcnM= 44K844Km44K5 RmVy IGF3b2tl IDY2Ng== aGFuZHM= IGRpdmVyZ2VuY2U= IDUwNQ== VGlwcw== IGRlcG90 IHNrZXc= IERlbGl2ZXI= b3BvdA== IGRpdnVs IEVC dW5zaWduZWQ= IFVuaQ== WGJveA== IGZvcmtz IDcwMg== 5a8= IHByb21vdGVycw== IFZhcG9y IGxldmllZA== c2xvdA== IHBpZ21lbnQ= IGN5bGluZGVycw== Q1JF IHNuYXRjaA== IHBlcnBldHVhbGx5 IGxpY2tpbmc= IEZlZXQ= IEtyYWtlbg== IEhvbGRlbg== IENMU0lE bXI= IHByb2plY3Rvcg== IGRlbm90ZXM= IGNoYXBlbA== IFRvcnJlbnQ= Ymxlcg== Um91dGU= IERlZmVuZGFudA== IFB1Ymxpc2hlcnM= IE1hbGVz IElubm92 IEFnaWxpdHk= cml0ZXI= dHltb2xvZ3k= c3RvcmVz TGluZA== IGZvbGx5 IFp1cmljaA== Qmxl IG51cnR1cmU= IGNvYXN0bGluZQ== dWNoaW4= RG9taW4= IGZyaXZvbA== IENvbnNvbGlk cmVzdWx0cw== TUo= IHBoeWxvZ2Vu IGhhdWxlZA== IFdpbGV5 IEplc3NpZQ== IFByZXBhcmU= IEVwcw== IHRyZWFzdXJlcg== SUFT IGNvbG9uaXN0cw== IGludW5k IFdXRg== IENvbnZlcnRlZA== NjAwMA== b3V0c2lkZQ== IEFwcGVhcmFuY2U= IFJlbGlj IE1pc3Rlcg== c2F3 IHJlc3VsdGFudA== IGFkamVjdGl2ZQ== IExhdXJlbA== IEhpbmRp YmRh UGVhY2U= IHJlYmlydGg= IG1lbWJyYW5lcw== IGZvcndhcmRpbmc= IGNvbGxpZGVk IENhcm9seW4= S2Fuc2Fz NTk5 IFNvbGlkR29sZE1hZ2lrYXJw QmVjaw== IHN0cmVzc2luZw== IEdvbw== IENvb3BlcmF0aXZl IGZz IEFyY2hpZQ== TGl0ZXI= IEtsb3Bw SmVycnk= IGZvb3R3ZWFy V2FycmVu IHNjcmVl aGFyZQ== VW5kZXJzdGFuZGluZw== UGVk IGFudGhvbG9neQ== IEFubm91bmNl TWVnYQ== IGZsdWVudA== IGJvbmRhZ2U= IERpc2NvdW50 aWxpYWw= Q2FydA== IE5pZ2h0bWFyZXM= U2hhbQ== IEJvbGw= dXNzaWU= SHR0cA== QXRsYW50YQ== IHVucmVjb2du IEJpZA== IHVuZGVyZ3JhZA== IGZvcmdpdmluZw== IEdsb3Zlcg== QUFBQUFBQUE= NDQ1 Vkc= cGFpbw== a2lsbGVycw== IHJlc3BvbnNpYmx5 IG1vYmlsaXpl IGVmZmVjdGVk IEx1bWlu IGthbGU= IGluZnJpbmdpbmc= YW5ub3VuY2Vk IGZpdHQ= YmF0Y2g= IFRhY2tsZQ== IExpbWU= IEFQUA== dWtlbWlh IHJ1Ynk= IGV4b25lcg== IENhc3VhbA== MDcw IHBlbHZpYw== IGF1dG9tYXRl IEtlYXI= IENvYXN0YWw= IGNyZWVk IGJvcmVkb20= IFN0dW4= cmlvdHQ= go4= IHJlZ2VuZXJhdGU= IGNvbWVkaWFucw== IE9QRVI= U3BvbnM= aWRpdW0= b25pcw== TG9jYXRlZA== MDU3 IHN1c3BlbnNl IERhdGluZw== Q2Fzcw== IG5lb2NvbnM= IFNoaW56bw== IGF3b2tlbg== Y2hyaXN0 IE1lc3NhZ2Vz YXR0bGVk IFNwcmF5 IFNwaWNl Q1c= IHNoaWVsZGluZw== IEdhdWw= QW1pZA== IHBhcmFtaWxpdGFyeQ== IG11bHRpZg== IFRhbm5lcg== aWxr IGdvZGRhbW4= Z2VtZW50cw== IGJlZnJpZW5k bW9iaQ== IDM4OA== Zm9sZGVy YWNjYQ== IGluc2lu Z2Fw TmV2 ZmlmdGg= IHBzeWNoaWF0cnk= YmFua3M= VEhJUw== IGhhcmI= YWNxdQ== IGZhY2FkZQ== IFBvd2VyUG9pbnQ= ODAz IGJsdWZm U2hhcmVz IGZhdm9yaW5n RWxpemFiZXRo w43DjQ== IHJhbmdlcg== Nzcy IEFyY2hl aGFr IEdlbmV0aWNz IEZFTUE= IGV2b2x2ZXM= IGVzdGU= IFBldHM= IE3DqQ== IEludGVyZXN0aW5n IENhbnRlcmJ1cnk= Y2hhcHRlcg== IFN0YXJmbGVldA== U3BhbmlzaA== IGRyYXdiYWNr IE5vcndpY2g= OTcw bm9ydGg= YWdhbmRh IHRyYW5zZm9ybWF0aXZl cmFtaWRz YmlvbG9neQ== YWRheQ== IHByb3BhZ2F0aW9u IEdhbW1h IERlbmlzZQ== IENhbGN1bGF0b3I= ZW50aW1lcw== IEJldHQ= IGFwcGVuZGl4 IEhERA== QUtJTkc= IHN0aWdtYXQ= IGhvbHN0ZXI= IG9yZGluYXJpbHk= Q2hhbmNl IENvbnRyYXJ5 IGFkaGVzaXZl IGdhdGhlcnM= NjEy cmVhdQ== b255bXM= ZXdheXM= IGluZHVjZXM= IGludGVyY2hhbmdlYWJsZQ== c2Vt V2hpdA== IHRyYW5jZQ== IGluY29ycG9yYXRpb24= IEV4dHJhcw== RmluYW5jaWFs IGF3a3dhcmRseQ== IFN0dXJnZW9u IEhZ Tm9ybWFsbHk= IEVuZGluZw== IEFzc2lzdA== ZW5jcnlwdGVk IHN1Ymp1Zw== IG5vcw== IGZhbmF0aWM= Q3Vi Q1U= PyIu IGlycmV2ZXJzaWJsZQ== 5YI= MDMx IEhBUg== c3ByZWFk dWxpYQ== PSQ= U2NvcGU= TG90cw== IGxpZmVzdHlsZXM= b2xvbg== IGZlZHM= IGNvbmdyYXR1bGF0ZQ== d2Via2l0 IGluZGlzdGluZ3Vpc2hhYmxl IFN3aW5n IGNvbW1hbmRtZW50cw== cXVpbGE= YWJlbGxh bWV0aHls YW5uYWJpbg== IG92ZXJl IGxvYnN0ZXI= IFFVRVNU IENPTlRJTg== YmVybmF0b3JpYWw= Ojo6Ojo6Ojo= IFRyYXZl IFNhbW9h QU5J NzUy 0LQ= dXNlcmNvbnRlbnQ= IE1vZGVyYXRl eWVhaA== IEtpdHQ= IHdlZQ== IHN0dWZmaW5n IEludGVydmVudGlvbg== IERpZ24= IHdhcmVob3VzZXM= IEZpamk= IHBlbGxldHM= IHRha2Vhd2F5 IFRBQkxF IENsYXNzaWNhbA== Y29sbGVjdGlvbg== IGxhbmRmYWxs IE11c2NsZQ== IHNldHRsZXM= IEFEVg== IDM0NA== TGF1cmE= IGZhcmVk IFBhcnRpYWw= NDM2 b3NzaWJpbGl0eQ== IERhbHk= IFRhcmFudA== IEZ1amk= YW1s Y2VuY2U= NTUx IFByb2NlZHVyZXM= IE9DRA== IFVE dGlu UVVJ YWNobw== NDM4 IGdsaXRjaGVz IGVuY2hhbnRtZW50 IGNhbGN1bGF0ZXM= SVJP IEh1YQ== YWx5c2Vz IExpZnQ= dW1v IGxlYXB0 IGh5cG90aGVzaXplZA== IEd1c3Rhdg== aXRhbnM= VkVSU0lPTg== 5qA= Um9nZXI= IHJhbmQ= IEFkYXB0ZXI= IDMzMQ== IFBldGl0aW9u a2llcw== TWFycw== IHVuZGVyY3V0 emVlcw== IEx5b25z IERIQ1A= TWlzc2luZw== IHJldGlyZWVz IGluc2lkaW91cw== ZWxp Pik= LuOAjQ== IGZpbmFsaXN0cw== IEF1cmU= IGFjY3VzZXI= IHdhc3Rlcw== IFlz IExvcmk= IGNvbnN0aXR1ZW5jaWVz IHN1cHBlcg== IG1heWhlbQ== b3Jhbmdl IG1pc3BsYWNlZA== IG1hbmFnZXJpYWw= IGV4Y2U= IENMSQ== IHByaW1hbA== IExlbnQ= Q3J5c3RhbA== aG92ZXI= IE5UUw== ZW5kdW0= IGR3 IEFsYw== bm9zdGlj IHByZXNlcnZlcw== IFRzYXJuYWV2 IHRyaXBsZWQ= cmVsYXRpdmU= QXJjYWRl a2lsbGluZw== IFdFRUs= IEhhbm5h RHVzdA== Q29tcGxldGVk gas= IGFwcHJvdmVz IFN1cmY= IEx1dGhlcmFu dmVuYW50cw== IHJvYmJlcmllcw== d2VpZ2h0cw== c29mdHdhcmU= YXRhbmE= dWdhbA== IGdyYXZ5 IENhbmNl T0xPR1k= bHlhaw== VG9uaWdodA== IHVudmVpbA== IDE5MDQ= IE1pbmlvbg== ZW50aW91cw== c3RpY2U= cGFja2FnZXM= IEdFQVI= IGdvbA== IEh1dGNoaW5zb24= IFByb2Zlc3Npb24= IEdVTg== IERpZmZlcmVuY2U= IFRzdWt1eW9taQ== IExlc2JpYW4= Njcw IGZ1Z2l0aXZl IFBsYW5ldGFyeQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGFjY3J1ZWQ= IGNoaWNrcw== IHN0b3Bw IGJsb2NrZXJz Q29k IGNvbW1lbnRlcnM= IFNvbWV3aGVyZQ== IFBob3RvZ3JhcGhlcg== dGhlbWU= IG1heW9yYWw= d3U= IGFudGVubmFz IHJldmFtcGVk IFN1YmplY3Rz aXTDqQ== aW11cmE= IGVudHJhbmNlcw== bGl0ZXJhbGx5 IHRlbmV0cw== IE9NRw== IE1QSA== IERvbmtleQ== IE9mZmVuc2U= ICIr U25hcA== IEFGQg== IGFuaW1hdGU= IFNvZA== SGlzcGFuaWM= IGluY29uc2lzdGVuY3k= RGI= Rlk= RXhwb3J0 IGFwZQ== IHBlYXJs aWJlbA== IFBBQ3M= IHtc IGFjdHU= IEhTQkM= Y2FtcHVz IHBheW9mZg== IGRlaXRpZXM= IE5hdG8= b3VwbGU= IGNlbnNvcmVk IENsb2p1cmU= IGNvbmZvdW5kaW5n ZW5p IHJlY2tvbg== b3BoZQ== IHNwb3R0aW5n IHNpZ25pZmllcw== IHByb3BlbA== IGZlc3RpdmU= U3VnZ2VzdA== IHBsZWRnaW5n IEJlcm1hbg== IHJlYmVsbGlvdXM= IG92ZXJzaGFkb3dlZA== IGluZmlsdHJhdGVk am9icw== Njcy IHNjYWxhYmxl IGRvbWluaW9u IE5ld2ZvdW5kbGFuZA== IE1lYWRvdw== IHBhcnRpdGlvbnM= QU1J IHN1cHBsZW1lbnRhcnk= c3RydW1lbnQ= IGhhaXJ5 IHBlcnBldHVhdGU= IG51dHNoZWxs IFBvdGF0bw== IEhvYmJpdA== IGN1cnNlcw== RmxvYXQ= IHF1aWV0ZXI= IGZ1ZWxpbmc= IGNhcHN1bGVz IEx1c3Q= IEhhdW50ZWQ= RXhlY3V0aXZl IGNoaWxkYmlydGg= R3Jl IHJhZGlhbnQ= 5Y4= IG1hbGxz IGluZXB0 IFdhcnJhbnR5 IHNwZWN0YXRvcg== RWg= dGhlbnM= IGN1bG1pbmF0aW5n 5qk= YXJ5YQ== 44Ku aWxpdGFyaWFu IE9SSUc= IFNwZW5kaW5n cHRpdmVz IFNpcmVu IFJlY29yZGluZw== YXluZQ== IHZpbQ== IHNwcmFuZw== VGFuZw== IE1GVA== bW9ybmluZw== IFdlZWQ= bXBlZw== Y2Vzc2lvbg== IENodW5n NzMw d2FybmluZw== NTYy aGFuZGVkbHk= UG9vcg== UG9saXRpY3M= OiM= IHBpYW4= IGZlY2Vz IERvY3VtZW50YXRpb24= IGJhbmlzaGVk IDM5OQ== IEFSQw== IGhlaW5vdXM= SmFrZQ== IEFtaXI= d2F5bmU= dnJl b3NoZW5rbw== IG5vdGVib29rcw== IGZvdW5kYXRpb25hbA== IG1hcnZlbG91cw== aXh0YXBl IHdpdGhkcmF3YWxz IGhvcmRl IERoYWJp aXNhYmxl IEtE IGNvbnRhZ2lvdXM= IERpcA== IEFycm93cw== IHByb25vdW5z IG1vcnBoaW5l IEJVUw== Njgy IGtvc2hlcg== ZmluaXNoZWQ= IEluc3RydW1lbnRz IGZ1c2Vk eWRlbg== IFNhbG1vbg== RmFi YWZmZWN0ZWQ= S0VO Q0VOVA== RG9tYWlu IHBva2Vtb24= IERyaW5raW5n R3Jvd2luZw== IEludmVzdGlnYXRpdmU= IEFldGhlcg== ZW1p IHRhYmxvaWQ= IHJlcHJv IE5vdHdpdGhzdGFuZGluZw== IEJlcnNlcmtlcg== IGRyYW1hcw== IGNsaWNow6k= IGJ1bmc= IFVSSQ== IERvcw== MDQ0 IHBhc3RvcnM= IGxz IGFjcnlsaWM= YXVudHM= RWR3YXJk IG1ham9yaXRpZXM= QmFuZw== IGZpZWxkaW5n IFJlcGxhY2VtZW50 IEFsY2hlbXk= cHBhcmQ= IFJvbWVv IFNhbmN0 IExhdnJvdg== aWJibGU= SW5zdHJ1Y3Q= IGltcHJhY3RpY2Fs IFBsYXlib3k= Y2VwaGFs IHN3YXBz IGthbg== IFRoZW8= IGlsbHVzdHJhdGluZw== IGRpc21hbnRsZWQ= IFRyYW5zZ2VuZGVy IEd1dGg= VUdI IHRyaXVtcGhhbnQ= IGVuY29tcGFzcw== IGJvb2ttYXJr dWRkaW4= amVy IHByZWRpY2F0ZQ== RVNI IHdoZW5jZQ== IEFCRQ== IG5vbnByb2ZpdHM= U2VxdQ== IGRpYWJldGlj IHBlbmQ= IGhlYXJ0ZmVsdA== c2hp IGludGVyYWN0cw== IFRlbGVjb20= IGJvbWJhcmRtZW50 ZGVwZW5kaW5n IExvd3J5 IEFkbWlzc2lvbg== IEJsb29taW5n dXN0cmF0aW9u ZW5lZ2dlcg== QnJldw== IG1vbHRlbg== IE5lcmQ= UElO 4paA YXZlbWVudA== IHRvdXJlZA== IGNvZWZmaWNpZW50cw== IFRyYXl2b24= YW5zc29u IHNhbmR5 dG9sZA== Zmxvd3M= IHBvcHVsb3Vz IFRpbmRlcg== IEJsaXNz UmFjaGVs TWluaW11bQ== IGNvbnRlc3RhbnQ= IFJlZHVjZQ== IE1vcnNl IEdyYXNzbGV5 IENsaWNrZXI= IGV4cHI= IHNpbmNlcml0eQ== IG1hcnF1 IGVsaWNpdA== IFByb3Bvc2l0aW9u IERlbW9uaWM= IHRhY29z R3JlZWs= IHBvc3R3YXI= IGluc29mYXI= IFBvcms= IDM1Mg== ZG9jdG9yYWw= d2Fsa2luZw== IG1pZHRlcm0= IFNhbW15 c2lnaHRlZA== IFRSQU5T aWNp QUxE IFVTTA== IEZJU0E= IEFtcGw= IEFsZXhhbmRyYQ== aW5lbGxp VHJhaW4= IHNpZ25pZnk= IFZlcnN1cw== IG9iZnVzYw== IGto IGFnZ3Jv IFJlbmF1bHQ= IDM0OA== NTE4 b3hpY2l0eQ== MDIy IFR3aXN0 IGdvb2Z5 RHluYW1pYw== IGJyaWVmaW5ncw== bWlnaHQ= ODk5 IGRlcm9nYXRvcnk= VHJv IGZvcmdpbmc= IEtvcmFu IE1hcnJpZWQ= IEJ1Y3M= IHBhbGF0ZQ== IENvbnZlcnNpb24= bWFibGU= NDEz IChf IHNpcGg= IE5FTw== Y29sbGVnZQ== IG1hcmdpbmFsbHk= IGZsaXJ0 IFRyYXBz IFBhY2U= 6buS IGdvYWx0ZW5kZXI= IGZvcmJpZHM= IGNsZXJrcw== IFRhbnQ= IFJvYmJpbnM= IFByaW50aW5n IHByZW1pZXJlZA== IG1hZ25pZmljYXRpb24= IFRH IFJvdXNl IE1vY2s= b2R5bmFtaWNz IHByZWNsdWRl aXNtbw== IFB1bGl0emVy IGF2YWxhbmNoZQ== IEtvZGk= cmlidW5l IExlbmE= RWxlY3RyaWM= IHJlZmluZXJ5 IGVuZG93ZWQ= IGNvdW5zZWxvcnM= IGRvbHBoaW4= IE1pdGg= IGFybW91cmVk aGliaXRlZA== QmVnaW4= IFBX T2ls IFZvcg== IFNoYXJpZg== IEZyYXppZXI= ZXN0YXRl IGphbXM= UHJveHk= IGJhbmRpdHM= IFByZXNieXRlcmlhbg== IFByZW1pZXJl dGlueQ== IENydWVs VGVzdGluZw== IGhvbWVy IFZFUlM= IFByb2w= IERlcG9zaXQ= IENvZmZpbg== IHNlbWluYXJz IHNxbA== IERlZmVuZGFudHM= QWx0ZXJuYXRpdmVseQ== IFJhdHM= 56s= ZXRoeXN0 Jz4= IGlzc3Vlcg== NTg5 IGNoYWlyZWQ= IEFjY2Vzc29yaWVz bWFuZW50 IG1hcnJvdw== IFByaW1vcmRpYWw= Q04= IGxpbWl0bGVzcw== IENhcm5hZ2U= IHVuZHJhZnRlZA== cXY= SU5FU1M= b25ldw== IGNvaGVzaW9u OTg3 IG5lY2tz IGZvb3RiYWxsZXI= IEdFUg== IGRldGVjdGFibGU= IFN1cHBvcnRpbmc= IENTVg== b2NhbGx5 a0h6 IHVuZGU= IHNob25l IGJ1ZGRpbmc= dHJhaw== U3RhbmRpbmc= IFN0YXJjcmFmdA== IEtlbXA= QmVuY2g= IHRod2FydGVk IEdyb3VuZHM= YXRoaQ== TGlzYQ== RGlhbG9n IFNY VmlzaW9u IGluZ2VuaW91cw== 2ZA= IGZvc3RlcmluZw== IFph IEluZ3JhbQ== ICJA TmF0dXJhbGx5 NjE2 MDM1 IEZBQw== SG1t NTU0 IGFjY2VsZXJhdG9y IFZlbmQ= IHN1bnNjcmVlbg== IHR1YmVyY3Vsb3Npcw== cmF2aW9sZXQ= IEZ1bmN0aW9uYWw= IEVycm9ycw== ZWRhcg== MTk2Ng== IFNwZWN0cmU= IFJlY2lwZXM= ODg1 IE1hbmtpbmQ= TGl2ZXJwb29s IHwtLQ== IHN1YnN0aXR1dGVz IFhU d2lyZWQ= IGluY28= IEFmZ2g= RXZh aWNj U29uZw== S25pZ2h0 IGRpbGlnZW50bHk= IEJyb2FkY2FzdA== QWlk IGFmYXI= IEhNUw== YXRvbmlu IEdyYXRlZnVs IGZpcmVwbGFjZQ== IE9tbmk= ZXVybw== IEZSRQ== IFNoaWI= IERpZ2VzdA== dG9nZ2xl IGhlYWRzZXRz IGRpZmZ1c2lvbg== IFNxdWlycmVs IEZO IGRhcmtlbmVk b3V0aGVy IHNsZWVwcw== IFhlcg== Z3Vucw== IHNldHVwcw== IHBhcnNlZA== IG1hbW1vdGg= IEN1cmlvdXM= Z29i IEZpdHpwYXRyaWNr IEVtaWw= aW1vdg== Li4uLi4uLi4uLi4uLg== IEJlbm55 U2Vjb25kbHk= IGhlYXJ0eQ== IGNvbnNvbg== c3RhaW5lZA== IGdhbGFjdGlj Y2xhdmU= IHBsdW1tZXRlZA== IHBlc3Rz IHN3YXQ= IHJlZmVycmFscw== IExpb25lbA== aG9seQ== IHVuZGVyZG9n IFNsYXRlcg== IFByb3ZpZGU= IEFtYXI= cmVzc29y 5Yw= b25nYQ== IHRpbWlk IHBpZXR5 IERlaw== IHN1cmdpbmc= YXpv IDYxMA== IGRlc2tz IFNwb2thbmU= IEFuZmllbGQ= IHdhcnNoaXBz IENvYnJh IGFybWluZw== Y2x1c2l2ZWx5 IEJhZGdl YWdhc2Nhcg== IFBSRVNT IE1jS2Vuemll IEZlcmRpbmFuZA== YnVybmluZw== QWZlZQ== IHR5cmFubg== IEl3 IEJvb25l MTAwNw== IFJlcHQ= CsKg IGNhcmF2YW4= IERpbGw= IEJ1bmRlc2xpZ2E= Q2h1Y2s= IGhlYWxlcg== 44O844OG IEhvYmJ5 IG5lZ2F0ZQ== IGNyaXRpcXVlcw== c2VjdGlvbmFs bW9wb2xpdGFu IGR4 IG91dHNvdXJjaW5n IENpcGhlcg== dGFw U2hhcnA= IHVwYmVhdA== IGhhbmdhcg== IGNydWlzaW5n IE5pYWdhcmE= IDM0Mg== aWxsdXM= IFN2 IHN1YnRpdGxlcw== IHNxdWFyZWQ= IGJvb2tzdG9yZQ== IHJldm9sdXRpb25hcmllcw== IENhcmx0b24= YWJhbA== VXRhaA== IGRlc3Bpc2U= IFVN Y29uc2lkZXI= YWlkbw== IGNhcnRz IFR1cnRsZXM= VHJhaW5pbmc= IGhvbm9yYXJ5 wqI= IHRyaWFuZ2xlcw== NDIy IHJlcHJpbnRlZA== IGdyYWNlZnVs IE1vbmdvbGlh IGRpc3J1cHRpb25z IEJvaA== IDM0OQ== IGRyYWlucw== IGNvbnN1bGF0ZQ== IGJlbmRz IG1hZmlh dXJvbg== IEZ1bHRvbg== bWlzYw== IHJlbmFs IGluYWN0aW9u Y2tpbmc= IHBob3RvbnM= IGJydWlzZWQ= IENvZGVz b2dp IG5lc3Rz IExvdmVseQ== IExpYnJl IERhcnls ICMjIw== U3lz Liwi IGZyZWV6ZXM= ZXN0YWJsaXNobWVudA== YW5kb3dza2k= IGN1bWJlcnM= IFN0YXJn IEJvbWJz IGxlZ2lvbnM= IGhhbmR3cml0aW5n IGdydW4= IENhaA== c2VxdWVudA== IG1vdGg= IE1TTQ== SW5zZXJ0 Rmlm IG1vdGVs IGRleHRlcg== IEJpbGQ= aGVhcnRlZGx5 IHByb3Bl IFRleHR1cmU= IEp1bmN0aW9u eW50aGVzaXM= b2NhcmQ= IFZlcmE= IEJhcnRo IM68Zw== IGxhc2hlZA== IDM1MQ== IFphbWI= IFN0YXBsZXM= IENvcnRleA== IENvcmtlcg== IGNvbnRpbnV1bQ== IFdSSVRF dW50YQ== cmlkb3I= IGRlZW1z MDMz IEdPTEQ= cGFz IHJlcHJlc3NpdmU= 44OG44Kj IGJhZmZsZWQ= U2Nhcg== IGNyYXZl IF9fX19fXw== IGVudHJlcHJlbmV1cnNoaXA= IERpcmVjdG9yYXRl ICdb IHZpbmVz IGFzY2VuZGVk IEdST1VQ IEdvb2RieWU= IGRvZ2dlZA== 44O044Kh TWFudWZhY3Q= IHVuaW1hZ2luYWJsZQ== cmlvdHM= aWVycmV6 IHJlbGF0aXZpdHk= IENyYWZ0aW5n cmF1Z2h0 dWRlbg== Y29va2ll IGFzc2Fzc2lucw== IGRpc3NhdGlzZmllZA== YWNjaQ== IGNvbmR1aXQ= U3ByZWFk IFJpY2Fu bmljZQ== aXp6bGU= IHNjYXJlcw== IFdIWQ== cGhhbnM= NTM1 IHByb3RyYWN0ZWQ= IEtyaXN0ZW4= NTM2 IFNjcmli IE5laA== IHR3ZW50aWVz IHByZWRpY2FtZW50 IGhhbmRjdWZmcw== IGZydWl0ZnVs IFVM IEx1ZHdpZw== IGF0dGVzdA== IEJyZWFrZXI= IGJpb2xvZ2ljYWxseQ== IERlYWxlcg== IHJlbm92YXRpb25z Znc= ZXNzZW4= QWxpY2U= IEhlbnJp IHVuaWxhdGVyYWxseQ== IFNpZGQ= aGFp IFN0cmV0Y2g= U2FsZXM= IGN1bWJlcnNvbWU= IEphdmllcg== IHRyZW5keQ== IHJvdHRpbmc= IENoYWxsZW5nZXM= IHNjcmFwcw== IGZhY2V0cw== IFZlcm9uaWNh IFZlcmdl IFNhbmE= QWxpZW4= IFJpaA== IHJhZGlhbA== ZWN0YXI= IDYzMA== Y2xp TWFyaWU= IHdpbGRmaXJl IENhdG8= aGFuZGVy IHdhaXRyZXNz IGNob3Bz IFNFQ1RJT04= IGJsdW50bHk= IENhdGFsb2c= bmlhbg== c3R1ZHk= IHBhdHJvbGxpbmc= IFRlbnRo bmV4dXM= IE5PTg== b3BzeQ== IHNjYXRoaW5n c2ll IGRldGVyaW9yYXRlZA== VkI= TmF6aXM= IGRlcGljdGlvbnM= IGF1dGhlbnRpY2F0ZWQ= IENvbmNl a3JpdA== IHByb211bGc= IExPTkc= VUZD IFZpc2l0b3Jz IFJlY2FsbA== IHJlaGFiaWxpdA== IFNMSQ== IGdsYWNpZXI= IEJpdGU= IDUwMw== IHZvbWl0 IGZlcm1lbnRlZA== IEtoYWxpZA== IGdyYWRlZA== IE1hZ2lja2E= IEljaGlnbw== cG93ZXJmdWw= aWNhdG9ycw== NzUz IHNocmV3 IDM1Ng== IGxlZ2FsaXppbmc= IGFsbG90dGVk IEFyY2hkZW1vbg== aXRoaW5n aWdndXJhdA== Vk9M TGVvZA== IG9pbHk= IGluZHVjaW5n IGFteWdkYWxh IGFkbWlucw== IEFjcXVpc2l0aW9u Q0FO IHNjaGVtYXRpYw== IG1vYW4= IENhbWVyb29u IHRpbms= IG1lcnJ5 IGJ1dHRlcmZsaWVz IEdvZmY= IHdvcmtzcGFjZQ== IENvcm9uYQ== IGphdmFzY3JpcHQ= IERvbHBoaW4= IENhbnRvcg== NDY0 dG9l QVBT IEFnaW5n IHBhZGRlZA== IFpoZW5n IEhlbGQ= IGVzdHJhbmdlZA== IDc3MA== Ln0= IER1bmhhbQ== IHNtb2tlcw== IGNhcGl0YWxz dW5kYWk= U2hpbg== IEZvdW5kaW5n IGVudGl0bGU= IGNlbnRlcnBpZWNl RGlzY292ZXI= IHRoZXJldG8= YWxlcnQ= IE5vdQ== IEFuYWx5c3Q= bGM= Rkg= RklFTEQ= IFBPVg== Z3JheQ== IGFyY3M= IEhPVA== IHJz IG9ibGlnYXRvcnk= IEFyY2hpdGVjdHM= IFN2ZW4= IEZFQw== MDIwMA== Q2hyaXN0bWFz IEFsYmFuaWE= cmF0b20= NTg3 IGhhcmRzaGlwcw== IGF1dG9z IENoYXJnZXM= IGFwZXM= IDM3Ng== d2FsbGV0 IGludG94aWNhdGlvbg== IGdvYmxpbg== IDU3MA== KysrKysrKysrKysrKysrKw== IFllbHA= IE1hZ25ldGlj IEJyaWdncw== UmFpbA== IHNwYXducw== IFdpZ2dpbnM= IHNob3djYXNlZA== IHJlc29ydGVk dWJlbg== IHdoaXBwaW5n IGltaXRhdGU= IGRpZ2VzdGlvbg== IFVTUFM= IEdlc3Q= IHllYQ== IFRpZ2h0 aW5kYWw= aWNhcw== YC4= Q0FTVA== Jyc7 IEZldA== b3BhdGhpYw== SW52YWxpZA== IHJlZ3JldHRlZA== IGJyb2Njb2xp IFNjb3Jlcw== ZXZl IHBvc3Rpbmdz IGFjY3VtdWxhdGluZw== IG5lZWRsZXNz ZWxmdGg= IG1heW9ycw== IHNjcmli IGFuZWNkb3Rlcw== IGJvdGNoZWQ= IFJpYmJvbg== IENvbnN0YW50aW5l aXVzZXM= ZXNzZXM= IGRldmlzZQ== Q29tcGFyZWQ= IHB1ZGRpbmc= IGdhcmc= IGV2b2tl Nzk3 IGRldG94 OTA5 IFBpZWNlcw== IE1jQ2FydG5leQ== IG1ldGFzdA== IEtyeXB0 UE9S IHRlbmRpbmc= IE1lcmNoYW50cw== UHJvb2Y= IFZhcmc= IFBvcnRhYmxl 44O844OG44Kj QnJhaW4= MjUwMA== IGZvbGlhZ2U= 2Lk= IG1lbnRvcnM= IEFpcmVz IG1pbmltYWxpc3Q= IGluZ2VzdGVk IFRyb2phbg== IFFpYW4= aW52b2x2ZWQ= MDI3 IGVyb2RlZA== UkFGVA== IGJsdXJyeQ== TW9i IGJ1ZmZldA== IEZuYXRpYw== YWVh S05PV04= IEluaXQ= c2FmZXR5 ZW51bQ== QUNUSU9O IENydXNoZXI= IERhdGVz IC4uLi4uLi4uLi4uLi4uLi4= Y2FsbGluZw== YWtvdg== IHZlbnR1cmVk IDU1NQ== YXVnYQ== SGFydA== IEFlcm8= TUFD IHRoaW5seQ== IGFycmE= U1RBVEU= aWxkZQ== IEphY3F1 IEZlbWFsZXM= IHRoZW9yZW0= IDM0Ng== IHNtYXJ0ZXN0 IFBVQkxJQw== IEtyb24= IEJpdHM= IFZlc3NlbA== IFRlbGVwaG9uZQ== IGRlY2Fw IGFkanVuY3Q= IFNFTg== bWVyZ2E= IHJlZGFjdGVk IHByZWhpc3Rvcmlj IGV4cGxhbmF0b3J5 IFJ1bnM= IFV0dGFy IE1hbm55 IEFVVEhPUg== IFVubGVhc2hlZA== IEJvd2xpbmc= YmVhbnM= Nzkz IHVuaXZlcnNlcw== IHNlbnNpdA== IEt1bmc= cmVwZWF0 Y3RybA== IHBhY2Vk IGZ1bGxlcg== Q2xvY2s= IHJlY29tYg== IEZhdWw= IEJ1bmtlcg== IHBvb2xlZA== IGFuYQ== IE1vdXRo TExPVw== aHVtYW5l IGJ1bGxkbw== IE1pY2hhZWxz ZmFt IHdyZWNrZWQ= IHBvcnRyYXlz IFdoYWxl IEhlcw== IGd1ZXNzZXM= IEJyb3dzZQ== IExBUEQ= IGNvbnNlcXVlbnRpYWw= IElubm9jZW50 IERSQUc= IHRyYW5zZ3Jlc3M= IE9ha3M= IHRyaXZpYQ== IFJlc29u IEFEUw== LS0r IFRvbGw= IGdyYXNwaW5n IFRIRU0= IFRhZ3M= IENvbmNsdXNpb24= IHByYWN0aWNhYmxl IGhvb3A= IHVuaW50ZW50aW9uYWxseQ== IGlnbml0ZQ== IE1vdg== dXJpemVk bGVoZW0= VGVybWlu IGNvbG91cmZ1bA== IExpbmVhcg== IEVsbGll R3k= IG1hbnBvd2Vy IGpz IGVtb2pp IFNIQVJFUw== Xy4= MDAwMDc= IHNvcGhpc3RpY2F0aW9u IHVuZGVyc2NvcmU= IHByYWN0aXNl IGJsb2I= b3BlbnM= VWtyYWluZQ== S2VlcGluZw== WUM= SlI= dWx0aW1hdGU= Q2xhaW0= IGF1dG9tb2JpbGVz OTkz c3RlZWw= IHBhcnRpbmc= IExhbms= Li4uPw== IDM4NQ== IHJlbWVtYnJhbmNl IGVhc2Vk IGNvdmFyaQ== IFNpbmQ= RWZmZWN0aXZl IGRpc3NlbWluYXRpb24= IE1vb3Nl IENsYXBwZXI= YnJhdGVz QXBwbHk= IGludmlz IHdvcnNlbmVk 4oCULQ== IGxlZ2lzbGF0b3I= IExvbA== IFJvd2U= IGRlYWxlcnNoaXA= dW1hcg== aWRlbmNlcw== IGludmVzdGlnYXRlcw== IGNhc2NhZGU= IGJpZGRlcg== IEJFTg== SXJvbmljYWxseQ== IHByZXNpZGluZw== IGRpbmc= IGNvbnRyYWRpY3RlZA== IHNodXRz IEZJWA== IDM2Ng== RGlzdHJpY3Q= IHNpbmZ1bA== IENoYXJpc21h b29wcw== IHRvdGFsaXR5 IHJlc3RpdHV0aW9u IE9wdGltdXM= IERhaA== IGNsdWVsZXNz dXJuZWQ= IG51dHJpdA== IGxhbmRvd25lcnM= IGZsdXNoZWQ= IGJyb2FkZW4= bWll IHByaW50bG4= IG5pZw== IENvcnB1cw== SmVu IHByb3Rv IFdpa2ltZWRpYQ== IFBhbG8= Q09S IHN0b3J5bGluZXM= IGV2YW5nZWxpY2Fscw== IERhcnJlbGw= IHJvdG9y IEhX c2tpbGxlZA== ZXJ5bA== IGJlZ2c= IEJsdW1lbnRoYWw= IHdlYXZpbmc= IGRvd253YXJkcw== IEphY2tldA== IEFOR0VM VGVjaG5vbG9neQ== IGVzb3Rlcmlj YWxkZWh5ZGU= IGZ1cmlvdXNseQ== IGZvcmVpZ25lcg== V2Vhaw== Q0hP IEhvdW5k RXhwZXJpZW5jZQ== IFBsYXlzdGF0aW9u IE1JQQ== IFVuZw== Y2xvdGg= YWdhbGw= IGNhbG1pbmc= aXplbnM= U3RydWN0 IFdpdGNoZXM= IENlbGVicmF0aW9u IC4uLi4uLi4uLi4uLi4u cHRyb2xsZXI= IFRDVQ== IGJ1bm55 44ON dXRvcmlhbA== IHVwc2NhbGU= IFN0YQ== IENvbG9zc3Vz IGNobG9yaWRl IFphYw== IFJlYXNvbnM= IEJyb29raW5ncw== IFdISVRF XVsv IExvc2U= OTA1 IHVuZGVyc2lkZQ== ZXJuZWxz IHZhcGU= ZG96ZW4= dXBwZXQ= IFNUT1A= bWF0aWNhbA== IFN0YXRlbWVudHM= aGVkZGFy UEFD Q3VzdG9tZXI= IG1lbW9z IFBK ZW5kYXJz IExpbWl0cw== bGF1Z2g= IHN0YWJpbGl6ZWQ= IEFMRUM= WUE= VXBncmFkZQ== YWxhbQ== IHRlY2hubw== IGFuZXc= Zm9yZXNlZW4= IGNvbGxlZ2lhdGU= IFB5cm8= IERpc20= IGZyb250bGluZQ== IGFtbW9uaWE= SVU= UXVpdGU= Sm9obm55 YXNzaW4= R09Q IFN0eWxlcw== IFNvdmVyZWlnbg== YWN0ZXJpYWw= NTQ5 IFJJUA== IExpc3Rz IDM2NA== IFJlY2Vw c29ja2V0 IEJ5cmQ= IENhbmRsZQ== QW5jaWVudA== IGFwcGVsbGFudA== ZW5mb3JjZW1lbnQ= YWNlYQ== YW5za2k= IG9sZHM= ODg2 IHNsdXJz IGVtcGlyZXM= IGJ1Y2tsZQ== IGFsaWVuYXRpb24= IEFiZXJkZWVu IHVuaWNvcm4= IG92ZXJyaWRpbmc= IExY cHBh IGRlc3Bpc2Vk IEJ1Z3M= IEJTVA== U291dGhlcm4= NTMz IGhhbGxtYXJr IFBvc3Rlcg== IHN0ZW1tZWQ= IHByaW5jaXBhbHM= IFRFQ0g= IFNhbmR3aWNo SXRhbHk= IGNoZWVzeQ== IFNldFRleHRDb2xvcg== IFByb3RlY3RpdmU= IENvaG4= Sk8= YXB0b3A= UmVhc29u TGVhZGVy IFVuZGVyc3RhbmQ= IEZyaWRheXM= IENvbnRpbnVvdXM= IGNsaXBwaW5n IFJ5ZQ== IGJlcnRo dGltZXI= YW5uaXM= cmVhY3Q= IGJ1ZmZhbG8= IFBhcmFz IDY1NQ== IHByZXNpZGVk IFN1bnJpc2U= IHZldHM= IGNsb3Zlcw== IE1jQ3VsbA== U3RyZW5ndGg= R0FO IGlsbGl0ZXI= IFByaWNpbmc= bMOp IHJlc2lzdG9y IGJydW4= IFN1ZmZvbGs= 0Ys= IExpdmVy UmVsZWFzZWQ= IHdoYXRz ODYw IE1lYXN1cmVz IGRlbm91bmNpbmc= IFJ5emVu IHNvdXZlbg== IGNhcmVnaXZlcnM= Y2hpbmk= IFNjYXJsZXR0 IHRyb3VnaA== Q29uZ3JhdHVsYXRpb25z IHRheGlz IFRyYWRpdGlvbg== aml0 IHRhYmxldG9w IGhpdGhlcnRv IGRpc2luZm9ybWF0aW9u b2ZmZW5zaXZl aHJh IERJU1RSSUNU IGNvbXBsaWNhdGU= Y2hlbmtv IFJlY29uc3RydWN0aW9u IHBhbHBhYmxl IGF1c3A= IDQyOA== IHNob3djYXNlcw== IFB1YmxpY2F0aW9u a25vd2xlZGdl aW5ub24= NDE5 IHJldHJpZXZhbA== YW5kZXJz IHJlZnV0ZQ== IGlucXVpcmVk Z3Vy IG5lZ2F0aXZpdHk= IGNvbnNlcnZl IGFmdGVybGlmZQ== IHByZXN1cHA= IEdpbGxlc3BpZQ== IG10 IERO VGFw IHBlcnBlbmQ= IFNteQ== ZG9lc24= IHNwaWxsaW5n IGh5cGVycw== S2F0ZQ== wq4s a2VwdA== IFBvd2VyZWQ= IGph IEtsdXg= YXJkZQ== YWJhbg== IDQ0NA== IGZsYXR0ZW5lZA== IEltcHJvdmVtZW50cw== dXJnYQ== IEt1bmQ= IGluc2NyaWJlZA== IGZhY3VsdA== IHVucHJlcGFyZWQ= IENvbnN1bWVycw== IHNhdGlzZmllcw== IHB1bG1vbmFyeQ== IGluZmlsdHJhdGlvbg== IGV4dGVybmFsbHk= IGNvbmdyYXR1bGF0aW9ucw== YWdoYW4= IGFpcmxpbmVy IGZsdW5n IGZseWVycw== R0Q= IHNuaXBwZXRz IHJlY3Vyc2l2ZQ== IG1hc3RlcmluZw== TGV4 IG92ZXJ0bHk= dmc= IGx1Y2tpbHk= IGVuY3Jv IExhbmNldA== IEFieXNzYWw= ZnVuY3Rpb25hbA== IHNvdw== IHNxdWlk IG5hcnJhdGlvbg== IG5hdWdodHk= IEhvbm91cg== IFNwYXJ0YW5z IHNoYXR0ZXI= IFRhY29tYQ== IENhbG9yaWVz IFJhY2Vz U3VibWl0 IHB1cnBvc2VmdWxseQ== d2F2 IFlvaw== RmVzdA== IEdlcnI= TWV0cm8= IGl0aW5lcg== ZmFtb3Vz ICJ7 aW5saW5l d2FzaGVy SXNzdWU= IENMSUVOVA== b3pv VmVyc2lvbnM= NzI1 IEdsb2Nr IHNoaWVsZGVk IFBDUg== RU5DWQ== IFdlbGQ= IFNpbXBs IHJlZGlyZWN0ZWQ= IEtoYW0= ICg+ IGxhYm91 IGRpYXBlcnM= c3Ns IGNlbGxhcg== b3JnYW5pc21z b3Jlc2M= IEJlcmtz ZGlkbg== U2hpcHBpbmc= Q2hlc3Q= IHVuZG9uZQ== IG1pbGxpb25haXJl IGNvcmRz IFlvdW5nZXI= YXBwcm9wcmlhdGVseQ== IHNlcXVlbHM= dXZl YW50aWNpcGF0ZWQ= IGxld2Q= IFNoaXJ0 IERtaXRyeQ== VmV0ZXI= IHNsYXlpbmc= IFlhcg== IGNvbXBsaWNhdGlvbg== SW93YQ== IEVyaWNh IEJMTQ== Z2lybGZyaWVuZA== Ym9kaWVk NjI2 MTk2Mw== IGludGVybWVkaWFyeQ== IGNvbnNvbGF0aW9u TWFzaw== IFNpZW0= b3dhbg== QmVnaW5uaW5n IGZpeG1l IGN1bG1pbmF0ZWQ= IGNvbmR1Yw== IFZvbHVudGVlcg== IHBvc2l0aW9uYWw= IGdyZWV0cw== IERlZmluaXRpb25z IHRoaW5rZXI= IGluZ2VudWl0eQ== IGZyZXNobWVu IE1vbWVudHM= IDM1Nw== YXRldXJz IEZlZEV4 c2c= Njk0 IGR3aW5kbGluZw== IEJPWA== c2VsYWdl IHRtcA== IHN0ZW4= IFN1dA== IG5laWdoYm91cmhvb2Rz IGNsYXNzbWF0ZQ== ZmxlZGdlZA== IGxlZnRpc3Rz IGNsaW1hdGVz QVRIRVI= IFNjeXRoZQ== dWxpZmZl IHNhZw== IGhvcHBlZA== IEZ0 IEVjaw== IENL IERvb21zZGF5 a2lkcw== IGdhc3BlZA== IG1vbmlrZXI= IExvZA== IENGTA== dGlvbnM= cnVtcw== Zm9saW9z IG1k IHVuY2Fubnk= IHRyYW5zcG9ydHM= IExhYnJhZG9y IHJhaWx3YXlz IGFwcGxpYW5jZQ== IENUUkw= 5oA= UG9wdWxhdGlvbg== IENvbmZlZGVyYWN5 IHVuYmVhcmFibGU= IGRvcnNhbA== IEluZm9ybQ== b3B0ZWQ= IEtJTEw= TWFyeA== IGh5cG9jcml0aWNhbA== cXVz IE51bWVyb3Vz IEdlb3JnaWFu IEFtYnJvc2U= IExvY2g= IGd1YmVybmF0b3JpYWw= IFhlb24= IFN1cHBvcnRz ZW5zZXI= ZWVseQ== IEF2ZW5nZXI= MTk2NQ== QXJteQ== IGp1eHRhcA== IGNob3BwaW5n IFNwbGFzaA== IFN1c3RhaW5hYmxl IEZpbmNo IDE4NjE= aWN0aXZl YXRtZWFs IEdvaGFu IGxpZ2h0c2FiZXI= IEdQQQ== dWd1 IFJFUEw= dmFyaWFibGU= IGhlcnBlcw== IGRlc2VydHM= YWNpb3VzbHk= IHNpdHVhdGlvbmFs d2Vla2x5 b2Js IHRleHRpbGU= IENvcm53YWxs IGNvbnRyYWNlcHRpdmVz IEFrZQ== XS0= 5LmL Oiw= IFdlbQ== IEJpaGFy ICcu IGJlcmU= IGFuYWxvZ3Vl IENvb2tpZXM= IHRha2VvZmY= V2hlZWw= IG1hamVzdGlj IGNvbW11dGluZw== MDIz IENvcnBzZQ== YXNzbWVudA== bWluaQ== IGdvcmlsbGE= IEFsYXM= ZXJlZQ== IGFjcXVhaW50YW5jZXM= IEFkdmFudGFnZQ== IHNwaXJpdHVhbGx5 IGV5ZWQ= cG13aWtp IEVuZGVy IHRyYW5zbHVjZW50 IG5pZ2h0dGltZQ== IElNQUdFUw== NTQ1 IEthbXA= IEZyZWFr IGln UG9ydGxhbmQ= NDMy IE1hdGE= IG1hcmluZXM= IGhvcnM= YXRlcmFzdQ== IEF0dHJpYnV0aW9u IC0tLS0tLS0tLQ== IGtpbnM= IEJFTE9X Kysr IHJlZWxpbmc= b2xlZA== IGNsdXR0ZXI= IFJlbGF0aXZl IDQyNw== QlVT IGF2ZXJ0 IENoZW9uZw== IEFibGU= IFByeW9y RGV2ZWxvcGVy IGVuY3ljbG9wZWRpYQ== IFVTQUY= IEdhcnJ5 U3BhaW4= QmxvY2tz IGV4cG9zaXRpb24= IEdhbWVyR2F0ZQ== V09S IHN0b2NrcGlsZQ== IGNsb3RoZWQ= IFRvbmU= IFJ1ZQ== dHVtYmxy IHRyZWFjaGVyb3Vz IGZyeWluZw== 0Yw= IFNwaA== IHJlc3RyYWludHM= IGVtYm9kaWVz IEdlcw== U2FmZXR5 IG5lZ290aWF0b3Jz bWluaW5n IEFwcGFsYWNoaWFu TE9T IEplbm5h IHBhc3NlcnM= 54s= c25hcA== IHNob3J0ZW4= Y3JlYXRvcg== IGlubnVtZXJhYmxl dXRoZXJsYW5k Njc0 IFdPTQ== IEFzY2VuZA== IEFybW9yeQ== IFRyYW5zYWN0aW9u S2ljaw== IHN1aXRjYXNl ZGF5TmFtZQ== IHdhc3RlZnVs bWFycmlhZ2U= IE1jQ2FiZQ== aXRlY2g= IE9zcw== Q2xvc3VyZQ== IFRyZWFzdXJlcg== IGluZGVjZW50 IER1bGw= IHJlc2lkZW5jZXM= MTk1OQ== IFNldHRsZW1lbnQ= SGFtaWx0b24= IHNlbGZpZXM= IFJhbmtpbmc= IEJhcmtsZXk= IEJvcmU= IFdDUw== IE1hcml0aW1l IEh1aA== IEZvcmVzdHJ5 IGN1bHRpdmF0aW5n IEJhbGxhcmQ= IGdhcnJpc29u IFNETA== OTMw IG5hc2NlbnQ= IGlycmVzaXN0aWJsZQ== IGF3ZnVsbHk= XC9cLw== IGVxdWF0ZQ== IGFudGhyb3BvbG9neQ== IFN5bHZpYQ== IGludGVzdGluZQ== IGlubm9jdW91cw== Y2Vzc2l2ZQ== YWdyYQ== IE1ldHJvaWQ= R3JhbnQ= ODU1 gZY= ICJf 44OD44OJ IGFwcHJhaXNhbA== IEZyZWRkeQ== MDQ2 IDQwNg== IDE4MzA= IGRvY2tpbmc= U3RhdGlj IHBvbnQ= IFZvbHRhZ2U= IFN0ZWFk IE1vcnRnYWdl IEpvbmFo WUw= Q0xBU1NJRklFRA== IGFzYmVzdG9z bmlrb3Y= IGNvbGxhZ2Vu IE9yYml0YWw= UG9ja2V0 Nzk5 IGh5YnJpZHM= aW5jaGVz IGludm9pY2U= dW5keQ== IGluZXF1YWxpdGllcw== VHJlbmQ= d2FzaGVk QkFMTA== IGx1Y2lk IENvbW1lbnRhcnk= IHdpdHR5 QnJhbmRvbg== IGJydWlzaW5n IDYyMA== ZXNjZW50 Ym94aW5n UE9M IDM3OA== UmVjdA== IGxpY2VuY2Vz IE1jR2Vl cHJlc3NlZA== RGFubnk= IGphbW1lZA== b3JkaW5hdGU= IGxldGg= IGRpc3Rpbmd1aXNoZXM= IFlhbWFoYQ== SUxT IEh1bWU= IENhdGVnb3JpZXM= Um9iZXJ0cw== Q2hhcnQ= IGJlZXRsZQ== IEdyYXZleWFyZA== ICgkKQ== b8Sf IHR3aWxpZ2h0 YXJlbGxh 4b0= IGJvb3Rocw== IEhIUw== IEZlbGRtYW4= IGV4Y2F2YXRpb24= IHBoaWxvc29waGllcw== YXRvZ3JhcGh5 IEdhcmFnZQ== dGVjaG5vbG9neQ== IHVuZm9yZ2V0dGFibGU= IHZlcmlmeWluZw== IHN1Ym9yZGluYXRlcw== RWxz IG5lYg== R2FtaW5n RU5B IEFjaGlldmVtZW50 aXR0ZXJz IEdhYmU= IGR1bXBz Zm9yY2Vy IHBvaWduYW50 IE1CQQ== IEhlaWRp aW1laQ== IG1hZ2Vz IGxpYmVyYXRl IGNpcmN1bWNpc2Vk IE1lcm1haWQ= IE1hdHRo dG9nZXRoZXI= IFdpY2hpdGE= IHN0b3JlZnJvbnQ= IEFkaW4= VklJ Rm91cnRo IGV4cGxvcmVycw== V0VS Tm90YWJsZQ== QnJvb2s= bWVucw== RmFpdGg= LS0tLS0tLS0t IEpvdQ== rLw= IHBpbmVhcHBsZQ== IGFtYWxn ZWxu YXJrYWJsZQ== IOOCteODvOODhuOCow== IOOCteODvOODhuOCo+ODr+ODsw== IG92YXJpYW4= IEVjaG9lcw== IGhhaXJjdXQ= IHBhdg== IGNoaWxsZWQ= YW5hc2lh IHN0eWxlZA== IGRhYg== bmlwZXI= IG1pbmlzdGVyaWFs IERVUA== VGFu IHN1bHBo IERldGVy IEJvaGVt b2Rhbg== IGVkdWNhdG9y 4pOY c3Bpcg== Q2hpY2tlbg== IEVsZWFub3I= IHF1aQ== IGhlYXZpZXN0 IGdyYXNwZWQ= VVJB IGNyb29rZWQ= SmVzc2ljYQ== cHJvYmxlbQ== IHByZWRldGVybWluZWQ= IG1hbmlhYw== IGJyZWF0aHM= IExhdWRlcmRhbGU= IGhvYmJpZXM= eXo= Q3JpbWU= IGNoYXJpc21h ZEw= IGxlYXBpbmc= IGtpdHRlbnM= QW5nZWxv IEpBQ0s= IFN1emFubmU= IGhhbHRpbmc= RU5USU9O IHN3YWxsb3dpbmc= IEVhcnRocXVha2U= IGVpZ2h0ZWVudGg= IE5JQw== IElORg== IENvbnNjaW91cw== IHBhcnRpY3VsYXJz Y2lyY2xl NzQw IGJlbmV2b2xlbnQ= IDc0Nw== IDQ5MA== IHJ1bmRvd24= IFZhbGVyaWU= IEJVUg== IGNpdmlsaXNhdGlvbg== IFNjaG4= V0I= b3RpZGU= aW50ZXJuYXRpb25hbA== IGpvaG4= IDE5MDI= IHBlYW51dHM= IGZsYXZvcmVk a3Vz IHJvYXJlZA== IGN1dG9mZg== 6aM= IG9ybmFtZW50 IGFyY2hpdGVjdHVyZXM= IDM2OQ== b2xvcg== IFdpbGRl IENSQw== IEFkanVzdGVk IHByb3Zva2luZw== bGFuZGlzaA== IHJhdGlvbmFsaXR5 IGp1c3RpZmllcw== IGRpc3BlbA== IGFtZXJpYw== IFBvbGVz 2Kk= IGVudmlz IERvb2RsZQ== 5L2/ aWdzYXc= YXVsZHJvbg== VGVjaG5pY2Fs VGVlbg== dXBoZW0= IFhpYW5n IGRldHJhY3RvcnM= IFpp IEpvdXJuYWxpc3Rz IGNvbmR1Y2l2ZQ== IFZvbHVudGVlcnM= IHNk S25vd2luZw== IHRyYW5zbWlzc2lvbnM= IFBMQU4= IExJQg== IGFsbHVkZWQ= IG9iZQ== IGRvcGU= IEdvbGRzdGVpbg== IHdhdmVsZW5ndGhz IERlc3RpbmF0aW9u bmRh dWdp IGF0dGVudGl2ZQ== IExlYW4= cmFsdGFy IG1hbmc= bWJ1ZHM= YWtpbmdz YmVuZGVy IGFjY29s IGNyYXdsZWQ= Tk9X TWlubmVzb3Rh IGZsb3VyaXNoZWQ= IFp1cA== IFN1cGVydmlzb3I= IE9saXZpZXI= RXhjZWxsZW50 IHdpZGVu RG9uZQ== IHdpZw== IG1pc2NvbmNlcHRpb25z Q29ycA== V2Fu IHZlbmVyYWJsZQ== IE5vdGFibHk= IEtsaW5nb24= YW5pbWF0ZQ== Qm9vc3Q= IFNBWQ== bWlzc2luZw== aWJsaW9ncmFwaHk= bWVsb24= IHBheWRheQ== 2LM= Ym9sZQ== IHZlaWxlZA== IEFscGhhYmV0 SXRhbGlhbg== IGV2ZXJsYXN0aW5n IFJJUw== IENyZWU= cm9tcHQ= IGhhdGluZw== IGdyaW5uaW5n IGdlb2dyYXBoaWNhbGx5 T1NI IHdlZXBpbmc= IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGltcGVjYw== TGV0dGVy IGJsb2F0ZWQ= UExB IEZlaW4= IHBlcnNldmVy VGh1bmRlcg== IGF1cg== IFJM IHBpdGZhbGxz 4pa6 IHByZWRvbWluYW50 IDUyNQ== NzE4 QVBF NzE0 IGZhcm1sYW5k IFFpYW8= IHZpb2xldA== IEJhaGFtYXM= IGluZmxpY3Rpbmc= IEVmZmljaWVuY3k= IGhvbWVicmV3 IHVuZGVydG9vaw== IGN1cmx5 IEhhcmRpbmc= bWFuaWE= NTk2 IHRlbXBlcmVk IGhhcnJvd2luZw== IFBsZWRnZQ== IEZyYW5rZW5zdGVpbg== 6Ko= TW90aW9u IHByZWRpY3RhYmx5 IEV4cGxvc2lvbg== b2N1c2luZw== ZXJk Y29sbw== RkZFUg== IGJhY2tmaWVsZA== IFZJREU= dWVibA== TmFycg== IEFyZ3VtZW50 IGdlbm9taWM= IGJvdXRpcXVl IGJhdHRlZA== IEJpbmFyeQ== IGdhbWI= IFJoeXRobQ== Njcz IGFmbG9hdA== IE9seW1waWE= WUlORw== IGVuZGlm aXNpbg== IHdpbnRlcnM= IHNjYXR0ZXJpbmc= SXY= RGlzdGFuY2U= IHRydQ== IENvbWZvcnQ= IG5leHVz IGFpcmZsb3c= IEJ5emFudGluZQ== cGF5ZXJz Y29uaQ== IEJldHN5 RGVhbA== IE51Zw== IENvbnRpbmVudA== cmVkaWJseQ== IG9wdGltaXppbmc= YWxiZWl0 IGVjc3RhdGlj IFByb3Rv 57c= aXZvdA== 4paE ZW1w cm91bmRlcg== IGNsb3V0 IElTVA== NjYz IERvbGxhcnM= IERBQw== IHN1YnNjcmliZWQ= IHJlaGVhcnNhbA== IGFtcHM= IFNoYW5n ZXNt IHNwcmlua2xl IGFzc2FpbGFudA== IE9v IENvaW5iYXNl VGFjdA== IHJldGluYQ== IG51bnM= Uk9O YXR0bw== IGp1Zw== IFNWRw== IGJpa2luaQ== IEZJTEU= IEZvdW5kZXJz ZXBvcnQ= IEtQ IHJlc3RvcmVz IFRoaWNr IGFzaG9yZQ== IGFwcHJvdmFscw== UmVuZGVy TUFH R3JhaGFt IENvcnRhbmE= 44Oz44K4 c3No b3JpYW5z YXJzaXR5 IEluc3BpcmVk dXBwZXI= IHNpZ25hbGxpbmc= IHJlYnVrZQ== IGZsYXJlcw== IGRvd250aW1l U3R1ZGllcw== IHN0YWduYXRpb24= IFNlcXVlbmNl IGdydW50 IGFzc3VyZXM= IFBMQQ== NTky IGludHJhdmVu ZGVwZW5k U3VzYW4= IE1hbnppZWw= TWFuaWE= Q29udHJhY3Q= IHNsYW1z IGN1bHR1cmVk IGNyZWRpdG9y TElTVA== IEhVTQ== IENoYXR0YW5vb2dh c2VydmVk IGNsb2FrZWQ= IEZUUA== cG93ZGVy IFN0ZWxsYQ== dWN0aXZl IGNoZWFwbHk= IE1VQ0g= IEdhbGlsZW8= IHN1aXRlcw== c3BlZWNo IGRlbGliZXJhdGlvbnM= IENoaXBz q5g= QmFsYW5jZQ== IFd5bm5l IEFrcm9u QXNzZXQ= IGhvbm91cmVk IGVkZ2Vk TGlrZXdpc2U= YW5pbW91cw== IFdhZ2U= IEV6ZWs= YWR2ZXJ0aXNlbWVudA== IFJUWA== IE1BRA== IG1pZ3JhdGluZw== IFNRVQ== IDQ3NQ== RWRpdGVk IHNob3J0aGFuZA== IEJhc2ljcw== IGNyb3RjaA== IEVWRU4= IHZt ZWZmaWNpZW5jeQ== IGNhbHZlcw== IEZyaWU= IEJyaWxsaWFudA== IHN0cmlrZXJz IHJlcGVudGFuY2U= IGFydGVyaWVz cmw= QmVk aGFw IGNyeXB0b2dyYXBoeQ== IFNhYnJlcw== IDQxNA== dmlrcw== aWhhcmE= YXBzZXM= VGFsa2luZw== IGludGVydHdpbmVk IGRvY2tz IGFsbGVsZQ== IEFydGlmYWN0 IEhJTQ== dG9ybg== 55U= IG9wYWNpdHk= IEVseQ== b3N1a2U= IG5pcHBsZQ== IGhhbmR3cml0dGVu IFZL IENoYW1iZXJsYWlu IExhb3M= aWdyYXBo Z3Jvdw== IHRyaWxsaW9ucw== IGRlc2NlbmRhbnQ= IFNhaWxvcg== YXN1cmluZw== IGNlaWxpbmdz IFdhcmVob3VzZQ== Zmx5aW5n IEdsb3c= IG5vbnQ= IG1pc2NhcnJpYWdl IHJpZ3M= IG1pbmlzdHJpZXM= IGVsYWJvcmF0ZWQ= IGRlbHVzaW9uYWw= IEh1bWFuZQ== IDM3OQ== bmV0cw== IGJsYWNrb3V0 YWRkZXJz IG5w IFRpcmU= cm9zYw== IHN1YmRpdg== IGxpbmthZ2U= IGNocm9ub2xvZ2ljYWw= IEhFUk8= IHJlc2V0dGxlbWVudA== IFZpbnls IHBhc3RvcmFs IE1vYmls IEJhcmJhcg== Q29vbGRvd24= IEZyaXR6 Y3JpbWluYWw= cmVwZQ== IGJlbGxpZw== IEJyZWVk IDQxOA== IHNlbWJsYW5jZQ== aWpr IGN1cnRhaWw= IGNsaW5jaA== Y29udGFpbmVk IFByb21wdA== YXN0b24= IHdp IHB1cnN1aXRz NTE1 IEdsb3Nz IGZsaXBz IGNvdXBvbnM= IGNsb25pbmc= IExpa2VseQ== UmVtb3ZlZA== IFF1YXJ0eg== cmljZXM= IFNwZWFycw== IHBpb3Vz IGRlcHJlY2lhdGlvbg== IERhcmU= b3VuY2Vz YW1heg== T250 IHBpbm5hY2xl ZG9ja2Vy MDI2 IFd5cg== IFByb3Blcg== y4g= bmls Qnl0ZXM= IHNlZWtlcg== dHJpYWw= IHVuZm9sZHM= IE1hcnNl IGV4dHJhdmFnYW50 IFN1cnZpdm9ycw== UkVEQUNURUQ= IFNwZWVkd2F5 IENyYWlnc2xpc3Q= c3VibWl0 IEdlbmVyYXRpb25z IHVwaG9sZGluZw== IGJsb29kc3RyZWFt IE1pc3Npb25z IExhd24= IGxpbWJv ZW5laQ== SHVo IFdpbGRjYXRz cHJlcA== IE1hcmt1cw== IEZvcmJpZGRlbg== cml0aWM= SU5P IGV4aGliaXRpbmc= cmVxdWVudA== Y2h1aw== IGhhYml0dWFs IENvbXBhdGliaWxpdHk= RHJhZw== UklQVA== dWphaA== R1JPVU5E IGRlbGlucXVlbnQ= IGJ1cm5lcg== IGNvbnRlbXBvcmFyaWVz IGdpbW1pY2s= bG9hZHM= IG5venpsZQ== cG9kY2FzdA== IFdhaw== IFN0YXRlbg== IEt1aA== 44GT aW50ZXJydXB0ZWQ= IGludmluY2libGU= IEJ1cm5ldHQ= Y2lnYXJldHRl IFBlYmJsZQ== IFRlbXBvcmFyeQ== IE1hcmlubw== NTgy IHdhc3RlbGFuZA== aWRlbnRseQ== VHg= IHJpdGU= IFBhbmFzb25pYw== IE1pZGRsZXM= IEhvcnRvbg== YWV1cw== IGN1cmluZw== IG1hdHM= IGFkam91cm4= IGZlYXJzb21l cGV6 Ym9hdHM= IHByb3BlbGw= IGNvbmZsaWN0ZWQ= IEFuZ2Vy IGluc3VyZ2VudA== S2FybA== IGNvYWxlcw== IHNvdXRod2VzdGVybg== IGRpc3N1 IE92ZXJ0 KioqKioqKioqKioq IGJveGVk IEJydW5l YWFh IGdhcmRlbmluZw== IEVuZ2Vs dHJhY2tz IHB1cmlmaWVk IHBsYWNlaG9sZGVy IExpa2Vz IGRhbg== R2Fi IGVjdA== IEZhdw== IEVsaW90 ICcs b3Ryb3BpYw== IFJ1aW4= aGVkb24= IGNhdWw= IGFmdA== IENhZGlsbGFj Z2hh YXNzaWFu dWRlYg== IFRpY2s= IGFkanVzdHM= QVJHRVQ= NTM3 aXNjaGU= YW50eQ== IEZyaWVkcmljaA== IEJsaXp6 IEFPTA== Q2FtcGFpZ24= IG1hbW1hbA== IFZlaWw= IEtldg== IE1hdXJpdA== IERhbWllbg== TmF0aW9u RWFzdGVybg== IHs6 ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHN0ZXJlb3R5cGljYWw= IGF0dGlj IEN5Ym9yZw== cmVxdWlyZQ== IGF3YXJkaW5n IFBhcHVh YnRu YmVudA== Qm9v ICg9 IFhhbmRlcg== IFNvbWVyc2V0 IGNhdGNoeQ== IGNlcnRpZnk= U1RSVUNU IGl0YWw= IHRpZGVz IEJyYW5kcw== R3JheQ== Y29tcGV0aXRpdmU= IGN1cmF0b3I= IERH b21pbml1bQ== IEdNT3M= Y2lhdGluZw== IENhcm1lbg== b3dhcmQ= QmFsdGltb3Jl IHJnYg== Q3U= IHdpcGVz c3BlbGw= SVRORVNT IHN1bW1hcml6ZXM= IFJldmlz IHdoaXN0bGVibG93ZXJz IEJyZWFjaA== IGNyb2NoZXQ= a29z ZXdza2k= IHJlcGV0 IGNyaW1zb24= IEthcmFjaGk= cmVhZGFibGU= ZGltZW5zaW9u IElnb3I= aWxkZWQ= IFplZA== IEtlYW5l IENvc21ldGlj REVQ IHJldHJlYXRpbmc= IFVB ZW5zaWNhbA== IGR1c2s= IERpY2tlbnM= IGFyZW5hcw== IFBhc3NhZ2U= bGV2ZWxz IGN1cnY= UG9wZQ== IGNob3Jlcw== IEVsaXNl IENvbXBhc3M= YnVi IG1hbW1hbGlhbg== IFNhbnNrcml0 IEFOQw== IENyYWNr UXVhbA== TGF1bg== YW1wdW5r IGxlYXJuZXJz IGdsYW1vcm91cw== IGZ1cnRoZQ== ZXJtb3R0 Y2FuZA== R2VuZXJpYw== IG5hcnJhdGVk IGRpc29yZGVybHk= IFRyYW5zYWN0aW9ucw== IERldGVudGlvbg== IFJva3U= xI0= IHVuZGVyc3RhdGVtZW50 IFNhdXI= IFJvZHJpZ28= IEFTQVA= U2lu IHJlam9pY2U= TWV0aG9kcw== IGVsZWN0cm9kZQ== IHdvcnNoaXBwZWQ= IGlkaQ== IFBoeXNpY2lhbnM= IHBvcHVw IGRlZnQ= IFJlbW92YWw= IEJ1ZW5vcw== dmVyYnM= IGZ1bms= dXNoYQ== cmljdGlvbg== b3JlYQ== IEJhbmdhbG9yZQ== IEtlbm9iaQ== enpp IG5vcm1hdGl2ZQ== IGdvYmxpbnM= IGNhZmVz IFVOQ0xBU1NJRklFRA== IEZpcmVk U0lHTg== IHNjbGVyb3Npcw== IFZvdGVy IFNvbm55 IEV4dGVuZA== IEVWcw== QXJzZW5hbA== IHBzaQ== IHdpZGVzdA== IFR1cw== IGxvb21z IGp1c3RpZnlpbmc= IEdyYW5nZXI= 6K8= UmVmZXI= NTgz IGZsb3VyaXNoaW5n YWJyZQ== IHJhdmU= IENvbnRyYQ== IDE4OTg= QWRkcw== IGZ1bA== IENvb2tl c29tZW9uZQ== PSM= Njcx IHlhaw== IGFydGU= IE1pc2NlbGxhbmVvdXM= IERldGVjdGlvbg== IENsYW5jeQ== 4oE= YXNzaWVz IHZhbGlhbnQ= IEZlbWluaXN0 Y29ycnVwdGlvbg== VmVs UGVhcg== IHN1Y2NpbmN0 IHF1aWNrZXN0 a3c= IHNwaXR0aW5n IExpYnJhcmllcw== 5YWJ YW50eg== RGFk IFNwZWNpZmljYXRpb25z cnVwdWxvdXM= YW5kcg== UkVTVUxUUw== IHNub3diYWxs IHByZWRpcw== IEJheHRlcg== IE51cnNpbmc= IENoYWZm c3dl IG91dGFnZQ== IG5lc3Rpbmc= IG5vdG9yaWV0eQ== dHJpZ2dlcg== b25pdGU= am9u IGZvdQ== b29rZWQ= IENlbGVicml0eQ== cmVhbGl0eQ== IGZhdGln IGh1Z2dpbmc= IGJvdGhlcnM= IFBhbnplcg== IENoYW5kcmE= ZmlndXJlZA== IHZvbHRz IENsb3Vkcw== IGZlZWJsZQ== IEN1cnZl IEFzdXM= Nzg2 YWJzb3I= IFZJQ0U= IEhlc3M= IG1hbnVmYWN0dXJlcw== IGdyaXp6 IFBvd2VyZnVs YWNpZA== IHN1YnNlY3Rpb25z IEtydWdtYW4= IEFscHM= aXN1 IHNlcXVlc3Q= IFVsdHJvbg== IFRpbmtlcg== IEdvb3Nl IG1pc21hdGNo QXR0b3JuZXk= IG1vcnBob2xvZ3k= IFNpeGVycw== dXR0ZXJlZA== IEVMRUNU Z3Jhbg== UnVzc2VsbA== IEdTTA== IGZvcnRuaWdodA== IC4p IGFwb3N0bGU= cHJvbmU= ZWxpc3Q= VW50aXRsZWQ= IEltcGxlbWVudGF0aW9u aXN0b3Jz IHRhbmtlcg== IHBsdXNo IGF0dGVuZGFudHM= IFRpaw== IEdyZWVud2ljaA== IFlvbg== IFNQTA== Y2VsbHM= dW50bGVk U29sdXRpb24= IFF1w6k= IHZhY2F0ZWQ= IHVwdGljaw== IE1lcmlkaWFu 5oM= IERyaWxs OTI1 NTg0 IHJlbm92YXRlZA== IEt1YnJpY2s= enlr IGxvdXN5 cHBlbA== b2h5ZHJhdGU= IEl6enk= bGVzaWFzdGljYWw= Q0ND IEFqYXg= IGFkYXB0ZXJz IFBldHJhZXVz IGFmZmlybWF0aW9u IFNUT1I= bGVtcw== YWRvZXM= IENvbnN0YW50aW5vcGxl IHBvbmllcw== IGxpZ2h0aG91c2U= IGFkaGVyZW50cw== IEJyZWVz b21vcnBoaWM= RmlnaHRpbmc= IHBsYXN0ZXI= IFBWQw== IE9ic3Q= IGRlYXJseQ== IFRvb3Ro aWNrc29u IHNoYW1pbmc= UGxleA== QWdn IOKApiI= IHN1YnJlZGRpdHM= IHBpZ2Vvbg== IFJlc2lkZW50aWFs IFBhc3Npbmc= IGx1bQ== IFBlbnNpb24= IHBlc3NpbWlzdGlj IDQzMg== emluc2tp Y2FkZQ== MDc1 IGFwb2xvZ2lzZWQ= aXlhaA== UHV0dGluZw== IGdsb29teQ== IEx5bWU= PS09LT0tPS09LT0tPS09LQ== IFRvbWU= IFBzeWNoaWF0cmlj IEhJVA== Y21z YXBvbG9n IGJyZWFrZXI= IGRlZXBlbg== IHRoZW9yaXN0 IEhpZ2hsYW5kcw== IGJha2Vy IHN0YXBsZXM= IGludGVyZmVyZWQ= IEFib3J0aW9u am9pbmVk Y2h1 IGZvcm11bGF0ZQ== IHZhY2NpbmF0aW9ucw== IGJhbnRlcg== cGhldXM= IG91dGZpZWxkZXI= IE1ldGVy ICMjIyMj IDE4OTU= IG5hcnJvd2luZw== IFNUT1JZ ZnA= IENTVA== aWdub3Jl IHByb2NsYWltaW5n IFJV IEJBTEw= eW5h NjUz IHBvc2l0 UFJF NTk0 IFJlZ2lzdHJhcg== IFBpbGdyaW0= aWNpbw== IHByZXR0 IGxpZmVsZXNz IF9fXw== TmVpZ2g= IENodXJjaGVz b3Jubw== IG9yY3M= IGtpbmRyZWQ= IEF1ZGl0 IG1pbGxlbm5pYWw= IFBlcnNpYQ== Z3Jhdml0eQ== IERpc2FiaWxpdHk= IERBUks= V3M= b2Rvbg== IGdyYW5kZGF1Z2h0ZXI= IEJyb29rZQ== IEFEQQ== RVJB IHBpY2t1cHM= IFdpbGtpbnNvbg== IFNoYXJkcw== IE5L IGV4cGVs IEtpc2x5YWs= IGphcmdvbg== IHBvbGFyaXplZA== aWFuZQ== UHVibGlzaGVy IHJlYnV0dA== IGFwcHJlaGVuc2lvbg== IEtlc3NsZXI= IHByaXNt RlVM MTk2NA== IExvbGw= 5L8= bGV0aGFs xZ8= IGdoZXR0bw== IGJvdWxkZXI= IFNsb3dseQ== IE9zY2Fycw== IEluc3RydWN0aW9u IFVsdHI= IE1vZQ== TmljaA== IFBBVEg= KCo= IFJFTEVBU0U= dW5pbmc= cm91c2U= ZW5lZw== IHJlaW1i IERldGVjdGVk RG9T IHN0ZXJsaW5n IGFnZ3JlZ2F0aW9u IExvbmVseQ== IEF0dGVuZA== aGlnaGVy IGFpcnN0cmlrZQ== a3Nvbg== U0VMRUNU IGRlZmxhdGlvbg== IEhlcnJlcmE= Q29sZQ== cml0Y2g= IGFkdmlzYWJsZQ== RmF4 IHdvcmthcm91bmQ= IHBpZA== bW9ydGVt ZXJzZW4= IHR5cG8= IGFsdW0= Nzgy IEphbWFs c2NyaXB0cw== IGNhcHRpdmVz IFByZXNlbmNl IExpZWJlcm1hbg== YW5nZWxv IGFsY29ob2xpc20= YXNzaQ== IHJlY2l0ZQ== IGdhcGluZw== IGJhc2tldHM= IEdvdQ== QnJvd3Nlcg== bmVhdQ== IGNvcnJlY3RpdmU= dW5kYQ== c2NvcmluZw== IFhE IGZpbGFtZW50 IGRlZXBlbmluZw== IFN0YWlubGVzcw== SW50ZWdlcg== IGJ1Z2d5 IHRlbmFuY3k= IE11YmFyYWs= IHR1cGxl IERyb2lk IFNpdHRpbmc= IGZvcmZlaXQ= IFJhc211c3Nlbg== aXh0aWVz ZXNp IEtpbW1lbA== IG1ldGljdWxvdXNseQ== IGFwb3B0 IFNlbGxlcg== MDg4 ZWNha2U= aGVtYXRpY2FsbHk= VE4= IG1pbmRsZXNz IGRpZ3M= IEFjY29yZA== b25zZW5zZQ== ZW1pbmc= YnJhY2U= IGVCb29r IERpc3RyaWJ1dA== IEludmVzdG1lbnRz d3Q= XSks YmVoYXZpb3I= NTYz IGJsaW5kaW5n IFByb3Rlc3RlcnM= dG9waWE= IHJlYm9ybg== IEtlbHZpbg== IERvdmVy IERhaXJ5 IE91dHM= IFsv z4A= YnA= IFZhbml0eQ== IFJlY2Fw IEhPVVNF IEZBQ0U= IDQyMg== Njky IEFudGlvY2g= Y29va2Vk IGNvbGxpZGU= IGFwcg== IHNsZWVwZXI= IEphcnZpcw== IGFsdGVybmF0aXZlbHk= IExlYXZlcw== IE1hdw== IGFudGlxdWl0eQ== IEFkaW5pZGE= IGFidXNlcg== UG9rw6ltb24= IGFzc29ydGVk IFJldmlzaW9u IFBpYW5v IEdpZGVvbg== T2NlYW4= IHNhbG9u IGJ1c3RsaW5n b2duaXRpdmU= IFJhaG1hbg== IHdhaXRlcg== IHByZXNldHM= IE9zaA== IEdIQw== b3BlcmF0b3I= IHJlcHRpbGVz IDQxMw== IEdhcnI= IENoYWs= IGhhc2hlcw== IGZhaWxpbmdz IGZvbGtsb3Jl IGFibA== IENlbmE= IE1hY0FydGh1cg== IENPVVJU IHBlcmlwaGVyeQ== YXBwZXJz IHJlY2tvbmVk IEluZmx1 IENFVA== IDM3Mg== IERlZmluaXRpdmU= YXNzYXVsdA== NDIx IHJlc2Vydm9pcnM= IGRpdmVz IENvaWw= REFR IHZpdmlkbHk= IFJK IEJlbGxldg== IGVjbGVjdGlj IFNob3dkb3du IEtN aXBlZA== cmVldGluZ3M= IEFzdWth TGliZXJhbA== IM+E IGJ5c3RhbmRlcnM= IEdvb2R3aW4= dWtvbmc= U2l0 IFRyZW0= IGNyaW1pbmFsbHk= IENpcmN1cw== Y2hyb21l ODg3 IG5hbm9w IE9iaQ== IExPVw== b2do IEF1dGhvcnM= b2J5bA== VXJiYW4= IHRp IFdlaXI= dHJhcA== YWd5 IHBhcmVudGhlc2Vz IG91dG51bWJlcmVk IGNvdW50ZXJwcm9kdWN0aXZl IFRvYmlhcw== dWJpcw== UGFyc2Vy U1RBUg== IHN5bmFwdGlj IEdlYXJz IGhpYmVy IGRlYnVua2Vk IGV4YWx0ZWQ= YXdhdHRz SE9V Q2h1cmNo IFBpeGll IFVyaQ== IEZvcm1hdGlvbg== IFByZWRpY3Rpb24= Q0VP IHRocm90dA== IEJyaXRhbm4= IE1hZGFnYXNjYXI= 64s= IGJpbGxib2FyZHM= IFJQR3M= IEJlZXM= Y29tcGxldGVseQ== RklM IGRvZXNudA== IEdyZWVuYmVyZw== cmV5cw== IHNsaW5n IGVtcHRpZWQ= IFBpeGFy IERoYXJtYQ== bHVjaw== aW5ndWlzaGVk IGVuZG90 IGJhYnlz MDU5 Y2hlc3Q= cmF0cw== IHJpZGRlbg== IGJlZXRsZXM= IGlsbHVtaW5hdGluZw== IGZpY3RpdGlvdXM= IFByb3ZpbmNpYWw= IDc2OA== IHNoZXBoZXJk IFJlbmRlcg== IDE4OTY= Q3Jldw== IG1vbGRlZA== IFhpYW9taQ== IFNwaXJhbA== IGRlbGlt IG9yZ2FuaXNpbmc= IGhvb3Bz IEJlaQ== emhlbg== IGZ1Y2tpbg== IGRlY2Fk IHVuYmlhc2Vk YW1teQ== c3dpbmc= IHNtdWdnbGVk IGtpb3M= IFBFUlNPTg== IElucXVpc2l0b3I= IHNub3d5 IHNjcmFwaW5n IEJ1cmdlc3M= UHRy YWdhbWU= Ulc= IGRyb2lk IEx5cw== IENhc3NhbmRyYQ== SmFjb2I= IDM1NA== IHBhc3R1cmU= IGZyYW5j IFNjb3RjaA== IEVuZHM= IElHRg== ZGVmaW5pdGlvbg== IGh5c3RlcmljYWw= IEJyb3duZQ== Nzcx IG1vYmlsaXphdGlvbg== 5pU= aXF1ZW5lc3M= VGhvcg== IHNwZWFyaGVhZGVk IGVtYnJvaWxlZA== IGNvbmplY3R1cmU= anVkaWNpYWw= Q2hvaWNl IHBhcGVyYmFjaw== UGly IHJlY292ZXJz IFN1cmdl IFNob2d1bg== IFBlZGlhdHJpY3M= 44Gg IHN3ZWVwcw== IExhYm9yYXRvcmllcw== IFBhY2tz YWx1cw== YWRkaW4= IGhlYWRsaWdodHM= Z3Jh RXZpZGVuY2U= Q09MT1I= QWRtaW4= irE= IGNvbmNvY3Q= c3VmZmljaWVudA== IHVubWFya2Vk IHJpY2huZXNz IGRpc3NlcnRhdGlvbg== IHNlYXNvbmluZw== IGdpYg== IE1hZ2Vz dW5jdGlvbnM= IE5pZA== Y2hlYXQ= IFRNWg== Y2l0aXplbnM= IENhdGhvbGljaXNt bmI= IGRpc2VtYmFyaw== IFBST0dSQU0= YXF1ZXM= VHlsZXI= T3Jn IFNsYXk= IE5lcm8= IFRvd25zZW5k SU5UT04= dGVsZQ== IG1lc21lcg== OTAx IGZpcmViYWxs ZXZpZGVuY2U= YWZmaWxpYXRlZA== IEZyZW5jaG1hbg== IEF1Z3VzdGE= MDIx IHNsZWQ= IHJldXNlZA== IEltbXVuaXR5 IHdyZXN0bGU= YXNzZW1ibGVk TWFyaWE= IGd1bnNob3Rz IEJhcmJpZQ== IGNhbm5hYmlub2lkcw== IFRvYXN0 IEtpbmRlcg== SVJE IHJlanV2ZW4= IGdvcmU= IHJ1cHR1cmU= IGJyZWFjaGluZw== IENhcnRvb24= IDQ1NQ== IFBhbGVv NjE0 IHNwZWFycw== IEFtZXM= YWJ1cw== TWFkaXNvbg== R1JPVVA= IGFib3J0ZWQ= eWFo IGZlbG9u IGNhdXNhdGlvbg== IHByZXBhaWQ= IHBpdHRlZA== b3BsYW4= IFNoZWxsZXk= IFJ1c3Nv IFBhZ2Fu IHdpbGxmdWxseQ== IENhbmF2ZXI= dW5kcnVt IFNhbGFyeQ== IEFycGFpbw== cmVhZGVy IFJhdGlvbmFs IE92ZXJzZQ== IENhdXNlcw== ICou IHdvYg== S2VpdGg= IENvbnNlbnQ= bWFuYWM= Nzcz NjIz IGZhdGVmdWw= ZXRpbWVz IHNwaXJpdGVk IER5cw== IGhlZ2Vtb255 IGJveWNvdA== IEVucmlxdWU= ZW1vdXRo IHRpbWVsaW5lcw== IFNhaGFyYQ== IFJlbGF4 IFF1aW5jeQ== IExlc3NvbnM= IEVRVQ== U0VB Tks= IENvc3Rjbw== SW5jcmVhc2U= IG1vdGl2YXRpbmc= IENob25n YW1hcnU= IERpdmlkZQ== IHBlZGlncmVl IFRhc21hbmlh IFByZWx1ZGU= TGFz OTQw NTc0 IGNoYXU= IFNwaWVnZWw= dW5pYw== LS0+ IFBoaWxpcHM= IEthZmth IHVwaGVhdmFs IHNlbnRpbWVudGFs IHNheA== IEFraXJh c2VyaWFs TWF0cml4 IGVsZWN0aW5n IGNvbW1lbnRlcg== IE5lYnVsYQ== cGxldHM= IE5hZHU= IEFkcmVu IGVuc2hy IFJBTkQ= ZmluYW5jaWFs IENseWRl dXRoZXJmb3Jk IHNpZ25hZ2U= IGRlbGluZQ== IHBob3NwaGF0ZQ== cm92ZXJzaWFs ZmFzY2lzdA== IFZhbGw= IEJldGhsZWhlbQ== IGZvcnM= IGVuZ2xpc2g= U29saWQ= TmF0dXJl IHZh IEd1ZXN0cw== IHRhbnRhbA== IGF1dG9pbW11bmU= Ozs7Ozs7Ozs7Ozs7 IFRvdGFsbHk= IE92 IGRlZmVuY2Vz IENvY29udXQ= IHRyYW5xdWls IHBsb3k= IGZsYXZvdXJz IEZsYXNr 44Ko44Or IFdlc3Rvbg== IFZvbHZv ODcw IG1pY3JvcGhvbmVz dmVyYmFs UlBH IGlpaQ== O30= MDI4 IGhlYWRsaW5lZA== IHByaW1lZA== IGhvYXJk IFNoYWQ= IEVOVEVS IHRyaWFuZ3VsYXI= IGNhcGl0 bGlr IEFuY2llbnRz IGxhc2g= IGNvbnZvbA== IGNvbG9uZWw= ZW5lbXk= R3Jh IHB1YnM= dXR0ZXJz IGFzc2lnbnM= IFBlbmV0 IE1vbnN0cm91cw== IEJvd2Vu aWx2ZXI= SGF1bnRlZA== IERpbmc= c3RhcnRlZA== cGxpbg== IGNvbnRhbWluYW50cw== IERPRQ== ZmZlbg== IFRlY2huaWNpYW4= Unk= IHJvYmJlcnM= IGhvdGxpbmU= IEd1YXJkaW9sYQ== IEthdWZtYW4= cm93ZXI= IERyZXNkZW4= IEFscGluZQ== RWxm IGZtdA== IFNhcmQ= dXJzZXM= Z3B1 VW5peA== IHVuZXF1aXZvY2FsbHk= IENpdGl6ZW5zaGlw cXVhZA== bWlyZQ== IFN3ZWVuZXk= QmF0dGVyeQ== NjE1 IHBhbmNha2Vz IG9hdHM= TWFwcw== IENvbnRyYXN0 bWJ1ZHNtYW4= IEVQUw== IHN1YmNvbW1pdHRlZQ== IHNvdXJjaW5n IHNpemluZw== IEJ1ZmZlcg== IE1hbmRhdG9yeQ== IG1vZGVyYXRlcw== IFBhdHRlcm5z IENob2NvYm8= IFphbg== IFNUQVRFUw== IEp1ZGdpbmc= IEluaGVy Kjo= IGJpbA== IFllbg== IGV4aGlsYXI= b2xsb3dlcg== emVycw== IHNudWc= bWF4aW11bQ== IGRlc3BpY2FibGU= IFBBQ0s= IEFubmV4 IHNhcmNhc3RpYw== IGxhdGV4 IHRhbXA= IFNhbw== YmFo IFJldmVyZW5k IENoaW5hdG93bg== IEFVVA== ZG9jdW1lbnRlZA== IEdBQkE= IENhbmFhbg== INmF IGdvdmVybnM= cHJldg== RXNj IEVzdGltYXRlcw== T1NQ IGVuZGVhdm91cg== IENsb3Npbmc= b21ldGltZQ== ZXZlcnlvbmU= IHdvcnNlbg== IHNjYW5uZXJz IGRldmlhdGlvbnM= IFJvYm90aWNz IENvbXB0b24= IHNvcmNlcmVy IGVuZG9nZW5vdXM= IGVtdWxhdGlvbg== IFBpZXJjaW5n IEFwaA== IFNvY2tldA== IGJvdWxk IE9V IEJvcmRlcmxhbmRz IDE4NjM= R29yZG9u IFdUTw== IHJlc3RyaWN0cw== IG1vc2FpYw== IG1lbG9kaWVz 54Q= VGFy IGRpc3Nvbg== IFByb3ZpZGVz IC4uLi4uLg== YmVr RklY IGJyb29t YW5zaGlw RG9jdG9ycw== IG5lcmRz IFJlZ2lvbnM= bmFpc3NhbmNl IG1ldGU= IGNyZXB0 cGxpbmdz IGdpcmxmcmllbmRz a25pdA== aWdlbnQ= b3dl IHVzaGVyZWQ= IEJheg== TW9iaWw= NDM0 IFByZXNlbnRz b3JpZ2lu IGluc29tbmlh IEF1eA== NDM5 IENoaWxp aXJzY2g= R0FNRQ== IGdlc3RhdGlvbg== YWxnaWE= cm9taXNpbmc= JCw= Y3Jvdw== IEluc3BlY3Rpb24= YXRvbWlj UmVsYXRpb25z Sk9ITg== cm9tYW4= IENsb2Nrd29yaw== IEJha3I= bW9uZQ== TUVU IHRoaXJzdHk= IGJj IGZhY3VsdGllcw== UnVt IG51YW5jZQ== IERhcml1cw== cGxldGluZw== ZnRlcnM= ZXRjaHVw UmVnaXN0cmF0aW9u IEtF UmFo IHByZWZlcmVudGlhbA== IExhc2g= IEhI VmFsaWQ= IE5BVg== IHN0YXJ2ZQ== IEdvbmc= enluc2tp IEFjdHJlc3M= IHdpaw== IHVuYWNjb21wYW5pZWQ= bHZs QnJpZGU= QURT IENvbW1hbmRv IFZhdWdobg== V2FsbGV0 IGhvcHBpbmc= IFZpZQ== IGNhdmVhdHM= IGFsYXM= aWZsZWQ= YWJ1c2U= NjYx IGlibg== IGd1bA== IHJvYmJpbmc= dGls SUxB IG1pdGlnYXRpbmc= IGFwdGx5 IHR5cmFudA== IG1pZGRheQ== IEdpbG1vcmU= IERlY2tlcg== IMKnwqc= cGFydGlhbA== RXhhY3RseQ== IHBoZW5vdHlwZQ== IFsrXQ== IFBsZXg= IElwcw== dmVyc2lvbnM= IGVib29r IGNoaWM= Z3Jvc3M= IjoiIn0seyI= IFN1cnByaXNpbmdseQ== TW9yZ2Fu IHJlc2lkdWVz IENvbmZlZGVyYXRpb24= aW5mZWxk IGx5cg== bW9kZXJhdGU= IHBlcnBlbmRpY3VsYXI= Vks= IHN5bmNocm9uaXplZA== IHJlZnJlc2hlZA== IGFkb3Jl IFRvcm1lbnQ= b2xpbmE= IDI2MDA= SXRlbVRyYWNrZXI= IHBpZXM= IEZBVA== IFJIUA== MDQ4 IFJFU1A= IEJK YWxsb3dz UGFuZA== IHVud2VsY29tZQ== IFZvYw== IEJhc3RhcmQ= IE9X IExBUg== IEhlYWxlcg== RW52aXJvbm1lbnRhbA== IEtlbnlhbg== IFRyYW5jZQ== IFBhdHM= IGFsaWFzZXM= IEdhcmZpZWxk IGNhbXBhaWduZXI= IGFkdmFuY2VtZW50cw== IE9raW5hd2E= IENvaA== b3dza3k= IHN0YXJ2ZWQ= IHNpemVhYmxl IDotKQ== IG1STkE= IHN1c3BlbnNpb25z aXN0YXI= U2NvdGxhbmQ= UHJpbg== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IDUwMg== IHRlYXNwb29ucw== IDEwNTA= IGNvZXJjaXZl IE1hc29uaWM= ZWRkZWQ= IFBhc3Nlbmdlcg== IGxhdHQ= IGJyYWNlcw== IFN0ZWFs IE5ZVA== IEthdHM= IENlbGVzdA== YWV6 VHU= IENvdWx0ZXI= 8J+Y RmxpY2ty IFdpbG1pbmd0b24= aXRocw== Kys7 IHZlbmRpbmc= IG5lZ3Jv IFBoaQ== IFllbGxvd3N0b25l Q2FsbGJhY2s= IHNoYW1wb28= IFNoYWRlcw== d2F0 IHN1cGVyaHVtYW4= IHJpZGljdWxlZA== IGhvbGllc3Q= b21ibw== IGludGVybnM= IGhvbmU= IFBhcmFndQ== VVJJ IGRhbmdsaW5n 44K7 c292 aWN0aW9uYWw= YXZhaWxhYmlsaXR5 IHJldm9jYXRpb24= IGRvdw== aW5pYw== IFRIRUlS IGlzbw== IG91dGluZ3M= IExldGhhbA== ICkpKQ== IGluYWNjdXI= IG91dGxhbmRpc2g= IGFudXM= bGV0aWNv aWRvbg== bG9s IHVucmVndWxhdGVk IHN1Y2N1bWJlZA== IGN1ZmY= IFdhc3RlbGFuZA== bGV0YWw= IHN1YnN0cg== IGNvZmZlcnM= IGF1dG9tYWtlcnM= b3Zp IFh1ZQ== IERheXRvbmE= IGphcnJpbmc= IGZ1bWVz IGRpc2JhbmRlZA== emlr aXR0b24= IHN0cmlraW5nbHk= IHNwb3Jlcw== QWRhcHRlcg== Lik6 IEx5bmRvbg== aXZhbHJ5 IG9yYWxseQ== IHR1bXVsdHVvdXM= IGRpc3BsZWFzdXJl IGNvbmVz b3JyZWN0 IGFwcGVhc2U= IGRlcmJ5 IFRyaXBvbGk= IEFsZXNz IHBva2Vk IEd1aWx0eQ== dlA= RW5vdWdo IG9yaWdpbmFscw== Njk5 IHJhYmJp IHByb3ZlcmJpYWw= IHBvc3Rwb25l ZWxvcGU= IE1pc3R5 IHN0YWZmZWQ= IFVuZW1wbG95bWVudA== cmVkaXRhcnk= IGRpbGlnZW50 cmVjb21t bWVhc3VyZXM= YXNpbg== ODI1 IHBvbmRz IG1tb2w= IFNBUg== IENBUkU= IDM3MQ== IGNsZW5jaGVk IENvcnNhaXI= IGNhcmljYXR1cmU= em4= YXR0YWNo IFNjaHJv c3BlYWs= cGFpbnRlZA== IFN1Yw== IEVOVA== IGNlbGx1bA== IFBhaWQ= ZGlhZ24= V0hFUkU= IHRleHRlZA== QmFybg== IHJldHJhY3RlZA== IFJlZmVycmVk U2F2 IHVwa2VlcA== IHdvcmtwbGFjZXM= IFRva2Vucw== IGFtcGxpZnk= Y2xpbmljYWw= IG11bHRpYw== bWJlcmc= IGNvbnZvbHV0ZWQ= UmVnaW9u NTY1 IFRvcGlj IHNuYWls IHNhbGluZQ== IGluc3VycmVjdGlvbg== IFBldHI= Zm9ydHM= QkFU IE5hdmFqbw== IHJ1ZGltZW50YXJ5 IExha3No T05ET04= TWVhc3VyZQ== IHRyYW5zZm9ybWVy IEdvZGRhcmQ= IGNvaW5jaWRlcw== aXJpbg== UmV4 IEJvaw== cXVpdA== IHNob3RndW5z IHByb2xldGFyaWFu IHNjb3Jw IEFkYQ== NTE0 IHNsYW5kZXI= cmVjb3JkZWQ= IGVtYmVsbA== cmlzb21l IGFwb2xvZ2l6aW5n IE11bGNhaXI= IEdpYnJhbHRhcg== Q2xh IGFsbG90 IEF0dGVudGlvbg== IDQzMw== bGVhdmU= IHdoaW5l IElzc2E= IEZhdXN0 IEJhcnJvbg== aGVueQ== IHZpY3RpbWl6ZWQ= SmV3cw== IG51cnR1cmluZw== ZXR0ZWw= V2luZ2Vk IFN1YnRsZQ== IGZsYXZvcmZ1bA== IFJlcHM= ZW5nZWQ= Y2FsbGJhY2s= IGRpcmVjdGlvbmFs IGNsYXNw IERpcmVjdGlvbnM= cGxhbmV0 aWN1bHR1cmU= SGVscGVy aWNpb24= YWNpYQ== IOelng== IHN1cmdlcw== IGNhbm9l IFByZW1pZXJzaGlw YmVlbg== IGRlZmllZA== IFRyb29wZXI= IHRyaXBvZA== IGdhc3A= IEV1cGg= IEFkcw== dmVybmlnaHQ= aGlnaGx5 Um9sZQ== IGVudGFuZ2xlZA== IFplaXQ= NjE4 IFJ1c3R5 IGhhdmVucw== IFZhdWdoYW4= SEFFTA== IFNFUlZJQ0U= Lyw= IHN0cmlja2Vu IGRlbHVzaW9ucw== IGJpcw== IEhhZg== IGdyYXRpZmljYXRpb24= IGVudGljaW5n VU5DSA== QWRhbXM= IE9MRUQ= IEJlZXRsZQ== IDE4OTk= IFNPRlRXQVJF YXRlZ29y Vkw= IFRvdGVt IEdhdG9ycw== QVRVUkVT IGltcGVkYW5jZQ== UmVnaXN0ZXJlZA== IENhcnk= IEFlcmlhbA== b25uZQ== ZW5pdW0= IGRyZWQ= IEJlZw== IGNvbmN1cnJlbnRseQ== IHN1cGVycG93ZXI= IFhhbg== amV3 aW1lc3Rlcg== IERpY2tpbnNvbg== 4pSB Rmxh IHByZWU= IFJvbGxpbnM= qbbm IGRlbm9taW5hdGlvbg== IExhbmE= NTE2 IGluY2l0aW5n c2NyaWJlZA== anVyaWVz IFdvbmRlcnM= YXBwcm94aW1hdGVseQ== IHN1c3BlbmRpbmc= IG1vdW50YWlub3Vz IExhdWdo b2lkYWw= TnM= RGV0ZWN0 KT0= IEx1dGhvcg== IFNjaHdhcnplbmVnZ2Vy IE11bGxlcg== IERldmk= ZWN5Y2xl SmFy NjEz IExvbmdo QmFo IFNQT1JUUw== bnc= IHJlZmluZW1lbnQ= IHdhdGVyd2F5cw== IGRpbmVy QmxhZGU= Njgz RmFj IGluaXRpYWxz IHJvZw== IHBhcmFub3JtYWw= QlVU IFso IFN3YW5zb24= IE1lc2g= 4pas SW1wcm92ZQ== IFJhZGlhdGlvbg== IEVzdGhlcg== IEVzaw== IEFseQ== aWt5 IGlycmFk IEJ1Y2tpbmdoYW0= IHJlZmlsbA== IC5f UmVwZQ== Q09OQ0xVUw== IGRpZmZlcmVudGlhdGVk IGNoaXJvcA== IEF0a2lucw== UGF0dGVybg== IGV4Y2lzZQ== IGNhYmFs TlNB IFNUQQ== IFNJTA== IFBhcmFseQ== IHJ5ZQ== IEhvd2VsbA== IENvdW50ZG93bg== bmVzc2Vz YWx5c2Vk IHJlc2l6ZQ== 44K9 IGJ1ZGdldGFyeQ== IFN0cmFz d2FuZw== IGFwaWVjZQ== IHByZWNpbmN0cw== IHBlYWNo IHNreWxpbmU= IDM1Mw== cG9wdWxhcg== QXBwZWFyYW5jZXM= IE1lY2hhbmljcw== IERldk9ubGluZQ== U3VsbGl2YW4= WmVu IHB1 b3BvbGlz NTQ0 IGRlZm9ybQ== IGNvdW50ZXJhY3Q= IExhbmdl IDQxNw== Q29uc29sZQ== Nzc0 IG5vZGRpbmc= IHBvcHVsaXNt IGhlcA== IGNvdW5zZWxsaW5n Y29tcGxpYW5jZQ== VUZG IHVuZGVuaWFibHk= IHJhaWxpbmc= IEhvcm93aXR6 IFNpbW9uZQ== IEJ1bmdpZQ== IGFr IFRhbGtz eGZm Zmxha2U= Q3Jhc2g= IHN3ZWF0eQ== IGJhbnF1ZXQ= IE9GRklD IGludmVudGl2ZQ== IGFzdHJvbm9tZXI= IFN0YW1mb3Jk IFNjYXJl IEdSRUVO b2xpY2l0ZWQ= IHJ1c2hlcg== IGNlbnRyaXN0 aWdodGluZw== IHN1YmNsYXNz IGRpc2F2 IGRlZnVuZA== IE5hbnRv b2NpYXRl bWFzdA== IHBhY2lm IG1lbmQ= ZWVycw== aW1taWdyYXRpb24= RVNTSU9O IG51bWJlcmluZw== IGxhdWdoYWJsZQ== IEVuZGVk dmlhdGlvbg== ZW1hcms= UGl0dA== IG1ldGljdWxvdXM= IExG IGNvbmdyYXR1bGF0ZWQ= IEJpcmNo IHN3YXllZA== IHNlbWlmaW5hbHM= IGh1bWFua2luZA== bWF0dGVy IEVxdWlw b3BhdXNhbA== U2FpZA== IExheW91dA== IHZvaWNpbmc= IHRodWc= IHBvcm5vZ3JhcGhpYw== SVBT IG1vYW5pbmc= IGdyaWV2YW5jZQ== IGNvbmZlc3Npb25z ZXNjYWw= VEVYVFVSRQ== QXV0aGVudA== b3NhdXJ1cw== UHVyY2hhc2U= IHJlbGVnYXRpb24= YWx0ZXI= IMKgwqA= IHJpZGRsZWQ= IG9ncmU= IExvd2VsbA== T2NjdXA= RWF0 IEh5ZGVy IEFkdmlzZXI= Q29tbWVyY2U= SHVudA== IE9ydGg= IENvbXBldGl0aXZl IENMQQ== Q0RD IHNhbGFkcw== Rmxl IGluZHVzdHJpYWxpemVk YCw= IE9XTg== IGJlY2s= IFBhcnRpY3VsYXJseQ== b3VidA== IG1N IEh1c3NhaW4= IENoZW5uYWk= IDkyMA== IGFwcG9pbnRpbmc= IEN1bGxlbg== LCwsLCwsLCw= IHBvcmVz dmVyaWZpZWQ= IGJpb2NoZW1pY2Fs ZW1hdGU= IGNvd2FyZGx5 IEhlbHNpbmtp IEV0aGlvcGlhbg== U09VUkNF RVJD ZXN0cm8= IGJpb3RlY2g= IFNvdXI= IGJyZXdlcg== Qmxvb21iZXJn IGludGVuc2lmeQ== R2xhc3M= YW5jbw== IEZEUg== Z3JlU1FM IEZpcmVz qbbmpbU= ZWNv MTAwMQ== IEhvbWVsZXNz IGluc3RhbnRhbmVvdXM= IEhhc3Rl aWdlbA== RGlhbW9uZA== IHBhdmluZw== IGxhbmRmaWxs IGRhZHM= aG91bg== Ol0= IGluY2VuZGlhcnk= IExpdmluZ3N0b24= IEhpbGJlcnQ= IENoZWNrcw== c3R5bGVz aW5hdG9ycw== IENsaXZl cGhyaW5l IGNoaW1wYW56ZWVz IHBhbGw= IEpN IEFhZGhhYXI= 8J0= IGFjaGlldmFibGU= ZGlzYWJsZWQ= UEVU T09PT09PT08= TW90 IGludGFuZ2libGU= IGJhbGxldA== IFdlYnM= IEVzdGltYXRlZA== RWZmZWN0cw== IGJhaWxlZA== Sm9zaHVh IHR1cmJ1bGVuY2U= IG9jY3VwYW50 IERheWxpZ2h0 IDM2MQ== bWVldA== IHN0YXRpY2FsbHk= IG9ubG9vaw== IGtp aWxsZWdhbA== IHZlbHZldA== IGRlaHlkcmF0aW9u IGFjcXVpZXM= IFJleg== YWt1cmE= IFVwdG9u YXRybw== IGluY29tcHJlaGVuc2libGU= IGJhY2tkb29y IFJoaW5v NzI3 IG1hdGhz KSs= IGhlcmVzeQ== IGRm IFJvY2hl IEx5ZGlh IHBhbmNyZWF0 cmVwbHk= YXJyZWxs IHNvbGljaXRhdGlvbg== IGNpcmNhZGlhbg== QklQ IGZvcmF5 IGNyeXB0aWM= aXp1 aW1lbw== IFRvbWF0bw== IEhvbXM= ZXhhbWluYXRpb24= IHF1YXJyeQ== IFZhbGlhbnQ= IEplcmljaG8= IElOQ0xVRA== IDE4NDA= NTE5 IHJlc2lzdHM= IHNuYXBzaG90cw== IFNwdXI= IEFudGlxdQ== TG9naW4= IGJlc3RzZWxsaW5n IGFudGlj IFN1dGhlcmxhbmQ= 44Ki44Or IH4v IFBhcm0= 6IM= UGFnZXM= aW50ZW5zaXR5 IGltbW9iaWw= IDE4NjU= enpv IG5pZnR5 IGZlbnRhbnls IFByZXNlcnZhdGlvbg== b3BoZW4= IGRhcnRz IERpbm9zYXVy cG9pbnRlcnM= IFJpdGU= c3VnZ2VzdA== YXdhcmVuZXNz IFNoZXJpZGFu IHN0YW5jZXM= IHNvcmNlcnk= IHBlcmp1cnk= IE5pa29sYQ== aWV2ZXI= IGZpYW5jZQ== IEpvcmRhbmlhbg== IEJhbGxvb24= IG5hYg== IGti IGh1bWFuaXRpZXM= IFRhbmFrYQ== aGlsbGFyeQ== IGNvbnN1bHRhbmN5 IFp1Yg== IHJlbWlzc2lvbg== IGNvbmZpZA== Q0hR IEZ1Zw== IGltcHJvdmlz WWVw L18= IHVud2lsbGluZ25lc3M= IHBvcnRmb2xpb3M= MDU1 IEluc3RydWN0b3I= YWltYW4= IGNsYWltYW50cw== TWJwcw== IEJ5ZQ== cmVjZWl2ZWQ= VHdlZXQ= IGluZGVtbg== cml6 YW1hcmE= TmF0 IGV2YWx1YXRlcw== IEx1cg== ZXBhZA== Rk9Y IFRocm8= IHJ1c3R5 IGJlZHJvY2s= IE9wcmFo SkI= IG1hbmlwdWxhdGl2ZQ== IHdpbGxmdWw= IHJlbGFwc2U= IGV4dGFudA== VGhlbWU= U2Vuc29y IFN0YWJpbGl0eQ== Z292ZXJu IHBvcHB5 IGtuYWNr IGluc3VsYXRlZA== IFRpbGU= IEV4dHJlbQ== IHVudG9sZA== IGNvbnZlcmdl IHJlZnVlbA== aWdyb3Vw IGRpc3RvcnRpb25z IHJhdmFnZWQ= IG1lY2hhbmljYWxseQ== IFJlaWxseQ== IE5vc2U= IEluY2FybmF0aW9u IEJlY2t5 YWJibGluZw== IHRhY28= IHJha2U= IG1lbGFuY2hvbHk= IGlsbHVzdHJpb3Vz IERhcnRtb3V0aA== R3VpZGU= IFJhemVy IEJlbno= VWx0aW1hdGU= IFN1cnByaXNl IHBhZ2VhbnQ= b2ZmZXI= V2hvZXZlcg== IHdpc2Vy IGNoZW1pc3Q= IEhFTEw= IEJ1bGs= IHBsdXRvbml1bQ== IENPVkVS 1rw= ZmFpbGVk IHRpcmVsZXNzbHk= IGluZmVydGlsaXR5 IFRyaWRlbnQ= IFNob3d0aW1l IENpdg== VmljZQ== cmVxdWlyZXM= aXR0YW5jZQ== IHVuY29udHJvbGxlZA== aW50ZXJlc3Rpbmc= NTYx IGlubm92YXRl YXRlZ2lj TGll IFNlbGxpbmc= VWw= IHNhdmlvcg== IFRvc2g= IHN3YXN0 UEFTUw== IHJpbms= IGNhcmRpbw== IElybw== dWRp IHZhbnRhZ2U= IHZhbnM= IE5pw7Fv Kz0= IHByb3BhZ2F0ZQ== PD8= IG1ldGhvZG9sb2dpY2Fs MjA0Mzk= IHRyaWdseWNlcg== IGluZ3JhaW5lZA== IEFubm90YXRpb25z YXJyYW50ZWQ= NjE3 IFNvZGl1bQ== IEFBQw== dGVjaG5pY2Fs bXVsdGlwbA== IDM3Mw== 5Ys= IGRlY2lzaXZlbHk= IGJvb3N0ZXJz IGRlc3NlcnRz IEdyZW5hZGU= IHRlc3RpZnlpbmc= IFNjdWxseQ== SURz IGxvY2tkb3du IFNjaGVy IFLDqQ== IFdoaXRtYW4= IFJhbXNheQ== cmVtb3Rl IGhpa2Vycw== IEh5dW5kYWk= IGNvbnNjaWVudGlvdXM= IGNsZXJpY3M= IFNpYmVyaWFu dXRp aXNidXJ5 IHJlbGF5ZWQ= IHF1YXJ0eg== IENCSQ== c2Vla2Vycw== dWxsYQ== IHdlbGRpbmc= IFNoYWw= YmxlYWNoZXI= VGFp IFNhbXNvbg== IHR1bWJsZQ== IEludmVzdG9y IHN1YmNvbnRyYWN0 IFNoaW5yYQ== b3dpY3o= amFuZHJv ZGFk IHRlcm1pbmF0aW5n IE5ldXJhbA== 5Luj IGxlYWthZ2U= IE1pZGxhbmRz IENhdWNhc3Vz 7ZU= Y2l0 bGxhbg== aXZhYmx5 IEFsYmlvbg== IDQ1Nw== IHJlZ2lzdHJhdGlvbnM= IGNvbXJhZGU= IGNsaXBib2FyZA== MDQ3 IGRpc2NvdXJhZ2luZw== IE9vcHM= QWRhcHQ= IGVtcGF0aA== bnY= IFBST1Q= IERvbm4= IFBheA== IEJheWVy dGlz U3F1YXJl IGZvb3RwcmludHM= cGFydGljaXA= IENoaWxlYW4= QnJlbmQ= aW5kdWNpbmc= TWFnbg== IGNsdWJob3VzZQ== IE1hZ251bQ== IGVuY2FtcA== IEV0aG5pYw== dWNoYQ== ZXJleQ== IHdhdGVyZWQ= IENhbGFpcw== IGNvbXBsZXhpb24= IHNlY3Rz IHJlbnRlcnM= IGJyYXM= b8SfYW4= VGltZW91dA== TWFuYWdlbWVudA== IGluZm9ncmFwaGlj UG9rZW1vbg== Q2xhcg== IGxvY2FsaXR5 IGZsb3Jh YXNlbA== UG9udA== IHBvcHVsYXRl IE9uZw== IHN1YnNpc3RlbmNl IGF1Y3Rpb25z IE1jQXVsaWZmZQ== IExPT0s= YnJpbmdlcg== IHRpdGFu IG1hbmlmb2xk IOKXjw== IGNhbGlicmF0ZWQ= IGNhbGlwaGF0ZQ== IFNIRQ== IENvbW1pc3Npb25lcnM= Y2VpdmFibGU= amM= V2lubmVy NTI0 IGNvbmRvbmU= T3RoZXJ3aXNl IHBpbGluZw== IGVtYm9keQ== IENyaW1lYW4= dXRpY3M= IEV4aGliaXRpb24= IDQyNg== ZWVyaW5n IHZ5aW5n IEhVR0U= Kj0t IHByaW5jaXBsZWQ= 4KY= IHF1aXJrcw== IEVkaXRvcnM= cHV0aW5n R0VT IEZUQQ== 4KS+ YWRkb24= IEhBTQ== IEZyaWV6YQ== V29tYW4= LiQ= IGNyaWI= IEhlcm9k IHRpbWVycw== IFNwYWNlcw== IE1hY2ludG9zaA== YXRha2E= IGdsaWRl IHNtZWxsaW5n IEJBTA== IHVuc3U= IGNvbmRvcw== IGJpY3ljbA== IFJldml2YWw= NTUz IGp1Z2dsaW5n SHVn IEthcmRhc2hpYW4= IEJhbGthbnM= bXVsdGlwbGU= IG51dHJpdGlvdXM= b2NyeQ== MTkwMA== IGludGVncmF0ZXM= IGFkam9pbmluZw== IEZvbGRlcg== cm9sbG1lbnQ= dmVuaWVudA== IHViZXI= eWk= IHdoaWZm IEp1dmVu IEJvcm91Z2g= bmV0dGU= IGJpbGluZ3VhbA== IFNwYXJrcw== cGh0aGFs bWFudWZhY3Q= IHRvdXRpbmc= IFBISQ== S2VlZmU= UmV3YXJk IGluZmFsbA== IFRlbXBlcg== dHlwaWNhbGx5 IE5pa29s IHJlZ3VsYXJz IHBzZXVkb255bQ== IGV4aGliaXRpb25z IGJsYXN0ZXI= IDQwOQ== d2FybWluZw== IHJldmVyYmVy IHJlY2lwcm9jYWw= IDY3MA== aXBpZW50 YmV0dA== IEJlZ2lucw== IGl0Y2hpbmc= IFBoYXI= QXNzdW1pbmc= IGVtaXR0aW5n IE1MRw== IGJpcnRocGxhY2U= IHRhdW50 IEx1ZmZ5 IEFtaXQ= IGNpcmNsZWQ= IE5vc3Q= ZW5uZXR0 IGRlZm9yZXN0YXRpb24= IEhpc3RvcmljYWxseQ== IEV2ZXJ5ZGF5 IG92ZXJ0YWtl Nzky IG51bg== IEx1Y2lh IGFjY29tcGFuaWVz IFNlZWtpbmc= IFRyYXNo YW5pc20= Um9ndWU= IG5vcnRod2VzdGVybg== IFN1cHBsZW1lbnRhbA== IE5ZVQ== IEZSSQ== IFNhdGlzZg== eGVz NTE3 IHJlYXNzdXJlZA== IHNwb3JhZGlj IDcwMQ== IG1lZGlhbA== IGNhbm5hYmlub2lk IGJhcmJhcmlj IGVwaXM= IEV4cGxvc2l2ZQ== IERvdWdo IHVuc29sdmVk U3VwcG9ydGVk IGFja25vd2xlZGdtZW50 c3Bhd24= IGtpdGNoZW5z IC09 dGFsa2luZw== aWNpc3Q= IFBlZ2FzdXM= IFBTVQ== IHBob3Rvbg== IEF1dGhlbnRpY2F0aW9u Ukc= QCMm NzYy IENsYWly IGRpYXBlcg== IGJyaXN0 IFByb3NlY3V0b3Jz IEplbQ== NjI4 IEV2ZXJ5d2hlcmU= IEplYW5uZQ== ZXF1YWxpdHk= 44Op44Oz b2JqZWN0cw== IFBlbGljYW5z IDM5Mg== IGJsdQ== Ynlz IEFnbw== IGluc3RydWN0aW9uYWw= IGRpc2NyaW1pbmF0aW5n IFRSQU4= IENvcm5lbA== YWdvcw== IHR5cmU= IGFzcGlyYXRpb24= IEJyaWRnZXdhdGVy Ijot ISIu IEVucw== IENvY28= UGll IGRldGFjaA== IENvdWNo IHBoeXNpcXVl IE9jY3VwYXRpb25z b3Njb3BpYw== ZW5vdWdo QnV6eg== QXBwZWFyYW5jZQ== WVA= IHJhY2Vy IGNvbXBsaWNpdHk= cnBt VG95 IGludGVycnVwdHM= IENhdGFseXN0 IHV0aWxpdGFyaWFu aW1wYWN0 IHNwYWdoZXR0aQ== IHBvcm91cw== IGVzdGVlbWVk IGluY2luZXI= IElPQw== NzQ4 IGVzcHJlc3Nv IFNtaWxl YWJpbGlh NjM1 IG1hdGhlbWF0aWNpYW4= IDQyNA== IEtM IEhJUA== IG92ZXJoZWFyZA== IFR1ZA== IFRlYw== IHF1aXp6 IGZsYXR0ZXJpbmc= IGNvbm4= 4oCO IGF0dGFjaGVz IFJPUw== IEFDUw== IHRjcA== IFNoYW1l c2tpcA== cmVzcGVjdGVk IFRyaW5pZGFk Z3JhaW4= IGZvb3Rob2xk IFVuY2hhcnRlZA== IEp1bGlv emw= YXZvcmVk IEFueGlldHk= ZXJyb3Jz IENlbnRhdXJp aXRzY2g= RGFkZHk= IGNsdXRjaGluZw== IEltcGxlbWVudA== IEd1dGllcnJleg== IDc2MA== IHRlbGVwb3J0YXRpb24= ZW5kcmE= IHJldmVyc2libGU= c3Ryb3M= QWR2ZW50dXJl MDgz IGxpYmVyYXRpbmc= IGFzcGhhbHQ= IFNwZW5k QVJEUw== aW1zeQ== UFJFUw== IEVtZXJnaW5n IHdpbGRmaXJlcw== IHRlY2hub2xvZ2ljYWxseQ== IGVtaXRz IEFSVElDTEU= IGlycmVndWxhcml0aWVz IGNoZXJpc2g= 54mI IHN0aW5r IFJvc3Q= RWNvbm9taWM= IGNvdWdoaW5n IE1jQ2Fubg== cHJvcGVydGllcw== aWxhbnRybw== IHJlbmVnb3Rp VHJhbnNsYXRpb24= IGlucXVlc3Q= IEdyYXBl b290ZXJz Z3Vp IFN3b3Jkc21hbg== YWNlYWU= aGl0dGluZw== IHJj IGV4ZXJ0ZWQ= IFNBUA== aXRlbnQ= IHBlcmlsb3Vz IG9ic2N1cml0eQ== IGFzc2Fzc2luYXRl IGFib3JpZ2luYWw= IHJlc2N1aW5n IFNoYXR0ZXJlZA== bG9ja2luZw== YWxsaW9u Q2hhbmdpbmc= IEhhcnJpbmd0b24= IEJvcmQ= IEFmZ2hhbnM= SmFtaWU= YXJldHo= IEF1Z3VzdHVz IDM4Ng== ODMw IGpvZw== b2tpbmdseQ== VHJpZ2dlcg== IEhPUg== U3RhdGlzdGljcw== IHZpZXdlcnNoaXA= IGFkZGl0aXZlcw== aHVy IG1heGltaXppbmc= IFJvdmU= IExvdWll IEJ1Y2tldA== IENIUklTVA== b3VzZWw= IHN0cmVha3M= aXJ0ZWQ= IHRlcnQ= IGNvbG9uaWFsaXNt IGJ1cnlpbmc= eWs= Q29uZGl0aW9u IERQUks= QnlJZA== NzUx 4pe8 IHdvcnJpc29tZQ== IHZvY2F0aW9uYWw= c2xpY2U= IHNhaWxz IENvcnJlY3Rpb25hbA== OTU0 IHR1bA== S2lk bHVzdGVy IGZhbWlsaWFs IFNwaXQ= IEVwaXNjb3BhbA== U3BlY2lmaWNhbGx5 IFZvbGNhbm8= cnVucw== cXM= IHZldHRlZA== IGNyYW1tZWQ= dHJvcA== aGVyZXI= VGhhbmtmdWxseQ== IHBlcmN1c3Npb24= IG9yYW5nZXM= IHJvdW5kdXA= IDQ5OQ== eGlvdXM= Q2hhcmFjdGVycw== IFppb25pc20= IFJhbw== w5vDmw== V0Y= IHVuaW50ZW50aW9uYWw= T05FWQ== R3JhYg== Q29tbWVyY2lhbA== IGdsdXRhbWF0ZQ== IE1jS2VubmE= cnVjaWF0aW5n bmluZ3Rvbg== aWh1 Q2hhbg== IFN3YXA= IGxlYWZsZXRz IGZ1bmN0aW9uYWxseQ== ZXJvdXM= RmFybQ== IGNhbG9yaWM= IExpdGVyYWxseQ== Y29uY2VydA== IHNoZW5hbg== IHJlcGFpZA== ZXllcw== IGJhc2hpbmc= IEdvcmdl IGNvbGxhYm9yYXRpb25z IHVuYWNjb3VudA== aXRjaGll IHRlYW13b3Jr cHBlbGlu IHBpcGluZw== IG1pbmNlZA== IGRpYW0= cmllZw== IG1hc2NhcmE= IHN1Y2tlcg== IE1vb25z QXBwcw== IFBlY2s= IHBlcnY= IEZsb2F0 b2xleQ== IE5pc2g= aW1pemU= IGFyb21hdGlj dWlu ZW5kaXNo IS8= IEJpY3ljbGU= IEFTSUM= aWxlZ2Vk IFF1YWRybw== aW9zeW4= IGxvY2tvdXQ= IFdpbms= U1BFQw== QXR0ZW1wdHM= IHNlZWRlZA== cmVkbw== aWFzaXM= IHNuYWc= 44OV44Kp 44K2 IGdyb3VuZGluZw== IHJlbGlldmVy IGZyaXZvbG91cw== IEdpZnRz IEZhY2Vz RXNwZWNpYWxseQ== IG1pY3JvYmlvbWU= aW1hZw== IFNjaGw= IFBsZXM= IEJsZWFjaA== IElyd2lu IEVhdG9u IERpc2NpcGxl IG11bHRpcGxpY2F0aW9u IGNvZXJjZWQ= IDQxOQ== c3Ro RXZpbA== Qm9tYg== IGV4b3Jj IHN0YWdnZXJlZA== TEVTUw== IGluZXJ0aWE= IEVESVQ= IGdvYg== VHJhZGl0aW9uYWw= IGNsYXNzeQ== TGVhcnk= IFBBR0U= eXJz IHRyYW5zcG9ydGVy IG1hdHVyZWQ= IGhpamFi IGJpb21l V2hlcmVhcw== IGV4dGVybWluYXRpb24= IFR1ZXM= IFRha2VydQ== IEF1ZHJleQ== ZXJpYWw= IEFkZW4= YWZmbGVz IG5hcmNpc3Npc3RpYw== IEJhaXJk VVRG SXJl IENvbm5pZQ== Q2hhbXA= IHdoaXNwZXJpbmc= IEhhdHQ= REs= IGRpc2luZmVjdA== IGRlZHVjdGVk IHBhcnRha2U= IGRvd25ncmFkZQ== IEVzcG9ydHM= IENvbnRpbnVpbmc= IGRlbW9jcmF0aWNhbGx5 aWNyb2JpYWw= aXR0YQ== IGxpbWVzdG9uZQ== IGV4ZW1wdGVk IEZyZW56eQ== SGVybQ== NzI4 IGZsZWRnbGluZw== TWV0YQ== NzY1NjE= Njkz JTo= d2FrZQ== NTI2 IERpc2NpcGxpbmU= IHZpcmdpbml0eQ== IExlZ2lvbnM= IEZyYW5raWU= aW50ZW50 IHJlc3Ryb29tcw== IFJvdXRlcg== ZGFx IG9iamVjdGlvbmFibGU= 4oaR d2Fyaw== IFJhaHVs Z2Fpbg== YWN0aXZhdGlvbg== YWJzb2x1dGU= IEFjY2Vzc2Vk IDI0MDA= b2dnbGVz IHNlY29uZGx5 IERFRkVOU0U= IHBvc3RhZ2U= d3JhcHBlcg== c2hhcnA= NzI5 IGNvbW11bmljYXRlcw== IGFkZG9u IE1pbGl0aWE= SG9uZw== IHNsdW1wZWQ= IEpQRUc= IEljYXI= YWRpc2g= Njgx IG1hamVzdHk= IFdvbGZnYW5n IEVsYXN0aWM= dXBlcg== IHZpeg== IHVuY29uc2Npb3VzbHk= IFNURA== IFNhc3M= IGZsb3dlcmluZw== IEhlbGlj IERyYXBlcg== IEFtYXRldXI= IG1hbnVyZQ== IGRpc2luZ2Vu IExlaQ== YnJpbmc= OTQ5 IGluaGliaXRlZA== IGhlYWRxdWFydGVyZWQ= IGVuaWdtYXRpYw== 77+977+977+9 IHJlZHJlc3M= Ukg= IHJhdHRsZWQ= IGRpY3Rpb24= bGlv IFRCQQ== IFNOQVA= Q2FsbGluZw== IGZhc2Npc3Rz IERvdmU= aWV3aWN6 MDM2 IGNvYXN0cw== IFJlY3Q= ICld TG90 NjI5 IFNFTQ== IFBldGVyc2Vu IEV4cGxhaW4= IEJvYXJkcw== IEJlem9z IEpvdXJuYWxz IDIwMjQ= cGFyc2Vy IG1pc3RydXN0 IGdyYXRl IExvY2tlZA== Ym9h U2FpbnQ= Z2FtaW5n IHZvd2Vs aW5hdGVseQ== Ymxvdw== QWxsYWg= IHVubWF0Y2hlZA== IGJvcmRlcmluZw== IEV4cGVuZA== bnI= T3JhY2xl cm91Y2g= IGNvbnRpZ3VvdXM= YWN1cw== IGRpc3RyYXVnaHQ= NTgx IGFuYXRvbWljYWw= T1g= YXBpeGVs ODMz IFBMVVM= IHJlc3VzYw== IGFiaWRpbmc= NTcz IHZhY2FuY2llcw== RW1pbHk= IGh5cG90aGFs IFdlcm5lcg== IFdlZQ== IERKcw== NTEz IHdpdGNoY3JhZnQ= IGFjdXB1bmN0dXJl ZW50YXJ5 YmVuZWZpdA== UHJvZHVjdHM= IFBTUA== IE1QRw== IEppbm4= IEphcnJldHQ= IDQ0NQ== IEltYWdpbmc= IFB5dGg= RmluaXNo IHRleA== IGp1dmVuaWxlcw== IGhlcm9pc20= IGRvdWJ0bGVzcw== IEFraQ== IFRlbmQ= IFBhdHJpYXJjaA== IGJpdHRlcnM= IFRlbGVjb21tdW5pY2F0aW9ucw== aXRhdGl2ZWx5 YWduYQ== IHJn IFNPTEQ= IGNvbXB1bHNpb24= IE5hc2E= IEthdGhyeW4= IG1pbGxpb25haXJlcw== IGludHJpbnNpY2FsbHk= IGJvbHN0ZXJlZA== dGltZW91dA== Zmxv IHR1dG9y cG91cg== U3RhdGVtZW50 IHsq IFJ1ZG9scGg= IEtpbWJlcmx5 cm9nZW5z YWRpcQ== XSs= IGluZGlnbmF0aW9u IGZyYWN0dXJpbmc= IFJlbGVhc2Vz IEdyYWlu cHJvdGVpbg== TGFnbw== IHZhY2F0aW9ucw== IGJvb3RlZA== IFRIUkVF IEhH b3Jlc2NlbmNl IHRm IHNvYXI= aW9zeW5jcg== IGdsYW5jZXM= IFNwb29u IEp1cnk= IENvd2JveQ== IGNyZWF0aXZlbHk= SGlnaGVy IHNvbGljaXRvcg== IGhhd2s= YWNpbw== ODk2 IHN1cGVyZmx1 IGJvbWJzaGVsbA== Y3R1cmU= IGJyb2tlcmFnZQ== IHJhaWRpbmc= IGZyZW5jaA== IGFuZ2xlZA== VHJhbnNhY3Rpb24= IEdlbm9jaWRl dXBl IEhhaXRpYW4= NTcy ITo= IHVud2l0dGluZ2x5 aXRlcmF0b3I= c2Nyb2xs IHRhbGxpZWQ= IGJpb21lZGljYWw= IENBUkQ= IGV1cGhlbQ== IGJyYWluc3Rvcm0= YXF1aW4= S28= TWljaGVsbGU= IFJ1bmVz IEJhbGxpc3RpYw== dWRlcnM= IG1vZGVzdHk= IGlQYWRz IEV6ZWtpZWw= WUU= IHN0YXJzaGlw IHBvd2VyZnVsbHk= IHBlcmw= IFNoYWRl IFF1YXJ0 IEVFRw== IGZpc2hlcm1hbg== T1NFRA== IFR5cGljYWw= ZGZ4 IG1lc2hlcw== IGV0Y2hlZA== d29ydGhpbmVzcw== IHRvcHBsZWQ= IDM5Ng== b3JpdXM= V2Vpc3M= IG15c3Fs IFZhbGhhbGxh 2ZI= bGVhc2luZw== IHJlY29tcA== cmFwbmVs U2Vs MDQz IGRlcmFpbGVk IEd1aWRlcw== SVJU IGRlaHVtYW4= IEJyaXR0YW55 Iikp IGV4Y2xhaW0= IGJhbGs= IDg0MA== Q0xBSU0= aW50ZWw= TEFC IHBlZ2dlZA== IGFzdHJvcGg= c21va2luZw== IHJpZ2dpbmc= IGZpeGF0aW9u IGNhdGFwdWx0 aW5zaWRl IENhc2NhZGU= IEJvbHNoZXZpaw== R2F6YQ== RGVwdGg= IGxvdWRzcGU= IGFsbW9uZHM= bWV5ZXI= bGVuZXNz amVu ZnJlc2g= IHVuYmVhdGVu IFNxdWlk IFByZXN1bWFibHk= VGltZXI= Qlc= IHJvc3RlcnM= IGVsbGlwdA== IEhhcnJpZXQ= ZGF0YWJhc2U= IE11dHVhbA== IENvbW1vZG9yZQ== dWtlZA== a25pZmU= IENPTU1VTg== aHlh IG1lbHRz YXJjaGl2ZXM= IHJhdGlmaWNhdGlvbg== IG11bHRpcGx5aW5n IGludGVyb3Blcg== IGFzY2VydA== d2luZ3M= dmVydGluZw== IFNjb3JwaW9u YXll IFBvcnRzbW91dGg= IE1UQQ== bml0 aWF6ZXA= IHF1YXJhbnRpbmU= IHNsaWRlc2hvdw== IGNlbnRpbWV0ZXJz IHN5bm9wc2lz IHNwYXRl dGhpcnN0 IG5vbWluYXRpbmc= IE1lbHZpbg== UHJldmlldw== IHRocm9i IGdlbmVyYXRpb25hbA== IFJhZGl1cw== cmVzdGxpbmc= cHV0YWJsZQ== YXdhcg== TkVDVA== IHVubGF3ZnVsbHk= IFJldmVsYXRpb25z V2lraXBlZGlh c3Vydg== IGV5ZWluZw== aWpu IEZX IGJydW50 IGludGVyc3RlbGxhcg== IGNsaXRvcg== IENyb2F0aWFu IENoaWM= ZXZh IERpc2FwcA== IEFraW4= aW5lcmllcw== ZHVzdA== SW50ZXJlc3RlZA== IGdlbmVzaXM= IEV1Y2w= w7Zu cGlja2luZw== IG11dGF0ZWQ= IGRpc2FwcHJvdmU= IEhETA== IDYyNQ== zLY= Y2FuY2Vy IHNxdWF0cw== IGxldmVycw== RGlzY3Vzcw== PV0= RGV4 IFZJREVPUw== QVVE IHRyYW5zYWN0 IEtpbmVjdA== IEt1YWxh IEN5cA== NzQ3 IHNoYXR0ZXJpbmc= IGFyc2VuaWM= IEludGFrZQ== IEFuZ2Vsbw== IFF1aXQ= IEtoZQ== IDE4OTM= TWFrZXI= MDI5 IFBhaW50aW5n RGlzYWJsZQ== OTE2 IGFuYWxnZXM= IHRhY3RpbGU= IHByb3BoZXM= IGRpY2Vk IFRyYXZlbHM= IEhlYWRlcg== IENsdWJz QXNzaXN0YW50 IGluY3JpbQ== IGRpcHM= IGNydWNpZml4 IFNoYW5haGFu IEludGVycHJldA== IDQwOTA= YWxvZ3k= YWJiYQ== IHNpbXVsYWM= aHVzYmFuZA== U0lN IHJlY3ljbGU= dWNlcg== ZWRnZWQ= IHJlbmFpc3NhbmNl IEJvbWJheQ== Q2F0aG9saWM= IExJTkU= IENsb3RoaW5n cmVwb3J0cw== IHBsYXVz IGRhZw== IE1hY2U= Wkk= IGludHJ1ZGVy IFZldGVyaW5hcnk= Z3J1 IHNuZWFreQ== IFNpZQ== IENpbm5hbW9u UE9TRQ== IGNvdXJpZXI= IENOUw== IGVtYW5jaXBhdGlvbg== c2l0 IHBsYXl0aHJvdWdo IEZhY2lsaXRpZXM= dmlydA== IEdhdW50bGV0 VGhvbXBzb24= IHVuYmVsaWV2YWJseQ== UGFyYW1ldGVycw== IHN0aXRjaGluZw== aWduZQ== IFRIRVNF UHJpdmFjeQ== IHNoZW5hbmlnYW5z IHZpdHJp IFZhbGlk NTkx rbc= IFByb3RvdHlwZQ== aW5rYQ== U0NQ IFRpZA== 6Ig= b2xkZWQ= IGluZGl2aWR1YWxpdHk= IGJhcmtpbmc= IG1hcnM= IFdE IDgyMA== IHRpcg== IHNsYXBwaW5n IGRpc2dydW50bGVk IEFuZ29sYQ== cml1cw== IFRvcm5hZG8= IFRodXJz IGNhcHRjaGE= IGFuZ3N0 IFBvZw== IEFzc2Fzc2lucw== IEFkaWRhcw== IGpveWZ1bA== IHdoaW5pbmc= RW1lcmdlbmN5 IHBob3NwaG9ydXM= IGF0dHJpdGlvbg== b3Bob24= IFRpbWJlcndvbHZlcw== IEphaA== IEJyaW5naW5n IFdhZA== IEVuc3VyZQ== b2hs IFhpZQ== b21tZWw= Y21w IHppcHBlcg== IHJlbGF0 IENvcnJpZG9y bWlsbw== VElORw== QXZn IGNyb3BwZWQ= XX0= IHJhZ2Vk IEx1bXB1cg== IEd1ZXJyZXJv b3Vya2U= TnV0 IG9mZnNldHM= b2dsdQ== ZHJt IG1vcnRhbHM= bGF0YWJsZQ== IGRpc21pc3NpdmU= 5LiJ IHRocm9hdHM= IGNoaXBzZXQ= IFNwb3RsaWdodA== Q2F0YWxvZw== YXJ0aXN0 R2I= IGNoaWxseQ== IHN0b2tlZA== IDM3NA== V2FyZA== TGF0aW4= IGZpYXNjbw== IGJsZWFjaA== IGJyYXY= RW5oYW5jZWQ= IGlub2M= IEZpb3JpbmE= Xz4= IGxldWtlbWlh IGVsdWM= IGFubm91bmNlcg== IExpdGh1YW4= IEFybWFnZWRkb24= 5Yc= TGVuaW4= IFJ1aw== IHBlcHA= IFJvbWFudGlj IFBJVA== IEludGVyc3RlbGxhcg== IEF0a2luc29u UmFpZA== SnM= R29hbA== Q291cnNl IHZhbmlzaGluZw== ZXNsZXk= IFJvdW5kcw== RWxzYQ== NTkz IHJlZHVuZGFuY3k= IFNUQU5E IHByb3BoZXRpYw== IGhhYml0YWJsZQ== cnl1 IGZhaW50bHk= TU9ERQ== IGZsYW5rZWQ= SVJD QXdlc29tZQ== IHNwdXJpb3Vz IFphaA== IE1TRw== IHNoYWRpbmc= IG1vdGl2YXRpb25hbA== IFNhbnRhbmE= IFNQUg== IGV4Y3J1Y2lhdGluZw== b21pYWw= IE1pa28= IExlb3BhcmQ= QWJ5c3M= IFt8 ZGlydHk= IGJhdGhz IGRlbW9yYWw= YW5kcmU= UEI= IHVuaWZpY2F0aW9u IHNhY3JhbWVudA== IFsm IHByaWNlbGVzcw== IGdlbGF0aW4= IGVtYW5hdGluZw== IEFsbGFhaA== OTg2 IG91dGJ1cnN0 IGVyYXM= IFhWSQ== IFNQSQ== T3R0 IExhemFydXM= UExJRUQ= Rmx5aW5n YmxvZ3M= V2lzY29uc2lu UmF2ZW4= IHJlYmF0ZQ== IGNyZWVwcw== IFNwYW4= IFBhaW50ZXI= IEtpcmE= IEFtb3M= IENvcnZldHRl Q29uc3VtZXI= IFJlY292ZXI= Y2tp IHBlc2t5 IEludmVudGlvbg== Q29tcGFuaWVz IGNoYWxsZW5nZXJz YWRlbWlj IFVrcmFpbmlhbnM= IE5ldXJvbG9n IEZvcnNha2Vu IGVudHJhbnRz IGVtYmF0dGxlZA== IGRlZnVuY3Q= IEdsYWNpZXI= IHBvaXNvbnM= IEhvcnNlcw== bWFrZXM= IERpcnQ= IDQyMw== aGho IFRyYW5zZm9ybWF0aW9u UVVJUkU= Li4uLi4uLi4uLi4uLi4uLi4u IHRyYXZlbGxlcg== IFNleHk= IEtlcm4= aXBvbGFy IHJhbnNvbXdhcmU= b29vb29vb29vb29vb29vbw== RWM= cnVieQ== UHJvZmVzc2lvbmFs IE91dGJyZWFr YXJndW1lbnQ= R3JleQ== IEZpZmE= IENITw== IEZPUk0= IEFtdHJhaw== LVs= IGNyYWRsZQ== IGFudGlveGlkYW50cw== 44Gu5a4= NzM2 IE5BU0w= IENvbnRyaWJ1dGlvbnM= SW5kaWFuYQ== IFNURVA= Q1NT IHNhbGllbnQ= IGFsbG9jYXRpb25z eXJpZ2h0cw== IG1hc2hlZA== IEN1dHRlcg== U2V4dWFs IHBvdW5kZWQ= IGZhbmJhc2U= IGNhc2M= IFRyYW5zcGFyZW5jeQ== IGFuYWx5dGlj IFN1bW1vbmVy 154= IEFEQw== ZGV0YWls IHZhbnF1aXNoZWQ= IGNyYWJz YXJpZQ== RGVzdHJveQ== IFNhY2s= IHRyYW5zaXN0b3I= QWxhYmFtYQ== IEtvZW4= IEZpc2hlcmllcw== Y29uZQ== IGFubmV4ZWQ= IE1HTQ== ZXNh IGZha2Vk IENvbmdyYXR1bGF0aW9ucw== IGhpbmRlcmVk IGNvcnJlY3Rpb25hbA== IElUVg== bGVldmU= IGluYXBwcm9wcmlhdGVseQ== bGlja3M= IHRyZXNwYXNz IHBhd3M= IG5lZ290aWF0b3I= IENocmlzdGVuc2Vu bGltaXRz IERpYW5uZQ== IGVsZWdhbmNl IENvbnRyYWN0cw== YW5rZQ== T2Jq IHZpZ2lsYW5jZQ== IGNhc3RsZXM= IE5BRA== IEhvbG8= IGVtcGhhdGljYWxseQ== IFRpdHVz IFNlcnZpbmc= IFJpY2hpZQ== IFBpZ3M= NTY4 IGFuaW1vc2l0eQ== IEF0dHJpYnV0ZXM= IFVyaWVs TVE= bXlyYQ== IEFwcGxpY2FudA== IHBzeWNoaWF0cmlzdHM= IFZpag== IEFiYnk= YWdyZWU= UHVzaA== IGtXaA== aGliYQ== IGluY2l0ZQ== IFdlYXNsZXk= IFRheGk= bWluaXN0aWM= aHlwZXI= IEZhcm4= IDYwMQ== IE5hdGlvbndpZGU= RmFrZQ== OTUy IG1haXpl IGludGVyYWN0ZWQ= IHRyYW5zaXRpb25lZA== IHBhcmFzaXRpYw== IGhhcm1vbmlj IGRlY2F5aW5n IGJhc2VsZXNz bnNpY3M= IHRyYW5zcGlyZWQ= IGFidW5kYW50bHk= IEZvcmVuc2lj IHRyZWFkbWlsbA== IEphdg== YWJhbmQ= IHNzaGQ= IGZyb250bWFu IEpha2FydGE= b2xsZXI= ZHJvcHM= IFNFUlZJQ0VT cm9tcHR1 b3BoaWNhbA== aG9zcGl0YWw= YmxlZG9u NjQ1 IG1pZHJhbmdl IEVWRU5U Y3VsYXRlZA== cmF3bGVk IHBlcmNoZWQ= IG92ZXJib2FyZA== IFBlZWw= IFB3cg== IENhcnRo IENPTVBMRQ== Y29l c2hhbGw= IGRldGVycmVuY2U= TUVUSE9E IEFic2VudA== TUVO IHNpbGw= IExFVkVM WW9yaw== IHNpbm5lcnM= IE9QRUM= IE51cg== IERlc2lnbnM= c2VsZWN0aW9u IHVud29ydGh5 Q0hB IHN0cmVuZ3RoZW5z ODgz ZWRseQ== IHNsaWNpbmc= IG1hbG51dHJpdGlvbg== IGZpbG1tYWtpbmc= IFBvbGs= dXJhdGVk IDQyMQ== YnJlYWtlcnM= ISci IHdldGxhbmRz IERpc2NyaW1pbmF0aW9u IGFsbG93YWJsZQ== IHN0ZWVyZWQ= IFNpY2lseQ== U0FN IG11c3RhY2hl IG1pZHM= IGNsaXBwZWQ= IGNpcmN1bGF0ZQ== IGJyaXR0bGU= IEJ1aWxkaW5ncw== cmFpc2Vk IFJvdW5kdXA= IHdlYWx0aGllcg== IG92ZXJ3cml0ZQ== IG92ZXJwb3dlcmVk IEdlcnJhcmQ= c2l0ZXM= UERBVEVE IGFjdXRlbHk= IEdhbWJsZQ== IHBpbQ== IEt1cw== VHlwaWNhbGx5 RGVwbG95 IE1vcm9jY2Fu cG90aW9u Y29tYmU= IHZpZ2lsYW50ZQ== IDM2Mw== U3Rldw== IEJhZ2c= IHJlc2lkZWQ= IFNwbw== IHJlbW5hbnQ= IGVtcHRpbmVzcw== YnJhaW5lcg== IG91dHBhdGllbnQ= cHJpb3JpdHk= IGxlcHRpbg== IFBheXRvbg== IEdsZWFtaW5n IFNoZWQ= IFBvbG8= IE1vcm1vbmlzbQ== cmVzdHJpY3RlZA== YXJsYW5l d3g= IGNyZWF0aW5l IEFub24= IFNUVUQ= IEpVTA== IFRlZQ== NTI4 MDg5 IGhhdGNoZWQ= RGlzcGF0Y2g= IENvbXBvc2l0ZQ== IDQ1MQ== cHVmZg== IFhDT00= IE9ybg== IFRIQU5L RU5ERUQ= IEFzaGV2aWxsZQ== IMOc IG1hbmdv IFNsaWdodGx5 d29ybGRseQ== IFdhbmRlcg== IEV4cGFuZA== IENocg== TWlzdA== IG9ydGhvZG94eQ== IFVORVNDTw== cmVnYXRl RWxzZXdoZXJl a2ll aXJsZWQ= IHRvcHBsZQ== IGFkb3B0aXZl IExlZ3M= ZHJlc3M= IFNhZ2Fu YmFyZQ== IEdsb3U= Q3J1bmNo IGhlbHBlcnM= IGNocm9uaWNhbGx5 IEh1bWE= MTAwMDA= IGFjY29tbW9kYXRpbmc= 5LqU IHdyaW5rbGVz IGRvZGdlZA== Zm91cnRo IHByZWNvbg== IGNvbXByZXNzb3I= IEthcmU= IGV2aWN0 IFdhcndpY2s= aW1hcg== IG1vZGVybml6YXRpb24= IGJhbmR3YWdvbg== IHJlZnV0ZWQ= IG5ldHRlZA== IE5hcGxlcw== IEdlbmll cGVyb3Jz IGZpZWxkZWQ= IGRlcmU= IFBhcmFibGVz bGVlcw== IHRyb3V0 YXNwZXJz IG5paGls IGhhcHBpZXN0 IGZsb3BweQ== IExvZnQ= IEhlYXJk IHVuaXNvbg== IGx1Zw== IFJlZG1vbmQ= Y2xhc3NpYw== U3VwcG9ydGVycw== U0hJUA== R01U IGZ1ZWxsZWQ= 55A= IGRk IEVtaW5lbQ== IDE4OTc= TllTRQ== IHNlY3JldGFyaWVz IEZJQQ== IENhbmF2ZXJhbA== RmF2b3JpdGU= IHBvbXA= IGRldGFpbmVl ZXJzaGlw YWltb24= aW91cg== IEFwZXg= IHBsYW50YXRpb25z YW1pYQ== YWNpb24= UnVzdA== IHRvd2Vk IFRydWx5 NTc3 IHNoZWx0ZXJlZA== cmlkZXI= V28= IGxhaXI= IEludGVsbGlnZW50 aW1wcm92ZQ== bWF0aWNhbGx5 IGV0aXF1ZXR0ZQ== YWRyYQ== YWxsbw== IEp1bm8= YW55dGhpbmc= IFN0cnVnZ2xl IFByZWRpY3Q= IEdyaW1lcw== IEFNRVJJQ0E= Y3R4 IFNpdHVhdGlvbg== V09PRA== IHNvbHVibGU= bWVpZXI= IGludG9sZXJhYmxl YW5nZXJpbmc= IHVuaW50ZXJydXB0ZWQ= IHRvb2x0aXA= IGludGVycm9nYXRlZA== IGd1bm5lZA== IFNuZWFr 5q2m IHRldGhlcg== IGNydW1ibGU= TGVucw== IGNsdXN0ZXJlZA== IFN5bA== IEhhc2Fu IGR5c3RvcGlhbg== d2FuYQ== IGpveXN0aWNr IFRoaWI= YW1tdQ== VG9tb3Jyb3c= NTQ2 IG92ZXJjYW1l IG1pbmltaXplZA== Y2VwdG9y UnVubmVy RU5HVEg= IEJyZW5kYQ== IEFjaGlldmVtZW50cw== IHRvcmNoZXM= IHJhcHBvcnQ= IEludmVzdGlnYXRvcg== IEhhbmRsaW5n cmVsYXRpb24= Z3JleQ== ODE1 IGtjYWw= IENvbW1hbmRz ZHE= IGN1cmxz IGJlYXJlcg== IGN5bmljaXNt aXRyaQ== IFVzZWZ1bA== QmVl RENT IGFicmFz UHJhY3Q= QklMSVRJRVM= NzEy IGRlYnVnZ2Vy IGRlYnRvcg== IExpYQ== IEtlcnM= IGV4YWNlcmJhdGU= IFN0YWN5 IEJsYW5k IFNjZW5lcw== IGJyYW5jaGluZw== 4paI4paI4paI4paI4paI4paI4paI4paI YXBlYWtl IHNhbHNh IG1pc2hhbmQ= IEtvbmFtaQ== IE5pYg== IGFuZWNkb3Rl IGFncmVlYWJsZQ== z4k= IE5hdGhhbmllbA== IEhlaXNtYW4= IEJld2FyZQ== IDE4ODY= c3BlY3RpdmU= Njkx NTIy IGluaGliaXRz IGhhc2hpbmc= IDE4ODk= 5bCG dmljaA== UHVyZQ== IHNvbGlkbHk= IGFzcGlyaW4= aW1hcnU= IHN0cmVldGNhcg== IFVDUw== IEp1ZGQ= IGZsYXNoYmFja3M= cGlucw== IDE0NDA= IFVOSENS IFN5bXB0b21z VElU NTM4 RnJh JSk7 IG9veg== IGN1cmZldw== IGNhbG1lZA== IHBhcnRpY2lwYXRlcw== VGVY IG5vbnNlbnNpY2Fs IGZ1bGxiYWNr IERlTA== bW9ua2V5 aGFyaQ== IG1ldGFib2xpdGVz IGxvb3RlZA== IEFMV0FZUw== IEJDQw== THQ= b2NoZXQ= Qm9uZQ== IHZldG9lZA== IGdjYw== IENMSUNL IDE4ODg= c2Fm IHN0aWZmbmVzcw== IGxvd2x5 IEdlaA== dmVyc29u b3JzZXQ= IHVuZm9yZXNlZW4= IGFuZXN0aGVzaWE= IE9wdGljYWw= IHJlY29uc3RydWN0ZWQ= IFR1cA== c2hvd3M= TkVXUw== IE5ld3NwYXBlcg== IEFTQQ== dGVyYQ== TnVtYmVycw== IGluZXhwbGljYWJsZQ== 15E= IGhhcmRuZXNz dW50YXJpbHk= IEFjZXI= Z3JhZGllbnQ= QVJESVM= IHdvb2RsYW5k IG1ldGFwaG9ycw== IFdlbWJsZXk= IFBhdmVs cGhpbGlz IHJld3JpdGluZw== IHBlcmNlcHR1YWw= IDEwNzA= d29ybXM= IERvd25z IHVuc3VycHJpc2luZ2x5 IHRhZ2dpbmc= ZmxhbWU= IGxpdHJlcw== IGJvdW5jZXM= IEJhYmU= c2h1dA== IG92ZXJkb3Nlcw== IFNoZWlsYQ== IENoYXU= IEJsZXNz Q2FwdHVyZQ== IFNpZ25pZmljYW50 IFNjaW9u IDM4OQ== IE1jSA== IFRpdGFuaXVt IE1lYWw= YW1lZGE= YWdlbnRz YWdncmVzc2l2ZQ== QmlsbHk= NzYz IFNheWluZw== REVSUg== aXRvbmU= Q29sbGlucw== Qm91bmQ= IGJvbHRlZA== IERNQ0E= OTUz IHVuaXF1ZW5lc3M= IGVwaWdlbg== dW5jaQ== YW50YW0= IHJlY2tvbmluZw== Y2hhaXJz T0dS IFNlbmVnYWw= IDE4NjI= cmVsZXZhbnQ= IMKv IHBoYXJtYWNpZXM= IEdlcmFs dmllcg== WWFu T1JQRw== IHJhYmlk YmVuZGluZw== IFVOSVRFRA== IDQ2NQ== QXNzZW1ibHk= IHdlZXA= IGJlaGVzdA== IE1vdGhlcnM= IEphY2U= aGlk IHdoaXJsd2luZA== IFVOSVZFUlM= IHV0b3BpYW4= IGtpZG5hcA== UGhpbGlwcA== S2lu ODkz IGxpdmVzdHJlYW0= IE1JU1M= IHN1YnZlcnNpdmU= IFRlY2huaXF1ZXM= IEpVU1RJQ0U= IEJBU0U= IDM4Nw== IGFzc2FpbGFudHM= IEhhcmRjb3Jl IHNwcmlua2xlZA== IFBzZQ== 6Zo= cHJpbnRlZA== IEhhdQ== T1JHRQ== IFRPVVI= IGxhY2Vk IGl0Y2g= R2l2aW5n IHBvcnRlZA== Nzgx Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= YnJlZWRpbmc= IGxvZ2dlcg== IEhPTA== aW5uaWU= Rmlyc3RseQ== IGVtYnJ5b25pYw== IGRlbGVnYXRlZA== cGFp T0lM IGNlbnRyYWxseQ== IFJ4 IFNjb3V0aW5n RHV0Y2g= IGhlcmVkaXRhcnk= IENydWlzZXI= c2F0 NTI5 IE1hcnJpb3R0 b3RoZXJtYWw= IHByb2hpYml0aW9ucw== RWFybg== IFN0YWI= IENvbGxlZ2Vz IEJlbGllZg== c3RyZXRjaGVk IExI IEVudGl0eUl0ZW0= Q0lB IHVucmVt IGxhdXJlYXRl IGRlbm9taW5hdGlvbnM= c3VtbWFyeQ== aGxlcg== U3BlY3Q= IEtsYXVz IEJlYW5z IGluc3Vy IFBBWA== IGZpZWxkZXI= IFZldA== IFNwYXJyb3c= emll IFNR IE1vbmRheXM= IE9mZmxpbmU= IExlcm5lcg== IEV4dGVuc2lvbnM= SXJlbGFuZA== IHBhdHJvbmFnZQ== IGNvbnRyYXN0ZWQ= IE1hbmlh aGlydA== TW9zY293 IGNvbmRlbW5z IEFuZ2U= IGNvbXBvc2luZw== IFBlcGU= IFBhZGRvY2s= IGhldGVyb2dlbmVpdHk= IGlkZW9sb2dpY2FsbHk= IGZpc2hlcw== IGN1cnNpbmc= IFJ1dGhlcmZvcmQ= IEZsb2F0aW5n IEFtZWxpYQ== VGVh U3lub3BzaXM= IHN0dW50cw== IGJlYWQ= IHN0b2NraW5n IE1JTEw= b2Jvb2s= bWFzc2l2ZQ== XDw= IGh1bXA= IFByZWZlcmVuY2Vz RW5naW5lRGVidWc= Z2Vpc3Q= IE5pZXRv b21ldmVy aXNoeQ== ZXZhbHVhdGU= Y29sb25pYWw= QWx0ZXJuYXRpdmU= IEdvUHJv IFZvcnRleA== IE5FVFdPUks= YW5za3k= U2VjdXJl IFRocnVzdA== U25ha2U= IHBhcmNlbHM= IHNhbXVyYWk= IGFjdHJlc3Nlcw== TmFw TUY= aWZlcmF0aW9u QmVlcg== NTIz IElseQ== b2ludG1lbnQ= UGluZw== IHN0cmlwZWQ= IE1lbGxvbg== b3NzZXNzaW9u IG5ldXRyb24= ZW5kaXVt IGFwaA== IEZsYXZvcmluZw== IDM4Mw== IHJlc3BvbnNpdmVuZXNz IEppbmRhbA== IEhpdGNoY29jaw== RGVudmVy IERSQUdPTg== c21hbnNoaXA= IER1cGw= IHNseQ== IHdlYmNhbQ== IFR3YWlu IERhcmxpbmc= aWxpYXRl Y29uc3VtZXI= RElU IG5hbWVzYWtl IHVub3J0aG9kb3g= IGZ1bmVy IFBMb1M= IENPTlRST0w= b3p5Zw== b2dsb2Jpbg== RkFDRQ== RVJH IERpYQ== IEZpZXN0YQ== Y2VsZQ== MDM0 IGVuY2xhdmU= 4pas4pas b25lbWVudA== YWxpc3Q= TWFuZA== IGhvbWVncm93bg== IEZhbmN5 IGNvbmNlcHRpb25z IENvbnRhaW5z dXJlZW4= IHJlaXRlcmF0ZQ== IG1lYWdlcg== IGluc3RhbGxtZW50cw== U3Bhd24= NjI3 IHBob3RvYw== IENhYnJlcmE= IFJvc2VudGhhbA== IExhbnNpbmc= aXNuZXI= IGludmVzdHM= IFVGT3M= RVhQ SGFyZHdhcmU= IHRyYWdpY2FsbHk= IGNvbmNlZGVz aWVmdA== Y2hhbQ== Ym9yZ2g= IFNjaHI= IE1lbGFuaWU= IEhveQ== IHZpc2l0YXRpb24= IGlkaW9zeW5jcg== IGZyYWN0aW9ucw== IGZvcmVza2lu b2Jvcw== IHBvYWNoaW5n IFZJRVc= IHN0aW11bGF0ZXM= IEdvcms= Y2Fub24= TUlD IE5lbWVzaXM= IEluZHJh IERNVg== IDUyOQ== IGluc3BlY3Rpbmc= IGdyYW5kbWE= IFdoZWRvbg== IFNoYW50 IFB1cmc= aWthbg== IFRlZw== IENMUg== emFj VmljdG9yaWE= IFZlcmlmeQ== aW9uaWNz IHBhcnR5aW5n IE1vdQ== Y29sb3Vy IHRlc3RpbW9uaWVz bGF0aW9ucw== IHByZXNzdXJpbmc= aGlybw== YWNlcnM= IGZpZA== YW5nbGVy IENTSQ== IGhlcmVhZnRlcg== IGRpc3NpZGVudHM= cmVwb3J0aW5n aXBoYW55 Y2hldg== IHNvbGl0dWRl IGxvYmU= IGluZGlz IGNyZWRlbnRpYWw= cmVjZW50 YWR1bHQ= IE5pcnZhbmE= IEZyYW5jaGlzZQ== TGF5ZXI= SHlw IEJlcmtzaGlyZQ== IHdpbGxz dGlm IHRvdGVt IEp1ZGFo cmVwYWly SW5zdGFudA== NTQ4 IGVtYmFzc2llcw== IGJvdHRsZW5lY2s= IGJvdW50 IHR5cGV3 IEFsdmlu amluZw== aW1pbGFy UnVzaA== IGJyaW0= IEhFTFA= QWlt XSc= IHBhc3NpdmVseQ== IGJvdW5kZWQ= IFJhdGVk IGNyaW1pbmFsaXR5 IGJpb21hcms= IGRpc3BhdGNoZXI= IFRvd2FyZHM= ICsrKw== cmlnaHRlb3Vz ZnJvZw== IFBhbmM= Q2FydGVy MDMy 5qmf IHVsdHJhdmlvbGV0 IExpY2Vuc2Vk IFRhdGE= IEJsZXNzaW5n IEdBTQ== IGNoZW1pY2FsbHk= IFNlYWY= IFJFTEU= IE1lcmNlbmFyeQ== Y2FwaXRhbGlzdA== IGZvcm11bGF0aW9ucw== IGFubmloaWxhdGlvbg== IFZlcmI= IEFyZ29u IHVubG9hZGVk IG1vcnBoZWQ= IGNvbnF1ZXJpbmc= YmFja2Vy SUVMRA== IHRoZWZ0cw== IGZyb250cnVubmVy IFJveWFsZQ== IEZ1bmRhbWVudGFs ZWxpZ2h0 Q2hpcA== bmVjZXNzYXJ5 YXlu IFNsaXA= IDQ0OA== Y2VybmVk UGF1c2U= IHNob2NraW5nbHk= IEFCVg== IGNvbXBvc3VyZQ== NzMz IE1vdG9yc3BvcnQ= YWhpbWU= TXVycmF5 TWFjaA== IGdyaWRz IGRlYmlhbg== IGZ1cnRoZXJtb3Jl IGRleHRlcml0eQ== IENvbGxlY3Rpb25z b3Nsb3Y= aWxhZ2U= Ymo= IE1vbnRlbmVn IHN0cnV0Q29ubmVjdG9y IG1hc3NhY3Jlcw== IGJyaWVmcw== ZmV0Y2hlZA== dXZpYW4= b2xpdGlvbg== RmFpbHVyZQ== ZW1vbmlj IGZsYXJlZA== IGNsYWltYW50 IGN1cmVz IGdpdmVhd2F5cw== IFN1YnN0YW5jZQ== YWxpb25z IGNyaW5nZQ== IEt1bA== IGFyaXN0b2NyYWN5 IFVsc3Rlcg== b2xhdGVk aG91c2luZw== IE1JUw== IGdsYXJlZA== IFdpbGhlbG0= bmVlZHM= bGFtYmRh YnVpbGRlcnM= IFZJUw== IHJhZGlhdG9y IEdob3N0YnVzdGVycw== IDQzNg== YWN0dWFs IGhlcmRz w6dh d2F0Y2hpbmc= IGNvdW50ZXJpbmc= Q2hhcmdl IGNoYXJyZWQ= IHdhcmhlYWRz IGlvZGluZQ== IE1hY3k= MDQx IGRlcGFydHVyZXM= IFNpbnM= IGR5ZWQ= IENvbmNlcHRz Z2Fkbw== NzEz IHF1b3RhdGlvbnM= IGdpc3Q= IENocmlzdHk= IGFudGlnZW4= IEhlbXA= IERyYXdu IEJhcmc= ZXp2b3Vz IHBhdGVybml0eQ== IGFyZHU= IEFuY2hvcmFnZQ== IFJpaw== IG92ZXJsb2FkZWQ= IFVzZXJuYW1l IFRhbW15 IE5hdQ== IENlbGx1bGFy IHdhbmluZw== IHJvZGVudA== IFdvcmNlc3Rlcg== aWx0cw== IFRhZA== IGR3ZWxsaW5ncw== IGJ1bGxpc2g= NDMx IHJldGFsaWF0ZQ== IG1pZ3JhaW5l IENoZXZyb24= Q0hFQ0s= IGRvbmtleQ== Y3JpbQ== U1BB IEFuYWxvZw== IG1hcnF1ZWU= IEhhYXM= Qmly IEdERFI= IERvd25sb2Fkcw== IHdpbGxwb3dlcg== IEZvcnRo IFJlY29yZGVk IGltcG9zc2liaWxpdHk= IExvZ2dlZA== IEZyYW5rcw== IFJhdHQ= aW5pdGlvbnM= IGNsZWFuZXJz IHNvcmVseQ== IGZsaWNrZXJpbmc= IEV4YW1pbmF0aW9u Y2F0Y2hpbmc= YWxsb3dlZW4= TXNn IGR1bm5v RmE= IGR5c3Bo Y3Jhenk= LicnLg== IG1haW5saW5l IGNz IHB0cg== IFdhbGx5 aWd1bg== OTUx IEJpZ2Zvb3Q= ZmlnaHRz IHJldHJpZXZpbmc= SnI= IGR1cGxpY2F0aW9u IEV4cGxhbg== IHJlbGF0aW9uYWw= IHF1YWludA== IGJpc2N1aXRz IGFkbw== IHNodWRkZXI= IGFudGlkb3Rl Ymxvb2RlZA== a3No IHNhdWNlcw== IHJlaW52ZXN0 IGRpc3BlbnNhcnk= IERpdmVy IDkwMDA= c3R1ZGVudA== IGluc2VwYXI= ZXNjYXA= IHRvZGRsZXJz IEdQSU8= IEFzc2lnbm1lbnQ= aGVhZGVycw== IGxhY2tsdXN0ZXI= IGFiYWNr OTU2 IHRvb2xiYXI= NzQ1 IG91c3Q= IGNvbnRlbXBsYXRpb24= IFBSRVNJREVOVA== IDQ1OA== PT09PT09 IGd1YXJhbnRlZWluZw== IEhlaXN0 IENhbm5lcw== mb0= IGNvbGxhYm9yYXRvcg== IEFtcA== IGdvdQ== IFNIQUxM c3Rvcmllcw== Nzgz IG1vYmlsaXplZA== IGJyb29k IExV IPCfkQ== IHJlZmlu IEFudGhyb3BvbG9neQ== dmluZA== aWxsaQ== IHdhcnJhbnRpZXM= IEJhYmVs IHN3YXRo IGNhY2hlcw== IGFudGFnb25pc3Rz YXJ0aWZhY3Rz IGhvdGx5 IFN0YXJ0cw== IEfDtg== emFn ISEhISE= IHNjb3VyZ2U= IGNvbnNwaXJpbmc= cnVpdHM= cmV2ZXJzZQ== IFNoZWVu IEplc3VpdA== IEdpb3Zhbm5p YWRpZXM= IGJ1dHRvY2tz ZWFyY2hlcg== YWNhbg== IHZvbGxleWJhbGw= IHNocm91ZGVk IHNjb3JlYm9hcmQ= YmF0cw== IElQTQ== IGFzc2Vz IGRlcmVndWxhdGlvbg== IFRlbGVncmFt IFJlYm9vdA== IDcwMDA= IENhbmFyeQ== IGtlcm5lbHM= IEZyYW7Dp29pcw== IER1ZmY= IFBvbg== IExlaWNh IEdhcm1pbg== IG9ycGhhbnM= IENsYXVkaWE= IGNhbGVuZGFycw== IExlaWxhbg== ZW50bw== Um9ja2V0 IGJydW5jaA== IEhhd2tpbmc= YWluZXJz IHNlbnNpYmlsaXRpZXM= IGtX IEthbmQ= IHJlY2xhaW1lZA== IGludGVyZXN0aW5nbHk= 16k= cm9teQ== Sk0= IEVuaGFuY2VtZW50 YnVzaA== U2tpcA== IHJhcHBlcnM= IGdhemluZw== cGVkaWE= YXRobG9u UmV2b2x1dGlvbg== IHNuaXBlcnM= IHJldmVydGVk IGNvbmdsb21lcmF0ZQ== VGVycnk= Nzk0 IGhhcnNoZXI= IGRlc29sYXRl IEhpdG1hbg== Q29tbWlzc2lvbg== ICgv 4oCmLiI= Q29tcGFy IGFtcGxpZmljYXRpb24= b21pbmF0ZWQ= IHJlZ3Jlc3M= IENvbGxpZGVy IGluZm9ybWFudHM= IGdhemVk\n! 50257 ICA= ICAg ICAgIA== ICAgICA= ICAgICAg ICAgICAgIA== ICAgICAgICA= ICAgICAgICAg ICAgICAgICAgIA== ICAgICAgICAgICA= ICAgICAgICAgICAg ICAgICAgICAgICAgIA== ICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIA== ICAgICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA== ICAgICAgICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIA== ICAgICAgICAgICAgICAgICAgICAgICA= ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIA==" }; - r50k_base_default = { explicit_n_vocab: 50257, pat_str: "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+", special_tokens: { "<|endoftext|>": 50256 }, bpe_ranks: "! 0 IQ== Ig== Iw== JA== JQ== Jg== Jw== KA== KQ== Kg== Kw== LA== LQ== Lg== Lw== MA== MQ== Mg== Mw== NA== NQ== Ng== Nw== OA== OQ== Og== Ow== PA== PQ== Pg== Pw== QA== QQ== Qg== Qw== RA== RQ== Rg== Rw== SA== SQ== Sg== Sw== TA== TQ== Tg== Tw== UA== UQ== Ug== Uw== VA== VQ== Vg== Vw== WA== WQ== Wg== Ww== XA== XQ== Xg== Xw== YA== YQ== Yg== Yw== ZA== ZQ== Zg== Zw== aA== aQ== ag== aw== bA== bQ== bg== bw== cA== cQ== cg== cw== dA== dQ== dg== dw== eA== eQ== eg== ew== fA== fQ== fg== oQ== og== ow== pA== pQ== pg== pw== qA== qQ== qg== qw== rA== rg== rw== sA== sQ== sg== sw== tA== tQ== tg== tw== uA== uQ== ug== uw== vA== vQ== vg== vw== wA== wQ== wg== ww== xA== xQ== xg== xw== yA== yQ== yg== yw== zA== zQ== zg== zw== 0A== 0Q== 0g== 0w== 1A== 1Q== 1g== 1w== 2A== 2Q== 2g== 2w== 3A== 3Q== 3g== 3w== 4A== 4Q== 4g== 4w== 5A== 5Q== 5g== 5w== 6A== 6Q== 6g== 6w== 7A== 7Q== 7g== 7w== 8A== 8Q== 8g== 8w== 9A== 9Q== 9g== 9w== +A== +Q== +g== +w== /A== /Q== /g== /w== AA== AQ== Ag== Aw== BA== BQ== Bg== Bw== CA== CQ== Cg== Cw== DA== DQ== Dg== Dw== EA== EQ== Eg== Ew== FA== FQ== Fg== Fw== GA== GQ== Gg== Gw== HA== HQ== Hg== Hw== IA== fw== gA== gQ== gg== gw== hA== hQ== hg== hw== iA== iQ== ig== iw== jA== jQ== jg== jw== kA== kQ== kg== kw== lA== lQ== lg== lw== mA== mQ== mg== mw== nA== nQ== ng== nw== oA== rQ== IHQ= IGE= aGU= aW4= cmU= b24= IHRoZQ== ZXI= IHM= YXQ= IHc= IG8= ZW4= IGM= aXQ= aXM= YW4= b3I= ZXM= IGI= ZWQ= IGY= aW5n IHA= b3U= IGFu YWw= YXI= IHRv IG0= IG9m IGlu IGQ= IGg= IGFuZA== aWM= YXM= bGU= IHRo aW9u b20= bGw= ZW50 IG4= IGw= c3Q= IHJl dmU= IGU= cm8= bHk= IGJl IGc= IFQ= Y3Q= IFM= aWQ= b3Q= IEk= dXQ= ZXQ= IEE= IGlz IG9u aW0= YW0= b3c= YXk= YWQ= c2U= IHRoYXQ= IEM= aWc= IGZvcg== YWM= IHk= dmVy dXI= IHU= bGQ= IHN0 IE0= J3M= IGhl IGl0 YXRpb24= aXRo aXI= Y2U= IHlvdQ== aWw= IEI= IHdo b2w= IFA= IHdpdGg= IDE= dGVy Y2g= IGFz IHdl ICg= bmQ= aWxs IEQ= aWY= IDI= YWc= ZXJz a2U= ICI= IEg= ZW0= IGNvbg== IFc= IFI= aGVy IHdhcw== IHI= b2Q= IEY= dWw= YXRl IGF0 cmk= cHA= b3Jl IFRoZQ== IHNl dXM= IHBybw== IGhh dW0= IGFyZQ== IGRl YWlu YW5k IG9y aWdo ZXN0 aXN0 YWI= cm9t IE4= dGg= IGNvbQ== IEc= dW4= b3A= MDA= IEw= IG5vdA== ZXNz IGV4 IHY= cmVz IEU= ZXc= aXR5 YW50 IGJ5 ZWw= b3M= b3J0 b2M= cXU= IGZyb20= IGhhdmU= IHN1 aXZl b3VsZA== IHNo IHRoaXM= bnQ= cmE= cGU= aWdodA== YXJ0 bWVudA== IGFs dXN0 ZW5k LS0= YWxs IE8= YWNr IGNo IGxl aWVz cmVk YXJk 4oA= b3V0 IEo= IGFi ZWFy aXY= YWxseQ== b3Vy b3N0 Z2g= cHQ= IHBs YXN0 IGNhbg== YWs= b21l dWQ= VGhl IGhpcw== IGRv IGdv IGhhcw== Z2U= J3Q= IFU= cm91 IHNh IGo= IGJ1dA== IHdvcg== IGFsbA== ZWN0 IGs= YW1l IHdpbGw= b2s= IHdoZQ== IHRoZXk= aWRl MDE= ZmY= aWNo cGw= dGhlcg== IHRy Li4= IGludA== aWU= dXJl YWdl IG5l aWFs YXA= aW5l aWNl IG1l IG91dA== YW5z b25l b25n aW9ucw== IHdobw== IEs= IHVw IHRoZWly IGFk IDM= IHVz YXRlZA== b3Vz IG1vcmU= dWU= b2c= IFN0 aW5k aWtl IHNv aW1l cGVy LiI= YmVy aXo= YWN0 IG9uZQ== IHNhaWQ= IC0= YXJl IHlvdXI= Y2M= IFRo IGNs ZXA= YWtl YWJsZQ== aXA= IGNvbnQ= IHdoaWNo aWE= IGlt IGFib3V0 IHdlcmU= dmVyeQ== dWI= IGhhZA== IGVu IGNvbXA= LCI= IElu IHVu IGFn aXJl YWNl YXU= YXJ5 IHdvdWxk YXNz cnk= IOKA Y2w= b29r ZXJl c28= IFY= aWdu aWI= IG9mZg== IHRl dmVu IFk= aWxl b3Nl aXRl b3Jt IDIwMQ== IHJlcw== IG1hbg== IHBlcg== IG90aGVy b3Jk dWx0 IGJlZW4= IGxpa2U= YXNl YW5jZQ== a3M= YXlz b3du ZW5jZQ== IGRpcw== Y3Rpb24= IGFueQ== IGFwcA== IHNw aW50 cmVzcw== YXRpb25z YWls IDQ= aWNhbA== IHRoZW0= IGhlcg== b3VudA== IENo IGFy IGlm IHRoZXJl IHBl IHllYXI= YXY= IG15 IHNvbWU= IHdoZW4= b3VnaA== YWNo IHRoYW4= cnU= b25k aWNr IG92ZXI= dmVs IHF1 Cgo= IHNj cmVhdA== cmVl IEl0 b3VuZA== cG9ydA== IGFsc28= IHBhcnQ= ZnRlcg== IGtu IGJlYw== IHRpbWU= ZW5z IDU= b3BsZQ== IHdoYXQ= IG5v ZHU= bWVy YW5n IG5ldw== LS0tLQ== IGdldA== b3J5 aXRpb24= aW5ncw== IGp1c3Q= IGludG8= IDA= ZW50cw== b3Zl dGU= IHBlb3BsZQ== IHByZQ== IGl0cw== IHJlYw== IHR3 aWFu aXJzdA== YXJr b3Jz IHdvcms= YWRl b2I= IHNoZQ== IG91cg== d24= aW5r bGlj IDE5 IEhl aXNo bmRlcg== YXVzZQ== IGhpbQ== b25z IFs= IHJv Zm9ybQ== aWxk YXRlcw== dmVycw== IG9ubHk= b2xs IHNwZQ== Y2s= ZWxs YW1w IGFjYw== IGJs aW91cw== dXJu ZnQ= b29k IGhvdw== aGVk ICc= IGFmdGVy YXc= IGF0dA== b3Y= bmU= IHBsYXk= ZXJ2 aWN0 IGNvdWxk aXR0 IGFt IGZpcnN0 IDY= IGFjdA== ICQ= ZWM= aGluZw== dWFs dWxs IGNvbW0= b3k= b2xk Y2Vz YXRlcg== IGZl IGJldA== d2U= aWZm IHR3bw== b2Nr IGJhY2s= KS4= aWRlbnQ= IHVuZGVy cm91Z2g= c2Vs eHQ= IG1heQ== cm91bmQ= IHBv cGg= aXNz IGRlcw== IG1vc3Q= IGRpZA== IGFkZA== amVjdA== IGluYw== Zm9yZQ== IHBvbA== b250 IGFnYWlu Y2x1ZA== dGVybg== IGtub3c= IG5lZWQ= IGNvbnM= IGNv IC4= IHdhbnQ= IHNlZQ== IDc= bmluZw== aWV3 IFRoaXM= Y2Vk IGV2ZW4= IGluZA== dHk= IFdl YXRo IHRoZXNl IHBy IHVzZQ== IGJlY2F1c2U= IGZs bmc= IG5vdw== IOKAkw== Y29t aXNl IG1ha2U= IHRoZW4= b3dlcg== IGV2ZXJ5 IFVu IHNlYw== b3Nz dWNo IGVt ID0= IFJl aWVk cml0 IGludg== bGVjdA== IHN1cHA= YXRpbmc= IGxvb2s= bWFu cGVjdA== IDg= cm93 IGJ1 IHdoZXJl aWZpYw== IHllYXJz aWx5 IGRpZmY= IHNob3VsZA== IHJlbQ== VGg= SW4= IGV2 ZGF5 J3Jl cmli IHJlbA== c3M= IGRlZg== IHJpZ2h0 IHN5 KSw= bGVz MDAw aGVu IHRocm91Z2g= IFRy X18= IHdheQ== IGRvbg== ICw= IDEw YXNlZA== IGFzcw== dWJsaWM= IHJlZw== IEFuZA== aXg= IHZlcnk= IGluY2x1ZA== b3RoZXI= IGltcA== b3Ro IHN1Yg== IOKAlA== IGJlaW5n YXJn IFdo PT0= aWJsZQ== IGRvZXM= YW5nZQ== cmFt IDk= ZXJ0 cHM= aXRlZA== YXRpb25hbA== IGJy IGRvd24= IG1hbnk= YWtpbmc= IGNhbGw= dXJpbmc= aXRpZXM= IHBo aWNz YWxz IGRlYw== YXRpdmU= ZW5lcg== IGJlZm9yZQ== aWxpdHk= IHdlbGw= IG11Y2g= ZXJzb24= IHRob3Nl IHN1Y2g= IGtl IGVuZA== IEJ1dA== YXNvbg== dGluZw== IGxvbmc= ZWY= IHRoaW5r eXM= IGJlbA== IHNt aXRz YXg= IG93bg== IHByb3Y= IHNldA== aWZl bWVudHM= Ymxl d2FyZA== IHNob3c= IHByZXM= bXM= b21ldA== IG9i IHNheQ== IFNo dHM= ZnVs IGVmZg== IGd1 IGluc3Q= dW5k cmVu Y2Vzcw== IGVudA== IFlvdQ== IGdvb2Q= IHN0YXJ0 aW5jZQ== IG1hZGU= dHQ= c3RlbQ== b2xvZw== dXA= IHw= dW1w IGhlbA== dmVybg== dWxhcg== dWFsbHk= IGFj IG1vbg== IGxhc3Q= IDIwMA== MTA= IHN0dWQ= dXJlcw== IEFy c2VsZg== YXJz bWVyaWM= dWVz Y3k= IG1pbg== b2xsb3c= IGNvbA== aW8= IG1vZA== IGNvdW50 IENvbQ== aGVz IGZpbg== YWly aWVy 4oCU cmVhZA== YW5r YXRjaA== ZXZlcg== IHN0cg== IHBvaW50 b3Jr IE5ldw== IHN1cg== b29s YWxr ZW1lbnQ= IHVzZWQ= cmFjdA== d2Vlbg== IHNhbWU= b3Vu IEFs Y2k= IGRpZmZlcmU= IHdoaWxl LS0tLS0tLS0= IGdhbWU= Y2VwdA== IHNpbQ== Li4u IGludGVy ZWs= IHJlcG9ydA== IHByb2R1 IHN0aWxs bGVk YWg= IGhlcmU= IHdvcmxk IHRob3VnaA== IG51bQ== YXJjaA== aW1lcw== YWxl IFNl IElm Ly8= IExl IHJldA== IHJlZg== IHRyYW5z bmVy dXRpb24= dGVycw== IHRha2U= IENs IGNvbmY= d2F5 YXZl IGdvaW5n IHNs dWc= IEFtZXJpYw== IHNwZWM= IGhhbmQ= IGJldHdlZW4= aXN0cw== IERl b290 SXQ= IGVhcg== IGFnYWluc3Q= IGhpZ2g= Z2Fu YXo= YXRoZXI= IGV4cA== IG9w IGlucw== IGdy IGhlbHA= IHJlcXU= ZXRz aW5z IFBybw== aXNt IGZvdW5k bGFuZA== YXRh dXNz YW1lcw== IHBlcnNvbg== IGdyZWF0 cHI= IHNpZ24= IEFu J3Zl IHNvbWV0 IHNlcg== aGlw IHJ1bg== IDo= IHRlcg== aXJlY3Q= IGZvbGxvdw== IGRldA== aWNlcw== IGZpbmQ= MTI= IG1lbQ== IGNy ZXJlZA== ZXg= IGV4dA== dXRo ZW5zZQ== Y28= IHRlYW0= dmluZw== b3VzZQ== YXNo YXR0 dmVk IHN5c3RlbQ== IEFz ZGVy aXZlcw== bWlu IGxlYWQ= IEJs Y2VudA== IGFyb3VuZA== IGdvdmVybg== IGN1cg== dmVsb3A= YW55 IGNvdXI= YWx0aA== YWdlcw== aXpl IGNhcg== b2Rl IGxhdw== IHJlYWQ= J20= Y29u IHJlYWw= IHN1cHBvcnQ= IDEy Li4uLg== IHJlYWxseQ== bmVzcw== IGZhY3Q= IGRheQ== IGJvdGg= eWluZw== IHNlcnY= IEZvcg== IHRocmVl IHdvbQ== IG1lZA== b2R5 IFRoZXk= NTA= IGV4cGVy dG9u IGVhY2g= YWtlcw== IGNoZQ== IGNyZQ== aW5lcw== IHJlcA== MTk= Z2c= aWxsaW9u IGdyb3U= dXRl aWs= V2U= Z2V0 RVI= IG1ldA== IHNheXM= b3g= IGR1cmluZw== ZXJu aXplZA== YXJlZA== IGZhbQ== aWNhbGx5 IGhhcHA= IElz IGNoYXI= bWVk dmVudA== IGdlbmVy aWVudA== cGxl aWV0 cmVudA== MTE= dmVz cHRpb24= IDIw Zm9ybWF0aW9u IGNvcg== IG9mZmlj aWVsZA== IHRvbw== aXNpb24= IGluZg== IFo= dGhl b2Fk IHB1YmxpYw== IHByb2c= cmlj Kio= IHdhcg== IHBvd2Vy dmlldw== IGZldw== IGxvYw== IGRpZmZlcmVudA== IHN0YXRl IGhlYWQ= J2xs IHBvc3M= IHN0YXQ= cmV0 YW50cw== IHZhbA== IGlzcw== IGNsZQ== aXZlcnM= YW5j IGV4cGw= IGFub3RoZXI= IFE= IGF2 dGhpbmc= bmNl V2g= IGNoaWxk IHNpbmNl aXJlZA== bGVzcw== IGxpZmU= IGRldmVsb3A= aXR0bGU= IGRlcA== IHBhc3M= 44M= IHR1cm4= b3Ju VGhpcw== YmVycw== cm9zcw== IEFk IGZy IHJlc3A= IHNlY29uZA== b2g= IC8= IGRpc2M= ICY= IHNvbWV0aGluZw== IGNvbXBsZQ== IGVk IGZpbA== IG1vbnRo YWo= dWM= IGdvdmVybm1lbnQ= IHdpdGhvdXQ= IGxlZw== IGRpc3Q= IHB1dA== IHF1ZXN0 YW5u IHByb3Q= MjA= IG5ldmVy aWVuY2U= IGxldmVs IGFydA== IHRoaW5ncw== IG1pZ2h0 IGVmZmVjdA== IGNvbnRybw== IGNlbnQ= IDE4 IGFsbG93 IGJlbGll Y2hvb2w= b3R0 IGluY3Jl IGZlZWw= IHJlc3VsdA== IGxvdA== IGZ1bg== b3Rl IHR5 ZXJlc3Q= IGNvbnRpbg== IHVzaW5n IGJpZw== MjAx IGFzaw== IGJlc3Q= ICk= SU4= IG9wcA== MzA= IG51bWJlcg== aW5lc3M= U3Q= bGVhc2U= IGNh IG11c3Q= IGRpcmVjdA== IGds IDw= IG9wZW4= IHBvc3Q= IGNvbWU= IHNlZW0= b3JkaW5n IHdlZWs= YXRlbHk= aXRhbA== IGVs cmllbmQ= IGZhcg== IHRyYQ== aW5hbA== IHByaQ== IFVT IHBsYWNl IGZvcm0= IHRvbGQ= Ijo= YWlucw== YXR1cmU= IFRydW1w IHN0YW5k ICM= aWRlcg== IEZy IG5leHQ= IHNvYw== IHB1cg== IGxldA== IGxpdHRsZQ== IGh1bQ== IGk= cm9u MTU= IDE1 IGNvbW11bg== IG1hcms= IFRoZXJl IHdy IFRoYXQ= IGluZm9ybWF0aW9u d2F5cw== IGJ1cw== YXBw IGludmVzdA== bWU= IGhhcmQ= YWluZWQ= ZWFk IGltcG9ydA== IGFwcHJv IHRlc3Q= IHRyaQ== IHJlc3Q= b3NlZA== IGZ1bGw= IGNhcmU= IFNw IGNhc2U= T04= IHNr IGxlc3M= ICs= IHBhcnRpYw== IFBs YWJseQ== dWNr aXNoZWQ= Y2hu YmU= IGxpc3Q= YXRvcg== IHRvcA== IGFkdg== IEJl cnVjdA== IGRlbQ== cmF0aW9u bGluZw== Z3k= cmVlbg== Z2Vy IGhvbWU= IGxlZnQ= IGJldHRlcg== IGRhdGE= IDEx IGF0dGFjaw== IHByb2JsZQ== bGluZQ== YXJkcw== IGJlaA== cmFs IEhvdw== IFNoZQ== YXJnZQ== IC0t Oi8v IGJybw== IFBo YXRz IGJ1aWxk d3c= aWRlZA== YWlt YXNlcw== ZW5jeQ== IG1haW4= aW5lZA== IGluY2x1ZGluZw== IHs= IGdvdA== IGludGVyZXN0 IGtlZXA= IFg= IGVhcw== YWluaW5n IGNsYXNz 4oCm IE5v IHZhcg== IHNtYWxs YW1wbGU= QVQ= IGlkZQ== IFNv IHJlY2U= IHBvbGl0 IG1vdg== IHBsYW4= IHBlcmNlbnQ= aXZpbmc= IGNhbXA= IHBheQ== MTQ= c2M= aXNlZA== IHVudA== b25leQ== cGxveQ== PT09PQ== IGRpZG4= IEluZA== ZWxz ZXJ0YWlu IHBvcw== X19fXw== aXZlcg== IHByb2Nlc3M= IHByb2dyYW0= aWZpZWQ= IFJlcA== MTY= dXJv b2xvZ3k= YXR0ZXI= aW5h IG5hbWU= IEFsbA== IGZvdXI= IHJldHVybg== dmlvdXM= YnM= IGNhbGxlZA== IG1vdmU= IFNj aXJk IGdyb3Vw IGJyZQ== IG1lbg== IGNhcA== dGVu ZWU= IGRyaQ== bGVn aGVyZQ== dXRob3I= IHBhdA== IGN1cnJlbnQ= aWRlcw== IHBvcA== dG8= ZW50aW9u IGFsd2F5cw== IG1pbA== IHdvbWVu IDE2 IG9sZA== aXZlbg== cmFwaA== IE9y cm9y ZW50bHk= IG5lYXI= IEV4 cmVhbQ== c2g= IDE0 IGZyZWU= aXNzaW9u c3RhbmQ= IENvbg== YWxpdHk= dXNlZA== MTM= IGRlc2lnbg== IGNoYW5nZQ== IGNoYW5n IGJv IHZpcw== ZW1iZXI= IGJvb2s= cmVhZHk= IGtpbGw= MjU= cHBlZA== IGF3YXk= IGFibGU= IGNvdW50cnk= IGNvbnN0 YXJu IG9yZGVy QVI= aW9y aXVt b3J0aA== MTg= YWlsYWJsZQ== IHN3 IG1pbGxpb24= IDEz YXRpYw== dGVk IEdv IG9wZXI= ZW5n IHRoaW5n YWpvcg== Y29ub20= IENvbW0= IHdoeQ== dXJlZA== dXJhbA== IHNjaG9vbA== Ynk= IE1hcg== IGFmZg== IGRheXM= IGFubg== dXNo YW5l SWY= ZWc= IHByb2Y= IGhlYWx0aA== b3V0aA== QnV0 aW9uYWw= Liw= IHNvbA== IGFscmVhZHk= IDMw IGNoYXJhY3Q= SGU= IGZyaWVuZA== RVM= aWFucw== aWNsZQ== J2Q= IE9u IGxlYXN0 IHByb20= IGRy IGhpc3Q= aXRoZXI= IGVzdA== aXF1 MTc= c29u IHRlbGw= IHRhbGs= b2hu b2ludA== bGVjdGlvbg== QU4= IHVudGls YXVnaA== IGxhdGVy IHZl IHZpZXc= ZW5kaW5n aXZlZA== IHdvcmQ= d2FyZQ== IGNvc3Q= IGVub3VnaA== IGdpdmU= IFVuaXRlZA== IHRlY2hu YXJlbnQ= T1I= IHBhcg== IERy IDIwMTY= cmlzdA== ZXJpbmc= IMI= IGxhcmdl c2lkZQ== YWN5 Y2Nlc3M= IHdpbg== IGltcG9ydGFudA== IDE5OQ== IGRvZXNu IDE3 IGJ1c2luZXNz IGNsZWFy IHJlc2U= Iiw= dXJ5 IGVxdQ== YXN0ZXI= YWxm IEFtZXJpY2Fu bmVjdA== IGV4cGVjdA== aXZlcnNpdHk= IG9jYw== IEZs IGtpbmQ= IG1lYW4= IHBhc3Q= IGRldg== IGJhcw== bGV0 cmFmdA== IG9yZ2Fu IGRlbA== IHBlcmZvcm0= IHN0b3J5 IHNlYXNvbg== IENvbA== IGNsYWlt IGNhbWU= IHdpdGhpbg== IGxpbmU= IHByb2plY3Q= IEF0 IGNvbnRyb2w= ZW5kZWQ= IFN5 IGFpcg== aXphdGlvbg== ICo= bGV5 IG1vbmV5 aWRk WW91 Zm9y IGZhbWlseQ== IG1ha2luZw== IGJpdA== IHBvbGljZQ== IGhhcHBlbg== IHZlcnM= b255 dWZm IFdoZW4= IHNpdA== aWRlbw== bGY= aXNvbg== IHN1cmU= Z2lu IGFwcGVhcg== IGxpZ2h0 IGVz b2Y= IHdhdGVy IHRpbWVz bm90 IGdyb3c= IGNvbXBhbnk= IFRl b3dz IG1hcg== b3VyY2U= aW9s YXJt YnI= IGV4YW1wbGU= IGNvbmM= IGZvcmU= IFRv cHJv RU4= cmllcw== IDI1 IENhbg== bmV5 IGFjdHVhbGx5 IGV2ZXI= dXJpdHk= YWtlbg== YXBz IHRheA== IG1ham9y YW1h IG9mdGVu ZXJhbA== IGh1bWFu IGpvYg== aXN0ZXI= IGF2YWlsYWJsZQ== b2Ny ZW5u YWlk aXZpZA== IHJlY29yZA== PyI= IHNpbmc= IEFt aWRlbmNl IG5ld3M= c3Rlcg== IGVjb25vbQ== IGZvbGxvd2luZw== IEJy aXNpbmc= IGhvdXI= bW9zdA== dW1lbnQ= IHNleA== IGRlc2M= IGJlY29tZQ== IEVk IHRvb2s= IGhhdmluZw== IHByb2R1Y3Q= YXVsdA== QXM= YXJpbmc= IG1lYW5z IGhvcA== dW5l IGNobw== IGNlcnRhaW4= IG5vbg== IGRlYWw= MjQ= bGVtZW50 b2Np ZW5l IHNpZGU= IFBy IE1heQ== IHJlYXNvbg== dWVk Y2hlZA== dWxhdGlvbg== IGVsZWN0 IG9mZmljaWFs IHBvc3NpYmxl IGhvbGQ= YW5kcw== b3Rz IGNpdHk= b3JpZXM= IHNldmVy IGNoaWxkcmVu IG9uY2U= IGFjdGl2 bGVy IG5pZ2h0 aXRpb25z IEpvaG4= YXBl cGxheQ== IGRvbmU= IGxpbQ== IHdvcmtpbmc= IFByZXM= b3JsZA== ZWI= IENv IGJvZHk= YWlscw== dXRlcw== IE1y IHdoZXRoZXI= IGF1dGhvcg== cm9w IHByb3Blcg== IHNlZW4= KTs= IGZhYw== IFN1 IGNvbmQ= aXRpbmc= IGNvdXJzZQ== IH0= LS0tLS0tLS0tLS0tLS0tLQ== YWlnbg== IGV2ZW50 IGVuZw== IHBvdA== IGludGVybg== aWFt IHNob3J0 ZW1wdA== 44I= IEdvZA== aWxhcg== ODA= IG9yaWc= SVM= b3Vybg== YWJpbGl0eQ== aXRpdmU= IGRhbQ== IDEwMA== IHByZXNz IGRvaW5n IHByb3RlY3Q= cmluZw== IHRob3VnaHQ= IHF1ZXN0aW9u cmV3 IFdhcg== IHNldmVyYWw= IFN0YXRl IGdpdmVu IGZ1bmQ= IFR3 IHdlbnQ= YW5jZXM= d29yaw== cG9y bXk= NDA= IGFyZw== YXJ0bWVudA== dXN0b20= IHBvbGlj IG1lZXQ= IGNyZWF0 MjI= IFN0YXRlcw== IGdhbWVz cmF3 dXR1cmU= IHVuZGVyc3RhbmQ= dXJz IE9i bGlzaA== c3k= IG1ha2Vz IHdvbg== YWdvbg== IGh0dA== IGxvdmU= ZW50aWFs IGNvbXBsZXRl cGFy IElt QUw= IGFjY291bnQ= wqA= b3JlZA== dmVydA== IGlkZW50 IDIwMTU= IG90aGVycw== IE1pbg== aWJlcg== dmVyYWdl VGhlcmU= aXRpb25hbA== ZGQ= IHByb2I= IHlvdW5n IGFsb25n IGFjY29yZGluZw== IHlldA== IG1lbWJlcnM= IFdoYXQ= b2lk IE1hbg== QW5k IGFtb25n YWk= IGVtcGxveQ== IFJlcw== ID4= IGludm9s IGxvdw== YWY= IENhcg== IGhpZw== IE9uZQ== IFNlYw== aW5hdGlvbg== IGxpa2VseQ== IGFudA== YWdlZA== IFJ1c3M= IGJlbg== IHJlbGU= Rm9y YmFjaw== IE5vdA== IHByZXNpZGVudA== YmFsbA== IGFjY2Vzcw== aXZpZHVhbA== IERlbQ== IEV1cm8= NjA= IGtub3du aXJs IEdy IGVhcmx5 dXNl aWV0eQ== 4oCT IGZpZ2h0 IHNlbnQ= IHRvZGF5 IG1hcmtldA== Ii4= IGJhc2Vk IHN0cm9uZw== dXJ0aGVy IGRlYg== bWJlcg== IHByb2JsZW0= IGRlYXRo IHNvY2lhbA== aW1hdGU= QVM= b3J0dW4= IGNhbXBhaWdu ZXJ5 Q2g= IGV5 aWFsbHk= IG11cw== d2g= cG9z IGVy IHNhZg== IG1vbnRocw== aXJvbg== IHZpb2w= IGZpdmU= IHN0cmU= IHBsYXllcnM= aW5j YWxk eWVhcg== YXVu IHN1Y2Nlc3M= IHByZXNlbnQ= ZXJlbmNl IDIwMTQ= IHN1Z2c= IHBhcnRpY3VsYXI= IHRyeQ== IHN1Z2dlc3Q= IENocmlzdA== b25lcw== IHByaXY= MjM= IGNyaXQ= IGxhbmQ= IGxvY2Fs aWZ5 Mjk= IGF1dA== RUQ= IEd1 IG11bHQ= IHBvbGl0aWNhbA== IGFza2Vk IGZvcm1lcg== aXR0ZXI= cmlwdA== IGNsb3Nl IHByYWN0 IFlvcms= IGdldHRpbmc= IGFjcm9zcw== IGNvbWI= IGJlbGlldmU= IHo= IHRvZ2V0 IHRvZ2V0aGVy IENlbnQ= aXJj IGluZGl2aWR1YWw= IE1j Mjc= aXNr IEVuZw== IGZhY2U= IDI0 IHZhbHVl IGFyZWE= ZXY= IHdyaXQ= IFByZXNpZGVudA== IHZvdA== IGtleQ== IG1vbQ== cHV0 IGFueXRoaW5n IGV4cGVyaWVuY2U= YXR0bGU= IG1pbmQ= YWZm b21t IGZ1dHVyZQ== Z2Vk IGN1dA== IHRvdA== aXRjaA== IHZpZGVv IGludmVzdGln IG5ldA== IE15 cmljdA== aWVu Lik= IGltcHJv dGhvdWdo d2FyZHM= IGNvbm5lY3Q= IE1lZA== c2VsdmVz ZW5zaXZl bWI= b2Jlcg== YXRvcnM= QW4= IDUw IHJlZHU= cmVzZW50 IGFib3Zl IGZyZQ== IEV1cm9wZQ== c3c= IGFtb3VudA== IEFwcA== IGVpdGhlcg== IG1pbGl0 IGFuYWw= IGZhaWw= IEVu YWxlcw== IHNwZWNpYWw= IGJsYWNr SVQ= Y2hlcg== IGxvb2tpbmc= IGZpcmU= eW4= IGFsbW9zdA== b29u IHN0dWR5 IG1pc3M= Y2hlcw== cm93bg== IHRyZQ== IGNvbW11bml0eQ== IG1lZGlh IGZvb2Q= IGNvbWVz IFVuaXZlcnNpdHk= IHNpbmdsZQ== V2hhdA== dWx5 IGhhbGY= YWd1ZQ== aG9k IFJlcHVibGlj IHN0YXJ0ZWQ= IHF1aWNr b3Rv Ym9vaw== IGlzc3Vl aXRvcg== IGVsc2U= IGNvbnNpZGVy MjY= cm9kdQ== IHRha2Vu Mjg= OTk= IFdpdGg= IHRydWU= IHdh IHRyYWQ= IGFnbw== IG1lc3M= aWVm IGFkZGVk b2tl IGJhZA== IGZhdg== MzM= IHNpbWlsYXI= YXNr IERvbg== IGNoYXJhY3Rlcg== b3J0cw== IEhvdXNl IHJlcG9ydGVk IHR5cGU= dmFs aW9k IEhvd2V2ZXI= IHRhcmc= IGVudGlyZQ== cHBpbmc= IGhpc3Rvcnk= IGxpdmU= ZmZpYw== Li4uLi4uLi4= ZWRlcmFs IHRyeWluZw== IGRpc2N1c3M= IEhhcg== YWNlcw== bGlzaGVk IHNlbGY= b3Nw cmVzdA== IHJvb20= ZWx0 IGZhbGw= b2x1dGlvbg== IGV0 IHg= IGlzbg== IGlkZWE= Ym8= IHNvdW5k IERlcA== IHNvbWVvbmU= Y2lhbGx5 dWxseQ== IGZvYw== IG9iamVjdA== aWZ0 YXBlcg== IHBsYXllcg== IHJhdGhlcg== IHNlcnZpY2U= YXNoaW5n IERv IFBhcnQ= cnVn bW9u cGx5 IG1vcg== IG5vdGhpbmc= IHByb3ZpZGU= SUM= dW5n IHBhcnR5 IGV4aXN0 IG1hZw== NzA= IHJ1bA== IGhvdXNl IGJlaGluZA== IGhvd2V2ZXI= IFdvcmxk IHN1bQ== IGFwcGxpYw== IDs= IGZ1bmN0aW9u Z3I= IFBvbA== IGZyb250 MjAw IHNlcmllcw== IHRlbQ== IHR5cA== aWxscw== IG9wdA== IHBvaW50cw== IGJlbG93 aXR0ZWQ= IHNwZWNpZmlj IDIwMTc= dW1i IHJh IHByZXZpb3Vz IHByZXQ= cmVtZQ== IGN1c3RvbQ== IGNvdXJ0 IE1l IHJlcGw= IHdob2xl Z28= Y2Vy IHRyZWF0 IEFjdA== IHByb2JhYmx5 IGxlYXJu ZW5kZXI= IEFzcw== IHZlcnNpb24= bm93 IGNoZWNr IENhbA== UkU= bWluaXN0 T24= b3VyY2Vz IGJlbmVm IGRvYw== IGRldGVy IGVuYw== IHN1cGVy IGFkZHJlc3M= IHZpY3Q= IDIwMTM= IG1lYXM= dHI= IGZpZWxk V2hlbg== IHNpZ25pZmlj dWdl IGZlYXQ= IGNvbW1vbg== bG9hZA== IGJlZ2lu IGJyaW5n IGFjdGlvbg== ZXJtYW4= IGRlc2NyaWI= IGluZHVzdA== IHdhbnRlZA== cmllZA== bWluZw== IGF0dGVtcHQ= NDU= ZmVy IGR1ZQ== cmVzc2lvbg== IyM= IHNoYWxs IHNpeA== b28= IHN0ZXA= IHB1Yg== IGhpbXNlbGY= IDIz IGNvcA== IGRlc3Q= IHN0b3A= QUM= aWJpbGl0eQ== IGxhYg== aWN1bHQ= IGhvdXJz IGNyZWF0ZQ== IGZ1cnRoZXI= IEFtZXJpY2E= IENpdHk= IGRvdQ== aGVhZA== U1Q= IE5vcnRo Y2luZw== IG5hdGlvbmFs dWxl IEluc3Q= IHRha2luZw== IFF1 aXJ0 IHJlZA== IHJlc2VhcmNo dmlyb24= IEdl IGJyZWFr YW5h IHNwYWNl YXRlcmlhbA== IHJlY2VudA== IEFi IGdlbmVyYWw= IGhpdA== IHBlcmlvZA== IGV2ZXJ5dGhpbmc= aXZlbHk= IHBoeXM= IHNheWluZw== YW5rcw== IGNvdQ== IGN1bHQ= YWNlZA== ZWFs dWF0aW9u IGNvdW4= bHU= IGluY2x1ZGU= IHBvc2l0aW9u IEFmdGVy IENhbmFk IEVt IGltbQ== IFJlZA== IHBpY2s= IGNvbXBs IG1hdHRlcg== cmVn ZXh0 YW5ndQ== aXNj b2xl YXV0 IGNvbXBldA== ZWVk ZmVjdA== IDIx IFNlbg== IFRoZXNl YXNpbmc= IGNhbm5vdA== IGluaXQ= IHJlbGF0aW9ucw== YWNoZWQ= IGJhcg== IDQw IFRI IDIwMTI= IHZvbA== IGdyb3VuZA== IHNlY3VyaXR5 IHVwZA== aWx0 MzU= IGNvbmNlcm4= IEp1c3Q= IHdoaXRl IHNlZW1z IEhlcg== cGVjaWFsbHk= aWVudHM= IGFubm91bg== IGZpZw== aWdodHM= IHN0cmk= bGlrZQ== aWRz IHN1cw== IHdhdGNo IOI= IHdpbmQ= IENvbnQ= IGl0c2VsZg== IG1hc3M= QWw= eWxl aXF1ZQ== IE5hdGlvbmFs IGFicw== IHBhY2s= IG91dHNpZGU= IGFuaW0= IHBhaW4= ZXRlcg== IG1hbmFn ZHVjdA== b2du IF0= IFNlcHQ= c2Vj b2Zm IEphbg== IGZvb3Q= YWRlcw== IHRoaXJk IG1vdA== IGV2aWRlbmNl aW50b24= IHRocmVhdA== YXB0 cGxlcw== Y2xl IGxv IGRlY2w= IGl0ZW0= bWVkaQ== IHJlcHJlc2VudA== b21i YW1lcg== IHNpZ25pZmljYW50 b2dyYXBo c3U= IGNhbA== aXJlcw== MDAwMA== SUQ= QU0= IHNpbXBseQ== IGxvbmdlcg== IGZpbGU= T1Q= Y2hl U28= YXRlZw== b3Jn IEhpcw== IGVuZXI= IGRvbQ== IHVwb24= aWxp Ijoi IHRoZW1zZWx2ZXM= IGNvbWluZw== IHF1aXRl IGRpZmZpY3VsdA== IEJhcg== aWxpdGllcw== cmVs ZW5kcw== Y2lhbA== NjQ= IHdvbWFu cmFw eXI= IG5lY2Vzcw== aXBz IHRleHQ= IHJlcXVpcmU= IG1pbGl0YXJ5 IHJldmlldw== IHJlc3BvbnM= NzU= IHN1YmplY3Q= IGluc3RlYWQ= IGlzc3Vlcw== IGdlbg== Iiwi IG1pbnV0ZXM= IHdlYXA= cmF5 YW1lZA== dGltZQ== Ymw= SG93 IGNvZGU= IFNt IGhpZ2hlcg== IFN0ZQ== cmlz IHBhZ2U= IHN0dWRlbnRz IEludGVybg== IG1ldGhvZA== IEF1Zw== IFBlcg== IEFn IHBvbGljeQ== IFN3 IGV4ZWM= IGFjY2VwdA== dW1l cmlidXQ= IHdvcmRz IGZpbmFs IGNoYW5nZXM= IERlbW9jcg== IGZyaWVuZHM= IHJlc3BlY3Q= IGVw IGNvbXBhbg== aXZpbA== IGRhbWFnZQ== KioqKg== b2dsZQ== dmlyb25tZW50 IG5lZw== ZW50YWw= IGFw IHRvdGFs aXZhbA== ISI= bGlt IG5lZWRz IGFncmU= IGRldmVsb3BtZW50 IGFnZQ== aXBsZQ== MjE= IHJlc3VsdHM= IEFm U2g= IGd1bg== IE9iYW1h cm9sbA== IEA= IHJpZ2h0cw== IEJyaXQ= IHJ1bm5pbmc= IHdhc24= IHBvcnQ= IHJhdGU= IHByZXR0eQ== IHRhcmdldA== IHNhdw== IGNpcmM= IHdvcmtz aWNybw== YWx0 b3Zlcg== d3d3 VGhhdA== bGllcg== IGV2ZXJ5b25l dWRl IHBpZQ== aWRkbGU= cmFlbA== IHJhZA== IGJsb2Nr IHdhbGs= VG8= 44E= bmVz IEF1c3Q= YXVs cm90ZQ== IFNvdXRo ZXNzaW9u b3Bo IHNob3dz IHNpdGU= IGpv IHJpc2s= Y2x1cw== bHQ= IGluag== aWRpbmc= IFNwZQ== IGNoYWxs aXJt IDIy aXR0aW5n c3Ry IGh5 TEU= a2V5 IGJlZ2Fu YXR1cg== YXNoaW5ndG9u bGFt IERhdg== Yml0 IHNpemU= IFBhcg== Mzg= b3VybmFs ZmFjZQ== IGRlY2lzaW9u IGxhcmc= IGp1ZA== cmVjdA== IGNvbnRpbnVl IE9jdA== b3ZlcmVk IEludA== PT09PT09PT0= IHBhcmVudA== IFdpbGw= IGVhc3k= IGRydWc= YW5nZXI= IHNlbnNl IGRp aWRheQ== IGVuZXJneQ== aXN0aWM= IGFzc29jaQ== YXJ0ZXI= b2JhbA== ZWtz IEVs dXJjaA== IGdpcmw= b2U= aXRsZQ== IDI4 IENoZQ== IHJlcXVlc3Q= IHNvb24= IGhvc3Q= a3k= IHN0YXRlcw== b21lcw== IG1hdGVyaWFs bGV4 IG1vbWVudA== IGFuc3c= b25zZQ== IGVzcGVjaWFsbHk= IG5vcm0= IHNlcnZpY2Vz cGl0ZQ== cmFu IHJvbGU= NDQ= KTo= IGNyZWQ= Q2w= X19fX19fX18= IG1hdA== IGxvZw== IENsaW50b24= T1U= IG9mZmljZQ== IDI2 IGNoYXJn IHRyYWNr bWE= IGhlYXJ0 IGJhbGw= IHBlcnNvbmFs IGJ1aWxkaW5n bmE= c2V0 Ym9keQ== IEJsYWNr IGluY3JlYXNl aXR0ZW4= IG5lZWRlZA== MzY= MzI= PSI= IGxvc3Q= IGJlY2FtZQ== IGdyb3Vwcw== IE11cw== IHdyb3Rl IFBl IHByb3A= am95 w6k= IFdoaXRl IGRlYWQ= Lic= IGh0dHA= IHdlYnM= T1M= IGluc2lkZQ== IHdyb25n IHN0YXRlbWVudA== IC4uLg== eWw= IGZpbG0= IG11c2lj IHNoYXJl aWZpY2F0aW9u IHJlbGVhc2U= IGZvcndhcmQ= IHN0YXk= IGNvbXB1dA== aXR0ZQ== c2Vy IG9yaWdpbmFs IGNhcmQ= IGNhbmQ= IGRpdg== YXR1cmFs IGZhdm9y T00= IGNhc2Vz dXNlcw== IHNlY3Rpb24= IGxlYXZl Z2luZw== b3ZlZA== IFdhc2hpbmd0b24= Mzk= IEds IHJlcXVpcmVk YWN0aW9u YXBhbg== b29y aXRlcg== IEtpbmc= IGNvdW50cmllcw== IEdlcm1hbg== bGxpbmc= IDI3 MzQ= IHF1ZXN0aW9ucw== IHByaW0= IGNlbGw= IHNob290 IGFueW9uZQ== IFdlc3Q= IGFmZmVjdA== ZXBlbmQ= IG9ubGluZQ== IElzcmFlbA== IFNlcHRlbWJlcg== IGFiaWxpdHk= IGNvbnRlbnQ= aXNlcw== IHJldmU= IGxhdW4= IGluZGlj IGZvcmNl Y2FzdA== IHNvbGQ= YXZpbmc= Zmw= IHNvZnQ= IGNvbXBhbmllcw== Y2VlZA== IGFydGljbGU= IGF1ZA== IHJldg== IGVkdWM= IHBsYXlpbmc= MDU= IGhlbGQ= Y3Rvcg== IHJlbGVhc2Vk IGZlZGVyYWw= Mzc= IGFkbWluaXN0 IGludGVydmlldw== IGluc3RhbGw= IHJlY2VpdmVk IHNvdXJjZQ== dWs= UGg= IHNlcmlvdXM= IGNyZWF0ZWQ= IGNhdXNl IGltbWVkaQ== IGRlZmlu dWVs IERlcGFydG1lbnQ= Y3Rpb25z IENvdXI= IE5vdw== emU= aXRlcw== aXR1dGlvbg== IGxhdGU= IHNwZWFr bmVycw== IGxlZ2Fs YXJp IENvcg== IHdlZWtz IG1vZGVs IHByZWQ= IGV4YWN0 QkM= IEJ5 SU5H b3Npbmc= IHRha2Vz IHJlZ2FyZA== IG9wcG9ydHVu IHByaWNl IDE5OA== IEFwcg== ZnVsbHk= IG9yZA== IHByb2JsZW1z cnVjdGlvbg== aGFt IENvdW50 bGVnZQ== IGxlYWRlcnM= RVQ= bGV2 IGRlZXA= b2xvZ2ljYWw= ZXNl aGFwcw== IFNvbWU= IHBlcnM= IGNvbnRyYWN0 IHJlbGF0aW9uc2hpcA== c3A= b3Vk IGJhc2U= NDg= bWl0 QWQ= YW5jaWFs IGNvbnN1bQ== IHBvdGVudGlhbA== IGxhbmd1 cmVt ZXRo IHJlbGln cmVzc2Vk NjY= IGxpbms= IGxvd2Vy YXllcg== IEp1bmU= IGZlbQ== dW50 ZXJj dXJk IGNvbnRhY3Q= IGlsbA== IG1vdGhlcg== IGVzdGFi aHR0 IE1hcmNo IEJybw== IENoaW5h IDI5 IHNxdQ== IHByb3ZpZGVk IGF2ZXJhZ2U= YXNvbnM= IDIwMTE= IGV4YW0= bGlu NTU= bmVk IHBlcmZlY3Q= IHRvdQ== YWxzZQ== dXg= IGJ1eQ== IHNob3Q= IGNvbGxlY3Q= IHBob3Q= IHBsYXllZA== IHN1cnBy IG9mZmljaWFscw== IHNpbXBsZQ== YXZ5 IGluZHVzdHJ5 IGhhbmRz Z3JvdW5k IHB1bGw= IHJvdW5k IHVzZXI= IHJhbmdl dWFyeQ== IHByaXZhdGU= b3Bz ZWVz IHdheXM= IE1pY2g= IHZlaA== IGV4Y2VwdA== IHRlcm1z aW11bQ== cHBlcg== SU9O b3Jlcw== IERyYWdvbg== b3Vs IGRlbg== IHBlcmZvcm1hbmNl IGJpbGw= Y2ls NDc= IGVudmlyb25tZW50 IGV4Yw== YWRk IHdvcnRo IHBpY3Q= IGNoYW5jZQ== IDIwMTg= Ym9y IHNwZWVk aWN0aW9u IGFsbGVn IEphcGFu YXRvcnk= cmVldA== IG1hdGNo IElJ IHN0cnU= b3JkZXI= IHN0ZQ== IGxpdmluZw== IHN0cnVjdA== aW5v IHNlcGFy aGVybg== IHJlc3BvbnNl IGVuam95 IHZpYQ== QUQ= dW1lbnRz YWNlYm9vaw== IG1lbWJlcg== aWJy aXppbmc= IHRvb2w= IE1vbg== IFdoaWxl aG9vZA== IEFuZw== IERlZg== IG9mZmVy VHI= YXVy IHR1cm5lZA== IEp1bHk= ZG93bg== YW5jZWQ= IHJlY2VudGx5 IEVhcg== IGNl IFN0YXI= IENvbmc= cm91Z2h0 IGJsb29k IGhvcGU= IGNvbW1lbnQ= YWludA== IGFycmk= aWxlcw== IHBhcnRpY2lw b3VnaHQ= cmlwdGlvbg== MDg= NDk= IGdhdmU= IHNlbGVjdA== IGtpbGxlZA== c3ljaA== IGdvZXM= aWo= IGNvbGw= IGltcGFjdA== YXRpdmVz IFNlcg== MDk= IEF1Z3VzdA== IGJveQ== ZGU= IERlcw== IGZlbHQ= VVM= IGV4cGVjdGVk IGltYWdl IE1hcms= Y2NvcmRpbmc= b2ljZQ== RUM= IE1hZw== ZW5lZA== aG9sZA== IFBvc3Q= IHByZXZlbnQ= Tm8= IGludm9sdmVk IGV5ZXM= IHF1aWNrbHk= QXQ= dW5r IGJlaGF2 IHVy IGxlZA== Y29tZQ== ZXk= IGNhbmRpZA== IGVhcmxpZXI= IGZvY3Vz ZXR5 UHJv bGVkZ2U= aXhlZA== aWxsZWQ= IHBvcHVsYXI= QVA= IHNldHQ= bGlnaHQ= IHZhcmlvdXM= aW5rcw== IGxldmVscw== IHJvYWQ= ZWxsaWc= YWJsZXM= aGVs aXR0ZWU= IEdlbmVy eXBl IGhlYXJk aWNsZXM= IG1pcw== IHVzZXJz IFNhbg== IGltcHJvdmU= IGZhdGhlcg== IHNlYXJjaA== VGhleQ== dmls IHByb2Zlc3M= IGtuZXc= IGxvc3M= IGV2ZW50cw== NjU= IGJpbGxpb24= MDc= MDI= IE5ld3M= IEFN IGNvdmVy d2hlcmU= ZW5zaW9u IGJvdHQ= IGFyZWFz ZW5jZXM= b3Bl IFR3aXR0ZXI= YWVs IGdldHM= IEdvb2dsZQ== IHNu aWFudA== IHZvdGU= IG5lYXJseQ== IGluY2x1ZGVk IHJlY29nbg== eno= bW0= YWxlZA== IGhhcHBlbmVk MDQ= IGhvdA== IHdob3Nl IGNpdmls IHN1ZmY= b2Vz aXRpeg== IFN5cmk= IHJlc3BvbmQ= IGhvbg== IGZlYXR1cmVz IGVjb25vbWlj IEFwcmls cmlt IHRlY2hub2xvZ3k= IG9wdGlvbg== YWdpbmc= IHB1cmNo UmU= IGxhdA== Y2hpZQ== aXNs IHJlY29tbQ== dWY= IHRyYWluaW5n IGVmZmVjdHM= IGZhc3Q= IDIwMTA= IG9jY3Vy IHdlYnNpdGU= IGVtYWls IHNlbnM= ZWNo IG9pbA== IGluZmx1 IGN1cnJlbnRseQ== IFNjaA== IEFkZA== IGdvYWw= IHNjaWVudA== IGNvbnY= MTAw ZW15 IGRlY2lkZWQ= IHRyYXZlbA== IG1lbnRpb24= TEw= MDM= IGVsZWN0aW9u IHBob25l IGxvb2tz IHNpdHVhdGlvbg== IGN5 IGhvcg== YmVk IENvdXJ0 YWlseQ== YXZlcw== IHF1YWxpdHk= IENvbXA= d2lzZQ== IHRhYmxl IHN0YWZm IFdpbmQ= ZXR0 IHRyaWVk aWRlcmVk IGFkZGl0aW9u IGJveA== IGxhY2s= YXJpbHk= IHdpZGU= IG1pZA== IGJvYXJk eXNpcw== IGFudGk= aGE= IGRpZw== ZW5pbmc= IGRybw== Q29u Njg= IHNsb3c= YmFzZWQ= c2VxdQ== IHBhdGg= RXg= YWtlcg== IHdvcmtlZA== IHBlbg== IGVuZ2luZQ== IGxvb2tlZA== IFN1cGVy IFNlcnY= IHZpY3RpbQ== VW4= IHByb3BlcnR5 IGludHJvZHU= IGV4ZWN1dA== IFBN TGU= IGNvbG9y IE1vcmU= IDYw IG5ldHdvcms= IGRhdGU= Y3Vs aWRnZQ== IGV4dHJh MzE= IHNsZQ== Njc= IHdvbmQ= IHJlcG9ydHM= anVzdA== IEF1c3RyYWw= IGNhcGl0YWw= IGVucw== IGNvbW1hbmQ= IGFsbG93ZWQ= IHByZXA= IGNhcHQ= aGli IG51bWJlcnM= Y2hhbg== IGZhaXI= bXA= b21z IHJlYWNo V2l0aA== dGFpbg== IGJyb2Fk IGNvdXBsZQ== ZWNhdXNl bHlpbmc= IEZlYg== IHNjcmVlbg== IGxpdmVz IHByaW9y IENvbmdyZXNz QXI= IGFwcHJvYWNo IGVtZXI= YXJpZXM= IERpcw== c2Vydg== IE5l IGJ1aWx0 Y2llcw== IHJlcGU= IHJ1bGVz Zm9yY2U= IFBhbA== IGZpbmFuY2lhbA== IGNvbnNpZGVyZWQ= IENoYXI= bmNlcw== IElT IGJyb3VnaHQ= IGJp aWVycw== IFNpbQ== T1A= IHByb2R1Y3Rz IHZpc2l0 IGRvY3VtZW50 IGNvbmR1Y3Q= IGNvbXBsZXRlbHk= aW5pbmc= IENhbGlm aWJseQ== IHdyaXR0ZW4= IFRW ZW1lbnRz IGRyYXc= T25l IHB1Ymxpc2hlZA== IHNlY3JldA== cmFpbg== aGV0 IEZhY2Vib29r b25kYXk= IFVw IHNleHVhbA== IHRob3Vz IFBhdA== IGVzcw== IHN0YW5kYXJk IGFybQ== Z2Vz ZWN0aW9u IGZlbGw= IGZvcmVpZ24= YW5p IEZyaWRheQ== IHJlZ3VsYXI= aW5hcnk= IGluY3JlYXNlZA== IHVzdWFsbHk= IGRlbW9u IGRhcms= IGFkZGl0aW9uYWw= cm9s IE9m IHByb2R1Y3Rpb24= ISE= dW5kcmVk IGludGVybmF0aW9uYWw= aWRlbnRz IEZyZWU= cm91cA== IHJhY2U= IG1hY2g= IGh1Z2U= QWxs bGVhcg== b3ZlbWJlcg== IHRvd24= IGF0dGVudGlvbg== IE9mZg== eW9uZA== IFRoZW4= ZmllbGQ= IHRlcnJvcg== cmF6 IEJv IG1lZXRpbmc= IFBhcms= IGFycmVzdA== IGZlYXI= IGF3 IFZhbA== b3Jpbmc= Jyw= IGV4dHJlbWU= YXJy IHdvcmtlcnM= QWZ0ZXI= IDMx bmV0 YW1lbnQ= IGRpcmVjdGx5 IHBvcHVsYXRpb24= dWJl IE9jdG9iZXI= IElO IEphbnVhcnk= NTk= IERhdmlk IGNyb3Nz Y2VtYmVy IEZpcnN0 IG1lc3NhZ2U= aXJpdA== IG5hdGlvbg== IHBvbGw= aXNpb25z IGFuc3dlcg== bnk= aXNvZGU= IGNhcnJ5 IFJ1c3NpYQ== IGhlYXI= ZW5ndGg= cm95 IG5hdHVyYWw= aW5hbGx5 IGRvZw== bWl0dGVk IHRyYWRl IHN1YnN0 IG11bHRpcGxl IEFmcmlj IGZhbnM= IHNvcnQ= IGdsb2JhbA== aWNhdGlvbg== IFdlZA== YXJh IGFjaGll IGxhbmd1YWdl dmV5 IHRhbA== IG5lY2Vzc2FyeQ== IGRldGFpbHM= IHNlbg== IFN1bmQ= IFJlZw== IFJlYw== MDY= IHNpbA== cmVzc2l2ZQ== IG1lZGljYWw= dW5jaA== b3JuaWE= IHVuZA== Zm9ydA== b2Nrcw== IE1vbmRheQ== dWVzZGF5 Y3JhZnQ= Nzc= dXJ0 IHZlcg== IEhpbGw= IHJlY2VpdmU= IG1vcm5pbmc= ZXN0ZXJu IGJhbms= IHNhdA== aXJ0aA== IEhpZ2g= IGRldmljZQ== IFRIRQ== IENlbnRlcg== IHNhZmU= IHBsZQ== IENhbmFkYQ== IHN5c3RlbXM= IGFzc2lzdA== IHN1cnY= IGJhdHRsZQ== IFNvYw== dmVydGlz U2hl IHBhcGVy IGdyb3d0aA== IGNhc3Q= U2M= IHBsYW5z bGxlZA== IHBhcnRz IHdhbGw= IG1vdmVtZW50 IHByYWN0aWNl aW1hdGVseQ== IGRpc3BsYXk= IHNvbWV0aW1lcw== b21w IFBhdWw= IFllcw== a2luZw== NTg= b2x5 IHNvbg== IGF2b2lk b2tlcw== IEpldw== IHRvd2FyZHM= YXNj IC8v IEtvcmU= IHRhbGtpbmc= IGNvcnJlY3Q= IHNwZW50 aWNrcw== aWFibGU= ZWFyZWQ= IHRlcm0= IHdhbnRz b21pbmc= IHV0 IGRvdWI= IGZvcmNlcw== IHBsZWFzZQ== Njk= IE5vdmVtYmVy YXRmb3Jt b25kb24= IG9uZXM= IGltbWVkaWF0ZWx5 IFJ1c3NpYW4= IE1ldA== IGRlZw== IHBhcmVudHM= Q0g= IEFtZXJpY2Fucw== YWx5 IE1vZA== IHNob3du IGNvbmRpdGlvbnM= IHN0dWZm IHJlYg== IFlvdXI= IGluY2x1ZGVz bm93bg== IFNhbQ== IGV4cGVyaWVu bWlzc2lvbg== IEV2ZW4= YXVnaHQ= IGFubm91bmNlZA== IFJlcHVibGljYW4= IGRldGVybWlu IGRlc2NyaWJlZA== IENvdW50eQ== KCk= IGRvb3I= IGNoYW5nZWQ= IG5laWdo IEhlcmU= IGNsZWFu IHBhbg== IERlY2VtYmVy IEV1cm9wZWFu aXJpbmc= YXB0ZXI= IGNsdWI= IFR1ZXNkYXk= IHBhaWQ= IE5ldA== IGF0dGFja3M= IGNoYXJhY3RlcnM= IGFsb25l IGRpcmVjdG9y ZG9t IDM1 IGxvYWQ= IHJvdXQ= IENhbGlmb3JuaWE= IGZpbmFsbHk= IHJhYw== IGNvbnRy IGV4YWN0bHk= cmVzaA== cHJp IElzbGFt IG5hdHVyZQ== IGNhcmVlcg== IGxhdGVzdA== IGNvbnZlcnM= IFNs cG9zZQ== Y2llbnQ= IEluYw== aXZpdHk= ODg= IEF0dA== IE1vcg== bmVzZGF5 IHdlaWdodA== a2Vu IG5vdGU= IHRlYW1z IFw= YWlycw== IEdyZWVu IGh1bmRyZWQ= b25lbnQ= IHN0cmVuZw== IGNvbnNpc3Q= aWNhdGVk IHJlZ3Vs IGxpYw== YXN0aWM= IHRlbg== dXJzZGF5 ZWxsaWdlbmNl b3VzbHk= IFVL Qkk= IGNvc3Rz IGluZGVwZW5k IEFQ IG5vcm1hbA== IGhvbQ== IG9idmlvdXM= IHN3ZQ== IHN0YXI= IHJlYWR5 YWNoZXI= IGltcGxlbWVudA== Z2VzdA== IHNvbmc= IEdldA== IExhYg== IGludGVyZXN0aW5n dXNpbmc= IGdpdmluZw== IFN1bmRheQ== IGV0Yw== IG1pZGRsZQ== IHJlbWVtYmVy cmlnaHQ= b3NpdGlvbg== dXRpb25z IG1heA== NDY= IHlvdXJzZWxm IGRlbWFuZA== IHRyZWF0bWVudA== IGRhbmdlcg== IENvbnM= IGd1eQ== IEJyaXRpc2g= IHBoeXNpY2Fs IHJlbGF0ZWQ= IHJlbWFpbg== IGNvdWxkbg== IHJlZmVy IGNpdGl6 Ym94 RU5U Ym9hcmQ= IGlubg== SUc= ZXJv IFN0cmVldA== b3NwaXRhbA== cmVuY2g= Y2hlcnM= IHN0cmE= T0w= YWdlcg== IEFO IGVhc2lseQ== SUE= ZW5nZQ== aW55 IGNsb3M= b2NrZWQ= IHVzZXM= IENvdW4= SW0= dWlsZA== Pz8= bW9yZQ== IGFuZw== IHdyaXRl b2x1dGU= NTc= IGxlYWRlcg== IHJlYWRpbmc= PC8= IGF1dG9t ZXN0cw== NDM= IGxlZ2lzbA== IEdvbGQ= IGRlc2lnbmVk IFNU IExlZw== YXJlcw== IGJlYXV0 IFRleA== IGFwcGVhcnM= IHN0cnVnZw== IFJvbQ== IDAw IGNob2ljZQ== IHBhcnRpY3VsYXJseQ== IEZyb20= b3Blcg== IExvbmRvbg== YW5uZWQ= IGFsbG93cw== b2JpbGU= IGRpZmZlcmVuY2U= 4oCi IFZpZXc= IFdlZG5lc2RheQ== IGFsdGhvdWdo IHJlbGF0aXZl IGFwcGxpY2F0aW9u YXRldmVy IGFyZW4= IG15c2VsZg== IGltYWc= IGRpc2U= IHNvY2lldHk= IGZyZXF1 IEVuZ2xpc2g= IHBvb3I= IERheQ== IHdyaXRpbmc= IHNldmVu IHN0YXJ0aW5n IGJ1ZA== IHByaW50 IFRyYW5z dWZhY3Q= IFN0dWQ= bmV3 IGNyaW0= IGdpdmVz IGNvb2w= YWU= aWFuY2U= IEdlbmVyYWw= IHRoaW5raW5n IHNhdmU= IGxpbWl0ZWQ= IFBhcnR5 IG1lYW5pbmc= cGVu b3dlcnM= IEphY2s= RU0= IG5pY2U= cnVwdA== IGdhcw== IGVpZ2h0 IGZlZXQ= IGVmZm9ydA== IGlnbg== aWNpdA== Qmw= Y29pbg== IG9waW4= IGJyYWlu V2hpbGU= aGVzdA== IFRodXJzZGF5 IHdvdWxkbg== YXVnaHRlcg== IHRvdWNo bGVtZW50cw== IHN0dWRpZXM= IGNlbnRlcg== Y29udA== b3JnZQ== IGNvbXB1dGVy IGludmVzdGlnYXRpb24= UGw= b3Jrcw== IDIwMDg= IGluY3JlYXNpbmc= IHN0b3Jl IGNvbW1lbnRz IGJhbA== bWVu IGRvbGw= IGxpYmVy IHdpZmU= IGxhd3M= YXR1cmRheQ== aXRuZXNz IG1vZGVybg== IFNr IGFkbWluaXN0cmF0aW9u IG9wcG9ydHVuaXR5 IHNhbA== IHBvd2VyZnVs TXk= IGNsYWltcw== IEVhcnRo b3Jkcw== IHRpdGxl IGVzYw== bmFtZQ== Tm90 b21lbg== IGJleW9uZA== IGNhbWVy IHNlbGw= aXR1dGU= ZWFyY2g= IGFwcGw= aW1lbnQ= NDI= IEFydA== IHVuZg== IHZpb2xlbmNl dXJn IEVhc3Q= IGNvbXBhcmVk IG9wdGlvbnM= IHRocm91Z2hvdXQ= IHZz aWdy Lls= YWNoZXM= Nzg= IGZpbGVz Rkw= RUw= YXJpYW4= IEphbWVz IEFpcg== YW5jaA== IGRldGFpbA== IHBpZWNl UFM= IG5hbWVk IGVkdWNhdGlvbg== IGRyaXZl IGl0ZW1z IHN0dWRlbnQ= aWNlZA== Ojo= aWNv IHRocm93 IHNjZW5l IGNvbXBsZXg= IDIwMDk= IHByZWM= IEJyZQ== Nzk= IGNvbmNlcHQ= IHN0YXR1cw== YW1pbmc= IGRpZWQ= IGtub3dsZWRnZQ== IGJlZ2lubmluZw== T0Q= cnVhcnk= IGNlcnRhaW5seQ== IGd1eXM= IHNsaWdodA== aW5u b3VuZHM= IGZpbmU= IGZhdA== aWNhdGlvbnM= IHBlcmhhcHM= IEFudA== IGluY29tZQ== IGh0dHBz IG1ham9yaXR5 cG9ydHM= c3Rvbg== IGdyZWF0ZXI= IGZlZWQ= ZW50aWFsbHk= IHNhZmV0eQ== IHVuaXF1ZQ== YW5kb20= IGdvbmU= IHNob3dlZA== IGhpc3Rvcg== IGNvdW50ZXI= aXVz aWRh IGxlYWRpbmc= aXBl IHNlbmQ= IERvbmFsZA== ZXJ2ZQ== IGRlZmVuc2U= aW5lc2U= IHllcw== IEZpcmU= IE11c2xpbQ== cmFx IGNvbnRpbnVlZA== b3No IHByb3ZpZGVz IHByaXNvbg== IFByZQ== IGhhcHB5 IGVjb25vbXk= IHRydXN0 YWdz IEdhbWU= IHdlYXBvbnM= dW1hbg== IENsZQ== aXRhdGlvbg== IGFuYWx5c2lz IFRpbWVz IHNjaWVuY2U= LT4= IGZpZ3VyZQ== IGRpc2FwcA== ZW50eQ== IHNvZnR3YXJl IHVsdA== IG9mZmljZXJz TmV3 SXM= IHJlbWFpbnM= IEluZGlh IHBzeWNo cmllZg== IGNhdA== ZXNj IG9ic2Vydg== IHN0YWdl IERhcms= IGVudGVy Y2hhbmdl IHBhc3NlZA== IGRlc3BpdGU= IE91dA== IG1vdmll cnM= IHZvaWNl bWluZQ== IFBsYXk= IHRvd2FyZA== IFRlcg== IHJlZ2lvbg== IHZhbHVlcw== b3J0ZXJz IG1vdW50 IG9mZmljZXI= IE90aGVy YmFu IGhvdXM= d29vZA== cm9vbQ== SVY= IFN1bg== c2Vl IE92ZXI= cm9n OTA= IGxheQ== IFR1cg== YXdu IHByZXNzdXJl IFN1Yg== IGJvb2tz ZWRvbQ== IFNhbmQ= QUE= YWdv IHJlYXNvbnM= Zm9yZA== IGFjdGl2aXR5 VVQ= Tm93 IFNlbmF0ZQ== Y2VsbA== bmlnaHQ= IGNhbGxz aW50ZXI= IGxldHRlcg== IFJvYg== IEpl IGNob29zZQ== IExhdw== R2V0 QmU= IHJvYg== IHR5cGVz IHBsYXRmb3Jt IHF1YXJ0ZXI= UkE= IFRpbWU= IG1heWJl IENy OTU= cHJl IG1vdmluZw== IGxpZg== IGdvbGQ= IHNvbQ== IHBhdGllbnRz IHRydXRo IEtl dXJhbmNl YW50bHk= bWFy IGNoYXJnZQ== IEdyZWF0 IGNlbGU= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHJvY2s= cm9pZA== YW5jeQ== IGNyZWRpdA== YXVk Qnk= IEV2ZXJ5 IG1vdmVk aW5nZXI= cmlidXRpb24= IG5hbWVz IHN0cmFpZ2h0 IEhlYWx0aA== IFdlbGw= IGZlYXR1cmU= IHJ1bGU= IHNjaGU= aW5hdGVk IE1pY2hhZWw= YmVyZw== NDE= aWxlZA== YmFuZA== IGNsaWNr IEFuZ2Vs b25lbnRz wq0= IElyYXE= IFNhdHVyZGF5 IGF3YXJl cGFydA== IHBhdHRlcm4= T1c= IExldA== IGdyYWQ= aWduZWQ= IGFzc29jaWF0ZWQ= IHN0eWxl bm8= aWF0aW9u YWl0aA== aWxpZXM= IHN0b3JpZXM= dXJhdGlvbg== IGluZGl2aWR1YWxz IOKApg== bWlzcw== IEFzc29jaQ== aXNoaW5n YWJ5 IHN1bW1lcg== IEJlbg== IDMy IGFyY2g= dXR5 IFRleGFz aG9s IGZ1bGx5 IG1pbGw= IGZvbGxvd2Vk IEJpbGw= IEluZGlhbg== IFNlY3JldA== IEJlbA== IEZlYnJ1YXJ5 IGpvYnM= IHNlZW1lZA== IEdvdmVybg== aXBwZWQ= IHJlYWxpdHk= IGxpbmVz IHBhcms= IG1lYXN1cmU= IE91cg== SU0= IGJyb3RoZXI= IGdyb3dpbmc= IGJhbg== IGVzdGlt IGNyeQ== IFNjaG9vbA== IG1lY2hhbg== IE9G IFdpbmRvd3M= IHJhdGVz IE9o IHBvc2l0aXZl IGN1bHR1cmU= aXN0aWNz aWNh IGhhcg== eWE= aXRlbHk= aXBw IG1hcA== ZW5jaWVz IFdpbGxpYW0= SUk= YWtlcnM= NTY= IE1hcnQ= IFJlbQ== IGFsdGVybg== aXR1ZGU= IGNvYWNo cm93ZA== RG9u IGtpZHM= IGpvdXJuYWw= IGNvcnBvcg== IGZhbHNl IHdlYg== IHNsZWVw IGNvbnRhaW4= IHN0bw== IGJlZA== aXZlcnNl IFJpY2g= IENoaW5lc2U= IHB1bg== IG1lYW50 a25vd24= IG5vdGljZQ== IGZhdm9yaXRl YXZlbg== IGNvbmRpdGlvbg== IHB1cnBvc2U= KSk= IG9yZ2FuaXphdGlvbg== IGNoYWxsZW5n IG1hbnVmYWN0 IHN1c3A= IEFj IGNyaXRpYw== dW5lcw== dWNsZWFy IG1lcg== dmVudGlvbg== IDgw IG1pc3Q= IFVz IFRvcg== aHR0cA== b2xm IGxhcmdlcg== IGFkdmFudA== IHJlc2Vhcg== IGFjdGlvbnM= bWw= IGtlcHQ= IGFpbQ== LCc= Y29s IGJlbmVmaXRz aWZ5aW5n IGFjdHVhbA== IEludGVybmF0aW9uYWw= IHZlaGljbGU= IGNoaWVm IGVmZm9ydHM= IExlYWd1ZQ== IE1vc3Q= IHdhaXQ= IGFkdWx0 IG92ZXJhbGw= IHNwZWVjaA== IGhpZ2hseQ== IGZlbWFsZQ== IGVycm9y IGVmZmVjdGl2ZQ== NTQ= IGVuY291cg== d2VsbA== IGZhaWxlZA== IGNvbnNlcnY= IHByb2dyYW1z IHRyb3U= IGFoZWFk NTAw dmVydGlzZW1lbnQ= SVA= IEZvdW5k cGly ICU= IGNyaW1l YW5kZXI= IGxvY2F0aW9u IElyYW4= IGJlaGF2aW9y YXppbmc= IHJhcmU= IGVtYg== IGNhdXNlZA== IHNoaXA= IGFjdGl2ZQ== IGNvbnRyaWJ1dA== IGdyZWVu IGFjcXU= IHJlZmxlY3Q= dmVudWU= IGZpcm0= IGJpcnRo XS4= IGNsZWFybHk= IGVtb3Q= IGFnZW5jeQ== cmlhZ2U= IG1lbW9yeQ== OTg= U0E= IFNlZQ== YWNpbmc= Q0M= IGJpZ2dlc3Q= IHJhcA== IGJhc2lj IGJhbmQ= ZWF0 IHN1c3BlY3Q= IE1hYw== IDkw bWFyaw== aXN0YW4= IHNwcmVhZA== YW1z a2k= YXN5 cmF2 IFJvYmVy IGRlbW9uc3Ry cmF0ZWQ= IGFic29sdXRl IHBsYWNlcw== IGltcGw= aWJyYXJ5 IGNhcmRz IGRlc3Ryb3k= IHZpcnQ= dmVyZQ== IGFwcGVhcmVk eWFu cG9pbnQ= IGJlZw== IHRlbXBlcg== c3Bl YW50ZWQ= ZWFycw== IERpcmVjdA== IGxlbmd0aA== IGJsb2c= YW1i IGludGVn IHJlc291cmNlcw== YWNj aWZ1bA== IHNwb3Q= IGZvcmNlZA== IHRob3VzYW5kcw== IE1pbmlzdGVy IHF1YWw= IEZyZW5jaA== YXRpY2FsbHk= IGdlbmVyYWxseQ== IGRyaW5r IHRodXM= SUw= b2Rlcw== IGFwcHJvcHJp IFJlYWQ= IHdob20= IGV5ZQ== IGNvbGxlZ2U= IDQ1 aXJlY3Rpb24= IGVuc3VyZQ== IGFwcGFyZW50 aWRlcnM= IHJlbGlnaW91cw== IG1pbm9y b2xpYw== IHRybw== IFdoeQ== cmlidXRl bWV0 IHByaW1hcnk= IGRldmVsb3BlZA== IHBlYWNl IHNraW4= c3Rl YXZh IGJsdWU= IGZhbWlsaWVz IGly IGFwcGx5 IGluZm9ybQ== IFNtaXRo Q1Q= aWk= IGxpbWl0 IHJlc2lzdA== Li4uLi4uLi4uLi4uLi4uLg== dW1u IGNvbmZsaWM= IHR3ZQ== dWRk IFRvbQ== IGxpdGVy cXVl Ym9u IGhhaXI= IGV2ZW50dWFsbHk= IHB1cw== IGhlbHBlZA== IGFnZw== b3JuZXk= IEFwcGxl IGZpdA== IFN1cg== IHByZW0= IHNhbGVz IHNlY29uZHM= IHN0cmVuZ3Ro IGZlZWxpbmc= v70= IHRvdXI= IGtub3dz b29t IGV4ZXJj IHNvbWV3 77+9 Pj4= IHNwb2tlcw== IGlkZWFz IHJlZ2lzdA== c29mdA== IERlbA== IFBD IHByb3Bvcw== IGxhdW5jaA== IGJvdHRvbQ== VEg= IFBsZWFzZQ== dmVzdA== aXR6 IEludGVy IHNjcmlwdA== IHJhdA== YXJuaW5n IGls IEplcg== IEFyZQ== IHdoYXRldmVy b2tlbg== Y2llbmNl IG1vZGU= IGFncmVl IHNvdXJjZXM= IGluaXRpYWw= IHJlc3RyaWN0 IHdvbmRlcg== dXNpb24= IyMjIw== IFNpbA== dmlsbGU= IGJ1cm4= dHc= YXNpb24= IMKj IG5vcg== dWluZw== IHJlYWNoZWQ= IHN1bg== IGNhdGVn aWdyYXRpb24= IGNvb2s= IHByb21vdA== IG1hbGU= IGNsaW1hdGU= IGZpeA== IGFsbGVnZWQ= VVI= YWxsZWQ= IGltYWdlcw== Q29udA== b3Rh IHNjaG9vbHM= aW9z IGRyb3A= IHN0cmVhbQ== IE1v IHByZXZpb3VzbHk= YWxpbmc= IHBldA== IGRvdWJsZQ== IChA YW5uZWw= IGRlZmF1bHQ= dGllcw== IHJhbms= IERlYw== IENvdW5jaWw= IHdlYXBvbg== IHN0b2Nr IGFuYWx5 IFN0cg== IHBpY3R1cmU= IFBvbGljZQ== ZmVyZW5jZQ== IGNlbnR1cnk= IGNpdGl6ZW5z IG9udG8= IGV4cGFuZA== IGhlcm8= IFNvbA== IHdpbGQ= IHVwZGF0ZQ== IGN1c3RvbWVycw== cm9udA== ZGVm IGxpaw== IGNyaW1pbmFs IENocmlzdGlhbg== U1A= NzY= IGxlYXZpbmc= IG90aGVyd2lzZQ== IERpc3Q= IGJhc2lz NTI= NTM= aWNpcA== IEJlcg== IHJlY29tbWVuZA== IGZsb29y IGNyb3dk b2xlcw== IDcw IGNlbnRyYWw= IEV2 IGRyZWFt IGRvd25sb2Fk IGNvbmZpcg== IFRob20= IHdpbmRvdw== IGhhcHBlbnM= IHVuaXQ= IHRlbmQ= IHNwbA== IGJlY29tZXM= IGZpZ2h0aW5n IHByZWRpY3Q= IFByZXNz IFBvd2Vy IGhlYXZ5 YWtlZA== IGZhbg== b3J0ZXI= YXRlZ3k= QkE= aXplcw== IHNwZW5k SGVyZQ== IDIwMDc= IGFkb3A= IEhhbQ== IGZvb3RiYWxs IFBvcnQ= b2RheQ== NTE= YW1waW9ucw== IHRyYW5zZmVy aHQ= IDM4 dGVybQ== YWNpdHk= IGJ1cg== XSw= dGVybmFs cmln YnV0 IHRoZXJlZm9yZQ== IEJlY2F1c2U= cmVzcA== cmV5 IG1pc3Npb24= U29tZQ== IG5vdGVk IGFzc3Vt IGRpc2Vhc2U= IGVkaXQ= IHByb2dyZXNz cmQ= IEJyb3du b2NhbA== IGFkZGluZw== IHJhaXNlZA== IEFueQ== IHRpY2s= IHNlZWluZw== IFBlb3BsZQ== IGFncmVlbWVudA== IHNlcnZlcg== IHdhdA== IGRlYmF0ZQ== IHN1cHBvc2Vk aWxpbmc= IGxhcmdlc3Q= IHN1Y2Nlc3NmdWw= IFByaQ== IERlbW9jcmF0aWM= IGp1bXA= IFN5cmlh IG93bmVycw== IG9mZmVycw== IHNob290aW5n IGVmZmlj c2V5 IGhhdmVu dmVyc2U= dGVyZWQ= IExpZ2h0 aW1hbA== IEJpZw== IGRlZmVuZA== IGJlYXQ= IHJlY29yZHM= JSk= IHNjZW4= IGVtcGxveWVlcw== IGRldmljZXM= aGVt IGNvbW1lcg== IE1leA== IGJlbmVmaXQ= IFByb2Y= IGlsbGVn IHN1cmZhY2U= IEFsc28= IGhhcm0= aW5nbHk= d2lkZQ== IEFsZXg= IHNodXQ= IEN1cg== IGxvc2U= cG0= IGNoYWxsZW5nZQ== c2VtYg== IHN0YXRpb24= IGludGVsbGlnZW5jZQ== IGFjY3Vy IEZsb3I= IHJlcXVpcmVz IE1hbA== YnVt IGhvc3BpdGFs IHNwaXJpdA== IG9mZmVyZWQ= IHByb2R1Y2U= IENvbW11bg== IGNyZWF0aW5n IGNyaXM= c3BlY3Q= IGVuZGVk IGRhaWx5 IHZvdGVycw== bGFuZHM= aWFz aWg= b25h IHNtYXJ0 IE9mZmljZQ== IExvcmQ= cmlhbA== IEludGVybmV0 IGNpcmN1bQ== IGV4dHJlbWVseQ== Jy4= IG9waW5pb24= IE1pbA== IGdhaW4= QlM= IEZpbg== eXA= IHVzZWZ1bA== IGJ1ZGdldA== IGNvbWZvcnQ= aXNm IGJhY2tncm91bmQ= ZWxpbmU= IGVwaXNvZGU= IGVuZW15 IHRyaWFs IGVzdGFibGlzaA== ZGF0ZQ== IENhcA== IGNvbnRpbnVlcw== IHNob3dpbmc= IFVuaW9u d2l0aA== IHBvc3RlZA== IFN5c3RlbQ== IGVhdA== cmlhbg== IHJpc2U= IEdlcm1hbnk= aWxz IHNpZ25lZA== IHZpbGw= IGdyYW5k bW9y IEVuZ2xhbmQ= IHByb2plY3Rz dW1iZXI= IGNvbmZlcmVuY2U= emE= IHJlc3BvbnNpYmxl IEFyYWI= IGxlYXJuZWQ= 4oCU4oCU aXBwaW5n IEdlb3JnZQ== T0M= IHJldHVybmVk IEF1c3RyYWxpYQ== IGJyaWVm UXU= IGJyYW5k aWxsaW5n YWJsZWQ= IGhpZ2hlc3Q= IHRyYWlu IENvbW1pc3Npb24= d2hpbGU= IG5vbQ== Y2VwdGlvbg== IG11dA== IEJsdWU= IGluY2lkZW50 dmFudA== ODY= IElE IG51Y2xlYXI= NzQ= IExpa2U= IFJF IE1pY3Jv bGk= bWFpbA== IGNoYXJnZXM= ODk= IGFkanVzdA== YWRv IGVhcnRo TkE= IHByaWNlcw== UEE= IGRyYWZ0 IHJ1bnM= IGNhbmRpZGF0ZQ== ZW5zZXM= IG1hbmFnZW1lbnQ= IFBoaWw= IE1pc3M= IHRlYWNo Z3JhbQ== IHVuZGVyc3RhbmRpbmc= YWl0 aWNhZ28= QWRk IEVw c2VjdXQ= IHNlcGFyYXRl IGluc3RhbmNl IGV0aA== IHVubGVzcw== KioqKioqKio= IEZvcmU= aW5hdGU= IG9wZXJhdGlvbnM= U3A= IGZhaXRo Z2Fy IENodXJjaA== cm9uaWM= IGNvbmZpZw== b3N1cmU= IGFjdGl2aXRpZXM= IHRyYWRpdGlvbmFs IDM2 IGRpcmVjdGlvbg== IG1hY2hpbmU= IHN1cnJvdW5k IHB1c2g= dW5jdGlvbg== IEVV IGVhc2llcg== IGFyZ3VtZW50 R0I= IG1pY3Jv IHNwZW5kaW5n aXphdGlvbnM= IHRoZW9yeQ== YWRvdw== IGNhbGxpbmc= IExhc3Q= IGRlcg== IGluZmx1ZW5jZQ== IGNvbW1pdA== IHBob3Rv IHVuYw== aXN0cnk= Z24= YXN0ZQ== YWNrcw== IGRpc3A= YWR5 ZG8= IEdvb2Q= IGA= IHdpc2g= IHJldmVhbGVk wqDCoA== bGln IGVuZm9yY2U= IENvbW1pdHRlZQ== IGNoZW0= IG1pbGVz IGludGVyZXN0ZWQ= IHNvbHV0aW9u aWN5 aW5jdA== IC0+ IERldA== IHJlbW92ZWQ= IGNvbXBhcg== ZWFo IHBsYW50 IFNpbmNl IGFjaGlldmU= IGFkdmFudGFnZQ== IHNsaWdodGx5 YmluZw== IHBsYWNlZA== dW5kZXI= MjAxNQ== IE1hZA== IHRpbQ== b3Nlcw== IGNydQ== IFJvY2s= IG1vc3RseQ== IG5lZ2F0aXZl IHNldHRpbmc= IHByb2R1Y2Vk IG11cg== IGNvbm5lY3Rpb24= IE1lcg== IGRyaXZlcg== IGV4ZWN1dGl2ZQ== IGFzc2F1bHQ= IGJvcm4= IFZlcg== dGFpbmVk IHN0cnVjdHVyZQ== IHJlZHVjZQ== IGRlY2FkZXM= IGRlZA== dWtl IE1hbnk= aWRkZW4= IGxlYWd1ZQ== U2U= IGpvaW4= IGRpc2Nv IGRpZQ== Y2tz YWN0aW9ucw== IGFzc2Vzcw== YWdu IGdvYWxz b3Vycw== SVI= IHNlbmlvcg== aWxsZXI= bW9k aXBtZW50 b2NvbA== dXk= IFF1ZQ== IHBhcnRpZXM= aXJnaW4= IGxlYXJuaW5n aXRhYmxl IHN0cmVldA== IGNhbWVyYQ== QXBw IHNraWxscw== YnJl Y2lvdXM= IGNlbGVicg== IEZyYW5j IGV4aXN0aW5n IHdpbGxpbmc= bG9y IGlk IFNwYWNl IGNyaXRpY2Fs IExh b3J0dW5hdGVseQ== IHNlcnZl IGNvbGQ= IHNwZWNpZXM= VFM= IGFuaW1hbHM= IEJheQ== IG9sZGVy IFVuZGVy ZXN0aWM= IFRyZQ== IHRlYWNoZXI= IHByZWZlcg== dmlz IHRocmVhZA== IE1hdHQ= IG1hbmFnZXI= 44O7 IHByb2Zlc3Npb25hbA== IFZvbA== IG5vdGVz VGhlc2U= dWxh IGZyZXNo ZW50ZWQ= dXp6 ZWR5 Y2x1c2lvbg== IFJlbA== IGRvdWJ0 RU8= IG9wZW5lZA== IEJpdA== QWR2ZXJ0aXNlbWVudA== IGd1ZXNz IFVO IHNlcXU= IGV4cGxhaW4= b3R0ZW4= IGF0dHJhY3Q= YWtz IHN0cmluZw== IGNvbnRleHQ= b3NzaWJsZQ== IFJlcHVibGljYW5z IHNvbGlk IGNpdGllcw== IGFza2luZw== IHJhbmRvbQ== dXBz dXJpZXM= YXJhbnQ= ZGRlbg== Z2w= IEZsb3JpZGE= IGRlcGVuZA== IFNjb3R0 IDMz IGlU aWNvbg== IG1lbnRpb25lZA== IDIwMDA= IGNsYWltZWQ= IGRlZmluaXRlbHk= dWxm IGNvcmU= IG9wZW5pbmc= IENvbnN0 d2hpY2g= IFRyYQ== QUc= NzI= IGJlbGlldmVk YWRh IDQ4 IFNlY3VyaXR5 eXJpZ2h0 IFBldA== IExvdQ== IGhvbGRpbmc= PT09PT09PT09PT09PT09PQ== IGljZQ== IGJyb3c= IGF1dGhvcml0aWVz aG9zdA== d29yZA== IHNjb3Jl IERpdg== IGNlbGxz IHRyYW5zbA== IG5laWdoYm9y IHJlbW92ZQ== dWN0 IGRpc3RyaWN0 IEFjY29yZGluZw== IHdvcnNl IGNvbmNlcm5z IHByZXNpZGVudGlhbA== IHBvbGljaWVz IEhhbGw= NzM= IGh1cw== QVk= IDIwMDY= IEp1ZA== IGluZGVwZW5kZW50 IEp1c3RpY2U= aWxpYXI= cHJpbnQ= aWdodGVy IHByb3RlY3Rpb24= emVu IHN1ZGRlbg== aG91c2U= IEplcw== UFI= IEluZg== IGJ1bA== IF8= IFNlcnZpY2U= IFBS IHN0cmF0ZWd5 ZmZlY3Q= IGdpcmxz IG1pc3Npbmc= b3lhbA== IFRlYW0= dWxhdGVk IGRhdA== IHBvbGl0aWNz YWJvcg== QWNjb3JkaW5n IHNwZWxs IGdyYXBo b3J0aGVybg== VEM= QWI= IGxhYm9y aXNoZXI= IGtpY2s= IGlUdW5lcw== IHN0ZXBz cG9zZXM= IHNtYWxsZXI= RW4= YmVydA== IHJvbGw= IHJlc2VhcmNoZXJz IGNsb3NlZA== IHRyYW5zcG9ydA== IGxhd3k= X19fX19fX19fX19fX19fXw== IENoaWNhZ28= IGFzcGVjdA== IG5vbmU= IG1hcnJpYWdl OTY= IGVsZW1lbnRz IEZyZQ== IFNhbA== IGRyYW0= RkM= dG9w ZXF1 IGhlYXJpbmc= IHN1cHBvcnRlZA== IHRlc3Rpbmc= Y29ob2w= IG1hc3NpdmU= IHN0aWNr IGd1YXJk aXNjbw== cGhvbmU= RnJvbQ== SG93ZXZlcg== IGJvcmRlcg== IGNvcHk= b2dyYXBoeQ== bGlzdA== NzE= IG93bmVy Y2xhc3M= cnVpdA== cmF0ZQ== IE9uY2U= IGRpZ2l0YWw= IHRhc2s= RVJT IGluY3JlZA== dGVz Kys= IEZyYW5jZQ== IGJyZWF0 b3ds IGlzc3VlZA== IFdlc3Rlcm4= IGRldGVjdA== IHBhcnRuZXJz IHNoYXJlZA== IENhbGw= IGNhbmNlcg== YWNoZQ== cmliZQ== IGV4cGxhaW5lZA== IGhlYXQ= eyI= IGludmVzdG1lbnQ= IEJvb2s= IHdvb2Q= IHRvb2xz IEFsdGhvdWdo IGJlbGllZg== IGNyaXNpcw== IGdl IE1Q IG9wZXJhdGlvbg== dHlwZQ== fn4= Z2E= IGNvbnRhaW5z YW50YQ== IGV4cHJlc3M= IEdyb3Vw IEpvdXJuYWw= a2E= IGFtYg== IFVTQQ== IGZpbmRpbmc= IGZ1bmRpbmc= aG93 IGVzdGFibGlzaGVk aWRlb3M= IGRlZ3JlZQ== IGRhbmdlcm91cw== YW5naW5n IGZyZWVkb20= cHBvcnQ= b3V0aGVybg== IGNodXJjaA== IGNhdGNo IFR3bw== IHByZXNlbmNl IEd1YXJk VXA= IGF1dGhvcml0eQ== IFByb2plY3Q= IGJ1dHRvbg== IGNvbnNlcXU= IHZhbGlk IHdlYWs= IHN0YXJ0cw== IHJlZmVyZW5jZQ== IE1lbQ== Iik= VU4= b3JhZ2U= IE9wZW4= IGNvbGxlY3Rpb24= eW0= Z2VuY3k= IGJlYXV0aWZ1bA== cm9z IHRlbGxz IHdhaXRpbmc= bmVs IHByb3ZpZGluZw== IERlbW9jcmF0cw== IGRhdWdodGVy IG1hc3Rlcg== IHB1cnBvc2Vz IEphcGFuZXNl IGVxdWFs IHR1cm5z IGRvY3VtZW50cw== IHdhdGNoaW5n UmVz IHJhbg== MjAxNA== IHJlamVjdA== IEtvcmVh IHZpY3RpbXM= TGV2ZWw= ZXJlbmNlcw== IHdpdG5lc3M= IDM0 IHJlZm9ybQ== Y29taW5n IG9jY3Vw IGNhdWdodA== IHRyYWZmaWM= YWRpbmc= IG1vZGVscw== YXJpbw== IHNlcnZlZA== IGJhdHRlcg== dWF0ZQ== IFNlY3JldGFyeQ== IGFncmVlZA== IHRydWx5 eW5hbQ== IFJldA== IHVuaXRz IFJlc2VhcmNo aGFuZA== YXppbmU= IE1pa2U= IHZhcmlldHk= b3RhbA== IGFtYXppbmc= IGNvbmZpcm1lZA== IGVudGlyZWx5 IHB1cmNoYXNl IGVsZW1lbnQ= IGNhc2g= IGRldGVybWluZQ== RGU= IGNhcnM= IFdhbGw= 4pY= IHZpZXdz IGRydWdz IGRlcGFydG1lbnQ= IFN0ZXA= dWl0 IDM5 YXN1cmU= IENsYXNz IGNvdmVyZWQ= IEJhbms= IG1lcmU= dWFuYQ== IG11bHRp IG1peA== IHVubGlrZQ== bGV2aXNpb24= IHN0b3BwZWQ= IHNlbQ== IEdhbA== dWxlcw== IHdlbA== IEpvaG5zb24= bGE= IHNraWxs IGJlY29taW5n cmll IGFwcHJvcHJpYXRl ZmU= ZWxsb3c= IFByb3Q= dWxhdGU= b2NhdGlvbg== IHdlZWtlbmQ= b2RpZXM= IHNpdGVz IGFuaW1hbA== IFRpbQ== IHNjYWxl IGNoYXJnZWQ= IGluc3RydWN0 aWxsYQ== IG1ldGhvZHM= IGNlcnQ= IGp1ZGdl IEhlbA== IGRvbGxhcnM= IHN0YW5kaW5n IFNxdQ== IGRlYnQ= bGlhbQ== IGRyaXZpbmc= IFN1bQ== IEVkaXRpb24= IGFsYnVt YW5kb24= SUY= IFVr NjM= YWRlcg== IGNvbW1lcmNpYWw= ZXNo IEdvdmVybm1lbnQ= IGRpc2NvdmVyZWQ= IG91dHB1dA== IEhpbGxhcnk= IENhcm9s IDIwMDU= IGFidXNl YW5jaW5n IHN3aXRjaA== IGFubnVhbA== VHc= IHN0YXRlZA== YWdlbWVudA== aW5uZXI= IGRlbW9jcg== IHJlc2lkZW50cw== IGFsbG93aW5n IGZhY3RvcnM= b2Rk IGZ1Y2s= ZW1pZXM= IG9jY3VycmVk b3Rp IG5vcnRo IFB1YmxpYw== IGluanVyeQ== IGluc3VyYW5jZQ== Q0w= b2xseQ== 44A= IHJlcGVhdGVk IGFybXM= YW5nZWQ= IGNvbnN0cnVjdGlvbg== IGZsZQ== UFU= aWNpYW5z IGZvcm1z IE1jQw== YW50aWM= IG1lbnRhbA== cGlyZQ== IGVxdWlwbWVudA== IGZhbnQ= IGRpc2N1c3Npb24= IHJlZ2FyZGluZw== a2lu YXJw IGNoYWly b2d1ZQ== IHByb2NlZWQ= IElk T3Vy IG11cmRlcg== TWFu IDQ5 YXNw IHN1cHBseQ== IGlucHV0 IHdlYWx0aA== bGlhbWVudA== IHByb2NlZA== b3JpYWw= IFN0YXQ= IE5GTA== aGVucw== IEluc3RpdHV0ZQ== IHB1dHRpbmc= b3VybmFtZW50 ZXRpYw== IGxvY2F0ZWQ= IGtpZA== ZXJpYQ== cnVu IHByaW5j ICE= Z29pbmc= IEJldA== IGNsb3Q= IHRlbGxpbmc= IHByb3Bvc2Vk aW90 b3JyeQ== IGZ1bmRz Z21lbnQ= IExpZmU= IGJhYnk= IEJhY2s= IHNwb2tl SW1hZ2U= IGVhcm4= IEFU Z3U= IGV4Y2hhbmdl IExpbg== b3Zpbmc= IHBhaXI= TW9yZQ== YXpvbg== IGFycmVzdGVk IGtpbGxpbmc= Y2Fu IENhcmQ= eWQ= IGlkZW50aWZpZWQ= IG1vYmlsZQ== IHRoYW5rcw== b255bQ== IEZvcm0= IGh1bmRyZWRz IENocmlz IENhdA== IHRyZW5k aGF0 IEF2 b21hbg== IGVsZWN0cmlj IFdpbA== U0U= T2Y= IHJlc3RhdXI= b3RlZA== IHRyaWc= IG5pbmU= IGJvbWI= V2h5 wq8= IGNvdmVyYWdl IGFwcGVhbA== IFJvYmVydA== IFN1cA== IGZpbmlzaGVk IGZsb3c= IGRlbGl2ZXI= IGNhbGN1bA== IHBob3Rvcw== IHBoaWw= IHBpZWNlcw== IGFwcHJl a2Vz IHJvdWdo RG8= IHBhcnRuZXI= IGNvbmNlcm5lZA== IDM3 IEdlbg== Q29s Y3RvcnM= ID0+ c3RhdGU= IHN1Z2dlc3RlZA== IEZvcmNl Q0U= IGhlcnNlbGY= IFBsYW4= d29ya3M= b290aA== cmVuY3k= IGNvcm5lcg== IGh1c2JhbmQ= IGludGVybmV0 IEF1dA== ZW1z b3Nlbg== IEF0bA== Z2Vu IGJhbGFuY2U= NjI= IHNvdW5kcw== dGV4dA== IGFycg== b3Zlcw== IG1pbGxpb25z IHJhZGlv IHNhdGlzZg== IERhbQ== TXI= R28= U3Bl IGNvbWJhdA== cmFudA== IEdyZWU= IGZ1ZWw= IGRpc3RhbmNl IHRlc3Rz IGRlY3Jl IEVy IG1hbmFnZWQ= RFM= IHRpdA== IG1lYXN1cmVz IExpYmVy IGF0dGVuZA== YXNoZWQ= IEpvc2U= IE5pZ2h0 ZGl0 IE5vdg== IEVuZA== b3V0cw== IGdlbmVyYXRpb24= IGFkdm9j eXRo IGNvbnZlcnNhdGlvbg== IFNreQ== YWN0aXZl Y2Vs cmllcg== IEZyYW5r IGdlbmRlcg== IGNvbmNlbnQ= IGNhcnJpZWQ= YW5kYQ== IFZpcmdpbg== IGFycml2ZWQ= aWNpZGU= YWRlZA== IGZhaWx1cmU= IG1pbmltdW0= bGV0cw== IHdvcnN0 IGtlZXBpbmc= IGludGVuZGVk IGlsbGVnYWw= IHN1YnNj IGRldGVybWluZWQ= IHRyaXA= WWVz IHJhaXNl IH4= IGZlZWxz IHBhY2thZ2U= IEpv aGk= MjAxNg== cmVhbA== IGZyYQ== IHN5bWI= TWU= dWNreQ== cHJldA== IEto IEVkaXQ= IFdlYg== ZW1pYw== IENvbG9y IGp1c3RpY2U= SW50 IGZhcm0= Y2tub3c= Ij4= ZWxlc3M= IHJlZHVjZWQ= IDUwMA== eHg= IFJhZA== IFdvb2Q= IGNsaW4= IGh5cA== aWxlcg== dXJh a2lucw== ODU= NjE= IFRoZWly IE1hcnk= IHNhbg== IG5vdmVs IFdobw== IGNhcGFjaXR5 IGltcG9zc2libGU= IHBsYXlz IG1pbmlzdGVy aWp1YW5h aWNhdGU= IFNldA== IGZyYW0= IGluZw== IGNvbW11bml0aWVz IEZCSQ== aXRh IGJvbg== IHN0cmF0ZWc= IGludGVyZXN0cw== bG9jaw== Z2Vycw== bWFz IEFORA== IGNvbmZsaWN0 IHJlcXVpcmVtZW50cw== IHNhYw== IG9wZXJhdGluZw== aW5p cmVsYXRlZA== IGNvbW1pdHRlZA== IHJlbGF0aXZlbHk= IHNvdXRo wq/Crw== IGFmZm9yZA== IGlkZW50aXR5 IGRlY2lzaW9ucw== IGFjY3VzZWQ= cGxhY2U= IHZpY3Rvcnk= b2No aWF0 TmFtZQ== Q29t dGlvbg== ZWRz IHNlZWs= IHRpZ2h0 IEltYWdlcw== IGluaXRp IGh1bWFucw== IGZhbWlsaWFy IGF1ZGllbmNl IGludGVybmFs dmVudHVyZQ== IHNpZGVz IFRP IGRpbQ== IGNvbmNsdWQ= IGFwcG9pbnQ= IGVuZm9yY2VtZW50 IEppbQ== IEFzc29jaWF0aW9u IGNpcmN1bXN0 IENhbmFkaWFu IGpvaW5lZA== IGRpZmZlcmVuY2Vz IExvcw== IHByb3Rlc3Q= IHR3aWNl d2lu IGdsYXNz YXJzaA== IEFybXk= IGV4cHJlc3Npb24= IGRlY2lkZQ== IHBsYW5uaW5n YW5pYQ== IGhhbmRsZQ== IE1pY3Jvc29mdA== IE5vcg== IG1heGltdW0= IFJldg== IHNlYQ== IGV2YWw= IGhlbHBz cmVm IGJvdW5k IG1vdXRo IHN0YW5kYXJkcw== IGNsaW0= IENhbXA= IEZveA== Y2xlcw== IGFybXk= IFRlY2hu YWNraW5n eHk= U1M= IDQy IGJ1Zw== IFVrcmFpbg== IE1heA== IEpvbmVz IFNob3c= bG8= IHBsYW5ldA== IDc1 IHdpbm5pbmc= IGZhc3Rlcg== IHNwZWN0 IGJyb2tlbg== VFI= IGRlZmluZWQ= IGhlYWx0aHk= IGNvbXBldGl0aW9u aHR0cHM= IElzbGFuZA== IEZl IGFubm91bmNl IEN1cA== IEluc3RlYWQ= IGNsaWVudA== IHBvc3NpYmx5 c2VjdGlvbg== b2NrZXQ= bG9vaw== IGZpbmlzaA== IGNyZXc= IHJlc2Vydg== IGVkaXRvcg== IGhhdGU= IHNhbGU= IGNvbnRyb3ZlcnM= IHBhZ2Vz d2luZw== IG51bWVy IG9wcG9zaXRpb24= IDIwMDQ= IHJlZnVnZQ== IGZsaWdodA== IGFwYXJ0 IExhdA== QW1lcmlj IEFmcmljYQ== IGFwcGxpY2F0aW9ucw== IFBhbGVzdA== IEJ1cg== IGdhcg== IFNvY2lhbA== IHVwZ3I= IHNoYXBl IHNwZWFraW5n YW5zaW9u YW8= IFNu IHdvcnJ5 IEJyaXRhaW4= UGxlYXNl cm91ZA== IGh1bg== IGludHJvZHVjZWQ= IGRpZXQ= SW5k IFNlY29uZA== IGZ1bmN0aW9ucw== dXRz IEVhY2g= IEplZmY= IHN0cmVzcw== IGFjY291bnRz IGd1YXJhbnQ= IEFubg== ZWRpYQ== IGhvbmVzdA== IHRyZWU= IEFmcmljYW4= IEJ1c2g= fSw= IHNjaA== IE9ubHk= IGZpZg== aWdhbg== IGV4ZXJjaXNl IEV4cA== IHNjaWVudGlzdHM= IGxlZ2lzbGF0aW9u IFdvcms= IFNwcg== w4I= IEh1bWFu IOg= IHN1cnZleQ== IHJpY2g= cmlw IG1haW50YWlu IGZsbw== IGxlYWRlcnNoaXA= c3RyZWFt IElzbGFtaWM= IDAx IENvbGxlZ2U= IG1hZ2lj IFByaW1l IGZpZ3VyZXM= MjAxNw== aW5kZXI= eHVhbA== IERlYWQ= IGFic29sdXRlbHk= IGZvdXJ0aA== IHByZXNlbnRlZA== cmVzcG9uZA== cmlibGU= IGFsY29ob2w= YXRv IERF cG9yYXJ5 IGdyYWI= IHZhcmk= IHF1YW50 IFBob3Rv IHBsdXM= cmljaw== YXJrcw== IGFsdGVybmF0aXZl IHBpbA== IGFwcHJveA== dGhhdA== IG9iamVjdHM= IFJv IEFuZHJvaWQ= IHNpZ25pZmljYW50bHk= IFJvYWQ= a2F5 UmVhZA== YXZvcg== IGFja25vdw== IEhE IFNpbmc= T3I= IE1vbnQ= IHVucw== cHJvZg== IG5lZ290aQ== IEFyY2g= aWtp IHRlbGV2aXNpb24= IEpld2lzaA== IGNvbW1pdHRlZQ== IG1vdG9y IGFwcGVhcmFuY2U= IHNpdHRpbmc= IHN0cmlrZQ== IERvd24= Y29tcA== IEhpc3Q= IGZvbGQ= YWNlbWVudA== IExvdWlz IGJlbG9uZw== IOKAog== IG1vcnQ= IHByZXBhcmVk IDY0 IE1hc3Rlcg== IGluZGVlZA== IERlbg== IHJlbnQ= VEE= b3VybmV5 YXJj U3U= OTc= IGFkdmljZQ== IGNoYW5naW5n IGxpc3RlZA== IGxhdW5jaGVk aXNhdGlvbg== IFBldGVy aXNoZXM= IGxpdmVk IE1lbA== IFN1cHJlbWU= IEZlZGVyYWw= ICk7 cnVjdHVyZQ== IHNldHM= IHBoaWxvcw== dW91cw== IMKg IGFwcGxpZWQ= IE5PVA== IGhvdXNpbmc= IE1vdW50 IG9kZA== IHN1c3Q= REE= ZmZpY2llbnQ= ID8= b2x2ZWQ= IHBvd2Vycw== IHRocg== IHJlbWFpbmluZw== IFdhdGVy TEM= IGNhdXNlcw== 44Gu IG1hbm5lcg== YWRz IHN1Z2dlc3Rz IGVuZHM= c3RhbmRpbmc= Zmln IER1bg== aWR0aA== IGdheQ== IHRlcm1pbg== IEFuZ2VsZXM= TVM= IHNjaWVudGlmaWM= IGNvYWw= YXBlcnM= YmFy IFRob21hcw== IHN5bQ== IFJ1bg== dGhpcw== UEM= aWdyYW50cw== IG1pbnV0ZQ== IERpc3RyaWN0 Y2VsbGVudA== IGxlYXZlcw== IGNvbXBsZXRlZA== YW1pbg== IGZvY3VzZWQ= IG1vbml0b3I= IHZlaGljbGVz TUE= IE1hc3M= IEdyYW5k IGFmZmVjdGVk aXR1dGlvbmFs IGNvbnN0cnVjdA== IGZvbGxvd3M= IHRvbg== cmVlbnM= IGhvbWVz IEV4dA== IExldmVs cmFzdA== IEly IGVsaW0= IGxhcmdlbHk= IEpvZQ== IHZvdGVz YWxscw== IGJ1c2luZXNzZXM= IEZvdW5kYXRpb24= IENlbnRyYWw= IHlhcmRz IG1hdGVyaWFscw== dWxuZXI= IGd1aWRl IGNsb3Nlcg== dW1z IHNwb3J0cw== ZWRlcg== SnVzdA== IHRheGVz ODQ= IE9sZA== IGRlY2FkZQ== b2xh IHZpcg== IGRyb3BwZWQ= IGRlbGF5 aXRlY3Q= IHNlY3VyZQ== c3RlaW4= bGV2ZWw= IHRyZWF0ZWQ= IGZpbGVk YWluZQ== IHZhbg== IG1pcg== IGNvbHVtbg== aWN0ZWQ= ZXBlcg== IHJvdA== IGNvbnN1bHQ= IGVudHJ5 IG1hcmlqdWFuYQ== IERvdQ== IGFwcGFyZW50bHk= b2tpbmc= Y2x1c2l2ZQ== IGluY3JlYXNlcw== YW5v IHNwZWNpZmljYWxseQ== IHRlbGU= ZW5zaW9ucw== IHJlbGlnaW9u YWJpbGl0aWVz IGZyYW1l IE5vdGU= IExlZQ== IGhlbHBpbmc= IGVkZ2U= b3N0b24= IG9yZ2FuaXphdGlvbnM= w4M= IEJvdGg= aGlwcw== IGJpZ2dlcg== IGJvb3N0 IFN0YW5k IHJvdw== dWxz YWJhc2U= IHJpZA== TGV0 YXJlbg== cmF2ZQ== IHN0cmV0 UEQ= IHZpc2lvbg== IHdlYXJpbmc= IGFwcHJlY2k= IGF3YXJk IFVzZQ== IGZhY3Rvcg== d2Fy dWxhdGlvbnM= KSg= IGdvZA== IHRlcnJpdA== IHBhcmFt YXN0cw== ODc= IGVuZW1pZXM= IEdhbWVz RkY= IGFjY2lkZW50 V2VsbA== IE1hcnRpbg== VEVS IGF0aA== IEhlbGw= IGZvcmc= IHZldGVy IE1lZGlj ZnJlZQ== IHN0YXJz IGV4cGVuc2l2ZQ== IGFjYWQ= cmF3bg== IFdoZQ== IGxvY2s= IGZvcm1hdA== IHNvbGRpZXJz c20= IGFnZW50 IHJlc3BvbnNpYmlsaXR5 b3Jh IFNjaWVuY2U= IHJhcGlk IHRvdWdo IEplc3Vz IGJlbGlldmVz TUw= IHdlYXI= bGV0ZQ== w4PDgg== IERyaQ== IGNvbW1pc3Npb24= IEJvYg== T2g= YXBlZA== IHdhcm0= w4PDgsODw4I= IDIwMDM= b3J0aW9u IGhhc24= dXN0ZXI= IHVuaXZlcnM= IElsbA== IGtpbmc= b2xvZ2llcw== OTQ= IFRlbQ== IE1vcw== IHBhdGllbnQ= IE1leGljbw== Y2Vhbg== IERlYXRo IFNhbmRlcnM= eW91 IENhc3Q= IENvbXBhbnk= cHR5 IGhhcHBlbmluZw== RlA= IEJhdHRsZQ== IGJvdWdodA== QW0= TW9k VXM= dXRlcnM= IENyZQ== IFRob3Nl IDQ0 aXNlcg== IHNvdWw= IFRvcA== IEhhcnJ5 IEF3 IHNlYXQ= ZmZlZQ== IHJldm9sdXRpb24= ICgi IER1cmluZw== ZXR0ZQ== IHJpbmc= IG9mZmVuc2l2ZQ== IHJldHVybnM= IHZpZGVvcw== IGRpc2Ns IGZhbW91cw== ZW5jZWQ= IFNpZ24= IFJpdmVy IDMwMA== UE0= IEJ1cw== IENI IGNhbmRpZGF0ZXM= YXJkZW4= IHBlcmNlbnRhZ2U= IHZpc3VhbA== IHRoYW5r IHRyb3VibGU= bmVyZ3k= IDIwMDE= IHByb3Zl YXNoaW9u IGVuaA== IExvbmc= VU0= IGNvbm5lY3RlZA== IHBvc3NpYmlsaXR5 T3Zlcg== IGV4cGVydA== IGxpYnJhcnk= YXJ0cw== IERpcmVjdG9y IGZlbGxvdw== OTI= aXJ0eQ== IGRyeQ== IHNpZ25z IExvdmU= IHF1aWV0 Zm9vdA== IHB1cmU= IEh1bg== IGZpbGxlZA== cGhhcw== IEVsZWN0 ZW5kbWVudA== IEV4cGw= IHVuYWJsZQ== bnM= bW8= IHZhc3Q= b2Jl IGlkZW50aWZ5 YXBwaW5n IENhcm9saW5h Z3Jlc3M= IHByb3Rl IGZpc2g= IGNpcmN1bXN0YW5jZXM= cmF6eQ== IFBob3Q= IGJvZGllcw== IE11cg== IGRldmVsb3Bpbmc= IEFS IGV4cGVyaWVuY2Vk IHN1YnN0YW50 IEJvYXJk ZXNvbWU= IGRvbWVzdGlj IGNvbWJpbmVk IFB1dA== IGNoZW1pY2Fs IENoaWxk IHBvb2w= IEN5 IGVnZw== Y29ucw== c3RlcnM= IGh1cnQ= IG1hcmtldHM= IGNvbnNlcnZhdGl2ZQ== IHN1cHBvcnRlcnM= IGFnZW5jaWVz aWRlbA== T2I= dXJi IDQz IERlZmVuc2U= eWU= IEFw ZHVsZQ== IHRlbXBlcmF0dXJl IGNvbmR1Y3RlZA== IENoaWVm IHB1bGxlZA== IGZvbA== TGFzdA== b250bw== b3Npcw== VkVS RGVz IFBhbg== Rmlyc3Q= IGFkdmFuY2U= IGxpY2Vuc2U= cm9ycw== IEpvbg== IGltYWdpbmU= IGhlbGw= IGZpeGVk IGluY29y b3NpdGU= IExvZw== aWNrZW4= XTo= IHN1cnByaXNl aGFi IGNyYWZ0 b2x0 IEp1bA== IGRpYWw= IHJlbGV2YW50 IGVudGVyZWQ= IGxlYWRz IEFE IENsZWFu IHBpY3R1cmVz ZXNzb3I= IGFsdA== IHBheWluZw== UGVy IE1hcmtldA== IHVwZGF0ZXM= YW1pbHk= IFR5cGU= IEhvbWU= IDU1 c2VtYmx5 cm9tZQ== ODM= IGdyZWF0ZXN0 IGhlaWdodA== IGhlYXY= YWludHM= IGxpc3Rlbg== YXNlcg== IFNI IGNhcGFibGU= YWNsZQ== IHBlcnNwZWN0 aW5hdGluZw== IG9mZmVyaW5n cnlwdA== IERldmVsb3A= YWJpbg== cmM= IGJyaWdodA== YWx0eQ== YXJyb3c= IHN1cHBs aW5kaW5n YWNrZWQ= Z3lwdA== IEFub3RoZXI= cGc= IFZpcmdpbmlh IEx1 IHBsYW5uZWQ= IHBpdA== IHN3ZWV0 VHlwZQ== IERp IHR5cGljYWxseQ== IEZyYW5jaXNjbw== IHByb3NwZWN0 IERhbg== IHRlZW4= cmVlcw== IHNjaGVk IGhvbA== IHNjcg== IGxvdHM= bGlmZQ== IG5ld3Nw IGZvcmdldA== IE5vbmU= IE1pZGRsZQ== IFJ5YW4= ZWRk IHNldmVyZQ== IHN1aXQ= bGxlcg== OTM= IGNvcnJlc3BvbmQ= IGV4cGxvcw== dWF0aW9ucw== IGZsYWc= Z2FtZQ== cmlk IHByaW4= IERhdGE= IGRlcGxveQ== IEVudGVy c3VpdA== Z2hhbg== IE1lbg== IHRob3VnaHRz IG1hdHRlcnM= IGFkYXB0 IEFyaQ== IGZpbGw= IGZvcnRo IHNhbQ== IDQx IHBheW1lbnQ= IEhvcg== IHNwcmluZw== ZHVj IGxvc2luZw== IGJyaW5naW5n Rk8= YWxh IGRpc3RyaWJ1dGlvbg== aGVyZWQ= Ym91cg== IElzcmFlbGk= b21h IGNvbWJpbmF0aW9u IHBsZW50eQ== VkU= Q2Fu IEhhdw== IHBlcm1hbg== IFNwZWNpYWw= IHRvdw== IHNlZWtpbmc= IGV4YW1wbGVz IGNsYXNzZXM= Y3I= IGJlZXI= IG1vdmVz IElQ IEtu IHBhbmVs RXZlbg== IHByb3Blcmx5 IHJpcw== IHBsdWc= IGVzdGltYXRlZA== RXZlcnk= IGRlZmVuc2l2ZQ== YWdyYXBo IHByZWdu IGluc3RpdA== IFZpY3Q= IHZvbHVtZQ== IHBvc2l0aW9ucw== IGxpbmtz IFByb2dyYW0= IFdlZWs= YWd1ZXM= IHRyYW5zZm9ybQ== a2Vy IENFTw== IGNhcw== IG9wcG9uZW50 IHR3ZWV0 IENvZGU= IHNob3A= IGZseQ== IHRhbGtz IGJhZw== UGhvbmU= IGFpZA== IHBsYW50cw== IDY1 IGF0dG9ybmV5 YXJ0ZXJz cXVlc3Q= IE1hZ2lj IGJlZ2lucw== IG15c3Rlcg== IGVudmlyb25tZW50YWw= IHN0b3JhZ2U= Tk4= IG1hcmc= IHNrZQ== IG1ldGFs ZWxseQ== IG9yZGVyZWQ= IHJlbWFpbmVk IGxvdmVk IHByb21wdA== IHVwZGF0ZWQ= IGV4cGVydHM= IHdhbGtpbmc= IGFuY2llbnQ= IHBlcmZvcm1lZA== QVRF IG5laXRoZXI= aWVuY3k= IG1hbnVmYWN0dXJl IFBhaw== IHNlbGVjdGVk IG1pbmU= IHVsdGltYXRlbHk= IGV4cGxhbg== IGxhYmVs IFNlcnZpY2Vz cmlidXRlZA== VHJ1bXA= IHN5bg== IFVsdA== U0M= IG1lYXQ= IGdpYW50 IFdhcnM= IE9O IGFkbQ== IGludGVycHJldA== IGV2ZW5pbmc= IGV2aWw= IEJvc3Rvbg== IFdpbGQ= IMM= IEJpdGNvaW4= IEFtYXpvbg== RHI= IEluZm9ybWF0aW9u IG9idmlvdXNseQ== IGFkdmFuY2Vk UGhvdG8= b2xhcg== IHdlYXRoZXI= IHN5bWJvbA== IHNvbGU= IHBvdGVudGlhbGx5 b3N0ZXI= IG9yaWdpbmFsbHk= bXVu MzAw YXpl ZXNzaW9ucw== IGRlY2s= IHN0b29k IHlvdXRo IEJlcm4= UmVw IFRlc3Q= IGJhc2ljYWxseQ== b3RpYw== IGludm9sdmU= b2xpdA== bHlu U2Vl IGFpcmNyYWZ0 IGNvbmZpcm0= RVc= IG1lc3NhZ2Vz IFJpY2hhcmQ= IGtpdA== IHByb2hpYg== IHZ1bG5lcg== aXN0ZXJz IGV4aXN0ZW5jZQ== IHR1cm5pbmc= IFNQ IGRlc2lyZQ== IGZsYXQ= IG1lbnQ= c2Vhc29u YW5nZXM= IG5laWdoYm9yaG9vZA== IExha2U= QVRJT04= IHBvaW50ZWQ= YnVy IGlubm92 dWNrcw== VUw= IHByb2Zlc3Nvcg== IGV4cHJlc3NlZA== QUI= aWNpb3Vz IDIwMDI= IERldg== IHNlc3Npb24= IGJhcmU= c2Vu IGRpc3M= IENhdGg= IFBhc3M= IFBvaW50 IGRvY3Rvcg== b3Jyb3c= YWlsZWQ= IFJ1Yg== IERD IENoYXJs cGVyc29u IHdyaXRlcg== aWdodGVycw== dXJlYXU= IG9ibGln IHJlY29yZGVk IGJyb2tl IG9yZGVycw== aWx0eQ== IG1vdGlvbg== aW5pdHk= bGF3 YWRpdW0= IGltbWlncmF0aW9u IGNvbnRyYXN0 IGJhdHQ= IGV4Y2VsbGVudA== IHRlY2huaWNhbA== YW1p IHR1bg== IGNsb3Vk IFllYXI= Z2Vvbg== IGNyZWF0aW9u IHN0cmFuZ2U= IGF1dGg= IGZvcnQ= Ym9ybg== IGV4dGVudA== IFRvZGF5 IENsdWI= IHJhaW4= IHNhbXBsZQ== IGFjY2VwdGVk IHRhY3Q= IGZpcmVk IFNvbg== IHN0YW5kcw== IGJvb3Q= IDQ3 IHN0YXRlbWVudHM= IHZlcnNpb25z IHNlbGxpbmc= b3VuZGVk IDE5OTA= IHdlcmVu IFdhdGNo IGV4cGVyaW1lbnQ= UG9zdA== IHJldGFpbA== dWxlZA== SW5zdA== dW50ZQ== 44O8 IGRlcGFydA== IGJvbmQ= aXZlcnk= b21wbA== IHJlYWN0aW9u IFN5cmlhbg== IFBhYw== YXBwZWQ= YW5pZWw= RFA= IHJlc29sdXRpb24= IHJlYWN0 IGFwcHJvdmVk b25vbQ== bW9uZA== IE9mZmlj LS0t IHJlcGxhY2U= IHRhY2s= IHNwb3J0 IGNoYWlu IGVtZXJnZW5jeQ== cmFk IFBhbGVzdGlu IDQ2 IGF1dG9tYXRpY2FsbHk= IHJvdXRl IHBhbA== IGJhbmtz IFBhcmlz IE1lZGlh cm9hZA== aWNpbmc= aXh0 aXN0ZWQ= IGdyZXc= IGNvb3Jk IFdoZXJl b21pbg== IHN1YnM= 77+977+9 IMKx IGNvcnBvcmF0ZQ== IHNlbGVjdGlvbg== bm9vbg== IFJlcG9ydA== Y3M= Y2x1ZGluZw== b3JkZXJz YW5jaGU= IEl0cw== IHNsb3dseQ== IEVneXB0 IEFjYw== IGNvbGxl aXF1ZXM= RVg= IGF0dGVtcHRz dXJs IENyb3Nz IGZpbmRpbmdz IFND IE9S IGluZGV4 ZW5zaXR5 IFdheQ== IExhbmQ= IHNob2Nr ZGlz IGR5bmFt IGNhcnQ= bW9zcA== U2luY2U= aWVzdA== IEJveQ== IHN0b3Jt IENvbnRpbg== MjAxMw== aGV3 aWxpdA== IGVzc2VudGlhbA== aXF1aWQ= T3RoZXI= aXZlcmVk IHJlYXNvbmFibGU= QWN0 IHN1YnNlcXU= IFBhY2s= IEZvcnQ= IGNvbnNpZGVyaW5n IHVuaXZlcnNpdHk= bG9n IG1hcnJpZWQ= IGlsbHVzdA== IFRydWU= o48= IG51bWVyb3Vz cmFzdHJ1Y3R1cmU= IHNlcmlvdXNseQ== IHJlZmVycmVk dWE= IGNvbnNpc3RlbnQ= b25uYQ== IFJlYWw= cnVwdGlvbg== Y2lwbGVz IGZhY3Rz OTE= b3Rlcw== ZXJn VGhlbg== IGFjY29tcGw= Tm90ZQ== IHJldmVudWU= IHBhc3Npbmc= IG1hbA== ZWVu IFlldA== IGdhdGhlcg== dGVyZGF5 ZXdvcms= IEF1dGhvcg== UGU= IG9wdGlt IHJ1Yg== IOijjw== IHVua25vd24= c3RvbmU= IHVuaW9u b2x2ZQ== IG9wcG9ydHVuaXRpZXM= IGJyb3dzZXI= IFdhbA== IENvc3Q= IHJlcG9ydGluZw== c3Rz cGV0 IHNhbmQ= IHN1ZGRlbmx5 IHN1cnByaXNpbmc= IFZS IHNvbWV3aGF0 IEJhcw== dWx0dXJl aXp6 IENE IGNoYWxsZW5nZXM= IHNldHRpbmdz IGV4cGVyaWVuY2Vz IEZ1bGw= IGNhbm4= IHJlY2VpdmluZw== RVNU IGpvaW50 IGN1bHR1cmFs IGFzdA== ODI= YXN0ZXJu Y2VpdmVk IENydQ== IGJ1bGw= cGlyZWQ= YW1t IGZhY2luZw== cG93ZXI= IGJvc3M= IEhvbA== IGluc3Ry IGluY3JlYXNpbmdseQ== IHNoaWZ0 IHN0cmVldHM= IFdpbGxpYW1z YWJi IGxpZQ== IGxhdWdo IENh UEw= IGFkdWx0cw== IGN1c3RvbWVy IG9idGFpbmVk IHN1cHBvcnRpbmc= aHRtbA== ZmlyZQ== IGRldGFpbGVk IHBpY2tlZA== IFJpZ2h0 bGRlcg== RUU= c3Rvb2Q= IEtpbQ== IHdpcmU= IHNpZ2h0 IGRldmVsb3BlcnM= IHBlcnNvbnM= IHNhZA== IGN1cA== IHdhcm5pbmc= IGJveXM= bG9uZw== IGJpcmQ= Zm8= IHdhbA== IG9ic2VydmVk IHpvbmU= aXZlbmVzcw== IGNoYW5uZWw= Y3JpcHQ= IHJlZnVzZWQ= IEFnYWlu IHN1Yw== IHNwb2tlc21hbg== IFJlZg== cml0ZQ== b3VzdG9u 44Oz IFNoZXI= IGFjdHM= IE5hbWU= IHN0cnVnZ2xl YXJyeQ== b21ldGltZXM= IGRpc2NyaW0= SFQ= IGNhdGVnb3J5 IHJlYWxpemU= IGVtcGxveWVl IEFmZ2hhbg== ZW5nZXI= IGd1bnM= IFN0ZXZl IE1vdA== IE9s b2tlZA== IHRoaWNr IGZhaXJseQ== aWxseQ== IHN1cnZl IE1hdA== d2VpZ2h0 4pQ= IHRyb29wcw== IGFnZW50cw== IGJhdHRlcnk= IG1vdGl2 w6E= U2Vj ZGVu b3Zlcnk= TFM= IGZsdQ== IGNvbmZpZGVudA== IE9wZXI= IGVtcHR5 IHBoZW4= IHNlY3Rvcg== IGV4Y2l0ZWQ= IHJlbW90ZQ== YXBo b2Vu IGRlc3Ryb3llZA== IG1vcmFs IEhQ IFJvbg== IGRyZXNz IEJhdA== IGxpdA== IE1T IGFm SEw= cnVt aXNtcw== IHNob3VsZG4= IHN5bXB0 IFRvcm9udG8= aGV0aWM= IGNhcmJvbg== IGluc3RhbGxlZA== IHZpb2xlbnQ= IHNvbGFy amE= IHByYWN0aWNlcw== IHJpZGU= IFBlbm4= IGltcHJvdmVk IGF1ZGlv IGJlaGF2aQ== IFBT IGVhdGluZw== RGF0YQ== IFJldmlldw== cGFzcw== Y2xhaW0= dWF0ZWQ= YW5nZXJz Y2hlbg== IHByb3BlcnRpZXM= IGFueXdoZXJl QW5vdGhlcg== IGJsb3c= IEphY2tzb24= IHByb3Vk IHBsYW5l bGluZXM= IHNxdWFyZQ== IHByb29m YW5zYXM= IHRhbGtlZA== bWFrZXJz IHNpc3Rlcg== IGhvbGRz IHJlc2lkZW50 ID09 IHJlc2lzdGFuY2U= IHNwbGl0 IHByb3NlY3V0 IGNvbmZpZGVuY2U= cmVzZW50cw== IGN1dHM= IGV4Y2VwdGlvbg== IHplcm8= R2V0dHk= IGNvcHlyaWdodA== IHRvdGFsbHk= b3JtYWw= aWZpY2F0aW9ucw== IEF1c3RyYWxpYW4= IHNpY2s= IDE1MA== IGhvdXNlaG9sZA== IGZlZXM= IGRyaXZlcnM= b2dlbg== IE5Z IG5lY2Vzc2FyaWx5 IHJlZ3VsYXRpb25z ZWFyaW5n c2w= IHBlcnNwZWN0aXZl Y2FyZQ== aWNpYWw= SGlz IGVzY2FwZQ== IHN1cnByaXNlZA== IFZhbg== dXJyZW50 IHZhYw== ODE= IFRodXM= IGVtcGhhcw== IENoYW1waW9ucw== IEljZQ== IG5hcnI= IGhlYWRz IGNhdXNpbmc= YmVs Zm9ydHVuYXRlbHk= IE1h IHRhcmdldHM= Y2lwbA== IGFmdGVybm9vbg== IGFkZHM= IE1heWJl IEZvdXI= ZXNzZWQ= cGxldGU= IHVzdWFs Y2hv aW5ndQ== IHdpdGhk IEVuZXJneQ== IEVjb25vbQ== T08= IGFydGljbGVz IGluanVyZWQ= IG1hbmFnZQ== IGV4cGxhaW5z IGRpYWdu UmVj YXR1cmVz IGxpbmtlZA== IGRpc2N1c3NlZA== IGV4cGxv IG9jY2FzaW9u YXRoYW4= IG9wcG9zaXRl IGZhY2Vz IGRlbmllZA== IEtuaWdodA== IG51dA== IGFwcHJveGltYXRlbHk= IGRpc2FwcG9pbnQ= b255bW91cw== IEJlc3Q= IExv IEh5 IEFmZg== IHZvdGluZw== YW53aGlsZQ== IElJSQ== IGluc3RpdHV0aW9ucw== YWdyYW0= IERhaWx5 IGRyYWc= IG5lYXJieQ== IGd1aWx0eQ== IGNvbnZlcg== UHJl c2hpcA== IHJld2FyZA== IHBoaWxvc29waA== IFNT dWdo IGFwcHM= ZnJpZW5k IHVwcGVy IGFkdmVydA== IHNub3c= IGZydXN0 IG91cnNlbHZlcw== RnI= IERpZQ== YW1waW9u IGRpc21pc3M= IGNlcmU= IHNpZ25hbA== ZnJvbQ== ICku IDUy IGNyaW1lcw== aXRvcnM= ZXN0aXZhbA== dXNldW0= IGNvdW5jaWw= IFNhdWQ= TWF5 IEd1bg== aWNpYW4= ZXRoZXI= IHN1ZmZpY2llbnQ= IEhlbg== c29sZQ== IGhpc3RvcmljYWw= IEZhcg== IFR1cm4= IHBpbg== IHN1Y2NlZWQ= bWF0 bHltcA== IHRyYWRpdGlvbg== IE9r IGNybw== IGRlc2NyaXB0aW9u YWxsZQ== IHNreQ== VGU= IHdpZGVseQ== IHdhdmU= IGRlZmluaXRpb24= IEpld3M= IGN5Y2xl IHJlZmVyZQ== IGJyaW5ncw== dXNhbA== IGFsaXZl IGZyZXF1ZW50bHk= IGludGVudGlvbg== IENvbnRyb2w= bHY= eXN0ZW0= IHByaXZhY3k= Z2VudA== cmVuY2U= IFF1ZXN0 IENocmlzdG1hcw== IHJhaWw= IGNvb3Blcg== IHRlc3RlZA== IENhcHQ= YXNrcw== IGNvbWZvcnRhYmxl IGRlbGl2ZXJlZA== c2NhcGU= IGRlcHRo IEdPUA== IHdyaXRlcw== IGFzc2V0cw== IHNhdg== aW1lbnRz IHRyYW5zaXRpb24= IGFydGlzdA== IExvb2s= IGxvYg== IGNvbXBvbmVudHM= YXJpdHk= IHdhbGtlZA== IHJvb3Q= IHBhcnRpY2lwYW50cw== IG5vdGljZWQ= IHJlc2M= IG5hdg== IEFkbWluaXN0 ZGE= dXRyYWw= cGxhdGU= IGltcG9ydGFuY2U= IGFzc2VydA== aW91c2x5 Y3JpcHRpb24= IGluanVyaWVz IENoZWNr IHJlZ2lzdGVyZWQ= IGludGVudA== IG1pc3NlZA== b2dyYXBoaWM= IHNlbnRlbmNl b3VudGVy IGFzc2lzdGFuY2U= ZXZpbg== IGRhdGFiYXNl IGJ1aWxkaW5ncw== IGNsYXNzaWM= IHRoaW5rcw== IE9oaW8= UHI= dWdn IGZlZQ== cGFu IGVmZmVjdGl2ZWx5 IGZhY2lsaXR5 IGJlYXI= IGNoYXB0ZXI= IGRvZ3M= IENvbHVtYg== IGxhdHRlcg== aXRpYWw= IGFkbWl0dGVk VFY= IEdlb3Jn IHBvc3Rz XFw= IGxhd3llcg== IGVxdWl2YWw= IG1hbmQ= IGNvbnRyb2xsZWQ= IFdhbGs= IEFuZHJldw== IG1lbnU= YW1lbnRhbA== IHByb3RlY3RlZA== dmE= IGFkbWluaXN0cg== b3JhbA== IHJlaW4= IFNhcg== IGFtb3VudHM= IG5hdGl2ZQ== IE1vb24= IHJlcHJlc2VudHM= IGFiYW5kb24= IGNhcnJ5aW5n IHRhbms= bWFyeQ== IGRlY2xhcmVk VHViZQ== IGhhdA== IHB1bmlzaA== ZWxsZWN0 bWVz IHVuaXZlcnNl IFJvZA== cGh5 IGluZnJhc3RydWN0dXJl IDUx IG9wcG9zZWQ= b3dudA== Y2E= IE1ha2U= IGhhcmR3YXJl IGNvZmZlZQ== UmVs YmFs d29ybGQ= IFNhZg== IFNlYQ== aW5hbHM= IG93bmVk IGhhbGw= ZXJzaW9u IGRlc2NyaWJl IFBvdA== IHBvcnRpb24= IGF0bW9zcA== IGdvdmVybm1lbnRz IGRlcGVuZGluZw== IG9mZmVuc2U= IHRyaWNr YXdh IExpbmU= IFZpcw== IEhhcmQ= IE9yaWc= IENsaWNr IGRlc2s= IFZhbGxleQ== IFNvdg== IG1vdmllcw== IHJlbWFyaw== IG1haWw= IGNvbnNjaW91cw== IHJ1bGluZw== IFJpZ2h0cw== IG1lZGlj aGVudA== IFdvbWVu Pjw= IHJlcGxhY2Vk IFByZW0= IFRoYW5rcw== IHJlbmV3 IEJhbGw= aWZvcm0= IHNob3Rz Q29tbQ== IGFybWVk IGNvbnN0YW50 IHRhc3Rl IHJlYWxpemVk IGJ1ZmY= IG1v IGVmZmljaWVudA== TW9zdA== b3JhdGlvbg== aWZpZXM= IGNvbW11bmljYXRpb24= IGZsb29k IGNvbnNlcXVlbmNlcw== IGFueXdheQ== aWdn IEdN IFRoYW5r IGlyb24= IGV2b2x1dGlvbg== IENvcA== dHdpdHRlcg== IDk1 IHJlbGF0aW9uc2hpcHM= YWRlbA== IFlvdW5n IHByb3Bvc2Fs YXllcnM= dWlsZGluZw== IEhvdA== T1JF Y29z IGNvbGxhYm9y UEc= YXh5 IGtub3dpbmc= IHN1cHBvcnRz b3dlZA== IGNvbnRyb2xz IG1lcmVseQ== dW1lcg== IGF0aGxldA== IGZhc2hpb24= cGF0aA== IGdpZnQ= IGVyYQ== QU5E IGtpbmRz IEtvcmVhbg== IGxlZ2l0 dWxvdXM= IGVzc2VudGlhbGx5 IHRoZXJhcA== bmlj IHN1ZmZlcmVk IGh1cg== IHByb21pc2U= IGV4Y2Vzcw== IG92ZXJ3 IHByaW1l IEhvdXN0b24= ZXJyeQ== IE1z UlM= MjAxMg== IHN0b3Jlcw== IE9seW1w IGpvdXJuZXk= QWx0aG91Z2g= U3Vi IEVkdWM= IENoYXB0ZXI= IHJlcXVlc3Rz IGNvbnN1bWVycw== IHRpbnk= IGlzb2w= IEZhaXI= YmE= IFlPVQ== IGNyYXNo Y2VsZXI= IGVtb3Rpb25hbA== IGdvb2Rz IGVsZWN0ZWQ= IG1vZGVy IExpbnV4 IGJsb2Nrcw== IGlzbGFuZA== IFNvY2lldHk= IGVsZWN0aW9ucw== IGJyb2FkY2FzdA== IGNoZWFw IG5hdGlvbnM= IHNlYXNvbnM= NDAw IHdhc3Rl IFNhdA== IGZpZWxkcw== ZW1wbG95 IHByb2ZpbGU= IGF1dGhvcnM= QUxM IEdyYQ== d2VzdA== IFR5 IGRlYXRocw== IHZhY2M= IGZvcm1lZA== IGR1 IG9uZ29pbmc= IE11c2xpbXM= ZWxm aWd1cmU= IGFzc3VtZQ== IFVrcmFpbmU= d2F0ZXI= IGNvYXN0 IHZvdGVk Z29y IEFT IE1pY2hpZ2Fu YXph IEFybQ== aXJv IGZsZXg= YXN0ZXJz Jyc= IHdlbGNvbWU= YXJs IGxvY2F0aW9ucw== aWdhdGlvbg== IEZpbA== IGJ1eWluZw== IGFyY2hpdGVjdA== IGhhcmRlcg== IEN1Yg== IGludGVyZmFjZQ== IHJlc3RhdXJhbnQ= IGRpc2NvdmVy IGV4Y2VlZA== IGZhdm91cg== Z2VyeQ== IGR1dHk= IHBpdGNo YWRvcg== IE1hY2g= Ym95 IHJlc3BvbmRlZA== IGV4dGVuZGVk aGVycw== TWFueQ== cmFpZA== aWZlcg== IElucw== U2Vy IG1lZGl1bQ== c2hl IFNwb3J0cw== IG1hZ2F6aW5l dXRhdGlvbg== IGxpbWl0cw== IEdhbGw= IGV4dGVybmFs cmF6aWw= IHlvdW5nZXI= dGxl IHJlbWluZA== IENPTg== IGltbWVkaWF0ZQ== IGhpZGRlbg== IHZvbHVudGU= IHNpbXBs b2RjYXN0 IHBoYXNl ZHI= IHBsb3Q= IGV4cG9zdXJl Ukk= b2dyYXA= dmlu YW5pc2g= IEFjYWQ= IEVuZ2luZQ== IGV4cGFuc2lvbg== IFBheQ== WW91cg== IHB1c2hlZA== IEVsbA== IEhlYWQ= IG1hcmtldGluZw== IEFD a2V0 IGhpdHM= IGdybw== IEFnZQ== IFNjb3Q= XVs= IHN0aW0= IGlQaG9uZQ== iJI= IG5hcnJvdw== IEdldHR5 IFR1cmtleQ== IHBlcmZlY3RseQ== IGVuYWJsZQ== dXRjaA== IHByZWNpc2U= IHJlZ2ltZQ== IHNoaWY= IGNvbXBlbnM= Z3Vu ZGl2 IGNob3Nlbg== IEtlbg== QW55 IHRyZWVz IHJlY29tbWVuZGVk IFJlbg== dWFibGU= IEhU Rm9sbG93 RUc= IEhhbmQ= IEtlbm4= IGFyZ3VtZW50cw== IGV4aXN0cw== IGJpa2U= IENvbnNlcnY= IGJyZWFraW5n IEdhcg== IGNyYXp5 IHZpcnR1YWw= YXlsb3I= aXhlbA== IDE5ODA= IHBlcm1pc3Npb24= IFNlcmllcw== IGNvbnN1bWVy IGNsb3NlbHk= Y2FsbGVk IDU0 IGhvcGVz IGFycmF5 IFdpbg== IExhYm91cg== IHNwb25z IElyZQ== IHBvdw== IHJlYWRlcnM= IGVtcGxveW1lbnQ= IGNyZWF0dXJl IHJlc3VsdGluZw== IGFjY3VyYXRl IG1vbWVudHM= IGFyZ3VlZA== IHBlZA== RHVyaW5n IDUz IFRhbA== IHNvdWdodA== IHN1ZmZlcmluZw== IGljb24= bGVl ICgk YWxpYW4= wrA= IHByYQ== IGJvbnVz KCI= a28= IGFjdGluZw== REU= ZmFsbA== IGNvbXBhcmlzb24= IHNtb290aA== IE5BUw== dXBw IEpvc2VwaA== ZXBpbmc= IFRha2U= IE1pZA== IHNlbmRpbmc= ZmFzdA== IEZhbGw= IGRlYWxpbmc= dXNlcg== IE9yZ2Fu Q28= IGF0dGFjaGVk IHNlZXM= JS4= IHR5cGljYWw= QVJU IGZpbmRz IEFzaWE= dW1pbg== IENvcmU= IEVudA== aW5lbnQ= dWNl IEJsb29k IE5ldmVy IGVtYWlscw== IGhpZ2hsaWdodA== IGNvbmZyb250 YXR1cw== dXRlZA== IHVudXM= IHRvcGlj IEFkYW0= IGJsZQ== YXRp IHVuZGVyc3Rvb2Q= U2V0 c3RydWN0 VFA= IG1vYg== YWE= IFN0YXJ0 cGVjdGVk c2VsbA== IGRlZGljYXRlZA== IENB dWFu IHNvbmdz ZXNjcmlwdGlvbg== IHRlY2g= IHJhcGU= IGFzaWRl IGdyYW50 IDU2 c3Vi IGFyZ3Vl IGNvbnRhaW5pbmc= IHNjaGVkdWxl IGxpYmVyYWw= IHB1YmxpY2x5 IGhlYXZpbHk= IFV0 aW5lcg== IFNlY3Rpb24= IENhcmU= d2VldA== bHM= RGlz 4pSA IEZvbGxvdw== QmFjaw== IElU IGJlcw== amk= IEhpdA== ZXN0ZWQ= IGV2ZXJ5Ym9keQ== IFN3ZWQ= IGZlbWlu IGZhY2lsaXRpZXM= IGNvbnZlbg== Q29tcA== IE9T Y29yZQ== IGFueA== IGRpdmlzaW9u IENhbQ== IFN0YW4= bWF0ZXM= IGV4cGxvcmU= cGxvbQ== IHNoYXJlcw== cGxvYWQ= YW5lcw== IGlkZWFs ZXRlcnM= IEJhc2U= IHBsYXN0aWM= IGRpc3RpbmN0 IE5ldHdvcms= IFNlYXR0bGU= IHRyYWRpbmc= ZW5zdXM= aW50ZW5k IGV4aGli IGluaXRpYWxseQ== IEZvb2Q= IHRob3VzYW5k IEJ1c2luZXNz YWN0ZXI= IHBhcmFncmFwaA== IHJvdWdobHk= IHd3dw== IGNyZWF0aXZl IENvbmY= IGNvbnN1bXB0aW9u IGZpbG1z YWdhbg== IG9idGFpbg== IHRhbGw= IHRvcg== IGFja25vd2xlZA== IGdyb3du YWxv S0U= IDQwMA== ZW5kZXJz dGFpbmluZw== VUc= IHN1aWNpZGU= IHdhdGNoZWQ= IExpc3Q= YWxp cmVoZW5z IHN1cnJvdW5kaW5n IHBpcA== IGZseWluZw== IEphdmE= b3JkYW4= IHNlcnZpbmc= aW5hdGlvbnM= cG9zdA== IHNobw== QXY= IGphaWw= enk= IDE5OTk= IDwv IGxpdGVyYWxseQ== IFNpcg== IGV4cG9zZWQ= IGxpZXM= c3Rhcg== IGJhdA== IGVhcm5lZA== IERpZw== IHNwZWNpZmllZA== IFNlYXNvbg== IGRlZ3JlZXM= RG9uYWxk IGNlbnRyZQ== IHNoYXJpbmc= IHdpbnRlcg== IENP Q2hl IM4= TVA= IHVudw== IGZld2Vy IE1pcg== IHNvbWV3aGVyZQ== IEtleQ== IGF0dGFja2Vk IEtpcg== IGRvbWFpbg== IHN0cm9uZ2Vy IDk5 IHBlbmFsdHk= SWQ= U2NyaXB0 IGRlY2xpbmVk IG5lY2s= IGZyYXVk IGN1cnJlbmN5 IHJpc2luZw== UkM= 4oCm4oCm SHo= IHRhYg== IHRhbGVudA== bmFt IE5CQQ== IHZpbGxhZ2U= IGxlZ3M= IE5leHQ= RWQ= IGFjaWQ= IGh5ZA== ODAw IGludm9sdmluZw== IEltYWdl IEJlZm9yZQ== Rmw= IHllc3RlcmRheQ== U291cmNl IHRlcnJvcmlzdA== IHN1cA== IHN5bnQ= IFNhdWRp IHdlc3Q= IHJ1 YnVyZw== IHZpc2libGU= IHN0cnVjaw== cmlzb24= IGF3ZXNvbWU= IGRyYXdu IGFuc3dlcnM= IEdpcmw= IFJhbQ== IHRocmVhdHM= IGRlZmVhdA== b3NpdA== IHZlbnQ= YXR1cmFsbHk= QW1lcmljYW4= ZW5kYQ== IEhvbHk= IHJ1bQ== JSw= Y2FzZQ== IEhpc3Rvcnk= IFlvdVR1YmU= IHNpdHVhdGlvbnM= IEROQQ== U3Rl IHNhdmVk SXRlbQ== IHJlY2lw b2xvZ2lzdA== IGZhY2Vk IGVsaWc= T25jZQ== IExp dWg= IG1pc3Rha2U= IERpdmlzaW9u IEJlbGw= IHN5bXB0b21z wq4= IGRvbWlu IGZhbGxpbmc= IGVuZGluZw== YXNoZXM= IG1hdGNoZXM= IE9ubGluZQ== IGV4cGxhbmF0aW9u RGVm cmVkaXQ= IGFueW1vcmU= IFRvdGFs IEZPUg== dXNoZWQ= IGxldHRlcnM= IHJpc2tz IE9L IHJlcG9ydGVkbHk= Olw= IHBsYXRl IHN1YmplY3Rz IGF0dGVtcHRlZA== aWZpZXI= aWFuYQ== IHVubGlrZWx5 IFRob3VnaA== dW1h IEludmVzdA== IFByaW4= aWNhbg== IERhcg== IENvbG9yYWRv YXVn IHZlZ2V0 YW9z cmlh IHNoZWw= IG1hcmtlZA== ICgp IHNwcg== cG8= IExpbms= IGRlZmU= IEpy IHRoZW1l IHBhc3Npb24= IFBlbg== IGluZm8= aXplcg== IHNoaXQ= IENpdmls YXBzZQ== Y3Jl IHBvbHk= IGNvbXBvbmVudA== IENoYXJsZXM= IElyZWxhbmQ= IFByb3Y= IGRvY3RvcnM= IGdyYW50ZWQ= IHBhaW50 IGhvbm9y IHNtb2tl IHBheW1lbnRz IHByaW1hcmlseQ== IEtpbmdkb20= cmljaA== YXRlbGw= IGRlYWxz IHNjaGVkdWxlZA== IGZ1bmRhbWVudGFs IHByb3RlaW4= IG5ld3NwYXBlcg== IGNsaWVudHM= eXRob24= IERhdGU= aHVz IGZlZWRiYWNr IHN0cmV0Y2g= IGNvY2s= IGhvdGVs IFF1ZWVu IHN1Z2Fy IGp1 IG1pbGs= IGFwcHJvdmFs IExpdmU= IGVxdWl2YWxlbnQ= ZWZ1bGx5 IGluc2VydA== em9uYQ== IGV4dGVuc2lvbg== ZHJp Sm9obg== IGFjY29tcA== U20= IEZ1bmQ= IGNvbnN0YW50bHk= IGBg IGdlbmVyYXRlZA== IEFjdGlvbg== IFBzeWNo IFRyaQ== IHJlY29nbml6ZQ== IHZhcnk= cGhh IFJh ZGY= ZXRjaA== IFNvdmlldA== VHdv IHBhdHRlcm5z IHByb2Zlc3Npb24= YW5pbmc= VGltZQ== IExpbQ== IGNvbG9ycw== IEF6 IFRS IGluZmVjdA== IHBoZW5vbWVu IHNoZWxs QWxzbw== IHB1dHM= IGRlbGl2ZXJ5 IGJyb3du IHByb2Nlc3Npbmc= IGxpZ2h0cw== ZXNzYWdl IEJyb29r IEF1ZA== bGF0aW9u IGluZHVzdHJpYWw= TGlrZQ== IEJyYXppbA== cm91cw== RVNT IEx1Yw== IHNvbWVob3c= IDg1 IHByb3BvcnQ= IHBvbGl0aWNpYW5z IGluZGljYXRl IGhvbGU= IHRlY2huaXF1ZXM= IGNvbXBldGl0aXZl IHBocg== IHZv aXN0ZW50 IERyZWFt IGNhbXB1cw== IGFzcGVjdHM= IGhlbHBmdWw= IHNoaWVsZA== b3JzZQ== IHRyaWdnZXI= bWFs IDU4 IHRvcnQ= IHBlcnNvbmFsbHk= IHRhZw== IGtlZXBz IFZpZGVv IGJlbmNo IGdhcA== YWlyZQ== IGVhc3Q= IHJlY292ZXJ5 cGVyaWFs IHByb2ZpdA== IE1pYw== IDU3 IGNvbG9u IHN0cm9uZ2x5 c3R5bGU= IGFsbGVnYXRpb25z aGFu IHJlcG9ydGVycw== am8= cmluZQ== YXJnZXQ= YW5kYWw= IDAz IGZsYXNo dHJhbnM= IHN0cmljdA== IHBhcmtpbmc= IFBha2lzdGFu IGxp IHdlaXJk IEVyaWM= IHJlZ2lvbnM= IEp1bg== IGludGVsbGVjdA== IFdI b2Rpbmc= cmlidXRlcw== dXBpZA== IFRpdA== IGZpbmdlcg== b3JpYQ== IGVsZXY= IEZpZWxk IGNvbmNsdXNpb24= Ozs= IGZlZWxpbmdz IGV4dGVuc2l2ZQ== IG1peGVk IG5ldXJv dnk= IGhhcmFzcw== IENpcmM= b3VjaA== IHRlcnJpdG9yeQ== IHN1Y2Nlc3NmdWxseQ== TWFy IGluZ3JlZA== IG92ZXJ3aGVs IGxheWVy Vmlldw== IGFsbGllcw== aWxsYW5jZQ== IFRocmVl IGJ1bmNo IG5vcm1hbGx5 IG5ldHdvcmtz IHNhY3I= IENJQQ== Ymxlcw== IGNob3Nl IG9wcG9uZW50cw== IHJlZ2FyZGxlc3M= IGZyYW5jaA== IHByZWY= IFBv IGJyaWRnZQ== YW5uYQ== IFNpbHZlcg== IHdhZ2U= cGFnZQ== cmlvcg== IHJhZGljYWw= IExpdHRsZQ== IG1hbmlw IHNlY3JldGFyeQ== IGdhbmc= RFI= RkE= IGRlY2VudA== IFNwaXJpdA== IHVuY2xl IERldmVsb3BtZW50 IGludmVzdG9ycw== IHdhbGxz IHB1Ymxpc2g= IGdlbmVyYXRl aXNzaW9ucw== Y2Fy IHByb21vdGU= IGN1dHRpbmc= IGNoZXN0 IGRyaW5raW5n IGNvbGxlY3RlZA== IDcy IGhvcGluZw== IGVtYnI= Z29yaXRo IHdhcm5lZA== IGluc3RydWN0aW9ucw== T0c= IERpZA== IEFnZW5jeQ== IGdlYXI= IGNyaXRpY2lzbQ== IEZ1cnRoZXI= IHV0aWw= YW5ueQ== UmVk IGNvdW5zZWw= IEFzaWFu IHJlZHVjdGlvbg== cG9vbA== IHRlYWNoaW5n IGRlZXBseQ== aXk= IGVzdGltYXRlcw== IGNob2ljZXM= IHBlcm1hbmVudA== aW5lbQ== a2Vs IGZhc2M= cHNl ZmlsZQ== IExvdw== IFBlcnNvbg== IHRvdXJuYW1lbnQ= c3RhbA== IG1lbA== VVNU IFJheQ== YXpp VmFs IGNvbnRhaW5lZA== IEhvbGx5 IHdha2U= IHJldmVhbA== IHByb2Nlc3Nlcw== IElTSVM= IDA5 IGJsaW5k IHN0ZWVs IEJhZA== IGNhcmVmdWxseQ== YXBweQ== cm9pdA== IGdhbWluZw== IGhvdXNlcw== IENvbGw= IHRydWNr ZXJt IHNjb3JlZA== IG9jY2Fz cmV0dXJu Ym91bmQ= dmFy IHNoYXJw IGFmcmFpZA== IEVY YW1iZXI= Y2lmaWM= IHNjaGVtZQ== TkM= IFBvbGl0 IGRlY2xpbmU= IDE5OTg= IHB1c2hpbmc= IHBvc3Nlc3Npb24= IHByaXZpbGU= IHRlYWNoZXJz IHlpZWxk SEE= IERhdmlz aXRsZWQ= IyMjIyMjIyM= IHJpZw== IERhbmllbA== YWNvbg== IGhpZGU= dXRlbg== IGNvbGxlYWd1ZXM= IHByaW5jaXBsZXM= IGxvdWQ= IHNpbg== IERlbW9u IHN0b25l IDAy IHRhdWdodA== IHRlcnJpYmxl IHN0dWNr IFBvbGljeQ== dGVlbg== IGltcGxlbWVudGF0aW9u IEJCQw== IEFQSQ== IHdoZWVs YWxsYXM= IGNoYW1waW9ucw== b2xhcnM= cGxheWVy IHJlcGVhdGVkbHk= IFN0aWxs IGxpa2Vz YXN0eQ== ZXN0ZXI= IENhdGhvbGlj Ukw= IGJhdGg= IG5vaXNl dGl0bGU= IG5vcnRoZXJu UGFydA== IG1hZ24= IGZhYg== IEFzaA== IGRpc3Bs IHRpY2tldA== IG11cmQ= IGFsb25nc2lkZQ== IE11c2lj IHJpdmVy IFN0ZWVs IENM IFBsYXllcg== IE11bHQ= b3dpbmc= cmVw c2l6ZQ== IHR1cg== IEdlb3JnaWE= aXNjYWw= cmFjdGlvbg== IGNhYmxl IDU5 IHdpbnM= IHVwY29taW5n IHN1cnZpdmU= IGluc3BpcmVk IEVkdWNhdGlvbg== IHN0YXRpc3RpY3M= IEZvb3Q= aWFtaQ== IHllbGxvdw== IFBhZ2U= Li0= IEhhcw== IHVyYmFu IGF4 ZXNzZWw= XCI= IHF1YXJ0ZXJiYWNr IHJlZ2lzdGVy IExhYm9y IGFiaWxpdGllcw== IEZhbWlseQ== IHZhcmlhYmxl IFByaWNl IGNvbnRlbQ== IHRoaW4= IEVxdQ== ZGF0YQ== IGdvdHRlbg== IGNvbnN0aXQ= IGFza3M= IHRhaWw= IGV4Y2l0aW5n IEVmZmVjdA== IFNwYW5pc2g= IGVuY291cmFnZQ== aW5zb24= IEFo IGNvbW1pdG1lbnQ= Q1M= IHJhbGx5 IDo6 IHN1YnNpZA== IHNwaW4= IGNhcHR1cmVk MjAxOA== IGlubm9j IGFsbGVnZWRseQ== IENvbWU= IGFydGlzdHM= IE51bWJlcg== IGVsZWN0cm9uaWM= IHJlZ2lvbmFs YXBlcw== IHdyYQ== IG15dGg= cHJpc2U= IE1pbGxlcg== IENyZWF0 IEVwaXNvZGU= YmVsbA== IGRpcmVjdGVk IGV4dHJhY3Q= IHNvcnJ5 IHZpY2U= YWdnZXI= IFN1cHBvcnQ= IDY2 IElyb24= IHdvbmRlcmZ1bA== IGdyYQ== TmV0 aW9uZQ== RW5n IHNoaXBz aWtlcw== IEtldmlu aXRhcg== IGFjdGl2aXN0cw== dHJ1ZQ== IEFyaXpvbmE= ZW50aA== IERlc3BpdGU= IFNF IGhhYml0 ZXJuZWw= IGlucXU= IGFib3J0aW9u IHZvaWQ= IGV4cGxpY2l0 IGVuZ2FnZWQ= IGFuZ3J5 IHJhdGluZw== IGZyYWc= YnJv aWNraW5n ZGV2 IHdvcnJpZWQ= IG9ic2Vy IGFwYXJ0bWVudA== IEdU IGVzdGF0ZQ== IENvbnN0aXR1dGlvbg== ZW1vbg== IFNub3c= IGNvdW50eQ== IGRpc2Fn IFN0ZXBoZW4= IGltbWlncmFudHM= d2luZA== IE5hdGlvbnM= IGZvbGtz T3V0 IGdhbGw= IHRhcmdldGVk IHN0ZWFk IEJvbg== IExpYg== IGluZm9ybWVk IDEyMA== Y2hhaW4= aWRlbGluZXM= b3JvdWdo IGRyaXZlbg== IHJlZ3VsYXJseQ== IGJhc2tldA== IHByaW5jaXBsZQ== b2N1bWVudA== IHN0dW4= aWJpbGl0aWVz IFJvbWFu IEFib3V0 IGFsZXJ0 IGRlbW9jcmFjeQ== IHJlcHJlc2VudGVk SFM= Y2Vycw== cGFyZW50 QXJ0 cGFjaw== IGRpcGxvbQ== cmV0cw== IE5P IGNhcHR1cmU= IEFkdg== hKI= IGFubm91bmNlbWVudA== IExlYXI= IGhvb2s= IHB1cnM= IFN1Y2g= IENhbWVy IHJlZnVnZWVz IFZl UG9s IHJlY29nbml6ZWQ= bGli IGhhZG4= QXNz IHBpbG90 dXNoaW5n IHJldHVybmluZw== IHRyYWls IFN0b25l IHJvdXRpbmU= IGNvdXJ0cw== IGRlc3Blcg== IGZyaWVuZGx5 IEl0YWx5 IHBsZWQ= IGJyZWF0aA== IHN0dWRpbw== TlM= IGltcHJlc3NpdmU= IEFmZ2hhbmlzdGFu IGZpbmc= IGRvd250 aW5raW5n IFJvZw== aWFyeQ== Y29sb3I= c2V4 YXJvbg== IGZhdWx0 IE5pY2s= RG93bg== IFJvc2U= IFNvdXRoZXJu WFg= aXNvZGVz TGlzdA== NjAw IG91dGNvbWU= ZXJy IGVsc2V3aGVyZQ== IHJldGlyZQ== IHBvdW5kcw== IEdsb2JhbA== UGVvcGxl IGNvbW11bmljYXRpb25z IGxvYW4= IHJhdGlv IEVtcGlyZQ== IGdvbm5h IGludmVudA== REY= IDE5NzA= IENvbW1vbg== cGF0 IHByb21pc2Vk IGRpbm5lcg== IEhvbQ== IGNyZWF0ZXM= IG9wZXJhdGU= dmVydHk= IEpvcmRhbg== ZXRpbWU= IHN1c3RhaW4= UmVn IGluY3JlZGlibGU= aW1h IHdhcnJhbnQ= IG1t QXR0 IGxhd3N1aXQ= IHJldmlld3M= aXR1cmU= IFNvdXJjZQ== bGlnaHRz IEZvcmQ= IDYz Z3JvdXA= c3RvcmU= IGZlYXR1cmVk IGZvcmV2ZXI= IHBvdmVydHk= IFBvcA== IENOTg== YXp6 YWJpcw== YWNoaW5n IGxhaWQ= IFN1cHA= IGZpbHRlcg== ZW5h IENvbW11bml0eQ== IGNyZWF0dXJlcw== dWN0aW9u IFJveWFs IGFzc29jaWF0aW9u IENvbm5lY3Q= IEJyYWQ= 4paI bGVycw== dGhlcmU= IEdp IHZhbHVhYmxl QUNL IFRheWxvcg== IGxpcXVpZA== IEF0dG9ybmV5 IENhcmw= IEZpbmFs YWdh IFdpbHNvbg== QmVjYXVzZQ== IFByb2Zlc3Nvcg== YWth IGluY3JlZGlibHk= cmFuY2U= ISk= UmVm c2s= IHNvbHV0aW9ucw== IGF0bW9zcGhlcmU= IGJsYW1l dW1lcw== IE5vYg== Q0E= dW1wcw== cmljYWw= IFB1dGlu IERlc3Q= b3JpYw== IFBB IHJlc3BlY3RpdmVseQ== d2Fu IGZpZnRo 4oSi IENyeQ== IGdvdmVybm9y cmVzaWRlbnQ= IHB1cmNoYXNlZA== IGhhY2s= IGludGVuc2U= b2Jz IG9yaWdpbg== IGRlZmluZQ== IGNhcmVmdWw= Kioq IHNob3VsZGVy Q2xpY2s= IHRpZWQ= IGRlc3RydWN0aW9u b3VyZWQ= IG5vYm9keQ== IGhv IEV4cGVy IHRpcA== Ijs= IHRlY2huaXF1ZQ== IGp1cg== IFBvaw== Ym93 IGxlZ2VuZA== IGFjY29yZA== IGJ1c3k= IEludGVs IGhhbmc= YWtp Ll0= 4oCU4oCU4oCU4oCU IHN1cmdlcnk= IHJlcHJvZHU= IHVuaWZvcm0= IHNjZW5lcw== Y29kZQ== IDYy bGlzaGVy IEhhdmU= cGhpYQ== IGNyeXB0 IHJlY29u IHNjcmVhbQ== IGFkb3B0ZWQ= IHNjb3Jlcw== TmU= IEl0YWxpYW4= aW5jbHVkaW5n Qk8= IGluZGljYXRlZA== IGVudGVydGFpbg== R3U= VGV4dA== aWVs IHR3ZW50eQ== IGVuZ2FnZQ== b2Zmcw== IFBhY2lmaWM= IHNtaWxl IHBlcnNvbm5lbA== IHRvbGVy IGRvb3Jz IHRvbmU= IG1hY2hpbmVz IGVudGVyaW5n dGVuYW5jZQ== Q08= IEplcnNleQ== IGZvcmVzdA== IGhvcnNl IGNvbXBsYWludA== IFNwcmluZw== eW8= IFBsdXM= ZWRpbmc= IFJldHVybg== cXVhcnRlcnM= aWFscw== Y293 IGFjYWRlbWlj IGZydWl0 IDE5OTY= b2dldGhlcg== IHdpbmU= IHB1cnN1 IFN0ZXZlbg== IGxpY2Vucw== V2hv IGNsb3RoZXM= cmVjdGlvbg== IHNxdWFk IHN0YWJsZQ== IHJhdw== emVucw== U3Rhcg== dXRpZXM= YW5jZXI= IGtleXM= IE11 IGNvbXBsaWNhdGVk aWdlcg== IFRleHQ= IGFic29y IDY4 IGZ1bm55 IHJlbGllZg== IExldw== IENvb2s= IGNoYXJ0 IGRyYXdpbmc= R0U= IG1vZHVsZQ== IEJ1bGw= SUxM IHNhbHQ= MDAwMDAwMDA= aWxsZQ== IHJlc291cmNl YXdheQ== YWRlbHBoaWE= IEJydQ== IDY3 IHNvbWVib2R5 IHBhcnRpY2lwYXRl IHJvc2U= d2VyZWQ= IG11c2NsZQ== IGNvbnNlbnQ= IGNvbnRpbnVpbmc= IEd1YXJkaWFu IE9yZGVy cmVnb24= IHJlYXI= IHByb3Zpc2lvbg== IGxpa2Vk cmllbnQ= IGJyYQ== VHJhbnM= IG1lZXRpbmdz IHRveA== IGNvbnZlbnQ= IGF1dG8= IHJlY29yZGluZw== IFNvZnQ= MDAx IFJvbGw= IHByb2dyYW1taW5n IHBpYw== IHByb3ZlZA== IHN0YWI= IEFzdA== IGNhcHRpb24= dWxhdGluZw== IEF0dGFjaw== IG5ld2x5 IDE5OTc= ZnI= IGRpc2NpcGw= IEdyZWVr IGVkaXRpb24= IERvZXM= IEJveA== aWZsZQ== YWNrZXQ= IHBhc3Nlcw== IGd1ZXN0 IGFjY2VsZXI= aXRhbHM= VUQ= IGF1dGhlbnQ= IFJlc3Q= b3ZhbA== dGE= dWluZQ== IGFybW9y IFRvd24= IGNvbXBhdA== IGluY2hlcw== RGVzcGl0ZQ== IGFzc2lnbg== aGVyZW50 IHByZXBhcmU= IE1lZw== b2NrZXk= IGRlcGVuZHM= IHRyYWNrcw== d2F0Y2g= IGxpc3Rz IE5vcnRoZXJu IGFsdGVy cmVj IEVhc3Rlcm4= IGNvbmRlbQ== IGV2ZXJ5d2hlcmU= Pyc= IGFmZmlsaQ== IGZvdWdodA== Ijp7Ig== IG1hYw== aXRhcmlhbg== IHNjb3Bl IEFM YXdz YXJtcw== IHF1ZQ== IGVuam95ZWQ= bmVzb3Rh IGFnZ3Jlc3NpdmU= IFN0b3J5 IElW IHJlY2lwZQ== IHJhcmVseQ== IE1lZGljYWw= dmFsdWU= YW5nZWw= YXlpbmc= b21ldGhpbmc= IHN1YnNlY3Rpb24= IHNvdXRoZXJu IGZyZXF1ZW5jeQ== cmV0ZQ== cm9sbGVk dWx0cw== IE5pYw== IGJlaGFsZg== IHNlcXVlbmNl YWJldA== IGNvbnRyb3ZlcnNpYWw= IGNvbXByb20= IHdvcmtlcg== IG1haW5seQ== IGFsZ29yaXRo IE1ham9y b3JjZQ== Z2VuZGVy IG9yZ2FuaXplZA== IGZha2U= IGNvbmNsdWRlZA== IEVE IEV4ZWM= cmFnZQ== IGNoYW5jZXM= YmVycnk= IFRyYWQ= IGNvbmZpZ3VyYXRpb24= IHdpdGhkcmF3 IGZybw== dWRlcw== IEJyb3RoZXI= IEJyaWFu IHRyaWVz IHNhbXBsZXM= IGJpZA== IEdvbGRlbg== IHBob3RvZ3JhcGg= aWZlc3Q= IERP IFBhcmxpYW1lbnQ= KioqKioqKioqKioqKioqKg== UmVt IGNvbnRlc3Q= IHNpZ25pbmc= cHg= IFplYWw= 4pSA4pSA RWFy IGV4aXQ= QmVmb3Jl IENvcnBvcg== bnVsbA== bW9udGg= IHJhY2lhbA== b3R0ZWQ= IFZlZw== IFJldXRlcnM= IHN3b3Jk cHNvbg== IFJvbW5leQ== YWVk IHRyaWI= IGlubmVy IHByb3RvY29s IEJp IE1pYW1p ZXZlcmFs cHJlc3M= IHNoaXBwaW5n IEFtZW5kbWVudA== IEhvd2FyZA== Y29ubmVjdA== IERpc2M= IEphYw== aWFtb25k IFRoZXJlZm9yZQ== c2Vz IFByaW5jZXNz IFVTQg== IEFudGg= IHN1cnZlaWxsYW5jZQ== IGFwb2xvZw== IDYx b3dh IGZ1bGY= anM= IGx1Y2s= dXN0ZWQ= IMKn bmk= IGFudGljaXA= ZW1hbg== IHdpbm5lcg== IHNpbHZlcg== bGxh aWNpdHk= IHVudXN1YWw= IGNyYWNr IHRpZXM= ZXo= IHByYWN0aWNhbA== IHByb3ZpbmNl IFBsYWNl IHByaW9yaXR5 SUNF IGRlc2NyaWJlcw== IGJyYW5jaA== Rm9ybQ== YXNrYQ== bWlzc2lvbnM= Ymk= IHBvcm4= IFR1cms= IGVudGh1cw== IGZpZ2h0ZXJz IDA4 IERldHJvaXQ= IGZvdW5kYXRpb24= YXZpZA== QXJl IGp1ZGdtZW50 Y2xpbmc= IHNvbHZl IERlc2lnbg== V2hlcmU= aGVzaXM= IFRybw== YWZ0ZXI= IG5ldXRyYWw= IFBhbGVzdGluaWFu IEhvbGx5d29vZA== IGFkdmlz IE5vbg== eWVz b2xpcw== IHJlcHV0YXRpb24= IHNtZWxs IGJyZWFk IEJ1bA== IEJlYWNo IGNsYWltaW5n IGdlbmV0aWM= IHRlY2hub2xvZ2llcw== IHVwZ3JhZGU= cm93cw== IGRldmVsb3Blcg== IEpvc2g= IERpc25leQ== ZXJ2ZWQ= aXBhbA== IHVuZXg= IGJhcmVseQ== dGhlbg== IFB1Yg== IGlsbG5lc3M= ZXRhcnk= IEJhbA== IHBhdGNo IGJ1dHQ= IHN0dXBpZA== IERvZw== IERhbGxhcw== ZnJvbnQ= aWVjZQ== IHByb3Rlc3Rz IGNoYXQ= b2VuaXg= IHdpbmc= IHBhcmxpYW1lbnQ= IDc3 b3NleHVhbA== IHJlbmRlcg== cHRpb25z IENvYXN0 b3Nh IEdyZWc= aG9w IE1hbmFnZW1lbnQ= IGJpdGNvaW4= IHJlY292ZXI= IGluY29ycG9y b3JuZQ== IFVzaW5n IHByZWNlZA== IHRocmVhdGVuZWQ= IHNwaXJpdHVhbA== IEV2ZW50 IEZyZWQ= IGFkdmVydGlzaW5n IGltcHJvdmVtZW50cw== IEN1c3RvbQ== IGVycm9ycw== IHNlbnNpdGl2ZQ== IE5hdnk= IGNyZWFt TG9vaw== IGV4Y2x1c2l2ZQ== IGNvbXByZWhlbnM= IGRlbGVn IGNvbmNl IHJlbWVt IHN0cnVjdHVyZXM= IHN0b3JlZA== TkQ= IDEwMDA= VVA= IEJ1ZGQ= QUY= d29tYW4= IEFjYWRlbXk= 8J8= c2Vh IHRlbXBvcmFyeQ== QWJvdXQ= ZXN0ZXJz IHRpY2tldHM= IHBvc3Nlc3M= aW5jaA== b3o= IGxh IGNvbnRyYWN0cw== IHVucA== IGNpZw== IEthdA== dWx0dXJhbA== YXNt IG1vdW50YWlu IENhcHRhaW4= U3RlcA== bWFraW5n IFNwYWlu IGVxdWFsbHk= IGxhbmRz YXRlcnM= IHJlamVjdGVk ZXJh aW1t cml4 Q0Q= IHRyYW5zYWN0aW9u Z2VuZXI= bGVzc2x5 IHx8 IGNvcw== IEhlbnJ5 IHByb3Zpc2lvbnM= IGdhaW5lZA== IGRpcmVjdG9yeQ== IHJhaXNpbmc= IFNlcA== b2xlbg== b25kZXI= IGNvbnNvbGU= aW5zdA== IGJvbQ== IHVuY2VydGFpbg== MTUw b2NraW5n IG1lYXN1cmVk IHBsYWlu IHNlYXRz IGRpY3Q= U0w= YWZl IGVzdGltYXRl aXpvbg== YXRoZXJlZA== IGNvbnRyaWJ1dGVk IGVwaXNvZGVz b21tb2Q= R3I= QU5U IDY5 R2VuZXI= IDI1MA== dmlvdXNseQ== cm9nZW4= IHRlcnJvcmlzbQ== IG1vdmVtZW50cw== ZW50bGU= b3VuY2U= IFNvdWw= IHByZXY= IFRhYmxl YWN0cw== cmlvcnM= dGFi IHN1ZmZlcg== IG5lcnY= IG1haW5zdHJlYW0= IFdvbGY= IGZyYW5jaGlzZQ== YmF0 IGRlbWFuZHM= IGFnZW5kYQ== IGRvemVu IGNsaW5pY2Fs aXphcmQ= IE9w dGQ= IHZpc2l0ZWQ= IFBlcmhhcHM= IGFjdG9y IGRlbGlj IGNvbnRyaWJ1dGU= IGluamVjdA== IEVz YWNjbw== IGxpc3RlbmluZw== IGNvbmdyZXNz ZXBlbmRlbnQ= IHByZW1pdW0= IDc2 IElyaXNo IGFzc2lnbmVk IFBoeXM= IHdvcmxkd2lkZQ== IG5hcnJhdGl2ZQ== b3R5cGU= bW9udA== YmFzZQ== IEJvd2w= IEFkbWluaXN0cmF0aW9u IHJlbGF0aW9u IEVW Q1A= IGNvdmVycw== IDc4 IGNlcnRpZmlj IGdyYXNz IDA0 cGlyYWN5 aXJh IGVuZ2luZWVyaW5n IE1hcnM= IHVuZW1wbG95 IEZvcmVpZ24= c3RyYWN0 IHZlbg== IHN0ZWFs IHJlcGxpZWQ= IHVsdGltYXRl IHRpdGxlcw== ZGF0ZWQ= IGpveQ== YXVz IGh5cGVy YWt1 IG9mZmljaWFsbHk= IFByb2R1Y3Q= IGRpZmZpY3VsdHk= cGVyb3I= IHJlc3VsdGVk cmliZWQ= bGluaw== d2hv fn5+fg== IFNwZWVk IFZpZXQ= V2luZA== IEJhcmFjaw== IHJlc3RyaWN0aW9ucw== IFNoYXJl IDE5OTU= aXRpb25hbGx5 IGJlYXV0eQ== b3B0 IG1hcHM= IENS IE5hdGlvbg== IENydXo= V2lsbA== IGVsZWN0cmljaXR5 IG9yZw== IGJ1cmQ= IHZpb2xhdGlvbg== IHVzYWdl IHBlcm1pdA== IENocm9u IEZhbnQ= IG5hdHVyYWxseQ== IDA3 IHRocm93bg== IEF3b2tlbg== IGFsaWVu IEhlcm8= IEtlbnQ= IFJpY2s= cmlrZQ== IHBhY2U= fSx7Ig== R0w= IHBvaXNvbg== IFRvd2Vy IGZvcm1hbA== YWx5c2lz IGdlbnVpbmU= IGtpbA== YXZlcg== IHByb2NlZHVyZQ== IFByb3A= aW50ZW5kbw== IE1haW4= YXNhbnQ= IHRyYWluZWQ= R2FtZQ== IExvYWQ= IE1B IGNydWNpYWw= IGxldHM= IEZS IGNoYW1waW9u MTAx IENvbmZlcmVuY2U= IHdyaXRlcnM= IGNvbm5lY3Rpb25z IG9rYXk= aXJtcw== IFJhbmQ= IGVuY291bnRlcg== IEJ1ZmY= IGFjaGlldmVk IGNoZWNrcw== aXNjb25z IGFzc2lzdGFudA== IHdoZW5ldmVy IEFjY2Vzcw== IFVy Ymlu IGNsb2Nr aXNw b3BoZXI= IGJvcnJvdw== IG1hZA== IHBlcnNvbmFsaXR5 b25seQ== SVNU YWJhbWE= IGdhaW5z IGNvbW1vbmx5 IHRlcnI= IGh5cG90 IHJlbHk= IHRpc3M= aXNjb25zaW4= IHJpZGlj ZnVuY3Rpb24= IE9yZWdvbg== IHVuY29t cmF0aW5n ZWxhbmQ= IE5D IG1vb24= YW5ub24= IHZ1bG5lcmFibGU= dXRpdmU= wqDCoMKgwqA= IFJhZGlv IHdlc3Rlcm4= c2VjdA== IFRvbnk= IG9jY3Vycw== IE9z IEhvbg== w60= IHZlc3NlbA== IFNjb3RsYW5k IGRpc2NyaW1pbmF0aW9u IHN1YnNlcXVlbnQ= c3RyaW5n IGZhbnRhc3k= IFNoYWRvdw== IHRlc3RpbQ== V0U= aXRp cmFz IGJvYXQ= IG1hcmtz IG9yZGluYXJ5 IHJlbg== IHJlcHJlc2VudGF0aXZl IHBldGl0aW9u IDcz IGFkdmVudHVyZQ== IGlnbm9yZQ== IFBoaWxhZGVscGhpYQ== IFNhdg== VlA= IGZhY3Rvcnk= IHRhc2tz IGRlcHJlc3Npb24= emVk Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= IFN0b3Jt IGNvZ24= IGVsaWdpYmxl IHJlZHVjaW5n dmlh IDA1 IHN0cmlraW5n IGRvbGxhcg== aG8= T1Y= IGluc3RydW1lbnQ= IHBoaWxvc29waHk= IE1vb3Jl IEF2ZW51ZQ== IHJ1bGVk IEZyb250 SU5F IE1haA== IHNjZW5hcmlv IE5BU0E= IGVub3Jt IGRlYnV0 IHRlYQ== VG9kYXk= IGFic2VuY2U= U2lt IGhhbQ== bGVlcA== IHRhYmxlcw== IEhlYXJ0 TUk= S2U= cmVxdQ== VkQ= bWFw IGNoYWlybWFu IHB1bXA= IHJhcGlkbHk= dmk= IHN1YnN0YW50aWFs RVA= ZGVz Y2hhbnQ= aWxpcHA= IFNhbnRh cmllcnM= YW5jaGVzdGVy TG9hZA== IENhc2U= IHNhdmluZw== IDc0 IEFGUA== ZXJuaW5n b3VuY2Vk IE1pbm5lc290YQ== IFdhcw== IHJlY3J1 IGFzc2Vzc21lbnQ= IEJyb24= VUU= IGR5bmFtaWM= IGZ1cm4= dWxhdG9y IHByb3BhZw== aGlnaA== IGFjY29tbW9k IHN0YWNr IFN1cw== d3JpdA== IHJldmVu IEdvZGQ= IFplYWxhbmQ= YWJz IGJydXQ= IHBlcnBldA== aG90 IGhhcmRseQ== IEJ1cm4= 44K5 IHN0eQ== IHRyYW5zYWN0aW9ucw== IGdhdGU= IHNjcmVlbnM= IHN1Ym1pdHRlZA== IDEwMQ== IGxhbmd1YWdlcw== dWdodA== ZW1lbg== IGZhbGxz IGNvYw== gqw= IHN0cmlrZXM= cGE= IGRlbGliZXI= IElN IHJlbGF4 YW5uZWxz IFNlbmF0b3I= IGV4dHJlbQ== IH0s IERlYg== IGJlbGw= IGRpc29yZGVy Y3V0 IGlPUw== IGxvY2tlZA== IGVtaXNzaW9ucw== IHNob3J0bHk= Il0= IEp1ZGdl IFNvbWV0aW1lcw== IHJpdmFs IGR1c3Q= IHJlYWNoaW5n RmlsZQ== wq/Cr8Kvwq8= aW5vaXM= IEphc29u IHNhdGVsbA== YXJldA== IHN0YXRpb25z IGFncmlj IFRlY2hub2xvZ3k= Y29tZXM= IFVuZm9ydHVuYXRlbHk= IENoaWxkcmVu IGFwcGxpZXM= YXN0ZWQ= IGFuZ2Vy YWlsYWJpbGl0eQ== IERhbWFnZQ== IGNvbXBhcmU= IFN0YW5kYXJk IGFpbWVk IEJh YW5ndWFnZQ== IHJlZ3VsYXRpb24= IGp1cnk= IGFpcnBvcnQ= IHNlY3Rpb25z IFByaW5jZQ== ZW1lZA== IG1lZGljaW5l IGhpdHRpbmc= IHNwYXJr b2x2ZXM= IGFkcw== U3RhdGU= IGZvb2Rz IHJlcGxhY2VtZW50 IGNoaWNrZW4= IGxvd2VzdA== IG1pbmRz IGludm9sdmVz dWk= IGFycmFuZw== IHByb2NlZHVyZXM= IFdoaWNo aXZlcnNhcnk= IGJpbGxz IGltcHJvdmVtZW50 IGluZXY= IGV4cGVjdGF0aW9ucw== IGludGVsbGVjdHVhbA== IHNwYWNlcw== IG1lY2hhbmlzbQ== MjUw YnJlYWs= IFpl IFRlbm4= IEJhbHQ= IGJhcnJlbA== IHN0YXRpYw== bWFubg== UG9saWNl IHRpcHM= IGhhbmRsaW5n Y3Vz b2RlZA== aWx0b24= aXJ5 IGpvdXJuYWxpc3Rz b3Vyc2U= IGNvbWlj IG5vbWluZQ== SVRZ IHZlcnN1cw== IGxvb3A= IHN1cmY= IEluZHVzdA== IEh1bnRlcg== IGJlbGllZnM= aXNhbg== IHNldHVw IGJyZXc= aW1hZ2U= IGNvbXB1dGVycw== Zm9s fSwi IE1lZGFs IHRheHA= IGRpc3BsYXllZA== IGdyYXY= IGZpc2NhbA== TW9u IE1vc2Nvdw== IEtvbmc= IENlbnRyZQ== IGNhbWVyYXM= IE1ycw== IEhheQ== IGF2ZXI= IEtlbGx5 cHk= IHJlcXVpcmVtZW50 IGVudGl0bGVk b21iaWU= IHNoYWRvdw== YWdpYw== IEFr IGVsaXRl IGRpdmlkZWQ= IGhlYWRpbmc= IGNvcGllcw== IGxvc3Nlcw== IHZpdA== a2Vk IEJyeQ== IGFucw== IFN0ZWFt IHJlcG9ydGVy aGVpbQ== IEl0ZW0= IHN1cGVyaW9y ZG9u ZXJlbnQ= w7Y= IHRoZXJhcHk= IHBlYWs= IE1vZGVs IGx5aW5n IGdhbQ== emVy cml0dGVu IHJlc3BvbnNlcw== IGNvbnNpZGVyYXRpb24= IEJpYmxl IGxveWFs IGluc3RhbnQ= IHBt IEZvcmVzdA== w7w= IGV4dGVuZA== IGNvbnZpY3RlZA== IGZvdW5kZXI= IGNvbnZpbg== IE9haw== Y2hlY2s= IHNjaG9sYXJz cGVk IG92ZXJzZQ== VG9w Y291bnQ= IEFyaw== wrc= IDA2 IExB bWQ= IExhdGlu aW1lbnRhbA== IENQVQ== IHN1YnN0YW5jZQ== IG1pbm9yaXR5 IG1hbnVmYWN0dXJpbmc= RXI= b2NvbGF0ZQ== IGF0dGVuZGVk IE1hbmFnZXI= cmF0aW9ucw== IGFwcHJlY2lhdGU= b215 R0JU aWRlbmN5 Qkw= IGd1YXJhbnRlZQ== cG9zaXRpb24= IG9jZWFu Y2x1ZGU= IGhlYWRlZA== IHRhcGU= IGxvb3Nl IGxvZ2lj IHByb3Zlbg== IHNwaXI= IGFkbWl0 aXNh IGludmVzdGlnYXRl IDE5OTQ= c3lsdg== IExvc3Q= Y2VzdA== IDcx IHJlcXVlc3RlZA== IHdpbmRvd3M= IFBva8Op IFdpdGhvdXQ= TWV0 IGJlaGF2aW91cg== IHJlYWRlcg== IGh1bmc= IEtlZXA= IHJvbGVz IGltcGxlbWVudGVk IGJsYW5r IHNlcnZlcw== IEpheQ== IGNpdGVk IEZyaWVuZA== cHJvZml0 YXBvbg== IHJlcGFpcg== aXRlbQ== YXJyYXNz IGNyaXRpY3M= YWRp IEZhdGhlcg== IHNob3V0 IGZvb2w= IDg4 IHByb2R1Y2luZw== IGxpYg== IHJvdW5kcw== IGNpcmNsZQ== IHByZXBhcg== IHN1Ym1pdA== IG5pYw== bW9ycm93 44Or VW5kZXI= IHZpdGFs YXRlcm4= IHBhc3N3b3Jk IHB1YmxpY2F0aW9u IHByb21pbmVudA== IHNwZWFrcw== IGJhcnM= IGRlZXBlcg== IE1pbGw= cG9ydGVk IHdpZA== IGJ1dHRlcg== IHNtb2tpbmc= IGluZGljYXRlcw== S2V5 cm9wcmk= IEZpbGU= YWxsaW5n YXN0aW5n IFJ1cw== IGFkag== IDc5 YXZhbA== IHByZXN1bQ== YnVyZ2g= b25pYw== IGZ1cg== IHBvbGxz aWth IHNlY29uZGFyeQ== IG1vbnN0ZXI= aWdz IEN1cnJlbnQ= RXZlbnQ= IG93bmVyc2hpcA== ZW5kYXI= IGFycml2ZQ== IFRheA== IG51bGw= IFByaXY= IHRocm8= IGtpc3M= Y2F0 IHVwc2V0 YW5nbGU= aXRjaGVz ZWN0b3I= b2xvZ2lzdHM= IEdhbGF4eQ== IGNvcnJ1cHRpb24= IGhpbnQ= ZW50ZXI= IEhvc3BpdGFs IGdyZWF0bHk= IGJlZ3Vu ZXN5 IHNvaWw= IEFudG9u IG1haW50ZW5hbmNl 44Op IGRvemVucw== IGh1bWFuaXR5 IEFsYWJhbWE= IHJvbQ== d29ydGg= YXBpbmc= c3lsdmFuaWE= bGFo IGdhdGhlcmVk R0E= IGF0dGFja2luZw== Zm91bmQ= IFNxdWFyZQ== IGFyYml0 aWN0aW9ucw== IFdpc2NvbnNpbg== IGRhbmNl IFNhaW50 YXJjaHk= IGJhc2ViYWxs IGNvbnRyaWJ1dGlvbnM= IGxpdGVyYXR1cmU= IGV4aGE= cGVydHk= dGVzdA== IGJhYg== IGNvbnRhaW5lcg== bGV0dGVy IGZhbGxlbg== IHdlYnNpdGVz IGJvdHRsZQ== IFNhYw== IGJyZWFzdA== IFBM IHZldGVyYW4= IGludGVydmlld3M= IEFsZQ== IGJhbm5lZA== ZW5nZXJz IFJldm9sdXRpb24= aW50aA== IGNvbmNlcm5pbmc= SVZF IGV4cGVuc2Vz IE1hdHRoZXc= IENvbHVtYmlh ZHM= aXN0YW5jZQ== IGVudGl0eQ== Li4uIg== IHJlbGlhYmxl IHBhcmFsbGU= IENocmlzdGlhbnM= IG9waW5pb25z IGluZHU= bG93 IGNvbXBldGU= IHRob3JvdWdo IGVtcGxveWVk IGVzdGFibGlzaG1lbnQ= aWdlbg== IENybw== IGxhd3llcnM= IFN0YXRpb24= VEU= IExpbmQ= IFB1cg== aXRhcnk= IGVmZmljaWVuY3k= 4oCQ IEx5 IG1hc2s= IGRpc2FzdGVy IGFnZXM= RVJF ZXNpcw== IEhvbGQ= IGNhc3VhbA== YmxlZA== IGVuYWJsZWQ= IEVudmlyb25tZW50 IEludGVsbGlnZW5jZQ== aXBlcg== IE1hcA== IEJF IGVtZXJnZWQ= aXNkb20= IGNhYmlu IHJlZ2lzdHJhdGlvbg== IGZpbmdlcnM= IHJvc3Rlcg== IGZyYW1ld29yaw== IERvY3Rvcg== ZXR0cw== IHRyYW5zcG9ydGF0aW9u IGF3YXJlbmVzcw== SGVy IGF0dGVtcHRpbmc= T2Zm IFN0b3Jl w4PDgsODw4LDg8OCw4PDgg== IEtub3c= IGRlZmVuY2U= IHNjYW4= IFRlbg== IENoYWly IFBI IEF0bGFudGE= IGZ1Y2tpbmc= IGFuc3dlcmVk Ym4= IEthcg== IGNhdGVnb3JpZXM= IHJhdGlvbmFs IGN1c3Q= IHJvYm90 IGNvcnJlY3RseQ== IGdpZg== IGdyYXBoaWNz bWlj IGdyb3VuZHM= IE9wcA== aWF0ZQ== IGRpc3RyaWJ1dGVk IHNhbmN0aW9ucw== IGNoYWxsZW5naW5n dXRv IGluZ3JlZGllbnRz IGludml0ZWQ= IGZvdW5kZWQ= IFJlcXU= ZGVk IGJvd2w= IGJyb3RoZXJz IEhh SU8= IHdhZ2Vz aW1vcmU= b2NpYWw= IHNlZWQ= YXRpdmVseQ== IGFkZHJlc3Nlcw== IElvd2E= YWJldGg= IGF0dGl0dWRl aXNk Y2hpbGQ= IG1vbGU= IGRpc2NvdmVyeQ== eWFyZA== QnI= IDgy IHN1cHBsaWVz ZWxsaW5n IGRpc3Rpbmd1 Q1I= IHJlY2VwdA== IHZlcnQ= IHN3aW0= YmVj ZG9vcg== IFllYWg= IGdhbA== IGludGVyYWN0 IEVTUA== IENT YW1wcw== IGNvbnZpbmNlZA== IG9iamVjdGl2ZQ== IGRpc2g= IFBob3Rvcw== bGFk IGRvd250b3du b2ls aW5jdGlvbg== IHRvbW9ycm93 IENPTQ== IHN1cnZpdmFs c2hvdA== IHNldHRsZW1lbnQ= Q29ucw== IFhib3g= aW50ZXJlc3Q= IFNN YXJnbw== ZW5lc3M= IGV0aG5pYw== YmVyZWQ= TWlu IFRvaw== IGluY2VudA== IENvbW1hbmQ= IG1haW50YWluZWQ= IGJyZWFrcw== YnJpZGdl YXRhcg== YWdn IEZpbmFsbHk= dW5pY2lw IE9udA== bGVmdA== IHJlY29nbml0aW9u ICov IFBlcnM= IHdlbGY= IGFkZHJlc3NlZA== IEthbnNhcw== IHZpcnVz IHdoZXJlYXM= IHBhcGVycw== cmFtcw== IE1pbmlzdHJ5 IHBsZWFzdXJl IGFjcXVpcmVk IGR1cmF0aW9u anBn IGNhbG0= IE5ITA== IGJ1cm5pbmc= IGZvbGRlcg== aWNrZWQ= IFB5 IElsbGlub2lz Q2xhc3M= IEdvZGRlc3M= IHBlcmZvcm1pbmc= IHdlbGZhcmU= amFy SW50ZXI= IGxpbg== IGVuaGFuY2U= IG5vdGlvbg== ZmFyZQ== eXBlcw== IEFyZWE= IGNhbm5hYmlz IERpZWdv ZnM= IE1hbmNoZXN0ZXI= Y29tbQ== aW5pdGU= IGNvdmVyaW5n IFNvdW5k IDE5NjA= IDg0 ZWxlY3Q= emluZw== IGNpdGl6ZW4= IHBob25lcw== IHJhaWQ= IGlnbm9yZWQ= IE9iamVjdA== IHVwbG9hZA== Y2FyZA== IG1vZGlmaWVk IHJvb21z aWFo cmFuZ2U= aGVhc3Q= YWNodXM= IHN1Z2dlc3Rpbmc= 4oCL Z3JhZGU= RWw= IGNsb3RoaW5n IHJo IEhhbg== dW5pdHk= ZW5jaW5n IEF1c3Rpbg== c2VjdXRpb24= dHJh ZGVt IFF1YWw= IGhlYXZlbg== IHN0YWdlcw== IHdlZGQ= cGx1cw== aWZpY2lhbA== IEltbQ== IEhv aWV0aWVz IHBocmFzZQ== IGJyaWxs YWN0b3J5 IHByb3ZpZGVycw== IHNpbGVuY2U= IGFlcg== IEFJ IEFkdmVudHVyZQ== IHBsYXRmb3Jtcw== IGRlbW9uc3RyYXRlZA== IGludGVyZg== aW5ndG9u IHJhY2Vz IGdyYWRl dWx0YW5l IFRocm91Z2g= ZmFsc2U= IGJvdw== IEFC IGZsYXZvcg== IGhpc3Rvcmlj Z292 IGNvbG91cg== IHZpZXdlZA== IEVtYWls ZWxjb21l IGludGVydmVudGlvbg== IGRpdmVyc2l0eQ== IHBlcmlvZHM= IHJldmVyc2U= IFZlcnk= IHF1b3Rl IExlZnQ= dGhyb3VnaA== IHNjcmV3 IGxhbmRpbmc= IHBpbGw= IHdldA== IHByb3Rlc3RlcnM= IHJlcGVhdA== YXZlZA== ZXJr IHNhbGFyeQ== IFBlbm5zeWx2YW5pYQ== U3RpbGw= IG1heW9y IGtpdGNoZW4= IGZlYXR1cmluZw== IE11c2V1bQ== IFRvdXJuYW1lbnQ= IEZhbA== IHNlcnZlcnM= VUM= IGFueWJvZHk= aW1n IFRyYWRl aXh0dXJl dGhlbGVzcw== IGZpbmFuY2U= IGNsb3Npbmc= IFBhdHJp aWFj YWJlbA== ID4+ b3JvdXM= IGZpcm1z c2NyZWVu dW5h IGVtYmFycmFzcw== dWxzZQ== IGxldHRpbmc= IHRocmV3 aWxleQ== IGNoYW5uZWxz bGFu IFZlZ2Fz IHNlYXI= IGZhbnRhc3RpYw== YXJyZQ== dXp6bGU= IERlcg== VGhvc2U= IHN3aW5n IHNoZWV0 aW5kZXg= Y292ZXI= b2dhbg== IHZhcmlhYmxlcw== IFRlY2g= IHNwb2tlbg== YWNoZWw= IERh IE1vdW50YWlu IGxvYWRlZA== IGZvb3RhZ2U= dmVyc2lvbg== IHVubA== IFBob2VuaXg= IHRocm93aW5n IGZpcmluZw== IHRyYWNraW5n IHdpZHRo IHN0cnVnZ2xpbmc= cm9vbXM= b3Rpb24= IG1vbnRobHk= IFNlcnZlcg== IGVnZ3M= b3Blbg== TUM= IDE5OTM= IGhpcmVk IHN0YXllZA== IEFsbGVu IHN0cm8= IDk4 c3RlcA== IFR1cmtpc2g= IGZhYnJpYw== aXN0aW5n IERvbQ== IGRhdGVz IHByb24= IGJhc2tldGJhbGw= IGx1Y2t5 IEFyYWJpYQ== IGFzc3VtZWQ= ZXN0eQ== IGFmZmFpcnM= IGdsYWQ= IEluZGVlZA== IEZB IFdvcmQ= IGpvaW5pbmc= aWZpY2U= cHJlYWQ= aXJ0cw== IFNlbGVjdA== IHBvcHVsYXRpb25z YXdhcmU= IG5vc2U= IGNvbXBsYWludHM= c3RhcnQ= IHNjb3Jpbmc= VGhhbmtz IG1pbmluZw== IHZpc2l0b3Jz U0g= IGRhbWFnZWQ= IGNoYXJhY3RlcmlzdGljcw== IFBlbnQ= REM= IDgz IFNpeA== cmF0ZXM= IGZsYWdz IEJyZXc= ZG9n TWFyaw== Ly8vLw== IGV4ZWN1dGlvbg== IGpva2U= cGhvbmVz IHRlc3RpbW9ueQ== IG9ic3Q= UUw= IEN1dA== IHN0dWRpZWQ= IE5pbnRlbmRv aWNrZXQ= IE5CQw== IGxhZA== IEJyYQ== IE1vaA== IGtlcm5lbA== IG92ZXJ3aGVsbWluZw== IGFnZWQ= IGFwcGxpY2FibGU= IENvbmQ= IHJvYWRz IEJsb2Nr bWFkZQ== b2RnZQ== IGNvbW1hbmRz IG9mZmljZXM= dmVsYW5k IHR1dA== IHJlY2VpdmVy IEZybw== IHNob3BwaW5n IGlQ IFN0cmU= IEFCQw== IGVudGVydGFpbm1lbnQ= IEJvdw== b3J0ZWQ= TWM= IHJlYWRz Z3JhZA== IENvbGxlY3Q= IOKIkg== IENhcGl0YWw= ZWRlcmF0aW9u IGVtcGxveWVy IGludm9sdmVtZW50 IGFueGlldHk= YWxpYQ== IHJvb2Y= IEFtb25n IERlbW9jcmF0 IHN0YXRz IFZpbGw= IGNvbnN0aXR1dGlvbmFs IHJlZmVycmluZw== aXR0eQ== IHRhY2tsZQ== b3V0dWJl IGJhY2tlZA== IEhvbmc= IEJyb2Fk IGVsZQ== IE90dA== IDE5OTI= aG91cg== YWNodXNldHRz Q2Fs IGRlZmVhdGVk IDgx ZXNw IHNlZW1pbmdseQ== d2Fz IEplbm4= IEt1cmQ= IGdlbmU= IGRpc2NvdW50 UmV0 RUNU KCk7 IGNsdWJz IHNpZA== IE1hcnNo Q2hlY2s= IHBw IEVhZw== aWRlc3ByZWFk IGJlaW5ncw== RlQ= IGludHJvZHVjdGlvbg== IENoYW5nZQ== QVJE IDExMA== YWRvd3M= aWVyY2U= IG1lYWw= YXV0aG9y IEJhbmc= bGFob21h IHJhbmtz MjAxMQ== Pz8/Pw== bWF4 IGNvbGxhcHNl IG9wZW5z IGVjaG8= IHNvcGg= IHJhY2lzdA== IGVub3Jtb3Vz IHdhdmVz IHRhcA== IGNvbXByZWhlbnNpdmU= Li0t IFJveQ== IGZhcm1lcnM= UmVsYXRlZA== YWlyZWQ= cm9uZXM= IENyaW0= IHByb3BvcnRpb24= IGRlc2lnbnM= IG5lZ290aWF0aW9ucw== IHZpcnR1YWxseQ== IEJhdG1hbg== IHdhcm4= IGxlZ2l0aW1hdGU= bWF0ZQ== IGNvbnZlbnRpb24= LCw= bmV0aWM= IFNE IGNvbnNpc3RlbnRseQ== IGNvbXBlbnNhdGlvbg== IHB1bmlzaG1lbnQ= IHll IHRpZQ== IEJ1cmVhdQ== aXJsZg== IEJ1 IEFyZW4= IFBoaWxpcHA= IGtuaWZl IG1lbW9yaWVz IFJvc3M= IGFuZ2xl IDg2 IFRodW5kZXI= IHJlbmQ= IFRvdXI= IGNvdW50cw== c3VuZw== IEltcA== IGVkdWNhdGlvbmFs IGFjY2Vzc2libGU= Q09N IGRyZXc= eWVy R2w= YW1pbmU= T1JU T0I= SUI= bWFzdGVy IHRyaWFscw== b2d5 aGFy IFRydXN0 IHByZWZlcnJlZA== aXJsZnJpZW5k IE5ldg== IGJpbg== IGNvdw== UGFnZQ== IHNpZ25hdHVyZQ== IEJM NzAw IHJldGlyZWQ= IGJ5dGVz IG5laWdoYg== IExlZ2VuZA== IGRldmFzdA== IHN1c3BlY3RlZA== aXNvbnM= IFBva8OpbW9u c2NhbGU= IGNhcGFiaWxpdGllcw== IHJldmVs IGNoZWVzZQ== ZHk= aWdyYW50 IGZhaWxpbmc= Yml0cw== IEhlcm9lcw== IEdob3N0 IFNjaWVudA== IGFwcG9pbnRlZA== dXJp IGluc3RpdHV0aW9u IGV4cGFuZGVk Z3JlZw== IG1vbml0b3Jpbmc= IHBvZGNhc3Q= IGNvYWxpdGlvbg== IDk2 Sm8= IHN0b2xlbg== IFNhYg== IHN0b3Bz IGhvbGlkYXk= IGludHI= Q2Fy QmxhY2s= IExHQlQ= IHdhcm1pbmc= IEFuZGVyc29u IDg5 IHByb2R1Y2Vy TWVk IGFjY3VyYWN5 IE1hcnZlbA== aXphYmV0aA== IFBhdHJpY2s= bW9ueQ== IG1pbmk= YWNsZXM= IG92ZXJ0 dGhleQ== IG1lbWJlcnNoaXA= IFZlbg== IGV4Y2g= IHJlbW92YWw= IERhdmU= VFk= bWFk IEZpbmQ= IGFkZXF1 IGVj IHRlZXRo IGVtb3Rpb24= IHBlcm0= IHNvbGVseQ== ZGI= IGV4dHJhb3Jk SUdIVA== Y2Fs IGd1aWRlbGluZXM= IGR5aW5n IHN1c3BlbmRlZA== IFByZW1pZXI= IEFudGhvbnk= ZWx2ZQ== IGRhZA== IEV0aA== IEZvb3RiYWxs IGFiYW5kb25lZA== IDw8 IG1hcmNo IGhvcnJvcg== 4oCmIg== IGNoaWxkaG9vZA== IGNhbXBhaWducw== IGx1bmNo IEFsYmVydA== YmxvY2s= 4paI4paI b3VuZGluZw== IGJvbmU= b3JnYW4= YWRlcnM= IEZsYXNo IERyaXZl IHRvbmlnaHQ= IHdhcnM= IEZM IGZvcm1hdGlvbg== Y29uc3Q= TmV3cw== IGNvbXBl b3Jpb3Vz IFN0YWZm IGRpc2N1c3Npb25z IFByb3RlY3Rpb24= IEphbQ== IGNyaXRlcmlh IGluc3RhbGxhdGlvbg== IGFjY29tcGxpc2g= aXp6YQ== IHB1Ymxpc2hlcg== IHJlc2N1ZQ== IFRyeQ== VUxM IFNvbQ== IEhvcA== b3JldA== dGhz b3Jkb24= IHBvY2tldA== IEludg== RG93bmxvYWQ= IENyaW1l IGJlbmU= IEd1aWRl IEFzc2VtYmx5 IHBhcmFtZXRlcnM= SUU= IEFsZXhhbmRlcg== IGNvbmNlcnQ= IFNjaGU= IHNob2Vz IHZpc2l0aW5n IHJlY2FsbA== IGJ1Yg== IHJ1cmFs IGNvbmNyZXRl IFJvcw== TmV4dA== UnVzcw== IGxvYW5z IFNoaWVsZA== IHRyZW0= aGVtYXQ= a2c= IEhhcnJpcw== aXNpdGlvbg== IE1vdmU= IEZD IGZhdGU= IENobw== IHRpcmVk IHByaW5jaXBhbA== aGlzdA== aWVuY2Vz YXRoeQ== IHNldmVudA== IG1vb2Q= IHN0cmF0ZWdpYw== IGRpc2Vhc2Vz IGZvcnVt IHRlbXBvcg== IGhlYWRxdWFydGVycw== UGFy aWdl ZmxpeA== IGd1aXRhcg== IDk0 T25seQ== IHJlbGVhc2Vz cm9waA== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IDYwMA== IENvbnRpbnVl aWdhdGU= IENyaXQ= c3lzdGVt IGRpc2FibGVk IHVuZXhwZWN0ZWQ= aXRodWI= IHVuY2xlYXI= IEVzdA== IGNvbnRyYWQ= IHN0cmF0ZWdpZXM= dmVudHVyZXM= IHBhc3NhZ2U= QU1F IGltcHJvdmluZw== IHJldmVhbHM= IGRlY3JlYXNl b3Zh IGFubm95 IFNob3J0 IExpYnJhcnk= IGN5YmVy bmVsbA== IEh1cg== IENC IHBob3RvZ3JhcA== VUk= IHNlZA== R2U= IDg3 IGRpdmVyc2U= IGVuY291cmFnZWQ= IGNvbnNwaXJhY3k= IGJpcmRz IG9wZXJhdG9y IGhhbmRmdWw= IGNsYXNzaWZpZWQ= Pyk= IGRyYW1hdGlj IGludmVzdGlnYXRvcnM= aXRv IHdpZGVzcHJlYWQ= IFJvb20= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGNvbGxlY3RpdmU= IGpvdXJuYWxpc3Q= U3RyaW5n IHRlbXBlcmF0dXJlcw== aWxh IGd1aWQ= IGluc3BlY3Q= IG1pc3NpbGU= IE1heW9y IG1hbnVhbA== IHNpbXVsdGFuZQ== IHJhdGluZ3M= IHN1Y2s= IDk3 IHVuaXZlcnNhbA== IHBoYXJt IGRpc3J1cHQ= aWFubw== QVY= IGZ0 IHN0YXRpc3Q= b2xkcw== IFdhbGtlcg== cGhw IHVuZGVydA== IExhcw== aXNob3A= bnRpbA== cmVzaG9sZA== IFdoZXRoZXI= TXM= IGRlbnk= IENsb3Vk IHByb3ZpZGVy IHN1cnZpdg== IFVwZGF0ZQ== aGFz IG1pc3Rha2Vz Y2hhcmdl cGxlZA== cml0eQ== IG5vZGU= IE1hc3NhY2h1c2V0dHM= b29scw== bGljYXRpb24= IGZhaWxz ZW1hbGU= b3Jp YmFja3M= IHNoaXJ0 ICcn IE5BVA== IHdhdGVycw== ZWxzb24= IGVhc2U= IHNjYXI= IGNvbnRlbnRz bWluZA== IGNvbnRyaWJ1dGlvbg== IHNocg== IGhhbmRlZA== IHN0YWJpbGl0eQ== IHRyYXZl RW0= IG1pcnJvcg== MTIz IHdlaWdo IGZpY3Rpb24= b3V2ZXI= aXN0YW50 cml0aW9u IEZlZA== IHBoeXNpY2FsbHk= IHN0YWtl IEFydGljbGU= IEFyYw== IExld2lz IE1pbmQ= IGRlbW9uc3RyYXRl IHByb2ZpdHM= dmlzaW9u b21pYw== b2xpZA== IGJhdHRsZXM= IGRyaXZlcw== IGVhc3Rlcm4= IFNvbnk= ISEh YXJhdGlvbg== dmFyZA== IEdM cG9ydGF0aW9u IDky IGxhd21ha2Vycw== IHByb3RlY3Rpbmc= IEVQQQ== IHllYWg= IHNoYW1l b2xwaA== ZXZlbg== eGl0 IGF0dGFjaA== IHJlcHJlc2VudGluZw== IG9icw== IFV0YWg= aWZmcw== IEZyZWVkb20= w7M= QUs= IGluY2lkZW50cw== aXRhZ2U= IHZpZXdlcnM= Y2Q= IG1vdXNl IGNsYXI= IGFjY29yZGFuY2U= IGJvdA== Y29y IFN1bW1lcg== aGVsZA== IGlubm9jZW50 IGluaXRpYXRpdmU= b2xz X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= IHNwb3Rz cGFjZQ== IGNvbnZlbnRpb25hbA== IGNvcnBvcmF0aW9ucw== IGJsb2NrZWQ= SEQ= YXR0ZXJlZA== IHJlZmVycw== IGJ1Y2s= IERpZ2l0YWw= MTIw IHRvcGljcw== VEY= xIE= YnJpZA== cmVlbWVudA== IHVuZGVybHlpbmc= IE1lbWJlcg== IGludmVzdGlnYXRpbmc= IHByZWduYW5jeQ== IHRvdWNoZG93bg== IEJhbmQ= IENhbGxlcg== IGluc3RhbmNlcw== UFA= d2E= R29vZA== IDE5OTE= IENvbGQ= IGZlYXJz IHJlbWFya3M= hpI= YXRhbA== IG1pdA== IGV4cGVyaW1lbnRz aXB0 Q29sb3I= aW5kdQ== VXBkYXRl IDkz QWc= IOU= YW5jb3V2ZXI= Qm90aA== IGp1ZGdlcw== T2JqZWN0 IHN0ZXJl dW1ibg== IHBhcnRpY2lwYXRpb24= IFN0YXJz IEplcmU= IHdlZWtseQ== IEJhbg== IGNvbnZlcnNhdGlvbnM= IFBpdHQ= dXo= IEluZGlhbmE= IEtpY2s= IGluZmVjdGlvbg== IGhlcm9lcw== IHNldHRsZWQ= IHN0cmlw IGhhbA== IGR1bXA= IFNjaQ== IGxlcw== IHJlZmVyZW5jZXM= IFVSTA== IEJyaWRnZQ== IHdhbnRpbmc= Rm9yY2U= IGV4Y2x1cw== TWVhbndoaWxl bW4= IGdlbnRsZQ== bWFrZXI= c2VuYWw= IEdybw== b3VyaQ== IFJhaW4= IEFsbGlhbmNl IGxpZnQ= ZWxh U0Q= IENsZXZlbGFuZA== IHJhbmtlZA== IHN0YWRpdW0= IGRlYWRseQ== 5Lg= IHJpZGluZw== YXJpYQ== IEFybW9y IGRvY3VtZW50YXRpb24= IEdyZWVjZQ== cmVlaw== IGxlbnM= IFNh IGdyb3Nz IEVtZXI= YWdlcnM= IER1Yg== IFJo IEFNRA== IGFycml2YWw= IGRlc2VydA== IHN1cHBsZW1lbnQ= IFJlc3A= IGtuZWU= IG1hcmdpbg== Zm9udA== b2dn MjAxMA== IFBpcg== IFByb20= aXZhbHM= IGludGFrZQ== IGRpZmZlcmVudGx5 dWdz IGJpdHM= Y2x1ZGVk IHNlYXJjaGluZw== IER1 dW1ibGU= IGZ1bmN0aW9uYWw= IEJhbHRpbW9yZQ== IENvdWxk IGRlc2lyZWQ= IGNpcmN1aXQ= IEx5bg== IEdP IEZhbHNl cmVwcmU= Jzo= YWx0aWVz IG1pbmlt IGRyb3Zl IFNob3VsZA== IGhpcA== IHByb3M= IHV0aWxpdHk= IE5hdHVyZQ== IE1vZGU= UHJlc2lkZW50 b3Bw cmF0 Zm9ybWFuY2U= IGNvbmNlbnRyYXRpb24= IGZvbnQ= IEJ1ZA== IGFtaWQ= IHJldmVycw== IE1M QmFy IGludGVyYWN0aW9u IGp1cmlzZA== IHNwZWxscw== ZGVw Zmls IGNpdmlsaWFucw== dXR0ZXI= IENvb3Blcg== IEJlbG93 IGVudHJhbmNl IGNvbnZlcnQ= IGNvbnRyb3ZlcnN5 b3dlcmVk IGNvbnRyYXJ5 IGFyYw== IEV4ZWN1dGl2ZQ== IE9mZmljZXI= IHBhY2thZ2Vz IHByb2dyZXNzaXZl d2lkdGg= IHJlc2VydmVk dm9s IFNhbXN1bmc= IHByaW50ZWQ= IGNlbnRlcnM= IGludHJvZHVjZQ== IEtlbm5lZHk= IG9kZHM= IHN1cmVseQ== IGluZGVwZW5kZW5jZQ== IHBhc3NlbmdlcnM= cmVwcmVuZQ== IEJlaA== IGxvdmVz IEVTUE4= IGZhY2lsaXQ= IGlkZW50aWNhbA== IGRvY3Q= IHBhcnRuZXJzaGlw Y29uZg== IEhpZGU= IGNvbmZ1c2Vk IENvdw== TWVu IHdyZXN0 IElyYXFp IGhvbGVz IFN0dWRpZXM= IHByZWduYW50 aGFyZA== IHNpZ25hbHM= SVg= IHB1bGxpbmc= IGdyYWR1YXRl IG5vbWluZWU= RGF0ZQ== IHBlcm1pdHRlZA== IOKCrA== IE9rbGFob21h U3RhcnQ= IGF1dGhvcml6ZWQ= IGFsYXJt IENvcw== dmFu IGdlbmVyYXRpb25z Y3VsYXI= IGRyYWdvbg== IFNvZnR3YXJl IEVkd2FyZA== IGNvbnRyb2xsZXI= U2Vu Z2VyZWQ= IFZpaw== IGFwcHJvYWNoZWQ= VGhhbms= IGNhbmNl IGZvcm11bGE= IFNtYWxs IHdlYWtuZXNz IHJhbXA= aXR1ZGVz anVk IGJyaWxsaWFudA== IGFjY3Vz c291cmNl IDgwMA== IEV2aWw= U3c= IGhvbWVsZXNz d2Vlaw== aWVucw== cmljcw== IFRoaXJk VE8= IG9yZ2FuaWM= IHByZXNlbnRhdGlvbg== YWdo IERvd25sb2Fk dmF0aW9u IGFzc2VtYmx5 b3JhYmxl aG9sZGVycw== IEJlcm5pZQ== IEhlbHA= IHRvbmc= IEZpZ2h0 IGJlYWNo Qm9vaw== IExpYw== IHJ1c2g= IFJvdW5k b3Vw IE1hcng= IGNhbGN1bGF0ZWQ= IERldmls IFNhcmFo IG9jY2FzaW9uYWxseQ== IGJ1bGxldA== QXZhaWxhYmxl Z2F0ZQ== IDkx IGhvc3A= IHByb21pc2Vz IEhJVg== IFN0YWRpdW0= IFN0b2Nr IENvcnBvcmF0aW9u Z2FnZQ== Tkc= IENyZWRpdA== IHNuZQ== aWJs IGFjY3Vt c3VjaA== IHRlcnJvcmlzdHM= IGNvbnNjaW91c25lc3M= IFpo IGRyYW1h b29sYQ== cGlyYXRpb24= IGxhYm91cg== IE5pbg== IHV0dGVy IGRlbW9jcmF0aWM= IGFzc2Fzcw== aWxhdGlvbg== IGdlc3Q= IGFicm9hZA== IG1ldGFi IHNvcnRz IGZsYXY= VUI= IG1n IE5vdGhpbmc= IE9k IG11c2ljYWw= MjAwOQ== IGRyb3Bz b2NhdGVk YXRlcmFs MDAwMDAw IGdyZQ== IGVxdWFsaXR5 IGJ1cmRlbg== IHZpZw== IExlYWRlcg== LS0tLS0tLS0tLS0t IGNlcmVtb255 IGZpZ2h0ZXI= IGFjdG9ycw== IOY= YW1hbg== Rmk= IGFsaWdu cHV0ZXI= IGVsZGVy IE5TQQ== IHJlcHJlc2VudGF0aW9u IE9udGFyaW8= SVRI dXNhbGVt IGhhcmFzc21lbnQ= aXR6ZXI= IHN5bXA= IGJveGVz IERS IG1hbmlmZXN0 YXRyZQ== IF4= IGRpZXM= bGV0b24= IG1pc3Npb25z ZXRoZQ== IHJlc29sdmU= IGZvbGxvd2Vycw== IGFzYw== IGtt bG9yZA== YW1tZWQ= IHNpbGVudA== IEFzc29jaWF0ZWQ= IHRpbWluZw== IHByaXNvbmVycw== IEtpbmdz IEZpdmU= IHRvd2Vy IGFwcHJvYWNoZXM= IHByZWNpc2VseQ== IGJ1cmVhdQ== IE1vdGhlcg== IElzcw== IGtleWJvYXJk aXR1YWw= IGZ1bmRlZA== IHN0YXlpbmc= IHBzeWNob2xvZ2ljYWw= IG1pbGU= IExlb24= IEJhcmI= d2lsbA== IHdpZGVy IEF0bGFudGlj IHRpbGw= IFJvbWU= cm90 IGFjY29tcGFu IGZsb3Vy YWNv V29ybGQ= IEV4cHJlc3M= IFl1 Q29y IHBsZWFzZWQ= cGFydHk= IHBvaW50aW5n IGluZmxhdGlvbg== IHJveQ== ICks YWluZXI= IHdlZGRpbmc= b3Jtb24= IHJlcXVpcmluZw== IHF1YWxpZmllZA== IHNlZ21lbnQ= RU5E IHNpemVz ZWFscw== IGNvcnJ1cHQ= YXNzYWRvcg== IGNlbGVi IGRyZWFtcw== IE1lc3M= IGNoZWNraW5n IFZlcnNpb24= IHByZXBhcmluZw== IGFjdGl2ZWx5 IERpZmY= IGx1eA== IFdpbnRlcg== YWN0ZXJpYQ== IE5F IGRlcHV0eQ== IHRyYW5zZ2VuZGVy IHN1bW1hcnk= IGluaGVy ZXJpZXM= Y2hhcg== IFlhbg== IGtub2Nr IFBhdGg= IGxpcA== cm9sbGVy IGltcHJlc3Npb24= IGNlbGVicmF0ZQ== IHNsaWRl IGd1ZXN0cw== IGNsaXA= RlM= IHNhdmluZ3M= IGNhcHRhaW4= IGxlZ2FjeQ== IERlbnZlcg== IHdvdW5kZWQ= dGFib29sYQ== QUNU IHB1cnN1ZQ== IG94eQ== IHE= IHNlbWk= IE5lZWQ= IEFmZmFpcnM= IG9ic2M= IGNoZWNrZWQ= IGR1YWw= Q29kZQ== IE1E bGVt dWx0eQ== IMKp IEVsaXphYmV0aA== IGNlbnR1cmllcw== YXJkZWQ= c3Jj IGV2aWRlbnQ= ZW5uaXM= YXRpbg== IHVuZW1wbG95bWVudA== IE1hcmlv IGludGlt Q2hyaXN0 IGJpb2xvZ2ljYWw= IHNvbGRpZXI= IEFkZGVk IG1hdGg= IEdpbA== IGJpYXM= IGRhdGluZw== IE9jZWFu IG1pY2U= TXVz aGlyZQ== IFRlcw== U2VydmVy bGltaXRlZA== U2l6ZQ== IG1ldGVycw== IHJvY2tldA== ZXNzZWU= IGNlcnRpZmljYXRl IElyYW5pYW4= QVNT IGdyaWQ= RGVj IHJvbGxpbmc= Y29tbXVu IFN3ZWRlbg== YnVyeQ== IHRpc3N1ZQ== IHJhY2lzbQ== IExvY2Fs IG15c3Rlcnk= IGV4YW1pbmU= IHN0ZW0= IHNpdHM= IGhvcGVk b3Rpbmc= IGRpYWxvZ3Vl IHBlcnN1 V2F0Y2g= bGF5 TUFO IGNocm9uaWM= IFBvcnRsYW5k bWFya2V0 IFNFQw== IHBhcmFsbGVs IHNjYW5kYWw= IGNhcnJpZXM= IHBoZW5vbWVub24= aHVtYW4= YWNrZXI= IE94 IHJldGlyZW1lbnQ= dGFpbm1lbnQ= b3ZpZQ== IEdlYXI= IGR1dGllcw== IGRvc2U= IHNjcm9sbA== TUI= aW5m IHNhdWNl IGxhbmRzY2FwZQ== cmVkZGl0 IENoYW1waW9uc2hpcA== IFJlZGRpdA== YWxpZA== IGNvaW4= IG92ZXJz IHBvc3Rpbmc= YWJvdXQ= IGZlbA== YW5keQ== IGJvbGQ= IGZvY3VzaW5n ZWZmZWN0 R1I= IGRlZW1lZA== IHJlY29tbWVuZGF0aW9ucw== IHN0ZXBwZWQ= IHZvdGVy IERlZXA= IEluc3RhZ3JhbQ== IG1vZGVyYXRl IE1hcnlsYW5k IHJlc3RyaWN0ZWQ= IE1C IENoYWxs IHRvYg== IGNpcg== IE9jYw== IEV2ZXI= IGNvbGxhcHM= SU5GTw== PS0= IFBpY3Q= IEFjY291bnQ= bmM= IG91Z2h0 IGV4cG9ydA== IGRydW5r KCc= IHdpc2U= IE1vcnQ= bmVjZXNz IGFuY2VzdA== IEluY3Jl IGZyZXF1ZW50 bWly IGludGVycHJldGF0aW9u IGRlcGVuZGVudA== IGNvaW5z IEJvbA== VmlkZW8= IEp1c3Rpbg== IGZhdGFs IGNvb2tpbmc= IGNvbmZ1c2lvbg== aXBoZXI= IGN1c3RvZHk= IE1vcmdhbg== b21hY2g= IEdvdmVybm9y IHJlc3RhdXJhbnRz ZWxpbmc= IGFja25vd2xlZGdlZA== IHRoZXI= IGdlbmVz Y2hpbmc= SGV5 IHRhY3RpY3M= IE1leGljYW4= IHZlbmQ= IGhlcw== cXVlcg== IG5vdGluZw== IENhbWVyb24= IHRhcmdldGluZw== cm9jaw== IGNyZWRpdHM= IGVtb3Rpb25z IHJlcHJlc2VudGF0aXZlcw== bmV3cw== IGxlZ2lzbGF0aXZl IHJlbW92aW5n IHR3ZWV0ZWQ= IENhcnRlcg== IEZpeGVk IGZvcmNpbmc= IHNwZWFrZXI= IG1hbGVz IFZpZXRuYW0= bGluZWQ= IGNvbmNlcHRz IHZvaWNlcw== b2ly IFRyaWI= V2hl IEplcnVzYWxlbQ== IFNhbnQ= IGN1bA== IGxhZHk= IEhhd2Fp IGFydHM= IElubg== IE1hY2hpbmU= IEVtcGVyb3I= IHNsb3Q= Z2x5 IFByb2Nlc3M= SUlJ IGF0aGxldGVz IFRlbXBsZQ== IFJlcHJlc2VudA== IHByZXNj IHRvbnM= IGdvbGRlbg== IHB1bmNo IEdS aXZlcnBvb2w= IGVuYWN0 IGxvYmJ5 IG1vcw== IHBpY2tpbmc= IGxpZmV0aW1l IGNvZ25pdGl2ZQ== RWFjaA== em8= IGR1Yg== IGNvbnNpc3Rz b2xu IGZlc3RpdmFs YW1vdXM= IGludGVsbGln d29yZHM= IFNtYXJ0 IGRlbGU= IGxhcHQ= IG1hZ2ljYWw= IFNpbg== YnVz dXJpdGllcw== aWdodGg= IFJ1Ynk= IFN1cmU= b2x2aW5n IGp1bg== T1NU IGltcG9zZWQ= IGFzdHJvbg== IGNvcnJlbA== IE5T IEtpdA== IEZ1dHVyZQ== YnVybg== IGltbXVuZQ== b2N1cw== IGNvdXJzZXM= IFN0cmluZw== IGxlYW4= IGdob3N0 IG91dGNvbWVz IGV4cGVuc2U= IGV2ZXJ5ZGF5 IGFjY2VwdGFibGU= QWg= IGVxdWlwcGVk IG9yYW5nZQ== RlI= IER1dGNo VGhvdWdo IFJhbms= UVU= IFJvYmVydHM= d2hhdA== cmVuZA== IGRpc2FwcGVhcg== IHNwYXdu IExhbQ== b2lz IGRlc2VydmU= IG1pbmltYWw= IG5lcnZvdXM= IFdvdWxk IHJvb2s= IFZhbmNvdXZlcg== IHJlc2lnbg== c2hpcmU= IFdvcmtz IEJ1aWxk IGFmZm9yZGFibGU= IEdhcnk= IEFyZW5h IGhhbmdpbmc= IGltcGxpY2F0aW9ucw== IFNvbmc= IG1haW50YWluaW5n IGd1YXJkcw== Q09O IGRlcml2ZWQ= IGV4ZWN1dGVk IHRoZW9yaWVz IHF1b3RlZA== IEFuZHJl b2dh c2VsZXNz aW5mbw== IEJlbGc= IHRlYXJz IFN1cnY= IGJpcnRoZGF5 aWdpb3Vz aW1tZXI= IHNwZWN0cnVt IGFyY2hpdGVjdHVyZQ== IHJlY3J1aXQ= YXJtYQ== VGFibGU= IG1vbnN0ZXJz IEdvdg== IGRlc3RpbmF0aW9u IGF0dHJhY3RpdmU= IGZvc3M= IE1vcmVvdmVy IHByZXNlbnRz VEhF IHJlcGx5 cHRvbg== IGN1bQ== IGRlbGlnaHQ= IGFmZmVjdHM= IGRvbmF0aW9ucw== IFRveQ== IEhpbQ== TUVOVA== IG92ZXJjb21l aXRjaGVk IEZhbnRhc3k= IEhhdA== IEJlYXN0 Ym90dA== IGludmVzdGlnYXRpb25z UnVu IGh1bnRpbmc= ZGk= ZnVuZA== IHNlc3Npb25z ZXN0eWxl IHBvcnRyYXk= b2lkcw== WWVhaA== IGNvbW11bmljYXRl IGNvbWVkeQ== IFlhbmc= IGJlbHQ= IE1hcmluZQ== IHByZWRpY3RlZA== UGxheQ== IGltcG9ydGFudGx5 IHJlbWFya2FibGU= IGVsaW1pbmF0ZQ== RGF2aWQ= IGJpbmQ= VklE IGFkdm9jYXRlcw== IEdhemE= aW1w REI= IE5h IFNpbWlsYXI= SUVT IGNoYXJpdHk= dmFz bWF0aA== IOKW b2tlcg== bmR1bQ== IGNhcHM= IEhhbA== MjAwMA== ZWFu IGZsZWV0 IHJlY3Jl UmlnaHQ= IHNsZWVwaW5n aWppbmc= a2luZA== IGRlc2lnbmF0ZWQ= w6Q= IGFuaW1hdGlvbg== a2Vl IEludHJvZHU= IC8+ IGRlbGF5ZWQ= IHRyZW1lbmQ= IGN1cmlvdXM= VXNl IGxlY3Q= ZGFt IGlubm92YXRpb24= IFBvaW50cw== IGxvYWRpbmc= IGRpc3B1dGU= Y3RpYw== aXJkcw== IEJZ IG51cnM= IFZhbHVl SU9OUw== IEh1bQ== IHRlbXBsYXRl bWVycw== IGFwcGVhcmFuY2Vz IEVudGVydGFpbm1lbnQ= IHRyYW5zbGF0aW9u IHNha2U= IGJlbmVhdGg= IGluaGli IGV1cm8= YWJldGVz IHN0dWR5aW5n IE1hcw== IHBlcmNlaXZlZA== IGV4YW1pbmVk IGVhZ2Vy IGNvYWNoZXM= IGltcGVy Y2hp IHByb2R1Y2Vz Iiku IEV2ZXJ5b25l IG11bmljaXA= IGdpcmxmcmllbmQ= IGhpcmU= IFZpY2U= IHN1aXRhYmxl b3B5 IGluZXF1 IER1a2U= ZmlzaA== Zmlyc3Q= IE9icw== IGludGVyaW9y IEJydWNl IFJ5 IGFuYWx5cw== IGNvbnNpZGVyYWJsZQ== IGZvcmVjYXN0 IGZlcnQ= b3JzaGlw IERydWc= IEFMTA== OiI= dGh1cg== IE1haWw= IGJhbGxvdA== IGluc3RhbnRseQ== IENoYW5uZWw= IHBpY2tz IDE5ODk= IHRlbnQ= b2xp IGNpdmlsaWFu Ymxpbmc= ZWxsbw== YnU= IGluY2g= IGxvZ28= IGNvb3BlcmF0aW9u IHdhbGtz IGludmVzdG1lbnRz IGltcHJpc29u IEZlc3RpdmFs IEt5 IGxlZ2FsbHk= IGdyaQ== Y2hhcmc= U2w= IHRocmVhdGVuaW5n ZHVjdGlvbg== Zmxvdw== IGRpc21pc3NlZA== aWJyYXJpZXM= Y2Fw ZWxl IE1jRw== IEhhcnZhcmQ= IENvbnNlcnZhdGl2ZQ== IENCUw== cG5n IHJvb3Rz IEhhdmluZw== dW1ibGVk IEZ1bg== XC8= IFNlYXJjaA== cGxleA== IGRpc2N1c3Npbmc= IGNvbnRpbnU= IFRhaQ== IFdpaw== RnJlZQ== Zml0 IHJlZnVzZQ== IG1hbmFnaW5n IHN5bmQ= aXBlZGlh d2Fsaw== IHByb2Zlc3Npb25hbHM= IGd1aWRhbmNl IHVuaXZlcnNpdGllcw== IGFzc2VtYg== dW50dQ== RmluYWxseQ== QVNF IEF1dG8= IEhhZA== IGFubml2ZXJzYXJ5 TEQ= IER1cg== IFVsdGltYXRl aWhhZA== cHJvZHVjdA== IHRyYW5zaXQ= IHJlc3RvcmU= IGV4cGxhaW5pbmc= IGFzc2V0 IHRyYW5zZmVycmVk IGJ1cnN0 YXBvbGlz IE1hZ2F6aW5l IENyYQ== IEJS Z2dlZA== IEhF TWljaA== YmV0 IExhZHk= eWx1bQ== ZXJ2ZXM= IG1lZXRz d2hpdGU= TG9n IGNvcnJlc3BvbmRpbmc= IGluc2lzdGVk R0c= IHN1cnJvdW5kZWQ= IHRlbnM= IGxhbmU= IGNvaW5j aG9tZQ== IGV4aXN0ZWQ= ZWN0ZWQ= IERvdWJsZQ== bGFtbQ== IHNrZXB0 ZXhw IHBlcmNlcHRpb24= aWV2 IEJlaW5n b2Z0 IGFkb3B0 Ljo= XTs= V2luZG93cw== IHNhdGVsbGl0ZQ== QVNI IGluZmFudA== ZGVzY3JpcHRpb24= IE1lYW53aGlsZQ== Y20= b2Nh IFRyZWF0 YWN0b3I= IHRvYmFjY28= IE5vcm0= ZW1wdGlvbg== IGZsZXNo IGpl b29w IEhlYXZlbg== IGJlYXRpbmc= YW5pbQ== IGdhdGhlcmluZw== IGN1bHRpdg== R08= YWJl IEpvbmF0aGFu IFNhZmV0eQ== IGJhZGx5 cHJvdA== IGNob29zaW5n IGNvbnRhY3RlZA== IHF1aXQ= IGRpc3R1cg== IHN0aXI= IHRva2Vu RGV0 IFBh IGZ1bmN0aW9uYWxpdHk= MDAz c29tZQ== IGxpbWl0YXRpb25z IG1ldGg= YnVpbGQ= Y29uZmln TlQ= cmVsbA== YmxlbQ== IE1vbQ== IHZldGVyYW5z IEh1 IHRyZW5kcw== YXJlcg== IEdpdmVu IENhcHRpb24= bWF5 QVNU IHdvbmRlcmluZw== IENsYXJr bm9ybWFs IHNlcGFyYXRlZA== IGRlc3A= c3RpYw== YnJldw== IHJlbGF0aW5n IE5paw== IEZhcm0= IGVudGh1c2k= Z29vZA== ZGVi IGFjdGl2aXN0 IG1hcnQ= IGV4cGxvc2lvbg== IEVjb25vbWlj TGluaw== IGluc2lnaHQ= IGNvbnZlbmllbnQ= IGNvdW50ZXJwYXJ0 c3VwcG9ydA== IFZpcnQ= YWdlbg== IFRlbm5lc3NlZQ== IFNpbW9u IEF3YXJk T0NL IEZpZ3VyZQ== IG92ZXJzZWFz IHByaWRl IENhcw== bm90ZQ== bWc= Q3VycmVudA== IGRpc3BsYXlz Y29udGVudA== IHRyYXZlbGluZw== IGhvc3BpdGFscw== IEZpbmFuY2lhbA== IFBhc3Q= IGRlZmVuZGFudA== IHN0cmVhbWluZw== bWJsZQ== IEJlcmxpbg== dWtp IGRpc3RyaWJ1dA== IGFudGli IGNob2NvbGF0ZQ== IENhc3RsZQ== IGludGVycnVwdA== IFJvdw== IGNvbnZlcnNpb24= IGJ1Z3M= IFJhdGhlcg== bGllc3Q= TFk= IEplYW4= Y29tbW9u YWto IDEzMA== b3R0b24= IERlYW4= IGFtZW5kbWVudA== IGdhbWVwbGF5 IFdhcnJlbg== b2Rh IGhpZ2hsaWdodHM= IGlycmU= IE5BVE8= IGJhbGxz IGRlbWFuZGluZw== VVJF IEx1a2U= RmlndXJl c3RvcA== b25pYQ== em9uZQ== aXplcnM= IFdS IGF3YXJkZWQ= IHJlZ3VsYXRvcnk= IEhhcnQ= IFNO cGxpbmc= IHNvdXI= IFBpeGVs dXNpdmU= IGZldA== IFNlbnQ= IGF1dG9tYXRpYw== IGZlcg== dmVybm1lbnQ= IEtoYW4= VE9O ZmF0aGVy IGV4dHJhb3JkaW5hcnk= dGhyb3A= IFB5dGhvbg== IEdQVQ== IHNleHVhbGx5 IGRlc2t0b3A= aXRpdml0eQ== IEFudG9uaW8= IG9yaWVudA== IGVhcnM= b2JieQ== b3VzZXM= dmVydGlzZW1lbnRz IG1hbnVmYWN0dXJlcnM= aWNpZW50 bWludXRl IGNvbnZpY3Rpb24= IGdhcmRlbg== cHVibGlj IHNhdGlzZmllZA== Zm9sZA== T0s= IGluaGFi IFRoaW5r IHByb2dyYW1tZQ== IHN0b21hY2g= IGNvb3JkaW4= IGhvbHk= IHRocmVzaG9sZA== IHJoZXQ= IHNlcmlhbA== IGVtcGxveWVycw== IEV2ZXJ5dGhpbmc= cmFo IGJvdGhlcg== IGJyYW5kcw== VmFsdWU= IFRlZA== IFBsYW5ldA== IHBpbms= IEZ1cnRoZXJtb3Jl c2E= UEU= cmVjaw== IFVTRA== b3R0ZQ== ICYm IGxhbmRlZA== Z2V0cw== IHByb2R1Y2Vycw== IGhlYWx0aGNhcmU= IGRvbWluYW50 IGRlc3Rybw== IGFtZW5kZWQ= Y2hyb24= IGZpdHM= IFN5ZA== IEF1dGhvcml0eQ== QVRDSA== IGZpZ2h0cw== IExMQw== IC0tLQ== IENvcnA= IHRveGlj c3BlY2lmaWM= IENvcm4= IENoZWw= IHRlbGVwaG9uZQ== IFBhbnQ= IG15c3RlcmlvdXM= YXVuY2g= b2RveA== bWVkaWE= IHdpdG5lc3Nlcw== YWd1 IHF1ZXN0aW9uZWQ= IEJyZXhpdA== IFJlbWVtYmVy ZW5leg== IGVuZG9yc2U= aWF0cmlj IElkZW50 IHJpZGljdWxvdXM= MTEw IHByYXllcg== IHNjaWVudGlzdA== IDE5NTA= IEFxdQ== IHVuZGVyZ3JvdW5k IFVGQw== bWFyZQ== IExhdGVy d2ljaA== IHN1YnNjcmli IGhvc3Rz IGVycg== IGdyYW50cw== YW50b20= IHN1bW1vbg== ZWFybHk= IENsZWFy IFByaW0= IHN1c3BlbnNpb24= IGd1YXJhbnRlZWQ= YXBwZXI= IHJpY2U= IFNlYW4= IFNoaW4= IHJlZmVyZW5kdW0= IGZsZWQ= cnVzdA== IDM2MA== dGVyeQ== IHNob2NrZWQ= QlI= IE9pbA== IEFsbGFo IHBhcnRseQ== IGlnbm9y IHRyYW5zbWlzc2lvbg== IGhvbW9zZXh1YWw= aXZlcnNhbA== IGhvcGVmdWxseQ== 44Kk IGxlc3Nvbg== TGVn IC4u WWV0 dGFibGU= YXBwcm9wcmk= cmV0dA== IGJvYXJkcw== IGluY29ycmVjdA== IGJhY3Rlcmlh YXJ1 YW1hYw== IHNuYXA= Lici IHBhcmFk dGVt aGVhcnQ= IGF2YWlsYWJpbGl0eQ== IHdpc2RvbQ== ICgr IHByaWVzdA== IMKgIMKg T3Blbg== IHNwYW4= IHBhcmFtZXRlcg== IGNvbnZpbmNl ICglKQ== cmFj IGZv IHNhZmVseQ== IGNvbnZlcnRlZA== IE9seW1waWM= IHJlc2VydmU= IGhlYWxpbmc= IE1pbmU= TWF4 IGluaGVyZW50 IEdyYWhhbQ== IGludGVncmF0ZWQ= RGVt IHBpcGVsaW5l IGFwcGx5aW5n IGVtYmVk IENoYXJsaWU= IGNhdmU= MjAwOA== IGNvbnNlbnN1cw== IHJld2FyZHM= UGFs IEhUTUw= IHBvcHVsYXJpdHk= bG9va2luZw== IFN3b3Jk IEFydHM= Jyk= IGVsZWN0cm9u Y2x1c2lvbnM= IGludGVncml0eQ== IGV4Y2x1c2l2ZWx5 IGdyYWNl IHRvcnR1cmU= IGJ1cm5lZA== dHdv IDE4MA== UHJvZHU= IGVudHJlcHJlbmU= cmFwaGljcw== IGd5bQ== cmljYW5l IFRhbQ== IGFkbWluaXN0cmF0aXZl IG1hbnVmYWN0dXJlcg== IHZlbA== IE5p IGlzb2xhdGVk IE1lZGljaW5l IGJhY2t1cA== IHByb21vdGluZw== IGNvbW1hbmRlcg== IGZsZWU= IFJ1c3NlbGw= IGZvcmdvdHRlbg== IE1pc3NvdXJp IHJlc2lkZW5jZQ== bW9ucw== IHJlc2VtYg== IHdhbmQ= IG1lYW5pbmdmdWw= UFQ= IGJvbA== IGhlbGlj IHdlYWx0aHk= IHJpZmxl c3Ryb25n cm93aW5n cGxhbg== YXN1cnk= 4oCmLg== IGV4cGFuZGluZw== IEhhbWlsdG9u IHJlY2VpdmVz U0k= ZWF0dXJlcw== IEFuaW0= UkVF UHV0 IGJyaWVmbHk= cml2ZQ== IHN0aW11bA== IGBgKA== IF9f IGNoaXA= IGhheg== IHByaXpl IFRoaW5ncw== QUNF dWxpbg== ZGljdA== b2t1 IGFzc29jaWF0ZQ== b2NrZXRz eW91dHViZQ== U3Rvcnk= YXRlZ29yeQ== IG1pbGQ= YWlsaW5n IFll T3JpZw== IEth b3JpZw== IHByb3BhZ2FuZGE= IGFub255bW91cw== IHN0cnVnZ2xlZA== IG91dHJhZ2U= QVRFRA== IEJlaWppbmc= cmFyeQ== IGxlYXRoZXI= IHdvcmxkcw== IGJyb2FkZXI= MTI1 aWRhbA== IEJldHRlcg== IHRlYXI= RXh0 IHByb3Bvc2Fscw== IGl0ZXI= IFNxdWFk IHZvbHVudA== bWk= RGlk IFB1 cGlu IHNwZWFrZXJz IGJvcmRlcnM= IGZpZ3VyZWQ= PSc= IHNpbXVsdGFuZW91c2x5 YWVkYQ== IGNoYXJnaW5n IHVyZ2Vk IGNvbmo= MjU2 IEdvcmRvbg== bWVyY2U= IGRvY3VtZW50YXJ5 U2hhcmU= aXRvbA== T05F IEdhcmRlbg== aGF0dA== IFRob21wc29u YW5lb3Vz YXBvcmU= IHRhbmtz IGxlc3NvbnM= dHJhY2s= IG91dHN0YW5kaW5n IHZvbHVudGVlcnM= IHNwcmF5 IG1hbmFnZXJz bGFyZ2U= IGNhbXBz IGFydGlmaWNpYWw= IFJ1 IGJhZ3M= dGhhbA== IGNvbXBhdGlibGU= IEJsYWRl IGZlZA== IGFyZ3Vlcw== Rkk= IHVuZmFpcg== IGNvcm4= IG9mZnNldA== IGRpcmVjdGlvbnM= IGRpc2FwcG9pbnRlZA== IENvbnZlbnRpb24= IHZpZXdpbmc= TUU= b2NpdHk= IHRvd25z IGxheWVycw== IHJvbGxlZA== IGp1bXBlZA== IGF0dHJpYnV0ZQ== IHVubmVjZXNz aW5jb2xu IHN1cHBvc2U= IE5ldGhlcg== Y2hh IGJ1cmllZA== IHNpeHRo QmVu cmVzc2luZw== T1VS IHdvdW5k IGN5Y2w= IG1lY2hhbmlzbXM= IGNvbmdyZXNzaW9uYWw= IEVsZW1lbnQ= IGFncmVlbWVudHM= IGRlY29y IGNsb3Nlc3Q= IE1pdA== R29vZ2xl fX0= IG1peHR1cmU= IGZsdWlk U2lnbg== IFNjaG9sYXI= IHBpc3Q= YXNrZXQ= YWJsaW5n IHJhY2luZw== aGVybw== cmllbA== YXNzeQ== IGNoZWFwZXI= YmVu IHZlcnRpY2Fs YW1hY2FyZQ== IFJlYWRpbmc= Z21lbnRz IGhlbGljb3A= IHNhY3JpZmljZQ== YXlh cGFyZW4= VkE= IExlcw== IFN0dWRpbw== IHZpb2xhdGlvbnM= IEFubmE= YWNlcg== 6b4= IFJhdA== IEJlY2s= IERpY2s= IEFDVA== IGNvbXBvc2l0aW9u IHRleHR1cmU= IE93bg== IHNtYXJ0cGhvbmU= IE5B IGZvcmI= aW1wb3J0 IGRlZmVuZGluZw== aWxzdA== cmVy IG9o IEplcmVteQ== IGJhbmtpbmc= Y2VwdGlvbnM= IHJlc3BlY3RpdmU= Ly4= IGRyaW5rcw== IFdp IGJhbmRz IExpdmVycG9vbA== IGdyaXA= IEJ1eQ== IG9wZW5seQ== IHJldmlld2Vk cGVydA== IHZlcmlmeQ== IENvbGU= IFdhbGVz TU8= IHVucHJl IHNoZWx0ZXI= IEltcGVyaWFs IGd1aQ== IERhaw== IHN1Z2dlc3Rpb25z IGV4cGxpY2l0bHk= IHNsYXZl IGJsb2NrY2hhaW4= IGNvbXBldGluZw== IHByb21pc2luZw== U09O IHNvY2Nlcg== IGNvbnN0aXR1dGlvbg== NDI5 IGRpc3RyYWN0 IFVzZXI= ZXNpZGVz IE1ldGhvZA== IFRva3lv IGFjY29tcGFuaWVk Q2xpZW50 c3Vy YWxvZw== IGlkZW50aWZpY2F0aW9u IGludmFzaW9u YXNtYQ== IGluZHVzdHJpZXM= cHBlcnM= IHN1YnRsZQ== IFVuaXQ= bmF0dXJhbA== IHN1cnZpdmVk IGZsYXc= mIU= IEhvbGw= IGRlZmljaXQ= IHR1dG9yaWFs IENoYW5jZQ== IGFyZ3Vpbmc= IGNvbnRlbXBvcmFyeQ== IGludGVncmF0aW9u Zm9yd2FyZA== IHR1bQ== aXRpcw== IGhpZGluZw== IERvbWlu IFRhbg== IEJ1aWxkaW5n IFZpbg== IHNwb2tlc3BlcnNvbg== IE5vdGVz IGVtZXJnaW5n IHByZXBhcmF0aW9u IHByb3N0 IHN1c3BlY3Rz IGF1dG9ub20= RGVzY3JpcHRpb24= IGRlYWx0 IFBlYXI= IHN0ZWFkeQ== IGRlY3JlYXNlZA== IHNvdmVyZQ== IENsaW4= IGdyYWR1YWxseQ== b3JzZXM= IFdBUg== U2Vydg== 44Ki aHI= IGRpcnR5 IEJhcm4= IEJD IGRpbA== IGNhbGVuZGFy IGNvbXBsaWFuY2U= IGNoYW1iZXI= YmI= IHBhc3Nlbmdlcg== YXRlZnVs IFRpdGxl IFN5ZG5leQ== IEdvdA== IGRhcmtuZXNz IGRlZmVjdA== IHBhY2tlZA== YXNzaW9u IGdvZHM= IGhhcnNo SUNL bGVhbnM= IGFsZ29yaXRobQ== IG94eWdlbg== IHZpc2l0cw== IGJsYWRl IGtpbG9tZXQ= IEtlbnR1Y2t5 IGtpbGxlcg== UGFjaw== ZW5ueQ== IGRpdmluZQ== IG5vbWluYXRpb24= YmVpbmc= IGVuZ2luZXM= IGNhdHM= IGJ1ZmZlcg== IFBoaWxs IHRyYWZm QUdF IHRvbmd1ZQ== IHJhZGlhdGlvbg== ZXJlcg== bWVt IEV4cGxpY2l0 6b6N IGNvdXBsZXM= IHBoeXNpY3M= IE1jSw== IHBvbGl0aWNhbGx5 YXdrcw== IEJsb29t IHdvcnNoaXA= ZWdlcg== dXRlcg== IEZP IG1hdGhlbWF0 IHNlbnRlbmNlZA== IGRpc2s= IE1hcmc= IC8q UEk= IG9wdGlvbmFs IGJhYmllcw== IHNlZWRz IFNjb3R0aXNo IHRoeQ== XV0= IEhpdGxlcg== UEg= bmd0aA== IHJlY292ZXJlZA== aW5nZQ== IHBvd2Rlcg== IGxpcHM= IGRlc2lnbmVy IGRpc29yZGVycw== IGNvdXJhZ2U= IGNoYW9z In0seyI= IGNhcnJpZXI= YmFibHk= SGlnaA== IFJU ZXNpdHk= bGVu IHJvdXRlcw== dWF0aW5n Rmls Tk9U d2FsbA== c2J1cmdo IGVuZ2FnaW5n IEphdmFTY3JpcHQ= b3Jlcg== bGlob29k IHVuaW9ucw== IEZlZGVyYXRpb24= IFRlc2xh IGNvbXBsZXRpb24= IFRh IHByaXZpbGVnZQ== IE9yYW5nZQ== IG5ldXI= cGFyZW5jeQ== IGJvbmVz IHRpdGxlZA== IHByb3NlY3V0b3Jz IE1F IGVuZ2luZWVy IFVuaXZlcnNl IEhpZw== bmll b2FyZA== IGhlYXJ0cw== IEdyZQ== dXNzaW9u IG1pbmlzdHJ5 IHBlbmV0 IE51dA== IE93 IFhQ aW5zdGVpbg== IGJ1bGs= U3lzdGVt aWNpc20= IE1hcmtldGFibGU= IHByZXZhbA== IHBvc3Rlcg== IGF0dGVuZGluZw== dXJhYmxl IGxpY2Vuc2Vk IEdo ZXRyeQ== IFRyYWRhYmxl IGJsYXN0 4KQ= IFRpdGFu ZWxsZWQ= ZGll SGF2ZQ== IEZsYW1l IHByb2ZvdW5k IHBhcnRpY2lwYXRpbmc= IGFuaW1l IEVzcw== IHNwZWNpZnk= IHJlZ2FyZGVk IFNwZWxs IHNvbnM= b3duZWQ= IG1lcmM= IGV4cGVyaW1lbnRhbA== bGFuZG8= aHM= IER1bmdlb24= aW5vcw== IGNvbXBseQ== IFN5c3RlbXM= YXJ0aA== IHNlaXplZA== bG9jYWw= IEdpcmxz dWRv b25lZA== IEZsZQ== IGNvbnN0cnVjdGVk IGhvc3RlZA== IHNjYXJlZA== YWN0aWM= IElzbGFuZHM= IE1PUkU= IGJsZXNz IGJsb2NraW5n IGNoaXBz IGV2YWM= UHM= IGNvcnBvcmF0aW9u IG94 IGxpZ2h0aW5n IG5laWdoYm9ycw== IFVi YXJv IGJlZWY= IFViZXI= RmFjZWJvb2s= YXJtZWQ= aXRhdGU= IFJhdGluZw== IFF1aWNr IG9jY3VwaWVk IGFpbXM= IEFkZGl0aW9uYWxseQ== IEludGVyZXN0 IGRyYW1hdGljYWxseQ== IGhlYWw= IHBhaW50aW5n IGVuZ2luZWVycw== TU0= IE11c3Q= IHF1YW50aXR5 UGF1bA== IGVhcm5pbmdz IFBvc3Rz c3RyYQ== 44O844M= IHN0YW5jZQ== IGRyb3BwaW5n c2NyaXB0 IGRyZXNzZWQ= TWFrZQ== IGp1c3RpZnk= IEx0ZA== IHByb21wdGVk IHNjcnV0 IHNwZWVkcw== IEdpYW50cw== b21lcg== IEVkaXRvcg== IGRlc2NyaWJpbmc= IExpZQ== bWVudGVk IG5vd2hlcmU= b2NhbHk= IGluc3RydWN0aW9u Zm9ydGFibGU= IGVudGl0aWVz IGNt IE5hdHVyYWw= IGlucXVpcnk= IHByZXNzZWQ= aXpvbnQ= Zm9yY2Vk IHJhaXNlcw== IE5ldGZsaXg= IFNpZGU= IG91dGVy IGFtb25nc3Q= aW1z b3dza2k= IGNsaW1i bmV2ZXI= IGNvbWJpbmU= ZGluZw== IGNvbXBy IHNpZ25pZmljYW5jZQ== IHJlbWVtYmVyZWQ= IE5ldmFkYQ== IFRlbA== IFNjYXI= IFdhcnJpb3Jz IEphbmU= IGNvdXA= YmFz IHRlcm1pbmFs LC0= T0g= IHRlbnNpb24= IHdpbmdz IE15c3Rlcg== 77+977+977+977+9 IFVubGlrZQ== dmFsaWQ= dmlyb25tZW50cw== IEFsaQ== IG5ha2Vk Ym9va3M= IE11bg== IEd1bGY= IGRlbnNpdHk= IGRpbWlu IGRlc3BlcmF0ZQ== IHByZXNpZGVuY3k= IDE5ODY= aHk= SU5E IHVubG9jaw== aW1lbnM= IGhhbmRsZWQ= IEVi IGRpc2FwcGVhcmVk IGdlbnJl IDE5ODg= IGRldGVybWluYXRpb24= U3RyZWFt aWtv YXB0ZXJz IGFja25vd2xlZGdl SmFu IGNhcGl0YWxpc20= UGF0 IDIwMjA= IHBhaW5mdWw= IGN1cnZl IGJvbWJz c3Rvcm0= IE1ldGFs ZW5jZXI= IEZpZw== IEFhcm9u YW5jaGVz IGluc3BpcmF0aW9u IGV4aGF1c3Q= dGFpbnM= YXNoaQ== IGRlc2NyaXB0 IHJpdHVhbA== IENoZWxzZWE= IHByb21vdGlvbg== IEh1bmc= IFdhcmQ= aXZh IEVU IHRvc3M= YWxsb3c= IEZyYW5jaXM= RGVw IGhhcHBpbmVzcw== IEdsYXNz IGJldGE= IHN0cmVuZ3RoZW4= TkU= b2E= IGJ1dHRvbnM= IE11cnJheQ== IGtpY2tlZA== UXVlc3Q= IFRhbGs= IFNldmVyYWw= IFplcm8= IGRyb25l dWxr IGNhbQ== IE1vYmlsZQ== IHByZXZlbnRpbmc= IHJldHJv IEF4 IGNydWVs IGZsb2F0 Liks IGZpbGluZw== IEdyYW50 IEJvcg== IHJpYg== IGNoYW1waW9uc2hpcA== IE1lcmM= IHN0eWxlcw== IGNha2U= IGJ1aWxkcw== IFNlbGY= aW94 IGVwaWM= b3lk QmVs IFN0ZXc= Lig= YWh1 IEJleW9uZA== IG91dHM= IHNvbG8= IFRyZWU= IHByZXNlcnZl IHR1Yg== QVJF cm9j IEltcHJv IFdyaWdodA== IGJ1bmQ= IHRyYWdlZA== IG9jY2FzaW9uYWw= Ymlhbg== U2Vjb25k cm9ucw== IGludGVyYWN0aW9ucw== Zm9ybWVk c2luZw== IG93bnM= IGhvY2tleQ== R2VuZXJhbA== IGxvZ2ljYWw= IGV4cGVuZA== IGVzY2Fs IEdyaWZm IENyb3du IFJlc2VydmU= IHN0b3BwaW5n IGV4Y3VzZQ== c2Vjb25k IG9wZXJhdGVk IHJlYWNoZXM= IE1hbGF5cw== IHBvbGx1dGlvbg== IEJyb29rbHlu IGRlbGV0ZQ== IGhhc2g= QmxvY2s= YWhh 4oCz IHNob3J0ZXI= cGllY2U= Pjwv IGhvcm0= IFdhdA== IEJyZWFr IHByb2hpYml0ZWQ= IGludGVuc2l0eQ== IEFsYW4= IGxpYWJpbGl0eQ== PyE= YW5kZWQ= IG5laWdoYm91cg== IENvbGxlY3Rpb24= IGZpcmVz IHJldm9sdXRpb25hcnk= Zmx5 IE9ybGVhbnM= V2hpdGU= IFdyaXQ= IERhd24= IHNldHRsZQ== IGV4ZWN1dGU= Qk0= IHNwb2tlc3dvbWFu IGxpZmVzdHlsZQ== IGNsaWNraW5n IEtpbGw= IExpYmVyYWw= IE5hemk= IHRyYWlsZXI= IG1vdW50YWlucw== IGRhbW4= emVz cGVz IHByZXNzaW5n IGJhaWw= IE9yZ2FuaXphdGlvbg== IHBpcg== IHRoaXJ0eQ== IGVsZWN0cmljYWw= IDExNQ== IFBvbHk= IFJhcA== IFN0cmlrZQ== IENhbm4= IGRlbWFuZGVk IGJhY2tpbmc= ZGVmYXVsdA== c3BlZWQ= IExlZ2lzbA== IG1vdGhlcnM= IEJvZHk= IHZhcmlhdGlvbg== Y2VkZW50ZWQ= cG93ZXJlZA== bGVhZGluZw== TmV2ZXI= IGdyYXZl IEFudGk= QVc= IGludGVydmlld2Vk IEdhYg== IEZhdA== IHJvb2tpZQ== dXU= IGRlcG9z aXhvbg== IGFtcGw= cmV0aW9u IEhlYXQ= IHBlYWNlZnVs U00= aWV2ZQ== IGRpdmVy IFZpY3Rvcmlh IG1pYw== cGRm IHN0YXRpbmc= IGx1bmc= IGNyaXRpY2l6ZWQ= IHZhY2NpbmU= IExvYWRpbmc= dXJzZQ== VGFrZQ== IEZyYW4= IFNvbGQ= IFJvYmlu IGRldGVjdGVk IFNjcmlwdA== IGFkanVzdGVk IHNlbmF0b3I= IG9wcG9zaW5n RXJyb3I= Q291bnQ= IGNvbmZsaWN0cw== IG93 IEFyZ2VudA== IG1hdGNoaW5n aGg= IFRyZWs= c3RhcnRlcg== Iiks IEFG b2Rlcg== eHh4eA== IEFsdA== YWNyZQ== IFBpY2s= IFNvbGFy IERhbA== T2N0 IEJhdHQ= IHNyYw== IGVuZ2FnZW1lbnQ= IGV4ZWN1dGl2ZXM= IGxpYmVydHk= amF2YQ== IHRhbGVudGVk aWdlbm91cw== IGNvbnNlY3V0 Li4uLi4= SW5mbw== IGhvcnJpYmxl IHN1cnByaXNpbmdseQ== ZmVlZA== aWNhdGluZw== IExFRA== IGZlbWFsZXM= U3RhdGlvbg== ZWxsZXI= IE9ha2xhbmQ= IG1lY2hhbmljYWw= aW9sb2d5 IFZhcg== IHJvYnVzdA== ZXR0aW5ncw== b3R0YQ== IHRoZW9yZXQ= IHJldGFpbg== a3dhcmQ= IGRh IGRlcGxveWVk ZGVs IEFuZHk= IHN1YnNjcmliZQ== d2Vi IG5h IE1pY2hlbA== IHBhcnRpYWxseQ== IENvbWV5 IGNyb3du IE1hag== IEJsdQ== cmF0b3I= RGF5 SU5U IGRvY3VtZW50ZWQ= IEdEUA== Z2k= Y2hlbGw= IGJydXRhbA== IEJhYg== c3RyYXRpb24= IHRoZWZ0 IHR1YmU= QEA= IHF1ZXJ5 IExpbmNvbG4= IHB1Ymxpc2hpbmc= IHdvcmU= b3JpY2Fs IHJpYw== IG5vdGFibGU= IHN1YnNlcXVlbnRseQ== bmV4 IG9ic2VydmU= IEJvZQ== IGNvZGVz bWFpbg== V0g= IFNM IHJlc2lkZW50aWFs YXZhbg== IG1hcw== YXJlc3Q= YWRlb24= T1VU IHNvcGhpc3RpYw== YW50ZQ== IGNlbnM= ICoq IG1vcnRhbGl0eQ== IHlvdXJz IG9jY2FzaW9ucw== IHJlY2FsbGVk IERyaXZlcg== IHZvY2Fs IGJhdGhyb29t IHNob3Bz IGNvbGxhYm9yYXRpb24= IE9iYW1hY2FyZQ== IENlbGw= Q2hhcg== U3VwZXI= Q3Jl IHRlbmRz IHRvcm4= IGVjb25vbWljcw== YXZlcnk= IFJhaWQ= IFNlbQ== IHNob3VsZGVycw== IGV4cGVjdGluZw== IGV4YW1pbmF0aW9u ZW5hbWU= IFVJ aWFiaWxpdHk= b2xhcw== IEFtYg== IERyYQ== IG1pZGZpZWxk IElD IGxheW91dA== IGZsb2F0aW5n Zmk= aXRhdGl2ZQ== IHRyZW1lbmRvdXM= INA= IGFidW5k V29yaw== IExpZ2h0bmluZw== IHNpbWlsYXJseQ== IGNvbnNlcnZhdGl2ZXM= IHByYXk= QkU= aXphcnJl IHRlbXB0 IGVtcGhhc2lz IE1ldHJv IGZpc2hpbmc= IG1hcnJ5 bmVn IFN0dWR5 IHJlY2s= IGRpc3Bvcw== b25pbmc= YnNpdGU= IHN1c3BpYw== IG1lcmNo IEdpYg== IERlc2NyaXB0aW9u IERWRA== d2hl IFllbWVu IGVudmlyb25tZW50cw== b290aW5n IE1vZGVybg== ZXU= IHJlZmxlY3Rz IGhvbmV5 IGFuYWx5c3Q= IGd1dA== ZGVj QWN0aW9u IGhvdXNlaG9sZHM= IHN0ZXI= IHRlbXBsZQ== IHJlZm9ybXM= IGZhdm91cml0ZQ== IGRlYWRsaW5l IExF VGhyZWU= IFdpdGhpbg== QXVn IG5pZ2h0cw== ZWx0YQ== IGludmFsaWQ= IEV4Y2hhbmdl IERlbGhp d2hlbg== aW5jb21l IPCf IHdpcmVsZXNz c2NyaWJl aXN0YQ== IGhvc3RpbGU= IGFsbHk= IGdpZw== IG91dGxldHM= IERvcg== RU1FTlQ= IGFzaA== IGFic3RyYWN0 T1JE IE1vdG9y IGFkdmlzZXI= aXN0bGU= IGJhc2Vz IGNvdXJ0ZXN5 IGNyb3NzaW5n IGNsZWFyZWQ= IHJlZnVnZWU= Y29zeXN0ZW0= IHRocm93cw== ZnVu Ym91cm5l ZGF5cw== IGRpc2FncmVl IE5hdGl2ZQ== IHJlZmxlY3RlZA== IEZhc3Q= IFllbGxvdw== IFNpbmdhcG9yZQ== IFJhdmVu IGVtYnJhY2U= IEt1 IENoZW4= IEVhcmx5 IGFwcG9pbnRtZW50 IE1pbmk= aXRlbWVudA== IHBsYWNpbmc= IGJpY3k= U1I= IHdoaXM= U1U= IGludmVzdGlnYXRlZA== IHBob3RvZ3JhcGhz Z2l0aHVi IEJlYXQ= IFJpbmc= aWdoZWQ= aWFy IGV2b2x2ZWQ= ZXJhbGQ= IGR1bg== IGh1Yg== SUFM IGVuY291cmFnaW5n IFByaW50 IERheXM= IHByb3NlY3V0aW9u IHBhbnRz YXp5 bGl2ZQ== IGZvc3NpbA== IEp1 IHJvY2tz dWRnZQ== IFJhY2U= IGdyZWV0 Ymll IGZpbGxpbmc= IExlbg== IGRpYWJldGVz IGZpcmVhcm1z dW1pbmc= ZW5lenVlbA== IEJC IGFjY2VwdGluZw== QVRI IHJlc29ydA== IGh1bnQ= cmlr dWNrZXI= YW1lbnRz IHN1c3RhaW5lZA== IGNyb3NzZWQ= IGJyZWFrZmFzdA== IGF0dHJpYnV0ZXM= bGVjdGVk YXRpbGU= IHZpYnI= IEthbA== YXJzb24= b3BsZXM= IHRvdWNoZWQ= IGRhbWFnZXM= IGltcHJlc3NlZA== cnVw IGFuY2g= IEFkYW1z SGVs IFZpY3Rvcg== IG1vdW50ZWQ= IEND IGRlbGljaW91cw== c3Bhbg== ZWxsYQ== IGVsYWJvcg== YW1wbGVz IGRlZmlj IGNvbnN0aXR1 dWF0ZXM= IE1pc3Npb24= IFRoZXI= IE1vbnN0ZXI= YmVz UmV1dGVycw== IEluZG9uZXM= aGlsbA== bXVuaXRpb24= IGNvbmZpcm1hdGlvbg== IENvbnNpZGVy YWNlbnQ= IGpldA== IEVtcGxveQ== IEdUWA== bmFu IFNwaWRlcg== IHByb2Nlc3Nvcg== IHBhdHJp IFBlbnRhZ29u IFJvYmluc29u IHJlYWxpc3RpYw== w7E= IGFwcGVhcmluZw== IHBpcGU= b21lZA== IGZydQ== IGF3ZnVs IGV2YWx1YXRpb24= IGludGVsbGlnZW50 IENpdGl6 IGZ1bmRyYQ== b2RpdW0= IHR3ZWV0cw== IHdvcm4= cHJpbmc= IGtpZG4= IHJlYmVscw== IEthbQ== IE5ldGhlcmxhbmRz IFNX IGFjcXVpc2l0aW9u IE1hbGU= 44Oq b21iaWVz IHRyYWRlbQ== IFN0YXR1cw== QnJl IFRISVM= IGFkdmVyc2U= IE5FVw== c2lnbg== IG9yZ2FuaXNhdGlvbg== ZW5j IEhhcnBlcg== YXBvcg== IE1lbWJlcnM= IFBlYWNl IEFpcnBvcnQ= IE90aGVycw== IHNjcmF0Y2g= IFBpbA== IHNlbnNvcg== IGFkb3B0aW9u IEhvdGVs IERyYWc= IGhvbmVzdGx5 IHlhcmQ= IEZvcmNlcw== IHBhdGVudA== IGJhc3M= IHF1aWV0bHk= IGJyZWF0aGluZw== IHBvc2U= aW9ycw== IEplc3M= c3RhdGlj SVRF T2ZmaWM= IGpldw== d2Nz IDE0MA== IHByZXZpZXc= aXBwaQ== IHVuZm9ydHVuYXRlbHk= b2tlbW9u IGhvcm4= IHJlYXNz IHBlZXI= b2NrZXI= IHVudG8= IEdyYXk= IGNsZWFuaW5n IGF0dHJhY3RlZA== MjAwNw== UG9pbnQ= a2lsbA== IEFncmVlbWVudA== dXJjaGVz IGhvcnI= IE1pc3Npc3M= IHdvcnRoeQ== IGZsb3dlcnM= dG93bg== ZGxs IHJlYWN0aW9ucw== IGRlY2U= IGluZGljYXRpbmc= TUQ= IHByZWZlcmVuY2U= IE1WUA== ZXNzaW9uYWw= IFRhcmdldA== Z2VuY2U= IEluZGlhbnM= IG1pc2M= IGZyZWVseQ== IG11c2NsZXM= IGxpbmV1cA== IGltcGFjdHM= b3VzaW5n b21p YWN1bGFy IGNvbnRyb2xsaW5n YWdpbmU= Y2VyeQ== aGVsbA== IHJhbmtpbmc= IE5pY2g= IEF2ZQ== MTI4 IGhpZ2h3YXk= IGluY29ucw== IGJpbmRpbmc= IHN0cnVnZ2xlcw== IFBpdHRzYnVyZ2g= IGdyYXk= cmlu IGNvbWljcw== IFNwb3J0 IHJlbGF0aXZlcw== IGZyaWdodA== IHByb2Jl IFBvcnR1Zw== IHZvYw== IHR1 IENvcnBz IHBvc3NpYmlsaXRpZXM= IHF1YWxpZnk= d2Nzc3RvcmU= IGxpYnJhcmllcw== IG1pZ3JhbnRz IGVudHJpZXM= IGNvbnNlY3V0aXZl dmFscw== IENoYWlybWFu IGhpbGw= SU1F IEdhcmQ= IGluZXF1YWxpdHk= Zm94 IFNhdmU= IGNvcnQ= Y2xhaW1lZA== IHRyYWl0cw== IHBvdXI= IG1pc3NpbGVz IGVzc2VuY2U= IHNlbmRz IGFsbGlhbmNl IHdpc2hlcw== IENocmlzdG9waGVy Qmln Tlk= IEphY29i c2Fu dXJyZWQ= IFNP bGx5 IGFkdm9jYXRl IEJvbmQ= ICIv VXNpbmc= IGRpc3RyaWN0cw== IEdhdGU= IEJpcg== cmlkZ2U= IE5heg== IFJz Ym9hcmRz IEdh IFJlYWdhbg== IGluZmx1ZW5jZWQ= MTAwMA== YXB5 IGNoYWxsZW5nZWQ= IGJhcmc= IGZhY3VsdHk= IEZpZg== IGFjcXVpcmU= QWM= IGluc2VjdA== IGluc3RydW1lbnRz IGxlYWY= dGhvZG94 TWVzc2FnZQ== IHRhbGU= IHRoZXJlYnk= IHRyYXA= IHN0cm9uZ2VzdA== IE1pbGl0YXJ5 aXNpYmxl IDE5ODQ= ZXRoZWxlc3M= IGZsZXhpYmxl IGtpbGxz IGZpbmlzaGluZw== IFNpemU= IHJlZHVjZXM= IGVwaWQ= IG9yaWVudGF0aW9u ZnVsbA== IHRyYWNl IGxhc2Vy IG9wcG9zZQ== IGVkaXRpbmc= IG1vbWVudHVt 5Lo= c2hvdw== Vkk= IExhZA== IDE5ODU= IG11cmRlcmVk OTAw dXRoZXI= IHByb2JhYmlsaXR5 IFBvbGw= IHJlbHVjdA== IENoZW0= IE1vbnRyZWFs IGFkZXF1YXRl IFBvbGFuZA== IFNoZXJpZmY= dW1waA== IG9r IDAwMA== ICJb IG9wZXJhdG9ycw== IEZlcg== IG1vZGVz IEV2ZQ== IGRpc2NpcGxpbmU= TkVU SGFuZA== IG9yYWw= IFdF ZW1haWw= SlA= IFBhbGVzdGluaWFucw== IGhlbmNl IExlc3M= IG92ZXJs ZGln IGludGltaWQ= IENvYWw= IHJhbmdpbmc= dGhh IGRpc3RhbnQ= IGZpYg== IEluZGV4 IFdvbmRlcg== IFBlbA== aGF0dGFu IEh1Zw== w5c= cmFpdA== IHdyYXBwZWQ= IFJQRw== IGNoZW1pY2Fscw== IE1vbmV5 IGZyb3plbg== IGluZGlyZWN0 IEFnYWluc3Q= RW5k IHVuY29tZm9ydGFibGU= IEdhbGxlcnk= IFBvc3RlZA== 2Kc= b25kdWN0 IGNvbnNlcXVlbmNl IGJpdHRlcg== IDE5ODc= cG9w IGNvdW50bGVzcw== IEFsYXNrYQ== ZmZmZg== IGRlcGFydHVyZQ== IHJlZnVuZA== IElhbg== aWF0ZWQ= IHNlZWtz IG1lY2hhbmljcw== IGp1cmlzZGljdGlvbg== bHlubg== IGFsaWtl IEh1bnQ= YXRob24= IHJlc29sdmVk IGNhY2hl IGRpc3RpbmN0aW9u ZGlyZWN0 IGVuY291bnQ= b3Vi YmVhdA== IENvdW50cnk= c2VhcmNo IGNvbnRpbnVvdXM= IG1vZGVzdA== IFJhaWw= dGhvb2Q= MTMw QlVH IGNyaW1pbmFscw== IGluZGljYXRpb24= IGVuY291bnRlcmVk bGFzdA== IFd5 IGlkZW9sb2d5 IFBERg== c2VjdXJpdHk= XSk= IEppbW15 IEVO IGhpcmluZw== VGVt IHBpZw== YXVudA== IENyeXN0YWw= IHBlbmFsdGllcw== IGNhcGFiaWxpdHk= IHB5 IHByb2R1Y3RpdmU= IGJhbGFuY2Vk IEdlRm9yY2U= Y2xpY2s= b2xpdGFu b2Rz IGFmdGVyd2FyZHM= IHBsYXlvZmZz IEdpbGw= VXNlcg== IGJhY2tz cHVi dGFn IGFic3VyZA== cGlyaW5n IGNpdGluZw== IHRyaWxsaW9u IG9ibGlnYXRpb24= IG1heGlt YWhvbw== Y2Y= dW1p IEFscGhh IE5lbHNvbg== IHB1cnN1YW50 aW5pdGVseQ== IGZyYWN0 ZW50cnk= YmVyeQ== IFRob3I= QWRkZWQ= IERK IEdlbmU= IGF3a3dhcmQ= U3R1ZA== IHdhbGxldA== IERpdmluZQ== YXJpb3M= IHJlbGVhc2luZw== IGVkaXRlZA== IGFjY29tcGxpc2hlZA== QmVzdA== IGVkZ2Vz IHBsYW5lcw== IGZlZWRpbmc= In0sIg== IGRpc2Nsb3N1cmU= IGdyYWlu YWlyeQ== b29ucw== ZXJuYW5k VlI= IHJlYXNvbmFibHk= IGRydW0= IHBhcnRpYWw= IGdyYXBoaWM= IHVucHJlY2VkZW50ZWQ= IGFkdmlzZWQ= TWljcm8= IEFzc2Fk cG9pbnRz c2Nhcg== IFpvbmU= dHRlcw== IDcwMA== dm8= IEhhbXA= IGZpeGVz IGNhdXRpb24= IHN0cmluZ3M= IHBhbmVscw== IGxlYWs= IHByaWNpbmc= cm93dGg= IEVycm9y IFNhaW50cw== Zml4 IG9ic2VydmF0aW9ucw== IEFicw== IHN1Z2dlc3Rpb24= IFVrcmFpbmlhbg== IGJhcnJpZXI= IHBhaW50ZWQ= QmV0 aW1pcg== IFNwZWN0 cG90 b3JuZXlz IGNvbXBvdW5k IGJlYXJz IFJ1c2g= IGx1eHVyeQ== U3Vt IG9yYml0 IE1hcmM= IGV4ZW1wdA== IFRyYWls IE1P IEhhbnM= IFdlYXBvbg== b2N1c2Vk dW1pbnVt IEplcnJ5 IGJ1c3Q= IEFH IFdpa2k= IGVuZGxlc3M= IFZsYWQ= IEJhaA== IFJhZGVvbg== a2V5cw== IFN1cnZleQ== IFZpb2w= ZGVmaW5l bGVhbg== IGNvbW1vZA== IHJldmVudWVz xY0= IGZ1cm5pdHVyZQ== IGNhc3Rpbmc= IGRpcGxvbWF0aWM= IFBsYXllcnM= IEtpbGxlZA== IG1vZGlmeQ== IGlubm92YXRpdmU= IEFidQ== bm9y IGJvbmRz IGNvYWNoaW5n TWVy IG1vZHVsZXM= IFBhdHJpb3Rz IGVuaGFuY2Vk IHByb2NlZWRpbmdz IHRlYW1tYXRlcw== IDEyOA== YXJkbw== IGNvbXByb21pc2U= IE11Y2g= IGZsZXc= IEVkZ2U= IHVubmVjZXNzYXJ5 IGRvY3RyaW5l cmVwb3J0 IE9ybGFuZG8= IFByb2ZpbGU= IHBsYXlvZmY= ZnJpZW5kbHk= IGNvbXBsYWlu IE1D IE9wdA== IEdC IGJlYXRlbg== IGdvbGY= IHBsYWNlbWVudA== Qml0 IG5ld3NsZXR0ZXI= IDIwMTk= dmlzb3I= cmF3bA== IGlQYWQ= IGFjdGVk IGp1aWNl IGRlY2tz UE4= c3VjY2Vzcw== IEhhbGY= IGRlbGV0ZWQ= IHNlY3JldHM= IGFzeWx1bQ== TWFydA== IEFjdGl2 IEd1eQ== IFRz IGR5cw== IGFzc3VtaW5n IG1hbmE= IHN1YnVy IDEyNQ== TWVkaWE= QVJZ cmlkZQ== Y3A= IGRpZmZpY3VsdGllcw== IGNvbGxlY3Rpbmc= IGJhbmtydXB0 bm9u IGNvbXBvc2Vk IHZvbHQ= IG1pbGl0YW50cw== ID4+Pg== IE1vcm1vbg== dG9y IHBhcnRpY2xlcw== IEJhcnQ= cnlwdGlvbg== IGFkbWlu IHNxdWVl VklESUE= IGNyZWF0b3I= aWFtZXRlcg== aWN1bGFy TkJD IGdyYWJiZWQ= IG5vZGQ= IHJhdGVk IHJvdGF0aW9u IGdyYXNw IGV4Y2Vzc2l2ZQ== IEVD IFdoaXQ= IGludmVudG9yeQ== YXVsdHM= IEZC IGVjb3N5c3RlbQ== IGJpbGxpb25z IHZlbnR1cmU= bmFtZWQ= IGRlZmVuZGVy b3V0ZQ== SW5zdGVhZA== aXJhYmxl V2Fy IGFzc3VtcHRpb24= IGJpdGU= IGVhcnRocXU= dGFpbA== c3BhY2U= IGdpZnRz Ym95cw== IGluZXZpdGFibGU= IHN0cnVjdHVyYWw= IGJlbmVmaWNpYWw= IGNvbXBlbGxpbmc= aG9sZQ== ZXJ2YXRpb24= IGNvYXQ= b2o= aW5jYXJu IFllYXJz IGRldGVybWluaW5n IHJoZXRvcmlj IGJvdW5kYXJpZXM= IHdoaXRlcw== QW50 YWRkeQ== KS0= cmFoYW0= ZXRlcm1pbg== IGhhcnZlc3Q= IENvbmM= IGxhcHRvcA== IE1hdGNo IGVuam95aW5n Y2Nh b2xsYXI= IHRyaXBz IGFkZGljdGlvbg== IFNhaw== IHBvd2VyZWQ= IGNvdXM= IFJ1c3NpYW5z aWVyZQ== IHJldHJpZQ== cXVhbGl0eQ== IGRpZmZlcg== IGtpbmdkb20= IExhdXI= IENhcGl0b2w= IGNvbmNsdXNpb25z IEFsdGVybg== IE5hdg== IHRyYW5zcGFyZW50 QkVS R3JvdXA= IENvbXBsZXRl IGluZmVy IGludHJpZw== IGluc2FuZQ== Uk8= b3Bob2I= aXNlbg== cXVhbA== TWljaGFlbA== IG11c2V1bQ== IFBvcGU= IHJlc2V0 cmF0aXZl Zml2ZQ== IGFnZ3JlZw== aXR0ZWVz b3NpdG9yeQ== IGNhcmI= IFJlY29yZA== IGRlY2lkZXM= IEZpeA== IGV4Y2VwdGlvbnM= IENvbW1pc3Npb25lcg== dW5z IEVudmlyb25tZW50YWw= IGxlZ2VuZGFyeQ== aXN0ZW5jZQ== IHR1bm5lbA== a20= IGluc3VsdA== IHRyb2xs IHNoYWtl IGRldGVudGlvbg== cXVlcw== IENocm9tZQ== IEZpbGVz IHN1YnQ= IHByb3NwZWN0cw== IHByb2w= cmVuZGVy cHJvb2Y= IHBlcmZvcm1hbmNlcw== U3Ry IGhyZWY= ZXJuYW1l IGFjaGlldmVtZW50 IGZ1dA== RnVsbA== IExlYmFu Z29vZ2xl 44OI YW1wYQ== TWF5YmU= IHByb2plY3RlZA== IEVtYg== IGNvbGxlZw== IGF3YXJkcw== IOKU R29sZA== IEJsYWtl IFJhag== aWZ0aW5n IHBlbmRpbmc= IGluc3RpbmN0 IGRldmVsb3BtZW50cw== Q29ubmVjdA== IE1hbmQ= IFdJVEg= IFBoaWxpcHBpbmVz cHJvZmlsZQ== IGFsdG9nZXRoZXI= IEJ1bmQ= IFRE b29vbw== YW1wZWQ= aXBo IHN0ZWFt IG9sZGVzdA== IGRldGVjdGlvbg== dWxwdA== IOc= IFdheW5l MjAwNg== ZmE= IGNpcmNsZXM= IEZ1 IGRvbm9ycw== YXBwcm9wcmlhdGU= IERha290YQ== amFtaW4= IG1vdGl2YXRlZA== IHB1cmNoYXNlcw== IExvdWlzaWFuYQ== IFNwbA== IGdsb2Jl IDEwNQ== emlw Y2FsbA== IGRlcGFydG1lbnRz IHN1c3RhaW5hYmxl MTA1 IE9Q aWZpZXJz IHByZXZlbnRlZA== IGluY29tcA== IENvbW1hbmRlcg== IGRvbWluYXRlZA== IMK7 IGludmVzdGVk IGNvbXBsZXhpdHk= IGluY2w= IGVuc3VyaW5n IHJlYWxt eW5j IEluZGVwZW5kZW50 cmFpbmVk IEplbg== IEZsaWdodA== IGF0aGU= IHNwZWN1bGF0aW9u IFRF b2NhdGU= dGlj IHBsYWludA== aGVycnk= IHRveQ== IDExMQ== IHBsYXRlcw== c3RhdHVz IElzYQ== IGRldm90ZWQ= Q29w IEVT MjU1 dXJyZW5jeQ== TWFpbg== IHNsYXZlcw== IHBlcHBlcg== IHF1b3Rlcw== IGNlaWxpbmc= IEZpc2g= IHRyYW5zZm9ybWF0aW9u IGZyYWN0aW9u IGFkdmFudGFnZXM= IHRvaWxl IHN0dW5uaW5n IG1vaXN0 YnJlYWtpbmc= c2k= IExvY2F0aW9u IE1lZGl1bQ== IHRleHRz IHVnbHk= IGJpbw== LuKAlA== IEJhc2Vk IHRyYWlucw== IFdpbmc= IEFuY2llbnQ= IFJlY29yZHM= IEhvcGU= U3BlY2lhbA== YWRlc2g= b2Jp Wy8= IHRlbXBvcmFyaWx5 VmVy aHU= b3Nlcg== IG92ZXJuaWdodA== IG1hbW0= IFRyZWFzdXJ5 IFZlbmV6dWVs IE1lZ2E= IHRhcg== IGV4cGVjdHM= YmxhY2s= b3JwaA== XFxcXA== IGFjY2VwdGFuY2U= IHJhZGFy c2lz IGp1bmlvcg== IGZyYW1lcw== IG9ic2VydmF0aW9u YWNpZXM= UG93ZXI= IEFkdmFuY2Vk TWFn b2xvZ2ljYWxseQ== IE1lY2hhbg== IHNlbnRlbmNlcw== IGFuYWx5c3Rz YXVnaHRlcnM= Zm9yY2VtZW50 IHZhZ3Vl IGNsYXVzZQ== IGRpcmVjdG9ycw== IGV2YWx1YXRl IGNhYmluZXQ= TWF0dA== IENsYXNzaWM= QW5n IGNsZXI= IEJ1Y2s= IHJlc2VhcmNoZXI= IDE2MA== IHBvb3JseQ== IGV4cGVyaWVuY2luZw== IFBlZA== IE1hbmhhdHRhbg== IGZyZWVk IHRoZW1lcw== YWR2YW50 IG5pbg== IHByYWlzZQ== MTA0 IExpYnlh YmVzdA== IHRydXN0ZWQ= IGNlYXNl IGRpZ24= RGlyZWN0 IGJvbWJpbmc= IG1pZ3JhdGlvbg== IFNjaWVuY2Vz IG11bmljaXBhbA== IEF2ZXJhZ2U= IGdsb3J5 IHJldmVhbGluZw== IGFyZW5h IHVuY2VydGFpbnR5 IGJhdHRsZWZpZWxk aWFv R29k IGNpbmVt cmFwZQ== ZWxsZQ== YXBvbnM= IGxpc3Rpbmc= IHdhaXRlZA== IHNwb3R0ZWQ= a2VsZXk= IEF1ZGlv ZW9y YXJkaW5n aWRkaW5n aWdtYQ== IE5lZw== IGxvbmU= IC0tLS0= ZXhl ZGVn IHRyYW5zZg== IHdhc2g= IHNsYXZlcnk= IGV4cGxvcmluZw== IFdX YXRzb24= IGVuY2w= bGllcw== IENyZWVr IHdvb2Rlbg== TWFuYWdlcg== IEJyYW5k dW1teQ== IEFydGh1cg== IGJ1cmVhdWNy IGJsZW5k YXJpYW5z RnVydGhlcg== IHN1cHBvc2VkbHk= IHdpbmRz IDE5Nzk= IGdyYXZpdHk= IGFuYWx5c2Vz IFRyYXZlbA== IFZldGVy IGR1bWI= IGFsdGVybmF0ZQ== Z2Fs IGNvbnN1bWVk IGVmZmVjdGl2ZW5lc3M= Licn IHBhdGhz b25kYQ== TEE= IFN0cm9uZw== IGVuYWJsZXM= IGVzY2FwZWQ= ICIi IDExMg== IDE5ODM= IHNtaWxlZA== IHRlbmRlbmN5 RmlyZQ== IHBhcnM= IFJvYw== IGxha2U= IGZpdG5lc3M= IEF0aA== IEhvcm4= IGhpZXI= IGltcG9zZQ== bW90aGVy IHBlbnNpb24= aWN1dA== Ym9ybmU= aWNpYXJ5 Ll8= IFNV IHBvbGFy aXN5 ZW5ndQ== aXRpYWxpemVk QVRB d3JpdGU= IGV4ZXJjaXNlcw== IERpYW1vbmQ= b3R5cGVz IGhhcm1mdWw= b256 IHByaW50aW5n c3Rvcnk= IGV4cGVydGlzZQ== IEdlcg== IHRyYWdlZHk= IEZseQ== IGRpdmlk YW1waXJl c3RvY2s= TWVt IHJlaWdu IHVudmU= IGFtZW5k IFByb3BoZXQ= IG11dHVhbA== IEZhYw== IHJlcGxhY2luZw== SGFy IENpcmN1aXQ= IHRocm9hdA== IFNob3Q= IGJhdHRlcmllcw== IHRvbGw= IGFkZHJlc3Npbmc= IE1lZGljYWlk IHB1cHA= IE5hcg== b2xr IGVxdWl0eQ== TVI= IEhpc3Bhbg== IExhcmdl bWlk RGV2 IGV4cGVk IGRlbW8= IE1hcnNoYWxs ZXJndXM= IGZpYmVy IGRpdm9yY2U= IENyZWF0ZQ== IHNsb3dlcg== IFBhcmtlcg== IFN0dWRlbnQ= IFRyYWluaW5n UmV0dXJu IFRydQ== IGN1Yg== IFJlYWNoZWQ= IHBhbmlj IHF1YXJ0ZXJz IHJlY3Q= IHRyZWF0aW5n IHJhdHM= IENocmlzdGlhbml0eQ== b2xlcg== IHNhY3JlZA== IGRlY2xhcmU= dWxhdGl2ZQ== ZXRpbmc= IGRlbGl2ZXJpbmc= ZXN0b25l IHRlbA== IExhcnJ5 IG1ldGE= YWNjZXB0 YXJ0eg== IFJvZ2Vy aGFuZGVk IGhlYWRlcg== IHRyYXBwZWQ= IENlbnR1cnk= IGtub2NrZWQ= IE94Zm9yZA== IHN1cnZpdm9ycw== Ym90 IGRlbW9uc3RyYXRpb24= IGRpcnQ= IGFzc2lzdHM= T01F IERyYWZ0 b3J0dW5hdGU= Zm9saW8= cGVyZWQ= dXN0ZXJz Z3Q= IExvY2s= IGp1ZGljaWFs dmVydGVk IHNlY3VyZWQ= b3V0aW5n IEJvb2tz IGhvc3Rpbmc= IGxpZnRlZA== bGVuZ3Ro IGplcg== IHdoZWVscw== IFJhbmdl dW1ibmFpbHM= IGRpYWdub3Npcw== dGVjaA== IFN0ZXdhcnQ= IFByYWN0 IG5hdGlvbndpZGU= IGRlYXI= IG9ibGlnYXRpb25z IGdyb3dz IG1hbmRhdG9yeQ== IHN1c3BpY2lvdXM= ISc= QXBy R3JlYXQ= IG1vcnRnYWdl IHByb3NlY3V0b3I= IGVkaXRvcmlhbA== IEty IHByb2Nlc3NlZA== dW5nbGU= IGZsZXhpYmlsaXR5 RWFybGllcg== IENhcnQ= IFN1Zw== IGZvY3VzZXM= IHN0YXJ0dXA= IGJyZWFjaA== IFRvYg== Y3ljbGU= 44CM cm9zZQ== IGJpemFycmU= 44CN IHZlZ2V0YWJsZXM= JCQ= IHJldHJlYXQ= b3NoaQ== IFNob3A= IEdyb3VuZA== IFN0b3A= IEhhd2FpaQ== IEF5 UGVyaGFwcw== IEJlYXV0 dWZmZXI= ZW5uYQ== IHByb2R1Y3Rpdml0eQ== Rml4ZWQ= Y29udHJvbA== IGFic2VudA== IENhbXBhaWdu R3JlZW4= IGlkZW50aWZ5aW5n IHJlZ3JldA== IHByb21vdGVk IFNldmVu IGVydQ== bmVhdGg= YXVnaGVk IFBpbg== IExpdmluZw== Q29zdA== b21hdGlj bWVnYQ== IE5pZw== b2N5 IGluYm94 IGVtcGlyZQ== IGhvcml6b250 IGJyYW5jaGVz IG1ldGFwaA== QWN0aXZl ZWRp IEZpbG0= IFNvbWV0aGluZw== IG1vZHM= aW5jaWFs IE9yaWdpbmFs R2Vu IHNwaXJpdHM= IGVhcm5pbmc= SGlzdA== IHJpZGVycw== IHNhY3JpZmlj TVQ= IFZB IFNhbHQ= IG9jY3VwYXRpb24= IE1p IGRpc2c= bGljdA== IG5pdA== IG5vZGVz ZWVt IFBpZXI= IGhhdHJlZA== cHN5 44OJ IHRoZWF0ZXI= IHNvcGhpc3RpY2F0ZWQ= IGRlZmVuZGVk IGJlc2lkZXM= IHRob3JvdWdobHk= IE1lZGljYXJl IGJsYW1lZA== YXJlbnRseQ== IGNyeWluZw== Rk9S cHJpdg== IHNpbmdpbmc= IEls IGN1dGU= b2lkZWQ= b2xpdGljYWw= IE5ldXJv 5aQ= IGRvbmF0aW9u IEVhZ2xlcw== IEdpdmU= VG9t IHN1YnN0YW50aWFsbHk= IExpY2Vuc2U= IEph IGdyZXk= IEFuaW1hbA== IEVS IFVuZA== IGtlZW4= IGNvbmNsdWRl IE1pc3Npc3NpcHBp RW5naW5l IFN0dWRpb3M= UHJlc3M= b3ZlcnM= bGxlcnM= IDM1MA== IFJhbmdlcnM= IHJvdQ== ZXJ0bw== RXA= aXNzYQ== aXZhbg== IHNlYWw= IFJlZ2lzdA== ZGlzcGxheQ== IHdlYWtlbg== dXVt IENvbW1vbnM= IFNheQ== IGN1bHR1cmVz IGxhdWdoZWQ= IHNsaXA= IHRyZWF0bWVudHM= aXphYmxl bWFydA== IFJpY2U= IGJlYXN0 IG9iZXNpdHk= IExhdXJl aWdh V2hpY2g= aG9sZGVy IGVsZGVybHk= IHBheXM= IGNvbXBsYWluZWQ= IGNyb3A= IHByb2M= IGV4cGxvc2l2ZQ== IEZhbg== IEFyc2VuYWw= QXV0aG9y ZWZ1bA== IG1lYWxz ICgt aWRheXM= IGltYWdpbmF0aW9u IGFubnVhbGx5 IG1z YXN1cmVz SGVhZA== aWto bWF0aWM= IGJveWZyaWVuZA== IENvbXB1dGVy IGJ1bXA= IHN1cmdl IENyYWln IEtpcms= RGVs bWVkaWF0ZQ== IHNjZW5hcmlvcw== IE11dA== IFN0cmVhbQ== IGNvbXBldGl0b3Jz 2YQ= IFN0YW5mb3Jk IFJlc291cmNlcw== YXplZA== YmFnZQ== IG9yZ2FuaXM= IFJlbGVhc2U= IHNlcGFyYXRlbHk= IGhhYml0cw== IG1lYXN1cmVtZW50cw== IENsb3Nl IGFjY29tcGFueQ== IGdseQ== IHRhbmc= IFJvdQ== IHBsdWdpbg== IGNvbnZleQ== IENoYWxsZW5nZQ== b290cw== amFu IGN1cnM= IFJlbGF0aW9ucw== a2VlcGVy IGFwcHJvYWNoaW5n cGluZw== U3BlYWtpbmc= IGFycmFuZ2VtZW50 IFZJ YXJldHRlcw== IGFmZmVjdGluZw== IHBlcm1pdHM= YmVjYXVzZQ== IHVzZWxlc3M= IEh1cw== ISEhIQ== IGRlc3Ryb3lpbmc= VW5mb3J0dW5hdGVseQ== IGZhc2NpbmF0aW5n U2Vt IGVsZWN0b3JhbA== IHRyYW5zcGFyZW5jeQ== IENoYW9z IHZvbHVudGVlcg== IHN0YXRpc3RpY2Fs IGFjdGl2YXRlZA== cm94 V2Vi SEU= IEhhbXBzaGlyZQ== aXNpdmU= TWFw IHRyYXNo IExhd3JlbmNl c3RpY2s= Q3I= IHJpbmdz RVhU IG9wZXJhdGlvbmFs b3Blcw== RG9lcw== IEV2YW5z IHdpdG5lc3NlZA== UG9ydA== IGxhdW5jaGluZw== ZWNvbm9t d2Vhcg== IFBhcnRpY2lw dW1t Y3VsZXM= IFJBTQ== IFR1bg== IGFzc3VyZWQ= IGJpbmFyeQ== IGJldHJheQ== IGV4cGxvcmF0aW9u IEZlbA== IGFkbWlzc2lvbg== aXRhdGVk U3k= IGF2b2lkZWQ= IFNpbXVsYXRvcg== IGNlbGVicmF0ZWQ= IEVsZWN0cmlj pZ4= IGNsdXN0ZXI= aXR6ZXJsYW5k aGVhbHRo TGluZQ== IE5hc2g= YXRvbg== IHNwYXJl IGVudGVycHJpc2U= IERJUw== Y2x1ZGVz IGZsaWdodHM= IHJlZ2FyZHM= IMOX aGFsZg== IHRydWNrcw== IGNvbnRhY3Rz IHVuY29ucw== IENsaW1hdGU= IGltbWVuc2U= TkVX b2Nj ZWN0aXZl IGVtYm9k IHBhdHJvbA== IGJlc2lkZQ== IHZpYWJsZQ== IGNyZWVw IHRyaWdnZXJlZA== dmVybmluZw== IGNvbXBhcmFibGU= cWw= IGdhaW5pbmc= YXNzZXM= ICgpOw== IEdyZXk= IE1MUw== c2l6ZWQ= IHByb3NwZXI= Ij8= IHBvbGxpbmc= IHNoYXI= IFJD IGZpcmVhcm0= b3JpZW50 IGZlbmNl IHZhcmlhdGlvbnM= Z2l2aW5n IFBp b3NwZWw= IHBsZWRnZQ== IGN1cmU= IHNweQ== IHZpb2xhdGVk IHJ1c2hlZA== IHN0cm9rZQ== IEJsb2c= c2Vscw== IEVj LCcn IHBhbGU= IENvbGxpbnM= dGVycm9y IENhbmFkaWFucw== IHR1bmU= IGxhYm9yYXRvcnk= IG5vbnM= dGFyaWFu IGRpc2FiaWxpdHk= IEdhbQ== IHNpbmdlcg== YWxn IFNlbmlvcg== IHRyYWRlZA== IFdhcnJpb3I= IGluZnJpbmc= IEZyYW5rbGlu IHN0cmFpbg== IFN3ZWRpc2g= IHNldmVudGg= IEJlbm4= IFRlbGw= IHN5bmRyb21l IHdvbmRlcmVk aWRlbg== KysrKw== aWdv IHB1cnBsZQ== IGpvdXJuYWxpc20= IHJlYmVs IGZ1 YmxvZw== IGludml0ZQ== cmVuY2llcw== IENvbnRhY3Q= SXNyYWVs IENvbnRlbnQ= IGNoZWVy IGJlZHJvb20= IEVuZ2luZWVyaW5n IFF1ZWVucw== IGR3ZWxs IFBsYXlTdGF0aW9u IERpbQ== IENvbG9u bHI= IG9wZXJhdGVz IG1vdGl2YXRpb24= VVNB YXN0ZXJlZA== Q29yZQ== IFRydXRo b2xv T1NF IE1lbW9yeQ== IHByZWRlYw== IGFuYXJjaA== IDE5MjA= IFlhbQ== w6g= Ymlk IGdyYXRlZnVs IGV4Y2l0ZW1lbnQ= IHRyZWFzdXJl IGxvbmdlc3Q= Y3RpdmU= IGRlc2VydmVz IHJlc2VydmVz IGNvcHM= IE90dGF3YQ== IEVneXB0aWFu YW5rZWQ= IGFydGlm IGh5cG90aGVzaXM= Oi8= IHB1cmNoYXNpbmc= IGxvdmVseQ== SFA= IGRpdmlkZQ== IHN0cmljdGx5 IHF1ZXN0aW9uaW5n IHRheHBheWVycw== IEpveQ== IHJvbGxz IEhlYXZ5 IHBvcnRz IG1hZ25ldGlj IGluZmxhbW0= IGJydXNo dGljcw== 4oiS IGJvdHRsZXM= cHB5 IHBhZGQ= 44Kv bWlsbGlvbg== IGRldmFzdGF0aW5n IGNvbXBpbGVk IG1lZGljYXRpb24= IHR3ZWx2ZQ== IFBlcnJ5 U3BhY2U= aW1i eW91cg== IGxlYWtlZA== IFRhcg== IHVuaXR5 IGluZmVjdGVk IHRyYXZlbGVk SURF IE1jRG9uYWxk dHh0 IFByaW5j IGludGVydmVu IFRhaXdhbg== IFBvdw== IGJlYXJpbmc= IFRocmVhZA== IHpvbmVz aXphcmRz dW5rcw== Q2hhcHRlcg== bGxvcg== IMK3 IHdvdW5kcw== IGRpc2NyZXRpb24= IHN1Y2NlZWRlZA== aWtpbmc= IGljb25pYw== Q2FsbA== IHNjcmVlbmluZw== IE1pcw== aWN0cw== IG1pbmlzdGVycw== IHNlcGFyYXRpb24= UGxheWVy IGJpcA== IGJlbG92ZWQ= IGNvdW50aW5n IEV5ZQ== YXJvdW5k aW5naW5n IHRhYmxldA== IG9mZmVuY2U= aW5hbmNl aGF2ZQ== IEluZm8= IE5pbmph IHByb3RlY3RpdmU= IENhc3M= TWFj IFF1YWxpdHk= Tm9ydGg= IGlj IEN1YmE= IENocm9uaWNsZQ== IFByb3BlcnR5 IGZhc3Rlc3Q= b3Rvcw== IEdlcm0= T1dO IGJvb20= IFN0YW5sZXk= ZXJndXNvbg== IGNsZXZlcg== IGVudGVycw== bW9kZQ== dGVyaW9y IFNlbnM= IGxpbmVhcg== QVJL IGNvbXBhcmluZw== IHB1cmVseQ== IHNhZmVy IFBvdHRlcg== IGN1cHM= UlQ= IGdsdWM= IGF0dHJpYnV0ZWQ= IGR1cGw= IFBhcA== IHByZWNpb3Vz IHBh aWN0aW9uYXJ5 IFRpZw== IFRvbw== b2x1dGlvbnM= c3Rhbg== IHJvYm90cw== IGxvYmI= IHN0YXR1dGU= IHByZXZlbnRpb24= d2VzdGVybg== MTYw IEFjdGl2ZQ== IE1hcmlh aGFs Tm9uZQ== ZWxsYXI= IEtC IFBhcnRuZXJz IFNpbmdsZQ== IEZvbGxvd2luZw== YW5nbw== YWNpb3Vz IHRob3U= IGtn IGluZmx1ZW50aWFs IEZyaWVuZHM= U3Vy YWludGVk IGZvcnVtcw== IHN0YXJ0ZXI= IGNpdGl6ZW5zaGlw IEVsZWN0aW9u b25nZQ== b3RhdGlvbg== b3NwaA== Ozs7Ow== dXRpY2Fs cHVy ZXJlbg== IGFjY3VzYXRpb25z Yml0aW91cw== YWJiaXQ= IE9yZA== UG9zdGVk aXJr IHNlbnNpdGl2aXR5 aWNoZQ== IEFteQ== IEZhYg== IHN1bW1pdA== IHBlZGVzdA== IHJ1YmJlcg== IGFncmljdWx0dXJhbA== IGNhbmNlbA== QUU= IGluYXVn IGNvbnRhbQ== IGZpcm1seQ== aXc= c3RhZ2U= IEthbg== IHRpZXI= IGludmVudGlvbg== IHRyYW5zbGF0ZWQ= IFJ1bGVz Qm94 VHdpdHRlcg== SURT IHBpenph IGRlYnVn IERyb3A= dnM= IGhvcnNlcw== Ymln IGJvcmluZw== IGhvb2Q= IE1jQ2Fpbg== YXRjaGVk IEJyb3M= IHNraXA= IGVzc2F5 c3RhdA== IExlZ2VuZHM= IGFtbXVuaXRpb24= YXVj IHNob290ZXI= IHVuaA== IHN1cHBsaWVk IGdlbmVyaWM= IFNL aWJhbg== eXJpY3M= IDI1NQ== IGNsaW1iaW5n Rm9ybWVy IGZsaXA= IGp1bXBpbmc= IGZydXN0cmF0aW9u IFRlcnJ5 IG5laWdoYm9yaG9vZHM= IG1lZGlhbg== YmVhbg== IGJyYWlucw== Rm9sbG93aW5n IHNoYXBlZA== IGRyYXdz IGFsdGVyZWQ= SmFjaw== IHJlY2lwZXM= IHNraWxsZWQ= d2VhbHRo YWNoaQ== ZWxlY3Rpb24= IGJlaGF2aW9ycw== ZGVhbHM= IFVudGls RmU= IGRlY2xhcmF0aW9u bWFya3M= IEJldHdlZW4= Y2Vsb25h IHJlc29u IGJ1YmJsZQ== QW1vbmc= IGltcGVyaWFs R1M= IGZlbWluaXN0 MjAwNQ== IEt5bGU= IGFjY291bnRpbmc= IFRlbGU= IFR5cg== IGNvbm5lY3Rpbmc= IHJlaGFi IFByZWQ= c2lt IG1lYW50aW1l IHBoeXNpY2lhbg== TVc= IENhbXBiZWxs IEJyYW5kb24= IGNvbnRyaWJ1dGluZw== IFJ1bGU= IFdlaWdodA== IE5hcA== IGludGVyYWN0aXZl IHZhZw== IGhlbG1ldA== IENvbWI= Zm91cg== IHNoaXBwZWQ= IGNvbXBsZXRpbmc= IFBE UERBVEU= IHNwcmVhZGluZw== IHNjYXJ5 ZXJ2aW5n IEdhcw== IGZyYW5r c2Nob29s IHJvbWFudGlj IHN0YWJpbA== Um9i IGFjY3VyYXRlbHk= IGFjdXRl IEhhbm4= IHN5bWJvbHM= IGNpdmlsaXphdGlvbg== IEFX IGxpZ2h0bmluZw== IGNvbnNpZGVycw== IHZlbnVl INc= IG92ZW4= IFNG aGlz IG51 IExlYXJu IHBlb3BsZXM= IHN0ZA== IHNsZWU= IHNsaWM= IFN0YXRpc3RpY3M= IGNvcm5lcnM= IEJha2Vy IDop bWVudGF0aW9u b2x2ZXI= IGxhdWdoaW5n IFRvZGQ= b25kZQ== IEhpbGxz IG51dHM= IFdvbWFu cGxhbmU= IGxpdmVy IEluc2lkZQ== U29ycnk= IGFncmVlcw== IGZ1bmRhbWVudA== IEZpc2hlcg== IGF1Y3Rpb24= IHRocmVhZHM= Z2xhcw== IEJhc2lj IE5hdA== IGxhY2tpbmc= IGNlbGVicmF0aW9u anU= IHNpbGx5 RXVybw== IHRhdHQ= aWdodHk= Y29udHJvbGxlZA== VGVzdA== IFNpbmdo IHJhZ2U= IHJoeXRo b2ZmaWM= IFBoYW50b20= IGhlYWRsaW5lcw== IHJlc3BvbmRpbmc= IE1vcm5pbmc= IHZpdGFtaW4= IGJvb3Rz IFNpdGU= YWxpbg== cGk= IHZpcmFs IFVD REVS IFNleA== IHN0b2Nrcw== Y3VycmVudA== IGNodXJjaGVz IFJhcmU= IE11cnBoeQ== IGRlbmlhbA== IEdhbWluZw== IHRvdWc= IG5pY2s= IG1ha2Vycw== IFJvbmFsZA== IGdlbmVyb3Vz IERvYw== IE1vcnJpcw== IHRyYW5zZm9ybWVk IE5vcm1hbA== IDEwNA== IEtpY2tzdGFydGVy IFVwb24= T25saW5l IElSUw== IHdyYXA= IGxvdmluZw== IGFycml2ZXM= IER1ZQ== IGhldGVy IE1hZGU= IHJlbnRhbA== IGJlbG9uZ3M= IGF0dG9ybmV5cw== IGNyb3Bz IG1hdGNoZWQ= dWx1bQ== b2xpbmU= MTA5 IGRpc3Bhcg== IGJ1eWVycw== IENhbWJyaWRnZQ== IGV0aGljcw== cm91cHM= IGp1c3RpZmllZA== IG1hcmdpbmFs IHJlc3BlY3RlZA== d2lubmluZw== IG5vZGRlZA== IFNlcmdl IEZvcm1lcg== Q3JhZnQ= IyMjIyMjIyMjIyMjIyMjIw== IFdhcm5lcg== IGRhc2g= ZXRl IGVudGVydA== IEVzY2FwZQ== b3V0aGVhc3Q= IGtuZWVz IEJvbWI= IHJ1Zw== UGFzcw== IGF0dGl0dWRlcw== Z292ZXJubWVudA== IFByaW9y IHF1YWxpdGllcw== IG5vdGlmaWNhdGlvbg== IFBob25l bGll IGFudGljaXBhdGVk IENvbWJhdA== IEJhcnJ5 IDE5ODI= VXNlcnM= b25lcg== IGNvbXB1dGluZw== IENvbm5lY3RpY3V0 IGxlc3Nlcg== IHBlZXJz IEN1 IHRlY2huaWNhbGx5 IHN1Ym1pc3Npb24= IFVuaXZlcnNhbA== IG1hbnVhbGx5 b3VyZ2U= IHJlc3BvbmRlbnRz IEJUQw== IEhvc3Q= IGZhcmU= IEJpcmQ= IHJlY2VpcHQ= YWxzbw== IGphY2s= IGFncmljdWx0dXJl IHNrdWxs ICE9 IHBhc3NpdmU= IENJ IHNvY2lldGllcw== IHJlbWluZGVk IGludGVyZmVyZW5jZQ== QnV5 IOKc Z29u IHNjcnV0aW55 IFdpdGNo IGNvbmR1Y3Rpbmc= IOOD IGV4Y2hhbmdlcw== IE1pdGNoZWxs IGluaGFiaXQ= IHR3aXN0 QkQ= IHdoZXJldmVy Z3JvdXBvbg== IGpva2Vz IEJlbmphbWlu IFJhbmRvbQ== ZnJhbWU= IExpb25z IGhpZ2hsaWdodGVk IEFya2Fuc2Fz RW50 IHBpbGU= IHByZWxpbQ== Z3M= bWluZGVk IGZlbG9ueQ== IEdB IEx1Y2s= IHByYWN0aWNhbGx5 IEJvcw== IGFjdHJlc3M= RGFt IEJvdQ== IHZpc2E= IGVtYmVkZGVk IGh5YnJpZA== IGVhcmxpZXN0 IHNvb25lcg== c29jaWFs IEhB IHN0ZWVw IGRpc2FkdmFudA== IGV4cGxvaXQ= IEVnZw== IFVsdHJh IG5lY2Vzc2l0eQ== TG9jYWw= aWVnZQ== IGRhdGVk IG1hc3Nlcw== IHN1YnNjcmlwdGlvbg== cGxlc3M= IGFub255bQ== IHByZXN1bWFibHk= Qmx1ZQ== VGhlaXI= YXNrZXRiYWxs IFBoaWxpcA== IGNvbWVk bG9hZGVk cmFuZQ== IHJlZmxlY3Rpb24= Q2hpbmE= IGV4dGVuZHM= IGZvcm1pbmc= IHVuZGVycw== MjAwMQ== IGdyYXQ= IGNvbmNlbnRyYXRpb25z IGluc3VsaW4= IHNlY3VsYXI= IHdoaWxzdA== IHdpbm5lcnM= QWR2ZXJ0aXNlbWVudHM= IGRlbGliZXJhdGVseQ== IFdvcmtpbmc= IHNpbms= ZXRpY3M= ZGFsZQ== IG1hbmRhdGU= IGdyYW0= IHZhY2F0aW9u IHdhcm5pbmdz cmlwcA== IFRIQVQ= IGNvbW1lbnRhcnk= IGludHU= IGFlc3Q= IHJlYXNvbmluZw== IGJyZWFrZG93bg== IFpvbWJpZQ== IC0tPg== IFBvbGl0aWNhbA== Y290dA== IHRocnVzdA== IHRlY2hub2xvZ2ljYWw= IGRlY2lkaW5n IHRyYWZmaWNraW5n TG9uZw== V2VsY29tZQ== cHJpc2luZw== IENvbW11bmljYXRpb25z IGVuZG9ycw== IHN3aWZ0 IG1ldGFib2w= Y29pbnM= cmVzYQ== IEhUVFA= IGVucm9sbA== IEhhcHB5 dXNy aW50YWdl IFsi dWFibHk= IE1hdGVyaWFs IHJlcGVhbA== U2VwdA== a2g= IE1vZGk= IHVuZGVybmVhdGg= IElM c2hvcmU= IGRpYWdub3NlZA== YWNldXRpY2Fs IHNob3dlcg== YXV4 IFN3aXRjaA== IFN0cmVuZ3Ro IGppaGFk bmF0aW9uYWw= IHRyYXVtYQ== dXNzeQ== b25p IGNvbnNvbGlk IGNhbG9yaWVz IEZseW5u YWdnZWQ= MTY4 IFBpbms= IGZ1bGZpbGw= IGNoYWlucw== IG5vdGFibHk= IEFW TGlmZQ== IENodWNr bXVz IFVyYmFu IEhlbmQ= IGRlcG9zaXQ= IFNhZA== IGFmZmFpcg== T1JL aWV2YWw= IEZEQQ== IHRyb3A= IE92ZXJhbGw= IHZpcnR1ZQ== IHNhdGlzZmFjdGlvbg== YXVuZA== IGx1bg== IFN3aXR6ZXJsYW5k IE9wZXJhdGlvbg== cHJvY2Vzcw== IHNob29r IGNvdW50aWVz bGVhc2Vk IENoYXJsb3R0ZQ== MTEy IHRyYW5zY3JpcHQ= IHJlZGQ= cHVzaA== IEhleQ== IEFuYWx5c2lz WyI= IGFsdGVybmF0aXZlcw== YXJkbGVzcw== IGVsZXBo IHByZWp1ZA== IExlYWY= SGF2aW5n IEh1Yg== IGV4cHJlc3Npb25z IFZvbHVtZQ== IHNob2NraW5n IFJlZHM= IHJlYWRpbHk= IHBsYW5ldHM= YWRhdGE= IGNvbGxhcHNlZA== IE1hZHJpZA== IGlycml0 aXBwZXI= IEVuYw== IFdpcmU= IGJ1eno= IEdQ YXNoYQ== IGFjY2lkZW50YWxseQ== dXJ1 IGZydXN0cmF0ZWQ= IFNB IGh1bmdyeQ== IEh1ZmY= IGxhYmVscw== YW50bw== IEVQ IGJhcnJpZXJz KXw= IEJlcmtlbGV5 IEpldHM= IHBhaXJz IExhbg== SmFtZXM= IEJlYXI= IGh1bW9y IExpYmVydHk= IG1hZ25pdHVkZQ== IGFnaW5n IE1hc29u IGZyaWVuZHNoaXA= dW1ibGluZw== IGVtZXJnZQ== IG5ld3NwYXBlcnM= IGFtYml0aW91cw== IFJpY2hhcmRz YXRlcm5hbA== IDE5ODE= IGNvb2tpZXM= IHNjdWxwdA== IHB1cnN1aXQ= TG9jYXRpb24= IHNjcmlwdHM= cGM= IGFycmFuZ2VtZW50cw== IGRpYW1ldGVy IGxvc2Vz YW1hdGlvbg== IGxpcXU= IEpha2U= YXJldHRl IHVuZGVyc3RhbmRz IFplbg== dm0= IGFwcHJvdmU= IHdpcA== IHVsdHJh IGludGVuZA== IERJ YXNjdWxhcg== IHN0YXlz IEtvcg== IEts IGludmVzdGluZw== TGE= IGJlbGlldmluZw== YmFk bW91dGg= IHRheHBheWVy 44OD IFF1ZWJlYw== IGxhcA== IFN3aXNz ZHJvcA== IGRyYWlu aXJp ZXRj ZnRlbg== IE5leA== IHN0cmF3 IHNjcmVhbWluZw== IGNvdW50ZWQ= IGRhbWFnaW5n IGFtYmFzc2Fkb3I= Y2VudHVyeQ== IHByb3g= IGFycmVzdHM= dXY= aWxhdGVyYWw= IENoYXJn IHByZXNjcmliZWQ= IGluZGVwZW5kZW50bHk= IGZpZXJjZQ== IEJhYnk= IGJyYXZl IHN1aXRz PT4= IGJhc2VsaW5l IFJhdGU= IGlzbGFuZHM= ICgo Z3JlZW4= aXhlbHM= IG5hbWVseQ== IFZpbGxhZ2U= dGhhbg== YW15 VmVyc2lvbg== Z21haWw= ZW50aWFscw== IFN1ZA== IE1lbGJvdXJuZQ== IGFycml2aW5n IHF1YW50dW0= ZWZm cm9wb2xpdGFu VHJp IGZ1bmVyYWw= IElS w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IENvYg== aXRhYmx5 IHR1cmI= IGNvbWJv UmV2aWV3 IGRlcGxveW1lbnQ= dWl0eQ== IEJvdHQ= IGludmlzaWJsZQ== IHJlbmRlcmluZw== IHVubG9ja2Vk IGFxdQ== IFZsYWRpbWly IHBhZA== IEJyYWlu IExlZ2FjeQ== ZHJhZ29u IEt1cmRpc2g= IHNvdW5kZWQ= IGRldGFpbmVk IERN Z2FyeQ== IGRhdWdodGVycw== IGRpc3R1cmJpbmc= dWth IFBhcmFk IHRhc3Q= IHVuZm9ydHVuYXRl IHVs ZW1pbg== IGF0dGVuZGFuY2U= dHJs IHBhcmtz IE1lbW9yaWFs IEFsaWNl b3RoeQ== Z3VhcmQ= IERpc2U= IFNoYW4= IEZvcnVt UmljaA== IHNoaWZ0ZWQ= dWV6 IGxpZ2h0ZXI= IE1hZ24= IGNvZA== U2No aGFtbWFk UHVi MzUw IFBva2Vtb24= IHByb3RvdHlwZQ== IHVucmU= QmFzZQ== IFN0dWRlbnRz IFJlcGx5 IENvbW11bmlzdA== IGdhdQ== IFR5bGVy SVo= IHBhcnRpY2lwYXRlZA== IHN1cHJlbQ== IERldGFpbHM= IHZlc3NlbHM= cm9k IHRyaWJl a2VlcA== IGFzc3VtcHRpb25z IHBvdW5k IGNydWRl IEF2YWlsYWJsZQ== IHN3aW1taW5n IGluY2x1c2lvbg== IGFkdmFuY2Vz Y3VsYXRpb24= IGNvbnNlcnZhdGlvbg== IG92ZXJk IEJ1ZmZhbG8= QXJ0aWNsZQ== ZWRnZQ== IGF3YQ== IE1hZGlzb24= IHNpZGV3 IGNhdGFzdA== IEtyaXN0 dWNsZQ== IEhpZ2h3YXk= IFRlcnJvcg== IGFjdGl2YXRpb24= IHVuY29uc2Npb3Vz IFNhdGFu IFN1c2Fu aWxsZXJ5 IGFycmFuZ2Vk aW9w IHJ1bW9ycw== dXJyaW5n dGhpbms= IEtlaXRo IEtpbmQ= IGF2b2lkaW5n Ynlu bnV0 IFNwZWFrZXI= cnVz bmFtZXM= IGd1aWx0 IE9seW1waWNz IHNhaWw= IE1lcw== bGV2YW50 IENvbHVtYnVz YWZ0 Q2l0eQ== U291dGg= IEhhcnZleQ== IFB1bg== U2V2ZXJhbA== IG1lbnRhbGx5 IGltcHJlc3M= bW91bnQ= IFVidW50dQ== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU IFN1cGVybWFu IE1Qcw== IGludGVudGlvbnM= IFJhY2luZw== IGxpa2VsaWhvb2Q= IDI0MA== VG90YWw= IHRveXM= IFdhdHNvbg== IHVyZ2U= TGVhcg== IFBhcGVy IG9jY3VycmluZw== IEJlbmc= IENlcnQ= IHN0b25lcw== VGlt IFR3aW4= emI= IER5bmFt IHBvbGl0aWNpYW4= a2Vucw== IEVudGVycHJpc2U= VVRFUlM= IGFib2w= IHJlZnJlc2g= IGFyYml0cmFyeQ== cGVjdGlvbg== IHRyb3VibGVz IH0pOw== dHY= IHBpbG90cw== IGRpc3RyaWJ1dGU= IGF1ZGl0 IHBhdXNl b3JpZ2luYWw= IHJpdmFscw== wqM= Rmln VEw= YWJpbA== cnlpbmc= TGlu aW9uZWQ= bG9u IGZhbmN5 IGNyYXNoZWQ= IHRyYWN0 IHNoZWQ= IGNvbnN1bWU= QmFzZWQ= ZG93bmxvYWQ= aW5pdA== IHZvbHRhZ2U= SW50cm9kdQ== IGNvbmRlbW5lZA== IEZpbmFuY2U= cmVzcGVjdA== IGV4Y2x1ZGVk IGVzdGFibGlzaGluZw== aGVyaWM= IGhlcml0YWdl IHNwZWN0YWN1bGFy IHVuc3Q= IFNub3dkZW4= IExhbmU= U2Fu IHByb3RlY3Rpb25z c3RydWN0aW9u aW5jaW5u IG1hY3Jv Q3VzdG9t aW9zaXR5 IGVzcA== IGZ1bmN0aW9uaW5n IG11c2g= IHB1enpsZQ== IGV0aGljYWw= TWFs IGdvdmVybmluZw== IEZlcmd1c29u IHJlc3RvcmVk IHN0cmVzc2Vk IENvdW50ZXI= IEthcw== Y2xpcA== QU5T IHNlaXo= VUs= Ynlzcw== b2xkb3du YXBp IHBlcm1hbmVudGx5 b3VudGVycw== V2VzdA== VGhyb3VnaA== TGlnaHQ= YXRvZXM= IG5lYXQ= IGNvcmQ= dXJlcg== IHNldmVyZWx5 IEF2ZW4= IGludGVycm9n IHRyaXBsZQ== R2l2ZW4= TnVtYmVy IGFyaXNl IHNoZXI= cGxhbnQ= IGZsb3dlcg== IENvdQ== IGF0ZQ== IG5ld2Vy YnVs IG1lYW53aGlsZQ== IExhaXI= IGFkanVzdG1lbnQ= IENvcHlyaWdodA== IGRpdmVycw== aW9sb2dpY2Fs IGdhbWVycw== b2F0 IGhpc3RvcmljYWxseQ== IGFuYWxvZw== IGxvbmd0aW1l IHByZXNjcmlwdGlvbg== IE1pc3Q= IEh5cGVy IE1haW5l IERlaXR5 IG11bHRpcGw= IFJlaW5jYXJu IEh5ZA== IFBpYw== U2ls cmFudHM= IENyaXM= Ljs= KHs= ZXBlbmRlbmNl IHJlY3k= YXRldXI= IHF1YWQ= IGdsb2I= IGNvbmNlZA== dGVhbQ== IGNhcGl0YWxpc3Q= IExvdA== IHJveWFs IEN5YmVy IGJsYWNrcw== bWV0aWM= cml2 IERhbm55 IHNwbw== IFJP IGFuaW1hdGVk cnlwdGVk IERlcHV0eQ== IHJlbmRlcmVk RkU= IHN0cmVhaw== IGNsb3Vkcw== IERvdWc= fn5+fn5+fn4= IGRpc2NvdXI= IFZlaA== IHBzeWNob2xvZ3k= IEpvdXJuZXk= IGNyeXN0YWw= IEZyb3N0 IHN1c3BpY2lvbg== IHJlbGF0ZQ== b3J1cw== IENyeXB0 IE5WSURJQQ== Y29tZWQ= dXRpbmc= aW5jaW5uYXRp IHZ1bG5lcmFiaWxpdHk= b3N0aWM= IGlzb2xhdGlvbg== IGNvb2xpbmc= IENvYWxpdGlvbg== IDExOQ== Rm91cg== IERlYWw= IOKJ c2VtYmxl cmFtZW50 IEJhcmNlbG9uYQ== IDEwMg== IGNvY2FpbmU= b2NhbHlwc2U= RmVi b2dlbmlj IG11dGF0aW9u IGNyeXB0b2M= IEtlbA== IEdpdA== YWlz IHNpc3RlcnM= QU5L IGFjdGl2YXRl VGVy IGRyZWFk eWxvbg== IHByb3ByaQ== QXVzdA== IERlZmF1bHQ= IG91dGRvb3I= IHNoZWVy Y2VpdmU= IGdlbnRseQ== 0L4= UHJvZ3JhbQ== IOKGkg== IHZlZ2Fu IENydXM= IHJlc3BvbnNpYmlsaXRpZXM= IEhS T0xE IHByZXZlbnRz IHN0aWZm IFdlcmU= IGF0aGxldGlj IFNjb3Jl ICk6 IGNvbHVtbnM= IExvYw== YXZhaWxhYmxl IEZyYW0= IFNlc3Npb25z IGNvbXBhbmlvbg== IHBhY2tz MTQw IEtuaWdodHM= IGZhcnQ= IHN0cmVhbXM= IHNob3Jl IGFwcGVhbHM= IFBlcmZvcm1hbmNl aGF1bA== IFN0cmE= IE5hZw== MTAz IFRyYW5zcG9ydGF0aW9u QkI= RXY= emFu UHVibGlj IHR3aW4= dWxzaW9u TXVsdA== IGVsZWN0cm8= IHN0YXR1ZQ== YXRpb25hbGx5 IE5vcnQ= IGluc3BlY3Rpb24= Lyo= aWd1ZQ== IGNvbXBhc3Npb24= IFRhbGVz IFN0ZWlu IFNjcmVlbg== IEJ1Zw== IExpb24= Z2lybA== IHdpdGhkcmF3YWw= IG9iamVjdGl2ZXM= IGJsb29keQ== IHByZWxpbWluYXJ5 IGphY2tldA== IGRpbWVuc2lvbnM= IENvb2w= IE9jY3Vw IHdyZWNr IGRvdWJsZWQ= YW5raW5n IDE5NzU= IGdsYXNzZXM= IFdhbmc= cHJvdg== UGF0aA== Y29ubmVjdGVk IE11bHRp IE5vcndheQ== YWdvbmlzdA== IGZlYXJlZA== IHRvdWNoaW5n IGFyZ3VhYmx5 wq/Cr8Kvwq/Cr8Kvwq/Crw== IE5DQUE= Y2hlbQ== IHNwYXQ= IFdXRQ== IENlbA== aWdnZXI= IGF0dGFja2Vy IEpvaW4= b2JqZWN0 ZXR0YQ== IGVsaW1pbmF0ZWQ= ZGV0 IGRlc3RydWN0 IEx1Y2Fz Y3R1YXJ5 MTgw IEJyYWR5 IEJsdWVz QmF5 YXVrZWU= IHRpbWVsaW5l IGRlbGVnYXRlcw== d3JpdHRlbg== dWZmaWNpZW50 IHNoYXBlcw== Q29weXJpZ2h0 b3VibGU= c2VydmljZQ== IHBpb25l IGNvbGxlZ2Vz IHJvd3M= IHNwaXRl IGFzc2Vzc2Vk MzYw IGxlYXNl IGNvbmZpZGVudGlhbA== Y2tlcg== IE1hbm5pbmc= IFZvaWNl IHNlYWxlZA== IGNhbGN1bGF0ZQ== Tk8= IEFzc2lzdGFudA== IHRlZW5hZ2Vy dWxlbnQ= YXRoZXJpbmU= IG1vY2s= IGRpYW1vbmQ= IGZlc3Q= IHN3aXRjaGVk IHJlc3VtZQ== IFB1ZXJ0bw== IGxhbmVz aXJhdGlvbg== IFNpbWlsYXJseQ== IHJvZA== IFNlbA== IFBhbGFjZQ== IExpbWl0ZWQ= ZW91cw== IHZhcmlhbnQ= IHdhcmQ= ICkp U2hvdw== T09L QWxleA== IE5lcA== YnJpcw== IFdpa2lwZWRpYQ== IGV4Y2VwdGlvbmFs IG1hbmFnZXM= IERyYXc= QWdhaW4= IGNvcHBlcg== dXR0 IGV4cG9ydHM= IHBvcnRmb2xpbw== IGVsZXZhdGVk UmF0ZWQ= IE90aGVyd2lzZQ== IFRhY3Q= IFNoZWw= IFRY IuKAlA== IHJlc3Vy IFdh dmVuYW50 IG1vbmV0YXJ5 cGVvcGxl RW1haWw= IGZpZnR5 IFN3ZWV0 IE1hbGF5c2lh IGNvbmZ1c2luZw== IFJpbw== dWRh dXRlbmFudA== Iik7 IHByYWlzZWQ= IHZvbHVtZXM= dHVybg== IG1hdHVyZQ== IG5vbnByb2ZpdA== IHBhc3Npb25hdGU= IFByaXZhdGU= IDEwMw== IGRlc2NlbmQ= 56We dWZmeQ== aGVhZGVk V2hldGhlcg== cmllbg== emVjaA== YmVpdA== IGNocm9t IE1jTQ== IGRhbmNpbmc= IGVsZWc= IE5vdGljZWQ= MTE1 IGFkdm9jYWN5 RU5UUw== YW1ibGluZw== IE1pbm9y IEZpbm4= IHByaW9yaXRpZXM= IHRoZXJlb2Y= IFN0YWdl IFJvZ2Vycw== IHN1YnN0aXR1dGU= IEphcg== IEplZmZlcnNvbg== IGxpZ2h0bHk= MTAy IExpc2E= dWl0cw== eXNpY2Fs IHNoaWZ0cw== IGRyb25lcw== IHdvcmtwbGFjZQ== IHJlc2lk ZW5zZWQ= YWhu IHByZWZlcmVuY2Vz c2VydmVy IGRlYmF0ZXM= ZG9j IEdvZHM= IGhlbGljb3B0ZXI= IGhvbm91cg== IGNvbnNpZGVyYWJseQ== ZWRlZA== IEZlbWFsZQ== IEFubmU= IHJldW4= IEZhY2U= IEhhbGxvdw== IEJ1ZGdldA== IGNvbmRlbW4= IHRlbmRlcg== UHJvZg== b2NyYXRpYw== IFR1cm5lcg== IEFncmlj IDE5NzY= IGFwdA== ZGlzYw== IEZpZ2h0ZXI= IEF1cg== IGdhcmJhZ2U= aW5wdXQ= IEthcmw= IE9saXZlcg== IExhbmd1YWdl a24= Tm9u IENsYXI= IHRyYWRpdGlvbnM= IGFkdmVydGlzZW1lbnQ= IFNvcg== IGFyY2hpdmU= IHZpbGxhZ2Vz NzUw IGltcGxlbWVudGluZw== d2F1a2Vl IGRpZXRhcnk= IHN3aXRjaGluZw== UmVwdWJsaWM= IHZlbG9jaXR5 IGNpdA== IEF3YXJkcw== IGZpbmFuY2luZw== IGxhc3RlZA== KV0= IHJlbWluZGVy UGVyc29u IHByZWNpc2lvbg== IGRlc2lnbmVycw== IEZyaWVk IEJvcmRlcg== IHRyYWdpYw== IHdpZWxk IGluaXRpYXRpdmVz IFRhbms= d2Vy IGpvaW5z Um8= aW5lcnk= IGFycm93 IGdlbmVyYXRpbmc= Zm91bmRlcg== IHNlYXJjaGVz IHJhbmRvbWx5 QWNjZXNz IGJhdGNo IHBvc2Vk bGF0 IHB1cnN1aW5n YXNh IHRlc3RpZmllZA== Zm9ybWluZw== IFNoYXI= d2lraQ== IEVpdGhlcg== U29tZXRpbWVz IHNlbmF0b3Jz IEpvaG5ueQ== IFRhbGliYW4= IEdQUw== IjoiLw== 44Gu5Q== IGFuYWx5emVk IFJ1Ymlv IE1vdmVtZW50 b3BhcmQ= aWlp U3RhbmQ= ZmlnaHQ= IGlnbm9yaW5n aWFuZw== IEdO c29ldmVy IFNUQVQ= IHJlZnVzaW5n IHN3ZWF0 IGJheQ== UE9SVA== aXJtZWQ= YWt5 IGRpc3Bybw== IGxhYmVsZWQ= IDEwOA== SGVsbG8= IHBsZWFzYW50 YWJh IHRyaXVtcGg= IGFib2FyZA== IGluY29t IENyb3c= bGV0dA== IGZvbGs= IGNoYXNl YGA= IEJydXM= IHRlZW5z Y3Vl IHRlcnJhaW4= aHlk aWxpZ2h0 T1JZ U3VwcG9ydA== ZXdz bGxp cmFpbnRz IENhbmQ= IGFidXNlZA== YWNobWVudA== bGFyZw== QmFz IENhbmNlcg== IDE5Nzg= IHN1cHBvcnRlcg== YWNjZXNz IFRlcm1pbg== IFRhbXBh IEFOWQ== IG5ld2VzdA== IENyaW1pbmFs ZWR1 IDE5MzA= IGFkbWl0cw== IGVuZGU= IGZhaWx1cmVz dXJhdGU= ZnVsbmVzcw== Y3ljbA== IFN1YmplY3Q= IGluZmluaXRl dGhyZWU= V0E= cGl0 IEluc3RhbGw= UmFk aWxpYXRpb24= R00= IGNvbnRpbmVudA== IGFjY29tbW9kYXRl IENsYXk= IHB1cA== IEZ1bmN0aW9u IGhhbW1lcg== IEFsYmVydGE= IHJldmlzZWQ= IG1pbm9yaXRpZXM= IG1lYXN1cmVtZW50 Q29ubmVsbA== IGRpc2FibGU= IE1peA== SW5jcmU= IGZvcms= IFJvc2Vu IGltcGxpZXM= dW1ibHI= QU5H IHByb3RlaW5z IGFnZ3Jlc3Npb24= IGZhY2lsaXRhdGU= U04= IGlsbGVnYWxseQ== dWVy IGFjYWRlbQ== IHB1eno= IFNoaWZ0 cGF5 b2xsbw== IGF1ZGllbmNlcw== QnVpbGQ= IG5vYmxl IHN5bnRheA== 4piF IGJlYW0= IEJlZA== IEFsZA== IG9yaWdpbnM= dmlkZW8= IDE5Nzc= IEFzc2F1bHQ= IGdhcmFnZQ== VGVhbQ== IHZlcmRpY3Q= IGR3YXI= IFZpcnR1YWw= ZXZlbnQ= S2VlcA== IHNlbnRpbWVudA== IHdpbGRsaWZl c2hpcnQ= IGJ1cmc= IHJlY29tbWVuZGF0aW9u cmVwcmVzZW50 IGdhbGxlcnk= b3duZXJz IHNjaG9sYXI= IGNvbnZlbmllbmNl IFN3aWZ0 IGNvbnZpbmM= Q2Fw IHdhcmZhcmU= IFZpc3VhbA== IGNvbnN0aXR1dGU= IGFib3J0 IFdlYXRoZXI= IExvb2tpbmc= IEhlbQ== IG1hcnRpYWw= IGluY29taW5n ZXRpdGlvbg== IHRvbGVyYW5jZQ== IENyZWF0ZWQ= IGZsb3dz IEVsZGVy IHNvdWxz IGZvdWw= IFBhaW4= IENBTg== IDIyMA== YmM= aGVuZA== IGdlbml1cw== UmVhbA== IFdy b21ldGVy cGFk IGxpbWl0aW5n IFNp IExvcmU= IEFkdmVudHVyZXM= IHZhcmllZA== RGlzYw== Zmlu IFBlcnNvbmFs Q2hyaXM= IGludmVudGVk IGRpdmU= IFJpc2U= IG96 IENvbWljcw== IGV4cG9zZQ== IFJlYg== bGV0dGVycw== c2l0ZQ== aW1hdGVk IGhhY2tpbmc= IGVkdWNhdGVk IE5vYm9keQ== IGRlcHJp IGluY2VudGl2ZQ== 44K3 IG92ZXJzaWdodA== IHRyaWJlcw== IEJlbGdpdW0= IGxpY2Vuc2luZw== b3VydA== UHJvZHVjdA== YWhs IEdlbQ== IHNwZWNpYWxpc3Q= IGNyYQ== YW5uZXJz IENvcmJ5bg== IDE5NzM= UkVBRA== IHN1bW1hcg== IG92ZXJsb29r IEFwcGxpY2F0aW9u IGluYXBwcm9wcmlhdGU= IGRvd25sb2FkZWQ= UXVl IEJlYXJz IHRodW1i IENoYXJhY3Rlcg== IFJlaW5jYXJuYXRlZA== IFNpZA== IGRlbW9uc3RyYXRlcw== c2t5 IEJsb29tYmVyZw== IEFycmF5 IFJlc3VsdHM= IEZvdXJ0aA== IEVEVA== IE9zY2Fy Y2VuZA== IDEwNg== IE5VTEw= IEhFUkU= bWF0Y2g= IEJydW4= IGdsdWNvc2U= aWVn ZWd1 IGNlcnRpZmllZA== IHJlbGll IGh1bWFuaXRhcmlhbg== IHByYXllcnM= S2luZw== IG5hbg== aG91 MTA4 dWx1 IHJlbmV3YWJsZQ== IGRpc3Rpbmd1aXNo IGRlbnNl IFZlbnQ= IFBhY2thZ2U= IEJvc3M= IGVkaXRvcnM= IG1pZ3I= VHJh IFBldGVycw== IEFyY3RpYw== MjAwNA== IENhcGU= IGxvY2FsbHk= IGxhc3Rpbmc= IGhhbmR5 Liku UGFu IFJFUw== SW5kZXg= IHRlbnNpb25z IGZvcm1lcmx5 IGlkZW9sb2dpY2Fs IHNlbnNvcnM= IGRlYWxlcnM= IGRlZmluZXM= U2s= IHByb2NlZWRz IHByb3h5 YXppbmVz IEJhc2g= IFBhZA== IENyYWZ0 ZWFsb3Vz IHNoZWV0cw== b21ldHJ5 SnVuZQ== Y2xvY2s= VFQ= IFRoZWF0cmU= IEJ1eno= IGNoYXB0ZXJz IG1pbGxlbm4= IGRvdWdo IENvbmdyZXNzaW9uYWw= IGltYWdpbmVk YXZpb3I= IGNsaW5pYw== IDE5NDU= IGhvbGRlcg== cm9vdA== b2xlc3Rlcg== IHJlc3RhcnQ= Qk4= IEhhbWFz IEpvYg== IG9yYg== IHJhbQ== IGRpc2Nsb3Nl IHRyYW5zbGF0ZQ== IGltbWlncmFudA== IGFubm95aW5n IHRyZWF0eQ== YW5pdW0= IFRlYQ== IExlZ2lvbg== IGNyb3dkcw== IEJlYw== IEFlcg== b2h5ZA== QnJv TG9va2luZw== IGxicw== IGFnZ3Jlc3M= IHNlYW0= IGludGVyY2VwdA== IE1J bWVyY2lhbA== YWN0aXY= IENpdA== IGRpbWVuc2lvbg== IGNvbnNpc3RlbmN5 IHJ1c2hpbmc= IERvdWdsYXM= IHRyaW0= SW5zdGFsbA== aWNrZXI= IHNoeQ== MTA2 IG1lbnRpb25z cGVsbGVk IFRhaw== Y29zdA== IGNsYXNzcm9vbQ== IGZvcnR1bmU= ZHJpdmVu IHVubGU= IFdoZWVs IGludmVzdG9y IE1hc3RlcnM= a2l0 IGFzc29jaWF0aW9ucw== IEV2b2x1dGlvbg== b3Bpbmc= dXNjcmlwdA== IHByb3ZpbmNpYWw= IFdhbHRlcg== YXZp U08= IHVubGltaXRlZA== RW5nbGlzaA== IENhcmRz IEVib2xh bmVyZWQ= IHJldmVuZ2U= IG91dHJpZ2h0 dW1wZXI= IGZpdHRpbmc= IFNvbGlk IGZvcm1hbGx5 IHByb2JsZW1hdGlj IGhhemFyZA== IGVuY3J5cHRpb24= IHN0cmFpZ2h0Zm9yd2FyZA== IEFL IHBzZQ== IE9yYg== IENoYW1iZXI= IE1haw== Q29udGVudHM= IGxveWFsdHk= IGx5cmljcw== IFN5bQ== IHdlbGNvbWVk IGNvb2tlZA== IG1vbm9w IG51cnNl IG1pc2xlYWRpbmc= IGV0ZXJuYWw= IHNoaWZ0aW5n ICs9 Vmlz IGluc3RpdHV0aW9uYWw= aWxsYXJ5 IHBhbnQ= VkVSVA== IEFDQw== IEVuaA== IGluY29u IFJFVVRFUlM= IGRvbmF0ZWQ= 4oCm4oCm4oCm4oCm SW50ZXJu IGV4aGliaXQ= IHRpcmU= IFJpYw== IENoYW1waW9u IE11aGFtbWFk TklORw== IFNvY2Nlcg== IG1vYmlsaXR5 IHZhcnlpbmc= IE1vdmll IGxvcmQ= b2Fr RmllbGQ= IHZlY3Rvcg== dXNpb25z IHNjcmFw IGVuYWJsaW5n bWFrZQ== VG9y Lio= fHw= IFdlYnNpdGU= IE5QQw== IHNvY2lhbGlzdA== IEJpbGx5 IEFkZGl0aW9uYWw= IGNhcmdv IGZhcm1z IFNvb24= IFByaXpl IG1pZG5pZ2h0 IDkwMA== c2Vlbg== IFNwb3Q= IHNoZWVw IHNwb25zb3JlZA== IEhp IEp1bXA= IDE5Njc= TWljcm9zb2Z0 IEFnZW50 IGNoYXJ0cw== ZGly IGFkamFjZW50 IHRyaWNrcw== IG1hbmdh IGV4YWdnZXI= Lz4= Zm9vdGJhbGw= IEZDQw== R0M= IFRpZXI= YW5kcmE= T1VORA== JSks IGZydWl0cw== VkM= IEFB Um9iZXI= IG1pZHN0 4pc= YW5rYQ== IGxlZ2lzbGF0dXJl IE5laWw= IHRvdXJpc3Rz IiI= IFdhcm5pbmc= IE5ldmVydGhlbGVzcw== IE9mZmljaWFs IFdoYXRldmVy IG1vbGQ= IGRyYWZ0ZWQ= IHN1YnN0YW5jZXM= IGJyZWVk IHRhZ3M= IFRhc2s= IHZlcmI= IG1hbnVmYWN0dXJlZA== Y29tbWVudHM= IFBvbGlzaA== UHJvdg== IGRldGVybWluZXM= T2JhbWE= a2Vycw== IHV0dGVybHk= IHNlY3Q= c2NoZQ== IEdhdGVz IENoYXA= IGFsdW1pbnVt IHpvbWJpZQ== IFRvdWNo IFVQ IHNhdGlzZnk= IHByZWRvbWlu YXNjcmlwdA== IGVsYWJvcmF0ZQ== IDE5Njg= IG1lYXN1cmluZw== IFZhcmk= YW55YWh1 IHNpcg== dWxhdGVz aWRnZXM= aWNrZXRz IFNwZW5jZXI= VE0= b3VidGVk IHByZXk= IGluc3RhbGxpbmc= IENhYg== cmVlZA== cmVhdGVk U3VwcA== IHdyaXN0 IEtlcnJ5 MTA3 IEtsZQ== IFJhY2hlbA== IGNvdHRvbg== IEFSRQ== IEVsZQ== Q29udHJvbA== IGxvYWRz IERvZA== YW5hcw== Ym9uZQ== IGNsYXNzaWNhbA== IFJlZ2lvbmFs IEludGVn Vk0= IGRlc2lyZXM= IGF1dGlzbQ== c3VwcG9ydGVk IE1lc3NhZ2U= IGNvbXBhY3Q= d3JpdGVy IDEwOQ== IEh1cnJpY2FuZQ== Y2lzaW9u IGN5Y2xlcw== IGRyaWxs IGNvbGxlYWd1ZQ== IG1ha2Vy R2VybWFu IG1pc3Rha2Vu U3Vu IEdheQ== IHdoYXRzb2V2ZXI= IHNlbGxz IEFpcmw= bGl2 IE9wdGlvbg== IHNvbHZlZA== IHNlY3RvcnM= IGhvcml6b250YWw= IGVxdWF0aW9u IFNraWxs IEJpbw== Z2VtZW50 IFNuYXA= IExlZ2Fs IHRyYWRlbWFyaw== IG1ha2V1cA== IGFzc2VtYmxlZA== IHNhdmVz IEhhbGxvd2Vlbg== IFZlcm1vbnQ= IEZST00= IGZhcm1pbmc= IFBvZGNhc3Q= YWNjZXB0YWJsZQ== IEhpZ2hlcg== IGFzbGVlcA== dWxsaXZhbg== IHJlZmVyZW4= IExldg== IGJ1bGxldHM= b2tv SEM= IHN0YWlycw== IG1haW50YWlucw== IExvd2Vy IFZp IG1hcmluZQ== IGFjcmVz IGNvb3JkaW5hdG9y IEpvaA== IGNvdW50ZXJwYXJ0cw== IEJyb3RoZXJz IGluZGljdA== YnJh IGNodW5r IGNlbnRz SG9tZQ== IE1vbnRo IGFjY29yZGluZ2x5 aWZsZXM= IEdlcm1hbnM= IFN5bg== SHVi IGV5ZWI= 4pSA4pSA4pSA4pSA IHJhbmdlcw== IEhvbGxhbmQ= IFJvYm90 ZmM= TWlrZQ== IHBsYXNtYQ== IHN3YXA= IGF0aGxldGU= IFJhbXM= LCci IGluZmVjdGlvbnM= IGNvcnJpZA== IHZpYg== IHBhdGNoZXM= IHRyYWRpdGlvbmFsbHk= IHJldmVsYXRpb24= IHN3ZWVw IGdsYW5jZQ== IGluZXg= MjAwMw== IFJhdw== d29ya2luZw== b3N1cmVz IERhdA== IEx5bmNo IGxldmVyYWdl IFJlaWQ= IGNvcnJlbGF0aW9u aWFuY2Vz YXZhc2NyaXB0 IHJlcG9zaXRvcnk= cmV0dHk= IDE5NzI= MjQw IG91bg== cG9s IFJlZWQ= IHRhY3RpY2Fs aXNpdGU= QXBwbGU= IFF1aW5u IHJhcGVk aWxsbw== RXVyb3Bl IGFsZ29yaXRobXM= IFJvZHJpZw== aXU= IGlsbHVt IGZhbWU= IGludHJvZHVjaW5n IGRlbGF5cw== IFJhaWRlcnM= IHdoaXN0bGU= IG5vdmVscw== IFJlYWxseQ== IGRlcml2 IHB1YmxpY2F0aW9ucw== IE5laXRoZXI= IENvbW1lcmNl IGFzdG9u bGFuZ3VhZ2U= Tm90ZXM= IFJvdGg= IEZlYXI= IG1hdGU= IHBhcmFkZQ== IFFC IG1hbmV1 IENpbmNpbm5hdGk= bWl0dGluZw== IHdhaXN0 IFJldw== IGRpc2NvbnQ= 0LA= IHN0YXJpbmc= IGFsaWFz IHNlY3VyaXRpZXM= IHRvaWxldA== IEplZGk= IHVubGF3 dmlzZWQ= Ly8vLy8vLy8= XSg= IFdlaXNz IHByZXN0 IENvbXBhbg== IG1lbW8= IEdyYWNl SnVseQ== IEVsaXRl Y2VudGVy IFN0YXk= IGdhbGF4eQ== IHRvb3Ro IFNldHRpbmdz IHN1YmplY3RlZA== 44Km IGxpbmViYWNr IHJldGFpbGVycw== IFdhbnQ= IGRhbmdlcnM= QWly IHZvbHVudGFyeQ== ZXdheQ== IGludGVycHJldGVk b3RpbmU= w6c= IHBlbA== U2VydmljZQ== IEV2ZW50dWFsbHk= IGNhcmVlcnM= IHRocmVhdGVu IG1lbW9y IEJyYWRsZXk= YW5jaWVz c24= IFVua25vd24= TmF0aW9uYWw= IHNoYWRvd3M= YWlsYW5k IERhc2g= RXZlcnlvbmU= aXp6YXJk TWFyY2g= PSg= IHB1bGxz IHN0cmFuZ2Vy IGJhY2t3YXJkcw== IEJlcm5hcmQ= aW1lbnNpb25hbA== IGNocm9u IHRoZW9yZXRpY2Fs a3RvcA== IHdhcmU= IEludmVzdGln IEluaXRp IE9wZXJhdGlvbnM= b3Zlbg== b2NpZGU= Ki8= IGZsYW1lcw== IENhc2g= c2hpdA== IGNhYg== IEFuYWx5 IFNlYWg= IGRlZmluaW5n IG9yZGVyaW5n IGltbXVu IHBlcnNpc3RlbnQ= QUNI UnVzc2lhbg== bWFucw== IGhpbmQ= IHBob3RvZ3JhcGh5 wqk= IGh1Zw== IDEwNw== IEhlbmNl aW90cw== dWRlYXU= IHN1YnNpZGllcw== IHJvdXRpbmVseQ== IERldmljZQ== aXRpYw== IGRpc2d1c3Q= bGFuZGVy IDE5NDA= IGFzc2lnbm1lbnQ= IEJlc2lkZXM= d2ljaw== IER1c3Q= dXNj c3RydWN0ZWQ= MTEx ZGV2ZWxvcA== IGZvbmQ= IGludGVyc2VjdGlvbg== IGRpZ25pdHk= IGNvbW1pc3Npb25lcg== V2l0aG91dA== cmVhY2g= IGNhcnRvb24= IHNjYWxlcw== 44Ot RklH IHN1cnZleXM= IEluZG9uZXNpYQ== IGFydHdvcms= IHVuY2g= IGN5Y2xpbmc= dW5jdA== YXVlcg== b3JhdGU= IE9idmlvdXNseQ== IGNoYXJhY3Rlcml6ZWQ= ZmVsZA== IGFmZmlybQ== IGlubmluZ3M= IOk= IGFsaWVucw== IGNsb3Ro ZXRvb3Ro IENlcnRhaW4= wqc= IGRpZ2VzdA== a25vdw== IFhM IHByZWRpY3Rpb25z IGRpbg== V0FS IGFmdGVybWF0aA== RXhhbXBsZQ== IFN1Y2Nlc3M= IFRocg== SUdO IG1pbmVy QnVz IGNsYXJpdHk= aGVpbWVy IE9VVA== IFNlbmQ= IENpcmNsZQ== IERpZXQ= IHByb25vdW5jZWQ= IGNyZWF0b3Jz IGVhcnRocXVha2U= YXR0ZXJ5 Z2VvbnM= IG9k IGxheWluZw== b3Jw VWx0 cHJvamVjdA== IHVuZGVybWlu IHNlcXVlbA== U2Ft IERhcmtuZXNz IHJlY2VwdGlvbg== YnVsbA== WVM= IFZpcg== IHNlcXVlbmNlcw== IENvaW4= IG91dGZpdA== IFdhaXQ= MTE5 IGRlbGl2ZXJz Li4uLi4u IGJsb3du IEVzYw== IE1hdGg= cGVybQ== IFVs IGdsaW0= IGZhY2lhbA== IGdyZWVuaG91c2U= IHRva2Vucw== Ly0= IEFubnVhbA== IE9ORQ== IHRlZW5hZ2U= IFBoeXNpY2Fs IExhbmc= IENlbHQ= IHN1ZWQ= aXZpZHVhbGx5 IHBhdGllbmNl Y2hhaXI= cmVndWxhcg== IGF1Zw== aW52 ZXhjZXB0 IExpbA== IG5lc3Q= ZmQ= c3Vt IENoYXNl UnVzc2lh IEplbm5pZmVy IG9mZnNlYXNvbg== T3ZlcmFsbA== Rm9yZQ== IHJpb3Q= QXVk Zm9ybWVy IGRlZmVuZGVycw== IENU aW90aWM= cmlibHk= IGF1dG9tYXRlZA== IHBlbmlz IGluc2lzdA== IGRpYWdyYW0= IFNRTA== IEdhcmM= IHdpdGNo Y2xpZW50 aWVycmE= YW1iZXJz IHJlY291bnQ= ZmFy VmVyeQ== b3N0ZXJvbmU= IGFwcHJlY2lhdGVk IFBlcmZlY3Q= U2VjdGlvbg== IGRvc2Vz b2NhdXN0 IGNvc3RseQ== IGdyYW1z IFNoaQ== IHdyZXN0bGluZw== IDE5NzE= IHRyb3BoeQ== IG5lcnZl IEtheg== IEV4cGVyaWVuY2U= IHBsZWRnZWQ= IHBsYXliYWNr IGNyZWF0aXZpdHk= Ynll IGF0dGFja2Vycw== IGhvbGRlcnM= IENvYWNo IFBoRA== IHRyYW5zZmVycw== IGNvbG9yZWQ= IEhpbmR1 IGRyb3du IGxpc3RlbmVk IFdB aWFzbQ== UE8= IGFwcGVhbGluZw== IGRpc2Nsb3NlZA== IENoaWNrZW4= YWdnaW5n IHBsZWFkZWQ= IG5hdmlnYXRpb24= IFJldHVybnM= IFtb Uk9S RUE= IHBob3RvZ3JhcGhlcg== IFJpZGVy aXBwZXJz IHNsaWNl IGVyZWN0 IGhlZA== aXNzYW5jZQ== IFZpa2luZ3M= dXJpb3Vz IGFwcGV0 b3VidGVkbHk= Q2hpbGQ= IGF1dGhlbnRpYw== b29z IE1ha2luZw== IGFubm91bmNpbmc= IGJvZA== IG1ldGVy IE5pbmU= IFJvZ3Vl IHdvcmtmb3JjZQ== IHJlbmV3ZWQ= IG9yZ2FuaXNhdGlvbnM= YWNz UExF U2hvcnQ= IGNvbXBvdW5kcw== IFZpc2l0 IGVudmVsb3A= ZWFydGg= IHN1cHBvcnRpdmU= Z2dsZQ== IEJydXNzZWxz IEd1aWxk Q3JlYXRl UkVM IGF2ZXJhZ2Vk IDE5Njk= cmlhZ2Vz IGxlbmd0aHk= IGZvcmdvdA== T2theQ== IEVyZA== IGRlYWxlcg== IHJlY2Vzc2lvbg== REQ= IGRlc3BlcmF0ZWx5 IGh1bmdlcg== IHN0aWNrcw== IG1waA== IEZhaXRo IGludGVudGlvbmFsbHk= IGRlbW9s dWVsbGVy IFNhbGU= IGRlYnJpcw== c3ByaW5n IGxlYXA= Pj4+Pg== IGNvbnRhaW5lcnM= c2VsbGluZw== cmFuZWFu YXR0ZXJpbmc= IGNvbW1lbnRlZA== IENN b251dA== IHdvb2Rz ZXNwZWNpYWxseQ== IG9yZ2FuaXpl aXZpYw== IFdvb2Rz YW5nYQ== c3F1 IG1hag== YW1vbg== IGF4aXM= IDE5NzQ= IERlbm1hcms= IHdhcnJpb3I= IFBhbmQ= IG91dGxpbmVk IEJP aW5zdWxh emlsbGE= ZWJvb2s= IGRhcmU= IHNlYXJjaGVk IG5hdmlnYXRl U24= d3JpdGluZw== IHVuaXRlZA== SmFwYW4= IEhlYnJldw== IGZsYW1l IHJlbGllcw== IGNhdGNoaW5n IFNobw== IGltcHJpc29ubWVudA== IHBvY2tldHM= IGNsb3N1cmU= IEZhbQ== dGlt YWRlcXU= QWN0aXZpdHk= IHJlY3J1aXRpbmc= IFdBVENI IEFyZ2VudGluYQ== ZGVzdA== IGFwb2xvZ2l6ZQ== b3Jv IGxhY2tz IHR1bmVk IEdyaWZmaW4= IGluZmFtb3Vz IGNlbGVicml0eQ== c3Nvbg== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IElzaXM= IERpc3BsYXk= IGNyZWRpYmlsaXR5 IGVjb25vbWllcw== IGhlYWRsaW5l IENvd2JveXM= IGluZGVm IGxhdGVseQ== IGluY2VudGl2ZXM= YnV0dG9u IE1vYg== QXV0 IHJlc2lnbmVk IE9t Y2FtcA== IHByb2ZpbGVz IHNjaGVtZXM= b2xwaGlucw== YXllZA== Q2xpbnRvbg== ZW5o IFlhaG9v IGFic3Q= IGFuaw== c3VpdHM= IHdpc2hlZA== IE1hcmNv dWRkZW4= IHNwaGVyZQ== IEJpc2hvcA== IGluY29ycG9yYXRlZA== IFBsYW50 MTE0 IGhhdGVk cGlj IGRvbmF0ZQ== IGxpbmVk IGJlYW5z IHN0ZWFsaW5n IGNvc3R1bWU= IHNoZXJpZmY= IGZvcnR5 IGludGFjdA== IGFkYXB0ZWQ= IHRyYXZlbGxpbmc= YmFydA== IG5pY2VseQ== IGRyaWVk IHNjYWw= b3NpdHk= Tk9URQ== IEJo IEJyb25jb3M= IElnbg== IGludGltYXRl IGNoZW1pc3RyeQ== IG9wdGltYWw= RGVi IEdlbmVyYXRpb24= IF0s aWNoaQ== IFdpaQ== IFlPVVI= dmVudGlvbnM= V3JpdGU= IHBvcHVs dW5uaW5n IFdvcg== Vm9s IHF1ZWVu aGVhZHM= S0s= IGFuYWx5emU= b3BpYw== ZWFyY2hlcnM= IGRvdA== bGVncmFwaA== YXN0aWNhbGx5 IHVwZ3JhZGVz IGNhcmVz IGV4dGVuZGluZw== IGZyZWV6ZQ== IGluYWJpbGl0eQ== IG9yZ2Fucw== IHByZXRlbmQ= IG91dGxldA== MTEz b2xhbg== IE1hbGw= dWxpbmc= dGFsaw== IGV4cHJlc3Npbmc= IEFsd2F5cw== IEJlZ2lu ZmlsZXM= IGxpY2Vuc2Vz JSU= IE1pdHQ= IGZpbHRlcnM= IE1pbHdhdWtlZQ== R04= IHVuZm9sZA== TW8= IG51dHJpdGlvbg== cHBv Qm8= IGZvdW5kaW5n IHVuZGVybWluZQ== IGVhc2llc3Q= IEN6ZWNo IE1hY2s= IHNleHVhbGl0eQ== IE5peG9u V2lu IEFybg== IEtpbg== 44Kj aWNlcg== IGZvcnR1bg== IHN1cmZhY2Vz YWdoZA== IGNhcnJpZXJz IFBBUlQ= IFRpYg== IGludGVydmFs IGZydXN0cmF0aW5n IFNoaXA= IEFybWVk ZmZl IGJvYXRz IEFicmFoYW0= aW5pcw== IHN1aXRlZA== dGhyZWFk aW92 YWJ1bA== IFZlbmV6dWVsYQ== IHRvbQ== c3VwZXI= IGNhc3RsZQ== YWx0aG91Z2g= aW94aWRl ZWNoZXM= IGV2b2x1dGlvbmFyeQ== IG5lZ290aWF0ZQ== IGNvbmZyb250ZWQ= UmVtZW1iZXI= IDE3MA== U3VjaA== IDkxMQ== bXVsdA== IEFieXNz dXJyeQ== a2Vlcw== c3BlYw== IEJhcmJhcmE= IGJlbG9uZ2luZw== IHZpbGxhaW4= aXN0YW5p IGFjY291bnRhYmxl IHBvcnRpb25z IERlY2w= VXI= IEthdGU= Z3Jl IG1hZ2F6aW5lcw== VUNL IHJlZ3VsYXRl b21vbg== IEFsbW9zdA== IG92ZXJ2aWV3 IHNjcmFt IGxvb3Q= IEZpdHo= IGNoYXJhY3RlcmlzdGlj IFNuYWtl c2F5 IFJpY28= IHRyYWl0 IEpvaW5lZA== YXVjdXM= IGFkYXB0YXRpb24= IEFpcmxpbmVz IGFyY2hhZQ== IElkZQ== IGJpa2Vz IGxpdGVyYXJ5 IGluZmx1ZW5jZXM= IFVzZWQ= Q3JlYXQ= IHBsZWE= IERlZmVuY2U= IEFzc2Fzcw== IHBvbmQ= VUxU KSI= IGV2YWx1YXRlZA== IG9idGFpbmluZw== IGRlbW9ncmFwaGlj IHZpZ2ls YWxleQ== IHNwb3VzZQ== IFNlYWhhd2tz cmVzcG9ucw== IEJlbHQ= dW1hdGlj IHJpc2Vz cnVubmVy IE1pY2hlbGxl IHBvdGVudA== cmFjZQ== IFBBQw== RmluZA== b2xlc3Rlcm9s SVNT IEludHJvZHVjZWQ= cmVzc2Vz aWdubWVudA== T3M= IFR1 IERleA== aWNpZGVz IHNwYXJrZWQ= IExhdXJh IEJyeWFudA== IHNtaWxpbmc= IE5leHVz IGRlZmVuZGFudHM= IENhdGFs IGRpc2hlcw== c2hhcGVk IHByb2xvbmc= bXQ= KCQ= 44CC IGNhbGN1bGF0aW9ucw== IFNhbWU= IHBpdg== SEg= IGNhbmNlbGxlZA== IGdyaW4= IHRlcnJpdG9yaWVz aXN0aWNhbGx5 Q29tZQ== IFBhcmVudA== UHJvamVjdA== IG5lZ2xpZw== IFByaXZhY3k= IGFtbW8= TEVDVA== b2x1dGVseQ== IEVwaWM= IG1pc3VuZGVy d2Fs QXByaWw= bW9z cGF0aHk= IENhcnNvbg== IGFsYnVtcw== IEVhc3k= IHBpc3RvbA== PDw= IFwo dGFyZ2V0 aGVscA== IGludGVycHJl Y29uc2Npb3Vz IEhvdXNpbmc= IEpvaW50 MTI3 IGJlZXJz c2NpZW5jZQ== IEZpcmVmb3g= ZWZmZWN0aXZl IENhYmlu IE9rYXk= IEFwcGxpYw== IHNwYWNlY3JhZnQ= IFNS dmV0 IFN0cmFuZ2U= U0I= IGNvcnBz aWJlcmFs ZWZmaWNpZW50 IHByZXZhbGVuY2U= IGVjb25vbWlzdHM= MTE4 VGhyZWFk b3JkYWJsZQ== T0RF IENhbnQ= PS09LQ== aWZpYWJsZQ== IEFyb3VuZA== IHBvbGU= IHdpbGxpbmduZXNz Q0xB IEtpZA== IGNvbXBsZW1lbnQ= IHNjYXR0ZXJlZA== IGlubWF0ZXM= IGJsZWVkaW5n ZXZlcnk= IHF1ZXVl IFRyYWlu IGhpag== IG1lbGVl cGxldGVk IGRpZ2l0 IGdlbQ== b2ZmaWNpYWw= IGxpZnRpbmc= 0LU= UmVxdQ== aXR1dGVz IHBhY2thZ2luZw== IFdvcmtlcnM= aHJhbg== IExlYmFub24= b2xlc2M= IHB1bmlzaGVk IEp1YW4= IGphbQ== IERvY3VtZW50 IG1hcHBpbmc= aWNhdGVz IGluZXZpdGFibHk= IHZhbmlsbGE= IFRvbg== IHdhdGNoZXM= IGxlYWd1ZXM= IGluaXRpYXRlZA== ZGVncmVl cG9ydGlvbg== IHJlY2FsbHM= IHJ1aW4= IG1lbHQ= SUFO IGhlbQ== RXhw IGJha2luZw== IENvbG9tYg== YXRpYmxl IHJhZGl1cw== cGx1Zw== IElG ZXRpY2FsbHk= IGZpY3Q= SEVS IFRhcA== YXRpbnVt IGluaw== IGNvaA== IFdpemFyZA== Ym90aA== dGV4 IHNwZW5kcw== IEN1cnJlbnRseQ== IFBpdA== IG5ldXJvbnM= aWdudA== IHJhbGw= IGJ1c2Vz YnVpbGRpbmc= IGFkanVzdG1lbnRz IGNyaWVk aWJsaWNhbA== YXR0ZWQ= IFppb24= IE1hdHRlcg== IG1lZGl0YXRpb24= IERlbm5pcw== IG91cnM= IFRhYg== IHJhbmtpbmdz b3J0YWw= IGFkdmVycw== IHN1cnJlbmRlcg== IEdvYg== Y2l1bQ== b21hcw== aW1ldGVy IG11bHRpcGxheWVy IGhlcm9pbg== IG9wdGltaXN0aWM= IGluZGljYXRvcg== IEJyaWc= IGdyb2Nlcnk= IGFwcGxpY2FudA== IFJvY2tldA== dmlk RXhjZXB0aW9u cGVudA== IG9yZ2FuaXppbmc= IGVuY291bnRlcnM= IFRPRA== IGpld2Vs U2F2ZQ== IENocmlzdGll IGhlYXRpbmc= IGxhenk= IENQ IGNvdXNpbg== Q29uZmln IHJlZ2VuZXI= IG5lYXJlc3Q= IGFjaGlldmluZw== RU5T dGhyb3c= IFJpY2htb25k YW50bGU= MjAwMg== IGFudGVu YmlyZA== MTMz IG5hcmM= cmFpbnQ= dW5ueQ== IEhpc3Bhbmlj b3VybmFtZW50cw== IHByb3BoZQ== IFRoYWlsYW5k IFRp IGluamVjdGlvbg== IGluaGVyaXQ= cmF2aXM= IG1lZGk= IHdob2V2ZXI= IERFQlVH R1A= IEh1ZA== Q2FyZA== cHJvbQ== IHBvcg== IG92ZXJoZWFk TGF3 IHZpb2xhdGU= IGhlYXRlZA== IGRlc2NyaXB0aW9ucw== IGFjaGlldmVtZW50cw== IEJlZXI= IFF1YW50 V2Fz IGVpZ2h0aA== IEl2 IHNwZWNpYWxpemVk VVBEQVRF IERlbHRh UG9w SnVs IEFzaw== b3BoeQ== IG5ld3NsZXR0ZXJz IFRvb2w= IGdhcmQ= IENvbmZlZGVy IEdNVA== IEFiYm90dA== IGltbXVuaXR5 IFZN SXNsYW0= IGltcGxpY2l0 d2Q= IDE5NDQ= cmF2aXR5 b21ldHJpYw== IHN1cnZpdmluZw== dXJhaQ== IFByaXNvbg== IHJ1c3Q= IFNrZXRjaA== IGJlZXM= IFRoZW9yeQ== IG1lcml0 VGV4 Y2hhdA== IG1pbQ== IHBhc3Rl IEtvY2g= IGlnbm9yYW5jZQ== IFNob290 IGJhc2VtZW50 VW5pdGVk IEFkdmlz aGVpZ2h0 IGZvc3Rlcg== IGRldGFpbg== aW5mb3JtYXRpb24= IG5ldXJhbA== Jzs= IHByb3Zlcw== YWxsZXJ5 IGludml0YXRpb24= dW1iZXJz IGNhdHRsZQ== IGJpY3ljbGU= emk= IGNvbnN1bHRhbnQ= IGFwb2xvZ3k= IFRpZ2Vy IDEyMw== OTk5 IGluZGl2aWR1YWxseQ== cnQ= aWdpb24= IEJyYXppbGlhbg== IGRpc3R1cmI= IGVudHJlcHJlbmV1cnM= IGZvcmVzdHM= Y2VycHQ= cGxhdGVz cGhlcg== Y2xpcHNl IHR3aXR0ZXI= IGFjaWRz b2dyYXBoaWNhbA== aHVt IEJhbGQ= aWZ1bGx5 IGNvbXBpbGVy IERB IGRvbm9y YXNp IHRyaWJhbA== bGFzaA== IENvbmZpZw== IGFwcGxpY2FudHM= IHNhbGFyaWVz MTM1 UHV0aW4= IEZvY3Vz aXJz IG1pc2NvbmR1Y3Q= IEhheg== IGVhdGVu TW9iaWxl TXVzbGlt IE1hcmN1cw== dmlvbA== IGZhdm9yYWJsZQ== IHN0dWI= YWRpbg== IEhvYg== IGZhaXRoZnVs IGVsZWN0cm9uaWNz IHZhY3V1bQ== d2FpdA== YmFja2Vk ZWNvbm9taWM= ZGlzdA== IHRlbnVyZQ== IHNpbmNlcmU= IFRvZ2V0aGVy IFdhdmU= IHByb2dyZXNzaW9u IGRlbnlpbmc= IGRpc3RyZXNz YnJhc2th dGhpcmQ= IG1peGluZw== IGNvbG9uaWFs IHByaXZhdGVseQ== IHVucmVzdA== YXRlcm5pdHk= IHByZW1pc2Vz YW50aQ== Z3JlZ2F0aW9u IGxpY2VuY2U= IEhpbmQ= IFNhbXVlbA== IGNvbnZpbmNpbmc= IEFjZQ== IFJ1c3Q= IE5ldGFueWFodQ== IGhhbmRsZXM= IFBhdGNo b3JpZW50ZWQ= YWhv IEdvbno= IGhhY2tlcnM= Y2xhaW1lcg== IGN1c3RvbXM= IEdyYW4= ZmlnaHRlcnM= IGx1Yw== IG1hbnVzY3JpcHQ= YXJlbnRob29k IGRldmls IHdhcnJpb3Jz IG9mZmVuZGVycw== V2lsbGlhbQ== IGhvbGlkYXlz IG5pZ2h0bWFyZQ== IGxldmVy aWZmZXJlbnQ= U3RhdA== IGV4aGliaXRpb24= cHV0ZWQ= IFB1cmU= IGFscGhh IGVudGh1c2lhc20= IFJlcHJlc2VudGF0aXZlcw== RUFS IFR5cA== IHdoZWF0 IEFsZg== IGNvcnJlY3Rpb24= IGV2YW5nZWw= QVRU TWlzcw== IHNvdXA= IGltcGxpZWQ= cGFyYW0= IHNleHk= IEx1eA== IHJlcHVibGlj cGF0Y2g= YWJsaXNo IGljb25z IGZhdGhlcnM= IEdFVA== IENhcmli IHJlZ3VsYXRlZA== IENvaGVu IEJvYmJ5 IG5lcg== IGJlbnQ= dmVudG9yeQ== IEFsb25n IEVTVA== IFdhbGxhY2U= IG11cmRlcnM= cmlzZQ== a2VsbA== IENvbW1vbndlYWx0aA== IG5hc3R5 ZXRh IE1JVA== IGFkbWluaXN0ZXJlZA== IGdlbnVpbmVseQ== RWRpdG9y bmljaw== IGh5ZHJv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IEJsZQ== IGZpbmVz IGdvcmdl YXVzaWJsZQ== cmg= IGFwcGxl bWVudGlvbmVk IHJvcGU= b3R5cA== SFI= IGRpc2FwcG9pbnRpbmc= IGNhZ2U= bmlr IGRvdWJ0cw== IEZSRUU= cHJpbnRz IE1VU1Q= IHZlbmRvcnM= IElucXU= IGxpYmVyYWxz IGNvbnRyYWN0b3I= IHVwc2lkZQ== Y2hpbGRyZW4= IHRyaWNreQ== IHJlZ3VsYXRvcnM= Y2hhcmdlZA== bGl0ZXI= ICoqKg== IHJlYmVsbA== bGFuZw== IGxvY2Fscw== IHBoeXNpY2lhbnM= IGhleQ== YXJzZQ== dG0= IExleA== IGJlaGF2aW9yYWw= c3VjY2Vzc2Z1bA== Rlg= IGJyaWNr b3ZpYw== IGNvbmZvcm0= IHJldmlld2luZw== IGluc2lnaHRz IGJpb2xvZ3k= IFJlbW92ZQ== IEV4dHJh IGNvbW1pdHRpbmc= aW5kdWNlZA== aWdudHk= aWdt IGF0b21pYw== Q29tbW9u IEVN IFBlcmU= IEl0ZW1z ZWg= IHByZXNlcnZlZA== IEhvb2Q= IHByaXNvbmVy IGJhbmtydXB0Y3k= IGdyZW4= dXNoZXM= IGV4cGxvaXRhdGlvbg== IHNpZ25hdHVyZXM= IGZpbmFu XSwi IE1S IG1lZw== cmVtbGlu IG11c2ljaWFucw== IHNlbGVjdGluZw== IGV4YW1pbmluZw== SU5L bGF0ZWQ= SGk= IGFydGlj IHBldHM= IGltcGFpcg== IE1BTg== IHRhYmxldHM= aW5jbHVkZQ== UmFuZ2U= IGNhdXQ= IGxvZ3M= IG1vdW50aW5n IHVuYXdhcmU= IGR5bmFtaWNz IFBhbGVzdGluZQ== IFF1YXJ0ZXI= IFB1cnBsZQ== IG1h IEltcG9ydA== IGNvbGxlY3Rpb25z Y2lhdGlvbg== IHN1Y2Nlc3Nvcg== IGNsb25l IGFpbWluZw== IHBvc3Nlc3NlZA== IHN0aWNraW5n IHNoYWtpbmc= IGxvY2F0ZQ== IEhvY2tleQ== VHVybg== MTcw IGZpZnRlZW4= IEhhcnJpc29u IGNvbnRpbnVvdXNseQ== IFRD IFZhbGVudA== IFJlc2N1ZQ== IGJ5cGFzcw== YW1vdW50 IG1hc3Q= IHByb3RlY3Rz IGFydGlzdGlj IHNvbWV0aW1l IHNob2U= IHNob3V0ZWQ= aWZpY2FudA== ZXRpdGl2ZQ== IFJlZ2lzdGVy IEppbg== IGNvbmNlbnRyYXRlZA== bGluZ3Rvbg== b25pZXM= IGdlbmVyYXRvcg== eXJpbQ== IEFybWVu IGNsZWFyaW5n aWRv IFRX YWxwaA== IGxhZGllcw== SGFyZA== IGRpYWxvZw== IGlucHV0cw== 5pw= IHBvc2Vz IHNsb3Rz IFByZW1pdW0= IGxlYWtz IGJvc3Nlcw== IDExMw== Y291cnNl QWNj IE5ld3Rvbg== IEF1c3RyaWE= IE1hZ2U= IHRlYWNoZXM= YWJhZA== IHdlYXJz IGN5bA== IGN1cnNl IFNhbGVz IFdpbmdz IHBzeQ== IGdhcHM= IEljZWxhbmQ= IFBpbnRlcmVzdA== IGxhbmRsb3Jk IGRlZmluaXRpb25z IEtlcg== IHN1ZmZpY2llbnRseQ== IFBlbmNl IEFyY2hpdGVjdA== IHN1cnBhc3M= IDExNA== IHN1cGVyaGVybw== IERpc2Vhc2U= IHByaWVzdHM= IEN1bHR1cmU= IGRlZmluaXRpdmU= IHNlY3JldGx5 IERhbmNl aW5zdGFsbA== Y2hpZWY= IEplc3NpY2E= V291bGQ= VXBkYXRlZA== IGxvY2tlcg== IEtheQ== IG1lbW9yaWFs 6KY= ZmF0 IGRpc2d1 IGZsYXZvcnM= IEJhc2ViYWxs IFJlc2lzdGFuY2U= IGtpY2tz IGVudg== IHRlZW5hZ2Vycw== RGFyaw== IENBUg== IGhhbHQ= IExH IEdhYnJpZWw= IGZldmVy IHNhdHVy IG1hbGw= IGFmZmlsaWF0ZQ== IFNsZWVw IFNwZWNpZmlj IFZlbA== IGphcg== IFNhY3JlZA== IEVkd2FyZHM= IEFDTA== IHJldGFpbmVk IEdpYW50 IGxpbWl0YXRpb24= aW5jZXM= IHJlZnVzYWw= IFRhbGU= IEJ1dGxlcg== IGFjY2lkZW50cw== IENTUw== IGltcG9ydGVk IENvcHk= zrE= RVJU emVs IGRpdmlzaW9ucw== aG90cw== IEFsYg== IERT TG9hZGVy V2FzaGluZ3Rvbg== YXRpc2Y= IENyZWF0aXZl XC4= IEF1dG9t cmVkaWN0 IHJlY2VwdG9y IENhcmxvcw== TWV0aG9k b2th IG1hbGljaW91cw== IHN0ZXBwaW5n LFs= IERhZA== IGF0dHJhY3Rpb24= IEVmZmVjdHM= IFBpcmF0ZQ== IENlcg== IEluZHVzdHJ5 IFJ1ZA== IGNoYXJ0ZXI= IGRpbmluZw== IGluc2lzdHM= IGNvbmZpZ3VyZQ== ICgj IFNpbXBsZQ== IFNjcm9sbA== VVRD MTc1 IEtvbg== IG1hcmtldHBsYWNl IOOC IHJlZnJlcw== IGdhdGVz ZXJyZWQ= IFBvZA== IGJlaGF2ZQ== RnJhbms= bm9kZQ== IGVuZG9yc2Vk aGV0dA== YXNpdmU= IEhvbWVsYW5k IHJpZGVz IExlYXZl ZXJuZXNz IGZsb29kaW5n QUZQ IHJpc2Vu IGNvbnRpbnVhbGx5 IHVuYW5pbQ== IENvbnRyYWN0 IFBhcw== IGd1aWRlZA== IENoaWxl YmQ= IHN1Y2M= cHRpYw== IGNvbW1pdHRlZXM= IEx1dGhlcg== IEFueW9uZQ== IHNhYg== MTI0 IHBpeGVs IEJhaw== IFRhZw== IEJlbm5ldHQ= RW50ZXI= c21hbGw= IFByZXNpZGVudGlhbA== IHB1bA== IGNvbnRyYWNl YXJjaGl2ZQ== IGNvYXN0YWw= IEtpZHM= MTky 4oCy aWNreQ== SU5HVE9O IHdvbGY= IFN0YWxpbg== VHVy aWRnZXQ= YW1hcw== IFVubGVzcw== IHNwb25zb3I= IG1vcnBo IENob29zZQ== IHJ1bm5lcg== IHVuYmVs IG11ZA== IE1hbmE= IGR1YmJlZA== IGdvZGQ= dXJlcnM= d2luZG93 IHJlbGllZA== IGNlbGVicmF0aW5n b3Nj IDEzNQ== IGxvYmJ5aW5n IGluY29tcGxldGU= IHJlc3RyaWN0aW9u IGluY2Fw aXR1cw== IGV4cGVjdGF0aW9u IEFwb2xsbw== IGludGVucw== IHN5bmM= R0g= IG1hbmlwdWxhdGlvbg== Qlk= IHNwZWFy IGJyZWFzdHM= IHZvbGNhbg== aWxpYQ== TWF0ZXJpYWw= IGZvcm1hdHM= IEJhc3Q= IHBhcmxpYW1lbnRhcnk= IHNuYWtl IHNlcnZhbnRz IFRydWRlYXU= IEdyaW0= IEFyYWJpYw== IFNDUA== IEJveXM= c3RhdGlvbg== IHByb3NwZWN0aXZl b3JkZQ== aW5pdGlhbGl6ZWQ= IGJvcmVk QUJMRQ== IGFjY2Vzc2Vk IHRheGk= IFNoZWxs YWlkZW4= dXJzZWQ= aW5hdGVz IEluc3VyYW5jZQ== IFBldGU= U2VwdGVtYmVy NjUw IGFkdmVudHVyZXM= IENvdmVy IHRyaWJ1dGU= IHNrZXRjaA== IGVtcG93ZXI= INg= IEdsZW5u IERhdw== PVwi IFBvbGl0aWNz IGd1aWRlcw== IGRpb3hpZGU= IEdvcmU= IEJyaWdodA== IFNpZXJyYQ== IHZhbHVlZA== Y29uZA== IHBvaW50ZXI= U2VsZWN0 IHJpc2t5 IGFic29yYg== aW1hZ2Vz IHJlZnVzZXM= IGJvbnVzZXM= X19f IGhpbGFy IEZlYXR1cmVz MjIw IENvbGxlY3Rvcg== Rm9vdA== IDE5NjQ= Y3VsdXM= IGRhd24= IHdvcmtvdXQ= IExP IHBoaWxvc29waGljYWw= IFNhbmR5 IFlvdXRo IGxpYWJsZQ== QWY= Ymx1ZQ== IG92ZXJ0dXJu bGVzc25lc3M= IFRyaWJ1bmU= IEluZw== IGZhY3Rvcmllcw== IGNhdGNoZXM= IHByb25l IG1hdHJpeA== IGxvZ2lu IGluYWNj IGV4ZXJ0 c3lz IG5lZWRsZQ== IFF1cg== IG5vdGlmaWVk b3VsZGVy dHg= IHJlbWluZHM= IHB1Ymxpc2hlcnM= IG5vcnQ= IGdpdA== IGZsaWVz IEVtaWx5 IGZsb3dpbmc= IEFsaWVu IFN0cmF0ZWc= IGhhcmRlc3Q= IG1vZGlmaWNhdGlvbg== QVBJ IE1Z IGNyYXNoZXM= c3RhaXJz bnVtYmVy IHVyZ2luZw== Y2hhbm5lbA== IEZhbGNvbg== IGluaGFiaXRhbnRz IHRlcnJpZnlpbmc= IHV0aWxpemU= IGJhbm5lcg== IGNpZ2FyZXR0ZXM= IHNlbnNlcw== IEhvbG1lcw== IHByYWN0aXRpb24= IFBoaWxsaXBz b3R0bw== IGNvbXBpbGU= TW9kZWw= IEtv IFtd QW1lcmljYW5z IFRlcm1z IG1lZGljYXRpb25z IEFuYQ== IGZ1bmRhbWVudGFsbHk= IE5vdGljZQ== IHdlYWtlcg== IDAwMDA= IGdhcmxpYw== IG91dGJyZWFr IGVjb25vbWlzdA== IEJpcnRo IG9ic3RhY2xlcw== YXJjZXI= IE9ydGhvZG94 IHBsYWNlYm8= IENyZXc= YXNwYmVycnk= IEFuZ2Vscw== IGRpc2NoYXJnZQ== IGRlc3RydWN0aXZl MTE3 IFJpc2luZw== IGRhaXJ5 bGF0ZQ== IGNvbGxpc2lvbg== IFRpZ2Vycw== ZWFub3I= b2N1bWVudGVk IEludmFsaWQ= IGRvbnQ= IExpdGVy IFZh IGh5ZHJvZ2Vu IHZhcmlhbnRz IEJyb3ducw== IDE5NjU= IGluZGlnZW5vdXM= IHRyYWRlcw== IHJlbWFpbmRlcg== IHN3ZXB0 IEltcGFjdA== IHJlZGlzdA== IHVuaW50 Z3JhZHVhdGU= 44OV IFdJTEw= 44Gu5w== IENyaXRpY2Fs IGZpc2hlcg== IHZpY2lvdXM= IHJldmVyc2Vk WWVhcg== IFNveA== IHNob290aW5ncw== IGZpbG1pbmc= IHRvdWNoZG93bnM= YWlyZXM= bWVs IGdyYW5kZmF0aGVy IGFmZmVjdGlvbg== aW5nbGU= IG92ZXJseQ== QWRkaXRpb25hbA== IHN1cHJlbWU= IEdyYWQ= IHNwb3J0aW5n IG1lcmN5 IEJyb29rcw== b3VudHk= IHBlcmZvcm1z IHRpZ2h0bHk= IGRlbW9ucw== IGtpbGxpbmdz IGZhY3Rpb24= IE5vdmE= YXV0cw== IHVuZG91YnRlZGx5 YXJpbg== IHVuZGVyd2F5 cmFr IGxpdg== IFJlZ2lvbg== IGJyaWVmaW5n c2Vycw== Y2xvdWQ= IE1paw== dXNw IHByZWRpY3Rpb24= YXpvcg== IHBvcnRhYmxl IEdhbmQ= IHByZXNlbnRpbmc= IDEwODA= wrs= dXNoaQ== IFNwYXJr dGhlcmV1bQ== IGp1c3RpZmljYXRpb24= IE55 IGNvbnRyYWN0b3Jz bWluZ2hhbQ== IFN0eWxl 5YU= IENocm9uaWNsZXM= IFBpY3R1cmU= IHByb3Zpbmc= IHdpdmVz c2V0dA== IG1vbGVjdWxlcw== IEZhaXJ5 IGNvbnNpc3Rpbmc= IHBpZXI= YWxvbmU= aW5pdGlvbg== IG51Y2xl anNvbg== IGdvdHRh IG1vYmls IHZlcmJhbA== YXJpdW0= IG1vbnVtZW50 dWNrZWQ= IDI1Ng== VGVjaA== bWluZWNyYWZ0 IFRyYWNr IHRpbGU= IGNvbXBhdGliaWxpdHk= YXNpcw== IHNhZGQ= IGluc3RydWN0ZWQ= IE11ZWxsZXI= IGxldGhhbA== IGhvcm1vbmU= IG9yY2hl ZWxzZQ== IHNrZWxldA== IGVudGVydGFpbmluZw== IG1pbmltaXpl YWdhaW4= IHVuZGVyZ28= IGNvbnN0cmFpbnRz IGNpZ2FyZXR0ZQ== IElzbGFtaXN0 IHRyYXZlbHM= IFBhbnRoZXJz bGluZ3M= Q2FyZQ== IGxhd3N1aXRz dXJhcw== IGNyeXN0 IGxvd2VyZWQ= IGFlcmlhbA== IGNvbWJpbmF0aW9ucw== IGhhdW4= IGNoYQ== IHZpbmU= IHF1YW50aXRpZXM= IGxpbmtpbmc= YmFuaw== IHNveQ== QmlsbA== IEFuZ2VsYQ== IHJlY2lwaWVudA== IFByb3Rlc3Q= IHNvY2tldA== IHNvbGlkYXJpdHk= IOKG bWlsbA== IHZhcmllcw== IFBha2lzdGFuaQ== RHJhZ29u IHVuZQ== IGhvcml6b24= wqDCoMKgwqDCoMKgwqDCoA== IHByb3ZpbmNlcw== IGZyYW5rbHk= IGVuYWN0ZWQ= bm90ZXM= Wyc= IDE5Mg== b2NyYWN5 IGVuZG9yc2VtZW50 IG92ZXJ0aW1l VHJ1ZQ== TGFi bGljdGVk IEROQw== IGJlYXRz IEphbWll MTUy IElOVA== Q29udGFjdA== IGFjY291bnRlZA== aGFzaA== IFBhY2tlcnM= cGlyZXM= IGxlc2JpYW4= IGFtZW5kbWVudHM= IGhvcGVmdWw= IEZpbmxhbmQ= IHNwb3RsaWdodA== IGNvbmZpZ3VyZWQ= IHRyb3VibGVk IGdhemU= IENhbGdhcnk= IHJlbGlhYmlsaXR5 IGluc3VyZw== c3dlcg== YnV5 IFNraW4= IHBpeGVscw== IGhhbmRndW4= IHBhcmFz IGNhdGVnb3I= IEVM IFJleA== SW5kZWVk IGtpbmRh IGNvbmp1bmN0aW9u IEJyeWFu IE1hbnVmYWN0 eWFuZw== UGx1cw== U1FM aXNobWVudA== IGRvbWluYXRl IG5haWw= IG9hdGg= IGVydXB0 IEZpbmU= aXRiYXJ0 IENoaXA= IEFiZA== IE5hbQ== IGJ1eWVy IGRpc3NlbnQ= TGVha3M= Q29udGlu IHJpZGVy IFNvbWVvbmU= IGlsbHVzaW9u Y2lu IEJvZWluZw== IGluYWRlcXU= b3ZhdGlvbg== aWFudHM= IHJlYnVpbGQ= NDUw IERlc3Rpbnk= U1c= IFRpbGw= SGl0 aWF6 IEJhbmds YWNoZXJz IFJlZm9ybQ== IHNlZ21lbnRz IHN5c3RlbWF0aWM= ZGM= IENvbnNlcnZhdGl2ZXM= IHBvcnRhbA== aG9y IERyYWdvbmJvdW5k IGRyYWdnZWQ= b21v IHRoZWU= YWR2ZXJ0 IFJlcG9ydHM= IEV0 IGJhcnJlbHM= QXVndXN0 IGNvbXBhcmlzb25z IGhleA== IGFudGhyb3A= Ils= Ym9yb3VnaA== YWJp IHBpY3R1cmVk cGxheWluZw== IEFkZHJlc3M= IE1pcnJvcg== U21pdGg= IHRpcmVz IE5QUg== QUFBQQ== IGNsYXNzaWZpY2F0aW9u IFRoYW4= IEhhcm0= IFJB IHJlamVjdGlvbg== bWluYXRpb24= IHJhbmdlZA== IEZhbGxz REk= SG9zdA== 44K0 IEV4YW1wbGU= bGlzdGVk dGhpcmRz IHNhZmVndQ== YnJhbmQ= IHByb2JhYmxl Q2FuYWRh SVRJT04= IFFhZWRh IGNoaWNr IGltcG9ydHM= aGl0 bG9j V1c= IGJsZXc= IGFueXRpbWU= IHdob2xlcw== aWtlZA== IGNhbGN1bGF0aW9u Y3JlYXRl IE9yaQ== IHVwZ3JhZGVk IGFwcGFy dXRvcnk= IE1vbA== QnJpdA== IEpvbmc= SU5BTA== IFN0YXJ0aW5n IGRpY2U= dXJ0bGU= IHJlbHlpbmc= Y2xvc3VyZQ== IHByb2ZpdGFibGU= IHNsYXVnaHRlcg== IE1hbnVhbA== Y2FzdGVy ICIk IGZlYXRoZXI= IFNpbXBseQ== aWV2ZXM= IGRldGVyaW9y IFBDSQ== IHN0YW1w IGZsYXdz IHNoYWRl aGFtbWVy IHBhc3Nwb3J0 IGNvbnRpbmc= YW1lbA== IG9ic2VydmVycw== IG5lZ2xlY3Q= IFJC IEJyb3RoZXJob29k IHNrZXB0aWNhbA== ZmFtaWx5 dXNr IGVtb3Rpb25hbGx5 4pk= IEJldGE= YXNvbmFibGU= aWRpdHk= IE11bA== IGtpY2tpbmc= IENhcm0= b2xsYWg= VkVSVElT IEF0aGVu IGxhZGRlcg== IEJ1bGxldA== 5aM= MDAwMQ== IFdpbGRsaWZl IE1hc2s= IE5hbg== UmV2 IHVuYWNjZXB0YWJsZQ== bGVnYWw= IGNyb3dkZWQ= YWdp IENveA== amU= IG1vcmFsaXR5 IGZ1ZWxz IGNhYmxlcw== IG1hbmtpbmQ= IENhcmliYmVhbg== IGFuY2hvcg== IGJ5dGU= IE9mdGVu IE96 IGNyYWZ0ZWQ= IGhpc3Rvcmlhbg== IFd1 IHRvd2Vycw== IENpdGl6ZW5z IGhlbG0= IGNyZWRlbnRpYWxz IHNpbmd1bGFy IEplc3Nl IHRhY2tsZXM= IGNvbnRlbXB0 IGFmb3Jl IFNoYWRvd3M= IG5pbA== IHVyZ2VudA== YXBwbGU= Ymxvb2Q= IHZvbg== IG9mZmxpbmU= IGJyZWF0aGU= IGp1bXBz IGlycmVsZXZhbnQ= b3hpYw== b21hbA== aW1wb3J0YW50 Smlt IGdsb3Zlcw== YXJtaW5n ZGVwdGg= IHRhbGVudHM= b29raWU= IFNC IHBhbG0= dWZmcw== ZXN0YQ== SUdI IGNhbm9u IFZlcml6b24= IFBsZQ== IGNvdXBsZWQ= dmVsdA== IGZ1bmRyYWlzaW5n IEdldHRpbmc= IERMQw== IG1hdGhlbWF0aWNhbA== IEhT IENhcmRpbmFscw== dGVsbGluZw== IHNwb25zb3Jz IM8= IEJ1bGxz b3B0aW9u IHByb3Bvc2U= IG1lbW9yYWJsZQ== IGVtYnJhY2Vk IGRlY2xpbmluZw== SGVhbHRo ZWRh IH07 IHNwYW0= bWlsZQ== IHBpdGNoZXI= IEVpZ2h0 IGNhcmluZw== dXRpYw== cm9sZQ== IGFpcmxpbmU= ZXJuYW5kZXo= IEF0aGxldA== IGNlcnRpZmljYXRpb24= dXhl cmlnZXI= IGVtcGly IHNlbnNhdGlvbg== IGRpc20= IGJvbHQ= IGV2b2x2ZQ== SG91c2U= IGNvbnN1bHRhdGlvbg== IER1dHk= IHRvdWNoZXM= IE5hdGhhbg== IGZhaW50 aGFk Iig= IENvbnN1bWVy IEV4dHJlbWU= IDEyNw== IEhlcm0= IFNhY3JhbWVudA== aXpvcGg= IGFueGlvdXM= dWxvdXNseQ== IHNvY2lhbGx5 IFVUQw== IHNvbHZpbmc= IExldHRlcg== SGlzdG9yeQ== ZWR1Yw== UHJpY2U= KSk7 IHJlbG9hZA== YW1pYw== IHBvcms= IGRpc2NvdXJzZQ== IHRvdXJuYW1lbnRz YWlybw== IEt1cg== IENvc3Rh IHZpb2xhdGluZw== IGludGVyZmVyZQ== IHJlY3JlYXRpb25hbA== dWZmbGU= IHNwZWVjaGVz IG5lZWRpbmc= IHJlbWVtYmVycw== IGNyZWRpdGVk bmlh Zm9jdXNlZA== YW1lcmE= IGJydQ== dW1icw== IEN1YmFu IHByZWNlZGluZw== IG5vbnNlbnNl YWNpYWw= IHNtYXJ0cGhvbmVz IFN0b3JpZXM= U3BvcnRz IEVtZXJnZW5jeQ== b3VuY2luZw== ZWZpbmVk IGJlcg== IGNvbnN1bHRpbmc= IG1hc3RlcnM= aGVhc3Rlcm4= LiJb IFJ1bm5pbmc= IHN1c2NlcHQ= IEZlbmc= QW1lcmljYQ== cHJpc2Vz c3RpdGlhbA== IFdlZWtseQ== IEdyZWF0ZXI= bW9kdWxlcw== aWZ0ZXI= R3JhcGhpY3M= dWxlcg== IHdob2xseQ== IHN1cHByZXNz IGNvbmNlYWxlZA== IGhhcHBpbHk= IGFjY2VwdHM= IEVuam95 IHJpdmVycw== IEV4Y2VwdA== MjI1 IE5IUw== IE1jQ29ubmVsbA== IHB1c3N5 ZmVycmVk dXRhYmxl IGF0dGFpbg== ID49 IGRlcG9zaXRz cm9waGlj IG5vdG9yaW91cw== IFNoYXc= aWxpdGF0aW9u IGVwaWRlbWlj YWxsaWM= IHNtYWxsZXN0 b3ZpY2g= IGFjY2Vzc29yaWVz cGVydGllcw== IHN1cnBsdXM= IE1lY2g= IGFtYmln IEltbWlncmF0aW9u IGNoaW0= ZXZhbA== IHByYWN0aWNpbmc= IE15c3Rlcnk= IGRvbWFpbnM= IFNpbGljb24= YXBwcw== IGtpbG9tZXRlcnM= ZWE= IFNtYXNo IHdhcnJhbnR5 IG5vc3Q= c2ls cmV2 Sm9u IER1Ymxpbg== IHRhc3Rlcw== IGJvdXQ= Z3JlYXQ= ZXJyb3I= IHN3aXRjaGVz IEJhcHQ= RE8= b2tp IHNvdXJjZWQ= cHJvZHU= IGF0dGFjaG1lbnQ= IElzc3Vl IFF1ZXN0aW9u Sm9pbg== IGZpdHRlZA== IHVubGF3ZnVs Xl4= ZXJlaw== IGF1dGhlbnRpY2F0aW9u IHN0b2xl IGFjY291bnRhYmlsaXR5 bGFiZWw= U2VhcmNo IGFsYmVpdA== YXRpY2Fu ZnVuZGVk IEFkZGluZw== IElR IHN1Ym1hcg== bGl0 YXF1ZQ== IExlYXJuaW5n IGludGVnZXI= TWFzdGVy IENocm9t IHByZW1pZXI= T3A= IExpdQ== IGJsZXNzZWQ= IEdsb2Jl IFJlc3BvbnNl IGxlZ2l0aW0= IE1lcmtlbA== IGRpc3Bvc2Fs wrQ= IGdhdWdl cGVhdA== IGluZHVjZWQ= IHF1ZXN0aW9uYWJsZQ== YXJ0aHk= IFZpdA== IEZlZWQ= VW50aWw= VXQ= d29ydGh5 Ulk= IEhlcmFsZA== IEhhbW1lcg== IG1lZGFs IFJpdmVycw== IEhhY2s= IGNsYXJpZnk= IHRyYWNrZWQ= IGF1dG9ub21vdXM= IHRlbmFudA== IFFhdGFy ZXJpZQ== IGdyaW0= IE1vbml0b3I= IHJlc2lzdGFudA== IFNwZWM= IFdlbGxz TkFT MTQ4 IG1pbmVycw== aW90aWNz IG1pc3Nlcw== MTE2 Z2lhbg== Z2l0 IEV5ZXM= cHJlcw== IGdyYWR1YXRlZA== IGFuZ2Vs IHN5bmNocm9u IGVmZmljaWVudGx5 IHRyYW5zbWl0dGVk SGFycnk= IGdsb2JhbGx5 RU5DRQ== IE1vbnRhbmE= cmFnZWQ= IFByZXZlbnRpb24= IHBpc3M= IExs IHNoZWxm IEJKUA== IFRlc3RhbWVudA== IExhdGU= aWtlcg== IEhhcHA= IEp1bGlhbg== aGFsbA== IHNwb250 IHNodXRkb3du IGluY29uc2lzdGVudA== IHN1YnNjcmliZXJz IHNrZWxldG9u IE5lYnJhc2th IGluc3BpcmU= IFZvaWQ= RmVlZA== IGFuZ2xlcw== IFNwcmluZ3M= IGJlbmNobWFyaw== IHZhY2NpbmVz aXpvcGhyZW4= c2V4dWFs dWZmZWQ= IHNoaW5l IEthdGg= IGdlc3R1cmU= aW5lYQ== IHJpcA== IG9wcHJlc3Npb24= IGNvbnNjaWVuY2U= YnQ= IEx1bQ== IGluY2lkZW5jZQ== IEZh d3I= IG1pbmVyYWw= IFNwdXJz YWxreQ== IHRodW5kZXI= IG9waW8= QmVpbmc= IFBhbG0= IHdhc3RlZA== IGxi aWFyaWVz IEluaXRpYXRpdmU= IGN1cnJpYw== IG1hcmtlcg== IE1jTA== IGV4dGVuc2lvbnM= IFB2 IEFybXM= IG9mZmVyaW5ncw== IGRlZmVuc2Vz IHZlbmRvcg== IGNvbnRyYWRpY3Q= IENvbGlu IHJlZGRpdA== IHBlcmlwaGVy MTIy IHNpbnM= RWRpdA== SUNU U29mdA== IFNoYWg= IGFkbWluaXN0cmF0b3I= IFRyaXA= IHBvcm5vZ3JhcGh5 IHR1aXRpb24= aW5lbmNl IFByb2dyZXNz IGNhdGFsb2c= IHN1aXRl IGhpa2U= IHJlcHJvZHVjdGl2ZQ== ZW5naW5l IGRyb3VnaHQ= IE5vYWg= IDIzMA== IGR1ZGU= IHJlbGF4ZWQ= IHBhcnRpdGlvbg== IHBhcnRpY2lwYW50 IHRlbGVzYw== IGZlYXM= IEZG b3duZXI= IHN3ZWVwaW5n IGxlbnNlcw== IG1hdGNodXA= IFJlcGw= b3VybmFscw== IGNyZWRpYmxl IGdyYW5kbW90aGVy IHRoZXJtYWw= IHN1YnNjcmliaW5n IGlkZW50aXRpZXM= Y29sbQ== VUNU IHJlbHVjdGFudA== dXNlcnM= IENvcnQ= IGFzc2lzdGVk T1NT QVRJT05T SVNI IHBoYXJtYWNldXRpY2Fs aWNhYmxl YWRpYW4= IFNvbmlj IEZ1cnk= IE1vbmc= QUg= IFBzeWNob2xvZ3k= IHBob3NwaA== IHRyZWF0cw== rZQ= IHN0ZWFkaWx5 IEhlbGxv IHJlbGF0ZXM= IGNsdWU= RXhwbA== YXV0aA== IHJldmlzaW9u IGVsZA== b3Npb24= IGJyb24= MTQ0 cmlrZXM= IG1pbmVz IGJsYW5rZXQ= IEZhaWw= ZWxlZA== IEltYWdpbmU= IFBsYW5uZWQ= YWlj UmVxdWVzdA== TWFk IEhvcnNl IEVhZ2xl IGNhcGFj MTU3 IGxpbmc= IE5pY2U= IFBhcmVudGhvb2Q= bWluc3Rlcg== b2dz ZW5zaXRpdmU= Tm90aGluZw== IGNhcm4= Rmlu IFBF IHJpZmxlcw== IExQ U2FuZA== IGd1aUFjdGl2ZQ== IHRvdXJpc3Q= Q05O IHVudmVpbGVk IHByZWRlY2Vzc29y fXs= dWJlcg== IG9mZnNob3Jl IG9wdGljYWw= IFJvdA== IFBlYXJs ZXRvbg== IHN0YXJlZA== IGZhcnRoZXI= YXRpbGl0eQ== Y29udGlu IEd5 IEZvc3Rlcg== IENvYw== cmllbnRz IGRlc2lnbmluZw== IEVjb25vbXk= T05H V29tZW4= IE5hbmN5 ZXJ2ZXI= IG1hc2N1bA== IGNhc3VhbHRpZXM= IDIyNQ== IFN1bGxpdmFu IENob2ljZQ== IGFzdGVy d3M= IGhvdGVscw== IGNvbnNpZGVyYXRpb25z IGNvdWNo IFN0cmlw IEdu IG1hbmlwdWxhdGU= bGllZA== IHN5bnRoZXRpYw== IGFzc2F1bHRlZA== IG9mZmVuc2Vz IERyYWtl IGltcGU= T2N0b2Jlcg== IEhlcml0YWdl aGw= IEJsYWly VW5saWtl IGdyaWVm IDQ1MA== IG9wdGVk IHJlc2lnbmF0aW9u aWxv IHZlcnNl IFRvbWI= IHVwdA== IGFpcmVk IEhvb2s= IE1MQg== IGFzc3VtZXM= b3V0ZWQ= IFZlcnM= IGluZmVyaW9y IGJ1bmRsZQ== IEROUw== b2dyYXBoZXI= IG11bHRpcA== IFNvdWxz IGlsbHVzdHJhdGVk IHRhY3RpYw== IGRyZXNzaW5n IGR1bw== Q29uZg== IHJlbGVudA== IGNhbnQ= IHNjYXJjZQ== IGNhbmR5 IENG IGFmZmlsaWF0ZWQ= IHNwcmludA== eWxhbg== IEdhcmNpYQ== IGp1bms= UHJpbnQ= ZXhlYw== Q3JpdA== IHBvcnRyYWl0 aXJpZXM= IE9GRg== IGRpc3B1dGVz V1I= TG92ZQ== 44GE IFJleW4= IGhpcHA= b3BhdGg= IGZsb29ycw== IEZlZWw= IHdvcnJpZXM= IHNldHRsZW1lbnRz IFBvcw== IG1vc3F1ZQ== IGZpbmFscw== IGNydXNoZWQ= IFByb2JhYmx5 IEJvdA== IE1hbnM= IFBlcmlvZA== IHNvdmVyZWlnbnR5 IHNlbGxlcg== IGFwb3N0 IGFtYXRldXI= IGRvcm0= IGNvbnN1bWluZw== IGFybW91cg== IFJvb3Nl IGludGVuc2l2ZQ== IGVsaW1pbmF0aW5n IFN1bm5p IEFsZXBwbw== amlu IGFkdmlzZQ== cGFs IEhhbG8= IGRlc2NlbnQ= IHNpbXBsZXI= IGJvb3Ro U1RS TGF0ZXI= IENhdmU= PT09 IG1vbA== IGZpc3Q= IHNob3RndW4= c3VwcA== IHJvYmJlcnk= RWZmZWN0 IG9ic2N1cmU= IFByb2Zlc3Npb25hbA== IGVtYmFzc3k= IG1pbGl0YW50 IGluY2FyY2Vy IGdlbmVyYXRlcw== IGxhdW5jaGVz IGFkbWluaXN0cmF0b3Jz IHNoYWZ0 IGNpcmN1bGFy IGZyZXNobWFu IFdlcw== IEpvZWw= IERyZXc= IER1bmNhbg== IEFwcGFyZW50bHk= c2lnaHQ= IEludGVybmFs IEluZGl2aWR1YWw= IEZF IGJvcmU= IE10 IGJyb2FkbHk= IE9wdGlvbnM= b3VudGFpbg== aXBlcw== IFZpZGVvcw== MjA0 IGhpbGxz IHNpbXVsYXRpb24= IGRpc2FwcG9pbnRtZW50 aXRhbg== IExhYm9yYXRvcnk= IHVwd2FyZA== IGJvdW5kYXJ5 IGRhcmtlcg== aGFydA== IGRvbWluYW5jZQ== Q29uZw== IE9yYWNsZQ== IExvcmRz IHNjaG9sYXJzaGlw IFZpbmNlbnQ= ZWRl IFJhaA== IGVuY291cmFnZXM= cm92 IHF1bw== IHByZW1pc2U= IENyaXNpcw== IEhvbG9jYXVzdA== IHJoeXRobQ== IG1ldHJpYw== Y2x1Yg== IHRyYW5zcG9ydGVk IG5vZA== IFBpc3Q= IGFuY2VzdG9ycw== IEZyZWRlcg== dGh1bWJuYWlscw== IENF T05E UGhpbA== dmVuZ2U= IFByb2R1Y3Rz Y2FzdGxl IHF1YWxpZnlpbmc= IEthcmVu VkVSVElTRU1FTlQ= IG1pZ2h0eQ== IGV4cGxhbmF0aW9ucw== IGZpeGluZw== RGk= IGRlY2xhcmluZw== IGFub255bWl0eQ== IGp1dmVu IE5vcmQ= IERvb20= IEFjdHVhbGx5 T2s= cGhpcw== IERlc2VydA== IDExNg== SUs= IEZN IGluY29tZXM= VkVM b2tlcnM= IHBlY3Vs IGxpZ2h0d2VpZ2h0 Z3Vl IGFjY2VudA== IGluY3JlbWVudA== IENoYW4= IGNvbXBsYWluaW5n IEJhZ2hk IG1pZGZpZWxkZXI= IG92ZXJoYXVs UHJvY2Vzcw== IEhvbGxvdw== IFRpdGFucw== U21hbGw= bWFudWVs IFVuaXR5 IEV2ZW50cw== U3R5 IGRpc3Byb3BvcnRpb24= bmVzdHk= ZW5lcw== IENvZA== IGRlbW9uc3RyYXRpb25z IENyaW1zb24= IE9I IGVucm9sbGVk IGNlbA== IEJyZXR0 IGFpZGU= IGhlZWxz IGJyb2FkYmFuZA== IG1hcmtpbmc= IHdpemFyZA== IE5K IENoaWVmcw== IGluZ3JlZGllbnQ= IGR1Zw== IFNodXQ= dXJjaGFzZQ== ZW5kb3I= IGZhcm1lcg== IEdvbGRtYW4= MTI5 MTU1 T3JkZXI= IGxpb24= aWFibHk= IHN0YWlu YXJyYXk= aWxpdGFyeQ== IEZBUQ== IGV4cGxvZGVk IE1jQ2FydGh5 IFR3ZWV0 IEdyZWVucw== ZWtpbmc= bG4= ZW5zZW4= IG1vdG9yY3ljbGU= IHBhcnRpY2xl IGNob2xlc3Rlcm9s QnJvbg== IHN0YWly IG94aWQ= IGRlc2lyYWJsZQ== aWJsZXM= IHRoZW9y Zm9yY2luZw== IHByb21vdGlvbmFs b3Zv Ym9vdA== IEJvbnVz cmF3bGluZw== IHNob3J0YWdl IFBzeQ== IHJlY3J1aXRlZA== IGluZmFudHM= IHRlc3Rvc3Rlcm9uZQ== IGRlZHVjdA== IGRpc3RpbmN0aXZl IGZpcm13YXJl YnVpbHQ= MTQ1 IGV4cGxvcmVk IGZhY3Rpb25z IHZpZGU= IHRhdHRvbw== IGZpbmFuY2lhbGx5 IGZhdGlndWU= IHByb2NlZWRpbmc= Y29uc3RpdHV0aW9uYWw= IG1pc2Vy IGNoYWlycw== Z2dpbmc= aXBwbGU= IGRlbnQ= IGRpc3JlZw== 55Q= c3RhbnQ= bGxv YnBz YWtlbmluZw== IGFibm9ybWFs IEVSQQ== 5aOr IEhCTw== IE1BUg== IGNvbmNlc3M= IHNlcnZhbnQ= IGFzcGly bGF2 IFBhbmVs YW1v IHByZWNpcA== IHJlY29yZGluZ3M= IHByb2NlZWRlZA== IGNvbG9ueQ== IFRhbmc= YWJsbw== IHN0cmlwcGVk TGVmdA== dG9v IHBvdGF0b2Vz IGZpbmVzdA== JSku IGNyYXA= IFphY2g= YWJhc2Vz IEdvdGg= IGJpbGxpb25haXJl d29sZg== IHNhbmN0aW9u U0s= IGxvZ2dlZA== UG8= ZXllZA== dW5hbA== IGNyaWNrZXQ= IGFybWllcw== IHVuY292ZXJlZA== Q2xvdWQ= w7Nu IHJlYm91bmRz IG1lcw== T3Blcg== UGFj IG5hdGlvbmFsbHk= IGluc2VydGVk cGljdA== IGdvdmVybmFuY2U= 0Lg= IHByaXZpbGVnZXM= R0VU IGZhdm9yaXRlcw== aW1pdHk= IGxvdmVy dGhlbQ== ZW1wbA== IGdvcmdlb3Vz QW5u IHNsaXBwZWQ= IHZldG8= Qm9i IHNsaW0= dWNj IEZhbWU= dWRkZW5seQ== IGRlbmllcw== IE1hdXI= IGRpc3RhbmNlcw== IHdhbm5h dGFy IFNFUg== IOKI IGxlbW9u YXRoZXRpYw== IGxpdGVyYWw= IGRpc3Rpbmd1aXNoZWQ= IGFuc3dlcmluZw== R0k= IHJlbGlnaW9ucw== IFBoaWxvcw== IExheQ== IGNvbXBvcw== aXJlbWVudHM= IEtvcw== aW5leg== cm9sbGluZw== IHlvdW5nZXN0 YW5kaXNl IEJvcm4= IGFsdGFy YW1pbmE= IEJvb3Q= dm9j IGRpZ2dpbmc= IHByZXNzdXJlcw== IGxlbg== MjY0 IGFzc2Fzc2luYXRpb24= IEJpcm1pbmdoYW0= IE15dGg= IHNvdmVyZWlnbg== IEFydGlzdA== IFBob3RvZ3JhcGg= IGRlcGljdGVk IGRpc3BlbnM= b3J0aHk= IGFtYnVs aW50ZWc= IENlbGU= IFRpYmV0 IGhpZXJhcmNoeQ== IGN1 IHByZXNlYXNvbg== IFBldGVyc29u IGNvbG91cnM= IHdvcnJ5aW5n IGJhY2tlcnM= IFBhbG1lcg== IM68 IGNvbnRyaWJ1dG9y IGhlYXJpbmdz IHVyaW5l INk= b3VyZ2VvaXM= U2ltaWxhcg== IFppbW1lcg== c29tZXRoaW5n IFVTQw== IHN0cmVuZ3Rocw== IEZJ IGxvZ2dpbmc= QXNrZWQ= IFRoYWk= aW5xdQ== IFdhbHQ= IGNyZXdz aXRpc20= MzAx IHNoYXJwbHk= dW1lZA== IHJlZGlyZWN0 cmF0b3Jz SW5m IFdlYXBvbnM= IHRlYXNw MTk5OQ== TGl2ZQ== IEVzcGVjaWFsbHk= IFN0ZXI= IFZldGVyYW5z IGludHJv b3RoZXJhcHk= IG1hbHdhcmU= IGJyZWVkaW5n IG1vbGVjdWxhcg== IFJvdXRl IENvbW1lbnQ= b2NoZW0= IGFpbg== U2Vhc29u IGxpbmViYWNrZXI= xKs= IEVjb25vbWljcw== ZXNhcg== IExpdmVz IEVtbWE= IGtpbg== IFRlcnJpdA== IHBsYW50ZWQ= b3Rvbg== IEJ1dHRlcg== IFNwb25z UEVS IGR1bmdlb24= IHN5bWJvbGlj IGZpbG1lZA== IGRpZXRz IGNvbmNsdWRlcw== IGNlcnRhaW50eQ== IEZvcm1hdA== IHN0cmFuZ2Vycw== Zm9ybWF0 IFBoYXNl IGNvcGllZA== IG1ldHJlcw== bGRh IFVzZXJz IGRlbGliZXJhdGU= IHdhc2hlZA== IExhbmNl aW1hdGlvbg== IGltcHJvcGVy IEdlbmVzaXM= aWNrcg== IEt1c2g= IHJlYWxpc2U= IGVtYmFycmFzc2luZw== YWxraW5n YnVja3M= IHZlcmlmaWVk IG91dGxpbmU= eWVhcnM= IEluY29tZQ== MjAy IHpvbWJpZXM= RmluYWw= IE1pbGxlbm4= IG1vZGlmaWNhdGlvbnM= IFZpc2lvbg== IE1vc2Vz dmVyYg== aXRlcnJhbmVhbg== IEpldA== IG5hdmFs IEFnZw== IHVybA== IHZpY3Rvcmllcw== IG5vbmV0aGVsZXNz IGluanVzdA== IEZhY3Q= 55o= IGluc3VmZmljaWVudA== cmV2aWV3 ZmFjZWJvb2s= IG5lZ290aWF0aW5n IGd1YXJhbnRlZXM= aW1lbg== dXRlbmJlcmc= IGdhbWJsaW5n IGNvbmdy TG9hZGluZw== IG5ldmVydGhlbGVzcw== IHByZXNpZGVudHM= IEluZHVzdHJpYWw= IDExOA== IHBvdXJlZA== IFRvcnk= IDE3NQ== IDo9 U2NvdHQ= YW5nZXJlZA== VG9r IG9yZ2FuaXplcnM= TWF0 IEdyb3d0aA== IGFkdWw= IGVuc3VyZXM= IDExNw== 6b6N5Q== IG1hc3NhY3Jl IGdyYWRlcw== YmVmb3Jl QURWRVJUSVNFTUVOVA== IFNsb3c= IE1NQQ== 4oCUIg== IFZhdGljYW4= UWFlZGE= IG93ZQ== NjY2Ng== IFNvcnJ5 IEdyYXNz IGJhY2tncm91bmRz IGV4aGF1c3RlZA== IGNsYW4= IGNvbXByb21pc2Vk IEVsZg== IElzYWFj ZW5zb24= SW52ZXN0 SUZB IGludGVycnVwdGVk 44OJ44Op IHR3aXN0ZWQ= IERyYWdvbnM= TW9kZQ== IEtyZW1saW4= IGZlcnRpbA== aGVyZXM= cGhhbg== IE5vZGU= ZmVk IE9yYw== IHVud2lsbGluZw== Q2VudA== IHByaW9yaXQ= IGdyYWR1YXRlcw== IHN1YmplY3RpdmU= IGlzc3Vpbmc= IEx0 IHZpZXdlcg== IHdva2U= VGh1cw== YnJvb2s= IGRlcHJlc3NlZA== IGJyYWNrZXQ= IEdvcg== IEZpZ2h0aW5n IHN0cmlrZXI= UmVwb3J0 IFBvcnR1Z2Fs IG5lbw== d2Vk MTk5 IGZsZWVpbmc= c2hhZG93 aWRlbnRpZmllZA== VVNF U3RlYW0= IHN0cmV0Y2hlZA== IHJldmVsYXRpb25z YXJ0ZWQ= IER3 IGFsaWdubWVudA== ZXN0b24= IEphcmVk U2Vw IGJsb2dz dXBkYXRl Z29t cmlzaw== IGNsYXNo IEhvdXI= IHJ1bnRpbWU= IHVud2FudGVk IHNjYW0= IHJhY2s= IGVubGlnaHQ= b25lc3Q= IEZlcnI= IGNvbnZpY3Rpb25z IHBpYW5v IGNpcmN1bGF0aW9u IFdlbGNvbWU= IGJhY2tsYXNo IFdhZGU= IHJlY2VpdmVycw== b3RpdmU= SmVmZg== IG5ldHdvcmtpbmc= IFByZXA= IEV4cGxvcmVy IGxlY3R1cmU= IHVwbG9hZGVk IE1lYXQ= QkxF IE5hemlz IFN5bmQ= c3R1ZA== cm9vdHM= cmlhbnM= IHBvcnRyYXllZA== ID8/ IEJ1ZGRoYQ== c3Vu Um9iZXJ0 IENvbXBsZXg= IG92ZXJzZWU= IHN0ZWFsdGg= VGl0bGU= IEpvYnM= IEt1bQ== IGFwcHJlY2lhdGlvbg== IE1PRA== IGJhc2ljcw== IGNsaXBz IG51cnNpbmc= IHByb3Bvc2l0aW9u IHJlYWxpc2Vk IE5ZQw== IGFsbG9jYXRlZA== cml1bQ== YXJhbg== IFByb2R1Y3Rpb24= IFZvdGU= IHNtdWdn IGh1bnRlcg== YXplcg== IENoYW5nZXM= IGZsdWN0 eW9u QXJyYXk= IGtpdHM= V2F0ZXI= IHVuY29tbW9u IHJlc3Rpbmc= ZWxscw== d291bGQ= IHB1cnN1ZWQ= IGFzc2VydGlvbg== b21ldG93bg== IE1vc3Vs IFBsYXRmb3Jt aW9sZXQ= IHNoYXJlaG9sZGVycw== IHRyYWlscw== UGF5 IEVuZm9yY2VtZW50 dHlwZXM= IEFub255bW91cw== IHNhdGlzZnlpbmc= aWxvZ3k= ICgn d2F2ZQ== Y2l0eQ== U3RldmU= IGNvbmZyb250YXRpb24= IEVsZA== Q2FwdA== YWhhbg== aHRt IEN0cmw= T05T MjMw aWZh aG9sZGluZw== IGRlbGljYXRl IGphdw== IEdvaW5n b3J1bQ== U2Fs IGR1bGw= IEJldGg= IHByaXNvbnM= IGVnbw== IEVsc2E= YXZvcml0ZQ== IEdhbmc= IE51Y2xlYXI= IHNwaWRlcg== YXRzdQ== IHNhbXBsaW5n IGFic29yYmVk IFBoYXJt aWV0aA== IGJ1Y2tldA== IFJlY29tbQ== T0Y= IEZhY3Rvcnk= QU5DRQ== IGJhY3Rlcg== SGFz IE9ic2Vydg== MTIx IHByZW1pZXJl RGV2ZWxvcA== IGN1cnJlbmNpZXM= Q2FzdA== IGFjY29tcGFueWluZw== IE5hc2h2aWxsZQ== IGZhdHR5 IEJyZW5k IGxvY2tz IGNlbnRlcmVk IFVU YXVnaHM= b3JpZQ== IEFmZm9yZGFibGU= dmFuY2U= REw= ZW1ldA== IHRocm9uZQ== IEJsdWV0b290aA== IG5hbWluZw== aWZ0cw== QURF IGNvcnJlY3RlZA== IHByb21wdGx5 IFNUUg== IGdlbm9tZQ== IGNvcGU= IHZhbGxleQ== IHJvdW5kZWQ= IEtlbmQ= YWxpb24= cGVycw== IHRvdXJpc20= IHN0YXJr dmw= IGJsb3dpbmc= IFNjaGVkdWxl c3Rk IHVuaGFwcHk= IGxpdGlnYXRpb24= Y2VkZXM= IGFuZHJvaWQ= IGludGVncmFs ZXJlcnM= dWRlZA== dGF4 IHJlaXRlcg== IE1vdG9ycw== b2NpYXRlZA== IHdvbmRlcnM= IEFwb3N0 dWNraW5n IFJvb3NldmVsdA== ZnJhbQ== IHlpZWxkcw== IGNvbnN0aXR1dGVz YXdr SW50ZXJlc3Q= IGludGVyaW0= IGJyZWFrdGhyb3VnaA== IENoZXI= IHByb3NlYw== IERq IE1U UmVzcA== IFBU IHNwZXJt ZWRpdA== QlQ= TGludXg= Y291bnRyeQ== bGVhZ3Vl IGRpY2s= IG9jdA== IGluc2VydGluZw== IHNjcmE= IEJyZXdpbmc= IDE5NjY= IHJ1bm5lcnM= IHBsdW4= aWR5 IERpYW4= IGR5c2Z1bmN0aW9u IGV4Y2x1c2lvbg== IGRpc2dy IGluY29ycG9yYXRl IHJlY29uYw== IG5vbWluYXRlZA== IEFyY2hlcg== ZHJhdw== YWNoZWxvcg== IHdyaXRpbmdz IHNoYWxsb3c= IGhhc3Q= IEJNVw== IFJT IHRoaWdo IDE5NjM= IGxhbWI= IGZhdm9yZWQ= YWdsZQ== IGNvb2xlcg== IEhvdXJz IEdV IE9yaWdpbg== IGdsaW1wc2U= LS0tLS0tLS0tLS0tLS0tLS0tLS0= TGlt IGNoZWVr IGplYWxvdXM= LSc= IGhhcm5lc3M= IFBvaXNvbg== IGRpc2FiaWxpdGllcw== bmVhcG9saXM= IG91dGxvb2s= IG5vdGlmeQ== IEluZGlhbmFwb2xpcw== IGFicnVwdA== bnNpYw== IGVuY3J5cHRlZA== IGZvcmZl cmVhdGg= IHJhYmI= IGZvdW5kYXRpb25z IGNvbXBsaW1lbnQ= IEludGVydmlldw== IFN3ZQ== IGFkb2xlc2M= IG1vbml0b3Jz IFNhY3JhbWVudG8= IHRpbWVseQ== IGNvbnRlbXBs IHBvc2l0aW9uZWQ= IHBvc3RlcnM= cGhpZXM= aW92YXNjdWxhcg== dm9pZA== IEZpZnRo IGludmVzdGlnYXRpdmU= T1VO IGludGVncmF0ZQ== IElOQw== aXNoYQ== aWJsaW5ncw== IFJlcXVlc3Q= IFJvZHJpZ3Vleg== IHNsaWRlcw== IERY IGZlbWluaXNt IGRhdGFz IGJlbmQ= aXJ1cw== IE5pZ2VyaWE= Rm94 Q2hhbmdl IGFpcnBsYW5l IExhZGVu IHB1YmxpY2l0eQ== aXh0eQ== IGNvbW1pdG1lbnRz IGFnZ3JlZ2F0ZQ== IGRpc3BsYXlpbmc= IEFycm93 IDEyMg== IHJlc3BlY3Rz YW5kcm9pZA== c2l4 IFNoYQ== IHJlc3RvcmF0aW9u KVw= V1M= b3lz IGlsbHVzdHJhdGU= d2l0aG91dA== MTI2 IOKUgg== IHBpY2t1cA== bmVscw== IC4uLi4= Zm9vZA== IEZlbg== KT8= IHBoZW5vbWVuYQ== IGNvbXBhbmlvbnM= IFdyaXRl IHNwaWxs IGJyaWRnZXM= IFVwZGF0ZWQ= IEZv IGluc2VjdHM= QVNISU5HVE9O IHNjYXJl aWx0cg== IFpoYW5n IHNldmVyaXR5 IGluZHVs MTQ5 IENvZmZlZQ== IG5vcm1z IHB1bHNl IEZU IGhvcnJpZmlj IERlc3Ryb3k= IEpTT04= IG9saXZl IGRpc2N1c3Nlcw== UmVzdA== RWxlY3Q= IFdpbm4= IFN1cnZpdg== IEhhaXQ= U3VyZQ== b3BlZA== IHJvb3RlZA== IFNrZQ== IEJyb256ZQ== IGxvbA== RGVmYXVsdA== IGNvbW1vZGl0eQ== cmVkaXRlZA== IGxpYmVydGFyaWFu IGZvcmJpZGRlbg== IGdyYW4= 4Kg= IGxhZw== ZW56 ZHJpdmU= IG1hdGhlbWF0aWNz IHdpcmVz IGNyaXRpY2FsbHk= IGNhcmJvaHlk IENoYW5jZWxsb3I= IEVkZGll IGJhbm5pbmc= IEZyaQ== IGNvbXBsaWNhdGlvbnM= ZXRyaWM= IEJhbmdsYWRlc2g= IGJhbmR3aWR0aA== U3RvcA== IE9yaWdpbmFsbHk= IGhhbGZ3YXk= eW5hc3R5 c2hpbmU= IHRhbGVz cml0aWVz YXZpZXI= IHNwaW5uaW5n IFdITw== IG5laWdoYm91cmhvb2Q= YmFjaA== IGNvbW1lcmNl IFNsZQ== QlU= IGVudHJlcHJlbmV1cg== IHBlY3VsaWFy IENvbW1lbnRz ZnJl MzIw SUNT IGltYWdlcnk= IENhbm9u IEVsZWN0cm9uaWM= c2hvcnQ= KCg= RGln IGNvbW1lbQ== dWNlZA== IGluY2xpbmVk IFN1bW1vbg== IGNsaWZm IE1lZGl0ZXJyYW5lYW4= IHBvZXRyeQ== IHByb3NwZXJpdHk= IFJlY2U= IHBpbGxz bWVtYmVy IGZpbmFsZQ== dW5j IEdpZw== 5L0= IGxvZA== IGJhY2t3YXJk LSs= IEZvcndhcmQ= IHRocmk= c3VyZQ== IHNvYXA= IEZY UkVT IFNleHVhbA== b3Vsb3M= IGZvb2xpc2g= IHJpZ2h0ZW91cw== IGNvZmY= dGVycm9yaXNt dXN0YWlu b3Rlcg== IGFidXNlcw== bmV4dA== IGFidXNpdmU= IHRoZXJlYWZ0ZXI= IHByb2hpYml0aW9u IFNVUA== IGRpcA== IHJpcHBlZA== IGluaGVyaXRlZA== IGJhdHM= c3RydQ== R1Q= IGZsYXdlZA== cGhhYmV0 IGZvZw== ZG9vcnM= IGltYWdpbmc= IGRpZ2l0cw== IEh1bmdhcnk= IGFycm9n IHRlYWNoaW5ncw== IHByb3RvY29scw== IEJhbmtz 4Lg= cG91bmQ= IEN1cnQ= LiIp Li8= IGV4ZW1wdGlvbg== ZW5kaXg= IE11bGw= IGltcHJvdmVz IEdhbWVy ZGltZW5zaW9uYWw= SWNvbg== IE1hcmdhcmV0 U3RhdHVz ZGF0ZXM= IGludGVuZHM= IGRlcGljdA== IHBhcmtlZA== Sm9l IE1hcmluZXM= Y2hub2xvZ3k= ISku IGp1ZGdlZA== IHdlaWdodHM= UmF5 IGFwYXJ0bWVudHM= aGVzdGVy IHJlaW5mb3JjZQ== IG9mZmVuZGVy b2NjdXA= IHNvcmU= ZXB0 IFBIUA== IEJyb3c= IGF1dGhvcml6YXRpb24= IFJpc2s= IERlbGF3YXJl IFFV IG5vdGlmaWNhdGlvbnM= IHN1bmxpZ2h0 IGV4Y2x1ZGU= ZGF0 IG1lc2g= IFN1ZGFu IGJlbG9uZ2Vk IHN1YndheQ== IG5vb24= IEludGVyaW9y b2xpY3M= IExha2Vycw== IGNvZGluZw== RGlzY2xhaW1lcg== Q2FsaWY= T2xk IGRpc2w= Pz8/Pz8= IGNvbmZpcm1z IHJlY3J1aXRtZW50 IGhvbWljaWRl Q29uc2lkZXI= IEplZmZyZXk= ZnR5 fTs= IG9iamVjdGlvbg== ZG9pbmc= IExlbw== V2FudA== IGdsb3c= IENsYXJrZQ== IE5vcm1hbg== IHZlcmlmaWNhdGlvbg== IHBhY2tldA== IEZvcm11bGE= IHBsYWc= ZXN2aWxsZQ== IHNob3V0aW5n IG92 IFJFQw== IEJ1Yg== IG5pbnRo IGVuZXJn IHZhbGlkaXR5 IHVwcw== amFjaw== IG5laWdoYm9yaW5n IE5lYw== ZXdvcmtz IEhhYg== YXJleg== IHNwaW5l IGV2ZW50dWFs IExlYWRlcnM= IENhcm4= IHByb2JhdGlvbg== IHJvbWFuY2U= bXNn IE1lY2hhbmljYWw= RVJZ Um9jaw== IHBhcnRpc2Fu Tm9kZQ== YXNzZXRz bWluZW50 IGZvcmVpZ25lcnM= IHRlc3RpZnk= IFVzdWFsbHk= bG9yZHM= IEdyZW4= IFBvd2VsbA== QklM IHNy IGFkZGljdA== IHNoZWxscw== IHNpZ2g= IFlhbGU= dGVybml0eQ== IDc1MA== RVU= IFJpZmxl IHBhdHJvbg== ZW1h IEJhbm5vbg== YW5pdHk= IHRyb3BpY2Fs IFZJSQ== Y3Jvc3M= RXZlcnl0aGluZw== IElTTw== IGh1bWJsZQ== YXNzaW5n IEZJRw== IHVwZGF0aW5n eXNvbg== IGNhbGNpdW0= IGNvbXBldGVudA== IHN0ZWVyaW5n UHJvdA== IFNZ IEZpbmFscw== IFJ1Zw== MTU5 MTM3 IEdvbGY= IDEyNg== IGFjY29tbW9kYXRpb24= IEh1Z2hlcw== IGFlc3RoZXRpYw== YXJ0aXNhbg== IFR3aWxpZ2h0 IHByaW5jZQ== IEFncmljdWx0dXJl IERpc2Nv IHByZWNlZGVudA== IHR5cGluZw== YXV0aG9yaXplZA== T3B0aW9u IEF1Yg== bGlzaGVz YWNodA== bWFn UGV0ZXI= IFVGTw== bW9udG9u IExpdGg= IGFyb20= IHNlY3VyaW5n IGNvbmZpbmVk cHJpdmF0ZQ== IHN3b3Jkcw== IG1hcmtlcnM= IG1ldGFib2xpYw== c2VsZWN0 IEN1cnNl IE90 Z3Jlc3NpdmU= IGluY3VtYg== IFNhZ2E= IHByaWNlZA== IGNsZWFyYW5jZQ== Q29udGVudA== IGRyaWxsaW5n IG5vdGljZXM= IGJvdXJnZW9pcw== IHZlc3Q= IGNvb2tpZQ== IEd1YXJkaWFucw== cnlz aW55bA== IDEyNA== IHBsYXVzaWJsZQ== b25naA== IE9kaW4= IGNvbmNlcHRpb24= IFl1aw== IEJhZ2hkYWQ= IEZsYWc= QXVzdHJhbA== IElCTQ== IGludGVybmF0aW9uYWxseQ== IFdpa2lMZWFrcw== SUVE IGN5bg== IGNob29zZXM= IFBpbGw= IGNvbWJpbmluZw== IHJhZGk= IE1vaGFtbWVk ZGVmZW5zZQ== YXRjaGluZw== U3ViamVjdA== aWNpZW5jeQ== RnJhbWU= IHsi IGNoZXNz IHRpbWVy MTkw IHRpbg== IG9yZGluYW5jZQ== ZW1ldGVyeQ== IGFjY3VzaW5n IG5vdGljZWFibGU= IGNlbnRyZXM= IGxpZA== IE1pbGxz aW1ndXI= IHpvb20= ZXJnaWM= IGNvbXByZXNzaW9u cHJpbQ== ZmluZA== IHN1cmc= IHBhbmQ= IEtlZQ== IENoYWQ= Y2VsbGVuY2U= b3lsZQ== IHNvY2lhbGlzbQ== IFRyYXZpcw== IE1Ieg== IGd1aWxk QUxMWQ== IFN1YnNjcmliZQ== IFJlbGF0ZWQ= IG9jY3VycmVuY2U= aXRjaGluZw== IGZpY3Rpb25hbA== IGNydXNo IEVB Y29k bWl4 IFRyaXBsZQ== IHJldHJpZXZl IHN0aW11bHVz IHBzeWNoaWF0 IERvb3I= IGhvbW9zZXh1YWxpdHk= IGVsZW1lbnRhcnk= IGNlbGx1bGFy aWRpYW4= IExhdW4= IGludHJpZ3Vpbmc= IGZvYW0= IEJhc3M= aWRp aXRzdQ== IGFzc3VyZQ== IGNvbmdyYXQ= IGJ1c2luZXNzbWFu IEJvb3N0 Y2xvc2U= IGxpZWQ= IHNjaWVuY2Vz IE9tZWdh IEdyYXBoaWNz IDw9 c3Bva2Vu IGNvbm5lY3Rpdml0eQ== U2F0dXJkYXk= IEF2ZW5nZXJz IHRvZ2dsZQ== IGFua2xl IG5hdGlvbmFsaXN0 bW9kZWw= IFBvb2w= b3Bob2JpYQ== VmFy IE1vbnM= YXRvcmllcw== IGFnZ3Jlc3NpdmVseQ== Q2xlYXI= Rm9yZ2U= YWN0ZXJz IGhlZGdl IHBpcGVz IGJsdW50 IHNx IHJlbW90ZWx5 V2Vk YXNlcnM= IHJlZnJpZ2Vy IHRpbGVz IHJlc2N1ZWQ= IGNvbXByaXNlZA== aW5za3k= IG1hbmlm YXZhbmF1Z2g= IHByb2xpZmVy IGFsaWduZWQ= eG1s IHRyaXY= IGNvb3JkaW5hdGlvbg== IFBFUg== IFF1b3Rl MTM0 YmY= IFNhdw== IHRlcm1pbmF0aW9u IDE5MA== IGFkZGl0aW9ucw== IHRyaW8= IHByb2plY3Rpb25z IHBvc2l0aXZlbHk= IGluY2x1c2l2ZQ== IG1lbWJy MTk5MA== b2xkZXI= IHByYWN0aWNlZA== aW5rbGU= QXJjaA== IHN0YXJ0ZXJz YXJpdXM= IGludGVybWVkaWF0ZQ== IEJlbmVm IEtpbGxlcg== IGludGVydmVudGlvbnM= IEtpbA== IEZseWluZw== SW52 IHByZW1hdHVyZQ== IHBzeWNoaWF0cmlj IGluZGll IGNvbGxhcg== IFJhaW5ib3c= YWZp IGRpc3J1cHRpb24= IEZPWA== Y2FzdGluZw== IG1pc2RlbQ== Y3Jv IHdpcGU= YXJkb24= IGJhc3Q= IFRvbW15 IFJlcHJlc2VudGF0aXZl IGJlbGx5 IFBP IEJyZWl0YmFydA== MTMy IG1lc3NhZ2luZw== U2hvdWxk UmVmZXJlbmNlcw== IEdSRQ== aXN0aWNhbA== TFA= IENhdg== IENyYXp5 IGludHVpdGl2ZQ== a2VlcGluZw== IE1vc3M= IGRpc2NvbnRpbg== IE1vZHVsZQ== IHVucmVsYXRlZA== IFByYWN0aWNl IFRyYW5zcG9ydA== IHN0YXRpc3RpY2FsbHk= b3Jucw== IHNpemVk cHU= IGNhZg== IFdvcmxkcw== IFJvZGdlcnM= IEx1bg== IENvbWlj bGl2aW5n IGNhcmVk IGNsaW1iZWQ= KXs= IGNvbnNpc3RlZA== IG1lZGlldmFs Zm9saw== IGhhY2tlZA== IGRpcmU= IEhlcm1pb25l IHRlbmRlZA== Y2VhbnM= RGFuaWVs d2VudA== IGxlZ2lzbGF0b3Jz IHJlZGVz Z2FtZXM= IGdu YW1pbGlhcg== ICsr Z2d5 dGhyZWF0 IG1hZ25ldA== IHBlcmNlaXZl IHppcA== IGluZGljdG1lbnQ= IGNyaXRpcXVl Z2FyZA== IFNhZmU= IENyZWFt IGFkdmVudA== b2Jh IHZvd2Vk b3VzYW5kcw== IHNraQ== IGFib3J0aW9ucw== dWFydA== IHN0dW5uZWQ= IGFkdmFuY2luZw== IGxhY2tlZA== IFwi IHNjaGl6b3BocmVu IGVsZWdhbnQ= IGNvbmZlcmVuY2Vz IGNhbmNlbGVk IEh1ZHNvbg== IEhvcGVmdWxseQ== IHRydW1w IGZyZXF1ZW5jaWVz IG1ldGVvcg== IEp1bmlvcg== IEZsZWV0 IE1hbGNvbG0= IFRvb2xz IC4uLi4uLi4u IGhvYmJ5 IEV1cm9wZWFucw== IDE1MDA= IEludG8= IHN3YXk= IEFwcHJv IENvbXBs Q29tbXVuaXR5 IHRpZGU= IFN1bW1pdA== 5Ls= IGludGVydmFscw== IEV0aGVy IGhhYml0YXQ= IFN0ZXZlbnM= bGlzaGluZw== IERvbWFpbg== IHRyaWdnZXJz IGNoYXNpbmc= IGNoYXJt IEZsb3dlcg== aXRvcmVk IGJsZXNzaW5n IHRleHR1cmVz Rml2ZQ== IGxpcXVvcg== UlA= RklO IDE5NjI= Q0FS VW5rbm93bg== IHJlc2ls IExpbHk= IGFidW5kYW5jZQ== IHByZWRpY3RhYmxl cmFy IGJ1bGxzaGl0 bGVlbg== Y2hldA== TW9y TXVjaA== 5Lk= IGVtcGhhc2l6ZWQ= IGNydXN0 IHByaW1pdGl2ZQ== IGVuam95YWJsZQ== IFBpY3R1cmVz IHRlYW1tYXRl cGxlcg== IFRvbA== IEthbmU= IHN1bW1vbmVk dGh5 cmFtYQ== IEhvbmRh IHJlYWxpemluZw== IHF1aWNrZXI= IGNvbmNlbnRyYXRl Y2xlYXI= IDIxMA== IEVyZG9nYW4= YXJpcw== IHJlc3BvbmRz IEJJ IGVsaWdpYmlsaXR5 IHB1c2hlcw== IElkYWhv IGFnZ3Jhdg== IHJ1aW5z dXJhdGlvbnM= IGJhbnM= IGFuYXQ= c2hhcmU= IGdyaW5k aGlu dW1lbg== IHV0aWxpdGllcw== IFlhbmtlZXM= IGRhdGFiYXNlcw== IERE IGRpc3BsYWNlZA== IGRlcGVuZGVuY2llcw== IHN0aW11bGF0aW9u aHVu aG91c2Vz IFByZXR0eQ== IFJhdmVucw== IFRPREFZ IGFzc29jaWF0ZXM= IHRoZXJhcGU= Y2xlZA== IGRlZXI= IHJlcGFpcnM= cmVudGljZQ== IHJlY2VwdG9ycw== IHJlbWVk IENl IG1hcnJpYWdlcw== IGJhbGxvdHM= IFNvbGRpZXI= IGhpbGFyaW91cw== b3Bs MTM4 IGluaGVyZW50bHk= IGlnbm9yYW50 IGJvdW5jZQ== IEVhc3Rlcg== UkVMQVRFRA== IEN1cnJlbmN5 RVY= 44Oe IExlYWQ= IGRlY2Vhc2Vk QnJpZW4= IE11c2s= SlM= IG1lcmdl aGVhcnRlZA== Y3JlYXQ= bWl0dA== bXVuZA== IOKAiw== IEJhZw== IHByb2plY3Rpb24= IGphdmE= IFN0YW5kYXJkcw== IExlb25hcmQ= IGNvY29udXQ= IFBvcHVsYXRpb24= IHRyYWplY3Q= IGltcGx5 IGN1cmlvc2l0eQ== IERC IEZyZXNo IFBvcg== IGhlYXZpZXI= bmV5cw== Z29tZXJ5 IGRlc2VydmVk IHBocmFzZXM= IEdD IHllYXN0 ZGVzYw== RGVhdGg= IHJlYm9vdA== IG1ldGFkYXRh SUNBTA== IHJlcGF5 IEluZGVwZW5kZW5jZQ== IHN1YnVyYmFu aWNhbHM= IGF0b3A= IGFsbG9jYXRpb24= Z2VuZXJhdGlvbg== IEdyYW0= IG1vaXN0dXJl IHBpbmU= IExpYmVyYWxz IGFpZGVz IHVuZGVyZXN0 IEJlcnJ5 IGNlcmVtb24= Mzcw YXN0cm91cw== IFBpcmF0ZXM= IHRlbnNl IEluZHVzdHJpZXM= IEFwcGVhbHM= IE5lYXI= IOijj+c= IGxvdmVycw== IENBUA== IENyYXc= IGdpYW50cw== IGVmZmljYWN5 RWxlbWVudA== IEJlaGF2aW9y IFRveW90YQ== IGludGVzdA== UHJpdg== QUk= IG1hbmV1dmVy IHBlcmZlY3Rpb24= IGJhbmc= cGFwZXI= cmlsbA== R2Vvcmdl Ym9yZGVy aW50ZXJz IFNldGg= IGNsdWVz IExldmk= IFJldmVudWU= MTQ3 IHZhcG9y IGZvcnR1bmF0ZQ== IHRocmVhdGVucw== IHZldA== IGRlcGVuZGVuY3k= ZXJzZWQ= YXJ0aWNsZQ== IEJsaXp6YXJk IGNobG9y IG1pbnVz IEJpbGxz IGNyeXB0b2N1cnJlbmN5 IG1ldGFib2xpc20= dGVyaW5n IHBlc3RpYw== c3RlcHM= IFRyZWFzdXJl cmFjdGVk IENvbnN0YW50 IHRlbXA= MTM5 IERldGVjdGl2ZQ== dXJhbGx5 IHJlY292ZXJpbmc= IGNvcnRleA== IDE0NA== Y2xvc2Vk IHByZWp1ZGljZQ== YXVudGVk IHN0b3Jtcw== IE5PVw== IG1hY2hpbmVyeQ== QWRkcmVzcw== IGNvbXBlbGxlZA== Mjcw IGRlc3BhaXI= YmFuZQ== IHZlZ2V0YWJsZQ== IGJlZHM= TGVhcm4= IGNvbG9yZnVs IHNwaWtl IG1hcmdpbnM= IHN5bXBhdGh5 IHdvcmtzaG9w IENCQw== U2F0 IGJ1cm5z IEdlbmRlcg== IDEyOQ== IENhYmxl IGRlYnRz IFRoZXJlc2E= IHJlZmxlY3Rpbmc= IGFpcnN0 IHJpbQ== cmFtaWQ= IHdlYWtuZXNzZXM= V3JpdA== b2dnbGU= dGk= IENoYXJnZQ== IHdlaWdoZWQ= ICgu IGxhdWdodGVy IHJvdXRlcg== IERlbW9jcmFjeQ== RGVhcg== IGhhc2h0 IGR5 IGhpbnRz cnVubmluZw== IGZpbmlzaGVz YXJ1cw== TWFzcw== cmVzdWx0 YXNjdXM= IHZpbnRhZ2U= IGNvbnF1 IHdpbGRseQ== YWNpc3Q= IGxpbmd1 IHByb3RhZ29uaXN0 c3Ryb20= dGVlbnRo IFNvbG8= bWFj ZmlsbGVk IHJlbm93bg== aXRpdmVz IG1vdGl2ZQ== IEFudGFy IE1hbm4= IEFkanVzdA== IHJvY2tldHM= IHRyb3VibGluZw== ZWk= IG9yZ2FuaXNtcw== YXNzaXM= Q2hyaXN0aWFu IDE0NQ== IEhhc3M= IHN3YWxs IHdheA== IFN1cnZpdmFs VlM= IE11cmQ= dmQ= c3RhbmRhcmQ= IGRyYWdvbnM= IGFjY2VsZXJhdGlvbg== cmF0aW9uYWw= ZmluYWw= IHBhaXJlZA== IEV0aGVyZXVt IGludGVyZmFjZXM= IHJlc2VudA== IGFydGlmYWN0cw== xas= YXJlbA== IGNvbXBldGl0b3I= IE5pY2hvbGFz IFN1cmZhY2U= Y3Bw IFRvdA== IGVjb25vbWljYWxseQ== IG9yZ2FuaXNlZA== IGVuZm9yY2Vk aW5obw== IHZhcmlldGllcw== IGFiZG9t IEJhaWxleQ== aWRhdg== IFNhbHY= cGFpZA== IGFsdGl0dWRl ZXNzZXJ0 IEd1dGVuYmVyZw== YXJlYQ== b3BvdWxvcw== IHByb2Zlc3NvcnM= aWdncw== IEZhdGU= aGV5 IDMwMDA= RGlzdA== IHR3aW5z Y2lsbA== IE1hcHM= IHRyYXBz IHdlZWQ= IEtpc3M= IHlvZ2E= IHJlY2lwaWVudHM= IFdlc3RtaW5zdGVy IHBvb2xz IFdhbG1hcnQ= MTg4 IFNjaG9vbHM= YXR0YWNr IEFSTQ== cGFyYWdyYXBo V2FybmluZw== amw= IHNlbGZpc2g= YW5jaGV6 IEhlaWdodHM= RnJl IFNvcGg= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t dG1s MzMz IHJhaWRz IHNhdGVsbGl0ZXM= S0VZ IGxhc3Rz 0YI= SW5z IERhbWU= IHVucHJlZGljdA== Ly8v Z2hhaQ== IGFydGlsbGVyeQ== IGNydWlzZQ== IGdlbA== IENhYmluZXQ= IGJsb3dz IEVzcA== IHByb3hpbWl0eQ== b3RoZQ== IFNraWxscw== IFVwcGVy b2Jv IE5EUA== IGVuam95cw== IHJlcGVhdGluZw== IENvbnN0cnVjdGlvbg== IFF1ZXN0aW9ucw== SGlsbGFyeQ== IHVpbnQ= IHByb2Nlc3NvcnM= IEdpYnNvbg== IE11bHRpcGxl cWE= IEJvbQ== IE1pbGVz dmVudGlvbmFs IGh1cnRz c2tpbg== IEFJRFM= IGFkdmlzZXJz IFJvb3Q= IG1ldGhvZG9sb2d5 IERhbGU= IGRldG9u IEtub3dsZWRnZQ== c2VxdWVudGx5 IDEyMQ== IGNvbm5lY3Rz Q3k= IERhbmdlcg== IGNvbnRyaWJ1dG9ycw== IEJlbnQ= IGJyYXNz IEd1bnM= aW50bw== IEZvcnR1bmU= IGJyb2tlcg== YmFsYW5jZQ== IGxlbmd0aHM= IHZpYw== IGF2ZXJhZ2luZw== IGFwcHJvcHJpYXRlbHk= IENhbWVyYQ== IHNhbmR3aWNo IENEQw== IGNvb3JkaW5hdGU= IG5hdmln IGdvb2RuZXNz bGFpbQ== IGJyYWtl IGV4dHJlbWlzdA== IFdha2U= IE1lbmQ= IFRpbnk= IENPTA== IFJG IER1YWw= IFdpbmU= Q2FzZQ== IHJlZmluZWQ= IGxhbXA= TGVhZA== IGJhcHQ= IENhcmI= IFNhZGQ= IE1pbm5lYXBvbGlz UERG RWFybHk= IEhpZGRlbg== SXRz IFRJTUU= IHBhcA== IGNvbW1pc3Npb25lZA== IEZldw== IENvbHRz IEJyZW4= IGJvdGhlcmVk IGxpa2V3aXNl RXhwZXI= IFNjaHc= Y3J5 bm4= IE1pdGNo aW1vbg== TUc= Ym0= VU1Q cmF5cw== IHJlZ2lzdHJ5 IDI3MA== YWNoaW5l cmVsbGE= YW50aW5n MDAwMDA= IHJ1aW5lZA== c3BvdA== IHRh IG1heGltaXpl IGluY29udmVu RGVhZA== SHVtYW4= RW5hYmxlZA== IE1hcmll IGNoaWxs IFBhcmFkaXNl IHN0YXJyaW5n IExhdGlubw== IFByb3RvY29s IEVWRVI= IHN1cHBsaWVycw== bWVzc2FnZQ== IEJyb2Nr IHNlcnVt 4paI4paI4paI4paI IGVuY29tcA== IGFtYml0aW9u dWVzZQ== IGFycm93cw== QW5kcmV3 IGFudGVubmE= IDE5NjE= IEJhcms= IGJvb2w= 44Kq IFN0b3JhZ2U= IHJhaWx3YXk= IHRvdWdoZXI= IENhZA== IHdhc2hpbmc= UHk= J10= ZW1iZWQ= IE1lbXBoaXM= YWNrbGU= IGZhbW91c2x5 IEZvcnR1bmF0ZWx5 b3ZpZXM= IG1pbmRzZXQ= IHNuZWFr IERo UkFX IFNpbXBzb24= IGxpdmVzdA== IGxhbmRtYXJr IGNlbWVudA== TG93 IHRocmlsbGVk IENvdXJzZQ== aW5lbA== IGNodWNr aWRhdGU= Z2xvYmFs IHdoaXQ= IO+/vQ== YWRheXM= c2tp IFNW IHZpcnVzZXM= MzA2 IFJlc3BvbnM= IHRoZWF0ZXJz IEJyYW5jaA== IEdlbmV2YQ== IE1L IHVuYmVsaWV2 IGNvbW11bmlzdA== T3JpZ2luYWw= IFJlY2VpdmVk IFRyYW5zZmVy IEFyZw== SW5wdXQ= IFN0cmF0ZWd5 IHBhbGFjZQ== dGhlbmluZw== RHJp IHNlbnRlbmNpbmc= dW1ibmFpbA== IHBpbnM= cmVjeQ== IHNpYmxpbmdz R2V0dGluZw== IEJV IE5vcnRod2VzdA== IHByb2xvbmdlZA== IFNha3VyYQ== Q29tYg== IEJvdXI= IGluYWRlcXVhdGU= IEthc2g= IHVzZXJuYW1l IEltcHJvdmU= IGJhdHRsaW5n IE1BQw== IGN1cnJpY3VsdW0= IHNvZGE= IENhbm5vbg== IHNlbnNpYmxl c3BvbnM= RGVjZW1iZXI= IHdpY2tlZA== IFBlbmd1 IGRpY3RhdG9ycw== IEhlYXJ0cw== b2d5bg== IHNpbWlsYXJpdGllcw== IFN0YXRz IGhvbGxvdw== aXRhdGlvbnM= Ijpb IGhvdmVy IExpc3Rlbg== c2No U3VuZA== IGNhZA== IFBhcmtz IGx1cg== IGh5cGU= IExlbQ== TkFNRQ== aXN1cmU= RnJpZGF5 IHNob290cw== IGNsb3Nlcw== IGRi IFJpZGdl IERpZmZlcmVudA== IHJlcGxpZXM= IEJyb2Fkd2F5 b3BlcnM= IGludG9sZXI= IFpldXM= YWtlc3Bl IHByb3ByaWV0YXJ5 IHJlcXVlc3Rpbmc= IGNvbnRyb2xsZXJz IE1JTg== aW1lZGlh YmVjY2E= IGV4cGFucw== IG9pbHM= Qm90 IENoYW5k IHByaW50ZXI= IHRvcHBlZA== IFBPTA== IEVhcmxpZXI= U29jaWFs YXZpbg== IGRlY3JlYXNlcw== IFNlYg== IHNwZWNpZmljYXRpb25z IEJsYXN0 IEt1cnQ= IGZyZWVs QnJvd24= IGRpbGln cm9l IFByb2JsZW0= IFF1YWQ= IGRlY2VudHJhbA== IFZlY3Rvcg== YW51dA== IHBsdWdpbnM= IEdyZWdvcnk= IGZ1Y2tlZA== ZWxpbmVz IEFtYmFzc2Fkb3I= dGFrZQ== IGNsZWFucw== b25neWFuZw== QW5vbnltb3Vz c3Rybw== In0= YWxpbmU= IE9kZA== IEV1Zw== MjE2 IGJvaWw= IFBvd2Vycw== IG51cnNlcw== T2J2aW91c2x5 IFRlY2huaWNhbA== IGV4Y2VlZGVk T1JT IGV4dHJlbWlzdHM= IHRyYWNlcw== ZXhwbA== IGNvbXI= IFNhY2g= KS8= IG1hc2tz IHNjaQ== Qm9u IHJlZ3Jlc3Npb24= d2VnaWFu IGFkdmlzb3I= aXR1cmVz IFZv ZXhhbXBsZQ== IEluc3RydWN0 IHNpZWdl IHJlZHVjdGlvbnM= cHRy IHN0YXR1dG9yeQ== IHJlbW92ZXM= IHB1Y2s= cmVkaXRz IGJlZQ== IHNhbGFk IHByb21vdGlvbnM= IEpvc2h1YQ== d2l0aHN0YW5kaW5n RVRI IENoYQ== aW11cw== IGV4cGVuZGl0dXJl YXVudGluZw== IGRlbGlnaHRlZA== IDE1NQ== YmVo IGNhcnBldA== IFNwYXJ0 IGp1bmdsZQ== bGlzdHM= IGJ1bGx5aW5n IE5vYmVs IEdsZW4= IHJlZmVyZW5jZWQ= IGludHJvZHVjZXM= c2Vpbg== IGNob3BwZWQ= Z2xhc3M= IFdyZXN0 IG5ldXRyYWxpdHk= IOKZ IGludmVzdGlnYXRvcg== IHNoZWx2ZXM= IHVuY29uc3RpdHV0aW9uYWw= IHJlcHJvZHVjdGlvbg== IG1lcmNoYW50 bWlh IG1ldHJpY3M= IGV4cGxvc2l2ZXM= IFNvbmlh IGJvZGlseQ== IHRoaWNrbmVzcw== IHByZWRvbWluYW50bHk= IEFiaWxpdHk= IG1vbml0b3JlZA== SUNI IF0u IE1hcnRpbmV6 IHZpc2liaWxpdHk= IHF1ZXJpZXM= IGdlbm9jaWRl IFdhcmZhcmU= UXVlcnk= IHN0dWRpb3M= IGVtYnJ5 IGNvcnJpZG9y IGNsZWFuZWQ= Y29tcGxldGU= IE1I IGVucm9sbG1lbnQ= SU5HUw== IGltcGFjdGVk IGRpc2FzdHJvdXM= IFl1bg== IENsYWlyZQ== IEJhc2ljYWxseQ== eXQ= dXN0ZXJpdHk= IGluZGlyZWN0bHk= d2lr IGRvZA== IENhcnI= IGFtcA== IHByb2hpYml0 IEluaXRpYWw= IFJk aWpp IGVkdWNhdGU= Y29ybg== aW90dA== IEJlYXV0eQ== IGRldGVjdGl2ZQ== IENvbm4= c2luY2U= IHN0YWdnZXI= IG9iZXNl IGJyZWU= b2xvZ2lj aXNzZQ== d2Fsa2Vy IGJsYWRlcw== IGxhd2Z1bA== ZnVuYw== IEJlaGluZA== IGFwcGV0aXRl ICgq IHRlbm5pcw== IG9mZnNwcmluZw== IGpldHM= IHN0cnVjdHVyZWQ= IGFmb3JlbWVudGlvbmVk Tm92 IHNjYWxpbmc= ZmlsbA== IHN0ZXc= IGN1cmI= IFN0ZXBoYW4= ZWRJbg== U0Y= b2JpYw== 6a2U b3Vn IE1N IGdlbmV0aWNhbGx5 b3Bleg== MTM2 IHVtYg== YW5jZXJz IGNvaG9ydA== IG1lcmNoYW5kaXNl IGltcG9zaW5n IExlZ2lzbGF0dXJl IEFyY2hpdmU= aXZpYQ== IE5hdmFs IG9mZmVuY2Vz IG1pcmFjbGU= IHNuYXBwZWQ= IGZvZXM= IGV4dGVuc2l2ZWx5 IFJhZg== IGNhdGVy ZWRpZW5jZQ== S2l0 IEJpbg== IHJlY29tbWVuZHM= IENpdGllcw== IHJpZ2lk IFJFQUQ= IE5vYmxl IFRpYW4= IGNlcnRpZmljYXRlcw== YW50aXM= b2lsZXI= IEJ1ZGRoaXN0 ZGlk IHN1cnZleWVk IGRvd253YXJk IHByaW50cw== IE1vdGlvbg== cm9uaWNz IFNhbnM= b3NzaWJseQ== dWN0aW9ucw== IGNvbG9uaWVz IERhbmlzaA== dW5pdA== IHNwb2ls IGFkdmlzb3J5 YmVycmllcw== UGxhbg== IHNwZWNpZmljYXRpb24= b3BoZXJz IFJlc291cmNl IHNoaXJ0cw== cHJpc2luZ2x5 Y29tbXVuaWNhdGlvbnM= IHRyaXZpYWw= IG1lbnRpb25pbmc= aXNleHVhbA== IHN1cHBsZW1lbnRz IHN1cGVydmlzaW9u QlA= dm9y IHdpdA== IGNvb2xkb3du IHBsYWludGlmZg== IFJldmlld3M= IFNyaQ== IE1pbnQ= IFN1Z2Fy IGFmdGVyd2FyZA== IFByaWVzdA== IEludmVzdG1lbnQ= b2dlbmU= IFRha2luZw== IHN0cmV0Y2hpbmc= IGluZmxhbW1hdGlvbg== IFRlaHJhbg== IGxpbmluZw== IGZyZWV6aW5n IEVudGl0eQ== IGluc3BpcmluZw== c3BlY2lhbA== cHJpY2U= IHN1ZQ== IFBvcnRlcg== b3VuZ2U= RVRB IERlcmVr IEx1aXM= dW8= eW1waA== IGV4dGVyaW9y aWhpbA== IEFzaGxleQ== aW5hdG9y IG51dHJpZW50cw== IFRocm9uZXM= IGZpbmFuY2Vz IEluc3BlY3Q= IHNwZWNpYWxseQ== IFJlcXVpcmVk IFBUUw== IFZpb2xlbmNl b2ludGVk c2hvdHM= IGV4Y2VycHQ= Y29vbg== SU5T IEdyaQ== IHJlY29nbmlzZWQ= V2Vlaw== WW91bmc= IHZvbQ== aXNsZQ== IEN1cnJ5 IEJ1ZGRo IG5vdGVib29r IGR1cmFibGU= Lz8= IEdhZA== IFB1cHA= IGZvcmdpdmU= cGFyaw== IHBlcnNvbmFsaXRpZXM= YW5hbHlzaXM= Y2xhbWF0aW9u IGVsZXZhdG9y IHdhcmVob3VzZQ== IFJvbGU= dW5u IGlsbHVzdHJhdGlvbg== IFNjYW4= IGF0bW9zcGhlcmlj SW1wb3J0 QU5D cmljdGVk ZnU= MDEw IGFyY2hl IHJld2FyZGVk YWtlc3BlYXJl IGludGVybmFsbHk= IFJCSQ== YWxrZXI= IGVsZXBoYW50 b3dpdHo= IFBpenph IGJpcGFydGlzYW4= w6lz IHNsb3dlZA== IFN0YXJr IG92ZXJyaWRl T1VT IDMyMA== dW5kcmVkcw== IERlY2s= IENlbnN1cw== YmVl MTQ2 b3Rvcg== IGlw IHVi b2NhdGlvbnM= IEJ1dHRvbg== cmljZQ== IGNyaXBw ZmZm IG9yaWdpbmF0ZWQ= IG92ZXJ3aGVsbWVk YXBwYQ== IGZvcmVtb3N0 4oCR IExFRw== cmVsZWFzZQ== ZWF0dXJlZA== YXRjaGVz IHJlcHM= IGxlbmRpbmc= IFJlZmVyZW5jZQ== IENsaWVudA== MTY1 dmVudGg= Q29tcGxldGU= IFBhdHJvbA== IHN3b3Ju Y2Ft IHNodXR0bGU= IFJhbHBo IGhvbWV0b3du LSw= b25hbA== IEJQ 5Y8= IHBlcnN1YWRl IEFsZXhhbmQ= IGNvbWJpbmVz IHZpdmlk IExhZw== IGVuY29kaW5n IHNhbHZhdGlvbg== d2Vu IFJlY292ZXJ5 aXlh VW5pdmVyc2l0eQ== IEJpZGVu IGJ1ZGdldHM= IFRleGFucw== Zml0cw== IGhvbm9yZWQ= IHB5dGhvbg== VEQ= IyMj Y2xvbmU= IGJsaW5r IExpcXVpZA== IHVuZW1wbG95ZWQ= IGNsYXNoZXM= IENvdW5zZWw= IGRpcmVjdGluZw== IHB1bmN0 IEZhbGNvbnM= IHNoYXJr IERhbWFzY3Vz IGplYW5z IGVtYmFyaw== IHNlaXpl IHVwd2FyZHM= Mjgw IEV6 IEFueXRoaW5n IGV4b3RpYw== bG93ZXI= IENyZWF0b3I= IFVt IHN1YnVyYnM= YmVyZ2Vy IFdlbmQ= IG1pbnQ= IFhY IERybw== IHN1ZmZlcnM= IGhlcmI= dHJlZQ== IGZyYWdpbGU= IGZsb29kZWQ= IEFsY29ob2w= b2xlYW4= bnlkZXI= IEtP RnJhbQ== IDEzNg== IG93ZWQ= IE1lbGVl IEhhc2g= IHdoaXNr IHN1ZG8= cnI= UXVpY2s= YXBwcm8= IGlp IEV4YW1wbGVz aGVl IHByb21vdGVz cGVyYXR1cmU= a2Fy IEhvbm9y IHNvZGl1bQ== IExpZg== cm9zc28= aW50ZW5kZW50 IGNvcnJlc3BvbmRlbnQ= Rm91bmQ= c2VjcmV0 IGlkZW50aWZpZXM= YWduZQ== IGxvdQ== IFBQ IGNvaW5jaWRlbmNl bW92ZQ== IG1pbGl0aWE= IGluZmlsdHI= IFByaW1hcnk= IHBpdGNoaW5n IEli IEdPT0Q= 44K4 IFdpemFyZHM= aXJhbA== IFZlbnVz UlI= IOKAlQ== IENhc2V5 IHNhZGx5 IGFkbWlyZQ== IGVtYmFycmFzc2Vk Y2I= TWVs IHR1YmVz IGJlYXV0aWZ1bGx5 IFF1ZWVuc2xhbmQ= QmVsb3c= cmV6 cXVldA== cGxlYXNhbnQ= IMKr Q2FtcA== IGRlY2lzaXZl MTk5OA== IExhbWI= dXR0b24= aG4= IEphZ3U= YXVuZGVy IENvcmQ= IGNsZXJr IGNhZmZl IHdpcGVk IHJlaW0= IE1vdW50YWlucw== IGltcHJpc29uZWQ= IGRldmVsb3Bz IFByYQ== IG1vZGVsaW5n QW55b25l YW5jZWw= IFNpdA== IHNoaWVsZHM= IGxhd24= IGNhcmRpb3Zhc2N1bGFy IGRlbW9uc3RyYXRpbmc= IHBhcnNl IElzcmFlbGlz IGV1cm9z MTQz IGdsb3Jpb3Vz aW5za2k= ZWNk IGNvbmRpdGlvbmluZw== IGhlbHBsZXNz IG1pY3Jvc2M= IEhhcmJvcg== IHN0YWtlcw== IDI2MA== IHVuZXF1 IEZsb3lk IGRhbXA= IGFwcGFyYXR1cw== IExhd3M= IGNvdW50ZXJz IGluZHVjZQ== YXRhYmxl IEFobWVk IHNsYW0= Tm92ZW1iZXI= IHBlcnNpc3Q= IGltbWluZW50 w6Fu IHNocmVk IHBoYXNlcw== IEVkbW9udG9u IEFybXN0cm9uZw== IE1lZXQ= IEtpdHR5 0YA= Y2lyYw== IEFkdWx0 IGFyb3Nl IFhlbg== RGFu Z293 IHN1cGVyZg== IEFkbWly IGVuZHVyZQ== IGtleXdvcmQ= eXJ1cw== IHlhcm4= IHBhdGh3YXk= IEhvcGtpbnM= bWlkdA== IGNlbnNvcnNoaXA= ZGVwZW5kZW50 IGluc3RydWN0b3I= U291cmNlcw== IHRvZQ== IGJhbGxvb24= Tm9i IHN3ZWFy IENhc3Rybw== IGdsb3Nz IEthdmFuYXVnaA== IHJlbWFya2FibHk= UGhvdG9z IE5vbQ== IFNvdXRoZWFzdA== eWVycw== IHZhbGlkYXRpb24= IGNhbm5vbg== IFZpY3Rvcnk= IFBpZXJyZQ== IGNhdXRpb3Vz QXVkaW8= IGZldGNo IEdpZnQ= IEh5cA== IHJlbWVkeQ== WkU= IHNjZW50 IGJlYXJk IFJ1dA== LSI= IHBhdGVudHM= SHk= IHVuanVzdA== IHBvdGF0bw== IGZvcnRoY29taW5n IGNoZWY= IFJpZnQ= YWZmZQ== IFJPTQ== IExhdW5jaA== IHBhZHM= IE5lbw== IG9uc2V0 IHNxdWVlemU= c2FmZQ== IHByZWZpeA== IFRN IE5lYXJseQ== IENsaW5pY2Fs IE1lbnRhbA== b3RpYXRpb24= IFVuaWM= YW50cnk= IENpcg== IGVwaXQ= w6Y= IGV4dHJhY3RlZA== dmVyc2VseQ== cmlhZA== IHN0cmFpbnM= IHRvcHM= IHBvZW0= IFJhbmR5 IE1hcGxl VEhFUg== dXBpdGVy IFNTRA== muk= IHVuY29u cGVyaW5n IHNsZXB0 aW5lcnM= IHVuZGVyd2F0ZXI= IEV2aWRlbmNl Z29uZQ== MjA1 IGhpc3RvcmlhbnM= IHN5bnRoZXNpcw== IGZyb2c= YmFza2V0YmFsbA== IHZpYnJhbnQ= IHN1Ym9yZA== IDM2NQ== IERpYWw= IGNvb3BlcmF0ZQ== SEFIQQ== IGdyZWV0ZWQ= MTU4 IGpheno= IGludG94 IFdhbGtpbmc= IHN1cGVydmlzb3I= IEZ1c2lvbg== IE1lcmNlZGVz c2VuZA== SGFt c2Q= bmw= IHRvdXJz IEZJRkE= IGN1bHA= Z2Q= MzA0 IHBsZWFz IGlsbHVzdHJhdGVz IENvbG9tYmlh IGhpZ2hsaWdodGluZw== IFN1bW1hcnk= IGV4cG9zaW5n IERydQ== IGlyb255 cml0aW9uYWw= IENhcnJvbGw= IEVsbGlz UGljdA== IFJhcHQ= IGFkYXB0ZXI= IHVubQ== IGNvcnBzZQ== IGNlbGVicml0aWVz RGVu YXR1bQ== IEFwb2NhbHlwc2U= IFdhZw== bGluaW5n IGhvcm1vbmVz UnVi IFhp IFZhdWx0cw== MjA4 YWxreXJpZQ== aW5vc2F1cg== IGZlZWRz dml0eQ== IGRlZmVhdGluZw== V2FpdA== IGVtcGhhc2l6ZQ== IFN0ZWVsZXJz eXJpbnRo bGV5cw== IFdoZW5ldmVy Q3VycmVudGx5 IENsb2Nr IGNvbGxlY3RpdmVseQ== YW55b24= IEpQ IG1lbnRhbGl0eQ== IGRvd25sb2Fkcw== IHN1cnJvdW5kaW5ncw== IEJhcm5lcw== IGZsYWdzaGlw IGluZGljYXRvcnM= IGdyYXBw SmFudWFyeQ== IEVsZW1lbnRhbA== IEF0aGVuYQ== aWJhbA== IHNpZ2h0cw== IGNhcGl0YQ== IFRyZWF0eQ== IHZvaWNlZA== IEdheg== bGV0dGU= IHlh IGV4cGlyZWQ= TGVnZW5k SG90 bmF0dXJl IHVuc3RhYmxl IDI4MA== w7o= Q29tbWVudA== QUxF IHF1ZXN0cw== IGhhbmRsZXI= bmlz IHZlcnNhdGlsZQ== IGNvbmNlYWw= ZW5nZWFuY2U= IEludGVyYWN0aXZl IG9ic2Vzc2Vk IERvZ3M= IGNyYWNrZWQ= U291bmQ= c3Y= IER5bGFu cm9hZHM= Zng= IENhdGhvbGljcw== IEhhZw== IHNsYW1tZWQ= IGdsb3dpbmc= c2FsZQ== IHRpc3N1ZXM= IENoaQ== bmVl IGNoZXI= c2lj dXJyZWN0aW9u IGJhY29u dWxhdG9yeQ== KS4i IGlycmVndWxhcg== Rk9STQ== YXNzZWQ= IGludGVudGlvbmFs IGNvbXBlbnNhdGU= IFNwZWFraW5n IFNldHM= MTUz IGNvbnZlbnRpb25z YmFuZHM= ZW1hZGU= IGVjYw== IFdpbnN0b24= IEFzc2Fzc2lu IEJlbGdpYW4= IGRlcGVuZGVuY2U= IG5pY2hl IGJhcms= IEpheno= IGRpc2FkdmFudGFnZQ== IGdhc29saW5l IDE2NQ== 55qE ZXNzYQ== bW9kdWxl YW5ndWxhcg== T1k= IFRyZWF0bWVudA== aXRhcw== b2xhdGlvbg== IEFybm9sZA== IGZldWQ= IE5lc3Q= IHRoZWF0cmU= ZXdhdGVy IG1pbm9ycw== b2xpY3k= IEhhdmVu ZGl2aXNpb24= IHRydW5r RmFy IFB1bGw= IGNhcHR1cmluZw== IDE4MDA= IFRlZW4= IGV4ZW1wbA== IGNsaW5pY3M= IEJ1cmc= IHN1YnN0aXQ= IHBheWxvYWQ= IExhdg== IFRyb3k= IFdpdG5lc3M= IGZyYWdtZW50cw== IHBhc3N3b3Jkcw== IGdvc3BlbA== IEdpbg== IHRlbmFudHM= b2xpdGg= U2l4 UHJldmlvdXM= IEFnZXM= IERhcndpbg== IGJsYXQ= IGVtcGF0aHk= c21pdGg= YmFn IEVjaG8= IENhbWI= IE1hZGQ= IEJvbw== IHJlZGU= IEJ1cm5pbmc= IHNtb290aGx5 IEFkcmlhbg== IFZhbXBpcmU= IE1vbnN0ZXJz c3RlYW0= U3R5bGU= TWE= cmVh IER3YXI= YWx5c3Q= dXJzb3I= IGVsaW1pbmF0aW9u IGNyeXB0bw== Y2h0 IEV0ZXJuYWw= 4oCmXQ== IFNvcmNl SWxs TkVS IHVo Q29uY2x1c2lvbg== d2FnZQ== IHJlc3Bpcg== IHJlbWluaXM= aGV0aWNhbA== IGd5 IHV0aWxpemVk aWNpZGFs IDE5MDA= IGh1bnRlcnM= IFN3YW4= IFJlYWN0 IHZpc2l0b3I= IFRoYW5rc2dpdmluZw== MzA4 UG9zdHM= IGhpcHM= MTk5Nw== b21lcnM= IGtub2NraW5n IFZlaGljbGU= IHRpbA== IDEzOA== IG1p IEludmVzdGlnYXRpb24= IEtlbnlh IGNhc2lubw== IG1vdGl2ZXM= IHJlZ2Fpbg== cmV4 IHdlZWtlbmRz IHN0YWJiZWQ= Ym9ybw== IGV4cGxvaXRlZA== IEhBVkU= IFRlbGV2aXNpb24= Y29jaw== IHByZXBhcmF0aW9ucw== IGVuZGVhdg== IFJlbW90ZQ== IE1ha2Vy IFByb2R1 IEV2YW4= IGluZm9ybWF0aW9uYWw= IExvdWlzdmlsbGU= MTU0 IERyZWFtcw== IHBsb3Rz IFJ1bm5lcg== IGh1cnRpbmc= IGFjYWRlbXk= IE1vbnRnb21lcnk= bm0= IExhbmM= IEFseg== MjEw ZWxvbmc= IHJldGFpbGVy IGFyaXNpbmc= IHJlYmVsbGlvbg== IGJsb25kZQ== cGxheWVk IGluc3RydW1lbnRhbA== Q3Jvc3M= IHJldGVudGlvbg== IHRoZXJhcGV1dGlj IHNlYXM= IGluZmFudHJ5 IENsaW50 IHByb21wdGluZw== IGJpdGNo IHN0ZW1z IEtyYQ== IHRoZXNpcw== IEJvZw== cnVlZA== IGtpbmdz IGNsYXk= aWZpY2VudA== IFlFUw== IFRoaW5n IEN1YnM= dmV5YXJk ZWxzaA== aW5hcmlseQ== IEV5 IFJvbGxpbmc= IGV2b2x2aW5n SW5kaWE= IHJlY29nbml6ZXM= IGdyYWR1YXRpb24= aXNlcnM= IGZlcnRpbGl0eQ== IE1pbGFu Q29tbWFuZA== IGJveGluZw== IDE5NDM= IGdsdXRlbg== IEVtaXI= IGlkb2w= IGNvbmNlaXZlZA== IENyZWF0aW9u TWVyaXQ= dWRkeQ== dXNzaW9ucw== IExpZXV0ZW5hbnQ= aWV0YWw= IHVuY2hhbmdlZA== IFNjYWxl IENyaW1lYQ== YmFsbHM= YXRvcmlhbA== IGRlcHRocw== IGVtcGlyaWNhbA== IHRyYW5zbQ== IHVuc2FmZQ== bWlzc2libGU= Y29tZm9ydA== MTU2 IG1lY2hhbmlj MDAy bGlucw== IHNtb2tlZA== UG9z IHNsb3dpbmc= IGxhdg== VGV4YXM= IGNoZWF0aW5n IE1ldHJvcG9saXRhbg== ZXRoeWw= IGRpc2NvdmVyaW5n YXNzZQ== IHBlbmNpbA== IFB5b25neWFuZw== IGNsb3NldA== IFNoZWV0 IEVudHJ5 b3VzdGlj IG15c3Q= ZXJhdGU= YXJpYXQ= IG1pbmVyYWxz IG11c2ljaWFu IFB1bA== IE1heg== MjQ5 IHBlcm1pc3Npb25z IGl2 ZW5hcnk= aWNrZXJz IEJpbmc= aGVh ZW5hYmxl IGdyaWV2 IGFzc2VydGVk IENvbG9uZWw= IGFmZmlkYXY= d28= IHNlYXRlZA== IFJpZGU= IHBhaW50aW5ncw== IFBpeA== IDEzNw== aXNoaQ== dW1iYWk= Z290dGVu IEVhcmw= IGlubmluZw== IGNlbnN1cw== IHRyYXZlbGxlZA== IENvbnN1bHQ= MTg1 YmluZA== IHNpbXBsaWNpdHk= IG92ZXJsb29rZWQ= IEhlbHBmdWw= IG1vbmtleQ== IG92ZXJ3aGVsbWluZ2x5 Qmxvb2Q= IEZsaW50 IEphbWE= IFByZXNlbnQ= IFJhZ2U= IFRB cHRpdmU= IHR1cm5vdXQ= d2FsZA== IERvbHBoaW5z IFZQTg== IG9uaW9u IGNyYWZ0aW5n bW1h IE1lcmN1cnk= IGFycmFuZ2U= IGFsZXJ0cw== IE9U emJvbGxhaA== IGdhc2Vz IFJpY2hhcmRzb24= c2Fs bGFy IGZyb3N0 IGxvd2VyaW5n IGFjY2xhaW0= IHN0YXJ0dXBz IEdhaW4= ZXNzbWVudA== IGd1YXJkaWFu 5Lq6 IFBpZQ== IExpbmtz IG1lcml0cw== IGF3YWtl IHBhcmVudGFs IGV4Y2VlZHM= IGlkbGU= IFBpbG90 IGVCYXk= IEFjY2VwdA== aXBlZw== Q2Ft IEtvdA== IHRyYWRlcnM= b2xpdGljcw== dW5rZXI= IFBhbGU= b3Np YW5tYXI= IDE5NDc= IEZlbGw= ZXN0aWFs aXRhdGluZw== R0Y= IFNy aWZ0ZWQ= IGNvbm5lY3Rvcg== IEJvbmU= aWxsZXM= MjYw aG1h IG92ZXJsYXA= IEdpdEh1Yg== IGNsZWFuZXI= IEJhcHRpc3Q= IFdBUw== IGx1bmdz 0YE= IEJVVA== IGNpdGU= IHBpdGNoZWQ= cmVhdG1lbnQ= IHRyb3BoaWVz IE51 Mzg2 IFByaWRl IGF0dGVuZGVlcw== W10= MTc5 IHNwYXRpYWw= IHByaXplcw== IFJlbGlnaW9u IHNob3djYXNl IENhdGVnb3J5 dmlkaWE= VGFyZ2V0 UHJvcGVydHk= Pyw= IGZ1c2lvbg== cGll IFVDTEE= IHNvdW5kdHJhY2s= IHByaW5jZXNz IENhdmFs c2hvdWxk IGxpbWJz QmFja2dyb3VuZA== IGxvbmVseQ== IGNvcmVz IFRhaWw= c2hlZXQ= IDEzMg== UmE= 44Kr IEJvbHQ= IGJvb2tlZA== IGFkbWluaXN0ZXI= IGVxdWFscw== d3k= IG9ic2VydmluZw== IEJhcm9u IEFkb2Jl IHZpcmdpbg== IFNvY2lhbGlzdA== TW92ZQ== Z2hhemk= IExpbmRh MjEy IGJyZXdpbmc= IG1lcmNoYW50cw== YnVyc2U= IGRpdm9y IG1ldGFscw== IE5lcg== IHN1bXM= IEVuZW15 IGVudmlzaW9u IGdyYW50aW5n IEhvbmV5 IFNreXJpbQ== IHNvY2lv Z3JhZGVk IHNlbGVjdGl2ZQ== V0FTSElOR1RPTg== IDE5NDg= IFNpcml1cw== IEdyb3Nz YWN0aXZpdHk= IEl2YW4= IGZ1cmlvdXM= QlNE IFByZXZpb3Vz IHJlc3BvbnNpdmU= IGNoYXJpdGFibGU= IGxlYW5pbmc= IFBldw== IHZpb2xhdGVz XFxcXFxcXFw= IENvbWluZw== d2lyZQ== IHBvZXQ= IHJlc29sdXRpb25z Y29tbWFuZA== IFBvcnR1Z3Vlc2U= IG5pY2tuYW1l IGRlYWY= RmVicnVhcnk= IHJlY29nbmlzZQ== IGVudGlyZXR5 IHNlYXNvbmFs cGxhY2Vk IFRlbGVncmFwaA== IG1pY3JvcGhvbmU= b3VyaW5n IGdyYWlucw== IGdvdmVybmVk IHBvc3Rw IFdhdGVycw== aW5lbWVudA== IHVuZG9jdW1lbnRlZA== IENvbWNhc3Q= IGZveA== IGFzc2F1bHRz cmVvbg== bWFueQ== IEplbmtpbnM= IEFueXdheQ== IGFzc2Vzc21lbnRz IGRvd25z IE1vdXNl IHN1cGVyYg== a3Q= IERvdw== IHRheGF0aW9u NDAx IHNtaWxlcw== IHVuZGVydGFrZW4= IGV4aA== IGVudGh1c2lhc3RpYw== IHR3ZW50 IGdvdmVybm1lbnRhbA== IGF1dG9ub215 IFRlY2hub2xvZ2llcw== IENoYWlu IHByZXZhbGVudA== ZmI= IG5pY290aW5l b2dyYW0= am9i IGF3YWl0aW5n IE1lbnU= IGRlcHV0aWVz a292 aXNob3Bz QnV0dG9u IFNoYW5naGFp IGRpZXNlbA== IER1Y2s= Unlhbg== IFBDcw== TkY= anVyeQ== ZW50ZQ== IGluYWNjdXJhdGU= ZWRkeQ== V2hhdGV2ZXI= IHNob3dj IE5hZA== b2R1cw== ZXRy IHBsYWludGlmZnM= IFdPUg== IEFzc2FuZ2U= IHByaXZhdA== IHByZW1pdW1z IHRhbQ== VVJM IGVsaXRlcw== IFJhbmdlcg== b3R0ZW5oYW0= IEhvZmY= IEF0aGVucw== IGRlZmluaXRl IHNpZ2hlZA== IGV2ZW5seQ== MjEx IEFtYmVy YWtpYQ== IG1haWxpbmc= IGNyYXNoaW5n IENvbmZlZGVyYXRl cnVnZ2Vk V2Fs IERlcHRocw== IGp1dmVuaWxl IHJlYWN0b3I= SW50cm9kdWN0aW9u IERlbHV4ZQ== MTk5NQ== IFNhbmNoZXo= IE1lYWQ= aXZhYmxl Oi0= IFBsYW5uaW5n IFRyYXA= cXVpbg== IFByb3RlY3Q= dmVyZWQ= SW5mb3JtYXRpb24= IGtpZG5leQ== aW5uYW1vbg== bGFz IHBvbGljaW5n IHRvbGVyYXRl IFFp IGJpYXNlZA== Rm9ydA== IEtp c2F2ZQ== IHByaXZpbGVnZWQ= IGJlYXN0cw== IEdsYXM= IENpbmVt IGNvbWViYWNr U3VuZGF5 IGV4dGluY3Rpb24= aG9wcw== IHRyYW5zbWl0 IGRvdWJsZXM= IEZsYXQ= MTY3 IGRpc3B1dGVk IGluanVzdGljZQ== Zm9v VmljdA== cm9sZXVt IEp1bGll Q29udGV4dA== IFJhcml0eQ== aXNzdWU= Q29tcG9uZW50 IGNvdW5zZWxpbmc= YW5uZQ== ZGFyaw== IG9iamVjdGlvbnM= dWlsdA== IGdhc3Q= IHBsYWM= IHVudXNlZA== 44OH IFRyaWFs IEphcw== aGVkcmFs b2Ji IHRlbXBvcmFs IFBSTw== IE5X IEFubml2ZXJzYXJ5 TGFyZ2U= IHRoZXJt IGRhdmlk IHN5c3RlbWlj IFNoaXI= bXV0 IE5lcHQ= YWRkcmVzcw== IHNjYW5uaW5n IHVuZGVyc3RhbmRhYmxl IGNhbnZhcw== Q2F0 IFpvbw== IGFuZ2Vscw== TE8= IFN0YXRlbWVudA== IFNpZw== b3ZhYmxl IEF3YXk= c2hhcmluZw== b2NyYXRz c3RhdGVk IHdlaWdoaW5n Tm9y d2lsZA== QmV5 IGFzdG9uaXNoaW5n IFJleW5vbGRz IG9wZW5lcg== IHRyYWluZXI= IHN1cmdpY2Fs cG4= IGFkanVzdGluZw== d2hlZWw= IGZyb3du ZXJ2YXRpdmU= IHN1c3BlbmQ= V2l0aGlu dGVpbg== IG9ic3RhY2xl IGxpYmVydGllcw== eW1lcw== IHVyYW5pdW0= YW5zb20= YW5vbA== dWJh IExvc3M= IGFyb3Vz IEhlbmRlcnNvbg== V293 c3Bs Y3Vy IMKt IHRoZWlycw== RGFtYWdl IGRvd25sb2FkaW5n IGRpc2Nlcm4= IFN0bw== IEZsYQ== IGhhdGg= IEFq IHVucGxlYXNhbnQ= RXVyb3BlYW4= ZXhwZW5zaXZl IHNjcmVlbnNob3Q= IFVW IGFsbGllZA== IFBlcnNpYW4= IG1vbm9wb2x5 IGF0b20= IFJlZHNraW5z Ij48 IGNhbmNlbGw= IGNpbmVtYQ== MTMx ZmFpcg== IEFsZnJlZA== IGR1Y2s= YXJncw== MjIz IElTSQ== IHNpZ25hbGluZw== aW5hcg== IGxhdWdocw== IGZvcndhcmRz IHJlY2tsZXNz IGxpc3RlbmVycw== YXRpdml0eQ== IHZhc3RseQ== bmFudA== TGVzcw== IEh1bnRpbmc= IFNjaWVudGlmaWM= SVRFRA== IGtuaWdodA== IEhUQw== dXNh dG1w IHJ1ZGU= IExlZ2VuZGFyeQ== IGFyaXNlcw== QmFk IENsYWlt cGVn IHJlYWxpdGllcw== VGhpbms= IMKw IHJvZGU= IHN0cml2ZQ== IGFuZWNk IHNob3J0cw== IGh5cG90aGVz IGNvb3JkaW5hdGVk IEdhbmRoaQ== IEZQUw== UkVE IHN1c2NlcHRpYmxl IHNocmluaw== IENoYXJ0 SGVscA== IGlvbg== ZGVlcA== cmliZXM= IEthaQ== IEN1c3RvbWVy U3VtbWFyeQ== IGNvdWdo d2lmZQ== IGxlbmQ= IHBvc2l0aW9uaW5n IGxvdHRlcnk= IENhbnlvbg== IGZhZGU= IGJyb256ZQ== IEtlbm55 IGJvYXN0cw== IEVuaGFuY2Vk cmVjb3Jk IGVtZXJnZW5jZQ== IGFraW4= IEJlcnQ= aXRvdXM= 4paR IHN0aXA= IGV4Y2hhbmdlZA== b21vcmU= YWxzaA== IHJlc2Vydm9pcg== IHN0YW5kcG9pbnQ= V00= IGluaXRpYXRl IGRlY2F5 IGJyZXdlcnk= IHRlcnJpYmx5 IG1vcnRhbA== bGV2YXJk IHJldmlz Tkk= ZWxv IGNvbmZlc3M= IE1TTkJD IHN1Ym1pc3Npb25z Q29udHJvbGxlcg== IDIwMg== IFJ1dGg= fSk7 IEF6dXJl IC4i MjA2 IE1hcmtldGluZw== IGxhdW5k aWVuY2llcw== IHJlbm93bmVk IFRyb3U= IE5HTw== YmxlbXM= IHRlcnJpZmllZA== IHdhcm5z IHBlcnQ= IHVuc3VyZQ== NDgw YWxleg== dWx0eg== IE91dHNpZGU= IHN0eWw= IFVuZGVyZ3JvdW5k IHBhbmM= IGRpY3Rpb25hcnk= IGZvZQ== cmltaW5hbA== IE5vcndlZ2lhbg== IGphaWxlZA== IG1hdGVybmFs w6ll IEx1Y3k= Y29w Q2hv IHVuc2lnbmVk IFplbGRh IEluc2lkZXI= IENvbnRpbnVlZA== IDEzMw== IE5hcnV0bw== IE1ham9yaXR5 MTY5 IFdv 44KT IHBhc3Rvcg== IGluZm9ybWFs 0L0= YW50aHJvcA== am9pbg== 44GX aXRhdGlvbmFs TlA= IFdyaXRpbmc= Zm4= IEJldmVy MTk1 IHllbGxpbmc= IGRyYXN0aWNhbGx5 IGVqZWN0 IG5ldXQ= IHRocml2ZQ== IEZyZXF1 b3V4 IHBvc3Nlc3Nlcw== IFNlbmF0b3Jz IERFUw== IFNoYWtlc3BlYXJl IEZyYW5jbw== IExC dWNoaQ== IGluY2Fybg== IGZvdW5kZXJz RnVuY3Rpb24= IGJyaWdodG5lc3M= IEJU IHdoYWxl IFRoZWF0ZXI= bWFzcw== IERvbGw= U29tZXRoaW5n IGVjaG9lZA== IEhleA== Y3JpdA== YWZpYQ== IGdvZGRlc3M= IGVsZXZlbg== IFByZXZpZXc= IEF1cm9yYQ== IDQwMQ== dWxzaXZl IExvZ2Fu aW5idXJnaA== IENlbnRlcnM= IE9OTFk= IEFpZA== IHBhcmFkb3g= IGh1cmQ= IExD RHVl Y291cnQ= IG9mZmVuZGVk IGV2YWx1YXRpbmc= IE1hdHRoZXdz IHRvbWI= IHBheXJvbGw= IGV4dHJhY3Rpb24= IEhhbmRz aWZp IHN1cGVybmF0dXJhbA== IENPTU0= XT0= ZG9ncw== IDUxMg== IE1lZXRpbmc= UmljaGFyZA== IE1heGltdW0= IGlkZWFscw== VGhpbmdz bWFuZA== IFJlZ2FyZGxlc3M= IGh1bWlsaQ== YnVmZmVy TGl0dGxl IERhbmk= IE5haw== IGxpYmVyYXRpb24= IEFiZQ== IE9M IHN0dWZmZWQ= YWNh aW5kYQ== cmFwaGlj IG1vc3F1 IGNhbXBhaWduaW5n IG9jY3VweQ== U3F1 cmluYQ== IFdlbA== IFZT IHBoeXNpYw== IHB1bHM= cmludA== b2FkZWQ= RVRG IEFyY2hpdmVz IHZlbnVlcw== aG5lcg== IFR1cmJv IGx1c3Q= IGFwcGVhbGVk cXVleg== aWxpYg== IFRpbW90aHk= IG9tbg== ZHJv IG9ic2Vzc2lvbg== IFNhdmFnZQ== MTk5Ng== R2xvYmFs SmVz MjE0 IHNsaWRpbmc= IGRpc2FwcHJv IE1hZ2ljYWw= IHZvbHVudGFyaWx5 Z2I= YW5leQ== IHByb3BoZXQ= IFJlaW4= IEp1bGlh IFdvcnRo YXVydXM= IGJvdW5kcw== aWV1 KSkp IGNyb3Jl IENpdGl6ZW4= U2t5 IGNvbHVtbmlzdA== IHNlZWtlcnM= b25kbw== SVNB IExlbmd0aA== IG5vc3RhbGc= IG5ld2NvbQ== IGRldHJpbQ== ZW50cmlj Mzc1 IEdF IGF1dG9w IGFjYWRlbWljcw== QXBwRGF0YQ== IFNoZW4= IGlkaW90 IFRyYW5zaXQ= IHRlYXNwb29u V2ls S08= IENvbWVkeQ== Piw= IHBvcHVsYXRlZA== V0Q= IHBpZ3M= IE9jdWx1cw== IHN5bXBhdGhldGlj IG1hcmF0aG9u MTk4 IHNlaXp1cmU= c2lkZWQ= IGRvcA== aXJ0dWFs TGFuZA== IEZsb29y b3NhdXJz Li4uXQ== IGxvcw== IHN1YnNpZGlhcnk= RVk= IFBhcnRz IFN0ZWY= IEp1ZGljaWFyeQ== IDEzNA== IG1pcnJvcnM= IGtldA== dGltZXM= IG5ldXJvbG9n IGNhdg== IEd1ZXN0 IHR1bW9y c2NpbGw= IExsb3lk RXN0 IGNsZWFyZXI= IHN0ZXJlb3R5cGVz IGR1cg== bm90aGluZw== UmVkZGl0 IG5lZ290aWF0ZWQ= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t MjM1 IGZsb3du IFNlb3Vs IFJlc2lkZW50 IFNDSA== IGRpc2FwcGVhcmFuY2U= IFZpbmNl Z3Jvd24= IGdyYWJz cmls IEluZmluaXRl IFR3ZW50eQ== IHBlZGVzdHJpYW4= IGplcnNleQ== IEZ1cg== IEluZmluaXR5 IEVsbGlvdHQ= IG1lbnRvcg== IG1vcmFsbHk= IG9iZXk= c2VjdXJl aWZmZQ== IGFudGliaW90aWNz YW5nbGVk IEZyZWVtYW4= IEludHJvZHVjdGlvbg== SnVu IG1hcnNo aWNhbnM= IEVWRU5UUw== b2Nob25k V2FsbA== aWN1bHR5 IG1pc2RlbWVhbm9y IGx5 VGhvbWFz IFJlc29sdXRpb24= IGFuaW1hdGlvbnM= IERyeQ== IGludGVyY291cnNl IE5ld2Nhc3RsZQ== IEhvZw== IEVxdWlwbWVudA== MTc3 IHRlcnJpdG9yaWFs IGFyY2hpdmVz MjAz RmlsdGVy IE11bmljaA== IGNvbW1hbmRlZA== IFdhbmQ= IHBpdGNoZXM= IENyb2F0 IHJhdGlvcw== IE1pdHM= IGFjY3VtdWxhdGVk IFNwZWNpZmljYWxseQ== IGdlbnRsZW1hbg== YWNlcmI= IHBlbm4= IGFrYQ== IEZ1aw== IGludGVydmVuZQ== IFJlZnVnZQ== IEFsemhlaW1lcg== IHN1Y2Nlc3Npb24= b2hhbg== ZG9lcw== TG9yZA== IHNlcGFyYXQ= IGNvcnJlc3BvbmRlbmNl IHNoaW55 UHJpb3I= IHN1bGY= IG1pc2VyYWJsZQ== IGRlZGljYXRpb24= KCku IHNwZWNpYWxpc3Rz IGRlZmVjdHM= IEN1bHQ= IFhpYQ== IGplb3BhcmQ= IE9yZQ== QWJpbGl0eQ== IGxlYXI= IGFtYml0aW9ucw== IEJNSQ== IEFyYWJz IDE5NDI= IHByZXNlcnZhdGlvbg== aWZpY2F0ZQ== IGFzaGFtZWQ= bG9zcw== IFJlc3RhdXI= IHJlc2VtYmxl IGVucmljaA== IEtO IENsYW4= ZmxvYXQ= IHBsYXlhYmxl SVRU IGhhcm1vbnk= YXJyaXNvbg== IFdlaW5zdGVpbg== d2VyZQ== IHBvaXNvbmluZw== IENvbXB1dA== IFdvcmRQcmVzcw== bWFqb3I= IFZhbHZl RmFu IFRocm93 IFJvbWFucw== IERlcHJlc3Npb24= YWRvcw== IHRvcnR1cmVk IGJhbGFuY2luZw== Ym90dG9t IGFjcXVpcmluZw== IE1vbnRl YXJkaQ== IGF1cmE= ICMj IFN0YW5kaW5n IEF0bGFz Q0Y= IGludHJpbnM= IEJlbmdoYXpp IGNhbXBpbmc= IHRhcHBlZA== YmxhZGU= c3Ryb3Vz IFJhYmI= IFdyaXR0ZW4= dGlw IE5laWdo c3RlcmRhbQ== IEFsbG93 IEhlYWxpbmc= IFJob2Q= bnVt IGNhZmZlaW5l IFBlcmNlbnQ= IGJvbw== IGFwcGxlcw== MzA1 IHdlbGNvbWluZw== IGFwcGxhdWQ= IGF1c3Rlcml0eQ== wrE= IFJlYWxpdHk= ZWZl 5a4= IHN1Y2tz IHRhYnM= IFBheVBhbA== IGJhY2twYWNr IGdpZnRlZA== YWJ1bGFyeQ== IFNjb3V0 aXJ0ZWVu IGNoaW4= IG9taXR0ZWQ= IG5lZ2F0aXZlbHk= IGFjY2Vzc2luZw== IEVhcm4= IGFtYnVsYW5jZQ== IGhlYWRwaG9uZXM= IDIwNQ== IFJlZnJlc2g= cHJlc2lkZW50 IEtpdGNoZW4= IEVudGVyZWQ= IFNueWRlcg== MDA1 b21pY2Fs IGJvcnJvd2Vk IE5lbQ== IGF2aWF0aW9u IHN0YWxs cmltaW5hdGlvbg== IHVuaWZvcm1z aXRpbWU= IFNpbW1vbnM= ZW5lcmd5 YWJsaXNoZWQ= eXk= cXVhbGlmaWVk IHJhbGxpZXM= IFN0dWFydA== ZmxpZ2h0 IGdhbmdz cmFn IHZhdWx0 bHV4 IENvbXBhcg== IGRlc2lnbmF0aW9u MjA5 IEpvcw== ZG9sbGFy emVybw== IHdlbGxz MzAz IGNvbnN0aXR1ZW50cw== IGhlY2s= IGNvd3M= IGNvbW1hbmRlcnM= IGRpZmZlcmVudGlhbA== IENhdGhlcmluZQ== Mjk5 IHZhbHZl IGJyYWNl IHBlcnNwZWN0aXZlcw== Y2VydA== ZmFjdA== aWN1bGFybHk= IE1jTg== cGxhbmVz IGludHJpYw== IHBlYXM= b3Zhbg== IHRvc3NlZA== cmV0Y2g= IExvcGV6 IHVuZmFtaWxpYXI= ZGVhdGg= IEFwYXJ0 IENoYW5n IHJlbGlldmVk cm9waGU= IGFpcnBvcnRz IGZyZWFr dXRpbA== TWlsbA== IENoaW4= IE93ZW4= bWFsZQ== IEJyb2tlbg== IFdpbmRz cm9i cmlzaW5n IGZpcmVmaWdodGVycw== IGF1dGhvcml0YXJpYW4= IDE0OA== Qml0Y29pbg== ZXh0ZXJuYWw= IGJyb3dzZXJz aWNoZXZlcg== b3JpYW4= IHVuYg== IHBva2U= IFpvdA== TWlk IFBvcHVsYXI= IGNvdmVydA== IGNvbnRyaWJ1dGVz IDY1MA== IGNvbnRlbnRpb24= R2F0ZQ== IGNvbnNvbGVz IGNocm9tb3M= IElY IHZpc3VhbGx5 IEVpc2Vu IGpld2Vscnk= IGRlbGVnYXRpb24= IGFjY2VsZXJhdGU= IFJpbGV5 IHNsb3Bl IGluZG9vcg== aXRpYWxseQ== IGh1Z2VseQ== IHR1bm5lbHM= IGZpbmVk IGRpcmVjdGl2ZQ== IGZvcmVoZWFk dXN0b21lZA== IHNrYXRl TXVzaWM= Z2Fz IHJlY29nbml6aW5n YW1ibw== IG92ZXJ3ZWlnaHQ= IEdyYWRl 2Yo= IHNvdW5kaW5n IGxvY2tpbmc= IFJFTQ== U3RvcmU= IGV4Y2F2 IExpa2V3aXNl IExpZ2h0cw== IGVsYm93 IFN1cHBseQ== d2lj IGhhbmRzb21l MTk5NA== Q29sbA== IGFkZXF1YXRlbHk= IEFzc29jaWF0ZQ== IHN0cmlwcw== IGNyYWNrZG93bg== IG1hcnZlbA== IEt1bg== IHBhc3NhZ2Vz QEBAQA== IFRhbGw= IHRob3VnaHRmdWw= bmFtZXNl IHByb3N0aXR1dGlvbg== YnVzaW5lc3M= IGJhbGxpc3RpYw== cGVyc29uYWw= Y2ln aXphdGlvbmFs Um91bmQ= IMKgIMKgIMKgIMKg IENvbGVtYW4= IGFkbWl0dGluZw== IFBsdWc= IGJpdGNvaW5z IFN1eg== IGZhaXJuZXNz IHN1cHBsaWVy IGNhdGFzdHJvcGhpYw== IEhlbGVu b3F1 TWFyYw== IEFydGljbGVz Z2ll IGVuZGFuZ2VyZWQ= IGRlc3Rpbnk= IFZvbHQ= b2xpYQ== YXhpcw== IGNoZWF0 IHVuaWZpZWQ= SUNP cXVvdGU= MzAy IFNlZA== IHN1cHByZXNzaW9u IGFuYWx5emluZw== IHNxdWF0 IGZpZ3VyaW5n IGNvb3JkaW5hdGVz IGNodW5rcw== IDE5NDY= IHN1YnA= IHdpa2k= IEZvcmJlcw== IEp1cGl0ZXI= IEVyaWs= aW1lcg== IENvbW1lcmNpYWw= XCk= IGxlZ2l0aW1hY3k= IGRlbnRhbA== IE1lYW4= IGRlZmljaXRz NTUw T3JpZ2luYWxseQ== IEhvcnJvcg== IGNvbnRhbWluYXRpb24= bGxhaA== IGNvbmZpc2M= IENsYXJl VEI= IEZhaWxlZA== YW5lZA== IHJ1bGVy IENvbnRyb2xsZXI= IGZlbWluaXN0cw== Rml4 Z2F5 MjA3 IHJhYmJpdA== VGhpcmQ= b3dudG93bg== IGdsdWU= IHZvbGF0aWxl IHNoaW5pbmc= IGZvbGw= IGltcGFpcmVk IHN1cGVycw== 5og= IGNsdXRjaA== mumGkg== IHByb2xldA== ICgh IHllbGxlZA== IEtpZXY= IEVybg== IFNob2Nr S0I= IHNpdHVhdGVk cXVlcnk= IE5hcw== IGFubmV4 Y2hhcmFjdGVy IEhvbGlkYXk= IGF1dG9tYXRpb24= IEppbGw= IFJlbWFzdGVyZWQ= IGxpbmVt IHdpbGRlcm5lc3M= IEhvcml6b24= IEd1aW5lYQ== QVo= IG1haW5sYW5k IHNlY3JlY3k= TEVBU0U= IHB1bms= IFByb3ZpbmNl KCks U3BlZWQ= IGhhbmRpbmc= IFNlYmFzdA== U2ly cmFzZQ== IGpvdXJuYWxz IGNvbmdlc3Q= IFR1dA== aXJyZWw= IHNjaGl6b3BocmVuaWE= IG1pc29neW4= aGVhbHRoeQ== SXJvbg== IHJlYWN0ZWQ= LSQ= MjUy IHBsdXJhbA== IHBsdW0= IGJhcmdhaW4= IGdyb3VuZGVk ZmluZGVy IGRpc3Nl IExheg== T09E IGF0cm9j RmFjdG9yeQ== IG1pbmlvbnM= IG9yaQ== IEJyYXZl IFBSRQ== IE15YW5tYXI= IEhvZA== IGV4cGVkaXRpb24= IGV4cGxvZGU= IENvb3Jk IGV4dHI= IEJyaWVm IEFESEQ= IGhhcmRjb3Jl ZmVlZGluZw== IGRpbGU= IEZydWl0 IHZhY2NpbmF0aW9u IE1hbw== b3NwaGVyZQ== IGNvbnRlc3Rz LXw= IGZyZW4= aXNwaGVyZQ== Um9t IFNoYXJw IFRyZW5k IGRpc2Nvbm5lY3Q= 4oCi4oCi IHBlcnNlY3V0aW9u RWFydGg= IGhlYWx0aGllcg== Mzg0 IGNvYg== IFRyaW5pdHk= T1dT QU5O IHNwZWNpYWx0eQ== IGdydQ== IGNvb3BlcmF0aXZl d2h5 U3RhcnRpbmc= IElzc3Vlcw== c3RyZQ== ZW5zb3I= IDE4NQ== QWR2 IT8= IFJldmVs ZW1pYQ== IEh1bGs= IGNlbGVicmF0aW9ucw== IFNvdQ== cmF1ZA== IEtsZWlu IHVucmVhbA== Y29udGV4dA== IHBhcnRuZXJzaGlwcw== IGFkb3B0aW5n dGljYWw= IHNwbGFzaA== IEhlemJvbGxhaA== Y2F0ZWdvcnk= Y3ljbG9w eHRvbg== IERvdA== dXJkeQ== dHo= IGVudmVsb3Bl IE5M 4pU= IHdoZXJlaW4= U3BlYw== MTg0 IHRlbGV2 YWxpYXRpb24= IG15dGhz 5bA= IHJpZ29yb3Vz IGNvbW11bmljYXRpbmc= IG9ic2VydmVy IHJlaGU= IFdhc2g= IGFwb2xvZ2l6ZWQ= IFRpbg== IGV4cGVuZGl0dXJlcw== d29ya2Vycw== ZG9jdW1lbnQ= IGhlc2l0YXRl IExlbmlu IHVucHJlZGljdGFibGU= IHJlbmV3YWw= Y2xlcg== b2tpYQ== IENPTlQ= IHBvc3RzZWFzb24= VG9rZW5z IGV4YWNlcmI= IGJldHRpbmc= IDE0Nw== IGVsZXZhdGlvbg== V29vZA== IFNvbG9tb24= MTk0 MDA0 b3V0cHV0 IHJlZHVuZA== IE11bWJhaQ== IHBI IHJlcHJvZHVjZQ== IER1cmF0aW9u TUFY IGJvZw== Q0JT IEJhbGFuY2U= IFNndA== IFJlY2VudA== IGNk IHBvcHBlZA== IGluY29tcGV0 cHJvcA== YXlhbg== Z3V5 UGFjaWZpYw== IHR5cg== IHt7 IE15c3RpYw== IERhbmE= IG1hc3R1cmI= IGdlb21ldHJ5 w6I= IENvcnJlY3Q= IHRyYWplY3Rvcnk= IGRpc3RyYWN0ZWQ= IGZvbw== IFdlbHNo THVj bWl0aA== IHJ1Z2J5 IHJlc3BpcmF0b3J5 IHRyaWFuZ2xl IDIxNQ== IHVuZGVyZ3JhZHVhdGU= IFN1cGVyaW9y Y2hhbmdpbmc= Xy0= IHJpZ2h0bHk= IHJlZmVyZWU= IGx1Y3JhdGl2ZQ== IHVuYXV0aG9yaXplZA== IHJlc2VtYmxlcw== IEdOVQ== IERlcmJ5 IHBhdGh3YXlz IExlZA== IGVuZHVyYW5jZQ== IHN0aW50 IGNvbGxlY3Rvcg== RmFzdA== IGRvdHM= IG5hdGlvbmFscw== IFNlY3VyaXRpZXM= IHdoaXA= UGFyYW0= IGxlYXJucw== TWFnaWM= IGRldGFpbGluZw== bW9vbg== IGJyb2FkY2FzdGluZw== IGJha2Vk MjY1 aG9sbQ== IFNhaA== IEh1c3NlaW4= IENvdXJ0ZXN5 MTc0 IDE0Ng== IGdlb2dyYXBoaWM= cGVhY2U= IGp1ZGdpbmc= IFN0ZXJu QnVy IHN0b3J5bGluZQ== R3Vu IFN0aWNr MjQ1 MzA3 44K044Oz IEFkbWluaXN0cmF0b3I= IGJ1cm50 IHBhdmU= Y2hvZXM= RXhlYw== IGNhbXB1c2Vz UmVzdWx0 IG11dGF0aW9ucw== IENoYXJ0ZXI= IGNhcHR1cmVz IGNvbXBhcmVz IGJhZGdl U2NpZW50 IGVyYWQ= aWVyeQ== b2k= ZXR0ZXM= IEVzdGF0ZQ== IHN0cmFw IHByb3VkbHk= IGZyaWVk IHdpdGhkcmF3bg== IFZveQ== cGhvbnk= SXRlbXM= IFBpZXJjZQ== YmFyZA== IGFubm90YXRpb24= YW50b24= aWxsb24= SW1wcm8= Li4uKQ== IGhhcHBpZXI= LS0tLS0t YWRqdXN0 IHN0YWZmZXJz IGFjdGl2aXNt IHBlcmY= IGFscmlnaHQ= TmVlZA== IGNvbW1lbmNl IG9waW9pZA== IEFtYW5kYQ== RXM= IFBhcnM= IEthdw== V29ya3M= MjQ4 IGluZG8= dGM= ZW5kYW50 IE1vdG8= IGxlZ2FsaXphdGlvbg== T1RF IHRhc2tlZA== IHRzcA== IEFDVElPTlM= MTY2 IHJlZnJlc2hpbmc= IE5S IFBlcmV6 IGluZnJpbmdlbWVudA== U1k= TGlzdGVu aW5uaW5n a3U= IHJvdGF0ZQ== cHJvZ3JhbQ== YXJhaA== RGVzaWdu ICjCow== IHN0b3Jpbmc= IHdhcnJhbnRz IGp1ZGdlbWVudA== IEJyaXN0 dXN1YWxseQ== cGhvdG8= IFJhbg== IFBpbmU= IG91dHJhZ2VvdXM= IFZhbGVudGluZQ== bHVlbmNl IEV2ZXJ5Ym9keQ== QWx0ZXJu IHJlbGV2YW5jZQ== IHRlcm1pbmF0ZWQ= IGRlc3NlcnQ= IGZ1bGZpbGxlZA== IHByb3NlY3V0ZWQ= IFdvcmRz IG1pZ3JhbnQ= IGN1bHRpdmF0aW9u w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgg== aWRlbGl0eQ== IFZlcm4= IExvZ2lu IG1ldGFwaG9y IFRpcA== IHJlY3J1aXRz IFBpZw== cmliaW5n IGVudGh1c2lhc3Rz ZXhwZXI= IGZyaWdodGVuaW5n IEhhaXI= YW5zb24= c3RyYXRl IGhp SGVpZ2h0 IG93bmluZw== bm9uZQ== IGRpc2xpa2U= IGtuaXZlcw== cGhlcmQ= IGxvdWRseQ== IEFQSXM= RGlzcGxheQ== IExhYw== IFVTUw== YWJs dmVyYWdlcw== SmV3 IDE3Mg== IEhpc3RvcmljYWw= YXRvb24= IFBoeXNpY3M= aW50ZXJu IHdhcm10aA== IHRvcHA= RE0= IGd1bm1hbg== IGVtcGVyb3I= b2Rp 44Oj aW5hdG9yeQ== IFJpYg== IDEzMQ== IFNhdHVybg== IFNoaW5pbmc= IHdha2luZw== UXVvdGVz IGNvbWVkaWFu ZW5iZXJn wr0= IGJlbGlldmVycw== IHBhcGVyd29yaw== Y3VzdG9t IGxldg== IGxhbWVudA== IHBvdXJpbmc= MjIy cG9saXRpY2Fs IFN1cHBsZW1lbnQ= bWFpZA== IGNydWVsdHk= IHRyZWFk eXNpY3M= QXc= cml0ZXM= IG1vZGlmaWVy IFBvc2l0aW9u QWRhbQ== bGI= dWJz IGltcGVyZmVjdA== IGNsdXN0ZXJz IEVuZ2luZWVy IENoZXJyeQ== IGluYXVndXJhdGlvbg== IFNhdQ== IGVtYm9kaW1lbnQ= IFVuY2xl IG92ZXJy IGV4cGxvc2lvbnM= Y3VsZQ== IFByaW5jZXRvbg== IEFuZHJlYQ== IGluY29ycmVjdGx5 IGVhcm5lc3Q= IHBpbGdy IFNwcmludA== IHNsZWV2ZQ== IGhlYXJz IEFtYXppbmc= IGJyb3dzaW5n YWdpbg== IGhvbWVsYW5k IGhhdw== IGRpdmluZw== aXN0ZXJlZA== MTc4 IGJhcmdhaW5pbmc= IEFyY2FkZQ== IGRlbGVnYXRl dGVyc29u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== IEphY2tzb252aWxsZQ== Mjc1 IHN0YWdu IGFkYW0= IFNoZXJtYW4= Q0I= IHN1YnVyYg== IEZvb2Rz IGNvbnZlcnRpbmc= IEFyaXN0 IGNoYW1iZXJz bG92ZQ== IGFtaW5v IEdhbg== IG1hZG5lc3M= bWM= IFVTRQ== ZGVmaW5lZA== IHVsdHI= aW5kdXN0 IHdvbHZlcw== bGFuY2U= QWRkaXRpb25hbGx5 IGNyYWNrcw== YXNpYQ== IFJlYXNvbg== IFB1bXA= IGFjY2lkZW50YWw= IExhc2Vy IFJpZA== IGluaXRpYWxpemVk ZWxsaQ== IHVubmFtZWQ= IG5vdW4= IFBhc3NlZA== IGhvc3RhZ2U= IEV0aGlvcA== c2hpcnRz IHVucmVs IEVtYmFzc3k= IDE5NDE= IGF0b21z IHB1cnBvcnRlZA== MTY0 IEZp IGdhbGxvbnM= IE1vbmljYQ== IHBn ZW5tZW50 IHNvcnRlZA== IEdvc3BlbA== IGhlaWdodHM= IHRyYWNlZA== IHVuZGVyZ29pbmc= U2hlbGw= IHNhY2tz IHByb3BvcnRpb25z IGhhbGx1Yw== Rm9udA== YWNldA== IHdhcm1lcg== IElOVEVS IGdyYWJiaW5n UGx1Zw== IHJlYWxpemF0aW9u IEJ1cmtl IGVuY2hhbnQ= QVRFUg== IFNlZWQ= IGFidW5kYW50 Rk0= IGNpdmlj VnM= aXNp IHZvdw== IHJlcGVy IFBhcnRuZXJzaGlw IHBlbmV0cmF0aW9u IGF4ZQ== IHNoYXR0ZXJlZA== IFpvbWJpZXM= IHZpbnls IEFsZXJ0 ZW9u IG9ibGlnZWQ= IElsbHVzdA== IFBsYXph IEZyb250aWVy IGRhdmlkamw= IFNlcmlhbA== IEhhdg== IE51dHJpdGlvbg== Qmk= IOKWiA== IEpheXM= bGludXg= IGh1cnJ5 IHZveQ== IGhvcGVsZXNz IFN0ZWFsdGg= IOOB ZXNzb3Jz dHRsZQ== Ym9yZw== IFNhZmFyaQ== ZmVsbA== IHdhcnk= ZHVl IEFib3Zl SGE= RUxM IG5vdG9y IFdvbg== VG9v IG9jY3VwYXRpb25z IHBvc3Nlc3Npb25z IGludml0aW5n IHByZWRhdG9ycw== IGFjY2VsZXJhdGVk IDE1Nw== dXRlcnRl IEN1YmU= ZWFzdA== YWNjb3VudA== R2l2ZQ== IHRyYW5zcGxhbnQ= cmVkaWVudHM= aWRhYmxl IHNjcmVlbnNob3Rz IEd1bmQ= IEZT IHRyYXZlbGVycw== IHNlbnNvcnk= IEZpYXQ= IFJvY2tldHM= jos= X3s= RnJpZW5k IGNoYXJtaW5n QUxT IGVuam95bWVudA== bXBo IDUwMDA= IFJFRw== 2YY= Ymlh IGNvbXBpbGF0aW9u cm9zdA== IFZQ IFNjaG5l MjAxOQ== IGNvcHlpbmc= TU9SRQ== IEZsb3Jl ZmFsbHM= MjE1 dG90YWw= IGRpc2NpcGxlcw== ZG91Ymxl IGV4Y2VlZGluZw== IHNtYXNoZWQ= IGNvbmNlcHR1YWw= IFJvbWFuaWE= IEJyZW50 IElDRQ== IFRvdQ== IGdyYXA= IG5haWxz MTg5 44OY IHByb2N1cmU= ZXVy IGNvbmZpcm1pbmc= IENlYw== YXdp IEVkZW4= IG5n IGVuZ2luZWVyZWQ= YXRpY3M= IGhvb2tlZA== IGRpc2d1c3Rpbmc= IE11cmRlcg== 44K/ TGlicmFyeQ== IDE2OA== QWxtb3N0 aGVtYXRpYw== TWVudQ== IE5vdHJl IEp1cg== IGtpZG5hcHBlZA== IGhhY2tlcg== IEphZGU= IGNyZWVweQ== IGRyYXdpbmdz IFNwb25zb3I= IGN5Y2xpc3Rz IEdvYmxpbg== IG9wdGltaXplZA== IHN0YWdlZA== IE1jRA== YmV0d2Vlbg== QWdl ZW5v U2V4 IFdpZGU= bmluZ3M= YXZpcw== IGluY2FwYWJsZQ== IEtvYg== IHJld2FyZGluZw== IExvbmU= b2xlc2NlbnQ= IGNvbnRyYWN0ZWQ= IHN0aWNreQ== Sm9zZQ== QmFsbA== ZmVzdA== IElucHV0 IFJlY2VudGx5 IHRvbWF0 c3F1YXJl QXBwbGljYXRpb24= IG5pdHJvZ2Vu IGR1cGxpY2F0ZQ== IFJlY29u IERlYXI= TG9uZG9u IGludHJh IGRvY2s= IG91dHJlYWNo IE1pbGxpb24= IG1hbW1hbHM= YW1wdG9u VkFM IHNuYXBz IGRvcw== IFdob2xl IFJlYWR5 VHJ5 IFdpbm5pcGVn ZWFyYW5jZQ== IGluY3VycmVk cmVuY2hlZA== IE5TVw== aWxvdA== cmFpbmU= IGN1YmU= Z290 IHJ1bndheQ== ZXRlcm1pbmVk IEhhd2tz IHN1cnZpdm9y IFdpc2g= IERpbg== IERFRg== IFZhdWx0 MTg3 IG11c2hyb29tcw== IGNyaXNw YmV5 IERpc2NvdmVyeQ== IGRldmVsb3BtZW50YWw= IHBhcmFkaWdt IGNoYW90aWM= IFRzdQ== IDMzMw== Ym9ucw== IGJhY3RlcmlhbA== IGNvbW1pdHM= IGNvc21pYw== IG1lZ2E= b2NhdGl2ZQ== IFBhaW50 b3Bob2JpYw== IHZhaW4= IGNhcnZlZA== IFRoaWVm IEd1bA== b3dzaGlw IGNpdGVz IEVkaW5idXJnaA== IGRpbWluaXNoZWQ= IGFja25vd2xlZGdlcw== IEtpbGxz IG1pY3Jvdw== IEhlcmE= IHNlbmlvcnM= IHdoZXJlYnk= SG9w YXRyb24= IHVuYXZhaWxhYmxl IE5hdGU= IDQ4MA== IHNsYXRlZA== IFJlYmVjY2E= IEJhdHRlcnk= IGdyYW1tYXI= IGhlYWRzZXQ= IGN1cnNvcg== IGV4Y2x1ZGluZw== YW55ZQ== YXVuZGVyaW5n ZWJpbg== IGZlYXNpYmxl IFB1Ymxpc2hpbmc= IExhYnM= IENsaWZm IEZlcnJhcmk= IHBhYw== dmlzaWJsZQ== bWFya2Vk cGVsbA== IHBvbGl0ZQ== IHN0YWdnZXJpbmc= IEdhbGFjdGlj IHN1cGVyc3Q= IHBhcmFu IE9mZmljZXJz 44CB IHNwZWNpZmljcw== dWx1cw== MjM5 IFBhc3Rl QU1Q IFBhbmFtYQ== IERlbGV0ZQ== YW5ndWFyZA== cmVzdHJpYWw= IGhlcm9pYw== IER5 2KfZhA== IGluY3VtYmVudA== IGNydW5jaA== dHJv IHNjb29w IGJsb2dnZXI= IHNlbGxlcnM= dXJlbg== IG1lZGljaW5lcw== IENhcHM= IEFuaW1hdGlvbg== b3h5 IG91dHdhcmQ= IGlucXVpcmllcw== MjI5 IHBzeWNob2xvZ2lzdA== IFNhc2s= ZXZpbA== IGNvbnRhbWluYXRlZA== 44Ko aGVyZW5jZQ== IGJyYW5kZWQ= IEFiZHVs emg= IHBhcmFncmFwaHM= IG1pbnM= IGNvcnJlbGF0ZWQ= ZXJi IGltcGFydA== IG1pbGVzdG9uZQ== IFNvbHV0aW9ucw== b3RsZQ== IHVuZGVyY292ZXI= IG1hcmNoZWQ= IENoYXJnZXJz ZmF4 IFNlY3JldHM= IHJ1dGg= d2VhdGhlcg== IGZlbWluaW5l IHNoYW0= IHByZXN0aWdpb3Vz aWdnaW5z IHN1bmc= aGlzdG9yeQ== ZXR0bGU= Z2dpZQ== IG91dGRhdGVk b2xhbmQ= IHBlcmNlcHRpb25z IFNlc3Npb24= IERvZGdlcnM= dWo= IEVORA== RG9j IGRlZmljaWVuY3k= R3JhbmQ= IEpva2Vy IHJldHJvc3BlY3Q= IGRpYWdub3N0aWM= IGhhcm1sZXNz IHJvZ3Vl IEF2YWw= RXF1 IHRyYW5zYw== IFJvYmVydHNvbg== IERlcGVuZGluZw== IEJ1cm5z aXZv IGhvc3RpbGl0eQ== RmVhdHVyZXM= k5g= IGRpc2NvbWZvcnQ= IExDRA== c3BlY2lmaWVk IEV4cGVjdA== MzQw IGltcGVyYXRpdmU= IFJlZ3VsYXI= Q2hpbmVzZQ== IHN0YXRld2lkZQ== IHN5bW0= IGxvb3Bz IGF1dHVtbg== Tmljaw== IHNoYXBpbmc= IHF1b3Q= IGNoZXJyeQ== IENyb3NzcmVm 6Kaa6YaS U3RhbmRhcmQ= aGVlZA== IERlbGw= IFZpZXRuYW1lc2U= IG9zdA== IFZhbGt5cmll T0E= QXNzYWQ= IHJlYm91bmQ= IFRyYWZmaWM= cGxhY2Vz 5pg= IEJ1Yw== MTcy IHNoZWx0ZXJz IGluc2lzdGluZw== IENlcnRhaW5seQ== IEtlbm5ldGg= IFRDUA== IHBlbmFs IFJlcGxheQ== aGVhcmQ= IGRpYWxlY3Q= aXph IEZZ aXRjaGVy IERM IHNwaXJhbA== IHF1YXJ0ZXJiYWNrcw== IGh1bGw= IGdvb2dsZQ== IHRvZGQ= IFN0ZXJsaW5n IFBsYXRl IHNweWluZw== bWJvbA== IFJlYWxt IFByb2NlZA== IENyYXNo IHRlcm1pbmF0ZQ== IHByb3Rlc3Rpbmc= Q2VudGVy Z3VpZGVk IHVuY292ZXI= IGJveWNvdHQ= IHJlYWxpemVz c291bmQ= IHByZXRlbmRpbmc= IFZhcw== MTk4MA== IGZyYW1lZA== IDEzOQ== IGRlc2NlbmRlZA== IHJlaGFiaWxpdGF0aW9u IGJvcnJvd2luZw== IEJ1Y2g= IGJsdXI= Um9u IEZyb3plbg== ZW56YQ== Q2hpZWY= IFBvb3I= IHRyYW5zbGF0ZXM= TUlO IDIxMg== SkVDVA== IGVydXB0ZWQ= IHN1Y2Nlc3Nlcw== U0VD IHBsYWd1ZQ== IGdlbXM= ZG9tcw== IHN0cmV0Y2hlcw== IFNweQ== IHN0b3J5dGVsbGluZw== Q3JlZGl0 IFB1c2g= IHRyYWN0aW9u IGluZWZmZWN0aXZl IEx1bmE= IHRhcGVz IGFuYWx5dGljcw== ZXJjaXNl IHByb2dyYW1tZXM= IENhcmJvbg== IGJlaG9sZA== aGVhdnk= IENvbnNlcnZhdGlvbg== IEZJUg== IHNhY2s= dGVybWlu cmlja3M= IGhvdXNlZA== IHVudXN1YWxseQ== SWNl IGV4ZWN1dGluZw== IE1vcm9j ZWRheQ== IGVkaXRpb25z IHNtYXJ0ZXI= IEJB IG91dGxhdw== IHZhbmlzaGVk aWJh QUxTRQ== IFNpbHZh MjM4 Q291bGQ= IHBoaWxvc29waGVy IGV2YWN1YXRlZA== U2VjcmV0 MTQy IHZpc2Fz 44Ks IE1hbHQ= IENsZWFybHk= IE5pZ2Vy IENhaXJv IEZpc3Q= Mzgw IFhNTA== YXV0bw== aXRhbnQ= IHJlaW5mb3JjZWQ= UmVjb3Jk IFN1cnZpdm9y R0h6 IHNjcmV3cw== cGFyZW50cw== IG9jZWFucw== bWFyZXM= IGJyYWtlcw== dmFzaXZl IGhlbGxv IFNJTQ== cmltcA== IG9yZQ== IEFybW91cg== MjQ3 IHRlcnJpZmlj IHRvbmVz MTQx IE1pbnV0ZXM= RXBpc29kZQ== IGN1cnZlcw== IGluZmxhbW1hdG9yeQ== IGJhdHRpbmc= IEJlYXV0aWZ1bA== TGF5 IHVucG9w dmFibGU= IHJpb3Rz IFRhY3RpY3M= YmF1Z2g= IENvY2s= IG9yZ2FzbQ== IFNhcw== IGNvbnN0cnVjdG9y ZXR6 R292 IGFudGFnb24= IHRoZWF0 IGRlZWRz aGFv Y3V0cw== IE1jQ2w= IHVt IFNjaWVudGlzdHM= IGdyYXNzcm9vdHM= eXNzZXk= Il09Pg== IHN1cmZhY2Vk IHNoYWRlcw== IG5laWdoYm91cnM= IGFkdmVydGlz b3lh IG1lcmdlZA== VXBvbg== IGdhZA== IGFudGljaXBhdGU= QW55d2F5 IHNsb2dhbg== IGRpc3Jlc3BlY3Q= SXJhbg== IFRC YWN0ZWQ= IHN1YnBvZW4= bWVkaWF0ZWx5 T09PTw== IHdhaXZlcg== IHZ1bG5lcmFiaWxpdGllcw== b3R0ZXN2aWxsZQ== IEh1ZmZpbmd0b24= Sm9zaA== IERI TW9uZGF5 IEVsbGVu S25vdw== eG9u aXRlbXM= MjI4 IGZpbGxz IE5pa2U= IGN1bXVsYXRpdmU= YW5kYWxz SXI= IOw= IGZyaWN0aW9u aWdhdG9y IHNjYW5z IFZpZW5uYQ== bGRvbQ== IHBlcmZvcm1lcnM= UHJpbQ== IGJpZGRpbmc= TXVy IGxlYW5lZA== IFByaXg= YWxrcw== IFvigKZd IFR3aXRjaA== IERldmVsb3Blcg== IEdpcg== IGNhbGxiYWNr QWJzdHJhY3Q= IGFjY3VzdG9tZWQ= IGZyZWVkb21z IFBH dXJhY3k= IGx1bXA= aXNtYW4= LCwsLA== MTk5Mg== IFJFRA== IHdvcm0= TWF0Y2g= IFBsYXRpbnVt SUo= IE93bmVy VHJpdmlh Y29tcGw= IG5ld2Jvcm4= IGZhbnRhcw== T3du IDE5NTk= IHN5bXBhdGg= IHViaXF1 IG91dHB1dHM= IGFsbGV2 IHByYWc= S2V2aW4= IGZhdm9ycw== IGJ1cmlhbA== IG51cnQ= c29sZXRl Y2FjaGU= IDE1Ng== IHVubG9ja3M= dGVjaG4= TWFraW5n IGNvbnF1ZXI= YWRpYw== 5pY= IGVsZg== IGVsZWN0b3JhdGU= IEt1cmRz IFN0YWNr IFNhbXVyYWk= IOKYhQ== IHt9 IFNhaWQ= IEZhbGxvdXQ= IGtpbmRuZXNz IEN1c3RvbXM= IEJvdWxldmFyZA== IGhlbGljb3B0ZXJz b3RpY3M= IFZlZ2V0 Y29tbWVudA== IGNyaXRpY2lzZWQ= IHBvbGlzaGVk IFJlbWl4 IEN1bHR1cmFs IHJlY29ucw== IGRvaQ== YXRlbQ== U2NyZWVu IGJhcnJlZA== Q29tbWVudHM= IEdlbmVyYWxseQ== IHNsYXA= NzIw VmFyaQ== cGluZQ== IGVtcHQ= IGhhdHM= IFBsYXlpbmc= bGFi YXZlcmFnZQ== Zm9ybXM= IENvdHRvbg== IGNhbnM= IERPTg== IFNvbWFsaWE= Q3J5cHQ= IEluY3JlYXNlcw== RXZlcg== bW9kZXJu IHN1cmdlb24= MzAwMA== IHJhbmRvbWl6ZWQ= PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== QmVybg== aW1wbA== IENPUg== IHByb2NsYWlt dGhvdXNl IHRvZXM= IGFtcGxl IHByZXNlcnZpbmc= IGRpc2JlbA== Z3JhbmQ= QmVzaWRlcw== IHNpbGs= IFBhdHRlcm4= aG0= IGVudGVycHJpc2Vz IGFmZmlkYXZpdA== IEFkdmlzb3J5 IGFkdmVydGlzZWQ= IFJlbGlnaW91cw== c2VjdGlvbnM= cHN5Y2g= IEZpZWxkcw== YXdheXM= IGhhc2h0YWc= IE5pZ2h0bWFyZQ== IHZhbXBpcmU= IGZvcmVuc2lj cm9zc292ZXI= bmFy IG5hdnk= IHZhY2FudA== IER1ZWw= IGhhbGx3YXk= IGZhY2Vib29r aWRlbnRhbGx5 IE5SQQ== IG1hdHQ= IGh1cnJpY2FuZQ== IEtpcmJ5 IFB1enpsZQ== IHNraXJ0 b3VzdA== ZHVsbGFo IGFuYWxvZ3k= aW5pb24= IHRvbWF0b2Vz IE5W IFBlYWs= IE1leWVy IGFwcG9pbnRtZW50cw== IG1hc2M= IGFsbGV5 cmVoZW5k IGNoYXJpdGllcw== IHVuZG8= IGRlc3RpbmF0aW9ucw== IFRlc3Rpbmc= Ij48Lw== IGRlc3RpbmVk IGltcGxlbWVudHM= IEhhcm9sZA== UkVDVA== IG9wdGltaXphdGlvbg== IGtpbG9tZXRyZXM= IGNtZA== IGltcGFpcm1lbnQ= IHVuc3VjY2Vzc2Z1bA== IHN3aWZ0bHk= IEdsYXNnb3c= YXJ0ZW4= IFNoYXJlcw== IEFuc3dlcg== IEFsYnVt IG51dHJpdGlvbmFs 44OW IEZ1dA== IGJsb2M= IE5GQw== IHdob2xlc2FsZQ== IENX IG5lZ2xlY3RlZA== IGxhdW5jaGVy IGFubm91bmNlbWVudHM= T1VMRA== Y29tYg== IHJvdGF0aW5n IHJlc3Rz IFRpY2tldA== Y2hlZGVs TG91 IFZpYw== ICIn IHRlbXBsYXRlcw== IHJlcGxhY2Vz QXJj Ojo6Og== IEdpbGJlcnQ= IGlsbG5lc3Nlcw== IHNjaGVkdWxlcw== IGhldGVyb3NleHVhbA== TElORQ== IGhlcmVpbg== IGNvZXJj IGRlY3JlYXNpbmc= IGRlcG9ydGF0aW9u c3Vkbw== IEluZGlnZW5vdXM= IHdlaWdocw== QWxvbmc= Jyk7 IEJlbmdhbHM= NzA3 IGpvaW50cw== dmVydHM= IDE0OQ== bmFpcmU= IHNpbXBsZXN0 IGxvcmU= MTA4MA== ZmljdGlvbg== IERhdGFiYXNl IHJlc2VydmF0aW9u IHNvdQ== IHNhbmN0dWFyeQ== YXVkaW8= YXBsZQ== IHZlZ2V0YXJpYW4= IGFudGljaXBhdGlvbg== bWljcm8= IGVuZHVyaW5n IGRlcGFydGVk IHNpZGV3YWxr IHByb2hpYml0cw== IEZvbnQ= IGNvbXB1dGU= IFNlY3Q= IDE1OA== QmF0dGxl IGJvbWJlcg== IGRpc3RyYWN0aW9u IGVuZHVyZWQ= IHByYWN0aXRpb25lcnM= IGRpc3R1cmJlZA== IGRyYW5r b3JkZXJlZA== IHN1cnByaXNlcw== c2VhdA== U2VjdXJpdHk= IFdpc2RvbQ== b2dv IHN1YnBhcmFncmFwaA== IFBlbmluc3VsYQ== IE9yaWdpbnM= aXJlbg== IFBhdg== aWdnbGU= IGdyYXRpdHVkZQ== IEdyYXZpdHk= b3ZlcnR5 aW1hbg== Y3Ry IENhZXNhcg== Y291bGQ= Z2Vt IHNraWVz IGNoYW1w IGFncmVlaW5n RmFtaWx5 RGl2 MTc2 IG1lc3N5 dW1wdGlvbg== RmVkZXJhbA== ZXJubw== IENoYXQ= QmV5b25k IGRldm90ZQ== IFdhbHNo IGR1bXBlZA== IGFjY3VtdWxhdGlvbg== c3RhZA== aGliaXRpb24= IHNtb2tlcnM= IGluc3BlY3Rvcg== RnJlbmNo aXNzYW4= IFZpdGE= IHJlc2VhcmNoaW5n UkFN IENlbHRpY3M= IGNsb2Fr IFRlcnJh TWFyeQ== c29sZA== IERPTQ== bW9kcw== SW50ZWw= IG11bHRpdHVkZQ== IEltcHJvdmVk IHJlbGlhbmNl IGFydGlmYWN0 IGFsYXJtaW5n UHJvbQ== aG9u VElPTg== bWVkaXVt IHJlZmxleA== IEV4Y2Vs IHdlYWtlbmVk MTYz MjI0 IGNvc3R1bWVz IHVuaXF1ZWx5 IHNvcnJvdw== IG1hbnNpb24= d3A= IHNhbHY= IEdyb3Zl YnNw IFNuaXBlcg== IFNoaXBwaW5n IFBPVw== IHVuZGlz IGJyYW5kaW5n R2lybA== IEFobWFk IExha2Vz IENvcmV5 IGluaGVyaXRhbmNl ZW5lcnk= IHBhY2tpbmc= IFByZXN0 RGVzdA== Rlc= IHJlZ3VsYXRvcg== bG9ja2Vk IGNvbnRlc3RlZA== IE1lbGlzc2E= IER1Yw== IHVucG9wdWxhcg== IHN0YWNrZWQ= IDE5MTc= IHllYXJseQ== IHN0YXJl IGFzc2Vzc2luZw== w7g= IGJldmVyYWdlcw== IGNvbXBldGl0aW9ucw== IHN0cmVuZ3RoZW5pbmc= YWxvbmc= IEx1ZA== IG1lbHRlZA== c3RhbmJ1bA== IGJvdW50eQ== RU5D IExhbmRz IGRlY2xhcmVz IGN1c3RvbWl6ZQ== IGNvbXBvc2l0ZQ== 44Os Q00= b2dyYXBoaWNz IFRlbXA= IGNvbnRlbmRlcg== IGluc2lnbg== IExBTg== IGRpc2FzdGVycw== aW5zcGlyZWQ= IGp1ZGdtZW50cw== dXN0YWluYWJsZQ== dXJzaW9u IHZhcmlhbmNl IFVsdGltYXRlbHk= IC0tLS0tLS0t dWFkb3I= IFJY IG1lbHRpbmc= IEV4dGVuZGVk IFR3ZQ== TWFqb3I= IEJpbA== IHN5cnVw cXVpY2s= IEhvbGRlcg== IGlubm9jZW5jZQ== VUxF IE1pZ2h0 OTk5OQ== IGZhbA== IGNvbnRpbnVpdHk= IDE5NTM= IEJT c3RpbGw= TGF0 IEFidXNl IHVuc3VwcG9ydGVk eHh4eHh4eHg= IGluc3RpdHV0ZQ== IGZyYWdtZW50 IFBlcA== V2VzdGVybg== IENhdXNl IEZyYWc= IEFycw== 4KU= YXN0aWNz IGJpc2hvcA== IGNyb3NzZXM= IDE1NA== IFVwZ3JhZGU= IG1pdGlnYXRl IFJheW1vbmQ= TW9kcw== IHRvbWF0bw== IHN0dW1ibGVk IGRpZmZlcnM= SW5pdGlhbA== IFJhc3BiZXJyeQ== IGlnbm9yZXM= IHRhbnQ= w6A= IHJlbGF5 IGJpc2V4dWFs IGNvbmZlc3Npb24= IGRlbWVudA== aW5hcw== IEhlYXRoZXI= cGxhdGZvcm0= ZHJpdmluZw== Ym91cmc= IE11c2g= IGh5c3Rlcg== RGV0YWlscw== IGRyaWZ0 IFdhbGQ= IEx1Y2tpbHk= b3Jm IGV4cGlyZQ== IFB1bmNo enltZQ== Z29sZA== IHVucGFpZA== IFRyZW50 IHVuYXJtZWQ= IGlsbGljaXQ= IFRvdHRlbmhhbQ== IHNtYXNo SW50ZXJuYXRpb25hbA== aW5rZXI= IHN0aW5n IFNhZGRhbQ== IEFSVA== IHRydXRocw== YmlydGg= IHNvYmVy IE5pdA== IGli IHVzYWJsZQ== IHN0YWNrcw== IFN5bHY= IG5vcnRoZWFzdA== IGRvbWluYXRpb24= IE1vdXI= RU5TRQ== IE1lYXN1cmU= IHByb2dyYW1tZXI= IDwt MTgy IENvbmRpdGlvbg== IGJhY2t5YXJk aXJsaW5n IEplYg== IENyZWVk IEhhbmc= IENPTVA= RkVS IElzaA== IGRldGVjdGl2ZXM= LS0tLS0tLS0tLS0tLS0t IE1lc3Nlbmdlcg== IGxvb3Bo IGdhdGV3YXk= MTUx IE1hdGVyaWFscw== IERU IGRvb21lZA== b2Rv IHNsaWNlcw== IGVtYWlsZWQ= IFBlcmw= IHJlbm92 VVRI b2R5bmFt IFNvdXRod2VzdA== Z2V0aWM= IFRQUA== IG9wdGltaXNt IFRvdw== dWxhdG9ycw== cHJvdGVjdGVk eWxlcw== wqs= IGV4aWxl ZW52 UHJvcA== IFppbW1lcm1hbg== 2Y4= Q2E= b21hbHk= 44OG IHJhaWxyb2Fk TGVl MjMy IHJlcGxpY2F0ZQ== IGNvbWZvcnRhYmx5 YWN0bHk= IHJhdg== IHRlbGVzY29wZQ== IGhvbmVzdHk= IFBlcHBlcg== IEJyaW5n IHJpY2hlc3Q= IG91dGRvb3Jz IGhhbGxz IGNvbnRlbmQ= SVNF IHN1Ym1pdHRpbmc= IG5haXZl YXJhdGlvbnM= IDE0Mw== IHBvaXNlZA== cmVzcG9uc2libGU= IHNvY2tz IFNrdWxs UXVlc3Rpb24= IGRpc2NvdmVyaWVz Sm9pbmVk IEVuZW1pZXM= IFdpcmVsZXNz IFJldmVuZ2U= IHB1enpsZXM= IGNlYXNlZA== Mjkw Y3JpcHRpb25z IENvbnNvbGU= IGJvaWxpbmc= IGRpc2NyZXA= IGRlZHVjdGlvbg== IGFyc2VuYWw= WFhYWA== IEFtc3RlcmRhbQ== cm94aW1hdGVseQ== IFNoYW5l IHBvc2luZw== IEFDTFU= IENvbXBhbmllcw== IHRoZW9sb2d5 IFVn cXVhcnRlcg== IEhhbms= Q29pbg== IEx2 IGFsbGVnYXRpb24= IEF2b2lk IGluZGVmaW5pdGVseQ== IGNvbW1vZGl0aWVz IGJyaWc= IE1hbml0 IHRlbnRo bWV0aG9k IEtuaWNrcw== IOKAjg== IGludm9rZWQ= RGlhbA== QVJB IGNhdWN1cw== MjI3 IEphYg== IG91bmNlcw== YmF5 IGJ1ZGR5 ZmFu MjM0 IEhpbA== YWRo IFRZ IElORA== IDE5Mzk= IGl0ZXJhdGlvbg== IEdvbnphbGV6 IFZlcnQ= IElP ZW1i cmVyYQ== ZW5jaA== IFJlcXVpcmVtZW50cw== IFdpbnM= IGxpdmVzdG9jaw== aG91cnM= IuKApg== YnJhbA== TWFyZw== IERvbmU= IHdhc3Rpbmc= aW5nZWQ= Z3JvdXBz IHdpc2hpbmc= IFR1bWJscg== IHRhcHBpbmc= IG5hdGlvbmFsaXNt IEJ5cg== IHNxdWFyZXM= IEFjdGlvbnM= 44Ol SW5zaWRl ZGVidWc= IGFwcGVuZA== IHN0dWJib3Ju IENpbmQ= VGVsbA== IHRlYXJpbmc= IFJleQ== b3Jj IERheXRvbg== IE5I IE1hZG5lc3M= Q2hhcmw= IE1vcnJpc29u ZmlsdGVy IGFjY3VzZQ== IC4v IHRvcnJlbnQ= IGRlY2xpbmVz Z2FsbGVyeQ== TWluZQ== IG5lZ290aWF0aW9u IEJhc2hhcg== b3BpYQ== MTk5Mw== ZW1vcnQ= IE5vdmVs IEZhbmc= ZXJzaXZl IEluc3RhbnQ= IHJvbGxlcg== QXJvdW5k IEVsZWN0aW9ucw== R2FtZXM= IGluZXhwZW5zaXZl IHdvcnM= IHZ1bA== IEhvbGU= IHVuYmVsaWV2YWJsZQ== IG5hdXNl IGVudHI= Ym9hdA== IFNURQ== IGJ1c2g= IEhhc3Nhbg== IHdv IHBhdXNlZA== IE1pZw== bGl2ZWQ= IHNjb3V0 IGxpdGg= UHVibGlzaGVk ZHVpbm8= Y29vbA== IGNpcmN1bGF0aW5n aWRhcw== IFBhbQ== dmlvbGVudA== IENyYXdmb3Jk dWRkbGU= IExldHRlcnM= R3VhcmQ= bW9ycGg= IHdhbmRlcmluZw== IHNvcGhvbW9yZQ== IHF1ZWVy IEJsaW5k cnVl IE1hcnJpYWdl RG9t IHBhZGRpbmc= IGZvbGRlcnM= IG1lYW5pbmdsZXNz IGNhbmRpZGFjeQ== YWZvcnQ= IHdoaXN0bGVibA== IElkZW50aWZpZWQ= IGNpZ2Fy IGhpZA== IER1YmFp IHBvc3R1cmU= IGhpa2luZw== IFRlcm1pbmFs TGVnZW5kYXJ5 IFRQ IEFUSw== IFN0YXJidWNrcw== IFJpb3Q= MTk5MQ== IEJvdHRvbQ== ZWZmaWM= IEV1Z2VuZQ== IFd5b21pbmc= IFJvY2t5 IHNhbG1vbg== IG1ldHJv IGJpbGF0ZXJhbA== IGNlbGVicmF0ZXM= TGVuZ3Ro YmlsbGlvbg== QmF0 IHJlbGVn IHBzZXVkbw== RFQ= IFJob2Rl UGFyZW50 cGxldGlvbg== IGF0dHJpYnV0 IHR1bmluZw== IE5PVEU= IFJlYmVs aWN1cw== RnVuZA== IGNvY2t0YWls IDUwMQ== IHNwb29u IGJydXRhbGl0eQ== IHVuaXRl IG1pY3JvYmk= IFJlaWNo cG9zaXRpdmU= IGFtYXplZA== IE5U RGVzYw== RUNUSU9O IGZhbHNlbHk= IEhpZ2hsYW5kZXI= IENyaXN0 IFZpY3Rvcmlhbg== IGRpc3RyaWJ1dGlvbnM= dGhlaXI= IEVpbnN0ZWlu IHBvZA== IGVwaWRlbQ== IGhlYXA= IFJhbmNo IGFudGhlbQ== IHJlYXBw IEF1YnVybg== IGNvbmN1cnJlbnQ= IFRocm91Z2hvdXQ= IFBPU1Q= 4pg= IGhvbWVtYWRl a2ljaw== QmVn IGNoYXNzaXM= Y291bnRlcg== IG1lcmdlcg== IGxhcHM= MjE3 dW5pb24= IFRyaWdnZXI= IGRlYmF0ZWQ= IHNpbGVudGx5 IHJlc3RyYWludA== QmFs MDAwMDAwMA== IGZvcm1pZGFibGU= IEZpbGlw IHNhY3JpZmljZXM= Rm9vZA== IGR3YXJm IFNlcXU= aW5pYW4= TW9yZW92ZXI= IHRhbmdpYmxl b3BzaXM= IE1pbmVjcmFmdA== IFJlZ2lzdHJhdGlvbg== b2Fu IHJlcHJlc2VudGF0aW9ucw== IHRoaXJzdA== IGNvcnA= aXJlbWVudA== TWFkZQ== bG9l PiI= Y2F0cw== Ki4= IGdlc3R1cmVz Z2VuZXJhbA== TGVhZ3Vl IHBhY2tldHM= IEluc3BlY3Rvcg== IEJlcmc= IGZyYXVkdWxlbnQ= IGNyaXRpY2l6ZQ== RnVu IGJsYW1pbmc= bmRyYQ== IHNsYXNo IEVzdG9u IHByb3Bvc2luZw== IHdoYWxlcw== IHRoZXJhcGlzdA== IHN1YnNldA== IGxlaXN1cmU= RUxE IENWRQ== IEFjdGl2aXR5 IGN1bG1pbg== c2hvcA== IERBWQ== aXNjaGVy IEFkbWlyYWw= IEF0dGFja3M= IDE5NTg= IG1lbW9pcg== IGZvbGRlZA== IHNleGlzdA== IDE1Mw== IExJ IHJlYWRpbmdz IGVtYmFycmFzc21lbnQ= IEVtcGxveW1lbnQ= d2FydA== Y2hpbg== IGNvbnRpbnVhdGlvbg== bGlh UmVjZW50bHk= IGR1ZWw= IGV2YWN1YXRpb24= IEthc2htaXI= IGRpc3Bvc2l0aW9u IFJpZw== IGJvbHRz IGluc3VyZXJz NDY3 TWV4 IHJldGFsaWF0aW9u IG1pc2VyeQ== IHVucmVhc29uYWJsZQ== cmFpbmluZw== SW1t IFBV ZW1lcg== IGdlbml0YWw= 44Kz IENhbmR5 IG9uaW9ucw== IFBhdHQ= bGluZXI= IGNvbmNlZGVk IGZh IGZvcmM= IEhlcm5hbmRleg== IEdlb2Zm ZGViaWFu IFRlYW1z IGNyaWVz IGhvbWVvd25lcnM= MjM3 QUJD IHN0aXRjaA== IHN0YXRpc3RpYw== IGhlYWRlcnM= IEJpb2xvZ3k= IG1vdG9ycw== IEdFTg== IExpcA== IGhhdGVz IGhlZWw= U2VsZg== aXBs RURJVA== b3J0aW5n IGFubm90 IFNwZWVjaA== b2xkZW1vcnQ= IEphdmFzY3JpcHQ= IExlQnJvbg== IGZvb3RwcmludA== IGZu IHNlaXp1cmVz bmFz aGlkZQ== IDE5NTQ= IEJlZQ== IERlY2xhcmF0aW9u IEthdGll IHJlc2VydmF0aW9ucw== TlI= ZmVtYWxl IHNhdHVyYXRlZA== IGJpYmxpY2Fs IHRyb2xscw== RGV2aWNl cGhvdG9z IGRydW1z 44OJ44Op44K044Oz TmlnaHQ= ZmlnaHRlcg== IEhhaw== cmliZXI= IGN1c2g= IGRpc2NpcGxpbmFyeQ== YmF1bQ== IEdI IFNjaG1pZHQ= aWxpYnJpdW0= IHNpeHR5 IEt1c2huZXI= cm90cw== IHB1bmQ= IFJhYw== IHNwcmluZ3M= IGNvbnZl QnVzaW5lc3M= RmFsbA== IHF1YWxpZmljYXRpb25z IHZlcnNlcw== IG5hcmNpc3M= IEtvaA== IFdvdw== IENoYXJsb3R0ZXN2aWxsZQ== ZWRv IGludGVycm9nYXRpb24= IFdvb2w= MzY1 QnJpYW4= IOKckw== IGFsbGVnZXM= b25kcw== aWRhdGlvbg== IEphY2tpZQ== eXU= IGxha2Vz IHdvcnRod2hpbGU= IGNyeXN0YWxz IEp1ZGE= IGNvbXByZWhlbmQ= IGZsdXNo IGFic29ycHRpb24= IE9D IGZyaWdodGVuZWQ= IENob2NvbGF0ZQ== TWFydGlu IGJ1eXM= IGJ1Y2tz IGFwcGVsbA== IENoYW1waW9uc2hpcHM= IGxpc3RlbmVy IERlZmVuc2l2ZQ== IGN6 dWRz IE1hdGU= IHJlcGxheQ== IGRlY29yYXRlZA== IHN1bms= IFZJUA== IEFuaw== IDE5NQ== YWFhYQ== Tm9ib2R5 IE1pbGs= IEd1cg== IE1r IFNhcmE= IHNlYXRpbmc= IFdpZA== VHJhY2s= IGVtcGxveXM= IGdpZ2FudGlj QVBQ 44Kn aW52ZW50b3J5 IHRvd2Vs YXRjaGU= bGFzdGluZw== IFRM IGxhdGVuY3k= IGtuZQ== QmVy bWVhbmluZw== IHVwaGVsZA== IHBsYXlncm91bmQ= IG1hbnQ= U2lkZQ== IHN0ZXJlbw== IG5vcnRod2VzdA== IGV4Y2VwdGlvbmFsbHk= IHJheXM= IHJlY3VycmluZw== RHJpdmU= IHVwcmlnaHQ= IGFiZHVjdA== IE1hcmF0aG9u IGdvb2RieWU= IGFscGhhYmV0 aHA= IGNvdXJ0cm9vbQ== cmluZ3Rvbg== b3RoaW5n VGFn IGRpcGxvbWF0cw== IGJhcmJhcg== IEFxdWE= MTgz MzMzMw== IG1hdHVyaXR5 IGluc3RhYmlsaXR5 IEFwYWNoZQ== ID09PQ== IGZhc3Rpbmc= IEdyaWQ= TW9kTG9hZGVy IDE1Mg== QWJz IE9wZXJhdGluZw== ZXR0aQ== IGFjcXVhaW50 RG9ubmVsbA== IEtlbQ== IEZvcmdl IGFybW9yZWQ= TWls IHBoaWxvc29waGVycw== aW52ZXN0 UGxheWVycw== 4og= IG15cmlhZA== IGNvbXJhZGVz Um90 IHJlbWVtYmVyaW5n IGNvcnJlc3BvbmRz IHByb2dyYW1tZXJz IEx5bm4= IG9saWc= IGNvaGVyZW50 eW5jaHJvbg== IENoZW1pY2Fs IGp1Z2c= cGFpcg== cG9zdHM= RXll IElubmVy IHNlbWVzdGVy b3R0ZXN0 IEVtaXJhdGVz cmljYW5lcw== b3JvdXNseQ== bWl0cw== IFdpcw== IGRvZGdl bG9jYXRpb24= IGZhZGVk QW1hem9u IFByb2NlZWQ= IElORk8= am91cm5hbA== IFRydWNr VGVu IDIxNw== IHN0YXR1dGVz bW9iaWxl IFR5cGVz UmVjb21t YnVzdGVy cGV4 IGxlZ2VuZHM= IGhlYWRhY2hl ZmFjZWQ= IFdpRmk= aWZ0eQ== IEhFUg== IGNpcmN1aXRz RVJST1I= MjI2 b2xpbg== IGN5bGluZGVy b3NwYWNl aWtlcnM= UHJlbQ== UXVhbnQ= IGNvbmZsaWN0aW5n IHNsaWdodGVzdA== IGZvcmdlZA== aW9uYWdl U3RlcGhlbg== IEt1Yg== IE9wcG9ydHVu IEhlYWw= IGJsbw== IHJ1bGVycw== IGh1aA== IHN1Ym1hcmluZQ== Znk= YXNzZXI= IGFsbG93YW5jZQ== IEthc2ljaA== IFRhcw== IEF1c3RyYWxpYW5z Rm9yZ2VNb2RMb2FkZXI= IOKGkQ== IE1hdHJpeA== YW1pbnM= IDEyMDA= IEFjcXU= MjM2 RG9jdW1lbnQ= IEJyZWFraW5n MTkz IFN1YnN0 IFJvbGxlcg== IFByb3BlcnRpZXM= IE5J dGllcg== IGNydXNoaW5n IGFkdm9jYXRpbmc= RnVydGhlcm1vcmU= a2VlcGVycw== IHNleGlzbQ== eGQ= IGNhbGxlcg== IFNlbnNl Y2hpZXZl IFRG IGZ1ZWxlZA== IHJlbWluaXNjZW50 IG9ic2Vzcw== dXJzdA== IHVwaG9sZA== IEZhbnM= aGV0aWNz IOKX IEJhdGg= IGJldmVyYWdl IG9zY2lsbA== MjU0 IHBvbGVz IGdyYWR1YWw= IGV4dGluZw== IFN1ZmY= IFN1ZGRlbmx5 IGxpa2luZw== IDE5NDk= dW5jaWF0aW9u YW1pbmF0aW9u IE9tYXI= IExW IENvbnNlcXVlbnRseQ== IHN5bnRoZXM= IEdJRg== IHBhaW5z IGludGVyYWN0aW5n dW91c2x5 aW5jcmU= IHJ1bW9y IFNjaWVudG9sb2d5 MTk3 IFppZw== IHNwZWxsaW5n IEFTUw== IGV4dGluZ3U= bXNvbg== IGdo IHJlbWFya2Vk IFN0cmF0ZWdpYw== IE1PTg== 5aU= Z2Fl IFdIQVQ= RXJpYw== IENhbXB1cw== IG1ldGhhbmU= IGltYWdpbg== SlVTVA== IEFsbQ== WFQ= aXE= IFJTUw== IHdyb25nZG9pbmc= YXR0YQ== IGJpZ290 IGRlbW9uc3RyYXRvcnM= IENhbHZpbg== IFZpbGxh IG1lbWJyYW5l IEF3ZXNvbWU= IGJlbmVmaWM= MjY4 IG1hZ25pZmljZW50 IExvdHM= R3JlZw== IEJvcmlz IGRldGFpbmVlcw== IEhlcm1hbg== IHdoaXNwZXJlZA== IGF3ZQ== UHJvZmVzc29y ZnVuZGluZw== IHBoeXNpb2xvZ2ljYWw= IERlc3RydWN0aW9u IGxpbWI= IG1hbmlwdWxhdGVk IGJ1YmJsZXM= IHBzZXVk IGh5ZHJh IEJyaXN0b2w= IHN0ZWxsYXI= IEV4cGFuc2lvbg== IEtlbGw= IEludGVyZXN0aW5nbHk= IG1hbnM= IGRyYWdnaW5n IGVjb2xvZ2ljYWw= IEZpdA== IGdlbnQ= IGJlbmVmaXRlZA== IEhhaXRp IHBvbHln 44OO IDIwMzA= IHByb3c= IHJlY29uc3RydWN0aW9u IHdhc3Q= IHBzeWNoaWM= IEdyZWVrcw== SGFuZGxlcg== MTYy IFB1bHNl IHNvbGljaXQ= IHN5cw== IGluZmx1eA== IEdlbnRsZQ== cGVyY2VudA== IHByb2xpZmVyYXRpb24= IHRheGFibGU= IGRpc3JlZ2FyZA== IGVzY2FwaW5n IGdpbmdlcg== IHdpdGhzdGFuZA== IGRldmFzdGF0ZWQ= IERldw== c2VyaWVz IGluamVjdGVk ZWxhaWRl IHR1cm5vdmVy aGVhdA== mYI= SGFwcHk= IFNpbGVudA== 44Kt aXZpc20= IGlycmF0aW9uYWw= QU1B IHJlZWY= cnVi IDE2Mg== IGJhbmtlcnM= IEV0aGljcw== dnY= IGNyaXRpY2lzbXM= S24= MTg2 TW92aWU= IFRvcmllcw== IG5vb2Q= IGRpc3RvcnRpb24= RmFsc2U= b2RvcmU= IHRhc3R5 UmVzZWFyY2g= IFVJRA== LSk= IGRpdm9yY2Vk IE1V IEhheWVz IElzbg== aWFuaQ== IEhR ICIj aWduYW50 IHRyYXVtYXRpYw== IExpbmc= SHVu IHNhYm90 b25saW5l cmFuZG9t IHJlbmFtZWQ= cmFyZWQ= S0E= ZGVhZA== w6l0 IEFzc2lzdGFuY2U= IHNlYWY= KysrKysrKys= IHNlbGRvbQ== IFdlYmI= IGJvb2xlYW4= dWxldA== IHJlZnJhaW4= IERJWQ== cnVsZQ== IHNodXR0aW5n IHV0aWxpemluZw== bG9hZGluZw== IFBhcmFt Y29hbA== b290ZXI= IGF0dHJhY3Rpbmc= IERvbA== IGhlcnM= YWduZXRpYw== IFJlYWNo aW1v IGRpc2NhcmRlZA== IFBpcA== MDE1 w7xy IG11Zw== SW1hZ2luZQ== Q09M IGN1cnNlZA== IFNob3dz IEN1cnRpcw== IFNhY2hz c3BlYWtpbmc= IFZpc3Rh IEZyYW1ld29yaw== b25nbw== IHN1YnJlZGRpdA== IGNydXM= IE92YWw= Um93 Z3Jvd2luZw== IGluc3RhbGxtZW50 IGdsYWM= IEFkdmFuY2U= RUNL IExHQlRR TEVZ IGFjZXQ= IHN1Y2Nlc3NpdmU= IE5pY29sZQ== IDE5NTc= UXVvdGU= IGNpcmN1bXN0YW5jZQ== YWNrZXRz IDE0Mg== b3J0aXVt IGd1ZXNzZWQ= IEZyYW1l IHBlcnBldHJhdG9ycw== IEF2aWF0aW9u IEJlbmNo IGhhbmRj QXA= IDE5NTY= MjU5 cmFuZA== TmV0TWVzc2FnZQ== ZGlu dXJ0bGVz aGln IFZJSUk= ZmZpdGk= IFN3b3Jkcw== YmlhbA== IGtpZG5hcHBpbmc= ZGV2aWNl IGJhcm4= IEVsaQ== YXVjYXM= U2VuZA== Q29uc3RydWN0ZWQ= IMK9 IG5lZWRsZXM= IGFkdmVydGlzZW1lbnRz IHZvdQ== IGV4aGliaXRlZA== IEZvcnRyZXNz QXNr QmVycnk= VFlQRQ== IGNhbmNlcnM= dW1waW5n IFRlcnJpdG9yeQ== IHBydWQ= IG5hcw== IGF0aGVpc3Q= IGJhbGFuY2Vz 44Gf IFNoYXdu JiY= IGxhbmRzYw== IFJHQg== IHBldHR5 IGV4Y2VsbGVuY2U= IHRyYW5zbGF0aW9ucw== IHBhcmNlbA== IENoZXY= RWFzdA== IE91dHB1dA== aW1p IGFtYmllbnQ= IFRocmVhdA== IHZpbGxhaW5z IDU1MA== SUNB IHRhbGxlcg== IGxlYWtpbmc= Y3Vw IHBvbGlzaA== IGluZmVjdGlvdXM= IEtD IEBA YmFja2dyb3VuZA== IGJ1cmVhdWNyYWN5 IFNhaQ== dW5sZXNz aXRpb3Vz IFNreXBl QXRs SURFTlQ= MDA4 IGh5cG9jcg== IHBpdGNoZXJz IGd1ZXNzaW5n IEZJTkFM QmV0d2Vlbg== IHZpbGxhZ2Vycw== IDI1Mg== ZmFzaGlvbg== IFR1bmlz QmVo IEV4Yw== IE1JRA== Mjg4 IEhhc2tlbGw= MTk2 IE5PUg== IHNwZWNz IGludmFyaQ== IGdsdXQ= IENhcnM= IGltcHVsc2U= IGhvbm9ycw== Z2Vs IGp1cmlzZGljdGlvbnM= IEJ1bmRsZQ== dWxhcw== Q2FsaWZvcm5pYQ== IEluY3JlYXNl IHBlYXI= IHNpbmdsZXM= IGN1ZXM= IHVuZGVyd2VudA== IFdT IGV4YWdnZXJhdGVk IGR1YmlvdXM= IGZsYXNoaW5n TE9H KV0u Sm91cm5hbA== dGc= VmFu IElzdGFuYnVs IEluc3A= IEZyYW5rZW4= RHJhdw== IHNhZG5lc3M= IGlyb25pYw== IEZyeQ== eGM= IDE2NA== aXNjaA== V2F5 IFByb3Rlc3RhbnQ= aG9ybg== IHVuYWZm IFZpdg== aWxsYXM= IFByb2R1Y3Rpb25z IEhvZ2Fu IHBlcmltZXRlcg== IFNpc3RlcnM= IHNwb250YW5lb3Vz IGRvd25zaWRl IGRlc2NlbmRhbnRz IG9ybg== d29ybQ== SmFwYW5lc2U= IDE5NTU= IDE1MQ== IERvaW5n ZWxzZW4= dW1ibGVz IHJhZGljYWxseQ== IERydW0= IEJhY2g= IGxpYWJpbGl0aWVz IE9C IEVsZW1lbnRhcnk= IG1lbWU= eW5lcw== IGZpbmdlcnByaW50 IEdyYWI= IHVuZGVydGFrZQ== TWVtYmVycw== IFJlYWRlcg== IFNpbXM= Z29k IGh5cG90aGV0aWNhbA== c2NpZW50 IEFK IGNoYXJpc20= IGFkbWlzc2lvbnM= IE1pc3NpbGU= dHJhZGU= IGV4ZXJjaXNpbmc= IEJhY2tncm91bmQ= V3JpdHRlbg== IHZvY2Fscw== d2hldGhlcg== IHZp IFdpbm5lcg== IGxpdHRlcg== IFNob290aW5n U1RFTQ== 44Kh IEFGTA== IHZhcmlhYmlsaXR5 IGVhdHM= IERQUw== YnJvdw== IGVsZXBoYW50cw== IHN0cmF0 IMU= IHNldHRsZXJz TWF0dGhldw== IGluYWR2ZXJ0 SEk= IElNRg== IEdvYWw= IG5lcnZlcw== Sm9obnNvbg== ZXll YWJsaXNobWVudA== VGh1cnNkYXk= QklMSVRZ SGFk YW1vdG8= aGV0YW1pbmU= ZXBz IG1pdG9jaG9uZA== IGNvbXByZXNzZWQ= IFRyZXZvcg== IEFuaW1hbHM= VG9vbA== TG9jaw== IHR3ZWFr IHBpbmNo IGNhbmNlbGxhdGlvbg== UG90 IGZvY2Fs IEFzdHJvbg== MTcz IEFTQw== IE9USEVS dW1uaQ== IGRlbWlzZQ== ZGw= 2YU= U2VtaXRpc20= IGNyYWNraW5n IGNvbGxhYm9yYXRpdmU= IGV4cGxvcmVz c3Fs IGhlcmJz IGNvbmZpZ3VyYXRpb25z bWlz IFJlc3VsdA== YWNleQ== IFNtb2tl IHNhbmN0 ZWxpYQ== IGRlZ2VuZXI= IGRlZXBlc3Q= IHNjcmVhbWVk IG5hcA== U29mdHdhcmU= IFNUQVI= RUY= IFhpbg== c3BvbnNvcmVk bWFuc2hpcA== MjMz IHByaW1hcmllcw== IGZpbHRlcmluZw== IGFzc2VtYmxl bWls IE15ZXJz Ym93cw== IHB1bmNoZWQ= TWlj IGlubm92YXRpb25z IGZ1bmM= YW5kbw== IGZyYWNraW5n IFZ1bA== 0L7Q b3Nob3A= IEltbXVu IHNldHRsaW5n IGFkb2xlc2NlbnRz IHJlYnVpbGRpbmc= IHRyYW5zZm9ybWluZw== IHBhcm9sZQ== IGhhcmJvcg== IGJvb2tpbmc= b3Rpb25hbA== b25nZXZpdHk= IFlv YnVn IGVtZXJnZXM= IE1ldGhvZHM= IENodQ== UHJlcw== IER1bmdlb25z IHRyYWlsaW5n IFJ1bQ== IEh1Z2g= 5aSp IEVyYQ== IEJhdHRsZXM= UmVzdWx0cw== IFRyYWRpbmc= IHZlcnNh Y3Nz YXhpZXM= aGVldA== IGdyZWVk MTk4OQ== IGdhcmRlbnM= IGNvbnRpbmdlbnQ= UGFyaw== IExlYWZz aG9vaw== cm9iZQ== IGRpcGxvbWFjeQ== IEZ1ZWw= IEludmFzaW9u IHVwZ3JhZGluZw== TWFsZQ== IGVsaWM= IHJlbGVudGxlc3M= IENvdmVuYW50 YXBlc2g= IFRyb3A= VHk= cHJvZHVjdGlvbg== YXJ0eQ== IHB1bmNoZXM= YWtv Y3ljbG9wZWRpYQ== IFJhYmJpdA== IEhETUk= IDE0MQ== IGZvaWw= SXRlbUltYWdl IEZH IGltcGxlbWVudGF0aW9ucw== IFBvbQ== aXh0dXJlcw== IGF3YWl0 IDMzMA== YW11cw== IHVtYnJlbGxh IGZvcmVzZWU= c2VwYXI= IGNpcmN1bWNpc2lvbg== IHBlcmlwaGVyYWw= U2F5 IEV4cGVydA== SW5j IHdpdGhkcmV3 IEFuZGVycw== ZnJpZWQ= IHJhZGlvYWN0aXZl IE9wZW5pbmc= IGJvYXJkaW5n IE5E IG92ZXJ0aHJvdw== QWN0aXY= V1A= IEFjdHM= 15k= IG1vdGlvbnM= dmlj IE1pZ2h0eQ== IERlZmVuZGVy YWVy IHRoYW5rZnVs IEtpbGxpbmc= IEJyaXM= bW9pbA== IHByZWRpY3Rpbmc= MjY2 Y2hvaWNl IGtpbGxlcnM= IGluY3Vi IENoZXN0 YXRoZXJpbmc= IHByb2NsYWltZWQ= Zmxvd2Vy b3Nzb20= dW1ibGVkb3Jl IEN5Y2xpbmc= IE9jY3VweQ== QUdFUw== UGVu IFl1Zw== IHBhY2thZ2Vk IGhlaWdodGVuZWQ= Y290 c3RhY2s= Q29uZA== IHN0YW1wcw== bWFnZQ== IHBlcnN1YWRlZA== IGVuc2w= IENhcmRpbmFs IHNvbGl0YXJ5 IHBvc3Nlc3Npbmc= IENvcms= IGV2aWQ= IFRheQ== IGJsdWVz IGV4dHJlbWlzbQ== IGx1bmFy IGNsb3du VGVjaG4= IGZlc3RpdmFscw== IFB2UA== IExhcg== IGNvbnNlcXVlbnRseQ== cHJlc2VudA== IHNvbWVkYXk= 546L IE1ldGVvcg== IHRvdXJpbmc= Y3VsdHVyZQ== IGJlYWNoZXM= U2hpcA== Y2F1c2U= IEZsb29k 44Ov IHB1cml0eQ== dGhvc2U= IGVtaXNzaW9u Ym9sdA== IGNob3Jk IFNjcmlwdHVyZQ== THU= ICR7 Y3JlYXRlZA== T3RoZXJz MjU4 IGVsZW1lbnRhbA== IGFubm95ZWQ= IEFF ZGFu IFNhZw== UmVzZWFyY2hlcnM= IGZhaXJ5 4oCT4oCT PT09PT09PT09PT09 U21hcnQ= R0dHRw== IHNrZWxldG9ucw== IHB1cGlscw== bGlua2Vk IHVyZ2VuY3k= ZW5hYmxlZA== IEZ1Y2s= IGNvdW5jaWxs cmFi VUFM VEk= IGxpZmVz IGNvbmZlc3NlZA== QnVn IGhhcm1vbg== IENPTkZJRw== IE5ldXRyYWw= RG91Ymxl IHN0YXBsZQ== IFNIQQ== QnJpdGlzaA== IFNOUA== QVRPUg== b2Nv IHN3aW5naW5n Z2V4 b2xlb24= cGxhaW4= IE1pc3Npbmc= IFRyb3BoeQ== dmFyaQ== cmFuY2g= IDMwMQ== NDQw MDAwMDAwMDAwMDAwMDAwMA== IHJlc3RvcmluZw== IGhhdWw= dWNpbmc= bmVyZw== IGZ1dHVyZXM= IHN0cmF0ZWdpc3Q= cXVlc3Rpb24= IGxhdGVyYWw= IEJhcmQ= IHNvcg== IFJob2Rlcw== IERvd250b3du Pz8/Pz8t IExpdA== IEJlbmVk IGNvaWw= c3RyZWV0 IFBvcnRhbA== RklMRQ== IEdydQ== Kiw= MjMx bmV1bQ== IHN1Y2tlZA== IHJhcHBlcg== IHRlbmRlbmNpZXM= IExhdXJlbg== Y2VsbGFuZW91cw== MjY3 IGJyb3dzZQ== IG92ZXJj aGVhZGVy b2lzZQ== IGJlZXQ= IEdsZQ== U3RheQ== IG11bQ== IHR5cGVk IGRpc2NvdW50cw== VGFsaw== IE9n ZXhpc3Rpbmc= IFNlbGw= dXBo Q0k= IEF1c3RyaWFu IFdhcm0= IGRpc21pc3NhbA== IGF2ZXJhZ2Vz Y2FtZXJh IGFsbGVnaWFuY2U= TEFO PSIj IGNvbW1lbnRhdG9ycw== IFNldHRpbmc= IE1pZHdlc3Q= IHBoYXJtYWM= IEVYUA== IHN0YWlubGVzcw== Q2hpY2Fnbw== IHRhbg== MjQ0 IGNvdW50cnlzaWRl IFZhYw== Mjk1 IHBpbm5lZA== IGNyaXNlcw== IHN0YW5kYXJkaXplZA== VGFzaw== IEphaWw= IERvY2tlcg== Y29sb3JlZA== Zm9ydGg= In0s IHBhdHJvbnM= IHNwaWNl IG1vdXJu IE1vb2Q= IGxhdW5kcnk= IGVxdWlw IE1vbGU= eWxs IFRIQw== bmF0aW9u IFNoZXJsb2Nr IGlzc3U= IEtyZQ== IEFtZXJpY2Fz IEFBQQ== IHN5c3RlbWF0aWNhbGx5 IGNvbnRyYQ== IFNhbGx5 IHJhdGlvbmFsZQ== IGNhcnJpYWdl IHBlYWtz IGNvbnRyYWRpY3Rpb24= ZW5zYXRpb24= IEZhaWx1cmU= IHByb3Bz IG5hbWVzcGFjZQ== IGNvdmU= ZmllbGRz 44KL IHdvb2w= IENhdGNo IHByZXN1bWVk IERpYW5h cmFnb24= aWdp IGhhbW0= IHN0dW50 IEdVSQ== IE9ic2VydmF0b3J5 IFNob3Jl IHNtZWxscw== YW5uYWg= IGNvY2twaXQ= IER1dGVydGU= ODUw IG9wcHJlc3NlZA== YnJlYWtlcg== IENvbnRyaWJ1dA== IFBlcnU= IE1vbnNhbnRv IEF0dGVtcHQ= IGNvbW1hbmRpbmc= IGZyaWRnZQ== IFJpbg== IENoZXNz dWFsaXR5 IG9s UmVwdWJsaWNhbg== IEdsb3J5 IFdJTg== Li4uLi4uLg== YWdlbnQ= cmVhZGluZw== IGluaA== Sm9uZXM= IGNsaWNrcw== YWxhbg== IFtdOw== IE1hamVzdHk= IENlZA== b3B1cw== YXRlbA== w6o= QVJD IEVjdWFkb3I= 44Og IEt1cm8= IHJpdHVhbHM= IGNhcHRpdmU= IG91bmNl IGRpc2FncmVlbWVudA== IHNsb2c= ZnVlbA== UGV0 TWFpbA== IGV4ZXJjaXNlZA== IHNvbGlj IHJhaW5mYWxs IGRldm90aW9u IEFzc2Vzc21lbnQ= IHJvYm90aWM= b3B0aW9ucw== IFJQ IEZhbWlsaWVz IEZsYW1lcw== IGFzc2lnbm1lbnRz MDA3 YWtlZG93bg== IHZvY2FidWxhcnk= UmVpbGx5 IGNhdmFs Z2Fycw== IHN1cHByZXNzZWQ= IFNFVA== IEpvaG5z IHdhcnA= YnJva2Vu IHN0YXR1ZXM= IGFkdm9jYXRlZA== IDI3NQ== IHBlcmls b21vcnBo IEZlbWlu cGVyZmVjdA== IGhhdGNo TGli NTEy IGxpZmVsb25n MzEz IGNoZWVrcw== IG51bWJlcmVk IE11Zw== Qm9keQ== cmF2ZWw= V2VpZ2h0 IEphaw== IEhlYXRo IGtpc3Npbmc= IEpVU1Q= IHdhdmluZw== dXBsb2Fk IGluc2lkZXI= IFByb2dyZXNzaXZl IEZpbHRlcg== dHRh IEJlYW0= IHZpb2xlbnRseQ== aXBhdGlvbg== IHNrZXB0aWNpc20= IDE5MTg= IEFubmll IFNJ IGdlbmV0aWNz IG9uYm9hcmQ= YXRs IEZyaWVkbWFu IEJyaQ== Y2VwdGl2ZQ== IHBpcmF0ZQ== IFJlcG9ydGVy Mjc4 IG15dGhvbG9neQ== IGVjbGlwc2U= IHNraW5z IGdseXBo aW5naGFt RmlsZXM= Q291cg== d29tZW4= IHJlZ2ltZXM= IHBob3RvZ3JhcGhlZA== S2F0 IE1BWA== T2ZmaWNpYWxz IHVuZXhwZWN0ZWRseQ== IGltcHJlc3Npb25z RnJvbnQ= Ozs7Ozs7Ozs= IHN1cHJlbWFjeQ== IHNhbmc= IGFnZ3JhdmF0ZWQ= IGFicnVwdGx5 IFNlY3Rvcg== IGV4Y3VzZXM= IGNvc3Rpbmc= aWRlcHJlc3M= U3RhY2s= IFJOQQ== b2JpbA== IGdob3N0cw== bGRvbg== YXRpYmlsaXR5 VG9waWNz IHJlaW1idXJzZQ== IEhN IERlZw== IHRoaWVm eWV0 b2dlbmVzaXM= bGVhbmluZw== IEtvbA== IEJhc2tldGJhbGw= IGZp IFNlZWluZw== IHJlY3ljbGluZw== IFst Q29uZ3Jlc3M= IGxlY3R1cmVz UHN5 IG5lcA== IG1haWQ= IG9yaWVudGVk QVg= IHJlc3BlY3RmdWw= cmVuZQ== Zmx1c2g= IFVubG9hZGVk cmVxdWVzdA== Z3JpZA== IEFsdGVybmF0aXZlbHk= IEh1Z28= IGRlY3JlZQ== IEJ1ZGRoaXNt YW5kdW0= QW5kcm9pZA== IENvbmdv IEpveWNl IGFja25vd2xlZGdpbmc= aGVzaXZl IFRvbW9ycm93 IEhpcm8= dGhyZW4= IE1hY2Vk IGhvYXg= IEluY3JlYXNlZA== IFByYWRlc2g= V2lsZA== X19fX19f MTYx IGF1bnQ= IGRpc3RyaWJ1dGluZw== IFR1Y2tlcg== IFNTTA== IFdvbHZlcw== QnVpbGRpbmc= b3VsdA== IEx1bw== IFlhcw== IFNwaXI= IFNoYXBl IENhbWJvZA== IElQdg== IG1s IGV4dHJhZA== Mzkw IFBlbm55 ZHJlYW0= IHN0YXRpb25lZA== b3B0aW9uYWw= ZXdvcnRoeQ== Ljwv IHVuZGVydGFraW5n IGNoaWNrZW5z IHN0aW11bGk= IEVsc2U= aWdhdG9ycw== IEJlZ2lubmluZw== Y3Rvcnk= IHByZXBhcmVz IGRlbHRh IHZpY2luaXR5 dG9vbA== IHdvcmtzaG9wcw== TUh6 IGFjY3VzYXRpb24= IGhpc3Rvcmllcw== cm9wb2xpcw== IENodXJjaGlsbA== IG5lb24= IGJhZmY= ZGllcw== bWF5YmU= IOijj+immumGkg== IHN5bXB0b20= RUNI IE1hbnVlbA== IGJhbmFuYQ== IEhC ICoqKio= IEtvcmVhbnM= Y29sbA== RkI= IHByYXlpbmc= IENhbm5vdA== IE1pbGU= IGVtYnJhY2luZw== IFNpbGs= Mzkz b3RlcnM= RkQ= IGRheWxpZ2h0 YWxpYXM= IEJyaWdhZGU= IEhhbm5haA== IGNsZXJneQ== IHNvdXRoZWFzdA== IGFsY29ob2xpYw== IHByb3Bvc2Vz bGl2aW9u IGNhbGN1bGF0aW5n IHN0aW11bGF0ZQ== IHNwbGl0dGluZw== ZWlnaHQ= IEluZHk= cGxheXM= IFBpaw== IGRvbWVzdA== IGZvcmdpdmVuZXNz IFJpbmdz cGF0aWVudA== a2luc29u TW9udA== aWdpYmxl OyI= IHBlcmlvZGljYWxseQ== YW1tYWQ= IEJyaXR0 cGFyZA== IGFyYml0cmF0aW9u IFNjaG5laWRlcg== IENvcnBvcmF0ZQ== IE1heWE= IHNuYWtlcw== YXVt IGJsYXN0ZWQ= IG15c3Rlcmllcw== IHJldml2ZQ== b2NhbXA= IERvZGdl IE9wZXJh Mjc5 IG9ycGhhbg== IHNwZWNpZmllcw== IE1ldHM= RHVyYXRpb24= SGVu IGZpcmV3b3Jrcw== IHByb3NlY3V0ZQ== IFRpbGxlcnNvbg== ZHA= dXNhZ2U= bGluZXNz IERlYmlhbg== IDIyNA== cmlzZXM= IEluZmVjdA== YXRyYQ== IFJS IExvcg== ZGlmZg== IENoYXJsZXN0b24= IGFjb3VzdGlj IGFtdXNl MzMw IGNlcg== IFRhYw== IFsr IGNhcmRpYWM= IFJlc3RhdXJhbnQ= ZXJneQ== IGZ1eno= IGJpdGVz IGhhemFyZG91cw== IGJyaWdodGVy cmFucw== IFN0ZXBoYW5pZQ== ZXh0cmE= UkVU IENocmlzdGluZQ== IFN1ZQ== c3RhdGVtZW50 IGJvbHN0ZXI= IGFudGl0 UmFkaW8= QklU 44Kw IHZpc2lvbnM= IENvbmNlcHQ= IGlubGluZQ== IFBoaWxvc29waHk= aXNhbnM= IElydmluZw== w6M= dGFraW5n IGluY29uc2lzdA== IEt1bWFy IGxpZw== IFNjaHVtZXI= IFJlZ3VsYXRpb25z IEh6 dGhybw== IFZvbGRlbW9ydA== IE1FRA== IEZyZWRlcmljaw== UGFk MjIx IGFsbGVnaW5n IENvbW11bmljYXRpb24= IDE2Nw== IGZvcmVjYXN0cw== IHNwaWRlcnM= T3JnYW4= IFBhcnRpY2lwYW50cw== IE9wcw== ZGVzaWdu Q2xvc2U= IGZhY3Rv IGJvbWJlcnM= cmVzaXN0YW50 YXRlZ29yaWVz U2Nob29s IGhvbWV3b3Jr IGNvcnJv VHVlc2RheQ== IEJyZW5kYW4= IE1Y IFRT IFN0cmk= IHN0YWtlaG9sZGVycw== IE1pbGxlbm5pdW0= IHRyYW5zZmVycmluZw== SnVk IHRhYw== IDE2MDA= IFNESw== cmI= IGludGVycHJldGF0aW9ucw== IFNH IHVwc3RhaXJz IEhhcnZlc3Q= IHZhZ2luYQ== IGluZ2VzdA== eGY= IE9yaW9u IEpvZXk= IHNhbmR3aWM= IGltbW9ydGFs IGZsaXBwZWQ= b3J0ZXg= dGhyZWF0ZW5pbmc= IHNuaXBlcg== IGNvbnZlcnRz IGluc3RhbGxhdGlvbnM= IEJ1bGdhcg== b3JzY2hl bWFpbHM= IGx1cmU= IG5hcnJvd2x5 IGdyZW5hZGU= IEdpbmc= IHVuZGVyd2Vhcg== LS0tLS0tLS0tLS0tLS0= IGNoYXNlZA== IFZBTA== IHBhcmVudGluZw== IEhhbWI= IEJsYXo= IGFuYXJjaGlzdA== IE1lZGlhbg== IFByb2dyYW1z zr0= IG9iag== IE5va2lh b3JtYW4= YW5xdQ== YXRpc20= b3Bh IGZ1bGZpbGxpbmc= IHB1cHB5 IGVudGl0 IFNlYmFzdGlhbg== IHNob290ZXJz IHJpY2hlcg== 6KE= IHRlbXB0ZWQ= IEFUVA== IENW IHRvcmU= UmVzb3VyY2U= IERldmlscw== NDA4 aW5hdGlvbmFs IGFzc3VyYW5jZQ== IERhcnJlbg== IHdoaWNoZXZlcg== cG9zdXJl IGZ1cnk= U3RvY2s= IHVuaXZlcnNhbGx5 cmVzcG9uc2U= IG9haw== IHdvcmtsb2Fk IENvcm5lcg== ZWVsZQ== Ii4uLg== IGRlcHJpdmVk a293c2tp IGNhc3Rz IGFmZmlsaWF0aW9u IEFjaA== IEFza2Vk YXRoZQ== IGxhY3Q= IFRodQ== cm0= IGFpcmxpbmVz IG5vdGlvbnM= Rm9ybWF0 IEZBQQ== 44OK ZHJpdmVy IHRyYW5zY2VuZA== U2V0dGluZ3M= IFByb3NlY3V0 IHNwaW5hbA== IGRlZmF1bHRz Rks= IHByZWZlcnM= cmVuZGVyZWQ= dGh1cw== ZmlsbQ== IHRpZ2Vy IFNwaWNlcg== cmVjb2du IFJ1Z2J5 TmV0d29yaw== IHBpdHk= IGNvbXBhcnRtZW50 Y2FzdGVycw== IE1vbnJvZQ== IDcyMA== IGNvcnJlY3Rpb25z IGRvcGFtaW5l IEFa Q3V0 IHJvb21t IHNwZWN1bGF0ZQ== SGFzaA== IHJlc3RyaWN0aXZl MTExMQ== cmVkaWJsZQ== b25lbA== IHJhbXBhbnQ= cmVwb3J0ZWQ= IFN1aXRl IE1pbmltdW0= YWx5cw== YXphcmQ= bG9vcA== IGxlbnQ= c2hh IHZhbmRhbA== bWVudQ== IEJvZWhuZXI= IG5hcnJhdGl2ZXM= IGF1dGhlbnRpY2l0eQ== MjY5 YW5pYw== ZHV0eQ== Mjg1 IHRoYW5rZWQ= IGJldHJheWVk bGlmdA== IHNvdXRod2VzdA== IERleHRlcg== IEJvZA== IGtleXdvcmRz QXZlcmFnZQ== RElT IGV0aG5pY2l0eQ== ISks IE5hdGlvbmFscw== 4bk= IFRhaA== aW94aWQ= IHdpZGdldA== IHBhc3Rh IGJpbGxpbmc= IHRyaWxvZ3k= IExpbmVz IHNuaWZm IG5lcGhldw== TGF0ZQ== IHByaW5jaXA= IExvb3A= IE1hcnhpc3Q= IGRpc3NvbHZlZA== IGNvbnRleHRz IEFtb3VudA== IFNwaWtl IHRvdGFscw== IG9yZ2FuaXplcg== IHVwcmlzaW5n c2hpcHM= WVk= IE5vcnRoZWFzdA== bW9uZXk= Z3JhZGF0aW9u IGdvYWxrZWVwZXI= IEhlYXI= IHN0ZWFr IEJ1enpGZWVk IHNvbGVtbg== IFNjYW5k IHBvcHBpbmc= IGFkaGVyZQ== IEFsbGVn Ynl0ZQ== IFdvbHZlcg== IHVuaW4= IHJlY29s aXR1ZA== IG1pbWlj aWJ1cw== IHByZWRpY3Rz IEtlZXBlcg== aWF0aW5n IGRlY2VwdGlvbg== IGxlYXJudA== IGRpYXJ5 IGNvbmRpdGlvbmFs IHJlbGlj IGludm9rZQ== aWVuY2Vk 5Yg= IFBvbnQ= IGNlbGxwaG9uZQ== IHNwZWVkaW5n IHRhY2tsaW5n IG51ZGU= b3BlbmVk IE1hbmFmb3J0 IDE5NTI= IG1ham9ycw== IFNpbGVuY2U= IGxvZ2lzdGljcw== IHdlaWdodGVk IFBzeWNoaWF0 IjpbIg== IHNpY2tuZXNz IGRpdmlkZW5kcw== em9u UmVsZWFzZQ== IEtleXM= IEljaA== IGVueg== IEZlcm5hbmQ= IM6x IG1lYW5pbmdz IHBlbm55 IHN0ZXJu IGxhcg== IFB1Ymxpc2hlZA== IGJhY2tkcm9w S2lt IFN5bnQ= IGRlYnV0ZWQ= d20= IElzbGU= IHJlZ3VsYXRpbmc= b3R0aQ== IFNjaG9sYXJz aWNlc3Rlcg== IENoZWY= IHBvcHM= IExhdW5jaGVy IFZhcmlvdXM= IGNvbW1lbnRpbmc= b3NsYXY= ZW56aWU= IHJpdmFscnk= 4oKs UmVhbGx5 IG9yYw== IGJlYW4= IEp1ZHk= Tm90aWNl IEJpa2U= P10= IHJlbnRlZA== c3Rlbg== IGZvcmVmcm9udA== IEJhbGR3aW4= IHlpZWxkZWQ= dGFpbHM= UHJpbWU= IFNvdXJjZXM= aWNhdG9y U2Vhbg== IG1hcmNoaW5n T3V0cHV0 IEp1bmdsZQ== IHJlc2lkZQ== enpsZQ== IEFuZHJld3M= IHRvcnF1ZQ== QmFzaWM= QWN0dWFsbHk= c3RyYXA= cGVudGVy IGV4YW1z IFlh IDE1OQ== IERlY2lzaW9u IHJhbnNvbQ== ZXRlZW50aA== ZW5zaW5n MjEz IHN1bnNldA== NDA0 IFJhcGlk IEhlaW4= IEFib3JpZ2luYWw= IG9yZ2FuaXNt IFNldmVy IGNsYQ== YWpp U2ltcGxl IEZsYXZvcg== IEV2YWw= cHJ1cw== IGNob3J1cw== REFZ IGRlbm91bmNlZA== IGJpb2dyYXBoeQ== IFR1cm5idWxs UmVjZW50 Tm9ybWFs bGVjdGlvbnM= V29yZA== IGZlcnJ5 IFdhZ25lcg== aG9t VW5pdA== IHN1cGVybWFya2V0 IFNpdGg= IG5vbWluZWVz IGRpY3RhdG9yc2hpcA== aWRkbGVy IGFubm91bmNlcw== IFRoZW0= IE5lcHR1bmU= IGRlaXR5 IFlp IG1vbmFyY2g= QVJS IGludmFkZWQ= IEhvaw== dW50YXJ5 Q2VydGFpbg== ZWdh IGtpZGRpbmc= IFJlZ3VsYXRpb24= IHRyYXk= IHBob3RvZ3JhcGhlcnM= IEFyY2FuZQ== IGRpc2NoYXJnZWQ= IGV2YW5nZWxpY2Fs IGludGVyY2hhbmdl IGZpbG1tYWtlcg== IEVuZGxlc3M= IDI5MA== IFNhbHZhZG9y QVNZ IFNpZ25hbA== IHdyYXRo 4pw= bG90 Jy8= IHByb2plY3RpbGU= IGVtcGxveWluZw== IEludGVyZmFjZQ== MTkx YXRlbGxpdGU= IFJhdGg= cGFja2FnZQ== IGluZGljYXRpb25z SmFzb24= IGFyZ3M= IEdIeg== IHRpbHQ= bmFudHM= d29u 44K1 cmVkZA== cmVzY2VudA== IENhbGVuZGFy IG1vZHVsYXI= IGFzc2lzdGluZw== IHJlZGVlbQ== IEJlYW4= IHdvcnNo IGRlY2VudHJhbGl6ZWQ= KS4uLg== Mzc3 IGFycmF5cw== IGFjY29tcGxpc2htZW50cw== zr8= ZG90 IG11dHVhbGx5 IG9ic3RydWN0 IG1pc3JlcHJlc2VudA== b3Jlc3Q= aW9uaWM= cnVjZQ== JTs= IGtub3dpbmdseQ== cG9ydGluZw== aW5lbnRseQ== QXJp IFNjaHVsdHo= RGE= IENlcmU= IG9ic29sZXRl hYs= Z2l2ZQ== IGJhaXQ= IGVubGFyZw== TmVpbGw= IDE5MzM= IHJlY29uc2lkZXI= IFNlcmdlYW50 IERpYW5l IENvZ24= IEljb24= UG9zaXRpb24= IGZvc3Q= IHN0aXJyaW5n c2V2ZW4= IFNwYWNlWA== dWdnZXRz IG1lZGQ= R2Fs IFNpc3Rlcg== Qm95 IHRyaWdnZXJpbmc= VGFraW5n IHNjcmVhbXM= IGNhdXNhbA== IGF3YWtlbg== QXJt Mjk3 IGRpc3BhdGNoZWQ= IEZBTFNF IG9yZ2FuaXphdGlvbmFs IFRvbmc= IGRpbGVtbWE= ZGVtb24= U3Bs IGhvb2tz dWRpbmc= IHZhbGlkYXRl IHBvdGlvbg== IGNsYXc= IGJ1cmds IHF1aXI= QUNB IEJyZW5uYW4= IGR1cmFiaWxpdHk= IGJvbWJpbmdz IFdpbmRvdw== IGN1bHByaXQ= MzI1 VGhlcmVmb3Jl dW1iZXJlZA== cGVyZm9ybWFuY2U= d2FydHM= IGVuZm9yY2luZw== IEJsb3c= IHJlcHJpbnQ= aWZheA== YWxwaGE= IHNpbmlzdGVy IGJ1cmdlcg== ZmlnaHRpbmc= U2NvcmU= IFN0b25lcw== aWVt NDA1 Y2hlbXk= IHZpbmVnYXI= bm9t IHByZXZhaWxpbmc= IExhdGVzdA== wrY= IGJh IFdyaXRlcg== IDE3Nw== IENvbndheQ== IGNvbGxlY3Rz IHF1YW50aXRhdGl2ZQ== IGhvcnJvcnM= b2dlbnM= IFNsb3Y= IGxheXM= aGF3 IFNsYXNo IG5pZ2h0Y2x1Yg== IERhdmllcw== IGJyaWRl IFNjYXJsZXQ= eW1t IEFwcGxpY2F0aW9ucw== dmVsZW5ndGg= IHJldml2YWw= IHNvZnRseQ== IHpvbw== aXRhaXJl Q3Vy IGVsZWN0cm9t IHBsYW50aW5n T1RP IEVsZW1lbnRz IHN3YWxsb3c= cG9ydGVy IGxhcHRvcHM= IHBlYW51dA== IGxvYmJ5aXN0cw== zrI= UGFuZWw= IEpvYW4= aW1pbA== dG5j IHJlc2lzdGVk IG91dHdl IHJldGFpbmluZw== YXRyaQ== IHBvb3Jlcg== IFN5cmlhbnM= IEhhbW1vbmQ= IHdlbGQ= dWRlcg== dG9waWM= IFRU cmljaWE= IHRoaWV2ZXM= TGlj IEd1c3Q= IFdheXM= YXJldGg= MjQz IGJyb2FkY2FzdGVy c2hpZWxk YXNzaXVt dWJsZQ== IGFpcnN0cmlrZXM= b25zbw== IHBlZGFs IGNvbGxlY3RvcnM= IFZhbmRlcg== IE1lc2E= IGRpY3RhdG9y IGRpcg== ZW50b24= Y2FydA== c2NvcmU= YWRkZXI= Q3J5 IHNzaA== Z2dlcg== IGRydW5rZW4= IEdT IFNlYXQ= IGNvcm5lcmJhY2s= IHNraXBwZWQ= IFJlc2VhcmNoZXJz IEF1ZGk= UmVmZXJlbmNl IGhhdW50ZWQ= w6s= IENsaW5pYw== Y3o= IHBz IFBhbGFkaW4= IFJlY2lwZQ== IHN0aWdtYQ== b3BweQ== IG1vbmtleXM= IEhhd2s= U2Fk Ii8+ IFdvcmtzaG9w IFJldGFpbA== IEF2YXRhcg== NjI1 TmE= IFZD IFNlY3VyZQ== TVk= MTk4OA== b3NzaXA= IHByb3N0YXRl IHVuZGVu IGdhbWVy IENvbnRlbnRz IFdhcmhhbW1lcg== IFNlbnRpbmVs MzEw IHNlZ3JlZ2F0aW9u IEZsZXg= IE1BWQ== IGRyaWxscw== IERydWdz SXNsYW1pYw== IHNwdXI= IGNhZmU= IGltYWdpbmFyeQ== IGd1aWRpbmc= IHN3aW5ncw== IFRoZW1l b2J5 IG51ZA== IGJlZ2dpbmc= IHN0cm9uZ2g= IHJlamVjdGluZw== IHBlZGVzdHJpYW5z IFByb3NwZWN0 UmFyZQ== c2xl IGNvbmNlc3Npb25z IENvbnN0aXR1dGlvbmFs IGJlYW1z IGZpYmVycw== cG9vbg== IGluc3RpbmN0cw== cHJvcGVydHk= IEJJRw== U2FuZGVycw== aW1hdGVz IGNvYXRpbmc= IGNvcnBzZXM= IFRSVUU= Y2hlY2tlZA== IDE2Ng== QXNo IEpT IEZpY3Rpb24= IGNvbW11bmFs IGVuZXJnZXRpYw== b29vb29vb28= IG5vd2FkYXlz SUxE aWJv IFNVVg== UmVu IGR3ZWxsaW5n U2lsdmVy IHRhbGx5 IE1vdmluZw== IGNvd2FyZA== IGdlbmVyYWxz IGhvcm5z IGNpcmN1bGF0ZWQ= IHJvYmJlZA== IFVubGltaXRlZA== IGhhcmFzc2Vk IGluaGliaXQ= IGNvbXBvc2Vy IFNwb3RpZnk= IHNwcmVhZHM= MzY0 IHN1aWNpZGFs IG5vaXNlcw== IFN0dXI= IHNhZ2E= IEthZw== aXNv IHRoZW9yZXRpY2FsbHk= TW9uZXk= IHNpbWlsYXJpdHk= IHNsaWNlZA== dXRpbHM= aW5nZXM= Ii0= IGFudGg= IGltcGVk TW9kdWxl VGhyb3VnaG91dA== IG1lbnVz Y29tbWl0dGVl YW5kaQ== b2Jq aW5hdg== ZmlyZWQ= IEFiZHVsbGFo IHVuZGVhZA== IGZvbnRz SG9sZA== RU5H IHN1c3RhaW5hYmlsaXR5 IGZsaWNr IHJhem9y IEZlc3Q= IENoYXJhY3RlcnM= IHdvcmRpbmc= IHBvcHVsaXN0 IGNyaXRpY2l6aW5n IG11c2U= dmluZQ== IGNhcmRib2FyZA== IGtpbmRseQ== IGZyaW5nZQ== IFRoZWZ0 aWN1bHR1cmFs IGdvdmVybm9ycw== IO+/ve+/ve+/ve+/vQ== IDE2Mw== IHRpbWVvdXQ= IEF1dGg= Q2hpbGRyZW4= QVU= IHJlZGVtcHRpb24= IEFsZ2Vy IDE5MTQ= IHdhdmVk IGFzdHJvbmF1dHM= b2dyYW1z IHN3YW1w IEZpbm5pc2g= IGNhbmRsZQ== IHRvbm5lcw== dXRt IHJheQ== IHNwdW4= IGZlYXJmdWw= YXJ0aWNsZXM= IGNhdXM= b3JpY2FsbHk= IFJlcXVpcmVz IEdvbA== IHBvcGU= IGluYXVndXJhbA== IGdsZQ== QURB IElTSUw= IE9mZmVuc2l2ZQ== IHdhdGNoZG9n IGJhbGNvbg== ZW50aXR5 IEhvbw== IGdhbGxvbg== QUND IGRvdWJsaW5n IGltcGxpY2F0aW9u IFNpZ2h0 IGRvY3Ry LS0tLS0tLQ== IFxc IG1hbHQ= Um9sbA== IOKJpQ== IHJlY2Fw YWRkaW5n dWNlcw== IEJlbmQ= ZmlndXJl IHR1cmtleQ== IHNvY2lldGFs IFRpY2tldHM= IGNvbW1lcmNpYWxseQ== IHNwaWN5 IDIxNg== IFJhbXA= IHN1cGVyaW9yaXR5 w68= IFRyYWNrZXI= Q2FybA== IENveQ== IFBhdHJpb3Q= IGNvbnN1bHRlZA== IGxpc3Rpbmdz IHNsZXc= cmVlbnNob3Q= IEdvbmU= IFsuLi5d MzA5 IGhvdHRlc3Q= 2LE= IHJvY2t5 IERpYXo= IG1hc3NhZ2U= IHBhcmFseQ== IHBvbnk= QXo= IGNhcnRyaWRnZQ== IE5a IHNuYWNr IExhbWFy cGxlbWVudA== IExlc2xpZQ== IG1hdGVy IHNuaXBw MjQ2 IGpvaW50bHk= IEJyaXNiYW5l IGlQb2Q= IHB1bXBpbmc= IGdvYXQ= IFNoYXJvbg== ZWFsaW5n IGNvcm9u IGFub21hbA== cmFoaW0= IENvbm5lY3Rpb24= IHNjdWxwdHVyZQ== IHNjaGVkdWxpbmc= IERhZGR5 YXRoaW5n IGV5ZWJyb3dz IGN1cnZlZA== IHNlbnRpbWVudHM= IGRyYWZ0aW5n RHJvcA== KFs= IG5vbWluYWw= IExlYWRlcnNoaXA= IEdyb3c= IDE3Ng== IGNvbnN0cnVjdGl2ZQ== aXZhdGlvbg== IGNvcnJ1cHRlZA== Z2VyYWxk IENyb3M= IENoZXN0ZXI= IExhcA== 44Gq T1RI REFUQQ== IGFsbW9uZA== cHJvYmFibHk= SW1w IGZlYXN0 IFdhcmNyYWZ0 Rmxvcg== IGNoZWNrcG9pbnQ= IHRyYW5zY3JpcHRpb24= IDIwNA== IHR3ZWFrcw== IHJlbGlldmU= U2NpZW5jZQ== IHBlcmZvcm1lcg== Wm9uZQ== IHR1cm1vaWw= aWdhdGVk aGliaXQ= IENhZmU= dGhlbWVk IGZsdW9y YmVuY2g= IGRlY29t IFVudA== IEJhcnJldHQ= IEZhY3Rz IHRhc3Rpbmc= IFBUU0Q= IFNlYWw= IEp1ZGFpc20= IER5bmFtaWM= IENvcnM= VmU= IE1pbmc= IFRyYW5zZm9ybQ== dm9u IERlZmVuZGVycw== IFRhY3RpY2Fs IFZvbg== IFVuaXZlcnM= IGRpc3RvcnRlZA== IEJyZWF0aA== Pyci IGFnb24= IERlYWRseQ== IGxhbg== IEN5Y2xl b3JuZWQ= IHJlbGlhYmx5 IGdsb3I= IE1vbmtleQ== 44Oh IGFkcmVu IG1pY3Jvd2F2ZQ== IEFsYmFu aXJjcmFmdA== ZGlnaXQ= c21hcnQ= IERyZWFk wq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq8= e3s= IFJvY2hlc3Rlcg== IHNpbXBsaWZpZWQ= IGluZmxpY3RlZA== IHRha2VvdmVy IHlvdXJzZWx2ZXM= YWRpdGlvbmFs IG11c2N1bGFy S1M= IGluZ2Vu VGF4 IEZlYXR1cmU= Mjc3 IGNydWM= IGNyYXRl IHVuaWRlbnRpZmllZA== IGFjY2xhaW1lZA== IE1hbmdh IEZyYW5jZXM= IE5lcGFs IEdlcmFsZA== IEt1d2FpdA== IHNsYWlu IEhlYg== IEdva3U= 44Gu5g== Mjg2 TXJz IENvZHk= IFNhbmN0dWFyeQ== MDE2 IGRpc21hbnQ= IGRhdGFzZXQ= IEhvbmQ= YnVjaw== IFBhdHRlcnNvbg== IHBhbGV0dGU= IEdE aWNvbA== IExvZGdl IHBsYW5ldGFyeQ== YWtpbg== IFJlZ2lzdGVyZWQ= YWJ3ZQ== IFBldGVyc2J1cmc= IGhhaWxlZA== IFBpZWNl U2NoZQ== IERPSg== IGVudW1lcg== MTgx IE9ic2VydmVy IEJvbGQ= Zm91bmRlZA== Y29tbWVyY2U= IGV4cGxvaXRz IEZpbmRpbmc= VVJO IFNuZQ== IEFjaWQ= YXlldHRl IFZhbHVlcw== IGRyYXN0aWM= IGFyY2hpdGVjdHVyYWw= ICIu 15U= dW1wZWQ= IHdyYXBwaW5n IHdpZG93 IFNsYXllcg== bGFjZQ== b25jZQ== R2VybWFueQ== YXZvaWQ= IHRlbXBsZXM= UEFS w7Q= IEx1Y2lmZXI= IEZsaWNrcg== bG92 Zm9yY2Vz IHNjb3V0aW5n IGxvdWRlcg== dGVzeQ== IGJlZm9yZWhhbmQ= xJM= IE5lb24= IFdvbA== IFR5cGljYWxseQ== IFBvbGl0aWNv LSstKw== IGJ1aWxkZXI= IGRlcml2ZQ== S2lsbA== IHBva2Vy IGFtYmlndW91cw== IGxpZnRz IGN5dA== IHJpYnM= b29kbGU= IFNvdW5kcw== aGFpcg== IFN5bmRyb21l dGY= IHByb3BvcnRpb25hbA== dWlk IHBlcnRhaW5pbmc= IEtpbmRsZQ== IE5lZ3Jv IHJlaXRlcmF0ZWQ= IFRvbmlnaHQ= b3Rocw== IENvcm5lbGw= IG93aW5n IDIwOA== ZWxmYXJl b2NhdGluZw== IEJpcmRz U3Vic2NyaWJl IGVzc2F5cw== IGJ1cmRlbnM= IGlsbHVzdHJhdGlvbnM= YXJpb3Vz RVJBTA== IENhbGN1bA== IHhlbg== IExpbmtlZElu IEp1bmc= IHJlZGVzaWdu Q29ubm9y Mjk2 IHJldmVyc2Fs IEFkZWxhaWRl IExM IHNpbmtpbmc= IGd1bQ== VVNI Y2FwdA== IEdyaW1t IGZvb3RzdGVwcw== IENCRA== aXNwZXJz IHByb3Nl V2VkbmVzZGF5 IE1vdmllcw== ZWRpbg== IG92ZXJ0dXJuZWQ= IGNvbnRlbnRpb3Vz VVNC fn5+fn5+fn5+fn5+fn5+fg== IENvcHBlcg== IHBvaW50bGVzcw== TlY= dmFsdWVz b2xwaGlu ZGFpbg== IGRlcG9zaXRlZA== IEdX IHByZWNlZGVk IENsYQ== IEdvbGVt IE5pbQ== IM6y IEVuZ2luZWVycw== bWlkZGxl IGZsYXR0 b3BlcmF0aXZl IGNvdW5jaWxz aW1iYWJ3ZQ== ZWxpbg== IHN0cmVzc2Z1bA== IExE IHJlc2g= bGFrZQ== IHdoZWVsY2hhaXI= IEFsdGVybmF0aXZl IG9wdGltaXpl b3BlcmF0aW9u IHBlZWs= IG9uZXNlbGY= aWdpbA== IHRyYW5zaXRpb25z b3BhdGh5 Ymxhbms= IDE2OQ== MTcx X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== IGxhdW5kZXJpbmc= RW5j IERFQw== IHdvcmtvdXRz IHNwaWtlcw== IGRpbm9zYXVycw== IGRpc2NyaW1pbmF0b3J5 UG9vbA== UmF0aGVy Mzg1 Uk5B dGVzdGVycw== ZXRv IElkZW50aXR5 IHZlaW4= IEJ1cnRvbg== IGFyY2FkZQ== NDIw VWx0aW1hdGVseQ== IFNhZGx5 w7A= cGlsbA== IGN1Ymlj IFNwZWN0cnVt dGhlc2U= c3RhdGVz IHVub2ZmaWNpYWw= aGF3a3M= IEVWRVJZ IHJhaW5ib3c= IGluY2FyY2VyYXRpb24= YW5kaW5n IHN5bGw= IEV2ZXJ0b24= IDE3OQ== IFNlcmJpYQ== IDE4OQ== bWV0ZXI= IE1pY2tleQ== IGFudGlxdQ== IGZhY3R1YWw= bmVjaw== IE5hcmU= bm9ybQ== bXVzdA== IGhpZ2h3YXlz IGdsYW0= IGRpdmlkaW5n IFNxdWFkcm9u IE1hcnRoYQ== IGJpcnRocw== Q292ZXI= Ly8vLy8vLy8vLy8vLy8vLw== IFdvbmc= UGhvdA== IEFMUw== cmlv IE5vbmV0aGVsZXNz IExlbW9u IDIwNg== IEVF IGRlcml2YXRpdmU= IFdXSUk= dm90ZQ== IHRoZXJlaW4= IHNlcGFyYXRpbmc= NDQ2 c3luYw== IFN0cmVldHM= IHJhdHQ= IG11bmljaXBhbGl0eQ== IFNob3J0bHk= IG1vbms= KSwi IHNjcnVi IG9wZXJhdGl2ZXM= TmVpdGhlcg== UGxhY2U= IExpbWl0 RmVtYWxl IEFjdG9y Q2hhcmFjdGVy IGNvbnN0aXR1dGVk MzU3 IHByb3Rlc3RlZA== IFN0cmF3 IEhlaWdodA== aWxkYQ== IFR5cGg= IGZsb29kcw== IGNvc21ldGlj V0FZ cGVydHVyZQ== dXBvbg== dG9ucw== ZXNzaW5n IFBvY2tldA== IHJvb2Z0 IENhdWNhcw== IGFudGlkZXByZXNz IGluY29tcGF0aWJsZQ== RUNE IG9wZXJh IENvbnRlc3Q= IGdlbmVyYXRvcnM= bGltZQ== RGVmZW5zZQ== MTk4Nw== Zm9ydW0= IHNhdmFnZQ== IEh1bmdhcmlhbg== bno= IG1ldGFsbGlj IGV4cGVsbGVk IHJlc2lkZW5jeQ== IGRyZXNzZXM= NjY2 IENsZW1lbnQ= ZmlyZXM= Q2F0ZWdvcnk= IGdlZWs= YWxpcw== IGNlbWV0ZXJ5 ZWR1Y2F0ZWQ= IGNyYXds IFVuYWJsZQ== IFR5c29u YWtpcw== IHBhcmRvbg== IFdyYQ== IHN0cmVuZ3RoZW5lZA== IEZvcnM= MzM1 IEhD IE1vbmQ= IHZpc3VhbHM= IEJlYXRsZXM= ZXR0bGVtZW50 IO8= Z3Jv IGJhc2g= IHBvb3Jlc3Q= IGV4Y2Vs IGFzcGlyYXRpb25z IE11bmljaXA= ZW5zaWJsZQ== IGNlcmVtb25pZXM= IGludGltaWRhdGlvbg== IENPTlRS YmVjaw== IEthcA== YXN1 IHRyYWRlbWFya3M= IFNldw== IENvbXBldGl0aW9u bmV0d29yaw== IEFycmk= IFRldA== Um9hbWluZw== V0M= RGF0 IHNvYg== IHBhaXJpbmc= IG92ZXJkb3Nl U0FZ YWJlcg== IHJldm9sdA== IEZhaA== YWN0aW5n ZXE= ZXN0YXRpb24= RmlnaHQ= IE1hcmtz Mjcz IDE3OA== UmF3 44GL MzQ5 YmxvY2tz IHZlcmdl ZXN0aW5l IFBvZGVzdGE= IGludmFzaXZl IHByb2ZvdW5kbHk= IEFv ZWFjaA== IGxlc3Q= aW50ZXJwcmV0 IHNocmlua2luZw== IGVycm9uZQ== IGNoZWVz bHlz IEl2eQ== IERpcmVjdG9yeQ== IGhpbnRlZA== VklDRQ== IGNvbnRhY3Rpbmc= IEdlbnQ= aGVp IGxhYmVsaW5n IG1lcmN1cnk= IExpdGU= IGV4cGlyZXM= IGRlc3RhYmls cml0aXM= Y3U= IGZlYXRoZXJz IHN0ZWVy IHByb2dyYW1tZWQ= IFZhZGVy R29pbmc= IEVsaW0= IHlv IE1pY2hl IDIwMw== IHNsZWV2ZXM= IGJ1bGx5 IEh1bWFucw== MzY4 IGNvbXByZXNz IEJhbm5lcg== QVJT IGF3aGlsZQ== IGNhbGli IHNwb25zb3JzaGlw IERpZmZpY3VsdHk= IFBhcGVycw== IGlkZW50aWZpZXI= fS4= IHlvZw== IFNoaWE= IGNsZWFudXA= IHZpYmU= aW50cm9kdQ== aW1taW5n QXVzdHJhbGlh IG91dGxpbmVz IFlvdXR1YmU= dHJhaW4= IE1ha2Vz IGRlcG9ydGVk IGNlbnRy IER1Zw== IEJvdWxkZXI= IEJ1ZmZ5 IGluanVuY3Rpb24= IEhhcmxleQ== IEdyb3Vwcw== IER1bWJsZWRvcmU= IENsYXJh ICIt IHNhY3JpZmljZWQ= ZXBo U2hhZG93 aWJsaW5n IGZyZWVsYW5jZQ== IGV2aWRlbnRseQ== cGhhbA== IHJldGFpbnM= TWly IGZpbml0ZQ== ZGFy IENvdXM= IHJlcGFpcmVk IHBlcmlvZGlj IGNoYW1waW9uc2hpcHM= IGFzdGVyb2lk YmxpbmQ= IGV4cHJlc3NseQ== IEFzdHJvcw== IHNjYWxlZA== IGdlb2dyYXBoaWNhbA== IFJhcGlkcw== RW5qb3k= IGVsYXN0aWM= IE1vaGFtZWQ= TWFya2V0 YmVnaW4= IGRpc2NvdmVycw== IHRlbGVjb21tdW5pY2F0aW9ucw== IHNjYW5uZXI= IGVubGFyZ2U= IHNoYXJrcw== IHBzeWNoZWRlbA== IFJvdWdl IHNuYXBzaG90 aXNpbmU= WFA= IHBlc3RpY2lkZXM= IExTRA== IERpc3RyaWJ1dGlvbg== cmVhbGx5 IGRlZ3JhZGF0aW9u IGRpc2d1aXNl IGJpb20= IEVYVA== IGVxdWF0aW9ucw== IGhhemFyZHM= IENvbXBhcmVk KSo= IHZpcnR1ZXM= IGVsZGVycw== IGVuaGFuY2luZw== IEFjcm9zcw== ZXJvcw== YW5nbGluZw== IGNvbWJ1c3Q= dWNjaQ== IGNvbmN1c3Npb24= IGNvbnRyYWNlcHRpb24= IEthbmc= IGV4cHJlc3Nlcw== IGF1eA== IFBpb25l IGV4aGliaXRz RGVidWc= T1RBTA== IEFscmVhZHk= IFdoZWVsZXI= IGV4cGFuZHM= Pzo= IHJlY29uY2lsaWF0aW9u IHBpcmF0ZXM= IHB1cnNl IGRpc2NvdXJhZ2U= IHNwZWN0YWNsZQ== UmFuaw== IHdyYXBz IFRob3VnaHQ= IGltcGVuZGluZw== T3Bw IEFuZ2xv IEVVUg== IHNjcmV3ZWQ= cmV0Y2hlZA== IGVuY291cmFnZW1lbnQ= bW9kZWxz IGNvbmZ1c2U= bW1t IFZpdGFtaW4= 4paR4paR Q3J1 IGtuaWdodHM= IGRpc2NhcmQ= IGJpc2hvcHM= IFdlYXI= IEdhcnJldHQ= a2Fu 44Of IG1hc2N1bGluZQ== Y2FwaXRhbA== IEF1cw== IGZhdGFsbHk= dGhhbmtz IEFV IEd1dA== MTIwMA== IDAwMDAwMDAw IHN1cnJvZw== IEJJT1M= cmFpdHM= IFdhdHRz IHJlc3VycmVjdGlvbg== IEVsZWN0b3JhbA== IFRpcHM= NDAwMA== IG51dHJpZW50 IGRlcGljdGluZw== IHNwcmluaw== IG11ZmY= IExJTQ== IFNhbXBsZQ== cHNj aWJp Z2VuZXJhdGVk IHNwZWNpbWVucw== IGRpc3NhdGlzZg== IHRhaWxvcmVk IGhvbGRpbmdz IE1vbnRobHk= IEVhdA== cG9vbnM= IG5lYw== IENhZ2U= IExvdHVz IExhbnRlcm4= IGZyb250aWVy IHBlbnNpb25z IGpva2Vk IEhhcmR5 PS09LT0tPS0= cmFkZQ== VUlE IHJhaWxz IGVtaXQ= IHNsYXRl IHNtdWc= IHNwaXQ= IENhbGxz IEphY29icw== ZmVhdA== IFVF IHJlc3RydWN0 IHJlZ2VuZXJhdGlvbg== IGVuZXJnaWVz IENvbm5vcg== T0hO IENoZWVzZQ== IGdlcg== IHJlc3VycmVjdA== bWFuYWdlbWVudA== Tlc= IHByZXNlbnRseQ== IEJydWlucw== TWVtYmVy IE1hbmc= aWRhbg== IGJvb3N0aW5n d3lu Ky4= cmVxdWlzaXRl IE5ZUEQ= IE1lZ2Fu IENvbmRpdGlvbnM= IHBpY3M= bmVzaXVt IFJhc2g= IDE3NA== IER1Y2tz IGVtYnJv enU= b25pYW4= cmVsaWdpb3Vz IGNyYXo= IEFDQQ== IFp1Y2tlcg== RU1B IFByb3M= V2VhcG9u IEtub3g= IEFyZHVpbm8= IHN0b3Zl IGhlYXZlbnM= IFB1cmNoYXNl IGhlcmQ= IGZ1bmRyYWlzZXI= RGlnaXRhbA== NTAwMA== IHByb3BvbmVudHM= L+KAiw== IGplbGx5 IFZpc2E= IG1vbmtz IGFkdmFuY2VtZW50 IFdlcg== IDE4Nw== ZXVz ZXJ0aWxpdHk= IGZldGFs IDE5MzY= TG8= IG91dGZpdHM= IHN0YWlyY2FzZQ== Ym9tYg== IGN1c3RvbWl6ZWQ= Y2xhaXI= VHJlZQ== IG1hcHBlZA== IENvbnNpZGVyaW5n IFRvcnJlcw== IG1ldGh5bA== IGFwcHJveGltYXRl IGRvb20= IEhhbnNlbg== IGNyb3Nzb3Zlcg== IHN0YW5kYWxvbmU= 5Lw= IGludml0ZXM= IGdyYXZleWFyZA== IGhw RG9uYWxkVHJ1bXA= IGVzY29ydA== R2Fy IHByZWRlY2Vzc29ycw== IGhheQ== IGVuenltZQ== IFN0cmFpZ2h0 dmlzb3Jz SW5n YW5lb3VzbHk= IEFwcGxpZWQ= IGZlYw== IER1cmFudA== IG91dHNwb2tlbg== b3Ji IHplYWw= IGRpc2dyYWNl Jyku IENoZW5n Mjg5 IFJlbmE= IFN1aWNpZGU= Mjk0 IG91dHJhZ2Vk IE5ld21hbg== IE52aWRpYQ== IEFiZXI= IEJlcnM= IHJlY3JlYXRpb24= V2luZG93 IERQ eGU= IHBlZG9waA== IGZhbGxvdXQ= YW1ib28= IHByZXNlbnRhdGlvbnM= IEFwcHM= IGh0bWw= MzQ1 IFhYWA== IHJ1YmJpbmc= IExlYXRoZXI= IGh1bWlkaXR5 c2V5cw== ZXN0YWJsaXNoZWQ= IFVuaXRz NjQ2 IHJlc3BlY3RhYmxl QXV0bw== IHRocml2aW5n IElubm92YXRpb24= YW5ncw== RXh0cmE= cmVndWxhdGlvbg== Mjk4 cGljaw== RXhhbXBsZXM= IENK QXR0YWNr IGRyYWNvbg== TFQ= IHN0aWNrZXI= cmVycw== IHN1bm55 SXNz cmVndWxhdGVk ZGlt IEFic3RyYWN0 IGh1c2JhbmRz T2ZmaWNl b21pbmF0aW9u aXRhcnM= QU5HRQ== YXNjYWw= IEtyaXM= IEluZmFudHJ5 IG1hbGY= IEF0aGU= IFJhbGx5 YmFsYW5jZWQ= Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u T1VQ IG1vbGVjdWxl bWV0aWNz IFNwbGl0 IEluc3RydWN0aW9ucw== IE5pZ2h0cw== Y2FyZHM= IHR1Zw== IGNvbmU= 5a0= IHR4 IERpc2N1c3Npb24= IGNhdGFzdHJvcGhl cHBl Z2lv IGNvbW11bmlzbQ== IGhhbHRlZA== IEd1YW50 Y2xlYW4= IFNjaGVk IEthbnll IHdhbmRlcg== IFNlcmlvdXNseQ== IDE4OA== ZW5uaWFs Zm9sbG93 cHJvZHVjdGl2ZQ== IEZsb3c= IFNhaWw= IGNyYXc= IHNpbXVsYXRpb25z b3J1 YW5nbGVz IE5vbGFu IG1lbnN0cnU= NDcw IDIwNw== YWph IGNhc3VhbGx5 Ym9hcmRpbmc= IDIyMg== b3Z5 IE51bWJlcnM= dW1hdA== T0U= Mjg3 IENsZW1zb24= IGNlcnRz IHNsaWQ= IFRyaWJl IHRvYXN0 IGZvcnR1bmVz IGZhbHM= IENvbW1pdHRlZXM= IGdw IGZpZXJ5 IE5ldHM= IEFuaW1l UGFja2FnZQ== IENvbXBhcmU= bGF1Z2h0ZXI= aW5mZWN0 IGF0cm9jaXRpZXM= IGp1c3RpY2Vz IGluc3VsdHM= IFZlcm5vbg== IHNoYWtlbg== IHBlcnNvbmE= ZXN0YW1w MzY3 YnJhaW4= IGV4cGVyaW1lbnRpbmc= S2Vu IEVsZWN0cm9uaWNz IDE2MQ== ZG9tYWlu IGdyYXBoaWNhbA== YmlzaG9w IHdob3BwaW5n IEV2YW5nZWw= IGFkdmVydGlzZXJz IFNwZWFy IGJpZHM= IGRlc3Ryb3lz dXR6 IHVuZGVyc2M= IEFERA== IGFudHM= IEN1bQ== aXBwbGVz IEZpbGw= IGdsYW5jZWQ= IGluZGljdGVk IEVmZg== IG1pc2Nvbg== IERlc2t0b3A= IGFiaWRl 44OA IElv IENvdWw= IGNhcHN1bGU= IENocnlz TU9O IHVuZGVz IElSQQ== IGNpdGF0aW9u IGRpY3RhdGU= IE5ldHdvcmtz IENvbmZsaWN0 IFN0dWZm eGE= aXNlYw== IENoZW1pc3RyeQ== IHF1YXJ0ZXJseQ== V2lsbGlhbXM= YW5hbg== T3B0 IEFsZXhhbmRyaWE= b3V0aGVhc3Rlcm4= IFNwcmluZ2ZpZWxk IEJsYWNrcw== IGdlb2dyYXBoeQ== MjQy IHV0bW9zdA== IEV4eG9u YWJvdXRz RVZB IEVuYWJsZQ== IEJhcnI= IGRpc2FncmVlZA== IEN5cHJ1cw== IGRlbWVudGlh IGxhYnM= IHViaXF1aXRvdXM= IExPVkU= IGNvbnNvbGlkYXRlZA== c3I= IGNyZWFteQ== IFRpbWJlcg== UmVnYXJkbGVzcw== IENlcnRpZmljYXRl ICIuLi4= b2dlbm91cw== Q2FwdGFpbg== IGluc3VsdGluZw== IFNvcm9z IEluc3Ry IEJ1bGdhcmlh YmV0dGVy IHN1Y2tpbmc= IERhdmlkc29u YXR6 IGNvbGxhdGVyYWw= Z2lm IHBsYWd1ZWQ= IENhbmNlbA== IEdhcmRuZXI= UkI= IHNpeHRlZW4= UmVtb3Zl dXJpc3RpYw== Y29vaw== Um9k IGNvbXByaXNpbmc= Zmxl KeKAlA== IFZpa2luZw== Z3Jvd3Ro YWdvbmFs IHNyZg== YWZldHk= bW90 TmVhcmx5 c3Rvd24= IEZhY3Rvcg== IGF1dG9tb2JpbGU= IHByb2NlZHVyYWw= bWFzaw== YW1waXJlcw== IGRpc2FwcGVhcnM= amFi MzE1 IDE5NTE= bmVlZGVk IGRhcmluZw== bGVhZGVy IHBvZGl1bQ== IHVuaGVhbHRoeQ== IG11bmQ= IHB5cmFtaWQ= b2NyZQ== IGtpc3NlZA== IGRyZWFtZWQ= IEZhbnRhc3RpYw== IEdseQ== 5Yo= IGdyZWF0bmVzcw== IHNwaWNlcw== IG1ldHJvcG9saXRhbg== IGNvbXB1bHM= aWV0cw== MTAxNg== IFNoYW0= IFB5cg== ZmxpZXM= IE1pZG5pZ2h0 IHN3YWxsb3dlZA== IGdlbnJlcw== IEx1Y2t5 IFJld2FyZHM= IGRpc3BhdGNo IElQQQ== IEFwcGx5 IGF2ZW4= YWxpdGllcw== MzEy dGhpbmdz ICgpLg== IG1hdGVz IFN6 IENPUA== b2xhdGU= T0ZG IHJlY2hhcmdl Y2Fwcw== IFlvcmtlcg== aWNvbmU= IGdhbGF4aWVz aWxlYWtz RGF2ZQ== IFB1eno= IENlbHRpYw== IEFGQw== Mjc2 IFNvbnM= IGFmZmlybWF0aXZl SG9y IHR1dG9yaWFscw== IENJVFk= IFJvc2E= IEV4dGVuc2lvbg== U2VyaWVz IGZhdHM= IHJhYg== bGlz IHVuaWM= IGV2ZQ== IFNwaW4= IGFkdWx0aG9vZA== dHlw IHNlY3Rhcmlhbg== IGNoZWNrb3V0 IEN5Y2w= U2luZ2xl IG1hcnR5cg== IGNoaWxsaW5n ODg4 b3VmbA== IF07 IGNvbmdlc3Rpb24= bWs= IFdoZXJlYXM= IDE5Mzg= dXJyZW5jaWVz ZXJpb24= IGJvYXN0 IFBhdGllbnRz IGNoYXA= IEJE cmVhbERvbmFsZFRydW1w IGV4YW1pbmVz aG92 IHN0YXJ0bGluZw== IEJhYnlsb24= d2lk b21ldw== YnJhbmNl IE9keXNzZXk= d2ln IHRvcmNo IFZveA== IE1veg== IFRyb2xs IEFucw== U2ltaWxhcmx5 IEZ1bA== MDA2 VW5sZXNz IEFsb25l c3RlYWQ= IFB1Ymxpc2hlcg== cmlnaHRz dHU= IERvZXNu IHByb2Zlc3Npb25hbGx5 IGNsbw== aWN6 IHN0ZWFscw== IOE= MTk4Ng== IHN0dXJkeQ== IEpvaGFubg== IG1lZGFscw== IGZpbGluZ3M= IEZyYXNlcg== ZG9uZQ== IG11bHRpbmF0aW9uYWw= IGZlZGVy IHdvcnRobGVzcw== IHBlc3Q= WWVzdGVyZGF5 YW5raW5k IGdheXM= IGJvcm5l IFBPUw== UGljdHVyZQ== IHBlcmNlbnRhZ2Vz MjUx cmFtZQ== IHBvdGlvbnM= QU1E IExlYmFuZXNl IHJhbmc= IExTVQ== b25ncw== IHBlbmluc3VsYQ== IENsYXVzZQ== QUxL b2hh IE1hY0Jvb2s= IHVuYW5pbW91cw== IGxlbmRlcnM= IGhhbmdz IGZyYW5jaGlzZXM= b3JlcnM= IFVwZGF0ZXM= IGlzb2xhdGU= YW5kcm8= U29vbg== IGRpc3J1cHRpdmU= IFN1cnZl IHN0aXRjaGVz IFNjb3Jw IERvbWluaW9u IHN1cHBseWluZw== QXJn IHR1cnJldA== IEx1aw== IGJyYWNrZXRz Kik= IFJldm9sdXRpb25hcnk= IEhvbmVzdA== IG5vdGljaW5n IFNoYW5ub24= IGFmZm9yZGVk IHRoYQ== IEphbmV0 IS0t IE5hcmVuZHJh IFBsb3Q= SG9s c2V2ZXI= ZWVudGg= IG9ic3RydWN0aW9u IDEwMjQ= c3RhZmY= amFz b3JnZXQ= c2NlbmVz bGF1Z2hz IEZhcmdv Y3JpbWU= IG9yY2hlc3Ry IGRlbGV0 aWxpYXJ5 cmlldmVk IG1pbGl0YXI= IEdyZWVuZQ== 4peP 44Gm IEd1YXJkcw== IHVubGVhc2hlZA== IFdlYmVy IGFkanVzdGFibGU= IGNhbGliZXI= IG1vdGl2YXRpb25z IMOg bUFo IExhbmth aGFuZGxl IHBlbnQ= IFJhdg== IEFuZ3VsYXI= IEthdQ== dW1iaW5n IHBoaWxhbnRocm9w IGRlaHlk IHRveGljaXR5 ZWVy IFlPUks= d2l0eg== 5bw= IElF Y29tbXVuaXR5 IEFI IHJldGFsaQ== IG1hc3NpdmVseQ== IERhbmllbHM= IERFTA== IGNhcmNpbg== VXJs IHJvdXRpbmc= IE5QQ3M= IFJBRg== cnljZQ== IHdhaXZlZA== IEd1YXRlbQ== RXZlcnlib2R5 IGNvdmVuYW50 IDE3Mw== IHJlbGF4aW5n IHF1YXJ0 YWxtb3N0 IGd1YXJkZWQ= IFNvbGRpZXJz IFBMQVk= IG91dGdvaW5n TEFORA== IHJld3JpdGU= IE1PVg== IEltcGVy IFNvbHV0aW9u IHBoZW5vbWVuYWw= IGxvbmdldml0eQ== IGltcGF0 IE5pc3Nhbg== aXJpZQ== IG9kb3I= IFphcg== b2tz IG1pbGl0aWFz IFNQRUM= IHRvbGVyYXRlZA== YXJzZXI= IEJyYWRmb3Jk Kyw= IHN1cnJlYWw= c2Y= Q2FuYWRpYW4= IHJlc2VtYmxhbmNl IGNhcmJvaHlkcmF0ZQ== VklFVw== IGFjY2Vzc29yeQ== bWVhbA== bGFyZ2VzdA== aWVnZWw= U29tZW9uZQ== IHRvdWdoZXN0 b3Nv IGZ1bm5lbA== IGNvbmRlbW5hdGlvbg== bHVlbnQ= IHdpcmVk IFN1bnNldA== SmVzdXM= IFBTVA== IFBhZ2Vz IFR5Y29vbg== IFBG IHNlbGVjdGlvbnM= IOCk cGFydGlzYW4= IGhpZ2hz IFJ1bmU= IGNyYWZ0cw== bGVhZA== IFBhcmVudHM= IHJlY2xhaW0= ZWtlcg== IEFsbGllZA== YWVwZXI= IGxvb21pbmc= IGJlbmVmaWNpYXJpZXM= IEh1bGw= U3R1ZGVudHM= SmV3aXNo ZGo= IHBhY3Q= dGVtcGxhdGU= IE9mZmljaWFscw== IEJheWxvcg== IGhlbXA= IHlvdXRocw== IExldmVscw== IFhpYW8= IENoZXM= IGVuZGVhdm9y IFJlbW92ZWQ= IGhpcHBvY2FtcA== SGVsbA== 44KK ODA1 IGRpbm9zYXVy IFdyYXRo IEluZG9uZXNpYW4= IGNhbGN1bGF0b3I= IERpY3Rpb25hcnk= IDQyMA== IE1BRw== KF8= ISw= dGFyaWFucw== IHJlc3RyaWN0aW5n cmFjdXNl IHdlZWtkYXk= T1VOVA== IHNocnVnZ2Vk bGVncm91bmQ= IGJhbGQ= IERvY3RvcnM= IHRvdXRlZA== IE1heHdlbGw= IDIxNA== IGRpcGxvbWF0 IHJlcHJlc3Npb24= IGNvbnN0aXR1ZW5jeQ== dmljZQ== cmFua2Vk IE5hcG9sZW9u Z2FuZw== IEZvcmV2ZXI= dHVu IGJ1bGI= IFBEVA== IENpc2Nv VkVO IHJlc3VtZWQ= U3RldmVu IE1hbml0b2Jh IGZhYnVsb3Vz IEFnZW50cw== MTk4NA== IGFtdXNpbmc= IE15c3Rlcmllcw== IG9ydGhvZG94 Zmxvb3I= IHF1ZXN0aW9ubmFpcmU= IHBlbmV0cmF0ZQ== IGZpbG1tYWtlcnM= IFVuYw== IHN0YW1wZWQ= IHRoaXJ0ZWVu IG91dGZpZWxk IGZvcndhcmRlZA== IGFwcHJh IGFpZGVk dHJ5 IHVuZm9jdXNlZA== IExpeg== IFdlbmR5 IFNjZW5l Q2hhcmc= IHJlamVjdHM= IGxlZnRpc3Q= IFByb3ZpZGVuY2U= IEJyaWQ= cmVnbg== IHByb3BoZWN5 IExJVkU= NDk5 IGZvcmdl IEZNTA== IGludHJpbnNpYw== IEZyb2c= IHdvbnQ= IEhvbHQ= IGZhbWVk Q0xVUw== YWVwZXJuaWNr IEhhdGU= IENheQ== IHJlZ2lzdGVyaW5n b3J0YWxpdHk= cm9weQ== b2NhbHlwdGlj YWFu bmF2 IGZhc2Npc3Q= SUZJRUQ= IGltcGxpY2F0ZWQ= IFJlc29ydA== IENoYW5kbGVy IEJyaWNr UGlu eXNj VXNhZ2U= IEhlbG0= dXNyYQ== 4piF4piF IEFiYmFz IHVuYW5pbW91c2x5 IGtlZXBlcg== IGFkZGljdGVk Pz8/ IGhlbG1ldHM= IGFudGlveGlk YXBzZWQ= ODA4 Z2llbmU= IHdhaXRz IG1pbmlvbg== cmF2ZWQ= IFBvcnNjaGU= IGRyZWFtaW5n IDE3MQ== IENhaW4= IHVuZm9y YXNzbw== IENvbmZpZ3VyYXRpb24= a3Vu aGFyZHQ= IG5lc3RlZA== IExEUw== TEVT IHR5aW5n ZW5vcw== IGN1ZQ== IE1hcnF1 c2tpcnRz IGNsaWNrZWQ= IGV4cGlyYXRpb24= IEFjY29yZGluZ2x5 IFdD IGJsZXNzaW5ncw== IGFkZGljdGl2ZQ== IE5hcnI= eXg= IEphZ3VhcnM= IHJlbnRz IFNpYmVy IHRpcHBlZA== b3Vzc2U= IEZpdHpnZXJhbGQ= IGhpZXJhcmNo b3V0aW5l IHdhdmVsZW5ndGg= Pi4= Y2hpZA== IFByb2Nlc3Npbmc= Lys= cmFua2luZw== RWFzeQ== IENvbnN0cnVjdA== IHRldA== aW5zdXJlZA== SFVE IHF1b3Rpbmc= IGNvbW11bmljYXRlZA== aW54 IGlubWF0ZQ== IGVyZWN0ZWQ= IEFic29sdXRlbHk= IFN1cmVseQ== IHVuaW0= IFRocm9uZQ== aGVpZA== IGNsYXdz IHN1cGVyc3Rhcg== IExlbm4= IFdoaXM= VWs= YWJvbA== IHNrZXQ= IE5pZXQ= IHBlcmtz IGFmZmluaXR5 IG9wZW5pbmdz cGhhc2lz IGRpc2NyaW1pbmF0ZQ== VGlw dmM= IGdyaW5kaW5n IEplbm55 IGFzdGhtYQ== aG9sZXM= IEhvbWVy IHJlZ2lzdGVycw== IEdsYWQ= IGNyZWF0aW9ucw== IGxpdGhpdW0= IGFwcGxhdXNl dW50aWw= SnVzdGljZQ== IFR1cmtz IHNjYW5kYWxz IGJha2U= dGFuaw== TWVjaA== IE1lYW5z IE1haWQ= UmVwdWJsaWNhbnM= aXNhbA== d2luZG93cw== IFNhbnRvcw== IHZlZ2V0YXRpb24= MzM4 dHJp IGZsdXg= aW5zZXJ0 IGNsYXJpZmllZA== IG1vcnRn IENoaW0= IFRvcnQ= IGRpc2NsYWlt bWV0YWw= IEFzaWRl IGluZHVjdGlvbg== IGluZmw= IGF0aGVpc3Rz YW1waA== IGV0aGVy IFZpdGFs IEJ1aWx0 TWluZA== IHdlYXBvbnJ5 U0VU IDE4Ng== YWRtaW4= Z2Ft Y29udHJhY3Q= YWZh IGRlcml2YXRpdmVz IHNuYWNrcw== IGNodXJu RWNvbm9t IGNhcHBlZA== IFVuZGVyc3RhbmRpbmc= IEhlcnM= IEl6 IGR1Y3Q= SUVOVA== YXVnaHR5 IOKclA== IE5Q IHNhaWxpbmc= SW5pdGlhbGl6ZWQ= IHRlZA== IHJlYWN0b3Jz IExvbWI= IGNob2tl IFdvcm0= IGFkbWlyYXRpb24= IHN3dW5n ZW5zaWJseQ== IHJhc2g= IEdvYWxz IEltcG9ydGFudA== U2hvdA== IFJhcw== IHRyYWluZXJz IEJ1bg== V29ya2luZw== IGhhcm1lZA== IFBhbmRvcmE= IExURQ== IG11c2hyb29t IENIQVI= IEZlZQ== IE1veQ== Qm9ybg== b2xpYmVyYWw= IE1hcnRpYWw= IGdlbnRsZW1lbg== IGxpbmdlcmluZw== T2ZmaWNpYWw= IGdyYWZmaXRp IE5hbWVz RGVy IHF1aW50 aXN0cmF0ZQ== YXplZXJh IE5PVElDRQ== IEZsb3JlbmNl IHBheWFibGU= IGRlcGljdHM= IFNwZWNpZXM= SGVhcnQ= 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IGVuY2xvc2Vk SW5jcmVhc2Vz RGFpbHk= IExpcw== IGVuYWN0bWVudA== IEJhY29u IFN0ZWVsZQ== ZGVtYW5k IDE4Mw== IG1vdXRocw== IHN0cmFuZGVk IGVuaGFuY2VtZW50 MDEx IFdoYXRz IGhlYWxlZA== ZW55 IFJhYg== IDM0MA== IExhYnlyaW50aA== cm9hY2g= IFlvc2g= IENsaXBwZXJz IGNvbmNlcnRz SW50ZXJuZXQ= MzU1 IHN0aWNrZXJz IHRlcm1lZA== IEF4ZQ== IGdyYW5kcGFyZW50cw== RnJhbmNl IENsaW0= IFVo dWxpYw== IHRocmlsbA== Y2VudHJpYw== IE92ZXJ2aWV3 IENvbmR1Y3Q= IHN1YnN0YW50aXZl IDE4Mg== bXVy IHN0cmF5 IENvZmY= IHJlcGV0aXRpdmU= IEZvcmdvdHRlbg== IHF1YWxpZmljYXRpb24= ZXdpdG5lc3M= IFppbWJhYndl IHNpbXVsYXRlZA== IEpE MjUz IFdhcmU= IHVuc2M= VGltZXM= IHN1bW1vbnM= IGRpc2Nvbm5lY3RlZA== IDE4NA== Y2l1cw== IEd1amFy b2RrYQ== IGVyYXNl IFRvYmFjY28= ZWxlY3RlZA== IHVuY29udA== IFNoZXBhcmQ= IExhbXA= IGFsZXJ0ZWQ= IG9wZXJhdGl2ZQ== YXJuYQ== dWludA== IG5lZ2xpZ2VuY2U= YWNlbWVudHM= IHN1cHJh IHByZXZhaWw= IFNoYXJr IGJlbHRz 44Gr IHRpZ2h0ZXI= RW5naW5lZXJz IGluYWN0aXZl IGV4cG9uZW50 IFdpbGxpZQ== YXBsZXM= IGhlaXI= IEhpdHM= aWFubg== IFNheXM= IGN1cnJlbnRz IEJlbmdhbA== IGFyaXN0 QnVmZmVy IGJyZWV6ZQ== IFdlc2xleQ== Q29sYQ== IHByb25vdW4= IGRlZWQ= IEtsaW5n IG9mdA== IGluZmxpY3Q= IHB1bmlzaGluZw== IG5t aWt1 T0RVQ1Q= MDE0 IHN1YnNpZHk= IERFQQ== IEhlcmJlcnQ= IEphbA== QmFuaw== IGRlZmVycmVk IHNoaXBtZW50 Qm90dA== IGFsbGU= YmVhcmluZw== SFRNTA== T2ZmbGluZQ== IDIxMw== IHNjcm9sbGluZw== IHNjYW5uZWQ= IExpYnlhbg== IFRPUA== Y2hyb20= ZHQ= Y29sdW1u UHN5TmV0TWVzc2FnZQ== WmVybw== IHRvcnNv MDUw 4pWQ IGltcGVyc29u IFNjaHdhcnR6 dWRpYw== IHBpc3NlZA== IFNhcHA= MjU3 IElTUHM= b2ds IHN1cGVydmlzZWQ= IGFkb2xlc2NlbnQ= IGF0dGFpbmVk IERlbGl2ZXJ5 IEJ1bm55 IDE5Mzc= IG1pbmlhdHVyZQ== IG9z IDM3MA== NjA4 IE1vdXJpbmhv IGlubmF0ZQ== IHRlbXBv IE5N IEZhbGxlbg== MDA5 IHByb3ZvY2F0aXZl U3RyZWFtZXI= IEJlbmVkaWN0 IEJvbHNoZQ== IHR1cnRsZQ== IFBDQg== IEVxdWFs RGlyZWN0b3I= IFJlbmQ= IGZsdWlkcw== QXV0aG9yaXRpZXM= IGNvdXNpbnM= cmVxdWVuY3k= IE5laWdoYm9y c2V0cw== c2hhcmVk Q2hhcmxlcw== cGFzc3dvcmQ= IGdlYXJz IDIxMQ== IEhhcmR3YXJl cmlrYQ== IHVwc3RyZWFt SG9t IGRpc3Byb3BvcnRpb25hdGVseQ== aXZpdGllcw== IHVuZGVmaW5lZA== IGVsZWN0cm9ucw== IGNvbW1lbW9y RXZlbnR1YWxseQ== ID48 IGlycmVzcG9uc2libGU= MjE4 IFJlbGVhc2Vk IE9WRVI= IElHTg== IEJyZWFk c3RlbGxhcg== IFNhZ2U= dHRlZA== ZGFtYWdl ZWRpdGlvbg== IFByZWM= IGxpbWU= IGNvbmZpbmVtZW50 IGNhbG9yaWU= d2VhcG9u IGRpZmZlcmluZw== IFNpbmE= bXlz YW1k IGludHJpY2F0ZQ== a2s= IFBBVA== w6Nv c3RvbmVz bGlua3M= IHJhbmNo U2VtaXRpYw== IGRpZmZlcmVudGlhdGU= IFNpbmdlcg== b2NjdXBpZWQ= IGZvcnRyZXNz Y21k IGludGVyY2VwdGlvbg== IEFua2FyYQ== IHJlcHQ= IFNvbGl0YWlyZQ== IHJlbWFrZQ== cHJlZA== IGRhcmVk YXV0aW9ucw== IEJBQ0s= UnVubmluZw== IGRlYnVnZ2luZw== IGdyYXBocw== Mzk5 IE5pZ2Vs IGJ1bg== IHBpbGxvdw== IHByb2dyZXNzZWQ= ZmFzaGlvbmVk IG9iZWRpZW5jZQ== RVJO IHJlaGVhcnM= Q2VsbA== dGw= U2hlcg== IGhlcmFsZA== IFBheW1lbnQ= IENvcnk= IERlcHQ= IHJlcGVudA== IFdlYWs= dWNrbGFuZA== IHBsZWFzaW5n IHNob3J0YWdlcw== IGp1cm9ycw== IEthYg== cXFh QW50aQ== IHdvdw== IFJDTVA= IHRzdW4= IFNpYw== IGNvbXByaXNlcw== IHNwaWVz IHByZWNpbmN0 bnU= IHVyZ2Vz IHRpbWVk IHN0cmlwZXM= IEJvb3Rz IHllbg== QWR2YW5jZWQ= IGRpc2NyZXRl IEFyY2hhbmdlbA== ZW1wbG95bWVudA== RGlmZg== IG1vbnVtZW50cw== IDIwOQ== d29ya2Vy IDE5Ng== IEln dXR0ZXJzdG9jaw== VFBT SmFj IGhvbWVsZXNzbmVzcw== IGNvbW1lbnRhdG9y IHJhY2lhbGx5 ZmluZw== c2VlZA== RWxl ZWxsYXRpb24= IGV0aGFub2w= IHBhcmlzaA== IERvbmc= IEF3YWtlbmluZw== IGRldmlhdGlvbg== IEJlYXJpbmc= IFRzdWs= IHJlY2Vzcw== IGx5bXBo IENhbm5hYmlz 5Zw= IE5FV1M= IGRyYQ== IFN0ZWZhbg== IFdyb25n IFNBTQ== IGxvb3NlbHk= IGludGVycHJldGVy IFBsYWlu R292ZXJubWVudA== IGJpZ290cnk= IGdyZW5hZGVz YXZleg== cGljdHVyZWQ= IG1hbmRhdGVk IE1vbms= IFBlZHJv IGxhdmE= Mjc0 IGN5bmljYWw= IFNjcm9sbHM= bG9ja3M= TXA= IGNvbmdyZWdhdGlvbg== b3JuaW5ncw== cGhpbA== IEliaWQ= IGZlcnY= IGRpc2FwcGVhcmluZw== IGFycm9nYW50 c3lu IE1hdmVy IFN1aXQ= MjQx IGFiYnJl YWNrZXJz UGE= IFllbA== V2hlbmV2ZXI= IDIzNQ== IFZpbmU= IEFuYXQ= IGV4dGluY3Q= TEVU IGV4ZWN1dGFibGU= VkVSUw== b3hpZGU= RE5B IFByZWw= IHJlc2VudG1lbnQ= IGNvbXByaXNl IEF2aXY= IGludGVyY2VwdGlvbnM= IHByb2xpZmlj SU5B IEVyaW4= dGhvdWdodA== MjE5 IFBzeWNoaWF0cnk= dW5reQ== Y2hlbWlzdA== SG8= IE1jQ295 IGJyaWNrcw== TG9z cmlseQ== IFVTU1I= IHJ1ZA== IGxhdWQ= IFdpc2U= IEVtZXJhbGQ= IHJldml2ZWQ= IGRhbW5lZA== IFJlcGFpcg== aWRlbQ== Y3RpY2E= IHBhdHJpYXJjaA== IE51cnM= bWVn IGNoZWFwZXN0 cmVlbWVudHM= ZW1wdHk= IENlbGVicg== IGRlcHJpdmF0aW9u Y2hhbnRlZA== IFRodW1ibmFpbHM= RW5lcmd5 IEV0aGFu IFFpbmc= IG9wcG9zZXM= V0lORA== dmlr IE1hdQ== IFNVQg== NjY3 R1JF IFZvbHVudGU= bnRvbg== Q29vaw== 5ZA= ZXNxdWU= IHBsdW1tZXQ= IHN1aW5n IHByb25vdW5jZQ== IHJlc2lzdGluZw== IEZpc2hpbmc= IFRyaWFscw== IHllbGw= IDMxMA== IGluZHVjdA== IHBlcnNvbmFsaXplZA== b2Z0ZW4= UmVi RU1CRVI= IHZpZXdwb2ludA== IGV4aXN0ZW50aWFs KCkp cmVtb3Zl TUVOVFM= bGFzc2Vz IGV2YXBvcg== IGFpc2xl bWV0YQ== IHJlZmxlY3RpdmU= IGVudGl0bGVtZW50 IGRldmlzZWQ= bXVzaWM= YXNjYWRl IHdpbmRpbmc= b2Zmc2V0 IGFjY2Vzc2liaWxpdHk= a2VyZWQ= QmV0dGVy IEpvaG5zdG9u dGhpbmtpbmc= U25vdw== IENyb2F0aWE= IEF0b21pYw== Mjcx MzQ4 IHRleHRib29r IFNpeHRo INin2YQ= IHNsaWRlcg== IEJ1cmdlcg== Ym9s U3luYw== IGdyYW5kY2hpbGRyZW4= IGNlcnY= Kyk= IGV0ZXJuaXR5 IHR3ZWV0aW5n IHNwZWN1bGF0aXZl IHBpdm90YWw= IFdQ IFRFUg== eW5hbWlj IHVwbA== IENhdHM= cGVyaGFwcw== IGNsYXNzbWF0ZXM= IGJsYXRhbnQ= Jy0= IGxha2g= YW50aW5l IEJvcmc= aW9t Lyg= IEF0aGxldGlj IHNhcg== T1RB IEhvZmZtYW4= TmV2ZXJ0aGVsZXNz IGFkb3JhYmxl IHNwYXduZWQ= QXNzb2NpYXRlZA== IERvbWVzdGlj IGltcGxhbnQ= IEx1eGVt IEtlbnM= IHB1bXBz IFNBVA== QXR0cmlidXRlcw== NTA5 YXZvdXI= IGNlbnRyYWxpemVk IFRO IGZyZXNobHk= IEFjaGlldmU= IG91dHNpZGVycw== aGVydHk= IFJlZQ== IFRvd2Vycw== IERhcnQ= YWthYmxl IG1w IEhlYXZlbmx5 IHJpcGU= IENhcm9saW5l cnlhbg== IGNsYXNzaWNz IHJldGlyaW5n IDIyOA== IGFo IGRlYWxpbmdz IHB1bmNoaW5n IENoYXBtYW4= T3B0aW9ucw== bWF4d2VsbA== dm9sdW1l IHN0YWw= IGV4cG9ydGVk IFF1aXRl IG51bWVyaWNhbA== QnVybg== RmFjdA== IEtleXN0b25l IHRyZW5kaW5n IGFsdGVyaW5n IEFmcmljYW5z NDc4 IE1O IEtub2Nr IHRlbXB0YXRpb24= IHByZXN0aWdl T3ZlcnZpZXc= IFRyYWRpdGlvbmFs IEJhaHJhaW4= UHJpdmF0ZQ== IEhPVQ== IGJhcnI= IFRhdA== Q3ViZQ== VVNE IEdyYW5kZQ== IEdhdA== IEZsbw== IHJlc2lkZXM= IGluZGVj dm9sZW50 IHBlcnBldHVhbA== dWJlcw== IHdvcmxkdmlldw== IFF1YW50dW0= IGZpbHRlcmVk IGVuc3U= b3JnZXRvd24= RVJTT04= IE1pbGQ= Mzc5 T1RU w6U= IHZpdGFtaW5z IHJpYmJvbg== IHNpbmNlcmVseQ== IEhpbg== IGVpZ2h0ZWVu IGNvbnRyYWRpY3Rvcnk= IGdsYXJpbmc= IGV4cGVjdGFuY3k= IGNvbnNwaXI= IG1vbnN0cm91cw== IDM4MA== cmVjaQ== IGhhbmRpYw== IHB1bXBlZA== IGluZGljYXRpdmU= IHJhcHA= IGF2YWls IExFR08= IE1hcmlqdWFuYQ== MTk4NQ== ZXJ0b24= IHR3ZW50aWV0aA== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IFN3YW1w IHZhbHVhdGlvbg== IGFmZmlsaWF0ZXM= YWRqdXN0ZWQ= IEZhY2lsaXR5 MjYy IGVuenltZXM= aXR1ZGluYWw= IGltcHJpbnQ= U2l0ZQ== IGluc3RhbGxlcg== IFRSQQ== bW9sb2d5 bGluZWFy IENvbGxlY3RpdmU= aWdhdGluZw== IFRva2Vu IHNwZWN1bGF0ZWQ= S04= IENseQ== b3JpdHk= IGRlZmVy IGluc3BlY3RvcnM= YXBwcm92ZWQ= Uk0= IFN1bnM= IGluZm9ybWluZw== IFN5cmFjdXNl aWJsaQ== NzY1 IGdsb3Zl IGF1dGhvcml6ZQ== 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm IENydWlzZQ== IGNvbnRyYWN0aW5n c2hlbGw= SUZF IEpld2Vs cHJhY3Q= IFBob3Rvc2hvcA== IEtub3dpbmc= aGFybQ== IGF0dHJhY3Rpb25z YWRhbg== ZXR1cw== MDE4 d2FnZW4= QWx0 IG11bHRpcGx5 IGVxdWlsaWJyaXVt Ons= IEZpZ2h0ZXJz IEVkZ2Fy IGZvdXJ0ZWVu R292ZXJu IG1pc3VzZQ== IGFidXNpbmc= IGFuY2VzdHJ5 cmFtZXI= NjQ0 IHdvcm1z IHRoaWNrZXI= IENvbWJpbmU= IHBlYXNhbnRz IHZpbmQ= IGNvbnF1ZXN0 IG1vY2tlZA== IGNpbm5hbW9u IENhbGQ= IEdhbGx1cA== IGF2b2lkYW5jZQ== IGluY2FybmF0aW9u IFN0cmF0 IHRhc3RlZA== ZW50YQ== IE5lYWw= cGFyZWQ= IHRlcm1pbm9sb2d5 amVjdGlvbg== U2NpZW50aXN0cw== IElOUw== IERlZQ== IGRpcmVjdG9yaWVz Um9hZA== IFNoYXA= YnJpZ2h0 IERpcmVjdG9ycw== IENvbHVtbg== IGJvYg== IHByZWZlcmFibHk= IGdsaXRjaA== ZnVydA== IGVn aWRpcw== Q0JD IHN1cnJlbmRlcmVk IHRlc3RhbWVudA== MzM2 dWdnZXN0 IE5pbA== YW5vdGhlcg== IHBhdGhldGlj IERvbm5h IDIxOA== IEF2ZXJ5 IHdoaXNrZXk= IGZpeHR1cmU= IENvbnF1ZXN0 IGJldHM= T2Nj IExlaWNlc3Rlcg== XS4i ICkpOw== IGZsYXNoZXM= NDU2 IG1hc2tlZA== Z2VicmE= IGNvbXB1dGVk Y2hlbA== YXVkZXI= IGRlZmVhdHM= IExpYmVyYXRpb24= IE9zYW1h IFZpdmU= Q2hhbmdlcw== Q2hhbm5lbA== IHRhcmlmZnM= IG1hZ2U= IFNheA== IGluYWR2ZXJ0ZW50bHk= IENSRQ== IFJlYXBlcg== aW5reQ== Z3JhZGluZw== IHN0ZXJlb3R5cA== IGN1cmw= IEZBTlQ= IGZyYW1ld29ya3M= TW9t IEFuY2g= IGZsYXZvdXI= Y2FyYm9u IHBlcm1pdHRpbmc= bGV0Y2hlcg== IE1vemlsbGE= IFBhcmtpbmc= IENoYW1w U2Nyb2xs IG11cmRlcmVy IHJlc3RlZA== IG93ZXM= IFBvc3M= QURE SUZG cmVzb2x1dGlvbg== IE1pbmluZw== IGNvbXBhcmF0aXZl RGlt IG5laWdoYm91cmluZw== IEFTVA== IFRveGlj IGJpYXNlcw== IGd1bmZpcmU= dXJvdXM= IE1vbWVudA== MTk4Mw== IHBlcnZhc2l2ZQ== dHRw IE5vcm1hbGx5 cmly U2FyYWg= IEFsYmFueQ== IHVuc2V0dA== IFNNUw== aXBlcnM= bGF5ZXI= IFdoaXRlcw== dXBsZQ== IHR1cmJv IExlZWRz IHRoYXRz IE1pbmVy TUVS IFJlaWdu IHBlcm1l IEJsaXR6 IDE5MzQ= IGludGltaWRhdGluZw== dHViZQ== IGVjY2VudHJpYw== YWJvbGlj Ym94ZXM= IEFzc29jaWF0ZXM= dm90ZXM= IHNpbXVsYXRl dW1ibw== YXN0ZXJ5 IHNoaXBtZW50cw== RkZGRg== YW50aA== IHNlYXNvbmVk IGV4cGVyaW1lbnRhdGlvbg== 4pag bGF3cw== TWVldA== aWRkbGVz YW50aWNz UmF0aW5n SVNJUw== aGlmdA== IGZyb250cw== YnVm MDE3 IHVuYXR0 IERpbA== bGVhc2Vz IEdhcmRlbnM= Nzc3 dG91Y2g= dmVsbA== NDU4 ID09PT09 c2F2aW5n IGVyb3Npb24= IFF1aW4= IGVhcm5z IGFjY29tcGxpc2htZW50 IFdlaQ== IDxb X19fX18= IGlycmln IFRlZGR5 IGNvbnF1ZXJlZA== IEFybW9yZWQ= IGFzc2VydHM= IG1hbmlwdWxhdGluZw== csOp IHRyYW5zY3JpcHRz R2FsbGVyeQ== IHBsb3R0aW5n TmVpbA== IGJldHJheWFs bG9hZGVy IFN1bA== IGRpc3BsYWNlbWVudA== IHJveWFsdHk= IFdJ aGVpdA== IERldmljZXM= YWxsZWw= IG11bmljaXBhbGl0aWVz IGNhbmFs U3RhcnM= IFVBRQ== ICLigKY= IENV YWJvdmU= IHJlc29uYW5jZQ== IGd1aUFjdGl2ZVVu YWRkZWQ= IEJyYXZlcw== IElibg== IGhlcmVieQ== IEJSRQ== IHNoYXJlaG9sZGVy IEhpcg== IEpp IHN0cmFuZ2VseQ== IGFkbWlyZWQ= IHBsaWdodA== IGJhY2hlbG9y IFBvbGU= Y2lwbGluYXJ5 VG9ueQ== IEFybWVuaWFu IHVubWFu IFppb25pc3Q= U3RhZ2U= aXNjb3Zlcg== IGF1dG9tb3RpdmU= IHNpZGVsaW5lcw== IHNsaWNr IFJlbmFpc3NhbmNl IEZVTg== SW1hZ2Vz IEhhag== IHBpbmc= IHNob3J0Y3V0 IEJsdmQ= IExvb2tz IGJ1cnN0cw== IGNsYW1w IG1pc2g= IHNvcnRpbmc= IHBhdHJpb3Q= IGNvcnJlY3RuZXNz IFNjYW5kaW5hdg== IENhdmFsaWVycw== cHl0aG9u YXphcg== IDM3NQ== IEphdW5l NDA5 IGRldHJpbWVudGFs IHN0YWJiaW5n IHBvaXNvbmVk IGZvdW50YWlu b2NlbnQ= b3JzdA== IE1hcmk= IHJhaW5z IE92ZXJz IEluc3RpdHV0aW9u dWRnZXQ= QU1Z dGFsZQ== IEtS IFByaWNlcw== IGhlYWRhY2hlcw== IGxhbmRzbA== IEF1cmE= Qm9udXM= IFpoYW8= IEhpcA== IGhvcHM= IEt1cmRpc3Rhbg== IGV4cGxvaXRpbmc= cnlu IGh5cG9jcmlzeQ== b3BlbmluZw== IGd1bnNob3Q= IHdlZA== aW50ZXJzdGl0aWFs SW50ZXJzdGl0aWFs IGFtZW4= QnJlYWtpbmc= IG1hcmtldGVk V2lyZQ== IENyb3dk Q29udGludWU= IEtub3du IEVmZmVjdGl2ZQ== b3JlYW4= aXpvbnM= Sm9zZXBo IGVzY2FsYXRpb24= dXNlcm5hbWU= IGN1cnRhaW4= QVRFUw== IFBBUg== IE1peQ== IGNvdW50ZXJmZQ== bGVuZQ== IGNvbnRlbmRlcnM= ZGFpbHk= IEFzYw== IFBoaWxsaXA= bW9zdGx5 IGZpbGVuYW1l aGVuZQ== IHJlc2VtYmxpbmc= IHN0YWdpbmc= IENobG9l IHdpcmluZw== SG9u IFJlbmV3 b3R0YWdl IEh5YnJpZA== bXVjaA== IHN0cm9rZXM= IHBvbGljeW1ha2Vycw== QVBURVI= IEFya2hhbQ== cGxvdA== IGFzc2lzdGFudHM= IGRlcG9ydA== IFNlZ2E= IGluZmx1ZW56YQ== IEN1cnNlZA== IEtvYmU= IHNraW5ueQ== UHJvdmlkZXI= IFJpcA== IGluY3JlbWVudGFs cHJvZHVjdHM= QkY= IGRvbWU= IENyZWRpdHM= IGxvc2Vycw== aW50cw== IEJldHR5 IFRhbGVudA== IERBTQ== THY= RXNz IGRlbnM= dGVtcA== SnVkZ2U= b2RpYw== ICco VVJFUw== ZXRzaw== Vk8= IHJldHJpZXZlZA== IGFyY2hpdGVjdHM= 2Yc= IGV0aGlj IFNlY29uZGFyeQ== c3RvY2tz YWRpYQ== IDMyNQ== IE9waW5pb24= IHNpbXVsdGFuZW91cw== IGRpeno= dWxw IHNtdWdnbGluZw== aXBwZXJ5 UmFuZG9t ZmFjaW5n IERhcw== IHN0b2NrcA== IGRpc2Nsb3N1cmVz cG9pbnRlcg== IGNvcmFs IFNlbGVjdGlvbg== IFBpa2U= aXZhbGVudA== IHJ1dGhsZXNz IFJpbQ== IGVuc3Vpbmc= IEV4cGVyaW1lbnQ= IGNvbmdyZXNzbWFu IGJlbGlldmVy IHVuc3BlY2lmaWVk IE1vcmQ= IGtub3dsZWRnZWFibGU= IFZFUlk= VFg= IHN0cmFwcw== IHR1cmY= YXBlc2hpZnRlcg== IG1hcml0YWw= IGZsb2Nr 44GG MjYz QU1FUw== IE9wcG9zaXRpb24= IHRyZWFzdXJlcw== IEdPRA== IG1vZGVsZWQ= IFdPUkxE IChb IFVzYWdl SEY= ICQo dXNzZWQ= IHBpb25lZXI= RWlnaHQ= cGFyc2U= YnJlYWQ= cml0eg== IE1pcmFuZGE= IEthbnQ= Kysp b3Jlbg== IHByb3Zva2Vk IGJyZWVkcw== IEluY2x1ZGVz IFBhc3RlYmlu IEZsaXA= SmF2YQ== IGJyaW5r IHJ1bW9yZWQ= IHVuc2Vlbg== IGdhcm5lcmVk IERlZmlu YWx0ZWQ= IHRhdHRvb3M= IGhlc2l0YXRpb24= aXNpdGlvbnM= IFdlYXZlcg== IFJlcG9ydGluZw== IHRoZXJhcGllcw== IGNvbnN1bHRhbnRz IHJlc2lkdWFs IE1hbGk= IFJvbWE= aWFnbw== IFJlc2lkZW50cw== dWJp IHJlbWVkaWVz IGFkYXB0aXZl IEFsaXZl IEJhcmNs IHdhbGxldHM= Y3J5cHQ= ZXRlcm1pbmF0aW9u IFBlbG9zaQ== IHNsaXBwaW5n b3Rvbmlu IGFsbGlhbmNlcw== cGF0cmljaw== aXJpcw== IG9ydGg= IFBlcmtpbnM= IERlVg== IEdldHM= IGRyeWluZw== Z2Vl Zm9yZXN0 IEZvcmdldA== b3JlbQ== MzM5 IHZhZ3VlbHk= IERpb24= IFBvcm4= IEhPVw== IHBuZXVt IHJ1YmJsZQ== IFRhc3Rl ZW5jaWE= IEdlbA== IGRzdA== IDI0NQ== IE1vcm9jY28= aW5mbGFtbQ== IFR3aW5z IGJvdHM= ZGF1Z2h0ZXI= IEJhbGs= IGJyZXRocmVu IGxvZ29z IGdvYmw= ZnBz IHN1YmRpdmlzaW9u IHBhd24= IHNxdWVlemVk IG1vcmFsZQ== IERX JyI= IGtub3Q= b29reQ== IGRpdmlzaXZl IGJvb3N0ZWQ= Y2h5 44OQ aWZhY3Q= IG5ld2NvbWVycw== IFdyZXN0bGluZw== IHNjb3V0cw== d29sdmVz UmF0 IG5pbmV0ZWVudGg= IE9zYm9ybmU= U3RhdHM= IGVtcG93ZXJlZA== IHBzeWNob3BhdGg= IE9FTQ== dWdnYWdl IFBL IE1vaGFtbWFk UGFr IGFuYXJjaGlzdHM= IEV4dHJhY3Q= ZXN0aGVz IFN0b2NraG9sbQ== bG9v IEdyYXBo IGRlcGxveWluZw== IFN0cmFuZ2Vy IE1vbGQ= IHN0YWZmZXI= IGRpc2NvdW50ZWQ= dWNrbGU= cGxlYXNl IExhbmRpbmc= w61h IDE5Mw== IGFudGU= IHJlcGV0aXRpb24= ICsvLQ== IHBhcm9keQ== IGxpdmVseQ== QUFB IEhvcnVz IHBpdHM= aW5kZXJz TE9D IFZlbmljZQ== NDA2 IERpc2NvdmVy 4oY= ZWxsZWN0dWFs IHBlbnM= IGV5ZWw= aWd1b3Vz SW1wbA== IGpva2luZw== IGludmFs IEJlbGZhc3Q= IGNyZWRpdG9ycw== IFNreXdhbGtlcg== b3Zza3k= IGNlYXNlZmlyZQ== IHNlYWxz aXNvZnQ= KSku IEZlbGl4 SVRT IHRyZXNw IEJsb2NrY2hhaW4= ZXdhcmU= IFNjaHdhcg== ZW5uZQ== bW91bnRlZA== IEJlYWNvbg== bGVzaA== IGltbWVuc2VseQ== IGNoZWVyaW5n RW1wbG95 c2NlbmU= aXNobHk= YXRjaGV3YW4= IE5pY29sYXM= IGRyYWluZWQ= IEV4aXQ= IEF6ZXJi anVu IGZsb2F0ZWQ= dWFuaWE= RGVlcA== IHN1cGVydg== IG15c3RpY2Fs IERvbGxhcg== IEFwb3N0bGU= IFJFTA== IFByb3ZpZGVk IEJ1Y2tz 44O0 Y3V0dGluZw== IGVuaGFuY2VtZW50cw== IFBlbmd1aW5z IElzYWlhaA== IGplcms= IFd5bg== IHN0YWxsZWQ= IGNyeXB0b2N1cnJlbmNpZXM= IFJvbGFuZA== c2luZ2xl IGx1bWlu IEZlbGxvdw== IENhcGFjaXR5 IEthemFraA== V04= IGZpbmFuY2Vk Mzg5 IHRpZA== IGNvbGx1c2lvbg== IE15cg== 7oA= U2VuYXRvcg== IHBlZGlhdHJpYw== IG5lYXRseQ== IHNhbmR3aWNoZXM= IEFyY2hpdGVjdHVyZQ== IHR1Y2tlZA== IGJhbGNvbnk= IGVhcnRocXVha2Vz cXVpcmU= RnV0dXJl IGhlZnR5 6Zc= IHNwZWNpYWxpemVz IHN0cmVzc2Vz IHNlbmRlcg== IG1pc3VuZGVyc3RhbmRpbmc= IGVwaWxl IHByb3Zva2U= IENvbG9ycw== IGRpc21heQ== dWtv W18= NTg2 bmV1dHJhbA== IGRvbmF0aW5n IFJhbmRhbGw= TXVsdGk= IGNvbnZlbmllbnRseQ== IFN1bmc= IENvY2E= IHRlbnRz IEFjY2VsZXI= IHBhcnRuZXJlZA== Mjcy aXJtaW5n IEJBUw== c29tZXRpbWVz IG9iamVjdGVk dWJyaWM= cG9zZWQ= TENT Z3Jhc3M= IGF0dHJpYnV0YWJsZQ== VklT SXNyYWVsaQ== IHJlcGVhdHM= IFJN dmFn dXRh aW5vdXM= IGluZXJ0 IE1pZ3VlbA== 5q0= IEhhd2FpaWFu Qm9hcmQ= IGFydGlmaWM= IEF6ZXJiYWk= YXNpbw== IFJlbnQ= QUlO IGFwcGxpYW5jZXM= IG5hdGlvbmFsaXR5 IGFzc2hvbGU= IE5lYg== IG5vdGNo aGFuaQ== IEJyaWRl QXZhaWxhYmlsaXR5 IGludGVyY2VwdGVk IGNvbnRpbmVudGFs IHN3ZWxsaW5n IFBlcnNwZWN0 Ymllcw== Ljw= aXRobWV0aWM= IExhcmE= IHRlbXB0aW5n YWRkcg== IG92ZXJzZWVpbmc= Y2xhZA== IERW IEdpbmdyaWNo IG11bg== IEFwcHJvcHJp IGFsdGVyYXRpb25z IFBhdHJlb24= IGhhdm9j IGRpc2NpcGxpbmVz IG5vdG9yaW91c2x5 YWt1eWE= aWVyaQ== Pyku IFdlbnQ= IHNpbGljb24= IHRyZW1i Q29udGFpbmVy S25vd24= IG1vcnRhcg== ZXN0ZQ== aWNrYQ== QXJ0aHVy IFByZXZpb3VzbHk= IE1hcnR5 IHNwYXJzZQ== Z2lucw== IGlud2FyZA== IFBhcnRpY2lwYW50 Q29weQ== IE1pc2M= IGFudGliaW90aWM= IFJldHJv IGVsdXNpdmU= IGFzc2FpbA== IEJhdHRhbGlvbg== IEJvdWdodA== IGRpbWluaXNo IEV1cm9wYQ== c2Vzc2lvbg== IERhbmdlcm91cw== aWVzZWw= IGRpc2JlbGllZg== IGJsYXN0cw== ZXh0cmVtZQ== IEJveWQ= IFByb2plY3Rz IEd1eXM= IHVuZGVyZ29uZQ== IGdyaWxs IER3aWdodA== IDE5Nw== VVNFUg== IGZpbGVzeXN0ZW0= IGNsb2Nrcw== VGF5bG9y IHdyYXBwZXI= IGZvbGRpbmc= b3VzYW5k IFBoaWxpcHBpbmU= QVRJT05BTA== IFBlcnRo IGFzaGVz IGFjY3VtdWxhdGU= IEdhdGV3YXk= U2hvcA== b3Jrc2hpcmU= SGFu IEJhcnJlbA== IExlaA== IFhW IHdoaW0= IHJlcG8= IENH IE1hbQ== IGluY29ycG9yYXRpbmc= IGJhaWxvdXQ= IGxpbmd1aXN0aWM= IGRpc2ludGVn Q0xF IGNpbmVtYXRpYw== IEZpYmVy U3lu aWxpb24= IENvbXBvcw== Y2hlbnM= IG5lb2M= IGJvaWxlZA== RklORQ== b25v dW5jbGU= aWtlbg== IEJN zrk= IHJlY2VpcHRz IGRpc3Bvc2Vk IFRoaXJ0eQ== IFJvdWdo IEFCUw== IG5vdHdpdGhzdGFuZGluZw== b2xsZW4= IyQ= IHVucmVsaWFibGU= IGJsb29t IG1lZGlvY3Jl IHRyYW0= IFRhc21hbg== IHNoYWtlcw== IG1hbmlmZXN0bw== IE1X IHNhdGlzZmFjdG9yeQ== IHNob3Jlcw== IGNvbXB1dGF0aW9u IGFzc2VydGlvbnM= b3Jtb25z YXJhZw== YWJpdA== RGVtb2NyYXRz IExvb3Q= IFZvbGtz aGFpcmVk IGdyYXZpdGF0aW9uYWw= U2luZw== IE1peg== IHRocm90dGxl IHR5cmFubnk= IFZpZXdz IHJvYmJlcg== IE1pbm9yaXR5 IHNocmluZQ== c2NvcGU= cHVycG9zZQ== IG51Y2xldXM= b3VyY2luZw== IFVTREE= IERIUw== d3Jh IEJvd2ll U2NhbGU= IEJFTA== eGk= SXRlcg== ICgpLA== d3JpZ2h0 IHNhaWxvcnM= b3VzZWQ= TkFTQQ== IFByb29m IE1pbmVyYWw= dG9rZW4= IEZE UmV3 IGVsbA== NjMw IGNoYW5jZWxsb3I= IEdvcw== IGFtb3VudGVk IFJlY3Jl b21leg== IE9wdGlt IE9saXZl IHRyYWNrZXI= b3dsZXI= IFVuaXF1ZQ== Um9vdA== IG1hcml0aW1l IFF1cmFu IEFkYXB0 IGVjb3N5c3RlbXM= IFJlcGVhdA== IFNveQ== IElNUA== IGdyYWR1YXRpbmc= YW5kZW0= UHVy IFJlc2V0 IFRyaWNr IFBoaWxseQ== IFR1ZQ== IE1hbGF5c2lhbg== IGNsaW1heA== IGJ1cnk= IGNvbnNwaWM= IFNvdXRoYW1wdG9u IEZsb3dlcnM= IGVzY29ydGVk IEVkdWNhdGlvbmFs IElSQw== IGJydXRhbGx5 ZWF0aW5n IHBpbGxhcg== IFNhbmc= IEp1ZGU= YXJsaW5n IEFtbmVzdHk= IHJlbWluZGluZw== IEFkbWluaXN0cmF0aXZl aGVzZGE= IGZsYXNoZWQ= IFBCUw== cGVyYXRl ZmVhdHVyZQ== IHN3aXBl IGdyYXZlcw== b3VsdHJ5 MjYx YnJlYWtz IEd1ZXI= IHNocmltcA== IFZvdGluZw== cXVpc3Q= IGFuYWx5dGljYWw= IHRhYmxlc3Bvb25z IFNPVQ== IHJlc2VhcmNoZWQ= IGRpc3J1cHRlZA== IGpvdXI= IHJlcGxpY2E= IGNhcnRvb25z YmlhbnM= fSk= Y29weQ== R290 b3VjaGVk UFVU IHN3YXJt bm90YXRpb25z c2FpZA== IHJlYnVpbHQ= IGNvbGxhYm9yYXRl IHJhZ2luZw== IG5hcg== IGRlbW9ncmFwaGljcw== IEREUg== IGRpc3RydXN0 b3NzaWVy IEtybw== IHB1bXBraW4= IHJlZ3JldHM= IGZhdGFsaXRpZXM= IExlbnM= IE9sZQ== cGQ= IHB1cHBldA== IE91dGxvb2s= IFN0YW0= T2w= RmFpcg== VVU= IHJld3JpdHRlbg== xLE= IGZhc2NpbmF0ZWQ= IHZlY3RvcnM= IHRyaWJ1bmFs dWF5 IE1hdHM= IENvaW5z W1s= IDE4MQ== IHJlbmRlcnM= IEthZXBlcm5pY2s= IGVzcGlvbmFnZQ== IHN1bW0= IGRpdGNo QWNjb3VudA== IHNwcmVhZHNoZWV0 IG11dGFudA== cGFzdA== NDA3 IGR5ZQ== IGluaXRpYXRpb24= IDQwMDA= IHB1bmlzaGFibGU= IHRoaW5uZXI= IEtoYWw= IGludGVybWVkaQ== RHVu IEdvdGhhbQ== IGVhZ2VybHk= IHZhZ2luYWw= cG93ZXJz Vlc= IFdBVENIRUQ= IHByZWRhdG9y YW1zdW5n IGRpc3Bhcml0eQ== IFsq IGFtcGg= IG91dHNraXJ0cw== IFNwaXJpdHM= IHNrZWxldGFs 0Ls= IFJlYXI= IGlzc3VhbmNl IExvZ2lj cmVsZWFzZWQ= Wlo= IEJvdW5k RW50cnk= IGV4aXRz aXNvbA== IEZvdW5kZXI= IHdyZQ== IEdyZWVubGFuZA== IE1NTw== dGFrZXI= SU5D 44G+ IGhvdXJseQ== aGVua28= IGZhbnRhc2llcw== IGRpc29i IGRlbW9saXRpb24= 44OL IGVubGlzdGVk cmF0dWxhdGlvbnM= IG1pc2d1aWRlZA== IGVuc3VyZWQ= IGRpc2NvdXJhZ2Vk bW9ydA== IGZsYW5r IGNlc3M= IHJlYWN0cw== IFNlcmU= c2Vuc2l0aXZl IFNlcnBlbnQ= YXNzYWQ= IDI0Nw== IGNhbG1seQ== YnVzdGVycw== IGJsZWVk IFN0cm8= IGFtdXNlbWVudA== IEFudGFyY3RpY2E= IHNjZXB0 IEdhdw== YXE= YXNvbmlj IHNwcmF3bGluZw== bmF0aXZl YXR1cmF0ZWQ= IEJhdHRsZWZpZWxk SVZFUlM= RUI= IEdlbXM= IE5vcnRod2VzdGVybg== IEZpbG1z IEF1dG9tYXRpYw== IGFwcHJlaGVuZA== 44Go IGd1aU5hbWU= IGJhY2tlbmQ= IGV2aWRlbmNlZA== Z2VhbnQ= MDEy IFNpZWdl IGV4dGVybmFsVG8= IHVuZm9jdXNlZFJhbmdl IGd1aUFjdGl2ZVVuZm9jdXNlZA== IGd1aUljb24= IGV4dGVybmFsVG9FVkE= IGV4dGVybmFsVG9FVkFPbmx5 RnJp Y2hhcmQ= ZW5hcmllcw== IGNoaWVmcw== IGNm IEhVRA== IGNvcnJvYm9y IGRC IFRha2Vu IFBhdHJpY2lh cmFpbA== IENoYXJt IExpYmVydGFyaWFu cmlldmU= UGVyc29uYWw= IE9VUg== Z2VyaWVz IGR1bXBpbmc= IG5ldXJvbG9naWNhbA== aXRpbWF0ZQ== IENsaW50b25z cmFmdGVk IE1vbGx5 IHRlcm1pbmFscw== cmVnaXN0ZXI= IGZsYXJl IGVuY29kZWQ= IGF1dG9wc3k= cGVs bWFjaGluZQ== IGV4ZW1wdGlvbnM= IFJveWFscw== ZGlzdGFuY2U= IGRyYWZ0cw== IGxhbWU= IEN1bm5pbmc= IHNwb3VzZXM= IE1hcmtldHM= IENhcnJpZXI= IGltcGx5aW5n IFlhaw== c2lk IGxvc2Vy IHZpZ2lsYW50 IGltcGVhY2htZW50 IGF1Z21lbnRlZA== IEVtcGxveWVlcw== IHVuaW50ZW5kZWQ= dGVybmFsbHk= IFdhdHQ= IHJlY29nbml6YWJsZQ== ZXNzaW0= 5p0= IGNvYXRlZA== cmhh IGxpZXV0ZW5hbnQ= IExlZ2lzbGF0aW9u cHVibGlzaGVk NDQ0 MDEz IGlkZWFsbHk= IFBhc3N3b3Jk IHNpbXBsaWZ5 IE1ldGE= IE1SSQ== IHBsZWFkaW5n b3JnYW5pemVk aGFuZGxlcg== IHVucmF2ZWw= Y29ycmVjdA== IGljeQ== IHBhcmFub2lk IHBhc3Nlcg== IGluc3BlY3Rpb25z b2Zlcg== IEhlYWx0aGNhcmU= Mjgz IEJydXQ= aW9sYQ== Zm9yZ2U= IE1lZGlldmFs TVNO aWV2ZXJz IFByb2dyYW1taW5n 5Yk= IDIyMw== bXU= IENMRQ== dWdh IHNob3BwZXJz IGluZm9ybWF0aXZl IFBsYW5z IHN1cHBsZW1lbnRhdGlvbg== IFRlc3Rz dHlhcmQ= b2N5dGVz IFZlZ2E= IEd1amFyYXQ= ZXJtYW5lbnQ= RXhjZXB0 IExPVA== YWxsYQ== IEN1bW0= IE9zdw== IHZlbm9t IERlYnQ= IERPV04= IHJldW5pb24= IG11Yw== IFJlbGllZg== IGdlb3A= IPCfmA== YWxvZ3Vl QW50aA== ZWNobw== IGNvcnJvcw== IHJlcGxpY2F0aW9u IEJsYXppbmc= IERhdWdodGVy IGluZmxpYw== IExpbmRzZXk= 2Yg= Mjg0 RXhpdA== IGdsb29t VEFJTg== IHVuZGVybWluaW5n IGFkdmlzaW5n aGlkZGVu IG92ZXJmbG93 IGdvcg== dXJkdWU= IGVjaG9lcw== ZW5oYWdlbg== IGltcHVscw== ZHJ1Zw== Y2FzaA== IGFzeW5j IG1pcmFj YXR0cw== cHVuaw== IHBpdm90 IExlZ2lzbGF0aXZl IGJsb2dnZXJz IENsYXc= c2J1cmc= ZHls IFJlY29tbWVuZA== IHZlcnRl IHByb2hpYml0aW5n IFBhbnRoZXI= Sm9uYXRoYW4= IG9taW4= IGhhdGVmdWw= Mjgx IE9yY2hl IE11cmRvY2g= ZG93bnM= IGFzeW1t R0VS QWx3YXlz IGluZm9ybXM= IFdN IFBvbnk= IEFwcGVuZGl4 IEFybGluZ3Rvbg== SmFt IG1lZGljaW5hbA== IFNsYW0= SVRJRVM= IHJlYWZm IFJp Rkc= U3ByaW5n Ym9vbA== IHRoaWdocw== IG1hcmtpbmdz IFJhcXFh IExhaw== cG9sbA== dHNreQ== IE1vcnR5 IERlZmluaXRpb24= IGRlYnVuaw== ZW5kZXJlZA== IExlb25l YXZlcnM= IG1vcnRnYWdlcw== QXBwYXJlbnRseQ== Tmlj aGF1cw== IFRob3VzYW5kcw== YXVsZA== IG1hc2g= c2hvb3Q= IGRpYXJy IGNvbnNjaW91c2x5 SGVybw== ZWFz IE5hdHVyYWxseQ== IERlc3Ryb3llcg== IGRhc2hib2FyZA== c2VydmljZXM= Um9n IG1pbGxlbm5pYWxz IGludmFkZQ== LSg= IGNvbW1pc3Npb25z IEF1Y2tsYW5k IGJyb2FkY2FzdHM= IGZyb250YWw= IGNyYW5r IEhpc3Rvcmlj IHJ1bW91cnM= Q1RW IHN0ZXJpbA== IGJvb3N0ZXI= cm9ja2V0 44K8 dXRzY2hl IFBJ IDIzMw== IFByb2R1Y2Vy IEFuYWx5dGljcw== IGludmFsdWFibGU= IHVuaW50ZW50aW9u IENZ IHNjcnV0aW4= IGdpZ2c= IGVuZ3VsZg== IHByb2xldGFyaWF0 IGhhY2tz IEhldw== YXJhaw== IFNsaW1l aWVsZGluZw== YWdoZXI= IEVsbGlvdA== IHRlbGVjb20= IDIxOQ== dWx0YW4= IEFyYm9y IFNjb3V0cw== QmFu IGxpZmVzcGFu IGJsYXNw Mzg4 IGp1ZGljaWFyeQ== IENvbnRpbmVudGFs YXNraW5n TWND TEVE IGJhZ2dhZ2U= IFNvcmNlcmVy IHJlbW5hbnRz IEdyaWZmaXRo ZXRzdQ== IFN1YmFydQ== IFBlcnNvbmFsaXR5 ZGVzaWduZWQ= dXNoaW1h YWduYXI= IHJlY29pbA== IHBhc3Npb25z XCI6 IHRlZQ== IGFib2xpdGlvbg== IENyZWF0aW5n amFj IDE5NA== MDE5 IHBpbGxhcnM= cmljaGVk LyI= dGs= IGxpdmVsaWhvb2Q= IHJvYXN0ZWQ= YWhvbg== IEh1dGNo YXNzZXJ0 IGRpdmlkZW5k IGtuaXQ= IGRhdW50aW5n IGRpc3R1cmJhbmNl IHNoYWxl IGN1bHRpdmF0ZWQ= IHJlZnJpZ2VyYXRvcg== TEI= IE5FVA== IGNvbW1lcmNpYWxz IHRoaW5rZXJz NDU1 IGNob3A= QnJvYWQ= IHN1c3BpY2lvbnM= IHRhZ2dlZA== bGlmdGluZw== IHN0eWxpc2g= IFNoaWVsZHM= U2hvcnRseQ== IHRhaWxz QXV0aA== U1RF IEdBTUU= IHNlaXNt IEtpcw== b2xvZ25l IGNvd29yaw== IGZvcmNpYmx5 IHRoeXJvaWQ= IFBC QU5F bWFycmllZA== aG9yc2U= IHBvbHltZXI= IENoYWw= b2Rvcg== REVCVUc= IENvbnRleHQ= IGJsaXNz IHBpbnBvaW50 IE1hdGhlbWF0 bGVncmFt IFdlZWtlbmQ= IGxhYmVsbGVk IGJhcnQ= aXRsZXM= IGVzdHJvZ2Vu 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU Iic= IHZpc2libHk= IG91dHNpZGVy YWlkYQ== QXJlYQ== IGRpc3NlbWlu IGRpc2hvbmVzdA== IENsb3NlZA== IEJ1bGxldGlu IFJhbXNleQ== c3dvcmQ= IFhJ b3VyY2Vk U2FtZQ== MzQ2 IFJlcGU= IEtvdQ== Y2FrZQ== ZW1pcw== Q2FjaGU= IE1lYW5pbmc= IEVubGlnaHQ= b25vbXk= IG1hbmlmZXN0YXRpb24= c3dvcnRo SmF5 IGNob3Jl w7Zy RHJlYW0= IHNhbmN0aW9uZWQ= IGN1bHR1cmFsbHk= IEFyYQ== TmF2 IHRoZW9sb2dpY2Fs IHN0cnV0 IFZP IEhhbmRib29r IGNvbnN0cnVjdGluZw== IMK2 IEJlbmVmaXRz IFBzeWNob2xvZ2ljYWw= c2Fj 5bg= cG9saWN5 IE1hdHRlcnM= IFJlcG9ydGVk IEJ5dGU= IHZpdHJv IE1haWRlbg== IGxhbQ== IEplbm5pbmdz IGdhcm1lbnQ= IFJ1dGdlcnM= IFN0YWZmb3Jk IFdlbGxpbmd0b24= IGludGVybWl0dA== IG5wbQ== IG9yZGVhbA== IHBsdWdnZWQ= b29taW5n aW5pc2hlZA== ZnJhbWV3b3Jr IHRpbWJlcg== IGNhc3M= IDg1MA== aWxlc3M= IFJlZHV4 NzY4 U3RyZQ== IHN1cnBhc3NlZA== d2hlbA== IHBhcmFsbGVscw== IHZlaWw= IEdJ IFJFU1Q= IHJlYWRpbmVzcw== c29ydA== IG1vZGlmeWluZw== IFNsYXRl cnVmZg== IG1hcmJsZQ== IGluZnJhcmVk IGF1ZGl0b3I= IEZBTlRBU1k= IFBvdmVydHk= IFNQRA== ICIo S3k= UkFZ IGV4ZWN1dGlvbnM= IEJldmVybHk= IE1hcnhpc20= IEJ1cnN0 IEthbGk= ZXN0b25lcw== Q2xlYXJseQ== RWxs 44Gn IFByb2NlZWRpbmdz VG9rZW4= SUZJQw== w7Fh Q2VudHJhbA== IEhhbGV5 IERyYW1h IGZvcm1hdGlvbnM= T1JO Qm9va3M= IGRvbWluYXRpbmc= IEZseWVycw== IENvbXBhbmlvbg== IGRpc2NpcGxpbmVk IFl1Z29zbGF2 IFNwZWxscw== IHZlbmdlYW5jZQ== IGxhbmRsb3Jkcw== TGVu IE9ncmU= YW5vaWE= IHBpZXJjaW5n IGNvbmdyZWc= IHNjb3Jlcg== b2JpYQ== IG5pY2tlbA== IExlYXJucw== IHJlam8= IG1hc3RlcnBpZWNl Rmxhc2g= IGluaGFiaXRlZA== IE9wZW5HTA== IER1ZA== IElDTw== IGFydGVy IHBsdXI= IG1hc3Rlcnk= IGxvbmdzdGFuZGluZw== c3RlZA== IHdpbmVz IHRlbGV2aXNlZA== IFNocmluZQ== IEJheWVybg== IOKTmA== IGVuY2xvc3VyZQ== am9obg== IHByb3BoZXRz IFJlc3VycmVjdGlvbg== IE9yZGVycw== IHVuZXZlbg== cmFscw== IGR3aW5k IExhaA== IFNsb3Zlbg== Mzc4 IGluc2lzdGVuY2U= YWZmbGU= IENsb25l IGhhcmRzaGlw IENvbmdyZXNzbWFu IHBsZWFk IHJldmlld2Vycw== IGN1cmVk IDE5MzU= YXNsZXk= ZmFrZQ== IFRoaW5raW5n eWRpYQ== UEFSVA== IERvdGE= b2l0 IHdoaXBwZWQ= IGJvdW5jaW5n IEhpc3Bhbmljcw== Y29taW5ncw== IGNhbm5hYmlu IENoYW1iZXJz IFphY2s= T3B0aW9uYWw= IGNvYXRz IHByb3dlc3M= IE5vcnRvbg== IHBsYWlubHk= IGZyZWlnaHQ= IGluaGliaXRpb24= IGNsYW0= IDMwMw== a2Vm YWxlaWdo THVrZQ== IHBzeWNobw== YXRvcml1bQ== TUVE IHRyZWF0aWVz IGluZGlzYw== IGRj T1BT IHJlc2lsaWVudA== IEludGVyc3RhdGU= IHNsYWNr IG11bmRhbmU= IGVzdGFibGlzaGVz MzU5 IHN0cmFpbmVk IG5vbmQ= U3Vz IGNhc3Rl YXJhdGU= aWV2aW5n IHVuZmFpcmx5 IHBhcnNlcg== b25pYWw= dXJzaXZl Vmlh IE90dG8= IEF1dGhvcml0aWVz c3Ryb2tl S1I= IE1lcmN5 IGZ1cm5pc2hlZA== IG91dHNldA== IG1ldGlj MTk4Mg== b2xpdGhpYw== IFRlbnQ= b2dpY2Fs IEFpcmNyYWZ0 IGhpZGVz IEJlY2FtZQ== IGVkdWNhdG9ycw== cmVhY2hpbmc= IHZvbGF0aWxpdHk= IHRvZGRsZXI= IE5BU0NBUg== IFR3ZWx2ZQ== IEhpZ2hsaWdodHM= IGdyYXBl IHNwbGl0cw== IHBlYXNhbnQ= IHJlbmVn IE1TSQ== VGVtcA== c3RhcnM= IHRyZWs= IEh5ZGU= YmluZGluZw== IHJlYWxpc20= IG94aWRl IEhvcw== IG1vdW50cw== IGJpdGluZw== IGNvbGxhcHNpbmc= IHBvc3RhbA== IG11c2V1bXM= IGRldGFjaGVk IHJlc3BlY3Rpbmc= IG1vbm9wb2w= IHdvcmtmbG93 IENha2U= VGVtcGxhdGU= IE9yZ2FuaXNhdGlvbg== IHBlcnNpc3RlbmNl MzY5 Q29taW5n QnJhZA== IHJlZHVuZGFudA== IEdUQQ== IGJlbmRpbmc= IHJldm9rZWQ= IG9mZmVuZGluZw== IGZyYW1pbmc= IHByaW50Zg== Q29tbXVu bWVtYmVycw== T3V0c2lkZQ== IGNvbnN0cnVlZA== IGNvZGVk Rk9SRQ== IGNoYXN0 Q2hhdA== SW5kaWFu IFlhcmQ= PyEi IFBvcnRz IFhhdmllcg== IFJFVA== Jy4i IEJvYXQ= aXZhdGVk aWNodA== dW1lcmFibGU= RHM= IER1bm4= IGNvZmZpbg== IHNlY3VyZWx5 IFJhcHRvcnM= IEJlcw== SW5zdGFsbGF0aW9u IGluY2VwdGlvbg== IEhlYWx0aHk= ZW5kYW50cw== IHBzeWNob2xvZ2lzdHM= IFNoZWlraA== Y3VsdHVyYWw= IEJsYWNrQmVycnk= c2hpZnQ= RnJlZA== b2NoZQ== IGNha2Vz IFNFTw== IEdpYW4= IEFzaWFucw== b2dnaW5n ZWxlbWVudA== IHB1bmRpdHM= IFZhdWdo IEdhdmlu IGhpdHRlcg== IGRyb3duZWQ= IGNoYWxr IFppa2E= IG1lYXNsZXM= ODAy 4oCmLi4= IEFXUw== XSI= IGRpc3RvcnQ= IE1hc3Q= IGFudGlib2RpZXM= IE1hc2g= TWVtb3J5 IFVnYW5kYQ== IFByb2I= IHZvbWl0aW5n IFR1cm5z IG9jY3VweWluZw== IGV2YXNpb24= IFRoZXJhcHk= IHByb21v IGVsZWN0cg== IGJsdWVwcmludA== IERyZQ== cHJpY2Vk IERlcG90 IGFsbGV2aWF0ZQ== IFNvbWFsaQ== bWFyZw== bmluZQ== IG5vc3RhbGdpYQ== IFNoZXBoZXJk IGNhdmFscnk= IHRvcnBlZA== IEJsb29keQ== eGI= IHNhbms= IGdvYWx0 cmVwb3J0cHJpbnQ= ZW1iZWRyZXBvcnRwcmludA== Y2xvbmVlbWJlZHJlcG9ydHByaW50 IEluaXRpYWxseQ== IEZpc2NoZXI= IG5vdGV3b3J0aHk= Y2Vybg== IGluZWZmaWNpZW50 cmF3ZG93bmxvYWQ= cmF3ZG93bmxvYWRjbG9uZWVtYmVkcmVwb3J0cHJpbnQ= Y2F0aW9u IER5bmFzdHk= bGFn REVT IGRpc3RpbmN0bHk= IEVzdG9uaWE= IG9wZW5uZXNz IGdvc3NpcA== cnVjaw== V2lkdGg= IElicmFoaW0= IHBldHJvbGV1bQ== IGF2YXRhcg== IEhlZA== YXRoYQ== IEhvZ3dhcnRz IGNhdmVz Njc4 IHNhZmVndWFyZA== IE1vZw== aXNzb24= IER1cmhhbQ== c2xhdWdodA== IEdyYWR1YXRl IHN1YmNvbnNjaW91cw== IEV4Y2VsbGVudA== IER1bQ== LS0tLS0= IHBpbGVz IFdPUks= IEdhcm4= IEZvbA== IEFUTQ== IGF2b2lkcw== IFR1bA== IGJsZWFr RUxZ aXZpc3Q= bGlnaHRseQ== UGVycw== IERvYg== IExT IGluc2FuaXR5 zrU= YXRhbGll RW5sYXJnZQ== IHR3aXN0cw== IGZhdWx0eQ== IHBpcmFjeQ== IGltcG92ZXI= IHJ1Z2dlZA== IEZhc2hpb24= IHNhbmRz Jz8= c3dpY2s= IG5hdGl2ZXM= IGhlbg== IE5vaXNl 44OX IGdyZWVucw== IGZyZWV6ZXI= IGR5bmFzdHk= IEZhdGhlcnM= IE5ld2Fyaw== IGFyY2hhZW9sb2dpY2Fs IG90 b2Jhcg== IGJsb2NrYWRl IGFsbGVyZw== TFY= IGRlYml0 IFJGQw== IE1pbHRvbg== IFByZXNzdXJl IHdpbGxpbmdseQ== IGRpc3Byb3BvcnRpb25hdGU= IG9wcHJlc3NpdmU= IGRpYW1vbmRz IGJlbG9uZ2luZ3M= MTk3MA== IGJlbGxz IGltcGVyaWFsaXNt IDIyNw== IGV4cGxvZGluZw== IEVjbGlwc2U= IDE5MTk= IHJhbnQ= IG5vbWluYXRpb25z MzQ3 IHBlYWNlZnVsbHk= cmljYQ== IEZVQ0s= IHZpYnJhdGlvbg== bWFsaW5r IHJvcGVz IEl2YW5rYQ== IEJyZXdlcnk= IEJvb2tlcg== IE93ZW5z Z29lcnM= U2VydmljZXM= IFNuYXBl IDE5MQ== Mzk1 IDI5OQ== anVzdGljZQ== IGJyaQ== IGRpc2Nz IHByb21pbmVudGx5 IHZ1bGdhcg== IHNraXBwaW5n bHZlcw== IHRzdW5hbWk= Mzc0 IFVydWc= IEVpZA== cmVjYXRlZA== cGhlbg== IGZhdWx0cw== IFN0YXJ0ZWQ= OTUw IHBp IGRldGVjdG9y IGJhc3RhcmQ= IHZhbGlkYXRlZA== U3BhY2VFbmdpbmVlcnM= T1VSQ0U= ICh+ IHVuc3Vy IGFmZmlybWVk IGZhc2Npc20= IHJlc29sdmluZw== IENoYXZleg== IEN5bg== IGRldHJhY3Q= TG9zdA== IHJpZ2dlZA== IGhvbWFnZQ== IEJydW5v NTU1 ZWNh IHByZXNzZXM= IGh1bW91cg== IHNwYWNpbmc= ICcv b2xraWVu Q291bg== T1BFUg== VHJl U29u IENhbWJvZGlh aWVycmU= bW9uZw== b3p5 IGxpcXVpZGl0eQ== IFNvdmlldHM= IEZlcm5hbmRv IDIyOQ== IHNsdWc= IENhdGFsYW4= ZWxlY3RyaWM= IHNjZW5lcnk= IEhlYXJ0aA== IGNvbnN0cmFpbmVk IGdvYWxpZQ== IEd1aWRlbGluZXM= IEFtbW8= IFBlYXJzb24= IHRheGVk IGZldHVz UmVzcG9uc2U= IEFsZXhpcw== dGhpYQ== R3V5 IHJlY29uc3RydWN0 IGV4dHJlbWVz IGNvbmNsdWRpbmc= IFBlZw== b29rcw== IGRlZHVjdGlvbnM= Um9zZQ== IGdyb3VuZGJyZWFraW5n IFRhcmc= 44OB IFJldmU= cmVzb3VyY2U= IG1vb25z IGVsZWN0cm9tYWduZXRpYw== IGFtaWRzdA== IFZpa3Rvcg== TkVTUw== QkFDSw== IGNvbW11dGU= IEFuYWhlaW0= IGZsdWN0dWF0aW9ucw== NjQw IG5vb2RsZXM= IENvcGVuaGFnZW4= IFRpZGU= IEdyaXp6 IFNFRQ== IHBpcGVsaW5lcw== IHNjYXJz ZW5kbw== YWd1cw== IEVURg== LyM= IEJlY29tZQ== NDQ4 IHZpc2M= IFJlY29tbWVuZGVk IGp1bXBlcg== IGNvZ25pdGlvbg== IGFzc2Fzc2lu IHdpdG5lc3Npbmc= IFNldHVw IGxhYw== dmlt SVNN cGFnZXM= U1NM MzU4 IGFkamVjdA== aW5kdXN0cmlhbA== bG9yZQ== Y2hlcnk= IGdsaXR0ZXI= IGNhbGY= RmxvcmlkYQ== IHNwb2lsZXJz IHN1Y2NlZWRz IGNoYW50aW5n IHNsb2dhbnM= IFRyYWN5 VmlzaXQ= cm9sb2d5 IG1vcm5pbmdz IGxpbmVhZ2U= IHNpcA== IGludGVuc2VseQ== IGZsb3VyaXNo IFNsZWVwaW5n IEZlbQ== b3Jwb3I= IEtsYW4= IERhcnRo aGFjaw== IE5pZWxzZW4= IHR1bW9ycw== IHByb2N1cmVtZW50 IFlvcmtzaGlyZQ== IHJhaWRlZA== S1k= QW5uYQ== IC8vWw== IERpc29yZGVy IE11c3Rhbmc= IFdlbg== IFRyeWluZw== c3E= IGRlbGl2ZXJpZXM= IHNodXR0ZXI= IGNlcmVicmFs IGJpcG9sYXI= IENO bGFzcw== amV0 IGRlYmF0aW5n Pjo= IGVhZ2xl Z3JhZGVz IERpeG9u VUdD TUFT IERyYWNv IE1hY2hpbmVz YWZmZXI= IGVtYW4= wrI= cHJvbg== IEd5bQ== IGNvbXBhcmF0aXZlbHk= IFRyaWJ1bmFs UFJP IGxleA== IGZlcnRpbGU= IGRlcHJlc3Npbmc= IHN1cGVyZmljaWFs ZXNzZW50aWFs IEh1bnRlcnM= Z3A= IHByb21pbmVuY2U= TGliZXI= IEFuY2VzdA== b3RlY2hub2xvZ3k= IG1vY2tpbmc= IFRyYWZm lpo= TWVkaXVt SXJhcQ== IHBzeWNoaWF0cmlzdA== UXVhbnRpdHk= IExlY3Q= IG5vaXN5 NTIw R1k= IHNsYXBwZWQ= IE1UVg== IHBhcmE= cHVsbA== TXVsdGlwbGU= YXNoZXI= IG5vdXI= IFNlZw== U3BlbGw= dm91cw== b3JkaWFs U2VuaW9y IEdvbGRiZXJn IFBsYXNtYQ== bmVlZA== IG1lc3Nlbmdlcg== ZXJldA== IHRlYW1lZA== IGxpdGVyYWN5 IExlYWg= IERveWxl IGVtaXR0ZWQ= VVg= IGV2YWRl IG1hemU= IHdyb25nbHk= IExhcnM= IHN0ZXJlb3R5cGU= IHBsZWRnZXM= IGFyb21h IE1FVA== IGFjcmU= IE9E IGZm IGJyZXdlcmllcw== IEhpbHRvbg== dW5kbGU= IEthaw== IFRoYW5rZnVsbHk= IENhbnVja3M= aW5jdGlvbnM= IEFwcGVhcnM= IGNvZXI= IHVuZGVybWluZWQ= cm92ZXJz QW5kcmU= IGJsYXpl dW1lcnM= IGZhbWluZQ== YW1waGV0YW1pbmU= dWxrYW4= QW1vdW50 IGRlc3BlcmF0aW9u d2lraXBlZGlh ZGV2ZWxvcG1lbnQ= IENvcmludGg= dXNzaWE= SmFja3Nvbg== TEk= TmF0aXZl UnM= T2hpbw== IEthdGhsZWVu Rm9ydHVuYXRlbHk= IGF0dGVuZGFudA== IFByZWZlcnJlZA== IERpZG4= IFZz TWlz IHJlc3BvbmRlbnQ= IGJvdW4= c3RhYmxl IHBhdmVk IHVuZXhwbA== IENoZW5leQ== TE0= IEN1bGw= Ymxvd24= IGNvbmZyb250aW5n b2Nlc2U= c2VydmluZw== V2k= IExpdGh1YW5pYQ== YW5uaQ== IHN0YWxr aGQ= IHZlbmVy QVBI eW5jaHJvbm91cw== VVJS dW1hYmx5 aGlzdG9yaWM= SGFsZg== SGF5 IHJlc2lsaWVuY2U= c3BlY3Rpb24= IGFiYW5kb25pbmc= T2Jz IERlYmJpZQ== IGdyYWRpZW50 IFBsYWludA== IENhbmFs QVJDSA== IGV4cGFuc2l2ZQ== IGZ1bmc= IGJvdW5jZWQ= VW5k IHByZWNhdXRpb25z IGNsYXJpZmljYXRpb24= IGRhZ2dlcg== IGdyaXBz IMK1 IFJpdmVyYQ== IFVuZGVhZA== aXNpdGVz IEZJUlNU w7Fv YXVkaQ== IGhvc3RhZ2Vz IGNvbXBsaWFudA== IGFsdW1uaQ== U2V2ZW4= IGN5YmVyc2VjdXJpdHk= ZWl0aGVy Q29sbGVjdA== IGludmFyaWFibHk= IFNvY2k= IGxhd21ha2Vy IGFsZQ== IFBlcnNvbmFsbHk= TmF6aQ== IGN1c3RvbWl6YXRpb24= IFByb2M= IFNhc2thdGNoZXdhbg== ZWF0dXJpbmc= IHNwYXJlZA== IGRpc2NvbnRpbnVlZA== IGNvbXB1dGF0aW9uYWw= IE1vdG9yb2xh IHN1cHJlbWFjaXN0 Z292ZXJubWVudGFs IHBhcmFkaXNl IERvd25pbmc= IE5pa29u IGNhdGFseXN0 YmVycmE= VG9yb250bw== ODc1 YmV0YQ== IE1hY3Jvbg== IHVucmVhbGlzdGlj dmVjdG9y IFZlaGljbGVz aXRpdmVuZXNz IFJW IENvbGJlcnQ= c2lu b2pp ZW50aW4= IEtyaXNo aGVsbG8= ZmZpZWxk b2t5 IFRhdGU= IG1hcGxl IGFpZHM= Y2hlbWljYWw= MzM0 bnV0cw== IFdhcnA= IHh4 IFJvYmI= dW1lcm91cw== Xy1f ZnRpbWU= IFZX IHdpbmdlcg== IERvbWU= dG9vbHM= IFBW IEdlb3JnZXRvd24= IGdlYXJlZA== IGppaGFkaXN0cw== IGNw IHN0ZXJvaWRz TW90aGVy Y2xlcm9zaXM= IERSTQ== bmVzaWE= IGxpbmdlcg== IGltbWVyc2l2ZQ== IENPVU4= IG91dHdlaWdo ZW5zdWFs QmFuZA== IHRyYW5zZm9ybXM= bWF0Y2hlZA== cHNvbnM= IEp1ZGljaWFs ZmFjdG9y IHJlZmVycmFs IG9kZGx5 IFdlbmdlcg== QnJpbmc= IEJvd3M= NjAy SUNMRQ== IGxpb25z IEFjYWRlbWlj IFRob3Ju IFJhaWRlcg== a2VmZWxsZXI= U3RvcmFnZQ== TG93ZXI= IE9ydA== IEVxdWFsaXR5 QUxU IFNPQw== VHlwZXM= IGx5bg== IEFzc2V0 Y29hdA== VFBQ Q1ZF IFBpb25lZXI= YXBwbGljYXRpb24= TW9kZXJu IEhL RW52aXJvbm1lbnQ= QWxyaWdodA== UmFpbg== SVBQ IFNoaWl0ZQ== IG1vdW5k IEFiaWxpdGllcw== Y29uZGl0aW9u U3RhZmY= IGNvbXBldGVuY2U= IE1vb3I= IERpYWJsbw== IHdpdGhoZWxk IG9zdGVuc2libHk= IEJyb20= IG1zZw== IGRlbm9taW4= IFJlZmVyZW5jZXM= IEZQ IHBsdW5nZWQ= IHBhbXBo bW92aW5n Y2VudHJhbA== IGRvd25yaWdodA== IGZhZGluZw== VGFs VHlw IFRoeQ== dWtlcw== aXRoZQ== IG92ZQ== IGJhdHRsZWQ= IHNlYWZvb2Q= IGZpZ3Vy IFJE Y3JvcA== IHNxdWFkcw== e1w= 4Lk= IEVo IGludGVydmlld2luZw== IFFpbg== IGFzcGlyaW5n UExJQw== IGNsYXVzZXM= IEdhc3Q= IE5pcg== IGx1Z2dhZ2U= IGhvc2U= IHN5c3RlbWQ= IGRlc2NlbmRpbmc= IFJldmlzZWQ= IFJhaWxz YWxpZ24= NzA5 MzM3 IGZ1Zw== Y2hhcmdpbmc= dGFncw== IHV0ZXI= a2lzaA== V0FSTklORw== NDkw cHJvZml0cw== IHZveWFnZQ== IGFjZQ== IFZhbmd1YXJk IFRhbmtz IE11aw== IDIyNg== U2FmZQ== QXJtb3I= IHZvbGNhbmlj IHdvbWI= IE1JTA== IGJlZ2lubmVy IFJlY29nbg== IEFBUA== UExBWQ== KSE= IGRldGVjdGluZw== Y24= IGJyZWFjaGVz QmFzaWNhbGx5 IFBhZw== IE11bmljaXBhbA== IEluZGll IExhZg== IERpc2FibGU= IE9sc29u IHJlc3RyYWluZWQ= IHJ1bGluZ3M= IGh1bWFuZQ== ZXZlbnRz IENpbmVtYQ== ZGlzcGxheVRleHQ= IEhhdGNo YWN0aW9uRGF0ZQ== b25uYWlzc2FuY2U= IGFzc2F1bHRpbmc= IEx1Zw== Q0hBVA== IHZpZ29yb3Vz IFBlcnNl IGludG9sZXJhbmNl IFNuYXBjaGF0 IFNoYXJrcw== IGR1bW15 IERpYWdu IEd1aXRhcg== aW1ldGVycw== NDAz UkVH QXg= IHNlcGFyYXRlcw== IE1haG0= IHR2 amFo T09M Q2lyYw== IFdpbmRzb3I= dXNzaWFu IGludHVpdGlvbg== IGRpc2RhaW4= IERvbm92YW4= IDIyMQ== RW1i IGNvbmRlbW5pbmc= IGdlbmVyb3NpdHk= enp5 IHBhbnRpZXM= IFByZXZlbnQ= QWN0aW9uQ29kZQ== QU5B MzQy ZXh0ZXJuYWxBY3Rpb25Db2Rl IHNwZWNpZnlpbmc= IGNyeXN0YWxs SmVyZQ== IHJ1cHQ= IEFwcHJlbnRpY2U= IHByb2ZpbGluZw== 0Lo= U3RyaWtl IHNpZGVsaW5l IG9ibGlnYXRlZA== IG9jY3VsdA== IGJ1cmVhdWNyYXRpYw== YW50aWNhbGx5 cnVwdGVk bmVnYXRpdmU= IEV0aGlvcGlh IENpdmlj IGluc2lkZXJz ZWxpZ2libGU= IFRWcw== IEJBUg== IFRJ aW9sb2dpc3Q= IEFJUg== IHN1YnN0aXR1dGVk QXJhYg== IFNhdWw= IFlvZw== cHJlbQ== IGJ1aWxkZXJz IHN0YXRpb25hcnk= IGRvdWJ0ZnVs IHZpZ29yb3VzbHk= IHRocmlsbGluZw== UGh5c2ljYWw= IENhcmV5 IEh5ZHJh Z2VvbmluZw== IFNseQ== eXRvbg== IGJvcnJvd2Vycw== IFBhcmtpbnNvbg== IOs= IEphbWFpY2E= IHNhdGly IGluc3VyZ2VudHM= IEZpcm0= IGlzb3Q= IEthcm4= b3VybmluZw== YWtlbnM= ZG9jcw== bGl0dGxl IE1vbmFjbw== Q0xBU1M= VHVya2V5 THk= IENvbmFu YXNzaWM= IHN0YXJyZWQ= IFBhY2Vycw== ZXRpZXM= IHRpcHBpbmc= TW9vbg== IFJ3 c2FtZQ== IGNhdml0eQ== IGdvb2Y= IFpv U2hvY2s= dW1tZXI= IGVtcGhhc2l6ZXM= IHJlZ3JldHQ= IG5vdmVsdHk= IGVudnk= IFBhc3NpdmU= cnc= NTA1 IGluZGlmZmVyZW50 IFJpY2E= IEhpbXNlbGY= IEZyZWRkaWU= IGFkaXA= 5LiA IGJyZWFrb3V0 IGh1cnJpZWQ= IEh1YW5n IERpc2s= IHJvYW1pbmc= Pz8/Pz8tPz8/Pz8t VVY= IFJpY2t5 IFNpZ21h IG1hcmdpbmFsaXplZA== IGVkaXRz IDMwNA== bWVtb3J5 IHNwZWNpbWVu Mjkz 44Gv IHZlcnRpY2FsbHk= IGF1ZGl0aW9u IEhlY2s= IGNhc3Rlcg== IEhvbGRpbmdz YWRhbA== IENyb24= IExpYW0= IGRlZmxlY3Q= UGljaw== IERlYnVn UkVG IHZlcnNhdGlsaXR5 b3RoZXM= Y2xhc3NpZmllZA== IE1haGFy IEhvcnQ= Q291bnRlcg== c3Rhc3k= bm90aWNlZA== MzMx IFNoaW0= ZnVjaw== IEJpZQ== IGFpcmluZw== IFByb3RlaW4= IEhvbGRpbmc= IHNwZWN0YXRvcnM= aWxpYXRlZA== IFRoYXRjaGVy bm9zaXM= 44O844Oz VGVsZQ== Qm9zdG9u IFRlbXBs c3RheQ== IGRlY2xhcmF0aW9ucw== NDc5 Vm9sdW1l IERlc2lnbmVy IE92ZXJ3YXRjaA== aWRhZQ== IG9ud2FyZHM= IG5ldHM= IE1hbmlsYQ== cGFydGljdWxhcmx5 IHBvbGl0aWM= b290aGVy IHBvcnRyYWl0cw== IHBhdmVtZW50 Y2ZmZmY= IHNhaW50cw== IGJlZ2lubmVycw== RVNQTg== IHNob3J0Y29taW5ncw== 4pWQ4pWQ IGNvbWV0 IE9yZ2FuaWM= cXVlbA== IGhvc3BpdGFsaXplZA== QnJlYWs= IHBlZWw= ZHlsaWI= YXNweA== dXJhbmNlcw== IFRJTQ== UGc= IHJlYWRhYmxl IE1hbGlr IG11enpsZQ== IGJlbmNobWFya3M= ZGFs IFZhY2M= IEhpY2tz NjA5 IEJpYmxpY2Fs aGVuZw== IG92ZXJsb2Fk IENpdmlsaXphdGlvbg== IGltbW9yYWw= IGZyaWVz 44KS IHJlcHJvZHVjZWQ= IGZvcm11bGF0aW9u anVn aXJleg== Z2Vhcg== IGNvYWNoZWQ= TXBTZXJ2ZXI= IFNK IEt3 SW5pdA== ZGVhbA== IE9ybw== IExva2k= IFNvbmdz IDIzMg== IExvdWlzZQ== YXNpb25hbGx5 IHVuY29uZA== b2xseXdvb2Q= IHByb2dyZXNzaXZlcw== IEVub3VnaA== IERvZQ== IHdyZWNrYWdl IGJydXNoZWQ= IEJhc2VUeXBl IHpvbmluZw== aXNoYWJsZQ== aGV0aWNhbGx5 IENhdWN1cw== IEh1ZQ== IGthcm1h IFNwb3J0aW5n IHRyYWRlcg== IHNlZW1pbmc= IENhcHR1cmU= NDMw YmlzaA== IHR1bmVz IGluZG9vcnM= IFNwaGVyZQ== IERhbmNpbmc= VEVSTg== IG5vYg== IEdTVA== bWFwcw== IHBlcHBlcnM= Rml0 IG92ZXJzZWVz IFJhYmJp IFJ1bGVy dmVydGlzaW5n b2ZmaWNl eHh4 IHJhZnQ= Q2hhbmdlZA== IHRleHRib29rcw== TGlua3M= IE9tbg== 44CR IGluY29udmVuaWVuY2U= IERvbmV0c2s= PX4= IGltcGxpY2l0bHk= IGJvb3N0cw== IEJvbmVz IEJvb20= Q291cnRlc3k= IHNlbnNhdGlvbmFs QU5Z IGdyZWVkeQ== ZWRlbg== IGluZXhwZXI= IExlcg== IFZhbGU= IHRpZ2h0ZW4= IEVBUg== IE51bQ== IGFuY2VzdG9y U2VudA== IEhvcmRl dXJnaWNhbA== YWxsYWg= IHNhcA== YW1iYQ== IFNwcmVhZA== dHdpdGNo IGdyYW5kc29u IGZyYWN0dXJl IG1vZGVyYXRvcg== IFNldmVudGg= IFJldmVyc2U= IGVzdGltYXRpb24= Q2hvb3Nl IHBhcmFjaA== IGJhcnJpYw== 44CQ IGNvbXBhc3M= IGFsbGVyZ2lj 4oCV T1RIRVI= ZXJyaWxsYQ== IHdhZ29u IHppbmM= IHJ1YmJlZA== IEZ1bGxlcg== IEx1eGVtYm91cmc= IEhvb3Zlcg== IGxpYXI= IEV2ZW5pbmc= IENvYmI= ZXN0ZWVt IHNlbGVjdG9y IEJyYXds aXNhbmNl IEVr IHRyb29w IGd1dHM= IEFwcGVhbA== IFRpYmV0YW4= IHJvdXRpbmVz IE1lbnQ= IHN1bW1hcml6ZWQ= c3RlYW1hcHBz IHRyYW5xdQ== IDE5Mjk= b3Jhbg== IEF1dGhlbnQ= IGdtYXh3ZWxs IGFwcHJlaGVucw== IHBvZW1z IHNhdXNhZ2U= IFdlYnN0ZXI= dXJ1cw== IHRoZW1lZA== IGxvdW5nZQ== IGNoYXJnZXI= U3BvaWxlcg== IHNwaWxsZWQ= aG9n IFN1bmRlcg== IEFpbg== IEFuZ3J5 IGRpc3F1YWw= IEZyZXF1ZW5jeQ== IEV0aGVybmV0 IGhlbHBlcg== UGVyY2VudA== IGhvcnJpZnlpbmc= IGFpbA== IEFsbGFu RUVF IENyb3NzaW5n NDQ5 IGhvbG9n IFB1enpsZXM= IEdvZXM= ZXJlbm4= NjA0 44GP IFJhZmFlbA== IGF0dGVu IEVtYW51ZWw= IHVwcm8= IFN1c3A= UHN5Y2g= IFRyYWluZXI= IE5FUw== IEh1bnRz YmVjdWU= IGNvdW5zZWxvcg== UnVsZQ== IHRveGlucw== IGJhbm5lcnM= cmlmaWNl IGdyZWV0aW5n IGZyZW56eQ== IGFsbG9jYXRl ICop ZXhwcg== NTAz IENoaWNr IFRvcm4= IGNvbnNvbGlkYXRpb24= IEZsZXRjaGVy c3dpdGNo ZnJhYw== Y2xpcHM= IE1jS2lu IEx1bmFy TW9udGg= SVRDSA== IHNjaG9sYXJseQ== cmFwZWQ= Mzk4 IDE5MTA= IGVncmVn IGluc2VjdXJl IHZpY3RvcmlvdXM= Y2ZmZmZjYw== IHNpbmdsZWQ= IGVsdmVz IFdvbmQ= YnVyc3Q= IGNhbW91Zmw= IEJMQUNL IGNvbmRpdGlvbmVk 54k= YW5zd2VyZWQ= IGNvbXB1bHNvcnk= YXNjaXN0 IHBvZGNhc3Rz IEZyYW5rZnVydA== Ym5i IG5lb2xpYmVyYWw= IEtleWJvYXJk IEJlbGxl d2FybQ== IHRydXN0cw== IGluc3VyZWQ= IEJ1Y2M= dXNhYmxl NjA3 IFBsYWlucw== IDE4OTA= IHNhYm90YWdl IGxvZGdlZA== ZmVsdA== IGdh IE5hcmM= IFNhbGVt IHNldmVudHk= IEJsYW5r cG9ja2V0 IHdoaXNwZXI= IG1hdGluZw== b21pY3M= IFNhbG1hbg== IEthZA== IGFuZ2VyZWQ= IGNvbGxpc2lvbnM= IGV4dHJhb3JkaW5hcmlseQ== IGNvZXJjaW9u R2hvc3Q= YmlyZHM= 6IA= a29r IHBlcm1pc3NpYmxl YXZvcmFibGU= IHBvaW50ZXJz IGRpc3NpcA== YWNp IHRoZWF0cmljYWw= IENvc21pYw== IGZvcmdldHRpbmc= IGZpbmFsaXplZA== 5aSn eW91dA== bGlicmFyeQ== IGJvb21pbmc= IEJlbGlldmU= IFRlYWNoZXI= IExpdg== IEdPT0RNQU4= IERvbWluaWNhbg== T1JFRA== IFBhcnRpZXM= IHByZWNpcGl0YXRpb24= IFNsb3Q= Um95 IENvbWJpbmVk IGludGVncmF0aW5n IGNocm9tZQ== IGludGVzdGluYWw= IFJlYmVsbA== IG1hdGNodXBz IGJsb2NrYnVzdGVy IExvcmVu IExldnk= IHByZWFjaGluZw== IFNlbmRpbmc= IFB1cnBvc2U= cmF4 Zmlm IGF1dGhvcml0YXRpdmU= IFBFVA== YXN0aWNhbA== IGRpc2hvbg== IGNoYXR0aW5n ICIkOi8= Q29ubmVjdGlvbg== IHJlY3JlYXRl IGRlbGlucXU= IGJyb3Ro IERpcnR5 IEFkbWlu em1hbg== IHNjaG9sYXJzaGlwcw== IDI1Mw== Y29udGFjdA== YWxzYQ== NzY3 Y3JlZW4= YWJiYWdl IDE5MTU= IGJsZW5kZWQ= IGFsYXJtZWQ= TGFuZ3VhZ2U= MzU2 IGJsZW5kcw== IENoYW5nZWQ= V29sZg== IGhlcGF0 Q3JlYXRpbmc= IHBlcnNlY3V0 IHN3ZWV0bmVzcw== YXJ0ZQ== IGZvcmZlaXR1cmU= IFJvYmVydG8= aW1wcm8= TkZM IE1hZ25ldA== RGV0YWlsZWQ= IGluc2lnbmlmaWNhbnQ= IFBPTElU IEJCUQ== IENQUw== IHNlYXc= YW1pbmVy bUw= ZW5kaWY= ZmluYWxz IDI2NQ== dWlzaA== IH0p IFByb2JsZW1z IGVtYmxlbQ== IHNlcmlvdXNuZXNz IHBhcnNpbmc= IHN1YnN0aXR1dGlvbg== IHByZXNzdXJlZA== IHJlY3ljbGVk YWxlYg== UnVieQ== IHByb2ZpY2llbmN5 RHJpdmVy IFdlc3Rlcg== Oic= QUZUQQ== IG1hbnRsZQ== IENsYXl0b24= ZmxhZw== IHByYWN0aXRpb25lcg== Y292ZXJlZA== IFN0cnVjdA== YWRkYWZp NDI1 IFRvd25zaGlw IEh5ZHJv TG91aXM= MzQz IGNvbmRv IFRhbw== IHV0aWxpemF0aW9u IG5hdXNlYQ== IERlbXM= cmlkZ2Vz cGF1c2U= IGZvcm11bGFz IGNoYWxsZW5nZXI= Mzc2 IGRlZmVjdGl2ZQ== IFJhaWx3YXk= IFB1Yk1lZA== IHlvZ3VydA== bGJz IE5vcmZvbGs= T1BF IE1vb2R5 IGRpc3RyaWJ1dG9y IHNjcm9sbHM= IGV4dHJhY3Rz U3Rhbg== IHZpYWJpbGl0eQ== IGV4cG9zZXM= IHN0YXJ2YXRpb24= IFN0ZXBz IERvZGQ= ZmV3 U1RE MzMy IGNsb3N1cmVz IGNvbXBsZW1lbnRhcnk= IFNhc2hh dW1weQ== IG1vbmV0 IGFydGljdWxhdGU= IERvY3Q= a2lsbGVy IHNjcmlt IDI2NA== IHByb3N0aXR1dGVz IHNldmVyZWQ= IGF0dGFjaG1lbnRz IGNvb2xlZA== TGV2 IEZhbGs= ZmFpbA== IHBvbGljZW1hbg== IERhZw== IHByYXllZA== IEtlcm5lbA== IGNsdXQ= IGNhdGg= IGFub21hbHk= U3Rvcm0= ZW1ha2Vy IEJyZWFrZmFzdA== dWxp b2lyZQ== Sko= aHo= T3BlcmF0aW9u IFNpY2s= MzU0 IEd1YXRlbWFsYQ== UmF0ZQ== IGV4cG9zdXJlcw== ZmFjZXM= IEFyY2hhZQ== cmFm IE1pYQ== IDIwMjU= IG9wYXF1ZQ== IGRpc2d1aXNlZA== IEhlYWRxdWFydGVycw== U2Fo IHBvdHM= OTc4 IE1hbGY= IGZyb3duZWQ= IHBvaXNvbm91cw== IENvbnZlcnM= ZWVrcw== IGNyYWI= LiIi IHRyZWFzb24= IHJhbmM= IGVzY2FsYXRpbmc= IHdhcnI= IG1vYnM= IGxhbXBz IFN1bnNoaW5l IEJydW5zd2ljaw== UGhvbmVz IHNwZWxsZWQ= IFNraXA= IDIwNTA= IDE5MTE= IFBsdXRv IEFtZW5k IG1lYXRz Mzg3 IHN0b21w IFpob3U= IExldmlhdGhhbg== IEhhemFyZA== YWR2 IE9yd2VsbA== IGFsb3Vk IGJ1bXBlcg== IEFuYXJjaA== dWJ1bnR1 IFNlcmlvdXM= Zml0dGluZw== IE9wdGlvbmFs IENlY2ls UkVBTQ== IHNlcm90b25pbg== IGN1bHRpdmF0ZQ== YWdvZ3Vl fVw= IG1vc3F1ZXM= IFN1bm55 IHJlYWN0aXZl cmV2b2x1dGlvbg== IEx1cA== IEZlZG9yYQ== IGRlZmVuc2VtYW4= IFZJRA== aXN0aW5l IGRyb3duaW5n IEJyb2FkY2FzdGluZw== IHRocmlsbGVy IFNjeQ== IGFjY2VsZXJhdGluZw== IGRpcmVjdHM= b2RpZWQ= YmlrZQ== ZHVyYXRpb24= IHBhaW5mdWxseQ== UmVkZA== IHByb2R1Y3Rpb25z IGdhZw== IHdoaXN0 IHNvY2s= IGluZmluaXRlbHk= IENvbmNlcm4= IENpdGFkZWw= IGxpZXU= IGNhbmRsZXM= b2dlbmVvdXM= YXJnZXI= IGhlYXZlbmx5 aW5mbGFtbWF0b3J5 UGVyZm9ybWFuY2U= Q3M= cnVjdG9zZQ== YXpha2k= IHBlc3NpbQ== IGluZmVyZW5jZQ== IHBvd2Q= IFpvZQ== IHBhaW50cw== IGRheno= cHRh LS0tLS0tLS0tLS0= IGluc3Bpcg== IEV4cGVyaW1lbnRhbA== IEtuaWZl cmVnb3I= Ym9ycw== IHNob3dlcnM= cm9tZWRh IHNhaW50 IGJlbmlnbg== IEppYW5n IGVudmlzaW9uZWQ= IHNocm91ZA== SUZU SE8= IHNodWZm IElDQw== IHNlZ3JlZw== IHJldmlzaXQ= aWdodGhvdXNl TGk= IHN1YnN0cmF0ZQ== IFNlYXM= IFJld2FyZA== IEhlcA== IEJyYXNz c2Jt IGVsaW1pbmF0ZXM= IHN0YW1pbmE= IFZBVA== IExvYW4= IGNvbnN0cmFpbnQ= IGFwcHJvcHJpYXRlZA== IHBlcw== IEFMRQ== cmFuZ2luZw== IDQwNA== Mzky IGludGVsbGVjdHVhbHM= YWNodQ== IHJlc3RydWN0dXJpbmc= IExldmlu IHJ1bmVz IGRlbGlnaHRmdWw= IGNhcmJvaHlkcmF0ZXM= IE1vZGVscw== IEV4cG8= IHRyYW5zcG9ydGluZw== YWxsb2M= IHJpbmdpbmc= U2Ftc3VuZw== IHNjYXJjZWx5 IFVSTHM= IE1BUw== IHByb3RvdHlwZXM= IG5hcnJhdG9y IENQVXM= Y2Ru IEJhcnRvbg== IGRlY2lkZWRseQ== IFNodQ== aXhpcg== b2Npb3Vz IE15c3Q= TmludGVuZG8= IHJldXNl IGZvcmdpdmVu RmV3 aW5pY2Fs bmF0 IHNlYW1sZXNz IEV2YQ== IEVWRQ== IEpP bGFuZGVycw== IHNvZnRlcg== bmVnaWU= IHRyYW5zaWVudA== IG9yYml0YWw= IGZ1bGZpbA== IEtvbQ== SG9wZWZ1bGx5 IGR5bmFtaWNhbGx5 IEh1bmdlcg== 5Zs= IEFybWVuaWE= ZWxtYW4= YmVydG8= IHBpZ2U= IElEcw== bGltaXQ= IHZlaW5z IHNvYXJpbmc= cGFja3M= R29sZGVu IENyYWI= aXN0b3I= IFJQTQ== ICQk Z3Jlc3Npb24= IGppaGFkaXN0 IGdhbWJsZQ== IGNhcmVn IGluZmxhdGVk RmFjZQ== IEZpcmVhcm1z IEVtbWFudWVs 4p0= IHNob2Nrcw== Z3JhYg== IHNwbGVuZA== IEhQVg== YWJvcnRpb24= QWJvdmU= RW50aXR5 cGxheWVycw== IGNvbW1lbmNlZA== dWxlbmNl IGZ1bGZpbGxtZW50 IGVtYm9kaW1lbnRz IFdlbGZhcmU= IGhhaWw= IDxA dHRlbg== IGNhdGNoZXI= IEphemVlcmE= IHZvbGNhbm8= IHN0YWJpbGl6ZQ== IEhhbmRsZXI= IGludGVuc2lmaWVk IEFicmFtcw== IGh1bWlsaWF0aW9u cGFjZWQ= NjA1 IENlbnRPUw== U3BlY2lmaWM= IGhlZWQ= IENBTQ== IEdhbGlsZQ== RGll IGFib2xpc2hlZA== IFRob21zb24= IFRlYWNoZXJz IFdhc3M= am9uZw== IElTQk4= IEFsbGllcw== c2hha2U= 5bc= dmljdA== SG93YXJk IGRlZW0= IGV4Y2VlZGluZ2x5 IFNtYXJ0c3RvY2tz aWJl IGRvb3J3YXk= IGNvbXBldGVk aWdtYXQ= IG5hdGlvbmFsaXN0cw== IGdyb29t IEtlZW4= IGRpc3Bvc2FibGU= ZGVjbA== IFRvbGtpZW4= IFNjaGVtZQ== IGJpb2Q= IGF2aWQ= IEVsb24= YWdhcg== IFRTQQ== Um9tYW4= IGFydGlmaWNpYWxseQ== IGFkdmlzb3Jz WEw= IEluZmVybm8= MzY2 IHRlZGlvdXM= IFBob3RvZ3JhcGh5 IENhcnJpZQ== IHRyb3Bl IFNhbmRyYQ== IGRlY2ltYWw= UXVlZW4= IEd1bmRhbQ== IE9N b3RlY2g= TkJB IDE5MzI= IGVudHJlbmNoZWQ= IE1hcmlvbg== IGZyYXRlcm5pdHk= TGFib3Vy SGVucnk= IGxhdGl0dWRl RWl0aGVy IGVuaGFuY2Vz IFBvdGVudGlhbA== IHNoaW5lcw== aWRhZA== IGJyZWFkdGg= IGNhcGFjaXRpZXM= IPCfmYI= IEJyb254 IHNleGVz IGRpZmZlcmVudGlhdGlvbg== IGhlYXZ5d2VpZ2h0 IFRhag== ZHJh IG1pZ3JhdGU= IGV4aGF1c3Rpb24= IFJVTg== ZWxzaXVz IEN1b21v IGd1aXRhcnM= IGNsb25lcw== IFNvbWV3 IFByeQ== LS0tLS0tLS0tLS0tLQ== IHdhcnJhbnRlZA== Y3ljbGVz IHNhbHZhZ2U= IGRpc2tz UkFOVA== IE5HT3M= IE1hcnRpYW4= IjpbeyI= IGFkZGljdHM= b2p1cmU= aWxsZXQ= IGFtYXppbmdseQ== YXJ0bWVudHM= cGl4ZWw= IEdQVXM= TGF5b3V0 6KM= IFRhbWls IEJhc2ls IGltcGFydGlhbA== IFN0cnVjdHVyZQ== Zm9yaw== YnJ5Y2U= IHJpZGdl IEhhbWJ1cmc= cmlvdXM= IGJsaXR6 Y2lnYXJldHRlcw== IGNhbm5lZA== NDAy IGlyb25pY2FsbHk= IGNvbXBhc3Npb25hdGU= IEhhd2tpbnM= LiM= IENhdGhlZHJhbA== IHJhbGxpZWQ= aW50ZXJuYWw= IHF1b3Rh c3Rha2Vz VEVYVA== bW9t IGNvbXBsZXRlcw== IDIzOA== IHNocnVn 44OR IE5pbnRo IHJldmlzZQ== IFByb3ZpZGVy IHRyZWFjaGVy IHF1YXNp IFBSRVM= IGRlcG9zaXRpb24= IGNvbmZpZGVudGlhbGl0eQ== aXNzb3Jz IGltYmFsYW5jZQ== IHNwYW5uaW5n IGFuZ3VsYXI= IEN1bA== Y29tbXVuaWNhdGlvbg== IE5vcmE= IEdlbml1cw== b3B0ZXI= IHNhY2tlZA== U3BvdA== IGZpbmVseQ== IENIUg== Mjgy d2F2ZXM= UGFsZXN0 IFJvaGluZw== Tkw= 6L8= IHNoaXR0eQ== IFNjYWxpYQ== NDc1 UHJvZ3Jlc3M= IHJlZmVyZW5jaW5n IGNsYXNzcm9vbXM= YWJlZQ== IHNvZA== aGVzaW9u NzA4 IFp1Y2tlcmJlcmc= IEZpbmlzaA== IFNjb3RpYQ== IFNhdmlvcg== IEluc3RhbGxhdGlvbg== YW50aGE= KC0= IDMwMg== IFB1bms= IGNyYXRlcg== eW91dHU= IHJvYXN0 IGluZmx1ZW5jaW5n IGR1cA== IEpS IEdyYXY= IHN0YXR1cmU= IGJhdGhyb29tcw== QXNpZGU= V2lraQ== bWVhbg== IFphaw== IE9uZXM= IE5hdGg= IGh5cGVydA== IGNvbW1lbmNlbWVudA== Q2l2aWw= IG1vZGVyYXRlbHk= IGRpc3RyaWJ1dG9ycw== IGJyZWFzdGZlZWRpbmc= IDk4MA== IFNpaw== IENpZw== IEFNRVI= UklQ IENhcmVlcg== dXN0aW5n IG1lc3NlZA== IGVo IEplbnNlbg== LyQ= IGJsYWNrbWFpbA== IGNvbnZlcnNpb25z IHNjaWVudGlmaWNhbGx5 IG1hbnRyYQ== cGF5aW5n IGl2b3J5 IENvdXJ0cw== T1VHSA== YXVudGxldA== U2VyaWFs QnJvdw== IEh1bmRyZWRz MzIz IHBlZQ== IGxpbnV4 IHN1Ym1lcg== IFByaW5jaXBhbA== NDg1 IERTTA== IENvdXNpbnM= IGRvY3RyaW5lcw== IEF0aGxldGljcw== IDMxNQ== IEthcm1h IGF0dGVudA== dXJnZXI= IHByZXNjcmliZQ== IGVuY2Fwcw== IENhbWU= IHNlY3JldGl2ZQ== IENyaW1lcw== ZG4= Q2xlYW4= IEVneXB0aWFucw== IENhcnBlbnRlcg== IGxs SHVt IE1pbG8= IGNhcGl0YWxpc3Rz IGJyaWVmZWQ= VHdl IEJhc2lu ZWx2ZXQ= TW9z IHBsdW5nZQ== IEthaXNlcg== IEZ1ag== aWxsaW4= IHNhZmVndWFyZHM= IG9zdGU= IE9wcG9ydHVuaXR5 IE1hZmlh IENhbGxpbmc= YXBh dXJiYW4= YnJ1c2g= aWxsYXJk Y8Op aW50ZWxsaWdlbmNl IExvYg== IERydWlk IHNtb290aGVy IGZvb3Rpbmc= IG1vdG9yaXN0cw== YXJjaXR5 IG1hc2N1bGluaXR5 IG1pc20= IGFiZG9taW5hbA== IFRhdmVybg== IFJvaA== IGVzY2FwZXM= c2lnbmVk QW50aG9ueQ== IHNhY3JpZmljaW5n IGludGltYWN5 IGFudGVyaW9y IEtvZA== IG1vdGlm IGdyYXo= IHZpc3VhbGl6YXRpb24= IGd1aXRhcmlzdA== IFRyb3Rza3k= bWFnaWM= RGFy IE1vcmk= IHdhcmRz IHRvaWxldHM= bGVzdA== IHRlbGVwb3J0 IFN1bmRheXM= IFBsYXQ= RVRT IGVTcG9ydHM= UGF0cmljaw== IEthdGhlcmluZQ== ZW5rbw== IGhhc3NsZQ== IE1pY2s= Z2dsZXM= IGhvYg== YWludGFpbg== IGFpcmJvcm5l IHNwYW5z IGNoaWxp IGFwZXJ0dXJl IHZvbHVudGVlcmVk IEluY2lkZW50 IEZyZXM= IFZldGVyYW4= YXVnaHRlcmVk aW5nbw== IHVuaW5zdXJlZA== Q0xPU0U= IGZ1c2U= IGVyb3RpYw== IGFkdmVydGlzZQ== cmFpc2luZw== VGV4dHVyZQ== IGF0dGVuZHM= IFJFQUw= dWRkbGVk IHNtb290 IDMwNQ== IFdpbGxpcw== IGJsb25k QW5hbHlzaXM= IFZU b25pY2E= IHN0cm9uZ2hvbGQ= UkY= Tk0= Lj4+ IHByb3NwZXJvdXM= IGJvYXN0ZWQ= Mjky IE1hbnVmYWN0dXJpbmc= UFJFU1M= Z3Jlbg== IHBoYXJtYWN5 IFJvY2tlZmVsbGVy a2Fp IHRodW1icw== IEh1dA== IG1vdGhlcmJvYXJk IGd1YXJkaWFucw== IEFsdGVy bGx1bGFy IHNoYWNr IHdpc2VseQ== IGJhY2tib25l ZXJ2YQ== IHN1aWNpZGVz IE1jR3JlZ29y aWphaA== RW1lcg== IEJyYXY= IGRlc2lnbmF0ZQ== UE9TVA== cHJvZHVjZWQ= IGNsZWFuc2luZw== aXJsd2luZA== ZXhpc3RlbnQ= IEh1bXBo IFBheW5l IHZlc3RlZA== xaE= IHN0cmluZ2VudA== aW9uYQ== IHVuc3Vi IHN1bW1lZA== IEhlcmN1bGVz c3ViamVjdA== IFJhZ25hcg== IE5vcw== IGNoYXJhY3Rlcml6YXRpb24= IHNhdnZ5 IERhd3Nvbg== IENhc2lubw== IGZyaQ== IEJhcnJpZXI= IG1pc2luZm9ybWF0aW9u IGluc3VsYXRpb24= IGNvcnJpZG9ycw== IGFpcnBsYW5lcw== IE5vY3Q= YWhp IDE5MTY= a2I= YXJtYWM= IHNodW4= IHNjaGVtYQ== IGhvcnJpZmllZA== IDIzOQ== YXVuZGVycw== TkI= aWF0ZXM= ZXJpdHk= IFNoYXJk IHJhcml0eQ== IGdyb3VwZWQ= IEdoYW5h YWdhaW5zdA== IEJpb2xvZ2ljYWw= IEF3YXJl b3dlbGw= z4Q= IEJlYXU= c2hhdw== SGFjaw== IEp1bGl1cw== VVNT b2xzb24= YXVuYQ== Y3J1 IE1hdXJpY2U= IElr IHNlcXVlbmNpbmc= IHJhZGljYWxz ICg/LA== dmlydHVhbA== IGFueXdheXM= IHJlcGVyYw== IGhhbmRsZXJz IGhlc2l0YW50 6YM= IE1G cGxlbWVudGF0aW9u YXNzb2NpYXRlZA== IGNhbXBhaWduZWQ= IFl1ZQ== dXRhdGlvbnM= IFlvZ2E= IHNpbW1lcg== IHJvZHM= IG1lbG9keQ== IGNvbnZveQ== dmlkZW9z IHNjcmVlbmVk TmVn b2NoZW1pY2Fs ICgpKQ== IHVsdHJhcw== IGFudGlw IElzbGFuZGVycw== NzA0 IGZldGlzaA== IHJpZGljdWxvdXNseQ== IEthcnQ= IG1pdG9jaG9uZHJpYWw= IGludGVyZmVyaW5n QnVpbGRlcg== IG92ZXJmbA== IGFjbmU= IE11ZA== IEtlcnI= ZmxleA== IFBvc3RhbA== IEJhbHRpYw== NDc3 IFBlcnNvbnM= b3VyYWdl SEI= IE11c2U= IEltbW9ydGFs IERyaXZpbmc= IHBldGl0aW9ucw== IHN1YnNjcmlwdA== IHNvcmNl IFByb2Nlc3Nvcg== dXRvbg== U29ueQ== IHBob24= IHJhY2Vk IEFudGhyb3A= IGRheXRpbWU= IEV4ZXJjaXNl QWRkaW5n IGVuZ2FnZXM= IFF1YWxjb21t IG1pcmFjbGVz IG1lbWVz IERyaW5r IE9yaW9sZXM= IGhhaXJz IFBvbGFy YXRob20= IHNsaXBwZXJ5 IFJlbXk= IGNhcmFtZWw= IFlFQVI= IGFsaw== SWdu YXV0aW9u IE1lcmxpbg== IENyYW4= IGFwb2xvZ2llcw== IDQxMA== IG91dGluZw== IE1lbW9yaWVz YXBwb2ludGVk IGNvdW50ZXJlZA== dWxk cG9zaW5n IGZpcmV3YWxs IFdhc3Q= IFdldA== d29ya2Vk c2VsbGVy IHJlcGVhbGVk ZXJlbw== YXNzdW1pbmc= QkxJQw== bWl0ZQ== IENFT3M= IENoYXBlbA== ZWxsaWdlbnQ= X19fX19fX19fX19fX19fX19fX19fX19f RG9n IHdhcnQ= IHN1YnNjcmliZXI= c3BvcnRz IGJlZ2dlZA== IE1W IHNlbWlm ZXRoaWNhbA== IHByZWFjaA== IHJldml0YWw= IHB1bml0aXZl IHNob3J0Y3V0cw== IGluc3RpdHV0ZWQ= IFdhcnNhdw== IGFiZG9tZW4= IEtJTkc= IHN1cGVyaW50ZW5kZW50 IGZyeQ== IEdlbw== VE9S IGNvbnRyYWRpY3Rpb25z YXB0aWM= IGxhbmRzY2FwZXM= YnVncw== IGNsdXN0 IHZvbGxleQ== Y3JpYmVk IHRhbmRlbQ== IHJvYmVz V0hBVA== IHByb21vdGVy IGVsb3F1 cmV2aWV3ZWQ= IERL IFBsYXRv IGZwcw== VGFuaw== IERlcnJpY2s= IHByaW9yaXRpemU= YXNwZXI= IEhvbmR1cmFz IENvbXBsZXRlZA== bmVj IG1vZw== bmly IE1heW8= REVG c3RhbGw= aW5uZXNz IFZvbGtzd2FnZW4= IHByZWNhdXRpb24= IE1lbGw= aWFr aXN0cmllcw== IDI0OA== IG92ZXJsYXBwaW5n U2VuYXRl IEVuaGFuY2U= cmVzeQ== cmFjaWFs T1JUUw== IE1vcm1vbnM= U3Ryb25n IENvY2g= TWV4aWNv IE1hZHVybw== IGphcnM= IGNhbmU= V2lr b2xsYQ== aWZmZXJlbmNl IHBoeXNpY2lzdA== IE1hZ2dpZQ== IDI4NQ== IGRlcGljdGlvbg== IE1jTGFyZW4= SnU= IHNsb3dz IGNvbW1pc3Npb25lcnM= IFdpbGxvdw== IEV4cGxvcw== aG92YWg= IHRlY2huaWNpYW4= IGhvbWljaWRlcw== IEZsYXY= IFRydW1hbg== IDEwMDAw dWN0b3I= IHNoYWRlcg== TmV3c2xldHRlcg== NDU3 IHJldmVy IGhhcmRlbmVk IHdoZXJlYWJvdXRz IHJlZGV2ZWxvcA== IGNhcmJz IHRyYXZlcnM= IHNxdWlycmVs IGZvbGxvd2Vy IHNpbmdz NTA4 IHJhYmJpdHM= ZW1vbml1bQ== IGRvY3VtZW50aW5n IG1pc3VuZGVyc3Rvb2Q= KSc= Umljaw== Z2dpZXM= IHByZW1pZQ== IHNrYXRpbmc= IHBhc3Nwb3J0cw== IGZpc3Rz YWdlZGRvbg== SGF3 QUNQ MDgw IFRob3VnaHRz IENhcmxzb24= IHByaWVzdGhvb2Q= aHVh IGR1bmdlb25z IExvYW5z IGFudGlz IGZhbWlsaWFyaXR5 IFNhYmI= b3BhbA== IEluaw== c3RyaWtl IGNyYW0= IGxlZ2FsaXplZA== IGN1aXNpbmU= IGZpYnJl VHJhdmVs IE1vbnVtZW50 T0RZ ZXRoeQ== IGludGVyc3RhdGU= IFBVUg== ZW1wb3Jhcnk= IEFyYWJpYW4= ZGV2ZWxvcGVk IHNhZGRsZQ== IGdpdGh1Yg== IE9mZmVy IElTUA== cm9sZXQ= IFNVUEVS IERlbmlz IG11bHRpcGxpZXI= IHN0aXJyZWQ= SW50ZXJlc3RpbmdseQ== IGN1c3RvbWFyeQ== IGJpbGxlZA== aGV4 IG11bHRpcGxpZWQ= IGZsaXBwaW5n IENyb3NieQ== IGZ1bmRhbWVudGFscw== aWFl IFBsYXllZA== IEF0b20= YW1hem9u IEZsYW0= ZWV6 YWN0aXZhdGVk IHRhYmxlc3Bvb24= IGxpYmVyYWxpc20= IFBhbGlu IFBhdGVs TnVt IFRBTQ== IHN1cm4= IFJlbG9hZGVk IGNvaW5lZA== Il0s IENsYXNo IEFndQ== IHByYWdtYXRpYw== IEFjdGl2YXRl IDgwMg== IHRyYWlsZXJz IHNpbGhvdQ== IHByb2Jlcw== IGNpcmN1cw== IEJhaW4= IExpbmRzYXk= IEFiYmV5 RGVsaXZlcnk= IGNvbmNlc3Npb24= IGdhc3Rybw== IFNwcml0ZQ== xJ8= YW5kZWw= IGdpbW0= IGF1dG9iaQ== IFR1cnRsZQ== IHdvbmRlcmZ1bGx5 IEhhcmFt IFdvcmxkd2lkZQ== IEhhbmRsZQ== IHRoZW9yaXN0cw== IHNsZWVr IFpodQ== b2dyYXBoaWNhbGx5 RUdB IE93bmVycw== YXRocw== IEFudGFyY3RpYw== bmF0YWw= PSIi ZmxhZ3M= YGBgYA== IHN1bA== S2g= IHBvdGFzc2l1bQ== IGxpbmVtYW4= IGNlcmVhbA== IFNlYXNvbnM= IDIwMjI= IG1hdGhlbWF0aWM= IGFzdHJvbm9tZXJz cHJvZmVzc2lvbmFs IGZhcmVz Y2tub3dsZWQ= IGNoaQ== IHlvdW5nc3RlcnM= IG1pc3Rha2VubHk= IGhlbWlzcGhlcmU= IERpdmluaXR5 cm9uZQ== ICIs cmluZ3M= IGF0dHJhY3Rz dmFuYQ== 5bk= Q0FQ IHBsYXlsaXN0 IHBvcmNo 44Gj IGluY29ycG9yYXRlcw== IHNvYWs= IGFzc2VydGluZw== IFRlcnJvcmlzbQ== IFBhYmxv SmE= Y2VzdGVy IGZlYXJpbmc= IFByYXllcg== IGVzY2FsYXRlZA== R1c= IHJvYmU= IEJyaWdodG9u YWNpc3Rz IFN5bXBob255 IER3YXJm IFBhcmFkZQ== IExlZ28= IGluZXhwbA== IGxvcmRz bGVhZg== UkFH bGliZXI= IGNpZ2Fycw== IEplaG92YWg= NjA2 V0lORE9XUw== IExpYmVyaWE= ZWJ1cw== SGVhdnk= IGx1YnJpYw== IFJX YW5ndWFnZXM= IG5hcnJvd2Vk Y29tcHV0ZXI= IEVtYmVy IG11cmRlcmluZw== IGRvd25zdHJlYW0= IFR1bHM= IFRhYmxlcw== VG9waWM= IEFjY3VyYWN5 PS8= bG9zdA== IFJlaQ== IHByb2dyZXNzZXM= YmVhcg== IGVzdGFibGlzaG1lbnRz SnVzdGlu IFBlYWNo IEdvbWV6 5b8= IFRyaWFuZ2xl SWRlbnQ= IEhpdmU= UmVzb3VyY2Vz IG1peGVz IEFzc3VtaW5n TXU= IGh5cG9j IHNhbmU= IFdhbg== aWRpb3Vz U3VjY2Vzcw== IGlv QW5nZWw= IGRhbmdlcm91c2x5 IENyZWF0dXJl V09SSw== Ols= IEthdHJpbmE= TGlzdGVuZXI= TWlsbGVy IElkbGli aGFuZw== IGNpcmN1bXZlbnQ= aHJlZg== IGNlbGVzdGlhbA== IFdlZWtz IFB1Zw== IERhbHRvbg== IHN1YnBvZW5h dWt1 IHBlcnNpc3RlZA== cGVp b2xkaW5n IERvY3VtZW50cw== IEhhc3Q= IENFTlQ= IHByaW1lcg== IHN5bm9ueW1vdXM= IG5pYg== b21icw== IG5vdGF0aW9u IERpc2g= IEF0bW9zcA== IGZvcmJpZA== IEFORw== cGF0dGVybg== bG9z IHByb2plY3RpbGVz YnJvd24= LiIs IFZlbm9t IGZpZXJjZWx5 dWJsaXNoZWQ= IFVyYW4= IE5pY2FyYWc= NDEw IENBTA== T1RPUw== IE1pcmFjbGU= IEVuY2hhbnQ= IGd1YXJkaW5n YXBwZW5k QXR0YWNo IGxldmVsZWQ= IGNvbmRvbXM= aWhpbGF0aW9u NjQ5 IG5pZ2h0bWFyZXM= IFRIRVk= IFNUQVJU IEtpbm4= IHJvb21tYXRl IGh5Z2llbmU= b3BwaW5n Sm9i IGx2bA== IFZFUg== IEtlZXBpbmc= YWJldGlj IGZvcm1hdHRpbmc= ZXJhbGE= IHJldmlzaW9ucw== IHJlc3VyZw== VGVs IEdvb2RtYW4= MzUz cG9k IGluZGlzcA== IFRyYW5zbGF0aW9u IGdvd24= IE11bmQ= IGNpcw== IGJ5c3RhbmQ= Y29sbGVjdA== IFB1bmphYg== YWN0aXZlbHk= IEdhbWI= dGVsbA== IGltcG9ydGluZw== Z2VuY2llcw== IGxvY29t IEJyaWxs SG9seQ== IEJlcmdlcg== IHNob3dkb3du IHJlc3BvbmRlcnM= SUxZ IHRha2Vkb3du bGV0ZWQ= IG1hdHRlcmVk IHByZWRpY3RpdmU= IG92ZXJsYXk= R1BV IFZpY2s= IGNvbnZleWVk VGFi cGVlcg== U2Nhbg== IGRlZmVuc2l2ZWx5 dmFl IGFwcHJvdmluZw== IHRpZXJz IFZpYQ== cXVlcmFkZQ== IFNhdWRpcw== IGRlbW9saXNoZWQ= IFByb3BoZQ== IG1vbm8= IGhvc3BpdGFsaXR5 SEFN IEFyaWVs TU9E IFRvcmFo IGJsYWg= IEJlbGFydXM= ZXJlbnRpYWw= IFR1Yw== IGJhbmtlcg== Mzk3 IG1vc3F1aXQ= IFNjaWVudGlzdA== IE11c2ljYWw= IGh1c3Q= U2hpZnQ= IHRvcm1lbnQ= IHN0YW5kb2Zm RWR1Yw== IEZvZw== IGFtcGxpZmllcg== U2hhcGU= SW5zdGFuY2U= IENyaXRpY3M= IGRhZW1vbg== SG91c3Rvbg== IG1hdHRyZXNz IElERg== IG9ic2NlbmU= IEFtZXI= aGV0dGk= IGNvbXBpbGluZw== MzUy dmVyZXR0 IFJlZHVjdGlvbg== aXN0cmF0aW9u IEJsZXNzZWQ= IEJhY2hlbG9y MzE2 IHByYW5r IFZ1bGNhbg== ZGRpbmc= IG1vdXJuaW5n IFF1aW50 IEJsYXN0ZXI= dGVzdGluZw== IHNlZGltZW50 Pj4+ IEV0ZXJuaXR5 IFdIRVJF IE1hemU= IHJlYWN0aW5n IEFsdg== b21zZGF5 IENSQQ== IHRyYW5zbGF0b3I= IGJvZ3Vz YXR1 V2Vic2l0ZQ== b2xscw== IGJhcHRpc20= IHNpYmxpbmc= IEF1dHVtbg== dmV6 44Gu6Q== Z3VhcmRz R2Vvcmc= YXNzYWRvcnM= IEZyZXVk IGNvbnRpbmVudHM= IFJlZ2lzdHJ5 QmVybmll lprlo6s= IHRvbGVyYW50 IFVX IGhvcnJpYmx5 OTk1 IE1JREk= IGltcGF0aWVudA== b2NhZG8= ZXJp IFdvcnN0 IE5vcnJpcw== IFRhbGtpbmc= IGRlZmVuZHM= ZW5zYWJsZQ== IDIwMjE= IGFuYXRvbXk= TGV3 IGRyYXdlcg== IENhbmJlcnJh IHBhdHJpb3RpYw== 6b6N5Zaa5aOr IEF2Zw== QVJN IHVuZGlzY2xvc2Vk IGZhcmV3ZWxs NDU5 YmFibGU= IEFsbGlzb24= T0xPRw== IGNvbmNv dGlnaHQ= IEFDUEk= IE1pbmVz bGljaA== IOKUnA== cmVwcmVzZW50ZWQ= MjAwMDAw IGVudGh1c2lhc3Q= T1RT Ymls IEluZ3JlZGllbnRz IGludmVudG9y IE15U1FM wqDCoMKg IEFCT1VU d2l0aGlu IG1r QnVs IEZha2U= IGRyYWNvbmlhbg== V2E= aGVsbQ== IFRlcnJhbg== ZXJ2aWxsZQ== IGNvbW1vbnBsYWNl U0laRQ== ICI8 cmVwbGFjZQ== b2dyYXBocw== IFNFTEVDVA== aW5jaWJsZQ== IE1vc3RseQ== IFNoZWZmaWVsZA== IElERQ== dWdnbGU= IGNpdGF0aW9ucw== aHVyc3Q= IFVuaXg= IHVubGVhc2g= IFBpcGVy IE5hbm8= IHN1Y2N1bWI= IHJlbHVjdGFuY2U= IDI1MDA= IE1lcmNoYW50 IHdpcmV0 IGNvbWJvcw== IEJpcnRoZGF5 IGNoYXJjb2Fs IFVQUw== IEZhaXJmYXg= IGRyaXZld2F5 IFRlaw== IFBpdGNo b3ZlcmU= IHRlY2huaWNpYW5z IEFjdHVhbA== ZmxhdGlvbg== IEZpc2NhbA== IEVtcHR5 YW5hbW8= IG1hZ25lc2l1bQ== IHNsdXQ= IGdyb3dlcnM= SW52ZXN0aWdhdG9ycw== KCk6 IFNhdGVsbGl0ZQ== IEtleW5lcw== bWlzc2l2ZQ== bGFuZQ== IGJvcm91Z2g= MzQ0 IFRFQU0= IEJldGhlc2Rh Q1Y= aG93ZXI= IFJBRA== IGNoYW50 IFJpeQ== IGNvbXBvc2l0aW9ucw== IG1pbGRseQ== IG1lZGRsaW5n IGFnaWxpdHk= YW5lZXJz NTAx IHN5bnRo bGluZ2Vy Mjkx IGV4Y2xhaW1lZA== UGFydHk= IGNvbnRhbWlu IE1hbm9y IFJlc3BvbmQ= IHByYWlzaW5n IG1hbm5lcnM= ZmxlZXQ= U3VtbWVy IEx5bmQ= IERlZmluaXRlbHk= Z3JpbQ== IGJvd2xpbmc= c3RyaQ== 55s= eW50 IG1hbmRhdGVz RElW IHJlY29uY2lsZQ== dmlld3M= IERhbW9u dmV0dGU= Rmxv IEdyZWF0ZXN0 aWxvbg== aWNpYQ== IHBvcnRyYXlhbA== IGN1c2hpb24= NTA0 MTk3OQ== b3NzYWw= QXBwbGlj c2NyaXB0aW9u IG1pdGlnYXRpb24= QVRT cGFj IGVyYXNlZA== IGRlZmljaWVuY2llcw== IEhvbGxhbmRl IFh1 IGJyZWQ= IHByZWduYW5jaWVz ZmVtaW4= IGVtcGg= IHBsYW5uZXJz IG91dHBlcg== dXR0ZXJpbmc= IHBlcnBldHJhdG9y IG1vdHRv IEVsbGlzb24= IE5FVkVS IGFkbWl0dGVkbHk= QVJJ IEF6ZXJiYWlqYW4= IG1pbGxpc2Vj IGNvbWJ1c3Rpb24= IEJvdHRsZQ== IEx1bmQ= IFBz IERyZXNz IGZhYnJpY2F0ZWQ= IGJhdHRlcmVk IHNpZGVs IE5vdHRpbmc= Rm9yZWlnbg== IEplcm9tZQ== MDIw IEFyYml0 IGtub3Rz IFJJR0hU TW92aW5n 44GZ IHN1cmdlcmllcw== IGNvdXJ0aG91c2U= IG1hc3RlcmVk IGhvdmVyaW5n IEJyYW4= IEFsaXNvbg== IHNhZmVzdA== bWlsaXRhcnk= IGJ1bGxpZWQ= IGJhcnJhZ2U= UmVhZGVy RVNF IEdlb2dyYXBoaWM= VG9vbHM= MzE0 IEdlZWs= cm90aA== Z2xlcnM= IEZJTg== z4E= IEFzdG9u YWx0ZXJu NDg4 IHZldGVyaW4= R2FtZXI= IGludGVs cmVuY2hlcw== U2hpZWxk IGFtbmVzdHk= IEJoYXI= IHBpbGVk IGhvbm9yYWJsZQ== IEluc3RpdHV0ZXM= IHNvYWtlZA== IGNvbWE= IEVGRg== MzQx Ynl0ZXM= IEdtYWls bGVpbg== IENhbmFkaWVucw== bWF0ZXJpYWw= SWw= IGluc3RydWN0b3Jz IEtZ IGNvbmNlaXZl dWJi IFBvc3NpYmxl IGVhc2luZw== IENocmlzdGluYQ== IGNhcmlj IEhEUg== Uk9N IHNob3ZlbA== ZGVsZXRl IHB1ZmY= IENoYW5naW5n IHNlYW1sZXNzbHk= QXR0cmlidXRl IGFjcXVpc2l0aW9ucw== YWtlcnk= IEVG IGF1dGlzdGlj IFRha2Vz IFBvd2Rlcg== IFN0aXI= NTEw IEJ1YmJsZQ== c2V0dGluZ3M= IEZvd2xlcg== IG11c3RhcmQ= IG1vcmVvdmVy IGNvcHlyaWdodGVk IExFRHM= MTUwMA== 5ok= IEhJUw== ZW5m IGN1c3RvZA== IEh1Y2s= R2k= IGltZw== QW5zd2Vy Q3Q= amF5 IEluZnJhc3RydWN0dXJl IGZlZGVyYWxseQ== TG9j IG1pY3JvYmVz IG92ZXJydW4= ZGRz b3RlbnQ= YWRpYXRvcg== Pj4+Pj4+Pj4= IHRvcm5hZG8= IGFkanVk IGludHJpZ3VlZA== IHNp IFJldmVsYXRpb24= cHJvZ3Jlc3M= IGJ1cmdsYXJ5 IFNhaXlhbg== IEthdGh5 IHNlcnBlbnQ= IEFuZHJlYXM= IGNvbXBlbA== ZXNzbGVy IFBsYXN0aWM= IEFkdmVudA== IFBvc2l0aXZl IFF0 IEhpbmR1cw== cmVnaXN0ZXJlZA== dWxhcml0eQ== IHJpZ2h0ZW91c25lc3M= IGRlbW9uaWM= dWl0aXZl IEJEUw== IEdyZWdn Y2lh IENydXNhZGU= IFNpbmFp V0FSRQ== Kyg= IG1lbGw= IGRlcmFpbA== eWFyZHM= QXN0 IG5vdGljZWFibHk= IE9iZXI= UmFt IHVubm90aWNlZA== IHNlcQ== YXZhZ2U= VHM= IDY0MA== IGNvbmNlZGU= IF0p RmlsbA== IGNhcHRpdml0eQ== IEltcHJvdmVtZW50 IENydXNhZGVy YXJhb2g= TUFQ 5pc= IHN0cmlkZQ== YWx3YXlz Rmx5 Tml0 IGFsZ2Fl IENvb2tpbmc= IERvb3Jz TWFsbGV5 IHBvbGljZW1lbg== 44GN IGFzdHJvbmF1dA== YWNjZXNzaWJsZQ== NDk1 IFJBVw== Y2xpZmZl dWRpY3JvdXM= IGRlcGVuZGVk YWxhY2g= IHZlbnR1cmVz cmFrZQ== IHRpdHM= IEhvdQ== IGNvbmRvbQ== b3Jtb25hbA== IGluZGVudA== IHVwbG9hZGluZw== Rm9vdG5vdGU= SW1wb3J0YW50 IDI3MQ== IG1pbmRmdWw= IGNvbnRlbmRz Q3Jh IGNhbGlicg== IE9FQ0Q= cGx1Z2lu RmF0 IElTUw== IER5bmFtaWNz YW5zZW4= Njg2 Jyks IHNwcml0ZQ== IGhhbmRoZWxk IEhpcHA= PX49fg== VHJ1c3Q= IHNlbWFudGljcw== IEJ1bmRlcw== IFJlbm8= IExpdGVyYXR1cmU= c2Vuc2U= R2FyeQ== IEFlZw== IFRyaW4= RUVL IGNsZXJpYw== IFNTSA== IGNocmlzdA== IGludmFkaW5n aWJ1 IGVudW0= YXVyYQ== IGFsbGVnZQ== IEluY3JlZGlibGU= QkJD IHRocnU= IHNhaWxlZA== IGVtdWxhdGU= IGluc2VjdXJpdHk= IGNyb3U= IGFjY29tbW9kYXRpb25z IGluY29tcGV0ZW50 IHNsaXBz IEVhcnRocXU= c2FtYQ== SUxMRQ== IGlQaG9uZXM= YXNha2k= IGJ5ZQ== IGFyZA== IGV4dHJhcw== IHNsYXVnaHRlcmVk IGNyb3dkZnVuZGluZw== cmVzc28= IGZpbGli IEVSUk9S IFRMUw== ZWdn IEl0YWw= IGVubGlzdA== IENhdGFsb25pYQ== IFNjb3Rz IHNlcmdlYW50 IGRpc3NvbHZl Tkg= IHN0YW5kaW5ncw== cmlxdWU= SVE= IGJlbmVmaWNpYXJ5 IGFxdWFyaXVt WW91VHViZQ== IFBvd2VyU2hlbGw= IGJyaWdodGVzdA== IFdhcnJhbnQ= U29sZA== V3JpdGluZw== IGJlZ2lubmluZ3M= IFJlc2VydmVk IExhdGlub3M= aGVhZGluZw== IDQ0MA== IHJvb2Z0b3A= QVRJTkc= IDM5MA== VlBO R3M= a2VybmVs dHVybmVk IHByZWZlcmFibGU= IHR1cm5vdmVycw== IEhlbHM= U2E= IFNoaW5qaQ== dmVo IE1PRFVMRQ== VmlvbA== IGV4aXRpbmc= IGphYg== IFZhbmlsbGE= IGFjcm9u IEdhcA== YmVybg== QWs= IE1jR3U= IGVuZGxlc3NseQ== IEZhcmFnZQ== IE5vZWw= VmE= TUs= IGJydXRl IEtydQ== IEVTVg== IE9saXZpYQ== 4oCg IEthZg== IHRydXN0aW5n IGhvdHM= MzI0 IG1hbGFyaWE= IGpzb24= IHBvdW5kaW5n b3J0bWVudA== Q291bnRyeQ== IHBvc3Rwb25lZA== IHVuZXF1aXY= Pyks IFJvb25leQ== dWRkaW5n IExlYXA= dXJyZW5jZQ== c2hhcGVzaGlmdGVy IEhBUw== b3NhdGU= IGNhdmVybg== IGNvbnNlcnZhdGlzbQ== IEJBRA== IG1pbGVhZ2U= IGFycmVzdGluZw== VmF1bHRz IG1peGVy RGVtb2NyYXRpYw== IEJlbnNvbg== IGF1dGhvcmVk ODAwMA== IHByb2FjdGl2ZQ== IFNwaXJpdHVhbA== dHJl IGluY2FyY2VyYXRlZA== IFNvcnQ= IHBlYWtlZA== IHdpZWxkaW5n cmVjaWF0aW9u 15nX UGF0Y2g= IEVtbXk= IGV4cXU= dHRv IFJhdGlv IFBpY2tz IEdyeQ== cGhhbnQ= IGZyZXQ= IGV0aG4= IGFyY2hpdmVk JS0= Y2FzZXM= IEJsYXpl IGltYg== Y3Y= eXNz aW1vbnk= IGNvdW50ZG93bg== IGF3YWtlbmluZw== IFR1bmlzaWE= IFJlZmVy IE1K IHVubmF0dXJhbA== IENhcm5lZ2ll aXplbg== IE51Z2dldHM= aGVzcw== IGV2aWxz NjQ3 IGludHJvZHVjdG9yeQ== bG92aW5n IE1jTWFob24= IGFtYmlndWl0eQ== TGFiZWw= IEFsbWlnaHR5 IGNvbG9yaW5n IENsYXVz c2V0dGluZw== TlVMTA== IEZhdm9yaXRl IFNJRw== Pig= IFNoaXZh IE1heWVy IHN0b3JtZWQ= IENvdmVyYWdl d2VhcG9ucw== aWdoYW0= IHVuYW5zd2VyZWQ= IGxldmU= IGNveQ== Y2Fz YmFncw== YXN1cmVk U2VhdHRsZQ== IFNhbnRvcnVt c2VyaW91cw== IGNvdXJhZ2VvdXM= IFNvdXA= IGNvbmZpc2NhdGVk IC8vLw== IHVuY29udmVudGlvbmFs IG1vbXM= IFJvaGluZ3lh IE9yY2hlc3RyYQ== IFBvdGlvbg== IGRpc2NyZWRpdA== IEZJTA== Zml4ZWQ= IERlZXI= ZG9p IERpbWVuc2lvbg== IGJ1cmVhdWNyYXRz ZXRlZW4= IGFjdGlvbkdyb3Vw b2ht IGJ1bXBz IFV0aWxpdHk= IHN1Ym1hcmluZXM= cmVuaGVpdA== cmVzZWFyY2g= IFNoYXBpcm8= IHNrZXRjaGVz IGRlY2VwdGl2ZQ== IFZpbA== ZXNhbWU= IEVzc2VudGlhbGx5 IHJhbXBhZ2U= aXNreQ== IG11dHRlcmVk dGhyaXRpcw== IDIzNg== ZmV0 YmFycw== IHB1cGls IFRob3U= b1M= c29uZw== IGZyYWN0dXJlZA== IHJldmVydA== cGljdHVyZQ== IGNyaXRlcmlvbg== dXNoZXI= IHJlcGVyY3Vzc2lvbnM= IFZpbnRhZ2U= IFN1cGVyaW50ZW5kZW50 T2ZmaWNlcnM= IGZsYWdnZWQ= IGJsYW1lcw== IGludmVyc2U= b2dyYXBoZXJz IG1ha2VzaGlmdA== IGRldm9pZA== IGZvc3NpbHM= IEFyaXN0b3RsZQ== IEZ1bmRz IGRlcGxldGVk IEZsdQ== IFl1YW4= IHdvZXM= IGxpcGlk IHNpdHU= cmVxdWlzaXRlcw== IGZ1cm5pc2g= IFNhbWFy IHNoYW1lZnVs IGFkdmVyc2VseQ== IGFkZXB0 IHJlbW9yc2U= IG11cmRlcm91cw== dWNrbGVz IEVTTA== IDMxNA== c2VudA== IHJlZGVm IENhY2hl IFB1cnM= aWdhbnM= IDQ2MA== IHByZXNjcmlwdGlvbnM= IGZyZXM= RnVjaw== b2NyYXRlcw== VHdlbnR5 IFdlaXJk IFRvZ2dsZQ== IENhbGxlZA== aXRpemVucw== IHBvdWx0cnk= IGhhcnZlc3Rpbmc= 44Km44K5 Qm90dG9t IGNhdXRpb25lZA== dG4= Mzk2 IE5pa2tp IGV2YWx1YXRpb25z IGhhcmFzc2luZw== IGJpbmRpbmdz IE1vbmV0YXJ5 IGhpdHRlcnM= IGFkdmVyc2FyeQ== dW50cw== IHNldGJhY2s= IGVuY3J5cHQ= IENhaXQ= IGxvd3M= ZW5nZXM= IE5vcm4= IGJ1bGJz IGJvdHRsZWQ= IFZveWFnZXI= MzE3 IHNwaGVyZXM= cG9saXRpY3M= IHN1YnRyYWN0 IHNlbnNhdGlvbnM= IGFwcGFsbGluZw== IDMxNg== IGVudmlyb25tZW50YWxseQ== IFNURU0= IHB1Ymxpc2hlcw== NTYw IGRpbGlnZW5jZQ== NDg0 IGFkdmlzZXM= IHBldHJvbA== IGltYWdpbmluZw== IHBhdHJvbHM= IEludGVnZXI= IEFzaGVz YWN0dXM= IFJhZGlhbnQ= IExU aXRhYmlsaXR5 aHRha2luZw== U2V0dGluZw== IG51YW5jZWQ= IFJlZWY= IERldmVsb3BlcnM= Tmk= cGllY2Vz OTkw TGljZW5zZQ== IGxvd2Vycw== IE90dG9tYW4= MzI3 b29v IHF1aXR0aW5n bWFya2V0cw== QmVoaW5k IGJhc2lu IGRvY3M= YW5pZQ== Zmxhc2g= Y3Rs IGNpdmlsaXplZA== IEZ1a3VzaGltYQ== Il0sIg== IEtT IEhvbmVzdGx5 YXJhdA== IGNvbnN0cnVjdHM= IExhbnM= IERpcmU= IExJS0U= IFRyb3VibGU= IHdpdGhob2xkaW5n IE9ibGl2aW9u IHNhbml0eQ== YW55YQ== Q29uc3Q= IGdyb2Nlcg== IENlbHNpdXM= IHJlY291bnRlZA== IFdpZmU= Qm9yZGVy YXRlcmVk aGFwcHk= IHNwb2lsZXI= IGxvZ2ljYWxseQ== SGFsbA== IHN1Y2NlZWRpbmc= IHBvbHltb3JwaA== IGF4ZXM= IFNob3RndW4= IFNsaW0= IFByaW5jaXBsZXM= IExldGg= YXJ0YQ== IHNjb3I= U2NyZWVuc2hvdA== IHJlbGF4YXRpb24= IyQjJA== IGRldGVycmVudA== aWRkeQ== IHBvd2VybGVzcw== IGxlc2JpYW5z IGNob3Jkcw== IEVkaXRlZA== c2VsZWN0ZWQ= IHNlcGFyYXRpc3Rz MDAwMg== IGFpcnNwYWNl IHR1cm5hcm91bmQ= IGN1bm5pbmc= UEFUSA== UG9seQ== IGJvbWJlZA== IHRpb24= eHM= IHdpdGhob2xk IHdhZ2Vk IExpYmVydGllcw== RmxhZw== IGNvbWZvcnRpbmc= NDU0 IElyaXM= YXJlcnM= IHJhZw== IHJlbG9jYXRlZA== IEd1YXJhbnQ= IHN0cmF0ZWdpY2FsbHk= IGdhbW1h dWJlcnR5 IExvY2toZWVk Z3Jlcw== IGdyaWxsZWQ= IExvd2U= c3RhdHM= IFJvY2tz IHNlbnNpbmc= IHJlbnRpbmc= IEdlb2xvZ2ljYWw= 2KfY b3Ryb3A= IHNldw== IGltcHJvcGVybHk= NDg2 IOKWoA== IHN0YXJ2aW5n IEJq RGlzY3Vzc2lvbg== MzI4 IENvbWJv IEZpeGVz TkFU IHN0cml2aW5n dGhvcmE= IGhhcnZlc3RlZA== IFBpbmc= IHBsYXlmdWw= IGF2ZW51ZXM= IG9jY3VwYXRpb25hbA== IHdha2Vz IENvdXJpZXI= IGRydW1tZXI= IEJyb3dzZXI= IEhvdXRo aXR1 IGFwcGFyZWw= cGFzdGU= IGh1bnRlZA== IFNlY29uZGx5 bGFpbg== WFk= IFBJTg== aWNvbnM= IGNvY2t0YWlscw== IHNpemFibGU= IGh1cmRsZXM= ZXN0aW5hbA== IFJlY3JlYXRpb24= IGVjbw== NjQ4 IERpZWQ= bWludA== IGZpbmdlcnByaW50cw== IGRpc3Bvc2U= IEJvc25pYQ== dHN5 MjIwMA== IGluc3BlY3RlZA== IEZvdQ== IGZ1c3M= IGFtYnVzaA== IFJhaw== IG1hbmlmZXN0ZWQ= UHJvc2VjdXQ= IHN1ZmZpY2U= cmVuY2Vz IGNvbXBlbnNhdGVk IEN5cnVz IGdlbnVz IFdvbHZlcmluZQ== IFRyZW5kcw== IGhpa2Vz IFNlZW4= IGVucm9s Q29sZA== IHBvbGl0ZWx5 IFNsYXY= IFJ1cGVydA== IGV5ZXdpdG5lc3M= IEFsdG8= IHVuY29tcA== IHBvc3Rlcmlvcg== TXVzdA== IEhlcno= IHByb2dyZXNzaXZlbHk= IDIzNA== IGluZGlmZmVyZW5jZQ== IEN1bm5pbmdoYW0= IGFjYWRlbWlh IHNld2Vy IGFzdG91bmRpbmc= IEFFUw== cmF0aGVy IGVsZGVzdA== IGNsaW1icw== IEFkZHM= IG91dGNyeQ== IGNvbnRhZw== IEhvdXNlcw== IHBlcHQ= IE1lbGFuaWE= aW50ZXJlc3RlZA== IFVDSA== IFJvb3Rz IEh1YmJhcmQ= IFRCRA== IFJvbWFuaWFu ZmlsZW5hbWU= U3RvbmU= IEltcGw= IGNocm9tb3NvbWU= Q2xl ZHg= IHNjcmFtYmxlZA== IFB0 IDI0Mg== T1BMRQ== IHRyZW1lbmRvdXNseQ== U3RyZWV0 IGNyYXZpbmc= IGJ1bmRsZWQ= IFJH cGlwZQ== IGluanVyaW5n IGFyY2FuZQ== UGFydGljaXA= IEhlcm9pYw== c3R5 IHRvcHBpbmc= IFRlbXBlc3Q= cmVudGljZXM= Ymg= IHBhcmFub2lh IFVuaWNvZGU= IGVncmVnaW91cw== IFwn IE9zd2FsZA== IGdyYXZlbA== IFNpbXBzb25z IGJsYW5k IEd1YW50YW5hbW8= V3JpdGVy bGluZXJz IERpY2U= SkM= IHBhcml0eQ== IHNpZGVk IDIzNw== IFB5cnJoYQ== YXR0ZXJz ZGs= RmluZQ== Y29tcGFu IGZvcm11bGF0ZWQ= IElkb2w= aWxlcnM= aGVtb3Ro IEZhdg== IGludHJ1c2lvbg== IGNhcnJvdHM= IExheWVy IEhhY2tlcg== IC0tLS0tLS0tLS0tLS0tLS0= IG1vZGVyYXRpb24= 6YE= b2NvYw== IGNoYXJhY3Rlcml6ZQ== IFRlcmVzYQ== IHNvY2lvZWNvbm9taWM= IHBlcms= IFBhcnRpY2lwYXRpb24= dHJhaW5pbmc= IFBhdWxv cGh5cw== IHRydXN0d29ydGh5 IGVtYm9kaWVk IE1lcmNo Y3VycmVuY3k= IFByaW9yaXR5 IHRlYXNpbmc= IGFic29yYmluZw== IHVuZmluaXNoZWQ= IENvbXBhcmlzb24= IGRpc3BsZQ== d3JpdGVycw== IHByb2Zlc3Npb25z IFBlbmd1aW4= IGFuZ3JpbHk= IExJTks= Njg4 IENvcnJlc3BvbmQ= IHByZXZhaWxlZA== IGNhcnRlbA== bHA= YXNtcw== IFJlZGVtcHRpb24= IElzbGFtaXN0cw== ZWZmZWN0cw== ZG9zZQ== IExhdHRlcg== IEhhbGlmYXg= IHZhcw== IFRvcGljcw== IE5hbWVk YWR2ZXJ0aXNpbmc= enph SUNFUw== IHJldGFyZGVk YWNoYWJsZQ== IFB1cHBldA== IEl0ZW1MZXZlbA== IHJldHJhY3Q= IGlkZW50aWZpYWJsZQ== QWFyb24= IEJ1c3Rlcg== c29s aGVsbGU= YXNzZW1i SG9wZQ== cmFuZ2Vk QmE= IFB1cmNo 6YA= IFNpcmk= IGFycml2YWxz IDE5MTI= IHNob3J0ZW5lZA== IDMxMg== IGRpc2NyZXBhbmN5 IFRlbXBlcmF0dXJl IFdhbHRvbg== IGtpbmRlcmc= cG9saXQ= IHJlbWl4 IGNvbm5lY3RvcnM= 44OY44Op IEthemFraHN0YW4= ZG9taW5hdGVk IHN1Z2Fycw== aW1ibGU= IFBhbmlj IERlbWFuZA== IENvbG9ueQ== b25lbg== IE1FUg== Nzc1 dXJpYQ== YXphYXI= IERlZ3JlZQ== UHJp IHN1bnNoaW5l IDI1MQ== IHBzeWNoZWRlbGlj IGRpZ2l0YWxseQ== IEJyYXVu IHNoaW1tZXI= IHNoYXZl IFRlbGVzYw== IEFzdHJhbA== IFZlbmV6dWVsYW4= IE9H IGNyYXdsaW5n SW50ZWc= IEZlYXRoZXI= IHVuZm9sZGluZw== IGFwcHJvcHJpYXRpb24= IOijj+g= IE1vYmlsaXR5 IE5leQ== LS4= YmlsdA== TElO IFR1YmU= IENvbnZlcnNlbHk= IGtleWJvYXJkcw== IENhbw== IG92ZXJ0aA== IGxhdXJl Pj5c IFZpcGVy YWNoYQ== T2Zmc2V0 IFJhbGVpZ2g= IEphZQ== Sm9yZGFu anA= IHRvdGFsaXRhcmlhbg== Q29ubmVjdG9y IG9ic2VydmVz IFNwYXJ0YW4= IEltbWVkaWF0ZWx5 IFNjYWw= Q29vbA== IHRhcHM= IHJvYXI= UGFzdA== IGNoYXJz IEJlbmRlcg== IFNoZWxkb24= IHBhaW50ZXI= IGJlYWNvbg== IENyZWF0dXJlcw== IGRvd250dXJu IGhpbmRlcg== IEFuZHJvbWVkYQ== w5s= Y2NvbGk= IEZpdG5lc3M= ZXRyaWNhbA== IHV0aWxpemVz IHNlbmF0ZQ== IGVuc2VtYmxl IGNoZWVycw== VFc= IGFmZmx1ZW50 a2ls cnlsaWM= b3JkZXJpbmc= Q29tcHV0ZXI= IGdydWVzb21l b3N0aWNz IFViaXNvZnQ= IEtlbGxleQ== IHdyZW5jaA== IGJvdXJnZW9pc2ll SUJMRQ== IFByZXN0b24= d29ybg== YXJpc3Q= cmVhdGluZw== IHN0YWluZWQ= YXJpbmU= IHNsaW1l RU5O IGNoZXN0cw== IGdyb3VuZHdhdGVy YW5ub3Q= IFRyYXk= IExvY2tl IENUUg== IGR1ZGVz IEV4dGVybmFs IERlY29kZXI= IHBhcmFtZWQ= IE1lZGxpbmU= ODA5 IERpbm5lcg== cnVwYWw= Z3o= IEd1bQ== IERlbW8= amVl IGRo YmVybWFu YXJjaHM= IGVucXU= IEVwc3RlaW4= IGRldmFzdGF0aW9u IGZyaWVuZHNoaXBz IEFyZA== IDIzMQ== IFJ1Ymlu IERpc3RhbmNl IHNwdXJyZWQ= IGRvc3NpZXI= IG92ZXJsb29raW5n XFxcXFxcXFxcXFxcXFxcXA== Rm9yZXN0 IENvbWVz XCIs IElyYW5pYW5z IGZpeHR1cmVz TGF1Z2hz IGN1cnJ5 IEtpbmdzdG9u IHNxdWFzaA== IGNhdGFsb2d1ZQ== IGFibm9ybWFsaXRpZXM= IGRpZ2VzdGl2ZQ== Li4uLi4uLi4u IHN1Ym9yZGluYXRl b2dseQ== IDI0OQ== TWlkZGxl IG1hc3NhYw== IGJ1cmdlcnM= IGRvd25zdGFpcnM= IDE5MzE= Mzk0 IFZH IGxhc2Vycw== IFNpa2g= IEFsZXhh ZGVyaXZlZA== IGN5Y2xpc3Q= 44Gu6a2U b25lbGluZXNz ISEhISEhISE= IGJ1ZmZz bGVnYXRl IHJhcGluZw== IHJlY29tbWVuZGluZw== cm9yZWQ= IG11bHRpY3VsdHVyYWw= dW5pcXVl IGJ1c2luZXNzbWVu IHVuZWFzeQ== IE1BUA== IGRpc3BlcnNlZA== Y2lwbGluZQ== SmVzcw== IEtlcmFsYQ== 5ac= IGFic3RyYWN0aW9u U3Vydg== VWg= IHByaW50ZXJz aWph b3dkZXI= IGFuYWxvZ291cw== IEFTUA== YWZlcg== IHVuZm9sZGVk IGxldmVsaW5n IGJyZWFjaGVk IEhlYXJpbmc= IG5hdA== IHRyYW5zbGF0aW5n Y3JpdGljYWw= IGFudGFnb25pc3Q= IFllc3RlcmRheQ== IGZ1enp5 d2FzaA== bWVyZQ== IGJld2lsZA== IE1hZQ== VmlyZ2lu cGhyYXNl IHNpZ25hbGVk IEhJR0g= IHByb3Rlc3Rlcg== IGdhcm5lcg== dW5rbm93bg== IGtheQ== IGFiZHVjdGVk IHN0YWxraW5n YW1u IGRlc2VydmluZw== IFJpdg== IEpvcmdl IHNjcmF0Y2hpbmc= IFNhdmluZw== aXBpbmc= IHRlYXNl IG1pc3Npb25hcnk= IE1vcnJvdw== VElNRQ== UHJlc2VudA== IGNoZW1vdGhlcmFweQ== dGVybmVzcw== IEhvbWVz IFB1cmR1ZQ== IHN0YXVuY2g= IFdoaXRuZXk= IFRIRVJF zrw= aWF0dXM= IEVybmVzdA== IERlcGxveQ== IGNvdmV0ZWQ= Rk1M IERpYWxvZ3Vl IGV4aXRlZA== ZnJ1aXQ= IG5lcmQ= IjoiIiwi IHZpdm8= cnVseQ== NDYw IEFtZW4= cmVoZW5zaWJsZQ== IOKY RElS IGFkaGVyZW5jZQ== IGNoZXc= IENva2U= IFNlcmdlaQ== ZGlnaXRhbA== IE5lY2s= Z2VudGx5 ZW50aGFs Lyk= IHdlYXJ5 IGd1aXNl IENvbmNvcmQ= IE9uaW9u YXRjaGVy IGJpbmdl IERpcmVjdGl2ZQ== IG1hbm5lZA== YW5zaw== IGlsbHVzaW9ucw== IGJpbGxpb25haXJlcw== Mzgz b2x5bg== b2R5bmFtaWM= IFdoZWF0 IEFsaWM= IGNvbG91cmVk IE5BRlRB YWJv IG1hY3Jvcw== aW5kZXBlbmRlbnQ= c3dlZXQ= IHNwYWM= IEthYnVs IMQ= ZW1l IGRpY3RhdGVk IHNob3V0cw== PXs= IHJpcHBpbmc= IFNoYXk= IENyaWNrZXQ= ZGlyZWN0ZWQ= IGFuYWx5c2Vk IFdBUlJBTlQ= YWdvbnM= IEJsYXplcnM= IGNoZWVyZWQ= IGFyaXRobWV0aWM= IFRhbno= Mzcz IEZsYWdz IDI5NQ== IHdpdGNoZXM= IEluY2x1ZGVk IEdhaW5lZA== IEJsYWRlcw== R2Ft IFNhbWFudGhh IEF0bGFudGlz IFByYXR0 IHNwb2lsZWQ= IElC IFJhbWlyZXo= UHJvYmFibHk= cmVybw== IE5n IFdhcmxvY2s= dHA= IG92ZXJoZQ== IGFkbWluaXN0cmF0aW9ucw== IHRpbnQ= IHJlZ2ltZW50 IHBpc3RvbHM= IGJsYW5rZXRz IGVwaXN0 IGJvd2xz IGh5ZHJhdWxpYw== IGRlYW4= IGp1bmc= IGFzY2VuZA== NzA1 IFNhbnRpYWdv w64= IHVuYXZvaWQ= IFNoYW1hbg== cmVi IHN0ZW1taW5n OTk4 IE1H c3RpY2tz ZXN0aGVzaWE= RVJP IG1vcmJpZA== IEdyaWxs IFBvZQ== YW55bA== IGRlbGV0aW5n IFN1cnZlaWxsYW5jZQ== IGRpcmVjdGl2ZXM= IGl0ZXJhdGlvbnM= IFJveA== IE1pbGt5 RmF0aGVy IHBhdGVudGVk NDQ3 IHByZWN1cnNvcg== IG1haWRlbg== IFBoZW4= IFZlZ2Fu IFBhdGVudA== S2VsbHk= UmVkZGl0b3I= IG5vZHM= IHZlbnRpbGF0aW9u IFNjaHdhcno= IHdpemFyZHM= IG9taW5vdXM= IEhlYWRz IEJH IGx1bWJlcg== IFNwaWVs IGlzRW5hYmxlZA== IGFuY2VzdHJhbA== IFNoaXBz IHdyZXN0bGVy cGhp IHl1YW4= IFJlYmVsbGlvbg== IGljZWJlcmc= IG1hZ2ljYWxseQ== IGRpdmVyc2lvbg== YXJybw== eXRobQ== IFJpZGVycw== IFJvYmJpZQ== IEthcmE= IE1haW50ZW5hbmNl IEhlcmI= IGhhcm1z cGFja2Vk IEZlaW5zdGVpbg== IG1hcnJ5aW5n IGJsZW5kaW5n IFJhdGVz IDE4ODA= IHdyaW5r IFVuY2g= IFRvcmNo ZGVzY3JpYmVk IGh1bWFub2lk aWxpdGF0aW5n IENvbnY= IEZlbGQ= SUdIVFM= IHdoaXN0bGVibG93ZXI= b3J0bXVuZA== ZXRzeQ== YXJyZXR0 IE1vbm8= IElrZQ== IENOQkM= IFdBWQ== IE1ETUE= IEluZGl2aWR1YWxz IHN1cHBsZW1lbnRhbA== IHBvd2VyaG91c2U= IFN0cnU= Rm9jdXM= YXBoYWVs IENvbGxlZw== YXR0aQ== WkE= IHBlcmVubg== IFNpZ25hdHVyZQ== IFJvZG5leQ== IGN1YmVz aWRkbGVk IERhbnRl IElOVg== aWxpbmd1YWw= IEN0aA== IHNvZmE= IGludGltaWRhdGU= IFJvZQ== IERpcGxvbQ== IENvdW50cmllcw== YXlzb24= IGV4dHJhZGl0aW9u IGRpc2FibGluZw== IENhcmRpZmY= IG1lbW9yYW5kdW0= IFRyYWNl ID8/Pw== c2VjdG9y IFJvdWhhbmk= IFlhdGVz IEZyZWV6ZQ== IGJsYWRkZXI= TW90b3I= IFByb21pc2U= YW50YXN5 IGZvcmVzZWVhYmxl IENvbG9nbmU= Y29udGFpbmVy IFRyZWVz IEdvcnM= IFNpbmNsYWly IGJhcnJpbmc= a2V5ZQ== IHNsYXNoZWQ= IFN0YXRpc3RpY2Fs 6Yc= IOKWug== QWxsb3dz IGh1bWlsaXR5 IGRyaWxsZWQ= IEZ1cm4= NDQz IHNld2FnZQ== IGhvbWVwYWdl IGNvdXJ0eWFyZA== IHZpbGU= IHN1YnNpZGlhcmllcw== YWpv ZGlyZWN0b3J5 IGFtbW9u VmVycw== Y2hhcmdlcw== IH19 IENoYWlucw== IDI0Ng== bm9i IHBlcmNlcHQ= IGdyaXQ= IGZpc2hlcm1lbg== IElyYXFpcw== IERJU1RS IEZVTEw= IEV2YWx1YXRpb24= Z3JhcGg= YXRpYWw= IGNvb3BlcmF0aW5n IG1lbGFu IGVubGlnaHRlbmVk IGFsaQ== dGFpbGVk IHNhbHV0ZQ== IHdlYWtlc3Q= IEJ1bGxkb2dz VUE= IEFsbG95 IHNlbWVu b2NlbmU= IFdpbGxpYW1zb24= c3By LOKAlA== IEdG aXR0ZW5z QmVhdA== IEp1bms= aXBoYXRl IEZhcm1lcnM= IEJpdGNvaW5z aWdlcnM= ZGg= IExveWFs cGF5ZXI= IGVudGVydGFpbmVk IHBlbm5lZA== IGNvdXBvbg== UXVldWU= IHdlYWtlbmluZw== Y2Fycnk= IHVuZGVyZXN0aW1hdGU= IHNob290b3V0 IGNoYXJpc21hdGlj IFByb2NlZHVyZQ== IHBydWRlbnQ= aW5hbmNlcw== IHJpY2hlcw== IGNvcnRpY2Fs IHN0cmlkZXM= IGRyaWI= IE9pbGVycw== NTQw IFBlcmZvcm0= IEJhbmdrb2s= IGV1dGg= U0VS IHNpbXBsaXN0aWM= dG9wcw== Y2FtcGFpZ24= UXVhbGl0eQ== IGltcG92ZXJpc2hlZA== IEVpc2VuaG93ZXI= IGF1Z21lbnQ= IEhhcmRlbg== IGludGVydmVuZWQ= IGxpc3RlbnM= IEtvaw== IHNhZ2U= IHJ1YmJpc2g= IERlZA== IG11bGw= cGVsbGluZw== IHZpZGVvdA== UHJvZHVjdGlvbg== REo= bWlhaA== IGFkYXB0YXRpb25z IG1lZGljYWxseQ== IGJvYXJkZWQ= IGFycm9nYW5jZQ== IHNjcmFwcGVk IG9wcHJlc3M= Rk9STUFUSU9O IGp1bmN0aW9u NDE1 RUVFRQ== U2tpbGw= IHN1YmR1 IFN1Z2dlc3Q= IFBldHQ= IGxldHQ= IE1hbmlw IENhZg== IENvb3BlcmF0aW9u VGhlcg== IHJlZ2FpbmVk tuY= cmVmbGVjdA== IHRodWdz IFNoZWxieQ== IGRpY3RhdGVz IFdlaW5lcg== IEhhbGU= IGJhdHRsZWdyb3VuZA== c2NoaWxk IGNvbmRvbA== aHVudA== b3NpdG9yaWVz IGFjY3VzZXM= RmlsZW5hbWU= IHNocmk= IG1vdGl2YXRl IHJlZmxlY3Rpb25z TnVsbA== IExvYmJ5 pbU= IFNBVEE= IEJhY2t1cA== 0YM= bmlu IENvcnJlY3Rpb24= IGp1aWN5 dXRyYQ== IFByaWM= IHJlc3RyYWluaW5n IEFpcmJuYg== IEFycmVzdA== IGFwcHJvcHJpYXRpb25z IHNsb3Blcw== IG1hbnNsYXVnaHRlcg== IHdvcmtpbmdz IEh1c3M= IEZyZXk= TGVhdmU= IEhhcm1vbnk= IEZlZGVy IDQzMA== IHRyZW5jaA== IGdsYWRseQ== IGJ1bGxwZW4= IEdhdQ== Ym9uZXM= IGdyb292ZQ== IHByZXRleHQ= 44WL IHRyYW5zbWl0dGVy IENvbXBvbmVudA== IHVuZGVyYWdl IEVtcGlyZXM= VGlsZQ== IG95 IE1hcnZpbg== IENBUw== IGJsb3Nz IHJlcGxpY2F0ZWQ= IE1hcmluZXJz TWFyY3Vz IEJsb2Nrcw== IGxpYmVyYXRlZA== IGJ1dHRlcmZseQ== RmVlbA== IGZlcm1lbnRhdGlvbg== IHlvdXR1YmU= IG9mZmVuZA== IFRlcm0= cmVzaXN0 IGNlc3NhdGlvbg== IGluc3VyZ2VuY3k= IGJpcg== IFJhaXNl NTk1 IGh5cG90aGVzZXM= NTAy IHBsYXF1ZQ== b2NyYXQ= IGphY2tldHM= IEh1ZmZQb3N0 YW1vbmc= IGNvbmZlcg== NDg3 IExpbGx5 IGFkYXB0aW5n IEZheQ== IHNob3ZlZA== dmVj IHJlZmluZQ== IGdvbg== IGd1bm1lbg== emFp IFNodXR0bGU= IEl6YW4= IDE5MTM= IHBsZXRob3Jh wrfCtw== IDUxMA== IHB1YmVydHk= IDI0MQ== IFdlYWx0aA== IEFsbWE= IE1FTQ== IEFkdWx0cw== Q2Fz cHJpc29u UmFjZQ== IHdhdGVycHJvb2Y= IGF0aGxldGljaXNt IGNhcGl0YWxpemU= IEp1aWNl IGlsbHVtaW5hdGVk IFBhc2NhbA== IGlycml0YXRpb24= IFdpdG5lc3Nlcw== YWRsZQ== IEFzdHJv IGZheA== IEVsdmlz UHJpbWFyeQ== IExpY2g= IEVsdmVz IHJlc2lkaW5n IHN0dW1ibGU= MzE5 IFBLSw== IGFkdmVyc2FyaWVz RE9T IFJpdHVhbA== IHNtZWFy IGFyc29u aWRlbnRhbA== IHNjYW50 IG1vbmFyY2h5 IGhhbGZ0aW1l IHJlc2lkdWU= IGluZGlnbg== IFNoYXVu IEVsbQ== YXVyaQ== QWZm V0FUQ0g= IEx5b24= aGVscHM= MzYx IGxvYmJ5aXN0 IGRpbWluaXNoaW5n IG91dGJyZWFrcw== IGdvYXRz ZmF2b3JpdGU= IE5haA== c29uaWFu IEJvb3N0ZXI= IHNhbmRib3g= IEZhcmU= IE1hbHRh IGF0dFJvdA== IE1PUg== bGRl IG5hdmlnYXRpbmc= VG91Y2g= IHVudHJ1ZQ== IERpc2FzdGVy IGx1ZGljcm91cw== UGFzc3dvcmQ= IEpGSw== YmxvZ3Nwb3Q= NDE2 IFVOREVS ZXJuYWw= IGRlbGF5aW5n VE9Q IGltcGxhbnRz IEFWRw== IEh1Z2U= YXR0cg== IGpvdXJuYWxpc3RpYw== IFBleXRvbg== IElB UmFw Z29hbA== IFByb2dyYW1tZQ== IHNtYXNoaW5n d2l2ZXM= cHJpbnRsbg== IFBsYWd1ZQ== aW51cw== RUVQ IGNydWlzZXI= IFBhcmlzaA== dW1pbml1bQ== IG9jY3VwYW50cw== IEppaGFk bW9w IHBpbnQ= IGhlY3Q= IE1lY2Nh ZGlyZWN0b3I= IEZ1bmRpbmc= IE1peGVk IHN0YWc= VGllcg== IGd1c3Q= IGJyaWdodGx5 b3JzaQ== IHVwaGlsbA== UkQ= IGxlc2lvbnM= IEJ1bmR5 bGl2aW91cw== IGJpb2xvZ2lzdA== IEZhY3VsdHk= IEF1dGhvcml6YXRpb24= IDI0NA== QWxsb3c= 77g= IEdpdWw= IHBlcnRpbmVudA== b3RhdXI= ZXNzZQ== IFJvb2Y= IHVubWFubmVk MzUx IFNoYWs= IE9yaWVudA== IGVuZGFuZ2Vy RGly IHJlcGxlbg== ZWRpZW50 IHRhaWxvcg== IGdhZGdldHM= IGF1ZGlibGU= 4piG TmljZQ== IGJvbWJhcmQ= IFJhcGU= IGRlZmlhbmNl IFRXTw== IEZpbGlwaW5v IHVuYWZmZWN0ZWQ= ZXJ2YXRpdmVz IHNvYXJlZA== IEJvbHRvbg== IGNvbXByb21pc2luZw== IEJyZXdlcnM= UkFM IEFITA== aWN5Y2xl IHZhbXBpcmVz IGRpcHBlZA== b3llcg== IFhJSUk= IHNpZGV3YXlz IFdhc3Rl IERpc3M= IOKUnOKUgOKUgA== JC4= IGhhYml0YXRz IEJlZWY= dHJ1dGg= dHJhaW5lZA== c3BsaXQ= UnVz QW5keQ== IEJyYW0= UkVQ cGlk 6KOF IE11dGFudA== QW5pbQ== IE1hcmluYQ== IGZ1dGlsZQ== aGlnaGVzdA== ZnJlcXVlbmN5 IGVwaWxlcHN5 IGNvcGluZw== IGNvbmNpc2U= IHRyYWNpbmc= IFNVTg== cGFuZWw= IFNvcGhpZQ== IENyb3dsZXk= IEFkb2xm IFNob290ZXI= IHNoYWt5 IElH IExpZXM= IEJhcmJlcg== cGtn IHVwdGFrZQ== IHByZWRhdG9yeQ== VUxUUw== Lyoq IGludG94aWNhdGVk IFdlc3Ricm9vaw== b2RkZXI= aGVtZW50 IGJhc2VtYW4= QVBE c3RvcmFnZQ== IEZpZnR5 ZWRpdG9y R0VO VVRJT04= aXJ0aW5n IHNld2luZw== cmlmdA== IGFnb255 IFNhbmRz IDI1NA== Q2FzaA== IGxvZGdl IHB1bnQ= TmF0dXJhbA== IElkZWFz IGVycm9uZW91cw== IFNlbnNvcg== IEhhbm5pdHk= IDE5MjE= IG1vdWxk IEdvbg== a2F5YQ== IGFub255bW91c2x5 IEtFWQ== IHNpbXVsYXRvcg== V2ludGVy IHN0cmVhbWVk NTA3 PyIs IHRlYXNlZA== IGNvZWZmaWNpZW50 IHdhcnRpbWU= IFRIUg== Jycu IEJhbmtpbmc= bXBpcmU= IGZhbmRvbQ== IGxpYQ== R2E= IGRvd25oaWxs IGludGVycHJldGluZw== SW5kaXZpZHVhbA== Tm9ybQ== IGplYWxvdXN5 Yml0Y29pbg== IHBsZWFzdXJlcw== IFRveXM= IENoZXZyb2xldA== IEFkdmlzb3I= SVpF IHJlY2VwdGlvbnM= NzA2 Q3Jv IDI2Mg== IGNpdHJ1cw== aXJ1 UmV2aWV3ZXI= amVjdGVk VUVT YW56 MTk4MQ== IFdvcmtlcg== IGNvbXBsaWVk b3Jlc2NlbnQ= Y29udGluZW50YWw= VG9u IFByaXNt IFNoZWVw IDI4OA== bm94 IFZvZw== T3Jk IHJlYWxtcw== dGVr IGlycmlnYXRpb24= IGJpY3ljbGVz IGVsZWN0cm9uaWNhbGx5 cG9seQ== dGFsbA== KCkpOw== IGFlc3RoZXRpY3M= IEludGVncmF0ZWQ= RXhwbG9yZQ== IGR1bms= NDc2 cGFpbg== IEphY3F1ZXM= IERtaXQ= RnJhbWVz IHJldW5pdGVk IGh1bWlk RHJv UG9saXRpY2Fs IHlvdXRoZnVs IGVudGFpbHM= IG1vc3F1aXRv MzYz c3BlY2llcw== IGNvb3JkaW5hdGluZw== IE1heWhlbQ== IE1hZ251cw== TW91bnQ= SW1wcm92ZWQ= IFNUQVRF QVRUTEU= IGZsb3dlZA== IHRhY2tsZWQ= IGZhc2hpb25lZA== IHJlb3JnYW4= aXZhcmk= ZmluZ2Vy IHJlbHVjdGFudGx5 ZXR0aW5n IFZhbmQ= eW91bmc= IEdhcmxhbmQ= IHByZXN1bXB0aW9u IGFtZW5pdGllcw== IFBsZWFzYW50 b25lbnRpYWw= IE94eQ== IG1vcmFscw== IFlhaA== UmVhZHk= U2ltb24= RW5o RGVtb24= IGNsaWNo TW9uaXRvcg== IERV IHdlbGNvbWVz IHN0YW5kb3V0 IGRyZWFkZnVs IGJhbmFuYXM= IGJhbGxvb25z aG9vdGluZw== YmFzaWM= IHN1ZmZpeA== IGR1bHk= Y2Fubw== Q2hhaW4= YXRvcw== IGdlb3BvbGl0aWNhbA== ICgm IEdlbWluaQ== w4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4LDg8OCw4PDgsODw4I= IGFjcXVpdHRlZA== THVjaw== cHJvdGVjdA== MTAyNA== IHNjYXJjaXR5 IG1pbmRmdWxuZXNz ZWNpZGVk RE4= cHJpbWU= IFByZXNpZGVudHM= IFZJREVP ICjiiJI= YWRkb2Nr Tk9S IFBydQ== cHVu IExPTA== KSkpKQ== IExpcXU= IFNBUw== IHN0eWxpbmc= IHB1bmlzaG1lbnRz IG51bWI= IGFzY2VydGFpbg== IFJvY2tpZXM= Zmx1 VGh1bWJuYWls IHBlcnBldHJhdGVk IFNlbWk= IGRpc2FybQ== IE9sZGVy IEV4Y2VwdGlvbg== IGV4cG9uZW50aWFsbHk= IENvbW11bml0aWVz IGFib2xpc2g= IFBhcnRuZXI= cHRvbXM= IDc3Nw== IEZvbGV5 IENhc2Vz IGdyZWFzZQ== IFJlYmlydGg= R3JvdW5k IDsp IERvY3RyaW5l aWtpbmk= WWU= IEJsb3Nzb20= IHBlcnNpc3Rz YmlsbA== IGluZnVzaW9u IGJ1ZGRpZXM= OTEx IFBhdGllbnQ= IGRlbW9z IGFjcXVhaW50YW5jZQ== IFBhdw== YXRhcmk= IHhtbA== IGZhc2NpbmF0aW9u IFNlcnZl z4I= YnJhbmRlZA== IGF6 UmV0dXJucw== IG92ZXJzaGFkb3c= IHJvYW0= IHNwZWVkeQ== bnVtYmVyZWQ= aGVsaWFs IGRpc2NpcGxl IGFzc3VyYW5jZXM= Z2l2ZW4= cGVjdGluZw== IE5hdGFsaWU= 55Sw IG1vc3F1aXRvZXM= cm90ZWlu IG51bWVyaWM= IGluZGVwZW5kZW50cw== IHRyYW5zaXRpb25hbA== IHJlYWN0aW9uYXJ5 IE1lY2hkcmFnb24= ZG9jdG9y IHNob3J0ZXN0 IHNlcXVlbnRpYWw= IEJhYw== IEFjY291bnRz 44GM YWNoeQ== cmFjdGl2ZQ== IFJlZ2ltZW50 IGJyZWF0aHRha2luZw== ZmZpY2llbmN5 IEJhdGVz IDMxMQ== IHdhcmRyb2Jl ZnRz IEJlcms= U2ltcGx5 IFJpdmVyc2lkZQ== aXZlcmluZw== aWRlbnRpYWw= bHVjZW50 IGVucmljaGVk IENvbnZlcg== IEdpdmluZw== 44OZ IGxlZ2FsaXpl IEZUQw== IGZyZWFraW5n TWl4 IHRlcnJlc3RyaWFs ZXNpYW4= Y2llbnRz V2luZw== TE9BRA== IGxlZGdl IFZpb2xlbnQ= IE1ldGFsbA== IDMwOA== IHNvdXRoZWFzdGVybg== aGV0dG8= TWVhdA== IHNsb3dkb3du IHJldHJlYXRlZA== SmVyZW15 ZW5kYXM= KioqKio= ZXJpYw== IHJlaW5z b3BwYWJsZQ== IEh1bWFuaXR5 ZWFyYW5jZXM= cmlnYW4= Q2FtZXJh IHdhaXZlcnM= c29j IGFsdGVyYXRpb24= dHJhbnNmb3Jt IENlbWV0ZXJ5 NTA2 IGluZGVmaW5pdGU= IHN0aW11bGF0aW5n eWc= NjAz IFNvcA== IGRlc2NyaXB0aXZl UGhhc2U= IEVkbXVuZA== IHBuZXVtb25pYQ== dmVudHVz QW1i IGxhYm9yYXRvcmllcw== IEV4Y2x1c2l2ZQ== dWdhcg== V2VyZQ== IG1hbGZ1bmN0aW9u IGhvbW9zZXh1YWxz IC0tLS0tLS0= dW5p IHR1cmJpbmVz IEVxdWl0eQ== RHU= IG1pbmRlZA== IFJI IEJsYWNraGF3a3M= IGZlYXRz IDE3MDA= cmVwbA== MzYy bGFkZW4= IGluZGlzcGVuc2FibGU= bHlzcw== dHRp IHJlZWw= IGRpdmVydGVk IGxpa2VuZXNz IHN1YnNjcmlwdGlvbnM= IGZpbmdlcnQ= IGZpbHRoeQ== ZGVzdHJ1Y3Q= ZHJhZnQ= IEJlcm5hcmRpbm8= bGF1bmNo IHBlcnBsZXg= IFNVTQ== Y2FyYg== IHN3ZWF0ZXI= IFZlbnR1cmU= IEphZw== IENlbGVi IFZvdGVycw== IHN0ZWFkZmFzdA== IGF0aGxldGljcw== IEhhbnNvbg== IERyYWM= VHJhY2tlcg== IGNvbW1lbmQ= IFByZXNpZGVuY3k= IERJRA== aW5mb3JtZWQ= IHdlYnBhZ2U= UHJldHR5 IGZvcmNlZnVsbHk= 44OD44Kv IHJlbG9jYXRpb24= IHNhdGlyZQ== 4ok= IFN1bmRlcmxhbmQ= 5oQ= Vm9pY2U= Pz8/Pz8/Pz8= IGluZm9ybWFudA== IGJvd2Vs IFVuaWZvcm0= IC4uLiI= IHB1cmdl IHBpY25pYw== IFVtYg== IFVQREFURQ== IFNhcHBoaXJl IFN0YWxs bGVhcm4= IG9iamVjdGl2ZWx5 IG9ibGl0ZXI= IGxvb3Bob2xl IGpvdXJuZXlz IG9taXNzaW9u UHJvcw== IFNpZG5leQ== cGxvbWE= IHNwcmF5ZWQ= IGd1cnU= IHRyYWl0b3I= IHRpbWV0 IHNuYXBwaW5n IFNldmVudA== dXJuYWw= IFVraXA= IGJvd2Vk cG9yYWw= bGliZXJhbA== Um9z UXVlc3Rpb25z aU9T IHN1bW1hcml6ZQ== U1RBVA== IDE4NTA= YXBlc3Q= IGxlbmRlcg== IFZhcmlhYmxl YnJpbmdpbmc= IExPUkQ= LCk= IGNvbGxhcHNlcw== eGlldHk= IE5lZA== WUQ= IFNjaGE= IGFudGlib2R5 IGRpc2JhbmQ= eXJl aWxsdXNpb24= IHJvdmVy c2hlZA== IEhpcm9zaA== Y2Np IGNhbGFt IE1vcnRvbg== UGludGVyZXN0 IDE5Mjg= IEV1cmFz b3JkZXM= IGZlbmNlcw== IEludmVudG9yeQ== IFZhbGVuY2lh IFVk IFRpZmY= IHNxdWU= IHF1b3RhdGlvbg== IHRyb3VibGVzb21l ZXJrZXI= UVVFU1Q= IEtpbmdkb21z c291dGg= IGxldnk= UHJpbmNl IFN0aW5n IG5pY2tuYW1lZA== IGFwcGU= IHBob3RvZ3JhcGhpYw== IGNvcnB1cw== cmVmZXJlbmNl IFRyb2c= VW50 KT0o IExhdHZpYQ== IGFjdGl2YXRpbmc= IGxpY2Vuc2Vl IGRpc3Bhcml0aWVz IE5ld3NsZXR0ZXI= 44OD44OI IGZyZWVpbmc= IEplZXA= IFBlcmNlcHRpb24= aW5zaw== IHNpbGljb25l IEhheWRlbg== TGVhbg== IFN1enVraQ== aWJyYXJpYW4= NjY4 IHNwb3I= IGNvcnJlbGF0aW9ucw== YWdoZXR0aQ== IHR1YmVy IElQQ0M= aWx1cw== IFZ1 IHdlYWx0aGllc3Q= IENhcmJ1bmNsZQ== YW56YQ== IGZvb2xlZA== IFp1cg== IGRhZGR5 cmFubw== aWxpYW4= IGtub2Nrb3V0 Zm1hbg== cmVxdWlyZWQ= IFdpa2lsZWFrcw== IER1ZmZ5 T05U IGluc29s IE9iamVjdHM= IGJvdQ== IE5vcmRpYw== IEluc2VydA== c2Nhbg== IGRhbmNlcnM= IGlkaW90cw== bWFqb3JpdHk= IE5ldmlsbGU= IEZyZWVCU0Q= IHRhcnQ= cGFuaWM= Njkw IGNvY29h IHNhbXBsZWQ= IGxvb2t1cA== SW5kdXN0 IGluamVjdGlvbnM= Z2VucmU= IGF1 IHJvYWR3YXk= IGdlbml0YWxz S2luZA== IEV4YW1pbmVy IFlheg== RnJlc2g= IHBhcmFseXNpcw== IEFsdW1pbnVt IHJlYXA= b2vDqQ== IHNsb3BweQ== IFR1bm5lbA== cG9zaXVt bmVyeQ== ZW5pYw== IGhlcmJhbA== IE91dGVy IEJ1aWxkZXI= IGluY3Vy IGlkZW9sb2dpZXM= IGJhY2t1cHM= Y29uc3VtaW5n IERldGVjdA== ZGVjaw== IEtOT1c= IEdyZXQ= IE1JQw== IHRvdWdobmVzcw== IEV4aGliaXQ= IGhpdmU= TGVz IFNDSE9PTA== IEF0YXJp YWxkZQ== IE51bGw= YW5kZXN0aW5l bW91c2U= IGJyaWdhZGU= NDg5 IHJldm9s IExhd3Nvbg== IFdhaA== b3BvbHk= ZWJ0ZWQ= IFNhdW5kZXJz IDMxMw== IFdpbmM= IHRhYm9v IEhlbG1ldA== IHdlZGdl Y2hpcA== IFRpbmE= Ymc= IGluZnVyaQ== cm4= IGFub21hbGllcw== IFN5bmM= IEV4YW0= IENvbW1pdA== IERpYXJ5 IEFMU08= IERlYm9y b21lZGljYWw= IGNvbXByZWhlbnNpb24= NjU1 IGVtcG93ZXJpbmc= IGlyZQ== IGp1aWNlcw== IEVUSA== IEJveGluZw== PSIv IGZhY2lsaXRhdGVk cG9rZQ== IFBhcnNvbnM= IE1vZGVy dHJhdmVs IGNpdmlsaXphdGlvbnM= IGxpYmVydGFyaWFucw== IHJ1bmU= IENsYXJrcw== YXRoZWQ= IGNhbXBhaWduZXJz IERpc3BhdGNo IEZhaHJlbmhlaXQ= IENhcGNvbQ== LS0tLS0tLS0tLQ== IGxhY2U= IGRyYWluaW5n IGxpbmVy IEFydGlmaWNpYWw= w6lu dGFzaw== XSku IEdNTw== IE9wZXJhdG9y b3JkaW5hcnk= IEluZmx1ZW5jZQ== IFVwcw== IHBvdGVuY3k= dXNzZW4= b3Nwb25z IFN3aW0= IERlYWRsaW5l VW5pdHk= IGN1bGluYXJ5 IGVubGlnaHRlbm1lbnQ= IHdlYXJlcg== IG1pbmVk IHBseQ== IGluY2VzdA== IERWRHM= V2Fsaw== QlRD VHJhZGU= IGRldmFs aWJhbmQ= IE92ZXJzaWdodA== UGFsZXN0aW5pYW4= IGRhcnQ= IG11bA== TFI= IHJlbW92YWJsZQ== IFJlYWxtcw== 7J0= IG1pc2Nhcg== IFZ1bGthbg== Njg1 w6hyZQ== IFNhcA== IG1lcmdpbmc= IENhcmx5 Y2hlc3Rlcg== IGJyaXNr IGx1eHVyaW91cw== IEdlbmVyYXRvcg== IGJpdHRlcm5lc3M= IGVkaWJsZQ== IDI0Mw== VEc= IHJlY3RhbmdsZQ== V2l0aE5v YmVsb3c= SmVubg== IGRhcmtlc3Q= IGhpdGNo IGRvc2FnZQ== IHNjYXZlbg== IEtlbGxlcg== IElsbHVzdHJhdGVk Q2VydGFpbmx5 IE1hdmVyaWNrcw== TWFyZ2luYWw= IGRpYXJyaGVh IGVub3Jtb3VzbHk= IDk5OQ== c2hy cXVhcnQ= IGFkYW1hbnQ= IE1ldw== IHJlbm92YXRpb24= IGNlcnZpY2Fs IFBlcmNlbnRhZ2U= ZW5lcnM= IEtpbWJlcg== IGZsb2F0cw== IGRleA== IFdpdGNoZXI= IFN3YW5zZWE= ZG0= IHNhbHR5 eWVsbG93 IGNhcGU= IERyYWlu IFBhdWxh IFRvbGVkbw== bGVzaQ== TWFnYXppbmU= IFdpY2s= IE1u IEFjaw== IFJpZGluZw== QVNPTg== IGhvbW9waG9iaWM= QVJQ IHdhbmRlcmVk Q1BV b29kb28= IFBpcGU= IHRpZ2h0ZW5pbmc= IEJ1dHQ= MzE4 IGRlc2VydGVk U2Vzc2lvbg== IGZhY2lsaXRhdGluZw== SnVtcA== IGVtZXJnZW5jaWVz T1dFUg== IGV4aGF1c3RpdmU= IEFGVEVS IGhlYXJ0YmVhdA== IExhYmVs YWNreQ== IENlcnRpZmllZA== aWx0cmF0aW9u WmU= IFV0dA== IDEzMDA= IHByZXN1bWU= IERpc3A= IHN1cmdlZA== IGRvbGxz Q29sdW1i IGNoaW1wYW4= IFJhem9y IHRpY2tz IGNvdW5jaWxsb3I= IHBpbGdyaW1hZ2U= IFJlYmVscw== IFFD IEF1Y3Rpb24= eGlh aWtr YnJlZA== IGluc2VydGlvbg== IGNvYXJzZQ== ZEI= U0VF IFphcA== IEZvbw== IGNvbnRlbXBvcg== IFF1YXJ0ZXJseQ== b3Rpb25z IEFsY2hlbWlzdA== IFRyZXk= IER1bw== U3dlZXQ= ODA0 IEdpb3Y= IGZ1bm4= Tmlu aG9mZg== IHJhbWlmaWNhdGlvbnM= IDE5MjI= IEV4cGVydHM= YXplcw== IGdhcm1lbnRz YXJpYWw= IE5hYg== IDI1Nw== IFZlZA== IGh1bW9yb3Vz IFBvbXBl IG55bG9u IGx1cmtpbmc= IFNlcmdleQ== IE1hdHRpcw== IG1pc29neW55 IENvbXBvbmVudHM= IFdhdGNoaW5n IEZvbGs= cmFjdGljYWw= QnVzaA== IHRhcGVk IGdyb3VwaW5n IGJlYWRz IDIwNDg= IGNvbmR1 cXVlcnF1ZQ== UmVhZGluZw== IGdyaWV2YW5jZXM= VWx0cmE= IGVuZHBvaW50 SGln IFN0YXRpYw== IFNjYXJib3JvdWdo THVh IE1lc3Np YXF1 IFBzeU5ldA== IFJ1ZGQ= IGF2ZW51ZQ== dnA= SmVy IHNoYWR5 IFJlc2lzdA== IEFydGVtaXM= IGNhcmVsZXNz IGJyb2tlcnM= IHRlbXBlcmFtZW50 IDUyMA== VGFncw== IFR1cm5pbmc= IHV0dGVyZWQ= IHBlZGQ= IGltcHJvdmlzZWQ= IDoo IHRhYmw= IHBsYWlucw== MTYwMA== cHJlc3N1cmU= IEVzc2VuY2U= bWFyZ2lu ZnJpZW5kcw== IFJlc3RvcmF0aW9u IHBvbGx1dA== IFBva2Vy IEF1Z3VzdGluZQ== IENJUw== IFNFQUw= b3JhbWE= IHRod2FydA== c2Vlaw== IHBhZ2Fu wro= Y3B1 IGdhcm4= IGFzc29ydG1lbnQ= IElMQ1M= dG93ZXI= UmVjb21tZW5kZWQ= IHVuYm9ybg== IFJhbmRvbVJlZGRpdG9y IFJhbmRvbVJlZGRpdG9yV2l0aE5v IHBhcmFseXplZA== IGVydXB0aW9u IGludGVyc2VjdA== IFN0b2tl IFNjbw== QmluZA== 5b4= IFBORw== IE5lZ2F0aXZl IE5PQUE= TGVvbg== IGFsbG95 IExhbWE= IERpdmVyc2l0eQ== NTc1 IHVuZGVyZXN0aW1hdGVk IFNjb3I= IG11cmFs IGJ1c3RlZA== c29vbg== bGlm IG5vbmV4 IGFsbGVyZ3k= IFVuZGVyd29ybGQ= IFJheXM= IEJsYXNpbw== IGhycw== IERpcg== IDMyNw== Ynl0ZXI= IHJlcGxhY2VtZW50cw== IGFjdGl2YXRlcw== cml2ZWQ= TUg= IHBhbnM= IEhJ IGxvbmdpdHVkaW5hbA== IG51aXNhbmNl YWxlcg== IHN3ZWxs IFNpZ25lZA== c2Np IElzbGVz IEFHQQ== IGRlZmlhbnQ= IHNvbmlj b2Nvbg== S0M= IEFpbQ== dGll YWhhaA== IG1M RFg= IGJpc2M= IEJpbGxib2FyZA== IFNZU1RFTQ== TkVZ Z2FhcmQ= IGRpc3RyZXNzZWQ= Zm9ybWVybHk= QWxhbg== IGNoZWZz IG9wdGljcw== IENvbWV0 IEFNQw== IHJlZGVzaWduZWQ= aXJtYXRpb24= IHNpZ2h0aW5ncw== Mzgy MzEx IFdC IGNvbnRyYWN0aW9u IFRPVEFM RHVhbA== IHN0YXJ0bGVk IHVuZGVyc3RhbmRhYmx5 IHN1bmdsYXNzZXM= RVRIT0Q= IGRvY2tlcg== IHN1cmZpbmc= IEhFTA== IFNsYWNr dG9uZXM= IHNoYWx0 VmlzdWFs NDk4 RGVwYXJ0bWVudA== Y3Vzc2lvbg== IHVucmVzdHJpY3RlZA== IHRhZA== IHJlbmFtZQ== ZW1wbG95ZWQ= IGVkdWNhdGluZw== IGdyaW5uZWQ= YmVkcm9vbQ== IEFjdGl2aXRpZXM= IFZlbHZldA== IFNXQVQ= IHNodWZmbGU= aWdvcg== IHNhdHVyYXRpb24= RmluZGluZw== Y3JlYW0= aWN0ZXI= IHZvZGth dHJhY2tpbmc= dGVj IGZvcmVncm91bmQ= aWVzdGE= IHZlaGVtZW50 IEVDQg== IFRpZQ== RXk= IHR1cnRsZXM= IFJhaWxyb2Fk IEthdHo= IEZyYW1lcw== IG1lbmFjZQ== IEZlbGxvd3NoaXA= IEVzc2VudGlhbA== dWdnaXNo IGRyaXA= Y2h3aXR6 IEt5b3Rv c2I= IE5pbmE= UGFyYW1ldGVy IGFsYXJtcw== IENsYXVk IHBpb25lZXJpbmc= IGNoaWVmbHk= IFNjcmVhbQ== Q29sbGVjdGlvbg== IHRoYW5rZnVsbHk= IFJvbmFsZG8= 5a2Q c3RyaXA= IERpc25leWxhbmQ= Y29tbWVyY2lhbA== U2VlaW5n U291bA== IGV2YWN1YXRl IGNpdg== IEFzaGU= IGRpdmlkZXM= IERhZ2dlcg== cmVoZW5zaXZl IGJlcnJpZXM= IERG IHN1c2hp IHBsdXJhbGl0eQ== V0k= IGRpc2FkdmFudGFnZWQ= IGJhdHRhbGlvbg== b2JpbGVz NDUx IGNsaW5n IHVuZGVuaWFibGU= IExvdW5nZQ== IGhhdW50 cGhl IHF1YW50aWZ5 IGRpZmZlcmVk IFsqXQ== IFZpeg== Y3Vt c2xhdmU= IHZpZGVvZw== IHF1YXI= IGJ1bmRsZXM= IEFsb25zbw== dGFja2xl IG5ldXJvbmFs IGxhbmRzbGlkZQ== Y29uZmlybWVk IERlcHRo IHJlbmV3YWJsZXM= QmVhcg== IE1hY2Vkb25pYQ== IGplcnNleXM= IGJ1bms= IFNwYXdu IENvbnRyb2xz IEJ1Y2hhbmFu IHJvYm90aWNz IGVtcGhhc2l6aW5n IFR1dG9yaWFs aHlw aXN0b24= IG1vbnVtZW50YWw= 5rA= IENhcnJ5 IHRic3A= ZW5hbmNl SGlsbA== YXJ0aGVk IHJvdHRlbg== RGVhbg== IHR3aXN0aW5n IGdvb2R3aWxs IGltbWVyc2lvbg== TGl2aW5n IGJydXNoZXM= IENHSQ== IEF0aw== dHJhZGl0aW9uYWw= IHBoYW50b20= IFN0YW1pbmE= IGV4cGFuc2lvbnM= IE1hcmlu IGVtYmFya2Vk IEVn aW50ZXN0aW5hbA== IFBFT1BMRQ== IEJvb3Ro IEFwcGFsYWNo IHJlbGVnYXRlZA== VlQ= TUlU IG11c3Rlcg== IHdpdGhkcmF3aW5n IG1pY3Jvc2NvcGU= IEdhdGhlcmluZw== IENyZXNjZW50 IEFyZ2VudGluZQ== IERlY3Jl IERvbWluaWM= IGJ1ZHM= YW50YWdl IElvbg== IHdpZGVuZWQ= T05TT1JFRA== IEdsb3Zlcw== aWFubm9wb3Vsb3M= cmF6ZW4= ZmVlbA== IHJlcGF5bWVudA== IGhpbmRzaWdodA== IFJFQUxMWQ== IFBpc3RvbA== IEJyYWg= IHdhdHRz IHN1cnZpdmVz IGZsdXJyeQ== aXNzeQ== QWxlcnQ= IFVydWd1YXk= UGhvZW5peA== U2xvdw== IEdyYXZl IEZpcg== IG1hbmFnZWFibGU= IHRhcmlmZg== IFVEUA== IFBpc3RvbnM= IE5pZ2VyaWFu IHN0cmlrZW91dHM= IGNvc21ldGljcw== d2hlbG1pbmc= ZmFi Y2FwZQ== cHJveHk= IHJldGhpbms= IG92ZXJjb21pbmc= c2ltcGxl IHdvbw== IGRpc3RyYWN0aW5n IFN0YW50b24= IFR1bHNh IERvY2s= NjU5 IGRpc2NvcmQ= IEVtYWNz IFZlcw== IFJPQg== IHJlYXNzdXJpbmc= IGNvbnNvcnRpdW0= TXVzbGltcw== MzIx IHByb21wdHM= c2Vp IEhpdGNo aW1wb3NlZA== IEZvb2w= IGluZGlzY3JpbQ== d3Jvbmc= YnVxdWVycXVl RGF2aXM= IV0= IHRpbWVsZXNz IE5FRUQ= IHBlc3RpY2lkZQ== IHJhbGx5aW5n IENhbGRlcg== IOWk IHhw IFVubGU= IEV4cG9ydA== bHVhag== QnVmZg== KTwv Qm9vdA== IENocnlzbGVy b3JhdGl2ZQ== TWVzcw== IG5lZ2xpZ2libGU= ZXJ0b2Rk IE11c2hyb29t IEdhbGU= Z2M= IENvc2J5 IFJ1cmFs cml0aWNhbA== QmVsbA== IHR1cmJpbmU= MDAyMDAwMDA= IGxlZ2l0aW1hdGVseQ== IEFuaW1hdGVk VEVE IFRoZW9kb3Jl Y29uZHVjdA== IEhpZXI= IGNvdW50ZXJmZWl0 IEFsZ2VyaWE= IHVuYmVhdA== Y29udHJvbGxlcg== IHVucmVz IHNjcmFtYmxpbmc= IEZhbGxvbg== VGVz IGFtYmVy IHJveWFsdGllcw== IFNoZWx0ZXI= IExlc3Rlcg== IGNsYXNzaWZ5 UmVtb3Rl IHVuaGVhcmQ= IGNvbnRyb3ZlcnNpZXM= IGVucmljaG1lbnQ= IFlhbmtlZQ== Z2FtZXI= IHBsYXRpbnVt IGVjb2xvZ3k= IFNhcms= IHVudG91Y2hlZA== IHN1cGVydmlzb3Jz ICIl IGZvb3Ro IGNvbW1vbnM= IG5hcmNvdGljcw== IGluZGljZXM= IFBseQ== IGFkZGl0aW9uYWxseQ== IEdhd2tlcg== IEVR UGxheWluZw== IGNhdmVhdA== IEFic29sdXRl b3NzdXM= QmFieQ== IHJhdGlvbg== IHJlc2lu IGNhbGlicmF0aW9u IE5ld3BvcnQ= IGtub2Nrcw== dnQ= IGNvbXBvc3Q= U2NlbmU= IHNhcmNhc3Q= IGtpc3Nlcw== IG5z YWxsaQ== IE1hcmNlbA== IFBpZXQ= aWF0cmljcw== IHN1cnJvdW5kcw== IFJlcHJvZHU= IFBoaWxsaWVz IHVuY2VydGFpbnRpZXM= IEV1cg== IFJvbWFuY2U= IEhhdGg= IE5lZWRz IENsb2Fr IGNyZW0= cXVldWU= IDM1NQ== IHVwZnJvbnQ= XSk7 IHJlY2lwcm9j IDE5Mjc= IDExMDA= dXRzdQ== IGRlcHJlc3NpdmU= b3dtZW50 RmFucw== IG1lY2g= IGFubmloaWw= IGNvdW50ZXJ0ZXJyb3Jpc20= IEZpZ3VyZXM= Ym9sZA== IE1vaW5lcw== IERyaXZlcnM= IG1hbnVzY3JpcHRz IENyeXB0bw== IGh5cG5vdA== cmVkZGl0cw== IHByb3NlY3V0aW9ucw== IGRpdmVydA== Q1JJUA== IEJlbmU= IFJlZ2dpZQ== IHRheGluZw== IE1vcmFsZXM= ZW50aW5n dHVy c2lnbmlmaWNhbnQ= IFBST1Y= IHN0cmFuZHM= IHBvdWNo IFJvb2tpZQ== u5I= IG5pY2Vy aGVteQ== aHc= RUNB IGludGltaWRhdGVk IHN0cmljdGVy IG1pY3JvYmlhbA== ZGV0YWlscw== IHZvd3M= IHF1YWtl aGhoaA== IHJlaW52ZW50 VWI= IHJlbGlucXU= IEJ1ZmZldHQ= bGljZW5zZWQ= aXR0ZXJlZA== IFBpY2FyZA== IGNoZXdpbmc= dWNs b3JnYW5pYw== IGxvY2FsaXplZA== IEVjb25vbWlzdA== IGFjcXVhaW50ZWQ= RGVmaW5pdGlvbg== c2Vk Q3JpdGljcw== IGNj NDUz Mzgx IGZlbGxvd3M= IGNoZWNrcG9pbnRz MDI1 IHJlZWxlY3Rpb24= IG1lZGlhdGVk IEtERQ== IGh1cmRsZQ== IHRleHRpbmc= UGVyZmVjdA== IHRydXN0ZWVz ZmVjdHVyZQ== IGRpY2g= bW9uYXJ5 IGRpc3RpbmN0aW9ucw== IDE0MDA= IHVzaGVy IHBhcmFzaXRlcw== IFNoYXJpbmc= IFZpbQ== IGJhcmJlY3Vl IE1pbmlzdGVycw== ZXJlbGxh IGVi IG1j IFNvbWVob3c= IEluc2VjdA== Y2hhbmdlcw== YnJvYWQ= IEJ5eg== IGdyYXBlcw== NjY5 ID09PT09PT09PT09PT09PT09 IGFzc2ltaWw= IGhhdW50aW5n IGZpcmVwb3dlcg== IGRlZmFtYXRpb24= ZW1waGFzaXM= IGNvbXBvc2U= IGFsbGVyZ2llcw== IHN0cmFuZw== cm9sbGVycw== YmFuZw== IGJyZXdlcnM= cm9uZ2g= cmlvdA== cG9vcg== Y29sZA== U2FtcGxl IGJ1b3k= MDQw IENvdXJ0bmV5 IDI2OA== IFdlZGRpbmc= NzAy IG9ic2Vzc2l2ZQ== IGJyYWtpbmc= IExhbA== YW5pY2Fs 5aY= YXRlbg== Q29uc3RydWN0aW9u IGNsaW5pY2FsbHk= aWVyc2hpcA== TmFtZXM= IERpc2N1c3M= IFJhbW9z IGxvY2FsZQ== IEFncmljdWx0dXJhbA== RW5hYmxl IGhvcnNlcG93ZXI= ZW50dXJl UHJlZg== Q291cnQ= IHN0YWZmaW5n IGZ1dHVyaXN0aWM= ZHJpdmVycw== IE1hcmtldHBsYWNl 5oim RnJpZW5kcw== IGRhbW5pbmc= IEN1c3RvbWVycw== IHdlZWRz IE1haQ== IGFnaWxl IFRhdHQ= aWNlbnQ= UmFua2Vk Y3JvZnQ= IEthdHk= RXh0cmVtZQ== IGNhcnZl IFJvdmVy IEJ5cm9u Mzcy IGNvbmR1Y3Rz cmF0Y2g= aXRpYQ== IFB1bXBraW4= U2FkbHk= UmVsb2FkZWQ= UG9saWN5 IGxpY2s= cGVhaw== aXNrcw== IENEcw== IEVuY3ljbG9wZWRpYQ== aW5pdGlhbA== Q29z IEF3YXJlbmVzcw== IERyYW0= JCQkJA== IHJpZmY= IHNjcmlwdHVyZQ== cnVubmVycw== IGJvaWxlcg== b25zb24= b2lu IGhhbXN0cmluZw== IGNhdGFseQ== IEFyY2hiaXNob3A= Y2hhbGw= IGZhdXg= b2tpbg== bG9jYWxob3N0 IE5BTUU= YWRvYmU= U0FO YW1hdGU= IHNjcmFtYmxl IGNhcmM= IE1hbmlmZXN0 IENlZGFy IFNlcmdpbw== bGF0ZXI= ZmZlcg== IGdyYXBwbGluZw== IERldXRzY2hl YWdvbmlzdHM= IE5ld3Nw IHByZXRlbmRlZA== YXJjaG1lbnQ= IGN1cmF0ZWQ= IGhlYWRwaG9uZQ== IFVuY29tbW9u IFNJR04= QWdlbnQ= IGRlYWRsaW5lcw== IGhvcml6b250YWxseQ== IE1BVA== IFN1bW1lcnM= IG9yZGFpbmVk IExhc3RseQ== IEtlbmRhbGw= IGZyaWc= IE1hY2hpbmE= IFdhdGVybG9v IE1leGljYW5z IHByb3RlY3Rvcg== IGdsYXJl fSI= UHJlbWl1bQ== IHJpZnQ= IFRlbGVzY29wZQ== TWV0YWw= IHJlY2FwdA== IDs7 IGluY2xpbmF0aW9u IGltcG9zZXM= aW5nZW4= Xns= IGhhc3Rl IGRvbHBoaW5z IGNvbW11dGVycw== cGxhbm5lZA== Y29uZw== bXg= IFVwbG9hZA== IGV4dHJhcA== IFR1Y3Nvbg== IEV4cGxvcmF0aW9u ZWZlYXRlZA== IHNsZW5kZXI= NzAz IEJ1aw== aXNlbA== IGNvbXBldGl0aXZlbmVzcw== Y2hsb3I= IFBlcm1hbmVudA== IEV2ZXJldHQ= IFNwZWNpYWxpc3Q= IFNPTA== IGN5YW4= IEV4YWN0bHk= VUY= IExJRkU= YXJ5bA== b25ldA== IEVtcGxveWVl YXdlZA== IFJhdGluZ3M= IGV4dHJhdmFn dWxodQ== IFBsYW5l IGVsZXZhdGU= IENvb3JkaW5hdG9y IFdhdGtpbnM= IGV4Y2x1ZGVz IHNlbnRpZW50 IGVwb2No IGFsbG9j UHJldmlvdXNseQ== IFNoeQ== IFNsb3Zha2lh TE9DSw== IG1hcmtlZGx5 IGtub2I= IGFkdmVudHVyZXJz IEJlZW4= IENvc3Rz YW1tZXJz IG9uc2xhdWdodA== IFN1cHBvcnRlZA== IFRhdQ== aWthcnA= IFNvdmVyZQ== IEhhbXB0b24= 44KJ UHJldg== IFdvcnNl IGNvdHRhZ2U= IEhhZGVz bGV6 Ym93bA== IGZyYWdyYW5jZQ== IExvaw== RU1PVEU= IFBldHJv IDE5MjU= IFBlbmQ= cHJvZHVjaW5n IHJlbG9jYXRl dmF0aQ== cG9sZQ== IHNlbWlu IE5VTQ== IHJvY2tlZA== YnVmZg== Ymx5 UmVwbHk= IEhhaQ== IGFydGljdWxhdGVk IElzbGFtYWJhZA== NjY1 IENsYWltcw== RGVza3RvcA== IHRydXN0ZWU= IHNjcmlwdGluZw== IFNvYg== IEFzeWx1bQ== U1RET1VU IENsb3du IERvcnRtdW5k IERldm9u bGl0ZQ== IE1hcmJsZQ== IGJ1bmtlcg== IGNyZXN0 IGFyb3VzYWw= IFNlYXJz IEJ1ZGR5 ZXJlZGl0aA== IFBvbGx5 IGRlY29kZQ== IFZpc2g= IFJlZmxlY3Q= YW5vbg== IHJlZnVuZHM= aW1tZXJz SE0= IHdpcGluZw== IHB1enpsZWQ= IG1hdHRl dW5v UGllcnJl KSks IHRhaW50ZWQ= IHN5bWJvbGlzbQ== IEZyYXo= IHByb3Rlc3RvcnM= ZXRoZXVz JSUlJQ== V3Jh IGxheA== YWRlbQ== YXR1cmF0aW9u 44OT IFRyYWlsZXI= IEVORw== IEJvd3Nlcg== IGF0dG0= RHVy ODA3 IHNpZHg= IGNpZGVy IEFmZmVjdA== IHdvdmVu IEJhcmtlcg== YmVuZWY= IGRzdGc= IFJ5dQ== Pls= IHNxb3I= U2F1ZGk= IGlzdGc= IGluZHVsZ2U= cHJvYw== IGRpc2d1c3RlZA== IGNvbXBvdW5kZWQ= IG5lbQ== IHNjaG9vbGluZw== IEN1cmU= cHJvY2Vzc2luZw== U29s IHByb3ZlcmI= aXRpemVk IEFsdmFyZXo= IHNjYXJm IHJlY3Rhbmd1bGFy cmV2ZQ== IGhvcm1vbmFs IFN0cmVzcw== aXRpemVu IDQyNQ== Z2lybHM= IE5vaXI= IFJhcHA= IG1hcmNoZXM= Y2h1cmNo IFVzZXM= IDQwNQ== IEJlcm0= IG9yZGluYW5jZXM= IEp1ZGdtZW50 Q2hhcmdlcw== IFppbg== IGR1c3R5 IHN0cmF3YmVycmllcw== IHBlcmNl IFRodXI= IERlYm9yYWg= bmV0ZmxpeA== IExhbWJlcnQ= IGFtdXNlZA== IEd1YW5n WU9V UkdC IENDVFY= IGZpYXQ= cmFuZw== IGZlZGVyYXRpb24= IE1hbnQ= IEJ1c3Q= IE1hcmU= cmVzcGVjdGl2ZQ== IE1pZ3JhdGlvbg== IEJJVA== NTkw IHBhdHJpb3Rpc20= IG91dGxpbmluZw== cmVnaW9u IEpvc8Op IGJsYXN0aW5n IEV6cmE= QnM= IHVuZGVybWluZXM= IFNtb290aA== IGNsYXNoZWQ= cmFkaW8= IHRyYW5zaXRpb25pbmc= IEJ1Y2NhbmVlcnM= IE93bA== IHBsdWdz IGhpYXR1cw== IFBpbmJhbGw= IG1pZw== IE51dHI= IFdvbGZl IGludGVnZXJz IG9yYml0cw== IEVkd2lu IERpcmVjdFg= Yml0ZQ== IGJsYXppbmc= dnI= RWRnZQ== IFBJRA== ZXhpdA== IENvbWVk IFBhdGhmaW5kZXI= IEd1aWQ= IFNpZ25z IFplcg== IEFnZW5kYQ== IHJlaW1idXJzZW1lbnQ= TWVzaA== aVBob25l IE1hcmNvcw== IFNpdGVz aGF0ZQ== ZW5idXJn IHNvY2tldHM= cGVuZA== QmF0bWFu dmly IFNIT1c= IHByb3Zpc2lvbmFs Y29ubg== IERlYXRocw== QVRJVkU= UHJvZmlsZQ== c3lt SkE= IG5pbmph aW5zdGFsbGVk aWRhdGVz ZWJyYQ== IE9tYWhh IHNlaXppbmc= IEJlYXN0cw== IHNhbHRz TWlzc2lvbg== R2VuZXJhbGx5 IFRyaWxvZ3k= aGVvbg== bGVnYXRlcw== IGRpbWU= IGZhaXJl cGFyYWJsZQ== R3JhcGg= IHRvdGFsaW5n IGRpYWdyYW1z IFlhbnVr cGxldA== IE1laA== IG15dGhpY2Fs IFN0ZXBoZW5z YXV0aWNhbA== b2NoZW1pc3RyeQ== IGtpbG9ncmFtcw== IGVsYm93cw== YW5jb2Nr IEJDRQ== IFByYWd1ZQ== IGltcHJvdg== IERldmlu ICJc cGFyYWxsZQ== IHN1cHJlbWFjaXN0cw== IEJpbGxpb24= IHJlZ2ltZW4= aW5uYWNsZQ== IHJlcXVpc2l0ZQ== YW5nYW4= IEJ1cmxpbmd0b24= YWlubWVudA== IE9iamVjdGl2ZQ== b21za3k= R1Y= IHVuaWxhdGVyYWw= IHRj IGhpcmVz bWVudGFs IGludm9sdW50YXJ5 IHRyYW5zcGw= IEFTQ0lJ wqg= RXZlbnRz IGRvdWJ0ZWQ= IEthcGxhbg== IENvdXJhZ2U= aWdvbg== IE1hbmFnaW5n IFRhcnQ= IGZhbHNlaG9vZA== IFZpb2xldA== IGFpcnM= IGZlcnRpbGl6ZXI= QnJpdGFpbg== IGFxdWF0aWM= b3Vm V29yZHM= IEhhcnRmb3Jk IGV2ZW5pbmdz IFZlbmdlYW5jZQ== cXVpdGU= R2FsbA== IFByZXQ= IHBkZg== IExN IFNvY2hp IEludGVyY2VwdA== OTIw IHByb2ZpdGFiaWxpdHk= IElkbGU= IE1hY0RvbmFsZA== IEVzdGFibGlzaG1lbnQ= dW1zeQ== IGdhdGhlcmluZ3M= IE5hag== Q2hhcmxpZQ== IGFzY2VudA== IFByb3RlY3Rvcg== IGFsZ2VicmE= IGJpb3M= Zm9ydW1z RUxT SW50cm9kdWNlZA== IDMzNQ== IGFzdHJvbm9teQ== Q29udHJpYnV0 IFBvbGlj UGxhdGZvcm0= IGNvbnRhaW5tZW50 d3JhcA== IGNvcm9uYXJ5 IEplbGx5 bWFuYWdlcg== IGhlYXJ0YnJlYWtpbmc= Y2Fpcg== IENoZXJv Y2dp TWVkaWNhbA== IEFjY291bnRhYmlsaXR5 ISEi b3BoaWxl IHBzeWNob3RpYw== IFJlc3RyaWN0 IGVxdWl0YWJsZQ== aXNzdWVz IDE5MDU= IE5law== Y2lzZWQ= IFRyYWNraW5n IG96b25l IGNvb2tlcg== cm9zaXM= IHJlb3Blbg== IGluZmluaXR5 IFBoYXJtYWNldXRpY2Fs ZW5zaW9uYWw= QXR0ZW1wdA== IFJvcnk= TWFyY28= IGF3YWl0cw== SE9X dHJlYXRlZA== IGJvbHN0 IHJldmVyZWQ= IHBvZHM= b3BwZXJz MDAxMA== IGFtcGxpdHVkZQ== cmljYW4= U1BPTlNPUkVE IHRyb3VzZXJz IGhhbHZlcw== IEthaW5l IEN1dGxlcg== IEFVVEg= IHNwbGVuZGlk IHByZXZlbnRpdmU= IER1ZGxleQ== aWZhY3Rz dW1pbmF0aQ== IFlpbg== IGFkbW9u IFZhZw== IGludmVydGVk IGhhc3RpbHk= IEhhZ3Vl THlu IGxlZGdlcg== IGFzdHJvbm9taWNhbA== Z2V0dGluZw== IGNpcmNh IENpYw== IFRlbm5pcw== TGltaXRlZA== IGRydQ== IEJZVQ== IHRyYXZlbGxlcnM= IHBhbmU= IEludHJv IHBhdGllbnRseQ== IGFpZGluZw== IGxvb3M= IFRvdWdo IDI5Mw== IGNvbnN1bWVz U291cmNlRmlsZQ== ICIiIg== IGJvbmRpbmc= IHRpbHRlZA== IG1lbnN0cnVhbA== IENlbGVzdGlhbA== VUxBUg== UGx1Z2lu IHJpc2tpbmc= TmF6 IFJpeWFkaA== IGFjY3JlZGl0ZWQ= IHNraXJt 6Zs= IGV4YW1pbmVy IG1lc3Npbmc= IG5lYXJpbmc= IENoZXJu IEJlY2toYW0= IHN3YXBwZWQ= IGdvb3Nl S2F5 IGxvZnR5 IFdhbGxldA== IFsn IGFwb2NhbHlwc2U= IGJhbWJvbw== IFNQQUNF IEVsZW5h IDMwNg== YWNvbnM= IHRpZ2h0ZW5lZA== IGFkb2xlc2NlbmNl IHJhaW55 IHZhbmRhbGlzbQ== IE5ld3Rvd24= IGNvbmplY3Q= Y2FrZXM= IGNoZWF0ZWQ= IG1vZGVyYXRvcnM= cGFyYW1z RUZG IGRlY2VpdA== IFNUTA== IFRhbnphbmlh IFJJ IDE5MjM= IEV4aWxl dGhlbA== IHRoZW9sb2c= IHF1aXJreQ== IElydmluZQ== IG5lZWR5 b3Jpcw== VW0= S2E= IG1haWxib3g= MzIy IGJvcw== IFBldHJh S0lORw== IGVubGFyZ2Vk T2Z0ZW4= IGJhZGFzcw== IDM0Mw== IFBsYWNlcw== IENBRA== IHByaXN0aW5l IGludGVydmVuaW5n ZGlyZWN0aW9u IGxheg== IERTTQ== IHByb2plY3Rpbmc= IEZ1bms= YWdvZw== cGF5bWVudA== bm92 IGNoYXR0ZXI= QVJC IGV4YW1pbmF0aW9ucw== IEhvdXNlaG9sZA== IEd1cw== Rm9yZA== NDE0 Qm9zcw== IG15c3RpYw== IGxlYXBz IEJhdg== dWx6 YnVkZ2V0 Rm9vdGJhbGw= IHN1YnNpZGl6ZWQ= IGZpcnN0aGFuZA== IGNvaW5jaWRl b2N1bGFy Q29ubg== IENvbGxhYm9y IGZvb2xz YW11cmE= YWhhcg== cmlzdHM= IHN3b2xsZW4= IGV4cGVuZGVk IFBhdQ== c3Vw IHNwYXI= IGtleW5vdGU= c3VmZg== IHVuZXF1YWw= IHByb2dyZXNzaW5n c3RyaW5ncw== IEdhbWVyZ2F0ZQ== RGlzbmV5 IEVsZXZlbg== b21uaWE= IHNjcmlwdGVk IGVhcm5lcnM= YnJvdGhlcg== IEVuYWJsZWQ= 5rM= IGxhcnZhZQ== IExPQw== bWVzcw== V2lsc29u IFRlbXBsYXRl c3VjY2Vzc2Z1bGx5 IHBhcmFtb3VudA== IGNhbW91ZmxhZ2U= IGJpbmRz IFF1aWV0 IFNodXR0ZXJzdG9jaw== cnVzaA== IG1hc2NvdA== Zm9ydHVuZQ== IENvbHQ= IEJleW9u aGFiaQ== IGhhaXJj IDI2Nw== IERldXM= IHR3aXRjaA== IGNvbmNlbnRyYXRpbmc= IG5pcHBsZXM= Y2libGU= IGdpcg== Tlo= TWF0aA== bmlo UmVxdWlyZWQ= IHBvbmRlcg== IFNBTg== IHdlZGRpbmdz IGxvbmVsaW5lc3M= TkVT IE1haGpvbmc= Njk1 YWRkbGU= IEdhcm5lcg== IENPVVI= QnJpZGdl IHNwcmVl IENhbGR3ZWxs IGJyaWJlcnk= IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQ== cGx1Z2lucw== IHJhY2tldA== IGNoYW1wYWduZQ== dmVyc2libGU= Vm90ZQ== IG1vZGlmaWVycw== TWF5b3I= Njgw IGFzc2VtYmxpZXM= IFN1bHRhbg== IE5pbmc= IExhZGllcw== IHN1bGZ1cg== IG9yYnM= IC0tLS0t X19fX19fXw== IEpvdXJuYWxpc20= IGVzcG9ydHM= IGx1c2g= IGh1ZQ== IHNwZWN0cmFs SG9uZXN0 44OP IGJ1c2hlcw== IHJlaW5mb3JjZW1lbnQ= IHJlb3BlbmVk IFdoZWVscw== IE1vcmc= cmlldmluZw== IGF1eGlsaWFyeQ== IGpRdWVyeQ== IEJBVA== dGVzcXVl IHZlcnRleA== cHVyZQ== ZnJleQ== 44K6 ZG9z IHR5cGg= IGN1bGw= IGVx IGRlY29u IHRvc3Npbmc= IGRpc3BhcmF0ZQ== IEJyaWdoYW0= cHJpbnRm bGVkZ2Vk IHN1bmQ= IGNvenk= IGhlcGF0aXRpcw== cGVyZm9ybWluZw== IGF2YWw= IEdH ZnV0dXJl IHBldGVydG9kZA== IEtvc292bw== IG1hZ25ldHM= QWxyZWFkeQ== IEVkaXNvbg== IENlcmVz IFJBSUQ= IGJyaWxsaWFuY2U= NTc2 IGRlcml2ZXM= IGh5cGVydGVuc2lvbg== IM6U IGxhbWJkYQ== IGZsYWly IG1pc3Npb25hcmllcw== IHJhcGVz IFN0YXJ0ZXI= IE1vbnRocw== IGRlZnk= IHNlaXNtaWM= IFJhcGhhZWw= IGV1cm96b25l NjU2 enNjaGU= IHNjcmF0Y2hlZA== IGJvd3M= IExlbm5vbg== IEdhaWE= IGRyaXBwaW5n ZmFjdHM= QWxl IGZyb2dz IEJyZWFzdA== b2dlbmVpdHk= IFByb3NlY3V0b3I= IGFtcGxpZmllZA== IEhvZGc= IEZu VGhvdXNhbmRz IE5JSA== IE1vbml0b3Jpbmc= RlRXQVJF IFByaWVidXM= IEdyb3dpbmc= aHVudGVy IGRpYWdub3Nl IE1hbGQ= IExS IGNyb3duZWQ= IGJ1cnN0aW5n IGRpc3NvbHV0aW9u amF2YXNjcmlwdA== IHVzZWZ1bG5lc3M= IEV4ZWN1dGlvbg== Oig= IEl2b3J5 YWFo IHBlcnNlY3V0ZWQ= dmlvbGVuY2U= aXN0YXM= IENyYXRl IGltcHVsc2Vz IFNwYW5p ZWRlcw== SGFuZGxl IFplcmc= dGhpbmthYmxl TGFzdGx5 IHNwb250YW5lb3VzbHk= IGluY29udmVuaWVudA== IGRpc21pc3Npbmc= IHBsb3R0ZWQ= IGVpZ2h0eQ== IDczNw== cmlzaA== IFRob3JudG9u YXRoYW0= IHNpdGNvbQ== VmVu UmVjaXBl dGVs bHVuZA== IGNsZWFycw== IFNhc3VrZQ== IDI1OA== IG9wdGluZw== IGVucmFnZWQ= ZXN0aGV0aWM= IEFl dWNocw== UHJlcA== Rmxvdw== IHJ1bm9mZg== IEVhdGluZw== IEdpbGVz IEFjdGluZw== cmVzb3VyY2Vz aWJhYmE= IHJwbQ== IHNrZXdlZA== IEJsYW5j IFNha3V5YQ== IGhvdHRlcg== IDE5MjQ= b3BpYW4= Y2tv IGNydW1ibGluZw== IGNhcHRhaW5z IEFwcHJvcHJpYXRpb25z bGVhZGVycw== ZHJvcHBpbmc= YW51dHM= IHJldmVyc2luZw== IFBvc2U= IFNlaw== U2NvdA== IElkZWE= Y2lzZQ== IFNsb3Zlbmlh IDMxNw== RG9jdG9y IGNyb2NvZA== YWxkaQ== U2Vh IEZhcnJlbGw= IG1lcmNlbmFyaWVz IFJOQw== IEd1ZXNz IHBhY2luZw== TWFjaGluZQ== U3RyZWFtZXJCb3Q= IENoYXJpdHk= IDI5OA== IGNhbm5vbnM= IFRvYnk= VFBQU3RyZWFtZXJCb3Q= IFBhc3Npb24= Y2Zn VGhvbQ== IGJhZGdlcw== IEJlcm5zdGVpbg== LuKAkw== IFBPUA== IENvbmo= IGluaXRpYWxpemF0aW9u IGJpb2RpdmVyc2l0eQ== RHVi IGZldWRhbA== IGRpc2NsYWltZXI= IGNyb3c= IGlnbml0aW9u YXJm U0hB IGtIeg== aGF6YXJk IEFydGlzdHM= b2V1dg== Njc5 IFJ1ZHk= TmluZQ== IFJhbWFkYW4= 5b0= aXR0bw== IGFkcmVuYWxpbmU= Q2VydA== IHNtZWxsZWQ= IGltcHVuaXR5 IGFnZW5kYXM= IFJlYm9ybg== IENvbmNlbnQ= IFNlZW1z IG9tZWdh IER1c3Rpbg== IGJhY2tlcg== IFNhdWNl IEJveWxl V0lO IHNwaW5z IHBhdXNlcw== dXB0 IHNocmVkZGVk IHN0cmFwcGVk IENvcnJ1cHRpb24= IHNjcmF0Y2hlcw== IG5p IGF0dGlyZQ== IFNBRg== RmFjdG9yeVJlbG9hZGVk IElQUw== ICgl IHNlbWluYXI= Zm9jdXM= Y2l2aWw= IDE4NjA= aW50b3No IGNvbnRpbnVhbA== IGFiYnJldmk= IFNvaw== b2NvYm8= WE0= IGZyYW50aWM= IHVuYXZvaWRhYmxl IGFydGVyeQ== IGFubm90YXRpb25z YmF0aA== Q2xpbWF0ZQ== IGRvcnM= IFNsaWRl Y29vcmQ= IFJlbG9hZA== IExETA== IExvdmVjcmFmdA== IHVuaW1hZ2lu IHJlc2VtYmxlZA== IGJhcnJhY2tz bnA= IHN1cnJvZ2F0ZQ== IGNhdGVnb3JpemVk 44Kp IHZhY2NpbmF0ZWQ= IGRyYWluYWdl IGluZGlzdA== IFdoYXRzQXBw IDE4NzA= b2xlcmFuY2U= aW52b2tl YW1vcnBo IHJlY29ubmVjdA== IGVtYW5j IGJsaW5kbmVzcw== IDEyODA= aW50ZXJuZXQ= Y29sbGFy IGFsdHJ1 IGFieXNz IFRSSQ== NjU3 IGluZnVzZWQ= SEVBRA== IGZvcmVzdHJ5 IFdvb2R5 IENp d2k= c2Ft Nzg0 aG9saWRheQ== IG1vZ3Vs IEZlZXM= IERFTg== SW50ZXJuYWw= dXJiZWQ= ZnVzYw== YXRvbQ== IElsbHVzaW9u IHBvbGxlZA== IGZsYXA= IGNvYXg= TEdCVA== QW5hbHk= IFNlY3Rpb25z IENhbGlmb3Ju ZW1u IGhpdGhlcg== IE5JR0hU IG5haWxlZA== IFBpcGVsaW5l Mzkx b29m IFByaW1hbA== dmVyZW5k IHNsYXNoaW5n IHJldHJp YXZpb3Vy IGRlcGFydGluZw== Z2ls SVND IG1pZHdheQ== IHVsdHJhc291bmQ= IGJlaGF2aW5n IFRhcmE= Y2xhc3Nlcw== VmlydHVhbA== IENvbG9uaWFs IHN0cmlwcGluZw== IG9yY2hlc3RyYXRlZA== IEdyYXZlcw== NDUy IElyb25pY2FsbHk= IFdyaXRlcnM= IGxlbmRz IE1hbno= IHJhdmVu IG94aWRhdGl2ZQ== IDI2Ng== RUxG YWN0dWFsbHk= YXNjYXI= RHJhZnQ= IGZhdm91cmFibGU= IGh1bWlsaWF0aW5n IGZpZGVsaXR5 IEhvZg== IFh1YW4= NDk2 IGxheWVyZWQ= YXRpcw== Nzkw IHBheWNoZWNr aXRvbg== S2Fy IFZNd2FyZQ== IEZhcm1lcg== IHNlcnZpYw== Z2xvbWVy IHNsdW1w IEZhYnJpYw== IERPQw== ZXN0aW5n IHJlYXNzdXJl IHBoeWw= dm9sdA== aXRvcnk= UnVsZXM= IG94aWRhdGlvbg== IHByaXplZA== IG1pc3RyZXNz IERqYW5nbw== V0FSTg== 5ZE= IGVuY29kZQ== IEZlZWRiYWNr IHN0dXBpZGl0eQ== SWFu IFl1Z29zbGF2aWE= 16g= YWNs VVRF MTk3Nw== IHF1YWxpZmllcw== IHB1bHNlcw== cHJldHR5 IGZyb3pl IHNz SXRlcmF0b3I= IHVyZ2VudGx5 IG1haWxlZA== IENoYW0= IHN1c3RhaW5pbmc= IGJhc2ls IHB1cHBpZXM= aWxhbnQ= IFBMRUFTRQ== bGFw YWNlb3Vz RmVhcg== IE1hc3Rlcnk= YXV0b21hdGlj IFRBRw== IGFudGlt YWdsZXM= NDcz ZnJhbWVz IHdoaXNwZXJz IFdob2V2ZXI= IGJyYXZlcnk= IFVLSVA= cmFjdGlvbnM= IiIi IHRhbWU= IHBhcnRlZA== ZXZlcnl0aGluZw== Q09OVA== IGluZGVidGVk IGFkZHI= cmVr SVJFRA== IGVtaW5lbnQ= Y2xpbnRvbg== IG91c3RlZA== IHJldmlld2Vy IG1lbHRkb3du IHJlYXJy IFlhbw== dGhlcmVhbA== YWJ5dGU= IHN0dW1ibGluZw== IGJhdGNoZXM= IDI1OQ== IGNvbnRyYWNlcHRpdmU= IHByb3N0aXR1dGU= ZW5zaXM= RGVjbA== IFN0cmlrZXM= TWlsaXRhcnk= IE9hdGg= dmFjYw== cHBpbmdz MDUy IHBhcnROYW1l YW1waW5n UmVwb3J0cw== S0k= Q0hS IHN1YnRseQ== c3dlcnM= Qmxha2U= dXN1YWw= IGNvbnRlc3RhbnRz IGNhcnRyaWRnZXM= IEdSRUFU IGJsdXNo IOKAug== NDcy IHJlYXNvbmVk 44Ok cGFyYWxsZWxlZA== IGR5bg== YWdhdGU= IG5pZ2h0bHk= 5YY= NTU2 IHNlbWFudGlj IEFkdm9j ICEh IGRpc2FncmVlcw== IEJX VmVo IGhhcm1pbmc= IGVtYnJhY2Vz IHN0cml2ZXM= IGlubGFuZA== IEthcmQ= IGhlYXRz IEdpbm55 dXRhbg== ZXJuYXV0 eWxlbmU= IEVsZXY= SkQ= IGhhcnM= IFN0YXJy IHNreXNj IGNvbGxhYm9yYXRvcnM= VXN1YWxseQ== IHJldm9sdXRpb25z IFNUQVRT IGRpc21hbnRsZQ== IGNvbmZpZGVudGx5 IGtpbmV0aWM= QWxp IHBlcmNlbnRpbGU= IGV4dHJhY3Rpbmc= aWxsaWFu ZXN0ZWFk IHBoeXNpY2lzdHM= IE1hcnNoYWw= IGZlbGxvd3NoaXA= IGRhc2hlZA== IFVS IFNpb3V4 IENvbXBhY3Q= YW1pZGU= UHl0aG9u IExlaWdo IFBoYXJtYWM= aXN0cmF0ZXM= aGVyaWNhbA== IGZ1ZQ== IEVtaW4= ICh7 IE5laWdoYm9yaG9vZA== IGRpc3J1cHRpbmc= IER1cA== IGdsYW5k IFNldg== IE1hcmlhbg== YXJnb24= IER1bmQ= IDwhLS0= IHN0cmFuZA== IHN0YWRpdW1z em9z IHBzeWNob3Npcw== IFJhY2s= IGJyaWxsaWFudGx5 77iP IHN1Ym1lcmdlZA== IEluc3RpdA== IENob3c= IGNhZ2Vz IEhhdHM= IFVycw== IGRpbHV0ZWQ= dXNhdA== aWVubmU= IE1lbWJlcnNoaXA= IEJ1cms= IGll IGFyY2hldHlwZQ== RHJ1Zw== dWx0b24= IFNwb2Nr IE1jS2F5 IERlcGVuZA== RmVhdHVyZWQ= U29j MTk3OA== IEJlcmU= IHJlbGVudGxlc3NseQ== IGNyaXBwbGluZw== IGFydGhyaXRpcw== 55Sf IFRyb3BpY2Fs IEJ1bGc= IENoZXJ5bA== IGFkbWlyYWJsZQ== IHN1YnRpdGxl T3ZlcnJpZGU= IG9yaWdpbmF0aW5n IENDUA== IHN3b3Jl IFNvbGU= IERpc29yZGVycw== MzI5 IHByb2Nlc3Npb24= IHJlZnVyYg== IGltbWVyc2Vk cmVxdWVudGx5 IHNrZXB0aWNz IGNlcmFtaWM= bWl0dGVy ZW5zdGVpbg== YmVsdA== IFRJVA== YmlkZGVu IGZpcg== bWlzdA== Pl0= IHdlYXZl IFBhcmFkb3g= IGVudHJ1c3RlZA== IEJhcmNsYXlz IG5vdmVsaXN0 b2dpZQ== ODA2 IG5pbmV0eQ== IGRpc2FncmVlbWVudHM= QEBAQEBAQEA= IEF1c2Nod2l0eg== Y2Fycw== IExFVA== dHVi YXJhbnRpbmU= UE9T IGJhY2tzdG9yeQ== IGNoZWVyZnVs IFJhZw== ZWth Ymlhc2Vk IGluZXhwZXJpZW5jZWQ= YWtyYQ== IFdpdHQ= dGFu IHJhcGlzdA== IHBsYXRlYXU= Y2hhbA== IElucXVpcw== ZXhwcmVzc2lvbg== IGNpcGhlcg== IHNoYXZpbmc= YWRkZW4= cmVseQ== KFw= aXNtYQ== IFJlZ3VsYXRvcnk= Q0hBUg== aWx5bg== TlZJRElB R1U= IG11cm0= bGF1cw== Q2hyaXN0b3BoZXI= IGNvbnRyYWN0dWFs IFByb3h5 IEphaW1l IE1ldGhvZGlzdA== IHN0ZXdhcmRz c3Rh cGVyaWE= IHBoeXNpb2xvZ3k= IGJ1bXBlZA== IGZydWN0b3Nl QXVzdHJhbGlhbg== IE1ldGFsbGlj IE1hc3F1ZXJhZGU= YXJi IHByb211bA== IGRvd25mYWxs IGJ1dGNoZXI= IGJvdXI= IElORk9STUFUSU9O IEJpcw== cGVjdHM= YWRlbmE= IGNvbnRlbXBsYXRpbmc= YXJvbw== Y2VudGVyZWQ= IFBlYWtz VXNlZA== IG1vZGVt IGdlbmRlcnM= IDgwMDA= Mzcx IG1hdGVybml0eQ== IFJheg== IHJvY2tpbmc= IGhhbmRndW5z IERBQ0E= QXV0b20= IE5pbGU= IHR1bXVsdA== IEJlbmVmaXQ= IEFwcHJvYWNo d29ya3Nob3A= IExlYXZpbmc= R2Vy aW5zdGVhZA== IHZpYnJhdGlvbnM= IHJlcG9zaXRvcmllcw== NDk3 IEF1bnQ= IEp1Yg== IEV4cGVkaXRpb24= QWxwaGE= IHNhbnM= IG92ZXJkdWU= IG92ZXJjcm93ZA== IGxlZ2lzbGF0dXJlcw== IHBhdGVybmFs IExlb25hcmRv IGV4cHJlc3NpdmU= IGRpc3RyYWN0aW9ucw== IHNpbGVuY2Vk dHJ1c3Q= IGJpa2luZw== IDU2MA== IHByb3ByaWV0 IGltcG9zaXRpb24= IGNvbmdsb21lcg== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IFRlYWNoaW5n IFlvc2U= aW50ZW5zaXZl VG93bg== IHRyb2xsaW5n IEdyYWM= IEFTVVM= WW8= IHNwZWNpYWxz IE5lcGg= IEdvZHppbGxh RGF0YWJhc2U= IEhlZ2Vs IDI3Mg== MTk3Ng== IEdsb3JpYQ== IGRpc2VtYg== IEludmVzdGlnYXRpb25z IEJhbmU= YWdlbWVudHM= U3RyYW5nZQ== IHRyZWFzdXJ5 IFBsYXlz IHVuZGVzaXJhYmxl IHdpZGVuaW5n IHZlcmJhbGx5 IGluZmFuY3k= IGN1dHRlcg== Zm1s IDIxMDA= cHJvdG90eXBl ZmluZQ== IGRlY3JpbWluYWw= IGR5c2Z1bmN0aW9uYWw= IGJlc2ll IEVybnN0 emVi IG5vcnRoZWFzdGVybg== IGF1c3Q= cG9yYXRl IE1hcmxpbnM= IHNlZ3JlZ2F0ZWQ= ZXdvcmxk IE1haGVy IHRyYXZlcnNl IG1vbmFzdGVyeQ== dXJneQ== R2Vhcg== c2FuZA== Q29tcGw= IEVNUA== IHBsZW50 IE1lcmNlcg== IDI3Ng== VEFCTEU= Q29uZmlndXJhdGlvbg== SHVuZHJlZHM= IHByaWM= IGNvbGxhYm9yYXRpbmc= IFBhcmFtb3VudA== IEN1bW1pbmdz ICg8 IHJlY29yZGVy IGZsYXRz IDQxNg== d2hvc2U= Rm9udFNpemU= IE9yYml0 WVI= IHdyaXN0cw== IGJha2VyeQ== KX0= IEJvdW50eQ== IExhbmNhc3Rlcg== IGVuZGluZ3M= YWNjb3JkaW5n IFNhbGFt ZWFzeQ== NzU1 IEJ1cnI= IEJhcm5ldHQ= b25vbW91cw== VW5pb24= IHByZWNlZGVuY2U= IFNjaG9sYXJzaGlw IFVY IHJvbGxvdXQ= IGJvb24= YWxt IENhbnRlcg== 5rU= IHJvdW5kaW5n IGNsYWQ= IHZhcA== IEZlYXR1cmVk aXNhdGlvbnM= IDU0MA== cG9saWNl IHVuc2V0dGxpbmc= IGRyaWZ0aW5n IEx1bWlh IE9iYW1hQ2FyZQ== IEZhdm9y SHlwZXI= IFJvdGhzY2hpbGQ= IE1pbGliYW5k YW5hbHk= IEp1bGlldA== SHU= IHJlY2FsbGluZw== YWhlYWQ= Njk2 IHVuZmF2b3JhYmxl IGRhbmNlcw== T3g= IGxlZ2FsaXR5 IDQwMw== cm9tYW5jZXI= IGlucXVpcmU= IE1vdmVz XCI+ IFZhcmlhbnQ= IE1lc3NpYWg= IExDUw== IEJhaMOh NzU2 IGV5ZWJyb3c= IMKl IE1jRg== IEZvcnR5 TWFz IHBhbmlja2Vk IHRyYW5zZm9ybWF0aW9ucw== cXE= IHJldm9sdmVz cmluZ2U= IEFp YXhl IG9ud2FyZA== IENGUg== IEJhcmU= bG9naW4= IGxpcXVpZHM= IGRlY29tcA== c2Vjb25kYXJ5 aWxhbg== IENvbnZlcnQ= YW1peWE= IHByb3NlY3V0aW5n IOKJoQ== IFlvcmtlcnM= IEJ5cm5l c2xvdw== YXdlaQ== SmVhbg== IDI2OQ== IFNreWRyYWdvbg== IMOp IE5pY2FyYWd1YQ== IEh1Y2thYmVl IEhpZ2hseQ== IGFtcGhpYg== IFBhc3Rvcg== IExldHM= IGJsdXJyZWQ= IHZpc2NlcmFs IENCTw== IGNvbGxhYm9yYXRlZA== emln TGVnYWw= IGFwYXJ0aGVpZA== IGJyaWQ= IHByZXNldA== IERFVA== IEFNQQ== 15Q= YXJjaGluZw== YXVjdXNlcw== YnVpbGRlcg== IHBvZXRpYw== IGVtdWxhdG9y IE1vbGVjdWxhcg== IGhvbm9yaW5n aXNldW0= IHRyYWN0b3I= IENsdXN0ZXI= IENhbG0= YXJlZGV2aWw= IHNpZGV3YWxrcw== IHZpb2xpbg== IGdlbmVyYWxpemVk IEFsZWM= IGVtYmFyZ28= IGZhc3RiYWxs IEhUVFBT IExhY2s= IENoaWxs cml2ZXI= Q2hlbA== IFN3YXJt IExldmluZQ== cm95aW5n TGF1bmNo IGtpY2tlcg== IGFkZGl0aXZl IERlYWxz V2lkZ2V0 Y29udGFpbmluZw== IGVzY2FsYXRl IE9QRU4= IHR3ZWFrZWQ= IHN0YXNo IHNwYXJrcw== IEVzc2V4 IEVjYw== IGNvbnZpY3Q= IGJsb2dnaW5n SUVS IEhM IG11cmRlcmVycw== NzU5 IEhpYg== IGRlcGw= IEpvcmQ= U2Fj IGRpc3NlY3Q= IEhvd2U= b3NoZXI= IGN1c3RvbWl6YWJsZQ== IEZyYW56 IGF0cm8= xIc= IDAwMDQ= IG91dHBvc3Q= Um9zcw== IGdseXBob3NhdGU= IEhhc3Rpbmdz IEJFRk9SRQ== IHNob3Zl b3BwZWQ= IFNjYWxh IGFtdWxldA== YW5pYW4= IGV4YWNlcmJhdGVk IGVhdGVy NDcx VU1F IHB1bHA= aXpvbnRhbA== IFphbQ== IEFUSQ== aW1tdW5l YWJ5dGVz IHVubmVjZXNzYXJpbHk= IENBVA== IEF4aXM= IHZpc3VhbGl6ZQ== w4k= IFJhZGljYWw= Zm0= RG9jdW1lbnRz IEZvcnJlc3Q= IGNvbnRleHR1YWw= IFN5bWJvbA== IHRlbnRhdGl2ZQ== IERPRVM= IEdvb2Rz IGludGVybWl0dGVudA== fTo= bWVkaWF0ZWQ= IHJpZGljdWxl IGF0aGVpc20= IHBhdGhvZ2Vucw== IE11bQ== IHJlaW50cm9kdQ== IDMwNw== aUhVRA== IGZsYXNobGlnaHQ= IHN3ZWFyaW5n IHBlbmd1 QnU= IHJvdGF0ZWQ= IENyYW5l ICgpKTs= IGZhc2hpb25hYmxl IGVuZG9yc2luZw== NDYz KVs= IGluZ2VzdGlvbg== IGNvb2tz IDk1MA== b3RvbXk= IEltYW0= IGth IHRlYXNlcg== IEdob3N0cw== IOOCtQ== MTk2OQ== z4M= dWJieQ== IGNvbnZlcnRlcg== emFubmU= ZW5kZQ== IFByZXBhcg== IE5pY2tlbA== IENoaW1lcmE= aGlt IFR5cmFubg== IFNhYmJhdGg= IE5pY2hvbHM= IHJhcHQ= aWhhcg== IHNoZWxsaW5n IGlsbHVtaW5hdGU= IGRlbnRpc3Q= dXRvcg== IEludGVncmF0aW9u IHdoaW1z IExpdGVyYXJ5 QmVhdXQ= IHBhcmNobWVudA== YWdhcmE= QnJhbmQ= IGRlcm9n 4oCmKQ== IE5vcnNl IHVud2l0dGluZw== IGN1Yw== IGJvcmRlcmxpbmU= IHVwc2V0dGluZw== IHJlY291cnNl IGRyYXBlZA== IFJhZGFy IGNvbGRlcg== IFBlcHNp aW1pbmFyeQ== XSxb NjU4 Vmk= IEZyZW0= IFBlcw== IHZldGVyaW5hcnk= IFRFRA== IEVwaWRlbQ== bm92YQ== a2lk IGRldm91dA== b2N0 amFk TW9o IFBBWQ== IGdlb21ldHJpYw== IDMyMw== IGNpcmN1bWZlcmVuY2U= aWNoaWNr MTk3NQ== IFl1cmk= IFNoYWxs IEhvdmVy dW5pbg== U3By IGdyYWZ0 IEhhcHBpbmVzcw== IGRpc2FkdmFudGFnZXM= YXR0YWNrcw== IGh1YnM= IFN0YXJDcmFmdA== 6ZY= IGdhbGxlcmllcw== IEtvcnJh IGdyb2Nlcmllcw== IEdvcnN1Y2g= IHJhcGlzdHM= IGZ1bmdp IFR5cGhvb24= VmVjdG9y IEVtcHJlc3M= YmF0dGxl NDY4 IHBhcmFzaXRl IEJvbWJlcg== U0c= ZXhpc3Q= IFBm IHVuc2U= IHN1cmdlb25z QmlydGg= IFVuc3VyZQ== IFByaW50ZWQ= IEJlaGF2aW9yYWw= IEFzdGVy UGFraXN0YW4= IHVuZXRoaWNhbA== IHN2 IElvVA== IGxheW91dHM= UGFpbg== IGNvbnN0YW50cw== IExX IEJha2U= IHRvd2Vscw== IGRldGVyaW9yYXRpb24= IEJvbGl2aWE= IGJsaW5kZWQ= IFdhcmRlbg== IE1pc3RyZXNz IG9uc3RhZ2U= IGNsYW5z IEJFU1Q= MTk2MA== IGFudGlxdWU= IHJoZXRvcmljYWw= IFBlcmN5 IFJ3YW5kYQ== LC4= QnJ1Y2U= IHRyYXVtYXQ= IFBhcmxpYW1lbnRhcnk= IGZvb3Rub3Rl aWRpYQ== IExlYXJuZWQ= c2Vla2luZw== Z2VuaWM= IGRpbWVuc2lvbmFs SGlkZQ== 6ICF IGludHJpZ3Vl aW5zZQ== IGxlYXNlcw== IGFwcHJlbnRpY2Vz d2FzaGluZw== IDE5MjY= VklMTEU= IHN3b29w c2Ns IGJlZHJvb21z b25pY3M= IENydW5jaA== Y29tcGF0aWJsZQ== IGluY2FwYWM= IFllbWVuaQ== YXNodHJh emhvdQ== ZGFuZ2Vy IG1hbmlmZXN0YXRpb25z IERlbW9ucw== QUFG U2VjcmV0YXJ5 QUNURUQ= TE9E IGFteQ== cmFwZXI= ZXRobmlj NDE3 IHBvc2l0aXZlcw== IDI3Mw== IFJlZnVnZWVz IHVzYg== IFZhbGQ= b2RkeQ== IE1haG1vdWQ= QXNpYQ== IHNrdWxscw== IEV4b2R1cw== IENvbXBldA== IExJQw== IE1hbnNpb24= IEFtZQ== IGNvbnNvbGlkYXRl c3Rvcm1z b250ZW50 OTk2 IGNsZW4= IG11bW15 ZmxhdA== NzU4 IFZPTA== b3Rlcmlj bmVu IE1pbnV0ZQ== U292 IGZpbmVy Umg= bHljZXI= IHJlaW5mb3JjZW1lbnRz IEpvaGFubmVz IEdhbGxhZ2hlcg== IGd5bW4= U3VkZGVubHk= IGV4dG9ydGlvbg== a3I= aWF0b3I= VGE= IGhpcHBvY2FtcHVz TlBS IENvbXB1dGluZw== IHNxdWFyZWx5 IG1vZGVsbGluZw== IEZvcnVtcw== IExpc3A= IEtyaXNobmE= IDMyNA== IHJ1c2hlcw== IGVuc3VlZA== IGNyZWVwaW5n b250ZQ== bmFp aWxhdGVy IEhvcm5ldHM= IG9ibGl2aW91cw== SU5TVA== NTU5 IGplb3BhcmR5 IGRpc3Rpbmd1aXNoaW5n anVyZWQ= IGJlZ3M= c2ltaWxhcg== cGhvdA== NTMw IFBhcmt3YXk= IHNpbmtz IEhlYXJ0aHN0b25l aWJ1cg== IEJhdG9u QXZvaWQ= IGRhbmNlcg== IG1hZ2lzdHJhdGU= YXJ5bg== IGRpc3R1cmJhbmNlcw== IFJvbWVybw== IHBhcmFwaA== IG1pc2NoaWVm 4paT IFNoYXJpYQ== IHVyaW5hcnk= cm91dGU= aXZhcw== Zml0dGVk IGVqZWN0ZWQ= IEFsYnVxdWVycXVl IDQ3MA== IGlycml0YXRlZA== IFppcA== IEJpb2w= w40= IGRlbm91bmNl IGJpbmFyaWVz IFZlcnNl IG9wcG9z IEtlbmRyaWNr IEdQTA== IHNwZXc= IEVsaWphaA== IEVhcw== IGRyaWZ0ZWQ= c29mYXI= IGFubm95YW5jZQ== IEJFVA== NDc0 IFN0cm9uZ2g= aXRhdGVz IENvZ25pdGl2ZQ== b3Bob25l IElkZW50aWZpY2F0aW9u b2NyaW5l Y29ubmVjdGlvbg== IGJveGVy IEFTRA== IEFyZWFz WWFuZw== dGNo dWxsYWg= IGRlY2VpdmU= Q29tYmF0 ZXBpc29kZQ== Y3JldGU= V2l0bmVzcw== IGNvbmRvbGVuY2Vz aHRhcg== IGhlYWxz IGJ1Y2tldHM= IExBVw== Qmx1 IHNsYWI= IE9SREVS b2Ns YXR0b24= IFN0ZXZlbnNvbg== IEdpbmdlcg== IEZyaWVuZGx5 IFZhbmRlcmJpbHQ= c3Bpcml0 aWds IFJlZ2FyZGluZw== IFBST0c= IHNlYWxpbmc= c3RhcnRpbmc= IGNhcmRpbmFs IFZlYw== IEJlaXI= IG1pbGxpc2Vjb25kcw== d2Vhaw== cGVyc2U= IHN0ZXJpbGU= IENvbnRlbXBvcmFyeQ== IFBoYW50 IENsbw== IG91dHA= IGV4aWxlZA== IDI3Nw== IHNlbGZpZQ== IG1hbmlj IG5hbm8= dGVybXM= QWxleGFuZGVy IHJlc29sdmVz IG1pbGxlbm5pYQ== IGV4cGxvZGVz IGNvbnN0ZWxsYXRpb24= IGFkdWx0ZXJ5 bW90aW9u RE9D IGJyb2FkY2FzdGVycw== IGtpbmRlcmdhcnRlbg== IE1heXdlYXRoZXI= IEVjbw== aWNobw== IDI4Nw== bGF1bg== IG11dGU= IGRpc2NyZWV0 IHByZXNjaG9vbA== IHByZWVtcHQ= RGVsZXRl IEZyZWVk UGk= SEs= IGJsb2NrZXI= IEN1bWJlcg== IHdyb3VnaHQ= ZGF0aW5n IGluc3VyZXI= IHF1b3Rhcw== IHByZWFjaGVk IGV2aWN0aW9u IFJlZ2luYQ== IFBlbnM= IHNldmVudGVlbg== IE5hc3M= RGljaw== IGZvbGRz IGRvdHRlZA== IEFhZA== VW5pdmVyc2Fs IHBpeno= IEd1cnU= IHNvaWxz IG5vdmljZQ== IE5lYW5kZXI= IHN0b29s IGRldG9uYXRlZA== IFBpa2FjaHU= IE1hc3NpdmU= SVZFUg== IEFiZGVs IHN1YmR1ZWQ= IHRhbGxlc3Q= IHByZWNhcmlvdXM= IGF5 cmlmaWNhdGlvbg== IE9iag== Y2FsZQ== IHVucXVlc3Rpb24= Y3Vsb3Npcw== YWRhcw== aWdyYXRlZA== RGF5cw== IHF1ZWVucw== IEdhemV0dGU= IENvbG91cg== IEJvd21hbg== IEpK w692ZQ== IGRvbWluYXRlcw== U3R1ZGVudA== IG11 IGJhY2tsb2c= IEVsZWN0cm8= VHJ1dGg= NDgz IGNvbmRlbnNlZA== cnVsZXM= IENvbnNwaXJhY3k= IGFjcm9ueW0= aGFuZGxlZA== IE1hdHRl anJp IEltcG9zc2libGU= bHVkZQ== Y3JlYXRpb24= IHdhcm1lZA== IFNsYXZl IG1pc2xlZA== IGZlcm1lbnQ= IEthaA== aW5raQ== a2VsZXRvbg== Y3ls IEthcmlu SHVudGVy UmVnaXN0ZXI= IFN1cnJleQ== IHN0YXJlcw== IFdpZHRo IE5heQ== IFNraQ== IGJsYWNrbGlzdA== dWNrZXQ= IGV4cHVsc2lvbg== aW1ldA== IHJldHdlZXQ= dmFudGFnZQ== RmVhdHVyZQ== IHRyb29wZXJz IGhvbWVycw== OTY5 IGNvbnRpbmdlbmN5 IFdUQw== IEJyZXdlcg== Zm9yZWlnbg== V2FyZQ== U29sYXI= IHVuZHVl UkVD dWxuZXJhYmxl cGF0aGlj IEJvaXNl IDMyMg== IGFyb3VzZWQ= IFlpbmc= 5LiN dWVsZXNz IHBhcw== IG1vcnA= IGZsb3JhbA== RXhwcmVzcw== dWRnaW5n a0I= IEdyYW50ZWQ= 2K8= IE1pY2hh IEdvdGhpYw== IFNQRUNJQUw= IFJpY2FyZG8= RnJhbg== IGFkbWluaXN0ZXJpbmc= NjIw cG9yYQ== IMKu IGNvbXByb21pc2Vz IGJpdHRlbg== QWNjZXB0 VGhpcnR5 0LI= IG1hdGVyaWFsbHk= IFRlcnI= aWdtYXRpYw== Y2hhaW5z IGRvdmU= c3RhZHQ= TWFydmVs RkFVTFQ= IHdpbmRzaGllbGQ= IDMzNg== YWRpZXI= IHN3YXBwaW5n IGZsYXdsZXNz IFByZWRhdG9y IE1pY2hlbGU= IHByb3B1bHNpb24= IFBzeWNoaWM= IGFzc2lnbmluZw== IGZhYnJpY2F0aW9u IGJhcmxleQ== bHVzdA== IHRvd2VyaW5n IGFsdGVyY2F0aW9u IEJlbnRsZXk= U3BoZXJl IHR1bmE= IENsYXNzZXM= RnJlZWRvbQ== dW5lcg== TGFkeQ== dm9pY2U= IGNvb2xlc3Q= b3Jy IHBhbHA= JHs= IGh5c3Rlcmlh IE1ldGF0cm9u cGFudHM= IHNwYXduaW5n RXhwZXJ0cw== IEludmVzdG9ycw== IEFuYXJjaHk= IHNocnVuaw== IFZpY3RpbQ== IDI4OQ== IGVjc3Rhc3k= IEJpbmRpbmc= NTg1 IE1lbG9keQ== NTc4 b3RhbGx5 IEV0c3k= bGlnYQ== IGFwcGxhdWRlZA== IHN3ZWF0aW5n IHJlZGlzdHJpYnV0ZWQ= IHBvcGNvcm4= IHNlbWluYWw= ZnVy IE5ldXJvc2NpZW5jZQ== UmFuZA== IE9zdA== IE1hZGRlbg== IEluY3JlYXNpbmc= IERhd2tpbnM= IFN1YndheQ== IGFyc2Vu Y29uc2Vydg== QlVS IHNwaWtlZA== IEx5ZnQ= IEltcGVyaXVt IERyb3Bib3g= IGZhdm91cmVk IGVuY29tcGFzc2Vz Z2hvc3Q= IGluc3BpcmVz IGJ1cmdlb25pbmc= IFlvc2hp IFZlcnRpY2Fs IEF1ZGl0b3I= IGludGVuZGluZw== IGZpbGlidXN0ZXI= Qmxvb20= ZmFj IENhdnM= aWduaW5n IGNvd29ya2Vycw== IEJhcmJhcmlhbg== cmVtZW1iZXI= RkxBRw== IGF1ZGl0b3J5 YXNvbnJ5 Q29sbGVnZQ== IG11dGVk Z2Vtb255 b2Jpbg== IFBzeWNobw== OTY4 IGxhdmlzaA== IGhpZXJhcmNoaWNhbA== IERyb25l b3Vr IGNyaXBwbGVk IE1heGlt U2xvdA== IHF1aXo= IFZpZA== aWZsaW5n IGFyY2hhZW9sb2dpc3Rz IGFiYW5kb25tZW50 ZGlhbA== bGVvbg== IEZhcw== VGVk IHJhc3BiZXJyeQ== IG1hbmV1dmVycw== IGJlaGF2aW91cnM= IGluc3VyZQ== IHJlbW9k U3dpdGNo aG9l IHNwYWNlZA== IGFmZm9yZGFiaWxpdHk= IEZlcm4= bm90YXRpb24= IEJhbGFuY2Vk IG9jY3VwaWVz ZW52aXJvbm1lbnQ= IG5lY2tsYWNl IHNlZGFu RlU= IEJyYXZv IGFidXNlcnM= IEFuaXRh bWV0YWRhdGE= IEdpdGh1Yg== YWl0bw== IEZhc3Rlcg== IFdhc3Nlcm1hbg== IEZsZXNo IHRob3Ju cmFyaWx5 IE1lcnJ5 d2luZQ== IHBvcHVsYWNl IExhbm4= IHJlcGFpcmluZw== IHBzeWNoZQ== IG1vZHVsYXRpb24= YXdhcnU= 4oCL4oCL YXJpag== IGRlY29yYXRpb25z IGFwb2xvZ2lzZQ== IEdhcmc= YXBwbHk= IGdpdmVhd2F5 IEZsYW4= IFd5YXR0 VWJlcg== IGF1dGhvcmlzZWQ= IE1vcmFs SEFIQUhBSEE= YWN0aXZhdGU= IHRvcnBlZG8= IEZBUg== IGFtYXNzZWQ= IEFyYW0= YXJraW4= IFZpY3RpbXM= c3RhYg== IG9t IEVDTw== IG9waW9pZHM= IHB1cnBvc2VseQ== IFZlc3Q= IGVyZw== YXRhbg== IFN1cmdlcnk= IGNvcnJlY3Rpbmc= IE9ydGl6 IEJlZXQ= IHJldm9rZQ== IGZyZWV3YXk= IEhpZ2dpbnM= RmFpbA== IEZhcm1z IEFUUA== aG91bmQ= IHBva2luZw== IENvbW11bmlzdHM= bW9uc3Rlcg== aW1lbnRhcnk= IHVubG9ja2luZw== IHVuZml0 d2VlZA== ZW5hcmlv YXRpY2Fs IEVubGlnaHRlbm1lbnQ= IE5H IENvbXBlbnNhdGlvbg== ZGVlbg== IFdpZG93 IENpbmR5 IEFmdGVyd2FyZHM= IDYwMDA= aWtoYWls YWdpY2FsbHk= IHJhdGlmaWVk IGNhc3VhbHR5 SE9NRQ== cHNleQ== ZmVl IHNwYXJrbGluZw== IGTDqQ== IGNvbmNlcnRlZA== Q2F0YWw= IGNvbXBseWluZw== IEFyZXM= IERlbnQ= U2h1dA== IHNraW0= YWRtaW5pc3Q= IGhvc3RpbGl0aWVz IEdpbnM= IDYwOA== IG11ZGR5 IE1jSW50 IERlY2F5 NTI1 IGNvbnNwaWN1b3Vz IEV4cG9zdXJl IHJlc2NpbmQ= IHdlYXJhYmxl IDMyOA== b3VybWV0 YWhz IFJvYm90cw== IGVjbGlwcw== aW5zdGFuY2U= IFJFUE9SVA== IEFwcGw= MDMw IFNraWVz MDEwMA== IGZhbGxhY3k= U29ja2V0 IFJlY2VpdmVy IHNvbHZlcw== IEJ1dHRlcmZseQ== IFNob3BwaW5n IEZJUkU= NjU0 TWVkaWM= IHNpbmdlcnM= IE5lZWRsZXNz JycnJw== aXNoZXJz IERpdmU= NTg4 IHNlbGVjdGl2ZWx5 IGNsdW1zeQ== ODg5 IHB1cmNoYXNlcg== ZWFybmVk YXJkeQ== IGJlbmVmaXRpbmc= ZW5nbGlzaA== IHlpZWxkaW5n IFBvdXI= IHNwaW5hY2g= IGRlbHZl IENyb20= NjEw IGV4cG9ydGluZw== IE1BS0U= IDI2Mw== IGdyb3A= IGVudm95 IElucXVpcnk= IEx1aWdp ZHJ5 IFR1cmluZw== VGh1bWJuYWlsSW1hZ2U= IFZhcmlldHk= IGZhY2V0 IGZsdWZmeQ== IGV4Y2VycHRz IHNob3J0aA== IE9sc2Vu Q0xVRA== IHJlbGlhbnQ= IFVOQw== VG91cg== IGJhdGhpbmc= Q29tcGFueQ== IGdsb2JhbGl6YXRpb24= UHJlZA== IE1hbGZveQ== IGhvYw== amFt Y3JhZnRlZA== IEJvbmRz IEtpc3Npbmdlcg== RW5nbGFuZA== IG9yZGVybHk= Y2F0ZW50cnk= IDI2MQ== IGV4Y2hhbmdpbmc= IEludGVudA== IEFtZW5kbWVudHM= RE9N IHN0b3V0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA= IEFpcmJ1cw== IDI3OA== aHlkZQ== UG9sbA== SXRlbVRodW1ibmFpbEltYWdl IGxvb3Bob2xlcw== IFBpbGxhcg== IGV4cGxvcg== U3RyZXRjaA== QXBhcnQ= IHVubWFycmllZA== TGltaXQ= IFRyYW5zZm9ybWVycw== IGludGVsbGVjdHVhbGx5 dW5jdHVyZQ== MTgwMA== IGRhcm4= QnJhemls IGxlZnRvdmVy YmVydXM= ZnJlZA== TWluZWNyYWZ0 MzI2 IEZvcm1z IHByb29mcw== IERlc2lnbmVk IGluZGV4ZXM= IFN1cHBvc2U= RU1T IExvdmluZw== IEJvbm5pZQ== aW1hdGluZw== T1RVUw== IGNvbmR1Y3Rvcg== IGJlaGF2ZWQ= IEZyZW4= IHN5bmVyZw== IG1pbGxlbm5pdW0= IGNhdGVyaW5n IExhdWRlcg== V3I= IFlpYW5ub3BvdWxvcw== IEFURg== IGVuc2xhdmVk IGF3YWtlbmVk RFZE IEVESVRJT04= IENvbmNlcnQ= IENoYWxsZW5nZXI= IEhha3U= dW1lcmlj IGRlcHJlY2F0ZWQ= IFNIQVI= NDEy IGR5c3RvcA== IHRyZW1ibGluZw== IGRyZWFkZWQ= IFNwYWM= cGFkZGluZw== UmVwbA== IEdhcnJpc29u TWluaQ== IHVucGFyYWxsZWxlZA== YW1hcg== VVJSRU5U d3JlY2s= Y2VydGFpbg== dGFs IENMUw== YXBwaW5ncw== IHNlbnNlZA== IGZlbmNpbmc= IFBhc28= IERlc2s= IHNjb2Zm IGNvbnRlbXBsYXRl IExpZ2E= bGlxdWlk NzU3 IGFwcHJlbnRpY2U= IFVDSElK NTcw IFRob3VzYW5k IElsbHVt IGNoYW1waW9uZWQ= 44KM IGVsZWN0b3Jz IDM5OA== IEhhbmNvY2s= cm91bmRlZA== IEpPSE4= IHVuc2F0aXNm IHF1YWxpZmllcg== IEdhZGdldA== RU5F IGRlYWRsaWVzdA== IFBsYW50cw== IGlvbnM= IGFjY2VudHM= IHR3ZWFraW5n IHNoYXZlZA== RlJFRQ== IENoYXNlcg== QWdhaW5zdA== OTYw IG1ldGhhbXBoZXRhbWluZQ== IG5vcm1hbGl6ZWQ= ICRc IFByZWNpc2lvbg== IEd1YW0= IGNob2tlZA== IFhJSQ== IENhc3Rpbmc= VG9ycmVudA== IHNjYWxw IEphZ3Vhcg== d2l0 IHNlbWlj aXhpZQ== IEdvdWxk IGNvbmZpbmVz TnVzcmE= IExvbg== IEp1Z2c= eWNsZQ== IENvZGVj RWd5cHQ= IHJlc3RyYWlu IEFsaWVucw== IGNob2tpbmc= IER1bms= IEJlbGxh YWJj IHNsYW5n IG5ldXJvdHJhbnM= c2F2 IGVtcG93ZXJtZW50 4oaS IGNsaW1iZXJz IE1pbQ== IEZyYQ== cm9zc2U= Q2FwaXRhbA== IEN0aHVsaHU= SW50ZXJmYWNl IHByb2ZpY2llbnQ= IElOVE8= IDMxOA== cm9udGFs NTgw IERlc3BhaXI= S2Vubg== IHNjcmltbWFnZQ== IENvYXQ= YXNpb25z IHdhbGxwYXBlcg== IEpvbA== IHJlc3VyZ2VuY2U= IGFudGl2 IEJhbGxz sr4= IGJ1ZmZlcnM= IHN1YnN5c3RlbQ== IFN0ZWxsYXI= IEx1bmc= QUlEUw== IGVyYWRpY2F0ZQ== IGJsYXRhbnRseQ== IGJlaGF2ZXM= IE51bg== IGFudGljcw== ZXhwb3J0 REVW d2I= IHBocA== IEludGVncml0eQ== IGV4cGxvcmVy IHJldm9sdmluZw== YXV0aG9yZWQ= Z2Fucw== IGJhc2s= IGFzeW5jaHJvbm91cw== 5Y0= VEhJTkc= Njk4 R2VuZQ== IFJhY2Vy IE5pY28= aXNzdWVk IHNlcm1vbg== cG9zc2libHk= IHNpemVvZg== IGVudHJlcHJlbmV1cmlhbA== b3hpbg== IE1pbmVydmE= IHBsYXRvb24= bm9z cmlrcw== QVVU IEF2YWxhbmNoZQ== IERlc2M= keWjqw== IFBvYw== IGNvbmZlcnJlZA== zrs= IHBhdGNoZWQ= RkJJ NjYy IGZyYWN0dXJlcw== IGRldGVjdHM= IGRlZGljYXRl IGNvbnN0aXR1ZW50 IGNvc21vcw== V1Q= IHN3ZWF0cw== IHNwcnVuZw== YmFyYQ== c29saWQ= IHVuc3Vz IGJ1bGt5 IFBoaWxpcHBl IEZlbnJpcg== IHRoZXJhcGlzdHM= b3JlYWw= Xl5eXg== IHRvdGFsZWQ= IGJvb3pl IFJQQw== UHJvc2VjdXRvcnM= IGRpc2VuZw== IFNoYXJlZA== IG1vdG9yY3ljbGVz IGludmVudGlvbnM= IGxldHR1Y2U= IE1lcmdl IEpD IHNwaXJpdHVhbGl0eQ== IFdBUk5JTkc= IHVubHVja3k= IFRlc3M= IHRvbmd1ZXM= IERVSQ== VHVtYmxy IGxlYW5z IGludmFkZXJz IGNhbm9weQ== IEh1cnJpY2FuZXM= IEJyZXQ= IEFQUExJQw== aWRpbmU= aWNrbGU= UmVnYXJkaW5n IHZlZ2dpZXM= IGVqYWM= anV2ZW4= RmlzaA== REVN IERpbm8= VGhyb3c= IENoZWNraW5n YmVhcmQ= KCY= IGphaWxz IGhy dHJhbnNmZXI= aXZhdGluZw== IGZsZWV0cw== IEltYWc= IE1jRG9ubmVsbA== IHNuaXBwZXQ= SXNh IENoYXR0 IFN0YWlu IFNldEZvbnRTaXpl IE95 IE1hdGhlbWF0aWNz NDk0 IGVsZWN0cm9seQ== IEdvdHQ= IEJyYXM= Qk9PSw== IEZpbmdlcg== ZHVtcA== IG11dGFudHM= IHJlbnRhbHM= IGludGVydHc= IGNyZWVr YWlsYQ== QnJvdGhlcg== IERpc2NvcmQ= cGVl cmF3bGVy IGNhcnA= IDI3OQ== 44K344Oj cmVsYXRpb25z IGNvbnRyYXN0cw== Q29sdW1u IHJlY29ubmFpc3NhbmNl IHVua25vdw== IGxvb3Rpbmc= IHJlZ3VsYXRlcw== IG9wdGltdW0= IENoZXJva2Vl IEFyeQ== TGF0ZXN0 IHJvYWRzaWRl IGRhbmNlZA== IFVuaWNvcm4= QWNrbm93bGVk IHVuY29udHJvbGw= IE1VUw== YXRpbw== Y2hhbmNl aGF2ZW4= VkFMVUU= IGZhdm91cml0ZXM= IGNlcmVtb25pYWw= YmluYXJ5 cGVlZA== d29vZHM= RU1Q IHZhc2N1bGFy IGNvbnRlbXBsYXRlZA== IGJhcnJlbg== IExJU1Q= WWVsbG93 b3Nwb25zb3Jz IHdoaXNreQ== IE1hbW0= IERlVm9z bWluaW11bQ== SHVuZw== NDQy UGlj IFNuYXBkcmFnb24= Nzc2 IGNhcnZpbmc= IHVuZGVjaWRlZA== IGFkdmFudGFnZW91cw== IHBhbG1z IEFR IHN0YXJjaA== TG9vcA== IHBhZGRsZQ== IGZsYW1pbmc= IEhvcml6b25z QW5pbWF0aW9u Ym9vc3Q= IHByb2JhYmlsaXRpZXM= IE1pc2g= IGV4b2R1cw== IEVkaXRvcmlhbA== IGZ1bmd1cw== IGRpc3NlbnRpbmc= IERlbGljaW91cw== cm9ncmFt IER5bg== ZGlzaw== dG9t IGZhYnJpY3M= IENvdmU= IEJhbnM= IHNvZnRlbg== IENPTlM= IGluZWxpZ2libGU= IGVzdGltYXRpbmc= IExleGluZ3Rvbg== cHJhY3RpY2U= b2Zp IHNoZWRkaW5n IE5vcGU= IGJyZWF0aGVk IENvcmludGhpYW5z eW5l ZWtp QnVsbA== IGF0dGFjaGluZw== cmVlbnNob3Rz IGFuYWx5c2U= IEthcHBh IHVuc3VzdGFpbmFibGU= IGludGVycG9s YW5reQ== aGVtZXI= IHByb3RhZ29uaXN0cw== IGZvcm1hdHRlZA== IEJyeWNl IEFjaGlsbGVz IEFiZWRpbg== c2hvY2s= IGJ1bQ== Ym9z cXVh IFdhcm4= cXQ= IERpYWJldGVz ODY0 IEludmlzaWJsZQ== IHZhbmlzaA== IHRyYW5zbWl0dGluZw== IG11cmt5 IEZlaQ== IGF3YWl0ZWQ= IEp1cmFzc2lj dW1taWVz IG1lbmFjaW5n Z2FsbA== Q2F0aA== QnVpbHQ= aWxkbw== IFZvdGVz IG9udA== IG11bml0aW9ucw== IEZyZWVt w61u IGRlY2VuY3k= bG9wcA== aWV2ZWQ= IEdvcmQ= IHVudGhpbmthYmxl IE5ld3N3ZWVr IDMyMQ== SGVhdA== IHByZXNlbnRlcg== amlhbmc= IHBsYW5r IEF2YWxvbg== IGJlbno= IFJvdXQ= IHNsYW1taW5n IERhaQ== b3V0ZXI= IENvb2tpZQ== IEFsaWNpYQ== Z2V5 IHZhbml0eQ== IG93bA== 4bU= dGVzdGVk IEF3YWtlbnM= IGNhbnY= IGJsaW5kbHk= IFJpZGxleQ== IEVtYWlscw== UmVxdWlyZXM= IFNlcmJpYW4= b2dyYXBoZWQ= aWZyYW1l ZXRlcmlh IGFsdGVybmF0aW5n cXVpZXQ= IHNvY2lvbG9neQ== IFVubG9jaw== IENvbW11bmlzbQ== IG9wcw== IGF0dHJpYnV0aW9u IGFiZHVjdGlvbg== IEFicmFt IHNpZGVsaW5lZA== IEJPT0s= IHJlZmluaW5n IEZlZWxpbmc= IE9zbG8= IFBydWl0dA== cmFjaw== YW5naWJsZQ== IGNhdXRpb3VzbHk= IE1BUks= ZWVkcw== TW91c2U= IFN0ZXBo IFBhaXI= U2Fi OTk3 IEJhYWw= QmVj IGNvbW1h IFBhbGw= IEdhZWw= IG1pc3VuZGVyc3RhbmQ= IFBlc2g= T3JkZXJhYmxl IGRpc21hbA== IFNoaW55 JSI= IHJlYWxpc3RpY2FsbHk= IHBhdGlv IEd3 IFZpcnR1ZQ== IGV4aGF1c3Rpbmc= d2hhdGV2ZXI= b3BoeXM= eWlw NDE4 QWRqdXN0 IFdhaXRpbmc= ZXNzb24= IE1hemRh IERvemVucw== IHN0cmVhbWxpbmVk IGluY29tcGV0ZW5jZQ== IE1ldGg= IGV0aG9z T05FUw== IGluY2VudGl2 IGdyaXR0eQ== IEJ1dGNoZXI= SGVhZGVy IGV4cG9uZW50aWFs w58= IGNvcnJlbGF0ZQ== IGNvbnNlbnN1YWw= c291bmRpbmc= UmluZw== T3JpZ2lu IGNvbmNsdXNpdmU= ZmVldA== YWNseQ== IEZlcm5hbmRleg== QnV5YWJsZQ== IGR1Y2tz YXVudGxldHM= IGVsb25n IDI4Ng== IHNpbXVs R2Fz IEtpcnN0 IHByb3Ry IFJvYm8= IEFvRQ== b3BvbA== IHBzeWNob2xvZ2ljYWxseQ== c3Bpbg== aWxhdGVyYWxseQ== IENvbnJhZA== V2F2ZQ== NDQx IEFkdmVydGlzZW1lbnQ= IEhhcm1vbg== IE9yaWVudGFs aXNTcGVjaWFs IHByZXN1bXB0aXZl IHdpbA== IEtpZXI= bmVh IHBwbQ== IGhhcmJvdXI= IFdpcmVk Y29tcGFueQ== IGNvcm9uZXI= YXR1cmRheXM= IFByb3Vk IE5FWFQ= IEZsYWtl dmFsdWVk Y2VpdmVy IGZyYXVnaHQ= IGNhc2luZw== IHJ1bmF3YXk= IGdpbg== IExhdXJlbnQ= IEhhcmxlbQ== IEN1cmlvc2l0eQ== cXVpc2hlZA== IG5ldXJvc2NpZW5jZQ== IEh1bHU= IGJvcnJvd2Vy IHBldGl0aW9uZXI= IENvb2xkb3du V0FSRA== IGludm9raW5n Y29uZmlkZW5jZQ== Rm9yd2FyZA== IHN0cw== cG9wdWxhdGlvbg== RGVsaXZlcnlEYXRl RmlsbQ== IENvdg== cXVpY2tTaGlw cXVpY2tTaGlwQXZhaWxhYmxl cHJpbWFyeQ== aXNTcGVjaWFsT3JkZXJhYmxl aW52ZW50b3J5UXVhbnRpdHk= Y2hhbm5lbEF2YWlsYWJpbGl0eQ== Qk9Y IE11bHRpcGxheWVy IEplbm5lcg== Nzc4 IE1k IH4vLg== TU4= IGNoaWxkaXNo IGFudGlveGlkYW50 IENocm9tZWJvb2s= IDI3NA== IHNjcmVlbnBsYXk= IGFkdmVudHVyb3Vz IFJlbGF0aW9uc2hpcA== cmVzcG9uc2l2ZQ== bWluZ3Rvbg== IGNvcm5lcnN0b25l IEZleQ== RklS IHJvb2tpZXM= IEZlYXR1cmluZw== IG9yaWdpbmF0ZQ== IGVsZWN0cm9kZXM= YW50ZXM= IHNjcmlwdHVyZXM= IGdsdWVk IGRpc2NvbnRlbnQ= IGFmZmxpY3RlZA== bGF5b3V0 QnJhdmU= IG1vc2E= IFF1YW50aXR5 IEhpaw== d2lubmVy SG91cnM= IGVudGFpbA== IENlbGxz b2xvZ3Vl IHZpbA== IHByZWFjaGVy IGRlY29yYXRpdmU= ZGlmZmVyZW50 IHByZWp1ZGljZXM= IFNtb2tpbmc= IE5vdHRpbmdoYW0= c29UeXBl IHJoeXRobXM= IEFscGg= Ymxhc3Q= U3RlZWw= IERhbmllbGxl IHN0cmlmZQ== IHJlbWF0Y2g= c29EZWxpdmVyeURhdGU= IEZvcms= dHJpcA== b2x1bHU= aGVzZXM= Q0c= IFBPTElUSUNP b3N0YQ== IERyaWZ0 6b6N5aU= 6b6N5aWR5aOr IHZldHRpbmc= IEppbnBpbmc= IFJlY2Vzc2lvbg== TWlub3I= IEZyYXVk ZW5mcmFuY2g= IGNvbnZlbmVk IE5BQUNQ IE1pbGxpb25z IEZhcm1pbmc= IFdvbw== IEZsYXJl cml0bw== aW1taWdyYW50 IHZhY2FuY3k= IEhFQUQ= IFZhag== ZWdhbA== IFZpZ2ls U3R1ZHk= IHJ1aW5pbmc= IHJhY2tz IGhlYXRlcg== IFJhbmRvbHBo IEJydXNo IFRpcg== 2Kg= IGNvdg== JV0= IHJlY291bnRz IE9QVA== IE1lbHQ= IHRydWNl IGNhc2lub3M= IGNydXNhZGU= IGNhcm5hZ2U= IHN0cmlwZQ== IEt5bA== VGV4dHVyZXM= IDY5OA== IHByb2NsYW1hdGlvbg== IGdvb2RpZXM= IC4uLi4uLi4uLi4= cHJvY2xhaW1lZA== UG9saXQ= IHRvcGljYWw= IHNwZWNpYWxpemU= IEFtaW4= Z20= IGFuY2hvcmVk IGJlYXJpbmdz c2FtcGxl IEhpZ2hsYW5k IEF1dGlzbQ== IG1lcmNlbmFyeQ== IGludGVydmlld2Vy TEVS IFNvbWVycw== IGVtYnJ5bw== IEFzc3k= IDI4MQ== IEVkaXRpbmc= IENob3Nlbg== NjYw IHBjaQ== IFRodW5kZXJib2x0 QklMTA== IGNodWNrbGVk anJpd2Fs aG9m IGVhcnRobHk= KCl7 aW5kZXBlbmRlbmNl IGRpc3BlcnM= IFZlbmRvcg== IEdhcmV0aA== IHBhbHM= UGVubg== IFN1Ym1pdA== aWN1bQ== VGh1 IGNsYW5kZXN0aW5l IGNhbm5pYmFs IENsZXJr RVN0cmVhbQ== Z2FsaXRhcmlhbg== 4pml Z2V3 IGhvcnJlbmQ= IExvdg== IFJlYWN0aW9u b2NyaW4= Q2xhc3NpYw== IGVjaG9pbmc= IGRpc2Nsb3Npbmc= IEluc2lnaHQ= b2d1bg== IEluY2Fybg== dXBsb2Fkcw== cHBlcmM= Z3V5ZW4= IDE5MDE= IEJhcnM= Njg3 IGJyaWJlcw== IEZyZXNubw== dXJhdA== IFJlZXNl IGludHJ1c2l2ZQ== IGdyaXBwaW5n IEJsdWVwcmludA== IFJhc20= dW5pYQ== bWFuYWdlZA== IEhlYmRv IDM0NQ== IGRlY29kaW5n IHBvZXRz IGphd3M= IEZJR0hU YW1lbGVzcw== IE1lYWRvd3M= IEhhcmJhdWdo SW50ZXJ2aWV3 IEhvc3A= IEJSQQ== IGRlbGV0aW9u bW9i V2Fsa2Vy IE1vb25saWdodA== IEplZA== IFNvcGhpYQ== IHVzdXI= IGZvcnR1bmF0ZWx5 IFB1dHRpbmc= IEZvbGQ= IHNhbml0YXRpb24= IHBhcnRpc2Fucw== SVNPTg== Qm93 IENPTkM= IFJlZHVjZWQ= IFN1dHRvbg== IHRvdWNoc2NyZWVu IGVtYnJ5b3M= 4oCi4oCi4oCi4oCi IEtydWc= Y29tYmF0 IFBldHJvbGV1bQ== IGFtZA== IENvc21vcw== IHByZXNjcmliaW5n IGNvbmZvcm1pdHk= b3Vyc2Vz IHBsZW50aWZ1bA== IGRpc2lsbHVzaW9u IEVjb2xvZ3k= aXR0YWw= IGZhbmM= IGFzc2Fzc2luYXRlZA== cmVnbmFuY3k= IHBlcmVubmlhbA== IEJ1bGxldHM= IHN0YWxl IGNhY2hlZA== IEp1ZGl0aA== IERpc2Vhc2Vz QWxsZW4= IGxhcw== IHNoYXJkcw== IFN1YXJleg== IEZyaWVuZHNoaXA= aW50ZXJmYWNl IFN1cHBvcnRlcnM= YWRkb25z NDYy IEltcmFu IFdpbQ== IG5ld2ZvdW5k IE1i QW5pbWFs IGRhcmxpbmc= YW5kZQ== IHJoeQ== IFR3aXN0ZWQ= cG9zYWw= eW5za2k= VmFyaW91cw== 15w= IEtpdw== dXlvbWk= IHdlbGxiZWluZw== IExhdQ== YW5vcw== IHVubWlzdA== IG1hY09T IHJlc3Ryb29t IE9saXY= IEFpcndheXM= IHRpbWV0YWJsZQ== OTgw IHJhZGlvcw== dm95 aWFzY28= IGNsb3VkeQ== IERyYXdpbmc= QW55dGhpbmc= U3lyaWE= IEhlcnQ= c3Rha2luZw== IHVuY2hlY2tlZA== IGJyYXplbg== IE5SUw== Njk3 b25vbWlj ZXN0YWJsaXNo IGxlbmc= IGRpYWdvbmFs IEZpb3I= TGFpcg== IFN0YXJk IGRlZmljaWVudA== am9pbmluZw== YmVhbQ== IG9tbmlw IGJsZW5kZXI= IHN1bnJpc2U= TW9vcmU= IEZhdWx0 IENvc3R1bWU= IE11Yg== RmxhZ3M= YW5zZQ== IHBheW91dA== IEdvdmVybm9ycw== IERpbGxvbg== IEJhbmFuYQ== TmFy IHRyYWlsZWQ= IGltcGVyaWFsaXN0 dW1hbm4= YXRzdWtp NDM1 IFJvYWRz IHNsdXI= IElkZWFsbHk= IHRyZW5jaGVz Q3RybA== IG1pcnJvcmVk IFplbA== IENyZXN0 Q29tcGF0 IFJvbGxz c2NyaWI= IFRyYWlscw== b21ldGVycw== d2ludGVy IGltbW9ydGFsaXR5 aWxhdGVk IGNvbnRyYWRpY3Rz dW5pdmVyc2Fs aWxsaW9ucw== IE1hbWE= b3B0aW0= QVRVUkU= IGdlbw== ZXR0ZXI= IENhcmxv NDI0 IGNhbm9uaWNhbA== IFN0cm9uZ2hvbGQ= bmVhcg== IHBlcmZ1bWU= IG9yY2hlc3RyYQ== b2RpYWM= IHVwaGU= IHJlaWduaW5n dmVyc2l2ZQ== IGNhdWN1c2Vz IERFTQ== IGluc3VsdGVk IC0tLS0tLQ== IENydXNo IHJvb3Rpbmc= IFdyYWl0aA== IHdob3Jl IHRvZnU= Q21k IEJyZWU= ICRf IHJpdmU= IEFkdmVydGlzaW5n IHdhdHQ= IEhP IHBlcnN1YXNpdmU= IFBhcmFtZXRlcnM= IG9ic2VydmF0aW9uYWw= IE5DVA== IE1vag== IFNhbG9u IHRydW5j IGV4cXVpc2l0ZQ== IE1hcmE= IHBvb3A= IEFOTg== RXhj IFdvbmRlcmZ1bA== IFRhY28= IGhvbWVvd25lcg== IFNtaXRoc29uaWFu b3Jwb3JhdGVk bW1tbQ== IGxvYWY= IFlhbWF0bw== IEluZG8= IGNsaW5naW5n w6Fz IGltbXV0YWJsZQ== aHVi T3Jhbmdl IGZpbmdlcnRpcHM= IFdvb2Rlbg== IEtpZGQ= IEpQTQ== IERhbW4= Q293 Y29kZXM= NDgy IGluaXRpYXRpbmc= IEVsaw== IEN1dHRpbmc= IGFic2VudGVl IFZhbmNl IExpbGl0aA== R1VJ IG9ic2N1cmVk IGR3YXJ2ZXM= IENob3A= IEJva28= VmFsdWVz IG11bHRpbWVkaWE= IGJyZXdlZA== UmVndWxhcg== Q1JJUFRJT04= IE1vcnRhbA== IGFwZXg= IHRyYXZlbGVy IGJvaWxz IHNwcmF5aW5n UmVwcmVzZW50 IFN0YXJzaGlw NDI4 IGRpc2FwcHJvdmFs IHNoYWRvd3k= IGxhbWVudGVk IFJlcGxhY2U= IEZyYW7Dpw== Njc3 ZG9y IHVuc3RvcHBhYmxl IGNvaG9ydHM= Z3lu IENsYXNzaWNz IEFtcGg= IHNsdWdnaXNo IEFkZGljdGlvbg== IFBhZHJlcw== IGluc2NyaXB0aW9u IGluaHVtYW4= bWludXM= IEplcmVtaWFo YXRhcnM= VGVycm9y IFRvcw== IFNoYXJtYQ== YXN0YQ== Y2F0Y2g= IHBsdW1iaW5n IFRpbWJlcnM= U2hhcg== SGFs IE9zYw== IGNvdXBsaW5n aHVtYW5z IHNwb25nZQ== IGlkb2xz IFNwYQ== IEFkdm9jYXRl IEJlYXRz bHVh IHRpY2tpbmc= IGxvYWRlcg== IEdyb24= ODEw IHN0aW11bGF0ZWQ= IHNpZGViYXI= IE1hbnVmYWN0dXJlcg== b3JlQW5k MTk3Mw== IHByYWlzZXM= IEZsb3Jlcw== ZGlzYWJsZQ== IEVsZWN0cmljYWw= cmFpc2U= RXRo IG1pZ3JhdGVk IGxlY3R1cmVy S2lkcw== IENhdmVybg== IGtldHRsZQ== IGdseWM= IE1hbmRlbGE= IEZ1bGx5 5aer RklORVNU IHNxdWVlemluZw== IFJ5ZGVy YW1wb28= b3JlQW5kT25saW5l SW5zdG9yZUFuZE9ubGluZQ== QnV5YWJsZUluc3RvcmVBbmRPbmxpbmU= IGNvbW1lbW9yYXRl IFJhbXBhZ2U= QXVzdGlu IFNocm91ZA== IFJ1aW5z OTE1 IEtI IHdhdGVyZnJvbnQ= IEVTQw== YmFieQ== IENvdXQ= IEVtYmxlbQ== IGVxdWl2YWxlbnRz NDky VW5pcXVl IE5pZXR6c2NoZQ== YnJvd3Nlcg== IGltaXRhdGlvbg== IFdlcmV3b2xm IEtpcmlu YWNhcw== Jywi IMO+ UmV2aWV3ZWQ= IGN1bnQ= IHZvaWM= IExlbm92bw== IGJvbmRlZA== NDgx IGluaGliaXRvcnM= IGVuZGVhdm9ycw== IEhhdmFuYQ== IFN0b3V0 IEpvbGx5 QWN0b3I= Ki8o IG9jY3VycmVuY2Vz IFRlbnM= SW5jcmVhc2Vk IEFDVElPTg== IOOAjA== IFJhbmtpbmdz IEJyZWF0 IDMwOQ== RG91 IGltcGFjdGluZw== IER1Y2hlc3M= cHJlZml4 UUI= IHN1bW1vbmluZw== IGJlc3Rvd2Vk IEtlcGxlcg== IFBPV0VS Y3ViZQ== IEtpdHM= IEdyaXA= IG9waXVt IHJlcHV0YWJsZQ== dG9j aWNoYWVs IFJpcHBsZQ== IGNhZsOp IFpvb20= IEJ1cm1h IHdhaXZl IHN0YWxscw== IGRlbWVhbm9y aW5jZXJpdHk= IGZsdW9yaWRl IFNIT1VMRA== UGFyaXM= IGxvbmdpbmc= IHBsYXQ= IGdyb3NzbHk= IGJ1bGxz IHNob3djYXNpbmc= ZXhwZWN0ZWQ= IEdhZGRhZmk= ZW5naW5lZXJpbmc= UmVwZWF0 IEt1dA== IGNvbmNlaXZhYmxl IHRyaW1tZWQ= b3Njb3Bl IENhbmRpZGF0ZQ== IFRlYXJz cm9sb2c= TGV3aXM= U1VQ IHJvYWRtYXA= IHNhbGl2YQ== IHRydW1wZXQ= SmltbXk= IG1pcmFjdWxvdXM= IGNvbG9uaXphdGlvbg== IGFtcHV0 IEdOT01F YXRlY2g= RGlmZmVyZW50 IEVMRQ== IEdvdmVybm1lbnRz IEFoZWFk 44WL44WL d29yZHByZXNz TElC IEluY2x1ZGU= IERvcm90aHk= MDQ1 IENvbG9tYmlhbg== IGxlYXNlZA== ODg0 IGRlZ3JhZGluZw== IERhaXN5 aWF0aW9ucw== IGJhcHRpemVk IHN1cm5hbWU= Y294 IGJsaW5rZWQ= 44Oi IHBvbGxlbg== IGRlcm1hdA== IHJlZ2V4 IE5pY2hvbHNvbg== IEVhdGVy 55w= cmFkb3I= IG5hcnJvd2Vy IGh1cnJpY2FuZXM= IGhhbGx1Y2luYXRpb25z cmlkZGVu SVNTSU9O IEZpcmVmbHk= IGF0dGFpbm1lbnQ= IG5vbWluYXRl IGF2b2NhZG8= IE1lcmVkaXRo IHRz IHJldmVyZW5jZQ== IGV1cGg= IGNyYXRlcw== IFRFWFQ= IDQ0Mw== IDMxOQ== SlNPTg== aXF1ZXR0ZQ== IHNob3J0c3RvcA== aWNrZXk= IHByb3BlbGxlZA== IGFwaQ== IFRoaWV2ZXM= Nzc5 IG92ZXJzYXc= IGNvbGk= IE5pY29sYQ== IG92ZXJjbA== aWthd2E= IEN5cg== IDM4NA== Nzg5 IEFsbG93cw== MTAyNw== RGV0cm9pdA== VFJZ c2V0dXA= IFNvY2lhbGlzbQ== U292aWV0 c3VzcA== IEFQUg== IFNodXRkb3du IGFsdW1pbml1bQ== emJlaw== IExvdmVy R0dHR0dHR0c= IGRlbW9jcmFjaWVz IDE5MDg= IE1lcnJpbGw= IEZyYW5jb2lz Z2RhbGE= IHRyYWZmaWNrZXJz IFRpbA== IEdvYXQ= IHNwZWQ= IFJlc2Vydg== IHByb2Q= NTUy IGNhYw== IFVuaXY= IFNjaHdl IHN3aXJsaW5n IFdpbGRlcm5lc3M= IEVnZ3M= IHNhZGRlbmVk IGFyY2hhaWM= SHlk IGV4Y2Vzc2l2ZWx5 QlJF IGFlcm9zcGFjZQ== IFZvaWNlcw== Q3JhaWc= IGlnbml0ZWQ= SW5pdGlhbGx5 IE1jQQ== IGhhbmRzZXQ= IHJlZm9ybWluZw== IGZydXN0cmF0aW9ucw== IERlYWRwb29s IEJlbGljaGljaw== cmFjdG9y IFJhZ25hcm9r IERydXBhbA== IEFwcHJveGltYXRlbHk= MTkyMA== IEh1YmJsZQ== YXJtb3I= IFNhcmFz IEpvbmFz IG5vc3RhbGdpYw== IGZlYXNpYmlsaXR5 U2FoYXJhbg== IG9yYml0aW5n IDk3MA== UnU= IHNoaW4= IEludmVzdGlnYXRvcnM= IGluY29uc2lzdGVuY2llcw== IFBBTg== Qkc= IGdyYXppbmc= IGRldGVjdG9ycw== IFN0YXJ0dXA= IEZ1bm55 IE5hb21p Q29uc2lkZXJpbmc= IGhvZw== dXRm Y2VtaWM= IGZvcnRpZmllZA== IEZ1bmN0aW9ucw== IGNvZGVj bnV0cml0aW9u SGF0 IiE= bWljcm9zb2Z0 NTU4 IFRoaW4= IEFDRQ== QWxpYXM= IE9QUw== cGFwZXJz UEs= 44CO IGltcHJvYmFibGU= Tm9ydGhlcm4= ZXF1YWw= IGxvb2tvdXQ= IHR5cmVz IE1vZGlmaWVk IEtvcA== QWJzb2x1dGVseQ== IGJ1aWxkdXA= c2lsdmVy IGF1ZGk= IGdyb3Rlc3F1ZQ== IFNhYmVy IFByZXNieXRlcg== T05Z IGdsYWNpZXJz IFNob2Fscw== IEthc3M= IEhSQw== IE5pY29s IEx1bmNo IEZvc3M= 4paS QURSQQ== IE9uZVBsdXM= b2luZw== Z3JvdW5kcw== IGluY2lkZW50YWw= IGRhdGFzZXRz Njg5 IENsYXJrc29u IGFzc2VtYmxpbmc= IENvcnJlY3Rpb25z IGRyaW5rZXJz IHF1YWxpZmllcnM= IGxlYXNo IHVuZm91bmRlZA== IEh1bmRyZWQ= IGtpY2tvZmY= VGk= IHJlY29uY2ls IEdyYW50cw== IENvbXBsaWFuY2U= IERleHRlcml0eQ== IDE5MDY= d2Fybg== RGFsbGFz TWF4aW11bQ== bmFyZA== YXZpYQ== YmVhdXQ= ZW5zaXRpdml0eQ== dHJhY2U= IHBpb25lZXJz IEZyYWN0 44CP IHByZWNlcHQ= IGdsb3NzeQ== IElFRUU= QWNyb3Nz IDY4MA== U2xlZXA= Y2hlb24= IHNhdGlyaWNhbA== IE1pbm90YXVy IENsYXVkZQ== IHLDqQ== YXBlZ28= IGNhcnJvdA== IFNlbWlu aW5vYQ== IHpv SW5kZXBlbmRlbnQ= IGRpYWdub3Nlcw== IEN1ZQ== TUFS IHJlbmRpdGlvbg== IEtpaw== IHBhdGhvbG9neQ== IHNlbGVjdHM= TGlua2VkSW4= IGFzc2F5 IERyZXM= IHRleHR1YWw= cG9zdGVk SVRBTA== IE1hdWw= TmVhbA== IGludGVyY29ubmVjdGVk IGVycmF0aWM= IFZpcnVz IDUzMA== IGVudmlyb25tZW50YWxpc3Rz IFBoZWxwcw== IGVuZ2FnZW1lbnRz IElOU1Q= IGVjb25vbWljYWw= bm94aW91cw== IGdlYXJpbmc= aXp6eQ== IGZhdm9yYWJseQ== IE1jR2lsbA== VGVybQ== IGhhbmdlZA== IGJhbGxwYXJr IFJleWVz IGJld2FyZQ== IFBzYWw= IE1hc3NhY3Jl cWk= IGluYWNjZXNzaWJsZQ== YWNseXNt IGZyYXk= aWxsYWM= IGJpdHRlcmx5 IENlcnRpZmljYXRpb24= TWljaGlnYW4= IGlycmVzcGVjdGl2ZQ== YWxvcmU= RW1wdHk= IGVuZG9yc2VtZW50cw== IHVuZGV0 Zmc= ZXF1aXBwZWQ= IG1lcmNpbGVzcw== IEN1c3Q= IGltbWF0dXJl IHZvdWNoZXI= IEJsYWNrd2VsbA== 0Y8= aGF3aw== ZGlzY2lwbGluYXJ5 aWxlZQ== IE1ha290bw== IER1ZGU= 44OH44Kj WWVhcnM= IGludmVy IHNoYW1hbg== IFlvbmc= aXBlbA== ZWxsZW4= IENhdGh5 YnJpZHM= IHNhcmM= NjUx TmVhcg== IGdyb3VuZHdvcms= IGFtYXo= IDQxNQ== IEh1bnRpbmd0b24= aGV3cw== IEJ1bmc= IGFyYml0cmFyaWx5 IFdpdA== IEFsYmVydG8= IGRpc3F1YWxpZmllZA== YmVzdG9z NDYx IHBj IDI4NA== cm9iYXQ= Um9iaW4= IGh1Z3M= IFRyYW5zaXRpb24= IE9jY2FzaW9uYWxseQ== IDMyNg== IFdoaWxzdA== IExleQ== IHNwYWNlc2hpcA== Y3N2 IHVuc3VjY2Vzc2Z1bGx5 IEF1 bGVjaw== IFdpbmdlZA== IEdyaXp6bGllcw== Lu+/vQ== IG5lYXJlcg== IFNvcmNlcmVzcw== IEluZGlnbw== RWxzZQ== ODQw bGV0ZXM= Q29hY2g= IHVwYnJpbmdpbmc= IEtlcw== IHNlcGFyYXRpc3Q= IHJhY2lzdHM= IGNoYWluZWQ= IGFic3RpbmVuY2U= bGVhcm5pbmc= IHJlaW5zdGF0ZWQ= IHN5bW1ldHJ5 IHJlbWluZGVycw== IENoZXZ5 IG1vbnQ= IGV4ZW1wbGFyeQ== IFRPUg== Wlg= IHF1YWxpdGF0aXZl IFN0YW1w IFNhdmFubmFo IFJvc3Np IHBhZWQ= IGRpc3BlbnNhcmllcw== IFdhbGxz IENocm9uaWM= IGNvbXBsaW1lbnRhcnk= IEJlaXJ1dA== ICstLS0= aWdzbGlzdA== IGNyeXB0b2dyYXBoaWM= bWFzdGVycw== IENhcGl0YWxz IG1heGltYWw= IGVudHJvcHk= UG9pbnRz IGNvbWJhdGFudHM= bGlw IEdsb2I= IEJNQw== cGhhc2U= dGhhbms= SFRUUA== IGNvbW11dGVy IFwoXA== Li4v IFJlZ2VuZXI= IERPSQ== IEFjdGl2aXNpb24= IHNsaXQ= b3NhbA== UkVN IGNoYW50cw== WXU= S2V5cw== QnJleGl0 IEZvcmNlZA== QXJpem9uYQ== IHNxdWFkcm9u SVNP IE1hbG9uZQ== IDMzOA== IGNvbnRyYXN0aW5n IHRpZGFs IGxpYmVs IGltcGxhbnRlZA== IHVwcm9hcg== IENhdGVy IHByb3Bvc2l0aW9ucw== TWFuY2hlc3Rlcg== IEV1cm9z aXRhbWlu R2ls IEVsdmVu IFNlZWs= IEJhaQ== IHJlZGV2ZWxvcG1lbnQ= IFRvd25z IEx1Yg== ISIs YWxvbg== S3Jpc3Q= IG1lYXN1cmFibGU= IGltYWdpbmFibGU= IGFwb3N0bGVz WU4= NzYw IHN0ZXJvaWQ= IHNwZWNpZmljaXR5 IExvY2F0ZWQ= IEJlY2tlcg== IEVkdQ== IERpZXRhcnk= dXRzY2g= IE1hcmlseW4= IGJsaXN0ZXI= IE1FUA== IEtveg== IENNUw== eWFob28= IENhcm5leQ== IGJvYXN0aW5n IENhbGVi Qnl0ZQ== cmVhZHM= YWRlbg== UHJvYmxlbQ== IFdvb2R3YXJk U3dl U3Vw IEtHQg== U2V0dXA= IHRhY2l0 IHJldHJpYnV0aW9u IGR1ZXM= IE3DvA== Lj8= 5Lit cG90cw== IGNhbWVv IFBBTA== ZWR1Y2F0aW9u QW15 bGlrZWx5 Z2xpbmc= IGNvbnN0aXR1dGlvbmFsbHk= IEhhbW0= IFNwZWFr IHdpZGdldHM= YnJhdGU= IGNyYXBweQ== IEl0ZXI= IGFudGljaXBhdGluZw== IEJvdXQ= UGl4ZWw= IFllcA== IExhdXJpZQ== IGh1dA== IGJ1bGxldGlu IFNhbHZhdGlvbg== IGNoYXRz ZWFyYWJsZQ== SG9uZXN0bHk= QUxUSA== b25zZXF1 Y3VsdA== aXNjb3Zlcnk= b3Z5Y2g= IHNlbHZlcw== IFNhdG9zaGk= U291bmRz IGNvbnZlcmdlbmNl IFJvc2VuYmVyZw== MTk3NA== IG5hc2Fs IGZ1bGxlc3Q= IGZlcm9jaW91cw== eHVz aXN0ZQ== QU1T IGxvYmJpZWQ= IHNvb3RoaW5n IEd1bm4= dG9kYXk= MDI0 IGluc3BpcmF0aW9uYWw= IE5CTg== cGI= Z2V3YXRlcg== b3JhaA== YWxsb3dlZA== IENvbGlzZXVt IHNwZWNpYWxpemluZw== IGluc2FuZWx5 IFRhcGU= ZGVsYXk= IHRhcm4= IFBvdW5k IG1lbGFuY2g= IGRlcGxveW1lbnRz aWxhbmQ= IGxlc3Nlbg== IGZ1cnJ5 IFVFRkE= IGJsb29kc2hlZA== IE1laWVy aXRoZXJpbmc= IGhlaXJz IEphdw== YXh0ZXI= IFB1YmxpY2F0aW9ucw== IGFsdGVycw== aW50ZW50aW9u IFdpbmNoZXN0ZXI= ZGV0ZXJtaW5hdGlvbg== IExpZmV0aW1l dGhpbg== TW9uc3Rlcg== Nzgw IGFwcHJveGltYXRpb24= IHN1cGVybWFya2V0cw== IFNlY29uZHM= b3Jvcw== aHVnZQ== IGJyaWJl IExJTUlURUQ= dW5lZA== IG1pc2ludGVycHJldA== IEluanVyeQ== IDM2Nw== IHRocmVzaG9sZHM= IENhcm5pdmFs IGdhc3Ryb2ludGVzdGluYWw= IGd1aWRlbGluZQ== IGRlY2VpdmVk ZmVhdHVyZXM= IHB1cnBvcnRlZGx5 IFJvbm5pZQ== IE5ld3Q= IHNwYWNpb3Vz YXN1cw== IHN1cGVyaGVyb2Vz IEN5bnRoaWE= bGVnZ2Vk a2FtcA== Y2hpbw== IHRodW1ibmFpbA== IFNoaXJsZXk= aWxsYXRpb24= IHNoZWRz IFp5 RVBB IGRhbXM= IHlhd24= bmFo IFBlZ2d5 IEVyaWU= IEp1dmVudHVz IEZvdW50YWlu cng= ZG9uYWxk YWxidW0= IENvbXByZWhlbnNpdmU= IGNhY2hpbmc= IFV6 dWxuZXJhYmlsaXR5 IFByaW5jaXBsZQ== IEppYW4= aW5nZXJz Y2FzdHM= IE9zaXJpcw== Y2hhcnQ= dGlsZQ== IFRpZmZhbnk= IFBhdHRvbg== IFdoaXA= IG92ZXJzaXplZA== SmU= IENpbmRlcmVsbGE= IEJvcmRlcnM= IERhZXNo TWFo IGRvZ21h IGNvbW11bmlzdHM= dnU= Q291bmNpbA== IGZyZXNod2F0ZXI= IHdvdW5kaW5n IGRlYmFjbGU= IHlvdW5nc3Rlcg== IHRocmVhZGVk IEJvdHM= IFNhdmluZ3M= 44GC b2xpbmc= b2hv IGlsbHVtaW5hdGlvbg== TVJJ IGxvb3Nlbg== dHJ1bXA= YWdlbmN5 dXJpb24= IG1vbWVudGFyaWx5 IENodW4= IEJ1ZGFwZXN0 IEFsbGV5 RGlzaw== IGFzdG9uaXNoZWQ= IENvbnF1ZXI= IEFjY291bnRpbmc= aGF2aW5n IFdlaW4= IEFscmlnaHQ= IHJldm9sdmVy IGRlbHVzaW9u IHJlbGljcw== IGFkaGVyZW50 cXVhbnQ= IGhhbmRtYWRl b3Jpbw== IGNvbWJhdGluZw== Y29kZWQ= IHF1YWRydQ== cmV0aA== Tmlr IFRyaWJhbA== IE15c3RlcmlvdXM= IGluaGFs IFdpbm5pbmc= IENsYXNzaWZpY2F0aW9u Y2hhbmdlZA== IHVuYWI= IHNjb3Ju aWNpcGF0ZWQ= d2w= b25kdWN0b3I= IHJlaW5mb3JjaW5n IENoaWxkaG9vZA== YW5vdmE= IGFkdmVudHVyZXI= IGRvY3RvcmFs IFN0cmF0ZWdpZXM= IGVuZ3VsZmVk IEVuY291bnRlcg== IGxhc2hlcw== Q3JpdGljYWw= cmljdWxhcg== IFVURg== b2NpYXRpb24= Y2hlY2tpbmc= IENvbnN1bHRpbmc= UnVudGltZQ== cGVyaW9k IEFzZ2FyZA== IGRpc3RpbGxlZA== IFBhc2FkZW5h IER5aW5n IENPVU5UWQ== IGdyYW5pdGU= IHNtYWNr IHBhcmFjaHV0ZQ== IFNVUg== VmlyZ2luaWE= IEZ1cmlvdXM= Nzg3 IE9raW4= IGNhbWVs IE1icHM= MTk3Mg== IENoYW8= IEN5YW4= am9pY2U= ZWZlcg== IFdyYXA= IERlYmF0ZQ== U2Vn IGZvcmVhcm0= IElnbm9yZQ== IHRpbWVzdGFtcA== IHByb2Jpbmc= IE5vb24= IEdyYWls ZmVu IGRvcm1hbnQ= IEZpcnN0bHk= IEVpZ2h0aA== IEhVTg== IERlc2lyZQ== b3Jhcw== R2lybHM= IERlc21vbmQ= emFy YW1pbmVz T0FE ZXhlY3V0ZQ== IGJvb2Jz IEFUTA== Xyg= Q2hlbHNlYQ== IG1hc3R1cmJhdGlvbg== IENvQw== IGRlc3Ryb3llcg== IENob21za3k= IHNjYXR0ZXI= IEFzc2V0cw== Nzk2 IENhcmdv IHJlY2VwdGl2ZQ== IFNjb3Bl IG1hcmtldGVycw== IGxhdW5jaGVycw== IGF4bGU= IFNFQQ== c2Vx IE1vZmY= ZmluZGluZw== IEdpYmJz R2VvcmdpYQ== ZXh0cmVtZWx5 Tko= IGxhYm9yZXJz c3RhbHM= IG1lZGlhdGlvbg== IEhlZGdl YXRvd24= IGlvZA== ZGVzcGl0ZQ== dmlsbA== SmFuZQ== ZXhpc3RlbmNl IGNvaW5jaWRlZA== IFV0aWxpdGllcw== IENoZWFw IGxvZ2lzdGljYWw= IGN1bG1pbmF0aW9u IE5pY290aW5l cGFr Rm9sZGVy IHJvZGVudHM= c3R1ZmY= IGxhd2Z1bGx5 IHJlcGVydG8= aW9jaA== amo= RGlhbG9ndWU= SEhISA== bGljdGlvbg== TG9va3M= IDI5Nw== IHR1cnJldHM= IEFiYW5kb24= IGluY2Vzcw== IFRyYWZmb3Jk IGN1cmxlZA== IHByZWZlcnJpbmc= IHByaXZhdGl6YXRpb24= IGlycmVzaXN0 IFBhbmRh IFNoYWtl IE1jR3I= 44OE dW5kZXJz IGRpc2NyaW1pbmF0ZWQ= IGJhcnRlbmRlcg== SUxF QXRsYW50aWM= IHByb3BlbnNpdHk= IFdpeg== IEdpbQ== Y29uZmVyZW5jZQ== IHJlaW5mb3JjZXM= R2g= d2Fnb24= IGVlcmll RmFs IGh1Z2dlZA== cmFjaXN0 UklD RnU= IGZpbGxlcg== IFN0dWI= IGVuZ3JhdmVk IFdyZXN0bGU= IGltYWdpbmF0aXZl IFBlZXI= IEZhY3RvcnM= YW51cw== IERyYWN1bGE= bW9uaXRvcg== IHJvdXRlcnM= aWJpYQ== IEJvb2xlYW4= ZW5kYWxl IFNsYXVnaHRlcg== IFNoYWNr UkZD IFNwaWVsYmVyZw== U2F4 IFBIT1RP IENsb3Zlcg== IFJhZQ== RGVwZW5kaW5n IE1lbW9y YXJhbQ== IHBpZXJjZWQ= IGN1cnRhaW5z dmFsZQ== IElucXVpc2l0aW9u IFBva2U= IGZvcmVjYXN0aW5n IGNvbXBsYWlucw== U2Vuc2U= IEhlcm1lcw== aXNjb3ZlcmVk IGJpYmxl IE1vcnBo IGdlcm0= Nzg1 RE9O IGNvbmdlbg== IGNyYW5l IERQUg== IHJlc3BlY3RmdWxseQ== Um9vbQ== IE5hdw== IERhbGFp cmVhc29u IEFuZ3Vz RWR1Y2F0aW9u IFRpdGFuaWM= y5w= IG92YWw= dW5pdGVk IHRoaXJkcw== IG1vaXN0dXI= IENQQw== TWlhbWk= IHRlbnRhY2xlcw== IFBvbGFyaXM= ZXhj ZXhjbHVzaXZl IFByYWlyaWU= IGNvbG9zc2Fs IEJsZW5k c3VycHJpc2luZ2x5 w61z IGluZG9jdHI= IGJhc2Fs IE1QRUc= dW5kbw== U3BsaXQ= RGV2ZWxvcG1lbnQ= IGxhbnRlcm4= MTk3MQ== IHByb3ZvY2F0aW9u IGFuZ3Vpc2g= IEJpbmQ= IExlaWE= ZHVjZXJz aXBweQ== Y29uc2VydmFuY3k= IGluaXRpYWxpemU= IFR3aWNl IFN1aw== IHByZWRpYw== IGRpcGxvbWE= IHNvY2lvcA== SW5ncmVkaWVudHM= IGhhbW1lcmVk IElybWE= UWFpZGE= IGdsaW1wcw== IEJpYW4= IHN0YWNraW5n IGZlbmQ= Z292dHJhY2s= IHVubg== ZGVtb2NyYXRpYw== aWdyZWU= IDU4MA== IDI5NA== IHN0cmF3YmVycnk= SURFUg== IGNoZXJpc2hlZA== IEhvdHM= IGluZmVycmVk IDgwOA== IFNvY3JhdGVz T3JlZ29u IFJvc2Vz IEZPSUE= IGluc2Vuc2l0aXZl IDQwOA== UmVjb21tZW5k IFNoaW5l IHBhaW5zdGFraW5n VUdF IEhlbGxlcg== IEVudGVycHJpc2Vz SU9S YWRq TlJT TEc= IGFsaWVuYXRlZA== IGFja25vd2xlZGdlbWVudA== IEFVRA== IFJlbmVn IHZvdWNoZXJz IDk2MA== IG1vb3Q= IERpbWVuc2lvbnM= IGNhYmJhZ2U= QnJpZ2h0 Z2F0 IEtsdQ== IGxhdGVudA== IHpl IE1lbmc= IGRpc3BlcnNl IHBhbmRlbW9uaXVt SFE= IHZpcnR1b3Vz IExvY2F0aW9ucw== ZWVwZXI= cHJvdmlkZWQ= IHNlYW1z IFdU aXpv UFJPVg== IHRpdGFuaXVt IHJlY29sbGVjdGlvbg== IGNyYW4= IDc4MA== IE5G NDkx NjQy cGFja2luZw== NTk4 dGV4dHVyZQ== U3BpZGVy ZnJlZWRvbQ== Y2lwbGVk IFRBTUFEUkE= 4pmm YXV0aGVudA== IFdBTlQ= cmlmaWVk IHJpdGVz IHV0ZXJ1cw== a2lzcw== IOKJpA== IHNraWxsZXQ= IGRpc2VuZnJhbmNo IEdhYWw= Q29tcGFu IGFnZWluZw== Z3VpZGU= QmFsdA== IGl0ZXJhdG9y IGRpc2NyZXRpb25hcnk= dGlwcw== IHByaW1hdGVz IFRlY2huaXF1ZQ== IFBheW1lbnRz YXplbA== IFJPQ0s= c3RhbnRpYWw= MDYw IGRtZw== IEphY2tldHM= IFBsYXlvZmY= IG51cnNlcnk= IFN5bWI= YXJ0b24= IGFubmV4YXRpb24= Q29sb3JhZG8= IGNvaWxz IFNob2Vz 4oSiOg== IFJveg== Q09NUExF IEV2ZXJlc3Q= IFRyaXVtcGg= Sm95 R3JpZA== 4Lw= cHJvY2Vzc29y IFByb3NwZXI= IFNldmVydXM= IFNlbGVjdGVk cmc= IFRheXlpcA== U3RyYQ== IHNraWluZw== ID8p IHBlZw== VGVzbGE= IHRpbWVmcmFtZQ== IG1hc3Rlcm1pbmQ= IE5C c2NpZW50aWZpYw== IFNoaXQ= Z2VuZXJpYw== SU5URVI= TlVN IHN0cm9sbA== IEVuaXg= IE1NUg== IEVNUw== bW92aWU= gqo= IG1pbmltaXppbmc= aWRkbGluZw== IGlsbGVnaXRpbWF0ZQ== IHByb3RvdHlw IHByZW1hdHVyZWx5 IG1hbnVhbHM= b2JiaWVz IENhc3NpZHk= REVD ZGVza3RvcA== IGFlcm9z IHNjcmVlbmluZ3M= IGRlYmlsaXRhdGluZw== IEdyaW5k bmF0dXJlY29uc2VydmFuY3k= IGZhZGVz dGVybWluYXRpb24= YXNzZXRzYWRvYmU= RmFjdG9y IGRlZmluaXRpdmVseQ== UG9rw6k= YXB1bHQ= IExhZmF5ZXR0ZQ== Q29ybg== IENvcmFs IHN0YWduYW50 VHVl IGRpc3NhdGlzZmFjdGlvbg== R2VuZGVy IGtpZG5leXM= IEdvdw== IERlZmVhdA== IEFzaHRvbg== IGNhcnRlbHM= IGZvcmVjbG9zdXJl IEV4cGxvcmU= c3RyZW5ndGg= b3Rpbg== IHZldGVyaW5hcmlhbg== IGZ1bWJsZQ== IHBhcmFw IFN0cmFpdA== cmlscw== IHByaWNr IEJlcm11ZGE= IEFtbXVuaXRpb24= c2tpbm5lZA== IGFib3VuZA== IEJyYXo= IHNoYXJwZXI= IEFzY2Vuc2lvbg== IDk3OA== IHByZXZpZXdz IGNvbW11bmlvbg== IFhZ IHBob255 IG5ld2NvbWVy IDMzMg== LiIsIg== IHJlZGlzdHJpYnV0aW9u UHJvdGVjdA== IFNvZg== S2Fs IGxpcHN0aWNr d29yc3Q= IHRhbmdsZWQ= IHJldHJvc3BlY3RpdmU= aW50ZWdlcg== IHZvbHVudGVlcmluZw== IDE5MDc= IC0tLS0tLS0tLS0tLS0tLS0tLS0t aWNoZW4= IHVudmVpbGluZw== IHNlbnNlbGVzcw== IGZpc2hlcmllcw== XC0= IGhpbmdlcw== IGNhbGN1bHVz TXl0aA== IHVuZGVmZWF0ZWQ= IG9wdGltaXphdGlvbnM= IGRlcHJlc3M= IGJpbGxib2FyZA== IFlhZA== IFB5cmFtaWQ= SXNu SWRl IGxlZ2lvbg== IEtyYW1lcg== ZW50YW55bA== IHBlbmV0cmF0aW5n IEhhd3Ro IFBST0RVQ1Q= IEdlcmFyZA== IFBhY3Q= IEluY2x1ZGluZw== IEVsaWFz IEVsYWluZQ== dmlzdWFs IGh1bW1pbmc= IGNvbmRlc2M= IEZhc2M= 5LiK IGVnYWxpdGFyaWFu IGRldnM= IERhaGw= T3Bz REg= IEJvdW5jZQ== aWRhdGVk YWxkbw== IHJlcHVibGljYW4= IGhhbWI= IFNldHQ= b2dyYXBoaWVz Q0hBUFRFUg== IHRyYW5zc2V4dWFs IHNreXJvY2tldA== YW5zd2Vy IG1hcmt1cA== 2Ko= IGhlcm9pbmU= Q29tcGFyZQ== IFRhdg== QmVhc3Q= IHN1Y2Nlc3NvcnM= IG5hw692ZQ== IEJ1Y2tsZXk= c3RyZXNz bWVhdA== IGRvd25sb2FkYWJsZQ== IGluZGV4ZWQ= IHNjYWZm IEx1bXA= IEhvbW8= U3R1ZGlv SW5zcA== IHJhY2tlZA== ZmFyaW91cw== IFBldHR5 RXh0ZXJuYWw= IDE5MDk= V2Fycw== Y29tbWl0 cHV0ZXJz IHVub2I= IEVycg== IEVH IEFsYW0= IFNpYmVyaWE= IEF0bW9zcGhlcmlj SVNURVI= IFNhdGFuaWM= dHJhbnNsYXRpb24= IExvdWQ= dHJhdW1hdGlj bGlxdWU= IHJlc29uYXRl IFdlbGNo IHNwYXJraW5n IFRPTQ== dG9uZQ== IG91dGw= IGhhbmRjdWZmZWQ= IFNlcmll ODAx IGxhbmRtYXJrcw== IFJlZXZlcw== IHNvZnRlbmVk IGRhenpsaW5n IFdhbnRlZA== bW9udGhz TWFnaWthcnA= IHVudHJlYXRlZA== IEJlZGZvcmQ= TWk= IER5bmFtbw== T3Jl Nzk1 IHdyb25nZnVs IGx1cmVk IGNvcnRpc29s IHZleA== ZHJhd24= aWxldA== RG93bmxvYWRoYQ== IEZhY3Rpb24= IGxhYnlyaW50aA== IGhpamFja2Vk d2F0ZXJz ZXJpY2s= IHN1cGVyaW9ycw== IFJvd2xpbmc= IEd1aW5uZXNz IHRk OTky IHVuZWFydGhlZA== IGNlbnRyaWY= IHNoYW1lbGVzcw== UG9k IEZpYg== IGljaW5n IHByZWRpY3Rvcg== IDI5Mg== Zm9yZXN0YXRpb24= Y29uc3RydWN0 Q2FuZA== QCM= IGFnaXRhdGVk IHJlcHI= T1ZB IGtuaXR0aW5n IExpbWE= IGZvZGRlcg== Njg0 IFBlcnNvbmE= a2w= NzAx IGJyZWFrdXA= 4bg= IGFwcGFsbGVk IGFudGlkZXByZXNzYW50cw== IFN1c3NleA== SGFycmlz IFRoZXJtYWw= ZWVlZQ== VXBsb2Fk IGd1bGY= IGRvb3JzdGVw IFNoYW5r TFU= IE1FTg== IFBvbmQ= c29ycnk= IG1pc2ZvcnR1bmU= bmFuY2U= IGJvbmE= TXV0 IGRlZ3JhZGVk IExPRw== IE5lc3M= YW5pbWFs IGF2ZXJzaW9u dW5kb3du IHN1cHBsZW1lbnRlZA== IEN1cHM= IDUwNA== IGRlcHJpdmU= IFNwYXJrbGU= xYI= IE1lZGl0YXRpb24= YXV0aG9ycw== IFNhYmFu IE5ha2Vk YWlyZA== IE1hbmRhcmlu IFNjcmlwdHVyZXM= IFBlcnNvbm5lbA== IE1haGFyYXNodHJh IDE5MDM= IFBhaQ== IE1pcmFnZQ== b21iYXQ= QWNjZXNzb3J5 IGZyYWdtZW50ZWQ= VG9nZXRoZXI= IGJlbGlldmFibGU= IEdsYWRpYXRvcg== YWxpZ25lZA== IFNsdWc= TUFU IGNvbnZlcnRpYmxl IEJvdXJib24= YW1lcm9u IFJlaGFi bnRheA== IHBvd2RlcmVk cGlsbGFy IHNtb2tlcg== IE1hbnNvbg== IEJG NTEx IEdvb2RlbGw= IERBUg== bXVk Z2FydA== IG9iZWRpZW50 IFRyYW5zbWlzc2lvbg== IERvbmF0aW9u ODgw IGJvdGhlcmluZw== TWF0ZXJpYWxz 44Kx ZGVzdHJveQ== IGZvcmVnb2luZw== IGFuYXJjaGlzbQ== IEtyeQ== aWNlcHM= IGxpdHRlcmVk IFNjaGlmZg== IGFuZWNkb3RhbA== dW5pdHM= IGZpYW4= IFN0aW0= IFNPTUU= IEludmFkZXJz IGJlaGF2aW91cmFs IFZlbnR1cmVz IHN1YmxpbWU= IGZydWl0aW9u IFBlbmFsdHk= IGNvcnJvc2lvbg== toU= IGxpa2VuZWQ= IGJlc2llZ2Vk d2VlbmV5 IENyZWVw IGxpbmVtZW4= bXVsdGk= aWNhYmx5 dWRkZXI= IHZpdGFsaXR5 IHNob3J0ZmFsbA== IFBhbnRz YXBpc3Q= SGlkZGVu IERyb3Bz bWVkaWNhbA== IHByb251bmNpYXRpb24= IE5STA== IGluc2lnaHRmdWw= SlY= IEJlYXJk IENob3U= IGNoYXJtcw== IGJpbnM= IGFtYmFzc2Fkb3Jz IFNhdHVyZGF5cw== IGluaGliaXRvcg== IEZyYW5jaA== NjAx Jywn IENvbm9y YXJ0bmV5 IFhwZXJpYQ== Z3JhdmU= YmVlcw== IFByb3Rlc3RhbnRz IHNvYWtpbmc= IE1hbmRhbA== IHBoYXNlZA== IDY2MA== IHNjYW1z IGJ1enppbmc= IEl0YWxpYW5z IExvcmVuem8= IEpB IGhlc2l0YXRlZA== IGNsaWZmcw== IEdPVA== aW5ndWlzaGFibGU= IGtv IGludGVycnVwdGlvbg== Wmlw TGVhcm5pbmc= IHVuZGVyc2NvcmVz IEJsaW5r S3U= NTc5 IEF1dG9i SVJF IHdhdGVyaW5n IHBhc3RyeQ== ODIw IHZpc2lvbmFyeQ== IFRlbXBsYXI= YXdhaXRlZA== IHBpc3Rvbg== IGFudGlk Y3VycmVudGx5 IHBhcmQ= IHdhZ2luZw== IG5vYmlsaXR5 IFl1cw== IGluamVjdGluZw== ZmFpdGg= IFBBU1M= 5bo= IHJldGFrZQ== IFBST0M= IGNhdGhlZHJhbA== YmFzaA== IHdyZXN0bGVycw== IHBhcnRuZXJpbmc= IG5vc2Vz IDM1OA== VHJhbnNmb3Jt YW1lbg== IGJvdXRz IElkZWFs IENvbnN0YW50aW4= IHNlcA== IE1vbmFyY2g= YXR0ZW4= IFBlb3BsZXM= bW9kaWZpZWQ= IG1vcmF0b3JpdW0= IHBlbmNoYW50 IG9mZmVuc2l2ZWx5 IHByb3hpZXM= b2thbmU= IFRhaXdhbmVzZQ== IFBvbw== IEhPTUU= dXNpb25hbA== IHZlcmJz IE9tYW4= dmlzb3J5 IHBlcnN1YXNpb24= IG11bHRpdA== IHNjaXNzb3Jz R2F5 b3dheQ== b3BoeXNpY2Fs bHVz Z251 IGFwb2NhbHlwdGlj IGFic3VyZGl0eQ== IHBsYXlib29r IGF1dG9iaW9ncmFwaHk= SVVN IHNuZWFraW5n IFNpbXVsYXRpb24= cHBz ZWxsZXJ5 UGxhbmV0 IHJpZ2h0ZnVsbHk= IG5pZWNl IE5FQw== IElQTw== IERpc2Nsb3N1cmU= bGVhbm9y b3VzeQ== U1RFUg== IDI4Mg== Q3J1eg== Q2hhbGw= NjQz IFN1cnZpdmU= IEZhdGFs IEFtaWQ= YXBv V2VhcG9ucw== REVO Nzcw IEdyZWVud2FsZA== IGxpbmVu YWxvcw== IHBvbGx1dGFudHM= IFBDSWU= a2F0 IHBhdw== IEtyYWZ0 Q2hlbQ== IFRlcm1pbmF0b3I= IHJlaW5jYXJu IF1b IFNlZWRz IHNpbGhvdWV0dGU= IFN0b3Jlcw== IGdyb29taW5n IERpcmVjdGlvbg== IElzYWJlbA== IEJyaWRnZXM= 8J+R RUVE IE1vcnNp IHZhbHZlcw== IFJhbmtlZA== IFBoYXJtYQ== IE9yZ2FuaXphdGlvbnM= IHBlbmV0cmF0ZWQ= IFJvZGhhbQ== IFByb3Rvc3M= IG92ZXJlc3Q= IGV4YXNwZXI= IFRK IDAwMDAwMA== IHRyaWNrbGU= IGJvdXJib24= V0hP IHdyZXRjaGVk IG1pY3Jvc2NvcGlj IGNoZWNrbGlzdA== IGFkb3JuZWQ= Um95YWw= QWRtaW5pc3Q= IFJldGlyZW1lbnQ= IEhpZ2hlc3Q= V2VhdGhlcg== aWxlZ2U= IGluY3JlbWVudHM= IENvc3BvbnNvcnM= IG1hc3Nl IFNpbm4= cmY= IGhvcmRlcw== YXNzZW1ibHk= NzU0 IE5hdGFzaGE= IFRZUEU= IEdFTkVSQUw= IGFycmFuZ2luZw== IDQwNw== bGF0b3I= IGdsZWFu IGRpc2NyZWRpdGVk IGNsaW5pY2lhbnM= VU5F IGFjaGlldmVz IEVtZXJzb24= Y29tcGxleA== PVs= IHByaW5jaXBhbGx5 IGZyYWls cGlja2Vk IHRoYW5raW5n IHJlY2w= IExBU1Q= IHN1cHByZXNzaW5n aWxpYw== IGFudGlkZXByZXNzYW50 IExpc2Jvbg== IHRob3I= IHNwYQ== IGtpbmdkb21z IFBlYXJjZQ== ZW1v IHBsdW5n IGRpdmVzdA== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ymlz b3NwZWxz YWRy U3Bpcml0 aGFsbGE= UGluaw== ZW5kZXo= IHJlc3VycmVjdGVk ZXNjYXBl IFJvc2Vuc3RlaW4= IGdlb2xvZ2ljYWw= IG5lY2Vzc2l0aWVz IGNhcm5pdg== IEVseXM= IEJhcm5leQ== IDI5Ng== ZGlneQ== U1RPTg== RE9XTg== IG1pbGVzdG9uZXM= IGtlcg== IGRpc21hbnRsaW5n IHJlcHJpbQ== IGNyb3NzaW5ncw== MTk0NQ== IHBhdHJpYXJjaHk= IGJsYXNwaGVteQ== IDM1OQ== bWV0cnk= IE9iZXNpdHk= IERpZmZlcmVuY2Vz YmxvY2tpbmc= 44OV44Kh aWNoaXRh IFNhYmhh cGhhbHQ= IENvbG8= dWFsYQ== ZWZmaWNpZW50cw== IE1lZGluYQ== Y29uc29sZQ== NTU3 IEhhbm5pYmFs IEhhYml0 IEZldmVy IHRoZW5jZQ== IHN5bmFnb2d1ZQ== IGVzc2VudGlhbHM= IHdpbms= IFRyYWRlcg== SURB IFNwb2lsZXI= IEljZWxhbmRpYw== IEhheXdhcmQ= IHBlYWM= IG1hbGljZQ== IGZsYXNoYmFjaw== IHRodw== IGxheW9mZnM= TGlxdWlk IHRyb29wZXI= IGhpbmdl IFJlYWRlcnM= UGhpbGw= IEJhdWVy Q3JlYXRlZA== IGF1ZGl0cw== YWNjb21wYW4= IHVuc3VzcGVjdGluZw== aWVyYQ== NjY2NjY2NjY= IGJyb2No IGFwcHJlaGVuZGVk IE1hbGs= Y2VybmluZw== IENvZGV4 T1ZFUg== TWFyc2g= IERlbmc= IEV4cHJlc3Npb24= IGRpc3Jlc3BlY3RmdWw= IGFzY2VuZGluZw== dGVzdHM= IFBsYWludGlmZg== c3Rlcnk= IEFsaWJhYmE= ZGluYW5k IERlbXBzZXk= QXBwbGljYXRpb25z bW9yYWw= IHRocm91Z2hwdXQ= IHF1YXJyZWw= IG1pbGxz IGhlbW9y IENBU0U= dGVycm9yaXN0 c3RpbQ== aWZlc3R5bGU= cm96ZW4= Q0VQVA== QXJr dWNp bGVjdGlj IGlycml0YXRpbmc= c2hlZXRz QXk= IHJlZGVlbWVk IGhvcm55 IFRlYWNo IFNlYXI= ZGVtb2NyYWN5 NDY1 IFJlc3RvcmU= IHN0YW5kYnk= IFBpcw== aWZmaW4= IHNsZWVweQ== IGV4dHJhdGVy IGNvbXBsaW1lbnRz RnJhbWV3b3Jrcw== IGluc3RhbGxz IGJhbmdpbmc= c3VyZmFjZQ== Zm91bmRsYW5k IG1ldGFwaHlzaWNhbA== IDI4Mw== b3Vscw== ZGV2aWNlcw== QXJncw== IFNhY3JpZmljZQ== IE1jQ29ybQ== ZXNvbg== Q29uc2VydmF0aXZl IE1pa2hhaWw= c2VlaW5n aXNpdmVseQ== IFJvb21z IEdlbmVyaWM= IGVudGh1c2lhc3RpY2FsbHk= IGdyaXBwZWQ= IGNvbWVkaWM= IEVsZWN0cmljaXR5 IGd1ZXJyaWxsYQ== IGRlY29yYXRpb24= IFBlcnNwZWN0aXZl IGNvbnN1bHRhdGlvbnM= IHVuYW1i IHBsYWdpYXI= IG1hZ2ljaWFu IGVyZWN0aW9u IFRvdXJpc20= b3JpZWQ= cm94eQ== MTEwMA== VGFt iOg= zrM= 16o= IFByZWRhdG9ycw== Tml0cm9tZQ== IHRlbGVzY29wZXM= cHJvamVjdHM= IHVucHJvdGVjdGVk IHN0b2NrZWQ= IEVudHJlcHJlbmU= bmV4cGVjdGVk IHdhc3Rld2F0ZXI= VmlsbA== IGludGltYXRlbHk= IGlDbG91ZA== IENvbnN0YWJsZQ== IHNwb29m IG5lZmFyaW91cw== IGZpbnM= IGNlbnNvcg== IE1vZGVz IEVzcGVy YXJib24= IGludGVyc2VjdGlvbnM= IGxhdWRlZA== IHBoeXNp IGdlbmVyb3VzbHk= IFRoZU5pdHJvbWU= IFRoZU5pdHJvbWVGYW4= IGFyaXNlbg== INmI IGdsYW5kcw== IFBhdmlsaW9u IEd1cHRh IHVuaWZvcm1seQ== IHJhbXBz cmlldA== IFdIRU4= IFZhbmVzc2E= IHJvdXRlZA== IGxpbXA= IENQSQ== cHRlcg== aW50dWl0aXZl IHZhcGluZw== IGV4cGVyaW1lbnRlZA== IE9seW1wdXM= IEFtb24= IHNpZ2h0aW5n IGluZmlsdHJhdGU= IEdlbnRsZW1hbg== IHNpZ25pbmdz IE1lb3c= IE5hdmlnYXRpb24= Y2hlY2tz NDMz IGVsYXBzZWQ= IEJ1bGdhcmlhbg== ZXNwaWU= IFNPTQ== ZHVyaW5n IHNwaWxscw== YW5jYQ== IFBseW1vdXRo TUFM IGRvbWVzdGljYWxseQ== IFdhdGVyZ2F0ZQ== IEZBTQ== a2lsbGVk ZWRpdGVk IFlvdXJzZWxm IHN5bmNocm9uaXphdGlvbg== IFByYWN0aWNlcw== U1RFUA== IGdlbm9tZXM= IFFS bm90aWNl IGxvY2F0aW5n emlu IDMyOQ== YWxjb2hvbA== IGtpdHRlbg== Vm8= IHJpbnNl IGdyYXBwbGU= IFNjcmV3 IER1bA== QUlS IGxlYXNpbmc= IENhZsOp IHJvc2Vz IFJlc3BlY3Q= IG1pc2xlYWQ= IHBlcmZlY3RlZA== IG51ZGl0eQ== IG5vbnBhcnRpc2Fu IENvbnN1bXB0aW9u UmVwb3J0aW5n IG51YW5jZXM= IGRlZHVjdGlibGU= IFNob3Rz IDM3Nw== IOac YW5vb2dh QmVuZWY= IEJhbQ== IFNhbXA= aWZpeA== IGdhbHZhbg== IE1lZGFscw== cmFkaXVz IG5vYmxlcw== IGVhdmVz aWdyYXRl S1Q= IEhhcmJvdXI= dWVycw== IHJpc2tlZA== cmVx IG5ldXJvdA== Z2V0dGFibGU= YWluYQ== Um9tbmV5 IHVuZGVycGlu IGxvZnQ= IFN1YmNvbW1pdHRlZQ== IE1vbmdvbA== Yml6 IG1hbmlmZXN0cw== YXNzaXN0ZWQ= IEdhZ2E= IHN5bmVyZ3k= IHJlbGlnaW91c2x5 IFByZWY= IEdlcnJ5 VEFH IENob2k= NDY2 YmVoaW5k IE91 R29sZE1hZ2lrYXJw IGhlbW9ycmg= Uml2ZXI= IHRlbmRvbg== IGluanVyZQ== IEZpb25h IHBhZw== IGFnaXRhdGlvbg== fHx8fA== dXJhbg== IEVTQQ== IGVzdGVlbQ== IGRvZGdpbmc= IDQxMg== cnNz IGNlYXNlcw== ZXhjbHVkaW5n IGludGFrZXM= IGluc2VydHM= IGVtYm9sZA== IE9yYWw= dXB1bmN0dXJl NDEx IFVuaWZpZWQ= IERlbGU= IGZ1cm5hY2U= IENveW90ZXM= IEJyYWNo TGFib3I= IGhhbmRzaGFrZQ== IGJydWlzZXM= R3JhZGU= 6ZeY IEdyYW1teQ== aWxlZW4= U3RhdGVz IFNjYW5kaW5hdmlhbg== IEthcmRhc2g= ODY2 IGVmZm9ydGxlc3NseQ== IERJUkVDVA== IFRIRU4= IE1laQ== ZXJ0YXRpb24= MTk2OA== IGdyb2lu d2l0Y2g= UmVxdWlyZW1lbnRz OTg1 IHJvb2Zz IGVzdGF0ZXM= IEhG IGhhaGE= IGRlbnNlbHk= IE9DVA== IHBsYXN0aWNz IGluY2lkZW50YWxseQ== IFRyYWNrcw== IFRheGVz IGNoYW50ZWQ= IGZvcmNlZnVs IEJpZWJlcg== IEthaG4= S2VudA== IENvdA== bGljdHM= RmVk IGhpZGVvdXM= IFZlcmQ= IFN5bmRpY2F0ZQ== IElsbGVnYWw= SmV0 IERBVg== cmVhc29uYWJsZQ== Y3Jldw== IGZ1bmRhbWVudGFsaXN0 IHRydXRoZnVs IEppbmc= IGxpbA== IGRvd25lZA== IGVuY2hhbnRlZA== IFBvbGljaWVz IE1jTWFzdGVy IEhhcmU= aWRlc2hvdw== IHBhcmFtcw== ZW5jZXJz Z29yaXRobQ== IGFsbG93YW5jZXM= IHR1cmJ1bGVudA== IGNvbXBsZXhpdGllcw== IEtU IDMzNw== IEdlbmV0aWM= RlVO RG91Zw== dGljaw== IGdpZ3M= dW1lbnRoYWw= IHBhdHJpYXJjaGFs IGNhbGM= LC4uLg== IGNvdXQ= IEd1YW4= IHBhdGhvbG9naWNhbA== IFJpdmFscw== IHVuZGVycmF0ZWQ= IGZsdW9yZXNjZW50 IEppdQ== YXJuYWV2 IFF1YW4= IDQyOQ== IOCo TWFyaW8= Q29uc3RydWN0 IENpdGF0aW9u IFJhY2lhbA== IFJTQQ== IEZpZGVs IDM5NQ== UGVyc29uYWxseQ== Q2F1c2U= w7s= cmFkaWNhbA== aW5lbg== IHZlaGVtZW50bHk= IFBhcGE= IGludGVybnNoaXA= IGZsYWtlcw== IFJlY2s= THVja2lseQ== QnJh MjAyMA== cmF2aW5ncw== Uk4= V29uZGVy U2VyaW91c2x5 IHJldXNhYmxl IHBvbGx1dGVk IFBlbmc= bGVpZ2g= aW5kbGU= IGNpcmN1aXRyeQ== IE1hZG9ubmE= IEJBUlQ= UmVzaWRlbnRz YXR0cmlidXRl UGhpbGFkZWxwaGlh Q2x1Yg== IHBsYW5uZXI= IGZyYW50aWNhbGx5 IGZhaXRoZnVsbHk= IFRlcnJpdG9yaWVz IExBVA== IEFuZGVyc2Vu YW51 IFBBUks= IFNvcmE= aWFnZQ== IFBsYXlvZmZz IEdDQw== NDI3 IGFibm9ybQ== IExldmVy IGRpc29iZWRpZW5jZQ== QXN5bmM= IFNoZWE= VmVydA== IHNraXJ0cw== IFNhd3llcg== eHA= IHdvcnNlbmluZw== IHNjYXBlZ28= IEFuZ2xl b3RoYWw= IHRyb3Zl IFN0eQ== IE5ndXllbg== bWFyaW5l aWRlb24= RGVwdGhz QmxvZw== IElsbHVtaW5hdGk= IHRyYWN0cw== IG9yZ2FuaXNl IG9zdHI= RnM= IGxldmVyYWdpbmc= IERhcmVkZXZpbA== YXNhcg== IGxhbmc= IGV4dGVybWlu dXJzaW9ucw== IFJvbW8= 44Kk44OI IGNvbnRlbmRlZA== IGVuY291bnRlcmluZw== IFRhYmxldA== IEFsdGVybmF0ZQ== c2tpbGw= IHN3ZWV0cw== IGNvaGVzaXZl Y2FwYWNpdHk= IHJlcHVk IGxpemFyZA== cm9v IHBpbGdyaW1z IFJ1ZmY= IEluc3RydW1lbnQ= IExvZ28= dWl0b3Vz RUg= IHNhbGVzbWFu IGFua2xlcw== TGVk IFBhdHR5 dWRvcw== T3duZXI= IGRpc2NyZXBhbmNpZXM= a2o= TVU= IHVuY29uZGl0aW9uYWw= RHJhZ29uTWFnYXppbmU= aWFyZA== T2Fr IENvbnZlcnNhdGlvbg== YmVlcg== IE9zYWth RGVsdGE= dXNreQ== IHNlY3JldGlvbg== IHBsYXph IG1pbmc= IGRlcGxldGlvbg== IE1vdXM= IElUUw== IEhpbWFs IEZsZW1pbmc= IGN5dG9r IEhpY2s= IGJhdHRlcnM= IEludGVsbGVjdHVhbA== Njc1 w6ly SVNJT04= IFF1ZW50aW4= IENoYXB0ZXJz aWhhZGk= IGNvYXN0ZXI= V0FZUw== IExpemFyZA== IFlvcg== YW5kZXJpbmc= U2tpbg== aGF1c3Q= YWJieQ== IHBvcnRyYXlpbmc= IHdpZWxkZWQ= ZGFzaA== IHByb3BvbmVudA== IHJpcHBsZQ== IGdyYXBoZW5l IGZseWVy IHJlY3VycmVudA== IGRldmlscw== IHdhdGVyZmFsbA== 5piv Z29v VGV4dENvbG9y IHRhbXBlcmluZw== SVZFUw== VFJVTVA= IEFiZWw= IFNBTA== IEhlbmRyaWNrcw== IEx1Y2l1cw== Ym90cw== IDQwOTY= SVNUT1JZ R3Vlc3Q= IE5Y aW5hbnQ= QmVueg== IExvYWRlZA== IENsZXZlcg== dHJlYXRtZW50 IHRhdmVybg== IDMzOQ== IFROVA== aWZpY2FudGx5 VGVtcGVyYXR1cmU= RmVs IHVuZGVyd29ybGQ= IEp1ZGdlcw== IDwr IHN0dW1w IG9jY3VwYW5jeQ== IGFiZXI= IEZpbmRlcg== KSIs IE51bmVz cmVzZXQ= aW5ldA== ZWN0b215 IHdlbGxuZXNz IFBlYg== cXVhcnRlcmVk YW5kYW4= IG5lZ2F0aXZlcw== IFRoaWVs IENsaXA= IExURA== IGJsaWdodA== IHJlcGVydG9pcmU= S3lsZQ== IHF1ZXI= IENlcw== IGhhcGw= OTg5 IFRoYW1lcw== aXNjb3BhbA== RGVzaw== aXZhcmlhdGU= IEV4Y2VsbGVuY2U= Zm91bmRhdGlvbg== IOKH WGk= IG15c3RlcmlvdXNseQ== ZXN0eWxlcw== IHBlcmlzaA== IEVuZ2Vscw== IERFQUQ= MDkw fX19 IFVucmVhbA== IHJlc3RsZXNz SURFUw== b3J0aG9kb3g= IEludGVybWVkaWF0ZQ== IGRpbm5lcnM= IFRyb3V0 IFNleW0= IEhhbGxz b2dnZWQ= IHRyYWdlZGllcw== IGRpZG50 Njc2 IGFpbG1lbnRz IG9ic2VydmFibGU= IFZpZGU= YWRhcHQ= IER1c2s= IHByb2Zlc3Npb25hbGlzbQ== IFByZXNjb3R0 IEluZGllcw== cG94 IE1laHJhbg== V2lkZQ== IGVuZGVtaWM= IFBhcmFu QmlyZA== IHBlZGFscw== IElV IEFkYW1hbnQ= IEh1cnQ= IGNvcnJlbGF0ZXM= dXJkZW4= IHNwb25zb3Jpbmc= Y2xpbWF0ZQ== IFVuaXZlcnNpdGllcw== IEtub3Q= ZW5uZXM= IERhbWlhbg== IEF4ZWw= U3BvcnQ= IGJhcmI= IFNubw== c2hvd24= c3RlZW4= dWRlbmNl IG5vbnZpb2xlbnQ= IGhvbW9waG9iaWE= IGJpb21hc3M= IERldGFpbA== IHNyZk4= IFR1bmU= YWNjb21wYW5pZWQ= SUVOQ0U= QWxiZXJ0 IE1vbmdv eng= IENlcmJlcnVz b3JiaXQ= Y2Vucw== IHNsYXk= U0hBUkU= SFk= IGJyYXds IFByb2Jl IG5vbmV4aXN0ZW50 IENsYXJlbmNl IEJsYWNrYnVybg== IHBvcnRhbHM= IFJpdGE= IFJlbWFpbg== IExldmFudA== IHRyaWNrZWQ= IEZlcnJ5 YXZlcmluZw== IFN0cmF3YmVycnk= IEFuc3dlcnM= IGhvcnJlbmRvdXM= IEFtYW4= U3VwcGxlbWVudA== IFRvYWQ= IHBlZWxlZA== IG1hbm9ldXY= IFV6YmVr bW9uZHM= IEhlY3Rvcg== IDQwMg== cGVlcw== Zml4ZXM= IGRq IHJlc3VtZXM= IGFjY291bnRhbnQ= IGFkdmVyc2l0eQ== IGhhbXBlcmVk IExhcnNvbg== IGRvcGluZw== cGFydHM= SHVy IGJlYXJkZWQ= IHly IFBsdWdpbg== 5aWz IC8qKg== cm9sbGV5 IHdhdGVyc2hlZA== IFN1Ym1pc3Npb24= aWZsb3dlcg== QVND IGNob2ly IHNjdWxwdHVyZXM= bUE= aW5jcmVhc2luZw== YWlp IHNuZWFrZXJz IGNvbmZyb250cw== IEVsZXBoYW50 IEVsaXhpcg== IHJlY2Fs IFRUTA== d2lkZ2V0 IFdheA== IEdyYXlzb24= IGhhaXJzdA== IGh1bWlsaWF0ZWQ= IFdBUk4= YXBwaW5lc3M= IFRUQw== RnVlbA== IHBvbGlv IGNvbXBsZXhlcw== IGJhYmU= IFhJVg== UEY= KS5b UGFydHM= IDQzNQ== TWVn IFlhcmRz IEFMUA== IHllbGxz IHByaW5jZXM= IGJ1bGxpZXM= IENhcGl0YWxpc20= ZXhlbXB0 RkFR IFNwb25nZQ== IEFsYQ== IHBsZWFzYW50bHk= IGJ1Zg== IGRlbm90ZQ== IHVucHVibGlzaGVk IGtuZWVsaW5n YXNjYQ== IGxhcHNl YWxpZW4= OTk0 IHJlZmVyZWVz IExhd3llcnM= U2FudGE= IHB1enpsaW5n IFByb21ldGhldXM= IFBoYXJhb2g= IERlbGF5 IGZhY2lsaXRhdGVz IENFUw== IGpld2Vscw== IGJvb2tsZXQ= b25kaW5n IHBvbGFyaXphdGlvbg== IE1vcmFu IFNhbGFk IFNPUw== IEFkdmljZQ== UEhPVE9T SUNBTg== aWF0dXJlcw== ZXhwcmVzcw== IFdvbmRlcmxhbmQ= IENPREU= IENMQVNT OTc1 IGdyZXA= IERpZXNlbA== IEdsYWM= IT8i IHJt b2luZQ== ZGlzY3JpbWluYXRpb24= IE51cnNl bWFsbG93 IHZvcnRleA== IENvbnNvcnRpdW0= IGxhcmdlRG93bmxvYWQ= c3RyYWlnaHQ= YXVnaGxpbg== R3JhZA== IHB1YmxpY2l6ZWQ= IFdhdmVz IFJlZGQ= IGZlc3Rpdml0aWVz IE1hbmU= YXJvdg== IGZsZWV0aW5n IERydW5r dWdlbg== Q2VsZQ== IGNocm9tb3NvbWVz IERPVA== LSstKy0rLSs= IGJ1c2llc3Q= IEJlYXZlcg== U3lyaWFu IEt5cg== a2Fz IENyb3NzUmVm MTk1MA== NzYwMQ== IHJlcGVhbGluZw== IFdpbm5lcnM= IE1hY3Jv IERPRA== YmxhbmNl U29ydA== NjQx IG1ldHJl IERpcms= IGdvZ2dsZXM= IGRyYXdiYWNrcw== IGNvbXBsYWluYW50 IGF1dGhvcml6aW5n IGFudGl0cnVzdA== b3BlcmF0ZWQ= IG1haA== IGV4YWdnZXJhdGlvbg== QW1hemluZw== IFNlcmFwaA== IGhhemU= d293 IGV4dGluZ3Vpc2hlZA== IGNhbnlvbg== IEJvc2g= IHZlbnRz IHNjcmFwZQ== Q29ycmVjdA== NDI2 IGF2Zw== RGVtYW5k IOKIvA== IG1pY3JvYmlvdGE= In1dLCI= IFN0ZXY= Qmlv IFBsYW5lcw== IHN1Z2dlc3RpdmU= IGRlY2lwaGVy IFJlZnVnZWU= IEtlanJpd2Fs IEdyZWVucGVhY2U= IGRlY2xhc3M= IFNvdW5kZXJz IHRobw== IGRlY3J5cHQ= IGJydXNoaW5n IEphbmVpcm8= aXBvcA== U2k= ODc3 IEdlb2ZmcmV5 IGNwdQ== IEhhemVs IHZpZXdwb2ludHM= IGNyaXNweQ== IE5vdGlmaWNhdGlvbg== IHNvbGRlcg== IE1vZGVzdA== IEhlbWlzcGhlcmU= IGNhc3NldHRl aW5jbHVkZXM= IGlkZW50aWZpZXJz IENBTEw= aW5jZW50 VG9kZA== IFN3ZWVw IDMzNA== Ym9zcw== IHNtaXI= Z2lueA== IHRvd25zaGlw IGdyaWV2aW5n IE1vc3F1ZQ== TmV0ZmxpeA== QVNFRA== IE1pbGxlbm5pYWxz b2NvbQ== MTk2Nw== IGJvbGRseQ== c2xlZXA= IGVzY2hl YXJpanVhbmE= IHN3aXJs IFBlbmFs IG5lZ2xpZ2VudA== IFN0ZXBoZW5zb24= S0VS IFpvcm8= cmlzaXM= IGxvY2FsaXphdGlvbg== IFNleW1vdXI= IEFuZ2xpYw== cmVkaXRhdGlvbg== cHJvdGVjdGlvbg== IFBhaWdl IG9taXQ= IFJvdXNzZQ== IFR1Yg== IGludml0YXRpb25z dHR5 IG1vc3M= cGh5c2ljYWw= Q3JlZGl0cw== IGFuYXJjaHk= IGNoaWxkY2FyZQ== IGx1bGw= IE1law== IExhbmd1YWdlcw== bGF0ZXN0 IFNhbmZvcmQ= IHVzYWJpbGl0eQ== IGRpZmZ1c2U= IERBVEE= IHNwcml0ZXM= IFZlZ2V0YQ== IFByb21vdGlvbg== 44O844Kv cmljdGluZw== emVl VHVya2lzaA== IFREcw== cHJvdmVu NTcx IHNtdWdnbGVycw== NzA3MTA= IHJlZm9ybWVk IExvaXM= IHVuZmw= IFdJVEhPVVQ= IFJldHVybmluZw== YW5uaWU= IFRvbWFz RnJhbmM= IFByb2ZpdA== IFNFUlY= IFJ1bWJsZQ== aWt1bWFu ZXNhbg== IHRlc3RlcnM= IGdhZGdldA== IGJyYWNlbGV0 IEZTQQ== Y29tcG9uZW50 IHBhcmFtZWRpY3M= IGphbg== IFJlbWVt IFNraW5uZXI= IGxvdg== IFF1YWtl cm9tYQ== IGZsYXNr UHJpbmM= IG92ZXJwb3dlcg== IGxvZGdpbmc= IEtLSw== cmV0dGU= IGFic29yYnM= d3JvdGU= ICwi S2luZ3M= IEhhaWw= IEZhbGxpbmc= eHRhcA== IEhlbGVuYQ== aXJlbnM= TGFycnk= IHBhbXBobGV0 IENQUg== R3Jv IEhpcm9zaGltYQ== IGhvbGlzdGlj Ii5b IGRldGFjaG1lbnQ= IGFzcGlyZQ== IGNvbXBsaWNpdA== IEdyZWVud29vZA== IHJlc3Bhd24= IFN0dXBpZA== IEZpbmlzaGVk ZmFs YmFzcw== IGFiaG9y IG1vY2tlcnk= IEZlYXN0 VklERU8= IGNvbnNlYw== IEh1bmdyeQ== UHVsbA== IEh1c3Q= aXRhbmNl P+OAjQ== KS0t IFBhcmFsbGVs Y29udg== NDY5 aGFhcg== d2FudA== UGFwZXI= bWlucw== IFRvcm8= IFRSVU1Q IFJhaQ== RFc= IFdpY2tlZA== IExlcA== IGZ1bmt5 IGRldHJpbWVudA== aW9zaXM= YWNoZXY= IGRlZ3JhZGU= aW1pbGF0aW9u IHJldGFyZA== IGZyYWdtZW50YXRpb24= IGNvd2JveQ== IFlQRw== IEhBTA== UGFyZW50cw== IFNpZWc= IFN0cmF1c3M= IFJ1YmJlcg== 15A= RnJhZw== IHB0 IG9wdGlvbmFsbHk= IFpJUA== IFRyYW5zY3JpcHQ= IER3ZWxs ODgy TWVyYw== IE1PVA== 44Ov44Oz IGh1bnRz IGV4ZWN1dGVz SW5jbHVkZXM= IGFjaWRpYw== IFJlc3BvbnNpYmlsaXR5 IER1bWI= d2Vp QW5kZXJzb24= IEphc3Blcg== aWdodG9u YWJzb2x1dGVseQ== QWR1bHQ= IHBsdW5kZXI= TW9ybmluZw== IFRvdXJz IERhbmU= zro= IFRFU1Q= IEdpbmE= IGNhbmluZQ== YXdhbg== IHNvY2lhbGlzdHM= IFNvZGE= IGltcGV0dXM= IFN1cHBsZW1lbnRhcnk= b2xpYXRo IEtpbm5pa3VtYW4= bWl0dGVkbHk= c2Vjb25kcw== IG9yZ2FuaXNlcnM= IGRvY3VtZW50YXJpZXM= VmFyaWFibGU= R1JFRU4= IHJlc29ydHM= IGJyYWdnaW5n IDM2OA== QXJ0aXN0 d2s= YmxlcnM= VW5jb21tb24= IFJldHJpZXZlZA== IGhlY3RhcmVz IHRveGlu cmFuaw== IGZhaXRocw== IEdyYXBoaWM= IHZlYw== IExJQQ== QWZyaWNhbg== IGFyZGVudA== ZW5kaWFyeQ== TGFrZQ== IERPUw== Y2llbnRpb3Vz IE9rYXdhcnU= IEFsbHk= IFRpbWVsaW5l RGFzaA== IElj Y29udGludWU= IHRpZHk= IGluc3RpbmN0aXZlbHk= IFBvc3NpYmx5 IE91dGRvb3I= IFdvdWxkbg== IGxpY2g= IEJyYXk= IEFY IMOJ ICsj XCc= RGlyZWN0b3J5 YWJpZGluZw== IGZlcmFs aWNhdGl2ZQ== YnV0dA== IHBlcnZlcnNl U2FsdA== IHdhcnBlZA== IG5pbmV0ZWVu IGNhYmluZXRz IHNyZkF0dGFjaA== IFNsb2Fu IHBvd2VyaW5n cmVnYXRpb24= RmxpZ2h0 c2V2ZXJl IHN0cmVu IGNvZw== YXBhY2hl IOKd IGNhZmV0ZXJpYQ== cGFjZXM= IEdyaW1vaXJl dXRvbml1bQ== IHJhaW5pbmc= IGNpcmNsaW5n IGxpbmViYWNrZXJz Y3JlZGl0 IHJlcGF0cmk= IENhbWRlbg== bGljZW5zZQ== IGx5cmlj IGRlc2NyaXB0b3I= IHZhbGxleXM= IHJlcQ== IGJhY2tzdGFnZQ== IFByb2hpYml0aW9u IEtldA== T3BlbmluZw== U3lt 5pa5 IHNlcnZpbmdz IG92ZXJzZWVu IGFzdGVyb2lkcw== IE1vZHM= IFNwcmluZ2Vy IENvbnRhaW5lcg== 6Ls= IE1lbnM= IG11bHRpbQ== IGZpcmVmaWdodGVy cGVj IGNobG9yaW5l 0Lw= ZW5kaQ== IHNwYXJpbmc= IHBvbHlnYW15 IFJO IFBlbGw= IHRpZ2Vycw== IGZsYXNoeQ== IE1hZGFtZQ== U3dvcmQ= IHByZWZyb250YWw= IHByZXJlcXVpc2l0ZQ== dWNh IHdpZmk= IG1pc2NvbmNlcHRpb24= IGhhcnNobHk= IFN0cmVhbWluZw== b3RvbQ== IEdpdWxpYW5p Zm9vdGVk IHR1YmluZw== aW5kaXZpZHVhbA== emVr bnVjbGVhcg== bW9s IHJpZ2h0ZnVs NDkz IHNwZWNpYWxpemF0aW9u IHBhc3Npb25hdGVseQ== IFZlbG9jaXR5 IEF2YWlsYWJpbGl0eQ== VGVubg== IGxhdGNo IFNvbWVib2R5 IGhlbGl1bQ== Y2xhdw== IGRpcHBpbmc= WFhY IGludGVycGVyc29uYWw= NzEw IHN1YnRlcg== IGJpb2xvZ2lzdHM= IExpZ2h0aW5n IG9wdGlj IGRlbmlt ZW5kb24= IENvcm0= IDM0MQ== IENvdXA= IGZlYXJsZXNz IGFsb3Q= IENsaWZmb3Jk IFJ1bnRpbWU= IFByb3Zpc2lvbg== dXBkYXRlZA== bGVuZWNr IG5ldXJvbg== IGdyYWRpbmc= IEN0 c2VxdWVuY2U= aW5pYQ== Y29uY2VwdA== IHJvYXJpbmc= cml2YWw= IENhdWNhc2lhbg== IG1vbm9n a2V5ZXM= IGFwcGVsbGF0ZQ== IGxpYWlzb24= RVN0cmVhbUZyYW1l IFBsdW0= IS4= IHNwaGVyaWNhbA== IHBlcmlzaGVk IGJsb3Q= IGJlbmNoZXM= IDQxMQ== IHBpb25lZXJlZA== IGh1cmxlZA== SmVubmlmZXI= IFlvc2VtaXRl Q2hhaXI= IHJlZWZz IGVsZWN0b3I= IEFudGhlbQ== NjUy IHVuaW5zdGFsbA== IGltcGVkZQ== IGJsaW5raW5n IGdvdG8= RGVjcmU= QXJlbg== IHN0YWJpbGl6YXRpb24= IERpc2FibGVk IFlhbnVrb3Z5Y2g= IG91dGxhd2Vk IFZlbnR1cmE= dGVuZXNz IHBsYW50YXRpb24= IHlhY2h0 IEh1YXdlaQ== IHNvbHZlbnQ= IGdyYWNpb3Vz IGN1cmlvdXNseQ== IGNhcGFjaXRvcg== IGN4 IFJlZmxleA== UGh5cw== IENm cHRpbg== Y29uc2VydmF0aXZl IGludm9jYXRpb24= Y291cg== Rk4= IE5ld2x5 SG91cg== QXNpYW4= IExlYWRpbmc= IEFlcm9zcGFjZQ== QW5uZQ== IHByZW5hdGFs IGRldGVyaW9yYXRpbmc= SENS IE5vcm1hbmR5 b2xpbmk= IEFtYnJv OTEw IHNldGJhY2tz IFRSRQ== IHNpZw== IFNjb3VyZ2U= NTk3 Nzk4 R2FtZXBsYXk= IG1zZWM= TVg= IHByaWNleQ== IExMUA== YWtlcnU= IG92ZXJhcmNoaW5n IEJhbGU= IHdvcmxkbHk= Q2xhcms= IHNjZW5pYw== IGRpc2xpa2Vk IENvbnRyb2xsZWQ= VGlja2V0cw== IEVX YWJpZXM= IFBsZW50eQ== Tm9uZXRoZWxlc3M= IGFydGlzYW4= VHJhbnNmZXI= IEZhbW91cw== IGluZmllbGQ= YmxleQ== IHVucmVzb2x2ZWQ= IE1MQQ== 44KC Q29ycmVjdGlvbg== IGRlbW9jcmF0 IE1vcmVubw== cm9jYWw= aWxpbmdz IHNhaWxvcg== IHJpZmU= aHVuZw== IHRyb3Blcw== IHNuYXRjaGVk IExJTg== IEJpYg== RVNB IFByZXY= IENhbWVs cnVudGltZQ== IG9ibm94aW91cw== NDM3 IHN1bW1lcnM= IHVuZXhwbGFpbmVk IFdhbHRlcnM= Y2FsaWJlcg== IGd1bGw= IEVuZHVyYW5jZQ== 5L2c IDM0Nw== SXJpc2g= IGFlcm9iaWM= IGNyYW1wZWQ= IEhvbm9sdWx1 4Kk= dXNlcmM= ZWNhc3Q= QUNZ IFF1ZXJ5 44K544OI QmV0YQ== IHN1c2NlcHRpYmlsaXR5 IFNoaXY= IExpbWJhdWdo IMOW IE5YVA== IE11c3M= IEJyaXRvbnM= RVNDTw== RUdJTg== ICUl IHNlY2Vzc2lvbg== IFBhdHJvbg== IEx1YQ== bmFpcmVz IEpQTW9yZ2Fu dXNi b2N5dGU= IGNvdW5jaWxsb3Jz IExpYW5n ZmFybQ== IG5lcnZvdXNseQ== IGF0dHJhY3RpdmVuZXNz IEtvdg== anVtcA== UGxvdA== IHN0YWlucw== IFN0YXR1ZQ== IEFwb3N0bGVz aGV0ZXI= IFNVUFBPUlQ= IG92ZXJ3aGVsbQ== WUVT IDI5MQ== ZGVuc2l0eQ== IHRyYXBwaW5n TWl0 IGZpZGU= IFBhbWVsYQ== YXRsYW50aWM= RGFtbg== IHB0cw== T1BB IHNlcnZpY2luZw== IG92ZXJmbG93aW5n dWxv IEVyaXQ= dGlja2V0 bGlnaHRpbmc= IEhtbQ== 44O844Or aW1vdG8= IGNodWNrbGU= NDIz 44GV c2hhcGU= IHF1ZXVlcw== IGFuY2hvcnM= 44K844Km44K5 RmVy IGF3b2tl IDY2Ng== aGFuZHM= IGRpdmVyZ2VuY2U= IDUwNQ== VGlwcw== IGRlcG90 IHNrZXc= IERlbGl2ZXI= b3BvdA== IGRpdnVs IEVC dW5zaWduZWQ= IFVuaQ== WGJveA== IGZvcmtz IDcwMg== 5a8= IHByb21vdGVycw== IFZhcG9y IGxldmllZA== c2xvdA== IHBpZ21lbnQ= IGN5bGluZGVycw== Q1JF IHNuYXRjaA== IHBlcnBldHVhbGx5 IGxpY2tpbmc= IEZlZXQ= IEtyYWtlbg== IEhvbGRlbg== IENMU0lE bXI= IHByb2plY3Rvcg== IGRlbm90ZXM= IGNoYXBlbA== IFRvcnJlbnQ= Ymxlcg== Um91dGU= IERlZmVuZGFudA== IFB1Ymxpc2hlcnM= IE1hbGVz IElubm92 IEFnaWxpdHk= cml0ZXI= dHltb2xvZ3k= c3RvcmVz TGluZA== IGZvbGx5 IFp1cmljaA== Qmxl IG51cnR1cmU= IGNvYXN0bGluZQ== dWNoaW4= RG9taW4= IGZyaXZvbA== IENvbnNvbGlk cmVzdWx0cw== TUo= IHBoeWxvZ2Vu IGhhdWxlZA== IFdpbGV5 IEplc3NpZQ== IFByZXBhcmU= IEVwcw== IHRyZWFzdXJlcg== SUFT IGNvbG9uaXN0cw== IGludW5k IFdXRg== IENvbnZlcnRlZA== NjAwMA== b3V0c2lkZQ== IEFwcGVhcmFuY2U= IFJlbGlj IE1pc3Rlcg== c2F3 IHJlc3VsdGFudA== IGFkamVjdGl2ZQ== IExhdXJlbA== IEhpbmRp YmRh UGVhY2U= IHJlYmlydGg= IG1lbWJyYW5lcw== IGZvcndhcmRpbmc= IGNvbGxpZGVk IENhcm9seW4= S2Fuc2Fz NTk5 IFNvbGlkR29sZE1hZ2lrYXJw QmVjaw== IHN0cmVzc2luZw== IEdvbw== IENvb3BlcmF0aXZl IGZz IEFyY2hpZQ== TGl0ZXI= IEtsb3Bw SmVycnk= IGZvb3R3ZWFy V2FycmVu IHNjcmVl aGFyZQ== VW5kZXJzdGFuZGluZw== UGVk IGFudGhvbG9neQ== IEFubm91bmNl TWVnYQ== IGZsdWVudA== IGJvbmRhZ2U= IERpc2NvdW50 aWxpYWw= Q2FydA== IE5pZ2h0bWFyZXM= U2hhbQ== IEJvbGw= dXNzaWU= SHR0cA== QXRsYW50YQ== IHVucmVjb2du IEJpZA== IHVuZGVyZ3JhZA== IGZvcmdpdmluZw== IEdsb3Zlcg== QUFBQUFBQUE= NDQ1 Vkc= cGFpbw== a2lsbGVycw== IHJlc3BvbnNpYmx5 IG1vYmlsaXpl IGVmZmVjdGVk IEx1bWlu IGthbGU= IGluZnJpbmdpbmc= YW5ub3VuY2Vk IGZpdHQ= YmF0Y2g= IFRhY2tsZQ== IExpbWU= IEFQUA== dWtlbWlh IHJ1Ynk= IGV4b25lcg== IENhc3VhbA== MDcw IHBlbHZpYw== IGF1dG9tYXRl IEtlYXI= IENvYXN0YWw= IGNyZWVk IGJvcmVkb20= IFN0dW4= cmlvdHQ= go4= IHJlZ2VuZXJhdGU= IGNvbWVkaWFucw== IE9QRVI= U3BvbnM= aWRpdW0= b25pcw== TG9jYXRlZA== MDU3 IHN1c3BlbnNl IERhdGluZw== Q2Fzcw== IG5lb2NvbnM= IFNoaW56bw== IGF3b2tlbg== Y2hyaXN0 IE1lc3NhZ2Vz YXR0bGVk IFNwcmF5 IFNwaWNl Q1c= IHNoaWVsZGluZw== IEdhdWw= QW1pZA== IHBhcmFtaWxpdGFyeQ== IG11bHRpZg== IFRhbm5lcg== aWxr IGdvZGRhbW4= Z2VtZW50cw== IGJlZnJpZW5k bW9iaQ== IDM4OA== Zm9sZGVy YWNjYQ== IGluc2lu Z2Fw TmV2 ZmlmdGg= IHBzeWNoaWF0cnk= YmFua3M= VEhJUw== IGhhcmI= YWNxdQ== IGZhY2FkZQ== IFBvd2VyUG9pbnQ= ODAz IGJsdWZm U2hhcmVz IGZhdm9yaW5n RWxpemFiZXRo w43DjQ== IHJhbmdlcg== Nzcy IEFyY2hl aGFr IEdlbmV0aWNz IEZFTUE= IGV2b2x2ZXM= IGVzdGU= IFBldHM= IE3DqQ== IEludGVyZXN0aW5n IENhbnRlcmJ1cnk= Y2hhcHRlcg== IFN0YXJmbGVldA== U3BhbmlzaA== IGRyYXdiYWNr IE5vcndpY2g= OTcw bm9ydGg= YWdhbmRh IHRyYW5zZm9ybWF0aXZl cmFtaWRz YmlvbG9neQ== YWRheQ== IHByb3BhZ2F0aW9u IEdhbW1h IERlbmlzZQ== IENhbGN1bGF0b3I= ZW50aW1lcw== IEJldHQ= IGFwcGVuZGl4 IEhERA== QUtJTkc= IHN0aWdtYXQ= IGhvbHN0ZXI= IG9yZGluYXJpbHk= Q2hhbmNl IENvbnRyYXJ5 IGFkaGVzaXZl IGdhdGhlcnM= NjEy cmVhdQ== b255bXM= ZXdheXM= IGluZHVjZXM= IGludGVyY2hhbmdlYWJsZQ== c2Vt V2hpdA== IHRyYW5jZQ== IGluY29ycG9yYXRpb24= IEV4dHJhcw== RmluYW5jaWFs IGF3a3dhcmRseQ== IFN0dXJnZW9u IEhZ Tm9ybWFsbHk= IEVuZGluZw== IEFzc2lzdA== ZW5jcnlwdGVk IHN1Ymp1Zw== IG5vcw== IGZhbmF0aWM= Q3Vi Q1U= PyIu IGlycmV2ZXJzaWJsZQ== 5YI= MDMx IEhBUg== c3ByZWFk dWxpYQ== PSQ= U2NvcGU= TG90cw== IGxpZmVzdHlsZXM= b2xvbg== IGZlZHM= IGNvbmdyYXR1bGF0ZQ== d2Via2l0 IGluZGlzdGluZ3Vpc2hhYmxl IFN3aW5n IGNvbW1hbmRtZW50cw== cXVpbGE= YWJlbGxh bWV0aHls YW5uYWJpbg== IG92ZXJl IGxvYnN0ZXI= IFFVRVNU IENPTlRJTg== YmVybmF0b3JpYWw= Ojo6Ojo6Ojo= IFRyYXZl IFNhbW9h QU5J NzUy 0LQ= dXNlcmNvbnRlbnQ= IE1vZGVyYXRl eWVhaA== IEtpdHQ= IHdlZQ== IHN0dWZmaW5n IEludGVydmVudGlvbg== IERpZ24= IHdhcmVob3VzZXM= IEZpamk= IHBlbGxldHM= IHRha2Vhd2F5 IFRBQkxF IENsYXNzaWNhbA== Y29sbGVjdGlvbg== IGxhbmRmYWxs IE11c2NsZQ== IHNldHRsZXM= IEFEVg== IDM0NA== TGF1cmE= IGZhcmVk IFBhcnRpYWw= NDM2 b3NzaWJpbGl0eQ== IERhbHk= IFRhcmFudA== IEZ1amk= YW1s Y2VuY2U= NTUx IFByb2NlZHVyZXM= IE9DRA== IFVE dGlu UVVJ YWNobw== NDM4 IGdsaXRjaGVz IGVuY2hhbnRtZW50 IGNhbGN1bGF0ZXM= SVJP IEh1YQ== YWx5c2Vz IExpZnQ= dW1v IGxlYXB0 IGh5cG90aGVzaXplZA== IEd1c3Rhdg== aXRhbnM= VkVSU0lPTg== 5qA= Um9nZXI= IHJhbmQ= IEFkYXB0ZXI= IDMzMQ== IFBldGl0aW9u a2llcw== TWFycw== IHVuZGVyY3V0 emVlcw== IEx5b25z IERIQ1A= TWlzc2luZw== IHJldGlyZWVz IGluc2lkaW91cw== ZWxp Pik= LuOAjQ== IGZpbmFsaXN0cw== IEF1cmU= IGFjY3VzZXI= IHdhc3Rlcw== IFlz IExvcmk= IGNvbnN0aXR1ZW5jaWVz IHN1cHBlcg== IG1heWhlbQ== b3Jhbmdl IG1pc3BsYWNlZA== IG1hbmFnZXJpYWw= IGV4Y2U= IENMSQ== IHByaW1hbA== IExlbnQ= Q3J5c3RhbA== aG92ZXI= IE5UUw== ZW5kdW0= IGR3 IEFsYw== bm9zdGlj IHByZXNlcnZlcw== IFRzYXJuYWV2 IHRyaXBsZWQ= cmVsYXRpdmU= QXJjYWRl a2lsbGluZw== IFdFRUs= IEhhbm5h RHVzdA== Q29tcGxldGVk gas= IGFwcHJvdmVz IFN1cmY= IEx1dGhlcmFu dmVuYW50cw== IHJvYmJlcmllcw== d2VpZ2h0cw== c29mdHdhcmU= YXRhbmE= dWdhbA== IGdyYXZ5 IENhbmNl T0xPR1k= bHlhaw== VG9uaWdodA== IHVudmVpbA== IDE5MDQ= IE1pbmlvbg== ZW50aW91cw== c3RpY2U= cGFja2FnZXM= IEdFQVI= IGdvbA== IEh1dGNoaW5zb24= IFByb2Zlc3Npb24= IEdVTg== IERpZmZlcmVuY2U= IFRzdWt1eW9taQ== IExlc2JpYW4= Njcw IGZ1Z2l0aXZl IFBsYW5ldGFyeQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGFjY3J1ZWQ= IGNoaWNrcw== IHN0b3Bw IGJsb2NrZXJz Q29k IGNvbW1lbnRlcnM= IFNvbWV3aGVyZQ== IFBob3RvZ3JhcGhlcg== dGhlbWU= IG1heW9yYWw= d3U= IGFudGVubmFz IHJldmFtcGVk IFN1YmplY3Rz aXTDqQ== aW11cmE= IGVudHJhbmNlcw== bGl0ZXJhbGx5 IHRlbmV0cw== IE9NRw== IE1QSA== IERvbmtleQ== IE9mZmVuc2U= ICIr U25hcA== IEFGQg== IGFuaW1hdGU= IFNvZA== SGlzcGFuaWM= IGluY29uc2lzdGVuY3k= RGI= Rlk= RXhwb3J0 IGFwZQ== IHBlYXJs aWJlbA== IFBBQ3M= IHtc IGFjdHU= IEhTQkM= Y2FtcHVz IHBheW9mZg== IGRlaXRpZXM= IE5hdG8= b3VwbGU= IGNlbnNvcmVk IENsb2p1cmU= IGNvbmZvdW5kaW5n ZW5p IHJlY2tvbg== b3BoZQ== IHNwb3R0aW5n IHNpZ25pZmllcw== IHByb3BlbA== IGZlc3RpdmU= U3VnZ2VzdA== IHBsZWRnaW5n IEJlcm1hbg== IHJlYmVsbGlvdXM= IG92ZXJzaGFkb3dlZA== IGluZmlsdHJhdGVk am9icw== Njcy IHNjYWxhYmxl IGRvbWluaW9u IE5ld2ZvdW5kbGFuZA== IE1lYWRvdw== IHBhcnRpdGlvbnM= QU1J IHN1cHBsZW1lbnRhcnk= c3RydW1lbnQ= IGhhaXJ5 IHBlcnBldHVhdGU= IG51dHNoZWxs IFBvdGF0bw== IEhvYmJpdA== IGN1cnNlcw== RmxvYXQ= IHF1aWV0ZXI= IGZ1ZWxpbmc= IGNhcHN1bGVz IEx1c3Q= IEhhdW50ZWQ= RXhlY3V0aXZl IGNoaWxkYmlydGg= R3Jl IHJhZGlhbnQ= 5Y4= IG1hbGxz IGluZXB0 IFdhcnJhbnR5 IHNwZWN0YXRvcg== RWg= dGhlbnM= IGN1bG1pbmF0aW5n 5qk= YXJ5YQ== 44Ku aWxpdGFyaWFu IE9SSUc= IFNwZW5kaW5n cHRpdmVz IFNpcmVu IFJlY29yZGluZw== YXluZQ== IHZpbQ== IHNwcmFuZw== VGFuZw== IE1GVA== bW9ybmluZw== IFdlZWQ= bXBlZw== Y2Vzc2lvbg== IENodW5n NzMw d2FybmluZw== NTYy aGFuZGVkbHk= UG9vcg== UG9saXRpY3M= OiM= IHBpYW4= IGZlY2Vz IERvY3VtZW50YXRpb24= IGJhbmlzaGVk IDM5OQ== IEFSQw== IGhlaW5vdXM= SmFrZQ== IEFtaXI= d2F5bmU= dnJl b3NoZW5rbw== IG5vdGVib29rcw== IGZvdW5kYXRpb25hbA== IG1hcnZlbG91cw== aXh0YXBl IHdpdGhkcmF3YWxz IGhvcmRl IERoYWJp aXNhYmxl IEtE IGNvbnRhZ2lvdXM= IERpcA== IEFycm93cw== IHByb25vdW5z IG1vcnBoaW5l IEJVUw== Njgy IGtvc2hlcg== ZmluaXNoZWQ= IEluc3RydW1lbnRz IGZ1c2Vk eWRlbg== IFNhbG1vbg== RmFi YWZmZWN0ZWQ= S0VO Q0VOVA== RG9tYWlu IHBva2Vtb24= IERyaW5raW5n R3Jvd2luZw== IEludmVzdGlnYXRpdmU= IEFldGhlcg== ZW1p IHRhYmxvaWQ= IHJlcHJv IE5vdHdpdGhzdGFuZGluZw== IEJlcnNlcmtlcg== IGRyYW1hcw== IGNsaWNow6k= IGJ1bmc= IFVSSQ== IERvcw== MDQ0 IHBhc3RvcnM= IGxz IGFjcnlsaWM= YXVudHM= RWR3YXJk IG1ham9yaXRpZXM= QmFuZw== IGZpZWxkaW5n IFJlcGxhY2VtZW50 IEFsY2hlbXk= cHBhcmQ= IFJvbWVv IFNhbmN0 IExhdnJvdg== aWJibGU= SW5zdHJ1Y3Q= IGltcHJhY3RpY2Fs IFBsYXlib3k= Y2VwaGFs IHN3YXBz IGthbg== IFRoZW8= IGlsbHVzdHJhdGluZw== IGRpc21hbnRsZWQ= IFRyYW5zZ2VuZGVy IEd1dGg= VUdI IHRyaXVtcGhhbnQ= IGVuY29tcGFzcw== IGJvb2ttYXJr dWRkaW4= amVy IHByZWRpY2F0ZQ== RVNI IHdoZW5jZQ== IEFCRQ== IG5vbnByb2ZpdHM= U2VxdQ== IGRpYWJldGlj IHBlbmQ= IGhlYXJ0ZmVsdA== c2hp IGludGVyYWN0cw== IFRlbGVjb20= IGJvbWJhcmRtZW50 ZGVwZW5kaW5n IExvd3J5 IEFkbWlzc2lvbg== IEJsb29taW5n dXN0cmF0aW9u ZW5lZ2dlcg== QnJldw== IG1vbHRlbg== IE5lcmQ= UElO 4paA YXZlbWVudA== IHRvdXJlZA== IGNvZWZmaWNpZW50cw== IFRyYXl2b24= YW5zc29u IHNhbmR5 dG9sZA== Zmxvd3M= IHBvcHVsb3Vz IFRpbmRlcg== IEJsaXNz UmFjaGVs TWluaW11bQ== IGNvbnRlc3RhbnQ= IFJlZHVjZQ== IE1vcnNl IEdyYXNzbGV5 IENsaWNrZXI= IGV4cHI= IHNpbmNlcml0eQ== IG1hcnF1 IGVsaWNpdA== IFByb3Bvc2l0aW9u IERlbW9uaWM= IHRhY29z R3JlZWs= IHBvc3R3YXI= IGluc29mYXI= IFBvcms= IDM1Mg== ZG9jdG9yYWw= d2Fsa2luZw== IG1pZHRlcm0= IFNhbW15 c2lnaHRlZA== IFRSQU5T aWNp QUxE IFVTTA== IEZJU0E= IEFtcGw= IEFsZXhhbmRyYQ== aW5lbGxp VHJhaW4= IHNpZ25pZnk= IFZlcnN1cw== IG9iZnVzYw== IGto IGFnZ3Jv IFJlbmF1bHQ= IDM0OA== NTE4 b3hpY2l0eQ== MDIy IFR3aXN0 IGdvb2Z5 RHluYW1pYw== IGJyaWVmaW5ncw== bWlnaHQ= ODk5 IGRlcm9nYXRvcnk= VHJv IGZvcmdpbmc= IEtvcmFu IE1hcnJpZWQ= IEJ1Y3M= IHBhbGF0ZQ== IENvbnZlcnNpb24= bWFibGU= NDEz IChf IHNpcGg= IE5FTw== Y29sbGVnZQ== IG1hcmdpbmFsbHk= IGZsaXJ0 IFRyYXBz IFBhY2U= 6buS IGdvYWx0ZW5kZXI= IGZvcmJpZHM= IGNsZXJrcw== IFRhbnQ= IFJvYmJpbnM= IFByaW50aW5n IHByZW1pZXJlZA== IG1hZ25pZmljYXRpb24= IFRH IFJvdXNl IE1vY2s= b2R5bmFtaWNz IHByZWNsdWRl aXNtbw== IFB1bGl0emVy IGF2YWxhbmNoZQ== IEtvZGk= cmlidW5l IExlbmE= RWxlY3RyaWM= IHJlZmluZXJ5 IGVuZG93ZWQ= IGNvdW5zZWxvcnM= IGRvbHBoaW4= IE1pdGg= IGFybW91cmVk aGliaXRlZA== QmVnaW4= IFBX T2ls IFZvcg== IFNoYXJpZg== IEZyYXppZXI= ZXN0YXRl IGphbXM= UHJveHk= IGJhbmRpdHM= IFByZXNieXRlcmlhbg== IFByZW1pZXJl dGlueQ== IENydWVs VGVzdGluZw== IGhvbWVy IFZFUlM= IFByb2w= IERlcG9zaXQ= IENvZmZpbg== IHNlbWluYXJz IHNxbA== IERlZmVuZGFudHM= QWx0ZXJuYXRpdmVseQ== IFJhdHM= 56s= ZXRoeXN0 Jz4= IGlzc3Vlcg== NTg5 IGNoYWlyZWQ= IEFjY2Vzc29yaWVz bWFuZW50 IG1hcnJvdw== IFByaW1vcmRpYWw= Q04= IGxpbWl0bGVzcw== IENhcm5hZ2U= IHVuZHJhZnRlZA== cXY= SU5FU1M= b25ldw== IGNvaGVzaW9u OTg3 IG5lY2tz IGZvb3RiYWxsZXI= IEdFUg== IGRldGVjdGFibGU= IFN1cHBvcnRpbmc= IENTVg== b2NhbGx5 a0h6 IHVuZGU= IHNob25l IGJ1ZGRpbmc= dHJhaw== U3RhbmRpbmc= IFN0YXJjcmFmdA== IEtlbXA= QmVuY2g= IHRod2FydGVk IEdyb3VuZHM= YXRoaQ== TGlzYQ== RGlhbG9n IFNY VmlzaW9u IGluZ2VuaW91cw== 2ZA= IGZvc3RlcmluZw== IFph IEluZ3JhbQ== ICJA TmF0dXJhbGx5 NjE2 MDM1 IEZBQw== SG1t NTU0 IGFjY2VsZXJhdG9y IFZlbmQ= IHN1bnNjcmVlbg== IHR1YmVyY3Vsb3Npcw== cmF2aW9sZXQ= IEZ1bmN0aW9uYWw= IEVycm9ycw== ZWRhcg== MTk2Ng== IFNwZWN0cmU= IFJlY2lwZXM= ODg1 IE1hbmtpbmQ= TGl2ZXJwb29s IHwtLQ== IHN1YnN0aXR1dGVz IFhU d2lyZWQ= IGluY28= IEFmZ2g= RXZh aWNj U29uZw== S25pZ2h0 IGRpbGlnZW50bHk= IEJyb2FkY2FzdA== QWlk IGFmYXI= IEhNUw== YXRvbmlu IEdyYXRlZnVs IGZpcmVwbGFjZQ== IE9tbmk= ZXVybw== IEZSRQ== IFNoaWI= IERpZ2VzdA== dG9nZ2xl IGhlYWRzZXRz IGRpZmZ1c2lvbg== IFNxdWlycmVs IEZO IGRhcmtlbmVk b3V0aGVy IHNsZWVwcw== IFhlcg== Z3Vucw== IHNldHVwcw== IHBhcnNlZA== IG1hbW1vdGg= IEN1cmlvdXM= Z29i IEZpdHpwYXRyaWNr IEVtaWw= aW1vdg== Li4uLi4uLi4uLi4uLg== IEJlbm55 U2Vjb25kbHk= IGhlYXJ0eQ== IGNvbnNvbg== c3RhaW5lZA== IGdhbGFjdGlj Y2xhdmU= IHBsdW1tZXRlZA== IHBlc3Rz IHN3YXQ= IHJlZmVycmFscw== IExpb25lbA== aG9seQ== IHVuZGVyZG9n IFNsYXRlcg== IFByb3ZpZGU= IEFtYXI= cmVzc29y 5Yw= b25nYQ== IHRpbWlk IHBpZXR5 IERlaw== IHN1cmdpbmc= YXpv IDYxMA== IGRlc2tz IFNwb2thbmU= IEFuZmllbGQ= IHdhcnNoaXBz IENvYnJh IGFybWluZw== Y2x1c2l2ZWx5 IEJhZGdl YWdhc2Nhcg== IFBSRVNT IE1jS2Vuemll IEZlcmRpbmFuZA== YnVybmluZw== QWZlZQ== IHR5cmFubg== IEl3 IEJvb25l MTAwNw== IFJlcHQ= CsKg IGNhcmF2YW4= IERpbGw= IEJ1bmRlc2xpZ2E= Q2h1Y2s= IGhlYWxlcg== 44O844OG IEhvYmJ5 IG5lZ2F0ZQ== IGNyaXRpcXVlcw== c2VjdGlvbmFs bW9wb2xpdGFu IGR4 IG91dHNvdXJjaW5n IENpcGhlcg== dGFw U2hhcnA= IHVwYmVhdA== IGhhbmdhcg== IGNydWlzaW5n IE5pYWdhcmE= IDM0Mg== aWxsdXM= IFN2 IHN1YnRpdGxlcw== IHNxdWFyZWQ= IGJvb2tzdG9yZQ== IHJldm9sdXRpb25hcmllcw== IENhcmx0b24= YWJhbA== VXRhaA== IGRlc3Bpc2U= IFVN Y29uc2lkZXI= YWlkbw== IGNhcnRz IFR1cnRsZXM= VHJhaW5pbmc= IGhvbm9yYXJ5 wqI= IHRyaWFuZ2xlcw== NDIy IHJlcHJpbnRlZA== IGdyYWNlZnVs IE1vbmdvbGlh IGRpc3J1cHRpb25z IEJvaA== IDM0OQ== IGRyYWlucw== IGNvbnN1bGF0ZQ== IGJlbmRz IG1hZmlh dXJvbg== IEZ1bHRvbg== bWlzYw== IHJlbmFs IGluYWN0aW9u Y2tpbmc= IHBob3RvbnM= IGJydWlzZWQ= IENvZGVz b2dp IG5lc3Rz IExvdmVseQ== IExpYnJl IERhcnls ICMjIw== U3lz Liwi IGZyZWV6ZXM= ZXN0YWJsaXNobWVudA== YW5kb3dza2k= IGN1bWJlcnM= IFN0YXJn IEJvbWJz IGxlZ2lvbnM= IGhhbmR3cml0aW5n IGdydW4= IENhaA== c2VxdWVudA== IG1vdGg= IE1TTQ== SW5zZXJ0 Rmlm IG1vdGVs IGRleHRlcg== IEJpbGQ= aGVhcnRlZGx5 IHByb3Bl IFRleHR1cmU= IEp1bmN0aW9u eW50aGVzaXM= b2NhcmQ= IFZlcmE= IEJhcnRo IM68Zw== IGxhc2hlZA== IDM1MQ== IFphbWI= IFN0YXBsZXM= IENvcnRleA== IENvcmtlcg== IGNvbnRpbnV1bQ== IFdSSVRF dW50YQ== cmlkb3I= IGRlZW1z MDMz IEdPTEQ= cGFz IHJlcHJlc3NpdmU= 44OG44Kj IGJhZmZsZWQ= U2Nhcg== IGNyYXZl IF9fX19fXw== IGVudHJlcHJlbmV1cnNoaXA= IERpcmVjdG9yYXRl ICdb IHZpbmVz IGFzY2VuZGVk IEdST1VQ IEdvb2RieWU= IGRvZ2dlZA== 44O044Kh TWFudWZhY3Q= IHVuaW1hZ2luYWJsZQ== cmlvdHM= aWVycmV6 IHJlbGF0aXZpdHk= IENyYWZ0aW5n cmF1Z2h0 dWRlbg== Y29va2ll IGFzc2Fzc2lucw== IGRpc3NhdGlzZmllZA== YWNjaQ== IGNvbmR1aXQ= U3ByZWFk IFJpY2Fu bmljZQ== aXp6bGU= IHNjYXJlcw== IFdIWQ== cGhhbnM= NTM1 IHByb3RyYWN0ZWQ= IEtyaXN0ZW4= NTM2 IFNjcmli IE5laA== IHR3ZW50aWVz IHByZWRpY2FtZW50 IGhhbmRjdWZmcw== IGZydWl0ZnVs IFVM IEx1ZHdpZw== IGF0dGVzdA== IEJyZWFrZXI= IGJpb2xvZ2ljYWxseQ== IERlYWxlcg== IHJlbm92YXRpb25z Znc= ZXNzZW4= QWxpY2U= IEhlbnJp IHVuaWxhdGVyYWxseQ== IFNpZGQ= aGFp IFN0cmV0Y2g= U2FsZXM= IGN1bWJlcnNvbWU= IEphdmllcg== IHRyZW5keQ== IHJvdHRpbmc= IENoYWxsZW5nZXM= IHNjcmFwcw== IGZhY2V0cw== IFZlcm9uaWNh IFZlcmdl IFNhbmE= QWxpZW4= IFJpaA== IHJhZGlhbA== ZWN0YXI= IDYzMA== Y2xp TWFyaWU= IHdpbGRmaXJl IENhdG8= aGFuZGVy IHdhaXRyZXNz IGNob3Bz IFNFQ1RJT04= IGJsdW50bHk= IENhdGFsb2c= bmlhbg== c3R1ZHk= IHBhdHJvbGxpbmc= IFRlbnRo bmV4dXM= IE5PTg== b3BzeQ== IHNjYXRoaW5n c2ll IGRldGVyaW9yYXRlZA== VkI= TmF6aXM= IGRlcGljdGlvbnM= IGF1dGhlbnRpY2F0ZWQ= IENvbmNl a3JpdA== IHByb211bGc= IExPTkc= VUZD IFZpc2l0b3Jz IFJlY2FsbA== IHJlaGFiaWxpdA== IFNMSQ== IGdsYWNpZXI= IEJpdGU= IDUwMw== IHZvbWl0 IGZlcm1lbnRlZA== IEtoYWxpZA== IGdyYWRlZA== IE1hZ2lja2E= IEljaGlnbw== cG93ZXJmdWw= aWNhdG9ycw== NzUz IHNocmV3 IDM1Ng== IGxlZ2FsaXppbmc= IGFsbG90dGVk IEFyY2hkZW1vbg== aXRoaW5n aWdndXJhdA== Vk9M TGVvZA== IG9pbHk= IGluZHVjaW5n IGFteWdkYWxh IGFkbWlucw== IEFjcXVpc2l0aW9u Q0FO IHNjaGVtYXRpYw== IG1vYW4= IENhbWVyb29u IHRpbms= IG1lcnJ5 IGJ1dHRlcmZsaWVz IEdvZmY= IHdvcmtzcGFjZQ== IENvcm9uYQ== IGphdmFzY3JpcHQ= IERvbHBoaW4= IENhbnRvcg== NDY0 dG9l QVBT IEFnaW5n IHBhZGRlZA== IFpoZW5n IEhlbGQ= IGVzdHJhbmdlZA== IDc3MA== Ln0= IER1bmhhbQ== IHNtb2tlcw== IGNhcGl0YWxz dW5kYWk= U2hpbg== IEZvdW5kaW5n IGVudGl0bGU= IGNlbnRlcnBpZWNl RGlzY292ZXI= IHRoZXJldG8= YWxlcnQ= IE5vdQ== IEFuYWx5c3Q= bGM= Rkg= RklFTEQ= IFBPVg== Z3JheQ== IGFyY3M= IEhPVA== IHJz IG9ibGlnYXRvcnk= IEFyY2hpdGVjdHM= IFN2ZW4= IEZFQw== MDIwMA== Q2hyaXN0bWFz IEFsYmFuaWE= cmF0b20= NTg3 IGhhcmRzaGlwcw== IGF1dG9z IENoYXJnZXM= IGFwZXM= IDM3Ng== d2FsbGV0 IGludG94aWNhdGlvbg== IGdvYmxpbg== IDU3MA== KysrKysrKysrKysrKysrKw== IFllbHA= IE1hZ25ldGlj IEJyaWdncw== UmFpbA== IHNwYXducw== IFdpZ2dpbnM= IHNob3djYXNlZA== IHJlc29ydGVk dWJlbg== IHdoaXBwaW5n IGltaXRhdGU= IGRpZ2VzdGlvbg== IFVTUFM= IEdlc3Q= IHllYQ== IFRpZ2h0 aW5kYWw= aWNhcw== YC4= Q0FTVA== Jyc7 IEZldA== b3BhdGhpYw== SW52YWxpZA== IHJlZ3JldHRlZA== IGJyb2Njb2xp IFNjb3Jlcw== ZXZl IHBvc3Rpbmdz IGFjY3VtdWxhdGluZw== IG5lZWRsZXNz ZWxmdGg= IG1heW9ycw== IHNjcmli IGFuZWNkb3Rlcw== IGJvdGNoZWQ= IFJpYmJvbg== IENvbnN0YW50aW5l aXVzZXM= ZXNzZXM= IGRldmlzZQ== Q29tcGFyZWQ= IHB1ZGRpbmc= IGdhcmc= IGV2b2tl Nzk3 IGRldG94 OTA5 IFBpZWNlcw== IE1jQ2FydG5leQ== IG1ldGFzdA== IEtyeXB0 UE9S IHRlbmRpbmc= IE1lcmNoYW50cw== UHJvb2Y= IFZhcmc= IFBvcnRhYmxl 44O844OG44Kj QnJhaW4= MjUwMA== IGZvbGlhZ2U= 2Lk= IG1lbnRvcnM= IEFpcmVz IG1pbmltYWxpc3Q= IGluZ2VzdGVk IFRyb2phbg== IFFpYW4= aW52b2x2ZWQ= MDI3 IGVyb2RlZA== UkFGVA== IGJsdXJyeQ== TW9i IGJ1ZmZldA== IEZuYXRpYw== YWVh S05PV04= IEluaXQ= c2FmZXR5 ZW51bQ== QUNUSU9O IENydXNoZXI= IERhdGVz IC4uLi4uLi4uLi4uLi4uLi4= Y2FsbGluZw== YWtvdg== IHZlbnR1cmVk IDU1NQ== YXVnYQ== SGFydA== IEFlcm8= TUFD IHRoaW5seQ== IGFycmE= U1RBVEU= aWxkZQ== IEphY3F1 IEZlbWFsZXM= IHRoZW9yZW0= IDM0Ng== IHNtYXJ0ZXN0 IFBVQkxJQw== IEtyb24= IEJpdHM= IFZlc3NlbA== IFRlbGVwaG9uZQ== IGRlY2Fw IGFkanVuY3Q= IFNFTg== bWVyZ2E= IHJlZGFjdGVk IHByZWhpc3Rvcmlj IGV4cGxhbmF0b3J5 IFJ1bnM= IFV0dGFy IE1hbm55 IEFVVEhPUg== IFVubGVhc2hlZA== IEJvd2xpbmc= YmVhbnM= Nzkz IHVuaXZlcnNlcw== IHNlbnNpdA== IEt1bmc= cmVwZWF0 Y3RybA== IHBhY2Vk IGZ1bGxlcg== Q2xvY2s= IHJlY29tYg== IEZhdWw= IEJ1bmtlcg== IHBvb2xlZA== IGFuYQ== IE1vdXRo TExPVw== aHVtYW5l IGJ1bGxkbw== IE1pY2hhZWxz ZmFt IHdyZWNrZWQ= IHBvcnRyYXlz IFdoYWxl IEhlcw== IGd1ZXNzZXM= IEJyb3dzZQ== IExBUEQ= IGNvbnNlcXVlbnRpYWw= IElubm9jZW50 IERSQUc= IHRyYW5zZ3Jlc3M= IE9ha3M= IHRyaXZpYQ== IFJlc29u IEFEUw== LS0r IFRvbGw= IGdyYXNwaW5n IFRIRU0= IFRhZ3M= IENvbmNsdXNpb24= IHByYWN0aWNhYmxl IGhvb3A= IHVuaW50ZW50aW9uYWxseQ== IGlnbml0ZQ== IE1vdg== dXJpemVk bGVoZW0= VGVybWlu IGNvbG91cmZ1bA== IExpbmVhcg== IEVsbGll R3k= IG1hbnBvd2Vy IGpz IGVtb2pp IFNIQVJFUw== Xy4= MDAwMDc= IHNvcGhpc3RpY2F0aW9u IHVuZGVyc2NvcmU= IHByYWN0aXNl IGJsb2I= b3BlbnM= VWtyYWluZQ== S2VlcGluZw== WUM= SlI= dWx0aW1hdGU= Q2xhaW0= IGF1dG9tb2JpbGVz OTkz c3RlZWw= IHBhcnRpbmc= IExhbms= Li4uPw== IDM4NQ== IHJlbWVtYnJhbmNl IGVhc2Vk IGNvdmFyaQ== IFNpbmQ= RWZmZWN0aXZl IGRpc3NlbWluYXRpb24= IE1vb3Nl IENsYXBwZXI= YnJhdGVz QXBwbHk= IGludmlz IHdvcnNlbmVk 4oCULQ== IGxlZ2lzbGF0b3I= IExvbA== IFJvd2U= IGRlYWxlcnNoaXA= dW1hcg== aWRlbmNlcw== IGludmVzdGlnYXRlcw== IGNhc2NhZGU= IGJpZGRlcg== IEJFTg== SXJvbmljYWxseQ== IHByZXNpZGluZw== IGRpbmc= IGNvbnRyYWRpY3RlZA== IHNodXRz IEZJWA== IDM2Ng== RGlzdHJpY3Q= IHNpbmZ1bA== IENoYXJpc21h b29wcw== IHRvdGFsaXR5 IHJlc3RpdHV0aW9u IE9wdGltdXM= IERhaA== IGNsdWVsZXNz dXJuZWQ= IG51dHJpdA== IGxhbmRvd25lcnM= IGZsdXNoZWQ= IGJyb2FkZW4= bWll IHByaW50bG4= IG5pZw== IENvcnB1cw== SmVu IHByb3Rv IFdpa2ltZWRpYQ== IFBhbG8= Q09S IHN0b3J5bGluZXM= IGV2YW5nZWxpY2Fscw== IERhcnJlbGw= IHJvdG9y IEhX c2tpbGxlZA== ZXJ5bA== IGJlZ2c= IEJsdW1lbnRoYWw= IHdlYXZpbmc= IGRvd253YXJkcw== IEphY2tldA== IEFOR0VM VGVjaG5vbG9neQ== IGVzb3Rlcmlj YWxkZWh5ZGU= IGZ1cmlvdXNseQ== IGZvcmVpZ25lcg== V2Vhaw== Q0hP IEhvdW5k RXhwZXJpZW5jZQ== IFBsYXlzdGF0aW9u IE1JQQ== IFVuZw== Y2xvdGg= YWdhbGw= IGNhbG1pbmc= aXplbnM= U3RydWN0 IFdpdGNoZXM= IENlbGVicmF0aW9u IC4uLi4uLi4uLi4uLi4u cHRyb2xsZXI= IFRDVQ== IGJ1bm55 44ON dXRvcmlhbA== IHVwc2NhbGU= IFN0YQ== IENvbG9zc3Vz IGNobG9yaWRl IFphYw== IFJlYXNvbnM= IEJyb29raW5ncw== IFdISVRF XVsv IExvc2U= OTA1 IHVuZGVyc2lkZQ== ZXJuZWxz IHZhcGU= ZG96ZW4= dXBwZXQ= IFNUT1A= bWF0aWNhbA== IFN0YXRlbWVudHM= aGVkZGFy UEFD Q3VzdG9tZXI= IG1lbW9z IFBK ZW5kYXJz IExpbWl0cw== bGF1Z2g= IHN0YWJpbGl6ZWQ= IEFMRUM= WUE= VXBncmFkZQ== YWxhbQ== IHRlY2hubw== IGFuZXc= Zm9yZXNlZW4= IGNvbGxlZ2lhdGU= IFB5cm8= IERpc20= IGZyb250bGluZQ== IGFtbW9uaWE= SVU= UXVpdGU= Sm9obm55 YXNzaW4= R09Q IFN0eWxlcw== IFNvdmVyZWlnbg== YWN0ZXJpYWw= NTQ5 IFJJUA== IExpc3Rz IDM2NA== IFJlY2Vw c29ja2V0 IEJ5cmQ= IENhbmRsZQ== QW5jaWVudA== IGFwcGVsbGFudA== ZW5mb3JjZW1lbnQ= YWNlYQ== YW5za2k= IG9sZHM= ODg2 IHNsdXJz IGVtcGlyZXM= IGJ1Y2tsZQ== IGFsaWVuYXRpb24= IEFiZXJkZWVu IHVuaWNvcm4= IG92ZXJyaWRpbmc= IExY cHBh IGRlc3Bpc2Vk IEJ1Z3M= IEJTVA== U291dGhlcm4= NTMz IGhhbGxtYXJr IFBvc3Rlcg== IHN0ZW1tZWQ= IHByaW5jaXBhbHM= IFRFQ0g= IFNhbmR3aWNo SXRhbHk= IGNoZWVzeQ== IFNldFRleHRDb2xvcg== IFByb3RlY3RpdmU= IENvaG4= Sk8= YXB0b3A= UmVhc29u TGVhZGVy IFVuZGVyc3RhbmQ= IEZyaWRheXM= IENvbnRpbnVvdXM= IGNsaXBwaW5n IFJ5ZQ== IGJlcnRo dGltZXI= YW5uaXM= cmVhY3Q= IGJ1ZmZhbG8= IFBhcmFz IDY1NQ== IHByZXNpZGVk IFN1bnJpc2U= IHZldHM= IGNsb3Zlcw== IE1jQ3VsbA== U3RyZW5ndGg= R0FO IGlsbGl0ZXI= IFByaWNpbmc= bMOp IHJlc2lzdG9y IGJydW4= IFN1ZmZvbGs= 0Ys= IExpdmVy UmVsZWFzZWQ= IHdoYXRz ODYw IE1lYXN1cmVz IGRlbm91bmNpbmc= IFJ5emVu IHNvdXZlbg== IGNhcmVnaXZlcnM= Y2hpbmk= IFNjYXJsZXR0 IHRyb3VnaA== Q29uZ3JhdHVsYXRpb25z IHRheGlz IFRyYWRpdGlvbg== aml0 IHRhYmxldG9w IGhpdGhlcnRv IGRpc2luZm9ybWF0aW9u b2ZmZW5zaXZl aHJh IERJU1RSSUNU IGNvbXBsaWNhdGU= Y2hlbmtv IFJlY29uc3RydWN0aW9u IHBhbHBhYmxl IGF1c3A= IDQyOA== IHNob3djYXNlcw== IFB1YmxpY2F0aW9u a25vd2xlZGdl aW5ub24= NDE5 IHJldHJpZXZhbA== YW5kZXJz IHJlZnV0ZQ== IGlucXVpcmVk Z3Vy IG5lZ2F0aXZpdHk= IGNvbnNlcnZl IGFmdGVybGlmZQ== IHByZXN1cHA= IEdpbGxlc3BpZQ== IG10 IERO VGFw IHBlcnBlbmQ= IFNteQ== ZG9lc24= IHNwaWxsaW5n IGh5cGVycw== S2F0ZQ== wq4s a2VwdA== IFBvd2VyZWQ= IGph IEtsdXg= YXJkZQ== YWJhbg== IDQ0NA== IGZsYXR0ZW5lZA== IEltcHJvdmVtZW50cw== dXJnYQ== IEt1bmQ= IGluc2NyaWJlZA== IGZhY3VsdA== IHVucHJlcGFyZWQ= IENvbnN1bWVycw== IHNhdGlzZmllcw== IHB1bG1vbmFyeQ== IGluZmlsdHJhdGlvbg== IGV4dGVybmFsbHk= IGNvbmdyYXR1bGF0aW9ucw== YWdoYW4= IGFpcmxpbmVy IGZsdW5n IGZseWVycw== R0Q= IHNuaXBwZXRz IHJlY3Vyc2l2ZQ== IG1hc3RlcmluZw== TGV4 IG92ZXJ0bHk= dmc= IGx1Y2tpbHk= IGVuY3Jv IExhbmNldA== IEFieXNzYWw= ZnVuY3Rpb25hbA== IHNvdw== IHNxdWlk IG5hcnJhdGlvbg== IG5hdWdodHk= IEhvbm91cg== IFNwYXJ0YW5z IHNoYXR0ZXI= IFRhY29tYQ== IENhbG9yaWVz IFJhY2Vz U3VibWl0 IHB1cnBvc2VmdWxseQ== d2F2 IFlvaw== RmVzdA== IEdlcnI= TWV0cm8= IGl0aW5lcg== ZmFtb3Vz ICJ7 aW5saW5l d2FzaGVy SXNzdWU= IENMSUVOVA== b3pv VmVyc2lvbnM= NzI1 IEdsb2Nr IHNoaWVsZGVk IFBDUg== RU5DWQ== IFdlbGQ= IFNpbXBs IHJlZGlyZWN0ZWQ= IEtoYW0= ICg+ IGxhYm91 IGRpYXBlcnM= c3Ns IGNlbGxhcg== b3JnYW5pc21z b3Jlc2M= IEJlcmtz ZGlkbg== U2hpcHBpbmc= Q2hlc3Q= IHVuZG9uZQ== IG1pbGxpb25haXJl IGNvcmRz IFlvdW5nZXI= YXBwcm9wcmlhdGVseQ== IHNlcXVlbHM= dXZl YW50aWNpcGF0ZWQ= IGxld2Q= IFNoaXJ0 IERtaXRyeQ== VmV0ZXI= IHNsYXlpbmc= IFlhcg== IGNvbXBsaWNhdGlvbg== SW93YQ== IEVyaWNh IEJMTQ== Z2lybGZyaWVuZA== Ym9kaWVk NjI2 MTk2Mw== IGludGVybWVkaWFyeQ== IGNvbnNvbGF0aW9u TWFzaw== IFNpZW0= b3dhbg== QmVnaW5uaW5n IGZpeG1l IGN1bG1pbmF0ZWQ= IGNvbmR1Yw== IFZvbHVudGVlcg== IHBvc2l0aW9uYWw= IGdyZWV0cw== IERlZmluaXRpb25z IHRoaW5rZXI= IGluZ2VudWl0eQ== IGZyZXNobWVu IE1vbWVudHM= IDM1Nw== YXRldXJz IEZlZEV4 c2c= Njk0 IGR3aW5kbGluZw== IEJPWA== c2VsYWdl IHRtcA== IHN0ZW4= IFN1dA== IG5laWdoYm91cmhvb2Rz IGNsYXNzbWF0ZQ== ZmxlZGdlZA== IGxlZnRpc3Rz IGNsaW1hdGVz QVRIRVI= IFNjeXRoZQ== dWxpZmZl IHNhZw== IGhvcHBlZA== IEZ0 IEVjaw== IENL IERvb21zZGF5 a2lkcw== IGdhc3BlZA== IG1vbmlrZXI= IExvZA== IENGTA== dGlvbnM= cnVtcw== Zm9saW9z IG1k IHVuY2Fubnk= IHRyYW5zcG9ydHM= IExhYnJhZG9y IHJhaWx3YXlz IGFwcGxpYW5jZQ== IENUUkw= 5oA= UG9wdWxhdGlvbg== IENvbmZlZGVyYWN5 IHVuYmVhcmFibGU= IGRvcnNhbA== IEluZm9ybQ== b3B0ZWQ= IEtJTEw= TWFyeA== IGh5cG9jcml0aWNhbA== cXVz IE51bWVyb3Vz IEdlb3JnaWFu IEFtYnJvc2U= IExvY2g= IGd1YmVybmF0b3JpYWw= IFhlb24= IFN1cHBvcnRz ZW5zZXI= ZWVseQ== IEF2ZW5nZXI= MTk2NQ== QXJteQ== IGp1eHRhcA== IGNob3BwaW5n IFNwbGFzaA== IFN1c3RhaW5hYmxl IEZpbmNo IDE4NjE= aWN0aXZl YXRtZWFs IEdvaGFu IGxpZ2h0c2FiZXI= IEdQQQ== dWd1 IFJFUEw= dmFyaWFibGU= IGhlcnBlcw== IGRlc2VydHM= YWNpb3VzbHk= IHNpdHVhdGlvbmFs d2Vla2x5 b2Js IHRleHRpbGU= IENvcm53YWxs IGNvbnRyYWNlcHRpdmVz IEFrZQ== XS0= 5LmL Oiw= IFdlbQ== IEJpaGFy ICcu IGJlcmU= IGFuYWxvZ3Vl IENvb2tpZXM= IHRha2VvZmY= V2hlZWw= IG1hamVzdGlj IGNvbW11dGluZw== MDIz IENvcnBzZQ== YXNzbWVudA== bWluaQ== IGdvcmlsbGE= IEFsYXM= ZXJlZQ== IGFjcXVhaW50YW5jZXM= IEFkdmFudGFnZQ== IHNwaXJpdHVhbGx5 IGV5ZWQ= cG13aWtp IEVuZGVy IHRyYW5zbHVjZW50 IG5pZ2h0dGltZQ== IElNQUdFUw== NTQ1 IEthbXA= IEZyZWFr IGln UG9ydGxhbmQ= NDMy IE1hdGE= IG1hcmluZXM= IGhvcnM= YXRlcmFzdQ== IEF0dHJpYnV0aW9u IC0tLS0tLS0tLQ== IGtpbnM= IEJFTE9X Kysr IHJlZWxpbmc= b2xlZA== IGNsdXR0ZXI= IFJlbGF0aXZl IDQyNw== QlVT IGF2ZXJ0 IENoZW9uZw== IEFibGU= IFByeW9y RGV2ZWxvcGVy IGVuY3ljbG9wZWRpYQ== IFVTQUY= IEdhcnJ5 U3BhaW4= QmxvY2tz IGV4cG9zaXRpb24= IEdhbWVyR2F0ZQ== V09S IHN0b2NrcGlsZQ== IGNsb3RoZWQ= IFRvbmU= IFJ1ZQ== dHVtYmxy IHRyZWFjaGVyb3Vz IGZyeWluZw== 0Yw= IFNwaA== IHJlc3RyYWludHM= IGVtYm9kaWVz IEdlcw== U2FmZXR5 IG5lZ290aWF0b3Jz bWluaW5n IEFwcGFsYWNoaWFu TE9T IEplbm5h IHBhc3NlcnM= 54s= c25hcA== IHNob3J0ZW4= Y3JlYXRvcg== IGlubnVtZXJhYmxl dXRoZXJsYW5k Njc0 IFdPTQ== IEFzY2VuZA== IEFybW9yeQ== IFRyYW5zYWN0aW9u S2ljaw== IHN1aXRjYXNl ZGF5TmFtZQ== IHdhc3RlZnVs bWFycmlhZ2U= IE1jQ2FiZQ== aXRlY2g= IE9zcw== Q2xvc3VyZQ== IFRyZWFzdXJlcg== IGluZGVjZW50 IER1bGw= IHJlc2lkZW5jZXM= MTk1OQ== IFNldHRsZW1lbnQ= SGFtaWx0b24= IHNlbGZpZXM= IFJhbmtpbmc= IEJhcmtsZXk= IEJvcmU= IFdDUw== IE1hcml0aW1l IEh1aA== IEZvcmVzdHJ5 IGN1bHRpdmF0aW5n IEJhbGxhcmQ= IGdhcnJpc29u IFNETA== OTMw IG5hc2NlbnQ= IGlycmVzaXN0aWJsZQ== IGF3ZnVsbHk= XC9cLw== IGVxdWF0ZQ== IGFudGhyb3BvbG9neQ== IFN5bHZpYQ== IGludGVzdGluZQ== IGlubm9jdW91cw== Y2Vzc2l2ZQ== YWdyYQ== IE1ldHJvaWQ= R3JhbnQ= ODU1 gZY= ICJf 44OD44OJ IGFwcHJhaXNhbA== IEZyZWRkeQ== MDQ2 IDQwNg== IDE4MzA= IGRvY2tpbmc= U3RhdGlj IHBvbnQ= IFZvbHRhZ2U= IFN0ZWFk IE1vcnRnYWdl IEpvbmFo WUw= Q0xBU1NJRklFRA== IGFzYmVzdG9z bmlrb3Y= IGNvbGxhZ2Vu IE9yYml0YWw= UG9ja2V0 Nzk5 IGh5YnJpZHM= aW5jaGVz IGludm9pY2U= dW5keQ== IGluZXF1YWxpdGllcw== VHJlbmQ= d2FzaGVk QkFMTA== IGx1Y2lk IENvbW1lbnRhcnk= IHdpdHR5 QnJhbmRvbg== IGJydWlzaW5n IDYyMA== ZXNjZW50 Ym94aW5n UE9M IDM3OA== UmVjdA== IGxpY2VuY2Vz IE1jR2Vl cHJlc3NlZA== RGFubnk= IGphbW1lZA== b3JkaW5hdGU= IGxldGg= IGRpc3Rpbmd1aXNoZXM= IFlhbWFoYQ== SUxT IEh1bWU= IENhdGVnb3JpZXM= Um9iZXJ0cw== Q2hhcnQ= IGJlZXRsZQ== IEdyYXZleWFyZA== ICgkKQ== b8Sf IHR3aWxpZ2h0 YXJlbGxh 4b0= IGJvb3Rocw== IEhIUw== IEZlbGRtYW4= IGV4Y2F2YXRpb24= IHBoaWxvc29waGllcw== YXRvZ3JhcGh5 IEdhcmFnZQ== dGVjaG5vbG9neQ== IHVuZm9yZ2V0dGFibGU= IHZlcmlmeWluZw== IHN1Ym9yZGluYXRlcw== RWxz IG5lYg== R2FtaW5n RU5B IEFjaGlldmVtZW50 aXR0ZXJz IEdhYmU= IGR1bXBz Zm9yY2Vy IHBvaWduYW50 IE1CQQ== IEhlaWRp aW1laQ== IG1hZ2Vz IGxpYmVyYXRl IGNpcmN1bWNpc2Vk IE1lcm1haWQ= IE1hdHRo dG9nZXRoZXI= IFdpY2hpdGE= IHN0b3JlZnJvbnQ= IEFkaW4= VklJ Rm91cnRo IGV4cGxvcmVycw== V0VS Tm90YWJsZQ== QnJvb2s= bWVucw== RmFpdGg= LS0tLS0tLS0t IEpvdQ== rLw= IHBpbmVhcHBsZQ== IGFtYWxn ZWxu YXJrYWJsZQ== IOOCteODvOODhuOCow== IOOCteODvOODhuOCo+ODr+ODsw== IG92YXJpYW4= IEVjaG9lcw== IGhhaXJjdXQ= IHBhdg== IGNoaWxsZWQ= YW5hc2lh IHN0eWxlZA== IGRhYg== bmlwZXI= IG1pbmlzdGVyaWFs IERVUA== VGFu IHN1bHBo IERldGVy IEJvaGVt b2Rhbg== IGVkdWNhdG9y 4pOY c3Bpcg== Q2hpY2tlbg== IEVsZWFub3I= IHF1aQ== IGhlYXZpZXN0 IGdyYXNwZWQ= VVJB IGNyb29rZWQ= SmVzc2ljYQ== cHJvYmxlbQ== IHByZWRldGVybWluZWQ= IG1hbmlhYw== IGJyZWF0aHM= IExhdWRlcmRhbGU= IGhvYmJpZXM= eXo= Q3JpbWU= IGNoYXJpc21h ZEw= IGxlYXBpbmc= IGtpdHRlbnM= QW5nZWxv IEpBQ0s= IFN1emFubmU= IGhhbHRpbmc= RU5USU9O IHN3YWxsb3dpbmc= IEVhcnRocXVha2U= IGVpZ2h0ZWVudGg= IE5JQw== IElORg== IENvbnNjaW91cw== IHBhcnRpY3VsYXJz Y2lyY2xl NzQw IGJlbmV2b2xlbnQ= IDc0Nw== IDQ5MA== IHJ1bmRvd24= IFZhbGVyaWU= IEJVUg== IGNpdmlsaXNhdGlvbg== IFNjaG4= V0I= b3RpZGU= aW50ZXJuYXRpb25hbA== IGpvaG4= IDE5MDI= IHBlYW51dHM= IGZsYXZvcmVk a3Vz IHJvYXJlZA== IGN1dG9mZg== 6aM= IG9ybmFtZW50 IGFyY2hpdGVjdHVyZXM= IDM2OQ== b2xvcg== IFdpbGRl IENSQw== IEFkanVzdGVk IHByb3Zva2luZw== bGFuZGlzaA== IHJhdGlvbmFsaXR5 IGp1c3RpZmllcw== IGRpc3BlbA== IGFtZXJpYw== IFBvbGVz 2Kk= IGVudmlz IERvb2RsZQ== 5L2/ aWdzYXc= YXVsZHJvbg== VGVjaG5pY2Fs VGVlbg== dXBoZW0= IFhpYW5n IGRldHJhY3RvcnM= IFpp IEpvdXJuYWxpc3Rz IGNvbmR1Y2l2ZQ== IFZvbHVudGVlcnM= IHNk S25vd2luZw== IHRyYW5zbWlzc2lvbnM= IFBMQU4= IExJQg== IGFsbHVkZWQ= IG9iZQ== IGRvcGU= IEdvbGRzdGVpbg== IHdhdmVsZW5ndGhz IERlc3RpbmF0aW9u bmRh dWdp IGF0dGVudGl2ZQ== IExlYW4= cmFsdGFy IG1hbmc= bWJ1ZHM= YWtpbmdz YmVuZGVy IGFjY29s IGNyYXdsZWQ= Tk9X TWlubmVzb3Rh IGZsb3VyaXNoZWQ= IFp1cA== IFN1cGVydmlzb3I= IE9saXZpZXI= RXhjZWxsZW50 IHdpZGVu RG9uZQ== IHdpZw== IG1pc2NvbmNlcHRpb25z Q29ycA== V2Fu IHZlbmVyYWJsZQ== IE5vdGFibHk= IEtsaW5nb24= YW5pbWF0ZQ== Qm9vc3Q= IFNBWQ== bWlzc2luZw== aWJsaW9ncmFwaHk= bWVsb24= IHBheWRheQ== 2LM= Ym9sZQ== IHZlaWxlZA== IEFscGhhYmV0 SXRhbGlhbg== IGV2ZXJsYXN0aW5n IFJJUw== IENyZWU= cm9tcHQ= IGhhdGluZw== IGdyaW5uaW5n IGdlb2dyYXBoaWNhbGx5 T1NI IHdlZXBpbmc= IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGltcGVjYw== TGV0dGVy IGJsb2F0ZWQ= UExB IEZlaW4= IHBlcnNldmVy VGh1bmRlcg== IGF1cg== IFJM IHBpdGZhbGxz 4pa6 IHByZWRvbWluYW50 IDUyNQ== NzE4 QVBF NzE0 IGZhcm1sYW5k IFFpYW8= IHZpb2xldA== IEJhaGFtYXM= IGluZmxpY3Rpbmc= IEVmZmljaWVuY3k= IGhvbWVicmV3 IHVuZGVydG9vaw== IGN1cmx5 IEhhcmRpbmc= bWFuaWE= NTk2 IHRlbXBlcmVk IGhhcnJvd2luZw== IFBsZWRnZQ== IEZyYW5rZW5zdGVpbg== 6Ko= TW90aW9u IHByZWRpY3RhYmx5 IEV4cGxvc2lvbg== b2N1c2luZw== ZXJk Y29sbw== RkZFUg== IGJhY2tmaWVsZA== IFZJREU= dWVibA== TmFycg== IEFyZ3VtZW50 IGdlbm9taWM= IGJvdXRpcXVl IGJhdHRlZA== IEJpbmFyeQ== IGdhbWI= IFJoeXRobQ== Njcz IGFmbG9hdA== IE9seW1waWE= WUlORw== IGVuZGlm aXNpbg== IHdpbnRlcnM= IHNjYXR0ZXJpbmc= SXY= RGlzdGFuY2U= IHRydQ== IENvbWZvcnQ= IG5leHVz IGFpcmZsb3c= IEJ5emFudGluZQ== cGF5ZXJz Y29uaQ== IEJldHN5 RGVhbA== IE51Zw== IENvbnRpbmVudA== cmVkaWJseQ== IG9wdGltaXppbmc= YWxiZWl0 IGVjc3RhdGlj IFByb3Rv 57c= aXZvdA== 4paE ZW1w cm91bmRlcg== IGNsb3V0 IElTVA== NjYz IERvbGxhcnM= IERBQw== IHN1YnNjcmliZWQ= IHJlaGVhcnNhbA== IGFtcHM= IFNoYW5n ZXNt IHNwcmlua2xl IGFzc2FpbGFudA== IE9v IENvaW5iYXNl VGFjdA== IHJldGluYQ== IG51bnM= Uk9O YXR0bw== IGp1Zw== IFNWRw== IGJpa2luaQ== IEZJTEU= IEZvdW5kZXJz ZXBvcnQ= IEtQ IHJlc3RvcmVz IFRoaWNr IGFzaG9yZQ== IGFwcHJvdmFscw== UmVuZGVy TUFH R3JhaGFt IENvcnRhbmE= 44Oz44K4 c3No b3JpYW5z YXJzaXR5 IEluc3BpcmVk dXBwZXI= IHNpZ25hbGxpbmc= IHJlYnVrZQ== IGZsYXJlcw== IGRvd250aW1l U3R1ZGllcw== IHN0YWduYXRpb24= IFNlcXVlbmNl IGdydW50 IGFzc3VyZXM= IFBMQQ== NTky IGludHJhdmVu ZGVwZW5k U3VzYW4= IE1hbnppZWw= TWFuaWE= Q29udHJhY3Q= IHNsYW1z IGN1bHR1cmVk IGNyZWRpdG9y TElTVA== IEhVTQ== IENoYXR0YW5vb2dh c2VydmVk IGNsb2FrZWQ= IEZUUA== cG93ZGVy IFN0ZWxsYQ== dWN0aXZl IGNoZWFwbHk= IE1VQ0g= IEdhbGlsZW8= IHN1aXRlcw== c3BlZWNo IGRlbGliZXJhdGlvbnM= IENoaXBz q5g= QmFsYW5jZQ== IFd5bm5l IEFrcm9u QXNzZXQ= IGhvbm91cmVk IGVkZ2Vk TGlrZXdpc2U= YW5pbW91cw== IFdhZ2U= IEV6ZWs= YWR2ZXJ0aXNlbWVudA== IFJUWA== IE1BRA== IG1pZ3JhdGluZw== IFNRVQ== IDQ3NQ== RWRpdGVk IHNob3J0aGFuZA== IEJhc2ljcw== IGNyb3RjaA== IEVWRU4= IHZt ZWZmaWNpZW5jeQ== IGNhbHZlcw== IEZyaWU= IEJyaWxsaWFudA== IHN0cmlrZXJz IHJlcGVudGFuY2U= IGFydGVyaWVz cmw= QmVk aGFw IGNyeXB0b2dyYXBoeQ== IFNhYnJlcw== IDQxNA== dmlrcw== aWhhcmE= YXBzZXM= VGFsa2luZw== IGludGVydHdpbmVk IGRvY2tz IGFsbGVsZQ== IEFydGlmYWN0 IEhJTQ== dG9ybg== 55U= IG9wYWNpdHk= IEVseQ== b3N1a2U= IG5pcHBsZQ== IGhhbmR3cml0dGVu IFZL IENoYW1iZXJsYWlu IExhb3M= aWdyYXBo Z3Jvdw== IHRyaWxsaW9ucw== IGRlc2NlbmRhbnQ= IFNhaWxvcg== YXN1cmluZw== IGNlaWxpbmdz IFdhcmVob3VzZQ== Zmx5aW5n IEdsb3c= IG5vbnQ= IG1pc2NhcnJpYWdl IHJpZ3M= IG1pbmlzdHJpZXM= IGVsYWJvcmF0ZWQ= IGRlbHVzaW9uYWw= IEh1bWFuZQ== IDM3OQ== bmV0cw== IGJsYWNrb3V0 YWRkZXJz IG5w IFRpcmU= cm9zYw== IHN1YmRpdg== IGxpbmthZ2U= IGNocm9ub2xvZ2ljYWw= IEhFUk8= IHJlc2V0dGxlbWVudA== IFZpbnls IHBhc3RvcmFs IE1vYmls IEJhcmJhcg== Q29vbGRvd24= IEZyaXR6 Y3JpbWluYWw= cmVwZQ== IGJlbGxpZw== IEJyZWVk IDQxOA== IHNlbWJsYW5jZQ== aWpr IGN1cnRhaWw= IGNsaW5jaA== Y29udGFpbmVk IFByb21wdA== YXN0b24= IHdp IHB1cnN1aXRz NTE1 IEdsb3Nz IGZsaXBz IGNvdXBvbnM= IGNsb25pbmc= IExpa2VseQ== UmVtb3ZlZA== IFF1YXJ0eg== cmljZXM= IFNwZWFycw== IHBpb3Vz IGRlcHJlY2lhdGlvbg== IERhcmU= b3VuY2Vz YW1heg== T250 IHBpbm5hY2xl ZG9ja2Vy MDI2 IFd5cg== IFByb3Blcg== y4g= bmls Qnl0ZXM= IHNlZWtlcg== dHJpYWw= IHVuZm9sZHM= IE1hcnNl IGV4dHJhdmFnYW50 IFN1cnZpdm9ycw== UkVEQUNURUQ= IFNwZWVkd2F5 IENyYWlnc2xpc3Q= c3VibWl0 IEdlbmVyYXRpb25z IHVwaG9sZGluZw== IGJsb29kc3RyZWFt IE1pc3Npb25z IExhd24= IGxpbWJv ZW5laQ== SHVo IFdpbGRjYXRz cHJlcA== IE1hcmt1cw== IEZvcmJpZGRlbg== cml0aWM= SU5P IGV4aGliaXRpbmc= cmVxdWVudA== Y2h1aw== IGhhYml0dWFs IENvbXBhdGliaWxpdHk= RHJhZw== UklQVA== dWphaA== R1JPVU5E IGRlbGlucXVlbnQ= IGJ1cm5lcg== IGNvbnRlbXBvcmFyaWVz IGdpbW1pY2s= bG9hZHM= IG5venpsZQ== cG9kY2FzdA== IFdhaw== IFN0YXRlbg== IEt1aA== 44GT aW50ZXJydXB0ZWQ= IGludmluY2libGU= IEJ1cm5ldHQ= Y2lnYXJldHRl IFBlYmJsZQ== IFRlbXBvcmFyeQ== IE1hcmlubw== NTgy IHdhc3RlbGFuZA== aWRlbnRseQ== VHg= IHJpdGU= IFBhbmFzb25pYw== IE1pZGRsZXM= IEhvcnRvbg== YWV1cw== IGN1cmluZw== IG1hdHM= IGFkam91cm4= IGZlYXJzb21l cGV6 Ym9hdHM= IHByb3BlbGw= IGNvbmZsaWN0ZWQ= IEFuZ2Vy IGluc3VyZ2VudA== S2FybA== IGNvYWxlcw== IHNvdXRod2VzdGVybg== IGRpc3N1 IE92ZXJ0 KioqKioqKioqKioq IGJveGVk IEJydW5l YWFh IGdhcmRlbmluZw== IEVuZ2Vs dHJhY2tz IHB1cmlmaWVk IHBsYWNlaG9sZGVy IExpa2Vz IGRhbg== R2Fi IGVjdA== IEZhdw== IEVsaW90 ICcs b3Ryb3BpYw== IFJ1aW4= aGVkb24= IGNhdWw= IGFmdA== IENhZGlsbGFj Z2hh YXNzaWFu dWRlYg== IFRpY2s= IGFkanVzdHM= QVJHRVQ= NTM3 aXNjaGU= YW50eQ== IEZyaWVkcmljaA== IEJsaXp6 IEFPTA== Q2FtcGFpZ24= IG1hbW1hbA== IFZlaWw= IEtldg== IE1hdXJpdA== IERhbWllbg== TmF0aW9u RWFzdGVybg== IHs6 ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHN0ZXJlb3R5cGljYWw= IGF0dGlj IEN5Ym9yZw== cmVxdWlyZQ== IGF3YXJkaW5n IFBhcHVh YnRu YmVudA== Qm9v ICg9 IFhhbmRlcg== IFNvbWVyc2V0 IGNhdGNoeQ== IGNlcnRpZnk= U1RSVUNU IGl0YWw= IHRpZGVz IEJyYW5kcw== R3JheQ== Y29tcGV0aXRpdmU= IGN1cmF0b3I= IERH b21pbml1bQ== IEdNT3M= Y2lhdGluZw== IENhcm1lbg== b3dhcmQ= QmFsdGltb3Jl IHJnYg== Q3U= IHdpcGVz c3BlbGw= SVRORVNT IHN1bW1hcml6ZXM= IFJldmlz IHdoaXN0bGVibG93ZXJz IEJyZWFjaA== IGNyb2NoZXQ= a29z ZXdza2k= IHJlcGV0 IGNyaW1zb24= IEthcmFjaGk= cmVhZGFibGU= ZGltZW5zaW9u IElnb3I= aWxkZWQ= IFplZA== IEtlYW5l IENvc21ldGlj REVQ IHJldHJlYXRpbmc= IFVB ZW5zaWNhbA== IGR1c2s= IERpY2tlbnM= IGFyZW5hcw== IFBhc3NhZ2U= bGV2ZWxz IGN1cnY= UG9wZQ== IGNob3Jlcw== IEVsaXNl IENvbXBhc3M= YnVi IG1hbW1hbGlhbg== IFNhbnNrcml0 IEFOQw== IENyYWNr UXVhbA== TGF1bg== YW1wdW5r IGxlYXJuZXJz IGdsYW1vcm91cw== IGZ1cnRoZQ== ZXJtb3R0 Y2FuZA== R2VuZXJpYw== IG5hcnJhdGVk IGRpc29yZGVybHk= IFRyYW5zYWN0aW9ucw== IERldGVudGlvbg== IFJva3U= xI0= IHVuZGVyc3RhdGVtZW50 IFNhdXI= IFJvZHJpZ28= IEFTQVA= U2lu IHJlam9pY2U= TWV0aG9kcw== IGVsZWN0cm9kZQ== IHdvcnNoaXBwZWQ= IGlkaQ== IFBoeXNpY2lhbnM= IHBvcHVw IGRlZnQ= IFJlbW92YWw= IEJ1ZW5vcw== dmVyYnM= IGZ1bms= dXNoYQ== cmljdGlvbg== b3JlYQ== IEJhbmdhbG9yZQ== IEtlbm9iaQ== enpp IG5vcm1hdGl2ZQ== IGdvYmxpbnM= IGNhZmVz IFVOQ0xBU1NJRklFRA== IEZpcmVk U0lHTg== IHNjbGVyb3Npcw== IFZvdGVy IFNvbm55 IEV4dGVuZA== IEVWcw== QXJzZW5hbA== IHBzaQ== IHdpZGVzdA== IFR1cw== IGxvb21z IGp1c3RpZnlpbmc= IEdyYW5nZXI= 6K8= UmVmZXI= NTgz IGZsb3VyaXNoaW5n YWJyZQ== IHJhdmU= IENvbnRyYQ== IDE4OTg= QWRkcw== IGZ1bA== IENvb2tl c29tZW9uZQ== PSM= Njcx IHlhaw== IGFydGU= IE1pc2NlbGxhbmVvdXM= IERldGVjdGlvbg== IENsYW5jeQ== 4oE= YXNzaWVz IHZhbGlhbnQ= IEZlbWluaXN0 Y29ycnVwdGlvbg== VmVs UGVhcg== IHN1Y2NpbmN0 IHF1aWNrZXN0 a3c= IHNwaXR0aW5n IExpYnJhcmllcw== 5YWJ YW50eg== RGFk IFNwZWNpZmljYXRpb25z cnVwdWxvdXM= YW5kcg== UkVTVUxUUw== IHNub3diYWxs IHByZWRpcw== IEJheHRlcg== IE51cnNpbmc= IENoYWZm c3dl IG91dGFnZQ== IG5lc3Rpbmc= IG5vdG9yaWV0eQ== dHJpZ2dlcg== b25pdGU= am9u IGZvdQ== b29rZWQ= IENlbGVicml0eQ== cmVhbGl0eQ== IGZhdGln IGh1Z2dpbmc= IGJvdGhlcnM= IFBhbnplcg== IENoYW5kcmE= ZmlndXJlZA== IHZvbHRz IENsb3Vkcw== IGZlZWJsZQ== IEN1cnZl IEFzdXM= Nzg2 YWJzb3I= IFZJQ0U= IEhlc3M= IG1hbnVmYWN0dXJlcw== IGdyaXp6 IFBvd2VyZnVs YWNpZA== IHN1YnNlY3Rpb25z IEtydWdtYW4= IEFscHM= aXN1 IHNlcXVlc3Q= IFVsdHJvbg== IFRpbmtlcg== IEdvb3Nl IG1pc21hdGNo QXR0b3JuZXk= IG1vcnBob2xvZ3k= IFNpeGVycw== dXR0ZXJlZA== IEVMRUNU Z3Jhbg== UnVzc2VsbA== IEdTTA== IGZvcnRuaWdodA== IC4p IGFwb3N0bGU= cHJvbmU= ZWxpc3Q= VW50aXRsZWQ= IEltcGxlbWVudGF0aW9u aXN0b3Jz IHRhbmtlcg== IHBsdXNo IGF0dGVuZGFudHM= IFRpaw== IEdyZWVud2ljaA== IFlvbg== IFNQTA== Y2VsbHM= dW50bGVk U29sdXRpb24= IFF1w6k= IHZhY2F0ZWQ= IHVwdGljaw== IE1lcmlkaWFu 5oM= IERyaWxs OTI1 NTg0 IHJlbm92YXRlZA== IEt1YnJpY2s= enlr IGxvdXN5 cHBlbA== b2h5ZHJhdGU= IEl6enk= bGVzaWFzdGljYWw= Q0ND IEFqYXg= IGFkYXB0ZXJz IFBldHJhZXVz IGFmZmlybWF0aW9u IFNUT1I= bGVtcw== YWRvZXM= IENvbnN0YW50aW5vcGxl IHBvbmllcw== IGxpZ2h0aG91c2U= IGFkaGVyZW50cw== IEJyZWVz b21vcnBoaWM= RmlnaHRpbmc= IHBsYXN0ZXI= IFBWQw== IE9ic3Q= IGRlYXJseQ== IFRvb3Ro aWNrc29u IHNoYW1pbmc= UGxleA== QWdn IOKApiI= IHN1YnJlZGRpdHM= IHBpZ2Vvbg== IFJlc2lkZW50aWFs IFBhc3Npbmc= IGx1bQ== IFBlbnNpb24= IHBlc3NpbWlzdGlj IDQzMg== emluc2tp Y2FkZQ== MDc1 IGFwb2xvZ2lzZWQ= aXlhaA== UHV0dGluZw== IGdsb29teQ== IEx5bWU= PS09LT0tPS09LT0tPS09LQ== IFRvbWU= IFBzeWNoaWF0cmlj IEhJVA== Y21z YXBvbG9n IGJyZWFrZXI= IGRlZXBlbg== IHRoZW9yaXN0 IEhpZ2hsYW5kcw== IGJha2Vy IHN0YXBsZXM= IGludGVyZmVyZWQ= IEFib3J0aW9u am9pbmVk Y2h1 IGZvcm11bGF0ZQ== IHZhY2NpbmF0aW9ucw== IGJhbnRlcg== cGhldXM= IG91dGZpZWxkZXI= IE1ldGVy ICMjIyMj IDE4OTU= IG5hcnJvd2luZw== IFNUT1JZ ZnA= IENTVA== aWdub3Jl IHByb2NsYWltaW5n IFJV IEJBTEw= eW5h NjUz IHBvc2l0 UFJF NTk0 IFJlZ2lzdHJhcg== IFBpbGdyaW0= aWNpbw== IHByZXR0 IGxpZmVsZXNz IF9fXw== TmVpZ2g= IENodXJjaGVz b3Jubw== IG9yY3M= IGtpbmRyZWQ= IEF1ZGl0 IG1pbGxlbm5pYWw= IFBlcnNpYQ== Z3Jhdml0eQ== IERpc2FiaWxpdHk= IERBUks= V3M= b2Rvbg== IGdyYW5kZGF1Z2h0ZXI= IEJyb29rZQ== IEFEQQ== RVJB IHBpY2t1cHM= IFdpbGtpbnNvbg== IFNoYXJkcw== IE5L IGV4cGVs IEtpc2x5YWs= IGphcmdvbg== IHBvbGFyaXplZA== aWFuZQ== UHVibGlzaGVy IHJlYnV0dA== IGFwcHJlaGVuc2lvbg== IEtlc3NsZXI= IHByaXNt RlVM MTk2NA== IExvbGw= 5L8= bGV0aGFs xZ8= IGdoZXR0bw== IGJvdWxkZXI= IFNsb3dseQ== IE9zY2Fycw== IEluc3RydWN0aW9u IFVsdHI= IE1vZQ== TmljaA== IFBBVEg= KCo= IFJFTEVBU0U= dW5pbmc= cm91c2U= ZW5lZw== IHJlaW1i IERldGVjdGVk RG9T IHN0ZXJsaW5n IGFnZ3JlZ2F0aW9u IExvbmVseQ== IEF0dGVuZA== aGlnaGVy IGFpcnN0cmlrZQ== a3Nvbg== U0VMRUNU IGRlZmxhdGlvbg== IEhlcnJlcmE= Q29sZQ== cml0Y2g= IGFkdmlzYWJsZQ== RmF4 IHdvcmthcm91bmQ= IHBpZA== bW9ydGVt ZXJzZW4= IHR5cG8= IGFsdW0= Nzgy IEphbWFs c2NyaXB0cw== IGNhcHRpdmVz IFByZXNlbmNl IExpZWJlcm1hbg== YW5nZWxv IGFsY29ob2xpc20= YXNzaQ== IHJlY2l0ZQ== IGdhcGluZw== IGJhc2tldHM= IEdvdQ== QnJvd3Nlcg== bmVhdQ== IGNvcnJlY3RpdmU= dW5kYQ== c2NvcmluZw== IFhE IGZpbGFtZW50 IGRlZXBlbmluZw== IFN0YWlubGVzcw== SW50ZWdlcg== IGJ1Z2d5 IHRlbmFuY3k= IE11YmFyYWs= IHR1cGxl IERyb2lk IFNpdHRpbmc= IGZvcmZlaXQ= IFJhc211c3Nlbg== aXh0aWVz ZXNp IEtpbW1lbA== IG1ldGljdWxvdXNseQ== IGFwb3B0 IFNlbGxlcg== MDg4 ZWNha2U= aGVtYXRpY2FsbHk= VE4= IG1pbmRsZXNz IGRpZ3M= IEFjY29yZA== b25zZW5zZQ== ZW1pbmc= YnJhY2U= IGVCb29r IERpc3RyaWJ1dA== IEludmVzdG1lbnRz d3Q= XSks YmVoYXZpb3I= NTYz IGJsaW5kaW5n IFByb3Rlc3RlcnM= dG9waWE= IHJlYm9ybg== IEtlbHZpbg== IERvdmVy IERhaXJ5 IE91dHM= IFsv z4A= YnA= IFZhbml0eQ== IFJlY2Fw IEhPVVNF IEZBQ0U= IDQyMg== Njky IEFudGlvY2g= Y29va2Vk IGNvbGxpZGU= IGFwcg== IHNsZWVwZXI= IEphcnZpcw== IGFsdGVybmF0aXZlbHk= IExlYXZlcw== IE1hdw== IGFudGlxdWl0eQ== IEFkaW5pZGE= IGFidXNlcg== UG9rw6ltb24= IGFzc29ydGVk IFJldmlzaW9u IFBpYW5v IEdpZGVvbg== T2NlYW4= IHNhbG9u IGJ1c3RsaW5n b2duaXRpdmU= IFJhaG1hbg== IHdhaXRlcg== IHByZXNldHM= IE9zaA== IEdIQw== b3BlcmF0b3I= IHJlcHRpbGVz IDQxMw== IEdhcnI= IENoYWs= IGhhc2hlcw== IGZhaWxpbmdz IGZvbGtsb3Jl IGFibA== IENlbmE= IE1hY0FydGh1cg== IENPVVJU IHBlcmlwaGVyeQ== YXBwZXJz IHJlY2tvbmVk IEluZmx1 IENFVA== IDM3Mg== IERlZmluaXRpdmU= YXNzYXVsdA== NDIx IHJlc2Vydm9pcnM= IGRpdmVz IENvaWw= REFR IHZpdmlkbHk= IFJK IEJlbGxldg== IGVjbGVjdGlj IFNob3dkb3du IEtN aXBlZA== cmVldGluZ3M= IEFzdWth TGliZXJhbA== IM+E IGJ5c3RhbmRlcnM= IEdvb2R3aW4= dWtvbmc= U2l0 IFRyZW0= IGNyaW1pbmFsbHk= IENpcmN1cw== Y2hyb21l ODg3 IG5hbm9w IE9iaQ== IExPVw== b2do IEF1dGhvcnM= b2J5bA== VXJiYW4= IHRp IFdlaXI= dHJhcA== YWd5 IHBhcmVudGhlc2Vz IG91dG51bWJlcmVk IGNvdW50ZXJwcm9kdWN0aXZl IFRvYmlhcw== dWJpcw== UGFyc2Vy U1RBUg== IHN5bmFwdGlj IEdlYXJz IGhpYmVy IGRlYnVua2Vk IGV4YWx0ZWQ= YXdhdHRz SE9V Q2h1cmNo IFBpeGll IFVyaQ== IEZvcm1hdGlvbg== IFByZWRpY3Rpb24= Q0VP IHRocm90dA== IEJyaXRhbm4= IE1hZGFnYXNjYXI= 64s= IGJpbGxib2FyZHM= IFJQR3M= IEJlZXM= Y29tcGxldGVseQ== RklM IGRvZXNudA== IEdyZWVuYmVyZw== cmV5cw== IHNsaW5n IGVtcHRpZWQ= IFBpeGFy IERoYXJtYQ== bHVjaw== aW5ndWlzaGVk IGVuZG90 IGJhYnlz MDU5 Y2hlc3Q= cmF0cw== IHJpZGRlbg== IGJlZXRsZXM= IGlsbHVtaW5hdGluZw== IGZpY3RpdGlvdXM= IFByb3ZpbmNpYWw= IDc2OA== IHNoZXBoZXJk IFJlbmRlcg== IDE4OTY= Q3Jldw== IG1vbGRlZA== IFhpYW9taQ== IFNwaXJhbA== IGRlbGlt IG9yZ2FuaXNpbmc= IGhvb3Bz IEJlaQ== emhlbg== IGZ1Y2tpbg== IGRlY2Fk IHVuYmlhc2Vk YW1teQ== c3dpbmc= IHNtdWdnbGVk IGtpb3M= IFBFUlNPTg== IElucXVpc2l0b3I= IHNub3d5 IHNjcmFwaW5n IEJ1cmdlc3M= UHRy YWdhbWU= Ulc= IGRyb2lk IEx5cw== IENhc3NhbmRyYQ== SmFjb2I= IDM1NA== IHBhc3R1cmU= IGZyYW5j IFNjb3RjaA== IEVuZHM= IElHRg== ZGVmaW5pdGlvbg== IGh5c3RlcmljYWw= IEJyb3duZQ== Nzcx IG1vYmlsaXphdGlvbg== 5pU= aXF1ZW5lc3M= VGhvcg== IHNwZWFyaGVhZGVk IGVtYnJvaWxlZA== IGNvbmplY3R1cmU= anVkaWNpYWw= Q2hvaWNl IHBhcGVyYmFjaw== UGly IHJlY292ZXJz IFN1cmdl IFNob2d1bg== IFBlZGlhdHJpY3M= 44Gg IHN3ZWVwcw== IExhYm9yYXRvcmllcw== IFBhY2tz YWx1cw== YWRkaW4= IGhlYWRsaWdodHM= Z3Jh RXZpZGVuY2U= Q09MT1I= QWRtaW4= irE= IGNvbmNvY3Q= c3VmZmljaWVudA== IHVubWFya2Vk IHJpY2huZXNz IGRpc3NlcnRhdGlvbg== IHNlYXNvbmluZw== IGdpYg== IE1hZ2Vz dW5jdGlvbnM= IE5pZA== Y2hlYXQ= IFRNWg== Y2l0aXplbnM= IENhdGhvbGljaXNt bmI= IGRpc2VtYmFyaw== IFBST0dSQU0= YXF1ZXM= VHlsZXI= T3Jn IFNsYXk= IE5lcm8= IFRvd25zZW5k SU5UT04= dGVsZQ== IG1lc21lcg== OTAx IGZpcmViYWxs ZXZpZGVuY2U= YWZmaWxpYXRlZA== IEZyZW5jaG1hbg== IEF1Z3VzdGE= MDIx IHNsZWQ= IHJldXNlZA== IEltbXVuaXR5 IHdyZXN0bGU= YXNzZW1ibGVk TWFyaWE= IGd1bnNob3Rz IEJhcmJpZQ== IGNhbm5hYmlub2lkcw== IFRvYXN0 IEtpbmRlcg== SVJE IHJlanV2ZW4= IGdvcmU= IHJ1cHR1cmU= IGJyZWFjaGluZw== IENhcnRvb24= IDQ1NQ== IFBhbGVv NjE0 IHNwZWFycw== IEFtZXM= YWJ1cw== TWFkaXNvbg== R1JPVVA= IGFib3J0ZWQ= eWFo IGZlbG9u IGNhdXNhdGlvbg== IHByZXBhaWQ= IHBpdHRlZA== b3BsYW4= IFNoZWxsZXk= IFJ1c3Nv IFBhZ2Fu IHdpbGxmdWxseQ== IENhbmF2ZXI= dW5kcnVt IFNhbGFyeQ== IEFycGFpbw== cmVhZGVy IFJhdGlvbmFs IE92ZXJzZQ== IENhdXNlcw== ICou IHdvYg== S2VpdGg= IENvbnNlbnQ= bWFuYWM= Nzcz NjIz IGZhdGVmdWw= ZXRpbWVz IHNwaXJpdGVk IER5cw== IGhlZ2Vtb255 IGJveWNvdA== IEVucmlxdWU= ZW1vdXRo IHRpbWVsaW5lcw== IFNhaGFyYQ== IFJlbGF4 IFF1aW5jeQ== IExlc3NvbnM= IEVRVQ== U0VB Tks= IENvc3Rjbw== SW5jcmVhc2U= IG1vdGl2YXRpbmc= IENob25n YW1hcnU= IERpdmlkZQ== IHBlZGlncmVl IFRhc21hbmlh IFByZWx1ZGU= TGFz OTQw NTc0 IGNoYXU= IFNwaWVnZWw= dW5pYw== LS0+ IFBoaWxpcHM= IEthZmth IHVwaGVhdmFs IHNlbnRpbWVudGFs IHNheA== IEFraXJh c2VyaWFs TWF0cml4 IGVsZWN0aW5n IGNvbW1lbnRlcg== IE5lYnVsYQ== cGxldHM= IE5hZHU= IEFkcmVu IGVuc2hy IFJBTkQ= ZmluYW5jaWFs IENseWRl dXRoZXJmb3Jk IHNpZ25hZ2U= IGRlbGluZQ== IHBob3NwaGF0ZQ== cm92ZXJzaWFs ZmFzY2lzdA== IFZhbGw= IEJldGhsZWhlbQ== IGZvcnM= IGVuZ2xpc2g= U29saWQ= TmF0dXJl IHZh IEd1ZXN0cw== IHRhbnRhbA== IGF1dG9pbW11bmU= Ozs7Ozs7Ozs7Ozs7 IFRvdGFsbHk= IE92 IGRlZmVuY2Vz IENvY29udXQ= IHRyYW5xdWls IHBsb3k= IGZsYXZvdXJz IEZsYXNr 44Ko44Or IFdlc3Rvbg== IFZvbHZv ODcw IG1pY3JvcGhvbmVz dmVyYmFs UlBH IGlpaQ== O30= MDI4 IGhlYWRsaW5lZA== IHByaW1lZA== IGhvYXJk IFNoYWQ= IEVOVEVS IHRyaWFuZ3VsYXI= IGNhcGl0 bGlr IEFuY2llbnRz IGxhc2g= IGNvbnZvbA== IGNvbG9uZWw= ZW5lbXk= R3Jh IHB1YnM= dXR0ZXJz IGFzc2lnbnM= IFBlbmV0 IE1vbnN0cm91cw== IEJvd2Vu aWx2ZXI= SGF1bnRlZA== IERpbmc= c3RhcnRlZA== cGxpbg== IGNvbnRhbWluYW50cw== IERPRQ== ZmZlbg== IFRlY2huaWNpYW4= Unk= IHJvYmJlcnM= IGhvdGxpbmU= IEd1YXJkaW9sYQ== IEthdWZtYW4= cm93ZXI= IERyZXNkZW4= IEFscGluZQ== RWxm IGZtdA== IFNhcmQ= dXJzZXM= Z3B1 VW5peA== IHVuZXF1aXZvY2FsbHk= IENpdGl6ZW5zaGlw cXVhZA== bWlyZQ== IFN3ZWVuZXk= QmF0dGVyeQ== NjE1 IHBhbmNha2Vz IG9hdHM= TWFwcw== IENvbnRyYXN0 bWJ1ZHNtYW4= IEVQUw== IHN1YmNvbW1pdHRlZQ== IHNvdXJjaW5n IHNpemluZw== IEJ1ZmZlcg== IE1hbmRhdG9yeQ== IG1vZGVyYXRlcw== IFBhdHRlcm5z IENob2NvYm8= IFphbg== IFNUQVRFUw== IEp1ZGdpbmc= IEluaGVy Kjo= IGJpbA== IFllbg== IGV4aGlsYXI= b2xsb3dlcg== emVycw== IHNudWc= bWF4aW11bQ== IGRlc3BpY2FibGU= IFBBQ0s= IEFubmV4 IHNhcmNhc3RpYw== IGxhdGV4 IHRhbXA= IFNhbw== YmFo IFJldmVyZW5k IENoaW5hdG93bg== IEFVVA== ZG9jdW1lbnRlZA== IEdBQkE= IENhbmFhbg== INmF IGdvdmVybnM= cHJldg== RXNj IEVzdGltYXRlcw== T1NQ IGVuZGVhdm91cg== IENsb3Npbmc= b21ldGltZQ== ZXZlcnlvbmU= IHdvcnNlbg== IHNjYW5uZXJz IGRldmlhdGlvbnM= IFJvYm90aWNz IENvbXB0b24= IHNvcmNlcmVy IGVuZG9nZW5vdXM= IGVtdWxhdGlvbg== IFBpZXJjaW5n IEFwaA== IFNvY2tldA== IGJvdWxk IE9V IEJvcmRlcmxhbmRz IDE4NjM= R29yZG9u IFdUTw== IHJlc3RyaWN0cw== IG1vc2FpYw== IG1lbG9kaWVz 54Q= VGFy IGRpc3Nvbg== IFByb3ZpZGVz IC4uLi4uLg== YmVr RklY IGJyb29t YW5zaGlw RG9jdG9ycw== IG5lcmRz IFJlZ2lvbnM= bmFpc3NhbmNl IG1ldGU= IGNyZXB0 cGxpbmdz IGdpcmxmcmllbmRz a25pdA== aWdlbnQ= b3dl IHVzaGVyZWQ= IEJheg== TW9iaWw= NDM0 IFByZXNlbnRz b3JpZ2lu IGluc29tbmlh IEF1eA== NDM5 IENoaWxp aXJzY2g= R0FNRQ== IGdlc3RhdGlvbg== YWxnaWE= cm9taXNpbmc= JCw= Y3Jvdw== IEluc3BlY3Rpb24= YXRvbWlj UmVsYXRpb25z Sk9ITg== cm9tYW4= IENsb2Nrd29yaw== IEJha3I= bW9uZQ== TUVU IHRoaXJzdHk= IGJj IGZhY3VsdGllcw== UnVt IG51YW5jZQ== IERhcml1cw== cGxldGluZw== ZnRlcnM= ZXRjaHVw UmVnaXN0cmF0aW9u IEtF UmFo IHByZWZlcmVudGlhbA== IExhc2g= IEhI VmFsaWQ= IE5BVg== IHN0YXJ2ZQ== IEdvbmc= enluc2tp IEFjdHJlc3M= IHdpaw== IHVuYWNjb21wYW5pZWQ= bHZs QnJpZGU= QURT IENvbW1hbmRv IFZhdWdobg== V2FsbGV0 IGhvcHBpbmc= IFZpZQ== IGNhdmVhdHM= IGFsYXM= aWZsZWQ= YWJ1c2U= NjYx IGlibg== IGd1bA== IHJvYmJpbmc= dGls SUxB IG1pdGlnYXRpbmc= IGFwdGx5 IHR5cmFudA== IG1pZGRheQ== IEdpbG1vcmU= IERlY2tlcg== IMKnwqc= cGFydGlhbA== RXhhY3RseQ== IHBoZW5vdHlwZQ== IFsrXQ== IFBsZXg= IElwcw== dmVyc2lvbnM= IGVib29r IGNoaWM= Z3Jvc3M= IjoiIn0seyI= IFN1cnByaXNpbmdseQ== TW9yZ2Fu IHJlc2lkdWVz IENvbmZlZGVyYXRpb24= aW5mZWxk IGx5cg== bW9kZXJhdGU= IHBlcnBlbmRpY3VsYXI= Vks= IHN5bmNocm9uaXplZA== IHJlZnJlc2hlZA== IGFkb3Jl IFRvcm1lbnQ= b2xpbmE= IDI2MDA= SXRlbVRyYWNrZXI= IHBpZXM= IEZBVA== IFJIUA== MDQ4 IFJFU1A= IEJK YWxsb3dz UGFuZA== IHVud2VsY29tZQ== IFZvYw== IEJhc3RhcmQ= IE9X IExBUg== IEhlYWxlcg== RW52aXJvbm1lbnRhbA== IEtlbnlhbg== IFRyYW5jZQ== IFBhdHM= IGFsaWFzZXM= IEdhcmZpZWxk IGNhbXBhaWduZXI= IGFkdmFuY2VtZW50cw== IE9raW5hd2E= IENvaA== b3dza3k= IHN0YXJ2ZWQ= IHNpemVhYmxl IDotKQ== IG1STkE= IHN1c3BlbnNpb25z aXN0YXI= U2NvdGxhbmQ= UHJpbg== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IDUwMg== IHRlYXNwb29ucw== IDEwNTA= IGNvZXJjaXZl IE1hc29uaWM= ZWRkZWQ= IFBhc3Nlbmdlcg== IGxhdHQ= IGJyYWNlcw== IFN0ZWFs IE5ZVA== IEthdHM= IENlbGVzdA== YWV6 VHU= IENvdWx0ZXI= 8J+Y RmxpY2ty IFdpbG1pbmd0b24= aXRocw== Kys7 IHZlbmRpbmc= IG5lZ3Jv IFBoaQ== IFllbGxvd3N0b25l Q2FsbGJhY2s= IHNoYW1wb28= IFNoYWRlcw== d2F0 IHN1cGVyaHVtYW4= IHJpZGljdWxlZA== IGhvbGllc3Q= b21ibw== IGludGVybnM= IGhvbmU= IFBhcmFndQ== VVJJ IGRhbmdsaW5n 44K7 c292 aWN0aW9uYWw= YXZhaWxhYmlsaXR5 IHJldm9jYXRpb24= IGRvdw== aW5pYw== IFRIRUlS IGlzbw== IG91dGluZ3M= IExldGhhbA== ICkpKQ== IGluYWNjdXI= IG91dGxhbmRpc2g= IGFudXM= bGV0aWNv aWRvbg== bG9s IHVucmVndWxhdGVk IHN1Y2N1bWJlZA== IGN1ZmY= IFdhc3RlbGFuZA== bGV0YWw= IHN1YnN0cg== IGNvZmZlcnM= IGF1dG9tYWtlcnM= b3Zp IFh1ZQ== IERheXRvbmE= IGphcnJpbmc= IGZ1bWVz IGRpc2JhbmRlZA== emlr aXR0b24= IHN0cmlraW5nbHk= IHNwb3Jlcw== QWRhcHRlcg== Lik6 IEx5bmRvbg== aXZhbHJ5 IG9yYWxseQ== IHR1bXVsdHVvdXM= IGRpc3BsZWFzdXJl IGNvbmVz b3JyZWN0 IGFwcGVhc2U= IGRlcmJ5 IFRyaXBvbGk= IEFsZXNz IHBva2Vk IEd1aWx0eQ== dlA= RW5vdWdo IG9yaWdpbmFscw== Njk5 IHJhYmJp IHByb3ZlcmJpYWw= IHBvc3Rwb25l ZWxvcGU= IE1pc3R5 IHN0YWZmZWQ= IFVuZW1wbG95bWVudA== cmVkaXRhcnk= IGRpbGlnZW50 cmVjb21t bWVhc3VyZXM= YXNpbg== ODI1 IHBvbmRz IG1tb2w= IFNBUg== IENBUkU= IDM3MQ== IGNsZW5jaGVk IENvcnNhaXI= IGNhcmljYXR1cmU= em4= YXR0YWNo IFNjaHJv c3BlYWs= cGFpbnRlZA== IFN1Yw== IEVOVA== IGNlbGx1bA== IFBhaWQ= ZGlhZ24= V0hFUkU= IHRleHRlZA== QmFybg== IHJldHJhY3RlZA== IFJlZmVycmVk U2F2 IHVwa2VlcA== IHdvcmtwbGFjZXM= IFRva2Vucw== IGFtcGxpZnk= Y2xpbmljYWw= IG11bHRpYw== bWJlcmc= IGNvbnZvbHV0ZWQ= UmVnaW9u NTY1 IFRvcGlj IHNuYWls IHNhbGluZQ== IGluc3VycmVjdGlvbg== IFBldHI= Zm9ydHM= QkFU IE5hdmFqbw== IHJ1ZGltZW50YXJ5 IExha3No T05ET04= TWVhc3VyZQ== IHRyYW5zZm9ybWVy IEdvZGRhcmQ= IGNvaW5jaWRlcw== aXJpbg== UmV4 IEJvaw== cXVpdA== IHNob3RndW5z IHByb2xldGFyaWFu IHNjb3Jw IEFkYQ== NTE0 IHNsYW5kZXI= cmVjb3JkZWQ= IGVtYmVsbA== cmlzb21l IGFwb2xvZ2l6aW5n IE11bGNhaXI= IEdpYnJhbHRhcg== Q2xh IGFsbG90 IEF0dGVudGlvbg== IDQzMw== bGVhdmU= IHdoaW5l IElzc2E= IEZhdXN0 IEJhcnJvbg== aGVueQ== IHZpY3RpbWl6ZWQ= SmV3cw== IG51cnR1cmluZw== ZXR0ZWw= V2luZ2Vk IFN1YnRsZQ== IGZsYXZvcmZ1bA== IFJlcHM= ZW5nZWQ= Y2FsbGJhY2s= IGRpcmVjdGlvbmFs IGNsYXNw IERpcmVjdGlvbnM= cGxhbmV0 aWN1bHR1cmU= SGVscGVy aWNpb24= YWNpYQ== IOelng== IHN1cmdlcw== IGNhbm9l IFByZW1pZXJzaGlw YmVlbg== IGRlZmllZA== IFRyb29wZXI= IHRyaXBvZA== IGdhc3A= IEV1cGg= IEFkcw== dmVybmlnaHQ= aGlnaGx5 Um9sZQ== IGVudGFuZ2xlZA== IFplaXQ= NjE4 IFJ1c3R5 IGhhdmVucw== IFZhdWdoYW4= SEFFTA== IFNFUlZJQ0U= Lyw= IHN0cmlja2Vu IGRlbHVzaW9ucw== IGJpcw== IEhhZg== IGdyYXRpZmljYXRpb24= IGVudGljaW5n VU5DSA== QWRhbXM= IE9MRUQ= IEJlZXRsZQ== IDE4OTk= IFNPRlRXQVJF YXRlZ29y Vkw= IFRvdGVt IEdhdG9ycw== QVRVUkVT IGltcGVkYW5jZQ== UmVnaXN0ZXJlZA== IENhcnk= IEFlcmlhbA== b25uZQ== ZW5pdW0= IGRyZWQ= IEJlZw== IGNvbmN1cnJlbnRseQ== IHN1cGVycG93ZXI= IFhhbg== amV3 aW1lc3Rlcg== IERpY2tpbnNvbg== 4pSB Rmxh IHByZWU= IFJvbGxpbnM= qbbm IGRlbm9taW5hdGlvbg== IExhbmE= NTE2 IGluY2l0aW5n c2NyaWJlZA== anVyaWVz IFdvbmRlcnM= YXBwcm94aW1hdGVseQ== IHN1c3BlbmRpbmc= IG1vdW50YWlub3Vz IExhdWdo b2lkYWw= TnM= RGV0ZWN0 KT0= IEx1dGhvcg== IFNjaHdhcnplbmVnZ2Vy IE11bGxlcg== IERldmk= ZWN5Y2xl SmFy NjEz IExvbmdo QmFo IFNQT1JUUw== bnc= IHJlZmluZW1lbnQ= IHdhdGVyd2F5cw== IGRpbmVy QmxhZGU= Njgz RmFj IGluaXRpYWxz IHJvZw== IHBhcmFub3JtYWw= QlVU IFso IFN3YW5zb24= IE1lc2g= 4pas SW1wcm92ZQ== IFJhZGlhdGlvbg== IEVzdGhlcg== IEVzaw== IEFseQ== aWt5 IGlycmFk IEJ1Y2tpbmdoYW0= IHJlZmlsbA== IC5f UmVwZQ== Q09OQ0xVUw== IGRpZmZlcmVudGlhdGVk IGNoaXJvcA== IEF0a2lucw== UGF0dGVybg== IGV4Y2lzZQ== IGNhYmFs TlNB IFNUQQ== IFNJTA== IFBhcmFseQ== IHJ5ZQ== IEhvd2VsbA== IENvdW50ZG93bg== bmVzc2Vz YWx5c2Vk IHJlc2l6ZQ== 44K9 IGJ1ZGdldGFyeQ== IFN0cmFz d2FuZw== IGFwaWVjZQ== IHByZWNpbmN0cw== IHBlYWNo IHNreWxpbmU= IDM1Mw== cG9wdWxhcg== QXBwZWFyYW5jZXM= IE1lY2hhbmljcw== IERldk9ubGluZQ== U3VsbGl2YW4= WmVu IHB1 b3BvbGlz NTQ0 IGRlZm9ybQ== IGNvdW50ZXJhY3Q= IExhbmdl IDQxNw== Q29uc29sZQ== Nzc0 IG5vZGRpbmc= IHBvcHVsaXNt IGhlcA== IGNvdW5zZWxsaW5n Y29tcGxpYW5jZQ== VUZG IHVuZGVuaWFibHk= IHJhaWxpbmc= IEhvcm93aXR6 IFNpbW9uZQ== IEJ1bmdpZQ== IGFr IFRhbGtz eGZm Zmxha2U= Q3Jhc2g= IHN3ZWF0eQ== IGJhbnF1ZXQ= IE9GRklD IGludmVudGl2ZQ== IGFzdHJvbm9tZXI= IFN0YW1mb3Jk IFNjYXJl IEdSRUVO b2xpY2l0ZWQ= IHJ1c2hlcg== IGNlbnRyaXN0 aWdodGluZw== IHN1YmNsYXNz IGRpc2F2 IGRlZnVuZA== IE5hbnRv b2NpYXRl bWFzdA== IHBhY2lm IG1lbmQ= ZWVycw== aW1taWdyYXRpb24= RVNTSU9O IG51bWJlcmluZw== IGxhdWdoYWJsZQ== IEVuZGVk dmlhdGlvbg== ZW1hcms= UGl0dA== IG1ldGljdWxvdXM= IExG IGNvbmdyYXR1bGF0ZWQ= IEJpcmNo IHN3YXllZA== IHNlbWlmaW5hbHM= IGh1bWFua2luZA== bWF0dGVy IEVxdWlw b3BhdXNhbA== U2FpZA== IExheW91dA== IHZvaWNpbmc= IHRodWc= IHBvcm5vZ3JhcGhpYw== SVBT IG1vYW5pbmc= IGdyaWV2YW5jZQ== IGNvbmZlc3Npb25z ZXNjYWw= VEVYVFVSRQ== QXV0aGVudA== b3NhdXJ1cw== UHVyY2hhc2U= IHJlbGVnYXRpb24= YWx0ZXI= IMKgwqA= IHJpZGRsZWQ= IG9ncmU= IExvd2VsbA== T2NjdXA= RWF0 IEh5ZGVy IEFkdmlzZXI= Q29tbWVyY2U= SHVudA== IE9ydGg= IENvbXBldGl0aXZl IENMQQ== Q0RD IHNhbGFkcw== Rmxl IGluZHVzdHJpYWxpemVk YCw= IE9XTg== IGJlY2s= IFBhcnRpY3VsYXJseQ== b3VidA== IG1N IEh1c3NhaW4= IENoZW5uYWk= IDkyMA== IGFwcG9pbnRpbmc= IEN1bGxlbg== LCwsLCwsLCw= IHBvcmVz dmVyaWZpZWQ= IGJpb2NoZW1pY2Fs ZW1hdGU= IGNvd2FyZGx5 IEhlbHNpbmtp IEV0aGlvcGlhbg== U09VUkNF RVJD ZXN0cm8= IGJpb3RlY2g= IFNvdXI= IGJyZXdlcg== Qmxvb21iZXJn IGludGVuc2lmeQ== R2xhc3M= YW5jbw== IEZEUg== Z3JlU1FM IEZpcmVz qbbmpbU= ZWNv MTAwMQ== IEhvbWVsZXNz IGluc3RhbnRhbmVvdXM= IEhhc3Rl aWdlbA== RGlhbW9uZA== IHBhdmluZw== IGxhbmRmaWxs IGRhZHM= aG91bg== Ol0= IGluY2VuZGlhcnk= IExpdmluZ3N0b24= IEhpbGJlcnQ= IENoZWNrcw== c3R5bGVz aW5hdG9ycw== IENsaXZl cGhyaW5l IGNoaW1wYW56ZWVz IHBhbGw= IEpN IEFhZGhhYXI= 8J0= IGFjaGlldmFibGU= ZGlzYWJsZWQ= UEVU T09PT09PT08= TW90 IGludGFuZ2libGU= IGJhbGxldA== IFdlYnM= IEVzdGltYXRlZA== RWZmZWN0cw== IGJhaWxlZA== Sm9zaHVh IHR1cmJ1bGVuY2U= IG9jY3VwYW50 IERheWxpZ2h0 IDM2MQ== bWVldA== IHN0YXRpY2FsbHk= IG9ubG9vaw== IGtp aWxsZWdhbA== IHZlbHZldA== IGRlaHlkcmF0aW9u IGFjcXVpZXM= IFJleg== YWt1cmE= IFVwdG9u YXRybw== IGluY29tcHJlaGVuc2libGU= IGJhY2tkb29y IFJoaW5v NzI3 IG1hdGhz KSs= IGhlcmVzeQ== IGRm IFJvY2hl IEx5ZGlh IHBhbmNyZWF0 cmVwbHk= YXJyZWxs IHNvbGljaXRhdGlvbg== IGNpcmNhZGlhbg== QklQ IGZvcmF5 IGNyeXB0aWM= aXp1 aW1lbw== IFRvbWF0bw== IEhvbXM= ZXhhbWluYXRpb24= IHF1YXJyeQ== IFZhbGlhbnQ= IEplcmljaG8= IElOQ0xVRA== IDE4NDA= NTE5 IHJlc2lzdHM= IHNuYXBzaG90cw== IFNwdXI= IEFudGlxdQ== TG9naW4= IGJlc3RzZWxsaW5n IGFudGlj IFN1dGhlcmxhbmQ= 44Ki44Or IH4v IFBhcm0= 6IM= UGFnZXM= aW50ZW5zaXR5 IGltbW9iaWw= IDE4NjU= enpv IG5pZnR5 IGZlbnRhbnls IFByZXNlcnZhdGlvbg== b3BoZW4= IGRhcnRz IERpbm9zYXVy cG9pbnRlcnM= IFJpdGU= c3VnZ2VzdA== YXdhcmVuZXNz IFNoZXJpZGFu IHN0YW5jZXM= IHNvcmNlcnk= IHBlcmp1cnk= IE5pa29sYQ== aWV2ZXI= IGZpYW5jZQ== IEpvcmRhbmlhbg== IEJhbGxvb24= IG5hYg== IGti IGh1bWFuaXRpZXM= IFRhbmFrYQ== aGlsbGFyeQ== IGNvbnN1bHRhbmN5 IFp1Yg== IHJlbWlzc2lvbg== IGNvbmZpZA== Q0hR IEZ1Zw== IGltcHJvdmlz WWVw L18= IHVud2lsbGluZ25lc3M= IHBvcnRmb2xpb3M= MDU1 IEluc3RydWN0b3I= YWltYW4= IGNsYWltYW50cw== TWJwcw== IEJ5ZQ== cmVjZWl2ZWQ= VHdlZXQ= IGluZGVtbg== cml6 YW1hcmE= TmF0 IGV2YWx1YXRlcw== IEx1cg== ZXBhZA== Rk9Y IFRocm8= IHJ1c3R5 IGJlZHJvY2s= IE9wcmFo SkI= IG1hbmlwdWxhdGl2ZQ== IHdpbGxmdWw= IHJlbGFwc2U= IGV4dGFudA== VGhlbWU= U2Vuc29y IFN0YWJpbGl0eQ== Z292ZXJu IHBvcHB5 IGtuYWNr IGluc3VsYXRlZA== IFRpbGU= IEV4dHJlbQ== IHVudG9sZA== IGNvbnZlcmdl IHJlZnVlbA== aWdyb3Vw IGRpc3RvcnRpb25z IHJhdmFnZWQ= IG1lY2hhbmljYWxseQ== IFJlaWxseQ== IE5vc2U= IEluY2FybmF0aW9u IEJlY2t5 YWJibGluZw== IHRhY28= IHJha2U= IG1lbGFuY2hvbHk= IGlsbHVzdHJpb3Vz IERhcnRtb3V0aA== R3VpZGU= IFJhemVy IEJlbno= VWx0aW1hdGU= IFN1cnByaXNl IHBhZ2VhbnQ= b2ZmZXI= V2hvZXZlcg== IHdpc2Vy IGNoZW1pc3Q= IEhFTEw= IEJ1bGs= IHBsdXRvbml1bQ== IENPVkVS 1rw= ZmFpbGVk IHRpcmVsZXNzbHk= IGluZmVydGlsaXR5 IFRyaWRlbnQ= IFNob3d0aW1l IENpdg== VmljZQ== cmVxdWlyZXM= aXR0YW5jZQ== IHVuY29udHJvbGxlZA== aW50ZXJlc3Rpbmc= NTYx IGlubm92YXRl YXRlZ2lj TGll IFNlbGxpbmc= VWw= IHNhdmlvcg== IFRvc2g= IHN3YXN0 UEFTUw== IHJpbms= IGNhcmRpbw== IElybw== dWRp IHZhbnRhZ2U= IHZhbnM= IE5pw7Fv Kz0= IHByb3BhZ2F0ZQ== PD8= IG1ldGhvZG9sb2dpY2Fs MjA0Mzk= IHRyaWdseWNlcg== IGluZ3JhaW5lZA== IEFubm90YXRpb25z YXJyYW50ZWQ= NjE3 IFNvZGl1bQ== IEFBQw== dGVjaG5pY2Fs bXVsdGlwbA== IDM3Mw== 5Ys= IGRlY2lzaXZlbHk= IGJvb3N0ZXJz IGRlc3NlcnRz IEdyZW5hZGU= IHRlc3RpZnlpbmc= IFNjdWxseQ== SURz IGxvY2tkb3du IFNjaGVy IFLDqQ== IFdoaXRtYW4= IFJhbXNheQ== cmVtb3Rl IGhpa2Vycw== IEh5dW5kYWk= IGNvbnNjaWVudGlvdXM= IGNsZXJpY3M= IFNpYmVyaWFu dXRp aXNidXJ5 IHJlbGF5ZWQ= IHF1YXJ0eg== IENCSQ== c2Vla2Vycw== dWxsYQ== IHdlbGRpbmc= IFNoYWw= YmxlYWNoZXI= VGFp IFNhbXNvbg== IHR1bWJsZQ== IEludmVzdG9y IHN1YmNvbnRyYWN0 IFNoaW5yYQ== b3dpY3o= amFuZHJv ZGFk IHRlcm1pbmF0aW5n IE5ldXJhbA== 5Luj IGxlYWthZ2U= IE1pZGxhbmRz IENhdWNhc3Vz 7ZU= Y2l0 bGxhbg== aXZhYmx5 IEFsYmlvbg== IDQ1Nw== IHJlZ2lzdHJhdGlvbnM= IGNvbXJhZGU= IGNsaXBib2FyZA== MDQ3 IGRpc2NvdXJhZ2luZw== IE9vcHM= QWRhcHQ= IGVtcGF0aA== bnY= IFBST1Q= IERvbm4= IFBheA== IEJheWVy dGlz U3F1YXJl IGZvb3RwcmludHM= cGFydGljaXA= IENoaWxlYW4= QnJlbmQ= aW5kdWNpbmc= TWFnbg== IGNsdWJob3VzZQ== IE1hZ251bQ== IGVuY2FtcA== IEV0aG5pYw== dWNoYQ== ZXJleQ== IHdhdGVyZWQ= IENhbGFpcw== IGNvbXBsZXhpb24= IHNlY3Rz IHJlbnRlcnM= IGJyYXM= b8SfYW4= VGltZW91dA== TWFuYWdlbWVudA== IGluZm9ncmFwaGlj UG9rZW1vbg== Q2xhcg== IGxvY2FsaXR5 IGZsb3Jh YXNlbA== UG9udA== IHBvcHVsYXRl IE9uZw== IHN1YnNpc3RlbmNl IGF1Y3Rpb25z IE1jQXVsaWZmZQ== IExPT0s= YnJpbmdlcg== IHRpdGFu IG1hbmlmb2xk IOKXjw== IGNhbGlicmF0ZWQ= IGNhbGlwaGF0ZQ== IFNIRQ== IENvbW1pc3Npb25lcnM= Y2VpdmFibGU= amM= V2lubmVy NTI0 IGNvbmRvbmU= T3RoZXJ3aXNl IHBpbGluZw== IGVtYm9keQ== IENyaW1lYW4= dXRpY3M= IEV4aGliaXRpb24= IDQyNg== ZWVyaW5n IHZ5aW5n IEhVR0U= Kj0t IHByaW5jaXBsZWQ= 4KY= IHF1aXJrcw== IEVkaXRvcnM= cHV0aW5n R0VT IEZUQQ== 4KS+ YWRkb24= IEhBTQ== IEZyaWV6YQ== V29tYW4= LiQ= IGNyaWI= IEhlcm9k IHRpbWVycw== IFNwYWNlcw== IE1hY2ludG9zaA== YXRha2E= IGdsaWRl IHNtZWxsaW5n IEJBTA== IHVuc3U= IGNvbmRvcw== IGJpY3ljbA== IFJldml2YWw= NTUz IGp1Z2dsaW5n SHVn IEthcmRhc2hpYW4= IEJhbGthbnM= bXVsdGlwbGU= IG51dHJpdGlvdXM= b2NyeQ== MTkwMA== IGludGVncmF0ZXM= IGFkam9pbmluZw== IEZvbGRlcg== cm9sbG1lbnQ= dmVuaWVudA== IHViZXI= eWk= IHdoaWZm IEp1dmVu IEJvcm91Z2g= bmV0dGU= IGJpbGluZ3VhbA== IFNwYXJrcw== cGh0aGFs bWFudWZhY3Q= IHRvdXRpbmc= IFBISQ== S2VlZmU= UmV3YXJk IGluZmFsbA== IFRlbXBlcg== dHlwaWNhbGx5 IE5pa29s IHJlZ3VsYXJz IHBzZXVkb255bQ== IGV4aGliaXRpb25z IGJsYXN0ZXI= IDQwOQ== d2FybWluZw== IHJldmVyYmVy IHJlY2lwcm9jYWw= IDY3MA== aXBpZW50 YmV0dA== IEJlZ2lucw== IGl0Y2hpbmc= IFBoYXI= QXNzdW1pbmc= IGVtaXR0aW5n IE1MRw== IGJpcnRocGxhY2U= IHRhdW50 IEx1ZmZ5 IEFtaXQ= IGNpcmNsZWQ= IE5vc3Q= ZW5uZXR0 IGRlZm9yZXN0YXRpb24= IEhpc3RvcmljYWxseQ== IEV2ZXJ5ZGF5 IG92ZXJ0YWtl Nzky IG51bg== IEx1Y2lh IGFjY29tcGFuaWVz IFNlZWtpbmc= IFRyYXNo YW5pc20= Um9ndWU= IG5vcnRod2VzdGVybg== IFN1cHBsZW1lbnRhbA== IE5ZVQ== IEZSSQ== IFNhdGlzZg== eGVz NTE3 IHJlYXNzdXJlZA== IHNwb3JhZGlj IDcwMQ== IG1lZGlhbA== IGNhbm5hYmlub2lk IGJhcmJhcmlj IGVwaXM= IEV4cGxvc2l2ZQ== IERvdWdo IHVuc29sdmVk U3VwcG9ydGVk IGFja25vd2xlZGdtZW50 c3Bhd24= IGtpdGNoZW5z IC09 dGFsa2luZw== aWNpc3Q= IFBlZ2FzdXM= IFBTVQ== IHBob3Rvbg== IEF1dGhlbnRpY2F0aW9u Ukc= QCMm NzYy IENsYWly IGRpYXBlcg== IGJyaXN0 IFByb3NlY3V0b3Jz IEplbQ== NjI4 IEV2ZXJ5d2hlcmU= IEplYW5uZQ== ZXF1YWxpdHk= 44Op44Oz b2JqZWN0cw== IFBlbGljYW5z IDM5Mg== IGJsdQ== Ynlz IEFnbw== IGluc3RydWN0aW9uYWw= IGRpc2NyaW1pbmF0aW5n IFRSQU4= IENvcm5lbA== YWdvcw== IHR5cmU= IGFzcGlyYXRpb24= IEJyaWRnZXdhdGVy Ijot ISIu IEVucw== IENvY28= UGll IGRldGFjaA== IENvdWNo IHBoeXNpcXVl IE9jY3VwYXRpb25z b3Njb3BpYw== ZW5vdWdo QnV6eg== QXBwZWFyYW5jZQ== WVA= IHJhY2Vy IGNvbXBsaWNpdHk= cnBt VG95 IGludGVycnVwdHM= IENhdGFseXN0 IHV0aWxpdGFyaWFu aW1wYWN0 IHNwYWdoZXR0aQ== IHBvcm91cw== IGVzdGVlbWVk IGluY2luZXI= IElPQw== NzQ4 IGVzcHJlc3Nv IFNtaWxl YWJpbGlh NjM1 IG1hdGhlbWF0aWNpYW4= IDQyNA== IEtM IEhJUA== IG92ZXJoZWFyZA== IFR1ZA== IFRlYw== IHF1aXp6 IGZsYXR0ZXJpbmc= IGNvbm4= 4oCO IGF0dGFjaGVz IFJPUw== IEFDUw== IHRjcA== IFNoYW1l c2tpcA== cmVzcGVjdGVk IFRyaW5pZGFk Z3JhaW4= IGZvb3Rob2xk IFVuY2hhcnRlZA== IEp1bGlv emw= YXZvcmVk IEFueGlldHk= ZXJyb3Jz IENlbnRhdXJp aXRzY2g= RGFkZHk= IGNsdXRjaGluZw== IEltcGxlbWVudA== IEd1dGllcnJleg== IDc2MA== IHRlbGVwb3J0YXRpb24= ZW5kcmE= IHJldmVyc2libGU= c3Ryb3M= QWR2ZW50dXJl MDgz IGxpYmVyYXRpbmc= IGFzcGhhbHQ= IFNwZW5k QVJEUw== aW1zeQ== UFJFUw== IEVtZXJnaW5n IHdpbGRmaXJlcw== IHRlY2hub2xvZ2ljYWxseQ== IGVtaXRz IEFSVElDTEU= IGlycmVndWxhcml0aWVz IGNoZXJpc2g= 54mI IHN0aW5r IFJvc3Q= RWNvbm9taWM= IGNvdWdoaW5n IE1jQ2Fubg== cHJvcGVydGllcw== aWxhbnRybw== IHJlbmVnb3Rp VHJhbnNsYXRpb24= IGlucXVlc3Q= IEdyYXBl b290ZXJz Z3Vp IFN3b3Jkc21hbg== YWNlYWU= aGl0dGluZw== IHJj IGV4ZXJ0ZWQ= IFNBUA== aXRlbnQ= IHBlcmlsb3Vz IG9ic2N1cml0eQ== IGFzc2Fzc2luYXRl IGFib3JpZ2luYWw= IHJlc2N1aW5n IFNoYXR0ZXJlZA== bG9ja2luZw== YWxsaW9u Q2hhbmdpbmc= IEhhcnJpbmd0b24= IEJvcmQ= IEFmZ2hhbnM= SmFtaWU= YXJldHo= IEF1Z3VzdHVz IDM4Ng== ODMw IGpvZw== b2tpbmdseQ== VHJpZ2dlcg== IEhPUg== U3RhdGlzdGljcw== IHZpZXdlcnNoaXA= IGFkZGl0aXZlcw== aHVy IG1heGltaXppbmc= IFJvdmU= IExvdWll IEJ1Y2tldA== IENIUklTVA== b3VzZWw= IHN0cmVha3M= aXJ0ZWQ= IHRlcnQ= IGNvbG9uaWFsaXNt IGJ1cnlpbmc= eWs= Q29uZGl0aW9u IERQUks= QnlJZA== NzUx 4pe8 IHdvcnJpc29tZQ== IHZvY2F0aW9uYWw= c2xpY2U= IHNhaWxz IENvcnJlY3Rpb25hbA== OTU0 IHR1bA== S2lk bHVzdGVy IGZhbWlsaWFs IFNwaXQ= IEVwaXNjb3BhbA== U3BlY2lmaWNhbGx5 IFZvbGNhbm8= cnVucw== cXM= IHZldHRlZA== IGNyYW1tZWQ= dHJvcA== aGVyZXI= VGhhbmtmdWxseQ== IHBlcmN1c3Npb24= IG9yYW5nZXM= IHJvdW5kdXA= IDQ5OQ== eGlvdXM= Q2hhcmFjdGVycw== IFppb25pc20= IFJhbw== w5vDmw== V0Y= IHVuaW50ZW50aW9uYWw= T05FWQ== R3JhYg== Q29tbWVyY2lhbA== IGdsdXRhbWF0ZQ== IE1jS2VubmE= cnVjaWF0aW5n bmluZ3Rvbg== aWh1 Q2hhbg== IFN3YXA= IGxlYWZsZXRz IGZ1bmN0aW9uYWxseQ== ZXJvdXM= RmFybQ== IGNhbG9yaWM= IExpdGVyYWxseQ== Y29uY2VydA== IHNoZW5hbg== IHJlcGFpZA== ZXllcw== IGJhc2hpbmc= IEdvcmdl IGNvbGxhYm9yYXRpb25z IHVuYWNjb3VudA== aXRjaGll IHRlYW13b3Jr cHBlbGlu IHBpcGluZw== IG1pbmNlZA== IGRpYW0= cmllZw== IG1hc2NhcmE= IHN1Y2tlcg== IE1vb25z QXBwcw== IFBlY2s= IHBlcnY= IEZsb2F0 b2xleQ== IE5pc2g= aW1pemU= IGFyb21hdGlj dWlu ZW5kaXNo IS8= IEJpY3ljbGU= IEFTSUM= aWxlZ2Vk IFF1YWRybw== aW9zeW4= IGxvY2tvdXQ= IFdpbms= U1BFQw== QXR0ZW1wdHM= IHNlZWRlZA== cmVkbw== aWFzaXM= IHNuYWc= 44OV44Kp 44K2 IGdyb3VuZGluZw== IHJlbGlldmVy IGZyaXZvbG91cw== IEdpZnRz IEZhY2Vz RXNwZWNpYWxseQ== IG1pY3JvYmlvbWU= aW1hZw== IFNjaGw= IFBsZXM= IEJsZWFjaA== IElyd2lu IEVhdG9u IERpc2NpcGxl IG11bHRpcGxpY2F0aW9u IGNvZXJjZWQ= IDQxOQ== c3Ro RXZpbA== Qm9tYg== IGV4b3Jj IHN0YWdnZXJlZA== TEVTUw== IGluZXJ0aWE= IEVESVQ= IGdvYg== VHJhZGl0aW9uYWw= IGNsYXNzeQ== TGVhcnk= IFBBR0U= eXJz IHRyYW5zcG9ydGVy IG1hdHVyZWQ= IGhpamFi IGJpb21l V2hlcmVhcw== IGV4dGVybWluYXRpb24= IFR1ZXM= IFRha2VydQ== IEF1ZHJleQ== ZXJpYWw= IEFkZW4= YWZmbGVz IG5hcmNpc3Npc3RpYw== IEJhaXJk VVRG SXJl IENvbm5pZQ== Q2hhbXA= IHdoaXNwZXJpbmc= IEhhdHQ= REs= IGRpc2luZmVjdA== IGRlZHVjdGVk IHBhcnRha2U= IGRvd25ncmFkZQ== IEVzcG9ydHM= IENvbnRpbnVpbmc= IGRlbW9jcmF0aWNhbGx5 aWNyb2JpYWw= aXR0YQ== IGxpbWVzdG9uZQ== IGV4ZW1wdGVk IEZyZW56eQ== SGVybQ== NzI4 IGZsZWRnbGluZw== TWV0YQ== NzY1NjE= Njkz JTo= d2FrZQ== NTI2 IERpc2NpcGxpbmU= IHZpcmdpbml0eQ== IExlZ2lvbnM= IEZyYW5raWU= aW50ZW50 IHJlc3Ryb29tcw== IFJvdXRlcg== ZGFx IG9iamVjdGlvbmFibGU= 4oaR d2Fyaw== IFJhaHVs Z2Fpbg== YWN0aXZhdGlvbg== YWJzb2x1dGU= IEFjY2Vzc2Vk IDI0MDA= b2dnbGVz IHNlY29uZGx5 IERFRkVOU0U= IHBvc3RhZ2U= d3JhcHBlcg== c2hhcnA= NzI5 IGNvbW11bmljYXRlcw== IGFkZG9u IE1pbGl0aWE= SG9uZw== IHNsdW1wZWQ= IEpQRUc= IEljYXI= YWRpc2g= Njgx IG1hamVzdHk= IFdvbGZnYW5n IEVsYXN0aWM= dXBlcg== IHZpeg== IHVuY29uc2Npb3VzbHk= IFNURA== IFNhc3M= IGZsb3dlcmluZw== IEhlbGlj IERyYXBlcg== IEFtYXRldXI= IG1hbnVyZQ== IGRpc2luZ2Vu IExlaQ== YnJpbmc= OTQ5 IGluaGliaXRlZA== IGhlYWRxdWFydGVyZWQ= IGVuaWdtYXRpYw== 77+977+977+9 IHJlZHJlc3M= Ukg= IHJhdHRsZWQ= IGRpY3Rpb24= bGlv IFRCQQ== IFNOQVA= Q2FsbGluZw== IGZhc2Npc3Rz IERvdmU= aWV3aWN6 MDM2 IGNvYXN0cw== IFJlY3Q= ICld TG90 NjI5 IFNFTQ== IFBldGVyc2Vu IEV4cGxhaW4= IEJvYXJkcw== IEJlem9z IEpvdXJuYWxz IDIwMjQ= cGFyc2Vy IG1pc3RydXN0 IGdyYXRl IExvY2tlZA== Ym9h U2FpbnQ= Z2FtaW5n IHZvd2Vs aW5hdGVseQ== Ymxvdw== QWxsYWg= IHVubWF0Y2hlZA== IGJvcmRlcmluZw== IEV4cGVuZA== bnI= T3JhY2xl cm91Y2g= IGNvbnRpZ3VvdXM= YWN1cw== IGRpc3RyYXVnaHQ= NTgx IGFuYXRvbWljYWw= T1g= YXBpeGVs ODMz IFBMVVM= IHJlc3VzYw== IGFiaWRpbmc= NTcz IHZhY2FuY2llcw== RW1pbHk= IGh5cG90aGFs IFdlcm5lcg== IFdlZQ== IERKcw== NTEz IHdpdGNoY3JhZnQ= IGFjdXB1bmN0dXJl ZW50YXJ5 YmVuZWZpdA== UHJvZHVjdHM= IFBTUA== IE1QRw== IEppbm4= IEphcnJldHQ= IDQ0NQ== IEltYWdpbmc= IFB5dGg= RmluaXNo IHRleA== IGp1dmVuaWxlcw== IGhlcm9pc20= IGRvdWJ0bGVzcw== IEFraQ== IFRlbmQ= IFBhdHJpYXJjaA== IGJpdHRlcnM= IFRlbGVjb21tdW5pY2F0aW9ucw== aXRhdGl2ZWx5 YWduYQ== IHJn IFNPTEQ= IGNvbXB1bHNpb24= IE5hc2E= IEthdGhyeW4= IG1pbGxpb25haXJlcw== IGludHJpbnNpY2FsbHk= IGJvbHN0ZXJlZA== dGltZW91dA== Zmxv IHR1dG9y cG91cg== U3RhdGVtZW50 IHsq IFJ1ZG9scGg= IEtpbWJlcmx5 cm9nZW5z YWRpcQ== XSs= IGluZGlnbmF0aW9u IGZyYWN0dXJpbmc= IFJlbGVhc2Vz IEdyYWlu cHJvdGVpbg== TGFnbw== IHZhY2F0aW9ucw== IGJvb3RlZA== IFRIUkVF IEhH b3Jlc2NlbmNl IHRm IHNvYXI= aW9zeW5jcg== IGdsYW5jZXM= IFNwb29u IEp1cnk= IENvd2JveQ== IGNyZWF0aXZlbHk= SGlnaGVy IHNvbGljaXRvcg== IGhhd2s= YWNpbw== ODk2 IHN1cGVyZmx1 IGJvbWJzaGVsbA== Y3R1cmU= IGJyb2tlcmFnZQ== IHJhaWRpbmc= IGZyZW5jaA== IGFuZ2xlZA== VHJhbnNhY3Rpb24= IEdlbm9jaWRl dXBl IEhhaXRpYW4= NTcy ITo= IHVud2l0dGluZ2x5 aXRlcmF0b3I= c2Nyb2xs IHRhbGxpZWQ= IGJpb21lZGljYWw= IENBUkQ= IGV1cGhlbQ== IGJyYWluc3Rvcm0= YXF1aW4= S28= TWljaGVsbGU= IFJ1bmVz IEJhbGxpc3RpYw== dWRlcnM= IG1vZGVzdHk= IGlQYWRz IEV6ZWtpZWw= WUU= IHN0YXJzaGlw IHBvd2VyZnVsbHk= IHBlcmw= IFNoYWRl IFF1YXJ0 IEVFRw== IGZpc2hlcm1hbg== T1NFRA== IFR5cGljYWw= ZGZ4 IG1lc2hlcw== IGV0Y2hlZA== d29ydGhpbmVzcw== IHRvcHBsZWQ= IDM5Ng== b3JpdXM= V2Vpc3M= IG15c3Fs IFZhbGhhbGxh 2ZI= bGVhc2luZw== IHJlY29tcA== cmFwbmVs U2Vs MDQz IGRlcmFpbGVk IEd1aWRlcw== SVJU IGRlaHVtYW4= IEJyaXR0YW55 Iikp IGV4Y2xhaW0= IGJhbGs= IDg0MA== Q0xBSU0= aW50ZWw= TEFC IHBlZ2dlZA== IGFzdHJvcGg= c21va2luZw== IHJpZ2dpbmc= IGZpeGF0aW9u IGNhdGFwdWx0 aW5zaWRl IENhc2NhZGU= IEJvbHNoZXZpaw== R2F6YQ== RGVwdGg= IGxvdWRzcGU= IGFsbW9uZHM= bWV5ZXI= bGVuZXNz amVu ZnJlc2g= IHVuYmVhdGVu IFNxdWlk IFByZXN1bWFibHk= VGltZXI= Qlc= IHJvc3RlcnM= IGVsbGlwdA== IEhhcnJpZXQ= ZGF0YWJhc2U= IE11dHVhbA== IENvbW1vZG9yZQ== dWtlZA== a25pZmU= IENPTU1VTg== aHlh IG1lbHRz YXJjaGl2ZXM= IHJhdGlmaWNhdGlvbg== IG11bHRpcGx5aW5n IGludGVyb3Blcg== IGFzY2VydA== d2luZ3M= dmVydGluZw== IFNjb3JwaW9u YXll IFBvcnRzbW91dGg= IE1UQQ== bml0 aWF6ZXA= IHF1YXJhbnRpbmU= IHNsaWRlc2hvdw== IGNlbnRpbWV0ZXJz IHN5bm9wc2lz IHNwYXRl dGhpcnN0 IG5vbWluYXRpbmc= IE1lbHZpbg== UHJldmlldw== IHRocm9i IGdlbmVyYXRpb25hbA== IFJhZGl1cw== cmVzdGxpbmc= cHV0YWJsZQ== YXdhcg== TkVDVA== IHVubGF3ZnVsbHk= IFJldmVsYXRpb25z V2lraXBlZGlh c3Vydg== IGV5ZWluZw== aWpu IEZX IGJydW50 IGludGVyc3RlbGxhcg== IGNsaXRvcg== IENyb2F0aWFu IENoaWM= ZXZh IERpc2FwcA== IEFraW4= aW5lcmllcw== ZHVzdA== SW50ZXJlc3RlZA== IGdlbmVzaXM= IEV1Y2w= w7Zu cGlja2luZw== IG11dGF0ZWQ= IGRpc2FwcHJvdmU= IEhETA== IDYyNQ== zLY= Y2FuY2Vy IHNxdWF0cw== IGxldmVycw== RGlzY3Vzcw== PV0= RGV4 IFZJREVPUw== QVVE IHRyYW5zYWN0 IEtpbmVjdA== IEt1YWxh IEN5cA== NzQ3 IHNoYXR0ZXJpbmc= IGFyc2VuaWM= IEludGFrZQ== IEFuZ2Vsbw== IFF1aXQ= IEtoZQ== IDE4OTM= TWFrZXI= MDI5 IFBhaW50aW5n RGlzYWJsZQ== OTE2 IGFuYWxnZXM= IHRhY3RpbGU= IHByb3BoZXM= IGRpY2Vk IFRyYXZlbHM= IEhlYWRlcg== IENsdWJz QXNzaXN0YW50 IGluY3JpbQ== IGRpcHM= IGNydWNpZml4 IFNoYW5haGFu IEludGVycHJldA== IDQwOTA= YWxvZ3k= YWJiYQ== IHNpbXVsYWM= aHVzYmFuZA== U0lN IHJlY3ljbGU= dWNlcg== ZWRnZWQ= IHJlbmFpc3NhbmNl IEJvbWJheQ== Q2F0aG9saWM= IExJTkU= IENsb3RoaW5n cmVwb3J0cw== IHBsYXVz IGRhZw== IE1hY2U= Wkk= IGludHJ1ZGVy IFZldGVyaW5hcnk= Z3J1 IHNuZWFreQ== IFNpZQ== IENpbm5hbW9u UE9TRQ== IGNvdXJpZXI= IENOUw== IGVtYW5jaXBhdGlvbg== c2l0 IHBsYXl0aHJvdWdo IEZhY2lsaXRpZXM= dmlydA== IEdhdW50bGV0 VGhvbXBzb24= IHVuYmVsaWV2YWJseQ== UGFyYW1ldGVycw== IHN0aXRjaGluZw== aWduZQ== IFRIRVNF UHJpdmFjeQ== IHNoZW5hbmlnYW5z IHZpdHJp IFZhbGlk NTkx rbc= IFByb3RvdHlwZQ== aW5rYQ== U0NQ IFRpZA== 6Ig= b2xkZWQ= IGluZGl2aWR1YWxpdHk= IGJhcmtpbmc= IG1hcnM= IFdE IDgyMA== IHRpcg== IHNsYXBwaW5n IGRpc2dydW50bGVk IEFuZ29sYQ== cml1cw== IFRvcm5hZG8= IFRodXJz IGNhcHRjaGE= IGFuZ3N0 IFBvZw== IEFzc2Fzc2lucw== IEFkaWRhcw== IGpveWZ1bA== IHdoaW5pbmc= RW1lcmdlbmN5 IHBob3NwaG9ydXM= IGF0dHJpdGlvbg== b3Bob24= IFRpbWJlcndvbHZlcw== IEphaA== IEJyaW5naW5n IFdhZA== IEVuc3VyZQ== b2hs IFhpZQ== b21tZWw= Y21w IHppcHBlcg== IHJlbGF0 IENvcnJpZG9y bWlsbw== VElORw== QXZn IGNyb3BwZWQ= XX0= IHJhZ2Vk IEx1bXB1cg== IEd1ZXJyZXJv b3Vya2U= TnV0 IG9mZnNldHM= b2dsdQ== ZHJt IG1vcnRhbHM= bGF0YWJsZQ== IGRpc21pc3NpdmU= 5LiJ IHRocm9hdHM= IGNoaXBzZXQ= IFNwb3RsaWdodA== Q2F0YWxvZw== YXJ0aXN0 R2I= IGNoaWxseQ== IHN0b2tlZA== IDM3NA== V2FyZA== TGF0aW4= IGZpYXNjbw== IGJsZWFjaA== IGJyYXY= RW5oYW5jZWQ= IGlub2M= IEZpb3JpbmE= Xz4= IGxldWtlbWlh IGVsdWM= IGFubm91bmNlcg== IExpdGh1YW4= IEFybWFnZWRkb24= 5Yc= TGVuaW4= IFJ1aw== IHBlcHA= IFJvbWFudGlj IFBJVA== IEludGVyc3RlbGxhcg== IEF0a2luc29u UmFpZA== SnM= R29hbA== Q291cnNl IHZhbmlzaGluZw== ZXNsZXk= IFJvdW5kcw== RWxzYQ== NTkz IHJlZHVuZGFuY3k= IFNUQU5E IHByb3BoZXRpYw== IGhhYml0YWJsZQ== cnl1 IGZhaW50bHk= TU9ERQ== IGZsYW5rZWQ= SVJD QXdlc29tZQ== IHNwdXJpb3Vz IFphaA== IE1TRw== IHNoYWRpbmc= IG1vdGl2YXRpb25hbA== IFNhbnRhbmE= IFNQUg== IGV4Y3J1Y2lhdGluZw== b21pYWw= IE1pa28= IExlb3BhcmQ= QWJ5c3M= IFt8 ZGlydHk= IGJhdGhz IGRlbW9yYWw= YW5kcmU= UEI= IHVuaWZpY2F0aW9u IHNhY3JhbWVudA== IFsm IHByaWNlbGVzcw== IGdlbGF0aW4= IGVtYW5hdGluZw== IEFsbGFhaA== OTg2 IG91dGJ1cnN0 IGVyYXM= IFhWSQ== IFNQSQ== T3R0 IExhemFydXM= UExJRUQ= Rmx5aW5n YmxvZ3M= V2lzY29uc2lu UmF2ZW4= IHJlYmF0ZQ== IGNyZWVwcw== IFNwYW4= IFBhaW50ZXI= IEtpcmE= IEFtb3M= IENvcnZldHRl Q29uc3VtZXI= IFJlY292ZXI= Y2tp IHBlc2t5 IEludmVudGlvbg== Q29tcGFuaWVz IGNoYWxsZW5nZXJz YWRlbWlj IFVrcmFpbmlhbnM= IE5ldXJvbG9n IEZvcnNha2Vu IGVudHJhbnRz IGVtYmF0dGxlZA== IGRlZnVuY3Q= IEdsYWNpZXI= IHBvaXNvbnM= IEhvcnNlcw== bWFrZXM= IERpcnQ= IDQyMw== aGho IFRyYW5zZm9ybWF0aW9u UVVJUkU= Li4uLi4uLi4uLi4uLi4uLi4u IHRyYXZlbGxlcg== IFNleHk= IEtlcm4= aXBvbGFy IHJhbnNvbXdhcmU= b29vb29vb29vb29vb29vbw== RWM= cnVieQ== UHJvZmVzc2lvbmFs IE91dGJyZWFr YXJndW1lbnQ= R3JleQ== IEZpZmE= IENITw== IEZPUk0= IEFtdHJhaw== LVs= IGNyYWRsZQ== IGFudGlveGlkYW50cw== 44Gu5a4= NzM2 IE5BU0w= IENvbnRyaWJ1dGlvbnM= SW5kaWFuYQ== IFNURVA= Q1NT IHNhbGllbnQ= IGFsbG9jYXRpb25z eXJpZ2h0cw== IG1hc2hlZA== IEN1dHRlcg== U2V4dWFs IHBvdW5kZWQ= IGZhbmJhc2U= IGNhc2M= IFRyYW5zcGFyZW5jeQ== IGFuYWx5dGlj IFN1bW1vbmVy 154= IEFEQw== ZGV0YWls IHZhbnF1aXNoZWQ= IGNyYWJz YXJpZQ== RGVzdHJveQ== IFNhY2s= IHRyYW5zaXN0b3I= QWxhYmFtYQ== IEtvZW4= IEZpc2hlcmllcw== Y29uZQ== IGFubmV4ZWQ= IE1HTQ== ZXNh IGZha2Vk IENvbmdyYXR1bGF0aW9ucw== IGhpbmRlcmVk IGNvcnJlY3Rpb25hbA== IElUVg== bGVldmU= IGluYXBwcm9wcmlhdGVseQ== bGlja3M= IHRyZXNwYXNz IHBhd3M= IG5lZ290aWF0b3I= IENocmlzdGVuc2Vu bGltaXRz IERpYW5uZQ== IGVsZWdhbmNl IENvbnRyYWN0cw== YW5rZQ== T2Jq IHZpZ2lsYW5jZQ== IGNhc3RsZXM= IE5BRA== IEhvbG8= IGVtcGhhdGljYWxseQ== IFRpdHVz IFNlcnZpbmc= IFJpY2hpZQ== IFBpZ3M= NTY4 IGFuaW1vc2l0eQ== IEF0dHJpYnV0ZXM= IFVyaWVs TVE= bXlyYQ== IEFwcGxpY2FudA== IHBzeWNoaWF0cmlzdHM= IFZpag== IEFiYnk= YWdyZWU= UHVzaA== IGtXaA== aGliYQ== IGluY2l0ZQ== IFdlYXNsZXk= IFRheGk= bWluaXN0aWM= aHlwZXI= IEZhcm4= IDYwMQ== IE5hdGlvbndpZGU= RmFrZQ== OTUy IG1haXpl IGludGVyYWN0ZWQ= IHRyYW5zaXRpb25lZA== IHBhcmFzaXRpYw== IGhhcm1vbmlj IGRlY2F5aW5n IGJhc2VsZXNz bnNpY3M= IHRyYW5zcGlyZWQ= IGFidW5kYW50bHk= IEZvcmVuc2lj IHRyZWFkbWlsbA== IEphdg== YWJhbmQ= IHNzaGQ= IGZyb250bWFu IEpha2FydGE= b2xsZXI= ZHJvcHM= IFNFUlZJQ0VT cm9tcHR1 b3BoaWNhbA== aG9zcGl0YWw= YmxlZG9u NjQ1 IG1pZHJhbmdl IEVWRU5U Y3VsYXRlZA== cmF3bGVk IHBlcmNoZWQ= IG92ZXJib2FyZA== IFBlZWw= IFB3cg== IENhcnRo IENPTVBMRQ== Y29l c2hhbGw= IGRldGVycmVuY2U= TUVUSE9E IEFic2VudA== TUVO IHNpbGw= IExFVkVM WW9yaw== IHNpbm5lcnM= IE9QRUM= IE51cg== IERlc2lnbnM= c2VsZWN0aW9u IHVud29ydGh5 Q0hB IHN0cmVuZ3RoZW5z ODgz ZWRseQ== IHNsaWNpbmc= IG1hbG51dHJpdGlvbg== IGZpbG1tYWtpbmc= IFBvbGs= dXJhdGVk IDQyMQ== YnJlYWtlcnM= ISci IHdldGxhbmRz IERpc2NyaW1pbmF0aW9u IGFsbG93YWJsZQ== IHN0ZWVyZWQ= IFNpY2lseQ== U0FN IG11c3RhY2hl IG1pZHM= IGNsaXBwZWQ= IGNpcmN1bGF0ZQ== IGJyaXR0bGU= IEJ1aWxkaW5ncw== cmFpc2Vk IFJvdW5kdXA= IHdlYWx0aGllcg== IG92ZXJ3cml0ZQ== IG92ZXJwb3dlcmVk IEdlcnJhcmQ= c2l0ZXM= UERBVEVE IGFjdXRlbHk= IEdhbWJsZQ== IHBpbQ== IEt1cw== VHlwaWNhbGx5 RGVwbG95 IE1vcm9jY2Fu cG90aW9u Y29tYmU= IHZpZ2lsYW50ZQ== IDM2Mw== U3Rldw== IEJhZ2c= IHJlc2lkZWQ= IFNwbw== IHJlbW5hbnQ= IGVtcHRpbmVzcw== YnJhaW5lcg== IG91dHBhdGllbnQ= cHJpb3JpdHk= IGxlcHRpbg== IFBheXRvbg== IEdsZWFtaW5n IFNoZWQ= IFBvbG8= IE1vcm1vbmlzbQ== cmVzdHJpY3RlZA== YXJsYW5l d3g= IGNyZWF0aW5l IEFub24= IFNUVUQ= IEpVTA== IFRlZQ== NTI4 MDg5 IGhhdGNoZWQ= RGlzcGF0Y2g= IENvbXBvc2l0ZQ== IDQ1MQ== cHVmZg== IFhDT00= IE9ybg== IFRIQU5L RU5ERUQ= IEFzaGV2aWxsZQ== IMOc IG1hbmdv IFNsaWdodGx5 d29ybGRseQ== IFdhbmRlcg== IEV4cGFuZA== IENocg== TWlzdA== IG9ydGhvZG94eQ== IFVORVNDTw== cmVnYXRl RWxzZXdoZXJl a2ll aXJsZWQ= IHRvcHBsZQ== IGFkb3B0aXZl IExlZ3M= ZHJlc3M= IFNhZ2Fu YmFyZQ== IEdsb3U= Q3J1bmNo IGhlbHBlcnM= IGNocm9uaWNhbGx5 IEh1bWE= MTAwMDA= IGFjY29tbW9kYXRpbmc= 5LqU IHdyaW5rbGVz IGRvZGdlZA== Zm91cnRo IHByZWNvbg== IGNvbXByZXNzb3I= IEthcmU= IGV2aWN0 IFdhcndpY2s= aW1hcg== IG1vZGVybml6YXRpb24= IGJhbmR3YWdvbg== IHJlZnV0ZWQ= IG5ldHRlZA== IE5hcGxlcw== IEdlbmll cGVyb3Jz IGZpZWxkZWQ= IGRlcmU= IFBhcmFibGVz bGVlcw== IHRyb3V0 YXNwZXJz IG5paGls IGhhcHBpZXN0 IGZsb3BweQ== IExvZnQ= IEhlYXJk IHVuaXNvbg== IGx1Zw== IFJlZG1vbmQ= Y2xhc3NpYw== U3VwcG9ydGVycw== U0hJUA== R01U IGZ1ZWxsZWQ= 55A= IGRk IEVtaW5lbQ== IDE4OTc= TllTRQ== IHNlY3JldGFyaWVz IEZJQQ== IENhbmF2ZXJhbA== RmF2b3JpdGU= IHBvbXA= IGRldGFpbmVl ZXJzaGlw YWltb24= aW91cg== IEFwZXg= IHBsYW50YXRpb25z YW1pYQ== YWNpb24= UnVzdA== IHRvd2Vk IFRydWx5 NTc3 IHNoZWx0ZXJlZA== cmlkZXI= V28= IGxhaXI= IEludGVsbGlnZW50 aW1wcm92ZQ== bWF0aWNhbGx5 IGV0aXF1ZXR0ZQ== YWRyYQ== YWxsbw== IEp1bm8= YW55dGhpbmc= IFN0cnVnZ2xl IFByZWRpY3Q= IEdyaW1lcw== IEFNRVJJQ0E= Y3R4 IFNpdHVhdGlvbg== V09PRA== IHNvbHVibGU= bWVpZXI= IGludG9sZXJhYmxl YW5nZXJpbmc= IHVuaW50ZXJydXB0ZWQ= IHRvb2x0aXA= IGludGVycm9nYXRlZA== IGd1bm5lZA== IFNuZWFr 5q2m IHRldGhlcg== IGNydW1ibGU= TGVucw== IGNsdXN0ZXJlZA== IFN5bA== IEhhc2Fu IGR5c3RvcGlhbg== d2FuYQ== IGpveXN0aWNr IFRoaWI= YW1tdQ== VG9tb3Jyb3c= NTQ2 IG92ZXJjYW1l IG1pbmltaXplZA== Y2VwdG9y UnVubmVy RU5HVEg= IEJyZW5kYQ== IEFjaGlldmVtZW50cw== IHRvcmNoZXM= IHJhcHBvcnQ= IEludmVzdGlnYXRvcg== IEhhbmRsaW5n cmVsYXRpb24= Z3JleQ== ODE1 IGtjYWw= IENvbW1hbmRz ZHE= IGN1cmxz IGJlYXJlcg== IGN5bmljaXNt aXRyaQ== IFVzZWZ1bA== QmVl RENT IGFicmFz UHJhY3Q= QklMSVRJRVM= NzEy IGRlYnVnZ2Vy IGRlYnRvcg== IExpYQ== IEtlcnM= IGV4YWNlcmJhdGU= IFN0YWN5 IEJsYW5k IFNjZW5lcw== IGJyYW5jaGluZw== 4paI4paI4paI4paI4paI4paI4paI4paI YXBlYWtl IHNhbHNh IG1pc2hhbmQ= IEtvbmFtaQ== IE5pYg== IGFuZWNkb3Rl IGFncmVlYWJsZQ== z4k= IE5hdGhhbmllbA== IEhlaXNtYW4= IEJld2FyZQ== IDE4ODY= c3BlY3RpdmU= Njkx NTIy IGluaGliaXRz IGhhc2hpbmc= IDE4ODk= 5bCG dmljaA== UHVyZQ== IHNvbGlkbHk= IGFzcGlyaW4= aW1hcnU= IHN0cmVldGNhcg== IFVDUw== IEp1ZGQ= IGZsYXNoYmFja3M= cGlucw== IDE0NDA= IFVOSENS IFN5bXB0b21z VElU NTM4 RnJh JSk7 IG9veg== IGN1cmZldw== IGNhbG1lZA== IHBhcnRpY2lwYXRlcw== VGVY IG5vbnNlbnNpY2Fs IGZ1bGxiYWNr IERlTA== bW9ua2V5 aGFyaQ== IG1ldGFib2xpdGVz IGxvb3RlZA== IEFMV0FZUw== IEJDQw== THQ= b2NoZXQ= Qm9uZQ== IHZldG9lZA== IGdjYw== IENMSUNL IDE4ODg= c2Fm IHN0aWZmbmVzcw== IGxvd2x5 IEdlaA== dmVyc29u b3JzZXQ= IHVuZm9yZXNlZW4= IGFuZXN0aGVzaWE= IE9wdGljYWw= IHJlY29uc3RydWN0ZWQ= IFR1cA== c2hvd3M= TkVXUw== IE5ld3NwYXBlcg== IEFTQQ== dGVyYQ== TnVtYmVycw== IGluZXhwbGljYWJsZQ== 15E= IGhhcmRuZXNz dW50YXJpbHk= IEFjZXI= Z3JhZGllbnQ= QVJESVM= IHdvb2RsYW5k IG1ldGFwaG9ycw== IFdlbWJsZXk= IFBhdmVs cGhpbGlz IHJld3JpdGluZw== IHBlcmNlcHR1YWw= IDEwNzA= d29ybXM= IERvd25z IHVuc3VycHJpc2luZ2x5 IHRhZ2dpbmc= ZmxhbWU= IGxpdHJlcw== IGJvdW5jZXM= IEJhYmU= c2h1dA== IG92ZXJkb3Nlcw== IFNoZWlsYQ== IENoYXU= IEJsZXNz Q2FwdHVyZQ== IFNpZ25pZmljYW50 IFNjaW9u IDM4OQ== IE1jSA== IFRpdGFuaXVt IE1lYWw= YW1lZGE= YWdlbnRz YWdncmVzc2l2ZQ== QmlsbHk= NzYz IFNheWluZw== REVSUg== aXRvbmU= Q29sbGlucw== Qm91bmQ= IGJvbHRlZA== IERNQ0E= OTUz IHVuaXF1ZW5lc3M= IGVwaWdlbg== dW5jaQ== YW50YW0= IHJlY2tvbmluZw== Y2hhaXJz T0dS IFNlbmVnYWw= IDE4NjI= cmVsZXZhbnQ= IMKv IHBoYXJtYWNpZXM= IEdlcmFs dmllcg== WWFu T1JQRw== IHJhYmlk YmVuZGluZw== IFVOSVRFRA== IDQ2NQ== QXNzZW1ibHk= IHdlZXA= IGJlaGVzdA== IE1vdGhlcnM= IEphY2U= aGlk IHdoaXJsd2luZA== IFVOSVZFUlM= IHV0b3BpYW4= IGtpZG5hcA== UGhpbGlwcA== S2lu ODkz IGxpdmVzdHJlYW0= IE1JU1M= IHN1YnZlcnNpdmU= IFRlY2huaXF1ZXM= IEpVU1RJQ0U= IEJBU0U= IDM4Nw== IGFzc2FpbGFudHM= IEhhcmRjb3Jl IHNwcmlua2xlZA== IFBzZQ== 6Zo= cHJpbnRlZA== IEhhdQ== T1JHRQ== IFRPVVI= IGxhY2Vk IGl0Y2g= R2l2aW5n IHBvcnRlZA== Nzgx Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= YnJlZWRpbmc= IGxvZ2dlcg== IEhPTA== aW5uaWU= Rmlyc3RseQ== IGVtYnJ5b25pYw== IGRlbGVnYXRlZA== cGFp T0lM IGNlbnRyYWxseQ== IFJ4 IFNjb3V0aW5n RHV0Y2g= IGhlcmVkaXRhcnk= IENydWlzZXI= c2F0 NTI5 IE1hcnJpb3R0 b3RoZXJtYWw= IHByb2hpYml0aW9ucw== RWFybg== IFN0YWI= IENvbGxlZ2Vz IEJlbGllZg== c3RyZXRjaGVk IExI IEVudGl0eUl0ZW0= Q0lB IHVucmVt IGxhdXJlYXRl IGRlbm9taW5hdGlvbnM= c3VtbWFyeQ== aGxlcg== U3BlY3Q= IEtsYXVz IEJlYW5z IGluc3Vy IFBBWA== IGZpZWxkZXI= IFZldA== IFNwYXJyb3c= emll IFNR IE1vbmRheXM= IE9mZmxpbmU= IExlcm5lcg== IEV4dGVuc2lvbnM= SXJlbGFuZA== IHBhdHJvbmFnZQ== IGNvbnRyYXN0ZWQ= IE1hbmlh aGlydA== TW9zY293 IGNvbmRlbW5z IEFuZ2U= IGNvbXBvc2luZw== IFBlcGU= IFBhZGRvY2s= IGhldGVyb2dlbmVpdHk= IGlkZW9sb2dpY2FsbHk= IGZpc2hlcw== IGN1cnNpbmc= IFJ1dGhlcmZvcmQ= IEZsb2F0aW5n IEFtZWxpYQ== VGVh U3lub3BzaXM= IHN0dW50cw== IGJlYWQ= IHN0b2NraW5n IE1JTEw= b2Jvb2s= bWFzc2l2ZQ== XDw= IGh1bXA= IFByZWZlcmVuY2Vz RW5naW5lRGVidWc= Z2Vpc3Q= IE5pZXRv b21ldmVy aXNoeQ== ZXZhbHVhdGU= Y29sb25pYWw= QWx0ZXJuYXRpdmU= IEdvUHJv IFZvcnRleA== IE5FVFdPUks= YW5za3k= U2VjdXJl IFRocnVzdA== U25ha2U= IHBhcmNlbHM= IHNhbXVyYWk= IGFjdHJlc3Nlcw== TmFw TUY= aWZlcmF0aW9u QmVlcg== NTIz IElseQ== b2ludG1lbnQ= UGluZw== IHN0cmlwZWQ= IE1lbGxvbg== b3NzZXNzaW9u IG5ldXRyb24= ZW5kaXVt IGFwaA== IEZsYXZvcmluZw== IDM4Mw== IHJlc3BvbnNpdmVuZXNz IEppbmRhbA== IEhpdGNoY29jaw== RGVudmVy IERSQUdPTg== c21hbnNoaXA= IER1cGw= IHNseQ== IHdlYmNhbQ== IFR3YWlu IERhcmxpbmc= aWxpYXRl Y29uc3VtZXI= RElU IG5hbWVzYWtl IHVub3J0aG9kb3g= IGZ1bmVy IFBMb1M= IENPTlRST0w= b3p5Zw== b2dsb2Jpbg== RkFDRQ== RVJH IERpYQ== IEZpZXN0YQ== Y2VsZQ== MDM0 IGVuY2xhdmU= 4pas4pas b25lbWVudA== YWxpc3Q= TWFuZA== IGhvbWVncm93bg== IEZhbmN5 IGNvbmNlcHRpb25z IENvbnRhaW5z dXJlZW4= IHJlaXRlcmF0ZQ== IG1lYWdlcg== IGluc3RhbGxtZW50cw== U3Bhd24= NjI3 IHBob3RvYw== IENhYnJlcmE= IFJvc2VudGhhbA== IExhbnNpbmc= aXNuZXI= IGludmVzdHM= IFVGT3M= RVhQ SGFyZHdhcmU= IHRyYWdpY2FsbHk= IGNvbmNlZGVz aWVmdA== Y2hhbQ== Ym9yZ2g= IFNjaHI= IE1lbGFuaWU= IEhveQ== IHZpc2l0YXRpb24= IGlkaW9zeW5jcg== IGZyYWN0aW9ucw== IGZvcmVza2lu b2Jvcw== IHBvYWNoaW5n IFZJRVc= IHN0aW11bGF0ZXM= IEdvcms= Y2Fub24= TUlD IE5lbWVzaXM= IEluZHJh IERNVg== IDUyOQ== IGluc3BlY3Rpbmc= IGdyYW5kbWE= IFdoZWRvbg== IFNoYW50 IFB1cmc= aWthbg== IFRlZw== IENMUg== emFj VmljdG9yaWE= IFZlcmlmeQ== aW9uaWNz IHBhcnR5aW5n IE1vdQ== Y29sb3Vy IHRlc3RpbW9uaWVz bGF0aW9ucw== IHByZXNzdXJpbmc= aGlybw== YWNlcnM= IGZpZA== YW5nbGVy IENTSQ== IGhlcmVhZnRlcg== IGRpc3NpZGVudHM= cmVwb3J0aW5n aXBoYW55 Y2hldg== IHNvbGl0dWRl IGxvYmU= IGluZGlz IGNyZWRlbnRpYWw= cmVjZW50 YWR1bHQ= IE5pcnZhbmE= IEZyYW5jaGlzZQ== TGF5ZXI= SHlw IEJlcmtzaGlyZQ== IHdpbGxz dGlm IHRvdGVt IEp1ZGFo cmVwYWly SW5zdGFudA== NTQ4 IGVtYmFzc2llcw== IGJvdHRsZW5lY2s= IGJvdW50 IHR5cGV3 IEFsdmlu amluZw== aW1pbGFy UnVzaA== IGJyaW0= IEhFTFA= QWlt XSc= IHBhc3NpdmVseQ== IGJvdW5kZWQ= IFJhdGVk IGNyaW1pbmFsaXR5 IGJpb21hcms= IGRpc3BhdGNoZXI= IFRvd2FyZHM= ICsrKw== cmlnaHRlb3Vz ZnJvZw== IFBhbmM= Q2FydGVy MDMy 5qmf IHVsdHJhdmlvbGV0 IExpY2Vuc2Vk IFRhdGE= IEJsZXNzaW5n IEdBTQ== IGNoZW1pY2FsbHk= IFNlYWY= IFJFTEU= IE1lcmNlbmFyeQ== Y2FwaXRhbGlzdA== IGZvcm11bGF0aW9ucw== IGFubmloaWxhdGlvbg== IFZlcmI= IEFyZ29u IHVubG9hZGVk IG1vcnBoZWQ= IGNvbnF1ZXJpbmc= YmFja2Vy SUVMRA== IHRoZWZ0cw== IGZyb250cnVubmVy IFJveWFsZQ== IEZ1bmRhbWVudGFs ZWxpZ2h0 Q2hpcA== bmVjZXNzYXJ5 YXlu IFNsaXA= IDQ0OA== Y2VybmVk UGF1c2U= IHNob2NraW5nbHk= IEFCVg== IGNvbXBvc3VyZQ== NzMz IE1vdG9yc3BvcnQ= YWhpbWU= TXVycmF5 TWFjaA== IGdyaWRz IGRlYmlhbg== IGZ1cnRoZXJtb3Jl IGRleHRlcml0eQ== IENvbGxlY3Rpb25z b3Nsb3Y= aWxhZ2U= Ymo= IE1vbnRlbmVn IHN0cnV0Q29ubmVjdG9y IG1hc3NhY3Jlcw== IGJyaWVmcw== ZmV0Y2hlZA== dXZpYW4= b2xpdGlvbg== RmFpbHVyZQ== ZW1vbmlj IGZsYXJlZA== IGNsYWltYW50 IGN1cmVz IGdpdmVhd2F5cw== IFN1YnN0YW5jZQ== YWxpb25z IGNyaW5nZQ== IEt1bA== IGFyaXN0b2NyYWN5 IFVsc3Rlcg== b2xhdGVk aG91c2luZw== IE1JUw== IGdsYXJlZA== IFdpbGhlbG0= bmVlZHM= bGFtYmRh YnVpbGRlcnM= IFZJUw== IHJhZGlhdG9y IEdob3N0YnVzdGVycw== IDQzNg== YWN0dWFs IGhlcmRz w6dh d2F0Y2hpbmc= IGNvdW50ZXJpbmc= Q2hhcmdl IGNoYXJyZWQ= IHdhcmhlYWRz IGlvZGluZQ== IE1hY3k= MDQx IGRlcGFydHVyZXM= IFNpbnM= IGR5ZWQ= IENvbmNlcHRz Z2Fkbw== NzEz IHF1b3RhdGlvbnM= IGdpc3Q= IENocmlzdHk= IGFudGlnZW4= IEhlbXA= IERyYXdu IEJhcmc= ZXp2b3Vz IHBhdGVybml0eQ== IGFyZHU= IEFuY2hvcmFnZQ== IFJpaw== IG92ZXJsb2FkZWQ= IFVzZXJuYW1l IFRhbW15 IE5hdQ== IENlbGx1bGFy IHdhbmluZw== IHJvZGVudA== IFdvcmNlc3Rlcg== aWx0cw== IFRhZA== IGR3ZWxsaW5ncw== IGJ1bGxpc2g= NDMx IHJldGFsaWF0ZQ== IG1pZ3JhaW5l IENoZXZyb24= Q0hFQ0s= IGRvbmtleQ== Y3JpbQ== U1BB IEFuYWxvZw== IG1hcnF1ZWU= IEhhYXM= Qmly IEdERFI= IERvd25sb2Fkcw== IHdpbGxwb3dlcg== IEZvcnRo IFJlY29yZGVk IGltcG9zc2liaWxpdHk= IExvZ2dlZA== IEZyYW5rcw== IFJhdHQ= aW5pdGlvbnM= IGNsZWFuZXJz IHNvcmVseQ== IGZsaWNrZXJpbmc= IEV4YW1pbmF0aW9u Y2F0Y2hpbmc= YWxsb3dlZW4= TXNn IGR1bm5v RmE= IGR5c3Bo Y3Jhenk= LicnLg== IG1haW5saW5l IGNz IHB0cg== IFdhbGx5 aWd1bg== OTUx IEJpZ2Zvb3Q= ZmlnaHRz IHJldHJpZXZpbmc= SnI= IGR1cGxpY2F0aW9u IEV4cGxhbg== IHJlbGF0aW9uYWw= IHF1YWludA== IGJpc2N1aXRz IGFkbw== IHNodWRkZXI= IGFudGlkb3Rl Ymxvb2RlZA== a3No IHNhdWNlcw== IHJlaW52ZXN0 IGRpc3BlbnNhcnk= IERpdmVy IDkwMDA= c3R1ZGVudA== IGluc2VwYXI= ZXNjYXA= IHRvZGRsZXJz IEdQSU8= IEFzc2lnbm1lbnQ= aGVhZGVycw== IGxhY2tsdXN0ZXI= IGFiYWNr OTU2 IHRvb2xiYXI= NzQ1 IG91c3Q= IGNvbnRlbXBsYXRpb24= IFBSRVNJREVOVA== IDQ1OA== PT09PT09 IGd1YXJhbnRlZWluZw== IEhlaXN0 IENhbm5lcw== mb0= IGNvbGxhYm9yYXRvcg== IEFtcA== IGdvdQ== IFNIQUxM c3Rvcmllcw== Nzgz IG1vYmlsaXplZA== IGJyb29k IExV IPCfkQ== IHJlZmlu IEFudGhyb3BvbG9neQ== dmluZA== aWxsaQ== IHdhcnJhbnRpZXM= IEJhYmVs IHN3YXRo IGNhY2hlcw== IGFudGFnb25pc3Rz YXJ0aWZhY3Rz IGhvdGx5 IFN0YXJ0cw== IEfDtg== emFn ISEhISE= IHNjb3VyZ2U= IGNvbnNwaXJpbmc= cnVpdHM= cmV2ZXJzZQ== IFNoZWVu IEplc3VpdA== IEdpb3Zhbm5p YWRpZXM= IGJ1dHRvY2tz ZWFyY2hlcg== YWNhbg== IHZvbGxleWJhbGw= IHNocm91ZGVk IHNjb3JlYm9hcmQ= YmF0cw== IElQTQ== IGFzc2Vz IGRlcmVndWxhdGlvbg== IFRlbGVncmFt IFJlYm9vdA== IDcwMDA= IENhbmFyeQ== IGtlcm5lbHM= IEZyYW7Dp29pcw== IER1ZmY= IFBvbg== IExlaWNh IEdhcm1pbg== IG9ycGhhbnM= IENsYXVkaWE= IGNhbGVuZGFycw== IExlaWxhbg== ZW50bw== Um9ja2V0 IGJydW5jaA== IEhhd2tpbmc= YWluZXJz IHNlbnNpYmlsaXRpZXM= IGtX IEthbmQ= IHJlY2xhaW1lZA== IGludGVyZXN0aW5nbHk= 16k= cm9teQ== Sk0= IEVuaGFuY2VtZW50 YnVzaA== U2tpcA== IHJhcHBlcnM= IGdhemluZw== cGVkaWE= YXRobG9u UmV2b2x1dGlvbg== IHNuaXBlcnM= IHJldmVydGVk IGNvbmdsb21lcmF0ZQ== VGVycnk= Nzk0 IGhhcnNoZXI= IGRlc29sYXRl IEhpdG1hbg== Q29tbWlzc2lvbg== ICgv 4oCmLiI= Q29tcGFy IGFtcGxpZmljYXRpb24= b21pbmF0ZWQ= IHJlZ3Jlc3M= IENvbGxpZGVy IGluZm9ybWFudHM= IGdhemVk" }; - cl100k_base_default = { pat_str: "('s|'S|'t|'T|'re|'rE|'Re|'RE|'ve|'vE|'Ve|'VE|'m|'M|'ll|'lL|'Ll|'LL|'d|'D)|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+", special_tokens: { "<|endoftext|>": 100257, "<|fim_prefix|>": 100258, "<|fim_middle|>": 100259, "<|fim_suffix|>": 100260, "<|endofprompt|>": 100276 }, bpe_ranks: "! 0 IQ== Ig== Iw== JA== JQ== Jg== Jw== KA== KQ== Kg== Kw== LA== LQ== Lg== Lw== MA== MQ== Mg== Mw== NA== NQ== Ng== Nw== OA== OQ== Og== Ow== PA== PQ== Pg== Pw== QA== QQ== Qg== Qw== RA== RQ== Rg== Rw== SA== SQ== Sg== Sw== TA== TQ== Tg== Tw== UA== UQ== Ug== Uw== VA== VQ== Vg== Vw== WA== WQ== Wg== Ww== XA== XQ== Xg== Xw== YA== YQ== Yg== Yw== ZA== ZQ== Zg== Zw== aA== aQ== ag== aw== bA== bQ== bg== bw== cA== cQ== cg== cw== dA== dQ== dg== dw== eA== eQ== eg== ew== fA== fQ== fg== oQ== og== ow== pA== pQ== pg== pw== qA== qQ== qg== qw== rA== rg== rw== sA== sQ== sg== sw== tA== tQ== tg== tw== uA== uQ== ug== uw== vA== vQ== vg== vw== wA== wQ== wg== ww== xA== xQ== xg== xw== yA== yQ== yg== yw== zA== zQ== zg== zw== 0A== 0Q== 0g== 0w== 1A== 1Q== 1g== 1w== 2A== 2Q== 2g== 2w== 3A== 3Q== 3g== 3w== 4A== 4Q== 4g== 4w== 5A== 5Q== 5g== 5w== 6A== 6Q== 6g== 6w== 7A== 7Q== 7g== 7w== 8A== 8Q== 8g== 8w== 9A== 9Q== 9g== 9w== +A== +Q== +g== +w== /A== /Q== /g== /w== AA== AQ== Ag== Aw== BA== BQ== Bg== Bw== CA== CQ== Cg== Cw== DA== DQ== Dg== Dw== EA== EQ== Eg== Ew== FA== FQ== Fg== Fw== GA== GQ== Gg== Gw== HA== HQ== Hg== Hw== IA== fw== gA== gQ== gg== gw== hA== hQ== hg== hw== iA== iQ== ig== iw== jA== jQ== jg== jw== kA== kQ== kg== kw== lA== lQ== lg== lw== mA== mQ== mg== mw== nA== nQ== ng== nw== oA== rQ== ICA= ICAgIA== aW4= IHQ= ICAgICAgICA= ZXI= ICAg b24= IGE= cmU= YXQ= c3Q= ZW4= b3I= IHRo Cgo= IGM= bGU= IHM= aXQ= YW4= YXI= YWw= IHRoZQ== Owo= IHA= IGY= b3U= ID0= aXM= ICAgICAgIA== aW5n ZXM= IHc= aW9u ZWQ= aWM= IGI= IGQ= ZXQ= IG0= IG8= CQk= cm8= YXM= ZWw= Y3Q= bmQ= IGlu IGg= ZW50 aWQ= IG4= YW0= ICAgICAgICAgICA= IHRv IHJl LS0= IHs= IG9m b20= KTsK aW0= DQo= ICg= aWw= Ly8= IGFuZA== dXI= c2U= IGw= ZXg= IFM= YWQ= ICI= Y2g= dXQ= aWY= Kio= IH0= ZW0= b2w= ICAgICAgICAgICAgICAgIA== dGg= KQo= IHsK IGc= aWc= aXY= LAo= Y2U= b2Q= IHY= YXRl IFQ= YWc= YXk= ICo= b3Q= dXM= IEM= IHN0 IEk= dW4= dWw= dWU= IEE= b3c= ICc= ZXc= IDw= YXRpb24= KCk= IGZvcg== YWI= b3J0 dW0= YW1l IGlz cGU= dHI= Y2s= 4oA= IHk= aXN0 LS0tLQ== LgoK aGU= IGU= bG8= IE0= IGJl ZXJz IG9u IGNvbg== YXA= dWI= IFA= ICAgICAgICAgICAgICAg YXNz aW50 Pgo= bHk= dXJu ICQ= OwoK YXY= cG9ydA== aXI= LT4= bnQ= Y3Rpb24= ZW5k IGRl MDA= aXRo b3V0 dHVybg== b3Vy ICAgICA= bGlj cmVz cHQ= PT0= IHRoaXM= IHdo IGlm IEQ= dmVy YWdl IEI= aHQ= ZXh0 PSI= IHRoYXQ= KioqKg== IFI= IGl0 ZXNz IEY= IHI= b3M= YW5k IGFz ZWN0 a2U= cm9t IC8v Y29u IEw= KCI= cXU= bGFzcw== IHdpdGg= aXo= ZGU= IE4= IGFs b3A= dXA= Z2V0 IH0K aWxl IGFu YXRh b3Jl cmk= IHBybw== Ow0K CQkJCQ== dGVy YWlu IFc= IEU= IGNvbQ== IHJldHVybg== YXJ0 IEg= YWNr aW1wb3J0 dWJsaWM= IG9y ZXN0 bWVudA== IEc= YWJsZQ== IC0= aW5l aWxs aW5k ZXJl Ojo= aXR5 ICs= IHRy ZWxm aWdodA== KCc= b3Jt dWx0 c3Ry Li4= Iiw= IHlvdQ== eXBl cGw= IG5ldw== IGo= ICAgICAgICAgICAgICAgICAgIA== IGZyb20= IGV4 IE8= MjA= bGQ= IFs= b2M= Ogo= IHNl IGxl LS0tLS0tLS0= LnM= ewo= Jyw= YW50 IGF0 YXNl LmM= IGNo PC8= YXZl YW5n IGFyZQ== IGludA== 4oCZ X3Q= ZXJ0 aWFs YWN0 fQo= aXZl b2Rl b3N0 IGNsYXNz IG5vdA== b2c= b3Jk YWx1ZQ== YWxs ZmY= KCk7Cg== b250 aW1l YXJl IFU= IHBy IDo= aWVz aXpl dXJl IGJ5 aXJl IH0KCg== LnA= IHNo aWNl YXN0 cHRpb24= dHJpbmc= b2s= X18= Y2w= IyM= IGhl YXJk KS4= IEA= aWV3 CQkJ IHdhcw== aXA= dGhpcw== IHU= IFRoZQ== aWRl YWNl aWI= YWM= cm91 IHdl amVjdA== IHB1YmxpYw== YWs= dmU= YXRo b2lk ID0+ dXN0 cXVl IHJlcw== KSk= J3M= IGs= YW5z eXN0 dW5jdGlvbg== KioqKioqKio= IGk= IHVz cHA= MTA= b25l YWls PT09PQ== bmFtZQ== IHN0cg== IC8= ICY= YWNo ZGl2 eXN0ZW0= ZWxs IGhhdmU= ZXJy b3VsZA== dWxs cG9u IEo= X3A= ID09 aWdu U3Q= Lgo= IHBs KTsKCg== Zm9ybQ== cHV0 b3VudA== fQoK ZGQ= aXRl IGdldA== cnI= b21l IOKA YXJhbQ== Y2M= ICov RVI= SW4= bGVz X3M= b25n aWU= IGNhbg== IFY= ZXJ2 cHI= IHVu cm93 YmVy IGRv bGw= IGVs IHNlbGY= YXRlZA== YXJ5 IC4= J10= dWQ= IGVu IFRo ICAgICAgICAgICAgICAgICAgICAgICA= dGU= X2M= dWN0 IGFi b3Jr LmdldA== ICM= YXc= cmVzcw== b2I= TmFtZQ== MjAx YXBw Wyc= IGFsbA== b3J5 aXRpb24= YW5jZQ== ZWFy IGNvbnQ= dmVudA== aWE= IHdpbGw= SU4= ICAgICAgICAg cmV0dXJu IDwv ZGF0YQ== KQoK UmU= cGxl aWxk dGhlcg== IHlvdXI= Igo= KCQ= IG91dA== KSw= IGhhcw== U3RyaW5n c28= IHVw YXg= IGRlZg== IGJv Z2U= YWxzZQ== T04= cGVy MTI= aWNo IGJ1dA== IAo= IF8= X20= YWRk cXVlc3Q= b2RlbA== c2VsZg== ZXJ5 ZnQ= ZW5z Ly8vLw== YWtl LkM= IGdv IGZ1bmN0aW9u IEs= aXZhdGU= IGlt IGNvbnN0 LnQ= ICovCg== KTsNCg== IHZvaWQ= IHNldA== IFN5c3RlbQ== Y3Jp KCkK bGk= CWlm Lm0= YWxseQ== c2V0 ZXA= 4oCZcw== Ym8= ZGVm JywK IG1l ICE= YXRjaA== Ij4= IiwK ZWM= IElu cGg= IHw= X2Y= IHZhcg== ZW5jZQ== SWQ= cmVl aW5r bGVjdA== dWc= ZXRo IGVsc2U= LS0tLS0tLS0tLS0tLS0tLQ== MTk= Y29udA== IHNv YXRpYw== IGxv cHJv dG9u c3M= b3du YWJlbA== b2ludA== b3Vz ZWxk U1Q= VGhl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= UkU= Ijo= b2xvcg== dHA= ZWc= a2V5 dWRl IFN0 b3VuZA== IGFy Iik7Cg== ZW5lcg== c2Vy MTE= YmplY3Q= ZXNzYWdl ZmVy IG1vcmU= YXRpb25z ZW50cw== IGhpcw== IHRoZXk= LlM= IFk= dXNl bmU= aXNo b2xk X2Q= aW8= aWVsZA== IHBlcg== Q29udA== aW5ncw== IyMjIw== IGRhdGE= IHNh ZWY= Zm8= IG9uZQ== ZW5n IGRpcw== QVQ= IG5hbWU= IHRydWU= dmFs bGVk LmY= IG5l IGVuZA== MzI= LlQ= MTY= Y3Jl YXJr bG9n RXg= ZXJyb3I= X2lk dXJyZQ== YW5nZQ== IG51bGw= cnJheQ== IG15 cGFu aWN0 YXRvcg== Vmlldw== TGlzdA== CXJldHVybg== 4oCd IHByZQ== IHg= Y2x1ZGU= YXJn MTU= b3Y= Lmg= ID4= IHRoZWly Jyk= aXJzdA== aWNr Z2g= TEU= T1I= IHByaXZhdGU= dGVt DQoNCg== dXNlcg== ICk= Y29t LkE= IjsK IGlk cmVhZA== IHdobw== X2I= Ij4K IHRpbWU= IG1hbg== cnk= PT09PT09PT0= cm91cA== cm9w cHVibGlj dmVs dW1iZXI= Ymxl IHdoaWNo KioqKioqKioqKioqKioqKg== IGFueQ== IGZhbHNl d2U= IHZhbHVl IGxp Iik= bmRlcg== Z3I= IG5v cGFyYW0= MjU= Zmln LmNvbQ== IGFwcA== X2w= aW9ucw== LkQ= IENo IGFib3V0 IGFkZA== IHN1 IHN0cmluZw== SUQ= IG92ZXI= c3RyaW5n Lmw= b3VyY2U= MDAw X0M= XQo= IHF1 IFN0cmluZw== Y2E= U0U= IHJv c2g= dWFs VHlwZQ== c29u bmV3 ZXJu IGFn QVI= XTsK XS4= ID8= aWNhbA== IGRlcw== dXRo aXg= YXlz IHR5cGU= J3Q= YXVsdA== IGludGVy dmFy LmI= IHBhcnQ= LmQ= dXJyZW50 SVQ= RU4= MzA= ZW5j KGY= cmE= dmFsdWU= Y2hv MTg= dXR0b24= b3Nl MTQ= ICE9 YXRlcg== w6k= cmVhdGU= b2xs cG9z eWxl bmc= QUw= dXNpbmc= YW1lcw== IHsNCg== YXRlcw== ZWx5 IHdvcms= IGVt aW5hbA== IHNw IHdoZW4= LnNldA== ICAgICAg KToK dG8= cXVpcmU= aW5kb3c= bGVtZW50 cGVjdA== YXNo W2k= IHVzZQ== LkY= cGVj IGFk b3Zl Y2VwdGlvbg== ZW5ndGg= aW5jbHVkZQ== YWRlcg== ICAgICAgICAgICAgICAgICAgICAgICAgICAg YXR1cw== VGg= aXRsZQ== cml0 dm9pZA== KCku KAo= IG9mZg== IG90aGVy ICYm JzsK bXM= IGJlZW4= IHRl bWw= Y28= bmM= MTM= ZXJ2aWNl ICU= KioK YW5u YWRl CgoKCg== bG9jaw== Y29uc3Q= MTAw cG9uc2U= IHN1cA== Kys= ZGF0ZQ== IGFjYw== IGhhZA== IGJ1 MjAw IFJl IHdlcmU= IGZpbGU= IHdvdWxk IOKAnA== dmVu aXNz IG91cg== Y2xhc3M= cmF3 IHllYXI= RGF0YQ== IHZhbA== IHNvbWU= ZnRlcg== eXM= IC8vLw== cm91bmQ= dmlldw== IHBl IHRoZXJl IHNhaWQ= ZHU= b2Y= bGluZQ== Lyo= ZHVjdA== IGhlcg== ICAgICAgICAgICAgIA== UmVz IGNv IGNvbW0= aXNl bWlu ICAgIAo= I2luY2x1ZGU= ZXRob2Q= LlA= dXRl IGFzcw== SW50 YXNr bG9j IGxpa2U= b2R5 IGxldA== bG9hZA== IGFt cm9s IGdy eXA= IGFsc28= IEl0 dXJs aWZpYw== b3Jz X1A= X24= aWdo IHRoYW4= Q29t QU4= VUw= YXRpbmc= MTc= IFRoaXM= cmVm X1M= IHN0YXRpYw== cm9sbA== IGp1c3Q= IHJlc3VsdA== aWFu aWR0aA== IHRoZW0= KSk7Cg== ZGVy cmVhaw== Q29u Oi8v dWxl Li4u YXJjaA== ZW1lbnQ= IDw8 NTA= dXNo ZW5zZQ== YXJy IGludG8= Y2Vzcw== YW1w aWVk dW1lbnQ= IFw= XSw= d28= YWxz IHdoYXQ= YW5j VmFsdWU= PSc= b2x1bQ== IHBvcw== YWdlcw== YXllcg== IHNj dWVz IikK X1Q= IGxpc3Q= KHM= IGNhc2U= Q2g= CQkJCQk= Ly8vLy8vLy8= cG9uZW50 IHo= IGtu bGV0 REU= cmVk IGZl IH0sCg== ICw= KHQ= IGZpcnN0 Jyk7Cg== d29yZA== IGltcG9ydA== IGFjdA== IGNoYXI= Q1Q= IFRy b3BsZQ== PXs= CWY= MjQ= aWVudA== Y2VudA== Lmo= bGVjdGlvbg== KSkK IG9ubHk= IHByaW50 bWVy Llc= b2Nr IC0t VGV4dA== IG9w YW5r IGl0cw== IGJhY2s= WyI= IG5lZWQ= IGNs IHN1Yg== IGxh KCg= LiI= T2JqZWN0 IHN0YXJ0 ZmlsZQ== KHNlbGY= bmVy ZXk= IHVzZXI= IGVudA== IENvbQ== aXRz IENvbg== b3VibGU= b3dlcg== aXRlbQ== dmVyeQ== IFdl NjQ= bGljaw== IFE= cGhw dHRw Jzo= aWNz IHVuZGVy ICoK Lkw= KTs= aWNlcw== IHJlZw== KQ0K CXB1YmxpYw== U1M= IHRoZW4= cmVhdA== aW91cw== Lkc= ZWs= aXJlY3Q= aGVjaw== Y3JpcHQ= bmluZw== IFVu IG1heQ== IFdo Qm8= SXRlbQ== c3RydWN0 LnN0 cmVhbQ== aWJsZQ== bG9hdA== IG9yZw== dW5k c3Vt X2lu Li4v X00= IGhvdw== cml0ZQ== Jwo= VG8= NDA= d3c= IHBlb3BsZQ== aW5kZXg= Lm4= aHR0cA== KG0= ZWN0b3I= IGluZA== IGphdg== XSwK IEhl X3N0 ZnVs b2xl KXsK IHNob3VsZA== b3B5 ZWxw aWVy X25hbWU= ZXJzb24= SU9O b3Rl IHRlc3Q= IGJldA== cnJvcg== dWxhcg== 44A= INA= YnM= dGluZw== IG1ha2U= VHI= IGFmdGVy YXJnZXQ= Uk8= b2x1bW4= cmM= X3Jl ZGVmaW5l MjI= IHJpZ2h0 cmlnaHQ= ZGF5 IGxvbmc= W10= KHA= dGQ= Y29uZA== IFBybw== IHJlbQ== cHRpb25z dmlk Lmc= IGV4dA== IF9f JykK cGFjZQ== bXA= IG1pbg== c3RhbmNl YWly YWN0aW9u d2g= dHlwZQ== dXRpbA== YWl0 PD8= SUM= dGV4dA== IHBo IGZs Lk0= Y2Nlc3M= YnI= Zm9yZQ== ZXJzaW9u KSwK LnJl YXRlZw== IGxvYw== aW5z LXM= dHJpYg== IEludA== IGFycmF5 LCI= UHJv KGM= ZXNzaW9u PgoK IHNoZQ== Il0= YXBo IGV4cA== ZXJ0eQ== IFNl IHBhcg== dW5j RVQ= IHJlYWQ= cHJpbnQ= IHJlbA== IGZvcm0= IGRy RXhjZXB0aW9u aW5wdXQ= IHRyYW5z IyMjIyMjIyM= b3JkZXI= Qnk= IGF3 aXRpZXM= dWZm cGxheQ== LmFkZA== IOKAkw== IHdhbnQ= IGNvbXA= bWVudHM= IHx8 YXo= YmU= IG51bWJlcg== IHJlcXVpcmU= IEV4 NjA= IGNvbA== IGtleQ== ZW1iZXI= IHR3bw== IHNpemU= IHdoZXJl VVQ= cmVzdWx0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== b3VnaA== b3JsZA== b29k dWNo YXRpdmU= Z2Vy YXJlbnQ= IC8q IGFyZw== IHdoaWxl MjM= KHRoaXM= IHJlYw== IGRpZg== U3RhdGU= IHNwZWM= cmlkZQ== X0Y= IGxvb2s= QU0= aWxpdHk= ZXRlcg== 4oCZdA== CgoK YXlvdXQ= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= YWdlcg== IGNvdWxk IGJy ZW5kcw== dXJlcw== IGtub3c= ZXRz IElm IFNo Lnc= YmFjaw== IHNlcg== ICs9 IGZy KCkpOwo= IGhhbmQ= SW5k VUxM SW0= KCk7Cgo= IG1vc3Q= IHRyeQ== IG5vdw== cm91Z2g= Pg0K YWNrYWdl IGhpbQ== Ll8= aWZ5 IGJyZWFr ICk7Cg== cmVu I2RlZmluZQ== aXR0 IGFw CWM= KG4= IFlvdQ== OgoK LW0= IGV2ZXJ5 dXN0b20= bGllbnQ= b2N1bWVudA== Y3JpcHRpb24= RXJyb3I= LWI= 0L4= XVs= OTk= dHJhbnM= IHBvaW50 IHN0ZA== IGZpbA== VGltZQ== ODA= IG1vZA== IC0+ IGVycm9y YWg= IHRleHQ= cm9sbGVy bG9zZQ== cWw= IHBvbA== Pjwv IHNob3c= VXNlcg== YXNlZA== IHsKCg== IGZpbmQ= 0LA= RUQ= c3Bhbg== ZW51 IGN1cnJlbnQ= IHVzZWQ= Y2VwdA== Y2x1ZA== IHBsYXk= IGxvZw== dXRpb24= Zmw= IHNlZQ== aW5kb3dz IGhlbHA= IHRoZXNl IHBhc3M= IGRvd24= IGV2ZW4= YXNvbg== dWlsZA== ZnJvbQ== KGQ= IGJs bGFiZWw= ZWxzZQ== 0LU= ICgh aXplZA== KCks IG9i IGl0ZW0= dW1w VVI= b3Ju IGRvbg== U2U= bWFu Mjc= YW1wbGU= dG4= PT09PT09PT09PT09PT09PQ== SGU= Z3JhbQ== IGRpZA== d24= X2g= aXZlcg== IHNt IHRocm91Z2g= IEFu Y2hl IGludg== b3VzZQ== IGVz IE5ldw== ZXhwb3J0 bWFyeQ== dXRv bGVy IGxhc3Q= IGV2ZW50 dHJ5 77w= aWx5 aWduZWQ= aW5lcw== b2xsb3c= aWNlbnNl c29sZQ== bGVhcg== KGludA== IGFnYWlu IGhpZ2g= aHRtbA== SW5kZXg= dXRob3I= IC8qKgo= IGxpbmU= RXZlbnQ= X0Q= IGRvZXM= aXRpYWw= IGNy YXJz Mjg= IHRlbQ== Y2F1c2U= ZmFjZQ== IGA= X0E= QnV0dG9u YXR1cmU= ZWN0ZWQ= RVM= aXN0ZXI= CQo= IGJlZm9yZQ== YWxl b3RoZXI= IGJlY2F1c2U= cm9pZA== IGVk aWs= cmVn IERl IGRpc3Q= fSwK IHN0YXRl IGNvbnM= cmludA== YXR0 IGhlcmU= aW5lZA== IGZpbmFs ICIi S2V5 TE8= IGRlbA== cHR5 dGhpbmc= MjY= IEFuZA== IHJ1bg== IFg= eW0= LmFwcA== IHZlcnk= Y2Vz X04= YXJlZA== d2FyZA== bGlzdA== aXRlZA== b2xvZw== aXRjaA== Qm94 aWZl MzM= IGFj IG1vZGVs IG1vbg== IHdheQ== bGV0ZQ== IGNhbGw= IGF0dA== IGNhbA== dmVydA== IGRlYw== bGVhc2U= b3Vu IH0pOwo= ZnI= Zm9ybWF0aW9u ZXRhaWw= IG51bQ== YWo= cXVlcnk= IHdlbGw= IG9iamVjdA== IEFz IHllYXJz Q29sb3I= SVM= IGRlZmF1bHQ= V2g= IGlucw== YWludA== IGphdmE= IHNpbQ== IEFy bW9u dGls KCk7DQo= KTo= U2V0 Mjk= YXR0ZXI= IHZpZXc= IHByZXM= YXJyYXk= V2U= QXQ= IGJlbA== IG1hbnk= MjE= TWFu ZW5kZXI= IGJlaW5n IGdvb2Q= CQkJCQkJ YXRpb25hbA== d2FyZQ== LmxvZw== ew0K IHVzaW5n X0I= IDo9 X3c= aXN0cw== bGlzaA== IHN0dWQ= IEFs IGd1 Y29uZmln dXJpbmc= dGltZQ== b2tlbg== YW1lc3BhY2U= IHJlcXVlc3Q= IGNoaWxk IMM= bG9i IHBhcmFt IH0NCg== MDE= IGVjaG8= ZnVuY3Rpb24= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= cHM= RWxlbWVudA== YWxr bGljYXRpb24= Ynk= U2l6ZQ== cmF3aW5n IHBlcnNvbg== ICAgICAgICAgICAgICAgICA= XG4= b2JqZWN0 aW5jZQ== RW4= RmlsZQ== dWY= ZmZlY3Q= QUM= IHN0eWxl c3VtbWFyeQ== IHF1ZQ== X3I= ICgk TW9kZWw= aWRlbnQ= IG1ldGhvZA== SUw= b3R0 bGVzcw== SU5H ICgp IGV4cGVjdA== eW5j cGFja2FnZQ== MzU= dXJz IHByb3Q= Li8= cHJl ICkK bWE= IHN1cg== IGZvdW5k SW5mbw== cGFy aW1lcw== LmU= YWlucw== IHBvc3Q= LWQ= NDU= b2xlYW4= IHNs UEU= IHN1Y2g= c2VsZWN0 YWluZXI= IHRoaW5r IGRpZmZlcg== LnI= LyoqCg== RkY= b29s cGxhdGU= cXVhbA== IEZvcg== IG11Y2g= dWM= KG5ldw== b2R1bGU= IHNvbQ== IGh0dHA= IExpc3Q= IGNvdW50 IGluc3Q= Y2hhcg== bWl0 Lmlk YWtpbmc= IGdlbmVy cHg= dmljZQ== Mzc= X2RhdGE= IE5VTEw= fQ0K aWRk 44CC IG1lZA== b3Jn aWRlcg== YWNoZQ== d29yaw== IGNoZWNr d2Vlbg== ICgo dGhl YW50cw== Pjw= LkI= LWM= IG9wZW4= IGVzdA== ICAgICAgICAK IG5leHQ= SU0= 0YI= T1Q= w7M= IGZvbGxvdw== Y29udGVudA== ICAgICAgICAgICAg IGluY2x1ZA== SEU= IFJlcw== IGhyZWY= 0Lg= IGNhcg== eXBlcw== aW1hZ2U= VW4= IGJvb2w= QUQ= IGdhbWU= LkZvcm0= cm93cw== Ki8= dmVsb3A= LkRyYXdpbmc= IHBhdGg= aXNpb24= IGVhY2g= IFBs X3R5cGU= UGF0aA== bmVjdGlvbg== IGF2 Jyku IHN1cHBvcnQ= RU5U cmVt Iiku IG93bg== IGNvcg== Y291bnQ= bWlzcw== dWFsbHk= IG1lbQ== c3Rk aWVuY2U= c2VhcmNo IgoK Rm9ybQ== IHNleA== ZW5hbWU= IHNpZ24= IGV0 ICAgICAgICAgIA== Jywn IEFwcA== IHRob3Nl b2Zm IGVycg== IHN5c3RlbQ== IGJlc3Q= Y29kZQ== IHNhbWU= IGRp dXNz IGNyZWF0ZQ== YXRoZXI= QXJyYXk= Lmlu ZmU= U2VydmljZQ== VU4= YXRz IFo= YWx0aA== IG1hZGU= dHJ1ZQ== QUI= IG1hcms= cmlk aWZpZWQ= LA0K eW4= cHJlc3M= IGdyb3Vw IGZpbg== IExpY2Vuc2U= RmllbGQ= ZWdlcg== IHdvcmxk aW5lc3M= dHk= IHByb2Nlc3M= KGI= IGNyZQ== YXJu aXZlcw== IG1haW4= aWRlbw== MzY= X2c= QUc= dmFsaWQ= aW1n UEk= IGNvbG9y IHJlcG9ydA== IHRha2U= cmli T00= IGRheQ== UmVxdWVzdA== IHNr YmVycw== CXM= LkFkZA== b290 SW1hZ2U= IGNvbXBsZQ== b2xsZWN0aW9u IHRvcA== IGZyZWU= QVM= RGU= IE9u SUc= OTA= ZXRh RGF0ZQ== IGFjdGlvbg== MzQ= T3Zlcg== aXRvcg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= bm90 IGluZGV4 aGVy aWNvbg== T24= Ow0KDQo= aXZpdHk= bWFuZA== LldpbmRvd3M= T0w= IHJlYWw= IG1heA== bGFuZA== Li4uLg== cmFwaA== IGJ1aWxk bGVn YXNzd29yZA== PwoK 4oCm b29r dWNr IG1lc3NhZ2U= dGVzdA== aXZlcnM= Mzg= IGlucHV0 IGFydA== IGJldHdlZW4= R2V0 ZW50ZXI= Z3JvdW5k ZW5l w6E= Lmxlbmd0aA== Tm9kZQ== KGk= Q2xhc3M= Zm9y IOKAlA== dGVu b2lu IGtl dWk= IElO IHRhYmxl c3Vi IExl IGhlYWQ= IG11c3Q= Ly8vLy8vLy8vLy8vLy8vLw== LnV0aWw= Q29udGV4dA== IG9yZGVy IG1vdg== b3Zlcg== IGNvbnRpbg== IHNheQ== c3RhdGlj LlRleHQ= IGNsYXNzTmFtZQ== cGFueQ== IHRlcg== aGVhZA== cmc= IHByb2R1Y3Q= VGhpcw== LuKAnQ== IEJ1dA== NzA= bG95 IGRvdWJsZQ== c2c= IHBsYWNl Lng= bWVzc2FnZQ== IGluZm9ybWF0aW9u cHJpdmF0ZQ== IG9wZXI= Y2Vk ZGI= Ij48Lw== UGFyYW0= aWNsZQ== IHdlZWs= IHByb3A= dGFibGU= aWRnZXQ= cGxhY2U= UHJvcA== IEFsbA== ZWxz Ym94 LgoKCgo= LlI= IFRv aXRlcg== U2g= dXJhdGlvbg== b2xkZXI= X2xpc3Q= Y29tZQ== IHN3 aXphdGlvbg== CWZvcg== Ymw= IHByb2dyYW0= KGU= YXBl Y2hlY2s= LkZvcm1z IHVuZA== YXRlZ29yeQ== NzU= YWdz IHJlc3BvbnNl VVM= cmVxdWVzdA== IHN0cnVjdA== ZXNjcmlwdGlvbg== IGNvZGU= X0g= dWZmZXI= IHdpdGhvdXQ= bG9iYWw= TWFuYWdlcg== aWx0ZXI= UE8= CXRoaXM= b3B0aW9u IHNvbA== ID09PQ== YWtlcw== Q29udHJvbGxlcg== NDQ= TWVzc2FnZQ== IHJlZg== ZXZlcg== IFNv YWluaW5n LmFwcGVuZA== IHN0aWxs IHByb3ZpZA== IGFzc2VydA== bWVk IGNhcA== dXNpbmVzcw== IHJlcA== dGluZ3M= dmVk Lk4= YXBp T0Q= IGZpZWxk aXZlbg== b3Rv 4oCc Y29s KHg= Z2h0 UmVzdWx0 Q29kZQ== Lmlz bGluaw== IGNvdXI= QW4= IHRlYW0= CWludA== aWZ0 NTU= IHNlY29uZA== IGdvaW5n IHJhbmdl X0U= bmVzcw== Mzk= IGZhbQ== IG5pbA== IENvbnQ= YWlsYWJsZQ== dXRlcw== YXRhYg== IGZhY3Q= IHZpcw== KCY= IEFO MzE= QWw= dGl0bGU= IGFuZHJvaWQ= Q0U= XCI= aXJ0 IHdyaXQ= 0L0= CW0= ZnR3YXJl b25k IHJldA== b3NpdGlvbg== IGhvbWU= IGxlZnQ= YXJncw== bWVyaWM= NDg= IGRpcmVjdA== b2Np UGw= QXM= cmV0 YWRv T2Y= Y2hu IEdldA== ZWU= cm9zcw== KCk7 X19fXw== LnBo SXQ= b3V0ZQ== IGV4cGVy Y2hvb2w= d3d3 fSw= IGFsbG93 IMI= KCkp c2l6ZQ== aXNt YWk= dHJhY3Q= YW5l Li4uCgo= Y29udGV4dA== IGJlZw== Q0g= IHBhZ2U= aGlw bm8= Y29yZQ== c3A= IGRpZmZlcmVudA== aWFibGU= IE1l X0lO YnV0dG9u IElz ZXJ2aWNlcw== IGNh IGFyb3VuZA== QXBw cmF0aW9u IHJlY2U= IHJlYWxseQ== IGltYWdl IHRhcmdldA== IGRlcA== b3B5cmlnaHQ= dHJh aW5nbGU= aXRhbA== TGF5b3V0 IGJvdGg= T3ZlcnJpZGU= YXJt PT4= YXRlcmlhbA== aWxlZA== IHB1dA== UXU= 0YA= dW5n bWFw CQkJCQkJCQk= IGxldmVs Q29tcG9uZW50 Ym9vaw== Y3JlZW4= X1JF IGNvbmZpZw== 44E= T3I= LmRhdGE= IGRvY3VtZW50 Iiwi dHJpYnV0ZQ== dXg= TG9n ZmVyZW5jZQ== cG9zdA== X2U= IGxvY2Fs YW5kb20= YXNzZXJ0 VmFs bGVjdGVk aW5h YXRhYmFzZQ== QWRk IGNvbnRlbnQ= LnByaW50 c2lnbmVk cmlj LiIKCg== IGZh IQoK LWY= aXZlZA== IHF1ZXN0 LmV4 IGZsb2F0 IGRldmVsb3A= 0L7Q TWFw YWRpbmc= IHBvc3M= VUU= bmFtZXNwYWNl X08= CWI= LkdldA== Pig= anNvbg== ZXRhaWxz NjY= IHRvbw== IGV4dGVuZHM= IE5vbmU= IGZvcmU= KFN0cmluZw== Zm9ybWF0 IGdyZWF0 aW50ZXI= Y2FsZQ== 0YE= cm9u aXZpbmc= RW50 ZW5jeQ== eHQ= b3k= MDU= IG1vbnRo IGhhcHA= IHN1cGVy YmFy ZGVmYXVsdA== X2Rl b3Jkcw== bG4= KHsK IEluZA== YXNlcw== IHRpdGxl IGNvbnRleHQ= MDg= b2g= LXA= RW0= IG1ldA== VGVzdA== IGxpZmU= X3Y= IFVT VUk= b2NhdGlvbg== bWQ= IFsK IF0= c3c= IGluY3Jl c2NyaXB0 ZW50aWFs d2F5cw== LmRl IHNyYw== IGNhdGNo IEFtZXJpYw== Ly8K ICAgICAgICAgICAgICA= IHBheQ== cGxpdA== 4oCU IGNvdW4= b2Jq LnBocA== IGNoYW5nZQ== ZXRoaW5n J3Jl YXN0ZXI= bG9z bGF0aW9u ICAK TGU= w6Q= KHs= cmVhZHk= IE5v IHBvc2l0aW9u IG9sZA== IGJvb2s= YWJsZWQ= YnVn MjAy SGFuZA== fTsKCg== aXNwbGF5 YXZpbmc= MDQ= IGdvdmVy IHZlcnNpb24= U3lzdGVt bmVjdA== cmVzcG9uc2U= U3R5bGU= VXA= YW5ndQ== IHRocmVl aW5pdA== ZXJv IGxhdw== ZW5kaWY= IGJhc2U= ZW1haWw= KGw= X1Y= IGNvbmY= QVRF IGR1cmluZw== dGVz IGNvbnNvbGU= IFBy IHNwZQ== dmVz NjU= cGF0aA== aWFsb2c= ZGl0aW9u X3Rv YXJkcw== IGFnYWluc3Q= ZXR3b3Jr IFBo X0w= Y3Vy aW1pdA== V2l0aA== IHBvd2Vy aXVt JzsKCg== IHdvbQ== bGVmdA== b3VyY2Vz YXRyaQ== IElt IE1hbg== b3J0aA== JHs= ODg= cXVhbHM= ZXNl X3NpemU= IGlzcw== b3RhbA== LWc= aXF1ZQ== cmFtZQ== IHdpZHRo ZXJn KSg= aXR0bGU= VFI= IFRoZXk= ZW5jZXM= MDI= cmw= b25z IGxhYmVs Lnk= LXQ= dXBkYXRl YW5lbA== c2M= LnRv IHByb2plY3Q= w7w= IGVsZW1lbnQ= IHN1Y2Nlc3M= CQkK LnNo cmFt Y2hlZA== KCkpCg== ICgK IGRhdGU= IHRvdA== X1NU QWxs aWZpY2F0aW9u CXZhcg== IHRyaQ== Y2hlbQ== bXk= IGJpZw== IEFk IEF0 b3Rz bnVt QWN0 IG1hcA== ZXJh Y29wZQ== LiQ= LOKAnQ== IHBvcA== IGZldw== IGxlbg== dWlk ZXRlcnM= dWxlcw== w60= c291cmNl aHR0cHM= IGRlbQ== IGVhcg== IyMjIyMjIyMjIyMjIyMjIw== IG1hdGNo b3JpZXM= NDk= YWNlcw== IENs IG5vZGU= Nzg= aXJj bG9jYWw= dW5pdHk= fTsK IGFub3RoZXI= PDw= b2dsZQ== IHNpdA== ZXdvcms= VEU= Lkk= TlM= b2xvZ3k= b3VnaHQ= LkNvbnQ= Pj4= IGNhcmU= c3RhdGU= CXByaXZhdGU= IGVmZmVjdA== Kysp X2ZpbGU= ZW5kaW5n TGluZQ== Rm9y aW9y IFNj IGZ1bg== LlNpemU= CWVsc2U= XSk= c3RhcnQ= dmlvdXM= IH0s b3Vycw== IGxlZw== IHNlcnZpY2U= IHNpbmNl aXJvbg== TGFiZWw= IG5vbg== IGxvcw== aWN0aW9u IGZ1bGw= YWN0ZXI= Ym9hcmQ= Z3Jlc3M= IHR1cm4= aXRoZXI= MDk= LnNpemU= IGJvZHk= cmVzaA== ZXR1cm4= MTk5 KF8= eWxlcw== b3JtYWw= cGk= IHNvbWV0aGluZw== IS0t dWludA== IHByb2R1 IHN0YW5k IHByb2JsZQ== IGF2YWlsYWJsZQ== bXQ= IEJs IC4uLg== IGJsb2Nr SW5wdXQ= IGtlZXA= Q291bnQ= b3Blbg== IFsn IHRocm93 dWlsZGVy QWN0aW9u IHRoaW5ncw== VHJ1ZQ== IHVybA== IEJv cHJpbnRm IHJlZA== anM= LmNyZWF0ZQ== IE9y U3RhdHVz SW5zdGFuY2U= IGNvbnRyb2w= IGNvbWU= IGN1c3RvbQ== bG9jYXRpb24= MDc= bW9kZWw= IA0K IHNvdXJjZQ== IGVhcw== Lm91dA== XQoK b25leQ== IGF3YWl0 IHBhcnRpYw== QVA= dWJsaXNo b2Rlcw== X3Bybw== cGx5 cml0ZXI= IHByb3Y= IG1pbGw= SFQ= XSkK IGNoYW5n IGFzaw== ICAgICAgICAgICAgICAgICAgICAg IG91dHB1dA== IGVtYWls Njg= LnB1c2g= IH0NCg0K aW5hdGlvbg== NDc= YXRyaXg= VGFibGU= dWNjZXNz XSk7Cg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpc2M= KFs= IGJ1c2luZXNz aGVpZ2h0 Lmh0bWw= dGE= ZmllbGQ= IHJlcXVpcmVk X1I= IGdvdmVybg== fQ0KDQo= bGV4 NTAw Liw= IFNldA== dXJjaA== Ly8v dHM= YWY= IG1pZ2h0 aXN0b3J5 U3Ry IG5ldmVy UmVzcG9uc2U= YXJzZQ== YWRh IEhvdw== ICop IDs= IGhhcmQ= QWQ= IGludGVybg== dXNlZA== KGRhdGE= bW9k YW5uZWw= IG5w dWdn IC8+Cg== IGNhbGxlZA== Ym9keQ== IGNobw== KHI= X3NldA== aXJk ID49 IH07Cg== IG9wdGlvbnM= IEdlbmVy IGhlaWdodA== UG9pbnQ= WW91 ZXR5 Q2xpY2s= IHNtYWxs IGlkZQ== IGFjY2Vzcw== YW5ndWFnZQ== IHByb3RlY3RlZA== IGpvYg== IFRoZXJl RGVm IGFkZHJlc3M= IHVpbnQ= Tm90 b28= YXBz PGRpdg== YWluZWQ= YXR1cg== IHN1bQ== LXc= IERhdGU= IGxpdHRsZQ== IGZyaQ== WVBF IHBvcnQ= ZWg= cHJpbmc= X3BhdGg= IHN0YXR1cw== MDY= YWlt Ym9vbA== IGFwcGU= IG9z Lm5hbWU= ZW5zaW9u X0c= IHVwZGF0ZQ== Q29uZmln YWZm RVJS IDw9 YXRlbHk= I2lm dWN0aW9u OTU= IFRl IGxpbms= IFVzZXI= LmZpbmQ= Lm9yZw== bWU= IGdpdmVu T3V0 I2VuZGlm IGJldHRlcg== UGFnZQ== IGZlZWw= ZW5u TUw= IGFscmVhZHk= IGluY2x1ZGluZw== b29nbGU= cnU= aWNhbGx5 cHJvcA== bGVhbg== b3V0ZXI= IGFsd2F5cw== b3JkaW5n SWY= b3JhZ2U= IHBhcmVudA== dmlz CQkJCQkJCQ== IGdvdA== c3RhbmQ= IGxlc3M= L3M= IEFzcw== YXB0 aXJlZA== IEFkZA== IGFjY291bnQ= cGxveQ== IGRlcg== cmVzZW50 IGxvdA== IHZhbGlk CWQ= IGJpdA== cG9uZW50cw== IGZvbGxvd2luZw== X2V4 U09O IHN1cmU= b2NpYWw= IHByb20= ZXJ0aWVz aGVhZGVy LnBybw== IGJvb2xlYW4= IHNlYXJjaA== a2Vu IG9yaWc= IGVy RWQ= RU0= YXV0 bGluZw== YWxpdHk= QnlJZA== YmVk CWNhc2U= NDY= ZXRoZXI= cG9zaXQ= IGludmVzdA== IE9S IHNheXM= bWlzc2lvbg== QU1F IHRlbXA= b2Fk IHJlc3Q= aW5mbw== IGludGVyZXN0 QXJn IHBlcmZvcm0= cG9ucw== IFZpZXc= IHZlcg== bGli KGNvbnN0 VXRpbA== TGlzdGVuZXI= YXJnZQ== Nzc= IG11bHQ= IGRpZQ== IHNpdGU= Li4vLi4v RUw= IHZhbHVlcw== IH0pCg== cGVu Tm8= aWNybw== IGJlaA== ICcuLw== YWN5 cmVj KCktPg== CSAgIA== Iikp Q29udGVudA== X1c= cGxlbWVudA== IHdvbg== IHZpZGVv YWRp cG9pbnQ= JSU= MDM= IGds ZXJ2ZWQ= dmlyb24= SUY= dXRlZA== 44M= J20= IGNlcnQ= IHByb2Y= IGNlbGw= YXJp IHBsYXllcg== YWlz IGNvc3Q= IGh1bQ== KFI= IG9mZmlj a3M= LnRleHQ= YXR1cmVz IHRvdGFs ICovCgo= b3Bl IHN0YXQ= VU0= IGxvYWQ= aWdodHM= IGNsZWFy dXJv IHRlY2hu dXBwb3J0 SVI= IHJvdw== IHNlZW0= IHE= IHNob3J0 IE5vdA== aXBw R3JvdXA= c2VjdGlvbg== bWF4 aXJs IG92ZXJyaWRl IGNvbXBhbnk= IGRvbmU= Iik7DQo= IGdyZQ== LlJl IGJlbGll cmlzdA== IGhlYWx0aA== QU5U KCkKCg== IEJl LnZhbHVl IEdy b3R0b20= IGFyZ3M= UFQ= c3RhdHVz ZnVuYw== dW1lbnRz LWg= TnVtYmVy Og0K IExvZw== ZXJ2ZXI= ICksCg== YW1lbnQ= IG9iag== aW5j IGNoaWxkcmVu aWN5 SVo= YW5kcw== YWJseQ== IGRpc3RyaWI= IGN1cg== ZXJpYWw= IGRheXM= cmVhdGVk cmVjdA== LWw= aXJt aWRkZW4= b21i IGluaXRpYWw= Lmpz IOI= UXVlcnk= IG9ubGluZQ== aW1hbA== LmNvbg== YXU= VXJs Y29udHJvbA== aXJlY3Rpb24= IGluc3RhbmNl T1JU IEZy d2hlcmU= IGphdmF4 IG9yZ2Fu YXB0ZXI= IHJlYXNvbg== b3B0aW9ucw== NTk= IE1hcg== KGE= IHdpdGhpbg== LuKAnQoK T0RF X0RF YWRtaW4= ZW5kZWQ= IGRlc2lnbg== IERhdGE= dW5l IEZpbGU= cm9vdA== IGNlbnQ= IGFycg== X2FkZA== bGVu cGFnZQ== LCc= X3N0cg== IGJybw== YWJpbGl0eQ== b3V0aA== NTg= L2M= cG9zZQ== aXJ0dWFs ZWFyY2g= X3VybA== YXJnaW4= SHR0cA== IHNjaG9vbA== YXZh IGNvbnNpZGVy LmxhYmVs IEFycmF5 NDI= d2Vi b3B0 LnByaW50bG4= dWxhdGlvbg== IGZ1bmM= UEw= ICJc IFRleHQ= YWN0b3J5 KGZ1bmN0aW9u bnVsbA== IGVuZw== ZG93bg== IGluY2x1ZGU= IEVu IERy IGRi ISE= c2lkZQ== IGluaXQ= cXVpcmVk IFNoZQ== Q29sdW1u cmVhY3Q= IGFubg== IHN0b3A= IGxhdGVy IFRoYXQ= ZW50aW9u ZGY= VUc= SUxF IGNsaWVudA== cmFmdA== ZmZlcg== UE9TVA== ZWxwZXI= IGxvdmU= cXVvdGU= b3Vk IGpzb24= IGFibGU= IG1lbg== QVg= IENvcHlyaWdodA== w7Y= YXZpZw== cmVx Q2xpZW50 fSk7Cg== LkNvbQ== ZXJj aWx0 cGVjaWFs X2NvbQ== cm9vbQ== Lk5hbWU= IGdpdmU= YW1i aWtl IGNvbmRpdGlvbg== Y2xpZW50 YXRvcnM= OiI= IGNvcHk= dXR1cmU= aXZlcnNpdHk= ZXJuYWw= e3s= IENhbg== b3VuYw== ZG8= IG9jYw== IGFwcHJv dGhlcnM= emU= IGVpdGhlcg== IEZs IGltcG9ydGFudA== IGxlYWQ= YXR0cg== QVJU RXF1YWw= IGRh ZXRjaA== ZW50aXR5 IGZhbWlseQ== YWRkaW5n IG9wdGlvbg== IGV4aXN0 aWNh IE9iamVjdA== Njk= J3Zl dmVycw== aXRpb25hbA== Njc= b3V0cHV0 IFRydWU= IE9G X3RpbWU= IG9mZmVy IH0pOwoK SEVS ZWdpbg== IiI= IHdhdGVy IGNoZQ== IE15 b3JlZA== IHN0ZXA= YW5jZXM= Q0s= QVk= 4Lg= c3RydWN0aW9u KEM= MzAw b3VjaA== U3RyZWFt YWN0aXZl YW1h RW50aXR5 cHJvZHVjdA== KCl7Cg== IGdvdmVybm1lbnQ= IElE YWpvcg== QW5k IGRpc3BsYXk= 0Ls= IHRpbWVz IGZvdXI= IGZhcg== IHByZXNlbnQ= IE5T IFwK dWVzdA== IGJhcw== ZWNobw== Y2hpbGQ= aWZpZXI= SGFuZGxlcg== IGxpYg== UHJvcGVydHk= dHJhbnNsYXRpb24= IHJvb20= IG9uY2U= IFtd Y2VudGVy PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IHJlc3VsdHM= IGNvbnRpbnVl IHRhbGs= X2dldA== IGdyb3c= LnN3 ZWI= IFB1YmxpYw== T1A= ZWN1dGU= b2xz ICoq Iik7Cgo= IG1hc3M= dXJlZA== LmNsYXNz b21pYw== IG1lYW4= aXBz IGF1dA== KTsNCg0K IHVudGls IG1hcmtldA== IGFyZWE= dWl0 IGxlbmd0aA== IFdpdGg= c3RydWN0b3I= ZXZlbnQ= Ij48 IFNw SVY= IG11cw== aWZm IGtpbmQ= YXV0aG9y b3VuZHM= bWI= X2tleQ== NDE= d2lkdGg= cG9zaXRvcnk= IGxpZ2h0 dWs= Um93 b2hu YWxm dmlyb25tZW50 YXBwZXI= b2xsZWN0aW9ucw== IHNpZGU= X2luZm8= IGV4YW1wbGU= aW1hcnk= IHdy IGNhbXA= Y3JpYmU= MjU1 Ii8= IG1pc3M= d2F5 IGJhc2Vk IHBsYW4= Vmlz b21haW4= dW5r IGF3YXk= VVA= PFQ= T1M= aW9k IE1vbg== 4oCZcmU= IGxpaw== w6c= aXZlbHk= LnY= aW1lcg== aXplcg== U3Vi IGJ1dHRvbg== IFVw IGV4cGVyaWVuY2U= Q0w= IHJlbmRlcg== X3ZhbHVl IG5lYXI= VVJM YWx0 IGNvdW50cnk= aWJpbGl0eQ== NTc= KCksCg== ZWFk IGF1dGhvcg== IHNwZWNpZmlj YmFzZQ== KG5hbWU= b25lcw== IERv IGFsb25n eWVhcg== IGV4cHJlc3M= Lic= ZW52 IGJlZ2lu IHNvZnR3YXJl IGltcA== IHdpbg== w7Nu IHRoaW5n VHJhbnM= IFRIRQ== IDw/ IHdoeQ== IGRvZXNu aWo= Z2luZw== CWc= IHNpbmdsZQ== b2Zmc2V0 YXJuaW5n b2dyYXBo bGV5 X2NvdW50 IGFuYWw= Y3JlYXRl L20= IFJlZw== OTg= dW5jaA== PSQ= aXNr IHJpZ2h0cw== KE0= ICIiIgo= YXBlcg== Lm1vZGVs IHBv ZW1wdHk= YXJ0bWVudA== IGFudA== IFdoZW4= IHdvbWVu IEVk IHNlYXNvbg== IGRlc3Q= w6M= KGg= IHBvc3NpYmxl IHNldmVy IGJ0bg== IGRpZG4= IHNlbnQ= IGVuYw== IGNvbW1hbmQ= IF0sCg== X3g= IHJlY2VudA== b2x1dGlvbg== dmVjdG9y IEJ5 IE1heQ== IEFjdA== u78= IG1vbmV5 SU5U YnNpdGU= CXA= Lg0K 77u/ c2w= YXR0ZXJu IENsYXNz IHRvbGQ= dWRpbw== Y3VycmVudA== IGVxdQ== IGF1dG8= IFN0YXRl ZGE= bXNn KSk7Cgo= IHdvcmtpbmc= IHF1ZXJ5 IEJy IHdpbmRvdw== YXV0aA== b25seQ== CXQ= IGxlYXN0 YWdu IGV4cGw= aXR0ZXI= YXJpbmc= IGNvbHVtbg== IEdlbmVyYWw= Ijoi ZXJhbA== cmlvcg== IHJlY29yZA== SUI= RVg= IGRhdA== IG1ha2luZw== dWVk IENhcg== ZW1w Ii4= IE1lZA== IGNsb3Nl IHBlcmNlbnQ= IHBhc3Q= KGc= Oig= IHdyaXRl IG1vdmU= IHBhdA== Q29udHJvbA== LlRv IHZp Ki8K aW5hdGU= J2xs YWdlZA== TnVsbA== IHNwZWNpYWw= SVpF IGNpdHk= LyoK IEVuZw== aXhlZA== aW5hcnk= cHk= IGVmZg== YXJpbw== IHRlbGw= YXZvcg== IHNlbGVjdA== bGV2ZWw= aW11bQ== b3Blcg== QnVpbGRlcg== SVA= JyksCg== ZXNj IGZvbnQ= IjsKCg== IEFt aXNoZWQ= aWxscw== SW50ZXI= T1c= IGNvdXJzZQ== IGxhdGU= aWRkbGU= NDM= IGFtb3VudA== IGFzeW5j aW5v Y3Vs IOw= YW5kbGU= X3VzZXI= IGJlbg== IENhbA== ICRf IFJlcA== IGVub3VnaA== VG9rZW4= LnVzZXI= KGo= U2M= V2lkdGg= bm93 YXRmb3Jt IGxvb2tpbmc= IGhvbGQ= TW9kdWxl SVRZ dm8= aXNvbg== LkRhdGE= eWM= IHBvdA== IFRydW1w aWR1YWw= aWRlcw== cnQ= IHByb3BlcnR5 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== YW1ld29yaw== Z28= IGxvdw== IHBhcmE= IHByaWNl dXJ5 IHRvZGF5 cm95 ICcv IHBvbGl0 ICcn eW1i UGg= IGFkdg== IGF0dGFjaw== IFN0ZQ== Uk9N NDAw YW5h IG1lYW5z IHN0b3J5 aWRz YWtlbg== IG1lZXQ= IG1vbQ== IOKAmA== ID8+ IGRlbg== b2JpbGU= Y2hhbmdl ICAgICAgICAgICAgCg== aWNp bmE= IEZvcm0= IHNvcnQ= U2VsZWN0 cGFyZQ== IHRob3VnaHQ= X2Nvbg== IHRhc2s= b2N1cw== IERF IE1pbg== IG9wdA== CWJyZWFr dW1lcg== S0U= dGhlbg== IGRldA== IFRlc3Q= cG9ydHM= IHJldmlldw== KCcv bW92ZQ== IHN3aXRjaA== RVJU cGF0Y2g= YW5ub3Q= 44I= IGFib3Zl aXRpdmU= NTY= IHF1ZXN0aW9u IFF1 44CCCgo= Z2xl IHdvcmQ= IHByb3ZpZGU= IFJldHVybg== IHJlc2VhcmNo w6Nv dXN0cg== IHB1Ymxpc2g= Y2hlbWE= fX0= IENPTg== LWlu YWxsYmFjaw== IGNvdmVy XFw= Y29sb3I= IElT IHdoZXRoZXI= aW1hdGU= aXNj QmFy IGRpdg== QmU= b3Vybg== IGhhdmluZw== bGVt cGxheWVy YWJz YW1lcmE= bmV5 IGV4Yw== Z2V0aGVy cGxpZWQ= YW8= WyQ= ICsr aXBl c2hvdw== L2Q= Wzo= YWdlbWVudA== bGV2 X0lE OTc= cmFyeQ== YWRlcw== X3Nl YXVzZQ== IGVtcGxveQ== ICovDQo= IGZyZQ== ICdA IGNvbXBsZXQ= IGxhcmdl cmFs XHg= IGZhYw== PFN0cmluZw== IGNyZWF0ZWQ= dXBlcg== LnN0YXRl IGhvc3Q= ZW5lcmlj L2I= KCE= d2hpbGU= aWFz QlVH ICk7Cgo= IHJvbGU= UmVn IENvbG9y U3RhcnQ= IHBvcm4= dG9w IHdlYg== IGRldg== IGRlYWw= KyspCg== SW50ZWdlcg== cG9zaXRpb24= Lm9u ICgi 5Lg= IHByb2JsZW0= c3Y= IHByZXNz QUJMRQ== QVRJT04= IFNlZQ== YW5jaA== IHRob3VnaA== bGVlcA== IDwhLS0= IHBvaW50cw== ICAgICAgICAgICAgICAgICAgICAgICAgIA== Lko= IDo6 cHRy REI= Kys7Cg== LnBuZw== bm9kZQ== c29mdA== cG9uZA== IGV2ZXI= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== TWVudQ== KCcj IHNlcnZpY2Vz cGc= fSkK cGFyYW1z IGFjdHVhbGx5 ICIv RW1wdHk= TWV0aG9k IGlkZW50 dW5pYw== IG1pbGxpb24= IGFmZg== c3R5bGU= IGNvbmM= aW9z aWdubWVudA== VUxU UHI= IjsNCg== IHVuZGVyc3RhbmQ= dWFyeQ== IGhhcHBlbg== IHNlcnZlcg== IENv U0M= IGxlcw== IGZpbGVz R3JpZA== c3Fs IG9mdGVu IGluZm8= X3Ry c3Jj b255 IHNwYWNl dW1i IHBhc3N3b3Jk IHN0b3Jl LAoK IFdoYXQ= Z2Vk IEZhbHNl VXM= c3dlcg== X2luZGV4 IGZvcm1hdA== bW9zdA== c20= TmV3 IGRldGFpbHM= IHByb2I= IEFORA== KCkNCg== aWxhcg== ICR7 cnlwdA== LkNvbGxlY3Rpb25z JHRoaXM= IEZyZWU= X29m KGZhbHNl ZGF0ZWQ= ID4+ IGZhY2U= Q1RJT04= IHNhdmU= IHR5cA== ZGV2 KCIj QUdF Y29udGFpbmVy ZWRpdA== UUw= IGl0ZW1z IHNvY2lhbA== aWVu IFJlYWN0 KS4KCg== IG1hcg== IHJlZHU= IFJF LnB1dA== IG1ham9y Q2VsbA== bmV4dA== IGV4cGVjdGVk IHlldA== IGluZGl2 dHJpYnV0ZXM= YXRpcw== YW1lZA== IGZvb2Q= U291cmNl KHN0cmluZw== ICsK aXRlcw== ZHI= IG1lbWJlcnM= IGNvbWI= aXRlbXM= IFBlcg== VEg= PVRydWU= IGJhcg== X1NF Y29tbQ== KHc= KQoKCg== IHNlbmQ= IGluYw== dW5zaWduZWQ= RkE= IHBhcmFtcw== YXBwaW5n cm9z dWdpbg== ZmE= IGNvbm5lY3Rpb24= IH07Cgo= IGJlY29tZQ== TW9kZQ== IGV2 IGRpZmY= IFVuaXRlZA== SGVpZ2h0 ZnVsbHk= aW1hZ2Vz IG1ha2Vz IGdsb2JhbA== IGNvbnRhY3Q= JzoK IGFicw== 0LDQ ZmxvYXQ= IGV4Y2VwdA== IFBvbA== Q2hpbGQ= dHlw IGNlcnRhaW4= acOzbg== T1VU IGltcHJv aWxlcw== IC0tPgo= IFBhcnQ= dmFsdWVz b3Nz Lyoq aWxpdA== IEV2ZW50 Y3VyaXR5 c3Rlcg== IGNoYXJhY3Rlcg== MTk4 IG5ld3M= ICIs IGRldmljZQ== Y2Vs bG9naW4= aGVldA== RGVmYXVsdA== QCI= CSA= Y2xpY2s= KHZhbHVl IEFi IHByZXZpb3Vz RVJST1I= b2NhbA== IG1hdGVyaWFs IGJlbG93 IENocmlzdA== IG1lZGlh Y292ZXI= IFVJ IGZhaWw= IGJsYWNr IGNvbXBvbmVudA== IEFtZXJpY2Fu IGFkZGVk IGJ1eQ== c3RpdA== IGNhbWU= IGRlbGV0ZQ== cHJvcGVydHk= b2Rpbmc= IGNhcmQ= cm9wcw== IGh0dHBz IHJvb3Q= IGhhbmRsZQ== Q0M= QmFjaw== ZW1wbGF0ZQ== IGdldHRpbmc= X2J5 bWFpbA== X3No LmFzc2VydA== IERlYw== KHRydWU= IGNvbXB1dA== IGNsYWlt Jz0+ IFN1Yg== IGFpcg== b3Bz bmF2 ZW1lbnRz KGlk IGVudGVy YW5nZWQ= RW5k IGxvY2F0aW9u IG5pZ2h0 IGRvaW5n IFJlZA== bGlu fQoKCg== dmlkZXI= IHBpY2s= IHdhdGNo ZXNzYWdlcw== IGh1bWFu IGRhbQ== cGVuZA== ZGly IHRheA== IGdpcmw= cmVldA== IGJveA== IHN0cm9uZw== KHY= cmVs IGludGVyZmFjZQ== IG1zZw== ZmVjdA== X2F0 IGhvdXNl IHRyYWNr Jyk7Cgo= amU= IEpvaG4= aXN0cg== KFM= dWJl IGNl aXR0ZWQ= VkVS Kik= cGFyZW50 IGFwcGxpY2F0aW9u YW55 LnN3aW5n IHBhY2s= XHU= IHByYWN0 IHNlY3Rpb24= Y3R4 IHVuc2lnbmVk LlBvaW50 IE9uZQ== xLE= aXBsZQ== YWlk 0YM= VmVjdG9y Ynl0ZQ== IHdhaXQ= IMOg w6U= IHRvZ2V0aGVy IHRocm93cw== Rk8= Jykp aG9zdA== aXNpbmc= LnZpZXc= IHRlcm1z ZnJhbWV3b3Jr LXI= IGFwcGx5 IHNlc3Npb24= T3B0aW9ucw== dWdnZXN0 IG90aGVycw== d2l0dGVy IGZ1bmQ= SW5pdA== X18o ZW5zb3I= R0VU IHNldmVyYWw= aWk= W2o= SU8= IHRlbXBsYXRl UG9zaXRpb24= IGVjb24= YWNoaW5l IGls LnNwcmluZw== bWFpbg== ZWx0 aW1lbnQ= UmVj bW0= IFVuaXZlcnNpdHk= dXJzb3I= ICAgICAgICAgICAgICAgICAgICA= R0w= aWN0dXJl aXRodWI= Y2Vy Y2FzdA== RnJvbQ== YWxlcw== IHN1YmplY3Q= cGFzc3dvcmQ= bnk= IGVzYw== LndyaXRl 77yM V2hhdA== Lkg= IGhpc3Rvcnk= IEZl IGluZGl2aWR1YWw= dW5pdA== IC0tPg== IGR1 SVNU IHVzZXJz ZnM= ZmFsc2U= dW50 VGl0bGU= IG1vdA== IGZ1dHVyZQ== YWNoZWQ= IHN0YXJ0ZWQ= IG1vZGU= ICc8 X2FycmF5 IGF4 J107Cg== aXJlcw== VGhlcmU= dWdodA== dG1s cG9zZWQ= aWN1bHQ= IHRvb2s= IGdhbWVz IH19 ID8+Cg== IHByb2R1Y3Rz SXM= IGJhZA== IERlcw== LnBhdGg= JwoK IFBvc3Q= YXZlbA== KDo= MTUw IG5lZWRz IGtub3du Rmw= IGV4ZWM= IHNlZW4= NTE= dW1l IGJvcmRlcg== IGxpdmU= dGVtcA== UGVy IHZhcmlhYmxl aWV0 IERlZg== IGdl ZW1l X2JhY2s= Zmlyc3Q= IHByb3ZpZGVk Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= IGZpbGVuYW1l IGhvcGU= dWx5 YXV0bw== ZmluZA== X3N0cmluZw== YnRu aXR1ZGU= QXR0cmlidXRl IHlvdW5n LnR4dA== IHdlYnNpdGU= IFByb3A= IGV5 PigpOwo= aW9uYWw= QVJS aWN0aW9uYXJ5 dXJ0aGVy Ljwv QUxM IHN0dWR5 aWxp IG5ldHdvcms= eWw= aXN0YW5jZQ== T0s= TlU= cmVzdA== IFNU aWNyb3NvZnQ= IGxpbWl0 IGN1dA== KCk6Cg== IGNvdQ== b2du IHNpemVvZg== aXZhbA== IHdlbnQ= Lno= TGluaw== IGZpcmU= IGFjcm9zcw== IGNvbW11bml0eQ== cmVnaW9u TkU= UmVm IG9mZmljaWFs IHZpc2l0 b2x2ZQ== IHJlY2VpdmVk IHRva2Vu IG1vbnRocw== IGFuaW0= IHBhcnRpY3VsYXI= c3R5bGVz aWNv IGVzcw== ODc= LkNvbnRyb2w= IMOp YmFsbA== IGxlYXJu aW5kaW5n VmFy IGRlY2w= KGVycg== TEVDVA== T25l cGhh IH4= Zm9ydA== YXN1cmU= IG1pbmQ= IEVuZA== Q2hlY2s= IHF1aWNr Iiks QU5E dXRpb25z QmFzZQ== X19fX19fX18= IGNvbW1lbnQ= SU5F 4oCZdmU= QnV0 IEVs IFVz IGFkbWlu bWFyaw== IE5hbWU= YAo= IFR5cGU= YW1pYw== cGM= bG9vcg== RlQ= IG9wcA== Y2tldA== KS0+ dHg= IHB1cg== dWVs eW1ib2w= dWF0aW9u YW5nZXI= IGJhY2tncm91bmQ= ZWNlc3M= ZWZpbmVk Li4uLi4uLi4= IGRlc2NyaXB0aW9u IHJlcHJlc2VudA== IikpOwo= cHJlc3Npb24= cm93c2Vy IHNlcmllcw== d2FyZHM= NTI= KCRf YWlzZQ== IGhvdA== YWNpdHk= cmllcw== YWN0aW9ucw== Q3JlYXRl YWRpbw== YW1wbGVz IG9yaWdpbmFs ZW5zaXZl Zm9udA== c3RyZWFt 77u/dXNpbmc= LnNwcmluZ2ZyYW1ld29yaw== MDAx c2VydmVy IGJpbGw= QUNL aWxlbmFtZQ== IGZyYW1l ID0K RWRpdA== YWRpdXM= IGRyYXc= YW5rcw== IGRldGVy IGNvbWVz X2ludA== IGZvcmVhY2g= YW5nbGU= IGVsZWN0 cGVjdGVk SGVhZGVy aXN0cmF0aW9u RmFsc2U= IEdhbWU= IGZpbHRlcg== QWN0aXZpdHk= IGxhcmc= aW5pdGlvbg== ICI8 MjU2 aXNlZA== IHJlbW92ZQ== IFRyYW5z bWV0 c2Vl Rm9ybWF0 Q29tbWFuZA== IEVY Tm9uZQ== IGZyb250 QVNF IFJlYw== b3VuZGF0aW9u IHZv OTY= PVwi KCo= Q2hhbmdl LldyaXRl Z3JvdXA= aWVudHM= dXk= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IGRpZw== aHI= KC0= IGdlbg== bnVtYmVy dmVj dXJvcGU= ZW50cnk= TEw= IHN0ZQ== VmFsaWQ= J10s X3BhcmFt IHNlbGVjdGVk IGFjY29yZGluZw== IERpcw== IHV0aWw= QnVmZmVy X2Vycm9y IGFzc29jaQ== X1NJWkU= IHdvcg== IHByaW50Zg== cmFn wqA= REQ= IFZhbA== IGFjdGl2 RW5n ZXRpbWU= IHZpcnR1YWw= YWlnbg== YXVy IFByZXM= IEV4Y2VwdGlvbg== IGFueXRoaW5n IE9mZg== IGhvdXJz IHdhcg== QXJncw== YWdpbmc= IG1vZGVscw== IFRpbWU= T2I= YW1z am95 IGVhcmx5 LnJlYWQ= ODY= IGNlbnRlcg== IEluaXRpYWw= IGxhbmd1YWdl bGVuZ3Ro eHk= IHNu IGluZg== UG9zdA== IGFnbw== IGVhc3k= X2NvZGU= IEFOWQ== X2No IGRvd25sb2Fk KFQ= YXZlZA== 4oCT IHN0dWRlbnRz IGZpZw== bGlnaHQ= eHg= IGJ1ZmZlcg== IERlcA== IE1hdGg= SVRI IHZhcmk= IGR1ZQ== RmFjdG9yeQ== IHBvcg== IGVw b3R5cGU= IGNhbm5vdA== IHdoaXRl PGludA== dGVybg== IHJlZ2lzdGVy IHByZWQ= Y2x1cw== X2RhdGU= IC8qKg== IGF1dGg= IFtdCg== IHBlcmlvZA== bm93bg== IHZvdA== IHNjcmVlbg== J2Q= VHlwZXM= IHRtcA== 0LXQ dXJhbA== IGJlbmVm X3k= IG5ldA== IFN0YXRlcw== J11bJw== IE5l IE5PVA== IG5lZw== MTAy IGNvbW1vbg== c2NvcGU= IGNyZWQ= Z2Vz X1RZUEU= IHN1Z2dlc3Q= b29t LgoKCg== IGFjY2VwdA== IHJhbmRvbQ== ZXJt IFZlY3Rvcg== d2l0aA== VEVS KHN0cg== IHJlc3BvbnM= IGhpdA== LlNldA== Z3JpZA== cmlh IGNsaWNr dW5kbGU= Q2FzZQ== aW5zZXJ0 VXRpbHM= ICIiIg== IGltcGxlbWVudA== YXRhbA== dGVtcHQ= dGVtcGxhdGU= b2Ny cmV0dXJucw== IHBsYXllcnM= dXNlcnM= ZWRlZg== IFRoZXNl IGFtb25n IGRlYg== aGE= LmdldEVsZW1lbnQ= IGNpcmM= IGFuc3dlcg== IHdhbGs= IHRyZWF0 IEdl IENyZWF0ZQ== IGFnZQ== IHJlcQ== T1NU YW5ndWxhcg== 0Y8= IGZpdmU= NTM= IGRpc3RyaWJ1dGVk IGZyaWVuZA== VFA= IGNsZWFu b3dz LkNvbnRyb2xz ZGlz IHdvcmRz Lmlv enk= IGhlYWRlcg== IENoZWNr 4oCZbQ== anVzdA== aG9sZGVy PSI8Pw== IEdOVQ== IENvbA== aW1lc3Q= ZW50aWM= ewoK IHRyZQ== bGFzdA== bGE= IFlvcms= TG8= IGRpc2N1c3M= IEdvZA== IGlzc3Vl cmV3 V2luZG93 IGxhbmQ= MTIw IHN0cmVhbQ== IFBhcg== IHF1YWxpdHk= UGFy X251bQ== NTQ= IHNhbA== ZWx2ZXM= T1JE KHVzZXI= IHdvcmtz IGhhbGY= ZW5zZXM= dmFz IHBvbGljZQ== KCIv dWE= IHNpbXBsZQ== QWRkcmVzcw== IGVtcHR5 ZXNo MTI4 VXBkYXRl IENyZWF0ZWQ= KCcu KS4K ICAgICAgICAgICAgICAgICAg IGFncmU= IEZST00= IGNvb2s= IGV2ZXJ5dGhpbmc= aWxpdGllcw== LnN0YXR1cw== IHJlbGF0aW9ucw== ZXh0ZXJu IG5vdGhpbmc= IHJ1bm5pbmc= CXZvaWQ= Ukk= X2E= X0NPTg== cG9y LnN1Yg== cmVxdWlyZQ== IENpdHk= IFdlc3Q= IG1vcg== c3RvcmU= RXF1YWxz b2Rlcg== IG5h IFtb ICgn IERvbg== RVJT L3A= Lmpzb24= YWJvcg== IHNvbWVvbmU= X3RleHQ= LmNzcw== LlRhYg== IFNvbWU= YXRv ZG91Ymxl IHNoYXJl KHZvaWQ= X2Rpcg== IHVy U3RhY2s= IFdvcmxk Llg= c3RyYWN0 SG93 LkdlbmVyaWM= aWNsZXM= IGVudHJ5 IGNoYW5nZXM= IHBlcnNvbmFs KEE= IG9mZnNldA== X3B0cg== IHBpZQ== IEphbg== LWdyb3Vw bW9kdWxl SXRlbXM= IEhvd2V2ZXI= dmVyYWdl LkZvbnQ= IGV2ZW50cw== Lm1pbg== IGludm9s emE= IHdob2xl IG5lZWRlZA== IGxpa2VseQ== cmllZg== T1JN dmVyc2lvbg== IGZpZ2h0 IGVpbg== RnJhbWU= MTk3 Z2Vu IE91dA== YXZpZ2F0aW9u TGVuZ3Ro aWxsZWQ= cXVlbmNl ICE9PQ== IFNvZnR3YXJl IHdyaXRpbmc= IHJhdGU= J10sCg== UGFuZWw= aW5uZXI= IFsi IHR3 Y2Q= IDsK X3N0YXRl IFNt IE1hcms= KSkKCg== cHJvdA== IE1y bWV0aG9k dXN0b21lcg== SWNvbg== IGNvcnJlY3Q= KG9iamVjdA== IE1vcmU= IGZhbGw= IHZvbA== IGRldmVsb3BtZW50 ZW50bHk= IHNp bWVkaQ== dmluZw== UFA= YWtlcg== IGluZHU= IGVsaWY= IHByZXQ= IGJlbGlldmU= bnM= b21ldA== MTIz IEludGVybg== UmVjdA== U28= LmVycm9y UmVhZA== IGZlYXR1cmVz IG1pbnV0ZXM= LS0t YXNpbmc= Y3JldA== Ij4NCg== LmFubm90 IGNvbGxlY3Rpb24= Jy4= IHNpbWlsYXI= IHRha2Vu KCIl T3JkZXI= J10K LW1k IFRI YWNlZA== IGlzbg== L2o= IHNvbg== Z3JhcGg= IEludGVnZXI= IG5lY2Vzcw== cmVlbg== IHVt IFw8 IG1vbWVudA== IGJyaW5n IGluZGlj eXNpcw== TGV2ZWw= dmVyc2U= dXJyZW5j X3Rlc3Q= IGVudGlyZQ== RG93bg== IH0KCgo= KHJlc3VsdA== IFJlYWQ= w6g= TW9k IHRyeWluZw== IiksCg== IG1lbWJlcg== IENvcg== T0RP LWNvbnRyb2w= dW50aW1l IFNpbQ== RGlhbG9n cGxvdA== X29u IHBoeXM= fS8= IG5hbWVzcGFjZQ== CQ0K YWNj UGxheWVy QVJF ODk= IGZvb3Q= IGJvYXJk cGFydA== IHN1cw== d2lzZQ== IE1j IHB1c2g= QVRB IHBsZWFzZQ== cmllZA== d2VldA== Yml0 aWRlZA== VkU= IFN3 VUI= IHR5cGVz ZWRpYQ== IGNsb3M= YWNlYm9vaw== V2hlbg== IGVkaXQ= aWdnZXI= IGVuZXJn Q29udGFpbmVy IHBob3Q= IENvdW50 IEV1cm9wZQ== Lklz IFJ1c3M= cGVlZA== IFN0cg== IHB5 IGN1bHQ= IGRlZmluZWQ= Y2NvdW50 IG9idA== LkxvY2F0aW9u IHRocmVhZA== aWxsZQ== IGluc3RlYWQ= c3Ryb25n IFNlYw== VVJF IGlkZWE= LnNl ZW15 c2VsZWN0ZWQ= Q29ubmVjdGlvbg== YWNpbmc= dGhyZWFk Lm5leHQ= IGNvbGw= IGZpbG0= aXN0aWM= IGNvbXBldA== IGNvbm4= dGhvdWdo IGNvbXBhbg== b2NrZXQ= IHRlYWNo PSg= IHBob25l IGFjdGl2ZQ== Nzk= ZGVsZXRl MTAx dHJpZXM= IG1v IGRlYXRo fSk7Cgo= b2NvbA== V2lkZ2V0 IGFydGljbGU= cm9kdQ== YW5kaWQ= 0Ys= IENy a2E= KCk6 bG9vZA== CQkJCg== IGFsbW9zdA== IHNlbGw= ZXJ2bGV0 cmlw VW5pdA== IGFwcGxpYw== IGNvbm5lY3Q= IGZlYXR1cmU= IHZpYQ== Jyks IGxpbQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IEd1 RW5naW5l IGVucw== IGVudmlyb25tZW50 YmxvY2s= SEVSRQ== TlVMTA== Z3k= dGFn KSku ZXhw IGNvbXBs IGluc3RhbGw= IGNvbXBsZXRl cXVldWU= YXR1cmFs IGdlbmVyYWw= dGhvbg== IGFza2Vk b3Jlcw== KHJlcw== IHJlc2VydmVk U1A= IOKApg== xYI= IHNpZ25pZmlj T2Zm ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IEFn IEp1c3Q= IEVycm9y IGluZmw= YWRhdGE= IGljb24= YXNrcw== Jyc= X0xP Py4= YWNjb3VudA== ICgq JykKCg== cmFw X3Zhcg== IEZPUg== IHBhcnR5 IFlvdXI= Y2F0 c3RyeQ== Lm5ldw== Ym9vdA== IE5vdg== IHZlY3Rvcg== IG5vcm1hbA== IGZ1cnRoZXI= UmVwb3NpdG9yeQ== ODAw IGRhdGFiYXNl YXR0bGU= IG11c2lj IHNwZWVk IGRvYw== cHJvY2Vzcw== SUdIVA== LnBhcnNl IHRha2luZw== IHZpb2w= Y2VlZA== IEFmdGVy IGZvcndhcmQ= IGNyaXQ= Ii8+Cg== cm90 IGZhaWxlZA== ZWZvcmU= IGNvbmNlcm4= b2U= YmE= IHNlbmRlcg== IHRlcm0= aGFz PSIj IHBvdGVudGlhbA== TnVt IHB1Ymxpc2hlZA== LmNsb3Nl IEltYWdl c3RyYWludA== VUQ= IE9i IHByb2JhYmx5 bGlt IjoK b2x1bWU= IGNvbnN1bQ== NzY= YWd1ZQ== ZW5zaW9ucw== IGludmVzdGln LXllYXI= Jyk7 LXNt IGVuam95 b3JpZw== ZXJpbmc= Y3A= bGVhc2Vk cGxlbWVudHM= IHJldHVybnM= cGF0 Qk8= IEhvdXNl LkxhYmVs IHdlaWdodA== aWdoYg== IGNvbmRpdGlvbnM= IGV4Y2VwdGlvbg== ZGVzY3JpcHRpb24= IHRyYWQ= LXRv IHt9 IG1vZHVsZQ== RU5E LmFw LnByb3Bz IGNvbnN0cnVjdG9y YXZlcw== IGZhdm9y IE5vdw== O2k= IE1haW4= X2s= ZXJpZXM= 4oCZbGw= dHJhbnNmb3Jt aW1lc3RhbXA= UHJl IG1lcg== LnJlcw== c3RhbnQ= TG9jYXRpb24= X05BTUU= IGxvc3M= IAoK bmV0 IGVuZ2luZQ== QmxvY2s= IGlzc3Vlcw== IHBhcnNl IEJhcg== IHN0YXk= IEpTT04= IGRvbQ== YWlycw== d25lcg== IGxvd2Vy IiwNCg== IERlbQ== dWZhY3Q= IHBz IHBlcmZlY3Q= Ukw= IGVkdWM= bHM= ZW1vcnk= QVJSQU5U dWdl IGV4YWN0 LmtleQ== YWxsZWQ= ZWNo aWVm XC8= b2tl IGZvcm1lcg== YWxsb2M= IHNpeA== aWRh IG1hcmdpbg== IGhlYXJ0 YWxk cGFjaw== LmdldEVsZW1lbnRCeUlk IFdBUlJBTlQ= IHJhdGhlcg== IGJ1aWxkaW5n ZXJtYW4= bGljZQ== IHF1ZXN0aW9ucw== aXplcw== bGVnZQ== aXJlY3Rvcnk= IGpl IGNhcw== cHJvcHM= dXRm IHNlY3VyaXR5 IGhvd2V2ZXI= d2VpZ2h0 IGluc2lkZQ== IHByZXNpZGVudA== Q2hhcg== IFdJVEg= Lm1hcA== IGdyYXBo IHRhZw== X3N0YXR1cw== IGF0dGVtcHQ= b3Bw dXNlcw== CWNvbnN0 IHJvdW5k LCQ= IGZyaWVuZHM= RW1haWw= Pz4= UmVzb3VyY2U= S0VZ b3Nw LnF1ZXJ5 IE5vcnRo YWJsZXM= aXN0cmli X2NsYXNz ZWxsbw== VGhhdA== 0Lo= cGVjaWFsbHk= IFByZXNpZGVudA== IGNhbXBhaWdu IGFsdA== YXJlYQ== IGNoYWxs IG9wcG9ydA== LkNvbg== IGVuZXJneQ== bGlrZQ== LnN0cmluZw== aW5ndG9u KSo= eXk= IHByb2Zlc3Npb24= aXJ0aA== IHNlZw== 5pw= IGhvcg== aWVycw== Y2Fu IGJlaGluZA== UHJvZHVjdA== Zmc= IFNr LmpwZw== Pzo= XTsKCg== IGNhbGxiYWNr IEh0dHA= 0Yw= bG9uZw== TVM= QVRI IHJhaXNl IHdhbnRlZA== cm93bg== dXRvcg== bHQ= XT0= ZWxpbmU= TUE= IHNlcGFy Y3M= c2VtYg== RGlz YnNlcnY= IFdpbGw= IHBvbGljeQ== IHRoaXJk cGhvbmU= IGJlZA== L2c= Ll9f IEluYw== aXppbmc= LnJlbW92ZQ== aW5zdGFuY2U= LnR5cGU= IHNlcnY= RWFjaA== IGhhcg== IE1lc3NhZ2U= KGtleQ== U0VMRUNU UG9z KSk7DQo= IHJlY29tbQ== IHRyYWluaW5n IEVudA== IENoYXI= aWNodA== KGZpbGU= IHByaW9y R2FtZQ== IGV4aXQ= UGFyYW1z LmNvcmU= UEM= bmVz YW5jZWQ= KHJlcXVlc3Q= UGFzc3dvcmQ= fT4K IG1hZw== IHJlbGVhc2U= IHNoYWxs dWRlbnQ= IFNvdXRo YW5kbw== Oic= LlRhYkluZGV4 c2s= YW5uZXI= aXNzZXQ= IG91dHNpZGU= bGVkZ2U= IOU= IFJvYg== IGltbQ== IQo= IFdlYg== RGVz QkM= YW5jaWFs Um91dGU= RGVj ZmVyZW5jZXM= IHB1cmNo IE1vZGVs Y3Rvcg== Z24= X3N0YXJ0 X3Vu Lio= aXNlcw== IGdyb3VuZA== IHVuaXF1ZQ== IGJlYXV0 eyI= IHBvdXI= IE9jdA== IHRyZWU= c2V0cw== X3Jlcw== JyktPg== X3JlZw== KCJc IGJ5dGU= Qmw= IGRhdGluZw== IG1hdHRlcg== IFJlbQ== ICcuLi8= IEF1Zw== IExh ICQo b3VybmFs MTEx aWFt IHNob3dz d3JpdGU= IGJhbGw= IHNpbXBseQ== IGZhc3Q= IG1lbW9yeQ== QVNT IE9m b3ZlZA== YW50ZQ== YXVs aXN0cnk= KSkpOwo= IGZpdA== PHN0cmluZw== IHBvbGl0aWNhbA== YW5jZWw= Xy4= Y2FyZA== LmN1cnJlbnQ= b2No X2ltYWdl XHQ= Iwo= KEw= IGluZHVzdHJ5 Y29taW5n IGV4dHJh NjAw IHJlcG9ydGVk LnN0YXJ0 IHJlc291cmNlcw== IGltZw== Zmxvdw== X0VY KG51bGw= IFByZQ== IHdyb25n aW50ZXJmYWNl UGFyYW1ldGVy bmVycw== 4bs= dHVyZQ== ZXJzaXN0 b3VudHJ5 IHNlZW1z YWxhbmNl ZGVzdA== CVN0cmluZw== IG1haW50 IHVuaXQ= YWN0ZXJz IFRS aWZ1bA== ZXhwb3J0cw== cHJvamVjdA== QXBwbGljYXRpb24= bGVnYXRl IHRha2Vz dGVybQ== IGV0Yw== dXN0ZXI= IGFwcGVhcg== YWRkcmVzcw== IGZlbQ== aHM= IGhvbQ== LC0= IGRpZmZpY3VsdA== IGNvbWluZw== T3Blbg== IHNldHRpbmdz IFdhcg== IFRoZW4= IGF1dG9t IEZvdW5kYXRpb24= IHF1aXRl RGVzY3JpcHRpb24= IGJsb2c= aXF1 UFM= MTEw X2ZpZWxk SnNvbg== U1NJT04= IFNjaA== IExP IGRlc2NyaQ== IGV2ZXJ5b25l IHByZXR0eQ== IGxvbmdlcg== IG1lbnU= IGN1cnJlbnRseQ== c2Vj IHJlbGF0aW9uc2hpcA== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IE1hcA== YXNldA== IHBhcmFtZXRlcnM= IGNydXNo Ig0K SUxJVFk= aWdyYXRpb24= IGNvdXQ= dG90YWw= IG5hbWVz bmRlZg== Iik7 cmllbmQ= eW5hbWlj IGVmZm9ydA== IGFjdHVhbA== IGZpZWxkcw== T1VO dGVycw== MjUw IGZpeA== X21vZGVs IGNhc2Vz Q0E= TXk= SW50ZXJmYWNl IFNF MTk2 XV0= YWxsZQ== IE5hdGlvbmFs IEFycmF5TGlzdA== aW5saW5l LlY= YXJh cmVmaXg= YXNj UmVhZGVy INC/ YXN0aWM= KCgp Q2w= LmFubm90YXRpb24= IHBlcmZvcm1hbmNl YWlseQ== LnRvU3RyaW5n Lm5ldA== dmlld3M= LmVuZA== YXllcnM= bGF0ZQ== IEFwcg== ZWRlcmFs J10p LmJvZHk= IGhpZ2hlcg== X2Zs Y3I= YWxlcnQ= X25vZGU= IEdvb2dsZQ== IGl0c2VsZg== QXV0aA== dXJyZW5jeQ== IHNpZ25pZmljYW50 YXBwZW5k IHJlc3BlY3Q= c3RyYXA= IHVuYQ== cml0ZXJpYQ== UE9SVA== LmFwYWNoZQ== T3V0cHV0 IHByb2dyZXNz IG1pZA== IE1pY3Jvc29mdA== IHJlc291cmNl YWJsaXNo IGRpbQ== LmxvYWQ= LkFwcA== IGRpcmVjdGlvbg== IGFkZGl0aW9uYWw= ICAgICAgICAgICAgICAgICAgICAgICAg IG51bWJlcnM= IGNvbXBhbmllcw== LlRo IHNvdW5k dXNlcm5hbWU= IHN0YXRlbWVudA== IGFsZXJ0 IGNvbnRyYWN0 aG9tZQ== X2xlbmd0aA== LkNvbXBvbmVudA== ZXY= LkV4 77ya Ijs= IEhpZ2g= ICkKCg== IFBvaW50 b3Bo IGxpbmVz LT5f IikKCg== b3g= YXBwbGljYXRpb24= IF0K CgoKCgoK MTgw IHNvb24= Y3Rpb25z aW5nZXI= IGpvaW4= IFBl IOs= IGxhcw== LkU= Y3Nz L29y IFN0YXJ0 IFRP IHN1YnM= Y29ubg== Y29tcG9uZW50cw== REVCVUc= cXVhcmU= RnVuY3Rpb24= ZW5kYXI= LmluZGV4 IGZpbGw= xJk= IGNob29zZQ== aG93 IEFtZXJpY2E= YXNzZXRz LS0tLS0tLS0tLS0t IFZhbHVl IG9mZmljZQ== IHZlaA== IHRyYW5zZm9ybQ== IEFydA== IGluZGU= IGZu IGltcGxlbWVudHM= YW5nbw== cGxldGU= KyI= dG1w YW1pbHk= IGhhc2g= bWlzc2lvbnM= RVNU Z3Q= UHJvdmlkZXI= ICAgICAgICAgICAgICAgICAgICAgIA== IGZsYWc= IHBhcnRpY2lw ZGVu IFJldHVybnM= IG5vdGU= w7xy cG0= aWRlb3M= IHNwZWNpZmllZA== IEVO ZXN0ZXI= b2xpZA== IHVwb24= KHN0ZA== CXY= ICdc dXo= IHZlcnQ= IHZpY3Q= CXNlbGY= ICIk ODU= Lms= IGdyb3Vwcw== Z2l0aHVi bGFuZw== IG11dA== VE8= IHZl IFBsZWFzZQ== OwoKCg== YWNjZXNz IHsi cmVh IHJpc2s= aWNrZXI= b2dnbGU= CXdoaWxl QU5H LnNlbmQ= NzI= IHdvbWFu IGdldHM= IGlnbg== IElk X2xvZw== T05F IGV2aWQ= IEhhcg== X3N1Yg== IGVuZGw= IGluY2x1ZGVk KCkpOwoK IEFw aWdy IHNlbQ== IEJsYWNr ZG9j X3RhYmxl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== LXVw IGNhdXNl IC4u IHZhbg== X2RpY3Q= IGZvY3Vz SU5E Q0VTUw== LkxvZw== IG11bHRpcGxl aWRv IHJlZ2FyZA== LU0= YW5kbGVy b3Vyc2U= IGRlZw== LlU= IGFkZGl0aW9u IHZhcmlvdXM= IHJlY2VpdmU= 0LXQvQ== IEhU T2Jq REY= IGluY3JlYXNl IE9wZW4= XTs= IGNvbW1pdA== Pwo= YXRlZ29yaWVz YXRvcnk= c2hpcA== IE1pY2g= IGh0bWw= cm9taXNl IGxlYXZl IHN0cmF0ZWc= YXZlbg== IENvbnNvbGU= a25vd24= LW4= X0xF LmNvbXBvbmVudA== IGJyZQ== U2Vzc2lvbg== aWFuY2U= IGFsaWdu dHlwZWRlZg== X3Jlc3VsdA== IFdIRVJF LnNwbGl0 IHJlYWRpbmc= RkFVTFQ= IGNsbw== IG5vdGljZQ== X3By YXJ0ZXI= IGxvY2s= IHN0YW5kYXJk ZXRpYw== ZWxsb3c= IHBhZGRpbmc= IEhpcw== IHN0YXRlcw== X2Nhc3Q= KFA= YWE= IGludGVybmFs ZWFu IFBSTw== IEtleQ== IGVzcGVjaWFsbHk= bWluZw== IGNyb3Nz IG5hdGlvbmFs X29iamVjdA== ZmlsdGVy IHNjcmlwdA== LnVwZGF0ZQ== X2k= IEFzc2VydA== L2NvcmU= JSUlJQ== IHByb2JsZW1z aXN0b3I= IC49 IGFyY2g= IHdyaXR0ZW4= IG1pbGl0 TUVOVA== LmNo Y2FwZQ== IE11cw== X2NvbmZpZw== IEFQSQ== Zm9vdA== IGltYWdlcw== ZW5kbA== Lklu Rmlyc3Q= IHBsYXRmb3Jt LnByb3Q= T3B0aW9u c3Rl IFRPRE8= IGZvcmNl LmNvbnQ= CWVjaG8= IERhdg== UHRy KEI= UlQ= IEJhc2U= XVsn IGFubm91bmM= Y29uc29sZQ== IFB5 ZHM= LmFz IHByZXZlbnQ= YXBhbg== IHsn fTwv IFNlcnZpY2U= IFNlbg== YWRvcg== cHJvZmlsZQ== VG9w IGl0ZXI= cG8= SUVT SlNPTg== SUU= aWFudA== 44CB X2o= IFNlcHQ= X21hcA== YnVt KGNvbnRleHQ= IEhvbWU= aWFucw== R0I= NjM= IGxpdmluZw== IHBhdHRlcm4= KGlucHV0 aWNpZW50 OTk5 Q29yZQ== IGVudGl0eQ== IGludGVn Q2hhbmdlZA== IHVzZWZ1bA== LmluZm8= IHRvb2w= KGl0ZW0= IG9r IGZlZWQ= SVg= w6lz IE5ld3M= cmVtb3Zl ZXJyeQ== CQkJCQkJCQkJ aXBtZW50 YXJlcw== RG8= Q3VycmVudA== LmNvbnRlbnQ= Lkdyb3Vw dXN0cmFs INGB fSk= IHBvcHVsYXI= IHN0cmU= IG1ldGhvZHM= X0VSUk9S TGVmdA== Y2Fs YnNw LlRvU3RyaW5n IGRpcg== IGFsbG93ZWQ= IGltcGFjdA== IildCg== NjI= LmNvbmZpZw== IGVsZW1lbnRz IHByb3Rl IHRyYWlu LnRy cnM= IFJlcHVibGlj IFRhc2s= NjE= YXJpZXM= KEQ= KGdldA== 4oCmCgo= IHJlbGF0ZWQ= IHZlcnM= IHNpbA== ICIiOwo= IGNtZA== IHRlY2hub2xvZ3k= LndpZHRo RmxvYXQ= IFVzZQ== Qm9keQ== c2hvdWxk LmpvaW4= Rm9udA== bGx1bQ== eWNsZQ== IEJyaXQ= IG1pdA== IHNjYWxl IChf ZXJuZWw= IikpCg== IHNjb3Jl L3Y= IHN0dWRlbnQ= VUM= LnNob3c= IGF2ZXJhZ2U= RW5hYmxlZA== KGV4 Y29tbW9u aW1hdGlvbg== OkAi Y2hpZQ== IC4uLgoK cml2ZXI= IE1hcmNo Y2F0ZWdvcnk= Zmlu IGNvdXJ0 0LI= U2VydmVy IGNvbnRhaW5lcg== LXN0 X2Zvcg== IHBhcnRz IGRlY2lzaW9u b2Jz b3Vi bWl0dGVk ICQoJyM= IHNhdw== IGFwcHJvYWNo SUNF IHNheWluZw== IGFueW9uZQ== bWV0YQ== U0Q= IHNvbmc= ZGlzcGxheQ== T3Blcg== b3V0ZXM= IGNoYW5uZWw= IGNoYW5nZWQ= w6o= IGZpbmFsbHk= X251bWJlcg== UGxlYXNl 4KQ= b3Jpbmc= LXJl IGtpbGw= IGRydWc= d2luZG93 IGNvbnZlcnQ= b21icmU= IHdheXM= SGVscGVy IEZpcnN0 KF9f dXJpdHk= IFdpbmRvd3M= ZWVz IG1hdA== cmFwcGVy IHBsdXM= YW5nZXM= Il0u YXpvbg== L3Q= bGF0 YXN0ZQ== IHByb2ZpbGU= IHJlYWR5 I2lmbmRlZg== cm90ZQ== IHNlbnNl R2VuZXI= IENvbmZpZw== b215 IEp1bmU= IGxhdGVzdA== IHNhZg== IHJlZ2lvbg== IGRlZXA= d2l0Y2g= IFBhcms= fWA= IEZyb20= SUk= IGN2 IHJlYWNo IGNvdW50ZXI= IFdvcms= IFVSTA== IFVwZGF0ZQ== JywNCg== IGltbWVkaQ== Y2xvc2U= YWRvcw== ZmVycmVk IHdlZWtz dXJn IGRhbWFnZQ== IGxvc3Q= YW5p X2xv IGhpbXNlbGY= IGRvZw== KV0K 778= cGly dHQ= IHBhcGVy IHRoZW1z c2Vjb25k IHN0YWZm IElucHV0 Iis= IEZhY2Vib29r IGFsbG9j IHNjaGVk QUNF IHRoZW1zZWx2ZXM= IENvbXBvbmVudA== IGRyaXZlcg== amE= KHBhdGg= IGNhdGVnb3J5 YWxscw== cHU= bGx1bWluYXRl IEFjdGlvbg== LmJ1dHRvbg== IEdM aXN0aWNz IG9pbA== IHN0b2Nr Pic= IGRlYWQ= VkFM UVVF KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IGNoYXJn UmV0dXJu IGZ1bA== ZG9t IHJ1bGVz IG1vZGlmeQ== IGV2YWw= aGFt YXRlbWVudA== XDw= dWxh PUZhbHNl UkE= IGNvbnRhaW5z NzQ= IHN0YWNr bWFy IHt9Cg== IHVuZGVmaW5lZA== QXNz IENoaW5h dmV5 Kgo= IHBsYXlpbmc= KS8= YWN0b3I= IGJvdHRvbQ== bGllcg== IE51bWJlcg== IGNvdXBsZQ== REM= IFNP Z29y LnNldFRleHQ= c3VjY2Vzcw== Y29tbWFuZA== RmlsdGVy IE91cg== X2l0ZW0= IGN0eA== IHJvYWQ= VmVyc2lvbg== Y2FzZQ== dXJ0 YXZpb3I= eWNo c2VtYmx5 IFByb2R1Y3Q= IGhlbGQ= YWZl IGluY2x1ZGVz PHF1b3Rl IGF2b2lk IEZpbg== IE1vZA== IHRhYg== YW5v w7E= aXBwaW5n LWU= IGluc2VydA== dGFyZ2V0 Y2hhbg== Lk1vZGVs SU1F XAo= IG1hY2hpbmU= YXZ5 IE5P IEludGVy IG9wZXJhdGlvbg== bW9kYWw= VGFn XTo= IHByb2R1Y3Rpb24= IGFyZWFz IHJlbg== X2Zyb20= bmJzcA== IG9wZXJhdG9y bWVu YXBwZWQ= X3Blcg== emVu KCIu LnNhdmU= PSJ7ew== IHRvcg== KHJlc3BvbnNl IGNhbmRpZA== IGNvbnY= YWlsZWQ= IExpYg== Y29tcA== dXJh 77+9 IEhlcmU= IGFyZ3VtZW50 aG9vZA== IGVzdGFibGlzaA== b2dyYXBoeQ== IG9uQ2xpY2s= YW1iZGE= IHNjaA== IG1vdmll IHNlYw== IGFjdGl2aXR5 2Kc= IHNxbA== X2FsbA== aW5jaXA= IHByb3ZpZGVz IHN5cw== YWNrZXQ= IHdhc24= IHVzZXM= IEZ1bmN0aW9u Lmdvb2dsZQ== IFJlc3VsdA== ODQ= VmlzaWJsZQ== YWdtYQ== ZWxjb21l IFN5 IENlbnQ= QUxTRQ== YWNpw7Nu RVhU IGxpY2Vuc2U= IExvbmc= IGFjY29t IGFiaWxpdHk= LmhlaWdodA== QWN0aXZl b2xvZ2ljYWw= b2x5 KSks LlNl IHBhcmFtZXRlcg== cHJpdGU= QUJJTElUWQ== LnNlcnZpY2U= IEdyb3Vw X3F1ZXJ5 IEl0ZW0= aW5pbmc= IGp1ZA== aW1z Zml4 aW5kZXI= YWdyYW0= IGZ1bmN0aW9ucw== IGV4cGVyaQ== IEVt IHJvdA== IHBlbg== LmJ0bg== IEFT I2lmZGVm IGNob2ljZQ== IFBhZ2U= X1BSTw== UVU= 5Y8= YW50aXR5 wq0= d29yZHM= IHJlYWRvbmx5 IGZsZXg= cHJvdGVjdGVk IEFueQ== IGNoYXJhY3RlcnM= ZW5jZWQ= IEp1bHk= aWxlcg== Q2FyZA== dXJhbmNl IHJldg== LmV2ZW50 YWx5 MTMw IHdvbmRlcg== IFBvcnQ= IGxlZ2Fs cm9sZQ== IHRlbg== IGdvZXM= TVA= d2hpdGU= KToNCg== KSkNCg== IHJlZmVyZW5jZQ== IG1pcw== IFByb2plY3Q= aWNrcw== PiY= Q09O IHJlcGw= IHJlZ3VsYXI= U3RvcmFnZQ== cmFtZXdvcms= IGdvYWw= IHRvdWNo LndpZGdldA== IGJ1aWx0 ZGVz UGFydA== KHJl IHdvcnRo aGli Z2FtZQ== OTE= MTky INCy YWNpb24= IFdoaXRl KHR5cGU= KGA= ODE= IG5hdHVyYWw= IGluag== IGNhbGN1bA== IEFwcmls Lkxpc3Q= IGFzc29jaWF0ZWQ= CVN5c3RlbQ== fn4= PVs= IHN0b3JhZ2U= IGJ5dGVz IHRyYXZlbA== IHNvdQ== IHBhc3NlZA== IT0= YXNjcmlwdA== Lm9wZW4= IGdyaWQ= IGJ1cw== IHJlY29nbg== QWI= IGhvbg== IENlbnRlcg== IHByZWM= YnVpbGQ= NzM= SFRNTA== IFNhbg== IGNvdW50cmllcw== YWxlZA== dG9rZW4= a3Q= IHF1YWw= TGFzdA== YWRvdw== IG1hbnVmYWN0 aWRhZA== amFuZ28= TmV4dA== eGY= LmE= IHBvcm5v IFBN ZXJ2ZQ== aXRpbmc= X3Ro Y2k= PU5vbmU= Z3M= IGxvZ2lu YXRpdmVz J10pOwo= xIU= IGlsbA== SUE= Y2hpbGRyZW4= RE8= IGxldmVscw== IHt7 IGxvb2tz ICIj VG9TdHJpbmc= IG5lY2Vzc2FyeQ== ICAgCg== Y2VsbA== RW50cnk= ICcj IGV4dHJlbQ== U2VsZWN0b3I= IHBsYWNlaG9sZGVy TG9hZA== IHJlbGVhc2Vk T1JF RW51bWVy IFRW U0VU aW5x UHJlc3M= IERlcGFydG1lbnQ= IHByb3BlcnRpZXM= IHJlc3BvbmQ= U2VhcmNo YWVs IHJlcXU= IEJvb2s= Lwo= KHN0 IGZpbmFuY2lhbA== aWNrZXQ= X2lucHV0 IHRocmVhdA== KGlu U3RyaXA= 7J0= w6fDo28= NzE= IGV2aWRlbmNl KSk7 IEJybw== IFtdOwo= IG91 YnVm U2NyaXB0 ZGF0 IHJ1bGU= I2ltcG9ydA== PSIv U2VyaWFs IHN0YXJ0aW5n W2luZGV4 YWU= IGNvbnRyaWI= c2Vzc2lvbg== X25ldw== dXRhYmxl b2Jlcg== ICIuLw== IGxvZ2dlcg== IHJlY2VudGx5 IHJldHVybmVk DQ0K KSkpCg== aXRpb25z IHNlZWs= IGNvbW11bmlj ICIu IHVzZXJuYW1l RUNU RFM= IG90aGVyd2lzZQ== IEdlcm1hbg== LmF3 QWRhcHRlcg== aXhlbA== IHN5c3RlbXM= IGRyb3A= ODM= IHN0cnVjdHVyZQ== ICQoIiM= ZW5jaWVz YW5uaW5n IExpbms= IFJlc3BvbnNl IHN0cmk= xbw= IERC 5pc= YW5kcm9pZA== c3VibWl0 b3Rpb24= OTI= KEA= LnRlc3Q= ODI= CgoKCgoKCgo= XTsNCg== IGRpcmVjdGx5 ICIl cmlz ZWx0YQ== QUlM KXsNCg== bWluZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICA= KGs= Ym9u YXNpYw== cGl0ZQ== X19f TWF4 IGVycm9ycw== IFdoaWxl IGFyZ3VtZW50cw== IGVuc3VyZQ== UmlnaHQ= LWJhc2Vk V2Vi IC09 IGludHJvZHU= IEluc3Q= IFdhc2g= b3JkaW4= am9pbg== RGF0YWJhc2U= IGdyYWQ= IHVzdWFsbHk= SVRF UHJvcHM= Pz4K IEdv QE92ZXJyaWRl UkVG IGlw IEF1c3RyYWw= IGlzdA== Vmlld0J5SWQ= IHNlcmlvdXM= IGN1c3RvbWVy LnByb3RvdHlwZQ== b2Rv Y29y IGRvb3I= IFdJVEhPVVQ= IHBsYW50 IGJlZ2Fu IGRpc3RhbmNl KCkpLg== IGNoYW5jZQ== IG9yZA== Y2FtZQ== cHJhZ21h IHByb3RlY3Q= cmFnbWVudA== IE5vZGU= ZW5pbmc= 0Yc= IHJvdXRl IFNjaG9vbA== aGk= IG5laWdoYg== QWZ0ZXI= bGljaXQ= IGNvbnRy IHByaW1hcnk= QUE= LldyaXRlTGluZQ== dXRpbHM= IGJp UmVk LkxpbnE= Lm9iamVjdA== IGxlYWRlcnM= dW5pdGllcw== IGd1bg== b250aA== IERldg== RklMRQ== IGNvbW1lbnRz X2xlbg== YXJyb3c= YW1vdW50 UmFuZ2U= c2VydA== R3JpZFZpZXc= IHVwZGF0ZWQ= IE1v IGluZm9ybQ== b2NpZXR5 YWxh QWNjZXNz IGhhYg== IGNyZWF0 X2FyZw== IEphbnVhcnk= IERheQ== IikNCg== dXBsZQ== ZG9jdW1lbnQ= Z29yaXRo bWVudQ== IE92ZXI= YmI= LnRpdGxl X291dA== IGxlZA== dXJp ID8+PC8= Z2w= IGJhbms= YXltZW50 CXByaW50Zg== TUQ= IHNhbXBsZQ== IGhhbmRz IFZlcnNpb24= dWFyaW8= IG9mZmVycw== aXR5RW5naW5l IHNoYXBl IHNsZWVw X3BvaW50 U2V0dGluZ3M= IGFjaGll IHNvbGQ= b3Rh LmJpbmQ= QW0= IHNhZmU= U3RvcmU= IHNoYXJlZA== IHByaXY= X1ZBTA== IHNlbnM= KXs= IHJlbWVtYmVy c2hhcmVk ZWxlbWVudA== IHNob290 VmVydA== Y291dA== IGVudg== X2xhYmVs ID4K cnVu IHNjZW5l KGFycmF5 ZGV2aWNl X3RpdGxl YWdvbg== XQ0K YWJ5 IGJlY2FtZQ== Ym9vbGVhbg== IHBhcms= IENvZGU= dXBsb2Fk cmlkYXk= IFNlcHRlbWJlcg== RmU= IHNlbg== Y2luZw== Rkw= Q29s dXRz X3BhZ2U= aW5u IGltcGxpZWQ= YWxpbmc= IHlvdXJzZWxm LkNvdW50 Y29uZg== IGF1ZA== X2luaXQ= Lik= IHdyb3Rl MDAz Tkc= LkVycm9y 5Ls= LmZvcg== IGVxdWFs IFJlcXVlc3Q= IHNlcmlhbA== IGFsbG93cw== WFg= IG1pZGRsZQ== Y2hvcg== MTk1 OTQ= w7g= ZXJ2YWw= LkNvbHVtbg== cmVhZGluZw== IGVzY29ydA== IEF1Z3VzdA== IHF1aWNrbHk= IHdlYXA= IENH cm9wcmk= aG8= IGNvcA== KHN0cnVjdA== IEJpZw== IHZz IGZyZXF1 LlZhbHVl IGFjdGlvbnM= IHByb3Blcg== IGlubg== IG9iamVjdHM= IG1hdHJpeA== YXZhc2NyaXB0 IG9uZXM= Lmdyb3Vw IGdyZWVu IHBhaW50 b29scw== eWNs ZW5jb2Rl b2x0 Y29tbWVudA== LmFwaQ== RGly IHVuZQ== aXpvbnQ= LnBvc2l0aW9u IGRlc2lnbmVk X3ZhbA== YXZp aXJpbmc= dGFi IGxheWVy IHZpZXdz IHJldmU= cmFlbA== IE9O cmljcw== MTYw bnA= IGNvcmU= KCkpOw0K TWFpbg== IGV4cGVydA== CQkNCg== X2Vu IC8+ dXR0ZXI= SUFM YWlscw== IEtpbmc= Ki8KCg== IE1ldA== X2VuZA== YWRkcg== b3Jh IGly TWlu IHN1cnBy IHJlcGU= IGRpcmVjdG9yeQ== UFVU LVM= IGVsZWN0aW9u aGFwcw== LnByZQ== Y20= VmFsdWVz ICIK Y29sdW1u aXZpbA== TG9naW4= aW51ZQ== OTM= IGJlYXV0aWZ1bA== IHNlY3JldA== KGV2ZW50 IGNoYXQ= dW1z IG9yaWdpbg== IGVmZmVjdHM= IG1hbmFnZW1lbnQ= aWxsYQ== dGs= IHNldHRpbmc= IENvdXI= IG1hc3NhZ2U= CWVuZA== IGhhcHB5 IGZpbmlzaA== IGNhbWVyYQ== IFZlcg== IERlbW9jcg== IEhlcg== KFE= Y29ucw== aXRh ICcu e30= CUM= IHN0dWZm MTk0 IDoK IEFS VGFzaw== aGlkZGVu ZXJvcw== SUdO YXRpbw== IEhlYWx0aA== b2x1dGU= RW50ZXI= Jz4= IFR3aXR0ZXI= IENvdW50eQ== c2NyaWJl ID0+Cg== IGh5 Zml0 IG1pbGl0YXJ5 IHNhbGU= cmVxdWlyZWQ= bm9u Ym9vdHN0cmFw aG9sZA== cmlt LW9sZA== IERvd24= IG1lbnRpb24= Y29udGFjdA== X2dyb3Vw b2RheQ== IHRvd24= IHNvbHV0aW9u dWF0ZQ== ZWxsaW5n XS0+ b3Rlcw== ZW50YWw= b21lbg== b3NwaXRhbA== IFN1cA== X0VO IHNsb3c= U0VTU0lPTg== IGJsdWU= YWdv IGxpdmVz IF4= LnVu aW5zdA== ZW5nZQ== IGN1c3RvbWVycw== IGNhc3Q= dWRnZXQ= 77yB aWNlbnM= IGRldGVybWlu U2VsZWN0ZWQ= X3Bs dWV1ZQ== IGRhcms= Ly8KCg== c2k= dGhlcm4= IEphcGFu L3c= UFU= IEVhc3Q= b3ZpZQ== IHBhY2thZ2U= IG5vcg== IGFwaQ== Ym90 Il07Cg== X3Bvc3Q= dWxhdGU= IGNsdWI= JykpOwo= IGxvb3A= UElP aW9uZQ== c2hvdA== SW5pdGlhbA== IHBsYXllZA== cmVnaXN0ZXI= cm91Z2h0 X21heA== YWNlbWVudA== bWF0Y2g= cmFwaGljcw== QVNU IGV4aXN0aW5n IGNvbXBsZXg= REE= LkNo LmNvbW1vbg== bW8= ICcuLi8uLi8= aXRv IGFuYWx5c2lz IGRlbGl2ZXI= ICAgICAgICAgICAgICAgIAo= aWR4 w6A= b25nbw== IEVuZ2xpc2g= PCEtLQ== IGNvbXB1dGVy RU5TRQ== IHBhcw== IHJhaXM= SGFzaA== IG1vYmlsZQ== IG93bmVy RklH ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhlcw== IGF0dHI= d2Q= LnRpbWU= YXdu IHRyZWF0bWVudA== IEFj LlZpZXc= aW1wbA== bW9yZQ== cGFzcw== IGhh LmZyb20= IGxlYWRpbmc= RkZGRg== KGVycm9y LnVp YXRhcg== YWRlcnM= ZGF0ZXM= IHp1 IGZsb3c= VGFyZ2V0 IGludm9sdmVk IGlv cGFyc2U= JF8= aGVzdA== LmludA== LWl0ZW0= YXN5 U3A= IHNoaWZ0 TlQ= IHRm X1RS LndlYg== Q1M= IH0p IGV5ZXM= MTI1 MTA1 X3o= Jyk7DQo= aWZvcm4= IHtA IG5pY2U= Lmxpc3Q= ICAgIA0K IGZsb29y IHJlZGlyZWN0 IFVL KFsn IHdpc2g= IGNhcHQ= bGVnYWw= IElP IHN0YWdl LlN0cmluZw== IEFmcg== aWdlbg== IFNI RGVsZXRl ZWxscw== IHNvbGlk IG1lZXRpbmc= IHdvcmtlZA== IGVkaXRvcg== aW55 0Lw= X3JlYWQ= Lklk ZWZm T2Zmc2V0 Y2hh VVNFUg== CQkgICA= aXBwZWQ= IGRpY3Q= IFJ1bg== LmhwcA== IGFuZw== eG1s aW1wbGU= IG1lZGljYWw= X3Rva2Vu Y29ubmVjdA== IGhvdXI= IGNvbnRyb2xsZXI= X21lc3NhZ2U= VUlE R3I= YW5kZWQ= X0NI IGJvb2tz IHNwZWFr YW1pbmc= IG1vdW50 UmVjb3Jk CXN0cnVjdA== LldlYg== b25kb24= IC8vCg== IGZlbHQ= LkF1dG8= aWRnZQ== X3Bvcw== UFI= IG1vZGVybg== Q29sbGVjdGlvbg== X21zZw== Q0Q= IExv IHNlY29uZHM= aWJseQ== LmVxdWFscw== IGludGVybmF0aW9uYWw= I3ByYWdtYQ== b290aA== V3JpdGVy aWF0ZQ== IGNlbGU= IEJpdA== aXZv aXZlcnk= cmQ= SEVDSw== IGNhY2hl LmNvdW50 IHJvbGw= LlJlYWQ= MTA4 UkVE IHNldHVw aXpvbnRhbA== bW9kZWxz YXJndg== IGNvbnNpZGVyZWQ= PSIuLi8= c2V0dGluZ3M= IFJlbA== IGdyb3d0aA== IG1peA== IFdhc2hpbmd0b24= IHBsdA== IElN 4bo= IHR1cm5lZA== IERhdGVUaW1l IFdlZA== KHVybA== ICIt IGxldHRlcg== QXN5bmM= ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IE9jdG9iZXI= X2xpbmU= IGF0dGVudGlvbg== IGNvbGxlY3Q= IEhhc2g= IGltYWc= VHJlZQ== IHNpdHVhdGlvbg== ZXR0ZQ== X25v SVZF IHZvbg== LnRhcmdldA== IGtub3dsZWRnZQ== IGRyaXZl LnBvc3Q= IGJsb29k IGNpdA== cHJpbWFyeQ== IGNvbmZpZ3VyYXRpb24= dGVl IHBob3Rv aXNvZGU= VHJhY2U= IGdhdmU= IHNob3Q= IEFpcg== IG1vdGhlcg== cHJpY2U= IG1vcm5pbmc= KSl7Cg== LXg= IHRyYWRl IGRlc2M= ICYmCg== IHBhcmVudHM= QXBp 5Yg= dGVk d2Vy IOY= IHN5 IEtl UGFyc2Vy 5YU= YW5jeQ== IHBpZWNl aWZvcm5pYQ== dG9TdHJpbmc= cmFu aWRpbmc= UFRJT04= Y29tZXM= L2xpYw== LmNsaWVudA== RWw= TG9uZw== IHByb2Zlc3Npb25hbA== cnVwdA== dmE= IGNvbXBsZXRlbHk= IHByYWN0aWNl MDAy IHNlbGVjdGlvbg== UmVt aW5p IGNhbQ== UkVF IHNpdGVz cGE= QVRVUw== 0YHRgg== YXJyYW50 Kig= X0tFWQ== IEJ1dHRvbg== IEZyaWRheQ== c2VxdQ== IHJlYWRlcg== IG1lc3NhZ2Vz 6K8= IGJ1Zg== S2U= IG5vdg== SFA= TXNn YWxpZ24= YXJpbHk= ICcs X3dpdGg= IGRhcw== IGhlYXJk YXRvbWlj cmlhbA== KVs= IGRpc2U= QGVuZA== IGdvbGQ= IGZhaXI= IHNhbGVz LkJ1dHRvbg== c3RyaWN0 c2F2ZQ== IG1lYXN1cmU= ICIr ZWNhdXNl Vmlld0NvbnRyb2xsZXI= IFRhYmxl LnBhcmFt IGRlY2lkZWQ= KCgo SU5GTw== IG9wcG9ydHVuaXR5 VGU= SUNFTlNF Y2NvcmRpbmc= a2k= IFVO IGNvbnRhaW4= IG1hbmFnZXI= IHBhaW4= IEZpcmU= cm9tZQ== IHBsYW5z Rm91bmQ= bGF5 IERlY2VtYmVy IGluZmx1 w7o= cmVuY2g= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXppbmc= YnJpZWY= Y2FsbA== d29vZA== IGxvYWRlZA== IGdyYW5k L2Y= aW1w X1U= MTI3 U1RS 4oCi IGNyZWRpdA== LkNvbG9y b3JnZQ== UVVFU1Q= IGRpZmZlcmVuY2U= IFBD d2FyZ3M= IHB1Yg== dW5kYXk= IGZyYQ== Lm1heA== IHRyaWVk YW5uZWxz c2VuZA== IHJlcG9ydHM= IGFkdWx0 5Lo= IGNvbnNpc3Q= IFN0cmVldA== IFByb2dyYW0= U1FM TWF0cml4 b3VuY2ls LUE= CXc= IHdob3Nl IHJlbGln IFNleA== IGdpdmVz bm9uZQ== Lm1lc3NhZ2U= KEc= LmF3dA== LXJpZ2h0 IE5vdmVtYmVy ZWxsaWc= MzYw dXRpdmU= xIM= b3Zlcm4= IGVhc2lseQ== IGlkZWFz MTA0 INC9 L2Nzcw== bHlpbmc= ZWxsZQ== Q2Fu X2NvbG9y 0L7Qsg== IHBhaXI= bmd0aA== IHNwbGl0 MTQw ZHJvcA== YXJ0eQ== b25h IGNhcGl0YWw= IGhlYXI= IGV4aXN0cw== CWxvZw== ZW1v UnVu b2k= IHBhcnNlcg== IE1ldGhvZA== IGVkdWNhdGlvbg== W2s= IGxpYnJhcnk= PiI7Cg== X1VO CXN0ZA== b2RlZA== IGNhbGxz aGVyZQ== UmVs IGJyYW5k YmFja2dyb3VuZA== Z2E= X2FkZHJlc3M= X3BhcmFtcw== Q2F0ZWdvcnk= MTAz IEluZGlh X2V2ZW50 IGluZw== UmVuZGVy LmNs dW1weQ== IHBldA== RkM= IEFudA== RXh0 IGNoYXJnZQ== ZW5lZA== Z3JhZA== RU8= IGRlcGVuZA== IC4KCg== ZnJhbWU= IGRm IGh1Z2U= IFBBUlQ= ZWRz Ozs= IEFN IGJhc2lj IExldA== bGljaA== IGFybQ== IHN0YXI= IGZlZGVyYWw= V29yaw== IGNhcnJ5 IElzcmFlbA== KG9iag== PXt7 IHNhdmVk IHN5bg== IGNvbnN0YW50 VkVOVA== IHBvc2l0aXZl IGNvbmR1Y3Q= IHNraW4= IGVhcmxpZXI= IGxheW91dA== IElQ T1VS IHRpbQ== c3R5bGVzaGVldA== X2Ns IENhcmQ= Kyspewo= IHRlbXBlcg== IERhdmlk CXRyeQ== LmRhcnQ= IHdhbnRz IHBpY3R1cmU= IHZpZGVvcw== IENvbW0= aXNpb25z X01BWA== TWFwcGluZw== LWNvbnRlbnQ= IEVhcg== LWRl IHByZW0= YnJ1YXJ5 IGNvbXBvbmVudHM= IHRocm91Z2hvdXQ= IHB1bGw= IHBhZ2Vz ZW50ZQ== cmVzcG9uZA== IGdhcw== Y3JpcHRvcg== IGVkZ2U= IGJvdW5k QUNU KioqKioq IGNyZWF0aW5n IENI IG51bGxwdHI= QnI= Kyc= LmNv Pjo6 IGxlYXJuaW5n Lkxlbmd0aA== X1NI IHBhdGllbnRz QUlO IGtpZHM= IGNvbWZvcnQ= IHNob3du dWdpbnM= IEJhY2s= ZWxsYQ== X0NM IGxhdA== IGRpc3BhdGNo IGNsYXNzZXM= LmF0 LmJlZ2lu IHN1Y2Nlc3NmdWw= YmFu IG9idGFpbg== IFNs IGxhY2s= aXRlcmF0b3I= VGhyZWFk KHNpemU= IG5vbmU= Lmhhcw== X1g= c29ydA== bmFw cGV0 Ymlu NzAw IENhbmFkYQ== VGhleQ== IGRhbnM= IE1hdA== PHRk IGhhaXI= ICcnLAo= IGN1 IGxhd3M= bGV0ZWQ= cGVk IHBvdw== IGtuZXc= X0NPTQ== Xyw= IE1hZw== aWRlbnRz KHJlcQ== ICks LWNlbnRlcg== MTkw IHdpZGU= IEF1dGhvcg== c3RhbnRz IGpvYnM= IG1hdGg= ZXRpbWVz Qm9vbGVhbg== IHNjb3Bl X2lz IG1lYXM= IGtleXM= ZWxheQ== IGV4YWN0bHk= Jz0+Jw== IFBhdWw= bWFz CXByaW50 KGxlbg== ZmQ= ICk7 LkV2ZW50 cWxp aXJpdA== aWVsZHM= b21hbg== IFRvcA== IHZvdGU= IG1hc2s= IHRoZW1l LQo= IHByb3Bz IGZpbmU= IHdyaXRlcg== X29mZnNldA== Y2Fy IGFsdGVybg== IGNvcHlyaWdodA== IGRlc3Ryb3k= cHBlcg== IGdlbmVyYXRl cHBlZA== 4oCZZA== ICAgICAgCg== bWFrZQ== IFNob3c= IGJyb3dzZXI= IGZhdm9yaXRl IGNhcmVlcg== IGhhcHBlbmVk KGNoYXI= IHJlY29tbWVuZA== IGxpdGVy LmZpbHRlcg== Z3JhZGU= IMKj UGhvbmU= b21z IG5hbWVk LWxhYmVs aXBv IE90aGVy IHBhbmVs IHJvY2s= U2NhbGU= CWFzc2VydA== 0LQ= IHRydXN0 ZnJvbnQ= IGRlbW9u QXI= TmV0 IGVjb25vbWlj Zm9vdGVy IHJhY2U= KG5vZGU= IE9wdGlvbg== c3BsaXQ= IHBoeXNpY2Fs aWZlc3Q= IHJlbW92ZWQ= Lmh0dHA= KSksCg== IGxvb2tlZA== Jzs= ZGluZw== Z2VzdA== YXR1cmRheQ== L2xpY2Vuc2Vz UHJpY2U= IGRybw== IHRvd2FyZHM= IHVucw== IENM CXN0YXRpYw== IHJvd3M= IGRlZmluZQ== LnJlcGxhY2U= IGZhdGhlcg== IERlc2lnbg== YXNzaWdu bXV0 RGV2aWNl RGlk JykpCg== b21ldHJ5 YXlsb2Fk IGhpc3Rvcg== IFBhcmFt IEJvb2xlYW4= IG5hdHVyZQ== IGpz IG5hdGlvbg== aWg= IGRpc2NvdmVy c2Vt SGFuZGxl CXI= IFRlY2hu IHdhbGw= eyQ= QHByb3BlcnR5 ICIuLi8= IGV4YW0= LmRyYXc= b3BwaW5n IG5lYXJseQ== IGNvb2w= IGluZGVwZW5k UkVT IGhhbmRsZXI= IE1vbmRheQ== IHN1bg== U3R5bGVz b3VzbHk= IAk= dmVzdA== RGlzcGxheQ== KHk= YXRpY2FsbHk= IHByZWRpY3Q= eWluZw== IHNvbWV0aW1lcw== Il0K IGRyaW5r IGJ1bA== aWZpY2F0aW9ucw== Lmluc2VydA== LnJlZw== IHRlc3Rz QWxpZ25tZW50 IGFsbGVn IGF0dHJpYnV0ZQ== IE5vdGU= IG15c2VsZg== YXJ0cw== Tm93 IGludGVyZXN0aW5n bGllbnRz IHBvcHVsYXRpb24= IENhbGlmb3JuaWE= Ikk= 5bk= IGdyZWF0ZXI= dWVzZGF5 IHRob3Vz IGNvc3Rz IGxhdW5jaA== XEh0dHA= a2Vy YmFuZA== IFBsYXk= IGJhbmQ= LnNoYXBl ZXNvbWU= YXJ0aWNsZQ== LnJm IHdlcg== w6Fz ZW1iZXJz dXNy QkE= aWNhbg== ZXR0 dmFsaWRhdGU= dWx0aQ== IGltbWVkaWF0ZWx5 emVy IGZpZ3VyZQ== b2Vz ZWxsZXI= aXJjbGU= IFNpZ24= LmRi IHJhbms= Qnl0ZXM= IHByb2plY3Rz X3JlYw== VUxBUg== QVBJ IExpbmU= UG9ydA== IHBvbGw= IGdpdmluZw== aWRlbmNl LS0K IHBsb3Q= aWNpYWw= IHdhcnJhbnQ= SVRJT04= IERvdWJsZQ== IGJpbGxpb24= Z29yaXRobQ== IGVxdWlwbWVudA== REFURQ== IEAi RUU= IHBsZQ== aWF0aW9u IGhlYWRlcnM= IHByb2NlZA== LkNvbXBvbmVudE1vZGVs IE9iYW1h IHBh IEJlc3Q= aW1hdGVseQ== LmdldFN0cmluZw== Llw= bXBsb3k= IHJhdw== X2Jsb2Nr dW5kcmVk In0sCg== MTEy Lkdyb3VwTGF5b3V0 IGJyb3VnaHQ= TlNTdHJpbmc= dGhyb3c= Y3JlYXRlZA== Lk5ldw== X3ZpZXc= Q1A= ZXBz T3A= IGdyYXRpcw== ICci IGludGVydmlldw== IiIiCg== IHBhcnRpYWw= IGFyaWE= YmluZw== QXV0aG9y Qm9vaw== IFBhdA== dW1hbg== VXNlcnM= cGx1cw== MTkz IERpcmVjdA== dmVudWU= YWxwaGE= VUNDRVNT IENhbGw= ICk7DQo= aW1hdGVk IHJlbWFpbg== IGFudGk= IExvbmRvbg== IHNhZmV0eQ== UE9TRQ== b2xlcw== Y29udHJvbGxlcg== Qnl0ZQ== IENvdXJ0 IFBoaWw= IEFzc29jaQ== ZW5h 5ZA= X1NUUg== Y29pbg== cmVzaG9sZA== IGJhdGNo X0NsaWNr ZW50aWNhdGlvbg== Pic7Cg== ZW50eQ== IGJlZ2lubmluZw== IHplcm8= IENvbnZlcnQ= IHRlcnI= IHBhaWQ= IGluY3JlYXNlZA== Y2F0Y2g= LXNpemU= MTE1 YWN0aXZpdHk= ZXF1YWxz IHF1ZXVl ICIn IEludGVybmF0aW9uYWw= IGbDvHI= dXJzZGF5 IHNjaWVudA== YWxsb3c= YXhpcw== IGFwcHJvcHJp ZWRnZQ== IGlkeA== U3VjY2Vzcw== ZW50aWZpZXI= Olw= eGlz IG1heGltdW0= YXJrcw== IGJpcnRo KGluZGV4 IG1heWJl LnB5 ZmlsZXM= IGxpbWl0ZWQ= X2NoZWNr bG9vaw== cGxpZXM= IG1vdmVtZW50 J10u IGJyb2Fk IEJF IFVuaXR5RW5naW5l LmNwcA== IEV2ZXJ5 QWRtaW4= IGZhbnM= cGFyZWQ= CiAgICAK IGZvcmVpZ24= IHBhbg== IHRvdXI= IE9yZGVy IG1vdmluZw== IGF1Zg== Q2FsbA== Y2I= xZ8= dmVudG9yeQ== IFNxbA== IGZ1bGx5 Q2xpY2tMaXN0ZW5lcg== V09SRA== IGFubm91bmNlZA== KQ0KDQo= IGFncmVlZA== cmll IGVhcm4= X2xpbms= LmFycmF5 KHRleHQ= IG1hdGVyaWFscw== LHA= ZmZmZg== dmc= IMKp IHVubGVzcw== YWpheA== TE9H IHNleHVhbA== IFwi LXRpbWU= IGNvYWNo IHN1cHBvcnRlZA== IHBob3Rvcw== aWZvcm0= LkNyZWF0ZQ== KV0= cmllcg== IGRpYWxvZw== YXZlcg== aWdl KSs= X2lkeA== Ols= X21pbg== IENvbmc= IHByZXNzdXJl IHRlYW1z U2lnbg== YmVnaW4= cmlhbg== TkVTUw== TFM= IGltcHJvdmU= IFN1bmRheQ== IGRlZmluaXRpb24= aWdlcg== cm9sbGVycw== IHRoaW5raW5n VGVtcGxhdGU= LUY= IGVtZXJn cGxhdGVz IFVTQQ== LnNldFN0YXRl IEFsc28= cmV2 IGVuYWJsZQ== IENP UEVDVA== IGNvbmNlcHQ= KS0= IOKAog== IHNldHM= IG1lYW5pbmc= ZW1vbg== IENvbnM= Y21w ZWRlcg== YW5uZWQ= aWNlbnNlZA== IFN1cGVy IGRhaWx5 IG11bHRp X3U= IGNoYWxsZW5n X21vZGU= IFByb21pc2U= IHN0cmljdA== am8= aW50b24= KGxpc3Q= T25seQ== Pns= IHZlaGljbGU= 7ZU= IFBsYXllcg== MTA2 IERlbA== IHBvb2w= LnVybA== bmVzZGF5 KCk7DQoNCg== OTAw ICIpOwo= TG9jYWw= LiIpOwo= IG9yZ2FuaXphdGlvbg== cmVuZGVy IEFwcGxpY2F0aW9u IHN1bW1lcg== ZXhwZWN0ZWQ= TkE= IHJhcA== X29iag== IHN1cmZhY2U= IFBVUg== IH0sCgo= IHZhcmlhYmxlcw== KG1lc3NhZ2U= IG9waW4= LmJhY2s= 0LDQvQ== IHdvcmtlcnM= dm0= Q28= dWdodGVy IG1hc3Rlcg== ICIiLA== IHN0b3JpZXM= LlVzZXI= IGNlbGVicg== aW5lc2U= QlM= IENvbW1hbmQ= YXNoYm9hcmQ= IG9n a2c= LmltYWdl LnN0eWxl IHN0ZXBz IEJlbg== KGFyZ3M= NDA0 IFBlcnNvbg== LHk= IG9mZmljaWFscw== fAo= IHNraWxscw== dmM= IGJ1aWxkZXI= IGdhcg== QWNjb3VudA== IEF1dGg= 55Q= J10pCg== IEFU bm4= LkludA== U1NFUlQ= IGVmZmVjdGl2ZQ== TEVURQ== IHRvb2xz QVJE IGRpZ2l0YWw= MTkx RG91Ymxl IEZpbmQ= UkM= IGlubGluZQ== L3I= QVJBTQ== QVNL IGludGVudA== YWlnaHQ= X2FkZHI= IHJlcXVlc3Rz LmZpcnN0 IGRlYnVn IHNwZW50 KCkpKTsK xZs= IHByaW5jaXA= TG9nZ2Vy Y2x1ZGVz LnVzZQ== IHN1cnY= bWVkaWE= IEZlYnJ1YXJ5 IE1hYw== IG1pc3Npbmc= IHdpZmU= IHRhbGtpbmc= IE1ha2U= IGNhcnQ= IGxvY2F0ZWQ= RW5j LWE= Y2hyb24= IGNhcmRz IGd1eQ== IHBlcnM= IFllcw== YXRldmVy IEFuZw== b2xhcg== IEV2ZW4= IGFjY3Vy IFBvd2Vy IEdvbGQ= Y2xlYXI= UHJvY2Vzcw== IHJlY29yZHM= IGtpbGxlZA== LmNsZWFy IFdBUlJBTlRJRVM= IHB1cnBvc2U= cGFuZWw= SkVDVA== w61h IGV4ZXJj V1M= L0w= LmV4cG9ydHM= IF9fXw== IHNpbg== U2VydmxldA== IGTDqQ== LmRlbGV0ZQ== cm9rZQ== U2w= dWdo ZWFycw== IHBvaW50ZXI= IGhvcA== YWxsZXJ5 IG9icw== Y292ZXJ5 CWNoYXI= CQkJCQkJCQkJCQ== CWRlZg== b2NpdHk= aXRjaGVu dWxhdGlvbnM= IEZJVA== ICku c3RyYWludHM= dmVudGlvbg== IHJlcXVpcmVz IE9wZXI= TUU= T1VOVA== YWxsZXQ= IG5vcm0= SVJF ZXhhcw== IHByb2dyYW1z IHdlYWs= Jy4k dWluZw== CSAgICAgICA= IG1pbA== IGZpcm0= aW5pdGVseQ== X1ZBTFVF YXBzZQ== YXRpc2Y= IGRlbWFuZA== X21vZA== IGRlc2NyaWJlZA== IHBsYWNlcw== VklE IGFsb25l IGV4cG9ydA== IHZlYw== IE1heA== IGFjdGl2aXRpZXM= aWN0dXJlcw== Z2VuZXI= IG1h gqw= IGV4cHJlc3Npb24= Q2FsbGJhY2s= X2NvbnRlbnQ= IE1vc3Q= IHRlc3Rpbmc= RUM= Q0hBTlQ= IGFkanVzdA== LlRocmVhZGluZw== KGN0eA== IGFncmVl aWdoZXN0 IHVp IExhdw== Llk= Pjw/ IHBvZA== LWxn 4oCdCgo= IGRlc2NyaWJl IEV1cm9wZWFu LXNo IFBVUlBPU0U= T1JZ IGNvbnZlcnM= IElsbHVtaW5hdGU= IEF2 KGNo PyI= Y2hlbg== aW1h RG9jdW1lbnQ= IG9wZXJhdGlvbnM= d2lu CWZ1bmN0aW9u LkltYWdl IHNjZW4= L2g= IFND IGV4cGxv OiU= LyoqDQo= TkFNRQ== 5og= KHZhcg== IGRpcmVjdG9y T05H IHlpZWxk IGZlZXQ= IFNlYXJjaA== IEls IHJlc3RhdXI= ZHVj IGludGVnZXI= MTA3 ICcnOwo= IGhpZ2hseQ== Y2hlY2tlZA== IFBBUlRJQw== RVJDSEFOVA== 77yJ IG9wdGlt UXVldWU= IExJ aXRhdGlvbg== IHRyYW5zcG9ydA== aXNzaW9u ZmlsbA== dXNpb24= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CWJvb2w= LXRo dXB0 IGVzc2VudGlhbA== YW50ZWQ= IGJlbmVmaXRz CVM= JzsNCg== aWtp IGdpcmxz aWNlZA== YnVmZmVy XSs= IHNvY2tldA== IHByaWNlcw== IEZyZQ== IHNhdA== IHdvb2Q= TWVudUl0ZW0= QVJH IEFkbWlu T1dO ZGs= IHJlc2V0 IGZvcm1z INC4 5pY= IFR1ZXNkYXk= MTA5 IEluaXRpYWxpemVk X3RyYWlu b3Jhcnk= YXRlZ29y IGR0 VG90YWw= Y29uc3RydWN0 aWxpZXM= IGd1eXM= 0LXRgA== IGluc3RydWN0aW9u MDEw eWxlZA== IGludGVybmV0 ZXRhZGF0YQ== YWR5 ZmFjZXM= amVjdGlvbg== IEphY2s= IHJlY3Q= Wy0= IExlZw== IGRldmljZXM= T0M= ICoNCg== b3JhdGlvbg== ZXJ0YWlu IGd1YXJk b3N0cmVhbQ== IGVudW0= LmxheW91dA== ICI7Cg== dm9rZQ== IE9r SG9tZQ== KHRy RVRI IGRlbGF5 IHB1cmNoYXNl ZGM= IGFyZW4= X29uY2U= CQkJCQo= cm9y ZHJhdw== LnJ1bg== KG1vZGVs VGltZW91dA== bGlr IEFyZw== LmVu IGZpc2g= Y3B5 X2Zl RVJDSEFOVEFCSUxJVFk= KFg= X291dHB1dA== Pz8= IGpv YW5kYXJk IGRvbGw= ZXJyb3Jz X2Jhc2U= IFBBUlRJQ1VMQVI= IGxlYWRlcg== IGNvbXBhcg== IGRvdWI= IFZpcw== U3RhY2tUcmFjZQ== LUM= IFN0dWQ= c3RpdHV0ZQ== TW9yZQ== IERlc2NyaXB0aW9u V0FSRQ== YWRz INC6 YmluZA== PXNlbGY= ZW1wbG95 W24= LmFsbA== LUI= JiY= YWxt IGN1bHR1cmU= aG91c2U= IHN1ZmZlcg== ICcl IHN0cmFpZ2h0 IFN0YXI= dWRv IGRlZA== IENPTQ== IGNvbmZpcm0= IEdvb2Q= LnNj X19fX19fX19fX19fX19fXw== RFI= Q29uZmlndXJhdGlvbg== RGF0ZVRpbWU= IGFkdmVydA== IGNvdWxkbg== YXN5bmM= c3RhY2s= JykNCg== S2l0 IGhvdXM= IG1lY2hhbg== cmF0ZQ== MjA0 IGF1ZGlv CWNvdXQ= Y29yZXM= IHNwb3Q= IGluY3JlYXNpbmc= ICMj KSkp cG9pbnRz IGNvbXBhcmVk bGln IGJlaGF2aW9y IEJZ IEF0dA== Y3JhZnQ= aGVhZGVycw== ZXRl ZW5kcmVnaW9u IGRldGFpbA== VUxF IENvbW1vbg== CXByb3RlY3RlZA== c3Rvbg== IEZJVE5FU1M= IGZyZXNo Ij4KCg== LmV4YW1wbGU= YmVyZw== IG1vdmVk CWU= IFNhdHVyZGF5 IHBheWxvYWQ= xIc= KToKCg== IGJleQ== dXJlcg== PHNjcmlwdA== IHN5bWJvbA== IGFzc3Vt IHB1bA== RWZmZWN0 IGh1bmRyZWQ= VG9vbA== YWtlZA== Y29ubmVjdGlvbg== IHZvaWNl IHBk IHRyYW5zYWN0aW9u IGxpbmtz RXJy IEluZGlhbg== VEM= YXRhbG9n bmk= c2lnbg== PDwi amk= eWE= IGRlbW9uc3Ry dWxhdGVk LlN0 IGluc3RpdA== IGJvb3N0 IGNlbGxz b2xpYw== LlBybw== Ojwv RXZlbnRMaXN0ZW5lcg== aWZ5aW5n IERp b3Jyb3c= LmV4ZWN1dGU= IGNvbGxlZ2U= WW91cg== IGxhcmdlc3Q= LmRpcw== IHF1aQ== IGluZGl2aWR1YWxz X2J1ZmZlcg== IG5n U0E= IENvbnRyb2w= IHNpbmc= IHN1aXQ= ICAgIAk= U0c= IGp1bXA= IHNtYXJ0 b21h IEV4cA== ICct IGFzc2lzdA== IHN1Y2Nlc3NmdWxseQ== c3lz IENyZQ== X3JlZg== IFRodXJzZGF5 IGJ1cg== INC0 IGJleW9uZA== IG5vZGVz RGV0YWlscw== aW5jdA== IEphbWVz IGFmZmVjdA== ZXhjZXB0aW9u IHR5cGVvZg== KA0K LXNl IGZldGNo YCw= IGNydXNoZXI= fS4= IEJP U2hvdw== IHJhdGVz IGJvbg== LWljb24= IE1lZGlh UkVTUw== IFZhbGlk 0L7Quw== IGZ1Y2s= YWNrcw== IHN0dWRpZXM= TWU= IG93bmVycw== fWVsc2U= IGdyb3dpbmc= VmFyaWFibGU= IEJlbA== LnJhbmRvbQ== dmVtZW50 b255bQ== KEY= IEZBTFNF IHRvcmNo KHJvdw== aWdv c3RydWN0dXJl MTIx IGNlcnRhaW5seQ== RGVw IEdyZWVu cXVlc3Rpb24= IGFkZGluZw== IERldmVsb3A= X2RlZg== IG1hY2g= PSU= CQkg Y29uZHM= UHJvamVjdA== IHJlamVjdA== IM4= IHBvb3I= IGF3YXJl MTE0 IEJ1aWxk IEJyaXRpc2g= IE5F IG51bWVy cmVlcw== Y2xhaW0= IG1vY2s= IG9t IHNjcmU= T0xE LnBs ZWxlcg== IGNvcnJlc3BvbmQ= X0hF IGJpbmFyeQ== MTE2 X29yZGVy IFNRTA== IGFkdmFudA== IHByZXY= Lls= LmFzc2VydEVxdWFs cGxpZXI= YXJw IGNsb3NlZA== IGVuY291cg== IFFTdHJpbmc= YXVk IGRldmVsb3BlZA== IHBlcm1pc3Npb24= LmRlYnVn b3BlcmF0b3I= ICcK IHN5bQ== YXRpdmVseQ== w6ll LWNvbG9y IEdFVA== a3k= IGFsdGhvdWdo X3JlcXVlc3Q= X2VsZW1lbnQ= Li4uLi4uLi4uLi4uLi4uLg== X0RBVEE= IGFtYXppbmc= IHNi IERlZmF1bHQ= RXZlbnRz IGZhaWx1cmU= YWNsZQ== UHJvcGVydGllcw== IGRyZWFt IGRpc3Ry IGF1 IGdlbmVyYXRlZA== 5pU= IFRlYW0= VVNF IGluY29tZQ== IGV5ZQ== X25vdA== Il0s X2Zvcm0= U3VwcG9ydA== b3JkZXJz LlByaW50 dmlsbGU= IFdlZG5lc2RheQ== b2x2ZXI= IG9wcG9z aXNhdGlvbg== b2xh Q2xvc2U= PHA= X3dpZHRo SW52YWxpZA== eGI= IHN0cnVnZw== X2FjdGlvbg== IHR4dA== IFBhdGg= YWxhcg== IE1FUkNIQU5UQUJJTElUWQ== c2VydmljZQ== IE1pY2hhZWw= YWJsZVZpZXc= RGVidWc= b2tlcw== U2hl IGd1ZXNz IEphdmE= X1BBVEg= IHBhcnRpY3VsYXJseQ== IElJ IGRvbWFpbg== 5bm0 IHJlZHVjZQ== LWxlZnQ= cmVhbA== IGFwcGVhcnM= IGNvbW8= IFVuaXQ= IEdvdmVybg== YWxp YWxsZWw= IEpldw== X0k= IGNvcw== LmNvbG9y IEdsb2JhbA== IHRlbGU= YmVu X3RyYW5z IHJlYXNvbnM= IGVtYg== ZW5zaXR5 bGluZXM= b21pbg== U2NyZWVu 0LDRgg== cGVjdHM= Y2xpcA== Zm9v cmVudA== IGFm IGRhbmdlcg== aWxpbmc= TmFtZXM= T3Vy IGRpc3RyaWJ1dGlvbg== V2hpbGU= U0w= V3JpdGU= IGdvdG8= IGNvbG9ycw== IHBvd2VyZnVs a2lu IGRlcHRo ZXJjaWFs IENvbmdyZXNz IE1hcmtldA== RGI= dW5kZXI= IExhc3Q= w58= Z3JlZw== IHBvc3Rz X1VSTA== b3Rvcw== RG9u IG1pY3Jv IGFycmVzdA== 0L8= IChA IEhvdA== IEluZGV4 OyY= IyE= IE5vcg== IENhcA== LSg= IGludGVyZXN0ZWQ= cGVhcg== IHJlbnQ= IGFsYnVt b2xpY3k= Lmxhbmc= LnRyYW5z LmZvcm1hdA== IHsNCg0K cGhlcmU= IGF4aXM= IEJ1c2luZXNz ZXJzaXN0ZW5jZQ== dXJy IG1pbmltdW0= ZW5kb3I= IFNE MTEz IEludGVybmV0 5aQ= RXhw aXZlcnNl TU0= IG9idmlvdXM= IGJhc2lz IHNjaWVuY2U= IGJ1ZGdldA== aXphdGlvbnM= UEE= IGZsYWdz cHJldA== TE9DSw== IHZhcmlldHk= IHRydXRo ZHQ= IGdvbmU= IGJhdHRsZQ== PHN0ZA== IFNpbA== cmY= dWRh IGVyb3Q= IENhbQ== IHN0YXRpb24= ICc8Lw== Y2hlbWU= IFN1bg== IGZpbmlzaGVk IHNob3A= IEtvcmU= IGVpZ2h0 X1JFRw== TkQ= Piw= Ij48Pw== KG51bQ== CWlubGluZQ== VHJhbnNhY3Rpb24= Lk9u IG1haWw= cmV5 cmVzdWx0cw== IG5hdg== SU1JVA== X2lkcw== TWFrZQ== 5Yo= TW9kYWw= IExPRw== IFN1cg== IGluc3RhbmNlb2Y= IG92ZXJhbGw= IEluZm9ybWF0aW9u IGNvbnN0cnVjdGlvbg== X0ZJTEU= YnV0 IG1lZGlj IGR1cmF0aW9u aXRuZXNz YWdlbnQ= QVY= IHNldmVu b2xm IH19Cg== Il0sCg== MTcw MTIy IGNhbGxpbmc= IGFucw== dGhyb3dz b3Jpem9udGFs IHVzZVN0YXRl LmZs IFN0YXR1cw== IE9ubGluZQ== UlI= IFJpY2g= IEhpbGw= IGJyYWlu IGZvbGxvd2Vk MjQw ZW1pYw== IHNsaWdodA== IGluc3VyYW5jZQ== LkFycmF5 IGFic3RyYWN0 IFN1bQ== cmVkaXJlY3Q= b3duZXI= KG1zZw== IENsaW50b24= Tm9u CWV4 IHZvbHVtZQ== IEV2ZW50QXJncw== LUw= IERpbQ== IE1hcnQ= IGN1cnNvcg== IGltcGxlbWVudGF0aW9u dXJyZWQ= IGxhcmdlcg== KTsKCgo= Jys= LnRyYW5zZm9ybQ== IHVwbG9hZA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== RHJhdw== bmVs CWZsb2F0 cXJ0 IE5ldHdvcms= IHRpdA== QXhpcw== LmFuZHJvaWQ= IGNvbXBsZXRlZA== IG11cg== IGNvbHVtbnM= eGM= IHN1cHBseQ== aW1pbmFs IHNwcg== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHVuaXRz KHU= bWk= cmVwbGFjZQ== W2tleQ== 4Lk= YW50aWM= IHBheW1lbnQ= LEI= IEFwcGxl Z2lu UmVxdWlyZWQ= Iys= bGFuZHM= IHNxdQ== IGZhY3Rvcg== ZGVj IHN0cmVuZ3Ro IGJveQ== IGJhbGFuY2U= IHNvdXJjZXM= c2NyZWVu LXRvcA== IEFtYXpvbg== IGhpZGRlbg== 0LXRgg== X2NsaWVudA== IGVhdA== LmRpc3BsYXk= IMK7 IHRyaWdnZXI= YW5hZ2Vy IHRybw== IGNsYWltcw== Zm9yZA== IENvbXBhbnk= IGdpZnQ= LDo= X2FwcA== aGFuZGxl IHByb2R1Y2U= L2xpYg== NTEy IC0q CXNldA== J107 YXJj YW5kZXI= IEVuZ2luZQ== IGF0dHJpYnV0ZXM= dGFzaw== PD0= KE4= IHdhcm0= d2hpY2g= IEZvcmU= YWdub3N0 bXlz IHRhbA== IFNhbA== Z2k= IFByaW50 IFRSVUU= INC+ LlVJ IGZsYXNo cm9wZXJ0eQ== LmxvY2F0aW9u IE1pbGw= Ymk= Y29udHI= LnJlcXVlc3Q= IFNhbQ== IG5lZ2F0aXZl a2l0 IHNldHQ= LnByaW50U3RhY2tUcmFjZQ== YWJl CWk= IGJ1cm4= IHNvY2lldHk= Q2FjaGU= IFNlY3VyaXR5 Lm1vZGVscw== IFdBUlJBTlRZ X3Vw Y2VpdmU= IGNsaWVudHM= LlRy IHByb3ZpZGluZw== IHJvdXQ= bWF0ZXJpYWw= IHx8Cg== IFNlcg== IE9mZmljZQ== RlRXQVJF ICck IGZvYw== IGV4Y2VsbA== IGNhdA== bm9ybWFs IGRldGVybWluZQ== CXVpbnQ= UGFuZQ== IGVtcGxveWVlcw== IFRleGFz IHRyYWZm IFJlcG9ydA== YW50YQ== IEJveA== IGRqYW5nbw== IHBhcnRuZXI= RUI= TElORQ== IGZlZWxpbmc= IGNpdmls KGZsb2F0 U3Fs IHdvdWxkbg== LmluaXQ= LmxlZnQ= LXY= X2xldmVs J30= QUY= IGxvYWRpbmc= IE9ubHk= IGNvb2tpZXM= IEds Q08= IHN0cmF0ZWd5 KCcuLw== IHNoaXA= cG9zZXM= IHNpZ25hbA== IGFscGhh LnBvcA== UmFkaXVz IHJlcGxhY2U= X0RJUg== Y291bnRlcg== YnNlcnZhYmxl ZWxh V2VpZ2h0 aGFzaA== Ym9zZQ== Zng= IEVtYWls IHJlZmVy bG9jYWxob3N0 X1JP aXF1ZXM= U3RlcA== IGFoZWFk KFZpZXc= IFNlcnZpY2Vz IEpzb24= ZXNzb3I= IHB1bg== IGFwcHJvcHJpYXRl YWtlcnM= b3Nlbg== cG9zaW5n IGFnZW50 ZmM= IHRyYW5zZmVy IGludmFsaWQ= IFJlc2VhcmNo VmVydGV4 IGdheQ== IGpvdXJuYWw= W3g= ICIiLAo= IFdlbGw= LlRhc2tz U3BlYw== IG9s IHNwZW5k IEF1c3RyYWxpYQ== TWF0Y2g= Lmp1bml0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IE1BWA== aXphYmxl Y2x1c2l2ZQ== X3ZhbGlk IHF1YXJ0ZXI= eWFu MDA1 IEVkaXQ= YXJkZW4= PW5ldw== IGZyYWc= Qml0 emk= YWluZQ== dWRk Lk9iamVjdA== ZGVidWc= IGNhc2g= X0lN IGVlbg== IGNvbW1lcmNpYWw= IFZpZGVv bG9hZGVy IGZpeGVk IGFwcGxpY2F0aW9ucw== IF8s IFJ1c3NpYQ== aXRlY3Q= Xyg= IEJsb2Nr IHNhbg== IFRvbQ== IHBlcmhhcHM= IHNpZw== bGV2YW50 IGNvcnBvcg== YXRhc2V0 cm9uaWM= eGU= IGV0aA== U29tZQ== cG9w X09L IHRlbmQ= LlJlcw== X2FuZA== IHJldmlld3M= IHdpbGQ= MTE3 IGRlZ3JlZQ== Lk8= Lm9iamVjdHM= X2FyZ3M= bmls IGRpc2FibGVk UGFyZW50 IG5vdGVz ICIiCg== KHN0YXRl aXN0cmljdA== IGxvZ2dpbmc= LklP IE1hbA== RE0= IHhtbA== IFJvYmVydA== ZWxlbg== bGF5b3V0 Zm9s J10pKQ== LGI= IEplcg== ZmlsZW5hbWU= IGZhbg== IEN1c3RvbQ== PSIi IERpZQ== QnVuZGxl LnV0aWxz IHRyaXA= TUI= IHNvZnQ= X01PREU= IGFwcGxpY2FibGU= IHVwcGVy RVJWRVI= X2Fs X0xPRw== SGVyZQ== d3A= IFNlcnZlcg== IENsaWVudA== IGNoZW0= U2Nyb2xs IGhpZ2hlc3Q= IFNlbGVjdA== ICJA IFdoeQ== U2Vj aGVlbA== T3BlcmF0aW9u IGNvbm5lY3RlZA== aXJtZWQ= IGNpdGl6 IENoZQ== IGZvcmNlcw== IHd3dw== Um9vdA== QU5DRQ== TWFueQ== aWNpcA== cmdhbg== MjIw IFRvcg== IFByZXNz IE1vcg== LWxpbmU= dWxlZA== Plw= IHRodXM= IFJlZ2lzdGVy aG9s IENoaW5lc2U= IHBvc3RlZA== IG1hZ24= YWJpbGl0aWVz IGRpc2Vhc2U= IHJlbWFpbnM= IFByb2Y= LWZvcm0= IGNpbg== b3JnYW4= aWNhdGU= IHN0cmVzcw== XSo= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= X2NvbnRleHQ= b3JyeQ== IGRpZWQ= bWF0 IHN0YXJ0cw== Lk1lc3NhZ2U= IHJ1bnM= IGd1aWRl IHdhcnJhbnR5 ZW50aWFscw== ZGljdA== IFNpemU= dWxlcg== IHJlc3BvbnNpYmxl X1NFVA== IGNvbnRhaW5pbmc= IFByaWNl fHw= MzUw RlM= IGVtcA== X2J1dHRvbg== KHVpbnQ= IHN1ZmY= cHRo IGRlZmluaXRlbHk= cHV0ZQ== IG1hcmtldGluZw== IFdI IFNpZQ== Kz0= T0xPUg== IGNvbnN1bHQ= IHNpZ25lZA== IHNlcXVlbmNl bGVl IHJlcXVpcmVtZW50cw== aHk= RXhwcmVzcw== TVQ= c2V5 IHVsdA== 5a4= ZWxsaWdlbmNl IGFuYWx5 IGRyZXNz ZW5naW5l IEdyZWF0 IEFuZHJvaWQ= IEFsZXg= bW9kZQ== RGljdGlvbmFyeQ== LkRhdGU= 5L0= VklDRQ== IGZhbWlsaWVz IFJ1c3NpYW4= IFRpbWVz LmNhbGw= JCg= UHJvZmlsZQ== IGZvbGRlcg== Y2hlcw== IGxlZ2lz X3Jvdw== dW5lcw== 2YQ= IH0pLg== QXNzZXJ0 YWdlbg== IEhhbmQ= SXRlcg== IGJpZ2dlc3Q= b3JlYWNo IHBvbGlj IHBlcm1pc3Npb25z IHNob3dlZA== IEVsZW1lbnQ= IHRvcGlj 4oCU4oCU cm9hZA== IEJhbms= cmVjb3Jk IHBhcnRuZXJz IFJlZg== ZXNzaW9ucw== IGFzc2Vzcw== VVNU IFBhcnR5 cHJvZHU= TEM= IHVs LmZvcm0= aGlkZQ== Y29weQ== VVRG IFNPRlRXQVJF DQoNCg0K IExpbg== dW5h dWdhcg== IGFkbWluaXN0cmF0aW9u IG9wZW5pbmc= IHNjYW4= IGNvbnRpbnVlZA== Y29tcG9uZW50 LnNw IGhhcHBlbnM= dW1teQ== IFBS LkZpbGU= IERvd25sb2Fk TG9hZGluZw== ZGk= IHdhaXRpbmc= X0FERA== VGFi LnF1ZXJ5U2VsZWN0b3I= IGVjb25vbXk= IEZyZW5jaA== dHh0 IGZhbnQ= XzsK SG9sZGVy U0g= MDA0 IG51bXB5 IHN0cmVldA== IG1hbGU= XE1vZGVs YW5naW5n MzMz IEJpbGw= IHByZXZpb3VzbHk= Qkk= IFNlY3JldA== IG1pc3Q= IEZpZWxk dXBz IFByb2Nlc3M= IGtlcHQ= IE9U IHRyYWRpdGlvbmFs Lmk= YW1pbg== IGhlbHBz QW55 b3JpZ2lu aWx0ZXJz anU= ZGVzYw== IEFjY291bnQ= ICkNCg== a3RvcA== b2xseQ== IGZz IOo= IHV0 IGNlbnRyYWw= KHRlc3Q= LkFu IHNhdGlzZg== R1I= IEZ1bGw= IGhlYXQ= aWJlcg== IG9udG8= bW9z U2NoZW1h IGZhY3Rvcnk= Ii4k YXdz U3RhdGVtZW50 KHRhcmdldA== CW5ldw== LmJl IGd1ZXN0 IG1hbA== QVJZ IHJlYWNoZWQ= IG1vdXNl IGNoYWxsZW5nZQ== CWRvdWJsZQ== IFRlbQ== IHRlcnJvcg== IGV4dHJhY3Q= X1RP IHNlcGFyYXRl IG1pcg== aGVscA== IGNhcGFjaXR5 IFByb3BlcnR5 a2Fu X2NyZWF0ZQ== IExpZ2h0 LnBhcmVudA== IHVuZGVyc3RhbmRpbmc= IGVhc2llcg== IHw9 IGVuaA== IGZhdA== IHByb3Rlc3Q= YW1t X0FU LW9m aWxz IE9o IHBzeWNo ICQu aW5kcw== IHJlbGF0aXZl c2hvcA== c2hvcnQ= IFNhbmQ= MjEw dWVzdGlvbg== IGZlYXI= LwoK LmNvbnRleHQ= IHNjaG9vbHM= IHNlcnZl em9uZQ== X2Ri IG1ham9yaXR5 ZXhhbXBsZQ== IGxhbmc= CSAg UmVnaXN0ZXI= ZW5kbw== IHByb2Nlc3Npbmc= X3RlbXBsYXRl LXVzZXI= IGVn Q09N IEJsdWU= aXJv IHJlbW90ZQ== IElU IyEv IHJlZGlzdHJpYg== MTI0 cmF6 IFNpbmNl IFR1cg== MTM1 QmFja2dyb3VuZA== PT09 IHJlZmxlY3Q= IHByb3M= Y21k IHdob20= Q29tcGF0 IEFyZQ== SWRlbnRpZmllcg== IFRob20= X3BvcnQ= Z3U= IG1vbml0b3I= cm0= IHBhdGllbnQ= dmVydGVy IGdhaW4= LXVp SW5zdA== IGRpZXM= MTE4 QXJlYQ== X2ZpbHRlcg== IGdyYXQ= IHJlYWxpdHk= b3JkaW5hdGU= b2x2ZWQ= Q29udGFjdA== IGNvbXBsaWFuY2U= X29y IFZhcg== ZGw= IGFwcGVuZA== R0VS KG1heA== LnJlbmRlcg== IGR5bmFtaWM= b3JkaW5hdGVz X29wdGlvbnM= X2NvbHVtbg== IGJhdHRlcg== c3BhY2U= TGE= IFNvdXJjZQ== L2Jpbg== IGRvcw== IEJvYXJk IFRocmVhZA== IEFM KGNvbmZpZw== MTQ0 IE1lcg== IG1pbGVz X2hlYWRlcg== RVRIT0Q= aXp6 IGJlbmVmaXQ= IGludGVncg== KGN1cnJlbnQ= dWxv LmRlZmF1bHQ= IERpdg== IHRvbg== b3Ro ZXJ2YXRpb24= ZWRvbQ== IGJhYnk= Y2VpdmVk LnRvcA== cmlvcml0eQ== IExvY2Fs cmlhZ2U= IGF0dGFja3M= IGhvc3BpdGFs MTY4 IGZlbWFsZQ== IExvZ2lu IEZsb3I= IGNoYWlu YXNoaW9u VGV4dHVyZQ== U2F2ZQ== IGZhcm0= LmNvbnRhaW5z LlRlc3Q= IGtub3dz IGdlbmVyYWxseQ== aXBlbGluZQ== IG1lYW50 ZW5jaWE= IG5pY2h0 IGNvbnRlbnRz UE0= Y2hlZHVsZQ== KGxpbmU= Q0c= am9i IFJlYWw= dWVy ZmlybQ== INg= ZXRybw== ImAK IHNwZWVjaA== IHRocg== Zm9yZWFjaA== IHdhcm4= CWw= IGhlYXZ5 PGxp TmU= IGludmVzdGlnYXRpb24= TWF0aA== LXRpdGxl IGNodXJjaA== IGRlc3BpdGU= Y2hhaW4= IHdoYXRldmVy YXJpYW4= Zm4= IG1ldGE= fSkKCg== VUZG IHJlZ2FyZGluZw== X1NVQ0NFU1M= bWVz IEludGVudA== IHJlc29sdmU= cG9zcw== aXJh Zm9yY2U= b2ljZQ== w6I= IHBt IHVwZGF0ZXM= QXJy INE= dGVzdGluZw== IHRvd2FyZA== bnRheA== 64s= IGxpc3Rlbg== IGdvYWxz SW5zdGFuY2VTdGF0ZQ== RHI= IHJhcmU= IHRyYWls S2V5cw== Q2Fs Q2Fy IFBlb3BsZQ== CWxvY2Fs Y2xhc3Nlcw== UmVmZXJlbmNl LmZvckVhY2g= ZW1i YWN0aXY= IHByaW0= cmVkaWN0 IHJhZA== 5pWw LkJhY2s= IHNwcmVhZA== IGNsb2Nr IHZpcg== ZWRpdG9y IGVmZm9ydHM= IGJyYW5jaA== IGluZHVzdA== IG1vdG9y IGFtYg== IGRhdGV0aW1l IHJlbmNvbnQ= IENocmlzdGlhbg== IEFtZXJpY2Fucw== ZnVsbA== IGZtdA== Lm1haW4= IGNhdXNlZA== X3VwZGF0ZQ== IENvbnRlbnQ= QVRDSA== IGJhdGg= IEVhY2g= IHJhZGlv YWNobWVudA== dXp6 U3VibWl0 IHJlc3RyaWN0 YWJpbg== IExvYWQ= IGV4dGVuc2lvbg== IGVzc2F5 IGhhdA== YXZpb3Vy dG9CZQ== Ijpb IG9mZmVyZWQ= IHZpbGw= KGRvdWJsZQ== MTE5 5pel YmM= X2ZyZWU= IE1pc3M= IEJlcg== IOg= IExpa2U= IGhlbHBlZA== LmdldE5hbWU= X0FM IHNwaXJpdA== IEFwYWNoZQ== d3M= IHRoZXJlZm9yZQ== KHBhcmFtcw== X2ltZw== IHBlYWNl IGluY29y IEVYUEVDVA== IG1pbm9y aXBlcw== CWRhdGE= c2VsZWN0b3I= Y2l0eQ== dHJpZQ== LmJhc2U= X2ZyYW1l IG9wZW5lZA== L2pzb24= TFk= bnU= LkRl dGY= bWFyZ2lu LlBhcnNl IHBp IGVx YmQ= RmllbGRz IFRyZWU= IGJhbg== aXN0YW4= CiAgICAgICAgCg== CWds IHByb2R1Y2Vk c3lzdGVt TWFyaw== X2hhc2g= IGJn IGNvbnN0aXQ= IExlYWd1ZQ== IG1pc3Npb24= X2Zvcm1hdA== KFsK Y2x1c2lvbg== ISI= 0Lc= YnJlYWs= CXN3aXRjaA== IHRoZXI= VHJhbnNmb3Jt IGZvb3RiYWxs LWxpbms= cm91dGU= LmF1dGg= IGJhZw== b3ZlcnM= IGVuYWJsZWQ= IHJhYw== KEk= Q1I= YW5jaW5n IG1hbmFnZWQ= X3E= TkdUSA== IG1hYw== IEF1dG8= YW1lbnRl ICcnLA== LkFwcGVuZA== IHBpbg== Lml0ZW0= YWNraW5n IG9jY2Fz cGVyc29u IHRp LlJlZw== IGhhdmVu IGdsYXNz ICI8Lw== IFNpbXBsZQ== UHJpbnQ= IHN1cnJvdW5k Tk8= 44CCCg== ICAgICAgICANCg== IE1hbnk= ICJf IHdlZWtlbmQ= IHNvbWV3 LnBhcmFtcw== c21hbGw= QVRFRA== IHBsdWdpbg== ZmllbGRz IEluaXRpYWxpemU= b29u YXRpbGU= eWU= IHZvdXM= TEFH IG9sZGVy IGdhbQ== IGV4dHJlbWVseQ== IGhldA== ZW51bQ== IFNFVA== eGZm IHRpbWVy L2luZGV4 IGNyaXRpY2Fs Um93cw== X2FyZ3VtZW50 IGV4ZWN1dGU= IHNob3dpbmc= LnhtbA== LWxpc3Q= Um9sZQ== dHlwZW5hbWU= X21ldGhvZA== dGhhdA== Y2hlcg== IOKG WFQ= IHRob3VzYW5kcw== CW4= IHJlc3A= X3ByaWNl b2x1dA== QWc= IFR3bw== IGJlY29tZXM= IGh1cw== LlVzZQ== dGhlbWU= dXJi IC8qCg== ZXJpYWxpemU= QVJO IGxvc2U= TG93ZXI= IHZlbA== IGRlZmVuc2U= Y29uZGl0aW9u IGJlcw== IGRyeQ== IHNjcm9sbA== LlNob3c= SUVM 0L7RgA== IFJlc3Q= V2hlcmU= b29kcw== IEplcw== IHdpcmU= X0lORk8= IHN0cmluZ3M= Z21lbnQ= IG1hdGNoZXM= IGVsZWN0cmlj IGV4Y2VsbGVudA== IENvdW5jaWw= aWRhZGU= IHd4 cHVzaA== X2VudHJ5 IHRhc2tz IHJpY2g= c2E= IFNtaXRo VU5DVElPTg== UG9pbnRlcg== cGVjdGl2ZQ== MTMx IHdpZGdldA== aXN0YQ== IGFnZW5jeQ== IHNpY2g= b2xvZ2llcw== IHRyaWFs YWx5c2lz LmNoZWNr QVJL IG9uQ2hhbmdl YWJvdXQ= Jywk KHZhbA== IHBsYWNlZA== X05P IGRhbg== LmVxdWFs CSAgICAg IHdlYXRoZXI= LmdhbWU= IGRlc3RpbmF0aW9u X1VTRVI= aWVjZQ== IHByb3ZpZGVy Lmxhc3Q= cGxleA== Tm90ZQ== L2pz IHDDpQ== IHBsYW5uaW5n YXR0cmlidXRl UFJP YXRjaGVz IDwt IHNlZWluZw== IGNhbmNlbA== X2luZA== LmtleXM= IHZpc3VhbA== IEN1cnJlbnQ= IENvbGxlZ2U= IFJvY2s= IGFncmVlbWVudA== IFN0b3Jl b3Zpbmc= IGNvcm5lcg== YW1waW9ucw== SVNF Rmlu IHByb3RlY3Rpb24= IGZp UGxheQ== cGx1Z2lu KX0= LmZyYW1l LXo= IHRyYW5zaXRpb24= aWdpbg== IGNhbmRpZGF0ZQ== IFVuaW9u X3ZhbHVlcw== KG1hcA== Y2xl IHRyZW5k d2lkZQ== YXJlbg== TG9j VVRI IEJheQ== IHNtYWxsZXI= aXVz MTQx d2VsbA== IGNyaW1pbmFs IGNvbmZsaWM= YmVydA== X0lOVA== IGludmVzdG1lbnQ= Y3VzdG9t IFNlc3Npb24= X3dyaXRl YW5pYQ== IE1hc3M= X0VR X05PVA== IHZpb2xlbmNl QXJndW1lbnQ= X2VtYWls IGJlbG9uZw== X2Z1bmN0aW9u IGVuZW15 ZW1h IEFkZHJlc3M= LmVtcHR5 IGlubmVy IENvbnRhY3Q= TG9hZGVy PGlucHV0 IENB bG90 IHBpY3R1cmVz IFN1cHBvcnQ= X25hbWVz MTg4 TGF5ZXI= IENsaWNr U3Vt w6Y= IExvb2s= dW91cw== TGli RmxhZ3M= dGVhbQ== RVA= MTg5 aGF0 b3ZlcnJpZGU= YXBzZWQ= IGxhYmVscw== cXVpcw== IFN0cmVhbQ== X2RldmljZQ== IENvbW1pdA== KHJvb3Q= In0= LmlzRW1wdHk= MTI2 CU0= IGFuZ2xl IEJlY2F1c2U= JSUlJSUlJSU= IGFpbQ== IHN0aWNr c3RtdA== YWdyYXBo YW5zd2Vy IGNsaW4= IElzbA== LmV4dA== IElOVA== IHN0eWxlcw== IGJvcm4= IHNjcg== IGV4cGFuZA== IHJhaXNlZA== VGV4dEJveA== SUxM LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t SFRUUA== MTMy Pik= X2NoYXI= cmVzb3VyY2U= IGVwaXNvZGU= ICdf IEVz IEVhcnRo wqDCoA== VVBEQVRF MTMz IFNvdQ== dWlz dHlwZXM= IG1hcw== IGZhdg== IGNvbnN0cnVjdA== X3JhdGU= ZXJhcw== IHwK cm9wZXJ0aWVz IGV4dGVybmFs IGFwcGxpZWQ= IHByZWZpeA== b3RlZA== bGVycw== IGNvbGQ= IFNQ IENodXJjaA== IE91dHB1dA== bG9zZWQ= 55o= aWZpY2F0ZQ== b3BlcmF0aW9u aGVyaXQ= eEZG LmVudg== X2Vycg== b3No RGlyZWN0aW9u Q2FuY2Vs IEZyYW5r IGZpbmRpbmc= LikKCg== IHJvdXRlcg== 44O7 c2Vz IGNyb3c= PT0n IHNhbmQ= IHJpZA== aXR1cmU= IGVudHJl IG9ic2Vydg== IHZhYw== 8J8= LVQ= QXJ0 bmlnaHQ= LnNlYXJjaA== IGV4Y2hhbmdl IGRpc3RyaWN0 Lm9z IGRlcGFydG1lbnQ= IGRvY3VtZW50cw== IGNlbnR1cnk= IE5leHQ= SG9zdA== IEtJTkQ= IHN1c3A= LVA= cmVuZA== LmVt dWl0ZQ== aXN0ZXJz KGpzb24= IEFubg== d3Q= YXRp IEhUTUw= d2hlbg== RGlyZWN0b3J5 IHNodXQ= PGE= ZWR5 IGhlYWx0aHk= IHRlbXBlcmF0dXJl IEdlbg== IG1ldGFs IHN1Ym1pdA== IERP IGF0dHJhY3Q= IHt9Owo= IFdvcmQ= IGxs IHNlZW1lZA== a28= SUVE IGxhYm9y LkNvbnRleHQ= IGFzc2V0 eW91 IGNhcnM= IENvbHVtbg== IHLDqQ== IHNxdWFyZQ== IE5TU3RyaW5n 4oCdLA== YXBlcw== Li4uCg== IHRoYW5rcw== KHByb3Bz IHRpY2s= IGV4cGVyaW1lbnQ= IHByaXNvbg== dHJlZQ== LXRleHQ= IElPRXhjZXB0aW9u LXdpZHRo X1NUQVRVUw== ZmFzdA== LWJvZHk= LWhlYWRlcg== IGd1YXI= Y3JldGU= IFRpbQ== IGNsZWFybHk= IFJlcHVibGljYW4= IGp1c3RpZnk= 0LjRgg== CSAgICA= Y2FjaGU= Oy8v IHByZXNlbmNl IGZhY3RvcnM= IGVtcGxveWVl XSkp TWVtYmVy IHNlbGVjdG9y Ym9y IE1leA== 55qE dXRleA== X3RhZw== YWlsdXJl IE5ldA== IHJlbGk= RUc= IGZwcmludGY= IHRlZW4= bG9zcw== IGxlYXZpbmc= MTM0 RGVsZWdhdGU= IGJlYXQ= IG1pbnV0ZQ== c3Vic2NyaWJl IHJlZGlzdHJpYnV0ZQ== Q29uc3RhbnRz IGNhbmNlcg== L3s= Qkw= IHNwYW4= IENoaWxk Q2VudGVy IGVhcnRo WVM= IExldmVs IHNlYQ== LnN1cHBvcnQ= LmlubmVy Lkl0ZW0= aWxsaW5n ICAgIAogICAgCg== IExhYmVs MzIw IEVzdA== KGFyZw== MTQ1 Ym9Cb3g= CWZvcmVhY2g= Y29z RmFpbGVk c3dlcnM= RWRpdG9y cm9udA== IE1Q ZXhwcg== IExpZmU= ID8/ w7Zy IGF0dGVuZA== IFF1ZQ== IHNwZWNpZXM= LUQ= IGF1cw== U3RydWN0 IGFkdmFudGFnZQ== b3N0b24= LWJsb2Nr aW5pdGlhbA== Q1JF IHRydWx5 IGNvbXBhcmU= b3JuZXk= IHNwZWN0 RnVsbA== YmVz IHZpc2libGU= IG1lc3M= c3RhbmNlcw== IGNsb3Vk X3ZlcnNpb24= IGZ1cm4= aWNhZ28= TE9X IHRyYWZmaWM= IGZvbA== cnlwdG8= IGRlY2xhcg== IHNsb3Q= IEV4dA== IEVuZ2xhbmQ= IFVuZGVy IHRh bGV0dGVy MjAz IG9mZmljZXI= IERvbmFsZA== WWVz X2pzb24= SVRhYmxlVmlldw== IFVTRQ== bXBsb3llZQ== IG9waW5pb24= IEF1dA== Ym9yZGVy IGFkdmljZQ== IGF1dG9tYXRpY2FsbHk= aXNjbw== IG1t LnZpcw== YW1s IGluaXRpYWxpemU= ICh7 IDsKCg== IGdlbmVyYXRpb24= IGJpdHM= Y2xpcHNl IHVuZg== dXRvcnM= cGx0 IGRlbHRh ZXN0cm95 aXNpcw== PGJy IGxpbWl0YXRpb25z IGVuZGVk IE1hZA== aWxt VGhlc2U= MTg3 IE1pbmlzdGVy IGNoYXJ0 RnJhZ21lbnQ= IGluZGVwZW5kZW50 WWVhcg== IGluc3Ry IHRhZ3M= QVZF IEFyY2g= c3RvcA== UHJvZ3Jlc3M= IG1p IGxlYXJuZWQ= R2U= IGhvdGVs MTUx U00= VFlQRQ== IGN5 RVJTSU9O dW5hdGVseQ== bGltaXQ= c2Vs IG1vdmllcw== IHN0ZWVs b3o= Z2I= IENhbXA= c2l0ZQ== IExvZ2dlcg== UExF 0L7QtA== LnJpZ2h0 IENvcmU= IG1peGVk c3RlcA== IHB1dHM= c3VwZXI= Um91dGVy MTg2 Lkh0dHA= MjIy bHlwaA== IENvbG9ycw== IGFuZHJvaWR4 LnN0cg== IGlubm92 IGRlY2s= Jz4K YXBlcnM= XSg= Y29udGludWU= c3BlYw== IFJvYWQ= QVNI aWxpYXI= IGNvbnRpbnVlcw== IGFwcG9pbnQ= ICMK IFZpcg== ID8+Ig== IGJpbg== fSIs Z29pbmc= ZWFjaA== QkQ= MTg1 IEFjY2Vzcw== RG9j IE1hbmFnZW1lbnQ= QkVS YXNrZXQ= LmdldEluc3RhbmNl MTI5 IGVzdGFibGlzaGVk c29ja2V0 SU5T CXZpcnR1YWw= CXJlc3VsdA== UkVBRA== X2hlaWdodA== MTUy IEZvbnQ= ICgpOwo= X2h0bWw= IG5laWdoYm9y bG9y IGdhdGhlcg== IH0pCgo= IGlkZW50aXR5 IGZhYg== cGFkZGluZw== IFJvdXRl RW51bWVyYWJsZQ== w7Q= IGZvcmNlZA== L2pxdWVyeQ== LgoKCgoKCg== cmVzZW50cw== X2xlZnQ= LlBhcmFt CXRocm93 IEhhbQ== IGV2ZW50dWFsbHk= YWNlcg== cHVi IHRyYQ== dW5pcXVl ZGVs IEZsb3JpZGE= IENsZWFu eGE= IMK3 IHZhbGlkYXRl VmlzdWFs RXhwcmVzc2lvbg== X2Z1bmM= bWVtYmVy CWg= dHJs MTM2 CUc= bmFwc2hvdA== IFByb3BUeXBlcw== dmlu MTUz XSkKCg== b3ds aWZpZXM= ICQoJy4= IENvbnRleHQ= IFRvYXN0 LktleQ== IG9mZmljZXJz L24= c24= dW5kZWZpbmVk Lml0ZW1z dXRvdw== YW1hZ2U= IGFjY291bnRz b29raWU= U2VjdGlvbg== aWNpYW5z IGFkdmlz KGlz Wzos IEZyYW5jZQ== RnVuYw== aWNpb3Vz IHRvaw== Q2hhbm5lbA== IEFE X05VTQ== IHRpbWVvdXQ= bGVtbWE= cmVtZQ== dWo= LkFs dWNsZWFy KG9z KCI8 Wwo= ZmV0Y2g= IGJhbA== IGd1aWQ= LWFsaWdu IFdyaXRl IE9uY2U= dXRvd2lyZWQ= T0RVTEU= IHBpdGNo Q0Y= Ynl0ZXM= IENvbW1pc3Npb24= IGluY3JlZA== UEVS X3Jlc3BvbnNl IExvcw== cGFyc2Vy IGFzc3VtZQ== LlJlcXVlc3Q= IFRva2Vu X3Bvc2l0aW9u IG5vbQ== LXRlcm0= IHJlbWFpbmluZw== aW9zdHJlYW0= IHBpZWNlcw== YXB5 IExlc3M= cmFuZ2U= dW1ibg== cHJpc2U= X29wdGlvbg== MjMw SW1wbA== a3dhcmdz IGJ1c2luZXNzZXM= QWxlcnQ= IHBhcnRpZXM= IENvbnRhaW5lcg== IFByaXZhdGU= IFBsYW4= IHJlZ2lzdGVyZWQ= IGpvdXI= YWNrZXI= 0LXQvdC4 Lz4= Y2hhdA== c2VjdA== IGNyZWF0aW9u b2x1dGVseQ== IGluc3RhbnQ= IGRlbGl2ZXJ5 aWNrZW4= eWVz MTYz IEZyYW5j Ymxpbmc= ZW5kYQ== Wyg= X3Jhbmdl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IHNjaGVkdWxl Q29ubg== IHRoYW5r eGQ= IGhvb2s= IGRvY3VtZW50YXRpb24= UGFyYW1ldGVycw== SGVsbG8= dnQ= IGFydGljbGVz IHdlc3Q= ZGVmaW5lZA== LnNlbGVjdA== b2tlbnM= IFZBTA== LmZpbGU= cmVzZXQ= IG15cw== IE1B XSks IGNpdGllcw== cmVsYXRlZA== 5Zs= IGFwcGVhcmVk IHdpZA== LnBhbmVs IElucw== LmVudGl0eQ== IGRlY3Jl IExvdQ== KHRpbWU= IFRoYW5r LmNyZWF0ZUVsZW1lbnQ= IG1lbnRpb25lZA== b3VuY2U= IFRyeQ== IFdhbGw= L2ltYWdlcw== IE1lbnU= Jw0K IEVy IGNyaXRpYw== IFllYXI= KHBhcmFt IGZsbw== Tk4= b290ZXI= IF07Cg== IEFmZg== ImdpdGh1Yg== cm9vbXM= IGh5cA== Z2xvYmFs IGF2ZWM= 5pyI IGNvbXBsZXRpb24= IGNvbmQ= b255bW91cw== KHRlbXA= IHN0YXJz IHJlbGV2YW50 IGNvdmVyZWQ= IGVsaW0= X3R5cGVz KGJvb2w= IHR1 X2V4aXN0cw== IHNlY3VyZQ== IHN0b3JlZA== XS8= eEY= IENvbnRyb2xsZXI= IG1pZ3I= TUk= IERlbg== IGFubnVhbA== VUlM LWFuZA== IGNyaW1l YmVs IGtpdGNoZW4= QGc= X3Bo b3VybmFtZW50 IFNvY2lhbA== IFNwZWNpYWw= bG9nZ2Vy IHRhaWw= IHVua25vd24= ZGVk IGFwcHJlYw== KGRi Y2Y= MTU1 IGFzc2lnbg== LW91dA== IE1vbnQ= ZHA= d2lkZ2V0 IHN0b25l LXByaW1hcnk= LmdyaWQ= UmVzdWx0cw== YXp6 IGRhdWdodGVy IGN1cnI= MTc1 IGxpbg== IHNvdXRo Zm9ybXM= IE9VVA== bGV0dGU= YWtz aWd1cmU= IEVV dmFyaWFibGU= IGJyaWVm IFNjb3R0 IGNvbmZlcmVuY2U= YW5kYQ== X2xvY2s= b3JhbA== IGVpbmU= T1JT Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== ZXNzbw== IHJpcw== IGdlbmRlcg== ZXN0aWM= TGljZW5zZQ== KG91dA== IG1z U2Vl IHdpbGxpbmc= YXpl IHNwb3J0cw== IHllcw== bHU= IHB1cnM= L2phdmFzY3JpcHQ= LXBybw== bmF2YmFy X3Byb2R1Y3Q= L2Jvb3RzdHJhcA== IGRyaXZpbmc= IMQ= IHByb3Bvcw== dWx0aXA= dXBsaWM= LmVtYWls IGFwcHJveA== KGNs IHdlYXI= IHJlcGx5 YXNzZXQ= IGljZQ== IHR4 a3I= IEdlcm1hbnk= IEdlb3JnZQ== IGNi CWVycg== TW92ZQ== IHBvbHk= dm9pY2U= fSI= IGFuaW1hbA== QXY= IExvY2F0aW9u IG5hdGl2ZQ== XVsi PGRvdWJsZQ== IG1haXM= LGludA== IHByZXBhcg== IGludGVydmFs cGxlbWVudGF0aW9u X0VSUg== IGJ1Zw== PiI= c3RhdA== IH0sDQo= PHNwYW4= IGZhaXRo IHJvbQ== cHJldg== IEVsZWN0 RmluZA== IGdvZA== b3Rvcg== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t b3JpZ2luYWw= Q3Bw IFNlbmF0ZQ== IHBvc2l0aW9ucw== IHdlYXBvbnM= IGNvZmY= IHB1cnBvc2Vz cG9s IGltcHJlc3M= IGFuaW1hbHM= LkVudGl0eQ== KG5w IG11cmRlcg== IGBg ZmxhZw== IHNvbHV0aW9ucw== IEFjdGl2ZQ== IGJyaWdodA== LmRhdGU= IHNpdHU= 77yI LklE IHNpZQ== KSwNCg== YWt0 U3BhY2U= LmRhdA== LmluZGV4T2Y= aGFu YXppbmU= IFpl IGNyYXNo KC8= Pj0= 0LE= MTM5 aXZh LkF1dG9TaXpl IExhdA== X2V4dA== SW5pdGlhbGl6ZQ== LnJlZ2lzdGVy MTU2 T1BZ IHJldmVyc2U= X2Rpcw== J11b IHByb21wdA== b250bw== IEpvdXJuYWw= cm91dGVy IG15c3FsaQ== I2Vsc2U= KSI= LXhz bGV0cw== cGhhbg== LkxF MTM3 V2lsbA== IGFmZm9yZA== IHNraWxs LXRvZ2dsZQ== TkM= QmluZA== VFM= SnVzdA== aXRlcmFs WVA= CXVuc2lnbmVk IHdpbmQ= MTQ5 KSk6Cg== IHdhcm5pbmc= IFdhdGVy IGRyYWZ0 IGNt IHNhbQ== IGhvbGRpbmc= emlw IFNjaWVuY2U= IHN1cHBvc2Vk R2Vu IGRpZXQ= PGg= IFBhc3M= dmk= IGh1c2JhbmQ= 77+977+9 bm90ZQ== IEFib3V0 IEluc3RpdHV0ZQ== IGNsaW1hdGU= LkZvcm1hdA== IG51dA== ZXN0ZWQ= IGFwcGFyZW50 IGhvbGRz Zmk= bmV3cw== Q00= dmlkZW8= Jzon RElUSU9O cGluZw== IHNlbmlvcg== d2E= LS0+Cg== X2RlZmF1bHQ= IERhdGFiYXNl cmVw RVNT bmVyZ3k= LkZpbmQ= X21hc2s= IHJpc2U= IGtlcm5lbA== Ojok LlE= IG9mZmVyaW5n ZGVjbA== IENT IGxpc3RlZA== IG1vc3RseQ== ZW5nZXI= IGJsb2Nrcw== b2xv IGdvdmVybmluZw== XEY= IGNvbmNlbnQ= LmdldFRleHQ= IG1i IG9jY3VycmVk IGNoYW5naW5n U2NlbmU= X0NPREU= QmVo IlRoZQ== IHRpbGU= IEFzc29jaWF0aW9u CVA= YWx0eQ== X2Fk b2RpZXM= aWF0ZWQ= IHByZXBhcmVk cG9zc2libGU= IG1vcnQ= VEVTVA== MTQy IGlnbm9yZQ== IGNhbGM= IHJz IGFzc2VydEVxdWFscw== IHN6 IFRISVM= LiIK IGNhbnZhcw== amF2YQ== IGR1dA== VkFMSUQ= LnNxbA== LmlucHV0 IGF1eA== U3Vw IGFydGlzdA== VmVj X1RJTUU= LnN0cmluZ2lmeQ== ZXR3ZWVu IENhdGVnb3J5 IFst IERldkV4cHJlc3M= IEp1bA== IHJpbmc= LmVk WVk= TGV0 VGV4dEZpZWxk IGZsYXQ= X3ByaW50 IE9USEVS YWRpYW4= IGNoZWNrZWQ= ZWxl QWxpZ24= c3RhbmRpbmc= IFtdLA== IGxhYg== dWNreQ== IENocmlzdG1hcw== KGltYWdl Lm1vZHVsZQ== IGxvdHM= IHNsaWdodGx5 KGZpbmFs ZXJnZQ== 6L8= MTQ3 IFBvbGljZQ== MTQz IFJpZ2h0 IGF3YXJk IE9T IHt9Cgo= IHB0cg== b3Zlcw== aWNhdGVk 0LXQvA== IG1hbmFnZQ== b2xpZGF5 QW1vdW50 b29sU3RyaXA= dGJvZHk= TmF2 d3JhcA== QkI= IHdhdGNoaW5n YXJpb3M= IG9wdGlvbmFs X0s= IExpY2Vuc2Vk Lk1hcA== VGltZXI= IEFQ IFJldg== KG8= LGM= dW1pbg== ZXRhaWxlZA== IEh5 IGJsYW5r YWdnZXI= IFNlbGY= KClb Lm1ha2U= ZWFybg== Y2hhbm5lbA== PHByZQ== YmxlbQ== X3Bhc3N3b3Jk X3Nw aWNpbmc= ZXo= IHRoZW9yeQ== IFRlcg== MTg0 LG4= bG9nbw== IEhUVFA= KCkpKQ== LmhhbmRsZQ== PjsK V29ybGQ= IHB5dGhvbg== IGxpZg== IHRyYXY= IGNvbnZlbg== Y29tcGFueQ== IENsdWI= MTM4 VmVy QnRu IHpvbmU= cHJvZHVjdHM= IEVkdWM= IHZlcmlmeQ== IE1pbA== b25v XSk7Cgo= RU5DRQ== IHBhY2tldA== IGNlcg== IGVudW1lcg== IHBhcnM= Zm9ybWVk IG9jY3Vw dHJl IGV4ZXJjaXNl RGF5 X3N1bQ== IGFza2luZw== YXB0aW9u IG9yZGVycw== IHNwZW5kaW5n IEVSUg== LkRpcw== IFV0aWw= 4oCcSQ== XCc= Pyk= Lz4K IGVtb3Q= IGluZmx1ZW5jZQ== IEFmcmljYQ== YXR0ZXJz 2YU= LnNlc3Npb24= IGNoaWVm CQkJCQkJCQkJCQk= IHRvbQ== Y2x1ZGVk c2VyaWFs X2hhbmRsZXI= LlR5cGU= YXBlZA== IHBvbGljaWVz LWV4 LXRy Ymxhbms= bWVyY2U= IGNvdmVyYWdl IHJj X21hdHJpeA== X2JveA== IGNoYXJnZXM= IEJvc3Rvbg== UGU= IGNpcmN1bQ== IGZpbGxlZA== MTQ4 IG5vcnRo aWN0dXJlQm94 CXJlcw== 6K4= IHRlcm1pbg== IFvigKY= SVJFQ1Q= IGJlcg== ICIuLi8uLi8= cmV0Y2g= LmNvZGU= X2NvbA== IEdvdmVybm1lbnQ= IGFyZ3Y= IExvcmQ= YXNp RXhlYw== CWxldA== dmVydGlz IGRpc2N1c3Npb24= ZW5hbmNl b3V0dWJl dHlwZW9m IHNlcnZlZA== IFB1dA== CXg= IHN3ZWV0 QmVmb3Jl YXRlZ3k= Lm9m IE1hdGVyaWFs U29ydA== T05U aWdpdGFs V2h5 IHN1c3Q= IOc= YWJldA== IHNlZ21lbnQ= IFtdLAo= IE11c2xpbQ== IGZpbmRWaWV3QnlJZA== Y3V0 X1RFWFQ= IE1hcnk= IGxvdmVk IGxpZQ== IEpP IGlzc2V0 bW9udGg= IHByaW1l dGk= IENhcm9s VXNl MTQ2 IFBvcA== IFNhdmU= SW50ZXJ2YWw= ZXhlY3V0ZQ== ZHk= IElyYW4= X2NvbnQ= CVQ= IHBoYXNl Y2hlY2tib3g= d2Vlaw== IGhpZGU= IHRpbA== IGp1 Q3VzdG9t YnVyZw== L00= VE9O IHF1YW50 IHJ1Yg== aXhlbHM= IGluc3RhbGxlZA== IGR1bXA= IHByb3Blcmx5 KExpc3Q= IGRlY2lkZQ== YXBwbHk= SGFz IGtlZXBpbmc= IGNpdGl6ZW5z IGpvaW50 cG9vbA== U29ja2V0 X29w IHdlYXBvbg== Z25vcmU= IEV4ZWM= b3R0ZW4= IE1T ICgt IFJldmlldw== IGV4YW1wbGVz IHRpZ2h0 ISg= RFA= IE1lc3NhZ2VCb3g= IHBob3RvZ3JhcGg= MTY0 VVJJ w6l0 bG93 IEdyYW5k LnBlcnNpc3RlbmNl IG1haW50YWlu IG51bXM= IHppcA== aWFscw== IEdldHM= cGVn IEJ1ZmZlcg== fn5+fg== cmFzdHJ1Y3R1cmU= IFBM dWVu b2JieQ== c2l6ZW9m IHBpYw== IHNlZWQ= IGV4cGVyaWVuY2Vk IG9kZA== IGtpY2s= IHByb2NlZHVyZQ== YXZpZ2F0b3I= LW9u LGo= IEFsdGhvdWdo IHVzZXJJZA== YWNjZXB0 Qmx1ZQ== SUNvbG9y bGF5ZXI= YXZhaWxhYmxl IGVuZHM= LnRhYmxl IGRhdGFzZXQ= YnVz IGV4cGxhaW4= KHBybw== IENvbW1pdHRlZQ== IG5vdGVk XToK RGlt c3RkaW8= MTU0 LiIsCg== X3NvdXJjZQ== MTgx IFdlZWs= IEVkZ2U= IG9wZXJhdGluZw== IGVzdGU= aXBs MzMw YWdpbmF0aW9u IHByb2NlZWQ= IGFuaW1hdGlvbg== Lk1vZGVscw== IFdhdGNo aWF0 IG9wcG9u L0E= UmVwb3J0 IHNvdW5kcw== X2J1Zg== SUVMRA== IGJ1bmQ= CWdldA== LnBy KHRtcA== IGtpZA== PgoKCg== IHlhbmc= Tm90Rm91bmQ= 0YY= bWF0aA== QGdtYWls IExJTUlU cmVkaWVudHM= IHZlbnQ= YXZpZ2F0ZQ== TG9vaw== IHJlbGlnaW91cw== IHJhbmQ= cmlv KEdM X2lw dWFu aWNpZW5jeQ== IENoYW5nZQ== Pg0KDQo= IEVudGl0eQ== IHJlbmNvbnRyZQ== IFJldA== cGxhbg== w6lu Qk9PTA== dXJpZXM= dHJhaW4= RGVmaW5pdGlvbg== PT09PT09PT09PT09 eno= NDUw QW5pbWF0aW9u IE9L X21lbnU= LmJs X3Njb3Jl IGFjYWQ= KFN5c3RlbQ== IHJlZnJlc2g= Jz0+JA== LkdyYXBoaWNz YW1lbnRv cGlk dGM= IHRpcHM= IGhvbWVz IGZ1ZWw= 4pY= X2hlbHBlcg== ICANCg== IFJvb20= LkNsb3Nl X2F0dHI= IE1vdW50 IEV2 YXJzZXI= X3RvcA== ZWFo IERlbGV0ZQ== 44CN dWtl IHVzYWdl YXJpYQ== X2Rldg== IHRleHR1cmU= IGNvbnZlcnNhdGlvbg== ZXBlcg== QmVhbg== ZG9uZQ== bm9uYXRvbWlj IFNlY29uZA== IHNob290aW5n X3ByZQ== Q29tcG9uZW50cw== IF0KCg== X18s c3RpdHV0aW9u LkNoYXI= PigpOwoK IHByZXNlbnRlZA== IHdh b2tlcg== LQoK aW5lcg== IGJlY29taW5n IGluY2lkZW50 QXR0 MTYy IHJldmVhbGVk Zm9yYw== IGJvb3Q= LnBhZ2U= RW51bWVyYXRvcg== MTY1 Xy0+ UGhvdG8= IHNwcmluZw== LiIs IERpY3Rpb25hcnk= QkpFQ1Q= IGxvY2F0aW9ucw== IHNhbXBsZXM= SW5wdXRTdHJlYW0= IEJyb3du IHN0YXRz cXVhbGl0eQ== 0YU= LWRpcw== IGhlbHBpbmc= IHBlZA== MjI0 KHNl IFdobw== YWxpYW4= aW50ZXJuYWw= IGZ0 PigpLg== LT57 IG1pbmU= IHNlY3Rvcg== IGdybw== IG9wcG9ydHVuaXRpZXM= IMO8 IG1w IGFsbGVnZWQ= IGRvdWJ0 TW91c2U= QWJvdXQ= X3BhcnQ= IGNoYWly IHN0b3BwZWQ= MTYx bG9vcA== ZW50aXRpZXM= IGFwcHM= YW5zaW9u IG1lbnRhbA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= RlI= IGRlZmVuZA== Y2FyZQ== IGlkZWFs L2FwaQ== dXJmYWNl MDEx IGVsZQ== dWxhdG9y IFJpZ2h0cw== YW5ndWFnZXM= IGZ1bmRz IGFkYXB0 QXR0cmlidXRlcw== IGRlcGxveQ== b3B0cw== IHZhbGlkYXRpb24= IGNvbmNlcm5z dWNl Lm51bQ== dWx0dXJl aWxh IGN1cA== IHB1cmU= LkZvcmU= MTgz IEhhc2hNYXA= LnZhbHVlT2Y= YXNt TU8= IGNz IHN0b3Jlcw== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IGNvbW11bmljYXRpb24= bWVt LkV2ZW50SGFuZGxlcg== LlN0YXR1cw== X3JpZ2h0 LnNldE9u U2hlZXQ= IGlkZW50aWZ5 ZW5lcmF0ZWQ= b3JkZXJlZA== ICJb IHN3ZQ== Q29uZGl0aW9u IEFjY29yZGluZw== IHByZXBhcmU= IHJvYg== UG9vbA== IHNwb3J0 cnY= IFJvdXRlcg== IGFsdGVybmF0aXZl KFtd IENoaWNhZ28= aXBoZXI= aXNjaGU= IERpcmVjdG9y a2w= IFdpbA== a2V5cw== IG15c3Fs IHdlbGNvbWU= a2luZw== IE1hbmFnZXI= IGNhdWdodA== KX0K U2NvcmU= X1BS IHN1cnZleQ== aGFi SGVhZGVycw== QURFUg== IGRlY29y IHR1cm5z IHJhZGl1cw== ZXJydXB0 Q29y IG1lbA== IGludHI= KHE= IEFD YW1vcw== TUFY IEdyaWQ= IEplc3Vz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LkRF IHRz IGxpbmtlZA== ZnJlZQ== IFF0 IC8qKg0K IGZhc3Rlcg== Y3Ry X0o= RFQ= LkNoZWNr IGNvbWJpbmF0aW9u IGludGVuZGVk LXRoZQ== LXR5cGU= MTgy ZWN0b3Jz YW1p dXRpbmc= IHVtYQ== WE1M VUNU QXA= IFJhbmRvbQ== IHJhbg== LnNvcnQ= IHNvcnRlZA== LlVu NDAx X1BFUg== aXRvcnk= IHByaW9yaXR5 IEdhbA== IE9sZA== aG90 IERpc3BsYXk= KHN1Yg== X1RI X1k= IENhcmU= bG9hZGluZw== S2luZA== X2hhbmRsZQ== LCw= cmFzZQ== X3JlcGxhY2U= LmFkZEV2ZW50TGlzdGVuZXI= IFJU MTcy IGVudGVyZWQ= Z2Vycw== IGljaA== KHN0YXJ0 MjA1 L2FwcA== IGJyb3RoZXI= TWVtb3J5 T3V0bGV0 IHV0Zg== cHJlYw== IG5hdmlnYXRpb24= T1JL IGRzdA== RGV0YWls IGF1ZGllbmNl IGR1cg== IGNsdXN0ZXI= dW5jaGVk IF0s IGNvbWZvcnRhYmxl LnZhbHVlcw== IFRvdGFs IHNuYXA= IHN0YW5kYXJkcw== IHBlcmZvcm1lZA== aGFuZA== KCJA 5a0= IHBoaWw= aWJy dHJpbQ== IGZvcmdldA== MTU3 IGRvY3Rvcg== LlRleHRCb3g= Mzc3 aWNvbnM= LHM= IE9w U20= U3RvcA== CUxpc3Q= CXU= Q29tbWVudA== X1ZFUlNJT04= Llh0cmE= UGVyc29u cmI= TE9C ICAgICAgICAgICAgICAgICAgICAK IENlbnRyYWw= Mjcw SUNL cmFx IHB1dHRpbmc= IG1k IExvdmU= UHJvZ3JhbQ== Qm9yZGVy b29y IGFsbG93aW5n YWZ0ZXI= IGVudHJpZXM= IE1heWJl XSku IFNob3J0 KVw= Lm5vdw== ZnJpZW5k IHByZWZlcg== IEdQSU8= b3Npcw== IEdhbWVPYmplY3Q= IHNraXA= IGNvbXBldGl0aW9u X21hdGNo bGljYXRpb25z X0NPTlQ= Lmdyb3VwQm94 IGFscw== NjY2 Ildl X2Vx bGFu X3NlYXJjaA== IE11c2lj YXNpcw== IGJpbmQ= IElzbGFuZA== cnVt KEU= IHNlYXQ= VmlkZW8= IGFjaw== cmVlaw== PXsoKQ== IHJhdGluZw== IHJlc3RhdXJhbnQ= NDU2 REVY KGJ1Zg== cHBpbmc= dWFsaXR5 IGxlYWd1ZQ== MTc2 IGZvY3VzZWQ= YXBvbg== JGRhdGE= Q0xVRA== Q0xVRElORw== IGFic29sdXRl KHF1ZXJ5 IHRlbGxz QW5n IGNvbW11bml0aWVz IGhvbmVzdA== b2tpbmc= IGFwYXJ0 YXJpdHk= LyQ= X21vZHVsZQ== IEVuYw== LmFu LkNvbmZpZw== Q3Jl IHNob2Nr IEFyYWI= SUVOVA== L3Jl IHJldHJpZQ== eWNsZXI= aXNh IE9yZ2Fu LmdyYXBo IO0= IEJBUw== RW51bQ== IHBvc3NpYmx5 0YDQsNA= IEphcGFuZXNl IGNyYWZ0 IFBsYWNl IHRhbGVudA== IGZ1bmRpbmc= IGNvbmZpcm1lZA== IGN5Y2xl L3g= R0U= IGhlYXJpbmc= IHBsYW50cw== IG1vdXRo cGFnZXM= b3JpYQ== IFJlbW92ZQ== X3RvdGFs IG9k b2xsYXBzZQ== ZG9vcg== IGJvdWdodA== IGFkZHI= QVJDSA== X2RpbQ== ZGRlbg== IGRlY2FkZXM= UkVRVUVTVA== IHZlcnNpb25z ZmlyZQ== MDA2 IG1vdmVz ZmI= IGNvZmZlZQ== LmNvbm5lY3Q= IFJvdw== IHNjaGVtYQ== U2NvcGU= LVR5cGU= IGZpZ2h0aW5n IHJldGFpbA== IG1vZGlmaWVk VEY= RmlsZXM= bmll X2NvbW1hbmQ= c3RvbmU= INGC X3RocmVhZA== IGJvbmQ= IERldmVsb3BtZW50 IHB0 Rk9STQ== cGxldA== IGlkZW50aWZpZWQ= Y3Bw MjA2 MjI1 IGNvZGluZw== b2tlZA== IE1hc3Rlcg== SURUSA== IHJlc2lkZW50cw== cmVkaXQ= IFBob3Rv PS0= dW50ZQ== YXRldXI= MTU5 X1NUQVRF IFNpbmc= IHNoZWV0 LnZhbA== b3JzZQ== IGhlcnM= IGRldGVybWluZWQ= Q29tbW9u IHdlZA== X3F1ZXVl UEg= IEF0bA== Y3JlZA== L0xJQ0VOU0U= IG1lcw== IGFkdmFuY2Vk LmphdmE= LlNo R28= a2lsbA== ZnA= X3NldHRpbmdz IHBhbA== IHRydWNr IGNvbWJpbmVk ICIkew== IENvcnBvcg== IGpvaW5lZA== IEpvc2U= IEN1cA== dW5z ZXN0aXZhbA== bGV2aXNpb24= IGJyb2tlbg== IG1hcnJpYWdl IFdlc3Rlcm4= IHJlcHJlc2VudHM= IFRpdGxl IHNz LkFzcw== b25nb29zZQ== aWVudG8= PD4oKTsK IGFic29sdXRlbHk= IHNtb290aA== VEVSTg== IFVubGVzcw== V29yZA== IG1lcmdl aWdhbg== IFZvbA== IG5u LmdldElk INC3 MTcx IHNleHk= IHNlZWtpbmc= U2luZ2xl LnRoaXM= MTc5 IGtvbQ== Ym91bmQ= OyI= IGZvbnRTaXpl X2Rm IGluanVyeQ== KEg= IGlzc3VlZA== X0VORA== OnNlbGY= MDIw IHBhdGNo IGxlYXZlcw== IGFkb3B0 RmlsZU5hbWU= 44CQ IGV4ZWN1dGl2ZQ== IEJ5dGU= XSkpCg== IG51 b3V0aW5n Y2x1ZGluZw== LVI= Lm9wdGlvbnM= IHN1YnN0YW50 YXZheA== IEJVVA== IHRlY2huaWNhbA== IHR3aWNl IG3DoXM= IHVuaXZlcnM= eXI= IGRyYWc= IERD IHNlZA== IGJvdA== IFBhbA== IEhhbGw= Zm9yY2VtZW50 IGF1Y2g= Lm1vZA== bm90YXRpb24= X2ZpbGVz LmxpbmU= X2ZsYWc= W25hbWU= IHJlc29sdXRpb24= IGJvdHQ= KCJb ZW5kZQ== KGFycg== RnJlZQ== KEAi IERpc3RyaWN0 UEVD Oi0= UGlja2Vy IEpv ICAgICAK IFJpdmVy X3Jvd3M= IGhlbHBmdWw= IG1hc3NpdmU= LS0tCg== IG1lYXN1cmVz MDA3 IFJ1bnRpbWU= IHdvcnJ5 IFNwZWM= CUQ= 44CR ICl7Cg== IHdvcnNl KGZpbGVuYW1l IGxheQ== IG1hZ2lj IFRoZWly b3Vs c3Ryb3k= IFdoZXJl Mjgw IHN1ZGRlbg== IGRlZmU= IGJpbmRpbmc= IGZsaWdodA== IE9uSW5pdA== IFdvbWVu IFBvbGljeQ== IGRydWdz aXNoaW5n KCcuLi8= IE1lbA== cGVhdA== dG9y IHByb3Bvc2Vk IHN0YXRlZA== X1JFUw== IGVhc3Q= MjEy IENPTkRJVElPTg== X2Rlc2M= IHdpbm5pbmc= Zm9saW8= TWFwcGVy IFBhbg== IEFuZ2U= LnNlcnZsZXQ= IGNvcGllcw== TE0= IHZt 5Y0= IGRpY3Rpb25hcnk= U2Vn MTc3 ZWxpbmVz IFNlbmQ= IGlyb24= IEZvcnQ= MTY2 LmRvbWFpbg== IGRlYmF0ZQ== Tm90TnVsbA== ZXE= YWNoZXI= bGY= CWZtdA== IGxhd3k= MTc4 xJ8= IE1lbg== IHRyaW0= KE5VTEw= ICEh IHBhZA== IGZvbGxvd3M= Il1bIg== cmVxdQ== IEVw LmdpdGh1Yg== KGltZw== ZXRv KCdc U2VydmljZXM= dW1ibmFpbA== X21haW4= cGxldGVk Zm9ydHVuYXRlbHk= IHdpbmRvd3M= IHBsYW5l IENvbm5lY3Rpb24= LmxvY2Fs dWFyZA== fVw= PT0i YW5kb24= IFJveQ== d2VzdA== MTU4 aWdpbmFs ZW1pZXM= aXR6 Jyk6Cg== IFBldGVy IHRvdWdo IHJlZHVjZWQ= IGNhbGN1bGF0ZQ== IHJhcGlk Y3VzdG9tZXI= IGVmZmljaWVudA== IG1lZGl1bQ== IGZlbGw= LnJlZg== IENhcw== IGZlZWRiYWNr U3BlZWQ= KG91dHB1dA== YWpl IGNhdGVnb3JpZXM= IGZlZQ== fTs= IGRlbGV0ZWQ= cmVo IHByb29m RGVzYw== QnVpbGQ= IHNpZGVz LkFycmF5TGlzdA== LSU= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 2LE= Lm1hdGNo 0LvQuA== IGZlZWxz IGFjaGlldmU= IGNsaW0= X09O IENE IHRlYWNoZXI= X2N1cnJlbnQ= Ym4= X1BM aXN0aW5n RW5hYmxl R0VO IHR2 IHNvY2s= IHBsYXlz IGRpc2NvdW50 IEtF IERlYnVn Rm9yZQ== IElyYXE= IGFwcGVhcmFuY2U= TW9u IHN0eWxlZA== IEh1bWFu aW90 IEhpc3Rvcnk= IHNhYw== IENvbGxlY3Rpb24= IHJlY29tbWVuZGVk LlNlbGVjdGVk IG9yZ2FuaXphdGlvbnM= IGRpc2NvdmVyZWQ= Y29ob2w= YWRhcw== IFRob21hcw== TWF5 IGNvbnNlcnY= IGRvbWlu IEZvbGxvdw== IFNlY3Rpb24= IFRoYW5rcw== VXNlcm5hbWU= IHJlY2lwZQ== IHdvbmRlcmZ1bA== LnNsZWVw X2lm CQoJCg== b3Jubw== IHJ1 X3RhcmdldA== LiIi 4KY= RXZlbnRBcmdz IGlucHV0cw== IGZpZg== IHZpc2lvbg== Y3k= IFNlcmllcw== KSgoKA== IHRyYWRpbmc= IG1hcmtlcg== QmVnaW4= IHR5cGljYWxseQ== IGNhdXNlcw== ZHJvcGRvd24= X0RFQlVH MjYw IGRldGVjdA== Y291bnRyeQ== ISIpOwo= CVI= YXBweQ== IGNyZWY= KCc8 Ij0+ IExF cmVhZGVy IGFkbWluaXN0cg== w7U= dWNrZXQ= IGZhc2hpb24= LmNoYXI= aXphcg== IGRpc2FibGU= IHN1Yw== IExpdmU= aXNzdWU= IG1ldGFkYXRh ZmxhZ3M= IPCf IGNvbW1pdHRlZA== IHZh IHJvdWdo ICcnJwo= IGhpZ2hsaWdodA== X3ZhcnM= Vk8= IGVuY29kaW5n LVo= X3NpZ24= JCgiIw== IHJhaW4= cmVhdGVzdA== IEVORA== U2VsZWN0aW9u IGNhbmRpZGF0ZXM= IHNhdg== LkVtcHR5 IGRlY2lzaW9ucw== IGNvbGxhYm9y cmlkZ2U= ZmVlZA== cmVzc2lvbg== IHBlcnNvbnM= Vk0= MDA4 ZWdh X0JJVA== QWNjb3JkaW5n YWNrZWQ= IGRvbGxhcnM= X2xvc3M= IENvc3Q= fSIK Tm90aWZpY2F0aW9u IHByb3N0aXQ= IGF1dGhvcml0eQ== LnJlYw== IHNwb2tlcw== IFRvZGF5 aXN0YW50 IEhlYWQ= 4oCdLg== ZXJ0YWlubWVudA== Y2Vhbg== Y3VsYXRl IHZlbg== SG93ZXZlcg== X2Fycg== IHRva2Vucw== R3JhcGg= IEp1ZA== IFZpcmdpbg== IFNlcmlhbA== dW5uaW5n TXV0YWJsZQ== YWdlcnM= LmNzdg== IGRldmVsb3Bpbmc= IGluc3RydWN0aW9ucw== IHByb21pc2U= IHJlcXVlc3RlZA== X2VuY29kZQ== LyI= IEljb24= dWlsdA== LWRheQ== IGludGVsbGlnZW5jZQ== LklT IE9ic2VydmFibGU= IEhhcmQ= Qm9vbA== MjEx aWRlbnRpYWw= LkFuY2hvcg== IHNlbGxpbmc= Q0k= QUdFUw== dGxl YnVy VUZGRVI= Ulk= IGJpZ2dlcg== IHJhdA== IGZhbW91cw== IHR5cGVuYW1l IGV4cGxhaW5lZA== fX0K IG51Y2xlYXI= LU4= IGNyaXNpcw== IEVudGVy IGFuc3dlcnM= LyR7 L3Bs IHNlcXU= X25leHQ= bWFzaw== IHN0YW5kaW5n IHBsZW50eQ== IENyb3Nz CXJldA== ZHJv IENhc3Q= MTY3 PXRydWU= IENocmlz aWNpbw== IE1pa2U= RGVjaW1hbA== YWRkQ29tcG9uZW50 TGVu IGNvY2s= ICN7 VVJO PHRy IGF1dGhvcml0aWVz UmVzb3VyY2Vz LUg= Qm90dG9t MDEy X3F1 cHV0ZXI= ZXN0ZXJkYXk= RGlzcGF0Y2g= c2luY2U= IGZhbWlsaWFy LGk= VkM= IG1lbnQ= LEM= IGZyZWVkb20= IHJvdXRlcw== IEJ1eQ== IGNvbW1hbmRz IG1lc2g= L0M= IFNldHRpbmdz LXN0eWxl IHdpdG5lc3M= IGNsZQ== IHVuaW9u ZWZhdWx0 YXJldA== IHRob3VnaHRz IC0tLS0= X3Byb2Nlc3M= X3Vz aW5nbHk= VUVT VG91Y2g= INC8 X29wZW4= IFZlYw== IHJld2FyZA== LkNsaWNr Lzo= IG5pZQ== Q2hhbmdlcw== TW9udGg= 77yf IGV4ZWN1dGlvbg== IGJlYWNo KEludGVnZXI= CWE= Lyc= LkZvbnRTdHlsZQ== IGFib3J0 IFNpbmdsZQ== KGlzc2V0 IGRw IH19PC8= IE1h MjE0 LlJvd3M= IFBldA== JSk= cmFuZA== 6YA= UnVsZQ== IGhlbA== MDIx UklURQ== IHF1aWV0 IHJhdGlv IENPTkRJVElPTlM= b3NvcGg= IElM IGFkdmVudA== Y2Fw Ozwv IFVTQg== RHJpdmVy IG91cnM= IEpvaG5zb24= Lks= X2RlbGV0ZQ== LnE= CXN0cg== L2NvbW1vbg== CXN0cmluZw== IFBERg== YWN0cw== LkFjdGlvbg== IFF1ZXJ5 LnJlc3BvbnNl IEdpcmw= IHByb2Nlc3Nlcw== PEludGVnZXI= aW1v IGFkZHM= IGVudGlyZWx5 IHdhc2g= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IGFuaW1hdGVk IHByb2ZpdA== ZW5jaW5n L1M= IFN5bQ== IG1hbnVhbA== RG93bmxvYWQ= ICghJA== IG1vdGlvbg== d2VicGFjaw== LWJvdHRvbQ== IGdyYXR1aXQ= UEc= KDos IGVyYQ== IGhv IEppbQ== cXVpcg== IEJBU0lT w6Fu REVS IGV4cGVuc2l2ZQ== X2Nv Qm91bmRz V2VsbA== IERlbW9jcmF0aWM= IOKGkg== LlJlbQ== X1NZ bmFtZXM= IFZp IGlzaW5zdGFuY2U= XCI+ ICo9 IFBT IGRhbmdlcm91cw== W3A= T01F T3RoZXI= IFN0cmluZ0J1aWxkZXI= UG9pbnRz aGVhZGluZw== IGN1cnJlbmN5 IHBlcmNlbnRhZ2U= X0FQSQ== IGNsYXNzaWM= dGhlYWQ= IE1P RkU= SWR4 YXdhaXQ= IMOo IGFjY2lkZW50 IHZhcmlhbnQ= IG15c3Q= IExhbmQ= IEJyZQ== IGhhcm0= IEFjYw== IGNoYXJnZWQ= aW9uZXM= VmlzaWJpbGl0eQ== YXJyeQ== IExhbmd1YWdl IHdhbGtpbmc= Ii4KCg== aWZlcg== IGxlYWRlcnNoaXA= LkZyb20= eW5hbQ== IHRpbWVzdGFtcA== aXB0 IEhhcw== UkVGRVI= IEl0cw== IGxpc3RlbmVy VVRF MjEz X2Rlc2NyaXB0aW9u IGV4cGVyaWVuY2Vz IGNyZWF0ZXM= UlM= Y2FydA== YmxhY2s= IGNob2ljZXM= d2Fy NzUw ICcnJw== IG9yZGVyZWQ= IGV2ZW5pbmc= IHBpbA== IHR1bg== IEJhZA== KGFwcA== cmFuZG9t IGV4cGxpY2l0 IGFycml2ZWQ= IGZseQ== IGVjb25vbQ== LW1haWw= IGxpc3Rz IGFyY2hpdGVjdA== MjM0 IFBheQ== IGRz IFNvbA== IHZlaGljbGVz SHo= LWNvbQ== IGtpbmc= X2VxdWFs IEhlbHA= IGFidXNl NDgw MTY5 LS07Cg== IGV4dHI= IGNoZW1pY2Fs 5L8= IG9yaWVudA== IGJyZWF0aA== IFNwYWNl KGVsZW1lbnQ= d2FpdA== REVE aWdtYQ== IGVudHI= IHNvYg== LW5hbWU= IGFmZmVjdGVk aWth IGNvYWw= X3dvcms= IGh1bmRyZWRz IHBvbGl0aWNz c3ViamVjdA== IGNvbnN1bWVy QU5HRQ== IHJlcGVhdGVk U2VuZA== ICNb IHByb3RvY29s IGxlYWRz dXNldW0= RXZlcnk= ODA4 MTc0 SW1wb3J0 KGNvdW50 IGNoYWxsZW5nZXM= IG5vdmVs IGRlcGFydA== Yml0cw== LkN1cnJlbnQ= IGAkew== b3Rpbmc= KFw= IGNyZWF0aXZl IGJ1ZmY= IGludHJvZHVjZWQ= dXNpYw== bW9kdWxlcw== QXJl LWRvYw== bGFuZ3VhZ2U= X2NhY2hl IHRvZA== Pz48Lw== b21ldGhpbmc= IGh1bg== 5bo= YXRlcnM= SW50ZW50 IGltcGxlbWVudGVk IENhc2U= Q2hpbGRyZW4= IG5vdGlmaWNhdGlvbg== UmVuZGVyZXI= V3JhcHBlcg== T2JqZWN0cw== dGw= LkNvbnRhaW5z UGx1Z2lu LnJvdw== IGZvcmc= IHBlcm1pdA== IHRhcmdldHM= IElG IHRpcA== c2V4 IHN1cHBvcnRz IGZvbGQ= cGhvdG8= fSwNCg== IGdvb2dsZQ== JCgnIw== IHNoYXJpbmc= IGdvb2Rz dnM= IERhbg== UmF0ZQ== IE1hcnRpbg== IG1hbm5lcg== bGll LlRoZQ== SW50ZXJuYWw= IENPTlRS TW9jaw== UklHSFQ= ICd7 IGNvbnRyb2xz TWF0 IG1hbmQ= IGV4dGVuZGVk T2s= IGVtYmVk IHBsYW5ldA== IE5vbg== LWNo KSIs ZXBhcg== IGJlbGlldmVk IEVudmlyb25tZW50 IEZyaWVuZA== LXJlcw== IGhhbmRsaW5n bmlj LWxldmVs c2NyaQ== WG1s QkU= dW5nZW4= IGFsdGVy W2lkeA== UG9w Y2Ft ICgoKA== IHNoaXBwaW5n IGJhdHRlcnk= aWRkbGV3YXJl TUM= IGltcGw= b3RhdGlvbg== IExhYg== PGZvcm0= CW5hbWU= IEdhbWVz cmF5 RXh0cmE= VHdv KHBsYXllcg== IExlcw== wrA= IGNoYXJzZXQ= IGpvdXJuZXk= ZXRpbmc= 5pg= 4pQ= 55So IGRpbg== IHBlcm1hbg== IHNvbHZl IGxhdW5jaGVk IG5pbmU= IHNlbmRpbmc= IHRlbGxpbmc= LnBhc3N3b3Jk IE1hdHJpeA== ZXJpYw== IGdyYWI= LnU= IExpYnJhcnk= IGRlYnQ= SU5L LmZpbmRWaWV3QnlJZA== IGZyZXF1ZW5jeQ== LmFk X1RFU1Q= IG5lZ290 IEFmcmljYW4= c2VuZGVy xaE= R2xvYmFs MTcz IGV4cGVydHM= KyspDQo= IGRlcGVuZGluZw== Z3JheQ== IGp1ZGdl IHNlbnRlbmNl bG9zdXJl QWM= IHRyYWNl RWRnZQ== IGZyaWVuZGx5 IGNvbmNlcm5lZA== YmxvZw== IGNsYWltZWQ= fSc= aW50ZWdlcg== X3RyZWU= CWNvbnRpbnVl eGk= IGFjY2VwdGVk X29uZQ== IEVkdWNhdGlvbg== dWJsaXNoZWQ= Z29u YXBwb2ludA== b3V0cw== IG1pbmluZw== IHNvbmdz IGhlcnNlbGY= IGdyYW50ZWQ= IHBhc3Npb24= IExha2U= IGxvYW4= dWVudA== Y2hhbnQ= IGRldGFpbGVk ZXhjZXB0 X2NtZA== IEhF UmVsYXRlZA== enQ= J30sCg== IHNwZWNpZmljYWxseQ== U3RhdGlj IGNhcnJpZWQ= QU5T XCI6 Q3JlYXRlZA== IGN1bA== XS0= X2FwaQ== RlA= IHNpdHRpbmc= ICIiKQ== CWdvdG8= IEVxdQ== IGFzc2F1bHQ= a2lucw== YW5jZXI= b2dlbg== IHZvdGVycw== IFByb3Q= RGVzY3JpcHRvcg== 44O8 LkFzc2VydA== YnNpdGVz b3N0ZXI= LW1lbnU= IGFybXM= LkNsaWVudA== LmJhY2tncm91bmQ= YXZpdHk= IHZ1bA== X01BU0s= IGhvdXNpbmc= IGJlYXI= X2l0ZXI= cGlyZWQ= IG1hcmtldHM= IFN0dWRlbnQ= IHRpY2tldA== IG1pbGxpb25z ZmxhdGVy KT0= IHJlY292ZXI= IEZvcmNl IEJvdGg= IHZpY3RpbQ== IERpc2M= cmVwb3J0 IGZvdXJ0aA== IEFzc2VtYmx5 L3VzZXI= TnVsbE9y dGV4dGFyZWE= IGF0aA== IChb IGNoYW5uZWxz IEp1c3RpY2U= Y2hvaWNl TE9CQUw= ZXhlYw== ZW1hbGU= IGVsZW0= X2xl IHJlc3BvbnNpYmlsaXR5 IFR3 SUNBVElPTg== IGVsc2VpZg== IGZv YXN0cw== IHRyZWF0ZWQ= c2Vu IFZpY3Q= c3VtZXI= X0JBU0U= IGFzdA== Pnt7 IFJlc291cmNl IFN0YW5kYXJk IFByZW0= dXBkYXRlZA== aXZhbGVudA== IGFzc2V0cw== X3RlbXA= IGludGVyZXN0cw== IGhhcmR3YXJl IFJvbQ== IFNoYXJl ICcnCg== ICos IFRha2U= IEltYWdlcw== X0NIRUNL KHR5cGVvZg== IEp1bg== XDxe IGxpcXU= IHdvcnN0 eW1ib2xz CQkJICAg IGRyaXZlcnM= IERvY3VtZW50 ZW5v IFRlY2hub2xvZ3k= IGFwcHJvdmVk dW1wcw== IHNub3c= Zm9ybWFuY2U= X0FTU0VSVA== dWl0cw== MjA3 2YY= IGRpZmZlcmVuY2Vz LlZpc2libGU= CQkJDQo= IFBz X2ZldGNo IHRvZG8= LicsCg== IHNlbA== dXJlcnM= aW52YWxpZA== IHR3ZWV0 VkVM IHJlc2VhcmNoZXJz IHNwcmludGY= IFJP IHBlbA== LlRyYW5z IGlsbGVnYWw= ZGlhbG9n c21hcnR5 bGc= X01JTg== IGhlcm8= ZmluYWw= IHBw Lkxl IGNp CVJU IHN1Z2dlc3RlZA== cGRm YWNoaW5n IFJv IFByb3BlcnRpZXM= IFNp IGJ1eWluZw== IG11 IGxhbmRz aWZpZXJz IEZJTEU= Uk9VUA== IGhvbGRlcg== IFNvbg== IHN5bXB0 LnJvdXRl KT8= IGFyZ2M= IGZvcnQ= IGNhc2lubw== X2NhdGVnb3J5 IGZvcnVt MjE1 cHJlZml4 YXB0dXJl VHViZQ== ZW1z aW1pemU= IG51ZQ== YXVz Y291cnNl QVRPUg== KCkpLA== QWR2ZXJ0aXM= SU5HUw== IGFja25vdw== IEtvcmVh cGxpbmc= IHdvcmtlcg== UExJRUQ= aGFs IFJpY2hhcmQ= RWxlbWVudHM= CQkJIA== c3Rhcg== IHJlbGF0aW9uc2hpcHM= IGNoZWFw QUNI IFhNTA== LCY= IExvdWlz IHJpZGU= X0ZBSUw= IGNodW5r W3M= X09VVA== IGNob3Nlbg== X1s= Lyg= IEplZmY= X3Ns cHJpdg== IENhbmFkaWFu IHVuYWJsZQ== X0ZMQUc= IG5vcw== aGlnaA== IGxpZnQ= ZnVu KCl7 ZWxseQ== eWNsZXJWaWV3 X2Fz X0xJU1Q= IHJhZGk= LmdldFZhbHVl MzA0 IEFuZ2VsZXM= IFNwYW4= X2luc3RhbmNl aXRvcnM= MjA4 IG1pZ3JhdGlvbg== QUs= T2g= wq4= LnNlbGVjdGVk IEdU IGFkdmFuY2U= IFN0eWxl LkRhdGFHcmlkVmlldw== ZWN0aW9u 0Y4= cGlv cm9n IHNob3BwaW5n IFJlY3Q= SWxsdW1pbmF0ZQ== T1U= CWFycmF5 IHN1YnN0YW50aWFs IHByZWdu IHByb21vdGU= SUVX LkxheW91dA== IHNpZ25z Ly4= IGxldHRlcnM= Qm9hcmQ= Y3RybA== Ilw= IEpvbmVz IHZlcnRleA== IGph IGFmZmlsaQ== IHdlYWx0aA== CWRlZmF1bHQ= IHNpZ25pZmljYW50bHk= IGVj IHhz YWN0dWFs LnBlcg== X3N0ZXA= YW52YXM= bWFj IHRyYW5zbA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= SXRlcmF0b3I= IG9jaA== YWdub3N0aWM= IER1cmluZw== IERFRkFVTFQ= IHRpbGw= IHNpZ25hdHVyZQ== IGJpcmQ= IE9s MzEw IEly SFM= YXZhdGFy RVNTQUdF IGVsZXY= IG10 IE5hdg== IHJlbGF4 IHBsYXRl SVRFTQ== KGRhdGU= Lm5vdA== IGdyYWRl IH0pLAo= PyIKCg== aWVuY2Vz SGlnaA== IERJUw== MjMx ZGlzYWJsZWQ= UVVJ IG5vaXNl YXV4 IFVQ ODg4 b3Nh IHZvYw== ICkp b2NvbQ== X09GRg== IERi TG9jaw== LmVjbGlwc2U= LGQ= IERyYXc= ICIo IHZpc2l0ZWQ= IOKI IHN1Y2NlZWQ= IGltcG9zc2libGU= YWlyZQ== IFR1cm4= IGRpc2g= Rkc= IHNlbnNvcg== QU5O YWJh IHN1cmc= XSk7DQo= IGZw X2Fu LUo= LUc= IEpvYg== Q29udmVydA== IEtFWQ== IGF1dGhvcnM= X3NlcnZlcg== XHI= IC0qLQ== ZmxleA== IHNvYw== UmV0 IHNhbHQ= IOKApgoK IENsZWFy KHBhZ2U= LWRhbmdlcg== IHJvb21z Y29udg== I3s= Lm9w IEFyZWE= X1ND aGVu IGJlZ2lucw== LXk= IGV4Y2l0ZWQ= IGlnbm9yZWQ= IGJvbnVz c3R1ZGVudA== IE1lbWJlcg== IHJlbGF0aXZlbHk= IExvdw== IFByb2R1 YXRld2F5 cG9zdXJl IHRoaWNr YW5pZWw= KHZpZXc= IENydXNo RXh0ZW5zaW9u SWw= ZWVk TE9D Lmlt Lkl0ZW1z IGNvbmZsaWN0 LnByZXZlbnQ= MjUy IG9uQ3JlYXRl dXY= aXNlcg== IHdhdmU= TWFy IENvbW11bml0eQ== aWNoZQ== IE5vdGhpbmc= W20= IExlZQ== cmllbmRz MjMy w6hyZQ== ISEh YW56 LnJlc3VsdA== IFNL X1BBUkFN IGRlbW9jcg== QmFja0NvbG9y LmV4aXN0cw== Ikl0 KG9wdGlvbnM= cmF6eQ== YXNlcg== XERhdGFiYXNl YWxlbmRhcg== X2Fzcw== O30K dmVydGV4 aW5lY3JhZnQ= V2FybmluZw== YXJnbw== IGFjdG9y IEluc3RlYWQ= IFVzaW5n U2VsZg== QGludGVyZmFjZQ== IHNwZWFraW5n IFBhcmlz IExJQ0VOU0U= Lm5vZGU= IEZvb2Q= RUlG IEJp LlN0YXJ0 IElC IHVuaXZlcnNpdHk= MjU0 IEhlYWRlcg== LnByb2R1Y3Q= NDA5 Q29weQ== ZXRj cmljYWw= ID4+Pg== Ym9va3M= IGFsZ29yaXRobQ== ICdfXw== KGphdmF4 IG51bWVyb3Vz U2hhcmU= SGF2ZQ== IHJlY3J1 IHByb3Zl LnN1YnN0cmluZw== aGVhbHRo 0LXQuw== IGRlY2ltYWw= IGNvbW1pc3Npb24= c2NyaXB0aW9u eEM= IHN1bW1hcnk= YXR0ZWQ= IGNsb3Nlcg== ZmluaXNoZWQ= KCkpewo= IFdvb2Q= MzAx X2ZpZWxkcw== a3U= X2l0ZW1z RmxhZw== IGNvbmZpZGVuY2U= IEZlZGVyYWw= ZHV4 IGNvbXBhdA== IHZlcnRpY2Fs 0Lk= w6hz OyI+Cg== X21hbmFnZXI= KCkpKQo= SURF OiIs MjM1 X18K IFdheQ== MjIx 0Yg= VGVtcA== IFNUUg== cml0dGVu U3luYw== IEFW IENFTw== IEd1aWQ= IGVudmlyb25tZW50YWw= IGNvcnJlc3BvbmRpbmc= CWNvbnNvbGU= IGp1c3RpY2U= IEpT IGxpdmVk Z2Fy IEdyYXBo IFN0YXQ= IGlQaG9uZQ== LmFs IEhE IG9jY3Vy IHRocmVzaG9sZA== NTA5 IG9uY2xpY2s= UkVH LkdyYXBoaWNzVW5pdA== TWV0YQ== xb4= IGN1bQ== LmdudQ== w6s= IG9idGFpbmVk IGNvbXBsYWludA== IGVhdGluZw== IHRhcg== X3Rhc2s= IG9wdHM= MjE2 KHRv UGFzcw== IHBsYXN0aWM= dGlsaXR5 IFdpbg== LnByZXZlbnREZWZhdWx0 cGlsZQ== IEdhcg== IHF1YW50aXR5 X2xhc3Q= IGdyZWF0ZXN0 RGFv X0RJUw== IFVzZWQ= IEhQ cml0aW5n U0lPTg== Ymx1ZQ== ZG9tYWlu IHNjb3Jlcw== Tm9ybWFs X2FkbWlu IEFTU0VSVA== VGhlbg== Kioq ZGlzdA== bG9u IGhhdGU= c2hhbA== SW1hZ2VWaWV3 ZGF0YWJhc2U= IHBhbmQ= IGxvZ2lj PWZhbHNl Ymc= IENvbmZpZ3VyYXRpb24= IG51cg== T0c= IG1hcnJpZWQ= Ois= IGRyb3BwZWQ= MDQw IHJlZ2lzdHJhdGlvbg== 0L7QvA== dWx0aXBsZQ== aXplcnM= c2hhcGU= LmNvcHk= IHdlYXJpbmc= IENhdGg= IGRlZGljYXRlZA== IC4uLgo= IGFkdm9j IEZhbWlseQ== IHN0YXRlbWVudHM= ZW1hdGlj YW1waW9uc2hpcA== IG1vdGl2 IEhhdmU= IGJsb3c= Sm9i Y2VydA== X3ZlY3Rvcg== aW5zdGFsbA== IENPUFk= ZW1iZWQ= RElS IFNwcmluZw== IGV4aGli MjIz Y2Ru IENvbW1lbnQ= IE9wdGlvbmFs LnBsYXllcg== IERhcms= KHBvcw== IFNob3VsZA== IGNlbnRyZQ== IEd1YXJk w7N3 IHRyb3VibGU= RU5FUg== KHVuc2lnbmVk X3NlcnZpY2U= IG5z dWxpbmc= IE1leGljbw== IE5Z bXlzcWw= IGxpYw== 5Zw= TXI= LWZs IEN1c3RvbWVy aWRp ID8+Cgo= cmlibGU= INC/0YA= IHNpemVz X1NUUklORw== dmFsaWRhdGlvbg== IEpvbg== KEh0dHA= YWRkQ2xhc3M= Tm9kZXM= IGZyYWdtZW50 IHNwb2tl IHdhc3Rl Sm9pbg== IGlsbHVzdHI= ZWxp Y2llbnQ= IGFpZA== IHByb3NlYw== Jyl7Cg== IHBhc3Npbmc= IGZhY2Vz U2hhcGU= X1o= aXRp IGFsbGU= IHJvYm90 ICAgICAgIAo= IFNwZQ== IHJlY2VpdmluZw== IERldGFpbHM= ICIp bWc= X1JFRg== IGNvbXBhcmlzb24= Kiw= IEZvdW5k X3Nlc3Npb24= KFU= L0Y= IHh4eA== TmV0d29yaw== ZGVycw== IGNhcHR1cmU= IGNvcnJl IEx0ZA== IEFkdg== W0A= IGNsaXA= TWlsbA== IFByb2ZpbGU= IGVuZGlm IG9ibGln ZGVzY3JpYmU= LmVsZW1lbnQ= cml0ZXJpb24= TEQ= ZXJlZA== IGZhdm91cg== c2NvcmU= IEZpbHRlcg== YXR0cmlidXRlcw== IGNoZWNrcw== SW5mbGF0ZXI= IFBsdXM= IHNjaWVudGlmaWM= IHByaXZhY3k= SGVhZA== IGZlYXQ= IGRlZ3JlZXM= IFBhbGU= OyI+ IGZpbG1z IEF1ZGlv IFRhZw== IEVuZXJneQ== aXRhcg== cGFyYXRvcg== IGZlbGxvdw== IGV2dA== IFRyaQ== IERBTQ== Y2xvdWQ= IFBhc3N3b3Jk IERlbW9jcmF0cw== IEFjYWQ= JGxhbmc= IHJlYg== KCkpCgo= 0L3Riw== IEJ1cg== cmVhZGNy IGhleA== MjA5 Q29uc29sZQ== Y3Rs b3VzZWw= IFdpbGxpYW0= IGF6 X1BPUlQ= IHByYWN0aWNlcw== IGFueXdoZXJl IFBvc2l0aW9u IC0+Cg== aWFtcw== LnVzZXJuYW1l cGxhY2Vob2xkZXI= IG9kZXI= IFNlY3JldGFyeQ== IGlU bW9uZA== ZXZlbnRz P+KAnQ== LlN1Yg== IGF0dGFjaGVk IG7Do28= IGVzdGF0ZQ== MzY1 LmFjdGlvbg== IGZpZ3VyZXM= IH0pOw0K IHN1YnNjcmk= LnRhZw== bmFt LnBsb3Q= bm9vbg== bGlhbWVudA== Q2hhcmFjdGVy LnRhYg== IHdpbnRlcg== IFZhcmlhYmxl IHRyZWVz IHByb3Vk KFY= X2xvYWQ= IGhpZXI= IEVjb24= IGZk IHZpY3RpbXM= UmVzdA== aWFuYQ== IGZha2U= LlByaW50bG4= IHN0cmxlbg== IHNhZA== IGJsZQ== UHJvdA== IGJ1dHRvbnM= IHRlbGV2aXNpb24= IGxvZ28= ZXh0ZW5zaW9u CWo= c3RlaW4= YWNpb25lcw== ICIiIgoK IHNpbXA= IHJlY29yZGVk IGJyaW5ncw== IHByaW5jaXBhbA== IGZlZXM= KHNvdXJjZQ== a2Rpcg== IHV0aWxz IGNvcnJlY3RseQ== Zmls IHdlbA== UGFpcg== LWJ1dHRvbg== c2NhbGU= dmVyaWZ5 W2M= IC0tLQ== IGVzY2FwZQ== aWtlcw== TG93ZXJDYXNl aWNpYW4= IGNoYXB0ZXI= IFRZUEU= IHNoYWRvdw== IGF3ZXNvbWU= V0U= ZWxpZg== IGxhbWJkYQ== IGRpc3RpbmN0 IGJhcmU= LW9mZg== IGNvbG91cg== LmFwcGVuZENoaWxk b2xlYw== YWdh LmZpbGw= CXN1cGVy IGFkag== KHBvc2l0aW9u LmdldEl0ZW0= MjQy U2hvcnQ= IHRvdGFsbHk= VkQ= IFRyZQ== X2Vw dmVtZW50cw== IFNvbHV0aW9u IGZ1bmRhbWVudA== Rm9sbG93 IGZhY2lsaXR5 IGhhcHBlbmluZw== T0Y= LnRleHRCb3g= U3Bhbg== IMKr aWRlbg== IGV4Y2VlZA== KHBhcmVudA== IGNw 57s= IGhhc24= IHByaQ== IGNvbnNlcXU= bmVu IElOVE8= SWdub3Jl IEZ1dHVyZQ== IGNhcmJvbg== IFN0ZWVs Zm10 b2tpZQ== IHNwbA== KHRpdGxl LWluZm8= IGRlYWxz IGZpeHR1cmU= ZWE= RGl2 IHRlc3RlZA== X3JldHVybg== KQoKCgo= dXBwb3J0ZWQ= IENvb2s= IHBheWluZw== IElsbA== IGFycmVzdGVk IFByaW1l X2NhbGxiYWNr PiwK ZHJpdmVy T25jZQ== YWJi X2J5dGVz IFNldHM= KE9iamVjdA== IGNj IHNoZWxs YWxv KTsvLw== KGxvZw== MjY0 Y3RvcnM= KTwv IG5laWdoYm9yaG9vZA== NDIw YWlsYWJpbGl0eQ== dm9s IHlvdXRo IHRlY2huaXF1ZXM= IFNjaGVtYQ== dWg= bWVudGU= IHJlcG9zaXRvcnk= aW1t IGNvb2tpZQ== SlM= b3ZpZXM= Ons= Q29tcGxldGU= U2luY2U= IGxhdWdo X0JP ZW5hYmxl IERvZXM= IFdhbGs= d2hhdA== a2Vz IG11bHRpcA== aW1lbnRz ZXVy IHZpY3Rvcnk= R2VuZXJhdG9y IE1vcw== cm92ZXJz IGNvbXB1dGU= IHByb3ZpZGVycw== IE1lZGlj TFA= X0NPTkZJRw== IHZldGVy c3RlcnM= X3dpbmRvdw== dW1lcmlj CQkJCQkK LlJlc3BvbnNl IHJlcGxhY2Vk LnJvb3Q= LWZyZWU= LWNvbnRhaW5lcg== IG1hdGNoaW5n IEVkaXRvcg== PSR7 IFNhZg== IHNpbmQ= KGJ1ZmZlcg== 5Yc= LmVkdQ== KV07Cg== IE5GTA== YXlh IGRvZ3M= IGRlc2lyZQ== IE1pZGRsZQ== Q2FydA== MzA2 VGhlbWU= IG1vYg== IGRpc3BsYXllZA== aWdpdA== IGFkdWx0cw== IiIi IGRlbGl2ZXJlZA== dmlzaWJsZQ== Ijp7Cg== PDw8 IEdP c2Nyb2xs eEU= IGFzc2lnbmVk IEJvb2w= IHdw IGNvbWJhdA== IEhhdw== Li0= IHN1cHBvcnRpbmc= LkNvbnRlbnQ= MzQ1 aXJjcmFmdA== IHNwaW4= IENS Lm15 4KU= dHBs IHNwYWNlcw== Pyw= Mzg0 IFN5cmlh IHBhdHRlcm5z LWJveA== IGZyYW1ld29yaw== LyU= KGxvbmc= IHRlYWNoaW5n QVJOSU5H X2tleXM= IHRhYmxlcw== VU5D aW5hdGlvbnM= LXdlaWdodA== cmFkaW8= IFBhYw== LnNlcnZlcg== LkNoYXJGaWVsZA== cmluZw== IHF1b3Rl YW5uYQ== IHdlcmRlbg== IGNyZWFt IG1hY2hpbmVz LWs= Mzc1 IHN0aW0= IFN0b2Nr cmljaw== IGltcG9ydGFuY2U= cng= w7Vlcw== 2Yg= IHN0cm9rZQ== YWdyYQ== IHRhc3Rl IERFQlVH VGhhbmtz IFJlcXVpcmVk b3Zh TWVkaWE= IHNpxJk= KGJhc2U= cG9zdHM= IGZpbGVOYW1l Q2hlY2tlZA== IGludGVycnVwdA== ICgpCg== cHl0aG9u cGFpcg== IGNpcmNsZQ== IGluaXRp X3N0cmVhbQ== IGNvbXByZWg= bGVhcm4= UHVibGlj IGh1bWFucw== IGJyaW5naW5n b2dyYXBoaWM= X2xheWVy LWxpa2U= dXBwb3J0SW5pdGlhbGl6ZQ== aWRlYmFy IHZvdGVz IGRlc2lyZWQ= TWFzaw== IHJlbGF0aW9u Lkluc3RhbmNl SGVscA== IGluc3Bpcg== IE1vbm8= Vmlld01vZGVs b21ldGltZXM= IGJhY2tncm91bmRDb2xvcg== IHJvdGF0aW9u IG1hcmk= L3Rlc3Q= SU5TRVJU U3Rhcg== cGh5 SWRz X0dFVA== IGluY3JlYXNlcw== X2Nsb3Nl MjMz X0ZPUk0= IFvigKZdCgo= YXph VEVYVA== IMOk IFZhbg== IGxpZ2h0cw== IEd1aWRl IGRhdGVz LkNvbW1hbmQ= YW1hbg== IHBhdGhz LmVkaXQ= CWFkZA== ZHg= IHJlYWN0aW9u IEJlYWNo LmdldE1lc3NhZ2U= RW52aXJvbm1lbnQ= aW50ZXJlc3Q= IG1pbmlzdGVy IHJlYWRlcnM= CUY= IGRvbWVzdGlj IGZpbGVk Q2l0eQ== IG1hcHBpbmc= IERFUw== IHJlcGFpcg== dGljcw== aXh0dXJl IG5vbWJyZQ== LklTdXBwb3J0SW5pdGlhbGl6ZQ== em8= LklzTnVsbE9y IENhcm9saW5h IERlcg== IEVWRU5U IGdlc3Q= IGhpc3Q= cmVzb3VyY2Vz IG9ycGhhbg== LkFyZQ== IEludmVzdA== UkVGRVJSRUQ= LkxvZ2dlcg== IFJvbWFu IGN1bHR1cmFs ZmVhdHVyZQ== cHRz YnQ= IGRvdA== IGRpYW0= dXNwZW5k X2FjY2Vzcw== KCl7DQo= IHN1cnByaXNl YWJpbA== IHZpcnQ= IGJvbWI= YXJvbg== X0lT IHZhc3Q= UmVhbA== ZXBlbmQ= aWN0ZWQ= IHBpY2tlZA== IEZM IFJlcHVibGljYW5z Lnplcm9z UHJlc3NlZA== c3Vw LkNvcmU= TWljcm9zb2Z0 c2VydmljZXM= YWdpYw== aXZlbmVzcw== IHBkZg== IHJvbGVz NDAz cmFz IGluZHVzdHJpYWw= IGZhY2lsaXRpZXM= MjQ1 6KE= IG5p IGJh IGNscw== CUI= Q3VzdG9tZXI= IGltYWdpbmU= IGV4cG9ydHM= T3V0cHV0U3RyZWFt IG1hZA== KGRl KXsKCg== IGZybw== aHVz IGNvbW1pdHRlZQ== 7J20 LHg= IGRpdmlzaW9u KGNsaWVudA== KGphdmE= b3B0aW9uYWw= LkVxdWFs IFBoeXM= aW5ndQ== MDMz NzIw IHN5bmM= IE5h fX08Lw== T0xVTQ== aXTDqQ== IGlkZW50aWZpZXI= b3dlZA== IGV4dGVudA== IGh1cg== VkE= Y2xhcg== IGVkZ2Vz Q3JpdGVyaWE= IGluZGVlZA== aW5oZXJpdA== IE5pZ2h0 MzAy IHJlcG9ydGluZw== IGVuY291bnRlcg== IGtpbmRz X3ByZWQ= IGNvbnNpZGVyaW5n Lig= IHByb3RlaW4= VHlw Z3JpY3VsdA== IEJhbGw= QENvbXBvbmVudA== IEVzcw== IFJ1Yg== ODAy dWxw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== aXR1ZA== LmF0dHI= aWVudGU= IHNwZWxs IEpvZQ== RU5URVI= X2hvc3Q= aXRhbg== IG1hdHRlcnM= IGVtZXJnZW5jeQ== dWF0ZWQ= IENoYXQ= PXsn Y29udHJp YXJrZXI= 5oiQ aXBlcg== IHNjaGVtZQ== KHN0ZGVycg== ICoo Y2VpdmVy LmNvbHVtbg== IG1hcmtlZA== X0FUVFI= IGJvZGllcw== IElNUExJRUQ= R2Fw IFBPU1Q= IGNvcnBvcmF0ZQ== IGRpbWVuc2lvbg== IGNvbnRyYXN0 ZXJ2aWV3 IEVSUk9S IGNhcGFibGU= IGFkdmVydGlzaW5n dXJjaGFzZQ== IFBB IEZyYW5jaXNjbw== IGZhY2luZw== 44CM Z2l0 IGJlZXI= IHNreQ== ZG93bmxvYWQ= IEN1cg== bWM= YW5ueQ== LmZsb29y IGNyaXRlcmlh IHBhcnNlSW50 YCwK IGFzcGVjdA== IGJ1bmRsZQ== Q291bGQ= IHRhbms= LWlk IGh1cnQ= IGJyb2FkY2FzdA== T0tFTg== b3dudA== bnVsbGFibGU= Q2Fw IGFsY29ob2w= IENvbGw= IEhlbHBlcg== IEFm Lm1ldGhvZA== IHBsYW5uZWQ= cGxlcg== IFNpdGU= IHJlc2M= b21lbnQ= IEphdmFTY3JpcHQ= U0VSVkVS IHJocw== ZXJlcw== KCIs aWZp LmZpZWxkcw== IHBhcmtpbmc= IGlzbGFuZA== IHNpc3Rlcg== Xwo= Q29uc3RyYWludHM= IEF1c3Q= ZGlt X3BvaW50cw== IGdhcA== X2FjdGl2ZQ== IHZvb3I= IFBP QmFn LXNjYWxl bGFtYmRh LkRpc3Bvc2U= cnVsZQ== IG93bmVk IE1lZGljYWw= MzAz ZW50cmllcw== IHNvbGFy IHJlc3VsdGluZw== IGVzdGltYXRlZA== IGltcHJvdmVk RHVyYXRpb24= ZW1wbG95ZWU= JC4= QWN0aW9ucw== TGlrZQ== LCg= KFJlcXVlc3Q= JXM= Lk9wZW4= KSIK IHBpeGVs IGFkYXB0ZXI= IHJldmVudWU= b2dyYW0= IExB IE1hY2hpbmU= INin IGZsZQ== IGJpa2U= SW5zZXRz IGRpc3A= IGNvbnNpc3RlbnQ= YcOnw6Nv Z2VuZGVy IFRob3Nl cGVyaWVuY2U= LkJhY2tDb2xvcg== LnBsYXk= IHJ1c2g= IGF4aW9z IG5lY2s= X21lbQ== LlBSRUZFUlJFRA== X2ZpcnN0 Q0I= IFdpZGdldA== IHNlcQ== aGFy IGhpdHM= IOKCrA== IGNvbnRhaW5lZA== cmllbnQ= d2F0ZXI= TE9BRA== IFZpcmdpbmlh IEFybQ== IC4v wrs= X3Jvb3Q= IGFzc2lzdGFuY2U= W10s c3luYw== IHZlZ2V0 ZXNjYXBl aWNlcg== Ym9vc3Q= IEZsb2F0 LVc= Ki8NCg== Kj4= MjE4 ICQoIi4= LnBvcw== IGJveXM= IHdlZGRpbmc= IGFnZW50cw== PSJf IEFybXk= IGhpbnQ= dmlzaW9u IHRlY2g= IENvbm5lY3Q= IGxlZ2VuZA== IEJldA== LkJhc2U= U3ViamVjdA== IGxpdA== UmVtb3Zl ICI6 IEZpbmFs cGVhcmFuY2U= IGlUdW5lcw== IHBhcnRpY2lwYW50cw== IFB5dGhvbg== IGJ1c3k= aWVs dmVydGljZXM= IHRlbXBsYXRlVXJs IENsb3Nl SW1n IENvcnBvcmF0aW9u dGltZXN0YW1w IGV4dGVuZA== IHdlYnNpdGVz IHBvc3NpYmlsaXR5 0L7Rgg== IGvDtg== IG1lYXQ= IHJlcHJlc2VudGF0aW9u MjQx IAkJ X1NUQVJU LmFwcGx5 IFZhbGxleQ== IFN1Y2Nlc3M= SGk= IG5vYg== IElFbnVtZXJhYmxl X3NlbGVjdA== Z2Vv LiIpCg== IHR1cm5pbmc= IGZhYnJpYw== KCIiKTsK IHBlcnNwZWN0aXZl 6Zc= IFNu VGhhbms= O2o= LlBhcmFtZXRlcnM= CSAgICAgICAgICAg IGZhY3Rz MzA1 IHVudA== Lmluc3RhbmNl IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== LWVuZA== IEpPSU4= IEhlbg== IHVyaQ== 5ZCN INC90LA= IEluZm8= IGNvbmR1Y3RlZA== IMOl T1VSQ0U= IHdpbmU= Sm9obg== LkVycm9yZg== IEFnZQ== b3VuZGVk IHJlYWxpemU= MzEy IF07 IHN1YnNlcXU= LG0= KFVzZXI= aWFubw== IGFjY29tcGw= aXNw LnN0ZA== 6Yc= IEJlZA== LnNldEF0dHJpYnV0ZQ== QlI= a2VlcA== IEFMTA== IGlzb2w= YW1tYQ== UGFja2FnZQ== IG9jY2FzaW9u LXN1Y2Nlc3M= 0LXQtA== IExJTUlURUQ= c3RyaXA= KCkKCgo= aXN0cmlidXRpb24= Q29sb3Jz ICs6Kw== RGlkTG9hZA== YWxlcg== IHRpZA== IExFRA== IExpbmtlZA== IENhcnQ= KCkpDQo= X1JFQUQ= IGtpbGxpbmc= IFBIUA== ZmVjdGlvbg== IGluc3RhbmNlcw== Y3Y= Ii8+ IHNm IHRheGVz X2xvY2F0aW9u IEJpdGNvaW4= dWFibGU= cmFuaw== aWdub3Jl dHJhY2s= 0LrQsA== IHNob3VsZG4= IE9Q PT57Cg== IGtt IGhlbHBlcg== X2hlYWQ= IFdoZXRoZXI= b2Nv X2Js IHN0YXRpc3RpY3M= IGJlYXV0eQ== IHRvZw== dGlw 64uk IGNzdg== KHNxbA== c3RkbGli d2Vhaw== IGxpa2Vz xI0= IHJlcGVhdA== IGFwYXJ0bWVudA== IGVtcGg= X2VkaXQ= IHZpdA== CXR5cGU= MjE3 RXZlbg== dXRlbg== IGNpcmN1bXN0YW5jZXM= Ymlhbg== IHN1Z2Fy V2luZG93cw== 7J4= IG9ic2VydmVk L2RhdGE= IGNhbGVuZGFy IHN0cmlrZQ== IFJFUw== X3Nj Zm9ueQ== b3JlbQ== KHo= cG93ZXI= ZXRlY3Q= IFNhdA== LmRlc2NyaXB0aW9u IGdhbmc= IFNwb3J0cw== b25ncw== IEJ1bmRsZQ== LnN1bQ== b25jZQ== IGFjY3VzZWQ= IGV4cGxvcmU= IGFwcHJveGltYXRlbHk= IGxvc2luZw== dGhlc2lz IEZ1bmQ= IGRpYWdu QXV0b3dpcmVk cHJvcGVydGllcw== IF8u IGNudA== Y2VkdXJl IHl5 IGdyYW50 c29jaw== LmlubmVySFRNTA== IF0pOwo= IENPTkZJRw== PSck NTUw XV07Cg== VU5E IGdsb2I= IGRpcmU= dWZmbGU= X01FTQ== IGF1dGhlbnRpYw== Pigi IGRlY2FkZQ== IEltcG9ydA== IG9yaWdpbmFsbHk= IGpRdWVyeQ== IGluZGljYXRl IG91cnNlbHZlcw== U3c= LmxibA== ZW5lcmF0ZQ== IGJhc2ljYWxseQ== IEhvbQ== ICsjKw== IEJyaXRhaW4= IEthcg== dG9FcXVhbA== LnN0b3A= IG1vZGFs aXNp IHN1Z2dlc3Rz IGR0eXBl IHR1cg== YmY= IGNvbm5lY3Rpb25z IEJlZm9yZQ== aXN0ZWQ= bW91c2U= IHB1bGxlZA== LmJ1aWxk IGxlZ2lzbGF0aW9u IGZvcnRo cGFk ZWdv Lk5vdw== IGV4Y2l0aW5n fQoKCgo= IGNvbXBy IHNoYXJlcw== IHJpZw== Z3JlZW4= X3ZlYw== IGVudW1lcmF0ZQ== QXV0bw== aWNhdG9y IFJheQ== YXNzZQ== IGhvbGlkYXk= IG51bGxhYmxl Z3Vu X2RldGFpbHM= IHdyYXBwZXI= c2Vx IFlvdW5n anVhbmE= ICJfXw== bGljZW5zZQ== c2VydmU= Xig= aWRlcnM= LlJlbW92ZQ== cm9wZG93bg== J1M= cGlu KHRva2Vu LkRlZmF1bHQ= IHJlYXNvbmFibGU= YW1waW9u IFNvY2lldHk= IGJlaQ== ZXJ2ZXM= cmFk IEZveA== X2ltYWdlcw== IHdoZWVs Jylb IGNmZw== KEJ5 Q29uc3RydWN0b3I= IHZhcnk= LnN3aWZ0 IHByb3h5 CUg= IEFub3RoZXI= IFBlbg== IGNoZWNraW5n IGplc3Q= bWFuYWdlcg== T3JpZ2lu dWdz b2ly PjwhLS0= IGV4cHJlc3NlZA== IG1vZGVy IGFnZW5jaWVz IGlo LWhpZGRlbg== aW91c2x5 IFJvZA== IHNvbGU= TWVk LkFueQ== IHBj YmFs RXhhbXBsZQ== IFNhbGU= IHN0cmlw IENvbXA= IHByZXNpZGVudGlhbA== TW9zdA== cHV0YXRpb24= KHJlZg== IEZvdXI= X2ZpbGVuYW1l IGVuZm9yY2VtZW50 2K8= IEdlb3Jn d2VpZ2h0cw== L2w= IGFnZ3Jlc3M= IGRyYXdpbmc= YW5keQ== PEk= LWo= YWth aHJlZg== IHRlYWNoZXJz X1E= KGl0 IE1C IHRlbXBvcmFyeQ== aXJlYmFzZQ== c3RyYQ== 5pe2 6LQ= KGxhYmVs b3Vw IHRvcGljcw== IHBvcnRpb24= aWRvcw== IEpld2lzaA== IHJlY292ZXJ5 NjUw IHN0YW5kcw== I1s= IGFmdGVybm9vbg== IEFydGljbGU= X2F0dA== IGV4cGxhbg== IFBhaw== LnNldE9uQ2xpY2tMaXN0ZW5lcg== LmNoaWxkcmVu IGlr Kyg= bGFn IGRpc2s= IGNvbnRyb3ZlcnM= Ij4m YXNw IHdpZQ== IEF1c3RyYWxpYW4= IFlvdVR1YmU= QXR0cg== Y29udGFpbnM= ZHVjZQ== IE1hdHQ= MzQw YXRlcm4= IHZvbHVudGU= IG5ld3Nw VlA= b2x0aXA= IGRlbGVnYXRl X21ldGE= IGFjY3VyYXRl IEV4YW1wbGU= JSw= IERhaWx5 IGNhYmlu IFNX IGxpbWl0cw== a2lw IGFybXk= IGVuZGluZw== IGJvc3M= IERpYWxvZw== QWxzbw== PSIjIg== b3JkYW4= cm93c2U= LW1pbg== ICIm X2xvYw== VVg= IGRldmVsb3BlcnM= IGFjY3VyYWN5 IG1haW50ZW5hbmNl IGhlYXY= IGZpbHRlcnM= LlRvb2xTdHJpcA== IG5hcnI= IEVtcA== T1JERVI= IE1vYmlsZQ== LlNlcmlhbA== Lm91dHB1dA== MjQ0 LmNvbA== TWF0ZXJpYWw= dW1h IGNvbnN1bWVycw== c2hpZnQ= IHB1ZWQ= IG1pbmk= Y29sbGVjdGlvbg== IGthbg== LmNlbnRlcg== SGlzdG9yeQ== IGJlbmNo KCkpOw== aXRvcmllcw== IGNyb3dk X2NhbGw= IHBvd2Vycw== LUU= IGRpc21pc3M= IHRhbGtz IENoYW5uZWw= Zm9yd2FyZA== X2NvbnRyb2w= L3NyYw== aWVzdA== KioqKioqKioqKioqKioqKioqKioqKioq IGJldGE= KGNvbG9y X09CSkVDVA== IEFwaQ== IGVmZmVjdGl2ZWx5 Q2FtZXJh c2Q= dXNzeQ== Mjkw RGljdA== IEVmZmVjdA== aWJpbGl0aWVz IHJldHVybmluZw== IEZhcg== ICcnKQ== IG1vZHVsZXM= MjE5 aWxhdGlvbg== ICgl VFJHTA== IHN0b3Jt b25uYQ== IEVYUA== IHNwb25z IGRpc3Bs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmFsbA== 5Yw= aWduS2V5 X1VT ZXRyaWNz IGhhbmRsZXM= VEw= X2Ftb3VudA== b3dh YnJhbmQ= IFRvb2w= IHVzdWFs Llo= Y3JlbWVudA== YWRpdW0= c3RvY2s= IHNlcnZpbmc= IEJvbg== IGxpbmVhcg== IFRhcmdldA== IFJhZGlv SEw= U2hhZGVy b21hdGlj YWd1ZXM= aW5pdHk= ZGlmZg== X2l0ZXJhdG9y cXVvdA== ICwK Y2FsbGJhY2s= IHN5bXB0b21z W18= IEJ1bA== IEZlYg== dW5kbw== X2FjY291bnQ= IHR5cGVkZWY= 0LjRgQ== dHJhcw== VXNlcklk IFBlbm4= IFN1cHJlbWU= fT4= dXNlcklk MzI3 IEtpbQ== IGdh IGFydGlzdHM= 5bg= IEFic3RyYWN0 b2tlbW9u IGhhbQ== b3ZhbA== IGNoYQ== YXRlbg== 5YY= Rml4ZWQ= IHZ1bG5lcg== IFBhcmFtZXRlcnM= cXVhbnRpdHk= LkNsZWFy U2VydmxldFJlcXVlc3Q= IHlh IHNvdWw= MDgw dHJhbnNhY3Rpb24= IHNvbG8= IHBhaXJz 5pQ= IEdyZQ== X3dvcmQ= IEND IGdp emll IHNjaGVkdWxlZA== cm90YXRpb24= Z3lwdA== dWxvdXM= Ojpf IEVsbA== PCE= CQkgIA== bHA= YWhh Q29weXJpZ2h0 MDA5 IGRyYW0= MjUx IGRpYWdyYW0= IE1lbQ== IGdhcmRlbg== Q29tcA== IGF0dGVtcHRz dWZmaXg= Pigp IHBoaWxvc29waA== X3JlbA== 5bw= IHN2 LnNlY29uZA== YW50bw== Lkpzb24= IFRlbGU= X2xvY2Fs X3NlbmQ= IGFzcGVjdHM= 7Jc= SUJMRQ== IHJhaWw= IHdpZGVseQ== YXNoZWQ= aWFy aW5m dXBwZXI= ZGphbmdv X3Jlc3VsdHM= aXNzaW5n IGVxdWl2YWxlbnQ= T1VORA== IHR5 IHBvdGVudGlhbGx5 QWR2ZXJ0aXNlbWVudA== MjM4 IFJlY29yZA== Mzgw cmVzZW50YXRpb24= X3dpZGdldA== b3VuZGluZw== IHJlbGlnaW9u IGNvbnNj IExpbQ== LmFt SHRtbA== ICc6 UEFUSA== X3NwZWM= b3J0ZWQ= aWRhZGVz X3NoYXBl IGtlZXBz LlNhdmU= IExvYw== b3Jp IFRFU1Q= dW5pY2lw IHJlZ2lvbnM= IGJlbGlldmVz L2Vu cG9zaXRl eyc= cHJlcGFyZQ== X2NvbnN0 c2FtcGxl IFdpbGxpYW1z IHN0cnQ= X0dldA== IEFuZHJldw== LmFjdGl2ZQ== IGxheWVycw== VmlzdWFsU3R5bGU= YXp5 IEtu IGFjaWQ= IEFzaWE= IGV4Y2Vzcw== CW15 IGtleWJvYXJk ZW5zdXM= IGNyZXc= IG1pc3NlZA== bWFzdGVy IFdpbGQ= IG5ld2x5 IHdpbm5lcg== IHN0dWI= aWNvZGU= Lm1vdmU= RG9tYWlu IFNhcg== IGZvcmVzdA== TEVE Y2xhaW1lcg== LmV4aXQ= IFdpbmRvdw== IHJlc2lzdGFuY2U= IENIRUNL KCIt IFJ5YW4= IHBpcGU= IGNvYXN0 REVG Ly8h X29mZg== ZXhpdA== IHVsdGltYXRlbHk= aW1pdGl2ZQ== IEtlZXA= IGhpc3RvcmljYWw= IGFueXdheQ== IEphY2tzb24= b2NrZXI= RVJO IFVJTlQ= eW50YXg= RVJZ aXNtcw== IGNu IG9jY3Vycw== IDs7 VGV4dFZpZXc= QUU= L2ltZw== IHllc3RlcmRheQ== LWRlZmF1bHQ= IHRpbnk= IHByb2M= IGFsaXZl IFJFRw== LnRo ZWFyaW5n LmdldExvZ2dlcg== PGxpbms= X2xvZ2lu Rm9sZGVy YWJj bHlwaGljb24= 0L3Qvg== IG5vdGljZWQ= b2RpZ28= IGVkaXRpb24= aW1hdG9y LkVuYWJsZWQ= LnBhcnNlSW50 IHlhcmRz CQkJCQkJCQkJCQkJ IHZlcmJvc2U= 0LvRjw== X0JZ LmxvZ2lu Lio7Cg== IE1pZA== w6llcw== IGdsbw== IGJ1aWxkaW5ncw== IHpl IEl0ZXI= IHR1YmU= IFBvdA== XE0= MjUz PHRo YnJpZGdl IFNjcmlwdA== IE1vZHVsZQ== IHZhY2M= IGluc3RhbGxhdGlvbg== dnk= VmlzdWFsU3R5bGVCYWNrQ29sb3I= IFNN LnRvdGFs NjQw YmF0 IGZpbmRz IGF0bW9z U3Vidmlldw== aXphcmQ= IHJlcGxhY2VtZW50 bGljYXRlZA== YXBpcw== IGxvZ2dlZA== IExlZnQ= R3Vp X1R5cGU= dG0= UGFk IGhvdXNlaG9sZA== IHJlbGU= IHByb3Bvc2Fs X0NMQVNT MjQz Ojo6Og== IGluZnJhc3RydWN0dXJl SW5qZWN0 L2h0bWw= MjI2 IGFkcw== aXp6YQ== IG1n Y3RyaW5l JQo= PGh0bWw= LWltYWdl IGF0dG9ybmV5 PG0= KCcs IGNhbm4= IHByaW50bG4= b29zZQ== IHllbGxvdw== LmV4cA== cGF5bWVudA== IHRhYmxlVmlldw== YXdheQ== IG9wcG9zaXRpb24= IEFnYWlu IEhhbmRsZQ== IGV4Y2x1c2l2ZQ== aW5hcg== w6ly 0L7QsQ== IENPREU= ZW1wb3Jhcnk= IHJlYWN0 cGlwZQ== MjM2 Y3o= LmFjdGl2aXR5 IGxhcmdlbHk= IGRpc3M= YXh5 ZXNpcw== IFJlbg== IGNvcm4= LlVzZVZpc3VhbFN0eWxlQmFja0NvbG9y ZGF5cw== IGZydWl0 SW5zZXJ0 X2VuYw== RXN0 X2RlYw== IEx1Yw== IMO8YmVy cGFyYW1ldGVycw== UEVSVA== ZXhwcmVzcw== X3Byb2ZpbGU= VW5rbm93bg== IHJldm9sdXRpb24= LmFkZHJlc3M= X3JlcXVpcmU= IHVuaWZvcm0= IFBhY2s= bGFy IFVJVGFibGVWaWV3 IGRlcGVuZHM= VmFsaWRhdGlvbg== Y29uZmlybQ== T3duZXI= IHRyaWI= aGV0 IElkZQ== YW5zYXM= MjQ3 TGFuZ3VhZ2U= dWV0 IFBv IFN0ZXZl IGNvbnRlc3Q= X0RFRkFVTFQ= IGFwcGFyZW50bHk= UkVFTg== IGZyZXF1ZW50bHk= IHRyYWRpdGlvbg== b2NvbGF0ZQ== U0k= IEFyZ3VtZW50 Rm9jdXM= ZXJ0ZQ== IExheW91dA== IGR4 IGdlbmVyYXRvcg== IFdhaXQ= UG9saWN5 bGlnaHRz LkV4ZWN1dGU= NTU1 UHk= IGJlZHJvb20= ZWRh cmFpZA== CXNpemU= IGFuY2llbnQ= IHB1bXA= IGR3 ICghKA== IHNwZWNpZnk= KHN0YXR1cw== IEZCSQ== LmV4Y2VwdGlvbg== IHJlbWFyaw== bHltcA== YW50ZWU= VXBsb2Fk ZXJuZXQ= 6aE= aW5lbnQ= IFJlbmRlcg== ZG0= IE1lbW9yeQ== cmljaA== IFRvb2xz IGtuZQ== IHBlcm0= YmFk IGRpbm5lcg== LnJlc2V0 IGpMYWJlbA== RmVhdHVyZQ== LlNlcnZpY2U= ICh7Cg== IHJlZmVycmVk LmNsYXNzTGlzdA== MjQ4 IGluaXRXaXRo IFRleHRWaWV3 IG5laXRoZXI= IGNvdW50eQ== ICJ7 56c= IHRhY2s= Y2xhc3NOYW1l IFVTRVI= IHJlbmV3 YGA= Z2V0TmFtZQ== IGJyb3du RXJyb3Jz ZXJ0bw== IHN1c3RhaW4= U08= bGV0ZXM= IEludmFsaWQ= MjQ2 MjI3 IGVuZW1pZXM= dW5nZQ== IGV4aXN0ZW5jZQ== ZXJyYQ== CiAgCg== dXRvcmlhbA== I2E= cGF5 Y2hhcmdl IElyZQ== YXRlc3Q= IGV4cGxvcw== IGZpcmVk TkVS IFR5 aWNpb24= VXJp IG9idmlvdXNseQ== IENvbHVt ICcr IERldmljZQ== LXJlbGF0ZWQ= X0FSRw== IHZvcg== IExlc3Nlcg== X09Q U2VyaWFsaXplcg== IHVwZ3JhZGU= TGlnaHQ= IGNvZGVz Kys7DQo= IHdyaXRlcw== Zm9vZA== IMOpdA== QHNlY3Rpb24= IHRyYWNrcw== IHNlcmlvdXNseQ== Y2h0 NDMw KHNpemVvZg== IGltbWVkaWF0ZQ== IHNjaWVudGlzdHM= IHsk X25l LkFuY2hvclN0eWxlcw== IGFjY29tbW9k IEhhcnJ5 IHNpZ2h0 IFBhbGVzdA== ZXJzaXN0ZW50 INGD LWlucHV0 IGNvb3JkaW5hdGVz wrc= MjI4 V2VsY29tZQ== LmNvbmY= IGdyZXc= IGJvbGQ= IENQVQ== KG15 IHBlcmZlY3RseQ== IG1vbWVudHM= IE1vdmll LWRhdGE= eXN0YWw= X1dJRFRI MjYy IFNjcmVlbg== 5p0= IGRpc2Fw IHJlZHVjdGlvbg== LkdldENvbXBvbmVudA== X01PRFVMRQ== IGdlbmVyaWM= IGR5 YWxsZXI= IGN1cmw= IEJvZHk= IGJhbmtz LHQ= YXZn IGV2aWw= IG1hbnVmYWN0dXJlcg== IHJlY2VpdmVy Q29sdW1ucw== IGluZ3JlZGllbnRz CW91dA== cXVlcw== LkxvYWQ= IHNsb3dseQ== IFRvd24= IENlbGw= X25vcm1hbA== X3ByZWZpeA== IEFsZXJ0 KCJ7 w6Ry 4oCcVGhl IE1E IGNvdXJzZXM= YXRoYW4= 6Zk= b2Nj IFNFUg== ZXNpZ24= QWRkcg== PVsn KCIuLw== XX0= LmZvbnQ= IEluc3RhZ3JhbQ== IEJvcmRlcg== b2Rh IGhhbGw= IHJ1bQ== X2JpdA== IHNhdmluZw== X2Rvd24= UmFuZG9t X3JlZ2lzdGVy KENvbnRleHQ= IG9wcG9zaXRl Um9vbQ== WUVT 0LDQvdC4 IGVuam95ZWQ= X3J1bg== Q2xlYXI= 4oCY IEZvcmQ= b25pYw== b3N0ZW4= Il0p X2F1dGg= Ly8NCg== IHN1ZmZpY2llbnQ= TEVT IHBoZW4= IG9o X2Nzdg== IHJvdXRpbmU= LkFyZUVxdWFs YXlsb3I= IGJhc2tldA== X0NPTU0= cnlwdGVk U2lt IFNob3A= IHN0dWRpbw== YXRvcw== KFc= W3N0cmluZw== w6R0 b2dh IHNocg== IHNpY2s= QW5vdGhlcg== IGRvb3Jz X05F IFRIUkVF Lm9yZGVy cmF6aWw= IG1hcHM= X1RSVUU= dHJhbnNsYXRl IG5lYXJieQ== MjY1 IG5hY2g= TE9BVA== YmF0Y2g= MjI5 IGx1eA== YXNoZXM= YW5nZXJz 4oCm4oCm X0VWRU5U X1VQ IGFjdHM= aW52 X01FVEhPRA== Y2Npb24= IHJldGFpbg== dXRjaA== INCx IGtub3dpbmc= IHJlcHJlc2VudGluZw== Tk9U cG5n Q29udHJhY3Q= IHRyaWNr IEVkaXRpb24= dXBsaWNhdGU= IGNvbnRyb2xsZWQ= Y2Zn amF2YXNjcmlwdA== IG1pbGs= V2hpdGU= U2VxdWVuY2U= YXdh IGRpc2N1c3NlZA== NTAx IEJ1c2g= IFlFUw== LmZhY3Rvcnk= dGFncw== IHRhY3Q= IHNpZA== JCQ= IEVudW0= Mjc1 IGZyYW1lcw== fSk7 IHJlZ3Vs J107DQo= UmVnaW9u MzIx ZmZm IGNybw== KGNvbQ== PSIr U3R1ZGVudA== IGRpc2FwcG9pbnQ= UkVTVUxU Q291bnRlcg== IGJ1dHRlcg== IEhh IERpZ2l0YWw= IGJpZA== Ij57ew== aW5nZXJz IENvdW50cnk= X3RwbA== Il0pCg== L2s= ZGF0aW5n OiM= IERBVEE= eW5jaHJvbg== X2JvZHk= b2xseXdvb2Q= IHZhbG9y aXBpZW50 b2Z0 VUJM ZG9jcw== IHN5bmNocm9u IGZvcm1lZA== cnVwdGlvbg== IGxpc3Rh UmVxdWVzdE1hcHBpbmc= IHZpbGxhZ2U= IGtub2Nr b2Nz Ins= X2ZsYWdz IHRyYW5zYWN0aW9ucw== IGhhYml0 IEpl ZWRlbg== IGFpcmNyYWZ0 aXJr IEFC IGZhaXJseQ== LmludGVy LkFjdA== IGluc3RydW1lbnQ= cmVtb3ZlQ2xhc3M= LmNvbW1hbmQ= 0Yk= CW1lbQ== KG1pbg== IG90 IGNvbGxl PXM= dGltZW91dA== IGlkcw== IE1hdGNo aWpu emVybw== NDEw IG5ldHdvcmtz Lmdvdg== IGludGVs IHNlY3Rpb25z b3V0aW5l KGNtZA== KGRpcg== IExJQUJJTElUWQ== IEJsb2c= IGJyaWRnZQ== MzA4 IENW Y29udmVydA== ICIpCg== IEJlcm4= X1BP ZXZhbA== KHNldA== dG9vbA== IHBheW1lbnRz QmVoYXZpb3Vy IGNvbmNyZXRl IGVsaWc= IGFjY2VsZXI= IGhvbGU= X28= VEVHRVI= IGdyYXBoaWNz T3du Rm9ybWF0dGVy b25kZXI= IHBhY2thZ2Vz L2E= IEtub3c= T3JEZWZhdWx0 IGR1dHk= V2FpdA== 0L3QsA== X3JlY29yZA== W3Q= TWVzaA== IG9uZ29pbmc= LmJlYW5z IHRhbg== IGludGVycHJldA== YXN0ZXJz UVVBTA== IGxlZ3M= XFJlcXVlc3Q= LWZpbGU= X211dGV4 IFNhaW50 Ly8j IHByb2hpYg== KGluZm8= Oj0= bGludXg= IGJsbw== b3RpYw== CWZpbmFs X2V4cA== IFN0b3A= YXBpbmc= KHNhdmVk X3B1c2g= IGVhc2U= X0ZS cG9uc2l2ZQ== c3RyY21w OgoKCgo= 5Lu2 b2xp IGV4dHJlbWU= IHByb2Zlc3Nvcg== SW1hZ2Vz LklPRXhjZXB0aW9u IGFkZHJlc3Nlcw== cGxlbWVudGVk IGluY29ycG9y IHVzZUVmZmVjdA== X09G IERh bm9tYnJl SVJTVA== IGRpc2NyaW0= IGNvbXBlbnM= Z3JlZ2F0ZQ== YW5jZWxs YWNoZXM= IENyaXRlcmlh JHJlc3VsdA== RGVzdHJveQ== IHNlY29uZGFyeQ== V2F0Y2g= IFNlbQ== IE1jQw== IGFjYWRlbWlj VXBwZXI= Ojp+ dXRyYWw= IERvZw== YWRlZA== MjM3 VmFsaWRhdG9y IGRlcml2ZWQ= IHNldFRpbWVvdXQ= IEtlbg== IHR5cGljYWw= IEJvYg== IGJvdW5kcw== IFNlYXNvbg== IGNyYXp5 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LXJvdXRlcg== aXR0ZXN0 IE1pcg== IGVtb3Rpb25hbA== LHY= Y24= L3N0 5b0= b25vbQ== IGRlY2xhcmVk Pi4= YWlsaW5n IC8qPDw8 IG5vcm1hbGx5 KE1l ZXZpbg== bGlrZWx5 IHBvaW50ZWQ= IFN0YWNr IHdhbGxz LlZlY3Rvcg== bWVhbg== XV0K IGxpc3RlbmluZw== YWR2 IHN3YXA= SUZU 2Ko= LmFyZ3Y= dWxz PG9wdGlvbg== bm90YXRpb25z IGVtYWlscw== IFVrcg== YXN0YQ== IFRodXM= IFN0b25l IGFwcGVhbA== LuKAmQ== IHJlZ3VsYXRpb25z UHJlZmVyZW5jZXM= IFBob25l dWxm IERS IHRlY2hub2xvZ2llcw== IHBhcmFncmFwaA== IG5lY2Vzc2FyaWx5 Mzcw MDMw LmVhY2g= PGZsb2F0 cmVzYQ== IHVuZGVyc3Q= IGZpbmdlcg== cHJlc3NlZA== LWJ5 aWZmZXI= d2F0Y2g= IEJh QUlN IHdlaWdodHM= IFJvbg== Jyl9fQ== W3NlbGY= LS0tLS0tLS0tLQo= cGVyaW1lbnQ= IHRvU3RyaW5n eGlj IENhbWVyYQ== IQoKCgo= YXVyYW50 UHJlZml4 IGluc3RpdHV0aW9ucw== OmludA== IGV4cG9zdXJl cGF0dGVybg== IExpbnV4 Lm51bWJlcg== cmVkaWVudA== QXJndW1lbnRFeGNlcHRpb24= IENoaWVm In0s IGVsZWN0cm9uaWM= cm9uZw== ZXJk c3BOZXQ= cmFpdA== Lycs IE9oaW8= Q29udHJvbGxlcnM= IGNvbnRpbnVpbmc= IFRlbXBsYXRl IEV0aA== c3o= L2Vudg== RW52 JS4= YXJ0ZXJz KSgo IFRBQkxF IMOu cGVyYXR1cmU= cHJvZ3Jlc3M= UHJlcw== 6rA= aW1wbGVtZW50YXRpb24= IGJpZW4= IHN0cmVldHM= X01TRw== TmV3cw== IyMj Oi8= IGN1dHRpbmc= eEI= cmVzc2Vk X0VOQUJMRQ== bGFi IGNhdXNpbmc= XSkpOwo= YnJh eEZGRkY= aWxseQ== cGxldGlvbg== d2lsbA== X2Jhcg== IHN0cnVjdHVyZXM= IEltcA== 24w= IDw+ IC0tLS0tLS0tLS0tLS0tLS0= X0JVRkZFUg== LmRpcg== IHBsYWlu IHBlZXI= MjQ5 Z2c= b2ludHM= IHNvbWV3aGF0 IHdldA== IGVtcGxveW1lbnQ= IHRpY2tldHM= aXJtcw== IHR1cGxl c2lz JHNxbA== cmln IGNvbnZlcnNpb24= IGdlcw== IGNvbmZpZ3VyZQ== ZWdy IENh IF9fKCc= b3VzdG9u LnRva2Vu QmxhY2s= IG1hZ2F6aW5l QVc= LklO b3Npbmc= IGJyb2tl IENydQ== REVMRVRF IGRlc3Ryb3llZA== KE1hdGg= IGFwcHJvdmFs LWRvbQ== IElJSQ== dGFibGVWaWV3 IGRlc2lnbnM= IGNydXNoaW5n IGNvbnNlbnQ= ZGlybmFtZQ== b21w IGNyeXB0 Pyg= b3JvdWdo MzA3 Lm8= CWxpc3Q= YW1zdW5n LiIiIgo= ZXJyaW5n R29vZ2xl X3BhaXI= X0lOSVQ= cmVtYXJrcw== IGdlYXI= RmlsbA== bGlmZQ== fSIpCg== IHN1aXRhYmxl IHN1cnByaXNlZA== X1JFUVVFU1Q= IG1hbmlmZXN0 YXR0ZW4= IGZydXN0cg== b3ZlbWVudA== LmNsaWNr IGlp IGV4cGFuc2lvbg== aWdz UGFyc2U= LlJlZ3VsYXI= Um9i X2xheW91dA== 7KA= IHRyYW5zbGF0aW9u IEJlYXV0 QmVzdA== X0NPTE9S PGxhYmVs IGxpcXVpZA== SVRT IHByb2Q= MjM5 IG9wZXJhdGU= VUlLaXQ= IG5hdHVy YXJndW1lbnQ= X2RldGFpbA== IENlbnRyZQ== ICItLQ== IH19Ig== bG9jYWxl LnR2 X3NlcQ== IHVwY29taW5n Q2hhcnQ= IERpdmlzaW9u IGNsaW5pY2Fs Q29tcGFueQ== U2VwYXI= bGFz IEh1bg== OnM= IGhlYWRpbmc= 0L7Qsw== ICIiKTsK W2lk Ymlh IHN0cmV0Y2g= aWNpZGU= IHJlcHJvZHU= LnByb2plY3Q= bGVnZW5k ZW5kZXJz IHJlc3BvbnNlcw== IG9udA== cml0aWNhbA== IHJlZnVnZQ== IExp IDoKCg== IFRocmVl LmNvbnRyb2xsZXI= X0lOREVY X0ZPUg== XE1vZGVscw== amF4 CWV4aXQ= IOKW IGNvdmVycw== CXk= LS4= SU5ET1c= IGZhaWxz aW5jbHVkZXM= IGZhdWx0 NDQw IGx5 NDQ0 w7Fv LnNsaWNl SUxFRA== IFB1cg== IEFzaWFu X2JhdGNo Lk1heA== dmw= IENPUFlSSUdIVA== IGdpYW50 IE1hbnVhbA== IENvcHk= Q2xhc3NOYW1l SGVhbHRo Q3Vyc29y SUJPdXRsZXQ= IHR3ZQ== 5rM= X2xhYmVscw== IGNvbGxlY3RlZA== IGZ1cm5pdHVyZQ== IGRlYWxpbmc= Q29udHJvbHM= IEhvdGVs Y2tz IGNob3Nl 4pSA b2Rk U1I= 2Yo= 7IQ= IGFjY29yZA== IE1vdmU= IE1vZGU= IE1vY2s= IHRocmVhZHM= KysrKw== IE9wdGlvbnM= UmVmcmVzaA== IERpZA== J10tPg== dWNj X2NoYW5uZWw= LmFicw== IHt9LAo= IFdhbA== ZXJpb3I= IG1haW5seQ== IERyaXZlcg== Tm90Rm91bmRFeGNlcHRpb24= IGNvdW50cw== ZWFt ICY9 UXVlc3Rpb24= IEFsaQ== IGFueW1vcmU= ZGV0YWls dGFpbA== IG1pbGU= IEZhaXI= IHNvcnJ5 IHN1cnJvdW5kaW5n IGFkbQ== RGV2 IG1hcmlqdWFuYQ== IFNvdW5k IEFzaA== RkQ= VGVhbQ== LnBvcnQ= IFtdCgo= dWJibGU= IGFzYw== IGludGVudGlvbg== QWNj Y2hp dXN0ZXJz IGluc3BpcmVk c2Vn Q0xV IG1hbmlw TWV0YWRhdGE= Q29ubmVjdA== IEJlaA== IGZpbmRpbmdz IGFzc2VtYmx5 d29ybGQ= IHJlbWFpbmVk IHVpZA== KC4= IG14 TG9vcA== CgoKCgo= IGZhbnRhc3RpYw== d2hv YWtp IEJhc2lj IFlldA== IFVzZXJz aWtpcA== IGhlYWRz IE1pY2hpZ2Fu X2l0 IFRvcm9udG8= IHJlY29yZGluZw== IHN1Ym1pdHRlZA== X3ZhcmlhYmxl bWVkaWF0ZQ== LmdyYXBoaWNz IHN0b29k IHJlYXI= dmVsb2NpdHk= X01FU1NBR0U= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cm9sZXM= IFRvdXI= X3llYXI= ZW5kbWVudA== YW1wcw== IElyZWxhbmQ= bWFs IHlvdW5nZXI= IHN0cnVnZ2xl IGNhYmxl IFNETA== KCct YW5lcw== IE5lZWQ= LlJvdw== UG9s IFBI X3NjcmlwdA== YWdlbQ== IEJhcw== X3NwYWNl LmxvYw== Omk= YWRy IGVuZ2luZWVyaW5n aXRlbg== KSY= IHVr IExpdHRsZQ== X0NPVU5U eEE= QXJyYXlMaXN0 5o0= ICIiKQo= QW5jaG9y IGhhbmc= dHdpdHRlcg== IGNvbXBldGl0aXZl LnNyYw== 44GX IHRyYW5zbGF0ZQ== IENyZWF0ZXM= b29rcw== IFJvbGw= JycnCg== L3No c29tZQ== RW5jb2Rpbmc= LnJlc29sdmU= IGRlc2lnbmVy IFN0b3JhZ2U= IHph IE5ldmVy IHNvbWV3aGVyZQ== IGJveGVz LnNvdXJjZQ== IHB5Z2FtZQ== IGdyb3du LnR3 KCkpLAo= JyxbJw== IG9wcG9uZW50 KHNyYw== LmxheWVy QVBQ IEFjdGl2 IGd1ZXN0cw== IFZBTFVFUw== fTsKCgo= Lm5hdGl2ZQ== IGFtb3VudHM= LlJF IGNsb25l IHdlcmVu ICI8PA== X2Fj IGJyZWFraW5n IHJlbGlhYmxl LlBPU1Q= IFNreQ== ICcm IHNhdmVkSW5zdGFuY2VTdGF0ZQ== YXN0aW5n aWxsaW9u Y29tbWVudHM= dWx0eQ== Lm1lbnU= L2NvbmZpZw== IAoKCg== VE9ETw== IHB1cmNoYXNlZA== X2Nvcg== CWF1dG8= Q29tcGF0QWN0aXZpdHk= Y29tcGxldGU= X2dyYXBo aXNvZGVz IHNpdHVhdGlvbnM= IEhvcg== UmVjZWl2ZQ== 4oCcV2U= IGVudGl0aWVz LmFzc2VydEVxdWFscw== 0L7Qug== IFNhbnM= dmluY2U= cm9tcHQ= PQo= IC8u LlNlbGVjdA== eWx2 IGJhdHQ= QXVkaW8= IGluY3JlYXNpbmdseQ== LkJ1bmRsZQ== IGV4cGxhaW5z MDYw dGhlYXN0 Lm9mZnNldA== IGhhbA== IHRlY2huaXF1ZQ== X2xpbWl0 IGRyYXdu QVlFUg== IGZlYXR1cmVk eXl5eQ== YXRpbg== cGhlbg== YWNoZWw= IVw= bG93ZXI= IEdS IHBhZw== IFBhcnNl IHRvdQ== 5LiA RGlzdGFuY2U= SW5kZXhQYXRo IGhlbGw= c2lt VVRUT04= VXNhZ2U= ZWxlbml1bQ== IEZhbGw= ICIuJA== IE11 IGNydWM= IHNvbnQ= UkVGSVg= MzEx IGludGVyaW9y IE9seW1w LkF1dG9TY2FsZQ== cGFyYQ== QXhpc0FsaWdubWVudA== IHJpdmVy RHRv IHdpdGhkcmF3 UmVhY3Q= LWNsYXNz YmVmb3Jl X2FsbG9j Q29udGVudHM= IFdhcw== SUNU IGZvcm11bGE= IGluZGljYXRlcw== ICAgIAoK X3N0b3Jl aXR0aW5n IEl0YWxpYW4= X1NldA== X3JlcG9ydA== IHBpZA== X1ZFUg== IHdpbnM= IENsb3Vk Iil7Cg== Y2hlc3Rlcg== IGRlbmllZA== IHdpcmQ= IFN0ZXA= IGludmVzdG9ycw== Ym9sZA== X2Rpc3BsYXk= b3V2ZXI= b3Jlcg== UmVzZXQ= IHN1cmdlcnk= IHN0cmF0ZWdpZXM= L21hdGVyaWFs X3VuaXQ= IGNvdW5jaWw= LlBlcg== IOKAng== IHJlZm9ybQ== RnJhbWV3b3Jr IGxpc3Rpbmc= X2J0bg== IGJpcw== JWQ= ZWdhcw== IHN1ZGRlbmx5 X1NFUg== MzE1 IGFv X2RpcmVjdG9yeQ== ZmFz IHByZW1pdW0= IHRyYWNraW5n IEJM IG1hdHVyZQ== IGJhdGhyb29t ICcvJw== IMSR UGVyZm9ybWVk IHNvbGRpZXJz YXJuaW5ncw== IHdhbGtlZA== LWNvbg== Ym90dG9t IHN1cnByaXNpbmc= IGdlbmU= VXN1YXJpbw== LkRFRkFVTFQ= IE1JVA== Q09ERQ== IEVneXB0 cGlja2Vy eXNxbA== QVRVUkU= ZGV0YWlscw== IENvbmZlcmVuY2U= SW5mb3JtYXRpb24= IE1haWw= LWRvd24= cmFyaWVz YnJv IHN1YmplY3Rz ICcq 6K+3 b3JpZW50 OkA= dmVyYm9zZQ== RUY= IHRvbGVy MzEz ZW5nZXJz IGVuZHBvaW50 IHN0cmFuZ2U= IGNvbG9u IHByZWZlcnJlZA== ZGVw IEVW QVJSQVk= IHdoZQ== IHB1cA== X25vZGVz IHRhbGtlZA== IGluc3RpdHV0aW9u ZGJj IGV4cG9zZWQ= dGVlbg== IEZyb250 VFQ= X05PTkU= XC9cLw== cHJvZ3JhbQ== IGVuY291cmFnZQ== LmA= c2hpcmU= IElzbGFt MzI1 ZWVu Tkk= JyI= LldpZHRo IGxpa2Vk IHsuLi4= IFN5c3RlbXM= IHZvdHJl IG1hbnVmYWN0dXJpbmc= Q29udmVydGVy IEluZg== 7Jo= RFRP IGluY2hlcw== IOCk w7k= IENoYXJsZXM= QlU= IikpOwoK IExhYm9y dW5u IGVzdGlt bW9iaWxl IExlYXJu Mjgx X0NBTEw= 4oQ= IGluZGljZXM= IHR1Yg== Mjg4 aWtpcGVkaWE= Q29zdA== cm93YWJsZQ== 66E= Z2FnZQ== IGZ1bmN0aW9uYWxpdHk= dXp6bGU= ZW1vcw== LmxpYg== IGRhc3M= 0LXQug== ZW5uYQ== IHNob3Rz IHJlc3RvcmU= L0Q= Rm9yS2V5 XSxb YWxpYXM= bGludA== LnN0cmVhbQ== 5qA= X0ZPUk1BVA== IHNpbHZlcg== LnJlcG9zaXRvcnk= IGxlZ2lzbA== LkJvcmRlcg== X2ZlYXR1cmVz UGVybWlzc2lvbg== IGhvdXNlcw== IFdhcnM= X0NPTVA= IGluanVyaWVz IGNvbnN0YW50bHk= Zmx1dHRlcg== RU5V IENvbmY= IHJlY29nbml6ZWQ= IHByYWN0aWNhbA== IGRlY2VudA== Qko= XSk7 YXN0eQ== IEFjdGl2aXR5 LW1vZGU= IHNsaWRl LklzTnVsbE9yRW1wdHk= IFlPVQ== UG93ZXI= aW5kaWNlcw== IHF1YWxpZmllZA== IHRocm93bg== aGVsbG8= MzE2 IE5pY2s= bGFo YXNzZW1ibHk= IFNtYWxs b2xkaW5n U2hvdWxk IFNpbHZlcg== KHNhdmVkSW5zdGFuY2VTdGF0ZQ== IHRvZ2dsZQ== Lk5vdA== Q3RybA== Om5pbA== IENvbnRpbnVl IEJvb3Q= 5ok= IE11cg== ZG9u IEZB U25hcHNob3Q= IGFzc29jaWF0aW9u Zm94 LGE= YXppb25l XSkNCg== Q1RZUEU= IGZhZGU= IERhcg== Lm5hdmlnYXRpb24= IGx1Y2s= U0NSSQ== IERlYWQ= IHRlcm1pbmFs X0xFTkdUSA== IGVmZmljaWVuY3k= IHVudw== IG5hcnJvdw== aW1lbnRv KENvbG9y IFNlYQ== X2FyZWE= LEE= X29wdA== IEhpbGxhcnk= LnRhc2s= IEphYw== YXN0ZWQ= IEFkYW0= IElsbGVnYWw= IHNlYXJjaGluZw== SW5zdGFuY2VPZg== SmF2YQ== IEZvcm1hdA== IHJlYWxpemVk IENoaWxkcmVu IGtpbA== KGZyYW1l 4oCdLgoK IHNjZW5hcmlv Il0pOwo= IGluY3JlZGlibGU= bGl4 SU9FeGNlcHRpb24= IFF1ZXN0 aWx0eQ== IHVubG9jaw== 4oKs IHJlZmVyZW5jZXM= IFZlcnQ= QmluZGluZw== ZWdhdGl2ZQ== IHdyYXA= LmRhdGFiYXNl KGNvbnRlbnQ= QnVm IFRyYWQ= IEF1ZA== dHJhY2U= Lm1vY2s= IHRoZXJhcHk= CUw= LlRvSW50 IEtpbmdkb20= QnVz aGF1c3Q= IiIiCgo= KGVuZA== LmRyYXdhYmxl W107Cg== IEhvc3BpdGFs IHBoYXJt LS0tLS0= IEFH w6lk PiIpOwo= IHdhbGxldA== YXRhYmxl KSQ= IG1vbnRobHk= IGRpYWdub3N0aWM= U3ltYm9s IGl0ZXJhdG9y dW5maW5pc2hlZA== IGltbWlncmF0aW9u c3I= Uk9X KGdhbWU= IGNsb3RoZXM= IFVudA== IGFjdGl2YXRpb24= X0Nvbg== Mjcz Lmhhc2g= IGluaXRpYWxseQ== Lkhhc2g= IGN1dHM= Zm91bmQ= IFN0b3J5 0YbQuA== YWNhbw== X1RZUA== cHJvdG8= ZXN0cg== LXBhZ2U= YWhy IGluY29ycmVjdA== IEpvc2VwaA== VGV4dEJveENvbHVtbg== X3N0eWxl IERhbmllbA== c2hlZXQ= IGxpdg== bGluZWQ= IHJh UnVudGltZQ== X2VtcHR5 c2x1Zw== X3N0cnVjdA== 64o= bXU= IHBlcm1pdHRlZA== IHJlZ2lvbmFs IHNvYnJl IFN1Y2g= IFtf IHJvb2Y= LkFsaWdubWVudA== dGltZXM= Lm1zZw== IGNoZXN0 IFRhYg== IGVzdGE= w6Ru IHN1YnNjcmlwdGlvbg== KGNvbW1hbmQ= c3BlY2lhbA== IG1lYWw= Iik6Cg== X2N0eA== IGNsb3NlbHk= MzA5 ZXRyeQ== LWJl YWRlbA== IFJhbQ== aWdlc3Q= IFNwYW5pc2g= IGNvbW1pdG1lbnQ= IHdha2U= Kj4o UEhQ X3s= Y2tlcg== PExpc3Q= X251bGw= Mzkw IFJlc2VydmVk IGluaGVy LkNvbHVtbnM= LkFzcE5ldA== X0lOVkFMSUQ= IFBhcmFtZXRlcg== IGV4cHI= fXs= Q2VsbFN0eWxl IHZhbHVhYmxl IGZ1bm55 SW52 IHN0YWJsZQ== KnQ= IHBpbGw= Mjk5 cGxpZXJz IENTUw== IENvbmRpdGlvbg== IFNwZWVk dWJsaXNoZXI= MjU5 IG9mZmVuc2l2ZQ== Y2VzdA== aWNhcw== IHNwYXJr IFByb3Rl c2V0dXA= SUZZ IFRheA== V2hv RmFtaWx5 LWZvcg== LnVr IGZhc2M= c3Zn IikpLg== IGJpcnRoZGF5 4paI dmVo ZWxsZWQ= IGltcG9ydHM= IElzbGFtaWM= VEE= IFN0YW4= d2VhdGhlcg== IHN1c3BlY3Q= ZWF0dXJl ZW5uZXM= V00= Lm1pbmVjcmFmdA== YXZpZA== 6L0= LnNlY3VyaXR5 aW5vcw== R29vZA== IG1hcmNo NjU1 MjU3 IHBvc3Nlc3M= dXN1YXJpbw== Q29ucw== YW1iZXI= Y2hlZHVsZXI= IGhvcnNl 570= KGJvZHk= IFRyYW5zZm9ybQ== X2RlY29kZQ== LnN2Zw== IGZvbw== IGRlbGxh ZXh0ZW5kcw== YW1lcg== IHByb2Nlc3NlZA== IEhhcnI= IEFJ IGtv Q0hBUg== KCU= IHRhcA== KHsn Y3JvbGw= RE9N IHRlYQ== IHJlaW4= MjYx IHdvcmxkd2lkZQ== X2Zu c2hh IGJpcg== w6fDtWVz PSIjIj4= IHJlcHJlc2VudGVk aWxsZXI= KGV4cGVjdGVk IGRhbmNl IHZpc2l0b3Jz LmNvbmNhdA== LWJpdA== VVJSRQ== IFJvZw== dnA= aXBo IExMQw== aXRsZWQ= aWFtaQ== Q29sbA== X3JlYWw= X3Nob3c= X2ZvbGRlcg== IGRhcg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxhdHRlcg== YXJjaHk= IGJvdw== IG91dGNvbWU= NTEw IFBvc3RlZA== IHJpc2tz IFRoZXJlZm9yZQ== IG93bmVyc2hpcA== IHBhcmFsbGVs IHBlbmRpbmc= Z2VvbWV0cnk= IHJlY29nbml6ZQ== U1RFTQ== IENQ IGltbWlncg== SVRMRQ== ICAgIAkJ Y29ubmVjdGVk IHNtaWxl KGRvY3VtZW50 XENvbXBvbmVudA== dmVydGljYWw= IGNvbnN1bXB0aW9u IHNob2Vz LmltcGw= dW5rcw== LiI7Cg== IGZvb2Rz Xyk7Cg== LmFzc2VydFRydWU= IHBpcGVsaW5l IGNvbGxlY3Rpb25z IGVhcm5lZA== IENlcnQ= IHBhcnRuZXJzaGlw KGFjdGlvbg== MjYz IGNk IFZlcnk= T3B0aW9uYWw= IHNjcmVlbnM= IHRpdGxlcw== ZW5lcmF0b3I= IGFiYW5kb24= a2luZA== SUxURVI= IGNsb3Npbmc= bGljYQ== X2ludGVy IGNhbXB1cw== c2V0dGluZw== U3ByaXRl 44Gv X3JlcGx5 VG9MaXN0 OlwvXC8= ZWRl IGZvbGtz IGJvYXQ= KGFyZ3Y= IHBlcm1hbmVudA== IGNhcnJ5aW5n IGNvbnNlcnZhdGl2ZQ== aW1wb3J0YW50 LmltZw== IEltbQ== IGRpbWVuc2lvbnM= YWxhbmQ= c2luZ2xl RXhpdA== LS0tLS0tLS0tLQ== YXJpYW50 dGVybmFs U2Vjb25kcw== IEl0YWx5 b3RsaW4= LlJlc3VtZQ== PSci KT09 Y2VwdG9y IHNjYQ== L21haW4= U2VjdXJpdHk= X2RhdA== IGxldHM= IGFxdQ== IHdoZW5ldmVy YmVycnk= IGFjdGluZw== YW50aQ== cGQ= Jmd0 5q0= Wm9uZQ== VG9kYXk= IS4= MzIz VG9Qcm9wcw== YWJpcw== aXRhYmxl IGdhbA== XXs= aXpvbmE= IGluY29udHJp TkVU Ly8vCg== W2lu X3NhdmU= IGV4ZW0= IEtlbm4= IGV2b2x1dGlvbg== Mjcy dmFycw== X3N0YXRz LW9ubHk= IENvbG9yYWRv IHdhdGNoZWQ= Ym91cg== IHNldmVyZQ== IHByb2Zlc3Npb25hbHM= cG9ydGlvbg== IGd1YXJhbnRl 0LM= IHB1c2hlZA== IEdp 770= IHR1bQ== IEF6 IEVkZ2VJbnNldHM= IikpOw0K aXNzZQ== LmFj U2V0dGluZw== IGFwcHJlY2lhdGU= IFZhbHVlRXJyb3I= IHN1cnZl IFJvbGU= LkludGVy cGxvdGxpYg== amV0 ZGFt IHBsYXRmb3Jtcw== dGVsZQ== VVRP IEludGVybmFs Kzo= fTsNCg== R2VuZXJhbA== XEVudGl0eQ== IGxhd3llcg== cXVpdg== IFBvc3Rz aXNv IGFjY3Vt b2Jl IG1hcmtz IF07Cgo= CXRleHQ= LnN1Y2Nlc3M= Y3Vycg== YXNh ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IHRoaW4= X292ZXI= MDE2 YXJlc3Q= IE9z KGFkZHJlc3M= IHZlbG9jaXR5 IFtdOwoK PSIuLi8uLi8= IFByaXY= Ym93 IGd1YXJhbnRlZQ== JQoK MzIy IGV2YWx1YXRl LkxFTkdUSA== IGludmVudG9yeQ== cWE= X2RlYnVn Lk9uQ2xpY2tMaXN0ZW5lcg== IGxpZXM= IGFzc2Vzc21lbnQ= ZGF0ZXRpbWU= LmJhY2tncm91bmRDb2xvcg== ICovDQoNCg== cmFm dW53cmFw IEZvb3Q= IG5vdGlmeQ== IGxvd2VzdA== RE9DVFlQRQ== IGxhbmd1YWdlcw== ZXh0cmE= LWJhY2s= IGVpbmVu dGVtcGxhdGVz Mjcx X3Bhc3M= NTIw Nzc3 IE11c3Q= IGVzdMOh X2NvcmU= IFNjb3Q= QUk= IGJpYXM= YXRpb25zaGlw Q29uc3RhbnQ= IHByb2dyYW1taW5n SW5z dXNwZW5kTGF5b3V0 IFBST1ZJRA== YW50ZXM= IHNoaXJ0 aW5hdGVk Lk9L W2E= IHRoaW5rcw== PwoKCgo= IHJlZ2FyZGxlc3M= IE1hZ2lj dWxhdGluZw== CWNsYXNz YWRkR3JvdXA= UkVBVEU= IFNV IHNpbXBs Y29weXJpZ2h0 IGJ1bmNo IHVuaXZlcnNl OTUw IEVycg== IHByZXNlbnRhdGlvbg== Y2F0ZWdvcmllcw== IGF0dGFjaA== LnNpZ24= X0FD IGRpc2NpcGw= IHJlZ3VsYXJseQ== IHByaW1hcmlseQ== aW5rcw== W1s= LnJhbmQ= LnNob3VsZA== b3dudG93bg== PSIn IHNhbnM= IHN1cHBvcnRlcnM= c2VxdWVuY2U= R08= Li4KCg== IFNwcg== IGNhcmVmdWxseQ== VUlDb2xvcg== ZGVzdHJveQ== IHRvZG9z IE9SREVS b3R0ZWQ= IGRvbnQ= YXVkaQ== X3BsYXllcg== Z3Jl NjI1 IE9pbA== PGJvZHk= X3N0YWNr LlBhZGRpbmc= IFByb2R1Y3Rz IHByaXZpbGU= MDE0 IGluanVyZWQ= IEZ1cnRoZXI= IGFsaWFz LlJlc3VtZUxheW91dA== X0xFTg== IHNlcw== J107Cgo= Y3JlZW5z IGRpcmVjdGVk LlN1c3BlbmRMYXlvdXQ= b2RnZQ== LkF0 bWFya3M= IFVuaXZlcnM= ZXJ0cw== IEVzYw== IG5hdmJhcg== IHV0aWxpdHk= YWdub3N0aWNz IGluamVjdA== IEROQQ== ICIsIg== YW1hcg== IGV1 IHJlc3RhdXJhbnRz X3B1dA== dXRlcnM= VG9vbFN0cmlw dHc= aXN0cm8= IHpvb20= IGxlZ2l0 cGVjaWZpYw== Mjg1 IENvbWU= IGxvY2FsU3RvcmFnZQ== IGFic29y LlBhbmVs IERlc2lnbmVy IG93 SUNBTA== X3VyaQ== KGZpZWxk IHN1cGVydg== RXhpc3Rz IHJlc3BlY3RpdmVseQ== IFN0YW5k Q29uZg== dXNzaWFu MzY0 IGFyYw== IG5k dWNrcw== IHJlc3Ry IHNlYXNvbnM= IENoYXB0ZXI= IFN3aXRjaA== cGlj IGhp bG9hZGVk IGZsdWlk LWJ0bg== IHJ1bnRpbWU= Lml0 MjU4 Qk4= T3BhY2l0eQ== YXNhbnQ= cnlwdGlvbg== LW5hdGl2ZQ== IHRhdWdodA== 5a8= YWdtZW50 IG11bA== UmVnaXN0cnk= X2dyaWQ= IEJyb29r OlNldA== IG1vbmdvb3Nl QU1FUw== aW5uZXJIVE1M IHNvY2k= IEludGVs Z2V0SWQ= Q21k IGFjY2Vzc2libGU= cmFtZXM= bGV0b24= IF9fKA== CWRlbGV0ZQ== IFNxdWFyZQ== IgoKCg== IGJ1Y2tldA== YXZvcml0ZQ== IEJyZWFr Kytd IGJydXNo MjY2 IHRlbnNvcg== L2h0dHA= VGlsZQ== IGZ1bmN0aW9uYWw= ICIq d2hlbA== IHRlbnQ= IENoYXJhY3Rlcg== IHNlZXM= LlNU Qmln IGV4dGVybg== VXJscw== KSkpKSw= IEpy LkJ1aWxkZXI= Ljs= bmw= X0luaXQ= IEhFUg== xbxl bXlzcWxp X2ljb24= dmFu IGZlZWxpbmdz IGxlYW4= IGhvcGluZw== VFY= PSI8Pz0= IGN1cnZl X3N0ZA== X0xJTkU= ZHN0 IG1vcmFs ZW1lcw== b2d5 IHVyYmFu MDE1 IGFzaWRl IGVkaXRpbmc= QURE U2Vjb25k VHJhY2s= IHZvdGluZw== IGhvbm9y Lics ZWxsZW4= Q2hhdA== IGltcHJvdmVtZW50 J10KCg== oIE= IHBhcnNlZA== ICAgICAgICAgCg== IGxhenk= IGZhbGxpbmc= U2VyaWFsaXpl IFBh X2dy IGZvcmV2ZXI= LndoaXRl LlF1ZXJ5 QmVk IER1 IHJlc3VtZQ== IHBhcGVycw== IEluaXQ= IHN1ZmZlcmluZw== 4oCL IGRlY2xhcmF0aW9ucw== KCkt IGV4ZWN1dGVk IEhvbA== LmJsb2Nr 44Oz U0s= IHN0dWNr IExvY2s= aW5jaXBhbA== TnVsbGFibGU= IHNlc3Npb25z dW5p IGNvdXA= YXBwcm8= Z2hhbg== X3Bvb2w= Mjgz CWlk IHNsb3Rz IG1lZGljaW5l IGdsYWQ= IE1vbm9CZWhhdmlvdXI= YXRyZQ== ICQoJw== bWVyaWNhbg== YWdn IGthbm4= X2Nvbm5lY3Q= IGJyYW5kcw== IHNrZQ== IGRpZ2l0 PG4= IGJhY2t1cA== IHBlcnNvbmFsbHk= LlByb3BlcnR5 MzE0 LmNvbW1pdA== IGNyeQ== X2NvdW50ZXI= IG1hbGxvYw== IGdyYW4= IERyb3A= cGxhdGZvcm0= cmVkZW50aWFscw== aW5raW5n IFVJTA== dWJz IG1s bGVzc2x5 R2VuZXJhdGVk ZXJlb3R5cGU= IGJhdA== TGF5b3V0UGFuZWw= TE9U Iik7DQoNCg== IG11c2NsZQ== IGNlcnRpZmljYXRl QU5ETEU= IGhhcmRlcg== IHBpeGVscw== KSIsCg== LkhlYWRlcg== IGRldmVsb3Blcg== IExhcw== ZWdhbg== Ljw= IGV4cGxvZGU= IHBhcnRpY2lwYXRl UGF0dGVybg== KHRhYmxl IFRFWFQ= Y29uc3RhbnRz eEQ= dGhldw== fSwKCg== 44Gu X2Rlcw== IHN1YnN0cg== IFNtYXJ0 IHNjYWxh Z2VudA== LWJhcg== ZXNzaW9uYWw= dW1icw== LmV4ZWM= J1w= VEs= dW5pc3Q= cHJvb2Y= Y2lhbA== cHJvYw== PXsi LmhyZWY= PSQo IGx1bmNo aXNjYWw= IEVudHJ5 IG91dGRvb3I= c2VtYmxl IGVzc2VudGlhbGx5 L0c= W10p JSI= c3Rlbg== VVNFRA== IGR1c3Q= 5bA= CQoK IHJldGlyZQ== IGZpYg== QWx0aG91Z2g= IGxvdmVz IHJlYWRz eWNsZXM= IEhlbA== X3VpbnQ= ICcuJA== X2luaXRpYWw= TmFtZWQ= IGZ1bmRhbWVudGFs QURJTkc= IHRvdw== IEFERA== IEFjYWRlbXk= MDUw OlN0cmluZw== IGNvbXByZWhlbnNpdmU= LnNjYWw= IE1ldGE= TWVzc2FnZXM= LmFubm90YXRpb25z XFJlc3BvbnNl IGFja25vd2xlZA== IEFSRQ== XT09 IGNsZWFuaW5n 6L4= RW50aXRpZXM= IFNhbGVz IFdpcw== LmV4dGVuZA== YWxsZW5nZQ== IGdhbWluZw== JHF1ZXJ5 SUNFUw== RVRDSA== SG9yaXpvbnRhbA== cXVlbnRpYWw= ODUw QkFDSw== ZGV2ZWxvcA== aXNvcg== KGNvZGU= LUs= X1BJTg== cmVxdWVuY3k= IFF1ZXN0aW9u X2NvbnRhaW5lcg== X21vZHVsZXM= IEplcnNleQ== X2RpZmY= LmVs ICooKA== Y250 IFNh Q1BQ aW5pdGU= IHVudXM= LXdoaXRl ZXRhcnk= IGludm9sdmluZw== ID8+DQo= YmVzdA== YWxsYXM= ZW50ZWQ= ICAgICAgICAgICAgICAgICAgICAgICAgCg== X2Nvbm5lY3Rpb24= IHJlcG8= ZW5hYmxlZA== 0LDQug== IHNoYQ== IG1lbWJlcnNoaXA= U3RhdHVzQ29kZQ== aW5hdGluZw== X3Nt X2N1c3RvbQ== X3dlaWdodA== IGNzcw== U3RhdA== X2Vudg== bGlua3M= VFJM IEhpdA== LHI= dXBpZA== IG9wZW5z IGdlbnQ= X3Zpcw== IGpveQ== PHc= X2Nvc3Q= IFB5T2JqZWN0 cmVuY2U= IEdlb3JnaWE= IEJyb2Fk bW1h 4oI= cGY= ICJcIg== ICgm b21v IGxpdGVyYWxseQ== iJg= bWV0cmlj IGJhcnM= emVk KHdpbmRvdw== IElzcmFlbGk= IGZvcm1hbA== aWRlbnRpZmllcg== LmRhbw== IERlYXRo JTsK IGRlY2xhcmU= YXJtcw== UkVBTQ== UEVSVFk= IGNvbnNlcXVlbmNlcw== dG9vbHM= UGVvcGxl IFdoaWNo PigpOw0K LmRlY29kZQ== X0FDVA== QnV0dG9ucw== LmZsb2F0 LkZpcnN0 66U= IFBvbGl0 IFhDVA== VGFncw== IENHRmxvYXQ= PXN0cg== IGxlYWY= LWNoZWNr IElzcw== LnN5c3RlbQ== bG9nb3V0 YWNodA== QW5nbGU= c2lu Y2hhcnQ= SU5URVI= IE5VTQ== QmFzaWM= LlByb3BlcnRpZXM= 5Lit X2NoYW5nZQ== IEJyYXppbA== QWJzdHJhY3Q= IDorOg== X3VzZQ== 0LDQuw== MjY4 IEx5 SUJVVA== IG91dGVy IC0tPg0K IHJlbGllZg== bGFw cXVlcg== X3BhcmVudA== aGVhcA== TE9TRQ== IGNvbWJpbmU= IFJvc2U= b3dlcnM= IHByb2NlZHVyZXM= IFNvcnQ= YW5pbQ== dmFyaWFudA== ZWhpY2xl IHNpZ25pbmc= UHJpbWFyeQ== Y3VycmVuY3k= IHNleGU= b2Vu dGhldGE= ZW1hbg== IGltcHJlc3NpdmU= KCdf CVU= IFRleHRTdHlsZQ== X2NudA== IHNsaWNl KCc6 IHVuZGVyc3Rvb2Q= SGlz Mjc3 MDEz IGluZm9ybWVk IG5pY2s= NDI5 KFRBRw== aGQ= IGVsZWN0aW9ucw== ZXN0dXJl IFNhbnRh IENvYXN0 LnBkZg== aW5jaXBsZQ== LmNsb25l Ym9ybg== dXRh IGxpY2Vuc2Vk Q3I= IGJyZWFk IEhvdXN0b24= IG5vZA== IGhvcGVz IENHUmVjdA== IGd1aWx0eQ== LmdpZg== IHJvc2U= LkNvbW1vbg== VGlw QU5L IEZD RHVyaW5n IFN5bWZvbnk= IGRlZmVuc2l2ZQ== a20= KT4= YXJjaGl2ZQ== IFVSSQ== eWNsaW5n LW8= IFdlYnNpdGU= QU1Q NDA1 aXNobWVudA== IGRvY3RvcnM= RGlyZWN0 QVJJ IFJlZGlyZWN0 aWVyZW4= OTYw X2Rpc3Q= eW8= IFByb2dyZXNz IHp1bQ== IG1lbW9y IEVE IGp1cg== 5o2u X1RBQkxF IHV1aWQ= RXhwcg== LmhlYWQ= KCcl cG9pbnRlcg== IGVzdGltYXRl IEdyZWc= IGxvYWRlcg== IGlPUw== IG1lbnM= W3k= IHJlZnVzZWQ= IHByZWNpc2lvbg== aXNjaA== IEFDVElPTg== Q2xvdWQ= c1dpdGg= KHJldA== Mjky X0FERFI= X2NvbmY= KGRm IGxvY2tlZA== IHJpc2luZw== 44O744O7 IE1z IHNjZW5lcw== X0VYVA== X3Jhdw== X3RoZQ== cGVvcGxl IHJlY29u IEZ1bg== IGJsZXNz IFVwZGF0ZWQ= NDIy w7xu ICAgICAgICAgICAgDQo= cGVjdGlvbg== UmVsZWFzZQ== LmxvZ2dlcg== IFNZ IGNvdW5zZWw= dXJk X3RydWU= IGV2ZXJ5Ym9keQ== aXZvdA== IGhlbmNl IE5BUw== Nzg5 IG9wcG9zZWQ= dW5rbm93bg== IERFU0M= IENoYWly ZmFpbGVk IElOQ0xVRElORw== Mzg2 MzUy IHdyaXRlcnM= e30K w610 X2NvcHk= fTo= IEJhdA== IGNvbnZlcnRlZA== ZWRpbmc= cGxhY2VtZW50 IEhvc3Q= U291bmQ= 0LjQvA== IHNvdWdodA== NDAy bWlk IHNhbGFyeQ== b2dn 4oSi YnVs IHdpcg== dmFsaWRhdG9y X1NUQVQ= LnN0b3Jl IEJhdHRsZQ== xLFu IC0tPgoK VHJ1bXA= ZG90 IENPTlQ= LmZldGNo IGNvbnRpbnU= d2Fz IGZyYXVk X3RtcA== bWl0dGVy LnBpY3R1cmVCb3g= R0E= IHRvdXJuYW1lbnQ= LklucHV0 MzQz W3I= ZXhpb24= Y2VudGFnZQ== IEtvcmVhbg== dW5kZWY= IEF2YWlsYWJsZQ== cmVzaGFwZQ== IGtpdA== IFN0cnVjdA== IFNVQg== QW5zd2Vy X2xpYg== LnR3aXR0ZXI= IG9yZQ== IERyYWdvbg== LkV4dA== LGs= IGV4cGxhbmF0aW9u cmVmcw== IERyaXZl IFRyYWluaW5n Mjgy Lkhhcw== MzQx aW50YWdl Ymln b2xvZ2lzdA== ZW5uaXM= NDYw 2Yc= IGNoaWNrZW4= ICAgICAgICAgIAo= 55s= 44Gn IHBlYWs= IGRyaW5raW5n IGVuY29kZQ== IE5FVw== bWFsbG9j CWZwcmludGY= ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 aW5jbHVkaW5n IHByaW5jaXBsZXM= IE1haA== MjY3 c3RvcmFnZQ== LWtleQ== IGtleXdvcmQ= JTs= IHRyYWluZWQ= LmNvbnRyaWI= IGt2 X18nOgo= IEJveQ== cGFyYW1ldGVy IHN1aXRl IHRob3VzYW5k IGNvb3JkaW5hdGU= LWdlbmVyYXRlZA== 7ZWY Z2VuZXJhdGVk IGFkbWl0dGVk IHB1c3N5 I3c= IHN3aW0= dW5pb24= TmE= Mjc0 IFJveWFs LmNoYW5uZWw= VXBkYXRlZA== X1JPT1Q= IHZpdGFs MzM1 cmFjdGlvbg== IENydXNoZXI= IHByZWNlZA== IGhvcml6b250YWw= Qmx1ZXByaW50 IGF0dHJz IHNtb2tl 0JI= LkVxdWFscw== RkI= IFJlc291cmNlcw== cm9sbGluZw== IHBhc3Nlcw== IE51bQ== cm90YXRl ZXR5cGU= XCIs IHNlbnNpdGl2ZQ== IHRhbGw= P+KAnQoK UHJveHk= aXk= X3NlY3Rpb24= 4oCU4oCU4oCU4oCU YnJpZA== IGNpcmN1aXQ= YXRhbg== RU5D IGRyaXZlbg== IHZvdGVk IGVkdWNhdGlvbmFs IGludGVyYWN0aW9u YWJldGVz IHRvbmU= IEluaXRpYWxpemVDb21wb25lbnQ= IG1lcmVseQ== IOye Y29va2ll X2Rpdg== IFVJTGFiZWw= dmVseQ== fSk7DQo= X0VOVA== IysjKw== YXJ0aWNsZXM= IFNvdXRoZXJu IHN0cm9uZ2Vy IEdpdmVu IEVyaWM= IElS YWJzdHJhY3Q= VW5kZXI= bmFibGU= IGluY3JlbWVudA== b3Zlbg== IGNvaW4= X3RpbWVy IHN1ZmZlcmVk IEZSRUU= J10uIg== IFF1ZWVu c3RhdHM= IG1lZXRpbmdz Mjc2 IGVudGVyaW5n IGFsb25nc2lkZQ== KHNlc3Npb24= aXRhbHM= IGZvdW5kYXRpb24= IENyZWRpdA== LmRpdg== X0FMTA== cGNpb24= X3N0YXQ= aWNraW5n RGVmYXVsdHM= X3NyYw== IG91dHB1dHM= L0I= IGVudGh1cw== LWJs LkZvcmVDb2xvcg== CXRlbXA= RmFjZQ== IGludGVyYWN0 IHdlaXJk TW91bnQ= cmVsbA== dWRlbnRz IHJlcXVpcmVtZW50 IFN1cw== SUVS IGVsZWN0ZWQ= cmVmZXJlbmNl IE1F IHNlcnZlcnM= LndhaXQ= IHNuYXBzaG90 aWx0b24= IHRyaWVz IHRpcG8= LlRpbWU= Pnc= IG1vdW50YWlu IHBvdW5kcw== IFsuLi4= ZXhpc3Rz IG5nT24= X01BUA== IGZseWluZw== MzMx eGlldHk= CXZhbHVl X0RC dW5v IHNlYXRz VFVSTg== LmF1dGhvcg== ISk= b3JjZQ== IGluZGljYXRlZA== MzE3 LnNpbg== IGFzc2lnbm1lbnQ= aW1pZW50bw== IEZyYW1l MzI0 X2dlbg== aW5lcnk= Xyk= bWVzc2FnZXM= LnNldHRpbmdz IE1lYW4= IE11c2V1bQ== aXJx YXR0YWNo IFBhbGVzdGlu X1FV X3RhZ3M= IGNhc3VhbA== ZW1lbg== QVNTV09SRA== NDMy JHM= IENpcmM= 0L7QuQ== ZXRyaWM= L1A= MDE4 IGVwb2No PGhlYWQ= X0NNRA== IGdpdA== IHBlbmFsdHk= b3JwaA== X3VzZXJz b3Vyc2Vz LkRhdGVUaW1l YXRlcm5pb24= X3Byb2plY3Q= IHN1cGVyaW9y IERhbQ== IFNlYXR0bGU= WFk= PlRoZQ== IEFr IGdyYXNz LyoNCg== KGRpcw== IGd1bnM= IHRi IEtldmlu LmFyZ3M= IEFo b3BlZA== KEo= Y29sdW1ucw== YXJndW1lbnRz IFdpdGhFdmVudHM= X2Z1bGw= IERlZmVuc2U= U2ltcGxl IGRlYXRocw== Mjk1 IGV4dGVuc2l2ZQ== IFN0aWxs IEV4cHJlc3Npb24= IEFnZW5jeQ== IHBlcmZvcm1pbmc= Rlg= IHVzdWFyaW8= VUFM U2lkZQ== b2Rvcw== YXB0b3A= IGNyZWRlbnRpYWxz X2NhcA== YXRpZW50 IERpc25leQ== IGFp IGNoaXA= IHZvbHQ= Lm1ha2VUZXh0 JSUlJSUlJSUlJSUlJSUlJQ== IGJlbGllZg== X0xPQw== IENpdmls TmF2aWdhdGlvbg== IHJldmVhbA== IHZpb2xlbnQ= IEZpbA== IGNhdGFsb2c= ZW1lZA== c2Nhbg== LmNvbnRyb2w= IGNvbnN0aXR1dGlvbg== Q291bnRyeQ== U2VwYXJhdG9y X0FQUA== dG9waWM= dWV0b290aA== TUlO IGRlc2NyaXB0b3I= eXQ= RVRIRVI= IGRpc3RyaWJ1dGU= J30K LnRyaW0= LkxpbmU= IGxibA== YXNzZXJ0RXF1YWxz IERldA== b21ib2s= KHdpZHRo IHRvcnQ= IEVYUFJFU1M= YWNv VXNpbmc= IEJyYW5k d2FsbA== RU1FTlQ= IENvbW11bmlj PHVpbnQ= IEdVSQ== RUdJTg== IFJhbmdl L2k= IFRheWxvcg== Y29zdA== IHJlc3BvbmRlZA== IFRoZW1l bmNl SVNI IGZlYXR1cmluZw== UmV0dXJucw== IEty IC4K IG5hbQ== X2Ni VGVzdGluZw== IHt9LA== eWFs LmZpZWxk IC89 X1NIT1JU bWF0ZXM= VGVzdENhc2U= YWlubGVzcw== IGV2YWx1YXRpb24= X0lURU0= IFBhY2lmaWM= CWs= IGNhbnQ= IFJvcw== KXM= IGZldA== U1RSSU5H MzE5 IERpc3Bvc2U= Z2Fs IEpvaW4= IFBvcm4= IENhdGhvbGlj QVJHRVQ= Y3B1 56CB LnNjcm9sbA== MzI4 SVNJTkc= aWZlc3R5bGU= YW5jZW1lbnQ= IG1lcmM= IEJyb3dzZXI= ZXRlcm1pbg== IG92ZXJmbG93 QXZhaWxhYmxl IGJvdHRsZQ== OlVJ aWZpY2lhbA== IGNvb3Jk Y2xhcmF0aW9u IGNvbmo= R0xPQkFM b2t1 IGt3YXJncw== Y29uZGl0aW9ucw== dWx1bQ== IGdlbnU= IEhlcm8= 5Y4= IHVuZXhwZWN0ZWQ= IERBTUFHRVM= IGth IENvdWxk VVBQT1JU IFBob3Rvcw== IGNvbmZpZGVudA== IGRldGVjdGVk ZGVn cmdi IHN0cm9uZ2x5 IH07DQo= ICk6 IGxlY3Q= dXJzaXZl Uk9M IFdlaWdodA== IGVudGVydGFpbm1lbnQ= ICkpOwo= IGdvbm5h IGJi LmRv R1M= IG1pc3Rha2U= REw= IFBST1ZJREVE ZWFybmluZw== TGltaXQ= aXNzaW9ucw== W3Y= 5LiN aXJ0eQ== RGVs IHVuZGVybHlpbmc= cHJlbmU= IGphdw== IERJ cGVlcg== IG9iamVjdGl2ZQ== IGRlcG9zaXQ= IGtvbg== IGVzcA== Mjc4 LnNldFZpc2liaWxpdHk= L2xvZ2lu PHR5cGVuYW1l IGZyYW5jaA== L2U= MjY5 UGFyYWxsZWw= IHNjb3JlZA== IEhvbg== IFZpbGw= aWdh IGFudGljaXA= X2Fzc2VydA== IE9wdA== IGRlc2NyaWJlcw== d2Fu bW91bnQ= IG1vbml0b3Jpbmc= IHRvdXQ= 64qU fSx7 Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= PWludA== IGN1c3Q= LS0tLS0t IGF0bW9zcGhlcmU= UEFS b3J0ZQ== SVNJQkxF IElyb24= IE5vdGlmaWNhdGlvbg== LmxvZ2dpbmc= IEJPT0w= LXBvaW50 IGFmcmFpZA== ZW50YQ== IHRvbW9ycm93 QGltcGxlbWVudGF0aW9u IGVuZ2FnZQ== IEFudGg= IEZsb29y IFVs VG9vbHM= IGJhYg== IGNhcmVmdWw= 44GE IGNydWNpYWw= IGNhbGN1bGF0ZWQ= IFNB IHd5 OTEx RFg= X1RBRw== aW5kZWQ= IGpldA== IEVuZ2luZWVyaW5n Lk1BWA== ZW56 dmQ= IHB1YmxpY2F0aW9u ICMjIw== IGZhY2Vk cmFoYW0= IENhcHQ= MzM2 QXNzZXQ= IENvbnN0YW50cw== IGxvYW5z X0lQ IEZpc2g= UmVkdWM= X21hdA== RGF0ZUZvcm1hdA== X21l W11bXQ== IGludGVncml0eQ== IENvdXJzZQ== bG9iYWxz IGZhY2lsaXQ= IGVtYnI= IE5n LlN5c3RlbQ== IG1hbnVmYWN0dXJlcnM= IHByb3Zlbg== Lm9uQ3JlYXRl IGFsYXJt IMKn IGNvbW1vbmx5 aWNvcw== 5paw IFN0YXRpb24= fSku IEZpbG0= d2k= 54k= IGVuZ2FnZWQ= U3RhdHM= IGdvdmVybm1lbnRz NTQw IGFmZm9yZGFibGU= X3Byb3BlcnR5 IGFnZXM= KCctLQ== IGbDtnI= IFByb2Zlc3Nvcg== IGh5ZHJv UHVzaA== IG9yZ2FuaXplZA== Mjg0 QWNjZXB0 w6lt X2NlbGw= IG5i cGI= QXJ0aWNsZQ== IHJlbW92YWw= IGF1dGhlbnRpY2F0aW9u IEZS bGlkZQ== IHBsZWFzdXJl YXBvbA== IHBhcnRpdGlvbg== IFNpZGU= IGNyaW1lcw== IGRlbW8= aG9sZGVycw== IFBha2lzdGFu SW5zdHJ1Y3Rpb24= IGV4cGVjdGF0aW9ucw== MzMy LnNjZW5l ICcp aGVz aW5vaXM= X1Bybw== IG1vbGVj YW5kYWw= X3Nob3J0 IGRlZmF1bHRz IG5hdGlvbnM= aW5lbg== IHJ0 T0NL UGFja2V0 U0I= IFNIQUxM X2NvbnRlbnRz aXNlY29uZHM= dmVydHk= w6F0 R3VpZA== bm9t IGNvbmNsdXNpb24= LlVwZGF0ZQ== IGxvdmVseQ== IGVtaXQ= YmVj CQkJCSA= IGludGVsbGVjdA== IGJyZXc= ZWN5Y2xl RmlyZQ== MzU4 IGFkbWl0 IGFyYml0 IGFycmFuZw== IE1JTg== TWFpbA== IE5hdGl2ZQ== Q3Vy IGNvbnZlbnQ= LlJ1bnRpbWU= In0K LlJ1bg== IHByaW50ZWQ= IGNvbnZlbmllbnQ= LmFy bW9jaw== IEFkbWluaXN0cmF0aW9u 44G+ IGVsZWN0cm9u ZmxhdGU= IGxvbWJvaw== IGphdmFmeA== bmg= IHN1cHBsaWVz IHZpc2l0aW5n YWhs IHBvd2Rlcg== IHVsdGltYXRl IG9yaWVudGF0aW9u dXRhcw== X3NjYWxl Q29uZmlybQ== cGhvbmVz IE9wZXJhdGlvbg== L1Q= NDQz X0lOVEVS IGFpcnBvcnQ= IG1ldHJpY3M= IHBoZW5vbWVu YXVkaW8= MzM0 IG1haQ== KEs= aHU= YWxsaW5n cm9kdWN0aW9u IFRyYW5zcG9ydA== IE5PVEU= 5paH IGZld2Vy X1RJTQ== 7Kc= 0LrQuA== QWdl RklO Mjk0 IOyd IEF0dHJpYnV0ZQ== Z3JvdXBz ZXJr YXR0bw== LmRlZmluZQ== LkFzcE5ldENvcmU= YXRlZ29yaWE= IFNpcg== KGZvcm0= PFVzZXI= LnJvdW5k X2RheQ== LkFsbA== U2VydmxldFJlc3BvbnNl Lk5v bGFyZ2U= SUdI cXVlbnQ= IHZpcnVz IHJldHJv IGltcGVy Qml0bWFw IHZpY2U= IG9mZmVuc2U= aXN0ZQ== IEFVVEg= IOqw VG9vbFN0cmlwTWVudUl0ZW0= R3U= IHJhcGU= IERhdmlz IG92ZXJ3aGVs OmZsdXR0ZXI= LXRhYmxl IENvbnN0cnVjdG9y UHJpdmF0ZQ== ZXZlbg== Y2hy IGFwcGxpZXM= X2F0dHJpYnV0ZQ== IGNvbnRyaWJ1dGU= RVZFUg== Mjg5 TGluZXM= IEFmZ2hhbg== VmlzaXRvcg== IFNM c2Vhc29u Q1U= IGludHJvZHVjdGlvbg== IG1hdHBsb3RsaWI= xZE= IG5ld3NwYXBlcg== 4oCUYW5k PHRhZw== IGluaQ== IGRpdmVyc2U= SWdub3JlQ2FzZQ== MzUz IFVy QWdlbnQ= IGJ1bGw= LmVtaXQ= KEV4Y2VwdGlvbg== YXJMYXlvdXQ= IGluY3JlZGlibHk= IFRydXN0 PXso LW5hdg== IGVxdWFscw== IGxhZHk= IFBvZA== ZGlzYw== YWxhbQ== IElW 4pk= aXZpZHVhbA== cGhp MDE3 YWRkZWQ= IGRpZmZpY3VsdHk= IGNvbXBhY3Q= NTMw IEFjdGlvblJlc3VsdA== Y2Vycw== X2NsYXNzZXM= Tm9uTnVsbA== IHF1aXQ= IHBvdQ== U3dpdGNo aXJz LXRlc3Q= IEtpbmQ= IENhbGVuZGFy NDA2 IHN0cmVhbWluZw== fScs Mjc5 U1c= IHN0ZWFk b2Nh IHByb3ZpbmNl OTc4 IGNvbHNwYW4= IHBlcnNvbm5lbA== IEVtcGxveWVl IHByb2R1Y2Vy IGV2ZXJ5d2hlcmU= b2Ri 0J8= YnNvbHV0ZQ== YWN0aXZhdGU= IGdyaW5kaW5n IEJ1aWxkaW5n IFNhbmRlcnM= KHNj IE9mZnNldA== Ly8vLy8vLy8vLy8v fTsNCg0K KHsi IHNjYW5m IFlZ CWRlZmVy IGpldw== IHJlc3RyaWN0aW9ucw== Lm1w W2w= 5LiL bGFiZWxz cmVkaWNhdGU= YXdlc29tZQ== IHdhdmVz IGNvbmZyb250 IG1lYXN1cmVk IGRhdGFz X2V4aXQ= MzU1 b3R0b24= IHNob3VsZGVy YXNrYQ== KyM= ICAgICAgICAKICAgICAgICAK IHRyb29wcw== Mjkz IFVuZA== X2NhcmQ= d2ljaA== IG5vdXM= ICIvIg== c2I= IGNvbW11bmljYXRpb25z RXhwb3J0 IGRlY29kZQ== dGhz aW50ZXJwcmV0 QnlOYW1l IFNwaXJpdA== ZWRnZXM= T0xF IEVN dGl0 IFRocm91Z2g= IGJpbw== IFBhY2thZ2U= b3JuZQ== Mjkx IH0u NDEx YDsK IG9rYXk= IFplYWxhbmQ= aWRlbnRpdHk= KG5leHQ= IEJhbmc= TGlicmFyeQ== IGhlYXZpbHk= aWxvbg== IGRpcGw= IHJvdGF0ZQ== cHV0cw== KScsCg== IERhdGFUYWJsZQ== IG1heW9y LnRvTG93ZXJDYXNl IHNvbWVob3c= IE5vcnRoZXJu YWxj IGNhcGFiaWxpdGllcw== IHZpYnI= Kwo= IFN1 Mjg2 IFJlc2V0 X21lYW4= IGNpZw== LmNsb3Vk IEJhbmQ= IEZhY3Rvcnk= IEFyaXpvbmE= X2lv b3BoZXI= IGNvbnNjaW91cw== IMO2 XENvbnRyb2xsZXJz X3NwZWVk IEZhYw== X0NvbQ== IEJpYmxl d2Vu RURJVA== IHVubg== IFN0YWZm IElubg== IG1lY2hhbmlzbQ== IE1lbWJlcnM= IG1pZ3JhdGlvbkJ1aWxkZXI= J10uJw== LmdldEludA== PHZvaWQ= CWZyZWU= b2lkcw== XFN1cHBvcnQ= IGF1dG9tYXRpYw== IGNoYW5jZXM= 0LY= IGNvbXBsaWNhdGVk W3Jvdw== YWhvbw== IH0KCgoK TW9kZWxz V2lu IHRhcGU= aXJ1cw== aXpvbg== b25vbXk= KCJf Oi4= LnN0ZXJlb3R5cGU= Mjk2 KGVudg== X3JlY3Q= KHdpdGg= IGFzc2VydFRoYXQ= IGNvbnN0cmFpbnRz cHV0eQ== RW1wbG95ZWU= NjIw VEQ= IGd1aXRhcg== ODc1 IEpld3M= LnByb2Nlc3M= IGZpY3Rpb24= IFNoYXJlZA== 4pSA4pSA IHByb3BhZw== Lk5ldA== IGFjaGlldmVk CVE= IG51cnM= U2hhcmVk X0ZBSUxVUkU= IGJlaGF2aW91cg== IGNvbHM= aXNtbw== IGZlbWlu IGNoYWxsZW5naW5n IHBvc3Rpbmc= ZW5jaWw= IGNhcHR1cmVk IERvdQ== KHdvcmQ= IFR1cmtleQ== cGFuaWVz IHJlcHV0YXRpb24= T1JNQUw= IGVsaWdpYmxl cHJvdG9jb2w= NDE0 aWRhcw== KGZyb20= MzQ0 IGZpbmFuY2U= LXBlcg== IGdvdHRlbg== SEE= ZHVyYXRpb24= IFBhcmVudA== Njc4 IGludmVudA== IHJlc3RhcnQ= 0L7Qu9GM cml0aW9u KHJz PGJvb2w= aWVydA== IG1vZGlmaWNhdGlvbg== IFRY cmVhZGNydW1i YmFuaw== MzI2 JC8= IE1pbGxlcg== XSksCg== LkNoZWNrZWQ= IHNhY3I= c2VjdXJpdHk= IHBvc2U= IEJyYWQ= IGZpdG5lc3M= IGFubm91bmNlbWVudA== YXRpb25Ub2tlbg== IHNlcnZlcw== bmVlZA== IGdlb21ldHJ5 QVJT 5oA= YW5kaWRhdGU= IHNwcml0ZQ== X3NwbGl0 V2Vlaw== YWRpZXM= PigK Pz4i IC8vLwo= IGVpbmVy IHdlZWtseQ== CWxvZ2dlcg== X3BvcA== X21hbg== IG1pZ3JhdGlvbnM= IGFza3M= IGJz IGZhbGxz LldoZXJl LWhlaWdodA== X2ZlYXR1cmU= Lk1pbg== IGh5cGVy IHZvbGF0aWxl IHR3ZW50eQ== VHlwb2dyYXBoeQ== VW5hYmxl RGV0 LGY= LW1vZA== IHNldHRsZW1lbnQ= IGNvbnRyYWN0cw== bm9tZQ== QmFk IEJyaWFu NzY4 KHVzZXJuYW1l ISEhIQ== IGhhY2s= LkZpZWxk SFI= IEpvcmRhbg== aXph IMKg IFNoZXI= LmhlYWRlcg== KG90aGVy IER1Yg== KG9w IFJvdW5k IHZpZQ== IGFwcGw= CUo= IEluc2VydA== IExQ cmVnb24= IE1QSQ== IGFuY2hvcg== YWNh w7hy IGFkZQ== YW5jaG9y cXVlZQ== IFRyZWVOb2Rl IHRhcmdldGVk IGxhaWQ= QUJFTA== dmV0 IE9yaWdpbg== QW50 LicpOwo= ZXhwZWN0 ZWRSZWFkZXI= IE1ham9y IGluY2g= Q29tcGFy IHByZXZpZXc= IGlsbG5lc3M= IENPTlRSQUNU IEluZGVwZW5k dXVpZA== IG5vbWU= IHRj IEF2ZW51ZQ== aXNhbg== IHBocmFzZQ== X21vdmU= Iilb NDEy IHByb3Zpc2lvbg== IGNvbmNlbnRy X0lS IFV0 KCkr IG5hcw== ISw= IFJvYmlu aWF0aW9ucw== YXRpdHVkZQ== IHB4 IFdpdGhvdXQ= L2Jhc2g= ZWt0 cmVlbWVudA== MzQy T2JzZXJ2ZXI= MzE4 IFJlZ2lvbg== VUJMSUM= IHsvLw== S04= 5bc= R2FtZU9iamVjdA== 5b4= ZW5jb2Rpbmc= ICoqKg== cHJvamVjdHM= IHRr IGNoZWVzZQ== RU1QTA== YXJv INin2YQ= NjEw MzM3 IGNvbnNpc3Rz cmVmcmVzaA== dXJlYXU= IFNjYW5uZXI= IHNvaWw= IGZsYXZvcg== RGF0YVNvdXJjZQ== RXhlY3V0ZQ== 0LXQvdC40LU= IHNoaXQ= 5YiG PGFueQ== IHJldHJpZXZl IGJlbG9uZ3M= LnN0cmlw YWJzb2x1dGU= IGV4cGFuZGVk Ym95 KTot IHJlc2N1ZQ== LkpMYWJlbA== IHJlbHk= IGFsaWdubWVudA== LWZhbWlseQ== IHJlbmQ= T0xVTU4= IGJvcnJvdw== IHF1b3Rlcw== IExldw== IHNob3dlcg== IERFTEVURQ== X2xvb3A= ISIKCg== CXJl IGF0dGVtcHRlZA== YXZlcmFnZQ== IFBhaW50 cXVpc2l0aW9u b2xlbg== IGxpdGVyYXR1cmU= IFJlZmVyZW5jZQ== X1RFWFRVUkU= IFNlZw== IEluZHVzdA== Y3R5cGU= RFVDVA== X0hPU1Q= IFRyYWRl IHBsdWdpbnM= IGJyZWFzdA== dWxzZQ== IGNyZWF0dXJl Mzcy 44GZ IFdp IHN1cHBsaWVk Y29sbA== ISgi IGZ1Y2tpbmc= IENocm9tZQ== IFVyaQ== IE5hdGlvbg== IHZlcnRpY2Vz VEhF IE9yaWdpbmFs b25kZQ== IHNoYXJw IGNvb2tpbmc= MzQ3 IHsvKg== IFBzeWNo IEhvbGx5d29vZA== PSRf LkRvY2s= IGdlcg== IGJvbmU= X2Nvbm4= X3NlYw== eXNpY3M= ID0i Mjk4 U2Fs c2Y= IGRlZXBseQ== YW5nbGVz VGVybQ== YmVsbA== IFF1aWNr NTYw ZW5lcmF0aW9u YWRpb0J1dHRvbg== 5YWl fQ0KDQoNCg== IGNhcHRpb24= bGM= IEVM LFs= ICAgICAgDQo= cmV0dA== KG1ldGhvZA== IEZsYXNo NDcw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== V0lTRQ== LnNjYWxl IHJvdWdobHk= X2NoaWxk bWVtb3J5 YXlpbmc= IGluaXRpYWxpemVk aW5hdG9y 0LDRgA== IHNjYWxhcg== IEhv YWlyZXM= KGNvbHVtbg== LmRlc3Ryb3k= UEFDSw== IGhlbQ== YW5nZWw= X1NVQg== LnF1 INc= REVGQVVMVA== cG9zaXRvcmllcw== NTAz IExlbmd0aA== IEZhc3Q= IHNpZ25hbHM= IC8vJA== cmllcnM= IGR1bW15 QU5Z IHBlcnNvbmFsaXR5 IGFncmljdWx0 UGxhdGZvcm0= RVJP IFRyYQ== IGVub3Jt CVc= QWN0aW9uUmVzdWx0 IGF2ZXI= W3N0cg== ICctLQ== LlNwcmludGY= IGRlYnV0 INGH aGV4 X3V0aWxz IHBi VUlUYWJsZVZpZXc= IHp1cg== LmVuY29kZQ== NDE2 IHZhZw== LmVycm9ycw== 0L7QvQ== IG1y IEF3YXJk IGNwdQ== IHByZXNzZWQ= J2VzdA== IEZlc3RpdmFs J1Q= IGFr cmVzb2x2ZQ== MDQz Lm1l IG5pYw== IGdlbnJl IGF0dHJpYg== IE1vb24= IGFycml2ZQ== IERhdGluZw== IHRt LkNvbmZpZ3VyYXRpb24= NTA1 LnJlZA== IGdsbQ== IHN0YXRpb25z c3dpdGNo IHRpZWQ= 5Lq6 IC8+PC8= UXVhbnRpdHk= cXVpcnk= X3RhYg== IGFsZw== VG9hc3Q= cmVzaXpl cXVlc3Rpb25z c2NoZW1h TGl0ZXJhbA== KGVudGl0eQ== TkVDVElPTg== Y2hhbmdlZA== X0ZJRUxE X0hFSUdIVA== IG9yZ2FuaWM= UFJF IENhdA== LkRyYXc= RXM= IGxvdWQ= Njgw ICAgICAgICAJ IEthdA== IGhlYXA= 4oCcSXQ= MDcw ZXRy IHVubGlrZWx5 ZXJhbHM= L2F1dGg= NTAy dG9kbw== UGxhY2U= UG9zdGVk Q29tbWVudHM= IFRlY2g= IEZpbmFsbHk= ZWdyYXRpb24= IG1pbmltYWw= IEZpbGVz IHRhbWI= 66Gc IFJlbGVhc2U= NDI1 LnJlc2l6ZQ== IM8= Y29sbGVjdA== PXA= IExJQUJMRQ== IHByb2R1Y2luZw== LXdyYXBwZXI= IHNpbmdsZXM= IE5CQQ== b3Jy ZXJlbg== LmFkZEFjdGlvbg== IHRoZXNpcw== ZG4= UFRZ LmRlcw== IGJhY3Rlcg== IEV4cHJlc3M= ICopCg== 5ZE= L2FkbWlu c2Vjb25kcw== 5Yqf dXNzaW9u YWJldGg= IENvbXB1dGVy IHJ1bGluZw== KCIuLi8= LkdFVA== IE1lZGFs aXRpb25hbGx5 Y29tbWl0 Zm9jdXM= X0xFVkVM aW5kYQ== RmFjdA== PW5w PSIiPgo= IHN1YnNlcXVlbnQ= cG9zYWJsZQ== LWZsdWlk IHRob3JvdWdo IHB1YmxpY2x5 YXB0ZXJz IFdpbHNvbg== X1BSRQ== eWFyZA== 5Lw= CWlu MzM5 IHJldmVycw== IGJ1bGxldA== Y3JpYmVk bmVzb3Rh ICgkXw== YW5ub24= Y3Vyc29y IGNsb3RoaW5n IE11bHRp Mjg3 Oics IHZlc3M= b3JkaW5hdG9y IGVpbmVt Q2Fubm90 IGFybWVk CVY= 5LiK LkZsYXQ= IFNlcA== IFN1YmplY3Q= X2ZvbnQ= IGNoYXJhY3RlcmlzdGljcw== RG9uZQ== ZWxu IyMjIyMjIyMjIyMj UE9T IGRlbnNpdHk= IFBsYXRmb3Jt LWl0ZW1z IG92ZXJz IHB1c2hpbmc= 56Q= LkNvbm5lY3Rpb24= X3Rlcm0= IGluaXRpYWxpemF0aW9u X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 56w= LmRvY3VtZW50 bGVzaA== CWRvY3VtZW50 IFBpbg== w6dh IGRlZmluaXRpb25z LlBhdGg= X1dSSVRF IAkK Pz4KCg== IHRlcnJpYmxl YmVhbg== aWNrZXRz IFNW QnV5 KHRhc2s= IHJlZ2ltZQ== Z29vZ2xl IGNyYWNr LnZpc2l0 TlVN ZW5lcmd5 IHN0cnVjaw== X3NhbXBsZQ== LnBheWxvYWQ= IHJldmlz IFNjZW5l IHBn IGJyZWFrZmFzdA== VVJSRU5U LmNoYXJBdA== X2V4Y2VwdGlvbg== IEFudG9u IGd1aWRlbGluZXM= IGV4aGF1c3Q= IEZpbmFuY2lhbA== IGluZGVudA== IGRlc2t0b3A= SGlkZGVu RmFpbHVyZQ== IHByaW5jaXBsZQ== IGl2 IHNla3M= bmV0d29yaw== IG51bWJlck9m IEFsYmVydA== CWxvbmc= ODAx LC4= IHplcm9z ZmFkZQ== IFR5cA== IFRlcm0= IEFydHM= LkFwcGxpY2F0aW9u IGJlaGFsZg== 5oi3 IG1lcmU= KGAkew== IGF3YXJlbmVzcw== ZWxwZXJz ZmxpeA== IHdlaWdo IGVzdGltYXRlcw== LmNoaWxk L08= IEJpdG1hcA== LmJvdHRvbQ== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq RXhwZWN0 ZW50bw== IEZvcnVt dmVyYWw= IGphaWw= IGFiaWxpdGllcw== IEhPTEQ= IENpdA== IGR5bmFt IGdyYXk= CQkJCQkJCQkJCQkJCQ== Lm5leHRJbnQ= YW50bHk= IEFSSVNJTkc= KHByaXZhdGU= IHJlamVjdGVk IE5pYw== IGxlYXRoZXI= PXsK YWx5dGljcw== dGhldGlj LlRvcA== Mzcz LlBhZ2U= PXtg IDsNCg== ZGVwdGg= bWFubg== V0Q= IFNvbQ== LlJpZ2h0 ICl9Cg== IHRyYWl0 w5c= aWFj IHJ2 U2FtcGxl LlhtbA== b3BwZWQ= INGE bGlzdHM= IHRlYXI= aXZlcnNhcnk= LmNvbGxlY3Rpb24= IENvbnN0aXR1dGlvbg== IEh0dHBSZXNwb25zZQ== IGJyaWxs IFByb20= aG92ZXI= MzY2 IE1pYW1p IGFyZ3Vl X2Zsb2F0 NTA0 IOOC IG5hdA== IFRhbA== IGludGVncmF0aW9u KGN1cg== IHJlbW92aW5n IGNvZWZm IFRob3VnaA== IGZvcmVjYXN0 NDA4 IFZlZ2Fz U2l0ZQ== MzQ2 IHRyYWI= IEhlbnJ5 LWk= IGludm9sdmVz QlQ= IHNsbw== SW52b2tl IGx1Y2t5 MDI1 cmF0 ID8K IGhhbmRsZWQ= KGZk Y29udGVudHM= IE9GRg== UkY= IHN0eQ== IE1vdG9y dGVyeQ== dGF4 TUFQ IE1ycw== IHBob25lcw== IFVJVmlldw== IikpKTsK KGRldg== IElyaXNo MDE5 IHdz REk= X09GRlNFVA== IEV2ZW50cw== IHN0YWdlcw== IH0vLw== IGhhYmVu U1RBTkNF IFNpbg== IE1vbmV5 KHRvcA== IGFwcG9pbnRtZW50 VkVSU0lPTg== bWV0YWRhdGE= X2NvbW1lbnQ= IGNvbGxlYWd1ZXM= bWFwcw== 4pg= CgkK KGFs X3JlcQ== IGZ1dA== IGFyY2hpdGVjdHVyZQ== MzUx IFdIRVRIRVI= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== X3NjcmVlbg== IHN0eWxlVXJscw== IG1vbnN0ZXI= LnVw cGhpYQ== IHByb2Nlc3Nvcg== IFRlcnI= PScs IE1hbnVmYWN0 IE5U a2Vs aWJlcm4= CWZpbGU= QWxp cmllbnRhdGlvbg== IC8vIQ== YXBvcmU= YW5lb3Vz IENyZWF0 Zm9sZGVy NDE1 IGhheQ== U3VwcHJlc3M= KGxlZnQ= IGV1cm8= IGRpc2NsYWltZXI= dXN0cnk= c2hpcHM= X2Zk IEZh X2luc2VydA== IHJvbA== aWZ0aW5n IENvbW1lbnRz X2Jy IGxvc3Nlcw== IEFkZGVk Y2hhcmc= INC/0L4= X3N5c3RlbQ== IFNvbWV0aW1lcw== IFNwYWlu KGdyb3Vw aWFsaXM= IGRvbGxhcg== IEFyZ3M= NDk5 Mjk3 cXVpcmVz IFRlbg== LnNjc3M= IHN1cnZpdmU= dXNhZ2U= IGp1bg== aW1pdGVy 77yBCgo= IGZpZnRo dG9nZ2xl IGRlY2xpbmU= KCQi KExvbmc= aW5nZQ== IHBpbG90 LWxpZ2h0 LXJhZGl1cw== IHBvZGNhc3Q= IG5hdHVyYWxseQ== UGFnZXM= 5Li6 IERlc3BpdGU= IGxpZ2h0aW5n IGNyYXRl IEJpbmFyeQ== IHJlZHVjaW5n IGVsZWc= IE1vdXNl IFRlc3RCZWQ= IGJlZm9yZUVhY2g= X0FSUkFZ UmVkaXJlY3Q= MzI5 IGZsb29k IHNoaXBz MzYz IGVsZWN0cmljaXR5 KSoo 6rg= IFZpZXQ= aGVybw== IGRpYQ== IEtlbnQ= aGVhcnQ= IHRocmVhdHM= X2FjYw== IHN5bWJvbHM= aXNjaGVu X2luc3Q= Q3JpdGVyaW9u IFRJTQ== LkhlaWdodA== NTgw IOKAmQ== KCk7CgoK UHJvZHVjdHM= X1NQ IEN5 IGRlcGVuZGVudA== ZXN0ZQ== IGRhdG9z ZGl0 0LDQsg== SUdOQUw= IGxlc3Nvbg== Ij4n IENvdmVy IEhvcGU= IFRpbWVy IGRhZA== dmlkZXJz IFBob3Q= Lz8= cm9weQ== b21pbmc= YXNpb24= IFwo IEVU IFJlYWRpbmc= IGVwaXNvZGVz bG0= NDIx ZWNoYQ== IG5ldXJv ODIw IGhhcm1vbg== IGxpYmVyYWw= LWluZA== Mzkz REFUQQ== IGV2ZXJ5ZGF5 IGRpdmlkZWQ= IEFjdGl2ZVJlY29yZA== ZmlndXJl VUE= 5Lk= cmllbmRseQ== dGVjaA== NjAx LmdhbWVPYmplY3Q= 0LjRgtGM Mzc0 IG1vb24= ZnRpbWU= IG5vY2g= IFRPUlQ= IFZN LmluaXRpYWw= KGNoaWxk IG11c2ljYWw= IG9j YmFz IEhheQ== MzYx X2xvbmc= IG1lbXNldA== aWxleQ== YWRlbHBoaWE= U1Y= cm9hdA== X3R4 IGxvbg== IG5nT25Jbml0 YnA= IEdvbGRlbg== QUNIRQ== IHdvcnJpZWQ= YXpp RWFy VGFrZQ== KGZw YnVyZ2g= X0RhdGE= Z3Jlcw== IE9udA== cHVz IHRyYW5zcGFyZW50 IHBvY2tldA== IHJhbQ== aWdyYXRpb25z Lg0KDQo= IFso IGFkb3B0ZWQ= IHJlcG9ydGVkbHk= IERyZWFt IH0pKTsK bG9zaW5n IHRlZXRo IEJvb2tz Iiwm ZW5ueQ== TEVNRU5U IGdlbA== IFBsYW50 NDM3 IeKAnQ== Lmhvc3Q= IFJlcGx5 Mzc2 cmVuZ3Ro IHJlY29nbml0aW9u IH19Pgo= TEE= IG1pcnJvcg== IGFzc2lzdGFudA== KGRldmljZQ== IHNwaXJpdHVhbA== YnVpbGRlcg== wqc= IG91dHI= IHR0 IFBFUg== IHJhZGljYWw= TWV0aG9kcw== IHBhY2U= dWR5 IGd1dA== IEdyZWVr IG5vbmF0b21pYw== IFBhcGVy X0dQSU8= IG9ic3Q= LkFk dmlyb25tZW50cw== IFNvdg== MzU2 KGNvbg== IFRyYW5zYWN0aW9u LmFzc2lnbg== CWNhdGNo ZWx0ZXI= IGJpdGNvaW4= X0dS IDw/PQ== X2xhbmc= 7J2E QnJvd3Nlcg== IGNvbnNpZGVyYXRpb24= IEV4ZWN1dGl2ZQ== 6Ze0 O1w= IEpTT05PYmplY3Q= IEJlbGw= IHNwb2tlc21hbg== fn5+fn5+fn4= b2NrZXk= IEdybw== IEF3 Q29uc3RyYWludA== IFByYWN0 IEV2ZXI= cHJpbQ== OnsK X2lt UE4= TWlsbGlz VU1FTlQ= IGJhZ3M= w6Vy QU5ORUw= MzU0 IGlj IHRyYW5zcG9ydGF0aW9u IFNhdWRp aGFuZGxlcg== RHJhZw== IGhk Y29sbGFwc2U= X1BI IHVi QVJN IEFQUA== IHRvbmlnaHQ= IGRpbmluZw== UmVjb2du IGJj aWd0 KG51bWJlcg== Qm9vdA== IGVsc2V3aGVyZQ== IGFycm93 YXJnYQ== IGRlbGljaW91cw== IFNO V1I= VmFsaWRhdGU= IFF1YWxpdHk= KGVtYWls IGludGVycHJl aWdhdGlvbg== IGNob2NvbGF0ZQ== NTI1 X2VkZ2U= IHN0b3Bz OmZ1bmN0aW9u KXw= IHRoYWk= IExvYWRpbmc= U3Rvcnk= VHJpZ2dlcg== YnJhbmNo IHRk ZW50aWNhdGVk IGFkdmVudHVyZQ== IGJsb2NrY2hhaW4= RXZlbnRIYW5kbGVy IHNxcnQ= LlBy TG5n QmVjYXVzZQ== IHZpdg== IG9jZWFu eWx2YW5pYQ== 0LDRgQ== IFV0aWxz IGRlc3Blcg== IGRlZmVy CXJlcXVpcmU= aGw= UmVxdWlyZQ== XVw= IGRpcmVjdGlvbnM= X3Jlc291cmNl IHN1YnNjcmliZQ== IMO6 IEhlYXJ0 ZXN0cw== LXN1Yg== IFJo Zm9yRWFjaA== IGRlbGlnaHQ= IHRlcnJpdG9yeQ== LmNvbmN1cnJlbnQ= ICgr anBn IHByZXBhcmF0aW9u IHJvdW5kZWQ= Q29tbQ== LkxlZnQ= IG9waW5pb25z IE5hdmlnYXRpb24= KGZpcnN0 Iiwk IGhpcmU= IGRldGVjdGlvbg== LmdldEVsZW1lbnRz IGVwcw== IHNrbGVhcm4= IGN6 IC8+DQo= bWV0aWM= IHRyYW5zZm9ybWF0aW9u 5Y+3 IHJnYg== aXN0cmlidXRpb25z IGltcGxpY2l0 L2lu ZGVzdGluYXRpb24= 0LDRgtGM WmVybw== IHVuc2V0 OTIw LndoZXJl Lmdv IGZvcm1hdGlvbg== IGRlY2xhcmF0aW9u KCkNCg0K IEV4cGw= CQkJICA= L3Bybw== LkpTT04= NDQx IGRlc2s= LnN1YnN0cg== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t bHlu cHNvbg== NDA3 ZGlzYWJsZQ== IEZ1bmM= CUFzc2VydA== IE1BUks= IGRlZmVhdA== IGJsaW5k IGNvbnN0YW50cw== MzYy LmhlYWRlcnM= VUlMRA== IGV4cGVuc2Vz UGl4ZWw= IGhy IGZlbA== IEVhc3Rlcm4= NDI0 NDkw X2RlbA== MzU3 IEN1Yg== IHNx CWNvdW50 IERpcmVjdG9yeQ== IGV4Y2x1cw== IGhpc3Rvcmlj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGNvbXBvc2l0aW9u IGRhdGFHcmlkVmlldw== IEJ1cm4= IEJD TWFzdGVy IHNwYXdu IGJlYXJpbmc= LlNldEFjdGl2ZQ== aWxv IGdhbGxlcnk= IGZvdW5kZWQ= IGF2YWlsYWJpbGl0eQ== LnNxcnQ= IHBlcw== IERPTQ== bWF0ZQ== T2N0 IG1hdGNoZWQ= aXRpdml0eQ== IGFueGlldHk= LnByaWNl IEluc3RhbnQ= 7Io= IHR1dA== SUNvbGxlY3Rpb24= LnNoYXJlZA== X3NxbA== dGJs bGlicmFyeQ== X2Rlc3Ryb3k= ZXJtYWw= IE5vdGVz IEVpbg== IHNvdXRoZXJu IE9USEVSV0lTRQ== IG1hY3Jv Lmxvd2Vy Y2xz Q29udGVudFZpZXc= Lmxpbms= Y29uc3RhbnQ= IEJlcw== IHNvbWVib2R5 bmI= Mzk5 Ij57 KGxvY2Fs Li4uLi4= IE51bGw= bXg= IMOn IHBhdXNl LS0tLS0tLS0tLS0= X01P IENN IGZvcktleQ== IERWRA== IGNsb3Nlc3Q= X0RFVklDRQ== IFN0ZXBoZW4= IEJCQw== IFRyYXZlbA== UGFpbnQ= IFJlc3VsdHM= IFJ1bGU= IHRw IHJhdGluZ3M= Y2lu Y3N2 Pi8= IEdPUA== bGFk INGA IGluZGV4UGF0aA== bWF0cml4 PWY= YXJzZWQ= IH0pOw== IENvcw== IFNjb3Jl IHRhaw== IEVTUA== IElOQw== X05VTEw= LWZsZXg= Il1b aW50bw== ZWxhbmQ= QXV0aG9yaXphdGlvbg== X0ZBTFNF IGdhdGU= IHZpZA== aXN0ZW50 VElNRQ== IHJld3JpdGU= IHRpZQ== IGFyY2hpdmU= NTEx LmV2ZW50cw== LmdldFBhcmFtZXRlcg== IFBlcm1pc3Npb24= IHByb2dyYW1tZQ== IOk= anVk IGNhbWVyYXM= MzM4 MzQ5 KHN5cw== IFN5cmlhbg== IGltcHJvdmVtZW50cw== IGhpcA== IHN1aWNpZGU= IHNjaG9sYXI= IGNvbXBhdGlibGU= MDIy cmVtb3Rl LmRvd24= RlVOQ1RJT04= IG1hbmFnaW5n IFVJS2l0 LnJhdw== Pj4+Pg== Mzcx IGRlbWFuZHM= ZWxsaXRl IGRlbnQ= IE1pY3Jv 5Y+W J11bJA== IElF aW1lbnNpb24= IHRyZW0= NjMw IGdhaW5lZA== LndpdGg= Lm9r aG91 IGJvbQ== YW1wYWlnbg== IGpvaW5pbmc= ZmlzaA== IGFkZFN1YnZpZXc= ODYw IG5vcnRoZXJu LmNvcg== b3JldA== RGll aW5pc2g= X2NvbXA= IGF0dGVuZGVk IGNvbGxhcHNl IFNT YWNlbnQ= X0VRVUFM IERlZXA= UkdC CXRlc3Q= b2x2ZXM= dXNldA== VW5pdHlFbmdpbmU= d3JpdGVy UmVzb2x2ZXI= LCU= aWZmZXJlbmNl X3JlbW92ZQ== b25kYQ== IGZlbW1l Mzg1 ZGVjb2Rl QnJhbmNo IGZsdXNo IGlubm92YXRpdmU= VGVzdHM= IFsnLi8= IGNvdmVyaW5n LmFkbWlu dWx0aXBhcnQ= KGxhbWJkYQ== 77u/bmFtZXNwYWNl IFNwb3J0 ICEo YWNsZXM= IGRlcHJlc3Npb24= IEtvbmc= NTcw IHBlcnQ= IENvbm4= IE90aGVyd2lzZQ== L2hvbWU= c3VwcG9ydGVk IHBpbms= IGludml0ZWQ= w7Fvcw== X2VuYWJsZWQ= IC0K Rlc= ZW5lcnM= IE1Z IHN1Z2dlc3Rpb25z Q2FudmFz IGZlcg== IE1hcmtldGluZw== QFRlc3Q= dW50dQ== IFZlbg== IENvdQ== aXZhbHM= RG9uYWxk bGltaXRlZA== CQkJCQkJCg== IGFuYWx5c3Q= KGVudHJ5 IHJlcHJlc2VudGF0aXZl X2F0dHJpYnV0ZXM= IGZ1cg== LmhpZGU= cmVzcA== YWRvcmVz cmlkZXM= IEpvc2g= cm9ib3Q= IE5BVA== IHNlc3Nv IGludGVncmF0ZWQ= OnRydWU= cGFydHM= IHN0dXBpZA== OmV2ZW50 QGVuZHNlY3Rpb24= IHB1 LlRhYmxl IFlpaQ== YDsKCg== IGNsYW5n PSIiPg== ZW5nYW4= X3BhcmFtZXRlcnM= LmludGVybmFs IE1vZGVybg== IG1ldHJpYw== IHNlbWk= PXt7Cg== NzA3 LmFtYXpvbg== IEJC YWludHk= dmlld3BvcnQ= MzY3 IHN0YXJ0QWN0aXZpdHk= ZGlzcGF0Y2g= KioqKio= IGZsYXY= aWZmZXJlbnQ= Mzgy W3RoaXM= IHN0YWtl IGFyZ3VlZA== dmlvdXNseQ== Lndvcms= IE9haw== T2xk KGFzeW5j bm90ZXM= IGZsaXA= IGRpc2Fn IFRF CWVycm9y PCc= IMK7Cgo= IGZpbHRlcmVk IE1hY2g= IGh1bmc= X2R1bXA= X3NhbXBsZXM= LWRpc21pc3M= IHJheQ== SW1wbGVtZW50ZWQ= REs= IGplZA== MDkw IGJyZWFrcw== IGZpdHM= Lmdy IFplcm8= b3Jv IGVxdWFsbHk= ICdb IGNvbmNlcm5pbmc= PG1ldGE= cGxheWVycw== X1BPUw== X3NpbQ== SmFu IHlvdXJz CU4= IHNwaXI= IGNoYW1waW9u IEFuYWx5c2lz YXBh IE5TTG9n X2xpbmVz w7Fh CQkgICAgICAg ODE5 LlNj UmVw ZXRyb2l0 dXJhYmxl TUlU Y29tcGF0 b3duZWQ= X2luZGljZXM= XSwNCg== IGRpc2NvdmVyeQ== IERpZWdv b2Jp LkluZGV4 IHRyZW5kcw== UExBWQ== Lm5v IGxlbnM= X2NmZw== IGFubm8= YWdhbg== IHBlcmlvZHM= dGVybXM= eXo= IGF0dGFja2Vk aWJyYXRpb24= UEVDSUFM X2dyYWQ= IGFjY29yZGFuY2U= LlJlYWRMaW5l LmRldmljZQ== cml4 LmNvbnRhaW5lcg== bWF5 ZXJjaXNl IEx1 IHJn INGB0YI= CQkKCQkK KHVu VEVSTkFM IGxlc3NvbnM= IGFsbGVnYXRpb25z IHRyYW5zbWlzc2lvbg== LlJlZg== TW9iaWxl IFRvdXJuYW1lbnQ= IE51dA== IEdh IENhcGl0YWw= ZGVmaW5pdGlvbg== LWV4cA== Y2xlYW4= IGZhbnRhc3k= IGVuaGFuY2U= ZW50ZW5jZQ== MDMx J106Cg== YWNrZXRz IGNlbGVicmF0ZQ== QCIs U2VyaWFsaXplRmllbGQ= IGFycmF5cw== dGI= CXN0 W2Fzc2VtYmx5 KHJlZw== LmNhdGVnb3J5 IGltcHJvdmluZw== IHNhbG9wZQ== Qnl0ZUFycmF5 T3JpZ2luYWw= IFt7Cg== 5Zue IENsaW4= b2VuaXg= IFNhbXN1bmc= IG1haW50YWluZWQ= IGFnZW5kYQ== ZmFpbA== IHByZXNlbnRz IHRpbWluZw== Lm1hcms= Jz48 IHByb21vdA== IGluY2w= X29ubHk= 66W8 IEF0dG9ybmV5 LWRhdGU= IGxhbmRzY2FwZQ== IGZ1 U1k= LnByb3A= IEFycg== cGFn UGFyYWxsZWxHcm91cA== JzoNCg== IGxvZ3M= YXVuY2g= dW5jaQ== bmFtYQ== VGFibGVDZWxs aXNzdWVz Lns= ZWN1cml0eQ== X2V4ZWM= b2xkcw== IGhvc3Rz IHByb3Rv X2ltcG9ydA== X3NvcnQ= IEJvdw== IE5vcm1hbA== IEZhcm0= LmNyZWF0ZVBhcmFsbGVsR3JvdXA= Um90YXRpb24= LmVycg== IHBsZWFzZWQ= aXRhZ2U= Lldo CQkgICAg TVI= IE1PUkU= IE5hdHVyYWw= X3RyYW5zZm9ybQ== QkFTRQ== ZW5lcmFs dXRkb3du LmNvbW1vbnM= V1Q= IGFhbg== LlJlc3VsdA== ZG9n IGNsaWNraW5n KSwKCg== I2xpbmU= T3BlcmF0b3I= IGNpdg== IG1lcmc= b2J1Zg== bmd0aGVu IFt7 IGNhbmNlbGw= dHJpZ2dlcg== Ljo= V09SSw== ZGVjbGFyZQ== IGRlY3JlYXNl xZtjaQ== bG9vbQ== Lk5vbmU= IE1J IEphc29u IGhlYWx0aGNhcmU= aWFtb25k c3lsdmFuaWE= Kng= IFJh W2I= IHByaW50aW5n cGhhYmV0 IExhYm91cg== b3BwZXI= IHppam4= LXRhcmdldA== X0ZVTkNUSU9O IG9jdA== 0LXQvdC40Y8= 5Zyo IHdlc3Rlcm4= IGNvbXB1dGVycw== IFJFVA== SGFzaE1hcA== W1N0cmluZw== Z2V0VmFsdWU= X0RBVEU= Lk5leHQ= IEZpZg== w6ls aWNrZWQ= 5o4= LU1N IHsKCgo= IGNvbnRhY3Rz IGRpZ2l0cw== UHJvZHU= IHVudXN1YWw= IHJhcGlkbHk= dHVyZXM= IGFuZ3J5 Y2FuY2Vs eHh4eA== X3BhcnNlcg== aWRpdHk= X1BSRUZJWA== NzEw IG1laHI= IHJhcmVseQ== ZXRoZQ== b3Blcw== ICUu d29ya3M= IHRoZXRh IGNvbnRyaWJ1dGlvbg== IFRvbnk= IHNxdWFk NTM3 0LDQuQ== IMOubg== dGhlcmU= b3V0ZWQ= CXE= mYI= Z29vZA== TEk= 6aG1 IExpdmluZw== aXphYmV0aA== IGt0 IERhbGxhcw== XV0sCg== IC8+Cgo= IHJhaXNpbmc= L3JvdXRlcg== X2dhbWU= MzY4 IENVUg== emVucw== LmVz IGZvbnRXZWlnaHQ= KGZ1bmM= bm90aWZpY2F0aW9u ICcuLi8uLi8uLi8= IGJsYW1l 44CCCgoKCg== YW5jbw== OTgw SWRlbnRpdHk= Zm9sbG93 IGFydHM= eHM= IG9mZmljaWFsbHk= IFN0dWRpbw== IHJlY29tbWVuZGF0aW9ucw== IGxvY2FsZQ== IGFtYXRldXI= IEVuYWJsZQ== IGNhcHM= LkVuZA== Mzg4 LWFkZA== X2dzaGFyZWQ= IENU Rm9yY2U= CiAgICAgICAgICAgIAo= IG9yYW5nZQ== IGxw IGFuc3dlcmVk LkdyaWQ= IGR1YWw= IHN0cmF0ZWdpYw== IG5vYm9keQ== IGZhdGFs X2VzdA== KGVs IOyg IEJ1ZGQ= QUlU X2ZhY3Rvcg== LW9uZQ== IEhBVkU= Ig0KDQo= NzYw UHJvZg== IMOkcg== c3RyaW5ncw== IGRpcnR5 IEZhY2U= IEJlZ2lu IEJ1cw== IHdpcw== 5a2X IHNwZWFrZXI= IGNhcnJpZXI= IE9t IGhhZG4= QWxsb3c= OjpfXw== IHZlcmI= IENvbXBsZXRl IEVhc3k= IGJpbGxz ICAKCg== VmVydGljYWw= IHByb24= IERlZmluZQ== IGxvb2t1cA== dmFyaWFibGVz IHBhbmRhcw== dW1lcw== IGlubm9j IHNldFVw IENoYW1waW9uc2hpcA== YXJ0aXN0 IENUeXBl Rm91bmRhdGlvbg== 4LmI IFNldHVw NDI4 IHJlY2lwZXM= IFVJQ29sb3I= IEZpZ2h0 IGF1dGhvcml6ZWQ= X2NsaWNr OTkw X3N1Y2Nlc3M= YW5nYW4= IE1vdW50YWlu IERvY3Rvcg== IGVnZw== IE1lZGljaW5l Y2xlcw== YC4K W2ludA== ZGFzaGJvYXJk IEFwcHJv LWRy IHByb2R1Y2Vz IHJlbnRhbA== IHJlbG9hZA== Mzgx IGFycml2YWw= c3BvdA== IHVuZGVydA== Mzc4 IGVxdWlwcGVk IHByb3ZlZA== IGNlbnRlcnM= IGRlZmluZXM= YWxzbw== IG9wYWNpdHk= IFVuZm9ydHVuYXRlbHk= IElsbGlub2lz INC90LU= IFRlbXBsZQ== IFRyYWls IEtlbGx5 IG1lYXN1cmVtZW50 IHNlcGFyYXRlZA== LWNpcmNsZQ== SGV5 IFJFQUQ= aWdpdHM= IGli IE1PRA== YXR0ZXJ5 0LDQtw== IHZlbmQ= 0LXQvdGC IEh0dHBDbGllbnQ= MzU5 c2FmZQ== X0FTUw== aWNpdA== IENvbnN0cnVjdA== IENsbw== IFNpeA== X1RPS0VO KGJsb2Nr IHdhcm5lZA== Lyoh ITwv YWNhZGVz IG1hcmc= ZXJhc2U= IGRpc3BsYXlz aXN0cmF0b3I= Z2V0cw== IGd0aw== X0dFTkVS bmVk XyU= IGZhdm91cml0ZQ== IEJydQ== IMOh c2Vjb25kYXJ5 IG1hc3Q= IHNvcGg= IFNhZmV0eQ== aGFyZA== MDYy cmFpc2U= IEV4Y2hhbmdl IGNvbnRlbXBvcmFyeQ== IGRyZWFtcw== IHRlbA== IG5laWdoYm9ycw== IEhvbHk= Mzgz Lm1lYW4= ODEw ZW1pdA== IE1lc3M= Q2FzdA== TkVDVA== cGx1Z2lucw== IHJi d3I= IGh1Yg== IFN0dWRpZXM= NTYy IHBvc3Nlc3Npb24= JCgnLg== ZW5zaXRpdmU= IGFkZENyaXRlcmlvbg== X18u IGV4cGVydGlzZQ== QXJjaA== IGN1Yg== ZXJ2ZXJz IHBhcnRpY2xlcw== dWFy IGJvdW5kYXJ5 KScs YWpv IHByZWY= OmA= IGhhcmFzcw== aXU= IHJlYWNoaW5n IG1lZw== IHpv KElE X3JlcXVpcmVk IHPDqQ== IFF1ZXVl QU8= IGdlbQ== ODEy cHRvbg== ODgw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg NjYw aWpr KHsNCg== IGNvbGxpc2lvbg== IFVrcmFpbmU= IC0qLQo= TlNJbnRlZ2Vy X0JMT0NL NTY3 IFRleHR1cmU= IGRlY2xpbmVk bmFu X3dhaXQ= IHBvbGl0aWNpYW5z NDEz IGNvaW5z IGRlcml2 aGVscGVy IFBlcmhhcHM= LnJlY3Q= IFBvbHk= YWJsaW5n fS8+Cg== IGlubm92YXRpb24= XyI= ICk7DQoNCg== IHNwb3Rz IGNob29zaW5n LmNz IGZsZXhpYmxl VUludA== NDM1 OTMw IHNjcmF0Y2g= LWFs IGZlc3RpdmFs IG91dHN0YW5kaW5n PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 TWVhbg== IE9yZWdvbg== c3ltYm9s LmFjY291bnQ= ZG5leQ== Jycn ISIs OTAx IHBhcnRpY2xl w4M= W01BWA== SVZFUg== RVJFTkNF TlNNdXRhYmxl IENvbHVtYmlh XwoK LmZy IGNvZ24= VlI= IE1ldGhvZHM= IE1hZGU= IEJS IEVsc2U= IGVnZ3M= IHN3aW5n IEludg== IGRpc2Vhc2Vz IGZpcm1z IGxlbW1h fWApOwo= bGluZ3M= IGd5bQ== dW1pbnVt LlRyaW0= TWVt IGNyaXRpY2lzbQ== aWJlcm5hdGU= X1RY aW9uaQ== IGd1aWRhbmNl IHJlcGVhdGVkbHk= IHN1cHBsaWVy IHBhaW50aW5n ODY0 LkZyYWdtZW50 ZWRFeGNlcHRpb24= IHdpcmluZw== IGNvdXJ0cw== V0VC 5pyJ XC4= aWxsYW5jZQ== IGJyb3dz IFBhdHRlcm4= UExJQ0FUSU9O IFN1bW1lcg== Q2hhaW4= IGN1dGU= bWVyY2lhbA== IGRpbA== IEZyYW5rbGlu CWdsb2JhbA== SU5DTFVESU5H aGlzdG9yeQ== IGxzdA== UXQ= U0RM YWxpYQ== aWVyZQ== KC4uLg== CWNpbg== aWZmcw== dmVsb3Bl IFJvb3Q= Y2x1c3Rlcg== VXNlck5hbWU= aWduZQ== PFM= IGZlc3Q= NDE5 IGluZGljYXRpbmc= a2VlcGVy IGNhZGE= w6ln Y29uc2lu IEdC IGxi ZW1vbnk= LWljb25z X2RvYw== QWN0b3I= ZWxlbQ== LkRlbGV0ZQ== IGluZmVjdGlvbg== IFByaXZhY3k= IGdyZWF0bHk= IFBvcw== IFRyZWF0 Rmxvdw== IGF0dHJhY3RpdmU= IE1hcmM= c3Vkbw== dGVzeQ== LWFu OTk4 YWJhbWE= IFdvdWxk IHN1Y2s= aW5kZXhQYXRo IEV0 VGltZXM= Nzgw IGNsdWJz X2Fzc29j IGFjcXVpcmVk KCI6 IGludGVuc2U= Lm1hcHM= RXhwZWN0ZWQ= VG9nZ2xl IGF5 IGxpZmVzdHlsZQ== LWNhbGxlZA== IFNub3c= Vm9sdW1l IGNhbm5hYmlz IERpcmVjdGlvbg== IExpbWl0ZWQ= LXNwZWNpZmlj IGRvd250b3du L2ljb25z IHJldmVu TGVn ODg1 PW51bGw= NDk2 S2V5Ym9hcmQ= JykpLg== ICIiOw0K IGF0dGl0dWRl Lm5hdmlnYXRl LWVycm9y QU1QTEU= IEpheQ== dnI= Y293 LmNvbXBpbGU= IG1lbW9yaWVz X21hcms= IE1pbm5lc290YQ== IGtvc3Rlbg== IHByb2JhYmlsaXR5 d2FybmluZw== IGdlbmV0aWM= Rml4dHVyZQ== IEhhc2hTZXQ= Tm9tYnJl X21vbnRo xrA= LXN0YXJ0 eHlnZW4= CWZ0 aWFnbm9zdGljcw== IE1hdHRoZXc= IGNvbmNlcHRz IGNvbnN0cg== LlN0YXRl 0LjQvQ== Tm92 zrE= IFBhbmVs 5Liq Y29tcGFyZQ== PigpCg== IGFwcGx5aW5n IHByb21pc2Vk IG94 bmNpYQ== IFZhbGlkYXRpb24= b3J0cw== X2N1cg== ZWxlY3Q= ZXll KERhdGE= IHJlcG9ydGVy IEJ1ZmY= Mzk1 IHNy ICI7 aWNreQ== IHRlbXBvcg== U04= IHJlc2lkZW50 cGlyZXM= eXNpY2Fs IGVuZG9yc2U= IFNvbmc= aXNFbXB0eQ== bGVldA== X3V0aWw= IGRpc3Rpbmd1 IFRhbGs= IE1vdA== KGRlZmF1bHQ= LkFyZw== Z29yaXRobXM= X3dvcmRz aW1tZXI= X3Jlc2V0 ZmFtaWx5 V1c= IHNhdmluZ3M= IOKAnQ== X2VuYWJsZQ== c2lkZWJhcg== UnVubmluZw== IGFsaQ== IHRlc3RpbQ== IHdhcm5pbmdz IENoZW0= IEV4aXQ= IGZvdW5kZXI= cGVjdG9y IHJt X2RhdGFzZXQ= IERhcw== IGhhbg== R2V0dHk= w6Fs IG55 IHBvdmVydHk= IHJlc3VsdGVk LmJ5 IFZpc2l0 IG9idGFpbmluZw== LycuJA== ICAgICAgICAgICAK c2hhbGw= X0xFRlQ= VUlJbWFnZQ== X05hbWU= aGF2ZQ== IE5vYg== bHI= LWZvb3Rlcg== IG5ha2Vk IEdhcmRlbg== XEZhY2FkZXM= IGdyYWR1YXRl NDE3 IGZyYW5jaGlzZQ== cGxhbmU= IGNvbnRyaWJ1dGlvbnM= IHN0cmluZ1dpdGg= IGNyeXB0bw== IG1vdmVtZW50cw== YXRoZXJz IGxpZmV0aW1l IGNvbW11bmljYXRl amFy IEZyYWdtZW50 X0lG IE5hdnk= IEZpZ3VyZQ== IHNpbXVsYXRpb24= X3N0b3A= IHJlcG9ydGVycw== IHZlcnN1cw== YWph IM6x IGdvdmVybm9y TGlzdEl0ZW0= IHNlYWxlZA== LkJhY2tncm91bmQ= ZWRp YXNoaW5n IGxpcA== IElo bWVyZ2U= IG5lYw== MDI0 ZWxvY2l0eQ== QVRFRw== IHNlZWRz IGZsb2F0aW5n NzAx X0ZB d2Fsaw== CXVzZXI= X2RlcHRo IHdhZ2U= QGFwcA== Tmls KFsi KHZlY3Rvcg== IHNlY3JldGFyeQ== NDYx IGpQYW5lbA== dmV6 wqDCoMKgwqA= ZGlyZWN0aW9u IEVQ IGh1bnQ= Mzk2 SnNvblByb3BlcnR5 IFBPUlQ= XSIs 0LDQvw== IEZvcmVpZ24= cGFuaWM= IHRyaWFscw== IEFsZQ== IHJ1cmFs LXZhbHVl YXV0aG9yaXplZA== IFNjb3RsYW5k LmRyb3A= IE1U 57E= Mzkx cm93dGg= NTE1 RmlsZVBhdGg= IHJlY2FsbA== aWZsZQ== IGNlbA== IFNFTEVDVA== a24= X2Nhc2U= IGNyb3A= NTQz c3VyZQ== cG90 SUNT IHN0ZW0= IGluZHVzdHJpZXM= UHV0 IGFiZXI= cm9hZGNhc3Q= SWNvbnM= KSIpCg== 5oiQ5Yqf Z3Vp IGFzc3VtZWQ= IHJ4 RUE= 6Kc= RUxM IGRvc2U= IGluZQ== IGRlZXBlcg== bGlkZXI= IG9yZGluYXJ5 IGdvbGY= NjA1 X0lNQUdF IE5BTUU= KG1vZHVsZQ== IGF0b20= IGJlbHQ= IG9mZmljZXM= NTA2 YmV0YQ== IHBoaWxvc29waHk= KEpTT04= LWZpZWxk IGludHJvZHVjZQ== IGNvbnZlbmllbmNl b3B0aW0= PiIK YXRoeQ== IGVtcGxveWVy cXVhdGU= IGVkaXRlZA== QXJndW1lbnRz IE5hdGlvbnM= X18p IG5vc2U= IFNhbXBsZQ== JykKCgo= IGNha2U= LmdldEF0dHJpYnV0ZQ== SEQ= Mzky TW9kaWZpZWQ= NDQ1 IHByZWRpY3RlZA== xYQ= YW5pZQ== U29ycnk= KGRvYw== d2luZA== aWV2ZQ== IHByb3Zpc2lvbnM= QVRFUg== T1RF TVk= LkF1dG93aXJlZA== IEJhdGg= NDIz LkJvb2xlYW4= IGJhY2tlbmQ= Lk1vdXNl YXRlcmFs cGFwZXI= Q29uc3Q= IFZS X2VudGl0eQ== X0NUUkw= IFByb3RlY3Rpb24= IEdN IFN0dWR5 IHNvdXA= b3RpbWU= J3VzZQ== XSI= L3VzZXJz YXVn IEhvbmc= X25vcm0= 44Go IHNlY3Jl KEJ1aWxk IENvbnRyYWN0 b2xhcw== IHNhdWNl IGFnZ3Jlc3NpdmU= IHJhY2lhbA== Y2hhcmFjdGVy QEA= IGNvbXBpbGU= IFZvaWQ= X3JlbQ== X21lbW9yeQ== MzQ4 a2s= IG1pYw== U2FtZQ== VXRpbGl0eQ== IEh0bWw= IFhtbA== UmVhZHk= IGdhbGw= IGFsbGVnZWRseQ== CQkJCSAgIA== IE1ldGFs IFBlcnNvbmFs IGJvcmRlclJhZGl1cw== cnhqcw== b2JqZWN0cw== IHdhbnRpbmc= IGJvd2w= dmVuZG9y b2Zmc2V0b2Y= IFJz IFJhdGluZw== IHJhbGx5 X05PREU= NDE4 IE1peA== IGFkdmVydGlz NDg1 NjY3 IG5hcnJhdGl2ZQ== c2Fs IG1j U0Vycm9y IGZpbmdlcnM= IGFjY29tcGFueQ== IHRpcmVk IHN0cmlkZQ== IGd1aQ== ZWxpc3Q= TG9jYWxl IHJlbGVhc2Vz aWtpbmc= IGFuZ2Vy KSkpCgo= YWxsZXN0 U3VtbWFyeQ== KE8= KGZvcg== IGJhc2tldGJhbGw= IHJvYWRz IEluc3RhbGw= IEZhYg== aXRtYXA= NDc1 ICkpCg== IGludGVyc2VjdGlvbg== aWdoYm9y IEJyeQ== IEhFUkU= U29mdHdhcmU= ZWxmYXJl YWNz NjIy IHRyYWlsZXI= LmdldENsYXNz Y2hhcnM= IHJlZ3VsYXRpb24= IHJlZmVycw== IGRlc3RydWN0aW9u IGNvbnRpbnVvdXM= IEF1c3Rpbg== 6aI= YWthbg== LndpbmRvdw== IFRlbXBsYXRlcw== IGFic2VuY2U= Om4= IGRpc29yZGVy Zmxhc2g= IGRlbGV0 Ym9hcmRz ICAJ Uk9Q ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IGFjcXU= IGxhd3N1aXQ= IFJldmlld3M= IGdhcmFnZQ== dGltZXI= IGVq IFJlY3RhbmdsZQ== IGZsb3dlcnM= Mzk4 aWxzdA== IEluc3RhbmNl U3VwZXI= ZGV0 ZGlzcG9zaW5n IEVT IElD dmVyZQ== U2s= X2NoYW5uZWxz cHV0ZWQ= L251bGw= bm5lbg== NDMx IEdhbGxlcnk= X2dsb2JhbA== QXV0aGVudGljYXRpb24= IFJhbms= IGJsb2NrZWQ= IGNhbG0= bWFya2V0 CXZhbA== IGF1Zw== cGVyaW9k IENvbnN0YW50 ID8+Ij4K IGxvYmJ5 cGFs Mzc5 IHNpbms= NTA4 aWFo 0KE= dXJuYW1l IGNvbnZlcg== IGludmVzdGlnYXRl Q2hyaXN0 SHVi IElORA== IFBlZA== dXJhcw== CXVybA== IFRybw== IHByZWZlcmVuY2Vz IGd1YXJhbnRlZWQ= YAoK IHBvcnRpb25z IGV2YWx1 Jz48Lw== KCl7Cgo= ZW5jb2RlZA== emlsbGE= LkNsYXNz ICpf Xyc= IHZpZXdlZA== IFBoaWxhZGVscGhpYQ== LnJvd3M= QWRkZWQ= IFRvdWNo ODQw LmRlbGVnYXRl cXVlZXpl c2xpZGU= IFNlbmlvcg== KHRhZw== IGludGVydmlld3M= IHN1YQ== YXRhcw== QAoK ZGlzdGFuY2U= IHNlaW4= bGF0ZXN0 IFByaW5jZQ== IGx1eHVyeQ== IHJlZnI= IEtpdGNoZW4= 0YQ= KGF0 RmluYWw= w7xjaw== X3plcm8= IEFCQw== IE1hbmNoZXN0ZXI= IGNvdw== Q09M X05VTUJFUg== Y2hhbmdlcw== Z2VuZXJhdGU= LlByaW50Zg== MzY5 c2hhcmU= U3RvY2s= IFBU QW5pbQ== YW5nYQ== IGln dXBsb2Fkcw== IHBhY2tlZA== IH1dOwo= KHNlbmRlcg== IFdpcmU= aXNvbnM= IHBsYXlvZmY= XEU= NjA4 L1I= IGhlYWRlZA== QWxwaGE= KG9yZGVy IG9wcG9uZW50cw== YWNrc29u X21lbWJlcg== VHVybg== IFNvdmlldA== 7JeQ YXVnZQ== NDQ4 IGluY29taW5n IGphaw== LWdhbWU= IE1hbGU= IE1vbnRo U3RhZ2U= LmV4ZQ== T3duUHJvcGVydHk= LnNldEl0ZW0= IGRj 5L2c IGJydXQ= IGF0dGVtcHRpbmc= Lmxlbg== IGp1ZGdtZW50 IHNhYg== IGNhZA== IEl0ZW1z Y29tZm9ydA== ZWxpemU= L2xvZw== IGVudHJlcHJlbmU= IGNvbXBpbGVy X3ZhbGlkYXRpb24= cmV2aWV3 IHRleHRCb3g= IGZyYWN0aW9u IEJhbA== PjsKCg== LkF1dG9TY2FsZU1vZGU= IGNhdHM= NDY1 IHJlZ2lzdHJ5 dWx1cw== Rkk= cGF5bG9hZA== LXNlYXJjaA== IHN0YXlpbmc= YWNpb3Vz RGVjb3JhdGlvbg== UmV2aWV3 SW5m S2VlcA== aXRpcw== LFN0cmluZw== Q29vcmQ= IHBlcm8= U2V4 IEF0bGFudGE= dWVzdGE= QXJnYg== Pio= fV8= Rm9vdGVy IGVtcGxveWVk X2JvdW5k dmlkZQ== LmZ1bmM= JHNjb3Bl IHNwbw== IEFuYWw= b3VuY2Vk YXJvdW5k IHJlc3RyaWN0aW9u IHNob3Bz 5YA= IExhdGlu LWNvbA== IGJhcmVseQ== IEV1cm8= RXI= IGZhaXJl X2Rpc3RhbmNl X3VubG9jaw== UXVvdGU= SVZBVEU= IOWI IGFpbWVk IFJldHJpZQ== Lml0ZXI= IHdyYXBwZWQ= IGFncmVlbWVudHM= c3RydW1lbnQ= KHByb2R1Y3Q= IHN0dWRpZWQ= LnNldFZhbHVl IHll IENhY2hl TUJPTA== IHF1YXJ0ZXJiYWNr IHN5bnRheA== LmdldEVsZW1lbnRzQnk= LnZlcnNpb24= d2Vic2l0ZQ== UnVubmVy X3NpbmdsZQ== YXRpdg== IEFsdGVybg== IEJlYXV0aWZ1bA== cmlnaHRhcnJvdw== IGRpdmVyc2l0eQ== cGxhc2g= KGNv LkZpbGw= IHR5cGluZw== Mzg3 MDIz IGNsYXI= SGl0 T08= YWNjbw== NTA3 d29ydGg= IHNjcmlwdHM= IE11c2xpbXM= IExM ZXJ2aW5n KGJvb2xlYW4= IGJhc2ViYWxs IENBTg== Mzk0 MDQ0 TUFJTA== ZGVwZW5k IHJlc3BlY3RpdmU= IGNvbnN0ZXhwcg== Lio7Cgo= J10pKQo= IHlhcmQ= IGlkZW50aWNhbA== aWZlY3ljbGU= VVNI dXBpdGVy LnZhbGlkYXRl Y2xp SVNURVI= SW5kaWNhdG9y RmFpbA== IGRlbW9jcmFjeQ== LnZhcg== IHNhdGlzZmllZA== LS0tLS0tLS0tLS0tLQ== ZW5jZXI= aG9y IHJvdW5kcw== REFP b2E= IGZsYXNr PWM= W10K L2Rpc3Q= IHBhcnRl IGNvbmZpcm1hdGlvbg== ZXJvbg== YXdhcmU= PD8+ IGRlcGVuZGVuY2llcw== IFZpZGVvcw== LXJvdw== ICoqLwo= IG5vdQ== IGhvdmVy 5p4= IG5pbg== IFVTRA== TWFj X0xvYWQ= IG91dGNvbWVz X3NvY2tldA== IHF1ZXJpZXM= d20= NTky IGhpdHRpbmc= aW51eA== TWljaA== dWRnZQ== QVRBQg== IHZ1bG5lcmFibGU= 5L4= IHBvcnRmb2xpbw== OllFUw== CW1hcA== Qm91bmQ= IGl0ZXJhdGlvbg== aW5jZXNz IGFjdG9ycw== IFF1YWw= X2NsZWFu 44CR44CQ TVNH R3JlZW4= IE9mZmljZXI= IHNtb2tpbmc= Pics IEZsbw== Kys7 NDMz b2x5Z29u IGJ1bGs= IGRyYW1h IGV4Y2VwdGlvbnM= b3NlZA== ICsNCg== IGxlZ2FjeQ== Q1Y= IGNvbnRyaWJ1dGVk IFRlcm1z IGJ0 NDM0 IHVudHVr IGFsaWVu PT09Cg== CVZlY3Rvcg== IGxz T25saW5l LmZhY2Vib29r bnVtZXJpYw== b2NrZXRz QXV0 YnVyeQ== LXJlZHV4 IFJlZGlzdHJpYnV0aW9ucw== R0xPQkFMUw== dXJyZW5jaWVz IHRvbnM= 4oCZLA== IMOq KGNvbA== IFN5bWJvbA== IHN0YXllZA== IE1M IG11bmljaXA= IHNleG8= U2Vu bnI= IGdhaW5z IHNob3J0bHk= Lk1lbnU= w70= S05PV04= IG9wZXJhdG9ycw== LVY= IFBhdHJpY2s= L2FkZA== X0NP aXJhdGlvbg== KHBvc3Q= UG9zdHM= L18= IHBsdWc= IGludGVsbGVjdHVhbA== IG1ldGFi IHByZWduYW5jeQ== IFByZW1pZXI= bm0= IHByZWRpY3Rpb24= NjA2 IE1pbmlzdHJ5 VGhyZWU= dmFsdWF0ZQ== IE1pbmk= YnU= 0L7Qtw== PHVs IGRk b2x2aW5n IEN1dA== NjAy IHNjaGVt LnRyYWlu aXRhdGU= IHJpY2U= IGJpcmRz 44Gr bWlkZGxl c3RydWN0aW9ucw== IG5lcnY= YXF1ZQ== NDUz IGZsdQ== IHN1cnZpdmFs IEdhbGF4eQ== IEZhbnQ= Lk9yZGVy QXR0cmli aXJ0cw== w6lj TW92aWU= IGNvbmNl cXVhcnRlcnM= IG1vb2Q= LkFkZFJhbmdl OTQy IHJlc29sdmVk 44OI IGJ1cm5pbmc= NzAy CQkJCQ0K IFdF IGhvc3Rpbmc= TEFC IG1hbmFnZXJz IHN0cmVuZ3RoZW4= PGNvbnN0 IEZpcmViYXNl b25lZA== IEplYW4= Jzwv IDo9Cg== YWxnb3JpdGht IEFyYw== IGZyb3plbg== X2V2ZW50cw== IG92ZXJzZQ== Z29vZHM= IGZhaXQ= IHZpYWdyYQ== b3Nlcw== OTIy IGNvbXBpbGVk IEF0aA== IHN1YnN0YW5jZQ== YW5pbWF0ZWQ= UEY= cHJldmlvdXM= IHJvb3Rz KGZpbHRlcg== b2x1bWVz IGludHJv KGV2dA== IEJhZw== IERlZmluaXRpb24= IEZlYXR1cmVz QW5ub3RhdGlvbg== IGF2Zw== KHN1bQ== UVVJUkU= IHJlbmRlcmVy IEZpeA== LmRhdGV0aW1l PWRldmljZQ== U3Bl Z2V0SW5zdGFuY2U= IGV4dGVuc2lvbnM= X25ldA== IFBhcmxpYW1lbnQ= IGNvbWlj NDY4 IFBpY2s= YXJtYQ== CW1vZGVs IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IG1lbmc= bWFudWFs YWRhcHRlcg== fS0= ZWRiYWNr IGVsZWN0cmljYWw= IENvdW50ZXI= QXBwbGljYXRpb25Db250ZXh0 X2J5dGU= KGJ5dGU= IEF1dG9t IHRlcnJvcmlzdA== 55A= dGhyb3VnaA== IGZpc2NhbA== b25pbmc= NDU1 IHNwZWN0cnVt IGJpdG1hcA== IHNsZQ== cHJvZA== IGFnZWQ= IGJlbmU= IFNwaQ== IGJyaWxsaWFudA== IHN0YWJpbGl0eQ== IGRpYWJldGVz IGNvbmZpZ3VyZWQ= Ym9uZQ== NzQ4 NDg0 b3VzZXM= Lmdvb2dsZWFwaXM= RkFDRQ== IGluc3BpcmF0aW9u IERldHJvaXQ= ZW5jaA== 0YDRgw== dmVoaWNsZQ== U3RhdGlvbg== IGhvbGVz IGR1cmNo Lk1lZGlh IENOTg== aW5uaW5n NjA0 IFBlbm5zeWx2YW5pYQ== IGVtb3Rpb24= U2VjcmV0 w6FyaW8= IFJhdGU= NDUx RGVwdGg= IG1vZGVz NDI2 KGlkeA== IGhlcw== IGdyZXk= U3RhbmRhcmQ= UXVlc3Q= YnV5 c3Vy IFRyYWNr b21t Lmds IChc dHdv X0lP b3NleA== X3JvbGU= 56S6 cm91dGVz U2hvcA== IEFTQw== IG1lbWNweQ== ZGlyZWN0 NDQ2 ICoKCg== IEJN IFBvcg== X2hpc3Rvcnk= IFJlc3BvbnNlRW50aXR5 LnNldEZvbnQ= IGVuZ2FnZW1lbnQ= LGg= IFdvcmRQcmVzcw== ZmVjaGE= IGVudHJhbmNl RGVzcGl0ZQ== SURFTlQ= IHNhbml0 IEdlbmVyYXRl KCIiLA== X3ZpZGVv U3RyYXRlZ3k= X29r IHRpZXM= IGxvZ2ljYWw= IEJyb24= KEZpbGU= IE1vaA== LlNwbGl0 LlRyeQ== IEhpbmQ= IHNjb3Jpbmc= IGFwcHJvYWNoZXM= IGZsb3Vy VlJU ODA0 VVNUT00= NDY3 c2NyaXB0cw== IEVwaXNvZGU= Mzg5 IEFtYg== X09S IGZyYXVlbg== IHVubGlrZQ== IHJpZGluZw== IHBpdA== IHRyYW5zZg== YXJ0ZQ== 4LmJ cmFwZQ== cmV0dmFs X2FmdGVy Ijw8 NzAz IEJlcmxpbg== IHRpc3N1ZQ== LkludGVudA== INC00LvRjw== IHN0dW5uaW5n IEhhbA== LkludGVnZXI= IHdoZXJlYXM= IGRlbGVn IHVzZXJOYW1l IGZvcm1hdHM= IGNvbXBlbnNhdGlvbg== IEh1bQ== YXJyaW5n IHVuc2FmZQ== UGlu Y2x1Yg== a2V5d29yZA== X3RoZW1l IGNhbGxlcg== IGdob3N0 IGVudGl0bGVk IE1hcw== NTYx IGRlbW9uc3RyYXRl IEhvd2FyZA== RHJvcA== I3VuZGVm NDI3 IGludm9rZQ== IEJyaWRnZQ== ZW5kZW4= aWJsaW5n U2xvdA== QVRBQkFTRQ== IHRlbXBlcmF0dXJlcw== c2VyaWVz IFJlbWVtYmVy Q2FsZW5kYXI= QkY= PT8= MDY0 IEFG KGh0dHA= bWFrZXJz ZmluaXR5 cHJlY2F0ZWQ= V0g= b2xpZGF5cw== LXVu aWFsZQ== XFVzZXI= cmVhc29u JywKCg== T1dFUg== IHByZWRpY3Rpb25z cHJvYg== Lm5u ICc7Cg== LkZyb21Bcmdi X0xPTkc= IHRyb3Vi IHVuaXR0ZXN0 ZWxpaG9vZA== CWlz NDQy IGNvbnNlYw== TEVBU0U= IGNsaWNrZWQ= IHRlbXBsYXRlcw== Qlk= cGVybQ== bWF0Y2hlcw== bGF3 KHRm X3JhdGlv aXRlbXB0eQ== IGNyZWF0b3I= Qml0cw== RW5jb2Rlcg== Ki4= IFVJVA== IE1hc2s= Y3VybA== LWdv IE9jYw== Y29ycmVjdA== IEdlcg== KGxheW91dA== dW5jdA== LmRpc3BhdGNo O2FtcA== LmlzUmVxdWlyZWQ= CWRv bWly IHB0aHJlYWQ= LWF1dG8= IEljZQ== IHZpb2xhdGlvbg== IGNvbmNsdWRlZA== IHZhcnM= Y2FudmFz IFRlbXA= IFBoaWxpcHA= iOuLpA== Y3JlYXNl IGZpc2hpbmc= YWJiaXQ= IGNvbmNlbnRyYXRpb24= aXJ0aGRheQ== IGdyb3Nz IGtp IEhhbmRsZXI= IGltbWlncmFudHM= 6IA= VW5k cG4= cmFj NDU0 IENvbnN1bHQ= Zm9sZA== IHN0cnVnZ2xpbmc= aGVhdA== R2VuZXJpYw== IHJpZGlj IENPVklE b21pdGVtcHR5 X09QVElPTg== 6rCA IGNyZWF0dXJlcw== X1BBR0U= ZWk= KGhvc3Q= X0hQUA== NTE2 IFhYWA== IGF3aw== YXNjYWRl IHByZWc= cHJvdmlkZXI= UGFs ZWdlbg== Y2xvbmU= LlJlZ2lzdGVy IGF0dGFjaG1lbnQ= YmVpdA== dGhlbGVzcw== KERhdGU= IEZvcmVzdA== Q0dSZWN0 IGNoaWxkaG9vZA== YW1pbmU= YXhlcw== J109 TmF2aWdhdG9y IHJlcGxpZWQ= X2ludg== LFQ= IEZlYXR1cmU= NDM4 ey0= TEFORw== IGNvbnZleQ== 55So5oi3 IFNlcmlm IEF1cw== bGljaGU= IHVudXNlZA== IG1vbnQ= bm9kZXM= IHNldQ== LmNsYXNzTmFtZQ== bm9ybQ== X1NFUlZFUg== IHdpbmc= aW54 UmF3 IEphbQ== NTkw IGluc2lnaHQ= NDcx NTM1 IE5H IEludGVyZmFjZQ== IHN0bXQ= IG5hbg== Y3VsYXRvcg== LWFwcA== KEJ1bmRsZQ== TWVzc2FnZUJveA== 4K4= IG1lZXRz dWJ5 T3B0aW9uUGFuZQ== aXRhcmlhbg== IGNvbGxhYm9yYXRpb24= bW92aWU= IGFybW9y X2JpdHM= IEhhdmluZw== IG51ZGU= IFNldHRpbmc= IHN1Y2M= RGVsYXk= LmNvbXBvbmVudHM= YWNodXNldA== IEFsZXhhbmRlcg== wqk= IG1ldGVycw== IHByZXBhcmluZw== IGluY2VudA== 5ZM= IGvDtm5uZW4= IENvbnNlcnY= IG51bWVybw== YWNodXNldHRz LWludA== IGVtcGhhcw== bGF5b3V0cw== RXhjZWw= SUJBY3Rpb24= IHJlc2lkZW50aWFs ZWxpbmc= IE5D IEFsbGVu IGNldHRl IG1pbmRz LnJlcXVpcmVk 2LM= IEdpcmxz IH07 IHN0cmluZ1dpdGhGb3JtYXQ= IGFkZHJlc3NlZA== dGhleQ== IEJsb29k cG9zZXI= IGphbQ== yJk= 5pWw5o2u IHN0ZG91dA== IFVURg== Q2xhc3Nlcw== PiI7DQo= IFNhdg== LkJvbGQ= IGVuYWJsZXM= CXRtcA== IG1hbnVhbGx5 IFNxdQ== dXNlcmlk LmZ1bmN0aW9u LmNhY2hl TE9QVA== LlNlcnZpY2Vz NTg4 ZGRpdA== dGlt PGltZw== IFRoaW5ncw== IEV2ZXJ5dGhpbmc= IGFwdA== Mzk3 ZW1hbmQ= IHJvbGxpbmc= 66Y= LmxldmVs IHN0b20= IFdpbnRlcg== IHZpZXdpbmc= KHZhbHVlcw== b2NvbXBsZXRl dmlh dXBv IGFib3J0aW9u NTMy acOocmU= 77yR X0JVVFRPTg== X2RvbWFpbg== IGJyYQ== IEFzdA== aW5hcw== IHN0YXRpc3Q= Y29k TFI= IGRyaXZlcw== IGZvbGxvd2Vycw== IGFsbGllcw== CWN1cnJlbnQ= ZWNlc3Nhcnk= IGRhbWFnZWQ= X3B0 YW5kbGVz b3VudHJpZXM= IHNpbXVsdA== ZXU= IGNvbnRyb3ZlcnNpYWw= X0dST1VQ IHJpYg== LkluZm8= Om1t Lm5vcm1hbA== X0FERFJFU1M= IO2V YWRkbGU= IER1cg== LkVsZW1lbnQ= NjU2 V2FybmluZ3M= IGNyZWRpdHM= IGluaGli IGVtaXNzaW9ucw== NTQ1 IGhheg== LnlvdXR1YmU= dWdnZWQ= IGJvdGhlcg== IEthbnNhcw== IEZpeGVk IFRlc3Rz IEZJWA== NTc2 VW5pZm9ybQ== IGtvbnQ= Pj4+ c3RhdGlvbg== bG9yZQ== YXR5cGU= aXNob3A= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= NTIx Q29tYm9Cb3g= IHZhY2F0aW9u IGluaXRpYXRpdmU= IGRlZmF1bHRWYWx1ZQ== Nzcw Y29uY2F0 IEto NjMy IFdlbGNvbWU= aXplZE5hbWU= TWlncmF0aW9u IGdyYWRpZW50 SG90 IGhhcmRseQ== ZWxv IFN0dWRlbnRz IGxvb3Nl NzMw YXR6 LlNlbmQ= Jy8= IHVuaXZlcnNhbA== IGVudGVycHJpc2U= IHJlZ2V4 IHZpc2l0b3I= IEZseQ== U2Vx 4LiZ IFZpc3VhbA== IGxpYnJhcmllcw== YXRvZXM= UGF5bWVudA== NDQ3 IHBlbnQ= IGdhdGhlcmVk VlJUWA== IERN U3BsaXQ= IGxldHRpbmc= 0J0= X2Vycm9ycw== ZXBvY2g= UEFSQU0= Y3U= 0YHRgtCy b2x1dGlvbnM= RWRpdGluZw== Zm9udHM= IGFsbG9jYXRlZA== IEJhc2Vk KFk= IEp1ZGdl IGJyb3RoZXJz RklMRVM= w6dv NTMx d2I= X1BJ J14= IHN3b3Jk LnNlcnZpY2Vz IG5s VGlt aWdn IE1vb3Jl IGNyeXB0b2M= 5Ye6 X3Bvc3Rz b3RhdGU= Pyc= Li4uLgoK IGts PSIk IGRlY29yYXRpb24= 4bqh IERJUkVDVA== R1VJ KT0+ewo= IG5ld3NsZXR0ZXI= IHByZWNpcw== KHBvaW50 IEVxdWlwbWVudA== dXR5 IERhdmU= IHBhcnRpY2lwYXRpb24= dWFyaW9z eGl0 LkFz RVRFUg== b3JvdXM= IHNoaWVsZA== W10+ aWxpdGFyeQ== Lm9yaWdpbg== IHByb21vdGlvbg== VW50 IGN0 VFJB NTU2 Vmlld0hvbGRlcg== IHNpZ21h ZGVsdGE= YXJlaG91c2U= Y29udHJhY3Q= KFZlY3Rvcg== NzIx IGNvbXBldGU= L2Zvcm0= L2NvbXBvbmVudHM= IG5y IEluZG9uZXM= INC+0YI= IFZvbHVtZQ== LmZpbGVz KHJlc3A= L21vZGVscw== IHN1cmY= c3RhbmRhcmQ= L28= IFhDVEFzc2VydA== VklDRVM= LkNvZGU= U0VE IGFjdGl2YXRl RGVsdGE= IGxpbWl0YXRpb24= cmlq IHByZWduYW50 Ol4o IHNvdXI= cGll ODAz IGV4cGVuc2U= aWNhdGlvbg== IExhcmdl IMKx IEJvd2w= KG1vZGVscw== L04= ODU3 UGE= LnJlbG9hZA== IHdvbmRlcmluZw== NDYy RXhlY3V0aW9u CSAgICAgIA== IEdyYXBoaWNz IENvbnRpbg== X2pvYg== IGdldE5hbWU= IE1hZ24= IERXT1JE bWFk IG5o ZmVhdHVyZXM= fSIpOwo= aGVldHM= KHRyYWlu em4= IHJlY3J1aXQ= LmNvbm5lY3Rpb24= IGJhcnJlbA== IHN0ZWFt X3NldHRpbmc= IGFuZ3VsYXI= YW5lb3VzbHk= IGJpbA== IE5vcm0= NTIy KCEk aWJ0 JSg= IHBvc2l0 IEZhdGhlcg== aW50ZW5kbw== NTY1 TGl2ZQ== MDQx IHBvcnRz IG1lag== IGxhbmRpbmc= cG9uZGVy IGNvZA== X0hFQURFUg== Lk1hcmdpbg== IGJhbGxz IGRpc2N1c3Npb25z IGJsZW5k SGV4 IGZhcm1lcnM= IG1haW50YWluaW5n ICAgDQo= c3lu W1Q= cnVz NDM5 dWZmZXJz IGNvbnRyaWJ1dG9ycw== X3N5cw== LkRlYnVn IGNvbnN0cnVjdGVk b21lcw== P2lk c2xpZGVy IHN1cHBsaWVycw== NjEx c2NyaWJlcg== cGVz 0J4= IjoNCg== XENvbnRyb2xsZXI= KSkKCgo= IGx1YQ== TXVsdGk= RU5T U3Jj IHBldGl0aW9u IHNsYXZl bG9va2luZw== VkVSVA== CXZlY3Rvcg== U3BlY2lhbA== aGg= YW5uZQ== IE5pZ2Vy L3ZpZXdz emluZw== ZW5kYW50 PEM= c3BlZWQ= NTE0 IHt9OwoK QmVnaW5Jbml0 IGZvcGVu QFJlcXVlc3RNYXBwaW5n RW5kSW5pdA== IHB1bmNo U2VuZGVy NjAz 6ZQ= Z2V0TWVzc2FnZQ== L3R5cGVz LlBJ KCcnKTsK b2N1c2Vk KGFsbA== IGRyb3Bkb3du KS5fXw== IFZpbg== LkZvcmVpZ25LZXk= NjEy Y2FuZg== b3VyZWQ= IE9yZ2FuaXphdGlvbg== INCw IEN1bHR1cmU= KGNscw== LF8= OTAy cmdiYQ== 7J2Y LmRhdGFHcmlkVmlldw== IGRvemVu IEdlcw== ODA1 NDY0 X3NoYXJlZA== bmljaw== IGhvc3A= b21ldGVy NDk1 IGNsYWltaW5n MDMy aWJsZXM= cmlr 5piv ZW5hcmlv IGRlbmdhbg== b2Ji bW9udA== X3Jhbms= KCcvJyw= IGFwb2xvZw== UHM= X3Bvd2Vy IEdyZWU= IGZ1bGZpbGw= IGZpcmViYXNl OTEw IGZhcmU= IEhpbQ== IGJlYW4= 4oCmLg== IFNQSQ== X1JY IHBlcmNlcHRpb24= cmVsYXRpdmU= Y29tcGlsZQ== dXVt dXRvcw== YXVj IEFzaw== IGluZGljYXRvcg== L3Ro LnNldFN0cmluZw== IFdpc2NvbnNpbg== LkRvbWFpbg== IGFydGlmaWNpYWw= RGV2ZWxvcA== IFNhcmFo IGx5aW5n KHNlYXJjaA== IEVtcGlyZQ== dXJyaW5n 5pe26Ze0 PSIkew== IGdldElk IFBheW1lbnQ= dHJhbnNpdGlvbg== IF0u aXhpbg== VlQ= LXNlbGVjdA== IGRlbW9uc3RyYXRlZA== IGxhc3ROYW1l ZW1wbG95bWVudA== LmdldFByb3BlcnR5 IGZvdWdodA== ZmlsZU5hbWU= IFBlcnM= NDUy LWNhcmQ= YXN0cg== YXR0cnM= IHByb21pbmVudA== RGVzaWdu YW5jb3V2ZXI= 44GX44E= YXJkbw== c2VjcmV0 IHJhZw== IHBvaXNvbg== LW1hbg== LG9taXRlbXB0eQ== NzQw CXVu aXR6ZXI= IENhc2lubw== IFJvc3M= LWZvb3Q= KHJlc3VsdHM= UGxhbg== IGxhc2Vy 6riw X0RS NTIz RmFjZWJvb2s= NDQ5 IGJvYXJkcw== c3Rh XV0s Njc1 IHRpbGVz U0laRQ== ID1+ OTcw IHByZW1pZXI= b2NhYg== IGVuY29kZWQ= IHJlc2VydmU= NjA5 IEFmZ2hhbmlzdGFu IExpc3ROb2Rl dXJscw== IHN1Ym1pc3Npb24= IG5ldQ== NDc3 ICMrIw== X1BPU1Q= IG1vaXN0 ZWxsaQ== ZWxsaWdlbnQ= LmFsZXJ0 w7Nk YnJl IENvbGxlY3Q= IGdyYXBoaWM= IGxvbmdpdHVkZQ== IFByb3ZpZA== IENhbGN1bGF0ZQ== eGZmZmY= Y3JpdGVyaWE= IHdhdGVycw== cm9jaw== bG9xdWVudA== IFRyaWI= NTEz IGJ1cnN0 IHN1ZmZpeA== LkV4dGVuc2lvbnM= aXNoZXM= aXZlbA== IExJS0U= IEdldHR5 LkFjdGlvbkV2ZW50 LnNsZg== IEhBTA== dXBhbA== RUFS NTI0 dWRp X3RpbWVvdXQ= VUY= IFNpbmdhcG9yZQ== IEFkdmVudA== X2ludGVydmFs Y2hhZnQ= IEVtZXI= IHRlbGVwaG9uZQ== IFR1cms= X2ludGVyZmFjZQ== IE93bg== IGVuY291cmFnZWQ= PE9iamVjdA== X1RleHQ= IE9udGFyaW8= IEFwcGx5 LmZpcmViYXNl IGFudGli UHJpb3JpdHk= ZW5leg== RGF5cw== Y2lk dXJyZW5jZQ== Oy8= aW5uZWQ= 0YHRjw== IHZleg== Znc= Ly8k YXR0YWNr NDU4 IHN0YXJ0dXA= YWluZXJz LmZyYWdtZW50 b3BhY2l0eQ== KGNvbm4= aGVpbQ== Lm5ldHdvcms= KHN0cmVhbQ== Njcw IE5PTg== dG9s ODMw IFhib3g= IERT IGNhY2hlZA== IHByb3N0aXR1dGFz IEJhbHQ= KCdb NTc1 IG5vZXhjZXB0 Iic= IHNk LnZhbGlk X2Fn IHJhY2Vz NDgx IHJvZA== aXR1ZGVz PD4o NTQ0 LlByb2R1Y3Q= Rm9ybXM= TkVX UGF5 CWJvb2xlYW4= X2NvbnRhY3Q= IEVsZWN0cmlj c2tpcA== IHd1cg== IGNocm9uaWM= X2RyaXZlcg== OTQw IFNhYg== IFVsdA== IFJhZA== U1RBVFVT IExld2lz T0I= IGdpZnRz LlJlYw== VFJVRQ== IGludGVuc2l0eQ== TWFya2Vy LmNvbXBhcmU= ZmZpYw== Q29va2ll IEJhYnk= IEJpZ0RlY2ltYWw= aWxldA== IEhPTERFUlM= IExhZHk= IGx1bmc= IEFsYWJhbWE= IGRlc3M= YCk7Cg== IEJ1aWxkZXI= X3JlZ2lvbg== IG5ldXRyYWw= OTA5 Qm90aA== IGhw IGhvcm4= IHNlZ21lbnRz IEVD Ij0+Ig== KHJlYw== IFBp R00= IGxhcHRvcA== U2NhbGFy NDYz aXNk LWRpYWxvZw== IEFuZGVyc29u IG1pc3Rha2Vz NzA4 IEhhbg== amVz ZXN0aW5hdGlvbg== NDM2 IHByb21pc2Vz Ymlk IFNjaWVudA== R0lO IFBlcmZvcm1hbmNl YmFnZQ== LnVzZXJz bGVhZGluZw== IG9yYWw= R3JhcGhpY3M= NDg4 X1BUUg== NTE4 aGFuZw== IGluZXY= cHJvY2Vzc2luZw== RmFjdG9y IE5B JHN0cmluZw== IGdyb3VuZHM= LlNhdmVDaGFuZ2Vz Y2xvY2s= OTQx Y3JpcGNpb24= IE5ld3Rvbg== Z2M= LmluY2x1ZGVz IGJsYXN0 ICctJw== IHB1ZWRl NDY5 LlNlc3Npb24= IGdyZXA= X2ZpbmFs IEdheQ== IEdpdmU= aXJp LXN0YXI= IFVJSW1hZ2U= X2Vwb2No dWJi ZW50aA== IGVsaXRl IGNhbXBhaWducw== IFBvcm5v X2Fzc2lnbg== UHJvdG9jb2w= IEJlaW5n IEFpcnBvcnQ= IGNvbnZlbnRpb25hbA== IFdhdA== IENJ RVRB IEFudGhvbnk= IHRhYmxldA== KGZvcm1hdA== IGNvbnNpc3RlbnRseQ== IElvd2E= NDc0 IGF2YXRhcg== MDI3 LmN1cnNvcg== IVs= IGhhbmdpbmc= SGVy U3VjaA== JzsKCgo= b3JnZW91cw== KCk9PQ== IHZpZXdNb2RlbA== IOOD IGVscw== IEFnZW50 RmV0Y2g= YXBvcg== IGN4 cHJlYWQ= IFBpZXI= b2VmZg== NjE2 U24= ODkw IFZpcnR1YWw= QXBy LldoaXRl NjE1 X01PRA== IFBvaW50cw== 5aSx IGdlbmVz IHZlbmRvcg== IG1haW5zdHJlYW0= PHNyYw== IEVsaXphYmV0aA== RGVjb2Rlcg== LXN0YXRl IEdsYXNz bmN5 YWRpYW5z X21vbg== IFJlbW90ZQ== IHdpcmVsZXNz IE1p 5Yk= NDY2 6KGo c3RhZ2U= IFRpbGU= bGxpYg== VmFyaWFudA== PT0K IGdvbGRlbg== KFFTdHJpbmc= LnB1dEV4dHJh IERvbQ== IEFuaW1hdGlvbg== IGludGVyYWN0aXZl aWZhY3Q= 6Zmk TEVU IGZyZXF1ZW50 IDw+Cg== RmlsZW5hbWU= IHNuZQ== IEZvb3RiYWxs IHJpdmFs IGRpc2FzdGVy aW9uaWM= IERhbWFnZQ== LlJlc291cmNl LWVu IFR5cGVz Z2V0U3RyaW5n KGJvYXJk IGJvbA== cGxhaW4= enlt 4Liy IHNjYW5uZXI= aWxkZXI= X21zZ3M= 5o8= KGludGVudA== IGRlc3RydWN0 IGJ1c3Q= IEVtcGxveQ== b25p IFVJVmlld0NvbnRyb2xsZXI= IG9kZHM= ZWFyZXI= R2VvbWV0cnk= IHlpaQ== X0VYUE9SVA== IEF0dGFjaw== IG5pZXQ= IGltcHJlc3Npb24= IEdpbA== X3Byb2I= NTI4 IENG IEV4cGVyaWVuY2U= L3BsdWdpbnM= Lk1ldGhvZA== IGJlbGllZnM= TmF0aXZl X2J1aWxk IHZpZw== IHJhbmtz Y292ZXJlZA== NzA1 c3VjaA== R3VhcmQ= LnBhY2s= YWRkZXI= ODA5 aXZpYQ== bG5n INCy0Ys= NTUy VGltZXN0YW1w X25vdw== IHBva2Vy IHVuYw== IHNoYXBlcw== LXR5cGVz X3BlcmlvZA== cGs= IHZldGVyYW4= IHNvbm8= IGFwcG9pbnRlZA== b3ZlcmZsb3c= LmRyaXZlcg== X2NhdA== dXR0 cGxhbnQ= aW1i IEFjY2VwdA== IGNvbmNlcnQ= CW5vZGU= CXo= Pz4NCg== IGJhbm5lZA== CSAgICAgICAgICAgICAgIA== IHRveGlj IGRpc2FwcGU= NDcz yJs= IGdyYWNl YXRlZnVs UmVwbHk= IENydXo= NDg2 IHNjcmFw IGtleXdvcmRz c2ltcA== IG1vcnRnYWdl IGN5YmVy IEV4ZWN1dGU= IGxhdGl0dWRl aWZ1 LkNPTQ== ZGJv IHNvcnRz IEdhcw== b21pYWw= LkxvY2Fs Q2VsbHM= LlJlcGxhY2U= U3RyaW5ncw== LmZpdA== IFRoaXJk JSIsCg== IHt9Ii4= IFNvbnk= IFs6 NTg1 IGZhbGxlbg== LicpCg== aW5o IE1D IHJlZGlz Q29kZXM= IHByb2ZpbGVz aG9vaw== UmVkdWNlcg== X0ZVTkM= IG5hdmlnYXRl c3RybGVu IGhvcm0= 4Z4= IFNS LmJvb3Q= IGRpZ2VzdA== CWhlYWRlcg== LmZpbmRPbmU= 5oE= RGJUeXBl bmlh X21lcmdl IGRvbm5l L0dldHR5 X0NIQVI= IGJhbmRz LlVSTA== YXJ0aWFs IGZyZXE= IHNpc3Q= Tmc= IHJlbmRlcmluZw== XENvcmU= V2lkZ2V0cw== IFZB IGFjdGl2aXN0cw== U3Rl PV8= YWxsYQ== U3RhbXA= IGxvYWRz IHh4 IExlYXJuaW5n Lk12Yw== dWly KCIk IGNvbm5lY3Rpbmc= UmVhZE9ubHk= dXJ1 IEVhZw== QklU X0RFTA== 5ac= YXJyYXNz ZXh0ZXJuYWw= IFlPVVI= IEJyZXc= IEZpdmU= IHJlc2l6ZQ== aWdpZA== ZXJhdGlvbg== NjUz INGN NTM2 5Yqg MDM5 IENhdGNo 2YE= IExlb24= YW1pbA== LkJvZHk= Q2xpcA== L2xpc3Q= LmJy RWRpdFRleHQ= CWRi LkdhbWU= KEJ1aWxkQ29udGV4dA== YmFja2VuZA== LlJlZA== ZmFjZWJvb2s= NTI5 LnVybHM= bXI= cm9sbGVk LS0tLS0tLQ== IGludGVydmVudGlvbg== IHJldGlyZW1lbnQ= IEtpdA== IFBSRQ== VXBwZXJDYXNl IFNvY2tldA== IDot IHN0dWR5aW5n IE1ldHJv YXJkZWQ= IGNvbnZlcnNhdGlvbnM= Q2FsbGVk IGV4YW1pbmU= ZXJ0aWZpY2F0ZQ== Lmd6 LXJlc3BvbnNpdmU= IHJlZnVuZA== X25ldHdvcms= MDI2 YWxsb3dlZA== ZW1wdA== IG1lYWxz Q2F0ZWdvcmllcw== IHRyYXZlbGluZw== IGtn IHNoYW1l ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IGV4cGxpY2l0bHk= IG1hdGhlbWF0aWM= IFN1aXRl IFJHQg== KioqKioqLw== IG1peHR1cmU= bGVhcm5pbmc= LnRlbXBsYXRl YXR0cw== d3g= CWN0eA== LnByb3BlcnRpZXM= IGRyaW5rcw== IEVpdGhlcg== c2V0VGV4dA== LmdldERhdGE= LnppcA== IHJldmVhbHM= PHRhYmxl Lkhhc2hNYXA= IEh1cg== KSIpOwo= LmZyYW1ld29yaw== IFNUQVJU ZmVlZGJhY2s= NDU3 IHNhZmVseQ== Lmljb24= Y29uZmlndXJl LmxvY2s= LmxheWVycw== Lz4uCg== IHJhbmtlZA== X2ltcGw= IEhhbmRsZXM= IGhvc3RlZA== IHVwZGF0aW5n YWxidW0= 6Z0= IHNoYWRlcg== RWRpdG9ycw== LXJvdW5k W117 IHNlcA== IEhp VEVN bG9va3Vw Lm1hbg== X0lOUFVU IHRocmVhdGVuZWQ= X0lNUE9SVA== IGRyb3Bz cnVpdA== c2lk Ym90aA== IEV4Y2Vs IGplcg== b3JkaW5hcnk= 0LXQuQ== VklFVw== cmVwbHk= ICk6Cg== Y29sb3Jz dmVyaWZpZWQ= X1Ry X3BhcnNl IGNvbmdyZXNz NjE3 UHJvbWlzZQ== aW50cw== IE1vdGhlcg== LkFwaQ== IER1cmF0aW9u IGZpcnN0TmFtZQ== aW5oZXJpdGRvYw== IE1hcnM= IGFwcg== T0RZ IHZpc2l0cw== NjMx IGhlYWxpbmc= bGV0dGVycw== KSkpOw0K ZnV0dXJl LkZyYW1ld29yaw== IGtpc3M= IGludm9sdmU= IHNpbGVudA== YWRvd3M= IGFueWJvZHk= c2No Njkw IHNvbGVseQ== LWltZw== IHByb3ByaQ== IGluc3RydWN0 IGxpY2Vuc2Vz IG1ldGg= IGNvbmRlbQ== IERvbWFpbg== IEhhcnJpcw== IHPDpQ== Q0VQVA== QmF0Y2g= QGV4dGVuZHM= IENPTlRSSUJVVA== LkRhdGFGcmFtZQ== NDcy X3BhY2tldA== cmVjaXNpb24= IGZvY3VzaW5n Lmh0 X18iOgo= OkdldA== IEtD IHBhc3NhZ2U= U2VnbWVudA== X2NlbnRlcg== LXpB X0JM IGNvbnZpbg== IGNsYXNzaWZpZWQ= IE5TTXV0YWJsZQ== X2Fw dGlsZQ== UmVjdGFuZ2xl NDky KG51bXM= dmVucw== IFVJQnV0dG9u IEZlZGVy YW1v IG91dGxpbmU= IFBhcnNlcg== IOKJ IFdvcmtz LlNjaGVtYQ== IGVuZ2luZXM= NjM3 NTYz X2NvbW1vbg== NTQy X29sZA== IHNldENvbnRlbnRWaWV3 IC8vLzw= IEJU Zm0= IGRpdmVycw== X3dlaWdodHM= ZW1hcms= IEFDVA== IHByb3BvcnRpb24= b3ZlcmxheQ== LmRpcm5hbWU= IEdpdA== X1JFRkVSRU5DRQ== PD4= bGI= X3J1bGU= 6LSl IFB1dGlu IHNsZWVwaW5n KCk6DQo= IHByZXNlcnZl IHBhcmxpYW1lbnQ= IExvb2tpbmc= IHBpY2tpbmc= IERpc3BhdGNo IHNsaXA= 65M= IEx5bg== X3NpZ25hbA== Y29uZmlndXJhdGlvbg== IFBpdHQ= NDkx YWRlbg== cHJvY2VkdXJl IGVudGh1c2k= ZmlnaHQ= IENvbnNpZGVy IHRvcm4= Q29ubmVjdGVk LmNvcw== X2dyb3Vwcw== IFRoaW5r IGRlbGliZXI= IHJlc2lk d29ya2luZw== LmNvbHVtbnM= IENhbGxlZA== IGVzbGludA== PiIs X0RPV04= aGlzdA== IEFkdmFuY2Vk IHJld2FyZHM= YWN0b3Jz IHNpbGVuY2U= NDc5 IG15dGg= IG5ldXI= NTE5 IGF1Y3Rpb24= LkdldFN0cmluZw== ZWtz KHByb2plY3Q= NTk4 CW1zZw== CW91dHB1dA== IGNvbXBsYWludHM= NTUx LFM= IHRibA== ICwKCg== cmlvcnM= YWhyZW4= IGxhd3llcnM= cmVkdXg= X3N5bWJvbA== b2ZmZWU= X1JFU1VMVA== KE5hbWU= VVRD LmN1cnJlbnRUaW1l IG9yZ2FuaXM= LmFyZw== NTMz IG1pbmlt d2ljaw== IHJlY2VpdmVz QmFsYW5jZQ== IHNwZWFrcw== IERheXM= IEJlbG93 NDgz dGlwbw== UHJlc2VudA== IHJlc2Vydg== aHA= IHJpdA== X1JJR0hU LS0p IGNoYWlybWFu Nzgx RElT IEJPT1NU IGV4cGVyaW1lbnRz Njg3 X18pOwo= IHN0YW1w IGZlcnQ= IGZvbmQ= VGVy ZWx2ZQ== dXJlbg== K2k= ZW5kZW5jeQ== IHZpcnR1YWxseQ== Li4uIg== 772e OTI1 LWNlbnQ= X3VuaXF1ZQ== IHByaWNpbmc= bWlj UkVTSA== IDo6Og== IGFubm90YXRpb24= IENpcmNsZQ== b25nb2Ri aXRhcw== ICUo KGNvbXBvbmVudA== INC+0LE= KHBvcnQ= LWhvdXI= Lm9iag== TEJM IGp1cnk= R0JU IHNweQ== IFByb2Zlc3Npb25hbA== ICIiOwoK IHN0cmlraW5n IGRpc2NyaW1pbmF0aW9u IHBheXM= OTM3 bGljdA== ZW50ZXM= IHRocm93aW5n IFBsdWdpbg== KGRlZg== IFJ1bnRpbWVFeGNlcHRpb24= IE1pZ3JhdGlvbg== NTk5 IGRpYw== YmFn b25pYQ== IGNvcnJ1cHRpb24= NzA0 KE1hcA== IHByeg== LmR0bw== IGFjcXVpcmU= U3RhdGVUb1Byb3Bz IGxvdmluZw== 0L7Qtg== X3BhdHRlcm4= IGVtb3Rpb25z IHB1Ymxpc2hlcg== X2Jl IGNvdXBsZXM= NDk4 b2o= IENoYXJ0 IHRyb3A= LnRvb2w= IGVzdGFibGlzaG1lbnQ= IGRvbA== NjU0 IHRvd2Vy IGxhbmU= IFN5ZG5leQ== IGZpbGxpbmc= Y2xhaW1lZA== NjQ0 IGRpYWxvZ3Vl IGNvbnZlbnRpb24= Ym9va2luZw== cGFyZW5jeQ== 5rE= IEdlbmVyaWM= NzE4 XFNjaGVtYQ== NDgy NjE4 IHJhbmdlcw== L2No IHBhbmVscw== IHJ1bGVk 55Sf LnRz X3NldHM= IGNsZWFudXA= UHJldmlvdXM= IEFuaW1hbA== NjA3 KCQo IEF2ZQ== b2xsYXI= MDI4 X2V2YWw= CU5hbWU= KHRyZWU= ICJd NTcx IGR1dGllcw== PScv Q2xpY2tlZA== IGRpZmZlcmVudGx5 IENsYXJr IGRpdA== b2xvZ2lzdHM= IHN5bmQ= IHNlbmRz LWtub3du a2I= IE1vZGFs aXRhdGl2ZQ== IHJhY2luZw== IGhpZ2hsaWdodHM= IFNpbW9u IENhcHRhaW4= 5L+h IENC Y29udGlu YXJhbg== IHBoeXNpY3M= cmV0dHk= ZXRhbA== Lm1k YXhpb3M= IHNwZWFrZXJz IHByZXA= IGF3YXJkZWQ= 7KeA IENvcm4= IE5hdHVyZQ== VURJTw== NzM3 IHByb2o= LXByZQ== W3U= RmVhdHVyZXM= IGlzRXF1YWw= QmluYXJ5 c2ln IGNvbmZ1c2lvbg== NTQ2 NTY4 IEhhdA== IGt0w7M= LmNvbmZpZ3VyZQ== TU9O NDk0 L2VkaXQ= X0FkZA== LHRydWU= NTQx IGNsaQ== RXJyb3JNZXNzYWdl LWxvYWRlcg== RGltZW5zaW9ucw== dWx0aXBseQ== IHshIQ== IFNxbENvbW1hbmQ= IHNwb2tlbg== IHBpY3M= IHRveQ== KEtleQ== IExvb3A= 2Kg= RUFUVVJF aW5jdGlvbg== X3NldHVw d3JhcHBlcg== IHRvbmc= Y3VsYXI= T3B0 LlBs PSIs KGxlbmd0aA== dW1u IGNocm9t IHNldmVudA== IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== NDc4 CXN0YXJ0 IGJlZ3Vu Q0VQVElPTg== ZGF0YXNldA== ODI1 IEZhaWxlZA== Y29scw== NDU5 IGtuZWU= aW1vcmU= LnNwbGljZQ== c2hlbGw= aWdnZXJz IHRoZW1lcw== OTk1 IERK IEFzc2lzdGFudA== LSQ= TWF5YmU= IG9yZGVyaW5n IEludGVsbGlnZW5jZQ== IE1hc3NhY2h1c2V0dHM= IGZhaWxpbmc= ZWxzb24= R3JlYXQ= PWk= LnJlc3Q= IGludml0ZQ== LWRpc2FibGU= Lkdyb3VwQm94 4oCZZXN0 IHRhY2tsZQ== Z3Y= ZXR0ZXI= ICksDQo= X3J1bGVz Lndhcm4= ZnVuY3Rpb25z IENocmlzdGlhbnM= IGJhY2tlZA== IHNsaWRlcg== IGVuam95aW5n bmVzdA== IGhpag== X21z Ly8q QW5ub3RhdGlvbnM= IFZhcmlhYmxlcw== PFY= KHNlcnZlcg== IE9yYWNsZQ== ZWxlbWVudHM= IG9yZ2FuaXNhdGlvbg== X3BvaW50ZXI= IEhlYWRlcnM= W2Q= IGRlYWRsaW5l aXNzYQ== IGtuaWZl IE5BU0E= IEhlaWdodA== Nzg0 IEFzeW5j IHZlbnVl LmRvbQ== Ym91cm5l IEhhd2Fp IG1lbW8= aWN0aW9ucw== IHN1cnZlaWxsYW5jZQ== b21p L2Fzc2V0cw== NTg3 IGVkdQ== xJs= IHJvc3Rlcg== IGhpcmVk IFRvaw== IHBsYWNlbWVudA== dXJhdGlvbnM= IHNldFN0YXRl IE1hZ2F6aW5l IGhvcnJvcg== VHJ5 IGxhZw== IEV2ZXJ5b25l dGh1cg== KSk7DQoNCg== LnJldHVybg== IHN5bXA= 4paI4paI IG5pZ2h0cw== d29ya2Vy IGFsZQ== ZW5uZXNzZWU= LnN0ZXA= IHN5bmNocm9uaXplZA== NDg3 b3VyaQ== RG9lcw== LmNoYW5nZQ== Zm9u LnNldEJhY2tncm91bmQ= aXJjdWxhcg== NDc2 Ky0= IENJQQ== NzI5 IEphbmU= IFNpbWlsYXI= LUk= bGV2ZWxhbmQ= IHByb3NwZWN0 X2ZvdW5k CWNvbG9y LkRpYWdub3N0aWNz IGFubm91bmNl IGFzc3VtZXM= L3Ry IGJk OTg3 IENhcmJvbg== IGFuYWx5cw== NTY0 LmRlc3Q= bmlr IExpZQ== LWluZGV4 RHJhd2FibGU= IFRBRw== IHRyaWFuZ2xl X0ZMT0FU CQkgICAgIA== LmJsYWNr dnVl Y3VyYWN5 IGFmZmVjdHM= OTA2 IHN1cmVseQ== U2xpZGVy dWtp Y2VyeQ== IHVudGVy LnByb2ZpbGU= b3Jkb24= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= bGVhdmU= IHNtYXJ0cGhvbmU= Z2ll IGNvbnNwaXI= IHR1dG9yaWFs 57G7 IGNhYg== NzY1 IFN1bW1hcnk= KgoK w6Ro IlRoaXM= IHNsaWRlcw== Ijwv LmRldg== Jzw= IFJpbmc= xYJh IGtvdGxpbg== LmR1bXBz IGJhc3M= 7Is= UE9JTlQ= IHV0dGVy IMOpcw== LmZ1bGw= T0xM IGNlcmVtb255 c2xvdA== IGFpbXM= dG9vbHRpcA== LnNjb3Jl LWRk NjQy IHByb3g= UmVjb2duaXplcg== ZHluYW1pYw== w6RuZA== L3N0ZA== RFU= IE5vdEltcGxlbWVudGVk KCItLQ== UkFX NjM1 IGV0aG5pYw== YW5ubw== IGNoYW1waW9uc2hpcA== LHNlbGY= IGFjY2VwdGFibGU= IFNwcml0ZQ== W3R5cGU= w7xo IFZL KGpQYW5lbA== NTQ4 aXRy 66A= YXVyYQ== IGZhY3VsdHk= YXZlcnM= IFJlY29yZHM= LlNlY3VyaXR5 IGNvbnN0cmFpbnQ= LkJs VWludA== YmFsYW5jZQ== IGNvbW1l IE5paw== U3VwcHJlc3NXYXJuaW5ncw== IE9jZWFu NTU0 X0lk RGF0YVNldA== IGluc2VydGVk IjsNCg0K 4oCz aXBwZXQ= IGFubml2ZXJzYXJ5 IHJldGlyZWQ= b3JjaA== IHBlcnBldA== XEZvcm0= IGludm9sdmVtZW50 X3VzZXJuYW1l YWxlbQ== X1NFUlZJQ0U= IEluZGlhbmE= IGNpZ2FyZXQ= YXJ0eg== IFJD IG1lYXN1cmVtZW50cw== 572u IGFmZmlsaWF0ZQ== YWNpb25hbA== LXNlY3Rpb24= X2NvbnRyb2xsZXI= dmFyZA== X2Vs IFRveQ== PFA= TWFjaGluZQ== w7ptZXI= IFllYWg= IllvdQ== IG1vbA== LkNs Y29udHJvbGxlcnM= IHN1c3BlbmRlZA== Kys7Cgo= QVRU IHByb2plY3Rpb24= UGFkZGluZw== NTg2 Lm1hdGg= Njg2 ZmFjdG9yeQ== MDQy IGdhbW1h KCk+ Y3ljbGU= IEJ1bGw= cGF0aHM= IHVucA== IHZpZXdEaWRMb2Fk X01vZGVs IGFzc2VydFRydWU= IHJhdGVk RGVjbA== dmVydGVk IERhdA== YnJldw== IHBvaW50aW5n TXM= IFBvaW50ZXI= KSc= X25vbg== NTI3 IFNFQw== IHllYWg= Z2VuY3k= aW5pdGlhbGl6ZQ== Zmx5 NzEx W3Bvcw== LGc= VGVsZQ== MDM0 IGpva2U= IGNsYXVzZQ== LmZpbmRCeUlk ZW5lcw== KGluc3RhbmNl NjI2 wqM= OTE1 IHNsaWM= X2hvbWU= ICovfQo= X3BhZ2Vz KHNlcnZpY2U= OTA1 UlA= IEFtb25n LmdldEN1cnJlbnQ= ODA2 44K5 IHNsZWU= PTw/ X3Byb3A= Zmx1c2g= IE1N QmVs Tm90ZXM= ICovCgoK MDM1 IHJo VGFibGVz IEp1 IFwNCg== bGljaGVu IEluc3VyYW5jZQ== XQoKCg== IGNvb3Blcg== 4oCUdGhl Lm1hdA== NDg5 IGZvaQ== KGF1dG8= TWFyZ2lu NjM2 IHJlc2lkZW5jZQ== NTU5 IEhpc3Rvcg== IH49 RGk= ICcpCg== IGV4Y2x1ZGU= LkRyb3A= JyI7Cg== IGNvYw== X3VwbG9hZA== SGlkZQ== IFVua25vd24= IG5vcm1hbGl6ZQ== X3JldA== LicKCg== Lm5vZGVz ODcw LkRhdGFTb3VyY2U= YmxlbXM= IGdlbnRsZQ== OiQ= JykpOwoK LlJlc291cmNlcw== 4og= IFRhaQ== VkVE IEd1bg== bGVhbnM= IERvYw== LlZvaWQ= IEFtZW5kbWVudA== ODY2 ZXNzZWQ= NzA2 IHJlY2lwaWVudA== Lk5vZGU= b3Zv IGFsaWduSXRlbXM= IFVuaXR5 IFJvbWU= YnVybg== IHZvbHRhZ2U= IFNIQQ== NTM0 NTcy IEdPT0Q= aGVscGVycw== LyoqKi8= IGVsaW1pbmF0ZQ== d2Fw X2FuZ2xl IHJlZnVnZWVz CWFzc2VydEVxdWFscw== IHByb2Jl KCcuLi8uLi8= eW91cg== IG1lcmNo VUJMRQ== CXJlc3BvbnNl X0RFRg== IGVudmlyb25tZW50cw== b3VzaW5n IHJlc3RyaWN0ZWQ= IENPTlRSSUJVVE9SUw== NjIx IGNvbXBhbmlvbg== 4bqj cG93 dXJ0bGU= Ymll LlBlcmZvcm0= PW4= cmVkaXM= IGRpdmlkZQ== IGNvbGxlY3RpdmU= RGlmZg== RHluYW1pYw== aXNTZWxlY3RlZA== YXN0eXBl IExvdA== IFN0YXRlbWVudA== aWNpcGFudA== YWto NTE3 IHNlcmlhbGl6ZXI= X0NGRw== YXZhbA== IHZpZXdlcnM= IEZP T2Nj IHJvYnVzdA== IE1pdA== X0FORA== VHJhbnNpdGlvbg== dW5hdGU= IHByaWRl IGRyYW1hdGlj IFBhZ2Vz X3R1cGxl IGNvcGllZA== bW4= IG91Z2h0 IGVxdWFsaXR5 X2hhcw== X1dS NTcz ZW1p IHN1cmdl aWxsbw== KCl9 MDgx IHBlcmY= OTIx dWxr IGludmVzdG1lbnRz Nzg1 IGdlbmVyYXRpb25z IHJlc29ydA== IHRydXN0ZWQ= X2ZyZXE= IGZvcm1h QVRJT05T IEh1 IEdyYWQ= X2NwdQ== ICIsCg== cmVzc2U= KCoq IGhlcmVieQ== IGxha2U= X1NUQUNL IEJ1cmVhdQ== IHN1c3RhaW5hYmxl IFBF IGRlaQ== IEFuc3dlcg== UGx1cw== L3dlYg== IHN0ZXI= IG1vdW50ZWQ= X2NsZWFy Zm9ubw== aWFuY2Vz X2ZpbmQ= IGNvbmZ1c2Vk X2Jpbg== REVDTA== IGluc3RhbnRseQ== VUlU X0RP U2V0dXA= a2Vl X3ByaW50Zg== X3N0bXQ= IFN0ZWFt cHJvZg== bHY= IHNvbHZpbmc= bGF0b3I= b3R5cGVz QW5kcm9pZA== X2VzY2FwZQ== TGVhdmU= LmdldFRpbWU= ODEx aWZz IGNvdg== IENsYXNzaWM= LWRhcms= NTI2 RGlzcGF0Y2hlcg== LWdyYXk= IFBhbGVzdGluaWFu LmRlZXA= IEluamVjdA== IHJlZmxlY3Rpb24= NTM4 IGh5cG8= Y29uc3RydWN0b3I= LmFwcGxpY2F0aW9u eXN0ZXI= 4pU= c2Nob29s IENvdw== NTkz IGZvb3RhZ2U= LWlucw== IC8qKjw= YXRvbQ== IHByb2ZpdHM= OTIz IGJvb2tpbmc= X3RocmVzaG9sZA== IExpdmVy IGNpdGl6ZW4= Yng= IFN0b3Jt IENvcnA= IHdpZGVy Iikpewo= X0FDVElPTg== aW9ycw== YWlzZXM= Om5vbmU= IGNpdGVk ImZtdA== QXVn Y29tYg== IHdoaXRlcw== IHNlc3M= Xl4= aWdodGg= IHRhbmc= X0NBUA== NjE0 IGludGVyYWN0aW9ucw== NDk3 IGdhcmQ= NjQ2 IHByaXpl NjQ3 YWZrYQ== VHJp XEVsb3F1ZW50 IER5bmFtaWM= 55CG Z3A= IHJlYWxt IE5p IEVkd2FyZA== IGlkZW50aWZpY2F0aW9u IHBoeXNpY2FsbHk= 5pys IHBpY2tz LWZyaWVuZGx5 PGk= aWZpY2U= X0FQ TG9nZ2Vk NTUz fSIu L3V0aWxz IC4uLi4= RU5USUFM KEFjdGlvbg== J10pOwoK IHByb3Rlc3Rz b2xpbmU= X1JFVFVSTg== IHBvcHVsYXRpb25z IFJhaW4= ZHVw b3JpYWw= IEF1dGhvcml0eQ== X2V4cHI= MDc1 LnVz IGNvcnJ1cHQ= CWltcG9ydA== PGNoYXI= IExFRlQ= IGNhYmluZXQ= IG5laWdoYm91cg== IFNxbFBhcmFtZXRlcg== YXR0ZXJlZA== ZW1pYQ== IHJldmlld2Vk IEhlbGxv YmxvY2tz KHByb2Nlc3M= OTk3 IG9ic2VydmF0aW9u cmF0aW5n Lmdsb2JhbA== IHByZWZlcmVuY2U= LnByZXBhcmU= IGRvemVucw== V29ya2Vy IGNhbGN1bGF0aW9u IFRvd2Vy YWlyeQ== IElTTw== IGh1bWFuaXR5 LmFzSW5zdGFuY2VPZg== NzEy IGR5cw== IHBpZXI= aWd1ZQ== IGFzc29jaWF0ZQ== IGludGlt bm90aWZ5 KHt9LA== ODI4 IFJlcHJlc2VudA== cGhldA== c2V1ZG8= 64uI64uk LlBvc2l0aW9u IGNsb3N1cmU= KGNsYXNz CXRpbWU= IE9yYW5nZQ== X29wcw== IHBvcHVw IEltcHJv X3NlY3JldA== IEV1 LnNldExheW91dA== dWxseQ== IHNjcmV3 IFNpemVk IENPTVA= IG5vdGlmaWNhdGlvbnM= VHJhbnNmZXI= RW1pdHRlcg== KG9sZA== bGV0aWM= NDkz IC0KCg== IHBhbmlj NzE1 IExDRA== cnVsZXM= IGFmZmFpcnM= IEZpbGw= X0lSUQ== OTEy YXR0YWNobWVudA== IHZvbQ== PGJ1dHRvbg== NTk1 IHRleHRz IGFjdGl2YXRlZA== LmFjY2Vzcw== KHJlYWRlcg== VGVt IGNvcm9u cm9waA== RE1JTg== IGVtZXJnZWQ= IGluZmxhdGVy IEluZGVwZW5kZW50 b3Jpb3Vz IERlbGhp Njcy IGdseXBoaWNvbg== IENhcmw= U2k= IGV4cGVyaW1lbnRhbA== LmJhcg== SUFO IHNxbGl0ZQ== Y2Npw7Nu OTA0 X0JBQ0s= LG5hbWU= aG9ydA== IHRlbnM= NTQ5 6rM= dXNpdmU= IGdlbnVpbmU= IGJ1Y2s= L2Rpdg== LnJvb20= X05FVw== ZXN0YWRv IEFyaw== b2NvbHM= LmdlbmVyYXRl dG91Y2g= Zml4ZWQ= ICco IHJlZmVycmluZw== IG92ZXJ3aGVsbWluZw== KGxldA== IGZ1ZQ== NjIz X0VOVg== d29tYW4= RmlndXJl YW5pbWF0ZQ== IE1vcnQ= IGxvbmdlc3Q= Y29sbg== VE0= Ol8= cmllbA== LE4= IFJBTQ== IGp1c3RpZnlDb250ZW50 IGFjdGl2ZWx5 L3B1YmxpYw== IOuw R2l2ZW4= T1RBTA== 5aSx6LSl U2VxdWVudGlhbA== IHN1cHBsZW1lbnQ= LmFi IGNhdGVnb3I= fX0sCg== YWhhbg== J3Vu b3NpdHk= IGFjY29tcGxpc2g= VXRpbGl0aWVz LnZpZXdz LmNu Y2VpbA== IENCRA== IFJG UEVH IEdpZnQ= QVlT IFdJTg== cGFuaWVk IMWf IG9ic2VydmVy IHNtZWxs IHs6 TGlua2Vk PlsK b2xlcg== IGxpYmVydA== IGAK IHdlbm4= bGF0ZWQ= IGltbXVuZQ== KE5vZGU= IFByb2JsZW0= IEFicw== bG9ncw== IC4uLw== IEFEQw== IH19Ij4K PicpOwo= PWI= IFdpbmQ= bGFob21h IGFsbG9jYXRl b3JpYW4= IHByZXNjcmlwdGlvbg== LXF1YWxpdHk= IE1heW9y ODU1 aW5lbHk= ZW5kZm9yZWFjaA== IENvbXBsZXg= a29t NzA5 VFk= Nzkw XV0u LlN0eWxl X21hbnk= JywnJA== IGJhcnJpZXI= IEZldGNo IE1hcnZlbA== IHJlc2lzdA== 0L7Qs9C+ YmlkZGVu IFJ1bm5hYmxl OmZhbHNl ODk5 IGJ1aWxkcw== IFN0YWdl IGR1Yg== ZW1wbw== LnNpdGU= NTU4 OwoKCgo= OTk0 IERlbnZlcg== IHJldmVs IHRyaWdnZXJlZA== IGRpY2U= X2ZhaWw= IGdj ODMz NTg5 CVg= IFRocm93YWJsZQ== Nzc1 LnJvdXRlcg== IFJldm9sdXRpb24= 0YDQsA== X05PTg== MDU1 n6U= NTc4 IGVsZGVy IGFicm9hZA== INC1 IEFkdWx0 Ymxy Z2x5cGhpY29u NjEz IHByb21vdGluZw== IGl6 IFNvbGlk NjQ1 X2xvYWRlcg== ZWFybHk= LmVuYWJsZWQ= LWVkaXQ= IFVM X3BsYXk= IEludGVycnVwdA== IGFkdmFudGFnZXM= dWNsZQ== IG1lY2hhbmljYWw= LnRhYmxlTGF5b3V0UGFuZWw= IFdvcmtpbmc= IGFub255bW91cw== UmF0aW5n aWdpb3Vz X3Bob25l LmFkZEFjdGlvbkxpc3RlbmVy IGZyYW4= dW5kZW4= ICopJg== X2Jvb2w= dWxhdGl2ZQ== IGNvbmU= IE11bHQ= IG3Dtg== IEZvcndhcmQ= XSk6Cg== IGNvbnZpbmNlZA== YWN0ZWQ= NjQz 44GT IENvbmZpZ3VyZQ== IGNlaWxpbmc= RGVy IHBhc3NlbmdlcnM= R3JvdXBz IHNvY2Nlcg== L1c= YXZpb3Jz c3dpdGg= IFpvbmU= Lk9wdGlvbnM= IE1vbQ== aWVkZXI= QXJyYXlz IHRyZWF0bWVudHM= IHByb3RlY3Rpbmc= ZmFj IHBpY2tsZQ== QnV0dG9uSXRlbQ== NzEz IGJsb2NraW5n c3RyYXI= w7I= IEV4cG9ydA== IHRocmV3 b3R0YQ== IEJBU0U= Lndz LkxFQURJTkc= b3JkZXJCeQ== X2RlbGF5 IFB1 LmRsbA== IENob29zZQ== OTky UG9saWNl IEJFR0lO Ym94ZXM= IGRpYW1vbmQ= LGw= IAkJCQ== IGN1cmlvdXM= NjI0 dHY= IGVyb3Rpc2NoZQ== YWNrYWdlcw== CVNldA== VGljaw== LmJvcmRlcg== c3RhdGljbWV0aG9k IGNoZXI= aW52b2ljZQ== IGNydQ== IGRlZmVjdA== X21ldGFkYXRh cmVsYXRpb24= aWthbg== W04= KFF0 KEJhc2U= 5oGv YmVhdA== IEVtcHR5 CW8= X3NoaWZ0 IHJlZ3JldA== NzIy VGhvc2U= Q2VudA== IFBvcnR1Zw== IElzbGFuZHM= IFRJTUU= TWFuYWdlbWVudA== OTk2 LXNw NTM5 w6ptZQ== IG5vdGlvbg== dW5pZnU= UEs= ODI2 6KGM IENVUkxPUFQ= XCJc VVY= 57o= ZHJh Y291 PWA= IERlc3Ryb3k= cnA= LmNhbmNlbA== R0c= cnVudGltZQ== IFZ1ZQ== IHByb2dyZXNzaXZl L3NlcnZpY2Vz IHJ1bm5lcg== X0ZSQU1F LlRvb2xTdHJpcE1lbnVJdGVt ICcsJw== ZGVsYXk= PXV0Zg== IHNjcmVlbmluZw== IHB1bGxpbmc= b21hcw== IGFudGg= LW5ldw== L2xvY2Fs IGlQYWQ= IHR3aXR0ZXI= IGR5aW5n IGhlYXZlbg== IFVJbnQ= IFNlbmF0b3I= IHByZXN1bQ== IFdhbGtlcg== IG92ZXJjb21l ZXRlY3Rpb24= IGVtYmFycmFzcw== Q2hpbmE= NjM5 SW5jbHVkZQ== Uk9MTA== IGRhdGFUeXBl RGF2aWQ= 4Lij bG9w LW1vbnRo IHNjYXI= IFNhZmU= ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IGFjY2Vzc29yaWVz IHJhbXA= X1VTRQ== IGNvbnRyYWQ= KSldCg== IHByZXN0 IEhS IFJhcA== IHVzaXpl IGNhcGFiaWxpdHk= IGNvcnQ= LW5leHQ= MDc3 NjI3 IGJ1cmRlbg== ODIy X3JlYWRlcg== IEBA cmVndWxhcg== IEth MDM2 TUFO IGFzdHI= ICcnKQo= IGZlZA== IHBhcnNpbmc= IFllYXJz IGJyb2tlcg== Ijp7Ig== IGFrdA== SW52ZW50b3J5 YWJlbGVk IGFyZ3BhcnNl KioqKioqKgo= dmVyc2F0aW9u IGNvcmQ= IFRp IGhvcGVmdWxseQ== IGFo dmVyYg== IHN0b2xlbg== LkVudHJ5 IGV4cGVjdGluZw== T3JpZW50YXRpb24= IHBvd2VyZWQ= IHBlcnNpc3Q= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= J10pOw== JykpLAo= IENhc2g= CWl0ZW0= ODE4 Z3JhZGVz cm9wb2w= YmFzaWM= ICIpOw0K IGF3YXJkcw== KHJhbmdl LWFsbA== IElCT3V0bGV0 IEluZGVlZA== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IHN0b21hY2g= IGZsb3dlcg== IHNldw== X3RpbWVz YXZpcw== UVN0cmluZw== IFJvdXRlcw== X3Byb3Q= IGNvbWVkeQ== IGxvZ291dA== IHdvb2Rlbg== IHBvc3Rlcg== cGllY2U= LkpvaW4= IFBvaw== Y2Vsb25h bXV0ZXg= Ow0KDQoNCg== IHN0cmlrZXM= Nzg3 TG9hZGVk KWFyZw== ZXNh VW5pdGVk RXA= UEVMTA== ODA3 IEF0bGFudGlj dWxsZXQ= NjUy YXBwbGU= IHNldHRsZWQ= YWNvbg== IHByaW50ZXI= IEdD 5a6a IHJlbmRlcmVk LOKAmQ== aGVpdA== c29jaWFs Lmdl NzE0 IFJpY2s= IFV0YWg= Z290 b25pY2Fs IFNjcm9sbA== IFNjaWVuY2Vz IGp1Zw== IGFtcGw= ZW50aQ== TEVGVA== IHRhYnM= IGVub3Jtb3Vz LmdldEtleQ== bG9jYXRl LkVY LnN0b3JhZ2U= Lldl IHRvYXN0 IEFkZGl0aW9uYWxseQ== ODgy IE5PVw== NTQ3 X1VQREFURQ== IHRyYW5zZmVycmVk dGhh LkRpc3BsYXk= X3Vp SURFTw== IG1lYW5pbmdmdWw= IE1vc2Nvdw== LHRoaXM= IFZpY3Rvcmlh 5pS5 INCf LnN0YWNr IEJhcm4= cGFyZWRTdGF0ZW1lbnQ= OnN0cmluZw== IGJpag== IFNUQVRF IGVtcGxveWVycw== CWlucHV0 KHw= IGxleA== aW52b2tl CW51bQ== Kyss YXRpYWw= b3JzZXM= IGZvcms= X3R4dA== IEFudG9uaW8= ICg8 YXZlcnNl IGRldmFzdA== 44CA LkRlYw== IEdhcmQ= L3Vp LiU= dHJp IHJvbGxlZA== VmFsdWVQYWly aXR0ZW4= IFRoZXI= IHZyb3U= IEZsb3c= IEZpbmFuY2U= IENvbWI= SEM= LnNldFZpc2libGU= aXNs IHBr Nzcz IHVwc2V0 KHJhdw== IFZpY2U= ZWF0dXJlcw== IExhbmc= MDI5 TG9va2luZw== NzY3 IEFTVA== IHRyaXBz IEp1c3Rpbg== YnJvd3Nlcg== PSInLiQ= LnZlcnRpY2Vz ODIx LWNv fS97 ID8s IERvbWlu IEJlbGc= Ijw= IHN1cHBvc2U= YWRkeQ== IHdhbGtz Njg4 RVJSVQ== X2ZpbHRlcnM= UHJlZmVycmVk c2NlbmU= 0LXRgQ== IEFmZmFpcnM= ICIjew== IG9uU3VibWl0 IHN0b2Nrcw== L3ZpZXc= Z3JlZQ== LWdldA== OTAz aGl0 Sm8= LmdldEM= NzI1 SW5pdGlhbGl6ZWQ= 0YLQuA== Y3V0cw== KFR5cGU= IEFncmVlbWVudA== IFZpZXRuYW0= IC8qIQ== IHBpenph LXZpZXc= X2Vt IGxocw== IG11eQ== IElkZW50 IEZyaWVuZHM= MDYx IGFidW5k X0FE LnRpbWVzdGFtcA== LSc= IGR1cGxpY2F0ZQ== IGh1bnRpbmc= IHJlZ3VsYXRvcnk= aWFv YW1vdXM= IEVudGVydGFpbm1lbnQ= W0E= aWF0cmlj X0NMSUVOVA== IEtpZHM= L3BrZw== QnJlYWs= KSkpOwoK IFNoYXBl IHJlbGF0aW5n SW50ZXJydXB0 YWJsZU9wYWNpdHk= ZW1icmU= IG15c3Rlcnk= IGpvdXJuYWxpc3Rz cml0YWJsZQ== Lkxpbms= IHN0b3BwaW5n Q1JFVA== LkRC IHBvcHVsYXJpdHk= IGdldw== IGltcHI= c2V0VmFsdWU= RkxBRw== CW1heA== IGJha2U= d3k= IEVjb25vbWlj IGVuY29udHI= IGZuYW1l L2Rl UmFuaw== IGJ1Z3M= LnNt IG1lZGlhbg== RE9XTg== IFN1cmU= QXRJbmRleA== IERpY2s= IChfXw== LmRlbHRh RnI= IHN1Z2dlc3Rpbmc= IFJlY3ljbGVyVmlldw== LGU= U1RBUlQ= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= eGZvcmQ= IHJlY2VpcHQ= Q0xBSU0= cmVhZG9ubHk= OTY4 IGVuZ2FnaW5n NjE5 Q2E= YXNtYQ== IGVuc3VyaW5n RW5nbGlzaA== IFZhbmNvdXZlcg== aHl0aA== IHB1cmNoYXNpbmc= IFBJ LndvcmQ= KHNw LmhvbWU= OmRlZg== IGdpZw== NTc0 Njcx IFZl Zm9ydW0= IE1pdGNo QmF5 X0ZM NjUx IHNvbGw= NTc3 X2NvbHVtbnM= IG1pbm9yaXR5 YmlyZA== IGhhbmRlZA== U1NM U1RBVA== IG5lcnZvdXM= g70= IGZpbGVQYXRo Q1JFQVRF QXc= IHBlbnM= ODM1 c2VlZA== IENvbXB1dGU= b2xr NTk0 IEFzc2V0 cmVhY2g= JyksDQo= bmF2aWdhdGlvbg== TEY= L3V0aWw= IFB1Yg== IOKU Y2lvbg== IyMK MDcy SUlJ VGFnTmFtZQ== IGFtaWQ= cGVybWlzc2lvbg== aWZpYWJsZQ== eEZGRkZGRkZG 0L3QuA== LkJ1ZmZlcg== X2lycQ== ZGFyaw== IHJldHZhbA== LmZpcmU= cHJvZHVjdGlvbg== Lmxpc3Rlbg== IFdlYXRoZXI= IGJ1eWVycw== Lm5l ZXJw IFBlbnQ= Njk5 IHdlbGZhcmU= IHBhZ2VTaXpl IFN0YWRpdW0= ZXJ0YQ== IGxldg== YW1wYQ== UGFnZXI= NjY1 IGNoYXJnaW5n IE5ldGZsaXg= fG51bGw= X3JhbmRvbQ== LnhwYXRo IHN0ZXJl IElTSVM= cG9uc2Vz KGxvYw== NTY2 ZXlvbmQ= IE9mZmljaWFs NjU3 IE1hcnlsYW5k RGF0YVR5cGU= X3Bhcg== e30s IEVuam95 NzI3 X1NISUZU IEF3YXJkcw== X0VOVFJZ IHNlZW1pbmdseQ== ZW50aWNhdGU= IGhlYXJ0cw== NTgz XzsKCg== IEhJVg== IGluZGl2aWQ= IEZsYWc= X2N0cmw= IENhbGxiYWNr LHo= IEdQVQ== CW9iag== IFBob2VuaXg= IEJVUw== OTA3 IHJ1YmJlcg== X0FVVEg= IFNvbHV0aW9ucw== KGxvY2F0aW9u VmFyaWFibGVz LnNldEVuYWJsZWQ= X2hpZ2g= V08= R2VzdHVyZQ== IHJldHJ5 IG9iamVjdEZvcktleQ== YWxsb3dlZW4= IG1vcw== IENlbGU= IGlra2U= KGNlbGw= IE1PREU= cmVuYQ== IGRlc2NyaWJpbmc= NjQx IHBoaQ== IHJk IGRlc2VydmU= IHdoZWVscw== 5biC IGNyaXRpY3M= NzU1 TmFtZXNwYWNl IEZyYQ== IAoKCgo= IGFsbGE= IHJlcXVpcmluZw== 5pyf dXRhdGlvbg== IGRlbGF5ZWQ= IGFkbWluaXN0cmF0aXZl IGJheQ== LmhpZGRlbg== VGV4 MDUx IGJvdW5kYXJpZXM= IF0pOwoK IEZvbGxvd2luZw== fi8= Rmk= X2NvbnY= X1RJVExF IGRlc2Rl SUNvbGxlY3Rpb25WaWV3 QWxpYXM= IGJpdGU= cGF0aWVudA== X0NPTU1BTkQ= Q29tcGxldGVk CWVsaWY= KDw= QnVzaW5lc3M= IFBvb2w= IHB1cnN1ZQ== IEJhbg== X3N0ZXBz X0RFQ0w= dW1ibGU= IGNvbWJv IExheWVy Lnhy IGR1cA== LS0tLS0tLS0t NjI4 IG1vZGlmaWVy cm9i cmV6 Njk2 IGF0aGxldGVz VXNlZA== d2Vhcg== ODE1 IGxlZ2l0aW1hdGU= ICIKCg== IGh2 U3Rk MDM3 IEhvbGQ= IHN1cnZpdg== IEFsbGlhbmNl IEVhcmx5 Nzc4 QmVoYXZpb3I= KGZvbnQ= L2xpYnM= IHJlY3RhbmdsZQ== IHNpbmdlcg== IGFtcA== RXF1YWxUbw== ICIuIg== IGdpcmxmcmllbmQ= 5bE= bGluZWFy b2JzZXJ2 IHBpw7k= IGNvbXBsZW1lbnQ= V2l0aFZhbHVl KHBhc3N3b3Jk dGFrZQ== Qmxhbms= IENvbXBhcg== JyIs X3BvbGljeQ== bW9uZ29vc2U= X0ZBSUxFRA== LnJlcG9ydA== UmF0aW8= LlBlcmZvcm1MYXlvdXQ= NzQ3 dXNhYmxl bWVycw== X3JlbmRlcg== UEVFRA== Nzcy IGxlc2I= CUU= X3Rvb2w= IGxhZGllcw== OTA4 0L7RgQ== KSkpKQo= Ozs7Ow== LmRvdA== IG5lc3Q= cGVhaw== dWtraXQ= ZWNh X1NX ICYo IE9rbGFob21h IGJhbmtpbmc= NTY5 IE5pbnRlbmRv NzUy IHJlcHJvZHVjZQ== X2VsZW1lbnRz X21hYw== cHJveHk= IHJlbWFya2FibGU= fS8kew== IG91dHM= Lmhhc05leHQ= TU9ERQ== NjU4 IGFuaW1l LmNvbm4= VW5pcXVl RG9t IGltcG9ydGFudGx5 aXR0eQ== IGp1aWNl VHc= IFBhcnRuZXJz IGF0dGFja2luZw== IHBvcnRhYmxl YW1pZW50bw== LlBpY3R1cmVCb3g= Lmdlbg== IG9wdGltYWw= NTgy IHJlY3Jl IGpvdXJuYWxpc3Q= IEV4dHJhY3Q= IE1vcmVvdmVy IG1hcmdpblRvcA== LkFw IGZpcmluZw== TmFO CXRlbXBsYXRl 0LDQtA== LkVu IGRlZmVuY2U= IFRlbA== aWxlbg== amFu PWRhdGE= IFVybA== IFJldXRlcnM= KHRvdGFs IEZpZnRo IGVzc2F5cw== IGludGVycHJldGF0aW9u IGNoYXJpdHk= IFJ1bGVz IHN1YnNlY3Rpb24= c3R5bGVk YXplcg== bGFncw== TElTVA== IHVwbG9hZGVk IHRyYXNo IHJlZ2lzdHI= IHNlbGxlcg== Pic7DQo= IHN0YXJ0VGltZQ== 55k= c3k= KEh0dHBTZXJ2bGV0UmVxdWVzdA== IHRyYXA= R0M= IGVtYmVkZGVk IHN1cnJvdW5kZWQ= ODE2 aW1pdHM= VFg= eWxpbmRlcg== Njg1 IEZhbA== IHNlbnRlbmNlcw== IEph SUZJQ0FUSU9O d2VhcG9u b3ZhdGlvbg== IGNvYXQ= IGludGVycG9s IGxpcHM= IEt5 IHZlY3RvcnM= X2Ft IGludGFrZQ== Lndvcmxk IGluYm94 IE1BQw== X2Fi KG5hbWVvZg== NjMz IGVudGVydA== IGdhdGhlcmluZw== IFNJTQ== Kysu bnlh J319 IFVQREFURQ== IHBhYw== KGh0bWw= IFNhbnQ= aWF0aW5n IElkZWFz IHNwcmF5 IEhhcnQ= IHZlcmlmaWNhdGlvbg== YWRlc2g= L21vZHVsZXM= IE1pbmQ= IFNpemVkQm94 IHNoZWx0ZXI= IGhlcm9lcw== YXR0eQ== IGNlcnRpZmllZA== c2o= IMOqdHJl xYJv IHB1Ymxpc2hpbmc= IE1hbGF5cw== LmdldFVzZXI= IFByb3ZpZGVy IExpbmtlZExpc3Q= IEJvcg== Uk9VTkQ= ZGlk dGFpbg== cGlyZQ== IEplbm4= dGVs YW5kZQ== NzU3 X2Zyb250 IE1jRw== VGVzdE1ldGhvZA== 4Lit IG9jY2FzaW9uYWxseQ== IFdhbGVz IGV4ZXJjaXNlcw== INCS MDQ1 LXBsdXM= IHZhbGlkYXRvcg== IHByYXllcg== TEFURUQ= X2F1dGhvcg== IGxhYm91cg== KysK LWVxdWl2 IEdQTA== IGZhY2Vib29r c2ltcGxl Z2x5 UHJvY2Vzc29y aXB5 NzQ0 ICo+ NjQ4 IGNsZWFyZWQ= IFB1c2g= ODU4 IHBlbmlz U3RydWN0dXJl bGlq IE1vcmdhbg== IGhhbmRmdWw= Ii4K OTg0 fFw= ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IEFxdQ== NTg0 X0lD LmxvYWRz IG1ldGVy IE1hcmluZQ== Ojp7 IFRT Nzc2 IEFycmF5cw== LlRpdGxl R1JBTQ== dGVybWlu IGNvaW5j RWxzZQ== X3N0YXRlcw== LXJ1bg== bWVtYmVycw== Nzgy YXN0cm8= MDY2 IG9uUHJlc3M= IGJlaW5ncw== IGFiYW5kb25lZA== IHRheHA= b3duZXJz Lm1vZGU= IGRpYWdub3Npcw== IF8K IEtuaWdodA== CUE= IG9ic2VydmU= KSwn ODIz ISIpCg== IFBhcmE= IHZhcmlhdGlvbg== KEZhbHNl IEFudGk= IGdyaQ== IGhvbWVsZXNz P3Y= IGJleg== LlNlcnZlcg== cmVsZWFzZQ== IFBhdHJp IGNoYXJz IHJhbmtpbmc= YWN0aXZhdGlvbg== NTgx IHdpZGVz cXI= LlNxbA== YWN1bGFy IEJvdA== X3N5bmM= IGhhcHBpbmVzcw== IHZvbHVudGVlcnM= ODc3 IHNpdHM= Lzw= W2U= KGZpbGVOYW1l IGNhcGFj ODMy IE1hcmlh ZmF0aGVy IGdyYW0= Kmk= IGNhc28= X2RyYXc= IFJhdw== IEl0ZXJhdG9y NjY0 IFBhZGRpbmc= OTI0 UEQ= Qk9Y IFNQRUNJQUw= IGZlY2hh IHZpZGU= IExlYWRlcg== 5Lul JCgiLg== IGRpYW1ldGVy IG1pbGQ= NzQ1 IHJvY2tz YXBwaW5ncw== MDQ4 ZGlyZWN0b3J5 NTU3 LmZsdXNo IEplc3M= VU5JVA== IFBlYXI= IG1hbmRhdG9yeQ== U3Vy cXQ= IHN0cmVhbXM= IGNvb3BlcmF0aW9u IFNhYw== IGNoZWFwZXI= CWNo YW5pbWF0aW9u ZmFyZQ== KGhlaWdodA== KFRydWU= Tlk= IHdyZXN0 IHBvbGxz IGVuY291bnRlcmVk IE1hcmtldGFibGU= X1BBU1NXT1JE NzE2 X1NFTEVDVA== IEFyYWJpYQ== X2Nsb2Nr IHZveQ== INC40Lc= IHN0aXI= aXNpYmxl LWVmZmVjdA== LmNyZWF0ZWQ= IHRveXM= IFRyYWRhYmxl IHJ1c3Q= IHN0cmNweQ== X3RpbWVzdGFtcA== IHRhbGVudGVk LG51bGw= IEpvYnM= IFBvcnRsYW5k IHdlYWtuZXNz VGhyb3c= IEFuZ2Vs 5L+u NzU0 IHVuY2VydA== 77yJCg== IOydtA== V2hpY2g= IFstXTo= U29tZXRoaW5n IGNvbnZpY3RlZA== a2xl ZWRpdW0= IGJyYW5jaGVz IGJhc2Vz 564= IGNvbXBsZXhpdHk= IEZpZw== LnJlc2hhcGU= JGRi NzM2 X0NPTlNU IFRlcw== LnJ1bnRpbWU= IGRlbnk= IEJTRA== IGty aGF0dA== IFN0YXRpYw== IHVuaXZlcnNpdGllcw== UmVwbGFjZQ== IGRyb3Zl IGFkb2xlcw== X3BsdWdpbg== IExHQlQ= IHRleA== ZHVjdGlvbg== NzUx Nzk5 RURJ IFRlZA== X1VSSQ== IHJlY2VwdGlvbg== YXJ0ZW4= LlNpbmdsZQ== cmljZQ== c2Npb3Vz ODQz X2Jn IHdhZ2Vz IFNlcnZsZXQ= VUlMYXlvdXQ= IGZvcm1hdHRlZA== Lk1vZA== PGNsYXNz aXNlbg== IHJlcHJlc2VudGF0aXZlcw== Il09 IHBvcnRhbA== IEh1bnRlcg== IGhpcmluZw== X18pCg== cmljdWx1bQ== dW8= bGllc3Q= IHRlYXJz TGF0 IGxpdGVyYWw= Lkluc2VydA== IGN1cnM= IENvbXB1dA== IHRlcnJvcmlzbQ== IHN3ZWVw IFtdDQo= IHBhc3Nlbmdlcg== IGVhc3Rlcm4= IHR3ZWV0cw== IG9wZXJhdGVk d25k IFN5bg== LnRvb2xz IFdN dWxhdGVz IGJhY3Rlcmlh KGJ5dGVz LnNldERhdGE= IHZpc2liaWxpdHk= Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ZWxt IGdlbmVyYXRpbmc= IG12 IGto amVu L3NlYXJjaA== IGFjY291bnRpbmc= c2VnbWVudA== YWN0aWM= Lmlw IGRlcGxveW1lbnQ= IGZvb3Rlcg== PicsCg== IGV4cGFuZGluZw== IEhhbWlsdG9u IENvbnRyaWI= LlRhYmxlcw== NzI4 QWN0aXY= SEg= b2NvbW1lcmNl Xzs= IGFtb25nc3Q= b3dpbmc= ODU5 IENvbGQ= QVBI IHBzeWNob2xvZ2ljYWw= X3RlbnNvcg== IHBhY2thZ2luZw== IFN3ZWRlbg== IHBhcmU= IGFnZ3JlZ2F0ZQ== IG1vZGVyYXRl ODYy X2hhbmQ= IGRlc2lnbmF0ZWQ= IGRydW0= IGdldFVzZXI= IENyZWVr X3Njb3Bl IFRyYW5zZmVy IE1hcmc= IGZpZ2h0ZXJz V25k IFNlbA== IExhdW5jaA== IGVtZXJnaW5n aWZyYW1l IEFkZGl0aW9uYWw= IGZlYXJz IHNhdGVsbGl0ZQ== Xzo= IGRpc3Bvc2luZw== R2V0VmFsdWU= SHR0cFBvc3Q= QVRJVkU= dWxhcnk= Vmlld3M= IGF0dGVuZGluZw== IFRlbm5lc3NlZQ== IE1pc3Npb24= IG1lZGljYXRpb24= IFd5 IEFubmE= 2Lk= IFZlcnRleA== LnR5cGVz T3JnYW4= LkRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= IFJT IHRlbXBv KEFwcA== ODky VmVyc2lvblVJRA== LnBvaW50 IER1dGNo SG91cnM= TFU= IHF1b3RlZA== LmJ1aWxkZXI= IFBlcmZlY3Q= IEFsd2F5cw== X3R3bw== IGV4Y2x1c2l2ZWx5 IENyYQ== aWZpY2Fy IEFXUw== aW5naGFt Y29tcGxleA== a2VybmVs IGdyYXZpdHk= IHdp MDUy IG92ZXJ2aWV3 NjYx IFdhbnQ= IFdQ KHNo LnJvdGF0aW9u U3RhdGVz IFRlZW4= X2NvbXBvbmVudHM= 7IiY UmVjZWl2ZWQ= IGx5cmljcw== cml0ZXM= CQkJCQkg LUFtZXJpY2Fu W251bQ== L3B5dGhvbg== IFVBUlQ= IGFwcGxl IEpvbmF0aGFu IG1vbWVudHVt 4Lix grk= IG1pY2g= YW5kcmE= IGJpb2xvZ2ljYWw= IE1lbnM= ICUl ZWxzZWE= IE1leGljYW4= LnJhbmRpbnQ= IHRhbGU= IFZhbGlkYXRl IGRlZmVhdGVk Lmh0bQ== IGNvcHBlcg== PS8= Y29zeXN0ZW0= IHJpcA== ZGVjaW1hbA== LlZJU0lCTEU= IFRh CQkJCQkJCQkJCQkJCQk= IGRvd25sb2FkZWQ= ZW52aXJvbm1lbnQ= IG5vbWluZQ== YnVpbGRpbmc= IFNwb3Q= aXBoZXJhbA== IGFsdG8= cXVldA== IEZU L2dldA== L21hc3Rlcg== V0lO 5YWD Njc2 V2VzdA== YXJnYw== IHByb2R1Y2Vycw== IE11Y2g= X3N0b3JhZ2U= Y3JlZGl0 Q09OVA== IHZldA== IHZvaWNlcw== KCcnLA== IGluc3RydW1lbnRz NjYy IE1TRw== ZXNzZQ== cmVwb3NpdG9yeQ== b21pY3M= IGRlYWxlcg== U3RpbGw= IGJhbm5lcg== YXNjaWk= IHJlbWFya3M= W2pz IHNob3J0ZXI= Z3VscA== IG15c3Rlcg== IGt1bg== IEJpcmQ= IHRpZW5l Nzg4 bnV0 IFVt IHdpc2U= WWVhaA== SU5FU1M= MDQ2 X2JlZ2lu LWhlYWRpbmc= Q291cnNl IA0KDQo= b21iaWU= Z3JhZGVk IEdQUw== IMW8ZQ== Rml0 Y2FwdGlvbg== w7Zu L2ltYWdl bGlh KG1vZA== IGxlYWs= ZW56YQ== NjI5 L0g= IEhhcHB5 OTkz RGlzdA== bng= IEdvdmVybm9y KGxhc3Q= dGVhY2hlcg== IFNlbnQ= c3VwcG9ydA== ODM4 amVjdG9yeQ== INmF UmVnaXN0cmF0aW9u MDYz IEdyYXk= LGZhbHNl IGFkanVzdGVk KHNldHRpbmdz PFI= IE1hZ2U= IHBsYWludA== XykK CWl0 b21ldHJpYw== LmJvb3RzdHJhcA== IGNhcnJpZXM= SXA= ICEk IHN3aW1taW5n IE1hcmlv IFF1ZXN0aW9ucw== UEFDRQ== 5pa5 ZW9y fX0i IG92ZW4= IEtvbg== IHdpc2RvbQ== IGFjcXVpc2l0aW9u ZXNzbWVudA== YWdpbmU= IGV4cHJlc3Npb25z U2VxdWVudGlhbEdyb3Vw RnJvbnQ= dWxwdA== YXdr J10pCgo= ODEz NzMy X0FS IGFuYWxvZw== dWxpbg== X1BSSU5U IExH IGJsb2I= IEZ1cnRoZXJtb3Jl X2NvbXBvbmVudA== IENvbGU= TEFO U0NSSVBUSU9O IGxhcA== aWNlbnNpbmc= X1RJTUVPVVQ= IEZybw== IGxpYWJpbGl0eQ== IGNvbXBvc2Vk NjM0 LmNyZWF0ZVNlcXVlbnRpYWxHcm91cA== X3BlcnNvbg== IGJlYW0= CSAgICAgICAg IE5vdEZvdW5k Njg0 LicK w61z LlRleHRWaWV3 UERG IGthcg== X18oJw== ICI6Ig== X21lc3NhZ2Vz IGhhcnZlc3Q= Lmhpc3Rvcnk= PicK LWZvbGQ= 5oo= IEJldHRlcg== ICJcPA== c3BhY2luZw== IGZ1cm5pc2hlZA== OTEz b3Nlcg== XX0K ICQi cHVsbA== LlBvc3Q= OTE5 KGlw l48= LmZyb250 bnRl IEZN Z3VpZA== ODQ0 IG5lZ290aWF0aW9ucw== YWdvbmFs OTM0 IHRyZW1lbmQ= dW5nZW9u QWR2 Y2Fyb3VzZWw= w59l X0RFU0M= IGhhbW1lcg== 4bqt ICAgICAgICAKCg== LWNvcmU= LXNlcnZpY2U= IGNvcm5lcnM= IFNG cHJlZA== PkE= IEpMYWJlbA== IHJvbWFudGlj IHRlc3RpbW9ueQ== b3Nj IEdlbmVyYXRpb24= YXN1cmVz X2ludGVybmFs IHByaW50cw== IF0pCg== IENsZXZlbGFuZA== cmVwbw== RGlzYw== Njc3 NzYy ICI+Cg== 77+977+977+977+9 IG5lYXJlc3Q= NTkx X3Ri KHJlcXVpcmU= RU9G LWNoaWxk IGJ1ZGQ= Llh0cmFFZGl0b3Jz YWx0aWVz NzIz XCI6XCI= V29yZHM= OTE3 IGxvY2FsbHk= IHB1cmNoYXNlcw== Njk1 RHJhd2Vy ZXh0cmFjdA== IGV4ZWN1dA== fScu dXNlcmRhdGE= IGZvY3VzZXM= LW1pbnV0ZQ== NzY0 IFB1Ymxpc2g= b2dv IG1vdW50YWlucw== Qm90 fT57 IHRlbnNpb24= cm9k bWVzaA== IHRyYW5zZm9ybWVk LFI= KCl9Cg== Lmxvbmc= IGdvcmdlb3Vz IFNjaGVkdWxl IG9sZGVzdA== IHN1YnByb2Nlc3M= KElO eWVjdA== IENvb3Blcg== YXJuZXNz IE1vbml0b3I= LnBhcnQ= OTcy IE5CQw== NjY4 IGNvdHRvbg== IGhvbA== NzI2 IHJnYmE= IEJpbw== Q29udGludWU= UG9k IHBhcnRpY2lwYXRpbmc= Y2x1c2lvbnM= KEJ5VmFs NzM0 w6w= IEhPVw== X3NldG9wdA== IGFjY29tcGFueWluZw== MDkx YXRvbg== IC9c IEF1dGhlbnRpY2F0aW9u acOpbg== IEJhcmFjaw== Lyou IGVhZ2Vy IENhbmNlbA== PGxlbW1h ZXBo CXdpbmRvdw== IGluY2lkZW50cw== NzU2 KSwo LkRlcw== aWJl IEZ1bmN0aW9ucw== IGhvc3BpdGFscw== MDM4 IG94eWdlbg== cm9vdFNjb3Bl IGRyZXc= CXJlcXVlc3Q= bm90aWNl YWt1 YW1lbnRz ZmFy OTcz Nzc0 IHByZWNpc2U= X3dyYXBwZXI= IGxpc3RlbmVycw== QVo= LmJvdW5kcw== IEF2ZXJhZ2U= ZmllbGRzZXQ= X2F4aXM= IGV4YW1pbmF0aW9u Jy4K bW9ucw== Kyspew0K IEZvcm1z 7ZWc OTE2 Q3BwTWV0aG9k X3RyYWNl IGVuZ2luZWVy NjYz IEZsYXQ= IHJldmlzaW9u IGhlYXRpbmc= NjM4 L3Byb2ZpbGU= LnJ1 cHJpb3JpdHk= IGluZmVy X1NUUkVBTQ== ICopKA== PiQ= T0xFQU4= T0tJRQ== SUJJTElUWQ== VUFHRQ== IFN1cnZleQ== MDcx IHJlc2lnbg== d2luZw== IHNlY3JldHM= IGNoaXBz SlNPTk9iamVjdA== RGVza3RvcA== NTk2 X1NZTUJPTA== KHJlc291cmNl IDwvPgo= IG5ld2VzdA== dWxp IGRlc2VydA== IGRpcA== IFBvdw== IGVxdWF0aW9u IHBvc3NpYmlsaXRpZXM= IEZlZA== b3NwaA== IFsl IGJ1YmJsZQ== ZXRoZXJsYW5kcw== Nzkz IGNlbWVudA== LmF1dG8= X0FO 4oCZLg== c2VsZWN0aW9u IEJvbmQ= OTg4 RGVu LU8= LmdldFR5cGU= ODk2 LldpbmRvdw== cHJlcw== IHN3aW5nZXI= In0pCg== IHBpcA== IG1pY2U= IGNvbXBvdW5k LXBsdWdpbg== aWtv IGNlbnR1cmllcw== aWN1bGFy LWlubGluZQ== CWtleQ== Plw8 RU5TSU9O IFsNCg== IHByZWNpc2VseQ== IMOpdMOp IFBhc3Q= IENhbWJyaWRnZQ== LWZ1bGw= IGFuYWx5emU= IFN0ZXZlbg== IG5lbQ== ZHVl b3Jlbg== IG11c2NsZXM= aWppbmc= ODUy Ly0= IEtlbm5lZHk= NTk3 Uk0= b3NzaWJsZQ== IGFjdHJlc3M= IGRvbG9y OTE0 5b2V TmVlZA== LnRvZ2dsZQ== IFJhY2U= d2Vycw== Lm1hdGVyaWFs IER1ZQ== IFBlbA== I3ByaW50 IGluZGVwZW5kZW5jZQ== ZXh1cw== U2hhZG93 IGVuY29kZXI= KGxldmVs IFN3aWZ0 LmRvYw== X3NlbGVjdGlvbg== OTUy IHNlcmlhbFZlcnNpb25VSUQ= OTQ1 TGFiZWxz IHBlcmZvcm1hbmNlcw== LlRhZw== IE5ITA== aXplbg== L1VJS2l0 OTkx X0NPTlRST0w= IGVhcm5pbmdz OTc1 IEFsdA== X0hBTkRMRQ== Q3R4 IHBlcnN1 IHRyYW4= 56g= X0NIQU5ORUw= IHNhdGlzZmFjdGlvbg== IEdQ NzY5 aW94 bWl0dA== bGFuZG8= IHBpZw== aW5hbHM= w6puY2lh NzMx U3VyZmFjZQ== IFVVSUQ= IGJlbmVmaWNpYWw= IHNlcXVlbmNlcw== CW1lbXNldA== IG1hZ2ljYWw= wqs= IHdvcm4= QVND cG9wdXA= Q09NUA== X2JlZm9yZQ== ZW5lc3M= VWk= TGVz LnJlcXVpcmU= LlNlcmlhbGl6YWJsZQ== YWRkR2Fw IGF1dGhvcml6YXRpb24= MDg1 LnB5cGxvdA== dXJyYXk= bGF0aXR1ZGU= ODQ1 ZnJhbWVz YWpz IGNvbXBhc3M= IG9ic2VydmF0aW9ucw== X3N1cA== LmVudmlyb24= IHRyaXBsZQ== IFJ1Ynk= IGRyYWlu X0ZJTFRFUg== U2Fu VU1Q TnVsbEV4Y2VwdGlvbg== IEdhYg== b3dl IFR1cmtpc2g= X3NlcXVlbmNl IEdyYW50 dWVsYQ== IHdv IGN1YmU= aXE= IGRpc29yZGVycw== IGV4dHJhb3JkaW5hcnk= IGN0cmw= IFNlcQ== ZW50cg== ODY1 IHNhbmN0aW9ucw== OTQ5 dXRzY2g= UmVwb3J0cw== IGluaGVyaXQ= UGVyaW9k IHBob3RvZ3JhcGh5 IEZyYW1ld29yaw== IHNwZWNpYWxpc3Q= ID8KCg== X3NlbGVjdGVk LlBsYXllcg== IGFsbG9jYXRpb24= KGFjY291bnQ= IHN0cnVjdHVyYWw= dmFibGU= LW9mZnNldA== LkFwcENvbXBhdEFjdGl2aXR5 0LDQvA== LkFkZFdpdGhWYWx1ZQ== IGljb25z IHNodXRkb3du X2xvdw== IENvbXBhcmU= IENl PWhlYWQ= bGFt LnByZWRpY3Q= X0RFQw== IFNsZWVw IEdyYXRpcw== IHN1Z2dlc3Rpb24= IERFTA== Y2FmZg== YXZpcnVz Tm90aGluZw== nos= IHdpZGVzcHJlYWQ= IG1lY2hhbmlzbXM= IHRleHRBbGlnbg== b2NjdXA= IFJhaWw= Ok5T IGZpYmVy IG1r IHZpbnRhZ2U= LWxvbmc= LnJlZHVjZQ== LkVudGl0aWVz KHJlY29yZA== IHBsZWFzYW50 RlJJTkc= LkNlbGxz T1RU CWVsc2VpZg== NjQ5 NzI0 X2NvbmZpcm0= IFZpZXdHcm91cA== c3lt IHByYXk= IHN1c3BlY3RlZA== Q29udGFpbnM= OTgz IGJvcmRlcnM= IGNvbXBvbmVudERpZA== QVNTRVJU IGluZmluaXRl LW9yZGVy IGhlbGxv IEdyYWRl LmN1cnJlbnRUaW1lTWlsbGlz YXBvbGlz emg= CU9iamVjdA== Olxc SE8= dmFsdWF0aW9u IHZvY2Fi NzE5 IGNvdXBvbg== YXRhYmFzZXM= LkdldFR5cGU= TGVhcm4= Nzky XT0i IEdhcnk= b3RpdmU= IGFzaA== IGJpYg== WFhYWA== IGJhbGFuY2Vk VkFMVUU= IE5hdA== X0Fk PEU= 5Yy6 IE1ldGhvZEluZm8= ODk3 TElC IGNvbnNpZGVyYWJsZQ== IEluZHVzdHJ5 dGVzdHM= LnNldFRpdGxl IEJsdWV0b290aA== IG1hcHBlZA== IEJydWNl IE1haW5XaW5kb3c= CXN0YXR1cw== IHJheg== IE1hbmQ= IGNsYXNzaWZpY2F0aW9u UGVybWlzc2lvbnM= OTY5 IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGNvbnRhaW5lcnM= OnNldA== X3htbA== IHdoaWxzdA== VGhyb3VnaA== IHZhbGlnbg== IHdvcmxkcw== Q09SRA== RURJQQ== 0YDQvtCy IHNwYXJl IEhhZA== IERFRg== KHB0cg== IHdhcm1pbmc= ODk4 4KS+ IGNvbnNlbnN1cw== YWduZQ== Q1RM IOyV Lk1haW4= d2ViRWxlbWVudA== IHBpc3Q= Rmxhc2g= QXBwZW5k LnR3aW1n VGFw IHZlZ2V0YWJsZXM= YWxn MDU4 LnNhbXBsZQ== IGNvYWNoaW5n KGluZA== Q2VsbFZhbHVl Q2hlY2tCb3g= IEhlbGw= Uk9PVA== Nzk2 IHN0YWRpdW0= IGludmVzdGlnYXRpbmc= KSU= c3RlZA== OTY1 IFdyaXRpbmc= IOqy IHVubw== IHt7LS0= IGNvb3Jkcw== IHVuc2Vy b3JnYW5pemF0aW9u IENyaW1l IERlbW9jcmF0 NTc5 IHZpbg== L2ZpbGU= MDc4 LWFwaQ== IEF5 IGZ1bmRlZA== IEJyZXhpdA== IEdo ZW50aW5h Y2FzZXM= IGRhc2g= ICEhfQo= SEk= T2ZmaWNl IGNhcHRhaW4= IHdvcnNoaXA= XEM= NzMz ODUx IGdsb2Jl X2JvYXJk IGJhYmllcw== ODc2 IGNvbnNlY3V0aXZl IGVuaGFuY2Vk ZXJldW0= IEFkdmlz IGdyYWlu Nzcx IGNyYXc= YW5jZWxsYXRpb25Ub2tlbg== LmFscGhh X1dJVEg= IE90dA== IENvb2w= LmJhdGNo IHZlcmlmaWVk KGNhbGxiYWNr IHJlZ2FyZHM= Njgz IEludFB0cg== b3VjaGVy IGtpbg== IHRvdWNoZWQ= aXTDoA== YXRob24= IGFkamFjZW50 IGFjY29tcGFuaWVk TEVBUg== IGltcGxpZXM= IGhpbGw= IEJhbHRpbW9yZQ== PSIt RmluYWxseQ== ODgz U2Ft aWNvcHQ= IHNvZA== IG1hag== IFNoaXBwaW5n IGdldEFsbA== IGNvYWNoZXM= IGRvbmF0aW9ucw== aWxvdA== IFRhcg== Y2Vycg== IGJhZGdl IG1hcmtlcnM= IFJhbmQ= YWlzZWQ= aXNzYW5jZQ== IGV4cGxvcmluZw== ODI3 dWNlZA== IEluZG9uZXNpYQ== IGJlbmVhdGg= IG1hZ25ldGlj IG11c2V1bQ== bWF0Y2hDb25kaXRpb24= IGRpc3J1cHQ= IHJlbWluZA== IFRN IC8+PA== IGZvb2w= IGVzaw== Lk51bGw= IERpZXM= X09VVFBVVA== X1RZUEVE IHBhaW50ZWQ= Njcz NzM1 IHNvcGhpc3RpYw== IEJlYXI= Km4= X1BBQ0s= IGRlbGl2ZXJpbmc= IENPVU5U 5Y2V IGplZw== LWNhcg== Zm5hbWU= IHJhbmdpbmc= ODQ4 IE5lZw== LyoqKioqKi8= IENIQVI= IHVsdHJh R3JhZA== PXQ= IGp1ZGdlcw== IERpc2U= YW5uZXJz OTg1 ODkx ODYx IHNjYWw= X2NhbA== IENPTk5FQ1RJT04= X2VtYmVk KGZu IENyYWZ0 MDQ3 IFBhcw== IiktPg== LmNvbnZlcnQ= LnJlc291cmNl IFNUQVRVUw== w7RuZw== IFRpdA== IGNsYXNzcm9vbQ== IEFyY2hpdGVjdA== IEtpbmdz IHN0ZWFkeQ== LyohCg== IEdlbmU= KSI7Cg== aWNpYQ== c3Rhbg== IENvbnN0cnVjdGlvbg== dW1wZXI= OTUx d2M= IENCUw== aW5naW5n LXBhcnR5 KGRyaXZlcg== TUFSSw== MDgy IG5lc3RlZA== ZXdhcmQ= IGRlcGVuZGVuY3k= IG1hbGVz OTI4 IE9ORQ== IFByb2R1Y3Rpb24= XVsk 44O844M= X0xPQUQ= IEJvbA== ZWxyeQ== ODMx oOmZpA== IFJlcXVpcmU= IHBsYWNpbmc= eHh4 Q0FMRQ== IHRodW1i ODI0 Q2hvb3Nl IHByb3RvdHlwZQ== Vk9JRA== IGxlc2JpYW4= NzQx IHRyYWl0cw== U2hhcnA= IGNvbnN1bWU= VHJ1dGg= IGFjdGlvblBlcmZvcm1lZA== IEVudmlyb25tZW50YWw= IERlYW4= IGVzdGFkbw== c2FtZQ== IG51bWVyaWM= IHRyYW5zaXQ= LkVtYWls LXNpZGU= X1JVTg== IFZpbGxhZ2U= X09QRU4= 6KY= LnJlbQ== LXdhcm5pbmc= YW55YQ== UHJvcGVydHlDaGFuZ2Vk ICghXw== KGNoZWNr aWxpYQ== IFNvZnQ= c3RlcHM= IE1hZHJpZA== TWVtb3J5V2FybmluZw== IGhhbmRsZXJz IGV4cGVyaWVuY2luZw== IGluc3BlY3Q= YnV0dG9ucw== UmVjZWl2ZU1lbW9yeVdhcm5pbmc= Y2hlbXk= TGlua3M= IHVybGxpYg== LlN5c3RlbUNvbG9ycw== IEVpZ2Vu IHB1bmlzaG1lbnQ= OlVJQ29udHJvbA== YmFyYQ== LXNldA== IH0NCg0KDQo= IHRvbGVyYW5jZQ== IGludGVyZmFjZXM= LnJlZGlyZWN0 aWdoYm9ycw== Y3NyZg== X2JhY2tncm91bmQ= LlV0aWxz X0hU Njky IEludGVyZXN0 aW1vcw== IGdyYW50cw== MDgz IGV4YW1pbmVk 0JQ= IGNm Zm9yZ2U= YmFja3M= IE9iamVjdHM= X3NlbnQ= LmVudHJ5 IFRIRU4= ZWxsaWRv Y2lh LHJlcw== NjU5 Njgx L3N0ZGM= Lm5k KEludA== IEF1dGhvcnM= IEFwcENvbXBhdEFjdGl2aXR5 J3s= IG1lZGk= TXVzaWM= aWdt Y2VpcHQ= IGF1c3M= IHRhcmdldGluZw== IEtleXM= aG4= Ol0K IG1pbmVyYWw= w64= LmNh NzYx b21lZA== IHNoZWV0cw== IGNhbWI= IGRlYWRseQ== LmluamVjdA== KHVuaXQ= IFNlbGVjdGlvbg== Lmdtcw== KGNvbm5lY3Rpb24= ICQoIg== w6ltb24= IEN1cnJlbnRseQ== cHRl X3BhdGhz ODQ3 bGVhZg== IGltcGxpY2F0aW9ucw== cG9zYWw= 5L2N Wy8= YW5jaWE= 6Zs= bXVs Y2ll IGdlaWxl Njc5 aW1hbHM= VUlWaWV3 IHN1cnJl c2VyaWFsaXpl SVNP IGFyYml0cmFyeQ== IHNvY2thZGRy LmZu IE1lcmM= IGNhc3Rpbmc= S2V5RG93bg== IG5ld1ZhbHVl b3BlbnM= NzE3 VG9kbw== IGZsZXhpYmlsaXR5 CQkJCSAg VmVsb2NpdHk= w7pu cm93aW5n IGNvbXB1dGVk YCkK c3RhdGVtZW50 IHJp X2NhcnQ= TG93 dHJhbnNmZXI= Lm5hdg== IGdyYXZl IERvb3I= CWFsZXJ0 Njkx Njk4 LnN1YnNjcmliZQ== LXByb2ZpbGU= CWJhc2U= IOKIkg== X18KCg== IGVuZ2luZWVycw== IGV4cGxvc2lvbg== IGRhcmk= Njgy CUxvZw== b25hbA== IGlzb2xhdGVk e2k= IE1zZw== RnV0dXJl IHJhY2lzdA== LXdyYXA= IFZlcnM= Ym9yZw== SVNJT04= INGA0LDQ IFlhbg== ODM2 aW5pdFdpdGg= IG5vbWlu KGVtcHR5 w61u 44Kk CXdpZHRo IGNoYW1iZXI= L2FqYXg= RU1Q MDkz IG5lY2Vz aXZvcw== bG9naWM= Kikm Y3JpcHRz OTc2 Um93QXQ= MDUz aWJsaW5ncw== IGVhcnM= IGNvbXB1dGluZw== IG1ha2Vy IE5laXRoZXI= YnJlYWRjcnVtYg== IHNlcmlhbGl6ZQ== IFdpdGhpbg== IGRlbGw= X1RSQUNF MDky PWE= IHdpc2hlcw== LWluY2g= IERvcg== IGlubm9jZW50 IERvbA== IGludGVucw== Zm9yY2Vk MDU0 IEJJVA== IHBob3RvZ3JhcGhz IGNhc2E= IExlbg== XEZyYW1ld29yaw== LlNpbXBsZQ== IGRlYXI= ODk1 KS8o aXBwaQ== IG93bnM= UGxheWVycw== IHByb3Bvc2Fscw== LnBp dXNhbGVt RGFtYWdl IGNhbG9yaWVz IENyZWF0aXZl IFsk IC8vDQo= Nzg2 QW5kVmlldw== w6htZQ== LmN1c3RvbQ== X2ZhY3Rvcnk= Y29tbWFuZHM= X2xvb2s= IHN0cmNtcA== WU4= YWlyZWQ= IGF1ZGl0 0L7RgdGC IFJldmVyc2U= cm9wcmlhdGU= ZXRpY3M= PHZlY3Rvcg== LnNlbGVuaXVt Lm9y IHByZWRpY2F0ZQ== IGZpbmlzaGluZw== IGtsZQ== IFJlcG9z IEtoYW4= IE1ha2luZw== IEZT IHB1dGU= CXN0YXRl X1NVUFBPUlQ= Jy0= b3JpZW50YXRpb24= IGV4aXN0ZWQ= YXR1cmE= IGV4cGVjdHM= IFNoYWRvdw== OTY2 IG9yZ2FuaXo= 5Z6L IHN1c3BlbnNpb24= NjY5 IHVpdA== IHNpbXVsdGFuZW91c2x5 IEFmZmVybw== OiIpOwo= IHJvY2tldA== Y2Fz ZXRlcm1pbmU= YWNldXQ= Njkz eGw= IEFNRA== KGdyYXBo NzU4 ODcy YXNzb2Np X0NS LmFyYW5nZQ== MDQ5 KGpMYWJlbA== IGJlZWY= UXVpY2s= LmNhcmQ= XSk6 LWdy Nzk3 LkdPTkU= X0NMT1NF IE5ldg== w61hcw== IHN0ZXBwZWQ= IEZyZWVkb20= IFdS TlNBcnJheQ== X3J4 X2RpYWxvZw== IGhvdGVscw== OTUz IChcPA== IERpYW1vbmQ= IGFzc3VtcHRpb24= dW1p KGl0ZW1z DQ0NCg== 5rOV IG5lbA== Qm9va3M= 5Y6/ dXNi IEZJTg== ODgx 5qw= IGNvcnBvcmF0aW9ucw== VVNB ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== OTI5 LnByb3BlcnR5 ZXdpc2U= X3Bsb3Q= Ij4nOwo= IHBlcHBlcg== OTg5 IHNoZWQ= IE1lZGl1bQ== IENvb2tpZQ== ODg5 IG92ZXJzZWFz ZWRvcg== YXN1cmVtZW50 NzY2 5a2Y ICcuJw== IHBocA== IFBST0M= IGV4Y2VwdGlvbmFs KHRo IEpldA== IG9jY3VwaWVk LnNldEltYWdl IFJlbGF0ZWQ= dWNrZXI= TWVtYmVycw== UFJJTlQ= IEdsbw== X1ZJRVc= fSIsCg== IGFkb3B0aW9u W10pCg== ODQy IE1pc3NvdXJp IExpbmNvbG4= ZXJhbGQ= UG9wdXA= IGZhdGU= LWJvb3RzdHJhcA== ZmVjdGlvbnM= IFBvbGw= X0FSR1M= aW5hbmNl Njk3 LWhvbWU= Liks X2RvbmU= Njk0 OgoKCg== IGRpc2N1c3Npbmc= IFNRTEV4Y2VwdGlvbg== IGVsZWN0cm8= CXJlcQ== IHp3 ODg2 IGx1aQ== OTMy IG92ZXJuaWdodA== JHVzZXI= IFdBWQ== IGFsbGVyZw== IGRpc2FwcG9pbnRlZA== IHJhZGlhdGlvbg== IGltcHJlc3NlZA== aWZpY2F0ZXM= IHRvYg== Q0xBU1M= IGN1ZGE= X2RldA== LXBvc3Q= dWx1 VHJhbnNsYXRpb24= LWhhbmQ= LnllYXI= IE1vbmdv IHVuY2xlYXI= LmVuZ2luZQ== V0VCUEFDSw== cmljZXM= X0FDQ0VTUw== IGhvbGlkYXlz cGVyY2VudA== LklkZW50aXR5 IEdvdg== IHBhc3Npb25hdGU= ISEu IEdyZWVjZQ== cGx1c3BsdXM= JykpOw== R1A= IGV4Y2l0 LnRhYlBhZ2U= X2NvbmQ= IHNwb25zb3I= TU9EVUxF X3Byb2M= ICQK IHJhdGlvbmFs LlRvb2w= IGlocg== Y2Nh 5ZOB IEVzdGF0ZQ== SUJVVEU= QWN0aW9uUGVyZm9ybWVk IFNvbGFy poI= IGVxdWl0eQ== dGlk OTM4 IHJlY2lw LnNpbXBsZQ== bWs= Njg5 IEx1a2U= IEd1YXJkaWFu IGVuY3J5cHRlZA== IGRvbWluYW50 LnBsYWNl IE5W ODM5 IHRvbmd1ZQ== KEdldA== IHN0YWlubGVzcw== LlBsYXk= IGVi YWNp LmJ1ZmZlcg== cmVhZGNydW1icw== IHZhY2NpbmU= cHJvbQ== OTc5 IHVzZXJJbmZv IHNsdWc= U2VyaWFsaXplZE5hbWU= LXdpZGU= IHJlYWN0aW9ucw== IFlhbmc= IEFkZHM= KHVzZXJJZA== IHBsYXRlcw== IE1FTQ== IGJhaWw= SW5zaWRl ZXRlZA== IGVsc2lm IHNha2U= IGN5Y2xlcw== IOyX CUk= LWNvbGxhcHNl ODQx IEdNVA== ODE0 RGVjbGFyYXRpb24= IGdyb3M= IHJlYWNoZXM= IGN1c3RvZHk= VW50aWw= NzUz ODU2 dHU= IENoZW4= IG54 KGFkZHI= IE9mZmVy IGNvbGxlZw== YXNzYWRvcg== Njc0 IG1hcHBlcg== ODU0 IFNJR05BTA== IEJsb29t IEhvbGw= IEltcGVy LWRlcw== X3NpdGU= UHJvYw== RXF1 IGF0b21pYw== IFdvbWFu c2VudA== NzM4 ODE3 c2Nhcg== IGludGVsbGlnZW50 IEdldHRpbmc= IFJlZ2lzdHJhdGlvbg== IFBoaWxs IGtpbGxlcg== dW5pY29kZQ== CgkJCg== IEphY29i IENvbnN0 IGxvY2F0ZQ== IGNhdXM= NzQ5 IFNjaG9sYXI= IGNvbnN0aXR1dGlvbmFs IGluZmxhdGlvbg== IEdvdA== PWFycmF5 ZW5kdW0= IHRyYW5zbGF0ZWQ= IGRpdm9yY2U= RW50cmllcw== IHNvcg== IFF1b3Rl aXJsaW5lcw== VUs= IGV4Y2Vs KG9wdA== IEFEVg== LDos IGNvbnRhY3RlZA== NzQy IERB IHJpbmdz IEluZHVzdHJpYWw= LmdldENvbnRleHQ= IGZvcmdvdHRlbg== IFRhbg== IHBhbnRz IG92 IGRlY29kZXI= IFBhcnRpYWw= IHZj IGJhdHRsZXM= QXJpYWw= RlJJTkdFTUVOVA== aXJhdGVz LHc= YWludGVuYW5jZQ== IE9k IFRlY2hub2xvZ2llcw== 5YmN IENhcnRlcg== LmZpbmRBbGw= Tm9tZQ== QmVu IFVzYWdl IFBpY3R1cmU= IGJhZGx5 X3BhbmVs IHBhdGVudA== IFByb3RvY29s bG90dGU= CXBsYXllcg== amVjdGlvbnM= NzQ2 IGRvdQ== X3JlbGVhc2U= dXJuaXR1cmU= X3RheA== IEZpZWxkcw== LmRhdGFzZXQ= X21hc3Rlcg== Q0xVREU= IFBoYXJt YnN0 IG9wZXJhdGlvbmFs LmNlbGw= IGlkZW50aWZ5aW5n IGp3dA== dHVwbGU= IFRD IENybw== OTM2 aXhtYXA= LWNvbXBvbmVudHM= Z2VuZXJhbA== IG96 X0Rl X2RvdWJsZQ== IFRvbw== MDg4 LlZpZXdHcm91cA== ODc5 Z2F0ZQ== ZGluZ3M= cGhvdG9z IGdyYW5kZQ== b2xsZWN0 X2xpbg== IGF3ZnVs ZmlsdGVycw== IGFsdGVybmF0ZQ== ZXNw IGNvbXByZXNz ZW8= IFNjYWxl IGluZGlyZWN0 IGludm9pY2U= CgoKCgoKCgoKCgoKCgoKCg== U3RhcnRpbmc= IFBsYXllcnM= aWVsZQ== LnRoZW4= OTgx T3Jk IFR1cGxl IGJvdXQ= IFN0YXRpc3RpY3M= UHJldmlldw== IHB1enpsZQ== IFdpZHRo U1RBVEU= IG92ZXJsYXk= CW9u IGluZnI= IHNtYWxsZXN0 bG9ja2Vk 0YLQvg== c3Ns Nzc5 IGRlZW1lZA== IHNjbw== cmVjaw== IGpCdXR0b24= IG1pc3Npb25z ODcx 56ew LlNlbGVjdGVkSW5kZXg= VEFCTEU= U2VwdA== IGFja25vd2xlZGdl IHN0cnRvdGltZQ== IFRlbGw= IERhaw== IGFsdW1pbnVt IGZlbmNl IFN0YXJz Q09ORklH IHJldHJvZml0 IGVtcGhhc2lz L2hlYWRlcg== IFNvbWV0aGluZw== aW5pc2hlZA== PSciLiQ= IFZhbGlkYXRvcnM= IHBvbGFy c2VjdGlvbnM= OTQ0 LmFzcHg= IGFzcGly Lk1vY2s= Q29kZUdlbg== IHBldXQ= OTcx IGFjY2VwdGluZw== IGJhY2tpbmc= UGljdHVyZQ== L2Fw 0LXQsw== X1NFQw== LXVzZQ== YW5ub3RhdGlvbg== IGNvZ25pdGl2ZQ== IGdyaXA= aG91cg== IExlZ2Fs IGVwaWM= LnRvb2xTdHJpcA== Lm5vdGlmeQ== Lkxhc3Q= T1JJWg== TWlkZGxld2FyZQ== Y3JpcHRpb25z bGFzaA== X0ZPVU5E IExpdmVycG9vbA== IHt9Iiw= OTMx SW5zdGFsbA== IG5pdA== IGZpZ3VyZWQ= W2xlbg== Lldpbg== LnBsYXRmb3Jt ODUz IGdhbWJsaW5n KGR0 YXZlcnk= CWluY2x1ZGU= V2hldGhlcg== Um91dGluZw== IHRoZXJhcA== UmVtb3Rl IExvc3M= eWxs IGFwcHJvYWNoZWQ= IFZlaGljbGU= IEFscGhh IHZvY8Oq YW5zd2Vycw== TlNEaWN0aW9uYXJ5 OTU0 Y29uc2lkZXI= dW51c2Vk IEZhbg== b3JhYmxl ZnJl ODcz IERJU0NMQUlN IEFjdG9y Ll0= dG9IYXZl LnVzZXJJZA== IHNwZWVkcw== ZXdheQ== IHJlY3Vycw== INCz X3ByaXY= IeKAnQoK Q2hvaWNl IHNldHRsZQ== IHBsYW5lcw== J30s VG9t SVRFUg== ISIK 5bs= YWNoZWxvcg== IHNlcGFyYXRpb24= IGRhbA== YWRq IHJlZ2lzdGVycw== cml6 IE5vdGljZQ== IGx1 IGNvdXJhZ2U= IGF4ZXM= Y2VsbGVudA== LmFzeW5j MDcz IGNvbXBhdGliaWxpdHk= 56s= ICEKCg== CXRpdGxl WUxF CW1lc3NhZ2U= VVVJRA== T0xERVI= IEhI IFN0eWxlU2hlZXQ= IGFjY2Vzc2Vk LnZhbGlkYXRpb24= dGFza3M= IHBvbGx1dGlvbg== LmNhbnZhcw== IGluZ3JlZGllbnQ= IENhYmlu QWg= b2xkb3du IE5PSQ== IMOX W2Y= ZWR1Yw== eWFsdHk= KG5vdA== X1N0YXRl OTMz YW1lbg== Nzk1 NzM5 IGRhbw== dWRhZA== ZWxsZXJz fSY= bGljaXR5 X1dJTkRPVw== IHRhdHRv dmFsb3I= LlJhbmdl IHJlZmVyZW5jZWQ= IFJlc2VydmU= TW9uZXk= ODc0 U0NSSVBU L3Byb2R1Y3Q= Y2hvaWNlcw== IHRpbg== 44KT OTE4 IHNlcGFyYXRvcg== IHBrZw== YW1tZWQ= IE1BVA== ISEKCg== IHJhaWQ= IG1vdGl2YXRpb24= IFhQ IEJhY2tncm91bmQ= IFF1YXRlcm5pb24= LmRlZmluZVByb3BlcnR5 aWtlcg== CXBhcmVudA== IE9yaWdpbmFsbHk= YW50YWdl IEhhbnM= IHRpbWVsaW5l LmN1cg== b3BpYw== IFNlcXU= bXVzdA== IENvYWw= IGZvcm1hdHRlcg== X1JHQg== IF8oIg== J30pLAo= ID09PT09PT09PT09PT09PT09 IEZVTkNUSU9O IGxuZw== aWNhdGVz bGl2ZQ== X2VuZ2luZQ== IHRvd25z ODY4 JykpCgo= IFBL KGFwaQ== CXNjYW5m MDg5 cGFja2V0 LnBob25l 4YA= IEFuZHk= X05BTUVT OTgy UExZ OTU1 IG1pbnM= aW1p IGJyaWNr IGJsYWRl LnN0ZG91dA== fWA7Cg== U2hpZnQ= CXNi IENoZWNrcw== IHBoZW5vbWVub24= QXZhdGFy IG1pbmlzdHJ5 cm9zZQ== CUZpbGU= ODc4 IHRpdGxlZA== KExPRw== IGdhbg== ZGVzaWdu KCksDQo= IGJvbmVz c3Rt xZvEhw== IElucHV0U3RyZWFt IHZvbHVudA== IFNlcmlhbGl6YWJsZQ== IGZpZ2h0ZXI= IERyYWc= VHdpdHRlcg== IHN1YnNpZA== 57w= IGZvcnVtcw== LmxvYWRpbmc= bG9nZ2Vk X3RoaXM= IHRlcnJhaW4= IGlycmU= IEluZw== IENO X29iamVjdHM= LnVpZA== IGNvbnNjaW91c25lc3M= VElOR1M= IEdhbGw= IHBvcnRyYXk= MDU2 IERldmVsb3Blcg== IHBhcnRpY2lwYW50 ICI7DQo= L21vZGVs Nzk0 IE9wZXJhdGlvbnM= Xlw= IExhdGVy IHJhaXNlcw== LW5vbmU= Lm1ldGE= PScuJA== RmluaXNoZWQ= IHJlcGxhY2luZw== IHNhbXBsaW5n IEplbg== IlRoZXJl UkVBTA== QUxF 7Iqk T3JkZXJz X3BhcmFtZXRlcg== IE9seW1waWM= IHRyw6hz IGFyZW5h aW9s Oz8+ IGltcGFjdHM= IFdT OmdldA== IGZsaWdodHM= IFJ1c3NlbGw= Y2FtZXJh Rm4= c2lnbWE= IGZvcmNpbmc= IGxvY2Fscw== IGRlcGFydHVyZQ== IGNlbGVicmF0aW9u IFNheQ== ODg0 77yS IEhpbGxz Lmhhc093blByb3BlcnR5 IHR5cGluZ3M= LkFQSQ== IGRvbmF0aW9u T3BlcmF0aW9uRXhjZXB0aW9u LkFjdGl2aXR5 Y3BsdXNwbHVz IENoYXJsaWU= IGltcG9ydGVk IGRhbm4= IG9jY2FzaW9ucw== IGltcGxlbWVudGluZw== IHB1cnBsZQ== LmRpYWxvZw== U1FMRXhjZXB0aW9u ZXJubw== IHdhcnM= IHBhc3Rl IGRlY3JlYXNlZA== IGhhcnNo IGVsYWJvcg== aW5wdXRz IFZpZXdz IGVycm9yTWVzc2FnZQ== X211bA== CXdyaXRl IENvcA== IEFubnVhbA== KGJ1dHRvbg== IHZpZGE= YmFycw== IEhhcnZhcmQ= CWV4cGVjdA== IGluZGV4ZXM= IGRvY3VtZW50YXJ5 IGZsZXNo T1JMRA== IERlbHRh TUFORA== QnJ1c2g= LWNvbHVtbg== IGRldmVsb3BtZW50cw== OTc0 Nzgz bWV0aG9kVmlzaXRvcg== c2xpY2U= IFBETw== IGludmVzdGluZw== ODY3 aXJhYmxl IHhtbG5z 77yb YXJ0YQ== IHRoZW9yaWVz X2NpdHk= ICRfXw== Q3JlYXRpbmc= KHBy RHJvcGRvd24= aXNtYXRjaA== IE5FVA== OTI2 J10pKXsK IFZhbHVlcw== IFNFTw== IFNUQVQ= IGVjb3N5c3RlbQ== IHRlbXB0 IFxc IC8vewo= IENocmlzdG9waGVy IEtlbnR1Y2t5 IEh0dHBTZXJ2bGV0UmVzcG9uc2U= IGh5YnJpZA== eW9u IGZlZWRpbmc= IEV4dHJh Tm9ybQ== SVRDSA== IFNlYW4= IFVwbG9hZA== bXVu cHVy IHBlcnNpc3RlbnQ= IElEQw== IFBlcmZvcm0= ODYz Lm1lcmdl X3Jvb20= TWVhbndoaWxl IT0n IFdlbA== QXJnc0NvbnN0cnVjdG9y ODg3 LkRhdGFiYXNl IGNvdW50aW5n KCkq lOWbng== IFRPUA== bWlsbA== IERU SUdORUQ= OTU2 IEtC IGNvbXBseQ== U291dGg= X2NvbGxlY3Rpb24= Q2hhcHRlcg== IGV4cGxhaW5pbmc= X0FN X3Rz Y2FyZHM= IHF1ZWw= IHBvbGU= IHRvdWNoZG93bg== IE90aGVycw== IHBlZXJz IFR5cGVFcnJvcg== NzYz IHNpeHRo IGNoZWVy IGRpc3B1dGU= OTYz ODkz dXNj KV0s dGh1bWI= IGhpZGluZw== IFNJRw== bGlrZXM= IFBBR0U= LlJlZmxlY3Rpb24= IGhlYWRxdWFydGVycw== VElORw== IEdob3N0 TUxF JAo= IGNvbnRyYXJ5 ZXh0ZW5k J10pLg== RkZFQ1Q= IFBpbnRlcmVzdA== w7ptZXJv cmljYW5l CXNlc3Npb24= IGNyeXN0YWw= LUNvbnRyb2w= b3Zlcm5tZW50 b2dyYWY= OTYx LWFjdGlvbg== dm9sdW1l ZnRlbg== IHVuY29u IGFuaW1hdGU= IGxlYXNl c2Ny IHJlZnVzZQ== 44CL ZnRw aW5mb3JtYXRpb24= IGV2YWx1YXRlZA== IGluamVjdGlvbg== IGphY2s= IHdvcmtzaG9w 5rOo UFRI IFRz b2ZmZXI= CW9z IGtpbmdkb20= TWlzc2luZw== IGxhd21ha2Vycw== ZXh0RmllbGQ= IHNpbmdpbmc= YWJp L2NsaWVudA== Lm1lZGlh QVRFR09SWQ== U2lnbmF0dXJl JScsCg== IEZ1Y2s= XVs6 IHNlbnNvcnM= L2NvbQ== IFByaW1hcnk= LlNRTA== X3Byb2dyYW0= IHBpbGxz IGludGVncmFs IGZsZWV0 IGRyb3BwaW5n LnNs QmVlbg== IHBldHM= IGFkdmlzZWQ= IGRyYWdvbg== X0VESVQ= KGlt OTM5 RkVS IERydWc= KHJhbmRvbQ== IGNvbXByZXNzaW9u b3VzdA== WyU= IGJ1eWVy aG9w Um9sZXM= bWFuYWdl IHBhaW5mdWw= IEJyYW5jaA== LW1vZGFs ZW5hbnQ= IE1lc2g= L2ZvbnQ= IEdyYWhhbQ== IOKY IG5j IEZyYW5jaXM= IHNwZWNpZmljYXRpb24= IGRhbWFnZXM= LWNvbmZpZw== IHRoZW9yZXQ= c2VjdXJl X211bHRp YWNldXRpY2Fs IGRlbWFuZGluZw== ZW5uZQ== SVNUUw== MDk0 KCkpKTsKCg== UmVhc29u UmVjZW50 cGhhc2U= IHBzeQ== X01BTg== IHZvbHVudGVlcg== 5b8= aXN0cmlidXRlZA== bGlv IHByb2R1Y3Rpdml0eQ== X2NvbW0= U3ByaW5n bmlz LndlaWdodA== IENhbmNlcg== QWxsb2M= IFR3ZWV0 IHNlcGFyYXRlbHk= CWNoZWNr X3Byb3BlcnRpZXM= LlVuaXQ= ODI5 X0NMSw== IGd0 ICgpOwoK IGhhbmR5 ODM0 IFRob21wc29u IHVubmVjZXNzYXJ5 IFJlYWRlcg== ODk0 R04= PXJlcXVlc3Q= IFV0aWxpdHk= LlJlcG9zaXRvcnk= IEF4 aHlkcg== Nzkx aWV1 IHRoeQ== IGx0 X21haWw= 5L+u5pS5 YWlsYW5k IFBoaWxpcA== IGJpdHRlcg== IGJldHRpbmc= ODM3 IHRpbWVk b2Nrcw== MDc2 J2E= IGFsZ29yaXRobXM= IHJlaW50ZXJwcmV0 IHRvc3M= cm9nZW4= IGhvcGVk KHNlbGVjdGVk IHZlbnR1cmU= VEVY IExlYXZl LlN1YnN0cmluZw== IGdyYXRlZnVs NzQz dWth IENvbnN1bWVy IGFnZ3JlZw== Q2lyY2xl 4LiB X2Jsb2Nrcw== IGxlZ2FsbHk= ICJ8 44OD LmJvYXJk LkFi RnVuY3Rpb25z cmVjaXBl 6Ic= IE94Zm9yZA== IHdob2xlcw== LkJ1aWxk X2NoYW5nZWQ= aGFp IGRlcGFydG1lbnRz OTY0 SW1w IGNvYWxpdGlvbg== SU5GUklOR0VNRU5U IGVtcG93ZXI= aXRjaGVz Tm9ydGg= IGluZmxhbW0= T05TRQ== IG1pc3NpbGU= IFJhag== IElzc3Vl IGF0b2k= Y2FsZWQ= LkNvbnRyb2xsZXJz IFdvbGY= IGNydXNoZXJz 4buH LkF1dGg= LmFkZEF0dHJpYnV0ZQ== aGlz IGJvb3Rz LmNsZWFu Y2FtcA== IHRlbmFudA== IHR1bmU= IHt9Jy4= IHdvcmtvdXQ= UmVwbw== IHBhcnRpYWxseQ== TUlTU0lPTg== amFtaW4= IFNC IGRldGVybWluYXRpb24= ICcnKTsK IEJlbmc= IHZvcw== IGluaGFi L2xhbmc= c2J1cmdo RXhlY3V0b3I= aG9uZQ== IENoYWxsZW5nZQ== X2xpbmtz LkxldmVs IHVuZGVyZ3JvdW5k LWNvZGU= OTU5 IG9wdGltaXphdGlvbg== bG9nZ2luZw== X2Rlc3Q= IHNuYWtl IGNoZW1pY2Fscw== X0lNUE9SVEVE YWRvb3A= IFRIQVQ= bWFuYWdlZA== IHJlZHVjZXM= IFJFQUw= IEd1eQ== X0dFTkVSSUM= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LmFtb3VudA== IGRlcmU= Z2V0VGltZQ== IHBhbnQ= YW5vbnltb3Vz IGhhcm1vbnk= IEFsYW4= IHNjZW5hcmlvcw== IGRpcnQ= aHRhZ3M= TWM= U2hlbGw= cmlu ew0KDQo= LnBvdw== CWNsaWVudA== IGNvbnNwaXJhY3k= IGFkbWlzc2lvbg== IFJlZ2lvbmFs IFZpZXdDb250cm9sbGVy IFBoaWxpcHBpbmVz IGRlcG9z IHBhcA== OTYy IFBhZA== UGF1bA== LkNvbWJvQm94 IHR1dG9y IFJlY2lwZQ== d3JpdGluZw== IGNvbnRyaWJ1dG9y T1RI U21hbGw= Vkk= IGhhY2Vy ZXF1 IEV4YW1wbGVz aHVtYW4= Lm1lc3NhZ2Vz CXR5cA== ICgNCg== IFNTTA== TEVO IFJvbW5leQ== KGdyaWQ= CW1pbg== ID4KCg== IGZydWl0cw== IHZvdGVy SW5saW5l cGFuZQ== IENvbGxlY3Rpb25z Y2hhcnNldA== IHNwYW0= emI= aXRlbWFw IHN1Y2NlZWRlZA== X0NPTA== IGVsYXBzZWQ= aW1ldGVy IHJlY292ZXJlZA== VGVuc29y aGF0dGFu LnNldHVw aXN0bw== KGhlYWQ= OTc3 IFNJWkU= IHRhY3RpY3M= IGRpc3R1cg== IHByZXZhbA== aWNpb3M= KFZhbHVl X2NvbHM= IEZhdA== IHNlYWw= IHNvbnM= IGVuc3VyZXM= MDk1 IHByZXNzaW5n PSY= aWdlbm91cw== IGhhcmFzc21lbnQ= X0pTT04= IGlnbm9y eW5vbWlhbA== b21lcg== X3N0YXRpYw== IHNpZ25pZmljYW5jZQ== IGNpcmNsZXM= X1N5c3RlbQ== IGRpc2NpcGxpbmU= IGRyZXNzZWQ= IHNwaGVyZQ== OTI3 IGNsaW1i NzU5 X2FjdGlvbnM= IEJhYg== ICc9Jyw= X3NjaGVtYQ== InVzZQ== IHVuZGVycw== IGN1cHM= LnNjcmVlbg== L25ldw== IGFwcGVhcmluZw== VE9Q dmlzZWQ= Y2xhbmc= IGludmVzdGlnYXRvcnM= IG15c3RlcmlvdXM= IHByb21pc2luZw== IHF1YWxpZnk= IGNhdmU= IGVxdWlw PXg= R1Q= KGxpbms= LnZlbG9jaXR5 LmVyYXNl b3Rlcg== KysrKysrKys= cHJvZml0 IHpvbmVz X3VpZA== LXNlcg== IG9iamVjdGl2ZXM= IG1pbGY= d2Via2l0 KG1hdGNo bmVo IEFzc29jaWF0ZWQ= IFRvZG8= PWQ= MDY1 Q2Ft IHZvY2Fs IHN1ZG8= KEVY IHRyb3U= QUJD LmJlYW4= IEdyb3VuZA== IFJFU1Q= d2VldHM= SW5n aW1vbg== OTQ2 X2J1cw== IENPTE9S dW50bw== IGZvc3M= IExpbmtz ODY5 w6RuZw== L2Zvcm1z cHJpc2Vz IGFjaGlldmVtZW50 Q0FMTA== 0LXQu9GM IFZlcmlmeQ== X1NPVVJDRQ== YXB0Y2hh SURE X3JlZmVyZW5jZQ== R29sZA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= OTQ3 UmVjZWl2ZXI= MDk5 IGFq X2RpcmVjdGlvbg== fV0= IENvbXBldA== IGJhbmc= Nzk4 IENhc3M= LXVybA== dGVjaG4= IEplcnVzYWxlbQ== bG9uZ2l0dWRl Jyk7DQoNCg== IHdpbm5lcnM= VGFza3M= IERNQQ== IHRvb2x0aXA= jrc= IEJyYQ== X2R1cmF0aW9u Y3VyeQ== cGFyZW50cw== LS0tLTwv IHBhc3Nwb3J0 ODQ5 V0M= INC7 Y2Vzc2lvbg== IFllbGxvdw== IGVuY3J5cHRpb24= JwoKCg== IGxpc3Rpbmdz IENvbW11bmljYXRpb25z Ll8K ICIiIg0K IGZi IHN0cmljdGx5 IExpdGVy IEVudGVycHJpc2U= X2JvdHRvbQ== QUtF a2V0 IHRhbQ== QmV0d2Vlbg== X1RPUA== RGlzYWJsZQ== IGZpbGluZw== IENocm9u U0VRVQ== ICZfX18= ODQ2 IGZhbA== IFNMT1Q= RW1iZWQ= dXRoZXI= IFJlc3RhdXJhbnQ= IHJlYWxpc3RpYw== IScpOwo= IERFQUw= IFBlcmlvZA== LmdldFg= IHNlaHI= Il0nKS4= OTQz ZXNzYQ== CW1lbWNweQ== IGFja25vd2xlZGdlZA== c2VuYWw= IFVuaXZlcnNhbA== ICcnOwoK L3dpa2k= aWVubmU= IE5TQXJyYXk= IGFjY2VwdGFuY2U= IGxpdmVy IHRvb3Ro IGFjY3Vz CUxPRw== dmFsdQ== 5YC8 IHNlY3RvcnM= cGVyaW1lbnRhbA== L2NsYXNz X2dv TWljaGFlbA== b2xhdGlsZQ== IFBST0Y= IGNvbXByb20= c3BlY2lhbGNoYXJz IOKc IGlzRXF1YWxUb1N0cmluZw== IEh1bmc= LmFzTGlzdA== L2dv Pj4o IEtpcg== IGludHJvcw== IHNrZXRjaA== IHNraWxsZWQ= IGltbWVy IGFkZXF1YXRl X3JlcA== KGhlYWRlcg== X2xpa2U= IHBlcmNlaXZlZA== c3No IGFzc3VtaW5n IGZm X3V1aWQ= dWxhcw== IGRlbW9jcmF0aWM= LmVudGl0aWVz U2VyaWVz YXBob3Jl IG5ld2Vy fSg= U0VD YWlybw== IGNvbW1vZA== IHByaXZpbGVnZQ== IGRldXg= IEhvcA== Licv Y3RpYw== Lic7Cg== PD89 IFVU ZXRpZXM= X0NPTlRFTlQ= LnJlbGVhc2U= LmRpc21pc3M= IGZj b3VuZ2U= cHdk X3ByZXY= TWdy IEJ1ZmZlcmVkUmVhZGVy d3JpdHRlbg== IEVi ICkKCgo= dWl0bw== IGNvbnRyb3ZlcnN5 IGRpc3Bvc2Vk IGZvdG8= TGlzdFZpZXc= L2NyZWF0ZQ== IENPTA== Y29tbXVuaWM= MDY4 IGZyZWVseQ== dW5hbA== b3ZpZA== CXRy cGFnaW5hdGlvbg== IENvbW1vbnM= RWxlbQ== IFJFTQ== IGNvcnJlbGF0aW9u KCkrIg== IEhpZGU= YW5kaW5n KHZlYw== aXRvcw== IEN1bHQ= IG51dHJpdGlvbg== dmFscw== IGRldGVybWluaW5n bG9yZA== IHNjYW5kYWw= IHNoYWxsb3c= b2Rhc2g= X3NlcmlhbA== IFNsbw== IGRpc3Bvbg== UGxvdA== aWNrbGU= IGVsbA== IHVuZW1wbG95bWVudA== Rk0= cm9ucw== bMSx TW8= RXhpc3Q= SURT Q2hv IEtleWJvYXJk LnBhcnNlcg== LkdldE9iamVjdA== IHNwZWxscw== IGdlc2No IG1hZ25pdHVkZQ== X1NM aXNkaWN0aW9u ICcpOwo= aWxpYW5z IHNoYXI= IFByb2I= dWlsdGlu IHR1bm5lbA== PkM= IFdhcnJlbg== IG9wdGltaXplcg== IFNFUlZJQ0VT X29wZXI= Z2V0QXR0cmlidXRl IE1jSw== X3NlbGY= MDg0 LnJz IikKCgo= R2V0Q29tcG9uZW50 ZXJjZQ== IHRvdXM= dW5pdHM= J10pOw0K Wm9vbQ== L0U= IG9ic2M= IGZhc3Rlc3Q= b25saW5l IHBlYWNlZnVs ZmZlbg== IGNhcmdv CXBy IHNlZWtz enU= MDc0 VHJpbQ== IHdhcmQ= IHZlcmQ= IGJsb2dz LmV4Y2VwdGlvbnM= IFByZW1pdW0= IE5ldGhlcmxhbmRz U2FmZQ== RmluaXNo IEFsYnVt X0FDQw== PXRoaXM= dmlydHVhbA== XT4= X0xBQkVM IE5pY2g= X3dpbg== IEFhcm9u V1A= OyQ= YWltcw== IEltYWdlVmlldw== IGVuZGxlc3M= RVJB X0RJU0FCTEU= IGNhbmNlbGxlZA== LXVz IGluc3BlY3Rpb24= ZW1pbg== IEdyZXk= LW9wZW4= IGl0ZXJhdGlvbnM= Lm93bmVy IGtlcmFz LlBhc3N3b3Jk IFJ5 IElOUw== QWly IFNldmVyYWw= LlRhYlN0b3A= SU5HTEU= IEhhaXI= IENhbnZhcw== QUFBQQ== IGZsYXc= Y2VkZXM= LlJlcG9ydA== 7Yo= IFRpcHM= Y3JpcHRvcnM= LnRyYW5zYWN0aW9u LlNwcmluZw== IHZpZXdlcg== IGluc2lnaHRz 6L6T b3JkaW9u VUlOVA== c2Vlaw== IEF1Zg== 7J6Q IHN0cmFpbg== VG9vbHRpcA== IGR6 aWduYWw= YWR0 IHVj ZmluaXRl IG5t LmNtZA== IE15U3Fs W2RhdGE= LmphY2tzb24= LnRyZWU= UmVxdWVzdFBhcmFt X2FnZW50 IildDQo= IGFzc2Fzcw== KENvbnN0YW50cw== OnNz IE1BTg== Ky0rLQ== IEJvdHRvbQ== cHJpbnRz IFNhbWU= QEF1dG93aXJlZA== c3dhcA== aWNpw7Nu IHByb3Rlc3RlcnM= IGhvbmV5 IFZldGVy KENhbGVuZGFy LWFk IEJyb29rbHlu TGlmZQ== X1ZBUg== emVjaA== IENBTEw= X0NBU1Q= IEVsZWN0aW9u IHRoaWNrbmVzcw== VmVyeQ== X0lOVEVHRVI= LWRldg== KSkpKQ== YXBhdA== b29vbw== ZGVtbw== IHBhcnNlRmxvYXQ= IFJhdGhlcg== U1RJVA== bWFrZXI= W2N1cnJlbnQ= Y2hyb25v IGNocmlzdA== 44Gq IERldGFpbA== xrDhuw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN1bA== aWRlbmN5 UXVl IGVsZWdhbnQ= YXBvbnM= IGRpc2hlcw== IGludGVnZXJz KHJlYWQ= MDU3 ZmluZFZpZXdCeUlk IEFtb3VudA== IFNraXA= IGhhYml0cw== Kiko IG1vbnN0ZXJz TUFD OmVuZA== IGZyYW5r QXNzZW1ibHk= IGRmcw== IG5ldXQ= X1RZUEVT ZXF1YWw= bG95ZA== KHVyaQ== IGNoaQ== IGRlZmVuZGFudA== IGNvbmZsaWN0cw== IHZpbA== LWpz IFBlYWNl IG11dGFibGU= KXNlbmRlcg== IEZvY3Vz 5bu6 IGFwcHJlY2lhdGVk c2xlZXA= IFJFRA== Q3VsdHVyZQ== IGRlc2lnbmVycw== X2dlbmVyYXRvcg== Y29kZXM= L2V4 LkdldFZhbHVl dW1ibGVk LnNjYWxhanM= cGVyb3I= IHZldGVyYW5z IH0pDQo= IHVuZm9ydHVuYXRlbHk= X0NSRUFURQ== TWFzcw== IENMQUlN IE1lZXQ= X3N1cHBvcnQ= QmFuaw== KCkuCg== RGFyaw== X0xPVw== IE1pbmluZw== IE93bmVy aWVyYQ== Q2xpZW50ZQ== IGVuY291cmFnaW5n PlM= IGJveWZyaWVuZA== IEhhbGY= IEFDQw== QWZm X2Fy LWxpZmU= Y3g= LkpCdXR0b24= aXphZG8= Lnplcm8= Lm9wZW5xYQ== b3Rvbg== LnRleHRDb250ZW50 IHRvbGw= YXRpZQ== IGJhbGxvdA== LW51bWJlcg== LkV4Y2VwdGlvbg== CXBhcmFtcw== Y2lyY2xl LW1hcA== IG5hcA== IFJvYm90 IEljaA== cmVnaXN0cmF0aW9u QW1hem9u cm9sbG1lbnQ= KGV4cA== IHRhbmtz IEdvcmRvbg== IG1hY2hpbmVyeQ== IGJhc2VsaW5l 5os= MDg2 2Kk= IENvbnZlbnRpb24= CWNvbmZpZw== b29raWVz bXVsdA== UmVjb3Jkcw== IEVTVA== IGdhcmJhZ2U= IGNvbmZvcm0= aWRhbA== IGJhcmc= IHN1cnZpdmVk IGludmVzdGlnYXRpb25z OTM1 LmNvbnRhaW5zS2V5 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K b3J0aW9u IGhvcnI= X2h0dHA= IG1hbnQ= XTsNCg0K YmluYXJ5 OTQ4 ZW1wbA== IGlucXVpcnk= IE1lYW53aGlsZQ== MDk4 IGNvbGxlY3Rpbmc= LkVudGl0eUZyYW1ld29yaw== IiwKCg== IFBpYw== QEluamVjdA== aWNrbmVzcw== IEJpbmRpbmc= IGNvbnRyb2xsaW5n cmV2ZXJzZQ== IGNoYWlycw== c2VtYmxlZA== KGFkZA== RGlzYWJsZWQ= YW5hcw== LnRyYW5zbGF0ZQ== LS0tLS0tLS0tLS0K IHJlZmxlY3RlZA== Il0KCg== RXh0ZXJuYWw= QXJyb3c= U2luZ2xldG9u JXg= IMU= IGFuY2VzdA== IE9ybGVhbnM= CWNtZA== IHByb2hpYml0ZWQ= aXRobWV0aWM= KGNoYW5uZWw= X2Nzcw== Rm9yd2FyZA== LnNvY2tldA== IGx1Yw== 4oY= IEZpcmVmb3g= IE1vdmllcw== KV8= LmVuZHM= KHNoYXBl IGRlYWx0 IHNhdmVz IGdsb3J5 IG1lam9y IGJyZWF0aGluZw== IGVsbGVy Z2V0RGF0YQ== IGFuZ2xlcw== IHRvb2xiYXI= IHNwYWNpbmc= MDU5 SVBT IGZsb29ycw== X0FDVElWRQ== IHNodWZmbGU= L3NoYXJlZA== IEVsZQ== ZWRpc2g= IHdlYmNhbQ== LmV4cGVjdA== aWxvYw== IEluY2x1ZGVz IHR3ZWV0ZWQ= IDop IEVzc2F5 Rml4 LWJldHdlZW4= X3dlYg== LmNvbnY= IHJhY2lzbQ== IHJlZmxlY3Rz dW1t 0LjRgtC1 X2Zvb3Rlcg== L2RvY3M= IFBvdXI= TmdNb2R1bGU= LmluaXRpYWxpemU= cGF0dGVybnM= X0lu IEFiYg== Kg0K IHNlbnRpbWVudA== YnVmZg== X2NvdW50cw== IHJldXNl Y2h1bms= IGltcG9zZWQ= UHJpbWFyeUtleQ== Rm9yZWdyb3VuZA== IGNvbnN1bWVk PyE= IGRpY2s= IGNocm9u IEZlcm4= IHJlc3BvbnNpdmU= OTU4 IGluc2VjdA== aWN1bHR5 IHJ3 IGFsaWtl IHN1YnNldA== IENvb2tpZXM= IFBhaXI= IHRpZXI= SUZP YXZvdXI= IFFV LHNpemVvZg== IG1lcmdlZA== bXY= aXRvbA== eWxvbg== IGp1bXBlZA== LnJvbGU= ZW5zYWpl UnVsZXM= IGJyb3dzZQ== QW5pbWF0b3I= IHlvZ2E= IHZhcmlhbnRz IGNvdXJ0ZXN5 dXJhbg== cGJz ZWxzZWlm QWx0 IExhbmU= Q0xL SU1BUlk= X1BST1BFUlRZ 77yQ IGNoYW4= IGdyYWR1YWxseQ== IHNoYWtl IGJsb25kZQ== Li4uIik7Cg== LXNleA== IGdhbWVwbGF5 YWNpZXM= LnJlZnJlc2g= VVNC IFBsb3Q= V2Fz aXNzaXBwaQ== IFRlbnNvcg== IGNyeXB0b2N1cnJlbmN5 IGRpZmZpY3VsdGllcw== RGVsZXRlZA== V2l0aG91dA== X2FwcGVuZA== X3Zlcg== OTY3 IikpDQo= IGhvbmVzdGx5 IHBpdm90 IHRlbXBz X3Bz IFVubGlrZQ== Wzot VlM= X2luZg== IGp1bmlvcg== IGFuaW1hdGlvbnM= IGZpbGVwYXRo Pzwv W1w= IG9wZXJhdGVz X3JlZA== IEJvb3RzdHJhcA== bGVhZA== ZWZmZWN0 wr0= IFN0ZXI= IEJ1Y2s= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlcHV0eQ== VGhhbg== 4bq/ T05FTlQ= IEhlYXQ= ZXRoZWxlc3M= XSl7Cg== IGtvc3Rlbmxvcw== KCk7Ly8= IGRlcGxveWVk Pnt7JA== IHVuaWNvZGU= cGxhY2Vz IENvZmZlZQ== LlNF IFBBUg== KHR4dA== Z2VicmE= IGZpcmVz TWFpbldpbmRvdw== bWVkaXVt ICjigJw= IGxn IGNtcA== L2Jhc2U= X2xheWVycw== X2VudHJpZXM= IGFkbWluaXN0ZXI= IFNVQ0g= QlA= IFNjb3R0aXNo CQ0KCQ0K Z3VhcmQ= IFN0cm9uZw== SW5zbg== IENBUA== YXN1cnk= IFNFRQ== Q2xvY2s= ZXJpZQ== XG1vZGVscw== ICQk IENhYg== IHd1cmRl IHNvbGRpZXI= IGNsaXBz IGFycmFuZ2VtZW50 IFdvbmRlcg== IEhvcm4= IHNjYXJlZA== IGN1cmU= bWtkaXI= IGFsaWduZWQ= IFBpbms= IGxhbmRlZA== RGltZW5zaW9u U2Nyb2xsUGFuZQ== LmNoYXQ= LldpdGg= IFRyYWlu XS4K IHRoaXJ0eQ== IGR1cmFibGU= IGxk IGxhdGVpbml0 IGNoYXJ0cw== IGluc3VsdA== LkZhdGFs X2N0 IG1hc2tz Q0xVREVE UHJlc2lkZW50 IGNvbG91cnM= Z21lbnRz LmF0dHJpYnV0ZXM= IEZsZXg= IENsb2Nr w61jdWw= aW1lbg== Sk8= IFJlZ2V4 X0xJTks= IGNvdWNo IElOUFVU IGJlYXRpbmc= YnVzaW5lc3M= cHJlY2Vk LnVuaXQ= IEZlbA== TmV2ZXI= b3NwZWw= LnN0YXJ0c3dpdGg= IEVQQQ== Lm9ubHk= IHByZXZlbnRpbmc= eWVy Q29sdW1uTmFtZQ== IGVsZXZhdGlvbg== Zmx1 aWN5Y2xl IG9mZmxpbmU= VG9vbGJhcg== IGNvbXBldGluZw== KV0u IG1vZw== IGlzVmFsaWQ= QXNr X2F2 X2xhdA== QU5D IEpvaA== a2Vycw== IGd1YXJkcw== IGNoYWlucw== IFNpbXBsZURhdGVGb3JtYXQ= LnN0YXRpYw== IHZlc3NlbA== IG11ZA== IHN0YWJpbA== IHN0cmV0 Z20= YW1hdGlvbg== 55w= LXdpdGg= IHJvcw== X1BB IHJlc3VsdGFkbw== IGNvbmZpZGVudGlhbA== IFRva3lv CXVzaW5n IE1hdGhm b21iaW5l IEVTUE4= IGRlYWxlcnM= IGRpc21pc3NlZA== VFJZ IHRlZW5z cmVjb3Jkcw== IHdpbmdz Z2FsbGVyeQ== YWNjb3VudHM= X0xJQg== IGphY2tldA== IE5TT2JqZWN0 IHN0b25lcw== IERlbGl2ZXJ5 IERpZXQ= L3dhdGNo IHRvaWxldA== IEd1ZXN0 LmRheQ== MDY3 IGludHZhbA== MDg3 VmlzaXQ= IGludmVzdGlnYXRlZA== IHBlbnRydQ== IFRoZWF0cmU= YW5kaWRhdGVz TGFuZw== IFNlcnY= IGNvbnRyb2xsZXJz IHNldFRpdGxl TlA= YW15 ZmxhdA== KHVp MDY5 X2RvY3VtZW50 6IO9 IENvaW4= IEFkYW1z cHRpYw== IHByb2R1Y3RpdmU= IGFjY29tcGxpc2hlZA== DQoNCg0KDQo= IGRlZmVycmVk aWVudGVz IHNpbmM= b2xhcnM= UmlnaHRhcnJvdw== IHZhcmlhdGlvbnM= KG9mZnNldA== OTU3 LkxheW91dEluZmxhdGVy IHN1c3BlbmQ= IHByZXZlbnRpb24= X3ByaXZhdGU= X2pz 4piF IHdpZWRlcg== YXR1bQ== kow= IGFwcGVhcmFuY2Vz LkRvY3VtZW50 IHZhbGlkYXRlcw== Y2FsZW5kYXI= fSI7Cg== LmRlbW8= Y29udXQ= IGNvcnJlY3Rpb24= IERlYWw= IGJhdHRlcmllcw== LmR1cmF0aW9u LFw= X21hcmtlcg== bXVsdGk= IGhhbHQ= IGNtcw== IHNoYXBlZA== QnJv cmVkdWNl ICMjIyM= Q1RPUg== IEJlbmVm IGljb25pYw== IHBpYW5v IGVmZmVjdGl2ZW5lc3M= fC4K IGFqYXg= IHZvbHVtZXM= 4Lih IGNsanM= ICAgICAgICAgICAgICAK YXRocw== cmFpdHM= 5aSn 0ZY= X211bHQ= IGZhc2NpbmF0aW5n QXZlcmFnZQ== IHByw6k= IENoYWlybWFu LmZpbmRFbGVtZW50 X3Bpbg== IGNvbXBhcmluZw== IGRhcmtuZXNz LUZp LXNlcnZlcg== IHNlbGVjdGluZw== c3RlcmRhbQ== IFBhcnRz Rk9STUFUSU9O IG5vdGluZw== IHBpbGU= b2dz IHBhbGV0dGU= X2Rv aXRpemU= MDc5 KCko IGRlZmluaW5n IHJlbWFpbmRlcg== VW5pdHM= X1RBU0s= SHR0cENsaWVudA== U29jaWFs IGZ1bmRyYQ== TlI= Y2hlc3Q= Q3VycmVuY3k= LmFkYXB0ZXI= IGRvcA== dW50aW5n QU5HVUFHRQ== Ikhl CWluZGV4 X3BhY2thZ2U= Lkljb24= IHJlcGV0 bWFzcw== PSIuJA== IFN1ZA== IGxpZA== cHJvdmluY2U= 7Jw= R1BJTw== 0Jo= IE15U1FM IGRvY3M= IEdB IGlwc3Vt S2VybmVs IGFjY2VwdHM= IGZpdHRpbmc= IGN1YW5kbw== IGR1cGxpYw== IEJyb3RoZXI= IEtsZQ== bnVtcw== IG1vcnBo ICMjIyMjIyMj IENHUG9pbnQ= PHVuc2lnbmVk 5L6L IER1a2U= LnNldEJvdW5kcw== cXM= b3JpYw== amVy IHJlZ2FyZGVk SHR0cFJlcXVlc3Q= IGJvbmRz IHRob3JvdWdobHk= ZW5jZW50 IGhpZ2hsaWdodGVk IGFjcmVz IHdvcmtwbGFjZQ== IEx1eA== IHF1b3Q= OTg2 LmluZmxhdGU= IGRvY3VtZW50ZWQ= IGFkZGljdGlvbg== IG11dGF0aW9u LmNpdHk= IGJvdHRsZXM= IFJlcG9zaXRvcnk= b25u ZXJybm8= QVJJQUJMRQ== 5bqm X0JFR0lO Z2xhcw== J30pCg== IE1hc3NhZ2U= IFdoaXQ= cmVnZXg= V0E= IG91dGxldA== LWhlYWQ= IGV4cGlyZWQ= IFRoYWk= L2luY2x1ZGU= Z3JhZGllbnQ= c2NhbmY= IHNlYW0= d2Fs CWJ1Zg== QmVhcmVy IHByZWNpb3Vz aWZhY3Rz Y29vcmQ= IGV4cGxvcmF0aW9u LmdldFk= KGhhbmRsZQ== VG9waWM= IFZlbnQ= cmhz LS0tLS0tCg== IEJyaWdodA== IGd1aWxk bW90aGVy c3Rvcm0= IG11bmljaXBhbA== IGluaw== LlRZUEU= d2w= Li4uPC8= X0RFVg== PSIuLw== X2Jvb2s= dGh5 aXR6ZXJsYW5k b3BsZXM= dHJhY3Rpb24= IENhbWVyb24= IEFuZHJl LnJlc3VsdHM= IGNocm9tZQ== IHNlY3VyZWQ= IHN1cmZhY2Vz KTw= IHRvYmFjY28= CXNwcmludGY= IGVzY2Fs IHN0ZGVycg== IE1lbGJvdXJuZQ== IGRpc3RyaWN0cw== IG1hdHQ= b2hlbg== IGRhdGFHcmlkVmlld0NlbGxTdHlsZQ== KE1vZGVs IHNlbnNpdGl2aXR5 S0E= dHJhbnNwb3J0 LmdldERhdGU= IHN1YnRsZQ== VUdJTg== Lm1vdXNl IGFsdGVybmF0aXZlcw== IGVsbGU= Y29yYXRpb24= cmVhdGlvbg== 5ps= X05PUk1BTA== RGlzcGxheU5hbWU= IGZhbmN5 SVNFRA== TU9E LlJlYWRPbmx5 IFVi IEN1 aWNvbA== IE5lbHNvbg== IENPUg== YW56YQ== IFNwYXJr ICJcXA== LS0KCg== d29vY29tbWVyY2U= IHJlbWVtYmVyZWQ= dmVyaXR5 IEV4dGVuc2lvbg== IFBE IHNlYXJjaGVz LnNv IEZvb3Rlcg== ID0n IFdBUk5JTkc= LWxv CXRhYmxl IGRyYXdlcg== cGljdHVyZQ== IEZhbnRhc3k= c3Rvcnk= IG3Dqm1l IwoK X3NsaWNl b2x0YWdl SGFy L3k= IEVS ZGll IFBPUw== LmFjdGlvbnM= KE1haW4= ZXdhcnQ= YXBldXQ= IFNURQ== aWRkaW5n LnJlYWRMaW5l IHNlYXJjaGVk V2Vk LmZpZ3VyZQ== dWdodGVycw== KCkuX18= IG9yYml0 c2hpcHBpbmc= IGZyaWVuZHNoaXA= IFNoaWZ0 LW9y cXVv V0hFUkU= IEVzcA== LmZvcndhcmQ= b2ZmaWNl IGnDpw== IENoZWxzZWE= SXRlbVNlbGVjdGVk YWNoZXJz ZGVsZXRlZA== cm91cw== ICItIg== IEdyYW4= IPCfmA== LXBvd2Vy ZXR0YQ== IHJlbWluZGVy ZW5zb3Jz IEFsbG93 xJlk X3RlYW0= IGNyb3du dGlja2V0 IGNvbGxlY3Rpb25WaWV3 bGFjZQ== IGZpeGVz IEh1Yg== Y2F0YWxvZw== IElkZW50aXR5 IGV4Y2Vzc2l2ZQ== IE5hdmlnYXRvcg== X0JS LXBsYXk= IENhbXBhaWdu ICAgICAgICAgICAgICAgCg== YXNpdmU= IHdj IEJlaWppbmc= L3d3dw== IG1ha2V1cA== IGRpc3RhbmNlcw== IHNhdGlzZnk= Q09ORA== IHdvdW5k KCld IHZpb2xhdGlvbnM= IHN0YXlz LyM= aWxpbmU= XEV4Y2VwdGlvbg== IE1vdGlvbg== IGhlYWw= X3BsYW4= cmFzZXM= KG1haW4= QXBwbGU= IGNvbXBsZXRpbmc= IGRldGVybWluZXM= U2Nhbg== IHN0ZWFs IFNvYw== QW5hbHlzaXM= IGZhdm9yaXRlcw== IGNhbXBv b25lcg== IEZsaWdodA== Li4uCgoKCg== KSkpKSk7Cg== LWNvdW50 IHB3 QXNTdHJpbmc= IHNleHVhbGx5 Rmlyc3ROYW1l IEVzY29ydA== Y2FsYw== IFdpa2lwZWRpYQ== IGRvY2tlcg== IFN3ZWV0 J2lk SW50bw== IEh1bnQ= LmVxdWFsVG8= IGxhYm9yYXRvcnk= IEJVU0lORVNT RmlsZURpYWxvZw== VHJlZU5vZGU= LkVuYw== IE1heGltdW0= IG1vdGhlcnM= 5rU= IGZyYWN0 LnN0YXJ0c1dpdGg= IGhhcmRjb3Jl Lm9i 5aeL ID48Lw== X3Jv KCgq Pz8/Pw== X3ZlcnRleA== a2VpdA== IEhhbGxvd2Vlbg== VEk= IFZh X2Nhcg== PSJ7eyQ= IHJhbmRvbWx5 0LDQvdC40LU= IHNob2NrZWQ= IFBva8OpbW9u c2lnbmFs IFNESw== bWlkZGxld2FyZQ== IHRyZWF0aW5n IGJ1cm5lZA== RGVwYXJ0bWVudA== IFNwZWN0 IGNsaWVudGU= IFJlZGRpdA== X2F2Zw== IGluc3RhbGxpbmc= X2FscGhh LGRhdGE= IHNldElk IExpc3RWaWV3 KHByb3BlcnR5 IGNyb3NzaW5n IE9iag== IFdhcmQ= IFJlZGlyZWN0VG8= IFByZXNlbnQ= IGRyYXdz Y2hlZHVsZWQ= IGxlZ2lzbGF0aXZl IHR3aXN0 IFN0cmE= IEFGUA== IENoYXA= LXBy OkNHUmVjdA== IGNlcw== Um91dGVz bm9m IHZpc2E= IFRDUA== IEVWRU4= aXZpYWw= IExldHRlcg== UkFZ IGltcGxvZGU= LmVx PScr IG1vdGl2YXRlZA== LnZpc2libGU= LnNob3J0 Pm1hbnVhbA== IFRlY2huaWNhbA== IGNvcnBvcmF0aW9u IEhX YW5rYQ== VEFJTA== aXN0YXM= IHBlcmZvcm1z IEJlaGF2aW9y LkZvcg== X09SREVS IEtpY2s= IGNhbGxiYWNrcw== X2Ry dWVnbw== aHVi dWZmaWNpZW50 c2t5 IGJw aHRhYmxl IE9OTFk= IEFVVEhPUlM= LkFyZ3VtZW50 In07Cg== IFRodW5kZXI= IEtvbQ== LlNob3VsZA== QVVUSA== YWh1 X3BheW1lbnQ= IHN0YXJ0ZXI= 7ISc 7Jqp QmxvZw== LnBhdGNo IGdvdmVybmVk YXNzeQ== LWZvdW5k IHRoZWF0ZXI= IEZvbnRXZWlnaHQ= IEJhdG1hbg== Iklm LlJhbmRvbQ== X2RlbHRh IENF QXV0aGVudGljYXRlZA== IGRyb25l IGNvdXM= cmFkaXVz TWVy KE5vbmU= IE5K X2hlYWRlcnM= IGFtZXI= cHl0ZXN0 IEFjdGlvbnM= CQkJICAgIA== IGV0dA== IGhvbHk= IHVuY29tZm9ydA== IE5pbg== IERlY2ltYWw= IE1lc3NhZ2Vz LnNlbmRlcg== XV0pCg== IGVtYnJhY2U= VGhvdWdo L3Nw IGN1bHR1cmVz IGhpZ2h3YXk= dGFy LmZhaWw= X2hpZGRlbg== IGNvbXBvbmVudERpZE1vdW50 IFdyaWdodA== IGphZw== X2ls Li4vLi4vLi4v aWd1 Rm9vZA== IGFjZQ== IGHDsW9z VVNE IG11dHVhbA== TG9naWM= IHRlbXBsZQ== IGJyaWVmbHk= IFRyaXA= Y2xhc3NtZXRob2Q= ZGVmYXVsdHM= IGNodW5rcw== LCwsLA== IFJlYXNvbg== JGlk LXVwcw== IGRhbW4= IHRydWNrcw== IHVubGltaXRlZA== IHNjdWxwdA== IENhcmRz IGF1dG9y IFRlc3Rpbmc= IGRpZXNl c2hvcHM= 57Q= KHBheWxvYWQ= IFBBVEg= IE1lbW9yaWFs IHJpZGljdWxvdXM= ZWdyZWU= LXdpbm5pbmc= IHJlaGFi IHNvcGhpc3RpY2F0ZWQ= d3BkYg== CXBhdGg= ISI7Cg== X1NZUw== LnNwZWVk IHNvYXA= c3VmZml4 V3JhcA== IGVuaGFuY2VtZW50 w4k= w7pi IHBsYXlsaXN0 IG1peGluZw== YW50aWRhZA== PSIiOwo= IFJldmlzaW9u IEJlYXQ= LmluYw== LXdheQ== ZW5jaWFz dWxlcnM= Q2F0 aWRlbA== IFNoaXA= LnNldENvbG9y IHRocmVhdGVuaW5n Lm1vZHVsZXM= IGFmdGVyd2FyZHM= IERhc2hib2FyZA== CiAK U2lnbmFs IHByaW1lcg== b3JuZXlz aWNpYXJ5 IGxpZ25l X3ByZWRpY3Q= IGFlc3Q= X2h0dHBz Pjo= IExleA== IHJlbmNvbnRyZXM= ZWdyYWw= c2NhbGE= X2ZhbWlseQ== w59lbg== X3N5bQ== IHVuY2VydGFpbnR5 IFZBTFVF IH07DQoNCg== IGJyb2FkZXI= IGhvcnNlcw== 44Gd IEthbA== b2Jh X0lORVQ= IEtpbGw= anF1ZXJ5 YW1pbmF0aW9u W0Ai IG11ag== IyMjCg== Rmlyc3RPckRlZmF1bHQ= dGhlblJldHVybg== Q2hl L2Zvb3Rlcg== IHBhcmtz YXNqZQ== IEd1bGY= IG1vZGVzdA== LkluaXQ= 77yfCgo= IHByb3NwZWN0cw== IHN2Zw== IOWP LkRpYWxvZw== X05FVA== ICgoJA== IGVr IFdhcm5pbmc= IE1L PExN ICcNCg== aWVt aGV0aWM= IGl4 dGhpbms= LXNoYWRvdw== IEVsZA== IE5ldmFkYQ== IExlYWY= IEdST1VQ IHByb21v ZW50aW5l CU1hcA== IE1vZGVscw== IEtyaXN0 X2tlcm5lbA== LW1hZGU= IGNlcnI= QXNzZXRz ZWxsYXI= IGludm9rZWQ= LnZ1ZQ== IGN1bHRpdg== Q2xvc2Vk IGdlbmVyYXRlcw== ZmZmZmZm dGhlc2l6ZQ== c3FydA== IENhc3RsZQ== LmNhcg== IGtlZW4= dW5kYQ== IENyb3c= IFNpbmdo eXRob24= IGJlYW5z bGFyZw== 5paH5Lu2 QXdlc29tZQ== dW5jYXRl UGF0aHM= b2pp KGN1cnI= Q09ORFM= IG1pbQ== IHNob3VsZGVycw== SGFyZA== YXN0ZXM= 0LDQtdGC IGNvbnZpbmNl ZGVjZXNz bWFkZQ== IENNRA== Lklt IGNoYW9z ZW5zaXZlbHk= IGNvb2xpbmc= IGJ1cmllZA== KCdA X1Nl CQkJCQkJCQkJCQkJCQkJCQ== LmNvbXBhbnk= LnN1Ym1pdA== cGhhbnQ= IGJvb3RzdHJhcA== X2hlbHA= 4Kc= LmR1bXA= IGRpZmVy X21hcHBpbmc= IGNpcmN1bGFy IGVzY29ydHM= IGJlcmU= IGdyYWR1 IExlZ2VuZA== aW1lZGlh IEJhcmNlbG9uYQ== IGJlZHM= 5Yiw 44CK X3ZvbHVtZQ== IHRyZW1lbmRvdXM= IHNjYWxpbmc= IHBpbnM= ZW5hcw== dHlwZXBhcmFt RGFzaGJvYXJk cmVuZGVyZXI= IHNwaQ== ICYk IFNraW4= YWxtYXJ0 IGhvY2tleQ== ICciLiQ= IGVycm5v IGJldw== Rm9sbG93aW5n Lk1vZHVsZQ== ZXJhYmxl IE1pbGl0YXJ5 IFJpbw== X2F2YWlsYWJsZQ== IFN1cmZhY2U= IHN0YWI= SUZJRVI= IExJU1Q= IGRhc2hib2FyZA== IGNsdXN0ZXJz LnBsdWdpbg== IGpvdQ== IERlY29y Rm91cg== IGRlbGxl KioqKioqLwo= aWF6 aW5kZQ== Y2hpbmc= IGdldEl0ZW0= LkFkZHJlc3M= bWVudGVk QW1lcmlj UGxhaW4= IHVzYg== IFByYWN0aWNl X21lbnQ= LmJsdWU= SGludA== 0YDQsNCy IGNvbm5lY3Rvcg== IGluaGVyaXRlZA== 0LjQsg== IGludGVydmFscw== IGNlcmU= IHVk IGluY29u LkV4aXN0cw== IE1pYw== Rks= KGNhcmQ= LlNldHRpbmdz IGV4aGliaXRpb24= IG9uUHJlc3NlZA== IHJlc3RvcmVk ZW5ndQ== LmRlZg== IHJlY3Y= LiIpOw0K ZW5jb2Rlcg== YXRoZXJpbmU= KGRlc3Q= YXplZA== I2VuZHJlZ2lvbg== c2VtYmw= LE0= b2J5 INC/0LXRgA== LkNhbGw= IGF0dGVuZGFuY2U= LWJvcmRlcg== IGFkZHJlc3Npbmc= w6pu IExldg== IGJhc2g= YmVuY2g= Q3JlZGVudGlhbHM= U3BhY2luZw== KG9m X1JFU0VU aWd1b3Vz IGNydWVs IGNyb3NzZWQ= IGxldXI= IEdvbGY= b3JyZWN0 IHBhY2tldHM= IERhdGFTZXQ= IHBhcnRseQ== U0VRVUVOVElBTA== IGluZGljYXRpb24= IFNhbHQ= YWNpYQ== ICopOwo= CWluZm8= IFZpZXdCYWc= b256 IGVkaXRvcmlhbA== IEFyZW5h IHNpcg== X1N0YXRpYw== KHNvY2tldA== c3U= Y2hvb3Nl Lm1vbnRo Lk15 MDk2 w6lyaQ== O2ZvbnQ= ZG9lcw== IGNvbnZlcnRlcg== IHNhbHY= IGxy IGluZmx1ZW5jZWQ= KGZlYXR1cmU= IFF1ZWVucw== bGV0dA== X01PTg== JmFtcA== VG91Y2hhYmxlT3BhY2l0eQ== T0ZG IG1ldGFib2w= KGl0ZXI= IHZpdGFtaW4= IElORElSRUNU YXV0b20= X3B1YmxpYw== IGFkanVzdG1lbnQ= IHNwZWNpYWxpemVk d2luZG93cw== LmFkZEFsbA== IGFjY29yZGluZ2x5 IEpPcHRpb25QYW5l IGNlbGxzcGFjaW5n IHF1YWQ= IGNyZWVw IG91dGxldHM= fWApCg== IHByaWVzdA== X1RIUkVBRA== IE1hcng= IEJ5VmFs IGN1YWw= 6Z2i IHRlbXBvcmFyaWx5 QW5u a2VsZXRvbg== 5aU= IExPQw== YXVlcg== ZGVyaXZl IGJlaGF2aW9ycw== YXNlbmFtZQ== IENlbnR1cnk= IGhvcnJpYmxl TUVTUw== X0xpc3Q= d2Vp UGF0 IENob2ljZQ== X0ZST00= CWxpbmU= Lmludm9rZQ== LkJvdHRvbQ== IG5vd2hlcmU= LiIKCgoK X2V4cG9ydA== IHN0cnVnZ2xlZA== LkFwcGVhcmFuY2U= IEpCdXR0b24= IEplcmVteQ== KFtb IGtpY2tlZA== bWFyc2hhbA== c3RhZmY= ZXNpdHk= IHF1aXo= X2VmZmVjdA== IH0pKTsKCg== bWVs YmFubmVy IFBJTg== IGludmVudGlvbg== IGNvbnNvbGlk IG9wcw== IEJldHdlZW4= amFjaw== ZXJuYXRpb25hbA== IHNhY3JpZmljZQ== YWdhdGlvbg== IEpveQ== IGFtZW5kbWVudA== IFNvbGQ= IHByaXNvbmVycw== 0LDQvdC90Ys= RG9jdW1lbnRz KV0pCg== dXN0ZWQ= IExpbmVhckxheW91dA== b3Nv X0VN LnNlbGY= Lk1pZGRsZQ== KS8v IFwn IGZ1Y2tlZA== IE11cnJheQ== IHByb2ZvdW5k X0VMRU1FTlQ= dWx0YQ== aWxlcnM= cG9ydGZvbGlv SnVuZQ== dGNw bW9kaWZpZWQ= IFRyYWNl IEtlbA== YWx5emVy KT0+ IFJlcGFpcg== X0JF QnJhbmQ= dWFydA== cHJldmlldw== IGluaXRpYXRpdmVz cnVubmluZw== YmFuZw== CXVwZGF0ZQ== IENvYWNo UmljaA== IHlvdXR1YmU= IHJpdHVhbA== YXBwYQ== IFJvYmluc29u cHJlY2lzaW9u Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== PVtdCg== IGNlbGVicmF0ZWQ= T1RP IGluY2x1c2lvbg== SlA= JzsNCg0K IG5vdGFibGU= KF8u TWFuYWdlZA== IGd1aWRlcw== Jm5ic3A= YXRlZFJvdXRl IEFkanVzdA== IGNvbG9yZWQ= X3Njb3Jlcw== IFRlc2xh X3Byb2dyZXNz Lmluc3Q= Wydf LmZsYWdz IGZjbG9zZQ== X09QRVI= xbx5 X25vdGU= IHRyYW5zZ2VuZGVy 5ZU= UklQVA== IGFic2VudA== IGFtZXQ= IG9wZXJhbmQ= 66k= IGhvb2Q= dG9Mb3dlckNhc2U= YXZv IENpcmN1aXQ= IExpbmQ= LS19fQo= PW0= IHN1cHByZXNz IE1BUA== aWFuZw== LWFkbWlu IHNpZGViYXI= IEJ1 IEhleA== LEY= IFNpZ25hbA== IHRyYW5zcGFyZW5jeQ== IEZlZGVyYXRpb24= L1Y= UmVx IHB1bHNl IHRlbmRz TnVtYmVycw== JSc= IGRlcG9ydA== ZGF0YXM= X1VJTlQ= X3RyYQ== b2tv ICI/ Y29tcGV0 c29sZXRl dW5kcnk= IG92ZXJsYXA= fWAsCg== Lmx5 X3N1bW1hcnk= IExvc3Q= LkNlbnRlcg== IGRpc2FiaWxpdHk= LlNlcmlhbGl6YXRpb24= IGdlb20= ID86 IFdv IHNoaXBwZWQ= guaVsA== IHVnbHk= IGV4Y2l0ZW1lbnQ= IGV4dGVyaW9y IGNoZWNrb3V0 IGt1cg== LEQ= IEFsYXNrYQ== IHN5bnRoZXRpYw== IEJ1ZGdldA== IFN1YnNjcmliZQ== ICYK yJlp IFl1 CXF1ZXJ5 fS4K IHRyYWdlZA== YXNzZW4= IGFjY29tbW9kYXRpb24= IHBoeXNpY2lhbg== IHJlbmFtZWQ= IHRpZGFr esSF IG1pbnVz bnljaA== MDk3 X0VYQ0VQVElPTg== dGhyZWFkcw== IHRpcmU= X2NyZWF0ZWQ= ZW5zdXJl IHdvcnRoeQ== IGV4Y3VzZQ== IGNsb3Ro LnBhcmVudE5vZGU= L3BsYXRmb3Jt IFVGQw== IEd0aw== dW5ueQ== IGdpYnQ= a2VsZXk= aHVt KHR4 CWRldg== IG91dGZpdA== ZG9vcnM= IGZvbg== aWN1dA== dm9sYXRpbGU= IGhvbW9zZXg= TWF4aW11bQ== IGV4cGVuZA== IH0pOwoKCg== RXE= b25kZXJz ZGVwYXJ0bWVudA== IFBoeXNpY3M= In0pOwo= IHBhcmFk LlN0cg== IHNlbGU= SUZJRUQ= IGRlbGl2ZXJz aXZhbg== IHJlc3BvbnNpYmlsaXRpZXM= IGFkdm9jYXRlcw== 6LU= IFJJRA== LnBhcmFtZXRlcnM= TWV0cmljcw== cm9uaWNz IFVJVGFibGVWaWV3Q2VsbA== QWJzb2x1dGU= aXBzZQ== eWx1bQ== TUxFbGVtZW50 X1ZBTElE PHRpdGxl RGxn cGFjZXM= IHN5bmRyb21l YmVhbnM= X2RhdGFiYXNl b3ppbGxh IE1lZw== REJH IGx1Yg== QmFnQ29uc3RyYWludHM= YWJhZA== IHByb2plY3RlZA== X0JZVEU= LlNpemVG c3RyZWV0 CgoKCgoKCgoKCg== IExPU1M= IGRpcmVjdG9ycw== L25ld3M= IG51cnNpbmc= IERvbmU= LkhUVFA= ZGlzY291bnQ= IFJvdA== VG9NYW55 IGVuYWJsaW5n IGF1c3Np b3N0YQ== ICAgICAgICAgICAgICAgIA0K 6L29 IGhlbGljb3B0 IEluc2lkZQ== 5L+h5oGv aXNwZXI= IEFsbGFo QVJDSEFS IHJvbGxz Q29tcGFyZQ== WFA= SW5kZXhPZg== U1VN IGFzc3VyZWQ= IFBoeXNpY2Fs RW5kcG9pbnQ= Lkdsb2JhbA== LmRldGFpbA== IHRoZWZ0 Lmp1cGl0ZXI= IGh1bW9y LlJlbmRlcg== QWxleA== LmNhcA== IGJ1ZmZlcnM= IGRpc3Bvc2U= dGlvbg== LnByZXNlbnQ= emVs LFA= IGRlc3BlcmF0ZQ== LmdldENvbHVtbg== IHR3aW4= 7JY= LmNhbg== IGZsZWU= IElyYW5pYW4= IHN0aWNreQ== IFVUQw== TFQ= Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v IGxpY2Vuc2luZw== X1BPSU5U IE1hcHM= IGxvbA== PW1vZGVscw== LXRhYg== IE5hc2g= X2xvZ2dlcg== dG9yY2g= IENPTlNFUVVFTlRJQUw= Tm90RW1wdHk= L3JlYWN0 IHBm IGFzc2VydGlvbg== IHN1YnNlcXVlbnRseQ== X2Nhbg== IHBhbmRlbWlj b2d1ZQ== IisK X2VudA== X1BhcmFt LgoKCgoKCgoK UmVzZWFyY2g= Q2FwdHVyZQ== IGJlbG92ZWQ= ZGVt IGV4dHJhY3RlZA== IGZpZ2h0cw== RVJD KGF1dGg= cG9zaXRpb25z IHJldmVyc2Vk KHN0YWNr IF8p dXRvZmY= X2Zsb3c= 54K5 KEdhbWU= IGV4Y2x1ZGVk IENTVg== Y2c= IFRpdGFu cGF1c2U= IGNlcmNh IGR1bXBzdGVy TGVzcw== IGtvdGxpbng= YXN0ZXJ4bWw= IHBvaW50ZXJz IGZsb3dz IFR1bg== IE1haW5BY3Rpdml0eQ== IGRpc2NyZXQ= IGNvbWJpbmF0aW9ucw== dmlzaXQ= X2JpbmQ= b290aW5n ZGF0ZXI= X2xvb2t1cA== Lm5pbw== IHN3ZWF0 IFJk IHNjaWVudGlzdA== IFBpeGVs QE5nTW9kdWxl UGxheWluZw== IHVuZm9sZA== VHJhbnNsYXRl IExhd3JlbmNl IEZJWE1F QmlsbA== IFJJR0hU IHdoZXJldmVy IG9vaw== dmlkZW5jZQ== IF1dOw== IFNraWxs dW5pc3Rk IPCfmYI= IGZlbWFsZXM= LS0pCg== jrflj5Y= IEZyZWQ= T3ZlcmFsbA== 2YI= IGVzc2VuY2U= IHRoZXJlYnk= IHdvdW5kZWQ= IERPV04= bGVzc29u dGV4dHVyZQ== Um91bmQ= IGF1dG9tYXRlZA== INCh IFVwZGF0ZXM= IHNoYWRl cHVibGlzaA== IEdlYXI= PWxhbWJkYQ== IGxldmVy KSsi aGlsbA== IHJhZGFy cnlpbmc= ICIpLg== ZmlsbGVk IGxpbmV1cA== IGRs IHdvcmtzcGFjZQ== Vm8= X2R0 67I= X0l0ZW0= TlNVUkw= LnZlcmlmeQ== IEhhd2FpaQ== R29k TWFyY2g= IFvigKZd IHBlbG8= dXJpb3Vz IFBpdHRzYnVyZ2g= Lkl0 Q2xlYW4= Plw8Xg== IGlvcw== c291bmQ= Il07 IGZyZWVk cm90dGxl IExvd2Vy W2NvdW50 5Z0= IHBhbGU= IFdheW5l ZWFydGg= X2NhdGVnb3JpZXM= VUNL Lm1ldGFkYXRh IHN1bW1vbg== SE9NRQ== 0L7Qu9GM0Lc= IG1hbnVmYWN0dXJlZA== IGRvY2s= IGNvbXBldGl0b3Jz X01PREVM b2tpYQ== IEhleQ== zr8= IGJhY2t3YXJk IFBPU1M= cm9wYQ== IGNyaQ== X09CSg== VHJhbnNwb3J0 LWhpZ2g= IGVyb3Rpaw== X3Nsb3Q= IGFydGlj X2ZyYW1ld29yaw== LXNlcmlm IFNxbERiVHlwZQ== Jyko KyIv IHdvcmU= U2ls IHN0b3Jpbmc= IFBoYXNl dWFudA== IGJ1bXA= aW5obw== IGRpZ24= IGJhY2tz cXE= KGhhc2g= IGdlbw== IHRlbmRlcg== TG9nbw== ISkK IE1Y IEFydGh1cg== ZXNzb2E= X0No IGJlZHJvb21z PSIjIj48 IHRocm9hdA== aW5zaWM= LmludGVnZXI= IHByaW1pdGl2ZQ== VHJ1dGh5 IGZhY2lsaXRhdGU= IGNyZWF0aXZpdHk= IEROUw== IGdyYQ== dWV6 IGNvdW50bGVzcw== IFBvbGFuZA== J00= IERpc3Q= IHZlc3Q= IGNlcnRpZmljYXRpb24= 4buR aGVsZA== ZXh0ZW5zaW9ucw== KHN0YXRpYw== IGdyYWRlcw== IFViZXI= 44Gf IFtdKQo= ZGF0b3M= IGdldERhdGE= IENoYXJn IEJT Lm1pY3Jvc29mdA== LnZpZGVv LmRpcmVjdGlvbg== LT57Jw== bHVh YXBlc3Q= IGJvaWxlcg== ZXJlaw== IGRlY2lkZXM= Lmphcg== SVND IFdvcmRz KENPTg== RU1QTEFURQ== cmVlemU= c2hvdHM= YXBwcw== dW50ZWQ= LnNldE5hbWU= Ojo8 LWJvbGQ= 6rI= 5a+G TG9uZ3JpZ2h0YXJyb3c= IHVuZmFpcg== IGVhcm5pbmc= IHNoZWxm VVJFTUVOVA== IGlkbGU= X01FTlU= LkN1c3RvbQ== QUdFUg== LSI= X3N3aXRjaA== YmVjYXVzZQ== KXZpZXc= bWFyZQ== X2NvbmRpdGlvbg== IFN0YXJ0aW5n TXZj KHByZQ== ZHVtcA== X0xPQ0s= YXRldGltZQ== LmNhbGxiYWNr IENlcg== b3BvbA== aWJyYXJ5 IHJlc2VydmF0aW9u CQkJCQkJCQo= bGVjdG9y Z3JhZHVhdGU= IGdlbmVyb3Vz IGlvbg== cmljYW8= bXE= X2NvbXBsZXRl KGN1cnNvcg== IEZvcm1Db250cm9s OmNlbnRlcg== IHN1YnN0aXR1dGU= IFBsYW5uaW5n IHBlbnNpb24= IHJlY29tbWVuZGF0aW9u IFRhZ3M= IGdlZg== IGFsYnVtcw== IHdhc2hpbmc= cm9j IHRyYWlucw== YXRpbmdz IGV4cG9uZW50 YWNrYmFy LWxu w6Fn LkRhdGFBbm5vdGF0aW9ucw== IEVJRg== IE1hbGF5c2lh CVBPUlQ= b251cw== IGNsZXZlcg== IHBldQ== PgoKCgo= IEFyZ3VtZW50cw== IGRlYnVnZ2luZw== KHJpZ2h0 J0Q= Y29tcHV0ZQ== IGZpbmVzdA== T1JBR0U= IHNwZWN0YWN1bGFy cGhyYXNl IGluZGlh IGxlZ2VuZGFyeQ== YmlydGg= IGNvbXBvc2l0ZQ== IGdyb3dz IFRE IGVwaWQ= IGxhdW5jaGluZw== XV1b TWludXRlcw== IENoYQ== IGNsZWFuZWQ= IHdpdG5lc3Nlcw== dWthbg== CVR5cGU= IGhhYmU= cGFyYWdyYXBo IEpQYW5lbA== IEhhbm4= IHZhcmllZA== IFBva2Vtb24= IE1VU1Q= 5Yqo LnZpc2liaWxpdHk= b3B1cA== Xls= LmV4cGFuZA== ICInLA== LmZhc3RlcnhtbA== X2F1dG8= IFNoZWV0 bWFya2Vy UGFyY2Vs ZXdz IFN0cmF0ZWd5 LW1ha2luZw== IHVudmU= IHRyYWlsaW5n IGNsaWNrcw== IEdldENvbXBvbmVudA== CWNvbnRlbnQ= SUdFTkNF RVJORUw= TlNNdXRhYmxlQXJyYXk= IGJyZWF0 IGhhcm1mdWw= tog= IGJlc2lkZXM= IGJvcmluZw== IGJydXRhbA== dmFuZw== KHBhcnNl cXVpY2s= IHB5dGVzdA== IHN3aXRjaGluZw== KCldCg== IOyE TEVS CWZvbnQ= IG5ldHQ= KV0KCg== KC9c 5p6c dG9BcnJheQ== IGJyZWVk IENBUg== IFdlYXBvbg== QWJz dG90 IHNldE5hbWU= YXB0aXZl IDos IGVzY2FwZWQ= b3JkZW4= IFByaQ== dGh1bWJuYWls IGRlc2NyaXB0aW9ucw== L3N0eWxlcw== IFBDSQ== IGFscGhhYmV0 YXN0aWNzZWFyY2g= Tk9URQ== IGNpYWxpcw== IEdyaWZm IHBvcnF1ZQ== IHByb3RlaW5z cGxheXM= IHN0YXRpbmc= IGltYWdpbmF0aW9u IGZhY2lhbA== IE1lY2hhbg== IGFycmFuZ2Vk X3VzZWQ= IGFycmFuZ2VtZW50cw== IFBpcGU= aG9zdG5hbWU= IHByb3ZpbmM= VGl0 LkZsYXRTdHlsZQ== IFNwbGl0 IExvYWRlcg== LmNj IGNsaW5pYw== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGJha2luZw== IEVOVA== bmVhdGg= 44CBCgo= QU5F LkVudGl0eUZyYW1ld29ya0NvcmU= YXBwZXJz Lmlj IE5nTW9kdWxl IEZPUk0= ICc7 LXByb2ZpdA== aHc= ZW5lbXk= IEV5ZQ== IGNhdXRpb24= dG93bg== IHVyZ2Vk IEppbW15 eW5jaHJvbm91cw== LXNpemVk bWFraW5n LHs= XScs X09iamVjdA== YWhvbWE= IGFjdGl2aXN0 SU5WQUw= IENvbW1lcmNpYWw= IE9ybGFuZG8= KHRhYg== INio QWxnb3JpdGht IGhlcml0YWdl R2V0TWFwcGluZw== IGZhaWx1cmVz cmlvcw== YXRpdmE= IHRldA== IGNhcnBldA== KFo= dGhyZWU= IGRpc2Nsb3N1cmU= LkVSUk9S X2NhbGxlZA== IGRpYWw= IG9jY2FzaW9uYWw= LkVycg== IGZ1bmNpb24= Y2FmZm9sZA== IHJlbGVhc2luZw== 77yJCgo= X1ZhbHVl IFZhcmk= eWVsbG93 IHN0cnVnZ2xlcw== LmNhbA== IERha290YQ== CWNsb3Nl IHNhbmR3aWNo IGFuYWx5dGljcw== ICoqKQ== JiM= IEpvcw== IHBhc3NpdmU= QVRUUg== VGhyb3dhYmxl IE11bg== IFVpbnQ= KGRpc3Bvc2luZw== YXJhaw== IExlYWRlcnM= IGFmZmVjdGluZw== IGl0ZW1WaWV3 IGVjb25vbWljcw== ZnY= 4LmA LnJi IE92ZXJhbGw= IHdlYWx0aHk= IGV2b2x2ZWQ= bmRh IEh1cw== cmVzdHJpY3Q= dW1lbg== IEFncmljdWx0 IQoKCg== IGV4cGlyZXM= IHNwb2tlc3BlcnNvbg== aW50ZXJ2YWw= IMOi IHF1ZWVu KG5pbA== aW5nbw== SGVhcA== 2Y4= IGNvbXBsYWlu U3lt IENsb25l IFJ1 IFdJTEw= IENyeXN0YWw= L2NvbnRlbnQ= aW5nZW4= b2ludG1lbnQ= TGFzdE5hbWU= YXZpY29u IElCTQ== IERpbWVuc2lvbg== YW5o aWNpcGFudHM= IEFubmU= LnByb2dyZXNz IGFsZ28= b2JpbA== IFZvaWNl IEZF IGdsaQ== IHZlZA== IHByZXZlbnRz XENvbHVtbg== IGZvbGs= ZXR0aQ== IG1u IENMQVNT IGRpc3BsYXlpbmc= IEts IEZlcnI= ZHV0bw== Lmli IGRhZG9z J25hbWU= LXNwYWNl IGl0YWxpYW4= IGludmVyc2U= IGRlbnNl dXRlcg== IElFbnVtZXJhdG9y LXNpZ24= IG5hdGlvbndpZGU= IHBlcnNvbmE= IHNvbHZlZA== IGRyYW1hdGljYWxseQ== TG9nb3V0 IGdyYXY= IGFuYWx5c2Vz b2xsbw== IGxhbXA= LnRlYW0= IEVyb3Q= PVsi IGRhbmNpbmc= ID8+Lw== IGNhdGVy ZmZl IFNoYQ== IEJvcw== IFJFUVVJUkU= IE1vbnN0ZXI= IFJC IElERQ== IHN1aXRz IGZvcm1EYXRh KHRoZXRh IHNwYXRpYWw= PU5VTEw= IFNxbENvbm5lY3Rpb24= IOA= IFZlbmV6 IE1vcm5pbmc= IHB1YmxpY2F0aW9ucw== IE5PTklORlJJTkdFTUVOVA== Zmlyc3ROYW1l dWRz V291bGQ= X0hFQUQ= IGludmVzdGVk c3RhYmxl ZnJlZA== IGNvbW1hbmRlcg== U0VT 4oCUYQ== YW5jaGU= IE1vdmVtZW50 67M= U3VpdGU= IGp1cmlzZGljdGlvbg== 66as IEJldGg= alF1ZXJ5 IElzYQ== IGRlbnRhbA== LCo= IExpbWl0 aWxpYXRpb24= PSJ7 YmFzdA== IHR1cmI= aXN5 T09L IGFkdm9jYXRl aW1hZw== TEVDVElPTg== 0LvRjA== KGNhdGVnb3J5 LmRlYw== IHVuaXF1 X3Nu IGF0dHJhY3RlZA== IMOJ IFJ1bm5pbmc= X2VkZ2Vz IERpc2FibGU= X0FT 5Zu+ IG5ldHdvcmtpbmc= X2JyYW5jaA== SGF2aW5n dG9CZVRydXRoeQ== R0k= IGNhbXBz c2Vw LXBhcnQ= ICkKCgoKCgoKCg== dXN0cmFsaWE= IFJlcG9ydHM= cml0bw== IHdhaXN0 X3BsdXM= IFdX LXBlcnNvbg== QXByaWw= IHNhcg== LnRhcg== IGFncmljdWx0dXJhbA== dGlj IHRjcA== IHNldFZhbHVl YWdlbnRv IEFwcGU= cGlsZXI= Q0FERQ== IGFuY2hl YXRjaGVy IGNvbWljcw== IGxicw== X3NlZ21lbnQ= J109JA== aXR0ZXJz aWNoZXI= R0lORQ== IHV0aWxpemU= IEN1cnNvcg== X2V4cHJlc3Npb24= IGRhZw== PGxvbmc= IHJoeXRo 5o+Q IGNvbnN1bHRhdGlvbg== WWV0 IikpCgo= X01BQw== Y291bGQ= ICdcXA== IFZv CWh0dHA= IGdz cGhlcg== LWdyaWQ= SmFtZXM= SnVs IHNjaG9u IHRlbnNvcmZsb3c= IExPR0dFUg== YW1hcw== IHNjaXB5 IGNvbnZpY3Rpb24= LmFn IGFkbWluaXN0cmF0b3I= KSl7DQo= IG51bg== Imdyb3Vw UG9y IG51cnNl ZXhwcmVzc2lvbg== YWt5 IEhlYXZ5 Lm9wdA== LmdldEFsbA== IG92ZXJs LyIs X2NvdW50cnk= 544= IEdFTkVS X3JvdXRl IERhbA== wrQ= b2xvYWQ= IHVuY29tZm9ydGFibGU= KG1lbnU= IGhvc3RuYW1l JyIpOwo= IGNhbGN1bGF0aW9ucw== LWNsaWNr IHByb3RlY3RpdmU= 44Kv X0Zvcm0= dW5ncw== QWN0dWFs bWY= IFByb2Nlc3Npbmc= IEludmVudG9yeQ== KG1hdHJpeA== YXBwcm9wcmlhdGU= d2Vn aWph IGNocg== IHJpZmxl LXdzag== a2Fy IGluZGVwZW5kZW50bHk= SU9T IGNvbnNpc3RlbmN5 dm4= L3N5c3RlbQ== IENoYW5nZXM= IGV4cG9zZQ== aWNpZW50cw== IHJlbGF0ZQ== CW5leHQ= 6Kg= dWRlcw== IGdsYXNzZXM= RlhNTA== Li4uLi4u IFBkZg== IGFwcHJvdmU= IHtc IGV4aXN0ZQ== KSko QVJFTlQ= 0L7Qvw== IExhdGVzdA== IE5pZ2VyaWE= LkludGVyZmFjZXM= IHJlbW92ZXM= RW5lbXk= IGVuZm9yY2U= dmVydHM= CXBvcw== X3RleHR1cmU= V0FSRA== IElOQ0lERU5U KGNvbnRhaW5lcg== IGRlZmVuZGluZw== IFJY IEhvb2s= YnJpcw== IEZsYXNr R3JheQ== LikK dmlzaWJpbGl0eQ== IFJlZGlyZWN0VG9BY3Rpb24= ZXJyYWw= X2VsZW0= IHJlc29u ZnJvbnRlbmQ= X3ZhcmlhYmxlcw== YXRlcmlh ICsi YXZlbGVk UklY IGRlZmljaXQ= X0NoZWNr WVlZWQ== VG9PbmU= c3B5 IHVuaXRlZA== ZW5kZW50 IHBvZGU= 44GM Q0FU KGZtdA== IEJvbnVz IHJlY2s= wro= TW9kdWxlcw== IHZhY3V1bQ== UmFkaW8= IERBTUFHRQ== UGVu IFBhcmtlcg== OzsK IFJlYWxseQ== X25lZw== cGVuZGluZw== IG5vbWluZWU= IENhdGVnb3JpZXM= IFVsdHJh V2VhcG9u IGRlZmVuZGVy SXNz IEdlbmRlcg== IERyZXNz IGltcHJpc29u IGJhbmtydXB0 aW1lbnNpb25hbA== UEhB IFN0cmF0ZWc= IFBST0ZJVFM= IHBhdHJp Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= ZGVsZWdhdGU= IGZvclN0YXRl IGRldm90ZWQ= X21ha2U= IHRlcnJvcmlzdHM= IFNuYXA= X25hdg== IEFB IElhbg== CWFwcA== UGxhY2VtZW50 X2hkcg== PEs= IHNhbmc= c3Ryb2tl LVE= Pjw/PQ== LW1vZGVs YXZhbmE= IFdhbmc= ICAgICAgICAgICAgIAo= CWluaXQ= IGVudHJlcHJlbmV1cg== YXRpdm8= TG92ZQ== LW92ZXI= V2F0ZXI= IG1vZHM= Z2VuY2U= VGVjaG4= Png= LlRhc2s= bW9uZXk= aWJhYmE= J30pOwo= IFNwZWNpZmlj IExpbmVhcg== X09QVA== SGFzaENvZGU= KFBsYXllcg== LkNvbnRhaW5zS2V5 IGNvbGxhcHNlZA== dHJhbnNwYXJlbnQ= X1JBTkdF Vmlld2Vy KGNmZw== IHNvcnRpbmc= IGluZmVjdGVk IE5hY2g= IGFjY29tbW9kYXRl LmVsZW1lbnRz X1BBUlQ= IFNleHk= PWdldA== KHllYXI= IHhocg== Ol0= b3dza2k= IHN1bW1hcg== IMK/ IGludGU= IHdvcmtmbG93 IFRhaXdhbg== dmVyc2lvbnM= 5Y+R IHN1cnByaXNpbmdseQ== IG9wdGljYWw= IHByb2Nlcw== IGRpc2FncmVl IG51ZXZv IENBTQ== c29ydGVk bGVhc2Vz aXN0bGU= SWRlbnQ= CWV2ZW50 amVjdGVk Q2h1bms= VmFycw== LnByb3ZpZGVy IHByb2NlZWRpbmdz IGluY2x1c2l2ZQ== IGFydHdvcms= ZW5kYW50cw== 77yaCg== c2Vlbg== IGxpZw== IG1ha2Vycw== X2Z1bg== IGxlbmd0aHM= UGF0aFZhcmlhYmxl W2l0ZW0= 4Li1 RGVhZA== RkZGRkZG IFVyYmFu dXBsZXM= aWNoZW4= KG51bGxwdHI= LnNwZWM= LFN5c3RlbQ== VVJBVElPTg== KGpvYg== 5byP IHRyYWNrZXI= xZk= IE1S IFNRTGl0ZQ== IGR0bw== IDs7Cg== IG1pbnQ= IEludHJvZHVjdGlvbg== Y2Fv IHF1ZXN0aW9uZWQ= IGZpdHRlZA== cmV2aXNpb24= c3E= IG1pZw== X3VuaXRz X2FzeW5j IGZsaWNr fSk7CgoK IG5vdHJl fWAs RmlsdGVycw== IG11bmRv X2RheXM= IGZybQ== dXRj IHZhbHM= ZXdpZHRo IEdlbmVyYXRvcg== IEFydGlzdA== IElEcw== IEFydGljbGVz cmVhdGVy IENvbXBvbmVudEZpeHR1cmU= Lj0= IHJvdQ== LW5v LmJ1a2tpdA== ZWdn IERpZmY= YXRpY3M= 0YPRhw== 4oCUCgo= IENoYXJsb3R0ZQ== Ynll IH0pOw0KDQo= IFZpaw== IEJyb3c= IGx2 IEdpYg== LXdpbmc= R0xJR0VOQ0U= KEls IEVuZ2luZWVy LldhaXQ= IFBpY3R1cmVz IHJoZXQ= IHRoZXJtYWw= IHByYWlzZQ== PD4oKTsKCg== IFNwaWRlcg== UGF1c2U= IEJha2Vy IHNsb3dlcg== IH1dCg== X2VucXVldWU= IGRpc2FwcGVhcmVk IFRpY2tldA== SU5VWA== X0xPQ0FM 0LDRgdGB QEluamVjdGFibGU= Y29tbXVuaXR5 R2VzdHVyZVJlY29nbml6ZXI= 5Zu9 IHNjYWxlcw== IC0o Lycr IFNpdA== IGV4ZWN1dGl2ZXM= YXJkaW5n IGFkdmVycw== IGJhY2t3YXJkcw== CWNvbnRleHQ= IEhhbXA= IFBG IERlY2s= IENyYWln QW1lcmljYW4= IGJlbGw= IHByb2w= dWZlbg== IHJuZw== YXJzaGFs IFNpbXBseQ== Zmlyc3RuYW1l c2hvcmU= SnVseQ== IG1vcnRhbGl0eQ== IOKGkgoK SGVscGVycw== IGJlbmNobWFyaw== ZW1hZGU= IG9yZ2FuaXNhdGlvbnM= Lmdzb24= IFRleHRGaWVsZA== IGNpdmlsaWFucw== LkFycmF5cw== IE1pc3Npc3NpcHBp IGludGVybWVkaWF0ZQ== Z2V0VXNlcg== X2NsdXN0ZXI= UmVsYXRpdmU= Zm9yZWlnbg== LnF1ZXJ5U2VsZWN0b3JBbGw= Rm9yZWlnbktleQ== IHJlYXNvbmFibHk= LS0tLS0tLS0tCg== Q2FyZHM= IEthbQ== IFRob3I= IHJvbGxlcg== LWVsZW1lbnQ= IEN1cnJlbmN5 ZGRpZQ== QUxMWQ== IFJB IHBlcm1ldA== YWFhYQ== IGhvbWV3b3Jr IFZpdA== IG1vbGQ= IEZlcg== W3N0YXJ0 IHN0YXRpc3RpY2Fs IHNjYXJ5 X0hPTUU= LkJlZ2lu Q29uc3RydWN0 b2dlbmlj IERFQUxJTkdT IHRhbWJpw6lu aXhvbg== LmluZA== YWNyZQ== IHRyYW5zZm9ybXM= IE5hcA== LkJsb2Nr dXNzaWE= cGlyYXRpb24= dWxlbnQ= IGNlaWw= Q2xhdXNl bmFpcmU= VEVT IG5lYXQ= U1RE IFJlZ0V4cA== cGVyZm9ybQ== Oik= IHVuaW9ucw== IHN1YmxpYw== IHdpbmRz bG9hdGluZw== Z2xpY2g= IHBhZ2luYXRpb24= U2tpbGw= QXBwbHk= IE9wZXJhdG9y aXN0b2dyYW0= IHF1YWxpdGllcw== Q3Jvc3M= IGRlY29t XSwi IEp1YW4= Lm1vZGFs LkNoaWxk IFJvZ2Vy U1RJVFVURQ== OkNHUmVjdE1ha2U= YWxldHRl IHN0YQ== YXNpZGU= IGJsdXI= IFdh aWZldGltZQ== cmVlZA== Y29udHJvbHM= IGJpbnM= INC/0L7Quw== Ki8sCg== VUlT IFJvdQ== IERlbW8= LWF3ZXNvbWU= IENoYWlu IGhhc3Rh IEJhcnQ= LktFWQ== IHZlbmRvcnM= bm9mb2xsb3c= IERlc3Q= X2J1aWxkZXI= IGFyZ3Vlcw== X2Fuc3dlcg== Z290bw== IFJFU1VMVA== IE1PTg== IHBvZGVy b29ucw== X0NBU0U= IHJlcGxpYw== IGZpbmFuY2luZw== IERBVEU= Y2Vybg== X3RyYWNr dGllcw== L2xvZ28= IE5FR0xJR0VOQ0U= Z2V0VHlwZQ== PlQ= YmV0 Z2lybA== IElOQ0lERU5UQUw= LXNpdGU= LnRyaWdnZXI= IExpc2E= X2lucHV0cw== IHJlbGF0aXZlcw== TG9nZ2VkSW4= Q29uZmlndXJl SUs= LmFjY2VwdA== UmVzdW1l IERyYWZ0 ICo+KA== IFdB ZWRpYW4= ZXJuZXNz IExheW91dEluZmxhdGVy Ki8NCg0K b3RoeQ== IG9ibGlnYXRpb24= U3Vic2NyaWJl IHRodW1ibmFpbA== ZXhpc3Q= IGluc2lzdGVk IFVJQ29sbGVjdGlvblZpZXc= IEFuZ3VsYXI= IHRhYmxldHM= IEltcGFjdA== 44CNCgo= YWhv IGNoYXJhY3RlcmlzdGlj Z2Q= ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= b3VydA== YC4= QXBwcm8= Q29vcmRpbmF0ZQ== UmVtZW1iZXI= IG1hcmluZQ== XT09Jw== IEFkbWluaXN0cmF0b3I= LmdldERlZmF1bHQ= IGZvcmdvdA== IFN0cnVjdHVyZQ== VnVl YXJzaW5n bW9tZW50 a3c= X2N1cnNvcg== QXR0YWNr IGF0aGxldGlj IGRpYWdub3NlZA== IGVuZGU= 5Yig6Zmk SG91c2U= IFBBUkFN IHdpa2k= IE9wcA== IGNvbnNlcnZhdGlvbg== IHNuZA== X3RlbQ== c3Vic3Ry IENhcGU= LnNpbQ== VVRJT04= YW5hbg== 4oCZdW4= IGd5 LXdvcms= IGNvbXBlbGxpbmc= PScj CXN1Yg== IGRpcmVjdG9yaWVz 7Yq4 IHRvdWNoZXM= b3V0aW5lcw== LkNvbGxlY3Rpb24= c2NoZWR1bGU= LmxhdA== IERvY3RyaW5l Q0FB IFJlZmVy IHNoaWZ0cw== IGxpa2VsaWhvb2Q= cHJldGVy IEZlbWFsZQ== IGludGVyY2VwdA== IGxvdQ== 55m7 IHJ1Zw== IENyb3du ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= LXByb2R1Y3Q= IHByb21wdGVk dW5nbGU= ZG9ja2Vy IFR1 IFVuaXF1ZQ== X0Vycm9y dWxvcw== IOKE IChg R2V0dGluZw== X3NjYWw= IEVuaA== w7x0 IHN1c3RhaW5lZA== IHBhdGNoZXM= IHByb3NwZXI= IEdhemE= X2xpZ2h0 IGluY29ucw== LS0tLS0tLS0K CQkgICAgICA= U0Y= Q04= OiI7Cg== IENvbGxpbnM= KCop IGNvbXBpbGF0aW9u J10NCg== IGNvbnNlcXVlbmNl LC4uLg== IGRt IEJMT0NL Q2x1c3Rlcg== IHNraQ== KGFyZ2M= VHVwbGU= IGpvaW5z IFNoZXJpZmY= V2Fy aW5kaQ== IGNvbW1lbnRlZA== SE9TVA== IGludml0YXRpb24= YXBhbmVzZQ== IHBlcm1pdHM= cHJlY2VkZW50ZWQ= X3pvbmU= IEFteQ== X1JE TWluaW11bQ== IGludm9jYXRpb24= LmVuYWJsZQ== aWNodGVu LW93bmVk Imlk X1BPSU5URVI= RmFj IHNwZWNpZmljYXRpb25z IG5vbWluYXRpb24= IGdw PCg= IHJvYm90cw== IEplcnJ5 IGhvbGRlcnM= IHdhbmQ= Y21z IH0pKQo= LlRvYXN0 IElMaXN0 QmFzZWQ= em9vbQ== L3N0eWxl IEJlY2s= TWVu IGNvbnRyaWJ1dGluZw== IHVuZG8= IE9I IGFkZE9iamVjdA== IGVpZ2Vu c2lnbnVw 6ZSZ IGRpc3RhbnQ= UEFSQVRPUg== IE1hcmk= IG3DoQ== RW1w w7Nz IOyImA== ZXZ0 K2o= cGFyaw== IFN0YXk= IER1bg== IHNveQ== PiU= YXppbmVz IHRpZW1wbw== KG1l cHJlc2VudA== LlRoaXM= IGVkaXRvcnM= RklFTEQ= Lldvcms= IFVuaXZlcnNl IGRydW5r LnRpbWVy IGFsdGVyZWQ= IE5hcg== 66Cl LkFjdGl2ZQ== aWRvcg== 560= LmRlbHRhVGltZQ== IGF3a3dhcmQ= JnF1b3Q= IFNhZmFyaQ== IHRyaWNrcw== TUVOVFM= ZGl2aXNpb24= IHZhcnlpbmc= IEhpZ2h3YXk= IHBob3RvZ3JhcGhlcg== IFN0ZXdhcnQ= IGxhc3Rpbmc= LlByZQ== LmFtYXpvbmF3cw== IEx1Y2s= LkRlc2NyaXB0aW9u IE5heg== bmVn IGPDsw== PDwiXA== IFN1cnY= IFVuYw== UmVjaXBl LkJvcmRlclN0eWxl IG1vZGlmaWNhdGlvbnM= LWF0 QVRGT1JN aGRy YWtv IHN1YmxpY2Vuc2U= IEp1bXA= IGJlaW0= IE1hbmhhdHRhbg== LmJvb2w= X2h3 0YLRjA== Qmlu IGdhdGV3YXk= IiI6 IFVJUw== OiIr LWRlZg== IFJlZ3VsYXI= L3Rlc3Rpbmc= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= c3RyaW5nc3RyZWFt IGRpc3Bhcg== IG1vYmls LXJlYWQ= IEFkYXB0ZXI= IENoYW1waW9ucw== IHNjaGVkdWxlcg== IGtpbGxz IE11bHRpcGxl aXJyb3I= IGdvZHM= QURP YWt0ZQ== IFVzdWFyaW8= LmNpcmN1bGFy IHJlY2VwdA== IEV4cHI= IGVsZGVybHk= IG5pY2VseQ== IGJlc3Rl V2FudA== IGNsYXNzaWNhbA== LnNwcml0ZQ== b2JqYw== IE1hc29u IHNpc3RlbWE= LkJsYWNr ZXNv IFplaXQ= IGRpdmlk IGVudGVycw== X3N1YmplY3Q= IFBsYW5ldA== Lndhcm5pbmc= IEdyYW0= X3Rva2Vucw== IGhvdXNlaG9sZHM= X2N1c3RvbWVy dXNlck5hbWU= Y3Jvc3M= IHBpb25l IGFzc2lzdHM= X1NN aWJv IGxveWFs IHVzZWxlc3M= I2VsaWY= IFVsdGltYXRl Q29tZQ== Z2Vs IGRpY2g= eHl6 aWtlbA== b2JyYQ== X3NjYW4= IEludGVyaW9y IE5pY2U= IHBsYWM= CXRhcmdldA== IHZpcmFs YXNzbw== KCkv dW5kZQ== IEFkb2Jl T3M= dmlzaXRlZA== IE9X IEZlZWQ= IFNlcXVlbmNl IG1hbmFnZXM= aW5zb24= IExvdWlzaWFuYQ== e30p IEhhYg== IExE IGJpcA== cHJpdGVz KGVsZW0= LmhpYmVybmF0ZQ== w6lsw6k= IG9obmU= X3RyYW5zYWN0aW9u IGFubnVuY2k= UHVibGlzaGVk IEhvbmRh IFRhbQ== IFBhY2tldA== X3NlbGVjdG9y IGNoYWxsZW5nZWQ= UHJvY2Vzc2luZw== LWhvdmVy IHRyYWluZXI= X2NhbmNlbA== IE5TRGljdGlvbmFyeQ== YWJyaWM= IE1MUw== X3NlbnNvcg== IHNocmluaw== IEZY dGhyZXNob2xk CUhY LW1hcms= YC5g U2NoZW1l KGZ1bGw= X3dyaXRlcg== IFN5cw== IGZsZWQ= IENpbg== LXdpZGdldA== IFByZXZpb3Vz R2VuZGVy X3F1ZXN0aW9u RmVlZA== IHNjcnV0 KHByZWZpeA== 44CC44CC IGluZmVjdGlvbnM= UGFydHM= IGhpZXJhcmNoeQ== X0RFTEVURQ== IFBhdGllbnQ= X3BheQ== IHByb21vdGVk IOyL IGNpdmlsaWFu IGFncmljdWx0dXJl IFBpZWNl IHN0YW5jZQ== dXRzY2hl QXNzaWdu LkFDVElPTg== Rmln X3JhZGl1cw== IFN5bmM= ZHVjZXI= ZmFpbHVyZQ== ZW5zZWQ= cHRpbWU= Qk0= X2RhdGV0aW1l cXVpdm8= UVVFVUU= 6ICF QXBwZWFy IHN1bW1pdA== OnZvaWQ= IHZpbmU= 6K6k b25uZQ== X1RSQU5T LmdyZWVu X2Nj IGh1bmdyeQ== ICI+ KCkpOw0KDQo= RXh0cmFjdA== aXplbnM= IHNvbHZlcg== Tm90aWZ5 IGVuZ2xpc2g= IFNob3BwaW5n aW50ZXJmYWNlcw== UkVR IGlsbGVn IFVJSW1hZ2VWaWV3 IGRpc2Nvbm5lY3Q= IFVudGls IENvbnNlcnZhdGl2ZQ== QENvbHVtbg== IHNoaWZ0ZWQ= IDoNCg== IGZpY2g= IGRsYQ== IHNob2U= IiksDQo= dWxhcml0eQ== X1JFU1A= V2VhdGhlcg== VUlBcHBsaWNhdGlvbg== Lml0ZXJhdG9y IGFnaW5n LlBhcmVudA== b3dpZQ== KGVxdWFs IENvbnY= L2RlZmF1bHQ= IG1lYXN1cmluZw== LnByZXY= LklzVmFsaWQ= LkZhdA== IHPEgw== a2V5d29yZHM= d2l0aG91dA== IHNvdmVyZQ== IGV4Y2hhbmdlcw== IG1lbHQ= IGlzbGFuZHM= IEludGVncg== IGp1bXBpbmc= IGdsZQ== IGpvdXJuYWxpc20= IGRhdGVk TG9jYWxpemVk IFJlZnJlc2g= UGFydGljbGU= IGFh IFNUUklDVA== IGJvZA== LlByb2Nlc3M= X0FVVE8= IFB1Ymxpc2hlZA== ZXZlcnk= IHRlY2hub2xvZ2ljYWw= bHN4 IGlycml0 QWRkaXRpb25hbA== IGRlbGltaXRlcg== X2xhbmd1YWdl LWFyZWE= Ym95cw== IFR1YmU= IHdhdA== IG1lY2hhbmljcw== X293bmVy U3BlbGw= IFN0b3JpZXM= LkFwcGVuZExpbmU= VGFibGVWaWV3 aGVt c3RpY2s= b2xsb3dlcg== SUZG IFVW b2xsaXNpb24= U1VC IGNvbXBhcmFibGU= IGRvbmRl c2FsZXM= bGx2bQ== IH1dLAo= T1RUT00= IFB1cnBvc2U= TGFi IGludGVydmlld2Vk b2lz YXNpbA== LnNldElk IEluc3RydWN0aW9u LS0+ IE1vZGlmaWVk YXRpb25hbGx5 IE1lZXRpbmc= 6K+v I3JlZ2lvbg== IHJvdXRpbmc= LmZvY3Vz IFlvdXRo PEQ= IE5hZw== Y29udGFjdHM= IGZvcm1pbmc= IG1pZQ== JyxbJy4uLw== IEJQ IGFwcGV0 IFRlYWNoZXI= IFRQ IGFubnVhbGx5 b3V0ZWRFdmVudEFyZ3M= IFNwZWFrZXI= IHJlbmFtZQ== Q0ZH KCIvLw== 5o6l L3BhZ2Vz IHByw6lz IFNwZWxs LkFsbG93 IElOVEVSUlU= ICgj 4oCZCgo= X0dlbmVyaWM= Lmltc2hvdw== X3RpbQ== LWZhY2U= KCYo YXRpbnVt IHJldm9sdXRpb25hcnk= IEhvdXJz cmFpbg== IGFueXRpbWU= IGFiYg== LmpzcA== U2Nyb2xsVmlldw== IFRydXRo IGFudGljaXBhdGVk IGFjY2VudA== LmNoZWNrZWQ= IHNwZWNpZmllcw== IGNhZg== IGNlbGxwYWRkaW5n IGNvb2tlZA== IEh1Z2g= cGVlaw== X1JBVEU= IGRvcm0= Lw0K SVZJVFk= LkNvbnRyb2xsZXI= KHBhcnQ= LmNvbnN0cmFpbnQ= IGludmFzaW9u TU9WRQ== IGdsdWM= bGVuYW1l IGFtZW4= ZW5nbGlzaA== IFN3aXR6ZXJsYW5k IjsKCgo= cGVzdA== LmNvbGxlY3Q= Tmli IERpY3Q= IEVtYg== KHN1YmplY3Q= IG91dHJhZ2U= IGRlY2lkaW5n IHNlbnRlbmNlZA== RmVjaGE= IkE= IHF1ZXI= IGZvbnRGYW1pbHk= IHF1YWRy LVk= X0NBQ0hF IGFuYWx5emVk IGdhaW5pbmc= IEFnYWluc3Q= IFNvdWw= dGF1 IGxpZ2h0d2VpZ2h0 IFRG IEVmZmVjdHM= LlR5cGVz LmFkZENsYXNz IHZlZ2Fu 6YE= Lici IEV4cGxvcmVy LmRldGVjdA== LnNoaWZ0 IG9ibGlnYXRpb25z bGFzdE5hbWU= IGFzc29jaWF0aW9ucw== IFRpbWVTcGFu dW50ZXI= IEZyZXNo Q29tcGF0aWJsZQ== UHVi aWRnZXM= Lm9wdGlvbg== dmFyaQ== Lmhhc2hDb2Rl IGdlYg== LnNlY3Rpb24= LW5vdA== IFN1Ym1pdA== VE4= cmVnaXN0cnk= X21lZGlh IG5hag== ZmZ0 IG1hdGU= LXRoaXJk IHBvY2tldHM= ZXN0YQ== IGJlbnQ= IE5vcmQ= IHJldGFpbGVycw== IE1vcnJpcw== LiIiIgoK V3Jvbmc= IMWb UmF5 LmVj IEJpbmQ= X0hBTkQ= KG5vbg== aXNWYWxpZA== IHNpbWlsYXJseQ== X0xJTUlU IGR5bmFtaWNz IGRpc3RpbmN0aW9u 44GG PE4= IG9ydGg= IFRveW90YQ== IEthdGU= IExT b3JpZQ== IFNwcmluZ3M= IGZyZWFr bGFzdG5hbWU= X01VTFQ= LXN0ZXA= Iig= QUREUg== IGVudGVydGFpbmluZw== X0NPTkY= IGRlY29kZWQ= IHN0cmVhaw== IHdhaXRlZA== IG5vdGlmaWVk cm9kdWNlZA== dmlzdWFs LkxheW91dFBhcmFtcw== 5rA= ZXNpYW4= Zml0cw== c3ByaW5n IEJlcm5pZQ== VXNlckRlZmF1bHRz IHBlZGVzdA== QXBwZWFyYW5jZQ== IFdpa2k= IE5PVElDRQ== IHNzaA== IGR1cmFudGU= IFppcA== xLFy IE5BVE8= IHR3ZWx2ZQ== IHJveWFs 77g= IG1lcmNoYW50 IEZ1cm5pdHVyZQ== J10pLAo= LFg= IGZvbGRlcnM= IEdhdGU= CWZ1bmM= cGljaw== X3VzdWFyaW8= IFZlcm0= bWVudGlvbg== dXJwb3Nl IGFsZXJ0cw== eGlvdXM= X3NpZw== IEZ1 ICg6 IGR1bWI= 5YWz IGFjY3VyYXRlbHk= 6YeN UkI= LXNjcmVlbg== IFZFUg== am91cg== IHJvbWFuY2U= dWNjZWVk LmNob2ljZQ== IGFkaXA= X2RpbXM= U2VyaWFsaXphYmxl 44KL LmpvYg== IHByb2c= dWNoYXI= IGdlbnRseQ== IFJTUw== aWN0dXJlZA== X0VOQUJMRUQ= CWxhYmVs YXdrcw== IEVuc3VyZQ== cmVtZW1iZXI= 7KCV IHRyYW5zbWl0 e3sk LlRyYW5zYWN0aW9u dXJzZQ== X3JlbGF0aXZl IHNpemVk IFhY IFByaW5jZXNz IExhcnJ5 IHByw7M= INGB0YLRgA== IHNpc3RlcnM= ZXN0cnVjdA== IGNoZWNrcG9pbnQ= Omxlbmd0aA== IENhcmxvcw== L2ljb24= X1RBUkdFVA== VG9rZW5z IHBhdGllbmNl IFNlbGVjdGVk cXR5 LnNob3dNZXNzYWdl IHdpbGRsaWZl IFByb3Bz Ym0= LWFycm93 IHBhcmNlbA== ZmlyZWJhc2U= IEJlbmphbWlu Y2Vzc28= LnRpbQ== IEdhcmM= LmFueQ== IEhPV0VWRVI= IEtv IGdyYWJiZWQ= X2ZyYW1lcw== IG9iamVjdEF0SW5kZXg= IEFEVklTRUQ= IHN1YnVy CUdM IH0pfQo= LWxlbmd0aA== 7Iuc IFBvdHRlcg== X2J1ZmY= Lmd1aQ== IEVuY29kaW5n RWxlY3Q= LW1lc3NhZ2U= IO+/vQ== IMiZaQ== IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbg== 0LDRhtC4 IG1pbmltaXpl IHJlc3BvbmRpbmc= JF9bJw== IEluZGl2aWR1YWw= w6Fj IElOVEVS IG1hc3R1cmI= IEJpbg== KCck 65Oc IG9wZW5seQ== ID48 IHVudG8= b2xvZ2ljYWxseQ== IE11bA== VklESUE= IHNsaW0= IENvbW1pc3Npb25lcg== KG9u IHVuZGVybmVhdGg= L2Ri dm90ZQ== KE1lc3NhZ2U= IFBvcGU= RGVmaW5lZA== IHN3aWZ0 dXJm IGFkYXB0ZWQ= U0VM IHJldmVudWVz IGRpdmluZQ== PXk= R3JhZGllbnQ= X2FjdA== IC8qITw= IHBvbHlnb24= IEZEQQ== IENhcnI= YXRhYmxlcw== KHN0ZG91dA== IHJlZnJpZ2Vy IGNvb3JkaW4= YXZvcml0ZXM= 0YjQuA== IGNvbXBhc3Npb24= IFBPU1NJQklMSVRZ LXNlY29uZGFyeQ== dXJhY3k= IGNvbXByb21pc2U= X0FW X29z IGJlc2lkZQ== g50= IGxu LnBsdWdpbnM= Q2FwYWNpdHk= YWxhaA== LmJpbg== IENSQw== X2JhbGFuY2U= IGZsZXhEaXJlY3Rpb24= IGFtYml0 IG5pY2tuYW1l IEZvcmNlcw== Q0xF IFNoZWxs IHNhaWw= IFdyaXRlcg== IEFsaWNl ZHc= IEluZGlhbnM= IE1hcnNoYWxs X1NSQw== IG5vcm1hbGl6ZWQ= IEphZw== 44KS emVpdA== cnBj w61j LmlubGluZQ== IHRyYXZlcnM= X251bWVyaWM= IHV0aWxpdGllcw== IGV2YWM= SU5QVVQ= CXJlZ2lzdGVy TVg= IENhbXBiZWxs IGRhdGFzZXRz IGRlbWFuZGVk IGluaXRpYWxTdGF0ZQ== Z2Fu IGVp VW5leHBlY3RlZA== LXdlYg== dHJhaXQ= LFk= IFRvZGQ= IHNrZWxldG9u IG9wdGltaXpl 56ys IFVwb24= IFN0T2JqZWN0 IGFwbGlj Lic8Lw== QUND YWxvdXM= IGhhc2hDb2Rl IEJpYg== SU5BTA== IGludmlzaWJsZQ== IGhldGVy IHNhZmVy fS8v LnRoZW1l Lm5hdmlnYXRpb25Db250cm9sbGVy X21lc2g= c2tpbGw= IFZpb2w= wrI= IEVPRg== IEtp eW1tZXRyaWM= IG1heGxlbmd0aA== xaM= ZnJpZW5kcw== IEV2YW5z IGxlbW9u ICgu U2xpZGU= IFRoYWlsYW5k IENhbm4= IGFtZW5k IGNpcg== IHNpbGx5 ZXNpbWFs X3BpYw== cHJvY2Vzc29y SmF2YVNjcmlwdA== IGV2aWRlbnQ= X2Rp PlA= dnJvbg== LlVO IHBhaW50ZXI= aXphcnJl IGxhdg== IHBvbQ== cHJlZw== PWZ1bmN0aW9u KHNlcmlhbA== aWZpY2E= dW1pbmc= 5Zyw 44GC LW9w VUNI IEhlbmQ= LnByb3BUeXBlcw== IHlv IHJvdXRpbmVz IGNhcmluZw== U2Vt IHJlc2VydmVz IHByaW9yaXRpZXM= cmVkaXRz SVNUUg== Q29udGVudFR5cGU= IFNjaHc= L21lZGlh IGVzdHI= IGNsaW1iaW5n LXdlZWs= Y2hlcmNoZQ== c2Vuc29y VG9BcnJheQ== IE1vbnRyZWFs IGNsb3Vkcw== IEluamVjdGFibGU= IFJpY2U= IHByb3BhZ2FuZGE= X3Byb3ZpZGVy IGluZG9vcg== IGluYXVn IGRpcGxvbQ== IG1lc3NhZ2luZw== X211dA== 5aaC IGt3 T05T YXJpYW5z UlBD KV0NCg== LXJheQ== IFNvcg== bWFsbA== IG1hcmtldHBsYWNl IHZ0aw== TWE= b2dhbg== aWdp IHNwb25zb3JlZA== IERhbmk= LlNFVkVS PicuJA== bXVsdGlwYXJ0 IFdvbA== IHRhYmxlTmFtZQ== IFVzZXJuYW1l QmFja2dyb3VuZENvbG9y IGZyaWdodA== X0VNQUlM U2VwdGVtYmVy X3ZhbHM= b3BpYQ== IHNwb3R0ZWQ= LUNo IGRhdGFTb3VyY2U= LyIK 0LXQutGC IFJlcXVlc3RNZXRob2Q= IFJlcGxhY2U= LWRv YWhu IFBoRA== XS4KCg== Tk9O Z2VtZW50 IFRocg== IHF1aWV0bHk= IHRvcnR1cmU= IHRlYXM= IENZ IGF0cg== ZGV2ZWxvcG1lbnQ= LWRldGFpbA== IGxpZ2h0ZXI= IGFyZ3Vpbmc= IGRlc2VydmVz IGN1cnJpY3VsdW0= X0NPTlRFWFQ= xYJ5 SElURQ== CUlE L3VwbG9hZHM= IHRpdHM= cmVv X2Ryb3A= LlVURg== IHBpY2t1cA== IGdyb2Nlcnk= IFB1cmU= IGVhc2llc3Q= UGhpbA== LmZlYXR1cmU= KCIq IGludmVzdG9y dG9r IGphcg== TG9z 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU LnF1ZXVl LXNwZWVk TWFs dW1ibHI= IENPTlNU IEhSRVNVTFQ= IERhbmNl KGZpbGVQYXRo IGF0dHJpYnV0ZWQ= 4KWN IEJ1bmQ= Y29pbnM= IHPDo28= IHBpcg== cGVyc29uYWw= IHByZWxpbQ== IHByb3Bvc2U= IFRM XV0p IFN1YnNjcmlwdGlvbg== IEtyZQ== LGxlbg== LkZpcnN0T3JEZWZhdWx0 KS0t X3Byb2R1Y3Rz LkdldEJ5dGVz U2hpcA== IGVuY3J5cHQ= IFNH IE15c3Q= aGly IGl0ZXJhdGU= IGludGVuZA== Lm1vY2tpdG8= IGNoYXB0ZXJz KGFuZ2xl IFZsYWQ= 6K6+ Jy4KCg== UmVzcG9uc2VCb2R5 IEFiZA== ZGVhbA== IGJhcnJpZXJz LW91dGxpbmU= YmlsbA== IEZhbGxz X3NlY29uZA== LmluY2x1ZGU= LmNlaWw= IG9jY3VwYXRpb24= cGhvbnk= Lm1vdmVUbw== IEplbm5pZmVy QVNURVI= OyI+PA== IEVuYWJsZWQ= IHRlcm1pbmF0ZQ== IElv bGF0aW9ucw== IFRIRU9SWQ== IGVhcmxpZXN0 IHJhY2s= IFNjYXI= c2hha2U= Y2hpcA== IHV2 IGFsbGlhbmNl 0L/QuNGB IEdPT0RT emlvbmU= IFZJ IHst IGZpbHRlcmluZw== IG1pc2Nvbg== LkRvY2tTdHlsZQ== IGJ1c2g= IGp1bms= 5ow= IFFVRQ== IGhvb2tz IGZpcm13YXJl IG1pZGRsZXdhcmU= ZGlj IE9ha2xhbmQ= IGFycml2ZXM= UGF5bG9hZA== cGl4ZWw= XXw= IHN0YXJ0RGF0ZQ== LlBSTw== X2F1ZGlv IG1pZGZpZWxk aWdpZGJvZHk= IFN3aXNz IENsaXA= IER1bXA= IFRleHRCb3g= IGdlaA== eWllbGQ= b2Rz IHJlZmVyZW5kdW0= QmFja2VuZA== IENyZWFt IGRvbWluYXRlZA== IEFyY2hpdmU= IHJpZGVycw== LnByZXBhcmVTdGF0ZW1lbnQ= IHF1YW5kbw== IGNoZWY= d2lraQ== aW5lbA== YW1wbGluZw== KCJcXA== IHNhZw== X3Byb3h5 44GV cGRv LmdldEVsZW1lbnRzQnlUYWdOYW1l IGRlbW9uc3RyYXRpb24= IE5QQw== IGFyY2hpdm8= ZW5kYW5jZQ== IGVmZmljaWVudGx5 KGFjdHVhbA== LnRhYmxlVmlldw== IG11c2g= IGJlYXJz X3RocmVhZHM= amFz YWh1bg== IG5ldXJhbA== IGRlc2lnbmluZw== IEdEUA== IGxpZnRlZA== 55uu IEpvaW50 IEluY2x1ZGU= IEdpYW50cw== IHdpdGhkcmF3YWw= IFJlbnQ= bmF0aXZl IFNlZWs= Z3Jlc3Npb24= X0NQVQ== XFM= IFNoaWVsZA== IHNvbGlj IGJvb20= eWVjdG8= IG1hbnVmYWN0dXJl IOKAiw== IGJib3g= IGVhcnRocXU= b2xsZWN0b3Jz OkAiJQ== IGxvb3Bz SmU= YWxraW5n IFdoYXRz IEJveXM= LmJvb2s= QVJHRQ== X3BpeGVs IHN1c3BlY3Rz zrk= dXNw IEJNVw== aWVjZXM= KHBlcnNvbg== 5byA 6bs= IFBvZGNhc3Q= IGJvdQ== KEl0ZW0= w7s= KElucHV0 SHR0cEdldA== IGJ1cmc= KV4= Qk9BUkQ= Ki8s IGd1bHA= IEJlbm4= IGRlY2tz LnN0YXR1c0NvZGU= IGFjdXRl IGh1Zw== dWd1 IHBsZWQ= LCIl aGFwZQ== INC30LDQvw== IE1haW5l LnJlYWw= IGRhbGFt IE1pbm9y LkZsb2F0 ZGlzcA== IHRs IGVuY291bnQ= PT4k IGZn dGVlcw== IFJlY29tbQ== w6Rs IGNoZW1pc3RyeQ== QmxvY2tz T0lE IGZvcmV4 IEFwcGVuZA== IHsq IFN1cHBseQ== Q0dGbG9hdA== KGJs IGF0ZQ== YWRvcmE= IGd1c3Q= QXNzb2Np Pi4K RkVUQ0g= LnNlcmlhbA== d2lkZ2V0cw== YXJkbGVzcw== aWVmcw== X0ZVTEw= ZXJuZXRlcw== IFByZWQ= 2K0= 5LqL dWJlcm5ldGVz IExhdXJh IGxhYmVsZWQ= SGlnaGxpZ2h0 IGFubm95aW5n L3VwZGF0ZQ== KGRlc2NyaXB0aW9u IGludGltaWQ= JGM= IikpKQo= LkFQ IFtdKg== IEVYSVQ= Lkhvc3Q= IE9QRU4= LnNlbmRNZXNzYWdl X2NhbWVyYQ== X3RpbGU= IHRoZXJt b25vbW91cw== IGRpc2Fkdg== IG5hYXI= aW5kZXhPZg== IFBQ LnByb3RvY29s QUZF IHRleHR1cmVz IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj dW1iYWk= LnN0YXRz IEdF IGll IFNURA== IE1hbm4= LnJlZmxlY3Q= S0I= IGRpdmU= Lndhdg== LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t L3NldHRpbmdz LmxpZmVjeWNsZQ== IGRhdWdodGVycw== b3J1cw== dWJlcg== TklORw== c3RyaQ== IFRpcA== IHpu IHN3aXRjaGVk aW5ldA== dWZmeQ== IFRyYW5zcG9ydGF0aW9u KGNvbmY= ZnJpY2E= IFhM IExlYWQ= X3BlcmNlbnQ= PE1hcA== IHRocnVzdA== b3Ji aWtr IHRyYXVtYQ== QWNjZXNzb3I= IEZpdA== IFN0cmluZ0J1ZmZlcg== ZXhwbA== KHNjcmVlbg== IGF1ZGllbmNlcw== IE9QVElPTg== X3JvdW5k W25vZGU= YmVo LT5fXw== cGVybWlzc2lvbnM= IERldGVybWluZQ== Lk1hbg== IGFkdmFuY2Vz LklucHV0U3RyZWFt IHN0cm9uZ2VzdA== IGVCYXk= ICMt IGRpcm5hbWU= IFNNUw== IG1lZGljYXRpb25z IGFtZW5kZWQ= IGNodXJjaGVz IEltcGVyaWFs JHJvdw== IE1hZGlzb24= IEluc3A= IGFmZmFpcg== IHBzeWNob2xvZ3k= dmg= IHNldmVyaXR5 4oCQ IHN0cmlwcw== QUg= dmVydGlzaW5n IGNvbnNl SU1BR0U= IFN0YXRz CXNj LkN1cnNvcg== IGZyZWV6ZQ== c3Nvbg== KHhtbA== IFN1c2Fu LnRpbGU= ZWRlZA== ICAgIAkJCQ== dWVsbGU= IE1pdGNoZWxs YmFzZWQ= T3BlcmFuZA== veaVsA== IEZG CXN0cmNweQ== b3VuY2Vz aWxkbw== LmV4ZWN1dGVRdWVyeQ== IGFwcHJvYWNoaW5n IFNldmVu IG51dHM= IHJpYw== YXNzaWdubWVudA== IGNhbGN1bGF0b3I= IE11cnBoeQ== IEJvdQ== 7YQ= IGJ1dHQ= IHRpY2tz UHJvamVjdHM= aWxpYg== LnRleHRDb2xvcg== bW92 X2xvZ28= KHRlbXBsYXRl IElOSVQ= IGltYWdlVmlldw== c2NyaXB0aW9ucw== T1JJVFk= Q29uc3VtZXI= IHVucHJlY2VkZW50ZWQ= IHRvdXJpc3Q= IGJyb24= IGNvbnRyYWN0b3I= IGxpY2VuY2U= IE5hbQ== 5q8= KHRyYW5zZm9ybQ== X0FUVA== UHJlZg== IEdhbQ== IHZlc3NlbHM= IGhhdg== TGF0ZXI= LlRvTG93ZXI= IHVybHM= IGJyZWFrZG93bg== IHBlbmFsdGllcw== IGZvc3Rlcg== IFVF IGNsdWU= Y29tZWQ= 5ZCN56ew LW1haW4= IHB0cw== IGNvdW50ZWQ= aWN0cw== L3Bvc3Q= IGdldGF0dHI= IHBpbmc= QU5DRUw= IHBlYw== 0YXQvtC0 YW50b20= IEJsdWVwcmludA== IEV2ZW50RW1pdHRlcg== IGzDpA== 5rI= IHN0cmF3 KGNvbXA= J3VuZQ== Pk4= LWNsaWVudA== ZXNNb2R1bGU= LWJhc2U= IHJldHJlYXQ= X3NpbXBsZQ== CQkJCQkJIA== ZmVl JykNCg0K Q29udHJvbEl0ZW0= IHN1YnNjcmliZXJz cGxlYXNl IEVmZg== IHBvdW5k IEJ5dGVz IFRlYQ== X2FjdGl2aXR5 IG1heGlt IG9wY29kZQ== QlNE LmNvbnN0YW50 O30= b21icmVz IGNhcmVlcnM= KS4KCgoK IHNwcmVhZGluZw== LWV4cGFuZGVk IE9yZA== YW1hcmlu IG1vYmlsaXR5 VW5mb3J0dW5hdGVseQ== YWtr Tkw= X3JlZGlyZWN0 IFBH IFNlbnNvcg== Ym9s dGFw X01FTU9SWQ== IFVJQWxlcnQ= cGxpdHVkZQ== V2Vic2l0ZQ== IExvZ28= bG92ZQ== W2luZA== IGFsdG9nZXRoZXI= IHdvbmRlcmVk IGVzcGVy IExpYmVyYWw= IG9zcw== IGVsaXQ= IHN0aWZm b2RveA== X21lbnRpb25z IERvdWdsYXM= X3BpZA== IENL IGluaXRXaXRoRnJhbWU= LmJsb2c= cGtn YW5naGFp UVVJUkVE dXU= IG1rZGly QVRBTA== IHVuaA== aW5jZXM= c3Ro IGh5cG90aGVzaXM= IGNhdGE= IFRC IENsYXI= IHByZWRlY2Vzcw== IHNpdHVhdGVk LXdvcmxk KSkv IGhlYWRsaW5lcw== LnN0YXQ= IG91dGJyZWFr c3BhdGg= X0ZMQUdT IFNlcnZsZXRFeGNlcHRpb24= U3Vu RlJPTQ== IERpcg== 44O744O744O7 X2Nvb3Jk IE9wdGlt TW9uaXRvcg== LmJpdA== WFhY IHRvZGFz ZmVsZA== 0YDQuA== aW1pcg== IHBvbGl0aWNhbGx5 IG1vbGVjdWxhcg== IHRyYWRlZA== IHt7JA== IFN3ZWRpc2g= ICdALw== X1JFQUw= IHdhcmVob3VzZQ== dG9kYXk= LEw= b3Jw PHNlY3Rpb24= LWJy eW1l IFVzZXJTZXJ2aWNl IGxpYmVydHk= IG1vbWVudG8= KEltYWdl PHNpemU= U2No IGpvZw== aW9sb2d5 YXJlbnRseQ== IHF1YW50dW0= IEFidQ== IHJpbQ== IG1hbmE= Rm9udFNpemU= QnVpbGRpbmc= c3RhaXJz QUlMQUJMRQ== ICYn IHNlY3Q= IHNpZ2g= KGJhdGNo LklDb250YWluZXI= cG9sbA== IENvcnBz zrU= YXJ1 IEtheQ== LnJhbmdl X2NsaWNrZWQ= IFJvYmVydHM= Lk5ldHdvcms= ZmluaXNo LU1hbg== IGNvbGxlZ2Vz IEZpbmU= IikpLAo= ZmlsbQ== IHJlbWluZGVk IGdlc3R1cmU= b3V0aWw= IHRocmVhZGluZw== IG9iamV0 IHRvdXJz YWN0aXZhdGVk Lm1rZGly PXVzZXI= IHJlZGU= ZsO8 X1NZU1RFTQ== cHY= IGNvbmdy IG1hc3Nhc2pl IHByYWN0aXRpb24= VW5pdmVyc2l0eQ== IHRhYmluZGV4 0Jg= U2V0cw== IGNvdW50aWVz Z3Vlc3Q= ZmFu IHdvcmRlbg== LmRp 0L3QsNGH wr8= aWdEZWNpbWFs IHNob3Jl IGfDtg== IHJlcGFpcnM= IGhlbHBlcnM= IGNlbnRlcmVk T0xMT1c= IG1hcFN0YXRlVG9Qcm9wcw== IGNlbnRz PEE= IGV4cGVjdGF0aW9u T2N0b2Jlcg== IGJnY29sb3I= Y2FsZXM= LkNPTg== IFZlbA== IGNyeWluZw== LXNlYXNvbg== IGZ1bmN0aW9uaW5n X0xPQ0FUSU9O w7xzcw== YmVyeQ== UGFyYQ== b21pbmF0b3I= LWxl IGV0aGljYWw= aGFzaHRhZ3M= ZW1wbG8= IG7Dum1lcm8= KGFjdGl2aXR5 LlN0b3A= LnN0cmZ0aW1l SUxE IHRvZQ== CU5vZGU= IikNCg0K IFB1ZXJ0bw== IGV4ZWN1dGluZw== IEdVSUQ= IG9wcG9zaW5n YWxwaA== IGV4aGliaXQ= X2ZsYXNo IG1laWxsZQ== IGpzb25PYmplY3Q= SGVybw== YWludGVk X0RPTQ== IHdpbA== IHNsb3Bl IG3DpQ== IElyYXFp IG9yZ2FuaXpl CWpRdWVyeQ== SFVE c2hpbmU= Lndl IFNraWxscw== cG9uc29y IGNvbmNsdXNpb25z IHJlZm9ybXM= IHJlbHVjdA== bmFtZWQ= IE9saXZlcg== IC8vfQo= LWxvb2tpbmc= IGZvZw== IEhP IEZyaWVk IGluZXZpdGFibGU= IERhdGFHcmlkVmlldw== SG91cg== aWxsZXM= bG9naWNhbA== IGNvbm5lY3Rpdml0eQ== LnR3aWc= IEt5bGU= KGRzdA== LVNo IFN0dWRpb3M= KExldmVs LmpldA== X1BST1RP LWRlY29yYXRpb24= T1RIRVI= IHJlYWRpbHk= LlBhcmFtZXRlcg== IG11bHRpcGx5 IExJQg== YXJtZWQ= IHNvb25lcg== 5oQ= X0VT IGZvc3NpbA== IEFuYw== 4oCcVGhpcw== bG9kYXNo UHl0aG9u IGhpc3RvZ3JhbQ== d2VzdGVybg== IGluZmFudA== IGNvb3JkaW5hdG9y IG5pYg== Om0= IHJlc3BlY3RlZA== IGRlZmluaXQ= JlQ= X3BhZA== IFRyaWdnZXI= dGhhbA== IGltYWdlTmFtZWQ= IGJlYXRlbg== CXJj IFBhbGFjZQ== IGhhemFyZA== IGlzb2xhdGlvbg== X3Jj Y29udHJl T1VUUFVU IHJlaWdu IFBsYXRl QVRFUw== IGZsdXg= IHBhY2tz LmdldFNlbGVjdGVk IHBhcnRpY2lwYXRlZA== IG5lZWRsZQ== LWRlcHRo Ojo6Ojo6 LWxhdw== aW5zcGFjZQ== b25pdG9y PW5v IEF0b21pYw== IEJyYWlu RWRpdGFibGU= LXNj cmVkZW50aWFs IFBlcnJ5 a2ll IC0tLS0tLS0tLS0K LnN0cm9rZQ== KEludGVudA== IHVuaXR5 dW1sYWg= RnVydGhlcg== IHByemU= IHPDuA== 44KK IFBST0NVUkVNRU5U IEhvdXNpbmc= IGF0dG9ybmV5cw== IGNvbXBvc2U= YXR0ZXJpbmc= IldoYXQ= ZHJhdWw= IHN0cmFpZ2h0Zm9yd2FyZA== SW5zdGFudA== LkpUZXh0RmllbGQ= IHRyYWRlcw== 0LvQsA== IHsh IGxhdGVseQ== SU1H IEFsZA== IElOTkVS IGNhcnRvb24= LlNvdXJjZQ== RkFMU0U= IGRvdWdo ZmVu KHJlY3Q= RGF0YVRhYmxl Tmljaw== IEJ1dHRlcg== cmVhZHM= X2NvbW1lbnRz RU5W IENvbm5lY3RpY3V0 LUZJUlNU CQkJICAgICA= YWNoaQ== Lk1zZw== cmVjdGlvbg== IHJlbGF4ZWQ= IHNoYWZ0 IGVm IEFkZGluZw== IGJyZWFjaA== IO+8mg== cmFtYQ== IGNvbmR1Y3Rpbmc= ICg7 KGds IENBVVNFRA== YXNoaQ== IEZMQUc= IENvbW1lcmNl IElOVEVHRVI= aG91cnM= IFNjaG9vbHM= IG51Y2xl QWdhaW4= cHJvag== IHNldmVudGg= RU1QTEFSWQ== KG1vY2s= J10sDQo= X1NQRUVE PmZhbHNl IHNwYQ== IE5lYXI= 7JU= IGludHJpZw== X21lbWJlcnM= d2F2ZQ== IGFuYWx5c3Rz X09T ZWRpbg== IEZyaQ== IHJldHJpZXZlZA== UmVndWxhcg== X29icw== RVhQT1JU Jyl9fSI= ImNsYXNz X18oKA== YnVja2V0 IHN0cm8= IFBhdGNo eXN0aWNr ZnVsbmVzcw== YXBvcw== RGE= CQkJCQkgICA= IGVucmljaA== dW5vcmRlcmVk aG9sZQ== Q29uZw== PFByb2R1Y3Q= IEN1cnQ= KHRoZQ== X2xvd2Vy IGF2b2lkaW5n IGJ1eno= IHZpYWJsZQ== dWJh LWlz YXJlbA== IGFjdGVk LWRldGFpbHM= 4LiH IFRoZW9yeQ== IFB1bg== IEFub255bW91cw== Li4uIgo= w6hyZXM= 5Y+v IFZpc2lvbg== X3NlbQ== YXNoYQ== IGNlbGVicml0eQ== IGVuZERhdGU= IHBvcHVsYXRl IGN1aXM= cXVhbnQ= Zmxvb3I= IGdsb2JhbGx5 IGNydWlzZQ== IFN0YW5sZXk= IGJpa2Vz LmdldENvbm5lY3Rpb24= IHBvb3JseQ== X290aGVy YW1waW5n LiIpOwoK b2Rp X0FETUlO LmNvbG9ycw== IEdhbWluZw== Pic7Cgo= U1RSVUNU UVI= SURz KGFyZ3VtZW50cw== X2F1eA== KEV2ZW50 X1BSSVZBVEU= IFRyZWs= IGRvd25sb2Fkcw== bXV0YWJsZQ== X1NUUlVDVA== KHd4 IGRvbWFpbnM= anNweA== IFZpYWdyYQ== Q29tbWFuZHM= SnM= LmNmZw== Q29udGVudFBhbmU= IEVkaXRUZXh0 4KWN4KQ= QXR0YWNo IEFSTQ== cG9zaXRpdmU= IEdlbmVyYXRlZA== IHNlaXplZA== PTo= IGVsZWN0cm9uaWNz IEFwcENvbXBvbmVudA== LycsCg== LmVxdWFsc0lnbm9yZUNhc2U= RG9jdHJpbmU= ZGlzaw== IFBvbGl0aWNhbA== Q0hP PEY= CWhlaWdodA== IEJ1Zw== Lmxl aWto IG1pbGxpc2Vjb25kcw== IGNvbnN0aXR1 bWFn Lm5s LXJhbmdl YW5nZ2Fs Jyxb cm9wb2xpdGFu IMOc IFVD LmRlc2M= LUxBU1Q= ZnN0cmVhbQ== aWJpbA== IGZpZXI= VkVSWQ== IOuz SVJU X1VJ KGFicw== IGtuZWVz IHJvb2tpZQ== IFZhYw== YXJlbmE= Y29tbWVuZA== LVw= IFNVQlNUSVRVVEU= U29mdA== IHBhcnRpcg== d2VhbHRo 6KaB KGRhdGFzZXQ= IENsaW1hdGU= LXNob3c= IHJlbGlhYmlsaXR5 X2NodW5r 5Luj X3N0b2Nr IEVYRU1QTEFSWQ== 77iP IHbDrQ== IHNtaWxlZA== IGRyaWxs LkZ1bmN0aW9u IFNJ IHJlZ3Jlc3Npb24= LVg= IEphcg== cHJlZg== CXN1Y2Nlc3M= IEhpdGxlcg== IGluc3RpbmN0 IGZlbW1lcw== IGxvdmVy PAo= IG11bHRpcGxpZXI= cmls UmVzaXpl IEF1dGhvcml6YXRpb24= IEthbg== RGlzcGF0Y2hUb1Byb3Bz IGNyb3Bz dG9rZW5z ZWNu ZW50aWFsbHk= IElOVEVSUlVQVElPTg== ZmFrZQ== VW5kZWZpbmVk IEFL IFRlc3RDYXNl IHJhYg== IHRvcnJlbnQ= IE90 QmFycw== IGxlY3R1cmU= IGVuam8= IHJlc3BvbmRz IGluZGV4ZWQ= T2ZXb3Jr X2NoYWlu KSktPg== IEJlYXV0eQ== IGA8 IHRvdWNoaW5n IHwtLQ== CWZsYWc= bm9ybWFsaXpl IHRyYXBwZWQ= IGVzdGFibGlzaGluZw== L2J1aWxk QUo= Znk= LXJlYWN0 YXZu UklQVElPTg== IGt1dA== IEZhc2hpb24= IEluZm9ybQ== Y3VyaXRpZXM= PGJ5dGU= IFVrcmFpbg== IHN1Zw== IGNvbnNpc3Rpbmc= b29kbGU= LmN0eA== LlRvTGlzdA== IGNvbW1lbnRhcnk= IHRyYW5zZmVycw== IG5vc3Q= aWhhZA== IFVwcGVy IGNvbmZ1c2luZw== bWlzc2luZw== LWNs IGJvdW5kaW5n IGNvbmdyZXNzaW9uYWw= IHJldmVhbGluZw== ZGg= cnVw IHRyZXM= cmVwZWF0 LAoKCgo= X3RhYw== IGV4cGVk R2lybA== aG9yaXpvbnRhbA== ICIuLi8uLi8uLi8= KG9wdGlvbg== IHdlaXRlcg== CXNxbA== ID0+ewo= IGdhcmxpYw== IHJlcHI= IHJlcGxpZXM= KHByb3A= IHNwaXJpdHM= IGluc3BpcmU= IGJhc2VtZW50 LnJlamVjdA== IGhpbnRz IHBvbGxpbmc= CSAK X3JhdGluZw== IGNhdGg= YXZpZXI= IGNvbXByZXNzZWQ= IFZT XSc= IGp1ZGljaWFs IFRyZW5k dHJhaW5pbmc= RVNUQU1Q b2duaXRpb24= xIE= U0VOVA== dmVudGlvbnM= IGNvbnN1bHRhbnQ= dW1waA== IHVzZXJTZXJ2aWNl LE5VTEw= a2g= RGVhcg== X0JBRA== aXRhdGlvbnM= IG1ldGFwaA== J8Op YW5kaXNl LWZvbnQ= LmNoYXJ0 IHNn X0NvbnRyb2xsZXI= LmpwZWc= IFVMT05H CWdhbWU= KHNz IE1hag== CWdv IFNhZA== IEJlcmc= IE1pbmU= UGFjaw== IHJlc2lzdGFudA== IFJPTQ== IHBlZw== IFN0YW5mb3Jk IFlhaG9v IHNjYWxlZA== IGxhbg== PVtd Ii8+PC8= IHBsb3Rz LioK IHRyYXZlbGVk IE9zY2Fy Vkw= IGxpbmtpbmc= IHRpcmVz ICcqJw== IEJ1ZmZlcmVk ZXJp ICoqKio= IG92ZXJsb29r Lk5vbg== IHLDqXM= IGVneQ== 5bCP IGF0dGFja2Vy CQkJCQkJCQkJCQkJCQkJ LnN5bmM= QVNDQURF R3JvdW5k IGRlY2F5 IFRvbg== IGpld2Vscnk= IGJ5cGFzcw== IG1lbWJy Uk5B PFN5c3RlbQ== IE1lZGljYXJl KG5ldA== b3Np SEI= REVD e0VJRg== X2ZpbGw= IHRyYXZlbGxpbmc= b2JzZXJ2ZXI= IGNvbnN1bHRpbmc= UkVBVA== UGhhc2U= KGlp IFNVTQ== Pg0NCg== IHN1ZA== CWJhY2tncm91bmQ= IHNjaG9sYXJz LW11dGVk YXLDoQ== ID09PT09 IF9fX18= Q3JlYXQ= ZW5ldmVy L3dw IFZQTg== RXJyb3JDb2Rl KV0sCg== KGJ1aWxkZXI= IEVuZW15 U2Vuc29y dXNh IHRyaWdnZXJz IHBsYXlvZmZz X1JFUQ== ICh+ IEJhcnJ5 IHBlcm1hbmVudGx5 IFJVTg== IGJ1cmU= LkZhdGFsZg== IGNoaWNr CXBhbmlj cHNp b2th 6YCJ Pls= IHVuZGVyc3RhbmRz IEp1bmlvcg== IElORk8= PW15c3FsaQ== dXN0YWlu LXNvdXJjZQ== c2Vydg== IENSRUFURQ== LmF1 IHNlbGxz ICAKICAK RXVyb3Bl enc= cHJlaA== IE5TQQ== IHh5 4Li0 IEJleW9uZA== SW5zdGVhZA== Tm9uUXVlcnk= IGFyaXNl IGF2b2lkZWQ= LmVtcGxhY2U= X21vZGVscw== fSksCg== IGhpZA== ICZf LnBvaW50cw== LmdldFdpZHRo LkV4ZWM= IC8vLy8= IFNlc3Npb25z Li4uXA== IENvbG9tYg== IGFjY2VsZXJhdGlvbg== cmVzdG9yZQ== IGlsZQ== b2JpYw== PE5vZGU= IERY IEJlc2lkZXM= LmFnZQ== IENvbnRhaW5z TmF0aW9uYWw= IEltcGxlbWVudGF0aW9u IGVmZmlj IFJN SHk= IFdlZGRpbmc= b2tpZXM= IHJlY3Vyc2l2ZQ== IHByb3NlY3V0b3Jz LlNlbGVjdGlvbg== IEZvcm11bGE= QmVlbkNhbGxlZA== W2lp IEZyYW4= IHRyYWdlZHk= X0ZFQVRVUkU= mag= Y29tcGFzcw== IEJo PwoKCg== LndyaXRlcg== IEhvdXI= RGJDb250ZXh0 aW92 YW1vbg== cmVwcg== 6YM= CWZp J11d IERyeQ== LnJv IE9ic2Vydg== 5qCH Rm9ybWVy IEJhbGFuY2U= CWpzb24= IHByenk= SVNT KHNvY2s= IExJTkU= IGRlY2U= IGFsbHk= IHRlbmRlbmN5 RnVu IHNjaGVtZXM= IGludGVydmVu 5piO IGFkdmVyc2U= cXVvdGVsZXY= IHNhY3JpZmlj X3NpZGU= IG11dGV4 QUdJQw== IG9jY3VycmluZw== IENvbW11bmljYXRpb24= dW1hcg== 57yW IFRyZWF0bWVudA== LnBlcnNvbg== IExD IGVjaA== KCgi IERpc2Vhc2U= w6Rk IEFa LkFjY291bnQ= IGNvbnRpbnVvdXNseQ== RU5ESU5H IFJFVFVSTg== LXN0cmluZw== LmZpbGVuYW1l c3ludGhlc2l6ZQ== UmVzcG9uZGVy KG9wdHM= cmVncw== IG51ZXN0 UGVlcg== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGdhdWdl IEtpbg== LnNjaGVtYQ== IGFycmFuZ2U= IEJsYWtl X1R5cGVJbmZv Q292ZXI= IEhhbXBzaGlyZQ== UGFwZXI= LWlubmVy dXRpbGl0eQ== IGNyb3Nzb3JpZ2lu Rk9S IGlnbm9yaW5n IERE YXZhbg== IHRyYWRpdGlvbnM= IGdldFN0cmluZw== IGV0aGljcw== IE1hdGVyaWFscw== REVTQw== IGVuenlt aW9sZXQ= IENoaXA= IE1jRG9uYWxk IG5lcnZl 54Q= Iild 5rGC IFN1Z2Fy X1NJTQ== anBlZw== IGRpc2NyZXRpb24= IFRO Ym92ZQ== IE1pbmltdW0= IEZvcm1Hcm91cA== IHdvcmtmb3JjZQ== IEV4ZWN1dGlvbg== ZXJyZXI= CSAgICAJ IHByZXNjcmliZWQ= LlRleHRBbGlnbg== T1BFTg== IFBC aW1pdHk= IEV4dGVybmFs wrBD IEFwcGxpY2F0aW9uQ29udHJvbGxlcg== IGJhcnI= aW1wbGljaXQ= X2RvdA== IENvbG9u Q09MT1I= LlByb2plY3Q= Kjwv LXhs IG9zYw== KHBhdHRlcm4= Jyl9Cg== c3VjY2Vzc2Z1bA== YWxvZw== U3R1ZGVudHM= XXN0cmluZw== YW50b24= YXR0aQ== Y2hlbWljYWw= LmluZg== KGRy OlVJQ29udHJvbFN0YXRl dG9JbnQ= XTwv 0LDQtdC8 IMW+ LkFjdGlvbkxpc3RlbmVy LlNFVkVSRQ== IFNhbHY= X1RSQU4= L2ludGVybmFs IHdlbGNvbWVk LmNvbW1lbnQ= bXV0YXRpb24= IEZBUQ== Lm9uZQ== IExBQg== In19 IFJvbA== aWV2ZWQ= IGFkdmVudHVyZXM= IGZ1bmVyYWw= IHNwb3VzZQ== KG9wZW4= IFJlYWR5 IHRvdXJpc20= YWRpbg== X2ZhY2U= 4oKB IG1pZ3JhbnRz IFB1cmNoYXNl Y29yZA== IE9VVFBVVA== KSkNCg0K U2VndWU= dGFicw== IGRvdHM= IG5haWw= Ym9ybmU= IGRlc2lyZXM= IHByZXZlbnRlZA== J109PQ== IHRpbWVseQ== SUNB U2Nhbm5lcg== IEx1Y2Fz IGdpdGh1Yg== J11bXQ== ZGlh Y29ub21pYw== IGRpZXNlcg== dW5kZXJz LkhhbmRsZXI= PyIs LmRhdGFi IGFkdmlzZQ== LmFuaW1hdGlvbg== IG92ZXJoZWFk IG9ic3RhY2xlcw== X2pvaW4= IG3DqQ== RmxhdA== LmRpc3Bvc2U= IEV4cGVjdGVk IGZsZXc= IGVtYm9k X3NsdWc= IG5hbWVseQ== IHdpdG5lc3NlZA== c29saWQ= LmxlZ2VuZA== UXVhbA== X3N1cmZhY2U= 44Op QW1lcmljYQ== IGFmZmlsaWF0ZXM= IFByb3M= X2V4dGVuc2lvbg== YmluZGluZw== U1RBTEw= LnJlYWR5 IGNvcHlpbmc= IEhlbmNl IGRpc2NvcmQ= X3NoaXA= UHJvcGVydHlOYW1l CQkgICAgICAgICAgIA== IGFjaGlldmluZw== IEJlYw== Wmlw U29tZXRpbWVz 44GL IGNvbnRyYQ== IHB1bmlzaA== IGluc3VsaW4= IGRpc2FwcGVhcg== X2VudW0= LmF1dA== IGhhc2F0dHI= YWZmZWN0ZWQ= c2hl JHRhYmxl a3Np IGxhY2tpbmc= IGRpc2NvdW50cw== U3RtdA== IEFyZ2VudGluYQ== IHVucGFjaw== IFJvdXRlZEV2ZW50QXJncw== ICc/ aW50ZXJvcA== IHNvZmE= IGR5bg== IEdyYWNl IGludGVncmF0ZQ== 2YM= IGRlbGF5cw== IEltcGxlbWVudA== UHJvb2Y= IGFwcGxpY2FudHM= IExlYXRoZXI= 7Ja0 IGVuam95YWJsZQ== U3Bpbm5lcg== L3o= IGZvYW0= IExhYm9yYXRvcnk= IHJlc2VhcmNoZXI= IENocmlzdGlhbml0eQ== IGN1c3RvbWl6ZQ== IGNpcGhlcg== IGRvZA== IHPDsw== QEVudGl0eQ== T05MWQ== aW52ZW50b3J5 IGNvbmNsdWRl IGN1ZW50YQ== IENvaGVu LWluY29tZQ== bWJI bWVudGF0aW9u IHZlcnc= dWRw QU1M LmNvbWJvQm94 Zmg= am9icw== RmlsZVN5bmM= IEJhcmJhcmE= IFNjYW4= Y3JlZW5zaG90 IE9ydGg= LnZpZXdEaWRMb2Fk IEFSUkFZ LEA= L2ludA== R2VuZXJhdGU= IGRlbW9uc3RyYXRlcw== IFplbmQ= 5YiX CXZvbGF0aWxl PXI= IGZt CWJ1ZmZlcg== ZW5hdGU= LkNvbWJpbmU= IG1pc2M= Y2hlbWFz IHB1cmVseQ== IGdsVmVydGV4 LlJlc3Q= IHJlY2FsbGVk IGZyZWVs IHNxdWU= VHJhY2tlcg== IFBocA== IERpc3RhbmNl IGJlYXN0 Q29tcGxleA== IGNvbnNpZGVycw== 572R dHJpYnV0aW9u IGNvbXBsaW1lbnQ= X2xpbmVubw== IE11dGFibGU= IHVuZGVm IEdlbQ== IGNvbXBvdW5kcw== LnV1aWQ= IGFub255bQ== IHN0YWlycw== IERiU2V0 d29ydA== IFNlbnM= LkJlZm9yZQ== IGVuZGZvcmVhY2g= IFRvZ2V0aGVy YXRpbGl0eQ== IG1vaXN0dXJl LSR7 KFRlc3Q= VEI= bXVzaWM= IGluc2lzdA== IGhlYWRsaW5l LkFuZA== UEFUQ0g= IFByZXBhcmU= IHN3aXRjaGVz KnA= IFll X2Ficw== LmhhbmRsZXI= IGFzc2lnbm1lbnRz UHJlZmVyZW5jZQ== RU5USVRZ IHBpcGVz IEFsZXJ0RGlhbG9n b2dyYXBoaWNhbA== IHBhdGlv IHdlYnBhY2s= YnBz TmF2TGluaw== Lk51bWJlcg== IEFybW9y IFBldGVycw== IERlc2M= ZHVpbm8= IEljb25z LmdldEhlaWdodA== IHRleHRWaWV3 CU5VTEw= YWxsb2NhdGU= fSR7 IFByaXpl LW51bQ== Lk1vdmU= 6L6T5YWl LmNhbWVyYQ== UHJvYmxlbQ== CXR5cGVkZWY= KHN0b3Jl IERJU0NMQUlNRUQ= IHN1YnN0YW50aWFsbHk= RkZG IGVwc2lsb24= IGluZXF1YWxpdHk= X2NoaWxkcmVu 5LiH cmVsdQ== UGllY2U= YW50cnk= YmFiZWw= dmV0aWNh IHN1cnZleXM= IGRldGVjdG9y CWFyZ3M= LlNlbGVjdGVkVmFsdWU= IGludGVyZmVyZW5jZQ== Li4uKQo= LlNUUklORw== IFR5bGVy IENhdGFsb2c= VmVydGljZXM= IFByb2plY3Rz IExlYmFu LiIpCgo= Lmtlcm5lbA== IHJpZGVz IE11dA== YW50aA== 0L7RgNC8 ZW5uaWFs LnRhc2tz LnNldFByb3BlcnR5 YXRlZ29yaQ== 5pyA L2Nvbg== YnJhY2U= IE5TRXJyb3I= J10pKTsK bGlzdGVk IFByZXZpZXc= QWN0aXZhdGU= IGN5Y2w= LWFjdGl2ZQ== aGFk VG9v IHJlZ2lzdA== bGljYWw= IHBvZXRyeQ== SW1wb3J0cw== 77yB77yB Ojw= IGNoYXJt IENvdW4= b2xsaWRlcg== IGh3 fWAK PWFyZ3M= IE5ldXJv aXRpY2Fs aWVuZW4= IERvdA== X09OTFk= RE4= IFBsYXlTdGF0aW9u IHN0ZWVw IHByYWN0aWNhbGx5 IGFwcGxpY2FudA== IGFyb20= YW5pYw== CWRpc3BsYXk= IHRlcm1pbmF0ZWQ= IGNsYXJpdHk= IE1lbnVJdGVt IEt1cg== aWpl X3dlZWs= KGRpY3Q= X3JlY29yZHM= IENvc3Rh IGtldA== RXh0ZW5zaW9ucw== IG5ldWtlbg== aW5zaQ== X2luYw== IOaW IGVpbmY= IFJpc2s= IGVsZXZhdGVk cGVycw== VURB IEtO IGxpbmVk IE1vcm0= KTsKCgoK Pn0K cGxhaW50 Z2V0VGV4dA== IGluZGl2aWR1YWxseQ== IGNoZWNrYm94 VVk= IExhbWI= IGR5c2Z1bmN0aW9u IExhcg== 4LA= IENyZWF0aW5n Jyk7CgoK IlRoZXk= bG9jYXRpb25z X0NPUkU= SW50ZXJhY3Rpb24= dW1ibmFpbHM= IFBhcnRuZXI= YnJpdA== IGxlc3Nlcg== IFNsb3Q= c2V0QXR0cmlidXRl IFdhdmU= LnBv L3N0b3Jl IGJyb3dzaW5n X3Bk c3VtZQ== c2Vk Q3VydmU= IHBsYXNtYQ== IHN1c3BpY2lvdXM= 7J24 IEJhaA== IEV4cGxpY2l0 X0ND LkNsaWVudFNpemU= XFZpZXc= IHN1YnN0aXQ= bG9vbg== IEdBTUU= IEJyaWQ= m+W7ug== X1VzZXI= IHNxdWFyZXM= Zm9uZQ== IHNhY3JlZA== dWdocw== XWludGVyZmFjZQ== IFRocm93 IEtpcms= IGVtcGlyZQ== IGFzc2Vzc2Vk VGF4 IEhlYXZlbg== LWJ1ZmZlcg== X1NUQVRJQw== w6luw6k= LWJvcmRlcmVk IHB1bmN0 KG1vZGU= IGtlaW5l U2VudA== IENhbGN1bA== IEV2ZQ== IHN0eWxpc2g= IG9pbHM= LlRlc3RDYXNl IHRyYWRlbWFyaw== IGxpdGVyYXJ5 IGNvbmNlbnRyYXRpb25z IFJlbGF0aW9ucw== KENsYXNz IHN0ZGlu IHbDpg== YmFja3Vw LlZFUlNJT04= LkF1dG9TY2FsZURpbWVuc2lvbnM= c3RhcnRlcg== VHJhbnNhY3Rpb25hbA== LXBhbmVs U3R1ZGlv a2M= IENoYW1iZXI= IFNwaWVs IHJobw== 2KfZhA== ISc= LkF0dHJpYnV0ZXM= IG11cmRlcmVk YXBldXRpYw== IGludGltYXRl IHRleHRGaWVsZA== IEJ1ZmZhbG8= ZHVtbXk= IiU= IExpYmVydHk= b2Jhcg== IFRhbms= IFBvcHVsYXI= ZXJ2aXNvcg== IEluaXRp IE1hbGw= IFByaW9y Q0FQ IENsYXk= IENlcnRpZmljYXRl LkxvY2s= LXN0cmlw LWRyaXZlbg== L2FsbA== IE1lc3NhZ2VCb3hCdXR0b25z X1NFQ1JFVA== X3Bi IHJhdHM= 4KS+4KQ= IG50 LlJvdXRlcg== X3RvcGlj IHRlbm5pcw== IFBVQkxJQw== IEFjdGl2YXRlZFJvdXRl ICcsCg== IGNvc3R1bWU= IGpva2Vz LkhhbmRsZQ== CWJ5dGU= IGZsYXZvcnM= KGNj IHBlcnNvbmFz CWltYWdl IE5hemk= IGdyYW1tYXI= IMO6bHQ= IHZhbHZl IHZpYw== IFJhY2hlbA== X2ludmFsaWQ= UHJlZnM= c3RkaW50 KHJvdXRl IGh0bWxzcGVjaWFsY2hhcnM= IHBlb3BsZXM= cGxpbmU= IG52 IFF1YW50 b3BwZXJz IGN1cnJlbnRVc2Vy IENhdGFs IHJlY29uYw== IGNvbmp1bmN0aW9u bHg= YW1idXJn IGluZmx1ZW50aWFs ZGFuZ2Vy aW5kZXJz ICVAIiw= LmNvbmZpZ3VyYXRpb24= b3NvbWU= LmlkZW50aXR5 IHBpY2tlcg== bm9zdA== IERJWQ== QXVndXN0 YWJsbw== TGVhZg== IFJlY28= Y2tv RE9D IEhlcm0= OmFueQ== IEludGVydmlldw== IFRleA== eGZl KHdvcms= IGxlYXA= SGVhZGluZw== IHF1YXJ0ZXJz XEJ1bmRsZQ== cmVi UGVyaGFwcw== IEdtYkg= QmlydGg= CXN1bQ== IFdhdHNvbg== Lm5pbA== 56E= e30KCg== aWNhaWQ= R2V0dGVy Im5hbWU= ICINCg== X25vbmU= em0= YWN1dGU= dWVzdG8= IHNvdXM= IHJlYnVpbGQ= IG5ld3NwYXBlcnM= IEhheg== IGtpdHM= aWZv Qmx1cg== IHN1aXRlZA== LUlu 4K8= IEtlaXRo IE5vcndheQ== SU5JVA== aXJlY2Npb24= aWV0aWVz X3VzYWdl IERvdWc= cmlzZQ== IHRyaWxsaW9u aW1pdGVk IFJFTA== YWxpYw== IGNyaXRpY2l6ZWQ= dGhlb3JlbQ== IGNlYXNl IHNpZGV3 IFRlcnJ5 IHN1YnNpZGk= IGZpcm1seQ== IGF3cw== IGhvdHQ= IGRyZXNzaW5n YmFkZ2U= IEFwcGxpY2F0aW9ucw== 6L+U5Zue IGxhdWdoZWQ= IGhvYmJ5 IG11c2ljaWFucw== ICou LnBsYWNlaG9sZGVy IGNvdW50ZXJz IENhcGl0b2w= U0RL IGhlbG1ldA== YW5kYm94 cXVpdA== IGNyaW1pbmFscw== IHRlZW5hZ2Vy KHVwZGF0ZQ== R2w= LnNlbGVjdGlvbg== IGRpc2NoYXJnZQ== IHByZXNlbnRpbmc= dWZhY3R1cmVy X1VOS05PV04= IHN0cmVzc2Vk 5Zmo UHJvdG8= X2NvcnJlY3Q= aGF1cw== IHJlbm92 IGZpcmVhcm1z IHRlY2huaWNhbGx5 LWJyb3dzZXI= IGNhbmR5 U3Ryb2tl IGV4ZWN1dG9y IG9jY3VycmVuY2U= IElQdg== X0lOVEVSRkFDRQ== IFJldHJpZXZl LmJhZA== RXhjaGFuZ2U= TmF2YmFy IEtpZA== KGdldEFwcGxpY2F0aW9uQ29udGV4dA== X1NUT1A= IEJvc3M= TGlzdGVuZXJz IHNob290ZXI= IEFsYg== w6RjaA== IHBpeA== LmtleUNvZGU= YWxvbmU= IGFic3VyZA== IEN1bQ== IE5ld3RvbnNvZnQ= aWt0 IGxhdWdoaW5n IGNhcGl0YWxpc20= cmVlTm9kZQ== VHg= X1FVRVJZ LlNsZWVw KGxvZ2lu V2ViRWxlbWVudA== IGNlbGVicmF0aW5n IGRlcHJlY2F0ZWQ= IG1hYXI= IGFydGlzdGlj X0FTU09D IEJvcmRlclJhZGl1cw== CXdw IHN1cnZpdm9ycw== SW5uZXI= LXJlZA== IHByb3NlY3V0aW9u X3Bw KCI8Lw== IF49 IGxhbQ== IFRyYWRpbmc= ZmxhcmU= RGV0ZWN0b3I= TUY= IEVtZXJnZW5jeQ== IEVhZ2xlcw== cXVhZA== IEluY3Jl cGxpYW5jZQ== XE1pZ3JhdGlvbg== IHVwZ3JhZGVz Q1BV YWdnaQ== ZnByaW50Zg== aWdpb24= IGJlYXV0aWZ1bGx5 IGRyaWVk X0hJR0g= IGdwaW8= TVND IERlcHV0eQ== IERlY2w= IHRyZWFzdXJl c2dpdmluZw== X3NpZGViYXI= IGFwYXJ0bWVudHM= IFdy IGJvYXRz IGJvcg== Lmxhbmd1YWdl IFVp bGl0 ZnJt YW5jaWVz IG1hc3Nlcw== IEFzc2lnbg== IFBPTA== IG1hcERpc3BhdGNoVG9Qcm9wcw== IGJyYWNrZXQ= IFBhcA== IENp IEludG8= IHRlYW1tYXRlcw== IGZvcmFsbA== dWx1aQ== IENhcm4= X0lOUw== YXppb25p Y2Vw IHRvdXJpc3Rz LWJsdWU= IExlZA== IHBlbmV0 IEZv IGltYWdpbmc= cHJh IHNsYXZlcw== b2xlcmFuY2U= IGluY29ycG9yYXRlZA== Jiw= dWFibHk= IEthcA== WG1sRWxlbWVudA== IE11ZWxsZXI= Q2hhbmdlTGlzdGVuZXI= IEhvbGlkYXk= CSAgICAgICAgIA== RmxleA== CVVzZXI= Il0pKQ== X3N1Ym1pdA== LmJvbGQ= IGxvY2tz IEN1YmE= dWRzb24= SG9vaw== IFdhcm5lcg== X3N0YXI= Ij0+JA== IGNvbW1h dW5jaGVja2Vk Z3JhcGhpY3M= cm9ycw== R1JPVU5E KHB1YmxpYw== IGN1c3RvbWl6ZWQ= IEFya2Fuc2Fz IFJldw== IGV4cGlyYXRpb24= 15U= IEN1bA== IG5vbnM= LkZpbHRlcg== IHNlbmF0b3I= X2RlZmluaXRpb24= YXNoaW5ndG9u eW1waA== L0o= IGZ1c2U= cmFtaWQ= IFN1cHBsaWVy IGF1dG9jb21wbGV0ZQ== IH0pLA== LiIKCgo= X2Z1bmN0aW9ucw== CXRv LmV2YWw= IFRPYmplY3Q= UmVmZXJlbmNlcw== IGhlYXRlZA== SEFM ICkpfQo= fSQ= IEJhcnI= X1VOSVQ= KyQ= IGdldFZhbHVl aXBlZA== Y2hpZWQ= KHZt Y3Vl X2ludGVnZXI= X2NvdXJzZQ== dGhpcmQ= IHJldmlzZWQ= KiovCg== X0RJUkVDVA== T3V0T2Y= KCIo IEZlZWw= IHJlYXNz IHN1YnRpdGxl cGVyaQ== bmY= IGVuam95cw== IHRyZWF0cw== KXRoaXM= LXRhYnM= YW5jZXJz IGNvbnRpbmVudA== IGNhcmRpbw== U2Vy LnF1ZXN0aW9u IHBocmFzZXM= VmFsaWRhdG9ycw== IHBvcHVs IGzDrQ== c29uZw== X0lOVEVSTkFM IGFkdmlzZXI= IHB1eno= IGFtYml0aW91cw== IFRvYg== IERQ IHByZXNpZGVuY3k= IHN1cnJlbmRlcg== IHdhdGNoZXM= X2JpbmFyeQ== IFNvb24= IGNhbmFkYQ== KCIiKQo= XT0n IEJyYW5kb24= ZXBzaWxvbg== cnc= LmFkZENoaWxk LkNvcHk= UHJpbmNpcGFs UGhvdG9z IG1hcmdpbmFs IGJhc2ljcw== ZWluZw== TXVzdA== X1N0cmluZw== IG9sZQ== TWFnZW50bw== LmN1c3RvbWVy KHByZXY= 4Lil IGxveWFsdHk= Q29n IHByb3RvY29scw== IENvbXBhbmllcw== IHRoZW9yZXRpY2Fs IGFjY2Vzc2luZw== IFplbg== Lm9uZXM= YXR0aWNl X3dvcmxk emVz IHRhdHRvbw== IG1lbm9z IGludGVyc2VjdA== Il07Cgo= YmVsaWU= IGluYWN0aXZl LnJlYWRsaW5l LWxhYmVsbGVk LmRvbmU= bGlja3I= IFdPUks= IGRlcml2YXRpdmU= IGRhdGFiYXNlcw== 4oKC IHN4 LmlzQXJyYXk= IHlz IHBhZGE= IEJ1bGxldA== KGAv aXNBY3RpdmU= IENHU2l6ZQ== KGVxdWFsVG8= IENvbHVtYnVz IG1hcnJ5 REVW X2xpbWl0cw== cm9uZXM= SUFT IHRhdQ== bWlubw== X1dyaXRl IFdpbmU= IFtbJw== IFB1bGw= cml0ZXJz cmllbnRz IHNoaWZ0aW5n dXBw X1RJTUVS IENvbmRpdGlvbnM= 4bql IE9yZGVycw== IFN0cmVuZ3Ro 5omA IHZhbGlkaXR5 IGZvdA== ZXR1cg== IGJvbHQ= 5YaF IEFsb25n b3NoaQ== IGFzc3VtcHRpb25z IG1hZ2F6aW5lcw== X1NQSQ== IHB1bnQ= X1BST0RVQ1Q= IHJlbGF5 IEphdmFzY3JpcHQ= LnRl LWVz IHdpZGdldHM= KGZz PEl0ZW0= X2V4dHJh IHJlY3J1aXRpbmc= RXQ= IG5lY2Vzc2l0eQ== cHc= IG5vdmVscw== dXNzZWxz Q3JlYXRvcg== IE1WUA== IE9D dGhvb2Q= Y2xpZW50cw== KSkq IGNoYXJhY3Rlcml6ZWQ= X1NFTkQ= dXRp VHk= LmZyb21Kc29u QFNlcnZpY2U= 44KC Q2hyaXM= X0lz IEpvaG5ueQ== IGNsZWFuZXI= IEluaXRpYWxpemVz VU5L KGF4aXM= 0LXQtw== aWV2YWw= IFdhcnJpb3Jz fSko RE1J 4pmA IFRyZWFzdXJ5 IGZlYXM= IHNsYQ== X0VOVU0= bGhz IEluc3RpdA== aXBwZXJz TGluZWFy UmVhZGluZw== cXVpcmllcw== LWNlbGw= Y2hyb21l LlNlYXJjaA== SU5B 57G75Z6L IAogCg== IFNhbXVlbA== IG1pbGxz IGRvbmF0ZQ== IEdlbw== KHJvd3M= IHNoZWVw IMOpbA== 5L2T IGJlbQ== X1VOVVNFRA== IFJDQw== IGludHJvZHVjaW5n YXR0YQ== IFByaW9yaXR5 IEZC IFNlcmdl PiI7 YXRjaGluZw== IEtub3dsZWRnZQ== CVRoZQ== O21hcmdpbg== bGVzc25lc3M= b3BhcmQ= dW1hdGlj KCkpKTsNCg== IGZhbHM= KGNhY2hl VHlwZUlk 6YCa X2Nob2ljZQ== IEdvdGg= IFNpdGVz TUc= X2JvcmRlcg== SW5kaWNlcw== Q29tcGFyZXI= IFJlZGlzdHJpYnV0aW9u IGNsb3NldA== IHZlcnNhdGlsZQ== SW5wdXRz KioqKioqKioqKioqKioqKioqKio= IG9iZXNpdHk= cXVpeg== Z3Jh KGdsb2JhbA== 5Yqh IGNvbGxlY3Rvcg== IGtvcg== b3ZhYmxl QURD IEV2ZW50SGFuZGxlcg== Lm5j IHBsYXliYWNr aWVudG9z X3Blcm0= X1dBUk5JTkc= IE9seW1waWNz Lm5vcm0= IEJyb2FkY2FzdA== X3NtYWxs ZHJpdmU= Lmlsb2M= IHR5cGVk TUVN X2NvbnM= RE1FVEhPRA== IGx1bg== LmRpc3RhbmNl KHBhcg== cG9vbg== IGJhc3Q= YWN0aXZpdGllcw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== Og0KDQo= U0VS KSYm X2xzdA== IFBvbGlzaA== IGtub2NrZWQ= IGZydXN0cmF0aW9u YXVrZWU= IHBob3NwaA== aXF1aWQ= X2NvZWZm 5q2k TGF0ZXN0 IER1c3Q= VGlwbw== IG1haW50YWlucw== IG1hcnNo aW5jaW5u bGJs Q2FyZQ== IG5laWdoYm9yaG9vZHM= X2dwaW8= IEFyc2VuYWw= RGVt IFdoZQ== X2hvb2s= IGxkYw== IEhhcnBlcg== IEJlcmtlbGV5 IGdyYWR1YXRlZA== UGVyY2VudA== IGFycml2aW5n IEFkdmVudHVyZQ== KHNjb3Bl KCcq cXVhcnRlcg== IE1hcmll U3BlYWtpbmc= X2NvZGVnZW4= IGltbXVu Y2FzdGVy 44KM 5ZWG IERpbWVuc2lvbnM= LnJlY29yZA== IHRleHRv IE1pY2hlbGxl UGVuZGluZw== KGJ5 X1BBUg== dWNodA== YmVl LlRocmVhZA== YW1waXJl a25vdw== IENsaW5pY2Fs IG1hcmdpbkJvdHRvbQ== IGRpc3Rpbmd1aXNo LkZ1bGw= LnVuZGVmaW5lZA== IFNlcXVlbGl6ZQ== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== IGVkdWNhdGVk X09WRVI= 5bqP IMKgIMKg X2VhY2g= IHVyZ2U= ZGVwYXJ0 IGRvbm9ycw== IEF1 IGJpbGxpb25z IGJlbG9uZ2luZw== X2FnZQ== X0ludA== IHN1YnN0YW5jZXM= bWFjaGluZQ== ISEhCgo= IGpzb25pZnk= aWJiZWFu IENhZA== IGVuZFRpbWU= IGN5Y2xpbmc= IFVJVGV4dEZpZWxk IGxldmVyYWdl IHZhbmlsbGE= ZWF0 TGF1bmNo KHB0 c3RhdGVz IENvbnRyb2xz IFJlc3BvbnM= IEpha2U= IGFzbGVlcA== Zm9ydHVuYXRl Lm5leHRMaW5l U2l6ZU1vZGU= 7J28 VGVzdGluZ01vZHVsZQ== R2VybWFu IEludmVzdGln LnJldmVyc2U= IEJBQ0s= KERhdGVUaW1l IG5vbnByb2ZpdA== IEV4cGVjdA== IHRhbnRv J10pLA== CXRoZQ== TXVsdGlwbGU= KGdldEFjdGl2aXR5 X1dBSVQ= IGrDoQ== ZGVjb3I= bGV2YW5jZQ== IEdpdEh1Yg== bWluYXRpb24= X3F1YW50aXR5 LlNjYW5uZXI= IExpb24= 6ZSZ6K+v IGRyZQ== IHRhbnRyYQ== IGNvbnRlbnRUeXBl IGZpZA== X2FsdA== TlNJbmRleFBhdGg= LXBs 5YyW IGFudGliaW90 dGFibGVz YWNpYWw= IFJlZ2lzdHJ5 IG9saXZl aWdlcnM= IHN1YnNjcmliZXI= X3ByZXM= IFN5bnRheA== IGxvdmVycw== LkJ5dGU= b2xkZXJz X2ZvcndhcmQ= YWx3YXlz Q2FwdGlvbg== UHJpdg== IFRhbXBh aXNhdGV1cg== LWxhYmVsbGVkYnk= IFRvU3RyaW5n IOyCrA== IGluaXRpYXRlZA== V0Y= IGluc3RpdHV0aW9uYWw= aW5qZWN0 IFNjcg== IGRvY3RyaW5l IHNwYWNpb3Vz aXN1cmU= IEFuYQ== InRpbWU= ZXNzYWdpbmc= IGNpZA== IE5hbg== IGluY29tcGxldGU= VEFH LWJ1aWxk RGVjZW1iZXI= IHJlc2lkdWFs KFBETw== IExpc3Rlbg== IGdseXBo IGdhcHM= bmVh LlJlY3Q= IHNhdQ== IFBob3RvZ3JhcGg= IGV4ZWN1dGFibGU= IEV4cGVydA== Q29yb3V0aW5l X3NpemVz IE5M LmlzVmFsaWQ= KTt9Cg== LXJlZw== IGNpdGluZw== Y3dk IE90dGF3YQ== IEJhdHQ= IHJlbmV3YWJsZQ== IHByZWxpbWluYXJ5 IGFzeWx1bQ== IHdyaXN0 IHV0aWxpeg== IGRldGVudGlvbg== RmFzdA== IGFuZ2U= aW5jaW5uYXRp IHN0ZWVyaW5n IE5hTg== aW9zaXR5 L3BhZ2U= IOi/ c3Rlcm9s IGRpc2c= KERC IERFU0NSSVBUSU9O IF8k IG9ic3RhY2xl IGJpemFycmU= IGV4dHJhY3Rpb24= X2V4cGVjdGVk IGxvc2Vz IENlbGVicg== IGh0bWxGb3I= IGV4cGxvaXQ= 0L7Qu9GM0LfQvtCy WFla IG1hZ25ldA== YW1wZWQ= IGF0b21z U291cmNlcw== cGVjdGl2ZXM= 0YHQu9C4 ID0NCg== IGRhcmU= IFdhbHRlcg== IGJyaWdodG5lc3M= IGFubm90YXRpb25z 648= aXNrZQ== U2NoZWR1bGU= LmltYWdlcw== cm9zc28= ICIuLg== Z2FtbWE= IGluc3RydWN0b3I= IG92ZXJ3cml0ZQ== LWFt IGRldmFzdGF0aW5n IFNhaW50cw== IGhz IGJvbnVzZXM= JG91dHB1dA== aWpk KEFjdGlvbkV2ZW50 bW9uaXRvcg== IG1hdHRyZXNz SmFudWFyeQ== Lmpw IGNhcmFjdGVy IGltcG9zZQ== X3Jlc3Q= IFNpZ25hdHVyZQ== IGNvcm9uYXZpcnVz 44GK X2NvbXBhcmU= TWVhc3VyZQ== aXRhdGVk ZWxpams= aWdvcw== ZXNhcg== IHJ1c2hlZA== bWV0cnk= X1NFUEFSQVRPUg== X1dF X0FUVFJJQlVURQ== IHlhbWw= IHNwZWNz IFJhaA== cGhlcmlj IEludmVzdG1lbnQ= w6RsbA== IGFwcGVhbGluZw== IHZpZXdwb3J0 56k= IG1hcmdpbkxlZnQ= IHN1YnRyYWN0 IEVESVQ= CUFycmF5TGlzdA== Z3JhZGluZw== IEZhaWx1cmU= YXNwZXI= RUVL KG5vdw== PG9iamVjdA== IEFsaWdubWVudA== cGxlYWRv cXR0 KEVSUk9S IElOVkFMSUQ= IHVzZXJpZA== cmFpc2Vz SURJ IHZhcmlhbmNl IE5pbA== L2RlbGV0ZQ== X01BSU4= LlRva2Vu LkNhdGVnb3J5 PikK Q29sbGlzaW9u IEdyZWF0ZXI= IFJhY2luZw== YWxhbg== IG1vbmV0YXJ5 LG5ldw== IFNvcnJ5 LkVuYWJsZQ== IEluc3RhbnRpYXRl b2xsZW4= 66m0 IENhbGxpbmc= X2hvdXI= QURB IHNoeQ== KSoq ID09Pg== IGVzcGVjaWFs IGludGVycHJldGVk IT0i IHBoYXJtYWN5 LnNpbmdsZQ== IENpYWxpcw== IHBhcmFz LnRvVXBwZXJDYXNl IERlbW9u UHJpbWU= IHJhbmtpbmdz QWRkaW5n X0hBU0g= IEV4YW0= 2qk= IFZpY3Rvcg== T2theQ== Il07DQo= IGZvcnR1bmU= IEZFVENI ZXhwYW5k LkludGVyb3A= IGJhcm4= 5raI dWV2bw== IHNwZWN1bGF0aW9u 4pSA4pSA4pSA4pSA IE51 IEJsdWVz KGZuYW1l IGluaGFiaXQ= IFwiJQ== Q0VT dWxhcmlv X2Ny IHZhbGlkYXRlZA== IG1pZG5pZ2h0 YW5raW5n IGluY29ycG9yYXRl IHB1cnN1aXQ= RVhQ cHJpbWU= UGlk LVVT IE51cnM= IFdoZWVs 6Zg= IGlucA== IHN1cHBvcnRpdmU= Lm1lbWJlcg== IFNob3Q= LkNoZWNrQm94 IGFmZmlybQ== VG9y RnVsbFllYXI= IGNvbnNpZGVyYWJseQ== Y3JlZGVudGlhbHM= X29wdHM= Um9sbA== KHJvdW5k IGNvbWVudA== X1VBUlQ= IGV4dGVuZGluZw== Ukc= cmVzdWx0YWRv aXR1 LmdldFNlc3Npb24= IGF0dHJhY3Rpb24= JkQ= JGh0bWw= IEplc3NpY2E= IEFzc29jaWF0ZQ== YcOx X2Vk IExhZw== IG9yaWdpbnM= KCkpLT4= YWRkRXZlbnRMaXN0ZW5lcg== SUFMT0c= 5ZCm LkNvbXBhcmU= QWxidW0= IEt1 PFE= YXJnZXN0 IHByb2xvbmc= IGNvbmZpZ3VyYXRpb25z IGFjY2lkZW50YWxseQ== X3Bob3Rv ICcnOw0K IHZlcnNl Qm9i IGZhcm1pbmc= ZGVsaXZlcnk= IE1hY2s= IHVzZVNlbGVjdG9y LmJvb3RzdHJhcGNkbg== a2VlcGluZw== ZW55 LnVwbG9hZA== IE1FVEhPRA== Y3JlYXRvcg== PF8= IEVhc3Rlcg== Li0t VUlCdXR0b24= 44KJ b21ldGVycw== IHNoaW5l IGhvZ3k= XHM= IGhhcm5lc3M= LkNlbGw= IGxpZnRpbmc= IGNvbWJpbmVz IE9jY3Vw ZXhjbHVkZQ== cGF0aWFs IHJlc3Bpcg== X2ZpdA== IGZpZnR5 IE1vbA== IHR1bmVk LWRpbWVuc2lvbmFs IHFz IHRvcHM= PiI7Cgo= cXVpc2l0ZQ== Y2hhbm5lbHM= L3Jlcw== IEFuYWx5dGljcw== LmFwcGNvbXBhdA== L3Rv IG9uRXJyb3I= KGF0dHI= SVJN IHJhZ2F6 LWFz LlNlY29uZA== b3JpZW50ZWQ= IGRvbm4= IGxpZ2h0bmluZw== Zmlk IFBsZQ== 44G+44GZ dHJv LlRydWU= T2JzZXJ2YWJsZQ== 15k= dW1iaW5n IHByb3NwZWN0aXZl LWZpbHRlcg== IHB1cnN1YW50 KHBvaW50cw== LkJpbmQ= IHBhbG0= Y2xlYXJmaXg= w7Zz IEdvbno= IHdlYWtlbg== RHJpdmU= ZW5pZG8= bGxk b2JveA== YW5lYW4= R290 5L+d UmVnZXg= 5oM= IHNhbGFk YXNzaXM= Im5ldA== aW5oZXJpdERvYw== IFJW cXVpZXI= IGNsYXp6 xLHFnw== b3N0ZXJvbmU= IGFpcmxpbmU= Lmxpc3RkaXI= IGRvd25sb2FkaW5n IFBhbG0= d2F1a2Vl Jmx0 LkJM X0lOTElORQ== b2Zmcw== PDwo X25ld3M= IGNoYXNl Lz48 IGV1cm9z IEVneXB0aWFu IFN0YWlubGVzcw== X0JPT0w= IEd1aWxk IER5bmFt W2luZGV4UGF0aA== IO8= IG1lbW9yYWJsZQ== IENoYW1waW9u UmVzb3VyY2VNYW5hZ2Vy LkxvZ2lu IEZvcm1lcg== eXBlZA== IGxsZWc= OyIs RFdPUkQ= IHRheGk= IGJvbWJz cmFo LnRhZ3M= X3Rlc3Rz c3RvbmVz 4oCdKQ== W2c= cnR5cGU= IHZ1 IGhvc3RpbGU= Q2hhcnM= IFBhdHJpb3Rz L3N0YXR1cw== PEI= IEluY29tZQ== IERhZA== IHBhdHJvbA== X0NIQU5HRQ== IHVwZ3JhZGVk IGNoaW5h c2V0cQ== U3RhcnRlZA== LlVuZGVm IGNoZWNrc3Vt IGZydXN0cmF0ZWQ= e28= IGVuZg== IHdvb2Rz IEFueW9uZQ== RW5jb2Rl IFF0V2lkZ2V0cw== YXJlYXM= IHNoZWVy c2tp ZW5kcG9pbnQ= X1Rlc3Q= U291cA== fn5+fn5+fn5+fn5+fn5+fg== KGZpbGVz CQkJCQkNCg== LnNwYXJr IHZhbHVlZA== ICUK LmNvbnRyb2xz IFhDVEFzc2VydEVxdWFs IGZhbWU= IFJpYw== RE9U IEFsYmVydGE= 5L2/ b3NhbA== LldlYkNvbnRyb2xz IC0tLS0tLS0tLS0tLQ== IE1pcw== IFNZUw== Tm9ubnVsbA== PWl0ZW0= IGV4cGlyZQ== RGVjb2Rl X29wZXJhdGlvbg== IFZhbGlkYXRvcg== LkNFTlRFUg== dWZmcw== Km0= IGF2YW50 5qyh 4oCcWW91 LnBlcm1pc3Npb24= Li4uKQ== IExpYw== X2Nvb3Jkcw== Lm5vbWJyZQ== Y2xv LkludGVybmFs IENobw== X3N3 CUls Y2xr IGNhc3RsZQ== KGxheWVy cGl0 IGd1aWRlZA== IOKWiA== IHN1cGVyYg== IHN1cHBsZW1lbnRz X2NlbnQ= IHBlZWs= SU5BUlk= LkNvbnRlbnRBbGlnbm1lbnQ= ZmFsbHM= IikpOw== V2FsbA== KS4NCg== IERhbm55 aXJtaW5naGFt SUFMSVo= KGNyZWF0ZQ== Iklu U2VydmljZVByb3ZpZGVy IHByaWNlZA== bWFjcm8= YW1hYw== LmJveA== LS0tLQo= 44Or IFN1aXQ= dXJzdA== YnJ1 b3VybmFscw== bnVtZXJv X18oKQo= RGFz IE1pdHQ= dWRlcg== P1w= ZnU= W0I= IDopCgo= KGludGVy YnJhaW5z IGF0dGl0dWRlcw== VmVyaWZ5 IHNpZ25hdHVyZXM= YWNrQmFy IGdk SmFjaw== LmNhdA== IHp6 d2FyZg== RlRFUg== Iik7CgoK QWxpdmU= SUNMRQ== IFdoYXRldmVy IG91dGxpbmVk c3ByaXRl 0LXQsg== X0FC X0RFUFRI IGNydXNoZWQ= YWFh KGV2 5py6 QW50aQ== SUNP aXNFcXVhbFRv LnN1bg== aWN1bG8= c2FsZQ== X2hleA== IFZr YXB0b3I= VW5pb24= IERpc2NvdW50 bGlzdGE= LlVuZGVmT3I= IGF1dG9tYXRpb24= Tm9y 5a+5 5Y+C5pWw IHJlZmxleA== IExhdXJl LnNob3dNZXNzYWdlRGlhbG9n LnRlbXA= IGFrYW4= IF9fX19fXw== LklzVHJ1ZQ== QVJFRA== YWdsZQ== RW5lcmd5 IHF1YW50aXRpZXM= 4oCZw6k= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IGNpdGl6ZW5zaGlw bW91dGg= IGluYXBwcm9wcmlhdGU= IE91dGRvb3I= V2hpdGVTcGFjZQ== QW5vbnltb3Vz bG9hZHM= d2ViRWxlbWVudFByb3BlcnRpZXM= VGVu IGFjY2lkZW50cw== IGFkdmVydGlzZW1lbnQ= IFllbWVu KGNhbGw= IHNsYXZlcnk= 0YHQvw== IExhbQ== X0JJVFM= b21lZ2E= IE9sZQ== IGtpZG4= X0Fu IFJhaWQ= Q3JlYXRpb24= c2F2ZWQ= IHByb3BvcnQ= V0FSTklORw== XFA= IHB3ZA== RGF0YVJlYWRlcg== aXNjaGVy YWRlb24= IFByZWRpY3Q= IHJlYXNvbmluZw== IGRlc3Ryb3lpbmc= SGVs KmQ= IExlZ2lzbA== X1By CQkJICAgICAgIA== IHN5bXBhdGg= IGNoZXNz IG1hbQ== OmhvdmVy IGNvbnZlcnRz IHBlbGE= IHByb2dyZXNzaW9u ICJfIg== IEdpbGw= CXNob3c= IHN1cHBvc2VkbHk= YWNjdXJhY3k= ZWxpbg== IHVuZm9sZGluZw== IEh5cGVy IHdhbm5h IHVwcw== KCM= IENyaW1pbmFs KFBvaW50 YXRMbmc= YWN0bHk= IGNvbnRyYWN0b3Jz J119 ZHJhdWxpYw== w7NkaWdv IFRU IFdpZGU= IEFSRw== X2lj RkxBR1M= U2Nob29s IGNsZWFyaW5n LWJlaW5n PXtb LGNvbnN0 bWFuZW50 T3ZlcmxheQ== KCci 6YeP IFRpbWVzdGFtcA== IG1haWxpbmc= IENha2U= LlRoYXQ= IG1lZGl0YXRpb24= cXA= IGVtcHJlc2E= IExpb25z IHdlbGQ= IExpbmtlZElu IGN1c2g= IGdlbm9tZQ== LkluZGV4T2Y= YWdhaW4= IGZhbGxiYWNr IGNhbXBpbmc= cmVkZA== LXN0cmlwZWQ= IGR2 RmVicnVhcnk= IFByb3h5 dXNr IGRpZXNlbA== V1JJVEU= UkVBSw== TG9yZW0= Lkludm9rZQ== LWRpdg== SW50ZXJjZXB0b3I= IERI aWFsZXM= IHZpbGxhZ2Vz 2LQ= IEVOVg== U3lz LlhS IHBvZW0= w4I= Y2FkZQ== cGxvdHM= IHso LmdpdA== L3N2Zw== bmNtcA== IMSN YWluZXM= 5Ye95pWw ICgpCgo= b3BzaXM= IFJlbGF0aW9uc2hpcA== X2F1dA== IEJvbWI= CWNvbQ== KnNpemVvZg== b2ZmaWNpYWw= X3BheWxvYWQ= CQkJCQkgIA== Lm1hbmFnZXI= IEFyb3VuZA== CXNlbmQ= IEV4ZXJjaXNl IEJpbGx5 aXZp IG5lZWRpbmc= X3VybHM= X3Rhc2tz IEhlbQ== IHRlYXJEb3du ZW5jcnlwdA== LnRpZQ== IGFzbQ== SUNI IENHUmVjdE1ha2U= 7ISx dWxvbmc= IGl0cg== IEdTVA== IG9mZmVyaW5ncw== cm9iZQ== RUVF b3BlcmF0b3Jz X1BST1A= aW5kZW50 QURF b3Jm 65A= IGJsZXNzZWQ= dmFzY3VsYXI= IGNvbm9j SGFwcHk= QnJpZGdl aWxpdGF0aW9u am9pbnQ= IEFkbWluaXN0cg== LXRyYW5zZm9ybQ== IG1lYW50aW1l L0s= IEJlZHJvb20= IHJpZ2lk IGJyb3dzZXJz RU1QVFk= LlNlcmlhbGl6ZQ== X0VE IHN0aXRjaA== IGphbg== ZWxsdA== IGJyYWNl IHRyYWlscw== cHVibGlzaGVk 5a+G56CB fScpCg== IGFjaWRz ICEhIQ== X2RpcmVjdA== PigpKTsK YWrEhQ== X09DQw== IHBsYW5ldHM= 5p+l IER1Ymxpbg== IHNlcmll LnByaW50Zg== ZGVlcA== YCk= IFwk IM68 X1ZJREVP ZW5kb3Jz IENyeXB0bw== RmFy LlRyYW5zcGFyZW50 LlRS aWFzbQ== X3RyYWluaW5n IHRlYWNoZXM= IEJlbHQ= IGxpbWl0aW5n IEthdGg= IEluZGV4UGF0aA== IGFjaGlldmVtZW50cw== IHNlcsOh aW50ZXJvcFJlcXVpcmU= IGRpc3Nl Lklm YXJtaW5n dWxzaW9u UG8= X0RFVEFJTA== UHJvdG90eXBl IENBTA== IGFncmVlcw== LnZv LkV4ZWN1dGVOb25RdWVyeQ== IFRvcGlj ICd7fQ== QXJt IGVjYw== TWFn IHNlcmlhbGl6ZWQ= CWNvbm4= Y2FjaGVk PXRm IEJ5dGVBcnJheQ== cHJvdG9idWY= dmFyY2hhcg== CUFTU0VSVA== IGxpc3Rl X3RyaWdnZXI= t7g= RmVlbA== VGFob21h IExpaw== IHN0cnVjdHVyZWQ= ZXJndXM= LkluaXRpYWw= X2dl Y2xqcw== LmNvbnRhY3Q= IGFuZGVyZQ== JHN0bXQ= X0NVUlJFTlQ= IERpc2NvdmVy JHJlcw== Zm9ybWF0dGVy SGE= dmFuZ3N0 IGVtZXJnZQ== 44CC4oCd IENhYmluZXQ= LXNxdWFyZQ== 6YOo IHJhZ2U= IEFK IFZU c2hhZG93 IEZhaXRo ZW5hbWVz cHJldHR5 aGFzaWw= cGFydHk= IHZhcmNoYXI= IGZvdG9z IGFsdW0= IEJlbGdpdW0= LnlsYWJlbA== IGRlag== X251bWJlcnM= IGh1 LnNldEFkYXB0ZXI= IFVzdWFsbHk= KHNhbXBsZQ== LlNoYXJlZA== IGJvb2tlZA== ID4+PQ== IG1pbmVyYWxz Ij48Pz0= IGFkanVzdG1lbnRz IERM IHZpYnJhbnQ= IERlcGVuZGVuY3k= IHphcA== L1g= IGZvbnRz dHJpcA== 0LjRhw== IHR1YmVz Y2xhbWF0aW9u IOun IHByb3RhZ29u b3Vwb24= IEJydXNo KHByZWQ= b3VybmV5 J10pLT4= cHJvZw== Ym9v X21k X3BhY2s= KGV4cHJlc3M= dXR6 XEF1dGg= LGlk IENoaWxl YWN0aWNl IHJlY3J1aXRtZW50 IHBvc2Vz IHZ1bG5lcmFiaWxpdHk= aW5zdGFuYw== b3J1bQ== ZGVzcw== IHhs JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSU= KGZpZw== IGRlbGV0aW5n LmRlbA== KScpCg== IFdlZWtseQ== Pz8/ KHN0cmNtcA== c21pdGg= IHB1cnN1aW5n LXNv IEFwcHM= LycK IGRlY2lz Rk9SRQ== RXZlcnlvbmU= IGxhbmVz VmlydHVhbA== LmF0dGFjaA== KExvZw== IE1lZGljYWlk KFBhdGg= IFR1cm5lcg== L2FwcGxpY2F0aW9u IHBvcnRyYWl0 IG9wcG9zZQ== Y2hlY2tvdXQ= IGZpbmlzaGVz X01F QmFycmllcg== U29uZw== VkFS RWFybGllcg== cmVsbGE= IGhhc3Q= YXphcg== IHB1bGxz bmd4 IGluc3BpcmluZw== 0YPRjg== LWRpcmVjdGlvbg== IGV4cGxvc2l2ZQ== IGNyZWF0ZWRBdA== c3Rv IHdoZWF0 IEJ1aWx0 J2Fp IHRyYWNrZWQ= aGFtbWFk Um93QXRJbmRleFBhdGg= X2hlYXA= RHVl IGNvbm5lY3Rz LnB1Ymxpc2g= ZW11 IGJ1bGxldHM= QkFS b2xhdGU= IGludGVybmFsbHk= IGNhdGNoaW5n LXBhc3N3b3Jk b3VjaGVk 5oCn ZW91cw== IHhyYW5nZQ== UXVhbGl0eQ== dnY= TWFuYWdl KCgk YWNlbWVudHM= IEJyb3RoZXJz IEhFQUQ= IFVuc3VwcG9ydGVk c2Fu ZXNp KioqCg== IGFkYXB0YXRpb24= IFdvcmtlcg== J10v LnNhdmVmaWc= KHRyYW5z 2Kw= bmVl Q29ycmVjdA== Li4uIikK IHN1Ym1pdHRpbmc= LXBhdGg= CWxhc3Q= aXNzYW4= LnhsYWJlbA== IFNlcGFy L25v X2Jlc3Q= IE1pbGxz X3NvY2s= KGZsYWc= IGRlc3RpbmF0aW9ucw== ZW1wdGlvbg== IEZBSUw= 5ZKM IHJw ZmFjdA== CWxlbg== REFZ IHNlaXo= X2RzdA== bGlw LkxpbmVhcg== IEJhc2tldA== JHQ= JGk= LWJyYW5k IE5laWw= IEVx IHRob3U= b2dlbmU= IHNjaG9sYXJzaGlw 5pu0 IHN3bw== YWdpbmF0b3I= ZW5p KGJvb2s= IGJsaW5r dGh1cw== IGNhbmNlbGxhdGlvblRva2Vu IFBhbGVzdGluaWFucw== IHByb2ZpdGFibGU= IGJhY2twYWNr ZW5zb24= PExvbmc= IHBvb2xz IHN0aWNrcw== IHNwb2tlc3dvbWFu QmVpbmc= IEhlcml0YWdl IE5pa2U= U0hB IE5vdEltcGxlbWVudGVkRXhjZXB0aW9u JGNvcmU= IFJpY28= L2xhdGVzdA== IEN6ZWNo bmVyUmFkaXVz KGxpbmVz IHNlbWVzdGVy IHdvdW5kcw== UHJvY2VkdXJl Lm1haWw= KCkpOgo= IGNvcnJpZA== dGVyZWQ= IE5DQUE= IGdhbGF4eQ== X2tpbmQ= aWxr IHRyYXM= X1BPTA== IEhldA== IHJlZnVnZWU= IHRlZW5hZ2U= LmJpbmRpbmc= cG9zdGFs IGnDp2lu IERhdGFUeXBl 6ZY= eWNsZXJ2aWV3 LHZhbHVl X2lkZW50aWZpZXI= PGI= IG91dGZpbGU= DQogICAgDQo= IGNyw6k= IHJlc3BvbmRlbnRz IEJlYXN0 Y2VsZWQ= IGludGVyZg== LXRoZW1l Z2lm IFJhbmdlcnM= SVRBTA== IGF1dGhlbnRpY2F0ZQ== Q29tcGxldGlvbg== dXJzb3Jz IGNpbmVtYQ== IGRpc2NvdXI= IEphdw== T0NLRVQ= IHByYXllcnM= IEx1aXM= ZnJhZw== PVsK IGJyYXZl X3Bvc2U= Q2VydGlmaWNhdGU= LWZl aWZlcmF5 IEZsYWdz Q29udGFpbmVyR2Fw IENyaXQ= UmVzdWx0U2V0 CWN1cg== IGNvcnJlc3BvbmRz U3RhZmY= Lkh0dHBTZXJ2bGV0UmVxdWVzdA== IG5ldXJvbnM= IE1haW5BeGlzQWxpZ25tZW50 ZWRhcg== IGdhZA== X3BhcnRz IM6y IGZ4 L2ZpbGVz IEJyb3M= aGlwcw== IGdsdWNvc2U= IGZhcm1z IG1lbnRhbGx5 cmVzdGF1cmFudA== VGFibGVOYW1l IE1lcmNlZGVz LlZpc3VhbA== IGFuY2g= aW5hbGc= X3J1bnRpbWU= IHByb3ByaWV0YXJ5 IGludGVudGlvbnM= aXpp U2xpY2U= OyI+PC8= X1dPUkQ= XE1pZ3JhdGlvbnM= IEVOQUJMRQ== X1BBUkFNRVRFUg== IEJpc2hvcA== LnN1YmplY3Q= aWxsYXM= Lm1hdHJpeA== dXJyZW5jZXM= Knk= IGNvc3RseQ== IENodWNr IGNsb3Nlcw== IE1pZ2h0 LXN0b3Jl IG1hbGw= aWV0ZW4= LkFicw== IGNvdXBsZWQ= LmJhc2lj IDo6Ojo6Ojo6 TWFrZXI= Y2Fubm90 IGFjaA== IEVsaQ== 4oiS b3JuYQ== IGNwcw== IHRoZXJlb2Y= IEB7 IE5TTXV0YWJsZUFycmF5 zr0= cHJvZHVjdGl2ZQ== U3F1YXJl dGVtcHRz IGVsaW1pbmF0ZWQ= PE0= IGNvbnNlcnZhdGl2ZXM= IFN1cmc= LnBhcg== IEJ1Y2g= KmI= Rm9ydA== Q29sb3Vy IENoaQ== ZWRpYw== PnRydWU= IE5ZQw== IGJvcmVk IERldGVjdA== IGFwcGFy IGplYW5z IFRhaw== SU9E IEhvcnNl KEZJTEU= KD8= cmlxdWU= b3B0aW1pemVy bmF0 bG95cw== CVRva2Vu b3VidGVk dWVzcw== b2NvYQ== RGF0YU1lbWJlcg== X1BPV0VS Y2xhc3NMaXN0 UHVzaEJ1dHRvbg== IFdpRmk= LlN0cmVhbQ== Lmd1aWxk IG5vZw== IFBvcnR1Z2Fs IFVudGVy UHJpbWl0aXZl Ym9zcw== IERldXRzY2g= IGVyb3RpYw== IHN0cmNvbnY= LlRyeVBhcnNl IGdyYW1z LlN1Y2Nlc3M= X3Br IEhhcnZleQ== LW1pbmRlZA== LmNvdW50cnk= W10i IGFuZ2Vs IGJlYXRz IFZvcg== aWxpbw== Lm1hc3Rlcg== c29tZXRoaW5n IFBBQ0s= KGlm UmVxdWVzdEJvZHk= IGFudGVz L3dpZGdldA== IG1vZG8= IEFX ZmluZGVy IG9wdGltaXplZA== IG1pc3NpbGVz TkI= CWludGVybmFs dGV4 IFNyaQ== IGRhbWFnaW5n IE1haXM= LUFsbG93 IFpo LWFsdA== ICkpOwoK 6Ik= IGluZmx1ZW5jZXM= IGNhdGFs X1JFR0lTVEVS IEFQSXM= LWNlbnR1cnk= IGJpb2xvZ3k= IEFjdHVhbA== IGhlZWxz VFJBQ0U= X0RJRw== RGF0YXNldA== IE1hdHRlcg== IGNsYXNzaWZpZXI= Lndpa2lwZWRpYQ== IFJvZ2Vycw== IGRvbmF0ZWQ= cmF3bGVy ZW5lbg== IGNhc2lub3M= b3J0YWw= IHByaXZl c3Bl ZHVjZXJz LmVw IGdyYXNw YWNqaQ== IGRhaXJ5 IGJ1c2Vz LmNvbW0= Lmlucw== IElSUw== IEJlZXI= YWRj b2FyZA== X01FVA== ICcrJw== cmFucw== IGtpbmRh IOKUgg== IE1hdXI= 0LDQsw== IGJhbmR3aWR0aA== aWJ1cw== IERpZmZlcmVudA== KG1hdA== IFJlc3VtZQ== X1VOUw== ZXN0YWJsaXNo IGZvbmN0aW9u U3Vic2NyaXB0aW9u X2NvbXBhbnk= IGxpZ2h0bHk= LmNvbmZpcm0= LnlhbWw= IEJvb3N0 Q29tbWVyY2U= LXRlbXBsYXRl X0RFTEFZ IEhJ IG5hdmln KFNlbmRlcg== IEhT XyIr IFJFUVVFU1Q= IHdpZmk= PSIiCg== XSktPg== IHJvcGU= IHZpb2xhdGVk IGdsYW5jZQ== IEt1cmQ= IOiu ZGVjaw== IElTQk4= IGluZmVjdA== IEZvbw== IGdldHRlcg== IHRlbmVy YXBwZQ== Lmho X2hvdA== PEFN cG9seQ== ISIsCg== IGNvbnZlcnRpbmc= IFdXRQ== Uk9T KCd7 Q29tbWl0 KUw= IE9yZQ== IHNwYXJzZQ== IGRpc3Bvc2Fs IGNhbmNlbGVk 5ZCO IGFlcg== IHZpbnls 4buD cmVjb2du YXJraW5n IHRyaWNreQ== KnM= IHByb2NlZWRz IGlzbw== IGNvY29udXQ= IGNyYWZ0ZWQ= SUVMRFM= IHF1ZXN0bw== IGNvbW11bg== X0NPTk5FQ1Q= IHRyYWZmaWNraW5n RGVlcA== YcOnw7Vlcw== Y29kaWdv dmVhdQ== IGJldHJheQ== aW50YQ== VEVE w6Zy bWFydA== X0JVUw== L3Nj aWFsbHk= IGNpZ2FyZXR0ZXM= 6K+B KG5u IG1vZGVsaW5n L3Byb2R1Y3Rz d2Fybg== IG1ldHJv IEl2 Jik= IENhYmxl zrs= Q29tcGFyaXNvbg== Z2FyeQ== IEJB UEFSVA== IHB2 X3VwZGF0ZWQ= Q3JlZGl0 b3J0aHk= b2JzZXJ2YWJsZQ== IHRoZWF0cmU= QkxF O30KCg== bGF1bmNo X3N0cmluZ3M= dWdv IFJQRw== LWF1dGg= 0KA= aG9sbQ== IFBhbmQ= VWlk IGltcGx5 7Jy8 J109Jw== L1VzZXI= IHN0cmNhdA== 0L3Ri9C5 RGF0YUFkYXB0ZXI= IGxhbmRzYw== IGRpcGxvbWF0aWM= 77yT KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IENoaWNrZW4= IGJjcnlwdA== LkluZg== W2NvbA== IFF1YW50aXR5 LXBvc2l0aW9u IGRpZXRhcnk= IGZpbG1t SXNyYWVs UHJldg== IE1pbGxpb24= IHJlbWVk IGJpbGxpbmc= IG91dGRvb3Jz LnRt IG5hZA== Rm9yZw== Wlo= IHNzbA== XSwn S1Q= ZnJlcQ== PWRvY3VtZW50 Ymx1cg== rLg= IEplZmZlcnNvbg== Q3M= KHNhdmU= IHN0cmFw SW5kaWE= IGlkZW9sb2d5 Qk9TRQ== IEZQ KGFucw== IGZldmVy IFlhbQ== S2luZw== 4LI= QVRJTkc= Ym9oeWRy cm9sbGJhY2s= IG5ld05vZGU= IE5WSURJQQ== IGhvbm91cg== IENvbmZpcm0= eGJk IHN1Y2Nlc3Nvcg== L3U= bGl2 b3VybmFtZW50cw== QXR0YWNobWVudA== IGdydXA= IHRyaWJl IGNhcmVz ZWZ0 X3NhbWU= J2xhYmVs IOOAkA== TW90b3I= IGluZXhw ICIoIg== X1BPU0lUSU9O IHZhbGxleQ== IFJlc3VsdFNldA== IHByZXNlcnZlZA== IG11dGF0aW9ucw== IHF1ZXN0aW9uaW5n bXVuaXRpb24= cGFyc2VJbnQ= IFNy IE1ldGFkYXRh 4oCd77yM dGltZXN0YW1wcw== IHRyYW5zaXRpb25z 7Zk= 0Yo= aW9t LkRv IHBpbmU= IGZ1bmc= IHRyYW5zbWl0dGVk Y3RpbWU= IEZhbQ== UmV2aXNpb24= QmFz VVBFUg== RGVzdGluYXRpb24= dG9IYXZlQmVlbkNhbGxlZA== IHVuZm9ydHVuYXRl SU5FUw== X3Byb2Y= QW1vbmc= IEN5YmVy IEJhdHRlcnk= Z2VucmU= IFZpZXdNb2RlbA== LT0= IHV0aWxpemVk cGFpbnQ= LkludGVnZXJGaWVsZA== ZXJuaXR5 Y29tcGlsZXI= 4oCLCgo= IE1hc3RlcnM= LlRvQXJyYXk= IHN0cnRvbA== IFVrcmFpbmlhbg== fSkpOwo= IHNoZW1hbGU= IlRoYXQ= Zm9yYWxs L2Rvd25sb2Fk IHJoZXRvcmlj LmxhdGl0dWRl IFdIRU4= IHNob2NraW5n SUZJQw== Lk5vcm1hbA== X0ZPTERFUg== IGRyaWZ0 IG1vdW50aW5n LWJvb2s= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK IFdpcmVsZXNz PiIuJA== IHJlbGllcw== KENvbnNvbGU= SW50ZXJuYXRpb25hbA== LT57JA== TWlk IGRpc3NlcnQ= ZGRz IGRlcG9zaXRz CWRyaXZlcg== I2dh cHJpc2luZw== cHJpbnRsbg== IHByZXNlbnRlcg== IG1pbmVz Q1NT IER1YWw= KCEo IGthbQ== IGlzTG9hZGluZw== IFByb3RlY3Q= LnVwcGVy YXJpdW0= XToKCgo= WWlp LXNoaXJ0 IElNQUdF X2NvbG9ycw== IHVyZ2VudA== LkNvbnRhaW5lcg== ISgK U2F0dXJkYXk= IHNvY2lldGllcw== IFRoYW4= IENvZA== PUA= IGF0dGFjaG1lbnRz Lm1vYmlsZQ== IHNwaXRl IGJvdW5jZQ== cmF3bA== aW5zdGFuY2V0eXBl IFRydWNr IG1hbmlwdWxhdGlvbg== KENvbmZpZw== LWluc3Q= IHN0b3I= aXR1dGlvbg== UHJlZmVycmVkR2Fw IG1haW5BeGlzQWxpZ25tZW50 IGxpc3RlbmVk JycnCgo= b3R0YWdl LXByb2plY3Q= LkFQUExJQ0FUSU9O CXJvb3Q= IHdoaXQ= IGJpbGRlcg== IGtlcg== IGFwcGxpYW5jZXM= cm93YXZl 7J2A ZW1hdGljcw== IE9yZw== b3Bpbmc= X1NFQVJDSA== IGNoYW0= YWRkQ29udGFpbmVyR2Fw ICgpLg== IEFycm93 SWxsZWdhbA== Q3VycmVudGx5 IHVzYQ== IHBhc3N3b3Jkcw== IHJlbm93bg== YXZlcm4= IEV2aWw= IGNvbmNhdA== IGR1bw== IHZhbGU= IEJlYW4= IGluZGljYXRvcnM= Y21hdGg= IFB1bXA= Tm92ZW1iZXI= aWZpY2FudA== X0RPTUFJTg== cmVnYXI= IFBvcnRhbA== IiQ= IGZvcm1lcmx5 Il06Cg== IFZpc2liaWxpdHk= LmdldEVsZW1lbnRzQnlDbGFzc05hbWU= X1JFRA== IGNoYW1waW9ucw== 4LQ= VmFsb3I= X2Vz KmE= LXJlcGVhdA== QmFuZA== LnN0YWdl IGJ1cmVhdWM= Q250 ZXRlbg== LWZ1bmN0aW9u IG11aXRv UElE X2VkaXRvcg== IGNyYXNoZWQ= ZGVhZA== a2F0 YWdo IEVYVA== YXNzZXI= LXNtYWxs IHJlYWxpeg== KEVudGl0eQ== w7pz IEFjdHVhbGx5 IEVsaXRl IGhlbG0= KG5vbmF0b21pYw== YXNoZXI= Q29tbXVuaXR5 YWxsZW5n aXJ5 IEdyb3d0aA== IHN1ZQ== IGZyZXF1ZW5jaWVz X2Rlc2NyaXB0b3I= LkF0dHJpYnV0ZQ== IHJlY2lwaWVudHM= X05T LyIr aWJhbg== IGF0aGxldGU= IElnbg== X0RNQQ== KGRz IFJlcXVpcmVtZW50cw== QURJ ZXJleg== XEFkbWlu YnJhc2th IFJ1c3Q= UmVsYXRpb24= Q09E IFZFUlNJT04= ZW1tYQ== KSl7 LkR1cmF0aW9u IENhbWI= LWxvZ28= IHJlYWRhYmxl IGNyZWF0b3Jz KCldOwo= VXBEb3du LWhhbGY= LmdldE1vbnRo KHNm UGlj IGh1bmdlcg== LnR4 IGV4Y2VlZGVk X3NlZWQ= KF4= X3Nr LnBlcmZvcm0= ID46Og== IG1vbmdv PWZsb2F0 YmluZFBhcmFt U21hcnQ= aWZh IHNlY3VyaXRpZXM= IHByZWp1ZA== ICwi IGNvcnBz IHZyYQ== YW1hY2FyZQ== aXRlcnI= KE1lZGlh dWNoZQ== IGNvYg== IGxpYmVy Lmdlb21ldHJ5 TG9jYXRvcg== IHNsaWRpbmc= IHN1cmdpY2Fs X0NVUg== IGNvbnNlY3Q= Wyo= IFJlc29ydA== U3R1Yg== X0RPVUJMRQ== IFNvcGg= IGVsZWN0b3JhbA== X2Rpc2FibGU= INGB0L4= IExpZ2h0bmluZw== IG1lbnRpb25z b2N5 IGxlYWtlZA== IHJlbGF4aW5n UHJlc2VudGVy dnNw IGd1aWx0 PS09LQ== LnJlcGx5 IE1pcnJvcg== Q2FtcA== ICsjKyMrIys= ICsjKyMrIysjKyMr LkF1dGhvcg== IGRpcmVjdGl2ZQ== LWhvb2s= 7YSw fQoKCgoK QHB5dGVzdA== X3JhbmQ= bWlz IGNvbG9yZnVs dWpl bGFzc2Vz IENsYXNzZXM= LmhhdmU= JSks 6aKY IGRpc3R1cmJpbmc= c3Vic3RyaW5n IEtvaA== SW52ZXN0 cHVyY2hhc2U= IHJlY3ljbGluZw== IEFSVA== aWVyYXJjaHk= IGZwcw== LmNoZWNrQm94 7ZW0 X21hdGVyaWFs ZHVjYXRpb24= IGZ3 dWRpdA== IHJldmlld2luZw== IFNpZA== U3ludGF4 IFdyaXR0ZW4= YXJnYXI= VU1F L3E= Q2xhc3NpZmllcg== T2ZmaWNpYWw= IGpheno= IG9tZWdh UGh5c2ljcw== IGx1Z2Fy X2FjY2Vzc29y LmNvbW1hbmRz QWJpbGl0eQ== IEJhdGNo UkFN IGVuY291bnRlcnM= LlF1 QllURQ== IERpc3RyaWJ1dGlvbg== IHVzbw== IFJlY292ZXJ5 YXBwcm92ZWQ= IGRlbmlhbA== L3NoYXJl TGlua2VkTGlzdA== KQ0KDQoNCg== dWRkeQ== IGZpbmVz IHJ5 VW5pY29kZQ== CXJlbmRlcg== IHByZW1pc2Vz IHBvbg== YWxpYXNlcw== L0ZvdW5kYXRpb24= Y3VkYQ== IENvY2s= LDop KGZvbGRlcg== IG3DqWQ= ZHJhZw== IHRhbGVudHM= ICAgCgo= 0LXRgdGC0LI= bW9i LnltbA== IGFzdGVy IGRpc2NyZQ== Z29hbA== IEdUWA== IFNVQ0NFU1M= IExPTkc= KGZpbmQ= IHNpbmd1bGFy X3N6 IEV0aGVyZXVt Li4K IGlycmVz Jykpewo= IG1pbmlzdGVycw== U3RlcHM= aXZlcnNhbA== IE5ldmVydGhlbGVzcw== LWxlZA== ICglKQ== 56Gu IHRpbWV6b25l IHN0cmFuZ2Vy KHJlbmRlcg== IHNodXRpbA== IG1waA== IHRyaW8= cHB5 IHByZWRvbWlu IGVuZG9ycw== IFJ1c3NpYW5z CXJvdw== IHdpemFyZA== LnNlcmlhbGl6ZQ== IGNvbXBsYWluZWQ= IHNpZG8= IGRlbGlnaHRlZA== LW1l IFJhdg== SHVtYW4= YWRheXM= cmVjdg== V29ya2luZw== SnVtcA== IMOlcg== IEF1dG9tYXRpYw== X0Jhc2U= 5qC8 YXVyYW50cw== wq8= 5rg= KENUeXBl SUZJ KGFtb3VudA== IGJlbGlldmluZw== PW15c3Fs IGZpcg== IHJlc3RvcmF0aW9u ZXJlY28= 0KI= Xycr IGVib29r IGRlYnJpcw== KGlucHV0cw== QVlPVVQ= IHNjcmVhbWluZw== YXZpYQ== bGFuZGVy IGRpc3RyZXNz IGFzc2VtYmxlZA== IEF2b2lk KHRocmVhZA== IFJQQw== X0VYSVQ= KHF1ZXVl 0LjRgdGC RGxs IHNrdWxs X3B1Yg== Y2hleg== bWluYXRl ZW5zZW4= IGluc2FuZQ== Ym91bmRz IFJvc2Vu IGNvbmRpdGlvbmluZw== cHJvY2Vzc2Vk dmlkZW9z Zm91cg== LkNvbnY= fDsK UGVyc29uYWw= Y2VycHQ= OlVJQ29udHJvbFN0YXRlTm9ybWFs IGRvc2Vz IEthcmw= IEZyZXF1 LkJBU0U= IFZvdGU= IGNvbmN1cnJlbnQ= IE1lc3NhZ2VCb3hJY29u IMOW IER1YmFp IFJldGFpbA== Om51bWJlcg== IE9ic2VydmVy IEJpZ0ludGVnZXI= X29yaWdpbg== X1dPUks= RnJhbWVz IG5vdGFibHk= LuKAnA== IHRyb3BpY2Fs IG5pY2hl YW1pbmE= LnN5cw== KHRva2Vucw== bW9kaWZ5 b3NpdA== c3Ryb20= IENvbWljcw== T1BUSU9O VGlja2V0 IGZhY3Rvcmllcw== IGRpc3B1dA== X0ZpbGU= IEZpbm4= ZWVl IERpc2NvcmQ= X21vbmV5 LnRwbA== X3NhZmU= TEI= IGdsdXQ= Sks= LmZsb3c= LWNvbnQ= Z29z IGhvcml6b24= IFJ1c2g= Ojoq UGlwZQ== dWxsYQ== Ym9yb3VnaA== aGVpbWVy KG1vdmU= KFRleHQ= fSk7DQoNCg== d2VsY29tZQ== IENvbXBvbmVudHM= IGdvdmVybmFuY2U= Y2xvc2Vk CW1hcmdpbg== IGxhdW5kcnk= IFRlcm1pbmFs aXphcmRz LuKAlA== LnJlbW90ZQ== LnJhZGl1cw== IFF1ZWJlYw== IGRo VGVjaA== IE1pc3Q= c2VsbGVy X2xpdGVyYWw= IGdlbml1cw== IGJyYWlucw== Z2Vt IE1lYXN1cmU= IGNhdGFzdA== cmFuY2U= LlRleHRGaWVsZA== IGNvbnN1bWluZw== ICdcJyc= b3VidGVkbHk= IENlcnRhaW4= RXY= ZXJ0aQ== YmVpbmc= RXhwZXJpZW5jZQ== IC8vWw== IEFyYWJpYw== IENyaXN0 IEF6dXJl IGhvcmE= bGFkZXNo XEJsdWVwcmludA== ZGFy LnJlbA== IHN1cHJlbQ== IFJlYWdhbg== IEF0dHJpYnV0ZXM= LXNpZGViYXI= IHVzZVN0eWxlcw== IEFpcmxpbmVz IGhpbGxz L3hodG1s dmluYw== X21vY2s= CiAgICAgICAgICAgICAgICAK IFBpbGw= LkxheW91dFN0eWxl IENvbW1hbmRlcg== XTw= c2lnbmF0dXJl IHt9DQo= IGhhdHJlZA== IOuL b2xlc3Rlcm9s ICoqKioqKioq YW5jZWxsb3I= Y3JvcA== VElN CQkKCg== eXNxbGk= dWl0aXZl CXVuc2V0 X3NlbA== IG1lbnVz dGljaw== IGNvbnN0aXR1dGU= IEVsZW1lbnRz IFJlZGlz YWdnaW8= X2Zw X2RlcGVuZA== ZW1hcw== Q0FTVA== b3Jhbmdl am9u IEVtaWx5 IHBvdGF0b2Vz IHJlY2VwdG9y IEVsZWN0cm9uaWM= IExpZ2h0cw== IGNvbWJpbmluZw== IFNvbWVvbmU= ICMjIyMjIyMjLg== IFRPRA== L3Nob3c= WGQ= LiIn YWZ4 IHRyYWdpYw== U3R5bGVk IE1hcmNv R2FsbGVyeQ== ZGFsZQ== LuKAnQoKCgo= w6lyaWU= L3NlcnZpY2U= 5LqG IGFtYmllbnQ= X1NFVFRJTkdT LkFkYXB0ZXI= bGVuZQ== IHRyYXZlbHM= Tm90aWNl IGNsZWFucw== IEZlbQ== Y2hhaXI= 0YPQvQ== L215 X2JhZA== IEVjb25vbWljcw== SVNB X0NOVA== KE1lbnU= 5LqO IFJpZGdl IGxlbmd0aHk= RG90 IGp1bXBz IGhleQ== JHBkZg== IHdvcm0= IHN1dA== IHNoZXI= aWFtbw== IENhbGM= dHJpZXZl IGNvcHM= IENocm9t IHJlZ3VsYXRlZA== cmVhdG1lbnQ= IEhpZ2hlcg== b2tz IGRlemU= TE9DQVRJT04= b25nc1Rv IGZpbml0ZQ== IHZhcmllcw== IHBvc2l0aW9uZWQ= J2ls 6YeR IGhpa2U= KGRvbmU= cGxheWxpc3Q= IGFkYQ== IGNvYXN0YWw= IE5hbmN5 LkRhdGVUaW1lRmllbGQ= Q3BwQ29kZUdlbg== IFNpbWlsYXJseQ== cmV1cg== IENvbnRy IEhpZGRlbg== IEJldGE= YXRjaGVk X2luc3RhbGw= Lk91dHB1dA== TG9va3Vw IFJpY2htb25k cXVhcmVk IG1hbmdh LWNvbnRyb2xz IEJlcm5hcmQ= TGFyZ2U= IHNsaWNlcw== IG9mZmVuY2U= IE1lZ2E= IGVzdGFy IGpvaW50cw== IHN1bW0= X3BsYXRmb3Jt QnVmZg== LmFkZFN1YnZpZXc= IHJldGFpbmVk TGV0dGVy LmRpbQ== IGVzc2VyZQ== IFNjYWZmb2xk RVhQRUNU CVJF LmxvbmdpdHVkZQ== w7xuZA== IHN0YXR1ZQ== LmFkZFdpZGdldA== IENhcmliYmVhbg== YWRkUHJlZmVycmVkR2Fw aWxkZQ== VUlMYWJlbA== IE9wcG9ydA== IGltcGVyaWFs dXJzaW9u IG1hbmRhdGU= IHByb21vdGlvbmFs IHZr aWHFgg== IHB5bA== IENyZWF0aW9u 0L7Qt9C0 IHNpbXBsZXI= LndoYXQ= IFJlY2VudA== U3Rvcm0= LnF1YW50aXR5 IExvdg== Ii0= dWJibGVz X25vdGlmaWNhdGlvbg== KHdvcmxk dXJnZXI= Kigt OiIK aG0= YW5zaGlw IEFsbW9zdA== IG1vdG9yY3ljbGU= X2ZlZQ== IGFic29yYg== IFZpbmNlbnQ= IHNvdW5kZWQ= w61zdA== IHBoYXJtYWNldXRpY2Fs aHRhZw== IEtpbmRsZQ== aXRhbGl6ZQ== IEVtcGVyb3I= b3VzdGlj IHNwZWNpYWxpc3Rz 5YWs Qm9yZGVyU3R5bGU= L1w= UkVMQVRFRA== KCcsJyw= KGV4cHI= IGh0 5Y2I X0NyZWF0ZQ== IHNwZWNpYWxseQ== IFtdOw0K IGhlZWw= IHNlcHQ= X2FyY2g= KGluaXRpYWw= JS4KCg== XCIsXCI= IGRpc2N1c3Nlcw== IHVwdA== IFsm IG1hbnVz LmhhbmQ= IE1BSU4= IERlbm1hcms= IF0sDQo= IGNyeXN0 IG5hY2s= Q29vcmRz X2lubmVy IG1pZHN0 IGF3YWtl INCe LWJyZWFr w612ZWw= X1BBU1M= IFBhcmFtcw== IGRldHI= IHNwaWRlcg== IENvbmNlcHQ= IHByZW5k Q0hFRA== LkV4aXQ= IHBvcHVsYXRlZA== IHZpcnR1ZQ== X1NFU1NJT04= IG5vdXZlbA== b2F1dGg= INC00LDQvdC90Ys= cmluaw== LkhlYWRlclRleHQ= YXR1cmF0ZWQ= IGVyc3Q= IOWF 4KWH X3Zpc2libGU= ZXllcg== IGxpYWJsZQ== IGRlYmU= IGJ3 ey0j X1dJTg== ZGZz SG92ZXI= IFBVVA== LWFuZ2xl IG5vYmxl IHRyYWNlcw== ZW5jdg== IHVzZXJEYXRh X2lucw== IFN1eg== IG5ld3NsZXR0ZXJz IE1vZGk= IGVudHJlcHJlbmV1cnM= IHRyaWJ1dGU= IHJ1bW9ycw== IHJy IFF1YXJ0ZXI= 6rOg IGZlZWRz w7Nn IGVudmVsb3Bl IGxlYXI= IGvDuA== ZGV2ZWxvcGVy U2ltaWxhcg== OiIpCg== c3Vic2NyaXB0aW9u TW9kaWZpZXI= aXRhbGlj IG5hc3R5 IHRlcm1pbmF0aW9u IGNoYXJtaW5n IOKf dG9ucw== LnRyYWNl aG90cw== IFVS TW9udA== IGp1c3RpZmllZA== IEdhbmc= aW5lYQ== IGJvZw== KGFw XyQ= IGNvbnRhbWlu LkRvdA== CURlYnVn KGV4cG9ydHM= IHBhaXJlZA== IEFzc2lnbm1lbnQ= IGF1dG9tb2JpbGU= k40= IHBoYXNlcw== dnc= QFN1cHByZXNzV2FybmluZ3M= PVw= cmFudA== LWVk CWF3YWl0 IGNlcnRpZmljYXRlcw== Jz4i IGludGFjdA== Q1RSTA== TWlrZQ== Z3JlZ2F0aW9u QVRURVJO IHJlcHVibGlj X3VwcGVy aWxpYXJ5 IGNvbXB1dGF0aW9u aGlyZQ== IFNoaW4= X0FOWQ== IE1hbnVmYWN0dXJlcg== IENhcm0= IGJlYXJpbmdz X2NvbWI= Y2Fk dXJpc3RpYw== IHdob2xlc2FsZQ== IGRvbm9y LmludGVyZmFjZXM= cHJlc3Nv IEJydW4= LWNsb3Nl cHJvdmU= X1NL CWZyYW1l ZXRyb3M= IFBhaW4= X0VYUA== IExU X2Zz LmRhdGFz CXNz dm9pcg== IEF4aXM= TWFqb3I= PSI8 W2g= IHByb2Zlc3M= aWdyYXRl KHNjb3Jl S2V5d29yZA== Im9z ICAgIAkK YW5hbHlzaXM= IHJlcGxheQ== LnBhc3M= XGQ= dGxz IHNhbmN0 LmxpZ2h0 X21vYmlsZQ== 0YHRgtGM CXRvdGFs dWl0eQ== IHBhdXNlZA== TkFT IGVuY29yZQ== bG9l IC0qLQoK LmhpZ2g= YW1wbGVy IFNlY3VyZQ== IGZyYWdtZW50cw== X3ZlbA== aWxsYXJ5 IFN0ZWlu IERhd24= IG1heGltaXpl 4Lii IC9e IGNvbnRpbnVhbGx5 IHNoYWRvd3M= CSAgICAgICAgICAgICAgICAgICA= IElBY3Rpb25SZXN1bHQ= IGluZm9ybWFjacOzbg== Q0hFQ0s= LlNlbGVjdGVkSXRlbQ== YnVuZGxl b2xsZXk= PEludA== QUlORVI= IFdpbmc= dGl0bGVz b3VudGFpbg== Q1k= IExvY2FsZQ== Zm9ybWVy PGNvbnRleHQ= UmFkaW9CdXR0b24= X3NjaGVkdWxl IGZhYnVsb3Vz Um9iZXJ0 X1BST0ZJTEU= IGdhdGVz SU1Q IFBlbnRhZ29u Z29sZA== YmFjaA== ZW1wbG95ZWVz Um90YXRl IGNoYW1w IHNlbGJzdA== QWx0ZXJu IGNvbnZlcnRWaWV3 Lyw= IH4o U3RyZWV0 X3BsYWNl IHBlcnNvbmFsaXplZA== UHVibGlzaGVy IFNPQ0s= X05BTUVTUEFDRQ== IFN0YW5kYXJkcw== c29ldmVy X0NFTlRFUg== SW50ZXJlc3Q= w7R0 dGVtcGVyYXR1cmU= Vmlld3BvcnQ= Z2V0UmVzb3VyY2U= IGVhdGVu IHNlbXByZQ== IGFibm9ybWFs IGN5bGluZGVy IHRyb3VibGVz bm9k 0YvQsg== Z2FtZXM= X2ds UGxhbmU= Z3JleQ== X3RibA== LkNvbXBvbmVudFBsYWNlbWVudA== IENoYXNl TG9nZ2luZw== bWFueQ== 7IY= IGZsYW1l PSI8Pz0k IEdyb3Vwcw== LVU= 0YDQsNC9 CgoKCgoKCg== IHZhdWx0 b21vbg== cHJvYmxlbQ== IHRyYWRlcnM= IHBlcmlwaGVyYWw= IGhvbWVwYWdl KGRlcw== IFN1Y2Nlc3NmdWxseQ== IHJlYm9vdA== IGNlbGx1bGFy aWlp IFBsYW5z bGlzdGluZw== CWRpcw== IFJlZmxlY3Q= CWV4Y2VwdA== Iiko IHRhbWLDqW0= VmVoaWNsZQ== YWNjaQ== bHVzaA== T3JkZXJCeQ== IGltYWdpbmVk Y29kZWM= IGRhdGVUaW1l TWljcm8= IHJlbWluZHM= IGZydXN0cmF0aW5n IFZpc3Rh VHJhaW4= INCy0YE= IG1vbGVjdWxlcw== YXZpbg== IGRvdWJsZWQ= IGJyYWtl IGNhbGNpdW0= RnJpZGF5 IElkZW50aWZpZXI= 5Z8= 0YvQuQ== IEphaA== UmVu IHNjYW0= IERlbm5pcw== LnNldEludA== 4p8= IGFwcGVhbHM= IEF1cg== IHNwbGFzaA== ZXF1YWxzSWdub3JlQ2FzZQ== d2h5 IHNhcA== U3VwcG9ydGVk IHNlcmE= IDoi IFZlcm1vbnQ= IHJldW4= IE5vdmE= ICAgICAgICAgICAgCiAgICAgICAgICAgIAo= UmF0ZWQ= IGxheWluZw== IEthcmVu LkRlc2VyaWFsaXpl IGNvZGVj IHRheHBheWVycw== OyIpOwo= IGNydWRl IG1vbGU= IHVzZUNvbnRleHQ= CXJlc3A= IHBrdA== IENhbm5vdA== UGlwZWxpbmU= 5YaG dGljYWw= QWN0aW9uQmFy YWVkYQ== IENyaXRpY2Fs IE5hZA== IGJsZWVkaW5n IGxsdm0= L2N1c3RvbQ== IFNpbXBzb24= U3k= aXRhYmx5 IFN1bW1pdA== KCkpKS4= RUxMT1c= JCcs TWV0 SW52b2ljZQ== b2xpc3Q= IHNwaW5l YXV0aWZ1bA== cGFpZA== IGxvY2tlcg== X2FybQ== XCI+PA== IHRyYWplY3Rvcnk= X3Jpbmc= IGh5ZHJvZ2Vu dHJvbg== IHN0YXR1dGU= IGNvbmRpdGlvbmFs IHRyYXk= LXNjaG9vbA== KHdpZGdldA== JGNvbmZpZw== IHJlcXVlc3Rpbmc= LnVpbnQ= ZXRvbg== YnJpdGllcw== T2ZUeXBl QURNSU4= cHJlZGljdA== IGdlZ2Vu IEhhcHA= T0NVTUVOVA== IEFwYXJ0 IC0tLS0t cm9l dWlkZQ== anVzdGlmeQ== IFNxdWFk IHByb2Zlcw== LmJvdA== X2N1cnJlbmN5 aW5uZW4= IE11bWJhaQ== IE51bWJlcnM= YXZhbmF1Z2g= YWduaXR1ZGU= 4oCcVGhlcmU= PWh0dHA= 54mH IHZi Kyc8Lw== IG9yZ2FuaXppbmc= YW5pdW0= SW5TZWN0aW9u LmFuZA== IGV0ZXJuYWw= IHNvdWxz X09ORQ== X25z X2Jhc2lj IHJldFZhbA== LXNoYXBlZA== aWZkZWY= IE1vemlsbGE= IGVpZw== Y29tcGxldGVk Tm90aWZpY2F0aW9ucw== VEVDVA== cmllbg== Y29vcmRpbmF0ZXM= IHByZXRlbmQ= cG9uc29yZWQ= LnN0ZGVycg== IGdhbWVycw== IGRlZmVuZGVk VG9vbFRpcA== dWl0YXI= IGZyYW5jYQ== IFdvb2Rz IGlocmU= IHBzZXVkbw== IGNyb3dkcw== IFNZU1RFTQ== bGVj LmtlcmFz IGNpcmN1bGF0aW9u ZWVy LmNi dXp6eQ== 7Zg= LnJlYWRlcg== IHNlcXVlbA== U2V2ZXJhbA== LnBvcnRhbA== LS0tLS0K aXN0cmFy 77u/Ly8= UGk= IFwiIg== IGN1c3RvbXM= IGRpc3BsYXlOYW1l IG5vdGljZXM= IGNhcmI= Ll8KCg== IHByb2R1Y3Rv INGB0Ls= IG51bWVyaWNhbA== IHVuaW50 IGNvZGlnbw== T3JkaW5hbA== U3RyaW5nVXRpbHM= IGTDqWM= IExhbg== IHNob3djYXNl IGFyaXRobWV0aWM= LXNjcm9sbA== X1RFTVBMQVRF IFJvdXRlck1vZHVsZQ== IFNoYWRlcg== INCd cG9saWN5 UGVyZm9ybWFuY2U= CWJvcmRlcg== KGZpbGVwYXRo 56m6 X2VuZXJneQ== X0NT VGhlaXI= LnNwYWNpbmc= KGRw IExBTkdVQUdF IGhpc3RvcmljYWxseQ== Ij57eyQ= IGlub2Rl c2ls IGhhY2U= IHNldmVyZWx5 IE92ZXJ2aWV3 IHNwcmF3 IGJlYWNoZXM= OmxlZnQ= t7s= KCR7 IEZJUlNU IFNwYQ== LWFzcw== IGJhaXNl IE5PREU= IFBpenph UGV0 KHNlcQ== XCI+Cg== Q3BwTWV0aG9kUG9pbnRlcg== IHZw IGlh X3NlY29uZHM= ZW1ldA== L2Jsb2I= X1RIUkVTSA== Li4uDQo= RGVzdA== IE5I LmRhdGFTb3VyY2U= aXTDqXM= IEphaw== c2VsbA== IHdvcmtzaG9wcw== PHU= IHJpdmFscw== IEVYSVNUUw== aG9t LXRva2Vu Y29tcGF0aWJsZQ== LkpQYW5lbA== IHBoeXNpY2lhbnM= YXJ0aW4= IGRlc2lyYWJsZQ== IGRpc3RpbmN0aXZl LkRlcA== Z2lk aWxpYXRl LG1heA== IHByZW1pZXJl IHFEZWJ1Zw== IGFkdm9jYWN5 IHdoaXNwZXI= UHQ= IHVuY2hhbmdlZA== X3F0eQ== 6K+35rGC U2Vhc29u YXZlbGVuZ3Ro IFB1bA== IGTDrWE= J11dXSwK YWxpcw== KCIm Ym9ybw== IGJt IFJhZGk= d3Jvbmc= IEdvaW5n aW1lVHlwZQ== aWpp LWZlZWRiYWNr IE5hbWVz IEJhcHQ= IHByb2JhYmxl IEV0aGVy IFBvbGl0aWNz X3Byb3RvY29s bGluaW5n U2F0 IGNvcnJlbA== LlByaW1hcnk= KG51bGxhYmxl UklPUklUWQ== IGNvbG9yaW5n IHV0aWxpemluZw== ZGFz IGV4cG9ydGVk IGNhcnJpZXJz Q29udg== LmVkaXRvcg== acOz KGhhbmRsZXM= IGFwcHJlY2lhdGlvbg== LmltcG9ydA== IEF1c3RyaWE= IFN0cmlw aWxpZ2h0 IGFwcHJvcHJpYXRlbHk= IFByZXN0 IFdpcg== IFVJQXBwbGljYXRpb24= YWxjaGVteQ== IE1vYg== IERldGVybWlu ZXJndXNvbg== cmVnaXN0ZXJlZA== X2NvbnZlcnQ= IFZsYWRpbWly LlNob3dEaWFsb2c= cmVmbGVjdA== IHNob29r IGFzc3VyZQ== IE9mdGVu IGNpdmlsaXphdGlvbg== IHZvY2FidWxhcnk= Zm9yZWdyb3VuZA== IFNjb3Bl IHVud2FudGVk YWN0aW5n IChbXQ== IG1hcmtpbmc= Lm9yaWdpbmFs IE1PVkU= IHNwb3J0aW5n Y2VwdGlvbnM= TlNOdW1iZXI= U2l6ZXM= IHByb3ZpbmNpYWw= X1RyYW5z IHByb2JsZW1hdGlj ZGlnaXQ= IEVtbWE= bG9ja3M= IENyZXc= aWJh Jyk6 aXNoYQ== IG1hbW0= IG9jY3VyZWQ= d2Nz KHJ1bGU= IG1lcmNoYW5kaXNl ZXNwZWNpYWxseQ== IFR3aW4= IG5hbWluZw== IHNsb2c= IGltcHJvdmVz IGFkaGVy OnRleHQ= LmhhZG9vcA== X0hUVFA= LnRvTGlzdA== LmRpc2FibGVk IGxlbnNlcw== LmluaQ== IFJhcmU= IFVidW50dQ== IHNjcmFt b2xhdGlvbg== dGl0dWxv RXZlcnl0aGluZw== IG5vZGRlZA== aWNodGln X2NvbnN0YW50 emM= bGlmdA== IE5vdGlmeQ== b25kbw== IElORg== KCIr IEtheg== IGRyZWFk Lm1hcHBlcg== bGV1cg== IENvbWV5 IE5C aWNlcnM= LlB1c2g= IEhhY2s= IEJyYXppbGlhbg== X3Byb2Q= IC8vCgo= IGJpY3ljbGU= IHVuYXZhaWxhYmxl IGFkb2xlc2NlbnQ= Ymxr IG1pdGln X2JsdWU= 7Jg= ZmFkZUlu IFV0aWxpdGllcw== IE1O O2s= PHN0eWxl LXN0YXR1cw== aW5kbw== IGlubmluZ3M= IGdq IHx8PQ== LmV1 Ok51bWJlcg== IGN1aXNpbmU= IFVSTHM= aWVr IHdpcmVz CXBz aWVn Lm1r c29hcA== IHNvbWV0aW1l IHN0YXA= X3Nlcmllcw== LlRhcmdldA== 5ro= LmRlc3RpbmF0aW9u T1VOVEVS UmFpc2Vz JkE= IHNtYXJ0cGhvbmVz TklFbnY= LnNkaw== IGhlbGljb3B0ZXI= IGltcGU= IEJpcnRo QVU= YnJlYWRjcnVtYnM= Y29vcmRz IGV4cGxvcmVk IGxvZA== IElw Z2FibGU= aWFuZQ== IGFydGlmYWN0cw== Qm94TGF5b3V0 2KfYsQ== bGlzdGVuZXI= LmNhcnQ= IEh1ZmY= IEhpbmR1 IERhdGFUeXBlcw== IERydXBhbA== SUdOT1JF IG9mZnNldHM= IFJUQw== LWxvZ2lu 5q4= IFFPYmplY3Q= IHByb3NlY3V0b3I= Um9jaw== X2NoYXQ= V2F5 7LI= IG5lZ2xpZw== IGR1ZGU= Ozw= IGRlbGVnYXRlcw== X2ZhaWxlZA== L2Rldg== L3dvcms= KE5ldw== ZXRhYmxl KCki KEljb25z IHBvcms= IE1vZGVsQW5kVmlldw== IFZJUA== IEtvcg== bWl4 IG94aWQ= IFNDUkVFTg== IEZvdXJ0aA== LyIsCg== IHRlZQ== IFN0ZXZlbnM= dGlja3M= IHBsZWRnZQ== aWJib24= IExvYW4= IG5lbw== bnVtcHk= IFNoYXJlZFByZWZlcmVuY2Vz LW9yaWVudGVk IExvZ2dlckZhY3Rvcnk= IEdyYXBoUUw= emVuaWE= Il8= V29tZW4= LmNhc3Q= IGRlbGliZXJhdGVseQ== K2I= IEFybg== Zm9udFNpemU= IG1hemU= IGJsYW1lZA== Lm1hcw== fSkNCg== ZWxlcmlr IHNjYW5uaW5n IFdvcmtzaG9w IGZpbmRlbg== IGNhdXQ= VUlGb250 KHJldHVybg== YWxpbg== Y2FzdGxl Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v IGluY2VudGl2ZQ== b3BhdGg= YmxvYg== IGNpZ2FyZXR0ZQ== IGZlcnRpbA== Ki8KCgo= IFNoYXI= CiAgICAgIAo= IHVuY2VydGFpbg== IFN0b24= T3BlcmF0aW9ucw== IFNwZW5jZXI= IGRlZmlu IFNvbG8= b25lc3Q= t7vliqA= IHVvbW8= R2l2ZQ== IGRlbnRybw== O3BhZGRpbmc= ZW50YWk= IENhcnM= IGVudGh1c2lhc20= IE9wZXJhdGluZw== U2tpcA== cGFyYXRpb24= IHByb3RlY3Rz IHJldmVy ZGc= IENpbmNpbm5hdGk= IGNvbnNlY3RldHVy IG11c3M= ZW1wbG95ZWQ= YXVzZXM= aW5rbGU= LlZhbHVlcw== o7w= bG92 X1dBUk4= IGJvb2ttYXJr IEFwb2xsbw== LmF4aXM= IG3DqXQ= IG9wZW5lcg== IHR1bW9y ZGFu IGVsZW1lbnRhcnk= IHNraXBwZWQ= IEtlcg== YXNpYQ== X3Jlc3A= IGRlbW9s IENhbmFkaWFucw== IHRhc3Rlcw== VUludGVnZXI= ICckew== LmF3cw== Uk9JRA== cmlhbnM= TVE= b3JkYWJsZQ== IGNvdXNpbg== UHJvcGFnYXRpb24= KFNlc3Npb24= cGhhbHQ= VUxE IFNjYWxhcg== IGJsb29keQ== IOCm Lm1hc2s= LHE= IFVuaXRz IGNlbnRyZXM= IFByaW0= Ll0KCg== IFNoYXc= UHJvbQ== IFRob3VnaHQ= Q2hlY2tlcg== X291dHB1dHM= KGNoYW4= RUlOVkFM IGJvYg== X2NtcA== UGVk IG1hdHJpY2Vz IHZyb3V3ZW4= IGdlbnVpbmVseQ== aGlnaGxpZ2h0 KGRpc3BsYXk= KSE9 IGRlbGljYXRl IEx1dGhlcg== IE1pbGVz IHVzZXJJRA== JT0= YXRldXJz X0JVRg== LS0tLS0tLQo= aW1pdGl2ZXM= IHNoZWx2ZXM= c2xvdw== X2luZm9ybWF0aW9u TEVH V3I= LmZvcm1z Y2VsYW5k L3Vu OiY= LuKAmQoK PSIl IHByb3N0 IGZvbnRzaXpl dWNpw7Nu Z2V0aWM= YW10 PSIu RGVjb3I= QnJpdA== ICIiKS4= IGZvdW5kaW5n LkZpbGVOYW1l IFRpZXI= IGRpc2Nsb3Nl w6Ft LnN5bg== LlZpZXdIb2xkZXI= bGljYW50 X3N0YWdl TW9uZGF5 IGRlc2VyaWFsaXpl dGFsaw== IHRyYWRpdGlvbmFsbHk= 5oCB 2K4= TEVY IGVo CVJPTQ== IHt9KQo= UXVlc3Rpb25z bmNweQ== IGZpeGluZw== 0LrRgw== X0tleQ== Ong= IFNUUklORw== INGE0LDQuQ== CWxlZnQ= IEJlbmNo ZWxsaWo= VVJSRUQ= IERpYWdyYW0= fWNhdGNo L3RpbWU= IE1pc3Npbmc= ZGJuYW1l IHNvcmU= IFdhbHQ= dWdnaW5n cmVwcmVzZW50 IEdT bmV5cw== CXBhZ2U= IHZvbGNhbg== KGJ0bg== IGV4Y2VlZHM= IGVyZw== IHBpbG90cw== IFNlZA== ZXJzaW9ucw== IHBhdHJvbg== UlY= L3RvcA== LmFzc2V0 X2Nyb3Nz LkVkaXRvcg== LnRi IHdlbGNvbWluZw== U0NSRUVO KWZpbmRWaWV3QnlJZA== Q29kZXI= PElBY3Rpb25SZXN1bHQ= X1FVRVVF 4YM= IGhlaWdodHM= UmVxdWVzdHM= IHN5bWJvbGlj DQ0KDQ0K IGNvdXBvbnM= LWZpdmU= IERlc2t0b3A= IG1pc21hdGNo ICdfJw== X0RJVg== QVNPTg== LnRyYW5zcG9zZQ== KG1hc2s= IENlbHQ= LkhhbmQ= YXR1 asSZ IHt9KTsK TWlzcw== IHByaW1h bXVuZA== b2x2 IFByZXR0eQ== IHJlYmVs IEZE YXN0aWNhbGx5 T0xU LWF4aXM= dXhl IGVpbmZhY2g= IENoZW1pY2Fs X3NlZw== bGVldGNvZGU= bG9wZQ== X29yaWc= ICAJCQ== KERvdWJsZQ== IFBheVBhbA== LkJhY2tncm91bmRJbWFnZQ== IGhvbWVtYWRl Liku KHBhcnNlcg== YXRybw== YWNjb3JkaW9u RGVmaW5l IOyeiA== IEFVVE8= LnN1bW1hcnk= c2NhbGFy IEhvb2Q= cXVpbg== X2Rlcg== IEdlc2No LmNvbXB1dGU= RmVlZGJhY2s= IHBoYXJtYWM= IMWfaQ== IGdsb3Nz IEZJTFRFUg== SU5TVEFOQ0U= IGthbA== LlBM X0ZSRUU= R3JhZGU= IOKZ Lm1ldHJpY3M= IGNhZ2U= Llh0cmFHcmlk X2Rz emln aW50ZXJvcFJlcXVpcmVEZWZhdWx0 LnJlbW92ZUNsYXNz PT09PT09PT09PT09PQ== IG1hc3RlcnM= U3RhdGVFeGNlcHRpb24= aWxsZXJ5 IEJyYWR5 IGxpbmluZw== X2Nz aW5zdWxh IH06 W3Bvc2l0aW9u IFJ4 IEJZVEU= IFN0cmlrZQ== INCa IENsdXN0ZXI= LmRvd25sb2Fk QWxsb3dlZA== IGFtZW5pdGllcw== IG9uVGFw ZnVsV2lkZ2V0 IHN0cmVuZ3Rocw== dHdlZXQ= IGFzY2VuZGluZw== IGRpc2Nsb3NlZA== Z3Jhdg== ZGlzdHJpY3Q= KTw8 KSwi KGRlZnVu X3w= IGdhemU= 0LDRjw== IGZvcnR5 PT09PT09PT09PT0= U2NpZW5jZQ== c2VtYmxlcg== CWJvZHk= X3RyYW5zZmVy IGxvbmd0aW1l IGNvbXBsaWNhdGlvbnM= IGJvb3Ro VkVSUg== IHlpZWxkcw== IG5hdmlnYXRvcg== OjpfKCc= RUNUT1I= X0NvbmZpZw== IGxhc3RlZA== dXNhbA== 55m75b2V IGdsb3Zlcw== IGJlbGx5 U2FsZXM= KE1ldGhvZA== KG1lbWJlcg== IFJlZWQ= cGFzc2Vk U2lnbklu LG51bQ== VUxPTkc= IExFRw== bmVscw== IG1lbnRvcg== KHJj IE9idmlvdXNseQ== Lmlm IEZyZWRlcg== SEVBRA== QGF1dGhvcg== Q29uZGl0aW9ucw== IGdhcmRlbnM= IFJpcA== KHVzZXJz IE9rYXk= IHdyZXN0bGluZw== aW1lc3RvbmU= IENlcnRpZmllZA== IHZlcmRpY3Q= YWlkYQ== LmlubmVyVGV4dA== aWNhc3Q= CWF0 IHByZXN1bWFibHk= IEZVTg== YWplcw== 0Jc= PiIsCg== X1Bpbg== dWVzZQ== IG92ZXJyaWRlcw== X3JlYWR5 QWR2YW5jZWQ= IG9waQ== LWNhcnQ= KCIvIiw= IERlYg== Q1JZ IFZlcnRpY2Fs IE9WRVI= IENvcnBvcmF0ZQ== ICIiOw== IHN0ZXBwaW5n ZWo= IGFjY3VzYXRpb25z IG9yYXo= X3RhaWw= IGluZHVjZWQ= IGVsYXN0aWM= IGJsb3du LC8v IGJhY2tncm91bmRz 4oCZdW5l LXNkaw== IHNldEludGVydmFs IGluY2VudGl2ZXM= IHZlZ2V0YWJsZQ== X09u ZXhwYW5kZWQ= cGl4 X3NoYWRlcg== IFNQRFg= QGV4YW1wbGU= IFdyYXBwZXI= Llplcm8= UG9zaXRpdmU= IHNwaW5uZXI= IGludmVudGVk IEdhdGVz 0L7RgtC+0YA= IGNvbXBhcmlzb25z 6Lc= LnByaW1hcnk= ZGF0YVByb3ZpZGVy YWRkaXRpb25hbA== CW9wdGlvbnM= c25hcHNob3Q= LnNldEhvcml6b250YWw= ICJ7fQ== IEZpc2hlcg== aGFsdGVu PFR5cGU= IG1heExlbmd0aA== IE10 IOqwgA== LmpldGJyYWlucw== IGlkZW50aWZpZXM= IGZsb3dpbmc= IERpc2N1c3Npb24= YXRzYnk= IHNjaHc= dWdodHk= IHJpdmVycw== LnVuaXF1ZQ== X1BIWQ== ZWRyYWw= KGxs IGNzcmY= cHBlcnM= w7xs IEVzcGVjaWFsbHk= cG9ydGVk IEhhcnJpc29u KioqKioqKi8K VGV4dENvbG9y 7Iq1 d2lyZQ== IHN0YXR1c0NvZGU= IEZpbmlzaA== Y2VuY2U= IE1jQ2Fpbg== IFdvcg== KGF3YWl0 ICktPg== IFJlZ2lzdGVyZWQ= SU5FRA== a2Fs cGFyaXNvbg== IG9iamV0bw== Vmk= bWFuZGE= IHJlbmV3ZWQ= IFNvZg== ZXNzZWw= Lm5kYXJyYXk= IGNyYXA= 566h LmFic3BhdGg= KHVw IGNsZWFyYW5jZQ== IFRX X0NPUFk= ICAgICAgICAgICAgCQ== IGZvcmVzdHM= IGFyZ3VhYmx5 IEFTUw== aGV5 YW1lbA== X2ZvcmU= IFNvdXRoZWFzdA== IGFidXNlZA== IHByYWN0aWNpbmc= YWtlZGlycw== 5Li7 X3Jlc291cmNlcw== IHBvbmQ= LkZpeGVk TGFzdEVycm9y IFBzeWNob2xvZ3k= ICIvLw== ITo= UmV1c2FibGU= IG1lbnNhamU= IHJvc3B5 IGJvdXI= IHZhcmlldGllcw== IGVtcGF0aA== KCh7 X29yZw== IE1lcw== IE1hZ2VudG8= SVNUT1JZ VW5sZXNz IGhq IER1dHk= SnVu LHNpemU= IHBhaW50aW5ncw== IGRpc3BlbnM= ZGFydA== IGJlaGF2aW9yYWw= IHJwYw== Y2FsY3VsYXRl ZnJ1aXQ= X21t CXB0aHJlYWQ= TWF4TGVuZ3Ro IGN1cnJlbmNpZXM= X2NhcGFjaXR5 IE96 IGZpcmVhcm0= IGNvZWZmaWNpZW50 IGJhbmtydXB0Y3k= d2FydA== IGZhdGlndWU= QVZB IGVzcGE= X3Bj IFF1b3Rlcw== X0xJR0hU IFRpY2tldHM= IHJlbGF0ZXM= IHB1Ymxpc2hlcnM= IHVubG9ja2Vk IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IEludGVycnVwdGVkRXhjZXB0aW9u IG91dGxvb2s= cm4= IHJlYmVscw== V3JpdHRlbg== IGFzaWFu b3R0bw== IAkJCQk= X2dwdQ== VHh0 LkltYWdlVmlldw== IHN1aXM= X3RhYmxlcw== LlJlY3ljbGVyVmlldw== IHdoYXRzb2V2ZXI= 6IE= XSsrOwo= YXNzZXJ0VHJ1ZQ== X3ZlcmlmeQ== IFJpdmVycw== IF1b SmV0 aWRpYW4= U2libGluZw== IGdlbnJlcw== LkFjY2Vzcw== T1BT IHRyaXZpYWw= 4Liq YWxlbg== 0LLQtdC0 IFN3b3Jk IHNjcnV0aW55 KGNi IGNvbW1lcmNl IGd1YXJhbnRlZXM= X2Fkdg== IExFVA== cmVjaW8= IGhpbGFy IGJhY2t5YXJk 44CP IGlsbHVzdHJhdGVk L3ZlbmRvcg== LlV0aWw= IHdvdw== TE9Z IE1hcnNoYWw= Ij4nLiQ= IEJhaw== IG1vZGlmaWVycw== ZGljdGlvbmFyeQ== IFN0cmU= bXVsdGlwbGU= IikpLA== IENvcnQ= J10iKS4= KGFkbWlu IENyZWF0b3I= SW50ZXJuZXQ= KG1z bG9neQ== REVDTEFSRQ== IE1hcmN1cw== PDw8PA== 44Gg X215 KGluc3Q= IHNjaWVuY2Vz TkRFUg== LmVudGVy IGl0dQ== IGJlaGF2ZQ== UGFu b21iaWVz PSc8 JykpOw0K IE1FTlU= IFdvcmtlcnM= Lk5vRXJyb3I= IGJpbmRpbmdz IGRpc2FiaWxpdGllcw== e1w= IE11bmljaXA= IGNvcmVz dXJwbGU= IE5va2lh dXNpb25z IEZpdG5lc3M= LmhhbmRsZUNoYW5nZQ== IGphdmFzY3JpcHQ= 7JqU KGRlYw== IHBhY2tpbmc= LWRlcGVuZA== IHRyYW5zY3JpcHQ= emVyb3M= X2FsZXJ0 PyIsCg== bGlicw== sdC+0YI= IHwKCg== dHJhaW5lZA== IEdlbnQ= IFJhYg== eHA= X2NvbmZpZ3VyYXRpb24= 5aSp X2FjY2VwdA== LnJlY3ljbGVydmlldw== OnVybA== IE11aGFtbWFk IHByaXZpbGVnZXM= X2Jhbms= dWt1 d2FsbGV0 IFJPT1Q= IGVuY3VlbnQ= P2ZhbWlseQ== CXBvc2l0aW9u IGNn IHByZWNpcA== bWV0aG9kcw== X2Zhc3Q= aW5jcmVtZW50 IFRpZ2Vy X09DQ1VSUkVE cXVpcA== IEhBUw== X2RvbQ== IHdyZWNr Ymo= IGRlcm4= IG9yZ2Fucw== LmVudHJpZXM= IF8oJw== cmFtZW50bw== IEphbWll IHB1bms= SVBQ IHByb2dyYW1h IGF0dGFpbg== IHByb3Zlcw== L3NpZ24= IGFuc3dlcmluZw== IGxhZGRlcg== KioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IFdhbG1hcnQ= IENPTlRFTlQ= ZHVjdG9y IHZlcmJhbA== IFBJRA== Y3J5cHRv X0NBTExCQUNL ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHBvdGVudA== IHNob3J0cw== LlVyaQ== LnVuaWZvcm0= O2JvcmRlcg== IFdlcg== IGhlcmVpbg== bGxh IElocg== UGl4bWFw bGl0ZXJhbA== ISkKCg== Z2VuZXJpYw== cnVzdA== X3NjcmlwdHM= b3N0bw== aXR1cw== IENvYWxpdGlvbg== IHJlbW90 ZGVwbG95 IEVhZ2xl 44CB44CM IGltcG9ydGFudGU= CW9iamVjdA== IHNlYXNvbmFs bmVq YWlkdQ== QmluZFZpZXc= IFNpZXJyYQ== LWJn IG1ha2VTdHlsZXM= W29mZnNldA== R2FtZXM= IGhvcm1vbmU= QVJJTw== aGVhZHM= KHNlbGVjdA== IFN0YXJ0ZWQ= QHBhcmFt X2RlY2w= X2Jsb2c= IGHDsW8= XEFwaQ== IE1pbHdhdWtlZQ== UHJvdmlk QW5pbWF0ZWQ= IGNvb2xlcg== IFNlZWQ= LkVkaXQ= z4Q= IFRha2luZw== IGJvcmRlckNvbG9y LWZvdW5kZXI= LkxvZ2dlckZhY3Rvcnk= ICIiCgo= QUxU IExhdGU= RURJQVRF ICk7CgoK YWZh IGNhbmNlbGxhdGlvbg== QXRvbQ== IEJpcm1pbmdoYW0= ZW1wcmVzYQ== SEVNQQ== YXNjYWw= IHVwc2lkZQ== LlZlcnNpb24= IEZvbGRlcg== IEVpZ2h0 IFZpbnRhZ2U= IEFwcERlbGVnYXRl IFByZXZlbnRpb24= LnNlcGFyYXRvcg== U1RN KHJvb20= Z2VuZXJhdG9y IGNhdHRsZQ== CVo= IFBhcnRpY2xl J307Cg== IG5laWdoYm91cnM= IFN0YXRlbGVzcw== IGFsdGl0dWRl IHNhaW50 0L7QsdCw0LI= IGNvbnZpbmM= IENvbnRlbnRz IGpldW5l KHRz U2VyaWFsaXphdGlvbg== KGNvbGxlY3Rpb24= IEpheno= IERvZA== IFJvY2g= YWNpbw== Y29tbWVuZGVk REVGSU5F Lm9ubG9hZA== IHNwZWNpYWx0eQ== UExBQ0U= X01PVkU= IGFjY291bnRhYmxl UmV1dGVycw== IGZpY2tlbg== IGRlcHI= V293 Vm9pZA== LnNwYWNl 4LiX IHRx IFBldHM= PCQ= KEN1cnJlbnQ= YmVycmllcw== cGxhbmF0aW9u IGxpc3RPZg== IFRodQ== IFBSSU5U IG1pc21v IGRvaQ== Y2hr IFVuaWNvZGU= KHJvbGU= IHZpcmdpbg== PFBvaW50 X1JFU1BPTlNF LWhvdXNl IFZlbmV6dWVsYQ== RU1BSUw= IHDDumI= X2V4aXN0 QmFsbA== LkNM cmVmZXJlbmNlcw== IEJlYXV0aWZ1bFNvdXA= CUV4cGVjdA== VEhJUw== 0YPQtA== YmFuZQ== IHRlbXBvcmFs RVJJQw== ZXRhcw== IHJlZnJlc2hpbmc= IHNlY3VsYXI= QHN5bnRoZXNpemU= YWNjdXI= IG5lbGxh IFNPTA== LnBpcGU= Q2hhbm5lbHM= 6Ieq IGluc2VydGlvbg== 4buL ZWxpYQ== IGFkanVzdGFibGU= Q2FuYWRh IElURU0= IGN1cnZlcw== IENoZWFw bGV0aW5n IG9wdGltaXN0aWM= YWxsbw== IHBvbGl0aWNpYW4= X2Rvd25sb2Fk PWVkZ2U= T1JUSA== IG1vZGVsbw== YXJ0bw== LnJvdGF0ZQ== IHNlbGVuaXVt 5oiR X2FsaWFz IHJlbm93bmVk Licu IGN6eQ== IGFsbGVz LkNvbXBpbGVy IEJhc3M= Q29ubmVjdG9y LlJvbGU= TElOSw== IGNyaXRlcmlvbg== bGVtZXRyeQ== U3VjY2Vzc2Z1bGx5 L3BuZw== IGV5ZWI= YXNwYmVycnk= KGdy IGRhbmdlcnM= IGNvcnJlY3RlZA== IGdsb3c= IGVsYWJvcmF0ZQ== IEJlYXJz YXdhaQ== PSInKw== IHByb21vdGlvbnM= IG1hdGhlbWF0aWNhbA== ICJg X0dlbmVyaWNDbGFzcw== IENoZWY= LlNvcnQ= dGFibGVOYW1l UklD IHZvbHVudGFyeQ== IEJsYWRl LWVsZWN0 IENvbWJhdA== IEFiaWxpdHk= IGFiZG9t IGR1Y2s= VG1w 5YWo IGVyYXNl LlBo IERlZmF1bHRz cGFydG1lbnQ= X1VTQg== w6p0ZQ== Oyc= IHBhZHM= IE9iYW1hY2FyZQ== LlRvdGFs IGRpdmVydA== IGNyaWNrZXQ= IHJlY3JlYXRpb25hbA== KHJlZA== IENsZQ== UlU= IG1pc3Rha2Vu IE1vbnRhbmE= IHN0cml2ZQ== X3NsaWRlcg== IFBsYXN0aWM= IGRlY29yYXRlZA== IFZQ bGljbw== CWZhbHNl IHByZWZz KFwi X2ZhbHNl aWVuZG8= IEAk QnVja2V0 YWN0aWNhbA== IFpoYW5n LmNvbHM= LkJpbmRpbmc= IHdheA== X1NUT1JBR0U= IGxhd24= IHJm LlNjZW5l IENhbGN1bGF0b3I= LmRlc2lnbg== IHJlc2ls 0LvQtdC8 RW1wbG95 IFByaWNlcw== IFBXTQ== YWdp LmV2YWx1YXRl CXBhcmFt IGJyYXNz YmJlbg== IGluZmxhbW1hdGlvbg== dWxsaXZhbg== IGFubm90 IHBI aWFtZXRlcg== IEJUQw== KGJveA== U3Rvcnlib2FyZA== IGNsYXk= LmFzc2VydFJhaXNlcw== fHN0cmluZw== LkFwcGx5 IG1hdGNoZXI= dW5kZWQ= IHNhdGlzZnlpbmc= IOyglQ== UmVuZGVyaW5n X2FwcHJv aW5kcm9tZQ== QU5FTA== X2ZpeA== YnJ1c2g= Lk1hdGNo IHNtaWxpbmc= b25hdXQ= U3VuZGF5 IGRlbGV0aW9u IGVuY291cmFnZXM= UHVsbA== IHJldmVuZ2U= IHF1YXJyeQ== dHJhZGU= IGNhYmxlcw== KGRlbHRh aXRlc3BhY2U= IGZo LmJ1bmlmdQ== IHZpZWw= X0lOQ0xVREVE IFRhaWw= YWRhcg== b2Zz IG1ldGFscw== Z29t X21ldGhvZHM= IG5q LlN0ZA== KHdpbg== JCgn IHR1cnRsZQ== dXJvbg== IGVucm9sbGVk IEh6 IEJveERlY29yYXRpb24= IHBvbnQ= cmVsYXRpb25zaGlw Qmk= s7s= IG1hc2N1bA== IHNoYWRlcw== IHZy IExvZ2lj IGFpbg== IERJU1Q= IGNvbGxhcg== InByb2ZpbGU= R2VuZXJhdGVkVmFsdWU= IFBvc3NpYmxl IGVpbmVz g4E= LnRpbWVvdXQ= IEVj IGplcnNleQ== LkRvdWJsZQ== IHF1YWxpZnlpbmc= dm9y Q1JFRU4= X0FwcA== X3JlY3Y= IGFsaWVucw== SXRz RXNj aWF0b3I= IEVjbGlwc2U= IGdo VmljdA== CWh0bWw= dG9v LmNvbnN0 IGFudGVyaW9y IFd1 KGtleXM= IHVsdHI= X3BvbHk= IFRhcA== IEJ1ZA== QVdT IGNyYXNoZXM= X3RvdA== Q29udGlu LWhhbmRlZA== YWx0aG91Z2g= 4Lia aWZpY2VudA== IGRldmU= dXRvcnk= IFdvcnRo X01T IGZsb29yaW5n IHNlbGxlcnM= IFRoYW5rc2dpdmluZw== IHBuZw== IHZhbG9yZXM= IHNsZWV2ZQ== IGZpbGxl 0JA= IGFwcG9pbnRtZW50cw== IHZpbQ== VXNlckluZm8= Qk9PU1Q= IHBvc2Vk aW5pdGlhbGl6ZWQ= LnByb2R1Y3Rz IExlYWRlcnNoaXA= bWFudWVs JyU= ZW1hcmtz UGVyY2VudGFnZQ== KGRpc3Q= LmF2YXRhcg== KGhPYmplY3Q= 5LuK X2lmZg== aWNvbmU= Oyk= X25pbA== IGFib2w= 0LXRgdGC IHZlbnVlcw== LkNvbnZlcnQ= IScpCg== LkJpdG1hcA== c2tpbg== X0NPTFVNTg== UmV2 R1JFU1M= Z293 IHdpc2hlZA== dHJhY3Rz LmFzc2VydEZhbHNl IHNjcmVlbnNob3Q= IGZvaXM= Q29tYg== TGluZVdpZHRo IEdyYWI= IGludGVuc2l2ZQ== CXNo Kyk= LmZpcnN0TmFtZQ== X1BST0NFU1M= IHRpbHQ= aXRvcmVk LkxPRw== IGJhaw== IGludGVudGlvbmFsbHk= LnBsYXllcnM= KGNhbnZhcw== KSkpDQo= LlByb3ZpZGVy X1BVQkxJQw== VGFsaw== IExpdg== Y2hlZHVsZXJz IGxj YWRpYw== ZmVhdHVyZWQ= LnJlc291cmNlcw== RnVsbE5hbWU= IG1lYW53aGlsZQ== QnVmZmVycw== IHJlc29sdmVy IFNBUA== X1RF R05V IEZvcm1zTW9kdWxl X3do IFN3ZQ== LndpZGdldHM= IGNhYmluZXRz IHN1c2NlcHQ= IEJvdHQ= YWN0aXZleA== YXZhcg== YW50aWNz ICI9Ig== X2t3YXJncw== IGdhbWVPYmplY3Q= IEFuZ2xl Lkl0ZXI= bWFyc2g= IEJpcnRoZGF5 IENNUw== cmVxdWVzdHM= IFBlYXJs X0VPTA== IGxpbnV4 KG9yZw== X01vdXNl LmNvbnN0cnVjdG9y IHpk IGtpY2tz YXJ0aXNhbg== IGVheA== S24= cG9uZ2U= IEZpbmxhbmQ= IG1ldHJlcw== IEFzc2Vzc21lbnQ= cGFydG5lcg== L3ByZQ== IScsCg== W0ludA== IG9zbG8= ZGF0ZXBpY2tlcg== L1N0cmluZw== b3BsYXk= IEhlYnJldw== LGRvdWJsZQ== IHRyYWJhbA== KyJc CUVJRg== L3RleHQ= X0ZJUlNU IFBldGU= IGVnbw== IGV4dHJhcw== UERP IHJlZ3VsYXRl IFFXaWRnZXQ= c3Rz IFNob3dz IE5IUw== LmNvdXJzZQ== cHRocmVhZA== IEZ1ZWw= LnRpbWVz IMKw IHN0cmlkZXM= KCQoJyM= KHdvcmRz IHJoeXRobQ== IHNwb250 IHNlbnNhdGlvbg== IHNwaWtl Q2xvc2luZw== 6aG16Z2i TnVtZXJpYw== IGJyZWF0aGU= IGZpbmFsZQ== X0ZBQ1Q= aW5pb24= IGNoaWxs IGZvcm1hbGx5 QU5HRUQ= ICc6Jw== INC/0YDQuA== YXE= IEZhYnJpYw== KGxhdA== IFByaW5jaXBhbA== IGVycm8= b2NhbGU= Tm9t IGZvc3Q= X0NVU1RPTQ== LmludGVsbGlq ZXJ0b29scw== IGNsYXNzZQ== YWRpZW50cw== IGZ1bmRyYWlzaW5n RU5F X09QVElPTlM= X29i Ly99Cg== IHByb3RlY3Rpb25z LnNlZWQ= TlY= dGVybWluYWw= Ozs7 UHJlZGljYXRl IOy2 IGJvbWJpbmc= R0Y= IGNoZXc= KSkpLg== cXVhbGlmaWVk XT17 bGlzdGVu Q0VOVA== ZGlnZXN0 RWFzdA== IGRpdmVy IGVuZHBvaW50cw== IGVl IGNvbGxlYWd1ZQ== IGRpc3NlcnRhdGlvbg== X2NvbW1pdA== X0RBVA== LnJj IGJyZWFzdHM= IFJ1Zw== IFBpbA== Q29udHJhY3Rz IEJyeWFu V2ViVmlldw== IGNvbmNlbnRyYXRl IElubmVy ICd8 c3Rkb3V0 X1N1Yg== Pi0tPgo= Vm9s IFNTRA== KSkpLA== Lk9wdGlvbmFs IG51cnNlcw== IG9yYg== X3Bl KTsNCg0KDQo= cGxhY2Vk ZXNzZXI= IHRoZXJhcGV1dGlj IHdoaXRlc3BhY2U= IGFzdG9u U3VjY2Vzc2Z1bA== IHByYWlzZWQ= IFdlcw== IGVpZ2h0aA== aXJhbA== IHZyb3V3 IGZhY3Rpb24= X2JpYXM= IHdpdGNo IG5wYw== KHNi IFJvZHJpZw== X2JpZw== RGVwZW5kZW5jeQ== IEFicmFoYW0= YXJkaQ== Q0FS bm9z IGFidW5kYW5jZQ== IG51dHJpZW50cw== aW5zdGVpbg== LlZlcnQ= IElTUw== PFU= IHN1bXM= X2hpc3Q= IGZhcm1lcg== IEFicg== U2hvdA== IEJhZFJlcXVlc3Q= IGhhc3M= IFJhaWxz IGFmZmlsaWF0ZWQ= 5p2l IGVyZg== SU5G IFZpZXdIb2xkZXI= bWluaQ== IFJvdGg= IGZhaXRoZnVs IFBoaWxsaXBz QU5ET00= XS5b X1BBWQ== IEFyY3RpYw== ZmFrZXI= RGlnaXQ= TWFsZQ== c3RkZXJy c2V5cw== IMWh X3JlbW90ZQ== bGlxdWU= IGluZGVm IEluZHVzdHJpZXM= aXRyYQ== X3BhaXJz PGlvc3RyZWFt IHNhbGFyaWVz aWtlbg== LkZyYW1l UExJQw== X1NQRUM= IE1lZGl0ZXJy IHN5c3RlbWF0aWM= IGludGVycm9n SWNvbkJ1dHRvbg== c2Vh aW50cm8= IElzc3Vlcw== ZW5jcnlwdGVk IGludGVybmF0aW9uYWxseQ== IHNucHJpbnRm IHBhc3Rh IEJyYWRsZXk= X1N0YXR1cw== QUxL X1BBRA== LmxhdW5jaA== PHNlbGVjdA== IGhhcmRlc3Q= IHBoeQ== ICgoKg== LXNsaWRl IE5vYm9keQ== U3U= IGFzw60= Y2xvc2VzdA== X2luaXRpYWxpemVy IHN1cHBvcnRlcg== LWdlbg== IHRhbGVz IGNvcnA= X2Z1 c2F0 bmVpZ2hib3I= Lk1pZ3JhdGlvbnM= IGFsZ3Vu IHNpbm9u LlNwZWM= PywK LkdM bWFsZQ== IG1vbml0b3Jz eWxhbg== LUxpY2Vuc2U= Lm1hdGNoZXM= IEFCUw== IE1hc3Q= IFdhbGxldA== KCQoIiM= RGlydHk= IGNvcGU= IGludGVycG9sYXRpb24= b3VzZWQ= IEpldHM= LkZMQUc= LkNhbmNlbA== LkV2ZW50cw== bmV2ZXI= IE1Ieg== PkQ= IHNlcnZsZXQ= YmFzdGlhbg== ID4m U0lE X2Nsaw== IGRpdmlzaW9ucw== fScsCg== IGRpbGRv IHBhcmFkZQ== bWFqb3I= IGFib2FyZA== Oysr IGZ1c2lvbg== In0seyI= IERpYWxvZ1Jlc3VsdA== CWFycg== LWVt X25y KGhhbmRsZXI= Lk5FVA== Llh0cmFSZXBvcnRz IFNoYWg= IEJyaWVm LSw= IHByZWNpbw== CQkJICAgICAg IHRhbnQ= IEdyYW5kZQ== L3htbA== X0lDT04= IFJldHJv dW5xdWU= IG5hZw== dG9GaXhlZA== WEw= IGRlY2xhcmluZw== IENvbmNyZXRl IEFtYXppbmc= CXByaW50aw== IGRlYmF0ZXM= REFURUQ= IGFlc3RoZXRpYw== ZW1ldGVyeQ== Um91dGluZ01vZHVsZQ== IE5hc2h2aWxsZQ== V0FZUw== IHdvbGY= IG9ic2VydmVycw== T1RB YW5zb24= IGVh IGdyZWVuaG91c2U= k43kvZw= IHN0YWly IGltbWlncmFudA== X2FwcGx5 cGVhcmU= IEJsb29tYmVyZw== X1BMQVlFUg== UmVzcA== 5q2j Q2hvb3Nlcg== IElDb2xsZWN0aW9u UGV0ZXI= RXJybw== LmRldGVjdENoYW5nZXM= TWFwcw== IHNxdWVlemU= IEhvbWVz d2VnaWFu IGZvcm1hdHRpbmc= IG5lZ290aWF0ZQ== dWxk IE5lcA== IFFC IGVjb25vbWllcw== ICovLA== IHJlZHVuZA== IEFiZXI= LklzTnVsbE9yV2hpdGVTcGFjZQ== eWNsZWQ= ICAgICAgICAgICAgICAgICAgCg== X1No IHNrZXB0 IHJlY3JlYXRlZA== IGdldFR5cGU= IG1hcmdpbnM= IGNvbG9uaWFs Y2hhcnRz Ly9A IHByb2Nlc3NvcnM= 6K+0 YmF0aXM= 5oSP YXRvcmlv bWVudGlvbmVk UGF0aWVudA== IHByZXk= Q2hlY2tib3g= X3hwYXRo LnNraXA= IE1vcm1vbg== IE1lbW9yeVN0cmVhbQ== Q1JFTUVOVA== IGt1 bWVsZA== XERhdGE= IEtlcm5lbA== aWx0cg== 6YCB KHByb2ZpbGU= Q2FyYm9u Uk9MRQ== KHBs XSoo Lm1lbW9yeQ== IG1lZGFs IGFkdmlzb3I= aXTDpHQ= IGhkcg== aWVydW5n IFByb3ZpZGVz KGFscGhh IHRlZW5hZ2Vycw== LXBhcnNlcg== LkxhdExuZw== XSgpCg== IGZlbG9ueQ== CQkJCgkJCQo= Qk9PSw== IHNsYXNo IGNsZWFyZml4 IFByb3BoZXQ= 5a65 cmlnaHRuZXNz LWZp LmtpbmQ= ZXJ0b24= Smlt IG1hbmlwdWxhdGU= IHdvcmtzaGVldA== b2xpbg== c3RhcnM= IGFydGlmYWN0 X0VNUFRZ CW1haW4= LS0tLS0tLS0tLS0tLTwv L3N0YXRpYw== SVRJRVM= IENvdW5zZWw= IFdD IEJMQUNL LXN5c3RlbQ== IFRyaXBsZQ== LmJ0 c29mdHdhcmU= XScpLg== SW5qZWN0aW9u X25vdGlmeQ== IGZpZnRlZW4= IGFtYmFzc2Fkb3I= YnJlYWtpbmc= VVJJQ29tcG9uZW50 IFByb3Rlc3Q= LlJlc2V0 IE1Qcw== dnJv LmdldFN0YXR1cw== X21vcmU= Y3Vw IEtlbnlh 5bey IGFtbXVuaXRpb24= 15XX IERhc2g= IHVuZGVyZ28= IGJ1ZGR5 0YLQvtGA ZXRpY2FsbHk= X091dA== IEJyb2Fkd2F5 qow= IEZpdHo= IHN0cmlwcGVk LWNhY2hl IHVtYg== IGFub20= IHNpYmxpbmdz b2N1bWVudGVk SW50ZXJydXB0ZWRFeGNlcHRpb24= IHBlbmc= bHN0 X0FMSUdO LWNhcA== UkQ= Y2VsbHM= IE1vdG9ycw== IHRyYW5zbGF0aW9ucw== dXN0ZXJpbmc= 6Zo= IGxlYWtz ZmlsZVBhdGg= IG91dGdvaW5n X2VuZHBvaW50 X0dM LmxpZmVyYXk= cmljaHQ= IE9wZW5HTA== LmpwYQ== IGFmZmVjdGlvbg== Zmx1eA== IGdseQ== IGJ1ZA== Pic7 IGV4cHJlc3Npbmc= IElR IEZhY3Q= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK X21hc3M= KSk6 IGNvbmRvbQ== IGNyZWF0ZVN0YXRl b21ldG93bg== IGlycg== ID4o PkI= aXRlcmF0aW9u 44Oq IHNoaXJ0cw== b3VudHk= LT4k X1NJR04= IERhbGU= IGpq RWFzeQ== RnJl IE55 IGNobG9y bWF0Y2hlZA== IEdlcm0= LVVB IE5hdGhhbg== ZWR1Y2F0aW9u LXlhcmQ= LWNoZQ== aG91c2Vz cml0aW9uYWw= IHByb3hpbWl0eQ== IGRpZXNlbQ== 4bqtcA== IGRyb3VnaHQ= LmF1ZGlv IExlbw== IGZhdm9yYWJsZQ== aW5jaA== IERhdw== cmlibHk= X3N0dWRlbnQ= aWRhYmxl T1ZF IGxhY2tz b3VuY2luZw== LmJ1c2luZXNz IHJlb3Blbg== bWF5YmU= X0dMT0JBTA== IGRyZXNzZXM= IEVkd2FyZHM= ZW5zaWJsZQ== IEhhcmR3YXJl IEV4Y2VsbGVudA== IFRpbWVVbml0 Q1RJT05T IHNjaGVkdWxlcw== IHNlZ3Vl T3BlbnM= YW1tZW4= LUlkZW50aWZpZXI= IHN0YXJpbmc= IGhhcHBpbHk= IEhvYg== J18= ICIpOw== YW1lbnRvcw== ZXRjaGVk IC8+fQo= LlVzZXJz IGludGVycnVwdGVk Q29udGFjdHM= IHJlZ2lzdHJv aW5idXJnaA== Q0hB X2ltcA== cGhpcw== c2F5 IHJldGFpbGVy Lk5PREU= L21hcHM= X0xBU1Q= IENoYXJnZQ== X2d1YXJk Q29sbGlkZXI= IFN0YXRlbGVzc1dpZGdldA== IjpbIg== KCIuLi8uLi8= aW94aWRl IFN1bmQ= ICcnOw== dW5zZXQ= YWRkV2lkZ2V0 0LvRjg== ZWxsZXM= YWxrZXI= QXJj IGRlZHVjdA== R1VJTGF5b3V0 IFZpbGxh IGZvcmJpZGRlbg== X3doZXJl IFwv IFRpYg== X0FY XQ0KDQo= IEJpcg== IGJlbmQ= IE1BS0U= IE1FVA== IGZ1dHVyZXM= IHdlaWdodGVk IiIiDQo= IGF1dGhvcml6ZQ== KHByb2dyYW0= fSx7Ig== IGNvZWZmaWNpZW50cw== w6pz UGVyUGFnZQ== IEJhdGhyb29t IFB1Ymxpc2hpbmc= R1BM IHN1Ym1pc3Npb25z IE5VTUJFUg== asSF IGFkZGl0aW9uYWxseQ== ZW1wcmU= IFNoZWw= b3R5cA== U29sdXRpb24= IHRodW5kZXI= X2Vj IAogICAgCg== IEZlbGxvdw== IGtheQ== IG5ld1N0YXRl T05UQUw= SW1wbGVtZW50YXRpb24= Lkxvb2s= IGVudHM= IGxvcnM= IEJJRw== ZmFi IGF2ZXJhZ2Vk IEZlZWRiYWNr IFdlbGxz IG1hcnRpYWw= IGluZHVs IENvbW11bmlzdA== IEZvcmV4 IEFncmljdWx0dXJl Ils= IHF1YXI= IEtvbnQ= CXZpZXc= LkJ5dGVz ZGVza3RvcA== IE1ha2Vz YWtlc3BlYXJl Lk51bGxhYmxl IHNwb3RsaWdodA== VkI= b3d5 KHRvcmNo dHJpZGdl X2JvdW5kcw== IGFwb2xvZ2l6ZQ== LmFkZEl0ZW0= YW50ZA== Kik7Cg== LHU= KGdlbg== 57uT cmVhdG9y IENvcmQ= b3VwcGVy Lm1ldHJv IGV3 IFdPUkQ= LkFmdGVy IGRldGFpbmVk IEhhbW1lcg== ZXhpc3Rpbmc= IG9zdA== IG1vbnVtZW50 LWN1c3RvbQ== VXNlcklE IE5vbQ== IHJlamVjdGlvbg== KGRpbQ== IHNpbmdsZXRvbg== CWRpZQ== YXJpYW5jZQ== cmVwb3J0cw== XSE9 ZWxkYQ== IHByZXZhbGVuY2U= X3JlZ3M= LiIu IGZlbWluaXN0 Q29kZWM= ICoqCg== KGxhYmVscw== X01BUks= RkFJTEVE IGFkbWluaXN0ZXJlZA== V04= ICAgICAgICAJCQ== IG5vdW4= d2ln IGdvdHRh IHJpZg== LWlt IFBhdWxv IENvbW1hbmRUeXBl XSkpCgo= LXplcm8= VHJhaW5pbmc= IGxvcmQ= X2FydA== cmVkZGl0 Q2VydA== IHBlc28= Um90 IGVuZGFuZ2Vy LmRy dXNlckluZm8= dW50cw== bnY= IFRyYWlsZXI= LWZpcnN0 KG1ha2U= IGJlbmVmaWNp LWJsYWNr acOf IHVuZG91YnRlZGx5 IG1leA== IEFuY2llbnQ= KGFz IGRlc2NlbnQ= UGljaw== IHJlcGxpY2E= JG9iag== w6Rocg== IGFycm93cw== ZnR5 IExpYnlh dWdh Y2hhcmdlZA== VHVy IGhvbWlj aXNzZW4= IEZha2U= IGJlZXJz IHNjYXR0ZXJlZA== KFRpbWU= VVRJTA== IGJ1cmVhdWNy L3BsYWlu IHN0aWNraW5n RkFJTA== IENvdmlk VGhpcmQ= X3ByZXNlbnQ= IFBpZXJyZQ== IOuq IFsuLi5dCgo= UHJvYg== IFRyYWZmaWM= aWNhbw== ZG9jdG9y ICksCgo= VGFicw== YWx1 77ya4oCc IGluaGVyZW50 X05v cml0aXM= IFByb29m LmJhc2VuYW1l 5Lya IGNoaW0= IFByb3RlY3RlZA== Y3JpdA== IHByb25l INC60L7QvQ== IEhlcm9lcw== IGFueGlvdXM= IGFub3M= IHdlZWtlbmRz IHNleHQ= IHJlZHVjZXI= PVVURg== aGFsZg== IFNhdw== Lm1t IG51ZXZh LmN1cnJlbnRUYXJnZXQ= Lmx1YQ== X0VYVEVOU0lPTg== CXJlZw== IEN0cmw= X2FsaWdu YWNjZXB0YWJsZQ== IHJ1c2hpbmc= ZnJhYw== IGJvYXN0cw== Rml2ZQ== wrE= IFRlbXBlcmF0dXJl Pik6 IGNoYXJ0ZXI= UkVBVEVE IHN1YmplY3RlZA== IG9wYw== aGVhbHRoeQ== 5L2/55So IFNjaWVudGlmaWM= IGZyYXU= cmlhZ2Vz 4LiU LmludmVudG9yeQ== YXRpb25hbGU= TWFk bWludXRlcw== Pj4oKTsK IEVudg== IHJlY29yZGluZ3M= IHN1c3BpY2lvbg== c3FsaXRl CXJlYWQ= 44Gm IHdvcnJpZXM= LnB1dFN0cmluZw== IFNoYW5naGFp KHVpZA== cmVy IHbDrWRl Iik6 IG1ldGhvZG9sb2d5 INC60L7RgtC+0YA= Y2Nj YXZhZA== IGluZHVjdGlvbg== CVRocmVhZA== LHN0cmluZw== 4bqhaQ== bmVobWVu dWl0aW9u ICpfXw== LmVtZg== IOyc L3RoZW1lcw== IE5pbmU= Lk9uZQ== IEVtYmVk IGZheg== dWF0aW9ucw== IHByaXZhdGVseQ== IGxpbmc= W0Y= dXNoaQ== IGxhdW5jaGVz KEtFWQ== R01U IGFpbWluZw== cGF0aWJsZQ== IEJpZGVu aXc= IERlZ3JlZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= ICQoJzw= w6FyaW9z dG9VcHBlckNhc2U= 7KCc IEVVUg== IG92ZXJzaWdodA== IHRhYmxlc3A= VXBkYXRlcw== Lm1ha2VkaXJz IGh1bWlkaXR5 L3RlbXBsYXRl QWx3YXlz KElT X2NlcnQ= RGln IHVuZGVyd2F5 b3J0b24= IEh1cnJpY2FuZQ== IHNwZW5kcw== IFNlZ21lbnQ= IGZsaWVz IFRvZ2dsZQ== IEx5bmNo IHNlbnNlcw== IEtvcw== c2V0RW5hYmxlZA== aXN0aWNhbGx5 IHRlc3Rlcg== IGFkbWluaXN0cmF0b3Jz IHRhZ2dlZA== 0JM= IHNob3J0Y3V0 IFJlc29sdXRpb24= IHN1cGVydmlzaW9u IEFzaGxleQ== VHJhY2tpbmc= dWxhdG9yeQ== YW5kZWw= aXN0ZW4= IHVucmU= KGRpZmY= QU5UUw== IHJpZGVy IHPEhQ== LlNlcmllcw== X29yZGVycw== T1JJWk9OVEFM IHJldGVudGlvbg== 44CCPC8= LlRlc3Rz U3lu LnBhcnNlRG91Ymxl a29kZQ== emVudA== R2VuZXJhdGlvbg== IGFkbWl0cw== IExlYWs= IGFrYQ== Uk9XUw== IEFuZ2VsYQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5vb24= IHN0YXJr IGRyYWdnZWQ= 44O844I= IHJlY3ljbGVyVmlldw== IFNpbGljb24= X3N1ZmZpeA== Sm9u Y29jaw== IFByb2JhYmx5 SW50cm9kdWN0aW9u IFRlcnJvcg== KFRoaXM= IEJhc2ViYWxs IGplbnRlcg== Y2hlc3RyYQ== Lm5hbg== PWc= IGNsYXJpZnk= eWlp cm9vdHM= IG5vdGVib29r IEV4Y2VwdA== IHJpc2Vz IEJydXNzZWxz YXRvcmllcw== LlVTRVI= cm9zc292ZXI= L3VwbG9hZA== IEV2ZW50dWFsbHk= Q29uc2lkZXI= IEJvdW5k LmlkZW50aWZpZXI= KHVuaXR0ZXN0 IGluZmVyaW9y IGNyYw== IGF1dGlzbQ== VUlBbGVydA== IEthdmFuYXVnaA== aW5lbWVudA== cXVldWVSZXVzYWJsZQ== U2tpbg== LmJhY2tlbmQ= LmdldFN0YXRl dW5kaW5n IHN1YmNsYXNz IHJlZmluZWQ= IGFubm95 IHJuZA== RGlyZWN0b3I= IOuC YmVjY2E= bW9uZ29kYg== IENvbW1vbndlYWx0aA== QXo= IFRoaW5n IHJlY29t dW5pbmc= CWNvbg== CSAgICAK ZW1pY3M= ZWNk IGhvcm55 QVRSSVg= IG1pc2xlYWRpbmc= IEJldw== L25vZGU= Y3N0ZGlv 4Lin IGFkZGl0aW9ucw== cmly X3JlcXVlc3Rz IHJlY2hlcmNoZQ== c3R1ZGVudHM= X3Bvc2l0aW9ucw== ZXJ0ZXh0 IEV2b2x1dGlvbg== YW5kZXo= IGRpc3R1cmI= a2V5dXA= IEJ1dGxlcg== LnJlYWRsaW5lcw== X3N0ZGlv IGJlZQ== IEFyY2hpdmVz IG5ldmVydGhlbGVzcw== VVJJVFk= IGRyb25lcw== dXJpdGllcw== IOKYhQ== Ij4NCg0K IGRpYWdvbmFs IENhbmNlbGxhdGlvblRva2Vu X0ludGVybmFs IHJ1aW4= LlF0 b2NyYXRpYw== VGVs IEFuc3dlcnM= bWF0aWM= IHhw YXRlbQ== X2pvYnM= X2FueQ== IHNlbmlvcnM= IGxhbmRtYXJr IFFMaXN0 IG1hbmV1 b3RpZnk= LyI7Cg== L3NlcnZlcg== IFBoaWxvc29waA== dXRlbmFudA== KGlv aHo= IGF1dGhlbnRpY2F0ZWQ= ZHY= LUNvbXBhdGlibGU= T3JpZ2luYWxseQ== LGZ1bmN0aW9u 44CCDQo= IFJlcHJlc2VudGF0aXZl YXNpbHk= aXJjdWl0 LmR0 KG1hdGg= Lk1hcnNoYWw= Wyw= IENpdGllcw== X3R1cm4= fCkK IGNhbnRpZGFk YWx0ZXI= CXVp IE5lYnJhc2th IHNraXJ0 LmJn U2hhcmVkUHJlZmVyZW5jZXM= KHN0eWxl IGdyaWVm Z2V3 IHNhZmVn b2xhbmc= X2xpc3Rz 7Js= IGdyYW5pdGU= IGhvdHRlc3Q= LmpkYmM= LkN1c3RvbWVy IOKJpA== IHdhYXI= X3NjZW5l Kycv IEpUZXh0RmllbGQ= IHNlYXRpbmc= IHdlYXJz IGAv Q2FzZXM= IFlvdXR1YmU= xLFt IGJhbGNvbg== LEc= TWV0YURhdGE= LXByaWNl U0NS VW5pdHk= IHRydW5r PXtgJHs= IGVhcnRocXVha2U= UGFydGlhbA== IHN1YnN0 IGVsaW1pbg== PSInLg== Ly8qW0A= IHN1cGVydmlzb3I= dnJvbGV0 X2FydGljbGU= IHBhbmU= Ymlv IG1vdG9ycw== Tk0= RnJhbms= IG9uaW9u LXdvcmQ= SXRlbUNsaWNrTGlzdGVuZXI= IGJyaXQ= ZW5kZW5jaWVz Q29tcHV0ZXI= X3J1bm5pbmc= KGRheQ== LWhl KG5hbWVk IFNhY2g= 0L7Rhw== Y2FtcGFpZ24= LkFic3RyYWN0 KHdyYXBwZXI= LnBheQ== IHV3 R2Vv cmFpbHM= L3NlbGVjdA== aWNodGU= c29ucw== RVZFTlQ= IGFsaW1lbnQ= UHJvdmlkZXJz QXdhaXQ= X0lOVEVSVkFM Lm9mZg== IGdsdXRlbg== X2Nsb3Vk IHdlbg== LmV4dHJhY3Q= CWJ1dHRvbg== L01N UGFydHk= IGRlbW9ncmFwaGlj X2Vycm5v IGhpa2luZw== KCcnKQo= IixAIg== IHdpdA== csOh b2xvZ2ll IFN0eWxlcw== IEJyb3dzZXJNb2R1bGU= LlJlcXVlc3RNYXBwaW5n aWNhbnM= UEFHRQ== Y3JlYXRpb24= IEZlcmd1c29u dWRlZA== bnVtYmVycw== IEdUSw== IHByZXNlbnRhdGlvbnM= IEJvYmJ5 X3NwYW4= ZXN0eWxl IGlsbGVnYWxseQ== YWJlbGE= IGJhdHRsZWZpZWxk Y2FwYWNpdHk= dGVycm9y XSIpOwo= IHdhcnJpb3I= bGVhZGVy IERCRw== IFJldmVudWU= IHZpZ2ls IGNvdW50ZXJwYXJ0cw== KEVycm9y QUNURVI= IGhlZWZ0 IHNlbGVjdGlvbnM= emV1Zw== dG9t LXR3bw== LjsK X3N0YXRlbWVudA== IEFpZA== IFZ1bA== X3JnYg== IHByaXplcw== IGVkaXRhYmxl CWZvcm0= xLFuxLE= LmRlY29y RGVtbw== bGljZXM= IGVuY3R5cGU= cmF0dWxhdGlvbnM= IFJPUw== X2NoYXJz IEphaHI= cGFydGlhbA== 0YPRgg== IFJlY2VpdmU= IExhbmRz QVBURVI= IGNob3BwZWQ= Li4i IEFuYWx5 IFVJRA== IFJhZGVvbg== IEJlZQ== IHVubQ== Pk0= LmZpbmRhbGw= VG9rZW5pemVy IFdIQVQ= IHNq RHJhd2luZw== RXNz T05E irY= KHBhY2tldA== 4oCUYnV0 SW52b2NhdGlvbg== IE51Y2xlYXI= PzsK IGdyYW5kZXM= IENyeXB0 cmVtYXJr ICcuLi8uLi8uLi8uLi8= IGluYWJpbGl0eQ== bWFnaWM= Y2F0cw== IHNpbXVsYXRl OiR7 aW5mbGF0ZQ== IGVuZXI= Ok5P aXBsZXM= IG1lcml0 IFJhdGVk IGdsdWU= L2Jsb2c= IGdyZW4= IHRocmlsbGVk LkNI dW5jYW4= IFBSSU1BUlk= IHBlcnNlYw== IGZlYXJlZA== Lk1JTg== IFRoZWF0ZXI= 6ZI= YXRlZ29yaWU= 5q61 IGFwcGV0aXRl c3F1YXJl IEFsZXhhbmQ= LlVzZXJJZA== X2d0 X2VudGVy IGdyYWR1YXRlcw== RnJhZ21lbnRNYW5hZ2Vy QXV0aG9yaXpl LU5MUw== KE15 IHRyaXVtcGg= dXN0aW5n X1BBUkFNUw== Q2hhcmFjdGVycw== KDosOiw= X0JVSUxE TUh6 IHdhc2hlZA== IHVuY2xl U3RldmU= YXJkb3du PHN0ZGlv X3Rlcm1z IE1BUg== IGhvc2U= dWN1cw== IENsYWlt IFJhbXM= IG1vZGVsQnVpbGRlcg== IG7DqQ== dXNlcklE PWpzb24= LlJlc3BvbnNlV3JpdGVy mOiupA== IGdydXBv LWl0 IEtP LU1haWw= IGNvbmZlcmVuY2Vz SUZB IEFzc2Fk IHByb25vdW5jZWQ= IGFuY2VzdG9ycw== IFRSQUNF IEdlRm9yY2U= IHByaXZhdA== cGVsbA== ZW1vamk= INmI R2VucmU= IGNvbmNlbnRyYXRlZA== amFuZw== TU9URQ== IFpvb20= dG9vbGJhcg== IHV0dGVybHk= IGVuY29tcGFzcw== IFNvY2Nlcg== IGV1cm9wZQ== LWFpcg== LmFuaW0= X0NUTA== aGVyZW50 cmV4 aW50ZXJhY3RpdmU= 44Gn44GZ IEthcw== IGRlc3BlcmF0ZWx5 KGFy IGJpaw== IHRyYXZlcnNl ZXVycw== UmVjeWNsZXJWaWV3 IE1hcmdhcmV0 IGhvcGVmdWw= IE1pZw== X01FTUJFUg== cmVjZWl2ZXI= TWF0Y2hlcg== ZGVwZW5kZW50 IGV4Y2VsbGVuY2U= 0LDQtg== TE9T QXNwZWN0 IGFkYWxhaA== IEVjb25vbXk= dWxvdXNseQ== IGV2YWx1YXRpbmc= IGRldmlhdGlvbg== ZXh0ZXI= L2RhdA== Q29scw== IFBva2Vy Ym9hcmRpbmc= LkNoaWxkcmVu QU5HTEU= w68= IFlvZ2E= IGhhdGVk QWRhbQ== IEZDQw== SU1BTA== IGZhaW50 X0RJU1BMQVk= IGV2b2x2ZQ== IGZyaWRnZQ== IHLDqWc= IGVtb3Rpb25hbGx5 4oCcSWY= YXdlaQ== ZXJlc2E= Jywi QkVHSU4= IFZBUkNIQVI= IHhp ZmFjdG9y dHo= X3BoYXNl U0VR KHJhbmQ= IG1hdGhlbWF0aWNz IGNvbnRleHRz LWFj IEZJRw== IENhcHRpb24= IFdhaXRGb3I= LXdlc3Q= IGZpcmVmaWdodA== X0xFRA== ZWN0aW9ucw== CXRocm93cw== IFRha2Vz b2JyZQ== IEF2YXRhcg== IElubm92YXRpb24= IGNhbGlicmF0aW9u OnRoaXM= X2VuY29kaW5n IGNhbGN1bGF0aW5n ICMjIyMjIyMjIyMjIyMjIyM= IFByb2dyYW1z IEhJR0g= LmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGU= UG9seWdvbg== X0RCRw== Il0sDQo= 0LDQsQ== IHNpbWlsYXJpdHk= IHByemV6 IEZpcm0= IG1pc3VuZGVy IE1vdmluZw== IE1PVg== IHJlYWN0b3I= UmVxdWVzdGVk ZXhwZWN0cw== IGVyZWN0 bGljaHQ= b3VsZGVy SURHRVQ= IGRldmls IHByb2dyYW1tZXM= IENvbW1vbk1vZHVsZQ== ICInIg== KEF1dGg= 44CC77yM IFN0YXRlZnVsV2lkZ2V0 6K6h L29wZW4= aW5hbGx5 LlJvdW5k IFdpc2g= IGh1bWFuaXRhcmlhbg== QWNjZXNzVG9rZW4= IFNPQw== IHBva2Vtb24= IHZhcG9y X2FkZGVk CUdldA== c3BlbGw= IEluaXRpYXRpdmU= IEhFTA== YWlycm8= YmxlZA== INCx0Ys= IHNlbnNpYmxl IEx1YQ== fCgK IGZpeHR1cmVz IG9yZ2FzbQ== Q3V0 dWt0 Z3Vl IGNyZWRpYmlsaXR5 OmltYWdl IENQUA== LnNu KGRlc2M= IFJlaWQ= LWRlZ3JlZQ== X3NvdW5k Q2xvbmU= 4buZ YWtzaQ== PiR7 X2NvbmZpcm1hdGlvbg== IHRyb3BoeQ== V29ya3M= IEVsZWN0cm9uaWNz IE1lZGl0ZXJyYW5lYW4= X21ldHJpY3M= IGFubm91bmNpbmc= IERBWQ== X3Byb3Rv IHBlYXI= YmFzZVVybA== CQkJCQkJCQkK IGNvb3JkaW5hdGlvbg== Ok4= LmFuaW1hdGU= IENvdHRvbg== X2hpdA== 4pw= IGpldHp0 aWZ0ZXI= KGZpZWxkcw== b3dubG9hZA== aWZpY2FjaW9u LmN1ZGE= IExpdQ== PmVxdWFscw== IEFjZQ== 0YDQsNC8 IFN1cGVybWFu IEdhcmNpYQ== IGFycmVzdHM= YWdhcg== IHt9KQ== IG1hY3Jvcw== cm91cGU= w6p0cmU= IHR3aXN0ZWQ= c3RydW1lbnRz Xygi X3ZlcnRpY2Vz IFRyYW5zaXRpb24= 0LjQug== W21heA== bWluZA== IGFjY2Vzc1Rva2Vu IHVubGU= bXVz Y29w IEZhY3Rvcg== IGNvbmNlZA== IHJldHI= LmxpbmFsZw== LXNsaWRlcg== b2Js X1N0YXRpY0ZpZWxkcw== IHpvbWJpZQ== c2VsbGluZw== IGNoYXA= IHNoYWtpbmc= IFRyYW5zbGF0ZQ== IEFtc3RlcmRhbQ== IEVUSA== X0VYVEVSTg== a2Q= X2Rpc2M= IHByZWNlZGluZw== IHByaXg= T2JqZWN0TmFtZQ== X21vZGlmaWVk YXJkd2FyZQ== ID8+Ij4= IERX YCR7 ID8+Ij48Pw== dXllbg== IGRvbm5h IHhzaQ== ICQiew== IERyYXdpbmc= LG5pbA== IG9uZGVy Qkc= T2JzZXJ2 IGNvbnNpZGVyYXRpb25z Ym9hdA== IEJhbmtz IGluZGljdA== LEk= IEJsdQ== KHZlcnNpb24= Y2xpZW50ZQ== b2xhbg== TEVTUw== YXNzZXJ0U2FtZQ== X3ZvaWQ= IFdBUw== CWVudW0= IG1peGVy RVc= YWZmZQ== IGJsb3dqb2I= dGV4dEZpZWxk IGltbWVuc2U= X3JlcG8= IGdsb2JhbHM= YW50YWdlcw== LnRvZGF5 VGh1cnNkYXk= IEJyaWc= e30pCg== IEltYWdpbmU= KEdQSU8= IGVzdG8= IFByb3ZpbmNl IE1lbnRhbA== X2NlbGxz IEp1bGlhbg== LlNjcmVlbg== IGNhbmRsZQ== IG1vbmRl IHZlcmc= aXRlcmFscw== LWxheW91dA== R3Vlc3Q= IHZpbmQ= IEVjaG8= Jyl9 IG1hbm4= X0JPT0xFQU4= aGFw IG5pZ2h0bWFyZQ== VUdI IG5vbmV0aGVsZXNz IGF0aGU= IEhvbGxhbmQ= IEJvcm4= XE9STQ== YW51dA== X2xldmVscw== IHBldGl0ZQ== LWFydA== X1NIT1c= bnVtYmVyT2Y= X3RodW1ibmFpbA== YW1pbnM= IERlZmluZXM= ICI9 LlN0YXR1c0NvZGU= IGRpZ25pdHk= IEJpa2U= Lk5ld0xpbmU= IEdsYXM= KGxvZ2dlcg== IGNhdGNoZXM= dm90ZXM= IGV4YW1pbmluZw== L3JlZ2lzdGVy IHNwZWNpZnlpbmc= X2ZpeGVk IGRyYXdpbmdz VGhyZXNob2xk QXg= IEFyY2hpdGVjdHVyZQ== KHBpZA== V2lyZQ== KGNvbnQ= bGFuZQ== TGlzdHM= IHNwcmludA== IGdyYW5kZmF0aGVy X0FH IHNjaGVkdWxpbmc= Q0xVUw== YXR1cml0eQ== IGxvY2tpbmc= W3NpemU= X3N0eWxlcw== IHdi LS0+Cgo= IHNwaW5uaW5n X3BlbmRpbmc= TWF0Y2hlcnM= LktleXM= IFBW ZW51cw== YW50aXM= IGRpc2NhcmQ= IGhhdWw= IGVtcGly IHBhdGh3YXk= IG9haw== 0LzQtdC9 LWluZHVjZWQ= IGltcGFpcg== IENhbGdhcnk= LmlzSGlkZGVu ZHo= X2luY2x1ZGU= IGdt ICcoJw== UFk= dWdnZXN0aW9ucw== IGNvbW1vZGl0eQ== Y3Jv L3N1Yg== IGdldEluc3RhbmNl IExlZ2FjeQ== IEtpbA== QmFs KHNob3J0 SW5mb3Jt K3g= KnI= IEhvcGVmdWxseQ== b3JhdGU= IG1hY2hlbg== IHRyZWF0eQ== IE9yaQ== LnB1YmxpYw== LWhvcml6b250YWw= IHRhY3RpYw== IGJvcmQ= d2FyZXM= IGFtbW8= IExpc3Rz IGVxdWF0aW9ucw== L2hlcg== IE5TVw== Qm91bmRpbmc= X0NvbGxlY3Rpb25z IGF2YWls LkRyb3BEb3du 6LA= IGho IGzDoA== LnBi IG1lbW9yaWFs IEFUVFI= IGV4aGF1c3RlZA== IHRzcA== CXJlZGlyZWN0 IGxpa2V3aXNl U1RFUg== TGphdmE= IGNvbmRlbW5lZA== b2NhdXN0 KHN0cmljdA== IGV4ZW1wdA== IHNtcw== IGV4YWdnZXI= U1lT IGxvdW5nZQ== Ol4= IHRvZGQ= ZGVi YXRvcmlhbA== IFBvcnRlcg== IHR1aXRpb24= IGV4ZW1wbA== IHBhcmVu LmxpbmVUbw== IGtpZG5leQ== IMOnYQ== IGN1aQ== 77yM6K+3 WEM= IG1vxbw= IG5vbWluYXRlZA== bHVuZw== SW1HdWk= IEJ1eno= IHN0ZXJlbw== cG9ydGFs cmVzYXM= IGtsYXNz IGRyYWZ0ZWQ= IHByb2plY3RpbGU= L2dwbA== KHBhcmFtZXRlcnM= KikK IGFzc2lzdGVk IE5TSW50ZWdlcg== c2l0ZW1hcA== Om50aA== LlZpZXdz LkFyZ3VtZW50UGFyc2Vy IG1lZXI= emllcg== IERpZw== PD89JA== X3Blcm1pc3Npb24= CUFkZA== b2xvZ2lh IHNjaQ== IGZpbmFuY2lhbGx5 IHNjcm9sbGluZw== LmRpc3Q= X0hBUw== dWJ1bnR1 LnBhZ2Vz SW5jcmU= YnVyc2U= IEFtYXRldXI= 5rqQ QmxvYg== IGNob2xlc3Rlcm9s REVT bWluaW11bQ== IHJlZnVzaW5n dW5uZWQ= 0Jw= IFJE LlNlcnZsZXQ= ICovOwo= dWRkZW4= IHZpZXdCb3g= IG1ldGFib2xpc20= IHN0ZWFsaW5n IEJldmVy YWduZXRpYw== VkVSUklERQ== X0FVRElP 0YDRiw== IGFyY2hpdmVz LmxpbmVhcg== PXs8 dW5jYXRlZA== QWNjZXNzRXhjZXB0aW9u IHBpY3R1cmVCb3g= CXNlbGVjdA== TGF0aXR1ZGU= dmlzb3I= cmVpYg== IHBhaw== SG9wZQ== IEl0ZXJhYmxl LnJlc3BvbnNlVGV4dA== IFF1YWQ= IEJyb29rcw== IFRvdA== T1BU ZWxvbmc= IGNvY2FpbmU= IGFubw== RGFu IHBzaQ== 0LDQu9GM LmdldENoaWxk IFJFRg== LWFi IFRyaWFuZ2xl PFRleHQ= IENvbG9tYmlh aW5reQ== 6Imy KX0+Cg== IHBsYWc= cGluZQ== IGJsYW5rZXQ= IDo8Lw== IFRyYW5zbGF0aW9u bm92 IHBlcmZlY3Rpb24= IENvbmZlZGVy LnN0dWI= LkludGVyb3BTZXJ2aWNlcw== LlN0b3Jl IGVucm9sbG1lbnQ= IGRlZXI= TW92ZW1lbnQ= LWZyb20= aGM= IGV2YW5nZWw= IElsbHVzdHI= IHRydW1w X1N0YXJ0 cGxhbmVz IEJpbA== SW5mb3M= LXRyYW5z IHJhbmNo IExpbmRh X21hcg== UkVU L25ldA== TGF3 TkY= IFByZXZlbnQ= IGNyaWVk IGVkdWNhdGU= YXN0aWNz eWk= LkxpbmVhckxheW91dA== TUVUSE9E IEVn bWFwcGVy 5pmC LmFzYXJyYXk= z4E= acOnw6Nv UmV1c2U= X3Jldg== IFBST0RVQ1Q= X0NvZGU= ICAgICANCg== IFNFUlZJQ0U= X2NvdmVy LiwK LkV4ZWN1dGVSZWFkZXI= IERpbmluZw== LmFyY2g= IG90cm8= IERpc2NvdmVyeQ== IEtleUVycm9y IEJlbmVmaXRz X1NIQQ== LlVubWFyc2hhbA== SEVBREVS TXV0ZXg= QU1B IGluaXRpYXRl U3RheQ== TGl0dGxl ICgpLA== IGRlY2VudHJhbA== UmVzb2x1dGlvbg== LmhlYWx0aA== CWZjbG9zZQ== 5Lqk IHN0YWtlaG9sZGVycw== IGFyY2hhZQ== RGlnaXRhbA== bGVzY29wZQ== X3Blbg== IEl0ZW1TdGFjaw== IENhbm9u IEtlbmQ= IMO4 X2FqYXg= aW5ncmVkaWVudHM= RGVsaXZlcnk= U2VjdGlvbnM= IGRpc2FwcG9pbnRpbmc= IEdyZW4= LHJl IGRlY3J5cHQ= b2xvZ2lj X2ZtdA== IFNsaWRlcg== bmFo V2FzaGluZ3Rvbg== enVuZw== INGG eWN6 aWV2ZXM= LkRFQlVH IFRJ IGhhY2tpbmc= IGNlbnRy Zmxvd3M= IGRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n IGFjY291bnRhYmlsaXR5 Q09VTlQ= 0LvQtdC80LXQvdGC Ymxv L2lk IFNsb3c= aXp6YXJk LnJlbW92ZUV2ZW50TGlzdGVuZXI= IOyehQ== L0k= aXNtYQ== IEh1ZHNvbg== fX0s dW1lZA== IHJlYWxpc2U= dW5zYWZl IHp1cw== IHNob3J0YWdl b2xpYQ== X3ByaW9yaXR5 IGZsb29kaW5n b3BlcmF0aW9ucw== UG9seQ== YWJhbg== W2N1cg== IGVza29ydGU= X0RFU0NSSVBUSU9O X25hdA== IG1hbGljaW91cw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IFBhcmtz IHRheHBheWVy IEZvc3Rlcg== IHNleHVhbGl0eQ== 57O7 67A= XA0K LnNlZWs= 0LDQvdC40Y8= L2FydGljbGU= 6L+H IFVocg== IGdyYW5kbW90aGVy IEJsZQ== ZnVydA== YW1iYWg= bm90aWZpY2F0aW9ucw== ZGVwcmVjYXRlZA== IHVpbnRwdHI= b2tp KEFycmF5 IGF1dG9ub21vdXM= IG9icg== wq/Crw== IGJhc2VuYW1l IHVudmVpbGVk c29s IE5vdEltcGxlbWVudGVkRXJyb3I= IGRlcHJlc3M= XycuJA== IFVOSVQ= JScs LXRhZw== Z3JlcA== IE1haW50ZW5hbmNl IHdhcmZhcmU= X1JFU09VUkNF KHNwZWM= KGN2 IG5hZGE= 55S1 IGNyb3dkZWQ= QmVsb3c= IFphY2g= RXN0YWRv X3ByaW1l IHRyYWJham8= IGluZm9ybWF0aXZl U2NvdHQ= IHNlcmlhbGl6ZXJz IE5hcw== VGh1bms= IG1lcmN5 LC4uLgoK IGFkZGljdA== LmNvbnN0YW50cw== IGRhdGFmcmFtZQ== X3JlYXNvbg== Z29tZXJ5 7Iq164uI64uk IG5lZ2xlY3Q= IExpbmVz IG1lbWI= X0VYRUM= YXNzYWdl IFlhcmQ= e30nLg== IGxvdHRlcnk= dGVpbg== X2NhbGM= aWt1 X1JFQ09SRA== V2Fybg== IGhlYWx0aGllcg== dXJlbWVudA== IHlhcm4= IENvcm5lcg== KHppcA== KGluaXQ= IExpdA== SFc= c3Vic2V0 IE1G RVRFUlM= X3JvdA== IGVyZQ== IE92ZXJyaWRl V2FsbGV0 X3Jld2FyZA== IHNhZ2U= c2V0VmlzaWJsZQ== IEpzb25SZXNwb25zZQ== SUNZ 6K+i VmFyQ2hhcg== YWF0 LWdyZWVu IGlycQ== YW5pdHk= IHdob2V2ZXI= X3NoYXJl IGZvdXQ= cm9sbHM= IHdpbGxpbmduZXNz LmNvbXBvbmVudEluc3RhbmNl IGhvbm9yZWQ= dXJ2ZXk= QmVy IHJ1bm5lcnM= IGxpZXU= b3Jwb3I= X3N0cnVjdHVyZQ== QmFyQnV0dG9uSXRlbQ== YWR4 IEJlbm5ldHQ= IGRpbGln IGZsdWN0 SURERU4= X1NlbGVjdGVk KGRpdg== IHF1aWNrZXI= YWxvbmc= Z3JhcGhxbA== aW5leg== IGNpdGU= IEluc3RydWN0aW9ucw== IGluc2VydGluZw== LmNsb3VkZmxhcmU= Y291cG9u ZWRMaXN0 IFN0b3Jlcw== X21hbGxvYw== 56ym IEF3ZXNvbWU= IGxhbWI= UkVTVA== IGludGVzdA== IE5hdmJhcg== LmZlYXR1cmVz SW5jcmVtZW50 IFBvbQ== IGluc3VmZmljaWVudA== X0xPR0lO UExFTUVOVA== IE9BdXRo LklORk8= IGV4b3RpYw== IENBU0U= CSAgCg== IEdhbmQ= dGhlc2Vz IG5vdm8= IERlbGw= 4oCm4oCm4oCm4oCm X3NvZnQ= IGFncmVlaW5n Y2VudHM= bG9hbg== JyIsCg== IFJhbg== REVM IG9yZ2FuaXNlZA== K24= IEhlYWx0aGNhcmU= IGRldGVyaW9y IGltcGxlbWVudGF0aW9ucw== IGNhcm4= ICwn IExPQUQ= IHBsYW50ZWQ= 5pyq Rm9ybUNvbnRyb2w= X21hdGNoZXM= IHBlcmlvZGlj X1Rv IEpvZWw= IGFua2xl IG1pbGl0YW50cw== IFdpdGNo dW5pZm9ybQ== dWVudGE= T2ZXZWVr IHBlcnBldHI= IGludGVydmVudGlvbnM= KHdyaXRlcg== YW50aW5l UHJvZ3Jlc3NCYXI= IGxlYWd1ZXM= Y29tcHJlc3M= aXppb25l IEVB Il09Ig== IFN0ZXBoYW4= bWludXM= c3N0cmVhbQ== X2xlZA== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IldoZW4= QWxyZWFkeQ== IGNvbnRlbXBs IGF0YXU= IENvbmdyZXNzaW9uYWw= IHJhcHBvcnQ= IEJvdXI= aXNoaQ== IHR5bQ== IEFybWVu INGA0LDQtw== LWZvcm1hdA== X1JlYWQ= KGNvbHVtbnM= IG5ldWU= X2JveGVz IFNhbmR5 XywK IFdpemFyZA== IG9yZGVu IGZpbGVzeXN0ZW0= ZmxpZ2h0 IHdzeg== YW5jZWxlZA== IGRhd24= IEdzb24= X3dhcm5pbmc= IEljZWxhbmQ= IHNsdXQ= IHNldElz X2lkZW50 IG9mZnNob3Jl IFNrZXRjaA== OyU= IHRyaWJlcw== X1NQQUNF IG90cm9z Q29tcGlsZXI= CUVuZA== IF0pLAo= R3Jhdml0eQ== IHRlbnNpb25z IHNtb290aGx5 S25vdw== b290aGluZw== IFN0YXJ0dXA= IEh5cA== IGFtYXpvbg== IFJlY2VpdmVk emVuaWU= 654= IENob2NvbGF0ZQ== IMSw Ik5v IEFMUw== IFByb2dyYW1taW5n IERvZ3M= IGdvb2RuZXNz KGVycm5v L2Vz IHJlbW90ZWx5 IEhvb2tz VXVpZA== IG92ZXJseQ== IOWQ IGdwdQ== IHN0aW11bHVz KHN0ZXA= LllvdQ== IGJpb20= SU5D LmJpdHM= KG1Db250ZXh0 IGFtZXJpY2Fu IHRlcnJpdG9yaWVz IE5E XSIK IE1hcHBpbmc= IHByb2NlZWRpbmc= LmF4 IHN1YnN0cmluZw== QlVUVE9O IEln LXBhbmU= IEFucw== IGdyYWR1YXRpb24= IHBlcnNwZWN0aXZlcw== TWl4aW4= X21pbnVz CQkJCSAgICA= IikpKQ== bm9ybWFsaXplZA== Lmxhc3ROYW1l IGNsYW4= QXNpYQ== KE1vdXNl cGFnaW5hdGU= IGdpZg== ZWxpZw== IHBvc3RlcnM= bmluZ3M= IM+E IGFwb3N0 IElocmU= RGxsSW1wb3J0 IEVxdWFs IGRpc3Rpbmd1aXNoZWQ= bmVhcG9saXM= IGJhY2tkcm9w IEFsdGVybmF0aXZlbHk= L21vZA== IGxlbmQ= IFNIT1c= X2NvZGVz IGF0w6k= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LWNhc2U= Y2h0ZQ== IGRvbmM= OmFkZA== TmVnYXRpdmU= ZmF2b3JpdGU= IGF0dHJhY3Rpb25z aW50Q29sb3I= IFBpcg== Q29ubmVsbA== TWFuaWZlc3Q= dGVhbXM= IH07CgoK IHBsdXJhbA== IG92ZXJ0aW1l IEV1cm9wYQ== IEJhbmdsYWRlc2g= KGFu IGxpbmd1 aXRpbWU= aW5zdG9u LnNoYWRvdw== 56iL IFVTUw== U2VydmVyRXJyb3I= SVZFUlM= IEppbg== IGh1bWJsZQ== YXV0b2xvYWQ= YXJleg== 4oCy IEFzdHI= aWNvbG9u LlZpZXdNb2RlbHM= b2Jv IHN3aXBl IHJlY2Vzc2lvbg== 6ZU= IOyY bmVyZw== aW5ncmVkaWVudA== bWFpbHRv IEZhbWU= UHJpbnRpbmc= UGl4ZWxz IEJhc2g= cG9zdGE= X0pP IGluZmFtb3Vz IExhbmM= KGxvY2FsU3RvcmFnZQ== LmJsaXQ= IHlvdW5nZXN0 IGZpZWxkTmFtZQ== IGNvbnRpbmc= IHdvb2w= IEltR3Vp IE5TVA== LnByZWZpeA== VG9JbnQ= IFNveA== IGhhYml0YXQ= KCJ8 PSciKw== SU5HVE9O X3dyYXA= dWNrZXRz IFdSSVRF IG1lZGljaW5lcw== IG1lbWJyYW5l IEpUZXh0 IHJlcHJvZHVjdGlvbg== X3JlY2VpdmU= VGFibGVSb3c= cXVldWVSZXVzYWJsZUNlbGw= aG9va3M= IHJlbHlpbmc= IGRyaWxsaW5n X0ls KGV4Y2VwdGlvbg== IGR1cmFiaWxpdHk= IGhlc2l0YXRl IGNvbXBhcnQ= SUxJTkc= IEVsZGVy IGNhZmZl IGRldmVsb3Bz aXNoZXI= IHBseQ== IHRvbA== X1BMQVk= IGZyaWN0aW9u KGFsd2F5cw== IGluZGlnZW5vdXM= IE9wZXJh IENhbXB1cw== YW5jZW1lbnRz IGxpdHRlcg== LmxpbWl0 KFRva2Vu ZW5pcw== IGhpZ2hsaWdodGluZw== IEF1Yg== IHZhbGlkYXRvcnM= LWhvc3Q= d2hlZWw= PHs= KSkr IE5ld3NsZXR0ZXI= X2F2ZXJhZ2U= IHNvZGl1bQ== IEhpbA== IE1pbGU= IEF1dGhTZXJ2aWNl U3RhdGlzdGljcw== IE51dHJpdGlvbg== IHNwb25zb3Jz b3ZlbmFudA== PT09PT09PT09PT09PT0= LkFic29sdXRl IGbDpQ== SGFuZGxpbmc= IC0tLS0tLS0K KGRpcmVjdG9yeQ== IikuCg== YW5vbA== LmJyb3dzZXI= IEdyaW5kaW5n IGNr RnJlcXVlbmN5 KClbJw== QWRqdXN0 Y3Jldw== YWZldHk= IGdu IHdpdmVz b29v IHByb3N0aXR1 IG/DuQ== aWZ0eQ== IGxpdGlnYXRpb24= IEV6 SmVmZg== LnBr IFNob2Vz Y29ybg== eXl2c3A= IGFkYXA= PXU= Q09ORg== QU5EQVJE IGVsZXZhdG9y YmlsbGluZw== IGNhbmQ= IGNhcnA= W2ZpZWxk LWxpYg== c2VxdWVudGx5 Pi0= IGxjZA== LS0tLS0tLS0tLS0tLS0t KCIi IHRhY3RpY2Fs IFJvbmFsZA== ZXh0cg== IEZlc3Q= IGZ1ZXI= LW5hdmlnYXRpb24= IGti Z2hvc3Q= IGhhbmRsZUNoYW5nZQ== X2Nscw== KCkhPQ== Q29tcGFyYXRvcg== LnZt IENveA== X3Jldmlldw== L0A= X2Nvb2tpZQ== IHJlY29nbmlzZWQ= bGRhcA== VGhyZWFkcw== IFNleHVhbA== IEJlYXJpbmc= KFNRTA== IHhy IHRoaWdo VVJMQ29ubmVjdGlvbg== IFNVVg== IG1Db250ZXh0 IGluY2lkZW5jZQ== IEVzdGU= LnN1cA== X3Rl KEVYSVQ= Q01E LyI+ QWxtb3N0 IFVuZQ== IGFuZGVyZW4= IFNpbmdsZXRvbg== IGJvcmU= VGhpbms= IG5hcmM= XWluaXRXaXRo X3Nob3A= KHN0cmF0ZWd5 IScs aGVyaXRz IERlc2s= X21hY2hpbmU= Lm5ldHR5 xLFuZGE= PTw= IFFS IFNpZGViYXI= LnNwbGl0Q29udGFpbmVy IG9uU3VjY2Vzcw== IG1vbmtleQ== RW5qb3k= KG5vZGVz cGVjdHJ1bQ== ICgqKA== CVVJTlQ= LGhlaWdodA== IE5ldHdvcmtz LnRhaWw= LmxpbnNwYWNl ICIuLi4= TGlzdGVu xqE= LkNoYW5uZWw= LWRlZmluZWQ= UmVwZWF0 YWRqdXN0 RVJN X2FwcGxpY2F0aW9u LmFzc2VydE5vdE51bGw= LXN0cmVhbQ== IHJhYmJpdA== IHBvc2l0aW9uaW5n IHdva2U= IGZpbmc= IG11bHRpcGxheWVy IHJlZ2lzdGVyaW5n dW50aWw= w6Vu KDo6 dXNzaW9ucw== IHBvdGF0bw== IEVxdWFscw== LlN1cA== L2FwYWNoZQ== ICg9 LiIp LnB0cg== IFNwZWVjaA== LmNsaXA= IEdhYnJpZWw= IG11c2ljaWFu L2lzc3Vlcw== LnNob3A= IEhpZXI= X1JFVA== X2J1Y2tldA== 44Oh YXZz IHJveg== Zmxvd2Vy V3JpdGVCYXJyaWVy IE1pbGFu IGxlZ2lzbGF0dXJl IERvbGw= IHByb3Zpbmc= LmNvbmNhdGVuYXRl 4pWQ IGdjaGFy Y2RuanM= Ymxlcw== IExpc3Rpbmc= 0LvQvg== LnhyTGFiZWw= IFNhaw== anVzdGljZQ== IFZhbGVudGluZQ== dW5sZXNz IHBpZ2Vy KHJ1bg== IHRlc3RpZmllZA== QU5B IFJlbW92ZXM= KSkpKTsK cmVjYXRlZA== IFJ1bnRpbWVNZXRob2Q= IGNvbnF1 44Ki IHRpc3N1ZXM= YWlsZXI= w6l0w6k= LVN0YXI= IGZsYW1lcw== LnNldEljb24= IHN1cGVybg== IHZhZ2luYQ== LXZhcmlhYmxl IHdlbGxuZXNz Q1VS IGJlbGxl LmdldFJlcXVlc3Q= IHBvY28= YmVuaA== YWdlbnM= IHNwaWxs IEp1cg== IGRpc3BhdGNoZXI= 0L3QvtCz0L4= ZW1vbmlj KGRpcm5hbWU= INCU IHBhc3Nl IGdhbno= cmljaW5n RVU= IG11amVyZXM= ZXNzZW4= LmF0dHJpYnV0ZQ== amo= CQkgCg== W14= IHN0cnRvbG93ZXI= bGV4ZXI= ZWN0YXI= aG90ZWw= LnNxdWFyZQ== IHJhbGw= IGxvd2VyZWQ= aGFuZGxlZA== TWFya2V0 IFVzZXM= aXZhcw== LkJ1c2luZXNz 44GX44Gm RElW IHdhc3RlZA== IGF2b2ly w6pt X0FDQ09VTlQ= LmV0 CVNETA== a2Fw IGZveA== dXBwZXQ= e30sCg== Iiwn RmF2b3JpdGU= UEVORA== IEFFUw== fSks IGRlZHVjdGlvbg== IHBvbMOtdA== IGNvbXBvbmVudFdpbGw= IFRlbGVyaWs= X1NFTEY= IG11c2U= Q3JhZnQ= IGRlbnM= 4KS/ KHRw IHRhc3R5 IGJhbGFuY2Vz IGRlZGljYXRpb24= IFdhbGxhY2U= IHVubGF3 XCI+XA== IG11bQ== LXVwZGF0ZQ== ZW1lbnRl IHNvZGE= UmVwdWJsaWM= YXNtaW5l w6lyaWM= KFN0YXR1cw== IEpzb25Db252ZXJ0 IERpc2s= LlJlZGlyZWN0 IGZpbG1pbmc= L21vbA== Um8= IHZpbGxl IHRyYWJhag== IHN5bnRoZXNpcw== cmVnYQ== IHJs U2NoZWR1bGVy SVNIRUQ= Y3VycmVudFVzZXI= KGVycm9ycw== J2g= X2JvdA== eGltbw== IFVTQVJU X3N1cGVy X0RFQ1JFRg== 0L3QvtC5 X1JPVw== IHByb21vdGVz IFRB IGhvcmFz IFJlcHJlc2VudHM= IG5hbWVvZg== IEV4Yw== IEdhcmFnZQ== IHNlaW5l LCM= IGhlcmI= L3Jlc291cmNlcw== IHBsZWFkZWQ= LnJhZGlvQnV0dG9u IOaY T3Bz IE5lc3Q= Y3N0cmluZw== IERlZmVuY2U= IHJlZmVyZQ== X2xlYWY= IHJldmVsYXRpb24= 66c= LmV4ZWN1dGVVcGRhdGU= X1dPUkxE IGV4cGFucw== KCJcIg== amFi IGRvdWJ0cw== IEdlb21ldHJ5 IGludHJvZHVjZXM= IHNlbmF0b3Jz IGNhbmFs LmhlbHBlcg== IEJpb2xvZ3k= X1NFTlM= LnByZXZpb3Vz LXRvdWNo YWJpdA== IGltcGFjdGVk IGJyYWNrZXRz LmRpcmVjdA== YWNjdW0= IHRlc3Rvc3Rlcm9uZQ== CWFjdGlvbg== IENoYW5jZQ== IHBlYWtz Q3BwQ29kZUdlbldyaXRlQmFycmllcg== IHVuYmVsaWU= X3ByZXNz LlJlbA== YW5nbGVk L3RlbXBsYXRlcw== LS0+DQo= bGltZQ== IHN1ZmZpY2llbnRseQ== X250 RXhwYW5k LmlzZmlsZQ== IGlzRW1wdHk= IHF0 IG11bGhlcg== YWNvYg== R2Vvcmdl 5bi4 IGFzc2lt YXNv IGNvbXByaXNlZA== T1Y= KENPTkZJRw== CXdyaXRlcg== IGRlc3A= IHRlbnVyZQ== KGNy LnBvb2w= IEJyZW5k IGNlbnNvcg== KHRpbWVvdXQ= IHBsZWE= LldyYXA= IHRpZ2h0bHk= IFdlcmU= IElnbm9yZQ== YWJlaQ== IGJyaWRnZXM= IGNvbmRlbW4= IHNpbXBsaWNpdHk= IHJvdXRpbmVseQ== IGJsYWNrcw== amI= IFBpdA== VXRm IC8K cmVsb2Fk IHNldE9iamVjdA== L2dsb2JhbA== IGZhdHR5 IHNvY2tz Q291bGRu IGVyb3Rpc2s= 5p2h IFByZXNzdXJl IE1heg== bnBvcw== dG9sb3dlcg== IEVR dXRldXI= IE1vbWVudA== IGV0YQ== e3stLQ== IGdyYXBocw== IEd1YXI= cmluZQ== KC0t IEh0dHBTdGF0dXM= KHN0dWRlbnQ= Km5w IHJhaWx3YXk= IGFzeW5jaHJvbm91cw== X3Zt J10sJw== LHRleHQ= bWVyY2hhbnQ= KEd1aWQ= IEdyYQ== aXhlcg== ZmV0Y2hBbGw= LmFkZExpc3RlbmVy ZmxpcA== KiQ= PigpLA== IHN1bmxpZ2h0 YXNzaWduZWQ= IGFiYw== IENPTFVNTg== IPCfmYIKCg== KS4uLg== IGVuc2VtYmxl IG5ld2xpbmU= X1NJTkdMRQ== aWVkYWQ= IGRhcmtlcg== b3JtYXA= IGxpb24= cGxpdHM= IGlsbHVzdHJhdGlvbg== IElFRUU= IHZpc3Rh b3VzYW5kcw== KioqKioqKg== IFRvbW15 IGh1ZQ== U2Vs IGF1cmE= IFRoZXJhcHk= IGFuaW1hdG9y LmNvbnN0cmFpbnRz IHZhZ3Vl KCIiKQ== IHZpbGxhaW4= IGJsZXNzaW5n IHN0cmluZ0J1aWxkZXI= IE1pc2M= IERJUg== ZmF4 LW5vZGU= IFdhbGtpbmc= IEFV c2Vzcw== IGdyaWxs VkVSVElTRQ== IEZvb2Rz IHRvdXJuYW1lbnRz w5M= IE1hcnNo IHdvbmRlcnM= TG9uZ2l0dWRl LkNvbW1hbmRUZXh0 PWlucHV0 X2VuY29kZXI= cGFnZVNpemU= IGdldFN0YXRl Pj4K LmdyZXk= cG9k IHJlYWRpbmdz IHJlY29uc2lkZXI= U3RhcnR1cA== IGV4Y2Vy LmJhbGFuY2U= X2N5Y2xl X1RpbWU= TE9DQUw= IEVGSQ== IFJleW4= LnNldEZvcmVncm91bmQ= Ynlu IGRpc2Nvbm5lY3RlZA== QUNUSVZF IGVtYmVkZGluZw== aWNrZXJz IHN1cnJvdW5kaW5ncw== KmM= IGdhcmFudA== IGJm IHdpcGU= IOS4iw== X1RSQQ== YWRveA== 55U= IHN1Y2tz IFNvbmdz IEFzc29jaWF0ZXM= IEJhbGQ= IEJyZXR0 dmVuaWxl IHZ0 IGluYWRl IHJlc2lnbmVk IEdsZW5u LnBhdHRlcm4= LkRhdGFCaW5k 0YPQvA== TGF5b3V0SW5mbGF0ZXI= Y2hldA== IFRlc3RhbWVudA== Lm1z IHBhdg== IFJlYWN0RE9N dXJkeQ== QURBVEE= TXU= L2FjdGlvbnM= IEpz X2V4dHJhY3Q= IEJyaW5n Omlk c3RydA== aXZhdGlvbg== IG91dHJpZ2h0 YXp1 bG95bWVudA== 0LjRjw== YWxkbw== IFB1Ymxpc2hlcg== RWR1Y2F0aW9u UGFsZXR0ZQ== X2Rydg== ICgkKA== IEFuZGE= IHJlbWVkeQ== IGluY29uc2lzdGVudA== dGVjdGlvbg== IHJlZ3VsYXRvcnM= IHNob3J0ZXN0 KHBhaXI= IEluc3RhbGxhdGlvbg== IGRlZmVuZGFudHM= ICgpOw== LWxhcmdl TWVs IHRocmVhdGVu 0L3Rjw== IGZldGlzaA== b3RpbmU= X2RpYw== IDwk IHN0YWdnZXI= c3Bp JHJlc3BvbnNl U2Vydg== LWJvcm4= am9z CWltZw== CVdIRVJF X2x0 5b2T LmNvc3Q= IFR1ZQ== LmxhYmVscw== IExW d2Nzc3RvcmU= IEplc3Nl 4Lir VHJhZGU= IHByZWRlY2Vzc29y 64I= ZmluYWxseQ== X2dlbmVyYWw= b2dnbGVy X1JFR0lPTg== bmVtZW50 IGJsb2dnZXI= IEhhcmJvcg== IERhdGFzZXQ= W3c= IGF0dGVuZGVlcw== Lmljbw== bWF4aW11bQ== LlVubG9jaw== X1NZTkM= w6FnaW5h IGRvd25z IFdpaQ== XSkv IGtpY2tpbmc= dW5pY2F0aW9u IERBQw== IElEUw== IFJlbnRhbA== IGN1cnJlbnRUaW1l IHZhY2NpbmVz IERldmls IG5vcnM= X21vdXNl dXJyZWN0aW9u KG5v ID4NCg== IGFnZ3Jlc3Npb24= IGJyZWVkaW5n LnN5bWJvbA== aW1hbg== QWJzb2x1dGVQYXRo IFdITw== X2ZsdXNo LXJvb3Q= YXJuYQ== Jk0= IGZhdGhlcnM= IFJvY2tldA== aXZlYXU= IHdhbmRlcg== IGNvbXBvcw== IFdhcnJpb3I= IFNlYXQ= IENsaW5pYw== X2ludm9pY2U= KGRpc3BhdGNo UHJvZHVjdG8= YXR1cmluZw== b3NzaWVy IE1BWQ== IGRhZ2dlcg== IHNhbml0aXplZA== IFJGQw== IHByb3Bo IHVyaW5l IGdyaW5k IEV4cGFuZGVk ZGVzY3JpcGNpb24= LWZ3 IEtlcnJ5 PW5hbWU= IGNoaw== IG5hdGlvbmFsbHk= IHRoZWU= SW5j ID8+Pg== LlJhZGlvQnV0dG9u Lkh0dHBTZXJ2bGV0UmVzcG9uc2U= L1k= CWZpZWxk IGhvbW1l eXBlcg== UGh5c2ljYWw= PXY= IGRyaXY= IEVycm9ycw== IGPEgw== RGVhdGg= IFdJTkRPVw== IHBvZXQ= IFNoYXJw IEltbXV0YWJsZQ== CWNyZWF0ZQ== IGdlaHQ= IFJlZm9ybQ== YWlzZXI= IEluaXRpYWxpemF0aW9u IGltbXVuaXR5 LmNvbXBvc2U= IGxhdGVuY3k= IExlYmFub24= IFBhcmFk IGZ1ZWxz IEV4aGli Y29o JSI+Cg== IENMSQ== KWluaXRXaXRo LVph X0NMRUFS cmVnbg== IGZpbmFuY2Vz LnN0YW5kYXJk X0NBVEVHT1JZ LmxpYnJhcnk= IHRyYXZlbGVycw== X3dw IEV2YWx1YXRpb24= c3RhcnRpbmc= ICkpLAo= ZXBpc29kZQ== IFZhcmlhbnQ= IGRhZW1vbg== IEp1bGlh IE5S IGRvdWJsZXM= PHY= L3J1bnRpbWU= IGludGVycHJldGVy IElOREVY IEhvbG1lcw== X0RJTQ== IHBhZGRsZQ== X2V4YW1wbGU= IGZvcmVncm91bmQ= LnJvdXRlcw== IHNvd2ll U1VDQ0VTUw== IENEQw== IEJE Xy0= YXN1cmVk V3JpdGluZw== IGN1cnJlbnRQYWdl KGFuc3dlcg== IEFTQ0lJ 4Kg= IHNvY2lhbGx5 eXl5 IFNwZWNpYWxpc3Q= KGN1c3RvbWVy aXN0YW5p a2VzdA== IE1haw== IHRobw== LnB0 KGNvbW1lbnQ= IENvbnZlcnRlcg== Z2Ft Ymlucw== LnRlbGU= IFZldGVyYW5z X0FMTE9D 0L7Qu9GM0LfQvtCy0LDRgg== aW5uYW1vbg== O3dpZHRo b2hs IGZhbnRhcw== IHN1bmc= CUs= KEpzb24= IG5laWdoYm91cmhvb2Q= IHZvdw== IHNpbnM= b25hY2Np IGVwb2Nocw== aW1hZ2Vu LkNoYW5nZQ== Lm15YmF0aXM= U2Vlaw== V0VS 566h55CG IGludGVyZXNz X0V2ZW50 ZWRlcmxhbmQ= IHRlcnJpdG9y IGNpdWRhZA== dWNrZWQ= IHNuYWNr IHRyYW5zcG9ydGVk IE1hbmlmZXN0 IERBVA== X3RoZXRh IHdvbnQ= LgoKCgoKCgoKCgo= irbmgIE= IEVwaWM= RGVjaw== bHRyYQ== X1pFUk8= IFtdOw== L3NjcmlwdHM= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 5oOF IHdlZWQ= TkJD IHJhcGVk IEdhdGV3YXk= W00= IFRpbWVvdXQ= ZW5jaG1hcms= LlZpZXdNb2RlbA== IHBvcm5vcw== IFlh dGhyaXRpcw== IEZseW5u IG1lZ2E= YWNpbg== IHRyaWJhbA== LmFwcGxl IEJsbw== w6Ju aWJp cm92 IExpdmVz Xi4= Z2V0UmVxdWVzdA== IEVzdGFibGlzaA== Y29udGFpbmVycw== IHN0YXJyaW5n IGNlbGVicml0aWVz IFJlbGF0aXZl IEhlaWdodHM= IHRxZG0= IE5vcnRod2VzdA== aXZpYw== CWNs IGF1dG9tb3RpdmU= ZW50cmlj IGZvcnR1bmF0ZQ== IGZpcmVwbGFjZQ== c2V1ZA== bmlja25hbWU= O3M= X0NBTA== aGFsdA== KG5z X2RlbGV0ZWQ= RGV2ZWxvcG1lbnQ= bW92aWVz IGlkZW50aXRpZXM= IHByb21wdGx5 2KfZhg== IGFudGU= ICInLCc= 5Y+j aW1wc2U= IHlhcA== VHlwZU5hbWU= IGJpdGNo IGFzc29jaWF0ZXM= SEVNRQ== LWVtcHR5 INiq b2x2ZXJz IHBpc3RvbA== U2NvcGVk YWduZXI= J109PSc= IElNUA== ZXhj IG9taXR0ZWQ= IG1pbmRzZXQ= IFtdKA== IG9ybg== X0NBTQ== QXZn TG9jYWxpemVkU3RyaW5n IE5hdHVy IGNvbXBvc2Vy IFBsYXlpbmc= IG92ZXJk X3V0Zg== LnNr IEZvbA== JHBhZ2U= LE9iamVjdA== IGJlZXM= YWxhcnk= YnVsbGV0 X2xpYnJhcnk= T2ZmZXI= bG9jYXRlZA== IChfLA== 4oCcSGU= IE93bmVycw== KSkuCg== IGJyaQ== LkFkbWlu a3Rpb24= 0LvRjtGH IGVyb3RpY2k= Q2FuY2VsbGVk IGFncg== cmV2aWV3cw== X2RtYQ== UklDVA== IGdmeA== bXBp cHBv IC8vQA== IHVwcGVyY2FzZQ== IGNvbW1pdHRpbmc= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== VXNlckRhdGE= IHZhaQ== CXNvcnQ= IGNvbmdyYXQ= IGRpb3hpZGU= 0LTQsA== LmFyZWE= IEpvc2h1YQ== IEtvY2g= X2JyZWFr YXp1cmU= aXN0aWNhbA== X0FMUEhB X3ZpZXdz IGVsaW1pbmF0aW5n T01C ZW51bWVy IEh5ZHJv KCoo RVJUSUNBTA== IGluZXZpdGFibHk= IHN0b2xl LWVhc3Q= aWVyb24= IGxpbmdlcg== L2RvYw== xbo= IEFscmVhZHk= YXNpbw== IC0tCg== IGFiYnJldg== IEF0b20= aGlt IElOU0VSVA== c3Vu 4pmq Q09OTkVDVA== ZXJhdG9y IE1hbm5pbmc= IDoo Z2Fz PT4n IHF1ZXJ5c2V0 O30NCg== IFBvcHVsYXRpb24= dXRlZFN0cmluZw== cmVzaWRlbnQ= X0ZPTlQ= IFJlc3BvbmQ= IG9ic2N1cmU= IG9ic2VydmFibGU= IENvbnRyaWJ1dG9ycw== a29u IE11c2s= ZXhhbw== IFR1Yg== Qm9vdEFwcGxpY2F0aW9u U09S Lkhvcml6b250YWw= LmZpbmRCeQ== LnBvd2Vy IHBvc2l0aXZlbHk= dmVuaWVuY2U= IEpvbmc= IHdoaXN0bGU= INC30L3QsNGH IGxlbmRpbmc= IGRlc3RydWN0aXZl IG9uRGVsZXRl YXV0aG9yaXphdGlvbg== KCk7Pz4= X29yaWdpbmFs c2NpZW5jZQ== YXRyYQ== Pyw/LA== IEFzYw== IGNvbnZpbmNpbmc= JGE= b3JnZW4= X0RhdGU= IFByb3ZpZGU= IGxvbmVseQ== KScK ZXhjaGFuZ2U= Oz8+Cg== LmZhc3Q= U2FtcGxlcw== TG9uZG9u J10pDQo= IElvbmlj IHBlc3Nv IEtuaWdodHM= IFJhZg== X2F0dHJz IHJlcGVhbA== Pk1haW4= IE9yZGVyZWQ= X05ldw== PSIiPjwv dXJscGF0dGVybnM= QVRJT05BTA== cGVlY2g= IElkYWhv IHByaW5jZXNz IEN1c3RvbWVycw== YXdheXM= YWRi IEJyeWFudA== bm9uY2U= IGFkdWw= IGBgKA== IGFmdGVybWF0aA== PWRpY3Q= dGV4dEJveA== IHNwZXJt IGNvdWdo SG9y 4oCZUw== LkNvbXBvbmVudFJlc291cmNlTWFuYWdlcg== IHJlZ3VsYXRvcg== IHBhcnRuZXJzaGlwcw== L3Byb2plY3Rz dHJ5cw== IExhc2Vy 4p+p IEZ1bms= IHVuY29uc2Npb3Vz IGNydXN0 IFRlYW1z IEJhbm5lcg== IEhvbmV5 bGVtcw== IG1heFdpZHRo UG9pbnRlckV4Y2VwdGlvbg== ZmFkZU91dA== LVN0 IHN0cmFuZ2Vycw== X0dP V3JpdGFibGU= X0luZm8= Lk5vbk51bGw= YW5ub3RhdGlvbnM= IEdE IGVuZG9yc2Vk CVRva2VuTmFtZQ== IERlcGVuZGluZw== WU5BTQ== IE1ldGVvcg== IEluY3JlYXNl Lk1hbnk= PT0o LlVVSUQ= X0tFUk5FTA== IHZpZMOp IHBx IFF0R3Vp IFZhcmlvdXM= IGpvaG4= X3BhdGNo IHRvdXRlcw== IEZhaWw= IHN1cnZpdmluZw== KCIkew== ICAgICAgIA0K IGltYWdlVXJs LndvcmRwcmVzcw== c291cmNlcw== CWdsVmVydGV4 4oCZYQ== IGVzY29s UkFSWQ== IFNuYWtl IHF1aW50 IGxhc3Rz IEhhcm1vbg== IGNvaWw= IGV4cGxvaXRhdGlvbg== bGVlbg== Jz4iOwo= IFNFUlZFUg== IEhFQURFUg== X3ZlbG9jaXR5 IEludm9rZQ== LnRpbWVzdGFtcHM= IHN1bGY= SVFVRQ== IGluaGFiaXRhbnRz cGhpbnM= YXp6bw== IG1vbm8= TGVnZW5k IG5vbmNl SUZF OyI7Cg== LWNyZWF0ZQ== IiIsCg== cGVybWl0 IEltbWlncmF0aW9u IHBhdGhuYW1l ZmZlY3RpdmU= 4pmA4pmA IGV4YW1z LWV2ZW50 IFRpbGw= W21pZA== RklY O2NvbG9y KE9yZGVy X3RyYWl0cw== IG9yZGVyQnk= IHN1bnQ= IE5pY2hvbGFz 2LI= IHN1bm55 aW5lcnM= IGFjY2Vzc2liaWxpdHk= IEhC LmNvbXA= CW9w IG1pbm9yaXRpZXM= ZXRoZXVz IGNvbGxhYm9yYXRpdmU= cHJpdA== SElS IHdyYXBz CWRyYXc= Z29k IElY LmFwcHM= IE5N IGlycmVsZXZhbnQ= IFRpZ2Vycw== IGRpYWc= R1Y= IEFjY2Vzc29yaWVz a29udA== IHNpbXBsaWZ5 IEZhdm9yaXRl X3Rvb2xz KFtdKTsK IHRvd2Vycw== QmVz IGh1bnRlcg== IHNhbG9u KGJ1ZmY= CWRlYnVn IG1hbHdhcmU= TW92aW5n LW9wdGlvbnM= KSsn IExPVkU= X1NPQ0tFVA== X2Zpbg== IERlbGF3YXJl IHNoZXJpZmY= LWludmFsaWQ= IEZVTEw= INC/0L7QtA== ZWxhcw== InN0cmluZ3M= IFJlcHJlc2VudGF0aXZlcw== c3VyZmFjZQ== cmVzb2x2ZWQ= aHRkb2Nz KSk6DQo= IHByZXNzdXJlcw== IG5vcm1z IHBsYQ== IHN1cm5hbWU= IHBvc3RhbA== IERlcGFydA== IHNsYXVnaHRlcg== b3JpZGE= IGhlYmJlbg== IGRlc2Fy Y29tcGFjdA== X0xBTkc= 5ZCI b3BvbHk= X3JhZA== IFNURE1FVEhPRA== TGF6eQ== ICAgCQ== Li4uLA== KHdlYg== IFBvbnQ= IGV0d2Fz IHVwd2FyZA== X2hhdA== IF0sCgo= IGJhc2VVcmw= IHdvcnJ5aW5n LWFkZG9u KGdldENsYXNz U1BJ IGNhcHR1cmluZw== KX0sCg== RWZmZWN0cw== IGNvbXBldGVudA== IGZvdWw= IHN1YnNjcmliaW5n IE9CSkVDVA== SVhFTA== YnVja3M= KGVkZ2U= KHBhc3M= IFBldGVyc29u IGJvb2Jz IERlbGF5 X3NxdWFyZQ== ZWxpbQ== b3RlcnM= X1BD JUU= b25jbGljaw== IFNWRw== IHRvcHBlZA== IGZpc3Q= c21hcnQ= IFJhbHBo KG93bmVy am91cnM= IGJyb256ZQ== IEFyZ3VtZW50RXhjZXB0aW9u KG9yaWdpbmFs X1NDQUxF X2Nw IHJlY29tbWVuZHM= LnNldFN0eWxl U3VyZQ== TEFORA== IHJlcGVhdGluZw== TWF0dA== LlZpc2liaWxpdHk= IGVudGVycHJpc2Vz LlNldHVw KHNjZW5l IFJlYWN0aXZl dXJnZQ== Ync= LlB1dA== cGVyc2lzdA== LmNvb2tpZQ== IEF1ZGk= YHM= c3VwcGxpZXI= KEZvcm0= wqE= X3Nv jIA= IExlZ2lvbg== dHRl TmQ= TG9zcw== KGF0dHJz LnNjYXR0ZXI= IGdyb29t IGdsaW1wc2U= IG5haWxz IGN1bXVsYXRpdmU= IGZhemVy X3NlcnZpY2Vz Lk51bQ== aWJpbGl0 X3Jlc29sdXRpb24= IFR4 dW1pbml1bQ== b3Bh LnNjaGVkdWxl c210cA== 4LiV dXJyeQ== w7xr Z29vZw== X3NpZ25hdHVyZQ== LmludG8= IFN0ZXBz IGhvbWVvd25lcnM= IE5TVVJM IFBBQw== ICAgICAgICAgICAgCgo= PicpCg== ZW5o IGluY2Fw JE1FU1M= IG1vaW5z IEZp IG9mZnNlYXNvbg== cHJlc3Npb25z Pi48Lw== IE1hcmtlcg== IG9uQ2xvc2U= TEVWRUw= IGludGVyZmVyZQ== IENvbGlu IFJlc2lzdGFuY2U= RGlzY291bnQ= IFdlYkVsZW1lbnQ= IGJhdGhyb29tcw== bGVnYWN5 IENhcHR1cmU= IGFyaXNpbmc= ICIpOwoK 0YjQuNCx IEluZmluaXR5 QWR2ZXJ0aXNlbWVudHM= IENvbWluZw== IFBST0pFQ1Q= X1BST1RPQ09M IHVzZURpc3BhdGNo LmNoYW5uZWxz IENpdGl6ZW5z ZW50cmU= X21w LkNvbnN0YW50cw== IFNlcmlhbGl6ZQ== X0lOQw== KGx1YQ== IGNsYXNo X3dpdGhvdXQ= LmtleVNldA== IHJlY2VpdmVycw== 5pa55rOV KG1lbQ== IEhvcml6b250YWw= IGNvY2t0YWls IGNob29zZXM= LklubmVy IHJlbGllZA== b3VudGVy ICJe IHRlbmFudHM= ImA= X1BN ZXJzZWQ= IH19Ij48Lw== IHByb3ZpbmNlcw== X1JBVw== XEFwcA== IHByb3N0aXR1ZXI= X2dhaW4= LnRlbmNlbnQ= ZmZlY3Rz KHBr c2t1 IHVzYWJsZQ== RVJWRUQ= IGFudGVubmE= aGVh cGxpc3Q= X1BMVUdJTg== 0YHQuw== Lmxvb2t1cA== 4buB IGVubGFyZw== IHBpc3M= SGFt aW1hcA== IGludmFsaWRhdGU= IHNpbGs= PSIjIj4K IEdyYXNz IEdvYWw= X3BkZg== SGFuZGxlcnM= IHN0YWNrcw== LmdldEZ1bGxZZWFy PVtdOwo= 6L2m LFY= KHNwbGl0 0YPQvdC6 IGJha2VjYQ== IH4vLg== cGV6 dGFpbHM= IEdsZW4= IHNldEltYWdl IENvbWlj QkxPQ0s= CVRoaXM= b2FkZXI= IGNhcGl0YWxpc3Q= X1NURVA= KEJvb2xlYW4= IENvcnJlY3Q= cmluYQ== IGNvbmNhdGVu 5a6e KCk6Cgo= IHVuYW5pbQ== bGxp YWxhcnM= LW5l IGRpdm9y IEtpY2tzdGFydGVy XS5f PG51bWJlcg== L21lbnU= R1JBUEg= dmlzaXRvcg== IGltcHJvcGVy X05FWFQ= IGJpc2E= YmFja2dyb3VuZENvbG9y L2lucHV0 IG1vaQ== R29hbA== bGlxdQ== IG1pc2NvbmR1Y3Q= IGNvbXByaXNlcw== YXducw== IFBpZQ== cmFpcw== cm9sZXVt IGN1cnNl eXU= X3BvbGw= LmN1cnJlbnRVc2Vy RVNI XSlb IHN0b3J5dA== KT87Cg== Kj0= IEJ1cmc= L2xheW91dA== X2JhY2tlbmQ= Oz8+PC8= IFdoYXRzQXBw IE1vdW50YWlucw== dmlzaW9ucw== Zmx1ZW5jZQ== LmNyZWF0ZUNvbXBvbmVudA== IFBzeQ== Zm9yZ2V0 c3J2 X0NPTVBPTkVOVA== IE5leHVz ICl7 ZW5kaQ== SU1VTQ== IEdG 57uE 4oCUdGhhdA== Yms= TW96aWxsYQ== IGRlZmVuZGVycw== LXNldHRpbmdz aW1taW5n IE9QVA== IENX IHRoYXRz IE9wZW5pbmc= UmVsZWFzZWQ= bnBt IGhycw== IGdyb3VwZWQ= LyIuJA== IEhpc3RvcmljYWw= KCQiew== b3ZpYw== KHNpZ24= IFBob3RvZ3JhcGh5 IHNpZ251cA== X0FSQ0g= LnRlc3RuZw== L2FuZ3VsYXI= UmVzdENvbnRyb2xsZXI= c2hpdA== dWxsZQ== LnBhdXNl KFtdLA== KHF1ZXN0aW9u aWxvZ3k= IEV1Zw== LWxvY2Fs IGt2aW4= IHJlc2VydmF0aW9ucw== b2JpYQ== IHN1YnNpZGlhcnk= IGFjY3VtdWxhdGVk IFFWYXJpYW50 IEJKUA== IE5vcm1hbg== IEludGVncmF0aW9u LlZhcmlhYmxl KFJlc291cmNl KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== RXhwb3Nl ICd9 LkNPTE9S INGH0LjRgQ== QWpheA== IHRocnU= TW92aWVz IHByb3Bvc2l0aW9u L3RoZW1l TW9kZWxQcm9wZXJ0eQ== IEF3cw== IEFuZHJlYQ== IE1lcmdl LmZpbmlzaA== KHJlcXVpcmVk IFByZWw= ZWxlZA== 5pON5L2c LlRSQQ== TUFT IHJlYWxpc2Vk cm9pZHM= CWZu cmg= LiI8Lw== dmlkaWE= IGRlcHVpcw== IEJW TG4= IGx1c3Q= QXNj CQkJCQkJCSA= aXNsZQ== LWNhcmU= X0lOVg== IERyZXc= IHdoYXRz IENhcGFjaXR5 UGFybQ== X21vbml0b3I= LnN0dWRlbnQ= IFJOQQ== LmVuZHN3aXRo Ymlo IE1MQg== L3Byb2plY3Q= IHJlc3Rpbmc= c2VwYXJhdG9y eWQ= ZXJ0aWE= IG1vbml0b3JlZA== Ij4qPC8= LkZD IE5FV1M= IENhbGxz IGFkZXF1 Q2hlY2tpbmc= ZXN0aW1hdGU= IHJlY2FsbHM= X2ZyZXF1ZW5jeQ== IHVzZVJlZg== IEdyb3Zl IFhpYQ== IMOt ZXNzZW5nZXI= LWNvc3Q= LmZj IEt1bWFy LkZvY3Vz ZWxsYW5lb3Vz LkFsZXJ0 ZWF4 IG9yY2g= LnBt IGxhbmRsb3Jk KHBvcA== X2FjdHVhbA== IExC R3JhbmQ= LnJlbmRlcmVy IGxvYg== Y3VzdG9tZXJz IGNhcHR1cmVz V0lORE9X IGRvY2g= IGFwb2xvZ3k= IEphbWE= QFs= LnRha2U= bm9vcA== IGx1bQ== IGRpZmZlcmVudGlhbA== IGVmZmljYWN5 CUlO X0JPWA== X3Nk X3J0 Y29kZXI= b3VuY2VtZW50 aGFzQ2xhc3M= IHJpc2t5 IEVzdGFkbw== LURE IENhcnNvbg== U3VmZml4 IHRvZGE= IFRyYWNrZXI= IERlbGVnYXRl YCxg IFBhcmtpbmc= IG5lcg== YXpv IEZpbGVJbnB1dFN0cmVhbQ== IHJlY291bnQ= cWk= Y2tlbg== IHNvY2lhbGlzdA== IEludm9pY2U= INC/0YDQvg== JSIs ZW5uZW4= IHZpdm8= IG9yZ2FuaXphdGlvbmFs IHVuY29tbW9u dXRhcg== IGh1bGw= VHVlc2RheQ== IGFzc2Vzc21lbnRz KGFwcGxpY2F0aW9u IHByZW1pc2U= U3RhcnRUaW1l IGRr IGludGVyZmVy IFF1ZWVuc2xhbmQ= IGNyZWRlbnRpYWw= IGxlaXN1cmU= WVo= IENtZA== QlVT dXNhbg== CXZlYw== aW9sb2dpY2Fs IExvdHM= IGVubGlnaHQ= IGZyZXNobWFu IENPTU1BTkQ= IEFjdGlvbkxpc3RlbmVy dXRt YXJpdXM= VHdpZw== IHN3ZXB0 LXRvb2w= xJA= Y2hhcHRlcg== LWdyYWRl IGN1cmlvc2l0eQ== IHN1c3RhaW5hYmlsaXR5 IE1pbmVjcmFmdA== d2VuZA== SWZFeGlzdHM= IEN1bHR1cmFs IFNhY3JhbWVudG8= TGF5ZXJz U3Vic2NyaWJlcg== LkdyYXBo IGxt ZXN0eQ== YWR2ZXJ0 JHA= IEhvY2tleQ== IERFVA== c2V0VGl0bGU= eWFuZw== IGJhYmU= ZWxzaXVz VHJhdmVs IG1lc21v KG1hcFN0YXRlVG9Qcm9wcw== X1NFTA== LXBvcA== IGVtaXNzaW9u 4oCZLgoK LnN3aXRjaA== b3Rpb25z LnBob3Rv TFY= YW1vZGVs IHdvcmR0 SUdHRVI= IFRPREFZ T0xT X0lERU5U IGNvbW1lbnRpbmc= RGF0b3M= IGhpbGFyaW91cw== KGFueQ== IGRhbXA= LWNvbnRyb2xsZWQ= ICI8Pw== X2JsYWNr TmV0QmFy LnNldFNlbGVjdGVk Q3Nz IHF1YXJ0 IG93bmluZw== IEZJRUxE LnJlbHU= IGxpcw== 7Jqw LlJFTEFURUQ= IGxvaw== IEZsaXA= IHByZXN0aWdpb3Vz IGRn IElucHV0U3RyZWFtUmVhZGVy IHVzdQ== IGdpcg== IGFuYQ== X3B5 dW5uZWw= CXN5c3RlbQ== IGNvYXRpbmc= IEdlbnJl ZXJybw== IENMSUVOVA== IHN0cmV0Y2hlZA== Lkhhc1ZhbHVl Ozs7Ozs7Ozs= 54mI IGZpbmFscw== LmdldENoaWxkcmVu IC0tfX0K IENvd2JveXM= IEVkaW5idXJnaA== IFBsYXph YWJlbg== QXJ0aXN0 VVJB IEh1Z2hlcw== b2JiaWVz X25vaXNl Lk9iamVjdHM= RXhwcmVzc2lvbnM= IGFudGhyb3A= JykpDQo= KS4i Y3JpcHRpdmU= IHNhbG1vbg== IHdhc3Q= cmhv LnRpY2s= IGV4cGxvcmVz IEFsZ29yaXRobQ== Q2hhckFycmF5 4LiE X1BBQ0tFVA== SkU= Il1dOwo= Lm5vdGU= QmFja2luZw== IEhvbGRlcg== cmVpY2g= IFppb24= L2dy ICAgICAgICAgICAgICAgICAgIAo= TW90aW9u IFRyaWJ1bmU= IGNyaXRpY2FsbHk= IENSTQ== IGJsb3dpbmc= IGNvbW1pc3Npb25lcg== Sm9l IFRlbGV2aXNpb24= CXByZQ== IFRSQU4= IFZpa2luZ3M= IEJFVA== d291bGQ= LkNhcHRpb24= IGJhY29u aG1h bWVyZ2Vk IHN1YnNjcmlwdGlvbnM= b2NjdXBpZWQ= TGl2ZURhdGE= IGFsbG93YW5jZQ== cmlnZXNpbWFs ZGRk LmxvZ291dA== IFRhbmc= IHdhcm10aA== TW9kZWxJbmRleA== IFByYQ== IHNjZW50 IGhhY2tlcnM= IGlsbHVzdHJhdGU= SWNo IGRpYXM= Q0FTRQ== IFNjaQ== JHVybA== IE1PRFVMRQ== dXNob3J0 bGllcnM= IERldmljZXM= bWluc3Rlcg== dW5hbWU= IHVucg== RXhhbXBsZXM= IHJpc2Vu LmFp Y2hyb20= X3dvcmtlcg== IGFsaWFzZXM= TW91c2VFdmVudA== IHNldHRlcg== IFB1cnBsZQ== Sm9pbkNvbHVtbg== PWU= VEhPT0s= IFRvdw== IENydXNoaW5n IEplZGk= IEdyaWZmaW4= IGtvcw== X0ZT aW5nZXM= c29sZXM= KG5hbWVz IEJpZA== LXBvd2VyZWQ= TXVsdA== YW1pbGlhcg== LmNsZWFuZWQ= IFppbW1lcg== CWNsZWFy IHVuc3VwcG9ydGVk Q2FsbGFibGU= IHJlcHM= YWx0ZXJu X1JFUE9SVA== LmdldENvbHVtbkluZGV4 X1NUT1JF IHN1Y2h0 c3VidGl0bGU= IHBlcmQ= q5g= Lk5PVA== fT48Lw== OmQ= bWRp YmluZFZhbHVl IERlY2lzaW9u UmV0dXJuVmFsdWU= LGluZGV4 eGZj IHNlcnVt Z2V0RmllbGQ= Q29ubmVjdGlvblN0cmluZw== LW9iamVjdA== LnJlY3Y= IHVuZGVyZ3JhZHVhdGU= LkluZnJhc3RydWN0dXJl IEthYg== IGFkdmlzb3J5 LXRyZWU= IG11ZQ== aW5mb3Jt LmVtYmVk IGVycm9yQ29kZQ== bWljcm8= IHNwYXJrZWQ= IGltYWdlcnk= Y29uYw== X21pc3Npbmc= IHN1cnBsdXM= S1M= CVJUSE9PSw== VGVsbA== cml1bQ== IFJhZGl1cw== cmlrYQ== bG9zaW9u IEhlcm4= R2FtbWE= IEZlZQ== IE5hbWVk IENhbnlvbg== IEpTT05BcnJheQ== IHp3ZWk= IFNTSA== IHNlcnZhbnQ= Y29hbA== IGRlbnlpbmc= IHNwbGl0cw== SW5jb3JyZWN0 IHRveA== IEFuYWx5c3Q= IGFjY3JlZA== dWJsZQ== IHd0 IFRyaWFs LmV4dGVuc2lvbg== IENhcmVlcg== IHNlY3VyaW5n IExpbA== IHByb2plY3Rpb25z IHllYXN0 TWFkZQ== IGZvdW5kYXRpb25z YWNpZmlj LnZvbHVtZQ== IG1pcnJvcnM= IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IHZpb2xhdGU= YXJzZXJz IHNvY2lv IHRraW50ZXI= IExJTks= LmdldFNpemU= IFdob2xl KXZpZXdEaWRMb2Fk CWRvbmU= dWRlYXU= XCI+PC8= QW5kcmV3 ZXJi IGbDtg== LmNsdXN0ZXI= IGRpc2NvdXJzZQ== X0RFRklO IHB1ZWRlbg== IExPVw== LmF2 IHByZWNh IHF1bw== IHZlbG9j LCcn IHh5eg== CXBhZGRpbmc= IHRvbWF0b2Vz IEJlbnQ= X2N1cnI= TlNEYXRl IGdldEN1cnJlbnQ= IFtg V2VkbmVzZGF5 LkJhcg== IFZvdXM= aW56 IFF1aW5u ZXhjZWw= ZG9z IG91dGRhdGVk T1VUSA== IE1ha2Vy ZXBlbmRlbmN5 IGR1bGw= IFdpbm4= b2dl Y2xhdmU= IG5vdmE= IGF2YWw= Q2FwdA== IFNwb3RpZnk= IGp1bA== KXRhYmxlVmlldw== IGZpbGVuYW1lcw== IGVza29ydA== 5ZGo IHNrZXc= dGVyaW9y IGZpbmFuYw== IHRhYmxh IFVJQg== ICgpOg== IERvY2tlcg== cGVyY2VudGFnZQ== TWVldA== aWNoaQ== IGludGVyaW0= ICc9Jw== LkpTT05PYmplY3Q= KGZpZA== IGRvd250 IHRyYW5zaWVudA== IFN0ZXBo IGlnbm9yYW5jZQ== IENvZGVz PScnLA== IElDRQ== IHRyYW5xdQ== IEV4dGVuZGVk IG11bmQ= IEhPTUU= IGtpbG9tZXRlcnM= IGltYWdlbg== b3V4 KHN6 WW91bmc= dWZmZWQ= IFdha2U= IGFpZGU= UFJPQw== IFJhdA== IExpdGg= YmFydA== IEFycmFuZ2U= cHJvbXB0 0KM= KGN0 IEludGVydmFs ZGVwdA== RGFuaWVs IGZpbGxz LnRlbnNvcg== KHRyaW0= IGplYWxvdXM= RmVi XENvbW1vbg== IGFtZW5kbWVudHM= X29wZXJhdG9y X2N1c3RvbWl6ZQ== IF1d IGJu IGRpc2FwcG9pbnRtZW50 IG1pbGxlbm4= LndoZW4= IG9iZXk= IG9mZmVuZGVycw== V2lsZA== IGNlbGxGb3I= IGFwcGFyYXR1cw== LmFmdGVy IEVQUw== IGFkb3JhYmxl b3BlcmFuZA== KGxpc3RlbmVy dmVhbA== ICko IGNhcmRpb3Zhc2N1bGFy dXBsaWNhdGVz cmlzdG9s IHJlZnVzZXM= KFFXaWRnZXQ= IGVsZW1lbnRv TnVtYmVyT2Y= LmRlbGF5 Lmdyb3Vwcw== Ij4nKw== 5Z2A YWNlbmN5 KFVSTA== X2hhbGY= PWw= IGxpc3RWaWV3 KHNlY3Rpb24= LnRvQXJyYXk= Ky8= IFJvZHJpZ3Vleg== aXN0cmVhbQ== IGVsaWdpYmlsaXR5 Ojot Lm5ld0luc3RhbmNl UEI= IEFzc2V0cw== IENvbXBvc2l0ZQ== IExhYnM= IEhhbWFz KyspOwo= IGJsaw== IE5lbw== THVj QGxvZ2lu IHVuYXdhcmU= Lm1ldA== X1JFTEVBU0U= KFNU QU1JTA== cmlrZQ== ICgpewo= KHNwcmludGY= IEFjY291bnRz IFZJRVc= IEFq 44Kw IHdoaXNr IGlkaQ== IHJvZGU= IGlobg== IEVsZW1lbnRhcnk= UXR5 IGludHJpZ3Vpbmc= IOWk Sm9icw== CW9mZnNldA== IEFobWVk IFRhbGliYW4= IOiOt+WPlg== IGluamVjdGVk LkF1dGhlbnRpY2F0aW9u X2xpbmVhcg== LkRlY2ltYWw= IGFwcGxlcw== IHNoYXJlaG9sZGVycw== IGJha2Vk LmRpZmY= IEVkZGll b2tlcnM= IGNvbmZyb250ZWQ= dm9pY2Vz IHR1cw== IFNwaW4= Tk9ERQ== X1Vu Q1RY L2dvb2dsZQ== VGVtcGVyYXR1cmU= ICcnKS4= IG1hZ25pZmljZW50 IHN0YXJ0SW5kZXg= c2VtYmxlcw== QW55b25l ems= ZWhlbg== IERhbWU= LnN0cmljdA== IHJlcGxhY2Vz IGxpbmViYWNr IHB1c2hlcw== IGNoZWVr IFNoaQ== X0JZVEVT UkVB 4bqjbg== X0NPTk5FQ1RJT04= R2F0ZXdheQ== IFRyYXZpcw== IEFY IEJhc2ljYWxseQ== IFVwZ3JhZGU= 4Ko= dGhlbWVz ZXJtbw== a29y RmVtYWxl X2F0dGFjaA== IOyCrOyaqQ== IHBveg== PT09PT09PT09PT09PT0K KHN5bWJvbA== IFNlY3Rvcg== X18pCgo= X3BhZGRpbmc= 77yaIg== IGZhYnM= IHJhbmdlZA== c2V0TmFtZQ== IHBlcnJvcg== 4pc= IEZpbGVSZWFkZXI= IGZ1bGZpbGxlZA== X0N1cnJlbnQ= IGRvbWluYXRl IHNtdWdn UG9zdE1hcHBpbmc= X2ZvcmNl IGJsb2M= IEdpYW50 KHZpZGVv IENV U3lzdGVtU2VydmljZQ== IGVsZg== IGtvbnRha3Q= 66o= a2Vlcw== Z3Rr IHBhcmFtSW50 IG1hcmt1cA== dWFsZXM= IGFjY291bnRlZA== IGdhbmdiYW5n UllQVA== IFdyb25n IGNyZWRpdGVk IE1FU1NBR0U= IGZsYXdz IGJidw== IG1ldGFib2xpYw== IE9FTQ== L2V2ZW50 KENvbGxlY3RvcnM= bW9udG9u YXBwZWFy IG9wdGVk IGNoZWF0 IGRhdg== IFByb2NlZWQ= IOq4 YW5rZWQ= 0LjQtw== YW5zaw== IEhhbmc= IENsZXI= IGRpc2d1 IGNtYXA= LmNsanM= IGF1bWVudA== bGV6 IEpvaW5lZA== X3JlY2VpdmVk IGFlcmlhbA== b3RlbA== IGdyZWV0 InM= IEdlbmVzaXM= IENhbGlm cGFuaW9u IHRhaWxvcmVk bWFwcGluZw== YW5kRXhwZWN0 LnRyYWNr YXRvbXk= IE93 dWxsYWg= Llllcw== IFNpbXBsZU5hbWU= ZGJo J2Vu IG5vbnNlbnNl IHBoaWxvc29waGljYWw= KGdldENvbnRleHQ= IGlzc28= IEFDRQ== c3RhcnREYXRl IGLEmWQ= IEFVVEhPUg== IEdsb2Jl IGluc2VjdHM= X0Fs dXNoaW5n 6K6w L0hvbWU= IExvY2FsRGF0ZQ== bmVlZGVk aGVzaXZl IGlsbHVzaW9u 5LqM IHRyYXQ= eG8= L2RldGFpbA== X01BVENI IGJyb2FkYmFuZA== IHdhbA== IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbg== SVJFQ1RJT04= IG5vcnRoZWFzdA== ZXNpdW0= IENsaWVudGU= dWxhbmNl bnR5 IHRlY24= RGV2aWNlcw== IGdyYWlucw== IE9n IFNFTA== dWRpYW50 ICsrOwo= IGV4cGxhbmF0aW9ucw== b2Njbw== IGRpZXRz IGNvaG9ydA== KGNvbnRyb2xsZXI= Lkl0ZXJhdG9y LXJpY2g= cm9jZXNz R0Q= IGNhcmJvaHlkcg== IGZyaWVk IEVtcGxveW1lbnQ= 7J6l IExlb25hcmQ= XyR7 cXVhcmVz IGNvbXBhbmlvbnM= IHBhcmlz IHN0aW11bGF0aW9u IFpvbw== IHJlbGV2YW5jZQ== IENvbG91cg== IHNwZWFy b3Rpb25hbA== IExpdGU= IEtvc3Rlbg== IMOz X2F0dGFjaG1lbnQ= b3JwaGlj IGRhbWl0 IGRsZw== IHRocml2ZQ== Q0hBTkdF IEFwcGFyZW50bHk= IGF0dWFs IHJvb3RlZA== KGltYWdlcw== YXdp YXJpYXQ= IGNoZXJyeQ== U1RBVElD bW50 IFVzZXJJZA== aWxsZXQ= IEhpc3Bhbmlj IG5haw== IGNlbnRybw== IGRpbXM= X2luaXRpYWxpemU= xLFr IENlbnRlcnM= UkVO IGV2b2x1dGlvbmFyeQ== IFRvcGljcw== X2RhbWFnZQ== ZW1lcg== IHJ1bmQ= IHB1bmlzaGVk IGN1Ymlj ZmFpcg== W107Cgo= IGluc3RhbnRpYXRl IG92ZXJzZWU= LWRlbGV0ZQ== dW50ZWVy c3RhcnRUaW1l IFBpcGVsaW5l X0dBTUU= IENpcg== CU51bGw= LkZvcm1hdHRpbmc= dWN1bWJlcg== IFJpZGU= IHpvbw== IGNoZWNrZXI= 5ZCM PUM= IGdyaXQ= Iik7Ly8= X3h5 IERlY2xhcmF0aW9u IGNhbGxhYmxl Rm9v IExpc3RJdGVt IGluYWNjdXI= bWxpbg== CURhdGE= IGV2b2x2aW5n YXdhbg== IGNhZmU= Zm9saw== X0lEWA== IEFueXRoaW5n IFBhbGVzdGluZQ== IEdyaWRWaWV3 IGNvbG9ueQ== IEdlcm1hbnM= KCs= LnBpZA== LmpzeA== IFN1cGVyaW9y Q2hyaXN0aWFu IExlY3Q= CUdhbWU= IGluc3RydW1lbnRhbA== QW5pbWF0aW9ucw== 0LTQsNC7 IE1vc2Vz CQkNCgkJDQo= enM= a3Rl 5Lia X0RJU1Q= Yml0bWFw ZEI= IHBlcnNpc3RlbmNl 0YDQvtGB JGw= QnJvbg== IHt8 X2NoYXJ0 IENvbnN1bQ== IGhlbXA= ICIpKQo= IGF0dGFja2Vycw== IGtub3dsZWRnZWFibGU= IGNldA== IHZpcnVzZXM= J0k= IHBpdGNoZXI= IHN3ZWVwaW5n PWxpc3Q= YXB0b3Bz LmRlcHRo IGluc3RydWN0ZWQ= IFJ1cw== YmVuaGF2bg== INC40L0= U3BvcnRz IG9uc2V0 5p2D LlJFRA== X3Np IFBTVA== Lm9uQ2hhbmdl PnRhZw== IFJvaA== X2NoYXJhY3Rlcg== IExhd3M= IEJhY2hlbG9y X3N3YXA= LnJlYWN0aXZleA== IHJld2FyZGluZw== TWVkaXVt LVs= IFJlY2VudGx5 Sm9pbnQ= cGFydGl0aW9u IE1pbnV0ZXM= IGluZG8= IGFic29yYmVk IEdO X0lORA== IHNhYmVy U3Bhd24= b3V0cHV0cw== IEplZmZyZXk= IG1lZGlldmFs aGVk R3VpZGU= IHBzeWNobw== IGdsYW0= RWxpbQ== w6RkY2hlbg== X3BsYWlu IFNhdQ== LWZvdXI= IGFuYWx5emluZw== UVVFUlk= IHRvbWF0bw== X2J1dHRvbnM= VkVO LnNldFN0YXR1cw== LlVybA== KwoK IGNvbXBsYWluaW5n ZGVncmVl Y29uZmlybWVk IHN1YnQ= cGFyc2Vk IHRvcnF1ZQ== IHRyb3VibGVk IFRBUkdFVA== IHRyYWRlbWFya3M= IENvb3JkaW5hdGU= IFZpdg== IC8vfQoK IGFwcsOocw== LmdldFBvc2l0aW9u KEtleUNvZGU= IFNpbHZh IG1ldGVvcg== IGVuZG9yc2VtZW50 T3ZlcnZpZXc= IFBvc3M= LkluamVjdA== IGV2ZW5seQ== IHZpc3VhbGl6YXRpb24= IHdjaGFy IEhETUk= IGZ1bmN0 aWNrbmFtZQ== JywnJywn IGZvcndhcmRz TWFuYWdlZE9iamVjdA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= CXNlcnZlcg== IE91dGxvb2s= IENocm9uaWNsZQ== IGR1YmJlZA== IGRvaw== IFdlYXI= LkFM cGFyZW4= LkludGVyZmFjZQ== SW50ZXJmYWNlcw== LmNvZA== IGRpYg== Lkdsb2JhbGl6YXRpb24= IEFjYWRlbWlj IGFzc21z QXV0b20= IGx3 IE5X ICYmDQo= IHByb2JsZW1h IE1hbnVmYWN0dXJpbmc= bGltaXRz LW1vYmlsZQ== IGZpbG1l L21hcA== IGRvaXQ= IEluaw== IHN1ZWQ= LmFycg== IHVuZGVybWlu IFByb2M= Y3JvbGxWaWV3 X18k IHNpZGV3YWxr KHRoYXQ= 4Li3 W3E= Z3JhbW1hcg== IHTDqw== cXVpdG8= IHNwaXJhbA== ZXh0ZW5kZWQ= IGZvY2Fs IGRpZ2dpbmc= cGFz IFRhbGw= LnByb3h5 aXR1cmVz VFJBQ1Q= IFJlYWxt IGZlZGVy IG9yaWVudGVk IEFsdGVybmF0aXZl IG93ZQ== IHNvdXJjZWQ= aW5rZXI= LmRldA== U2Vw IFF1aQ== IFBhbG1lcg== KF8s c2FtcGxlcw== b3llcg== dWxsYW4= cXVleg== RWRnZXM= IHNob3V0 IEFjaGll IGhhYXI= X0NvbnN0cnVjdA== IHByZW1hdHVyZQ== IHJldmVydA== JykuCg== IHNjaG4= ZmlsdGVyZWQ= bnVsbHB0cg== U2F2ZWQ= aXRlY3R1cmU= Q0xB IHZs c3RlbGw= CU1l IExpcA== bmF0aW9uYWw= IHdob2xseQ== IHNwcmluZ3M= LlRpbWVy CXNyYw== ZWxzZW4= 5YW2 IGNvbW11bmljYXRpbmc= IFF1aXo= IHRlbmc= IGdleg== IE91dHNpZGU= LlNpZ24= KGNz IGRpc3B1dGVz IFdlaXNz YW5uZXM= Pk5v IEJhY2g= LnJlbW92ZUFsbA== cmVmZXI= L2Rhc2hib2FyZA== IEFqYXg= SW5kZXhDaGFuZ2Vk IFdlYWs= JyIK IHNpZ2h0cw== YWNjZXNzVG9rZW4= IEpvaQ== KGRvbWFpbg== CWN2 IGNvbnRpbnVhdGlvbg== IHBsdW0= YWRpcg== LnNldE1lc3NhZ2U= IO+8jA== IHN3YWxsb3c= IExhbXA= IHF3 IHV1 Q29pbg== dWJpYw== IERlYWxz cmFjZQ== IGRpY3RhdG9y IG1lbWU= dHVybmVk IEp1bGll LmdyaWRDb2x1bW4= IHB1cHB5 IHBhbQ== ICl7DQo= IGludml0aW5n IGZyZW5jaA== dmlt IHdyYXBwaW5n ICMtfQo= KFst RWFybHk= IHNoaW55 LmZhY2Vz IHJlYmVsbA== YWJjZGVm w6RsdA== IGVzdGltYXRpb24= cGh5cw== bG9zdXJlcw== X1JFTA== IGV4Y2x1c2lvbg== IFNreXBl d2Vpc2U= LXN0b3A= bm90aGluZw== IEVnZw== aXNvcnM= UmljaGFyZA== IGNvdW5zZWxpbmc= IGNvbW1lbQ== IFFNZXNzYWdlQm94 IFN5bmQ= IEZyb3N0 IENvbXBldGl0aW9u IEF3YWtl IHRlZA== aWNpb25lcw== IERldkNvbXBvbmVudHM= VkVSVElTRU1FTlQ= b3R0aQ== LnJ1bm5lcg== IHVuaXF1ZWx5 LmZsYWc= CXJz X2dlbmVyaWM= IGBgYAo= QUNISU5F IG1laW4= KEFwcGxpY2F0aW9u KGJy IHJhdGlvcw== Oiw= IFhDVGVzdA== dXN0YWluYWJsZQ== LXd3dw== aXRsZXM= X1RFTVA= IHN5c3Q= dW1lcmljVXBEb3du CWFzc2VydFRydWU= IHdm LnBlZWs= IEJ1bGc= IHRlcnJpZnlpbmc= Lk1PREU= IEdX w6Fy IGZpYw== IGNvbW1pdG1lbnRz LXRlY2g= IExpcXVpZA== b3Bleg== emhlaW1lcg== YcOxYQ== LW1lZGlh KGFuaW1hdGVk X2dvYWw= IGd1bQ== eXN0b25l LlNFVA== IFdlbmQ= c2V0Q2VsbFZhbHVl IG1zZ3M= Y2FzaA== QUxMT0M= L2F3cw== IG1pY3Jvd2F2ZQ== LlBvaW50ZXI= CUNvbnNvbGU= X3NvcnRlZA== IEZpbGlw UHJvZA== IC8vITw= aW5ncm91cA== IGtz X1RSSQ== IHRlYXNwb29u IEFUVA== IHJlY292ZXJpbmc= IEdMT0JBTA== LlBhcg== IC8+Owo= IG1hcmJsZQ== dWxhdG9ycw== IEN5Y2xl IGhlcmJz X21ldHJpYw== KSE= X0NMT0NL X0J1dHRvbg== SGFycnk= 6L+b IHN0cmFpbnM= IEFwcEJhcg== IENoYW4= L3ZpZGVv IGJhbQ== LlByb2dyZXNz JGY= bGVtZW4= IGlycmVndWxhcg== IER1bmNhbg== IE1pbnQ= LXZpZGVv 4Ka+ w7N3bg== IEVNUFRZ IHN0YWNrZWQ= IEhB X2N1dA== IHdoZXJlaW4= IFdheXM= KGNvdW50ZXI= 6K+V Rm9ybUdyb3Vw IGJsZXc= Y291cnNlcw== IHByb2R1Y3Rvcw== cnlz IFJlc3Ry IHN0eWxpbmc= PnM= IHBpdg== IGl0ZXJ0b29scw== Z2V0UmVwb3NpdG9yeQ== IElr X2RldmljZXM= bGF5dWk= IGhhbGZ3YXk= IGZyYW7Dpw== IHR1bmluZw== T0E= X05vZGU= YXJkZQ== IGZpZXJjZQ== bGljdGVk Iw0K IGJyZWFrdGhyb3VnaA== IEVyaWs= IGJyaWRl IC4i Y3VsdXM= aW5zaWRl IEluZGlhbmFwb2xpcw== IEVF IHlvZw== dXJyZXQ= LmZz LmdyYWQ= X2NhcmRz X2FjY3VyYWN5 X2VwaQ== cXVlZGE= L29yZw== 6aqM IGNvbXB0ZQ== KSlb T3V0c2lkZQ== R3JlYXRlcg== IFJlbmRlcmVy LmFjdG9y QWNjb3VudHM= SWRsZQ== X2hvdXJz ZXJuZXI= Sm9pbmVk IG1lbmo= cmVxdWlyZXM= IE9QRVI= LnJlbW92ZUNoaWxk CXNw IGVzc2U= cmlmdA== eEZF IFNoYWtlc3BlYXJl X19fX19fX19fX19f IGJ1ZGdldHM= TW9kZWxTdGF0ZQ== ZmlsbGFibGU= LWNvbXBvbmVudA== b2Nvcw== IEJVVFRPTg== L2lv LG91dA== c21z VGhvbWFz IEFybWVk cmVzdW1l IHJvdGF0aW5n IFZhdWx0 IHNldXM= Ligq IGFtaW5v IFtdKTsKCg== IHByb3ZvYw== bm94 LkdldEVudW1lcmF0b3I= PT09PT09PQo= 5paZ X3Njcm9sbA== IGZpbG1lZA== IFNvY2k= Z2Fw Z3Jv Vm90ZQ== IkJ1dA== X1JD QW5pbWFs woA= aWJpbGU= IGF3YWtlbg== b3Jlc3Q= aW5qYQ== IEl2YW4= KENvbW1hbmQ= ICoqKioq zrc= IGt2aW5kZXI= L2hlbHBlcnM= X2Nhc2Vz dGc= 7IS4 UmVnaXN0ZXJlZA== CXBhc3M= X2RpZ2l0cw== IGNvbnRvdXI= IGluZmFudHM= IGp1c3RpZmljYXRpb24= IEZvcnR1bmF0ZWx5 Q29udHI= IG9uQ3JlYXRlVmlldw== X1NBTVBMRQ== IGFsbG93TnVsbA== IG51ZA== IGZldGNoZWQ= X2VxdQ== IFVuYWJsZQ== PVwiIg== PnsK IGNvbW1pdHRlZXM= aXN0ZW1h KyIu w61hbg== bWFudA== IHNvdXRoZWFzdA== 77yMCg== ZGlhbG9ncw== UFJPSkVDVA== Y2hhcmdlcg== LXBvcnQ= KHV1aWQ= LmV4cG9ydA== U2l4 IFJQ UHJlbQ== IGNvbnNjaWVuY2U= IG1hcmdpblJpZ2h0 X2Rpc3RyaWJ1dGlvbg== eWFtbA== cmVzaXppbmc= RG9jaw== IExvY2F0aW9ucw== R1k= U2VlZA== QlVGRkVS b3NzaXA= dWxsZW4= VGhpbmdz LXNlbGY= LnBvbGw= UExBWUVS IOWu R1JPVVA= IEF3YXk= IGdvc3BlbA== eGZk TWFyeQ== IFBvcnRhYmxl VFVSRQ== IHV0aWxpcw== IHNlaXQ= IHN0cmFuZA== IHRyYW5zYw== IChe IEFsZnJlZA== Lm1lbQ== LmNpcmNsZQ== IH4v Zm9yY2luZw== IHJpb3Q= cHJveA== VEhPTg== aXphY2nDs24= IE5J cm9zdA== IGRpc3Bybw== X2luc3RhbmNlcw== 77yM4oCc b2dyYXBoZXI= ZW5kYXM= IElzYWFj IFBpbmU= L2Rpcw== IGNvbG9yV2l0aA== aXRlcmF0ZQ== X3N0cmlkZQ== IHB1bnRv LkV2ZW50QXJncw== KGNlbnRlcg== IG5laWdoYm9yaW5n IFByaXNvbg== IE1lc3Nlbmdlcg== IGVwaWRlbWlj ZGFv X2NvbXBsZXg= IGdyYXZlbA== X0RJUA== w6ltZW50 IEFyaQ== X2JpdG1hcA== LnF1aXQ= KHZhbGlk IHBlbmQ= IHJlc3BpcmF0b3J5 IHJlYm91bmQ= RGVmYXVsdFZhbHVl 44Ot IGNvbW1pdHM= LnRlc3Rz X2Zy aXRldA== LnNm IHNwYWNlY3JhZnQ= Y3JpdGljYWw= IGRlcHJlc3NlZA== IEFueU9iamVjdA== IHVuYg== IGRpc2Nlcm4= KG15c3Fs TGF0aW4= IEJvZw== IFdpbGRsaWZl VG9GaWxl aW94aWQ= QFJlc3RDb250cm9sbGVy ICIkKA== IDw8Ig== IGRlZmVjdHM= IGRhdHVt aGlu IHJlYWxpemFy YW55YWh1 IFNpZw== QERhdGE= YWRhcHRpdmU= IENhdGhlcmluZQ== LmNy IENPT0tJRQ== IHBpY3R1cmVk IEZpZ2h0ZXI= UXVlcnlhYmxl IEFueXdheQ== IEdMRlc= X25hbWVzcGFjZQ== X2Z0 IF0p T3JnYW5pemF0aW9u IGNvbnN0aXR1dGVz IHF1YW5k KGNodW5r Ii8+DQo= IExha2Vz bWFpbndpbmRvdw== Q2FydGh5 c3Bpbg== KGNzdg== OnJlZA== LWNvbW1lcmNl 4Li5 IGRpc2NvdmVyaW5n IGVjbw== X2ZhYw== aW5jZXRvbg== IEdyZWVucw== and0 2LU= IEJyb25jb3M= IEdvb2Rz KEdUSw== IHJldHVyblZhbHVl IHNpZW1wcmU= IG5ldXRy d2VudA== IE5hdGFs IGVudGh1c2lhc3RpYw== 4buN Rk4= L2RhdGFiYXNl Q2F0YWxvZw== IGJydW4= IEthc2g= X1Bs aXNjcmlt LHdpZHRo IGlubWF0ZXM= QXNzaWdubWVudA== IEhhdmVu IHBsYXlncm91bmQ= ZXhhbQ== QENvbnRyb2xsZXI= dWxpYXI= LmdldFBhcmVudA== ICI7Cgo= OnNpemU= aXNzb3Jz IGZpcw== IGFsYw== ZW5zYXRpb24= IE5peG9u IG1pZ2h0eQ== LXN0cg== X3NwZWNpYWw= X0FEQw== IFR3aWc= dW1ibGluZw== LWFkZHJlc3M= IGhlcm9pbg== WVRF ICAgICAgICAgICAgICAgICAK RnJpZW5k IGF2ZQ== IFBORw== IEt1cmRpc2g= RGF0YVNldENoYW5nZWQ= IGJsYWRlcw== YnJhbA== U3RlYW0= IHNpZ3U= SVJUVUFM YWNvcw== VURQ KGRhdGFiYXNl aGVj IFN0cmluZ3M= X3NjYWxhcg== CWRlc2M= IFRMUw== OyIK IENvcmJ5bg== U2ltcGxlTmFtZQ== dWVsbA== IEVudHJl ZWxsaXRlcw== LXBsYWNl IGZyYW5rbHk= IEVyZg== Q0VM IHBhw61z IGhlZGdl IGxhdGVudA== IElSUQ== IEhlcmFsZA== IFByZWM= 67O0 LlRFWFQ= U2FsYXJ5 IGF1dHVtbg== IHRyYXZhaWw= LlN1bQ== IGNhcmVk TW9y IGludHVpdGl2ZQ== IGpvdXJuYWxz X0lU IFRyb3U= 5Lyg SGFzQ29sdW1uTmFtZQ== Q29tcG9zaXRl IHNwaWNl X2Rpc2s= X0NPREVT IEludHJvZHVjZWQ= aW9uYQ== IG51ZXN0cmE= b2N0 ICAgIAogICAgCiAgICAK KHBhcmFtZXRlcg== IHN0dWRpb3M= IHByb2plY3RJZA== IGJkc20= LlNxbENsaWVudA== aW1pemVy IENBUkQ= K3Q= YWFu LnNvbA== X0FkanVzdA== IHJpZ2h0ZW91cw== IExvZ2dpbmc= LmZpbHRlcnM= X1RBQg== CXN5cw== cm9waGlj b3RoZXJhcHk= IEJyb3dzZQ== a2V5Ym9hcmQ= Uk9O K1w= cm9wcGVk IGV4dGVuc2l2ZWx5 Zms= IGxpbWU= eWVhcnM= RXhj IHNwaA== IGNoZWF0aW5n YW5kcm8= w61v IHByaW5jZQ== b2lyZQ== IERlc3RpbmF0aW9u IENvbnZlcnRz IHVwc3RyZWFt b2xlZA== IHNlcnZhbnRz IHNlbWFudGlj IGNydW5jaA== IGV2ZW50dWFs cnVubmVy L2Vycm9y U3Bpbg== IHNlY3JldGx5 IGFzc2VtYmxl LlBlcnNvbg== ZW5kZXJyb3I= Xzw= IHBlbmRhbnQ= U2xlZXA= IENoZW1pc3RyeQ== IGJvc3Nlcw== bGs= KSkpLAo= QmxvY2tseQ== REVWSUNF IHJlZmxlY3Rpbmc= IGFtcGxl TWlsbGlzZWNvbmRz IFByZXNpZGVudGlhbA== IHVzdWFyaW9z IE5a IFNhbGFyeQ== IEFtYW5kYQ== X25w anVyeQ== IGvDtm4= IHRoZXJhcGlzdA== IGhvbW9zZXh1YWw= IERyYWtl LXdpbmRvdw== IExvY2F0ZWQ= LkRyaXZlcg== IFZJREVP IG1lcmNoYW50cw== IENoZXN0 LWxvY2s= L3BocA== IG1pbGFubw== X1NUWUxF YXJnZXI= aWRlYQ== R1VJRA== YWR2YW5jZWQ= bWVhbA== T3B0aW9uc0l0ZW1TZWxlY3RlZA== PScl IENoYW0= OmRhdGE= KHN0YXQ= V2lsbEFwcGVhcg== IGluZm9ybWFs YWpp IHJlcHJvZHVjdGl2ZQ== IENBUw== 44Gj RlVOQw== IFJ1dGg= KSso Q09OU1Q= IEZhbnM= IGdyb3VwSWQ= eGZmZmZmZmZm IHNhbXBsZXI= IH19Ij4= LnRoZQ== IGhvbGxvdw== V0FZ IEZhY3VsdHk= QXR0cmlidXRlZFN0cmluZw== IExvb2tz IFJleA== ams= IE1JTA== IGJhcmQ= Lkxvbmc= IGxpdmVzdA== IHNrYWw= aWNpc20= TUFJTg== IG11Y2hv Qk9EWQ== IGVzZQ== CXVzZQ== Rm9vdA== LlNRTEV4Y2VwdGlvbg== IGluaGVyaXRhbmNl cmVjZWl2ZWQ= IHB1dGFz ZWRpcw== YWxzYQ== IEVycm9yTWVzc2FnZQ== Qm9va2luZw== IHRyYWN0 YWN6 IENhbnQ= X3JlZ2V4 IGlkZW9sb2dpY2Fs IGppaGFk aG9z L3N5cw== Y29sbQ== KHBvb2w= IGVzdMOhbg== IFBlbmRpbmc= ZW3DoXM= IGt0w7NyeQ== KSk7CgoK dHJhbnNhY3Rpb25z IHdpZWxk aXRlcmU= ZXJ0dXJl X3Nz IHN0cmV0Y2hpbmc= IHByaXNvbmVy LlJlYWRBbGw= IGJlc2No LS07DQo= IGNyaXNw X1NDQU4= IGFl U3RyaWN0 IE1pbm5lYXBvbGlz IEJvZWluZw== YXJpcw== cmVr X3BpcGU= IHByaWVzdHM= KEVJRg== ZWhpY2xlcw== IEludGVyYWN0aXZl YmV0d2Vlbg== CU51bGxDaGVjaw== IEJsYWly IEx0 X2lubGluZQ== ZXRoeWw= wrw= X3BhY2thZ2Vz IGJhcnJlbHM= X2hl IHJlZ2V4cA== X3B0cw== X0hhbmRsZXI= aW5ndWxhcg== IE5pc3Nhbg== IFJhbmNo IHBlcmNo VW5zdXBwb3J0ZWQ= U21pdGg= IExlZ2VuZHM= TWk= IGdm c3RlZGVy IGFjcXVpcmluZw== IHNpbXVsYXRvcg== KCksIg== cmVjZWl2ZQ== IGlucGxhY2U= QUNUSU9O IFdlYkRyaXZlcg== ZmlsZXN5c3RlbQ== PE9yZGVy bG9wZW4= IEhFSUdIVA== LnNldEJvcmRlcg== jbA= X19bIg== IGNsYW1w U2Vnb2U= YmFuZHM= dG9MaXN0 YW1iYQ== PicrCg== IGNyZWRpYmxl YW1hdA== cGxheWluZw== LnNldEltYWdlUmVzb3VyY2U= cXVlbA== IHBvZHI= Z2VvbQ== RWs= IFFhdGFy IGdlbGQ= PycsCg== IGN5bA== KGF4 IFdJ dXJhbGx5 IEJyYXNpbA== IHNlbnph YWxleQ== b25lbg== IGJhaA== IG1vbGVjdWxl UmFk 6L+w QU5DSA== LWJhY2tncm91bmQ= LWFnZW50 IHByb2xpZmVy OmJvb2xlYW4= IHRpZGU= ZXJpYWxpemVy XzsNCg== RmVl Kiop ZXJneQ== IEhvbm9y LkxvZ2dpbmc= aXJpcw== IHVuZGVybWluZQ== IER5 IHR5cg== IGRlcXVl IGRhbWVy KFtdKQo= LmxheW91dENvbnRyb2xJdGVt cGVhdGVk Q0FO cmFnbWVudHM= TGFuZA== KV0pOwo= IFNhaA== IERFQ0w= V2l0aGlu IE5hbWVzcGFjZQ== YW5vdGhlcg== c2VtYmxpbmc= LmRlc2NyaWJl Q29uc3Vt IEZlYXI= Z2l2ZW4= T3Jhbmdl PGJvb2xlYW4= IHN0ZWFkaWx5 cGFSZXBvc2l0b3J5 IHJlc3VsdFNldA== X0VOVEVS X3JlcGVhdA== IHRvbmVz IFBST1A= bmFs cGFydGljbGU= IHNpZ25hbGluZw== IGFjY2Vzc29yeQ== CQkJCQkJICA= IHZpZWxl IE5vYWg= LWFn IG11cmRlcnM= IGFpcmVk IFBMQVk= IFN1bGxpdmFu X0NvcmU= IHVsb25n IGJsb2dnaW5n PlRoaXM= IGRhdGFJbmRleA== IHByaW50YWJsZQ== IEV5ZXM= X3RhcmdldHM= KFB5 Lm92ZXI= IGJydQ== YW1wdG9u IHBsYWludGlmZg== PEtleQ== YnVsbA== IOKfqA== SXNzdWU= LmNvcm5lclJhZGl1cw== Q3JpdGljYWw= X3BoaQ== LmFuZ2xl IGR5bmFtaWNhbGx5 ISIpOw0K Pik7Cg== aW52ZXN0 LioKCg== IHTDqWzDqQ== IHN1cGVyZg== IGNhc2NhZGU= RFRE IHZpdmlk IHN1YnNpZGllcw== IEhhc3M= IGNvbGxhcHM= IGNlcmFtaWM= e30iLg== IExlYWthZ2U= LXRyYXNo Y29sbGFwc2Vk LXNvY2lhbA== IENoYWQ= IGluY2xpbmVk IHN0bw== IHN0b3J5Ym9hcmQ= LnBheW1lbnQ= c3RhY2tvdmVyZmxvdw== IFJhaWRlcnM= ICMn b2xpY2llcw== 7Jy866Gc ZW1hcA== IGtq IHF1b3Rh IEdhcmRlbnM= 67KI IEFuZ2Vscw== IG9mdA== IGxvd2VyY2FzZQ== IGlQYXJhbQ== IGNoZWFwZXN0 dW50YQ== X3BrdA== aWNhdG9ycw== IGxldXJz IGRlY3JlYXNlcw== CWRlZmluZQ== UFJFQw== YW1tZXJz IFByZXBhcmVkU3RhdGVtZW50 KGRpcmVjdGlvbg== IGNyZXdz YXJrZWQ= IE1lbXBoaXM= IFNlbGw= R1RL IG1haWQ= OmRpc2FibGU= 6ZuG IFBm IGFsYmVpdA== b3Blbmg= Pz4iPgo= LmdldFNvdXJjZQ== KHNjYWxl RHU= IFBJTA== X3JlZnJlc2g= IGJldHM= KGNhcg== IFZvbg== fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== IEdyYXQ= TXVjaA== KERpYWxvZw== LnN0b3BQcm9wYWdhdGlvbg== IHRlaw== IGV4aXRz J10sJA== IHBob25lTnVtYmVy dWNz ZWNpbWFs LS0tLS0tLS0tLS0tLS0= aW5w LnBvam8= IGNvcnB1cw== IHByYWN0aXRpb25lcnM= LnBpYw== InRlc3Rpbmc= IHN0cmluZ0J5 Lk5vdE51bGw= IHJhbmc= LkR5bmFtaWM= X1JlbmRlcg== 0LDRgtCw V2FpdGluZw== IFdpaw== IG92ZXJ3aGVsbWVk JSI+ IEFF fX0+Cg== dXc= X3R5cA== IGJ1Y2tldHM= IGdyZWV0aW5n IGxhdWdodGVy IGFudGFnb24= dWdnZXN0aW9u LWVtYWls CXRvcA== IGVyb3M= X3RyaQ== IGlzc3Vpbmc= IGjDoQ== IGlzb2xhdGU= T3ZlcmZsb3c= LEU= IG51dHJpdGlvbmFs IEFiYm90dA== IG5m LnRvdWNo LmZldGNoYWxs X3ppcA== Iil9Cg== IGFtYXQ= IENpc2Nv IG7DpQ== UExFWA== IHNlaQ== Zm90bw== LnRvSnNvbg== 5aSa IEtsZWlu IGxpYmM= IG1pbmVycw== 5aI= LXByaW50 IFByaWRl VG9kb3M= IG1hc2tlZA== IHNldERhdGE= IHRlbGVmb24= IHVuaGFwcHk= IFRhYmxlcw== Z2Vi KGRlYnVn X2FsbG93ZWQ= LWFjY2Vzcw== IGxvZ2lzdGljcw== IGdlbXM= IE1hdHVyZQ== IHJzcA== IEFsbGU= LmdldEJ5dGVz XHdlYg== eW5jaHJvbml6ZWQ= UGFyYWdyYXBo IHRocm90dGxl LnNxbGl0ZQ== Y29uc3VsdGE= IFNlYWg= Q2U= IHN1Ym1hcg== RVJF Vm91cw== IHJlZGRpdA== IHNxbGFsY2hlbXk= LW1pbGU= b2NpZGU= UG91cg== fX0iPgo= c3RlYWQ= IEAo IFtdKQ== IEFkcw== IG92ZXJsb2Fk cmlkZGVu IERlc2VydA== IFdyYXA= IFBvcnR1Z3Vlc2U= ZXR6 CWZpcnN0 IG1pbGVzdG9uZQ== 5peg 0YPRiQ== KHN1Y2Nlc3M= PFZlY3Rvcg== Y29vbA== IFtdKTsK ZXJ2YWxz IGludmVydA== Imlv Y3Vyc28= ZnJhZ21lbnQ= IGZlYXNpYmxl LnNldFBvc2l0aW9u IGVsbQ== IGltYWdpbg== QFNwcmluZw== IGJhdHM= cHXDqXM= Z2FsZW1lbnQ= bnNpYw== Z2llbmU= ZWxsYXRpb24= IEJhaWxleQ== U2hhcg== IFR1bA== IEhL IGZyZWV6aW5n Z2xt Y2VhbnM= LWN1dA== X2NpcmNsZQ== 5ZGY bmVnYXRpdmU= IGluZGlhbg== c2FsdA== IHRpbmc= CW1vZA== IHNpbnQ= YWtpbg== dW1s IFRleHRJbnB1dA== IHBvcHBlZA== VE1Q IHBhcmtlZA== 15nX IEZ1c2lvbg== IGhlYXRlcg== RVRG cm96ZW4= aGFsbA== IE1paw== bGV2YXJk LWhlYXJ0 CW9yZGVy TWFraW5n IHBsZWRnZWQ= IGRpcnM= JHBvc3Q= IEhlcnI= c3RhbnRpYXRl LCIK LmdldENvbG9y IFNBVA== IHRpbWVkZWx0YQ== IE1haQ== CW1ldGhvZA== IGlkaW90 IFRyYXY= aWRlbnRpZmllZA== IERpdmluZQ== LmdldFBhdGg= RGFzaA== IGluZmlsdHI= IGhhbmRsZVN1Ym1pdA== YnJvb2s= LmdlbmVyaWM= LnNob3J0Y3V0cw== Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== IGRhdGluZ3M= IE1W 77u/Iw== fSIKCg== IGltcHJpc29ubWVudA== YXNvbmlj cm91ZA== dWNpb24= 5oql IGRpYWxlY3Q= IG9uTW91c2U= Y29uc3RleHBy LmxhYmVsQ29udHJvbA== IHdlYWtlcg== IG1hbmtpbmQ= IFJFQ0U= IGRpeg== IGFwcEJhcg== IHF1w6k= ZnJh X2RlZmF1bHRz IGFsaXF1 X2F0b20= OmluZGV4UGF0aA== IG1pc3Nlcw== IHZpc3VhbGx5 IEhhbmRz U1RSVQ== aWF0ZXM= X2Fzc2V0 RmluZGVy bWlkdA== IHNuYWNrcw== KF9fKCc= LnVyaQ== IEluc3RydW1lbnQ= dmVuaXI= KCRfXw== LkRvdE5ldEJhcg== IGNvbmZpZ3M= IGd1ZXNzZWQ= 4KS/4KQ= IGluaXRpYWxpemVy ID8iLA== IFZlcml6b24= bWFuaWZlc3Q= Z2ViZW4= LmRldGFpbHM= R2F0ZQ== cG9uc2libGU= IEVsaW0= LHN0cg== IHdyaXRpbmdz IERlcmVr IENvb3JkaW5hdG9y IHBpbGxvdw== IG5vdGljZWFibGU= UnM= IGR1cGxpY2F0ZXM= ZXJuZWxz a0o= Lnp6 b2xsYW5k IFNFQ1RJT04= X2ZuYW1l dWZmbGVk J10uJzwv X0NN IHly cGxhdA== b2JvZHk= bmRl KEVsZW1lbnQ= IEF0bGFz IO+8iA== IG5pdmVs IGluc2lzdHM= W1A= IGVudGh1c2lhc3Rz IOyeheugpQ== IGJldmVyYWdl e30iLA== OnJpZ2h0 IG5vdXZlYXU= IENvbXBsZQ== IFBhZw== b3ducw== IHJlbWVtYmVycw== IFByYWRlc2g= IGNoYWxr IExhdXJlbg== XFNlcnZpY2U= X0dFTg== PiIpCg== IERvbGxhcg== IGVtb2pp Q2Fyb3VzZWw= LXBsYXllcg== IGFkanVzdGluZw== IGp1Z2E= YWxsZW5nZXM= Z2VuZQ== KGJvZHlQYXJzZXI= bG9wZWRpYQ== IEJlaGluZA== IHNsZWV2ZXM= IGRyYWdnaW5n IENoZXZyb2xldA== IGJpeg== aXZpdGllcw== IEZyZXF1ZW5jeQ== LGNoYXI= LldISVRF X3ByZXZpZXc= KSc7Cg== X2F4 SU9OUw== LmNwdQ== LmlucHV0cw== VUJF X2ZlZWQ= IFN1cHBsZW1lbnQ= ISku ZXN1cw== IFVEUA== IG1pY3JvcGhvbmU= IGNvbmZpcm1z LmlzTm90RW1wdHk= IjoiIiwK X1NDUkVFTg== CWV4cGVjdGVk Ky0rLSstKy0= IEhhaXQ= ZmFzdGNhbGw= IGRlcGljdA== dmI= X3BpY3R1cmU= CWRlc2NyaXB0aW9u IFdpZmU= dWNp IHZpY2lvdXM= 5LuW dWViYQ== IHNldFVzZXI= 44Gh IGRpdmluZw== IG9wZXJh dXNlcmNvbnRlbnQ= YXJhaA== KX0s eXVu dmVsdA== IHVuY292ZXJlZA== IGhpcHM= IG9zY2lsbA== IGFzc2VydGluZw== IFhp LnJlc3RvcmU= a2Vh IHNwZWxsaW5n IGRlcml2ZQ== YWJ3ZQ== IERvdw== LnNldFR5cGU= X3Zz IGNvenk= LmNhdGVnb3JpZXM= T3Jn X21ncg== IGR1bmdlb24= Y29sbGVjdGlvblZpZXc= IEJsYW5r YWNpYXM= w6TDpA== X2NsZWFudXA= X0FDVElWSVRZ IHRyaWFuZ2xlcw== Lk1lbnVJdGVt IGlwaG9uZQ== IFdvbg== XV0KCg== IENvbXBhcmlzb24= LkRvYw== IGNhbm9uaWNhbA== IFN1ZGFu Jyl7 VXBJbnNpZGU= YnVpbHRpbg== RU5DWQ== eGJl IGNodWNr IGNvbnRyYWRpY3Q= IG51ZXN0cm8= IGFyY2hpdGVjdHVyYWw= IEZpYg== IGNvbXBhcmVz Kms= Q2Zn 54Sh bnRlbg== TWF0Y2hlcw== IERPV05MT0FE X0hBTkRMRVI= bWFuYWdlbWVudA== W1M= RU5H woDC ZmFuZw== IHNsaXBwZWQ= IExhbmth ZXNjYXBpbmc= IHRhY2tsZXM= IFBlZHJv LlByb3A= Licn LkdlbmVyYXRlZA== Lk5ld0d1aWQ= YXRyaWdlc2ltYWw= aWxsb24= IHN0YXRpc3RpYw== c3BlY2llcw== aG9sZGluZw== RHJ1cGFs IGZ1bmRhbWVudGFsbHk= IGJvbmRhZ2U= IHJlc29sdXRpb25z SW5saW5lRGF0YQ== XFR5cGU= ZXN0aW9u LndyYXA= IHdhcnJpb3Jz IExPQ0FM QXJjaGl2ZQ== IGVtYnJhY2Vk 4bun LlZlcg== IEFmZm9yZGFibGU= b2xlc2FsZQ== IEFwcGxpZWQ= IENvbnZlcnNpb24= bWVnYQ== X2NhbQ== IGNlcmVtb24= YXVydXM= IFZvbGs= Lm9wZW5z L2Fib3V0 IFN0ZA== am91cm5hbA== KCkpew0K LCJc KEFycmF5cw== IERlbnNl YXNlw7Fh w6RubmVy L3N0YXQ= dXNlckRhdGE= IGdlcm1hbg== IHR6 d29ydGh5 Rm9ybWF0RXhjZXB0aW9u cGhlcmQ= IHNtaWxlcw== IFdoZW5ldmVy KGFkYXB0ZXI= LmJhZGxvZ2lj IGJyaWVmaW5n LkdyaWRDb2x1bW4= LWNoYXI= ZGltZW5zaW9u IENvcHBlcg== IG5pbnRo ICd7ew== IHJhdg== X1RhYmxl IGRlcml2YXRpdmVz IFJhaXNl IEZ1dA== YXJtb3I= LXBhZGRpbmc= IHJlbWlu CXN0eWxl IE1lbWJlcnNoaXA= IHNwcmVhZHM= IGdhbGxlcmllcw== IENsYXJrZQ== IGNvbmNlcHRpb24= bWludXRl IGFidXNpdmU= X2Fkag== IHRlcnJpZmlj IG92ZXJ0 b3VyY2luZw== IGVudHJhZGE= bGV2ZWxz IGNyaXRpcXVl IHJlc3BlY3Rz IE1NQQ== aWVuZQ== IGVuY2Fwcw== IFJheW1vbmQ= RGl2aWRlcg== aXZhYmxl YmF6 IEBfOwo= IENsYWlyZQ== IHVyZ2luZw== Q0VF IHRyYW5zZm9ybWVy ZGlzY29yZA== IEpvdXJuZXk= dG9z IGNvbXBldGl0aW9ucw== IE9CSg== IEJpcw== IHJlbGF4YXRpb24= aWR5 X0lOU1RBTkNF IFByZWY= ZGFkb3M= aWNpZW5jaWVz IE1lZGlhUXVlcnk= IEN1YmU= IFN0cmFuZ2U= Z3B1 KGRheXM= X0luaXRTdHJ1Y3Q= IGZpbmdlcnByaW50 ZW1hdA== IEdlY2tv IHJhaWxz IEx1bQ== c3RyYWN0aW9u aWd1bmc= KG1vdmll X2RpY3Rpb25hcnk= X2ludGVycnVwdA== IFFD aWtlZA== YXBwZW5kQ2hpbGQ= cmVjaXBpZW50 csOp VmU= IHRvd2Vs Lmxhc3RJbmRleE9m IHBsYWNlYm8= IFdpZQ== LmVzcA== KERlYnVn b3BlcmF0aXZl IGRlY2Vhc2Vk Jmlk CW11dGV4 ZWxpYw== IGJhcHQ= CQ0KDQo= IGZhcnRoZXI= SGFsZg== LmRpc2FibGU= Lm1lbnVTdHJpcA== bGVjY2lvbg== IHJlc3VsdENvZGU= IGNhbnM= LWVsZWN0aW9u ZmVtYWxl X0ZJWA== YXVzaWJsZQ== IFBPV0VS IHJlY29uc3RydWN0aW9u IHNjYW5z Llh0cmFCYXJz 4oCYcw== UmVtb3ZlZA== IHBhcmFncmFwaHM= X21hcmdpbg== IGx5bXBo IGJvcw== bGluZ3Rvbg== IEJhcHRpc3Q= IGFkdmVydGlzZW1lbnRz IE1hbmFnZQ== L3l5eXk= SU9VUw== RU5DRVM= IEZpY3Rpb24= CW1lbnU= IEZpbGVPdXRwdXRTdHJlYW0= b3Zhbg== IEZlbmc= IHNraXBwaW5n Z2V0Q2xhc3M= YW5uaQ== IHJlYm91bmRz IHB1YmxpY2l0eQ== IGluZ3Jlcw== dXNlbWVudA== IHRob3VnaHRmdWw= LkNoYXJ0 IGhhdHRl cGFzc3BvcnQ= IGhvb2tlZA== IExlbnM= IGZsYWdzaGlw IHN0aXA= IEdFTg== IGNsdWVz aXB2 IFJpc2U= IEdldw== dGFibGVuYW1l IGZvcmVtb3N0 X3ZhbGlkYXRl X2FuYWx5c2lz b2xsYQ== IHF1YWxpZmljYXRpb25z IGRpc3RyaWJ1dGlvbnM= IEZsb3dlcg== IHRlbnNl IHRoYW5rZnVs IGNsdXRjaA== IHVuaWZpZWQ= cm9hZHM= IHNpdGk= IHN0YWxs X1BSSU9SSVRZ Y3N0ZGxpYg== X1VTRVJOQU1F LmJ5dGVz P3BhZ2U= ZXJtYWxpbms= IFZlZ2V0 L3ZuZA== LWF1dGhvcg== Lk5PTkU= IENvbmN1cnJlbnQ= IENyeQ== IHN0YXJ0ZXJz IEludGVyYWN0aW9u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExFVkVM RWxs IGNvbWJvQm94 IFRoZXJlc2E= dGVr X0hhbmRsZQ== IGFieQ== LmdkeA== LGVuZA== KExvY2Fs T2w= a25pZmU= YXJpYWw= IEhvZmY= IHByb3N0aXR1ZXJhZGU= RG9jdG9y SW5zdGFuY2Vz LlNldFZhbHVl CWZyb20= IGx1eHVyaW91cw== SW5kZW50 QWxsb2NhdG9y X0RSQVc= KCIsIiw= IEZyYW5jZXM= IGdyb3VwQm94 KHNjaGVtYQ== UHJpbnRm T1JJRVM= LWdyYWRpZW50 IHJlcHV0 YXJpbg== X0RPTkU= aW5jcmU= aWdudHk= IGV4ZXJ0 IC0u L0FwcA== LXRocm91Z2g= IGRlY2xpbmluZw== IGRlc3NlcnQ= IGluY3VtYg== IGRlc2lnbmF0aW9u LlBPUlQ= LHN0cm9uZw== IHNhbmRib3g= IHdpbmVz IFBhdg== JHN0cg== YXNrZWxs IGjDtg== IFBZ R2V0SW5zdGFuY2U= VGV4dElucHV0 Z2FtZU9iamVjdA== L2V2ZW50cw== Y3JlYXRlZEF0 IGxvY2FsVmFy IFdISVRF cGVyZWQ= aWxlZ2U= ZWZmaWNpZW50 LGNvbG9y Y2F0ZQ== IENhZmU= IHNpbWlsYXJpdGllcw== IHB1bXBz IEh1bmdhcnk= LlVzZXJuYW1l IHNrYXRl IHRvdWNoZG93bnM= IGFjY2VsZXJhdGU= IEhlbGVu T01FTQ== IEt1bg== X3ZvbA== IGZpbmRBbGw= IE1lbnNjaGVu YWhlYWQ= KTsi a29tbWVu IHBvc3Nlc3NlZA== LmFyZ21heA== LnRyYW5zaXRpb24= QVJQ T0xVTUU= KHNjcmlwdA== INCY IEZpbmRpbmc= b25jZXM= SW8= Qm9sZA== IHJlbmV3YWw= X0RJQUxPRw== IGRpc3JlZw== SU5URVJO IHRvdXRl IGVsZWN0cg== IEdyb3Nz CXRydWU= LkZpZWxkcw== IFdJRFRI IERlbnQ= IMOB TlNOb3RpZmljYXRpb24= IGFvcw== IG1lbGVl LlZhbGlkYXRpb24= IERFQw== LWRlcGVuZGVudA== IHN1aWM= VHJhaXRz JG1lc3NhZ2U= IERlYXI= CUZJTEU= bGFuZ3VhZ2Vz LlByb3Q= LmFkZHI= LWdlbmVyYXRpb24= SUNPTg== IHRyYW5zcGxhbnQ= LWRlc2NyaXB0aW9u IGNoYXNpbmc= IGNoZWVz IH0qLwo= VHJhZA== cXVlcmllcw== L3dpZGdldHM= c3VicGFja2FnZQ== IGVzcGVj IGNyYWNrZWQ= IGNvbXBldGl0b3I= UHVyY2hhc2U= LXRlYW0= b2xlY3VsYXI= b3JUaHVuaw== JlA= IHJlbGVudA== LyN7 IHByb2R1Y3RJZA== IOi+ IExhdg== IEFsdGVy Lk1vZGU= QURJTw== Z3Jw 5re75Yqg UXVpdA== IGRlcHRocw== LWNhdGVnb3J5 IERBVEFCQVNF U1BFTEw= IEZhbGNvbg== IFFTdHJpbmdMaXN0 ICcnLg== IEluc3RpdHV0aW9u ZGFtYWdl YXpvcg== YmVsb25nc1Rv dmVyYWdlcw== IE5PTkU= aXBwZXRz LFwK IGZvb3RwcmludA== X2FyY2hpdmU= bmFr LmdldEZpZWxk IFJlZmxlY3Rpb24= ICdd IEhCTw== X2Rpc2NvdW50 IGluY2VzdA== IERvZGdl IFdhZGU= Lk5P ImVuY29kaW5n IEJsb2NrY2hhaW4= IGxhd3N1aXRz IE1haW50 Y2h0ZW4= IMOpdGFpdA== IGt0w7NyZQ== X2N0bA== KHRpbWVy QmF0dGxl aXpv YXllZA== SU9S IEdsYXNnb3c= IHN5bnRo X2xvZ3M= LnBvc2U= X0FkanVzdG9yVGh1bms= KCgm IHVuc3VyZQ== eXN0YXRl 7ZWY64qU T1VMRA== Lm5n IGRlZmF1bHRkaWN0 d29ya3NwYWNl IHNlbGVjdGl2ZQ== UGlja2VyQ29udHJvbGxlcg== WU5BTUlD Lm1ldGhvZHM= IHBhdGh3YXlz IEZldw== S0c= Q1JZUFQ= Zm9sbG93aW5n IERMQw== IFNhcmE= IHByZXNldA== ZXN0cnVjdG9y IEt1cnQ= IGFpcnBsYW5l IG9tcA== IFBhcmVudHM= IE1hcnRpbmV6 LmNvbXBsZXRl IGJyb2FkbHk= IHNjYXJl IE3DqQ== IGVsaW1pbmF0aW9u IHBvdXJlZA== L3N3 IGNvbXVu IG1hc2M= IE9yZ2FuaWM= IFN0cmluZ1V0aWxz aWxhdGVyYWw= IHJlbHVjdGFudA== LWFnZQ== IG56 LiJc IHBhc3Rvcg== YWxleg== IGVmZWN0 cHJvdg== L2luaXQ= IHBlbm4= dW5kcw== IHNzaXpl IFByb2o= YmFzZW5hbWU= IHNoZWxscw== IE5lY2s= IEVuZm9yY2VtZW50 dmlkZWQ= c3Rvd24= U3BoZXJl JHI= dXNzZW4= YWZpbA== IFRlbGVncmFt IGFuYWx5dGljYWw= 0L3Ri9C1 dXN1YWxseQ== eG4= IGhpc3Rvcmlhbg== IEdyZWdvcnk= b2xwaA== IFVuYQ== IGNvbnRyaWJ1dGVz JS0= YW50aWFnbw== 0YDQtdC0 LnJlZ2lvbg== IGFicnVwdA== IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u IFRBU0s= X2ZpbmlzaA== IG5vdG9yaW91cw== IFZz IE1R IHN1bnNldA== IHVuYWNjZXB0YWJsZQ== YXJjZXI= IGlsbHVtaW4= IE9yYg== IGJo RXN0ZQ== X2Rpc3BhdGNo IHJpcHBlZA== IHRvdWpvdXJz IFBhcmNlbA== X2xs LnVzZXJOYW1l LmNsYXNzZXM= U09VUkNF KE51bWJlcg== 0LXQu9GP IGhlYWRwaG9uZXM= KHNpZGU= Y29uc3RpdHV0aW9u YW5uYWg= DQogICAgICAgIA0K IGNsaWZm LXJlZg== IG1vc3RyYXI= IFBvd2VsbA== K3k= IEJH X2ZyYWdtZW50 LlBvcnQ= IHJlYWxpemluZw== cGFyYW1yZWY= IGhvbWV0b3du QFRhYmxl KyI8Lw== b21pZA== IGR1Zw== CWJ0bg== IHN1YmplY3RpdmU= L2Jyb3dzZXI= IHVzaG9ydA== IE1vbnRnb21lcnk= LXJhdGU= CXB1dHM= bGV0aWNz b3Jucw== 4oCcV2hhdA== ZWVwZXI= LkludmFyaWFudA== IGNvbmNlYWxlZA== X251bXB5 PT09PT09PT09 KHBz TG9jYXRpb25z LmFzdHlwZQ== IENIQU5HRQ== Lk9yZGVyQnk= O2hlaWdodA== IGdlbnRl IGdydW50 IFBsYW5l IHNhZGx5 IExvZ2Fu X3VzZWM= LmRndg== IHNpbmNlcg== IHBu CWd0aw== IGluc3RhbGxlcg== IGRpc3BsYWNlbWVudA== IGJ1cm5z 0YPRgQ== aXZlcmVk Ol0pCg== c2VhdA== YW5pbmc= fSkKCgo= X3JvbGVz YXRpY2Fu IGdlbmVyYXRvcnM= IGh1cnRz IHNuaXBwZXQ= IGdzb24= IHNlZ3JlZw== IGRpc3RyaWJ1dG9y IGFkdmFuY2luZw== cG9zdGdyZXM= IHVzcg== IExpcw== LmFzc2VydElz X2Nk IGh5ZHJhdWxpYw== LmNvdW50ZXI= IEluZGVwZW5kZW5jZQ== IGRpZmbDqQ== VW5saWtl IHRvbWI= dmlr cG9zdGVk d2Y= IGRlc2NlbmRpbmc= ZHlu YW1lbnRhbA== IEZydWl0 IFlv LmRvdWJsZQ== IElB aWV2 aWJyYXRl IFJlbGlnaW9u TWFueVRvT25l LVRh IGJhbmFuYQ== IEF2ZW5nZXJz IEhvbG9jYXVzdA== IGdldEM= IGNvbmRv IEdvdGhpYw== IHByb3NwZXJpdHk= VFJBTlM= IGRvZXNudA== IENoYW9z SVRU IENVUlJFTlQ= XGhlbHBlcnM= X1NBVkU= YXZpdA== Y29tcHV0ZXI= X3NoZWV0 IEJyZXdpbmc= IHJvYmJlcnk= IOqyvQ== INC60L7QvA== IG7DpA== LnJlZ2V4 IGRpc3J1cHRpb24= IFNpbXVsYXRpb24= YXBpZA== IHN1cHJlbWU= zrw= IGNvbW1pc3Npb25lZA== IGFic29ycHRpb24= IE5ld2Nhc3RsZQ== CWNvbnN0cnVjdG9y VGVybXM= IHJpdg== IHJlbGlnaW9ucw== V2l0aFRhZw== Lkh0bWw= bGlua2Vk Q29tcG91bmQ= IE1hbnM= IGxha2Vz aXp6bGU= LnNldFNpemU= YWJlcg== IE5lZWRz cGFja2FnZXM= LlRhYlBhZ2U= IHJlZnM= IGlvdXRpbA== IERvaW5n ICJcKA== IHBoZW5vbWVuYQ== LkdldEludA== QUxUSA== IHBhcmxpYW1lbnRhcnk= IHJlZnVzYWw= IGluZXhwZW5zaXZl IH0KCgoKCg== IHNvbGlkYXJpdHk= CXB1c2g= aGF1bA== IEJlcmU= U2l6ZXI= SW5kaXZpZHVhbA== IGFuY2U= IGRpbGU= IFBlYWs= KGhy RWRpdGluZ0NvbnRyb2xsZXI= SE4= X1BFUklPRA== RVRT QmFubmVy ZXJyb3JNZXNzYWdl LkNBU0NBREU= LWlnbm9yZQ== IFNJR04= IE9C X2Rk KERFRkFVTFQ= IHNvbw== IFZpY3Rvcmlhbg== IGN1cnQ= IGRpc2NyZXRl cnlsaWM= aW1iYWJ3ZQ== LnRvRml4ZWQ= bMOk LnN0ZGlu IHF0eQ== Uk9MTEVS bWVkaWF0ZWx5 IHBsdW1iaW5n IFByb3BlcnR5Q2hhbmdlZA== YXJyYW50eQ== IEJyZWFrZmFzdA== LnNldEhlYWRlcg== LnB5dGhvbg== Y29tbWVyY2U= b3BlbmN2 Pi0tfX0K RnJlbmNo RW50aXR5TWFuYWdlcg== IFBsYWlu Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= wrM= KFJF Y2FwdA== IG9yZ2FuaXNtcw== IGpldHM= b2xvY2F0aW9u IEFwcFJvdXRpbmdNb2R1bGU= IGdsb3Jpb3Vz 5pyN IGRpc2NhcmRlZA== CQkJCSAgICAg IEFybm9sZA== bHVn IHBhcmw= IGhvcm1vbmVz IG1haA== IFNvbmlj IG9yZ2FuaXplcnM= X1BMQVRGT1JN Lmludg== IGNob3Jk dmVudGlvbmFs CW9m RXBpc29kZQ== LkVudW0= dW5rdA== IERo IEphcmVk IE5haw== IGludGVuZHM= RW5kaWFu IGF1c3RyYWxpYQ== X2N2 KHJlc29sdmU= IGNsaW5pY3M= bGlrZWQ= QVNISU5HVE9O aW5oYQ== Jyo= IE5Q X2JlaA== IGhm IHfDvHI= Y2F0ZWdvcmlh JGZvcm0= IHN1YndheQ== IGlzQWN0aXZl cG9wdWxhcg== Q291cg== IGNvb2xkb3du IGFpbnNp IEdMdWludA== ZXJlYWw= IGFycmF5T2Y= IGhhdGNo PT09PT09PT09PQ== cmVzc2Vz X1BQ Ll4= X2RlY2F5 IEJsZXNz bWV0cmljcw== IENPUFlJTkc= IER1bXBzdGVy IEpvc8Op IERlc2lnbnM= PFZvaWQ= 57q/ ID8+PA== ICJ9Cg== dGltZXpvbmU= IGVlcg== bWF4Y2Ru IEVTQw== aWdhcmV0 X2Nvbm5lY3RlZA== X3JldmVyc2U= IHF1ZXN0aW9uYWJsZQ== IFVTQw== IHR1dHRp IGRyb3BvdXQ= IEFjdGl2aXRpZXM= IFdpbmRz JykpKTsK IGNvbmdlc3Q= xJ/EsQ== IHByb2xvbmdlZA== 6L+Z IENyb3NzQXhpc0FsaWdubWVudA== TEVFUA== IFZBTElE IEdheg== IGRlcGVuZGVuY2U= IFByaXg= LkNvbXBpbGVyU2VydmljZXM= anVtcA== IHN0cmF0 Y2lyYw== IENVU1RPTQ== eGFh IGJtcA== IGJ1cmVhdQ== IHdhcmVu Tlg= KFdpbmRvdw== IENocmlzdGll X0ZF IHRu IE9tZWdh Y29tbXVuaWNhdGlvbnM= SG9tZVBhZ2U= Y29tcGxldGlvbg== IHN1cHBseWluZw== WVBFUw== w6F2ZWw= 5Yi2 KGNsaWNr XENvbnRyYWN0cw== L3F1ZXN0aW9ucw== IGV6 QU1T Lm1lc2g= ICc8Pw== asOg SW5p LiM= IENhcmRpbmFscw== cGNpw7Nu Q3ViZQ== IFBhdGllbnRz X3ByZWY= QWN0aW9uQnV0dG9u KGJ1aWxk IFZpc2E= b3ZlbA== KEFycmF5TGlzdA== SWdu IHJlaGFiaWxpdGF0aW9u IHBhbGFjZQ== IHNwZWVjaGVz fScK SHR0cFJlc3BvbnNl CWNvZGU= RHVtbXk= IGFjYWRlbXk= Lm1vdmll IGluY29ycmVjdGx5 IGN5Yw== KFVuaXR5RW5naW5l CWNhbGxiYWNr IFNhdGFu IEZVTkM= IGNoYW50 IEhlYWx0aHk= OicsCg== U2hpcHBpbmc= X21j IER5bGFu IFByb2R1Y2Vy IHJlc3B1ZXN0YQ== IHBvbGlzaGVk QnJvYWRjYXN0 IGJhbGFuY2luZw== IFNsaWRl IENhcHM= c3RpbGw= IGhhcHBpZXI= IEdvc3BlbA== dHJhbg== LnBhdGhuYW1l QWN0aXZlU2hlZXQ= IENoYW5n PlwK Um9ib3Q= SnNvbk9iamVjdA== IERG IFByb2Nlc3Nvcg== X3Nob3VsZA== LnByb3RvYnVm LXVzZXJz IGVtYnJ5 Rk9OVA== IHN0YXJ0dXBz IERhdGFTb3VyY2U= KSM= dXJvcw== X0NvbG9y IHN0YW5kYWxvbmU= fVs= amQ= IGZvcmdpdmU= IG5neA== IEdlbmVyYWxseQ== IGNvbmZpZ3VyYWJsZQ== L29yZGVy IHZhcw== JykiOwo= IFJS IFRyb3k= IGNvbXByb21pc2Vk IFN3YW4= aW50ZW5kZW50 Q2VudHJhbA== X2tlZXBlcg== IGFycXVpdm8= IFJlYWRPbmx5 X2N1cnZl a3Y= ZW50aW4= 6LE= IEV5 LmltcmVhZA== IFBhbQ== aWZmZQ== YXRpdml0eQ== eGJj IGdyaW0= LWZpbGxlZA== bmFtZXNl J106 IGF1cg== IEdpYnNvbg== Lk1vdXNlRXZlbnQ= IGxhZG8= YXZhZG9j IGZhbWls IE1vZGVy ZnBz 44CA44CA LWV4YW1wbGU= IEFsemhlaW1lcg== IFV0Zg== X2FyZ3VtZW50cw== Q29uY2x1c2lvbg== dGV4dENvbnRlbnQ= cmVtYWluaW5n IGludGVycnVwdHM= IEJhY2t1cA== IE1vbmc= IHJlY2VwdG9ycw== aGlzdG9y LmNvcm91dGluZXM= IHNob3V0ZWQ= QWxhcm0= IGNvbWJ1c3Q= IGdyb3Rl dWx0dXJhbA== KGlkcw== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= aXBsaW5hcnk= T3B0cw== IFlhbGU= bG9jYWxTdG9yYWdl IGVxdWl2YWw= IEZsZWV0 XGI= KnBp IFFMYWJlbA== 5qE= IHZ4 IEFDTA== IHN1Y2Vzc28= IHBlcmM= IE5vdHJl IGFuYXJjaA== UmluZw== c3Bi IHN0cnBvcw== c3RvcmVz IE1hcGxl KE1haW5BY3Rpdml0eQ== KCIiKSk= IHZpZXdIb2xkZXI= UXVhZA== IGlndWFs b3JzY2hl Lm1hcmdpbg== IGluZGll IGZyYW5j IEZvcm1CdWlsZGVy IFBhcnRpY2lw LmZsYXNo IHN0b3Jtcw== VWx0 IGZlbg== W25ldw== RXZlcg== PSIK IGxvY2FsaXplZA== X2ZvbGxvdw== IG5hdmU= IGRvbWluYW5jZQ== KHRpbGU= Sm91cm5hbA== IFZD IHBlbmV0cmF0aW9u 77yV IGNvbXBhcnRtZW50 IGJpZHM= Rm9ybWF0dGVk KioqKioqLwoK KGNpdHk= 4oCUaXQ= W0M= IHVzZUNhbGxiYWNr YXVi KT8u IFZBUg== IFNlYmFzdGlhbg== IE1vc3M= IGFidW5kYW50 R3JlZw== 0YLQsA== X2Np IGJpYmxp Q1JN IEF0dGVtcHQ= aXNtZQ== ZGFzaA== 44CO X211 LkZvcm1hdHRpbmdFbmFibGVk SW5kZWVk LWRpcmVjdA== IHN1Y2tpbmc= IHBuZQ== b2NhYnVsYXJ5 IFBhY2tlcnM= Lk5hdmlnYXRpb24= IHBpZWQ= Y3JpYmluZw== IFN0dWFydA== LlRvRG91Ymxl IFNlY29uZGFyeQ== U2F2aW5n IER1dA== IE1hZGQ= TWFnaWM= LEg= LmRvY3VtZW50RWxlbWVudA== IEJTVA== IGRpZmZlcnM= IG1vcmVvdmVy X25k U0VBUkNI 0L/RgNCw0LI= 5rQ= dG9NYXRjaA== IGRlY3JlYXNpbmc= LW1lbWJlcg== YW1wdXM= KGJvb3N0 RGFpbHk= RGF0YUdyaWRWaWV3 IEh0dHBDb250ZXh0 IGhpcHA= X3dvcmtlcnM= LWxhbmd1YWdl 6ZM= IGNvbnNpc3RlZA== YXRoaW5n IE1lcmN1cnk= JGNvbnRlbnQ= IHByYWN0aWNlZA== IE1vZHVsZXM= X0RBWQ== IHdlYWtuZXNzZXM= IExvZGdl IG5hcg== IE1hdGU= IGpw IEh0dHBIZWFkZXJz IHNtbw== IFRPS0VO XSko IGFxdWk= c3dhZ2Vu IHNydg== CWFucw== QXJvdW5k IE1hbnVlbA== IGZpY3Rpb25hbA== IElNRw== IC4n IEJlcnJ5 IHdhbGxwYXBlcg== c2V4dWFs aWVybw== IOeahA== 7IaM QmFja2luZ0ZpZWxk IEFkcmlhbg== QkFTRVBBVEg= IHJlcGVhdHM= IGJsdWVz IHVucHJlZGljdA== X2NvbGw= c3RhY2xl IFR1bWJscg== IEVsZg== IGFzc3VyYW5jZQ== IGNlbnN1cw== IElNUE9SVA== RU5ERVI= YW5vcw== ID0o IEVsbGlz IgoKCgo= Lndpbg== IEFib3Zl YWxvbg== X3RpY2s= IHJlcHJlc2VudGF0aW9ucw== IOaV d2lk IEFybXM= TGlzdGE= X2ZhaWx1cmU= X2Nt LkZsYXRBcHBlYXJhbmNl IHRocm9uZQ== UGF0Y2g= IFZveQ== ZW5nbA== IG5lZ290aWF0aW5n PmA= IHNob290cw== IEZQUw== LlllYXI= IEtpc3M= ZW5jacOzbg== cmVldGluZw== RnJvbUZpbGU= IHJlc2lnbmF0aW9u 2Lc= IHR3aW5z xrDhu6M= IGdlYnJ1 LmdldENvbnRlbnQ= LlRyZWU= IEVtcGxveWVlcw== IEZJRkE= IGNlcnRhaW50eQ== KENs IHRvdGFscw== ZWRpdGFibGU= 4KWA LlJlcG9ydGluZw== TWFz cXVpZXQ= LnJ1bGVz IFZP Y29uZXhpb24= LEs= IGFsbG9jYXRvcg== IFBvd2Rlcg== XFJlcG9zaXRvcnk= QmVhdA== X3RpcG8= IFsnJyw= X0lOVFI= IDw8PA== PGhy Iik9PQ== dWdnYWdl IENyYXc= IMOpZ2FsZW1lbnQ= IGdpbmdlcg== IHByaW1lcmE= IHByb2R1dG8= bHRr LlVzZXJOYW1l IHN0cmVycm9y bWl0aA== X25i IGRpc2NvbWZvcnQ= J107Pz48Lw== UVQ= IGVydXB0 IERhbmlzaA== XEFjdGl2ZQ== X2FkYXB0ZXI= IGJ1YmJsZXM= cm9sbG8= b3Jnb3Q= 0L3Ri9GF VkVDVE9S b2NvZGU= IEJ1bGxz IGJvaWw= PiIpOw0K ZHJvcElmRXhpc3Rz IEJlZw== X0hBTA== IGNyb3NzQXhpc0FsaWdubWVudA== IEV2aWRlbmNl IHBlY3VsaWFy IGluc3RpdHV0ZQ== dmVpcw== IGZmdA== w4E= IHpvZWt0 YW5hbHk= IEhvbWVsYW5k IHBlbmV0cg== dWRkZW5seQ== CWVsZW1lbnQ= IEJyZW4= IFRydWRlYXU= IEN1YmFu amFt dXNsaW0= X2V2 IHN0ZW1z fSU= neWniw== IGJyYW5kaW5n IGNvcnJlc3BvbmRlbmNl LmpxdWVyeQ== ouWNlQ== IFJlYWRz KEh0dHBTdGF0dXNDb2Rl YXNzaW4= KHNsb3Q= IEdyYWR1YXRl Ly8vPA== IGluZm9ybWF0aW9ucw== RU5BQkxF IHB1aXM= IGZpbmRlcg== IEJyaXM= IG5ldHRzdGVkZXI= X21pZA== IG9ncw== IFN0ZXJsaW5n IGFycm9n c3RyZnRpbWU= fAoK IHZveA== IFJlZ2FyZGxlc3M= IGVzbw== IENvbWZvcnQ= LkJvb2xlYW5GaWVsZA== IHVo QUNZ IHNxdWVleg== IFZpYw== Y29udHJv Lmxv IGlyZQ== IENvbWVkeQ== 67Y= IG9yaWdpbmF0ZWQ= IHNoaXBtZW50 fG1heA== X2d1aWQ= bGV2YXRpb24= 0L3QsNGP KHVuZGVmaW5lZA== IEREUg== IHNob290aW5ncw== IExhdGlubw== RU5ET1I= IGF2ZXJhZ2luZw== IGdyZWV0ZWQ= IHRoZWF0ZXJz 0L7QtQ== IGRC IGdzdA== IGRlZmluaXRl LlN0b3JhZ2U= Lmhlcg== IGFmb3Jl IFJlYWxpdHk= IEdvZHM= dmVyc2Vk IGhhbmRzb21l IGV4Y2x1ZGluZw== KGFk UXVvdGVz IFNjaGVtZQ== P3E= IFRhbWls VGlja3M= IHBlc3Q= J24= IHBvcm5vZ3JhcGh5 X21vZGFs IC0tLS0tLS0tLS0= IGRpc3Bvc2FibGU= RlJFRQ== IHNoYXJr Q0hF IGRlcGljdGVk IGRlbW9uc3RyYXRpb25z IEtpbGxlZA== IFJVTEU= IG9ic2Vzc2Vk IHNpbXBsaWZpZWQ= UG9zdGFs IGNvbmNlcHR1YWw= IHBzdA== TGFz X1BST0pFQ1Q= dWNjZWVkZWQ= b2x1 xJ9p IHBlcnNvbmFsaXRpZXM= IHJlc2hhcGU= IGVuY2xvc2Vk CXB0cg== IHR1dG9yaWFscw== IGV4cGxvZGVk X0RJUkVDVE9SWQ== 5YaF5a65 IGNhbm9u IHJlY29nbmlzZQ== UEFE IEFwcHJveA== IFJlc3RvcmU= IEltcG9ydGFudA== IGhlYXZpZXI= LlNlcXVlbnRpYWw= RWFydGg= IE1pbGs= LnNldFJlcXVlc3Q= LnRlbQ== IHJlY29uc3RydWN0 IHNrZXB0aWNhbA== X1ByaXZhdGU= QlVG cXVh OmE= IHNlaw== IGR3ZWxs b3NzYQ== IHJld2FyZGVk 0LjQuQ== KHRvcGlj X3BhcnRpdGlvbg== IF9fX19fX19fX19fX19fX19fXw== S2V5d29yZHM= IEZyYW5jbw== TGl0ZQ== IG5ha2Vu INC30LA= T0JKRUNU IGNyYWZ0cw== IFN3YXA= LlhuYQ== LkNvbm5lY3Q= IGJhbGNvbnk= KHJlYWw= IEJhcm5lcw== Ymly IFR3ZW50eQ== YXlhbg== YXRhcnM= IFByb3BlbA== IElobmVu VXBncmFkZQ== IGN1cmI= LXNlY29uZA== IG5lcGg= LnByZXM= 7J6F LnNlcQ== IHBhZGRlZA== Ij8= amw= 44Os Jyk8Lw== IGNpdmlj Z29ucw== PmE= Q29vcmRpbmF0ZXM= IGVuYWN0ZWQ= RU5UUw== IGxhYw== LmZpbmFs IFBocFN0b3Jt Y2FsbGVk IGlucXVpcmllcw== Lm1pZGRsZXdhcmU= IERvd250b3du Lyc7Cg== IGtpbG9tZXQ= YWNjZWw= IHF1aWVu d3N0cmluZw== c2V0RGF0YQ== IG1hbmVyYQ== IG1vZHVsYXI= cmltcA== IHRhcmlmZnM= 4oCZaWw= X1RIUk9X L2NvbG9y IEhUTUxFbGVtZW50 IGNhcnJv IHByZXJl IHBsb3R0aW5n IFBvc2l0aXZl IE1hY2hpbmVz T1RFUw== 4bub cGxlYXNhbnQ= IGFsdGU= IGFpbmRh dGhlc2U= IGNvcnM= aXBheQ== IEFkdmlzb3J5 IFJ1Ymlv anE= IGxpbWVzdG9uZQ== IGRldGFjaGVk 6K6+572u dGVuYW50 IERlcHRo YWxvcmU= INGB0YLRgNC+0Lo= IEZPUkU= IExheQ== cHJlc2VudGF0aW9u KScpOwo= LnN1YnBsb3Rz z4M= Tk9X R2Fy aGFuZGxlcw== YWJyYQ== cHV0aWVz IEVsZWN0cmljYWw= TWlkZGxl cm9waWM= IEpE IER5bg== IEJyaXN0b2w= IE1jQ2FydGh5 IHN0cmlrZXI= IGVudW1lcmFibGU= IEV2YW4= LmRlZmF1bHRz cXVlbmNlcw== KXx8 CXRva2Vu 4peP LWRyb3Bkb3du U1RPUkU= IEdyYXBoaWM= KHBw RXhwbA== IHVwd2FyZHM= IERpc3RyaWJ1dGVk IFdFQg== SmVy aXNOYU4= 55Sf5oiQ PlI= w7xzc2Vu ZWZz IHVuY292ZXI= IGx1ZA== LmNhbGN1bGF0ZQ== IGludHB0cg== IG1pZGZpZWxkZXI= LkhlYWRlcnM= IG1m ZXJlZg== Lk1ldHJv IFNwZWFraW5n OmI= IGNyeXB0b2N1cnJlbmNpZXM= IGRlbW9ucw== CUVYUEVDVA== IHdpY2tlZA== eW91dHViZQ== OkludA== IEhpbmRp IENBVA== INi5 cmFy b21vcmU= L3Blcg== L2xpY2Vuc2U= IHJlaW0= IGF3YWl0aW5n IGxldGhhbA== IEVG cm91bmRlZA== IFBsYXRpbnVt INCy0YHQtQ== LmNvb3Jkcw== LkRldmljZQ== L2l0ZW0= IFdlbm4= Y29tcGlsZUNvbXBvbmVudHM= IEtpbmRlcg== LnJlbW92ZUl0ZW0= IGFuZGE= Ym5i IHByYQ== KHRyYW5zYWN0aW9u IGVtYmFycmFzc2luZw== CUJPT0w= LmNvbnRlbnRWaWV3 IGV2ZW50ZGF0YQ== YXRvcmU= IHByb3ZpZGVkSW4= aXJtYQ== IHpvbmE= X0hX 5pk= IHN0b3Zl IGNvdW50ZXJwYXJ0 X1Byb2R1Y3Q= X01BTkFHRVI= IGluZnJpbmc= IEVSQQ== X3BhcnR5 0ZE= IGluaWNp X1JlcXVlc3Q= IG1pcmFjbGU= IGNhbmNlbEJ1dHRvbg== U3B5 YXTDsw== IHBvbGlzaA== IE5pY29sZQ== LmRpc3BsYXlOYW1l XFJlcXVlc3Rz IHVzZUhpc3Rvcnk= Um91dGVyTW9kdWxl IHN0YXJlZA== SURFUg== 0YPQvdC60YbQuA== IG5vdGE= JGFycg== cGVjaWZpZWQ= IHRvcHA= X0RSSVZFUg== L25n 5aA= X3Rt JXRpbWVvdXQ= PHM= ICgqKQ== IEh0dHBSZXF1ZXN0 X1RSQUNL KG5vdGU= IEV4cGxvcmU= X3NlcnY= IOe7 QmluZGVy KyIs LmF0dA== IEV0aGk= IGPDs2RpZ28= PSdc LmxpbmVz KE9m 5bCG bWlzc2libGU= IHbDqQ== IGFjb3VzdGlj IGNyYWZ0aW5n bml0 LmJh IEx1Y3k= IGlQb2Q= IHB1cGlscw== LW1heA== X3dy KGNw IFJFUE9SVA== IGRucw== IFJlZmVyZW5jZXM= IHVuZGVydGFrZW4= IGvDuGJlbmhhdm4= IGNoYWk= IENyb2F0 X0xvZw== cm93bmVk X21lZA== CWRhdGU= I19f IGNvc3R1bWVz IFJlcXVpcmVz YWZmbGU= 54q25oCB LVNlbWl0 ZWxhaWRl 0LXRgtC+0LQ= IHBlc3RpYw== IGRyYQ== RE9DVU1FTlQ= IC4uLg0K fWB9Cg== IEF1Y3Rpb24= IERvY2s= eHh4eHh4eHg= KGdldFN0cmluZw== hY0= IGJvcmRlcldpZHRo IE1hY2hpbmVyeQ== IHByZWRpY3RhYmxl LlNI IGFtcGxpdHVkZQ== LmZvclJvb3Q= SU5hdmlnYXRpb24= VGFibGVNb2RlbA== YXR0cmli IG1hbmV1dmVy IGV4Y2F2 QkVSUw== IGRhcGF0 IGluc3RhbGxhdGlvbnM= LkFzeW5j IHJheXM= PeKAnQ== Ow0NCg== LmNyeXB0bw== X2RiZw== IEVudW1lcmFibGU= T2ZTaXpl X2Vwb2Nocw== bXc= TUVOVQ== b3V0bGluZQ== IFBhcGVycw== PT09PT09PT09PT09Cg== IHVuaWZvcm1z IEdpZw== LXBhY2thZ2U= IEplbmtpbnM= IEhvbWVQYWdl LmlzU2VsZWN0ZWQ= IG1lY2hhbmlj TUs= IFNvdW5kcw== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= IHJlc2VhcmNoaW5n IGluZm9z b2dyYXBoaWNz ZXJzZXQ= KFsnLw== IFRpbWJlcg== LmFnZW50 LnRvSlNPTg== X2NvbW1hbmRz cGFyaW5n X2FkanVzdA== Lm5vbWU= KGdsbQ== U3RhdHVzQmFy ZmlsZXBhdGg= P+KAmQ== IGRldGVjdGl2ZQ== IHVuc2VyZXI= IFRpYmV0 RU5ERUQ= KHNlZWQ= IHNuZWFr IGFtb3I= PSIvLw== IFBhbnRoZXJz YWxsYXg= IExJVkU= CURXT1JE XT0t IHRvcm5hZG8= L21pbg== IGx1bmdz LWN1cnJlbnQ= IEJvb2tpbmc= 5YiX6KGo IGVuam95bWVudA== 4KSw SkE= dHlwZWQ= LkJ0bg== ZmF0 dWdhbA== IFNoYXJlcw== IGRpc2dy IEJBUg== IEZPWA== T3Bjb2Rl IFN6 a2V5ZG93bg== aWN0aW9uYXJpZXM= IGRldGFpbGluZw== fSkpCg== IHBvaw== IGRlbW9uc3RyYXRpbmc= IG5vdGF0aW9u bGF5ZXJz QGlm IE5QUg== LnN0cmljdEVxdWFs IFJlY2lwZXM= LlRlbnNvcg== IGxpcXVvcg== IGRlYnRz LmVuZHNXaXRo V2hlZWw= LlBvcw== Q1NW JGFyaXR5 IHVuc3RhYmxl KGxvc3M= RU5TT1I= IGVsZXZlbg== IExvcGV6 IEhvcGtpbnM= Y29ub20= IFNldGg= IHBvZW1z UXVhbnQ= IGdzbA== IHN5cnVw IHNpYmxpbmc= IGNhc3M= LXZvdXM= w7Z0 X1BBVFRFUk4= X1NFQ1RJT04= ZXN0aW1hdGVk dXBncmFkZQ== Lm1vbmdvZGI= IEJvYXQ= X0NUWA== IGZldGNoaW5n dXN0aW4= cGllbA== TWFyZw== UmVmbGVjdGlvbg== IGR1Y3Q= IE11bmljaXBhbA== IGJ4 LkdldEN1cnJlbnQ= bWxpbms= IEFjY291bnRpbmc= IEdlbmV2YQ== X1Bvcw== IHBhc3Nlcg== IGhlYXJpbmdz Y29tcGFu IGZyYWdpbGU= SW5pdGlhbGl6ZXI= d2Fsa2Vy Lk1hdGVyaWFs IEh1bnRpbmc= dHJ5c2lkZQ== IGthdA== IGNsZXJr 4Z8= ZG9pbmc= CWdyb3Vw IHNhbmN0aW9u Lmxi IExhenk= IENvbnN0cmFpbnQ= UGFnaW5hdGlvbg== IHBvdXZleg== IEluZGljYXRlcw== TUVS IGNvdXJz IHllYXJseQ== IGdyb3NzZQ== YWJicmV2 IERPTg== IHByb2NlZWRlZA== ZW50bGljaA== IHByb3BlcnR5TmFtZQ== IFRlYWNoaW5n c3RhZHQ= IGN1dG9mZg== b3JuZXJz IGFmcmljYQ== IHJlbmRlcnM= IFlhbmtlZXM= IFRvb2xiYXI= c3BhY2Vz LmZpbGxTdHlsZQ== IHNlZ3VuZG8= X3N0cmxlbg== LkZpcmViYXNl 5aSE IG1lbnRpb25pbmc= XCg= IFZhbHZl U2V0dGVy IHNwYW5z IEFsY29ob2w= IExldHRlcnM= XHhl IFRL X0JMRQ== LmdldFJlc3VsdA== PFBsYXllcg== IFBhdHQ= IGVhc2luZw== IHR1cmtleQ== IEZlbg== Jyki IGNvbmZpbmVk IGluY2x1cw== U3VwZXJ2aWV3 KHdpdGhJZGVudGlmaWVy ZW5jaWFs IHN0dWZmZWQ= VGhldGE= IGVjb25vbWlzdHM= fSkpOwoK Y29va2llcw== IFJvb3Nl IENoZWVzZQ== IGZpY2hpZXI= IGVuZm9yY2Vk QUJC bm/Fm2Np X0FMTE9X IHJlY3J1aXRlZA== IGV4cGVuZGl0dXJl LW5pZ2h0 IGFzc2VydE5vdE51bGw= X2V4ZWN1dGU= INiv SU5ERVg= X0ZNVA== IHJlc2N1ZWQ= IE1vbnRobHk= IENvbnNlcnZhdGlvbg== IEdlYg== T2JhbWE= RXBvY2g= aWNpZXM= IE9ydA== IHNvaXQ= KGljb24= RnJpZW5kcw== bW9s IGdyb3VuZGVk IENhdXNl YWRlbmE= V0VFTg== IEx1bg== SVRJVkU= Lmxvb3A= X3VudGls IGNvcnI= LmVkZ2Vz IGh5cG90aA== Y2hlZHVsaW5n dHJhbnNsYXRvcg== INCc Um9t 44CRCgo= IFhhbWFyaW4= IHZpb2xhdGluZw== LmFuY2hvcg== LS0tCgo= IHRyYWRlcg== QURWRVJUSVNFTUVOVA== IHVuc2VyZQ== IERBTw== IGJsb25k IFBBVA== Lmdsb2I= IOi+kw== IHNwbGl0dGluZw== IHVuc3Vic2NyaWJl IGF0bW9zcGhlcmlj IFRyaW0= IGNpdGF0aW9u IGluZmVyZW5jZQ== IEZ0 IERhcndpbg== ZmluZE9uZQ== IEdlbA== KENvbnZlcnQ= IGFjY2Vzc29y O3RleHQ= KHNvcnRlZA== IGp1ZGdlZA== KTtc OnA= IG1laW5l IFNsaW0= LkNvbW1hbmRz IHBlcmNlaXZl Y29ob2xpYw== PERhdGE= LmVudHJ5U2V0 IGFzc2VydEZhbHNl IFBhdHJvbA== ZW5zZW0= xYLEhQ== qKE= V0lEVEg= IFJlc2N1ZQ== IFVJRg== X1RIUkVTSE9MRA== IE1pY2hlbA== QVRFUklBTA== b3BlbnNvdXJjZQ== IERpYW5h IGludml0ZXM= X0JPRFk= IHJlc2Vydm9pcg== IHJvaQ== Y3VzdA== KHRj 77yBIik7Cg== IGZlc3RpdmFscw== IHBlcmZvcm1lcnM= IGNsaW1iZWQ= IGp1bmdsZQ== U3RyaW5nTGVuZ3Ro IHVubGF3ZnVs aWVycmU= dmVydGlzZW1lbnQ= IHN0YWtlcw== IGhhdHM= TW9kaWZ5 IExFVFRFUg== LkhpZGU= IHN0YXR1dG9yeQ== X3doaXRl IFBlcmw= dXRlbmJlcmc= ZW1wbGU= Lldvcmxk IG92ZXJsb29rZWQ= IGNvbmNsdWRlcw== Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 LXdpc2U= CXN0cmVhbQ== cG9wdWxhdGlvbg== IGV2ZW50bw== IGlsbHVzdHJhdGlvbnM= ZnRz IGF1dG9m IFByb2NlZHVyZQ== IGRlc2VydmVk LXRpbWVz IGdvbA== TlNFcnJvcg== Y3Jlc3Q= IFBha2lzdGFuaQ== YW55Y2g= Z2V0Q3VycmVudA== IGxhcg== bnRs IFJlYmVjY2E= IG1hdGVyaWE= IGZpbmRCeQ== L2Fk Q2FsbGJhY2tz IEFscw== IEthdGll IE9ic2VydmFibGVDb2xsZWN0aW9u IERvY3VtZW50YXRpb24= VHlwZWQ= IEN1bHR1cmVJbmZv IFRpbW90aHk= IGxhdGVyYWw= InR5cGU= IHVuYXV0aG9yaXplZA== IHRlYWNoaW5ncw== IGRlYnVnZ2Vy W3ZhbHVl IGFsb3Jz IHV6 IHNjYXR0ZXI= IGRvd253YXJk IG1pZ2xp c3RhdHVzQ29kZQ== ICgpKQ== IE1X INC80L7Qtg== Uk9TUw== LmJ1Zg== IGZhaXJ5 IEluZnJhc3RydWN0dXJl PT4i dGxlbWVudA== JCgi RnJvbVN0cmluZw== IEJpbGQ= IGNvbnZlbnRpb25z X25hdGl2ZQ== IEluc3BlY3Rvcg== IFBpc3Q= dWJhcg== IHJlZ3M= IFBpbG90 VGh1cw== Picr IGNlbGE= Lm5ld3M= KFByb2R1Y3Q= TGl2aW5n UnVzc2lh IGZhY2V0 ZXRpY2Fs IFsnJA== L1s= IERpcmU= IGdhc2Vz IElORk9STUFUSU9O IEVhdA== IEZvcnVtcw== IENoYXJhY3RlcnM= X21ldA== IOyLnA== IGtpbmdz YWNoaWU= IExhbWJkYQ== IHRpbWVycw== IExpZ2h0aW5n IENhc2V5 YWRkaXI= YW5kZXg= LmFuc3dlcg== IEhpcA== IFByaW5jaXA= U3RhcnREYXRl IOOAjA== dHJlcw== ICYj Lk1heFZhbHVl IFByb2JsZW1z IGxhdGV4 T2ZDbGFzcw== IEx5bm4= Ly8n IHZveWFnZQ== IHNodXR0bGU= IFJvbGxlcg== IFJ1bnRpbWVFcnJvcg== dXlh RGlj CWJ1aWxkZXI= IGJ1bGx5aW5n IHNpbXBsZXN0 LmNhbGxlZA== IExS IG1vcmFsaXR5 IHN0dXJkeQ== dHJhY2tpbmc= LnN3YWdnZXI= X0JJTkQ= SVRPUg== LXVybGVuY29kZWQ= INGF IFRyaW5pdHk= IHRyYXBz IHwt IHNldFRleHQ= IGJhcmdhaW4= IGJyYWtlcw== LmdldENvZGU= IG1pZ3JhdGU= IHJpYmJvbg== KXJldHVybg== IGNoYXJnZXI= YWNvbQ== QURJVVM= IEFtYmFzc2Fkb3I= LWFmdGVy IGFubmk= CXNwaW4= Q29uY2VwdA== IEhlbmRlcnNvbg== IEhPU1Q= LnJhbms= IE5vcnRoZWFzdA== IGJlcmxpbg== IHJlcXVpcw== LmZlZWQ= IHNvdXJjZU1hcHBpbmc= IFJlbmNvbnRyZQ== LmFqYXg= bmVzdGpz IHRyZWs= IE5hY2lvbmFs ICZb IHBheWFibGU= b3J0ZXg= IGRlcHQ= ZmllbGROYW1l IGNvbXBsZXRlcw== IFJWQQ== IG9uaW9ucw== YWxpZ25tZW50 Rm9ybWF0cw== ICd7JA== SGFzaFNldA== IEJvZA== LkludmFyaWFudEN1bHR1cmU= IHNldHRsZW1lbnRz IGh5ZHI= LnVwZGF0ZWQ= dmVudGg= KHNlY29uZHM= PSIvIg== IHdlYnBhZ2U= KAoK IHRpcg== IHRvZXM= IEJyaWNr IGFtYml0aW9u UG90 PW1heA== RVRJTUU= IGRlcG90 Y2FsbHM= IE5vcndlZ2lhbg== YDo= IGJ1cmdlcg== IHByb2Zlc3NvcnM= IEFsbG9jYXRl LXRoaXJkcw== LWNoYXJ0 IGZvcmQ= Kk4= LmtvdGxpbg== IHBhcGVyd29yaw== IERFVklDRQ== JUAiLA== cmVzcGVjdA== KG1w 6auY LWlm IGN1c2hpb24= b2JvdA== IHBhcmM= U1BBQ0U= IE5ldGFueWFodQ== IHNlbGZpc2g= ZmVhdA== IGNsaWVudGVz LXRvb2xz IHBvcmNo IGpx LnZlcmJvc2U= IGxpYmVyYWxz XSkKCgo= cGllcw== Tm90Qmxhbms= KHRlcm0= yJtp X1BhcmFtcw== Lm5vcm1hbGl6ZQ== QnVsbGV0 QVNJQw== KGhleA== X2NsaWVudGU= Kyw= X0RJ IGZvcnRoY29taW5n fSIpXQo= c2Vv VW0= Pk5hbWU= IGNvbWZvcnRhYmx5 aXJlY3Rpb25hbA== V0lUSA== L3By IFBvb3I= IFZpdGFtaW4= dmlj R0g= IHByaW9yaXQ= IE5O IENsb3NlZA== pO0= IGlzT3Blbg== XENvbnNvbGU= QW5kRmVlbA== LlNVQ0NFU1M= X09QRVJBVElPTg== cG9sYXRpb24= IFRhcw== cHN6 Picu Q1VSUkVOVA== VmVuZG9y aG9zdHM= IEVyZA== PnRhZ2dlcg== IHNvdXJjZU1hcHBpbmdVUkw= IG1hcmF0aG9u X2Nsb3NlZA== IGV4ZW1wdGlvbg== IHJlY29nbml6ZXM= aWRlc2hvdw== JyQ= KCcvJyk7Cg== bWl0cw== d2Fyeg== IENoZXJyeQ== taw= bm9y cG9ydGU= IHds X2JhY2t1cA== LmdldEJvb2xlYW4= LmdldFJlc291cmNl IGRlZmluaXRpdmU= LkVkaXRUZXh0 IHPDrQ== LkNPTlQ= IFBMQVlFUg== LmNhcmRz IFNob3Jl KCcvJykK Y2x1aXI= V2ViRHJpdmVy KG1vbnRo LXJlbGVhc2U= IGluc3BlY3Rvcg== 5aM= IE5G X2NsaXA= 5a2Q IGludGVyYWN0aW5n LnRtcA== ICcnJwoK IGRlZQ== IGZyb3N0 Il0pKQo= IFBsYWNlcw== VGhyb3dz Zm9yaw== L2RheQ== aVBob25l IE1JQw== IGZvbGRpbmc= IGNyb3Jl IENoaWVmcw== cGhlcmljYWw= KHByaWNl LldyaXRlU3RyaW5n IGV4aXRpbmc= XScsCg== aWdodGluZw== SW5ncmVkaWVudA== KHZlcnRleA== IHNjcm9sbFZpZXc= aGY= Om5ldw== U0VO c2VjdG9y IHNwaW5z IFNjaGVkdWxlcg== b3RlY2hu c2VtaWNvbG9u Rm9udE9mU2l6ZQ== IFNwZWNpZmljYWxseQ== ZmxhbW0= Lk9iamVjdElk IGNvbnRh X3Blcm1pc3Npb25z CUZST00= SUNPREU= L2tn IEhvdGVscw== LW1lZA== IERpbg== IG5hdnk= Z2V0UGFyYW0= IG1lbmQ= IHBvcnRyYXllZA== IE1ldHJvcG9saXRhbg== UGFpbnRlcg== IHJlZmVycmFs X2dvb2Q= IG1hcnZlbA== b3NhaWM= Pigm LnVy IGVzdG9z V2lsbGlhbQ== IHRpbWJlcg== IHF1ZWxxdWVz IERvY3VtZW50cw== LlhhbWw= IGJhdGNoZXM= 6YGT IFJlbGVhc2Vk VGFpbA== Q09PS0lF aGVpZA== X3N0YXRpb24= IFZpYQ== U2FsZQ== IFJlcGVhdA== IHByb21pbg== IFpv LWZvcndhcmQ= IElvbg== aXRhcnk= IGp1cw== LXJlcXVlc3Q= IHByb3VkbHk= IFN0cmVhbWluZw== KE1vdXNlRXZlbnQ= IFNwcmludA== X3JvdGF0aW9u UmVwb3NpdG9yaWVz IHRhcnQ= INGB0LI= IG1hcHBpbmdz 6Ko= Q3U= Q3ljbGU= IGJ1bg== CWx1YQ== 44OJ ICgoIQ== IGNvbGxlY3RpdmVseQ== IENvbmQ= IHdzenlzdA== KGxpYg== b3BlbmhhZ2Vu X3NraXA= LkNvbHVtbkhlYWRlcg== 6YI= cGVyaWVuY2Vk j+i/sA== X3Byb3Bz IGNvbnRyYWNl IG1hdGNodXA= YWJldGlj Lm1lbWJlcnM= UkVDVA== KGRhdA== IHNvZw== cmVub20= X01ldGhvZA== Q3VzdG9tZXJz ZnVsbG5hbWU= Wk4= cmV0cnk= IGthcA== IE5ldQ== 6Io= YWRkQ2hpbGQ= d2lsbFJldHVybg== X3Blcm1hbGluaw== IGVuZXJnZXRpYw== IFdldA== IE1vcnI= IGdjZA== Y291bnRz LHR5cGU= ZGln KExvZ2lu IGNyYWNrcw== IGJhY3RlcmlhbA== IE1lYXQ= IEFybXN0cm9uZw== IEJyb256ZQ== IGFwcHJveGltYXRl X2RpcnM= bGlnYQ== xYJhZA== IGtpbmRuZXNz IGNvbnRyZQ== IEVWRVJZ TUVU IGFubm91bmNlbWVudHM= Z3Bpbw== IFdhaXRGb3JTZWNvbmRz IFBob3Rvc2hvcA== IGRpc2NvbnRpbg== L2Rk IHRvcG9sb2d5 YW5pY2Fs LmludGVyZmFjZQ== YXVjb3Vw Lkhhc2hTZXQ= QVJJQU5U KHJvdXRlcw== IFRlaA== IGh5cGU= XSIpLg== IHNsYW0= IGJyb3Ro LWludGVy IFJpZA== LW1hbmFnZXI= Q2FuY2VsYXI= IFBhZ2luYXRpb24= IHNvdW5kdHJhY2s= IHBvc3Rlcmlvcg== IHNjcnVi Y3JlYXRpbmc= LSo= aXJ0ZWVu LmR5 LnN5bW1ldHJpYw== ICIiLg== PT09PT09PT09PT09PT09 IGNoYXNzaXM= IG51bWJlck9mUm93cw== RGV2ZWxvcGVy X2JpbnM= IE9VUg== cmllYg== UHJvcw== IHdpxJk= ImQ= IGFzeW5jaW8= emVpZ2Vu X3NwaQ== LkFMTA== IHNjcmV3cw== Q2hpbmVzZQ== IGFwaUtleQ== IHVuc3VjY2Vzc2Z1bA== IFNlYWhhd2tz T1JH 56ug IHByb2Zlc3Npb25hbGx5 IENvdXBvbg== 5a2X5q61 Q29udmVudGlvbg== IHBvbHlt 5omL IHNhbHZhdGlvbg== IGVuZ2luZWVyZWQ= IFdyZXN0 IEdDQw== IHdhcm1lcg== TGF5b3V0Q29uc3RyYWludA== IGFnZ3Jhdg== U2NyaXB0cw== dmVudHVyZQ== IHJlZnJpZ2VyYXRvcg== IGlubm92YXRpb25z IFJ1bm5lcg== TklD IFJvbGxpbmc= Q29udHJvbEV2ZW50cw== IGxvb3M= cGFj CXBhbmVs ZWZl IEJ1ZGRoYQ== LS0tLS0tLS0tLS0tLS0K 5bqT KGZvcktleQ== IGx1bWlu ICg/ IEFJRFM= LHVzZXI= aW1pZW50b3M= Y29udGVudFR5cGU= YW50bHI= 6aY= IFdlbHQ= UHJvZHVjdGlvbg== bWlnaHQ= IFZJSQ== Iiwo IG9ic2VydmluZw== IGRlbGliZXJhdGU= KGNvbnRyb2w= IHdpdGhk IHNlbWFuYQ== U1RBQ0s= dWNoZW4= TmljZQ== IERldXRzY2hsYW5k IFNwZWNpZmllcw== ZG1h aXppbw== IEZhY3Rz X3BvcHVw IERpcmVjdG9ycw== ezo= W1I= INGN0LvQtdC80LXQvdGC IHBsYXQ= IGRpcmVjdGluZw== 5LiJ IEdpbGJlcnQ= 4oCmLgoK LnFtbA== IHRoZXJlYWZ0ZXI= IGRpc3Bvc2l0aW9u ZHJhZnQ= IHN1cmdlb24= IEluc2lkZXI= QmxlbmQ= IFRyZXY= dHJpbnNpYw== VG9waWNz cmlldmU= X0ZJTEVOQU1F IGF1dHJlcw== Sm9zZQ== UHJvZHVjZXI= ZXJ1cw== IHBldGl0 IE5FWFQ= IEZpbHRlcnM= IHJlcGxpY2F0ZQ== Il0pLg== IGxlbmRlcnM= XSIsCg== O2NoYXJzZXQ= Q3BwT2JqZWN0 IGZsb3JhbA== IFRpcG8= IGNpcmN1aXRz ZWFzeQ== KCYk aXR0YQ== ZXJ5bA== X0NPTU1PTg== J319Pgo= LWJhY2tlZA== KHZhcmlhYmxl KEluZGV4 IHZvaXI= X2xvY2F0aW9ucw== Kyspew== IExvdWlzdmlsbGU= IGdyYXRpdHVkZQ== Lk1vY2tpdG8= IFBvd2Vycw== aWV1cnM= IGdlb2dyYXBoaWM= cmFsZQ== IGNyYQ== IFNwdXJz aXBoZXJ0ZXh0 QUNJT04= LWNvbW1vbg== IHZpY3Rvcmllcw== IEZpbmFscw== LnNodWZmbGU= LW1pbGxpb24= X1BST0M= YXNzdW1l IGlscw== REJD Qm9vdFRlc3Q= IGxhdm9y LnRlc3Rpbmc= LmFzdA== Il0v bW9pZA== IHF1YWxpZmljYXRpb24= Z2VzY2g= CXB1dA== IGFpcnBvcnRz Skk= VGVhY2hlcg== X3VuaWZvcm0= IG5hbWE= IEJhc3Q= ZXJ0eXBl Y2FwdHVyZQ== Z2V0QWxs IFJleW5vbGRz b29sZWQ= LmNvbW1lbnRz IGNoaW4= KS4q INC40LvQuA== dGds dWRvcw== IGTDrWFz Y2hhaQ== LnByb2dyYW0= IHBzeg== CWljb24= cGhpbA== ZW50cmFs X1dSQVA= b3Zp IG5vc3RhbGc= SW5maW5pdHk= CXlpZWxk IHZpdGFtaW5z UXVhdGVybmlvbg== U2luaw== X2dvb2Rz IC4uLi4uLi4u IFdpbmdz dXJpZGFk LXN0b3J5 Il0pCgo= aWRlbGl0eQ== VHlwZURlZg== R3Rr IO2M X01haW4= IGNoZXo= IFJhdmVu IHBheXJvbGw= IGZyZWVsYW5jZQ== TExV IE1lbmQ= ZWRheQ== QXBpTW9kZWxQcm9wZXJ0eQ== LkZvcm1Cb3JkZXJTdHlsZQ== IGVjb25vbWlzdA== c3RhbmJ1bA== IGZyZWlnaHQ= LUFnZW50 KG1ldGE= IHN5bW1ldHJ5 ICcuLg== LkNhbGVuZGFy LWF1dA== Z2Y= cGVudA== eWNsb3BlZGlh IHdpc2hpbmc= CgoKCgoKCgoKCgoK IGdlbnRsZW1hbg== IOqz PSM= IGxlY3R1cmVz 4oCcSW4= ICFf IGhi IFZlbmRvcg== UmVjZW50bHk= X25vdGVz 5o+Q56S6 Ik15 SGVhZGVyc0hlaWdodA== X1NP IHVud2lsbGluZw== IHN1cGVyaGVybw== Z2lv cHN5 IFBlZXI= amF2YXg= JmFwb3M= IENyaXNpcw== b3JkaW5hbA== TWVtY3B5 KysrKysrKysrKysrKysrKw== LXZhbA== IHdvcmtib29r LWFw PWs= IG1ldGFsbGlj X3BlZXI= QnlQcmltYXJ5S2V5 X1NE dWF0b3I= X1NIQURFUg== KU1hdGg= LlRyYW5zZm9ybQ== IGNvd3M= UGhp IENsZW0= KF8oIg== IEx1ZA== LWRlbGF5 IFNlY3VyaXRpZXM= IE9ydGhvZG94 U3ltZm9ueQ== KHJlcG9ydA== IGVudGVydGFpbg== RVBT aXpvcGg= ZXh1YWw= SVJE 5LuO IGxpdGg= IHNhbml0aXpl IGZlbWluaW5l SVNCTg== LmF1dGhlbnRpY2F0aW9u X3BpcGVsaW5l L2NvbnN0YW50cw== IENPTkY= IGx1Y3I= cmljaWE= LnR0Zg== LnNldENvbnRlbnQ= IHN0YW4= b3JlYW4= IExsb3lk LnJhd1ZhbHVl IGdvcg== IEJyb3ducw== UmVncmVzc2lvbg== IGxvd2VyaW5n bmFpc3NhbmNl IGJsb3dz IGFtYXplZA== IHVucmVsYXRlZA== UmV2aWV3cw== IHJ1Ynk= IE1vZGlmaWVy IGdpYW50cw== LnRocmVhZA== IGNvbnRhaW5tZW50 IFN0YXJ0Q29yb3V0aW5l dW1hdA== b3JlbGVhc2U= IFJhbmR5 QGVuZGlm RGlnZXN0 IHN1YnVyYmFu PSIpOwo= IGFubm9uY2U= LnZhcmlhYmxl XEZvdW5kYXRpb24= IGFjcmU= VmFu IHR1cGxlcw== ZG5z IFN0YW5kaW5n X2xhcmdl IGJveGluZw== U3VwcG9ydEFjdGlvbkJhcg== IEZvcnR1bmU= IFJ1bQ== X211bHRpcGxl YXJjaGljYWw= IGZ3cml0ZQ== X3F1b3Rl IGZvb2xpc2g= IGNvbXByaXNpbmc= INC+0L8= LXNlbGVjdGVk dmY= bWFpZA== TmFtYQ== KGRhdGV0aW1l IGluZGlyZWN0bHk= Z2FydA== Zml4dHVyZXM= Y2hvcw== IEhhbG8= IHJlY3VycmluZw== LW5ld3M= dmls IE51cnNpbmc= LXByb2R1 IEhR XEh0dHBGb3VuZGF0aW9u ZW5jaQ== YXVlbg== IHZ5 b2NyYWN5 IGRlbGVnYXRpb24= IGFzcGhhbHQ= IHNldFNlbGVjdGVk a29r L3Jlc3Q= bWV0aWNz IE5TRGF0ZQ== IHRyYXZlbGxlZA== IHJlY2li IG1pbWU= Q0xJRU5U IEdV IEhBTkRMRQ== L1E= W3o= IGJvdGhlcmVk IEJCUQ== w6dhcw== X2V4YW1wbGVz X0ZJTg== IHdoaXRlQ29sb3I= IGFzdHJvbm9t LWRpcg== IHNvdmVyZWlnbg== IGJyZWV6ZQ== IGlubmluZw== IEVkbW9udG9u Z2xp LmJsb2dzcG90 anN4 IHZlcnNh IE1vaGFtbWVk LkpvYg== LXRvZ2dsZXI= INC/0L7Qu9GM0LfQvtCy0LDRgg== YXJkb24= IG5ld2Jvcm4= IG5hdmFs bm90ZXE= IHR1bWJscg== IGhlbnRhaQ== IFR5cGljYWxseQ== IGxvb3Q= LlNwcml0ZQ== RmxpZ2h0 IHdhdmVsZW5ndGg= LXNr IEVsbGU= X2V4cG9ydHM= INGP IElI aXpvcGhyZW4= IO2B X3ByaW1hcnk= IG1vaXM= IEJO IHN5c3RlbWlj IGRpZmVyZW50ZXM= SU5DVA== ICcnCgo= JHE= V2lkZ2V0SXRlbQ== Y2xpZGU= JGZpbGU= TGVtbWE= L3RhYmxl YWdyaWQ= IE1vbmdvREI= aW50ZQ== IGFwcHJlbnQ= wq1pbmc= LkRi IMOC aGFtbWVy PScnOwo= IGJyb2tlcnM= aXRsZW1lbnQ= c2VtYmxpZXM= RWxl e3g= IGxhc3RuYW1l PC0= IGZsYXR0ZW4= X2JhbmQ= LlJvb3Q= LnJlYWRGaWxlU3luYw== PT09PT09 LnJ4 Pw0K IG1ldGFwaG9y VGk= Y29udGU= IGRlYml0 IGNvbnRlbXB0 Q3BwVHlwZQ== 5pSv Rm9ybUZpZWxk cmF0aW8= b3NvcGhlcg== IGltcGxhbnQ= UFVSRQ== IGFsdGE= X21hbmFnZW1lbnQ= IHJlZmluZQ== IENoZWNrQm94 IENoYXJs LXZlcnNpb24= Y29uZGl0aW9uYWw= dmVudWVz IHJpZmxlcw== IG9mZnNwcmluZw== IG1pbGxpbmc= IHNoYXJwbHk= IHVuZGVyd2F0ZXI= KG9yaWdpbg== X0NvbnRyb2w= IC4k UGx1Z2lucw== IGRyeWluZw== IGlsbHVzdHJhdGVz LXU= IHZlZ2V0YXJpYW4= bnBj SGVhcnQ= OycsCg== Y29tbWE= dGVlbnRo YXNhbg== L3NwZWM= X21vdmVz LW1hcmdpbg== IGluZ2Vu wqDCoMKg IHByb2pldA== IG90cmE= IGJyYXM= LnV0Yw== IHNsZXB0 PXN1Yg== YWJpbGl0 cG9zdGVy IHNkaw== b3VuY2lsbA== IHdk UHJlcGFyZWRTdGF0ZW1lbnQ= IERydW0= KGF0dHJpYnV0ZQ== IEV0aGVybmV0 CURC Q2FsaWZvcm5pYQ== Y3ViZQ== W0k= LkNyZWF0ZWQ= IEhN IHRyYWNpbmc= Rm9ybXNNb2R1bGU= LXlvdQ== LmN1cnJlbmN5 ZmVlZGluZw== IHRib2R5 TGk= YWNjaW9u bmFz IHRyb3V2ZXI= Tk9ORQ== In0sDQo= IGZ0cA== V2l0aElkZW50aWZpZXI= cG9sYXRl RmlsZUluZm8= IHB1cnN1ZWQ= ICAgIA0KICAgIA0K REVTQ1JJUFRJT04= fSovCg== RnJvbU5pYg== IGRlY29yYXRpdmU= X1NTTA== KGNoYXQ= VExT IHN1cnByaXNlcw== YWxjdWxhdGU= IFNwbGFzaA== KENvbmZpZ3VyYXRpb24= IFNFTQ== aW1zb24= L2xpYnJhcnk= PERvdWJsZQ== LnJvYm90 wqDCoMKgwqDCoMKgwqDCoA== IENQRg== IFVuZGVyc3RhbmRpbmc= IGNvc21ldGlj IFh0 dGlwcw== K2s= KCIn IFBEVA== V0FS LmdldE9iamVjdA== IFRyYWRpdGlvbmFs LnNsdWc= IERpcGw= PSIiLA== IEZpbG1z IEFuaW0= LmhlbHA= IGVtYmFzc3k= IEJvb3Rz IGJ1bms= LXJpc2s= IHBjaQ== IC9cLg== IElQVA== IGNyYXNoaW5n IGlwdg== X2tl IFJFU1A= LkxvZ0Vycm9y IGluYWRlcXVhdGU= SW9u IEbDvHI= cmljdWxh IHNob3VsZEJl YWxyZWFkeQ== J10uIjwv IFN0dWZm RGlnaXRl IHRyYW5zbGF0b3I= X3Nwcml0ZQ== bGV0YWw= IG1haW9y IFNleGU= dGhhbmtz IENvbXBsZXRlZA== IGdhc29saW5l LmF0dHJz YmFnYWk= IE9yaWc= Ol0s LmxvY2FsZQ== IFJvbWE= w61m IGZhdm9yZWQ= IHZhaW4= IHNwb29u IEphaHJlbg== IG5pbmc= V1dX LGZsb2F0 X0RBVEFCQVNF Qm9vdHN0cmFw IENCQw== IENodW5r X2ludG8= IEtvbA== IGRlZmVuc2Vz b3JlZFByb2NlZHVyZQ== YmFsbHM= VGV4dENoYW5nZWQ= IHNoYXBpbmc= IH19Pg== R0VE ZmFx IG9wdGlvbmFsbHk= X0Rpcw== IFN1Y2Nlc3NmdWw= IENlbnN1cw== IGluY2FyY2Vy X0NBUkQ= IGF2aWF0aW9u IEd5bQ== QXV0aG9yaXR5 LkJlYW4= c2hhZGVy Tm90RXhpc3Q= X1RleHRDaGFuZ2Vk IFNUT1A= KHRlYW0= Ikg= d2c= IGdyaW5kZXI= IHN0cmlwZQ== IHByZXNlcnZhdGlvbg== Q2xhaW0= YXZlcnNhbA== d2FyZWhvdXNl dGFyZ2V0cw== VHJ1c3Q= IGFsbGV2 LHd3dw== b3Vzc2U= X2NoYW4= X1NpemU= c3lzdGVtcw== IG9iamVjdGlvbg== IEthbmU= IGNvcnJvcw== IERTTA== IHVh IE1I IFN0cmF0ZWdpYw== X3RjcA== IOqwkg== IGJvcnJvd2Vk IEFjaA== CWNvbW1hbmQ= IGdwcw== bGVzdG9u aWNoZXZlcg== IFVB IGFzc2F1bHRlZA== IHNwZWNpYWxpemVz CXNlYXJjaA== SG90ZWw= ICAgICAgICAgICAgICAgICAgICANCg== IFBpdGNo INmB UkVBRFk= IHBhcmVudGFs IGfDqW7DqQ== IGRvbm7DqWVz IGRldGFpbg== VEFSR0VU IHByb3RhZ29uaXN0 IGNsZWFySW50ZXJ2YWw= IEljb25CdXR0b24= IEdldEFsbA== VHlwZUluZm8= RUg= 4oCcVGhleQ== IHtb IGdhZw== INqp IERyb3Bkb3du LmZyZWU= Z29uZQ== aW1lbnM= IGluc3RhbA== CWN1cmw= X0NBTg== IEJvbmU= 77yU b255bXM= LWdvdmVybm1lbnQ= LmJpbmRpbmdOYXZpZ2F0b3I= IERhbnM= IE1jTA== KGVu Pihf 0JLRiw== Lio7DQo= PWo= LWNvcg== U29u LlRvb2xTdHJpcEl0ZW0= LWFyb3VuZA== X1hNTA== ZW5kRGF0ZQ== IHNsYWNr IHJvdGF0ZWQ= IG5vcWE= IGNvdHRhZ2U= IGVuY29udHJhcg== X3NraWxs aG91ZXR0ZQ== IQ0K LndlYXRoZXI= IGVtcGhhc2l6ZWQ= 5a62 INGB0L/QuNGB IENvbXBpbGVy KGFuZHJvaWQ= IOKAug== LnR1cm4= IHN1cHByZXNzaW9u X2NhbGxz ICpA KHN0cmxlbg== LmhleA== IEJpbGxz IFJTQQ== z4I= IEVzY2FwZQ== ZW1lbnRpYQ== IGZyb250ZW5k IHBpbnQ= X2V4Yw== enpv W10sCg== ICInLCci LkVudmlyb25tZW50 IGFmb3JlbWVudGlvbmVk IGVuZHVyZQ== cHJvdG90eXBl dGhlcmFweQ== c3Np RGVn X3BsdWdpbnM= LnVzZXJJbmZv UHJpbnRlcg== IFBST0dSQU0= IHJ1aW5z IGVtcGlyaWNhbA== IGNyYXds IEJvaWxlcg== LWNvbW1lbnQ= LnN1YnBsb3Q= X2V0 ICcuJyw= bWlub3I= IEN1c3RvbXM= IHlhdw== dW5kZXJsaW5l IENvbW8= KCgn KG1lYW4= IGNoYXF1ZQ== IEJsb2Nrcw== LnJhZA== aWxpYnJpdW0= IHdlYmRyaXZlcg== IG1lbGhvcg== ZGFuYQ== IEFidXNl IFNvdXRod2VzdA== IFBhcmVu UEVSVElFUw== CUlM IHNjcmVhbQ== dnU= IGluY29tZXM= IG5pbQ== IGxhY2U= IGNvbXBlbnNhdGU= UmV2ZXJzZQ== RGF0 X2F0dGFjaw== IG5vdXI= YWNoZW4= Y2Vr PEZ1bmM= d2ll Y29tcHJlc3NlZA== LW1hdGNo KCIiKV0K aW1pemVk Lm9yaWVudGF0aW9u LmNvbXBhcmVUbw== IG1hc3NhZ2dp IOychA== IGVsYm93 IGFudGlveGlk dW5kcmVkcw== L3Rvb2xz IFJPVw== YW5tYXI= IFdvdw== X3RpY2tldA== UHJvZ3JhbW1pbmc= IHRoZW9y LXJldmlldw== KCkpKSk7Cg== IFJpY2hhcmRzb24= IFBvY2tldA== XVtd YW1wcA== X2hlYWx0aA== IFBPUA== IE5hdmFs R3Vlc3M= IGFuY2VzdG9y LkdldEFsbA== LmxvY2FsU2NhbGU= IE1hcHBlcg== IGFjY3VtdWxhdGlvbg== IHNpbXVsYXRlZA== IERyaXZlcnM= IGTDqXM= Y3VycmluZw== IGVsZXBoYW50 IGFkdmVydGlzZWQ= IG1haWxib3g= U0hJRlQ= IE1vbmljYQ== IGFuYw== IHdhcmRyb2Jl SW5ncmVkaWVudHM= IHx8DQo= aXBweQ== IGFudGliaW90aWNz YXZpbmdz KGN4 IEZlcnJhcmk= IEFuaW1hdG9y LmR0eXBl cmVtb3ZlZA== b3JkZXJieQ== IGNyZXM= b2PDqg== IHB5bQ== IENpcmN1bGFy QGluZGV4 IFdhcm0= U2F5 IEFzc2lzdGFuY2U= IGN1cnRhaW4= IE1vbnRl SUxFUg== IENWRQ== IER1Y2s= IEFsbG93cw== X2ZpcmU= IERlcmJ5 IHJlcG9z IGh0dHBDbGllbnQ= IHBzeWNoaWF0 IG5vd2FkYXlz IGNhdXRpb3Vz IENvbXB1dGluZw== IGNvbXBsZXRpb25IYW5kbGVy IFdlbHNo IEJFU1Q= IHN0cmVzc2Z1bA== X1BF 5pel5pyf IERhdGFGcmFtZQ== CUludGVnZXI= X1ByaW50 TW92ZXM= IHRyYW5zZm9ybWluZw== LkJhdGNo eWFob28= UG9zaXRpb25z emVq IG5vb2Q= aW9yZXM= Xyo= IGNsaw== IEZsb3lk IGhhcA== Zm9udHNpemU= IG5heg== Lm5vdGlmaWNhdGlvbg== IERlcHJlc3Npb24= IGFjbmU= KioqCgo= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== LmNvbnRlbnRz eW50aA== IFN0cmFpZ2h0 Jyl9fSI+PC8= IGJ1bGI= Ulg= Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IGNvbXVuaWM= IFJO LW1lZGl1bQ== TEVBTg== PWxlbg== UGhvbmVOdW1iZXI= ZXJ2YXRpb25z QWNjdXJhY3k= IEFubm90YXRpb24= X2tleXdvcmQ= X2hpbnQ= IEF0aGVucw== IGFzc2lzdGluZw== IEhD LkluaXRpYWxpemU= JykpKQo= dXBh IHN1aXY= IElQQw== PFRFbnRpdHk= IGJyYW5kZWQ= b29tbGE= bGFyxLE= IFhNTEh0dHBSZXF1ZXN0 IGTDqWrDoA== IHRyYW5zY3JpcHRpb24= IHByZXZhbGVudA== LnBsYW4= IHN0YXJl IHdvcmtvdXRz IEVkdWNhdGlvbmFs IG1lc3N5 IE1PVA== LkNvbW1hbmRUeXBl UWVk KGdjYQ== IExpbmVhckxheW91dE1hbmFnZXI= IEJsb3c= IEFsdW1pbnVt IHN3aW5nZXJjbHVi IFRyYW5zaXQ= IGV4cG9z dmly KHNlY29uZA== IGJlbG9uZ2Vk U3RvbmU= 6ZW/ IFN1bA== IGdpZA== IGFsbG95 ZXJ2YQ== aXNlY29uZA== X1JFTkRFUg== IGFuZ2Vscw== IFBoaWxvc29waHk= b3B1cw== IG1vbw== ZW5ndWlu X1ZBUklBQkxF X0RFU1Q= KGF1eA== IGhvZQ== IGRvYg== YXR0YWNobWVudHM= IGNvcnJpZG9y IGRpdmlkZW5k nbw= IFRocm91Z2hvdXQ= Lm9wdGlt JG5ldw== IGJlcmc= IHNwcmVhZHNoZWV0 LlRyeUdldFZhbHVl IHBheW91dA== IE9uRGVzdHJveQ== YXV0aGVudGljYXRpb24= IE1pZ3VlbA== cnRj IENocmlzdGluZQ== IEFJUg== IGp1cmlz IGRlc3BhaXI= IHBhdGVudHM= LWhhcw== JV4= 5LuY X3N0cmR1cA== IFJlYXI= ZXR0ZXM= KHByb3BlcnRpZXM= IHdyaXRhYmxl LmlzTnVsbA== b2xpY3M= X2Jsb2I= IGN1YWxxdWllcg== YWZp b3d5Y2g= 6I635Y+W w4c= IENhcmRpbmFs IHRlbWE= IkFuZA== UGFnZVNpemU= 56eS LlNpbXBsZURhdGVGb3JtYXQ= IFdpbm5lcg== IGNvcnJlbw== X3dl LmFkZE9iamVjdA== KGNvdXJzZQ== IGhvZw== b3Bybw== IHByb2JhdGlvbg== dW5hYmxl KGFjdGl2ZQ== 5Zu+54mH IHBlcnRhaW5pbmc= IGVtcGhhc2l6ZQ== IFByaW50ZXI= PS4= IHVwZ3JhZGluZw== L2NvbnRhY3Q= PVtb LXNhbg== CXZhbHVlcw== IGRvc2FnZQ== U29saWQ= IFJvb3NldmVsdA== 5ZWG5ZOB IHJlY3JlYXRpb24= IFRlcm1pbg== LkJhZA== IEJvbHQ= U2t5 X0ltYWdl IHNxdWly IENvYg== T1JO IGF1Yw== LkxFRlQ= J0I= LXJlc2lzdGFudA== PiIr IHRva2VuaXplcg== IHNvdmVyZWlnbnR5 IFBlbmNl KCkiKTsK IHBlc3NvYXM= Lkdl IEluY2x1ZGVk IHBhZ2luYQ== IGV4cG9zaW5n 0LXRiA== X1NDUklQVA== LyQnLA== VGh1bWJuYWls 15Q= d2ViRWxlbWVudFg= d2ViRWxlbWVudFhwYXRocw== cHJlc3N1cmU= IEN1cnJ5 X0NQ T0xVVElPTg== SUxFUw== cHJvdGVjdA== b29sYQ== V29ya3NwYWNl e307Cg== IFVOUw== IHN5bXBhdGh5 cm9rZXI= IHJlbW9kZWw= CWNlbGw= IGF0b3A= LkZ1bGxOYW1l IGZhdXQ= IEVhc2lseQ== X2R5bmFtaWM= IGZyYW1lZA== IG1vdGl2ZQ== 6Lev c2Ft IG1hcmNh IFRleHRFZGl0aW5nQ29udHJvbGxlcg== IGRlc3RydWN0b3I= Y3JlYW0= IHJ1ZGU= IEJvbGQ= IEluZGlnZW5vdXM= IGdlbnM= IHJlbGFjaW9u KHN5c3RlbQ== IFVJRm9udA== X2NoYXJnZQ== VVNURVI= RVY= Lk5hbWVzcGFjZQ== IG1lcmdlcg== IGNhbGxvYw== Z2FuZw== QmFkUmVxdWVzdA== IHNwZXI= LWRlc2lnbg== IOKH Q2hhbg== IG9yZ2FuaXNt LCk= PWlk X3BsYW5l IENhc2Vz ZWxmYXN0 IExlZ2lzbGF0dXJl IEZha2Vy IGludm9raW5n LXV0aWxz KCkuJw== LmZhY2U= IGd1YXJkaWFu bXlNb2RhbA== IGNsaXBib2FyZA== IEFUTQ== IHBlYXM= IFN5bHY= LmNhbGM= IENvbnRhY3Rz aW50VmFsdWU= IG1vZGlmeWluZw== IEJhcmI= Lmxvc3M= X3BlcmNlbnRhZ2U= QXNrZWQ= KGxzdA== YXRlZ29yaWNhbA== LWZpbGVz IFJvbWFuaWE= LkFj IGhhaQ== IEZseWluZw== IMW8 anA= IFRyYWluZXI= LmFyYw== X2RlZw== IHRyYWNlYmFjaw== T3JGYWls RkxPVw== Lm9sZA== b3lh Z210 aXNlbXB0eQ== IHZhY2NpbmF0aW9u IG9ic29sZXRl cmVjb2duaXplZA== IHJ1aW5lZA== IFJlaW4= IFRyYWNraW5n eGZi 2KfbjA== IHbDpnJl IGJyeXN0ZXI= IElUUw== IGRlc3Rpbnk= IHN3ZWFy IHJlZGVz IGNsZg== IGZsaXBwZWQ= CWhlYWQ= Qmx1ZXRvb3Ro IE92ZXJyaWRlcw== OkJvb2xlYW4= Xz0= X2xy c3Bhd24= OmluZGV4 VkFMVUVT aXNrZXk= PyIpOwo= LnN5bnRoZXRpYw== IENoZWNraW5n c3RydWN0dXJlcw== aXBpbmc= IHZvY2Fscw== LVVw IE1hbnVmYWN0dXJlcnM= IE1hcnJpYWdl 5Luj56CB IGdhcm5lcg== X0NsaWVudA== cGFyYWxsZWw= UklFTkQ= IHZpbmVnYXI= c2VndWU= SkI= IGNvbnRhY3Rpbmc= IENhcnJvbGw= IG91dHJlYWNo dGVuc29y X3ZhcmlhbnQ= IHRoZWF0 bGljYWJsZQ== e3w= dGlueQ== X2xldHRlcg== IHBlbmNpbA== SGVhZGVyc0hlaWdodFNpemVNb2Rl aWx0cm8= LmF1dG9jb25maWd1cmU= LmRyYWc= LnVzZVN0YXRl IEJNSQ== aGludA== Q29tcGlsZQ== Klw= ZW5hcnk= IGx2bA== LkNhY2hl Kz0i X3R2 cnVpdG1lbnQ= IGZyZWFk QXJ0aWNsZXM= ZmlsYQ== IHBhY2thZ2Vk 4piG QVRIRVI= IFBsYW5uZWQ= c2NoZW1l IGRpYXJ5 IG9mZmVuc2Vz Lzw/ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== UHJvZ3Jlc3NIVUQ= IEdvcg== LmdldFRpdGxl IG1vY2tlZA== IFRvcnk= ICIpIjsK I2c= IGxpZWQ= IHN2Yw== X2d1aQ== RU5UUlk= IHNlcnZpY2lv bW91c2VvdmVy U0FDVElPTg== 44Kz IHJlaWZl bGVjdHJpYw== X2NyZWF0aW9u UmVhbGl0eQ== KCcr cHJvZHVjdElk U3VwcGxpZXI= LUxl LnJlcG8= dWNraW5n X1N0cg== IFJlbGF5 0LjQuA== IHBlcnY= Q2hpY2Fnbw== IG1haXNvbg== IHN0aWNrZXI= X3ByZXNzZWQ= U3dhcA== IElH IHN1c2NlcHRpYmxl b2NhZG8= IGdpbg== ZXhl aWdoYm9yaG9vZA== KWA= IGRpYWdyYW1z IGluZmxhbW1hdG9yeQ== IHTDqQ== IFBvcHVw IGFwcHJlaA== IFBvcnRmb2xpbw== IHdvcnM= LmVudW1z 0LXQs9C+ L0J1dHRvbg== IFBoYW50b20= ICM6 IGRpaw== cGFnZXI= ZnRhcg== IG9yZ2FuaXplcg== KGNoaWxkcmVu IE11bmljaA== IHN0cmFuZw== IFJX 44K/ TWFo cHRpZGU= IGxlYXJucw== IHJlZHVjdGlvbnM= IFJlcGxhY2VtZW50 T1RT YWxjb24= KHBhcnRz YmFzaA== IENpdGl6ZW4= jbDsnbQ= IEh0dHBTZXJ2bGV0 X1NDSEVNQQ== bWVhbnM= IGhvcnJpZmlj VkVSSUZZ IERDSEVDSw== ICgv LmJlZm9yZQ== LnRleHR1cmU= Z2V0TW9jaw== IFNlbnNl SW5zcGVjdG9y VGV4dE5vZGU= KEFM LmdldE5vZGU= IGJveWM= IEJyaXNiYW5l IGJhdHRsaW5n CXR4 IGxvYmJ5aW5n YnVpbHQ= IFNFRUs= IHJhbmRvbWl6ZWQ= Z25p X2NsdXN0ZXJz X2lkZW50aXR5 IGNhcmRpYWM= IG5ld1VzZXI= LlZpZGVv ZHVpdA== XWluaXQ= QXRs KXZhbHVl VGV4dFV0aWxz INC10YHQu9C4 Q29tcHV0ZQ== PSgn CQkgICAgICAgICAgICAgICA= IGFydGVy IFRXTw== JykpLA== IERJVg== IHByaXZpbGVnZWQ= IFBhcnRuZXJzaGlw IEhlYXRoZXI= YmF5 YXRpc2ZpZWQ= aW5zdGFncmFt X1NlbmQ= IEFTRg== JG5hbWU= IGJvbw== IGTDqWY= X0ZpZWxk IEVkdQ== Y2FuZGlkYXRl cnVieQ== IGFjY3VtdWxhdGU= KEludFB0cg== IGJ1c2luZXNzbWFu IGVjb25vbWljYWxseQ== IFJpbmdz IElucHV0cw== uYQ= YWNpZQ== IEFsYXJt IExvZ291dA== LnNlcXVlbmNl IFZpZW5uYQ== b3By IGRydW1z PWNvbmZpZw== cXVp IGRhdG8= IHBvbHltZXI= IENoYW5nZWQ= V2ViUmVxdWVzdA== IEFkdmFuY2U= IHVuZGVyZ29pbmc= LkNvbnNvbGU= IGN1cnJlbnROb2Rl IFdvb2w= IHDDoWdpbmE= UkVHSVNURVI= IHNhZ2E= IFlPUks= YW1hbmhv 5a6M IEJ1bmRlcw== IERpYWxvZ0ludGVyZmFjZQ== Z2VvaXM= dW5jaWF0aW9u PyQ= LkFzc2VydGlvbnM= IHNlYXRlZA== IFNweQ== UG9zZQ== IkM= IGFob3Jh INGE0LDQudC7 IOuzgA== IHdhcnA= UHJvamVjdGlvbg== IFNpbmdsZXM= IEFkdmVydGlzaW5n TGludXg= dXN0eQ== IHBlbmFs VVNJQw== b2RpYQ== Lm5ldGJlYW5z IFVn IEJyZW50 LWxvZw== L2NhdGVnb3J5 IEN1c3RvbWl6ZQ== aXJlbg== 77yaPC8= aW5hcnM= ICgrKw== R29pbmc= RVhFQw== KG1lc2g= IHBlcmltZXRlcg== Q2xz Y2VpdmluZw== bWVuc2FqZQ== KCkpKXsK IHByb3N0YXRl X2J1eQ== IFJvb2Y= LlJldHVybg== IG1hcnJpYWdlcw== X3RodW1i 574= 4K+N VGV4dHVyZXM= KFRFWFQ= c2hvcnRjdXQ= VHJhbnNmb3JtZXI= QVRJQw== IFNub3dkZW4= c2NyaWJlcnM= bWFya2Vk IOKGkQ== aG9yYQ== T1BFUg== IEZZ IEF1dGhlbnRpYw== IGF1ZGk= cmFtZXI= IExpdGVyYXR1cmU= IGl0ZW1JZA== LkF0dA== KGNudA== IEtT LWxpbnV4 IFBhcnRpY2lwYW50 IENydWlzZQ== aXR1bG8= dXN0cmlhbA== IGNsYXNl ID0k X2RhdGVz Y3VycmVudFBhZ2U= aXhh ZXhhY3Q= IHRzbA== LlNv L2RvY3VtZW50 aGFydA== X0lETEU= e30u eWV0 SXJvbg== IFRocm9uZXM= c25k XHhh IGJldmVyYWdlcw== X3RyYW5zcG9ydA== IGZvaWw= IHRhc3Rpbmc= IGdvZWQ= TWVtbw== IG5pdHJvZ2Vu Lk1lbWJlcg== LmZsYXQ= IGlsbHVt bWluZW50 Lnpvb20= IFB0cg== b2Npbw== IENvbnN1bHRpbmc= IENvbmU= CWl0ZW1z IExN IG9hdXRo IFByb2dyYW1tZQ== b2Nob25k KHNlbGVjdG9y IHdhdGVycHJvb2Y= IE1lcmtlbA== IHN1ZmZlcnM= IG5wbQ== 6LGh IExhbmRpbmc= IExBTg== CQkJCQkJDQo= L2lz IHPDqXJpZQ== IEdVSUxheW91dA== Z2l2ZQ== X0NZ QnJvd3Nl Lm11bHRpcGx5 PSIkKA== dXNv LXBhcmVudA== Lk1hdGg= Lm51bWJlck9m IHRpZW5lbg== IHJlc2VudA== IHBpdGNoaW5n Il0pLAo= LlV0aWxpdGllcw== IG11bHRpcGxpY2F0aW9u OnR5cGU= IHBwcmludA== aWFuaQ== 5YiZ IGxhdW5jaGVy IHJ1Z2J5 546w CgkJCQo= aGlk QW5nbGVz IGdvb2RieWU= IGlucHV0U3RyZWFt LndhdGNo R29vZHM= IFNheXM= PkY= IFN0aWNr IGNlcmM= IFNsZWU= CQkgICAgICAgIA== PEltYWdl IOiuvg== LWVkaXRvcg== cGllY2Vz IERyYW1h IC8vLy8vLy8vLy8vLy8vLy8vLw== IFRhc2tz QVJD Z2F0ZXdheQ== LmdldGN3ZA== Lk1ldGFkYXRh IGd1ZXNzaW5n 5Zyw5Z2A IHNtYXJ0ZXI= IEdldEVudW1lcmF0b3I= IGVmdGVy L29wZXJhdG9ycw== IEdMZmxvYXQ= IGbDuHI= IG9wYXF1ZQ== 5L+d5a2Y U3ByZWFk U1lTVEVN IGludmVyc2lvbg== IEJhc2tldGJhbGw= IHNpbXVsYXRpb25z IGRlbmllcw== IGF2ZXo= X2xpc3RlbmVy IGVuaGFuY2luZw== IE15dGg= IExha2Vycw== X01E TmRFeA== REFUQUJBU0U= IHThuw== YXJ0aA== W2xlZnQ= IGNvbnRlc3Rz c3RpbGU= KEtFUk4= X2Zj X3Bt IHByZXNpZGVudHM= IGhvc3BpdGFsaXR5 IGZhZGVJbg== Uk9QRVJUWQ== X21hcHM= IERlZmluaXRpb25z IGFzc2Vzc2luZw== IHVzYXI= IHF1YW50aXRhdGl2ZQ== bW96 QmVhdXRpZnVs Wygo Ym9ucw== ZnJlcXVlbmN5 Q29udGFpbg== IHB1enpsZXM= IENhc3Rybw== IHZpbGxh IGtpbmRseQ== Rm9udEF3ZXNvbWU= ZXJuYQ== ZXBvY2hz X2RhdGFz CWlw LnBhZGRpbmc= IENvbnRlc3Q= IGVkaXRpb25z IGRpc3Byb3BvcnRpb24= IElDTw== IGNvbWViYWNr PXZhbHVl cmlhZA== LXNvcnQ= U3VibWl0dGVk KG5ldHdvcms= IENlbA== IGluc3RhbGxtZW50 bGFzaGVz Lkxpc3RWaWV3 IFZhdGljYW4= KE1lZGlhVHlwZQ== SVZFRA== cmVhY2hhYmxl Oklz IENJVFk= 5Lqs IEhlbHBmdWw= IGJhxZ8= JQ0K IHBzeWNoaWF0cmlj IHJlY3ljbGVk Rk9STUFU IEdyb3c= YmluZQ== R2l0 LnNz IFdlYXBvbnM= IFN0eQ== X2Fycm93 KnNlbGY= aXJlbWVudA== IGRlZ2xp QXBwRGVsZWdhdGU= X2Jhbm5lcg== IGNvb3JkaW5hdGVk IFdlYmNhbQ== IGNlbGVicmF0aW9ucw== LmFjdA== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KHNob3c= IHdlZWtkYXk= IGNvbmNlcnRz 0L7Qu9C9 Y2xpbg== IGNyb24= IE5pbQ== LnNldFZlcnRpY2Fs IEVsbGVu 2LPYqg== IFNBTQ== RWZm Z3o= c3RlYW0= IGFudGlxdWU= cGh5c2ljYWw= IEZvcm1EYXRh LnNldHRlcg== IFBPSU5U Qm9u IGZsYXZvdXI= ZXJ2ZW50aW9u X0VOVElUWQ== CSAgICAgICAgICAgIA== IGludHJpbnNpYw== IOaO YXBwZW5kVG8= YXJhbWVs KV0p IFJlY29tbWVuZA== KW0= T3V0T2ZSYW5nZQ== IGtuaWdodA== IHNhdGVsbGl0ZXM= IFRpdGFucw== IHdlaWdoZWQ= IERhbmE= ZWFzZQ== IHNpcA== U0lN IERldmVsb3BlcnM= bWFsaW5r L2NoZWNr X1BMTA== bnVuZw== IGRyeWVy PUE= LmR3 X1NRTA== IHN1YnBsb3Q= RFJPUA== IHByb3RvdHlwZXM= IGhvdXJseQ== ZGlzcGxheU5hbWU= IGFzaQ== IFZpb2xlbmNl IGFzdHJvbmF1dA== IGRhdGF0eXBl IGluZm9ybWF0aW9uYWw= IGludmVzdGlnYXRpdmU= ZXRlcm1pbmVk cmVuYWw= Oyc+ CWNvbA== Vkc= X2Jvb2xlYW4= cmVjZW50 ICopCgo= IFJhaW5ib3c= b21tZW4= IGx1cg== IG9wcHJlc3Npb24= KCIsIik7Cg== IEZhY2lsaXR5 REVGSU5FRA== IG5lb24= IG9mZmVuZGVy QUZQ IENsZWFuaW5n W10pOg== IHVuZG9jdW1lbnRlZA== LlJlcG9zaXRvcmllcw== IEd1aXRhcg== 0LDRgdGB0LjQsg== U2tpbGxz IHRlc3RpbW9u cnlwdG9ncmFwaHk= IEFtYmVy IFN0YWxpbg== IGxvbmU= IGFwZW5hcw== IGRpZXNlcw== IEFyZHVpbm8= 6L2s PT0t X0FjdA== IGNvZGVk 4pag YW1idXJnZXI= LWxpbmtz IGFybW91cg== LkhpZ2g= Z2V0Q29udGVudA== c3RhZw== IGhlY2s= IOyXhg== IE1jQ29ubmVsbA== IENvbmNlcnQ= IEFsbG9j w6RyZQ== LnJlcGxhY2VBbGw= IHBhcnRpdGlvbnM= cm90dA== IEZsZQ== X1RSRUU= cmVhc29uYWJsZQ== IFJlcG9ydGluZw== IGJpbGxpb25haXJl c2NvcmVz bWlucw== LWV5ZQ== TU9SRQ== YWJvcnQ= IFNXVA== IGludmVydGVk IFRlYWNoZXJz O24= IGFzdHJv 0L3QvtCy 0LDQvdC40YY= cHJvZHVjdG8= Y291bnRyaWVz IE93ZW4= IGNvbnRhbWluYXRpb24= IHZpYmU= IEVsbGk= LnNjcmlwdA== IE9saXZl RE1B dmllcg== OnNlbWljb2xvbg== LW1vZHVsZQ== Z3Jlc3NpdmU= YWd1 X3BsYXllcnM= IHJlc3VsdGFkb3M= c3RhcnRlZA== c2Nyb2xsVG9w PT09PT0= IHdlaWdoaW5n IFtbWw== emFobA== KE5T IEFzc2VydGlvbg== bGVhZ3Vl LnNldFRleHRDb2xvcg== CU1lc3NhZ2U= IG1vbXM= X0FG Lndo QUxT IGF1dHJl XQoKCgo= Lm9wYWNpdHk= IEJ1ZGRoaXN0 IGRlYWY= IE9yZ2FuaXNhdGlvbg== KEdsb2JhbA== ZW5zY2g= IGhlYWRhY2hl IEFsaWVu X2lub2Rl IFN0YXJr IOaJ LWxuZA== b3JlZg== X2ZlYXQ= IHBlZGVzdHJpYW4= IG5vbWluYWw= IGJhbGxvb24= IHNwcml0ZXM= UHJvdG90eXBlT2Y= IEFwb3N0 IEZFQVRVUkU= T0g= IHJlY2Vzcw== IERvbm5h Y29uc3VtZXI= JEdMT0JBTFM= IEdJRg== LWZyYW1l SW5pY2lv IHBhc3NhZ2Vz RGF0ZVN0cmluZw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== LmJ5dGU= QnVn aW5pdGlhbGl6ZXI= cGt0 b2RpdW0= IERFUg== Lm9wcw== bGVyaQ== IGdpZnRlZA== IGRldGFjaA== dGVycmFpbg== ZWx0ZXJz 44GP LmxvYWRlcg== IE5HTw== c3RybmNtcA== S2g= KGZvbnRTaXpl cm9ja2V0 IHByZWNlZGVudA== IEF1cm9yYQ== IEV4cGVyaW1lbnQ= aXNwaGVyZQ== RW5jb2RlZA== IOKAkwoK IHB5cmFtaWQ= IEFubml2ZXJzYXJ5 b2ZpbA== 658= KHBsdWdpbg== Q29lZmY= IGNvb3BlcmF0ZQ== IHByZWRvbWluYW50bHk= SVNN UGhyYXNl X0RFRklORQ== RmxpcA== QU1JTFk= IE1hcmtldHM= IFN0cmVhbVJlYWRlcg== IENvbWJpbmU= IG1hbnVzY3JpcHQ= enph LHRw V2hhdGV2ZXI= SVRJQ0FM aWdoYm91cg== RGF0YVByb3ZpZGVy LlRleHR1cmU= cHJpdmFjeQ== LlNESw== IHJlY2hhcmdl IGNwcA== IENGRw== KGhvbGRlcg== KHB5 bW90 IHNhdm9pcg== IFJvc2E= IFBDcw== IO2Z Lmhlcm9rdQ== IGZyZW4= IFJpbGV5 YWdhdGU= IHNvbmQ= Lnhsc3g= IGhhY2tlZA== c3RhZA== R2k= IHNhbml0eQ== IFNxbERhdGFBZGFwdGVy Li4uIiw= IFB1c3N5 ICoqKioqKioqKioqKioqKio= IGhhc3NsZQ== X1BBUkVOVA== IFVBRQ== IGJlZ2lubmVycw== KENsaWVudA== IHN0YXRpc3RpY2FsbHk= LmhvdXI= ZWRlbHRh IHRyYWN0aW9u dWVsdmU= YXJhdA== IHNhdW5h SU5WQUxJRA== IGluZGljdG1lbnQ= QUxMRQ== IGRpc3NlbnQ= IFR5cG9ncmFwaHk= IGludGVudGlvbmFs c2l0 IEFuaW1hbHM= IGNvdW50cnlzaWRl IHVhcnQ= fVwi IHNlYW1sZXNz vuekug== IGF1dG9z ICInIjsK Rmx1c2g= QU5OT1Q= IGFsZ2VicmE= YXNzb2M= IFdhdGVycw== IHByZXBhcmF0aW9ucw== cm9ueW0= Wyxd U2Fucw== IGFybWllcw== aXBlZw== IGNyZWFteQ== LmFydA== ZXRyZQ== IEFuaW1hdGVk IHVucGxlYXNhbnQ= ZW1lYW4= Z3JlYXQ= acSF IEVhcmxpZXI= IGNoaWM= IHByZXNlcnZpbmc= KGV4ZWM= IEludmVzdGlnYXRpb24= CUdQSU8= IHJpZ29yb3Vz aWpv PW51bQ== IHRvb2xTdHJpcA== KXNldA== KyIm IEFjY2VsZXI= IGRldmVsb3BtZW50YWw= aXNwb3NhYmxl IGZsYXdlZA== cmVuZQ== VXBkYXRpbmc= IHdhdGNoZG9n IGRlbm9taW5hdG9y IHN1YnVyYnM= IC4uLik= IGNvbnZpY3Rpb25z Y2xvc3VyZQ== LklQ IHRyYW5zbGF0ZXM= LnN3dA== LlRyYWNl IG1ldHRyZQ== LmlzRW5hYmxlZA== IEVmZmVjdGl2ZQ== LnRvSW50 IGVuY2hhbnQ= IHN0dW5uZWQ= IHBvaQ== L2NvZGU= YWRt LmRhdGFiaW5kaW5n IExvcmVt X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== IGxlZGdlcg== IGNhcmE= IEdpcg== IHdhaXRz VW5v IGN3ZA== 6L6R IFRSZXN1bHQ= IHJlam8= IGVtaXR0ZWQ= IFdlc3RtaW5zdGVy 5LiA5Liq bmVr X1Rpcw== IGVuYWN0 CXdpdGg= b3JnaWE= IGp1ZQ== UGVyZm9ybQ== U1BBVEg= LnRvcGlj IERhdGVu 4bqn IHNpdGlv X01N IlNv YmlhbA== IHNjb3BlZA== UmVxdWlyZXM= IFRPVEFM IENoYW5jZWxsb3I= KGNvbnRlbnRz IHN0ZWFsdGg= ZGV2aWNlcw== LXBhc3M= aWxpaA== IE1hbGNvbG0= IERlcG90 IGNvbmZpZ3Vy YXVzc2lhbg== X2NvbnN0cmFpbnQ= 0LLQtdGC R1JB IFJhdGVz LmRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= IE5vYmVs aXRpY3M= IGlnbm9yYW50 IFJlcG9ydGVy IEVib2xh IFNob2Nr X3JlbGF0aW9u IE5pbmph KWM= IHRpY2tlcg== LmlzQ2hlY2tlZA== IFN1cHBsaWVycw== IFJhcGlk TGV2ZWxz 4oKs4oSi CXF1ZXVl IGNob3A= IFVuaXg= cmVqZWN0 LWNhbGVuZGFy KHNvcnQ= w6huZQ== ZXJjaWNpbw== IGhlY3Q= Q0FMTFRZUEU= cm91cG9u IHJlbnRhbHM= YXV0aG9ycw== e25hbWU= IEZJRk8= IGxhc3Nlbg== IE5vdXM= IHNuYXBwZWQ= IGZlcnRpbGl0eQ== ImxvZw== Y2xpY2tlZA== IHBsYW50aW5n IGdi L291dHB1dA== UEVBVA== IGNhdGVnb3JpYQ== IGJhY2g= UHJvZmVzc29y aW50aA== Il0NCg== UmVjb3JkZXI= c2VyZGU= IFRyYW5zbWlzc2lvbg== dHJhZA== IHR1cmJv X1ZFUlRFWA== XEV2ZW50 aWx2ZXI= IGJvZGlseQ== IFNvdXJjZXM= IGtpbGxpbmdz LnhyVGFibGVDZWxs IGZvbGRlZA== L2xlZ2Fs dW5lcg== IFJpZmxl IE1JREk= X1NlbGVjdGVkSW5kZXhDaGFuZ2Vk LlNpemVUeXBl IFdlYlNvY2tldA== IHNlbGVjY2lvbg== U2FuZA== b3Ryb3M= IGVudmlzaW9u L2V0Yw== IE1lbGlzc2E= U3BvdA== 0L3QvtC1 X0FSTQ== QXR0ZW1wdA== IEJJ 44GU IERV IGJhY2tsYXNo c3RyaWRl L2NsYXNzZXM= IHRleHRDb2xvcg== X3N0YWZm b2JsaW4= YWdlbnRh LmNvbGxlY3Rpb25z aWxsYWdl Jw0KDQo= ZmxhdHRlbg== X3NhbGVz X01BU1RFUg== VFc= X2Rh UGl0Y2g= cGhpZXM= IHpvbWJpZXM= IFZFUlk= IFBoYXJtYWN5 IHByb2dyZXNzQmFy IGhhc2h0YWc= U2lkZWJhcg== QHN0b3A= KHBj 0L7Qu9C2 TUFLRQ== IENvcm9u IGt2aW5uZXI= IE1haWQ= Ym9i LnRpdGxlTGFiZWw= IHN1Y2Nlc3Nlcw== IERlbW9jcmFjeQ== IFN1cmdlcnk= IGNvdWdhcg== IGN1cnNv IGxvcm8= aXN0ZW5jeQ== U2VuaW9y w6Zr IEFBQQ== IEJPT0s= 0LrQvg== V1NUUg== ICovLAo= b3lhbA== LnZlY3Rvcg== IFNQRUM= U1NG IGNvbXB1bHM= IEFwcGVhbHM= IFdpbnN0b24= IE1vY2tpdG8= Y29udHJpYg== LmF2YWlsYWJsZQ== ZW50aXR5TWFuYWdlcg== YXJpYXM= X3NhbGU= X3Jz IGRlY29kaW5n IGxvY2F0b3I= b2xpdGg= IGtvbA== IGFzY2lp IFJ1dA== L2ludGVyZmFjZQ== CQkJCQkJICAg IE51bWVy LmZsaXA= LWRlbA== IGJvbHN0ZXI= b25vbWlj IHpt TEc= RmluZEJ5 IGFkYXB0aXZl bG9v IHZ1ZQ== KHJldmVyc2U= X2NhbnZhcw== LnJvbGVz aWZpY2Fkbw== dmVuaWVudA== IkFz IEVudHI= YWxpZ25lZA== IGJlcmVpdHM= Ly8vCgo= Lmd3dA== LmVtcGxveWVl X2NsaQ== IGFudGljaXBhdGU= 6ZmQ IHBpaw== IG11c2hyb29tcw== KHR0 IG9tYQ== IFNhbmNoZXo= X2dvb2dsZQ== LlZhbGlk IEZpbGVOYW1l aXZhdGl2ZQ== a2Vk LXdhcg== IG1hdHVyaXR5 0LjQtA== IG1pbmVy UmVkdWNlcnM= IExhdExuZw== X1NURA== RGlnaXRz Q2FsYw== LXVwbG9hZA== IGhhbmRpYw== 4Li14LmI ZWdyYXRlZA== IFNUTQ== Q2xpZW50cw== IFR1cmJv U1lOQw== IHBob3RvZ3JhcGhlcnM= Lk91dA== LmNoYXJhY3Rlcg== QlVJTEQ= LnVubG9jaw== IGFyaXNlcw== IENvbW1hbmRz KCIiKTsNCg== X0ZPUkU= Oycs KyIn LkltYWdlcw== Iil7 IE1leWVy IG5lZ2F0aXZlbHk= IERMTA== IGV4ZQ== IGRlZmljaWVuY3k= IHdpbGRseQ== LXN3aXRjaA== Y29uc3RydWN0aW9u IGV4Y2VwdGlvbmFsbHk= IExpeg== L2phdmE= IHRoZWlycw== IENvbnRlbXBvcmFyeQ== bGlz LmZpbGxSZWN0 IE5GQw== IHJlaGU= KG51bWJlcnM= IHJhc3Rlcg== IGZpZ3VyaW5n IHNob3dj IEppbGw= IGFyY2FkZQ== IENvbnN0cnVjdHM= bWRs KCd8 IGlkZW50aWZpZXJz IHN0ZWxsYXI= KENvbm5lY3Rpb24= ICJ7ew== eW9y KG15c3FsaQ== IGRvdmU= T2ZCaXJ0aA== LmRpc2Nvbm5lY3Q= X2hp IHp3aXNjaGVu IEdydW5k aXJvcw== X0FycmF5 Lm9uY2xpY2s= YW5zb20= QW5zd2Vycw== CXJlbW92ZQ== RmE= IGh1cnJ5 LWluZg== IGdldENsYXNz IFJlZ3VsYXRpb24= IEZMQUdT bWlzYw== S2Vu X2hlYWRpbmc= R0h6 LWVudHJ5 IGJpb2dyYXBoeQ== U2ln LW1m V2F0Y2hlcg== 4oCcQQ== fXB4 IHNwaWN5 X3Nx TG9zdA== KHRyYWNr 0LDQu9C4 RGVzY2VuZGluZw== PGJpdHM= cXVpbmU= IEFkdm9j X1NO IEhhbm5haA== UE9Q IGVtaXR0ZXI= IGN5bg== IENBRA== Pyku L3NldA== IFNpc3Rlcg== IEVuZHBvaW50 IG1lbm9y IGludGVycA== cms= aWRsZQ== IG91dGZpdHM= LnZlcnRleA== IGNsaWM= QVJFTg== IHBvc3R1cmU= IE9wcG9ydHVuaXR5 dng= IEZvcmJlcw== LkRpcmVjdGlvbg== IHJlc2lkZQ== IHJlbWVtYmVyaW5n bmVzdHk= QXV0b3Jlc2l6aW5n cHJvdmlkZXJz IEFI IGh1cnRpbmc= IExpbHk= ZXZhbHVhdGU= bGlqaw== cGFwZXJz IFNtYXNo IExBU1Q= IHdlbGxz d2FzaGVy X1JPTEU= IERhbmdlcg== Kigo X3JlcG9zaXRvcnk= IFJlc29sdmU= IFJvb21z X1JH IFFU b29w IEhlYXA= IHNsb3dpbmc= IGdyYXR1aXRl X2NhdGFsb2c= IHBvbHlub21pYWw= THk= cGNz Rm94 IEN5cg== IGRpbWlu L21vbnRo U2FsdA== IGhpbmQ= LlBFUg== Rm9ydW0= Y2Vu X3BvbA== 7Zi4 IGluc2Vy KH4= QHRlc3Q= IEdvbGRtYW4= IHVwbG9hZGluZw== RmM= IGtvbW1lcg== IG1pdHQ= X2xvZ2dlZA== IGJ1Y2tz LWxheWVy KX07Cg== IE9N IHZlZw== Y29sb3Vy INC+0LHRig== U3RkU3RyaW5n X3F1ZQ== IFRpYW4= IHNwZWNpYWxpemU= 0LjQvw== INC60Ls= dHJpYWw= LWVkZ2U= IG1hcnM= T0dMRQ== IGVtcGF0aHk= IEJvbQ== IGNvbGxpc2lvbnM= IGNhcnRl IFRlaWw= IE1QTA== IHBvcm7DtA== IGFpcmxpbmVz QXdz TnM= IFNwYXdu KHVzZQ== 6buY6K6k IHlhY2M= c3Rvcg== IGNvbmZlc3M= IHBlcXVl cmFnZQ== PyIK L2RhdGF0YWJsZXM= IFNob3dlcg== X18v IGNyeXN0YWxz IGJ1c2Nhcg== IEhhdXM= aXphw6fDo28= X2VudGl0aWVz lYw= mow= eGNj dmlydA== LWNoZXZyb24= KFJlc3VsdA== Y2FrZQ== Q09NRQ== IHByb2hpYml0 IENoZXNz IGJlYXVjb3Vw INGH0YLQvg== UlVO IElL w7PFgg== X1VwZGF0ZQ== IHNsZWVr IFNwZWNpZnk= X2NyZWRlbnRpYWxz xZ90 IFVzZXJOYW1l CVZhbHVl IGFycmF5TGlzdA== IGV4Y2hhbmdlZA== aXBzaXM= LnJlbGF0ZWQ= IFNlaXRl X0JBUg== IExlbQ== IFdBVENI IENsaWVudHM= IC4q IEVhcmw= LXJlcG9ydA== IGZvcmVpZ25lcnM= IHN0cmVuZ3RoZW5pbmc= CURlc2NyaXB0aW9u KGdv LnRvb2xiYXI= IGNhbGN1bGF0ZXM= CXNvdXJjZQ== IGN6YXM= IHJlY2w= YWJv IGxvY2FsaG9zdA== IF57Cg== LlBvcA== IERlc2lnbmVk XEFic3RyYWN0 SG9sZA== IEd1aWRlbGluZXM= aXBsaW5l IGNhY2hpbmc= LlJlYWRlcg== X2V4dGVybmFs LnN0cnB0aW1l IFdlZWtlbmQ= LU1hcg== IEJlaQ== IHsqfQ== IFJ1ZA== IGV4cGxvcg== IEJvdWxldmFyZA== Q2FzaA== IHByZXBhcmVz IHNlcmlhbGl6YXRpb24= ZXdhdGVy IGFkYw== OgoKCgoKCg== UmVmZXI= IHNjYW5uZWQ= fX0KCg== IEZ1bA== IHRvdXJpbmc= 44OD44Kv Pigo c3VydmV5 IO2Y Li4uJykK IERpdmlkZXI= b3Ns X0NBTkNFTA== X3ByZXBhcmU= c3Rpbg== IEhlYXRo LlByaW1hcnlLZXk= IOKGkA== IExvY2FsRGF0ZVRpbWU= IGNvb3BlcmF0aXZl TGVhcm5pbmc= LmVucXVldWU= IGdvb2c= IFJlZ3Jlc3Npb24= aW1hdGVz IHZveWV1cg== IERyaW5r cGx1Zw== IGxlbmRlcg== bWFuYQ== IHBlcnNvbm5lcw== eXBzZQ== IHVubGluaw== IFJhdmVucw== IGh1cmQ= IHBlcmlvZGljYWxseQ== QVJHUw== IEdI Y2hhcmFjdGVycw== Li4uIgoK LWVzdGFibGlzaA== IGRu KGNvbmRpdGlvbg== IEdyYXZpdHk= IGVzdGFz X2ZvY3Vz Q3JlYXR1cmU= KHNpdGU= IGNhcnI= IFJM IFJJ IE1vdG8= QVNG IEx1Y2tpbHk= CVJvdXRl IGVudHJvcHk= KCIsIg== Q29sbGVjdA== KGNvbnRhY3Q= IEZsb3JlbmNl IHByZW1pdW1z IGxpZmVjeWNsZQ== IGJhbnM= eGVm V2ViS2l0 IEZsb2F0aW5n IGNvc2E= U3BlY2lmaWM= IExvYW5z YnJlYWQ= IGRlc2NyaXB0b3Jz IHs6Lg== VEhSRUFE IFRyZW50 IHNjb3A= UUE= IEFudGFy cGVs X2RpZmZlcmVuY2U= X2NoYW5nZXM= KC4uLik= IFJvdGF0aW9u IExHUEw= IEpVU1Q= KFRhc2s= X3N1YnNldA== IFRSQU5T 5Yqb IFNjb3V0 LXBvcHVw IHNtb2tlZA== X0NsYXNz IHR1cm5vdmVy YnJha2s= IFJvY2t5 dGFz LlJlZ3VsYXJFeHByZXNzaW9ucw== IEVsbGlvdHQ= IFNwaW5uZXI= RFVDVElPTg== IGxpYnJl IG1vbHRv ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZUUA== bXBlZw== KGZlYXR1cmVz IGJhbGQ= IFZpZA== IHNob3V0aW5n TGludA== IHNvY2tldHM= IHByb3c= IG5vdXZlbGxl aXNjYXJk IFNwb25zb3I= IGNvbnN1bHRh KSkpOw== SW5kaWFu IFJhc3BiZXJyeQ== IHRlYW1tYXRl IEpXVA== IEdoYW5h IGNha2Vz cHJpbWVy Zm9ybWE= ZXJnYXJ0ZW4= X01hbmFnZXI= IHByZXNlYXNvbg== R0FNRQ== fCI= IEJyb2Nr IG9jY3VweQ== IGRlY29yYXRpb25z w6FuZA== IGNvdA== IHBhcmFu RGlzaw== cmVtYWlu Pj8= U3Ryb25n IGZyYW5jZQ== IEVyYQ== LWNy LkJ1ZmZlcmVkUmVhZGVy IFBhcmFkaXNl IFZBVA== IEFuZGVycw== IGxpbWI= YW1wb28= IGltcGVyYXRpdmU= VVRJTElUWQ== IFJlY29nbml0aW9u IHJhZ2F6emU= IHBvcHM= eXByZXNz IGVtYmFyZ28= Ly97Cg== IHN5bGw= UFRS 5a2Y5Zyo IGRpZG50 TWFpbGVy IGFjYWRlbWljcw== IEZyYXVlbg== bmVpZGVy LXJlbA== IHJhaW5ib3c= KElu IHNsaWNlZA== PT09PT09PT09PT09PQo= KHNlbmQ= TlNNdXRhYmxlRGljdGlvbmFyeQ== dm9z KHBhY2thZ2U= IG9yZGluYW5jZQ== dmlld2Vy IFNhbnRvcw== LXNlbGxpbmc= IGdvdg== ZXR0bGU= IGZvdW5kZXJz IHdha2luZw== c2xhc2hlcw== LXBvdW5k cmVjaHQ= 2KfYqg== Lm9uQ2xpY2s= IG5vcmQ= c3TDpG5k X3doZW4= VVRFUlM= aWNj IGNhcHN1bGU= IFdpZA== TWFyYw== 4Li4 cm9yZWQ= VUdF TE9VRA== IEF1ZGl0 aXBpZW50cw== b3BpYW4= IFN1ZQ== IHd1cmRlbg== LkhlbHBlcnM= IGZhY3Rpb25z W25w LXRoYW4= IHJlY28= IGthcw== IGNtZHM= L25ldHdvcms= eGJm Z2V0Q29sb3I= IGJpYXNlZA== IExhaw== RGF0YXM= dmVudHM= IOuy X1BT LlZhbGlkYXRl SW52b2tlcg== IG5ldWVu IGp1dmVuaWxl VklTSU9O IGRldm90ZQ== IGxpbmhh IGRpc2NvdW50ZWQ= XENvbmZpZw== IHdvcnRod2hpbGU= IHNraW5ueQ== IENvdXJzZXM= bGV5cw== IE1vcnRnYWdl S2V2aW4= IGFubm91bmNlcw== XSkq cmVzZXJ2YXRpb24= IOaVsA== IHByZWp1ZGljZQ== IFN0cmluZ0NvbXBhcmlzb24= IGJlYXJk LXdpbg== IFPDo28= CW1z amFs IEVhcm4= X3BvcnRz IE5vbWJyZQ== X0NPUg== IEJVSUxE LnNvdW5k WWVsbG93 IGxpbmViYWNrZXI= IGNoYXJpdGFibGU= anVn X05PTk5VTEw= IERlbnRhbA== Ij4kew== CW1hdGNo UnVzc2lhbg== IHZlcnNjaA== IHBpbm5lZA== IGFkb3B0aW5n T3B0aW9uc01lbnU= UGFn IHBhaXJpbmc= IHRyZWFk ZXJjaXNlcw== IFNwcmVhZA== KWk= IEJBRA== X3Rm VUlJbWFnZVZpZXc= cG9wdWxhdGU= YmFi IM+D Wysr IG9waW9pZA== ICMjCg== ZHR5cGU= IFN0YXJ0cw== KCcvJyk= IHBlcnNvbmFscw== LW1hcmtldA== IHJlZHVuZGFudA== IEVzc2VudGlhbA== IHNjcmFweQ== INC40Lw= YWNs IGNyZWFy IEJlbmQ= IHJlbGlldmU= LXJvb20= d2lmZQ== IHbDoA== IFFQb2ludA== IHF1YXNp IG1ldGhvZE5hbWU= XHhj IFBlcnU= L1RoZQ== Lm9ybQ== IHZpeg== L3BkZg== TG9jYXRlZA== IGNvbmZyb250YXRpb24= IENoYW1waW9uc2hpcHM= IGh5cGVydA== IGRq IFVzZXJJbmZv IOWIm+W7ug== XHhi KHNpbQ== ID09Cg== IHN0YWdpbmc= IGRyYXN0aWNhbGx5 5a2m bG9yZHM= Lmxlc3M= 0LLQtdC00LjRgtC1 IEJ1Y2tldA== IE1hbQ== LnRlcm0= X3Bp Y3p5 LnB1Yg== cHJlY2lv IFZpcnQ= IHJvbWFu aXRhdA== TGV4 X2luZm9z xLA= Lm90aGVy VkVMTw== IHBvbmRlcg== IGhhbm5v KFBhZ2U= ZG9p IHBvbGl0ZQ== IHByb2dyYW1tZXI= RGllcw== JGQ= IHJlcGxpY2F0aW9u YWRkQ29sdW1u ZnJpY2Fu IGxlbmc= YmVlcg== b2l0 IHdhc3Rpbmc= eWxpbQ== bWVhc3VyZQ== TmVn IHBhcnRpZQ== LmNvbnNvbGU= IEd1aW5lYQ== VEVM X2ZhY3Q= LmNodW5r IGxlbnQ= IGFsbGVy IOCklQ== X2lkbGU= IGFkbWlzc2lvbnM= SlNPTkFycmF5 IHZpYnJhdGlvbg== LmhlbHBlcnM= 5aSW IGhlbg== am9obg== IOyDnQ== IGp1ZGdlbWVudA== IGdlZW4= dGVycmE= Xns= IEl6 IGPDog== aW5zdGFuY2Vz IHRocmVhdGVucw== IG3DvHNzZW4= S2luZE9mQ2xhc3M= IHN0b3J5dGVsbGluZw== X2RlbW8= cmlhcw== UHJpdmFjeQ== aGlmdA== IFlp ZXNvcg== 7ZWg ZW5zaXRpdml0eQ== LldyaXRlcg== 4LiC RGlzdHJpY3Q= LmdldEpTT05PYmplY3Q= SW1wcm8= KGdldFJlc291cmNlcw== IFNQRUxM cm9kdWNl IHNsb3dlZA== IGxpbmV3aWR0aA== IGhvbmVzdHk= IENvb3Jk IEZvcms= IERpc3BhdGNoUXVldWU= IENsaWZm IFdpcmluZw== X1RJTUVTVEFNUA== b2xsYWg= YXZvaWQ= KytdOwo= c2VtYW50aWM= LWNzcw== IHZldG8= IE1lcnI= IGxlZ2lzbGF0b3Jz Q0VFREVE IHF1ZXN0aW9ubmFpcmU= IFBpbGxz Q2FsY3VsYXRl KGNvcmU= J2U= IGRpc2xpa2U= IFByZWZlcmVuY2Vz X0VYVEVSTkFM 6LCD IGRvZGdl 5pyN5Yqh Lm5hbWVz LmRyYXdJbWFnZQ== X3Byb20= dWNrbGFuZA== IDwkPg== xLF6 L3NpdGU= 6aG5 cm9waGU= IGNvbXBlbGxlZA== IGxhcHRvcHM= IHVuaQ== Q0xPU0U= IGNhc3VhbHRpZXM= IFVuaWZvcm0= VGVybWluYWw= LiIsIg== REFU KFRyZWVOb2Rl IEdhbmRoaQ== KHN0bXQ= QVhC Kk0= IHVtYnJlbGxh YW5pbWFs IGdycGM= IHdoZXJlYnk= IGZsb2F0cw== CWFyZw== IGRiZw== IGV4Y2VlZGluZw== RXZlbnRUeXBl LlNhdmVDaGFuZ2VzQXN5bmM= IHt7ew== IG93ZWQ= YWhyZW5oZWl0 IOyn IGVxdWlwbw== dXJhaQ== IGlkb2w= XSIpCg== X21ham9y IGVudGlyZXR5 aW5nZXJwcmludA== w6dvcw== L2FjY291bnQ= CXJpZ2h0 dXJzb3M= IEVEVA== X0lOU0VSVA== IHNoaW5pbmc= IDw6 RWRnZUluc2V0cw== IGNvbG9uaWVz LklN CSAJ Uk9BRA== Q0NDQw== cGxhY2luZw== IGdldEFjdGl2aXR5 ZW1hY3M= JyUo LmNsaWNrZWQ= IFRoZW0= aXNpYQ== QnVzY2Fy LnJlbmFtZQ== IG9hdGg= IGFmdGVyd2FyZA== IFVGTw== QVBT IEphY2tzb252aWxsZQ== LnNvbWU= Q29uZmlybWVk LnNjYW4= aWdJbnRlZ2Vy RGVjb3JhdG9y c2hpZWxk cmVzc2l2ZQ== LmRpZA== 6K+36L6T5YWl IHNodXR0ZXI= RGFt IHBhcmVudGluZw== ZXllZA== JGl0ZW0= LWRldmVsb3A= IGV4dHJhY3Rz IGRlY2VudHJhbGl6ZWQ= IEVsc2E= X3NwaW4= XSkr LWluaXRpYWw= IG11bHRpdHVkZQ== IHNlbnNvcnk= IE1PREVM IHNhZmVndWFyZA== 7Lk= IGh1bnRlcnM= IFRpbnk= SU5P ZGVjb3JhdGU= IE5vU3VjaA== SG8= KFJlc3BvbnNl IHJ1bGVy CXNob3J0 IGNhc3Rlcg== IGNsaWVudElk IHBkYg== 64+E aXRpYw== IEdhbWVTdGF0ZQ== IG5ld0l0ZW0= KQoKCgoKCg== b3Vpcw== bm9j LkJMQUNL X1ZFQ1RPUg== LS0tLS0tLS0tLTwv IGV4YW1pbmVz CWJsb2Nr IGFkZG9u IHN1cnZleWVk IExpc3RlbmVy IGZyb250aWVy IGxhY2tlZA== SlVTVA== INGN0YI= IHRpbnQ= IE15c3Rlcnk= ZGF0ZVRpbWU= IFR1dG9yaWFs IGZ1bGxOYW1l IERyYWdvbnM= X0ZJTEVT IFByaW50V3JpdGVy IGJlZXQ= IExhZGllcw== X3RpcA== IEphaHJl b3JhbWE= IGluc3VsYXRpb24= KEVudmlyb25tZW50 X2FzdA== YmVyZ2Vy bGVuYQ== b2dlbmVvdXM= X01PTlRI LXByZXNlbnQ= IGZyYW1ld29ya3M= UVE= UEhQRXhjZWw= IGNvdW50ZG93bg== IEZX KGNsdXN0ZXI= OmM= IG9raHR0cA== b2JzZXJ2ZQ== W3BsYXllcg== Lmhl IFBhbmFtYQ== QXVzdHJhbGlh IG91bmNlcw== IGFnZ3Jlc3NpdmVseQ== IHdhcm5z IGN1c3RvbWl6YXRpb24= X1F1ZXJ5 d2lz IGludmFs QUZG KGNhbWVyYQ== V2ly IG5lZ290aWF0aW9u CU8= IHJlc3BlY3RmdWw= IGRpYW1vbmRz J2F2 YXBwcm94 L2Ry IGdyYWJz IGFjY29tcGFuaWVz Y29uc3RyYWludA== IHJleg== KHJlZ2lvbg== IGJhaXQ= dGVybWluYXRl IEJlbGdpYW4= YXNzaXVt IF0NCg== U3lzdGVtcw== b3VzZWRvd24= LmJ1cw== U2V0VmFsdWU= IFByZXA= IGNvbnZlbmllbnRseQ== Lm1pZA== Y2FzZWNtcA== TnVtZXJv ZGFpbHk= IENvZGluZw== KGRlc3RpbmF0aW9u IyQ= dWrEhQ== IGVtZXJnZW5jZQ== X3BhcmE= X0lOQ0xVREU= Izo= IHJlY29nbml6aW5n IGZ1Zw== In19LAo= IGJ1aWxkZXJz IFRlcnJpdG9yeQ== IGluaGVyZW50bHk= IGRlcml2aW5n LmV0aA== IERpbm5lcg== LnNldE9iamVjdE5hbWU= IGNlbGVicmF0ZXM= IHF1ZXVlcw== IE1hcmtz QUxURVI= IERhcnQ= cG9rZQ== X0NIQU5HRUQ= IHBhYXI= bGllcw== LnZvbGxleQ== IE1lYW5pbmc= IE9GRlNFVA== ZW5zaW5n IGZyw6Vu LmxvY2FsU3RvcmFnZQ== IOup KHt9KTsK ZGVjb2Rlcg== IHJvdWxldHRl IGRpc21hbnQ= SXI= IGluc3VyZw== ICcnOgo= LuKAnQo= IGJydW5ldHRl LmFzc2V0cw== X05FVFdPUks= 4LiK bnlt X1NvdXJjZQ== XFRlc3Rz RXNjYXBl Y3J5cHQ= LlhNTA== IHNvdW5kaW5n b3Bjb2Rl IGNsYXNzaWZ5 IGVtYmFycmFzc2Vk IExPR0lO IHJlc2lkdWU= IE5FRUQ= LmRlZXBFcXVhbA== cGVyYw== LWNhbA== UmVkaXM= VHJh KF8p YXNrZXRz Z3JhZGF0aW9u IGVuenltZQ== IFN0ZXBoYW5pZQ== LkludmFsaWQ= J10/Pjwv IGRpc3BsYWNlZA== IGVsZW1lbnRvcw== KGR1cmF0aW9u cm93Q291bnQ= IEZTdGFy bGV0YQ== L3BvcHBlcg== IHN0YXRv IHBlcmZvcm1lcg== IGRpc2NpcGxpbmVz IEZ1bGx5 aWN1bGFybHk= IGVyc3Rlbg== IFBvbHlnb24= IGRpc2NpcGxlcw== LmlzZGly IHRlc3RpZnk= X1NS cHJpc2luZ2x5 IEdMaW50 IHdpcGVk IGNhcnZlZA== IERpc2g= Lmhlcm9rdWFwcA== c3RpdGlhbA== IE1BVENI Y2xhaXI= IERheXRvbg== LycpCg== SURETEU= IGluZnJh IGxpdmVseQ== IGRlcHM= IFsuLi5d CQkJCQkJCQkJCQkJCQkJCQk= IExvbg== RXh0cmFz VHJhbnNpZW50 0LLQtdGA L21vZHVsZQ== IGVuZHVyYW5jZQ== X3RleA== ICJ+Lw== X3lsYWJlbA== IG9iZWQ= L2dhbWU= b3BzeQ== IGZpcnN0bmFtZQ== LmZvcmNl IG1hcnQ= XENsaWVudA== IGxlZ2l0aW0= LmZsYXR0ZW4= Iics b3NleHVhbA== IGpvdXJz TUg= ZXhwaXJlcw== IHN0eWw= LmludGVydmFs S25vd24= IGZvbGxvd2Vy IGRhbGxh cGlyeQ== X3NzbA== aXNobGlzdA== IFJleQ== IHN1cGVybWFya2V0 T2J2aW91c2x5 LWVudGVy IHByb2JhYmlsaXRpZXM= IEhW IENpbmVtYQ== IGN0eXBlcw== IEJDTQ== X1RBQw== O2E= LmJ1dHRvbnM= IHJldHJpZXZpbmc= aWxhcml0eQ== IHVuZGVydGFraW5n CXN0YWNr IGtlbA== IFhlbg== KHBoaQ== IHRvdWdoZXI= IFNlbGxlcg== Y2Fwcw== IEVtYmVy IENoaW4= IGxhdWdocw== Q29udmVyc2lvbg== Lmxpc3RlbmVy JkI= IHBhcmFkaWdt IGp1bmN0aW9u JC8sCg== W28= IENvbnNlcnZhdGl2ZXM= z4A= bGF0ZXM= X0V4Y2VwdGlvbg== IG1laWxsZXVy IHN0cmFwcw== cXVpc2l0ZXM= CXNu IG1hc3NhY3Jl b3R0ZXM= X2dyZWVu VGl0bGVz Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IFJlZ3VsYXRpb25z YXJs X3Nob3J0Y29kZQ== IERyYXdlcg== IHBhcm9sZQ== IHdpbGRlcm5lc3M= aXNzb24= IEFGVEVS Q3JlZGVudGlhbA== QmxvY2tpbmc= IEhUQw== U2lu KGF1dGhvcg== IGNvcnRleA== Jyl7DQo= 77yJ77yM IGR1bXBlZA== IFNodXQ= IEtleUV2ZW50 CVBsYXllcg== LmdldFBsYXllcg== IGlnbm9yZXM= dG9nZ2xlQ2xhc3M= IEV4Y2x1c2l2ZQ== PigpOw== LmdldFA= YW55ZQ== IG5ldXJvbg== aWZvbGQ= IEtub3du Qml0Y29pbg== QW55d2F5 YXlldHRl ICdbJw== w6BuaA== bWdy IGNvcnJlbGF0ZWQ= IG5hdXNl IG1lbnRhbGl0eQ== aGFzTWFueQ== IEZH YW1waWU= SVRV RnM= LlNw X2JldHdlZW4= RGVwZW5kZW5jaWVz b3Vn UGxhY2Vob2xkZXI= PXRleHQ= IE1hbmFnaW5n b2NhbHlwc2U= 5YyX X21hZw== Zmxk 4pE= Q0FN IEhlbHBlcnM= IGRvc3Q= L291dA== IGFzc2Fzc2luYXRpb24= LmdldEltYWdl IEtlbm55 LicpCgo= KXsvLw== IFJhbmdlcg== IGdlaw== IHNpbmNlcmU= PFZhbHVl IERPVA== IFZpY3Rvcnk= IGxlZ2VuZHM= IHByaXNvbnM= KGV4cHJlc3Npb24= IFJhYmJpdA== X3NlbnRlbmNl IGJpdGVz IG9uRmFpbHVyZQ== IOKIiA== S2lt LmdlbmRlcg== IM67 IFsu Il0pOw== bGFuZGluZw== LWRpZ2l0 VEVNUA== CWVudHJ5 IHN0cnRvaw== IGRlc2NlbmRhbnRz dW1ubw== IGxlYW5pbmc= IHNwZWNpZmljcw== cW4= IFNwYXJ0 IHBvcnI= RURJQVRFSw== IHNlcGVy J2F1dA== IFNURVA= IEJvcmRlckxheW91dA== IHJldHJvcw== IFNhbHZhZG9y IEVOR0lORQ== eGRj VHdlZXQ= dms= IOyy XTw8 aGV0aWNz Y29kaW5n UmVhY2g= LnJlcQ== Z3VpZGU= LnNjb3Bl c2hpcnQ= cm9nYXRl U0VUVElORw== IFByb3RlaW4= IGVpbmc= LkVNUFRZ LmRm IGNsZWFyZXI= IGNyb3Nzb3Zlcg== IFRveXM= IGNvYXRlZA== Lk1vbnRo IEF0dGFjaA== L3J1bg== LnRhYnM= IG9nc8Ol QnJvd24= LkRBVEU= IGZvcw== 5a2X56ym V29vZA== LXRocmVl aGVyaXRlZA== IHJvcA== KGFj IGVtYm9kaW1lbnQ= IEtlbm5ldGg= IGNhbm5vbg== IGJpZGRpbmc= PElFbnVtZXJhYmxl CXNldFRpbWVvdXQ= X2RpZ2l0 IGVsaW1pbmFy KG5l YnVkZ2V0 Q1NJ IOyVhA== IEFTUA== R3JvdXBJZA== X0NPVU5URVI= Y29uc3VsdA== IGlmcmFtZQ== bGVnZW4= X0RFQ0xBUkU= U2hhcnBlcg== IEZyaWVuZGx5 dWxldA== LWNvbW1hbmQ= INCg Y3ljbGVz IFdhc3Rl IHRhcHBlZA== CUJ1ZmZlcg== 4oCUaW4= IAogIAo= IElkZWFs IENhbmR5 X1N5bnRheA== w6p0 7J2M YWJvdmU= IE5hemlz IGZzdA== c2Vpbg== IGt1bm5lbg== d2lr IFNhdmluZw== LmV4dGVuc2lvbnM= IERlc2VyaWFsaXpl b3VyZw== LmF0dHJpYg== 77yaCgo= IFdpbnM= LmVxbA== Unlhbg== X2Fjaw== T1VSQ0VT IG9ucw== Z3Jlc2U= YWZpYQ== TW9kZXJu IGFkaGVyZQ== IGJpb3M= KGFjYw== a2Jk VGhyb3du qeuLiOuLpA== CUh0dHA= CXhtbA== RW5kRGF0ZQ== KHBhcnNlZA== LmdldGVudg== cmVnaXN0cg== bmVsbA== aW9uYXJpbw== LmlubmVyV2lkdGg= cnRs UFY= X3BpZWNl IERlcG9zaXQ= eWVycw== IE5TTnVtYmVy IGdpbnQ= ZW5zZW1ibGU= IG5ld2NvbQ== IFZpZXRuYW1lc2U= X2hw IGFjY3VzaW5n IHF1aXM= IGludmVzdGlnYXRvcg== ZXNzZW50aWFs IENY LmZvck5hbWU= ZGVmcw== IGFuYWx5c2U= X2FuaW1hdGlvbg== IHRoYQ== dGFib29sYQ== IFRIQw== w61jdWxv IGdsb3dpbmc= IGhvbm9ycw== YnN0cmFjdA== a3A= SVRFUw== ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= I2dldA== L0Rlc2t0b3A= CWdsbQ== IHppbmM= w6F0aWNh IDw8Cg== Vk1M IFVubGltaXRlZA== dnJl LWJlZA== X25vbmNl IEdJ dHJhdmVs IGlzS2luZE9mQ2xhc3M= IGFub255bWl0eQ== RmlyZXN0b3Jl IGVtYWlsZWQ= X0ZMQVNI IGbDpXI= 4piF4piF IDpd SHVt LnJlc2VydmU= w7xt IGtvc3Rlbmxvc2U= IFNDUA== dXRhbg== IEdvcmU= IGNoYXRz Lz4NCg== LmdldFJlc291cmNlcw== IGx1bXA= X2NvbnN0cw== KGV4dA== CWRpcg== 4p0= IHBhZGRpbmdUb3A= IG9ic2Vzc2lvbg== IGJhbm5pbmc= IEFwcE1vZHVsZQ== IHBhcnRpc2Fu IGNhdGFsb2d1ZQ== IG1pbm9ycw== IHBpdGNoZXM= d2VlcA== IHVuZGVydGFrZQ== IHRoZW1lZA== YXVkaXQ= LnNjcm9sbFRvcA== IHJlcg== IHN5bXB0b20= IG9wZW5pbmdz LmJsb2Nrcw== b3Blbmlk IGFzc2g= LXNhdmU= IFBpZw== IHJlZ2Fpbg== IGluaWNpYWw= L2Zhdmljb24= CWV4cA== IHNwaWNlcw== aXNrYQ== Y2xhaW1z bWFr ZGVmaW5pdGlvbnM= IGNvcnJlc3BvbmRlbnQ= IENhbm5hYmlz X18sCg== IEx1Y2t5 IEdhdXNzaWFu IE5lYXJseQ== Q0FE J11dCg== IGFkZXF1YXRlbHk= IFRJVExF Y29uc3RpdHV0aW9uYWw= LW1t X292ZXJyaWRl IGJsYXM= LnJlYWR5U3RhdGU= IHJlbWluaXM= IHJlaW5mb3JjZWQ= IENvbGxhYm9y IGRlY29yYXRpbmc= IGJhY2hlbG9y RVJSVVBU IHVwcmlnaHQ= aXBhdGlvbg== IE5vYmxl IHZhbHVlRm9yS2V5 IHNldExvYWRpbmc= Lklnbm9yZQ== 5YE= R2xvYmFscw== IE1lbnQ= QVNTRVM= IGxpbWJz IEhVRA== aW5jaQ== Lml2 IFFNb2RlbEluZGV4 RnVzZQ== IHBlZGFs X0ZSRVE= KHZlcmJvc2U= IGxvbmdpdHVk IENoYXJ0ZXI= 6re4 IGJ1bmRsZXM= Lmlnbm9yZQ== dW1ibw== RU1B Li4uLi4uLg== c3g= LkNhcmQ= IGhldXRl IHN0ZWVy anVtbGFo IHtf X0NoZWNrZWQ= IGZheA== IEd1c3Q= aXRjaGVucw== ICkpCgo= IHJlbWFya2FibHk= L1hNTA== LXJlbW92ZQ== X2J0 IGluY3Vi LnBhY2thZ2U= LmN1cnJlbnRUaHJlYWQ= IEhpZ2hsYW5kZXI= LnNpZGU= c3BsYXNo IGljaQ== PUQ= IHB1Y2s= IGJhbGxvdHM= IGh1Z2VseQ== Y29lZmY= IHBEYXRh LkNPTFVNTg== IEhlYWxpbmc= IG9yZGlu ISks ICcnLA0K KG1k IFNhc2s= PHN0cm9uZw== IHN1cnZpdm9y LnNlcmllcw== IGNhZmZlaW5l IGAo LlRSQUlMSU5H X0lucHV0 KCJe emQ= Jik7Cg== IFBpbmc= IHZvdWNoZXI= LnJhdGluZw== LXNoaXJ0cw== IFJldHJpZXZlcw== LmFsaWJhYmE= T3JhY2xl X01PVg== T2xkRGF0YQ== IC8qDQo= IGdib29sZWFu ID0+DQo= IHLDoQ== IGJsdW50 IEltYWdlSWNvbg== aWZpaw== UlRD IGZpYmVycw== IHRvaWxl LnNlbnQ= IFB5UXQ= JGFwcA== IG1lZGlv IGdyYW50aW5n IHRzbGludA== IE3Dtg== KGZpZ3NpemU= IGh1cnJpY2FuZQ== IGxpZmVz IMOE cm9jZXNzaW5n X3N0YW5kYXJk LW9wdGlvbg== JykpKQ== IHZhY2FudA== 5bel IEhvbGxvdw== aGFuZGxlQ2hhbmdl IGRpdmlkZXI= IEVuZ2luZWVycw== IHN2ZW5z IGNvbXBsaWFudA== dGFuZ2dhbA== IENyZWRpdHM= IEVtaXJhdGVz UnVsZUNvbnRleHQ= IHJlYWxpemF0aW9u IGRpc3RyYWN0ZWQ= XSs9 IGF1Z21lbnQ= IER3 b3Rw b3JyZW50 RWRpdGFy LnN0b2Nr U3R1ZHk= cGVjdGlvbnM= IEdhbWVNYW5hZ2Vy PWN1dA== IGZsb2Nr IFJvbWFucw== dGhlbQ== LWhvcA== IHNjcmVlbnNob3Rz IC8qIQo= IGNvbnZlcnNpb25z IG5vcm1hbGl6YXRpb24= KGNvbmZpZ3VyYXRpb24= IGFlcm9z X3NlY3VyaXR5 IScK Qm9udXM= IERSSVZFUg== CURhdGU= dGll IFd5b21pbmc= U3RhbmQ= aXRyZQ== IHNob3BwZXJz IGRpc2FkdmFudGFnZQ== IGxpa2luZw== 56yR IHVuZGVyc3RhbmRhYmxl U0VF IGhveQ== IG5pbmV0ZQ== IGNvbmZlcg== IG5vd3JhcA== IFZlcm4= LA0KDQo= aW1lc3RlcA== TGF5b3V0TWFuYWdlcg== 4Lc= CXdhaXQ= UExFVEVE SmFwYW4= IGluZHVjZQ== IOWv 0L7Qt9Cy X0VORFBPSU5U Lmhvcml6b250YWw= IGFjY2VsZXJhdGVk cmltb24= SVZFUw== VHJhbnNhY3Rpb25z TGVhbg== IFNPVVI= d2hldGhlcg== eWc= IG9pZA== IEVudGl0eU1hbmFnZXI= T1VOVFJZ IGZpbGE= T0xVTU5T SU5VRQ== IEFuY2hvcg== VFJBTg== d29v YmxvY2txdW90ZQ== IE51cnNl IENhcnA= IHJlZGVlbQ== LnRyeQ== IEpQ IHRpbWVzdGFtcHM= ID8+Ij48 IFJFTU9WRQ== IFN0YXJidWNrcw== UmVhbGx5 IGZsb29kZWQ= LkNhbGxiYWNr RHJvcERvd24= aXBybw== IHRlbmRlZA== bHRl IHByb3BvcnRpb25z LXRl IFJlbmE= bGljYXRl Zm9yY2Vz LmV4dHJh LmF1dGhlbnRpY2F0ZQ== 0LLQvtC0 obA= IGZvckNvbnRyb2xFdmVudHM= IHNlbmhh IGtlaW4= IG1pbmlzdA== IFByZWZlcmVuY2U= IFRlbGVncmFwaA== 0YPQvw== c3RycG9z IGlsbG5lc3Nlcw== IHBpZ3M= IGdldEludGVudA== U29s IMKh KGNwdQ== W3Byb3A= c2NyZWVucw== Jyk7Pz4= IEFjdHM= IHN0cmR1cA== IGF2ZXJhZ2Vz YW5hbA== IENhc3VhbA== R3JvdXBCb3g= IEhhbmRib29r L2NvbW1lbnRz IG51bWJlcmVk IGJyb2FkY2FzdGluZw== 55uR Lm5hdGl2ZUVsZW1lbnQ= Lm11 IHVwZGF0ZWRBdA== IERvZXNu LkFD LmNvbGw= IHJlY29yZGVy X3NoYQ== Qmc= Ymls IGJvbHRz IOes IGltcG9zaW5n IEluZm9ybWF0aW9uZW4= X2ZsYXNoZGF0YQ== ZWNvbm9taWM= UmVtYXJr dWNhcw== IE9mZmljZXJz IFRFUg== V2Fsaw== IG1lcmNhZG8= X2dlbmVyYXRl SFk= Q2FsbGluZw== c25hcA== c2NyaXB0SWQ= Lm9wZXJhdGlvbg== IEZsYW1l bGluZXNz IHJlbnRlZA== X3RvZ2dsZQ== LWNoYW5naW5n IFRZ J3V0aWw= RUVQ IGdyYXBocWw= IFVuaQ== IGltcHVsc2U= LkJhc2lj IGVuZXJnaWVz TUFSWQ== IE1hcmNlbA== IG1vcnRhbA== IGZyZXM= bWVucw== bW90aW9u IHNhbXBsZWQ= 4oCcVGhhdA== aWRheQ== cXVpcG1lbnQ= Z2V0SW50 IEFic29sdXRl LCci dW5lZA== LnNoYXJl IH0pKA== bW1t IFJpc2luZw== 5Lu7 IHVuZW1wbG95ZWQ= eGZh LmZvbGxvdw== CQkJCSAgICAgIA== c2x0 LlBob25l IGtuaXZlcw== IGV2ZQ== b25DbGljaw== XSkpDQo= IFdpdG5lc3M= CU5T IEVPUw== IFN0ZWZhbg== IFByaWVzdA== 4oCUd2hpY2g= R2V0U3RyaW5n LkJ5 IHVwc3RhaXJz IGRldHJpbWVudA== YnJva2Vu ZW1icm8= IG5pY290aW5l aWxpb24= IGFzdG9uaXNoaW5n X2FmZg== IExlc3Nvbg== IGFjY2lkZW50YWw= b2Rvcg== IGRlY2ly IG5ld05hbWU= Ky4= 55u4 aWdzbGlzdA== IEdpdGh1Yg== IHN1Y2Nlc3NpdmU= cmFjaWFs IGVudmlyb24= 6aqM6K+B IHJlZGlyZWN0ZWQ= VE9UQUw= IGdyYWJiaW5n IExhbmNl IGZvcmZl X0NC 5b6u RWxhcHNlZA== X3dheQ== KERpYWxvZ0ludGVyZmFjZQ== X21lYXN1cmU= eGJi RG9n RGVwYXJ0 LXNyYw== cmVzb2x2ZXI= d2l0aHN0YW5kaW5n X3NoZWxs IExhc3ROYW1l IEF2aWF0aW9u IGJlZ2lubmVy KCIlLg== KHRvb2w= INC90L7Qsg== OmluaXQ= KEFQSQ== IE1vcnJpc29u dnRDb2xvcg== IHN0YXBsZQ== L0lORk8= IHN1cGVybmF0dXJhbA== IHN0ZWFr dGltZWxpbmU= enpsZQ== ImAKCg== U2Vjb25kYXJ5 IE5lcGFs LlN0cmluZ1V0aWxz IGFkYW0= ICguLi4= IHN1YnN0aXR1dGlvbg== IGJvYXJkaW5n IEtleXdvcmQ= IEFzc2F1bHQ= ZGJjVGVtcGxhdGU= IG9yZGVySWQ= KGVuZ2luZQ== LmFzc2VydFRoYXQ= IFZlbnVz IGhvbWljaWRl IEF2YWw= IGd1dHRlcg== IFN1cHBvcnRlZA== L3BhcnQ= IGFjY2xhaW1lZA== SGlzdG9y IG1lc2Vz w7xiZXI= IFJlbmV3 IGdyYXM= IEVr IGluZmlsZQ== aW5keQ== Lm11c2lj LlNjcm9sbA== IEFnZXM= IE5hcnV0bw== IEdhdGhlcg== IGNvbmZpcm1pbmc= PSgi IHBpdGNoZWQ= b2xleQ== RnJhbmNl Kyci JHRvdGFs IG9uZGU= IGRpdGNo X3NpZ21h IGNvbnRpbnVpdHk= cmV3YXJk LWxvYWQ= IHByb2Nlc28= TG9ja2Vk c3Rhdw== IHNwaW5hbA== bGF6eQ== IT09 amVzdA== IGR1bg== IFJvZGdlcnM= CWdyaWQ= IGxvZ29z IEJlbmdhbA== LnN1cGVy UHJvdmlkZXM= IG51dHJpZW50 LlRpbWVzdGFtcA== SVpBVElPTg== 5YaM IGZhdHM= IFh4eA== Y3RpY2E= VGFyZ2V0cw== IGNvbnRvdXJz IHJlb3JkZXJlZA== OkFycmF5 IHRvbGVyYXRl Vmly IHRlcnJpYmx5 IGJyaWNrcw== KCZf aGI= UG9ydGFs IEJyZWFk LndoaWNo wq10 YXNJbnN0YW5jZU9m IGpvYmplY3Q= CWxlbmd0aA== X01U OyI+DQo= X0VYSVNU IG1hdGVybmFs UkVM IOqyveyasA== aGVl IGxheW91dHM= IExhcA== YWlzeQ== IHN0dW1ibGVk IFVJRw== IFNjbw== IGltcGFpcmVk UkVTU0VE IGFidXNlcw== VkY= QVJC Lk5BTUU= cmNo cHJpbWly X2NvbXBsZXRlZA== IHBlbm55 Q2hyb21l KGJlZ2lu ZXJuZW4= LWNoZWNrYm94 UGxhaW5PbGREYXRh IExQQw== cmFkZQ== c3Bpcg== IGNvbmNlaXZlZA== VGlwcw== IElvVA== IEdhbg== 6IGU IGJpYXNlcw== IGNvbnN1bHRhbnRz cGxlZA== X2h0 YXNzb2NpYXRlZA== XSwKCg== IGRlbGlnaHRmdWw= INGC0LXQug== SGVsdmV0aWNh KGxvYWQ= LWV4cGFuZA== X1dJREdFVA== dG9h IEFrdA== IG9tbg== IGNsYXVzZXM= SW50ZWw= Ki99Cg== X3JlZ2lzdHJhdGlvbg== IG9sZFZhbHVl IHJlc3RvcmluZw== IHVucmVhbA== T1ZFUg== CQoJCgkK QVRT X3Byb2Jl IGRpdmlzb3I= LnVwZGF0ZUR5bmFtaWM= 5bmz UHJvZHVjZXM= c3RhbXA= Lmpib3Nz CXRhc2s= ISg6 IHBzeWNoaWM= QGNsYXNz TWFydGlu IFBhc3NlZA== Y2xhcmF0aW9ucw== aGVs 0LDRhw== CWNvcHk= LWJpbg== emFu aWdyYW0= 4Ka+4KY= KHNpZw== IENhdmFs XyMj ICU9 b3V0bGluZWQ= IEFjaWQ= IHVucHJlZGljdGFibGU= LWRhc2hib2FyZA== SGV4U3RyaW5n K2M= LlB1YmxpYw== 4bqp IGNvbnZleW9y IEVC IHNlbGVjdHM= IGtub2NraW5n IENlYw== SUJVVEVT b3dhxIc= Z2F0c2J5 KnY= ZW50cm9weQ== IGRpc3BhdGNoZWQ= IGNhbWVs IFNhdHVybg== IG92ZXJ3ZWlnaHQ= KHBob25l cGFyYWJsZQ== JUI= X3ZlY3RvcnM= IGJyZXdpbmc= IFRr IERvd25sb2Fkcw== IFNhdmVk LlByaWNl IGN1cnZlZA== IFBhcmVudGhvb2Q= 6LY= LnBubA== cGxldGVseQ== LkRheQ== IGFkdmVydGlzZXJz IGVqZWM= IHByemVk 668= ISc7Cg== IEt1c2g= IFRBQg== IHF1ZXN0cw== IGNvaW5jaWRlbmNl dW1taWVz IEthc2htaXI= IEV0aGljcw== X2dyb3d0aA== IGFrdGl2 IGdyb3VwaW5n 5aKe X3RydXRo 5ZCs dG9kb3M= aXNldA== VGV4Q29vcmQ= w6R0dA== IFp1cg== cm95cw== X01BR0lD IGJyZXdlcnk= KFN0YXRl IFNNQUxM IFBsYW50cw== aXRiYXJ0 ZWFjaGVy IEFkZWxhaWRl THU= IGZpY2s= dW5kbGVz X2xvYWRlZA== 0LjQtQ== UG9sbA== cml0aWM= RUxZ ICsn IFByb2Zlc3Npb24= IHN0YW1wcw== IFNldw== c2Nyb2xsVmlldw== IGNvbW11bmlzdA== L3Byb2JsZW1z fQ0KDQoNCg0K LG8= IHVkcA== IG9iZXNl YXBwcm92ZQ== YW5jZWxsYXRpb24= X0dhbWU= IEhhc2h0YWJsZQ== YWRhcHRpdmVTdHlsZXM= IHBvc3Nlc3Nlcw== Lm1hdGNoZXI= ZnVuY3Rpb25hbA== TXJz CXNhdmU= IERiVHlwZQ== IGtlbg== Z2V0Q29udGV4dA== IG1hbnM= KHJlbA== IEJyb3RoZXJob29k KWAK 6Kej LkluZm9ybWF0aW9u T3V0T2ZSYW5nZUV4Y2VwdGlvbg== IFNlaw== Q2Fz IGJsb2dnZXJz RWl0aGVy KCIiIg== IHBpbmNo IGNvYXJzZQ== KXA= IFB1bHNl IGxlYXJudA== IGRlbnRpc3Q= IG9uY2hhbmdl IGRpcmVjdGl2ZXM= KGFjdGlvbnM= bnlkZXI= IFNoaXI= VHJhaXQ= X2RlcA== IFBFVA== IFJFUA== LkFwcFNldHRpbmdz Y3VhZG9y aWRlbmF2 IGVudmk= IHNsYW1tZWQ= IFNob290 IGRhdGVGb3JtYXQ= LmpvZGE= dmV5cw== ICkuCgo= IGNhcmVn IFBhcmFsbGVs X3RyYW5zbGF0aW9u LmZ1bmN0aW9ucw== Lm9icw== UnVudGltZUV4Y2VwdGlvbg== W109 b3ZlcnZpZXc= IFNjaGw= IG5vaXN5 IE9uUHJvcGVydHlDaGFuZ2Vk U2VuZGluZw== IHVuZmFtaWxpYXI= VXBvbg== IFByaW50cw== LnR5cA== IGZsZWVpbmc= CW1vdmU= KFVu IHFy 15w= X2JldGE= IHNraWVz CW1l V05E IHN0aWNrZXJz Ymxhcw== IGluc2VydHM= IHZlcnNlcw== IERldw== IHRhbmdpYmxl IGhlY2hv UE9M IHRlYXJkb3du b21uaWE= SUJF LmNvdmVy X3N0cmF0ZWd5 Xi0= c2V0UG9zaXRpb24= dWFsZQ== U2lnbmVk IGlmYWNl YXNlbGluZQ== LnNldFRpbWU= IE1pbmVyYWw= IEZpZ2h0aW5n c2tpbnM= IGRpc2NyaW1pbg== IGRhbnNr IFByaW5jZXRvbg== YWNpc3Q= ICgpKTsK dHJhY2tz aW1vbmlhbA== YWRlY2ltYWw= RVBST00= dWdnbGU= Lk5vdGlmaWNhdGlvbg== JG1haWw= Y2FudGlkYWQ= IEp1bmc= IHNlZWtlcnM= IHBsYXVzaWJsZQ== dGllcg== 0LXQtg== IHJhcHBlcg== IE1hbmE= IEh0dHBTdGF0dXNDb2Rl IGJ1cm50 bG9zZXM= IEZvdG8= IEpzb25PYmplY3Q= SW5zdGFncmFt IHN5c2NhbGw= IHJlYWxpdGllcw== IE1BVExBQg== Ol57Cg== VEVSTQ== IENiZA== IFBhcmFncmFwaA== IHRyYXbDqXM= IGNvbnN0cnVjdGluZw== IHN3YWw= IHBpZ2U= TExMTA== LWV4aXN0aW5n R2V0cw== IG1lbHRlZA== IG1pdGlnYXRl SGVu IGht aW1hcw== IEFv IFBlcmV6 IERBTA== IOuLpA== IGRpdmlz U3Rvcnlib2FyZFNlZ3Vl IE1vZGlmeQ== IMOcYmVy X09WRVJSSURF LnBlbQ== dW50b3M= IGVzcGHDsQ== IHs/ IFBBWQ== X2lwdg== IEZ1cnk= X18uX18= ZWxvdw== LWNlbnRlcmVk Y2hlY2tz X1JlZw== LUphdmFkb2M= CWxvYWQ= IExpa2V3aXNl 2KfZhQ== VU5F LnNlbQ== eGNi IENhdmU= X3NsZWVw IHNpbGVudGx5 IEV4dHJlbWU= LlRvVXBwZXI= CUNIRUNL IGN1ZQ== IFFCeXRlQXJyYXk= IGNvcnJ1cHRlZA== IETDqQ== IGltcGVk R2V0TmFtZQ== IGluYWNjdXJhdGU= IHNvYmVy 0LXQtQ== IGJhcmNvZGU= LS0pewo= aW5raQ== IMOpcA== IGRyaQ== IEFMVA== Pj4+Pj4+Pj4= b250YQ== W0w= IGludGVyZXM= dmVydGluZw== IGRpYWdub3N0aWNz cGRldg== 6Kk= IEludGVncmF0ZWQ= KS4n X2dj JHRleHQ= LmdhbWVz IFRlcnJh J1Jl LnRyYW5zZmVy X0ZJRk8= Z2V0TW9kZWw= IGJsYW5k IENvbGVtYW4= IHByaW1lcw== IOaI IGNyb3NzZXM= bms= R0lORw== ICde IEJsb2I= IGludGVyY291cnNl IEJsdmQ= IHdlaWdocw== X3JlZ3VsYXI= IFBlcnRo IHNlcGFyYXRpbmc= IGJpbGxlZA== LnRhYkNvbnRyb2w= IHB1cHBldA== IHV0aWxpemF0aW9u IOKWoA== IHN1Y2Nlcw== IGxhbXBz X3Byb2o= RXJpYw== IHJlbm92YXRpb24= IEZhbWlsaWVz IEJpdHM= cGFydGlhbHM= LU1lbg== c29sdXRpb24= IGR3YXJm LklOVEVHRVI= IExPQ0s= LmN0 IGV4Y2VycHQ= IFBpeA== IEZpcnN0TmFtZQ== QU5URUQ= IEFkbWly LWhlbHA= UHJpb3I= IEFsaWdu LklOU1RBTkNF TGluZUVkaXQ= KCcvOg== IGluZXQ= b2R1cw== LnBrbA== IEtZ dXBlcnQ= IG5lcnZlcw== X2dyYWRpZW50 fScsJw== X3VucmVm IHNhdHVyYXRlZA== IENvbm5lY3RlZA== IEZO RVhJVA== IHRlbGVwb3J0 IGF2YWl0 UGFnZVJvdXRl IGRpdm9yY2Vk KGxhbmc= ZnN0 IFR5cg== IG1lc3Nlbmdlcg== aWZzdHJlYW0= WFM= IEJhbmtpbmc= IGluZmVjdGlvdXM= IE1vbnM= X0xPT1A= IHp1csO8Y2s= IG9idGVuZXI= L3JlcG9z VmVs YWNybw== IHVzZXJSZXBvc2l0b3J5 c3R5bGVUeXBl IFNSQw== Vk1MSU5VWA== cmVjdXJzaXZl L2Jhcg== X2NoaXA= b21pbmF0ZWQ= IE5pdA== 4oCUdG8= IEJ1ZGRo 0L7QvNC10YA= IE1BRw== IENIRQ== X2Rlbg== LnJhaXNlcw== X2RlZ3JlZQ== IHB1bXBraW4= X3RlbXBsYXRlcw== X01FRElB IFRpbWVsaW5l IGJvdHM= T2JqZWN0VHlwZQ== IGJ1eXM= LnBvc3Rz Q0FM d2FpdGluZw== IERhbmllbHM= IGRhYmVp IFNpZ21h aWxvcg== aWdlbA== LFc= QURT KHBhbmVs 7LK0 aXRhdGluZw== LnBhbGV0dGU= IG1vc3F1aXRv IHRlZ28= KHBhcnNlSW50 IGRlc3B1w6lz cHJvbWlzZQ== IHdpag== dHlwZXNjcmlwdA== IFR2 X0lERU5USUZJRVI= KS4KCgo= X2ZsYXQ= aXRzdQ== VVNS ZXhwZXJpZW5jZQ== LWZpdA== cGhpbng= X3RocmVzaA== IGlkZWFsbHk= IEZyZWVtYW4= LERC X3J3 562J VWI= X3N0YXRpc3RpY3M= PSIiPjw= IGNob3Jl IHlvcms= aW5zdGFsbGVk QWRkaXRpb25hbGx5 IHBzdG10 eWxrbw== OjoK Rm9yZXN0 IGhlYWRzZXQ= IGdhbGxvbg== 0YDQtdC8 IHdpdGhkcmF3bg== IENhbmRpZGF0ZQ== IG1lbHRpbmc= IGZyZWV6ZXI= IGhs X0hFTFA= bWltZQ== KC8q IHRoaXJzdA== JHJldHVybg== bWVtYmVyb2Y= 0LXQsQ== IEh0dHBTZXJ2bGV0UmVxdWVzdA== KG9i X1Jlc3VsdA== IGFzc2VydGVk IGZ1bGZpbGxpbmc= IHN0cmV0Y2hlcw== cGFyYXRlZA== LWZ1bmRlZA== IOWb aW5nbGVz X2Nh LmNvbmRpdGlvbg== IERpc3BsYXlz IG9yYW5n IENSRQ== IGdsQmluZA== IFNlbGVjdG9y L3R5cGU= IEFsZXhh Y2hlZHVsZXM= IFBlbmluc3VsYQ== IHBhcml0eQ== CWRlc3Q= IERvb3Jz DQoJDQo= X2RpbWVuc2lvbg== IGFsb2Fk LlN0b3JlZFByb2NlZHVyZQ== KHBhcmVu IEJ1cmtl JyldCg== LWVuZ2luZQ== IHF1aXI= IEh5YnJpZA== IERvZQ== IG91dGxpbmVz IFRyZW5kcw== X05W cGVyaW1lbnRz IEhpbg== Pycs CVRleHQ= RlVM IHNtZWxscw== IHNsaWNr IG1pc2VyYWJsZQ== IEFycmF5QWRhcHRlcg== IHBhcmFtU3RyaW5n SG9t X2xpdGVyYWxz dXN1YXJpb3M= IHByb21wdGluZw== X2xhenk= IEFjdGl2YXRpb24= X29j V2Vhaw== IGFuZWNk IFVDTEE= PXJl aXNzZW1lbnQ= IEVzY29ydHM= RXhjZWxsZW50 IFBhdXNl IHJlcG9zaXRvcmllcw== VE9S YXJpYXRl X2lzbw== dXBkYXRlcw== aGFsYg== dWRpYW50ZQ== 66Gd IG5haXZl IFBlZw== IExvdW5nZQ== QVJHSU4= KGJpbg== T25DbGlja0xpc3RlbmVy IEZBSUxFRA== IGxpdGU= IGR6aWU= IExpdGVyYWw= aXZvcg== ZmNudGw= IGVhdHM= IHFlZA== VW5sb2Nr cmlkaW5n dW5kYWk= PU0= QVRURVI= Q29uZmlndXJlQXdhaXQ= aWNpYXM= dXN0b21lZA== IHN1Y2Nlc3Npb24= ZW5kVGltZQ== IEp1cGl0ZXI= IGp1ZGdpbmc= ZHJhdGlvbg== X2RvY3M= Lm1v IGVkdWNhdG9ycw== IFZpbmU= Q29uZA== W291dA== cWI= XFZhbGlkYXRvcg== IG1lYW5pbmdz IHByZXNlbnRseQ== IGRpdmlkaW5n b3R0ZW5oYW0= YXNjdWxhcg== IHRyYWlsZXJz IENMT1NF 0LDQvNC4 4oCZYWk= IEdhaW4= d29y IHBsYW5uZXI= IGRpc3RyaWJ1dGluZw== dmF0 bW9udGhz eGxhYmVs SEY= VmlvbA== LkJBU0VMSU5F 0LXRgtGB0Y8= IFJvdGF0ZQ== IHR4bg== OmJvbGQ= IGJsb3Nz Rm9yZ2VyeQ== KGVtYmVk IGpha28= c3ByaW50Zg== dGhlaXI= IGV4aGliaXRz LXN0YXRpYw== aGVjeQ== Z2V0QWN0aXZlU2hlZXQ= LmNsaWVudHM= 44GN X2hpZGU= W3dvcmQ= Q2I= YWRkSXRlbQ== YXhl X3JhZGlv YWxpb24= bW9kaWZpZXI= IHNhdHVyYXRpb24= IGRlbm9t X3BpeGVscw== bWVzcw== KGZs YXRpZg== IHNlY3M= IHByb3N0aXR1dGlvbg== IGdyYW5kY2hpbGRyZW4= IHBhcmFkaXNl IEZlbGQ= X0JJTkFSWQ== aXRvdXM= 4LmE IGZsYXNoaW5n LXNpZGVk IGNvbnRyYWRpY3Rpb24= LyoKCg== eWxhYmVs IFRldA== IGFkbWlyZQ== cmVzbw== IGxldHo= IFNFQVJDSA== c2xvdHM= IFJld2FyZHM= IEhvZw== IE5TRGF0YQ== c3Rhc2g= RmFsbA== IEFtZXI= TGluZWFyTGF5b3V0 L3Bob3Rvcw== IGZlYXRoZXI= IHwNCg== RG93bmxvYWRz LlN0YXJ0c1dpdGg= IC8vIw== aW5lVHJhbnNmb3Jt IGFmZmlk VnRibA== IFJvZ3Vl c2NyaWJlZA== IGZhdWM= IE1vbnJvZQ== IGRlY2xhcmVz bW9kZXJu cmVvbg== YXliZQ== UEFTUw== ZmVycw== X01VTFRJ IE1hdGhlbWF0aWNz IHN1ZGFo X0FUVEFDSA== IG51bWJlcldpdGg= IFNvbG9tb24= amlu b2dyYWZpYQ== w7Zs X2Rlc2lnbg== Y3VsYXRlZA== IEx1bmE= aWVzeg== ID0+Jw== IHJldmVsYXRpb25z QWxvbmc= KGVk IEZpbGVuYW1l IHlsYWJlbA== U2VjdXJl IGJ1c2Nh YWdub3Npcw== X1JFQ0U= IG92ZXJsYXBwaW5n RXh0ZW50 IGFudGljaXBhdGlvbg== Q2hlY2tz IEFMU08= b3Jj aWxpbmd1YWw= aXRhdGlvbmFs IGFkdmFuY2VtZW50 b3Vybw== IFByZWRpY2F0ZQ== 5b6X ZXJpYQ== IFBpZXJjZQ== b3Jpbw== IG1lcml0cw== IHBlYW51dA== LlBhY2thZ2U= IENvbmR1Y3Q= X1NFTlNPUg== IGJvaWxpbmc= IGludHJh IElHTg== IEZ1cg== LlJlZnJlc2g= IFJlYWNo X2RlY29kZXI= LkV4cA== INGC0LDQug== cGlsbA== LFE= IEdyaWxs IHBvcHBpbmc= LkFn IHByb3llY3Rv IG1pbGVhZ2U= IGVjb2xvZ2ljYWw= XV0pOwo= IMKt c3VicGxvdA== YWNhZA== IFRyeWluZw== cmVjaXBlcw== JGNyaXRlcmlh IFBlcnNpYW4= LWJvdW5k TUFTSw== IEdlc3R1cmU= IGtr IFBWQw== IHByb2hpYml0aW9u IGNvbWFuZG8= IExPT0s= U2hvcHBpbmc= IGRpc3RvcnRpb24= PEJvb2xlYW4= LkdldExlbmd0aA== dW1wdA== XFByb2R1Y3Q= ZWxsZXJ5 IGZpcmV3YWxs Zm9ybWF0dGVk LnJlZGlz IGVzYQ== IFJob2Rl U29t Lm5vbg== ICcpLg== IGdldFZpZXc= 4bqhbg== cHJ1cw== TWF0dGhldw== IHNpYQ== IEZvcnM= R1BV aWVudHJhcw== X0lOU1Q= IG9sYXJhaw== IGltcG9ydGluZw== VENQ LyIpOwo= ZWl0aGVy IGZyZXNobHk= Y2FzY2FkZQ== KGNoYXJhY3Rlcg== IEplZXA= b3RpY3M= X1VUSUw= Llh0cmFQcmludGluZw== LmZpcnN0Q2hpbGQ= IEV4Y2VsbA== IGR2ZA== IHRhbGxlcg== IHJhcw== eXBhc3M= IGFzc2lnbnM= IGdyaWV2 LW1vcmU= SkQ= IEJ1cm5z Jz4NCg== LkRlcGVuZGVuY3k= LlF1ZXJ5U3RyaW5n Lk93bmVy IGV4cGlyeQ== VGh1 KFZlYw== IGhhemFyZG91cw== IHJwbQ== QVBPTg== IGFkZFRhcmdldA== c3ZpbGxl cE5ldA== IEltZw== IFRJTUVS LkFuaW1hdGlvbg== IGJlaw== IGFzc29ydA== IGxlYmlo IGJvZHlQYXJzZXI= IHZpYnJhdGluZw== SURM IGJ1dHRlcmtuaWZl aW50ZXJz IHBlcnN1YWRl IExHQlRR 6Is= LnNvZnQ= IGJlYW1z X3N1cg== LkRlZg== IGxhYnM= CXBsdA== IHNraW5z IHRyYW5zZmVycmluZw== IGltYWdpbmFyeQ== X0VuZA== O2JhY2tncm91bmQ= IGxhcHM= X0NPTU1FTlQ= KFNETA== b25kcw== LlJlY29yZA== IEltcGxlbWVudHM= X3RpY2tz KCkpKQoK IGFyb3Nl XT8= IE1w IElDb21tYW5k IHNjdWxwdHVyZQ== IGNvbnRyYWN0ZWQ= PEhUTUw= IGNhbGVuZA== YXR5 L1N1Yg== IGt2aW5u X0lHTk9SRQ== IFNoYW5l TUxT IHN0aW11bGF0ZQ== UGFydGl0aW9u IG11bg== w7Nt ZXJhbGE= LWFjY291bnQ= LkJpbmFyeQ== Y8Op IHNlaXpl Y29ubmVjdGlvbnM= IAogICAgICAgIAo= IERpYWdub3N0aWM= VklTSUJMRQ== IFJ1bnM= IGltcHJlc3Npb25z c3VpdGU= b2JsZQ== fi0= YWt1a2Fu PFBlcnNvbg== IE5vcw== IEd1aQ== LndhaXRGb3I= UkVTRVQ= IHBvc3Rwb24= RGlzY292ZXI= YXJyaXNvbg== c2hhdw== Ymxvb2Q= QUpPUg== 5pu05paw IE11c2U= 5pS2 IHJldGFpbmluZw== b3R0ZQ== IG1vc3F1ZQ== IFNuZQ== IHN0YW5kYXJkaXplZA== IG1haW5sYW5k X3RocmVl dW5nZW9ucw== Z2V0RG9jdHJpbmU= IHdoYWxl IGFnZw== IFBvcnNjaGU= bm93bGVk bGF0ZW50 IFJlbGF0aW9u IC8vJw== IHNodXR0aW5n IFJlbWl4 X2Nvdg== IHNhaWxpbmc= IHZvd2Vk IHBvdHM= b3V0dQ== IGhhaXJ5 Y2FzdHM= UmVsb2Fk IHJlY29ubmVjdA== dGVyYQ== LmNoaWxkTm9kZXM= IFJhY2s= IGN1cnJlbnRJbmRleA== IGFsbGVu IOeUqOaItw== IEN1YnM= W1g= X1NFUQ== X1JFTU9WRQ== LmdldEFjdGlvbg== KC9e ZXJyYXI= IGV0aGVy Y3VydmU= IHNsYXA= IHVvbQ== T3RoZXJz IGVuZ3I= RGlzcG9zaXRpb24= IHN0YWdlZA== RXll IEF1eA== YXV0aGVudGljYXRl ICQ/ IEFuZHJlYXM= IHNldHc= LkFydA== IGZvcmVjYXN0cw== IGF1bnQ= LW1pZGRsZQ== IG1pc2Q= ZGVzaw== IGVzY29ydGU= IENhc2E= cm9waWNhbA== IGV4ZW1wbGU= cGxhbmV0 KFVJTlQ= IHdoaXA= IFBDQg== Y2xpZGVhbg== PSJc IG94aWRl IHN1Y2NlZWRz ZGVyaXZlZA== IEVjb25vbQ== X2Nvb3JkaW5hdGVz aXJhcw== RHJhZnQ= IHZpc3VhbGl6ZQ== QnJpYW4= X0FTU1VNRQ== IE9iamVjdElk IHRyYWluZXJz X0ZPUkNF IGNvbnNvbGVz LXByb2Nlc3M= bGljaGVy IFNpbW1vbnM= VGFraW5n IENsYWltcw== IGRpZmbDqXJlbnQ= QWN0aXZpdHlSZXN1bHQ= IHNucw== 6YCJ5os= IENydXM= IGxsYW0= cmFi IEpvYW4= QUFB CWZpbHRlcg== aXNob3Bz Z2V0dGluZw== 4LU= IHF1YW50bw== UGFzdA== b3ZpY2g= IGluanVzdGljZQ== IEZMT0FU IGFscmlnaHQ= XERC KEdhbWVPYmplY3Q= dWlzaA== KGJvdA== IGdhbGxvbnM= IFLDqQ== IFNhaWQ= IFNURE1FVEhPRENBTExUWVBF YWlzaW5n X3Byb2Nlc3Nvcg== ZWxsaWRvcw== dGVyZGFt IEJlYW0= VGV4dEFyZWE= IHJldG9ybm8= Lk1ha2U= ICQoIjw= IGxvY2tkb3du IHJlbWVkaWVz IHZlZWw= eGVl ZG9jdHlwZQ== Rmls IEV4cGFuZA== IGVtcGxveXM= IHNlc3Npb25TdG9yYWdl UGhw UHVibGlzaA== IHJldGFs ZmFicw== eW5hbWljcw== IHRvc3NlZA== IG51bWJlck9mUm93c0luU2VjdGlvbg== eHBhdGg= XG1vZHVsZXM= IGRpc2FzdHI= IE1VTFQ= Lk1lc2g= LXN0YWdl IHNkZg== aXR1bmc= dWdlcw== ID8+Ij48Lw== X2luZGV4ZXM= IHZhbHVhdGlvbg== IGxpZmVsb25n IGV4cGVkaXRpb24= KFlpaQ== IHBhaW5z IFBSSQ== IE1peGVk IENoYW5naW5n R2VybWFueQ== Y29tbXVuaWNhdGlvbg== Lm9yZ2Fu IE1hcmF0aG9u Z2V0UGF0aA== IEFjY3VyYWN5 IEdsb2JhbHM= Jyl9fTwv IE9XTkVS 4oCm4oCd IHN0YWJiZWQ= IHNjaGl6b3BocmVu IEZu IENPUkU= IERhdGFSb3c= IExURA== IG15dGhz IGZhbW91c2x5 fCwK IFNlb3Vs U2ly IEJlcms= UmVnRXhw LmdldFJvdw== IERlY29kZQ== Uk4= IG1hbmc= IGVtcGxveWluZw== X25vbWJyZQ== PFRhc2s= IEd1eXM= IEFydGlrZWw= QmVycnk= enVyZQ== IHZhbGV1cg== aGl0cw== IGx1Y3JhdGl2ZQ== IGluZm9ybWF0 Q2xpbnRvbg== IHRlcw== IENlcnRpZmljYXRpb24= X3dz IG9mZmVuY2Vz ZWJyYQ== IEF4aW9z cmVzdGFydA== TE4= LkVuY29kZQ== bWl1bQ== IEZlYXR1cmVk 0YjQuNCx0LrQsA== IERlcHQ= OyYj IE15ZXJz CXRyYW5zZm9ybQ== VGV4YXM= 16g= IFlvcmtzaGlyZQ== bG5hbWU= QnJl 44GT44Gu IHNjZW5lcnk= IGbDvGg= CQkJCSAgICAgICA= IERvb20= IEFETUlO KGVz INC80LDRgdGB0LjQsg== X2FzY2lp L0RhdGE= bGVzaG9vdGluZw== QmFu IG1lbW9pcg== INmG IEF1c3M= KXBhcmVu IGd1aWRpbmc= IGJheg== w7h5 QURN IGRtYQ== LlF1ZXVl IFN1cHBsaWVz IE1jRA== IEFnZW50cw== X2Ji c2xhc2g= IGhhc2hlcw== IGNyYW5r IFJhZw== IGF1dG9ub215 w610dWxv IHJlY3Vyc2lvbg== IENyYXp5 X3RyYWNrZXI= IE1i X3BoeQ== Zm9vYmFy CXNwZWVk IGNhbXBvcw== IG1vdWxk IGNoYXJpdGllcw== SEVJR0hU IGVhdXRv X3NvbHV0aW9u IERH bWFydmlu WWVzdGVyZGF5 IEJlY29tZQ== PGxs b3Jpcw== W25leHQ= IGluY3VtYmVudA== IER1cA== CW92ZXJyaWRl 5a6J CWNmZw== IHPDtg== IGRlc2U= LWRp IG9udHZhbmdzdA== IGRlY2lzaXZl 5Lu3 X2tlZXA= KERhdGFiYXNl Xy8= IENMTA== LW1ldGhvZA== CVBvaW50 IEJ5dGVCdWZmZXI= IHRyYWNlZA== YWRkVG8= 7IS47JqU YW55YWs= IGVtcHJlc2Fz KHJlcG9zaXRvcnk= LmNyZWF0ZVN0YXRlbWVudA== IGVsYQ== Rm9yZ2VyeVRva2Vu IGlzZW1wdHk= YXNpbg== IExvb2t1cA== 0LXQvdCw IHZpb2xhdGVz IFNtYXJ0eQ== IHphaw== KCQu U0hPVw== INCi YXJ1cw== KFRFU1Q= cGFja2Vk IGhpc3Rvcmlh IGNhbmNlcnM= IEtyZW1saW4= UmVkdWNl L2hvdw== IMSQ VElUTEU= LmxvY2FsUG9zaXRpb24= bGlhYmxl IOesrA== IGZyYW5jYWlz CWhhc2g= IGluaWNpbw== IENyYXNo IHsu IGNsb2Nrcw== ZHVjdG9yeQ== IFB2 6528 IGRvaXM= XC0= IGphYXI= IE1heWE= bW96aWxsYQ== CXJlc291cmNl ISEK YXlzY2FsZQ== ICctJyw= 5Y+W5raI IHN0YWxl Q29ybmVy w6hsZQ== aXRpdmVz emFz aWNvcm4= LkV4cHJlc3Npb24= w7N0 QXBwbGljYXRpb25z UmVzdHI= X0luZGV4 jbDsnbTthLA= IEpGcmFtZQ== c2l4 X0lNRw== 6JeP IE51bWVyaWM= IHdpcms= X1NVTQ== PERhdGVUaW1l IHB5bGludA== IGxhbWVudA== IFBvc2U= X2VudHJvcHk= IGVuY291cmFnZW1lbnQ= IGxhaW4= 5Yib5bu6 LWZy IGNvcnJlY3Rpb25z cGhhcw== dXVy YXRlZ29yaWFz IGNhdGFseXN0 LmFsdA== IEZlcm5hbmRv LkRhdGFHcmlkVmlld0NlbGxTdHlsZQ== IGhlcmJhbA== IFJH U1RFUA== SUZu IFRvbmc= xb5l IElOQ0xVREU= IGhj dHJhY2tlcg== CVN0cmluZ0J1aWxkZXI= IERlc3Rpbnk= IHNvcGhvbW9yZQ== IERlZA== IFBBUkE= aXpvbnRhbGx5 LWNoYW5nZQ== ZW5kaWQ= 6YCJ5oup aWprZQ== IEF0aGxldGlj YmFp Z2V0UG9zaXRpb24= Lm5hbWVzcGFjZQ== 6K6i5Y2V UkFDVA== IHJlbGlldmVk IHBvdXJpbmc= IGl5 cm92ZQ== IGFkb2xlc2NlbnRz IGF3ZQ== cmVhcw== QW50aUZvcmdlcnlUb2tlbg== cm93bmluZw== IFVuY2xl LkNvbm4= IE1lZGlhVHlwZQ== Lm9yYWNsZQ== SU5URVJOQUw= LGFuZA== IGZhdXg= aXBtYXA= JG1vZGVs IEdlb2Zm X0FYSVM= KCgpKQo= IG5lZ2xlY3RlZA== IHF1YXJ0ZXJseQ== IGRpZXNlbg== IGRyYWdvbnM= TmlnaHQ= L1dlYg== PFZlYw== CSAgICAgICAgICAgICAgICAgICAgICAg IE9icw== YmRk IGhlaXI= LWFuZ3VsYXI= TWVudVN0cmlw ICciPic= a2luc29u INC60L7Quw== b2duaXRpdmU= X2xp IGltbWluZW50 IGFmZmluaXR5 LnNpZ25hbA== IG5vdGNo IFN0ZWVsZXJz bWF4bGVuZ3Ro S0s= IEV1Z2VuZQ== X1BXTQ== cm9p IOKXjw== IEhhbWJ1cmc= Lk11c3Q= IGF4ZQ== ZW5lZg== IGFtYml0aW9ucw== IFNwZWNpZXM= IFN0cmVzcw== IGF3aGlsZQ== INCx0YPQtA== IHdpdGhzdGFuZA== IERlY29kZXI= X2ludmVudG9yeQ== IHsNDQo= IHRndA== IHJhaWxyb2Fk V0FTSElOR1RPTg== IG5lZ290aWF0ZWQ= TlNU LXBob25l LFU= IGV4ZXJjaXNpbmc= 4bul X1BJWEVM YXZvcnM= aXRlcmF0ZWQ= IHZhbXBpcmU= YWRhbA== SW5ncmVzZQ== IHVuZw== amVjdGl2ZQ== LmNlbGxz IG5hbm8= IG1hcmtkb3du X1JVTEU= KGV2ZW50cw== IGx1Z2dhZ2U= TUVTU0FHRQ== aWdrZWl0 JGNvdW50 QXR0cmlidXRlTmFtZQ== SUdJTkFM X0VudA== IEJG IENPTU1FTlQ= X2luaQ== IEV1cm9wZWFucw== IEJlbGxl 5ZG9 KVsn 5bqU IFVzZWZ1bA== LnJlZmVyZW5jZQ== KCkiLA== X2dyYWRl IEthdw== IHNlbnRlbmNpbmc= IHNvY2lhbGlzbQ== bW9uc3Rlcg== X0xBWUVS IGRlZXBlc3Q= d2s= IE5vaXNl IyMjCgo= IHByw6lj b3RsZQ== 0YLQtQ== YXVm aWJhbA== IGNvbnF1ZXI= PkVtYWls IGFtYnVsYW5jZQ== T0FE ICgiJQ== IEZJ LmZpeHR1cmU= IHRlcnNl ICAgIAkJCQk= IHNhbmN0dWFyeQ== dWdp IENvbXBhcmF0b3I= RGVmaW5pdGlvbnM= IGFzdGhtYQ== IGxhY3Q= IGhhcmR3b29k LmNsb2Nr IGF0dHJhY3Rpbmc= IE1vdXI= KGRpc3RhbmNl aWNpdHM= IGJvbm5l IEFDQ0VTUw== LkRlc2VyaWFsaXplT2JqZWN0 IFR5cGVk IGpldQ== IGFwcElk IENsYXJh IEhG IFJlaWNo aXBwbGVz Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== X2RlbGl2ZXJ5 ZXJpYWxpemF0aW9u IHBsYWludGlmZnM= U2NpZW50 c2hvcHBpbmc= IER1bW15 IFdhbGQ= R3JvdXBOYW1l IGluc2NyaXB0aW9u ZWxvZw== Ojo6Ojo6Ojo= X2xk QmFja1ByZXNzZWQ= LlJhdw== IE9uVHJpZ2dlcg== IG11c2V1bXM= IEJlZW4= IEFkdmVudHVyZXM= IHNsYXRl IGxldHQ= IHN1bmQ= IEdpbg== IE1lY2hhbmljYWw= LnNoaXA= QXBwQ29tcG9uZW50 IGRlc3RpbmVk IGR3ZWxsaW5n UHJvZmlsZXI= UHJlcGFyZQ== emVpY2g= IHNpbGljb24= KGhhcw== ICMl VklERU8= IGNvbGxhYm9yYXRl TGlu IHNjb3Blcw== KGNsYXNzTmFtZQ== KHNk YW5kaW4= LmhhbQ== U2VydmljZUltcGw= LWRlc2NyaWJlZA== IGlyb255 c3RpYWw= IEh1YXdlaQ== KHJlcG8= IHVuZXhwZWN0ZWRseQ== IEthaQ== Lmluc3RhbGw= XHhm IGV4aGliaXRlZA== X1RDUA== IE94 X0NITw== IHByb3N0aXR1ZXJ0ZQ== IHbDpA== IHNpdG8= IGNvbnN0aXR1ZW50cw== IENvbnRpbnVlZA== IFNBVkU= cnNz L21lc3NhZ2U= dWJlcw== IG1pc2RlbWVhbg== IHRheGF0aW9u IHN0b3J5bGluZQ== aGFpcg== IEZpbmRz U0lH dmVyaWZpY2F0aW9u fj0= Lmhw SXRlcmFibGU= 0YvQtQ== YXRvcmk= IGN0cg== Ung= Xyk7Cgo= ZGFn LnBpbg== IHBzZXVk IGludm8= 0YHRgtGA X3BpeA== 5Li656m6 IHN3b3Ju 4oCUb3I= X3JlZ2lzdHJ5 IGRpc2FzdGVycw== IFJPSQ== IOKAlQ== YWt0dQ== Zm9yZXN0 YmVpdGVu 4oCUSQ== dWV2YQ== ZWd0 IHNwaWtlcw== VVJFUw== IFJlY29tbWVuZGVk IGV4cGxvaXRlZA== IEZyZWRlcmljaw== X0NPTVBMRVRF IERydWdz ISEhISEhISE= IFJpdg== U1RPUA== Uk9PTQ== IFBBU1NXT1JE Q29va2llcw== LkVs 4but IEJlcnQ= IGhhc2hlZA== aWNlc3Rlcg== IGRlY29yYXRvcg== IHF1ZXJ5U3RyaW5n OjsK ICJbIg== b3RvcGU= LUFtZXJpYw== IE1hdHRoZXdz VVJBTA== 4oCcLA== U3VtbWVy Zm9z X0NPTlRBSU5FUg== X0FDSw== IGZpbHRy X2Rpc3A= X1Jl IGZhY2lsZQ== 0LDRiA== IOyVig== IGViZW4= IHNwcmluaw== IFF1aW50 PlY= IGhpc3RvcmlhbnM= b3VybWV0 IE1vbml0b3Jpbmc= bGVkZ2Vy Y290dA== IHdhcmU= R0dMRQ== Y2Fycw== IE1FRElBVEVL IHZvbHVwdA== X1ZpZXc= SEVM KGNvcHk= KHN0YXRz IGNocm9tb3NvbWU= IEN1cnRpcw== LWNvbmY= KGFzc2V0 IGh2b3I= RmlsZVN5c3RlbQ== PD4oKTsNCg== b2NvZGVy IENhbm5vbg== KXg= IFNtb290aA== IFNBUw== X2Nl CXByZXY= X21vdmll RWM= X3dhbGw= PEJ1dHRvbg== IEZBU1Q= IG9uVmlldw== dWxhbg== IFNVUFBPUlQ= IGdlc2NoaWNodGVu IFNvbnM= SW1t JElGbg== IGZhaXJuZXNz IGRwaQ== YXRzdQ== Sm9zaA== RXF1YWxpdHk= IH0oKQo= X2xlc3M= IFJhdGlv IENhdHM= IFN0ZXJu TW9uc3Rlcg== IG1lcmN1cnk= w7xocg== IHBsdXNpZXVycw== LmRlc2VyaWFsaXpl c2NvcHk= LkZhbHNl KWFuaW1hdGVk IEV4cGVydHM= ICIiKXsK LldoZW4= c2VlYWxzbw== LnVucGFjaw== TEVN LnNlbGVjdEFsbA== IHBlcmNlcHRpb25z dWRpbmc= aXJsaW5n IFByaW50aW5n Z3JhbXM= IEZpbGVTdHJlYW0= ZXJ2aWxsZQ== aWxvZw== aWNtcA== X0NvdW50 IGxpdmVzdG9jaw== LWNh ZG9jdW1lbnRz IHBvbGVz CXdhbnQ= IGZsdW9yZXM= IHN0YW5kcG9pbnQ= IEh1Z2U= IHJhZGlhbnM= IFVJQmFy RURJVU0= IEhpc3Rvcmlj X2hvbGRlcg== IE1hcmluZXM= IHTDpA== LkxpZ2h0 cXVpcmVy YXNvbnJ5 ZGl2aWRlcg== IEZsdXR0ZXI= X2Zi cmVzdHJpY3RlZA== IEV2ZXJ5Ym9keQ== TsOjbw== IGtub3Q= IFR3aXRjaA== IGhhbGx3YXk= KENvbGxpZGVy SW5wdXRFbGVtZW50 PykK L29mZg== Lyk= cGxheWVk W09G IGJhdHRpbmc= X2Rs IGNvbWVkaWFu IMOpdg== IERFTQ== IEVkZW4= OndoaXRl Jycs Q29uc3RydWN0aW9u YWNlcmI= IHRhc2tlZA== Lm1hbmFnZQ== UmVsYXRpb25zaGlw IHBob24= bno= X0JHUg== VmFsaWRhdGVBbnRpRm9yZ2VyeVRva2Vu X2Fpcg== 4oCcV2hlbg== IGdsZnc= IENvbnZlcnNhdGlvbg== X1RPVEFM LFo= IGdyYXo= IGl0ZXJhYmxl IFBBU1M= IGFkdmVydGlzZQ== IG3DtmdsaWNo L3RyYWlu IFZvbGtzd2FnZW4= IGNyZWVweQ== ICIpDQo= UVVFTkNF IGFsdGFy IGVkaXRz Y29tcGlsZWQ= YXduaW5n IER1bmdlb24= IG9zZw== TmF2aWdhdGlvbkJhcg== IHRyZW5kaW5n IEVjbw== b2dnbGVz Y2RvdA== fC0= U2ll ZWNyZXQ= IE5lZ2F0aXZl IExpbmc= IERJTQ== IENXRQ== IENhcnJpZXI= IGNhcnRyaWRnZQ== X3VzYg== PW9z IEphY2tpZQ== IG90cmFz IGNvbW1vZGl0aWVz IFByZXNlbnRhdGlvbg== KSYmKA== IE1hcnRoYQ== IENhdGhvbGljcw== IE1vbmQ= 0L7QsdGL X2Fic29sdXRl IGFzaGFtZWQ= cG9uc29ycw== dGFs IHNhZG5lc3M= IHB1w7I= RmFkZQ== LXByZXZpZXc= IFJlcXVlc3Rz IENhbHZpbg== aG9ybg== UmV1c2VJZGVudGlmaWVy KHByb3ZpZGVy L2FwcHM= aW1lbw== CUNsYXNz U2Ftc3VuZw== IFdPUkxE IGNpbm5hbW9u ZG90ZW52 IElVc2Vy IERFVg== X0NoYXI= LmliYXRpcw== ZXRp L21l c3N0 LnN5bQ== IFJ1Z2J5 LW1hc3Rlcg== YWphcg== IFlFQVI= IG9kcA== IFJvbGVz IGJpcGFydGlzYW4= YWlsbGU= IGJsb2NrZXI= IGdyZWVucw== LlNFQ09ORFM= IGJlbGlldmVycw== IExpa2Vz RkxPQVQ= IG1haw== IGdjYw== 4pWQ4pWQ KCJ+Lw== U0NSSVBUT1I= IHRvbm5lcw== IFNhbmc= IHRyYW5zcG9zZQ== ZW5uYWk= UHJlZA== IHNvbGx0ZQ== LmdpdGh1YnVzZXJjb250ZW50 KHByaW50 IEhvbGU= 55yL YWRnZXQ= IHByb21wdHM= IGdlbmV0aWNhbGx5 IEhvZA== IHZlcnRpY2FsbHk= X2NvbnRyb2xz 0YHRgtCw0L0= Iil7DQo= JHRpdGxl IH0pLAoK IHN0YXRld2lkZQ== IENvcnJlc3BvbmQ= IEF0dHI= aXRhbnQ= RWxlbWVudFR5cGU= IG91dHdhcmQ= IGZhbWlsaWE= KGFydGljbGU= IGJsYXQ= wqAK IGdsR2V0 IFJlY2VpdmVy ICUt YWRhbQ== V2lubmVy IHRhaWxvcg== X3B3ZA== ZXJ0ZW4= U3Rhbg== CWFsbA== YWxpdmU= c3RydG90aW1l 77+9cw== c2Vzc2lvbnM= JGNvbm4= YXNzaXN0 IGNoYXR0aW5n IE1hbnQ= ICVA ICIiKTsKCg== IGRndg== IO2VqA== LnJlcGVhdA== X01lc3NhZ2U= IGFkdmlzZXJz L3BhdGg= IGtlcw== KX08Lw== TWlzYw== IGJzb24= IHRyaW1tZWQ= IEFjaw== VmVydGV4QXR0cmli 57Si dWF0ZXM= Lm15c3Fs IGRlc3Rpbg== IHByb2Js KENvbnN0YW50 YXNzZXM= LWltYWdlcw== X0FSRUE= X18qLw== W10o IHNpZ25Jbg== xJE= eHI= YWhpcg== LmZpcmVzdG9yZQ== IHNlcXVlbnRpYWw= IElkZWE= LWJhc2lj X3BhZw== IGluc3RhZ3JhbQ== b3Ryb24= X2FsaWdubWVudA== XFxcXA== LkZhY3Rvcnk= LnJ1bGU= LmNoZGly IGxpYnJv KGdhbWVPYmplY3Q= LlRvb2xTdHJpcEJ1dHRvbg== IGRpc2NvdmVycw== LkFyZ3M= ZG9i IHZu 4oaS IGTDvA== IFhN IGFsdW1uaQ== IGhvbmU= IHNlY3VyZWx5 X2Ryb3Bkb3du RGlzY2xhaW1lcg== IGR6aQ== KHRpbWVzdGFtcA== Jyld IGN1bHRpdmF0aW9u Li4uCgoK IFRyZWF0eQ== IERpc3M= IGNvbmZsaWN0aW5n LmdldFNlbGVjdGlvbg== IHBsYXlhYmxl IFNpbGs= IEVxdWFsaXR5 IG1veQ== IGZsYXR0 IG1vdGl2ZXM= UGVyZmVjdA== LmV4aXN0 IHR3ZWFr IG9taXQ= IFR3aWxpZ2h0 IGtpc3Npbmc= IGNocmlzdGlhbg== KFNF X2RlZmluZQ== IFBlbmc= U29ydGVk J2lu TG9ncw== 4buHbg== IG55bG9u RHVtcA== SW1hZ2luZQ== cmVuYW1l IGJlZm9yZWhhbmQ= cHlnYW1l IGJweQ== IERq IHRpdHVsbw== IG5sdGs= IFNjaG1pZHQ= IENhdg== KG9uZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= LmdldE1vZGVs IFB0 YXRvaQ== LmxvY2Fscw== YnVyc2VtZW50 UHJvdmluY2U= IEFwcHJvdmVk KCk8PA== w7NyaWE= dXNjaA== IEplbm55 YXJyYW50cw== IExpYmVydA== TG9yZA== IFJlbW92ZWQ= X2NvZGVj LmJ1bmRsZQ== IEdvbnphbGV6 b3BlcnM= neWni+WMlg== ZXR0aW5n IGdvZGRlc3M= cmlwZQ== IG11c2N1bGFy CQkJCQkJCQkg IEh1Z28= IG1lam9yZXM= bG9pZA== cml0ZWxu Z2lz YWRkb24= ICgoKCg= YXBwb2ludG1lbnQ= cmVzZXJ2ZWQ= CWZyaWVuZA== X2F2YXRhcg== Qk9PTEU= YWhp LUVORA== IGlmZg== w7Ni IEJydW5v cm93c2FibGU= IFBvaXNvbg== KGZsYWdz dXJ0bGVz IEFuaW1l IG1pZ3JhbnQ= CXN0cmNhdA== KHJlcGx5 IFJlZnVnZQ== IEJX ZWZ1bA== JHZhbHVl ZmVk ICAgICAgICAgICAgICAgICAgICAgICAK 6LWE KGNt IHZ1bG5lcmFiaWxpdGllcw== IFsoJw== IHVuYmVsaWV2YWJsZQ== c3RyaWN0aW9u ZW50aWV0aA== IHByYXlpbmc= Q2xhaW1z IGthdWZlbg== bsOp IHBvaXNvbmluZw== Y29sbGVjdGlvbnM= IGluaXRTdGF0ZQ== IFNldmVyaXR5 IGNvbnRlbnRpb24= IAoJCg== LmNvbnRyb2xsZXJz c3RydWN0dXJlZA== aWN0aW0= IE9iZXI= IC8qI19f X09U IEFtZXJpY2Fz IEFkYQ== UHJvZHV0bw== Lm11bHRp IGdyYXBl YmVn 5p+l6K+i IHF1YXJ0eg== IFJvbWFuY2U= IE1pZHdlc3Q= IGhvdXNlZA== IGZ1cm5pc2g= aWNvbnQ= LnVuc2hpZnQ= b3RyZQ== IMO6bg== aXBwbGU= IHN1YnVyYg== dWFsaQ== Vm9pY2U= LklzQW55 LGNvbHVtbg== IFByb3NlYw== SURB CXBvc3Q= cHRvbXM= dsOp IEluZ3JlZGllbnRz w7ZmZg== Lm9wZXJhdG9y IDw8PQ== bGFzdGlj IHJlc2VtYmxl VW5hdXRob3JpemVk IHR1dHRv X1NXSVRDSA== X1JFQURZ fT0= bm93bGVkZ2U= IGFwcGVuZGVk dW5nYW4= 4oCZZW4= IExvcmVu cHVibGlzaGVy IE1H fSwi IFdhbHNo VGVtcGxhdGVz X3NvY2lhbA== IHBhcmlzaA== IFNwbA== bWluYXRlZA== KEZBTFNF IGZvcmVmcm9udA== bW9kaXR5 IGJpbGF0ZXJhbA== IGNvbXBldGl0 IGNhbmRsZXM= LmRw IGNvbGxlY3Rz dGVsZWZvbm8= IGF0dGVudA== IExlbW9u aXphZGE= IHRoZXJhcGllcw== IHBhcmFkb3g= IHRhcw== LXN1Ym1pdA== ZWtlcg== SU5hdmlnYXRpb25Db250cm9sbGVy IG1ldGF2YXI= IHNld2luZw== IFppbWJhYndl IGxhd2Z1bA== IGxvcmU= IExvYWRz INGB0L7Qt9C0 LnByb21pc2U= IEZhY2Vz LlBsYXRmb3Jt LmdldExvY2F0aW9u IHRyb3VibGluZw== IHbDrWRlbw== IEZlYXR1cmluZw== 5Lqn cWVk IG9uQmluZA== IHRvZGRsZXI= Q2xv RGl2aXNpb24= LWdhbGxlcnk= IEdlbGQ= c3BlY2lmaWM= RmllbGROYW1l X2V4Y2Vs XGh0ZG9jcw== IERW ICY6 IHR3aWc= IENvbmNlcm4= IHNob3RndW4= IG5pY2tlbA== IEx1eHVyeQ== X0tFWVM= Lm5weQ== xa8= IGZvcmVoZWFk zrI= IGVuZGFuZ2VyZWQ= L3RoZQ== cGlwZWxpbmU= xbE= bmVv RXhwbG9yZQ== U3BlY1dhcm4= IGludGVyY2hhbmdl KHBp YmlydGhkYXk= RGF0YVJvdw== IFNQUg== IG9zdGU= ICJ+ YXRpc2ZhY3Rpb24= Tkg= b3Jkbw== LWZvY3VzZWQ= J0E= lok= LmJlc3Q= IFNwZWNpZmljYXRpb24= Lz4uCgo= b2dlbmVzaXM= IE9QVElPTlM= dXB0b29scw== IG1pbGl0YW50 IGV4aXRlZA== aWdhcg== IENPTU0= IERpc3Bvc2FibGU= YXljYXN0 IHJvd3NwYW4= IHN5bnRoZXM= IHNvbmRlcm4= IDwhLS08 IEVuZGU= LnZhcmlhYmxlcw== IGNvbnNlcXVlbnRseQ== c2Rr U3VwcGx5 cmVzcG9uc2l2ZQ== T3BlbmluZw== cGhvdA== IH1c IGJ1bGxzaGl0 IGJlYWNvbg== X3NhdA== IHNuYXBz IEdIeg== TE9ORw== PHBhaXI= IFsKCg== IFZlcmc= IEVpbmU= L3Bvc3Rz IGFyYWI= IHN1bWE= 44Oz44OI IHNjYXJj IG9sZWg= ID8/Pw== IE9mZmVycw== eGVk IGZ1bGxXaWR0aA== LWFjdGlvbnM= T3V0ZXI= IEV4cG8= w6lyZXI= Lkhl REg= IGhpbA== IE1pbGxlbm4= 0LXQvdGM SWNl X2dyYXk= INC/0L7Qu9GD0Yc= IFB1bms= IHRpbWV2YWw= IGlzYQ== IENIdG1s LkRhdGFQcm9wZXJ0eU5hbWU= IGRpeQ== dG91cg== IGpUZXh0RmllbGQ= IGplbGx5 IGFra2E= LWVyYQ== RGVwcmVjYXRlZA== X0lNUEw= IE1vbnRocw== X0lURVI= IGFydGU= IEhlYWRpbmc= IEJvaA== IHByYWc= IGRvd25zdHJlYW0= IEJPQVJE X2tleXdvcmRz IE1ldHJvRnJhbWV3b3Jr KS0o PEV2ZW50 4bqldA== IFByZWNpc2lvbg== IE1SSQ== aGVyZW5jZQ== aXhv KSkpewo= KCk/Pg== IHNhYXQ= IFdhcmVob3VzZQ== X2F0b21pYw== IHZvaWNlZA== SXRlbUNsaWNr ICAgICAgCQ== LlJlc3VsdFNldA== L3BsdWdpbg== IGhhbGxz PWZvcm0= IFdhZ25lcg== ZW1haWxz JSUK VU5LTk9XTg== IFJpbQ== dWludHB0cg== IExpYmVyYWxz IHRlcnJpdG9yaWFs IE11cmRlcg== IExhZGVu IHByZXNpZGVudGU= KGNhcA== IH0sewo= YXZvdXJpdGU= ZmluZEFsbA== IGFwcGxhdWQ= IOuplA== L3Bob3Rv X3N5bg== LndhbGs= IHN1bnNoaW5l IHN0dWJib3Ju IGRvd25zaWRl IExURQ== LWJ1aWxkaW5n UXVlcnlCdWlsZGVy X2Rpc2FibGVk VGVycg== YWtyYQ== UmVmcmVzaGluZw== X3Byb2Jz IGZvbGw= PmI= IGNvbGxhdGVyYWw= JGVycm9y IGFjb21wYW4= X2l2 K2Q= YWp1 IOKd c3VybmFtZQ== LmFydGljbGU= IGJpY3k= IjoKCg== Pjw/PSQ= 0LrQu9GO0Yc= ZWNvbWU= RmluZGluZw== KHBk IHJlY3Rhbmd1bGFy ZXN0bw== aWhpbA== PScnKQo= IG1hbnNpb24= X2ZpbHRlcmVk YW5lZA== UFJPRFVDVA== TE9HWQ== X2ly LlJlbW90ZQ== IGV4ZWN1dGVz b3RlY2hub2xvZ3k= IFBST0NFU1M= IHJvd0luZGV4 Z2V0WA== TXV0 aW5za3k= KHN0cmluZ3M= IE1veg== Rmxvb3I= LlN0cnVjdA== X3ByZWRpY3Rpb24= IGNhcnJpYWdl IGNvbGxlY3RvcnM= IFdoZWVscw== IGJ1bmRsZWQ= YXhlZA== a29s X2Nyb3A= IGJsb29t QmVzaWRlcw== IG92ZXJyaWRkZW4= IHN1Ym5ldA== aWVuaWE= Kj46Og== IFByaW1pdGl2ZQ== IOag LkNoYXJhY3Rlcg== 6KGo56S6 IEFESEQ= Uk9Z SmFwYW5lc2U= T1VT OlVJQ29udHJvbEV2ZW50 IFBBTA== aXphY2lvbg== IGNoZXJjaGU= b3J0aW5n IG9yZ2Fz LlV0Yw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= XERvbWFpbg== T1JB IHRlcnJhY2U= IHByaXM= CQkJCQkJCQkJCg== IHJhaWRz X2luY3JlbWVudA== IHVuanVzdA== JG9wdGlvbnM= b25DaGFuZ2U= Qmxvb2Q= RmlsbQ== IGhhbmRpbmc= IG11Zw== U09MRQ== 44OV aWNvbmR1Y3Rvcg== IElzbGFtaXN0 ICIiKTsNCg== LW92ZXJsYXk= LGNvbA== 6Zw= YXJyaW5ncw== X2NvbnRyYWN0 CWxs cGlw X2VtYmVkZGluZw== IHBlcm1pdGU= IG1vZGVt IHRyaWdnZXJpbmc= KGh3bmQ= LiIpXQo= IHNhbnQ= IGV4dGluY3Rpb24= IGNsYXNoZXM= LkF1ZGlv IHN1bw== Lm11bHQ= IHNlYXNvbmVk LlZhckNoYXI= cG93ZXJlZA== ImNvbnRleHQ= IG1lbmM= KEdyYXBoaWNz JHdoZXJl IHJlY3VwZXI= YWNrbGU= IG5ld0RhdGE= IEJyZWFraW5n ZXJnZWQ= IENQUFVOSVQ= IE11bGw= IGtvbW10 IExlZWRz JywnPQ== Lm5leHRUb2tlbg== IFJpZw== UkVUVVJO CXRpbWVy fV97 IE1hcmluYQ== IHNsb2dhbg== SVpFRA== T3BlbkdM X1BhZ2U= YXRpdmFz IGhhemFyZHM= J3ZhbHVl IGNvcnBzZQ== IEZsb3dlcnM= X29ubGluZQ== ZGFs IENvbGxpc2lvbg== w6BuZw== IGZlcnJ5 IHBva2U= IFRvdXJpc20= aW5lcmFyeQ== L1NldA== LkVtcGxveWVl PkA= LHZhbA== IE1pbGY= YXZleg== UmV0cnk= LiIv IHJvdW5kaW5n LXBsYWNlbWVudA== IGNlcnY= TWV4 IE1zZ0JveA== X3Npbms= bWFuaWE= X2NyZWRpdA== R3VhcmRhcg== IHZhbml0eQ== IGltbXV0YWJsZQ== IGNvbnRhbWluYXRlZA== 0LrQsNC3 5Liy YWNoYQ== IGhhdGg= IGVudW1lcmF0aW9u LmdldEJ5 4bq/dA== IERhbw== b2JpZXJubw== IEd1dA== X1BJUEU= LmFkdg== IEd1dGVuYmVyZw== YWRo 66y4 ZnVzYw== LlZL cHRh IEVNUA== LkZpcnN0TmFtZQ== IHJlYWxpemVz LmNn IHVuaXRl UExJVA== IEFiZHVs IE1FRA== UkFJTlQ= IHF1ZXN0YQ== c3RkaW4= IGNhbG9yaWU= CWdsQmluZA== IGFybWE= eWxsYW5k T01Q LXE= IEtoYWw= c2FsYXJ5 CUFORA== c2dp X3RoYW4= LWJ1aWx0 ICsvLQ== IG5hcmdz X2xhdW5jaA== IFNR em9u IEJlbmVk X3VuaW9u PigpOw0KDQo= IFNpbXM= IERhdGVz CUNvbm5lY3Rpb24= IFBlcmM= Z3JhbnQ= YW1waWw= IGFnZ3JlZ2F0aW9u ZXNlbGVjdA== X1NVUA== KHsKCg== Lm9t IHdt LmNvbnRyYWN0 LU9yaWdpbg== IGdlbWU= ZnJlZXpl TlVNQkVS LmN1cnI= IEdsYWQ= c2xh IFJlYg== 0LXRgdGC0LLQvg== YXJib24= L2NvbnRyb2xsZXJz U2xvdHM= LmRlZXBjb3B5 RlVMTA== dWlyZQ== QHN0dWRlbnQ= 4LmJ4Lit VHJhbnNsYXRvcg== IHByZWZlcmFibHk= Y2hlbWlzdHJ5 IEphY29icw== bmFy ICgiXA== bmVhcg== aWZpcXVl CWNvbHVtbg== IG1pbnV0b3M= aWdlcw== IGVzdGFibGU= LWRpc2M= KENoYXI= a292 ZXhhbXBsZXM= X18oIg== INC60LDQug== IEJvcmlz KGR4 c3By IG92ZXJoYXVs YXRvb24= IEhhcmxleQ== aWNhbWVudGU= 4paI4paI4paI4paI ZXZpdHk= dXNoZXI= LlZpc3VhbFN0dWRpbw== V2F2ZQ== IE5vcm1hbGx5 c3Rvb2Q= b3JuaW5ncw== IGhhbmRtYWRl KGxvZ2dpbmc= IGNhcmNpbg== YWNqYQ== IHN1cGVycw== IHNpZWdl CUlm IElMb2dnZXI= VUFSVA== QW5pbWF0aW9uRnJhbWU= IHRhcGVz IGFpZHM= IENvbG9uZWw= dmVlZG9y IG1kbA== cGhvbg== RGlzbWlzcw== QXZhaWxhYmlsaXR5 VW5pZm9ybUxvY2F0aW9u IGlkZWFscw== cXVldHRl a2VpdGVu IEVNQUlM IE5lYg== IHN1bW1vbmVk IGdvdmVybm1lbnRhbA== IEhvcnJvcg== Y2hhbmdpbmc= IEFjdGl2YXRl SWxs PHRib2R5 Y3JlYXRpdmU= IEJMRQ== IG1hZG5lc3M= T3JOaWw= IGhpbg== xZM= LkdldEtleQ== X2NvbnNvbGU= Ik91cg== IGd1aW50 IGFtaQ== IHJlZmxlY3RpdmU= IGNyYWNraW5n IFJp UkFM dXJzZWQ= cHVyZQ== IHJlcGFpcmVk IHRpZ2Vy IE5pY29sYXM= VnM= bnRo LmV4cHJlc3Npb24= IHNlYXM= X0FDQ0VQVA== IGZvcmM= IEZyYXU= IHRocmVzaA== IM+A KEJBU0U= X09wZW4= V3VudXNlZA== IERvbWVzdGlj KHByaXY= Z3Vlc3M= Ly8hCg== Z2V0SXRlbQ== KCkpCgoK bXV0YXRpb25z IHN0cw== IGRlbWVudGlh c3Bva2Vu JHBhcmFtcw== IHBhdHJvbnM= IHJ1bndheQ== IEJVWQ== Lldhcm5pbmc= IG5ldXRyYWxpdHk= emhvdQ== 0YDQsNGJ YWt0ZXI= IENvbnN0cnVjdG9ycw== w5NO IFByb2dyZXNzaXZl IEJ1cmdlcg== IGluY3VycmVk IGltcGxpY2l0bHk= X2Vudmlyb25tZW50 IGV4YWNlcmI= IGVuZHVyaW5n c2lj IFBhcnRpY2lwYW50cw== X0Jsb2Nr IGVucm9sbA== X2VtcGxveWVl IFBlcHBlcg== bGF1Z2h0ZXI= 44OW J107Pz4= PScu KHJlbmFtZQ== IHNoZWx0ZXJz IEFNQQ== X2dhcA== IFJFVVRFUlM= eGFtcHA= T01JQw== IHBlZGlkbw== IGTDqXZlbG9w X18oLyoh X29k d2VyZQ== X051bWJlcg== X211bHRpcGxpZXI= S0VFUA== IHNob3dlcnM= IG1hZ2U= IHNpbm8= Y3Jvdw== LmlkeA== X25vdGljZQ== dWVpbA== IG15cmlhZA== IEF2YWlsYWJpbGl0eQ== Y2VudHJhbA== IEFCT1VU IGluY29ycG9yYXRpbmc= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== X3dpZGdldHM= IHN5c3RlbUZvbnRPZlNpemU= w7ZydA== L2pwZWc= IFNNVFA= KGJyb3dzZXI= Z3Vucw== c2V0dw== X0FWQUlMQUJMRQ== IGluY29ycG9yYXRlcw== L2FuZHJvaWQ= eXg= 5biD X2xhYg== IGxlYWtpbmc= IEhpbnQ= w7xuY2hlbg== LlNjYWxl IGZpcmV3b3Jrcw== IGxQYXJhbQ== YnNk YXhvbg== KHByZWRpY3Q= Q29uZ3JhdHVsYXRpb25z IFNwZWN0cnVt SVJD IEFkbWluaXN0cmF0aXZl IGltcHJpc29uZWQ= UlNwZWM= IHJldGFpbnM= IHNldHRsaW5n IGNpdGF0aW9ucw== IFdvcmxkcw== c3RyY29udg== b3VzYW5k IEJlZ2lubmluZw== IEFuZHJld3M= IFNoYXJvbg== RXhlY3V0aW5n Z3JvdXBJZA== YWRkRmllbGQ= IGV4cGFuZHM= IGtpbG9tZXRyZXM= bGlua3k= IGdycA== SU5BVElPTg== QnJpdGlzaA== IGNvbXBvcnQ= LkRhdGFHcmlkVmlld0NvbHVtbg== IFByb2R1Y3Rpb25z aWxkZW4= IHVuaXg= X2dhbGxlcnk= X1BST1ZJRA== b3JkZXJpbmc= X2Fubg== Ymg= LkRlc2lnbg== IHRyZWZmZW4= IHVuZGVybGluZQ== X251bXM= 7ZWc64uk KXY= dXNpemU= IGRpc2FwcGVhcmFuY2U= VG9Cb3VuZHM= IHBjbA== IFdpbm5pcGVn IFNoZXJtYW4= X2xhbWJkYQ== bmFudA== IHJvb3RWaWV3 LkZsYWdz IGNlbnNvcnNoaXA= c2VudGVuY2U= LnJlYWRJbnQ= X2Fzc2lnbm1lbnQ= IHZlcnNjaGllZA== IEZyYWN0aW9u IG5hdGlvbmFsaXN0 IGp1ZWdv IERlYWxlcg== IHByZWRpY3Rpbmc= YXVwdA== aGVsbQ== X1BSSUNF X0RT KCIjew== bGlmdGluZw== IHBvc2luZw== IE5TTXV0YWJsZURpY3Rpb25hcnk= IHNtYXNo IGFraW4= IGNhbXB1c2Vz IE91dGxpbmU= IEVsYXN0aWM= X0NoZWNrZWRDaGFuZ2Vk KElFbnVtZXJhYmxl c3F1ZWV6ZQ== cHR1bmU= X0ZST05U bWg= IOyDneyEsQ== UnVuV2l0aA== IHR1cm5vdXQ= c2libGluZ3M= KWU= X0FSR1VNRU5U IEdyaWRCYWdDb25zdHJhaW50cw== X1BPT0w= LlJJR0hU aWdnaW5z dGVsZXBob25l XEV4dGVuc2lvbg== IEFyaXN0 aXR1cg== IGZyaWVz X2R1cA== RXhwYW5kZWQ= LXJv IFdvcmxkd2lkZQ== IENvcms= w7Ns TGlt IGRlbm4= UHJldHR5 IGZ5 VHJpYW5nbGU= RmVhdHVyZWQ= KENvbW1vbg== X2VmZg== ICIiDQo= 4bubaQ== X0xJTkVBUg== IFJpY2E= IGNhZsOp IGFwcGVsbA== IG5pdmVhdQ== ICYs IGZhYnJpY3M= X1BsYXllcg== IGh5Z2llbmU= IGRpc2FzdHJvdXM= IHNoYXJlZEluc3RhbmNl X3BpdGNo cno= ZW5tZW50 TmVhcg== X1NUQVRT IHN0YWlu IEROQw== IGlzc3U= Xks= CXRyZWU= X2Jsaw== c2V6 bGFpbg== YW11 X293bmVk VVNBUlQ= Lmhhc0NsYXNz SVNPTg== IGZvZQ== dXNoZWQ= X1VOU0lHTkVE IGluZGV4aW5n IEZpcmViYXNlQXV0aA== IGxpdGVyYWN5 IFNVUg== IENvbHRz YmVjdWU= IEludHJv IGNoYW90aWM= IGFuaQ== IEFubmll xrDhu50= LmR4 ZGlzY29ubmVjdA== IGFyY2hpdmVk W0xpc3Q= PU4= LnByZXNlbnRhdGlvbg== UmVzdGF1cmFudA== IHJvY2tldHM= PWh0dHBz L29w IHB1cnNl IEtyaXM= IGNvcmFs c2V0UGFyYW1ldGVy IGlycmln UXVlZW4= TlNEYXRh IHZhc3RseQ== LkZpbGVz IGZlbWluaXNt KFN0cmVhbQ== IGF0cmli IGxpcXVpZGl0eQ== PEZpbGU= dHJhZw== W2NvbnRhaW5z IGhpbmRp CWNw aG9tZXBhZ2U= IHN1cnBhc3M= IGRheWxpZ2h0 YXV0aG9yaXpl IENvbnNlcXVlbnRseQ== QXN5bmNSZXN1bHQ= IERpYXJ5 LlBhdHRlcm4= LiovCg== ZW5zY2hhZnQ= IEp1ZGljaWFyeQ== QWR1bHQ= KCY6 IGplb3BhcmQ= IEJsaXp6YXJk IGdn IjsvLw== WEhS IHBhc3N3ZA== Pn0= JyksJw== IGNvbXBhcmF0b3I= LmNoYWlu IGluc3VyZWQ= X0VER0U= IHR5bGtv X01BSk9S d2F2 XEZpbGU= RW50cg== J2FwcA== IGZvcmdpdmVuZXNz CWRzdA== Ijot Lm1vbg== ICgKCg== IGNhcGl0YQ== IGluaXRDb21wb25lbnRz IHN3b3Jkcw== IE91dHB1dFN0cmVhbQ== IGhlYXJz IFNQQUNF LWluc3BpcmVk X2Jvb3Q= Lm5vbmU= LmdldElucHV0U3RyZWFt IGRldmlzZQ== IHBlZGlhdHJpYw== YW5zaQ== X3BhcnRpYWw= IHNoYXJk IGZ1cmlvdXM= IGRyYXdhYmxl JSku KGVt IEJha2U= CXBlcnJvcg== IFJlbGlnaW91cw== LSIr CQkJICAgICAgICAgICA= IFNlY3JldHM= KG5vcm1hbA== QUNFUw== IFN0b2NraG9sbQ== LW5vcm1hbA== IGFjY3VzdG9tZWQ= IGJvdXRpcXVl IFN3aW5n IGZpbQ== IFBV LlNvY2tldA== ICciJw== YW5q TWFudWFs IG11amVy IHBoeXNpb2xvZ2ljYWw= Y29udGFpbg== TWVyZ2U= IHN1YXM= ICd7Ig== bmVnbw== IHN1YnNjcmliZWQ= dG9hc3Q= X1ZFUkJPU0U= IGtuaXQ= IEFydGlzdHM= IGhlYXJ0YmVhdA== IGZpcmVmaWdodGVycw== c3Nh W3s= IHVuZGVyc2NvcmU= IGhpc3Rvcmllcw== aWdtb2lk RmllbGRWYWx1ZQ== VG9BZGQ= LkNv IEhhcm9sZA== QXZvaWQ= aWdoYm91cnM= b3JkZQ== IHRydXRocw== L2Fs IHdpcmVk IEl0YWxpYQ== IHNlcnZpY2lvcw== IEFVRElP ICciKw== IHB1bXBpbmc= IENsZW1lbnQ= w4NP 5Y6f Pm4= IHN0clNxbA== amRiYw== 4oE= CVNFVA== IEJVRkZFUg== Oi8vIg== IGNpcmN1bXN0YW5jZQ== VUlUYWJsZVZpZXdDZWxs LnZlcnRpY2Fs IEpvaG5z dG9saXN0 IGRyaXZld2F5 IGxlYXJuZXJz dG9iZXI= d2lubmVy LXlvdXI= LnN0YXRlcw== SE0= IGdyYWRpZW50cw== IHNlaXp1cmU= IG1hdGVy IGRldGFs IFJlZHVjZQ== KG1vdXNl IFJlU2hhcnBlcg== LXJvdXRpbmc= INi0 IGpvaW50bHk= IEZhbWls PE1lc3NhZ2U= ZXhwaXJl X3RyYWRl 4oCmLi4= IEZVTkNUSU9OUw== IHhlbg== IHt9Ow== RmFi IGZlYXN0 KERi Rmlyc3RSZXNwb25kZXI= xLFsxLE= IG1heFZhbHVl IC06 YXB0aWM= Lkdzb24= IFJvdmVy X2Nu bG91ZA== IGNoYW1iZXJz INC30LDQtA== LmZvcmVhY2g= LmdldEVtYWls 55+l Lk5vZGVz IFZX IFdhaXRpbmc= KFF0Q29yZQ== IHPDs2xv cnE= YW5ndWFyZA== IHJlc2VtYmxlcw== Oltb IGdlZA== X0VQ KEFjdGl2aXR5 IElzbg== IENydXNoZXJz X1JVTlRJTUU= CW9wZW4= IEhpZ2hsaWdodHM= w6lyYXRpb24= IHllbGxpbmc= IExJR0hU UGhvdA== dmVuZ2U= IFN1c3A= IENocg== LkRpc3RhbmNl YXJzaW1w bGljYXM= Lk1vbg== IHN1Y2tlZA== cHJpbnRlZA== bXV0ZQ== IHNldEVycm9y Lk9wdGlvbg== IGltcGFpcm1lbnQ= bm9pc2U= IHBhcnRuZXJlZA== w40= ZGVucw== aWN6 IHdhaXRGb3I= IG92ZXJsb29raW5n IEZPUk1BVA== IFRTdHJpbmc= IHJlbnRpbmc= CWNvbXBvbmVudA== LkZyZWU= IExhdW5jaGVy PWRhdGU= IFBvZHM= QUdNRU5U Q29kaWdv Qml0RmllbGRz IHViaXF1 LWNhcm91c2Vs IFNpbXVsYXRvcg== aW5vZGU= J10pewo= IEJhZ2hk IG5vcnRod2VzdA== aHRha2luZw== PCY= IHRyYW0= IGZvcndhcmRlZA== IGVycm9yTXNn X0FTU0lHTg== IEVudGl0aWVz LlBhcnQ= cmVhdHVyZQ== KFVyaQ== IERyaXZpbmc= IGludmFzaXZl aWdyYXRpb25CdWlsZGVy b3NhdXJz CXBvcnQ= IGJyYW4= aXR0aW5ncw== RG9vcg== IHsl KGxpbWl0 IHNxdWFyZWQ= IERJU1BMQVk= LkFjY2VwdA== LmJhc2VVcmw= LkVudGVy IC4uLikK IG93bA== IHNsYXRlZA== LmZlY2hh X1NFRw== PXsk IE9OTElORQ== T05Z INC00LDQvdC90YvRhQ== b250ZQ== X0NMSUNL U2E= SW1wb3J0YW50 IGNhcm91c2Vs IGFwcGVhbGVk IE5pZQ== L2Jvb2s= W10+KA== IHhtYXg= IGxhbmdl LlN1cHByZXNz IFRoaW5raW5n QWRkcmVzc2Vz IFNhbGx5 LVRW IENoYXJsZXN0b24= KSIKCg== IHRhbGx5 IHVsbA== IGxvY2FsZXM= ZXdhbg== IGluY3JlbWVudGFs 65Cc IGNhcmV0 anVyZQ== IGRvcg== IGxvY2FsaXphdGlvbg== IHNlYWZvb2Q= IFJ1YmJlcg== LlRoZXJl IEZpc2hpbmc= WVlZ bWFnZQ== IEZsZXhpYmxl IEdFTkVSQUw= ZWth IHRocml2aW5n IHNpcw== IGJvdXJnZW9pcw== RmFrZQ== LFwi INC+0LQ= Q09S LWVmZmVjdGl2ZQ== IHNrdQ== ZWRseQ== IyMKCg== IEhvbGx5 IEZMQVNI L1RS Lm5z cHJvYmU= Z2lmdA== b3dpdHo= LW5hdmJhcg== IHNhY2s= 57qn IFRocmVhdA== WkE= WE0= JyksCgo= IExMVk0= YXN6 RWRpdGVk V2l0aFN0cmluZw== U2lsdmVy eW5h X3JlbmRlcmVy CURFQlVH KG9wZXJhdGlvbg== IFNsb3Rz IEF1YnVybg== eGVj IGhvbW9zZXh1YWxpdHk= LlJlc3RDb250cm9sbGVy ZXJzaXZl IHByb2ZpbA== IE15YW5tYXI= cm9zc2U= X0lSUW4= IHNlbmRNZXNzYWdl IHRlY2huaWNpYW5z IG1hbmU= Y29tbW9ucw== IHNocmVkZA== Qm9vc3Q= IHN5bXBhdGhldGlj LWVmZg== IENlcnRhaW5seQ== IHfDpGg= IFJvY2hlc3Rlcg== dWNjaQ== dXJt ZW1wb3I= ICIiOgo= LXNwYWNpbmc= IHNpeHR5 IOKckw== X3JlcG9ydGluZw== V2ls b3lv IGRpZFNlbGVjdA== LmdldExvbmc= LnNldEVycm9y X25j IERvbmc= CWFzeW5j IEhpZ2hseQ== XToNCg== TGVha3M= LC4uLgo= dmFsdWF0b3I= ZGljdGlvbnM= b3hlbA== IGdlc3R1cmVz PSI/ YmFncw== IFJlbGllZg== c3Vic2V0ZXE= KG5hbWVzcGFjZQ== fXw= IG1pY3JvYmk= IHB1cml0eQ== Y2hpbw== fT8= X01VVA== X2FjdGl2YXRpb24= IFBpcmF0ZXM= ICUj aWZpY2FjacOzbg== 5Ys= IE5SQQ== w6dvbg== fSkoKTsK IENoZXN0ZXI= 4oCT4oCT Z2V0Q29ubmVjdGlvbg== LmFyZ3VtZW50cw== RmV0Y2hpbmc= IEZyeQ== IERpdA== IHppY2g= cGFzdA== LWxpYnJhcnk= IEhheWVz IGJvdW50eQ== IFNwcmluZ2ZpZWxk UE9S IEFQUg== IEVtYmFzc3k= UVVFU1RJT04= IFNvbGRpZXI= ZXJ0YXM= IE5PUk1BTA== IGR1cw== Ym9sdA== IGRvcnQ= IExpZnQ= IGdldFJhbmRvbQ== LlJ1bldpdGg= LCksCg== IHZhcmFyZ2lu IGhhbmRsZUNsaWNr XEh0bWw= IGhvbW1lcw== Y2lkYWRl KGVw SmE= L2RpYWxvZw== LnJhdGU= IFdlaQ== ZnVsbHNjcmVlbg== IE5Vbml0 Lm1lYXN1cmU= VmFscw== IFNpZ25lZA== IHJ1cw== IHJhZnQ= IEJsb25kZQ== IG5ldHM= IE1ldHJpYw== aWNoVGV4dEJveA== IHVyZQ== IGludGVycmFjaWFs ICd9Cg== KHN0b3JhZ2U= SW50ZWdyYXRpb24= IGJhbmNv QVNZ IGppbnQ= IGRlZ3JhZGF0aW9u IEhBTkQ= dWVyZG8= PScn IHN0cm9rZXM= cmV3cml0ZQ== KFNldA== IE1hdERpYWxvZw== IGRvc3NpZXI= CWFuZA== QURESU5H IG11dHVhbGx5 IHByZWNlZGVk fX07Cg== IHN1YnR5cGU= IHJlc29sdmluZw== IGdlb21ldHJpYw== W2NvbHVtbg== IENUUkw= IEhM IGRhaA== ICg7Ow== UmFpbHM= w5w= IEdlbmVyYXRlcw== LUxlbmd0aA== cGVkbw== b2dlbm91cw== IFJvYmVydHNvbg== LkJvb2w= b2RlcnM= X0FHRU5U cGFzc3dk IE5vZGVz LmJp IFdC IHByb3BoZXQ= c2xhdmU= IOW8 IHdlaWw= JTwv IGNhcmJz 5rC0 IGV4cHJlc3NseQ== XHhk LWV5ZWQ= IENyZWF0dXJl Y29udGFpbmVk KFNJRw== IEVuaGFuY2VtZW50 IENvcnM= R2Fs X1NJR05BTA== cmVpbnRlcnByZXQ= IFFQdXNoQnV0dG9u X05vbmU= IGdlbm9jaWRl IFNlYWw= 5LiK5Lyg KHBlcg== 0LvRjNGC IMOgcw== LlRlbXBsYXRl ICkNCg0K LnNpbmdsZXRvbg== CXNsZWVw IHNwYXduZWQ= IHBvc3Nlc3Npb25z Z2V0Q29uZmln IHRhaQ== bHVkZQ== IE1ldGVy IGJpYmxpY2Fs bWFyc2hhbGxlcg== LlRvb2xraXQ= IExlc2JpYW4= LnNtYXJ0 IGJveWNvdHQ= IGZyeQ== LWRlc2M= X1NlcnZpY2U= IG1hY2h0 IENhaXJv w6Bp X3ByZXZpb3Vz LnRyYW5zcG9ydA== TWVkaWNhbA== Q0dQb2ludA== UVVBUkU= IGJyaWdodGVy IGNoZWNrQm94 IEZPVU5E LmJyYW5jaA== IGJsYWg= IFByZWx1ZGU= T2ZmbGluZQ== TGlzdGluZw== LyoqLyou IEpS cGhhbnRz Z2V0WQ== LkZpbmRDb250cm9s Ii4uLg== 0LrQtQ== SFJFU1VMVA== IGNoZWNrbGlzdA== KGFzdA== IGJvcnJvd2luZw== 4oCmYW5k INCX IHByb2N1cmVtZW50 LXRhc2s= X2hhbA== UGxheWxpc3Q= LnN0YXI= X1NVUFBPUlRFRA== QVNN JUE= cmVzdHJpYWw= INC40YHQvw== IHBhZ2Vy IERpYWJldGVz IE1haGFy dGFu QWN0dWFsbHk= Pi8v IFhW 4KeN IHNlamE= LnZpc3VhbA== a2tlcg== XTsKCgo= IHR5cGVOYW1l LkJ1dA== Q2xpZW50UmVjdA== aWNhbHM= IERqYW5nbw== IFJhcGU= IHBheWRheQ== KHJlc291cmNlcw== LmJpeg== dG9p KFJ1bnRpbWU= IER5bmFtaWNz IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24= KHR5cGVz IFRhYnM= Lk1pZGRsZUxlZnQ= eGFi IF8o IERyZWFtcw== X0dyb3Vw KGNvcg== TGVhZGVy IGdyYWR1YWw= KEJpZ0RlY2ltYWw= IHRleHRhcmVh bGV0aW9u IEZpbmlzaGVk IFBvbGU= IHRhcHBpbmc= Jig= IGZsaXJ0 IHRlcnJpZmllZA== IHBhZHk= ZXJlZw== ZWxkb20= IHN0YXRpb25hcnk= IHBvbnk= IFJFR0lTVEVS X2FjY2Vs IEhlcno= IG1hdHJpeg== IENhZg== eGFj YXNjdXM= IGVubGFyZ2U= QUNIRUQ= eXl2YWw= IHNpYw== IENhbmFs OnY= PT8s IEltcHJvdmVtZW50 P30iLA== TlNPYmplY3Q= IGVzY2FwaW5n IE51bGxhYmxl IGjDpA== d2FudA== RWxpbWluYXI= IENMTG9jYXRpb24= IHJldXNlSWRlbnRpZmllcg== QnVmZmVyU2l6ZQ== w59lcg== IEFza2Vk J11dLAo= IHNoaWVsZHM= Z3JhbmQ= IFRvd25zaGlw IFB1Yk1lZA== ZWN0bA== Zml2ZQ== IFJlYWN0aXZlRm9ybXNNb2R1bGU= IEdMZW51bQ== RGFy aWZhY2U= LWluZGVudA== Rm9ybXVsYQ== LnNuYXBzaG90 Q09NUEFSRQ== IGJlbHRz CWNhY2hl bGRhdGE= IGVkYWQ= IEJPWA== KGNhcnQ= X0xBWU9VVA== IGZmbHVzaA== IExPUw== IFNvcnRlZA== LnNsaWRl IHRpamQ= IFRleGFucw== IFB1cmNo IExldmVscw== IHNlbWFudGljcw== IFRlaHJhbg== Ym1w LnVybGVuY29kZWQ= X3hsYWJlbA== KGd1bHA= IEJ1dHRvbnM= IEJyb2tlcg== 55uR5ZCs JGVtYWls 2ZA= IGNsYXNzaWNz Y29tcG9zZQ== KGJz IHVuaGVhbHRoeQ== RXhlcmNpc2U= Y3JldHM= IFBhcnM= IERldGVybWluZXM= YWZvcnQ= KG9icw== IG5hc3Q= IGlocmVu IHJveWFsdHk= c2VyaWFsaXplcg== aWV1eA== ICAgICAgICAgICAgICAgICAgICAgIAo= ZXhlY3V0aW9u IHZpZXdDb250cm9sbGVy IHJlcHJv LnBl IGNhcGl0YWxpemU= 5Ye7 IHR1bm5lbHM= LkRBVEE= cGlyaXQ= Q29sbGVjdGlvbnM= KX19 IE9E IGZ1enp5 SW1tZWRpYXRl bGo= Oz8+Ig== W3Zhcg== IHZvbGF0aWxpdHk= cmVnbG8= IHByb2xpZmVyYXRpb24= IG9yYWNsZQ== IEN2 IG51bmNh UFJJTlRG IGJyZWFrcG9pbnQ= LkVO IGJlc3Rlbg== IHJlYmVsbGlvbg== UGF1c2Vk IGZsb3du IHZpY2luaXR5 d3JpZ2h0 LGNw aXNjaW5n b3VjaGVycw== QXNo eWFy IEVq cmVwcmVzZW50ZWQ= b2RpYw== LmNyb3Nz IGNyZWF0aW9ucw== IFBhYmxv ZmVzdA== IEhpbHRvbg== UmVwb3J0ZXI= IERpbA== aWxlbmFtZXM= IGV4cGVuZGl0dXJlcw== X0VESVRPUg== IEFyaWFs IHBsdW5n IHVubmFtZWQ= T3JFbHNl IHJlY3JlYXRl IEhlYXJ0cw== PmFsZXJ0 LmdldFBhc3N3b3Jk IE11c3Rhbmc= Vks= IGFjY29tcGxpc2htZW50cw== QXBwZW5kaW5n IENheQ== IFVzZXJNb2RlbA== IHN1YnN5c3RlbQ== TGVnYWw= eW5jaHJvbml6ZQ== X1BFUk1JU1NJT04= IEFwYXJ0bWVudA== bGlnZQ== IGFmZmlsaWF0aW9u KERFQlVH VHM= IENvbG9yaW5n IFdvaG4= bmljZQ== KGxpc3Rh 4LE= cGxveW1lbnQ= 44G+44Gf 5aW9 c3Vic3Q= J11dWyc= YWJvbA== PSdf 4KeN4KY= b3JwaGlzbQ== LmxpdGVyYWw= IFBsdWc= IG13 b21hbA== ICInIiw= dXNp IHNpZ2hlZA== aWN1bHR1cmFs Lios IFByb3N0aXQ= KGNvbnNvbGU= SVBMRQ== IFRyYXA= WFI= IEVkaXRvckdVSUxheW91dA== X3ZvY2Fi IGluY29tcGF0aWJsZQ== IHVuY29uc3RpdHV0aW9uYWw= LWxh IGVyb3RpcXVl IGRlcHV0aWVz cXVpc2l0aW9ucw== bmV3VmFsdWU= YWRpYQ== IGh3bmQ= Z2luZ3M= IFZhcw== IEluY3JlbWVudA== IEZsaW50 YW1iaWE= X1BvaW50 LWRpc3BsYXk= IEZ1bm55 LnRvYXN0 LmRhcms= QmluZGluZ3M= IGRlc2NyaXB0aXZl YXJlbmQ= LlJldA== IHJlY3Vyc2l2ZWx5 IE1r IFRJTEU= LmNyZWF0ZVRleHROb2Rl IFJBVw== IGluZmx1eA== 54mp VG9r LWJvYXJk UmVjb3JkaW5n U3RyZW5ndGg= IHJhaW5mYWxs KGRk LmZ4bWw= bmV0cw== LkltYWdpbmc= IEJJT1M= XSsi T0U= IHJlc2lkZW5jeQ== WkU= V0I= LnNwYW4= X2RlZmluZWQ= Qk9U Pm51bGw= Zm9ybURhdGE= Q3BwTWV0aG9kSW5pdGlhbGl6ZWQ= X1VTRVJT IE5vdmVs aW5za2k= PntA ZXR0bw== bmF0dXJhbA== IFN0cmljdA== Onc= LnNhZmU= IHRvd2Vscw== 4bqtdA== LmdzdWI= 66M= aW5xdQ== IGFpZGVz IGluY29t Z2V0dGVy IHdhc2hlcg== YWN0b3JpZXM= IGdldHRlcnM= bWl0ZQ== X3NvdXJjZXM= IGhhcm1sZXNz IHVub3M= cHJlaGVuc2l2ZQ== IG5vZG8= IGdlb2dyYXBoaWNhbA== IFNlbGVjdExpc3Q= LlNjcmlwdA== LkVudW1z IEVOVEVS d2FsZA== IEJhcm9u IHBhcnRpY3Vs LmN1cnJlbnRQYWdl QFRyYW5zYWN0aW9uYWw= W2xpbmU= CWRlcw== SmFzb24= LmdldENvdW50 IFBlbm55 IFBheWxvYWQ= c2hhcnA= W3JpZ2h0 dmVudGE= IGFwbA== IHByb2R1aXRz IG90dA== VHJhY2tz LkFuZHJvaWQ= IHNpbGljb25l IEVMU0U= YW5pbWF0aW9ucw== dWx0dXJlSW5mbw== IGJsdWVwcmludA== b2ZzdHJlYW0= IFtdW10= IFNlcnZl IHRyaWc= CXNlcnZpY2U= IFN0cmF0 IFNhdmFnZQ== IG9ianM= IE5vdGlmaWNhdGlvbnM= LHBvcw== VGhpbmc= IFJCSQ== b3BhdGh5 IG5hdWdodHk= bGJz ZXByb20= PiIu IHBpb25lZXI= IGphcGFuZXNl QXVk IGFsbGV5 IFBldHNj J10/Pg== IEtpbGxlcg== LmdldEFic29sdXRlUGF0aA== X2NhcHM= xas= IHN1YnN0cmF0ZQ== LmFzc2VydElu 7JWE IHRoeXJvaWQ= IERlbHV4ZQ== IGZhY3RvcmlhbA== IHByZXNzZXM= IEFjY29t PW9wZW4= LmdldFM= IGV4cGxvcmVy IHJlc2lkZXM= QXNzb2NpYXRlZA== IHRyYW5zZm9ybWF0aW9ucw== VHU= IFJpY2hhcmRz X2JpcnRo PSN7 LXNwZQ== KG5k IHZpc3VhbHM= X3N0YW1w IHRlcm1pbmFscw== cm91dGluZQ== KioqLwo= IEphYg== S0w= Q29udHJpYg== IHNvdXRod2VzdA== IFBlcA== CWVudGl0eQ== IGxpbmVy LlN0YXR1c09L IFNjaHVs KENM IG1pam4= YXN0b3M= X2RpZ2VzdA== IHBlcnNpc3RlZA== LWNvbnRhY3Q= IG9kb3I= IGRpc2NvdmVyaWVz X0ZJRUxEUw== Rmx5 IHJ6 IExpc3Rh UmVzZXJ2ZWQ= dGF4b25vbXk= KXNlY3Rpb24= LyIpCg== L3JlcXVlc3Q= IHNvbWVkYXk= Y2l0aWVz L2ZpcmU= IG9iamVjdGlvbnM= CURFQ0xBUkU= Lm5hdmlnYXRpb25JdGVt LnNldGRlZmF1bHQ= cmV0dXJuVmFsdWU= VUNDRUVERUQ= IG9ibGlnZWQ= IFFhZWRh IGh5c3Rlcg== ZXN0aGVz ZGlzdGluY3Q= w6B5 IENvbWJv CXNm IOKK IGRpc2NyZXBhbg== IGluc2lnbg== IFJFU1VMVFM= IFZhbGlkYXRpb25FcnJvcg== IEh0dHBSZXNwb25zZVJlZGlyZWN0 CVFTdHJpbmc= IGF1dG9mb2N1cw== RHVy IFJFTEVBU0U= LWRvbGxhcg== LkNvbW1pdA== IGtow7RuZw== IGxhdW5kZXI= Lj0i IOaWhw== IGJ5ZQ== LkdldEtleURvd24= IGdpbw== X3NpZA== IGdxbA== LmNt X1NMT1Q= LkdldEluc3RhbmNl cmV1c2U= LnNodXRkb3du IGplcnNleXM= X01Q cGF0aWJpbGl0eQ== IOiuvue9rg== IHJlcGxhY2VtZW50cw== IHByZWNlZGVuY2U= IGJ1ZmZlcmVk LmJz X0dSRUVO YnJhaW4= w6FjaA== YXZhaWxhYmlsaXR5 IEVURg== IGZyZXQ= aXN0aW5l IGxpZnRz RXhpc3Rpbmc= IHN0ZXJlb3R5cGVz IGVtcHQ= bW9uZ28= LnRyYWluaW5n YWxpc3Q= LklzRW5hYmxlZA== ICIh PD8K dWlkbw== IGludFZhbHVl LmVsYXN0aWNzZWFyY2g= TE9HSU4= IHJlbGlhbmNl IHZpZXdUeXBl IGRpbWluaXNoZWQ= U2FyYWg= IEFwcHJvYWNo X1dFQg== IGRybQ== IGNvbHVtbmlzdA== TWFya3Vw IGFxdcOt IERpYW5l IGN3 IFRpY2s= Lm9ic2VydmU= SVJPTg== SW5CYWNrZ3JvdW5k IGVib255 IENvdXJ0ZXN5 Om51bGw= KioqKioqKi8KCg== L3Jlc291cmNl SXRlcmF0aW9u ZGVmYXVsdFZhbHVl YXR0ZW50aW9u INGA0LDQsdC+0YI= IHdhaXZlcg== IHByb2R1aXQ= IEdyYWRpZW50 IHBlcmNlbnRhZ2Vz IFNBTA== IE1k KHNuYXBzaG90 CWlv aWtlcnM= V2VicGFjaw== IHNldFBhc3N3b3Jk IGRlZmVhdGluZw== IEplZw== ZWxhcHNlZA== aG9sZHM= X3NoYWRvdw== IG9mZmVuZGVk IFBhbnQ= IENhbGxhYmxl X0lORk9STUFUSU9O ZmZlZQ== KGVtcGxveWVl IFlBTUw= cG9zc2libHk= IG1heGltYWw= ZWxsdWxhcg== IFNueWRlcg== ZGVzY3JpcHRvcg== IFBMRUFTRQ== RGxnSXRlbQ== IGFydGlsbGVyeQ== YH0K cG9zaXVt IGxlZXI= JWM= IGRpc3Bvcw== Lm11bA== IGdlb2dyYXBoeQ== IGdyYXBoaWNhbA== IGRyYW5r IG1vdGlvbnM= IHJ1dGg= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IHByb2R1Y3Rpb25z IGNyZWF0ZVRpbWU= IFNjcmlwdHVyZQ== YmJi dWNocw== 5LiN6IO9 LkJpZ0RlY2ltYWw= c2l6ZXM= X3NvbHZlcg== X0Zyb20= X2pvaW50 IHBhdGhsaWI= IGdlYXJz INGE0L7RgNC8 IGNvbmNlYWw= IGRpZmZlcmVudGlhdGU= PEdhbWVPYmplY3Q= IGplZGVu IGFsbw== Z2xvYmFscw== ZXJ2YXRpdmU= IHBhZGQ= IFBseQ== X3R5 IHByZXNlbnRl IHByb3ByaWV0 X2xz IFB1bmNo IENyYXdmb3Jk YmVsb3c= Q3BwR2VuZXJpYw== IENPTlRST0w= IG9jZWFucw== IFJPVVQ= IHJhbmRpbnQ= CWFkZHI= IEhvbmVzdA== IGVudmVsb3A= IHRyYXVtYXRpYw== IExBVA== IHRn 7Iqk7Yq4 RXh0ZW5kZWQ= IHVuY2hlY2tlZA== IG9ic3RydWN0 X3RpbWV6b25l UGVyc2lzdGVudA== IGxsZXY= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= IEZsYQ== LnBoeXNpY3M= IGZvcmdlZA== IExhdXI= IG1vbm9wb2x5 IGNocmlzdG1hcw== Z292 IFNtb2tl W2Rm IGJpc2hvcA== bG9jYWxPYmplY3Q= b3JyaA== b250dmFuZ3N0 ZHJ5 IGVyZm9s LWNl IE9yZGVyZWREaWN0 IGh4 IFJFU0VU U3Vj IHJlY2tsZXNz YWxhbWF0 QmlnSW50ZWdlcg== IGJ1bGJz IG11dGU= 5pS+ LlVsdHJh TG9u IGNsZWFyVGltZW91dA== PFJpZ2lkYm9keQ== c3dpcGVy IENvbWVz XGRi CW1w IHJlc3Rz TW92ZWQ= IExvcmU= LkRpbWVuc2lvbg== IE1hbml0 Lmh4eA== PT09PT09PQ== cGl0Y2g= ZmZpZWxk c2tpbGxz X2FsYnVt dHJhbnNsYXRlZA== IFhJ IHZlaW4= IERhdmlkc29u IEF1Y2tsYW5k eXNzZXk= IGF1dGhlbnRpY2l0eQ== IEFzc2lzdA== IGNvbXByaXNl Q3JlYXRlVGltZQ== IHRyZW5jaA== LndlZWs= LS07 IFVJQWxlcnRDb250cm9sbGVy X3JlbGF0ZWQ= Q01T cmVtZWx5 IGxleGVy aXJtd2FyZQ== RWxlbWVudHNCeQ== LXVwcGVy IHN0YWdu LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== X3NuYXBzaG90 L1hNTFNjaGVtYQ== X09yZGVy IGFubmV4 X0VOQ09E IEFsdG8= YXJpb3Vz REo= IGFib3J0aW9ucw== Q29tYmF0 IExpY2VuY2U= dWdnZXN0ZWQ= W0s= LCkpCg== KCcvLw== LkNhbg== c2Vjcw== cXVvdGVz X3RyeQ== IFNhZ2U= IE1vdg== J29u cmVnaXN0 IFdyaXRlcw== IERpZ2VzdA== CWNvbnRhaW5lcg== LXByb2dyZXNz IGdvYXQ= X3NjaGVtZQ== LkdldENoaWxk IGFzeW0= Lm15YmF0aXNwbHVz YXRpY2E= cGdzcWw= X2Fzc2V0cw== Pks= IGFmaW4= TlNT IE5BVg== KCcuJyw= IGAi IGF1ZGl0b3I= X01PVVNF IHdhbGxldHM= IG1vdQ== cnVucw== ZXRlcmFuZ2Fu IFJlc2VydmF0aW9u IGV4cGVyaWVuY2lh CXByb2Nlc3M= LWltcG9ydA== X1JldHVybg== IE1hY3Jv IFBlbmlz cGl4ZWxz IHNldEVtYWls KE1pZ3JhdGlvbkJ1aWxkZXI= KHhz IEVzdG9u IEJ1YmJsZQ== QUxMT1c= CWhhbmRsZXI= JHJldA== IGNvbXBsaW1lbnRhcnk= LWNpdHk= IGVsbG9z IFNPVVJDRQ== IEFkdmlzb3I= b2xvZ8OtYQ== IGZhZGVk LnBj X1JHQkE= QUZY IHJlcGF5 IEZhbGNvbnM= X2lzc3Vl b21pZG91 LmJhb21pZG91 IGluZnJpbmdlbWVudA== dXJuaW5n L3N0b3JhZ2U= X3F1YW50 IFF0Q29yZQ== IG1lbGw= X2RlbnNpdHk= IEtub3g= IFN1cnZpdmFs LmdldFVzZXJuYW1l IGNvbW1lcmNpYWxseQ== Z3Jhc3M= IG1laXM= 5Lq/ IFBlcm1pc3Npb25z X1FVT1RFUw== aXBob25l IExPVA== IHRocmlsbGVy IENoYXBlbA== IFJpcw== Pmk= LUlE IHJpZ2h0bHk= Q3J5cHQ= IElzdGFuYnVs cmVkcw== X3Jlc2l6ZQ== UG9wdWxhdGlvbg== KGZldGNo IEhPVA== OmZpcnN0 IGdhZGdldHM= UHlPYmplY3Q= IG1lcmdpbmc= ZHVjZWQ= bGVnYXRlcw== dWJlY3Rs JS8= YWxsZWU= IHp1c2FtbWVu LlByb3BUeXBlcw== YXN0bw== Oio= cmVjZQ== UmVzcG9uc2VUeXBl L2dyb3Vw IGJhcmJhcg== IENhcm9saW5l b3VyY2Vk 57uP IGx1YnJpYw== aW5zcGVjdGlvbg== YW1tYWQ= CUltYWdl IGllcnI= IGN1cnRhaW5z X0FSQg== IE9yYWw= IGFsbGllZA== IFN0YXR1c0NvZGU= IENsZWFybHk= UHJlZmVycmVkU2l6ZQ== cXVpbmE= IHNwb3M= IG9wdGltaXNt IGNvbXByYXI= IGx1Zw== IEJvb20= Y29uZmlybWF0aW9u X0RVUkFUSU9O X2Jyb3dzZXI= IHJlcGV0aXRpb24= IGtlZXBlcg== IGFkZFRv KGpz LlN0YXQ= LkNvbmQ= IEhlcm5hbmRleg== cGFxdWU= IHZvbHVudGFyaWx5 IGplcms= IExleQ== IGRvY3VtZW50bw== X2RlYWQ= IFRFQ0g= IGluY2VwdGlvbg== KCJ7fQ== IG9uTG9hZA== eGRk IElTUA== c3BlY2lmaWVk IOusuA== UFJPQ0VTUw== KGFsZXJ0 Lk1N IGNyZWF0ZVN0b3Jl KHVuaXF1ZQ== LmdldEJsb2Nr 656Y dW5vcw== IHRyb3BoaWVz X2hvdmVy IERhZGR5 Lk1l IENPVVI= T0JK YXRlbWFsYQ== IFBzaQ== IG5vcm1hbHM= YWNpZXI= IE1CQQ== IHBhd24= z4U= IHNwb250YW5lb3Vz IGF1eGlsaWFyeQ== IGluYXVndXJhbA== IGZhc3Rpbmc= IEZpbGVTeXN0ZW0= IHplbg== X0JMVUU= IHN1YnRyZWU= IHByZXByb2Nlc3M= LXRyYWNr Q2hhcmxlcw== IGRlcG9zaXRlZA== IHF1ZXJ5UGFyYW1z 0L7Qu9GM0LrQvg== aWVtYnJl IHByYXc= eEZD IHBhbmM= X25vbQ== aGVyb2Vz Lmphdg== OjokXw== INin2YTZhQ== U0dsb2JhbA== 5o+P6L+w PXRlbXA= ZXN0aQ== IGNvbnN0cnVjdGl2ZQ== IFNoaW0= IERpcmVjdGlvbnM= IEJpbmc= ZGlydHk= LXJ1bm5pbmc= X2ZpbGVwYXRo b3JkZXJJZA== Z2FyZA== X29yaWVudA== IHNjb3V0 IHBzeWNob2xvZ2lzdA== 7LY= IOWt ZGVxdWU= IEhlcm1pb25l IFBvd2VyUG9pbnQ= IGVsbGE= IFVJQmFyQnV0dG9uSXRlbQ== U3Vidmlld3M= QFJlcG9zaXRvcnk= IiIiCgoK IHJldG91cg== IGNpcmNh R3JhcGhpYw== IEdyYXR1aXQ= ZGR5 IHRlY2huaWNpYW4= IENsZWFudXA= IHBlcnNvbm5l IHJlc2lu Lk11bHQ= JG0= IE9yY2hlc3RyYQ== IHdoZWVsY2hhaXI= LlND CUdhbWVPYmplY3Q= IG1vxbxl T3BlbmVk IGNoaWNrZW5z b3Rhcw== X3RlbXBlcmF0dXJl IGRldGVjdGluZw== IGFjcXVhaW50 IDw/PSQ= Pl0= IG1lbnN0cg== IGR5ZQ== Um9ib3Rv LnVuaXRz IFZpbnls Y3VyYQ== cnlwdG9u ZWRk PXRlc3Q= IHRyb3Y= Q29uZmlybWF0aW9u IHRoZW9sb2d5 IEhvbGRpbmdz dWF0aW5n UHJlZGljdA== W3VzZXI= IDon IFNlc3Nv cGFyZW50SWQ= Q29kZUF0 YWJibw== IFRyZXZvcg== IFF1aXQ= X3NoaXBwaW5n X1JB IGtsZWluZQ== 56Y= X0xhYmVs IE9tYXI= IEdSRUVO LykK cm9r IHJvYXN0ZWQ= X1JU IOKAjg== QFJ1bldpdGg= Pk5O IHRhbmQ= Kycu Y3J1ZA== LmtleWJvYXJk YXN0ZXJ5 QkFE IENvbHVtbnM= LkNvbXBhbnk= IHNlbWluYXI= IGdldENvbnRlbnRQYW5l IGNhdGFzdHJvcGhpYw== IGVtYnJvaWQ= aWF0aXZl IGNydWVsdHk= Ymlz IGluc2U= IEJyb2tlbg== CWZz IG1WaWV3 0LDRhtC40Lg= LWZhY2Vib29r IGNhY2hlcw== 44CC44CCCgo= IE9STQ== IERpc3RyaWI= IFNjZW5lTWFuYWdlcg== X3RyYW5zaXRpb24= b21leg== IFNIRQ== IHdvcmtsb2Fk U3VwcG9ydGVkRXhjZXB0aW9u IHJpZXM= IOWc KGNhdA== SGFzTWF4TGVuZ3Ro QXBwcw== LlRBQkxF IEtleVZhbHVlUGFpcg== ZWRpZG8= LlJlbmRlcmluZw== IGVsZWN0cm9t IGFyYml0cmF0aW9u IHZhcmlhYmlsaXR5 YXBvbGxv IHV0bW9zdA== b3BlbnNzbA== IGjDpQ== KCcm LlN0YW5kYXJk IGRpc3RyYWN0aW9u aWZheA== IOuVjA== dGhvc2U= aXNwZW5z dmFr IFNVUA== IElzUGxhaW5PbGREYXRh LGtleQ== ZnJhZ2lzdGljcw== IEpveWNl IEZpYmVy LlNlcnZsZXRFeGNlcHRpb24= X0FsbA== IGJhY2tlcnM= IEF0dHJpYnV0ZUVycm9y ewoKCg== QHlhaG9v LWRpcmVjdG9yeQ== IHVuaW5zdGFsbA== IGZsdW9y bGlxdWlk IGzDoQ== IGZyaWdodGVuaW5n YWRhbg== IEFVVA== IHRhdHRvb3M= IHByb3BhZ2F0aW9u LnRyYW5zbGF0aW9u 0J/RgA== X3NjaGVkdWxlcg== 44CC4oCc IGNhaXJv IEh0dHBDbGllbnRNb2R1bGU= IE5EUA== IEhpdHM= IFRyYW5zZm9ybWF0aW9u IENhZXNhcg== c3RpbQ== IEJ1cnRvbg== d3lu IGNvbW1hbmRlZA== IENsb3RoaW5n IFJ1bnRpbWVPYmplY3Q= cmVhbGx5 Y2xh LnNh IFNoYW5ub24= IGNvbW1pc3Npb25z IEphbmV0 IGRpc2d1c3Rpbmc= IG9wdGltdW0= X3NvbA== dXJvbnM= IFNIQVJF QXR0cnM= IFNjaGU= IEJpZ051bWJlcg== IGNpZ2Fy KGRlcHRo IGZyYWM= IEN1cnZl TEFTVA== IFNDUklQVA== 6rO8 TWFsbG9j Lmdyb3VwYnk= IExlc2xpZQ== IHdoaWNoZXZlcg== U21hcnR5 L3dl IEFtcA== LGlu bG9wcw== ZGVwZW5kZW5jeQ== Y2VkdXJlcw== IGB7 eGljbw== Q29sbGVjdG9y IGhhYw== IERhcmtuZXNz ZmZmZmZmZmY= Jz0+Ig== IHBsZWFzaW5n Y29ubmVjdG9y em9z UENJ dmFj IEluY29ycG9y IG5lZA== X0ZBQ1RPUg== LmZi IG91bmNl X3NhdmVk INix IGRlZWRz IERvbHBoaW5z IGJ1ZW4= RVND LHRpbWU= X0FVVA== ZWNz IFNlbmF0b3Jz Lm91dGVy IFNlbGxpbmc= IHJpbg== PmAK Lm9ic2VydmFibGU= IGNvc3Rpbmc= REc= IHdpbmRpbmc= IHNrYQ== IGNpcmN1bGF0aW5n IGZvcm1pZGFibGU= YW1wbw== IFJhaXNlZA== IHZlZ2V0YXRpb24= VUZGSVg= S2lsbA== cHRpdmU= KHJ2 IENvdW50cmllcw== IE5ha2Vk IEpB KSkiCg== dWRhcw== IGJhcms= CWxldmVs IGZvZXM= PkFkZA== WW91VHViZQ== O3Q= TkNZ Q2x1Yg== RWlu LS0NCg== IGNvbnN0cmFpbmVk RVR3aXR0ZXI= WUc= RGVzY3JpcGNpb24= VU5DSA== IGVucXVldWU= IGRpc2tz IFdlbnQ= IG11aXQ= CWxvY2F0aW9u IHJldmlzaW9ucw== IEFDSw== LWZpeGVk dHJhc291bmQ= XFRlc3Q= U3RhcnRQb3NpdGlvbg== LWh0bWw= IHByb2JsZW1hcw== X0lOVEVSUlVQVA== IFNUT1JF 5qih aWxpYXRlZA== IFJQTQ== W3RlbXA= YWNodGVu IGNpYw== IEF1dG9tYXRpb24= IGhpZ2hz Lyg/ OicpCg== c3Bhcms= cmVscw== CW1vdg== VVRFUw== LkF1dGhvcml6YXRpb24= IFNjaG5laWRlcg== IGNoZWVrcw== YWRkcmVzc2Vz YXJkaW4= IHJlbW92YWJsZQ== LkJhZFJlcXVlc3Q= aWNpb25hcg== IERpZXNlbA== dGhhbg== L34= IGRhenU= UmVnaXN0cm8= ZmZp X0RMTA== IG5pZXU= IG1vaXN0dXI= LWV2ZW50cw== IHRocmlsbA== LmdldEVudGl0eQ== IHRvZ2c= IHdhdg== KWRpZA== YXRr KHN1YnN0cg== IEluamVjdGlvbg== X21i LkRpdg== IGVuZGVhdm9y ICjCow== IGNsdXR0ZXI= IHVyZ2VuY3k= IGluc3RydWN0b3Jz LScs LXN0YW5kYXJk Y2Vt CWhhbmRsZQ== LmZ0 U3RlcGhlbg== Um9u 44GZ44KL c2Np IEF0bW9z IGNhdGVyaW5n IGZpYXQ= LlBlcmNlbnQ= IENvbmdv eGRm Lm1vemlsbGE= IHNlaGVu LnNob3dUb2FzdA== T09U LXJlc3VsdA== zIE= IGdob3N0cw== IEJ1ZW4= IFJpZGVy IERvY3RvcnM= IHVyYW5pdW0= IGxvdWRseQ== IHBvaXNlZA== IGZhdm9ycw== KEFQ TEVZ IHNpY2tuZXNz IGNoYXR0ZQ== IGludGVncmF0aW5n IFl1cA== Q2xvc3VyZQ== IFRhbGVz IGxpbmVh IGV5ZWw= LkNyeXB0b2dyYXBoeQ== dW5leHBlY3RlZA== YWxlbWVudA== Y2l0 ZXRBZGRyZXNz TGVhZA== eGNk X25lZ2F0aXZl X2NvcnI= aWdyYXBo LWNoYW5uZWw= IGRpc2Nv U2VlZGVy YmVhbQ== X2Rw Q0ND IFByb3ZpZGVk IGpzb25EYXRh X1dI RklORQ== Qlg= LkRhdGFBY2Nlc3M= IHRlbXB0ZWQ= IGZpbmVk aXNDaGVja2Vk IGZyYXVkdWxlbnQ= RnJp IGRvbWlj UXVpeg== IFVuZGVyZ3JvdW5k YWJyYXM= IElEaXNwb3NhYmxl IFBlcnNvbmE= IHJvZ3Vl IEJleQ== Z2V0Q2xpZW50 ZWtlbg== ICcnJw0K V2lraQ== KEh0dHBTdGF0dXM= U3RyZXRjaA== IEdlc3Q= IO2VmA== IGVudGl0bGVtZW50 IGRvZW4= YmxvZ3M= IHZpdHJv Ik9o IFN1bW1vbg== IEJhY2tib25l IGfDvA== Z2V0Q29sdW1u IFdJTkFQSQ== CXZh X1JFUVVJUkVE LnRocm93 IHNldEN1cnJlbnQ= ZHVjdGVk KEZ1bmN0aW9u ZWxzaW5raQ== X1Blcg== ZmxpZXM= IGluY29tcGV0 IGp1xbw= KCkl IC0tLQo= dW1hcw== IE9sZGVy IGRpc3B1dGVk X1JFUVVJUkU= Lm1hdG11bA== dW5rZW4= 5LmL 44GL44KJ IHR0bA== dW5kZXJzY29yZQ== IFBhdHJpY2lh IHRhcGVy IHNlaW5lcg== IHNheWE= 5Y+w aWVyaQ== LnNlY3JldA== IHhvcg== IG1pdG9jaG9uZA== IGNhcmRib2FyZA== fWB9 LUJFR0lO IGRhdmlk b3Vsb3M= IFBldGVyc2J1cmc= ICIiLA0K c2hlbGY= LXdhdGVy LWJ5dGU= INC+0LHRitC10LrRgg== IHN0aXJyaW5n 7Je0 IGNvbXB0 IFBvdGVudGlhbA== UkFGVA== IGVhcHBseQ== IHN3aW5naW5n IGZlYw== QVJB IHdhbmRlcmluZw== IHByZWZlcnM= SmVzdXM= IHBpcmF0ZQ== IElzaXM= Lk1pbmltdW0= IFZhbGU= X0JU cmVuY2hlZA== Y29ycw== KGl0ZW1WaWV3 IGfDpQ== LkNvbnRhY3Q= Vmlld0NoaWxk aW5kc2F5 Y29uZmlncw== RHVwbGljYXRl 4oCmSQ== enlzdA== KHRvZG8= LlJlbW92ZUF0 X0RJRkY= IEJvdHRsZQ== IHZvbHRh dHJhZmZpYw== TGVl IOyk IHR1bmVz IEVjdWFkb3I= IFl1bg== IHVuZGVyd2VudA== aWNvbQ== ICcnKXsK LXBvbA== ZmxhbW1hdG9yeQ== TXV0YXRpb24= IHJlY2Fw X3ZlcnQ= T1RJT04= Q0RBVEE= aWNpbmU= X2JvdW5kYXJ5 U2NhbGFycw== IFVsdGltYXRlbHk= RVE= bWV0YWw= a3Nlcw== bXBs IGNvbnRlbg== U29sZA== RVNTQUdFUw== IGJpbmRlcg== IGxpbmVu IE15QXBw LW1ldGE= CXJhaXNl b3VsdHJ5 CW1vZHVsZQ== 5pi+56S6 bsOt IHlycw== IHBoeXNpYw== LXBsYXRmb3Jt IHN3aW5nZXJz KGhlYWRlcnM= Licp IEJV IEluY29udHJp U2NlbmFyaW8= QW1i IHByZW1pw6hyZQ== L2FydGljbGVz IE1ham9yaXR5 Q0xVU0lWRQ== b25vcg== IGhhYsOtYQ== 5bee IG1pZGk= IExhYw== LmZpbmRJbmRleA== IFBhaW50aW5n LmJvcmRlckNvbG9y Kmo= IGNvbmdlc3Rpb24= X0RJQ1Q= b2xsZQ== YXJuYXRpb24= KHRleHR1cmU= IHVm IEVpbnN0ZWlu KFRocmVhZA== IGluZG9vcnM= c2NyYXRjaA== IG1ha2Vu LlNUQVJU IEp1ZHk= Zm9ydW1z CgoKCgoKCgoK QklMRQ== IHZvdQ== TVlTUUw= IGdlcm5l IEltcG9ydEVycm9y IFN1cnJl PG5hdg== IERpZXNl ZXdhcmU= IOuqqA== aW1wbGVtZW50ZWQ= U0lHTg== ICd7QA== cnpl Lm1pbmVjcmFmdGZvcmdl LmlubmVySGVpZ2h0 YmVjaw== IGN1cnJ5 IGZvcm11bGFz YWdvZw== ZW5kZXQ= IFBhaWQ= IFJvYmVydG8= IHVucGFpZA== PWhlYWRlcnM= LlBvd2Vy IGJyZWQ= b3JFbHNl b3hpZGU= IGZpbmFsaXpl c2V0Q29sb3I= IFN0YWR0 KCdcXA== aXNtaWM= IGhlbGU= LlByb3RvY29s Lkhvc3Rpbmc= X01lbnU= X2NvbmRpdGlvbnM= IHB1cmdl LnhhbWw= YmFyZQ== RlJBTUU= IGN1YmVz IEpvaGFubmVz b2NyYXRz LkRpcmVjdG9yeQ== KWE= Pyk6 X0xJQlJBUlk= IGdldFRva2Vu IGVjaG9lZA== PWg= X3NvYw== IEV2YWx1YXRl IOq4sA== IERlbGV0ZWQ= RXU= IGNsb25lZA== c3RhdGlzdGljcw== LkNhbnZhcw== IGhhY2tlcg== IGdhbmdz LnJlc3VtZQ== cGVhY2U= 0JLQstC10LTQuNGC0LU= IFByb2NlZWRpbmdz 56U= IGphcGFu ID8+Pgo= ICR7KHs= LnJlY3RhbmdsZQ== Z3c= IE9yaWVudGF0aW9u JW0= LiIpKTsK IExpZXV0ZW5hbnQ= LnRydWU= IGVsdA== IERJUkVDVE9SWQ== zq8= LmRheXM= dXR0Z2FydA== IHVuZGVyd2Vhcg== LCkK Q0lE aW1lbGluZQ== IEJsZW5k cGhhc2lz IHBlcnNl IGdsaXR0ZXI= IHVuaXE= IENvbWJvQm94 IHNlc3Npb25JZA== dXN0ZXJpdHk= SURHRQ== 0L7QsdGJ 0KQ= cmVuZGVycw== X3Bvc2l0aXZl X3Nsb3Rz YnJvYWRjYXN0 IE1vbGQ= L0NvcmU= IEJhbm5vbg== VG9vbEJhcg== YWJlbGxl X2F3 b2xlY3VsZQ== IGRlbGV0ZXM= IMOhcmVh IHByb3BvcnRpb25hbA== TVc= IHdhcnk= IGludGVybWVkaQ== ICoqKioqKioqKioqKioqKioqKioqKioqKg== LlNUQVRVUw== X3R3 IGFyb21h IGFjdGl2aXNt LklzTm90TnVsbA== dWF0 IHBvc3REYXRh IHBlbQ== X2N0b3I= IFJhcGlkcw== LW9mZnNldG9m IGluZWZmZWN0aXZl IG9uRGVzdHJveQ== IE1ldHJpY3M= IHBhZGRpbmdMZWZ0 LWVuYWJsZWQ= IEdvYWxz eW5jaHJvbm91c2x5 IHllcg== SXRlbUF0 IE1ZU1FM Y2Vzbw== LktpbmQ= dGVj KGJ1bmRsZQ== IHJlZmVyZWU= LiI7DQo= IGNvbmV4 IGJpa2luaQ== X0FQUExJQ0FUSU9O IHN3ZWxsaW5n IGJlYWRz IGJhcmdhaW5pbmc= LS0tLS0tLS0tLS0KCg== IGtpdGE= KmZ0 TWluaQ== IFRvbmlnaHQ= IG1hbmlwdWxhdGVk TWlycm9y IFBvc3RhbA== IG1hcmU= RFc= IGNvbXBpbGluZw== IGZvcmVuc2lj LmdldFZpZXc= ZXBpbmc= Q29z IGFjY3JlZGl0ZWQ= IG9iamV0aXZv Y2FyZXQ= UGFpcnM= KT4+ IHNlw7E= IHF1b3RhdGlvbg== IEJyYW5kcw== dWJp eXB5 IElubGluZQ== aW1ldGVycw== V2ludmFsaWQ= CWxpbms= IEJlbGZhc3Q= IE1lYXN1cmVtZW50 X05PVElGSUNBVElPTg== IHJveQ== IENHQ29udGV4dA== IHdlZGRpbmdz VVJOUw== IHBvZGNhc3Rz IFNlcmc= IOuNsOydtO2EsA== IGVhcm5lc3Q= Y292ZXJhZ2U= aXRlRGF0YWJhc2U= RW1wbG95ZWVz IERlbWFuZA== IGNvbnRlbmlkbw== IFFWZWN0b3I= IiwiXA== IEdlcmFsZA== KClg IGdyaWRCYWdDb25zdHJhaW50cw== UkVTT1VSQ0U= IFNhZw== YWJpbGlkYWQ= IGNvZXJj b3VuY2VtZW50cw== IElzbGU= LmVkZ2U= IGV4dGVy KV1b IFBsYXlsaXN0 IEJsaW5k IFZpdGFs IGxhdHRpY2U= cmF0ZWQ= ZGVwZW5kZW5jaWVz IGBgYA== IEthbmc= bWFjaA== LmZhZGU= IEd1ZXNz Kls= TmF0dXJhbA== Lk9r IFJlbmFpc3NhbmNl IHRodWlz IGxpa2Vu Kmg= XCcs LWNsb2Nr IE9iamVjdGl2ZQ== ZmluZE9yRmFpbA== IERpcnR5 IHNjYW5k IFZBUklBQkxF IGNvbXBhcmF0aXZl eXBhZA== KFNvdXJjZQ== ZWNv IGp1c3F1 CWFwaQ== QnVpbHQ= ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IGxhYmVsaW5n IGhlYWRhY2hlcw== IG11ZmY= IE9yY2g= IGhhdGVz LWJyZWFraW5n L2J1dHRvbg== IEJ1eWluZw== TWV0cmlj IHVuc3BlY2lmaWVk L2hlYWQ= IHN0aW5n IHJlaW5mb3JjZQ== IENvbVZpc2libGU= Ymxpbms= IEFobWFk ZGJn X2xibA== IGh0dA== 7JuQ cm9wb2xpcw== ICgoX18= IHBlcm1l IGFwcGFyZWw= U1RSRUFN Y2h0cw== IHNlaW5z ZmlsbFR5cGU= 7KO8 Uk9XU0VS dW1waW5n IE5pZ2VyaWFu 4oCUaXM= X2xvZ2lj Lk9yZGluYWw= bG9zdA== L3Vzcg== QWY= IEl0ZXJhdGU= aWJz YWFs IHN5bW1ldHJpYw== LGlucHV0 IFBMTA== dXppb25l Y2FwdGNoYQ== IFRhbGU= RXhwaXJlZA== IE9iamVjdE1hcHBlcg== Y2lkbw== LmdldE5leHQ= IG1lbmphZGk= OnNlbGVjdGVk IHJpZW4= X3NlbmRlcg== UHdk IEZsaWNrcg== LkphdmE= X3ZvdGU= X01vZGU= LiR7 IGZ1Y2tz IEFsaWJhYmE= IGluc2lkZXI= YWNpbWllbnRv IGZyYW7Dp2Fpcw== SlNPTkV4Y2VwdGlvbg== IEp3dA== TWl0 bGVpY2g= IHByYWN0aXRpb25lcg== L3NvdXJjZQ== IG9nbmk= IHBoaWxvc29waGVy U25hY2tCYXI= c3RlbGx1bmc= KGJpdG1hcA== IGFzdGVyb2lk IG1hcGxl dWNoYQ== aXRlbUlk IHN0ZWh0 T3JkZXJlZA== ZW5idXJn L3Rva2Vu 6YWN IFdlYmI= b3dhbmll IFdBSVQ= IEhEUg== IEV2YQ== QVRUTEU= KG1hc3Rlcg== IGVycw== YWxvYWQ= IHNtdHA= dW5pcQ== IGd1aXQ= IFJhZmFlbA== Imlu KFVJ KExheW91dEluZmxhdGVy b3Jhbg== IHNlcnZp bmV6 IFRvcnJlcw== Lk1pZGRsZUNlbnRlcg== IG1vbGw= IFRleHRBbGlnbg== X3VwbG9hZGVk IE1laHI= IGhvbW8= LWxpbmtlZA== dW5uZXI= X2xlbmd0aHM= IGRpZmZ1c2U= IEF1dG9tb3RpdmU= WWVhcnM= IGxpZW4= W2NvdW50ZXI= a2xhc3M= 0YHRgtC4 LkVuZ2luZQ== IG1lbnk= dWx0eg== IGluZmFudHJ5 Vmlh c2VjdHM= LmRhc2hib2FyZA== IHNwb25zb3JzaGlw Lk1vZGlmaWVk Oy0= IFZlbG9jaXR5 dHJhY3RlZA== KG1ldGFkYXRh IHBsYWd1ZQ== TlNVc2VyRGVmYXVsdHM= YXBwcm92YWw= cHJvYmFibHk= LXNpeA== X1ZJUw== OicnLAo= LmVuYw== Lk1lc3NhZ2Vz X1BST0dSRVNT IG5lY2tsYWNl IFRlbXBvcmFyeQ== X21hcmt1cA== IEZ1bmN0aW9uYWw= IEpp IHRlc3RDYXNl ICgpOw0K X0NlbGw= IFJlc2lkZW50aWFs IFJhaWx3YXk= KCgmX19f IGRlZmF1bHRzdGF0ZQ== IGVpbm1hbA== LmZhYw== KmY= IHBpY25pYw== KGV2YWw= IGZ1cm5hY2U= YXNzb2NpYXRpb24= eyEh IENvbXBpbGU= eGVi RXZhbA== gOyepQ== KGNhbA== IG1hcmtldGVycw== X2hlbHBlcnM= bG9jYWxjdHg= IHlvZ3VydA== IHZpdGE= LGxlbmd0aA== IElucHV0RGVjb3JhdGlvbg== IGludGVydmVuZQ== IGNvbXB1dGF0aW9uYWw= RGVuaWVk L2Vudmlyb25tZW50 aWlk LkJveA== LVRpbWU= IGV4Y3VzZXM= dHJhbnNwb3Nl IG91dHJhZ2VvdXM= KFNlcnZlcg== ZGltcw== Il0pOw0K kJw= IEVpc2Vu KE9w IGhhc2hsaWI= KGxp fiw= xLFuZA== IFNwaGVyZQ== IEJlbGxh LXRyYW5zaXRpb24= LnJlYWRTdHJpbmc= aGVhcmQ= IFp1Y2tlcg== IHdhbm4= IGphaWxlZA== IFRhbGVudA== b3Bob2JpYQ== wrY= IG9wZXJhbmRz U29tZW9uZQ== IExpYnJhcmllcw== cHJpbWFyeUtleQ== 16o= VXI= IG1hdGVz INGI LWR1dHk= cG91cg== PEVudGl0eQ== PllvdQ== Q3JlYXRvcnM= V2l0aE5hbWU= J2ludA== IFJhdGlvbmFs PUI= LkF1dG9GaWVsZA== IEZvdW5kZXI= IE1lZ2Fu LmltYWdlVmlldw== Ym93cw== IHdpdGhSb3V0ZXI= IGxpYmVyYXRpb24= IGZvcmFt IGNpdGFz b2NoZW4= LnN3YXA= IC4uCg== LmN2dENvbG9y IEF3YXJl IHF1ZWVy 5aSE55CG IEluZmluaXRl L3N0cmluZw== IGJsZW5kZWQ= LUNvbA== IHd5cw== IHNpY2hlcg== Lkxhc3ROYW1l X3dhdGVy X1JlbQ== IGFydGhyaXRpcw== LkFQUA== IEV4cGFuc2lvbg== eGRi ZXN0cm8= ZmF2aWNvbg== VmVyaWZpZWQ= IGRlbGl2ZXJpZXM= YXJrZXQ= IGdldEltYWdl IEpQRUc= IFRSSQ== IEVsZXY= ZnVzaW9u IGpwZWc= Y29sbGlzaW9u IGRlc2NlbmQ= LmZvcmU= IExvZ3M= IHBvbGljaW5n dW50YXM= Lmhvc3RuYW1l YWNjZXB0ZWQ= 4KWL IFdlbmR5 LnJlYWRGaWxl IFNhbnRpYWdv IEdvbA== cmliYm9u c3RyYXRpb24= IHB1ZGQ= IC8vXw== aXNMb2FkaW5n X1NFUklBTA== IGluc3RhbnRpYXRlZA== IHBvZHM= IHdhcnJhbnRz IGFkbWl0dGluZw== CWNvbm5lY3Rpb24= X2J1ZmZlcnM= IEluY2g= IFpFUk8= d2VydA== IENsYW4= CWls KHNoYWRlcg== IHBpbGdy IOWK RHN0 X2JhcmFuZw== Oicj QnV0dG9uVGV4dA== dGVyZQ== X2FtdA== IEZvcmV2ZXI= LkxpbmtlZExpc3Q= dWFyZHM= dXJvdXM= IFNlbmRlcg== dmFyaWFudHM= X21hZ2lj IGFjY29tbW9kYXRpb25z YXBHZXN0dXJlUmVjb2duaXplcg== UHJvbXB0 ID8+DQoNCg== IHJlcHJvZHVjZWQ= X3ByZWNpc2lvbg== IHJ1dA== bW9uZHM= O3g= IH0sDQoNCg== 55S7 IFZpdGE= IHByb3Bvc2Vz IFBhcnRpdGlvbg== SElORw== ICN7QA== IGVzc2E= KGJhcg== IFplbGRh LmNhdGNo X2V4Y2VwdA== IG92ZXJ3aGVsbWluZ2x5 CVRFU1Q= X0NPTlRBQ1Q= X187 IFNlbWk= IHRyYWJhbGhv cmFkb3Vybw== X3NxdWFyZWQ= 4LY= JUQ= IHByYXQ= aXRleg== KGVsZW1lbnRz UGxhbnQ= YWd1YQ== IGlocmVy LkNvbA== IE1jTg== IENvcmV5 T05FWQ== Q2VsZQ== cmVtZW50 IG1hbHQ= IEx1aw== 57uf UE1FTlQ= IGFuYWx5emVy IEhhbms= X3VuaWNvZGU= IGJ1cmlhbA== IENlbHRpYw== RUZG TG90 d29u IE51ZGU= IE5hdGU= IFNpbmdlcg== IFNJVEU= KGJpdA== Yml6 IGRldG9u UkVBRE1F OkFkZA== IEhvbGRpbmc= e3JldHVybg== bmNpYXM= Pg0KDQoNCg== cnVwdGlvbnM= LnJlYWN0 dXJzYWw= 4Lib IERPTkU= aXZhdGVk Lm5vdGVz IHN0cmlwZXM= cmlwcA== aXJhbg== IHNsYWI= IEJ1cm5pbmc= KGVudA== LnNlYw== R1U= X2dvbGQ= XSkpLg== ZWxpbmVzcw== 0L7QsdGA0LDQ IOKIgA== IGNvc21pYw== J10pOgo= Y2Npb25lcw== Y2lzaW9u Y29tcGFyaXNvbg== IEV2YW5nZWw= IFNoaXJ0 bGFnZW4= IGnFnw== IGZpbGxlcg== LnByb2Q= IAkJCQkJ INGE0YPQvdC60YbQuA== IFplcm9Db25zdHJ1Y3Rvcg== QXRB XSkNCg0K IGNvbnN0cnVjdG9ycw== X1NIQVJFRA== CWRldmljZQ== IEFkdmljZQ== OkAiJUA= Pn0n LklzRW1wdHk= IGludHM= bW9zdGF0 IFNpZ251cA== Z2Vhcg== KHBhdGhz LHsi L0RvY3VtZW50cw== PENhdGVnb3J5 VUVTVA== IGdldERlc2NyaXB0aW9u ICJ7XCI= IEpvZXk= b2Rlbg== X2d1ZXNz RVVS IGhlcnI= IHNlZGFu IHJlYWN0ZWQ= X2Nsb25l IFJldmVs IGZvcmI= UmVtYWluaW5n XFNlcnZpY2Vz IGF2aXM= YmF0aW0= emVwdA== IERCTnVsbA== Q29ubmVjdGlvbnM= IGRpc3BvbmlibGU= cGhpbg== IHN0dQ== IHNjaG9sYXJzaGlwcw== LXNoYXJpbmc= Zm9ybWluZw== IEJyaQ== VmFySW5zbg== L3Nlc3Npb24= IGFtYmlndW91cw== IGFwcmVzZW50 X3Jk c2l0ZXM= L2FjdGlvbg== dHJhY3Rvcg== IGRpbGVtbWE= IFNY XS0tPgo= IEphY2tldA== UkFUSU9O LmdldFNlbGVjdGVkSXRlbQ== LWluaXQ= IFJlZ2lzdGVycw== X3NlcA== IFRvb2xraXQ= LmRpY3Q= IHhsYWJlbA== XFRhYmxl dG9j X2NvbWJv IENvbXBhY3Q= IHJ1Z2dlZA== 4KWH4KQ= LW1hbmFnZW1lbnQ= Jyl9fSI+Cg== IFN0YW1w xLFs cm94 IGxhbmRzY2FwZXM= X05PVEU= bW9uYXJ5 Y2Fi IG1vZXQ= eGFm cmNvZGU= LWNsaQ== X2dhdGU= W2V2ZW50 U1BPUlQ= Z2lh IFNVUEVS L0xvZ2lu X3NodXRkb3du aW50ZXJydXB0 IHByZXRlbmRpbmc= IGZyaW5nZQ== IFJlZHM= IENVREE= IFVOSVg= dml0 IGJyaWc= ZHJ2 IENvbm5lY3Rvcg== VGhlcmVmb3Jl IGxpYQ== RGV0ZWN0aW9u X2FjdG9y IHRlbXBmaWxl IGVjY2VudHJpYw== LXJvbGU= IHBhZHg= ZGVudA== V2VzdGVybg== IOq3uA== IEFwcGxpY2F0aW9uUmVjb3Jk IGNhbXBhaWduaW5n X3J1bm5lcg== IENpdmlj YWxlaWdo IGRpcmVrdA== LnN1bA== ICAJCQk= YW50ZW4= IGlzc3Vlcg== IGFzc2VydGlvbnM= KG9yaWc= QVRJTw== IGxlYW5lZA== w6Rz LkRUTw== ZXhwbG9kZQ== Lk9ic2VydmFibGU= IHN0YWdnZXJpbmc= IGtpZG5hcHBlZA== IHByb2dyYW1tZXJz IElubm92 LnBhcmFtZXRlcg== IGRvbWluYXRpb24= IHNrZXB0aWM= IOaYrw== IGF2b2lkcw== LlZlcmlmeQ== dWJieQ== IEFTTg== IGZvcm1hdG8= IEJlYXRsZXM= X2JyYW5k IGluc2V0 eW91dHU= IHRvYw== LWZpbmFs U2hvd2luZw== IERvdWI= IE1lc2E= QWRq X21lZGl1bQ== Q3JlYXRlcw== KGVuZHBvaW50 CVVQ YmJpZQ== IHN0YWxr LmRhdGFiaW5k LlNjYW4= YWdlbnRz JCw= aW5kaXZpZHVhbA== Kykv CXZt KG5vdGlmaWNhdGlvbg== IGluZXg= IENsYXNzaWZpY2F0aW9u cmVubw== IG9saWc= LXJhdGVk IGZvcm11bGF0aW9u Jyx7 IGFjZXB0 X3VucGFjaw== X0NB LlBvdw== CWlt IGFsdW1pbml1bQ== QU5P IHhu IGPDs21v IEluZ3JlZGllbnQ= IHNlaXp1cmVz 5YWx aWZpY2Fkb3I= IHNpZ3VpZW50ZQ== IEluZnJhZ2lzdGljcw== IGR1cGxpY2F0ZWQ= IERlZQ== IG7DuA== IEFDQ0VQVA== KGNyYXRl 0LjRgtC10LvRjA== LWxlc3M= IGluZmluaXR5 QW5hbHl6ZXI= LURheQ== cml0dA== KGNpbg== IEd5 IG11bHRpcGxpZWQ= dWNoaQ== IEJhbGR3aW4= L2lw IHNob3J0Y3V0cw== LkFERA== IHZpZ29y X2luc3RydWN0aW9u KDs= X2V0YQ== 6L+e dXRvcmlhbHM= IGJvb3N0aW5n YnY= IGFja25vd2xlZGdlcw== TGlzdGVuaW5n RkFR O2I= KCgt IGFyY2hpdGVjdHM= IHp3ZQ== IHB1bHM= IGdldENvdW50 dmVyYnM= 44Cc KENvbGxlY3Rpb24= a3Jl IGp1cmlzZGljdGlvbnM= X2JyaWRnZQ== IENyYWNr IERpZmZpY3VsdHk= S08= UmVzZXJ2YXRpb24= X3JlcXVpcmVz VG91cg== 44GX44Gf LnNldEN1cnJlbnQ= IGt5 IEFsYmFueQ== IOin bGxlcg== YWduYQ== d29ya2Vycw== LmJsYW5r IFByYXllcg== TUlD IHJlc2lsaWVuY2U= VGVY IExhbmd1YWdlcw== c3R1ZHk= CWN1cnI= IGVuenltZXM= U2x1Zw== IO2MjA== c3RyYWw= IHR1bW9ycw== IHNlZ3VuZGE= PSd7 aW5zdHJ1Y3Rpb24= IExpc3A= L2luZm8= ICJ7JA== LDopLA== IGd2 KEVycm9yTWVzc2FnZQ== ICc9 fS0kew== LkRvY3VtZW50cw== IldlbGw= IHJlbWluaXNjZW50 IGdheg== aXJvcHI= ZWhy IHN1cHByZXNzZWQ= ZXJzaA== LnNjcm9sbFRv IGNhZGVuYQ== IGdhbWVTdGF0ZQ== w61t KGNvbnY= IFRvbW9ycm93 IENDVA== TW9uZ28= dWxn LkNhbWVyYQ== LmhhbmRsZXJz bXBo IHN0aw== IGdlbmV0aWNz QUNJTkc= VHJpdmlh IEJhbQ== KG1hcmtlcg== LlN0cmV0Y2g= IFN1bm5p IEJldHR5 LnRvbGlzdA== dW5saWtlbHk= LlJlY3RhbmdsZQ== b2Jzb2xldGU= SUxPTg== aW5uZXJUZXh0 ZW1ib3VyZw== YU4= IFZlaGljbGVz dW5sb2Nr OnV0Zg== bm9i IFNlZWluZw== IE5FVkVS IHRscw== IGZpbGxlcw== IGJlbmVmaXRlZA== IENsaW50 Ki8pLA== LmZvbGQ= IHBvc2libGU= QURFRA== dGhvdXNl LkRBTA== IE9kZA== cm9rZXM= IFN1bm55 IFBhcnRpYWxFcQ== X0J1ZmZlcg== IExldmk= bG9uZ3JpZ2h0YXJyb3c= ZWxkb24= Z2FnZXM= X3dhcm4= LkNyZWF0ZVRhYmxl IERpcA== X3F1ZXN0aW9ucw== LmxvZ2lj ICMi PXsoKT0+ IHRlcA== IGp1aWN5 7IKs ZW5rbw== aWFsZWN0 2Yk= IG9uYm9hcmQ= IOaP CXJ0 X1VURg== IFFBY3Rpb24= 4oCe KENvbXBvbmVudA== KGF1ZGlv LmhpdA== Z3Rl IHByb2dyYW1tZWQ= c3RhdGVQYXJhbXM= IHBvbHllc3Rlcg== ZmlyZXM= Ynlzcw== XT0o X3F1YWxpdHk= T2ZEYXk= IEZhaXJ5 IHllbGxlZA== b3Bs KHVzZXJOYW1l IERpZmZlcmVuY2U= IGV2YWx1YXRpb25z aWZmYW55 IGN5Y2xpc3Rz IGNpZGFkZQ== IHRleHRib29r IHByb2ZpbGluZw== X18pLA== ZGVh LmFjdGl2YXRl IGluZGljYXRpb25z 0JU= VG91Y2hVcEluc2lkZQ== IGludmFsdWFibGU= IE1BU0s= IGNvbnRlbmQ= RnJlcQ== IHJlY3J1aXRz KGludGVydmFs IFVzZXJQcm9maWxl ICcuLy4uLw== ZWR1 X0NhbGxiYWNr IGFuYWxvZ3k= IFRyb3BoeQ== YXBwaGlyZQ== VmlkZW9z IENoZXI= IEhhdg== 4oCmIg== LnZhbGlkYXRvcg== Z2Z4 IFVPYmplY3Q= Y2xhc3NuYW1lcw== dHJpYW5nbGU= IEVuY29kZXI= LnNweQ== IHByZWRhdG9ycw== PXN0YXR1cw== LXNhZmU= OiIsCg== IEluY2x1ZGluZw== IHt9Ow0K KmNvcw== IGVuZHVyZWQ= LnN1bGFrZQ== IG51cnNlcnk= IGZyYWdyYW5jZQ== IHJlYnVpbGRpbmc= IG50aA== IEZyYXNlcg== LnNldERhdGU= IFZpbmNl X1JFU1Q= IHZlbnRpbGF0aW9u 5rW3 Y3JpYmVz LmFzbQ== bHBWdGJs IEFiZQ== dWlzaW5l LGFycmF5 CWNsYXNzTmFtZQ== ZXJyYWxz ICcKCg== Q2hlY2tvdXQ= IHNvbGljaXQ= QXV4 X2NhcHR1cmU= IHJpYnM= cmFnb24= dmlvbA== dG9waWNz RnVuY3Rpb25GbGFncw== IE1hcnR5 YmlrZQ== IFR1Y2tlcg== KGtlcm5lbA== IE9wcw== Q2xvc2VPcGVyYXRpb24= L2RlbW8= aWxkYQ== IGzDrW5lYQ== QVBQSU5H IHN1aXRlcw== LnZpc2l0VmFySW5zbg== dXJ1cw== IE1pbnV0ZQ== KG1hbmFnZXI= IGJ1dHRlcmZseQ== IGFwYXJl IHdvbHZlcw== SldU IFNhbG9u CWRlbGF5 LWVzbGludA== aXNhdGlvbnM= LnJwYw== KXwo IFNuYXBjaGF0 L21t TU4= Y2VyaWVz LnRleHRBbGlnbm1lbnQ= IEZyYW5rZnVydA== IGFkbw== KG5ld1ZhbHVl KGFjY2Vzcw== KEV4cHJlc3Npb24= IFNpZ25Jbg== IEhhaXRp X3Rw LnNldFBhcmFtZXRlcg== TWludXRl IG1hbnVhbHM= cmljYW5lcw== IFBUUg== IE91dGVy IGdldGxpbmU= b2NhdGlvbnM= X0NE IEx5b24= L2d1aQ== X2xpdmU= aWRhbg== Lmdlb20= IGJvcmRlckJvdHRvbQ== aW11dGg= X2NoZWNrcG9pbnQ= IG1ldQ== IElydmluZw== IHBldXZlbnQ= KE1BWA== IEFSQ0g= IHBvdg== LnNvdXJjZWZvcmdl IGphbWFpcw== IGFyaw== IEJhZ2hkYWQ= IENMRUFS TWVudUJhcg== IHRyb2lz Q0hFRFVMRQ== ICMNCg== KENhbGw= JG9yZGVy KE1hdGVyaWFs IGVuY29udHJhZG8= JGxpc3Q= IE1FVEhPRFM= LmJlZ2luVHJhbnNhY3Rpb24= X01BRw== U3R5bGVTaGVldA== IG1ham9ycw== IGluZGVmaW5pdGVseQ== Y2xlYW51cA== IGhvbWVsYW5k KGR0bw== RGF0ZXM= UHJlc2VudGF0aW9u IERL PXtgLw== CUtleQ== KEJsb2Nr X2NoZWNrYm94 bmVlZHM= IG9uQ29tcGxldGU= cmljbw== IGdsZWljaA== IHht T09E QmV0dGVy IFNRTElURQ== LkJvb2s= eGFk IEdvbmU= CWRw IGRldm90aW9u IHN0bQ== IG9ic2Vzcw== IEJhY2tlbmQ= UXVlcmllcw== SWs= Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IGRpdmlkZW5kcw== LnBhcmVudEVsZW1lbnQ= fSIpCgo= IE1hdGVyaWFsUGFnZVJvdXRl Om51bQ== IGV4cGxpYw== IE9M bGVhc3Q= T29wcw== aW1lbnRvcw== IGluc3VyZXJz IGhlcm9pYw== CWZpZWxkcw== LmltZ3Vy LmJ0bkNhbmNlbA== IERldGVjdGl2ZQ== KHNt IE11dGFibGVMaXZlRGF0YQ== LmxhYg== KChb IGhhaXJzdA== IFRyYW5zYWN0aW9ucw== 5byA5aeL IHN0ZENsYXNz dWVudG8= R0lT X2NvZA== SW5zdHJ1Y3Rpb25z Q2FsbHM= UG9pbnRlclR5cGU= IFJ3 IGFzc29ydG1lbnQ= IERJRw== K3I= X0NFUlQ= IGluc3RhYmlsaXR5 IHZpYg== b25hcw== IHJva3U= YXBlbGxpZG8= IGFuZ2w= cHJlbmV1cg== IGZsdWlkcw== aXNlYXNl IGRlZWQ= cXVpc3Q= X0NPTlNUQU5U IGVxdWlsaWJyaXVt X2RlbGVnYXRl IFF1YW50dW0= cmVp Q2FwYWJpbGl0aWVz cmVjdGFuZ2xl Pz48 YWxpZW4= IEp1Zw== RE5B VGlja2V0cw== T2NjdXJz IEhhd2s= LnNldEhvcml6b250YWxHcm91cA== XENvbGxlY3Rpb24= ZmZpdGk= IHJlYXJy LnNldFZlcnRpY2FsR3JvdXA= IGNhdml0eQ== IGFkdWx0ZQ== RmFjYWRl LXdo IExPTA== 2LA= IGdyYW5kcGFyZW50cw== U3dpZnQ= CXd4 5omA5pyJ aWZlbg== ZmZzZXQ= QmV5b25k Ly99Cgo= IHdhZ2Vy IGJ1cnk= IGNvbW1lbmNl cmVnaXN0cm8= c2NpZW50 IFBlcmNlbnQ= INC00L7Qu9C2 KGlkZW50aWZpZXI= LnNldE1vZGVs IHNlbGRvbQ== bnRvbg== IGFwcGxpYW5jZQ== YW11cw== cnlzbGVy IHBhbnRpZXM= ZW5ndWlucw== IG1pbWlj IG9uQ2hhbmdlZA== IGFsY29ob2xpYw== LnJlbG9hZERhdGE= Q2hhcmdl IEZheA== IGpTY3JvbGxQYW5l RW1wcmVzYQ== IHNoYXR0ZXJlZA== eGJh Rm9udHM= P3M= IHBvc3RzZWFzb24= cmV0YWlu X3JhdGVz IHJlcXVlc3RDb2Rl LnRvZG8= wrRz Q0hL IEtlZXBpbmc= ZW5nZWFuY2U= IHZzY29kZQ== SVBQSU5H RGVmYXVsdENsb3NlT3BlcmF0aW9u X3JhaXNl IE9jdWx1cw== b2dyYW1z cmFq cGNp IGNvcnJvc2lvbg== LmhhbmRsZVN1Ym1pdA== QWNjZXNzaWJsZQ== IFBpYW5v bGl0dGxl QUNM xIdl LnVud3JhcA== IENvbnZlcnM= IExlYmVu aW9uZWVy IE1lcmNoYW50 IEpvcmdl IGVtYnJhY2luZw== IHZlbnRh w6FzdA== IHZpZW5l PFFTdHJpbmc= IGV4cGxvc2lvbnM= IGRpc3R1cmJlZA== LiI8 bWVtbw== IEFib3JpZ2luYWw= IGNvbXBsZXRv VGV4UGFyYW1ldGVy IHVvbWluaQ== KGFnZW50 0YPRgA== IFdob2xlc2FsZQ== L2Ft IEJvb2ttYXJr ZHJhZ29u IGdsb3Zl ICIiKSk7Cg== aXZhcmlhdGU= bm93cmFw SW5DaGlsZHJlbg== LkJy IGNvbmV4aW9u IGJhY2tib25l IGVjbGlwc2U= IHBlcnNlY3V0aW9u JzoKCg== L2xpbms= IFBlcm8= YW5kYXM= IFRlaw== LiIpOw== LWFuYWx5c2lz IGVyYWQ= TWFyc2hhbA== IGFuY2hvcnM= b2dlcg== IGNvbnZlcmdlbmNl c3RpY2t5 IG5hdmVn aW50ZXJu X0RFU0NSSVBUT1I= IENvbnN1bHRhbnQ= ICAgICAgICAgICAgICAgICAgICAgCg== IEF1Y2g= IGVycmU= xZtsaQ== IEhvcml6b24= Y29sYQ== SW5zdGFsbGF0aW9u aG90bWFpbA== Q05O LkNvbGxlY3RvcnM= Y2hz KHRyYWNl IEVuY3J5cHQ= IC0tLS0tLQ== IEJhc2VDb250cm9sbGVy IGFndWE= IHJlYWN0aXZl aWRs IGNsYXNzTmFtZXM= CVNlc3Npb24= IERvZGdlcnM= SGFk X2x2 SXNWYWxpZA== IEhFTFA= dXR0bw== IFZlcmlmaWNhdGlvbg== IGdldGVudg== X3Bh LmJtcA== OmY= IExvdWlzZQ== KCc7 L3NvY2tldA== R3JhbnRlZA== LmNhbGVuZGFy KElQ IFBY LlJvb20= IHByb2dyYW1t ZW5zaQ== IHRhYmxlc3Bvb25z IGxldmU= IG1vc3Ry LnRpcG8= L2Fu KGRp IGJpb2Q= IGRiQ29udGV4dA== IEpTWA== CXJlc3VsdHM= LkVORA== aHRl bGlmeQ== UHJlY2lzaW9u 6IqC QVJTRVI= KWRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n YXR0ZW1wdA== SVNQ JmE= X1BPUA== IFRhYw== IHByZXBhcmVkU3RhdGVtZW50 INC30LDQv9C40YE= IG93aW5n LHN0YXJ0 IHJldmlld2Vy IHJzdA== IHByb3BUeXBlcw== IHJvY2t5 X2xvY2FsZQ== IFN0cmF0ZWdpZXM= IFdlYmVy LkNhc2NhZGU= X2VxdWFsVG8= IGNvc2Fz IERlbGV0ZXM= IE1heGlt IHNocmltcA== cmV0cmlldmU= LkluY2x1ZGU= SUdJTg== IE9F XSk7DQoNCg== LmVudW1lcg== IGNvZWY= X051bGw= UmE= dHlhcmQ= IFNoYXdu a2VlcGVycw== IHFx X3Ni b21lbnM= IEV4ZWN1dGVz IyI= VFRZ IFZhbHVlVHlwZQ== KTsqLwo= IEFic29sdXRlbHk= IFRvdHRlbmhhbQ== L2FydA== IGJsZXNzaW5ncw== IHN3aWZ0bHk= YnVzdGVy IGF2aWQ= Q09NTQ== LHRlbXA= IH0/Pgo= LWdyb3dpbmc= IGRlZXBjb3B5 QWNr ZWdnaWVz IF9fKCI= IG5vaXI= dGVycm9yaXNt IGFudGhlbQ== YWdlbmN5 X1BBQ0tBR0U= IENsb3N1cmU= LnJlZ2lzdHJ5 IG1hbW1hbHM= PEw= VUlDb2xsZWN0aW9uVmlldw== IExFRHM= IHZvbGxleQ== KEJ1ZmZlcg== X05BVElWRQ== bGliYw== aW1wbG9kZQ== U2Nyb2xsQmFy IE1hcmlvbg== LkNvbnRyYWN0cw== X0F0 IFdlaW5zdGVpbg== Y29tcGFyZVRv IEhvc2U= ZW5pdHk= LmNyZWF0ZVF1ZXJ5 X3JvdXRlcg== IHN0aW11bGk= ICsrKQ== IENoYW1w IEJheWVybg== YXNzYQ== LnZh IGRpc3RyaWJ1dG9ycw== IGZpbGVwcml2YXRl IGRlcGFydGVk Y2NjYw== QGNsaWNr IEx1bmNo Pkw= IGJsdWV0b290aA== LkRlZXA= LXN0YW5kaW5n w6FjaWw= IHJvb2Z0 IFBhdGhz X2l0ZXJhdGlvbnM= SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u LnNwaQ== IFVJQWxlcnRBY3Rpb24= dXll c2lnbmlu LnByaW9yaXR5 IEVzc2F5cw== PSd7JA== IOi/lOWbng== X3NpZ25lZA== LnBlcnNpc3Q= IHJlZGVzaWdu VG9Mb3dlcg== IE5ld21hbg== PXN0YXJ0 IElzcmFlbGlz YXNpc3dh U3BlZWNo IG51bWVyb3M= aGFuZGxlcnM= IFdvbmc= INC80LXRgtC+0LQ= V2VpZ2h0cw== IEd1amFy dGVpbA== IE5vbmV0aGVsZXNz X0VGRkVDVA== IHZlY3Q= IE9zYw== IGNvYXRz IFdoZWF0 IGdlZWs= IFBST1BFUlRZ d29ybQ== X2NvbnN0YW50cw== IEJvdWxkZXI= IFBhcm0= Y29sZQ== IGRlZmF1bHRDZW50ZXI= IFJvdWdl OkE= eGNm IFZlbmljZQ== bWVkaWFu IHJlZGVtcHRpb24= RnJlc2g= IGNvc20= IGZpZ3Vy IHJlZnVyYg== Q09QRQ== LmNk IGNob3Jkcw== IFNndA== xY0= VlBO IFNFTkQ= YWluZW4= X2FjY291bnRz IHRlbnRo IGRpc3NvbHZlZA== PEFwcA== IENvdmVyYWdl dXNlU3RhdGU= w6lybw== Li48 IOyjvA== IGRyZWFtaW5n IEZvcmVjYXN0 LkN1cnNvcnM= IHZpc2Fz L3NjcmlwdA== X3N0YXJ0ZWQ= IGdhc3Ry KFBSTw== XTsvLw== LlRpbGU= KnNpbg== KEFkYXB0ZXI= IFNhbmRyYQ== X1NJRw== YXJkYXNo IE92YWw= IGRlc2NyaXBjaW9u KHNs IERlc2NyaXB0b3I= IGAk L2ZyZWU= IEtleXdvcmRz IHR1ZG8= aW9uYWxl KGZvdW5k Lnh5eg== IEdlbmVyYXRpb25UeXBl X0RJU0FCTEVE KGFyZWE= IGVsaXRlcw== IGhvbWJyZQ== KG1lc3NhZ2Vz IFJhYw== IGV4dGluZ3U= IEVzdGE= b3Bv LnZlbA== bW91c2VvdXQ= IGNvbnZvbHV0aW9u IEhhbmRsaW5n IGNlaWxpbmdz VGVr IEFyZWFz LndyaXRlcm93 PFZpZXc= IENvcm5lbGw= X0JJTg== LmludmFsaWQ= JycnDQo= aWXFvA== X1Bvc2l0aW9u IGtpZGRpbmc= UENPREU= IHdhdGNoZXI= bG94 IOKX RGF2ZQ== X2FsbG93 IGJpc2V4dWFs IHVub3JkZXJlZA== IFNjaHdl X3NlZ21lbnRz IHRlYXJpbmc= SU5MSU5F IHVuZGVz Lmdvb2Rz LmNhbQ== IExX CXdoZXJl Q2FsY3VsYXRvcg== LXRocmVhdA== LWFsZXJ0 IFN1enVraQ== IElQQQ== IEF0dGFjaG1lbnQ= QUNDRVNT KGR0eXBl T3Bw X3N5bWJvbHM= IGRhbnNrZQ== bGFnZQ== b3JnZXQ= cmVzb2x1dGlvbg== 0LXRhw== IFFDb2xvcg== IEJhcnJldHQ= 0LDRhtC40Y8= PVwn IE5hdkNvbnRyb2xsZXI= L3JlZg== KGNvdW50cnk= X0hEUg== IHRlcnNlYnV0 cGV0aXRpb24= IHN1Zg== Y3JlZGl0cw== 4LmM eG0= IERhdmllcw== LnJlZGRpdA== IHdvdmVu IE9ibA== IEtN IENvbnNpZGVyaW5n ZW5zb3JlZA== LnBlcmlvZA== IGRkbA== JHdw IGV4dHJlbWlzdA== O1wK IGtpbQ== YWxlcnM= IHNwYW5uaW5n IGNvaGVyZW50 IGNvbnNlZ3U= LnRleHRMYWJlbA== LmdlbmVyYWw= X2Rhc2hib2FyZA== 0LvQtdC90LjQtQ== a2ljaw== X1BJRA== IEV4dGVuc2lvbnM= cmVnZXhw IENsYXVzZQ== X21vdg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IFJld2FyZA== IExFR08= QWs= PS09LT0tPS0= CXBhcnNlcg== IG9uemU= 6YCA 4oCd44CC X2JhbGw= KHJocw== IGNob3J1cw== PGNvdW50 YXN1cmFibGU= IHdpcmtsaWNo IEVyaW4= IE1TTkJD IGV0dGVy IENyb24= X0ZMT1c= ICwNCg== IGNhbGlkYWQ= IEZpbGVXcml0ZXI= CXN0bXQ= KEJ5dGU= X3BhdA== IHRlbGVzY29wZQ== IGdyZWVk IFRvcnQ= KHdyaXRl XGFwcGxpY2F0aW9u CVJUTFI= IENvbmZpZ3VyYXRpb25NYW5hZ2Vy VW5peA== RW5kVGltZQ== SW5jbHVkZXM= IEhhcnZlc3Q= ZW5iZXJn IEF1c3RyYWxpYW5z IOuT IHJu IHJlcHV0YWJsZQ== IGJsZW5kaW5n VUxBVElPTg== IEJyZW5kYW4= ZGFk IG3DuA== IFdvbw== X2Rj VW5l IHJ1ZQ== d2l0aGlu YW5nZXA= IHBvdWNo XCIiLA== IFNpYw== 4oCdKSw= YWx5emU= IEdlZg== Y292ZXJz IGRibw== cmVwbGFjZUFsbA== CUxvZ2dlcg== VHJ5aW5n W3N0YXRl LXBpZWNl 6ZaT YmVoYXZpb3I= YWxsb3dz bHJ0 X3B5dGhvbg== ZXJ0dXJh LWNvdW50cnk= IFRH LlVJTWFuYWdlcg== YmVucw== YWxleA== IEJyZWl0YmFydA== YmFj IHByZWRpY3Rz IGdhYg== IGNhcmRpbmFs LlRpbWVVbml0 IFZpc2l0b3I= IE1pbmc= IGxpdnJl IHBhcmVudElk cG9ydHVu IGRpbWVuc2lvbmFs IFZlc3Q= ZW5pYw== 4LM= INmH IEJMVUU= IGl0ZW1Db3VudA== IGZlYXRoZXJz CXBzdG10 IFBvbGFy ey8v dW5kaQ== 0YPQtg== emFy RXJyb3JSZXNwb25zZQ== 7IOB UmVwcmVzZW50YXRpb24= Kl8= K10= cHJlcGVuZA== ICc+ IGxlZ2l0aW1hY3k= IG9v U2xpbmt5 IG5hdGlvbmFscw== LndvcmRz O3A= dHJhcA== b21hbmlw IGN1ZXM= IGdyYWR1YXRpbmc= IHNlbWFwaG9yZQ== Il0pOwoK YWNleQ== UkVFVA== R3JhYg== IEZlbGl4 KElk X25laWdoYm9ycw== IG1lYW5pbmdsZXNz KGRlbA== IGplZGVy IENvbnRlbnRWYWx1ZXM= LmFic29sdXRl L2Ns IHhi ZGF0dW0= IHRvcnR1cmVk IHJ1YmJpbmc= U2NvcmVz IPCfmIk= IGF2b25z IGFtc3RlcmRhbQ== RU9T SGFs IHRydXN0d29ydGh5 Iz0= LkVYVFJB IG1hbm8= aXNpY2luZw== LXN1cHBvcnQ= CWN1cnNvcg== IFNwbw== YWltYXNzYWdl TWlzc2lvbg== W117Ig== IHByaW50ZXJz R1JFRU4= IHRlZw== IGFiZG9taW5hbA== IQoKCgoKCg== LlNob3J0 0LDQt9Cy IEdpZnRz fSIp KGJpbmRpbmc= eGNl 4oCR aW5mb3M= Rm9ybURhdGE= IGRhcnQ= IGVsZW1z KGludg== WUw= dGlu R0VORVI= 4buv IFRha2Vu dWNrbGU= OmU= IHNwZWN0cmFs LmJhaWR1 LycpOwo= IGdyZWVkeQ== ZXNpb24= LCwsLCwsLCw= IC8+LAo= SW50ZXJuYWxTZXJ2ZXJFcnJvcg== TlNOb3RpZmljYXRpb25DZW50ZXI= IEFp IHNwaXQ= IGF1Z21lbnRlZA== IHN0YW5kYXJkVXNlckRlZmF1bHRz RklOSVRZ UmFjZQ== OkM= IFJFQ09SRA== IEhpZ2hsaWdodA== ICdg IGRlZmljaXRz IG5laQ== IHJlc2VhcmNoZWQ= VGE= IGNvcHA= LkdldEhhc2hDb2Rl KToNCg0K T25DbGljaw== IFdlbGxpbmd0b24= IHJldml2YWw= 5q+U 6Zeu IE5TUw== IGZvcm4= IGludMOp IEt1d2FpdA== X2ZsaXA= X2Jv X1w= IG9jY3VycmVuY2Vz IFNjaWVudGlzdHM= U1JD b2dlbnM= aWdyYW50 UkVNT1RF IFNJRA== Lm9wdHM= dXZl KCldKQo= IGxpYmVydGFyaWFu IEdsaWRl bGVzZW4= IGZvcm1l b3dhbmlh IGFubm95ZWQ= RGVmcw== IEV4ZWN1dG9y IGNhc3Rz LnNldENoZWNrZWQ= IFNoYXJpbmc= LlNlcmlhbGl6ZU9iamVjdA== IHNlbGVjdG9ycw== X09USEVS 66+4 KHN1cGVy KE9T X1ZFUklGWQ== aWR1bnQ= PGhlYWRlcg== IC8+JzsK IHZpZMOpbw== IE5lZ3Jv IExvcmRz IFRvdXJz IHNvZnRseQ== LnJlY2VpdmU= IEVSQw== IGRhdGFTZXQ= QmFkZ2U= CUV2ZW50 IHBlcmw= IHt9XA== KHNlbnRlbmNl T3JVcGRhdGU= IGRpbWluaXNo UElO KGRyYXc= LlRvRGF0ZVRpbWU= LkVxdWFsVG8= KHBpbg== LXBlbmNpbA== bHVlbnQ= IENhbGxlcg== IHBsYXlmdWw= LScr eGNh c3dpY2s= KXt9Cg== fTokew== IE1ldGg= LmdldENlbGw= LmJyZWFr IHltYXg= PSc8Pw== LWpzb24= IHByaW1laXJv IGluZGljZQ== 44Kj IFVOSVRZ KGFi 0YbQuNC4 X0hBVkU= LXllYXJz IEVyZG9nYW4= LXN0YWNr IGRpc2NoYXJnZWQ= IGJyZWF0aHRha2luZw== IGdyYXNzcm9vdHM= IEFzaWRl aGVsbA== IHNuYWtlcw== L2xvZ291dA== IG1pbldpZHRo IEhlYXI= IFN0b25lcw== IFdpc2RvbQ== IEV2ZW5pbmc= X2JsYW5r IFByb21vdGlvbg== IE1NTQ== IEJhcnM= 44K3 bmo= X1RJ IFNvY2lhbGlzdA== IEVH LW9wdA== PVwiJA== KGRpYWxvZw== IGJlaG9sZA== IGludHJpY2F0ZQ== IGVyZWN0aWxl RXh0cmFjdG9y IHNjbA== IGNsYXM= KGhpc3Rvcnk= aWRlbnRhbGx5 IHBuZXVt UmFuZA== IExhcHRvcA== Y2FsbGVy IEZsb29k b3BlbmVk dWRkZXI= IEdldHRlcg== X3dhbGs= KHdlaWdodA== IEFsZXhhbmRyaWE= IHRhYmxlYXU= VmFyaQ== IC0tLS0tLS0t 6Iez ZXdvcnRoeQ== U3BlY2lmaWNhdGlvbg== IHRocmVzaG9sZHM= KCIiKTsKCg== X2ZvdXI= IFNhZGx5 IChfKQ== aXNtYXRpYw== IEphaWw= dG9IYXZlQmVlbkNhbGxlZFdpdGg= Lm1hcg== IHByZXZpZXdz IHNjYWZm aW5kaWNhdG9y IGNvZGVjcw== IGF1dG9j KHJ0 LmdldEhvdXJz IFJI IFN1cmdl aXZhbWVudGU= IGNvbnRlbmRlcg== Q3BwR2VuZXJpY0NsYXNz IDs7Xg== OjoqOwo= LXJlY29yZA== IG1hbWE= IGltZ3M= LmlzTG9hZGluZw== IG5lZWRsZXM= IGVuY3VlbnRyYQ== b2RhdGE= IEJ1ZmZlcmVkSW1hZ2U= CWphdmE= IFRvbWI= VU5JVFk= IGxpbmdlcmll IEphbWFpY2E= YnVncw== KioKCg== IE1hbw== LmJlZ2luUGF0aA== IHByb3N0aXR1dA== IFBoaWxpcHBpbmU= X3Nm X3Bvdw== IFNjaG8= eGRl J8OpdA== 4oCZYXV0 YWlzb24= IEZpbGVJbmZv dHVybnN0aWxl ZHJlYW0= IGlWYXI= c3ludGF4 aWxsaXNlY29uZHM= cHJvZmlsZXM= X1JFR0VY INC00L4= IENvbW11bg== QmV0 aXB6aWc= IE1lbW8= Lmlkcw== IHBob3RvZ3JhcGhlZA== IGFwcHJveGltYXRpb24= OnZhcmlhYmxlcw== IG1vZGlmaWNhcg== X1NNQUxM IEhlbXA= IGRpc3Jlc3BlY3Q= IGNvbnRlc3RlZA== IGlubm9jZW5jZQ== aWxsaXM= U3ltYm9scw== IGluc3BpcmF0aW9uYWw= IGRpc2NpcGxpbmFyeQ== IFBlcm1hbmVudA== IGRlc2Ny IFVOREVS 0YHRiw== cHJlc3Nvcg== SU1FUg== IG1vdW50cw== IG1vcmFsbHk= X1NFQ09ORA== LmZpbGVOYW1l 44OX IGNvbnN0cnVjdHM= IFNVTg== RVNQ RmluYW5jaWFs IE51cg== w7RsZQ== cmljdWxhcg== IFVzZXJNYW5hZ2Vy aWJpbGlkYWQ= IG9uUmVzcG9uc2U= IGZpbG1tYWtlcg== IGFsb3Q= X1RIUkVBRFM= IGVudmlyb25tZW50YWxseQ== Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u IHJhc2g= IEx5cmljcw== IGlwYWlycw== QmFja3Vw U2lnbnVw IEB7Cg== SlVuaXQ= d29ya2Zsb3c= IENvbXBsZXRpb24= IGludHVpdGlvbg== 8J0= IG1pYQ== IFNuYWNrYmFy IFRpbg== CWluc3RhbmNl IE11c2ljYWw= IHdlbGNvbWVz IHJlZHJhdw== X2NvbG91cg== X1JFQUxUWVBF X3NpbmNl IEJ5dGVBcnJheU91dHB1dFN0cmVhbQ== LWRlbWFuZA== YXJldGg= LnBhZA== c2Vr JywuLi4K LWZpcmU= Lnw= IG51bWI= IERPVUJMRQ== QU1BR0U= Y2htb2Q= LWls IGFsYXJtaW5n Q29w 5aSH aW52aXRl X0lURU1T IGxldWs= IHJlZWw= IGZ1bGZpbGxtZW50 UmVzdG9yZQ== X3Jy KGNsYXNzZXM= IHBhZ2luZw== eW1heA== cmFwcGVk 7ZmU fWB9Pgo= IEhpcm8= KFRSVUU= YXN1cmVy IGN1ZXI= VWJlcg== Lk9wZXJhdGlvbg== IG9sYW4= IHRocmlsbGluZw== PFJlc3BvbnNl IEZlbWlu IHRyYXZlcnNhbA== IHBvYw== IHNldFN0YXR1cw== ZGVjbGFy c3RkYWZ4 IGFkZGljdGl2ZQ== IEJ0bg== IGV4cGxvc2l2ZXM= IENvb2tpbmc= IFBsYWludA== IGFjY3VtdWxhdG9y IEFwcG9pbnRtZW50 LHBhc3N3b3Jk IEZBUg== bHVldA== RnVydGhlcm1vcmU= ZGVjbHNwZWM= X1N0YXRpY3M= LkRpY3Rpb25hcnk= Ij4nLg== CXZhbGlk IiIs SW5zdHJ1bWVudA== Pko= IG5vc3Ry IFJpZnQ= X1BvcnQ= IHZlY2Vz W1sn IHJhbGxpZXM= LXNlcmllcw== IHZ2 LnVj IHJ0bg== U3RhdGVDaGFuZ2Vk KGlucw== IENsYQ== LS0tLS0tLS0tLS0tCg== Y3Vz IFJlbG9hZA== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= LnNlY29uZHM= X2Rlc3RpbmF0aW9u IHNjcmV3ZWQ= PmM= VGhpY2tuZXNz RGVzaWduZXI= IGdyaWRz bsSF KGNvb2tpZQ== VHJpcA== LU1vYmlsZQ== IHZvbGw= IGdlbml0YWw= IGNvbmZpc2M= IENvbmZlZGVyYXRl IHdlYlZpZXc= IG1pc2U= IGNsZXI= KHNlbGVjdGlvbg== JGRhdGU= IHNoYXJwZW4= cmFnZW4= QW5kVXBkYXRl IHJlbWl4 IGh0b25z Ulc= TVBJ IHJldHJpZXZhbA== IHJpY2hlc3Q= LkRlY29kZQ== OmluaXRDb21wb25lbnRz IFRWYWx1ZQ== U2FpbnQ= QGluY2x1ZGU= IFBFUlNPTg== LnNlcA== IExEQVA= Z2Jh IGdyb8OfZQ== IHJlbGlhYmx5 IERGUw== LmdldEl0ZW1JZA== IHByw6lzZW50 LmdldFRva2Vu IGNoaW5lc2U= IE1lYWw= WU9V Ij48Pz0k KGNob2ljZQ== IHBoZW5vbWVuYWw= IFN0ZWVsZQ== wqI= IFBhY2thZ2VNYW5hZ2Vy IFN5bmRyb21l RGlyZWN0b3JpZXM= aXZhcg== LnVuc3Vic2NyaWJl bGllw58= bW9ubw== X2Nvbm5lY3Rpb25z X3ByZXNlbmNl eW55 S25pZmU= IGdyb292ZQ== IHNjb29w VEVNUEw= YXNha2k= LmhhbWNyZXN0 IGhhcmJvcg== Y292 Kno= IFh1 IHByb3Bvc2luZw== IEZSQU1F Q2hpcA== IEVlbg== IOyghA== IHNtYXNoZWQ= VW5zaWduZWQ= KC4u X2ZpbmlzaGVk IGdldFN0YXR1cw== IGZpYnJl QXhlcw== ICcvJyw= eWFyZHM= TURC LWJz aW50ZW50 IGJvb3N0ZXI= LmRzdA== LkRpYWxvZ1Jlc3VsdA== IE1ldHM= IGJlYXN0cw== aW5jcmVtZW50cw== LmthZmth VUlBbGVydEFjdGlvbg== LWV2ZXI= X2JhbA== IGhlbHQ= IGZyZW9wZW4= IFJlY3J1aXRtZW50 bGljdHM= Zm9yZ2V0dGFibGU= RGlzcGxheWVk X1ZFTkRPUg== Q29sbGVnZQ== QVNDSUk= IFNpbms= IE1hY2Vk IGN0b3I= IGVzdMOjbw== IFdpbmRzb3I= X2NoZWNrZWQ= X2RldGVjdA== YXR0ZW5k IHhtaW4= IGluZGlzcGVucw== L3BlcnNvbg== X0RFVEFJTFM= UkVESVQ= SGF5 YWJvbGlj IGZ1bmN0b29scw== aWFpcw== RlRQ X1JlY3Q= IEluZHk= LXB1YmxpYw== b2hhbg== X21hbmFnZQ== Q29tcHV0ZWQ= 7JeQ7ISc IFNsaWNl IGdheXM= IGFsZXg= YWl0cw== IHJlY2VpcHRz U1BFQw== IEJFRk9SRQ== IFByZWZpeA== X3Zpc2l0 IHNwdW4= TEVURUQ= IGRvdw== IGxlZ2FsaXphdGlvbg== YWJiYWdl IGNsYXc= IFRjbA== eGltYQ== IGNvdmVydA== Tmk= IHRoYW5rZWQ= IGFsbGVyZ2lj bG92ZXI= IEJyZWFzdA== LmlzQWN0aXZl IGdlYmVu VkVSU0U= Wk9ORQ== CVJlc3VsdA== JykuJw== IGdlZQ== IFNlcmlvdXNseQ== cHVycGxl IEVzcGHDsWE= aWZpZQ== LXBhY2s= UGFydGljbGVz ICcvLi4v IG11bHRpbWVkaWE= YXV0b2NvbXBsZXRl IFRIUkVBRA== IHJlZmVyZW5jaW5n cmVldGluZ3M= IHF1b3Rpbmc= IGFzc2lzdGFudHM= amVuaXM= aGFwcHk= IGxheXM= bGliZnQ= eGRh IGZvdQ== cGlhcg== UmVjb21tZW5kZWQ= IEJpcmRz IFdhcnJhbnR5 w7xybGljaA== LklOVklTSUJMRQ== X2FuY2hvcg== 4oCdOg== RmFudA== X2RlZnM= IGRyZWFtZWQ= IF9fX19fX18s cGxh w6RmdA== b2RrYQ== xLFz IGRhZGR5 c2NoZW1hcw== PXplcm9z IHJhdHQ= CQkgICAgCQ== aWVq IGRyaWxscw== LTw/ QUJB Lmxpbmtz IERlcGVuZGVuY3lQcm9wZXJ0eQ== Lmxvdw== aGVlZA== X0JMQUNL L0FkbWlu IGFtaWdvcw== aW5nZWQ= IE1pY2tleQ== LkdldEF4aXM= IE5lZWRlZA== IEVuY29kZQ== w6lyaWV1cg== IE1hbmlsYQ== IENvbGxlZw== YWRhc3Rybw== IGNoaWNhcw== 5L2g IG9uZXNlbGY= eGVh ZHVr IGd3 dXJnaWNhbA== IENlbnRybw== IGFlcw== ZmVlbA== IHRyb3Q= IGVsZWN0cm9ucw== IHJpdHVhbHM= IEJpbGRlcg== IGRlY29yYXRl IFRva2VuVHlwZQ== IGx1cmU= QXBpQ2xpZW50 Z3JwYw== IE9yYw== Q29udGV4dE1lbnU= UFJFRklY LXRoZW1lZA== X2ZpZm8= LklucHV0U3RyZWFtUmVhZGVy X3NwZWNpZmlj IERTUA== PXN1YnByb2Nlc3M= L3NoZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= IGRhdW50aW5n IGNsZWFycw== IE1vdmVz IG15c3Rlcmllcw== LWJlc3Q= IFZ1 b2xpYg== IElzaA== IGNhcmFjdA== KExhYmVs IERlYmlhbg== IEV4cGVyaW1lbnRhbA== IGNhdg== LlRvRGVjaW1hbA== IFJob2Rlcw== IEhhd2tz IGZvdW50YWlu X1BFTkRJTkc= X1NV IHd4U3RyaW5n IFBldw== LmNsaQ== 0YTQvtGA0Lw= LndlYmtpdA== X0NO IDs7PQ== CW5hbWVzcGFjZQ== IHdQYXJhbQ== IHB1cHBpZXM= IHRlcm1pbm9sb2d5 IGFkZGljdGVk IGZvcmdl IEdhcmRuZXI= IHBlc3NvYQ== CVJlc3VsdFNldA== IGF0dGVudQ== YW5nZW1lbnQ= X2luZHM= Q2hp YXJpdGg= RW5jb2RpbmdFeGNlcHRpb24= bW91c2Vkb3du IEJFVFdFRU4= d2VpZ2g= IkZvcg== LmRk aXRlbA== WU8= IERpY2U= dW5peA== IE9idA== IENlZGFy IHNwZWNpbWVucw== cG9ybg== IHVub2ZmaWNpYWw= 6buR c29tZXRpbWVz IEJ1bGxk dHJ1c3Q= Z2V0UmVzdWx0 IHNtb2tlcnM= IHNhbmR3aWNoZXM= IGV4aA== IEZhZGU= X0RD IG1hc3R1cmJhdGlvbg== Zm9ydGF3ZXNvbWU= VEhJTkc= X2FuZHJvaWQ= IGRlZGlj LXNlbnNpdGl2ZQ== IG5hY2t0 TElCSU5U IGFnb24= IERJU0FCTEU= b25lc2lh Ymllcw== IFpJUA== IGhhdW50ZWQ= IGN1aWQ= L2NhcnQ= a29z CVJUTFU= IGhpbmRlcg== IGFkaXBpc2ljaW5n SUVOQ0U= LmJhbms= IEN5cHJ1cw== bWl4ZWQ= LmN5 LXNpbmdsZQ== PGxlbg== Q29taW5n IGZhdWx0cw== IGZvcmVzZWU= Z2V0bGluZQ== ImE= IGJyYWc= IGRpc2Nz IHJpcGU= IG7DpnI= IEdH U0hPVA== ZGVyYWJhZA== KGVkaXQ= VG9MZWZ0 W10pOwo= IGRvR2V0 dmF0dXJl TmVlZGVk IENoZW5n Y2Np RUZJ IGZldWQ= IGx1bmFy LlNoYXBl Tm9ib2R5 X1RSSUdHRVI= Q3k= Z3JvdW5kQ29sb3I= IFJlbW92YWw= KGJvdHRvbQ== JG1zZw== U0NJSQ== cml0eg== IGZyZW50ZQ== IGNvbXBvc3Q= YW5zd2VyZWQ= IFJvZHI= X0hUTUw= IHNpbGhvdWV0dGU= IFFVRVNU IENhdGhlZHJhbA== LkNvbW1lbnQ= IE1u LW5ldHdvcms= LmdldEZpbGU= LmdlbmVyYXRvcg== IENoZWNrb3V0 X3pvb20= IGVuY29kZVVSSUNvbXBvbmVudA== X1RD c29t IFNlcmll IGJhc2VVUkw= CXJ1bg== IGh1aA== LnNlbGVjdGVkSW5kZXg= IFNUQVI= fi1+LQ== YWJjZGVmZ2g= Lm1hcHBpbmc= PWRhdGV0aW1l Q29vbA== bmlt IERpcmVjdGl2ZQ== RmVkZXJhbA== IG1lbnVJdGVt INCQ QW5uYQ== IFJlY3JlYXRpb24= cnlhbg== LWFnZWQ= emVyYmFp 4oCm4oCdCgo= Y2FtcG8= IG1pbmlhdHVyZQ== ZGV0YWNo bWVhbmluZw== X2VtcA== UGVhaw== IGJjbQ== IEh1bmdhcmlhbg== IENhc2NhZGU= IHNhY2tz IHRydW5jYXRl IOKWiOKWiA== IHdoYWxlcw== IHNvcnRhYmxl IGFzc2VydHM= IHNlYWxz b2N5dGVz XSkpKQo= YWxhcm0= cmVzc2luZw== KHNpZ25hbA== IGVtcGVyb3I= CU9O Y29tbWl0dGVl IHRyaWxvZ3k= LlRyYW5zYWN0aW9uYWw= R3Jvdw== X3VhcnQ= IHN3aW5ncw== IHNwZWN0YWNsZQ== 4oCZYXY= IFNlbnRpbmVs INmE IFRvdQ== IHdpZG93 Z2VyYWxk LHVpbnQ= IHVudXN1YWxseQ== PENhcmQ= IFJlc3RhcnQ= bW9y 44GC44KK aXhlZFJlYWxpdHk= IGhhbmRndW4= 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IGxpdGhpdW0= UmVzb2x2ZQ== Z2V0Qnl0ZXM= L2Z1bmN0aW9ucw== IHRhY2tsaW5n T3V0bGluZWQ= IH08Lw== IFNleG8= IEFuaw== IHJhdGlvbmFsZQ== cmVtb3ZlQXR0cg== IG11bmljaXBhbGl0eQ== IGFzc2F1bHRz Q0hPT0w= IFJlZQ== IGJhdWQ= pqw= IGVuaGFuY2Vz INC/0YDQtdC0 IGNvbmNlc3M= Lmluc3RhZ3JhbQ== LmdldFJlc3BvbnNl c2VnbWVudHM= IHdlbGxiZWluZw== fTsKCgoK aHVuZw== 44OG IHJlbm92YXRlZA== LmV4cGVjdGVk IHJhZGlhbA== IGNvbW11bmFs dXNlck1hbmFnZXI= K2E= IGZ1bmRhbWVudGFscw== LlRI 6II= IHJhbnQ= IFN0cmF3 IE9sZURi YXppbw== IGhhbWJ1cmc= IHBhaW50cw== IHRodW1icw== IE51bGxQb2ludGVyRXhjZXB0aW9u IGdyb3VwZQ== IEhvbWVDb21wb25lbnQ= IGJhbGxv IElOSVRJQUw= X2FyZQ== IFBlcw== dXJzZXM= IGJhcmR6bw== LmdldExlbmd0aA== YW1vdG8= Lm5vdGlmeURhdGFTZXRDaGFuZ2Vk aWVuZXM= ZW56aWU= X2VtYg== dW1uaQ== c21vb3Ro IERybw== cGFzdGU= IE5hcnI= LS0tLQoK z4k= IEF1dG9y IG91dHJvcw== IExBQkVM LnBh LlN0dWRlbnQ= KFhtbA== IGV0aG5pY2l0eQ== IEl2eQ== 44KI X2Zha2U= Pyg6 dXBsb2FkZWQ= Z2V0TWFuYWdlcg== LVFhZWRh b2RpYWM= Q29ubm9y aWhhbg== TUFU KG1pZA== IEFsYmFu IHNvaXI= Q29tYm8= IFB1YmxpY2F0aW9u b3BvdWxvcw== cGlz IHRlbXBsZXM= b25neWFuZw== X2NsaWVudHM= IHJvZHM= IHhj aWprZW4= IHJlYXA= IOS4i+WNiA== CWNvbm5lY3Q= Rm9jdXNlZA== LGNvdW50 aWV0ZXQ= IGhhY2lh X2FsbG9jYXRvcg== IHRveGljaXR5 KHNlcXVlbmNl IG51ZXN0cm9z IFByaW5jaXBsZXM= IGxsZQ== YWxhcmlh LndyaXRlU3RyaW5n IEFGTA== aWZuZGVm IERvcw== xZtjaWU= IEFnZ3JlZ2F0ZQ== IHNhY3JpZmljZXM= X29mZnNldHM= bGRi IGxhdGNo IGZ1bGxzY3JlZW4= bWlzc2l2ZQ== T1BUSU9OUw== IFRlbGVwaG9uZQ== IGFyc2VuYWw= amVqZXI= IEhvc3A= IGZhdm91cml0ZXM= cml2ZQ== LmluY3JlbWVudA== IGJ2 IEZhbnRhc3RpYw== LnNheQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IG1lZGljaW5hbA== IERST1A= IHBpdHk= bWV0aXM= IHdvbGxlbg== IGJlZg== X0Js ID4+Cgo= Ym93ZXI= IHN3YXBwZWQ= L2luc3RhbGw= IHNpbmtz ZXRyaXpl IGRlY2xpbmVz CW15c3Fs IENTdHJpbmc= IE1vdGlvbkV2ZW50 Lkxhbmd1YWdl Um9hZA== 0YLQtdGA YXNjaW1lbnRv JykpLT4= LmFib3V0 KGVkaXRvcg== IFJhdGluZ3M= aW5jb21l xaFl LmRlcXVldWVSZXVzYWJsZUNlbGw= IEF1c3RyaWFu IHN1bGxh IFRyaWJ1bmFs IERpZG4= 0L7QstCw0YA= IGluc3BlY3Rpb25z Qm9zcw== IGNvY2t0YWlscw== IGFwb2xvZ2l6ZWQ= X3N1YnBsb3Q= b3BhbA== Kz0o IHJlc29uYW5jZQ== aWJ1 IOumrA== cm9tYQ== cmVzZXJ2ZQ== cGxz IFRhaA== YXhpZXM= T1BMRQ== IERhcnJlbg== IFpvbWJpZQ== X01hcA== IF0pCgo= IFFp IFNhaWw= IHJlc3RyaWN0aXZl IGVyb3Npb24= LXBhcg== V0hJVEU= IG9sZHU= IGFwZXJ0dXJl IGJpdGNvaW5z dGV4dG8= IENvbWNhc3Q= IHRpbWVsZXNz ZW5raW5z IGZlZWRlcg== L3RtcA== cmVzZGVu Kydf LkRlc3Ryb3k= IMOnb2s= IERPQ1VNRU5U LmxuZw== LnRhZ05hbWU= IGt1bGxhbg== ZWdyYXRl ICgqLg== 57yW6L6R IGhhbmRzaGFrZQ== c29j X2dlb21ldHJ5 IERhbWFzY3Vz TWlub3I= IEthZmth 7Jes RmxvcmlkYQ== X2NvbXB1dGU= LmV4cHI= IHBhcmFsbGU= IERpYXo= Y2ly W3RhcmdldA== IGpva2luZw== IGdsb3I= KHNldHE= X2hhbmRsZXJz SGFuZw== IGZlcnI= cmltaW5hbA== CSAgICAJCQ== ZW50aWVz ZGVmaW5lcw== LXRheA== anNvbnA= IFVQUw== bWV0cm8= X187Cg== IFVnYW5kYQ== XSkpOgo= X3Rk eGFl bHc= Lk9T IExvZ2dlZA== YWNpZA== IE1heW8= YXNwZWN0 IHZhZ2luYWw= IGluaXRpYWxpemluZw== IHN0ZXJvaWRz ZmljdGlvbg== R1JF Z2VuZA== IGxpYWJpbGl0aWVz IExldHM= TWVjaA== KG5j KGNoYW5nZQ== IGNvbm5lY3RvcnM= Oms= IHRhc3Q= ISIpOwoK dGhpbmdz cm9waHk= bHVldG9vdGg= IFNpZ25VcA== LmN0cmw= IHRoZXJlaW4= b3JkYQ== LmVzY2FwZQ== aWdhdG9y IHBldHJvbA== IHNwZWNpbWVu IGRlYnV0ZWQ= LVBybw== IGNyaXNlcw== LmFkZFZpZXc= 64+Z LWRvb3I= IG1vbmV0 IG1pbGxpcw== IHZpZXI= SW50ZXJuYWxFbnVtZXJhdG9y IGFkbWlucw== IExhaXI= emlu Z2V0UXVlcnk= dW1ibGVz TElNSVQ= IFZpZw== X3Nvbmc= PENoYXJhY3Rlcg== Ojou X2hvbQ== X2Jw IFN1cGVydmlzb3I= c3VibWlzc2lvbg== YWJpbGU= IG5vaQ== T3JDcmVhdGU= IHBlZWw= IG9uU3RhcnQ= IHNlbnRpbWVudHM= dmVoaWNsZXM= IGNsYXNzcm9vbXM= IHN6ZXI= IGJlbmRpbmc= IGxvbmdldml0eQ== IGFjbA== IEFsZXBwbw== IFVN IFJpY2h0 IG11bHRpcHJvY2Vzc2luZw== RE9NQUlO IiwiKw== X1lFQVI= IHNjcmFwZQ== IHNvbGl0YXJ5 ICJdIjsK L2Vycm9ycw== 7J6s nOugpQ== YmV0dGVy CW51bWJlcg== IExG IEFjcm9zcw== UHViTWVk XCIi IEV4Y2VsbGVuY2U= IHVzYW5kbw== IFVJUA== QWN0aXZpdHlJbmRpY2F0b3I= X1ZPSUQ= IGJyZWVkcw== 772l dWVzdGFz IFRyZWFzdXJl dXN0cmFsaWFu KGZhY2U= IFRlbm5pcw== CUludA== IEhhbnNlbg== 57U= Okk= IOKclA== R1JBWQ== T1VTRQ== IGhlcGF0 oO0= QUlS w7PFvA== IHF1ZXVlZA== dmluY2lh IENocm9taXVt IGNvbXBldGVuY2U= dW5nYWw= aWxsaQ== IGdldEJ5 IEZpbmRlcg== IGluY2FwYWJsZQ== IHNhZGQ= IGNpdGVz IENodXJjaGlsbA== U2Rr TW9yZW92ZXI= QXNwTmV0 KEZsb2F0 JHBhc3N3b3Jk IENvbm5vcg== LXNlc3Npb24= X2Rt Kikp IGRldXRzY2g= IE5Y IHBlcmtz X1NPUlQ= X1RPT0w= X1ZJU0lCTEU= LmFzcA== 5oiW IEJyZWF0aA== RGV0ZWN0 IER1ZWw= LmNtYg== W2l0 LlNldEJvb2w= IG5hcmNpc3M= IGFiaWRl IGVqZW1wbG8= IOKElQ== IG1vcm5pbmdz IGNvbXB1dGVz LnNzbA== anQ= IG11Y2hvcw== X1NT W2VuZA== IGJhc2lu IGFsZ3Vub3M= IENyb2F0aWE= bGluZXdpZHRo KHRhZ3M= KGhpZGRlbg== w61jaW8= IGFwYXI= INC2 5LiO LmZvb2Q= IFJ1cmFs IGJyZWFkdGg= 5b2x KHNlc3M= KyIp IFBhc3Rl IHNlcnZpZG9y IEJpdFNldA== IFRyYW4= bGF1cw== dmV0dGU= ZXllcw== IENMSUNL IFZJSUk= IFR1cm5z IExlQnJvbg== IE11ag== IERlZw== IEFkdWx0cw== X3N1aXRl cHJvY2Vzc2FibGU= IFBIWQ== Z2hlc3Q= LkZhaWw= IFNsYWNr Y2Vq XENhcmJvbg== IHN1cGVyc3Rhcg== IGhvbGRpbmdz KGZvcm1z ICcjJw== TXVsdGlw KCJbJQ== LXNvbGlk L3VybA== LXRpZXI= W2xlbmd0aA== IFN0cmVhbVdyaXRlcg== IE1hcmtldHBsYWNl Z2V0dGV4dA== X1RJQ0s= IEZvcmdl IGJsYWNramFjaw== IERPRVM= IE1hdHRlcnM= d2F2ZXM= IHdoaXNwZXJlZA== IGx1c2g= 7Jik ZGlnaXRhbA== IHdyaW5r IEhvZ2Fu IHJ1c3RpYw== LkFwcGx5UmVzb3VyY2Vz IEhhcmR5 b3NvbWVz QVVU LlNUQVRF IG5hcnJhdGl2ZXM= CXN0b3Jl Ymli CVNjYW5uZXI= IENvZHk= XFJlcG9zaXRvcmllcw== IHJldW5pb24= YW5kdW0= 4oCZaA== IHNuaWZm TlNCdW5kbGU= IGNvbXByZWhlbmQ= X1VTQUdF X29jYw== VVJSRU5DWQ== Sk5J IHNwZWNpYWxpemluZw== IHZpc2lvbnM= IGRvbG9yZQ== IHbDoQ== IENoZXZ5 IFN0eWxlZA== aW1wYWN0 YWxsZW4= IGthcnQ= IFRhYmxldA== c3R1ZmY= cmVlc29tZQ== 0LDRgtC+0YA= Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K X0FkbWlu IGNlbGxwaG9uZQ== IGF1dG9wbGF5 IGNhbWJpbw== IG1hcml0aW1l X0JPT1Q= LXF1YXJ0ZXI= IGxhdGluYQ== IEFKQVg= ZXF1aXY= IEZyb250aWVy IFhZ fV0K IFJvdWdo LnByb3Rv IGNvcnJlY3RuZXNz IGZhY2ls IFJlYWNoZWQ= 44Gd44Gu VklT LnBz IHN0cm5jcHk= IGRpZmZ1c2lvbg== LnN0YXJ0QWN0aXZpdHk= 77+977+977+9 IGFjY29tcA== QU1FU1BBQ0U= aW1vbmlhbHM= IEJsYXN0 YWJ5cmlu IGRvbWU= IGV4dHJhdg== IHllbg== IGN1bGluYXJ5 UFJJ IENvbW11bml0aWVz bmlk X29wZXJhdGlvbnM= Lmhz IE1pbHRvbg== IG5vaXNlcw== QXV0b3Jlc2l6aW5nTWFzaw== KGNpZA== fQoKCgoKCg== XX0sCg== IERldGVjdGlvbg== dGFibGE= IGxpYmVydGllcw== X0RZTkFNSUM= d2dldA== IFTDvHI= IFBhc2NhbA== VHJhbnNwYXJlbnQ= RGVsYXllZA== XSgp IEhlcmJlcnQ= PEFjdGlvblJlc3VsdA== Y2hhbGxlbmdl IG11c2hyb29t Lmluc2VydEJlZm9yZQ== IFJpbg== IGh1bW91cg== IGbDuA== YXBpS2V5 YWxsb2NhdGVk IGNvbmZlc3Npb24= LiIsDQo= CWFzc2VydFRoYXQ= IFNPUlQ= IExPUkQ= IGV4cG9ydGVy LnNldExldmVs cG9rZW1vbg== YXNodHJh IGbDqQ== dXJhdG9y KE1TRw== IHR1cA== IEh1bGw= IHlpZWxkZWQ= LlN1YmplY3Q= XFJvdXRl IT8= INGD0LTQsNC7 XFNlY3VyaXR5 LWFy IGFsbGVnYXRpb24= KFNldHRpbmdz w6RuZGVy IGVsbGlwc2U= IFJldHJvZml0 IHJlZ3VsYXRpbmc= IE1vbGx5 IExvaw== X0N1c3RvbQ== IFByb21v aXNpbg== IHJlc3VtZWQ= IG1ldHJvcG9saXRhbg== LmVycm9yTWVzc2FnZQ== Oi0tLS0tLS0tLS0tLS08Lw== Lm1s c2NvcGlj LnJlZnM= YXB0b3Jz IEluc3RydW1lbnRz IHByb3BhZ2F0ZQ== fS0+ IHBhc2Fkbw== dGhhbms= X0RlbGV0ZQ== IEJyaWdodG9u LHVuc2lnbmVk 5L2c6ICF IGFzcGlyYXRpb25z LWhvdw== Um9zZQ== PSgo X25lZWRlZA== X3BsdXJhbA== PEFwcGxpY2F0aW9u IFdFRUs= IFVubG9jaw== IFRFTVA= U291 IHNjaGl6b3BocmVuaWE= IHRyb2xs IGNvbXBsZW1lbnRhcnk= IE5FVFdPUks= IGJsaXI= IHByb2dyZXNzRGlhbG9n IiUo IEF0dHJpYnV0ZVNldA== CXRz Lml0ZXJpdGVtcw== 6K+d IGVzY3JpdA== dm91cw== X3BsYWNlcw== SEs= IHNlZ3Vpcg== X2Z3 IFJvdW5kZWQ= IGRpc3Bvc2l0 6KeG cGFybQ== d293 U1RSVUNUSU9O LmFsbG93 IENoYXJTZXF1ZW5jZQ== CWV4dGVybg== IHByb3NlY3V0ZWQ= IG1vcnRhcg== IEp1ZGE= LW1zZw== IGVzdHVk LmdldERlc2NyaXB0aW9u IHNvdw== YW1icmU= IHJvbWE= RW5o Ym9udXM= IHNxdWF0 IGRpc3RyYQ== ZWRJbWFnZQ== IHBlcHBlcnM= LXBlcmZvcm1hbmNl LAoKCg== LGZpbGU= IE1JTUU= X2NvbmNhdA== QUJT LWZhc2hpb24= IHVuZGVyY292ZXI= T25lVG9NYW55 IHJlY2xhaW0= Q09QWQ== IGJpbmRz IFRhcGU= IGdvc3NpcA== IEVxdWl0eQ== L0NhcmQ= LmFjdGl2 J2Ft IGRyYWluYWdl PFNjYWxhcnM= IG9uQmluZFZpZXdIb2xkZXI= KCk/Lg== IHNvcnJvdw== IEli dXB5 X1VVSUQ= IENoYXJt IEVsZWN0aW9ucw== Lm9uRGVzdHJveQ== IEludGVyZXN0aW5nbHk= b3VuZGluZ0JveA== X2RldGVjdGlvbg== LWhlbGQ= X3Vua25vd24= IHJlZnJhaW4= IG3DqXRvZG8= IGVCb29r RU5PTUVN IGRhbmc= UHJvZmVzc2lvbmFs IGRpY3Rpb25hcmllcw== L215c3Fs IFNUVUQ= IG1hc3Nl c2NhcGU= IGRyZWk= Om5hbWU= LmxvZ28= U2lnblVw IHRhaHVu KHRoZW1l IEZlbW1l IGJvbWJlcg== IEphZGU= IFRheQ== IHN1Ym1hcmluZQ== X2NsYXVzZQ== enljaA== IHNpbXVsdGFuZW91cw== IGNhc29z LmJvb2xlYW4= KGxocw== IGNvbnRpbmVudGFs LXNhbGU= CWVudg== IEN1dGU= IEZhY3RvcnlHaXJs YWJ1cw== L3ZhbHVl IGphZHg= IHN0ZXJu Pj4KCg== IHN1cmZhY2Vk IOyggOyepQ== cGxhdHo= CWVtYWls Y2VwdG9ycw== Ij4o IGVwaWxl 6K+7 IERlYnQ= 5ZGK Tk9Q Imh0dHBz Omo= Rm9ybUl0ZW0= X0xJQ0VOU0U= LmdldERvdWJsZQ== IEFnZW5kYQ== CWZpbmFsbHk= KGZpbHRlcnM= KGF2 576O QVBFUg== IGxhdmE= 0LXRgNC2 KSkpKQoK IGZhdWx0eQ== X25t IHRyYXZh KEJpdG1hcA== IHNwZWVkaW5n PicpLg== IHNjcmVlbmVk X3JvbGw= IE1hY0Jvb2s= IEFVRA== IGRpYWdub3Nl LkdlbmVyYXRl IF5e IHN0cnM= W1Rlc3Q= IHJhbnNvbQ== IERIQ1A= ZWxkZW4= IGludGVycHJldGF0aW9ucw== KCldLg== ZmxhdE1hcA== IGxpbmVIZWlnaHQ= X21vdW50 IFdpemFyZHM= IHNsdXRz ZWhsZXI= b2RhbA== IG1pbGl0aWE= 5bI= ZWFybmVk IG1pc2VyeQ== aW50dmFs ZnVuZA== IGhpZGVz IGRpYXJy IFdlc2xleQ== IHhtbQ== IHF1ZW0= IEFyYWJz aWZ0aA== YXRlZ29yaXplZA== RGlzcG9zYWJsZQ== UHVyZQ== X05PVElGWQ== c25pcHBldA== IEdhcnJldHQ= LnJ1bm5pbmc= LndlaWdodHM= ICgtLQ== IGludmFyaWFudA== 5LqL5Lu2 IEFsbG93ZWQ= ZGlycw== IHBhc3Npb25z IGxhZA== IEZsdXNo bWVudXM= OmJsb2Nr IGNvbXByYQ== LmNob21w YWxsb2NhdG9y IGN1cmF0ZWQ= IEtub3dpbmc= IFBhdHRlcnNvbg== IHRlbGFo J2V4 IGRvb21lZA== IHBoaWxhbnRo b3R0eQ== LnN0eWxlcw== T3duZWQ= IGFsbGVyZ2llcw== PXBhcmFtcw== b2Nlc2U= aXRlbGlzdA== IFNlbmRpbmc= YmVm b3JyYXI= IE7Do28= IEZhcmdv IEx1Yg== IENvbWJpbmVk X2dpdmVu CQkJCQkgICAg IHJlY29uY2lsaWF0aW9u UGF0dGVybnM= YXphcmQ= IGJpb21hc3M= IEhvdXNlcw== cmVzcHVlc3Rh Y2Nv L3RvcGljcw== IFl1aw== IHdlYWtlbmVk X2NhbGVuZGFy IG11bGhlcmVz IE1hcmw= IHNpbmU= IFRpbA== IFNvdWxz IERldXRzY2hl IEZPTExPVw== IHBpcGVsaW5lcw== IEJldmVybHk= X0RJUFNFVFRJTkc= IiM= IFByb3Rv LmJpZw== IFNhdmluZ3M= IFRhbno= anVu IEdhbW1h IFNhZGQ= IGFkdmlzb3Jz IHJvYXN0 IHVudGVycw== dWRpZXM= X2xvbg== LXBvaW50ZXI= IEVsZW1lbnRSZWY= XEJ1aWxkZXI= ZXhhbXBsZUlucHV0 LndlYmRyaXZlcg== ZGF0YVR5cGU= IFF1aXRl IENlbHRpY3M= dWls LWRlZmVuc2U= YmlzaA== IFVJV2luZG93 IFN1ZGRlbmx5 LmhvdA== LnJlYXNvbg== IGfDtnI= QU1E Lk11bHRp YXV0aGVudGljYXRlZA== cmVnaW9ucw== Oyg= 0LDRgNCw0Lw= IEtpcmJ5 JHJvdXRl UFJFQ0FURUQ= IER1cmhhbQ== b3dv IFBlcmZvcm1z IGRpc3JlZ2FyZA== bnN0 IFBvbHM= IGdldFA= Il06 LWNvbG9yZWQ= KEtleXM= IEFsbGVn X21vZGlmeQ== X2xvYWRpbmc= c3RyYWluZWQ= IGF0cm9j X3Bocg== PFNwcml0ZQ== IHNhdGlzZmFjdG9yeQ== bWFuc2hpcA== LnBpcGVsaW5l VG9ueQ== IHRoaWVm cG9sYXRvcg== KGxvY2s= YnVyc3Q= IE9wdGltaXphdGlvbg== IHN1cmZpbmc= Illlcw== IGRlc2NlbmRlZA== 5pI= X0NsZWFy IGNyaWVz IEZyb3plbg== RElSRUNU LUNvbg== IExlaWNlc3Rlcg== 5aWz T09N PWRi IGdldE1lc3NhZ2U= PFN0dWRlbnQ= X2JhdGNoZXM= Lk1hc2s= X2V0aA== XCk= IHNvbWE= Q2F0Y2g= W2No T3duZXJz aW5kbGU= OmF1dG8= LnZlcnQ= aXZy LnNldExvY2F0aW9u IGZsdWVudA== X0VORElBTg== IENhcmxv Y2VwdHM= YWRkQWN0aW9u Lm9hdXRo PFVuaXR5RW5naW5l cmVlbWVudHM= LlNraXA= PykKCg== LmRlZmF1bHRQcm9wcw== IGNhYmU= IFNoZW4= ZXJvc2lz IFByb2ZpdA== IHBvaXM= X0NSRUFURUQ= IHJlbW92ZUZyb20= KHdz P2FjdGlvbg== KEZpZWxk IGVycm9uZQ== Lm1pbmltdW0= IFJldHJpZXZlZA== IGRhZG8= IFBSSVZBVEU= LXNwZWM= IGd6aXA= cGRhdGE= IHBvc1k= KGxvdw== IHF1YWxxdWVy L2Nsb3Vk 6rKM KGNvbW1vbg== IEFyYmVpdA== b3JnYW5pc2F0aW9u IHRpZHk= IFJvbGFuZA== KHBo LnpvbmU= IGdlbnRsZW1lbg== xrDhu6Nj 5bGx IGVuY2xvc3VyZQ== IE1hbmFmb3J0 CUNvbG9y U3RlbmNpbA== Tmlj IHRoZW9yZW0= IFZH IGNvbG91cmVk VkJveExheW91dA== dWxzaXZl RHJhZ29u Y2Zm ZXRlc3Q= ZW5zYQ== b2ZkYXk= LkF6dXJl OlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZQ== X3VwZGF0ZXM= IHRyZW5keQ== dWdhcw== d2Vha1NlbGY= IHJpZGdl aWJyaQ== IOy2lA== KENH IE1vbmtleQ== LndyaXRlSW50 LnRpbWVkZWx0YQ== Vmlld0NvbnRyb2xsZXJBbmltYXRlZA== IFByb3ZpZGVuY2U= 44GI IGJsZW5kcw== L1N1YnRocmVzaG9sZA== IEFwcGw= IGF0YW4= IHJlbG9hZERhdGE= dW1ib3Ryb24= c3TDvHQ= T0F1dGg= IEdpdmluZw== IOyEpA== IEZpbm5pc2g= Y2hlY2tpbmc= LkVtYmVk c2VxdWVsaXpl IGluaXRpYWxpemVz IE9zbG8= 2LY= Z2V0RXh0ZW5zaW9u X0FMVA== KGJsYW5r IGZhdGFsRXJyb3I= IGRlbWlzZQ== KioqKioK IFhT KEFG IEVucw== YW50aGE= IFBPUg== IG5pY2g= Lk5hbWVk IGdpZ2FudGlj IE9ic2VydmF0b3J5 LlJlc29sdmU= IFBheW1lbnRz Z3VpbGQ= IGN1cnJlbnRTdGF0ZQ== PT09PT09PT09PT09PT09Cg== IFNleQ== cERhdGE= IGRlYWRsaW5lcw== IGNlbnRyYWxpemVk IFNjaG9sYXJzaGlw X3N1cHBvcnRlZA== LmNocm9tZQ== KCldKTsK IGN5YW4= IENhZ2U= QXV0aG9ycw== Xw0K L29z a2lt ZGVl LnRleA== IHlvdXJzZWx2ZXM= IG1ncg== IGFsaw== LWluc3RhbGw= IGRyYWZ0aW5n IHJ1bW9y IHN0YXR1ZXM= UG9vbGluZw== b2xpbmE= QUFBQUFBQUE= LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IGV4dHJlbWlzdHM= Q2FsY3Vs aWdodGhvdXNl SW5zZXQ= KElOUFVU IHN5bmNocm9uaXphdGlvbg== aXZpcnVz LmF4ZXM= IEdhcA== LUFu X1RlbXBsYXRl IGdhbWVy IENyaWNrZXQ= IGxpbnQ= IGF1dGhvcml0YXJpYW4= TlNVSW50ZWdlcg== IHJlZG8= IGFkaXBpc2Npbmc= X0ZFVENI Y2hlaWQ= IEZhbmc= LmluZGljZXM= dG9uZQ== 0LTQtdC7 IHt7LS08 YnJhaGlt IHNhbGE= Z2V0Q29kZQ== IGNvbW11bmljYXRlZA== c3RhcnRzV2l0aA== ZXJ0eg== UmVhZGFibGU= SXRlbUlk b3JlZmVycmVy Y3JlZGlibGU= w6FyaWE= IGNvbWJpbmVSZWR1Y2Vycw== KiovCgo= IGJsaXNz IGFkb3Ju ZGVwZW5kcw== IFJPT00= IGZyYW1pbmc= ID8nLA== YXV0eQ== X3BvdA== X3RhYnM= RXhhY3Q= LCIs ICd9JzsK IGFyYml0cg== YWhyYWlu LmdldFN0cmluZ0V4dHJh ICRc IG91dHB1dFN0cmVhbQ== IGNvbW1lbmM= YW51cw== Y2h5 PEVtcGxveWVl IGhleGF0cmlnZXNpbWFs IG5hY2lvbmFs KHNlcmlhbGl6ZXJz X3B1dGNoYXI= X1NBRkU= ZW50aWFsQWN0aW9u SXRlbVNlbGVjdGVkTGlzdGVuZXI= LkRpc3BhdGNo Q29uZmxpY3Q= X2Fib3V0 b3NhdXI= Qm91bmRhcnk= IGNsZWFyQ29sb3I= KExvY2F0aW9u IE1PTlRI IFRhc3Rl LUdlbmVyYWw= IFdBUg== IGVyaGFsdGVu LXNhdmluZw== IGNvdXBsaW5n LXRyaWdnZXI= bW90b3I= IHl5eXk= IFBhdGVudA== cHRv IG1pc2RlbWVhbm9y dmFzaW9u IEFkbWlyYWw= 4LmJ4Liy X1BXUg== IGRldmFzdGF0ZWQ= Zm9saW9z SVRVREU= dXJyZWN0 IHJvYm90aWM= IFNhbmN0 IEhhd2FpaWFu LlJvdXRl LWNvbmRpdGlvbg== IHJr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK Y3JlYXRlRWxlbWVudA== IEtvcA== aWduYW50 LnJvbGxiYWNr IHNhbHVk Xycs IEFOU0k= RXhjZXB0 IERyYXdhYmxl LlV0Y05vdw== Ijpbewo= IGtvbGU= THVh IEJlbGlldmU= Q29tcHV0 IGhhbGx1Yw== IFNpZ25z cnN0 Lmh1 IEtOT1c= V2k= IEJyYXNz IFJhcw== QGhvdG1haWw= IHNlZGltZW50 IGFwaw== IOyDgQ== X3JlZ2lvbnM= IHBvZGl1bQ== PEJvb2s= 0LbQtQ== IHNpeHRlZW4= IEFsaWFz IGluZnJhcmVk IFZhbmRlcg== IExlYWRpbmc= dWNpbmc= LDosOg== X2hvcg== d2F0 IGTDqWNvdQ== X1dpZGdldA== U291bmRz X25hdmlnYXRpb24= IHNjaG5lbGw= KGdlbmVyYXRvcg== dWNlbmU= IHJlbWFrZQ== SVB2 IHLDqWFs X0lOQ1JFTUVOVA== IGh5cG90aGV0aWNhbA== X2FuZw== IG9mcw== ICEK LmNvbXBsZXRlZA== R2V0VHlwZQ== IGtvbW1lbg== w6FsaWRv YWRkT24= IHrFgg== VUxB X2luZGljYXRvcg== J10KCgo= YXBhY2hl X1NlbGVjdA== IEdyZWVuZQ== V2hhdHM= X2FuaW0= IHJlcGV0aXRpdmU= bXVjaA== IFRocmVzaG9sZA== IGxm KENhdGVnb3J5 Y29uZQ== TWl4 X01FVEFEQVRB YXlzaWE= TmVpZ2hib3Jz CQoJCQo= SVBIRVI= IEZyYWc= IENlbGxz IG5hbWVzcGFjZXM= KGJhY2s= IFJlc3RhdXJhbnRz c3Zj INC70Lg= b3RlY2g= LXNs pb8= IFdU IFJlZHVjdGlvbg== IGRvdHRlZA== CWZvdW5k IFRFQU0= Qm9ybg== IE11c2g= IENvbXBhcmFibGU= IGhpdGNo QVRP IG1heEhlaWdodA== YmVnaW5UcmFuc2FjdGlvbg== w612 X2Ju IGhlcmQ= IHJldmVyc2Fs IEhvbmQ= ZGVsaW1pdGVy IGNvbmZ1c2U= IGhvcHM= IGNlbnRyb2lk IGNvdXJ0cm9vbQ== LmRlY29yYXRvcnM= IG1waQ== IEltcHJvdmVk SU5ORVI= IEJhbmdhbG9yZQ== IFRhbWI= IGJvYXN0 KCkpKQ0K IGlsbGljaXQ= IE1vcm9jY28= Z3JlZ2F0b3I= X3Jlc3VtZQ== IGNyYWNrZG93bg== IHBvcnRyYWl0cw== L2hpZ2g= KFwn IGF5dWQ= X2ZlZWRiYWNr IGNhdGU= L2F2YXRhcg== IGhlYg== UG9pbnRDbG91ZA== IOWSjA== IDwhWw== IGdldFJlc291cmNlcw== fTp7 T3BlcmF0aW5n IEZvZw== CXRhYg== IFJlc2VhcmNoZXJz IGZhYnJpY2F0aW9u LmRhdGFzZXRz IENhbXBv IEthdWY= IGRsbA== bGlndA== XSkpOwoK c3RlbGxlbg== QUNLRVQ= bHZs IEdsb3J5 LmRhdGVUaW1l IGNvbW11dGU= IG9uQ3JlYXRlVmlld0hvbGRlcg== IFhFbGVtZW50 IFRva2Vucw== PHRoZWFk X3BpY2s= 7KQ= dm9u ZGVwYXJ0dXJl KHJlbmRlcmVy cGhvbmVOdW1iZXI= KFBlcnNvbg== Z2VuZXM= IExhcnM= ICl7Cgo= IEpzb25SZXN1bHQ= IG1ldG9kbw== Vk9LRQ== LmdldFVzZXJJZA== QWNjZWxlcg== CXJlcXVpcmVk IGNoYW1waW9uc2hpcHM= QnVpbGRDb250ZXh0 L3Rhc2s= L3JlbGVhc2Vz Q2F0ZWdvcmlh X292ZXJsYXk= IHNjYXJjZQ== X2xpbQ== bmdy YWhsZW4= IEFydGlmaWNpYWw= c3ByZWFk IGJvd2xpbmc= LmFuYWx5c2lz U01UUA== CXBhc3N3b3Jk IGJhdGhz XSkpewo= Y3VycmVudGx5 YWNpZW50ZQ== X3NlcGFyYXRvcg== IGRlYmVy IERpc2FibGVk acOocmVz IOKV X3Byb2Nlc3Npbmc= IHByb3Rlc3Rpbmc= IFJPVA== Z3JhYg== INC30LDQug== IHByb2FjdGl2ZQ== d29yZHByZXNz IFNldmVy aW5kZW4= IHdpa2lwZWRpYQ== KXsNCg0K X3dpbmRvd3M= aXNsYXRpb24= IHVucmVzdA== IGRpc21pc3NhbA== Lk5VTQ== X0ZBU1Q= aXNzdWVk IEZBQ0U= X3VuZGVy IHBsdWdnZWQ= IOWw IGLEmWR6aWU= IElDQw== IGNvbWJ1c3Rpb24= IGtpc3NlZA== IHN0YXJyZWQ= IFdhdHRz IHNwaWVsZW4= LXB1cnBvc2U= IEV2YWw= YXJnZXM= LHJlc3VsdA== dGVjaG5vbG9neQ== IG5hdGlvbmFsaXR5 aWN1cw== IE51Zw== INGC0L4= CQkJCQkJCSAg Y29sbw== IGdhc3Rybw== YW50ZWVk T0xJRA== LmJpYXM= X3RlbGU= Lmluc3BlY3Q= IHZlaWw= LmZvb3Rlcg== IG5lZ2xpZ2VuY2U= IGp1ZGdtZW50cw== Um9vbXM= eW5u CWNvdW50ZXI= b2NjdXBhdGlvbg== IOeUnw== dW5hcw== ICheKSg= TGFtYmRh ZmVs LlBhcmFtcw== INC00L7QsdCw0LI= c2V0TGF5b3V0 IGRlcG9ydGF0aW9u IGxvY2FsT2JqZWN0 IFBoYXJtYWNldXRpY2Fs Y2VwdGl2ZQ== IE5vbWU= RXF1aXBtZW50 RmFu VW5pdmVyc2Fs CXNvY2tldA== IGdyaW4= IGV4cG9zZXM= IGhhYmVy IHNpbmNlcmVseQ== IGNhbXM= IG3DvA== ZW5pYQ== RW1lcg== Q3J5cHRv U2xvdw== KHhocg== IT0o LXNlcnZpY2Vz IFBX IHByZW5kcmU= IG3DpGRjaGVu ZW1vbnM= 0L7Qt9Cy0YDQsNGJ Lk1hbmFnZXI= 7Jk= IGdyYWY= LXJh bWV0cmljYWw= L2Zs IGNlbWV0ZXJ5 Z2Vucw== IHDFmQ== IE15U3FsQ29tbWFuZA== LVRv IHbDpQ== IGFpcnN0 b21lbnR1bQ== IHNlcnZv bWlsbGlvbg== IE1pcmFuZGE= IlNoZQ== IGFkdm9jYXRpbmc= LWNhcHRpb24= IEF0dHJpYnV0aW9u IHdlbGNoZQ== X3ZlbmRvcg== CVN0YXR1cw== YXJyaXM= IHByaW50aw== IiwiIw== IHJlbGF0aXY= aWZmZXJlbmNlcw== aXp6ZXM= IGRlY2ltYWxz IFByb3Y= Lm1heGltdW0= QXJu IGhlbGljb3B0ZXJz X0JPVFRPTQ== Y2h1cmU= b2Rpbmdz Jyg= IikpKTsNCg== KGJlYW4= LmZk RnVuZA== IGhhbmdz YXBwaWQ= L2tlcm5lbA== LnBvaQ== Lk1pblZhbHVl LXZhbGlkYXRpb24= THVrZQ== Y2Rm IEZ1bmVyYWw= IFNhbXBsZXM= CWRl IHRvYXN0cg== IHRheGFibGU= IGNsdXN0ZXJpbmc= ICdcJw== IHJlc3RyYWludA== ZWNlZA== Y2hhaW5z 44CC77yI X0dSQVBI IGZ1ZWxlZA== 6ZyA SHA= 5aSN VGlsZXM= IGF1bnF1ZQ== SkM= IGhvc3RhZ2U= IEVzaw== IG1hdg== IGdlc3Rpb24= IGJhbm5lcnM= fXsk LmludFZhbHVl LiciCgo= X01BVFJJWA== IGNlYXNlZA== IEdPRA== X0NBTUVSQQ== LkFsbG93VXNlcg== dHJhY2tlZA== Q29vaw== YmFpcnJv KGNvbXBhbnk= IHZpZXdwb2ludA== LmdldFdyaXRlcg== IE5ldHM= d2l2ZXM= ICgpKQo= ZXhhbXBsZU1vZGFs CWNoaWxk IG15dGhvbG9neQ== IC8vIg== X2F4ZXM= aWJvbGQ= LkRhcms= IE1heHdlbGw= IGdwb2ludGVy b2xpY2l0dWQ= QmF0 dWxuZXI= YmFsYW5jZWQ= bWFpbGVy IGNvbnRlbXBvcg== 5omL5py6 KCJfXw== ICIpIg== cmVhcg== IEh1YW5n XScpCg== 16k= RlRB IENhbGxpbmdDb252ZW50aW9u IE91dHB1dHM= UGs= LlJlZmVyZW5jZQ== bGVjdHVhbA== ICk6Cgo= IGJyYWNlbGV0 dWdlcg== CUVycm9y U3dlZXQ= KCIvIik7Cg== aHg= IHVucmVhc29uYWJsZQ== SW50ZXJwcmV0ZXI= IGxvZnQ= X3Byb2R1Y3Rv IHNvY2lldGFs LlBhcnNlcg== IEFkYXB0 LmZvbw== KHdoZXJl LkZlYXR1cmU= IFlhbWFoYQ== Z2xhc3M= Rm9yZ2U= IHByb2hpYml0cw== IGNhcGFjaXRpZXM= IO2VqOyImA== IHBlcm11dGF0aW9u IGlobQ== Rmxk ZWxpYWw= PT09PT09PT09PT0K QENvbmZpZ3VyYXRpb24= IGdlYXJlZA== aW9zbw== aWVzdGE= dHJhbnNsYXRpb25z SW5wdXRDaGFuZ2U= UG9wdWxhcg== IFBMVVM= IHZm X0ZyZWU= YmJveA== IGNhdXNhbA== UElMRQ== IHNjaMO2 IGlyb25pYw== TWly LkA= 5Y2X IOiH UmV3 dWxlbmNl Zmxlbg== IGNhbkFjdGl2YXRl LXJlc3BvbnNl IGFjY2VudHM= aWdub3JlZA== wrBG LkRlcGVuZGVuY3lJbmplY3Rpb24= CXBvaW50 IGNvbnRpbmdlbnQ= IHNxdWFzaA== IHBhcm1z IENlbWV0ZXJ5 IGRlbHRhVGltZQ== IERPUw== IHZhbmlzaGVk 0LDRgNCw0LzQtdGC IERQUw== dGZvb3Q= IFp1cw== X0lOU1RBTEw= R0FO IGFyYg== IG11bmljaXBhbGl0aWVz SW50b0NvbnN0cmFpbnRz QXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cw== LGltYWdl X2lnbm9yZQ== IGRhbmdlcm91c2x5 cXVpc2E= cGx1Y2s= IGhhcnVz dXBwZQ== SHR0cEV4Y2VwdGlvbg== QnJhY2tldA== LicnCgo= IFRvbA== IFZpZXdlcg== emJvbGxhaA== LkNvZGVBbmFseXNpcw== w6xuaA== IGNvcnJlY3RhbWVudGU= LmRh IEFsZ2Vy 15A= YmF1bQ== IFBhbnRoZXI= cGFydGljaXBhbnQ= 5b+F LXN1cA== IGVtdWxhdG9y IGZhZGluZw== IFdvbHZlcg== Y3JlYXRlcw== IGJvb2tpbmdz LlF1ZXN0aW9u p+ihjA== IHN0cmVzc2Vz IHJld3JpdHRlbg== LlBJUEU= ZWRlcw== IGNiZA== IjoiLw== IGVuaGFuY2VtZW50cw== X3N5 QklO IFNsaXA= SW5zcGVjdA== IFdlZw== IGNvbmdyZWdhdGlvbg== IF86 X3Jt RnJhbWVidWZmZXI= ICcmIw== IEZhbGxvdXQ= SXNSZXF1aXJlZA== IFBlYXJzb24= IEZBQ1Q= IHJlbGll CWJveA== IFNoZXBoZXJk IFdpa2lMZWFrcw== IENvbGxlY3Rvcg== IHJlc2l6ZWQ= bWV0aG9kTmFtZQ== IGV2ZW50VHlwZQ== IEF0aGVu RGVzY3JpcHRvcnM= IGJlcnM= LW9wZXI= IEluaXRpYWxseQ== 5aE= X0JUTg== ICAgICAgICAgDQo= w6Fi X2NhbXBhaWdu X3dhdGNo Rm9yZA== LWRhdGVwaWNrZXI= IHZpc2M= IHNhdHU= X3Ntcw== IGNvbnRhZG9y LXN2Zw== IERPSQ== JGFyZ3M= IGtub2I= LkJPTEQ= IGRlYmF0ZWQ= aW1ncw== c29ja29wdA== dHJ1dGg= IEZlZXM= IGhXbmQ= X2Zvb2Q= IGFicmFz IG5vdGlvbnM= IFRvZA== OmNyZWF0ZQ== IENvbmZsaWN0 VXN1YXJpb3M= T1RPUw== IG1zbQ== S0hUTUw= KFso ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IH1d d2l6YXJk IG1pZW50cmFz IGRhdGFMaXN0 IGVtZXJnZXM= xINuZw== LlJlYWRJbnQ= UEdB SUxMSVNF SUVudW1lcmF0b3I= KHR1cGxl Q2hyaXN0bWFz TG9va0FuZEZlZWw= b2dlbmVyYXRlZA== ICMKCg== Y29udHJvbGxlZA== IGV4cXVpc2l0ZQ== IGFjZXN0 UmVhZFdyaXRl R2Fpbg== 44CN44CM IGNvcHlyaWdodGVk IGRvb20= LlRhYmxlTGF5b3V0UGFuZWw= IERvcnQ= IGNoaWxp IHdlcms= IEVWRU5UUw== IEJlYWNvbg== IHNoaXBtZW50cw== IHNlYmFnYWk= dXBvbg== dXRvbQ== LmNvbnZlcnRlcg== LkRyb3BUYWJsZQ== PXt9Cg== Zmlj fgoK IGxlc2JpYW5z X25h Rm9yZWlnbg== CXRoZW4= L21z IG9yaQ== Z2V0UHJvcGVydHk= CXNucHJpbnRm aGVzaW9u 44Gk In0sIg== IGFjcnlsaWM= UGVycw== QEVuYWJsZQ== SXNs KENhcmQ= LlN0YWNr TGljZW5zZWQ= X0dVSUQ= OnRpdGxl IGh1c3Q= IHByaW5jaXBhbFRhYmxl YW5pdGl6ZQ== L2VtYmVk IGVuc3VyZWQ= IEVHTA== 2YjYsQ== IOWIhg== LywK IGZ1bmRyYWlzZXI= S2V5TmFtZQ== IG1hcmNoZWQ= X1ZBTFVFUw== IFNjZW5hcmlv IG1ldGlj X2Fzc29jaQ== IFBhc3Rvcg== CQkJCQkJCQkJCQkJCQkJCQkJ ZXJhdGU= IGludml0YXRpb25z cXVvaXNl IGJsYW1pbmc= IGRhcmluZw== VU1NWQ== IHJpY2hlcg== ZW1ha2Vy IElkZW50aWZpY2F0aW9u IOyduA== IEJpbmRpbmdGbGFncw== Y2hhcw== IHJlc2lsaWVudA== X3Bn IHJlbGVn IElSQQ== U1RF IHRyYWN0b3I= LWxvYWRpbmc= IFByZXZpb3VzbHk= IFZhY2M= L2Jl IG7DpXI= IHVybGVuY29kZQ== IE5vcmZvbGs= LlJlbGVhc2U= IE5ldXRyYWw= 5Lit5Zu9 IEFybGluZ3Rvbg== IGFsbGVnZXM= IFdyaXRlcnM= VGVzdGVy IFJhbGx5 IGPDoQ== CVByaW50 IOKHkg== IFVzZXJDb250cm9sbGVy IFNlZWtpbmc= LlZBTA== TGlzdE5vZGU= X2Zm IFBoaWxsaXA= RkFDVA== IGNhcmFtZWw= IE11bHRpcA== IENvbXBhcmVk IFNlcmJpYQ== n7M= IHJldml2ZQ== IEthbnll IHZlcmdl IEJ1bGdhcmlh Z2V0Qm9keQ== IHw+ Y2VwaA== LkRhdGVUaW1lUGlja2Vy LiI7Cgo= IFRpZQ== LGl0ZW0= IG1lbm4= R2Fz b2NoYQ== X3ZpcnR1YWw= IG1hc3RlcnBpZWNl X3NlcXVlbmNlcw== TFRF IFN1Ym1pc3Npb24= Q2FsbGVy JFw= U3BvcnQ= YWd1cw== Q29uc3RyYWludE1ha2Vy IGNvbG9j IHdpZw== INCj CUFycmF5 TG9va3M= IEdUQQ== LnN0ZXBz YXRjaGV3YW4= X3Jhbmdlcw== ZXh0QWxpZ25tZW50 IEJyZW5uYW4= IGFic3RyYWN0aW9u dWxlckFuZ2xlcw== Lm1pc2M= IGFudGlib2RpZXM= IGV4cG9uZW50aWFs IENIQU5ORUw= ZXhwZW5zZQ== J3k= IGRldGVjdGl2ZXM= IHB1cnBvcnRlZA== WVNURU0= IHJhZGlvYWN0aXZl IExhdGluYQ== LkVuY29kaW5n LlRBRw== eGlu RGVncmVl dXJhY2lvbg== cHJpY2Vz IFJlZmVyZW50aWFsQWN0aW9u IHJhcml0eQ== IHBpbGVz Z2VuZGU= X3Byb2plY3Rz X2dsb2JhbHM= LnN0YXJ0VGltZQ== IOq1rA== U0VDVElPTg== X3B1Ymxpc2g= RmF1bHQ= RERM X3ByaW9y TW9t IHRoaWNrZXI= IHNlcXVlbGl6ZQ== IGVzc2VudGlhbHM= c3RyYXM= aW50cg== PigoKQ== Lm1hbmFnZW1lbnQ= ZWls 6Zet QXdhcmU= LkNpdHk= IEFyYml0 X0RN X2tleWJvYXJk TE9iamVjdA== LXdlYnBhY2s= IE5ld3BvcnQ= IHByaW5jaXBhbENvbHVtbg== bGVnYW50 IHBhbGxldA== IGZyYWN0dXJl IGdtYWls Lk1ldGE= QWJvdmU= LktleUV2ZW50 aml0 X21hY3Jv X1BVU0g= 4bup L2NvbnRyb2xsZXI= 5Yqg6L29 IHN1cGVyZmljaWFs ZXh0ZXJpdHk= IG1lbnNhZ2Vt V2luZA== aXN0b24= Lm9wZW5hcGk= 0LjRgNC+0LI= IFNlcmlhbGl6ZXI= dWN0aXZl IHphcg== UGxhY2Vz LlN0YXRpYw== QmE= IGluYWR2ZXJ0 IEluZG9uZXNpYW4= X0lQVg== KGhvcml6b250YWw= IGdldFRpdGxl aWRlcHJlc3M= IENvbnNvbGVDb2xvcg== aXBlcnM= JG91dA== IGZlc3RpdmU= IGV2ZW5pbmdz LkdldERhdGE= dWl0a2E= IE1hbnVhbHM= dXNzZWQ= X01heA== LkNoYXQ= IEFpcmNyYWZ0 PWNvbQ== Rk9VTkQ= YXBybw== IHRyZWFzdXJlcw== X2FsaXZl IGdhZGdldA== ZWtpbmc= QnV0dG9uRG93bg== QnJvd3NhYmxl LlBFUk1JU1NJT04= UEFTU1dPUkQ= IEhBU0g= ZsOp XFRlc3RDYXNl TE9TUw== b3RoZXJz LEo= IGFzc2hvbGU= d2Vyaw== IG3Dow== Lmll ZXZpbA== a29udGFrdGU= Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K PXN5cw== CWxvY2s= LS07Cgo= X0ZVTg== RmlsbENvbG9y w7Nh cHJlbmQ= IGNvbXByZXNzb3I= TW90aGVy IEFyY2hlcg== LmdvdG8= IHfDvHJkZQ== IGJhbWJvbw== 77yO IFRyZWVz IGJ1bXBlcg== IHNhdXNhZ2U= IEVsYXN0aWNzZWFyY2g= IGhvcml6b250YWxseQ== IEd1bA== SW1tdXRhYmxl IGxvc2Vy IGFib3J0ZWQ= LWRlbW8= IEhhdGNo IHVuZGU= IHByb2Nlc3Nv LWNhbGw= SW5jb21l 5YM= X3JldHVybnM= J10uIic= KHN3 Q0JT YW1pbGllcw== IFlvdXJzZWxm IEhvbHQ= Lk1PTg== 4KeH 0YjQtQ== YW5vbg== IEZvbnRBd2Vzb21l cHJvZHVjZXI= anI= IG1hdQ== CWludGVy IGRpc2hvbmVzdA== IG1hZ25h IENvbGxlY3RpdmU= IHZyYWltZW50 IGNob2l4 c3RheQ== IHdlbGRpbmc= cmlzaW5n LG1pbg== IEZhdGU= Z2xvYg== UkdCQQ== IGRldHRl VmVu IGVtYmFycmFzc21lbnQ= LkRFTEVURQ== Z3JlZ2Fy LXJlbmRlcg== KGJ1Y2tldA== Ij4KCgo= LndhaXRLZXk= QnVzeQ== IGRpZmZlcmVudGlhdGlvbg== IENTVA== LkNvbnN0YW50 IGxpbmVOdW1iZXI= KG1hdGNoZXM= IHdlYnNvY2tldA== IGJhcnJlZA== IHB1ZWRlcw== TW9ubw== Q09SRQ== SUlE ICAgIA0KDQo= IHDDumJsaWNv bGVhbmluZw== IGNsZWFuc2luZw== IGNyaXM= IERldmlscw== X1NFVFRJTkc= dW50YXJ5 Lik7Cg== CiAgIAo= W2N1cnI= dHN5 IEFsZXhpcw== cml0ZWw= IHBldHJvbGV1bQ== LnByZXByb2Nlc3Npbmc= bWF0dGVy Rm9yUmVzdWx0 LWxpY2Vuc2U= IHRyYXZlbGxlcnM= IERpc3BhdGNoZXI= ZW5uaWZlcg== IGRpZ2VzdGl2ZQ== UEVE aGliaXRpb24= TUFTQ29uc3RyYWludE1ha2Vy IFdhdHQ= QmVuZWY= LnNldFZpZXc= ZHRv VEVF IFBlbG9zaQ== X0VYVFJB IG1lZGFscw== eGhy Zm9yZWNhc3Q= IG5hcmdpbg== b3Vucw== LWZpbGw= X0NVUlNPUg== IHN1cGVydmlzZWQ= IHR1cmY= IEVkZ2Fy UE9TSVRJT04= IGNhdGVnb3J5SWQ= 4ok= X0VS 4bunYQ== U2hvd24= Lmxs X1BPTElDWQ== KCksJw== IFByZXY= IFN0cmluZ0ZpZWxk CUdsb2JhbA== YXNzZWQ= VGhyb3VnaG91dA== b3N0cmluZ3N0cmVhbQ== LmF3dGV4dHJh IHNsb3Blcw== IFNlcXVlbnRpYWw= IGdpb3Ju IHplbGY= IHZlcnNhdGlsaXR5 bGVuZWNr LmNnaQ== IGRvdWJsaW5n IEJhbmdrb2s= IGJ1dXJ0 IHVzdcOhcmlv c3R1ZGlv IGpldW5lcw== IG11dGVk IGlwcw== X2ZyYWN0aW9u JiYo IHN0dW50 Jyk7Pz48Lw== IExpZ2E= IHF1YWxpdMOp QXNzaWduYWJsZQ== IHdvcmthcm91bmQ= IHNwdXI= IHNsZXc= X0dF IEFncmljdWx0dXJhbA== IHJlbGVudGxlc3M= KFF1ZXJ5 IFNlY3Rpb25z IHJldmlld2Vycw== UmFpbg== ZGxn YXNzZXJ0RmFsc2U= IG5vbWluZWVz X18pLg== LmR5bmFtaWM= IFBCUw== Q2hhbmdpbmc= IHNsaWdodGVzdA== IE1hbmc= fT4NCg== IGV2YXBvcg== YmFibGU= IFBSSUNF IOaz bHVjZW50 IHZhbXA= IFRlY2huaWNpYW4= IHVuaXF1ZW5lc3M= TWVz dXJiYW4= LnBhcmFtZXRyaXpl IFJlcGxheQ== U2Vzc2lvbnM= ZW1icg== LUFtZXJpY2Fucw== X1BST1hZ IHBpYW4= IHRyaWU= IERlc3RydWN0b3I= R2FtZVN0YXRl IElNRg== Y2hpbg== IHBvcnRl IFN3YWw= 5Z+O U3Vic3RyaW5n aW1pbmc= L0xpYnJhcnk= IGZyaWdodGVuZWQ= d3JpdGVz IHJlY3Vyc29z YXJSZXN1bHQ= X0lOSVRJQUxJWg== IEJhZGdl X2NyYw== RWlnaHQ= IERJU1RJTkNU IHRocm8= QFhtbA== IExlZ2VuZGFyeQ== LXR3aXR0ZXI= X2Vhc3k= ICsrKw== KERBVEE= LkxvY2FsZQ== IGvDpA== IG51cnQ= IGNydWlz X2lvcw== IHNlbnNpbmc= X0xpbmU= CiAgICAgICAgICAgICAgICAgICAgCg== cG9uZw== b2xlb24= IHdpbGRjYXJk 55So5oi35ZCN IGJlZ2dpbmc= Um9k IMOO X0NFTEw= UmVzZWFyY2hlcnM= LnNlbGVjdG9y X2luZw== IGFzcGlyaW5n IGltbW9ydGFs IHltaW4= X3JvYm90 IHBsdXI= QlRD IERJRA== IHBpZXJjaW5n KnU= X0RFRklORUQ= IFRoaQ== aXRhaXJl KG1lZGlh LW9ucw== IGNoZWZz ICIqLg== L0FQ IHJhem9y IHNlYXJjaERhdGE= ID0m IOOAgg== IG1vdXJu dGluZ2hhbQ== IG9saQ== IFZlcm5vbg== X1JT nuaApw== IGbDoWNpbA== YW5nZW4= Y2VsYWlu IGFpbA== bGVzdA== IFFDT01QQVJF Z2Fpbg== IM61 IEtvYg== IEZhdWx0 X2NvbmZpZ3M= 57uT5p6c Lis= Y2FsYXI= KGNvbG9ycw== TXVs X0FSVA== IGV4cGVyaW1lbnRpbmc= ZXJtZW4= IEFuZ2xv LkZpeGVkU2luZ2xl U2Vh IGN0eHQ= LnNsaWRlcg== Q29sbGFwc2U= R3JleQ== IGZsZA== LXByb29m LmNhcGFjaXR5 Z2V0UGFyZW50 IENvbXBsaWFuY2U= IGJ1cmds LXJlYw== IG92ZXJ3cml0dGVu TVU= IHJvdXRlcnM= CU1vZGVs IGZhbnRhc2llcw== YXZpYW4= X3ByZWM= IFNjYW5kaW4= IC8vPA== L29jdA== IGNlcmVtb25pZXM= TW9udGhz dW5keQ== IHF1ZWQ= IE5vdQ== IFZpYnI= LnJnYg== IGNpdHJ1cw== IGJyYWNlcw== LXVwcGVyY2FzZQ== Z2V0VGFibGU= IGRvcG8= IEtlcnI= X0NISUxE LWNsb3Vk CU1hdHJpeA== IGdhcmRlbmluZw== U2luZw== YWxtb3N0 UmVxdWlyZW1lbnRz dWd1YXk= KFByb3BlcnR5 c3Vic2NyaWJlcg== RkFTVA== cmVhY3Rpb24= KGxw KX0pCg== YCku LndhbGxldA== X2V4Y2hhbmdl Lk1heGltdW0= IFZlcmI= 4pSB KCk8 77ybCg== Uk9U Q0FSRA== dWJpdA== e0A= X2tlbA== IFRvb2x0aXA= TXlTUUw= TWFpbkFjdGl2aXR5 YXJm IG1hbGlnbg== IHNlaW5lbg== YXBpc3Q= IDwl TWV0aG9kSW1wbA== TWls IE1pY2s= LmRlcGVuZA== PElE IHByZWRpY3RpdmU= IEFQUExJQ0FUSU9O bGVm ZGltZW5zaW9ucw== IGNvbm9jZXI= L2NvbmY= IFRyYWN5 Rm90bw== X3JlbWFpbmluZw== PWZpbGU= IHBhZ2VJbmRleA== IFBhcmlzaA== IHRleGFz IE1BR0lD IEhldw== ZGlmZmVyZW5jZQ== IGFsdHVyYQ== Y3Vt CWRhdGFUeXBl IGNhcmFjdGVyZXM= YXZpb3Vycw== IFZPSUQ= 6L+R UFVCTElD Qmlv IHN0cmluZ0J5QXBwZW5kaW5n UGFyc2VFeGNlcHRpb24= IFN1ZmY= IE5vcnRvbg== L2RldGFpbHM= Lm51bGw= Pj4m CW9r LWxvdw== LnVzdWFyaW8= bmVzdGVk WEI= T1VSUw== LkJvcmRlckNvbG9y IGJyb3c= INCV Y29ycg== IFJlZHNraW5z LmdldFRhZw== LmdldFRyYW5zYWN0aW9u IHN0aWdtYQ== aGFyZHQ= IFBsYXllclByZWZz YWxzeQ== dWNzb24= TGFuZ3VhZ2Vz IE9saXZpYQ== IHRhYw== IGJsaQ== IGNhdmFs IGNvbnNvbGlkYXRlZA== IHBlcmls IGRlbGU= IGZvcm11bGF0ZWQ= IGhpZ2h3YXlz LnNwYXdu PT0k IE5pZXQ= IHZlZ2dpZXM= eXBv LXJ1bGU= IFZpZQ== L2VwbA== IGVuZmFudHM= c3RyaW5nTGl0ZXJhbA== IHRvdWdoZXN0 YnV5ZXI= IGNvdmFyaWFuY2U= IGlsaQ== IFNvcGhpZQ== IEJBQg== ICIpLA== IFVr Y3VycmVudEluZGV4 X3VzZXJkYXRh LmNvZGVj IFB1bmphYg== IFNOUA== bG9s YWR2YW5jZQ== IGNvbWZ5 SnNvbklnbm9yZQ== IGZhc2hpb25hYmxl IElDT04= IG9yYQ== IFByaWNpbmc= PG51bQ== IElSQw== RVJW IE1laW4= IElEaWN0aW9uYXJ5 QURPVw== aXNOZXc= IERldm9u YXRs KHJlcXVlc3RDb2Rl CVByZXBhcmVkU3RhdGVtZW50 SU1QT1JU IG1hcml0YWw= X1NFTEVDVEVE Z2V0UmVzcG9uc2U= YXJEb3du QlY= aWJOYW1l IFBBVENI w6TDpG4= IGRhYXI= IEZpbGVNb2Rl IG1hcnR5 LlNwcmluZ0FwcGxpY2F0aW9u Y2VuZQ== YW1wb2xpbmU= Z2V0U2l6ZQ== UmVzdGFydA== 5pWI LnByb2plY3Rz IEV0aGlvcGlh IHN0YXR1c2Vz VElPTg== KGJn IFh1bml0 VGVtcG9yYXJ5 IEVuZ2FnZW1lbnQ= IHhm IHByb3hpZXM= IGdlbmVzaXM= UGFnZXJBZGFwdGVy IFNsYXZl IHN1bmdsYXNzZXM= IENobG9l IGtvamk= YWRlbQ== CUpTT05PYmplY3Q= zrM= IGhvcnM= Knc= w7Ny ZXNjaA== IGNyaXRpY2lzZWQ= emlhbA== IFNhbGVt LlZlcnRpY2Fs IFJhc2g= PkU= dGVyaW5n L3NjcmVlbnM= IGhlaWdodGVuZWQ= 0LDRgNGC QXV0aG9yaXRpZXM= X2Jib3g= w7xuc3Q= LmZvbnRTaXpl IEJPT0xFQU4= ZGl2aWRl IFNsb3Zlbg== dWNlcg== 2ZI= c3R1Yg== IG5hdmlnYXRpbmc= OmFuaW1hdGVk X05PVw== X3ZlY3Q= fXsK QCg= IHRlbGVjb20= IGNvbnRyYWN0aW5n IEFzc2FuZ2U= IGV4dHJhY3Rpbmc= IGdyw7Y= Y29icmE= LkRJUw== IGNyYWI= IHR3aXRjaA== IHZlcnRz IHJlamVjdHM= CWZvcm1hdA== IHJlZ2VuZXJhdGlvbg== LlN5cw== c29sdmU= CWRpYWxvZw== c2hp bWV0ZXI= KGJlc3Q= dmFsaWRhdG9ycw== IG9ud2FyZHM= IGd1cnU= IG1vZGVyYXRvcg== b3dpZWQ= ZXhwZXJpbWVudA== cnVi IG1xdHQ= IENhdWNhcw== IG5hdGlvbmFsaXNt IG1hbmdl CUltR3Vp L0VkaXQ= IGluaA== IGludGVsbGln ZXJva2Vl CWV4cG9ydA== IGRpc2NyaW1pbmF0ZQ== c3VidHJhY3Q= IE1vb2RsZQ== ZW5zZXI= IEd1aWRlcw== UkFQ LWhvdA== X2dycA== LnBpY3R1cmU= WEE= IGluaXRWaWV3 X0NvbW0= IG92ZXJkb3Nl ICsKCg== IFNpbGVudA== c2hvd3M= IGludGVycG9sYXRl Rm9ybWF0aW9u IGJpc2M= bWFya2V0cw== KFND WmU= IE5ldHdvcmtpbmc= IGFkcmVuYWw= IEd1bnM= ZXRlb3I= RGVjbGFyZWQ= b3JnZXRvd24= IGthcmVuYQ== L3Bhc3N3b3Jk X2FkZHJlc3Nlcw== SVRFUkFM QnV6eg== IENvbndheQ== KGNhc2U= UFdE aGVpcm8= KGFjdA== KioNCg== KCkpOwoKCg== IGFudg== IC4uCgo= KE1lbnVJdGVt KG1haWw= X3NlY3Rpb25z CW5ldA== IHBsdXQ= IHdyZW5jaA== L29iamVjdA== IElzdA== IFZJUw== L3B1Yg== YWx0ZW4= IGd1aXRhcnM= IGFudGliaW90aWM= 77yW wrk= ICIrIg== Zm9ybXVsYQ== IGJhYmVz IFByb21wdA== IGVuaW0= L3BsYXllcg== CXJlZg== IGJ5xIc= IGNvbnN1bWVz IEhhc3Q= IFRhbw== ICcpKQo= IGNsYW0= IHRoaWdocw== IG1vdGlm QXBpT3BlcmF0aW9u IFdM Z2V0Qw== CWZsYWdz b2ludG1lbnRz IGVjb25vbWljYWw= bmVlZGxl eGxz cHJhY3RpY2U= dXR6ZXI= dGltZW9mZGF5 LW91dHB1dA== IGZpbmRCeUlk IEJ1ZGR5 0J7Rgg== U2V2ZW4= IEJhcms= IGVudm95 X2FsZ29yaXRobQ== 5Yip IGJhbGxpc3RpYw== 56e7 cmFkZXM= CWRvYw== cm9kdWNpbmc= IEVhdGluZw== VW5tb3VudA== L2RhdGFUYWJsZXM= X2JvbnVz IGxpdHQ= cHBz KWxvY2FsT2JqZWN0 cGVyZg== IEhlbHZldGljYQ== c2h1dGRvd24= L21s LnRva2Vucw== IEhhcmRjb3Jl LHJvdw== L2Jn U2NhbGVy 4oCUYXM= X2xvZ2l0cw== 4oCZaW50 CUFwcA== SW1wbGljaXQ= LkZwcmludGY= RVRP IHRlcnJh IHBvc3Nlc3Npbmc= LnJzdHJpcA== LCks PXllcw== IFN0cmlwZQ== Pz0= bmV1dHJhbA== Lmdvb2Q= IGtlbm5lbg== IFN1bmc= ZmF1bHQ= eXN0YXRlY2hhbmdl Q2FuYWRpYW4= JywnIi4k IE1pdHM= w6ZuZA== IFNUUlVDVA== IFVSTFdpdGhTdHJpbmc= IENvbXBhc3M= IC0tCgo= IE5TTGF5b3V0Q29uc3RyYWludA== fG1pbg== LWFkanVzdA== IHJlYnVpbHQ= TElHSFQ= L3Nl LW1vdW50 dnBu dmFsaWRhdGVk KFFPYmplY3Q= IGlnbml0aW9u IENoYXJnZXJz UllQVE8= XWluaXRXaXRoRnJhbWU= IEZsdWlk IGNhZHJl IG5vbWluYXRpb25z TmVpbGw= IEhvdQ== IGN1cnJlbnRz X2dlbmU= KGlucA== UGFyaXM= esSZ YWdncmVnYXRl IGFzc29j d2VldGVk ZXJyYXQ= 4oCTCgo= ICcvJywK Zml4dHVyZQ== IEhpZ2hlc3Q= YW1iaWVudA== IGNobW9k IGNvbnRl IHNlbnN1YWw= IGdhcm1lbnQ= emVycw== IFBvd2VyZWQ= ZG9tYWlucw== UmV3YXJk aW9tYW5pcA== IGNvY2twaXQ= b3V0ZmlsZQ== IGJ1aWx0aW4= IGluc2lzdGluZw== LnZhcnM= emlwY29kZQ== IO+/ve+/ve+/ve+/vQ== ZmFpbHM= IGNvbnNvbGlkYXRpb24= X29pZA== UGxhbmV0 ID0iLA== CWVs VUlMVA== w6R0eg== YWZhcmk= IE1jQ2w= VGltZWxpbmU= RXN0YQ== IGZyYW0= WUU= IGNlcmVicmFs T2ZNb250aA== IFByZWdu INC60LvQsNGB0YE= ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCg== IEZyZXM= QXBwcm92ZWQ= LlNwZWNpYWw= IFByb3Rlc3RhbnQ= IGFsbGVyZ3k= X3BjbQ== CUNvcHlyaWdodA== IHN1cGVyQ2xhc3M= InN0cmNvbnY= IE1vaGFtZWQ= ICcvLw== Rm9yZUNvbG9y QXJ0aHVy IEp1bmdsZQ== IHZlaW5z U2Fk IGJhY2t1cHM= IE9waW5pb24= w7t0 IGludGVybWl0dA== b2R5bg== IENocmlzdGluYQ== IGFuZHJl IGV2YWN1YXRpb24= cGFsZXR0ZQ== aG9yc2U= IFJlc2lkZW50 IEhhc3Nhbg== Lk5pbA== IGFpc2xl IEdyb3dpbmc= IGJsb2dpbmZv L3NxbA== X2lvY3Rs U2NhbGluZw== IE1vbmFk X2NwcA== IEh1dGNo IEFwcGxlV2ViS2l0 RXhwZW5zZQ== X0pPQg== IHBvaW50bGVzcw== RnJvbUJvZHk= YW50YWw= IGRlcGljdGluZw== IENFTEw= IHJlZmlu IENOQw== 7LmY X2RpbWVuc2lvbnM= IFNBTg== IGFmdA== IGZvb3RzdGVwcw== Y2NvbGk= X1BIT05F L21hdGg= LWtpbmQ= IE1lYW5z aWNoYWVs Lmd1bmE= IGluYXVndXJhdGlvbg== LWRyaXZpbmc= KGRlbGV0ZQ== IHRvdGFsQ291bnQ= X01D LkV4dGVuc2lvbg== Q29tbWVyY2lhbA== IHpJbmRleA== PEN1c3RvbWVy Imc= LXNoYXJl IHBhY3Q= YWdhcmE= IFNJTA== X21vZGVz IE1vbGVjdWxhcg== IHN5c3RlbWF0aWNhbGx5 PEc= X3Njcg== IE9ybw== YXNlcnM= IGJpYw== IGRlc3Ryb3lz UElQRQ== LlN0YXJ0UG9zaXRpb24= IGPhu6dh aXJleg== LkJ1bmlmdQ== X0Z1bmN0aW9u IHPDvA== X2Z1dHVyZQ== IFdlYWx0aA== IE5hdHVyYWxseQ== 5oC7 X3llcw== IGFicnVwdGx5 U3RyaW5nRW5jb2Rpbmc= IENHUG9pbnRNYWtl IHpo IGltcGVyc29u IHBpdm90YWw= IFNvbWFsaWE= IHNlZ21lbnRhdGlvbg== X0FOQUw= IExvZ2luQ29tcG9uZW50 Q29uc3VsdA== IHRydW5jYXRlZA== XSI7Cg== LmdldENvbmZpZw== IGludGVybnNoaXA= QmFieQ== 6rCc IHN0cmVuZ3RoZW5lZA== X01J YmFza2V0 IG5pY2h0cw== IFRWcw== IFNoYW4= 44K1 cmFjdXNl LlJlTFU= L2ludGVyZmFjZXM= IGdldEl0ZW1Db3VudA== IHJldGlyaW5n IHNwZWNpYWxz IGVudGl0eU1hbmFnZXI= YmVsaWVm IHNvbGRlcg== ZGF1Z2h0ZXI= aWprbA== IHV0aWxpemVz LmZpeGVk U1U= IGRyYXN0aWM= IGhhY2tz Z3J1bmQ= IE1V IFN0YXJ0ZXI= LkNvbXBvbmVudHM= X21vdG9y R29sZGVu IGxvZGdl ICkpOw== IENvcmludGg= 0LjRh9C10YHRgtCy0L4= w7NuaWNv Z3JlU1FM IEZsdWVudA== IG1hcmM= LkxvYWRTY2VuZQ== Lkdyb3Vwcw== IGVyaA== IEF1dHVtbg== U3RvcHBlZA== IGl0YWxpYW5v IG1pbmlvbnM= IEFzc2VydGlvbnM= IG11eA== QnU= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== CXVw cmVhZHlzdGF0ZWNoYW5nZQ== X01ldGE= IGN1cnJlbnREYXRl IENoYXBtYW4= VW5kbw== U2Vhbg== YXBy IHBhcm0= X2ljb25z IFN0YQ== w6F6 IHN1YmRpdmlzaW9u IGFsdGVyaW5n UE5H cG9uZW50aWFs IHBvc3RncmVz IEJEUw== LWV4aXN0ZW50 IEJyYWRmb3Jk IE9NWA== X1dISVRF X1BST0dSQU0= cWM= IHR5cGluZ3NTbGlua3k= IFBpY3M= X01FVEE= SVRURVI= X3N1YnNjcmlwdGlvbg== SVJPTk1FTlQ= IEh5dW5kYWk= KCk7CgoKCg== INiz IGphYw== IGVsaW1pbmF0ZXM= KX0pOwo= IGNvbXByZW5k CWluc2VydA== X2ZhY2Vz Ij4k IGViYXk= IGNhcHRpdmU= cGxpYW50 IENhbGN1bGF0ZXM= b2x0YQ== ZXN0aW5n X3JldmlzaW9u IG3DunM= K20= IiwiIiwi V0hBVA== IGNvbXBhc3Npb25hdGU= aGFyZ2E= W3JhbmRvbQ== IG1vZHVsbw== KHNu IG9jY3VwYXRpb25z Ly8vLwo= CWJvYXJk IEJhbGs= d2nEhQ== IFdpZmk= LlByb2ZpbGU= Om1hag== CW1hdA== TE9DS1M= KGpCdXR0b24= ICgnJA== TXVy 5oyJ YmJsZQ== IGZyb2c= LWhpZGU= IGJyb2FkY2FzdGVy 4Lie aGFsZWQ= IGFtdXNpbmc= X3ByZWRpY3Rpb25z X2ludHI= IGVhZ2xl 0LDRgtC10LvRjA== IGdldExpc3Q= cHNpbG9u IGNoYXJhY3Rlcml6YXRpb24= QVJEUw== IHJlbG9jYXRpb24= IHJ1bGVycw== UEFZ IERlZmluaXRlbHk= X0FjdGlvbg== IGNsb3N1cmVz IGZhY3R1YWw= b2R5bmFtaWM= IHByZWNhdXRpb25z bmllag== IFBhcnRpZXM= IFN1YmFydQ== IGNvdXNpbnM= YXJiZWl0 Lm1vbmV5 Z3VudGE= KGFuZA== Z2V0aXRlbQ== LlN0eWxlUHJpb3JpdHk= IHNsaWQ= c2luZ2xldG9u IGdhcm4= IFBBUw== IGRheno= YcW8 IGJvZ3Vz IE1vZw== IHJpdmFscnk= aXNvbA== IGxhbmRtYXJrcw== w7Fhcw== QmVybg== IFNhY2hz ICIpCgo= IGhvc3RpbGl0eQ== X21leA== bWVyZQ== TW90 cGljdHVyZUJveA== RGVmZW5zZQ== IGFmZmlkYXZpdA== b3RoZXJ3aXNl LmRpcmVjdG9yeQ== X1VuaXR5RW5naW5l LWJsb2c= LnNraW4= cGhlbQ== QXBlbGxpZG8= ZXJjaGFudA== W2NsYXNz IHdhcnQ= LiJb YWxldXI= L2JhY2s= ICAgIAkgICA= IHByZWNpcGl0YXRpb24= IG9ic3RydWN0aW9u IHBPYmo= IHJ1cHQ= VUNLRVQ= YXll 5o6S Z3g= IGVjbA== IHNlY3JlY3k= L0hlYWRlcg== IExlc2I= IGxlaQ== IEJ1bGxldGlu IGdpdmVhd2F5 LkhvbWU= X1JPT00= Ilc= IGNvd29yaw== X3Jh IEN5Y2xpbmc= IFBhdw== IHB1cGls L2FyY2g= IEZpbGVVdGlscw== 6aaW cnNw IGZyZWVkb21z IExlYXI= fWApLg== IGJvd2xz L2Jsb2Nr X2xvZ2dpbmc= IG1ldGhhbmU= IGhvcm5z IHdvbmRlcmZ1bGx5 IGFsdGVyYXRpb25z IGV4aWxl bHNlbg== X3BhdXNl X0xBTkdVQUdF IFVTREE= X215c3Fs X0FNT1VOVA== IExJRkU= IHlvdW5nc3RlcnM= IHJpb3Rz W0U= IHVuZm9yZ2V0dGFibGU= LH0sCg== RGlzcG9zZWQ= IEFzc2Fzc2lu VU5H IE5ld3Nw VXNlclNlcnZpY2U= OmFsb2Fk Kycs IHNldHRsZXJz IHNjcmVhbXM= IGluY29udmVuaWVuY2U= LlJvdGF0ZQ== IGphcnM= IFB1enpsZQ== IG1lc3Q= YXJzaQ== IFNoYXJtYQ== fCg= LmRz IFNhY3JlZA== X2V2dA== IGV4cHJlc3Nlcw== IGhvY2g= IER1Y2g= LmNhbGxz dGhy IFNoZWZmaWVsZA== LkFsZXJ0RGlhbG9n IHJhZGljYWxseQ== IHRyb3Vz IHByZXZhaWxpbmc= IFdXSUk= 4oCZbg== ZW5zZWx5 IFllc3RlcmRheQ== IFNpcml1cw== IGtpbGxlcnM= IEZGVA== IG92YWw= Jyk6DQo= IOygleuztA== b3VyYWdl IENoZWNrYm94 V29ya2Jvb2s= LmRlZmVy X2Zsb29y IGNvdW5jaWxs IG5vcnNrZQ== bW9pbA== b3JlYQ== IG1hcmtldGVk X1NVUg== eEFB IHN0YWluZWQ= ZXV0 IE1lbmc= IGllZWU= LmV4dGVybg== ZWdpZQ== IHJhcHA= IFB5b25neWFuZw== J2NsYXNz TW9i IGluaXRpYWxWYWx1ZQ== X3dhdmU= IGphYg== IG1hc2N1bGluZQ== IGFtcGxpZmllcg== IHR0eQ== UGF0aENvbXBvbmVudA== X3h0 IEdGUA== L3NlYw== CWRpc3BhdGNo bWFya2Rvd24= IFNjaG4= Ym9sZQ== wrfCtw== bW91c2Vtb3Zl IGVyck1zZw== IGFzaWdu X21vbm8= VG9TZWxlY3Rvcg== IFp1 KFJlY3Q= IEVycm9yQ29kZQ== bGF0aW4= YW5naWJsZQ== dnRr Q0dTaXpl UG9rZW1vbg== IGNsYXNzbWF0ZXM= IGF0dHJhY3Rz IFRhdHRv dWx0YW4= b2zDs2c= IGhhbHRlZA== 4KSo IEthcnQ= IHVl X0luaXRTdHJ1Y3R1cmU= VGVzdENsYXNz IEFpcmJuYg== XyIs IGNoYXJjb2Fs IGlwYw== IFN0cmV0Y2g= LmdsaWRl bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz IHBvdGlvbg== SVRUTEU= IGNvdW50ZXJ0 X2hk cHJlcGFyZWQ= QWRz IFZhbXBpcmU= cm9ib3Rz LkNyZWF0ZUluZGV4 U3RhdHVzTGFiZWw= IHR1Y2tlZA== YWbDvHI= VXQ= IHN3ZWF0ZXI= X0ZO ICAgICAgICAgICAgICAgIAk= YXRha2E= IGV5ZWJyb3dz YWNvZXM= dWRlbg== LkxpbmVhckxheW91dE1hbmFnZXI= IHN3YXk= IG11bHRpbg== KCkpKSkK IE5TVUludGVnZXI= IE15QmFzZQ== UGFydG5lcg== dXRzY2hlbg== IENhdGVy LnNldEJhY2tncm91bmRDb2xvcg== IGFjY29tcGxpc2htZW50 X3Byb2JsZW0= LmR0ZA== IHBhZ2VOdW1iZXI= IGphY2tldHM= IGNyb3BwZWQ= dWVscw== IEhlcA== IGNhcHBlZA== Kk1hdGg= X2NhbGxiYWNrcw== IHB1YmI= IEJydW5zd2ljaw== LnJlc3BvbmQ= WyJf IGJlZGRpbmc= aHl0aG0= T1g= KHNwZWVk IHBlc3RpY2lkZXM= IC0tLS0tLS0= LkJsdWU= IG5vb2RsZXM= IEdvZXM= IHNhdmVy b3h5 X2NvbXBsZXRpb24= IFN3aW5nZXI= IGdldERhdGU= IG1pbmRlZA== aW50ZWdyYXRpb24= IExvdHVz KHN0b3A= KCcsJyk7Cg== IGZsb29kcw== IFdvcmtmbG93 IGVydXB0ZWQ= TWFjcm8= IFNhdWNl IGV2ZW50TmFtZQ== XElucHV0 QnJlYWtpbmc= CXdoZW4= X3B3 SU5ERVI= IFdlbGxuZXNz IHZveGVs IE1lbGw= IE1FRElB U0VOUw== IEZ1bmRz IE1pbGQ= PEFycmF5 LXRoaXM= dW1wZWQ= L2Z3 IERiQ29udGV4dA== V0k= Z2lybHM= SE9X Jyk7Pz4K IHRlbXB0aW5n IHRlc3RhbWVudA== IGJpYmxl IGNvbnN1bHRlZA== IEluZGV4RXJyb3I= 6KiY IGtleXBhZA== aXp6bw== KG9r IHdoYXRzYXBw IFJlbW90ZUV4Y2VwdGlvbg== IHRlYW1lZA== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU wrss IGdldFRpbWU= ZGlhZw== aXNzeQ== IGhlZA== IGtub3Rz am9t IGZ1bm5lbA== LW1haWxz IGV4cG9ydGluZw== IFZM IEthcm4= IEJ1ZGRoaXNt IEFsbGFu X1JBRElVUw== IHdvcmRpbmc= IEZvcmdldA== IENvcm9uYQ== aXBoeQ== IGxpbWJ1cmc= dWdneQ== IFVzZXJSZXBvc2l0b3J5 aW1pbg== KGVsZQ== IGxhYmVsbGVk 56S+ IEhlcm1hbg== LnFx ICIpKTsK aWViZXI= LlRyYW5zbGF0ZQ== cnlu IGRlc2Vudg== dW1k U2ltcGx5 CW1vZGU= UnBj IFZhbGVuY2lh IHN0YWZmZXJz IHNlbHY= IFNwaWtl IGRlbGlj IGVydQ== X0RU SnVkZ2U= 4buV IEJhc2lu Lm11dGFibGU= InVybA== IHRhcmlmZg== IFNsZWV2ZQ== IGZsYXJl LmRyb3BvdXQ= IGJyaWRlcw== KSksDQo= X2NvbnN0cmFpbnRz ZGVzdHJ1Y3Q= T3V0bGluZQ== IGRpc2FwcGVhcnM= X2xvY2tlZA== IE5TTG9jYWxpemVkU3RyaW5n Y2tl CW51bGw= YWRyZXNzZQ== IHRvcHBpbmc= IEpva2Vy YmlzaG9w 0L3QvtGB0YLRjA== YW5kZXJpbmc= X2FtcA== PXRpbWU= X1NwYWNl X1BVTEw= Jz0= IGFudGlxdQ== IGNhY2g= X19fCgo= T05FUw== 0L7Rjw== IHVucmVhZA== LnBvbGljeQ== b29vb29vb28= 65+s IHVzdGVk IFJlY2U= IGFsbGVt 44O844K5 IFRob3VnaHRz dmVpbGxhbmNl aXN0cmF0ZQ== X2xhbmU= IGZhbWVk LkdldE5hbWU= IHNtb290aGVy IFF1YWxpZmllZA== YXplcnM= X2dlbw== RmF4 IE1pbmRz IFJhaXNlcw== IHRyYW5zY3JpcHRz Q29udmVyc2F0aW9u IHJlbWFya2Vk 64KY ZGxpbmc= IGRlcGxveWluZw== IHNoYXJlZEFwcGxpY2F0aW9u IGtw Rm9udEF3ZXNvbWVJY29u X2R1bW15 cmVpYmVu IEphbmVpcm8= RGlyZWN0aW9ucw== LmdldEJlYW4= c2Fzcw== IGNvbW1hbmRlcnM= dmF0aW9u ZXJyb3JDb2Rl IEFsbG95 LmxvY2FsaXplZA== 0JE= IGRpc2h3YXNoZXI= IFNvdXA= TnU= X0RlZmF1bHQ= IHVuZXZlbg== IC8+IjsK LUJhc2Vk IHNlYW1sZXNzbHk= LW51bGw= IFhD IHN0ZXc= KGRlbGF5 QVRPUlM= IFdoZWVsZXI= Ijw/ IENoYW5kbGVy IHJldGFsaWF0aW9u IGJ1ZGRpZXM= LXNpemluZw== IEVpbnM= IC4uLiw= cXVldGU= IERPQw== IGZhbHNlbHk= IGZsYXRz TklDQUxM IGxpYnI= QmVOdWxs aW11bGF0aW9u CVF1ZXJ5 X3V0 IHBsYXF1ZQ== YmlsZA== IHNjcmVhbWVk Lm12Yw== LldpZGdldA== IGRpZmZlcmluZw== L3N1cHBvcnQ= X1ZPTFVNRQ== Lm5vZGVUeXBl CVdyaXRl IHLDs3du Ym9va21hcms= X0NPTk4= IENyZWVk IGluaGliaXRpb24= IFJlaGFi dXZyZQ== IGR1bXBz b3dlag== X3BsYWNlaG9sZGVy IEhXTkQ= IGRlcm1hdA== LmRldGFjaA== IGZpbmFsaXplZA== Z2VyaWVz aWRhaw== X3Byb2c= IHVwZGF0ZVVzZXI= bHlz Lkdvb2dsZQ== IGx1ZWdv IGFudHM= 5qCH6aKY IERSTQ== 0LvQtdC9 LWRi ZXJyaWNr X2xu Li5c aWtpdA== IERpZW4= IHBhcmFtZXRyb3M= a2V5cHJlc3M= IEtlcmFsYQ== IGRyYWluZWQ= ZsO8Zw== IGNhcGl0 X2F1Zw== dGFudA== TmF2QmFy IHJvbGxiYWNr IGxleQ== 4LiI IEJTUA== IFByZWRpY3Rvcg== IHdhZ29u ICJ8Ig== U2VydmU= LkRvbmU= IER1cmNo UHJvdmlkZQ== CXNjb3Jl X09E LndlYXBvbg== IHVuaXZlcnNhbGx5 IGluanVuY3Rpb24= X1NDUk9MTA== Lk1hdHJpeA== IE1vbmdvQ2xpZW50 YnVmZmVycw== IGJhZGdlcw== IHNoYXJrcw== IFNoYXJr TU9ERUw= LlJFQUQ= CXRhZw== IHN0cnRvdXBwZXI= RVJHWQ== Ymlhcw== IGFjY291bnRJZA== IEVtbWFudWVs IHJlc29ydHM= IHN2bg== d2FybmluZ3M= X0lF TEFT IG51bGxh CWFz IGRlbWVhbg== 4oCcQXM= QXV0aG9yaXplZA== IHRlbmRlbmNpZXM= LXNldHRpbmc= IHByZWxvYWQ= IGNubg== 4oCcTm8= JSkKCg== PVQ= dXN0bw== IEZJUkU= cmVzZWFyY2g= INCT IExlc3NvbnM= LkFwcGVuZEZvcm1hdA== IGluaXRpYXRpb24= IENvdXM= YXJlcg== cHJvamVjdGlvbg== IFNoZWV0cw== IEZvbGQ= UmVkZGl0 RGVsZXRpbmc= IHphbQ== IE5ldXJhbA== IEZlY2hh IMKu IHRhc3RlZA== IEVuZW1pZXM= IEpvaG5zdG9u IGRhbmNlcnM= IGRpc2FibGluZw== IHBldHR5 IFdlbGQ= Ly0t KHNwcml0ZQ== SUdP YXJnb3V0 IHF1YXJ0ZXJiYWNrcw== ZGlzcGF0Y2hlcg== IFN1c3RhaW5hYmxl ZW5hcmlvcw== IFNraQ== IGZhY3Rv aWxsaW4= X2V4dGVuc2lvbnM= ybU= Pkg= ZWFzdA== LmFpcg== 4oCcQnV0 T2JqZWN0Q29udGV4dA== c3VjY2Vzc2Z1bGx5 X2xhbmQ= IGZvbGRz X0NPT1JE IHN1YnBv LmdldEFkZHJlc3M= aW5zdHI= TWF0ZXJpYWxz 0YPRgdGC ZGVwb3NpdA== LWxhc3Q= X0dSQVk= PWZpbmQ= IG11dGFudA== IGxlc2JpZW5uZQ== bGV0Y2hlcg== Uk9VR0g= dXJla2E= LmNhcHR1cmU= IGVubg== IChbWw== IEZsdQ== IHRhc2tJZA== IEh1c3NlaW4= LmZvbGRlcg== IGF1c3Rlcml0eQ== SVNUUkFUSU9O X0ltcGw= 5rOo5oSP IGRlY3JlZQ== LWNoYXQ= IGltcGxpY2F0aW9u IGd1ZXNzZXM= dWxrYW4= QW5hbHl0aWNz LnBsdXM= Q09NTUFORA== 0LXQu9C4 wrsKCg== X1NJVEU= IGVxdWFsVG8= U3VwcG9ydEZyYWdtZW50TWFuYWdlcg== IFJlY29yZGluZw== 5a6M5oiQ IGJhZ2dhZ2U= IHBpdGNoZXJz IEVo b3F1ZQ== CWNudA== ID0+JA== L2Zvbw== SVJB IFNhdGVsbGl0ZQ== Ym9yYWg= IH19Igo= IEVuZHM= IFNwcmF5 LHBhcmFt LkNocm9tZQ== KnE= dGhvdWdodA== aWJyYXRlZA== IHRoaWV2ZXM= IGJlbmVmaWNpYXJpZXM= RW50ZXJlZA== b3R0ZXN2aWxsZQ== IHZldGVyaW4= QnlJRA== cXVpcGU= dW1wdGlvbg== LXVuaXQ= RXhlY3V0aW9uQ29udGV4dA== QHM= IEdpb3Y= LlRvb2xUaXA= X2ZyaWVuZA== KGF0dHJpYnV0ZXM= IGR1bXBpbmc= IEpD X0RPQ1VNRU5U IEFybW91cg== KGluc2VydA== Lkhvcml6b250YWxBbGlnbm1lbnQ= IFFlZA== 44GE44G+44GZ L2dpdA== IFlZWVk= IENhcmRpZmY= IGFwYQ== b3JnYW5pYw== IFdoZXJlYXM= IOad IE1pYQ== IGRlbW9saXRpb24= IHNjYXJz IHBhaQ== IHJldHJpZXM= IHJx IERlbmlz KFV0aWxz IGFsbGV2aWF0ZQ== IFBJQw== aWR1ZQ== IGFja25vd2xlZGdpbmc= IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 56Gu5a6a xKs= XEpzb24= LmJpbmFyeQ== IHh0eXBl c2lnbmFscw== IEFwcGVhcmFuY2U= JnI= fXM= Q2k= IElsbHVt cG9yYXRl aG9n IGluZGV4T2Y= XENvbW1hbmQ= X3BhcmFsbGVs IFNoZXJsb2Nr 7YM= ICIiKQ0K Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v IGNyaXRpY2l6ZQ== IFNvYXA= IE1hdGNoZXI= IGdyaWxsZWQ= KlQ= IGFkb3Jl dWxsaW5n IGplZG9jaA== X3JlZnM= bGVhbnVw IEpBWEI= IHJvc2Vz IExpYW0= c2l6ZWk= IGdldGNoYXI= IHRhcmRl LXRvb2x0aXA= IHF1YWxpZmllcg== IEludGVybWVkaWF0ZQ== X1dpbmRvdw== IE1hbHRh RGlzY29ubmVjdA== ZXdoZXJl Q2FtcG8= IGlycmF0aW9uYWw= bGVkbw== IERO QVJHVg== IG91dHJv IHRoaXJ0ZWVu Sm9zZXBo TUFS L2ds SmVzcw== IFBzeWNoaWF0 IHBhZGRpbmdCb3R0b20= LWxvb3A= L2ZvbnRz X3NlZW4= VGVhbXM= UmVhY3RET00= KG1hbg== KHhwYXRo LmdldFNpbXBsZU5hbWU= Pigq IFB2dA== IGVsZGVycw== IHBpZXM= LnVzZXJBZ2VudA== LXJlZ2lvbg== IEdyZWVrcw== KGZyYWdtZW50 c3R1 IGNvdW5jaWxz IHN0YW1pbmE= IEdvZGRlc3M= 6KW/ IHBoaWxvc29waGVycw== IHBlcnNvbmU= IExvc2U= IENMUg== IERvY3M= IHNvYWs= IEhPTERFUg== IGJlbGxz aGFzaENvZGU= UkFURQ== X1dFSUdIVA== aW5vdXM= ZW5kcmE= b3Bob2JpYw== IHByb3Nl IGZpbmVseQ== L29hdXRo KHNwYWNl YWRnZQ== IE1hbWE= IHN0cmluZ0J1ZmZlcg== IHN0aW50 IG1pc21h IHZpbGxhaW5z IENyaW1lYQ== IGRpcGxvbWE= INC/0L7RgdC7 IEJlYQ== KGpvaW4= IO2VtA== Q0hBVA== cGVyaW5n IENyb3M= IG1vbmtleXM= IHByZWRz eWxh LCws IHZpYnJhdG9y IE5V 5YWI ZmFudA== emV0 IGJpZXRldA== dW5mdA== c3dvcnRo LkZsb3c= IHBzeWNoZWQ= IENvbnRpbmVudGFs PnQ= IHF1aWx0 LlVQ IGV4cGFuc2l2ZQ== RGlzcG9zZQ== KGxhbmd1YWdl Q2Fwcw== X1pPTkU= IHJlY3ljbGU= IE1hbmFnZWQ= Y3VycmVudENvbG9y LmJyb2FkY2FzdA== c2lnbklu LnByb20= bGx1 dWVibG8= IHB1bmNoZXM= IGF1dG9tYXQ= IGFzc2lnbmluZw== IGNyZWF0ZVVzZXI= IEFsbGllZA== IGNvbmR1Y3Rvcg== gqg= IHNhZGRsZQ== IGRuaQ== b21lZGljYWw= LVdlc3Q= UG9zaXRpdmVCdXR0b24= IGl0YWxpYw== P1s= KHRyaWdnZXI= IGVsZXBoYW50cw== IjoiIiwi IGNhbGliZXI= cmFmdGVk ZGlnaXRz IG1hcnNoYWw= bWlsbGlzZWNvbmRz bWFya2Vycw== bW9t L3BsYWNl IGhvbGlzdGlj OnQ= Iyw= IGJvdG8= IG5hdXNlYQ== IFNob290aW5n aXRlY2g= IHRleHRTdGF0dXM= PENsYXNz IERlc2NyaWJl IGJ1ZmZldA== Z2ls IGxvZ2l0cw== c3RkY2FsbA== bW9kcw== IFNrdWxs IEJhcmU= aG9wZQ== IEludHI= RmFpcg== CXB0 IGFjb21wYW5o IGZraw== X3JwYw== SW5zdGFsbGVk X2Fucw== LmdldE1pbnV0ZXM= 4oCmIgoK LXRocmVhZA== IHByZXNjaG9vbA== QUlMUw== IGRpZmZpYw== KGNvbnZlcnQ= IE5hdGg= IERPSg== IHJlZ2ltZXM= IGVudGh1c2lhc3Q= IHdhcnJhbnRpZXM= IGZhc2NpbmF0ZWQ= X2JpbmRpbmc= X05vdA== b2Z0ZW4= X1JX L21haWw= IHRpdGxlTGFiZWw= IHZpbGxhZ2Vycw== IEppYW5n IHN3YWdnZXI= LlJvd0luZGV4 X2ltZ3M= cmFweQ== VkVSQUdF LlVw IG5vb3A= Y2lv CVNU IGRlY3JlbWVudA== IG1hZ25lc2l1bQ== X3JvdGF0ZQ== U2l0 IG5pZXV3ZQ== IHRlcm1lZA== 7ZWp64uI64uk IHVyZw== X3RvdWNo IHN3YXJt IGNsYXZl dGhlc3Q= IExhZg== SFg= IEh1bGs= IHBsYWludGV4dA== IFNvZmE= Z2V0U2Vzc2lvbg== TGVk IGVjb3N5c3RlbXM= aGVp IEtpbGxz IGh1c2JhbmRz 0YXRgNCw0L0= KGRvbQ== X3RpbGVz TmliTmFtZQ== IGRvbmF0aW5n LmFjYw== IGxpZmVzcGFu LmJu X1JHQ1RY 5qU= YW5zZW4= IG1vZGVsbGluZw== TGF5b3V0UGFyYW1z IG9uQ2hhbmdlVGV4dA== cnNh LWxvY2F0aW9u LlBl KGJ1cw== KHNvbmc= IHByb2R1aw== IFNIT1VMRA== IENK IHNvcw== IEhvbWVDb250cm9sbGVy LmxvYWRlZA== KERvY3VtZW50 LnNvY2lhbA== dGlsZXM= IGxhbWU= PWRm LnBhcnNlTG9uZw== IHByYWM= IGRldG94 IFZF IHB1bnRvcw== IGRvY3Ry IGFuY29y Q0FQRQ== IGNtYg== 54S2 Kiki Oi8vLw== VmFsdWVUeXBl IG1vcnRnYWdlcw== O3E= IFJvY2tldHM= c3BvcnQ= VUdD Y3Rz 44KB aWV1cg== IEFwcGVhbA== KG5i Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= SU1BVElPTg== IENyZXM= IE1hbmlw Q2F1c2U= YXR5cGVz bWFudWZhY3R1cmVy Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHNwb3I= ZXNvbg== IHB1bmNoZWQ= IGJvb2ttYXJrcw== IEJ1bGs= Q29tcGxldGVMaXN0ZW5lcg== IFRhbGtpbmc= IEVybmVzdA== IHJ1YmJpc2g= a2lsbHM= IERFRklO IG5laWdoYm91cmluZw== YXJsbw== IFBDQQ== CW1hdHJpeA== bG9r IGF0bGFz IEd1cg== IHd5bg== LW5lZ2F0aXZl IHR1bA== IHJlbGlj IFZvbHRhZ2U= IFByZWlz IEpOSUNBTEw= IFBNSUQ= YWtldA== CWF0dHI= IGV0aXF1 IE1K IEdtYWls Y2xy X2V4ZWN1dGlvbg== 6ZSu cG9zaXRvcg== LmFm TnI= R2VvcmdpYQ== VG9wb2xvZ3k= IHBlcmNow6k= IG11c2xpbQ== IGVwaWRlbWk= IHNhYm90 YWN0dXM= IOuMgA== IElPRXJyb3I= LmVzdA== cHJlZnM= IEtyaXNo LlJlYWRLZXk= TkFTQQ== dcOnw6Nv X0Ri dW1lcmF0b3I= V2lkZQ== KHN0YXRlbWVudA== LmVuZHBvaW50 Li4uLi4uLi4u IFsq c3RyZWFtcw== bXRpbWU= UHg= YXRy IHRwbA== Um9tYW4= IHNjZW5pYw== Lm56 IFNlY29uZHM= c3VibWVudQ== IOyLpO0= X2J1bmRsZQ== IGRlxJ8= IFNpc3RlcnM= cHJlZmVyZW5jZXM= IHBvcnRh QWR2aXNvcg== bWF4TGVuZ3Ro IEdSRUFU X18oCg== b2xlc3Q= IExhYmVscw== IGVuZmVy ICAgICAgCgo= IFRoZWZ0 X0ZJTEw= IFdpc2U= KWFwcGxpY2F0aW9u dW5hbWk= PigpKQo= QUREUkVTUw== QlNU ZXR6dA== IFFncw== U2Vuc2U= RXhjZXB0aW9uSGFuZGxlcg== IENodQ== LmdldE93blByb3BlcnR5 IGV4ZXJjaXNlZA== aW90aWM= IFJlbGVhc2Vz IHBpbnRlcmVzdA== b2xpZQ== aXNvZnQ= IHNlcXVlbmNpbmc= IHBhZHJl XSkpOw0K KHJhZGl1cw== Lm1lZA== YWludGllcw== Lk9iamVjdE1vZGVs IGVtcGxl IHNlZ3Vybw== U3RhcnM= IHF1YWxpdGF0aXZl bGVtbg== 4bux PiIpLg== IGd4 LWNlcnQ= IEFTVE0= IGZ1bGxuYW1l IHRlbGVtZXRyeQ== IENhbWJvZGlh X3Vs IENsYXJl Q1VTVE9N UUM= IFVucw== IEhUVFBT IFBhcmtpbnNvbg== YW5jeWJveA== JywnLg== VHVl LmdldExhc3Q= IGFiaQ== xIVk QXN0 IEVkaXRpbmc= LlVuaXR5 am1w IG1hdHM= IHNoYXJlZFByZWZlcmVuY2Vz Q2FwdGFpbg== LnBhZ2VTaXpl IHJ0bA== IGFubWVsZA== UnVudGltZU9iamVjdA== IGRlbWFuZGU= KCI7 c2VpdGU= LWhlYWRlZA== IEtyYQ== IEZPTlQ= YFw= Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbg== LmF2Zw== YXRpY2Fs QWo= IHBlcm1pdHRpbmc= UHJvag== RVJSUQ== IGNyZWFtcGll IEJ1eWVy LW1vZHVsZXM= IFN1bmRheXM= fGAK IGRheXRpbWU= ICso IGdsaXRjaA== IE9wZXJhbmQ= IHRveGlucw== aW55YQ== RE5T IFNhcw== Q2FrZQ== IE5hdGlvbmFscw== LmFkZFRv IHNpbmtpbmc= IGNvbXByZWhlbnNpb24= IHNjb3I= YWdlbWVudHM= IHRhcmQ= IG1hcmNoaW5n IE1UVg== IHNhbmU= Q3JlYXRlSW5mbw== 4bqv IGVuZEluZGV4 CWxheW91dA== IOWQjQ== U0lURQ== IFRIRVJF IFt7Jw== b3BhdGhpYw== IHRyYW5zbWl0dGVy L2JvZHk= IHB1bmQ= IENsb3Npbmc= IHNldGF0dHI= IGJvdW5kZWQ= QXRsYXM= c3VtaW5n KHRpbWVz cGFyZXI= eW5vbQ== ZmVpdA== IGZyZW0= LWxlZw== IEJyYXM= PiM= IOy2nOugpQ== IElOU1RBTkNF IENvdWNo X2hvc3Rz bGlrZWxpaG9vZA== Lk1hcmtlcg== IE1hc2tz IGNlcmVhbA== dXRpbGl0aWVz IGVsZW1lbnRhbA== IGRpc3RvcnRlZA== aW5hY3RpdmU= Y3J5 V0w= VVBQT1JURUQ= LlRocm93cw== L3NjaGVtYQ== c2VyaWU= LiInLA== IEJlbmVkaWN0 LXBpY2tlcg== aWdncw== IFBpcmF0ZQ== 5ZGo5pyf IFRoZW1h IFNvdXRoYW1wdG9u IGFycmF5V2l0aA== IFBhdWxh IHByZWRpY3Rvcg== LUFzcw== LnVzZXJpZA== IHBlcmk= IGV4YWdnZXJhdGVk dXJhdGU= YXJzZWlsbGU= IENvbmNlbnQ= IFBpaw== IEBfOwoK IGZvcm1hdGlvbnM= IGRlbm9taW4= Ii8+Lgo= ZW5kZWRvcg== IHBhbmNyZQ== IGFtdA== IG9uUmVzdW1l b25EZWxldGU= IEJDSA== KSgi bW92ZW1lbnQ= IHBvdGFzc2l1bQ== PCEtLVs= IG1lbWVz X1NFVFVQ X2dhbW1h IGNvbG9yV2l0aFJlZA== IGdyYXZlcw== IHN0YXR1dGVz IGFxdWFyaXVt IExhbWFy IHhBeGlz V2VicGFja1BsdWdpbg== X2ZvbGQ= Lmdlbw== IEZlZXQ= LXNwZWFraW5n 6aKd X2Nvcw== IEF2ZWM= YW5zdA== IEVFUFJPTQ== IGRlYWxlcnNoaXA= IFVudGVybmVobWVu LEludGVnZXI= IMOqdGVz LmB8YAo= dmluZQ== IEtuaWZl X3ZlcnRpY2Fs LkRvd25sb2Fk IG92ZXJzaXplZA== bGlk IHBpbGxhcg== Y2F1Z2h0 IGZsYWdnZWQ= KHJvdXRlcg== KFJFRw== IGJhcmJlY3Vl YnJvd3Nl IEZpdHpnZXJhbGQ= INC/0YDQvtCy aXJpZQ== IGVyc3Rl ZWxpYg== X1BSRVNT IGhlYWxlZA== IGhhdXQ= PnhwYXRo IFdlbg== Z3J1bnQ= LktleXdvcmQ= LWhhc3BvcHVw bnc= U1o= Z2FiZQ== SW50ZXJhY3Rpb25FbmFibGVk cHJlY2g= IHByaW1v c3RyaXBl YWx0ZWQ= X0JPUkRFUg== ZmluZEJ5 X2Fubm90YXRpb24= V2ViU29ja2V0 QnVy IGRpcGxvbWFjeQ== KHRk IFNpbXBs ZGV0ZWN0 cGVyZm9ybWFuY2U= IGNhcmJvaHlkcmF0ZXM= L2lvdXRpbA== LS0tLS0tKw== X3Ny bWVldGluZw== IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= X1Zhcg== IHJvdmVy IGNhc2k= IE1hdGNoZXM= cXJ5 X0JPT0s= IHByZXN1bWVk IE3DqXQ= L2l0ZW1z IENyZWRlbnRpYWxz XSkuCg== IEthcmRhc2g= QWRtaW5pc3Ry IFNsb3Zhaw== KCcsJykK IGNvbnF1ZXN0 UGVyc2lzdA== IERyYWlu Ymlq IGRvdg== IHPDuGdlcg== V29uZGVy QVNFVA== W21pbg== Z3VuYQ== Z3Jvd24= IH0pCgoK QVVE IGJlbGlldmVy aXNlcnM= KHNlbnQ= SmFja3Nvbg== IHBhaXM= IGN1ZGFNZW1jcHk= IGZsYXNoZXM= YmVyZQ== IG11bHRpZg== IENhcmdv RWxlbWVudHNCeVRhZ05hbWU= KGVwb2No IEt1bmRlbg== UmVjb2duaXRpb24= IFNldFZhbHVl IFN1bnNoaW5l QUNQ OnN0cg== IGFtYmlndQ== IO2VnA== LWxpbmVhcg== IFdPVw== KGN1c3RvbQ== IGlzRW5hYmxlZA== QkFU X2RpYWc= X0dVSQ== SGVhdA== IGFzc2VtYmxpZXM= IENldHRl L2NhcmQ= IERlY2xhcmU= IHVwaGVsZA== IENsYXVk LWZsb3c= IGhvb2t1cA== SVJR RmF0aGVy RGVsZXRlcw== KSk7Ly8= IFBUU0Q= KTsNDQo= ZWdhbA== LmFycm93 IE1QVQ== w7Nq IG1vdGl2YXRl IEthdGhlcmluZQ== LmZyYW1lcw== IHRoaQ== PFJlc3VsdA== LmdyYXk= IEt1c2huZXI= IENlbWVudA== IEJ1cmw= SW50ZXJ2aWV3 PSciLg== UE9XRVI= IENEcw== IFsmXSg= IGNoYW5nZXI= Pj4sCg== LXdl IENMSw== IEFkcmk= IGNpbA== PVg= IHNlbmRv IENlbHNpdXM= YmxvY2tlZA== T3V0T2ZCb3VuZHM= LiE= b3Byb2plY3Q= YW5kZXM= ZWRpdGluZw== IHB1bXBlZA== KCk7fQo= 4Ka/ X0VWRU5UUw== IEZyaWVkbWFu ID4v ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IHRlbXB0YXRpb24= IElwc3Vt IENlcw== IG5vdGljaW5n X2VsZQ== QWNjZW50 IE52aWRpYQ== IGFtdXNlbWVudA== IGludHJvZHVjdG9yeQ== CXJldHZhbA== IGxpbA== aXJpbQ== ZW5xdWV1ZQ== LWhpc3Rvcnk= IGNvdW5zZWxvcg== VFJBTlNGRVI= X1ZlY3Rvcg== Y2F0ZWdvcnlJZA== cGVyeQ== RklMVEVS KHJlbW90ZQ== IHNlcGFyYXQ= IEVtYmVkZGVk IEJhY29u dGVycmFmb3Jt IHJlc3BlY3RhYmxl aWNoYQ== YWlj Kydc IHN0cmF5 0LXQvdC40Lk= IEF1ZGl0b3I= ZW50aWNhdG9y IGNsb2Fr IFVOS05PV04= IEFtZW4= dm94 YXN0cmVldA== Li4uXQ== IGAl LXByb3BlcnR5 IFF1YWxjb21t ZWRpdGVk IGRpc2NyZWV0 LU11c2xpbQ== LnJlY2lwZQ== IHZhbmRhbA== IHXFvHk= c2VuaGE= LGlz IFBvbXBl IEtuaWNrcw== KCknLA== KHRi IEhJRA== IHBldw== IGNhcnJvdHM= IHBvbGljeW0= Lmxp IHR3ZW50aWV0aA== X3Byb21wdA== c2NlbmFyaW8= LkpGcmFtZQ== IE1RVFQ= IEluZGl2aWR1YWxz dG9NYXRjaFNuYXBzaG90 w61zdGljYXM= IkQ= IGZvZA== IHJpY2h0 IFphcg== IHJlc3VycmVjdGlvbg== IG1pbGl0YXI= IE1hbmFnZXJz X0dSSUQ= bm9ubnVsbA== QkVSVA== T3V0cHV0cw== ICAgIAoKCg== IHByZWRlY2Vzc29ycw== IGlzU2VsZWN0ZWQ= IGN5YmVyc2VjdXJpdHk= 5YaZ Lm1j UXVp IGFsbGVnaW5n IHRpYw== TWFudWZhY3R1cmVy IEVuaGFuY2Vk IEJpeg== IHJlYWRPbmx5 w7Ru IGx1bWJlcg== YWVk IHJhaW5z cHJvdmlkZQ== TGF0ZQ== IHBlZGVzdHJpYW5z amF2 QWN0aXZhdGlvbg== J0JyaWVu IHZhY2FuY3k= Ly8t IGJsYWRkZXI= IGFnaWxl IHN0ZWFscw== IHJlZ2lzdHJhcg== IGVsZWN0b3JhdGU= R292ZXJubWVudA== J109Ig== YWxidW1z ZWxlY3Rpb24= YWJs IE9yaWVudA== IHBpcmF0ZXM= IGxvb3Bo CXJlYWRlcg== IMO6bHRpbW8= IFBldHJv INGB0YLRgNCw0L3QuNGG IHNhbXA= aW52ZXJzZQ== LmdyYWRsZQ== IERvbnQ= eG9u IGNyZWFk ZXJ0aWxpdHk= cmdjdHg= IHBvbMOtdGljYQ== VmFsdWVDaGFuZ2Vk QXBpUmVzcG9uc2U= Y29tYm8= IFVY IGRhaGE= J2Fu LW15 4oCcTXk= cGVl bGF0bG9uZw== XEJhc2U= Lndpaw== IFBPVA== IHB1bmN0dWF0aW9u cXVz aW55aW4= PW1pbg== IG51Y2xldXM= IGNvbmNlc3Npb25z LmF2ZXJhZ2U= dXNlcmluZm8= IHRhYmxlc3Bvb24= IE5laWdoYm9yaG9vZA== KFRocm93YWJsZQ== PnY= b3Z5 WFhYWFhYWFg= aXN0aQ== IGJhcnQ= 77u/Cg== RW5jcnlwdA== PWVuZA== IGluY3Vy IHBlcnRpbmVudA== X01JTk9S KSI+Cg== Y2hpZWY= IHZk KGAK dXJneQ== YWJ5cmludGg= IFNoYXBlcw== IHZhZ3k= LmRkcw== bWVtY21w CUl0 c2VtZXN0ZXI= IEVtaXQ= IGluc2Fu IGJydXNoZWQ= X0ZBVEFM ImVycm9ycw== IGRpc3J1cHRpdmU= JW4= IGNvbXBvc2l0aW9ucw== IGJhY2hlY2E= IGRpc2FncmVlbWVudA== UHJvdGVjdA== TElLRQ== LkZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== IHdlaXRlcmU= IE1vbmFjbw== Xzw/ IG1vZGVsZWQ= c3RlZWw= ZWVudGg= IFtdKS4= KHJlZ2V4 ZW5pZQ== LkZsdXNo LnBvcHVw IE92ZXJz LkRlYnVnZ2Vy PmA7Cg== bml0ZQ== LnF1b3Rl IGNvZw== IHdha2Vz IFdyZXN0bGluZw== SW50cm8= IHNlcmRl IHJldXNhYmxl IENvbXBvdW5k SW1wbE9wdGlvbnM= CUl0ZW0= IG51bU9m IENIUg== IEJvbHRvbg== UExVUw== Ym91bmRpbmc= KCsr ICIsIjsK IEd1ZXN0cw== IGRlcHJpdmVk IG1lbG9keQ== WklQ Pj4oKQ== IGNvbmNlZGVk X2RpZQ== IGpveXN0aWNr IGFuYXRvbXk= IFRvb2xTdHJpcA== IEVub3VnaA== Iio= aW50b3No aGFiaQ== IFN5cmFjdXNl IEluY3JlYXNlZA== TXVz LnBhdGllbnQ= IGluY3JlbWVudHM= IFBJWA== IGJvb3R5 LnByaXZhdGU= ZXJ0b2lyZQ== IGN1dHRlcg== IGJla2Fu IGRyYXdlcnM= X0FMSUFT QW5pbWF0aW5n X2Fuc3dlcnM= LmF0dGFjaw== d3JpdGVycw== IGdhYW4= aWtvbg== CWNvbnRyb2xsZXI= IGZhY2FkZQ== k+WQjQ== LHN0YXR1cw== LmZl IHBvc3Rwb25lZA== IEZvbnRz IEJlbmNobWFyaw== aWRlbnRhbA== IGNoaWxsaW5n IEtpZXY= IGJydXNoZXM= LXdoZWVs IEhpcmU= KHByb2M= IGNoZW1vdGhlcmFweQ== INCx0YvRgtGM IE5vbGFu KGllcnI= IEp1ZGU= LUF1Zw== dW1ub3M= Y29udmVyc2F0aW9u IEJlaGF2aW9yU3ViamVjdA== YmF1Z2g= IGd1aXRhcmlzdA== Lm9mZmVy IGFjY3VzZQ== cGFyZA== cmVmZg== LlJlYWN0 IHVjaGFy IG9mZnNldG9m JHN0YXR1cw== L2VtYWls LmNvbm5lY3RlZA== Lys= QHFx YXJhdmVs IGZ2 LlBlcnNpc3RlbnQ= ZW5zdGVpbg== Li4uXQoK LmdyaWRWaWV3 IEpPQg== LScuJA== LmxheW91dENvbnRyb2w= IGNhcmc= IEtvdA== X2VxdWFscw== IHdpdGhkcmV3 QVRFU1Q= LWJ1dHRvbnM= CVVQUk9QRVJUWQ== IFVJR3JhcGhpY3M= IFB1YmxpY2F0aW9ucw== IElOVEVSTg== IGV0aGFub2w= w6RuZ2Vy U0VORA== CXNsb3Q= 0LvQtdC90LjRjw== IHBhc28= X2V4dGVuZGVk b3J0aGFuZA== KHNoZWV0 IHByb2NlZHVyYWw= IGtpZG5hcHBpbmc= Ly8tLS0tLS0tLS0tLS0tLS0t W21zZw== T2NjdXJyZWQ= QWxpY2U= IENBU1Q= IGthdGE= 5rOo5YaM Y2hlYXA= aWNpdHk= IHJlYWRpbmVzcw== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IFNZTg== IE1hZ2dpZQ== cmljYQ== IHlp IFR3ZQ== aWdub24= YW5kZW4= IGpxdWVyeQ== IHN0YXJ0WQ== IGF2ZW51ZQ== QW50aA== X2NhcHRpb24= IFJvd3M= wq/Cr8Kvwq8= c2VxdWVuY2Vz 0LjRhA== KCIvIikK Y3JhdGU= IFNhZ2E= SnVk IGZhY2V0cw== X3NjYWxlZA== UnVieQ== IFBR IGNydXM= SXJhbg== LnNxdWVlemU= CWZk IHBlcmNl IGRhdGFw Xl5eXg== X1NDT1BF IFNhbG1vbg== IHRhaWxsZQ== IFZhbG9y QUdFTUVOVA== UnA= IEd1YXJkaWFucw== IHJlYWRGaWxl IG5lZ3Jv IG9icmE= LlBhcmNlbA== Q0FDSEU= cmV0Y2hlZA== Y3Jt cXJzdA== b3VmbA== 7ZqM Lm5vbQ== c3NpZA== IHNhZmVzdA== LkVycm9ycw== X3BuZw== Q29udmVydGVyRmFjdG9yeQ== PFNlbGY= IHNlcGFyYXRlcw== X2pCdXR0b24= IG1pc3VzZQ== ZXhjZXB0aW9ucw== IFt7Ig== IFBBRA== 562+ a0h6 PWVu IGjDoG5n SFo= IFhhdmllcg== e2lk IHN0YWlyY2FzZQ== dGV4dGZpZWxk L2RvY2tlcg== KHRhYmxlTmFtZQ== IHRlbGVjb21tdW5pY2F0aW9ucw== b25zbw== b2Ns UGFyZW50cw== L3BhcnNlcg== LWRyb3A= KHN0eWxlcw== X21vZGlmaWVy UmVxdWVzdElk LmJyYW5k IENvaW5z IGt1bnQ= Lkdy IEhJU1RPUlk= KGRyb3A= QnJhZA== IHNla3Np X3Nkaw== IGluc3BlY3RlZA== cHJlZGljYXRl LmZp R09S IGNvY29h IElRdWVyeWFibGU= LS0tPC8= IGRlcm5pZXI= IFVzZXJEZWZhdWx0cw== X1RT IGVvcw== IGJsZW5kZXI= IGxvdWRlcg== U3BhbmlzaA== bGluZXI= XHdpZGdldHM= IHNjaGVtYXM= X0NBUFRVUkU= Lm1pY3Jv 44Kt IPCfkQ== IGFuZGVy YWx0dW5n ID09Jw== IGVuZm9yY2luZw== IEV4aXN0 dXZ3 aXJ0c2NoYWZ0 IEdyZWF0ZXN0 IE1vc3Vs X3Bv IHNpbW1lcg== IHByb2dyZXNzZWQ= IHJvdGFyeQ== IG50bw== Tm9pc2U= IGNoYXNlZA== IGluc3RpbmN0cw== UHVibGljS2V5 IHNuYXBzaG90cw== IFN1cGVydg== Lm1hYw== IEJpYmxp Li4uKQoK CW9sZA== S0VO IENsaW0= IFByb2dyZXNzRGlhbG9n bGljYW50cw== X3NsaWRl K2g= IGVtcG93ZXJlZA== SW5qZWN0b3I= IGluZmx1ZW56YQ== IHBsYW5ldGFyeQ== V2lsbGlhbXM= IG1vbmQ= ZW5hbg== LnJhbmRvbVVVSUQ= KFBvc2l0aW9u IGhvbWJyZXM= IGluc2VjdXJl IHZlcmJz X3JlY3RhbmdsZQ== SU5TVEFMTA== IFBhcnNlRXhjZXB0aW9u X1RB JGZpZWxk LkltYWdlSWNvbg== IEd1amFyYXQ= LWxpdmVk X3NvbWU= IGNsaXBwaW5n LmdldENvbXBvbmVudA== LmNsb3Nlc3Q= LmxpdmU= IGluY2lk DQoJCQ0K IHByb2R1dG9z X211c2lj U3FsQ29ubmVjdGlvbg== IFByZWRpY3Rpb24= IFhU LW5vdGVz IEpld2Vscnk= cmVtZW4= KHJlYXNvbg== U25hcA== QWZmaW5lVHJhbnNmb3Jt YW5nZWxvZw== IGRpY3RhdGU= IHpvc3Rh QmFyQ29udHJvbGxlcg== L3Nob3A= ZWlk LXN3 Q291cnNlcw== Zm9udFdlaWdodA== IEhvZmZtYW4= X051bQ== S1I= IFdpbGxpZQ== YXJrYW4= LXNjYWw= IGF1ZGl0aW9u LmRpc2M= IHR3aXN0cw== IGRlcGljdHM= IGJhbnlhaw== IEtpdHM= IEhlemJvbGxhaA== bm9ydGg= IEdSRQ== w7Zn cXVvaQ== LXRocmVhdGVuaW5n IHdvcm1z IFBO IHNleGRhdGU= IG1vbnVtZW50cw== TU1D Ym90cw== IFNETEs= ZGVhdGg= IHBpdHM= X2Nob2ljZXM= KHNvbHV0aW9u IHByb2NsYWltZWQ= IFFpbmc= IHNzY2FuZg== c3RyYXRlZ3k= ZGVhdXg= IEZpc2NoZXI= X0lW IGlud2FyZA== RGF0ZVBpY2tlcg== IHNld2Vy IGV1cm9w IGhvbWVsZXNzbmVzcw== LlNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== IFNwYWNlWA== IGluZm9ybWluZw== ICch IHBsYXN0ZXI= SW5pdGlhbGl6YXRpb24= LmJldGE= IFBlcnNvbnM= dWdnbGluZw== IHNoYW1wb28= IEplaA== IHNlcnI= IG1heFNpemU= IHN0aXRjaGVz W3BhdGg= LnJldA== IFByZXQ= TmVpbA== Q29udmVydGVk IE1hemRh UE9TSVQ= VG9vbGtpdA== IFJFQURNRQ== Q3VzdG9tQXR0cmlidXRlcw== YXJjaGl2bw== LlBhaW50 Z2V0T2JqZWN0 SVE= LldlYkRyaXZlcg== IGFudGlib2R5 IExpbWE= aW5jb3JyZWN0 RnJhY3Rpb24= IERlYWRsaW5l c2VuZE1lc3NhZ2U= Lk9mZnNldA== ZWRpbw== INeQ IHNtb290aGluZw== LmJv IENFTlQ= ZWxhc3RpYw== LmNoYXJDb2RlQXQ= UmVmcmVzaExheW91dA== QUdFRA== KTtcCg== IFtdKQoK IHRhcHM= RFY= 4oCV IENveQ== IG91dHdlaWdo J2dj XEV4Y2VwdGlvbnM= IEdyYW1tYXI= IEd1YXRlbWFsYQ== IEd1cnU= IHRlag== IGZyaWVuZHNoaXBz IGNvcGluZw== KHVwZGF0ZWQ= X2R4 QW5hbA== LU1heQ== IG1hdGNobWFraW5n IGp1bnRv UEFDS0FHRQ== IHJlbnRz IOiHqg== Y2FrZXM= 44CCJywK cmVuZGluZw== X0ZyYW1ld29yaw== LSk= KHVwbG9hZA== IG9wb3J0dW4= IGNhdXNh IHByb2xpZmlj Um93Q291bnQ= IG5hY2t0ZQ== IFNveQ== U2h1dGRvd24= 6Ig= X0VYUEk= IEhhcmJvdXI= IHRvcmU= XE1lc3NhZ2U= L1U= T01CUkU= LnNlZ21lbnQ= IGNvbWVk cm9tYW4= IHNlZ8O6bg== U2lnbWE= IHNraWluZw== IFRlcnJhaW4= IGJlbmNobWFya3M= IEF0dGVudGlvbg== IH0qLwoK IGdlaWw= IGNhcnRvb25z IGF0dHJpYnV0aW9u IHJvdG9y ZW5oYQ== IM6z IHRyYWo= IGPDtG5n IHNoYWtlcw== IENsZW1zb24= IGJydXRhbGl0eQ== IDsNCg0K IGVpZ2h0ZWVu IEF3YXJlbmVzcw== KHJlc3Q= IHZpb2xpbg== X1JPVVRF LkZpZWxkTmFtZQ== IEFkZQ== aXppYQ== IEhlbG0= IHR5aW5n IFByb2dyZXNzQmFy YXV0b3I= IGxvbmRvbg== Jnc= Z29v SVNUUlk= L0NyZWF0ZQ== IFVTSU5H IEdY IEVGRkVDVA== RmNu IEVuY3J5cHRpb24= Q0VE ZmluZQ== LWFycmF5 IHB1c2hWaWV3Q29udHJvbGxlcg== QCQ= VXBsb2FkZWQ= LXdyaXRl LmdldFBhZ2U= X2VzdGFkbw== QU5UTFI= IFZpZXdEYXRh ICR7KA== IGFsbW9uZA== IExvZ2ljYWw= IHNob290ZXJz IOygnA== IHB1ZmY= IHVuY29tbWVudA== IGN1c3RvbWl6YWJsZQ== xINy RGlyZWN0aXZl CWlkeA== Q2hhbGxlbmdl IHN1bW1hcml6ZQ== IEF2Zw== LlVzZXJJRA== LmRpc3BhdGNoRXZlbnQ= IGNvb2tlcg== IGNvbm5lY3Rpb25TdHJpbmc= IHNocmlua2luZw== amFk IFRoZW1lcw== YW5kYXRvcnk= IGR1YmlvdXM= IGNlcA== c3Bpbm5lcg== IHN1YnJlZGRpdA== IGlpaQ== L2NhY2hl ZGVmZXI= IHN1YnN0aXR1dGVk IGd1bm1hbg== Y2xpbmc= IOyw KGN0cmw= T3JkZXJJZA== X2VuZw== IGZpbG1tYWtlcnM= IGZvcndhcmRpbmc= IHN0cmFuZGVk IExlYW4= IOunjA== KFVuaXQ= IGRpZFNldA== bGFrZQ== Z3JvdW5kcw== 5Zug IHVucmVnaXN0ZXI= IG1pbmhh IFZlZ2Fu CWlWYXI= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= b3R0bGU= SVBD IHByYWdtYQ== IElJRA== X01pbg== JTsiPgo= X3JhbQ== ZHJpdmVycw== IENoaWNr IGNscg== X0JVRkY= INCy0YvQsQ== TWVyYw== anV2ZW4= IHNoaW0= 0YvRhQ== IHRoZW9yZXRpY2FsbHk= L2ZvcnVt IHNwaWRlcnM= IGdvb3Nl IFBob3Rvbg== IHByb2ZpY2llbmN5 IENsZXJr X2ZpZw== Q29uY2Vybg== KGNvc3Q= IHJlZGQ= LmVudmlyb25tZW50 Q3JvcA== IOKJpQ== eWVjdG9z LkJhdGNoTm9ybQ== LWNvbXA= JGltYWdl IE5pa29u IGRtZw== Wzo6LQ== UExM dW5jaW9z Zm9jdXNlZA== IHR1bw== IGh2b3JkYW4= IGF0dGFpbmVk IHByb3RlY3Rvcg== IEthbnQ= IHNob3Jlcw== IEV0aGFu X3NjaG9vbA== IG5lYXRseQ== LlNoYXBlcw== IE5lbQ== aGNw LicvJy4k IE3DqXhpY28= c3RydWN0dXJpbmc= IGxha2g= IGFkcmVzc2U= JywnIw== IEhhc2tlbGw= X0VOR0lORQ== IHJlcGVudA== IGN1Y2s= LkZJRUxE IFNrZQ== QEBAQA== SGl0cw== IGltcGxhbnRz IENvbnN0aXR1dGlvbmFs IFBIUFVuaXQ= IHRvaWxldHM= LmFsYnVt 5LiL6L29 CXNldFN0YXRl KCItLS0tLS0tLS0tLS0tLS0t LkFtb3VudA== ZWN0dXJl IFRob3VzYW5kcw== TmVpdGhlcg== IHByZXNldHM= IEFzc3VtZQ== KGZhY3Rvcnk= IGxpY2s= IGdvYWxrZWVwZXI= PFN0YXRl LXNlY3VyaXR5 X2ll ZXNrdG9w IEx2 IFN5bXBob255 LnNhbXBsZXM= IGh5cGVydGVuc2lvbg== xYJ1 Lmp1c3Q= TWVuc2FqZQ== IT0t PFRLZXk= IHNweWluZw== LGRhdGU= b3JnYW5pemVk ICAgICAgICAgIA0K KGN1ZGE= X01ldGFkYXRh dWJpc2hp LUJlbno= X0Fzcw== IEVsc2VJZg== IGxlc2lvbnM= IFByZXN0b24= VGVjaG5pY2Fs IHBsYXRpbnVt L3Bp SW5kZXhlcw== IHBhcmFwaA== IG92ZXJ0aHJvdw== aXBhdGVk b250b2xvZ3k= IGRlbW9ncmFwaGljcw== IGNhbmU= IHByb2ZpdGFiaWxpdHk= IGVzdGFibGlzaG1lbnRz XSY= OmFic29sdXRl ZW50cmFkYQ== VHA= IHNoYXJlaG9sZGVy Lidf 5aaC5p6c bnBq dnJpcg== IEVYRUM= IFBvbGljaWVz IGZlbGxvd3NoaXA= IENHUmVjdEdldA== X3JlY2lwZQ== X1JFQw== dW51 IHJvYmJlZA== IHR1cm1vaWw= KTo6 LnN0YXJ0RGF0ZQ== IGV2YWN1YXRlZA== LWVxdQ== IGZvdXJ0ZWVu QFNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== IOaVsOaNrg== bmFudHM= dGhyZW4= U29ueQ== REZT LWNpZ2FyZXQ= IGFnZ3JhdmF0ZWQ= IG5lZGVybGFuZA== IEZ1ag== dWNlcw== L3VzZQ== dW1tZXI= KFNURA== 6rCE Kj4m LnBlcmNlbnQ= aWFudHM= IEN0 VkFT X1RIRU1F IHNuaXBlcg== X0VM LXdvcmtlcnM= U25vdw== IEF1cmE= aWVnbw== IEdsb2I= TmFtZWRRdWVyeQ== X0JH IExpdmVEYXRh IFNlbmRNZXNzYWdl IHJlc3BvbmRzVG9TZWxlY3Rvcg== ZW5jZXJz aW5zdHJ1Y3Rpb25z KEl0 5ZG95ZGo5pyf IEdvbWV6 Y2hhcmdlcw== LkdlbmVyYXRlZFZhbHVl IE1hY3Jvbg== KFBPUlQ= IFByb2Nlc3Nlcw== Lm9uUmVzdW1l IGZpZQ== QnVpbGRlcnM= KWdldA== X3dhbGxldA== IGNhbmM= IE1vYmlsaXR5 IGFsYXJtcw== cm9zaXM= YW1hw7Fv IHBpcw== IOODuw== U2hh IGNvbmZlc3NlZA== KElORk8= KCcsJw== X1NlcnZlcg== IGJsYXN0ZWQ= IEZhcm1lcnM= cnV6 Y2tlZGl0b3I= X0lNUExFTUVOVA== IG1vdHRv IENBUkU= IHlkaw== Qm9uZQ== IGFkZW3DoXM= KyIvIis= UHJvcFR5cGVz X1Na LnBhaW50 LnBpeGVs IE1lc3NhZ2VUeXBl IHR3ZWFrcw== YC4KCg== VmVyaWZpY2F0aW9u bmVjaw== YmVycmE= IG1pbmRmdWw= U3Vydg== IDotCg== IGFueXdheXM= IEFkbWlzc2lvbg== YWNjZXNzaWJsZQ== RmxhdEJ1dHRvbg== ICInIik7Cg== IGhhaGE= VG9Qb2ludA== IGJ1cmdlcnM= Z2V0U3RhdGU= XEhlbHBlcg== IEZVTkNU IEVMRU1FTlQ= IENFUlQ= IEFDQ09VTlQ= Y2hhcmdpbmc= X2NhbmRpZGF0ZQ== X3JlY2VudA== IEluc3RydWN0b3I= IGRydW5rZW4= WVNRTA== b3JhdGl2ZQ== IjoiIg== IHRhZ05hbWU= X05FRw== IHFw IFVuZGVmaW5lZA== IGdyZWFzZQ== CSAgCQ== IGVhZ2VybHk= VGV4UGFyYW1ldGVyaQ== ZGlzdHJpYnV0ZWQ= QWRtaW5pc3RyYXRvcg== RGlzdHJpYnV0aW9u IERlY29tcA== IFRyYW5zZm9ybWVy LmJ0blNhdmU= IEdvcw== KEVudW0= Y2Fpcm8= LWNp L3JlcG9ydA== IFBvc3Rlcg== X2RlcGVuZGVuY3k= IGV4cGxvaXRz c2V0Rmxhc2g= IHh0 IGpld2VsbGVyeQ== IGRhaQ== X1JBTQ== IGJlcnJpZXM= IGdyYW5ueQ== RmF0YWw= w6lhbA== LW1vc3Q= LlZpc3VhbEJhc2lj IFBlbmQ= YmVp amFr OyovCg== Qm95 PlNlbGVjdA== aW5kcmljYWw= VGVjaG5vbG9neQ== IEFsbGlzb24= ZGF0YXR5cGU= J2Nsb2Nr IGtvc3Q= IGJham8= LkNvdW50cnk= WmVuZA== LndyYXBwZXI= 4L0= IEZpbGlwaW5v b2NyZQ== U1NI IFNBTVBMRQ== X2luaXRpYWxpemVk KTs/Pgo= IHBvcm5vc3Q= ZXNhbg== IEN1dHRpbmc= IG1peGVz X2FnYWlu IGZvcm11bGFyaW8= W1Y= IHRlbGVmb25v L3Vz IGxvYWREYXRh LnJlZmVyZW5jZXM= IG1hcFZpZXc= KyJf IFNRTGl0ZURhdGFiYXNl aXRvbg== Q29sdW1uVHlwZQ== IEV2ZXJ0b24= LlJlc3VsdHM= L25vdA== IGdldEZpbGU= aGVyaXRhbmNl IGdldEhlaWdodA== JHVzZXJuYW1l d2l0aGRyYXc= Xyk7DQo= LnV0 IFFBcHBsaWNhdGlvbg== dXJuYWw= LWRvd25sb2Fk YnVyZ2Vy cHJlY2k= IFRoYW5rZnVsbHk= LkVWRU5U IGdyZWF0bmVzcw== IGxvb3NlbHk= IG1hc2g= IGdlaGVu X2FudA== IGltcGVuZGluZw== LmlzUHJlc2VudA== IHN0YWlucw== SU1T LmJhY2tlbmRz IGlycmlnYXRpb24= IFRhdA== L3Rlc3Rz IEtpbmdzdG9u LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz IHZvbWl0aW5n LXJlcXVpcmVk IGJsYXpl IFN0YWZmb3Jk UklE L2Z3bGluaw== IGthbGU= c29sZA== KHByb2dyZXNz KGNoYXJ0 IGN5c3Q= IGRpbGlnZW5jZQ== L21w IGNsZXJneQ== IEJyb3dzZXJSb3V0ZXI= IEFQSw== IENPTlRBQ1Q= QmFySXRlbQ== LURpc3Bvc2l0aW9u IE1vdG9yb2xh X3NhbA== IFdvb2Rlbg== IFRIRVk= IGNvbW1lbnRhdG9ycw== IGNvbW1lcmNpYWxz PW1vZGVs LiIpLAo= IFBsdWdpbnM= ZGFpbg== aGVhZGVk IENvb3JkaW5hdGVz SmFuZQ== IFByZWZlcnJlZA== IHBvZGVtb3M= LmlzQmxhbms= IFN0YXA= IHdzcA== IENPTEw= X2JpZA== IHByb2Jlcw== dWFuaWE= KHN5bQ== IGN1ZXJwbw== IG1hbmlwdWxhdGluZw== IGFtYXppbmdseQ== LkRBWQ== dW1wdGVjaA== YWNvYmlhbg== VGVybWluYXRl IHN0YXRpb25lZA== U2V0QnJhbmNo U2NyZWVuc2hvdA== ZXN0aGVzaWE= IHdhbGtlcg== I2Zyb20= Y29vcmRpbmF0ZQ== X2ludGVyZXN0 IGhlbHBsZXNz CXB1Yg== bmdh X0V4 IG53 IHRleHR1YWw= IHBsdWdz IG1pbmlvbg== bWFyZXM= PD4K QUNB Q29tcGFueU5hbWU= KGVj IExhbmRzY2FwZQ== X1BST1ZJREVS Y3c= lIQ= QWNjb3VudElk JDo= IFBlcnNvbmFsbHk= cHJvcGVydHlOYW1l IEt1Yg== J2k= IEdpdWw= IHByaW9yaXRpemU= Rk9STUFOQ0U= IFBhcmFkZQ== KVwK c3RkYm9vbA== IGFsZXJ0RGlhbG9n IExlaA== LmNhdGFsb2c= IHdlYmluYXI= IGltcG9ydGVy cHJvamVjdElk VFlQTw== X18NCg== R1c= c3VtbWVy IHNpbmlzdGVy LmZhaWxlZA== IGJlc29pbg== aXNtYW4= REVTVA== IG5o4bqtcA== IG1vxbxuYQ== X2luc3Ry IHBhdmVk IHByZWZpeGVz IHJhbXBhbnQ= IHlBeGlz IOazqA== X21pZGRsZQ== IHNjaG9sYXJseQ== IHByb3N0aXR1dGVz IG1vcmFsZQ== LnBlcm1pc3Npb25z LmdldExpc3Q= IHJlamVjdGluZw== IGxvb3Bpbmc= IFNwZWNpZmljYXRpb25z IGltbWVuc2VseQ== IE1lZGlhbg== KGNoYWlu IGNsaWNo L2ZsdXR0ZXI= YWNm LnVybG9wZW4= dXR0ZXJzdG9jaw== IHNwZWN0cmE= IGFkbWly L21heA== LkVtaXQ= KHdlaWdodHM= acSZ SW5zdGFsbGluZw== SnU= IEZlbGw= IEZSRQ== LmRlbg== IEJpZ0ludA== Ij5A ICopOwoK IEJpb2xvZ2ljYWw= IHBhdGVudGVk LnBhZ2luYXRpb24= LnJvbGw= IER1bA== IGRlc2Fycm9sbG8= UmVnYXJkbGVzcw== mOydtA== IHJvYmU= 0J3QtQ== IEJveWQ= LyoqKioqKioqKioqKioqKioqKioqKioqKg== cmVjZWlwdA== IEFzc2lnbmVk YXR0ZW5kYW5jZQ== LWNob2ljZQ== ZXRzeQ== X2Vsc2U= LG5leHQ= X2V4aXN0aW5n ICcnKSwK IGxpYmVydGlu dHJhaXRz YXR0ZQ== Q29tcGFyYWJsZQ== IENvdg== IEFkb2xlcw== LHRoZQ== IExvYWRlZA== fHI= PWluZGV4 IEdhc3Q= IGluamVjdG9y CXN0b3A= LWdvb2dsZQ== IGZldGFs IGFsbG8= eWxlZnQ= Z2V0UGFyYW1ldGVy 4oCd4oCU X3NlY3Rvcg== LlV0aWxpdHk= b3Njb3Bl LmVhc2U= IE1hZ25ldGlj QXJyYXlPZg== IGZlYXJmdWw= IEluZmVy IEZ1aw== Sm9obnNvbg== JGFycmF5 IHNhaXM= X2NvbnRy RGVzY3Jp IERldGFpbGVk X2xlYXZl X1JPVA== IG7DpGNo IGthbWk= RENBTEw= OmVx IG1vbms= X29ianM= KFNlcnZpY2U= ZmluYW5jZQ== IHBvZGVt X3Jlc3RvcmU= IGRlY29yYXRvcnM= IGFkdmlzaW5n INC/0LDRgA== LnBlcm0= IEhhaQ== IGZr dW50ZWVycw== IFJUV0Y= X2l4 QUNT IGJyZWFrb3V0 ZGlyZWNjaW9u IFN1bnNldA== X2Z4 b2xrYXRh LXJhZGlv SGV0 LnV0aWxpdGllcw== X2Jhc2lz KGtpbmQ= IENvbmM= VGh1bWI= IE1pY2hl ZGVsaXZy IGd1dGU= IEZpbGVQYXRo IFRyaWJl XCIp X2N1ZGE= RGlmZmVyZW5jZQ== IE1vbnN0ZXJz IHNldFR5cGU= LkNvbnRlbnRUeXBl IGR1bQ== RW52ZWxvcGU= YWd0 IHVubG9hZA== X2NoZWNrZXI= IHJlc3Rv X3Blb3BsZQ== UHJpY2Vz UHJvZmlsZXM= KClc RlVO ICIjIg== IFBhdHRlcm5z IFNQRA== X1JPV1M= T3JpZw== YmxhZGU= IGzDqQ== JWk= Kysr TGlmZWN5Y2xl LS0tLS0tLS0tLS0tLS0tCg== VGFy VGhhbk9y JnE= IGNyaXRpY2lzbXM= LXBo RWxlbWVudEV4Y2VwdGlvbg== X2d1ZXN0 IOu2 X0Fz IENhcnJ5 X0JJRw== YWtldXA= X3JldHJ5 IG7DqWNlc3M= IE1JU1M= aXN1 IFNwaXJpdHVhbA== XyRf IHJlZmxlY3Rpb25z PHQ= IGZ1bsOnw6Nv IG1vbmFyY2g= IFBhdGVs X3ZvbHRhZ2U= IHJhaW55 Y291cnQ= IHVsdHJhc291bmQ= aU9T X0FMV0FZUw== V28= X0JMRU5E b2tzZW4= IHRyYXZlbGVy IGRhdGFUYWJsZQ== c2V0Q3VycmVudA== V29ya2Zsb3c= LnllbGxvdw== XSkt QUJTUEFUSA== X2l0ZXJhdGlvbg== 0LTRgA== IHViaWM= IG1lYXRz L2Vt IERpc29yZGVy IGVudmlhcg== U0VP IGhlYXZlbnM= X3N0dWI= IGFkcmVzcw== IFRyaWU= IExpbmRzYXk= bGVp IHBsYXRh LnNldHRpbmc= IGVsZWs= ICgkew== QXV0b21hdGlj IGRvd25zdGFpcnM= UElY aWNpb25hbA== YWJhbA== LXN0b3JhZ2U= aWNoaWVy IEFscGhhYmV0 LGxhYmVs QAo= IGludGVzdGluYWw= IHZhcmE= Lm1h IHByb2du IG5lcGhldw== VGltaW5n Y2xhc3NuYW1l IGxvY29t IFNhbWFudGhh IEFjY29yZGluZ2x5 IFhDVGVzdENhc2U= IFBsYWlucw== IExlbmlu bm9w IFR5c29u IHJlbmFs b2luZQ== KFRlc3RDYXNl IExvbWI= QmFuZw== IHZvbHVt X2dlbmRlcg== IGx1dA== IO+8 Q29uZmlndXJlcg== IHN0cm9rZVdpZHRo Lkh0dHBTZXJ2bGV0 fHg= LkpTY3JvbGxQYW5l IGNvbnNvcnQ= LmJ1bXB0ZWNo dHJpZGdlcw== IGJlbmVmaWNpYXJ5 PXJlcXVpcmU= cmVuYw== IE9V ZW50YXJpbw== IHVyZ2Vz 4oCUbm90 Q2FtcGFpZ24= ZHJl IFJpdmVyc2lkZQ== CXRi IG91dHB1dEZpbGU= IGFic3Q= IHN0cnVjdHM= IHJ2YWw= XCI+Ig== IGFjcXVpc2l0aW9ucw== QkxBQ0s= IHRydW5j IGFubm90YXRlZA== c2V0VXA= VE9LRU4= IENvY2E= RGlzYXBwZWFy OnZhbHVl IGFpZGVk dHRs bHV4 IGFjdWVyZG8= IEZpbmdlcg== Lkdlb21ldHJ5 XScpOwo= Lmdm VFhU IFNjb3RpYQ== YXZyYQ== IHZpcA== IHdob3BwaW5n LWdpcmw= IGN1cnNlZA== XVst IGNpcmN1bGF0ZWQ= dW5jdHVyZQ== b3JtYW4= IG1BZGFwdGVy IOKAlAoK RmlsZU1hbmFnZXI= KGlQYXJhbQ== SW1hZ2VCdXR0b24= REFR QXJtb3I= IHNwYXQ= LmpzZGVsaXZy IG1pc29n LmVjb3Jl J119Cg== aW1wb3J0cw== IGRpbm9zYXVy LUZyZWU= IGFubm9u IHRyaWJ1bmFs WWE= Lmd1aWQ= bW9zdGx5 PT09PQo= IGltYWdlbQ== U3VpdA== a2Fz IENoYW5uZWxz QnVkZ2V0 IERpdmlkZQ== amVt IEdyaQ== IGluZGljYXRpdmU= XEZhY3Rvcnk= LnJlcG9zaXRvcmllcw== IEFNUA== LnNucA== IGHDpw== Ims= IMK1 ZGVjb2RlZA== X2FyYw== LUNsYXVzZQ== IEFkag== IG5ld0FycmF5 KEdFVA== IGxhdGlu IHd6 OnVpbnQ= 5Yir Ii4u Q29ubmVjdGluZw== ZW5ub24= 5bm2 IFNlcw== IGJlbG9uZ2luZ3M= Kycm CXNldHRpbmdz SU5W IHDDqQ== IGFkdWx0aG9vZA== YW1ibGU= X21hc2tz LXJlc29sdXRpb24= cmF0cw== IO2BtA== IHZvZw== IFNobw== IENvdmVuYW50 IHJlbWluZGluZw== b3JuYWRv aWFk 5byC Q3JlYXRpdmU= IFNUWUxF IGFub21hbHk= XEFwcGxpY2F0aW9u IG1hbmlmZXN0YXRpb24= IE5hbm8= TWFwVmlldw== aWRlYWw= YWNoaW5lcnk= IFZhdWdo cHJpbnRlcg== VmVyZGFuYQ== L2NvbXBvbmVudA== IGFkZENoaWxk IGxlYXJuZXI= IGRlY3J5cHRlZA== IHRpZ2h0ZXI= 5p2f IGplag== IC4KCgoK IExvYmJ5 bGVw w6Rubg== bGVpZ2g= L3JvdXRlcw== IGNhbm9weQ== IEZpc2NhbA== Ojsi IGJ1cmRlbnM= L2Z1bGw= IENTUg== LlNoYXJlZFByZWZlcmVuY2Vz L3RyZWU= IGRyb2l0 SW1wbGVtZW50 R2V0Q3VycmVudA== KHB1c2g= JHg= 0Y/Qtw== QUNJVFk= PT09PT09PT09PQo= amM= X2hyZWY= LmdldFJvb3Q= IEtE KGxz W2NudA== IGRhbGw= KGJw IEVX S2V5RXZlbnQ= bG9iZQ== IGh0bWxlbnRpdGllcw== IGZhbHRh IHZhbHZlcw== IHNpemluZw== UG9ybg== IHNob3dFcnJvcg== IEZyaWQ= IMOH LnJhbmRu IHRhbnRy IHNheA== dXJvdmlzaW9u dGhlb24= X1JDQw== eEZE SW5pdFN0cnVjdA== IGNhbm5lZA== IHF1YW50aWRhZGU= LldBUk5JTkc= IEJyaXR0 LXJlZ2lzdGVy YWN0aXZlbHk= IE5hdGFsaWU= 44G/ IENPTk5FQ1Q= emVr IG1pbGxvbmVz XWludA== ICcsJyw= IHByaW4= IjpbLQ== IC8vLg== IGludGltaWRhdGluZw== cmF6aW9uZQ== LmlibQ== IEpha2FydGE= 0LzQtdGA IGxvYWRDaGlsZHJlbg== X1VQTE9BRA== IFdlZWtz IGdldFRleHQ= IPCfkg== IF1dCg== IENvc3Rz xJlw cGF5bWVudHM= Lk1vdmll bGg= tIg= X2NlcnRpZmljYXRl PXE= bGlicmFyaWVz IEFlcg== YXVzcw== CWZhaWw= T1VORFM= c2VuZEtleXM= IHNjYW1z d2FydHM= SGlzdA== IEVzc2V4 IGZ1cnk= IHRpdHJl IENvcGVuaGFnZW4= IHByZWRlZmluZWQ= c2Nw c2VycmF0 LmVuc3VyZQ== aWxlZQ== TWVyaXQ= X1VOTE9DSw== IENvcnJlY3Rpb24= Tm9ybWFsaXphdGlvbg== IOS/ruaUuQ== IHN0b29s IOWIoOmZpA== U2hvcnRjdXQ= Y2hvc2Vu IGJ1bGx5 IGZ1bmNpw7Nu 44O844Or IOeUn+WRveWRqOacnw== LmFsaWFz PlRvdGFs IFNURU0= cGVuZw== Y2FsZXI= cGVyZmVjdA== IGJvbmRpbmc= UGhvbmVz IHB1bHA= 67aA SUVXUw== IERlZXI= X0xDRA== IENvbmNvcmQ= V2l6YXJk IG9mcmVj IEVtZXJhbGQ= dGVuZXNz bmF2aWdhdG9y VGhlb3J5 IGd1YXJkYXI= IGZ1bGZpbA== IFVuYXV0aG9yaXplZA== IEJvdXQ= CWhvc3Q= IFJpYg== KGZ0 RG9jcw== LmdldEJvZHk= 5b+D IFJpdmVyYQ== IHdhdmluZw== IHBlcmZpbA== Qm91bmRpbmdDbGllbnRSZWN0 LmZh cGFnZWQ= IEFmZmlsaWF0ZQ== IHByb2xldA== fS0+ew== KHNjb3Jlcw== IHZpdGFl e05hbWU= c2NoZWR1bGVy X1NBTg== IE5lYw== IEJlZWY= X3Rj TElO IEV2ZW50VHlwZQ== IEJ1ZmZlcmVkV3JpdGVy IHNvZnRlcg== IFZvdGluZw== IEdlc3R1cmVEZXRlY3Rvcg== IHVuc2Vlbg== IFNDTw== IGVsbw== Y29tYmluZQ== X21ha2VDb25zdHJhaW50cw== IHVuZGVyZ29uZQ== IE9mZmljaWFscw== LG9wdA== IGxheWVyZWQ= ScOTTg== IGJhbmtlcnM= IHNlZ3JlZ2F0aW9u IHJ1c3NpYW4= IHZlbnRhbmE= Z2V0S2V5 U2FudGE= LlRvb2xTdHJpcFNlcGFyYXRvcg== IEFlcm9z LnB1dEludA== IGluZm9ybXM= X2JpbGw= 66aE LnNldE1heA== IH0+Cg== IElQUw== IEFsaWM= In0KCg== IHVzaGVy IE5ndXllbg== IGFic29sdXQ= IGd1YXJkZWQ= IFJlYmVs IFp3 IEFubnVuY2k= IHByw6E= YWJjZGVmZ2hpamts IFZlcmlmaWVk W2l4 IHRpZXJz w6J0 LiIpDQo= aWp1 bGl2aW5n R1BT LlRlc3RUb29scw== U2l6ZVBvbGljeQ== IG1hc3NhZ2Vz YXNzZXJ0SW5zdGFuY2VPZg== IHBvc3PDrXZlbA== IGJ1c2M= IEp1ZGFpc20= IGluZGlzcGVuc2FibGU= IE1vc3RseQ== SVRB IGdldENvbnRlbnQ= QnJvd3NlclJvdXRlcg== LWNvdW50ZXI= IG9idGVu IC8+KTsK 0LjQuw== aGVhZGxpbmU= KGhvbWU= YWxpY2U= bGRyZQ== X01vZHVsZQ== Q29tcGFuaWVz TlBD IHRvcnNv LmNvbnM= CWFkZHJlc3M= X3B1cmNoYXNl IEJhcmQ= Z3N0 LWFuaW1hdGlvbg== X3BhaWQ= LnNwZWNpYWw= IGRlbGlt IHRha2VvdmVy KGhhbmQ= ZW51aW5l LWdyZXk= IEFCSQ== U2Vzc2lvbkZhY3Rvcnk= aW5zdGFsbGVy X0RJU1RBTkNF IEZhdm9yaXRlcw== oIA= Jz57 IExhdXJlbnQ= 0YfQtdGC IHN0cmlwc2xhc2hlcw== IGVzdGFiYQ== JnQ= LnBhbg== IFBBUlRZ IEJhbGk= Y3Np KG1lbW9yeQ== IFRvZG9z IFNPQVA= YWduZXQ= CWJlZm9yZQ== T3B0aW9uc1Jlc29sdmVy aWJlbg== INmF2YY= IGFkZGl0aXZl IE1lbGVl IE1hbml0b2Jh IFBlcmNlbnRhZ2U= PSgt LmtpbGw= IGx4 YW5jYQ== IGZvdG9ncmFm IGJsYW5j IFJlc2lkZW50cw== cGluaw== SEJveExheW91dA== LnVuaW9u IEhZ IGNvbnRlbnRWaWV3 LWZhdA== CWhhcw== 66OM IHdoaXBwZWQ= dmVuZG9ycw== dWJyZQ== SVRIRVI= LmZ1bmN0aW9uYWw= INCy0LXRgA== Q2FuY2VsZWQ= LWNu SW5PdXQ= LlJvd1N0eWxlcw== IHRyYXRh IEluZG9vcg== LWZhc2hpb25lZA== IEJvb3Ro LkxhYmVsQ29udHJvbA== IHBvcGU= IENhcm5lZ2ll bmVyZ2ll IEJY 44CCIiwK IFdlYnN0ZXI= CWRpdg== TmFycg== IGNvbmp1Zw== a2lk IG1vZGVyYXRpb24= IGFteQ== IFNvbHZl VklD IEVa aWxsYWM= IENpcGhlcg== IEFjY2VwdGVk TEFCRUw= IHdyYXRo IG1pblZhbHVl IGthxbw= IERhdWdodGVy KS5e KGRj IHJlc29sdmVz c2Nzcw== YWJvdXRz dWx0aXBhcnRGaWxl IGZlYXRz IGxhdW5kZXJpbmc= IGNvbXBhw7E= IHNlZ3VyaWRhZA== IGhvYmJpZXM= LWZhY2luZw== InZhbHVl Z2V0SW1hZ2U= U3FsU2VydmVy IHdpdGhTdHlsZXM= PkRhdGU= IEV4cGVk JGpzb24= 6ZO+ IEFDVElPTlM= U2Vuc2l0aXZl Ymxhc3Q= IMO2ZmY= ZnRl Q1RTVFI= IExvZ0xldmVs Y29udHJhY3Rz LmRqYW5n Ij4NDQo= RVRZUEU= IG9iamM= X1NPVU5E X3NwYWNpbmc= X2NsYXNzaWZpZXI= IHJvYw== Q2xhc3NpYw== IOuztA== X2ludmVyc2U= LWFjcmU= IEZJTA== IERWRHM= IHN3YWxsb3dlZA== dmlsbGE= IFJlcGxpZXM= RmlyZWJhc2U= IHBoeXNpcXVl CXRoYXQ= IFJlc2l6ZQ== Pj4+Pj4+Pg== TmVhcmx5 LmFydGlzdA== LXs= Pz4NCg0K Lmxy Lmly KFsk aWFubmU= CW9i LCcl IGtuZXg= IGNvcnJv IE93ZW5z PW5pbA== bGF5cw== YXBn w5Y= RU5P SGVucnk= SnVzdGlu ZWxlY3RyaWM= IE5vcmRpYw== 5oyH IGV4Y2x1ZGVz RXVyb3BlYW4= IHRlbnRz KFN0cmluZ1V0aWxz KHBlZXI= eXN0b3Jl UG9ja2V0 ZnVlbA== ZXR1cw== IE1hcmlu 0YDRg9C6 6K+E IFBlbnM= IGluZWZmaWNpZW50 IGV0ZXJuaXR5 Licm IFBhY2thZ2Vz IEFwcENvbmZpZw== IG11bHRpZA== Y3Vsbw== IGJvcnJvd2Vycw== IERlYmJpZQ== IGZyb250cw== Sko= ICIuLi8uLi8uLi8uLi8= ICIrCg== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IEdhdmlu IG1pc2g= 4pWR X0FUVEFDSw== SW5kZXBlbmQ= 4K+N4K4= w6Fm Z2Fycw== IFBhcnRpY2lwYXRpb24= VmVyYm9zZQ== U3By U3Zn KFZhbHVlRXJyb3I= IHJlY29uY2lsZQ== CURCRw== bWVldA== IExvZ2luUGFnZQ== LXVudXNlZA== IGpvbmc= IGFuY29yYQ== INij Plo= PXc= IFJlbm8= dmll b3Rpb25FdmVudA== IExpc3RUaWxl X1J1bnRpbWU= IHVwaG9sZA== IE9idGFpbg== cHJvdmlkZWQ= IERhdGVQaWNrZXI= IENHSQ== IEJsYWNrQmVycnk= YWNobw== IElzYWlhaA== 5pW0 IEFiZHVsbGFo IHVwcA== IHVybHBhdHRlcm5z CXNpemVvZg== IHBpc3NlZA== IHByZWZlcnJlZFN0eWxl QVBQRVI= IFZC IFRlcmVzYQ== b2duaXRv RU1Z IGVsZWdhbmNl IENsYXl0b24= YXRpdm9z IEFuYWxvZw== IGdhdXNzaWFu IEhpYmVybmF0ZQ== W11b IHN3ZWV0bmVzcw== IE5pZWxzZW4= IER1dGVydGU= KHNlbA== LCs= IGV4dHJhb3JkaW4= Zmxha2U= W0RvdWJsZQ== Ly8vDQo= IG11Y2hhcw== IEJyb2FkY2FzdGluZw== QXNzb2NpYXRpb24= ZXhlcmNpc2U= LlJlbGF0aXZl IHViaXF1aXRvdXM= U0JBVENI xLFuYQ== LWZvb2Q= IGNyeXN0YWxs 0YPQsQ== ICd+ INCR IGR1bms= IHpp IE11Zw== IGRlY2VwdGlvbg== IEVtYWNz CiAgICAKICAgIAo= IMSRxrDhu6Nj IFdvbHZlcw== YW1lbnRp ICcpWw== Zm9ybWF0cw== UmVjdg== RGV0YWlsZWQ= KEhXTkQ= X3RyaWFs YWdyYW50 T20= Y29uc2Npb3Vz IG9zcA== cXXDqQ== IGdvbg== IG1lcmVrYQ== YXJlbmRyYQ== TWluZQ== LmxpbmtlZGlu IGZpZm8= Lm1vbml0b3I= IHJ1bmU= bW5vcA== IHNwZWN1bGF0ZQ== ZWds IHZhc2N1bGFy LnRlY2g= IG1hZ21h IGxlc3Q= dW1hbm4= IERyaXZlck1hbmFnZXI= IG9ydA== IGxpbmdlcmluZw== IG9zdHJlYW0= IHNwYXJrbGluZw== LmNvbm5lY3Rvcg== IHRhaWxz IGtlcm5lbHM= VVNFUk5BTUU= CWNj IG9uU2VsZWN0 L01QTA== dGFwZQ== LmRqYW5nb3Byb2plY3Q= R2VuZQ== 4oCZaW4= L2ZpbHRlcg== LWVudmVsb3Bl IGFwcGxhdXNl IHJlZ2lzdHJvcw== IENvcnk= b2ZmbGluZQ== LXNob3Q= bGVzYw== b3RlbnQ= IG51bWVyYXRvcg== LmVmZmVjdA== cGxhY2VtZW50cw== IEFGQw== LlNlcXVlbmNl IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K eW50aGlh IEdyaWZmaXRo ZWxtYW4= c2V0RGVzY3JpcHRpb24= IE5pZ2h0cw== Lm9yZGVycw== IGAsCg== IFNhbGFk amlhbmc= IHJlY3Vy IFNUQVRJQw== LXNwb25zb3JlZA== eWxlbmU= LGVtYWls X18pKQ== KSIpLg== Q0VMTA== YW1tZW50 TEFZ LHN0ZA== LnByZWY= LkNvcg== cmVkbw== IEZ1Y2tlZA== IHJ1c3M= IGVzdGFibGlzaGVz bnZhcmNoYXI= LkdldEZpbGVOYW1l IHBlbWI= IFNhdWQ= X3BhY2tldHM= Lmludm9pY2U= LmdldFRvdGFs SG9tZUNvbnRyb2xsZXI= IHTDtg== YWdoZXI= LmVudA== LkFic29sdXRlQ29uc3RyYWludHM= IGdlbnVz IEJhYnlsb24= IC4uLy4uLw== IE1pZG5pZ2h0 IHdn IGRhbmNlcg== LWltbQ== ZGlyZQ== aGF6aQ== Y2VydGlmaWNhdGU= IG1EYXRh IGN1cmVk c3Zu IkI= aWJyZQ== IGRyYWZ0cw== Q2FwaXRhbA== IGNvbmNpc2U= IFBlYWNo IHxc IHBwbQ== X2NvbnRhaW5z QXV0b3I= QXV0b1NpemU= X2xi IHNvbGVtbg== IGZpbmdlcnQ= IEluZGljYXRvcg== IFN2 UGFyaw== JHR5cGU= X01JU1M= YW5udWFs UGFpZA== bWFzdGVycw== IFdE IHZ1ZWw= IGVqYWM= CWdsdXQ= IHVuZmluaXNoZWQ= ZXN0ZWVt Z3JvdXBCb3g= UmVtb3Zpbmc= IGVpbmlnZQ== IFNjcmlwdHM= Z2V0dG8= LkhhbmRsZUZ1bmM= Il0pLA== IGRpc2FkdmFudGFnZXM= LWZyb250 PnA= c2V0T25DbGlja0xpc3RlbmVy IGxhbmRsb3Jkcw== IE3DvA== IHByZXByb2Nlc3Npbmc= KX0+ LWNvbnRleHQ= LGJvb2w= UVVJVA== ICIpIik7Cg== IFdlYnNpdGVz IENoYXJsb3R0ZXN2aWxsZQ== TGF0Y2g= LmRpcmVjdGl2ZQ== IEh1ZmZpbmd0b24= X2RpcnR5 ZXhwaXJhdGlvbg== IFRQTQ== IGVkeA== IFdlYkRyaXZlcldhaXQ= IGFkbWlyZWQ= IGxpc3RlbnM= IFZpbA== ZGlmZmVyZW50 IGxpdmVsaWhvb2Q= IFdhcmNyYWZ0 IHBvc2ljaW9u IGltcGVhY2htZW50 SmF5 IHBvc2l0aXZlcw== IGp1bmdl IFNNQg== L2luY2x1ZGVz KCcuLi8uLi8uLi8= QXJndW1lbnROdWxsRXhjZXB0aW9u ZGVzY3JpY2Fv QUJDREU= LUFB IGludmFkZWQ= IGFtZXJpY2E= dWVkZQ== IFBoYXNlcg== IHNjb3Jlcg== IGRpc2NvdXJhZ2Vk dGhpbg== IGFiZG9tZW4= IElQUA== IEhhbXB0b24= L0RlbGV0ZQ== W3NyYw== Q1N0cmluZw== IE51bg== IGVwaXRo 4oC7 LnRhYmxlcw== IEhlaW4= IHdoaXJs IGNsYXJpZmljYXRpb24= IHdlZGdl IGjDpHI= IFRpbmE= IHRod2FydA== IENvc3R1bWU= aW9uYWdl Q29k X2FjbA== IHJlc2g= IE1lcmN5 IERpeG9u IGRlc2Fycm9sbA== VmlyZ2lu KiopJg== IExlbm92bw== IGVyYXNlZA== ZW50aW9ucw== IHNsaXBwaW5n 5Zub IGNyYXZpbmc= cGxhbnRz IGdldHRleHQ= IG1hc3NpdmVseQ== IFJlbmFtZQ== Lmhlcm8= 44K7 IHRvbWFy IENPU1Q= IFByYWN0aWNlcw== Lk1lZGlhVHlwZQ== IEZ1bmRpbmc= RmluZQ== aWdlcmlh VW5j IHN3YXBwaW5n PicuCg== aW50ZXJw YXJ0aWZhY3Q= IEJhZ3M= LnZpZXdNb2RlbA== cXVvdGVk CUxvbmc= X1NDT1JF IHNhdnZ5 bmVsbGU= a2zDpA== Q291bnRz 2q8= RmllbGRUeXBl b2thYmxl IFJUTA== I2luZGV4 ICV7 IGFyaXN0 LkdldE1hcHBpbmc= KEFkYXB0ZXJWaWV3 PSIiKQo= IGRpc2lu IFRvdWNoYWJsZU9wYWNpdHk= IE1PWg== IER1bm4= Q2FwYWJpbGl0eQ== YWtoc3Rhbg== VUlWaWV3Q29udHJvbGxlcg== KHNvY2tmZA== IEphY3F1ZXM= PXRr YXJQYXJhbXM= Y29uZGE= IGFkdm9jYXRlZA== IHBlbmV0cmF0ZQ== SkVDVElPTg== IOuwmA== IEZJTkQ= IGVhcm5z YXBwZW4= 6rE= IHRocm91Z2hwdXQ= IHBlbnNpb25z IGZ1c3M= SFRUUFJlcXVlc3Q= bnV0cw== b2NodA== LWVzdGFibGlzaGVk IEFMSUdO IGpzcGI= RGlzcA== X2VtYmVkZGluZ3M= IHJlcHQ= IFlvcmtlcg== w7JuZw== IGpvdXJuZXlz IEFwcHJvdmFs CVNFTEVDVA== KEdyYXBo 0LzQuA== IGRvbGxz IHNleGlzdA== IHBhbnM= IG1wbA== IG9wZXJhdGl2ZQ== IFRvcnJlbnQ= WU0= IFBhc3Npb24= 5pat LmNvbXBpbGVy CUNTdHJpbmc= PWNvbG9y b3JpYW5DYWxlbmRhcg== IEtub2Nr IGhhaWxlZA== L3N0YXRl IHNldHVwdG9vbHM= IE1hcmU= IHN5bmNocm9uaXpl IFN3aXBl IGdhbWJsZQ== LCcnXV1dLAo= IGRlZmVjdGl2ZQ== X09CSkM= IGRlbmlt IHRhZA== IEtpbWJlcg== IG5ldXJvbG9naWNhbA== w6puY2lhcw== CWNi LnNldFBhc3N3b3Jk IFBsZWFzYW50 IFBoaQ== LXRhZ3M= IGNvbnRhZw== IENvcmFs IGRpc3RyYWN0 aXRpemVy IHN1bnJpc2U= c2V0SWQ= IENoZW5uYWk= IE9ncmU= X0hJU1RPUlk= UFJFU1NJT04= X1NVRkZJWA== ZHVwbGljYXRl LmF1dGhTZXJ2aWNl IHNwYWNlZA== IEJlbmdhbHM= U29sdmVy IGJ1cmVhdWNyYWN5 X2hpdHM= INGC0LjQvw== IGPDqQ== IGRpc2dyYWNl 6KeS aXNPcGVu Q2hlbQ== X2xpY2Vuc2U= X2hvc3RuYW1l X0JSRUFL IGZpZXJ5 OkQ= L2xpbnV4 VGl0dWxv UmFkaWFucw== aXpvbnM= UmFt b2RpYW4= aWFuZ2xl IG5pbmph RXZlcnlib2R5 KCI+ IHRha8W8ZQ== IGdyb3VuZGJyZWFraW5n IGRpcmln SFRNTEVsZW1lbnQ= IFVuY29tbWVudA== Y2hlaW4= IOeUn+WRveWRqOacn+WHveaVsA== JSIK IHRpcG9z Q2hhckNvZGU= IFByb2R1Y3Rv ZmFpdA== J2w= LXRodW1ibmFpbA== dXN1 X2Zvcm11bGE= LlRPUA== LmJ1eQ== IG1pZXV4 Q2VudHVyeQ== cGVp IHRic3A= LVBhY2lmaWM= b2dp IGZhdHRv IGZhbnRhc3Q= IFNBTEU= LmFkcw== IHBpbGxhcnM= X3RyaXA= IHR1YQ== IGFwZWxsaWRv LnNldENlbGxWYWx1ZQ== ICgoXw== IE5pbmE= PGM= aW5pdW0= ZGZ1bmRpbmc= LXdvcmtpbmc= IEVzdGFkb3M= IE1hbGk= PGY= dXJhbmNlcw== cGFnaW5h X1BL IHVuYXJtZWQ= b2dnbGVk Q2FuZGlkYXRl UmF0aGVy IGZyYW5jaGlzZXM= IGNvdmVuYW50 wqo= aXBwaW5lcw== R3Vu LWZlaXJh IGxpbmVhZ2U= X0dSQU5URUQ= Z2VucmVz LkVsYXBzZWQ= IGxhcmdv 0Js= LXJlYWR5 X3Byb2Nlc3NlZA== bGFuZ3M= w7ptZXJvcw== ZnE= L25wbQ== X3Nydg== IGF0dGVuZGFudA== aXZpZA== ZXZpY2U= QUJJ KGJpbmFyeQ== X1ZBTElEQVRF IGFkZEl0ZW0= X2NvZWY= YWxlYg== b2dyYXBoaWNhbGx5 Qm9yZGVyQ29sb3I= IGFzc2F5 IGNhdGNoRXJyb3I= IENocnlzbGVy b2do IGtleVZhbHVl ZGVjaXNpb24= LW9mZnM= IGxpZWd0 KERhdGFUeXBl IGlyaXM= IGV1cA== cmlnZXI= b25pY2E= IHJvcGVz IG5hcnJvd2x5 IFF1YWRy IGVwdWI= ZXN0aW5hbA== LXR1cm4= IGxhbmdz 55uR5ZCs6aG16Z2i IHF1ZWxsbw== LGFyZ3M= aWdhdGU= IFNlZW1z IGZvcnRl Q0xJ X0xPQURJTkc= LlJ1bGU= IHlvdXRocw== KHh4 IEFzc3VtaW5n YWdoZXR0aQ== KQoKCgoK IG9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== T2NjdXA= IGRldHJpbWVudGFs IGlubmF0ZQ== IEJhcnJlbA== dWVuY2lh IG9uQmx1cg== IGxpYnM= W2xhc3Q= IGNwZg== LlRpbWVvdXQ= ZXN0YXRpb24= IHdpZWw= IHV0aWxpemFy IGRpc2d1aXNl IER1bQ== T0NJ T05HTw== ICg/LA== IFBhdGlv VmVydGV4QXJyYXk= LmF1dGhvcml6YXRpb24= cm96 IEhvcw== LlNwYWNl IFZpcnVz KGtleXdvcmQ= VE9DT0w= X0NPTlRST0xMRVI= IEJsb2NrZWQ= IENob3A= d2nEmQ== XFJvdXRpbmc= L3BhY2thZ2U= IHBlcnN1YWRlZA== YmVpdHM= TENE IG11Yw== X0ZPUldBUkQ= IG91dGxhdw== IHphdw== X3ZlaGljbGU= IEplbnNlbg== LkdyZWVu IC8vLy8v SVJDTEU= LWJ1c2luZXNz LkhpZGRlbg== IGtvbm50ZQ== cHE= IHBhcmVjZQ== IGxhbmRzY2FwaW5n IERlY29yYXRpb24= IEdSQQ== X3Byb2ZpbGVz IEZsZW0= Q0xJQ0s= IEZBSUxVUkU= IGlvbnM= X1RpbWVy LkRvZXM= IGJvdW5jaW5n dXBweQ== dWxpcw== L2Fn IEdhcm4= IGh1ZA== IHJlc3BvbmRlcg== IHN0cmNocg== IGNob2tl IHN0YXNo X2NoZWNrc3Vt IHN0YW1wZWQ= QEdldE1hcHBpbmc= LkJ5dGVBcnJheQ== IER5cw== YXRlcm5pdHk= KHJi IGVkaXRUZXh0 IGVyZWN0aW9u IGNlc3M= X2V2ZXJ5 X2dhdGV3YXk= ICciLg== IHN0YWZmaW5n IGludm9pY2Vz aW5pY2lv fV0sCg== LHZhcg== eWNpbg== IERpb24= ICUlCg== Jywo LXNwYW4= IHRow6BuaA== IGJvcm5l IEthdGhsZWVu 6L+e5o6l X2N1YmU= IGluZm9ybWHDp8O1ZXM= bmdlcg== L0ZpbGU= IGRhcmE= IG1M KioqKioqCg== IG1hcmtpbmdz YmJl IHJlY3VycmVudA== IFJhbmtpbmc= X2ludGVncmFs XT4K IHVuYW5pbW91c2x5 IGRpcGxvbWF0cw== IElPUw== OyI+PD8= IE1hdHRl IFJhbGVpZ2g= IEltcHJvdmU= ZXhpc3RlbnQ= IGZha2Vy IEhpZ2hsYW5k c3RlbQ== LW1z TGlzdE9m Lkxpc3RlbmVy KHdhaXQ= X1JTVA== VW5h IG9jY3VwYXRpb25hbA== LW1lbW9yeQ== IFN1cmY= IGJydXRl X0VsZW1lbnQ= ZGRkZA== IERlY3Jl LnBzaQ== LWRldmVs IE9uVHJpZ2dlckVudGVy VG9EZWxldGU= IGhlcmFsZA== IHNvY2lhbGVz IGJvb3N0ZWQ= Lkl0b2E= KiI= IGFudGlkZXByZXNz IE1hdmVy X18pKQo= KER1cmF0aW9u ZXN0YXRl YnJhdGU= Q2xh IOS4ig== 65CY cmnDqHJl YnJlYWtlcg== X2xlZw== fWVsc2VpZg== X2Z1bmNz dcOt LnBhZ2VZ Y3JlYXR1cmU= IGNhbm5hYmlu IEFzdHJv bG9jYWxz IExBUw== X2NvbnZlcnNpb24= IENSVUQ= LnNraWxs IHN0cmF0ZWdpc3Q= LnBvbA== KHNlZ21lbnQ= IHBlZQ== fSIpOwoK LnByZXZpZXc= SmFt IGhlZnR5 aXZhdGluZw== R3JpZENvbHVtbg== IGN1ZGQ= IGluamVjdGlvbnM= IE5JTA== LW9sZHM= ZmxhdGlvbg== IExlYWZz IHNwaGVyaWNhbA== IGZhbGxvdXQ= YW1pbmVy IDo6PQ== LnBvaW50ZXI= LU1hcnQ= IG1hdHRl IGNvcXVpbmU= IGRpc2NvbnRpbnVlZA== IFJFR0lPTg== LlJpZ2h0VG9MZWZ0 IHNxdWVlemVk X1BPSU5UUw== YmVzdG9z LWxhc3Rpbmc= KHV0aWxz PEJhc2U= IHBhcmRvbg== U3RyaWRl Y2Ry IG5hcnJhdG9y dm9sdXRpb24= IHVzZXJJbnB1dA== X2NvbnRhY3Rz KGVuZW15 IENoYW1iZXJz emllbA== IGJsb2NrU2l6ZQ== QW5pbWF0aW9uc01vZHVsZQ== IGltbWVyc2l2ZQ== IG91dGluZw== dWVzdG9z VHdlZW4= IGtlcA== IHLDqXN1bHQ= IEJvbGx5d29vZA== RExM IFN1cmVseQ== LlJvd1N0eWxl KHRt X2dlbmVyYXRpb24= IFN0aXI= IGRhdGFTbmFwc2hvdA== Y2h1cmNo IGNvbmZpZGVudGlhbGl0eQ== X3N1c3BlbmQ= dmlw IEthdGh5 44Km IHZpb2xlbnRseQ== cGV0cw== IG1lc3NlZA== IHRleHRib29rcw== ICAgICAgICAJCQk= 5raI5oGv IExhcmF2ZWw= IEFyY2FkZQ== IGVudGg= IGJlbmlnbg== X0RST1A= LWVuYWJsZQ== 4oCdKS4= dXZ3eHl6 X2xpc3Rpbmc= IE5JQw== 44GV44GE KCIuIiw= LXJvdW5kZWQ= LXBhY2Vk cGF0cmljaw== U2VsZQ== LmdldEZpcnN0 LkVYSVQ= ZXRlcm1pbmF0ZQ== R3JhbQ== Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LmV4dGVybmFs IHdyb25nZG9pbmc= IEVsbQ== IHNhbms= VGVlbg== IFRob21zb24= cHJpb3I= amV0YQ== IEFEUw== IFBlcnNpc3RlbmNl IEZvbGs= e1wi Ym9uZA== X1NQRUNJQUw= X0xBVA== b25la3Np IG1vdGhlcmJvYXJk IHNoZWFy RnVsbFNjcmVlbg== Kks= KEJsdWVwcmludA== TWV0aG9kSW5mbw== QmVjb21l IGhhaWw= IERvYg== IGdlbmVyb3NpdHk= ID8iOwo= IHdoaXNrZXk= IHRoaW5uZXI= IENw IGludGVyc2VjdGlvbnM= Q3JpdA== cmFpc2Fs cmVmZmVu V2hlbmV2ZXI= IGNvbW1lbmNlZA== VHJhbnNmb3JtYXRpb24= L3dyaXRl PSIiIg== KGxk IG5vcnNr QU1FTlQ= LnNoYXJlZEluc3RhbmNl X2hvdXNl IGdsRW5hYmxl 6L2v IG5hbw== IGRlcG9zaXRpb24= IGRpbm9zYXVycw== IHRpbWVTdGFtcA== X18pOwoK LlJpYmJvbg== IExpbmRzZXk= OnVzZXI= IMOA X2Zvcm1z bWluYXRpbmc= IE9saXY= IGTDqWJ1dA== YmFyY29kZQ== c2ltaWxhcg== IHBsYXRlYXU= IGluZGVt UmVhbG0= IGZlcnRpbGl6ZXI= IGNhcGU= IGNoYW1wYWduZQ== IHNlbGZpZQ== IHBsYWlubHk= IGNhdGFzdHJvcGhl IGJldHJheWVk dmVyc2libGU= VXBkYXRlVGltZQ== Lk91dHB1dFN0cmVhbQ== Ymlhc2Vk Ym91bmNl IFNwb3J0aW5n Q29vcmRpbmF0b3I= ZGV2ZWxvcGVycw== IHRyYWNlcg== IG11c3RhcmQ= U1E= X3Rlcm1pbmFs IGNvb2xlZA== IGF2b2lkYW5jZQ== TG9naWNhbA== IHllbGw= X3JvdXRlcw== IGFydGVyeQ== IEJlYXJpbmdz Lm12cA== LkdVSQ== VUlTY3JlZW4= eW1t aXTDpA== KClbIg== IEF6ZXJiYWk= IGNvbmRpdGlvbmVy IHdhZw== IHNjYWxw dmluY2lhbA== b3dsZXI= LicpOwoK QkxVRQ== IMKnwqc= Qm9zdG9u IExpbmtlZEhhc2hNYXA= RG9jdW1lbnRhdGlvbg== LkxlcnA= IGRlbm5l IGhlc2l0YXRpb24= IENlbGVicml0eQ== IEh5ZGU= IGNvbW1hbmRpbmc= YWNlbGx1bGFy IHBhdmVtZW50 IEhhbW1vbmQ= YXNzaWM= UExVR0lO IHJldm9rZWQ= RG9jdW1lbnRv LnBob3Rvcw== IFdpbGxvdw== IFZpa2luZw== IHVwZnJvbnQ= IExpZmV0aW1l ICVb RHJlYW0= 5aS0 IGFjY2VsZXJhdG9y UGVyc29uYQ== X3RvcGljcw== 77yJ44CB IChfLg== IHPDqWN1cg== IEt3 X2Nhc2g= IHNvb3RoaW5n IExvdmVseQ== IEhlcnM= ZWxvbg== TElDRU5TRQ== X2NhY2hlZA== LnNoYQ== UkZD LkZpbGVJbnB1dFN0cmVhbQ== LUFs IHVzZXJMaXN0 IG7DpHI= SGlsbGFyeQ== IHBhZ28= LlBsdWdpbg== IENvdmU= X3lhbWw= X3JzcA== J3Bvc3Q= LWR1cmF0aW9u IHNlbnRpZG8= IG1pbkhlaWdodA== IHR1cnJldA== LWVuZXJneQ== IOeJ 0YDRg9Cz b3RlY2E= X3F1YWw= U2VsZWN0aXZl IEJFTE9X CWFkbWlu IH19LAo= J3VzZXI= U1ZH IGN1bG8= KFdvcmxk LWJpbmRpbmc= bmJy IFNlbmRz IHN1cHJlbWFjeQ== IHNrYXRpbmc= IGNyZWVr IGFjY3VzYXRpb24= YXBnb2xseQ== LklERU5USVRZ IG1hbmRhdGVk IGdvd24= IHdpZHRocw== IExTVQ== L3ZlcnNpb24= IFJlYWRlcnM= IFJvbmFsZG8= IGJhZmY= IGA7Cg== R0xJU0g= KGRvdA== IE9wZXJhdG9ycw== LlNjZW5lTWFuYWdlbWVudA== bWVyYw== X3JlcG9ydHM= LWNlbnRyaWM= IENlaWxpbmc= PXsh bW9ueQ== IEFERFJFU1M= 5a+56LGh TWF0Y2hpbmc= IHVuaw== IGtleUNvZGU= ICcvJyk= KWRhdGE= IFZvbHVudGVlcg== IGxheg== IEd1YW5n IENhbmRpZGF0ZXM= RW5zdXJl aWFnZQ== c3VjYw== Q2VydGFpbg== IGxlZnRvdmVy aW5pbg== LWVsZW1lbnRz cGlrZQ== IHNsaWRlc2hvdw== LnRvb2xTdHJpcFNlcGFyYXRvcg== LnBoYXNl IGVudGVydGFpbmVk IENhcnJpZQ== IE1vaGFtbWFk LmxvZ2dlZA== IHNjcm9sbFRvcA== IEFiYmV5 aW1vbnk= KHJlc3VsdFNldA== IGFkaGVzaXZl X0RBTUFHRQ== IGlvY3Rs YnJvd24= SU5TVA== LkNsb25l IGxvb21pbmc= RGVzZXJpYWxpemU= IGx1eg== cXJzdHV2d3h5eg== LmlkZW50 SGVhdnk= IGRpbw== 5piv5ZCm IEZ1cm4= 6YKu emltbWVy 44O844OJ c3BlYWtlcg== IEdlZA== IHVuaWRlbnRpZmllZA== SW50ZXJmYWNlT3JpZW50YXRpb24= IFN1cnZpdm9y ZGVlbg== IEJvcmc= dG9Eb3VibGU= X2J3 IHB1Ymxpc2hlcw== X0FMRVJU YW5ncw== aWVyZXM= IGhlaQ== IElDb25maWd1cmF0aW9u IGNvbnN0aXR1dGVk V0FUQ0g= cHJpdmF0aW9u IEdyYW5pdGU= LlRleHRBbGlnbm1lbnQ= X2t3 OyIsCg== Y290 IE5ld2Fyaw== cm9hY2g= KW9iag== Q29tcGlsYXRpb24= Q2F0ZWdvcnlJZA== LnNldFVzZXI= aXZ5 IEltYWdpbmc= aWdodGVk IHdnZXQ= IG1vdXRocw== Lmxpbg== IFJhZGlvQnV0dG9u LkNtZA== c3Nl IG1lc2hlcw== IFNvbGU= LnJlY29yZHM= IGFudGlz KG1vbg== INGH0LjRgdC70L4= gq0= IOyeiOuKlA== QWxsQXJnc0NvbnN0cnVjdG9y IHN1cnJlYWw= IE1hcnJpZWQ= IHhwYXRo XGY= QnJpbmc= IHlhaG9v IEV0c3k= X2RhaWx5 IHRocm93YWJsZQ== IFBsYXNtYQ== L1B1YmxpYw== aW1pemVCb3g= IHZlcw== IHRyb20= X3Jocw== LWFscGhh IEFyYm9y KSkt RmlzaA== ZmVlZHM= IGNhbGY= IFNlcmdlYW50 KGVudW0= IFJhbXNleQ== IElkZW50aWZ5 LmluaXRTdGF0ZQ== IGZsdWN0dWF0aW9ucw== X0FUVFJJQlVURVM= IHB3bQ== RVNB Y3Bm U2ltdWxhdGlvbg== IHlvdXRoZnVs IEluZmFudHJ5 IGdsYW5jZWQ= IFByb3Blcg== 5LmJ IEtyYWZ0 Q2l0 b29wcw== PXVybA== cG9zdGluZw== ZGVjbGFyaW5n IHBOb2Rl SmF2YXNjcmlwdA== CQkJCQoJCQkJCg== LmNvb3JkaW5hdGVz cmlldA== IFNx X0NBVA== IFBhcGE= YW5kaQ== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v TWVldGluZw== IOyekA== SW1hZ2Vu w6lyaWVuY2U= QWdncmVnYXRl LnBvbHk= IHdhdmVk IGludmVycw== c2VhcmNoTW9kZWw= IHRyb2xscw== W2xldmVs IExvd2U= dWxsbw== KHBsYWNl IE5BU0NBUg== IG9yYml0YWw= LnN0b3J5 IGF1dGhvcml0YXRpdmU= LnRleHRWaWV3 IGFscGg= X3JlZHVjZQ== IEZyYW1lcw== IEJyb20= cmVkaQ== KE1ldGhvZEltcGxPcHRpb25z bWFjZW4= VG90 IG1pZGQ= 2Y8= IEJhc2VNb2RlbA== IFZlZ2E= ID8+Igo= IFJpZ2lkYm9keQ== LnNldENvbnRlbnRUeXBl YWFT QmFzZWxpbmU= IGJsYW5rZXRz c2Fw IGNhc3VhbGx5 VW5pdmVycw== IFRyYXk= IEFpcmVz IG1heFk= X1BST1BFUlRJRVM= IGhlbG1ldHM= wqY= X2Rlc2Ny c2hpbnQ= X0NQUA== dW1v YWRheQ== KHBsb3Q= ZW56eW1l IEV4Y2VwdGlvbnM= X3Zpc3VhbA== Ol0KCg== KHRhcmdldEVudGl0eQ== cGhlcmVz dW5hbg== IHNlbG9u d2ls IFJlbmRlcmluZw== S0M= IGNvbnN0aXR1ZW5jeQ== U0NSSUJF ZXN5 IEZlbGxvd3NoaXA= 5Y+4 IGZ1dHVybw== IGFybW9yZWQ= bGlzdGU= b3Jhcw== bXVsdGlwbHk= Z2VtZQ== Y29lZg== 0L7QsdGA0LDQtg== IERlbGl2ZXI= ZW5nbw== LnVzZXJTZXJ2aWNl T05VUw== Lm9ucmVhZHlzdGF0ZWNoYW5nZQ== ICIvIiw= YW1iaW8= X1Byb2plY3Q= Jyk/Pg== IGZsaXBwaW5n d29tZW4= LkNyb3Nz IGhvbGxhbmQ= IGNpbmVtYXRpYw== IHdoaXN0bGVibA== IGxpbmd1aXN0aWM= LkdldHRlcg== IG3DpG5uZXI= IExlZ28= IFNjaHVtZXI= YXNzZXNzbWVudA== X2Noaw== IHJlY29tbWVuZGluZw== LnNjYWxh IEd1YXJhbnRlZQ== IEBf LkFVVEg= IHlQb3M= bGF0ZXg= IEFsYmVydG8= 5q2l dGhvcmE= 4Li34LmI VVJMRXhjZXB0aW9u R2hvc3Q= LlRvb2xiYXI= IGVuZGlhbg== 6Zeo c3RyYWN0aW9ucw== RmlsZU5vdEZvdW5kRXhjZXB0aW9u IHN0aW11bGF0aW5n YnNlcnZpY2U= YXTDs3Jpbw== aXRpb3Vz IGF1dGhTZXJ2aWNl X1RSQU5TRkVS IHJlZGlyZWN0VG8= IG1lbnNlbg== IFNQTA== IMK7LA== IGFjZXQ= X0JhY2s= 4KSV YWFj IFJpb3Q= X0ZC IFph UGxhdGU= IGxhYmVsVGV4dA== INCy0YDQtdC8 aHRvbg== IE1jQQ== IEFwcGVuZGl4 IEtvaw== IGludGVydmlld2luZw== X3NwZWxs IFN1YmplY3Rz IGJ1cm5lcg== 5a+8 aWxsaWFu IGJ1bXBz UGFzc2Vk IENvbnRyaWJ1dG9y WW8= Ymxh IHNvdXQ= LmV4Yw== Tm90aWZpZXI= c2hpdg== LlVuaXRUZXN0aW5n dWVsbGVz X1NMRUVQ CW9wdHM= IHByZXNjcmlwdGlvbnM= IHJldmlzZQ== RURJVE9S IGFubsOpZXM= X3BrZw== IFRyYWNrcw== 4LmI4Liy PWZvcm1z LlJVTg== IGFzZWc= IHDDoQ== IGplcw== R3Jl YWNy T2ZmaWNpYWxz dWtlcw== Y29tcGFuaWVz XFF1ZXJ5 IFByaW50YWJsZQ== 5a6i X1ZP IGRlaXg= IGRldmljZUlk IGRpc3R1cmJhbmNl bmlzdA== Lmlzbw== cGFyYWxsZQ== LWRlc2NyaWJlZGJ5 IExpZg== IGJyZWFzdGZlZWRpbmc= IGZlbWluaXN0cw== bGVncm91bmQ= IGRhbWU= IGNvbXB1bHNvcnk= TUVSQ0hBTlRBQklMSVRZ LXJlc3VsdHM= Zm9ybWVkVVJMRXhjZXB0aW9u OlsK LWludGVyZXN0 IHPDpA== IG5vc3RhbGdpYQ== IGNsYXJpZmllZA== IFBIT1RP IHJldmlzaXQ= IGNhcHN1bGVz IHNoaW5lcw== IGNyYWZ0c20= c3ViamVjdHM= ICAgICAgICAgICANCg== 5LiN6IO95Li656m6 IFNjaHdhcnR6 cmV1 IG1hZHJpZA== LnBlbmRpbmc= IExJTg== IHVuc3Q= CW12 IHZpdmFzdHJlZXQ= IHNwb2ls w7hq 64u5 IGJ1ZW5h IGRpZ2l0YWxXcml0ZQ== c3Vicw== IFVOSVZFUlM= IFN1aWNpZGU= PEd1aWQ= LmVsZW0= X2NvbnN0cnVjdA== IGFtaWRzdA== IOuP LWVzdGVlbQ== IEludGVncml0eQ== LmZtbA== T3V0T2ZCb3VuZHNFeGNlcHRpb24= LVNlbWl0aXNt QmV0YQ== LWdvaW5n U2VnbWVudHM= IE1hZQ== IFBlcnNvbmFsaXR5 dXJiYXRpb24= 5Y+z IHNlcnZpY2luZw== IGJpcG9sYXI= X1NUQUdF LkpQRw== Jyl9fSI+ aXNobHk= SVZFUlk= IEluc3BpcmVk LnNlcnY= KGRhdGFz IGRpdmlkZXM= PFJlYWw= dmVydHVyZQ== IG1vdGl2YXRpb25z dmVydGU= RU5DSA== ZmRz IHJldm9sdA== d2VidG9rZW4= aW5zdGVhZA== CW9wdA== IE1hcmlqdWFuYQ== X2FkYw== YmFv W1NlcmlhbGl6ZUZpZWxk IGdyYWZmaXRp LWFvcw== ZW1pYWg= IGbDrXM= IGV0aGlj J2FsbA== OmtleQ== 65Ok IHJlc3RyaWN0aW5n IFhIVE1M ZXJlbw== dW5kb3M= CWVuZGlm WzosOiw= IHN0ZWhlbg== YWtoaXI= IGp1aWNlcw== ZGF0YVNvdXJjZQ== X21r LmRlbGV0ZWQ= Q29uZ3Jlc3M= aW1tZWw= RWxlY3RyaWM= YW9z IE92ZXJsYXk= IEFDTFU= cm5k ZXNzZXM= IEx1eGVtYm91cmc= cGFyc2VGbG9hdA== IGd1dHM= Y2xhc3NpZmllZA== IGRlZlN0eWxl IFRjcA== cGVhdGluZw== Q2hhcnRz X3Vy X2xhdGVzdA== KSEK Y2F0aW9u LkdldGVudg== KGxvb3A= IHVubA== X2R0eXBl emXFhA== KEpOSUVudg== LmZldGNob25l IHNpZ21vaWQ= IE9MRA== IE1pbmlzdA== 7YE= IEvDtg== IGZyYWN0aW9ucw== IHNpeg== PT09PT0K LlByaW50V3JpdGVy X0FkZHJlc3M= IEF1ZGllbmNl Q29tbw== IEJydWlucw== LmFjdGl2aXRpZXM= IGFuY2VzdHJ5 0YPQu9GM0YI= CVJldHVybg== cHVu IGdyYXBlcw== SUxvZw== IGRpam8= IFBlcmtpbnM= IFZNd2FyZQ== X2F1dGhlbnRpY2F0ZWQ= w650cmU= b3ZlcndyaXRl IEhk IGdhbGF4aWVz YWNodQ== SHJlZg== W0Q= IHBhcmNl TGF0TG5n X3BhdHRlcm5z IFNIT1JU IHJ1bW91cnM= Y291bnR5 IEdSSUQ= IFsv IFNreXJpbQ== RGF0YUdyaWRWaWV3VGV4dEJveENvbHVtbg== IGNlbg== IGN1Y3VtYmVy LklOVA== X0NPTkZJUk0= IGN0bA== cGVybA== aWxsb3M= IEFDQQ== IEdlb3JnZXRvd24= X2NhbGxhYmxl IENyYWZ0cw== L2Nv IGluYm91bmQ= IFRlY2huaXF1ZXM= c2V0Q2hlY2tlZA== IHBuYW1l Y29tcHV0 U3RlZWw= IGhhbmRoZWxk IEFsYW0= YWJzdHJhY3RtZXRob2Q= 6aKR SU5Z YmF0dGxl X0VWVA== IGNldXg= IGF0b2Y= IEFieXNz X3ZhbGlkYXRvcg== IGhhaXJz VmVydGV4QXR0cmliQXJyYXk= IGNvbW1vbnM= LWJpbmQ= TXVp IGNvc21ldGljcw== IG1pcmFj Lm1hcmtlcg== U0NBTEU= LldvcmQ= LXVs IERpdmVyc2l0eQ== IEREUw== LmN3ZA== X3h5eg== IENvbXB1dGVz KGNsaWNrZWQ= VEVNUExBVEU= IHpvbmluZw== IGZpbnM= IFBK ZXh0Vmlldw== Q2hhcmFjdGVyaXN0aWM= aWdhdG9ycw== IHByb2NsYWlt IHByaXN0aW5l IGRhdGFzdG9yZQ== IGRpc2NvdXJhZ2U= X25zZWM= IG5pbmV0ZWVudGg= IGNlbHVp Sm9uYXRoYW4= IGFtcGg= IENyb3NzaW5n IEh1bWFucw== IEJvb2tlcg== w6JjZQ== Z2V0UG9zdA== IE1vbnRlcg== IEZsYXZvcg== TWVkaWFUeXBl IuKAlA== IEFyY2hhZQ== QHJldHVybg== LWF3YXJl b3J1 LVRoZQ== YW1wbGVk S0Y= LlRlbXA= IERyZQ== KHtf cG9seWdvbg== IMOm IERlZmVuZGVy 77yY Xyks LlVuc3VwcG9ydGVk X14o KElEQw== JHY= IHdvcnRobGVzcw== IFNFRw== aWxpa2k= Tm9BcmdzQ29uc3RydWN0b3I= IE1lcmNo IG5vcA== IGZvcmdldHRpbmc= IGRvcGFtaW5l anVhbA== ZW9u IFJlYXNvbnM= c29ydEJ5 KCctJyw= LXN5bmM= ZWNlZG9y S1A= KGNvb3Jk KENoYXQ= XCQ= ZXN0cmluZw== Y2Vm LmhhbmRsZUVycm9y 24zYrw== 0YHQug== IGhhbmRj ZWxpamtl IFNwaXI= IEJ1Y2tz IFFSZWN0 U2V0Rm9udA== LmV4ZWNTUUw= OjoKCg== IHN1aWNpZGFs c2VlaW5n IGNpZGVy UHJvZ3Jlc3NEaWFsb2c= IG1vbGRpbmc= CXRyYWNl IGVtcGhhc2l6ZXM= IG11bHRpcGxlcw== X1BU X091dHB1dA== Y2FwaXRhbA== TmVlZHM= X0RJUkVDVElPTg== LmlzVmlzaWJsZQ== IHJlc3Rl IG92YXI= KHNoYXJlZA== LWNvbXBvc2U= LmJhY2t3YXJk CXJlY3Q= QW1hemluZw== LmRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n U0VSVklDRQ== IEluanVyeQ== QnJhaW4= IGF1c2dl KHBl Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= b3JwdGlvbg== X01BSUw= b2hh IHNubw== IGJvaWxlZA== aWxkZW5hZmls IFdlbGZhcmU= IFF1YXJ0eg== IGNhcHRjaGE= IFdFU1Q= IE1hemU= IGdyYXBoZW5l IHBlcms= IG1pc3RyZXNz LkZvcm1TdGFydFBvc2l0aW9u IGV4cGVyaW1lbnRhdGlvbg== KikoKA== IGJyb2FkY2FzdHM= IHJlbW92ZUFsbA== CUdVSQ== 5YOP YWJjZGVmZ2hpamtsbW5vcA== IHVuaW5z QVNQ K3c= bXVy IGRpbmU= IGFyb3U= IGVzY2FwZXM= IFRvYmFjY28= Lm5hbWVk IFBhdHJlb24= X0ZBQ0U= X3NwaW5uZXI= bW92aW5n X3ZvdGVz T2hpbw== LmVuY29kaW5n RGVncmVlcw== IlRv IHByZXN0aWdl b3NwaGVyZQ== IExhbmNhc3Rlcg== 77yX IG9uQ2FuY2Vs IEhJUw== 0J7RiNC40LHQutCw IG9yY2hlc3Ry IHJlZnJlc2hlZA== RGF0aW5n KG11 IEplZA== IEVkaXRvcmlhbA== U2V0QnJhbmNoQWRkcmVzcw== Q3BwVHlwZURlZmluaXRpb24= IEJyb254 IGdhdGhlcmluZ3M= ICcnDQo= cG9zdERhdGE= IEZyYW0= Q2xpcGJvYXJk IFhQYXRo cmF5cw== IGJha2VyeQ== IHJvd0NvdW50 IGxvd3M= YW5kV2hlcmU= X3ZlcnNpb25z IEd1bm4= IHdlZXI= IGNvbnRleHR1YWw= IEtleUNvZGU= IFNhc2thdGNoZXdhbg== IFBoaWxseQ== IE1vdXRo IGRvUG9zdA== IHBlcmNlbnRpbGU= IGJ1ZmZlclNpemU= KGZyZXE= JHNtYXJ0eQ== aWVydGU= aXNzYW50 X2Zwcw== IGludGltYWN5 X2Jvb2tpbmc= IGRlY29tcG9zaXRpb24= dW5pY2lwaW8= IE5TSW5kZXhQYXRo IEtS IHR1cmJpbmU= LXByb20= X0NBUlQ= KGNvb3Jkcw== ZWNvbQ== IGNvd2FyZA== IHdheXBvaW50 LUNvbGE= IHByb2ZvdW5kbHk= IEVSUA== Ym91bmRhcnk= IHBvb3Jlcg== L2V4YW1wbGU= IHJlbmNvbnRy IG5pY2Vy 54E= LWNoYWlu IEVudGl0eVN0YXRl IGdyYWRpbmc= QUxJR04= IFBpY2tz LmFr LXZlY3Rvcg== IEVudHJpZXM= IFNlcmdpbw== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq T0RC IOW9 IGNvcm9uYXJ5 IHNoYXZlZA== IGFxdWU= ZW1wbG95ZXI= IHBhcmNo IG1lYXN1cmFibGU= IGJvaXM= am9pbmluZw== IHZvbGNhbm8= Ok0= LnRocmVzaG9sZA== IERveWxl dmVyYm9zaXR5 IOKWug== IHNwb3VzZXM= IHJlc3VtZXM= TmF0 ek0= X0VuYWJsZQ== IFVTRUQ= IENhcmV5 CWZw UGF0cmljaw== IE9zdw== UG9zc2libGU= LmxlYWRpbmc= YWhydW5n 4pmqCgo= CQkJCQkJCQkJIA== 44CC44CM LmFkZEVkZ2U= IGVjeA== J0xCTA== IFRDTA== IGJpcnRocw== IHRoZWF0cmljYWw= IHBpag== Z3JlYXRlcg== IEZTdHJpbmc= QkVE 7ZmY LkNhc3Q= Q1g= L01haW4= cGVhdGVy IHBlcnN1YXNpdmU= Y29udG8= eGxzeA== X0FCUw== IEJ1bg== bWFuYWdlZFR5cGU= 0LPQvg== IFNjYWxh cmFkb3I= IHJlY29nbml6YWJsZQ== dHJ1 IHRq XE1hcHBpbmc= X0JPQVJE IHRvSnNvbg== IGJvd2Vs KWQ= J30p KGhXbmQ= aHJz Y2FudA== X18oKQoK IGludGVycm9nYXRpb24= bGljYXRpdmU= CQkJCgo= IFR3aW5z IEFP QmlyZA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGVyaGFwcw== b2ZpbGU= IHBlbmM= IHRyZWVOb2Rl IHRvcGljYWw= LXByaXZhdGU= 54m5 IERpc2N1c3M= IGRlc24= UnVh LlZFUlRJQ0FM 44CN44Go SUZPUk0= IGNvdXJ0eWFyZA== INGB0LXRgA== ICMjIwo= IGVtcG93ZXJpbmc= IEZhY2lsaXRpZXM= XCIsXA== vZQ= Ok9iamVjdA== IFZvdGVz aXNlbA== IGV1Y2g= b3JzdA== KENsb25l LmNvb2tpZXM= JHRtcA== KGluZGljZXM= ZXJnZW5jeQ== IHBsYWd1ZWQ= IERpYQ== eWNsaWM= fSkp 6rK9 IGR1ZWw= IGhldGVyb3NleHVhbA== LmFkZENvbXBvbmVudA== U0VDUkVU bGVybw== Y29uc3RyYWludHM= IGdldENvbm5lY3Rpb24= IExlYmVucw== IFBvbg== IENocm9uaWNsZXM= ICAgICAgICAgICAgICAgICAgICAgICAgDQo= IE1vdXJpbmhv IG9jY3VwYW5jeQ== X3NsYXZl T1JJWkVE CVk= LmhpZ2hsaWdodA== X3NlbnNpdGl2ZQ== IHNwZWN0cm8= LmVuY3J5cHQ= IHNwb2lsZXJz LlNpemVNb2Rl IHByb2Zlc3Npb25hbGlzbQ== Pklu RXhwaXJlcw== QXU= IEhWQUM= cmVsYXRpb25z IEFUSw== X0dFTkVSQUw= IFNpZ2h0 IGtpdGNoZW5z OlJlZ2lzdGVy IGVkbQ== IHRvbGVyYXRlZA== IFNFU1NJT04= aWVyeg== IElOU1Q= LnBhdGhz IHBlcnBldHJhdG9ycw== ZWJw cGVjdGluZw== ZWR1Y2F0ZWQ= IFBpb25lZXI= X1JFVg== IGJ1c3R5 c3RhdHVzZXM= UmVzcG9uZA== c2h1ZmZsZQ== IFRpbmRlcg== RXhhY3RseQ== aWxsaXNlY29uZA== INC30L3QsNGH0LXQvdC40LU= KEFjY291bnQ= LiY= aXpy YXNzdW1pbmc= CU9wdGlvbmFs U2VuaGE= IGVucm9s dHVy IGFycm9nYW50 IEpPYmplY3Q= b2xpdGhpYw== bWFwcGVk IHRpcHBlZA== LlVQREFURQ== w6htZXM= R05VQw== V1g= IG1vbmtz LmJvcmRlcldpZHRo IFNodXRkb3du IEhhcm1vbnk= Y2xhc3NpZmljYXRpb24= IGRlcXVldWVSZXVzYWJsZUNlbGw= IF07DQo= Lkdlbg== IGxhdm9ybw== IExlb25hcmRv ICYp IGRlcG9pcw== IFZvbHQ= RXRo IExlb25l IE5lZGVybGFuZA== IEVYVFJB UmVzb2x2ZWQ= IHBlbmluc3VsYQ== X1ZN R2Vy 2KfYrw== LnByb21wdA== LmFsaWdu aW5nZ2E= ZmlsbXM= SEFORExF IGNhcnRz KFNvbWU= PEF1ZGlv IGVubGFyZ2VtZW50 IGdyb2Nlcmllcw== LWhvbGRlcg== IGlycml0YXRpb24= Q29tbXVuaWNhdGlvbg== IHByaW1hcmllcw== aHR1Yg== X2luaWNpbw== IGNvb3JkaW5hdGluZw== KHF1 IGZhaXM= IHZpc3Rv Z3VpZGVk IHZsYW4= IGVzcHJlc3Nv w6h0ZQ== c2VoZW4= X3Blbmc= IHJvb2Zpbmc= IEFsaXZl QXhpc1NpemU= IHN0dW4= IHJlc3RlZA== dWxsZXRz IE1hbGF5c2lhbg== LFVuaXR5RW5naW5l IGVudnk= J107DQoNCg== IE9zdA== X2p1bXA= IGNvbnRyYXNlw7Fh Ing= CVBhZ2U= KVsi IFNJUA== IEdlb2dyYXBoaWM= IGNhdWN1cw== X1RFUg== 4oCdOw== UG9zdEV4ZWN1dGU= aW1zaG93 IENPTVBBTlk= IE5lYWw= IEhlYXJpbmc= KGFjdG9y Qmlk LlBS LlByb2R1Y3Rz IEVtbQ== IOab IHB1bHNlcw== X0VW L2V4cA== X21vdGlvbg== IGdiYw== IG5hdmlnYXRpb25Db250cm9sbGVy IENvdXJ0cw== IEljb25EYXRh d3U= X3Jm IFJhZ2U= LWZsYXQ= IEhpbXNlbGY= X2NodW5rcw== IG92ZXJzaA== IGNpZg== KElz cGVha2Vy IENQVXM= aXJlY3Rvcg== LHRpdGxl LnNldERlc2NyaXB0aW9u IGVhcnRocXVha2Vz IHdu Z2x5cGg= dWx1bWk= IHNwZWVkeQ== IGVzcGFjaW8= IGVtdWxhdGU= IFwiJA== X0lORg== Y2FsbG9j LXF1ZXJ5 KHZhbHM= IHNlYWI= IGhhdm9j IEludGVyc3RhdGU= IHRyaWFuZ3VsYXI= YmluZGluZ3M= CQkJCQkgICAgIA== IAkg YmNyeXB0 IGNyZWRpdG9ycw== IHNlbWlm bGxl aWVuemE= IEtlbGxlcg== IG1vbnN0cg== IE1hcmNvcw== KHJlaW50ZXJwcmV0 IGhpdmU= U2Ny X2hyZXN1bHQ= IOyhsA== IFNxbERhdGFSZWFkZXI= YW5ub3VuY2U= X3ByZWZlcmVuY2Vz IHRydXN0cw== RXJvdA== LXdvcmtlcg== IHR3ZWVu IFN0cmVldHM= gq3soJw= IEZyYW56 IOKApi4= VUlUZXh0RmllbGQ= LmdldEl0ZW1z IHRvbHVh 4oCcT3Vy IHPhu5E= IHZpcnR1ZXM= IHBvdWx0cnk= PXJvdw== Y29kZWQ= Tm9TdWNo IGtvZA== bHNp IGtldG8= IGdyb3VwTmFtZQ== YXNu IHVuY29tcA== IHRleHRpbGU= dG9vbFN0cmlw LlBvcGVu IHByb3N0aXR1dGU= IHByb21vdGVy Ijt9Cg== IGNvbGxpZGVy QnJva2Vy ZGF0YXNldHM= CU5TU3RyaW5n YW5nbGVy UklFUw== YXRvbXM= IHJlbmRleg== YXBv IOuE Lmdj IFNPTUU= IGZnZXRz R0xF IHphbA== IE9wcG9zaXRpb24= aGFuZGxlU3VibWl0 X21hdGg= IHNwcmU= IHNob3J0ZW5lZA== IGNhdmVz U01T LWNvbnNjaW91cw== IFNhdmVz LkJhY2tncm91bmRJbWFnZUxheW91dA== IGVsZWN0cm9tYWduZXRpYw== KGl0ZXJhdG9y IHVuYmU= amVjdG9yaWVz IG1lZGlhbnRl IMOubnQ= Iiwt IEFTTQ== 6K6w5b2V IGNvbmZpbmVtZW50 4oCmCgoK RXhjZXB0aW9ucw== LW1ham9y IFZhbmlsbGE= IExPQ0FUSU9O IGVsdXNpdmU= VUFSSU8= IElOTElORQ== IHByb2R1Y3ROYW1l X3F1ZXJpZXM= Li4uIjsK IFhpYW8= V2luZG93VGl0bGU= bGV0dGVz IHBlcnBldHVhbA== U2V2ZXJpdHk= IEFjaGlldmVtZW50 w6JuY2lh IHJlbWluZGVycw== c29ydGFibGU= IGFmZm9yZGVk IGluZmx1ZW5jaW5n IFR1bm5lbA== LmxlYXJuaW5n IFF1w6k= cGhldGFtaW5l LkJBRA== Lm1ldGFtb2RlbA== LWRldmljZQ== IEtvbnRha3Q= 4pSB4pSB LXN1bW1hcnk= KCc8Pw== KTw9 IHdpc2VseQ== X290 Om1vZGVs IFVX IE9wZW5TU0w= IEpwYVJlcG9zaXRvcnk= Q29uZXhpb24= VE9U LmNyZWF0ZWRBdA== KHRyYWluaW5n IGJpc2hvcHM= IHZlbnR1cmVz LkVucXVldWU= IFRoZXJtYWw= IEJyZXdlcnk= b3Rlbg== IEZhdGFs X3N1cHBseQ== IGNvbmRpdGlvbmVk IHN1cGVyaW9yaXR5 IElicmFoaW0= IGNvcnBv dW91c2x5 IFByYWN0aWNhbA== Ly9b IEFmcmljYW5z IEJhaHJhaW4= IHN0ZXJpbA== IENsYXNzTm90Rm91bmRFeGNlcHRpb24= LlJlZ2lvbg== IHRyYW5zaXRpb25hbA== IGludGVycHJldGluZw== LlNvdW5k IGZyb250YWw= IGhhcnZlc3Rpbmc= fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4= YXRhaXJl Lkh0dHBTdGF0dXM= S00= IEVyb3Rpc2NoZQ== IGVyb3Rpc2tl RmlnaHQ= UGFja2FnZU5hbWU= IENBQ0hF d2luZ0NvbnN0YW50cw== IFppbW1lcm1hbg== L2Nhcg== IFF1cmFu TWV0YWw= IHVzZXJNYW5hZ2Vy IG1hc3Rlcnk= KFVVSUQ= IHZpZXdXaWxsQXBwZWFy IHN1bW1lZA== KC0o ICAgICAgIAoK VGFrZW4= IGNsb2Nrd2lzZQ== IENhZsOp KGxldHRlcg== IENyb3NzUmVm IEFzdG9u IEFzc2VtYmx5VmVyc2lvbg== 6Z2e bnRz ICQoJ1s= X1JBVElP aWNpZW50ZQ== IHJpY2h0aWc= IHBlZGln KGl4 0YHRi9C7 QXNzaWduYWJsZUZyb20= Ym91bmRlZA== IGFsa2Fs X3ByaWNlcw== IGfFgg== YW5jaGlzZQ== X3JlY2VpdmVy SUdBVElPTg== X3B1bGw= IFN0YXRpc3RpY2Fs X3Rvb2xiYXI= YW1pZGU= IEFzeW5jVGFzaw== cmV0YQ== IOyi IFJFQUxMWQ== IGJ1cnN0cw== IElucXVpcnk= IGJpZ290 c2FuaXRpemU= IEhvbWVy UXXDqQ== IFJvdXRpbmc= LmNvbGxlY3Rpb25WaWV3 IEJpbGxpb24= U1RSVUNUT1I= LmVqYg== IGVuY2g= LnNldFRpbWVvdXQ= UnVi LXJvYWQ= Lm91dHB1dHM= Y29udGVzdA== IHNwaGVyZXM= IHJlc3VycmVjdA== Ii4i IElyaXM= IOya IFhL IFJhcml0eQ== IElTZXJ2aWNl YXRoYQ== IOWH IHByZXZhaWw= CXBw Lkxv Z2V0V2lkdGg= IHd3 IHdpY2h0aWc= QEdldHRlcg== IEpheXM= IHNwZWN1bGF0aXZl KGF0dA== IHRlZGlvdXM= IHNjcmF0Y2hlcw== IHBlbMOtY3Vs IGJvcm91Z2g= IG3Dsw== UmVwcmVzZW50 YXRvcml1bQ== KENhbWVyYQ== IGNvbHVtbk5hbWU= IHJlaXRlcmF0ZWQ= IENhc3Rpbmc= LmdldEhlYWRlcg== IOKAnFs= IEp1aWNl Y2h1 LkhUTUw= IEFudHdvcnQ= R0x1aW50 CUl0ZXJhdG9y IEFOQUw= IHVucG9wdWxhcg== KExvY2FsZQ== IG1pdGlnYXRpb24= IGFkcmVz 4bq3 fSx7Cg== IFNjaHdhcg== X1BBSVI= PigpLAo= b3V2 IEFsZg== eEVG 55yB IGVzY3Jp TE9VUg== U0VMRg== IFRtYXg= VHJl bG90cw== ICguLi4p XSsk IGFtZXJpYw== L3JlZmVyZW5jZQ== IE9keXNzZXk= IE1pbmVz IGFnb3Jh IHByb3BoZWN5 IE9wcG9ydHVuaXRpZXM= cHJvZmVzc2lvbmFs KHByb3h5 cGhhbnVtZXJpYw== IEVkaXRlZA== b2xvZ25h LmlzT3Blbg== KHZlcnRpY2Vz IFJpY2t5 X292ZXJsYXA= Pjs= LkRPTQ== e31f IENPTVBVVA== cmVkaXJlY3RUbw== IHNoYWtlbg== IHJhdGlvbg== IG5lbGw= X2Jj IE5lcg== YW5kUmV0dXJu IGVyZWN0ZWQ= Q2hpZWY= IGRpbmVybw== IGphc21pbmU= LS0tLS0tLS0tLS0tLQo= ZmFybQ== IEhhdGU= VEFTSw== QU5ORVI= J11dXQo= IE5pZ2Vs aGliaXQ= IFFUZXh0 Lkxlbg== IHRlxbw= c2xpZGVz ZmVsdA== IFJFVg== X2hvbGQ= IENvdXBsZQ== ZXNjYXBlZA== LWV4cG9ydA== Pkk= ZXdpc2g= KEFwaQ== ICghWw== Tm91cw== T1RPUg== IHNlYWxpbmc= V2ll IGthbm5zdA== K3htbA== IG14QXJyYXk= IGFkbWlyYXRpb24= Lm5i IGpld2Vs LlRlYW0= IHByb3NlY3V0ZQ== LnhtbGJlYW5z Y2h3 KGJhY2tncm91bmQ= IEF2aXY= CWZpbGw= IGRpc3Bhcml0eQ== 4Lo= X0FQUEVORA== IFB2UA== 44OQ IFZpdmU= IGdyYW5kc29u LmFkZEVsZW1lbnQ= QXRvbWlj IHByaW1hcnlLZXk= IGNvbnRpbmVudHM= IEZ1Y2tpbmc= JScK QG1haWw= IGN1bHR1cmFsbHk= YW5nYW5lc2U= 7KCE Zm9sbG93ZXJz IHVybg== IHJhY2tz IFNBRkU= Ly8NCg0K KCIvew== X0lOSVRJQUw= X1Jlc3BvbnNl RXZlbnREYXRh Jz4k c3RhcnRz 4Kk= IHRoYWltYXNzYWdl IHNwZWNpYWxpemF0aW9u IOyEpOyglQ== ZWRv IGNvbXBlbnNhdGVk X2NoYXJzZXQ= fS57 L2VudGl0aWVz X2Zr LS0tLS0tCgo= YXNjYXI= IGNlbGxGb3JSb3dBdEluZGV4UGF0aA== IFByb3Bvc2Fs IE90dG8= IF9fX19f ICIqIg== IHRvb2xraXQ= IGV4cGVjdGFuY3k= RG93bkxpc3Q= LWRh IHByb3ZvY2F0aXZl IG1laW8= ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== KCgpPT57Cg== JGxpbms= aW5jYXJl IGljeQ== IEhpc3Q= QWNjZXB0ZWQ= IGNsb25lcw== IFFB IGNvbmZvcnQ= IHByb3ByaW8= IFZvZw== KG1hcms= X1NlYXJjaA== IGVuZHdoaWxl ICQj 44GX44GL X0xU SW5zdGFuY2VJZA== YmFyZA== cm5l cmVnb3I= IG5vcmdl XDo= 0YDRg9C3 LmJ0bkFkZA== IHBpbGxvd3M= IFBhcmFtZXRlckRpcmVjdGlvbg== SGFuZGxlcw== IGRlYWxpbmdz IGNvbnZleA== IENoYXJpdHk= Lk51bWVyaWNVcERvd24= IFNrZWxldG9u IFp1Y2tlcmJlcmc= ZXNlbg== IEZBQQ== X3N0ZQ== IGh1bWlk am0= Y2hn LmdldExvY2Fs IHRhbmRlbQ== aXN0bGVz X210 LmFjY291bnRz IEluc3BlY3Rpb24= IEZyYXVk IGvDvA== IHN5bmNocm9ub3Vz IFJpY2FyZG8= IEh1ZQ== IENvbm5lY3Rpb25z SU1FTlQ= b2NoYXN0aWM= XGRhdGE= IEVudGVycHJpc2Vz LXNpbXBsZQ== IGltYWdlRGF0YQ== IFVtYg== LXNjcmlwdA== L2dlbmVyYWw= QVBU IFR1dA== aW1pemF0aW9u IGlkYWRl IEtlbQ== ZWxzaWY= LkFMSUdO IFRvcmllcw== IEJhc2ls b2dvbmFs aGFjaw== TnVsbE9yRW1wdHk= IiksCgo= 44OD44OI ICclJw== X1JG ZWdvdA== LmFzcGVjdA== KFByb2plY3Q= TEVOR1RI cGxlbWVudGFyeQ== X3ByZWRz IEhvbGRz Y2Fycmllcg== CWxheWVy QXR0YWNoZWQ= LXByZXNpZGVudA== aW5kaA== J10uJyI= LkFDQ0VTUw== IENFTlRFUg== UXVhbGlmaWVk IG9zdHI= LlN5bWJvbA== dGFodW4= IExBTkc= X2J1c2luZXNz CVN0YXJ0 ZXJyZQ== IGFzaGVz IEFkdmVydGlzZW1lbnQ= Lkhvdw== IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IG9ibGl2 IGJsZWVk IHN2bw== Lm5vZGVOYW1l IGl0ZW1OYW1l IEJBTks= w61jdWxvcw== IEVtbXk= IERvbWluaWNhbg== JylbJw== IHJlYWxsb2M= dWxzZXM= 6L6T5Ye6 IE9mZmVyaW5n 64ql LXByb2dyYW0= INGB0L7QvtCx0Yk= TU9W IG5vZGVJZA== 0LXQvw== Zmx1aWQ= IHRlYXNl w7hyZQ== IGNvbXJhZGVz IHVucmVsaWFibGU= IHBvc3RJZA== Z2V0SUQ= b2dyYXBocw== VGFuaw== IFFWRVJJRlk= IGZsb2F0ZWQ= X1RISVM= Y2ltaWVudG8= IE5pY2Fy c2hy Qm91bmRpbmdCb3g= IGlub3JkZXI= IEdsb3Nz V2l0aFRpdGxl dW5jaW8= IHBlcnNpc3Rz IGRpcmVjdHM= YWNjacOzbg== U2FtcGxlcg== IGJsYWNrbGlzdA== IGFEZWNvZGVy IGludm9rZXM= X3NraW4= Pklm dHJ1bmNhdGU= LlNpbg== c29vbg== IGRpc2Zy CVZlYw== IyNf LnNjaG9vbA== IGJsaW5kcw== IGFjYWI= IHBhdGhldGlj IHZvbGNhbmlj IHJkZg== IGN1bHRpdmF0ZWQ= IFVJTmF2aWdhdGlvbkNvbnRyb2xsZXI= IGlwdA== IGdsYW5k IGV2aWRlbnRseQ== UGh5cw== IHN3YW1w IGltYWdlTmFtZQ== LkxheWVy dWZl LFsn IENyaW1zb24= 6YCg PGZvb3Rlcg== IGJpa2luZw== INC00LDQvdC90YvQtQ== bW92ZXM= Y3Jj aWxsYXRpb24= IGxhdXJl 0YDQsNCx0L7Rgg== 0YPQug== IENhaW4= IHB5cw== IGNvbGxpZGU= IHxffA== KHNwYW4= IGdpbmc= IG9iZWRpZW5jZQ== b3V0ZXJz U29vbg== IFdoaXRuZXk= IEltcG9ydHM= OlVJVGFibGVWaWV3 KiY= IGJr V2l0aEVycm9y LWV4dA== X1JET05MWQ== X3RyYWNraW5n bm9vcGVuZXI= w7xucw== IEd0a1dpZGdldA== c2ti U0FWRQ== T2Jz KCcuJylb IGF1dGhvcmVk LS8= TG91aXM= LmdldE91dHB1dFN0cmVhbQ== IGdlbmVyYWxpemVk 7Yw= IGFydGlzYW4= KGNwcw== IERtaXQ= 0LvQuNGG LkltYWdlTGF5b3V0 IHN1Y2hlbg== XX0s LmNvbGxpZGVy VGFiUGFnZQ== XT1b aHlkcm8= X3N0cmlw IGxpY2tpbmc= IGJvb3N0cw== IHNrZXB0aWNpc20= IGpvZ28= IGNvbXBldGVk IOuCtA== Tm9kZVR5cGU= WEY= IHBvc3NpYmlsaXQ= LWNvcHk= IHRyaXR1cg== IEF0dGFja3M= IG7Dqw== SURBRA== b2dyYXBoaWVz VGltZVN0YW1w b3R5cGluZw== LUFwcg== INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjw== ICI7Ig== IEhhbGU= L2FwaXM= IDpdCg== X2hkbA== IERpYWw= CUNvbmZpZw== X0ZSQUdNRU5U X0VkaXQ= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IGNhbmRpZGFjeQ== IENvbXByZXNzaW9u X2xvc3Nlcw== Kj4oJg== SW50ZWdyYWw= IHBhcm9keQ== IGluaXRpYWxpc2U= ZmlsbHM= IGFsdHJp X0VMRU1FTlRT YWRhc3RyYXI= Y29ycmVv IHdhdHQ= X0RSVg== IEZvcmdvdA== IGdldENvbnRleHQ= IHNob3J0YWdlcw== IE9DVA== d2VldGFsZXJ0 IE9wZW5z Kmw= IEtpdHR5 4oCZw6l0 IFBpY2Fzc28= LnRvQnl0ZUFycmF5 0L7Qu9GD0Yc= IERFTg== 5aeT5ZCN V2ludGVy YW50YW4= X19b UHJpbQ== IHJvb2Z0b3A= IEJpbGxib2FyZA== dGVzdENhc2U= cHJvZHV0bw== LXRodW1i IHJlc2V0cw== Z2Vibg== PkVycm9y LmRlcGFydG1lbnQ= IGVhcnJpbmdz IENhcm91c2Vs KGV4YW1wbGU= CWVt XENvbnRhaW5lcg== IEVsdmlz IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= RW5nbGFuZA== Y3JlZGl0ZWQ= X2NvbnN0cnVjdG9y IGxvcg== IERhd3Nvbg== QnVybg== IEJyaWdhZGU= IE11dGV4 IFRyYW5zaXRpb25hbA== IE1vdXNlRXZlbnQ= Z3Jvdw== Lm1pbnV0ZQ== IEdNTw== PVtdLA== IHN1c2hp IGFlc3RoZXRpY3M= T0NVUw== IFNFTEY= IEFzc2VydGlvbkVycm9y IE1DVQ== IGhpbnRUZXh0 IHNlYXc= bmdsZQ== IGV4cGVsbGVk UFJPUEVSVFk= KS48Lw== LW9wZXJhdGlvbg== IEltbXVu IGxpY2Vucw== aWJpYQ== IGJpZXRlbg== IGdyaXBz Q0hBTk5FTA== X0VSUk9SUw== X3JlY3Vyc2l2ZQ== VWx0aW1hdGVseQ== IE1hamVzdHk= IGRlYWN0aXZhdGU= IEVYQU1QTEU= dWNpb25lcw== IGN1cnJlbnRWYWx1ZQ== IGV2YWx1YXRlcw== L0dyYXBoaWNz InRleHQ= X3BhbGV0dGU= IFRNUA== IEJlZHM= LkNvcw== 4Lix4LiZ PXRvcmNo IFBBQ0tBR0U= aWxsYXJk LmNw leyduA== LWFwcHJvdmVk IE5vcnRod2VzdGVybg== PHRleHRhcmVh IENvbXBhdGlibGU= X1JEV1I= LlF1YW50aXR5 QElk X29yaWVudGF0aW9u Z2V0VXJs IHRyYW5zbGF0aW5n IFdlYXZlcg== IGpzb25BcnJheQ== IGVtYmxlbQ== LklzTnVsbA== IENoYXJ0cw== W119 Z2Fl X25lc3RlZA== dGVtcHM= cGF0aG5hbWU= Q1c= LXdyaXR0ZW4= IFBBUks= KGNvbmQ= X2FsYXJt IGdlcmU= IEdpeg== IE5nYg== IC5f YXBwaW5lc3M= IERlcGxveW1lbnQ= aVBhZA== Il1d IHN0cnN0cg== IHRvbnVtYmVy KGRs CXdvcmQ= W3Rv X0ZJWEVE RXhwaXJhdGlvbg== OnJldHVybg== T250 PlBsZWFzZQ== Z2V0VGl0bGU= LnNwbGl0ZXh0 Y29tYmluZWQ= T2Q= IG5vdmVsdHk= IlM= IHN2bQ== Q292ZXJhZ2U= IEh1dA== IHJlc2lzdGVk IGVsbG8= IG3DtmNodGU= S2F5 Lmxpa2U= Y2Npb25l IHJlc2VtYmw= RGVhdGhz IGVwaXQ= KHJnYg== LkNsYXNzZXM= INC00L7RgdGC Y2FwdHVyZXM= XStc YW1pZW50 IFBhc28= LlNlbmRNZXNzYWdl IFJlbmF1bHQ= IE5hcmVuZHJh dG91dA== IGhhZGRl IFR3ZWVu w6VkZQ== IG91dGZpZWxk Lz48Lw== QFw= IER1cmFudA== IGFicmU= X3N0b3J5 IHBlcmZ1bWU= Q3BwVHlwZURlZmluaXRpb25TaXplcw== INC/0LDRgNCw0LzQtdGC Y2hlbWVz IFNhZGRhbQ== cHJlbm9t dXNwZW5kZWQ= IEJlbmVmaXQ= IHNjZXB0 X01vdmU= IE5hag== LU9u cnVk SW1hZ2VQYXRo wq4s IGFuYWx5c2Vk IE9H ZWxsZWljaHQ= YmlyZHM= ZWt0ZQ== IEFsaXNvbg== IGF0aGVpc3Q= eyU= YWJo LXBob3Rv aW5zdHJ1bWVudA== IGhpbnRlZA== IE9mZmxpbmU= KSIpOwoK X1BSRUY= IHN0eWxpc3Q= IEt1YmVybmV0ZXM= IGZlcnY= CgoKCgoKCgoKCgoKCgo= KCI9Ig== LmdldE0= IG5vdGV3b3J0aHk= IHNjb3V0aW5n X3RyYW5zbGF0ZQ== IGJlZ2lubmluZ3M= IEx1bw== IHFs X2FsaWduZWQ= IGVydw== dWFycw== X1BhdGg= LicuJA== IGhvYw== IGRlcnA= bG9p IE1jS2lu 6K+05piO Lz0= TGlua0lk c3RkZGVm cmVkdWNlcnM= aXNhbnM= Lmhpc3Q= Jy8+Cg== IFRveGlj IGRpc2FwcGVhcmluZw== IGNpcw== KGRv IG1haW5TY3JlZW4= X0JBTks= IGRlbW9uc3RyYXRvcnM= IFBhbGV0dGU= dWVseQ== UmFyZQ== IHJlc2lkaW5n IGFtYmllbnRl IG1pc20= LXF1ZXN0aW9u IG9wcHJlc3NlZA== IGxldHJh PGR5bmFtaWM= IEZvdG9z LXBvbGljeQ== aXN0ZW0= LmV4Y2hhbmdl c3RyZQ== JC8s 7ZWY6riw JAoK IFJlbmU= IHRvdXRlZA== LUNvcmU= IENyYW4= IFRyYWRlcg== IGRldw== IGZsYXA= CWZpbGVuYW1l IGlubWF0ZQ== KE1vY2s= IFNvYg== aXNibg== IG5vZQ== IEZvcmJpZGRlbg== IGVsZXM= IGRpbmc= X3Nh KSovCg== YXJpZQ== IFN1cHBvcnRz IG1vZHVsYXRpb24= IGVuc2w= IFNoYWRvd3M= cHJpbmNpcGFs YW5nZW50 LUphbg== IFBhbnRz LHRy IGZpdHRl IGdhcm1lbnRz TWFyZ2lucw== TFRS IE1peQ== dmVudHVz IE3DtmdsaWNo W2F0dHI= L3Jlc3BvbmQ= IHR0aw== IG9sZHXEnw== IENvbnNl UHJlbWl1bQ== IGZyYW5jYWlzZQ== X2hvcml6b250YWw= X2li IEZhcmU= IGhhcnZlc3RlZA== ZW5kaXI= KGhpdA== PiovCg== IElSZXBvc2l0b3J5 eWxpZQ== IGRldGVjdHM= Om5v 4pi0 IGRpc2XDsQ== IHVuc2VyZW4= IG1vY2tpbmc= c291dGg= cmF0ZXM= IGh5cG9j IFNob3J0bHk= IEJsYWNrcw== 0YLQuNGA0L7Qsg== IEFTQVA= cmViYmU= aWVj LkFkZERheXM= IGVwaXM= LWluZmxhbW1hdG9yeQ== LW5ldA== IHBhbGw= 65Q= IGlzc3VhbmNl IGNvbnRlbnRpb3Vz LkFyZWFz 0LjQu9GM IGNvbnRpZ3VvdXM= W2FjdGlvbg== IGV4cHJlcw== ISIpCgo= VUxP IHdyZQ== IHN1YmRpdg== IHR1cm5hcm91bmQ= IGFjY2Vs IFVuaXY= IFVuaXZlcnNpZGFk c2V0dA== ZGVzY3I= LkdlbmVyYXRpb24= IHBhdHJpb3Q= IGZhcw== KioqKgo= UVA= IOWN b3BwZWw= IGp1ZWdvcw== LmRyYXdTdHJpbmc= LWNvbmZpcm0= CSAgICAgICAgICAgICA= PFByb3Bz IGZhbWlsbGU= IEhlbG1ldA== ZXJ0aWFyeQ== YXRoaQ== IGN1bHRpdmF0ZQ== IGR1cGxpY2F0aW9u IHNweU9u Ki8pCg== IEh1bmdlcg== T3J0aA== IHBpbnBvaW50 IEhhZw== IHRpbWV0YWJsZQ== bWFyZ2luVG9w IHJlY2lwcm8= ZmVsbA== IFBlcnNpc3RlbnQ= 44Gp cGx1cmFs cXVldWVk IGdyYWNpYXM= w6F0aWNv IGhhcmRzaGlw IEFwYXJ0bWVudHM= IEp1bms= IFJldmU= X01zaw== IHN1cHJh IEFUUA== IHNldFNob3c= 5a2X56ym5Liy IE5vdHRpbmdoYW0= U3RldmVu IE11bmQ= cmFuZ2Vz IHVwbG9hZHM= IGJmcw== cHo= dWx0aW1hdGU= IEVmZmljaWVuY3k= QU1J 5b6E X1JFUEVBVA== IGFjYWRlbWlh LnRvb2xTdHJpcEJ1dHRvbg== VG9FbmQ= cnZpbmU= IFRoeQ== IEVsZWN0b3JhbA== IFJFUVVJUkVE IHBsdW5nZQ== IFJldm9sdXRpb25hcnk= IFRlbnQ= IGdyZW5hZGU= IjpbeyI= IG1vdXI= UG93 IGV2YW5nZWxpY2Fs VEVDVEVE IG92ZXJ0dXJu CUlucHV0 cmVjb21tZW5k JUM= IHNsYWc= IEJoYXI= X2VuY3J5cHQ= IFdhcmZhcmU= KGFnZQ== QVRFR09SSUVT bWlsZQ== IGhlYXZlbmx5 YW1tZXI= KCkpWw== YWRlcmE= aGc= IExBVw== IHBhY2thZ2VOYW1l X3R5cGVEZWZpbml0aW9u KGJl REJOdWxs X3Rhcg== IGhldXJpc3RpYw== IFdhbnRlZA== IFN0dWI= IGtpdHQ= UkVD IHBhc2Fy Lm5ld0J1aWxkZXI= CWdyYXBo aW9zYQ== LmNvbHVtbkhlYWRlcg== IHNldE9wZW4= IFRoaXJ0eQ== ICIlLg== QWxiZXJ0 IHNhbWE= IHJvY2tpbmc= Q29tcGxl TVY= fCgpCg== X3JlYWRz KHZhcmFyZ2lu b3Vsb3VzZQ== IFNJTUQ= IGNhcmJvaHlkcmF0ZQ== d2hvbGU= LE5vbmU= i+ivlQ== IENoYW5k Y3phcw== X3F1ZXJ5c2V0 IGV4aXN0ZW50aWFs IGVkaWJsZQ== IGFnaWxpdHk= IFdpbGxpcw== IGh5bQ== IEJyaWxs 0LjRhQ== IE5vdEZvdW5kRXhjZXB0aW9u ICgoKQ== QVBTSE9U IHN1YnN0YW50aXZl X3R5cGVEZWZpbml0aW9uU2l6ZQ== IHZhY2FuY2llcw== RU5HSU5F IGFuZGVycw== IHN5bWI= IGV0cmVl KS5f IHRyYW5zcG9ydGluZw== aW1wcw== L2NvcA== YWN0YWJsZQ== X2ZsdXg= IG5ld0luc3RhbmNl YXRvaXJl IGNvbHVtbkluZGV4 IEdpbw== IHN1YnRpdGxlcw== LldpbkZvcm1z 0LvRj9C10Lw= IGFsZXJ0ZWQ= IHN0cmlwcGluZw== d2VuZHVuZw== IE1ldGhvZEludm9jYXRpb24= RXJyb3JIYW5kbGVy U2Nyb2xsYmFy UG9ydGZvbGlv Y29uc3Vt IENPTU1PTg== TGY= X2Jhc2Vk b2NhbHk= IGVmZmV0 dnZt cmlwc2k= IGZsb3VyaXNo Y2h0ZXI= PT09PT09PT09Cg== IHJlcXVlcg== LnF1ZXN0aW9ucw== KCI/ IHBvc1g= IFBDUg== IE9yZ2FuaXphdGlvbnM= cHLDvA== RXhhbQ== IEluY29ycG9yYXRlZA== X3BocmFzZQ== IHByYXllZA== IGhvbWVvd25lcg== IFRhag== eng= IElkZWFsbHk= X01BQ0hJTkU= IFJlbW92aW5n Q29lZmZpY2llbnQ= IGVkdWNhdGluZw== ID8+Jg== IHBvdXJz aXJhbQ== X3BlYWs= IG5lc3Rpbmc= YWJ5dGU= bmF0dXJl IGFmcw== IFJvbw== Y2FyZ28= b2JqZXQ= IGZyZWVpbmc= cXVha2U= RGVuc2l0eQ== IGRlc2NyaWNhbw== LyoqKioqKioq IGRhc2hlZA== IGdyb8Of b29reQ== IFBFT1BMRQ== X1Bvc3Q= IGNlcnZpY2Fs IEFkanVzdGFibGU= ZW5zdWFs IFJldmlzZWQ= KHJlZmVyZW5jZQ== CUJhc2U= ZXNzaW0= TWFpbnQ= IGdldFNpemU= IFNhbmR3aWNo cmFkaWVudA== c2luaw== Oi8vJw== X3R0 RlBT IEFybWVuaWFu cHJldlN0YXRl X0xJTkVT IHRpZ2h0ZW4= PFs= XTw8Ig== IFRyYWZm IGxpcXVpZHM= IGFyY3M= X0NvbW1hbmQ= QHByb3RvY29s LWlzaA== IHJ1YmJlZA== QkJD L2ZpcmViYXNl QXBwQmFy PFg= IFNJTkdMRQ== LlN0YXR1c0ludGVybmFsU2VydmVyRXJyb3I= IHZlcnRl L3F1ZXJ5 IGdldENvbmZpZw== IERpcmVjdFg= cGh5c2ljcw== eWNvcA== IGJyZWFrZXI= LXZvbHVtZQ== ZGF0YVRhYmxl 4oCZZQ== cmlvdHQ= IEV0ZXJuYWw= Z2V0SGVpZ2h0 IG9uSXRlbUNsaWNr IHF1YXRlcm5pb24= IGtpbmt5 ZGVzZXJpYWxpemU= KFNwcmluZw== IHBlYWNlZnVsbHk= X0RldmljZQ== KE1hdHJpeA== acOocmVtZW50 KHR5cA== LnZhYWRpbg== LmdldE1ldGhvZA== IOKAnQoK IHRocmVhZGVk IEZhbW91cw== IEdhbWI= IOyngA== INCk IGZha3Q= IGVjaHQ= X3Vi LkpwYVJlcG9zaXRvcnk= IHVuZ2U= LWVuZGluZw== IENBTUVSQQ== Y3JlZGVudGlhbA== IFBhc3Nwb3J0 CVJUREJH IGV4dHJhZA== LW9yaWdpbg== IHNhY3JpZmljZWQ= IFNjaHVsdHo= IFR1cnRsZQ== LmNlbnRlclg= IHNob3djYXNpbmc= IGJ6dw== eXJv aXNOdWxs LmlzRGlyZWN0b3J5 bWFpbnQ= X2Jp IFNwcmluZ2Vy fSgpCgo= aXNzdWVy LWFybQ== ZXNr bGluaGE= IGtvcnQ= YWphcw== YWxpbms= KEJ1dHRvbg== IFJlc3RvcmF0aW9u IGluY3I= IFpob3U= CSAgICAgICAgCQ== IERpc2NsYWltZXI= IGt2aW5ub3I= IERhcmU= IDwtPg== 6K+m CQkJCQkJCQkJCQo= LkNsYW1w CXNjb3Bl IE11bQ== PDw8PDw8PA== L3t7 X2FydGlzdA== IFJlYWN0aW9u IE5pY2tlbA== X1JlbW92ZQ== KCgoKA== 64yA IGR5bmFzdHk= IFRocm93cw== IENvdWw= X3JuZw== IERvaw== Lmxpc3RWaWV3 IFR1Y3Nvbg== KHRvaw== IFBoaWxpcHBl VG9TaG93 IGRpZXRh IFVsdHI= LlRpY2s= IEdldFR5cGU= aWV0ZQ== IExlYWg= SGFyZHdhcmU= IENvbXByZWhlbnNpdmU= Q09NTU9O IGluZHVzdHJp aXJpY2Fs LWJlZHJvb20= IGd5cm8= INC60L7RgA== IC0vCg== Y291cg== IEJydXNoZXM= TXVsdGlwbGllcg== IHVzZXJkYXRh IFJlY29nbg== IG9ibGlnYXRlZA== IExldmlu YW5jZXN0b3I= IG1lbmluZw== IFVk LGpzb24= KGFzc2lnbg== IG5kYXJyYXk= X2Nvcm5lcg== QEFsbEFyZ3NDb25zdHJ1Y3Rvcg== 6aqM6K+B56CB YWRvcnM= IHJlc3BvbmRlbnQ= R09SSVRI IHRlbmdv IHNldE1lc3NhZ2U= IElQTw== YXJyYXlz IEFHQUlO J1s= ICItLy8= w6Rt 44CCXA== Lm9uY2U= Y3VycmVudFRpbWU= R292 IGdldG9wdA== bWx4 IFRvbmU= J11dOwo= IHByZWRhdG9y V3k= L2VudGl0eQ== IG1hbnRyYQ== KT49 b2dyYWQ= IG1lbGFu IHNvcnRCeQ== IERFRklORQ== UHJvdGVjdGVk Y2RlY2w= Jz4iLiQ= PGN2 Y3JpcmU= LVRydW1w IHVjZmlyc3Q= Y2Fzc2VydA== IGFja25vd2xlZGdlbWVudA== IElOVg== IFVOVQ== LnNxdWFyZXVw IFNheA== cmV0dGU= KCkKCgoK IERhdGFCYXNl IFBhdHJpb3Q= X1Jvdw== IEV4aGliaXRpb24= IGRldGFpbmVlcw== IFN0cmluZ0lP X0RFTg== TW9kaWZpZXJz YXNhcg== aXJ0aW5n IHRyYW5xdWls KGVuYw== IOOCsw== bmNvZGVy X3VudXNlZA== IEJpYW4= VmVyYg== X2V4Y2VycHQ= L2V4cG9ydA== IFNleHQ= RHM= QU1QTA== T2ZTdHJpbmc= X3RyYWNrcw== d2o= b3Rvbmlu IElURQ== SVZFTg== LW9yaWdpbmFs IEZJTkFM X18pCgoK IGVuc2U= IFV0dA== Oioq IFN1cnJleQ== IEthaXNlcg== YWRtaW5pc3RyYXRvcg== LWxhcmdlc3Q= IGxldHp0ZW4= IGNoYWluZWQ= J0g= IGRvY3VtZW50aW5n IExlY3R1cmU= Ukg= b2xsYXBzZWQ= c2tpcnRz ZWxkZXI= IFNpeHRo IGFsbGVnaWFuY2U= SVNPU3RyaW5n VXNhZ2VJZA== LmhhcmR3YXJl IHBhcmk= IHfDpGhyZW5k IHJkcg== IGhqZW0= TE9PUg== IExQQVJBTQ== INC80L7QttC10YI= IGhvbWFnZQ== b3V0c2lkZQ== IENoYXJTZXQ= PEdhbWU= 77yZ X01VVEVY KSkvKA== X3Jlb3JkZXJlZA== dGV4dElucHV0 QU5DRUQ= IFRlZQ== IGNvcm5lcmJhY2s= UXVlcnlTdHJpbmc= IGxvbmdpdHVkaW5hbA== IEhvbGlkYXlz QUJDREVGRw== LktleVByZXNz LnVs eWRybw== IFRhdGU= CXJvdXRlcg== c3BvdHM= IHBhdWw= LXByZXY= IGtub3dpbmdseQ== IEt1cmRz IEV1cm9w LmNlcnQ= QklH KGNvZWZm IENsYXVz L2V4YW1wbGVz IEZhcm1z IC8vKA== U1BBTg== IGNpcmN1cw== IE1JUw== IFRyYWl0cw== LWNsZWFy IHJlZ2ltZW4= IGJhY2tncm91bmRJbWFnZQ== dXNhaGE= X01ldGFkYXRhVXNhZ2VJZA== IHJoZQ== Q2xpbg== IERvbWluaWM= Lm5leHREb3VibGU= KGRldGFpbA== VGhyZWFkUG9vbA== IENhcnBlbnRlcg== c29ydGluZw== IGdvdmVybm9ycw== IHNpbmdlcnM= dW5saW5r IHJpbmdpbmc= IHNjaGVtYXRpYw== IGVycm1zZw== IGJlYg== LiIr IEluY3JlYXNlcw== IkFsbA== IGFjb250ZQ== emlh LlRleHRDaGFuZ2Vk IFRvRG8= LDopOwo= bmFnZQ== Y2hs b3dlbA== IGdlcmFkZQ== X2ZmdA== IGVzdGFtb3M= U1RBUg== IGRpc2d1c3Q= Z3Jhbg== cG9ydHVuaXR5 IGF1dG9iaQ== e317Cg== IENvdXBvbnM= X0dBSU4= IFRDSEFS L3Bhc3M= 55Sx IGZvb3R3ZWFy KGJvdW5kcw== YXB1cw== Y2l0ZQ== Qk9PVA== IENvZGVj bG9ndWU= LXByb3BlcnRpZXM= YXV0b21hdGlvbg== IFNob2U= c3BlY3Q= KG1t IEtldA== W3BhcmFt IGJhc2ls IEFuZ3VsYXJGaXJl IGFkdmVudHVyb3Vz X1VDbGFzcw== IGluZHVsZ2U= CWN1ZGE= IGluc3VsdGluZw== LkV4cHJlc3Npb25z IG9uQ3JlYXRlT3B0aW9uc01lbnU= VUVM IGJpdGluZw== KCFf IEVuY3ljbG9wZWRpYQ== IGJlcnQ= IFZlcmE= IEJpYmxpY2Fs aW5zaWNz X1NJTVBMRQ== IHNhbGlkYQ== cmVxdWVzdGVk IENvbXBvc2l0aW9u LkF0b2k= KEtleUV2ZW50 ZXJlYQ== IGRlcG9ydGVk IFF1cg== IG5pcHBsZXM= aXNBcnJheQ== INGD0LrQsNC3 IGJyaW5r bWV0cm9z RW51bWVyYXRpb24= IEJ1aWxkcw== ZXJ0b3M= IHNhaW50cw== LmRlcGxveQ== ZXRoZXJldW0= IGtpbmRlcmdhcnRlbg== dmFuaXplZA== IGNvbWJpbg== IHBvdXZvaXI= S2lu YXLEsQ== IC4uLi4u 77y+ Lkdv IHF1aXJreQ== xLFuZGFu IGFjdGlvblR5cGVz IFFVRVJZ VGF5bG9y IFJL dGF0 LnBhY2tldA== IElNUE9SVEFOVA== IGN1c2hpb25z YnVsaw== ZHVjdGl2ZQ== YmVuZWY= b2NyaXN5 IGZ1ZXJvbg== IGN1cnNlcw== IGZpbGluZ3M= ZWxpZXI= KD86 X2RyaXZl IGNvbnRhY3Rv IFBhcmt3YXk= dmlkZXM= Z25l YXZhZ2U= XFwu ZnVsbE5hbWU= ZGxs IHNob2Nrcw== ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== X3B4 QFdlYg== LlBlcnNpc3RlbmNl IHN1bms= LnRvb2x0aXA= YXV0aWNhbA== TmV3c2xldHRlcg== IHdhaXRlcg== IGlucXVpcmU= 0LDQtdGC0YHRjw== KCdfXw== dG9n SUVOVEFUSU9O IGNvbXBhbnlJZA== IEJhc2ljcw== CUpMYWJlbA== IG1hY09T IE1hdHM= X3RlbA== LXByZWZpeA== IG11dGF0ZQ== fScp Y2hlbmc= IE1pbGl0 IiY= ZmluZGluZw== IERhdGFMb2FkZXI= LkdQSU8= IExldnk= IHNuZWFrZXJz IGNyw6lk YXduZXI= eGlh L3NpbXBsZQ== Q0hS IGZsb3RhdGlvbg== LnNlbnNvcg== QnJhemls IFNlYXNvbnM= IFNwZWFr LWJhbGw= IE11dGF0aW9u dWtrYW4= IE9tYWhh 4oCZb24= IEN1b21v IEp1ZGljaWFs IGNoZWNrcG9pbnRz IEZyZW0= CUlk ZWdyaXR5 X2Fm QE5vQXJnc0NvbnN0cnVjdG9y IHRhYmVsYQ== WyM= bm90YQ== IEZhY3RvcnM= KGdyb3Vwcw== aXN3YQ== SVZP IHNjcmk= YWNldA== IE1laA== KGNsYXp6 IFs8 cGVyaWFs IHN1cnBhc3NlZA== IGpva2Vk IHJ1ZA== IGltYmFsYW5jZQ== IEZyYWdl c3Nw IGluZGljdGVk Lm1hcmtldA== O20= IHJlcGFpcmluZw== LW5vdGU= RGVidWdnZXI= KFdlYg== IHNpbmdz IExveQ== IERFU0lHTg== LkNvbXA= LWNvbnRyb2xsZXI= IGF2b2NhZG8= IEJvd2ll Y29udGFkb3I= dWxpbmdz dWNob3M= c3BlY2lmaWVy IFZvbHZv IGRlbW9z IFByb2R1dG8= Lk5vdEZvdW5k IG5pw7Fvcw== IEJvbHM= X291dGVy U2hlcg== QVVUTw== IGpvdg== IEZyZWRkaWU= b3JpYXM= IGFmZWN0 IGZhY2lsaXRhdGluZw== IGRvbWluYXRpbmc= UGFyY2VsYWJsZQ== JywnLQ== bW9vbg== IG1ldGFzdA== IHNjYXJm IFRoZXJt Q2FsbEJhY2s= 0YHRgtCw0LI= LkltcG9ydA== IGJldHJheWFs aWN1bG9z IHdlacOf 5YyF X14= d2lmaQ== IFNFTlNPUg== X0JVU1k= JGI= X0ZJTkQ= IHBsYXN0aWNz IENPTlZFUlQ= CWNhbGw= IFByYWd1ZQ== IGdhcm5lcmVk X2xlYXJuaW5n c2hvb3Q= J10pKQ0K IEdpbmdlcg== PXBk LHRlc3Q= UHJvZml0 IGVzdGltYXRvcg== IGJyZWU= IC8vPC8= X2hhdmU= IEtvZA== X0lNTQ== aXp6YXM= bWlnaHR5 154= IE9uQ2xpY2tMaXN0ZW5lcg== 44OH IFNjaWVudGlzdA== RmlsdGVyZWQ= YXZs aGF5 X2dlbmVyYXRlZA== XScK IEF1dGhvcml0aWVz OnBhcmFt IHN0YXR0 LW1hdGVyaWFs IGxpZGVy IENyb3A= IEJ1bmlmdQ== IG5leHRQcm9wcw== b3J6 X29yZA== PHg= X0lPQ1RM IE11c2NsZQ== CWV4ZWM= RU5BTUU= X2xldHRlcnM= IyMjIyM= IENz J109PSI= ICInKQ== Q2xlYW51cA== LnN0cnVjdHVyZQ== zro= 6YCa6L+H J107Pz4i IExhdGl0dWRl YmJpbmc= IGJhbmFuYXM= cmVjdGlvbnM= IFJhbmRhbGw= TllTRQ== IGFwcmVuZA== LlJlc3BvbnNlRW50aXR5 IHRlc3REYXRh XGU= IFdL LkFkZENvbXBvbmVudA== X3J1bnM= w6dvaXM= LW1pbmk= Zm9sZGVycw== IGxvc2Vycw== IFRvd2Vycw== LUVuY29kaW5n OnI= Y2hvb3Nlcg== IGZsYXR0ZW5lZA== 0YHRgtCw0L3QvtCy CVB5 5Lic IGRhbW5lZA== RGVwdA== d2Vk IHBpc2M= Z2llcw== X2dhbWVz Lm1hc3M= KEVxdWFs IG5hdGl2ZXM= LnRodW1ibmFpbA== bHRy IGVxbA== X2luY29tZQ== CWhlYWRlcnM= LWhhaXJlZA== IG1lZGlvY3Jl IFdpdGhkcmF3 IGJpdHRl 2b4= PWlu b2NrZWQ= RnVsbHk= IFRFTVBMQVRF w7pkZQ== T2Rk aWxsZXo= VGVsZXBob25l IAoJCQo= KCInIg== X3NjaGVk ZXJuZQ== wr4= LnBpY2s= IE1TSQ== CWZm RGlzY292ZXJ5 IENPRA== IExhY2s= IHNlbnNhdGlvbmFs bW90aA== IExlZ2lzbGF0aXZl 0Y0= IHZpYWJpbGl0eQ== IGdldEVtYWls IHVuYW5pbW91cw== IHBlbGxldA== ICIoKQ== Y29hdA== YWdvb24= IEFMV0FZUw== XHVD X3N0ZG91dA== QW5keQ== IG5ld0xpc3Q= IE1haGFyYXNodHJh LF9f PXVzZXJuYW1l IHNjcmlwdGluZw== IFRtaW4= PEFjdGlvbg== PXt9LA== c3ltYm9scw== IGZlbmNpbmc= IHbDrWRlb3M= IE1hdXJpY2U= Y29ybGli IGtlbQ== In0pLAo= IENsYXNzaWNhbA== Y29sbGVnZQ== IEhvbWVwYWdl IH19Cgo= X01zcA== IENvbXBsYWludA== IHNhbmR5 QXNpYW4= X3NlcmlhbGl6ZXI= IExhaA== IGJ1ZHM= b2xvZ25l IHJlc3BvbnNlRGF0YQ== b3BoaWxl a2F0ZWdvcmk= RW5kZWQ= bGVjdGlj IGNsYXdz Li4uJyk7Cg== IHBsYW5uZXJz IFphaw== IEdsb3Zlcw== Iil9 IGZhc2hpb25lZA== YnJvbg== IG5ld2NvbWVycw== dmFuYQ== IHBpZXJ3cw== UmVjZWlwdA== LWVudg== IHJ1dGE= IEZhcm1lcg== b2RvcmU= bXVp IHJvbWFudA== IGluZmxpY3Q= IHNlbWluYXJz PWN2 KHN0b2Nr IGV4dHJhY3Rvcg== IFRpZmZhbnk= X3V2 LmNvbnRhY3Rz JyksKCc= IHNvbHZlcw== LkNvbm5lY3Rpb25TdHJpbmc= L2RlYnVn IEF2ZXJ5 44Oj IG1heFg= U3Bhcms= PHRoaXM= IGhpa2Vz S2V5VmFsdWVQYWly IFF1aWV0 c3RhYg== IEtvbW1lbnQ= bHljZXI= IE1TTQ== IExhbnRlcm4= IGNvbmp1bnRv aHNp TVVMVA== V2l0aER1cmF0aW9u YXR0YWNoZWQ= IEFzdGVy CXBvaW50cw== IFNpYmVy IE1ldGhvZGlzdA== L3NpdGVz IGZvcnR1bmVz UGFydGljaXBhbnQ= IGN1c3RvbWVySWQ= KWluaXQ= X3NlcnZlcnM= IHdlYXZl IFRSQUlO IGhhcmFzc2Vk 7J6R YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo= X2Zhcg== QWxjaGVteQ== LmxpbmVXaWR0aA== IHRoZXJhcGlzdHM= IExvYg== ZXF1aXBtZW50 IHJlY2h0 Lm1pcG1hcA== Lm5pY2tuYW1l IHVudG91Y2hlZA== QUdPTg== IFNhdWw= IHdvcmtzaGVldHM= IFZldGVyYW4= b3VkZW4= YWNsYXNz X2FzbQ== IHRlbXBs IEV4cGVuc2U= ZWlnaHQ= I1NCQVRDSA== em9uZXM= LnBhcnRz YXRyaWNl bGF3cw== dG9CZURlZmluZWQ= RWZmZWN0aXZl IFBpZWNlcw== YXJ0aQ== IGluaGliaXRvcnM= CXBhcmFtZXRlcnM= IHRlbGVncmFt Ym91cmc= X25vdGlmaWNhdGlvbnM= IHBvc2l0aW9uYWw= LWRlYWxz IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IHNoYWRlcnM= XT0k IGRlY28= ZXR5cGVz Y2xhcmU= IEdTTQ== LnV0aWxpdHk= VG9TdHI= YWZlbg== IFht X3BhcnRpY2xlcw== IGZsdWZmeQ== TWFya2V0aW5n IHN0YW5kaW5ncw== PwoKCgoKCg== VU1BTg== X1BBWU1FTlQ= CVRpbWU= cmF3bg== b3Jybw== IGVlcnN0ZQ== IHBhZ2VOdW0= IENPUA== IHBsYWdpYXI= VXBsb2FkZXI= JHNlbGY= bGF0ZXI= ZXJpYWxpemVk IGFsaWduU2VsZg== IOKZpQ== LmFycmF5Y29weQ== IG5vc290cm9z CWdwaW8= IHBsb3R0ZWQ= aXRlcmF0aW9ucw== IFJlbGF4 Y2lwaGVy R2lmdA== IEJldHQ= IFhS IHN0cmlwZWQ= KGVudmlyb25tZW50 ZWdlcnM= X1JFU0VSVkVE IGvDtm5udGU= IGluZmVycmVk UGRm c29ycnk= cGFyYXRl LkNvbmNhdA== IGxpcGlk LkJP IG9ybQ== IENvbnNvcnQ= IG92ZXJzZWVpbmc= IGFtYmVy IHBsZXRob3Jh CUFjdGlvbg== cXVlcnF1ZQ== IGh1aXM= ID1b IHByb2dyZXNzZXM= anVkdWw= IGNvbnZlcnRpYmxl LmVtYmVkZGluZw== IHs/Pgo= IHJlZHV4 W2xhYmVs OiIpOw0K Lm9ubGluZQ== cXVhcnRlcmVk IHNjaG9vbGluZw== ICJcIiI= W2xpc3Q= QWxhbg== J30KCg== eXBzdW0= IHN0cml2aW5n IFJlc3BvbnNpYmxl IO2MjOydvA== LkludFB0cg== cmlrZXM= ZW52aWxsZQ== LnNldExheW91dE1hbmFnZXI= IFBhc3Nlbmdlcg== IGRpc29i IGZlcm1lbnQ= LlBpeGVs Pign IGNvbnRlbmRlcnM= LWJldGE= IGFmZmlybWF0aXZl 0L3QvtGB0YLQuA== aWHDp8Ojbw== UmVjb21tZW5k aW1pdGVycw== X3lsaW0= IHN1YnNpZHk= IGVyYg== RmlsZVNpemU= KHNy IHBvb3Jlc3Q= IHZvaQ== U2lk IHNsaXBz X21pbnV0ZXM= IHVn xqFu IG5hdMO8cmxpY2g= 44Oe YmVhcg== fV8kew== IGZpc3Nl IGRpc2NyaW1pbmF0b3J5 CQkgIAo= IENvaWw= X2lmYWNl LnZlcg== IG1pbmVk IGFzc2Fzc2lu IHVuc2V0dA== LnJlcXVlc3Rz LlVT aW1hZ2VVcmw= IHN0cmF0ZWdpY2FsbHk= LWJhbmQ= IHRyb3VzZXJz WEQ= ey8= bGVjdGlvbnM= YCgp IlA= IHNrZXRjaGVz Y2xpZW50SWQ= IFNyYw== b3BlbmluZw== UHV0aW4= IFBvZXRyeQ== IFBST00= SUxMSVNFQ09ORFM= IGJvb21pbmc= U2ltaWxhcmx5 Omxhc3Q= Lndvcmtlcg== LmdldElE LlNQ c2VydmVycw== b2N1bGFy IHNwaW5hY2g= SVNL w7A= J10pWw== IGNoaWVmcw== IGdyb8OfZW4= cmlldmluZw== LmFzaw== LXN1cg== VlY= Lz4iOwo= KHJlbW92ZQ== IEtM IEhhbGV5 QFJlc3BvbnNlQm9keQ== LSY= U3dhZ2dlcg== IHpuYWo= Lm9uRXJyb3I= cmVnbw== ZWxpeA== IEFWQUlMQUJMRQ== IHNlcGVydGk= aWFw X21pc3M= IHN1cmdlcmllcw== IGltcGFydGlhbA== IENvdA== YWt0aW9u IHdoaXRlbGlzdA== INCw0LI= X21peA== IEJlZHJvb21z IHByaW1laXJh IHNpZ25pZmljYQ== L2J5 IHN0YXJ0bGluZw== IFNQRQ== dWNjacOzbg== TnVtZXI= SUJN LmZyYWdtZW50cw== UmVudA== IHLDs3duaWXFvA== LkFVVE8= LkZvckVhY2g= IFpodQ== IEN1bm5pbmc= IFdhcm4= IEJI X0RPV05MT0FE QnlLZXk= KeKAlA== IGNvbW1hbmRl X0FOUw== Q2hyb24= RklU X2F0b21z X1NLSVA= IHZhcA== KEJveA== IGxkYXA= dW5wcm9jZXNzYWJsZQ== SVRJT05T w6lyw6k= LG1zZw== IG91dHNldA== IGRyaWxsZWQ= IGTDqXZlbG9wcA== IENvYXQ= IEJlbmdoYXpp SG9va3M= IE1pc3NpbGU= X1Jlc2V0 Pi88 ICItIgo= KCk9PnsK IEhvY2g= LmF3YWl0 QWRyZXNzZQ== IGRpZ2l0YWxseQ== IlRoZXNl b3BsZXZlbA== IGFzeW5jaHJvbm91c2x5 IER1Y2tz UkVTUA== SVJP LmZpeA== IFJhZGFy dmVydGlzZQ== w61zZXM= SXRlcmF0aW9ucw== bW91c2V1cA== bWludA== RklSU1Q= IHBheXBhbA== X3VwZ3JhZGU= V3JhcHBlZA== Ow0NDQo= K3M= IGNhdGNoZXI= Lk9w X05PVElDRQ== cGFyYWxsZWxlZA== Q1ZF Zm9yZ290 IHBhbm9y IG9mZnJl IGVub3JtZQ== KCkNCg0KDQo= YWRpYXRvcg== YWRkQWxs W3RleHQ= KHV0aWw= LlByb21pc2U= YW5pc20= X29mZmVy RU5ESUY= ZG90cw== IEtybw== IHNwZWxsZWQ= IGFwcE5hbWU= QWN0aXZpdGllcw== IFNwaWNl ZWF0ZWQ= IHNrYg== IGvDtno= IHRvcmNodmlzaW9u Q2l2aWw= IGhvcw== X0hlbHBlcg== acSH X3Vuc2lnbmVk 6K66 4oCcQW5k CWtmcmVl LnJhaXNl IGNhbGxl IExhbnM= IGFudGln XCI+IjsK YnJhbmNoZXM= bG9ncmFkb3Vybw== IHN0YWxsZWQ= YWx5emVk RGVyaXZlZA== Om5vdA== IGdpYmk= IFR1cm5idWxs LnVzZXJEYXRh KFRhYmxl IERlcml2ZWQ= CWNvbmY= IGFsZ2Fl IGthZmth IG5ha25l IEhlYXRpbmc= IFRpcmU= YWR1bHQ= IERhdGVGb3JtYXQ= b3Bj ZW5zYWdlbQ== LlRvb2xz Lk1peGVkUmVhbGl0eQ== cmFp IFdvbmRlcmZ1bA== KV0pCgo= aWFyZA== VGhlbWVQcm92aWRlcg== IGV2ZW50RGF0YQ== I2Fk LmdldFVybA== IHRvb2xib3g= IG92ZXJyaWRpbmc= Q09OVEVOVA== LXByb2R1Y3Rz d2lsZA== X2V4cGFuZA== aW5haXJl QnJ1 b2xscw== INGN0YLQvg== Y3Rlc3Q= IHB1bmNoaW5n RFJW X3NwYWNlcw== IFN1cGVyaW50ZW5kZW50 IGxheXVp KGZlZWQ= dG9k IHZo IGluc3VsdHM= IFN1Yw== aWtz VG9ycmVudA== Lmty X2FjdGl2YXRl k5g= amVl aW1lcnM= cnVpdHM= IHByZWNpbmN0 LlJlcXVpcmVk IHNhdGlzZmllcw== IGNoZWVyaW5n IGFycml2 CXJlYw== IENvYmI= IGNvbmN1c3Npb24= dWpldA== Tm90Rm91bmRFcnJvcg== SmVhbg== IHBob3Rvbg== Pl8= IEJhcmNs YW1k ICV9Cg== PVwiIw== SW50ZXJu IENvbW1pdHRlZXM= LmJlbA== bnVtbWVy IGxldml0cmE= X3ZlcmJvc2U= KGNvZGVj IFN0aXRjaA== PSIiOw0K IHJlZ3JldHM= IG11bHRpbmF0aW9uYWw= IHJlc3RydWN0dXJpbmc= IE1FTg== eW5jaHJvbml6YXRpb24= IG1lZGlhdG9y a2ly UHJpbmNl IGluaGliaXQ= IGdvc3Q= IE1NQw== IHNpZGVk X2Rhcms= KGJsb2I= PkxvcmVt PiIpOwoK c2Nhbm5lcg== OmlubGluZQ== LmNhcm91c2Vs b3RpZGU= IFdXVw== IGRydW1tZXI= LmZhbWlseQ== IG9yZGluYWw= 5b2T5YmN IGRpcGxvbWF0 IHN1cHBsZW1lbnRhbA== IGRhZsO8cg== IEZBVA== IFlvbmc= aGFwdXM= IEp1bmN0aW9u emw= LlVzZUZvbnQ= IGhhc2hNYXA= LVJl ICIqKg== LnNldEJhY2tncm91bmRSZXNvdXJjZQ== IGltcGVyZmVjdA== LkZpbmRFbGVtZW50 IExMUA== IG11cmRlcmVy IHRleHRl aXPDqQ== YWN0aWNz VG95 R3JhbnQ= X2Rpc2Nvbm5lY3Q= IGJyYXNpbGU= IGVtZXJnZW5jaWVz X2x2bA== IEAiXA== fSovCgo= X1NPQw== Tk9STUFM L2dhbGxlcnk= YXNpY3M= RXZlbnR1YWxseQ== IGdyYXA= IGNyaXN0 IHByb2plY3Rvcg== IGdlb21ldA== IGRldGVjdG9ycw== IGNyaXRpY2l6aW5n IGNoaWNrcw== IEhpag== L2ZyYW1l LW1vbmV5 ImRlc2NyaXB0aW9u IHRleHRpbmc= IHNleGlzbQ== IE1WQw== LWdlbmVyYWw= IG92ZXJ0dXJuZWQ= IG1vdmVy IFBocmFzZQ== IFVOVVNFRA== IEVudHJlcHJlbmV1cg== VEVHUg== ZWxsaXBzZQ== TWFya2Rvd24= X18oKg== IEthcmRhc2hpYW4= cHBlbGlu IEdvdHQ= IGR5c3Q= IFJlZHV4 SG9sYQ== PyEKCg== IFJlYWx0eQ== U3VydmV5 IE1jR3JlZ29y X2hhbmRsZXM= IGludHJpZ3VlZA== IGdldFVybA== IGRldmlzZWQ= IFBheXBhbA== IHRoaW5rZXJz IFN0YXR1c0Jhcg== IEVsaWc= IGNvbXBsZXhlcw== INC60L7QtA== c3RvY2tz LWluaXRpYWxpemVk IHNjYW5kYWxz IGNvbWZvcnRpbmc= IFJvY2tz IGxpb25z bG9jYXRvcg== IV0= IFBvbnk= RGF0dW0= IEZldA== IG9mZnNldFk= IFJFVFVSTlM= IGJyZWFjaGVz VGltZUludGVydmFs IHZpZWxlbg== VmVyc2U= IGthZA== IGdhYXQ= KCItIiw= IG1vdXNlWQ== KFBvc3Q= IFVo ZWxpZ2libGU= YWx0YQ== IHV0aWxpc2U= ZmFjdHM= SElQ IG9yY2hlc3RyYQ== IFNwYWNlcw== aXNwaWVs IG11bHRpcGFydA== LW9wYWNpdHk= U2VhcmNoaW5n IFBsYXRv VmlzaW9u IGx1bA== IEFwcHJlbnQ= 57uc W3JhbmQ= LWRpc2FibGVk IEZsZXRjaGVy IHRyYW5zcG9ydHM= JmU= dHBhcmFt cG9sZQ== IEJ1ZW5vcw== w7pibGljYQ== aW50ZXJhY3Rpb24= IGhvYg== IGluZmxpY3RlZA== bGl0ZQ== IFBBUkFNRVRFUlM= IFN0YW0= KG14 IEF1dG9NYXBwZXI= aWxpYW4= IHF1aXR0aW5n PXt9 IEpvbmFz IGxvY2FsaXR5 IFNpbGVuY2U= X2ZsdXR0ZXI= IG5icg== bGl0ZXI= IE5vcm1hbGl6ZQ== IGFjdW0= QnJhaW5z ZXF1aXA= XT09Ig== IGRlc3Rpbm8= IERpb3M= Lk11bHRpbGluZQ== YWdyZWU= KQoKCgoKCgoK IHN0ZWxsZW4= IGN1cmx5 Lk9mZmljZQ== LWFib3V0 ICcuLy4uLy4uLw== IFVUSUw= IFJw 4oC6 IG1hcGE= LkRP YWdhbA== LndpbmRvd3M= IGFkdmVyc2VseQ== Llh0cmFMYXlvdXQ= bWVkaWNhbA== IHVuc3Vy dGhlcm1hbA== Lk1vZGVsQWRtaW4= LmFjdHVhbA== c2V0Q29udGVudA== IHBvc3RmaXg= UFc= IENoYWlycw== IGdyYW1t IGNvbXBsaWM= RElTUExBWQ== IE1vb3Nl aGFhcg== QUxFUw== IGxkYQ== LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCg== ICcvJwo= QVNO IEJhcmJlcg== IG1haW5z IG1haW5XaW5kb3c= 0LDQt9Cy0LDQvdC40LU= IGVtYW4= X2NvbGxlY3Q= IHJlbXBs LnRheA== YmFo IFBzeWNoaWF0cnk= RGVzY3JpcHRpb25z IGV4ZWN1dGlvbnM= CUxPR0dFUg== JkU= OmJn IGtk LmRhbWFnZQ== IG5pc2k= 5qy+ IENhbWVs aW5pZGFk IExpZmVzdHlsZQ== IFRISVJE IOCkuA== IHBvbHlnb25z IGF0dGlyZQ== YWxlbnQ= X1VTQVJU IG1hbGFyaWE= bG9icw== IF19Cg== KHJlZ2lzdGVy LXBz X29wdGltaXplcg== KEFMT0FE IHZhcGU= LnNvY2s= kOiXjw== JHByb2R1Y3Q= KEVSUg== Y2twdA== YnVxdWVycXVl IH19Ij57ew== IEhpdmU= IE1hc2g= IEVwaWQ= IEx1bmQ= X3RyYW5zYWN0aW9ucw== IHN1YmNsYXNzZXM= RWFzZQ== X0Nsb3Nl X2NoZWNrb3V0 IicsCg== U2VjdG9y b2lzZQ== LXRlbXA= KSIp aHlwZXI= ZXJjdWw= c3RhY2twYXRo X05S SUxMRQ== IHJlbGFjacOzbg== IE1hdHRo X0NPREVD IGhhbmRsZUVycm9y X09uZQ== YWxib3Jn CQkgICAgICAgICA= IFVwbG9hZGVk Tm0= Ly89 KlM= X0VYUEVDVA== IGZyYWN0aW9uYWw= Q291 IHNjYWxhYmxl IENJRA== PFBvc3Q= CXRocmVhZA== aGFyZHdhcmU= LmNoYW5nZWQ= LkVsZW1lbnRBdA== IGFydGljdWxhdGU= ZWRvcmVz RXN0YWJsaXNo PXtbCg== ISo= IFNK TWV0ZXI= LnJlcA== IFZPTA== IE91 bMOp IHBuZXVtb25pYQ== X3BpY2tlcg== ZXhwbG8= IOyekQ== IFN3aW0= ZHJlc3M= c3Rvcmllcw== L25hdg== VmE= INit L3NlbGY= IHZldGVyaW5hcnk= KERlbnNl CWJvb3N0 IElzTm90 IHRydXN0aW5n IExlYmFuZXNl JHJlcXVlc3Q= eGZmZmZmZg== X3JlbW92ZWQ= IHVwZGF0ZXI= 2KfY RE9XTkxPQUQ= IEltbWVkaWF0ZWx5 IHJvYW1pbmc= IEhvcm55 LmNvZGlnbw== IEZpZ3VyZXM= IHBhbnRyeQ== KHNhbXBsZXM= IEJFTA== IHNldENvbnRlbnQ= dW1vcg== 5pSv5LuY X01JTlVT IHVubGVhc2hlZA== IHByb2ZpY2llbnQ= CVVJ LkV4Y2VwdGlvbnM= IHNyYW5k UHJlc3N1cmU= LmFzc2VydE5vdA== KHNlcmlhbGl6ZXI= CXR4dA== UG9ydHM= IG5lY2VzYXJpbw== IHJldml2ZWQ= IG1pbGVzdG9uZXM= Y2Fubw== RXNjb3J0 IGVudGVuZA== QVBF aXBj LmF0b21pYw== IFBlbWI= IHJlYWNoYWJsZQ== IGthbnM= d2hhdGV2ZXI= TGlzdEJveA== IENseQ== cGljdHVyZWQ= IEVsZWN0cm8= YWJpYw== IGZ1bms= IGRpYXJyaGVh IOeZ IFNvbHZlcg== IEJhYw== IHNrZWxldGFs IO+C IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== ICIpWw== IFRyYWl0 dWRva3U= LS0tLS0tLS0tLQoK QW5nZWw= YWdy IHNpbXBsZXM= IGJhbmM= IEFsZXJ0cw== IENvbmZpcm1hdGlvbg== IEFseQ== Y2FsbGJhY2tz IGZ1bmt0aW9u IGdyYWZ0 WVBE L0FGUA== V0s= a3Vy Q0tFVA== IFNsYXRl IFN0ZWY= CVJ1bnRpbWU= IEVTTA== IHByZWFjaGluZw== QnJvYWQ= IHNldERlc2NyaXB0aW9u YXplbA== PQoK IGphY2twb3Q= IC8vIQo= dmlhcg== IGVpZA== IGF0aXY= IHJlZmxleGl2aXR5 Lkxpc3Rlbg== IGx5cmlj IHZlcms= IGNvbGx1c2lvbg== YXphYXI= IHdpbms= IE11ZA== L29wZXJhdG9y IGV4dGVybmFsbHk= IGJhcnU= IGJhc2tldHM= dGlja2Vy KHBob3Rv X2V2ZW4= IHNwb25nZQ== IGhlaWdodEZvcg== Z2V0Q2hpbGQ= X2Zvcm1hdHM= LkV4ZWN1dGlvbg== X1Byb3BlcnR5 cmVwb3M= dGhlaWQ= X1BIWVM= IGV2aWRlbmNlZA== LmhlYWRpbmc= QW5ndWxhcg== IFZlbnVl IEhPVVNF IEVzdG9uaWE= 0LzQsA== cmdhbml6YXRpb24= L2RldmljZQ== SVJS X3RoZW4= YXJlbQ== IGFnZ2k= RU1PTg== INGB0Lo= IEVwaA== IE1TUA== IGxvZ2ZpbGU= LWxlYWRpbmc= YXRoYW0= IHVubWF0Y2hlZA== IFNpdHVhdGlvbg== KCl7fQo= CWNoYW5nZQ== IENoYXB0ZXJz LlJFU1VMVA== IG9l RVRZ X3ZpZA== Li4uJyw= IGFsdGVybmF0aXZlbHk= X1dT IFBsZW50eQ== IENyYXRl YXNpb25hbGx5 IExhd24= IElNTQ== IFZhbml0eQ== IFZvb3I= 5ZCv IG1pag== c3RlcnJlaWNo IFJERg== IENyaXRlcmlvbg== Lkludg== LlN0ZXA= X0ZyYW1l IEVOVU0= 774= SG9wZWZ1bGx5 TmF2Q29udHJvbGxlcg== IOy2lOqwgA== IFZhZGVy IHJ1dGhsZXNz JGtleQ== Y2t0 aW5lbQ== aWxlbnQ= IHJlc3BlY3Rpbmc= bGNk KGJ0 IEVsbGlvdA== IFVuaWRvcw== KENoYW5uZWw= IGVpdXM= IGFzdHJvbmF1dHM= IEhvc3Rpbmc= IGNhc3Rl IGhhcm1lZA== b3VwbGVz PFJvbGU= LkRlc2M= LWNvdXJzZQ== IENhcnRvb24= aWxlZ2Vk IG15c3RpY2Fs IOex KGZpZWxkTmFtZQ== V0lUSE9VVA== LHN1bQ== J2FjYw== CXJvd3M= IGdldFBhc3N3b3Jk IGNvY2tz cGl2b3Q= bmFtZW9m IGZlYXNpYmlsaXR5 IGNvbW1lbmNlbWVudA== IERvbWU= LkpTT05FeGNlcHRpb24= IEh5ZGVyYWJhZA== IExpc3RlZA== IENvbXB1dGVycw== W3ZhbA== IGlzb3Q= CXdpbg== IG5laA== KElOVA== UmVwdWJsaWNhbg== INC/0YDQvtCy0LXRgA== RmF0 IGVxdWl2 IERhdHVt YXN0aQ== IHNvaWxz dXB1bmN0dXJl cHJlc3NpdmU= XykpOwo= Lldhcm4= IGhhcmI= Lm9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== IGNsb3du IE9XTg== IGV4YW1pbmF0aW9ucw== IEV4aXN0aW5n am91cmQ= IGNvbmNlc3Npb24= IEZpcmViYXNlRGF0YWJhc2U= IHVwdGFrZQ== IGVubGlzdGVk IENhcmI= IGZ1cw== IGFidXNpbmc= LnByb2R1Y3Rpb24= eW5jaA== aWx5bg== cmVmdW5k LWhhdmU= KGFyZ3VtZW50 IGZzY2FuZg== Y29uY2VwdA== X0xBTkU= IGVuZ2FnZXM= IEV4YWN0bHk= YWx0dXJh KEFkZHJlc3M= IHN5bm9ueW1vdXM= VG93bg== IFBheW5l cm9pdA== cGVyaWVuY2Vz cGFydGljbGVz X2Jk IEdyaW5kZXI= TWFuYWdlZE9iamVjdENvbnRleHQ= KGJi W3RtcA== LWNvbnM= YW9rZQ== IHN0ZXdhcmQ= IFZpZXdDaGlsZA== LmRyYXdMaW5l IFdBUk4= IHB1ZXM= bW9kYXRpb24= IHpz QWdyZWdhcg== ICIuIiw= LmNlbnRlclk= IGZsYXdsZXNz IGRldXRzY2hl IExpcXU= aXRlaXQ= X2ludHJv LXVzZWQ= LHRhcmdldA== IEhERA== ICUr b3JlbnQ= L09iamVjdA== IGRpc3J1cHRlZA== w6J0ZQ== IGFjY2Vzbw== IExvd2VzdA== IFdpbGxpYW1zb24= X2NyZWF0b3I= U2VsbA== IEJVRw== X3JlcHI= 6ICM IGFyY2hhZW9sb2dpY2Fs b21lcnM= IEVsb24= IFNjcm9sbFZpZXc= IGxpbmVzdHlsZQ== aXNSZXF1aXJlZA== aXNrbw== X3Ji ZsO8aA== ICAgCQk= KGRlZmluZQ== IFNDTQ== IERJRkY= X2Jz cGVuZGljdWxhcg== cGFjZWQ= IEpvdXJuYWxpc20= LkpTT05BcnJheQ== IERhdGFBY2Nlc3M= TWFyaWE= IELDvA== SEVMTA== IE1BVFJJWA== T0xUSVA= YXBzaWJsZQ== XToKCg== bmFpcmVz X2hpc3RvZ3JhbQ== IGZsYWly aGF2aW5n IFVzZXJJRA== IFJlbGF0aW9uc2hpcHM= UmVwbGFjZW1lbnQ= IHJzYQ== IGVucmljaGVk IHJlaGVhcnM= IHfDpHJl IGxvYWRlcnM= IEVsZW5h IFdhdGNoaW5n CWpvYg== TkVXUw== L3NldHRpbmdzZGlhbG9n aXZlYw== X0VRVUFMUw== VGVtcGxhdGVOYW1l IEJPRFk= LmFkYXB0ZXJz d29mZg== Y29tYm9Cb3g= Lk5ld1JlYWRlcg== fHJlcXVpcmVk X3Byb2JhYmlsaXR5 ICg6Og== IGNyYXo= IFVG VGVzdElk IGVzcGVjaWZpYw== aWJlbA== cGF3bg== 640= IE1hcnI= IHN0YXJ0WA== X3NpdGVz Lz4KCg== IGltcGxpY2F0ZWQ= KGlubmVy IGVmZm9ydGxlc3NseQ== wq10aW9u YXdhcmQ= IGhvdmVyaW5n cHJp JHRlbXBsYXRl dWFuZw== IGF1dG9tYXRl ICoqLwoK aWJsaQ== IG51dHJpdA== KS4o ZWVlZQ== QXBpQ29udHJvbGxlcg== L293bA== IFdvbWVucw== LWRvdWJsZQ== IE9yZGVyaW5n c3Bt TW9kZXI= Lk5hdGl2ZQ== IEJlcmdlcg== ZXNkYQ== ZXJkaW5ncw== X2VjaG8= IHN1bW1hcml6ZWQ= IGVsZXZhdGU= X3F1YWQ= IHdvbw== dWxhbnQ= UHJvcGVydHlWYWx1ZQ== IHBsaXN0 IEdSQVBI IFNUREVSUg== KScpLg== QXNzZXJ0aW9u bGlua3BsYWlu IGFjY2VsZXJhdGluZw== IHNuaXBwZXRz IFNhbG1hbg== YWJjZA== LmVjaG8= X2lkeHM= IHBjbQ== b2NhbHlwdGlj X2Nvb3JkaW5hdGU= KHByZXZpb3Vz LXNob3J0 LnN1YnRyYWN0 KEJpdA== P3Q= IE5vdGVib29r IEthdHJpbmE= aWZmZXJlbnRpYWw= c2lsZW50 dGVybWluYXRlZA== IHRhbmdlbnQ= OlQ= IGNvc8Os IHBhcmFub2lk IGRlcHJpdmF0aW9u L3t7JA== IGhlbWlzcGhlcmU= IHJlaW5zdA== ZWN6 dGVycg== IFBMQVRGT1JN IHRyb3VibGVzaG9vdGluZw== IHZhbGlkYXRpbmc= IE9yaW9u YXN1cmluZw== 0LjQvdCw IGh1YnM= YXJlbmNl IENoYWxsZW5nZXM= IHplYWw= U3Bv IFNjcmVlbnM= IG11bmRhbmU= IER1bms= ICMjIyMj IFJFRkVS b25ldA== LmNhc2U= LXBvc2l0aXZl SU5URUdFUg== Lm1ldHJvTGFiZWw= U0FO IHByb2Zlc3Npb25z IHR5cmVz UGFsaW5kcm9tZQ== IFNFQ09ORA== LkdSRUVO IFNuYXBzaG90 VUxL X2NpZA== JEk= IGN1bnQ= ZXN0cnVjdGlvbg== UHN5Y2g= IEh0dHBSZXNwb25zZU1lc3NhZ2U= ZW1iYWxp X3Jldmlld3M= U2VsZWN0YWJsZQ== X1BSRVNFTlQ= IEpzb25SZXF1ZXN0 IFRoZXRh X2ludGVycA== UmFzdGVy I2Vycm9y LG9iag== IHR3ZWV0aW5n X0dQVQ== X3RvZGF5 X3NlY3M= bmVlcw== LmdldFN5c3RlbVNlcnZpY2U= IHZub2Rl IFJlZ3VsYXRvcnk= IEZhaHJlbmhlaXQ= IHNjYWxlcg== X21hcmtldA== LmFsbG9jYXRl dGlja2V0cw== YXRhaw== IFBpa2U= IExvcg== ZGl0b3I= IGxvY2F0aW9uTWFuYWdlcg== IGluaXREYXRh IFdhcmU= IEluY2lkZW50 IGNvbW1lbnRhdG9y dWVudGVz IEluZmxhdGU= IOWG IGFjdGl2aWRhZA== IEJq RU5VTQ== IHJldXNlZA== INC80LXQvQ== IHNlc2nDs24= LicpKTsK 44GT44KT L2dl YWdhaW5zdA== LGxpbmU= KFVubWFuYWdlZFR5cGU= KT0i IHl0 dWRpYW50ZXM= cm9sbGFibGU= 5aGr X0NPTExFQ1RJT04= b2xpcw== dW1iZXJsYW5k KCIiIgo= IHppcHBlcg== DAo= L3NpZ251cA== IHN0cmFuZHM= cmF4 LmNvbnN1bWVy IHVuY2VydGFpbnRpZXM= RGVidWdFbmFibGVk IGRlZmVhdHM= IGRydg== IHJlYWxpc20= YWdyYW1z WEU= IEhhemFyZA== LW5lZWRlZA== KHRhYmxlVmlldw== LkVsZW1lbnRz IFNBUg== CWVsZW0= KHBrZw== U2ltb24= VGludENvbG9y IFBoZW4= X0VNUA== 2Iw= Pz4KCgo= X2F0dHJpYg== IGJveFNoYWRvdw== IENHQWZmaW5lVHJhbnNmb3Jt IENhbmJlcnJh IHN0YXJ0UG9z IFJhaw== CWNlcnI= IFRhbnphbmlh dW9uZw== Y2Fm LmJhc2ljQ29uZmln b2lucw== Q29udGFpbmVk PXNldA== X2dpdA== CXBhY2tldA== IGNvZg== KFRS 5qC85byP KHt9KQo= IGRpcmVjY2lvbg== IHBsYXlsaXN0cw== IGFmZmluZQ== LnNldFNlbGVjdGlvbg== IGFtbW9u IGNvbnF1ZXJlZA== IFJhbW9z IFBTUA== PXN1bQ== IGNvcnJlbGF0aW9ucw== IHJvYWRtYXA= IGV4dGluY3Q= IGFkdmlzYWJsZQ== IGJvbWJlcnM= IFVJUmVzcG9uZGVy X0JQ INCx0YPQtNC10YI= IFByZW1pZXJl IFJV dHJhc2g= KGNsanM= Z251 LlBhZ2Vz IGluc3BlY3RvcnM= TWV4aWNv IFZlcmU= UHJlYw== IFNjYWw= aXNwZXJz UnVubmFibGU= Lm9yaWc= IHNhaWxvcnM= UGFyc2luZw== IFZpc2l0b3Jz JnR5cGU= cG9wb3Zlcg== PCgpLA== IG93ZXM= IHJlYWN0cw== IERlZmluZWQ= IHJlYWxtZW50ZQ== IGRpY3RhdG9yc2hpcA== YWRtaW5pc3Ry aWRlbmQ= PUw= c3RyY2FzZWNtcA== XSU= 0L7Qs9GA0LDQvA== ZWR1bGE= LWRlc2lnbmVk Q09WRVI= X0NoYW5uZWw= IHByb2pldG8= eW1vb24= Q0hLRVJSUQ== 6YeK IHZlcmlmeWluZw== L2tleQ== LmZyb21DaGFyQ29kZQ== LkJpdA== X2J1ZGdldA== ICUi dmV5b3I= IHl1bQ== IGV4dHJlbWVz X0NSRQ== Z2V0U3RhdHVz c3Vic2VjdGlvbg== IHNvYWtlZA== IGdlbmF1 X0NIQVJBQ1RFUg== 5oyB LW9ubGluZQ== LnRvQ2hhckFycmF5 Y2VyZXI= Il0sIg== IHN0cm9sbA== IFl1YW4= IFdhbmRlcg== IHNpc3RlbQ== X3Vj KG5vbWJyZQ== Y2hhbnRtZW50 KGNsb3Nl bWV0aA== LXNlY3JldA== cHNldWRv Q291bnR5 Q09OVFJPTA== IHNvbHZlbnQ= IHNvYXJpbmc= IHNwaWVz TmF2SXRlbQ== IHJlc2VtYmxhbmNl KGJpdHM= IGNlbGx1bA== IGFzc29jaWF0aXZl Lmltd3JpdGU= LmNvb3JkaW5hdGU= XSwk KHNr Ki8p IG1vY2tz IGp1bmc= X0RPQw== LXJ1bnRpbWU= IEdpdmVz dW5q KHNlZw== KFtc IG5haA== X2V4cGVjdA== Um93SW5kZXg= KGZvcmNl IEdldFZhbHVl IHN1bW1hcmllcw== X1NIQVJF LXRyYWluZWQ= IEJsYW5j IGZpdHRpbmdz IHdhdGVyZnJvbnQ= Lk5vdGU= IFdhbmQ= b3ZlcmU= cHJlZGljdGlvbg== IGNzcg== LnRvcEFuY2hvcg== IFN0cm9rZQ== X0ZpbHRlcg== YXRoZQ== ICJcXCI= IEFGRg== PSIvIj4= LlJlcXVlc3RNZXRob2Q= kJzntKI= IHdpdG5lc3Npbmc= QXBwYXJlbnRseQ== IG1kaQ== c3RpY2tz IEFsdg== w6TDnw== X2NvbnRpbg== IGJvaWxlcnM= IE1hcnhpc3Q= SU9D bmVybw== aW5uYWNsZQ== TGl0 Y2Vj S2V5UHJlc3M= R2V0RGF0YQ== IGlzbnQ= 0YDQvtCy0LXRgA== IHFyeQ== Um9vdEVsZW1lbnQ= IE5TQ29kZXI= LmdldE51bQ== IHRocmVlc29tZQ== VXNlcw== LiJf IENvbnRpbnVvdXM= IHBvcHVsaXN0 IFBzeWNob2xvZ2ljYWw= X2N5Y2xlcw== IGlmZGVm aXBoZXJhbHM= CSAgICAgICAgICA= IGFkdmlzZXM= IENvbXBhbmlvbg== dHJpZ2h0 IGdyb3dlcnM= IFNPQ0tFVA== eW1jZQ== UlNT bWVtYmVyT2Y= VG91Y2hhYmxl X2FycmF5cw== IGp1bXBlcg== IGhlcnBlcw== IFRpdHM= IFRlbGVmb24= X1BBTkVM dWdlbg== 5YyX5Lqs LlNpdGU= X3VucmVnaXN0ZXI= X2Nocg== LnRm LWh1bWFu IGFzb2Np IHF1ZWVucw== QW50aG9ueQ== IHN0cmluZ2VudA== IG1vbGVzdA== c2V0SWNvbg== SEVFTA== SEVMUA== RERT LmNtcw== SVNUUklCVVQ= Y2llcw== LmZvckNoaWxk LmNoaw== IE90dG9tYW4= IFRQUA== IG1pbw== IEJ1Zg== Ym9h VmVyc2lvbnM= KGxvY2FsZQ== IFJhaWxyb2Fk YmNj LyoqPA== LXBhaWQ= IGNlbGVyeQ== YXRpc2NoZQ== Z2V0T3B0aW9u b3Jpb3VzbHk= IGFkYXB0ZXJz U3RvcmVz L3NhdmU= IEJhc2lz 0Y7Rgg== IExhZA== X3JlbGF0aW9uc2hpcA== IENsdWJz IOCo OiI8PA== X01JU0M= VmlzdWFsaXphdGlvbg== IG1pcnJvcmVk ZXNwZXI= U3RyTG4= IHJlc3BvbnNlT2JqZWN0 5ZCR LmVuY29kZXI= LS0tLS0tLS0tCgo= IGdyaWRWaWV3 X2luZGVudA== YW50d29ydA== IGFycml2YWxz IFNldHRsZW1lbnQ= Vmlld0luaXQ= LXZhbHVlcw== IHdhdGVyZmFsbA== IGluY2FyY2VyYXRpb24= IFRlZW5z CXNpZ24= aW1tdW5l LnNlY29uZGFyeQ== IHZpZGVvZXI= IOi+k+WFpQ== IGludGltaWRhdGlvbg== ZW5kYWxl IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IGluc2lnaHRmdWw= IHNhbmRz IHBob3RvZ3JhcGhpYw== UGFnaW5hdG9y IGRpc2NpcGxpbmVk X1RMUw== XSkpLA== cmxlbg== PGNlbnRlcg== X1BDTQ== S2VsbHk= LWJpbGxpb24= LmN4 IGpldXg= IGZpbGVMaXN0 IFFEaWFsb2c= dHJhY3RpdmU= RHQ= IGVzdHJvZ2Vu IHN0YXJjaA== X2VtaXQ= INC30LDQv9GA0L7RgQ== IFF1YXJ0 IGluYWR2ZXJ0ZW50bHk= IHRyb25n c2hpcG1lbnQ= IE5PUg== IFNjcmVlbmluZw== IERpc2Nvbm5lY3Q= bWVubw== IFdvcnN0 IE5y e2s= c3Bs X2N0cg== LnNvcnRlZA== LXBsYWNlaG9sZGVy KCk7Ig== aHVyc3Q= LWhpdA== LnNvbHZl 566X IHVuZGVhZA== IHdoaW1z IGdldERlZmF1bHQ= IE5pa2tp YXNzZW1ibGU= IHJlbG9jYXRlZA== LXJldA== SXRhbGlhbg== OlN5c3RlbQ== LnNjaGVkdWxlcg== 4oCcU28= Rm9yYmlkZGVu QVZPUg== emlhxYI= LkFkYW0= CWNhbnZhcw== IHBhcnRuZXJpbmc= IGd5bW4= IG1hbmlj RGlmZmVyZW50 IMOlcmh1cw== IGZlcnRpbGU= Y2xm LQ0K LnJldmlldw== b2RhYmxl IEJvdW5kcw== b2Jhbw== IFBhcGVyYmFjaw== IG1vZGlmaWM= Y2hlY2twb2ludA== IEFwcEJ1bmRsZQ== IHN0YWJpbGl6ZQ== IEF1ZGlvQ2xpcA== bW9udGhseQ== LmJlaA== IGZsb3I= IGJvbmRlZA== IFdvcmtvdXQ= Y29taW5ncw== IHJhYmJpdHM= IEJBTA== Q0NS X3Z1ZQ== IExldml0cmE= IGxpYmVydGluZQ== IGNoYWxsZW5nZXI= IFZhY2F0aW9u VG9G fSQv X0RyYXc= IGZlbmNlcw== IGRhdGFzb3VyY2U= IHBhcGVs c2xpY2s= X21lcw== IFVJU3Rvcnlib2FyZFNlZ3Vl KFRhZw== IOWvuQ== ICctJyk= X0NMQVNTRVM= KFJlbmRlcg== CWZ3cml0ZQ== VUVE QUVT KGpzb25QYXRo IHNsb3dz PkRlc2NyaXB0aW9u IGVucmljaG1lbnQ= IGl0ZW1wcm9w IFBvdmVydHk= IGFic29yYmluZw== IFBzeWNobw== 5rGf LC4KCg== SW52ZXJzZQ== IGFkanVk aWdpZEJvZHk= emlvbmk= ICInLiQ= 5LiN5a2Y5Zyo VGhhaQ== IHNsYWlu IGJydXRhbGx5 IFBlcnNwZWN0aXZl IFJldGlyZW1lbnQ= JHJz IHNlcnZpY2VOYW1l IOyI LXByb2Nlc3Npbmc= YnJhbmRz OmVycm9y KHByb3BlcnR5TmFtZQ== IEJvZWg= L2Nt L3JlYWQ= QU1C IHJvdGF0aW9ucw== LndvcmtzcGFjZQ== Onk= IHVwaG9s dW5reQ== IEJyYWNl L21ldGE= IEJyYXZl YWNqZQ== KFVJbnQ= IHZpZWlsbGU= cmFkaQ== X2R5bg== Tlc= bG9zZXI= ZXJ1c2Zvcm0= IEJhcnRvbg== IGZhcmVz IE11aw== 4buHdQ== IEF1ZGlvU291cmNl KChf LkJpZw== Lm9yZ2FuaXphdGlvbg== IFRyaWNr IGJsdXNo KFRZUEU= IFJlbGF0aXZlTGF5b3V0 bGVjdHJvbg== XX0i IFphcA== IFR3ZWx2ZQ== Okw= IHN0aWZmbmVzcw== X0hFTA== IHNwZXA= KGNvZGVy IHRhbWFuaG8= IGFudGlveGlkYW50 IGhvc3BpdGFsaXplZA== R1BD IHNjcnV0aW4= 4buBbg== IFNa IEp1bGl1cw== IFNhYmI= ZWxvcg== KG1j 6YeM IFBpbnM= IG1vZGVyYXRlbHk= IEvDvA== b3JnYW5pemF0aW9ucw== IFNDT1JF IHNjb3Vy IGNob3I= IFVJRWRnZUluc2V0cw== IHNrdWxsZQ== X29wZXJhbmQ= LmdzdGF0aWM= L25naW54 IGdldFdpZHRo QmF0dGVyeQ== IFNldHRlcg== bUE= KFJlc291cmNlcw== X3BsYXlsaXN0 IG1hbmdv IE9SRA== YW5raW5k ZXdheXM= Pyks IEdMVVQ= IGp1c3Rl IHBheWVy KGNhbQ== IFRlYWNo IEZsdXg= IG91dHNwb2tlbg== IFN0cmluZ1V0aWw= IFpoYW8= LkhlbHBlcg== IGVzdGlsbw== IEFudGhyb3A= IEd1YXJkcw== Vm9jw6o= Olsn CXByb2R1Y3Q= dXBkYXRlZEF0 IGluc3BpcmVz cXc= QkxFTQ== YWtpc3Rhbg== IGN6xJk= LWhlYXJ0ZWQ= IENvbXBlbnNhdGlvbg== 0LjQsw== IGNvbWE= IEZpYXQ= IHhtbGh0dHA= IHJlZmVycmFscw== IHNwZWN0YXRvcnM= IFRvcw== aXNvcw== SU1QTEVNRU5U IGVudHJlcHJlbmV1cmlhbA== IFNjb3V0cw== IEFsb25l YnJva2Vy UHJvZHVjdElk IEtvYmU= IGNoYXVk L2ZlYXR1cmVz IHJvb21tYXRl IFByb2plY3Rpb24= YXZvdXJpdGVz X0pPSU4= IEFWQw== X3BoeXM= S2V5UHJlc3NlZA== LDw= IHVucmVhY2hhYmxl IENpdGF0aW9u W2NoYW5uZWw= c3RhcnRzd2l0aA== IEphZ3VhcnM= LklzRmFsc2U= bWVtYmVyc2hpcA== QXR0ZW50aW9u IHJlbW9kZWxpbmc= IENpbmR5 IGNsaW5pY2FsbHk= IG1pbGxlbm5pYWxz IM60 IHJmbA== ZW5ldA== IG9icmln IHZvbHVudGVlcmluZw== Q3JlZGl0cw== CWFy IHJlc2lzdGluZw== IFByb2R1a3Q= PT09Ig== IGNvbmVjdA== IHJpag== INeU IHB1YmxpY0tleQ== IG95 IEJ1dHQ= X21pc2M= IEJlc3Rl IFBMQw== IOafpQ== IEJveEZpdA== IiIu VGVzdEZpeHR1cmU= IGNoYXR0ZXI= IGRvb3J3YXk= eXNpemU= INGH0YI= SUNUVVJF PScuLi8= c2hvd24= X3dlYXRoZXI= IExvZ01hbmFnZXI= XX0iCg== IGNvbG91cmZ1bA== IHJ1bW9yZWQ= IGzDpQ== IHByb2Jz CWJ1aWxk IOWmgg== LnJldg== IGludGVyY2VwdGVk R2F5 TGlzdENvbXBvbmVudA== IHBpw6g= IkF0 IGFnYXI= IEd1bmQ= X0FFUw== 7IM= jpjsnbQ= IGF1dGhvcmlzZWQ= IENoYWxs X2xvZ291dA== Y3Jvbg== YXRlZ2llcw== cGVyc2lzdGVudA== IEFuZEFsc28= dXN6 X3Jlc3RhcnQ= IGRlY2lk emY= IHBhZ2luYXRvcg== b2xsZXI= IEhH T3BhcXVl c2VhdQ== IE9NSVQ= IFRoaWNrbmVzcw== IEFpcndheXM= X2RlbQ== eXRpYw== IHByb3Rlc3RlZA== IHVwcmlzaW5n IHN1aW5n IFNoZWxieQ== LmVuZXJneQ== IGFsbGVsZQ== LWJpZw== U3RyaW5nQnVpbGRlcg== IHNpZGVsaW5lcw== IFRV X2Fp LkhPUklaT05UQUw= IHJhZ2luZw== LnRvTG9jYWxl Lm11c3Q= eEZGRg== Lm5paA== ICd7fSc= 2YjYrw== IHB1bG1vbmFyeQ== IOWPkQ== IG7Dum1lcm9z IE5hcG9sZW9u X01ldGhvZEluZm8= bGFzdGluZw== IGV4cG9zdXJlcw== IGVtYmFyaw== X3VkcA== S2lkcw== X0NPTk5FQ1RFRA== IHdlZWRz UE9PTA== IGtyaWo= IG51aXM= Sk5JRVhQT1JU YWFhYWFhYWE= IO2P 5Lu9 IHJlcGxlbg== IFRyaWFscw== d2FzaA== cnV0 LWJlZm9yZQ== X0FUVEFDSE1FTlQ= VU5U XFZhbGlkYXRpb24= VG9u IGhlYWRpbmdz UHJvYmFibHk= IGZhYnJpY2F0ZWQ= U29ja2V0QWRkcmVzcw== IGxldHRyZQ== KSI+ IHZhY2NpbmF0ZWQ= Omh0dHA= IGNvbmRvbA== c2hlZA== IFNwaWVsZQ== 44OU RGVwbG95 LkNvbnRyYWN0 LWJv Iy8= IGludGVyY2VwdGlvbg== IGlzYm4= IG1hbm5lcnM= L2Fj CUNoZWNr X2Zn IGVuZFBvaW50 X3dlYXBvbg== IHVuaW50ZW50aW9u IHF1aXRz X01JQw== YXBpcm8= IGJhbGxvb25z IGdyYWRz bWFycmllZA== IDwqPg== IGRpc3RvcnQ= X01FU1NBR0VT IFBTQQ== X1BE YWxzZXg= IERpYWxvZ3Vl IHJlZ2lzdHJhdGlvbnM= IE9yaWdpbnM= IGZsYW5r PzsKCg== OwoKCgoK XS0k IERlc3M= LlN0YXR1c0JhZFJlcXVlc3Q= IGluaGFiaXRlZA== IGdpbHQ= IFNURENBTEw= LnRoZXRh JCQkJA== aWNsYXNz QXBhcnQ= Lmxpc3RCb3g= IEJlbGFydXM= IGRlbmVu IFN1c3NleA== CWRlbA== X0VD bmVhcmVzdA== XE9yZGVy UGFja2FnZXM= Zm9ybWVybHk= Ke+8jA== 6LSj U2V4eQ== IGhvcnJvcnM= Uk9BRENBU1Q= QXBwcm94 RGVzaw== QU1FRA== Lk5vcm1hbGl6ZQ== X3B1Ymxpc2hlZA== IERlYm9yYWg= 56eR IHBvdW5kaW5n IEVzcGVy IERhbmNpbmc= IExPT1A= IFJveWFscw== IGluc3VyZQ== IEludmVzdG9ycw== IHRoZW9sb2dpY2Fs QXBwb2ludG1lbnQ= IGNhdGVnb3JpY2Fs IGNyYW4= VmFsaWRpdHk= IHJlc3BvbmRlcnM= ICgpDQo= ZXBhZA== QklUUw== IExhbWJlcnQ= c3VtbQ== YWNpZGFk IGxvZ2dlZElu PVc= LkxvY2FsaXphdGlvbg== cmlkbw== JyIpCg== IFdlYlZpZXc= bG90aA== IHRlYXNlcg== IENhbmQ= IGVwaWxlcHN5 SW5jcmVhc2U= aXZpdHlNYW5hZ2Vy ZW50cmFudA== VGVsZWZvbm8= LmN1cnJlbnRTdGF0ZQ== IE5vZWw= ICAgICAgICAgICAgCQk= IGV4aGF1c3Rpb24= ZWxpYW4= IGNvdmV0ZWQ= LXByb2R1Y3Rpb24= KHN0ZGlu IHByZWZlcmFibGU= IG9mZmVuZGluZw== KGNvbW1pdA== CWFs IHJlbG9jYXRl IGFub21hbA== IERpc2Vhc2Vz IEZvcmc= IFdJRkk= IEtpbGxpbmc= cXY= IGZtYXA= IGxsZXZhcg== dGl0cmU= LmVtcA== LCRf YXZy Q2FuQmU= X21h IEhhd2tpbnM= X1JPVVQ= IGxvYWRJbWFnZQ== IFdhaA== IERlbXM= IGluZGVudGF0aW9u cHJlY2F0aW9u IOaWh+S7tg== IEJ1ZGFwZXN0 IHV0Yw== KGhvdXJz IHRyYW5ueQ== QW5z ennEhw== LnZlaGljbGU= Q29pbnM= IEJyYXVu CVJlc3BvbnNl IHZyaWo= IHN0cmFuZ2VseQ== IEZhc2M= XFNlc3Npb24= TW91c2VMaXN0ZW5lcg== IFJvbGxz 4bqnbg== LmdycGM= SW50ZWdlckZpZWxk CWFmeA== RG9ja0NvbnRyb2w= JVw= JTsi IGdpZ2c= IGJvcnJvd2Vy IGRpc3BvbmlibGVz X1JFQ1Q= IFRoaW4= IHBlYXJs eEZC IHJpcHBsZQ== IGtIeg== LmFjcXVpcmU= Ymlvcw== dGFibGVGdXR1cmU= L2FudGxy b3JhY2xl IEFSRUE= IGludGVuc2VseQ== IHByb3RvYnVm IExFTkc= IEhlYWRxdWFydGVycw== YXRoZWQ= TWluZA== aW5peg== CVBhdGg= WE1MTG9hZGVy IGFsbG9jYXRpb25z LnNsb3Q= UHJvY0FkZHJlc3M= IHJvbGVJZA== Oyc7Cg== IEJSRUFL IFBlcmZvcm1pbmc= Lk9yZGluYWxJZ25vcmVDYXNl LWds Omg= IGRvd25sb2FkYWJsZQ== IFN1YnNjcmliZXI= YW5zZQ== IGNoYXJhY3Rlcml6ZQ== IHNocnVnZ2Vk IHNjcA== IGd1c3Rh IG1ldGFsbA== IGxhYm9yYXRvcmllcw== IFhpbg== IE1vdG9yY3ljbGU= IGVnZXQ= IGZpbmFuY2Vk IE1PRElGWQ== KlI= QWk= IGV4dHJlbWlzbQ== IEhhbGlmYXg= IHZhbW9z JG51bQ== IGltcGFydA== YnJpY2s= IOexuw== IGZ1ZXJh IFJPTEU= LkNvbmN1cnJlbnQ= X09QRVJBVE9S IGN5bmljYWw= IFJlZ2luYQ== Z2V0RXJyb3I= 2KM= YnN1Yg== SmFwZ29sbHk= IGluaGliaXRvcg== SnVzdGljZQ== 44U= TmV2ZXJ0aGVsZXNz LXNlbQ== Lm9nZw== cmVxdWVudA== IG5vc3Nv SGFpcg== LkxpYnJhcnk= bWRpcg== IGhhcmk= IFRhcmE= IFBvcnRv bmV0aW5ldA== IGFsbGlhbmNlcw== ZWxsc2NoYWZ0 X1N1cmZhY2U= CVZpZXc= YXR1cmRheXM= IHBvcGNvcm4= X1BBUlNF IFJpcHBsZQ== IHBoYW50b20= IG1vbmRv LmNyZWF0ZUNsYXNz IEtvcmVhbnM= IGZhc2U= IFdvY2hlbg== IEVxdWlw LWVpZ2h0 IFN0YXRlbWVudHM= IGFkYXB0aW5n UHJlY2lv IEN1cmU= IGNhbWJpYXI= 5rCR IGhleGFkZWNpbWFs c3BpcmFjeQ== YmlsdA== IFl1Zw== IC0tLT4= IFBQQw== aXN6 YWtlRnJvbU5pYg== IERpc3A= IEF0aGxldGljcw== IG5pZ2h0Y2x1Yg== R09PRA== LnNldEdlb21ldHJ5 K1s= L3NlbmQ= IGJpbmFyaWVz IHLDoXA= OnJlcQ== LWNvbnN1bWluZw== ZXJ0aW1l VVBEQVRFRA== X251bGxhYmxl VklO dWxpYQ== Y3lhbg== IG1pc3VuZGVyc3RhbmRpbmc= b3JpY2Fs ZGVncmVlcw== TGVhZGluZw== LkFS aWNrZXN0 TnVldm8= dWZvcmlh IGdvb2RpZXM= IGZvcmVz KCk8PCI= YWRlbWlj QWN0aW9uQ3JlYXRvcnM= c2VydmVybmFtZQ== KG50 ZGJDb250ZXh0 IGFpcmJvcm5l IGV4aGliaXRpb25z Y2VsZQ== IHRlbGE= PE1vdmll KCd7fQ== RXhwbGFuYXRpb24= IGhPYmplY3Q= IGJlYXJlcg== ZW5zaWJseQ== bmlw IEplcm9tZQ== IENa IGRhdGVGb3JtYXR0ZXI= w6ljaWFs U2V0TmFtZQ== b3VjZQ== IHJlZ3Jlc3M= JkM= KCkiPg== LnNldFByZWZlcnJlZFNpemU= IE1JRA== IEFsZXNz IGhvcnNlcG93ZXI= IGF0bQ== IFBhY2thZ2luZw== IGNpcGhlcnRleHQ= UmVxdWVzdE1ldGhvZA== IGJlaWRlbg== 6KM= IFBPVw== LldyaXRlSGVhZGVy ZGlyZWN0b3I= LWJ1dA== 44Gg44GV44GE aW5jZXI= X2Ru ISEhISE= IG1hbnVmYWN0dXJlcw== LlRleHRVdGlscw== IGNvbnNjaW91c2x5 IGJvdW5jZWQ= Y3VsdHVyZQ== IFNwYXI= IFBpcGVy LnByZXNz LW93bmVy IGV2YWx1YXRvcg== IFNUUkVBTQ== LlBpY3R1cmVCb3hTaXplTW9kZQ== IHN1Z2Fycw== U2NyZWVuV2lkdGg= IG5leHRTdGF0ZQ== IGl2b3J5 IGJydW5jaA== ZGVuc2l0eQ== X09X IENvcm9uYXZpcnVz IENGUg== YmFr XENhdGVnb3J5 5pWw57uE IGludm9rZXZpcnR1YWw= fSgpCg== IHN1amV0 LW1hcmtlcg== aXNkaWdpdA== IE1vYmls IEpzb25SZXF1ZXN0QmVoYXZpb3I= X1JFTU9URQ== LmV4aXN0c1N5bmM= IHJpY2hlcw== LnByZXNlbnRlcg== IGdsQ29sb3I= IGhhbnlh IGZvcnRyZXNz IGZsYXNoZWQ= dml6 cmVxdWVudGx5 YnVhdA== JGNvbg== Pnw= LkZ1bmM= IGh1bW9yb3Vz dWVt LlpFUk8= IFNUTA== IEJ1aw== L3NhbXBsZQ== IEdyb3M= UmVjaXBlcw== IGluZmxhdGVk IHN3dW5n OkY= RmFjaW5n LlRoZW1l 0L3QuNC6 IHNwbGVuZGlk IHJlcXVlc3RJZA== LkNlbnRlclNjcmVlbg== L2F1dG9sb2Fk ZW1iZWRkZWQ= X2RlcGFydA== IFBvcnRz 4LmD 0LDQudC0 ZGlzY3Vzc2lvbg== X2NvbnN1bQ== IHNjb3V0cw== IGNvbGFib3I= LlN0YWdl Lm5hbm8= ZWxkb3Jm IGdlbWFjaHQ= ICAgICAgICAgICAgICAgICAgICAgICAgICAK IHBvbGljeW1ha2Vycw== X1BLVA== LFRo b2t5 X1VJRA== UGluZw== IG9yY2hlc3Q= IG9wdGljcw== dWhhbg== IFhPUg== IGVzcGHDsW9s IEFkaWRhcw== cm5n bWFucw== LnZzdGFjaw== IGdldGF3YXk= IGhpZXJhcmNoaWNhbA== YW5vaWE= IEJpdG1hcEZhY3Rvcnk= cmVhbG0= CWFw X2FwcHM= LWRpdmlkZXI= LmRyYXdlcg== IEhBUkQ= J107Pz4K LXBhY2tlZA== 5rK7 X1NUUlVDVFVSRQ== W1k= aVBhcmFt KGVx IGVuY29tcGFzc2Vz IFwKCg== LT5b JnV0bQ== Z3JvdXBvbg== c3RyYXRl RFk= b21vcnBoaWM= Jzpb IGdyYXZpdGF0aW9uYWw= IE1pY2hh IFRlbmNlbnQ= IGNvYWNoZWQ= 7Lac 0YPQvNC10L3Rgg== L21vYmlsZQ== TW91c2VEb3du YnVk IFlhcw== IFByb3ZpZGVycw== Tlo= CXJlcG9ydA== ZXJybXNn IGltYWdlUGF0aA== YWN0ZXJpYWw= IE1hbmdh d2lja2x1bmc= KHVzdWFyaW8= IikpOw0KDQo= LyoqKg== IG9yZ2FuaXNl SW5kZXhlZA== X1FVQUw= KFB5T2JqZWN0 IHN1cnJlbmRlcmVk UE9DSA== IE5PVEVT XFwi LWpvYg== IHNldmVudHk= IyMjIwo= IE1hbm9y IGRvd25yaWdodA== IHRpbWVmcmFtZQ== aW5zdXJhbmNl Y2hlY2tlcg== IFNFQ1JFVA== IGVjaG9lcw== IENhcm1lbg== LnNldEhvcml6b250YWxBbGlnbm1lbnQ= IGlzQ2hlY2tlZA== IFRPUg== X25u KCco RmV0Y2hSZXF1ZXN0 IFByaW50ZWQ= Rmx1aWQ= IFNUQUNL R0VT YWlnbmVk aWdvcg== LlVua25vd24= Q0JD IENhcmxzb24= LlVSSQ== IHBsaWdodA== L3N0YXJ0 IFBlcnNvbm5lbA== IFBSRUZJWA== LCoq IGxpbWl0ZQ== X2hlYXQ= Je+8jA== IERvbm5l Z2V0Tm9kZQ== IFNjaWVudG9sb2d5 IGNvbWV0 IHdlbmln QXNpZGU= IE1QRUc= Jz8= dmFyaWFibHk= LmVuZERhdGU= IHVuY29udA== IFNjb3Jlcw== IExvZ2luRm9ybQ== LmdlbmVyYXRlZA== LGNo LW1hcg== IE5lZA== IGV2ZW50SWQ= K3A= IFNJTg== L3Jlc2V0 LlJFQUNU IE1lc3Np X1JBTks= LndyaXRlRmlsZQ== IGNyaXBw ZXN0aGV0aWM= RVJTSVNU IHJlaW1idXJzZW1lbnQ= Q3VycmVudFZhbHVl IHVuaW4= RG93bkxhdGNo IHBhZGRpbmdSaWdodA== IHN0b2NrZWQ= Lycu IHJlcGF5bWVudA== dHJhaw== L2JhY2tlbmQ= INC40LfQvNC10L0= Q1NS IHByZXZlbnRpdmU= IHBhbnRhbGxh X3RyaW0= UGVkaWRv aG9zcGl0YWw= IG1hbmFnZWFibGU= cm91dGVQYXJhbXM= dGV4dHVyZXM= Li4uLi4uCgo= IHPDqWxlY3Rpb24= TmFtZVZhbHVlUGFpcg== IHBvbGx1dA== TW9kZXM= IExhdWQ= amF5 IFVycw== IHNpZ25lcg== IEpK IENoZXJva2Vl X0VYSVNUUw== IGR3YXI= ICgkKCcj IHJlZWY= Pnsk IEJheWxvcg== IE1vZGVsU3RhdGU= LV8= IFN0cnVjdHVyZXM= IHNvdXZlbnQ= U3BlY2lmeQ== KHBpcGU= IGZyYWNraW5n IEdQQQ== IGJlbGU= CQkJCQkJCSAgIA== IE1pbm9yaXR5 IHR1ZA== IG9wZW5uZXNz IElsbHVzdHJhdGVk IG94aWRhdGlvbg== IE5L CVVwZGF0ZQ== IEVNUw== IFRlZGR5 IGdlbmVyYWxz CU1hdA== IHJhZGlvcw== IEFudGlxdWU= Y29ub215 IFNxdWFkcm9u KScsJw== 5aOw IHlvdXJl IE1haW5QYWdl IGJlaGF2aW91cnM= ZW5naHQ= KEAiJUAiLA== IHRlc3RjYXNl IENvbXBpbGF0aW9u IGZsYXZvdXJz IEV4dGVuZA== aWxsYXRvcg== IGNvaA== IHNwbGluZQ== IEtH LXBheQ== IGNvbW11bmlzbQ== IEJ1c2luZXNzZXM= b2NraW5n Lk1heExlbmd0aA== YXNzYW5kcmE= cXVpcmluZw== YWRkZW4= IEplYg== X2ZhdWx0 W2ZpbGU= IHByb21pbmVuY2U= ZGlzY2lwbGluYXJ5 4oCUdGhleQ== X2V4dGVudA== IFZJQw== IGVudGFpbHM= LnBhcnRuZXI= IGhpcHBvYw== TGVhZ3Vl 55S3 d2lwZQ== LXNwaW5uZXI= IHNhbHV0ZQ== IFN1cmdpY2Fs KG91dHB1dHM= d29ya2Vk W3N0cmxlbg== YXBwb2ludGVk IEhlZw== IEFDUEk= KFte dWFsYQ== X3RvbA== IFJpdA== LlBheW1lbnQ= a293c2tp IHdhbG1hcnQ= cmVxdWlyZW1lbnRz IEZJTlNFUQ== X0JBQ0tHUk9VTkQ= IE9zYm9ybmU= KGVycm9yTWVzc2FnZQ== UmVwb3J0aW5n IGF1Y3Rpb25z IGNvbWJvcw== IE5vdGljZWQ= X29jdA== IHByaW1lcm8= dGFpcmU= X2hy INC80L7QtA== IGNvbnRyYWRpY3Rvcnk= PSJA YWNoaW5lcw== KG9wdGFyZw== IFBlbmd1aW4= IEFiYmFz IHN1YmxpbWU= IHBhZ2VhYmxl IERlZmVuc2l2ZQ== IGRpc3RpbmN0bHk= IEF1dG9tYXRpY2FsbHk= VW5kZXJzdGFuZGluZw== RXF1YWxpdHlDb21wYXJlcg== Z290YQ== ICI6Og== IHB1bHZlcg== IEJhdHRsZXM= IHVucGFyYWxsZWxlZA== VENIQQ== IGNvbnN0cnVlZA== LWFmZg== IHByZWN1cnNvcg== LWxmcw== IG1hZHVyYXM= IERhaXN5 IEFyYmVpdHM= Lk1hbmFnZW1lbnQ= CUlu IHJvYmVz IHNww6lj 4oCcKA== IG1hdGVybml0eQ== ZXh0ZW50 IFNwYWNlcg== RGlkQXBwZWFy CXVz LmdldFJlcXVlc3REaXNwYXRjaGVy KGNvbHM= IHBsdW1tZXQ= 7IU= IHsKCgoK w6lyaWNh IFNpemVz LmVudW0= LkhpZ2hsaWdodA== ICEhfTwv QVRURVJZ IFNvcm9z R0xmbG9hdA== 44KE IEplbm5pbmdz Pz8KCg== IFJvbWVv ID8+CgoK V2Vubg== IGNsaW1heA== IGNyZW0= X3RoYXQ= W+KApg== X2RvbWFpbnM= X1JFUExZ IGNvbXBsZXRh VkVTVA== X3BhcnRpY2xl IHNvcA== IGZhdGFsaXRpZXM= aW1wbGlmeQ== IFNLRg== IGluZnVzaW9u IEphdmllcg== IGJhbGxldA== IGFtaWdv LndhbnQ= IGNvbGxhZ2Vu IExhd3llcg== LlN0YXRlbWVudA== LnJ0 YmFhcg== RW5kUG9pbnQ= IEJlaw== U0hJUA== IHBhdHJpYXJjaA== IEF1bnQ= X1RN IG3DrW4= IG1hc3RlcmVk V1hZWg== IGVzcG9z PWxvZ2dpbmc= IHJpZ2h0ZW91c25lc3M= dG9ycmVudA== IGJzdA== X0NIQUlO IG91dHNraXJ0cw== KHJvdGF0aW9u ICcuJyk= aWdyYW50cw== K2xzaQ== IENDVFY= X1BIQVNF LmF6dXJl X1Byb2Nlc3M= dmFl IFRyb3BpY2Fs IEFua2FyYQ== aW1hZ2VWaWV3 X1JVTk5JTkc= ICopX18= 4bq/bg== KGNsaQ== c2NhdHRlcg== IHNjaGU= UmVnaXN0cmFy IGFpcmluZw== IHB5cGxvdA== aXNpw7Nu L2N1c3RvbWVy IHNpbXBsZW1lbnQ= IGNsYXNzeQ== IERXQw== IEJhc2hhcg== IERFVkVMTw== IFZpY2s= YXZhaWw= IEjDtg== X2V4dGVuZA== ZHJGYw== LmlzTm90Qmxhbms= IHBsYWlz fH0K IHBvcm5vZmls bGFicw== IGhhdXM= IG9yaWdpbmF0aW5n IHN1cnJvdW5kcw== IFFVQUw= bWVn L2xvZ2dlcg== W29iag== IGlycmVzcG9uc2libGU= IFB1YmxpY0tleQ== SE9ORQ== Oicv aWJveA== IEZWZWN0b3I= fHsK YXRhbG9hZGVy aGF3a3M= SERS IGVzY2FsYXRpb24= IFBvZHNEdW1teQ== ZWxpdGU= IHByZXN1cA== Q2FjaGVk Pkc= Lm9wdGltaXplcg== IFZpc2libGU= tIA= IG5lbg== IHBjcw== IElkbGU= W0FueQ== IGtleWJvYXJkcw== IENPTVBPTkVOVA== IHRpdGFuaXVt KG11dA== IExlZGdlcg== IHByb3NwZXJvdXM= ZXRyb2ZpdA== X0xM X3BhdGllbnQ= IHBkYXRh IGtvbnRha3Rl U3dpcGU= IGNoZWVyZnVs IEhvbmR1cmFz Il1bJA== IGhlbW9ycmg= IjoiKw== IGxlYXNpbmc= IGluc3RhbGxz IFBheA== IExvZ2lzdGljcw== IGtpbmV0aWM= IFBob24= X21vdmVtZW50 CWJ5dGVz IGNpbmNv IE1hZG5lc3M= Iikr IEpF X2lq U2NlbmVNYW5hZ2Vy IEJ1c3Q= cHRlc3Q= YWVh IGJlc3Nlcg== w61n 0LTQuNC9 KHRhc2tz KCIoIg== c2V0VHlwZQ== KG91dGZpbGU= CXJlc2V0 IEFSQw== IG3DunNpY2E= IFNoZWxm IG1pblk= cGNo IHdlaWJlcg== aXNzb3I= IHRyb3V2ZQ== CUJ1dHRvbg== IHJlZ2VuZXJhdGVk xaNp aW1hY2hpbmVyeQ== YmxvY2tpbmc= LmRhdGFUYWJsZXM= X2ZyYWM= IEFkdmFudGFnZQ== LnZpc2l0TWV0aG9k 6YeN5paw IGV4dHJhcG9s IHRlYXNpbmc= IEhpdGNo IEdlZWs= RVNDTw== IHdpY2g= CWF4 X2RlY29y IHNjcmVlbldpZHRo IFNvcGhpYQ== Rm9yZ290 LnVuaQ== IFZlbnR1cmU= X2NvbGxpc2lvbg== IGxhd21ha2Vy KEVkaXQ= YmxlcnM= IGdldE5leHQ= 4oCUeW91 TWVkaWFQbGF5ZXI= IEhvcmRl IENvbmdyZXNzbWFu b2JzZXJ2YXRpb25z CXByb3BlcnR5 IDwtLQ== Q3JlYXRlZEF0 dWJ5dGU= IHF1YXJhbnRpbmU= IGRpc3RyZXNzZWQ= X0FQQg== IEdvb2RtYW4= 44Kr IHJlY29tZW5k X1BSSU5URg== RE9ORQ== QmluZGFibGU= cnN0cmlw Y2VudGFqZQ== IFVuZXhwZWN0ZWQ= IFNDSE9PTA== IFByb2Zlc3Npb25hbHM= IEdQVXM= TGVzc29u RXhjbHVzaXZl IGF0cmF2 IERhbms= IExhd3llcnM= IFdhbHRvbg== Pltd IGFsb3Vk PSIuLi8uLi8uLi8= IGRlYmF0aW5n IEFWRw== X1ZPTA== L2NnaQ== LmRlZw== Omc= LkluZm9m TWVhc3VyZVNwZWM= LnNvbmc= bXRyZWU= dWxscw== Sm9yZGFu IENvdmVycw== IGF0dHJpYnV0YWJsZQ== IGplZGlz aWF0cmljcw== IHJvdHRlcmRhbQ== IG1lbGQ= IENvbnRlbnRUeXBl IG1hbnRsZQ== IGFsaWNl X2R1cGxpY2F0ZQ== L0ludGVybmFs IGZpbGVzaXpl CWZpcmU= cmVzZQ== b25kZXJl IGZhbWlsaWFyaXR5 IENyZXN0 IGthcm1h IHRvcmlubw== IG1lc2E= L3RlbXA= IGNoaXI= IE92ZXJmbG93 IHRlbmVtb3M= dW5paw== TkVYVA== QWxsZQ== IG54dA== TWFydA== IGF0bA== IHBlcmlvZG8= X3lvdQ== IH0pKS4= aW50ZXN0aW5hbA== LkFkYXB0ZXJWaWV3 IGhlc2l0YW50 IGNvbXBhcmF0aXZlbHk= LlVJbnQ= KHZpZXdNb2RlbA== IHNhbmdhdA== IFJlc3BvbnNpdmU= IFphY2s= 4oU= SkFWQQ== IEZ1bGxlcg== IOKdpA== LkNvbnN1bWVy IGFuaw== IHJlYWN0b3Jz ZnVjaw== X3JhdA== IHNlc3Npb25GYWN0b3J5 X2JhY2t3YXJk IHNjcmFtYmxlZA== CXRo IGluc2Vuc2l0aXZl IGNoYW1wcw== IG5naW54 IGNvbmhlYw== IEphc3Blcg== LmZt U3RyaWN0RXF1YWw= YWNoc2Vu LU5vdg== bGFzc2Vu LmludGVncmF0aW9u KGxibA== Q29tcG9zZQ== IEZvbg== w5o= R3JhdGlz IExpbWU= IEFkYXB0ZXJWaWV3 IHBvaXNvbmVk YW5jaG9ycw== 6K6+6K6h J10/PiI= IHByb2N1cg== SXRhbHk= Lk1PTlRI IExVQQ== IExpdGh1YW5pYQ== IEhlYWRz X0NIVU5L IFBVU0g= QXNwZWN0UmF0aW8= IHdlZw== IHZpZHM= IFdlaW4= CUlOVA== c2Vzc2lvbklk SW5kdXN0cnk= IGRlbm91bmNlZA== SktMTQ== IFZhbmVzc2E= LklkZW50aWZpZXI= cHJvcHJp INC40LM= IHTDqWNu IG1vc2FpYw== U3RyZWFtUmVhZGVy LVRo Zm9ydGg= IGFkaGVyZW5jZQ== YmF0ZQ== IGtuaWdodHM= c291bmRz IHNhbGxl T01FVA== 44K544OI LXRt IFJoZQ== LkZpbGVPdXRwdXRTdHJlYW0= 5YiG57G7 IEVORw== aG9saWRheQ== IENvbmdyYXR1bGF0aW9ucw== KSgK IGFnZ3JlZ2F0ZXM= SE9PSw== ZXdpcmU= U2VuYXRvcg== IGVtYmVkZGluZ3M= ZXB5 KENPTQ== IHJvYmJlcg== w6R0ZXI= d2FuZw== X3RlYWNoZXI= IHJlc2VudG1lbnQ= IGxldHR1Y2U= ZXJyZXVy KGlj IFRhY3RpY2Fs IENvbnRyYWN0cw== IG3Dpm5k IHNpdGlvcw== IGJhc3RhbnRl IG51ZXZvcw== CU5kckZj IHByaXZhdGVLZXk= dWNjaA== TU1kZA== IOi+k+WHug== dW1iYQ== QGZvcmVhY2g= OiIpOwoK IHNsaXBwZXJ5 IEtleXN0b25l IHBpb25lZXJpbmc= X3RyaWFuZ2xl KCIK CQkJCQkJCQkgIA== IEludGVydmVudGlvbg== U0NJ IGNKU09O IHRlcm1pbmF0aW5n 67mE IGJhYnlz U3Vic2V0 IOuh IHNldWxlbWVudA== IG11ZXN0cmE= RW50cmU= 5Lul5LiK bmdv ImJ5dGVz UVJTVA== IHlwb3M= cGVyc29uYQ== IERlcGxveQ== Y2Vl IOCu LmdvYWw= IGhhYml0YXRz IGlzQWRtaW4= IGV4cGxvaXRpbmc= IHZlbnRpbA== IEJhbGxz 2KfYqA== IG1pbmRmdWxuZXNz KGt3YXJncw== IHJlc2VtYmxpbmc= IGNob2ly IG9uQmFja1ByZXNzZWQ= IFNFQ1VSSVRZ L2d0ZXN0 IGp1c3RpY2Vz IGludGVnZXJWYWx1ZQ== YmxhaA== IEFpbQ== X2ZpbmFsaXpl a2Vo IENvbXBsZXhpdHk= IGF1Z3VzdA== Z2V0RWxlbWVudHNCeVRhZ05hbWU= IHByZWFjaA== IHByb251bmNpYXRpb24= IFRyYXNo LXBlcmNlbnQ= X1BSSVY= IEh1bnRz IEN1cnNl dWVsbGVu IGhlYXZ5d2VpZ2h0 WGk= CXNlbGVjdGVk IE1jQ295 5byC5bi4 fD0K IEJhdHRsZWZpZWxk SXRlbUltYWdl IGRlZHVjdGlvbnM= IEVsZW1lbnRhbA== KCkpOy8v IEJ1cms= fSkNCg0K c3dpZnQ= L2Z1bmN0aW9u VXN1YWxseQ== X1N0 X2ZlYXRz IElzVmFsaWQ= IHphZA== SW1hZ2VDb250ZXh0 IGNsYXNzbmFtZQ== IGRvbm5lcg== IC0tPgoKCg== IG1vdG9yY3ljbGVz KycvJys= IHNldEJhY2tncm91bmQ= XENNUw== LkFsbEFyZ3NDb25zdHJ1Y3Rvcg== IExleGluZ3Rvbg== LmV4YW1wbGVz IFB1cnM= UHVzaE1hdHJpeA== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 LmFkZFRhcmdldA== cG9yYQ== RnVsbHNjcmVlbg== IGdvb2Y= aGxlbg== w6RnZQ== IENVUkw= IEludGVyZXN0aW5n IHJldHJpZXZlcw== X09iag== aW5uZXNz LS0tLS0KCg== LnRzdg== KElN IEJyYXZlcw== X0lTUg== b3N0aQ== 4buT IEV4dGVyaW9y IENvdXJ0bmV5 IHJlc2lkdWVz VGllcg== Lio7DQoNCg== OmJsYWNr d2ViVmlldw== InBhdGg= IG1hc2E= XSE9Jw== IE1hdGNoaW5n ZHVy SnZt PWNvbnRleHQ= X1JJTkc= IHByb3BvbmVudHM= IFFTdHJpbmdMaXRlcmFs IGluZmxhdGU= PEZsb2F0 IERvbm92YW4= KElP SE9SVA== IGRpc2FncmVlZA== aXNreQ== YXNraW5n X1ZFQw== SEFTSA== IG1hdGhz IExhc3RseQ== IGRlcHJlc3Npbmc= LmVzdGFkbw== IGhhbG8= X2JsZQ== IEdhYnJp PFRSZXN1bHQ= IHRyb29w IGVudW1z IFNFUklBTA== bnVtZXJ1c2Zvcm0= IENoaWM= LWV4ZWM= IGJhY2tsb2c= IEJyYXZv UG9wTWF0cml4 IEJydXQ= IGJsb3F1ZQ== IGp1bml0 IFdoaWxzdA== 0YbQuNGP ZmV3 rIE= IFZhcmlldHk= IFBvbGl0aWNv ZXhlbXBsZQ== VXNlckNvbnRyb2xsZXI= IGhhcmRlbmVk YWtlbnM= IFNlZWRlcg== b3dhcmRz Y2hlY2tzdW0= IFNhaQ== VkVSVEVY UmVzcG9uc2Vz cGxvZGU= LWhhcmQ= U3BlY2llcw== UmVuZGVyVGFyZ2V0 X0NIQVQ= IHNob3djYXNlcw== aXRpbWF0ZQ== X0ZPUkVBQ0g= X0NPTkZJR1VSQVRJT04= ZWJh IEVzc2VudGlhbGx5 KHBvbHk= LWxlYXJuaW5n IGfDpXI= X3N1Y2M= KE1hdA== IGNvaWxz YnJhcw== IGFtYQ== X21hdGNoaW5n aW5kdXN0cnk= IE5vcnJpcw== IEV4cG9zdXJl IHBlcnZhc2l2ZQ== IGRleg== 5peP IGVsZWN0cm9uaWNhbGx5 RERS IFN0aW0= INGE0LDQudC70LA= IG1hZHJl bmVtb25pYw== a2ljaA== IEZyYWdlbg== IFJ1bmU= IG9uVG91Y2g= CXNjYWxl IFBoYXJtYWM= IE1hbmRhdG9yeQ== IFN0bw== IEJyYW0= X0xlZnQ= X1NUQVI= KX19Ig== c2Npb3VzbHk= 0LXQt9GD0LvRjNGC 56uZ Z3Jhdml0eQ== K0M= fTw= QU5HRVM= IGNvbnRyYWN0aW9u IFdhbGxwYXBlcg== LkZhY2U= IHByw7N4aW1v LmZpZw== bGFuZ2xl INC/0LXRgNC10Lw= X0NSRUFU QmFzaWNhbGx5 IGF3YWl0cw== IENIQVJBQ1RFUg== IHZwbg== SG9u IGV2aXRhcg== IFVuZG8= UVM= IEVkbXVuZA== IG1pcmFjbGVz IFRpbWluZw== IFZlbmV6dWVs LlNxcnQ= b2lkYWw= IGVycnM= LS0tLS0tLS0KCg== IERFQ0xBUkU= IHZpZ29yb3Vz YXJnb24= IGFnZ3JlZ2F0ZWQ= IFNoYXJrcw== IEN5cnVz IHJlcHLDqXM= bWF0Y2hlcg== IGd1aUFjdGl2ZQ== PyIpCg== IEpOSQ== LmNoYXJzZXQ= J3w= IGdvYXRz aW5kcmU= LmdldERheQ== IHBhcnNlcw== IElocmVu X18uJy8= aWxlZ2Vz bmF2aWdhdGU= IEJ1ZmZ5 UEhQVW5pdA== IG1hc3Nh YWx0YXI= JyldLAo= IG92ZXJzZWVz IHt9DQoNCg== IFdMQU4= Y2xpcGJvYXJk X0luc3RhbmNl IGdsYWRseQ== KHNlcmllcw== IHZhZA== IGdldFBhZ2U= W29m LkludGVydmFs aW51cw== Y2hhckF0 b2xlbQ== YWludGluZw== LkFG X21pbm9y X0lM O3k= IFRlbGVjb20= IFBvbmQ= IG1tYXA= L14= IFlhaw== IFJhYmJp ZW5vcw== CUNvbnRleHQ= LnZlYw== KEF0dHJpYnV0ZQ== IGNhdGVnb3JpemVk IGRpYWJldGlj KHJhbms= IHBhw61zZXM= IEAiIjsK IGppa2E= YXJzaXR5 IC8o LkhlbHA= LWJhbm5lcg== IEJ5cm9u IHVucmVhbGlzdGlj IHxf IFN0b3B3YXRjaA== IGV4ZW1wdGlvbnM= L2NhcmRz IHRvc3RyaW5n bmdpbmU= IHNwcmF3bGluZw== IGx0ZA== IFVuZGVyc3RhbmQ= INGC0LXQutGB0YI= ZXdpdG5lc3M= IGNhbGxCYWNr LVllYXI= RnVlbA== PSo= IGludmVudG9y IGJlc3RzZWxsaW5n IGhhcmRuZXNz IFR1cw== IGtleW5vdGU= IGJlYXU= X2Fib3J0 IHByb3Bvcg== IGNvbWVyYw== X1JFRkVS UGFz aGF2ZW4= LWZpeA== Q2Fub25pY2Fs IGxvb2tvdXQ= RXhwbG9yZXI= IGNlcmNv KHNlbnNvcg== IEpzb25TZXJpYWxpemVy IHZva3Nlbg== IGJyaWdodGVzdA== IHN0YWJiaW5n LkJl LmFkZFByb3BlcnR5 IEh1bXBo IGlzQXV0aGVudGljYXRlZA== 5rKh IHBvcmVz IGplZ28= IFNob3dpbmc= ID8+Ij4NCg== X0NPU1Q= aWxpbmVhcg== IFdvcmtzcGFjZQ== IHNwZWw= YWdvZ3Vl IE1pbGxlbm5pdW0= IFBvcHVsYXRl IG5pZA== LnBhcnNlQ29sb3I= U29sYXI= IEdhZA== IOykkQ== IEthbXA= CXJt IGJlbno= IEhvbmVzdGx5 IGVsZWN0cm9kZQ== IFByYWlyaWU= IFBST0ZJTEU= IE9yaWVudGFs IE9MRUQ= L2NvcHlsZWZ0 YXdhaWk= KHByb2R1Y3Rz KVw8 LWNyZWF0ZWQ= Lk1hbnlUb01hbnk= Ikhvdw== INCy0YvQvw== IG1pdG9jaG9uZHJpYWw= X3Rlc3Rpbmc= KGNyZWF0ZWQ= IGdldEZpZWxk X0VWQUw= XS4i IEZTTQ== IFJpdGE= IOWPguaVsA== IGPDtHQ= IEluc2lnaHQ= CW15c3FsaQ== X3RpbWluZw== SURP KSkpKSkK Q09WRVJZ LmltYWc= Q0RG bHVzdA== aWNrdA== X0ZQ LicsJw== Z2Nj IGt1cno= X3B3bQ== IG9kcG93aWVk IEJhcnJpZXI= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= cGFr LUlzcmFlbA== IFJ1dGdlcnM= IHNlbGVjdGVkSXRlbQ== IFJhbWlyZXo= RmFybQ== IGNhbGVuZGFycw== Z3ppcA== IGJsb2NrYnVzdGVy IFBseW1vdXRo 55yM cmVzcG9uc2Vz LkRpYWxvZ0ludGVyZmFjZQ== LWdyYW5k IGdldFNvdXJjZQ== IGRlanRpbmdz IHRpZXRlbg== IGNvbmRlbW5hdGlvbg== IGNvbnRpbnVhcg== Lk1vY2tNdmM= L2VuZ2xpc2g= IE1lZGlhUGxheWVy Y29tcHV0ZWQ= IENsaXBwZXJz KGRlbGVnYXRl LlNsZg== IOuhnA== IFRpZGU= IGlocmVt IFdhbg== 0YPRjtGJ fT48 RGlzY3Vzc2lvbg== IHdhdHRz LW1pbnVz IEp1bGlldA== 6ZuF IGNvbmNsdWRpbmc= YW5kc2NhcGU= IMO6bHRpbWE= IERFUlA= IHNpZ25VcA== IFNlY29uZGx5 V0FJVA== bGRz LmNhbGxiYWNrcw== KGhvdXI= aW1hdG9ycw== dm9sZW50 QUFG ZWRyaXZlcg== IE1hdGhlbWF0aWM= PFR1cGxl IC8+Jw== e2o= X0FCT1JU RXRoZXI= IGVkdWNhdG9y IHByZWNhdXRpb24= IGZpbmdlcnRpcHM= Z2V0VmFy Y2FtYXRhbg== LWRlYnVn IFJBRg== W2FyZw== IHJhY2Vk IHRzdW5hbWk= LmZsaW5r IGdseWM= dWtv IE11bHRpcGx5 IHJlZGlzdHJpYnV0aW9u QUdP IFJvdXRpbmU= IG9wcg== KGxvd2Vy IEZ1bmt0aW9u LmRr IGVndA== X0JBU0lD c3lzY2FsbA== IExTRA== IER1cGxpY2F0ZQ== X3NlbGw= IGVycm9ySGFuZGxlcg== X2lwcw== IGVydg== YW5uaWU= KHJlc291cmNlTmFtZQ== IGJvdHRsZWQ= IGNyYXdsaW5n ZWdtZW50 LnNldFRhZw== IHJzcw== IFF1YXJyeQ== X2V4YWN0 Lmp3dA== IEJvYXJkcw== b3Bp IG5hc2Fs IFhZWg== LnVk Tm9ydGhlcm4= IGFjdGl2YXRpbmc= ZWR4 b3ZhaA== IGluZHg= QWxlcnREaWFsb2c= IHRpZW5lcw== YW5ueWE= X3Bhbg== KGRlY2ltYWw= LkRpY3Q= IHN1YnNpZGlhcmllcw== UHJvZHVjdE5hbWU= RmV3 ZGF0bw== b2RpZWQ= LXVuZGVy IOqygw== 54mI5pys YXRpc20= W01hdGg= Lic8 KGluZmlsZQ== IGRlbm90ZXM= JGNsYXNz X1NFQ1VSSVRZ IHNld2FnZQ== bWVsb24= KENoYXJhY3Rlcg== L2dpdGh1Yg== IGdsYXJpbmc= Lkd1aWQ= X3NwYXJzZQ== IE1hcmdpbg== X2Rucw== IG1laW5lcg== IGxlZnRpc3Q= CWxvYw== YWJ5dGVz IGVxdWlwbWVudHM= ZXhwbw== IFNvbWVyc2V0 RUs= 5o2i IGxlY3R1cmVy IG1lbWlsaWtp 5qC4 57Sg cHJvbg== OnBvaW50ZXI= Ym9ycm93 IFByb3RlY3RpdmU= X2Nm INCV0YHQu9C4 YnBw JzsKCgoK YXR1cmFsbHk= X05BVg== IHBlcHRpZGU= PmQ= IGlmc3RyZWFt X0ZBQ1RPUlk= Jyk7Ly8= am9pbmVk bW9uZw== IHRpbWVzcGVj IGRlc3RhYmls IGF1dG9w LWxpbWl0 cHVibGljYXRpb24= IERlbm4= Lk1lbW9yeQ== KHNrYg== IEFuYWhlaW0= X1JFVFVSTlRSQU5TRkVS b3VldXI= KF8oJw== bGVndA== aXN0aW5ndQ== CXByaXY= IHJlZGlyZWN0cw== TXQ= IGFsbGVlbg== IFBvaW50Rg== IG9taW4= IGNpdHQ= IFRhZ2U= IFdhbGxz 4buJ IG9jY3VweWluZw== eEJG cmFuZ2xl IHJlbGF0aW9uYWw= LW9yZw== IGpwZw== LWRlcml2ZWQ= IG1hbGZ1bmN0aW9u IEJlbnNvbg== KHNjcm9sbA== IFhE SG9seQ== KGNvbW1hbmRz IHRpcHBpbmc= IHByaW1pdGl2ZXM= IHNleGxl Q2FsbENoZWNr IE1BU1RFUg== X1RFQU0= LnNldFJlcXVlc3RIZWFkZXI= X3NwZWNz IHNlcmdl Lk1hc3Rlcg== IGltcw== LlNwcmluZ0Jvb3RUZXN0 cGF5cGFs IFdBTlQ= Lkluc3Q= IENhcnBldA== IHdyb25nbHk= KCQoJy4= IGJpbGQ= LlJvbGw= IFVyYg== LWNhbg== 44GP44Gg44GV44GE b2xpYmVyYWw= PCEtLTw= 4oCUZm9y IG5lZ2F0ZQ== KG5vcm0= YWVj X3NhbGFyeQ== cGxhaW50ZXh0 b2Rlc2s= IEJvc2No U2NpZW50aXN0cw== aW5kZXhlcw== IG1weg== IGdyb3VuZHdhdGVy fX0pOwo= 0LDQu9C40Lc= IGVybw== IHByZXNjcmliZQ== IEV4dHI= PEFycmF5TGlzdA== IGF0cm9jaXRpZXM= QXJlYXM= IFRJbnQ= KHBsYXllcnM= IGRhdGFi IHd5bQ== 44Gb IGR1YXM= X3Bvc3NpYmxl IGluc3RydWN0aW9uYWw= aXRpb25lcg== L2F1ZGlv ICAgICAgICAgICAgICAgIAoK c3RvcmVk T01QSQ== IGFwcHJlbnRpY2Vz VGVuYW50 IENvdXQ= IGNvbnRyYWNlcHRpb24= TG9hbg== X3Zpc2liaWxpdHk= J3x8 LlBhcnNlRXhjZXB0aW9u IGNvaW5jaWRl LmdldFdpbmRvdw== IE1hcnRpYWw= X3Rscw== L2Jvb2tz IG91dHJhZ2Vk ICh+KA== c3Ryc3Ry IEJveGVz 6YO9 44Ol Uk9J RnVuY3Rpb25hbA== IFByb2Q= PFRlc3Q= IHZpZGVvdA== IGFtb3Jl YWJicg== IE1vbnVtZW50 IHJlaW5mb3JjZW1lbnQ= IENvY29udXQ= LnNlbmRTdGF0dXM= Lmtl IExlYXA= X2FydGljbGVz UGll IElydmluZQ== QUJDREVGR0hJ IEV4cGxhbmF0aW9u Z3JvdXBCeQ== IG92ZXJoZQ== IGFuw6Fs IGNsYXNzaWZpZXJz IE1peGVy L2NvbG9ycw== IFVzZXJEYXRh X0FSUk9X X3ZsYW4= LkNyZWF0ZURpcmVjdG9yeQ== IEhhaw== IEJvbmVz IEFwaVJlc3BvbnNl IE1vb2R5 REFD Z2V0Yw== 6LaF LkZpcmU= 6aM= IGhpdHRlcg== ZnJlc2g= 4LmB IENoaWxkaG9vZA== eG9y LWh0dHA= IE1PUg== LnNlbmRLZXlz X3NoYXBlcw== IFVwcw== IEFycmVzdA== YXp6aQ== X29wY29kZQ== Lk5vbWJyZQ== IHByw7Nw IHp4 IHRyZW1lbmRvdXNseQ== U3BhY2Vz ZWNj IHZlbHZldA== IG1lbW9yaWE= IExBUA== LkRyYXdMaW5l IHRhcmdldFR5cGU= cmVzdHJpY3Rpb24= IERSVg== W3RvcA== IeKAmQ== L2NoYXQ= IHNvbmlj VG9yb250bw== b3dp LmRvY3M= IEluaXRpYWxpc2U= IDwh LnRibA== LlByZXBhcmVkU3RhdGVtZW50 L2RvbQ== LnJvdA== X1BST00= S2VlcGluZw== IGhhcmdh IGpvcm4= IGlkZW50aWZpYWJsZQ== W2lw UGluaw== X0hlYWRlcg== w5E= YWRsZQ== 572R57uc c2VxdWVudA== QWN0aXZhdGVk dG1wbA== IFBhbGw= IGZhdGFsbHk= fX0pCg== UG9wb3Zlcg== IE1jTGFyZW4= Q2hhbmdlZEV2ZW50QXJncw== IEZvcm1hdGlvbg== TmFt bmV3c2xldHRlcg== LmZyb21TdHJpbmc= X2ltbQ== QVBQRUQ= LG5vZGU= KGRldA== IHBhcmFsbGVscw== IGxhc2Vycw== IGNob2NvbA== L3BvcnQ= YWZmZW4= KGRldGFpbHM= IHJlcGxpY2F0ZWQ= QXNTdHJlYW0= YXJtYWM= XV09 YWxhY2g= X3Nlc3Npb25z QWxnb3JpdGhtRXhjZXB0aW9u IHZlcmJvc2l0eQ== LkNvbHVtblN0eWxlcw== KFVTRVI= IHNsZWVwcw== IGFxdWF0aWM= X2J1bGs= PScuLw== b3VybsOpZQ== IE1TRA== IEJsb2M= IEdsZQ== IHJlcHJlc3Npb24= IGVudG9uY2Vz CQkgICAgICAgICAgICAgICAgICAg WU5D LkFsbG93R2V0 IHR1cnRsZXM= ICd+Lw== ZXNzb24= IERJRQ== IEFxdWE= IFNFUQ== Ozs7Ozs7Ozs7Ozs7Ozs7Ow== LnB1dHM= IE1BSw== KEN1c3RvbWVy IGRlc3NlcnRz IGVtYmVsbA== IHRheGVk 5bqX IHNjaGw= cmVzY28= IEZyb2c= IFBlbmRpbmdJbnRlbnQ= X0xvY2Fs L3NlY3VyaXR5 IFJveA== IHNwb2lsZWQ= X1dJTkRPV1M= SmVubmlmZXI= IGRhdGk= VW5sb2Fk LmdyaWR4 KHN0YWdl 4buX U3FsQ29tbWFuZA== Lm14 IGJsaXR6 IEZvcnRyZXNz IEJyb3dzZXJBbmltYXRpb25zTW9kdWxl d2luZQ== TlNF LXJhbmtpbmc= eXJl IGxpbmthZ2U= w6Fr kZw= YXRzYXBw IEN5Y2w= IGVjb2xvZ3k= IGJsYXRhbnQ= IFBlcmY= IFhpYW9taQ== IERvcnRtdW5k cmVzdWx0U2V0 IGdpw6A= IGZhdWNldA== IERhbHRvbg== IGZyZWVz QlVGRg== LnBhcmFsbGVs IEFzdHJvcw== IFZFQ1RPUg== IHN0YW5kb3V0 w7Ntbw== IGZyYW1lYm9yZGVy X1BBUkFNRVRFUlM= IEZhbGs= IERpZ2l0 IGVsZWN0csOzbmljbw== IHZlcnI= VUlBbGVydFZpZXc= KFNxbA== LUlORg== IikpKTs= JycK KEVGRkVDVA== IFp1bQ== X0RQ KV07DQo= IGFudGVubg== IGFiYnJldmlhdGlvbg== IHNlaXNtaWM= X1RSQU5TTA== tZw= Lk1pbGxpc2Vjb25k LGxhdA== IEFuY2g= X01vZA== QWxyaWdodA== ZGRh IMKl VU5ETEU= INC30LDQsw== IHN1bGZ1cg== IFNpdGg= IE5pbWJ1cw== IEV4YW1pbmF0aW9u X3dpZmk= fWApOwoK IHNlbnNhdGlvbnM= YWZz X0NMUg== IGluZmluaXRlbHk= IHN5c3TDqG1l X2ZvbnRz SW1wYWN0 UG93ZXJlZA== IDw9Pg== X25lZWQ= REVDUkVG IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v IFJlcG8= Z2V0U2VydmljZQ== JG4= X3BjdA== RXJyZXVy IE5HT3M= ICoKCgo= LmF0YW4= X1RNUA== IGNvbGxhcHNpbmc= IHNobw== X1BDSQ== Lm9wZXI= KGFkag== IGdpb3Y= Piku IGluY29udHJv YXJkYQ== IGFwZXg= IG1lZGlkYQ== IFNoZWlraA== IEFybWVuaWE= YXNzb2NpYXRl LXdvdw== IFR1cm5pbmc= IEZyZXVk IEZvb2w= IExEUw== LS0tLS0tLQoK b2xzb24= LkZJTEU= X2RldGVjdG9y RG9taW4= IGRlcGxveW1lbnRz IGZhcmV3ZWxs KGJpbmQ= IG5vdmljZQ== dGRvd24= IGdldEVsZW1lbnQ= IHZlbGl0 YXN0aGFu CWNoYW5uZWw= X0ZSQU1FQlVGRkVS LnRyYWlsaW5n LnNldEVkaXRhYmxl Oyw= IElERg== X1BC Z2V0TGFzdA== IENvYXN0YWw= IEhhbmR5 bGluZ2Vy 44Gn44KC UGVyc2lzdGVuY2U= LmdldFNlcnZpY2U= INC+0Lo= IG5vdHdpdGhzdGFuZGluZw== KFBS VU1C J10pKXsNCg== ZW1icmFuY2U= ZXhjZXJwdA== YXF1 X2Jsb2M= IFByb3Zpc2lvbg== IE1jRG9u IEdvbGRiZXJn IGNvbXBvbmVudFdpbGxVbm1vdW50 IGJhc2VQYXRo LWZpcmVk IGZvbGxhbmRv IFRpbGVz QGVuZGZvcmVhY2g= RU5DSUw= IEJveGluZw== aXF1ZXI= QWNoaWU= RW51bXM= QmFzZVVybA== KHNjYW4= IFBhc3NpdmU= YWJlbGxh L3Nu Lm51bWVyaWNVcERvd24= IHZlcm4= bG9jYWxpemVk IE1peg== IHJlc3VsdExpc3Q= L3Z1ZQ== RVJWSUNF Lm9k IGxpZ24= IFN0cmluZ1Rva2VuaXplcg== IHRyYWc= QWNjb3JkaW9u IG5vcmVmZXJyZXI= bXNjb3JsaWI= w6F0aXM= Ynl0ZXI= IHNob3dkb3du IHNlbWFpbmU= IC0tPg0KDQo= IE1haG0= fSI7Cgo= IGRx IFB1Ymxpc2hlcnM= IEFtcGw= IERhbmllbGxl IHRlcm4= 6LW3 bm/Fm8SH ZWlu IEFzeW5jU3RvcmFnZQ== dW5nZXI= cm91dw== IHNjaXNzb3Jz L2Fzc2VydA== LmJ1Y2tldA== L2FyY2hpdmU= X01hbg== IGludG9sZXI= ICgpPT4= INCS0Ys= IHNhaQ== Lnh5 LiINCg== IHVyaW5hcnk= ZXN1Yg== SVNUSUNT IM66 IGNvbXBsaW1lbnRz IHR5cGluZ3NKYXBnb2xseQ== aWhhcg== RXhwYW5zaW9u IFNlcnZpbmc= X3N0dWRlbnRz IFhCT09MRQ== KGls IOyymA== IGrDsw== KHRvbA== KEpT CUNH IERSQVc= dHdpZw== IG9hdA== X3Ntb290aA== IENTTA== IG9zb2I= IGVuc3Vpbmc= IGJhbmtlcg== IEJhY2twYWNr X3Bpbmc= IHdpc2hsaXN0 PWF4 CSAgIAo= RGlzbmV5 c3RlYWR5 Ij4l IHByb3BoZXRz IFpY IG1pbmltYWxpc3Q= LlBMQUlO U2VhdHRsZQ== Lm9yZGluYWw= IFBJUEU= IHJldG9ybmE= IGp1Z2Fkb3I= IEJyZXQ= IOKUnA== IHBsdXNo VUxBVE9S U29ydGluZw== LmdyaWR5 ZWN0b215 X2FjdGl2 cmFjaw== SW50ZXJhY3RpdmU= IEFudGFyY3RpY2E= IHZlbmdlYW5jZQ== ZW5zbw== X2tub3du dXBwbGllcg== Lk1vZHVsZXM= IENvbm5lY3Rpb25TdGF0ZQ== 6ZqQ6JeP QEZpbmRCeQ== IHBsYWNlcg== XG1vZGVs PCgpPg== LmlzU3VjY2Vzc2Z1bA== LWdvb2Q= Yno= IERyYWNv QXNzaXN0YW50 LWV4dHJh 0LDQsdC70LjRhg== IGh5cG9jcmlzeQ== IHRzdA== IEFncg== JHR4dA== IGxvZ2lzdGlj bGljZW5zZWQ= IEhvZg== IHRhdA== KGl2 IGludG94aWM= cG9zdElk X3N0cmlrZQ== IGh1bWlsaWF0aW9u cGNvZGVz InN5bmM= KHJlY2lwZQ== K04= cmVudGU= CUNsaWVudA== eWNvcGc= IFp1cmljaA== IFByb2ZpbGVz Q291bnRyaWVz IHBpY3Q= IHJvbGxvdXQ= cmVxdWVuY2llcw== IHBhdGNoZWQ= IGNhcnRyaWRnZXM= IHNoYWRpbmc= SmFy IHNhbHZhZ2U= IFRheGVz IHN0YW5kYnk= YXBvcmFu RWlnZW4= LmFuZ3VsYXI= IE5lc3RlZA== 5Lqr IGlzVmlzaWJsZQ== IER3aWdodA== X0JSQU5DSA== LkRlbGF5 IGtlbmQ= IGZhY2lsaXRhdGVk LmZsYXRNYXA= IHNhbnRh CVNlbmQ= L21lc3NhZ2Vz IG9mVHlwZQ== CXN3YXA= I3BsdA== IFR1cmtz TkVT IHByb2dyZXNzaXZlbHk= IFJlc2lkZW5jZQ== IFRSRUU= IG5vZW4= ZGlv IG5lbGxl IHNvZ2Fy aXR0aQ== d2Vla2x5 IGFtYmlndWl0eQ== X1NldHRpbmdz V2FyZQ== Lm5lbw== X0RTVA== IOaWuQ== cHJlcA== bG9iYnk= QGVtYWls L21vdmll IGZ1bmtj ICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== wq1z IGd1YXJkaWFucw== LXBvcw== IGNvbmZpZ3VyaW5n IENQUw== IERldXM= IHZpZMOpb3M= X2VtcHJlc2E= IHNsYXBwZWQ= PE1vZGVs IHVuZGVyc2NvcmVz VWg= LmFjY2Vzc1Rva2Vu U0VUUw== IFNwYXJzZQ== IENhbGQ= OnBhdGg= IFNlcnZlcnM= PWJhdGNo IGtuaXR0aW5n IHhh IHNlYXJjaEJhcg== IHNuYWc= IGluZnVzZWQ= LmJhbQ== bGV2ZXI= IHRheG9ub215 w44= IGF0dGFjaGluZw== IGhlcm4= X05PUA== Q2xpY2thYmxl KFBhcnNl IER5bmFtbw== LWJ1aWxkZXI= IGRlcmVn IHNjYXR0ZXJpbmc= 6L+b6KGM YW56aQ== IFNoZXBhcmQ= Ij4nLAo= X1hERUNSRUY= IEJ1enpGZWVk X01BUkdJTg== UExPWQ== LnNtYWxs IG1pbWVUeXBl IGhvbG9n CWNhbWVyYQ== bGlhcw== IHN1c3BlbnNl b2R5bmFt YmF1 IGdyYXZleWFyZA== X25hbWVk IjoiJw== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IGdhbWVPdmVy IExFTkdUSA== CXNjcmVlbg== IGRvSW5CYWNrZ3JvdW5k X2RlcGVuZGVuY2llcw== IHJ0Yw== L3Vw X1JPTQ== SGFsbA== IGRlZmljaWVuY2llcw== KHRl JyM= X2VxdWl2 IHByZW9yZGVy IEF4ZQ== 0L7QvNGD LnNlbmRGaWxl IGZpbHQ= IExpbWl0cw== IENhdmFsaWVycw== LmRpc2NvdW50 4oaQ IFdpdA== UVJTVFVW IGlq IHRlZ2Vu IDoiLA== ZGlmZmljdWx0eQ== cHVua3Q= IEVtYWlscw== Y2hsb3I= KGZ1bg== LlVpbnQ= IFN0YWxs X3ZlcmlmaWVk dUQ= RmlsZVR5cGU= IHBsZWFzdXJlcw== IGp1ZGljaWFyeQ== IHNoYW0= aXB1cg== X1BMVVM= b2ZmZXJz KGZvbw== X0dU CWNvcmU= RU5USU9O IExpYmVyYXRpb24= Q29tbWFuZExpbmU= X2RlcGFydG1lbnQ= LkFy X25laWdoYm9y IFN1Ym1pdHRlZA== IDwhLS1b IGxvY2F0aW5n Lk1hcHBlcg== X3N0cmVuZ3Ro Wy4uLiw= IEphbA== L2xvYWQ= IGJ1ZmZz IG1vdG9yaXN0cw== CWNz YXNjZW5kaW5n IFdoYXRzYXBw IE5hc3M= X0NPTFVNTlM= TGVvbg== cHBl ZWx0YXM= IHRqZWplcg== X0tFWVdPUkQ= cXVhbGlmaWNhdGlvbg== aHJh IHJpZGljdWxvdXNseQ== JGluZm8= RkVBVFVSRQ== ZG9lc24= IEtX IEVudW1lcmFibGVTdHJlYW0= X01BVA== IFN0cmVhbUxhenk= IHNjcmF0Y2hpbmc= LnRpY2tldA== IHNob3J0Y29taW5ncw== ZWxsaXBzaXM= PWN1cnJlbnQ= IGNyZXN0 IHdob3Jl IFBldHJvbGV1bQ== Y29udGV4dHM= IOat LXB5dGhvbg== KGpzb25PYmplY3Q= IFByaXNt IHlhY2h0 t6g= Zmxhc2hkYXRh IGxlaWNodA== IE1vcnRvbg== IHN0ZXJsaW5n X2l0cg== X3Vk RmFjZXM= IGhpcmVz ZmZh Jyx7Cg== LWNhbWVyYQ== X1JFQVNPTg== IEhlbGVuYQ== cnVn aWdodGx5 IHBlcm11dGF0aW9ucw== IFRvcmFo IOaYr+WQpg== CXJlY29yZA== w4A= LmdtYWls Rm9ydHVuYXRlbHk= KE1vZA== T2NjdXJyZW5jZXM= IGRlcHJlY2k= IHZhZ3VlbHk= L1o= Vk4= LnRw X2dlbmVy IHs6P30iLA== d2FobA== SUtF IExlZ2lzbGF0aW9u IGhpbnRlcg== IGFkZWw= KGhpZ2g= 5o+Q5Lqk L2RvbWFpbg== LnRpbGVz IFRpYmV0YW4= IFN0ZXJlbw== IGZpbGVTaXpl Z3J1cG8= aWFl U0NQ IHZvdWNoZXJz IFBhbmRvcmE= IGRpc21heQ== IGzDqWc= IEJlaGF2aW9yYWw= Y3Jhbg== TmVzdGVk YWNjb20= IE5haA== IEJhbHRpYw== IERFU1Q= IGtpc3Nlcw== Vmlu IHByb3Zva2U= X0NvbnRleHQ= IHdlZWtkYXlz dXJnZW5jZQ== TGlr IHBsYXph IGJsZXY= IHJlYWZm X1RpdGxl KEd0aw== IGNlbGxl Iz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IEpvb21sYQ== Ij4vLw== TW9udGhseQ== LnRvRG91Ymxl KGVudHJpZXM= IE5SRg== KGdjZg== IE1pZGRsZXdhcmU= fS17 X0hJREU= IGxvd2Vycw== KFNlbGY= 5Y+R6YCB IGlzTG9nZ2VkSW4= IGJpb2RpdmVyc2l0eQ== IG11c2NoaQ== KGNhbmRpZGF0ZQ== IEFuc2k= CXNt L2lt Kycp Y2Rj IGFsZ3VuYQ== IHNhY3JpZmljaW5n L3ZlbmRvcnM= L0FQSQ== QWR2ZXJ0aXNpbmc= IEdFTkVSQVRFRA== IERpc29yZGVycw== IFNlcmlhbGl6YXRpb24= IHNhdmFnZQ== IOm7 IEluc2lnaHRz IHJldm9rZQ== IGp1cm9ycw== c3VpdA== IENhbXBpbmc= X3Byb2ZpdA== YnVjaA== LkFjdGlvbnM= IElERUE= b2x1bHU= TGlrZXM= 67KI7Zi4 LkJMTA== dsOk IGNhcmRp IGRpc3Byb3BvcnRpb25hdGVseQ== IGluc2FuaXR5 LmVvZg== IFBsYXR6 LmZpcnN0bmFtZQ== IFNsYXNo X0NG amFuZHJv IEdhdWdl IFN1bmRlcg== IEJ1bm55 X3Vt 6IGU57O7 IGlQaG9uZXM= IEJJTw== IGtobw== eEZB IEZyaWVuZHNoaXA= IGNhbG1seQ== X3Rocg== X0FuaW0= IHJhaXNvbg== L3Jvb3Q= LmdldEJ5SWQ= IFNhdmFubmFo IEludGVycHJldA== a2lsbGVy CXdn XSld 0YPQtdGC S2V5VmFsdWU= W0c= c3RyZXRjaA== LXBsYXlpbmc= JTsNCg== IHBsYW5r IHBlYWNo IERlcnJpY2s= 0LTRgNC10YE= IFNoYW0= QVBQTElDQVRJT04= LnByb2dyZXNzQmFy IHRyYW5zaXRpb25pbmc= X2RyYWc= LlJlcXVlc3RCb2R5 Lk1vYmlsZQ== Sm9uZXM= LlBob3Rv IGF4bGU= enVn L29wdGlvbnM= XV0pCgo= CW5v W2hyZWY= IGFncmVnYXI= IFNlcnZpY2VFeGNlcHRpb24= bmluZ2Vu RGlmZmljdWx0eQ== Qk9PTEVBTg== QWRkcw== LWhhbmRsZXI= IEdhdA== IEVib255 4bqtbg== YnJpZ2h0 IGNvcnBzZXM= LkNoZWNrZWRDaGFuZ2Vk IG1hdGluZw== IEhhcnRmb3Jk IHpvdQ== IGR1ZGVz X2FsZw== IEp1bGk= b2N1cA== INC/0YDQsNCy IEthdHk= X0ludGVybmFsQXJyYXk= LkNvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== TWV0aG9kTWFuYWdlcg== IFJlZGU= IGxpc3RJdGVt LkJvdW5kcw== IGF2ZW51ZXM= IENvZ25pdGl2ZQ== RXh0ZW5k dGVjaG5pY2Fs 4oCa c25ha2U= RnJvbUNsYXNz aWxlc3M= ID17 dXJldHRl L3RocmVhZA== RklFTERT SVZJTkc= IFBPU0lY X2Fr IC4uLy4uLy4uLw== TXA= IGFub255bW91c2x5 VGFyZ2V0RXhjZXB0aW9u YWZmZXI= YW55dGhpbmc= Imlz Z3Jlc28= IExhcmE= aXphZG9z IG1pbmc= LnRh X3Rocm93 Umg= IHNvbGlkaXR5 bmFobWU= aWNoYWdl IG1vdW5k b2xpbw== YXJ5YQ== QVNVUkU= IHdvaGw= IGZ1cm5pc2hpbmdz LnNlY3Rpb25z IGFwb2xvZ2llcw== YXBpa2V5 IFNjcmV3 IFdhcnNhdw== L2dyYXBo IFNBVEE= eXNlcw== L2J1dHRvbnM= 0LXQvdC+ VUdIVA== IHBvcm5zdGFy UGljdHVyZUJveA== X1RleHR1cmU= IGHDsQ== IG5lcmQ= LWNvbm5lY3RlZA== IG91dHNpZGVycw== IG9wZXJhdGl2ZXM= YWJibGU= L21hbg== IHBsZWFk XERi IENvdmVyZWQ= PVM= IEZsYW1lcw== 77+l X3RpdGxlcw== IHJldHJhY3Q= IGNvbGxhYm9yYXRpbmc= IGJlaGFuZA== LkRhdGFHcmlkVmlld0NvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== IGxhYm9yZQ== IHRvdGFsUHJpY2U= IHNwb2lsZXI= IGRpcHBlZA== Iikpew0K X1NC IExlaQ== IGluY2x1c28= dmVsbA== CXBs SW5hY3RpdmU= IFVTU1I= b25kZW4= IHJvdXRlZA== LnN0cnVjdA== 4Ks= IE1hbGlr IEhFWA== IEN1c3Q= X1BFUkNFTlQ= X2VwaXNvZGU= 5ouJ VkVSUw== IGNydWlzaW5n Qm9va21hcms= 4oCmCgoKCg== Y2hlY2tCb3g= b3VmbGFnZQ== IG5vbnplcm8= IGFwcm94 IFB1cmR1ZQ== Y29vbg== bGVncw== IExvdHRlcnk= U2xm SEFW Pms= PkFu IHNsZW5kZXI= c2NoZWQ= VGVsZWdyYW0= Umljaw== X1N0cnVjdA== X0JD IGN1c3RvbWFyeQ== IERhbW9u dXJjaGFzZWQ= IGtvYg== IHRpb24= KHByb21wdA== IGltYg== eEND CVdlYkVsZW1lbnQ= IGhlbW9z 4Kaw IENOQkM= IEFMTE9X 57Gz IEVOQw== LnNjYWxhdGVzdA== IFRCRA== Z2V0UmVmZXJlbmNl IEltcG9ydGVk 4Liw IGl3 b2xvbg== bWls Oi8vJHs= Lk1hbmlmZXN0 IGxo IGl0ZW1MaXN0 X2Fkcw== SW5zcGVjdGFibGU= IFRvbGVkbw== IERpc2FzdGVy VXBkYXRlZEF0 KScpLA== IFBBTg== RmlsZUNob29zZXI= IHl1YW4= aXRt INC10LPQvg== IElibg== SGF0 X3Vsb25n YXBs IFVydWd1YXk= w6lueQ== IENyYWlnc2xpc3Q= ZG9jaA== IGJpbGU= IHByb2R1a3Q= IGVsZWN0cm9seQ== LkNvdXJzZQ== IG1x dW5jdHVhdGlvbg== LyoqKioqKioqKioqKioqKio= dWp1 TU1NTQ== X0xFRw== IG5ldXRyb24= IHBsdXJhbGl0eQ== ICsrJA== Zm91bmRhdGlvbg== LkNvbHVtblN0eWxl IEhvb3Zlcg== LkFDVA== IEJyYXo= bGVzc29ucw== ZsO8aHI= 4KSC IENsYXNzaWNz cmFpZw== IG1o IGtldHRsZQ== U3RyaWtl ZXJkYWxl RU5UQQ== IFRhYmxlQ29sdW1u IFNoYWtl IFdG IExpY2Vuc2luZw== dWHDp8Ojbw== IHNlY2FyYQ== IG5ld1ZhbA== U2VsZWNjaW9u UHJlZmFi ZmlnaHRlcg== TGF1bmNoaW5n JyI7DQo= Lmxvbg== LnV0Y25vdw== IEh1bmRyZWRz ZXN0ZWFk IE92ZXJ3YXRjaA== X0FGVEVS IHJlbW5hbnRz KS5c IGxvYmJ5aXN0cw== IHVuaW50ZW5kZWQ= IOuQ eXN6 IGxpYnJvcw== LXBhZ2Vz SU5URVJGQUNF IGRldGVybWluaXN0aWM= IFVOSVFVRQ== IGV0dMOk U2luZ2xlTm9kZQ== CQkJCQkJCQ0K LXN0YXQ= IGhhc2hpbmc= L2FjY2Vzcw== dGVsbA== CXVzZXJuYW1l IERhdG9z Qml0Q29udmVydGVy Omhvc3Q= IGFsdGVybmF0aW5n IOKAi+KAiw== IHdhdmVmb3Jt PEVsZW1lbnQ= IENhbnRvbg== IGRlc3RhYw== dGVudA== LmdldE1heA== IHN0ZW5jaWw= IEFjcXVpc2l0aW9u LkdlbmVyYXRpb25UeXBl IE1FUg== X2NvbWJpbmU= IFtdLg== X0JJVE1BUA== bGRy IGNhbnY= IEpWTQ== cGFycw== IGRvd25oaWxs RGV0YWlsc1NlcnZpY2U= KE5BTUU= IHJlanV2ZW4= X3dpdGhpbg== QWNjZXNzb3J5 IFPDqQ== L2luYw== IildCgo= UHVibGljYXRpb24= X3JvaQ== IG1vYnM= Lk5vQXJnc0NvbnN0cnVjdG9y IGV2ZW50b3M= LnZlbmRvcg== X1NFTEVDVE9S w6lmb25v PSJb IGxhYXQ= IGJsdXJyZWQ= IEJvcmRlclNpZGU= eEZGRkZGRg== X3dyaXR0ZW4= IGplbnRl L3Rpbnk= Lndw LnN0eWxlYWJsZQ== IENoYXJnZXI= IGJhdGhpbmc= IFBhbmRh w6lsaQ== IHBhY2llbnRl IGdpb2NoaQ== IFZpZXdTdGF0ZQ== Y2dp LmxvZ2ljYWw= RG9uYWxkVHJ1bXA= LGNvcHk= ZW1t X0xpbms= IGluc2lnbmlmaWNhbnQ= ZmZtcGVn L3BheQ== X3F1aXQ= SU9EZXZpY2U= IEV4aXN0cw== IGNvb2tz anVuY3Rpb24= IFRYVA== KGVndA== YW5pdQ== X3BhcnRuZXI= IGZhY3VsdA== IFVuaWZpZWQ= L3NiaW4= IE5laA== IEthemFraHN0YW4= cG9zdGNvZGU= IHZlZ2Fz IHNlaW5lbQ== fV0s dGV0 LXBheW1lbnQ= IENvbW1lbnRhcnk= IGd1aWRlbGluZQ== KTsk IENvbnNvcnRpdW0= 57O757uf dmlzbw== IEJpbGxpbmc= aWNpYXI= IFR5cGVJbmZv CXRyYW5z PFRleHR1cmU= YXRob20= bGF1Z2hz IGludGVyY2VwdGlvbnM= KEVWRU5U Rm9yZWNhc3Q= VHJhcA== dHJ4 IFdoaXRlcw== c3VibWl0dGVk YWxnbw== IHRyYW5zcG9ydGVy b3VuZGFyeQ== IEluaGVyaXRz IENvbmV4aW9u LmNsaWVudFg= CXByb2plY3Q= aGVhcnRiZWF0 LW90aGVy ICc7DQo= w6ty b3JwaW9u KGNvcnM= IEVMRUNU IFBlcmU= IHVzZU1lbW8= ZXdyaXRlcg== IHNxdWlydA== L2V4dGVuc2lvbnM= L2Fz LkNMSUVOVA== IGdvdXJtZXQ= IGF1dG9Db21wbGV0ZQ== UkVW IGJyYWtpbmc= X1NFTEVDVElPTg== 44Oh44Oz44OI X2xpZmU= X2dyb3VuZA== X3Rlcg== c25z IFNQT1JU kuGe 5rs= VW5pcXVlSWQ= IGRyaXA= X0JST1dTRVI= LW1ldGVy ZW5kZXo= IGV4aGF1c3RpdmU= KFNL IEJ1cmxpbmd0b24= d29vcmQ= KHBvdw== IHNlYXJjaFRleHQ= hYw= aGVlbHM= c3RlbGxlcg== LnNpZw== WU9VUg== LmFsaQ== IERhdGFDb2x1bW4= IHByb2plY3ROYW1l X2ZlY2hh IHJlZnVuZHM= IHRvcG8= IENISUxE IE1hcmJsZQ== IGZvckNlbGw= IHBlc3NpbQ== IGNyaXNweQ== aWZlc3R5bGVz IG92ZXJkdWU= b2xhcml0eQ== IGFtYXTDuHI= TWQ= UFJFU1M= IGluc3VyZXI= b2NyYXQ= IGZhY2lsaXRhdGVz Lw0KDQo= IGh1cmRsZXM= X0hJ TGV0dGVycw== bWluZWNyYWZ0 YXh0ZXI= eWs= IGVjb27Ds20= INC90LDRhw== IFNXSVRDSA== Q29uc3VsdGE= IE5vcmE= Q0tFUg== X0NU LmFwcHNwb3Q= IC8vLS0= CUJPT1NU X2NvdXJzZXM= IHdpbGxpbmdseQ== 66eM ZmZk ZmlsZXI= IE1lYXN1cmVz IGxlYXNlcw== IERvcm90aHk= Ol0u c3Vic2NyaXB0aW9ucw== IGNob2lz IGFsYW4= IGFicmly LlBvcHVw RXN0aW1hdGVk IFBMQU4= 4LWN IEVMRg== IGRpc3RhbmNpbmc= CWFuc3dlcg== IHJ1Z3M= S2k= 4Z+S4Z4= R3VpbGQ= ZXh0cmFz Y3Bz TW9ja3M= IHRla3N0 Kmc= LnJlcXVlc3RGb2N1cw== IGFsdGVyYXRpb24= IENhdGVnb3JpYQ== aW1tZXJz IERyb3Bib3g= IEFkZHI= 5byV ZGVwcw== Lk1lc3NhZ2VCb3g= ISwK LmdldEI= IG1pZ3JhdGVk IEhvYmJ5 IE1n LlZlcnRleA== IGZvcmdpdmVu IERlVg== IHdlcmQ= IEFyYWJpYW4= IFNtb2tpbmc= IHN0cmF3YmVycnk= IENNUA== ZGJs IERIUw== LWVycm9ycw== LnBhZw== IFJORw== IHNoYXZl IHR3ZWU= IGFzc2VydE51bGw= IERlbnNpdHk= ZG9qbw== YWlubWVudA== IHBq LllFQVI= ICopKTsK aWJyYXJpZXM= SmV0cw== RXhlY3V0aXZl X2RlbnNl LmdldENvbnRlbnRQYW5l Y2hhbmRsZQ== YWluYQ== LXJlZmVyZW5jZQ== IGxpYXI= IEhFQUxUSA== W3Rlc3Q= LmlzbmFu Q2hhcmxpZQ== IHB1cHBlcg== IGtpcg== OmhpZGRlbg== aXNWaXNpYmxl IGtvbXQ= IGFjcXVhaW50ZWQ= IERydWlk KENz Lmxhc3RuYW1l RFNB IGRpc3NvbHZl 57yW5Y+3 VmFyaW91cw== IERleA== X2FuZ2xlcw== L2FwaW1hY2hpbmVyeQ== IGV4cGxvZGluZw== KENoYXJTZXF1ZW5jZQ== IEhpc3Bhbg== KyspewoK Lk1vZGVsU2VyaWFsaXplcg== UVJTVFVWV1hZWg== 54K55Ye7 PXNldHRpbmdz 4KWB UENT IElOVEVSTkFM IEhVR0U= IG1pY3Jvc2NvcGU= aXNBZG1pbg== XHY= LnJlcXVpcmVOb25OdWxs 0L7Qu9C+0LI= aWNlcmNh X1NFTlQ= IGRlcGljdGlvbg== IFVzZXJDb250cm9s IE1lbW9y IEFsbG9jYXRpb24= IEJlZGZvcmQ= IOabtA== IHRvcm1lbnQ= YXplZXJh LlRvZGF5 IFJlZ2FyZGluZw== X0VOQw== X1JBTkRPTQ== TG9nTGV2ZWw= PVI= IEdyZWVubGFuZA== IHN0cmFpbmVk IG1hZ25ldHM= IGFsZXJ0Q29udHJvbGxlcg== IENocm9uaWM= X3JlZ2lzdGVyZWQ= IGxpag== IEVudHJ5UG9pbnQ= IFJlZ2ltZW50 dWNpZA== IENvdWxkbg== IEFjdGluZw== X3JheQ== IG5hYg== LXNlcGFyYXRlZA== IHBubA== Q29hY2g= QVRZUEU= IHN1cHBsZW1lbnRhdGlvbg== YWNlcnM= ZmxlZXQ= SW5wdXRCb3JkZXI= IFN0cnVjdHVyYWw= IGRlaW5l IGJyZXdlcmllcw== YW5vaQ== IHRyYW5zbGF0b3Jz IGVpZ2VuZW4= IGRhbmNlcw== dGFt IENvb3BlcmF0aW9u X3JlcXVlc3RlZA== IE1hZ2ljYWw= CUxFRlQ= ICIiKSwK Ky0rLSstKy0rLSstKy0rLQ== IE5vaXI= IEVzdGltYXRl IFRocmVhZFBvb2w= IEhlY2s= ICcqLg== VHVya2V5 IHN1Y2NlZWRpbmc= ZHJ1Zw== dmlv IHBvbmVy IEphZA== aXp6bHk= ZXZlcnl0aGluZw== IHt9KS4= IEluc3RpdHV0ZXM= IG51b3Zv IGluaXRXaXRoVGl0bGU= IGx1YUw= b3duaWs= IHRob3I= IGtsYXI= IG5vdG9yaW91c2x5 IGRvbmc= ZW1lbnM= X3Byb2plY3Rpb24= X0dSRQ== LmV5ZQ== IHdhdGVyaW5n IFRpaw== b1M= IFN0cmFuZ2Vy ICANCg0K cGFnaW5n X2ludGVyc2VjdA== IENvbG9uaWFs TGlzYQ== LnVubGluaw== IG1pcA== YW51dHM= YW1hem9u IElERU5U c3Rhc3k= Snd0 LS0tLS0tKy0tLS0tLSs= IEVWUA== Q29udGVudExvYWRlZA== CUJJVA== LnBhcmVudHM= IGFsbG9jYXRpbmc= IEdPTEQ= fWA7Cgo= QUxBUg== IHByZWNpc2E= RGlzdGluY3Q= c2Vp IHN1YnBvZW5h IHBvbXA= IFBvbG8= Y29l dmo= LndvcmtmbG93 ZXN0cmU= IGNvbm5leGlvbg== aW1ldHlwZQ== LlJvd0NvdW50 IERoYWJp IGVtaXRz LkJvcmRlclNpemU= KHBvbGljeQ== LG1lc3NhZ2U= T25Jbml0 KShf IGZpbmVy W251bWJlcg== IHNjcmlwdHVyZQ== UmVmbGVjdA== LXRvb2xiYXI= KFBBVEg= IEVOVFJZ KC4uLikK LWRvbWFpbg== KHN0cmlw KSgq IGNvbnZleWVk IGF0dGVudGl2ZQ== w6hnZQ== X0xE IEdyYW50cw== LWhpZ2hsaWdodA== IGJyZXRocmVu 2YjZhA== IGRlcXVldWVSZXVzYWJsZUNlbGxXaXRoSWRlbnRpZmllcg== YXB1bHQ= LmJvdHRvbUFuY2hvcg== IG9wY2lvbg== IG91dEZpbGU= cmVhdGluZw== ZGlu X3NhbXBsZXI= CWdsRW5hYmxl cHR5cGU= X0NPTkRJVElPTg== LWVmZmljaWVudA== Jm8= IGpj 0Kc= L0Zvcm0= KWZyYW1l IGJpbmdl X2Nsb3N1cmU= SU1B KG5leHRQcm9wcw== CWNk IGdldE1lbnU= IGdldFN1cHBvcnRBY3Rpb25CYXI= IG1hbmlmb2xk WlI= Y2hhbmdlcg== YXNzaW5n ZGlzaA== IE1vdQ== Lm5ldGZsaXg= IHBvc3Rjb2Rl IHdvbWI= IEFycw== 4oCmKQ== IGxpbmVXaWR0aA== RGVhbA== YXJhcw== IEdyYW50ZWQ= IGhvYXg= IGRpcmVjdGlvbmFs LktleUNoYXI= ID09Ig== IFZlcmRl X0tQ IHN1cnJvZ2F0ZQ== IERVSQ== dXB5dGVy IHBlbnNl IFJBTkQ= KGV4Yw== IG1pc3VuZGVyc3Rvb2Q= IENVVA== IOS4rQ== CXRp X2luc2lkZQ== IGJpY3ljbGVz IGRlYW4= ZGlyZWN0aXZl LnBlZXI= aWNpbmE= X2l0ZXJz IGltcGx5aW5n Lm9idGFpbg== IHBzeWNoaWF0cmlzdA== dXNlclNlcnZpY2U= ZWxpdmVyeQ== CXBhcnQ= IGh1cnJpZWQ= IGJ1bQ== IGhlcGF0aXRpcw== amlk J10+Owo= IHVuY29udmVudGlvbmFs IGZhc2Npc3Q= IFBleQ== 6K+t Jyl9PC8= LkNsdXN0ZXI= IEJpdENvbnZlcnRlcg== ZWRhdGE= zr/PhQ== 4pSC QXBwQnVuZGxl Lmh0dHBDbGllbnQ= IGFwbw== QUlOUw== IFZG X2dpZA== IG9kZQ== RVJSWQ== IFJlY2VpcHQ= IENhbmRsZQ== IG1pc3Npb25hcnk= IENyYW5l IFNUQVRFUw== Ym91dA== YXlhcmFu Li4uIiwK IGl0aW5lcmFyeQ== KGxhdGl0dWRl IENPTlM= L3NpZGViYXI= U3BpZGVy R1JJRA== LmRlYnVnTGluZQ== IGAn LXllbGxvdw== IHJlZmluZW1lbnQ= IE1ha2V1cA== IERhbm4= KCk7DQoNCg0K IG92ZXJjb21pbmc= IEJhdHRlcg== L3BhY2thZ2Vz INCy0LjQtA== IGFyeQ== 4oCdPw== cmVsbGFz IGdydXBvcw== IFR5cGljYWw= IE1vbnNhbnRv SW50ZXJzZWN0aW9u IHR5cmU= PT09PT09Cg== zq4= OzsKCg== IHRyaXZpYQ== X3Rha2Vu IHNtdWdnbGluZw== IG5hcnJvd2Vk 4bqpbQ== IHBhbGFicmE= Y2Vh cGFydGljdWxhcmx5 QWNjZXNzVHlwZQ== IGNvbGU= VG9GaXQ= IHZlcmU= IENPUw== L3ZpZGVvcw== ICgkKCIj IGNyYW5l Lmhhc01vcmU= JHBhdGg= aXZpc20= IHN1cGVydmlzb3Jz IEZsb3Jlcw== cHJvZ3JhbXM= LlppcA== IGltcGFjdGluZw== IG1vdG8= IFRK cGVnYXdhaQ== X0tJTkQ= X2ludGVyZmFjZXM= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IExlYXZpbmc= VGV4dFN0eWxl YmVpdGVy IFdpbm5pbmc= LXBhcmFt R2FyeQ== IFN1bnM= YWzEscWf ZHVjaw== IHRocmVhZElkeA== IHBvZXRz IHBsZWFkaW5n IENvcmludGhpYW5z ZmNj YXdhaXRlcg== Ki0= IHBlcnNldmVy IGFjdGl2aWRhZGVz X291dGxpbmU= LXBsYW4= LnNjcm9sbFZpZXc= cXVhdA== IHNhbXN1bmc= IGxldmVsaW5n IHNwbGl0dGVy X2dlb20= IHByb21pbmVudGx5 IFNlZWRz 5Zyf dWFpcw== ZWZ1bGx5 SUVudW1lcmFibGU= YWRkcw== dmVyc2F0aW9ucw== IGRpc2FibGVz QU5EUk9JRA== IFdlaXRlcg== X0Zvcm1hdA== X3NwbGl0cw== IEFjdGl2ZVN1cHBvcnQ= KGNzcw== X21pY3Jv c3RyaWtl IENhdXNlcw== IHZpc2libHk= Q2FuY2VsYWJsZQ== IFlvc2g= IGRyYWluaW5n IGNvbGk= YXNsZXk= IFJlc3BvbnNpYmlsaXRpZXM= IFN1dHRvbg== KnRoaXM= U2hhcmVz LWdyYXBo IGVubGFyZ2Vk Um91dGluZQ== IGZyYW1lYnVmZmVy IGFpcmZsb3c= IHRyeA== IExlaWdo IEtlbnM= KGhlYXA= IHNwaWxsZWQ= U0NBTEw= IFZlbHZldA== YWN0dWFsbHk= X0VOQ09ESU5H IFdvcm0= KSl9Cg== IERhbmdlcm91cw== IHN1cGVyaW50ZW5kZW50 Lmxvb2s= IHNoZWw= L2Zz U2FmZXR5 5a6L LkRFRklORQ== X2ZhY3RvcnM= IHBhcnRpZG8= IG9wdGltaXppbmc= RG91YmxlQ2xpY2s= LWNvbW1lcmNpYWw= IGxvZ2ljYWxseQ== Y3ljaA== dXJ2ZQ== wrU= QUlMWQ== IHJlYWN0aW5n X0VYUFI= a8O2 LmxvY2FsaXplZERlc2NyaXB0aW9u IGFzdG91bmRpbmc= IHBhc3RyeQ== IGdsb3NzeQ== IGJlaGF2ZXM= L2Vj IGNsaXBwZWQ= IHByb3dlc3M= IFVC LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= CWFscGhh IGV4dHJhdmFn IGZpbm5z KFNvY2tldA== IFVuc2FmZQ== IHF1aWVyZQ== X2VuY29kZWQ= b2x1bWJpYQ== IHphYg== c3RyaWN0ZWQ= IG1uaWU= IE1PUw== IGF0aGxldGljcw== IEtlbmRhbGw= IOyYpA== QVZBSUxBQkxF aW5veA== X09QQ09ERQ== IEl0ZW1UeXBl IGNlbnRyaWY= IGludGVyc3RhdGU= X2Jvb2tz LmRlbGl2ZXJ5 IExpc3Rl b3JzaQ== X3NlY3VyZQ== Z3Jvd3Ro IHZlbnRl IHBzeWNob2xvZ2lzdHM= IENDUw== dWRlbmNl IGNyYXdsZXI= L21hbnVhbA== IHRleHRTdHlsZQ== IHBhbGluZHJvbWU= IGNvbmR1Y3Rz dGFibA== V2l0aFVSTA== L3JpZ2h0 IERyYQ== Lk1haWw= KHNlYw== b2Z0d2FyZQ== IHNldWw= IHdyaW5rbGVz X0ZX QXk= IEVybnN0 dW5iaW5k IGNvbW1lbmQ= X2hvb2tz IE1vbmV0YXJ5 IFFR dW5pdE9mV29yaw== IEVudGl0eVR5cGU= IGhvcm1vbmFs LkZBSUw= QFNsZg== L2NoYW5uZWw= c29ubw== RGFucw== X1JlZ2lzdGVy SGFu T1JC SktMTU5PUA== dmVudGVk IGxvbmdzdGFuZGluZw== IGJnQ29sb3I= IDsp IFJvYmJpZQ== KCIuIg== IGFqdXN0 LmhhbmRsZUNsaWNr cmF0aW5ncw== cHRlcg== IGVyb3RpY28= IEplbGx5 KioqKioqDQo= LkRvZXNOb3RFeGlzdA== CWJl JHRlbXA= Ij4mIw== 55u0 CVB1YmxpYw== neyytA== IEJ1aWxkaW5ncw== LWFsb25l LCdc IHN3YXBz IHBlcnBsZXg= X3Byb2Nlc3NvcnM= INC00LI= IE5ZUEQ= UENS 5q+P IGhvamU= RWRpdE1vZGU= IHZ1bGdhcg== IHZlcmRl ICgpPT57Cg== L2Zyb250ZW5k IHRlbGVmb25l IGxhbnRlcm4= LnBhZ2VY IER1ZA== bGltaXRhdGlvbnM= IG5vdGlmaWVy IE1lc3NhZ2luZw== IWltcG9ydGFudA== IHN1cmdlb25z KT0o Rml4ZWRTaXpl Llpvb20= aW5hbg== IGNyZWRz IEJVRg== LlN0YWNrVHJhY2U= IHdhcnJhbnRlZA== IHNvdXJjaW5n IGNvbm5h X0ZSRQ== IHdvbGw= IHJlZmluaW5n X0FMTE9XRUQ= X212 IFdvcmNl IFNpbmNsYWly Q2hlY2tzdW0= IHVubG9ja3M= IE1hcmtkb3du IGZpc2hlcm1lbg== RHVi IEJvbm5pZQ== ICAgICAgICAJCg== IHZlcno= Piw8Lw== PjwhWw== Wyc8ew== amVj IEVyZw== cmF0aGVy IHBhbGFicmFz IFBBQ0tFVA== bWlzZQ== ZGFx IE9rdG9iZXI= KEdMRlc= IEhlbnJp IEZvdA== IER1bw== IE5FUw== IHNhbHNh IHVuYmlhc2Vk QFNwcmluZ0Jvb3RUZXN0 IG9mZnM= 5YWs5Y+4 IGFtb3VudGVk RnVsbFBhdGg= IHF1YXQ= IG1haWRlbg== IFN1YnNldA== IEFwcGxpY2F0aW9uRGJDb250ZXh0 bWlycm9y bmV4 LnN0cmVldA== c2V0UXVlcnk= JHJlc3VsdHM= YWRlcm8= Z3Jlc3Nvcg== X2J1Zw== aXNzZXI= IFNlYXJz IGZpbGxDb2xvcg== Lm1hc2tz IERpYWJsbw== X0FORFJPSUQ= 0J7QsQ== IGZyZWFraW5n IHJpbnNl KHBrdA== IGJvb2tsZXQ= IHNhbmN0aW9uZWQ= IHN0cmVhbWVk dGFicGFuZWw= IFJldHVybmluZw== UGxhaW5UZXh0 TE9ZRUU= YWxlc2Nl 0L7QutCw IEZpeHR1cmU= YXNzYWRvcnM= IGRpc2JlbGllZg== IEx1c3Q= IHJhZGljYWxz LkZlYXR1cmVz X2luY2hlcw== KHByaW1hcnk= IEpNZW51SXRlbQ== X3Rha2U= IENva2U= VW5pdE9mV29yaw== IFdDSEFS IGNvbnNjaWVudA== b25lbnVtYmVy UElORw== YWJham8= XSgi LnNhbGVz X2hlcmU= IG9mZnNldFg= dGFnTmFtZQ== INmK X1JpZ2h0 aWxpZw== dGhlVmFsdWU= b2NhcmQ= IGNvbnN1bHRhbmN5 IGJsaWo= Z29ybQ== TmF2aWdhdGU= xLFj SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u X3Zl LkNPTlRFTlQ= dXJvcGVhbg== LnJhZGlv IGVudmlzaW9uZWQ= IFNPTQ== LnNk QU5USVRZ IENBTExCQUNL IGhn ZGVjcnlwdA== 566x XFF1ZXVl IE1JTEY= IHJlY3Vyc2U= IERhbnRl LmdhbW1h b3Jrcw== KCIiKSkK IEdyaW0= Lm9wZW5n IE1pY2hlbGU= QW5hbHk= IFBydQ== X3JlZGlyZWN0ZWQ= X3BhbA== ZmFsbGJhY2s= IOWtlw== IGRpbm5lcnM= R2VuZXJhdGluZw== JCIs aGlzdG9yaWM= Z2V0U2ltcGxlTmFtZQ== IE1pbGxpb25z LWdsb2JhbA== cm91dGluZw== IGNvbnNvbGlkYXRl IHJlY29pbA== T2JqZWN0T2ZUeXBl IGRlc3BlcmF0aW9u QW55d2hlcmU= IGdldE1vZGVs X2tpbGw= b2Jvb2s= L2Rpc3BsYXk= Ii8+Cgo= IG1heW8= INGB0L/QuNGB0L7Qug== IGdvYWxpZQ== eERG IFByZXBhcmF0aW9u IGRlcGVuZGFibGU= LklOVkFMSUQ= Li4uJw== bmF0YWw= bW9kdWxlTmFtZQ== Y2FyYm9u UEFM IG1lZQ== IGNhc2luZw== 6aG555uu bmljYXM= IEhhbW0= IEJhYmU= b3dhbmU= IHN5bm9ueW0= IFFpbg== aW9j ZW1vdGlvbg== IGZlcm1lbnRhdGlvbg== IGN1bXBs IEVsZWN0cmljaXR5 KFJPT1Q= dGVzdGVy IEh1c2JhbmQ= IEJhdQ== X01BQ1JP YWtlbmluZw== ICAgICAgICAKICAgICAgICAKICAgICAgICAK LmZpbg== IENvbmZpZGVudGlhbA== aWV6 TUJFUg== IHNwZXJtYQ== IEhQVg== dHhu Q09OVEFDVA== LlRocm93 IG11cmFs IFR3aXN0 KCZfX18= IGpk IGVtcG93ZXJtZW50 IGRpc3RpbnQ= IGJvbWJpbmdz T3V0Y29tZQ== IHNob3J0ZW4= 5b6M QUNDT1VOVA== X2NvdmVyYWdl ZW5jbw== X3JlZmVy c2V0TWVzc2FnZQ== IHJlcGVyYw== cHRpZGVz IGRlaXR5 dWNoc2lh KGh0 LnN1YnNjcmlwdGlvbg== IHJlZGlzdHJpYnV0ZWQ= IER5bmFzdHk= X3Zj LWZyYW1ld29yaw== cnlmYWxs IGdhdGluZw== IExvcmVuem8= b29kb28= IGRpZ2VzdGlvbg== IGZvb3Rpbmc= CUhhc2hNYXA= cmVhbERvbmFsZFRydW1w IGFwYWNoZQ== KHZhbG9y IHBvaXNvbm91cw== LlBlcm1pc3Npb24= IHBhcmFtb3VudA== d2VpdA== bGxhbmQ= IGh5cG90aGVzZXM= IFByeQ== IGhvbWVt KERldmljZQ== aW5kaWNl ZXZh cHJlc2VuY2U= IEJlbnRsZXk= IEVuZGluZw== IGRvbWVzdA== CXRw CWVycm9ycw== Y29ybmVy bGRh CgkJCQkK X1BFUlNPTg== IFNlcmdleQ== IFBhcnNlcw== LWZpY3Rpb24= LkJhY2tncm91bmRDb2xvcg== IHNvbW1lcw== IGNvb2xlc3Q= IHJ1YmJsZQ== LmpvYnM= IGRyb3duaW5n YWRvcmFz IHdpbmdlcg== IEluY3JlYXNpbmc= 2YrYqQ== QkJCQg== KFJvbGU= IG9kZGx5 RGV2RXhwcmVzcw== LXV0aWw= IFNoZW1hbGU= cHJpbWl0aXZl IGFmZmlybWVk LnJldHVyblZhbHVl LWxpdmU= IEFjdGlvbkNvbnRyb2xsZXI= w6ts ZXJjdWxvc2lz IHByYWt0 IGdlb3BvbA== cGljcw== Q0RD LkZs LnNpZA== cmllYmVu KHZhcnM= K3NlbGY= IGludGVyaW9ycw== IEF1Z3VzdGluZQ== IjpAIg== IFN0ZWFsdGg= IGdldENvbG9y IEdlbnRsZQ== fiI6Ig== IHdoaW0= KCc8Lw== IFNTRQ== IFZpb2xldA== X2NyZWQ= IGF0YQ== IEF6ZXJiYWlqYW4= ID8/Pz8/ LmV2ZXJ5 KGNvbm5lY3Q= IERyb25l IHRvbGVyYW50 c3VidG90YWw= X3NodWZmbGU= dXN0YWluYWJpbGl0eQ== cHJlZmVycmVk IFNFWA== IGNvbmdyZXNzbWFu IG5hbW9ybw== IGhvbm9yYWJsZQ== IGFmdGVyRWFjaA== IMW8eWM= SEFN LnRvbQ== IGVsb25n IFNlcmlvdXM= LVNlbWl0aWM= 0KHRgg== IGZsYW0= dGVuZXI= LlRFU1Q= IFRSQUNL IFBoaWxpcHM= IEFyZW4= IEhpY2tz b2luZWQ= IEZhaA== aXNzZXVy IGNpcmN1bWNpc2lvbg== KHR3ZWV0 IHBvaWw= IFNlZW4= X01BUFBJTkc= IGludmFyaWFibHk= IEZ1c2U= ICc/Jw== PXBhc3N3b3Jk IOuCmA== IElIdHRw c3R5cGU= Zml0bmVzcw== LlRhZ3M= IOqwnA== KERXT1JE IHF1YQ== IE1hcnZpbg== Ik0= LmlzQXV0aGVudGljYXRlZA== Lmd1YXJk KT8KCg== CQkJCQkJCQkJCQkJCQkJCQkJCQ== IFNoaXBz IHNlbnNpdA== fTsNCg0KDQo= YWhhaGE= IGxpZXV0ZW5hbnQ= IEphZ3Vhcg== IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= VUNF SW5zcA== YWludGVy X3BvbHlnb24= LkRvd24= IHRleHR1cmVk LnNldEFjdGlvbg== b2dy IHNjaWVudGlmaWNhbGx5 IHNocmluZQ== IGNsb3VkeQ== LkhvdXI= UG9zdEJhY2s= QVpZ X2NhbmRpZGF0ZXM= KFNlYXJjaA== IGNvbW1pc3Npb25lcnM= IEJpZW4= IGRvY3RvcmFs IEZlZWxpbmc= X1ZFUlRJQ0FM IEJk bmdpbng= IOWcqA== X2FyZ3Y= UlNB IGVsZGVzdA== LWhlYXZ5 Q09OTg== IEh0dHBOb3RGb3VuZA== LWNvbHVtbnM= IE5QQ3M= IGNhZmVz IGfDqQ== IHN0YWxscw== IGZvcmtz IHBvYmw= U3RyZWFtcw== IGJhc3RhcmQ= IFJhcHRvcnM= IEdyYW1teQ== IEdlaA== X1RpY2s= KHByZWc= IGxpcHN0aWNr X3J1 PEg= IMSRaQ== LkNhcg== IHNwYXJlZA== bW9uaWM= aW5jdGlvbnM= QWZyaWNh KGRpY3Rpb25hcnk= ICoqKSY= YGBg X3ByZXNzdXJl bWll IFJvbWFuaWFu L21hcms= IG1haW50ZW5hbnQ= IHRyZW4= IFBvc3RncmVTUUw= UkVMRUFTRQ== SlBFRw== IGRlZGljYXRl TWFrZVJhbmdl IHJvYm90aWNz YWt0aXY= JSUl YWFy dmlld01vZGVs KG1hYw== dWNoZXI= IGRlYmVu TG9jYWxpemF0aW9u 0L7Qt9Cy0YDQsNGJ0LDQtdGC LnNldFRvb2xUaXA= LmZhc3Rqc29u IHBlcmVubmlhbA== LWNoaWVm a2lzaA== IGF0dGlj U3VidGl0bGU= IFNsYW0= IExpdGVyYXJ5 ZXJuZXM= INGC0L7Qu9GM0LrQvg== IHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQ= LkVycm9yTWVzc2FnZQ== YmluYXRpb25z Ikw= IGZvcmJpZA== IGxvZGdlZA== Lkxpc3RCb3g= IFBTRA== IGN1bHR1cmE= VU5DVA== Ik9uZQ== IEd1aWxs IEJhdHRhbGlvbg== IGNhcmVnaXZlcnM= IEtsbw== QmVoaW5k IHNlYXJjaGFibGU= X0JPVU5E Uk9D IHN0ZXJlb3R5cGU= IHByZXBlbmQ= aW50ZXJzZWN0aW9u QmFza2V0 KGxv IGZpbGVJbmZv IFVJU2Nyb2xsVmlldw== ZWNlc3NhcmlseQ== IENoZXM= LWluc3RhbmNl IGFwcGFydA== IEFtYXI= IHJvd0RhdGE= IGF5dWRh IGNhcmF2YW4= X3BpY2tsZQ== IGNoYWluaW5n KV07Cgo= IGJveGVk YWVwZXI= IEVWRVI= eW50aGVzaXM= LWZhc3Q= IOuwsA== 5Y+v5Lul IHZvbHVudGVlcmVk IGV4aWc= U0lERQ== IFBob25lTnVtYmVy dWxhaXJl IEthZA== IGRhcm4= IHlhaw== IEJsaW5r LnNwaW5uZXI= IG9yZGVhbA== X2VuZW15 IGdldFM= IEJvbw== TGluZU51bWJlcg== X0xPT0s= RUxDT01F IHNlYW1z IHNhZ2Vu aXNjbG9zZWQ= KHJheQ== W2dyb3Vw UFRT Lk5hdmlnYXRl IE93bA== IGRidXM= IGltcGF0aWVudA== IEd1cHRh KG9iamVjdHM= IGFwcmls LXF1 IG91dHJhcw== IFRIRU0= IEVNQw== RW1wbGVhZG8= IGdydWI= SUFN IHZlbm9t IHRyYW5zY2VuZA== IHZpY3RvcmlvdXM= IE1heWVy INGC0L7QstCw0YA= IEtlbGxleQ== SW5wdXRHcm91cA== IHJlZmlsbA== V2l0aFR5cGU= IGNoYXVmZg== b2xkZW0= X3RpZA== IGZsdXNoZWQ= XHN5c3RlbQ== LnJhbmRyYW5nZQ== IFBPU0lUSU9O IFRlbmFudA== Y29udmVyc2lvbg== Y2FsbGluZw== KCkpKSwK 0L7QvdCw IHNpZGV3YXlz IGxheA== CXJlcA== YWVwZXJuaWNr IG5lZ2Vy IEZseWVycw== ICJALw== dXBha2Fu X2VsYXBzZWQ= dHViZQ== UG9zWA== LnNleA== IGzDpHNzdA== IEdyYXZl 5Y+C KGVtcA== KHN0cnRvbG93ZXI= Y29udmVydGVy IFNwb25zb3JlZA== KHdvcmtlcg== IG1hdHJpbW9u Q29tbWlzc2lvbg== KGh3 X1NJR05BVFVSRQ== bWVr IGFsZ3VuYXM= X0VU aXN0cmluZw== THY= U2xpZGVz IHdlYWtTZWxm IHdr IFppZw== IHB1YnM= IEJSQQ== IGZsdW9yZXNjZW50 Y2Fycnk= LmVyYg== IEluaQ== LkRyYXdTdHJpbmc= IFNFUA== dXR0ZXJz 2ZE= Um95YWw= IGNhYmJhZ2U= IFN1aw== XT49 IEVkaXNvbg== IHNwZWN1bGF0ZWQ= LmRvd25jYXNl IHRwaA== IMOD IGd1bnNob3Q= cnBt IGZsdXR0ZXI= IGFueA== YXplcw== UU9iamVjdA== IEZhdm9y IG1vZHVsZU5hbWU= JnM= bGVo LldlaWdodA== IFdBTA== X1ZBUlM= IFdhc3Nlcg== IG91dGJvdW5k IGVyZm9sZ3Jl LnZhbG9y KGxpZ2h0 IE1hZ251cw== IHpvZWs= eWg= IHN0eWxlc2hlZXQ= Pm0= V2hpdGVzcGFjZQ== IFsnLw== CVJlcXVlc3Q= X2luY3JlYXNl LWRpc3RhbmNl aWNvbG9y aGNp IEtJTkc= UFg= b2ls ZW1pbmc= bmFtZW50cw== RGVmaW5lcw== IFstLQ== IHZhcmlvcw== IFBSRVNT LGF4aXM= IENvbGxpZGVy KX0KCg== IGZvcmNpYmx5 IHN0YWF0 X1NUQU5EQVJE IG9jY3VsdA== IGJhcHRpc20= IEN1bm5pbmdoYW0= X2J1aWx0aW4= Q1BG W21heG4= IFJIUw== IE9uZXM= KF86 IGluc2VjdXJpdHk= LnJlZ2lzdHJhdGlvbg== aW1wbGlmaWVk IFN5bXBvc2l1bQ== aHJlYWQ= IHF1ZWxsZQ== IGZyZW56eQ== Q2FsaWJyaQ== IFNQRUVE b3Vp KCldLAo= YWNjb3JkaW5n IG1jYw== IGFzaWF0 IGFkamFjZW5jeQ== IEFibGU= IHNhbGRv bm9zdGk= IGRpbWU= ZXRyYXRpb24= IE1vZGlmaWNhdGlvbg== IEhlcmI= IHBsYWF0cw== IGludGVycGVyc29uYWw= IO2ZleyduA== YXJtZQ== IGNvbWVyY2lhbA== IEJhdGVz KGNhcmRz LmdldENsaWVudA== Lk5PUk1BTA== CVRlc3Q= ICAgICAgICANCiAgICAgICAgDQo= IFJhem9y d2Vpcw== SVRIVUI= IEVOVElUWQ== YWdpdA== IG1pbmVjcmFmdA== cHJvcG9zYWw= IHNhbHR5 YW5kcg== IENvbmNsdXNpb24= IHBydWRlbnQ= IFtA IFB1cHBldA== aWdvbg== IEdvdGhhbQ== IGNoZWVycw== IFNoYXk= IGpp IEdESw== ZXhwZXJ0 IGZ1bmt5 IFphbQ== W05VTQ== RGVxdWU= X1RXTw== XHZpZXdz IHByb2pla3Q= IGRyb3duZWQ= a2lkcw== LnNoZWV0 IG5vbmQ= IGNvdXJ0ZQ== IC4uLgoKCgo= IHBpY3R1cmVzcXVl IHR1YmluZw== KCkuIg== amV0cw== X1B1YmxpYw== IEZhcnI= IEFyZA== T1VSU0U= IGthZGFy IFByb2dyYW1t LmtleXdvcmQ= CSAgICAgICAgICAgICAgICA= aWVkYWRlcw== YXRvbG9neQ== IER1bmQ= PWNvdW50 IHNsb3dkb3du LSIs LkZvcmVncm91bmRDb2xvcg== UnVucw== LlR5cGVPZg== JGN1cnJlbnQ= IHVwc2NhbGU= CXVuaW9u KGNoaXA= dW1pZGl0eQ== PVtdDQo= IGhhcnQ= ICRfWw== eW5lYw== LlVzdWFyaW8= IG9jdGF2ZQ== IHBvcnRyYXlhbA== INC90L7QvNC10YA= IE9jY3VweQ== X25hbg== IFNtYXJ0cGhvbmU= aGluZA== IHdpbmRzaGllbGQ= IGxvbmVsaW5lc3M= L2NoYXJ0 IGFjdGl2YXRlcw== LnJpYmJvbg== IGxhZ2k= IHBhcmFjaA== SHlwZXI= c2NhbGVk VGVz IEJlZXQ= IGRpc3NlY3Q= IENpYw== IH0sCgoK PigpCgo= LnN0dWR5 IGNvbnRyYXN0aW5n WkVSTw== IHR1bmE= IENob3c= X3Zh ZmF2b3I= W0luZGV4 IFBvd2VyU2hlbGw= KHByb3Rv JykpOgo= X2Zvcm1hdHRlcg== Q2hyaXN0b3BoZXI= T3JOdWxs Q0lTSU9O X2NvbnN1bWVy UGFzdGU= KG5vbWU= ZW50b24= IHVucmF2ZWw= X2Rvbg== IHBhcmVudGhlc2Vz IE5VSVQ= L10= IOKIpw== c3RhY2xlcw== L2NvbW1lbnQ= dXR0aW5n IHNsb3BweQ== KFt7 LnNhdg== dG9Kc29u IOu5hA== IFByYXR0 Lm1vZGlmeQ== LklzQ2hlY2tlZA== IHZlbmV6 IFNFVFRJTkdT amF3 IGZpcmVzdG9yZQ== IGNvbnNvcnRpdW0= IGthYg== IFN1cHBvcnRpbmc= IFRoZXNpcw== IG5vbmxpbmVhcg== IHRleHRib3g= LiIiIg== IEVuZXJn LkpPcHRpb25QYW5l IGludGVycnVwdGlvbg== w6h0cmVz IHNoYWxl IFBsYXllZA== IHNvY2lhbGU= WUdPTg== X0JBVENI IHRyaW1lc3Q= IFByb2NlZHVyZXM= IGF0dGVuZHM= IiR7 ZXZhbHVhdGlvbg== LlByb2dyZXNzQmFy IEFsZXhhbmRyYQ== Y2jDqQ== X1NFUVVFTkNF IGNyb2NoZXQ= Um9z IGlobmVu ICIqKio= IGFyb3Vz IG1vZHVsdXM= X0xJTlVY U3RhY2tTaXpl aWF0aW9uRXhjZXB0aW9u Lk11dGFibGU= IClb IHBpaQ== Zmlmbw== X1BJQ0s= UHVycG9zZQ== KFN0dWRlbnQ= IE5pY28= ZXN6 L3Nt IFBQUA== W2lucHV0 5Y+Y IGJsYXN0cw== IE11dHVhbA== cm9sbGV5 IHV0aWxpc2Vy OlRoZQ== 5Z+6 LmRlY29kZXI= IG9iamV0b3M= IGF3YWtlbmluZw== IEVubGlnaHQ= CWFsaWdu X3Jld3JpdGU= L2N1cnJlbnQ= IGRhcmF1Zg== Q2FudGlkYWQ= LG5w IHZlbG9jaXRpZXM= Q0xS IG1pc2luZm9ybWF0aW9u IHN0cmVhbWxpbmVk IGdyb29taW5n IGF6aQ== b2xn IGNvbnN0aXR1ZW50 IHdlZQ== 0YXQvtC00LjQvA== IEFsb25zbw== aWV0Zg== Y3Rlcg== IHRoZXJtb3N0YXQ= KEND IHN0YWNraW5n X2NvbnZlcnRlcg== IERpc25leWxhbmQ= CWZpbGVz SUNJ X1RPUElD CUVsZW1lbnQ= YXJnYXM= IFxA YW5jb2Nr IEJhc2VFbnRpdHk= KCItLS0= cmJyYWtr IG5lZ2F0aXZlcw== IHZ3 PWZvcGVu Y2hlbWlzdA== QXJjaGl2bw== IGAu IEZPVVI= KGFp VGFibGVXaWRnZXRJdGVt PD8+Pg== LnByZWQ= VHJhaWw= LWZhY3Rvcg== IEltYWdlQnV0dG9u cGVyaWE= IENlbGVicmF0aW9u LlJlc3BvbnNlQm9keQ== dXJjaGFzZXM= IGdldEtleQ== IENyYWI= IHFp IFdpY2s= IGNoYXN0 IC4uLi4uLg== IGNvbWVueg== IHNoYXJkcw== IGTDqWNvcg== IGhhbHZlcw== UVVFTkNZ IHBvd2VyaG91c2U= TElORw== Q2xhc3NMb2FkZXI= Y2VudHJl LXNlbmQ= bWFo IHNocmVkZGVk IFRJRkY= aW5rYQ== LgoKCgoK IGRlc2lnbmF0ZQ== IE5pZ2h0bWFyZQ== IEdlbmV0aWM= X2NoYW5jZQ== KGFuaW1hdGlvbg== cXVpbGE= X3NwZWNpZXM= TkVZ b3lzdGljaw== cmVsbG8= zqw= IGRpdmlzaXZl IFJFQw== IHN0dW1ibGU= KGZha2U= IExhY2U= YW50YWdlZA== YWtlc3Q= cHJvbW90aW9u IEZvd2xlcg== PWNlbnRlcg== IENpdWRhZA== UmFkaQ== IFNsZWVwaW5n dXRyb24= IHF1b2k= IFJBRA== IGV4cG9uZW50aWFsbHk= IEJyZWVk IG1vbm9wb2w= aGlnaGVzdA== eG1sbnM= SW50UHRy IHR1dHRl IFJlZnJpZ2Vy IOmhtemdog== IHpvbmRlcg== bGJyYWtr O2VsZW1lbnQ= IEhlZA== UmVsYXRpb25z 64U= Q29ycmVv 5aC0 IE1pZ2h0eQ== QU5HTw== X2NvbXBpbGU= LmdldENtcA== IGludmFkZQ== LnNwcmluZ2Jvb3Q= IFR1bmU= X3NuYXA= X0ZFRUQ= IGRlY2lwaGVy PXNpemU= X2ZyZQ== IFRpbGxlcnNvbg== 0LjQutCw dGlnaHQ= IGN1bHByaXQ= UlRM IFBhcmU= KHB1Yg== ZWdvdg== IHBvbnRv IGNvbnN1bA== SlNJbXBvcnQ= IHZlcndlbmRldA== IEJvb3N0ZXI= 5b6F IGNhcnJvdA== dmVyaWdl KExQ IHd4VA== IGltcHJvcGVybHk= Iik6DQo= IHN1Y2U= L21vZGFs IElDVA== LikuCgo= X21hcmtz IENhY2hlZA== IEN1cnJpY3VsdW0= QnM= CUpPcHRpb25QYW5l m4Q= IGNvZ25pdGlvbg== IE5lZ290 PXJlc3VsdA== X0ZvbnQ= YXJpbmU= IGNvbnNwaWM= IENhbGN1bGF0aW9u IENFT3M= LXRyYW5zcGFyZW50 IEJlcmVpY2g= 56iL5bqP Lmh5 LkFsaWdu IGhvcGVsZXNz IGNvbG9tYg== dXJiZWQ= IFNBWA== IGVpbno= KHpvbmU= IG11enpsZQ== IHRyZXNwYXNz IEFicmFtcw== IGNvbXDDqXQ= IFNhbmN0dWFyeQ== IE5TVGV4dEFsaWdubWVudA== IHN0YXY= IHByYWdtYXRpYw== c3RyZW5ndGg= V2l0aE9wdGlvbnM= LmJhbmQ= YXBoYWVs QXVzdHJhbGlhbg== IE9TRXJyb3I= TWFuY2hlc3Rlcg== SWRl XFJlc291cmNl 0L7QtNC10YDQtg== IHppZQ== SGFybmVzcw== LlR3ZWVu Y2Ftcw== 4pyU LXNjYWxhYmxl LW9r IGpsb25n IE9sc29u IE9ha3M= LnNsaW0= IHPFgg== IG5ld09iag== LkludmVudG9yeQ== IGtlbm4= IG5pZ2h0bWFyZXM= aXJjbGVz Lm50 Z3Jlbg== IFRFTg== IFNjb3Rz IERpc2FiaWxpdHk= X21hbmlmZXN0 LnNpZGViYXI= IHNodWZmbGVk IGh1bWlsaXR5 LnRhcA== IEdyYWlu bm90aWNlZA== 77yJ44CC X2hwcA== IGRpbGF0aW9u IGhhbmRpY2Fw Z2V0RGF0ZQ== IGR6aWHFgg== JykuJzwv cmVjb3Zlcg== eXNp KGdyYXk= YWhrYW4= IGludGVyZmVyaW5n X1RPVUNI X3JlZHVjdGlvbg== QWx0ZXI= IGN1Yw== RXhwZXJ0 IEx1bXA= Wzpd IHJlbG9j IGNvbmR1Yw== Q2hhcnNldHM= Lmxpc3RlbmVycw== LWludmVyc2U= IHN1bW1vbnM= IMO6bmljbw== IE9W IFNpY2hlcg== IEpGYWN0b3J5 LmdldEJvdW5kaW5nQ2xpZW50UmVjdA== amg= IHNrZWxldG9ucw== IEFzaWFucw== IEFNQw== aXNlbGVjdA== LmNsaWVudEhlaWdodA== KGZy SGFzRm9yZWlnbktleQ== LnJlbGF0aXZl INiu IG11bHRpY3VsdHVyYWw= X0NPTEw= IG1pY3JvYmlhbA== IGltcG9ydGFudGVz U3BhaW4= IGN5bGluZGVycw== aWVuaWU= X09XTkVS KERJUw== IGZhbmRvbQ== KG54 IGFwbGljYWNpw7Nu b2NhdG9y ZXNzaWFu IENsYXVkZQ== IGludG9sZXJhbmNl xYJlbQ== IFNlbWFudGlj Lk1pZGRsZVJpZ2h0 QVJFU1Q= IHNpZXZl xLHEn8Sx aWNhYmxl ZXJnaWM= IGJhdHRsZWQ= b3JiaXQ= KXx8KA== dWVsZQ== IGZhc2NpbmF0aW9u IGTDpQ== IFRpZ2h0 X0lOQ1JFRg== LklzU3VjY2Vzcw== LE8= IHN0w7hy IHByZXNzdXJlZA== LlRSVUU= IFRob3VzYW5k IGdlbWVpbnM= IHpi IHNwaXJpdHVhbGl0eQ== IFpldXM= IFBvd2VyZnVs YmF0dGVyeQ== aXN0ZXM= IO2D LnNoaXJv IEhpcHA= ZGVjbHR5cGU= LmpmYWNl LnRlbXBlcmF0dXJl IG1hcnF1ZQ== X2JhZw== QXR1YWw= cHJpY2luZw== Q2xlYXJseQ== X0Fic3RyYWN0 w6lr YWhydW5nZW4= SW5zdHI= CQoKCg== IGNoZXdpbmc= IENvYWNoaW5n JExBTkc= bWFsbG93 IHNlcmlvdXNuZXNz X2N1dG9mZg== IFF1YXJ0ZXJseQ== fScpCgo= IikpKTsKCg== 6KeE LlBvc2l0aXZl LXBv eGl0bw== LlJhZA== IGJyaXNr IExpZmVjeWNsZQ== 5pWw5o2u5bqT ZmF0YWw= IHhwb3M= LkRldGFpbA== ZW5hbA== TUFUQ0g= IGhlZWQ= IGFmcmljYW4= RGFkb3M= YmVyYXBh IGhlbGY= JywnJyw= IGVudHJlcHJlbmV1cnNoaXA= IGNlcnRz ZWNl PnI= X2ZpeHR1cmU= IHBvb2xpbmc= IG1vZ2VsaWpr IHNldERhdGU= 5pS/ LWNvbXBsZXRl X1JBRElP IGt1bA== IGdvYg== X1NMQVZF IGZ1cnJ5 IE5VSVRLQQ== SUxJVElFUw== IG5vY2hl IGN1ZmY= IGNvbnRlc3RhbnRz IFdW IHBhc3Nwb3J0cw== IMWC IE5haWw= X2RlY2ltYWw= YXN0bGU= IFNvbGRpZXJz UmVjaXBpZW50 IGNvdXJzZXdvcms= IGltZQ== IFNlYXRz X0RM IGNvbnN1bHRhdGlvbnM= X0FEVg== IElrZWE= IG9maWNpYWw= IHJlZ2ltZW50 IEJhdGhz LXBpbg== X0JVQ0tFVA== QUJDREVGR0hJSktMTU5PUA== Il0pKTsK PE1lc2g= Iix7 IGRlcml2ZXM= 4oCcRm9y IFl1Z29zbA== aXNFbmFibGVk IHNvbGx0ZW4= IHBldGl0aW9ucw== b3ZlcmFsbA== IGdldFRvdGFs X0hJTlQ= TWludXM= IGFub21hbGllcw== IFBpY2t1cA== PT09Jw== bGVpdHVuZw== IERlaw== WVNJUw== LnNlc3Npb25z IGNhcmM= X0l0ZW1z IGludGVybWl0dGVudA== Lkpzb25Qcm9wZXJ0eQ== IG1NYXA= IEthaw== YWluY29udHJp X3NlZWs= IHVuYW1l X3B1dHN0cg== RmQ= TGltaXRlZA== c25vdw== IFBhdmlsaW9u IEV4YWN0 IHBvc3Rpbmdz CWRpc3Q= PHN0ZGxpYg== TGlnaHRz IGZpbHRybw== V29ya2Vycw== IHN5c2xvZw== R2lybHM= IEd1bQ== X3llYXJz J319Cg== IGjDpHQ= Z2F5 KHByb2I= ZWxsYXM= IHdpbHQ= Lm9wdGltaXpl X0RVTVA= KFhNTA== IERYR0k= IG3DqXRo SVRJWkU= ZWxlY3Ryb24= LmN6 IHN1YnNldHM= IHJlc3Bvc3Rh IGJlYWQ= wrsu IE9TQw== JnBhZ2U= Z3Bz YW5pYW4= UHVycGxl IGFjcm9ueW0= Uk9XTg== QXVkaXQ= IGNvdXJpZXI= YWxpZQ== IFdhc3M= IGF1ZGl0cw== IFBPVg== IEZhY2lhbA== X3N0cmNtcA== ICsl ICAgICAKCg== YCk7Cgo= RUhJQ0xF WyJA LW5hdGlvbmFs 6ZuF6buR 6L2v6ZuF6buR X2NvZGlnbw== IHVucXVlc3Rpb24= aWxtaW5ndG9u cmVxdWVzdENvZGU= IElX LnN0cmF0ZWd5 IFNZTUJPTA== IGdyw7bDnw== X2JlaGF2aW9y IHJlZnJlc2hUb2tlbg== IG1vbmc= aW1lbnRhcnk= IFNob3Bz KCc/ X2hpZ2hsaWdodA== X2xleA== IGlsbHVtaW5hdGVk IHBhbHA= LWluc2VydA== IHN0cml2ZXM= IGZvcnRz IGVtYm9kaW1lbnRz bXBqZXM= X1RPTw== IGRyYWdnYWJsZQ== IGltbWVyc2lvbg== cGlucw== IFJlZ2lzdHI= IEZyZWVCU0Q= X3hsaW0= IFR1bHNh U25hY2tiYXI= L2RhdGU= IGRhdm9u IGF1dG9yZWxlYXNl IHZhY2F0aW9ucw== CQkgCQ== aWNlcHM= IFJhbXA= IEN5bnRoaWE= X3BvcHVsYXRpb24= JCQk IFRBUg== ZW5nYQ== IHB1cw== IOW5 IHRpbWVzdGVw TGlmZXRpbWU= IGZpbG1lcg== WVNU IEdhemV0dGU= IG91dHNpZGVy IEVYUE9SVA== R09SSVRITQ== LmZsZXg= IFJvb3Rz KHBpeGVs emN6ZQ== YWlyaWU= IG92ZXJsb2FkZWQ= U1RSQUNU IENvdXJpZXI= 44GW Y29udGluZW50 RnJlZA== IHNlbXA= IFN0ZWxsYQ== IGRvdWJ0ZnVs YWRtaW5z IG9wdGluZw== TE9UUw== IG1hbmlmZXN0bw== LWZvbGRlcg== X2Ryb3BvdXQ= dXR1cmVz w612ZWlz YWNoaWV2ZW1lbnQ= IGNveQ== ZmFpdGg= X0hBTEY= aXJlY3RlZA== IGNvbnRhdG8= U2VtYXBob3Jl UHNp IHZpdGFsaXR5 IEZsYXRCdXR0b24= SXRlbVR5cGU= IGltcGVjYw== IGJ1b3k= dWlu IHNreXJvY2tldA== IFNsYXllcg== IFJDTVA= IFNldmVudGg= X0ludGVyZmFjZQ== IGZpZXJj c3RhdGlvbnM= IEdyYWY= bGljZWQ= IGVudW1lcmF0b3I= Q29udGFpbmVycw== IG9p w4fDg08= LXRvbg== UkVQ KGZsb3c= LmNvb3Jk R2Fi IE1vcnBo IFpvZQ== IGhhcmJvdXI= Lm1lc3NhZ2luZw== X29wdGlvbmFs IEJhc2VBY3Rpdml0eQ== cmVzZW50ZXI= IG5ieXRlcw== IGNvdXJhZ2VvdXM= PSE= J0l0 IGZvcnM= IGNvcnJpZG9ycw== IEJFRU4= IGZ1c2Vk PWltYWdl LkdyaWRWaWV3 IHNlbWVu aWdyb3Vw dXB0aW1l IFhC 5o6S5bqP IGludGVncmF0ZXM= X09D IGJhaWxvdXQ= IHRlc3Rl IG9jdXA= YXVsZWQ= X29kZA== cGdh IEFTVVM= IFRTUg== IG9jY3VwYW50cw== U2V0VGl0bGU= U2NoZWR1bGVycw== IGJla29tbWVu QnJpZ2h0 IE1haW5Gb3Jt Xygn RnJvbUFycmF5 IGluZGljYQ== SEFORA== T3JkZW4= IFRlbXBlcg== LnN0YXR1c1RleHQ= cG9saXRpY2Fs IFBlcmN5 44CCCgoKCgoK LnNldFg= Z2V0TGlzdA== aG9sZXM= UGl4 IG91dHNvdXJjaW5n IG1lc3NhZ2VJZA== IGdldFNlc3Npb24= IFZJUg== T2ZGaWxl IFNwYXRpYWw= LkZsb2F0RmllbGQ= KShfXw== IFN3aW1taW5n QUNMRQ== IHNlbnRpcg== IHBsdW5nZWQ= IGF1am91cmQ= Z3VuYWthbg== KHZvbHVtZQ== IGNyYXRlcg== Lnhscw== woDCmQ== UmVuZGVyV2luZG93 LnVzZXJtb2RlbA== IGZ1bmN0b3I= RG9tYWlucw== aW50ZXJwcmU= IGFibm9ybWFsaXRpZXM= YXJnaW5n RGVtb2NyYXRz IHBhbG1z 4qCA w7hk KkE= RnJvbURhdGU= fFs= IEFsdGVybmF0ZQ== IHB1ZG8= IGNvbmRlbnNlZA== KHBsYW4= ZGVsaXZlcg== IGJ1bGxldGlu J11dLA== IGNyw6llcg== LWlw V3M= IiIiLAo= IGlrZWE= IHZpc2l0ZQ== IG11bHRpcw== UmVzdWx0YWRv IFBob3RvZ3JhcGhlcg== Li4uJywK IG1pZ2xpb3Jp IFRocmVhZHM= Z2V0U3R5bGU= ZXJhw6fDo28= PFRTb3VyY2U= IEdpbmc= J10iLA== IHNpZ25hbGVk U3VwcHJlc3NMaW50 IGR3b3Jk IEh1bnRpbmd0b24= IEFBUA== QU5HTEVT LmNyZWRlbnRpYWxz c3dhZ2dlcg== LWNvbnNvbGU= Ii0t LlRleHRJbnB1dA== IE5PUlRI IG5pZ2h0bHk= LkZPTlQ= IHF1b3RpZW50 5Lmf IHNjaMO2bg== IFBsYW5uZXI= IHJlYWRsaW5l IGNvbmZyb250aW5n YH0= SXRlbUNvdW50 CWFjdGl2ZQ== IHLDqXBvbmQ= ZWxtZXQ= IGdpbW0= LG5vbmF0b21pYw== IEFDVElWRQ== aGV1cmU= L1ByaXZhdGU= IG1lYw== LlNlY3JldA== IENJUw== xYJ1Zw== KHBlcmlvZA== IGxsZWdhcg== dXJpYQ== RGVzY3JpYmU= IHBhcmVqYQ== IFZlZA== LWVmZmVjdHM= IFBhcnNpbmc= LXJlc291cmNl IGFiYQ== ICosCg== IGFuYXRvbQ== ICgqKSg= LXJlYWw= IFZlbnR1cmVz IFNoaWVsZHM= IFVuaXZlcnNpdGllcw== UFJFU0VOVA== IFFMYXRpbg== xaU= IFdpbGV5 QWFyb24= IHJhY2lhbGx5 IE5hZHU= IGh0dHBSZXNwb25zZQ== w610aWNh IOuwqQ== IGdyw6F0aXM= 5LuL b21hcA== IGFub24= CXBvcA== YXZhdGFycw== IHN1YnBhcmFncmFwaA== ZHpp UHJvamVjdGlsZQ== RFRW bGlzdGVuaW5n X3JlZ2VuZXJhdGlvbg== IFNoZWx0ZXI= PFZlcnRleA== L21k KGxl IHZhaw== c2VsZWN0ZWRJbmRleA== X10= IFN5bnRoZXRpYw== YXBwSWQ= IEZpcmVk IHBhbXBo X2xhdGVuY3k= aW5maWxl KGNyaXRlcmlh c2VyaWFsaXphdGlvbg== UkNU CWV2 IFNDSA== IE9wdGljYWw= IHN0aXJyZWQ= IFBvdGlvbg== ZXRoaWNhbA== Ojp7Cg== IFBlbmd1aW5z UEhZ RGVjaXNpb24= a2FydA== IGV4cG9ydGVycw== IFBvbHllc3Rlcg== Y29udHJlcw== IExhd3Nvbg== IEVtcGxveWVy IHNhc3M= IGRvd250aW1l IGJyb2tlcmFnZQ== IFJvdGFyeQ== IFdhaGw= V0FSTg== IHNldEFjdGl2ZQ== dGVtcGw= Q2hlZXJz LXNoZWxs Rml0bmVzcw== IHF1aWw= IGNsZWFuZXJz IOeb IE1pbGFubw== LWFzc29jaWF0ZWQ= fX19LAo= UEZO IG9uUGFnZQ== X3N0cmVhbXM= IHNjdWxwdHVyZXM= IG5haWxlZA== PXNj 6aaW6aG1 0LjQvNCy Y29ubmV4aW9u Sk9C IEthcm1h IFN3aWZ0VUk= IERleg== L1VJ IOyZ Z2V0Q2xpZW50T3JpZ2luYWw= IHB1bmlzaGluZw== IG9kZW5zZQ== LHJpZ2h0 ZW5lcmF0aXZl IFByb2JsZQ== IEFwcFN0YXRl IGRpc2Nsb3N1cmVz IENhbnRlcg== Y29tcG9zZXI= dXBhdGVu IHN1Y2Nlc3NvcnM= Ij4nCg== IHByZXNlcnZlcw== Lm9wZW5k X05vcm1hbA== L2hy UmFuZ2Vz LGxvbmc= CQkJCSAgICAgICAgICAg cHJvZHVjdG9z IGZseWVy IEdydXBv Tmlja25hbWU= SGllcg== IERFQQ== U3ByaXRlcw== CW1hc2s= X3Jlc2VydmVk LXNob3A= Lm5vdGlmaWNhdGlvbnM= IGRpdmlzaWJsZQ== aW9zaw== a2VyamE= aW5ndA== IEZpZnR5 IGFjY291bnRhbnQ= IEV4cGxvcmF0aW9u X2Jyb2FkY2FzdA== IGV4dHJhb3JkaW5hcmlseQ== IGtvdA== IGNpcmN1bWZlcmVuY2U= cm91Y2g= W0Jvb2xlYW4= Y3Jhd2xlcg== L3JlbW92ZQ== YXJlbGxh IHNleGVz SGludHM= IGdhbWI= IGRhcmVk dGVzdGVk X0tFRVA= IGZpbHRyYXRpb24= aWNrZXk= IEluZmx1ZW5jZQ== IHNwZWNpZmljaXR5 X0lEUw== IFJvZG5leQ== X0lSUUhhbmRsZXI= T25FcnJvcg== IHByZXZTdGF0ZQ== aWVnZWw= IExFU1M= IGF3YWtlRnJvbU5pYg== IExV dW1hYmx5 b3J0YWxpdHk= IG1hbmRhdGVz CXZlcnNpb24= IHBhcmVudE5vZGU= IHBlc3Rz IGNhc2M= Y2VwdGFy IFdvb2R5 ZXJlZQ== X3Bm LlBPUw== aXN0cmE= bGV3 WWFuZw== IHN5c3RlbWQ= IHJvYW0= LkdyYXk= IGNvbmR1 4oCUaW5jbHVkaW5n VmlvbGF0aW9u TWFob24= IE1VU0lD IFNpcmk= IEVudGVyZWQ= IGNlcnRhaW5z ZWxhaA== CU1haW4= LkRhdGVGaWVsZA== LkhlYWx0aA== IEthc2ljaA== IGNhbmluZQ== PXJvb3Q= dWRkbGU= XGNvbW1vbg== IFN1bHRhbg== ZmluYW5jaWFs IFFTcWw= IGFzY2VudA== IHBydWViYQ== emllaHVuZw== LmdldEVycm9y IEdsb3JpYQ== RWNobw== X0NIT0lDRVM= X2Vwcw== L3Byb3ZpZGVy UEhPTkU= 5YWz6Zet IGNvbXByb21pc2luZw== X0FQUFJP UHJvY2Vzc0V2ZW50 IGJ5dGVBcnJheQ== IENydWM= wqg= IGljaW5n IFBDTQ== dmVjdA== QW15 IFZhY3V1bQ== aW5jaWRlbnQ= IHVzZXJu emJlaw== XSspLw== IH19Ij48 IEdldERhdGE= Y250bA== IHNhZ3Q= X1BSSU1BUlk= IGxlcg== IEZVQ0s= IFN0YXJy SUg= w7ZycGVy eW1z XSldCg== L3Rvb2w= Y29tYmluYXRpb24= IHRhbXA= IEJlaXQ= IE5JR0hU IGFubsOpZQ== KGFt XFRyYWl0cw== Olwi IGNhcmdh LmlkZQ== IGRpa2tl Q29tcGV0 IHNjb290ZXI= IHhQb3M= KGludGVycA== IGhhc2ls Y2xpZA== IGhldXJlcw== Z2xvbWVy c2hhcmVz 77yMCgo= cG9uZGU= 4bqjaQ== X2R1cGxpY2F0ZXM= c29uZ3M= fV07Cg== IFNuaXBlcg== IFRodXI= cm9wcA== IGdydWVz IG9yZXM= dXNoaW1h IHVzYWJpbGl0eQ== 6ZKf L21lbWJlcg== b2xkZW1vcnQ= SXNBY3RpdmU= R2V0RW51bWVyYXRvcg== bXV4 V0lORE9XUw== TmVnYXRpdmVCdXR0b24= 4Liz LW1ha2Vycw== 44Kk44Oz IEJlcm0= QnlFeGFtcGxl IFLDvGNr U2hvd3M= Z2hp IElocmVy IENydWQ= Y2hlZg== X2F1Yw== IGFww7Nz YW5rYW4= IEtERQ== SUxMUw== IGFuZ2xhaXM= LXJlZnJlc2g= CXJhbmdl eG1t KGVkZ2Vz IGFwcGVs Ijt9 IGVkaQ== IHN3b2xsZW4= IGJ1dGNoZXI= aWNpZGVz aG91bmQ= IF4o IEV2YWx1 IGtleWJvYXJkVHlwZQ== U1NJRA== cm9iYXQ= IG5paw== IHN0cmF3YmVycmllcw== XCJd bm9zaXM= TUVE 54g= 5LqU aW1heA== XEFubm90YXRpb24= IG51cnU= IE1pbmltYWw= IHdvcmRwcmVzcw== IGNvbGRlcg== CXBhcnNl L3N0cmV0Y2g= 5omn6KGM cm9tb3NvbWU= RElN IHRlbnRhdGl2ZQ== Ok5TVVRG LGltZw== IE1BVEVSSUFM IEpldEJyYWlucw== TGVnZW5kYXJ5 CXN0cm5jcHk= IGRlZnM= TnVtYmVyRm9ybWF0RXhjZXB0aW9u IGJ5dGVjb2Rl IHdpc3Nlbg== X01PUkU= oO2DnQ== IENvZmY= LkNvbmRpdGlvbg== IGTDqXBhcnQ= ZHNu IHBhcmFtZXRybw== XEw= Lm5hbm9UaW1l Qk9UVE9N LldoYXQ= 64Q= IERpeA== X0RB KENvbnRhaW5lcg== YXlhcg== RmxleGlibGU= LlJheWNhc3Q= IEVkd2lu W3VybA== wpI= LnN0cm9rZVN0eWxl IFBvbHlub21pYWw= aWxpdGF0aW5n IFFWQm94TGF5b3V0 KHJlcA== LnZu LWFzc2V0cw== Q0hBU0U= IEVzc2VudGlhbHM= anlsbGFuZA== IGF4cw== IFRyZW0= Lm1haW5sb29w IFdJTkRPV1M= LlJFUVVFU1Q= IHJlaW50 IExpYnJl Y2hlb24= IGd1ZXJy CU5kckZjU2hvcnQ= LnNvZnRtYXg= IEFzdXM= LXNjb3Jl IEpPSE4= PlN0YXR1cw== PkVkaXQ= IENhbWU= IEFzaGU= X3VzaW5n IExvbmU= IGxlc2Vu IHJldmVyc2luZw== bmdyeA== LnNpZ25hdHVyZQ== LUFzc2Fk L25hdGl2ZQ== X3JhdGluZ3M= IG55YQ== IGFkaWRhcw== KG9wdGlvbmFs Il0o IHJlY3VycmVuY2U= IEJNUA== z4w= X2dw Ij5c X3dyb25n eXBz LlByb3h5 X1VEUA== UXRDb3Jl TGlua2VkSW4= IGNhdmVybg== IHNww6ljaWFs X3dpcmU= IG5hbm9w LmJhbGw= IHJlZHVjZXJz IG1haWxlZA== ZG9uZw== IG9wcG9zZXM= IEhhbnNvbg== IFNhdHVyZGF5cw== YWNvbW1lbnQ= X01ldGFEYXRh IEdhbGFjdGlj KCIvIik= IENsZWFuZXI= X1RFUk0= IGNsYXJv Lk9VVA== 5a6h IHNsaWs= IGplZG5haw== SGFuZGxlckNvbnRleHQ= IGlycmFkaQ== ICAgICAgICAgICAgICAgICAgICAgICAgIAo= LnRpZ2h0 QnJlYWRjcnVtYg== ZnJleQ== IOqwneyytA== bGJyYWNl TEVHQUw= LWd1bg== IEJsb2dz IFNoaXJsZXk= IFB1bmU= dXJzaW9ucw== IHN1YnRyYWN0aW9u ICoqKgo= YXJtYWN5 IHNhbXQ= PSIpLg== IHBlcm1pc3NpYmxl KHJk IFdBVEVS IHByb2Zlc2lvbmFs IGhhbmRib29r IG1vdXJuaW5n YXJlZmE= IGFzbg== aXNleA== IGNvbnRlbnU= IFVOQw== LmdldFByaWNl IFB1bXBraW4= LwoKCg== IGNvc2luZQ== IG5pZWQ= IEJyYWtl RGF0YVVSTA== IERhdGFHcmlkVmlld0NlbGxTdHlsZQ== IFJldHVybmVk ZXdvb2Q= aXF1w6k= IGJsZWFr IHdlYmhvb2s= LlRoZXk= YXJi TEFOR0FETQ== X29yZGVyZWQ= IHByYW5r Lk5ld1JlcXVlc3Q= IGxpdGVyYWxz J30+Cg== c2VyaWFsaXplZA== a3Rvcg== KHJ4 IGdldFk= CVN0cmluZ0J1ZmZlcg== KHNsaWNl cmJyYWNl ZW1lbnRv IGxhbmM= RGVwbG95bWVudA== IGNvbmNlbnRyYXRpbmc= U2tldGNo IGJyaWdodGx5 QmVnaW5uaW5n IERhaA== VGs= SW5zZW5zaXRpdmU= IHNhYmU= KE1vZHVsZQ== IGNlZGFy X2NvbnRpbnVl IHdpdGhPYmplY3Q= IGNvbHVtbmE= IENhbGRlcg== INC/0L7QvA== X3NvZnRj c2hhbGVk ZXJ0YXRpb24= CSAgICAgICAgICAgICAgICAgICAgICAgICAgIA== OkAiIg== IGZhw6dvbg== dXN0dW0= c3Rr X0NSQw== b2R6aQ== IGFzY2VuZA== Zmdhbmc= IHByZWZhYg== IGZpbmRldA== Oicr 5Y2V5L2N dW1ibGVkb3Jl LmludmFsaWRhdGU= IHRvaQ== YW5nZXBpY2tlcg== X0FJ aGls U2VhdA== IHBpc3Rvbg== Zmli X2JsdWVwcmludA== 44K4 X1JlY29yZA== cmV0cw== RnJhbg== IENhaXQ= IHBlbGlj IGRuYQ== IHVwZGF0ZVRpbWU= IC9eWw== IHJhbGxpZWQ= IEhpbWFs U1NJ X3BsYW5lcw== IE91dHN0YW5kaW5n QXBwbGljYXRpb25CdWlsZGVy c3R1ZA== X2xvY2F0b3I= IGFib2xpdGlvbg== ICgkKQ== amVybmU= IEFBQw== L3dpbmRvd3M= LUNhbA== X1NFQ09ORFM= ICcnfQo= w6FueQ== IHl1bW15 5omL5py65Y+3 IFZHQQ== aWxhdGU= IFN1cnZlaWxsYW5jZQ== CUd0aw== 8J+Y IHNoaW1tZXI= YWx0ZXJuYXRl Rm9yU2VndWU= dWVzdHJh LWNvdmVy YXNs IEluc2V0cw== bGlqYWg= OlM= CWNhdGVnb3J5 IGZq w61saWE= IE1BRA== QGpz 5p8= IHBvb2xlZA== IHRyZWF0aWVz IEJpaw== IEhhemVs QWxsb2NhdGU= IGFpcnBsYW5lcw== IHNlcm1vbg== IFBvc2l0aW9ucw== IE1BSUw= U3RvcHBpbmc= YXZvcmVk KFRlbXA= IGNoZWF0cw== LnVzZXJJRA== IHB1dGE= LXl5eXk= VWlUaHJlYWQ= IG9mc3RyZWFt XFNlZWRlcg== IENvdHRhZ2U= IF4K IEFMVEVS IHF1YW50aWZ5 cmVpYnVuZw== IG5lY2Vzc2l0aWVz LkxvY2FsRGF0ZQ== IOaXpQ== cGljdHVyZXM= IGNydWQ= 5pyo IGRvd250dXJu YWN0b3Jpbmc= IERlcm0= IGVzdHJ1Y3Q= IE11c2lr IG1seA== Lm1ham9y Lkh0dHBTZXNzaW9u Pzw= eWVhaA== IG1vam8= IFVuaXR5RWRpdG9y IHJha2U= X3R3ZWV0 IHJhZGlvQnV0dG9u IERvbWluaW9u YXNTdHJpbmc= b3p5 IHZvZGth b2dsb2I= IEFsdW1uaQ== YmFsYW5jZXM= X21hbnVhbA== LmxvYWR0eHQ= X2ZyaWVuZHM= IFhtbERvY3VtZW50 W2ZpcnN0 S2V5Q29kZQ== IHBvZXRpYw== bWluYQ== IG9wY2lvbmVz 5omT X3N1cHBsaWVy LkZyb21SZXN1bHQ= X2Rpc3RyaWN0 IEdhbGE= LnF0 IGNvbnRyYWN0dWFs YWNvbnM= LWFuY2hvcg== IHl1cA== IHVuYW5zd2VyZWQ= IG1heGxlbg== RXJyTXNn LXNu IGh5cG5vdA== X1dN KCldWw== IGRlc2VydmluZw== b3dtZW50 KFJhbmRvbQ== IHZldG9y IElTVA== 0LDQvdC0 LWxhbmc= IHNpaw== Y3JlYXNpbmc= IHBvcnRhbHM= IEJ1bGxkb2dz cHJvbW8= IHByb3Zva2Vk XX07Cg== IEliaWQ= ZXJnbGFzcw== X1dJRkk= YXBwcm9wcmk= IHJlZGVzaWduZWQ= IC8vLS0tLS0tLS0tLS0tLS0tLQ== emlr JG8= dWx0b24= IFJlbGF0aXZlcw== IG1ldHJvcw== IG1lbnRvcmluZw== YXTEgw== dXNobWFu IGluaGVyaXRz IFJ0 L3ByZWZlcmVuY2Vz aW1lZA== Sk9JTg== KGludGVyZmFjZQ== IGFkZXB0 IE9mZmVuc2l2ZQ== IEFHUkU= b25pYW4= LnBhcnNlcnM= IHBhc3NwaHJhc2U= IHVuc2VyaWFsaXpl VmlzaXRlZA== IGdldFByb3BlcnR5 IG5vYw== ZWRhZA== ICMtfQoK dmlkYQ== c29sdmVy IE1vcmFsZXM= IGt2aW5uZQ== IEFjY2lkZW50 IHZldXQ= IG1pc2d1aWRlZA== IFJldmVsYXRpb24= IHJhcGlkZQ== cHVuaw== Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= T2JqZWN0SWQ= YWJpbmV0 ZXh0cmFjb21tZW50 IGJ1bm55 IERlZmVycmVk dXR0YQ== dWFl YnVzdGVycw== IFNvaWw= R1NU LkN1cnJlbnRSb3c= 44GR IGdyYXR1aXRz IGNydWlzZXI= 15E= IFRlbm4= anNj IO2VhA== ZGlzcG9zZWQ= QUJPVVQ= fQ0NCg== ZXhwaXJlZA== IFhtbE5vZGU= IFRhdHRvbw== Vm90ZXM= Rm9sZA== RWxpemFiZXRo X0ZJTEVOTw== IGNvbmNv IEdkaw== b3BpZXM= fX19 UVVPVEU= LUlJ c3BhbQ== LWxp IGNhcnRh LmxheW91dHM= IGJlc3Bva2U= IGFtYXRldXJz IGNvdWxldXI= aXRhbWlu IGlycmVzcGVjdGl2ZQ== IGJsYWNrQ29sb3I= LnlhaG9v IHdlYXJ5 IHN3ZWV0cw== PyI7Cg== PVwiJQ== X3dvcmtzcGFjZQ== IERpYW1ldGVy IGFtZA== IE5ldWU= IGRiTmFtZQ== SmVyZW15 bG9nZmlsZQ== YXRyaWI= IEh0dHBTZXNzaW9u CUNyZWF0ZQ== aWRkeQ== LlBBUkFN IGZpYW4= IHN6Y3o= IHFyZWFs X0VTQ0FQRQ== dXNhaGFhbg== LmRpZ2VzdA== IGdldFBhcmVudA== LkRyb3BEb3duTGlzdA== IHRow6k= IG1vbnN0cm91cw== IGJlcmhhc2ls IiIiDQoNCg== U3VwcG9ydGVkQ29udGVudA== IEdhdGhlcmluZw== aW5jeQ== LktleUNvZGU= IGZldHVz LmNlbnQ= IGJlc29uZGVycw== bmlsYWk= TFRSQg== IGhpbmdl UFJPUA== LmZvdW5kYXRpb24= bnVtZXI= LXJhbmtlZA== 6I0= IHBhaW5mdWxseQ== ICg7Oyk= Zm9ybWU= TGFkeQ== L2FwcGxl IENvbnN0aXQ= IHN0b2NraW5ncw== 5rS7 IG1lbnRvcnM= PkNyZWF0ZQ== IEludGVybmFsRW51bWVyYXRvcg== IHRlbGV2aXNlZA== VG9rZW5UeXBl IGJyaWI= Y3JlYXRlVmlldw== L0RURA== R2l0SHVi KGJpZw== IG3DoXhpbW8= 5b6u6L2v6ZuF6buR LmNm IMKgIMKgIMKgIMKg PHR5cGVvZg== IHByb2dyZXNzaW5n LnNldFdpZHRo KHR2 IHVuZmFpcmx5 IEFuaXRh YXJ5YXdhbg== RGFs VVJZ b2dlbmVpdHk= ZWZh LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IGRlamE= T1NF cmFpbA== cm9vZg== X3F1b3Rlcw== PGo= 44Ko KHNldHRpbmc= bGV2ZWxuYW1l X2hhbmRsaW5n w6lyYQ== JGo= IGRhcmxpbmc= LlBhdGhWYXJpYWJsZQ== W3NvdXJjZQ== TWV0aG9kTmFtZQ== IE91dGxldA== 5pKt IENvY29h VWJ1bnR1 IG1vb2ll IGZsb3JpZGE= IHJldGhpbms= IGdldFg= Z2V0RWxlbWVudA== IHJhZGl4 IEdhbWVy ZGVhbGxvYw== bGVmdEpvaW4= X1NZTg== R3JpZExheW91dA== Imdv KGVhY2g= CXNjZW5l IFB5RXJy SG93YXJk LlNpZ25hbA== IFRFTQ== IOen VkVOVE9SWQ== IHNpbXVs IDw8LQ== IHR1cmJpbmVz IHN1cnRvdXQ= YWx0bw== IHVuYXJ5 YA0K IFNjcmk= IE1vbms= IHVuZm9sZGVk Q29tcG9zaXRpb24= UFBFUg== IHNpZGluZw== Jyx7Jw== IHRyZWZm X1VOSUNPREU= IGRlcmVjaG8= IHBvbGFyaXR5 IG9yYw== PERvY3VtZW50 KHRvZGF5 LikKCgoK IHNlZW1pbmc= XFY= PklE IGZpYm9uYWNjaQ== KG1hdGVyaWFs RkxBU0g= ZGlyZWN0b3JpZXM= ZXN0ZXJz VEVDVElPTg== d3JhcHBlZA== LXNlbGVjdGlvbg== LXJlbGF0aXZl KGNocg== IHBvcnRmb2xpb3M= IHNob3dEaWFsb2c= aW5nbGV0b24= IFRJQ0s= IEludmVzdG9y IGJyYXY= IFNWTg== IGhhdGVmdWw= cmlwcw== ZXhwaXJ5 X2NvaW4= PgoKCgoK IG1hcmdpbmFsaXplZA== IGV4Y2VlZGluZ2x5 bmF2YmFyU3VwcG9ydGVkQ29udGVudA== KGV4dGVuc2lvbg== IGFkdmFudGFnZW91cw== Lk1pY3Jvc29mdA== IGVuc3VpdGU= LXZpb2w= X2R1ZQ== S0g= IFJvbWFudGlj aW5hbmQ= ZWNp cmVwb3J0ZWQ= IENvcnB1cw== IHNwYW5raW5n IENyb3NieQ== LkZvdW5kYXRpb24= XF8= IGFubm9uY2Vz QXR0YWNobWVudHM= 4Liy4Lij IFdheA== 77yB77yBCgo= IHNhaWxlZA== LkV1bGVy CXNjcm9sbA== IHBlYXNhbnRz IEJ1aWxkZXJz LkdlbmVyYWw= QVJFQQ== IG1lc3Npbmc= dmVybg== IGRpYXBlcg== IG9jY3VwaWVz CWxvZ2lu LkxPQw== aWdhbnM= 77yB4oCd X2Zvb3Q= X3RhdQ== LXBhY2thZ2Vz cmVjdXI= QWx0ZXJuYXRpdmU= 77yB44CN YXJvbw== IHRydXN0ZWU= LDpd 5pa55byP Pz4+ Lk1pbnV0ZQ== IGFsY2Fu IENvbmNlcHRz Y2hpbGROb2Rlcw== Q291cnQ= IGNlbGxhcg== bGVr YWtpcw== QnViYmxl IG9iamVjdGVk IO+7vw== Ol06Cg== LnBhcnNlRmxvYXQ= IHNwYXJrcw== LWZpbmQ= dmFyaWF0aW9u SGFjaw== RmFucw== X3BhcnNlZA== RW50aXR5VHlwZQ== YXVjZQ== X3RyZWVz IEVnZ3M= VUlCYXJCdXR0b25JdGVt X3RheG9ub215 IFNIT1A= VHdlbnR5 X2NoZWNrcw== IExY dXRzY2hlaW4= KHBsYXRmb3Jt IGF1dG9wc3k= UmVxdWlyZW1lbnQ= IFJFQ1Q= dG9Db250YWlu JywnJQ== L2VkaXRvcg== IHFi IEVFRw== aHRh X1RJTEU= LXN1bQ== IEFsYnVxdWVycXVl IHNob3J0Y29kZQ== IHNpbnVz IGRlc2tz IHBvb3A= Lm9wZW5zb3VyY2U= IENvbGxhcHNl LmRlcg== IGhhd2s= IFZhbmd1YXJk IE1hcnJpb3R0 X1RhcmdldA== IEJhbmFuYQ== X2F0dGVudGlvbg== IEFyaWVs X3Rlbg== IGJha2Vy 4oCUaGU= xIXFvA== dmVsb3BtZW50 RWxm X2djaGFuZGxl UmVwdWJsaWNhbnM= IGl0ZW1CdWlsZGVy V29u X2FjY3Vt IG5ld1Bhc3N3b3Jk IGRldm9pZA== IE1hcmt1cw== ZGFlbW9u Lkh0dHBDb250ZXh0 S3Jpc3Q= IGFhbGJvcmc= X3RyaWFscw== KGFzc2VydA== 44Gj44Gm YmVsdA== IG1pbGRseQ== ZXJ2b2ly IGRlc2NlbmRhbnQ= IEdpb3Zhbm5p IGRlY2x0eXBl LVNoaXJ0 IGFwcm8= QXBwbGllZA== LmdldFBhcmFt aG9m dXJhcg== IE9CUw== X3Nlcg== KHNlY3JldA== W2xheWVy IHVzZWZ1bG5lc3M= IEtvdQ== X3N1Ym1pc3Npb24= X0hPUklaT05UQUw= LHRtcA== Ly4K IGxlc3Nlbg== X3dj X0ZJTkFM 0L3QvtC/ LnRvZG9z LlhQYXRo IElEYXRh IGRvb3JzdGVw IGNvbXBvc2luZw== IGh1dA== IFZMQU4= IG91dGY= 6K+l KGJldGE= KioqLwoK IEluZG8= IGtsYQ== X2NvbmZpZ3VyZQ== Lk1hcms= b3NlY29uZHM= KFZlcnRleA== b3JnYW5pc21z IGZmbQ== IGRlbW9saXNoZWQ= ICItLS0= bGVzaQ== IFNpZG5leQ== LmdldEluZGV4 Lk1vbmFk U2VsZWN0ZWRJdGVt IE5hdlBhcmFtcw== YXpvbGU= QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo= X3NlbnRlbmNlcw== IGluY2xpbmF0aW9u IEZhdGhlcnM= YWNjb3VudElk aGFyaQ== KT4K L3Jhdw== ICcnKTsKCg== K2w= KGNk IHVuemlw IGdsYW1vcm91cw== IyIs IG5hdw== IG1pbmli IEJyYW4= TmFjaA== X3R3ZWV0cw== IENDUA== JSI+PA== IFN0ZXBoZW5z bWFzxLE= J2Vz IHJlcGFy X2RvY3VtZW50cw== LmNsb3NlZA== LXJpbmc= L2NhdGVnb3JpZXM= IERlZXBDb3B5 U1VQ Lm5ld2F4aXM= IGdkeQ== aG9l IFJlZWY= IHBvbGl0aWM= IFJlcXVpcmVtZW50 IHNoZWRz c2VhbGVk IHBhdGhvbG9neQ== Ii8+PA== bW9kbw== IHN0ZW1taW5n IHRhYm9v IFNhdmlvcg== IH0NCg0KDQoNCg== LmN2 IGpvdWV1cg== IENvcm53YWxs IFJlY2VwdGlvbg== IGlsbHVtaW5hdGlvbg== IGdkYg== VkVD b2R1 Q29udGVudEFsaWdubWVudA== c3RhbnRpYWw= YmFzZWxpbmU= X2J1c3k= LwoKCgo= IHBsYXllcklk 5qM= X3BldA== IE1pcmFjbGU= dXJlbnQ= IE1lcmxpbg== dWJlbg== IHNldENvbG9y IGRhcmtlc3Q= c3Rlcnk= IGNhcmlj IHJldGFyZA== IEhvdXNlaG9sZA== IGphbA== IHlw IiwiIik7Cg== IEFjZXI= W1c= b2xraWVu YXlv UHJpdmF0ZUtleQ== IFNUQVRT INC90YPQtg== OicuJA== IHRoYW5rZnVsbHk= IGRpc3RydXN0 Z2V0RGVmYXVsdA== L2ZhY2Vib29r IENvbnJhZA== IHV0aWxpemFuZG8= IEthZw== L25hbWU= IGJhbWI= LkZyb21TZWNvbmRz IG11dGls IExhZ29z IEJsZXNzZWQ= aWxsZWdhbA== aWVp X1RQ IG1hdGxhYg== IGN5Y2xpYw== IHdpdGhoZWxk IGhvcnJpYmx5 LWhvdXJz LUhlYWRlcnM= IG92ZXJsYXBz IGN1YXRybw== IGVxdWl0YWJsZQ== IGNvbG9ybWFw IHNoaW4= IFN1aXRlcw== X2x1YQ== KHZv X1JFU1VMVFM= IFZpa3Rvcg== RG93bmxvYWRpbmc= bm9jaA== TW9vbg== IGRlY2lkZWRseQ== 44GU44GW X1JQQw== SW50ZXJwb2xhdG9y IHZhbnM= e1Q= X3NwYXdu IEV4eG9u X0NhbGw= IENsYXNzcm9vbQ== IHNlcm90b25pbg== IERpcGxvbWE= YmVkdGxz IFByb3RvdHlwZQ== LmV4ZWN1dGlvbg== IGRhdGluZ3NpZGU= IEdva3U= X3Jvb21z 4oCZYW0= Z3JhZg== YWNlb3Vz IGFjY29tbW9kYXRpbmc= fSwn LmRpbWVuc2lvbg== ZXJyb3JNc2c= CW1lc2g= RmlsbGVk LnByZWZlcmVuY2U= IHNtYXJ0eQ== X2NvdXBvbg== IMO2dmVy IGNvbmNlaXZl b2Rvbg== ZGljZQ== VG9EYXRl YWRhbWVudGU= LW1hc2s= IGVzY2FsYXRpbmc= 4oCmKQoK SW5SYW5nZQ== X0Vt IHV0aWxpemE= IGxldnk= PCFb IEplbm5lcg== IFJFU09VUkNF X1NUQVJURUQ= IHZvbGxleWJhbGw= IG1nYQ== IFJvc3Np Q2hhbmNl IEVuZGVk LnVudGls IGtub2Nrb3V0 X2V4ZQ== IFByZXNjcmlwdGlvbg== IENPVU5UWQ== Lmhy aWVyc2hpcA== RVJWRQ== 6ak= 44Gn44Gv IHBlcsOt IGltZ1VybA== ZWN4 IFd5bg== CVJldHVybnM= X2V5ZQ== IEFnaW5n cXVldWVz IOWIneWni+WMlg== LlNlcmlhbGl6ZWROYW1l LmhvdXJz IGlzZQ== LkFjdG9y 5p2h5Lu2 YXBwbA== VGFu L2NhdGFsb2c= L1Jlc291cmNlcw== ZWxhbg== KCd7ew== IGluc24= IG5vZGVOYW1l IGNvb2tib29r JywnPScsJw== Uk9NRQ== LnRlbXBsYXRlcw== ZWN1cmU= LWtleXM= IGdsVW5pZm9ybQ== IGdlw6c= IFJlY292ZXI= SURY IEtyaXN0ZW4= IHBvbnRvcw== YD0nJA== YXJnZW50 IGFycmFuZ2luZw== 6KiY5LqL IGVybGU= ZW5lZG9y KCkpKTs= w6Zra2U= IEdpbGxlcw== In0+Cg== Lm1vdmllcw== LXNlbGVjdG9y LmxlYXJu IHBvdGVuY3k= IGZpbm8= CWJn IGxlaGV0 IGzDtg== IGVybQ== IGFzYmVzdG9z IGRlc3Rl IGJsb2NrYWRl IFJPVU5E IGxuYW1l IFNlcGFyYXRl w6RuZ2U= IGZ1eno= CVVO X25vbWU= X2xpbmtlZA== IFNoYXJlUG9pbnQ= aGF1c2Vu IGxvYWY= LWVjb25vbWlj IGRpZEZpbmlzaA== eWVu IGJsYXN0aW5n IFdlaXJk SUNMRVM= IEdGWA== IHN1ZmZpY2U= ZWJpbg== IGFwcHJvdmluZw== IFJleWVz IFJUQUw= aWdsaQ== X3Rvaw== b3Jkb3Zh Q2FybA== IFBsYXlz bG9zc2Vu cGFpcmVk QUdNQQ== d2nEhXo= bGlua2VkaW4= IGVnYWw= KHByZWRpY2F0ZQ== IFJFU1BPTlNF IG1pblg= IGNoYW5jZWxsb3I= IFJFQ0VJVkVS IGFzY2VydGFpbg== IHplcg== IFdvcmtzaGVldHM= Tks= IHZvd2Vs dmFudA== VVBT 4oCcLg== IEhheWRlbg== IFNwYXJ0YW4= cmlnaHRz LmdldElu IGlubGFuZA== IE5pbGU= IFRyYW5zbGF0b3I= IHJlY3RhbmdsZXM= QnV0dG9uVHlwZQ== IFNvbGlj IHJhZ2F6emE= L3RhZw== IGlycmVzaXN0 I0VuZA== KioqKioqKg0K IHJlc3RyYWluZWQ= IGNoaXJvcHI= L1No LWZsaWdodA== Y29udmVydGVk IHNraXJ0cw== KGNoYXJz JHZpZXc= IGlucHV0RmlsZQ== Z21haWw= X0RJQUc= IG51bWVs IEdpbmE= ZWxsdW5nZW4= IHRheGE= IGRyaXBwaW5n PSIiLz4K IGJvcmRlcmVk IHRvdWdobmVzcw== bGVuZXNz IEJpZWJlcg== X1dBS0U= KGV0 IHNhbnTDqQ== IFRFWA== X0RJU0NPTk5FQ1Q= IHBpZW4= IEZvbnRTdHlsZQ== X1VM LXRvdGFs d29sZg== IE1hcml0aW1l IE9QVElPTkFM LXJlc3Q= IG1lbWJ1YXQ= IEJTT04= X3NpbWlsYXJpdHk= Lm92ZXJsYXk= IHBhbGF0ZQ== IEJyaWRnZXM= QW5kUGFzc3dvcmQ= IENoYXZleg== aGV0dG8= Lm9mZnNldEhlaWdodA== IHVuZGVzaXJhYmxl IGFwbGlr IC8+XA== LHRv IHJlbW92ZXI= IE1vZGVsaW5n IHB1cmNoYXNlcg== IENob29zaW5n b3BsZWZ0 IG11dGFibGVMaXN0T2Y= IFNpc3RlbWE= IElQTA== aWNrZXJWaWV3 SGFzQ29sdW1uVHlwZQ== IHNvYmll dWJlcm4= IGFsdW5v IGltYWdpbmF0aXZl IEludGVyZXN0ZWQ= KCl9PC8= IGRpdmVyc2lvbg== X3Rvb2x0aXA= LlNhbXBsZQ== IEZ1dHVyZXM= Y29udGVuaWRv IEVJTlZBTA== KGVuY29kZWQ= IFNoYXVu CXBheWxvYWQ= ZGVr PllvdXI= SXNv VHJhdmVyc2Fs aWNpZQ== LmNyb3A= IEpC SU5HRVI= IGV4ZW1wbGFyeQ== X3JlbHU= YW5uaXM= 0LXQt9GD0LvRjNGC0LDRgg== Y2x1YnM= 4oaR IHNjcmFtYmxl IFVuYmxvY2s= IGRvcnM= IHNoYWNr IG1pbmltaXppbmc= IFBhc3Npbmc= YWRkRWxlbWVudA== 4bud IHJvb2Zz IGpjbGFzcw== Y29yZG92YQ== UG9zWQ== KENhbnZhcw== KGZpbg== LWxvc3M= LmJ0bkNsb3Nl ZG9jdW1lbnRhdGlvbg== IFJK YW1vbmc= TW9z bGluZ2Vu IEFndQ== b2x5bm9taWFs XTw9 IGRpZmZpY2lsZQ== IFdpbm5lcnM= 5bGV U3RyYQ== IGNvbmdyZWc= IEVuYWJsZXM= IFN5bXB0b21z X3Nn IFJpZGluZw== X2hlYWRz IENvc21ldGlj w650 LlNpbmdsZXRvbg== IE5pY2FyYWd1YQ== IAoKCgoK IG3DrQ== J30sDQo= IEJvc25pYQ== Plg= Ly8qWw== IHBpbGVk Y2FzdGluZw== IGdyw6JjZQ== IEhlbHNpbmtp R3Jv I2Fm 7Iud IHNvdWhh IEluZGll X25lYXI= IGltbW9iaWw= LkV4Y2Vs IHJhZGlhbnQ= X01C IEtldG8= dmVudGFyaW8= X2FnZW50cw== VGFibGVWaWV3Q2VsbA== IFRoZW9kb3Jl PT09PT09PT0K LGxpc3Q= KHNp aWNpcGF0aW9u QVJUSA== c2V0RGlzcGxheQ== LkZ1dHVyZQ== IFNUQU5EQVJE IE9JRA== IGZyb3duZWQ= IE1hcmlseW4= b2xhcmU= UHU= IHPDqWN1cml0w6k= UmVkdXg= U0NP CQkJCQkgICAgICA= cml2 cGVydA== IHNvZnRtYXg= IHNlbmF0ZQ== PWVtYWls IGVzdGltYXRpbmc= CXRk RnVjaw== IFdhdGVybG9v IG1leGljbw== TmV3dG9u U2Fi LOKApgoK IGNlbGVzdGlhbA== IFFOYW1l IGdldEFwcA== Tmll X3BjaQ== IFFQb2ludEY= X2xpc3Rh Lk5WYXJDaGFy IENvYw== S2Fy IGJ1c3RlZA== aXphdGlvbmFs b3VyZA== X2Nvbm5lY3Rvcg== IFNla3M= 0L3Rg9GO 0II= L0xpc3Q= L2lj XEZyYW1ld29ya0J1bmRsZQ== dXh0 IGhlYWRwaG9uZQ== RVhURVJO LXJlc2V0 IEdlaWxl IHRyaWFuZw== IEFOTg== IHTDrQ== IFNQQQ== IE1hY2Vkb25pYQ== IGNyaWFy IGNsaW1icw== IFNPTg== IENyaXRpY3M= IGTDsw== X1NQTElU IEJvdW5kYXJ5 X0luc2VydA== Q29sZA== LmNyZWF0ZUNlbGw= X3NhaWRh LkJMVUU= QmlnRGVjaW1hbA== KEJ5dGVz CVN0YXRl LS0tQA== Vmlld1NldA== YWthaA== X1JlcG9ydA== LWNyb3Nz LmdldEN1cnJlbnRVc2Vy dWx0dXI= KEZs IEltYWc= Q1Rlc3Q= 7IOd IHN0YWc= IG96b25l IGvDqQ== cmVwYWly KSIpOw0K IHZvd3M= LkFsdGVy IEFsZ2VicmE= IEFoZWFk Z2V0dA== LklubmVyVGV4dA== IFpoZW5n LnJlYWxwYXRo IGRpc3RyYWN0aW9ucw== LGV2ZW50 IElOQ0xVREVE Lk1hdGNoZXI= LnNwb3RpZnk= IGNvbnNpZA== Lk1hcHBpbmc= IEZvYW0= IE5BTkQ= IGRldmFudA== XSIpXQo= TGF1cmE= IHNhY2tlZA== X3hvcg== IHJlYWxtcw== IFJvYm90aWNz LlNlZWs= LiQk IFJpYmJvbg== CUhSRVNVTFQ= IENyZXNjZW50 RUZS IE1lZGl0YXRpb24= LmdldFo= INC60L7QvNC/ anNvbndlYnRva2Vu Oj8= ZmFm VklPVVM= YWxsYWg= IHBpcGluZw== IG1vZGVybmU= cG9zdGFsY29kZQ== IGxldmVyYWdpbmc= IENISVA= cGNt bWFp IGlQ QUtFUg== ZGF0YUdyaWRWaWV3 X2RlcHM= LWRyaXZlcg== TGll ZGlzY2FyZA== eW50YXhFeGNlcHRpb24= IGVjdA== IEV4aGliaXQ= ICgqKg== IOuU Q2hhbmdlRXZlbnQ= IHN1cGVybWFya2V0cw== IHNobQ== cHJvZml0cw== cGlsbGFy cmFpc29u V2F0 IHBoYXJtYWNpZXM= IG5ydw== Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= CXdvcmxk U3RyZWFtaW5n RGlhbW9uZA== IEVudW1lcmF0b3I= IGVucXVpcnk= LmxhbWJkYQ== YmVr Uk9UTw== IFBkZlA= IGhpc3Rv IGdldENoaWxk L3N0cmV0Y2hy IEFNQVo= IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbg== InVzZXI= IHNhbml0YXRpb24= IENsb3RoZXM= Lm51bXB5 ZmVj ICMjIyMjIyMjIyMjIw== 0LXQudGB0YLQsg== X2xw IGF6dXJl WFBhdGg= VmVudA== TGFib3I= IG1pc3Rha2VubHk= IGNvbmR1aXQ= IEZhaXJmYXg= Z2V0U3RhdHVzQ29kZQ== IE1veQ== TGlzdEFkYXB0ZXI= ICg/KQ== R2VuZXJhbGx5 LmlzQ29ubmVjdGVk dmlkbw== TW91c2VCdXR0b24= R2VuZXJhdGlvblN0cmF0ZWd5 X2Rlcml2 IGxla2tlcg== TWVhc3VyZW1lbnQ= X0NPT0tJRQ== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IGNvbXBldGl0aXZlbmVzcw== IGdhbWxl IHJldHJvc3BlY3Q= IEVkdWFyZG8= IERhdGFTZXJ2aWNl IGVzY29ydGVk IFF0eQ== SG9saWRheQ== CXJhdw== bGV1cnM= QmlydGhkYXk= IGhlYXRz LmludmVyc2U= IF8NCg== aWxsdW0= b2thYmxlQ2FsbA== X21s TGlrZWQ= ZW51bWVyYXRl RmluaXRl LXByb3A= QXJlYVZpZXc= IG1lZGlhdGlvbg== IGNoYW50aW5n X05U X3VuYw== c21vdXRo IHBpZ21lbnQ= UGFzc3dvcmRFbmNvZGVy IHbDqXI= IHdhc3Rld2F0ZXI= LVBhY2s= IGpvdmVu YWVz S1k= UGludGVyZXN0 IG11c2ljYQ== bGFjZXM= IFdpY2g= KHJvdA== KGly IOyCreygnA== 44Gd44KM X1RIRQ== Z2V0RmlsZQ== W3Byb3BlcnR5 IGVuZGluZ3M= aXp6YXJl PXRyYWlu LWxvdmluZw== IG5vdXZl IGNvbW1hcw== IGNhbWJp IFp1c2FtbWVu CUV4dA== KG9ic2VydmVy Zm9ybWlr IHF1aW5kaQ== IEl2b3J5 IEJvbGl2aWE= YXNhZA== X2xlZ2VuZA== Q2l0aWVz X0ZJUkU= YXNkZg== LkRlcHRo VmFsdWVHZW5lcmF0aW9uU3RyYXRlZ3k= dXBk LkdldFJlc3BvbnNl IHVyZ2VudGx5 SW52YXJpYW50 R2V0WA== IHN0YXR1cmU= IGltYWdpbmluZw== YXRlYXU= TU9WRUQ= KFRyYW5zYWN0aW9u X3Bvcg== UmVmUHRy Lmdsb2JhbERhdGE= Z3JhdmU= aW1lc3RlcHM= Zm91bmRsYW5k U2FsaXI= YXJ0aXN0cw== IGNyZWF0ZUFjdGlvbg== IFNhbnRv INC90LXRgg== CQkJICAgICAgICAgICAgICAg LXNvbmc= IG51aXNhbmNl IGltcG92ZXI= XykNCg== IGNyb3dkZnVuZGluZw== IHRpbXA= UGljdHVyZXM= IGxvZGdpbmc= 6ZKu YXRhc2V0cw== 44Ot44Kw cGVyc29ucw== Y29uZHVjdA== IGV2YWRl IGhhdW50aW5n ICEhfQ== IExBUkdF IGtpdHRlbg== IHVwaGlsbA== KG1pbnV0ZXM= IEVtYW51ZWw= J0M= IFNreXdhbGtlcg== cHVycG9zZQ== X21hcHBlcg== IGFkYXB0YXRpb25z LmZpbGxUZXh0 cnVr IHJlcGVydG9pcmU= KHByaW9yaXR5 KG1hcHBlZA== Um9iaW4= IGVycm9uZW91cw== IGluaGFs Qk9WRQ== KCIsIikK dWVsbGVtZW50 IGZpbmdlcnByaW50cw== IFBZVEhPTg== LWRlbQ== bGVhbm9y esSFZA== IlBlb3BsZQ== YXNpZXI= IHBhdHJpb3RpYw== LmZyZWV6ZQ== SUo= IEJhbmNv IGlzU3VjY2Vzcw== KHZlaGljbGU= KExheW91dA== IGNhcnZpbmc= X2NpcGhlcg== IHZlemVz KCdfJyw= IEZpcnN0bHk= IGZ1bGxlc3Q= IExpc3RlbmluZw== X3NpZ25hbHM= ZXdvbGY= IFNDUg== IE1lcnJ5 L3Rlc3RpZnk= X1NBTklUSVpF aW9jdGw= SUVFRQ== PU1hdGg= IGVucXU= CWF1eA== 4pml IGRpc3BlcnNlZA== aGFyZQ== YmVybg== IEFtZW5k IGluc2lkZXJz IEFsdmFyZXo= IFp1Zw== L2NhbGVuZGFy IGhldXJl LXBhcGVy IHNvZm9ydA== IHNtaXRo IHBvYg== KHJhdGU= IHNvY2nDqXTDqQ== IHdvZXM= IGJydXNoaW5n cWQ= b2xvZ3Vl c29ja2V0cw== X1lFUw== LmFkZENvbHVtbg== IGV2YXNpb24= U09GVFdBUkU= YWJveA== LnlsaW0= IGVuZ3VsZg== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwo= IG5nT25EZXN0cm95 IG5vc3Nh LmxzdA== KCl9Pgo= Lmt3YXJncw== IGNvbnRleHRv IFBVQg== RnU= IGJpZ290cnk= IGJyaWQ= IHN0ZXJvaWQ= IHZpZ29yb3VzbHk= IGJ1cnN0aW5n IHZlbmU= IHNhbGFkcw== IFZBUklBQkxFUw== IE9uYw== IGZpcmVFdmVudA== c2FuZGJveA== IHRvdWNoc2NyZWVu c2Fucw== L0luc3RydWN0aW9u IGVvZg== bGVjdHVyZQ== Py0= LmxvY2FsaXphdGlvbg== VkVT X3ZvaWNl aXR1cmE= LnJlcG9ydGluZw== IF0pOw== Tm92YQ== X0NPTVBBVA== IG91dGJyZWFrcw== LmNsaWVudFdpZHRo aWZsb3dlcg== X0dSQQ== SW5pdGlhbGl6aW5n X3BlcmY= KCl9LA== PVA= X0lNRVRIT0Q= IHRpZ2h0ZW5pbmc= IHRhYkJhcg== IEJL CURvdWJsZQ== L2hhc2g= IG1leg== VG9VcHBlcg== VEc= KGluZGVudA== IHNpbGljYQ== IC8vLy8vLw== w7Zr IGVsdmVz ZW1wbGF0ZXM= LkNvbXBhcmVUbw== IGd1bmZpcmU= YW5pbWFscw== IGtlcGFkYQ== IENQUg== X0xTQg== CXZlcnRleA== INC/0LXRgNCy LCE= IGR1bHk= X1BBVENI RU5B CUND Y29tcG9zaXRpb24= X3N2 TGJs amVq 0YHRgtGA0L7QuQ== LkVkaXRWYWx1ZQ== 5YW3 YW50YXM= IGJyZWFkY3J1bWI= IFRlc3Rlcg== IE1lYXN1cmVtZW50cw== L0lucHV0 IFJheg== X1BPTEw= SW5kZXBlbmRlbnQ= Lmx1Y2VuZQ== IE1lY2hhbmljcw== Y29sb24= LnN1cmZhY2U= IHVuYXM= cmFkbw== UExJQ0FURQ== Q1JU LnNldERlZmF1bHQ= JUg= IHJlc3BvbnNhYmxl IHBlcnBlbmRpY3VsYXI= IFJlc3Bpcg== IFR1bmlzaWE= XEFycmF5 6Lev5b6E IHBhdw== IGRlYm91bmNl KE1QSQ== INiv2LE= IGVsaw== IFJlbGF5Q29tbWFuZA== L2xpZ2h0 LnNlcmlhbGl6YXRpb24= QlNJVEU= KSgoKCg= IEJpb3M= X3N2Zw== KHN1cmZhY2U= RHVwbGljYXRlcw== ICg+ X0FTVA== Lm5pY2s= IldoeQ== IEludGVsbGVjdHVhbA== YWJicmV2aWF0aW9u ZWFyYWJsZQ== IGNvbnNlZ3Vpcg== KEJl X1BvZHM= PEFuaW1hdG9y X1VOREVGSU5FRA== QVJSWQ== IC8vfg== cGVyYXRvcg== LndyaXRlRmlsZVN5bmM= QWxz bGRlcg== IG1pZWpz IGZ1bmNz aW5jaWJsZQ== IGR1c3R5 IERyaWxs IGNvbnRpbnVhbA== IEVsZWN0cm9u LmVuZW15 KHBi IHJldW5pdGVk U21va2U= LWZhY2Vk SW50ZW5zaXR5 IFRyZWVNYXA= IEFyZ3VtZW50RXJyb3I= LndyaXRlSGVhZA== IFRSRQ== U3BsaXRPcHRpb25z LyoqKioqKi8K IFw8Xg== IEludmVzdG1lbnRz U1VNRVI= IGRhYw== QU5J Llllc05v KG9mU2l6ZQ== eXRo ZWxvYWQ= IGltcHJlcw== IGJsb2Jz LnJldHJpZXZl IHR5cmFubnk= IGNhbmNlbEJ1dHRvblRpdGxl IGhhY2k= IENhc2lub3M= IGRoZQ== UmV0YWls IFBvcm5odWI= IENyaW1lcw== T2ls KElTZXJ2aWNl UmVzaXphYmxl CVNv T2Z0ZW4= IGNvbW1vbnBsYWNl X0dD YWxkaQ== YXRobG9u KFZpZXdHcm91cA== KEVtcGxveWVl IHNhZmVndWFyZHM= 6YCA5Ye6 X0FVUkE= IHVubm90aWNlZA== IFRob3Ju bW9kZWxl IGFjb3Jkbw== IFdlbmdlcg== aW11cw== ZW5zYnVyZw== b21iYQ== Y2nDs24= Imh0dHA= X01hdHJpeA== fHx8fA== b3JuZWNlZG9y CUJ1ZmZlcmVkUmVhZGVy cmVnaXN0ZXJz cmVsZWFzZWQ= IGFkZE9ic2VydmVy IFZhbGVudA== KEN1bHR1cmVJbmZv IG1hbm5lbg== IGJ1cmdsYXJ5 X21pbnV0ZQ== IGludGVyY2VwdG9y b2NyYXRlcw== YXR0cm8= IFlF ZXNzbGVy bGlzdGVuZXJz L3Byb20= IOek dG91Y2hlcw== RXNw IEFib3J0 IGZmaQ== IGNsdW1z TklM X1ZJUlRVQUw= IGxvaW4= eW5vbWlhbHM= INec IGd6 IE5lb24= SVNJUw== YW1lcmF0ZQ== X2F2YWls IG1heGk= IGlzQXJyYXk= Q29sdW1uSW5mbw== aXppbg== IHBlcnNv IG91ZA== aWFsaXplZA== eW1p IGNvbmZpZGVudGx5 PSIvIj4K LmRhdGFzb3VyY2U= IHBheWNoZWNr IEJhdg== L0JyYW5jaA== IFRlYXI= IG1lcnVwYWthbg== IEJyYWg= INC60L7QvdGC 74I= LHBhdGg= IGRhenpsaW5n IFVDSEFS IHByb3Zpc2lvbmFs 0L/Qvw== IGxlZ2FsaXplZA== X2FsZ28= X1JTQQ== YWx0ZXJuYXRpdmU= IERFVEFJTFM= VG9Ebw== cmVmbGVjdGlvbg== X1dFRUs= IENMRUFO IHNsb2dhbnM= IOuTsQ== IFZldGVyaW5hcnk= aWRm LmRhdGVUaW1lUGlja2Vy aWNvbnRyb2w= KHBsYXk= IHVsbGFt ICcpDQo= IGNoZXF1ZQ== 5a6L5L2T IHVuc2VyZW0= IEFyY2hpdGVjdHM= YW1lbnRhbHM= IHZtYXg= IGplbWFuZA== Q0VFRA== IE9saXZpZXI= c2V2ZXJpdHk= Uks= RGlzY29ubmVjdGVk IHdlYXBvbnJ5 dWnDp8Ojbw== IGJpbmdv ZG9udA== X0NIQU5ORUxT IERhZw== IGTDpHI= w6lyaXF1ZQ== Z3JhZGFibGU= IENPTVBMRVRF IHNwYW5pc2g= IGluc3RydW1lbnRhdGlvbg== dmFzaXZl RFJBVw== IGZwdXRz IFNwZW5k IFJlc3BlY3Q= Q291cnRlc3k= IHNjaG8= IHBvc3RhZ2U= IE1lYWRvd3M= IHR1dG9yaW5n ZXJ2bw== QWJzb2x1dGVseQ== w6FuZGV6 vZTrk5w= IFNIUg== cGhvb24= IERlcG9z PScnCg== IHBoeXNpb2xvZ3k= KnRpbWU= IFRvdWdo ZG9jaw== L2hl KEhhdmU= IE1vaW5lcw== U1RZUEU= IEJyaWRl IHN0cm9u IHdvcmxkdmlldw== IGdyYXR1aXRv IGFlcm9zcGFjZQ== IElocmVt IHFj IG1hbmlmZXN0YXRpb25z c2xhdWdodA== PEFjY291bnQ= IEluZm9z YW1iaWw= X0ZpbmFs IGFkbWluaXN0cmF0aW9ucw== IGNvbGxhYm9yYXRlZA== LmpkZXNrdG9w b2x1Y2nDs24= YXNjdGltZQ== X2FsbG9jYXRl YXJyaXZhbA== Sk9S IHNoYWR5 IHBpbmVhcHBsZQ== 44KP IHNhdGlu YnJlcm8= IExpZXM= IHRlbnNvcnM= IEludGVsbGlnZW50 LlNlbGVjdGVkSW5kZXhDaGFuZ2Vk IHJhZGlhdG9y YXNzaXN0YW50 JGZpZWxkcw== CXN0ZXA= IE1pdGdsaQ== IEV2ZXJldHQ= IFNjaGVkdWxlZA== SG9yYQ== Il0tPg== IG1vdHM= IERTVA== Zm9udE5hbWU= IFdhcndpY2s= X1Rhc2s= KkM= 44On b2JlbA== X0RFVA== IHNvY2lvbG9neQ== IEthdHo= aWNpb25z b3RsYW5k YWRvbw== X3BhcnM= IHJpcHBpbmc= aWNobw== IG51dHJpdGlvdXM= CWRhbWFnZQ== S3k= IGFuY2hvcmVk IGFydGlmaWNpYWxseQ== IEp1dmVudHVz L3Blcmw= IGV4cHJlc3NpdmU= eEVF IEVudW1lcmF0aW9u Lk1FU1NBR0U= KGRlZw== 5b+X IyMjIyMj ICIiKSw= a2zDpHI= XE1haWw= RGVzaWduZWQ= IHN0YWZmZXI= IHNhbHRz KioqKioNCg== IOKB IHNldFRpdGxlQ29sb3I= RFZE LldyaXRlQWxs ZWxsYW50 IGNvZXJjaW9u IFNvcnRpbmc= 6KiA IHN0YXJ2YXRpb24= Ly97ew== LmhlYXA= IE1lZGlldmFs ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 77yR77yQ IHdhcmRz IEhlcmM= IEhvZ3dhcnRz LWNvbW1lbnRz IExhdWRlcmRhbGU= 5rw= IHJpZnQ= IHplaXQ= IHByb29mcw== LnZpZXdwb3J0 JHN0YXJ0 IEJvdWdodA== LnJpY2hUZXh0Qm94 IGNsaW5n ICcqKg== T3duZXJzaGlw IEJvZWhuZXI= KGR5bmFtaWM= IG1lZGljYWxseQ== IFdURg== IE1haW5NZW51 6LSt IGRpZmVyZW50ZQ== L3Jlc3VsdHM= ZW50aGFs IFdpZGdldHM= cnVzaA== IFJNUw== IFZvbGxleQ== IHJlbW92ZUZyb21TdXBlcnZpZXc= IExhZmF5ZXR0ZQ== IEZldGNoVHlwZQ== YWNhcw== IHBhdGhvZ2Vucw== IE1NTw== LkN1cnJlbmN5 b2Npb3Vz IHNwcml0ZUJhdGNo ZG9sbA== IHZhbXBpcmVz bGF1bmNoZXI= IHBlYWtlZA== IGRlYnVuaw== IEFTRA== IHVuZXF1YWw= IHNxdWFkcw== fS4kew== bWFuaQ== IkU= IEZhaHI= IElTSQ== IHVuYXZvaWQ= b3Bob25l WzpdCg== IERpcmVjdGVk IGJ1c2hlcw== LmZhaWx1cmU= IGltbWVyc2Vk ZXhv SGlzdG9ncmFt IEthbm4= IHBpcmFjeQ== IENydW5jaA== IGzDpg== Ly8i IG1vbm90 IFNhdW5kZXJz IFNldmVudA== KEFic3RyYWN0 IHNtb2tlcg== cm9uZQ== LmNsaWVudFk= ICItIiw= IEZvdW50YWlu IGlubmU= 7IOJ Q3Ry JGlucHV0 UFJPRklMRQ== IERvbmF0aW9u V2l0aEVtYWls IGZyYWN0dXJlcw== S2VlcGVy IG1laXNqZXM= IGFyY2hpdGVjdHVyZXM= IEx1bmc= J2ltYWdl aGFybWE= IGFiYW5kb25pbmc= QUxMRUQ= c3VidHlwZQ== cmVpcmE= IG1vc3M= IFBhcnNvbnM= YWtlZG93bg== PW9iag== IHN1Y2Vzcw== IHdlYXJhYmxl 44Kn IGFkdWx0aQ== LnVt IHZpYnJhdGlvbnM= IHN3ZWxs IERpc2Nsb3N1cmU= IFJERA== cGFpcnM= YW5nZ2Fu IG1haW5CdW5kbGU= IERJTg== IHJvY2tlZA== c2hvdWxkQmU= Lmdi IElNRA== IFdO LGFyZw== 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm W109JA== LlNN IGFsZ3Vucw== YWRkb25z X0NvbW1vbg== X1JFRlJFU0g= INmB2Yo= IFRZUE8= IEVjb2xvZ3k= IGdsdQ== LkRhdGFUeXBl IFByb2Jl THV4 b3dlZ28= IHJlaw== IFBsYWludGlmZg== YWNoYWJsZQ== Lm5hbWE= Km91dA== fX17ew== IENBUElUQUw= 5L2G SW1wb3J0ZXI= LmNyZWF0ZVNlcnZlcg== X3Jlc29sdmU= X0VQUw== c3RlbGxhcg== X1Byb2ZpbGU= CXN3 LW1vbg== dWRldg== XFBsdWdpbg== X01JWA== IERpc2NyaW0= LmZyb21MVFJC IFN0cmFuZA== QW55dGhpbmc= cG93ZXJz XV0NCg== LlRJTQ== IGFkZHNsYXNoZXM= IGVzaQ== QEJlZm9yZQ== IHNhaw== ICcvJzsK Y29j xZ/EsQ== ICkpOw0K X2Fib3Zl IEVDQw== L2NwdQ== IGNhZGU= LlN0ZGVycg== IHBlbGxldHM= IFBhbGlu IGfDqW4= X2phdmE= IHNhbGFo IGJlcmdlbg== X1NXQVA= IGdpYg== acOjbw== X2Rpc3RhbmNlcw== IENpbmRlcg== IGFuYXJjaGlzdA== aW1hdA== CW1vY2s= 44GX44G+44GZ T21lZ2E= IGJhaHdh X1BhcnNl LnBhcGVy CUludGVudA== cmVucw== L2dyaWQ= IGZpbHRoeQ== LmV2 IyMjIyMK IHNhcmU= IHNvYWtpbmc= IFJlZ2lvbnM= X1VTRUQ= IFNpaw== aWZpa2FzaQ== CUVkaXRvcg== THVjaw== IOyXsA== xINt LiI7 IFppZWw= IGdyYXlzY2FsZQ== KEZ1bmM= 44OB LkRlbnNl LWxlYW5pbmc= IGdyYWNlZnVs R3JhcGhOb2Rl X0NPTU1JVA== IENWUw== IHBsYWlucw== IHJlag== cGNpb25lcw== IHVuZGVybWluaW5n X2NhdHM= ZmVi Q29sbGVjdGlvblZpZXc= U0VNQg== IHRodQ== dGV4dGJveA== KEFuZHJvaWQ= IHJpZ29y IFlpZWxk LmlzUGxheWluZw== OnZpZXc= cmVtYWluZGVy IFBpcA== KWluZGV4 IEJlY2tlcg== dG9Mb2NhbGU= YXV0b3JlbGVhc2U= IFJvbWVybw== LkhhbmRsZWQ= IENhYmluZXRz KVY= IHJ0ZQ== IEh1bHU= aWNpZWw= L2FuaW1hdGlvbnM= IHByZXN1bWU= LnRyYW5zcGFyZW50 IHN1Ym1lbnU= cW0= aWVydGVu IHRleHRTaXpl IHN0YXJ2aW5n L2pvYg== QXBhY2hl IHlpZWxkaW5n LWFydGljbGU= Jz0+JF8= IOih PFNwcml0ZVJlbmRlcmVy IFNoaWE= KToo IHB1Ymxp emllag== IHRlbGVzYw== IHRlaWw= TGVnYWN5 IFBsYWNlbWVudA== KCkpew== IHRyb3VibGVzb21l 5pif IHBlcnPDtm4= X0FzcE5ldA== PX0= KHVzZXJJRA== U3Vz 44K6 LWF2ZXJhZ2U= IFFJbWFnZQ== LlN0cmljdA== dGVib3Jn LWZ1bmN0aW9ucw== UkVHSU9O Pk5ldw== X2Nob29zZQ== KGNp IHVubGVhc2g= IFJJR0hUUw== IFNwZWFy CW1ha2U= IHR5cw== YW5lbGE= IFdY X01BS0U= L3NldHVw IG9uU2F2ZQ== IGNsaW5pY2lhbnM= CWJhY2s= LkxpbmtlZA== IGNvbnNlcnZl IGJpdHRlbg== X3ZhcmlhbmNl IGxpcmU= IGluZXJ0aWE= dWZmbGVz X01QSQ== aWRkbGVz W2Fycg== LnZvY2Fi IHNoaXR0eQ== IG5lc3Rl c3NpemU= IEtU Ymxlcg== X2xpbnV4 IG1vbmdvZGI= IElURU1T S29u IEJ1cnN0 X3Bob3Rvcw== Q29sb3JhZG8= IGFja25vd2xlZGdtZW50 IG9pbHk= IG5mcw== IFppb25pc3Q= IGFkZGljdHM= IGFkZFVzZXI= IE1pc2g= IGtX IFdhbnRz KHJlY29yZHM= b2N1cnJlbmN5 SlNHbG9iYWw= LmVsYXBzZWQ= IE5i IHBwdA== XERlcGVuZGVuY3k= Um9s IMOnYWzEscWf IGV4cGFuc2lvbnM= YnViYmxl IG1pZHRlcm0= ICcjew== Y3R4dA== SVN5bnRheEV4Y2VwdGlvbg== IFZhbGxl IENhZGlsbGFj ICIifSwK IHNlbXVh cmljaFRleHQ= c29mdG1heA== b2JqUEhQRXhjZWw= LmhzdGFjaw== X2NyaXRpY2Fs KDw/ ZGo= IGNvbnNvbg== IHJvb21JZA== RE9NQ29udGVudExvYWRlZA== cGFybXM= IHplaWd0 VFBM LW5vdGNo IG9wcHJlc3NpdmU= Q29kaW5n IExlYXZlcw== KERpc3BsYXk= LnNpZ25Jbg== Ly8tLQ== IE9wcg== Y3Rh IG1ldGF2 U2VyaWFsaXplZA== IHVuYWZmZWN0ZWQ= IEFUTA== IEtQ QXRsYW50aWM= LHVybA== LHN0YXRl IGJpc3Q= ZW5lZw== IHNpbXBsaXN0aWM= IGJpZGRlcg== IHBlcmNlcHQ= IGNlbGli IFRIUk9X KC9b VGNw IGZ1cnRoZXJtb3Jl LkFjYw== b3BwYWJsZQ== 5Lik IFRhcnQ= IEJlbno= IGVtYm9kaWVk KENvbnN0 ICst UGFydGljaXBhbnRz IGh0dHBSZXF1ZXN0 YWNjZW50 IFPDvA== IGhvcnJpZnlpbmc= IC8+LA== IGVuYWN0bWVudA== IFVOSU9O L2xvZ3M= IHNjcmVlbkhlaWdodA== IGV0d2E= 5L6L5aaC IGHDum4= 5bem X3RpbWVsaW5l ICIiKSkK JzonJw== Qlc= IHJlbm92YXRpb25z IDwK UGFsZQ== Pjo8Lw== U2tlbGV0b24= IGdldFVzZXJz X2RhdGFmcmFtZQ== YWJy bWF0ZXJpYWxz JmVhY3V0ZQ== LkRpc3BsYXlOYW1l IGh2aXM= X2xhbmd1YWdlcw== LnN5 dG93ZXI= SUZJQ0FUSU9OUw== IGJhcnJpYw== IFBsdXRv YDs= 44OL Y2VudGU= I2Fi IGxleGljYWw= IEJSTw== IHJ1bGluZ3M= SEVZ LmlPUw== cmV0dXJuZWQ= LmJvb2tz IEh1YmI= ZW9m Pj46Og== IOyG IGdvVG8= 6ICD 44Go44GG PEZvcm0= Y29waWVz LnF1YW50 IFBvdGF0bw== IENvdXNpbnM= IHPDuw== R292ZXJu IGdhbGVy IEZJUg== X1dpZHRo IFNoZWxkb24= LkRldg== IFJlc3BvbnNpYmlsaXR5 c29uaWFu IHN1cGVyY2xhc3M= Yml0c2V0 ZWRkYXI= IExhYm9yYXRvcmllcw== IGNvaW5lZA== IFRlY2huaXF1ZQ== KENvcmU= IHNwcmF5ZWQ= IHBvbmc= KE5ldHdvcms= IHJvYXI= IEVBU1Q= c3RyYWlu IG1lbnN0cnVhbA== b21iYXQ= IGNhbG1pbmc= CURpbQ== X21vdmllcw== IFJBSUQ= LWRpc21pc3NpYmxl IGZyZXVuZA== LWNoYW4= IHJlc2lzdG9y X0NvcHk= b2NyaW5l IGVzcGlvbmFnZQ== Z2Fkbw== TkRBUg== IHBvcmNlbGFpbg== dGhhbG0= IGBb IGdyYWRv 0LjRgA== RE9VQkxF IGFjY2Vzc2Vz LkZsb29y IOKGlA== IHRva2VuaXpl YW5hbHl0aWNz LkNyZWF0ZUluc3RhbmNl IHN1Y2hl CWVudA== aWduZXI= INC/0LXRgNC10LQ= IGNvbmRpY2lvbmVz LmxpYnM= Iic7 UERPRXhjZXB0aW9u IG9uRGF0YQ== IEF1dGlzbQ== LWhlbHBlcg== IHJld2luZA== IGNvZmZpbg== 44O844K4 IHRyYW5zbWl0dGluZw== LnNldEFsaWdubWVudA== IGRlYWxsb2M= IGFuY2VzdHJhbA== b2dpZQ== LkNPTVA= OmZyYW1l bW1v Jzoi IFJlZ2VudHM= IGNoZWF0ZWQ= Lmdn IHBhY2Vk IGVzdGFk b2NlbmU= bHNh KGZj L2dyb3Vwcw== L21pc2M= IFNodXR0bGU= VVBJ w6Fv LWN5Y2xl CXByb3Bz IHJvdHRlbg== UmVqZWN0ZWQ= I2Fj LnVh IEFtbmVzdHk= IHBlbm5lZA== SU5DUkVNRU5U PGRpbQ== LnNldFVw IFR3ZWV0cw== IE1hZHVybw== INmC IENBY3RpdmU= CUJZVEU= KHNlcGFyYXRvcg== LlJlc2l6ZQ== dWZmbWFu c3VwcG9ydHM= IHVyYg== IEZvdW5kZWQ= X2hhcmQ= IGVjbGVjdGlj LkZpbHRlcnM= IFJvdW5kZWRSZWN0YW5nbGU= X3NhbXBsaW5n IEpldHp0 YW1lcmljYW4= Lmludm9rZUxhdGVy IEJ1dHRlcmZseQ== KGNvbm5lY3Rpb25TdHJpbmc= IE5hb21p IEphaW1l cnRz IG1hZ2ljYWxseQ== Lm1hY2hpbmU= IEFwcGFsYWNo Iisi dmFsZQ== LW1vdW50ZWQ= IGFjaGU= TUo= IFVJSW1hZ2VQaWNrZXJDb250cm9sbGVy LUp1bg== TWFuYQ== a3JhaW5l RENG L1Byb2R1Y3Q= IFJFU0VSVkVE IEZIQQ== OkAiJUAiLA== IFByb2pla3Q= IE5pcg== IENhcm5pdmFs ICom IFFT V0hP IHdlbHQ= IG1hcnJ5aW5n QWxleGFuZGVy IFJldmlld2Vk YWN0ZXJpYQ== IHdhbg== KHJvYm90 IFdpbmRvd01hbmFnZXI= IG1vbnVtZW50YWw= IERvbWluZw== L3dlYXRoZXI= X3NlY29uZGFyeQ== T3BlcmF0b3Jz X1NJREU= S2F0 LXpvbmU= IHNpZ25pZmllcw== IEh0dHBNZXRob2Q= L2NvbnRleHQ= Ig0KDQoNCg== IFJvZHJpZ28= IGJ1Yg== L211c2lj IHNlcm9udA== IG1STkE= X2VtYWlscw== ICc+Jw== IEdlbWU= INGA0LDRgQ== IH5+ IGR1Y2tz IEZyZXVuZA== RXhwZXJpbWVudA== IHJlb3BlbmVk IFwiew== IGVsbGlwdA== IGNvbmNhdGVuYXRl IHBvbG8= VGltZVpvbmU= ICAKICAgIAo= IGNhcHRpb25z cmlja3M= LmZyZXE= Lm1lbW8= IHNtYg== RHJ1Zw== XVsv X0JBQ0tFTkQ= IEVsbGE= IFBvcnRpb25z IGZldGNoRGF0YQ== IGNvcm91dGluZQ== IGVzdGF2YQ== IEdlbml1cw== OmB+ IFN3YW5zZWE= KHBheW1lbnQ= Vm90cmU= IFBydWl0dA== Lm9mZnNldFdpZHRo YXJ5bA== IHVuaWZvcm1seQ== IFdhcnA= IFNFQQ== IGRlZHVjdGlibGU= IGJ1bGxpZWQ= IEJlc2No IFByb3NwZWN0 T1NQ IlllYWg= IEFuZ3J5 LlZhbA== IGdpZ3M= IGJ1bGt5 ZXRlcmlh LmdldFN0YXJ0 IE1FVEg= IGNvaGVyZW5jZQ== IG1lZGlhdGVk 0LXQs9C40YHRgg== Li4uLgo= IHN0cm9rZUxpbmU= bWo= IFVuc3VyZQ== YXRocm9vbQ== KEJpbmFyeQ== X0tleVByZXNz 5p6E aW5oZXJpdHM= IHJlcHJlaA== CVNjaGVtYQ== IHVucmVzdHJpY3RlZA== LmRlZmluaXRpb24= XT8u IGl0aA== 5aCx IHNsaW1l bXNncw== X0pT CVZlcnNpb24= X1NFQ1VSRQ== IGNvc3Rv LlJlc3Ry Y3Ny X1RPT0xUSVA= cGNs IOKGkw== U2VsZlBlcm1pc3Npb24= LnJhdmVs IG1lbWJyZXM= QXNzZW1ibGVy cm9taXVt c3VyZg== IFVQREFURUQ= KGJyYW5jaA== KGluY2x1ZGU= IElkb2w= XE9iamVjdA== IGNsb25pbmc= IGlzTmFO IGFueg== xrDhu51uZw== IG9uYw== X0NMVVNURVI= IHt9KSwK aW1pbmFyeQ== CWNvbnRlbnRQYW5l dHJhaWw= IG5pbmV0eQ== IE5pYWdhcmE= IEFuZHI= w6lzeg== IGRpZmlj dXRyYQ== J319Pg== 44Kk44OI c3Bhcg== ICJcIiw= IG15ZmlsZQ== ZmZj IG5vdGljZWFibHk= ZXlh IFB1dHRpbmc= SlY= LmRpbWVuc2lvbnM= ZXJjYQ== Z2VuZXNpcw== ZWZmZWN0aXZl IHBlcmRlcg== Lk9S X0NPTVBBUkU= Omxlbg== L3JlZA== IEFyaXN0b3RsZQ== IHF1ZXJpZWQ= IGZvcmVzZWVhYmxl IFVJQ29udHJvbA== cmVtaW5kZXI= IGNlbmE= IGhpYw== ICIiOw0KDQo= L2Jhc2lj IGFmZm9yZGFiaWxpdHk= LGVycg== INGB0LjQvNCy IElTUg== bGljZW5zZXM= Vk9JQ0U= Lkxhbmc= LnJlbGF0aW9uc2hpcA== IGxlbmRz IG51dHplbg== IGVzcGVjw61m aWVuZGE= PFBhaXI= VHY= X1JFVFJZ IGhvbm9yaW5n X2RlY2xhcmF0aW9u KE5P IEhpY2s= IG1pbmxlbmd0aA== IEdlc2NoaWNodGU= YXBlc2g= QVRPTQ== JykiKTsK ZW50ZXJwcmlzZQ== Pn08Lw== IHBvbGl0aXF1ZQ== ZWRpdGlvbg== X0RlYnVn QW5uZQ== LlNjb3Bl Y3Rw Y2Fub25pY2Fs Pj47Cg== TWVudXM= IGZpZXJjZWx5 Lk9uY2U= IEJvcnJvdw== IHNvc3Q= IHNlcnZpbmdz LWZsYWc= IHZlc3RlZA== IGZyb24= 7ZWo IGZhbWluZQ== Il0pKXsK ZXJlw6dv IGtpamtlbg== IEZsb29yaW5n 55CD b2JzZXJ2YXRpb24= IHVzZXJEYW8= PSIiPg0K Q09WSUQ= YmFieQ== IHRyb3VnaA== IFNlYW0= IEZpZ2h0ZXJz b21pdA== IENoYXJnZXM= UnVzcw== IHF1ZWxxdWU= R2V0UG9zaXRpb24= IE1pbmlzdGVycw== X3JlY2VpcHQ= IHJvb3ROb2Rl bXVsdGlw JHNlYXJjaA== IikpKSkK dGFrZXM= ICghIQ== IEJBVA== Y2hhbmc= xJM= Lm9j IHNraWxsZXQ= IFNLVQ== IEdhbGxhZ2hlcg== IGNyZXNj d2Vla2RheQ== ZXJ2aXNlZA== Q2FyZENvbnRlbnQ= LmFjY2Vs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK VGFp IENvbXBhdGliaWxpdHk= eENG X3Jld2FyZHM= cmRm QVBQTEU= LWZlZA== IGRlcGVuZGVk LWdlbmVyYXRvcg== KFByb2Nlc3M= 0LzQvtC2 IGRpc2NyZXBhbmN5 IHBob3NwaGF0ZQ== TmV0d29ya2luZw== 6K6+6K6h5Zmo KHJv IGNvbmN1cnJlbmN5 CWF1dGg= UGx1Zw== QVRBTE9H c3Viag== L3RlYW0= KGF2Zw== b2tpbg== IHBsZWRnZXM= IGNvbGxhYm9yYXRvcnM= IGVtYmFya2Vk IERvY2g= IERhaXJ5 Y29tcGV0aXRpb24= IE11dGFibGVMaXN0 LXNldmVu IGNvbmN1cnJlbnRseQ== IFZpag== IHJlc2V0dGluZw== ZHBp IHNsaXQ= IFBPSU5URVI= IENBUlQ= LmRleA== Y3Vsb3M= X3BlcnNvbmFs IGFuYWx5dGlj I2NyZWF0ZQ== X21lbWNweQ== KExpc3ROb2Rl X1RhZw== IElycg== Ij4nOw0K U2hvcnRseQ== LnRpcA== XFs= IFJlcHJlc2VudGF0aW9u X0xJVEVSQUw= LmNibw== IEthcm5hdGFrYQ== IENvbXBldGl0aXZl IFJ1ZQ== IHJ1bm9mZg== IFNwZWxscw== ZmNsb3Nl Y2lz RnJh IHJlbW9yc2U= IENvbG9nbmU= IHJhbmdlcg== IE1vcmc= ZmlnaHRlcnM= LlJlcXVlc3RQYXJhbQ== Q29ycw== IGRlbm90ZQ== IGNob3Nlcw== w6JuZA== LnJlY3ljbGU= IExvZ2lzdGlj IERFQUQ= LWxvYWRlZA== IENsZWFycw== IGtlbGw= cmFwaGlj IE1hbmU= RU1CRVI= IG1hc2tpbmc= CWVkaXRvcg== SGFsbG8= Omxpc3Q= IGV0aG4= LXNlYXQ= ICopWw== IEdseQ== IEFDUw== CXN0YXQ= L0NvbW1vbg== IGRpc2d1aXNlZA== RmluYW5jZQ== IEVsZXBoYW50 dGVtcG9yYXJ5 IENhcmx5 IGNvY29z IEp1ZGl0aA== IHdyYXBwZXJz IEx1bmFy IHLDqWN1cA== LXNldHVw IHNpemFibGU= ICAJIA== Y2xhc3NpZmllcg== IGZpZ3NpemU= IG1hc3R1cg== IOabtOaWsA== IFJ3YW5kYQ== KXQ= IEN1cHM= QXp1cmU= KCl9LAo= U1BBUkVOVA== KGRpYw== IFRleHRGb3JtRmllbGQ= IGRlZm9ybQ== IGRpcmVjY2nDs24= IHlheg== IGdsdWVk IGF0cmF2w6lz Y29mZmVl IFVwZGF0aW5n IENvbGxlZ2Vz w6RsbHQ= YW5kZWxpZXI= IHNhbGly IFNDQUxF cWU= 6rO1 KHJlY2VpdmVy bWRi Im1hdGg= aXNuYW4= dGVsZWZvbmU= UkVQT1JU LmFkZE1vdXNlTGlzdGVuZXI= ZHVlZA== e31d KCkpOg== IHdvcmtpbmdz fSk7CgoKCg== IGNvbXBvbmVudFdpbGxNb3VudA== U2VydmVycw== X0NMT1NFRA== SVpFUg== IGJvb2I= IENPTkNBVA== IEhhcHBpbmVzcw== IGNvbW11bmU= eEFC b3duZXJzaGlw X05FQVI= X0hBUkQ= IFlB bGlvbg== IHNwaWVs IHRhZ2dpbmc= IGltbW9yYWw= LWdyb3VuZA== IHRodW5r IGxvY3Vz IExhdHZpYQ== aXppb25p Y2xhcnNpbXA= IHBhdGllbnRseQ== XEhhcw== IHN1Ym9yZGluYXRl IFdISUNI ZW50aW9uUG9saWN5 IGRlcGxldGVk RlNJWkU= IFss IEJpb2dyYXBoeQ== IFNhbmRz U0hBUkU= Q2hhcnNldA== LndyaXQ= X1NVUw== IE1vcmVubw== IGJyb2Njb2xp IFZY YW1pY3M= LkdldFVzZXI= IENvbW1vZA== LnNjaGVtZQ== KHZz IGFuYWxvZ291cw== UHN5 PWxpbmU= LnB1Ymxpc2hlcg== IG9ud2FyZA== 0LXQutGB IERlYWxlcnM= IHRvQXJyYXk= IENob2ljZXM= 0JTQvtCx0LDQsg== IGRlZmF1bHRNZXNzYWdl IGFncmVn IENvbmNhdA== SFY= IENpcmN1bGFyUHJvZ3Jlc3M= X3N2Yw== VEFC X2ZpbA== Lk1hcFBhdGg= emJ1cmc= IGdldFByb2R1Y3Q= IFZFUklGWQ== Lk1vbmdv IHB1bmRpdHM= cHVsc2U= bGljdGluZw== Z2lhdGFu IC4uLiI= IGZpeg== IGFudGlt IENoYXR0 X1RZUEVERUY= R3V5 CXRlc3Rz IFNsb3Zlbmlh IENvbW1hbmRMaW5l IGJlbmVmaWNpYXRpb24= IGJpbmRBY3Rpb25DcmVhdG9ycw== TlRBWA== LUNz IGNoYXJpc21hdGlj LmFsbG9j X25m IGFzc2F1bHRpbmc= INGC0LDQsdC70LjRhg== IGPDoWM= IFNjcm9sbHM= SEFT eXl5eU1NZGQ= IEdhbGU= IFByb3plbnQ= IFRob3JudG9u ZGVhbGVy IGV2aWN0aW9u IGFuYWxl 4oCO PSIo IGVhZw== KCcnKTsKCg== IGNvbnRlbXBsYXRpbmc= aHlw YmVsdW0= IEZpdHM= IEV4YW1pbmVy IEJ1Y2M= IG1lbWJyYW5lcw== IGJyaWxsaWFudGx5 IENlcmFtaWM= w6h2ZQ== IFBvdW5k IHRyZWFzdXJ5 LicpOw0K CXRj ZWNha2U= Q3VycmVudFVzZXI= LmhhYmJv IHRyZWFzb24= IEZUQw== TVVY IG51bWJlcmluZw== UklB LS0pDQo= IGJlaWdl IEFydGVt YmFzZXM= X0JBTkQ= IFBhdmVs 0YHRgtGA0YPQug== dGhlZA== X25icg== INCx0LDQtw== c2xpZGVVcA== IFRheGk= IGFxdWVs IE1pc2NlbGxhbmVvdXM= ZWx1 IGluc3VsYXRlZA== IGFzc2V6 LkNvbmZpZ3VyZQ== IHF1ZWxsYQ== IHBhcmFzaXRlcw== QXdheQ== ZHVjaWJsZQ== KCc9Jw== IHZlcm8= IFdhdGtpbnM= IFNlcGFyYXRvcg== YXBzZXM= ZW52aXJvbm1lbnRz IGFwcHJhaXNhbA== cGF1c2Vk X2RlYXRo IHNpdHVhY2nDs24= IGZyYXRlcm5pdHk= IGluc2lzdGVuY2U= X2NyeXB0bw== QXR0cmliUG9pbnRlcg== Il1dLAo= IG94aWRhdGl2ZQ== IG5ldXJvbmFs IFFHcmFwaGljcw== Ij4nLA== IFNtaWxl T2JqZWN0aXZl IFNha3VyYQ== Wk8= YW1pZW50b3M= LkxvY2FsRGF0ZVRpbWU= L3VuaXQ= LWZyZXF1ZW5jeQ== LUNT In07Cgo= IHJlbGV2 QWxsb2NhdGlvbg== JU0= IER1c3Rpbg== IHN3aXBlcg== IE5hcmM= dGF0dXM= IGxvbmdpbmc= IHRodWlzb250dmFuZ3N0 IGNvbW1vZG8= IEFEQQ== aW11 X2ZvcnVt YW5naQ== CUFwcGxpY2F0aW9u W2Zyb20= IEJldGhlc2Rh b3Ryb3BpYw== IE1VQ0g= IHByZWRpYw== ZmlsbWU= KGdyYW1tYXI= KEFQUA== IEN1cmw= IHNob3J0aGFuZA== YWZmaWxpYXRl XSoq X250aA== aWFiaWxpdHk= Ym9tYg== WVQ= KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IEJpY3ljbGU= aW1hdGluZw== Lm5paQ== IEthcmE= YXNrYW4= cmVhY3RzdHJhcA== IHdsYW4= b2dyYXBoZXJz CSANCg== cGFnaW5hdG9y aWhhbm5h IG1hdGNodXBz X1BBRERJTkc= X3JlZ2lzdGVycw== eXRl IHByaWNleQ== IGZvb3Ro IEh1Y2s= UEFSVE1FTlQ= IHByb2hpYml0aW5n LmlzRGVidWdFbmFibGVk 4KS4 bGVpbg== PXJlcw== LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== ZGRs bXBy IOqwmQ== IFdBTEw= IHJldm9sdmVz IFBFUkY= KTt9 IFRvYnk= Ly4uLw== IGthbw== IGZvcmVjYXN0aW5n X0NvbnRlbnQ= IH0pKSwK cG9ybm8= bGVhZGVycw== LWhvb2tz aXN0cmlidXRvcg== L3N0b3J5 CWxpbmVz LXJlcGx5 IGFkcmVuYWxpbmU= Rmxvd0xheW91dA== LnJvdXRpbmc= CXRpbWVvdXQ= IHJhaWRlZA== CURE IGRpc2RhaW4= Y29uc2lzdGVudA== Z2Vpc3Q= KCI6Lw== KHN0YXRlcw== IEhJVA== LVJheQ== LWhlYWx0aA== IC8vLQ== dGVtZW50 Lm5hdmlnYXRlVG8= IGJlbmNoZXM= ZXdpbmc= ZW56aGVu LXNwbGl0 UmVqZWN0 IHB5bGFi IGZsYXNobGlnaHQ= IGluaXRpYXRpbmc= IE9FQ0Q= IGVudHJlZ2E= TmF0dXJl Lm9yYW5nZQ== IMO6bHRpbW9z IGVjcw== LmhvdmVy IGRlbHV4ZQ== Um9nZXI= IFRpYw== IixfXw== IHBsYWNlaG9sZGVycw== IHNwYXduaW5n IG51cnR1cmU= IGV4Y2hhbmdpbmc= Q3JlYXRlRGF0ZQ== IGxhbWlu IFNlbWljb25kdWN0b3I= ICovCgoKCg== IGbDuHJzdGU= IGluaXRpYWxz IHByb3ZlcmI= IEFjdHJlc3M= Q29uY2F0 IE5pY29sYQ== LXNob3BwaW5n aXZpdMOg aXRpYW4= IFdlcnQ= LkFkZFNjb3BlZA== IHNhbGVzbWFu Ym9z IEZlcnJ5 Q0VOVEVS bW9kZWxv IFJvZQ== IElzbGFuZGVycw== dXBlcnRpbm8= RGVjbGFyZQ== IHZvd2Vscw== IGJveGVy KHRvb2xiYXI= IGhhbGZ0aW1l bmlu IEJyb29rZQ== IFZlcw== 0LvQsNGC IG1vdGl2bw== cHJvdGVpbg== a3Vz YnVzeQ== IHN0cmluZ1ZhbHVl CU15 TnV0 dXp6aQ== IHNleg== IG9sZHM= IG1ldGh5bA== IGLDvA== aGliYQ== IEluc3BpcmF0aW9u IGF3YWl0ZWQ= QnJ1Y2U= QkFMTA== IFRSWQ== LWxpdGU= IHVuZGVyZXN0aW1hdGU= CXJ2 Lm1vdg== IGhpc3TDsw== IEVyaWU= Y25hbWU= L2Nvbm5lY3Q= Y29uZmVyZW5jZQ== X3RyYWl0 IGt2aW5kZQ== IEludm9jYXRpb24= IERhdGVUaW1lT2Zmc2V0 d2VjaGF0 Q0VP IExpYnlhbg== LmNhcGl0YWxpemU= IGdyYWNlZnVsbHk= IHJlZWxz aW5jcmVhc2U= Lm1heGNkbg== ZmF2b3JpdGVz SVRFRA== PFNjYWxhcg== LkZldGNo IHN1c3BpY2lvbnM= W01BWE4= X1RSQU5TQUNUSU9O IGN5bGluZHJpY2Fs Lm5leHRFbGVtZW50 IG1vcnBob2xvZ3k= IENlZA== IGNuYW1l KHJhd1ZhbHVl V2Fsa2luZw== TG9hZHM= X0FMSUdOTUVOVA== X1JPVU5E IFJPQ0s= Y2x1c3RlcnM= Img= dWV1cg== cGxhbnM= IGF0aGVpc3Rz IHZhdA== PSJfXw== YXdhaA== ZXJ2YXRpdmVz IGZpbmRPbmU= IG5vdGVib29rcw== IFRUTA== LkdldEFzeW5j IG3DvG5jaGVu bUFo YnJ0Yw== X1BZ QnVpbGRlckludGVyZmFjZQ== CWdiYw== IGJsYW5rcw== IGTDqW0= UmVjdXJzaXZl Lk1hbnlUb01hbnlGaWVsZA== X1BBUlNFUg== IGVuZGVhdm9ycw== IGRyaWI= X3BocA== IGF1dG9tb2JpbGVz bG9pdA== IE9ydGl6 IFVE KGRBdEE= IE1pdHN1YmlzaGk= QXR0cmlidXRlVmFsdWU= IHBvYXRl 55u45YWz IGNhdmFscnk= Lk1hdGNoZXJz IGluZ3Jlc3M= IEplaG92YWg= CXNlcQ== X3N0cmVldA== IFNvZmlh IHNjcm9sbHM= dmluY2Vz ZWxlY3Ryb25pY3M= XHBhcmFt IHplbmQ= IHNraW0= LnBpeA== ZW5r X2FyZWFz IEJvaXNl LXZhbGlkYXRvcg== IHVuZWFydGg= b2ZpbG0= IEJDRQ== b3Zza3k= IExldmVy IHBvbGljZW1hbg== IG1pZXM= IFBvcnRyYWl0 IHBvdGlvbnM= X21vdA== bWFzc2FnZQ== 0LXQvdGL IGN1ZA== IG1hbnVzY3JpcHRz Y29udGludW91cw== LnRj w7x6 IEZyZWV6ZQ== Xzoq Lmht IENTUkY= IE3DpGRjaGVu LXBlZXI= IHB1dFN0ckxu IGltc2hvdw== IEB7JA== IEJhdWVy KHRvbHVh IHdyb3VnaHQ= IEdpYW4= IMO2bg== ZnVuZw== QnV0dG9uVGl0bGVz fSkiLA== IE11cmRvY2g= S1c= IFJlcG9ydGVk c2ll IG1laWxsZXVycw== IEthZXBlcm5pY2s= IGRzcA== IEV2ZXJ5ZGF5 cmVuZHM= IENvbmNl IGluY29udHI= LnJlbW92ZUF0dHJpYnV0ZQ== 44G+44GX44Gf IHJldw== IFByZXNlbmNl L2dpbg== LkNsYWltcw== CXNs RHJhZ2dpbmc= IHNwcmVl IGFjdHVhbGl6YXI= IG5vc3M= IGxpZmVzdHlsZXM= O2M= VURHRQ== SW5NaWxsaXM= IGl0aw== YWJieQ== KHBh aXNzZW50 IFByZXNpZGVudHM= IEhleGF0cmlnZXNpbWFs ZWNpZGVk KHRleA== IGNyb3duZWQ= UGhpbGlw IFNhcms= IEFkZGl0aW9u IENvbGJlcnQ= IEdMRVM= IFFMaW5lRWRpdA== IGRyYWlucw== IHNvcnRPcmRlcg== ZXNjb3J0 VGVk IG1hbmlmZXN0ZWQ= LnZhcmlhbnQ= IFJFRkVSRU5DRVM= KGdj L3sk b2N5dGU= IG9ybmFtZW50 IGJvb2tzdG9yZQ== SG9s IFZhbGw= Lycp YWNhaw== IE5hdkJhcg== IG55ZQ== X0RlYw== b2x2aW1lbnRv TVJJ IGhvb3A= ICAgCiAgICAK IFBvc3Rpbmc= IG91dGxpbmluZw== YWdhc2Nhcg== LmJyZWFrcG9pbnRz Y2F0aWQ= X3RyaWdnZXJlZA== IHJ1bm5hYmxl L3RydW5r LWNoYWly IGJhaXNlcg== ZmFjaWxpdHk= IHBvbGxlbg== 6Z+z IFtbIg== IENHU2l6ZU1ha2U= IGFzc2FpbA== IEF0aGVuYQ== IEFkZGljdGlvbg== aWxhbmQ= O2Jy LktleWJvYXJk X2Zt QWNl IFJFUQ== IE5ld2VzdA== Oy4= IE1BREU= c2V0VGltZW91dA== U2VydmxldENvbnRleHQ= CQkJCQkgICAgICAg IEx1cA== LXJldmlld2Vk IEFuYWx5emVy Lk5hTg== dXR1cmE= R2VvbQ== eW1lcw== X3Npbg== IHRydXN0ZWVz Ly89PT0= IGFkbWl0dGVkbHk= IGFrbw== IFVFRkE= X2hlcm8= R2l0aHVi X2VzdGltYXRl IGNvcnJvYm9y ZW50aWZ1bA== IFN0ZWVyaW5n IE1pdGFy IFBpcGVz IGvDpQ== X3NlYXNvbg== IEJDSFA= L3NvZnR3YXJl bmV0dGU= KiIs dW5kcmE= IGdldFJlcXVlc3Q= LkJ1ZmZlcmVk ZmVybg== TWFyaW8= IGRpc3BlcnM= X2NhdGVnb3JpYQ== IGVuZGxlc3NseQ== Z3VhcmRz CWF0b21pYw== c2NvcGVk IHVuZG9uZQ== U0hPUA== IFRvcmNo IEhhc3Rpbmdz IEZJTEVT X1NhdmU= V2l0aE1hbnk= V2lz IGludGVuc2lmaWVk LmFyZ3VtZW50 IEFwaVNlcnZpY2U= IEpTSW1wb3J0 ZWtp SW5zdXJhbmNl c3R5 LmRzbA== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= bHRyZQ== U0VH RFJBTQ== LWJsb2NraW5n 0L3QtQ== cGlyaW5n IFBSRVM= IEZhY2g= IHNhcmM= IFNNRQ== IEVsZW0= IENhbGlmb3Ju VW5zYWZl IENvbXBvc2Vy KGRlcA== IEF0dGVuZA== ICopKCg= IHRlYXNlZA== IEFUSQ== KHBt ICIoXDw= J10r IHNlY3Rhcmlhbg== IFBoYXJtYQ== RUk= CVRva2VuTmFtZUlkZW50aWZpZXI= w6d1 IGF1Z21lbnRhdGlvbg== IHNhamE= IGNvbG9yZQ== ZGVhZGxpbmU= LklURU0= IFJpeQ== bWFhbA== CWNsaWNr UGVybWFuZW50 SG91c3Rvbg== UmVzcG9uc2l2ZQ== IEVyZ2Vibg== ICIlIg== LnRvT2JqZWN0 CXBpZA== LlN1Ykl0ZW1z IFsr IGZ1bmd1cw== IGJyb2NodXJl IEFwcHJveGltYXRlbHk= IG1paw== dmVsb3Blcg== IHBhZ2FtZW50bw== 5Yqo55Sf5oiQ IGN5dA== IFRlbXBs ZW5pYWJsZQ== IENvbmFu IHNldGJhY2s= b2JsaW5z IE5UTg== b3NzYWw= VkVSQk9TRQ== LmJpbw== IMWe 4buf IEdyaXA= PCo= VFJJRVM= LmNob29zZQ== UGhvZW5peA== IHByb3ZpbmNpYQ== TUZMT0FU Q2Fycw== IHJldHJvc3BlY3RpdmU= IGFnb255 IGxsZW4= IGJ1bXBlZA== eWxhdGlvbg== IHdhcnRv IHRvZGRsZXJz bGF2 KHBhdGllbnQ= ICgpLT4= Y2xj IG9uQWN0aXZpdHlSZXN1bHQ= IGVtdWxhdGlvbg== IGJ1bGxk X0FVVEhPUg== Pk8= L3F1 IMK2 CWhy c3RkQ2xhc3M= IHNwYWNlcg== VHJhbnNsYXRlZg== LmFkag== Oml0ZW0= IGV4aGF1c3Rpbmc= cGx4 IHJldml0YWw= xZtuaWU= IGNhbGlmb3JuaWE= c2V0U3RhdGU= L3RhYg== aW5kc2lnaHQ= X0xldmVs aW1pbGFy Lm5hdmlnYXRvcg== IHRlbXBlcmFtZW50 IGRpZsOtYw== IGluZXhwZXJpZW5jZWQ= IGltcHJpbnQ= IFJlc2lzdA== X0ZPTExPVw== IFJldHJ5 IGVuZ2FnZW1lbnRz Q2FuQmVDb252ZXJ0ZWQ= IHNpbmdsZWQ= Lmljb25z IGNvbmRvbXM= IEZlYXRoZXI= bGVybmVu KWI= IE5wZ3NxbA== IENvbnNvbGlk cGVrdA== 56uv c3RyaW5nVmFsdWU= R2Ft IFNpbmFp IE9iamVjdFR5cGU= X2lucA== IHBhcnRp IFdhdGVycHJvb2Y= IGNvbGxpZGVk IGFpcnM= L3dvcmxk L1NlYXJjaA== X3N5bnRheA== xZ9p X2Fubm90YXRpb25z IFRhY28= TEFU IE9wY29kZQ== 44CC4oCdCgo= IGxlYXNo IEFsaWNpYQ== 77yM6buY6K6k IFRTQQ== IGhvdHRlcg== X0hhbmRsZVR5cGVEZWY= Z2luYXM= IGluZGlmZmVyZW50 Q3VzdG9tTGFiZWw= kZA= b2R5bmFtaWNz T25VaVRocmVhZA== IENhcmE= LmRldmljZXM= IEZvcmVpZ25LZXk= PicpOw0K LmJ1dA== LnRpZg== IOaWsA== IE9rSHR0cENsaWVudA== KFRleHR1cmU= LlNPQ0s= KGluc3Ry bWlzdA== VW5uYW1lZA== U3I= Km51bQ== KE5VTQ== KioqKioKCg== L2hlbHA= YmVlbGQ= LmFkanVzdA== X1Bhcm1z X0FOR0xF VFJFRQ== IGVzdHVkaW8= d29ya3NoZWV0 Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== QWR2aWNl w7bDn2U= bkVudGVy YcSH IGFnZWluZw== IEt1cmRpc3Rhbg== X1JUQw== YmFua3M= LlVS IGluY2FybmF0aW9u IGdsYW1vdXI= IOOCuQ== IGltcGVyaWFsaXNt 7J6F64uI64uk IHNpZGVsaW5l LkFycmF5QWRhcHRlcg== IyMjIyMjCg== IFN5cmlhbnM= IEF0dGVuZGFuY2U= LWVzcXVl IGdyZW5hZGVz X3Fvcw== T1ND X2Rvb3I= LkNhcA== REFM IGFtYnVzaA== CWVz VG9Kc29u TWFudWZhY3Q= RW1lcmdlbmN5 IFFGaWxl IOWV CUxQ 5pCc57Si IEdhcmxhbmQ= LmNvbm5lY3Rpb25z LlJlYWRGaWxl IEh3eQ== 4oCUZXZlbg== eERF IG5vdXZlbGxlcw== IEh1c3M= RGVwb3NpdA== X2ZvcmVpZ24= YWJhag== IFBveg== ZGJ1cw== IGlvZA== w5cKCg== IENoZWVycw== SmVzc2ljYQ== IHNhaXNvbg== IFB0eQ== Ij48IS0t aW5vYQ== ZXhjbHVkaW5n IGJpdHRlcm5lc3M= dWVsaW5n UHJvdGVjdGlvbg== IEJlcmdlbg== CQkJIAo= QkVM IFRvYmlhcw== IHVwZA== 67KE IGZvbGlhZ2U= X1BVUg== IEFkdm9jYXRl IG9uUmVxdWVzdA== LnBhcnRpdGlvbg== IERldmVsb3BlZA== IGNyaWI= 0YHQutC4 dm91Y2hlcg== IEludGVyc2VjdGlvbg== IG5pZWNl IGxr IENhdWN1cw== KFsNCg== IERldGVjdG9y L2xn IEhlZGdl IHNsdWdn YW5nc3Ryb20= IENvbnRyb2xsZXJCYXNl CXl5 LnBw IEtsaW5n IExUUw== 4oaT YXJyYQ== Z2V0SlNPTg== X3dlYnNpdGU= IGlkaW90cw== IE1lZ2hhbg== QnV0dG9uTW9kdWxl ICU+ IHByb2plY3RpbGVz c3dvcmQ= ICAgIAkJCQkJ IGFzc2Vz IFN1Y2hl IGtlZA== csOhZg== IHNhcsOg TEVuY29kZXI= UkFORA== IFNvbWVob3c= IFNhbGE= IG11bHRpbQ== IG51bVJvd3M= IFJvY2tpZXM= IHhk IGRpc3Byb3BvcnRpb25hdGU= CVJUTEk= CVVSTA== YWdsaQ== IFN1YkxPYmplY3Q= IEdyYXZlcw== X3JlZ3VsYXJpemVy X2NoYXJhY3RlcnM= LmFuYWx5dGljcw== Lm1vZHM= IGltcHJvdmlz IEJsb2NrUG9z X2luc3RhbGxlZA== X0NPTlRJTlVF L2Rvd24= U09D LmFwaVVybA== LlVzZXJTZXJ2aWNl VHJlZXM= 5oqV X292ZXJmbG93 YXVzYWw= Ym94ZWQ= Jgo= IEphY3F1 X3Vzcg== SU5UUg== IHNpZ25hZ2U= IGNvY2g= Tm9ybWFsaXplZA== CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo= IHN1c3RhaW5pbmc= IFNjcmFw cHJhYWs= LWF2YXRhcg== LndlYnNpdGU= KGd1aQ== PXJlc3BvbnNl KG9wZXJhdG9y IGVmZm9ydGxlc3M= IEFjdGlvbkJhcg== RkZF 56uL CVJlZ2lzdGVy QVJTRQ== KW4= IE1PU1Q= X1NQUg== X0NISVA= YXNk IHRvcExlZnQ= IFR4dA== 0LDQttC0 LlZvbHVtZQ== IGlubGV0 IGZyYWN0dXJlZA== IExvbmdpdHVkZQ== IERyYW0= LkNvbm5lY3Rpb25TdHJpbmdz YWJlZQ== cGVyYXRl am5p YHQ= ZmluZ2Vy IEplc3NpZQ== LGxs IFJ1ZHk= IGdlbmVyb3VzbHk= X0NPTlZFUlQ= IGVpdXNtb2Q= IERhaQ== aW1hZ2lu IEdPYmplY3Q= IMSRw6M= aWRpb3Vz cmlkZ2Vk IHNvcHI= 0LvQsNC0 IHN0aXRjaGluZw== IGtyYg== CiAgICAgICAgCiAgICAgICAgCg== IGxhdmlzaA== IENpdg== U3RhcnRFbGVtZW50 IExvbA== CXV0aWw= J11dLg== IE1hbGF5 IC4NCg== 548= X0ludm9rZQ== aXZpc3Q= RGVwZW5kaW5n KSI7DQo= IHRvZnU= IE1DUA== IHN0b2NraW5n IGNhdGhlZHJhbA== IHF1YWRyYXRpYw== YWxlemE= Lm1vdmVUb0ZpcnN0 Q29sb3JCcnVzaA== IEVyZWN0 IFJDUw== OmJlZm9yZQ== PW5vZGU= IHByb2Jsw6htZQ== X3Jobw== IHN2ZW5zaw== Um95 YmFzZVBhdGg= IGtvbmQ= INC10YHRgtGM Z2V0U2luZ2xldG9u IERTTQ== SWFu IGh1bnRlZA== IFRlcnJhY2U= IGNoaWxkY2FyZQ== IGNvZWZmcw== IGdyYWRlZA== IEx1Y2lh IGpzb25PYmo= YWJsZU9iamVjdA== VmF1bHQ= w61zdGljYQ== X3BhZ28= X1BG YW5kcmU= IEFuYXRvbXk= LkpDb21ib0JveA== b3VyZQ== IGdlbm90eXBl YmVuY2htYXJr IGJhaWs= IFF1w6liZWM= KCkpDQoNCg== IGt1bm5l IFBvc3NpYmx5 IEJlaXNwaWVs IGNvbmRvbGVuY2Vz PXF1ZXJ5 IHbDtQ== IG51ZXZhcw== IEFwb2NhbHlwc2U= dmVjdGlvbg== CXNwcml0ZQ== bGV2YXRvcg== LiJdCg== Z2V0TmV4dA== KFJlZ2lzdGVy IHVuc3Vi dHJlZXZpZXc= Tm9kZUlk IOyK JikK Zmx0 IGhvdHNwb3Q= IGdhc3Ryb2ludGVzdGluYWw= ZmlnY2FwdGlvbg== b3dlcmVk IENzcw== X3Jvcw== X3NjYWxpbmc= IGVkaXRhcg== J11dKTsK Lm5lZw== IGZ1dHVyaXN0aWM= IHN0YXRh dWN0b3I= VUxBVEU= IHfFgg== LWNoYXJhY3Rlcg== ICAKCgo= IEJlYXU= IHBlcm1hbGluaw== Qnl0ZUJ1ZmZlcg== IGRpY3RhdGVz IE1MQQ== X0xvZ2lu Q29uZGl0aW9uYWw= U1lN QXJyYW5nZQ== IFN0b2Nrcw== IG1lYXNsZXM= 4KSk RW5jcnlwdGlvbg== IEVudGlyZQ== IG1pbk9jY3Vycw== IGh1Z3M= L3dpbmRvdw== CXByb3A= PSQoKA== IFVDUw== IEZpcg== LkNsb2Nr LWRlc2t0b3A= IG1hbGZvcm1lZA== IEFiZXJkZWVu IMOF IFJvYWRz IEJlaGF2aW91cg== KCkn 5bGe5oCn LkNvbXBhcmF0b3I= X21v X0lPUw== IE9yaW9sZXM= Lkxvb2t1cA== IGZzZWVr X0lC L3N0YXI= Kzwv X0Rlc3Ryb3k= LXRyYQ== KCcuJyk= IEZvckNhbkJlQ29udmVydGVk IEZvckNhbkJlQ29udmVydGVkVG9G IEZvckNhbkJlQ29udmVydGVkVG9Gb3JlYWNo IEFhZA== IGFpcnN0cmlrZXM= aXNPaw== IGZlZGVyYXRpb24= IExhYnJhZG9y X2xhdW5jaGVy YWxvZ3k= Pj4oKTsKCg== IEp1Yg== dXRy aXN0aW5ndWlzaGVk YWJhbnQ= UmVnaW9ucw== L2hlbHBlcg== X2xpc3Rlbg== CVRvYXN0 IEZpbGVNYW5hZ2Vy aXRvcmlz IGVsZWN0cm9kZXM= R1JBREU= IGJlZ2dlZA== IFBsYXRlcw== YWZvbmU= ISEhCg== IGVieA== IGRlZmF1bHRQcm9wcw== IGNvbXBhcmVUbw== IFNDQw== LmV4dGVudA== YXV0b3M= IOyW IFRvbGtpZW4= OjoqOwoK Kics LmRvY3VtZW50cw== c2luZw== PUJpdENvbnZlcnRlcg== IEtyaXNobmE= IHBsYWlzaXI= IGJ1Z2d5 IHJlZ3VsYXRlcw== IGZyaWRheQ== IGNvbXBsZXRlbmVzcw== IGF1ZGlibGU= IFJlY29nbml0aW9uRXhjZXB0aW9u IHNoZWRkaW5n W10pewo= KGJhbGw= IENoYXRDb2xvcg== KENvZGU= KCksCgo= IHRlcnRpYXJ5 IFNJREU= KEpTT05PYmplY3Q= pOaWrQ== UmVtYXJrcw== IGxpc3RCb3g= LmltYWdlVXJs IGRlbGF5aW5n IHNvY2lvZWNvbm9taWM= Lmxw PE15 Lm9uU3RhcnQ= IFNjb3I= Ynl0ZXJpYW4= LXJvY2s= X21ldGVy IHJlcG1hdA== IHByZWd1bnRh IE1FVEE= KGd0 IEZSSUVORA== IHNvcnRl IGhlcA== b25vbWllcw== IGF1dG9tw6F0 IEZvcm1hdHM= c3RhdGVQcm92aWRlcg== LWZsb29y X01VWA== KENvbnRlbnQ= IElOU1RBTEw= IFRpdGFuaXVt cnVj LkRhdGFzZXQ= YXNjbw== Lk1BVENI IGZlc3Rpdml0aWVz TVNO Lm90 IEdldExhc3RFcnJvcg== aWVucw== IF9fX19fX19fX19fX19fX19fXwoK X0dG X3BsYXRl IEZvcm1hbA== LWxldHRlcg== S2F0ZQ== YXBpYQ== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K L2dlbmVyYXRlZA== IERpbmc= IEZyaWVkcmljaA== ICcpJw== VUJMSVNI IEFiaWxpdGllcw== IHVubG9ja2luZw== Lnl5 IEludGVycg== bm90aHJvdw== aXBvcA== IENPUlBPUg== W2FycmF5 PFdlYkVsZW1lbnQ= X1NJRA== LnF1YWw= RGlhZ25vc3RpYw== OiIiLAo= KG1vbWVudA== anVyZWQ= IHRlcnJlc3RyaWFs ZXJ1bGU= ICYpOwo= IGJ1cmVhdWNyYXRpYw== b3BwaW5z IGphcG9u bGVvbg== X3JlbmFtZQ== X0RFU1RST1k= LkVuZHNXaXRo IGVydXB0aW9u KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K UEVU X3JlbG9hZA== IHN1cHBsZW1lbnRhcnk= IHppZW4= Q0xMb2NhdGlvbg== IGtsZWlu X2Vm Ont9 IGNvbWVudGFyaW9z KHZhbGlkYXRpb24= Lnh0ZXh0 X0lNQUdFUw== LnNldElucHV0 IERlY29tcGlsZWQ= X1RCTA== Y29tcGxleFR5cGU= X2ZlYXR1cmVk ID8+PD8= LnZvdGU= IEZyaWRheXM= LmNvbnN1bWU= Lk1FRElB IHN5bmVyZw== jpjsnbTsp4A= X0hFQURFUlM= eEFD X252 zq0= IFNpbW9uZQ== Q2VycmFy YWRkb2Nr LnNlcmlhbGl6ZXI= IENsYXNzaWZpZWQ= Lkl0ZW1zU291cmNl IHByZWNvbmRpdGlvbg== 44Gd44GX44Gm RElTVA== SW1hZ2VVcmw= L3JhbmRvbQ== IGVyw7N0 W3Jvb3Q= QUxMRVJZ Y2o= eEFE IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo= IGl0YWxpYW5p fCM= IHJlZ2VuZXJhdGU= IHN0cnI= KHx8 IEVtZXJzb24= IFBJRQ== Y2xpZmZl CWFu PlBhc3N3b3Jk dG9EYXRl Q2lwaGVy IGNvbnZveQ== IFhDVEFzc2VydFRydWU= L19f LWZvY3Vz IFJoaW5v IGdvbw== IGJvdG9u Lk5vU3VjaA== IFJlZHVjZWQ= TUlTUw== IFdpbmNoZXN0ZXI= dXJsZW5jb2Rl IG11ZGR5 aXlh IE1icHM= IHN0YWw= b2RhZm9uZQ== 5Lus IHBo4bqpbQ== ICIvIjsK IEFtbW8= TmV3UHJvcA== ID0KCg== INCf0YA= IHBheg== IGxpYmVybw== CVJlc291cmNl bmVpZ2hib3Jz LHJlc3BvbnNl X2F0dGVtcHRz IG5r IG1pbGl0aWFz X1BBWUxPQUQ= LkJ5dGVTdHJpbmc= INGB0L7QtNC10YDQtg== YXJ0b24= PkhlbGxv bGlnaHRseQ== b3dlbGw= IGd1YXJkaW5n IFRPSw== IHdoZXJlYWJvdXRz X2R3 IFJvdWxldHRl IGd5cg== IEZlZG9yYQ== LkJ1dHRvbnM= IGV4Y2xhaW1lZA== IFNvbW1lcg== QXV0aEd1YXJk LXJhdGluZw== TWV0aG9kQmVhdA== LnBvc2l0aW9ucw== TWVkaWFu LuKApgoK IGdsYWM= IHVuZGVybWluZWQ= JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQ== X3RoaXJk LmtlZXA= IGhheWE= IHRvSlNPTg== IExhdXJpZQ== IAkgICA= IEFjY3Vt IHBydW5l dXJ2ZWQ= IE5TRg== IEdyYXBl RkxJQ1Q= 6LI= IHByZWRpcw== X3B0cnM= IG11bHRpY2FzdA== KEdyb3Vw IGhlacOf IGZlZGVyYWxseQ== X1BBVVNF IG1hbGF5c2lh IFJlY2FsbA== IHJvZHo= IFNlbnRlbmNl aW50ZWw= X2RydmRhdGE= LXNjZW5lcw== PHk= IGZvb2xlZA== IExvdWQ= IGFudGl2aXJ1cw== LnBsaXN0 IHZlcndlbmRlbg== IFdvbGZl KWl0ZW0= IHR3aXN0aW5n IGVzcGFu YXRlcm5v IEFjY29yZA== KCldLA== UkVNT1ZF ZGVoeQ== X1ByZQ== IG1pc2Nhcg== dmxh IHNlbWJs IHRldGhlcg== IEJpag== LycKCg== IENvcGllcw== LXBhdHRlcm4= Lm9uVmlldw== LXRha2luZw== X3NpbXBz 44GX44GL44GX IERBQ0E= b3JuaW5n IFBlc3NvYQ== b3JueQ== X3Bhcw== IGVpZ2h0eQ== VGFj X1NUT0NL LmxvY2F0aW9ucw== Iil9LAo= IHTDoQ== LWZpZWxkcw== b2thbmU= L2t1YmVybmV0ZXM= IGNoaWNh IGFydMOtY3Vsbw== 7II= Q1JFQVNF QVNB IExvbmQ= IGV4ZW1wbG8= QWxsb3dz aHRtbHNwZWNpYWxjaGFycw== KHZpcw== IGpy 54Gr IEVDTQ== IGVtYmFy X0FEQVBURVI= IGRpbHV0ZWQ= X29mZmljZQ== IHNraW5jYXJl QUdJTkc= IMO+ IFNNQVJU L1RhYmxl IGJhc2Fs Q29uY3VycmVuY3k= IFZveA== IFVJQ29sbGVjdGlvblZpZXdDZWxs IHdvbA== IFNPVVRI IGZyb21EYXRl IGNvcmRz RU1T LndlaXhpbg== J2VsbGU= IOWx IGdvYWx0 dWli IE5lcHR1bmU= KG9yZA== xLFuxLFu IG1pY3JvYmVz V2VhcG9ucw== LURlYw== IFJvb25leQ== IFN3YWdnZXI= 66qF X2xh IGdlbmVyYWRv IEhpcg== Q29taWM= IGNhcnZl X3Jx aWN0ZXI= IGNhcnRlbA== YW5jaWFz IFBhbmFzb25pYw== IHJvYWRzaWRl IGZyZXNod2F0ZXI= IGRiYw== X3RleHRz X3NrdQ== IFN1bW1lcnM= IFBpY3R1cmVCb3g= Lmdyb3VwQ29udHJvbA== VkFSQ0hBUg== UmVMVQ== IHNhYm90YWdl DQogICAgICAgICAgICANCg== IHNjcm9sbGJhcg== IGJhdHRlcmVk Y2lw LXBpY3R1cmU= CXN0YXRz LmNyZWF0b3I= X0NMRUFO Lk1PRA== IGJpZ2ludA== IFRlcnJvcmlzbQ== X1Nob3c= IFNwaWNlcg== X0VUSA== IMSR4buD IHN1bW1lcnM= IFVyYW4= L21lbW9yeQ== UmV2aWV3ZWQ= IGR1ZXM= c2V0U2NhbGU= IFJheXM= IENTQw== aW5jb21pbmc= LWJ1eQ== IHByb2N1cmU= ZW50YXI= IGJ1bGxz IAkJCQkJCQ== IEZpYm9uYWNjaQ== LXNjaGVtYQ== bWFrZXM= RWY= X0Rlc2NyaXB0aW9u L2FsZXJ0 IGpzb25TdHJpbmc= dWZmbGluZw== IEtFUk5FTA== IEhveQ== IGdyYW50UmVzdWx0cw== b25hbGQ= IFByb3ZpbmNpYWw= c2VuZGluZw== cHRvbQ== INCe0LE= IGNvbnN0cmFpbg== IMWhdG8= IFJhaXNlZEJ1dHRvbg== VVRET1dO IEdMc2l6ZWk= IOekug== 44OR IEdvbg== UExJRVI= J119PC8= Y2xhc3NpYw== IGVuZ3JhdmVk IG1hc2N1bGluaXR5 TWFyc2g= c3NxbA== KEdyYXZpdHk= IGxvYnN0ZXI= 67aE X0ludGVy XGJhc2U= JzpbJw== IGRldGFsbGU= dHdlZXRz IGplYWxvdXN5 YWdlbmRh LGl0 c3dpcmU= K0I= IHRyb3V0 X2FsdGVybg== OiIj IER3YXJm IFNoYXBpcm8= ZXJvb24= IG5vaw== X2xvbmdpdHVkZQ== IFdlcm5lcg== IHZpb2xldA== dXJzaXZlbHk= LWF3YWl0 IH0KCgoKCgo= IExlbm5vbg== IEFudGFyY3RpYw== IGLDpWRl X3Nsb3Bl bWFuZG8= b3VuY2Vy LWlvbg== IERlc3RydWN0aW9u aXNzZW5zY2hhZnQ= UGl6emE= IEdlb2xvZ2ljYWw= Qk9VTkQ= IGNpbmU= RGVtb24= LnBlb3BsZQ== X1RPR0dMRQ== CW5vZGVz YnVzY2Fy LnByb2Nlc3Nvcg== Tmg= L3Nkaw== IG15Y2tldA== YXVjdGlvbg== TWVn R01FTQ== IGlyb25pY2FsbHk= 5riF IGNvbnZlcmdl IFVJVGFibGVWaWV3RGF0YVNvdXJjZQ== QXJkdWlubw== PmU= Sm95 IFNob3VsZGVy IER1Yw== UFJJTUFSWQ== Lioo LXByZXM= IGRpYWxvZ1JlZg== aW1hZ2VOYW1l X2ludm9rZQ== XFRlbXBsYXRl T0k= IHZyaWVuZA== IEd1ZXJy IHByZXJlcXVpc2l0ZQ== IFBHQQ== IFJlc3A= KSIsIg== bGxlbg== IHNuYXBwaW5n X0ZpcnN0 S0lU LnNldEZvY3Vz IEN5cHJlc3M= Y3JhZnRlZA== LzsK d2VpZ2h0ZWQ= dm95 X3RG X2luc24= IEluc3RhbGxpbmc= IEdhbGx1cA== QURPUg== IEFMT0c= Q29udGV4dEhvbGRlcg== IFRvdXQ= IEZvbGV5 IGNvbnRlbXBsYXRl IENvaW5iYXNl WMOj d2FuZA== LkNyZWF0ZUNvbW1hbmQ= U29jaw== IHVud3JhcA== Y2xhc3NwYXRo PFJlc291cmNl X0VTVA== PXJhbmRvbQ== IFNoYWRl IGRpY2k= 2K/Zig== IGtpdHR5 0LDRgtC10LM= 4buNbg== LkNvbXBsZXRlZA== cGxvcmVy IGJhYmVs Lk9uSXRlbUNsaWNrTGlzdGVuZXI= IE1jTWFob24= IHJlc3RUZW1wbGF0ZQ== IHRlc3M= U2V0VXA= L29jdGV0 IGNhbGFt IGhpbmdlcw== IGFydGVyaWFs IFRydW1hbg== IENoZXJ5bA== X0REUg== IHRtcGw= IExlcg== W2hhc2g= S0VS IHByb3BvcmNpb24= IGNvYXN0bGluZQ== YWNpb3M= Ij4tLX19Cg== IGRpc2FkdmFudGFnZWQ= VG91Y2hMaXN0ZW5lcg== IFNlZ2E= Y29lcw== SWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbg== PEJveA== IEluY3JlZGlibGU= VXBkYXRlcg== RkxU aW5hbWU= IEludGVyZmFjZXM= Kylc ZW5kaW1lbnRv IHBhbmNha2Vz IGluY29uc2lzdA== LnBldA== IGtleW9m SW5uZXJUZXh0 Picp RGVhbg== IFDDqQ== KENvbnRyb2w= IHNwYXI= bGluaWs= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IERhbmU= X1BBR0VT IHNldEJhY2tncm91bmRDb2xvcg== c3ViY2F0ZWdvcnk= IFN0cmluZ1NwbGl0T3B0aW9ucw== QWxsZW4= ISgie30iLA== hOyerA== IGJhYw== X1BST0RVQ1RT dXBwZXJjYXNl PSQoIiM= xJlr IFVJVGFwR2VzdHVyZVJlY29nbml6ZXI= TUVUQQ== IHNjYXJjZWx5 6aA= X21hbmFnZWQ= IGNvbnN1bW8= TW91c2VNb3Zl IFNwZWNz IFNlYXJjaGluZw== SGVhZGVyVmlldw== Oicp IG1pY3Jvc29mdA== IEtvc292bw== ZW1hbm4= LmZmdA== IEh1YmJhcmQ= IGRleA== X1RFUk1JTg== X0ZD IHBoaWxpcHBpbmVz XENvbGxlY3Rpb25z IHRlaA== IHF1YWxpZmllcw== IGlucHV0VmFsdWU= IEdPVA== KHNh SUxMRUQ= IHNsYW5n IGtlaW5lbg== IGZlbG9u IEVyaWNr YWJpbGlkYWRl LnNlcg== IHJ1bmVz IFVucmVhbA== KG9y IOusuOyekA== IGJpZGk= IGlyYw== CWl0ZXI= Im5pbA== L3VidW50dQ== IG11cmRlcmluZw== ID8u dW5rZXI= UmVjdFRyYW5zZm9ybQ== JykpCgoK IGFyaXR5 IEZyZWVs Lm1vdW50 Q09NTUVOVA== ICIqIiw= ZW5jcnlwdGlvbg== W21vZGVs In19Pgo= LlRvdWNo L3RodW1i IHByZXo= L2NvbXBhbnk= IHLDs8W8 IHNvZnRlbg== IHBvc3NpYmlsZQ== IEVDQg== X0Jvb2w= IC0tLS0tCg== IGludGVydHc= X3N0YQ== X0JBTA== Lm5hdmlnYXRpb25CYXI= IFJHQkE= Z3JpbHk= c3RvZmY= YWNreQ== UUI= QEFwaQ== cGVjaWE= IFJwYw== IGFtcHM= IEZlbmNl IGdlbm9taWM= KGFsaWFz Vmllbg== U3BpbkJveA== LmdldFNlY29uZHM= IGdsb2JhbGl6YXRpb24= IGN1cw== a3ViZWN0bA== IHRocm90dA== IGluZXJ0 IFNjcmF0Y2g= w5c8Lw== Lmlzc3Vl ZXNzYXk= LUlzbA== IG3DoXI= CWJpdA== IGFib2xpc2hlZA== LmluZmluaXR5 bGluZW5v LmFsZ29yaXRobQ== b3JzY2g= RW1haWxBZGRyZXNz IERBRw== YnJpbmdpbmc= Lm15YXBwbGljYXRpb24= LlN1cHBvcnQ= X2xlYWRlcg== IERldmlu IFtdDQoNCg== IHJtcw== IGJ1Y2tsZQ== aWdsaWE= L3Byb2JsZW0= IGhhdXRl IGluc3RpdHV0ZWQ= SVU= bGFtYQ== RVhQRUNURUQ= IEJlY2toYW0= IEh5ZHJhdWxpYw== U3RhdGljcw== X25vcm1hbGl6ZWQ= LmAsCg== IG1pbWV0eXBl IHNoYXZpbmc= T3ZlcnJpZGVz IE1lcmNlcg== dHJmcw== LXN0YXRz b3NwYWNl IGFudGlveGlkYW50cw== aW5maW5pdHk= Um9ja2V0 IEV1bGVy LXZhbHU= IGzDuA== LUlO SG1t LXJldHVybg== IFBBTkVM IHRlcm1pbmF0b3I= IHRla24= IHByZWRpY2F0ZXM= U3RhbXBlZA== IHN2ZQ== YW50ZXI= IGN5Y2xpc3Q= IEVwc3RlaW4= IGhpdHRlcnM= ZG9ncw== LkFkZExpc3RlbmVy X2V4Y2VwdGlvbnM= IEZPT1Q= aWNhcmU= W3RhZw== LWZldGNo VVBMT0FE LmRyb3Bkb3du IGNlbnRyb2lkcw== IGFyYmU= IGhpam8= IERhdGFiYXNlUmVmZXJlbmNl UG9saXRpY2Fs IEJBU0lD LWZvcmNl fCQ= IFJFVklFVw== LmRlY29yYXRl IEFzcGVjdA== IGNvbW1lbW9y IGNsZWFuc2U= IENsYXVkaWE= Z2VuZXJhdGlvbg== SExU dHlwZW9ybQ== cHJlZmVy b3ZlcmxhcA== YmlvbG9neQ== U3RyZWFtZXI= Y29tbWlzc2lvbg== IHRodW1ibmFpbHM= LkN1cnJlbnRDdWx0dXJl IHVybHBhcnNl IGdpb3Jubw== IGRldnM= X2FzcGVjdA== IGNoZXJpc2hlZA== IE5hY2hyaWNodA== IHJpZ2dlZA== L2xvZ2dpbmc= aHVudA== VHlwZUVycm9y PFNlbGVjdA== KHByb2c= IEdyaWRMYXlvdXQ= 6JA= IEVYUEVS CUtFWQ== LmRt CWNhcmQ= IFRhdQ== IG5vdGFtbWVudA== IGhlcm9pbmU= IGJhdGh0dWI= YXRyb24= IOaU 77yS77yQ Y29ub21pY3M= IHJldmVyc2libGU= 6YeR6aKd IGpzeA== IFNwZWFrZXJz RGVzZXJpYWxpemVy LnRvRmxvYXQ= INC/0LXRgNC10LzQtdC9 IFByb3ZpZGluZw== 6LSm W2VsZW1lbnQ= Kjo= PlJldHVybnM= IHRpdHVsYXI= IGhlYXJ0YnJlYWtpbmc= X05C LkFyZ3VtZW50cw== IG9wdGlj YXR0YWNrcw== IFZ1bG5lcg== CWtleXM= IGNvbnRyb2xl LlJHQg== IHN1Ymdyb3Vw bWFuZGF0b3J5 IENBQg== CWVuZ2luZQ== 44Gw TUVESUE= L3RyYW5z IGRhbms= IHNlcnZpY2Vk IGluY2FyY2VyYXRlZA== IEZyZWFr IHVwdG8= ZHJhd2Vy WyIr IGVudHdpY2s= Z0w= TW9kZWxFcnJvcg== IHJlYWRkaXI= aXN0cmlidXRl IGdsYXJl aXF1ZW1lbnQ= Y2hpbmE= IEthcGxhbg== IFN0YWJpbGl0eQ== cG9zaXRlcw== IEpBWEJFbGVtZW50 IHRvdGFsbWVudGU= KGNvbW0= X3Byb2Nlc3Nlcw== VGhvdXNhbmRz IElscw== ZXJ0YWludHk= IFNoYWRlcw== YWN0YWw= bG9nZ2VkSW4= IE5pY2hvbHM= IE1pZGxhbmRz ZGV2aWw= IHN0clNRTA== In0p IEpvcmQ= KGZm IEp1bmk= 5bCx YXJ0aXNhbmxpYg== IG1vb25z IHVucmVzb2x2ZWQ= IHdpdGNoZXM= IEfDvA== IEdvYmxpbg== YW5zc29u fCU= IGJ6 IGR1cGxleA== ICIpKQ== Lmxpa2Vz KHZlcnRpY2Fs IGNvd2JveQ== U2VsZWNjaW9uZQ== ICcqJyw= IFNhcA== IFNhYmJhdGg= U09SVA== 4Ka/4KY= X2NlbnRlcnM= XFBvc3Q= KFRyZWU= IHBhcnRlcw== X3lhdw== YXJlbW9z c2V2ZW4= IGhpYXR1cw== X2ludGVuc2l0eQ== LW1hbnk= IERvbGxhcnM= LXVuc3R5bGVk IGdyaXBwaW5n IG1hcnZlbG91cw== IHJlY2VwdGlvbnM= IG92ZXJjbG9jaw== YmVybWFu IGhlYWRxdWFydGVyZWQ= eEJC Y2xhc3NDYWxsQ2hlY2s= IG9ic2VydmVz U3VibWl0dGluZw== 0LjRh9C10YE= IEh0dHBTdGF0dXNDb2RlUmVzdWx0 IGhpZXJvbnRh cm9wcGluZw== Rk9SQ0U= CXV0aWxz IHZlbnRz YWRkZXJz IE1JWA== IEVsZWdhbnQ= IGFjb3M= KG1hY2hpbmU= IG1lZGRsaW5n IHZpbGU= LWNvbXBhdGlibGU= IGNyZWFtcw== IFRhYmxlUm93 IFJlaGFiaWxpdGF0aW9u QWJi KHVzZXJJbmZv X2V4cGlyZWQ= Lk9iamVjdE1ldGE= IGdvZHQ= dXN1YWw= LmJpbmRpbmdOYXZpZ2F0b3JNb3Zl IFJlZ2lzdHJhcg== bWlncmF0aW9u YXB0dXJlZA== LHBhcmFtcw== IGNlbnRlclk= b3dhbg== bG9jYWxlcw== SW5wdXRNb2R1bGU= IHZpZ2lsYW50 IG5jb2xz IGluZ3I= IGPDtHTDqQ== dmVydGltZQ== IHdpZGVzdA== IEhERg== IEFsZ2VyaWE= IGNoYXR0 JHNlbGVjdA== Il0pDQo= IG11bHRlcg== IENoZW5leQ== ZnVzY2F0ZWQ= PSciLiRf IERlbmlzZQ== IHJpZmY= QWJzZW50 IHRhbWHDsW8= IGplc3pjemU= LlByb2dyYW0= CWJy ZXJhaXM= IHNhbmRhbHM= ICws IGRpc3NvbHV0aW9u IHVudGVyc2NoaWVk UHJvdg== LnRyYW5zYWN0aW9ucw== IFRyb3VibGU= Lm1pZGRsZQ== LmdldERlY2xhcmVk IHN3ZWF0aW5n IEhhbmNvY2s= 6LS5 IHBvZw== IEtpYQ== IG1vZG5l IEFjY2Vzc2liaWxpdHk= IGxlYWthZ2U= IGRlY2VwdGl2ZQ== IFdPTQ== INC+0YE= IGNzYWs= YWNvY2s= LlN5bnRheA== ICxb LicpLAo= IGZvcmVjbG9zdXJl IHVuZmF2b3I= IGV4Y2w= Q1VEQQ== ZGVuc2U= PFVuaXQ= IHZhcGluZw== IG1hamVzdGlj aWF0b3Jz IGF1dGlzdGlj LmdhdGV3YXk= VXJsUGFyc2Vy SGVsbA== IENvc3Rjbw== IEhJUA== T2JzZXJ2ZXJz IFBlb3BsZXM= IFNwb3RsaWdodA== IFRhdmVybg== IFRPVVI= cGxpbmdz LldSQVA= IGFsZA== TkFM KCIqKio= c2V0UHJvcGVydHk= X1N0b3A= YW5ub3VuY2VtZW50 IEltbWVkaWF0ZQ== IEhTVg== X1RFU1RT IGNyYXZl X1VD LmRlY3J5cHQ= KFJvbGVz IHN1Ymo= X0ludGVnZXI= Lm5vdE51bGw= IEdzdA== IEJ5cm5l IEFxdWFyaXVt IENhbmM= X0NIQU4= IERUTw== Lmhs IG1lbmdndW5ha2Fu RnJhbmM= RGlhbG9nQ29udGVudA== Li4uJwo= IEt1bnN0 IEFsbG9jYXRvcg== VVNBR0U= S25vd2xlZGdl CWNwdQ== IG1vcmFscw== cGF0aWVudHM= IGlsaw== IGNyaXRlcg== IFZldA== IE1lc3NpYWg= X186 YXZlbm91cw== X3ZpZXdlcg== KERpY3Rpb25hcnk= IEJvZGllcw== aGFzT25l 0LjQvNC10YA= IHppcGNvZGU= U3Rlcg== IGLDoXM= X0Rpc3BsYXk= IGZpcm1h IFJhaWRlcg== IEtI V2l0aERhdGE= KEFSRw== IHByb3Ry IG1zZWM= IGxhdmVuZGVy KFV0aWw= INC/0YDQvtCz0YDQsNC8 X211eA== X2xhdGl0dWRl UG9ydHJhaXQ= IHNpdGNvbQ== IGFkaWNpb24= KGNvbnN0YW50cw== IEFueGlldHk= IFJvc2Vz IHN0aW11bGF0ZWQ= IGNocm9ubw== IGZvc3NpbHM= IEFpcmJ1cw== bGVmdHJpZ2h0 IE3DqXRvZG8= Inc= IGtsZWluZW4= IGNsaXF1ZQ== b21pbmF0aW9u IG1vdGVs L3ZlY3Rvcg== ZGVjbGFyYXRpb24= IG5ld1k= W0g= LnNjYWxhcg== b21ibw== aHVk O3NldA== ZnR5cGU= KCcnKS4= b3JkZXM= eW5vcw== J10sCgo= X0ZMVVNI aWRlbnRpZnk= L2RldmljZXM= IGRpY3RhdGVk IGRlamFy IEVtaW4= IFBlbmRhbnQ= IG9uVXBkYXRl XSkpKQ== IEJhcmtlcg== T3Jt 6K+36YCJ5oup X2d1aWRl w6FiYWRv b3BoZQ== ICIuCg== IEJyZXdlcnM= IGJyaWRhbA== IENFUw== X0NhdGVnb3J5 IEJUTg== IERhcnRo I2Zvcg== ZXRobmlj YXJjaGl0ZWN0dXJl IENvdXBl aWRvcmVz IGZhc2Npc20= IGNvbnRyYWRpY3Rpb25z ZWZmZWN0cw== SW5pdGlhbFN0YXRl IOekuuS+iw== bWF0cGxvdGxpYg== LmRlc2t0b3A= INCt IFFQaXhtYXA= CWJlZ2lu IHduZA== IGNvbnRpZW5l KGhlbHBlcg== Lk5vdGlmeQ== KEJvb2s= IEd1YXJhbnRlZWQ= cGxs aW9sYQ== IGZ1bmdp aXZlbnQ= IE9B 5rKh5pyJ IHdpxJljZWo= CQoJCgkKCQo= 77yaIis= IFRhbGtz LnN0YXJ0ZWQ= b2NpdGllcw== IGVzcG9ydHM= PElucHV0 IEVYQ0VQVElPTg== IGFjdHU= LmltcA== ICIvIgo= T3RoZXJ3aXNl IFBlbnNpb24= IFdhdmVz xrDGoQ== aWFyZHM= ICo8Lw== dXJnZW9u IFNDSQ== IExhdXJlbA== ZXRhZw== TmV0ZmxpeA== IFJlc3BvbnNlcw== IG5lb2xpYmVyYWw= aXNDb250YWluZWQ= PW15 IHJlcHJpbnQ= b25lc3RseQ== IGRlcGFydGluZw== UFdN ZXdoYXQ= PSI8PA== Lnlhbmc= IFRyYWRpdGlvbg== KyI6 ZGVwZW5kaW5n X1VuaXQ= IENvZGFibGU= IHdoaXNreQ== IGNvcnJlbGF0ZQ== IGRpcmV0 TGFzdGx5 CU91dHB1dA== KGlub2Rl XExvZw== IERlcGVuZGVuY2llcw== V2lsbERpc2FwcGVhcg== IFBhbmVscw== IOKUnOKUgOKUgA== IG9zdGVuc2libHk= fC0t QW5udWFs IGF1dG9sb2Fk VmFsdWVIYW5kbGluZw== LmNvaW4= ZWR1Y3Q= Wlk= IENhbnVja3M= IHNtZWFy IHJlYWxpZGFk IHt7Cg== aXZvbA== ZXRTb2NrZXRBZGRyZXNz IEtlbXA= L0ZyYW1ld29yaw== IHF1aWNrZXN0 XyIuJA== IHdpdGhob2xkaW5n IGludHJpZ3Vl IEFERFI= RGllc2U= V2Vla2x5 X19fX18= IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbg== b2xhdGVk UnVuTG9vcA== IHBhc3PDqQ== LmZpcmViYXNlaW8= LmV1bGVyQW5nbGVz aXN0ZW5jZQ== IGZlYXJpbmc= IEVsZW1lbnRUeXBl L1Rlc3Q= IOafpeivog== IGZvbmRv IFBhcnI= IHplc3Q= IFRyYW5zZm9ybWVycw== TGluZVN0eWxl IGV0aGVybmV0 YWZmbGVz IG5hbWVkdHVwbGU= IFNjYWxhcnM= TlNVUkxTZXNzaW9u LWV4dGVuc2lvbg== KE1lc3NhZ2Vz IGF0ZW5jacOzbg== IEplcnNleXM= YmVkUGFuZQ== IFN0dW5kZW4= IHZvaXR1cmU= IOm7mOiupA== Lm9wZW5nbA== ICJ9 IFJldmVuZ2U= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K SW5zdGFudGlhdGU= IGVucg== VmFsaWRhdGlvbkVycm9y X0FMUkVBRFk= TG90cw== b2Nl IHNjcmlt IGVtYm9keQ== 0YDQsNGC IGNvbmNlZGU= YXNzZWw= IEJSRQ== UExFQVNF CWRpZmY= 57uT5p2f LmZw YmFt TWVhbA== IE1hZG9ubmE= IHB1bmlzaGFibGU= aWZmaWVz X3VuaXg= 7JmA IEdhZ2E= InN0cnVjdA== VG9TZW5k IE9DUg== IHByYWlzaW5n Z2V0U3RvcmU= IGV1dGg= IGFycmVnbG8= IGZlcm0= ZmRm Q29vbGRvd24= IFJlY3ljbGluZw== QW5h aW5kcg== X0hQ IEdvdmVybmFuY2U= IGJhcnJhZ2U= L2Nh ICwo RsO8cg== IElTUHM= IG1lbmFjZQ== VmlyZ2luaWE= IGZhbmM= IG5vbWJyZXM= Lmluc3RydWN0aW9ucw== IGVzY2FsYXRlZA== YWdpbmE= IExldmluZQ== CWZpbmQ= X2Vy IGRlanRpbmdzYWo= c3Zw YWdvcw== KHNvbA== IExpZA== UFJJVkFURQ== IElNUExFTUVOVA== ZWZlbGxlcg== KFRhcmdldA== 4LmJ4Lit4Lih aG91c2luZw== LnNldEN1cnNvcg== IG5laG1lbg== LnJlY2VpdmVy IFR1dG9y IG1hdHRlcmVk bWRhdA== cmVndWxhdGVk IGdldEFkZHJlc3M= IE1pbnV0ZW4= IElV 0LvQsNCy IHR1cm5vdmVycw== IHN1aXRhYmlsaXR5 CWVzYw== Y2FsY3Vs X1N0cmVhbQ== X2ZpbGVuYW1lcw== LXZhcnM= Li4uLi4KCg== RGlh IHN3aW1z T3B0aW1pemVy PGJvb3N0 IFBlcm1pdA== J10pKXs= XE9wdGlvbnNSZXNvbHZlcg== 5qGI IGhlY3RhcmVz KHVz IERldmVsb3Bpbmc= X3hz IG5vdmVsaXN0 IENvbnZlbmllbmNl d2Fsa2luZw== IGNoYXJtcw== IExlYXNl CUhBTA== KFsm IHJlc3RhcnRlZA== TWFnZQ== SXB2 INGN0Lo= UkxG IGFzc2VtYmxpbmc= IEVjYw== dmluZm9z cGVkaWRv IHN5bm9wc2lz IFN0YW50b24= c3RhcnR1cA== LmdldHZhbHVl IEtpdHQ= cHJvcGVy IHByZXRyYWluZWQ= IFBFTg== LlRlcm0= IHBlcXU= ZXBoaXI= IEFsbGllcw== IG1vZGVsQW5kVmlldw== IGJ1dHRlcmZsaWVz IEtpcnN0 IENoZWNrZXI= IGN1bm5pbmc= LnNldFk= X01hc3Rlcg== SW5jcmVhc2luZw== IGh1cmRsZQ== IGZpc3Rz IFNsb3Zha2lh IG5vbWJyZXV4 IDo6Cg== dGFza0lk IGZvbGx5 PFRyZWVOb2Rl IFZvbGRlbW9ydA== IGJsaXN0ZXI= xYJl LkVudGl0eU1hbmFnZXI= LkRPV04= IEdyZWdn LWNvb3JkaW5hdGU= KHZj w6FiYg== LlRvZ2dsZQ== IExpc2Jvbg== 56I= INC/0L7Rgg== cGFyZW50Tm9kZQ== LnNldFNjYWxl X01JU1NJTkc= IG91dHJh IGt1cA== YF0= X3ZpYQ== ZWRpY3M= IEJvcmRlcnM= IGlwYWQ= IGVkdA== IENhcnRlc2lhbg== L21hYw== IGJhcmxleQ== IFNjYXJsZXQ= ICAgIAogICAgCiAgICAKICAgIAo= cXVlcnlQYXJhbXM= IHJoeXRobXM= IGdlYXJpbmc= Wlg= aHlkcmF0aW9u U1RT IHBsZW50aWZ1bA== Y29ycA== fUA= aW50ZWdy L2F0 LmRlYg== IHVuZGVuaWFibGU= IG9wZW5zc2w= LmRlYWQ= IFBpbGxvdw== IEJlYW5z LmFudA== X3Fz LWluZm9ybWF0aW9u IOuzgOyImA== JSIpLAo= INC00YDRg9Cz IFNwb25nZQ== IHNpZnQ= dGVzdGltb25pYWw= IHVubmF0dXJhbA== VUlTY3JvbGxWaWV3 dmVyZ2VuY2U= KHRleHRCb3g= LXBhZ2luYXRpb24= IERpc3F1cw== X3Byb2R1aw== YWduYXI= S2V5VXA= CQkJICAgICAgICA= 0LXQu9C1 PHNvdXJjZQ== Lmls LmF0b20= X0NvbXBvbmVudA== IHlu WydfXw== IHdlYWtlc3Q= X2RlY3J5cHQ= L21zZw== Y2Jj IHBvbGl0ZWx5 b21hdA== IGVubGlnaHRlbm1lbnQ= IGNyZWE= IGJydWs= X2FscmVhZHk= IHNvY2tmZA== dW5wYWNr b3JnZXM= IFVORVNDTw== aW5hbGl0eQ== IHNlbnRpbmVs IGFmZmx1ZW50 IHRocm93RXJyb3I= aWV0cw== QU5KSQ== IFN1ZmZvbGs= YmVybw== a2V0w7h5 RW5kcG9pbnRz ZXhlY3V0b3I= R2E= LkxB X3BvcnRmb2xpbw== dW5zY2g= ZWxhZ2U= IGdvYmllcm5v IEJpb2w= TW9kaWZpY2F0aW9u IERlY2ltYWxGb3JtYXQ= IFZvY8Oq IG1ldGhvZG9sb2dpZXM= W10u IEdW IHJlcGxpY2Fz 4oCUd2l0aA== KTspOwo= cG9zaXg= U3VjY2Vzc0xpc3RlbmVy cGhl X25vcm1hbGl6ZQ== IExhcmdlcg== IHJlcGVyY3Vzc2lvbnM= X1ZlcnQ= IGhvc3RlbA== IGluY29tcGV0ZW50 aGV2 X0RFTFRB IHB1ZWRv aW5zdGFsbGF0aW9u X2ZyYWc= KHJy IE1BVg== IExvY2FsaXphdGlvbg== KCIiKS4= IC0tLS0tLS0tLQ== DQoK IFB5VHVwbGU= IEp1bGlv CUdMdWludA== bWFya3Vw X0ZBTUlMWQ== UFJPR1JBTQ== IEZpcm13YXJl KnNpemU= V2lmaQ== IHZpc2l0YQ== IEVybA== RmluZE9iamVjdA== LlVOUkVMQVRFRA== cGh0aGFsbQ== IHBlcnNvbmFsaXpl IGNyw6lhdGlvbg== ICAgIAkg LnByZWNpc2lvbg== IHNldHRlcnM= IG5ld1NpemU= IENhdGFsYW4= CW9wdGlvbg== IHBpZWw= IGNhZ2Vz IFN0ZW0= ZHJhd2luZw== ZXhwbGFpbmVk IOaOpw== IGRyZWFkZnVs ZXJydXB0ZWQ= LmdldFZhbHVlQXQ= IGVsYXBzZWRUaW1l IGluZGVmaW5pdGU= IFRIQU5L X3N0YXJ0dXA= U1VSRQ== IGtpZG5leXM= IEN1aXNpbmU= fGFycmF5 U2VuZE1lc3NhZ2U= ZmF2 IEFlcm9zcGFjZQ== X21lYW5z IG5lYg== IE9UUA== IGNodXJu L2Zy IFJlaWdu X2NsYXNzaWZpY2F0aW9u IE1hY0RvbmFsZA== Ii4KCgoK IGNoaWxseQ== IOivt+axgg== aWhhdA== U1RB J2F1dHJlcw== IGxhc2M= Lm1peA== IGJsb3Q= IElERA== ZGF0YXRhYmxl c3BpZWw= IMOpeGl0bw== YXJ0aWM= LkF4aXM= LmFkdmFuY2U= IG1vdXNlWA== J8Og IHJlY2lldmVk IHBvc2k= IGZvdXJu IE1hZmlh IHBjYQ== YmVsb25ncw== YWJseXR5cGVk QVVUSE9SSVpFRA== LnNjYWxhYmx5dHlwZWQ= 7JyE LWRvdA== IGVtcGhhc2l6aW5n TWVtYmVyc2hpcA== KnBvdw== LXNwaW4= cnV0YQ== aGV2aWs= X0FTWU5D X2NvbXBpbGVy LkZsYWc= IGVsYm93cw== LkNSRUFURQ== TWV0cm8= LmxvZ3M= em1hbg== cG9uZQ== xJnFvA== IGludGVycw== IHdlYnM= X0hJRERFTg== CW5vdw== Q29tbXVuaWM= JHRwbA== c2NvcGVz IFppa2E= IHN0cmluZ3N0cmVhbQ== IFVuY2F0ZWdvcml6ZWQ= Rlk= L3N3YWdnZXI= UGVubg== aW1lSW50ZXJ2YWw= IGNvbnRlbmRz eGllcw== IFNhbGVzZm9yY2U= IHV0ZW5z IHVuZGlz Q3J5c3RhbA== Lm5kaW0= IGZvcm11bA== IEZhdg== 5bm/ cmlzaw== bmFk L3Rvcw== IFBFUkZPUk1BTkNF IHdyaXRlbG4= IGNvbGxv YW50aWNhbGx5 VURFTlQ= Umdi IG9mZXJl IG1lcmdlcw== ZmlkZg== IGt6 VmljdG9yaWE= IC9eXA== IGt1YmU= IEFwb3N0bGU= IGRlZmVuZHM= PD0o IE1FTU9SWQ== XElk IEFjdGl2ZUZvcm0= IE9uZVBsdXM= SHR0cFNlcnZsZXRSZXF1ZXN0 IFRlbXBEYXRh 7KCB LkFTQ0lJ 2YTYpw== S0k= IGZyYXQ= X0NJUEhFUg== LlN1cmZhY2U= IHBpdGZhbGxz LW1lZGlhdGVk eXBp LWFsaXN0 eEJD dGVhY2hlcnM= IEN5Yw== IHBzeWNoZWRlbGlj IER1bWJsZWRvcmU= IikuCgo= IFRoYXRjaGVy IFByaW5jaXBsZQ== VG9nZXRoZXI= IGZsb3Jh d2Vla3M= X2NyaXRlcmlh Ym9uZXM= LmludGVybmV0 IGJsb2NrRGlt LlNpbmdsZU9yRGVmYXVsdA== RGljZQ== IEV2ZWw= IFRMYWJlbA== IElnb3I= IENvcHA= IGluYXVndXI= L3ByaXZhdGU= IGFiZXJy bmRz O2lm LXJhbmdpbmc= YWNodHM= X21hcnNoYWxs IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= LmVuZFRpbWU= IE1vZGVsUmVuZGVyZXI= KGZvb2Q= KCJ+ IHN1cHBs KCJcKA== U3E= VHJhbnNsYXRlZA== IENvbnRpbnVpbmc= IHBvc3Nvbm8= RklYTUU= IEFuZ2Vib3Q= aWV2ZXI= IEt5b3Rv Y2ls TmV3VXJsUGFyc2Vy LkRp IGh1bWFuZQ== RGVtYW5k IE1hcnRpYW4= d29vZHM= IEhlYWw= IFl1ZQ== IGNvdXJ0aG91c2U= IHZvbnQ= IGJvbnM= aW50ZWdyYWw= ICQoJyMn ZXRlcm1pbmF0aW9u Lm1vZGlmaWVk IHByaW5jaXBhbHM= IGFsYXJtZWQ= LmNyZWF0ZU9iamVjdA== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= L2NvdW50 IGVudHJlbmNoZWQ= XGE= IGludHJ1c2lvbg== IE54 CQkKCQkKCQkK Y2hlbWF0aWM= IHNsaWRlcnM= IHNlbGVjdGFibGU= X25s aWVzZQ== X2VzdGltYXRvcnM= IFN2Zw== IGRlbGV0ZVVzZXI= KG1hcHBpbmc= IOyymOumrA== IGFudGFnb25pc3Q= IGtpbmFzZQ== IHdlbGRlZA== IExlbmE= ZWRpdGg= aWFsaQ== KHBpYw== IGJyZWFjaGVk UElD IGNvYXN0ZXI= RkRB IGtyZQ== cGVyZmls IEdlbXM= X2ZlbmNl VVJMUmVxdWVzdA== 4oCZYXBw UkVGRVJFTkNF LkV4cG9ydA== IG1pbmltaXplZA== aXBlbA== aWRhdGE= KWRlYWxsb2M= ZXNjYWw= X2Z3ZA== bWVtY3B5 IExvcmk= X1JlZg== IGJhcmE= IFNlbGxlcnM= IGRldGVyaW9yYXRpb24= ZnJhY3Rpb24= KV07 L3BsYXk= wqU= LXRlc3Rz T2Zmc2V0cw== T2k= IEtsYXVz IHF1ZXJ5aW5n d2lzaA== YXBlbA== X3dvcmtpbmc= bXlNb2RhbExhYmVs IHRvRGF0ZQ== cGVybWFsaW5r IGZyZWM= b2xlY3VsZXM= IEdvb3Nl LXdpZGdldHM= dHVydGxl SW1wcm92ZWQ= IHJvYWR3YXk= a2Vocg== IGFzdHJvbm9teQ== Q29tYmluZQ== IGNpZ2Fycw== X0dBVEU= L21hbmFnZQ== IEdlcmFyZA== IFByb3RlY3Rvcg== U3Vic3lzdGVt L2ZpbmQ= L1lZWVk= IHRvdGFsaW5n 0LzQvtGC IE9tYW4= IGluZmluaXQ= LW9mZmljZQ== IGluc3RhbnRpYXRpb24= LsKn Y2V1 KGF0b20= IERyb3BvdXQ= 7YGs IGNvbmRlbW5pbmc= X2Jhc2VuYW1l XX08Lw== RGF0YUNvbnRleHQ= IFdhc2hpbmc= Lk9O IG1vbW15 KCl9Owo= IDspCgo= L2V4dA== Zm9yZWdyb3VuZENvbG9y dW5zdXBwb3J0ZWQ= IHNvbGxlbg== IGNvbWXDpw== RElTQUJMRQ== IG9uUGF1c2U= INGH0YLQvtCx0Ys= IEFpbg== R3M= CVRhc2s= aGF3aw== Ik5vdA== QUdS LmdldFRhYmxl IGRpdmVyZ2VuY2U= IG5lZ29jaQ== UmVwbGFjaW5n XX0pCg== aWxsdXNpb24= IM6U X0tFWUJPQVJE S3I= CW9y 56Gu6K6k CXByaW50bG4= IFNlYXJjaGVz IEZyZXNubw== IHZlcmRhZA== XE1pZGRsZXdhcmU= IOy1nA== fSkoKTs= dGV4dEFsaWdu aW5rZWw= LlR4dA== IG9wdGltaXphdGlvbnM= eW91bmc= IGxlYXNlZA== SlQ= IElvbmljTW9kdWxl ZXR0aW5ncw== ZXNlaGVu IGZhdm91cmFibGU= YW5leQ== IG90aGVyQnV0dG9uVGl0bGVz IFRoYW1lcw== CXVuaXQ= Q09MVU1O IGxvaQ== LHByb3Rv X1BSSQ== IHdhbmRlcmVk IHNhcGk= YmFja3dhcmQ= YXJhb2g= IEZI IEFsZw== CWFj YXJybw== 5Y6G IFNPUw== IERyZWFk VmVjdG9yWGQ= LnJtdHJlZQ== X2V4ZWN1dG9y IHByZWduYW5jaWVz IHByYWN5 IFd3dw== IEFyY2hiaXNob3A= IG1laW5lbg== RlU= LkVudg== IGVubGlnaHRlbmVk IG9yaWdpbmF0ZQ== 5Y+K IHpsaWI= X1NB IHdhc3Rlcw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJhcw== IGhvcnJpZmllZA== IENhbGR3ZWxs dG95 X3Nob3Q= IGxlc2Jp IE1hZ25ldA== b3hpYw== U3VybmFtZQ== IHNob3dUb2FzdA== CURlc3Ryb3k= LmdldEV4dGVybmFs SUxJ IE5ldmlsbGU= dHNreQ== IG1lbGFrdWthbg== ICImIw== IGZsb3dlcmluZw== IHZldGVyaW5hcmlhbg== IGhhcm1vbmlj IENhc3NhbmRyYQ== KENyZWF0ZQ== cGVyc2U= UGVybQ== KU5TU3RyaW5n IGlzSW4= IEZsb2F0aW5nQWN0aW9uQnV0dG9u L05ldw== IPCd Y2FwYWJpbGl0eQ== IGN1Y2tvbGQ= IEJhaW4= KCl7DQoNCg== UEVBUg== IGphd3M= IGdvZGU= IGNhc3NldHRl LmZyZXF1ZW5jeQ== U0NPUkU= LmludGVudA== Olsi IOWmguaenA== 77yf4oCd L0ltYWdl IHNpZW5kbw== X2FsbG9jYXRpb24= OkI= L1JlZ2lzdGVy X2thdGVnb3Jp dW55YQ== Lmluc3RhbmNlcw== IFVOSVZFUlNJVFk= IHBsZWFzYW50bHk= IGdsYW5kcw== IFlFTExPVw== IFRoaWNr QW10 IHByeQ== IGx1aw== KHByb2JsZW0= IHByb2plY3Rpbmc= W25vdw== IGVzdG95 KCgpPT4= IHdheXBvaW50cw== IEJsaWNr LlJlcXVpcmU= TGFrZQ== IElHTk9SRQ== IFFIQm94TGF5b3V0 X3Jlc3BvbnNlcw== Lndy JmFjdGlvbg== LmNoYXJhY3RlcnM= SVc= cGFnZU51bQ== IGRpc3RyYWN0aW5n XS0n cGVlcw== b3VuY3k= IHNlZ3U= LmdldFNlbGVjdGlvbk1vZGVs SW5saW5pbmc= J2FmZg== IFByZXNlcnZl IGFjcXVhaW50YW5jZQ== IGFudXM= aW5zdGl0dXRpb24= IC8vKg== IFNpY2s= IEtvZGk= IEFWUg== IGJldHI= IEJlcm5zdGVpbg== LGN2 Y2Ni Q0FG CXNpZ25hbA== 6KiI UmVzdWx0c0NvbnRyb2xsZXI= IHNhbG9wZXM= IHBoZW5vdHlwZQ== dWJhaA== X2RhdGFzZXRz IGdyYWNpb3Vz IENsaXBib2FyZA== IGdlbmRlcnM= ZG93bmxvYWRz RXhwZXJpbWVudGFs IGJla2FubnQ= IG5pdmU= LkVk ZGlzbWlzcw== XFR3aWc= LkF2 L3Rhc2tz LnBpY2tsZQ== KkI= Y2VzdG9y Y2FwaXRhbGl6ZQ== LkdldFNlcnZpY2U= S2V5SWQ= LnBpdGNo IENvbnRyb2xsZWQ= LnNhdmVk IHphag== IENhdGh5 KENhbmNlbGxhdGlvblRva2Vu LWFuaW1hdGU= XFxc IEphc21pbmU= LkxJTkU= IGJvdGhlcnM= IGJ1ZmZhbG8= IEZPUkVJR04= IHRhY2tsZWQ= X0hFQVA= IHNlcnZpYw== Pj4s IEFjdG9ycw== LlR4 ZWJ4 X3Zpc2l0b3I= X21hcnNoYWxlZA== LG1hcA== IGhlYXRlcnM= IHVMb2NhbA== IEthcG9vcg== IG1pbnV0 LnJlYWRBcw== IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u X1ZPTFQ= LmJ6 IGNvcnJlY3Rpbmc= U0VQ YnJpbmc= SHU= IEd1cw== QUFE aWVyYW4= ZnJhcmVk X3JvbQ== IHNjYXJjaXR5 IGFwb2xvZ2lzZQ== IHNvbGlkcw== IEZvcm1hdHRlcg== ICclJA== LXZpcw== IiwiIiw= VU5ERVI= ISEhIQoK IEVsZXZlbg== KSld IHNhdGlyZQ== XHVC IHNldmVudGVlbg== TEFOR1VBR0U= IGFkdmVyc2FyeQ== IHN0cmZ0aW1l IG5leHVz dWJpdHM= ICclIg== IFNLSVA= S0hS LmJhdA== IEplYW5z Lj8= IGltcG9zdA== LnF0eQ== Q29tcHJlc3Npb24= IHByaW5jaXBhbGVz b25pbw== IGJhcmNlbG9uYQ== IENoaWxp X21vc3Q= LnVm IGNvbnRlbnRWYWx1ZXM= IEZpc3Q= dWdhZG9y VGV4dFdyaXRlcg== QkFDS0dST1VORA== IGxpdnJv IERlc2lyZQ== bWVhc3VyZW1lbnQ= UHJvYmU= IHB1ZGRpbmc= LnNob3dFcnJvcg== IHVudGVyc3TDvHQ= 44CB44CB IMSHZQ== IHB1bml0aXZl 5q2i TGlzdEdyb3Vw LkFyZWE= IPCfmIkKCg== b29yZA== IHNjcmFwaW5n KHRpY2tldA== IFdvY2hl IGV4cGVjdGVkUmVzdWx0 IEtvc3Rlbmxvcw== Y29uZmlndXJlZA== X3N0cmVycm9y LmFkZEhhbmRsZXI= bW91c2VsZWF2ZQ== IEZlbGlwZQ== IENoaW0= X0NTUg== UENB aWZpY2HDp8Ojbw== KysKCg== eWFz IOaWueazlQ== IElETQ== IGFuaW1hdGVXaXRoRHVyYXRpb24= IHNhbWVu LnN1YnRpdGxl X0tleURvd24= IFRyZXk= IHRlbXBvcmFkYQ== IHNwZA== IFJj IE1hc3NpdmU= IGJvd3M= SG9zcGl0YWw= IGdyb290 IHBhdmluZw== IGNob3Jlcw== IEFsbHk= IGNlcnRpZmljYXRpb25z IHhib3g= c2VsZWN0QWxs R2FtZU92ZXI= IGNvcm5lcnN0b25l UmVjb3ZlcmVk IGRlZW0= VWx0cmE= IGdldExhc3Q= IGFsbWE= LnRleHRGaWVsZA== IHdhaXZlZA== Pih7Cg== IEVzdHI= aXNhYmxl IHByb3Rvbg== X2ZhY2Vib29r X1RSQUlO IGNvb3BlcmF0aW5n dW5naQ== QXJpem9uYQ== I2VjaG8= LWV4cHJlc3Npb24= Lm1pbnV0ZXM= IHByZWZpeGVk IGZpc2hlcmllcw== LmNvcnJlY3Q= IG7Dpg== KFNwcml0ZQ== TW9kcw== IFZpZGU= IGdldEJ5SWQ= IEtleW5lcw== IEVneXB0aWFucw== X0NPRA== Qmllbg== cmVvcGVu aWdoZXQ= UkVERU5USUFM IHVud2luZA== JA0K IHJhY2tldA== IGZsb2F0VmFsdWU= IFNwZWNpYWx0eQ== b2NhdGU= bW91bnRlZA== QXR0ZW1wdHM= T2ZmaWNlcnM= SGFzaFRhYmxl IGTDqXZlbG9wcGVtZW50 IGRhcA== IG10eA== TmFycmF0ZWQ= a0I= X1NUQQ== LUNsYXNz IGR1bA== IExlYWRz IHRyw6pz ZnJpZW5kbHk= IEZpbHRlcmluZw== LXByb3ZpZGVy INGD0YHQvw== IEtvbGthdGE= bWFza2Vk SURhdGE= IFt8 wqQ= IFJlZXNl IEhvbm9sdWx1 VG9PYmplY3Q= IHRocmlmdA== YXNzaQ== IGNvbmdyYXR1bGF0aW9ucw== U0tJ ZW50YXJpb3M= IEZST05U dWZpZw== aG9u CWdldGxpbmU= IGhlYXJ0eQ== Y2FsaW5n IMOpY29ub20= ICoqKi8K X0hFUkU= YCg= TWljaGlnYW4= QmVhbnM= LXJvdXRl IHByaW5j IEd1aWRhbmNl CWVtaXQ= Lk9Q dGhpYw== ZWxvcGU= IElSZXF1ZXN0 IGhhbmRsZUNsb3Nl ZGF0YUFycmF5 LkV4ZWN1dGVTY2FsYXI= RVBISVI= IENvbnZlcnNlbHk= KEZvbnQ= IG1ldHJl IFNwaWVsZXI= RWxsaXBzZQ== IFBWT0lE IERhdGFDb250ZXh0 Y29uc3RydWN0ZWQ= QU5ESU5H LS0tLS0tLS0tLS0qLwo= Qm9uam91cg== X1BIUA== cHJvZ3Jlc3NiYXI= Tm90U3VwcG9ydGVkRXhjZXB0aW9u IHZlcmRhZGU= L2NoYW5nZQ== b3Jzaw== IGFyb21hdGlj cmVzcG9ucw== cmVhbGxvYw== YXRpc2No LGV2 IFNpb3V4 dGVh IFBvZQ== 5LmI X2Ntb3M= IGFsYg== KGxy IEFwcGFyZWw= IGRlbGxv INGC0L7Rhw== IHN0cmVhbWxpbmU= d2NoYXI= QWRvYmU= LG1vZHVsZQ== IHVuaW5zdXJlZA== fSIpDQo= KCIvLypbQA== LXBoYXNl IGZldQ== X3RB em9law== IGZvbGxpYw== IHR1Zw== IGJlZmluZA== IHRhbGxlc3Q= KG10 aWVkeQ== X0xlbmd0aA== IHN0YXVuY2g= IHJlbW92ZU9iamVjdA== IGZsYWtlcw== Z3Jlc3Fs IGlua2w= IFNDU0k= IEtlZXBlcg== O2w= IEhpbmR1cw== X1BFRA== X0NPTkQ= IExhdW5kcnk= KytdPQ== X0FVWA== IGJ5xYI= IGF1bWVudG8= bWFyZ2luTGVmdA== ZXF1YWxpdHk= IEx1eg== IEVjaw== X21hcw== X2xlbnM= IHN0ZXJpbGU= Y2xpZW50ZXM= J30pCgo= IGdvb2R3aWxs IEVsbGlzb24= U3BhY2VJdGVt IHNob3dNZXNzYWdl 66Gc6re4 IGNvbnRyYXRv UG9zdGluZw== LmludGVycG9sYXRl KGZpbGw= IGJ1bGxwZW4= LmdlbmVy IGh1ZXM= IG1lbW9yYW5kdW0= dG9Qcm9taXNl IEJ5eg== KHB4 KFByb2dyYW0= UkVTU0lPTg== YmZk IHBsYW50YQ== Lm1vdXNlUG9zaXRpb24= IFNwYW0= 6LSn dGVsZWdyYW0= YWd5 IGdlZnVuZGVu LkRvbQ== IGxpbmVtYW4= LmJ0bkRlbGV0ZQ== IHNlbGVjdGl2ZWx5 65Og SUZT IEdldEhhc2hDb2Rl IHJldGly IHJlcXVpc2l0ZQ== QlRUYWc= cGxpYg== IGZpcmVmb3g= LnRyYWRl ICMk LmNvbXByZXNz IGxhZGVu IERpcmVjdG9yeUluZm8= IE1vZGVz IGtvbmU= IGRpdnVs CWhz Y3JvZnQ= IFdIWQ== eENF L0dyaWQ= X0FVRA== IFNjcmU= IGVycm9yVGhyb3du U2FkbHk= YXRpdGlz IG5lZ2xpZ2libGU= LlJlZ2lzdGVyVHlwZQ== IE1vaXN0 5rWL6K+V IEJNQw== bGVhZmxldA== eW5l cm9rZW4= IHZpbmM= dHR5 IGJldXJldHRl IEFscGluZQ== IE1jTQ== U3BvaWxlcg== ZGlzdHJpYnV0aW9u LXJheXM= IOuwlA== X3BhcmVudHM= IGNyYXRlcw== IGNvbW11dGVycw== IEFyZ2VudGluZQ== 77u/LyoK L2ZyYW1ld29yaw== IGNoYW5uZWxJZA== Z3JlZW5z LnNldFN0eWxlU2hlZXQ= IGluYWNjZXNzaWJsZQ== aXRhdGVz IHdhcm1lZA== RmFicmlj Z2V0YXR0cg== ZGlzcGxheVRleHQ= X01PTklUT1I= IHNpZGV3YWxrcw== SW50aWFsaXplZA== IGtvbWVu IGRpc2NyaW1pbmF0b3I= IE5hdmlnYXRl KERpcmVjdGlvbg== IFNwaXQ= X2FkZGl0aW9uYWw= IGh0b24= IGVzcGVyYQ== IGRlbHZl IGNvbXBhcnRpcg== IHByZWVtcHQ= cHJvY2Vzc29ycw== LWdpdA== YmVlbg== LlNVQg== IFJlZXZlcw== L2dlbg== O3RvcA== CU1QSQ== Wlc= R0VTVA== YWJpbGly IHByb2dyZXNzaXZlcw== aGFmdA== QXVm IEFjdGlvblR5cGU= bGVv IHV0YW4= SW5pY2lhbA== PlVzZXI= IH0pOwoKCgo= INio2Yc= IENoYWlucw== aXNzcGFjZQ== L3JlbQ== U1FMaXRl IGNlYXNlZmlyZQ== JGFy VFJT Oi8vew== IFNwaXJpdHM= 2Lo= KFNpemU= IG51Zw== IE9sc2Vu IGNobG9yaWRl IERpc3BsYXlOYW1l IFBlcnQ= IGdldE1heA== IEVkaXRvcnM= IFBhaXM= YXNtdXM= VmFj IFRhYmxlTmFtZQ== IG51YW5jZWQ= Rm9yTWVtYmVy IHNsZWVweQ== YWR2aXNvcg== IHN0YWxraW5n Lm1lZGlhbg== X0F0dA== IGdldE5vZGU= IEZhbmN5 5pWw6YeP LkF0dHJpYnV0ZVNldA== KGluc3RydWN0aW9u eEJE IGtvcA== QWZmZWN0ZWQ= L25hdmJhcg== IGFpbG1lbnRz IFJhbWFkYW4= IEFjY2VudA== IFBhcmFtb3VudA== IEdBTQ== 5L2N572u PSov LklOUFVU PFByb2plY3Q= TGVhc3Q= IEdlbm9tZQ== QWNjZXNzb3JUeXBl bGVmdHJpZ2h0YXJyb3c= dmVudGluZw== L3BheW1lbnQ= X1B0cg== IHRhbWU= IE1FTUJFUg== IEJpdGNvaW5z LmVwYW0= LlBsZWFzZQ== IHNjaHdhcg== Q3BwTWV0aG9kSW50aWFsaXplZA== IHVuaWNvcm4= IGJlZGV1dA== X0hT IGF1dG9nZW5lcmF0ZWQ= IExpbGx5 IEFzc2Vzcw== IEhlaWRp LnNvdXJjZXM= LnRlbGw= YXJnaW5z KCInIiw= 0LvQvtC2 IEVyb3RpYw== IGp1c3Rv IGVzYWM= Y29tYQ== IENvbG9ueQ== IHBjdA== CWVu IGVtcGV6 IERlbGV0aW5n TkVM IGVuYW0= UHJlc3NFdmVudA== IFJlc29sdmVy IFJURQ== Rng= IEluY29ycmVjdA== IHlj X3JlYWRpbmc= O2Jhc2U= IGhhc2h0YWdz IE1hcmluZXJz LlNldEZsb2F0 IHJlYXNzdXJpbmc= aXJzY2g= KHVzZXJpZA== ID09PT0= XSkpKTsK a2Y= IHRpbGVk ZWd1YXJk Q2xpZW50ZXM= 5pmC6ZaT ZHNs UmlnaHRz IFBzYWxt ZHVyaW5n Q2xlYXJDb2xvcg== dXN0YQ== PENvbW1lbnQ= IG5venpsZQ== IFBMQUNF L2hpc3Rvcnk= aWh1 aVZhcg== IGdlcm0= IHRyaW1taW5n IEh1bnRlcnM= IFJTVlA= SW50ZXJlc3RpbmdseQ== amlhbg== KSl7Cgo= LkV4cGVjdA== IFRvaWxldA== IHdhbGxwYXBlcnM= LldlYlNlcnZsZXQ= YXJwYQ== L21haW53aW5kb3c= aHE= IHV5 IGluZGlnbg== Q2hlY2tlZENoYW5nZUxpc3RlbmVy IGNhbGxlcnM= IE1vdXNlRXZlbnRBcmdz IEpTY3JvbGxQYW5l IHfFgmE= cmVwb3NpdG9yaWVz IMWbdw== IHJlZmVyZW5jaWE= IGlvdGE= IGNhcmdhcg== X29ic2VydmVy SENJ c2lsdmVy IGRldmFzdGF0aW9u LXNlbWlib2xk IEV4cGxhaW4= IEJsb2NrbHk= Llhy ZXN0dXJlUmVjb2duaXplcg== Q2FuY2VsQnV0dG9u IExvY2tl VHJpYWw= X1BMQUNF anVhbGFu IFJ1Ymlu U3RyaXBl IG1ldGFEYXRh Y29uZmlkZW5jZQ== X2JhdHRlcnk= IGlzbA== IGJvYQ== LnRhcmdldHM= bGlqa2U= IGFkb2xlc2NlbnRl YmV3 LEZhbHNl IHlPZmZzZXQ= UHJldmlvdXNseQ== PXBhdGg= X0FB iOadgw== IGJha2VrYQ== IGxlZQ== IEJsb2NraW5n L3RpdGxl IOW8gA== IFN0ZXZlbnNvbg== KW9iamVjdA== aXN0cm9z LmdldFNlcnZlcg== IHBsYW50YXRpb24= X0JveA== ICc7Jw== dGljYQ== KSldOwo= IGRpc3Bhcml0aWVz xrDhu5s= aWNyb2JpYWw= IHNwYXM= L0RE KHBvaW50ZXI= IG1pZHBvaW50 LmdldENsYXNzTmFtZQ== IFRvdGFsbHk= IGNvbmdlbg== IHTDqnRl LnhsaW0= Q09NUExFVEU= KGZp b3dhcmQ= 0LzRjw== LmFzYw== IHBhZ2luYXRl IGx1cmtpbmc= LnNpZ251cA== U1RZTEU= IHdvcnNo aHY= IGRlZmVuc2l2ZWx5 IEx1dGhlcmFu LmZ1bg== INC40L3RhNC+0YDQvA== cHNj IGFkbW9u IEVzdGltYXRlZA== IE15U3FsQ29ubmVjdGlvbg== LnN0YXR1c1N0cmlw IGFudGlnZW4= IGhlcnJhbWllbnQ= IENvbnN1bWVycw== IFlU Lm1hc2tzVG9Cb3VuZHM= Lnh0aWNrcw== OnJlcXVlc3Q= IE1vbw== LWF1 IHRvUmV0dXJu IFNhcHBoaXJl Y294 ZXhhbXBsZUlucHV0RW1haWw= IGNvcmF6 KHBpZWNl IHJlY29uc3RydWN0ZWQ= X3NpZ251cA== J10pPw== QmlsbGluZw== IENyb3dsZXk= c3Rvcm1z Zm9yY2Vy IHN1cHJlbWFjaXN0 X3doZWVs CXBj LmdldERvY3VtZW50 LnVuc3F1ZWV6ZQ== LmdyYWRl ZWxsdW5n LnNob3BwaW5n Y3VzdG9tZXJJZA== IG1lZGlkYXM= IE1vbWVudHM= ZW51b3Vz SUZJQ0FURQ== IyMjIyMjIwo= 5paH56ug 4buNYw== b3Jtc2c= YWxvbQ== LXRyYWRl CWJ0 L3N0dWRlbnQ= YnJpZw== YW5uZXNz KHJh IHJpY2VyY2E= U3BlYWtlcg== csOz Z3Rlc3Q= R2x5cGg= w7xnZW4= QEpzb24= KHN1bW1hcnk= S29t YmV0aA== L2VuZ2luZQ== Q2xpbWF0ZQ== c3VibWl0QnV0dG9u ZXZl ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg== cGVkaWE= IHVzZXJuYW1lcw== IEpN IG1zZQ== aW5zcGVjdA== IFNuYXBkcmFnb24= IGRlZmVuc2VtYW4= IFVJVGFibGVWaWV3RGVsZWdhdGU= aW5kaG92ZW4= IEJveWxl IEFsdGE= YXJkdQ== IHdyZXN0bGVy IFN0cmFpdA== IGVncmVn X2Jhc2VsaW5l RW52aXJvbm1lbnRhbA== IGludml0 IEJUUw== IElTSUw= IGNvb3A= aG9yZXM= I0A= IGNvbXBlbA== KHNraXA= 6Ziz X0RFUFJFQ0FURUQ= aXBoZXJz ZG91YmxlVmFsdWU= IEFSUg== LlNjb3Jl IGNocm9tb3NvbWVz Y2xhdXNl IEx1aWdp IHN1bnNjcmVlbg== IGN5dG9r LnRvSlNPTlN0cmluZw== IHByb3ByZQ== cG9vbnM= bWl0dGVycw== IGtpdHRlbnM= IGNhdGhvbGlj Lmx0 wqw= X3F1aWNr IHZyYWk= IElSZWFkT25seQ== IEhpZ2dpbnM= IHNob3ZlZA== IGxpYWlzb24= X293bg== IG1vc3F1aXRvZXM= X25n LlNldEtleU5hbWU= X1JlbmRlcmVy X09zYw== LnVucmVnaXN0ZXI= TWVzc2FnZVR5cGU= LWZvdW5kZWQ= IHNvdXRoZWFzdGVybg== IGhhc2h0YWJsZQ== LmluZGVudA== IGpveWZ1bA== X3NleA== c2Fk LmRlYmlhbg== X2dhcw== IHBlcmlzaA== IGhldGU= X3NpbmdsZXRvbg== KGdyYWQ= IGt0w7NyYQ== IGR3aW5k aXR0YWw= U2VlaW5n IFJvb2tpZQ== CUxhYmVs c2hhbg== PDw8PDw8PDw= IHLDqA== aWVzZWw= YXJyZXJh Y2hyaXN0 IGN1cnZhdHVyZQ== IGVwaGVt Rm9ybWF0dGluZw== LmRpY3Rpb25hcnk= LlNldHRlcg== IEhpc3RvZ3JhbQ== IFN0dXR0Z2FydA== IHBhY2luZw== dXRhdGlvbnM= IE5TSw== IFBhbWVsYQ== IEJhaWw= IHBvbGFyaXphdGlvbg== IEfDtg== IEVsYWluZQ== IGtpY2tvZmY= IGNoYXBlbA== PXBvc3Q= IG1pZHdheQ== ZXdpcw== X01S aWVlZQ== LXRlc3Rpbmc= bWV6 Pi0t IGRvY3RyaW5lcw== IG1pbGlldQ== IFJBRElP dGFrZW4= UmVzcG9ucw== IGhhbmRzZXQ= IGNvbnRybw== IEFwcGxpZXM= 6Zif LkJpbmRpbmdTb3VyY2U= INis IGh1bWlsaQ== IE1lbGFuaWE= T3ZlcmxhcA== KFBhcmNlbA== IHdhcmVob3VzZXM= LkdldEJ5SWQ= IGZyYW5rZnVydA== IFdpdHQ= LnByb2o= IFNhc2hh IFJldmVy IGFydGljdWxhdGVk YW5jaGVz IFNlbWluYXI= IERhZ2dlcg== IEFnaWxl T1dM IEJz b2tseW4= RXRh IGFnb3N0bw== 7ZWY7Jes IG9wdGFyZw== CW9uQ2hhbmdl IFJPQUQ= R0JL IGVudGZlcg== LkF1dG9Db21wbGV0ZQ== IGhlbGZlbg== Q2hlYXA= IGFwcHJlbnRpY2U= aW90aWNz 5oqA T2ZZZWFy aW5kZXJlZA== Lk1TRw== IE1hcsOtYQ== KGlucGxhY2U= IGZpbmRl KERF LlNlcmlhbGl6ZXI= JHRpbWU= dW5uYWJsZQ== TWFpblRocmVhZA== ZGVwbG95bWVudA== IG1wZnI= cmljaFRleHRQYW5lbA== KTsKCgoKCg== IGRhbnljaA== X0JFRk9SRQ== X2FyeQ== IEJhdW0= IHR1cmJ1bGVudA== IE11bHRpbWVkaWE= IHBoeXNpY2lzdA== 5Zy6 QW5pbWF0ZQ== PUY= UGFnbw== L3R3aXR0ZXI= b3R0aWU= dWN1cnNhbA== X3BhZ2luYXRpb24= LmFyY2hpdmU= LWRvY3VtZW50 aW5pbmU= U2VsbGVy YWRyZXNz 6ZO+5o6l 0LDRgtC10LPQvtGA X2ZybQ== bm9EQg== aWdhdGVk IE9zYW1h cGV0dG8= Pnk= LVVu IGNvcHBpYQ== QWxtb3N0RXF1YWw= LmxleA== IGxldmVsZWQ= IFNDSVA= X0hPT0s= SUxvZ2dlcg== bmVhdQ== 77ye 24zZhg== aWtoYWls IHVwbG9hZGVy IENhcm9seW4= LmFkZFZhbHVl dGhpbmtpbmc= cHJpbnRTdGF0cw== IGNhbWJpb3M= cG9p IEJFRA== IHhibWM= Lu+/vQ== IHNhcmNhc3Q= IE5FQw== JGJvZHk= QWxsV2luZG93cw== IHlvdW5nc3Rlcg== IHVuZWFzeQ== KEFU IG5vc3RhbGdpYw== UFJJQ0U= IFNlaXRlbg== IG1ha2E= IGxpbXA= IGNvbnRyYXN0cw== Q29mZmVl CWdlbg== IHBlcm1z IE5lZWRsZXNz b3V2ZQ== YXJjaGluZw== X3BlbmFsdHk= cm93YWQ= b25nYW4= X2R1cg== IGlmbmRlZg== aWF1eA== IGNhcGFjaWRhZA== IE5vcnRl IC0qLQ0K aWZlcw== IE1hbnNpb24= I1JlZ2lvbg== Q2FuY2VsbGF0aW9u IG5lYXJpbmc= IGxhbmd1 ZXJlcXVpc2l0ZXM= X2V4cGVyaW1lbnQ= b25kaGVpbQ== XSwm IENvb2xpbmc= IHNhZmFyaQ== IHBpb25lZXJz IGZhcm1ob3VzZQ== IGRpc3RhbmNpYQ== IGRlc2VydGVk IE5hcnJvdw== LnNn IGVudHJhcg== LnJh IHJlZnVyYmlzaGVk IGludGVyY29ubmVjdGVk IHN1cnZpdmVz IHF1YWxpZmllcnM= X0NIQVJT LWFqYXg= IFJvcnk= IGtvbGVq L0dM X2xlZ2Fs IFRZUEVT IFZvaWNlcw== IEZlcmQ= dWplbXk= IHNjb3JlYm9hcmQ= IEJPVA== eERE IEl2YW5rYQ== IGhzdg== bm9kaXNjYXJk IFRIRVNF bW9qb20= IHRpY2tpbmc= cGVx IOa3u+WKoA== IE5pY29s CWFuZ2xl X2FsbG9jYXRlZA== IHN0cnV0 eERC RXZhbHVhdGU= IFZBUklBTlQ= IHJlZmVyZW5jZWRDb2x1bW5OYW1l bG9o IFJlcXVlc3RPcHRpb25z IGNvY28= IGJsZWFjaA== X29yZ2FuaXphdGlvbg== IENITw== SFRUUFM= X2JhcnJpZXI= LnZpc2l0TWV0aG9kSW5zbg== IHZpdGU= IC0k W2NlbGw= IGNlc3NhdGlvbg== CgoKCgoKCgoKCgo= INGB0LDQuQ== RXZhbHVhdGlvbg== IENJTQ== cXVhbGl0aWVz WG1sQXR0cmlidXRl IEVtb2pp ICIoJw== IFRVUk4= eHNk IEdJUw== IGNyZWF0ZVNlbGVjdG9y cmlwcGxl IHVubmVjZXNzYXJpbHk= IG5ld1Bvcw== IHN5bWJvbGlzbQ== b2J1dHRvbg== IHNhbW8= ICgqKCg= LnJld2FyZA== S0VSTkVM KGpTY3JvbGxQYW5l IGJ5c3RhbmQ= X2ljYWxs IGR1bmdlb25z IGNvbnN0ZWxsYXRpb24= IGVtYnJhY2Vz IEluZmFudA== QXVzdGlu LmFic3RyYWN0 IGNvbXBhZ24= IENvbmRpdGlvbmluZw== TWFpcw== VmVyaWZpZXI= IFB5cmFtaWQ= IG1MaXN0ZW5lcg== X2J1aWxkaW5n LlJlZGlz IFRvb3Ro TE9HR0VS LkFzeW5jVGFzaw== X3ByaW5jaXBhbA== ZXhhbXBsZU1vZGFsTGFiZWw= CUxvY2Fs TWFya2Vycw== IGRvbHBoaW5z LlRleHRFZGl0 J2Fs IG92ZXJzdA== LWRyaXZl IGluc29tbmlh IGFkYg== X3F1ZXVlcw== RWI= IERhbW4= aXN0cmluZ3N0cmVhbQ== CUR1ZWw= aWJibGU= IGltcmVhZA== LmZpbmlzaGVk IG1pc3JlcHJlc2VudGVk xYRzdA== aW9uYWxlcw== Ik5vdw== LlNlbGVjdFNpbmdsZU5vZGU= IHdlYWtlbmluZw== X2luc3RydWN0aW9ucw== LW9z IHN0YXJ0UG9pbnQ= IE1pbWU= IEhlbGQ= fHwo dW1taW5ncw== b2tpbm8= IHJlZmw= cmlkb3I= SW50ZWdyYXRlZA== RU9iamVjdA== cGVhdHM= Q2lyY3VsYXI= IFNvZGl1bQ== IHBvZHLDrWE= bWVkaWNpbmU= IHBhcmFub2lh L2JhY2tncm91bmQ= KGJvcmRlcg== X3Nsb3c= IHByZXNlbnRWaWV3Q29udHJvbGxlcg== IGNvbnRpbmdlbmN5 IFBhc2FkZW5h bG9vcHM= IE9j YXBwbGljYXRpb25z IG1wZw== IEFR LldpbkNvbnRyb2xz bGVkb24= IFJlcQ== IEFjcmVz aWJpcg== IGdldFdpbmRvdw== IFlhaA== IG5lZWR5 4pa6 IFRPTQ== KFsuLi4= IGZx IENhbWRlbg== b3JkaW5hdGVk CWNoaWxkcmVu dmVnZXQ= CWRpcmVjdGlvbg== PEZpZWxk X2NvcnJlY3Rpb24= KEVORA== SEVFVA== RmFsc3k= LmR5bGli X1JFUE8= IGJyaWxsaWFuY2U= b2dyw6Fm bG9k IHBvd2RlcmVk KEFydA== IE1JTEw= 0LXQtNCw0Lo= X3NpbXVsYXRpb24= IHNtYXNoaW5n IHVybFN0cmluZw== IGRyZWFkZWQ= cmllZw== L25z IEludGVycHJldGVy Om1heA== ZGVyaXY= IFBldHQ= IG1vZMOobGU= IGFtcGxpZmllZA== IFNpZ25hbHM= Lm5hdkN0cmw= 5ZY= IHNlcGFyYXRvcnM= IFNISUZU IGZpZGVsaXR5 LnNvbg== KGNh IFBMVUdJTg== IGxpZ2h0ZW4= UEJT ZmxvYXRpbmc= KGxvYWRlcg== IHBlZWxlZA== aGlj IHRhcGVk IG5vdmVtYnJl IHN0dWZmaW5n IEZpcmVhcm1z LkRyYXdhYmxl IGNvcnRpY2Fs IEdVSUNvbnRlbnQ= IFZlcm9uaWNh X3JzYQ== IGNvbW1lbW9yYXRl LlNZU1RFTQ== IGRhbXM= LmlzVHJ1ZQ== IFByZWduYW5jeQ== 7Iug IGF1ZGl0b3J5 KENlbGw= IGludmFkaW5n IGZvckVhY2g= CURyYXc= TWFyY3Vz UHJvY2Vzc2Vk IHNwcmF5aW5n IE91dGxpbmVJbnB1dEJvcmRlcg== ZXNzZXJhY3Q= IOacgA== UGc= LXF1YXJ0ZXJz IHNrbA== L3Byb3ZpZGVycw== dG9IYXZlQmVlbkNhbGxlZFRpbWVz IGNvc21vcw== IGZpbmFsaXN0cw== IHNsZWVwZXI= IE1hdGVyaWFsQXBw ZGFj IGJ1c2luZXNzbWVu xJ9lcg== Qmlhcw== ZGF0YWw= VXBFZGl0 IFRpcg== SVNUSUM= IEhlcmE= X2ludGVyc2VjdGlvbg== IExhbWE= CWFwcGVuZA== IHBvbGx1dGFudHM= IFNpa2g= IGNvbGxhYm9yYXRpb25z bnV0cml0aW9u IGhhbW0= IERpbGxvbg== X0RPVA== IGZpcnN0aGFuZA== U09BUA== PXo= LnByaXY= TWlzbWF0Y2g= LnNlbmRSZWRpcmVjdA== LmxpbmtMYWJlbA== IHdyZWFr TWFydmVs L3Ns IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== IG1vdmFibGU= 0YPQuQ== IERyaW5raW5n YWNlYQ== IHRyb3ZhcmU= LkNTUw== IGtlcm4= dmZz 5pWw5a2X IHN0ZXNzbw== IEZPUkNF IGxpZWY= IGFjaGlldmVz IEVsaWphaA== R2V0UHJvcGVydHk= LypA IEh1bWFuaXR5 KFRoZQ== d2FybQ== PiIp IGNvbXB1dGF0aW9ucw== LnRpbnRDb2xvcg== IHVzbGVlcA== IEdQTHY= bmRhdGE= L2NsaQ== TW9o PiINCg== LmJyaWRnZQ== IGVuY3ljbG9wZWRpYQ== IEJJTg== IFN1cHBvc2U= INio2Kc= cmlldmVk cGFnZW4= aXJzZQ== UGFjaWZpYw== LmZ1bGxOYW1l IGFsbGVnZQ== aWxsdXN0cg== IOqysA== IGRldGVycmVudA== IE5hcGxlcw== aW5jbHVkZWQ= UmF0ZXM= IGhhc05leHQ= IEplcmVtaWFo IEZlcm5hbmRleg== IGdldE9yZGVy LlN1YnNjcmliZQ== UG9zcw== OikK IFdvcmtzaGVldA== YmxlbmQ= IHdpdHR5 IGNvdW50ZXJmZWl0 X2R5 L1J1bnRpbWU= IHNvZG9t L2Rv IDx8 IFJlY3J1 5aOw5piO IG1vZGVsb3M= IGJpdHJhdGU= LmNybQ== bHVz IGZpbGVUeXBl 5bCR IG1hcnJvdw== IFZlbmV6dWVsYW4= IHNjYXY= IFNUT0NL IEltcG9zc2libGU= bmF2aWdhdGlvbkJhcg== IHNpZ2h0aW5ncw== IGNlbGxGb3JSb3dBdA== IHJlY3Rz IGFpcmw= IExlc3Rlcg== IG5vZHM= QHJlZ2lzdGVy eENE cG5hbWU= IHBvdHRlcnk= IHp3YXI= IFN1bmRlcmxhbmQ= 4oCmYnV0 L2NvbnRyb2w= IGNhbGN1bHVz KGlzb2xhdGU= cGxhY2Vob2xkZXJz Kilf IH19DQo= IEtvaGFuYQ== Y29kaWxl b3Rlcmlj IHByZXBhaWQ= IGdyYW5kbWE= IHN1bHBo IEdhaW5lcw== XE1vZHVsZQ== IGNvdW5zZWxsaW5n LWdlbmVyaWM= IFR1ZXM= LkdyYWRpZW50 IFRodXJz IGVudHJh IGFkdmFuY2VtZW50cw== U1dFUA== X01BUktFUg== IGtsdWI= IG3DqWc= ZmZmZmZmZg== Il0pewo= L2NvbXBpbGVy YWRpZW5z U3RyaW5nVmFsdWU= IFNjdWxwdA== cGFuZWxz 5b2i 5Lqn5ZOB YXLDrWE= IGRlcmFpbA== IExvY2g= IHBlcHA= bXB6 IOKe S1Y= IERpZXRhcnk= QVJSSUVS IHBvbw== IFJBTkRPTQ== 6LM= IEhvbWV3b3Jr LlZhbGlkYXRpb25FcnJvcg== IE1hcnhpc20= 0YPRgtGM IGNvbWVudGFyaW8= X0JPVEg= IHBybQ== Y2FzdEhpdA== aXBsaW5h IFZvdGVycw== LmFzc2lnbm1lbnQ= bmV0dA== U0FNUExF amlz InRpdGxl LnZhbGlkYXRvcnM= ICI/Ig== dW5pZGFk X2ZpZ3VyZQ== IGFjY3J1 IFJlbWFyaw== Rm91bmRlcg== LmluaXRpYWxpemVBcHA= IFByZXNlbnRz IE1VTFRJ dmVzdGVy LnZpc2l0SW5zbg== IGdldFBhdGg= X2RpZmZlcmVudA== IGxvb3Nlbg== IGFycm9nYW5jZQ== IGp1bmk= IFphaGw= IEdDQk8= IG1vZGVyYXRvcnM= TGluZUNvbG9y IE5vZGVUeXBl X2JlbG93 b3JndA== IEhhcmxlbQ== IE9yd2VsbA== X1VOSVg= LnJlc3RhcnQ= aXRoZQ== IGdlbmll IGNsYWQ= Jzp7Jw== IHNob3djYXNlZA== IGxhcnZhZQ== TWljaGVsbGU= IExI LmdldExvZw== Q29uc3RydWN0ZWQ= IGh2YQ== X3N1YnM= IGRhYg== LmRvY3VtZW50YXRpb24= IG5pZw== IE1hbmRhcmlu 4oCUYXJl LXBpYw== X2Nvcm5lcnM= LkJvdA== XVso X18nOg0K LkVkaXRvckJ1dHRvbg== LXN5bnRheA== U2FuZGVycw== IFRhbmtz ZGVzaXJlZA== c3RhbnRpYXRlVmlld0NvbnRyb2xsZXI= R2Vhcg== IHVzZXJNb2RlbA== CWNvbnRyb2w= RGF0YUJhc2U= IERlYmF0ZQ== aW5lc2lz IHhl Lm1hZ25pdHVkZQ== IHlhbg== IEFwaUV4Y2VwdGlvbg== KHdoaWNo YXRoZXJpbmc= Q29uc2lkZXJpbmc= IEFMUEhB 568= IFJhbmtpbmdz LmxpZmU= 6rCS T0ZGU0VU LnRlbGVncmFt IGZhdmljb24= X3NzaA== IEVER0U= UmVmcw== YW5kYW4= IGFkb2xlc2NlbmNl IFNoYW5r IFN3YW1w X3BlcmM= IGNvbnRyYXJpbw== Lm55 LiIpLA== IHVudGVu X0VOU1VSRQ== L29yZGVycw== KGNm IHVudHJlYXRlZA== YXplbg== KElucHV0U3RyZWFt IGFwcHJvdmFscw== IGdlcm1hbnk= IGF2ZXJl VHJpcGxl LWJhcnM= IHNldFBhZ2U= SmFj IEZpcmVz IERBWVM= 56i/ IHNjcmF0Y2hlZA== IEJFTg== LXdpZmU= IGludGVsbGVjdHVhbHM= IHBvdWNv IHN0YWJpbGl6YXRpb24= IHBlbG9z IFNUT1JZ PGZpZWxkc2V0 IE1haWRlbg== LkNpcmNsZQ== IHNtw6U= Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== L2VuZA== 6Iux KG51bXB5 LnBhbmVsQ29udHJvbA== Y2hyaWZ0 Y29udGluZW50YWw= X3BlbA== RFNM PFwv IE9QUw== IE5vb24= IHVuZGlzY2xvc2Vk IFlpbg== c3Bv CWRlc2NyaWJl dG9ncm91cA== IGRpYXBlcnM= IG1IYW5kbGVy CUNsb3Nl IHJlbmRpdGlvbg== PXsoew== RW50ZXJpbmc= KERJUg== X09MRA== IFN0aW5n IFBhd24= dXNzZXM= IGdldENvZGU= SXRlbUxpc3Q= IGluZGlz ID4iLA== IGNvbmZs IGRvbWluYXRlcw== dGhlc2l6ZWQ= c3RlcmVk IGNhYw== IEdlbnVpbmU= PFBhdGg= IEhvZGc= LWZseQ== LmNpZA== IG9iamVjdElk KCMp Lm1vdmVUb05leHQ= RGlhbG9ndWU= PHBjbA== dGVhckRvd24= Jyl9fQo= 5ri4 TGl2ZXI= TWF0cml4WGQ= IGNyYXBweQ== X0RFQUQ= LnBhcnRpYWw= LkRyb3BEb3duU3R5bGU= ZnVy LkNvbGxhcHNlZA== LXRvd24= SUNJQUw= RGlyZWNjaW9u IHNldFJlc3VsdA== L3Jlc3VsdA== IFNoZWVw eXNjYWxl Y29udGk= IHJlY29ub2M= 6b4= W2Jsb2Nr Y2xheno= IGJlbmVmaXRpbmc= QUFQ LnJlcXVpcmVz LkNvb2tpZQ== IGNhcHRpdml0eQ== LlNlY3Rpb24= XSkpOw== LWNhcmV0 KHZh IHbDpGw= IEhpZ2hsYW5kcw== Tm90YQ== IEZNTA== d2ludGVy IGFnZW5kYXM= X18sX18= ZGVtYW5k IHR1dG9ycw== X1NZTQ== KENI IHVuZXF1aXY= LnRyYW5zaXRpb25z IENhbG9yaWVz IEVjb25vbWlzdA== LlBpbg== IGRlZmxlY3Q= RXhwb3NlZA== IGdlcA== LkxheW91dENvbnRyb2xJdGVt IHJhaw== ZmliZXI= IGFwb3B0 IEVudW1z aXRldXI= IG1vZGlmaWVz IHJlbHVjdGFuY2U= IHNwaWxscw== QXNjZW5kaW5n IHRlbXBlcmF0dXJh LWludGVyZmFjZQ== IGNvd29ya2Vycw== IDpc IFJvdW5kZWRSZWN0YW5nbGVCb3JkZXI= PEtleVZhbHVlUGFpcg== UGFyc2Vk IHdpdGhkcmF3aW5n KGhpc3Q= IHRoZW9yaXN0cw== LW5n IGNoaWZm 66W4 UEFJUg== IEJyZXdlcg== S2E= IEJvd2xpbmc= X3Rs J30pLg== IHByb2Jpbmc= QXJz LnJlYWxt IGVzdGF0ZXM= dmFyeQ== IEtlcw== ICIsIiw= fSwNCg0K UGxhbm5pbmc= IFJlY29u IGNvbmNsdXM= dmF1bHQ= IGluY2VudGl2 IGJpbm5lbg== IFBoaWxsaWVz LkxvYWRlcg== IEZhbGxlbg== X1R3bw== IEJpYXM= Um9sZUlk IFBhcmNlbGFibGU= IERvZGQ= ICQoIiMi 5Lq/5YWD LW1lYW4= KE91dHB1dA== QVRUUklCVVRF IHNlY3JldGl2ZQ== IFBlcmlwaGVyYWw= IEZpbGVk IOW3 X21lZGlhbg== LklD IEFycmF5QnVmZmVy KFRBQkxF IF0KCgo= IGFudGhvbG9neQ== IG9ic2NlbmU= b3BhdXNl IEVTVg== w6F2ZWlz b3NlbWl0ZQ== R3J1cG8= IE1PQ0s= IHVuYXZvaWRhYmxl IGNvdmlk aG93ZXI= Lk5ldmVy U2V0QWN0aXZl e3RleHQ= X3Byb2Jh XENvbmZpZ3VyYXRpb24= IEJyeWNl IGNvZXJjZQ== IFZhbmRlcmJpbHQ= Z2VtZW50cw== bGVnZw== IHJlYnV0 IFZJTg== 5YiG6ZKf IG9ic2Vzc2l2ZQ== L2NtZA== IGtvbW1lbnQ= IExhdWdo 64uI IHNlbHZlcw== b3JyYQ== LnJvb21z IGNvbXBsZXhpdGllcw== CW9wZXJhdG9y QWx0ZXJuYXRl IHNvcnRpZQ== Z2V0TnVt IHJlYWxpemFkbw== RG9pbmc= X0dyaWQ= IHNldFN1cHBvcnRBY3Rpb25CYXI= w6RobHQ= 5ZQ= OnsNCg== SW50ZXJlc3RlZA== IGRpbWluaXNoaW5n IExvb3Q= QWRhcHRlckZhY3Rvcnk= LXJ1bm5lcg== c2F2aW5n KHNlbQ== ZmFk RURVUkU= X2RvY3VtZW50bw== IENhbGVi IGd1aXNl IE1jR3U= KHVuaXRz IGJlemllcg== IHBhdHQ= IHBlbHZpYw== IGNvbm9zYw== YWN0aXZv IE1hbG9uZQ== LlRha2U= KHNxcnQ= c3Rhc2hvcA== LWVuZGVk IE1pZGk= IEJhbmM= IFBlcHNp X01BWQ== IHBsbA== L2luZXQ= LWVuaA== IEl0YWw= bW91cg== IHJlbHVjdGFudGx5 LnJjUGFyYW1z IHBhbHM= LnBrZw== IGZvcm1hcw== bGllw59saWNo LWJvb2tz b21hbHk= IHJlY29tbWFuZA== UExJQ0lU acSN LmNnQ29sb3I= KEJvYXJk 0LXQvdC40Lg= IExFTg== Xy1f IFVubw== IE5PVElGWQ== aGFuYQ== W3Nsb3Q= XGFkbWlu SW5JbnNwZWN0b3I= KWNvbnN0 IGZsYXR0ZXJpbmc= aWdyYW1z Y2Fj IGhlYXJ0ZmVsdA== SW5kdXN0cmlhbA== QWlycG9ydA== WEk= IHZhbGlkYXI= cmVwcmVzZW50YXRpb24= IFJlbnRhbHM= IG9taXNzaW9u IG15dGhpY2Fs IEVudHJhbmNl IHNlcmdlYW50 IHdyaXRlVG8= IE5vcndpY2g= IExpb25lbA== LWJhbA== IFp3ZQ== X3JlbnQ= IHJlbWFy IEJhaGFtYXM= IEJhbGU= OiIiLA== U3RhdGVNYW5hZ2Vy IGLDqW7DqQ== ICEqKio= IGJsb2NrZXJz LnNlbA== KExFRA== IGZzbQ== IHdpcGluZw== IHphbWFu IFJlaQ== YWd1YXk= Li4n IGxvdW5n ZXRjb2Rl IGxhbno= Y2l0YXRpb24= W2A= LWVs YXNib3VyZw== IFNPTEQ= IE9yY2hhcmQ= Q0hhbmRsZQ== IExvZnQ= LmRpdmlkZQ== LVdpdGg= L2Rlc2lnbg== LlNlcnZpY2VNb2RlbA== TWlz IHJhd0RhdGE= IGludGVyYWN0cw== IEVyb3Rpaw== IG9uUG9zdEV4ZWN1dGU= 6Jk= IHZleA== IHN0cmluZ2lmeQ== eW5lcw== X0VtYWls X09N cXVpdGU= X2VmZmVjdHM= QURY IGFkb3JuZWQ= c3Nm ZWRpdGFy IE1hZGFtZQ== IHJlZnV0ZQ== IEx1Y2E= IFdvbHZlcmluZQ== c2V4bw== QW5kcmU= PFJvdXRl IFNjZW5lcw== IHJlb3JkZXI= X214 Y3JlYXRlVGltZQ== IHN5bnQ= LG1vZGVs aWNyb3Vz IE1PVVNF 6rk= Y29tcHJlc3Npb24= IHByaW5jZXM= IHNoYW1lZnVs IHBhdQ== IFRFRA== KGNvZWZmcw== 4K+B L3VtZA== IGNhbnlvbg== L3JlbmRlcg== LnVzZWQ= IEFncmVl IEpld2Vs L2NvbW1hbmQ= QmFyY29kZQ== KGRlYWQ= d2Vic29ja2V0 dW11 R0xPU1M= IGZvcnRu IGJvYXN0ZWQ= ICJcIj4= aXN0dW5n LW1hY2hpbmU= IGluY2lkZW50YWw= IG1N LXJlYWRhYmxl LmZ4 IFBPTElU IHN5bWxpbms= KHVzaW5n eEVE ICIiIi4= LlN0ZG91dA== IOiL IGFsbWFjZW4= CXRyaWdnZXI= LXRpcA== IENPTU1JVA== LmluZ3JlZGllbnRz IG1hbmlmZXN0cw== IE9TUw== IEhhdXQ= L2xvYWRpbmc= LlR5cGVTdHJpbmc= KGNsZWFu IExJQw== IEJhcmJpZQ== T09TRQ== LuKApg== IEludml0YXRpb24= IHJlZGVlbWVk KS4nPC8= IGltZGI= IGJlbGFuZw== IHNjcmFwcGVk LW5pbA== IFByb3Vk 0LDRgdGC LlNJWkU= IHNldFZpc2libGU= IHJhaW5pbmc= IGxlbmdodA== IGFuYWs= X0NNUA== IHBhbm9yYW1pYw== IGdpbQ== c2FpZA== IHByb2dlbg== IEdCUA== 4oCg IGludmVzdGlnYXRlcw== IHByw6hz L25hdmlnYXRpb24= Lm1vdGlvbg== IExpZ2h0d2VpZ2h0 CQkgICAgICAgICAgICA= IG9udG9sb2d5 IE5JSA== KHNpbXA= LnB1bGw= IHByb3Bvc2l0aW9ucw== QFdlYlNlcnZsZXQ= IHJlZGVmaW5l IEVORVJHWQ== 7KC4 T1JJWkFUSU9O IFZlcmbDvGc= fX1dLAo= IHdlZ2Vu 4LmH Jm9hY3V0ZQ== LkJvYXJk IGN1bHBh IEdlbmV0aWNz IH0+ IGFkYW1hbnQ= 44GV44KM CWF1ZGlv 6riA IG51bWVyYWw= IHJlc3RyYWluaW5n LklOVEVSTkFM IE1vbXM= IElQQWRkcmVzcw== aW1lbnRp IGFscGhhYmV0aWNhbA== IEpGSw== IEF0dGVtcHRz ZnJhZ2U= IGRhcm0= IGJhc2VtYW4= PWxvZw== LGVycm9y IERJU0NMQUlNUw== CXRleHR1cmU= LWNvdmVyZWQ= IFBsdW0= IOWVhg== IHDDqXJp KHJldmlldw== IEZvcmNlZA== Rkg= IOy0iA== IGV5ZWJyb3c= X1JFR1M= IGNoZXN0cw== IExhcmdlc3Q= XV06Cg== VVRPUg== IGVucXVpcmllcw== IGNva2U= LWNhdGNoaW5n IEdlb2dyYXBoeQ== YXRlbA== KHByb2Q= b3JXaGVyZQ== TmluZQ== IFBpZWQ= IGFkanVzdHM= KHByb20= X21lbnVz X2V4YW0= IE5vdGlmaWNhdGlvbkNlbnRlcg== CWRz TElL X3R3aXR0ZXI= Q1JD IGV1eA== IFN0YWJsZQ== aXlvcg== IGNhcmJvbmF0ZQ== LnNhbA== TWFwcGVk aWV2aW5n KXk= eW5hbW9kYg== LkNvbXBhcmVUYWc= IHNldmVyZWQ= J2VtYWls IGZvcnNr bGV4cG9ydA== SU1JVEVS IEFwZXg= IGhtYWM= IE9kZHM= b3ZlcnJpZGVz OiI7DQo= IG9waW9pZHM= IG1lc21lcg== IEdBTA== LWxpbmVz IGFwcGx5TWlkZGxld2FyZQ== IHNlcmlh RVNJUw== IG5pbGFp IG1hbGxz IFBhb2xv IExlbnQ= LmJ1aWxkZXJz LyY= IENsaXBz IEp1cmFzc2lj 4pWd LWNvbmQ= 44O844OI fHd4 LmhvdXNl IGhlcmF1cw== IGhr IENvY28= IlwK IGFjY3JlZGl0YXRpb24= IFJhY2g= ZXJ0ZXN0 c2hvcnRjb2Rl IHZhbGlkYXRpb25z VUxTRQ== IGV4Y2VycHRz U2Vla0Jhcg== IGdldExvY2F0aW9u IGZlbmNlZA== KGdz IGx5cw== IGhhcm1z IEhvbW8= 4oCcU2hl IOKAuw== PXNlc3Npb24= X0NPTVBJTEU= TWVhbnM= IHBldGl0aW9uZXI= SU1P Il09Pg== ZGJl X2dwcw== IG1q X2V4cGlyZQ== IERBTg== IHh2 IGZ1bmNpb25lcw== IHNoYWt5 U3VnYXI= IGdldFJlc3VsdA== PFRva2Vu aHR0cENsaWVudA== Lm9uUGF1c2U= c3Rp U25ha2U= TWFwcGluZ3M= IFJlYXBlcg== IGZyZWk= IENvc21vcw== dWVycw== IEhhag== IEJsYXpl b2ppcw== Q3JMZg== LnByb2M= IG90cA== IERyYXdz CVJFRw== KCcnJw== IGdlbmVyYQ== IEF0dGFjaGVk UkVN JTsiPg== dXJuaXNoZWQ= X3Jw IHpvYWxz IGFzc29ydGVk aXRpemVk IGNhbWlubw== IGFiZHVjdGVk LnRvQmU= J10pOg== IE1vb3I= SW5jbHVkaW5n IGdyYXppbmc= c2V0U3RhdHVz YWlyb2Jp X0V4ZWN1dGU= aWZpYW50 ZWxkbw== YXV0b21hdGlj KCQp IGxlYXBz b25lZERhdGVUaW1l KGxheWVycw== LXByb2R1Y2Vk IFdvcmtib29r IGVub3Jtb3VzbHk= IGRlcHJlc3NpdmU= IGFhYQ== RW1iZWRkZWQ= QlVN IGVsbGVz IGJvYXJkZWQ= xZtteQ== IG1hc2lo X2dlbmVz CVRleHR1cmU= aXN0YXI= IEF1Z3VzdGE= IEFwcE1ldGhvZEJlYXQ= IGtvZGU= YWJleg== X3BpZWNlcw== Q3Vycg== IGxpYmVyYWxpc20= RGljaw== QWxl IHF1YWxl fSc7Cg== LmFuc3dlcnM= IEpBTg== IFBVUkU= IGNhbm9l IFNBTUU= UXVhbGlmaWVy IGRibmFtZQ== IElubm9j CVRSQUNF aXZyZQ== IG1lY2g= YXNlbA== Iixb IGFzaWE= IENhbnRlcmJ1cnk= LkRhdGFCaW5kaW5ncw== a2Fo KCkpKSk= IGR6aWV3 cmV0ZQ== IHNjcmVlbmluZ3M= Lk1PVVNF IGJ1c2llc3Q= CXJlbmRlcmVy IHRlc3RpbW9uaWFscw== IGFzcGlyZQ== Zm9ydHVuZQ== IE1TQw== IGRhbXBpbmc= XCIsCg== V2Vs V2lr IOyXrA== KHRpZA== IENhbm5lcw== b2NvcA== PiIrCg== ZmFjZXQ= IHNsYXNoZWQ= IExpYmVyaWE= U21vb3Ro X2NoZQ== TGFib3Vy IGVtaW5lbnQ= Olg= XEJhY2tlbmQ= ICsrKQo= IHRlYW13b3Jr X2FnZw== LlNlcnZl IFNORA== IFBJQ0s= IHdpcGVz L1R5cG9ncmFwaHk= IEFQQQ== aWtraQ== IGNvZGVy Z2FiZW4= IHVua25vdw== LkRlcGFydG1lbnQ= 4Lix4Lia IHBsYXllck5hbWU= KmU= PEJsb2Nr X3VwZA== IEdpYmJz bGVhc2luZw== IENvbG9tYmlhbg== KFBIUA== ICoqKiEK IOydvA== IEN1cnRhaW4= L2F5 2YTZiQ== c3BvcnRz IGRlc2Vh aXLDoQ== IHVuY29uZGl0aW9uYWw= IHRocm9t IENIUklTVA== IEhPUg== b3Njb3BpYw== IHlhxZ8= IG5vc3Rybw== Li4uIik7DQo= IHNsdXI= IGhhdHRlbg== IHBlc3RpY2lkZQ== IGZyZWV3YXk= IENvaA== IHdhbm5vbmNl IG1laWRlbg== X3N1YnN0cg== X0NTUw== IFN5bWJvbHM= 4Li34Lit REVU IE1hZGRlbg== IHJlcXVlc3Rlcg== LnZpcnR1YWw= IHd4RGVmYXVsdA== IGF1dG9tw6F0aWNhbWVudGU= YnJpZHM= aVQ= LlByaW9yaXR5 Jyk7PC8= YnVuZw== RGVhZGxpbmU= Q29uY3JldGU= IG5leHRQYWdl IOuwmw== IFN0b2tl a29w INCx0L7Qu9GM IFByb2R1aw== LW1ha2Vy IFByb2plY3RpbGU= YW5jZWxsYWJsZQ== IFRIRUlS VG9SZW1vdmU= RU1V Y29tbWVyY2lhbA== QVZFRA== IHdlYXZpbmc= IGJpb21l QFNldHRlcg== cW1s IGJyb2FkZW4= INGB0L8= SVNS IGRlYWN0aXZhdGVk IHNlbGVjdGVkSW5kZXg= cmlvdXM= ZWxwcw== LkVzY2FwZQ== IHBvbGxlZA== cXVpYQ== X3JlZmw= X21pbWU= PEF1ZGlvU291cmNl KFRyYW5zZm9ybQ== ZXZlbm9kZA== CXJhbmRvbQ== bG9jcw== IGRldXQ= cmVwbGFjZW1lbnQ= IGV4YW1pbmVy SGFzS2V5 IOumrOyKpO2KuA== IENsb3Ro IOCkqg== IFJlZ2lzdHJv IEVzdGhlcg== IFNoYXJlZE1vZHVsZQ== LmJvcnJvdw== IG9zY2lsbGF0b3I= IGZvb2xz uqs= IGJvYXN0aW5n X3B1bHNl c2hhcmluZw== IHBpc3RvbHM= X1BMQU4= IHNlcHRlbWJlcg== IG11c3Rlcg== IG1hcmNow6k= Q0hFTVk= IHN1aQ== IGdlYnJ1aWs= Lj0n ZXJyYXRlZA== IExpYQ== IGhhdW50 IEN1c2g= cm91dGVQcm92aWRlcg== Inw= ZW5kcGhw Il1dCg== IGF2YQ== 77yBIiw= 7Ke4 IGNvbGE= X1NQRUxM IGFsw6lt KExhbmd1YWdl KGR1bW15 IGJ1bmtlcg== IEVtcHJlc2E= IGNyZWF0ZUNvbnRleHQ= Om1pbg== IEJPT1Q= IE1lcmVkaXRo Wmg= IERvd25pbmc= d2pnbA== LmRj c2RhbGU= IGluY29udmVuaWVudA== IHJlYWRtZQ== TmF2aWdhdGlvblZpZXc= Q09ORElUSU9O LmRlcA== IHLDqXVzcw== IG9wY2nDs24= IEFjY291bnRhYmlsaXR5 Lk1hcg== LWd1aWQ= RURHRQ== RXZlbnRNYW5hZ2Vy IGRpc2NpcGxl dWNrbGVz fX0+ aW50ZXJlc3RlZA== RmlsdGVyV2hlcmU= IHB1c3M= LXByb3h5 X3N0YXR1c2Vz IFsj dW5mb2xk IFJvbm5pZQ== JiYh IGFjZXNzbw== dW9z X3lpZWxk KGNhbGVuZGFy KHNvdW5k IGRhdGFBcnJheQ== IFlhdGVz IHByb2Nlc3Npb24= RUZBVUxU IEdIQw== YW11cmE= IHN0cmljdGVy LkJPVFRPTQ== IGhhYml0dWFs eEFG QVZJTkc= IHNldHVwcw== ID17Cg== Kioo IHNvaw== IHJldGluYQ== IEZpcmVwbGFjZQ== aW52ZXJ0 IEZvcnJlc3Q= PGRhdGE= XEFjdGlvbg== T1VHSA== IGNhcmVsZXNz LmdldEFjdGl2ZQ== ZXNlcw== IHpkasSZ KSkqKA== U0VN IFBhbmlj VG91Y2hlcw== IHByZWNv L2FjY291bnRz 5L6b UG9zdGFsQ29kZXM= LXBsdWdpbnM= PG1lc3NhZ2U= KHBvd2Vy IHBlcmN1c3Npb24= IGPDqWw= 5o6o IGRhbmNlZA== X1NDQU5DT0RF IFNpdHRpbmc= IExva2k= U2hhcmluZw== LkRpcg== IHNjaHdlcg== X0xB Lk1lbnVTdHJpcA== X3plcm9z IGZpeGF0aW9u IEFtaXQ= IGNvbXBsaWVk LnNwYWNlQmV0d2Vlbg== IGFycmVzdGluZw== IFN1Zw== IHBlcmZvcg== IGtvbXBsZQ== IEVzc2VuY2U= IHBsZWlu c2ltdWxhdGlvbg== IGNyZWF0ZWRCeQ== IEV4cGVkaXRpb24= 77yBCgoKCg== dHJhaW5lcg== Il09JA== IHN1Y3Rpb24= bVBpZA== bm90aW4= IHByZWNpb3M= IEFzc3VyYW5jZQ== IExhbA== LiIm IG1pbkxlbmd0aA== IE1pbmVyYWxz dHJhamVjdG9yeQ== U0FGRQ== IG51YW5jZXM= KGV4dHJh X3ZpZGVvcw== W109ew== IGhvbmV5bW9vbg== X3ByZXA= CQkJCQkJCQkJCSA= IHB1cnBvcw== IGFuemVpZ2Vu LnN0cnV0cw== IHBhZ2Fy LkF1dG9TaXplTW9kZQ== IHdlbmlnZXI= IHBhZ2Fu IGFjaWRpYw== Z01hcHM= IGJld2FyZQ== X2lwYw== IG1lZHM= IGRpc2XDsW8= KSkpCgoK Q2h1cmNo IG51cnR1cmluZw== X21waQ== IHJlc3VsdGFudA== IFBpc3RvbA== c1BpZA== TXNw TW9tZW50 IFVQTE9BRA== TmFubw== YmxpY2s= IG1lc3VyZQ== IExheWVycw== X3RyYWo= IGJ1dHRvbldpdGhUeXBl CWNvbW1vbg== IE15Q2xhc3M= 2KjYsQ== eG9vcHM= X0hlaWdodA== X1dBUk5JTkdT U2V0VGV4dA== IEhpc3Bhbmljcw== TnVsbFBvaW50ZXJFeGNlcHRpb24= LmZhY3Rvcg== IHZpZWxsZWljaHQ= IHNob3V0cw== dHJ1c3RlZA== IG5ld1Jvdw== IEZyYW7Dpw== W2pq 4oCUd2hv IFFEaXI= X2FkdmFuY2Vk KEhhdmVPY2N1cnJlZA== IHVucGw= L3Jvcw== LmVhc3k= IEJBTEw= 550= L2xncGw= IHN1YmNvbnNjaW91cw== ICctJzsK ICcpOw== INGW IHNjYW50 X3Nlc3M= X3BsYXlpbmc= X0lTTw== IHNldFNpemU= X2RlY2s= X0xBUkdF IE1leQ== Q2hpY2tlbg== aWZmaW4= ZGlzcG9zZQ== SEVTVA== TGF1Z2g= IExDUw== IG9uc2l0ZQ== LmlzTG9nZ2VkSW4= IGlycml0YXRlZA== IGJyaWdhZGU= IGRlcXVldWU= Y2xhc3NOYW1lcw== IE3DoXM= IEF0YXJp KElPRXhjZXB0aW9u UmFjaGVs LXNhbXBsZQ== IGVpZ2VudGxpY2g= SUZERUY= Lm5laWdoYm9ycw== IHNlcGVyYXRl IExpc3Rpbmdz LmZm KGltcG9ydA== TW9kZWxBdHRyaWJ1dGU= IHNwZW5kZXI= IG1vdGlmcw== c3N1ZQ== IEFwcHJlbnRpY2U= LWNhdA== clBpZA== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K b2N6 aW5pb25z L2NvbnRhaW5lcg== IHBsYWdpYXJpc20= V3JpdGFibGVEYXRhYmFzZQ== Ly4KCg== IEZldmVy LVZlcnNpb24= YWNpamE= IHdlaQ== LWluZw== IHRlbWFz IHN1cmdlZA== IGNyaWE= IGFyZA== Yml0Y29pbg== LnRpbWV6b25l IG9iamVjdE1hcHBlcg== IAogICAgICAgICAgICAK IHlsaW0= IElDVQ== IERlcHJlY2F0ZWQ= KSgpOwo= QVJHRVI= dW5nYWxvdw== VGVzdERhdGE= KHB0cw== RklMRU5BTUU= dXBwbHk= IHBhY2llbnRlcw== LGxlZnQ= IFdyaXRlTGluZQ== IHBhcmNlbHM= X2ZvbGRlcnM= IERpcms= LmFzc2VydElzSW5zdGFuY2U= TWND X1ZhcmlhYmxl KGFh IFBvcms= LlB1Ymxpc2g= LWdheQ== IFBldHJh IENvbm5lY3Rpbmc= VGFiQ29udHJvbA== aXZlcmluZw== KFNjcmVlbg== IGNoaWxsZWQ= IGFpbw== VG91Y2hFdmVudA== IGFjY2Vzc2lvbg== IExvaXM= L21vbWVudA== IGFudsOkbmQ= IHN1aWNpZGVz KGhlbHA= YW5kZXJz IFZJRA== QmVp ZXZlbnRv IEFuZ3Vz VmVycw== IEJvcmRlYXV4 LnN0cmVhbWluZw== IHJvdWdl IGNyYWZ0c21hbnNoaXA= b3NzaWw= X0ZBTEw= QG1lZGlh aWxlYWtz RGF0YVNlcnZpY2U= IFRyaXBBZHZpc29y IE1hYXI= Q3Vyc28= UG9zdGFsQ29kZXNOTA== KCk7Kys= JFBvc3RhbENvZGVzTkw= IG9jb3I= IHRhaW50ZWQ= IGxlbQ== LW91dHM= IHh4eHg= IGlycml0YXRpbmc= b3hpZA== b2ludGVk IFRvcm8= X292 LmJpcnRo KyU= IENoYXJhY3RlcmlzdGljcw== IEJldHRpbmc= IG9mZmVuZA== IFBIWVM= IElDTVA= eERD IENk LmdldE1hcA== YXRjaGV0 LmN1cnJlbnRJbmRleA== RVJBTA== IGthcHBh aWRlbmNlcw== UGFyZW4= IFNlcmdlaQ== LWZpbg== J10sWyc= w6FtYXJh R3Jvd2luZw== R2xhc3M= CW1ldGE= dmVyYmF0aW0= L0dQTA== IEthaA== KHN2Zw== Y2xpc3Q= IEJsb3dqb2I= b2NjYW4= LmFib3J0 b2RlbGlzdA== IGRpZmbDqXJlbnRz X09QVFM= PXJlcQ== IGludG94 IGRpYWdvbg== IFsoIg== JlI= IG9iamVjdGl2ZWx5 IGJsaW5raW5n IExvdmVz cmluZ2U= Kik7Cgo= IEJvbmRz IExvdmVk ZWx0cw== IGRpc3BhcmF0ZQ== IEVucmlxdWU= IldpdGg= cmVtaXVt YWphcmFu dHJ5aW5n LVJ1c3NpYW4= bmV3SW5zdGFuY2U= LlRSQU4= IG9yYW5nZXM= L2xvY2FsZQ== IERJU1A= CW5z IFNodXR0ZXJzdG9jaw== IENMT0NL KHJhZA== IGFzc3VyYW5jZXM= IHJhc3A= VWJlcmdyYXBo RW1pbHk= IGludmVudGlvbnM= cmlvdA== IHRvc3Npbmc= IG1ha2VvdmVy IHVuaXRPZldvcms= YnV0dG9uU2hhcGU= 5Yid5aeL5YyW IHBhcnRlZA== 4paR LnNpZ21vaWQ= IHJlZGlyZWN0aW9u IGRpc3R1cmJhbmNlcw== IGludGltaWRhdGVk CUNyZWF0ZWQ= YWdldA== IGNvcnJlcw== IE5FRw== aXRvbmU= L2Zyb250 IFZlcnNl Z2FtYmFy IHByZW1pZXJlZA== IElNTw== IEdvYmllcm5v IGlmcw== YXlhaA== LkNPTA== IGZyZWRlcg== IHN1Ym1lcmdlZA== IE5lcm8= bW9kaWZpYWJsZQ== L0Zvb3Rlcg== LWNlbnRyYWw= IGdvdXZlcg== IFRyaWVk IGRpenp5 UXVlcnlQYXJhbQ== Ij4nKwo= X3ByaW1pdGl2ZQ== 56iO LmdwdQ== IHZveg== ZW56ZQ== IFdpbGRlcm5lc3M= IHByb2JhYmls L3JlYw== IGFjY2Vz IFRydXN0ZWVz R2I= IHBhZGRpbmdIb3Jpem9udGFs U2hpZWxk IE5hbWVu dWRkbGVk IFByaW9yaXR5UXVldWU= UG9vcg== IFNBRg== LS1bWw== IGNobG9yaW5l IHZlcmJhbGx5 IGFpcmU= PjsNCg== aWxoYQ== W2NvbG9y YW5kYWxvbmU= LmFkZFJvdw== IFNvaw== IENvbm9y IG1lam9yYXI= J2lscw== ZGV0YWxsZQ== ICIpLAo= JUA= Lmxhenk= Lmp1bXA= b3N0ZQ== K0Y= IGluZnVyaQ== IHNvbnJh aXRlbWlk JGxvZw== IG11cmRlcm91cw== TEVD CW5pbA== IE3DpHI= KHBn aWxlbw== QXNjaWk= IExvY2toZWVk IFRoZW8= QmVsbA== YWNpb25hbGVz LmNyZWF0ZU5ldw== IOW+ LWZvb3RiYWxs IGVjb21tZXJjZQ== CVNpbXBsZQ== Y2x5 LklubmVyRXhjZXB0aW9u IHBlc29z IHRyb3Bl IEFSR1M= TWlhbWk= IFBhbG8= IFN1emFubmU= X21hcHBpbmdz I3tA IE9jY3VwYXRpb25hbA== X2J1Y2tldHM= Z29hbHM= X1J1bg== LXByZXBlbmQ= c3Nz bWFyc2hhbGw= IGVxdWl2YWxlbmNl IFdlbGNo KE9wQ29kZXM= CWNsb2Nr IE1lZGluYQ== VEVSUw== b3Jhbmc= VGhvdWdodA== IG9hdHM= X1RFWA== UklDUw== IGluZGlmZmVyZW5jZQ== IGFsbG90 LlVzZVRleHQ= IFRyaWNrcw== YXdl LkZJTEw= LXBocA== LnZvaWNl IFBhdGhmaW5kZXI= X1RBR1M= IFRyaXQ= 5oyJ6ZKu YmJj IGFkZGl0aXZlcw== IHNjaGxl IEtleWJvYXJkSW50ZXJydXB0 IHVzZVBhcmFtcw== IEJ1Y2hhbmFu cmlhbmdsZQ== IG11bHRpcGx5aW5n IHNlbGJlcg== IFllcA== Q2hhaXI= LXJlcG9ydGVk X1NESw== LG5v IEZhbGxpbmc= 5rk= ICgpLAo= cGRi IEJvcm91Z2g= LnJlbW92ZUZyb20= IG92ZXJzaGFkb3c= aWdhaWw= IHR1bmc= IG1tYw== W3BhcmVudA== RXh0ZXJu YXZpb2xldA== JykiCg== IGNvdW50ZXJ0b3Bz IHVidW50dQ== 5rc= IM6T IHVucHVibGlzaGVk IEluZGllcw== VU5FVA== IG9mZXJ0YQ== IGRhbWVz IGFzdGVyb2lkcw== IG5vdmVtYmVy Y29udHJhc3Q= LkFkZE1vZGVsRXJyb3I= K1NhbnM= IHNjcmFtYmxpbmc= dGV4dFZpZXc= L2NyeXB0bw== VXNlUHJvZ3JhbQ== QHVwZGF0ZQ== RGVzZGU= U0FU IGRpc3BsZQ== YW5uw6ll XERlcGVuZGVuY3lJbmplY3Rpb24= IGl0bQ== IOe8 IGV0aG9z QVBP IEdhcmPDrWE= aWRpcw== IFN0ZWFr cmliYQ== X3ZlcmlmaWNhdGlvbg== IEZL IEVpbnNhdHo= IHBlcnNvbmFsaXNlZA== LW1vdGlvbg== IE1lbGFuaWU= w7Zo X1ZD IGRyaWZ0aW5n LmNvbnN0cnVjdA== IO2UhA== IGJhdGNoaW5n Li4vLi4vLi4vLi4v RVJQ X3V0Yw== IG11bHRpdA== IG1yYg== Y2Nhaw== Y2h1bmtz IHRyYW5zbHVjZW50 IHBheW9mZg== 4oCUYW4= IHNpbGw= IG9ybmFtZW50cw== Z3Vh VUJZ KHN0ZXBz IEJPUkRFUg== IFNPVU5E YGAK ZW5hcmllcw== IEJpdHRl IGdseXBocw== IG92ZXJydW4= IGJsb2NrSWR4 IE1TVA== IGdlbm9tZXM= dGVuc29yZmxvdw== RGlyZWN0b3J5TmFtZQ== X2xocw== IGZpbnQ= YWRkdG9ncm91cA== IHN0ZWFkZmFzdA== IGNsb3Zlcw== IFNvdmlldHM= IElTQQ== wqNv dXJnZXJ5 c292 INCy0YvQstC+0LQ= IHB1ZA== LXdhdGNo IEhvc3BpdGFscw== fXdoaWxl IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 4buj IGFrdHVhbA== IGtpbG9ncmFtcw== IEZBQw== b3BoeXM= cHJz KkA= eWI= c2VjdXJlZA== IGFsZ8O6bg== IOCkuQ== cGhhbnM= QWRkb24= IGNlbnRyYWxseQ== X1NVSVRF SW50ZXJlc3Rpbmc= dWx0aW1v QWdhaW5zdA== IEV6cmE= IEhlYg== dWlkYQ== IHNreXM= T0xWRQ== QmVuZWZpdHM= IHByaXNl Lio/KQ== LmlzRGVmaW5lZA== IHN0YW5kb2Zm IHBsYW5v LmxhdGVzdA== ICgkLg== IEdvdWxk IGNhdXRpb25lZA== J10o IG51aXQ= IEhDSQ== Zm9vdGJhbGw= IHdpbGxlbg== UHJvY2VlZA== IGludGVuZGluZw== dGlm IHNwb25zb3Jpbmc= b2hhbmE= RG9z TW9ybmluZw== ICEiKTsK LnNoZWxs IFJFTEFURUQ= IHBpbXA= L2NvdXJzZQ== IHJhbWlmaWNhdGlvbnM= IHBpeG1hcA== IHBvd2VybGVzcw== IGRvdWNoZQ== Y3JpbWU= Y29udHJpYnV0b3Jz KHByb3RvY29s IGdldFBvc2l0aW9u U0VUVElOR1M= IHZpZXQ= aXNzZXM= V2l0aEVtYWlsQW5kUGFzc3dvcmQ= UmV0dXJuVHlwZQ== QXBwZQ== IElLRQ== LkNvb2tpZXM= Lm1lZGl1bQ== LmdldEpTT05BcnJheQ== X0Zvcg== L3Rpbnlvcw== IFRhYmxlQ2VsbA== IFJFUExBQ0U= Lk5ldHdvcmtpbmc= IGJvd2Vk CW1k PSJ7ISE= IGhvbmRh IEV1cg== IGluZG9uZXNpYQ== IGhlbmQ= LnZpZXdtb2RlbA== CWN0cmw= IFRhYmxldHM= LW9yYW5nZQ== ZXJyYXM= X2dyYXBoaWNz e3M= IFRpdGxlcw== IGRpYWdub3Nlcw== b3VwbGU= X0RvdWJsZQ== W3Jlc3VsdA== IGppdHRlcg== X05VTUVSSUM= PmY= X01Z 0LjRgdGC0LXQvA== c3RvcmVJZA== IHJlbGlucXU= ZW9z IHdpZGVuaW5n IHRhY29z LllFUw== XSsn IEluZGV4ZWQ= IHByb2Zlc3Npb25uZWw= IFN0cmFw QnVmZmVyRGF0YQ== ZWVh ZXJpbg== QU5DRVM= X1RYVA== IHt9Lg== KGNvbnRyYWN0 eXc= IGJsaW5kbmVzcw== Q0hBTg== CWdsQ29sb3I= IGN1cnJlbnRQb3NpdGlvbg== IENhdWNhc2lhbg== JGltZw== I2Fh IHNlYW4= TWVzcw== Kj0qPQ== IGNhcGFjaXRvcg== YWxmYQ== LlJlbW92ZUFsbA== IFdQQVJBTQ== dWxhZG8= bmljb3M= IG9yZ3k= R1g= X0RFVklDRVM= b3Vya2U= IGtC IHNvcGhpc3RpY2F0aW9u X2F1ZGl0 L0lQ IEx5ZnQ= L1N0 CWNhbmNlbA== IG92YXJpYW4= bWFyaW5l a8SZ IFlN IE1pbG8= IE1hdFRhYmxl IEFiYnk= bnpl IEx1ZHdpZw== X2FybW9y IHNjYWZmb2xk 4buXaQ== YXV0aG9yaXR5 4bqleQ== LmdldFByb2R1Y3Q= IE9yYml0 X1BhcmFtZXRlcg== LmRhdGVGb3JtYXQ= L3RhZ3M= LlNwZWVk KExpbmU= IHBvbGlzaGluZw== IGtvbWI= IHJ0cmlt J2ljb24= cmllcmU= IFByZWZlcg== c3RydG9sb3dlcg== UmVncw== Q0JE LT4K IHBhcmFzaXRl ZW5kc1dpdGg= IENvYnJh OnRlc3Q= IE51Z2dldHM= xaF0 Q29yZUFwcGxpY2F0aW9u L2JpbmQ= IE1jSW50 aXR1bmVz Wy0t IFN1cnByaXNl X0lORw== IEZhc3Rlcg== 0J3QsA== OkU= IGRpbnQ= bmdl LiInLCciLiQ= IGFkamVjdGl2ZQ== LmJj Y29uc3VtZQ== Qk9S KGFuY2hvcg== IGVzdGVlbQ== IGJyZWFrdXA= ZGVjYXk= ICQKCg== RWR3YXJk QVNJ IGF0dGFjaGVz X0RJU0s= IFdpbG1pbmd0b24= IEt1bA== IFtbXQ== IERlcGFydG1lbnRz IHJldHVyblR5cGU= IFVOSVRFRA== b2JqZWN0aXZl IGdpcmxmcmllbmRz X0dV QHN0b3Jl LU91dA== Lm1vdmVz KHN0YXJ0RGF0ZQ== CUpCdXR0b24= IFBhY2U= IEJlYXRz IGxpY3o= IGV0aGVyZXVt IGNoZWVyZWQ= IGF1Y3Vu UmVnYXJkaW5n IG1pZ3JhdGluZw== IGZ1dGlsZQ== IFRhY29tYQ== X0NoYXJhY3Rlcg== IHZn IENvcGE= 2Ks= IG5hbA== IGxhbmRmaWxs IHRhbWls IHBlcnBldHJhdG9y IFBhY2Vycw== LmdldE9yZGVy fA0K R2V0T2JqZWN0 IGJsYQ== IEhhcmFt cG9ydGxldA== IGxva2Fs TWVyY2hhbnQ= UGFzc3dvcmRz b25lbnQ= IGFydGVyaWVz IEludGVsbGk= XFN5c3RlbQ== PWxvY2FsaG9zdA== LmF2aQ== IFZlbmQ= KHRibA== Q29ycmVjdGlvbg== IHV0ZXJ1cw== IHNhbGl2YQ== Kys7DQoNCg== KCcqJyw= IHNuYXRjaA== IFNUUkVFVA== KVs6 54Sh44GX44E= U2VudGVuY2U= KCkuJy8= OnJlbGF0aXZl leOCkw== X3VzZXJpZA== b2xpbmc= IENsYXNo CXNldHVw KG1p IGppdA== IFNjYW5kaW5hdmlhbg== IFBob25lcw== Iic7Cg== IHR1bXVsdA== IEludGw= IFNpbm4= KG5ld3M= IGRicw== IFJlbWFya3M= S2l0Y2hlbg== IGFkbWlyYWJsZQ== X2Rhc2g= IERPTUFJTg== YWRkTGlzdGVuZXI= Il0uKA== CU1ldGhvZA== bWFya3Q= LGV4cG9ydHM= IG91dG51bWJlcg== X0FTQw== cHJlbWl1bQ== KU5VTEw= IEJvd21hbg== LnNldE9uSXRlbUNsaWNrTGlzdGVuZXI= IFJlZ2V4T3B0aW9ucw== S2Vs L21hdA== 44GT44KM IHdlYXJlcg== aW5pcw== W2RpbQ== IE51dHp1bmc= aXNidXJ5 5Yid IHJvb3RSZWR1Y2Vy ZXlK SW5jbHVkZWQ= LUxlYWd1ZQ== YW5heA== KGluZmxhdGVy IEZpZWxkVHlwZQ== IHNob3Zl IGZ1bGxmaWxl RGF0YU1hbmFnZXI= LmdldExlZnQ= IEZz ZHJvcG91dA== IOuyiA== IG1hbmnDqHJl IGZsYW1pbmc= IGNvbXBsZXRhbWVudGU= 4oCw fC4= RW5lbWllcw== b3NjaQ== IFNBWQ== IG1hcnk= KFJ1bnRpbWVPYmplY3Q= IH4+ IFNpbXBzb25z J10uJA== X21lbWJlcnNoaXA= KSI6 IGxheW91dE1hbmFnZXI= IFJvY2tlZmVsbGVy ICd8Jw== SVBI RE9O YWNodGU= UGVhY2U= aHRhcg== QCIK IHRyZWFkbWlsbA== IHNwdXJyZWQ= IEtW bWlkZA== IGZsb3dlZA== w6Nlc3Rl R2VuZXNpcw== PT0+ IFZlbnR1cmE= X2VsaW0= INC40LzRjw== IHNvbmd3cml0ZXI= Y3JlYXRlRm9ybQ== SUdITA== IG1vbGRlZA== IHJldmVyZWQ= VW5kZXJUZXN0 aW1ibGVkb24= X1Nlc3Npb24= IG1hc2NvdA== IGFsZg== 66mU PldlbGNvbWU= IGtub2Nrcw== IEVxdWF0aW9u LnRvdWNoZXM= X0xhc3Q= IHVwYmVhdA== YmlnaW50 IGVudmlz L2Jhbm5lcg== 44GC44KK44GM IERvd25z X1NG IHJ1bkFwcA== IHF1ZXN0aQ== VHJhZGl0aW9uYWw= X3dhaXRpbmc= cGlja3Vw KCdALw== CXNl IEtlcm4= IERlbGljaW91cw== IHNhdHVybg== IEpTT05FeGNlcHRpb24= 44KN SlI= fSgpKTsK IFNvbWFsaQ== dWFp aW1hZ2Vt YW5kRmlsdGVyV2hlcmU= w6hsZXM= aW5ib3g= IHlhcMSx IG1laXN0ZW4= YF0o U1dH LGNsYXNz 4LWN4LQ= dGFpZW50 IEZyYW7Dp29pcw== QXV0aFRva2Vu IHB1ZXN0bw== IGps IGdhdGVk IERlYXRocw== IFNpZGQ= IHByZXZhaWxlZA== LcOqdHJl KGFsYnVt IHFpbnQ= bWFyY2E= IE5BRlRB IHRpZ2h0ZW5lZA== X0dBUA== RU5TSU9OUw== IExpYmVydGFyaWFu X3N0eWxlc2hlZXQ= LlNldEludA== X3B1Ymxpc2hlcg== cGFnZU51bWJlcg== enNjaGU= IFNRTEFsY2hlbXk= IGhvb2Y= Z2V0VG9rZW4= IG5lYmVu bHVuZA== Lm1pdA== ZXJycw== LnNldE1pbmltdW0= LXByaWNlZA== KHBv ZW5nYWdl X0ZU Ly8KCgo= IHRvbWU= ICI+PC8= VmVjdG9ycw== IFRlc3RVdGlscw== ZmlsdHI= VXN1 IGRpY3Rpb25hcnlXaXRo IG9icmFz IEJEU00= LmdldFRhcmdldA== IGFsbG93YWJsZQ== IEluc2VydHM= CU5vbmU= IGxpYmVyYXRlZA== S2VudA== IFdpc2hsaXN0 IExhZ2Vy IGp1aW4= IG51ZXM= IG1vbmFzdGVyeQ== IG1pY3Jvc2Vjb25kcw== IEhhbm5h 0L7RgdGC0Lg= d2VhcG9ucw== X3Nwb3Q= b2RvbQ== Lk1vZGVsRm9ybQ== IG9yZGVybHk= RklOSVRF IHJlc2lkZW5jZXM= X3RD Q0dDb2xvcg== IMW+ZQ== IHNjcmVlbnBsYXk= IHB5bW9uZ28= IGTDqXQ= IGRlc3Rh IE5ldXJvc2NpZW5jZQ== bmllc3Q= QEdlbmVyYXRlZFZhbHVl RUxTRQ== PGw= IGRpc2pvaW50 LnB1Ymxpc2hlZA== ZWxsYW4= IFN0cmluZ1dyaXRlcg== LkJyb2FkY2FzdA== IEZlaW5zdGVpbg== YW1waGV0YW1pbmU= S2V5U3BlYw== IEdyaW1t ZXR0ZWw= 4Lic T3Q= aWJyYWx0YXI= Y2Vi IHRpbWluZ3M= aW5lZQ== IEFuZHLDqQ== RXNzYXk= Lmpk IEJ1bmRlc2xpZ2E= UmV0dXJuZWQ= IGFwcGFsbGluZw== LkJpZ0ludGVnZXI= IFNFTg== IEhvbWVtYWRl LmNoYXB0ZXI= LXZhbGlk IEFUVFJJQlVURQ== dXN0cmlh IGVudMOjbw== UmV0dXJuaW5n dmVydGlzZXI= LlBhY2thZ2VNYW5hZ2Vy Q2xhcms= IHF1b3Rhcw== IHNjYWxlRmFjdG9y IGNveg== X21pbmk= IG11dGF0ZWQ= LmFjdGl2YXRpb24= Km1hdGg= LnZlcnR4 PGFydGljbGU= IGVtYnJvaWRlcnk= L2J1c2luZXNz Y2tldHQ= c2NpZW50aWZpYw== IEdpbGVz IHJhY2Vy X3BlcmZvcm1hbmNl IGxhbWluYXRl IFBISQ== UsOp IEF0aGU= Y29sZXM= IHNhxJ8= IElua1dlbGw= CXNpZw== IHNwYWNlc2hpcA== IGluc29s IFVDbGFzcw== LmxlYWRpbmdBbmNob3I= dG90YWxz IHNwcmlua2xl IE1vZHVsYXI= ICdcIg== b3Jvbg== LlJlYWRBbGxUZXh0 ICAgIAkNCg== L2lvbg== REVQVEg= X21pbmltdW0= XENhY2hl IGRpdmVyc2lmaWVk aWduZXQ= IGRvam8= IFVJQWxlcnRWaWV3 L3R0eQ== IFNhc3M= IC9cLig= IElNQUdFUw== IGRhdGluZ3NpZGVy IEV4cGxvcw== LmdlbnJl XEV2ZW50cw== IGVudW1lcmF0ZWQ= Y3VycmVudFN0YXRl aXRydXN0 Q2FsbGFibGVXcmFwcGVy Rm91bmRlZA== IHJveWFsdGllcw== KFByb3BlcnRpZXM= IFVTUFM= LS0tLS0tLS0tLS0NCg== LlJlYWRUb0VuZA== IGNvc3k= IGFwZQ== X2RlZmluaXRpb25z IHBhZ2VObw== IGR6aWVjaQ== c3RhbmRlbg== IGJlc2Fy aXRpbg== IGNvbnNlcXVhdA== IHBydg== IHNwbGl0dGVk IGVzcG9zYQ== PWZpbmRWaWV3QnlJZA== V2Fsa2Vy IEhlYXJ0aA== aWJyYXRvcg== b3RvbXk= YWdnYWJsZQ== IOW9kw== 77yBJyk7Cg== aW9uYXRl L3llYXI= IHNldEM= IE1lZGlhVGVr LWJveQ== LnRvb2xTdHJpcE1lbnVJdGVt Q29uZmlncw== YXR0ZW5kZWQ= IGVtb2M= IEJhaQ== b3BvbGl0YW4= IGludHJ1c2l2ZQ== IHp1Zw== IGZmbXBlZw== X2Jvb3N0 IG1vemlsbGE= IHNsaWNpbmc= V0c= cGFnZXNpemU= UHJvcGVydHlEZXNjcmlwdG9y IEFsZWphbmRybw== VVNFUw== SG9zdGluZw== IHJpc2tpbmc= IEludml0ZQ== IEphemVlcmE= IHJlZ2FpbmVk IEhhZ3Vl IGd1ZXJyYQ== IGVuY2xvc2luZw== J10iKQo= PFRyYW5zZm9ybQ== Lk5PUlRI IGNyaW0= SU5V IGNsZW4= IE1vdGhlcnM= IE93bmVyc2hpcA== RHJpbms= IGJlYmVyYXBh Lm9uZXJyb3I= KSsK IHRhYkluZGV4 IERpbw== IEZvcnR5 KExpbms= IHNlZ21lbnRlZA== IGphbWVz IFRhcmdldHM= IFJUUw== INC60L3QvtC/ IHZhcmlhcw== IHTDrXR1bG8= IGTDvHI= L0dhbWU= cmFuc2l0aW9u IGRpc3Rpbmd1aXNoaW5n dWt0dXI= YW5qZQ== IE1jQ2FiZQ== cGFp KHRr RGVzdHJ1Y3Rvcg== R2FtZU9iamVjdFdpdGhUYWc= JGg= IGFmcg== LnNldEVtYWls IHJlcGV0aXRpb25z bGFuZGVycw== IFNoZWE= X2NsYWlt IGFjZXNz QmVuY2htYXJr LkVzdA== LlBP IE7DpA== IGl0Y2hpbmc= IGNvbmRvbWluaXVt X0ZXRA== IHJlYWx0aW1l IGNpdmlsaXplZA== X3BoeXNpY2Fs UmFs IHdpbnRlcnM= IFlhZA== IGZvcmE= IGNhbGlicmF0ZWQ= UGV0cw== IHN0b3JtZWQ= IGplbA== IFNTUA== ZGF0YWdyaWQ= IExhdQ== dW5hcg== dWxmaWxsZWQ= RVJJTkc= IFRyaW8= 2LHZiA== Rm9yZWdyb3VuZENvbG9y PW91dA== LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K IHZpZW50 IEFETQ== X0Nvbm5lY3Rpb24= LWNhbmNlbA== KCcuJyk7Cg== IHNhaWxz IGVxdWl2YWxlbnRz TmI= IGZseWVycw== IEdJUg== a2VsaWc= LXdhbGw= LlJlcXVpcmVz IGNvc2U= IEFOQw== IGphZGU= IEFsZWM= IGVuZHJlZ2lvbg== IEVYVEk= ZWRlcmU= VGVycmFpbg== U3BlY2lmaWNhdGlvbnM= IFN3ZWVw c2V0SXRlbQ== IHNtaXJr IHNjcmlwdGVk W1N5c3RlbQ== 56eB IHN5bmNlZA== IHNxcg== Z2V3YXRlcg== IGpld2Vscw== IGhkYw== 4KWN4KSw z4Y= w7xzc2VsZG9yZg== bGllbg== Qm9yZGVycw== IEF0b21pY0ludGVnZXI= IHBhcmFseXNpcw== Q2xhc3NpZmljYXRpb24= IGdsaWRl IHVtcA== IC8+fQ== IHZlbmRpbmc= 4Li04LiZ bm90aWY= Jl8= IEVtZXJnaW5n YXRpY29u IHByb3BhZ2F0ZWQ= LW9yZGVycw== YWdhcw== dXJnZW50 KFRpbWVTcGFu QUxDSEVNWQ== L2Jvd2Vy 7IKw LmJvb3N0 LmRlcGVuZGVuY2llcw== LlN3aW5nQ29uc3RhbnRz dW50bGV0 LmNoYXJz LWNpZ2FyZXR0ZXM= IE1vZHM= ICAgICAJ IGJyYXZlcnk= IGNvdW50ZXJlZA== cmVsdWRl X21vYg== QUlORUQ= bmdvaW5n IHVuZGVyZ3JhZA== R2V0TWV0aG9k RHVhbA== X2pvdXJuYWw= LE5v IHNpZGVs IExhcnNvbg== KyIsIis= IG5hcnJhdGlvbg== IFN1YndheQ== IExleGVy IE5pbmc= aW5kaWM= dGhhbmU= LlNJRw== LWVhcnRo IGJlcnJ5 IFRldWNob3M= CUVudGl0eQ== ZXJzcGVjdGl2ZQ== Tm9z IE93bmVk QlVS IGxpbmVubw== IEZpamk= R2V0SW50 U3RyaW5nUmVm ICcmJw== dWFkYQ== LmNhcHRpb24= YXBwTmFtZQ== KG9mZg== IHZlcnN0 IHR5cG8= 6ZyA6KaB YXRlcmFuZ2VwaWNrZXI= IHFlbXU= IEdFTw== X0Ns LklU IE51bmVz W1o= IENvbXBsZXRlbHk= LkxpdmU= IEphcw== IHdlaXQ= Y29zaXR5 IHBvbGljZW1lbg== KHRhcmdldHM= aXRsZWRCb3JkZXI= IOinow== LkdsaWRl IGRlbW9uaWM= SW50ZXJpb3I= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IERvdGE= IG9yYml0cw== QU1Z IFRyaW5pZGFk aWN1bQ== Lnph IGdldEludA== QXRsYW50YQ== IGFtbmVzdHk= IFJhaHVs IF98 aGlybw== IFRBS0U= IGp1bWxhaA== IEF1dG9tb2JpbGU= 4buP d2hvc2U= X1NBTVBM UGF0aWVudHM= INGC0LXQutGD0Yk= LnN1YnNjcmlwdGlvbnM= IE1lbnRpb24= VG9Xb3JsZA== aXBh CU1lc3NhZ2VCb3g= PEFwcGxpY2F0aW9uVXNlcg== INil ZmFicmlj a2VsZXRhbA== QmFyQnV0dG9u IGFyY2hldHlwZQ== aW5zdGFudA== IGludGVybmFjaW9uYWw= IFZveWFnZXI= KHRvdWNo IFZhbGs= L01JVA== IGNhdWw= J0Nvbm5vcg== KCIh KE9Q ZmFjdWx0eQ== IEJhdG9u IFZvbHVudGVlcnM= dGFuaw== X0JJTkRJTkc= O2xpbmU= IFZlcnNpb25z WUxFUw== IGplZXA= KEVuY29kaW5n IGdlb2xvZ2ljYWw= TmljaA== KHBkZg== IGFuYWx5emVz IGNhcHRpdmF0aW5n IGhpem8= Lm1kbA== IGphcA== IGZsaXBz CWRm IFBpZXQ= IG5yb3dz IGthbXU= INCy0L7Qtw== IHBydW5pbmc= YWN1bGE= IHRyYXZlbGxlcg== U2hvb3Q= LmVwc2lsb24= IEZsZW1pbmc= aWJ1cg== b3BlcmF0ZQ== aWdodGVy IGJlZ3M= IFdhbG51dA== KFBhcnNlcg== IHdpdGhkcmF3YWxz aXNjb3BhbA== IGJpbGxib2FyZA== a2Vr LW9wZW5pbmc= IER1ZGU= Y29uaQ== eEVC IGNhbG9y YW1haGE= LlRYVA== RHJ5 IG1pc3Npb25hcmllcw== X1ZlcnNpb24= IG11bHRpbGluZQ== 4oCUd2U= IGNvbXBvbmVudERpZFVwZGF0ZQ== RmF2b3JpdGVz aWdoYW0= IGpvdXJuw6ll IGFtdXNlZA== IE9tbmk= dGd0 IHdhaA== ZXRpbmU= IHBoYXNlZA== IG9uU3RvcA== Y3JlYXRpdmVjb21tb25z U29waA== IHVuYm9ybg== PUU= IEZlZEV4 bm9ybWFsbHk= IGx5cg== TWF0cml4TW9kZQ== IHplaWdlbg== QXRo IEt1bQ== w6RobGVu LyI7Cgo= IGRhbGxl IGxhbmNl IFN1aXRhYmxl IGNvdW5zZWxvcnM= 5YWo6YOo IGZhc3Rh IGJsYXppbmc= 7KeE L3R1dG9yaWFs LnRjcA== 5pmv TWFuYWdlckludGVyZmFjZQ== IFNhbWFy CWdsVW5pZm9ybQ== IHByZXJlcXVpc2l0ZXM= IGFudGljaXBhdGluZw== cmFxdW8= a3Nlbg== TWFnbml0dWRl dXRvbWF0aW9u SGllcmFyY2h5 IGRldmlhdGlvbnM= aW1ldA== Q0NJ PSgK IGFudGxy CWluaXRpYWw= IFJlc29ydHM= aG9tZXM= CXBvb2w= IG1hdMOp P29wdGlvbg== Om15c3Fs KHV0Zg== LlRhYkNvbnRyb2w= PlRpdGxl IEFkb3B0 LklzTWF0Y2g= IGVudHJ1c3RlZA== U3VzYW4= c3dpbmc= aW1hZ2VuZXM= IHNlbGVjaW9u IGFpZGluZw== KFtdKg== IHNldEZyYW1l c3Bpcml0 L3Jzcw== SXRhbGlj IFByb3BlbEV4Y2VwdGlvbg== IFRvbGw= LkZpbmRHYW1lT2JqZWN0V2l0aFRhZw== aW5hbnQ= IHNlbGZpZXM= XXxb IGFwcGxpY2F0aW9uQ29udGV4dA== aXhl Y2Ri ZWJi IE92ZXJzZQ== IHNxbENvbW1hbmQ= SG9zdE5hbWU= LWxhdW5jaA== Umlzaw== O3I= LlNwYW4= X0NJVFk= X01B LyIKCg== UGF3bg== IFllbHA= QnVuZGxlT3JOaWw= IG1heW9yw61h U3RhY2tOYXZpZ2F0b3I= ITsK IHRodWdz IEJhcm5ldHQ= 44O744O744O7Cgo= IOqygA== X0NPTlY= IGJ1enppbmc= a2V0ZXJhbmdhbg== TWlsaXRhcnk= d2VlZA== IGRlbGltaXRlZA== 6LWE5rqQ INCw0Lo= X0hFTFBFUg== IFJFQURZ TG9vcGVy KioqKi8K IFRydWNrcw== 5Y67 X3BvZA== T01BVElD LWphdmE= IHVuaWZ5 L0FyZWE= ICcvJyk7Cg== IEdhbWJsaW5n LkhpdA== IEZhcnJlbGw= X2ZpdG5lc3M= cmVjb21tZW5kZWQ= emVuZA== b2RpZQ== X2JlYW0= IHBsYWdl bmRvbg== LmFzc2VydGo= IGdyYXRl TWVhc3VyZWQ= LmNlbnRyYWw= Z2VzdHVyZQ== IEdsb2JhbEtleQ== cHl4 IE5lY2tsYWNl 5Y2O LkFkZENvbHVtbg== IFJ1ZGQ= IFByZXNieXRlcmlhbg== dW5kbGVy IyFb X2xhaGly KCk9PSI= QWNjZXNzaWJpbGl0eQ== LXRyYWluaW5n IFRob3U= X1BJWA== X1RSWQ== PEo= xrDGoW5n bHVjaw== X01BWElNVU0= IHRoYXc= VW5pZmllZA== PkNvbnRhY3Q= LVByZXNpZGVudA== LXBhcnNl IFBpY2tlcg== TWFyY28= dHJz zrQ= LiQu X01FU0g= IHNhZ3Rl Kz0n 0K8= KHBhcmNlbA== aXZvcnM= IGRpdmVydGVk QUdBSU4= IG5lc3M= IHZhbGxleXM= IC4uLig= IEVRVUk= IE91dHM= IERlbW9uc3Ry RGV0YWxsZQ== IOu2gA== UG9pbnRYWVo= LmVwcw== IHN5bm9ueW1z ID09KA== 4oCcWWVz J3V0aWxpc2F0ZXVy TmFtaW5n TEVW cHJvdG9jb2xz IOyb IGdldFVzZXJuYW1l LXZhcg== X210eA== IHNwZWN1bGFy IG5vdGFz SG9yaXpvbnRhbEFsaWdubWVudA== IEJheWVy c3Vz ICAgIAkJCg== IFNoYWNr cmVzaGVy IGltbWF0dXJl YnJhY2h0 SVNDTw== LmNyZWRpdA== IHZpbmVz X0xQ RUVERUQ= IFNjYXJib3JvdWdo w6FudA== KT09Jw== CWRlbHRh X0NPTE9SUw== LkN1c3RvbUJ1dHRvbg== IGFmaXJt IEppbmc= UGFybXM= Y2VudGVycw== LT5fX18= IExETA== LWNvbnRyaWI= IERyZXNkZW4= IFBpeGVscw== ICIiIiIsCg== TEVUVEU= eEJF IEh1c3Q= IEV4ZWN1dGlvbkNvbnRleHQ= IEJ1ZmZldHQ= Y2xhbXA= LkFydGljbGU= IFJhdGg= IFBleXRvbg== IExPV0VS b29rZQ== IHRpZGFs IHVuaGVhcmQ= IFNoYWxs IGJvbWJhcmQ= YW5vdmE= W21hc2s= KGNyZWRlbnRpYWxz IEV1cm9z IGJyYW5jaGluZw== IHN0cm9uZ2hvbGQ= IGNpdmlsaXphdGlvbnM= LWNvbm5lY3Q= IExTVE0= LW1vdmluZw== IHV0ZW4= Y3Jhc3Q= X0RJU1A= IENvbnRyb2xsZXJz dXBl LnBlbg== IGRlc3Nh IGRpZsOtY2ls dWl0YWJsZQ== b2ZpcmU= W2NoaWxk UkVGRVJFTkNFUw== IGRlY2VpdA== IFVyZw== PEVkZ2U= IGRlc2k= IEJPVEg= ICcpJzsK dHlwZU5hbWU= Q29tbWFuZEV2ZW50 d2hlcmVJbg== KG9wdGltaXplcg== IHLDqWFsaXM= IG9taW5vdXM= IEJyYWNrZXQ= IGRhdGVTdHJpbmc= IHNpbmdseQ== KEpGcmFtZQ== 4oCZVA== ZXNsaW50 KGhlcm8= IE1hcmE= IGNhdGNoeQ== LGNhbGxiYWNr IGN0eXBl cHJlc2V0 CWdsZnc= 0LXRiQ== aGs= IHRpdGFu QWNlcHRhcg== 44Gh44Gv X2Fzc2lnbmVk X2VyYXNl IGluZmFuY3k= UmV2aWV3ZXI= IFJlY29yZGVy IHNjbQ== IEJpZ2dlc3Q= IEdvYQ== CVND X0xvY2F0aW9u X29yaQ== a2ls cmVuZGU= IG1hcnpv U3RyaW5nVXRpbA== 0YPRidC10YHRgtCy IEhvd2U= xrDhu51p Zm9pcw== WE1MRWxlbWVudA== IGRlcmVjaG9z IGR1bmc= IFdhaw== IEdhdw== fVxc ISIpOw== IEpvaGFubmVzYnVyZw== IHN1Ym1hcmluZXM= IGFjY29s IGZvc3RlcmluZw== LgoKCgoKCgoKCgoKCg== Lk9wZXJhdG9y IG51b3Zh IHRyYWplY3Rvcmllcw== LnNjaGVkdWxlcnM= IEZvbGxvd2Vycw== IEFuZGVyc2Vu IFBlZ2d5 LmZyZQ== xLFjxLE= IGt2cA== Y29i LWxlbg== IG1haWxz IGFjY3I= IEpBVkE= IGFkbWluaXN0ZXJpbmc= RGVmYXVsdENlbGxTdHlsZQ== IGNsaWNrYWJsZQ== IEphY2tldHM= O2Rpc3BsYXk= IGJyZWFkY3J1bWJz Y2hhbA== Oic7Cg== IEhvdmVy dWNjaGluaQ== IHRlYw== IHN0b3B3YXRjaA== X1JlbGVhc2U= TWF5b3I= 4Z62 IFlhbmtlZQ== Y2huZXI= QXJ0aWZhY3Q= LmJhbm5lcg== IGtm X3N0dWR5 Zm92 IE1lZXRpbmdz w7Zt IGluanVyaW5n L2RvY3VtZW50YXRpb24= QkNN c3R5bA== CXJi IG9yaWdpbmFscw== IGZsZXJl IFRlcnJhcmlh dG9rZW5pemVy LWxpdGVy Jyk7Ig== IHBldGl0cw== IEJidw== IFRoaWVm VUlMVElO Uk9VVA== IHNudWc= Pj4p LW5pbmU= IH1dOwoK IEJlbGxldg== IGVsw6k= IHl5bg== eW5hbW8= Z2xlcw== IHNwZWQ= LkJVVFRPTg== IGRpc3BlcnNpb24= b3VibGVz IG5vdmVsbGVy Il0uIg== IHByaWVzdGhvb2Q= ICIiKQoK CWd1aQ== LWluYw== WG1sTm9kZQ== IHN0dWRz LklzQWN0aXZl IHRyw6Q= IG9yZGFpbmVk IEJ5dGVBcnJheUlucHV0U3RyZWFt IHJlcXVlc3RCb2R5 IFJUUA== UkVTVUxUUw== KGNvbGw= IHJlbG9hZGluZw== Lk5hdmlnYXRvcg== X2NvdW50ZXJz IGJ1ZGRpbmc= IGxpY2Vuc2Vl b2xvZ2k= IHPhuqNu IEtpcw== IEZsYXR0ZW4= X3ByaQ== IGFwcHJvcHJpYXRpb24= 6K+E6K66 X1JTUA== Y29tYmF0 X1BH IGhpc3RvZ3JhbXM= ZHE= RW50ZXJwcmlzZQ== IE5PQUE= IFNwZWVkd2F5 IGJhZ2k= IEJld2VydA== RmxvYXRpbmc= IEtpbWJlcmx5 UHJvc2Vj SmltbXk= IEVsaWFz IGFyYml0cmFyaWx5 IOS9v+eUqA== IENvdW50cw== dXN0ZQ== Rmlyc3RDaGlsZA== IENsZWFucw== LnB1cmNoYXNl IGludGVycG9sYXRlZA== IGJ1aWxkdXA= X1NURU5DSUw= RWd5cHQ= IGF1cmU= LnRydXRo ZmVvZg== IEdpbQ== b2NhY2hl IFV0dGFy X0NPTVBMRVRFRA== U2Vlbg== IE5hcG9saQ== KGRt IGdyaXR0eQ== LmVudGVycHJpc2U= Y29uZXhhbw== IGdhdGhlcnM= IHNldFNlYXJjaA== IENsaWZmb3Jk IFNuYXBl IFNhbHZhdGlvbg== TG9naW5Gb3Jt Q3JpdGljYWxTZWN0aW9u LnVzZXJkZXRhaWxz IHJlcGFpbnQ= 44GC44KK44GM44Go44GG SHVudGVy WmVu VGlueQ== bWxhbmQ= ZXJ0aWw= CWJ1ZmY= X09mZnNldA== IHNtZWxsZWQ= Uml2ZXI= LXRvcGlj IGFjb21w IFJvdXRlU2VydmljZVByb3ZpZGVy IDwr b21icw== IENvb3BlcmF0aXZl IHNldWxl IGFpbWU= c2hvdWxkUmVjZWl2ZQ== SG9uZw== IG9hc2lz IEdlbWluaQ== cmFwaWQ= RHVw KFF0R3Vp b2RvbnQ= LWdudQ== IFNlbGVuaXVt Jyk/Pjwv IE5vcGU= R3JlYXRlclRoYW4= Lk9ic2VydmVy IEFwcHJvcHJp IExvbmVseQ== IGhhaXJjdXQ= IGFsbGVyZGluZ3M= w7NwZXo= esWR IHNsdW1w IEdpbnM= IGdpb3JuaQ== IHBhcGVyYmFjaw== LkZpbGVSZWFkZXI= ZGFm Y3JlZHM= dHlwaW5ncw== ZGVoeWRl Y29pbA== U291dGhlcm4= IG1vdXNlQ2xpY2tlZA== emVpY2huZXQ= dXNlclJlcG9zaXRvcnk= RGVzdHJveWVk aW50ZXJuZXQ= IEVpZA== IGxpbmtlcg== 4oCZQg== IHNsYXVnaHRlcmVk IFBlcnI= CVJ1bnRpbWVPYmplY3Q= c2FpZGE= IHBhZ2VDb3VudA== IFJhbmRvbHBo IEpOSUVudg== X3N1cGVydXNlcg== LWRpcmVjdGVk IElEYg== IEJlcm5hcmRpbm8= IE5pbnRo IEFsZ29yaXRobXM= YmRi QHRlc3RhYmxl LmFybQ== YmVsbGlvbg== KHNpZA== IGJyaWVmZWQ= 4pWX 6YWN572u IFVtYQ== IEluZGljZXM= IEJ1Y2NhbmU= IGF5YW50 RnJlZWRvbQ== IFl1cmk= ZXRzaw== X1Bo IGl0YWxpYQ== Y2xvc2luZw== IHdyaXN0cw== ICp9 c2VjdXRpdmU= RW52aWFy cmFpdGg= IEhhd3Ro 15M= ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= cGFnZVRpdGxl IGRoY3A= IOyLpO2WiQ== d2lzaGxpc3Q= IGJsYW1lcw== IHNpZGw= dWRkZWQ= IGNvbnRyb3ZlcnNpZXM= 6I8= KHVzZXJEYXRh IGxpbnNwYWNl IERpZmZlcmVuY2Vz X2RlcG9zaXQ= REVUQUlM LmRlY2s= IGNvbnRpbnV1bQ== IHNhY3JhbQ== b21pdGU= IG5mbA== Q3Vt IHNvZg== IGV2aWxz IGVudGlkYWQ= CXNvY2s= IExlbW1h LlNoaXA= IHppZw== VGVsZWZvbmU= SURFUw== IE51bWVyb3Vz Lm1ldHJpYw== aW5zbg== IGNvcHlyaWdodHM= IGNvbXBsaWNhdGlvbg== IFVSTFNlc3Npb24= IGRpcHBpbmc= IGNx IEJ1c3R5 cmVsYXRpb25zaGlwcw== IENvcnZldHRl U3VtbW9u ZXZlbnROYW1l SXNzdWVz IGlycmVzaXN0aWJsZQ== IGdyaXM= Q0FTQ0FERQ== IHBhdXNlcw== IGxlZGdl X0dQ LkltcA== IG9yZGVyYnk= IE9yZ2FuaXplcg== IEdyZWVud2ljaA== T2Fr LW1lbWJlcnM= IFdlYkdM IGdhbW0= bW9kdWxlSWQ= IGZ1bGxQYXRo bG9nZW4= KGV2ZW50TmFtZQ== KCIuIik7Cg== IGtyaXN0 IGNsaWZmcw== IFBlcmNlcHRpb24= RVRJTkc= IGzhuqFp IGludGVydg== IG9wcG9ydHVu IEp1ZGdlcw== IENvbWJpbmF0aW9u Y29udGludWVk Y29ubw== LmRyYXdSZWN0 LkNvbXBvc2U= IHNpZ3VpZW50ZXM= IER1ZmZ5 KGVuY29kaW5n IFZ1bGthbg== IEdlcnI= IHBhcmZhaXQ= KHl5 X1RIQU4= IGdldFNlcnZpY2U= X09SRA== LGVw Z3JhcGhpYw== IFF1ZXJpZXM= IHBhcnRpY3VsYXJz IEhhdmFuYQ== PW8= ZmFucw== IHVuaWxhdGVyYWw= IFJGSUQ= Q29tcGF0aWJpbGl0eQ== c3RyYW5k IHdha3R1 IHF1YWxpZGFkZQ== UHJvcGVydHlQYXJhbXM= cmV0ZW4= KGhvc3RuYW1l X0NBUg== IHdpZGVuZWQ= IFhwZXJpYQ== cG9sbG8= QWJvcnQ= ISEpCg== IFdhZw== LS0r INGC0YA= IFJlY3Vyc2l2ZQ== IGFubmU= IEdhbWVwbGF5 PENsaWVudA== LlVzYWdl IElTU1VF IGpkYmM= aXNvcnk= X21hY3Jvcw== cGlja2xl LmdhbWVzZXJ2ZXI= IHR2Yg== 0YLRiw== Lk9QRU4= IHByZWRldGVybWluZWQ= IHNpcmU= CQkJDQoJCQkNCg== aXNjcmltaW5hdGlvbg== IHJlcGVhbGVk IGNvbmplY3Q= IFByZWNvbmRpdGlvbnM= IHRpbHRlZA== IGlub2M= IGV1cm9wZWFu YWJk X0RFTEVURUQ= IC0s 4oCTYW5k QEZYTUw= ICldCg== UklORw== IGFsaXF1YQ== IGdydWVzb21l IEluY2hlcw== UGxheWVk KGNvbmZpcm0= IE5WSUM= X1RvdGFs aXNhcw== IE9uaW9u IHNlY29uZG8= IEdldFVzZXI= XFVybA== X2Fic3RyYWN0 IGRldmV6 IGN1cGJvYXJk dGV4dHM= IElzbGVz X01BVEg= U2tpcHBpbmc= X2Nvc3Rz PW91dHB1dA== aWJpbGk= IGtudWxs X2NvZWZmcw== X2F0dGVtcHQ= CVJ1bg== Z2VuZGVu cnVwdGVk IHNvYXJlZA== X2hz IGFkb3B0cw== X01PRElGSUVE XEZhY3Rvcmllcw== IFN3ZWF0 IGRva3VtZW50 IFRlbGVzY29wZQ== IEZpeGVz b3JxdWU= LkNoYXJ0aW5n X0RBQw== IHNlY3JldGlvbg== IHJoZXRvcmljYWw= UGVyZmls IG3DtmNodGVu LCcs IHZpZXdQYWdlcg== QlVZ IG9uRm9jdXM= b3NhbHM= IGJpc2N1aXRz IHZib3g= IGZvcmNlZnVsbHk= TmludGVuZG8= IHbDoWw= IGNsYW5z ZnJvZw== IGJvcmRlclRvcA== QnJpZWY= LkJvcmRlckZhY3Rvcnk= LXNlcnZpbmc= IHF1b3RhdGlvbnM= IEdhcm5lcg== IEFsbGV5 Ij8+Cg== KHNjYW5uZXI= IGVudGFpbA== IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== KGA8 LmRlc2NyaXBjaW9u X0J5 IOyalA== IHBha2lzdGFu ZWxobw== RW5naW5lZXJpbmc= IGJvb24= IExvb3Nl aWVyZ2U= U2VuYXRl IExZ cmVzcG9uc2VPYmplY3Q= aW9yZQ== w6FnZW5lcw== IOS4jQ== IGFkZEFjdGlvbg== IE1BQ0hJTkU= YW5na2Fu X21p X0FSUg== TGl0ZXI= T0xG IHN1cHBlcg== IHBhdGhNYXRjaA== IE9ycg== w61k KGZpbHRlcmVk IGF1dGhUb2tlbg== IOKEnQ== LTwv KHRlbnNvcg== IHJldm9sdmluZw== IGluaWNpYXI= IFNjaHdhcno= ZGVmZ3JvdXA= Y29sdW1uTmFtZQ== X3RyYWplY3Rvcnk= 4LmE4Lih ZWdhc3Vz IOydtOumhA== IGVhdGVy IHVuZGVyZXN0aW1hdGVk IGJ0Yw== IOyEoO2DnQ== ZW5hZGU= IFNFWFA= ZW1vdXRo T01FVFJZ ZW50ZXJlZA== LnBob25lTnVtYmVy IFZvYw== IGV4Y2Vzc2l2ZWx5 IENBVEVHT1JZ X1VQREFURUQ= IG1vbmFyY2h5 YXJjaHM= IGNhdmVhdA== d2lucw== IHBsYXlib29r c2hhZGU= IHNldFVzZXJuYW1l IGFjY3VzZXM= IG1vxbxsaQ== IGxvcnNxdWU= IGFqdWQ= aGVhcg== IHBzeWNvcGc= KEVD IG1lbGFuY2g= dGhyb2F0 bmlo V09PRA== IHZvbHRz X05FRUQ= X3doaWxl IFJpZGVycw== 16I= IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= TmV0TWVzc2FnZQ== TW9kaWZpY2Fy LnNlc3M= KCIiKSw= 6Kmx IHByYWlzZXM= IGxjbQ== IG1ha2VzaGlmdA== IE5PVEhJTkc= IEFydGlmYWN0 d2lq dHlwaWNhbGx5 KCde PGs= xJlraQ== INC+0YLQv9GA0LDQsg== IOE= IGRlZlN0eWxlQXR0cg== aW5jZXJlbHk= w6lzdA== SW5UaGU= c3RpbWU= IGZyYWdtZW50ZWQ= IGZyeWluZw== Z3JpbQ== ZmllbGRuYW1l IGNyb3NzaW5ncw== IGFtbw== X09wdGlvbnM= IGhhaXJlZA== L3dhaXQ= IHBhcmNobWVudA== IGNyZWF0ZUVsZW1lbnQ= SHR0cFN0YXR1cw== IGVya2zDpA== aXp6YXppb25l dGh1bWJuYWlscw== bG92YWs= IGJhbmdpbmc= IHVuaW1hZ2lu IE92ZW4= KEF1ZGlv YXBzdWxhdGlvbg== IHJhbXBz 55Wq IFdvb2R3YXJk 6Zeu6aKY cm9ncmFt 0YDRg9C/0L8= IFdvcnNoaXA= IHN0YWQ= IG5lZg== IEphdW5l YnV6eg== YWx1cw== T05ET04= LXN1 IG91dHBhdGllbnQ= amFj RVNQTg== w6ZsbGFuZA== bXlw IHNob3dyb29t TW9udHNlcnJhdA== LmdldERyYXdhYmxl w6l0aWNv IHbDoG8= SUJD RXhwZXJ0cw== TWJwcw== Ij4j IG5vcnRoZWFzdGVybg== IE1lag== KG1pbGxpc2Vjb25kcw== 4oCUYWxs LXJlYWNoaW5n CXJlcGx5 P3R5cGU= IGNydXo= ID48Pw== LkZpbmRBc3luYw== KGNpcmNsZQ== IFNoaW5l IE1hdmVyaWNrcw== IHNhZmV6b25l IExhemFy IGRpc3RpbmN0aW9ucw== LWZlZWQ= LnNldENvZGU= 4KSq IHTDqWM= IHNlcmFpdA== IE1JQ1JP IENvbnN1bXB0aW9u Xm4= LmZyb21GdW5jdGlvbg== IFJ1cGVydA== IGhhcmFzc2luZw== LUNv IHRpaw== IFN2ZW5z LkltYWdlQWxpZ24= X3doaXRlc3BhY2U= IGtpY2tlcg== IGNhZGFzdHI= Q2V0dGU= X25vdGlmaWVy IEZBRw== IHByaW1hbA== IGhvbW9nZW5lb3Vz IGFzdHJvbm9taWNhbA== IEJ1cnI= LkNvcHlUbw== Z3JhcGhz aXR0bw== T1NI IHNob3dBbGVydA== YW50cm8= ImRlZmF1bHQ= ZW1waGFzaXM= V2Vp b3V0Y29tZQ== IGFrdQ== IGNhbXBhaWduZWQ= KSI7Cgo= IHJlY2lwcm9jYWw= IFJveWFsZQ== ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= LlRJTUU= IDwq T2Zmc2V0VGFibGU= Y29tcG91bmQ= d2FpdEZvcg== dWVnb3M= LnN0cmluZ1ZhbHVl X1NDSEVE IGZhdHQ= wqDCoMKgwqDCoMKgwqA= LmRpc2s= IHdhcnBlZA== IGNyaXRpcXVlcw== PycKCg== KHNraWxs IG1vZGVyYXRlZA== X2VsZW1z S2V5TGlzdGVuZXI= IHNlYXNvbmluZw== IHBvdXJxdW9p X0ZE cHJk aHlh Ij7Dlzwv IG5vdXZlYXV4 IGdpdmVhd2F5cw== 5oql6YGT TWFpbk1lbnU= Oy8q IEdyb24= cXVpdm9z Ow0KDQoNCg0K IGluZmx1ZW5jZXJz KFRJTQ== U2hhcmVkUHRy IGRpYWxvZ3M= KioqKiovCg== LkF0b21pYw== IE1vcnNl IHBjYg== IEFQQw== LkltbXV0YWJsZQ== IHJlc2l6aW5n IEx1bXB1cg== IEh1bWFuaXRpZXM= X3NvbHZl X2h1bWFu ZXR5bA== IEh1cnQ= IEVzdGFibGlzaGVk Y2xhcmVk IGNvbXBhcnRtZW50cw== QmVhbQ== X1JN LmZhbHNl KEdyaWQ= IFFTaXpl X2ZsZw== aXN0aWNh PkxvZ2lu OlVJQnV0dG9uVHlwZQ== IEV4aXRpbmc= Y2xhcw== IGFyc2Vu KG1ldHJpYw== cm93c2luZw== cXVlcnlTZWxlY3Rvcg== X0ZSSUVORA== LWlv IGNvbmZpc2NhdGVk IGRlZmlhbnQ= IE1PVE9S cmVndW50YQ== IE1vcnJvdw== IEJlcnM= Q3JhaWc= IENQQQ== IHNleGtvbnRha3Rl IHNhbW1lbg== L0F1dGg= LkxpYg== Y3JhcGVy aWNlbWFpbA== Y3JhdGNo IFdpcmVk IGFkdmVydGlzZXI= IGdldENsaWVudA== IHJlc3BvbnNpYmx5 CVVPYmplY3Q= LnNldFJvdGF0aW9u LkNvdW50ZXI= X0hPVVI= VGVzdENhdGVnb3J5 IGhpbmRzaWdodA== XGNvbnRyb2xsZXJz d2FsbHM= LnNldE1heGltdW0= IHB1YmVydHk= X3RlYW1z X01PREFM LkNP IGJhZGFzcw== KSddLAo= w7pzcXVlZGE= aXJ1dA== Q2hlbHNlYQ== LnRyYW5zZm9ybXM= IGNhcGl0YWxpc3Rz TWFyY2E= IEFyeQ== LWNvZGVk 546v VVJFRA== PFRyYW5zYWN0aW9u IFBhcmxpYW1lbnRhcnk= KSRf IHN1YnRseQ== IHNpbGt5 IERpcnQ= IHB1enpsZWQ= fScpOwo= cXVlc3Rz Rm9vdGJhbGw= IENvbmZpZGVuY2U= dXp1 YnVsYW4= IGh1bW1pbmc= bW91c2VlbnRlcg== UmV0ZW50aW9u IHNkbA== b2tlZGV4 JywnPScsJA== IEt1YWxh U0FN IHRyYW5zZm9ybWF0aXZl UEtH aWxsdXM= IHJvb3Rpbmc= IFdpdG5lc3Nlcw== IFJhamFzdGhhbg== 5byg LWFkZGVk IFRlcnJpdG9yaWVz KHNxdWFyZQ== cmFiYml0 X1Jlc291cmNl 6ZaL 4LiT IHdpbm5pbmdz IHNwbGU= IGTDqHM= IE1EQg== w6lydA== IE1hdHRpcw== YWlsbGVz X3dlYWs= L2phdg== IGNvbGxhcHNlcw== ICAgICAgCQk= IHN3aXJs IE5TU3RyaW5nRnJvbUNsYXNz IHZvbHZlcg== LlJlY2VpdmU= IERleHRlcg== IHRhYmxlbmFtZQ== cmVhdGl2ZQ== LkdldEZpbGVz dm9vcg== IEhvZQ== VkVSTg== IE9QQw== 7YOc cmFtaWRz 54Sh44GX44GV44KT U3Bpcml0 IE5PUA== IE1haW50YWlu KHNpZ21h b3Ry TW91c2VDbGlja2Vk cXVpZXJkYQ== X3dm 0L7QutCw0Lc= YXBwYWJsZQ== IEhvbGRlbg== IENvdW50ZG93bg== LnNpZ21h Y2hhbGs= YmlsZGVy IHZpc2lvbmFyeQ== CU9u JHVwZGF0ZQ== IEdpbmdyaWNo cm9vbUlk Pk5hbWE= IHl5dHlwZQ== LkRlY2ltYWxGaWVsZA== bWFjcm9z LnNldExheW91dFBhcmFtcw== IHJubg== IElNRGI= 56eN ZW1hbGVz IGluY2lkaWR1bnQ= UmVzdHJpY3RlZA== IHBlZGFscw== IEpvZw== IEFkYXB0aXZl IGZhZGVz LkV2ZW50U3lzdGVtcw== IFBhaWdl IHNlaXM= IGFwcHJvcHJpYXRlZA== RkZU Z29yaXQ= IGNvaGVzaXZl IE5pY2h0 X3dvcmtmbG93 bGl1cw== IEZvcnRuaXRl X0lX QXRQYXRo IGludG94aWNhdGVk bm9zdGlj QmluQ29udGVudA== LnJlZHVjZXI= KT8K J10q IE9ic2VydmF0aW9u X3ByZWZz LnJlc29sdXRpb24= LlBheWxvYWQ= TWl4ZWQ= IFJhaQ== KHBkZXY= KEAo aWNvdA== JGlz IGNyZWU= Pz0uKg== LlFMYWJlbA== IEdlb3JnaWFu eENB IGRlZmljaWVudA== dGhyb3du IHJhcGluZw== dXBvcw== CWNsaQ== Z2V0Vmlldw== SGlnaGxpZ2h0ZWQ= Q3BwR3VpZA== IHJlbGVnYXRlZA== IGxlYWRlcmJvYXJk UmVjZWl2ZVByb3Bz Lmhhcg== IGNvbmRp SU1JVElWRQ== IE1jQ2FydA== KXRocm93cw== YnVpZQ== YnVhaA== LmNvZWZm IEF1c3NpZQ== IFNhYmhh KGZhYnM= cmVsYW5k IEbDtnI= YmFyYW5n LHRvcA== CWVsc2lm U3RlcFRocm91Z2g= IHNrZXdlZA== IFVudXNlZA== Jyl9Pgo= WWU= Y2FsbGVl SGliZXJuYXRl IEV2ZXJlc3Q= aW1wb3J0RGVmYXVsdA== IHRhcm4= IE5vd2FkYXlz WUE= IENoYWxsZW5nZXI= X2xvZ2ljYWw= IGNyZWF0ZURhdGU= IEdsb3VjZQ== IGN1YW50bw== IEhBUg== IENoaWxs Il4= IGN1cnNvcw== LkVPRg== IG5pamU= IGFuZ2VyZWQ= b2N1c2luZw== PENvbnRhY3Q= IEF0bW9zcGhlcmlj IFdvbGZnYW5n IEJK Y2hpbGRz IEJ1Z3M= X0hFWA== KFNQ w6Vs X2V2YWx1YXRpb24= IFJBTkdF IFNPUA== X3Rva2VuaXpl bXNnaWQ= IHJleA== CXBt Q29weWluZw== Kkw= RGFsbGFz LVN0YXRl dWxmaWxs IGJ5xYJv IENvbnRyYWN0b3I= RGlkbg== QVNURQ== IFBJTw== LlRlbGU= LndhdGVy ZGV6 IGFuZ3JpbHk= IHV0aWxpc2F0ZXVy IHZvcnRleA== Q29ycG9yYXRl YXR1cmFz IHByaXplZA== J3VybA== dWdsaWZ5 IGltcHVsc2Vz IGNocm9ub2xvZ2ljYWw= cGxlbg== X25hbWE= L29u IE9mZmljZXM= IENQSQ== IEFmdGVyd2FyZHM= 44GT44KT44Gr X0JMT0NLUw== R3JhY2U= LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IEthYnVs IOaIkA== IExlaXB6aWc= 4Kao U2hvY2s= QXVz IG11cm0= X3N0YXJ0cw== IGLDpA== IFp5 IkY= LXJpZ2h0cw== IGJlaGF2aW5n KCc+ IG1vc3F1ZXM= KndpZHRo Ii8+Ljwv LnVuc3BsYXNo LmdldEFjdGl2aXR5 VVU= IFNoYWs= X3Jn X0VxdWFscw== J2h0dHBz IE94eWdlbg== IFBvcnRzbW91dGg= 4oCUb25l IHdhdGNoZXJz IENob2k= IHNpZGVy cGVjdHJhbA== bXF0dA== LmNyZWF0ZVVzZXI= amVjdGl2ZXM= dXJtYQ== UmVnaXN0cg== UGVyc29uYWxseQ== PWtleQ== IE5FTw== IEZBUXM= aWJpbGlkYWRl Y2tzw6U= IENvbGxhYm9yYXRpb24= CWxibA== LlNFUlZFUg== IGFib3VuZA== IEJlbmU= d2FudGVk LWhvbGU= IG11dHRlcmVk IHBlcA== bmVzYw== LlVwbG9hZA== c2VtaQ== eEVD Jz4iKw== IGVtYnJ5bw== IEZpeGVkVXBkYXRl Q2FzdGxl Lm1vZGVsbw== IHBscw== IGVudmVsb3Blcw== X3JlbWFpbg== UXVhcnRlcg== YWxlcnRWaWV3 X2Zvcm1hdHRlZA== IGxhc2hlcw== emVsZg== aG9tbWU= LmZsb3dMYXlvdXRQYW5lbA== YWlycG9ydA== IE1lbW9yaWVz IEhFUk8= IEFzaHRvbg== IGV4aGliaXRpbmc= KFNFTEVDVA== U3VibWlzc2lvbg== U3R1ZmY= X3N1bg== IHBlcsOtb2Rv IGRlc3ByZQ== CWVkaXQ= IER0eXBl Y2Vzc2l2ZQ== YWFk IGRlc2Nvbg== bmVsbHk= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IHNjcmlwdHVyZXM= IG9uVmlld0NyZWF0ZWQ= IEVWRQ== IEJhbGxldA== O307Cg== VURP IFByb2JhYmlsaXR5 cXVpcnJlbA== Q29udGFpbmluZw== IFBsYXQ= 6KI= L2JpdA== IEpRdWVyeQ== IHRpZW5lcg== L2RyaXZlcnM= IFByZXNpZGVuY3k= XHVE IEl2ZQ== aWVuYQ== IGh5cGVycw== IFNwZW5kaW5n PFc= IFRIRU1F IHVzZXJQcm9maWxl IGFubnVt cmV0d2VldGVk IFwnJw== YnVuZGxlcw== KCk8Lw== IEN5bGluZGVy IG91dGxpZXJz IGRpc3NlbWluYXRpb24= L2FwdA== IE5hdGFzaGE= IHJlbmRlckl0ZW0= IENoaXBz IHJvdW5kdXA= IGltcHJvdg== IGNvbW11bmljYXRvcg== IHNreXBl TU1N cmlqaw== LlBsYWNl IHBhc2E= IFNZTkM= ZW5zaXM= IEF4ZWw= ZW7Dp2E= Z2V0U3RyaW5nRXh0cmE= YWJpbGl0w6k= IGVtYWNz LmdyYXZpdHk= IGNoZXJpc2g= IElTU04= CUpzb24= dXlv IHVwdGltZQ== IHJhbmRvbW5lc3M= IGxvZnR5 Qm93 Q3JlYXI= IHRvd2VyaW5n Y2F0ZWdvcmll L3Bvd2Vy L3dlbGNvbWU= fFI= IGJhcnJpbmc= aWRpYQ== cXVhbQ== w7pkbw== ZXhwZXJpbWVudGFs IGNsYQ== IGN1cmF0b3I= cmVhbWJsZQ== aW5keA== TExM IH0pOg== IGhpc3RvaXJl c2ltdWxhdGU= PEFueQ== IEdsYW0= IEJhcmc= VmFsdWVDb2xsZWN0aW9u IEluc3RpdHV0bw== QXNTdHJpbmdBc3luYw== IGFkZWM= IGZlbGxvd3M= cGlwZXM= IFBsYWNlaG9sZGVy IEtn IEFsYnVtcw== ICooKg== X0dPT0Q= KSIsDQo= LlFSZWN0 w6Jt IH0NDQo= TWFyc2hhbEFz QmFjaGVsb3I= IEJhcmNvZGU= IFRyYXZlcnNl IG9kaW8= LnNldFBhcmVudA== IHNlbWljb25kdWN0b3I= QUxMRUw= IGJhbnF1ZXQ= IE5ld3NwYXBlcg== RE9NTm9kZQ== IE5hdWdodHk= Rm9ybWF0dGVkTWVzc2FnZQ== IGRpc3J1cHRpbmc= 5piT IGxvb2thaGVhZA== IGdyYXR1aXRlcw== IGNoZWVzeQ== IFNQRg== blA= IGFyc29u IGFudGVubmFz X01JRERMRQ== X01BTExPQw== LmdvQmFjaw== IFByb3Bvc2l0aW9u IE1pY2hhZWxz X3Byb29m INC90LDQudC0 w6R0emxpY2g= LXJvbGw= RURB w6Fuw60= Z292ZXJubWVudA== w7Z0dA== IEVzdGFibGlzaG1lbnQ= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= X0hJVA== IEFJTQ== YWRvbA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== X1JFRkVSRVI= IGZvcm1hdERhdGU= dWN0b3Nl IGRvd25sb2FkZXI= VGV4dEVkaXQ= IGRpc2FybQ== IEhBUFA= 0L7QtNCw ISkuCgo= L3Byb2Nlc3M= IGJyYWluc3Rvcm0= IE9SSUdJTkFM LlRhYmxlTmFtZQ== IEtvc3Rlbmxvc2U= IGTDqXA= IElzYWJlbA== IGFzdHJvbm9tZXJz UVVJUkVT OiIt dXBsb2FkZXI= Oi8vJQ== IGFtaXM= RmlsZVZlcnNpb24= ICwk Y29vaw== LFNJR05BTA== JywvLw== IFN1cHByZXNz IExhdGlub3M= IHdpdGhob2xk IG1uZW1vbmlj X0NZQ0xF IGhvZA== IFdvcnNl ZXJkZQ== IHR5cGVpZA== CWV4cG9ydHM= IGFjaHRlcg== b3Nhcw== IGZvb3Rub3Rl aGFuaQ== KFBhcmFtZXRlcg== CVJlbmRlcg== IFlZU1RBQ0s= IFhJSQ== IHNpZGVu IGFyb3VzYWw= IE9P Qml0dGU= IG5lYXJlcg== IENpcmN1cw== IENPTE9SUw== IHdpZWxkaW5n LkZpbGVTeXN0ZW0= IGdyaWxsZQ== IERvdmVy CiAgICAgCg== KGdlb21ldHJ5 IHN0YXBsZXM= IEFubm91bmNlbWVudA== IOuyhA== IGZvcnR1bmF0ZWx5 LlNvbWU= IG1hbmdhbmVzZQ== IGludGVydmlld2Vy WVJP IGNyeXB0b2dyYXBoeQ== IGNoYW1icmU= LnJldHJ5 IGltaXRhdGlvbg== JGZkYXRh IGxvdGlvbg== KGlkZW50aXR5 LnBn IHByZXN1bXB0aW9u X1NVUEVS dm9jYWI= IFNlbWVzdGVy IEFiZWw= X2FwcHJvdmVk LmNvbXBhdA== IHdhcnRpbWU= XV07Cgo= bHV0 X0FjY291bnQ= Pygn Y29vcA== L3JlZw== LnNldFRv aXRlc3Nl IEh5ZHJh Qmlucw== Y2FkZW5h Pi8nLA== Llwi CWFjY291bnQ= IERhaGw= IGRyb3du IGdhdXNz IHRyYW5zZm9ybWVycw== IE1ldGFsbGlj IEhlcmJhbA== YWNocw== X2J1dA== IGl0ZXJhdGl2ZQ== IEZyZWVk anVy fE0= O2JyZWFr X0ZG KGRvd25sb2Fk 4buDbg== LmNoZWNrU2VsZlBlcm1pc3Npb24= TkVUV09SSw== OmZsZXg= IENUTA== IEFyYg== IFByb2R1Y2U= CXN5bmNocm9uaXplZA== 4oCcT2g= LmRhdGF0YWJsZXM= IGNvbmVz RMOp 0YbQsA== QWxn IGZ1bmNpb25h IFViaXNvZnQ= IGdlb3BvbGl0aWNhbA== IHNpZWh0 IGh5ZHJhdGlvbg== c3Rocm91Z2g= IER1ZGxleQ== YXrEgw== IHRheGluZw== INC30LDQutCw0Lc= X0FTTQ== TmV1dHJhbA== dHJhZGl0aW9uYWw= UGxheWFibGU= IHNwYWdoZXR0aQ== IGlDbG91ZA== IERheXRvbmE= IHdlcmRl IEFOVA== IFByb24= IFN0YXRpb25z IGF0dGVzdA== IGZ1bGxlcg== IG5vdmFtZW50ZQ== XVxc Y2Nl KGRlY2s= L2F5dXNobWFu aWdzYXc= IGFkdWx0ZXM= IHRlcnJl Lk9yZGVycw== CXByb3BlcnRpZXM= RElH IFRJTUVT ImluZGljZXM= ITw= TW9uYWQ= IG5vbmV4aXN0ZW50 IEF0bGFudGlz IGdyaWV2YW5jZXM= dXJlbmNl IElQUFJPVE8= 4pmA4pmA4pmA4pmA IGVtcGxlYWRv INmD Lk1vdmVOZXh0 IElzbw== YmVhdXRpZnVs IHNvbHVibGU= IHNsdWdnaXNo IGRpZmZz X09CUw== eG1pbg== IHR1bWJsZQ== IFVuYXJ5 IHppcGZpbGU= IHN2ZW5za2E= ZXJsYW5k L2N1cGVydGlubw== CXNjcmlwdA== aXNjaGVz TW9kaWZpZWREYXRl IHZleWE= IGRldGVybWluYW50 IEdvcmdlb3Vz Z2Jvb2xlYW4= IExPRA== ZGNj c2NlbmVz IFRTUk1MUw== KFR5cGVFcnJvcg== IGNhbW91ZmxhZ2U= IGJ1cmdl VGhlbQ== LkFzc2lnbg== IGxhc3RJbmRleA== X3NwaGVyZQ== X0FCSQ== w4Q= aWxhZ2U= XHhmZg== IGtheWFr IGZpeno= dWl0ZW4= LlNob3VsZEJl IGh0b25s IFBldGl0ZQ== IGhlYWxz IE9zYWth Tko= SW5QYXJhbWV0ZXI= IEJpcmNo IGNvbW1lbnRhaXJl IFNpZWdl IGtleWNvZGU= LWludGVuc2l2ZQ== cHJvcFR5cGVz RXhwb3J0cw== IGJ1dHRvblRleHQ= IEdvZHppbGxh LkV4Y2hhbmdl IHVuZGVyc3RhbmRhYmx5 IGFjY29yZGlvbg== IHLDqWdpb24= IG1hcmtlZGx5 YW5vb2dh IGNvbnRyYXQ= X2xpZnQ= W2RhdGU= IHNjb3Ju IERhdGFNYW5hZ2Vy 4oCm4oCmCgo= X0NPTVBJTEVS IENsYXc= b2RhdGU= IHVuZGVyYWdl IEltcGxlbWVudGVk Q2xp S2Fs UHJvZHVjdG9z IGVuZmVybWVk w6lpcw== IGRpc2NyZWRpdA== IFNhbW9h IFByZXNlbnRlZA== IGNpbmVtYXQ= XEFjdGl2ZUZvcm0= IGZlcm4= IFByaW1lcg== 5oKo Z2VyZQ== IGlsbHVzaW9ucw== bm90YXRlZA== IHBvag== IG1vZGVsTmFtZQ== IFBNQw== IGRlY2Fk IGZvcmVzdHJ5 dm9pZQ== Li4uCgoKCgoK IH19Owo= IHRva2VuSWQ= YW1tdQ== IFBlcnNvbmVu IFZFUkJPU0U= IHBhdHJvbHM= IGFudGlj X2RlZXA= ZWdlbmQ= IFNldFByb3BlcnR5 IEdhcmV0aA== IE1BUw== LnJlc3RhdXJhbnQ= IEhlYXZlbmx5 aWVkbw== X2xlYWQ= IEZ1amk= UU4= TWFzc2FnZQ== IHBhcmFtTWFw IGNpdGE= X1NwZWVk KGJib3g= IEpVTA== 4oCZYW4= IG1lbnRl IFNob3djYXNl IENTSQ== PlR5cGU= LlNu b3R5cGljYWw= IEZhbGxvbg== LlVUQw== IHByZWRhdG9yeQ== IG9yZ2FuaXNpbmc= Y29sZA== IHBhcnNlcnM= dWllbg== IGNvbXBpbGVycw== IFs9 IEV1cmFz TU9TVA== CiAgICAKCg== UkFS LlNjaGVkdWxl Lm9wZXJhdGlvbnM= dWZz w7FhbmE= IHByZW9jdXA= LXRyZWF0ZWQ= LmdldFdvcmxk Lic6 IEFUSA== OnN0YXJ0 IGF1dG9pbW11bmU= IEJsYWNramFjaw== X0ZJTklTSA== KGZsb29y IHdyZWNrYWdl VVJU LkJyYW5k cGFpcw== Y2ltYWw= Y2nDsw== TkZM LWVxdWlwcGVk LmNvbnRlbnRPZmZzZXQ= IG92ZXJjcm93 IFRa IG9kb20= IENlbGx1bGFy CXdyaXRlbA== KGlucHV0U3RyZWFt KHByZWY= LXN0b2Nr IERlbmllZA== LXN1cHBvcnRlZA== ICcoKA== YW5jb2Rl LmZpbHRlcmVk RGltcw== IGpi CXByaWNl IEBACg== bm9jaw== Lm9wZW5Db25uZWN0aW9u IGFudGljcw== cmVzdWx0Q29kZQ== UGxheWJhY2s= IGNlbHVsYXI= IEZPT0Q= IFBvZGVzdGE= PW1lc3NhZ2U= LnBlcmZvcm1hbmNl IERtaXRyeQ== YWx0aW1vcmU= IHBsYXRlZA== IHR1YmVyY3Vsb3Npcw== X2dlbQ== KEVkaXRvcg== VHBs IGNyaWFu IGJ1ZmZlcmluZw== 6KeG6aKR ICcpCgo= VnU= TWF0aGY= IHRpbWVsaW5lcw== IFRhdGE= L3Bw IHBsYXN0 IFRydWx5 IFN1YnN0aXR1dGU= a2llbQ== a2Fhcg== IFZpc2g= J2h1aQ== IE1hZ2ljaw== L0xheW91dA== dXJhbsOnYQ== X3R0bA== SGlkZUluSW5zcGVjdG9y LmtleXdvcmRz TGlzdE1vZGVs X1N1Y2Nlc3M= aWxpaGFu IGJsYWNrbWFpbA== IFNlcmJpYW4= cXVlbGxl IER5c2Z1bmN0aW9u IFByZXBhcmVk IGpNZW51SXRlbQ== IGxvZ2luVXNlcg== c2V0YXR0cg== LkNS X2xjZA== IGJ5dGVzUmVhZA== IGNkZWNs IHRvd25zaGlw cGVr aWprc3RyYQ== IG1heGltaXppbmc= LnByb3ZpZGVycw== SW52ZXN0aWdhdG9ycw== IHNob290b3V0 IGFpcnNwYWNl dG9vbGJveA== UVdpZGdldA== PXBr IHBvcnRlcg== IFByZWRhdG9y IFN1bnJpc2U= IGRldm91cg== CVVJbnQ= aXR0YW5jZQ== U1BB X2VuZGlhbg== IE5hZ2Fy dmVuaWRh L29wdA== QnlFbWFpbA== IFBoeXNpY2lhbg== XEQ= INC80Ys= WUVBUg== SUND L3BvcnRmb2xpbw== LmV4ZWN1dG9y dWRlbQ== RmFsbGJhY2s= dWR1 U2xpbQ== w7Nsbg== Xnst YW5za2U= IGh1c3RsZQ== IElyZW5l IGFieXNz IFJvYmJpbnM= IGluZGV4ZXI= U2F1ZGk= IHdob2xlc29tZQ== LXNsb3Q= IFRlY24= IHBhZ2VUaXRsZQ== IGNvbnRlc3RhbnQ= aWNvcHRlcg== IGNvdXJzZUlk Q2hy IEFYSVM= Zm9yZGVy X1RVTg== VHJhZmZpYw== IHR5cGVhbGlhcw== IGRhcmY= LXVyaQ== dHN4 LmRlc3Ryb3lBbGxXaW5kb3dz IGl0ZXJhdGluZw== UmVhY3Rpb24= CUFN IGN1ZW50 LWNvb2tpZQ== IGZsYXZvcmVk c3RvaQ== IGZsaXJ0aW5n 44CL77yM 4KSu X0NSWVBUTw== W3Rva2Vu IHByb2xldGFyaWF0 LuKAmeKAnQoK CWRj LlN0cmluZ1Zhcg== IGxlZ2l0aW1hdGVseQ== X2RlY29yYXRvcg== TG9ja2Vy IEplbm5h VVJJTkc= 5YaN X1ByaW50Zg== QVRPUlk= LWRpc3Q= ICIuIik7Cg== LnF1aXo= IGlyZ2VuZA== LWxlYWd1ZQ== Z2llbg== IFByb2R1Y2Vk SGVsbWV0 5Y+v6IO9 UGxhdGZvcm1z IFJlc291cmNlTWFuYWdlcg== IEh1bmRyZWQ= cm9tZXRlcg== ZW5na2Fw SG9w IHBvc3N1aQ== QmVmb3JlRWFjaA== IENISw== IElNUw== VGlja2Vy IGdyaW5uZWQ= LmdldEFz IGltcG9zZXM= XSIp Rm9yZ2V0 L2ltcG9ydA== IGluamVjdGluZw== TG92 IGFicmls X3NsaWNlcw== LWNvbW0= IFBST0RVQ1RT IE9hc2lz IMO4bnM= IFJlamVjdA== IHJlZ3VsYXJpemF0aW9u aW1wbGljaXRseQ== bmF6 U3BlY2lmaWVy IGltcG92ZXJpc2hlZA== 5po= IG5vbWluYXRl IE9WRVJSSURF IEJhbmRz ZXRoeXN0 IEppYW4= IG5ld2NvbWVy IE5hYg== IGVicA== IFBhZ2Vy IEh1bWI= L2Nj IGV4cMOpcmllbmNl dWRnaW5n TWI= ZGJ1Zg== Jy8+ IG9ja3PDpQ== IGpkYmNUZW1wbGF0ZQ== IFNISVBQSU5H IGludGVyZGlzY2lwbGluYXJ5 IENFVA== YXV0b3A= LXN5bWJvbA== YXZlYw== IGNvbXBvdW5kZWQ= IENodW5n X1NNUw== LWll IFByb3NlY3V0b3I= IExlaWE= IE1hbmRlbGE= U2luZ2xlT3JEZWZhdWx0 CVJFUVVJUkU= YXRvd24= dXJyZXRz 5paH5a2X IENPTlRFWFQ= RU5TSVRZ IGluc3VyZ2VudHM= IERpYXM= LnN0YXRpb24= IEtsYW4= X21lYXN1cmVtZW50 X1FNQVJL IHN0b2k= TU9PVEg= PicpOwoK IGluZ2VzdGlvbg== IEdsb3c= dXRjaGVz YmVhcmluZw== LnRvYXN0cg== IGZyYWdtZW50YXRpb24= aXBwbw== X1NFR01FTlQ= IHN0dW1ibGluZw== aW1hcg== c3Rpbmlhbg== XygpCg== IG1vdGl2YXRpb25hbA== TGlzdEl0ZW1UZXh0 IHdvbWVucw== T3BlbkhlbHBlcg== aWJhbmQ= IGJ0blNhdmU= IGluY29ycG9yYXRpb24= IGRvY3VtZW50YXJpZXM= aWNs IE5k IEFyYQ== IHF1YWtl IEN1bW1pbmdz aHRt YXN0ZXJlZA== LmR0cA== IGNvbmRvcw== IEd1bmRhbQ== L2Rpc2FibGU= aHlkcmF0ZQ== IEVwb2No IG5hdGlvbmFsaXN0cw== IGRldmVy LHJlcXVlc3Q= LmdldFZlcnNpb24= Q0VMRVI= IFNhbGFo IG1vdGU= IE1lbGxvbg== c3BvdGlmeQ== IG9yaWdlbg== IG5hbGU= IGFkdmVyc2FyaWVz LkpUYWJsZQ== Zm9yY2VtZW50cw== IFJldHJlYXQ= IGFyY2hpdm9z IHNsYXNoZXM= Lk1vdXNlRG93bg== PDo6 X3Rocm91Z2g= QWxhbWF0 LmJsdXI= X2ZpbmRlcg== IGFsbHVyZQ== UGVyaXBoZXJhbA== X3Bhc3NlZA== X2NoYWxsZW5nZQ== IFBhbGVv SU5J RGlyZQ== c3BoZXJl KENPTE9S YWNrZXJz IEdseXBo KGludGVnZXI= INC60L4= IFJlbGV2YW50 INm+ IGF0YXM= X3ByaW0= IE1VVA== bmluZ2Vy YXV0b3JlbGVhc2Vwb29s PV9f IFNpZ25pbmc= 7ZWY7KeA IHVjeg== RWRpdGluZ1N0eWxl IEhlYXRlcg== IEZhaXJmaWVsZA== IEJlYXJk LGVu dXNhdA== KCcuJw== L3N0cmVhbQ== IGdldFN1cHBvcnRGcmFnbWVudE1hbmFnZXI= IG1DdXJyZW50 X1NUQVRFUw== X3dpbmQ= Q0hBUFRFUg== cHJvYmFiaWxpdHk= KGFubm90YXRpb24= ICovDQoNCg0K LlVuaXF1ZQ== LkFkZEZpZWxk SGlnaGVy LmRpZ2l0YWw= LmV4cGVyaW1lbnRhbA== YXds IHdoZW5jZQ== ZXJub3Rl U0FNRQ== Lmlwdg== dG9CZUZhbHN5 YnJhbmU= X2NhdGVnb3JpY2Fs QXVyYQ== IFR5cGVTY3JpcHQ= IHNwb250YW5lb3VzbHk= bG9uZ2xlZnRyaWdodGFycm93 aWthbA== X1RPRE8= IFd5YXR0 IGZsdXJyeQ== ZGlm IHJlY2tvbg== IENvcm91dGluZQ== CWZmbHVzaA== IHdvcmtmbG93cw== IEZBTUlMWQ== c3ByaXRlcw== X1dvcms= LkdldFNpemU= IENvbnN0cmFpbnRz QmlnSW50 aXRpYQ== Z2V0Um93 IGR1aw== IGlzTmV3 IFByb2R1a3Rl eENC aXNpZXJ0 ZnVuY3M= IEFkZW3DoXM= QmluZGluZ1V0aWw= b21waWxlcg== LWludg== IGNoYW50cw== IGVudHNwcmVjaA== KHRp X0lB 0L7RgNC00LjQvQ== IEZBTEw= aW1k IGxvY2FsdGltZQ== PExpbms= 0L3QuNC60LA= IHByb2ZpbGVy IGdldFVzZXJJZA== IFBoeXNpY2lhbnM= UkFE IGhtbQ== IE5lc3M= IFRlbXBv IEpU IHJlY29ubmFpc3NhbmNl PHRyYW5zbGF0aW9u IGVudGljaW5n IHF1YWludA== IGNvdXBl X18nLA== TkFTREFR INC30L3QsNGH0LXQvdC40Y8= UEVSQVRVUkU= IFBhaQ== IHRldGFz Q0FT SVJST1I= IGtj IHRvdGU= IGRyYXdiYWNr IHBhcnNsZXk= CUZ1bmN0aW9u aXN0eQ== IERVUA== X0NJRA== X1VU IGtzaQ== IGrDpA== PXZhbA== LnRvSGV4U3RyaW5n 5p2/ LmNsaXBz IG9mZmVu IFRFQ0hOTw== IFNoYW1l IHN1c2NlcHRpYmlsaXR5 IHN0dXBpZGl0eQ== IFRyb3V0 IENoYW1wYWduZQ== ZXRoeWxlbmU= IGJlZ3I= X3JlZGlz WWVw IGhhbnM= IERlZmVuZGFudA== IGRhc2hlcw== IHVzZXJUeXBl X2RhdG9z IHVuaWM= a3JpdA== IHJlY2VwdGl2ZQ== IEdyZXQ= KG1i IEluZmx1 w6tu fS8+ aW50ZXJlc3Rpbmc= VVRVUkU= IGltYWdlU2l6ZQ== IGdyZA== IGFic29s L2Zh LmdyYWRpZW50 IHd5c3Q= XX0+Cg== bGVnYXRpb24= Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== IEJsZW5kZXI= X18pOw== IHVzZXJFbWFpbA== IFBoYXI= bGVoZW0= KSk/ KFJldHVybg== ZWdyYQ== dXRpdm8= IGFwcGVuZGl4 IFJUVkY= IFNFQUw= IGd5cHN1bQ== X0FyZw== IGlsbHVtaW5hdGU= IFNjaGlmZg== cXVpbA== LkNvbWJvQm94U3R5bGU= J10pKQoK IGFsdGVycw== IHByYWN0aXNl IHVzdA== IERpbWl0 LVJlZ3VsYXI= IGNyZWVwaW5n IENhbmFkaWVucw== IHJldG9ybg== LWNvcm5lcg== ICJdIg== KHJuZw== IGNhbmFkaWFu IHBvc3Rv LmFzc2VydEFsbW9zdEVxdWFs IEJlY2t5 L3Nz IGhvc3RhZ2Vz IGJpb2xvZ2lzdA== IEhvc3BpdGFsaXR5 IEVsaw== IEJhcmFuZw== 66qp YmJiYg== LnRlYWNoZXI= IHRlcm1pbmF0ZXM= IGlzRXJyb3I= IEtlbmRyaWNr ZW5kYXJz IFN1Z2dlc3Rpb25z Q2Vs IFNlcnZpY2VQcm92aWRlcg== IFdpY2hpdGE= XSkpLAo= IGhlYWRsaWdodHM= X3ZlbnRh QU5USQ== IHByb3BpZWRhZA== IGVubGlzdA== CW9yZw== TWVzc2VuZ2Vy LmxhbmQ= IicK YXNwZXJz IHRlcnM= ZmlsdA== IEZ1bmN0b3I= IHNsaW5n X0JMSw== LUV1cm9wZWFu IEFjaGlsbGVz XEVudGl0aWVz LkRpc3BsYXlNZW1iZXI= IHJlZGV2ZWxvcG1lbnQ= CWhlbHA= IFsnLQ== IEp1bGllbg== PUludGVnZXI= LmlzTnVsbE9yRW1wdHk= IFdvVw== UGF5bWVudHM= KGhkcg== IGJhamE= IEpDb21ib0JveA== RmlyZWZveA== IGNvbmdsb21lcg== X2N1c3Q= JCIpCg== IG11dGFudHM= TWFnbg== IE1QSA== e18= X3dhcm5pbmdz IGdhc3Q= THQ= IHRyYWluYWJsZQ== VHJhZGVtYXJr QkFTSA== IEVDUw== UmV0cmlldmU= J08= IGluaXRpYWxpc2Vk IGNoZW1pbg== LlRyYW5zcG9ydA== IFlpbmc= YXNpb25z IG1vYw== X0xPR0dFUg== R0VOQ1k= IEJsb2dnZXI= ICIpIgo= UEVuZA== IGFjY29tcGFnbg== LkNPREU= IG1MaXN0 LWVkdWNhdGVk LC8= IE1lcnJpbGw= L3Blb3BsZQ== LicnJwo= X3RvZG8= IGfDvG4= X0ZVTExTQ1JFRU4= LmNsZWFudXA= VW5tYXJzaGFsbGVy LlN1cHByZXNzTGludA== IG9uc2xhdWdodA== IE1hcnNlaWxsZQ== ZWRpYXRvcg== X0VOVFJJRVM= LGRlZmF1bHQ= bWVsZHVuZw== ZWxmdGg= IEdvdmVybm1lbnRz IHBsZWFz b3R0cw== IHBsdW5kZXI= cmVhZE9ubHk= IGR5c2Z1bmN0aW9uYWw= J05laWxs IHVubG9hZGVk IHNxdWVlemluZw== IGRvb2Q= LmFkZERhdGE= IEFzaQ== TUVT KHNjaGVkdWxl IGFkdmVudHVyZXJz ZXhwZWN0RXhjZXB0aW9u IH19Pns= Q0xT IHJlY2hlcg== IGRlcm5pw6hyZQ== LkRldGFpbHM= IHJhbmRvbU51bWJlcg== IGlhcg== IExhbmdl ZXdl IEVtaWw= IGFkdmVydHM= IGRyYW1hcw== IEtvbW0= ICAJCQkJ X1Rlc3RDYXNl IENsYXJlbmNl 0LXQvdGC0LA= dG91cHBlcg== Lm9uU3VibWl0 Y2Fh X0FMQVJN KikKCg== IOuzgOqyvQ== LlByaXZhdGU= IHNreWxpbmU= UkFJTg== KGN1cmw= b3NpdGU= SWdub3Jpbmc= IHZ6 IHZlZGVyZQ== IE9TWA== YmFuYW5h IG1ldGFt IHRyYW5zbGF0ZVk= IE1jR3I= 4oCZYWNj 5Lul5LiL IHNwaXJpdHVhbGx5 KGVuYWJsZWQ= IHJlc3RvcmVz IGJ0bkNhbmNlbA== dmFuaXNoZWQ= IE51ZXZv U2FsdmFy Y2FmZmU= IG1hc3RlcmluZw== aWRkbGVk LmlzZGlnaXQ= IGdyYXZ5 YWdlZExpc3Q= XFJlc291cmNlcw== IGRvd25mYWxs LlBhc3M= IGFsdGlqZA== IHBpenphcw== IH0pKQ== cGVybXM= aWdodG9u IHJlcGVsbA== ICcnKSw= Lm5vcm1hbGl6ZWQ= IG1hcmNoZXM= CXJlc29sdmU= Q2hpbGRTY3JvbGxWaWV3 IEluc3RpdHV0aW9ucw== QXR0ZW5kYW5jZQ== bHNl ZXJkZW0= LmdldElucHV0 SGFzQmVlbg== YXBldXRpY3M= ICpc IFJpdHVhbA== X0xT IHNwb3RpZnk= IHNww6R0ZXI= IFRodW1ibmFpbA== KGNlcnQ= IGdldFJlc291cmNl X3Bsb3Rz IHN0YWluaW5n YWRqdXN0ZWQ= INep RGl2RWxlbWVudA== IFRUQw== IGFwcm92ZQ== LnZpZXdlcg== fD0= Z2V0U291cmNl 55S16K+d X1RC X2JpbGxpbmc= LUxpZmU= IHBzeWNoZQ== IHRhYlBhZ2U= IEluZmVjdA== eGZmZg== X2hpZA== IGFwb2NhbHlwc2U= IE5GUw== IElURVI= V2luZG93U2l6ZQ== aGVpdHM= IGluY3JlbWVudGVk IEJyYXk= ZW5lZ3Jv IGFsbW9uZHM= WVBSRQ== Tm9ybWFsaXpl 4oCcV2VsbA== IEFwaUNvbnRyb2xsZXI= W1VuaXQ= R2VucmVz IE5leA== IExORw== IGZvcmVnb2luZw== IHRlbmRvbg== IEhw Q291bmNpbA== IFNhdWRpcw== IERlemU= IHNjcmFwZWQ= IGJvdHRsZW5lY2s= IE9ybg== IHVubWFubmVk IGludm9raW5nU3RhdGU= IEV4b2R1cw== X0FUT01JQw== U3ViTWVudQ== X2NvbXByZXNz Iy4= RHJ2 LnB1c2hCdXR0b24= IHN1aXRjYXNl b3NzZWQ= Yml0cmFyeQ== U25pcHBldA== IEVwaWRlbWk= RGlzYWxsb3c= X0NISw== IHZlcmlmaWVz IENhdGFseXN0 4oCUZnJvbQ== IGNvbnRhbWluYW50cw== Sm9obm55 KGZpbA== IGRlcmVu IG91dGNyeQ== IEpvaGFubg== PFRhZw== X3Nhbg== IHN0ZGRldg== IHBhcmFseXplZA== IExleHVz b3NhdGU= IENoYXJzZXQ= IFJlYWx0 PT8iLA== KERlZmF1bHQ= IFRyZWFzdXJlcg== RWluZQ== IHVudHJ1ZQ== IGZpbmFuemk= IGJlaGF2aW91cmFs IG5pcHBsZQ== IFJhZGljYWw= IFBheg== IE1haXNvbg== LWVtcGxveWVk IHdlcmVsZA== IGpvcw== IERpZWQ= ZW50cmVwcmlzZQ== JHJvd3M= IHNwb29m IMK7Lg== IGtleXBvaW50cw== IGN1cGNha2Vz IHt9KTsKCg== Y2hpbmU= 4oCL4oCL LExPQ0FUSU9O IHBseXdvb2Q= IG1hZ2c= IFJhbw== IERQUg== IGVib29rcw== KXNpemU= IHNwZWNpYWxpc2Vk I2Fl IG1pY2hhZWw= IFNURE9VVA== IFBlbGw= QU1FUkE= YW5nZWxv IGluZ2lu IG1BdXRo IGxlZ2FsaXpl IEN1YW5kbw== IGNlcnRv IGxpdHJlcw== IEV4dHJhcw== U0hPUlQ= IHByZW1hdHVyZWx5 IFNlbWFwaG9yZQ== SEVO IGFtcGhpYg== IGjDqQ== RXhpdGluZw== ZXVpbGxleg== IFRNUHJv LnByZWZlcmVuY2Vz LmdldEluZm8= w6l0aWNh IiIiLg== Lm5ld0FycmF5TGlzdA== IGtyb24= IEJMTA== Y2xpbmU= X2di IFRvbWFz cHJvYmFudGU= SVRJT05BTA== 4buRaQ== IExvZA== SXNu LHsK IGtvbW11bg== d2R4 Z2Vub21l 6YCj dG9IYXZlTGVuZ3Ro J0U= IHDDumJsaWNh IERldGVjdGVk IF8KCg== 0YzRjg== K1M= Y2xvdGg= Um90b3I= Lm51bWVybw== X3N0YW5k R0ND 6rU= X3Zw X0ZBUg== QWhlYWQ= e31c KGNvcnJlY3Q= ImNyeXB0bw== bW9kdWxv X1VUSUxT LlZhcg== LW1lbg== IHZlbmlhbQ== IE1jQ29ybQ== Z2V0TG9jYXRpb24= W2NvZGU= JWY= IGRpZmZlcmVk SVBBZGRyZXNz IFN0cmF3YmVycnk= IFNhaGFyYQ== Y3JlYXRlQ2xhc3M= IS8= IG1lbWJlcnNoaXBz IHByb25vdW5jZQ== LkNvbnN0cmFpbnQ= IEVucm9sbG1lbnQ= IHJlbmV3YWJsZXM= Lmd0 aXp6aWU= cnp5 ZXJzZW4= PD0k REVMQVk= IHNpZ25pbg== IFBTVQ== QXBwTmFtZQ== fVwuWw== RUdB IGNpZW50 IFN5bm9wc2lz IGxldHRlclNwYWNpbmc= IGNoaWxkcw== IFNjYWxpbmc= KXByZXBhcmU= IGNvbW11dGVy U2xhc2g= b3VzZXI= IHdhdGVybWFyaw== IFVJU2NyZWVu b2xpYW4= CXZlcnRpY2Vz PkFjdGlvbg== IGFwaA== aGFuZHM= IE9DQw== SFU= IHNlY2x1ZGVk IHZpc2NlcmFs IHZpZGVvZw== IFNhbXVyYWk= IFp1aw== IFdpZG93 YWNjaW5l IGxpbGxl IFJ5ZGVy IFByb2dyYW1tZXI= RXhwb3J0ZXI= IG1vdmltaWVudG8= YXBhcw== IGxlaWRlcg== dWxhcmVz aWVtZQ== LWRlbnNpdHk= ZGVzY2VuZGluZw== KElU IHNjcmFwZXI= IGljZWJlcmc= X0NSSVRJQ0FM IGF1dGU= X1N0eWxl IE1BTA== IEhlY3Rvcg== LUNocmlzdGlhbg== IGRpZmZlcmVudGlhdGVk IEJpc29u ICAgICAgIAk= LnBvcHVsYXRpb24= Umlv LVRy PVZhbHVl IEx1ZnQ= IEdpdWxpYW5p 55yf Q291cG9u IGhhY2llbmRv 44Od cG9uY2U= X3Jlc2lkdWFs IGxp4buHdQ== XHVmZg== 0L7QsdGF0L7QtNC40Lw= IHJlc3BlY3Rv IERlc2lyZWQ= RGF0YVN0cmVhbQ== LnNheA== IG1vcA== IEhhY2tlcg== QU5UQQ== QW5j VmVudGE= IFdvcmRwcmVzcw== CWVmZmVjdA== YWRhcHQ= IEludGVydmlld3M= IGRyYXdiYWNrcw== QUxMRU5H IGfDqW7DqXJhbA== LWJhZGdl UmVzaXN0YW5jZQ== IE9TSQ== dG91cm5hbWVudA== IFJlcHV0YXRpb24= IEVpc2VuaG93ZXI= RmlsZWQ= IGhlYnQ= I1w= Y3JlYXRlUXVlcnlCdWlsZGVy 5pyJ5pWI dmFuY2Vk Lkhhc0tleQ== ZGRl KHN0YXJ0VGltZQ== IEluc3RhbGxlcg== IEltcGw= Y29hY2g= IHByZWFjaGVk IGJyZXdlZA== SW5zdGFsbGVy b2x2YWJsZQ== IGFsYXM= KHNwZWxs IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== IGRlZmFtYXRpb24= KEFyZw== IHVzZXJEZXRhaWxz IGxpY2Vuc29ycw== IEludmVzdGlnYXRpb25z IGRpbmVy IGZpY3Q= U3RpY2s= TmVpZ2hib3I= dG9UaHJvdw== LXNlY3Rvcg== IHJpc3VsdA== 4oCZOg== Sk5JRW52 eXBpY2Fs ZGVzaWduYXRpb24= KHdw IGNvbmZpcm1QYXNzd29yZA== LWlvcw== ICItIjsK CWFzc2VydE5vdE51bGw= YWRkRXJyb3I= YXZyYXM= Vm0= KGpRdWVyeQ== IFZpY3RpbXM= IHJlbGlhbnQ= IEJsaXR6 IG91dGFnZQ== IGZsdW9yaWRl IFROVA== LkRpc2NsYWltZXI= IFNOTVA= dmFibHk= IHBob3RvbnM= LlJlYWRBc1N0cmluZ0FzeW5j U2NoZWR1bGVk IGpld2lzaA== IEdlb2ZmcmV5 IEdyYW5ueQ== fgo= LW1lc3NhZ2Vz KGdvYWw= IGFyZ2VudA== IFBlc3Q= IGNvbmdyYXR1bGF0ZQ== aW5vc2F1cg== IHdoaXNwZXJz IHNpc3RlbWFz IEbDqQ== L0luZGV4 Lk1JTExJU0VDT05EUw== IGFjaGlldmFibGU= IEJyaXR0YW55 KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys= IFJldHVyblR5cGU= IGluZml4 LmlzU3VjY2Vzcw== LkNhdGVnb3JpZXM= IG91dGxpZXI= LkFzc2V0 b3RlYw== IHdpemFyZHM= IGJvb3Rsb2FkZXI= X2Jlcg== IHJlaGFiaWxpdA== YW50b3I= IFZpdm8= IEdhcm1pbg== b2JqZWN0SWQ= QFBhdGg= IMO6bmljYQ== IFlvcmtlcnM= R3VpZElk JGVycm9ycw== ICs9Cg== IGF4aW9t IFBTSQ== IFN1Y2M= IFNwb2thbmU= ICciLiRf IExO Lm5ld0xpbmU= IGludGVyc2VjdHM= bGljaGtlaXQ= IElBTQ== LkRyb3BEb3duSXRlbXM= IGNvdXJ0ZW91cw== IFNtaXRoc29uaWFu IEhtbQ== UURlYnVn c3RyYWlnaHQ= X3NvbGQ= QnVsaw== VHJpU3RhdGU= IGFkZEJ1dHRvbg== IEhpcmluZw== VHJhbnNwb3Nl IFVJVGV4dFZpZXc= aXN0ZW5jaWE= L2NwcA== INC/0L7Qu9GP IENvb2tib29r L0FwcGxpY2F0aW9u Z2VuaWM= IFdvb0NvbW1lcmNl LHZlY3Rvcg== IEJpdGU= Lmh3 IGRvY2tpbmc= IFRhbnRyYQ== IFNWQw== IE1hdXJpdA== aWFsaWFz IEF1cmU= IGJvbHM= TE9DSVRZ IFdlc3Ricm9vaw== IEJQTQ== IEZleQ== IFNvdmVyZQ== IHBhbmRh IHF1aXp6ZXM= IGNyZW8= c3BlZWNo L2Rpcg== INC40YHQv9C+0LvRjNC30L7Qsg== IGZvdW5kYXRpb25hbA== LWFwcGVuZA== blRoZQ== IGFwaVVybA== LlhQQVRI IExpbmd1 IEV4aGF1c3Q= UGFraXN0YW4= IG9tYXA= IGZvbnRTdHlsZQ== 0LXRgdGC0Lg= IG1hbnNsYXVnaHRlcg== X0xvbmc= IGNhcnBldHM= Q2hlc3M= ZWxpZ2h0 RHJhd2VyVG9nZ2xl IFBhdHR5 X2Nyb3NzZW50cm9weQ== IHR3ZWFraW5n 0YLRgw== IENBTEM= c2lw IEpNUA== X19fX19fX19fX19fX19fX18KCg== VHJlZVZpZXc= LXdhdmU= IHBhc3R1cmU= ZWxpbWluYXI= IGVyeQ== IHJlc3RsZXNz 6rWs IG1hcmlhZ2U= IEVsbGll Xz0n IHZtaW4= S2ljaw== LnRvb2xib3g= IE1hcmlubw== eXBzeQ== c3RkYXJn cHRyZGlmZg== IFBlYWtz X1ZhbA== IGluZ2VzdA== IGNvbXBz RGViZQ== IERlY2xhcmF0aW9ucw== aXJjb24= PWFsbA== LkRlYnVnZg== UHJlZGljdGlvbg== IGRhdQ== KE1lbWJlcg== IGNoaWVmbHk= L2FuaW1hdGU= LkF0dGFjaA== IGdhc3RyaWM= IFVzZXJEZXRhaWxz w7ZyZW4= a29h LWJvb3Q= IHNwbGljZQ== bGVh b3Rp W29w U3F1YXJlZA== IHNjcm9sbFRv IE5ld2ZvdW5kbGFuZA== CUVSUk9S V2Fs RU1BTEU= R2V0WQ== IGNhYmlucw== IGFic2w= Lm1peGVy IGNkcg== Y29uY2VydA== IFN5bHZpYQ== Qks= 5LuK5bm0 X0NMQU1Q 0YHRgtGA0YPQutGC0L7RgA== L2dhbWVz xZN1cg== PGxvY2F0aW9u IGNsb3NlQnV0dG9u IEhhaXJzdA== 4bqhbw== IGNydW1ibGluZw== IHN1bGZhdGU= IGFsZ3VpZW4= IEpEQkM= IEt2 UElQ X3N1cmY= IHXFvHl0aw== IG1hbm5lZA== IE9jY2FzaW9uYWxseQ== b2Jqcw== TWluaW1hbA== LWRlc3M= IFdBVg== IEVycm9ySGFuZGxlcg== IHNldExvY2F0aW9u IGlldHM= IHN1YnJvdXRpbmU= IHRvbmd1ZXM= X3F1aXo= TWlsbGVy IEJhc2VUeXBl IFZ1ZXg= aXJhdGU= U2VyaW91c2x5 dHlwZWlk IGt1dGpl IHByZXNjcmliaW5n X3N1cnZleQ== LkN0 IGJsaW5kbHk= LmdldExhYmVs LCIpOwo= IHBvdHJ6ZQ== IFN3b3Jkcw== U29ydGFibGU= IEJsYWNrYnVybg== IE1hdGE= IHBvbmRz IHByb3Rlc3RvcnM= IEVuc2VtYmxl OmZvY3Vz IGl0YWxpYW5h IGRvcm1hbnQ= IE5lbA== SU5DTFVERQ== KENvbnY= IGJ1Zmxlbg== IENETg== LnhodG1s SGRy IGNhcmNpbm9tYQ== IFdvcmNlc3Rlcg== bmRs dXNlUmFs dXNlUmFsYXRpdmU= dXNlUmFsYXRpdmVJbWFnZVBhdGg= IHRha2Vhd2F5 ZWxlbWVudEd1aWRJZA== LmxhYmVsWA== W0lE QUxFUg== CXV2 PigpLT4= L2xp K2xlbg== IHByb3BlbA== IGNhYm8= XCIiKTsK IHZvY2F0aW9uYWw= LXBpbGw= Lm5sbQ== IGVyb3RpY2E= b3BvdA== bGFuZHNjYXBl aW5zaw== IHBsYWNlbWVudHM= LnNldEF1dG8= IGhvbWljaWRlcw== X0ZpZWxkT2Zmc2V0VGFibGU= Omw= IGFubm90YXRl LXJpc2U= LGFscGhh IGludGVydmVuaW5n YW1iaQ== Lj0nPA== IHBhcmxlcg== 772l772l IGNvbXBseWluZw== LWhhbmRsZQ== IGludGVycnVwdGlvbnM= cGxlcnM= cm91cHM= X0RlZg== IHBpY2tlclZpZXc= IHBpZXJjZWQ= IGVyYWRpY2F0ZQ== bW9ieA== W3RyYWlu RGVmZXJyZWQ= IHRvdGFsZWQ= Q2hpbGRJbmRleA== IFJlY29tbWVuZGF0aW9ucw== X1dPUkRT IHNpZ25pZnk= IEFlcm8= X2Jvb3RzdHJhcA== X1Vw cHJvZHVjdE5hbWU= LWFueQ== IHBwbA== X1BVVA== IGx5b24= X0lMaXN0 IMOpY3JpdA== KGd1aWQ= IGNvbnRhZ2lvdXM= X1NlbGVjdGlvbg== L2xhbmd1YWdl cXVhbg== IGFjdXB1bmN0dXJl IG9mcmVjZQ== CVJURQ== Lkd1bmE= IHNlbnNlZA== IEtyYWs= IHVubHVja3k= YXZpYw== dGl0bGVMYWJlbA== IGhheXN0YWNr LmJpdG1hcA== IENvdW5zZWxpbmc= UExBVEZPUk0= X1Rvb2w= VGFt V2VyZQ== 0YDQsNC3 X1NQRQ== IG9uQW5pbWF0aW9u PTw/PSQ= IFNsZQ== IEd1aW5uZXNz IHR3ZWFrZWQ= LXByZXNzdXJl X21vbnRocw== KW8= UHJvYmFiaWxpdHk= IENhbXBvcw== LkNPTkZJRw== VmludGFnZQ== PndpbmRvdw== IEZhY3RvcnlCb3Q= cG9zdGdyZXNxbA== IHRhYmxldG9w IENhdGE= aG9j X2FzYw== 4oKs4oCc QmFja1N0YWNr w6lv IFNvdXM= c2V0dGVy JyldKQo= dmVsbGU= IEFsdW1pbml1bQ== eEJB Lm1vbmdv IFZhcmlhdGlvbg== eXR1dA== bmVobWVy 4buDbQ== IGVmZmVjdGVk ICoqLw0K IHJlY291bnRlZA== UHJhY3RpY2U= Q0FOQ0VM Y3puaWU= TGFycnk= IHFh IEh1ZmZtYW4= Z2V0RHJhd2FibGU= IGVuZnJlbnQ= IG9uQ2FuY2VsbGVk IGxlbw== IFhTUw== IEh1cnJpY2FuZXM= IGpvbg== IFRlc3RlZA== IE1vcmFs IGJlZHRpbWU= IEpBRFg= IGVjaGFuZw== IG51ZXN0cmFz UENN KS4u IOyImOyglQ== IGJvcmRlcmxpbmU= IGFzc2lzdGly IEhlbHBz IERpdmU= X3NuZA== d2l0 X2JsZW5k IGlzRmlyc3Q= IGhlYXBx KCc9 IGFzc2VtYmxlcg== IE15c3RpYw== b3JnaA== IGhpam9z X0tIUg== KGRlY29kZWQ= IFFVSQ== INeR IGNvbnRyb2xJZA== U3BhY2Vy LmFnZ3JlZ2F0ZQ== IHNoYWx0 X3RyYXA= IEZhbWlsaWU= zrg= b3J0YQ== LlBvc3RNYXBwaW5n 7LA= ICcuLics esOh L2FybQ== LmdhbGxlcnk= IGltcGVjY2FibGU= IHdpbmRvd0hlaWdodA== c2xhY2s= ZmZi X3Fw bGFkZW4= IFRFUk0= c2V0TGFiZWw= IFNpbmdsZUNoaWxkU2Nyb2xsVmlldw== ecO8aw== IHB1bHVtaQ== LWdhcA== dW5pYWNpZA== CWhvbGRlcg== LmFkZEZpZWxk IHRyaXBsZXM= IEp1ZGdtZW50 IENlbmE= cGFyc2Vycw== LmRyYXdUZXh0 INC60LDQttC0 IGFjY3Q= aGl2ZQ== IG11c2lxdWU= IFlheg== LXBvc3Rz IGZpbHM= IC8vew0K X3B1dHM= IFN0YXR1ZQ== ZGlhbW9uZA== U3RvcmFnZVN5bmM= IHNodXRz IGdldHRpbWVvZmRheQ== IEFBQkI= aWNoZXJu Z2V0TG9jYWxl aW50cmVl IGZydWl0ZnVs QmVhcg== IHBsdW1iZXI= cWlk Q0hJUA== IG1vdGl2YXRpbmc= IGVzY2FsYXRl LmJ1bGs= IFBsYXlncm91bmQ= X21pcnJvcg== IFBlZWw= IGRhbmU= aW52b2ljZXM= SGFzQmVlblNldA== LXZlcnRpY2Fs IEZyYW5jZXNjbw== IEFTQQ== INC60L7Qu9C40YfQtdGB0YLQstC+ w6Bu Rm91cnRo IENyZWF0ZVRhYmxl Y2N0b3I= IGZyYW50aWM= YWFi IEthcmFjaGk= X2ltYWc= IG5hdHV1cg== RWF0 IHN0dW1w IHJvbGxlcnM= IHRyYWl0ZW1lbnQ= INC/0YDQvtC0 IHJlYWxpc3RpY2FsbHk= IGVQdWI= IFphZw== ZGFtbg== IEFubmV4 cGVjaWVz KGV4aXQ= IHNwZWN0YXRvcg== IEJ1bGdhcmlhbg== IG1lZ2V0 IG1hdHVyZXM= IGRldGVjdGlvbnM= IHphaGw= ZW5lZml0 YWtvdg== IGFkdWx0b3M= bWlkZGxld2FyZXM= aXNPYmplY3Q= S2Vubg== IHVuZXRoaWNhbA== c3VibmV0 R3JhcGhRTA== IEdhZWw= LkRyb3BvdXQ= IGJ1cmVhdWNyYXRz IFJlZGVtcHRpb24= LkR0bw== LkV2YWx1YXRl IG9nZ2k= IHRyYXRhbWllbnRv IHJlY2FsbGluZw== aXN0aW5ndWlzaA== L3JlbGVhc2U= X1dST05MWQ== CW1rZGly VHlwZUVudW0= IERBUks= 5rWB IFZhcG9y IGF0b2w= CWluc3Q= LmApOwo= L2Vs IHJlY2xhaW1lZA== w59lcmRlbQ== X2xvc3Q= IEFsYQ== INC+0YjQuNCx IEJhcnRo Q29sb24= b3Bvcg== X3Bhc3N3ZA== X2V4Y2x1ZGU= QVBB Zmxvd2Vycw== IEVib29r IFNUQQ== VU5T X0RJU1BBVENI QUNJw5NO dGVybWluYXRpb24= IG5lc3RsZWQ= YWRyYXRpYw== Um93QW5pbWF0aW9u X2tt IHJvbmQ= XV0+PC8= 5L2Z IGNvc3BsYXk= IG1pbGxlbm5pdW0= X3NlcmlhbGl6ZQ== IHZlcnNjaGllZGVuZW4= YW50dA== IEFtaWQ= Y3JldGlvbg== KT8k IHRvd2luZw== LmZpbA== LkZpbGVXcml0ZXI= IGFpcw== IGVTcG9ydHM= cHJ0 SVBB LkZBTFNF IHByaWNr RW5kaW5n IHByw6lzaWRlbnQ= X2dseXBo IHN1cHBsZW1lbnRlZA== IGNvbnRhcg== Ii4kXw== IEJ1eWVycw== dWph IFRpbWVab25l ZW5uZW50 SW5Qcm9ncmVzcw== IFN1c3RhaW5hYmlsaXR5 IFByb3NwZXI= Q29udG91cnM= IHN0YXJ0bGVk X2xlYXN0 IENvdmVudA== Y2huaXR0 IE1pbGt5 ICItPg== ZXRhaw== IHR1c3Nlbg== LXBheWluZw== X2FjY2Vzc2libGU= QmF0bWFu KGl0cg== SUFMSVpFRA== IFRleHRBcmVh YW5rZQ== X0pVTVA= IGJlaGF2ZWQ= LG9wdGlvbnM= eGl2 LlBMTA== cXg= Lm9uTmV4dA== IHZlcmlmaWVy IGR1xbw= IEZ1a3VzaGltYQ== IENPUlBPUkFUSU9O X3RE IE1lYWRvdw== IHByb3llY3Rvcw== ICgnXA== IEJhcmNsYXlz IGxlZ2FsaXR5 IGhhbWJ1cmdlcg== IGVpbnM= SW5kaWFuYQ== IFRLZXk= Y2xvYWs= PGFsZ29yaXRobQ== IHByZWFjaGVy e2xuZw== LmFydGljbGVz c2V0SW1hZ2U= UmVuYW1l IGJsb3Nzb20= IEJsb3Nz IHV1cg== IGRhZHM= IFRpdGFuaWM= ICAgICAgICANCg0K IG9yZGluYW5jZXM= IG3DpG5u IGVyaw== IGRpc3RpbGxlZA== IMOkbA== IHJ1cHR1cmU= IENhbWVyYXM= w7luZw== IGhhaXJzdHlsZXM= IGVtYnJ5b3M= 4oCdCg== Lk5hdg== IHN0cm0= CXVzYWdl LkFJ IFRPVUNI IElsbGVnYWxBY2Nlc3NFeGNlcHRpb24= 6rKw a29uZWtzaQ== ISIp IGVzY2Fw dWRpb3M= c3RhcnR0aW1l IG1laW5lbQ== IFNwaXJhbA== IEVyZWN0aWxl aXZhbGVuY2U= IGl0ZW1UeXBl IGFiYWl4bw== VmVydHM= dGFraW5n cHN0 IE9zY2Fycw== IER4 ZXR0eQ== TUFM IE5lZWRsZQ== IENPTVBVVEVS 5Lu75Yqh IG5ld1g= ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAK cGxldmVs QUNFTUVOVA== IEpvaGFu UG9pbnRG IHJlc3Ryb29t dmVybw== IGVsxZE= cHJvZHVr IFlFQVJT CWFjdHVhbA== VVBMRQ== Q29udmVydGlibGU= IHBvcnJm SW5qZWN0ZWQ= X2JvdGg= L0dhdGU= Y2FsY3VsYXRvcg== ZW1haWxlcg== LlBvZA== IFpvdA== X3NtYXJ0 YmFzaXM= PENvbG9y IGNyYXZpbmdz RHJpdmVycw== KGNvcw== ZGF0YWJsZQ== LW1ldGFs IFBj LmNvcHlPZg== IG9yaWVudGF0aW9ucw== CWFzdA== IFpvbWJpZXM= IGJvbWJlZA== SG9zdG5hbWU= X3JhaXNlcw== bWVuc2FnZW0= IGNvcnRpc29s IEZpb25h bGljb3M= aGVhdnk= IOqwgOyguA== b21lbmNs IGN1bHR1cmVk IGFydGlrZWw= xaHDrQ== amRr IHZhbmRhbGlzbQ== IH1dKTsK U3RyYWlnaHQ= IHJlaGVhcnNhbA== RWRpdGlvbg== IEluc3Bpcg== CXdj IGZvcm11bGF0ZQ== YW56ZWlnZW4= IHBhdGhvbG9naWNhbA== IGtlbm5lbmxlcm5lbg== Pnsi IGRpY2Vk IGJyYWNlbGV0cw== CQkgICAgCg== Kj4q L3RhcmdldA== LkFnZW50 Lm1hZ2lj IGlkZW9sb2dpZXM= VFJBQ0s= X2luZGl2aWR1YWw= PGRlY2x0eXBl IFJFQ0VJVkU= L2Jvb3Q= OkB7 UU0= IE1hbmRhbA== TkFNRVNQQUNF IHRlcmNlcg== IFJlZ2dpZQ== IE5pY2hvbHNvbg== IEZ1bHRvbg== c3Rha2luZw== IHJlc29uYXRl bHBhcnI= IGNvbnZlcnRlcnM= ICgiLw== IE1hcmxpbnM= SW5mb3JtZQ== Jz0+Wyc= IHJvYmVydA== IEhJTQ== d2Vicw== LnRyYWlsaW5nQW5jaG9y LmFzY2lp IE1hc2M= IHRlY2hubw== ZXR4dA== CSAgICAgICAgCg== zrHOuQ== KFNlcQ== ID8+Ojwv IFBlYg== W3NlbGVjdGVk SkVDVEVE Q2FzdEV4Y2VwdGlvbg== P2Y= IGV5ZXdpdG5lc3M= IG1lbm8= IERhbWllbg== X0lFbnVtZXJhdG9y IC4uLi4uLi4uLi4uLi4uLi4= LlNFTEVDVA== IGNyYXk= X3BhcGVy LlJvbGxiYWNr SURFT1M= cnBhcnI= aW5lYXI= X1JlbA== IFdpbGRl IFdvbmRlcmxhbmQ= IFNodWZmbGU= IHN0cmlrZW91dHM= c2lnbW9pZA== ISgiew== ZXBhbQ== IHJpY2huZXNz IGVuZGVhdm91cg== bWVudUl0ZW0= INCf0L7Qu9GD0Yc= IGZydXN0cmF0aW9ucw== X3N1YnNjcmliZQ== IGJvb3pl IExpY2h0 IHBlYXNhbnQ= IHdlaWdodGluZw== IOW/ QWN0aW9uQ29kZQ== LnRyYWNrcw== IMOY IG1pbGxpb25haXJl KHVy J10pCgoK ICIuJF8= X0VERUZBVUxU IGN1cmxz X0NvbUNhbGxhYmxlV3JhcHBlcg== LnNldFZpZXdwb3J0 IGRlbmQ= IGF1dG91cg== IEZvdXJpZXI= IGJvaWxz IEpQRw== IGRpZ3M= IGNvbXBsYWlucw== LWxpbmVk IEJsYWRlcw== X2RpY3Rz IElwcw== cmVmZXJlcg== IGFueWhvdw== YW50YXI= LXNoZWV0 CXBsYXk= aWVyY2U= Lk1lc3NhZ2luZw== 6KeB CXByb2dyZXNz LkRhdGFWaXN1YWxpemF0aW9u IFN0b3Bz SW50ZXJ2YWxTaW5jZQ== QGJyaWVm LndpbmQ= IGdldElucHV0 IEtB IFJFU1BPTlM= IHRhcmc= dmlzdWFsaXphdGlvbg== IEVzcGHDsQ== bmllcg== IERvdmU= X2lzcg== IEFQUExZ YmVkbw== W117Cg== IGV2YWN1YXRl IG1pY3Jvc2NvcGlj 5q2j56Gu ZXJvdA== LW9wZXJhdGl2ZQ== aWt1dA== IGRibA== IGFqb3V0 Lml4 ICAgICAgICAKICAgIAo= dGVzdGU= bml2ZWw= LnNuYXA= dXR6dA== LmlzQWRtaW4= KElD IG9iZW4= IEVmZmljaWVudA== RERldmljZQ== IGluZGVtbg== IGZyb3pl LHJw IGRlY2VtYmVy 57uZ IG1lbG9kaWVz IEVUQQ== 44GT44KT44Gr44Gh44Gv IHF1YWxjaGU= IHNldERlZmF1bHRDbG9zZU9wZXJhdGlvbg== T1JJQQ== IHphZw== IGFsbG93YW5jZXM= L3Bo LVRva2Vu IFBvdQ== IG1pbmlzdHJpZXM= LkxPR0lO IHNlYXJjaFRlcm0= IGh1cnJpY2FuZXM= IEZsb3Vy IFNVUw== VGhlbWVz cmVlY2U= IGVudHJldg== RFhWRUNUT1I= IEJyZW5kYQ== RXJyb3JNc2c= OildOwo= IGRvbWluYQ== IEludmlzaWJsZQ== PD4oIg== cHV0Yw== SEFWRQ== RXZhbHVhdG9y bWF0Y2hpbmc= LW5hbWVz IGxhaA== X1lVVg== 5pyN5Yqh5Zmo LldSSVRF KTpc LWRlZmluaXRpb24= IGNoaW1uZXk= LmNscw== a25vd2xlZGdl IEFsZXhhbmRyZQ== IGNvbGVn b8WbY2k= LkNobw== IHNvZnRlbmVk IHJvdGF0ZXM= LXN0YXRlcw== 6rc= dmlvbGVudA== IDopCg== IGFjY2nDs24= bmlrYQ== IExhdHRlcg== X0Zsb2F0 IGVncmVnaW91cw== b2RpYWw= U3lub3BzaXM= KHhp IH0sew== Y3h4 RW1tYQ== IENvbmN1cnJlbnRIYXNoTWFw X0NhbWVyYQ== IHBlYW51dHM= 44Kz44Oh44Oz44OI X2JlZA== IGVycm9yQ2FsbGJhY2s= IFBhcHVh LFRydWU= tpo= IHN0YWRpdW1z IGtub2Jz aWZpY2FjaW9uZXM= IHB1cnBvc2VseQ== IFB1cmVDb21wb25lbnQ= INC60LvQuA== LlRyYWNr c3Nj KEpvYg== KEh0dHBDb250ZXh0 IGNob2lzaXI= IOy7 IGF1c3A= dXBwZW4= QWR2ZW50dXJl IEZMQUM= IGFwcGVsbGFudA== ICgoIg== z4c= IHRyaWY= IGR1cmF0aW9ucw== IE5HWA== LmJw YWN0aW9uRGF0ZQ== Lmluc3RhbnQ= LVJlcXVlc3RlZA== JyYm INGH0LXRgA== PWJvb2w= IGxvcmRz bGljaW5n IG1hcmlu IGJsaW5kZWQ= L2xheW91dHM= ZmVpdG8= aXp6bGluZw== RXZ0 IGJ1bGxpc2g= ZXhjbHVzaXZl 4oCZZXM= LmdldE93blByb3BlcnR5RGVzY3JpcHRvcg== IGJhcHRpemVk INGB0LvRg9GH IENlY2ls LmVmZmVjdHM= IGNyeXB0b2dyYXBoaWM= IFZpbGxl dWZ0 IEFudGhlbQ== IHNlZWtlcg== IG5pY2tuYW1lZA== IGNhbXBncm91bmQ= IGFjdGlvbkJhcg== IEVwaXNvZGVz IC0tLS0tLS0tCg== QnVpbGRlckZhY3Rvcnk= X1VOU1VQUE9SVEVE VklMTEU= LlJlZ2lzdHJ5 VG9uaWdodA== IG1ha3M= IGFkZG9ucw== IERlY3J5cHQ= LnNraWxscw== KGZo IGp1Z2c= IENvdXBsZXM= IEFtaXI= ID09PT09PT09PT0= IGVuZGVyZWNv LlN0cmluZ3M= IGhhcm1pbmc= IGJ1c3RsaW5n KGZpcnN0TmFtZQ== LnNwYXJzZQ== SVRP ICAgICAgICAgICAgICANCg== 5p2l5rqQ b2RlZ2E= YW5hZ2Fu LkhhbmRsZXJGdW5j IHRpbmRlcg== ICMo IGltYWdpbmFibGU= IGF1bg== UHJlc2VuY2U= UGFja2FnZU1hbmFnZXI= IGx1ZGljcm91cw== acOobWU= IGdldE9iamVjdA== Ym94aW5n IHNxdWlk w6p0ZXM= RGFlbW9u X2xpa2Vz hrU= Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Lnd3dw== c3NlbA== ZXRlY3Rpb25z ZGFl L2Rvd25sb2Fkcw== IENsYXNzaWZpZXI= X1NVQkpFQ1Q= emVnbw== X0dST1VQUw== YWN0aWNlcw== X2xpdGU= IGRhbm1hcms= L2Js YXB5cnVz VElNRVI= IFNjcmlwdHVyZXM= 0Y/Rgg== c3Bh Ikc= IHBlbmV0cmF0aW5n IGNvbmZvcm1pdHk= bmV3bGluZQ== IGx5bg== IE1NUA== IElOVEVSRkFDRQ== IEFjdGlvblR5cGVz LmNyaXRlcmlh 4buRbmc= IHJlc3RpdHV0aW9u CUZPUg== PHBhdGg= PT8iOwo= KHBlcmNlbnQ= bmRv IEFDTQ== CWN0 QGE= IHTDug== IHNwb3R0aW5n w7xybg== IEdFUg== LndyaXRlVmFsdWU= X2Jsb2NrZWQ= WW1k IGluZWZm IFJhZGlhdGlvbg== IE9pbGVycw== QmVlcg== cm90cw== IFRyb3Q= cm5h cG9ydGVy ZW5lcnk= IHBvcm5vZmlsbQ== 65SU X2Nr LkNvbXB1dGU= IFtdCgoK Z2l1bQ== IFRFTEU= IEluc3RhbmNlcw== Kkk= IHdpcmVUeXBl b25pdW0= ZXNoaXJl IHB1dGNoYXI= IGF3YWtlbmVk LmRlZ3JlZQ== aGVpdGVu LWF3YWl0ZWQ= IG5ldXJvdHJhbnM= LXRlc3RpZA== CgogICAgCg== IOe7kw== IGtpbm8= X0RBWVM= IFZhbGVyaWU= bnRpdHk= QEJlYW4= ZXRDb2Rl PFJlbmRlcmVy IiIK IGJlcm4= IHRvdGFsaXRhcmlhbg== Y2xpbmlj IE3DvG5jaGVu bm9pbnNwZWN0aW9u aXNjZQ== X3R1cGxlcw== LlBvaW50cw== IHBhc3RvcmFs SmFr a2VuaW5n L2NvbHVtbg== LXByb2R1Y2luZw== IGFib2xpc2g= ZmVhcw== cmVzcG9uc2VEYXRh cmVkaXJlY3RUb1JvdXRl IG9ic2VydmF0aW9uYWw= cE5leHQ= enRl Q2hvaWNlcw== CUxDRA== JlM= IGJpbGxpb25haXJlcw== X0VPRg== IGNvaG9ydHM= YW5rZW4= LmNvbWJpbmU= KE9wdGlvbmFs X0NPTlNPTEU= QWN0aXZpdHlJbmRpY2F0b3JWaWV3 IHBoYXJtYWNpc3Q= IERvdWdo IE9wZXJhdGlvbmFs 57I= IGphbXM= U29sbw== CWR1cmF0aW9u LnJt IFRvbmk= LmxlYXZl IHB1ZWRh IEZheQ== RGV0YWNo Lk1heGltaXplQm94 IG1hcnR5cg== IGhhemU= L25l IG1hbW1h c2VsZWN0b3JNZXRob2Q= IHBpbGdyaW1hZ2U= IEFzcGhhbHQ= IHZhbGlkbw== RW5kRWxlbWVudA== IGxhcHNl ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K aWxvcw== ZXJuYWxz Q29ubmVjdGlvbkZhY3Rvcnk= IExvdmluZw== LkNvbXBpbGU= IGNvcms= IEJ5ZQ== aWJOYW1lT3JOaWw= ZXN0YXI= XEdlbmVyYXRlZFZhbHVl KExM IFJhaXNlUHJvcGVydHlDaGFuZ2Vk IElyYW5pYW5z IGdldFByaWNl bWFyaWVz anVtYm90cm9u IFJlYmVscw== RElGRg== IE1vag== b3J0aWM= CWNvbnN0ZXhwcg== bnRw IG1hZ2ljaWFu IHBhdHJpb3Rpc20= LmNl LlNpbXBsZUJ1dHRvbg== IFBSSVY= aGlzdG9pcmU= aGlnaGVy cmVmaXhlcg== Q0pL IE9zd2FsZA== LnNwcml0ZXM= Lkls IGFyY2FuZQ== IENodW4= X09m IGV2ZXJ5dGltZQ== 0Y7RiQ== IGxldHJhcw== aWxhbg== YmFydQ== LWJvdA== IFNpZ25pZmljYW50 iOyKteuLiOuLpA== 4oCM LWlzc3Vl IGluc2FuZWx5 YXRlZ2lj X1ZF OkNHUG9pbnQ= TWFya3M= LnByb2JsZW0= J10uJy8= IHJlZHVuZGFuY3k= IGRlY3J5cHRpb24= SHVuZw== LXZhbGlkYXRl IEFuZ2Vsbw== Sk0= IHBvcG92ZXI= ZGViaXQ= Q29tcHV0ZWRTdHlsZQ== KV9f KHNpbg== ICcpLA== KGRlZnZhcg== w7R0ZQ== VGhhbk9yRXF1YWxUbw== Lnpo KE5vdGU= aWJCdW5kbGVPck5pbA== IFNvbmlh eW1vdXM= 44CCPA== IGZpbG15 IGVhcnRobHk= IExlYXJuZWQ= W3NlY3Rpb24= Lmpzb3Vw c3RydXA= IFBhdHJvbg== ICkq c2V0Rm9udA== IGhlZw== IGRlbHRhWQ== X1NDUg== LmN1dA== IHZiQ3JMZg== Lk9iamVjdE1hcHBlcg== IHLDqXBvbnNl WXU= KCl7fQoK LXBhcmFtZXRlcg== xLFzxLE= aWF6emE= SVpFUw== X1NVUFBMWQ== a2l0cw== IHJlaW5z KGRvY3M= JSE= IHN5c3RlbWN0bA== IFBzcg== IFdlcms= UGhpbGFkZWxwaGlh QlJFQUs= LmFwcGVuZFRv KGxvbg== QWJy L3JlbmRlcmVy IEVsZWFub3I= Q0VSVA== UGFyYW1ldGVyVmFsdWU= JGdldA== IOCy IEpM IGlnbml0ZQ== IGLhuqFu IENhdWw= IGhhc3Rl IGRvbWluZ28= VGVzbGE= L2NvbmZpZ3VyYXRpb24= KGV4cGVjdA== dXNyYQ== IHByZWZlY3Q= IGZyb2dz IGFzc2lnbmFibGU= IGludGVydmVuZWQ= LmNob2ljZXM= VUlTdG9yeWJvYXJkU2VndWU= IGLDqQ== IEzDtnM= YWxwaGFiZXQ= IHByZWFtYmxl ZGJh IGVtaXR0aW5n Lm1vcmU= IEJhc2Vs KGRhdGVUaW1l KCl9KTsK IG5vZGVMaXN0 IEZQR0E= d2Vs IGxvZGFzaA== X2F1dGhlbnRpY2F0aW9u w7NyaW8= KHJ1bnRpbWU= X1NDRU5F IGN1ZmZz IEFkcmVzc2U= Ojw/ X2NtZHM= VMOqbg== IGVqZWN0 CUVSUg== PE8= IEtyYW1lcg== 4oCmCg== c29tZW9uZQ== IENQTA== 77yN bG9ja2luZw== LkZvb3Rlcg== IGFsbQ== IEFkb2xm KS4v IE1hdHRoaWFz ICIsIgo= ZW51aXR5 IExvdmVy IGFsaW1lbnRvcw== cGxldHM= w6R0emU= KHJlY3Y= dXJhYQ== U1RET1VU YW50eg== LkZsb2F0VGVuc29y IFJhZQ== cGln IHRlcnVn IHRoZW9sb2c= IHRheGlz Y29tcG9zaXRl c2hlcg== bGVEYg== IFJhaG1lbg== IDst SW5kZW50ZWQ= IHRyb2xsaW5n RVJJQ0FO Z2V0RW1haWw= X0VOQ09ERQ== Z2V0Q2VsbA== IFdyYXRo KHN1aXRl bm90RW1wdHk= LmdldFJpZ2h0 IGJyZWF0aGFibGU= 44Gf44Gg IHNldFRpbWU= J29wdGlvbnM= IHBheWxvYWRz YXVnYQ== ZWRt KHdlYXRoZXI= CXNlbQ== KGZyb250 IHBheW91dHM= LnNldFRleHR1cmU= LFtdLA== IFBhY2tz IGNhenpv V2l0aFBhdGg= UHJvZw== bW1hcw== IGtvaw== LkNzcw== IGRlbGE= QXdhcmQ= w7xsdA== c291cA== KFsoJw== b2xsaXBvcA== LFNMT1Q= Y2hpYQ== IGJsYW5jbw== T0xVVEU= LXBsYW5l LExpc3Q= eGluZw== SU1BVEU= LW1vcnQ= IGdyYXZpZA== IEhhbmdpbmc= IHNjb2Zm Lml0ZW1JZA== VEhFTg== aW5mZXI= IG1pc3BsYWNlZA== CU1vbm8= d2F5bmU= IGVkZ2Vk X25pY2s= IE1BUlQ= CXN0YXRlbWVudA== IEV2ZW50QnVz PkFib3V0 IGJ1cmdlb25pbmc= IGNpY2xv TE9PUA== IGRlZnk= IGVsZW1lbnRUeXBl IGNvbnNlcnZhdGlzbQ== V2ViSG9zdA== LkRpc2FibGVk IGNsYXA= IEFsZWtz cm9yaW5n aXNzaW9uYWw= LUJvbGQ= SVJUSA== Lml0ZW1WaWV3 cWluZw== P2tleQ== IFZlbm9t IGFudGlk IEZvcm1hdHRpbmc= UVB1c2hCdXR0b24= IEFzc2VtYmx5VGl0bGU= X3Jlc2VydmU= LkRpcmVjdA== QW5pbWU= IG1hdGVyaWFsbHk= IGFkanVuY3Q= LnNldFRvb2xUaXBUZXh0 bGFzc2lhbg== KG5y IG5pbmfDum4= IG1pc3VuZGVyc3RhbmQ= IEFwcGx5aW5n X2NvbXBhdA== IG1peGlu IGplb3BhcmR5 0YvQstCw0LXQvA== IGNvY2luYQ== X1dST05H QVRBUg== S0Q= IGNhdGVnb3J5TmFtZQ== SHR0cENvbnRleHQ= IGJ1YmI= IGFua2xlcw== b3dlcmluZw== RnJhbWV3b3Jrcw== IHNlZ3VuZG9z LkFzc2VtYmx5 X0VudGl0eQ== SFE= IGZvdXJz IGZvcmZlaXR1cmU= dmxhbg== LWRvbWluYXRlZA== LWF3YXk= SUNJRU5U LlJlYWRCeXRl YW1heA== Lj0iPA== X3Nwcml0ZXM= IFJlbWFpbmluZw== TE9PRA== X3JlcXVpcmVtZW50cw== J2FydGljbGU= IFBvbXBlbw== IHTDqXI= IERyb3Bz SG9tZUFz SG9tZUFzVXA= w7ph Lm5hc2E= X2Jpbw== IFlvc2hp RWxlY3Ryb25pYw== IGpvc2U= IGludGVsaWc= ID8+Pjw/ PnshIQ== X3Byb3Y= PURC PCEtLQo= LWZsb2F0aW5n eXVt LkpNZW51SXRlbQ== IE5hdGlvbndpZGU= SW1wb3NzaWJsZQ== 6K+m5oOF SmVycnk= IGRlc2Nhcmdhcg== 7JW8 RGVjcnlwdA== IHRlbXBlcmVk IGVrcw== w61jaWE= Lmxhcmdl IHVuZm9sZHM= IGh2ZXI= IEFWTA== LnR0 4oKA PSUu IHRvcHBpbmdz IHN0b3V0 IHNlbWluYWw= eGVz IE9VVEVS YWRybw== IHlvaw== IERlcmU= CWZyZW9wZW4= X2xuZw== Q2h1bmtz LmdldE9yRWxzZQ== KGVsbQ== ICgpKTsKCg== Q2VsZWJy X2NhcGFiaWxpdHk= IHNvY2llZGFk IGludGltaWRhdGU= IEJsYXplcnM= aWd0aA== ZW5kY29kZQ== VUlMREVS IEhhbm5pdHk= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K INC40YHQv9C+0LvRjNC3 IFRvb2s= IE1vdmVk IHByb250bw== IE1hcnRpbnM= RGF0YUV4Y2hhbmdl LlBvb2w= ZXVz IGpvYklk IEF4ZXM= IGhhbXN0cmluZw== LnJtaQ== RGF0YVRhc2s= IE1hZ2ljTW9jaw== IEdBUw== IE5hdw== IHNuZWw= X3NjZW5hcmlv IGVtYWlsQWRkcmVzcw== IE11c3M= IHBob2VuaXg= IGRlbnNpdGllcw== IE1hY09T cmVtYQ== IHRlc3RlcnM= KT87Cgo= IHB1cHM= bGFwcw== ZGRi L1BlYWs= IGJhY2tzdGFnZQ== IGJhY2tCdXR0b24= KG5hdg== eEFF c3RyY3B5 aWNodGV0 IFJpZg== 4LiB4Lij IGhvbm91cmVk IGdyYXBwbGluZw== VmVydGV4QnVmZmVy LmdldEFjY291bnQ= LU5ldw== IG9wcHJlc3M= IHV0dGVyZWQ= IFVTQUdF X0xFQVZF X2NvbGxlY3Rpb25z X1V0aWw= KCIiKSk7Cg== IHF1aWV0ZXI= YCksCg== IHR5cGVJZA== IHNlcmlm c3RhbGs= IHByaW1hcnlTdGFnZQ== eEVB Ok5TTGF5b3V0 X1JC X0FQUFM= U0tV KnNjYWxl IENvdWdhcg== CVJFVFVSTg== aWZpw6k= dGltaW5n IGlkb2xz 656Y7Iqk 4oCUaWY= KGZvcm1hdHRlcg== IGFtYWxn c2V0V2lkdGg= LG1pZA== b3JlYWw= LlJvbGVz IGRldmVs IGdldEluZGV4 IHN0b29scw== IHNub3d5 IGdyYW5kaQ== 0Y/QtdC8 aWd1aWVudGU= 0LrQvtCy IEN1dHRlcg== cm9zY29wZQ== YWlyYQ== 0YPRgNGB IHRhYmVs IGRlZmlhbmNl LlRvQm9vbGVhbg== IHBlcmc= LWNvbW11bml0eQ== IHB1cnN1aXRz KG1ldHJpY3M= TXVzbGlt IFJpeWFkaA== IOKCuQ== LldlYkVsZW1lbnQ= IEhhcmRlbg== IENvcnJ1cHRpb24= IEFl IFRhbm5lcg== IGluZGVi IENoYXJnaW5n X1BST0Q= IOKTmA== IGNlbnRlclg= dHlwaW5n IHV4 IFRvZQ== CWxvb3A= Zmxv UmVnaW9uYWw= X2Fh IHZpZXdwb2ludHM= PnRoaXM= LXJlc291cmNlcw== IEltYW0= IFNoaXY= IGFuZHJh UkVRVUlSRUQ= IHNlZWRlZA== dW1vbnQ= IHRvYXN0ZXI= IGhvbWVzY2hvb2w= 24zYsQ== X2V4dHJhY3Rvcg== bW9kZXM= IE11bmRv X2ZpcmVzdG9yZQ== IHB1bmlzaG1lbnRz IGJvcmVkb20= anVyaWVz LlNhZmU= YW1iaXF1ZQ== IGFkdmVyc2l0eQ== VUxFUg== IGFuYWxzZXg= bW9ycGg= IE9tbg== KCkiPgo= IEdJVkVO U3o= IG5vdW5z IHF1YW0= IFdpa2ltZWRpYQ== IGR6aWV3Y3o= LmNvbW11bmlj Q291cmllcg== Qm9uZA== LmNvbW11bmljYXRpb24= LlByZWZlcmVuY2U= c2xpZGVEb3du L2djYw== IHZpYmVz QVBJVmlldw== IE92ZXJzaWdodA== X3Zr IGVtcHJlcw== IGFyaXNlbg== ICovKQ== KCcoJw== IGJ0dw== IGNvbmV4acOzbg== IFV6YmVr IOyEnA== IGltYWdlVVJM 44Kq c3RvcHBlZA== IFdvdWxkbg== IENoZXc= Z3LDqQ== IHRydXRoZnVs IFRyYW5zcGFyZW50 KHNlcnY= IE1jS2F5 PXJlYWQ= IFNhbw== CUdyaWQ= IGluZHVjZXM= Lmxpc3RGaWxlcw== IGNhcnJlcmE= IGljb25OYW1l IENhcmx0b24= LkV2ZW50VHlwZQ== IGRyYXBlZA== X1NBTVBMRVM= KGVzdA== IFJ1aXo= IGNhcHRhaW5z IG1hZmlh IFJhcGhhZWw= IEdBUA== aW1wYW4= Y29taWM= IG1hbnRlbg== JEw= IGFmdGVybWFya2V0 15c= IENm CXRpbGU= QXBwU3RhdGU= IHdob2xlc2FsZXJz bG93ZXN0 RGVtb2NyYXRpYw== IHBvd2VyaW5n YXBvdA== IENvcnRleA== KHNpbmdsZQ== b3BoeXNpY2Fs LnV0Zg== 77yf44CN IHRhcmVh RXF1aXA= IGtsaWs= IHJ1YQ== IGFWYWx1ZQ== IE1pbmVy IFZlZw== YW55bA== Q293 QGM= X0xPQURFRA== IEFITA== d2FrZQ== LkxvZ0luZm9ybWF0aW9u KGNhdGVnb3JpZXM= IFFVRVNUSU9O LnVtbA== IENyZWF0ZU1hcA== bWVlcg== IHJlbmNvbnRyZXI= X3N1 IGF0bGVhc3Q= KFByb3BlcnR5TmFtZQ== IFlhbw== IEhhdXB0 QmxvY2tTaXpl IFNBQw== IExlZ3M= Yml0ZQ== IGxvZ2FyaXRo IElNZXNzYWdl QmFja2Ryb3A= IGdkaw== 7Jy866m0 LmV4Y2x1ZGU= QURPUw== LXNoaWZ0 YXRobGV0ZQ== X2NvbWJpbmVk IHJlYmF0ZQ== IHBhcmQ= IGltcGVkYW5jZQ== cmVhdQ== Xw0KDQo= IGRhZ2Vu a2VsYXM= IGluZ3Jlc2Fy IEJSQU5E Lm1rZGlycw== IHJlaWduaW5n VGFsa2luZw== LyoqCgo= X1JFU09VUkNFUw== IFBST0dNRU0= IGRhdGFTaXpl 44Og ZGVueQ== SVJT IHRlbGV2aXM= PV8oJw== ZWdpcw== PD8s IHVwc2V0dGluZw== IHNhdWNlcw== IHB1ZXJ0bw== IFZvZ3Vl aWRpbmU= IEdyZWVud29vZA== emlvbg== L3F0 5bGA Lmxhbmd1YWdlcw== IFBsYXlib3k= b25uZW1lbnQ= IFBvc2l0aW9uZWQ= IOS4uw== IEZyaXR6 SW5pdGlhbGx5 bm9kZVZhbHVl X1RSSUFOR0xFUw== LWJhY2tlbmQ= dG9JU09TdHJpbmc= IEdvdmVybm9ycw== WUxPTg== Lk9SREVS RE9J IENoZXZyb24= IGRlY2tpbmc= IFNoYXJpYQ== b3RoZXJtYWw= RW1wdHlFbnRyaWVz KEluaXRpYWxpemVk ZG9yZg== Lmx1 KFJvb20= LlllbGxvdw== IEFicmFt X2xt INC90LDQvw== IFRIQU4= fi1+LX4tfi0= Lk92ZXJyaWRl IFNWTQ== IFN1c3BlbnNpb24= IGFic29yYnM= X3RyYWZmaWM= ICI+Ig== LmZpdHM= IHJlaW5mb3JjaW5n IG1veWVu ZXJlcg== IFJvc2Vuc3RlaW4= IFdlc3Rvbg== IGNvbmZpbmVz T0xB b3JyYWluZQ== X0dSUA== IHN0cmFwcGVk IG1pbmdsZQ== CVZr IG5vc3RyYQ== IGFjdHJlc3Nlcw== IFNhbW15 bGlnbmU= SUdITElHSFQ= IHN0dXA= aWN0b3J5 IGNvbnZpY3Q= IHN1cHA= cGVvbg== dnJpZXI= IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IHRyb3R6 IG1lbHRkb3du YXJrZXJz LlNlbGVjdENvbW1hbmQ= IExpYWJpbGl0eQ== IEJlY2FtZQ== IGx1Y2tpbHk= INC/0L7RgA== IHJlYXNzdXJl IENvbnRyYXN0 IEF1ZHJleQ== IENvbnN1bHRhbnRz IFF1ZW50aW4= LU93bmVk b2NyaW4= X1NUUklQ IHJldGFsaQ== IHJhbGx5aW5n IFJlcXVlc3RDb250ZXh0 IG1hc3NhYw== CWdy TEVF IGNhxYI= IEpvYW5uYQ== 4butYQ== aGho IHNxbFNlc3Npb24= xLFrbA== Q29tcG9zZXI= IGN1cnJlbnRQbGF5ZXI= YWdpbmk= IEJhcmJhcg== IEhlbGxvV29ybGQ= bG9vbWJlcmc= LkhlcmU= IGRpc2d1c3RlZA== CQkJCQkJICAgIA== b2t1cw== VmV0ZXI= IGNob3Bz IEZPUldBUkQ= IEVpZw== IFBhcnRpYWxWaWV3 IGltcG9zcw== IGNvbnNlcXVlbnRpYWw= IFsnIw== CWxvZ2dpbmc= IEVsaXM= cHJvY3M= LDwv X3BpbnM= XERvY3RyaW5l VXZz IEdJVA== IHRhaA== KHJ1bGVz Y3JlYXRlRnJvbQ== ICctJykK aGFuZGxpbmc= ZXh0ZXJuYWxBY3Rpb25Db2Rl Uk9EVUNUSU9O Rm9yUmVzb3VyY2U= c2J1cmc= PFRleHRWaWV3 dGhpbmthYmxl YW5nbGluZw== ICJ9XA== UFJT QXBwcm92YWw= IGtsaWVudA== bm91bg== IERpYW1vbmRz SEc= IFRyaWJhbA== LnB4 IHByb3BOYW1l IGhlbHk= 0LvQuNGH IEJvdXRpcXVl Iik7fQo= L2hvc3Q= IHN0YXR1c0Jhcg== PkRhdGE= IGRpc2NvbnRlbnQ= IGZyYWls LmVsZW1lbnRBdA== IGVtYW5j CWZ1bg== YXR0bGVz IHByb3B1bHNpb24= IGludGVyY2hhbmdlYWJsZQ== IFRhbWJpw6lu IHZlbmVy X0xPV0VS IHBkbw== IGRldGVyZ2VudA== IHRhdmVybg== VmVudWU= Lmphc3Blcg== eXR0 IEppaGFk 4oCZw6A= IG1lZGlhUGxheWVy P3A= cGNm YW5kb25lZA== IHJlY2ViZXI= T1RQ KGlPUw== KCckew== UHRz IG1hbmFnZXJpYWw= IFR1ZA== IFdFTEw= b3pl IEFudG9pbmU= IFxcCg== IFZlY3Q= IFdpbWJsZWRvbg== aXNtZXQ= IGJvdGhlcmluZw== aW9zaXM= Z2V0TWV0aG9k IGlucHV0RGF0YQ== IEJpbmRlcg== IGRjdA== w6Fsbg== X0JPTEQ= IEp1Z2VuZA== IEJlZ2lubmVycw== aW9tcw== IHJlbGVudGxlc3NseQ== IE1vbmRheXM= 5LyY VG9tb3Jyb3c= IFNhbXA= XFBlcnNpc3RlbmNl TUFTVEVS KHByZWRpY3Rpb25z KG51bWVybw== LnR3aXRjaA== LlJlc3RyaWN0 IFpa IE1MTQ== LlNtYWxs XWJ5dGU= IFZpZXdQYWdlcg== IEFnZW5jaWVz IHBhcnRpY2lwYXRlcw== IGluaXRXaXRoU3R5bGU= JVg= IGAs Lk9iag== ID8iKTsK Q2FyZWVy IDwlPQ== a3Vs Q3BwSQ== IE11c2hyb29t dXJhdA== bWlh Q2Q= YXJkdWlubw== IGNvdW50cnlDb2Rl X3BsYWNlbWVudA== KCI9PT09PT09PT09PT09PT09 LWJlbA== QXNzZXJ0aW9ucw== IHByw7N4aW1h KCkiKQo= X2Vn U1NJUA== dXpl cGxhY2Vy YW1iaWd1b3Vz X0lOSVRJQUxJWkVS IEhhdHM= IEdPT0dMRQ== IGFnaXRhdGlvbg== KG11dGV4 SElHSA== OiIp IGludmFkZXJz ICl9Cgo= Lm1hbnVhbA== IFNpZW1lbnM= CUpQYW5lbA== YmluZHVuZw== ZWNlcmE= L21ldA== IMOpYw== KHN0YXRpb24= IHBvc2ljacOzbg== X2lzc3Vlcw== X2FsaWFzZXM= X3RvcG9sb2d5 IEF1dG9kZXNr QWNrbm93bGVk ISpcCg== IEZyZWlnaHQ= IEZYTUxMb2FkZXI= aWNoZWw= KENoYXRDb2xvcg== IGRpc3NvY2k= IGFuYWxvZ3Vl PHVzaXpl LWV2 IHRlbmRy PkFsbA== IFVTRVJT LnJlc3A= X2ludGVncmF0aW9u RGlzcGxheVN0eWxl RkFJTFVSRQ== 0YfQuNGC aWxkZWQ= X3NlbWFwaG9yZQ== YWNhZGVtaWM= IHNjbGVyb3Npcw== RmFs LHN0 YD0= aWZ0b24= IHN1YnN0aXR1dGVz IFN1cHBvcnRlcnM= YXBwbGljYW50 KGt2 IEJlcm11ZGE= IGRpc2NyZXBhbmNpZXM= LlNvbGlk d2VlbmV5 IGd1bA== IGZpbGV0eXBl IHJlc3VsdGF0 U2VuZGVySWQ= IGdlem9jaHQ= IEJlcmtzaGlyZQ== ICgiPA== KG1s KHNoaWZ0 X1JFRElSRUNU T0xPTg== L2Jyb3dzZQ== Ok5TTWFrZVJhbmdl IHdhaXZl IGV4Y2U= IGNhdGFsb2dz 5Lmm aWxsaW9ucw== LkdldEN1cnJlbnRNZXRob2Q= IGJpbGluZ3VhbA== IENhc2NhZGVUeXBl CVRyYW5zZm9ybQ== X0NVU1RPTUVS aXNpZnk= INCx0Ls= IFdob2V2ZXI= IEVBUg== IFs9Ww== INC80L7QttC90L4= IGphcmRpbg== QHNob3c= IGhlaXJz IGFiYW5kb25tZW50 IFRyYW5zY3JpcHQ= XV4= OlNldFBvaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= IEZhY3Rpb24= KGVudGl0aWVz ZmFjdGlvbg== bXR4 X3JlY2FsbA== Lk5VTEw= Lm9wdGlvbmFs KHByZWRpY3Rpb24= QUdFTlQ= IPCfmIA= 4oCZeQ== 4oCZdXRpbA== IGFuZ3N0 LkV4cGVyaW1lbnRhbA== aG9vdA== YXN5YXJhaw== YXV0b3BsYXk= IFNwbGFzaFNjcmVlbg== IGhlY3RpYw== IG1ldGljdWxvdXNseQ== IGNvbWVy S2VpdGg= IGZyYXNl X1VOSVFVRQ== Lk1hZ2VudGE= KE1heA== IHNjYWxlWQ== IHB1dHQ= KElG IEFQUExF UG9ybm8= LmFkZENlbGw= IG1vbHQ= Y2hpbXA= IGxlZ2dpbmdz IGZsb3A= 4oCZaHVp UlRPUw== L3NwYW4= LmJlZA== LkxvZ2lj IHVudHJhbnNsYXRlZA== Q0xFQVI= O2xlZnQ= IEJGUw== LWdyb3Vwcw== dG9vaw== X2FjY2VwdGVk IGNhc2hpZXI= ZXZlbnRJZA== IGRvd25ncmFkZQ== CQkJCQkJCQkJCQkK 0LDQvdC40Y4= w6RuZGU= IGNvdW5jaWxsb3I= IGRyZWQ= ZFQ= V1JBUFBFUg== Lm9s 5LiA6aG1 TUVB IGtpbmV0aWNz IGptcA== X2ZsaWdodA== RmVhcg== IENoYW5lbA== X21pZ3JhdGlvbg== aGRs ZXJlcXVpc2l0ZQ== LnJhcg== LU9uZQ== IHNoZXBoZXJk LmVhc2luZw== KGRlc2NyaXB0b3I= IHN1YnRvdGFs 44OT Q29tcGlsZWQ= IENvbHQ= ZGxl L21vY2s= KXJvdw== IHJlc2V0dA== dGVybw== IGFlcm9iaWM= LmludHJv IGNoZWNrYm94ZXM= IE1jQ2FydG5leQ== IENseWRl 77yM5bm2 Y29vbGRvd24= LWluc3RhZ3JhbQ== IE1QRw== IExlaXN1cmU= IG5hd2V0 IE5YVA== UmVndWxhckV4cHJlc3Npb24= IHJhdmU= QklMTA== IGJhcnRlbmRlcg== RW5sYXJnZQ== IHZhaXM= IDoKCgoK LkVuZHBvaW50 ICIsDQo= fX0iPnt7JA== dHJlZXM= LmVuZw== KmxvZw== OltdLAo= IGJhdHRhbGlvbg== U3ViamVjdHM= IGV4cG9zaXRpb24= IFRvYXN0cg== IHRvcExldmVs IENFTA== IGd1YmVybg== dW5zdWJzY3JpYmU= Y29uYQ== X2FwcHJveA== VFo= IFRyZWVTZXQ= LmNvbW11bml0eQ== IG5hcnJvd2Vy KEV4cGVjdGVk Q2xy IGdvcmU= IGFjcXVpdHRlZA== IEVVUk8= G1s= IHJlcHVibGljYW4= IGF1dG9iaW9ncmFwaHk= X2Zkcw== Q29sbGFwc2Vk IA0KIA0K LXBpbGxz TUJFRA== IGlOZEV4 IHJlc3BvbnNlVHlwZQ== Z2xmdw== LXR1cm5lZA== 5Y+R5biD CUJvb2xlYW4= Lk9y aW5pYQ== IGhvdmVyZWQ= IHNvcnRlcg== IE5o IEV4ZXJjaXNlcw== bGVtZW50cw== aWRvbg== VG9l IHLDqWbDqQ== U1NGV29ya2Jvb2s= IG9yZ2FuaXNlcnM= IHJlc3VsdE1hcA== X0hPUg== RG9k TG9jYWxTdG9yYWdl IGpzb25SZXNwb25zZQ== QXV0aFNlcnZpY2U= IHNtZQ== ZW1icm9z IGxvYmJ5aXN0 b2d1aQ== LnNwaW4= IENvcnJlY3Rpb25z X1JBRA== IExTTQ== KGN1cnJlbmN5 IOaA IHByZWZldGNo LkhlYWQ= LXJlYWRlcg== IFJveg== CW1vdXNl IFRMQw== IFFUYWJsZVdpZGdldEl0ZW0= IFNUT1JBR0U= YW5uZWVy IOyXkA== YWNlbg== U1g= SW1hZ2VSZWxhdGlvbg== IHJlc3VyZ2VuY2U= aXp6eQ== aWxvZ3Vl SVZBTA== IHNtYWNr cnJoYQ== KFBBUkFN IUk= IE1lY2g= IElNYXBwZXI= IGdpc3Q= IFBPRA== dm9yZQ== dWxhw6fDo28= ICwt IGludm9sdW50YXJ5 UVJT PXRpdGxl IEJpb20= IFNoZWxsZXk= IENTUA== UGVz ZHJvcHM= INGD0YHQv9C10Yg= ZGl2ZXM= IVsK IExlYXN0 IGtha28= IE1vZGVsbw== IGZ1bmN0aW9uTmFtZQ== IGNob2tpbmc= IGRlZm9ybWF0aW9u JywnJyk7Cg== Y2HDp8Ojbw== IHNxdWlycmVs c2V0QmFja2dyb3VuZA== QnJva2Vu cG9saXQ= Tm9uY2U= IGtleWVk TWVzaFBybw== LnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ= IGZsdXNoaW5n IGJwcA== IEFuZ2xpYw== VHJvdQ== IFdhbHRlcnM= IHN0dXR0ZXI= SGlw X3dhcg== aXZlbWVudA== Q29ybg== IHVuZHVl YXBhdGthbg== IG1pbmRlbg== c2lnbmlmaWNhbnQ= KHF1YW50aXR5 JGluc2VydA== IEFMRVJU LlVuaWNvZGU= aWhu XTo9 IHBpbk1vZGU= IGZyYWlz aW50ZXJwcmV0ZXI= J2FjdGlvbg== IGJsZWliZW4= obQ= cm93c2Vycw== R0lU X0RJUlM= Rm9yZXZlcg== IFBkZlBDZWxs fG0= LnNldEhlaWdodA== IGZvcmVhcm0= IGJhdHRsZWdyb3VuZA== INC/0L7RgdC70LXQtA== IEhhdGg= IEF1dGhvcml6ZWQ= IGNvbmZlcnJlZA== IEJPVFRPTQ== LmdldEZsb2F0 b2dyYXBoZWQ= YXJkeQ== IHNlcnZpw6dv b3RveGlj L2F1dGhlbnRpY2F0aW9u IHJlcHLDqXNlbnQ= IGNvbXBsZXhpb24= CUNvbW1vbg== X2Jo V2hvbGU= SW1hZ2VEYXRh IHRpbms= ZXF1YWxUbw== IFRIUg== IGRlbHRhcw== IEFHRQ== aXphZG9y YWRtaW5pc3RyYXRpb24= cXVldHM= X2ZpbGxlZA== IEjDpA== YWxsb2Nh IEJvb25l CWxjZA== Rm9sZGVyUGF0aA== LlJhaXNl XyN7 ZXJ0aW5v IFRocm9uZQ== 4K6/ b3hldGluZQ== cHJheQ== IGRpbGlnZW50bHk= IEFyY2hpZQ== Lm11bHRpcGFydA== IHNlbw== LmdldFByb2plY3Q= IHBhag== Y2xlcm9zaXM= YW1lcm9u IHRvdXJlZA== IG5pa2U= IEJha2VyeQ== LHBhcmVudA== X1RFTQ== U3BhdGlhbA== bGFwcGluZw== UHJvZHVjZXNSZXNwb25zZVR5cGU= KGJhbGFuY2U= SHVuZHJlZHM= LXRlcm1pbmFs IkRv Q29udGVudFNpemU= IGJiYw== IGTDqWNvdXZyaXI= dXRpbHVz LnVuZG8= LG91dHB1dA== Z3JvdXBOYW1l JG1heA== IEFsbGE= INC60LDRgNGC Lk9ORQ== X2RlY2lzaW9u RUVFRQ== IHhPZmZzZXQ= 56o= IHJ1bmF3YXk= IGhhbmRqb2I= IGdlbml0YWxz KGpUZXh0RmllbGQ= LnJhZGlhbnM= IFBhZHJlcw== ZGVwZW5kZW5jZQ== IHN3YWxsb3dpbmc= cm90ZWlu IGZsZWV0cw== IGNhcmF0dGVy KGNhbg== IEZsb3JhbA== X01zZw== IGRlY2xhcmFjacOzbg== bHNydQ== c2Nob29scw== IGRlbGVnYXRlZA== IFBlbmFs IENoZXJu U21hcnRQb2ludGVy c3Rvcnlib29r IE55bG9u 5oCd X0xFU1M= L2FkZHJlc3M= IENPUlM= IOydtOuvuA== IG1vZGE= bWRw IGRlcmJ5 IFBoYXJtYWNldXRpY2Fscw== IGV5ZWQ= X2NwdXM= 6KaL fHwK Lm1hZw== KFFM IENpdmlsaXphdGlvbg== 6Yw= X0RlcA== IHN3ZWFyaW5n IFNob3J0cw== dWViYXM= IGRlbGluZQ== IEFkdmlzb3Jz IOyeiOuLpA== X0ZJTkU= fSk6 LGFzc2lnbg== IFBDSWU= e3t7 U2Np IGFtYm9z aWxlZW4= IHR1bmVy IHBhcmFtTmFtZQ== LHRvdGFs KExvY2FsRGF0ZQ== IHNwcA== IGVycm9yZXM= IEhlbHBpbmc= X21lcmdlZA== LnRpbWVTY2FsZQ== X0VMRU0= X1NPTA== IGF2ZW50 PGQ= SnVuaW9y CWJhcg== Lmx2 IOy5 PXd4 IG1pcmFjdWxvdXM= IFJhbmRvbUZvcmVzdA== IEZyYW5rZW4= YGAs KEluaXRpYWxpemVkVHlwZUluZm8= IHN1cGVyaGVyb2Vz IGFuc2libGU= X1R5cGVEZWY= IFBlcm0= T0xFUg== R3Jhbg== LW5vdGlmaWNhdGlvbg== IGtheg== IGV4aGlsYXI= c2VydGVy IHN0b3JlZnJvbnQ= X2VuZHM= IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK CWdpdA== RFNQ Q0hBSU4= rLQ= SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbg== IFNseQ== 77yaPA== QnJpdGFpbg== L3NsaWRlcg== IHptcQ== IGJhag== YnJlZA== LlZBTFVF IGdyaWV2aW5n IHBvcm7DtHM= aWd1YQ== SU5DTFVERUQ= V2FrZQ== Y2Jk IE1vbmdvbGlh aW52aXNpYmxl IGNvcnJlY3RpdmU= IGNlbnRlcnBpZWNl Q2F1Z2h0 IGthcmFrdGVy YWxtw7Y= IGJlbHVt IGFkam9pbmluZw== Pygi IFZpc3VhbGl6YXRpb24= a2tl aWZpY2Fkb3M= c3Bk X0NCQw== LUxhbmd1YWdl IHN0aWw= b3JldGljYWw= KGNvbXBsZXRpb24= IFZlcmbDvGd1bmc= X1RyZWU= cmlwcGxpbmc= LlJlbW92ZUVtcHR5RW50cmllcw== IFRBWA== CUNvZGU= 5YuV dXJnYQ== INGD0LbQtQ== IGFpZGVy IFByZXNjb3R0 IGZpbGFtZW50 IC0tLS0tLS0tLS0tLS0tLS0tLS0t dGhlcm9z 0LXRgNCw ZGViaWFu w6RobA== b2xhaA== X1VOSVRT QXJr TW91bnRlZA== LlRyaW1TcGFjZQ== LmdldE51bWJlcg== X2VvZg== Lm5y IFNIQVJFUw== aWxhdGVy IHdpY2h0 X2NvbXBhcmlzb24= ICki Y2xpbmljYWw= IFRFbnRpdHk= dmVuZXM= LmdldFByb3BlcnRpZXM= IHJlbGF0 IGFubm95YW5jZQ== YmVi IGFuZXN0aGVzaWE= X2ludGVydmFscw== X2Zo IHN1ZG9rdQ== IGRpc2Vu Y29ubmVjdGluZw== IG9h IOKWkQ== WkY= IGN1eg== U09FVkVS IE3DtmdsaWNoa2VpdA== Y2hhcnRlZA== IGhhc2hlcg== IEtlZXBz QUVB CWxvZ3J1cw== CU5hbWVzcGFjZQ== b3J0aG8= JGFjdGlvbg== IFJvYw== Jyk7Pz4i IFBST1Q= QGFwaQ== Y2hzZWw= L2dpZg== KEhhbmRsZQ== IGFudW5jaQ== L3B5 aW52YWxpZGF0ZQ== IE1FUA== dGVtcw== O10v 6IM= 6L+Q IHRhY28= QURW aHBw QnV0dG9uQ2xpY2s= IGJyaW5nZW4= IFRJTUVPVVQ= IGFzdHJvbG9neQ== ZGF0ZUZvcm1hdA== T0dSQVBI RmlsZVN0cmVhbQ== 5a6h5qC4 LkNvbW0= J2I= IEdFVEdMT0JBTA== ZWF0aW5n YW5kZXN0 IFNFVFVQ IEFkdmFuY2Vz LnNjcm9sbEhlaWdodA== QVpF ZW5kdGltZQ== d2VhdGhlcm1hcA== IE1hbmdv IFJJUA== IGl0ZXJhdG9ycw== IGNvYXg= IOWbvg== PG1haW4= cm1z cGNi IHZhY2NpbmF0aW9ucw== IGRpc2FncmVlbWVudHM= CWV2ZW50cw== PExvY2F0aW9u Lk1lYXN1cmU= IHF1ZWRh IHNpZ25hbGxpbmc= IGRlZ3JhZGVk IEFtZWxpYQ== LWNvbmZpZGVuY2U= ZGJOYW1l X2luYWN0aXZl b25hdGlvbg== IHBlcmlwaGVyYWxz 5qC3 U1VQRVI= J1I= LndheQ== UExBSU4= IEVuZ2Vs cmVsYXk= IGRlYmlkbw== IFRyb3Rza3k= 6Iw= INCw0LTRgNC10YE= CXVzZXJz ZXRjaHVw dGVw IG5ld1Bvc2l0aW9u IHdhaXZlcnM= ZWRpY2luZQ== IHRhbmdnYWw= IGFtbW9uaWE= LWRldA== L2V4ZWM= KHBhZGRpbmc= IFNob3BwaW5nQ2FydA== IFByaW50Zg== SGFuZGxlZA== IE5BTUVT KGNsb2Nr IHt9Og== IHNpbXM= IFRlYXJz IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= X0NBTk5PVA== TEVHUk8= LlNldFBhcmVudA== 5YW25Lit IGVycmV1cg== aXBp PEV4cHJlc3Npb24= LnRpbWVsaW5l ICdfJyw= IGNvYXRpbmdz IHVzZUZvcm0= LnRr IEZlYXN0 LlNL w6RzZW50 Y2h3aXR6 IGludmVudGl2ZQ== IE1laQ== IHZlc3RpYg== IG7DpGNoc3Rlbg== L2JpZw== IHJldHJlYXRlZA== IHByb3BhbmU= dmljdGlt QWt0 IFByZXNlcnZhdGlvbg== IFBpcw== X1NIQURPVw== IHByaWNlbGVzcw== csOzZA== b2JibGVk IHJvbGVOYW1l IEdEUFI= ICciLA== Q2VudHJl QXJjaGl0ZWN0dXJl Q3BwQ2xhc3M= IG1hdHRyZXNzZXM= IGJlZXA= IERhbWlhbg== 5p2D6ZmQ YmV0dA== X2Flcw== KGNlbGxz IOuwsOyXtA== IGJpdG1hc2s= Y291bGRu LW5vdw== IGlubm92YXRl IGhhY2Vu IEx5b25z dGhpY2tuZXNz IHdoaXN0bGVibG93ZXI= JGZpbHRlcg== IGV1bGVy IEhhcm0= IGxlZHM= IEtlbHZpbg== LnF1aWNr IEzDs3Bleg== cmV2ZQ== IG5pZ2VyaWE= IGp5bGxhbmQ= LmVtcHR5TGlzdA== IHVuc2V0dGxpbmc= dXNiYW5k IHRyYWNrZXJz PVwiIjsK IGNvbnRpbnVh IE51bWVybw== ZW5kb24= IEdlcnJ5 LlRPRE8= UmVwZWF0ZWQ= IFNlcmVuYQ== 0LjQvNCw0LvRjA== cHJvZmls INCy0YHQtdGF QGFkbWlu LkxpbmVz IHRyYW5zbWlzc2lvbnM= IGNq YW7Dp2E= 5Yig6Zmk5oiQ5Yqf IGdldE1lbnVJbmZsYXRlcg== dWZyZXE= IE1hdGhlbWF0aWNhbA== TmF2aWdhdG9yTW92ZQ== IGZ3ZA== dW5pdHRlc3Q= IHN5bnRoZXNpemVk IGNyZWVk KEZyYW1l cHN5Y2g= dm9k dUM= 4bqndQ== IOKAnOKApg== IGtyYXQ= ZHJhd2FibGU= w6ZyZQ== PXRvcA== KExvZ2dlcg== RXJyb3JFeGNlcHRpb24= YWlzYWw= L3dz dWxsZWQ= QVJJTkc= IG5JbmRleA== IGludGVybmFscw== IGVmZmljaWVuY2llcw== ICNA X2JyaWdodG5lc3M= X25vcm1hbHM= IFN0b3V0 IHVudmVpbA== IFNob3Rz LWNvbXBhbnk= X2VsdA== KGRsbGV4cG9ydA== IHByb2R1Y2Npw7Nu Q2lzY28= Qmxha2U= LW1vdXRo UGVhcg== INC00L7RgdGC0YPQvw== IEpBQ0s= IO2YuA== IHN0b3B3b3Jkcw== IFRlc3M= IHBvc3Rl cmF6aWVy 6K0= TWVzc2FnaW5n t+aWsA== VGFtYmFo IG5hcmNvdGljcw== IGNhbXBlcg== IHRyaXBvZA== IGdsRW5k IGdpb2M= Y29tYmU= VXNlclJvbGU= VWw= RXF1aXZhbGVudA== IGdub21l IEZ1w58= cGFja2FnZU5hbWU= X3Vl RGlzY2xvc3VyZQ== YW1hdGU= X3RlbnNvcnM= IEthdGhyeW4= X0Jhcg== VGhyZWFkSWQ= IHZlcmlmaWNh LmFzc2VydE51bGw= IE9kaW4= YsOp INGB0L7RgdGC IGp0 LlNlbGVjdGVkSXRlbXM= IGFjdGlvbmFibGU= IFJlZ2FyZHM= aGVr Om51bWVs LEdM IFBIT05F CURlZmF1bHQ= IGVsYXN0 IGJlY2s= PWNyZWF0ZQ== OicK YXJodXM= bW9kaWZpZXJz aW50cHRy IHByb3Bpbw== 77yI56yR IHJlcXVlc3RPcHRpb25z IGltcGxpYw== IGR1cm8= IFBDUw== RGVsaW1pdGVy KGxvZ2l0cw== LkVWVA== V2l0aENvbnRleHQ= IG9sdHJl X0VYRUNVVEU= b2xpY2l0ZWQ= X0VudGVy L2Zyb20= INGB0LvQvtCy IEhvcm0= dWliTW9kYWw= X0lORklOSVRZ 77yM44CK VUdJTlM= T05HTA== LGJ1Zg== IHBvdXJyYWl0 cGo= KGN1YmU= IHVnbA== IFNhd3llcg== SUZFU1Q= QXBpcw== IENvcmVEYXRh IHNlc2FtZQ== LnB0aA== LmdldFVzZXJOYW1l Y2FzZWQ= IHZhbmlzaA== X0FwaQ== Ly86 L25vbg== LmRvY2tlcg== LnNp YWxlcnRz IGludGVzdGluZQ== cGFydGljaXBhbnRz LXZpc2libGU= ZW1zcA== bXVl X3B2 IENyaQ== b2dyYQ== X2V4cGVyaWVuY2U= IElOVEVSVkFM X3JlZ3Jlc3Npb24= 7ZWY7IS47JqU ZW5kZXJlY28= bGF0YWJsZQ== LmxvY2FsdGltZQ== IEJJVFM= IEZvbGRpbmc= CSAJCQ== w6lzZQ== LWJlYXJpbmc= IFhQQVI= T1BTSVM= J14kJyw= aW5jbA== IE9wcmFo IGJvb3Rocw== IFJvaGluZw== LkJvcmRlclNpZGU= YXRhdHlwZQ== Q3JlYXRlZEJ5 LOKAmeKAnQ== ZG9jdHJpbmU= IGJyZWF0aGVk X2JlZw== IGFmZmxpY3RlZA== TW91bnRhaW4= QmxvYw== IHJ1aW5pbmc= LkFubm90YXRpb25z CWludGVudA== IHN0YXRpY2FsbHk= X1V0aWxz TGF1bmNoZXI= Om5vcm1hbA== IHVzZXJpbmZv LUp1bA== S3lsZQ== LlJlYWRVSW50 KHVybHM= L2lm bWl0dGVs YmNt QE1vZHVsZQ== IENvbnN0YW50aW4= IGJq ZXJuYXV0 PHI= IE1lbnRvcg== IGVncmV0 X29hdXRo LkRhdGFDb250ZXh0 X0NMSQ== KENvbnN0cnVjdG9y IHNldFBvc2l0aW9u cmVzYXI= ZW50aW5n 4Li54Lil VHJhbnNtaXNzaW9u IG5vdGlmeURhdGFTZXRDaGFuZ2Vk IE1vdXNlQnV0dG9u ICoi ICAgICAgICAgICAgICAgDQo= IEx5ZGlh IHN3b3Jl IHBsYXRhZm9ybWE= CWJ1dHRvbnM= IHNwcnVuZw== KFRva2VuVHlwZQ== Q3g= QXF1 CQkJCQkJCQkJICA= CUFERA== dWlkcw== IOCkrg== IOaXtumXtA== LkFjdGlvbkJhcg== IG9jdXI= IGlsbWE= LW5ldXRyYWw= ICIuIjsK CVNpemU= UGllY2Vz IHN0aWY= ICI9Iiw= IEVxdWl2YWxlbnQ= IGlnZW4= ZGZk X3RoaWNrbmVzcw== X3JlYWRhYmxl L2ZhbHNl IHRvb2x0aXBz b3BsYXN0 aHVh aGFuZGxlUmVxdWVzdA== LkxBWlk= PFVGdW5jdGlvbg== aW1tdXRhYmxl aWhpbGF0aW9u IG9ydGhvZG94 LnBvcHVsYXRl IHZlcmE= IG9iZXI= c2FuZA== dmln Q29uZmVyZW5jZQ== KENvbGxpc2lvbg== L2F1dG8= IFNvbGlkQ29sb3JCcnVzaA== Kic= LGFkZHJlc3M= IHN3ZWV0aGVhcnQ= w6F0aWNhcw== YW5pbmU= X3BheW1lbnRz IHVubWlzdA== IHRydW1wZXQ= QkFM IGZpbGVJZA== bmllanM= QURG IG1uaXN0 IEZlaGxlcg== 44CRLA== Q2hhcmFjdGVyU2V0 IFZhbmNl SW5zZXJ0ZWQ= IGRvd253YXJkcw== IHJvdGF0aW9uYWw= IGVuY291bnRlcmluZw== TUJQcm9ncmVzc0hVRA== L1N5c3RlbQ== L3BvcA== IH0pDQoNCg== IC4nPC8= 77yJDQo= IGRjYw== YXN5YXJha2F0 IHByaW5jaXBhbGx5 5a6a5LmJ KGNob2ljZXM= LnBhZ2luYXRvcg== IHVwYnJpbmdpbmc= IGRvdGVudg== KCkpLw== IFRBUw== Z2Nk X2ludGY= Lm11dGV4 cHJlc3Rhc2hvcA== IGLDtnI= ZGFw X2RlbWFuZA== XERlc2t0b3A= dG9GbG9hdA== IHNlZ3JlZ2F0ZWQ= IGNsaW1hdGVz Lk9yZGVyQnlEZXNjZW5kaW5n KCcsJyk= UHVsbFBhcnNlcg== QXRvbXM= IGJlbsO2dA== IGhvbWVy YW50dQ== SXNFbXB0eQ== IEJlZ2lucw== PlNob3c= IFN1cHBsZW1lbnRz b2NjdXM= IGRvcGU= LmJvb2tpbmc= IEFsbWlnaHR5 W2VkZ2U= IEViYXk= X3JhY2U= RnJvemVu X3RyYXZlbA== IHBhc3RvcnM= X1NVUkZBQ0U= X2dlbnJl X0hPVA== LGRpbQ== VGJs bXRz cHJlZGljdGlvbnM= X2N1bQ== IGRldGFsbGVz LXRyYW5zaXRpb25hbA== IHdha2V1cA== UGVyc29ucw== LmNvbG9yYmFy U3RyYW5nZQ== 2K/Zhw== Jlc= IEFSUA== X1NPRlQ= X2RyYWZ0 SVZB IGdyb3A= IGxpZWJl IGlpZA== 2KfYsw== Y2FuZGlkYXRlcw== Z2V0QXM= PV8oIg== LkdldE9yZGluYWw= KSk9PQ== YW5ub3RhdGU= IEx1bWlh SVJNV0FSRQ== X09QRU5HTA== KGZvcm1EYXRh ZW50aW1lcw== IHdhdGVyc2hlZA== INCx0LXQtw== IGZsb3BweQ== VG93YXJkcw== KGNvbXBhY3Q= RERE e24= IHBva2luZw== QG0= IHJlY3ljbA== c3RydWN0b3Jz a2V5Q29kZQ== IHZlaGVtZW50 IGxpdHJl IEJJTkQ= IEZyYW5jb2lz IG51ZGl0eQ== IGlzaXpl CW9uQ2xpY2s= eXN0YWxz IGdldFN5c3RlbVNlcnZpY2U= V2ViUmVzcG9uc2U= ZmlsZXNpemU= IENobG9y Y29saQ== X3NlYXQ= LkFkZEluUGFyYW1ldGVy KXRlc3Q= IHF1ZXM= IGNhdXRpb3VzbHk= ImRpc3BsYXk= LnNodG1s IEdVSURBVEE= KCIqKg== IGdyYW5kZGF1Z2h0ZXI= IEFzc2VtYmx5RGVzY3JpcHRpb24= Rm9yRWFjaA== V2lsc29u LGVn IGJlbGlldmFibGU= IGNyb3Nzd29yZA== bG9iYmVy IFN0YXBsZXM= KHNoaXA= IHdhZ2Vk IEJvbHNoZXZpaw== LkFkZEl0ZW0= KEZpbHRlcg== X0FCQw== IGBc 0L7RiQ== IG1ib3g= IE5lcw== IEFWQ2FwdHVyZQ== IGNvbmhl IElOVEVSTkFUSU9OQUw= b3Nn IF0pLT4= U0tUT1A= IGtpZGQ= IFNTVA== IOWFsw== IEV0aG5pYw== RVJTSEVZ IG11bHRpYw== X01VTA== IEZpbmRPYmplY3RPZlR5cGU= IEV4cGVuc2Vz Z2V0TW9ja0J1aWxkZXI= LWd1aWRl J0w= IOeZuw== IHJhag== IEJsYW5jaA== IEFkZHJlc3Nlcw== Tng= IElzbGFtYWJhZA== 0L7QutGD0LzQtdC90YI= IEJlYXZlcg== LnN0dWRlbnRz IEFzeW5jQ2FsbGJhY2s= c2hlZXRz ZWNhc3Q= IEZ1bmRhbWVudGFs IHZlcmRpZW5lbg== IGV4YWNlcmJhdGVk IE1vZGVyYXRvcg== Q0NDQ0ND IHRpbWVvdXRz IHN1YmRpdmlzaW9ucw== IGNvbXByb21pc2Vz dXp6ZXI= fSwkew== X2Jsb2NraW5n ZXJtYW5u IE1pa2hhaWw= IFNlbGJzdA== 6ZSA LnNob3dz 5LiH5YWD IFRm IElIdHRwQWN0aW9uUmVzdWx0 IElFbnRpdHk= IGlx Rk1M b2RlbQ== c3Rw dWN0aW9ucw== LmZhdm9yaXRl LkdldERpcmVjdG9yeU5hbWU= IGdyYWM= IHhtbERvYw== X3B1c2hCdXR0b24= Y29sbGVjdG9y PWV4cGxvZGU= IGRlc3RpbmF0aW9uVmlld0NvbnRyb2xsZXI= IFNlcmlhbGl6ZWQ= Om1lc3NhZ2U= IENDQw== X3JlY292ZXJ5 LWtpdA== c2hpbWE= cm90Y2g= IGB9Cg== X3N1cHA= VGFibGE= 0YDQtdC00LXQuw== R3RrV2lkZ2V0 IFNJTVBMRQ== LnBoaQ== IExpYmVydGllcw== LS1b IHVudmVpbGluZw== IGV4dGVudHM= YmNk IGh2YWQ= CWNy LnJlYWRkaXI= IHJlYWRhYmlsaXR5 IGRpc21pc3Npbmc= Q2FtYg== IGNhc3VhbHR5 IElQVg== bWl0ZXM= IHB1cmlmaWVk Lk9yaWVudGF0aW9u IGxq aW11bGF0b3I= ZnJhbQ== L2xvY2F0aW9u IGNvbW11bmljYXRlcw== OlVJQWxlcnQ= L3NvY2lhbA== ZWx5bg== REVO INee IGJlZm9yZVNlbmQ= IFVudGVycw== JykuIg== ICcnKTs= LndyaXRlT2JqZWN0 KGdyYW1tYXJBY2Nlc3M= IEFwcGxpY2F0aW9uQ29udGV4dA== QnlVc2VybmFtZQ== IHNraXBz IGZpbGhv IHZpZXV4 IG1SZWN5Y2xlclZpZXc= IGFyb3VzZWQ= Lm93bA== IGN1cmxlZA== L2NhbGxiYWNr KCc6Jylb IGludW5k IGJyZWFrcG9pbnRz LWV2ZW4= LnN0ZW0= IGRlcm9n IG5lcA== IENvbXBsZXRhYmxlRnV0dXJl LUxpbmU= Lyov LkhleA== IHJ1c3Nl IGJpZg== IEZvbmQ= aWVjdA== IGFsbG90dGVk ZGV0ZWN0b3I= IC8KCg== ZW1vZGU= dWhl dWlzc2U= IEZJWEVE bWF0aHJt IHVuc3Vz IEF1dG9z IC4uLi4uLi4uLi4= LnRyYXZlbA== TkFW IGxlc2Jpc2s= IMO8emVy IGNsZXJpYw== IGxpbWl0bGVzcw== b2x1Y2lvbg== IG5lY2tsaW5l IGRyaWZ0ZWQ= IFJlbGlhYmxl IENhcnk= IHRlbsOtYQ== ID8+Jw== L2NvbW1vbnM= IEdNQw== X05QQw== IEJsaXNz IEJ1cm1h 5ZCM5pe2 KGRlcGVuZA== LXN1aXRl CXN0YWdl RG91Zw== aWRlbnRpZmljYXRpb24= X3Jlc29sdmVy QmVnYW4= W3RocmVhZA== IDsKCgo= TlRTVEFUVVM= IGRpc29iZWQ= fGg= IGFjY3VtdWxhdGluZw== ICIsIik7Cg== dVBhcmFt LmJpbGw= cml0Y2g= Q3JpbWU= 0LXRgdGM IFJlbWFpbg== 54Sh5paZ X1RIQVQ= YCJdCg== LnN0YW1w IHBhcmFub3JtYWw= IE1QQw== InVybHM= IEVzdGF0ZXM= VG9Gcm9udA== VGhpcnR5 QmV0aA== J3U= IOy9lOuTnA== VUZBQ1Q= IENyb20= IE1pc3Rlcg== IEVRVUFM ZW5oZWlt IC8vew== X3dhcw== IGJvdXF1ZXQ= IE1pZGRsZXRvbg== aXp1 X2hhc2hlcw== IGhlbm5l IExJTlVY CVNlcnZpY2U= IFRBTQ== IGBf IEFUQQ== IGRhbmdsaW5n cGFpbg== X0JPVU5EUw== cHJvZ3JhbW1pbmc= IGN1cnJlbnRJdGVt IGJlc2ll ZW1ibGU= KGNhbGM= LlNraW4= IHBlYXJscw== IEJ1cmI= LW1vbml0b3I= L2Nz Zmly KHZlcg== W2FyZ3M= w7xja2Vu ZXBhcmF0b3I= RG91 LkVudA== IEVTQQ== KGZt dG9uZXM= IFphYw== a3NhbQ== 4oCZYWxs IE1TUw== IkRvbg== IHNpbXBsZXg= IENvbnNjaW91cw== IEFwcGxpY2FudA== cGVsbGllcg== IHBlZGVzdGFs JGh0dHA= IEF2YQ== LkNH IGludMOpcmVzcw== IEludGVncmFs cmVkZQ== PWZvcm1hdA== LlBhdGhz X1BBUlRJVElPTg== IHNlaA== IFF1YW5kbw== WW91dHViZQ== LnB1dFRleHQ= 7KO87IS47JqU LkFXUw== IENzdg== Q3Vyc29yUG9zaXRpb24= LWJlZ2lu X2NvdW50cmllcw== LXJhbmRvbQ== 5Y2z UGhpbGw= IHBhbm9yYW1h IHRoZXJlcw== 5Y+q IHNpbGVuY2Vk IEN1bWJlcmxhbmQ= LlZpc2libGVJbmRleA== LnN0YXRpc3RpY3M= IHByb3BlbGxlZA== QW1lcmljYW5z IHZhbGlkYQ== IEd1YW0= IEZFTUE= LnN5bnRheA== ZGdl IGRlZXBlbg== ICAgICAgICAJCQkJ IFNwZWNpYWxpc3Rz IFNhbnRhbmE= IEJlZXRsZQ== ICUKCg== VXNlclByb2ZpbGU= KCIkLg== IGVtcGxvaQ== IGVtYWlsaW5n Z2V0T3JFbHNl X1VQUEVS LmRyaXZl IHJlZGhlYWQ= Rk9VTkRBVElPTg== IG11bHRpcGxpYw== L2VmZmVjdHM= IGhhbmR3cml0aW5n X3Rh IEJheg== w7ZmZmVudA== cHJpeA== IGNoaXBzZXQ= IGlwQWRkcmVzcw== w61kYQ== IFVuZw== IFNjaGE= LkZMT0FU IHF1aWVybw== b2Nocm9tZQ== IHJlZWZz YnNvbg== IG3Dug== IHRyYXlz Qm9tYg== IG15TGlzdA== eGltaXR5 IERlbmc= VW5p LVNlcmllcw== b2dhbnk= bMSxaw== L2NhbA== IHJlYWxpemE= IEhpYg== CQoJCgo= IGh1bWlsaWF0aW5n WyR7 IHByZXRlbmRlZA== IERhdGVuc2No YW5zaWJsZQ== CXJlbG9hZA== IG1pZ2xpb3I= X2JldA== IHRvdGFsVGltZQ== IEJheHRlcg== IGVuYW1lbA== L0ltYWdlcw== IFNFUw== IFNwcmluZ0FwcGxpY2F0aW9u KWluaXRXaXRoRnJhbWU= CWNhbA== RUxFTUVOVA== IEd1dGg= KEJpZ0ludGVnZXI= IE1lZGk= Lk1lbWJlcnM= IHJlam9pY2U= IGRvZg== UEVuZFBvaW50 IGNsaXQ= X1JFVVNF TWFrZXM= IHN6eQ== IHNoYWRlZA== IGZhdm91cmVk aXN0b2w= ZGV4 IGZsZXhHcm93 hac= X3ByaW50ZXI= LmZuYW1l cGVyYXRpb24= IG7Ds3M= Z2dlcg== 6ICB INCy0YDQtdC80Y8= KGVmZmVjdA== QnlVcmw= IEFQUw== dHV0b3JpYWw= ZWpz U3FsUGFyYW1ldGVy IHNjcmFwcw== R3JlZXRpbmdz RmVk IFJFTkRFUg== IGJsb29tcw== IGRlYmlsaXRhdGluZw== b21ldHJpY3M= IHNpbWls LWhlcm8= IHJlYWxwYXRo ZGVwYXJ0bWVudHM= QklORA== IENhc3NpZHk= bGlhbg== U0tJUA== LWNsZWFu IHNpbGRlbmFmaWw= X211bHRpcA== anNvbkRhdGE= QWdlbnRz LmZoaXI= IHRyaXVt IGFzdG9yZQ== IG5leA== OnVwZGF0ZQ== INC00LA= 4KSy OyIpCg== LlRleHRJbWFnZVJlbGF0aW9u IG1pY3Jvc2NvcHk= U1VS YW5reQ== IFBldGl0 bWFya2V0aW5n IHZlcmlmaWNhcg== YW1hZ2Vk Y3Ro IGluY29uc2lzdGVuY2llcw== IG1hasSF IGdldEluZm8= IHBhc3Npb25hdGVseQ== IGljbXA= W10+Cg== U2luZ2Fwb3Jl IE5ld3Rvd24= IHJhaWxpbmc= IEVubGlnaHRlbm1lbnQ= dXRoZXJsYW5k bGVpbmU= X3JlZ2lzdHJv IEVyaWNh X3RpY2tldHM= L21ldGhvZA== aXp6YXRv R2F0dA== LWZlYXR1cmU= IDotKQ== IHNlcnBlbnQ= IEdyb3VwTGF5b3V0 TmlrZQ== dW5nYQ== IE1pbQ== IGluY2Vzcw== IGRlcGxldGlvbg== X2xvdA== IGJpcnRoZGF5cw== IHJlbnRlcnM= IGVxdWlwb3M= IExlaHI= X1BsYXk= IHNwaWVsZQ== IExBTkQ= IEVuY291bnRlcg== aXphbmRv IHBlcnU= IHNsYW1taW5n IHJlaW5zdGFsbA== IGFuZ2k= SW5UaGVEb2N1bWVudA== IHZlcnNjaGlsbA== IHZlcnNv LnN0YWZm KHZw KGFjY291bnRz Z2V0QXBwbGljYXRpb24= IG1hbnRlbmVy LlNP LkFE IE1vcm1vbnM= CXJlYWw= IGhvdGxpbmU= IENhcmRpbw== cGFnZUluZGV4 Ymplcmc= Rm8= IGNvbnNlaWxz IG1pZ3JhaW5l IGxhdGlubw== IHRvcnBlZG8= amFiaQ== L3Jz dWJiZXI= IENsYXNzZQ== 4Lw= KC9eXA== X2RlcGxveQ== R1JFUw== IFdIQVRTT0VWRVI= IGFyY3B5 IG1pZWpzYw== QXJteQ== IHNjaMO2bmU= IGJtaQ== IDoiOwo= IENydWlzZXI= cWg= LnByZXBlbmQ= IHZpdmU= b3JpYXNpcw== ICE9Cg== dGVnYQ== YW1lZGk= UHJvamVjdGVk LWJyZQ== LHJlYWRvbmx5 IHN1YlRpdGxl IG1pc3Ry IEluaGFs Y292ZXJpbmc= IHppag== IEFSVElDTEU= UlVMRQ== IGFsdHJv IHNldHRsZXM= aWRlbGJlcmc= OiIuJA== KGZl X2Jt IHByb3ByaWV0b3I= IGtlZXI= U2VwYXJhdGVk X05FQVJFU1Q= KHN0cnBvcw== IENvbXB1dGF0aW9uYWw= IGVybg== SW5WaWV3 QWNyb3Nz IGZydWl0eQ== X21hcHBlZA== IGdyYXR1aXRlbWVudA== IHt9CgoK cG90ZW50aWFs cGFudHM= IHNlbnRpbWVudGFs IExpbmtlZGlu KHBhdGNo IGFkYXB0b3I= IFVJU3Rvcnlib2FyZA== IHNsYXNoaW5n KCIvOg== IHRleHREZWNvcmF0aW9u LmRpYWc= XFJlZGlyZWN0 IG5ldXJvc2NpZW5jZQ== IEFkanVzdG1lbnQ= IFNjb3RjaA== IENvc2J5 U0VB PXZpZXc= IGV2b2x2ZXM= IFNhbGlzYnVyeQ== 44CB4oCc ZXZlcnlvbmU= KGFyYw== IGFwYXJ0aGVpZA== IGF6aW11dGg= IFNoYW1hbg== 2KU= w7NuaWNh OmNsYXNz IEluamVjdG9y YWhhcw== YWJsZXI= X2VzdGltYXRvcg== X0NVQkU= IEtyYW5r IHVuZmF2b3JhYmxl IHJlcHV0ZWQ= IENvbmRpdGlvbmFs IG1pbGZz IFJlc3RyaWN0aW9ucw== KGhyZWY= SnVhbg== PEVudHJ5 CXRlbXBsYXRlVXJs X3Byb2R1Y3Rpb24= VHlwZUlE IGJhbGs= IG5ld0Fycg== IGxpY2VuY2Vz LnNvbHV0aW9u LnNhbQ== IEh2 IHRyZW1ibGluZw== WWF3 IGZsZWVjZQ== IHNob3ZlbA== V2Vy IHBhdHRlcg== PVk= IEZybQ== U2NyZWVucw== JCI= IEJsb25k INGB0LjRgdGC0LXQvA== KG9k IG5vY3Q= b3VudGVycw== dXNlcHBl fGludA== LnJlbWFpbmluZw== IHVsdGltbw== IG1hc3R1cmJhdGluZw== bW1j PUc= Il19Cg== IGZlYXJsZXNz IGFsZ3VtYXM= Y3VsdA== QWx0ZXJuYXRpdmVseQ== 5bKB T0RFVg== IEFkb3B0aW9u IHdlYWx0aGllc3Q= IG1lbnRyZQ== L2dvdG8= IGluZm9ybWFudA== IFJvdXQ= b2Zp IGhhbW1lcmVk IEVzdG8= 4oCZQnJpZW4= IMWa IGRlbWk= INGB0LvQtdC0 IENsaW50b25z 7IWY 5aSn5bCP RUNI IGFuYXJjaGlzdHM= IEJldmVyYWdl IGdvdQ== IGJyaWJlcnk= IHBpY2t1cHM= IHViZXI= IHN5bmVyZ3k= ZmNu IEhlbnRhaQ== IEJhc2VtZW50 IG1vcmI= X2N1 amFkaQ== KHByb2o= IEJpbmdv X2NhdGU= W2VtYWls Klg= X1NFUA== IHByaW5jaXBpbw== dXBkYXRpbmc= Ly99fQ== Li4uKA== IERPRQ== IHpn c2hhcGVz PXRtcA== Q3J1ZA== IHdvcmtwbGFjZXM= IHN0YWJpbGl6ZWQ= IHRlbnRhbmc= LnByb2R1Y3RJZA== IFRyaWRlbnQ= IG9yY2hlc3RyYXRlZA== IEJ1Y2NhbmVlcnM= X3RvbGVyYW5jZQ== aWdyYXBoeQ== w7xsZXI= INi1 QVE= IGF0aGxldGljaXNt CVNlcnZlcg== ZXdlZA== RGlkRW50ZXI= UmVnaXN0ZXJz X2VtbHJ0 IGZ1bmN0aW9uYWxpdGllcw== KGhkYw== X21hcmtlcnM= T3JlZ29u KFN0cg== IEdldEJ5SWQ= IHp3YXJ0ZQ== IE9DSQ== IEphbWU= X2NyaXQ= IHN0b2NraG9sbQ== CURpY3Rpb25hcnk= X2NhcGFiaWxpdGllcw== Q1RS IG51bWE= X2ZpcnN0bmFtZQ== IE5TUmFuZ2U= IG1vc3RyYQ== IEFycml2YWw= KElTZXJ2aWNlQ29sbGVjdGlvbg== IHRlYXNwb29ucw== IFNldFVw CQkNCg0K KGd1aWxk LiJd IG3hu5tp YmZm REFURVM= KCldCgo= IGh1bWFub2lk dGhybw== KGtsYXNz IFZhZA== ZnNw LVNhaA== IFVTRVJOQU1F IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncw== IGxlc2lvbg== X0RFTklFRA== IFRISU5L gqQ= bWVudGFs IHByZWNhcmlvdXM= IE5vc2U= IGNvbmNs IHdpbGRmaXJl IFRCcmFuY2g= IEJBTQ== L2Nzdg== IE5BTg== IENsZWFyYW5jZQ== XEJsb2Nr LmFubm90YXRl 5om+ IFdISUxF Z2VidW5n Pkxpc3Q= c2ht Um9zcw== YWZk W3RpZA== UGVyUGl4ZWw= Kyhc IEN5YW4= IEtub3Q= X3Zsb2c= L3Zhcg== W19f IGhhc2htYXA= KCk7DQ0K IGFtYXNzZWQ= IGRhdGVQaWNrZXI= IFNhdG9zaGk= X0NBUEFDSVRZ IGJ1eg== IE1pbmg= U2V0Q29sb3I= Kz0nPA== IEludmVudA== b3JjYQ== aWdudW0= IEFtcGg= IHJlZmx1eA== CiAgICAgICAgICAgICAgICAgICAgICAgIAo= dWhu KFRN YWxsZXk= IGxlZnRvdmVycw== ZmRj 4oCcVGhlc2U= IGNyYXdsZWQ= KFZvaWQ= aWd0ZQ== 8J+S c2V0RGVmYXVsdA== IEJlZ2lubmVy UG9r IEhMUw== IGdhbWVJZA== IEFtYmllbnQ= X1BSRUQ= LiJ9LAo= w7xocnVuZw== LlN5bmM= IGludmU= IE51cnNlcnk= IGdsYXplZA== q+yekA== X2ZhdGFs X2Rpc3BhdGNoZXI= W10pDQo= IGRldXRzY2hlbg== 6rGw U2hhcGVz IGlycmV2ZXJzaWJsZQ== X3Blcw== X2VzYw== IHRoZXJtb21ldGVy 44OU44O8 X3NxcnQ= Il09PSI= IGN1bG1pbmF0aW9u V29yZFByZXNz IGxldmVu VmVydGV4VXZz IEhheXdhcmQ= IEFzc2V0SW1hZ2U= IG1haXpl IGNoaWNhZ28= IHRhdg== ZXhwZW5zZXM= 0K0= K2Y= LiInIjsK LVNB IEtvdGE= TWFpbkZyYW1l LnNhbGU= X0JV IHN0cmVu X2ZpbHQ= L3ByaW50 KFBhY2tldA== INC30LDQsg== QWN0cw== 0LXQu9C10YQ= IHJlbWF0Y2g= IHJpZGRlbg== IH0pKCk7Cg== IGVuZG90aA== IGNlcnRpZnk= IFVJUGlja2VyVmlldw== XE5vdGlmaWNhdGlvbnM= CVRpdGxl IGluZXF1YWxpdGllcw== IE1vcmFu IERhZW1vbg== bGVzaWE= IGhvcHBpbmc= IGd1c3Rv IEZpcmViYXNlRmlyZXN0b3Jl IHBvbHlsaW5l IHNwaWtlZA== JSIpOwo= IExBVElO TGFiZWxUZXh0 IHN0cmFwb24= X2ZpZA== LXNwZWNpYWw= YXJnZWQ= IFNUSUxM UXVhbGlmaWVkTmFtZQ== LlJFUw== I2M= LndyaXRlbG4= IEltbXV0YWJsZUxpc3Q= IFRodW1i IHNpbWQ= RGVzY3JpY2Fv LlNldFRleHQ= IG5vbnByb2ZpdHM= V2l0aGRyYXc= LWVuY29kZWQ= c2Jpbg== IGFtb3J0 CWRk cmlm IHBhdGVybmFs Lk1hcEZyb20= X2Fzaw== IHJlY291cnNl IGJhY2tzdG9yeQ== CW1hbmFnZXI= X0RHUkFN IEJpaGFy aW50ZWxsaWdlbmNl IHNraW1hZ2U= KGVuY29kZXI= IHN3aXJsaW5n IEFwcGV0 X3NhbHQ= IGF0dGU= IFNRVUFSRQ== IE5ldHo= X3BhaW50 YXPEsQ== aXNjaQ== Rmxv LWdvYWw= LnNldFN0cm9rZQ== IEF1c2Nod2l0eg== IEFiZGVs IGFuZXc= IOWung== IHRvdGFsUGFnZXM= IHJlZmFjdG9y IGNyZWF0aXZlbHk= ZW1heA== b2RveHk= X3R4bg== LlNvY2tldHM= IFJpZGxleQ== 4buxYw== c2FtcA== TWluTWF4 IHdvcnNlbmluZw== b3VudGFpbnM= YXJ0bmVy LXByb2Y= c2luZ3VsYXI= PWlz IEZFQw== X0ZN IOaIlg== IENhdWdodA== X1NDTA== IGV4cG8= aW5mcmE= IE1FUw== Y2hhcA== YWx0ZQ== YXJraW4= L21M IHNlbmREYXRh IGZyYW7Dp2Fpc2U= IHPDpg== X0RFRklOSVRJT04= KioqKioqCgo= XEN1c3RvbWVy IOKWiOKWiOKWiOKWiOKWiA== IHBlcnBldHJhdGVk IEZ1cmlvdXM= IHRlbmdh bGVhcmVk VUxMRVQ= aW5pYw== ZWFyY2hCYXI= PENhcg== IFJlbmV3YWJsZQ== IGNvbnRlbXBsYXRlZA== L2Zvcm1hdA== IGZvcmdpdmluZw== LlN1YkVsZW1lbnQ= UFVURQ== LmNvbnRlbnRTaXpl IHJlc3BlY3RmdWxseQ== 4oCcCgo= IHBvaWduYW50 dXJpbGU= fSkiCg== c2VxdWVudGlhbA== L2Zhc3Q= cHJ1bmc= IFN0dW5uaW5n IEJZVQ== IGNvbXBhcmVy CXJk dW5pY29ybg== xrBh LkdldEl0ZW0= IHNlY3Rpb25hbA== anVkZ2U= dXh0YXA= IHN1bmRheQ== IHDDpA== TWlubmVzb3Rh Ik4= IGFwcGxpY2F0aW9uV2lsbA== QU5HRVI= IHJlYXNvbmVk IFpFTkQ= emFw PWJhY2s= b3NwaGF0ZQ== 6IqC54K5 IHRpdHRlbg== IEFzc29j QWN0aXZpdHlDcmVhdGVk KVst PyIKCgoK IGpvdA== 2Lg= IHVuY29tcHJlc3NlZA== LklzREJOdWxs IHZhc2U= IGxvcmVt IGVudHJlcHJpc2U= IENvbnNlbnQ= 44Op44Oz QnlWZXJzaW9u IHF1aWVuZXM= CWNvbnQ= IEJsYWNraGF3a3M= IEJsYXNpbw== IHRhbmtlcg== IHN0YXJ0dGltZQ== IFNlYXM= cGlvcw== LlNwbGl0Q29udGFpbmVy Y29tcGV0aXRpdmU= IHBCdWZmZXI= IGNvbnNlbnRpbmc= LmFkZE9ic2VydmVy aXRjaGVk IG1pc2NlbGxhbmVvdXM= IFRvcHM= CWxw Y21kcw== LmRlcGFydA== IGZOYW1l CWJlc3Q= OlA= IHN3YXRo IHZva3M= YWxsb24= IEh0bWxXZWJwYWNrUGx1Z2lu LmxvZ2dlZElu YnVja2V0cw== IGhvbW9waG9iaWM= IHN1YmR1ZWQ= IG1lc3NhZ2Vib3g= V2hhdHNBcHA= IGRpc3NpcA== IE1BTlVBTA== TElLRUxZ dGVzdGRhdGE= LU9jdA== RXhpdGVk IFRhc21hbmlh bGFj IHRow7RuZw== U3Rvcmllcw== IGJpb2NoZW1pY2Fs b3JyZQ== IGVjbGlwcw== IEFzc2VtYmx5UHJvZHVjdA== cnRsZQ== IFdpbGhlbG0= cGl6emE= X0RI Y29uag== IHB1ZWJsbw== IGxpcXVl IGN1cGlk IEFjdGl2aXR5Q29tcGF0 LlNt Il19 bWFpbGJveA== Lm9wdFN0cmluZw== LW9i IE1hdWk= YXRhaXJlcw== IG1lcnJ5 Um5k IGNhcmFjdGVyw61zdGljYXM= VHJv KGNu Lmxk LXBvaW50cw== LnNi IHZlag== IGNhcmVnaXZlcg== IG5hdQ== RElSRUNUT1JZ KGFuZw== KC4p IGV4cGxhbmF0b3J5 ZWxzZXk= IE92ZXJuaWdodA== IGxhaXNzZQ== IFJBVEU= IEdvdw== UmVjb2duaXRpb25FeGNlcHRpb24= aWNoZXJ0 IHJldm9sdXRpb25z JGNhdGVnb3J5 IHVuZGVmZWF0ZWQ= L2NvbW11bml0eQ== LXBhcnRz LWFwcGxpY2F0aW9u K0E= L3N3ZWV0YWxlcnQ= IEtt aWxhdGVk YXRhdA== UEFU xI1l IFRlYw== Lm9uQWN0aXZpdHlSZXN1bHQ= XFdlYg== IEx1Zw== b3ZvbHRh IGFsdHJ1 aWd5 IGLEmWTEhQ== IGFjdGl2YXRpb25z IGF1ZGl0aW5n RVJHRQ== IOiLpQ== Q2FybG9z IGtJbnN0cnVjdGlvbg== bWluZXI= IH19Lw== QW5kSGFzaENvZGU= IEJvdXJib24= LnByb2Y= IGltcHJpbWly IEZlcmRpbmFuZA== 0LzQtdC90YI= L3t9Lw== IENsYWly IE9uQ29sbGlzaW9u c2FsZG8= cmFpc2Vk IEFCT1ZF KCk9Pg== IGRldXRzY2hsYW5k aGliaXRlZA== RXh0cmVtZQ== L2hvb2tz IGRvdXQ= IFZPQw== ZXRob3Zlbg== UE1D IHJlc3RhcnRpbmc= IFNDTg== IEVP IERKcw== UGFzc3dvcmRGaWVsZA== LkFjY2Vzc2libGU= CWJ1cw== U1RSVUNUSU9OUw== IGxhdGVu IFNOQVA= X0hFUlNIRVk= IG9uc3RhZ2U= 5bCP5pe2 IHNhaWxvcg== IEN1cnNv IGltcHJvdmlzZWQ= IGdlbmVyYWxpemU= IGJ1ZW5v IGNlcmVtb25pYWw= IENOUw== IHBpZ2Vvbg== bXNw L0FJRFM= bGluZUVkaXQ= IEZpbmFuY2luZw== IGpUYWJsZQ== IGJvdHRvbXM= IFRleHRJbnB1dFR5cGU= IG1laXNqZQ== LXNpZ25lZA== IEdyZWVudmlsbGU= b3BoaWxpYQ== SWNvbk1vZHVsZQ== IGNsYW5kZXN0 ZW1haW4= U0NBTg== X1RJTUVT IGxlY2tlbg== KGNhbmNlbA== IGVjc3Rhc3k= Lk1VTFQ= IG1vZXRlbg== IGFwcHJvcHJpYXRpb25z IFFMRA== IEd1aWw= IHRyYXBwaW5n eERB IGvDtmxu ZW51bXM= 4oCcVG8= cG9ydG8= bmluZ2Fy IFRPTw== LVNU IE1hdGhz IGt1cnM= IFJFUEw= X2NvbnRyaWI= IFBoeQ== cmFuZw== Lm1hdmVu LWZvbGxvdw== IC0tLS0tLS0tLS0t xLHEnw== X3dpbm5lcg== LkNyaXRlcmlh KGRhdGFTb3VyY2U= IHNldElucHV0 IFRJTUVTVEFNUA== b3BlcmFuZHM= Z2V0V2luZG93 LmZhY2VWZXJ0ZXhVdnM= IEludmVzdGluZw== Vnk= IHBlcnNlY3V0ZWQ= 4bq/dQ== IFBsdW1iaW5n T05HT0RC RXZpZGVuY2U= IFN0cm9t cXVvdGE= TGl2ZXJwb29s CWF0dGFjaw== bWluaW1hbA== IG9uS2V5RG93bg== IG1vZHVsZUlk IFZlcmFuc3Q= bW9ydA== YWNpc3Rz IE1BU1M= X1VOREVS LmdldFJ1bnRpbWU= RU5USUNBVElPTg== Uk9LRQ== IHNjYWxlWA== IHNlcnRh IEZyZXF1ZW50bHk= X1RSQU5TRk9STQ== IHR3aWxpZ2h0 IE1jS2Vuemll bGVkZ2Vk IEB7QCI= X0FDVElW IGhvb2tlcnM= PWRlZmF1bHQ= IHdhbG51dA== IHVzZU5ld1VybFBhcnNlcg== IENoZWVy IHdyb25nZnVs bmlv YnRj LnN0cmlkZQ== IHN1Y2Nlc2Z1bGx5 IFRyb2xs aWZpY2lv LmNvbmQ= IGhlYXBz X1BIT1RP PEFkZHJlc3M= IFN0aWNreQ== IG5pZ2h0dGltZQ== IGRhbmRv IEJJTEw= INC+0YLQstC10YI= RGV0ZXJtaW4= IGZ6 KHNpZ25hdHVyZQ== IHZpbmRlbg== LkNPTk5FQ1Q= cnVpc2U= IHh1 cHJldmVudA== Rk9Y VUlBcHBsaWNhdGlvbkRlbGVnYXRl U3BsYXNo IGVtYnJvaWRlcmVk IEhpbGZl LnNoYWRlcg== IGRvdWJ0ZWQ= UmVzcG9uc2VTdGF0dXM= IHVuc3RvcHBhYmxl dW5sb2Fk KyJd ImxhYmVs IGZyZWVsYW5jZXI= RGlyZWN0ZWQ= IHZvcmhhbmQ= IFNubw== ZXhpc3RlbmNl b3JkaWFs emFn LkFnZQ== IHNwYXducw== IFBTRw== c3RpdHV0aW9ucw== IHNpZ2h0aW5n LXRhbGs= INGB0L7RhdGA0LDQvQ== ZW5lcmltYQ== IEJlbnRvbg== X1N0b3Jl VHJhbnNwYXJlbnRDb2xvcg== IEV4cGxvc2lvbg== X0lTUw== Q2hlY2twb2ludA== IGRlZmxhdGU= 0JLRi9Cx LXRyYW5zZmVy IEJhYmllcw== IGltYQ== LnVzYWdl IG5lZ2F0aXZpdHk= IEV4dHJlbWVseQ== a2o= RG93bmxvYWRlcg== CWFjdA== W2NoYXI= Tm9ybWFscw== X3JlZmVyZW5jZXM= IGRyYWNvbg== 4bulYw== X1RSTlM= Y29tcGFueUlk IFZlcmQ= YW5pbw== IE1hdGNoZXJz KHJlbGF0aXZl IHJlZWxlY3Rpb24= LkhF VGF1 INGB0YLRgNC+0LrQuA== IE1ldGFscw== IENvY2t0YWls IGFwcmVuZGVy X3ByZWZlcmVuY2U= LlNjaGVtZQ== IGdsR2V0VW5pZm9ybUxvY2F0aW9u VXNpbmdFbmNvZGluZw== 0YDQsw== ICJdIik7Cg== TGVhZGVycw== J8OqdHJl X0RlbGF5 UHJvY2Vzc2Vz aWN1bHR1cmU= XCI6e1wi 4oCUIg== RW1vamk= LWdyb3c= IENDRA== Y29tcG9zZWQ= TWFpbnRlbmFuY2U= IFJ5emVu KGFn LnByb2I= IFNpbmF0cmE= IGhvcnJlbmQ= IE1vdW50ZWQ= X1BFRVI= IGN1aw== IHPDuGtlcg== IFF1YXI= X1JFU09MVVRJT04= J2VhdQ== IGJvdXJib24= IGF0SW5kZXg= L3BvbA== IOq0gA== CXB3 fSl9Cg== LmZvcm1EYXRh IHVkZW4= IHJvYXJpbmc= Tm90aWZpY2F0aW9uQ2VudGVy IGNsdXN0ZXJlZA== IHBhaXJ3aXNl bXVsdGlsaW5l R2FtZURhdGE= Lkxhcmdl KSc6 INGB0LXRgNCy0LXRgA== IFVJTWFuYWdlcg== U3Zj IFBsYXlzdGF0aW9u Lk1vcmU= LnF1YWxpdHk= IGNvbmZpZ0ZpbGU= LWNvbnRhaW5pbmc= IEdvYXQ= ZW5jaW9u IGxpa2VuZXNz LXVzaW5n IHNlYXNpZGU= 4bqpdQ== YW50aWNpcGF0ZWQ= Rm9sZGVycw== LUxldmVs b3BjaW9u KXByZXBhcmVGb3JTZWd1ZQ== PigpKQ== PWFkZA== XGdyaWQ= IHln X0RSSVZF IEdldE5hbWU= LkRBTw== IGhhbm4= CWNhdA== IHZpZ24= IEhlbGxlcg== IENSRUFURUQ= YmVyb3M= YnV0dA== IGJlbmRz IExlZXI= 0KY= IFNNUA== VmVjdA== IG9iamVjdFR5cGU= OmFzeW5j IGNvbXBldGVuY3k= IFF0QXdz TG91 L2NhdA== UHJvc3RpdA== LXZlcw== CXR2 IEVJ QW5kV2FpdA== IFRPT0w= fSo= X1Jlcw== IGFsaWdubWVudHM= 7KGw IENsYW1w LXBhZA== IHdyaXRlRmlsZQ== IEFwcHJlYw== 4oCZYXV0cmVz dWRhZGVz IGx1Z2FyZXM= c3BlbmRlcg== W2ltYWdl RVhJU1Q= IGRlY2VpdmU= IGh1bnRz X1ZPSUNF X0RY Q0FD ICgoJw== aXNrcw== LGZpbGVuYW1l IGxlYW5z SW5wdXREaWFsb2c= RGF0YUNvbnRyYWN0 IHNtb290aGVk IHJlY3J1aXRlcnM= IHRhbmdsZWQ= X1RhYg== IEZpbGVBY2Nlc3M= WUM= IHZY PGR5bg== TGV4ZXI= IOKYhg== IGdsR2Vu VGVtcG9yYWw= IEFURg== YW5rbw== VXNlckNvZGU= IEtvdGxpbg== Li4KCgoK RU5DRUQ= LnVudHJhY2tlZA== X21y IHdhdmVsZW5ndGhz IGRpY2hv IGltdQ== X2NyZQ== W0o= X0RG IGF0dGFpbm1lbnQ= IGxpdGVycw== W2tleXM= IGxpc3Rhcg== SHR0cHM= IGJyZXdlcnM= IGFjb21wYcOx IHRvYXN0ZWQ= LmZyaWVuZA== IHJlbHU= IFBzeWNoaWM= TWFuaXA= ZG5h UHJp LWZsYXNo KGFydGlzdA== IEtvdg== cHJlc2VydmU= X3BlbWI= LnNldFByb2dyZXNz IGR1c2s= IGNhbm5hYmlub2lkcw== IEt1bmQ= IENvdW50aWVz IO2OmOydtOyngA== IHJlbmFtaW5n IFJ1c3Nv TlNTZXQ= KEVYUFI= 5YW25LuW RGlhZ3JhbQ== LGxhc3Q= KHdpdGhEdXJhdGlvbg== IGluZGVidGVk IERpY2tlbnM= IEFscHM= IERlZ3JlZXM= aWRhcg== LWJsb29k K29mZnNldA== IEh1ZA== b3VuZGVy dWxuZXJhYmxl IHByaW8= YmxpbmQ= KHBhY2s= IG5pZ2h0bGlmZQ== IGlsbHVzdHJhdGluZw== IG51dHNoZWxs IGJyb2FkY2FzdGVycw== IGNvbXBhbnlOYW1l aXRvcmU= LnJpZ2h0QmFyQnV0dG9uSXRlbQ== Ym90ZQ== IFBJVA== LXNjcm9sbGJhcg== IHdpbmR5 IFFNYWluV2luZG93 aHVl LmVwb2No IGNhbWVy IENMVUI= aWZhcg== VW5hdmFpbGFibGU= LXF1b3Rl IEdyYXo= IHZhbHU= X01BVEVSSUFM IHBlbnk= IHRyYXR0 IGxpY2tlZA== CWNhbg== IFRhaXdhbmVzZQ== UGFnZUluZGV4 LlRpcG8= X1JlZA== IHZmcw== X3RyYW1wb2xpbmU= IE1QUw== IFBlYW51dA== IExvY2tlZA== CUFU anNwYg== X05PREVT J1dl IENvbnZlbmllbnQ= X3N1Y2Nlc3NmdWw= K3o= WUxlYWY= IHBlZGlncmVl eHo= IHNhbHZhcg== X0Rlc2M= IG5lc3Rh IGhhcmRjb2RlZA== LmdvbGQ= LkltYWdlRmllbGQ= X0JT TEs= Q2hvY29sYXRl LlN0YXJ0dXA= IGFuZWNkb3Rlcw== Lk1h P10= L3RvcGlj LlNjcm9sbEJhcnM= 0YHRgtCy0LA= IE1PTQ== IHFvcw== YXJ5YW5h w6RjaHN0 IE1jR2lsbA== IEVEVUM= KHBvc3Rz IEVudHdpY2tsdW5n X3NraWxscw== LWd1YXJk IHRleHRpbGVz fHVuaXF1ZQ== IEFyaXRobWV0aWM= TG9hZElkZW50aXR5 KTt9Cgo= IGFzc3VyZXM= V2lsZGNhcmQ= IGRlZmF1bHRlZA== IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbg== IFRvbWF0bw== LlN1bW1hcnk= ISIu dXRoZXJmb3Jk IGxvb3Bob2xl IGNtYWtl LWRhdA== IHJhZ2F6em8= IGNhcGl0YWxz IEltcG9ydGFuY2U= IER1bmdlb25z X3pvbmVz LnNhdA== ICAgICAgCiAgICAgIAo= Y2F0ZWdvcmlhcw== IGRhdGF0YWJsZQ== IG5hamxl KGdw LXJlbg== IHBhbmlja2Vk IFNreWw= IFFVSUNL dmFsdWVPZg== U3RhdGlzdGlj IGRlbWVhbm9y bmRlcm4= IEFwcGVhcnM= UHJhZ21h X3Bhc3Q= SGFzaHRhYmxl IHRoYW5raW5n LmNzcmY= IHBhdmU= IFZpY3RpbQ== IFDDpQ== Rmlyc3RuYW1l Q0FURUdPUlk= aWxlc3RvbmU= JyktPl9fKCc= IGluY2FwYWM= U3RyZWFtV3JpdGVy IGNvbW11bmlvbg== X3N0ZGVycg== 6Ieq5rK7 IGh1bWFuaXRpZXM= INC70Y4= IFBhcmFz bG9mZg== SGVhZGVyVGV4dA== Z3JlZ2F0ZWQ= LlhSVGFibGVDZWxs IGVudGl0eUlk IE1hc3Rlcnk= b2xkdA== JykpKTsKCg== aHVtaWRpdHk= Li4uIik7Cgo= RGVsdGFUaW1l IG1rdGltZQ== UGhvdG9u IHBlbnNhcg== c2NhbGluZw== X3llbGxvdw== X211bHRpcGx5 IFZ1bGNhbg== IFBlYXJjZQ== X2xj LWV4Y2x1c2l2ZQ== SXNVbmljb2Rl IHBhZHI= X1BDSUU= IGdsaW1wcw== IHJhbXBhZ2U= IFBhZ2luYXRvcg== IGNvbnZleWluZw== bm9yZQ== X2RldGFjaA== J10hPSc= IGJvbmE= CUNvbg== TmF6 IHNlZ3VpbnQ= IG1pZXN6 IGVzb3M= ICcvJykK IGZhaXRoZnVsbHk= IGJla29t 0LDQutGB d2hlbG1pbmc= LnR3bw== IFNDRQ== LW5h ICgpew== IERhbWVu X3RndA== YWRhbGFmaWw= IE1NSQ== VGhpbg== IGRlcHJlY2lhdGlvbg== IGFic2VudGVl IHNhbGFyaW8= IFNvbWVib2R5 IFNsb2Fu IGVyZm9sZ3JlaWNo Ok5TTG9jYWxpemVkU3RyaW5n IGdlaMO2cnQ= IGVtbw== IExhZ3VuYQ== w6FzYQ== aXN0cmF0ZXM= UmFpc2U= IEFzdHJvcGg= ICdcXCc= X3BlZA== IFRIUk9VR0g= IE5pZXR6c2NoZQ== ZW5lcmF0aW5n b3BsYXllcg== IHJvZGVudHM= w7xobA== R2FtZU1hbmFnZXI= IEhlYWRlckNvbXBvbmVudA== IG1pbGFu cXVlZW4= IFBPTEw= IEx5bWU= IEJyaWdncw== ZWNlcg== d2Fnb24= LkRFU0M= IGdsQmVnaW4= U3RhdGVtZW50cw== ZXRyaQ== IG1vY2tlcg== IEJsdWVwcmludFJlYWRPbmx5 L2NvbnRlbnRhc3Npc3Q= ZW1hYWt0 L2xvYWRlcg== X2xvd2VyY2FzZQ== Y2l2aWw= X3ZhbG9y X0dsb2JhbA== IGFkcg== aXRpemVu LlNpZGU= IEVtYmxlbQ== IHRoaXJkcw== X1NIQVBF UmVncmVzc29y UFlUSE9O IHBzeWNob3RpYw== IGN2cw== IEFwcGxpY2F0aW9uVXNlcg== IGFsdW5vcw== VG9nZ2xlQnV0dG9u IG5nYQ== IG3Do2U= YWR2ZXJ0aXNlbWVudA== 5YiG5Lqr Lm92 IEFPTA== UkVX INin2LPYqg== IEdpbm55 IC8vLy8vLy8vLy8= U29uZ3M= YWNpYw== Q01Q IHJlY29nbml6ZXI= IHDDq3I= RElD O1wiPg== IGNsb3Q= OkV2ZW50 LlRP IEN1cnNvcnM= XFN0b3JhZ2U= IElvbmljUGFnZQ== X2pldA== KEJpdENvbnZlcnRlcg== IGNoaWxkaXNo VHJhZGVy PEhUTUxJbnB1dEVsZW1lbnQ= X0ZSRVFVRU5DWQ== PSI7Cg== eXN0YWNr SnVy IOmU IHRjYg== IHJlY2liaXI= LnN6 IO2BtOuemOyKpA== UEVSU09O bm92YQ== IGNvZXI= IE1haG1vdWQ= IFdvcmtwbGFjZQ== IiIiKSwK LlBhZ2VTaXpl Z2V0Um9vdA== KGJhc2VVcmw= W1U= IE1DUw== IENsYXJrc29u LnZvbA== ICIifQo= IHBldXg= IFByb2R1Y3RTZXJ2aWNl IG1vbmRheQ== IFRlc3REYXRh IE1hdWw= IHN0cm5jbXA= IHNob3BwZXI= dGhlb3J5 IGV0aXF1ZXR0ZQ== bGljZW5jZQ== c2NhbA== LWNsdXN0ZXI= IGhpc3TDs3JpYQ== IFN1YnRyYWN0 IGZpYmVyZ2xhc3M= X2xhc3RuYW1l IFJld3JpdGU= L3RvZG8= IG92ZXJmbG93aW5n IEdhdXNz b2theQ== IGNsdW1zeQ== KHh5 IGV4ZW1w YW5hbHl6ZQ== LXRpY2tldA== bmluZQ== IERlYWRwb29s IGNvbHVt IEpL IFtdLA0K IEFzcGVu IG1hbGlnbmFudA== aMO1ZXM= U2NhbGE= aW5uZQ== IENPTlNUQU5UUw== X1ByaWNl IyUl IGFyc2No IE5TQXR0cmlidXRlZFN0cmluZw== IEZpbGVUeXBl YWxsb2NhdGlvbg== X3Npbmd1bGFy KFBvaW50ZXI= YW5uaWVz U3RvcmVk ICc7Cgo= 4oCZZXg= ZHJz QnJpZ2h0bmVzcw== L09S VGV4dGJveA== IGtuYWNr IGplbmlz IG9jYXM= ZGF0YXA= IGdhbWVUaW1l IOCw bmR4 IEVWVA== QnlUZXh0 IGF0dHJpYnV0ZU5hbWU= IGp1Z2Fy X3NlcXM= IEZFQVRVUkVT OmRhdGU= ZmJl cmlwcGVy 56iN LkV4cHI= VXJiYW4= aWRvdA== IG9ibGl2aW91cw== KERiQ29udGV4dA== Q2Fyb2w= KCcsJywk IEJyaWxsaWFudA== a2Fk Y2VudHJhdGlvbg== IGt1aw== IE1BTkFHRU1FTlQ= X1dFQVBPTg== IGppaGFkaXN0cw== IGVudHJlZw== IGRvxJ8= IGFwcGVuZGluZw== IFpp X2N0eHQ= IHF1YWRyYW50 ZWxlbWVudFR5cGU= PWltZw== YnJ1YXI= SUNBU1Q= IGludGVsbGVjdHVhbGx5 LkFubm90YXRpb24= IGNhbXBhaWduZXJz LkRhdGFHcmlkVmlld0F1dG9TaXpl IMWfZWs= IC9eKA== LkRhdGFUYWJsZQ== IHdlYmxvZw== KGxpYnJhcnk= IEZ1cw== IE9TVA== X1Bhc3N3b3Jk IEJ1Y2tsZXk= aG9mZg== QWxpZ25lZA== X1JlYWw= RU5USUM= L2dyYXBocWw= IFdlZWQ= IExTQg== b2NjYXNpb24= YWRkYWZp TGV0cw== KCJg IHdpZGVu KHZpc2l0b3I= ICJcCg== QU5URQ== LWNhbXB1cw== LUJhcg== Y2FtZWw= Rm10 OmRlc2NyaXB0aW9u LmFyZQ== IEFuYXN0 IExvbmdlcg== c2VyaW91cw== IGRhaGVy aXp6ZXI= TXVsdGlwbGljaXR5 IEhvbGxhbmRl IEFubm90YXRpb25z KCk/ IHByb3Rlc3Rlcg== IFVyZHU= IHNwZWNpYWx0aWVz X2x5 Q2Fk YW5udA== anNw IGpvZQ== KXI= IFBlcnNpc3Q= IG9ibA== IGRlYWRsb2Nr IHNlcmk= UmVsYXRpdmVUbw== IFl1cw== KFByaW50 YWJpbGlh IHVucHJvdGVjdGVk IEFTSUM= Lk5vbWU= IFdlYkNsaWVudA== IElUVg== w7xybmJlcmc= aXRvcmk= U2lnbmluZw== IFJlYWRvbmx5 IGVsZHJl IENoZWNrZWQ= YWxudW0= U291cmNlVHlwZQ== bGV4aWNhbA== IGlsbHVzdHJhdG9y IERpcmVjdG9yYXRl IFRyb20= bXBw bG9nZw== Lmluc3RydW1lbnQ= IHdvb2RlZA== IFVzZXJUeXBl IFJlbmNvbnRyZXM= bW9kZWxOYW1l QlRUYWdDb21wb3VuZA== PlRv IGZyZWV6ZXM= IENvbnRl IENyZWRlbnRpYWw= Y2FsYQ== L3dvcmtzcGFjZQ== IGxpYmlkbw== Y2hsdXNz b2xsZXlFcnJvcg== IGFjY2lvbmVz IEppbnBpbmc= YXTDqWc= SW50ZXJzdGl0aWFs KSkpKSk7DQo= eWJyaWQ= IFJvbGxlZA== TW9kZWxDcmVhdGluZw== IFJlZmxleA== IEx1Y2lmZXI= IGVoZXI= IGNhcm5pdmFs ISI7DQo= X0xPT0tVUA== IHN1Y2PDqHM= IHJlb3BlbmluZw== IGNyZWFkbw== IFNteQ== IEVudHM= LlNpbmNl IEZpc2hlcmllcw== L2Nvbm5lY3Rpb24= IENTQQ== INC/0YDQvtCz0YDQsNC80Lw= bHNydWhl CWFjdG9y IFN0cmF1c3M= SnNvblZhbHVl CWV2YWw= bG9ja2Vy IFhJVg== X2h5cGVy IFBvbGx5 4oCmdGhl IEdVUkw= 0LXRgdGB IGRpdmVz dWdlb3Q= aW5lbWE= YmVyc29tZQ== Q29tcHJh LWN1bHR1cmFs IGdyYW5kcw== U2Fj IEJhcm5leQ== X1FVRVNUSU9O IG1hbWFu IGhhc3RpbHk= IGNsdWJob3VzZQ== IGdydW5k X1dBTEw= IHB1cmlmaWNhdGlvbg== hOS7tg== 0LLQsA== dmVzdG1lbnQ= LkRpc3BsYXlTdHlsZQ== X2NvcmVz JVM= IG9zw7Ni IGRpc2I= IEZyYW5raWU= IGluZGlzY3JpbQ== X0JlZ2lu KGVy O28= 44Oz44Kw bm9kZU5hbWU= IHJlZnVuZGVk IGRpc21hbA== IEh1ZmZQb3N0 IHVuZGVjaWRlZA== d3JpdGVsbg== a8Ozdw== IEJvc2U= CWxpYg== b3BsYW4= aW50ZXJwcmV0ZWQ= IE1PTkVZ dXZv IG50b2hz aXNldW0= Pmo= IHVuZml0 IGh1Z2dlZA== IEplc3Q= bXBz IGJyb20= J28= IGZvdg== IFNocmluZQ== IEVJVEhFUg== eWNhc3RsZQ== IHNhdHVy cmVxdWVzdERhdGE= W2Rpcg== T1VDSA== X0Rv IHlvbA== IGluaXRpYWxWYWx1ZXM= W3ZlcnRleA== c2VydmljZU5hbWU= LnNhbGFyeQ== IEF1dGhlbnRpY2F0ZQ== 6L6+ X1ZMQU4= KFtdKTsKCg== IFNlcnVt UGF0aFBhcmFt Zm9ybXVsYXJpbw== IHN1bW1hcml6ZXM= T0NS b3JhbQ== TERBUA== Ymlj cGlja2Vk LXRoYXQ= IGNkcw== CWFuaW0= IGludHJpYw== IFdvcnQ= IFZMQw== IFNoaWl0ZQ== U3R1ZGllcw== LmRpc3BhdGNoZXI= KGVuYWJsZQ== Lm1peGlu IFNleW1vdXI= IGJpb21lZGljYWw= IFNwb29u IE5vcnNl IGludGVudHM= IMOpcXVpcA== IERyZXNzZXM= TFBBUkFN LnNldFJlc3VsdA== LmRlbGV0ZUJ5SWQ= IG5ld2ZvdW5k IE9TRA== b3VzeQ== IGVzdGFkb3M= W0J5dGU= Q2h1Y2s= Lm9uVmlld0NyZWF0ZWQ= IENvbnRyaWJ1dGlvbg== X0VuYw== SU5FVA== IGZsYXZvcmZ1bA== IOOCog== dmlzYQ== IEhlcmN1bGVz LmdldEFwcA== IFlvaw== Lk1haW5BY3Rpdml0eQ== KS5b IGxhdXQ= SW52aXRl IENodXJjaGVz LCcj 2YrYsQ== KFNT IHZlbmRh YXNqb24= LklOVEVS aXBoZXJ5 KFN5bnRheA== b25kcm91cw== CWNlbnRlcg== QnJhY2tldEFjY2Vzcw== IENhcGNvbQ== LmdldEZvbnQ= IFZhdWx0cw== IGRpc2XDsWFkb3I= Om8= KHNoZWxs IGVDb21tZXJjZQ== IGFsdHJl X2F0dGFjaGVk IGlzcg== IG9idGFpbnM= LkNvbnRleHRDb21wYXQ= IGF0dGVuZGVl IFR3aWNl IE1vb2Q= 6YKu566x bm9kb2M= IFBJWEk= c29mYXI= IEJsb29keQ== LkNvbXBsZXRl IEJFUg== IGdldENhdGVnb3J5 IGRpc3F1YWxpZmllZA== X1RydWU= J2Vy LXRvbw== IGh5cGVybGluaw== X21heGltdW0= TmVhbA== IHBJbmZv LmdldEVsZW1lbnRzQnlOYW1l c2NoZWR1bGVk cGF5ZXI= CXZlcmlmeQ== LWVudGl0eQ== bWV0YXRhYmxl YmlsZHVuZw== IGRlbHRhWA== ZW1wbGFjZQ== IHJldmVydGVk cmVwaWQ= bGVhcm5lcg== fSkpCgo= dWNvc2U= IHJpY28= IGJhbmdlZA== IEFmcm8= KGluZXJ0aWE= YW5zYQ== IMOkdmVu S2FyZW4= IHN1cGVyc3Q= IGZydWl0aW9u b3RjaA== IFBheXM= UmVzaWRlbnRz IHByaXNt Jik7Cgo= Lmptcw== IFNsdWc= PScnKQ== IGd1dGVu IFNwaWVsYmVyZw== IFRGb3Jt KGJlZm9yZQ== IEZpbml0ZQ== 5paw5aKe IG1laWxsZXVyZQ== 0L/QuNGB0LDQvdC40LU= X0Vycg== LWZ0 bmFubw== LkFkZHI= IC8vDQoNCg== IEpvbmFo IERpc2Nv IGx1bmNoZXM= IERGQQ== ZXhwbGljaXQ= XSc7Cg== IHJlZmluZXJ5 IFN0cmluZ1R5cGU= dW5zcXVlZXpl IExpa2VseQ== V3JpdGVz LmJwbQ== IHBJdGVt b3Vuc2Vs U3RhbmRpbmc= IGNob2tlZA== IGFuc2No dXBpbA== IERlYnVnZ2Vy 4qCA4qCA PEdyb3Vw IFNjYWxpYQ== IHN1YnN0aXR1dGlvbnM= IGNsaW1iZXJz ICopIg== IG5hbm9wYXJ0aWNsZXM= IEFQUFJP IHB1cmNoYXNlcnM= IFFUZXN0 IEF3YWtlbmluZw== CVNlcmlhbA== LnJlcGFpbnQ= IHNhdm9yeQ== IHBvcm91cw== IGFWYXI= IFN1YXJleg== LUVhc3Q= Qm94ZXM= IFdlaW5lcg== IENSQQ== IOqwkuydhA== IHhsaW0= Ij8KCg== IHdhc2hpbmd0b24= 7Jq0 IHRvdGFsZW1lbnQ= X210aW1l LnNldFNjZW5l IGxsYW1h IGNibw== ZWZk IHVuZGVycmF0ZWQ= cmFpc2luZw== IE5BVElPTkFM ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCg== b3B0aWM= aWRlYXM= IOaPkA== IGxhaw== ISEs IGtvbW0= cGFyYWd1cw== U2l0ZXM= IHN0cmVzc2luZw== IE1hdEJ1dHRvbk1vZHVsZQ== IENvbnZlcnRlZA== YW5hbWU= X1JFQURPTkxZ XT0+ IGJvcmRlbA== IGJpYmxpb2dyYXBoeQ== IGdyaWRDb2x1bW4= IGpvdXJuYWxpc3RpYw== 7J6E IHJhc3BiZXJyeQ== c3RpY2U= IGFicmFzaXZl IERCSGVscGVy IGludGY= IFJUQlU= fSciLA== IEhhbw== c3dhbmE= IGphbnZpZXI= IGluc3RpdHV0ZXM= IFNlYmFzdA== X0NPTFM= IGZpZ3VyYQ== IFp1c3Q= Zm95 PigpKTsKCg== IExpZWJl QWdlbmN5 IOyLnOyekQ== IFRodW1ibmFpbHM= dGV4dFRoZW1l IGVjaG9pbmc= ZW1wZXJhdHVyZQ== IGZpcmVwb3dlcg== ZWRi OicpOwo= w6lnb3I= L2ZlZWQ= IGh1cmw= LWF2YWlsYWJsZQ== IFJlbmRlcnM= IGZkcw== IEpTR2xvYmFs IENpdGl6ZW5zaGlw a2llZ28= U3RhbmRhcmRJdGVt LnBsYWNlcw== IHNjYWxhYmlsaXR5 IFRyYWlscw== Zm9sbG93ZXI= IHNlcnZpw6dvcw== ID8+Ii8+Cg== W21ldGhvZA== KGli IHJpZGljdWxl IGFkYXB0YWJsZQ== ZmlsdHJv IGtldG9nZW5pYw== LkltYWdlVHJhbnNwYXJlbnRDb2xvcg== IENGTw== IFBFRA== ICIiKTs= b2dsb2Jpbg== W3NpemVvZg== QnJhbmRvbg== LlRvU2hvcnQ= IG5pxbw= IFRFUk1JTg== LmdldFN0YXR1c0NvZGU= IGRlYnRvcg== IENPTlNUUkFJTlQ= CXNpZGU= IERvbWlubw== 0YLQvtC8 IGdsYWNpZXI= IGdyb3U= enA= IENhcmxh LUZlYg== UGVs LnJlYWRWYWx1ZQ== Y2xpbWF0ZQ== IHRpbGVTaXpl LnRyaXA= RU5URQ== IGNodWJieQ== IGltcG9zaXRpb24= TE9XRVI= LmJ5SWQ= Lkxvb2tBbmRGZWVs YXJpaA== LmZpbmRCeUlkQW5kVXBkYXRl IFN0b3JlZA== IGJvdXJnZW9pc2ll SFRUUFJlcXVlc3RPcGVyYXRpb24= IHN1Y2tlcg== LmRlcXVldWU= bGlja2Vu IHN1YnJhbmdl X01FRElVTQ== SXNsYW0= IFNwYXJrcw== 77yaJQ== aW1wb3J0ZQ== IGAt IGpveXM= Z3JvdXBpZA== Rmx5aW5n CWJz Z3Jvc3M= IEZpZXN0YQ== IGNzdA== IGFmaWNpb24= b3Bob24= X0NJ am4= QmVhdXR5 IHNjZQ== IGNyYWNrZXJz YXBr IGdvcmQ= IHByZXRleHQ= IFtc IENhbmRpZA== R29hbHM= QWN0aW9uVHlwZXM= LG51bWJlcg== IHBvcHVsYWNl IGVudHJlbg== IEF1dG9m 6Zmi QmFzZUNvbnRleHQ= QmFsYW5jZXI= KEJvcmRlcg== IG1pbmNlZA== cmVjYWxs Y2Jh IGFwcHJvdmVz IEtsb3Bw ZXJtaW50 X2Zyb250ZW5k ZXNjbw== IG5pbmV0ZWVu RHJpdmluZw== IFhWSQ== IFRhY3RpY3M= IHByb2dyYW1hcw== aWVzZW4= TW92 ZGlldA== YXV0w6k= KCIuIik= IGdvdmVybm8= X0FuZA== L21pdA== IGNhZmV0ZXJpYQ== LXRyYWNraW5n IGNvbW11dGluZw== LnVua25vd24= X3R5cGVvZg== IFNTQQ== UFJPVE8= Lk1lcmdl IGZvckNlbGxSZXVzZUlkZW50aWZpZXI= IFNhdGlzZmFjdGlvbg== ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== SU1QTElFRA== IFJlc3RyaWN0ZWQ= IE1hZ251bQ== 0L3QvtC8 S2Fuc2Fz YXlsaWdodA== IFRvd2FyZHM= IFRvbWU= IFRlbmRlcg== X2RlcHQ= LmNydA== dHJlY2h0 U1RPTkU= IGVtcHRpZWQ= ICcpOwoK 4LiB4Liy4Lij 0Y/RgtGM bGVjaw== IFt+LA== LmV4cGlyZXM= IFRpZw== IElyb25pY2FsbHk= CUxM Lk5vdE5pbA== IOWKoA== IEdvdmVy IFBlcnNwZWN0aXZlcw== IERWUg== IGxva2FsZQ== IHJlc2VuZA== IGRvdWJseQ== IGNvbXVuaWRhZA== IEFzc2VtYmx5Q29tcGFueQ== KHR1cm4= IHN1Ymxpc3Q= IGVuZG9yc2VtZW50cw== X1JFR0lTVFJZ ISIpDQo= KTs7Cg== IGdhbnpl IEhhcm5lc3M= X21hdGNoZWQ= 5L6h 4oCiCgo= Q2hlZg== CUluaXRpYWxpemU= KTsiPgo= IEZhcmFnZQ== cmlzaA== YWx0ZXQ= RGVhbGVy LkxvZ1dhcm5pbmc= KGFmdGVy IEdhcnRlbg== IGV4cGxvZGVz LkNMQVNT IHVzZVJvdXRlcg== LUxh IHNhZGRlbmVk YXJvdg== VG9VcGRhdGU= IOae cGlp JwoKCgo= IFRSQU5TQUNUSU9O b25nYQ== bG9nYW4= Q3Jvdw== IGJyaXRpc2g= IENvbnRlbnRWaWV3 X0JC b2x2ZW5jeQ== bG9hZE1vZGVs VE9PTFM= aGV0ZW4= X25o QUJM LXZlcnM= QXJlbmE= LnNpbmdsZXRvbkxpc3Q= KHBhdA== CW5hbWVz KHNx IHZhbG9yZQ== JHJlcQ== IGFudGhyb3BvbG9neQ== VGhpbmtpbmc= IG1pc2NoaWVm IGFyY2hpdmFs 4KS5 LlNldFRvb2xUaXA= cHJhcg== YW5qYQ== IGZpcnN0bHk= CWxpZ2h0 LS0s IFNwZWFycw== IG9nbA== c3RlZW4= aW1wbGVtZW50cw== cmlzdHM= K0U= IEJhbnM= IGZhc3RiYWxs IEhlcm1lcw== dmVsZWQ= dHdlbnR5 IG5lY2VzaXRh IE1vcm9jY2Fu aXNMb2dnZWRJbg== Q0xPQ0tT LkFic3RyYWN0aW9ucw== LlBhY2tldA== IG1lbmFjaW5n LXZlc20= IExpdmluZ3N0b24= IG9jaQ== IGV4dHJhZGl0aW9u ICQoJA== IExvY2tlcg== IFJlYmVsbGlvbg== IG1peGlucw== Y3RhbA== L3JmYw== IFNHRA== LGlkeA== IGJsZWlidA== KFwk IHBldGVy IGJhcnJlbg== IHBob3NwaG9yeQ== IGdvZ2dsZXM= LmhvbQ== QGQ= PSct LmlzVXNlcg== YWthc2g= X2h1Yg== aXBlbGluZXM= IEB9 LnN1cm5hbWU= SW50ZXJvcA== IGluRmlsZQ== IGVzcGVjaWFsbWVudGU= IGF1dG9ub20= IFphbWJpYQ== X0NPVU5UUlk= PENvdXJzZQ== aWRlb2dyYXBoaWM= IENhbWVyb29u ZmluZEJ5SWQ= KSIu IERlcGVuZHM= cml0b3M= Lk91cg== IHN1YnNpZGl6ZWQ= JywnIis= IGdsZWFu IEFzc2VtYmx5Q29weXJpZ2h0 cGljYWJsZQ== IHVud2l0dGluZw== IG9tZGF0 IEVhc2U= IGVtYm9kaWVz KHBEWA== IFZvdGVy QXNzaWduZWQ= cmV2ZWFs IGZlbmQ= KHBhcnNlRmxvYXQ= IGRwcw== dHBsaWI= YXNzZXJ0Q291bnQ= eG1heA== VW51c2Vk KGZi IHN1Ym1pdHM= IFJlcGxpY2E= KGR5 IGJhbmRl LnNlbWFudGlj IHNlYXJjaFN0cmluZw== IFNhbmZvcmQ= CWZ1bGw= cHJt X3V0aWxpdGllcw== VU5VU0VE IHNjYW5uZXJz IGJmZA== Lk9yZ2FuaXphdGlvbg== LWN1cg== UmFpbA== IHhueHg= JSk7Cg== IG92ZXJwb3N0aW5n VmlldA== IHRhcGVyZWQ= IGNhbWVv IFZpZXdpbmc= IGRpc21hbnRsZQ== IGZpc3M= IFNlbnRyeQ== aGVhdG1hcA== IMOhcmVhcw== IEdyw7w= IGppZw== LmNsZWFyUmVjdA== ZXZlbnRUeXBl IHR1cmJ1bGVuY2U= Y2tpbGw= LkZvY3VzZWQ= IGludGVybWVkaWFyeQ== IE9iZXNpdHk= YXRlZ28= bW9udG8= IEFsYW1vZmlyZQ== IFNoZWlsYQ== IENPTExFQ1RJT04= Q2FyZEJvZHk= IEhhYml0 UExBTg== LnZpc3VhbGl6YXRpb24= JSkuCgo= IEludGVsbGlK IEdsb3Zlcg== LnNwYXRpYWw= IGdyZWV0aW5ncw== IE9wZW5GaWxlRGlhbG9n ey8q IFTDqWzDqQ== IEVm ICJbJQ== IG1hZ2lzdHJhdGU= IExpdGVjb2lu IFNlbGU= IGNvbW1lcmM= cHJpbnR3 bmV4dEludA== LmdldENoaWxkQXQ= IEdldEN1cnJlbnQ= IGV1cm9ww6k= IEFJUw== ZXR0ZW4= LkV2ZW50UXVldWU= YW5mb3Jk dW5ha2Fu LnNldE91dHB1dA== IGNtZGxpbmU= LGdldA== IEhlYXJk LmNvbnRlbnRUeXBl ZW1k IFJldG9ybmE= YWNk IFBsYXlvZmY= YWNtYW4= LndlYnNvY2tldA== Q2xpZW50SWQ= LmV4YW0= IGF0dGVudWF0aW9u LnNldENoYXJhY3Rlcg== CUNvbGxlY3Rpb24= 5rCX IHByZWRpY3RvcnM= IFNoZXJpZGFu cmltaW5hdG9y KFN0YWNr X1BLRw== PScnKToK KHBhZA== IE5vZG8= IGludGVyb3Blcg== IFRyYW5zcGFyZW5jeQ== CWR4 emVt IHByYXRpcXVl IGZpYnI= KCk/Owo= X01PQklMRQ== LlJFRw== X1lFTExPVw== VGl0YW4= JykKCgoK IGNvbXBvbmVudE5hbWU= IENvb2xlcg== aXNGdW5jdGlvbg== LmZlZWRiYWNr IHBlcmZlY3RlZA== IHBhZWQ= LXNjcmlwdHM= U3VzcA== PE9wdGlvbg== IER0 7YS0 J1JF IE5STA== IE1hbm55 IHJvZw== IEdhcnI= X2Nvb2tpZXM= U3Bs IHByb21vdGVycw== KmR0 XEFQSQ== IGV2b2tl X0VudHJ5 IGZpcmVmaWdodGVy aXZpZGFk SmFjb2I= IGxlZ2lvbg== KHBvbA== CWZsYXNo b29rZWVwZXI= LmNsaXBzVG9Cb3VuZHM= IGdyYXBoaXRl J2h0dHA= X1RSSUFOR0xF IERyb3BJbmRleA== LnNtdHA= IFVOU0lHTkVE X1BJQ1RVUkU= X09SSUVOVEFUSU9O IE9QUA== Iyc= w6FmaWNv Lmhpc3RvZ3JhbQ== IEJlbm55 Pldl IHJlcG9zdA== IGZpYW5jZQ== IEJvdW50eQ== c3RyZXNz RGF0ZXRpbWU= Okg= IFNwaGlueA== Tm9ybWFsbHk= YXBpeGVs IHVzZXJBZ2VudA== IE1vcmk= L2xhYg== Lk1PREVM IEVtb3Rpb25hbA== U2NhbGVk ZGV2aWNlSWQ= IOqzhA== Y2Vhc2Vk PElN Y2VlZGVk IGxpYnJhcmlhbg== KW51bGw= IG1pY3Jvbg== IEZvdQ== dWxlbg== L2xpdmU= cnNjaGVpbg== ZmVh IGhhYmls IE5hdkxpbms= bmVjZXNzYXJ5 LmNvZGVz LW1ha2U= IHBQYXJlbnQ= X3JlbGF0aW9ucw== IHJ1c2hlcw== IHByb3BlbnNpdHk= IFNraW5ueQ== V0VTVA== X2NvcnB1cw== KHJlb3JkZXJlZA== ZmRi IEdldE1lc3NhZ2U= QnJ1bg== LnZz IHDFgg== IGNydW5jaHk= Qm9vbQ== UEo= SmFrZQ== 57qm JGNsaWVudA== IH1dKQo= IGNvbnZlcnNl IEdSQVQ= IENSUw== Lkxvdw== KHZhbGlkYXRl X0NMSUNLRUQ= LmJsdWV0b290aA== CXh0eXBl IGNsb3NlTW9kYWw= X2ludGVudA== IHByb2dub3Npcw== c2F2 Q3Rs IGNob29zZXI= IFN1ZG9rdQ== PVVzZXI= LmNsZg== CWV4cGxpY2l0 IHBvdGVudGlhbHM= IEdlb3JnZXM= IGVsaWM= IHRzbGli IFJhZ25hcg== X3JlcHJlc2VudGF0aW9u LWxlZ2dlZA== aGFtc3Rlcg== IEZpcmVzdG9yZQ== Y29udmVydFZpZXc= Q29tYmluZWQ= INC00LXQuw== IGVzcGVjdA== IOOCkg== IFN0YW1pbmE= bG9va3M= RU5BUklP L2ZpeHR1cmVz LnNtcw== IHNlbWljbGFzcw== IHNlbWljbGFzc2ljYWw= LlBlZWs= XSQ= X0RTUA== X0xWTA== VklSVFVBTA== IENhcGl0YWxz IFNDVA== LldoaWxl IFN1YnN0YW5jZQ== LWRvbmU= IGVuc2xhdmVk Y2xhc3NpZnk= ZW50YW55bA== IFZlZ2V0YWJsZQ== X0RFUEVORA== RGFuaQ== IHF1aWVyZXM= IGFiYmlhbW8= IExpYmVy YWZj 6YCf cHJlZGljdGVk LlBORw== IFdoaXA= Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IOKJoA== IOWM REVN Q0NB L2Nsb3Nl IC8vLzwv IG1lc21h IEJlaXJ1dA== IEluaXRpYWxpemluZw== 4buZdA== TU9OVEg= IO2bhA== UGFya2luZw== Q29tZm9ydA== IEVuZ2luZXM= d2VycA== QFJlcXVlc3RQYXJhbQ== LUtleQ== IGJhY2tsaWdodA== cGFzc2Vz Lm51bWJlck9mTGluZXM= L0xpbnV4 KEhUVFA= IEh0dHBVUkxDb25uZWN0aW9u b3Nvcw== Lnh4 IGZpbG1wamVz ID09PT4= b3B0aW1pemU= Q2Fub24= IC4uLiIK ICciJzsK IGPDqWxpYg== IHByaW5jaXBhbG1lbnRl IFByb3BlcnR5VmFsdWU= T1VOQ0U= IGV4Y3Vyc2lvbg== IEFjY2Vzc1Rva2Vu cmVxdWV0ZQ== Vm9sdGFnZQ== ZXhwbGFpbg== fSkoKTsKCg== VVJMT1BU IGZ1bmdhbA== R3JlZWs= LWJsaW5k IGZldWRhbA== IFNvbmF0YQ== IERpYWdub3Npcw== JHhtbA== ZWRpdGFyeQ== IHN0aW11bGF0ZXM= UG9udA== Lkhhc1ByZWZpeA== Ym9hdHM= IFNjYXR0ZXI= IEdFTkVSSUM= IGZpc2hlcw== PWxlbmd0aA== IG1lbGhvcmVz c3BlbnQ= w7Rt IEluZ3JhbQ== Pi4KCg== cGFyaXR5 LlZpZGVvQ2FwdHVyZQ== IFR1YmVz IGNvbWVkaWM= IHByb2Nlc3NEYXRh QURC KG5ld1N0YXRl 5YGc IFdlYnNlaXRl X09mZg== LGJvZHk= IHN1YmNvbnRyYWN0 IGNodXRl IGNhcnRlc2lhbg== dGhyZXNo LkNhcnQ= IG1ldG9k Y3VzdG9taXpl THRk CXNvdW5k V2ViU2VydmljZQ== IEhpbmRlcmVk W3Jlcw== KFRpbGU= Y2FwYWJpbGl0aWVz X09WRVJGTE9X INGB0YHRi9C7 IENvY2g= IHRlc3ROYW1l V09SRFM= XE1vZHVsZXM= P3VybA== X2NvbnRpbnVvdXM= IFFJY29u IHN0YXJlcw== IGVqZWN0ZWQ= IEludmFzaW9u ZmluYWxpemU= IGdldg== PGc= IEVkaXRvckdVSQ== QmVybGlu LmxpbmVFZGl0 LXJlZ2V4cA== IHNsZWQ= IEVBQ0g= dWNv IHNlZWRpbmc= IGxvY2FsaXpl ZXR1 X2FsbW9zdA== cGFuc2U= IFNlbnNvcnM= X1NJ KnNw IFByb3BlcnR5SW5mbw== IGFwcm94aW0= IGRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 16A= IGRpZmVyZW5jaWE= TE9PSw== IG9tbmlw IFR1cmluZw== IHVuaWRhZGVz 77yfCg== LlJvd0hlYWRlcnM= X0FDVElPTlM= IERhbHk= IGZvcnRpZmllZA== IFdhZ2U= LnNpbXBz KGlzc3Vl IGxlcHQ= T3duZXJJZA== J29yZGVy 5Y+N 56Wo IHJld3JpdGluZw== Lkl0YWxpYw== IEZvcmdvdHRlbg== KElM IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24= ZXdu IHBvcHVsb3Vz IFNoZWQ= IyR7 IEFsbw== RGV2aWNlSW5mbw== KElOVk9LRQ== IHBlbmE= IEJCQg== LmJi IHRvcnM= IGNvbmR1Y2l2ZQ== LXB1cnBsZQ== IHNxdWFyZWx5 Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 0LrRgNGL ZmFzdGE= IGNwdA== IEluZ2Vu IHs/fQ== 0YPQsw== UGVybA== LnNreQ== LWF1dG9tYXRpYw== aW1wbGVtZW50 b3JubWVudA== LklNQUdF LVNwZWVk CUZpZWxk IHBvdW5kZWQ= IExa IGF1dG9Gb2N1cw== IOC5gA== LkNvbXBhbmlvbg== IFZpbQ== dW5jaWE= X3NrYg== IHVubWFycmllZA== IFNvdXI= Z2FhcmQ= TGVvZA== IOCq LkNsb3Vk IHJlaW5mb3JjZXM= J10+ IGZlbGl6 IFVBVg== cmFuY2Vz 5Y2B VG9MaXN0QXN5bmM= LkV4ZWN1dG9y LXRz ICcuJzsK IEtpbmVjdA== 44GE44GG IGJldm9y IEV4dHJhY3Rpb24= X2RyYXdlcg== JHN1Yg== IHVwbGlmdGluZw== LmJ0bkV4aXQ= KCcvLypbQA== UkVESVM= c3RkZXhjZXB0 ZGVv IGdpdmVy X2JpbmRpbmdz VG9EZXZpY2U= Lm1p IEVzdGltYXRlcw== YWxsZWxl Pz8/Cgo= IFN0cmVhbXM= IGFmZmxpY3Q= LnNhcA== IHF1YWxp IEdhdWw= U3BlY2lmaWVz IHpr IHNhbml0YXJ5 IG5ld0luZGV4 c3BlY3M= IGZyYWdtZW50TWFuYWdlcg== IE5lY2Vzc2FyeQ== CVNwcmluZw== PX4= IE9NQVA= Y2FyZWVy KCItIik7Cg== IERhcmxpbmc= aXRhZw== OnBr IFN0ZWxsYXI= IGluZmVydGlsaXR5 bGV4aWJsZQ== VW5hcnk= IDpdLA== Lk5FVw== Z3N1Yg== X1VGdW5jdGlvbg== LnNsaWRlcw== IGRpdmVyc29z X2xvY2Fscw== XFwv IHBjYXA= IE9vaw== LkRhdGFHcmlkVmlld0NvbnRlbnRBbGlnbm1lbnQ= ZXJzb25pYw== IHRyZWJ1aWU= IHNlcXVlbnRpYWxseQ== YWJhcg== IElQQ0M= IGRldm91dA== XEhlbHBlcnM= RVR3ZWV0 IHRyYWJhamFy IFdpbGtpbnNvbg== IGRhw58= SHVtYW5z VGVhY2hlcnM= IERhdGFWaWV3 IFlvZw== IGplZGU= IGFtYmlhbmNl dHJhbmQ= IGVycmF0aWM= IHThu6s= LnJhYmJpdA== IG5ld2JpZQ== IGVudHJhbmNlcw== IG9ydGhvZ29uYWw= IERJU1BBVENI IFNjaHJv X1RVUk4= Omludm9rZQ== IHRhbnRhbA== IFpvbmVz c3RhdGVtZW50cw== TGltaXRz IEfDpA== aWHFgmE= LnByZWRpY2F0ZQ== LkZS IENocmlzdG9waA== LkNvbnM= IEhvcnRvbg== X0N1c3RvbWVy CU1E IGVsa2Fhcg== IE1TRQ== IElzQWN0aXZl XSop XFVuaXQ= IGVv Rm9yT2JqZWN0 ZWxpYWM= LWRldmVsb3BtZW50 IHRlYWw= IHN0aXRjaGVk IE91dGNvbWU= b25jw6k= ZW1iZWRkaW5n IG9uTmV4dA== IO2VtOuLuQ== KGV4aXN0aW5n LmJpZA== CWFzc2VydEZhbHNl e2w= TEVycm9y X2J1bGxldA== KEh0bWw= IGVCb29rcw== cGVyUGFnZQ== L3F1ZXN0aW9u LmZha2U= Lm1i X2RsbA== IGN1bXNob3Q= IE1hZGFnYXNjYXI= SE9MREVS IHBlc3F1aXNh X0RFQ0xT XSxbLQ== IEFsYmFuaWE= LXRvYXN0 IHByb3RhZ29uaXN0cw== IG15b2NhcmQ= IHdhbGtlcnM= ID09PT09PT0= L1BhZ2U= PTw/PQ== IGVucXVhbnRv X1RSVU5D IHNlcHRlbWJyZQ== IGxheW91dFBhcmFtcw== ICcuLi8uLi8uLi8uLi8uLi8= IFRyYWZmb3Jk IHBhbGF2cmE= IHJ1bmRvd24= IGJyaXR0bGU= w6RjaGU= LllFTExPVw== IENlcmVtb255 IG5ld1RleHQ= dmVjcw== IGVzc2Vu IE1ldG9kbw== IEdVSURF IHBvc3Rwb25l IFZTdGFjaw== WyIk IE1pY3Jvc3lzdGVtcw== XFBhZ2U= cG1hdA== X0ZBVUxU X21C U3RhdGVNYWNoaW5l RmFjdWx0eQ== Lnd4 IE1vemFydA== YW5pbWU= IHB5dA== IEJ1a2tpdA== LUlORlJJTkdFTUVOVA== IHNlYXJjaGVy LWJhc2tldA== IG9tYXM= IFR1bmlz IFBsYXR0 IHsNCg0KDQo= eWFo dG9sdWE= SW50cm9kdWNlZA== c3VwcGx5 IG1pc29neW4= IFdhaXN0 IEVI LW9wZXJhdG9y IGRhcmtlbg== IENvc21pYw== IGdsYWNpZXJz IA0NCg== XVtf Q29tcGFueUlk IFJlY29uc3RydWN0aW9u aXp6bGllcw== IGzDrWRlcg== IGNvbGxlZ2lhdGU= IFBldHR5 T1VSTkFM ZGVjb3JhdG9ycw== cmFtcw== KCgK IEFzdHJvbm9teQ== IHJpbw== IEN5cmls anVhbg== IHJlaW5j IFBpc3RvbnM= IEJ1c3k= cHRyb24= IHBvbW9j CVJUQ0s= QnV5aW5n Ly8qKgo= IFdyYXBwZWQ= IE1lZXI= IGltYXA= IGJlc3RpbW0= IEFnaWxpdHk= LlRvVGFibGU= c3RpbmVuY2U= XSkqKg== IEF1dG9tYXRlZA== ZHNw IEdhcmxpYw== aW9kZQ== ZXhlbHM= aW50cm9z IGJlc3Rvd2Vk KHZpc2libGU= IGh5ZHJhdGVk bm94aW91cw== IEF1dGhlbnRpY2F0aW9uU2VydmljZQ== IHNob3dNb2RhbA== IGNvbXBvc2Vycw== R0VORVJBTA== Q1RT IFNocg== Y3JlYXQ= IGNsb3NldHM= IGdyb3VuZGluZw== IENPTU1FTlRT ICsj IGdyb3VuZHdvcms= KGluZGV4UGF0aA== Z3JhdGlz dXBwaWVz IGt2bQ== IGN1YWxlcw== LkRlZXBFcXVhbA== IGFsbG95cw== LWJ1ZGdldA== KF9fXw== IGNvbmVjdGFy LXJhZA== IGl0Y2g= bGFtcA== LmdycA== LWFkZG9ucw== IHNlYWJvcm4= IG5lZ2xpZ2VudA== X0RldGFpbA== IHNlcmVuZQ== IGJhcnJhY2tz IGJx IFNlY3Q= KGRhdG9z IHRoZW1hdGlj IHBvbGx1dGVk CWFuaW1hdGlvbg== SHVnaA== RXhlY3V0YWJsZQ== KCcvJylb IGFwb3B0b3Npcw== IGFiYnJldmlhdGVk Zm9vbg== UmFua2Vk CWhpdA== CQkgICAgICAgICAgICAgICAgICAgICAgIA== Q29udGludW91cw== IG1vdmVUbw== REJPYmplY3Q= IGNvbmNlaXZhYmxl IEd3ZW4= IMOhbGw= X18oKQ== IExhbmE= IGVpbnplbA== IHJlY291bnRz eXN0ZW1z b3dhbnk= KTo/Pgo= IEFrcm9u b2xpbmk= Q29ycA== YXBocmFn ICInLg== IGNvbnZlbmVk IC4uLi4KCg== IGNhbGxlZQ== IENsb3Zlcg== LmRlc2NyaXB0b3I= Lkl0ZW1TdGFjaw== IHBlcnZlcnNl X0NF PUAi LS0tDQo= IGJldg== c3VtYQ== YWNjdW11bGF0b3I= IGxpemFyZA== INC+0Yc= Z2V0RGVzY3JpcHRpb24= IFNhcmFz Lm5leHRTaWJsaW5n IGVsYXN0aWNpdHk= IGNoYWM= bW92ZWQ= X1RvcA== dHJlcg== KGRvd24= ZWxlbXM= b2JpbGk= LnBvc3RNZXNzYWdl ICjiiA== Q3N2 IFlvc2VtaXRl c3dlZXQ= TUFUUklY aWdyYXRlZA== IGZvcmdpbmc= IFBhZ2VTaXpl dHJhbnNmb3Jtcw== PVlFUw== IGRpc2Nsb3Npbmc= IFBlZGlhdHJpYw== IERlYWRseQ== UmVzb3VyY2VJZA== LWJpbmFyeQ== IFJvd2U= IENhaXI= X2V4dHJhY3Rpb24= RGVjcmU= IE9ic3Q= cGxy IFBoeXNpb2xvZ3k= bXZj aHRp LlRl IGV4dHJhdmFnYW50 IEFudGli w7NzdA== b3V0ZGly IGNhcm5l Vmlld1BhZ2Vy IGltcGxhbnRlZA== U2VhcmNoUGFyYW1z w7xyZ2Vy Y29uZGU= YWNlbnRl X0NVREE= JHZhbA== IldoaWxl IHRlbXBMaXN0 IHN5bmFnb2d1ZQ== Y21j INGA0LDQsdC+0YLRiw== IHNlem5hbQ== IHNlc3N1YWxp IGNhYmV6YQ== ZXTDoA== IGZhw6c= Z2Vo Y2VkZQ== IlNvbWU= Om9u LWZvcm1lZA== YnluYW1l IOuwmO2ZmA== IG5hw68= IEFVRw== IGVhc2Vk XSl7 KHB0aHJlYWQ= IGplZGVt KGZpeHR1cmU= IFBhcmw= XX0pOwo= IGV4cHVsc2lvbg== IEluZXRBZGRyZXNz IE1MUA== LicpOw== IG9ybw== IFNldmlsbGE= IGZvcm11bGFpcmU= LXRlcnJvcmlzbQ== L1dlYkFQSQ== KmFuZ3N0cm9t Y3Jhd2w= X2xvYW4= X0RJR0VTVA== IEtub3h2aWxsZQ== LmdjYQ== IERpeQ== bnRhZw== YWJsZVZpZXdDb250cm9sbGVy LkZlZWQ= LXNoYXJlZA== IGNvY2Np X2ludml0ZQ== IEJ1Y2tpbmdoYW0= IEdsdXRlbg== IGVuZGVtaWM= UmFpc2Vk IHF1ZXJ5SW50ZXJmYWNl IG1hcnRpbg== QuG6oW4= IGhhcmU= IGRlaW4= cmFyaWFu bXlmaWxl IGFuZ3Vpc2g= VGV4dG8= IEJVRkY= KGxu bWFycw== X3N1YnRpdGxl X2dpZnQ= IGJvbGRseQ== IFNpbmd1bGFy KExvZ0xldmVs PEFydGljbGU= L3N0YXRz INC/0L7Qsg== IGl0ZW5z IGRlbm9taW5hdGlvbg== LkRhdGFHcmlkVmlld1RyaVN0YXRl X0xS IER1Y2hlc3M= CUJsb2Nr dHJhY2Vy LUNO XEFwcERhdGE= Lmxpc3Rz KFJvdXRl IEdPT0RNQU4= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== IHRpbmhh IGV2ZXJsYXN0aW5n YURhdGE= KGNvbXBhcmU= IHJwdA== XFBocA== LkZJTEVT IHNwYXJpbmc= U2Nhcg== INin2YTYqg== IEJldGhsZWhlbQ== IGJhY2twYWdl c3BsaWNl ZsO2cg== QGR5bmFtaWM= 4bupYw== 7KY= LnBhZ2luZw== IEJlbG1vbnQ= LkVYUA== IGludGVybGU= IENoZWNrbGlzdA== IFVuaWNvcm4= QkVTVA== Z2V0UGxheWVy LmFyZ3NvcnQ= IHdpdGhTdHJpbmc= IE1vZGVyYXRl fSI+Cg== LnNldEltYWdlQml0bWFw IHRyZW5jaGVz IGdlbmVyYXI= IGZlcm1lbnRlZA== IGRlanRpbmc= Q3RybHM= IGRpc2FncmVlcw== UXVpZXQ= KFNRTEV4Y2VwdGlvbg== IFRlbnNvckZsb3c= T05B UG9ydGxhbmQ= LlB0cg== bGx4 YXN0b24= Q2x1c3RlcnM= IFVzdWFyaW9z IGtoaQ== IGdpYQ== IERvbHBoaW4= xZFz IGx1ZGVy IGRpc3Bvc2l0aXZv IFZ5 b21wc29u IO2VoA== IGtjYWw= IENhbGNpdW0= U2VjdGlvbnNJbg== IENhc2M= IGdyYXR1aXRp b3NvbWFs IHVuZGVyY3V0 IENhaA== OnBhcmFtcw== IHJldHVyblVybA== IEVyZQ== w6lyYw== IGludGw= fS8jew== IG91dHB1dFBhdGg= IGZhbHNlaG9vZA== IFVzZXJSb2xl PEhhc2hNYXA= IENyZWF0ZVVzZXI= IENvd2JveQ== CVVzZQ== XSgK IFNob3BpZnk= Vmlld1N0YXRl QWR2YW5jZQ== LXRhbms= IlQ= IEplbnM= PW9wdGlvbnM= KCIuLg== Lm1pbWU= IENSVA== IGjDpHR0ZQ== KHNv LlVOS05PV04= IGRhcsO8YmVy IENPVkVS R2Vt Q3Jv X1JFQ1Y= X2hpZXJhcmNoeQ== Q2hvb3Npbmc= SkVYRUM= IGRvcnNhbA== KyI8 IE5leQ== V29tYW4= QmV6aWVy IHJpZ3M= IG9udHZhbmc= 77yM5YiZ IEdhdXQ= Y21i TmhhcA== IG1vbm9j IGVuZXJnaWE= b2JzZXJ2ZU9u c3Rha2Vz LSot IE5hY2s= fX0iCg== ZXJ2YXM= IEhpbmRlcmVkUm90b3I= QWRqYWNlbnQ= IEludGVybmFjaW9uYWw= CWFyZWE= IPCflA== IHNwYXJrbGU= KCkuXw== LmlkZWE= IHV0cmVjaHQ= IG1hcHBlZEJ5 IENvbG8= CVRS UG9zdGVy IGNvbWJhdGluZw== IFllbGxvd3N0b25l aWVycmV6 YWNjdA== IHPDoWNo Lk5ld3M= IGZpZWxkVmFsdWU= IGNheg== IEZyZWVt CQkKCQo= IHVzdXI= IHNvbGE= IGN1bWJlcnNvbWU= IGNhdGFwdWx0 Ii4v IEV4ZWN1dG9ycw== IEFtZXM= ICc8JT0= ZmlsbG5h LOKAlA== OlNldFRleHQ= LWNhdGVnb3JpZXM= LWFyY2hpdmU= IFBvbGx1dGlvbg== Lk9m 4oCcQXQ= X0NIQVJTRVQ= KENvbHVtbg== 4oCZKQ== IHVubWlzdGFr IGVhcm0= IFBsYXRmb3Jtcw== IE1vbWVudHVt VmVjdG9yaXplcg== cmF3ZXI= KHBhc3Nwb3J0 KHBsYW5l IHJlcHJlc2VudGE= IHB1YmtleQ== IEphaW4= IG1lbm5lcw== IGluc3RhbnRhbmVvdXM= IGV0aGVycw== IG5lc3Rz IFBhdHRvbg== IEhBQ0s= cGFja2luZw== SVNlcnZpY2U= IHJvY2tlcg== IGZpY2E= IEdsYWRpYXRvcg== IFVQQw== IExvd2VsbA== YmVhcmVy IHZpcGVy X2dsb2I= IG1hc2hlZA== IGhhaXJzdHlsZQ== IHVuZGVybWluZXM= cmVzdGF1cmFudHM= IHJlYWN0aW9uYXJ5 IGJpbGxpZw== fSIpOw0K IHZpc3Rhcw== IG9wZW5kaXI= CWxhYmVscw== YWxsaXM= IFdvbGZm IENQQw== IHJhaWx3YXlz IFZhdWdoYW4= IEFza2luZw== Y2Fp IEdu X1BST0Y= LVNlcA== LmN1cnZl TXVsdGlwbHk= 0YDQsNC90LjRhg== IG1lZXR1cA== Z2V0RGI= KEdVSQ== IHJlaW1idXJzZQ== OnJlc3VsdA== VHVtYmxy LkNsb3NlZA== IGNvbmZvcm1z IEhvaw== aWVkYWRl TmV3TGFiZWw= IG5hdkN0cmw= RG9jdG9ycw== IOyViA== IGJvdXRz IGlzYw== Lyc7Cgo= dWhs LlVp LXNhbWE= IENhbm9uaWNhbA== IG1ldGljdWxvdXM= IGdyb3Rlcw== IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= ZXRlcw== IGxhbmd1ZQ== IGZDaGFpbg== IFR5cGVmYWNl IEJyaWdoYW0= aWFyZQ== J8OpdGFpdA== IEVGRg== IGRlc3Ryb3llcg== X21hdHJpY2Vz TsO6bWVybw== Y2FsbGFibGU= X3BlcmlvZHM= c3RydWs= bWFq LnJs LmxpZnQ= 2YrZhA== w5A= UmV0VmFs RGVudmVy IFRyaWJ1dGU= a2l5ZQ== emV3 IFNwYXJl IGxldWtlbWlh IHdhaXRyZXNz IHBsdXTDtHQ= QWxpYXNlcw== IExvY2F0ZQ== 5rY= SWRlbnRpZmljYXRpb24= LnRlbA== LWRheXM= dGVycml0 aW1idXM= IEJ1dHRlcktuaWZl 64K0 cnVwdGN5 IEdyYWRlcw== IHVuZGVyc2lkZQ== IGhhcmRzaGlwcw== dW5laQ== LWNvbnRhaW5lZA== IFsnLg== T2Jzb2xldGU= LlJldHJvZml0 IHVyYW51cw== X3JnYmE= IHJhcGVz IEthcmU= W+KApl0= IEZpbmNo LmJ1bmlmdUZsYXRCdXR0b24= cXVpc2Fy IE51cnNlcw== ZWdhZGU= IGhu RXhjbHVkZQ== IHN0b2NoYXN0aWM= IHNvdHRv IFBlbmFsdHk= IHNvbnN0 IHJvc2E= X0ZpbmQ= IEludmFsaWRhdGU= TGlzdEl0ZW1JY29u JywNDQo= X3BkdQ== IE1lYWxz YWrEhWM= IE9vcHM= IE5vdGljZXM= IGRlcml2YXRpb24= W10NCg== 6Lqr eXN0ZXJ5 X2ZpdmU= RWFybg== PWV2ZW50 IG9ncg== LVJFQUw= IExpcHM= c2VsZWN0b3Jz YWRpZXI= IHNldEJhY2tncm91bmRJbWFnZQ== KHRoaW5n IHNvZnRiYWxs XHhhYQ== KGlkZW50 IEp1cnk= IFZveWFnZQ== IFRBcnJheQ== KFBhaW50 V2FybQ== RVhURVJOQUw= YXN1 ICghKCg= LkZFVENI IHNraXJt T1JFRA== Y2FuY2VsbGVk aXR0ZWw= IHNlZWR1 bGljaGVz b2hv LHJldGFpbg== KFdlYkRyaXZlcg== aXB0YWJsZXM= RVJJQ0E= IGNsZWFubGluZXNz ZWxsb3dvcmxk IGNvaGVzaW9u Z2lzdA== XS4n ZXJnaW5n IGlzcA== Lm9mZnNldFRvcA== KGZhY3Rvcg== dW5pdmVyc2Fs IFBsYXliYWNr IEJ5dGVTdHJpbmc= IGRhbW5pbmc= IFNTUg== YWN1cw== IFN0YXRlbg== IOWVhuWTgQ== IFBlZQ== IFNhbXBsaW5n YXRvcmlh c3RhcnRJbmRleA== 5ZCr IOy0iOq4sA== IE9saXZlaXJh IEZsYWtl Ym9vbQ== X01TSw== IEZhY2luZw== b3JnaGluaQ== Zm9vZHM= VHJlZVdpZGdldEl0ZW0= IEhBTEY= IiIiKQo= IENIQVBURVI= IEV2ZWx5bg== Pis= IEhvcm5ldHM= d29rZQ== IC9b YXRob2xpYw== LnNlZ21lbnRz Lm5hdmlnYXRlQnlVcmw= IE1hbnVz IHBlcHRpZGVz IGZsZWV0aW5n IEFUVg== IFNoaWI= SW50QXJyYXk= IG1veg== cHJvYmxlbXM= b2duZQ== Lk90aGVy QWRtaW5pc3RyYXRpb24= JSUqLw== Il09PQ== IEFuZHJlcw== QWRh aGludHM= XCIiOwo= KHBuZw== IOqwgOuKpQ== 44OK cmVqZWN0ZWQ= IG1vdmVycw== 546H IHBhcmVudGhlc2lz KGFzc2lnbnM= RWxpdGU= UmVtaW5kZXI= IHN1ZmZlcmVycw== IFJlc291cmNlQnVuZGxl dGhhZw== PicNCg== YW50aW5v UGVyaXBo IFNoYXJk Q2hhcnREYXRh KGpq IG9zdGF0 aHVnZQ== LWF1dGhvcmVk LmNp IHB5bXlzcWw= IGxpbmVycw== IEFUUw== Pkxhc3Q= KSIpCgo= IGdldHBpZA== R2V0U2l6ZQ== IGV4dG9ydGlvbg== W2Zsb2F0 IEVJTkE= L0Jhc2U= LnNldE9uQWN0aW9u 0L7Qu9GP IEdsYWNpZXI= X2F6 IHRyYW5zcG9ydGU= IFNtcw== dGh1bWJz IHRyZWFzdXJlcg== IG16 aXN0aWs= UkVESUVOVA== IGlzaQ== X3N0dWZm UE9TSVRPUlk= c3RhcnRkYXRl IFppbmM= 5rG9 IGthaw== IGVyZmFocmVu X0NPTUJP IHVjd29yZHM= LlBheQ== IGtpbmdkb21z IGV4Y2VsZW50ZQ== aWduaXRl X3ZhcmlhdGlvbg== IG5hdmVnYWRvcg== 5LiT dmlld0NvbnRyb2xsZXI= cmlyZQ== SG9uZXN0bHk= Q2FzY2FkZQ== ZXRyYWlu QXJnZW50aW5h Y3E= IE1hcmlhbg== L2Fy IGludGVyZXNzZQ== dXJhaGFu KFBD IGZyaXZvbA== IFRydXN0ZWQ= KElDb25maWd1cmF0aW9u IFJpaGFubmE= ZW5kb3ph ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByb2NsYW1hdGlvbg== IHByZWRvbWluYW50 IGNvbnN0cw== LW5lY2s= V29sZg== LmNoZWNrYm94 IHN0YW56YQ== IGVudGVuZGVy Ly8o SGFuZHM= IGJpbGxlZGVy IFRvc2hpYmE= YWJiaXg= RU5DSUVT IGppbQ== UFVS Lmxlc3Nvbg== IGJlcnRo bGFyxLFu Qmxv CWV4dA== ZWVs IGRlbWFzaQ== IGNvbG9uaXphdGlvbg== L2Rpc2M= 77yP Q2VydGFpbmx5 566h55CG5ZGY IGpvZ2Fkb3I= dcOp Q29sdW1uc01vZGU= IEpW IEluc3RpdHV0 X3NwZWN0cnVt LmRlbnNl IFNob3J0Y3V0 IHNlYnVhaA== IGZsYXNoeQ== UmVnYXJkcw== IHNoYXJwZXI= Y2FuY2VsbGF0aW9uVG9rZW4= X2RldGFsbGU= IFNjYXJsZXR0 INC80LDRgg== IG5lZ29jaW8= 4LiW IEpX d2ViZHJpdmVy LndhbGw= IHhhbWFyaW4= b3BhcXVl LkFkZFBhcmFtZXRlcg== KENvbnRyb2xsZXI= LWFib3J0aW9u X0ZVTkNUSU9OUw== Q3VzdG9tZXJJZA== IHZlbmly IEJ1c3Rlcg== X3ByZWRpY3RlZA== L3J1bGVz LU1ldGhvZHM= IGdkemll Il0nKTsK IFB4 Q09OUw== LlNsaWNl IHJldmFtcGVk IFRhYmxlVmlldw== IGRpY2tz IO2YuOy2nA== IEF1eGlsaWFyeQ== T3BlcmE= L3Jj IHVudGhpbmthYmxl IGRlZHVjdGVk bHo= IExhZ2U= IFJvd2xpbmc= cHJvdmVk T2ZmZXJz LHNldA== UkdCTw== IEZV IENlbnRPUw== b3pv IFRyb2phbg== IG1hw7FhbmE= IC8vPQ== Kio6 IHtcCg== IEJvd2Vu S25vd2luZw== IOW6 PS09LT0tPS09LT0tPS09LQ== IGViZW5mYWxscw== XT17Cg== Qk1J KCk7KQ== KHBlcm1pc3Npb24= QW5kZXJzb24= IGRlZ3JhZGU= U29hcA== dcWf IFB1cHB5 IEV0aGlvcGlhbg== IFRFU1RJTkc= ZW5zZXg= IGRyZXNzZXI= IENob3Jl VW5oYW5kbGVk QXNzb2NpYXRl LmFkZGl0aW9uYWw= IGRpZmbDqXJlbnRlcw== aXNxdWU= IG5lY2Vzc8Ohcmlv IGdlbmVyaWNz KHBm IFxg IE5lYXJieQ== YXBvcmF0aW9u IFRoZW1lRGF0YQ== V2lGaQ== LlJlYWw= YWN5ag== TGl2 IHBzeWNob2xvZ2ljYWxseQ== bWV0aG9kUG9pbnRlclR5cGU= IE5pa29s IERlZGljYXRlZA== X1BPUlRT IEphZQ== TlNBdHRyaWJ1dGVkU3RyaW5n IGFtYmFzc2Fkb3Jz IEhhbmRsZXJz IEFuYXQ= IHZvY2FsaXN0 IHJhcg== IGRldnVlbHZl Lmdz IHhjYg== IHN1Ym1vZHVsZQ== IEFTU0lHTg== dXJlZW4= IGNsYXNlcw== ZW1vdGg= X0NOVEw= X2p3dA== IOuniA== IG91dHBvc3Q= IEluYm94 CWZsZXg= IEdyb2Nlcnk= SUxJTkU= Lm1vYg== IENvbnN0cg== XT1d KHdhbGxldA== IHNlZGU= ZmFs IGltcGFzcw== PXtbJw== IHVuZm9yZQ== ZnVzZQ== X0xlYW4= IGF2YWxhbmNoZQ== PXJhbmQ= IGFkdWx0ZXJ5 IEdlZQ== CUlucHV0U3RyZWFt IGNhYmVs X01PVU5U IG5vdGljaWFz IFJhdW0= IGJ5dGVhcnJheQ== IG9uSGlkZQ== ICkuCg== JGluc3RhbmNl IGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRo YWNhbQ== LWNvbGxlY3Rpb24= IHVwaGU= UG90ZW50aWFs IFNEUw== X2FwcHJvdmFs RGFtbg== OmNvbnZlcnQ= IE1vZGlmaWNhdGlvbnM= IOyYiA== IHVuYWI= IHNjcm9sbGVk KyIpOwo= IGdhdWNoZQ== IEhPTA== YW50YW5hbW8= IGNvbHVtbkhlYWRlcg== CVpFUEhJUg== emFj IG91dGluZ3M= IGFwcGxhdWRlZA== aG9yaWE= bW9keA== IG1pbGxlbm5pYQ== Jm0= Lkpzb25JZ25vcmU= IHBpb25lZXJlZA== IENhdnM= CWpz ZGVwYXJ0dXJlZGF5 X2ti LlBhdGllbnQ= IHBldGFscw== cG9ydHJhaXQ= In19Cg== SG9tZUFzVXBFbmFibGVk LnByZXR0eQ== LGNsanM= IG1lZGlvcw== aGFzaGVk ZW1vZGVs IE1vam8= LmZyb21SR0JP LXBl IGludGltYXRlbHk= IGVsZ2c= W107DQo= L09ic2VydmFibGU= IG9iZWRpZW50 IEphbWFs UmVxdWlyZWRNaXhpbg== IExpc3RWaWV3SXRlbQ== CXBsYWNlaG9sZGVy X3RyYW5zYWtzaQ== PFNlcnZpY2U= IGVuc3VlZA== IFJpY2Fu U2FnYQ== QVVESU8= IGpt LXNhbGVz LW11bHRp JSI7Cg== IGNsYXNzaWZpY2F0aW9ucw== IHTDo28= Q29hbA== OycpOwo= IGRlbGlnaHRz X2h6 X2JvbGQ= REVQRU5E INCh0L7Qt9C0 YXRlZQ== X3N1Ym5ldA== IFRvd25zZW5k IENhc3RpbGxv IHBydA== JC8p IGZpbGli KCcvJylbLQ== IHVwaG9sc3Rlcnk= IGNvbXBvbmVudGU= IFhG LlJldmVyc2U= X3R1bm5lbA== SW1tZWRpYXRlbHk= LW1vdmU= IGFsaXN0 V1ND c3RydWN0dXJhbA== aXN0b3JpY2Fs VGFuZ2dhbA== IENPVVJU IG9ic2N1cmVk IGxhbmRzbGlkZQ== IGJlZHNpZGU= IGJhcmFuZw== LWVsZWN0ZWQ= IGNlcmFtaWNz LS0qLwo= IFdhbm5h RHlu IHZlcnNjaGllZGVuZQ== IGluZHVjaW5n IGZsdXRl LkFwcGVuZFRleHQ= IFp1Yg== IFB1bGl0emVy OmJvdGg= Lm1heExlbmd0aA== LlByb3BlcnR5VHlwZQ== YXd5 aXRlbU5hbWU= IE5hcnJhdGl2ZQ== cmV2b2x1dGlvbg== IGhhbHRlbg== IEVycm9yUmVzcG9uc2U= Z2F0aGVy L3V0aWxpdHk= Oicn IEtlZQ== IE9seW1waWE= Q2xpbmljYWw= OmdyZWVu IFBsZXg= IEtlbnNpbmd0b24= IFBob25ldGlj IGRpc3RyaWJ1dGVz X2V4ZW1wdA== V2F0Y2hpbmc= Lk1pc2M= IGRvbWFpbmU= OiIu 44OV44I= X01PRFVMRVM= IGhhYmxhcg== IExhb3M= LnNldFRleHRTaXpl LnBhdXNlZA== X1RX IG92ZXJ3aGVsbQ== IGhlbWF0 THVja2lseQ== IFNFTlQ= IEludmVzdGlnYXRvcnM= Pih7 KGZvdXQ= IEFVWA== LnJhd1F1ZXJ5 LXN0cm9uZw== IHJlc2VtYmxlZA== IFNoYWZ0 IFhJSUk= c3VnZ2VzdA== IHNpbmdhcG9yZQ== X2FiaWxpdHk= JGs= CWlOZEV4 XEltYWdl Q2FkYXN0cm8= LnBpdm90 IG1hbnBvd2Vy X2F0dHM= LnNldEZpbGw= ZXdvcmxk Y29uc3Rz R2V0V2lkdGg= IGdyYXR1aXRh IFBldHI= LWFuc3dlcg== IEhlbWlzcGhlcmU= IENhag== IFRyYWRlcw== xIdp IEZyZWRkeQ== T25DaGFuZ2U= IHBvcm5vZ3JhZmlh IFNVTU1BUlk= X21lYXM= IERSSVZF IENyZWU= X21hbGU= IHN1aw== IG1hbmV1dmVycw== c2V0VmlzaWJpbGl0eQ== YWxsaQ== IGRpc2NyZXRpb25hcnk= cmVnYXRpb24= WVNUSUNL OmhyZWY= IHRhcmFm IGNodQ== IEBb RW5vdWdo LlRyYW5zZmVy SWZOZWVkZWQ= OildKQ== CSAgICAgICAgICAgICAg W2F4aXM= VHJhbnNsYXRpb25z LnNlcnZlcnM= IEtFRVA= JywpCg== c3BvbnNvcg== YXJjaGl2ZXM= LlVsdHJhV2lu IEhvbm91cg== J10pKTs= IGluZWxpZ2libGU= IEFudHdvcnRlbg== IEFwcGxpY2F0aW9uRXhjZXB0aW9u IGNhdGVnb3JpZQ== IFdFSUdIVA== IEJ1bmR5 IFBJWEVM IGR1a2U= VG93ZXI= U2NvdGxhbmQ= IHJlZmVyZWVz IEFzc2VtYmx5VHJhZGVtYXJr CXN0YXJ0QWN0aXZpdHk= Lk9uZVRvT25l IEF1c3dhaGw= IHN0cmVuZ3RoZW5z LlF1aXQ= IFVSTFJlcXVlc3Q= ZWVj IHJlZ2lzdHJhemlvbmU= IGhvc2Vz QWN0dWFsaXphcg== L2FycmF5 IGNvbnN0cnVjdGlvbnM= Y2Nk IEZpbGVOb3RGb3VuZEVycm9y VGjDqm0= KHJlc3VsdGFkbw== IFNFUklFUw== U3BlYWs= X0FIQg== QmxvY2tlZA== LWZvbnRhd2Vzb21l Ol0p b2JibGU= KGxpbmtz IENhdGFsb25pYQ== R2VW LkRhdGVGb3JtYXQ= IGZsZWE= LmVm IHNvbGljaXR1ZA== IERZ Y29kZWdlbg== eXRoZQ== IGVwb2xs X1RE IGFmZmlybWF0aW9u X2Zh SVNUQQ== IEVhdG9u Y3JlYXRlUXVlcnk= IGxvZ2lzdGljYWw= IFJheWNhc3RIaXQ= IGNhdWxpZmxvd2Vy IHVsY2Vy LkFscGhh aW5rZQ== Wy4u RVhBTVBMRQ== LXdhZ2U= IHN0YXRp ZWN0aXZl LmdldE1pbg== IFNVQkpFQ1Q= IEF1ZGlvTWFuYWdlcg== enphcmVsbGE= IFNlbGVjdExpc3RJdGVt ICQNCg== IG9oaW8= IFRhaG9l IGtXaA== cXVlcnlTdHJpbmc= IGRlcGFydGFtZW50bw== PWFkbWlu IHdvcmtzdGF0aW9u KSsrOwo= SGVhZGVySW5TZWN0aW9u IFRyaXVtcGg= Q2hhcmxvdHRl IFNNQQ== Q8OzbW8= IHZlcm0= IHRoZWFubw== Ymdjb2xvcg== XCIiLAo= IFJlbWluZGVy QmlsbHk= b3JhbFR5cGU= Z2ViZXI= KGNsb25l IEt1dA== Lz4u QXBvbGxv IHNobA== Wkg= VGh1bmRlcg== IGdpZnM= X2tlbGFz IFJvdGhz IH0o IEJyb2FkY29t IERlcHRocw== CUlOTkVS cGFyY2Vs IGVqZXJjaWNpbw== IGluZGVwZW5kZW50cw== aWxsb3c= ZXhlY3V0YWJsZQ== RXZlbnRv IHpvc3Q= IEhNQUM= W0RsbEltcG9ydA== YWxsZXM= X2Rlcml2YXRpdmU= QXBpS2V5 IHN0ZXBwZXI= PXBsdA== Z2V0SW5kZXg= IHZhbGV1cnM= UG9saXRpY3M= IElEWA== IFVzYQ== IExUQw== Lm1pbkxlbmd0aA== c3Rybw== X05D IHN0YWduYW50 IG1vbnRhZ2U= IGJsb3VzZQ== ZWxpZ2U= IHR1cnF1b2lzZQ== IFN1cGVybg== 5q2z dmFyYQ== TmV3SXRlbQ== X0VYVEVOREVE IHdvb2R3b3JraW5n IEVwaXNjb3BhbA== LnBhaXI= LlVzZXJJbmZv IGRpcmVudA== L3RjcA== IGZyYXVnaHQ= U2xhdmU= LmdldExhdGl0dWRl IFRvb2xib3g= IGVhcm5lcnM= IEhPVVI= 0LDQu9Cw cG9zYWJsZXM= Y29uZGl0aW9uYWxseQ== X3h4 IGxhbsOn KHJw Q2hh IGluY2Fybg== LkRhbw== Li8o 2KfZgQ== VGQ= Q0VG L3JhbmQ= LlZpcnR1YWw= IGRiSGVscGVy YW1pbmVz IGx6 IHN0b3M= IEF0a2lucw== X0RE aXRvcmlv IG1pbmltaXNl aGlwc3Rlcg== KHsuLi4= X1NSVg== W2ZyYW1l IFJva3U= R1JQ IGJhcmJlcg== LkZlY2hh IOuwnA== IGdyYW51bGFyaXR5 IFNheWluZw== X2xpa2VsaWhvb2Q= LmJhckRvY2tDb250cm9s IGZyb250bGluZQ== IFdoYWxl IHNtZWxsaW5n IENvbnRyaWJ1dGlvbnM= aXZhbnQ= IGNyaXBwbGluZw== cHJlbG9hZA== IEhlcnJlcmE= X1dBVENI LWV0 OmV4cHI= aW52ZXN0bWVudA== ZWRlcmF0aW9u X21nbXQ= IGhvb3Bz bW9ua2V5 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK aW50ZXJzZWN0 IGNyaW1zb24= IHN1b2k= IFtdOgo= WE9iamVjdA== U0ZNTA== RVFVQUw= KCd+ Y2VudHJvaWQ= CXJlc3RvcmU= IHByZW5hdGFs IE1pc3RyZXNz IHF4 dHBz IHJlc3Bhd24= IFtdKSwK IGtvbnRyb2w= 44GC44KK44GM44Go44GG44GU44GW TW9kdWxlTmFtZQ== IG5ld1BhdGg= IFBhZ2luZw== IHJpbnM= X21ha2Vy XGJyaWVm IGJpc2hlcg== CVJlYWQ= IGppaGFkaXN0 LnBlcnNpc3RlbnQ= IFJvYm90cw== L2dycGM= IEpvdQ== w6RyZW4= 77yM5Zyo LXB0 IHpkYXJtYQ== X05N IENvbm5lY3Rpdml0eQ== KGJj IEZsb3JpYW4= IFNvY2lvbG9neQ== X3dv QW5kU2VydmU= XygpOwo= IEZMVA== X0RFUg== IENvbm5pZQ== IEJyb2FkY2FzdFJlY2VpdmVy eyg= IGNvbW1lbnRlcg== IGRlbW9jcmF0 IGFtcGxpZnk= LS0tLS0tLS0tLQ0K IEhNUw== IHRyYWlsZWQ= IFNvZGE= LXRlc3RlZA== dWxpc3Q= KW5ldw== X1RocmVhZA== VG9kZA== IGRlYmlhbg== Vms= IHByZXNlbnRh IGNvbWZvcnRz IFdhc2hlcg== IGdhcmc= IEh1Y2thYmVl INGB0LDQvA== ICEi QWRhcHRlck1hbmFnZXI= IEVh IEFzc29jaWF0aW9ucw== CQkJCQkKCQkJCQkK LmdldFdyaXRhYmxlRGF0YWJhc2U= IG51Y2xlaQ== w6lnb3JpZQ== CSAgICAgICAgICAgICAgICAg QkFC IHVwa2VlcA== IFR1cA== LndpdGhPcGFjaXR5 bHlh IGx1eGU= dXBybw== LWVuZw== IHJlbGHDp8Ojbw== IGtleVByZXNzZWQ= IGh5YnJpZHM= bGZ3 T3BlcmF0aW9uQ29udHJhY3Q= IG5hbWVMYWJlbA== IEhvcnQ= X2dydXBv IGJhbmRh SXg= SGVhbHRoeQ== LmdldEVuZA== ZnJhdQ== KFNjZW5l KENvbGxlY3Rpb25z IFNraXBwaW5n dWJv IGbDvG4= Ij4tLT4K IGRyb2l0cw== IGhvbW9zZXh1YWxz IGFiZHVjdGlvbg== CXdpZGdldA== JGhlYWRlcnM= IERBUg== IGZsYQ== dGhyZWF0 IGxvdWlz LkdldFByb3BlcnR5 Ikp1c3Q= KGZyYW1lcw== cnlv cHJvZmVzc2lvbg== fGk= 7ZW07ISc KHN2 IHVucmVjb2duaXplZA== SW9uaWM= RmFzaGlvbg== U2NyZWVuU3RhdGU= IEluY29taW5n Tm90Tmls IHN5bmNpbmc= ZW1pZQ== IHRoZXJtbw== X3Byb2Nz IGluY29uc2lzdGVuY3k= cmVsaWdpb3Vz Lm1q IHBlcnNvbm4= IG1vbWVudG9z b3JhcmlseQ== IOaK X25ldXJvbnM= SWxsdXN0cg== aW1vdG8= aWxpaw== IFdvag== VHJhZGluZw== IGFwcGFyZQ== IGVudHJlcHJpc2Vz YWNoYXQ= IMKs IG5laWdo QlVUVE9ORE9XTg== IE1haGVy YWdoYW4= LWhhc2g= ImY= IGNsaWVudGVsZQ== LmFkZEJ1dHRvbg== CVNQ UWk= IGdyYXRlZA== UE9TSVRF Oj4= IEhvd2VsbA== IENvbXBhcmF0aXZl IElTQw== wq1p T2NlYW4= RGF2aXM= IEZpbG1l V2lucw== IEpJVA== b2NjZXI= IENvcm0= RU5DSE1BUks= cmNoaXZl aWNhw6fDo28= IG1hdGE= IGNoaWxkYmlydGg= IE9wdGlvbmFsbHk= RW5z IHhodHRw IGVsdWNpZA== X09zY0luaXRTdHJ1Y3Q= KSkpOgo= IGludHVpdA== IERvbmF0ZQ== IGNvcnJlbGF0ZXM= PkRlbGV0ZQ== IGVxdWlwZQ== IGJvY2E= IGluZmxhdGFibGU= ZXJhaA== IERhdGVUaW1lS2luZA== IGNhbHZlcw== XExpYg== IGVtbHJ0 IFRyaWxvZ3k= IFBhbmM= IER1aXM= IHBlbMOtY3VsYQ== V0FSRFM= X0RFVEVDVA== LXNlY3Rpb25hbA== ZGhjcA== Rm9yUm93 LWRlc3RydWN0 IFByZXNlbnRlcg== L3NsaWNr LG9u IENpdGFkZWw= bG9nZ2VkaW4= X3N1YnR5cGU= IHNpZ3Vl IGN1cmluZw== IEZpcmV3YWxs IGZsdW9yZXNjZW5jZQ== IEl0YWxpYW5z 0LjRgtGB0Y8= LmdldFN0eWxl SW5TZWNvbmRz amll LVNtaXRo IHhsaW5r IHN1Ym1pc3NpdmU= 0L7QvdGC YXJib25hdGU= IEZhdWw= X2dvYWxz IENvbW1pc3Npb25lcnM= Y2hhcnRJbnN0YW5jZQ== X1BPU1RGSUVMRFM= IG1lZGlhbA== IG1hbm9z IGRlbHQ= c3Zt LkFwaXM= ZXBoeQ== IGFzeW1wdA== IGFwcERlbGVnYXRl IGltcHJvYmFibGU= Y2th c2ltZA== L0Vycm9y LuKAkw== IFBUUw== ZGVlcg== IHNpbmE= bWFnbml0dWRl SURBREU= J119Jw== IG1heW9yZXM= CWNvbW1lbnQ= L2NvbnNvbGU= IkA= dm9sdA== LnNlbGw= IE1hY3k= IG1lbG9k IGltw6FnZW5lcw== X2NoZw== IGlub3V0 aWRlbnRl KScpLAo= ZG5p LmJsb2I= IHR5cG9ncmFwaHk= IGVlcmll X09JRA== cGVzYW4= YWphbg== IGNob3BwaW5n IGJsdWZm YWRm X2Jhc2Vz LkZvcm1hdHRlcg== IFwl IFBhZ2VJbmZv Q2Fycmllcg== IENhbGlicmF0aW9u Y29tbw== LWJvZGllZA== IGZpbmFuY2llcg== IElOQQ== LkVSUg== IGhvb2RpZQ== IFNhbml0eQ== Z3VhcmRlZA== Lm9wZW5kYXlsaWdodA== SVNNQVRDSA== SGlnaGxpZ2h0cw== w7xuaw== YW5pZW0= YW5nZXJlZA== YXNzaWdubWVudHM= IHJlZ2lzdHJhZG8= IFVQUEVS YW1waWxrYW4= YXNoaXJl IE5pa29sYQ== IENGTA== IEhEQw== IHBvaWRz IElQcw== IHByZXZlbnRhdGl2ZQ== aXBzb2lk aWZpeA== LmNhbWVs Lmdh Vm9sdW1lcw== LXN0ZQ== WWFob28= X3NpYmxpbmc= SGlnaGVzdA== b3B0Z3JvdXA= IGt2aW5uYQ== 4oCd44CCCgo= IEFwcGxpYW5jZXM= ICI+PA== JykiKQo= aHR0 IElkZW50aWZpZWQ= IHBlbmNpbHM= IG1lbWJlcklk IGFwcGVuZFN0cmluZw== LmxvYWREYXRh IG1vY2tNdmM= IGp1Yg== IFNsdXQ= IFRhaXBlaQ== c3RhdHQ= UG9saXQ= IHBhcnRhZ2Vy RGlkQ2hhbmdl SW5jcmVhc2Vz KX0u IEJhYmE= X0NMSVA= W3VuaXQ= INC60LvRjtGH IGFsY3VuaQ== IExvbGE= IGNsaW5naW5n QFBvc3RNYXBwaW5n KGNvbmNhdA== IHNzaWQ= IEZhdWM= b2tpdA== IFJlY29yZGVk w6FsZXo= KCQoJzw= LmFzc2VydElzTm90 IGthbGk= Vm9sdA== IHdhcm1seQ== IHNjYXJlcw== Z2V0dGk= ZsO8aHJ0 X2RvZXM= LkVNQUlM aW1hdGlvbnM= IHNwcmluZ2ZveA== IERlY29t YXJjeQ== IGdsaXRjaGVz IE1vZmY= IFZvbGw= LmJldHdlZW4= IGNvb3JkZW4= IFBhcnRpY3VsYXJseQ== R0JQ IHNlbWJsZQ== RWFzdGVybg== X01TQg== XSl7DQo= bW9yZ2Fu IEVWQUw= ZGVyZQ== SE9VU0U= bW9pcmU= aXN0aXF1ZQ== X2xzdG0= LWNvbW1pdA== eXN0ZXJpb3Vz IHR3aW5r LXRodW1ibmFpbHM= ZW7DrQ== OicnLA== IGJsYWNrb3V0 IEZsb29ycw== IHNvZmFz IG91aQ== bGVzaG9vdA== IFJhcQ== LWFicw== IGtyYQ== TWluaW5n c2hhZnQ= LnNldENvbHVtbnM= Q2xheno= UFJFVFRZ LnBsYXlsaXN0 6Zai LVNhaGFyYW4= TUlORw== CWJs 6K6u amY= RE9DS0VS aG9wZWZ1bGx5 KGlnbm9yZQ== IFVzZXJzQ29udHJvbGxlcg== IE1pdGFyYmVpdGVy IExFUw== SGFtaWx0b24= LW1ldGFkYXRh IEtL aWt0aWc= IHdvbGx0ZQ== ZWdyYXRvcg== XWJvb2w= LGN1cnJlbnQ= IHZhbHVlVHlwZQ== IGV4Y2F2YXRpb24= b2xhbmQ= IHZlcnY= L2ZpbGVwYXRo QXV0aFByb3ZpZGVy IHByb2NyYXN0 CVVMT05H X01FTUJFUlM= IHVwbGlmdA== IEF1dG9ub21vdXM= IGFydHdvcmtz IE91dHJlYWNo IHBvcmU= SG9tZXBhZ2U= RGlhbG9nVGl0bGU= IEdlbmVyYXRpbmc= UEFSU0U= IHNlbWFuYXM= IGh1bWFubw== SlNHbG9iYWxTY29wZQ== IHZvbHRl IGJlbGxh KGlzaW5zdGFuY2U= IHBsYw== XENhdGFsb2c= IGVzdGVlbWVk 6Zu3 KHN1ZmZpeA== IHN3ZWVwcw== CU9SREVS IGRvaXZlbnQ= IFN3YXJt IENvbXBpbGVk Z2V0UGFnZQ== QURS LlJpY2hUZXh0Qm94 IE5hbWluZw== YWdnZWQ= IEdBTkc= cmFzaW5n b2RlbGVk IGdhbGE= IEpTTmFtZQ== ZGRm IGlsbHVzdA== IExhbnNpbmc= W3BvcnQ= LWRlYXRo IGRpbmhlaXJv IEVpZ2h0aA== IGJpYW4= c3TDpQ== IHZlcnNpw7Nu IExpbmVhckdyYWRpZW50 IEhhcmRpbmc= Liop ZWN6eQ== JGhlYWRlcg== IHbDpXI= VW5jaGVja2Vk IGtvamU= IFBhbGFkaW4= KCkpKSw= R2l2aW5n KCl9KQo= IGRpcHM= RnJpZW5kbHk= IHBvcnRyYXlz IGhlbGl1bQ== IGluc3VyZ2VuY3k= X2V4cGlyeQ== IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5n IGFhbnRhbA== c2xvcGU= bWFzdA== LmdldEludGVnZXI= ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== X1BJUEVMSU5F IGRlbnNlbHk= IG11dGF0aW5n bWlkaQ== IFNlaXQ= YXluZQ== Tk9XTEVE IERlc21vbmQ= IEZOYW1l IE5haXJvYmk= XENvbnRleHQ= IGNhbGN1bGFy LWRlbg== IGNvdHQ= XSk6DQo= IFJlY29tbWVuZGF0aW9u IFJvbGV4 IHZhbGlkYXRpb25SZXN1bHQ= LnBhdA== IG7DoHk= IFJlc3RDbGllbnQ= IEdQSQ== IEFzaGV2aWxsZQ== IE9TUA== IFBFUk1JU1NJT04= 0JTQsNGC0LA= L25vdGlmaWNhdGlvbg== S25pZ2h0 X1dvcmQ= IEJlbmRlcg== cmFua2luZw== IHBhcnRpZGE= X3Jlc2VydmF0aW9u zIA= IG1OYW1l IGdldGNo IGJvcnI= IGRpbGlnZW50 RGlzY3Vzcw== 5q2j5Zyo YXBlYWtl aW9uZWQ= LU5hemk= LmN1bQ== IEtyb24= PSQoJyM= L3NpbmdsZQ== IGVyb3Rpc2No IFZpYg== IHJhdGlmaWVk IGNvbmNlcnRlZA== IFJFR0FSRA== IGRvYnI= LkRyaXZlck1hbmFnZXI= J3I= UG9ydGFibGU= CXN1aXRl IHJlbGFjaW9uZXM= IERvcA== ZW1wbG9p RE9C IGNydW1icw== IHhscw== X0FwcGxpY2F0aW9u KCc6Jyw= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= bXNl IGJlcms= IFJldHVyblZhbHVl IEJlbGx5 IGNhbWFy IFBlZWs= ZWxzaW5n IG5vdGlmaWVz IFRyaXN0YW4= IEdBUg== ZW1tZQ== IEVsZXZhdGVk X0NTVg== KGNoYWxr IHR3ZW50aWVz IFNlYXJjaFJlc3VsdA== PXNlYXJjaA== IE1peGluZw== w710 IHJlY3J1aXRlcg== IElERU9HUkFQSA== IEFnbw== KE9wZXJhdGlvbg== JHZhbHVlcw== IHdvcmxkbHk= IFJvc2VuYmVyZw== IENvbmZpZ3VyZVNlcnZpY2Vz Pio8Lw== S0FOSkk= IGNodWNrbGVk IHN0cmlmZQ== IEJvbWJheQ== IEJBQ0tHUk9VTkQ= ZXRhdA== ZW51bWVyYXRvcg== IHPDu3I= IOOBrg== X3BlZGlkbw== L0Rr IGplYW4= X0NvbHVtbg== IGhlYXRtYXA= LlBlbmRpbmc= IHVuc3VjY2Vzc2Z1bGx5 CWVw IHNpbmZ1bA== IEFudG9ueQ== X0ZPQ1VT VGV4dExhYmVs X3JlYWN0aW9u IElEaXJlY3Q= IGNhcm5pdg== V29ya3NoZWV0 IHN1ZWRl CVJUQ1Q= IHNldGJhY2tz LnVuYmluZA== IHNpw6g= TGlxdWlk X1JFTkRFUkVS TWF0ZQ== IE1pbGxlbm5pYWxz IGVwb3h5 aXp6aW5lc3M= IGJyYXppbA== 0L7RgdGC0Yw= JnZpZXc= L2dwaW8= SmFtaWU= LkdyYXZpdHk= PSIuJF8= IFZBTg== IElEUg== YXBwZWFyYW5jZQ== LlNlbGVuaXVt TGVhcA== LlJlbGF0aXZlTGF5b3V0 U2lnbmFscw== QWNjZWxlcmF0aW9u CUhBTkRMRQ== L09wZW4= IGdldExvZ2dlcg== U3Bp LXdyaXRpbmc= INCy0YvQtw== LXdvcnRoeQ== IHdjcw== IFFUaW1lcg== IFBvbHltZXI= IHZhbnQ= CURlbGV0ZQ== aXR0ZQ== V2hpbHN0 IGFsZ3Vt IHNoaWVsZGluZw== IGttcw== CSAgICAJCQk= TWV0ZW9y IGFnZ3JlZ2F0b3I= IFNpbmQ= SG9zdEV4Y2VwdGlvbg== PScnLAo= IEpTQnJhY2tldEFjY2Vzcw== T05P X0J1aWxk IHN0cmlwcGVy IExK PENvbXBvbmVudA== L3NvdXJjZXM= IGVyZ29ub21pYw== IEFjY3JlZA== dW5jZQ== b25pcw== emVpZ3Q= IFNrYXRl IFJlY3RUcmFuc2Zvcm0= SW5jb21wbGV0ZQ== IGluZ2VuaW91cw== IGNvaXNh IGNpdHlOYW1l aGFiaXQ= X1RW IEFOU1c= Li4uIj4K IHNub3Jr X29wYWNpdHk= IGluaXRXaXRoTmliTmFtZQ== aWFkbw== QUFD IF0pLg== O3o= X3BhcmFncmFwaA== IG5vc2Vz c3RhbmRz aWZy X21F SXJhcQ== LlByZWRpY2F0ZQ== ZW5haXJl XV1dOwo= IHVuaWRhZA== IHJldGlyZWVz X2hlbGxv IG1vZGVsZQ== IFVJVGFibGVWaWV3Q29udHJvbGxlcg== ZndyaXRl X251bWVybw== X3Zpc2l0ZWQ= IHJlY2ViZQ== KE5vdGlmaWNhdGlvbg== RmFudGFzdGlj X3N1Ym1lbnU= IFBFTQ== IEN1cGVydGlubw== YXBwcm94aW1hdGVseQ== Y2xhc3NlZA== LlJlYWRTdHJpbmc= IGRvbWljaWxl X1BX IGJhbGxwYXJr IEthbGU= Y29udHJh X2Zhdm9yaXRl L29m UXVpdGU= IE9UQQ== IGFjY2VsZXJvbWV0ZXI= ZGlkbg== fF4= IFJvaGluZ3lh aXZpY3Jt YW5uYWJpbg== 0L7QsdGL0YLQuA== b3JhZG8= Jykr SGF1bnRlZA== LElE KFVJQWxlcnRBY3Rpb24= dXJ2 X2JlbA== IE1leGljYW5z L3Rlcm1z IFBhaW50ZXI= SW5wdXRMYWJlbA== IFZpbmNp IFJvc2ll XHVj PE1lbnU= IGNvb2xhbnQ= KGN1cnJlbnRVc2Vy X2R1YWw= KSJ9LAo= JnA= IGNvbnZlcmdlZA== IHJlc3RyYWlu IFl1Z29zbGF2aWE= PXRhcmdldA== IGltcHVscw== ZHNh U2VhcmNoVHJlZQ== IGhib3g= IEltcHJlc3M= wqfDgw== Z2V0RnVsbFllYXI= KGRh IFlZUw== LmFsaWdubWVudA== LkdldFRleHQ= LnRva2VuaXpl IE9seW1wdXM= IG11cmt5 b3Jlc3RhdGlvbg== IGRpc3NhdGlzZmFjdGlvbg== CVRBcnJheQ== X2tzZXM= LkFkZFNpbmdsZXRvbg== IFN0YXJ0VGltZQ== IGZhbmF0aWM= ICAgICAgICAgICAgICAgICAgICAJ IGVudGl0eVR5cGU= Lm92ZXJyaWRl IC0tLS0tLS0tLS0tLS0= IERhdGFncmFt Zm91dA== KHdpdGhJZA== ICNfXw== n+iDvQ== ZWt5bGw= LmZyaWVuZHM= YW1lbGVvbg== IHphY2g= LnNpbXBsZUJ1dHRvbg== cmV0b3Jubw== IGtvbms= L3NtYWxs IFF1aWNrbHk= dW5yZWFk RG9uYXRl RGV0YWlsVmlldw== IGR1YQ== IHBlbmV0cmF0ZWQ= T01VWA== IG5pcg== X3BkYXRh Il0sWyI= IGxvd2Vz IGRvcGluZw== IGFzeW1tZXRyaWM= IG5lZWRsZXNz b3VyY2Vt IHVwcm8= IEd1enpsZQ== YWZi IHNleHRyZWZmZW4= LWNvbGxhcg== IGNvbG9zc2Fs TW9ua2V5 bmlzaA== IGhhbmRsZU1lc3NhZ2U= SW5jcmVhc2Vk KmR4 IENoYXR0YW5vb2dh Zm9yZw== IE9yZGVu IHNocmk= IFZhbmQ= ICJAIg== SW1hZ2VTaGFycA== IFdpbGRjYXRz cG9uaWJsZQ== LnNjZW5lcw== IHBhaW50ZXJz IFBmaXplcg== IFphaA== VG9Mb2NhbA== IEZsYW0= IMOpdGFpZW50 KSle IFNhbmRib3g= IFRSQURF IGNocm9taXVt IGFjY2xhaW0= IHBhY21hbg== wrR0 KXJlYWRlcg== TWFyaQ== LkRpc3BhdGNoZXI= LkFETUlO IFJlbWVk U3dlZGVu IG92ZXJsYXlz LmVy IHBhbmc= IGNsZWFubHk= YXZlbnBvcnQ= VG95b3Rh cGF0Y2hlcw== IHZ0eA== IEVpcw== Y2xhZG8= IFJpdGNo Uk9MUw== IGhhZGU= IGNvbnNwaWN1b3Vz IGRvY2tz KGpx IFByZW1pZXJzaGlw IEJleg== IOKElg== INGD0YHQuw== X3RvdGFscw== IHByb3Zh IEN1ZQ== IHNhw7pkZQ== IEdhbWVDb250cm9sbGVy SU1JWkU= LHBvcnQ= 44CCKA== LkNkZWNs SW5zdGFudGlhdGlvbkV4Y2VwdGlvbg== IGNvbGxhZ2U= IElPQw== IGJhaXM= IG9uRmluaXNo LXN0YXJz c2V0U2l6ZQ== IG1vZ3Vs IGRpc2lsbHVzaW9u IGNoZXZ5 KFNjaGVkdWxlcnM= KElS X2xvY3M= IGNhbm5vbnM= IGNhbmNlbGxpbmc= L2J1cw== IGJ1Zmlv IFlvdXJz IFBpa2FjaHU= IHRlcm1l csOl ZmFocmVu IG93bmVySWQ= IG9ibGlnYXRvcnk= IGN1bHA= IGFjaWRpdHk= LW11bHQ= IEJhbWJvbw== ICciPg== X2dz IGNvbXBpbA== bmFyZA== LWV4Yw== IHJoeW1l IGJ1dHRv c2F5cw== YW50YXN5 67g= IGNpdHTDoA== IGNoZWc= VGltZVN0cmluZw== IHBvc2l0aXZpdHk= IERhYmVp IHdhbmc= IGVzY3Jl ImM= CXZpZGVv IFJhbmtlZA== LnN0cmluZ3M= Pj4+KA== INC40L3RgtC10YA= IHJlc3Rh WzosOg== IHJlbmRyZQ== IGRlc2Vy Sm9z IGRpc3J1cHRpb25z INC+0L/QtdGA c2FtcGxpbmc= c3VwcHJlc3M= IGNvbnRhaW5lclZpZXc= IFNlYW1sZXNz IGFpcnk= IG9ubG9hZA== LldpbmRvd01hbmFnZXI= IFBMQQ== YnJhY28= LnNldFBvc2l0aXZlQnV0dG9u IHBkdQ== IGdzaQ== IENsaQ== X2dyYWRpZW50cw== 0Y/QtA== IFdoaXNwZXI= Y3N0ZGludA== IGzDpG5n IGZvcm11bGF0aW9ucw== w6lub20= b3VybmVtb3V0aA== WyRf IG9yZGluYXJpbHk= LnNldFVzZXJuYW1l IGZhY3VsdGllcw== TUlUVEVE L3ZhbHVlcw== IHdlaXI= IEFwdA== TVo= CWNm dWNrZW4= CQkJCQkJCQkJCQkJCQkJCQkJCQk= ZGVmZW5zZQ== W2lWYXI= IEJ1c2luZXNzRXhjZXB0aW9u U2VsZWN0b3Jz KGNvb3JkaW5hdGVz IFJlc2V0cw== IERyaW5rcw== b2xlYW5z KHN0eXB5 X0lPQw== Lnh4eA== IFNsYXRlcg== IEJlbGl6ZQ== IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= YWRkaW4= X2VwaXNvZGVz IGlzY2hlbQ== bGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== RGFubnk= IHBhcmVk LmNvZGVoYXVz IEFzc3k= CVJlY3Q= 4p4= Lmxpc3Rh INCy0LDRiA== IHZldHM= SFdORA== aXNvbmVy IHhv IG9yYWxseQ== IFN0bXQ= LnJubg== IERQSQ== IFN0cmlrZXM= LnNldFZpZXdwb3J0Vmlldw== IOiHquWKqOeUn+aIkA== WUVMTE9X R0xlbnVt cGFydG5lcnM= IEltcGxpY2l0 IHRha28= 4oCZZWxsZQ== IGVybcO2Zw== dG90YWxDb3VudA== R2ls CXdvcms= IHByYXRpYw== aW5hdGk= YWJpZXM= IFNraW5uZXI= IHNwaXJpdGVk IHBhbmNyZWF0aWM= IGhkZg== J2Vt IHBzeWNob3Npcw== b2xpY2l0 ICJ7Ig== X2F0dWFs IMOpbGVjdA== VEVBTQ== IGRhaw== IFNXQVQ= LkZyYWdtZW50TWFuYWdlcg== IHByb3Zpc2lvbmluZw== bGlmZXRpbWU= X0VYVEVOU0lPTlM= IENBU0NBREU= ICFb KEtQ IHZlbQ== IEludGVycmFjaWFs J119LAo= c3BhY2Vy X2t2 V2FyZWhvdXNl UkRE X2ZzbQ== LlN0cmV0Y2hJbWFnZQ== LFllcw== IFJlZnVnZWU= IEJyaW5naW5n IHbDoWxpZG8= LmludGVyc2VjdGlvbg== IHNwb29reQ== X3BvcnRhbA== IG1vdGg= IFpvZGlhYw== IFNPQ0lBTA== TWltZVR5cGU= J119fTwv IHJlc2l6YWJsZQ== 5Lqb KHBoYXNl KG1hcHBlZEJ5 IG11bmRpYWw= IGNvbnZv L2xlZnQ= L2RvY3VtZW50cw== d2FzaGluZw== IEFtw6lyaWNh X3F1b3Rh LnBvc3Rlcg== J10iKTsK IHN0ZWxsdA== IERJU0NMQUlNRVI= W29wdA== IGVkcw== IFJhY2Vz dmVudGFz IHB6 IENhcGFj IFVzZXJEYW8= aXRlc3Q= UHJvdmVlZG9y IFNob3RndW4= IHRoaXJzdHk= IEJhbGFuY2Vk aXF1ZXRh IGhlYWxlcg== LyIp LlNkaw== IHRlcnQ= ImRhdGE= X3Byb3ZpbmNl LkF1dG9tYXRpb24= IGZvbnRXaXRoTmFtZQ== X0FOVA== 55WM b29kbGVz IFJFUFJFU0VOVA== X0dQUw== IHBlcnN1YXNpb24= IERpc2N1c3Npb25z IGZyZWQ= TkVH OmJvcmRlcg== CWluaXRpYWxpemU= CWdsb2c= LWNhcGl0YWw= IEltVmVj IGRldmlz Q2FuZGlkYXRlcw== LmFuaW1hdGlvbnM= IHJhZ2F6emk= IFByb21ldGhldXM= IEtpZGQ= IHByb2dyYW1tYQ== Q2VydGlmaWNhdGVz Q29udGE= LmVzcHJlc3Nv IOuQmA== IGJlaWRl 6ZmG LmdldFJhdw== IEZ1bGxOYW1l IGlhbQ== KCopKA== bWFpZHM= Qkg= IENvbnNwaXJhY3k= X0RV IGJsYXRhbnRseQ== IFx8 IFdpZw== IENvbmo= UmVuZGVyaW5nQ29udGV4dA== TWl0Y2g= IGFsbGVsZXM= IOazqOaEjw== IHJpbXM= IE5laWdoYm9y IEt5bGll LnBhcnR5 dG9ycw== IOyhsO2ajA== IHdlcw== IENyYWZ0aW5n WyIu LnNwb25nZQ== IOqx SXNsYW1pYw== IHByb3NlY3V0aW5n IHdpaw== Lm9zZ2k= b25pbmdlbg== R3JhbW1hcg== J2lt IGF4aWFs Q2xlYW5pbmc= LmdldEV4dGVybmFsU3RvcmFnZQ== PS4v IGNocm9tYXQ= 0LXRhQ== YWJheQ== IGJvbGE= LkFnZ3Jlc3NpdmU= J10sJF8= aXphY2Fv UHJlcGFyaW5n OkFueQ== LkVOVEVS LXdpbmRvd3M= IGVucmFnZWQ= X2RpY2U= IGRldHRh ZWNhbA== X09SSUdJTg== IC0tLS0tLT4= X0JsdWU= IGJvdGFuaWNhbA== IGZyYWdz IGZhbWlsaWFs LWR1 IHNlaXppbmc= KGJsb2Nrcw== LnJk LmNoZWNrTm90TnVsbA== IG1pc2Vy IG1heHg= IEtuZWU= Vmlld0l0ZW0= SW5uZXJIVE1M RGFuZ2Vy KChfXw== IHByenlwYWQ= Y3JlYXRlVXJs Kios IERlY29yYXRpbmc= QVRFR1k= Pz4v LkRlc2lnbmVy aGV4ZGlnZXN0 IEV2ZXJ5d2hlcmU= YWxsZXJpZXM= LlRFWFRVUkU= LkJsb2Nrcw== emVsbA== IHByZcOnbw== U3VkZGVubHk= aW5wdXRFbWFpbA== KHN5bmM= LmJk Z29sZGVu PicpOw== IERpY2tpbnNvbg== Pj4oCg== IFFVRVVF IGdldENvbHVtbg== IFNBTkQ= LnBpZWNl bGljZXI= Rmx1dHRlcg== IGdldFZlcnNpb24= IHJlc291cmNlSWQ= b2ds xYJhdw== LkJyYW5jaA== CXdlYg== IGZyYW1lcmF0ZQ== UFBQ IGZyYXk= Q05U IGluZm9ybWF0aWU= J10NCg0K bmVhcw== SGVhZGVyQ29kZQ== IOa4 IHRyZw== cmF3dHlwZXM= SG9uZGE= IG1hcmtldGVy IHJlcXVlc3REYXRh IFBn CW5vdA== IHBhZ2VJbmZv IGFrdHVlbGxlbg== 44GV44KT IEFNUw== cHVzaFZpZXdDb250cm9sbGVy CUFM IHZlc3Rz cHJvZHVjZQ== LW3Dqm1l IFJhaG1hbg== RnVubnk= RVo= X1ZhbGlk IHNxdWFkcm9u IGxhc2g= IGlybQ== aWFzY28= IFBhcmFu IHBldGl0ZXM= IERlY2F5 IHVuaW5pdGlhbGl6ZWQ= cHJpdmlsZWdlZA== IG1iZWR0bHM= 5aSH5rOo IF4u IGVjc3RhdGlj RGV0cm9pdA== IHBhcnRlbg== IHNvdXZlbmly LmdldExvZ2lu 0LzQvtGC0YA= ZW7Dp8Ojbw== IG3DrW5pbW8= IEFjY2Vzc2Vk cmnDsw== TWlj IFZvY2Fs LlNldFN0cmluZw== IG1lbnNhamVz 5YCN IGF0dHJhdmVycw== IEFwaA== ICcpOw0K w7xuZGU= IGVuY2hhbnRlZA== IFJvb3RTdGF0ZQ== IENMT1NFRA== CQkJCQkJCQkNCg== IGNhbGllbnRl b3JyaXM= IHBoeXNpY2lzdHM= aHduZA== X3Zp IHLDoXBpZG8= IGNhcGl0YWxpemVk ZWRCeQ== IG1hY2hpbmluZw== IGh1YmJ5 IFN0YWN5 LkJ1cw== ZHJpbms= SHVy IHByb3BpYQ== VW5pdFRlc3Q= IG1pc2NvbmNlcHRpb24= X18pKTsK L2Rj IE1heXdlYXRoZXI= X21D LmNyZWF0ZUZyb20= IFFQYWludGVy cm9wc3ljaA== aW5uaXR1cw== YXlhcw== IGdlZw== KGR3 IHVzYWRv IHRyaWNrbGU= IGFubmloaWw= IFBhc3Rh ICsrCg== KEV4cGVjdGVkQ29uZGl0aW9ucw== LnBvc3RWYWx1ZQ== aWNhcA== IERvbmV0c2s= X3NvdXA= LXB1Ymxpc2g= IFBi bWVudGlvbnM= QUNDRVBU LlB1bGw= LOKAmeKAmQ== IHJldGFyZGVk X0FUT00= IFRlcm1pbmF0b3I= LWNvdXJ0 IENMTG9jYXRpb25Db29yZGluYXRl IHJldmVyZW5jZQ== IFNTQw== dXRlbHk= IFdPTg== IEdTTA== ZnJlaQ== LmdldExvbmdpdHVkZQ== IG9wZW5GaWxlRGlhbG9n LkJ1dHRlcg== LWltcG9ydGFudA== X01BTlk= IEdvbmc= 4oCcSG93 IGdvcmdl PW1zZw== IEV6ZWs= Y3JlYXRlQ29tbWFuZA== OmNoZWNrZWQ= IGluZm9ncmFwaGlj LldFU1Q= RGlycw== IGd1YXJkYQ== IGJlZXRsZQ== PHNtYWxs LWFuZHJvaWQ= IGNyZWRpdG9y IE3DqWQ= IGZpbmFsaXN0 IGFibA== bmV2 X2ludGVyYWN0aW9u IE1vbnRlcmV5 amFo IGNhbmRpZXM= IFF1aW5jeQ== 6Kqt IGJhdGNoU2l6ZQ== YWtpdA== IG9iZQ== KHBhcmE= IGV4cGVyaW1lbnRlZA== IGNvdW5jaWxsb3Jz IGNsYXNoZWQ= c3F1 LXN0cm9rZXM= IEdL IEV4cGlyZXM= IHByb3NlY3V0aW9ucw== IENyZWF0dXJlcw== IHnDtg== eGxpbQ== X0lNUA== RW50cnlQb2ludA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= LkRlZmF1bHRDZWxsU3R5bGU= IGJyZXZl IEJyaXRhbm4= IHN3ZWF0eQ== IGxldGg= IGZsYXNoYmFjaw== cGVybWFuZW50 IEpESw== X0RldGFpbHM= RXVybw== cHB0 IHJpY2hUZXh0Qm94 L2JvYXJk IHRyYW5jZQ== LmN5Y2xl Jyk7Iik7Cg== IHRveGlu X2RlaW5pdA== IG92ZXJhcmNoaW5n IGNvbmZpZ3BhcnNlcg== IEthd2FzYWtp LnRodW1i IHBsYXlh IEpvc2Vm K18= IHplcm9lcw== IGF1cA== IEhhcmk= Y29tbWl0dGVk Tml0 LmZpbGVQYXRo IERpc2FiaWxpdGllcw== bWFudWZhY3Q= LWFsaWduZWQ= LlJFU0VU IHJ1c3R5 RXk= IG91c3RlZA== Y29zYQ== U3RydWN0dXJlZA== LmdldEQ= IHPDoWJhZG8= PkxvYWRpbmc= X21B LmdldFJhbmRvbQ== Ymxpbmdz IGNoZWVzZXM= dHRp LuKAog== IEJ1cmdlc3M= ZW5kZXJpdA== LicsDQo= KCIiKw== YWNi JXA= aW5kZXhlZA== X3ByZWRpY2F0ZQ== bmVzaWE= IGJpZWQ= IENJVA== KFBvcw== X3JhZGk= 5Lu35qC8 Qml6 IEFkb2xlc2NlbnQ= IHZpw6pu Y3ljbA== X0NhbmNlbA== IGNvbmNsdXNpdmU= IGFwcGVsbGF0ZQ== aW5mb3JtYXRpY3M= U0o= IGVsZWN0aXZl cm9sZUlk RmV0Y2hlcg== CUNvbW1hbmQ= KCIoJQ== IGZhcnQ= SUxB Z2V0QmxvY2s= QVVTRQ== INC00LDQvQ== IEFydGU= IG5vdGlmeWluZw== IGdlbGU= LnNhbWU= IFJlZ2Vs IEJhxZ8= LmNyZWF0aW9u IFZO X2NvbW11bml0eQ== IHVuc3VzdGFpbmFibGU= U0VY IGdyaWRTaXpl cmVzY2lh YXZlcnNhYmxl KCcsJylb IFBoZWxwcw== 4buVaQ== QU5DRUxFRA== LUlT LnJ1bm5lcnM= IFN0b2tlcw== LlByb2R1 IHdoaXBwaW5n X2FjcXVpcmU= IGludmVzdGlnYWNpw7Nu ZnJpZWQ= LmNvcHlXaXRo IEhhcmRjb3Zlcg== LVNl 4Z624Z4= aW52aXRhdGlvbg== bGVzYWk= IERvcm0= INGB0L/QuNGB0LrQsA== IGNvbmNhdGVuYXRlZA== b3BoaWw= IHRoaW5rZXI= L2ZvbnRhd2Vzb21l IExlb3BhcmQ= ICIvIik7Cg== IHJlc2lkdWFscw== IE1pY3Jvd2F2ZQ== IGNvbmZvcm1l dGhyb3A= IGRpc2VtYg== IE9NRw== IERpc2NpcGxpbmU= IEFjcm9iYXQ= L3JlcG9zaXRvcnk= ZGZh X01FRA== YnVmaW8= IG3DqXRob2Rl X0hPTEQ= aWFzaQ== X2xlZ2FjeQ== KQ0NCg== 5qOA R2V0UHJvY0FkZHJlc3M= IHlheQ== b3RlbmNl b3JkZXJpZA== LXR3 IGRlYXJseQ== SW5jb21pbmc= L2ls IG5ldXJvcA== dWN6 KTsNDQ0K IElubm92YXRpdmU= IHByb2Z1bmQ= aWdtYXQ= U2VsZWN0aW9uTW9kZQ== cmVsZXZhbnQ= LkdP IGJydWlzZXM= IHNhY2g= b2RlZg== IHJlaW1i L2Rlc2t0b3A= LXNwb3Q= dW5kYW5jZQ== RW50cm9weQ== XGNvcmU= IHN1Z2Vy IE12Yw== IEdOT01F X2luZHg= IFlZU1RZUEU= IE1hdGxhYg== IENJRg== ICopKQ== IHByb2R1Y3RMaXN0 IEFscmlnaHQ= YWNlbWFyaw== 0YLQuNCy bW9kaWZpY2F0aW9u aW50ZXJuYXRpb25hbA== IGhvbWVycw== IGRpY3Rz IFFGb250 LlNRTGl0ZQ== IHRyYW5zcGxhbnRhdGlvbg== IE1lc3NhZ2VCb3hCdXR0b24= IEVsdmVz J11dKQo= KFFJY29u IGNpbmVtYXM= Q09PUkQ= LUNoaW5h IGto4bqpdQ== 5oiR55qE IHNrdWxscw== IHBhaW5zdGFraW5n ZmNl LlhSTGFiZWw= IHNwZWNpZmllcg== IHByZWZlcnJpbmc= L2FjdGl2aXR5 KFBob3Rv w6FsdA== LmxvdA== Jycu YW5ub25jZQ== Lmdvb2dsZWNvZGU= LXBkZg== IFBva2U= X0FDTA== IGVuZG93ZWQ= ZGlzY292ZXI= Lm9tZw== IHdvb2RsYW5k Lk1hZ2lj IHZvbG9udA== Tm90QWxsb3dlZA== IGNoYXZl Qk1X JywnPScs IFNJWA== 5oiR5Lus IGtvc2hlcg== IGFzcGlyYXRpb24= aW50bA== X3JlZnB0cg== JysK bWVudG9y LmNsdWI= V2luZG93U3RhdGU= LkFSUg== IHp6YQ== IG1lc3NhZ2VUeXBl LmVxdQ== VGhvcg== IGluanVzdA== IGd1bXM= IGJvcmRlclNpZGU= Ly8vLy8= IFRyYW5zbWl0 IGJ1ZnNpemU= IGhhaw== IGVsbGFz UkFORE9N CW1j IHBlYQ== ZWtv ZG9jdW1lbnRv IGh5c3Rlcmlh IGFyZW5hcw== IGd1bm1lbg== IG1pa2U= IGltcHVuaXR5 YXRpc2F0aW9u X1plcm8= X0NPTVBBTlk= IEdvcnM= IHVzZUNsYXNz KHJlZGlz IFJVTk5JTkc= IEJhaXI= dmVsdGU= ICcsJy4= 0LDRgtGM0YHRjw== w7ZzdA== ZW5jb2RlVVJJQ29tcG9uZW50 X3Jlc3RyaWN0 IGRlY2Fscw== IFBlZGlkbw== IGFsdGVyY2F0aW9u RGlzcGxheXM= IEFwcGxpY2FudHM= Q1VT VGV4dGFyZWE= IEFuZ29sYQ== LmZ1dHVyZQ== IFVTSE9SVA== IHN1cHByZXNzaW5n IHNldHplbg== QVBvbHlub21pYWw= IHRvY2g= IGhhbGxtYXJr ICQkJA== IENIQVJTRVQ= LnJwbQ== IERpY2g= LS0tLS0tLS0tLS0tLS0tLS0tLS0= X3Bhcm0= 6L+Y YWNjaW9uZXM= aGFpdA== V0FSREVE X3JvdXRpbmc= IE5PTQ== IGVuY2xhdmU= IExvdHRv CWZy Y29tcGxleENvbnRlbnQ= IEJhbGxhcmQ= a3ViZQ== L3dpbg== LmdldENvbHVtbk1vZGVs X1JFUExBQ0U= SGVhZGVyVmFsdWU= IGVzdHVkaWFudGVz IGFwaXM= IGJwbQ== IFR5cGVOYW1l QW5kR2V0 cml0YQ== UGxhbnM= Pk5vdGU= IGZldGlzY2g= IHRvbmVk X2dvdG8= b25zZW5zZQ== IG1vbGRz IGluZmlsdHJhdGlvbg== IEd1ZXJyZXJv dWJibw== Y2tp KCQoIi4= X2FjdGl2aXRpZXM= KGNoYW5nZXM= IG9mQXBw IEtlcGxlcg== IERlbXA= IENvbnRpbmVudA== LlRpY2tz IFVuc2lnbmVk IEphaHJlcw== IGZyZXNobWVu IEFyY2hpdmVk INC60L7RgtC+0YDRi9C5 ICc6Og== VHV0b3JpYWw= Q2M= IHRhYmxlTGF5b3V0UGFuZWw= ZnJvbUpzb24= LmxldmVscw== X3RyYW5zaWVudA== IGVuZG9yc2luZw== IERJQw== bGF1Zg== IHNocmVk X0VNSVQ= aWZpY2FudGx5 QUxB L3Byb3Rv IG5hcnJvd2luZw== VXRj RmFjdG9ycw== IHNlbnRpZW50 5p6Q bGl4aXI= IENST1NT bWV0ZW9y IGdyb2lu IG1kYg== IFJvdHRlcmRhbQ== IGNvbWlkYQ== IE9wQ29kZQ== IERlZmF1bHRWYWx1ZQ== UGVybWlzc2lvbnNSZXN1bHQ= IGhldGVyb2dlbmVvdXM= IG1vb3Q= IGRlY2VpdmVk LWluZGVwZW5kZW50 IE9iamVjdE91dHB1dFN0cmVhbQ== IG92ZXJwb3dlcg== LmR1cA== IGxkYg== IGRvbWVzdGljYWxseQ== IGJlc3RlbGxlbg== IGxvdg== IENvbnRyYWN0b3Jz VHJpYW5nbGVz IGZvZGRlcg== IGZpbG1lcw== 5LyB IHJldm9sdmVy U3RhcnR1cFNjcmlwdA== L3ZhbGlkYXRpb24= IFJlc291cmNlVHlwZQ== acWf IExheg== ZmVm IGxzdG0= eyo= LmF0dGFjaG1lbnQ= LmhpdHM= ZXdpdGg= RE9H QWxhYmFtYQ== IG1lZGl1bXM= Lm1Db250ZXh0 LWNvbHM= 5Y+L Lm5vdGljZQ== IGF0dG4= IFBhY2tpbmc= IExu X0NPTVBMRVg= L1VzZXJz LnNhdmV0eHQ= IFJvdW5kcw== Pyw/LD8sPyw= IGluZ2w= IFJPQw== X2ZlbWFsZQ== IFN0YXJk XV07 IHdyZXN0bGVycw== IHRvcnJlbnRz IHNpbmg= 77u/Cgo= 67O1 c2Vuc2U= aG93ZXZlcg== LlBoeXNpY3M= SW5mcmFzdHJ1Y3R1cmU= IFNhY3I= RmVs IERJU1RSSUJVVA== w6ltZW50cw== IFZhbGlkYXRlcw== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IHwv IGVzbA== IHLDqXNlYXU= IEJpcA== QllURVM= X1dBVEVS VHVybmluZw== RUxT IGp1eHRhcA== IGxlc2Jpc2NoZQ== w71jaA== KFVua25vd24= TmVv QEpzb25Qcm9wZXJ0eQ== IGFsdW1ub3M= IFJhcXFh aW1laQ== LmdldEJvdW5kcw== Lk1vdXNlRXZlbnRIYW5kbGVy IyMjIyMjIw== R2VuZXJpY1R5cGU= L2Ntcw== IHR1cm5v INC80LjQvQ== IGZvbGtsb3Jl IEV2bw== IGNvbmR1Y3Rpdml0eQ== IGxlYmVu IGdlYXJib3g= LXZz IM+G IGRyaW5rZXJz IGNvbmV4YW8= IFRlZXRo IGdldEFyZ3VtZW50cw== IFJBVA== ZW50aW91cw== RWR1Yw== K1c= IEluc3RpdHV0aW9uYWw= IEJvcmQ= aXNFcXVhbA== KHB3ZA== IGlnbml0ZWQ= IFJvdXNzZQ== IGltcGFjdGZ1bA== IE1hbGs= IGdlcmFs IFBpdm90 IGF6dA== IGNzdmZpbGU= IFJvcGU= IFNPTFVUSU9O IEFyYml0cmFyeQ== IGxldHRv Lk1vdXNlQWRhcHRlcg== IH19fQ== IFNhaWxvcg== ZGVyYQ== UHV0dGluZw== IGNvbmNlbnRyYXRlcw== IGF1dGhEb21haW4= 4oCd55qE LWZpbmFscw== LHN0cmxlbg== TXVvbg== IE9yZGluYXJ5 ZmlyZWZveA== IExhVGVY IEh1bmQ= ZW5naW5lZXJpbmc= L2JsdWU= ZWRUZXh0Qm94 KCIiKTs= IENEREw= a2VwdA== IEdldFN0cmluZw== S2ly KCk9Jw== IE9DRA== YW50aXVt JG1lbnU= IEFwcGFsYWNoaWFu U2VjcmV0YXJ5 66WY 4Li14Lii U2VtYW50aWM= ICpb ZXN0b25l dW5na2lu TWF4WQ== LXRvbmU= In07DQo= X1BhcnQ= PE1lbWJlcg== dHJhbQ== IHRyYW5zaXN0b3I= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== IERlc2Rl IHJpZ2h0ZnVs IENvcm5lbA== 5pE= LkhPVVI= IHNpZGVsaW5lZA== cmVmZXJyZXI= bWF6ZQ== IGhvbHN0ZXI= IGNyaXBwbGVk IERhdGVGb3JtYXR0ZXI= b3BoYWdl X21E IGRlc2VsZWN0 cmF1ZA== IFBLSw== cm93RGF0YQ== IGxvY2tzbWl0aA== LnJlc3BvbnNlcw== KHByb2R1Y3RJZA== X1NUTVQ= S2V5VHlwZQ== LlRoZW4= emVl IGNydA== IEdyYW5kbWE= QFJlc291cmNl IGJpdHdpc2U= LWNtcHI= 44CCd3d3 emVpdGln JmRpc3BsYXk= Q2FydEl0ZW0= LU5v IG51bcOpcm8= IG1hdXI= IGluc3RhbmNpYQ== CWR0 X25wYw== IHNrYXRlYm9hcmQ= 4oCcQWxs IENyb3dk IMOkbg== IGJyYXo= Y2Fl eW5ldA== L3Bt L3NjcmVlbg== T1BUQVJH IFZCb3g= IGxlb3BhcmQ= X2dyZWF0ZXI= Y3B0 PGRk IG1lY2hhbmljYWxseQ== b3NwZWxz KWY= Lmx3amds LmdldFBvcnQ= IFBSRUY= LkFkZFRyYW5zaWVudA== cHBhcmQ= IO2ajA== RXRoZXJuZXQ= IHNhbGluZQ== KGxldmVscw== IHNlcnZpY2VQcm92aWRlcg== LkFuZ2xl YWx0aXR1ZGU= aWxsYXVtZQ== IHNjYXBl X0NBTEM= X3F1ZXN0 IERpc3NlcnRhdGlvbg== IEVETQ== LUNkcw== IGhvbm9yYXJ5 c3RvcHM= IHN1YmRpcg== IFZI IENoZWF0 IHJpZ2h0ZnVsbHk= UUU= LldyaXRlQnl0ZQ== ZmlndXJlcw== ZW5uaWU= KERCRw== IHZva3NuZQ== IGV4cGVuZGVk VU5JQ0FUSU9O aWxpbng= IFJlY2Fw X3ZlcnRz IHRyYXVtYXQ= IGdldFBsYXllcg== IHZlcmJlc3M= IGN1bHRpdmF0aW5n IGluaXRpYXRvcg== VGjDtG5n ZmluZEZpcnN0 X3Blcm1z IGJ1Yw== ICIiIg0KDQo= VFlQRVM= b2JqZWN0TWFuYWdlcg== KENvbmZpZ3VyYXRpb25NYW5hZ2Vy IHRpbWlk IHNuYXBjaGF0 IGNvbnNlZw== CWRpc3RhbmNl X3JpZ2h0cw== X0Rlcw== IEZsZXNo LXZlcg== IGFmbA== ZnJhdWVu IGJsYXNwaA== IFF1YWxpdMOkdA== bWFm TW9uaXRvcmluZw== LkRpZmY= IHNob3JlbGluZQ== IHJlc3BvbnNlQm9keQ== bWVtc2V0 PGRlY2ltYWw= U21hcnR5SGVhZGVyQ29kZQ== IGluc2V0cw== IEJpbmFyeVRyZWU= YW1lZGE= IG5paGls IE5heQ== eW1vbG9neQ== IFdH IHRhcGk= IEluc3RhbGxlZA== bWFpbnRlbmFuY2U= KX0iCg== IFhP LXBlcmlvZA== c2Fy IG5pbmd1bmE= T1JNQVQ= LnNldFByb3RvdHlwZU9m IEti IEhlbnJpaw== w6l0aXF1ZQ== IExhaG9yZQ== CUFkZHJlc3M= IG1lbHRz Tnk= X2FkdmFuY2U= IHZlbG9jaWRhZA== IGFsdW1ubw== IHNhbml0aXplcg== IHBoaXNoaW5n IENvbWV0 IGNoaWFy CXNwZWM= dHJpbW1lZA== KHN0YXRlYXJy b25uZW4= UmV2ZW51ZQ== TGVucw== IGNoYWlyZWQ= IEFzc3VtZXM= VHJhc2g= X3Vuc2V0 XEJyaWRnZQ== UG9pbnRTaXpl IFBvbGlj IHNleHVhbGVz CWRmcw== IFdpZGVTdHJpbmc= IGFjY3J1ZWQ= WVc= X1NDSEVEVUxF IGtpdGU= IHBhcmFjaHV0ZQ== W3RhYmxl IGFjdGl2ZUNsYXNzTmFtZQ== LlF1YWQ= SXNyYWVsaQ== IMWT IGhvb2c= IGNo4buJ ZXdlYXI= IHRpcmVsZXNzbHk= c2V0RXJyb3I= LmdldEFtb3VudA== LnNldEl0ZW1z IE1hbnNvbg== IEJheWVzaWFu X0ZsYWc= QUNIRVI= L29yaWdpbmFs IGltbWFj IExvc2luZw== Jz4KCg== TGlj IE1pcmFnZQ== IEFzc2VtYmx5RmlsZVZlcnNpb24= VGVW IFZhbHVlRXZlbnRMaXN0ZW5lcg== LXNvbHZpbmc= VGhv cm91bGV0dGU= X1dQ IHVuaW50ZXJydXB0ZWQ= IGZpZWxkVHlwZQ== LlR5cGVk IGFtb3Vy IG1vY2tlcnk= KHZvbA== IFN1YmNvbW1pdHRlZQ== IFJ1Zg== ZXJveA== OlVJQnV0dG9uVHlwZUN1c3RvbQ== IEJsdXI= IHd5a29u bmNlcw== QVNIQk9BUkQ= ISEiKTsK IG11cmRlcmVycw== LmRhaWx5 IERJQUc= amluZw== IGRvbHBoaW4= IGzDsm5n IGLDtg== IFZvY2FidWxhcnk= LlN0T2JqZWN0 JykiPg== IHp1bg== IHNjcmltbWFnZQ== dHLDqWFs IExpZw== W3Zp Q29sZQ== IGZyb3N0aW5n LlBsYXllcnM= LXRyYW5zbGF0ZQ== RmVlbHM= PVwiLw== LkJ1dHRlcktuaWZl ID8+Owo= IGF2aQ== aW5uaWU= LkZhaWx1cmU= IHNwaW5kbGU= Q29uZmlndXJhdGlvbkV4Y2VwdGlvbg== X2hvcA== IHBvc2nDp8Ojbw== IEF3YWl0 VUlJbWFnZVBpY2tlckNvbnRyb2xsZXI= CWRheQ== IGdlbm9t Q2Fi INGA0LXQt9GD0LvRjNGC0LDRgg== T1JJR0lOQUw= IGVqYWN1bGF0aW9u KHRjcA== U0VDT05E IHRvbmlj IExpc3RCb3g= IAkJCg== KCk+Cg== IHF1YXRyZQ== xrDhu6NuZw== d2l0aEVycm9ycw== Lk1heWJl LOKApg== dG9rZW5JZA== X1VOREVG IGZyZXNobmVzcw== IEFtZW5kbWVudHM= Lm1hcGJveA== LkNW KGJsb2c= X2dldHRpbWU= LnF1ZXN0 c3BhcnNl IHJlc2FsZQ== IGVudGh1c2lhc3RpY2FsbHk= IFByb3N0aXR1dGFz V2E= Q2FyZ28= LlBhcmNlbGFibGU= U0VOU09S IFJ5dQ== TGF1Z2hz X05hdGl2ZQ== L3Bn eXN0cw== IHBob3RvYw== 566A YWRvcHQ= LnNwZWNpZXM= Y29uY2lsaWF0aW9u QWRqdXN0ZWQ= LkZpcmViYXNlQXV0aA== dXR0bGU= b3JkaW5hdGlvbg== IG11bmNo IFN0YWtl LnBpbmc= YW5rZXI= KFFTdHJpbmdMaXRlcmFs IHN1YnNjcmlwdA== ICAJCg== IE1DQw== X0NtZA== c2V4eQ== aW91 IE1BTlk= IG5hbm55 VFJBSU4= IGZsb3VyaXNoaW5n IFdhdGNoZXM= IFFNYXA= IEZlcm0= IHdhc20= IEFiZWQ= X1VE IEdsYXNzZXM= K3Y= QXR0ZW5k LkNoYWlu IGRlY2VuY3k= IFN1cHBsZW1lbnRhcnk= aHVudGVy LXR4dA== ICJ9IjsK LnNldFdpbmRvd1RpdGxl KCI8Pw== IG51bWJlcldpdGhJbnQ= IGFmYXI= 56e75Yiw cml0dGU= L2xpc3Rz KeKAnQ== IGRpdmVyc2Fz IGVtYmVy LlJlYWN0Tm9kZQ== IGthbmc= IFN0YW1mb3Jk W2F0 LmNsb3NlUGF0aA== IGNvbnRyYWNlcHRpdmU= KGxvY2F0aW9ucw== IGF2YW56 IENvbnRhaW5lcnM= IFNjaG9sYXJz LmFjY3VyYWN5 INCy0YvQv9C+0LvQvQ== 5ZWP PSItLQ== IFdyZXN0bGU= IEd1YW50YW5hbW8= IG55bXBo KGd1ZXNz LnNldENvbHVtbg== X3RF LmNvbnRlbnRNb2Rl IGludmFsaWRhdGVk IFNob290ZXI= IE1hdGVy LlN1Ym1pdA== IGFuZ2xlZA== bmF2YmFyRHJvcGRvd24= QW8= IOa1 0LjRgdC6 IFNDQU4= CWNt IE1hcmt0 dHJ1Y2s= OycK Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCg== IGdoZXR0bw== IGJ1aXRlbg== IENsb3du OiE= IGNoaW1wYW4= J2ZpZWxk YW1tbw== IERlcGVuZA== KX0p KEZMQUdT IFJDQQ== IENob2ly TG9naW5QYWdl IEdvcmQ= Q29tcGFjdA== LXBvY2tldA== IGNvbnN1bHRhcg== IEludGVyY2VwdA== xZ90aXI= dWV0eXBl b25lbnRz IHN0YXJ0UG9zaXRpb24= IHBvc2l4 IFdvaG51bmc= X0VYUFJFU1NJT04= IExvZ2luQWN0aXZpdHk= KG9wY29kZQ== IFRhbmdv IE51bWJlck9m Lm92ZXJmbG93 IFdDUw== IE9jY3VwYXRpb24= X2Nn LlRvcGlj IENhcmVlcnM= QVJBVElPTg== LmdldExpbmU= IOyihQ== IE5hY2h0 IHRvSXRlbQ== aW5jbHVzaXZl YXZpZXN0 LWFwcG9pbnRlZA== KGludGVybmFs Q09OVEVYVA== KGRpZ2l0cw== PXsiLw== IHBsYXl3cmlnaHQ= IGRlYWRsaWVzdA== bGVhZHM= LlBVVA== ICp9Cgo= IFBhY3Q= IERpc2NvdW50cw== TG9jYWxpemVkTWVzc2FnZQ== IE3DpG5uZXI= Xz4= IG1hc2NhcmE= KFByb2ZpbGU= 5Yqf6IO9 aW1pdMOp IHdpbGRmaXJlcw== LVJPTQ== LmlzT24= KGdyb3VwSWQ= UmVwYWly YWNjdW11bGF0ZQ== IDwiLA== IGhhbmR3cml0dGVu IGFjaGV0ZXI= IE1HTQ== IElybWE= LT57Xw== Z2Vl Y3JpbWluYWw= IOiLpeimgQ== IG1vbWVudGFyaWx5 IikhPQ== X2xpdA== IGV4cGlyZXNJbg== LiIpLg== 6ZW/5bqm IGZyw6Zra2U= dmxj IG9yYnM= KSwk IHZlbnR1cmVk Lz5c Y2hhcm0= TnVpdGth ZWxkaWc= YXRvbmlu V2l0bmVzcw== LWxhdA== IHNldEhpZGRlbg== IHJlbGljcw== IGNvbnN1bGF0ZQ== LklHTk9SRQ== IkFmdGVy IHNldEFkZHJlc3M= IGJlc3RlaHQ= ICcnKQoK LnhheGlz IHNlcsOjbw== IG1pc2xlZA== X1VOSUZPUk0= IFZJQQ== aW5jcg== IHplbml0aA== IHZpc2Nvc2l0eQ== IHRoaW5seQ== LmdldFNoYXJlZFByZWZlcmVuY2Vz LkVycm9yQ29kZQ== IiksIg== IE1pbGxpb25lbg== IC8+KQo= U2Nyb2xsSW5kaWNhdG9y LXNlZWtpbmc= IFBPTElUSUNP YXNjYQ== X3Js TmF2aWc= KGZ1bGxmaWxl IHNvbGl0dWRl IGp1dmVu IGhhdWxpbmc= IE1hY3Jvcw== IEdyeQ== IGV4ZXJjaXRhdGlvbg== IEFUVEFDSw== VGlja0NvdW50 IHJpdGVz IGRvZQ== UGFydGljbGVTeXN0ZW0= IHNsdQ== V2luZG93VGV4dA== IENsYXNzTmFtZQ== IHNsYW5kZXI= CVBvcnQ= am9uZw== P2E= LkRpYWw= 4oCUYXQ= JG9ialBIUEV4Y2Vs IHNvYXI= RU5O YXBwZWFyZWQ= IHF1b3RpZA== ZW1hY2hpbmU= IG5pcA== IG1pY3JvdGltZQ== IEFsbWE= OyE= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IFBhc3NhZ2U= IGR1bXBzdGVycw== IEV4Y2x1ZGU= IHN1Z2dlc3RpdmU= IENpcmN1bGFyUHJvZ3Jlc3NJbmRpY2F0b3I= X2Nscg== QXJyYXlUeXBl SUxMQQ== RWxhcHNlZFRpbWU= RHJpdmVu IHJlc291cmNlTmFtZQ== IEdhcnJpc29u c2VyaXI= LWFoZWFk IHBpbm5hY2xl IEVzcHJlc3Nv U3BhcnNl IGFzc2F5cw== IEdpcmxmcmllbmQ= aW1pZA== XT0nXA== T05HTE9ORw== IHBvcnRyYXlpbmc= TGFuZQ== IGLDunNxdWVkYQ== IHJlaW5mb3JjZW1lbnRz IFNwcmVhZHNoZWV0 IEFycmF5Q29sbGVjdGlvbg== LGFycg== bGlnaHRib3g= aWNhbmE= PCI= YnVpbGRlcnM= S2lk IE1hdFNuYWNrQmFy RVhQUg== b2RjYXN0 IEZvdW5kYXRpb25z IGluZHM= PSckew== Rml6eg== LWZ1bmN0aW9uYWw= KHdvcmtzcGFjZQ== IHN0ZW1tZWQ= X3BhdGNoZXM= IEphcnZpcw== UkVBRElORw== IGRpc3Jlc3BlY3RmdWw= IFFEb20= ICR7Cg== ZXN0YXR1cw== UmVhY2hlZA== IS4KCg== SUxU IE5ERUJVRw== IENvdXJhZ2U= YmlydGhkYXRl IFRpbmc= IHV0aWxpemFkbw== w6FuY2hleg== T3V0ZG9vcg== IGhhbmRndW5z UmVmQ291bnQ= yZk= cm9tbw== IHR0cw== LlNoZQ== IFBhbmU= 44CRLOOAkA== IElPQ1RM L2JsYWNr aW5zY3JpcHRpb24= IGJpb3BzeQ== IFRpbWVJbnRlcnZhbA== LlRlc3RDaGVjaw== IEdVSVN0eWxl IENhcGFiaWxpdHk= IEJlaXRyYWc= ZG9ubmVlcw== VHJlYXRtZW50 LmJhY2t1cA== IHNpZ25pbmdz IEJvY2E= ZHJt Lk1BSU4= IGdvZWRl IE1hcmt1cA== R1JFRQ== IEJhc2VTZXJ2aWNl LkNyZWF0b3I= IGphaWxz IEthaG4= SXBBZGRyZXNz QUNISQ== IGluaGliaXRlZA== IEAkXw== IEFzc2Fzcw== IGVudmlhZG8= SGVyb2Vz 0J/QtdGA IE1hdmVu Lmxz IGl2ZQ== fFJG IHJlc2l6ZU1vZGU= IHJ1bXBl X2F0dGFjaG1lbnRz VFU= IHRhY3RpbGU= QXR0ZW1wdGluZw== IHJvYmlu eWF3 IG1lcmNlbmFyaWVz IEhhYml0YXQ= ZW5kZGF0ZQ== IG94eQ== CVJhbmRvbQ== b2hvbg== SXNOdWxs IFZhbGlkYXRpb25SZXN1bHQ= 44Oa dW1iZWQ= cHB2 IGFycA== aWNoaWNr X3Jubg== IFRGVA== VGV4SW1hZ2U= Ik9u IFNhbXBsZXI= dG9wbA== IGphbmU= eWxpbmc= IFVOSUNPREU= VGFiSW5kZXg= PHsK c3VzcGVuZA== dXZpYW4= LGFwcGxpY2F0aW9u 0L7Qu9C40YfQtdGB0YLQstC+ eWF0 ZXppZXI= IENIVU5L IEFkbGVy L0FkZA== IEtleVZhbHVl IHNwb3PDs2I= U2FtcGxpbmc= Y2hlcnM= X0FNRA== UnU= Lk11c3RDb21waWxl TmF0aW9u QXNzb2M= TWFuYWdpbmc= IEVuZ2w= X0dC IHN1Y2NpbmN0 IGRpc2xpa2Vk IElrZQ== QnVsbGV0aW4= X0FSQ0hJVkU= UHJvcG9zYWw= IGpvZ2dpbmc= LkNSRUFURUQ= IGNob2w= 6KOF jKg= LXB1c2g= IHJlc2VydmE= Y29yZXY= w6h0cmU= VEhS IGluY29tcGV0ZW5jZQ== IGNoYXJpc21h 5oSf ICI9PQ== QlRO IExvY2F0b3I= aXZldA== KCcuJykK IGZvckluZGV4UGF0aA== w7RtZQ== IGNhcGFjaXQ= d2F0ZXJz IFdST05H aG9h IE1JUFM= IGVtaXNz IEphY3F1ZWxpbmU= KGNtcA== IGVlbnM= TGVv LnRpbWluZw== Q0xVU0lPTg== ICgiLQ== 5ZOI LmtvZGU= IFVuZGVydA== IGJld2lsZA== IEVzc2Vu Lmhk IHJlbmVnb3Q= IG1vd2Vy IGxzcA== IHBlbmNoYW50 IG1hbm9l IGFnbGk= IHJlY2Fs IE9QRVJBVElPTg== KF4pKA== IM69 IFNjb3BlZA== IEAiCg== PWxhYmVs W2xvYw== SW50bA== IE56 dGFibGV0 LkNvbHVtbk5hbWU= IHNjcmVlblNpemU= REJ1cw== Y29va2Vk LXJlZ2lzdHJhdGlvbg== 4oCcT25l LW5vbg== IHdpxJlj IGNvc3Rh LmFkZFRhYg== LmNvbmRpdGlvbnM= IEhlc3M= TUVNT1JZ IEF2YWxhbmNoZQ== KCl9fQo= IHRyaXBsZXQ= IGxhYnlyaW50aA== IE5vZGVMaXN0 IE5ZVA== IHllbmk= ZGZm Lkh0bWxDb250cm9scw== QVZJUw== L01hdGg= IG1lbWNtcA== 2KfYoQ== 0L7RgdGM Y3JhcA== KHBhZ2Vz IGx4bWw= IFFEYXRlVGltZQ== X3RjYg== IG9wZW5pZA== IHN5bmFwdGlj IE1ETUE= KHNsdWc= aWdtYXRpYw== ZW5vcg== IGNyYW1wZWQ= R09Q rZA= LmlzRmlsZQ== IERpZmZlcmVudGlhbA== ID0iIjsK CQkJICAgIAk= IENvb2tl CVVGVU5DVElPTg== IHBlcnNldmVyYW5jZQ== UmVsYXRpdmVMYXlvdXQ= SU1QT1JUQU5U IGV4b24= INC+0L0= aWJhc2U= KENPTlQ= bm92YXRpb24= 5L2V W3N1Yg== QWRtaW5Db250cm9sbGVy SFRUUEhlYWRlcg== Y3JlYXI= IE5JUg== IERyb3BEb3duTGlzdA== IHZhbGlkZQ== IGRlaHlkcmF0aW9u Lidd KFdJTg== IC4uLlw= IHBob3Rvc2hvcA== CUluaXQ= X2NvdQ== IHRpbWVab25l ZGFyd2lu cm9tYXRpYw== TmF2aWdhdGlvbkl0ZW1TZWxlY3RlZExpc3RlbmVy YnJhdGVz XS0tOwo= IHRyYWdlZGllcw== IFBlZGlhdHJpY3M= U01BUlQ= LUFQSQ== IE1lc3NhZ2VMb29rdXA= CXZv IHByZWp1ZGljZXM= IG1B VXBz IE1JU1NJTkc= CWFk Q3JlYW0= IFRi IE1vbmE= X2dob3N0 CXR5cGVz RW1i IERvY3VtZW50YXJ5 Jyk7CgoKCg== IGx1cA== X1JlZmVyZW5jZQ== IEJBVENI IGludGVydHdpbmVk PENlbGw= IENhYnI= bmF0aW9u IGlzQ29ubmVjdGVk LnJlbW92ZUxpc3RlbmVy IGNvbmc= X3Rp IFNpbGljb25l IOqysOqzvA== IFdBTg== IEdpYnJhbHRhcg== L3Jlc3BvbnNl CXBlcnNvbg== Y2hhbnRz VklQ ZW1lcmdlbmN5 UGl4ZWxGb3JtYXQ= LUFt IHNvdXRod2VzdGVybg== X3BsbA== aWZlcnM= X09OQ0U= IEZheWV0dGU= Lm5jYmk= X1BhbmVs LlF1YWw= IHBvbHlz IGNyZWF0ZVN0YWNrTmF2aWdhdG9y 77+9dA== IGxheW9mZnM= IEJsYW5jbw== RmVhdA== IFZpbWVv X2NoaQ== X2xpZmV0aW1l UE9JTlRT LHByaXZhdGU= IHVuYmVhcmFibGU= cHJpbnRpbmc= IGNnaQ== LkJBQ0s= IGludGVybnM= IE5ld2x5 aW5mZWxk KElC IEthdGE= IERlZmVuZGFudHM= VGhy 6aKE X1ZG RkZGRkZGRkY= IGRhdmlkamw= IGJpdHRlcmx5 U3VnZ2VzdGlvbnM= LnNldENhbmNlbGFibGU= RklOQUw= YXNvbnM= X3J3bG9jaw== X1dSQVBQRVI= IGhhcHBpZXN0 KHJvd0luZGV4 w7NzaXRv VE9UWVBF QXV0b21hdGlvbg== TG9nRmlsZQ== IGNvbnNvbGF0aW9u 44OA IHTDqm0= IHByZXI= cmd5eg== IEdlZw== CWR0bw== LmRlZmF1bHRWYWx1ZQ== IEthbWk= IEFTRQ== b3B0aW1pemVk IO2PrA== IG9yaWdpbmF0ZXM= ZXJyTXNn IGVzcGHDp28= KFNZUw== IE1jQg== ZGFuY2U= X2RldGVjdGVk IGZyw7w= CQkgICAgCQk= PERhdGU= KGNvbWI= IERlY2lkZQ== XEZpZWxk IFByb3Bvc2Vk Umli IGRpc2xpa2Vz IFdpZW4= CURvY3VtZW50 IHRyYWY= IHN0b3JpYQ== IFRlbGxz Jyk9PQ== Q3Jp KFZBTFVF IEJ1cm5ldHQ= LHZvaWQ= IGRhbmg= IGNjcA== QmxvY2tjaGFpbg== OiItImAK SUNsaWVudA== SVNPREU= SXNzdWVy KX0NCg== LGJ1dA== IFVwaA== KFN1Yg== IHTDqWzDqXBob25l IG9uRGF0YUNoYW5nZQ== IG1hcnNoYWxsZXI= LWFuYWx5dGljcw== LGNvbnRlbnQ= IGRlYmFjbGU= X1ZhbHVlQ2hhbmdlZA== IGZhdW5h ICM9Pg== IGZveWVy J3V0aWxpc2F0aW9u IE3DvGxsZXI= IEZldGlzaA== IGRlZmF1bHRNYW5hZ2Vy IGJhY2t0cmFjaw== QmFo RXhwbGljaXQ= X0FTQ0lJ IG1BY3Rpdml0eQ== KE1zZw== IOqyjA== IFRFUk1T IEFuZ2ll SFNW IE1vc3F1ZQ== Lk5hbWVz 7Yq8 cmVzdGU= X3Bhcm1z IGdhcGluZw== IGNyb3BwaW5n RGF0YUZyYW1l IHJlc3BvbnNpdmVuZXNz X3VuZG8= X3RyYW4= LnRlcm1pbmF0ZQ== IGl0YWxpYW5l IHdhbGt0aHJvdWdo IGF0dHJhY3RpdmVuZXNz 0LTQtQ== X1NUUw== X2xlYXJu IGNob2NvbGF0ZXM= aWVyYXJjaGljYWw= LXRoaW5raW5n ICkpKQ== aXNobWVudHM= LkxvZ2Y= IFRNWg== IENhbmFyeQ== Zm9pbA== IFZhY2NpbmU= LnZ4 IFN1cnJvdW5k SW50ZXJtZWRpYXRl IGlvdg== dmFpcw== JzsiOwo= 772eCgo= 6YCB5paZ 4oCmaXQ= U2VhdHM= Q2xhcg== V2Fycw== IEh1dGNoaW5zb24= IEhhc2Fu IScpCgo= IFJpY2hpZQ== Y2hlaWRlbg== KCQoJw== WW9yaw== IGxpZHM= IGFscGhhbnVtZXJpYw== IEdsb2Nr LnNoYXBlcw== IHNwYXJraW5n X2Vwc2lsb24= dXBsaWNhdGVk LmRpcnR5 XSk9PQ== IOychOy5mA== IHNjbg== IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq X1BSRVZJRVc= X0hD aWVsZGluZw== ZmdldHM= IEFkZGlzb24= IHByb2R1Y3RTZXJ2aWNl LWZpZ3VyZQ== KHJldHZhbA== emFubw== IGF1dG9i CXNk X251bWVy IFNldExhc3RFcnJvcg== IEZpb3I= aWZpY2FuY2U= VW50aXRsZWQ= IGluZmllbGQ= IHt9KSk7Cg== IHNwYWM= IHJvb2tpZXM= KGRlc2NyaWJpbmc= bmdlbg== 4K6/4K4= LnJkZg== Lk11dGV4 IGtuZWVsaW5n IFFF c2V0TWF4 UmVhZFN0cmVhbQ== IHZlbnRhcw== c3V0 Y21wZXE= LldyaXRlQWxsVGV4dA== IEV4cGVyaWVuY2Vk JF9f IGthdW0= IExJUw== IGRvY3VtZW50b3M= X0hFQUxUSA== aWNvbnRhaW5z IGFydGlzYW5z T1dORVI= IGJsaW5rZWQ= Z2V0RGlzcGxheQ== IHRvZW4= IHJvd051bQ== IGF2cmls IGludmlz IEtlYXI= dG9CZUluVGhlRG9jdW1lbnQ= YXB1cg== IHJhY2tlZA== IE1jTWFzdGVy X0FUVFJJQg== SGF6 IGZhY3R1cmE= L3Rz INGA0LDQt9C80LXRgA== IHpm IHNob3J0ZmFsbA== LmZhc3Rh IENPTlNUQU5U Lm1hbmFnZWQ= Z2Vtcw== U2hhcmVkUG9pbnRlcg== IGJsdXJyeQ== YnJpZ2h0bmVzcw== KGNvbXBvbmVudHM= IC4uLiIKCg== U0VMTA== IElsbHVzdHJhdG9y LmdldENoYW5uZWw= IHRyb3V2w6k= eXN0ZXJz IHZvaXM= IExpbmRlbg== IGVtb2ppcw== IGJyYXds IE1TUg== IEVsbw== IENyb2F0aWFu UG9wdXBNZW51 TGV3aXM= LkpXVA== IGFzdG9uaXNoZWQ= QnVzaA== KGl0ZW1JZA== IGRldGFjaG1lbnQ= IEVuY29yZQ== 5bCU IHJla2w= IGNyYW0= KSQv LmdldEhvc3Q= X3JlY29tbWVuZA== LUhU X2NhbGlicmF0aW9u QXV0aGVudGljYXRl LmZpcmViYXNlYXBw VU5JWA== CUNhbWVyYQ== IEhFQVA= SWRlYWw= Lm9mZmljZQ== IGdvb2Z5 KFN5bWJvbA== IGpvdWVy X3BhcnRpdGlvbnM= IHJhcGlkZW1lbnQ= IEdOVU5FVA== aWRVc2Vy IHN1cGVydmlzZQ== KENvbnRhY3Q= QVdO 44GY IG5hYW0= IGF1c3Q= 5Zyo57q/ X3NvZnRtYXg= QWxsb3dBbm9ueW1vdXM= YW1tYWJsZQ== Uk9VVEU= KkQ= IGFkZW4= IENyaXN0aW5h IENyaXN0aWFubw== IGJsb29kc3RyZWFt c3ViY2xhc3M= X3BlcnNvbmE= Q0hJTEQ= LWtub3c= IG5hdmlnYXRpb25PcHRpb25z IFp1a3VuZnQ= IFBpeGFy VHlsZXI= IHVuZGVyd29ybGQ= IHNpbmNlcml0eQ== IGRpc3BlbnNlcg== IGt0ZXI= aWRkZXJz LmFkZE5vZGU= LWNoZWNrZWQ= IGtleXN0 IFdUTw== LnNpZ25hbHM= IGFkdmVudHVyZXI= IFBhbmc= XFI= PXBvcw== IGRpc3BlbnNhcmllcw== IENsb3NldA== KCJ7XCI= aWRlb24= IG7DqWNlc3NhaXJl KCkiCg== X1JFQ0VJVkVE IHLDqXN1bHRhdHM= IG1vZGVu IEljZWxhbmRpYw== O2Q= LmFsbG93ZWQ= KG5ld1VzZXI= IG1lcmNpbGVzcw== LldhaXRGb3I= IGRheWNhcmU= IENvbnZleW9y" }; - o200k_base_default = { pat_str: "[^\\r\\n\\p{L}\\p{N}]?[\\p{Lu}\\p{Lt}\\p{Lm}\\p{Lo}\\p{M}]*[\\p{Ll}\\p{Lm}\\p{Lo}\\p{M}]+('s|'S|'t|'T|'re|'rE|'Re|'RE|'ve|'vE|'Ve|'VE|'m|'M|'ll|'lL|'Ll|'LL|'d|'D)?|[^\\r\\n\\p{L}\\p{N}]?[\\p{Lu}\\p{Lt}\\p{Lm}\\p{Lo}\\p{M}]+[\\p{Ll}\\p{Lm}\\p{Lo}\\p{M}]*('s|'S|'t|'T|'re|'rE|'Re|'RE|'ve|'vE|'Ve|'VE|'m|'M|'ll|'lL|'Ll|'LL|'d|'D)?|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n/]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+", special_tokens: { "<|endoftext|>": 199999, "<|endofprompt|>": 200018 }, bpe_ranks: "! 0 IQ== Ig== Iw== JA== JQ== Jg== Jw== KA== KQ== Kg== Kw== LA== LQ== Lg== Lw== MA== MQ== Mg== Mw== NA== NQ== Ng== Nw== OA== OQ== Og== Ow== PA== PQ== Pg== Pw== QA== QQ== Qg== Qw== RA== RQ== Rg== Rw== SA== SQ== Sg== Sw== TA== TQ== Tg== Tw== UA== UQ== Ug== Uw== VA== VQ== Vg== Vw== WA== WQ== Wg== Ww== XA== XQ== Xg== Xw== YA== YQ== Yg== Yw== ZA== ZQ== Zg== Zw== aA== aQ== ag== aw== bA== bQ== bg== bw== cA== cQ== cg== cw== dA== dQ== dg== dw== eA== eQ== eg== ew== fA== fQ== fg== oQ== og== ow== pA== pQ== pg== pw== qA== qQ== qg== qw== rA== rg== rw== sA== sQ== sg== sw== tA== tQ== tg== tw== uA== uQ== ug== uw== vA== vQ== vg== vw== wA== wQ== wg== ww== xA== xQ== xg== xw== yA== yQ== yg== yw== zA== zQ== zg== zw== 0A== 0Q== 0g== 0w== 1A== 1Q== 1g== 1w== 2A== 2Q== 2g== 2w== 3A== 3Q== 3g== 3w== 4A== 4Q== 4g== 4w== 5A== 5Q== 5g== 5w== 6A== 6Q== 6g== 6w== 7A== 7Q== 7g== 7w== 8A== 8Q== 8g== 8w== 9A== 9Q== 9g== 9w== +A== +Q== +g== +w== /A== /Q== /g== /w== AA== AQ== Ag== Aw== BA== BQ== Bg== Bw== CA== CQ== Cg== Cw== DA== DQ== Dg== Dw== EA== EQ== Eg== Ew== FA== FQ== Fg== Fw== GA== GQ== Gg== Gw== HA== HQ== Hg== Hw== IA== fw== gA== gQ== gg== gw== hA== hQ== hg== hw== iA== iQ== ig== iw== jA== jQ== jg== jw== kA== kQ== kg== kw== lA== lQ== lg== lw== mA== mQ== mg== mw== nA== nQ== ng== nw== oA== rQ== ICA= ICAgIA== aW4= ZXI= IHQ= IGE= ZW4= b24= cmU= IHM= YXQ= b3I= ZXM= ICAgICAgICA= YW4= ICAg IGQ= aGU= IGM= IHA= aXM= YXI= aXQ= Cgo= YWw= 4KQ= bGU= b3U= IG0= IGY= IHc= IGI= YXM= aW5n IHRoZQ== aWM= ZXQ= IG8= aW9u ZWQ= ZWw= IG4= cm8= ZW50 INA= bmQ= c3Q= 4YM= 0LA= IGw= IGlu Owo= Y3Q= ICAgICAgIA== b20= aWw= IGg= YW0= ID0= aWQ= IHRv 0L4= 4oA= IGU= 2Kc= aW0= IHJl IHY= YWQ= IHRo IGFuZA== 0LU= IG9m IGc= dXI= 0Lg= Y2g= IOA= IGRl CQk= IFM= IHU= 0YI= dXQ= b2w= 0L0= IHk= aWc= c2U= 0YA= b3Q= ZW0= YWc= aXY= ICg= cXU= ICAgICAgICAgICA= IFQ= IHs= IEE= YXk= IEk= 4KU= YWM= 4KY= dWw= KTsK IEM= LgoK b3M= aWY= IOCk b2Q= 0YE= DQo= dHI= IGs= dW4= 2YQ= LS0= ZXN0 w6k= YWI= YXRl aXI= 4Lg= IGlz 0Ls= b3c= dXM= 4LQ= YXRpb24= IH0= INg= b3J0 IE0= ICI= Ly8= dW0= IGZvcg== aWU= 4Ko= IFA= dGVy Y2U= b3Vy IG9u YXA= dGg= IHsK IGNvbg== YXY= ICAgICAgICAgICAgICAgIA== ZXJz Kio= dGU= LAo= IGJl 2YU= IEQ= KCk= 2Yg= IEI= ZW5k IHN0 aXN0 YWs= bHk= cGU= ICo= 2YY= YW5k IHI= 4LI= cmVz dWI= b2M= 2LE= IGFs 4LA= ZXNz aXRo 4oCZ 0L7Q IHBybw== IGo= 0YM= 2Yo= YW1l dmVy KQo= cG9ydA== IGFu w6E= w6Q= IEw= IGNvbQ== IG5l IEY= MjA= YXNz IEU= IHNl bGlj IFI= ICc= 0Lo= INc= IDw= 0Ys= dWU= b3A= b3V0 IGVu aHQ= IHdo IGFz 4K4= IHF1 Y3Rpb24= 44A= YWdl IE4= b2c= IGl0 IHlvdQ== aXo= IHdpdGg= IHRoYXQ= Li4= IFc= IEg= aXA= 0LQ= ZXg= aW50 aWxs YW50 dXJu IHRoaXM= INin YXJ0 IHRy IEc= 0Lw= IGhl OwoK IG9y MDA= IGxl ICAgICAgICAgICAgICAg aWs= bWVudA== 4Kc= b3Jl cm9t ZXJl IGV4 aW5l 4LU= YW5n 2Ko= LS0tLQ== 4KS+ 0LI= aW5k Z2V0 Pgo= YWlu b2s= aWI= dWQ= cGw= dHVybg== ICAgICA= w7M= IE8= IC0= ZWN0 aWE= aXR5 IHVu IGlm 2Yc= IGF0 24w= Y29u cGVy 0Y8= 4bs= YXRh 2K8= ICQ= IGNo IHBy b3Jt YWNr IGFyZQ== aWxl cHQ= w60= IGxh Lgo= IOKA PT0= aW1wb3J0 YWJsZQ== aWFs b3N0 Y2w= aWVz IGNs KCI= b3Y= dXN0 IOCm w7w= w7Y= 4Ks= IGk= dWx0 YXZl bnQ= IHo= PSI= IHdl bGQ= aWdodA== dWJsaWM= aXZl YWxs 4YOQ YWN0 INin2YQ= 77w= IGZyb20= w6U= IHN1 aXJl KioqKg== ZWxs YXJk 15k= c2Vy dHJpbmc= IFU= IC8v aWNl b3Jk 44E= IH0K IOCq ZmY= LT4= Ow0K bmU= xLE= ZGU= cmE= 0Yw= YW5z aWRl YXNl 1aE= IG5ldw== IGRv IHJldHVybg== IFRoZQ== 5Lg= IG5vdA== CQkJCQ== dXJl 4KWH YXN0 b2I= IFY= 4KSw IHBs IHlvdXI= 0Lc= IOGD SW4= cHI= Y29t LnM= IHNo aW1l IEo= YXJl b250 IGFy 4K8= INC/ eXBl IGVs aXRl 2LM= 15U= cHA= 5aQ= IGJ5 2Kg= IEs= ICs= 4LE= IHF1ZQ== aWV3 YWls 0Yc= IGNhbg== 0L8= MjAx IG1l INGB 4LM= 4YOQ4YM= Iiw= IHdhcw== 4LWN YWNl b2Rl IGludA== YWNo IGhhdmU= bGw= aWo= 4KWN 0LM= Z2U= ZWxm IHBhcg== IGFk 4YOY c3Ry b25l cm91 IGFi 4oCd IHJlcw== U3Q= ZW5z 2YE= ZHU= ICAgICAgICAgICAgICAgICAgIA== Zm9ybQ== INU= MTA= aWNo w6c= b25n KCc= w7A= w6A= 1aHV Y2M= eHQ= IDo= 2Kk= 0YDQsA== 2Lk= cG9u IGdldA== YmVy 0Lk= UmU= 4KS+4KQ= IGFsbA== IFs= 0YU= YXRo aW8= zrE= amVjdA== IHRl IElu IGRlcw== 0ZY= aWdu Ogo= YWx1ZQ== b3Jr dmU= IHdpbGw= fQo= KCk7Cg== KS4= Ojo= INCy IGNsYXNz ewo= bG8= b21l IFRo 0YHRgg== aXpl IHB1YmxpYw== INmF YXU= dWxs 5b0= aW9ucw== 0LE= IH0KCg== IEA= 15nX ZGVy b29r LS0tLS0tLS0= 0Yg= IHVz YW5jZQ== b3VsZA== INC9 44M= IGlt X18= cHV0 aWVudA== 5Lo= LmdldA== 0LXQvQ== IHBlcg== IHZv ZXh0 YXRlZA== xI0= 2YI= eXN0 b3Vz 4KS/ c28= Jyw= 44CC cGxl 15XX 2qk= ZXJ2 IAo= 4YOU 4Lk= cGFy 4Ka+ Y3I= cmVzcw== IOC0 Y2s= 4oCZcw== 4bo= IOw= ZXJ0 ZXk= b3VudA== PC8= bWE= IGdv 4KWN4KQ= xaE= IHNv YWtl YXJ5 INC4 dXA= dmVudA== b3J5 IC8= 5b2p zr8= cHJv z4Q= w6M= ZnQ= ICY= INC6 IGRpcw== ZWFy IG1h 4LWN4LQ= CQkJ 05k= dW5jdGlvbg== IGNvbnQ= ZXJy X3Q= eXN0ZW0= 4KWA 0LDQvQ== IG91dA== cm93 IHVuZA== 44I= dWc= aWVu IOCklQ== YWg= dWFs dGhpcw== b2Nr IGhhcw== d2U= ZmVy 4YOU4YM= 4YA= MTk= IGV0 IG5v KTsKCg== ZGl2 IGVt TmFtZQ== IFk= RVI= 5aSp aXRpb24= IHVw 2YM= ID0+ cmk= IG1hbg== zrk= ZXJ5 IHByZQ== IyM= IGVz INCx IHNh aW5r ZW5n INC0 4Kq+ J3M= ZWs= IC4= INmI IGJ1dA== IOCw zrU= bmc= IGVzdA== Y3Jl b3VuZA== Z3I= bmFtZQ== IG5h MTI= IOCy IFN0 4K+N YXBw PT09PQ== aWVy SWQ= IFJl cmVl Q29u KioqKioqKio= 4KS/4KQ= 1oA= INC+ b3Jz KSk= U3RyaW5n 4KeH b3Nl dGV4dA== IHNldA== bGVjdA== IG15 aWxk 0YY= w7g= Y2hl INio 4YOY4YM= YXRpb25z aWVs INGC ICov aWNhbA== YW5u dG8= KSw= ZXc= 0L7Qsg== IGFt b3du YXJr dGhlcg== fQoK ZW5lcg== IG1vcmU= INC8 cHM= 5Y8= 2K0= TGlzdA== ID09 4KWL Y2VwdA== zr0= 7J0= Z2g= w6g= UHJv b2RlbA== INCw cGg= ZW1lbnQ= aW5ncw== YWRk SU4= IOKAnA== 4Ka+4KY= ICAgICAgICAgICAgICAgICAgICAgICA= 0LDRgA== aWtl b29s IHZhcg== YWRl IHJv T04= VGhl c2V0 aXZhdGU= 77yM dW5k xZ8= 4Z4= ICAgICAgICAg IGdy 5pw= w6Nv YXRjaA== dW5n IHN0cg== Y2x1ZA== IG9w RXg= IGludGVy MTE= 56U= IGNvbA== IHBhcnQ= 4KSo aGVy Lmw= IG9uZQ== dmVs aWNr 4KSC YXRlcg== cnI= ZWM= Li4u aXNz IHZvaWQ= 2Kw= 1bg= dG9u IHNw 16g= 4KSV IGFn xb4= 0LDQuw== w6Y= Lm0= IHw= IHRoZXk= 5pc= 0LXRgA== IGNvbnN0 ZXA= aW5hbA== KQoK 2LQ= 0L7Quw== bGVz IGRh cmV0dXJu 0LDRgg== IENo dHQ= ZW5j IG91cg== IDwv 0LXRgg== w7o= IHRoZWly YXlz IHBl 4Kq+4Ko= bWU= b3Zl 5b2p56U= IGNvbXA= IHNlbGY= YW5nZQ== IGFwcA== YW5j MTU= IGRlZg== dXJy IHRpbWU= Q29t IOCu cXVlc3Q= IGFueQ== xIM= YWRv 0LY= dmVu IG9i ZXRo ICM= Zm8= YXo= IG92ZXI= ICE= ZGF0YQ== 4LS/ IGRpZQ== INqp IGFib3V0 ZWY= 4KeN LmM= ZW5jZQ== IGRlbA== bGVk IHN0YXQ= 0Y4= c3M= YWxzZQ== J10= 4Ka/ IM4= Igo= YXZh ZW50cw== 1aU= aXNl Vmlldw== KTsNCg== UkU= 4oCc IHdvcms= cnk= cG9z YW5r dmFs 5YU= b3k= 0LjRgg== aXNo 1bY= IGVy IOs= ZWI= IGZ1bmN0aW9u 2KfZhA== c2g= U1Q= IHdoaWNo cGVj b2ludA== IGVudA== 4Kg= cmVhdA== Ymxl MTY= cXVl IOKAkw== aXg= 4KeN4KY= MzA= 4oCm ZHVjdA== dGVt YXc= ICovCg== LmNvbQ== bGluZQ== 4KuH VGg= 5Lk= dGlvbg== 2LI= YWJlbA== 4LON Q29udA== 0L7RgA== IGFkZA== c3A= 4YOd IiwK ZWx5 aXJzdA== acOz cHVibGlj INiq c2VsZg== MTg= 15A= bWVy dWs= MjU= IGJs VHlwZQ== IHZhbg== aWVk cml0 YWxl z4M= ZXNzYWdl YXJn Iik7Cg== w6o= aWZpYw== aWVsZA== IF8= b2xs 4LGN w7U= MjAw ZXJt Wyc= dWNo ZGQ= z4E= Y2Vzcw== RGF0YQ== xIc= IGJ1 IFN0cmluZw== dm8= Y28= 15w= IGZl YWRh 2KfZhg== LmY= Y3JpcA== 15Q= IHVzZQ== aWFu LnA= IAoK IGVsc2U= UmVz Q2g= dHk= ZWc= 0L3Riw== IHBhcmE= IOC4 IGlk IMOp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= JywK IHg= 5b2p56Wo IGFsc28= IHdobw== IFN5c3RlbQ== ZXNl IMOg IOU= ZXJ2aWNl CWlm IEl0 0Y0= IGRlcg== QVQ= YXNo LnNldA== 0L7QvA== IGhpcw== b3g= KCkK INC90LA= IHNvbWU= dW1iZXI= IGRhdGE= dXRo SUQ= Q29s LlM= Ijo= 1as= IHZlcg== YXRvcg== bmVy cGVjdA== IHByaXZhdGU= 16I= aWdo YW55 IHBvcw== bGVtZW50 YWo= IG51bGw= 4K+N4K4= IFBybw== IGFjYw== 0LXQuw== IHdoZW4= RU4= IOCkuA== IGpl MTQ= INC/0YA= 0L7QtA== IGVuZA== Zmln KCQ= YWl0 a2U= IG90aGVy 2Yk= 0ps= eW4= IG9mZg== X3M= VGV4dA== b2xk Z2Vy dmlldw== IGFm IHllYXI= X20= ZXJzb24= 0L3QuA== YWxz Ij4= xJE= cmVk LmI= cmVhZA== IGJy 4LK/ INC3 LS0tLS0tLS0tLS0tLS0tLQ== dGVybg== IGxpa2U= 4LON4LI= T1I= MDAw X2M= acOzbg== dGVu 4LS/4LQ= bGk= IG5hbWU= IG5lZWQ= b3VyY2U= MTM= QVI= IGtu ZGVm dXJyZW50 cm91cA== Y2VwdGlvbg== xYI= ZGF0ZQ== IGRp 2LU= IMI= MjAy IHJlZw== 2KfYsQ== 4YOd4YM= IGp1c3Q= IFRoaXM= 4KSk IGFjdA== dXRl 0L3Qvg== IG9yZw== IHNlcg== IGhlcg== LkE= X2Y= d28= IGJlZW4= IG1heQ== IGxlcw== INiv IHRydWU= cXVpcmU= z4A= yZk= bGV0 aXRz IG1pbg== dWN0 IGVlbg== 1oI= MTAw IHRoZXJl cGFyYW0= c29u 2K4= INmE X3A= aWN0 YWk= YXg= 4Lc= 7ZU= YXRpbmc= ICw= IFVu 2Iw= IHJlYw== LnQ= eXM= YWRlcg== IHRoZW0= IHJlYWw= IGFj 5a4= Y29udA== IGNoZQ== b3Vu LmQ= YXRlcw== IHBvcg== IGluZA== 4Liy VG8= aWNlcw== aXR0 Q2w= bmV3 IENvbQ== IHBo IGhlbA== CXJldHVybg== IGNvbW0= 44CB 4LC/ 44CA MzI= dXR0b24= TEU= bmluZw== OgoK IGxvcw== 5Lit Iik= dWVz IGNv 2Lc= IOCkuQ== VHI= 5Yg= IHdoYXQ= IGJldA== DQoNCg== b25k IFdl YXJjaA== 0LvQuA== IGFw dHJpYg== IG1ldA== MTc= ID8= ID4= zrc= Ly8vLw== dWY= dXNlcg== dmlk aWJsZQ== eWxl IHZhbHVl z4I= NTA= 4LiZ ZW5ndGg= dmVyeQ== INmB cG9uc2U= b2Y= IGZy aWV0 0L7Qsw== Y2xhc3M= IGxv YXVsdA== YXNr IGhldA== INGD IjsK T2I= IGF2 4LGN4LA= KCku 4KSy 4LY= 4KeH4KY= IGhhZA== IHZhbA== IHNj YWdlcw== IGR1 YW1lcw== YmU= dmFy 4Ka/4KY= 5Ls= SVQ= INeU 0YQ= 5ZA= Y2x1ZGU= IGNvbnM= IMM= IG1lZA== IGRldA== dW1lbnQ= X2w= 0L3QsA== YW5h IHdvdWxk z4U= QUw= cm9sbA== IGZhbHNl IFE= 5aSp5aSp 2b4= IFo= IHR5cGU= b2xl dWxhcg== bWlu MjQ= IGhvdw== 4KS4 44CCCgo= IGRy QU4= ZnVs IGRpZg== dGls bmE= IHdlcmU= 24E= INi5 J3Q= Lmg= IyMjIw== b3BsZQ== IGludG8= IHN1cg== b3dz IFRy YW1w IERl YWly IHsNCg== IGNyZQ== IG1ha2U= cm9s aW5h 0L7Rgg== dGE= INeQ KGY= 1bjWgg== 64s= U0U= 4KuN 25I= IENvbg== 4KWB IHJlc3VsdA== X2I= IHJlbA== X2lk 2KfYqg== IGxvYw== Ij4K aWNz Jyk= IHN1Yg== ZXJyb3I= ZXRob2Q= ICk= emU= IGZs 4KuA IFNl PT09PT09PT0= 4KuN4Ko= YWY= 4KS5 aG8= 5Zw= IGphdmE= b2R5 IOCkrg== bWw= dHM= IGxpc3Q= 55o= aW5z X2Q= d3c= 16o= RW4= 4LC+ 154= 5bk= IHRoYW4= 4oCZdA== 0LXQvA== aXRsZQ== ZW50ZQ== IGZpcnN0 aWNh IGF3 xJk= IGJv Qnk= IOCkqg== U2U= 4oCT UGFy amU= IGltcG9ydA== IHRlbQ== SXRlbQ== 4LWB XQo= INiz dmFsdWU= aW91cw== d29yaw== YXVzZQ== cHJpbnQ= 0LrQsA== bGljaw== dWxl IGJhY2s= ZW5zZQ== IHN0YXJ0 IGVpbg== IG9ubHk= KAo= IFlvdQ== dXJlcw== IGtl b3dlcg== KioK KioqKioqKioqKioqKioqKg== YXJy 5pY= 55qE IGl0cw== cmF3 4Lij IGZpbA== IHN0cmluZw== Y2Vz IGluZm9ybQ== xIU= IGZvcm0= bWVudHM= 0q8= dXJz aXRpZXM= YXllcg== IGxvb2s= IGxldA== IHN0YXRpYw== ZW1iZXI= ZGF5 IGJlc3Q= 4KSu VmFsdWU= bGVy 5aSn IHVuZGVy 4LGB IHRyYW5z ZW5kZXI= IG1vc3Q= IGZpbmQ= IHBlcnNvbg== IGVk dXN0b20= 0LvQsA== XS4= IGhlbHA= b2xvZw== 0LrQuA== c3RyaW5n IFdo IG5n YXRlZw== bGVjdGlvbg== ZGVu b3Ro IHJlbQ== 2KfY zro= IHBlb3BsZQ== ICE9 IEFs 2KM= IGNhcg== 4KWk Y29uc3Q= 4K6/ 4buN 4LS+ bGE= 4LK/4LI= 0LXQtA== xJ8= IEhl IGFzcw== aXJlY3Q= IHdhbnQ= YXJp Oi8v ZXNzaW9u ICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVu 1aHVtg== IEFu 4KWI 0LjRjw== Ym8= PXs= 4K+B Z3JhbQ== LkQ= YnI= ICAgICAgICAgICAgIA== ICAgICAg IGRvbg== IGxvbmc= 0L7QvQ== IQoK IGd1 IHNr ZXJu SW0= d2E= MjI= IGluc3Q= bG9hZA== cm91Z2g= IHVt 570= PwoK aGE= 0Yk= INij ZXRz X0M= IGZpbmFs zrw= NDA= IGFycg== ICYm 15E= zrs= 5pe2 IHJlYWQ= w6s= 16k= 4Lit b3JsZA== dWM= XTsK aGVk LkY= cmVhaw== ZnI= YXR1cw== IGdl 0L7QuQ== IHZl dGluZw== JzsK IHRlc3Q= w6fDo28= Kys= 5Zs= bm8= Ymw= T2JqZWN0 IGV2ZXJ5 IEFy IHNwZWM= w6lz IHNob3VsZA== cG9uZW50 RVM= Lmo= IGtub3c= b29k aWxpdHk= RXhjZXB0aW9u IHNt 16A= IG1vbg== W2k= IGNy IHNoZQ== IEV4 d24= CXB1YmxpYw== IOo= IHdlbGw= dXNo xbw= dXg= INo= IHByZXM= IHNjaA== bXM= 0LTQsA== IHNp eXA= IGRlbg== dHJh aXZlcg== 4LS+4LQ= YWdlcg== INmG 4LK+ IGls IGV4cGVy 06k= IHNvbQ== IOY= Y29s YXRpdmU= INCz d29yZA== cmVn IGhhbmQ= dXJs 44CQ dHJ5 cmFw b25z cmVhbQ== aWx5 aW5lc3M= IG1vZA== 44CR IGRhdA== IHRoZW4= R2V0 77ya eW0= IHRocm91Z2g= KSk7Cg== dXNl Y2Nlc3M= IHBvbA== dXNz IHVzZXI= IGNoYXI= IGludg== YXV0 572R Zm9yZQ== aWR0aA== IG9wdA== 4Kqo 4LC+4LA= Lm4= Zmw= aWNodA== YXRz INGA w70= IHJlcXVpcmU= w6I= IElm VXNlcg== IHNpbQ== dXNpbmc= ZW5kcw== INGH IHJpZ2h0 c2Vydg== ICU= 6Kc= IHBhc3M= a2E= YW1i 4K6/4K4= o+GD KHM= INin2YTZhQ== MjM= w74= IH0sCg== 4YOY4YOh IHN0dWQ= zq8= dWk= 2YrYqQ== c2VydA== IHZlcnk= b3VnaA== w7E= aWZl YWlz cmVm X1M= dm9pZA== IEFz aW9y IHRoZXNl IHdlYg== U3RhdGU= YXNlZA== KToK 4LWB4LQ= IGRlYw== 0LDQvA== IHNvbA== IHByb2R1Y3Q= IOWkqeWkqQ== IGNhc2U= 4Kqw 4LK+4LI= Y29uZA== 4YOU4YOR Q1Q= IikK 6LU= a2V5 IGdvb2Q= ZW5l 2KfZhQ== IG1haw== 4KuL YXJz 55Q= bmk= IGNvcg== IGth IHZpcw== NjA= 1aXV IGJlbA== 4LOB cnJheQ== IHByb2Y= IGR1cg== IGRvd24= IGJ1cw== IHdoZXJl IHR3bw== IHNlZQ== dW5j RGU= wrs= IHNs IHBvc3Q= IGF0dA== cGVydHk= VGltZQ== IHBvdXI= IGF1dA== IGhpZ2g= 0YHRjw== IGFmdGVy cmVt IGV4dA== cGhw Zm9y Y2VudA== Lmc= b3VzZQ== cnU= YWNrYWdl ICAgIAo= 0LDQug== YXR1cmU= aXN0ZXI= w7xy VUw= LmFkZA== W10= IGV2ZW4= YXRpb25hbA== IG5vdw== IFNo YXJh IGFydA== IEFuZA== IGVmZg== b3VibGU= 4LC/4LA= b3Rl aWVuY2U= cm91bmQ= gOC4 IG1lbg== INC90LU= 2YjYsQ== IHVuYQ== aWRlcg== cnJvcg== dWZm aXZlcnM= IGZpbGU= YW5kbw== YWN0aW9u ZXJzaW9u YXJu b2lu LnN0 aW5jbHVkZQ== IHN1cA== IG1hcms= U2V0 aWZ5 YW5l cml0ZQ== dW1u ZWxz 0LjQvQ== IG1hbnk= YXJnZXQ= SW5k IG9z 5Lq6 IGxhcw== INee aHR0 CQkJCQk= IGds bGVn YXR0 cGxheQ== 6L0= IGNhbA== IHdheQ== LlA= X1A= IG11Y2g= LkM= LXM= aHI= Uk8= 15g= Lk0= YXlvdXQ= IGJlYw== IExl IGRlbQ== cHJlc3M= IGhv SUM= IGNvdWxk Lkw= KHQ= 4KS+4KSw YW50cw== aW5lcw== Mjg= IG9t IG91 bGVhc2U= 4KSq 1oDV S2V5 IE5ldw== cmlkZQ== U2VydmljZQ== 7Jc= MjE= 4Kaw 1bjWgtU= dXRpb24= SU9O INis 5og= cm9pZA== INC2 IHdoaWxl Y2Vk emE= REU= PSc= KCg= 4LmI dXRpbA== aXRlbQ== OTk= IHNhaWQ= ZXJh IHVzZWQ= 4KWN4KSw dmVsb3A= IFBs INmF2YY= SGU= amE= b3Jn INec 57o= Li4v ZW1i V2g= b3B5 IHRyeQ== d2FyZA== 5aU= d2g= IGZhbQ== Jyk7Cg== aW5v YWxr dmlz 4Liy4Lg= IG9n IG51bWJlcg== Y3JpcHRpb24= 0L7QsQ== 15M= eWE= RXZlbnQ= Mjc= IG1v 54k= INeR IHNlcnY= z4w= 0L7RgQ== ICoK 5L0= IHllYXJz b2N1bWVudA== 2LPYqg== IGV2ZW50 IGhlcmU= aXRlZA== IHBsYXk= IGNhcw== MjY= aXplZA== w7Q= guCw Y3JpcHQ= Y2k= 0LXRgQ== YW50ZQ== bGFuZA== LWI= YWNpw7Nu aWRhZA== oOGD 4LOG IHByaW50 IC8vLw== YWFy LW0= IFg= 2LY= INmH IEVu IGZpbg== zqw= bG9n SW5mbw== INm+ dWl0 44CR44CQ KXsK IOCkrA== IGtleQ== b3RoZXI= IGxvZw== b3JkZXI= a2Vu KG0= YWxseQ== KCkpOwo= QU0= IGNvbXBsZQ== 4Kao xrA= YW1h Y2hv X1Q= XSw= w6ly a3Q= QVM= 5bw= IE9u Li4uCgo= INmB2Yo= IGRheQ== IGluZm9ybWF0aW9u I2luY2x1ZGU= 5Y0= V2U= INGA0LA= IGl0ZW0= X24= IGRpZmZlcg== dHRw IHBhcw== IGxhc3Q= RVQ= QnV0dG9u dW1t 5Zyo U2g= ZGl0 5pg= YWx0aA== 4Z8= VVI= xZE= 7J20 IHNpbg== IHRhaw== 4Kk= IENs IOCo 0YLQvg== IHByb2dyYW0= b2xsb3c= IHdvcmQ= YWlscw== UGw= 0pM= cm9z IGluY2x1ZA== IHRleHQ= dW50 gqw= c3RydWN0 YmFjaw== 6L8= Jwo= IGN1cnJlbnQ= 2LA= KSkK bXA= IGdyZWF0 6Yc= IEZvcg== IGlucw== INix IGdlbmVy YXJt T24= NjQ= INmK aXF1ZQ== QW4= 0LLQsA== Z2E= IGRvZXM= cm9sbGVy YXR1cg== IGZh IC0t UXU= IHNpZ24= 5Y+R Lnc= cHJl IGJlY2F1c2U= IGhvbWU= IHN1Y2g= TW9kZWw= IGZyZWU= ODA= IGRpZA== QXQ= IM+E KTs= TWFu YW1z 4Lil 0LXQug== Lmlu T3I= RUQ= dG4= IGJlZm9yZQ== RXJyb3I= IDw8 aW5kZXg= aXRhbA== xZs= VVQ= aWRh YW1wbGU= 6K8= aXZlcw== VW4= d2FyZQ== X2lu 2YjZhg== IG51bQ== Mjk= 0LjQvA== WyI= IHByb2Nlc3M= XSwK dXRob3I= 64uk c3Rl KQ0K RmlsZQ== Y29tbQ== IHByb3ZpZA== 57s= cm9w IFBy YWNoZQ== ZWN0b3I= bG9hdA== 0LjQuw== IHlh MDE= SVM= 5pel 4Li1 w6Fz aWRv IG9ubGluZQ== IHZvb3I= T3Zlcg== b2Fk ZmFjZQ== INI= ZmU= UmVxdWVzdA== IHRha2U= QXM= aW9uYWw= TWFw b2g= bWFu IHN0ZQ== Y2hu IEZy KSwK 5Lit5b2p56Wo INep IG93bg== IFJlcw== ZmlsZQ== Z28= IGNoaWxk 4KSX 4oCU ZW51 Q29sb3I= IHZpZXc= QXI= b3Vycw== IGNhcA== IOCkleClhw== IOCkqA== IGRhcw== aW1lcw== 6K4= IOGDmw== IHE= dGQ= Jzo= IGJyZWFr dmVydA== aXRlcg== IGFyZw== Llc= YXJlZA== IHRvcA== Ynk= dWFsbHk= ZXJn QWw= IHNpemU= YXNvbg== YXRpYw== YWlucw== IHNpdA== YWlsYWJsZQ== b2NhdGlvbg== IHNob3c= IGNl Li4uLg== IG1vZGVs IHVzaW5n 0qM= ZW5u aW5p IGRlc2lnbg== 2YrZhg== cmM= aXNt SW5kZXg= INC30LA= IHNhbA== IGNoZWNr X00= IHsKCg== 4YOV IHdvcmxk IOCknA== ZXRlcg== LXQ= 2YjZhA== aWpu IFw= YW1lbnQ= 4KWN4KSv IHdlZWs= 5b8= 4K+B4K4= INGN 16c= bGljYXRpb24= INC7 IHNvbg== IGJvb2s= IGTDqQ== RWxlbWVudA== IGhpbQ== aXRjaA== bGV0ZQ== IHx8 INi0 Rm9ybQ== 0LjQtQ== KHNlbGY= IG1pdA== INC1 Z2h0 KG4= KHA= ZG8= aXZpdHk= KGM= IHRoaW5r 0L7Qs9C+ IGJ1c2luZXNz VGVzdA== IMKr QUQ= IHRvdA== IGFnYWlu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IHN5c3RlbQ== IGNhbGw= eWU= IHByb3Rl aWNv dWE= YWRvcw== IGNlbnQ= IHBh KHRoaXM= 15c= aWg= 5LiA 15XXqg== IHp1 7J4= QUM= cGFja2FnZQ== IHBvaW50 IEJl 15nXnQ== b3R0 INGF IHByb2R1 2Ks= IENvbA== 4Lix IGJlaW5n b3Rv IHJlcA== IG1hdA== aWRlbw== IG1hZGU= aW9z IGVhY2g= b290 IHBvc3M= KCk7Cgo= 5Yo= 0LvRjw== cmlnaHQ= IHJ1bg== IOC5 IHVuZQ== ZXJv 4oCM 6LQ= MzU= Z2Vu LWQ= YXRlcmlhbA== SW50 IGhh IOCkhQ== ZXhwb3J0 IHBsYWNl IOKAmA== aWRlbnQ= IHF1YWw= 0LjRgA== YXBl 4LKw IHBv X25hbWU= a3M= xIE= TGU= IOCkueCliA== b2tlbg== IGNsZQ== IHNvYw== IGZvdW5k 2q8= dHlwZQ== IG9wZW4= 4KWH4KSC IGlzdA== 16Q= IHN1cHBvcnQ= CgoK VGhpcw== IGNyZWF0ZQ== IEdy 4bul aGlw b3Jh IHBhdA== RGF0ZQ== YXRoZXI= 16E= Ly8vLy8vLy8= 6rM= Y29tZQ== 5bA= IFRv JykK IF9f LuKAnQ== X3N0 cG8= 4KeB cmVzdWx0 Q29udGV4dA== 7KA= 4oCN 2YfYpw== IGNvbW8= 0LXQuQ== YWxh ZGE= aW5lZA== 64o= Qm94 0L7Qug== aXN0cg== cWw= b2xlYW4= Y3JlYXRl 0L7Qtg== IHN1cGVy dGVycw== ZW5kZQ== bmVu IGxpbmU= d2Vlbg== IEFsbA== MzM= KCks NDU= aXN0cw== IC4uLg== U2l6ZQ== IGNobw== c29sZQ== dmljZQ== 4KS1 IGt1 IHBhcnRpYw== b3Ju 4Kew LmU= dW5l 6aI= QXBw aWNlbnNl IG5p T2Y= b2NhbA== 0LDQuQ== IG9yZGVy IHNlcnZpY2U= 6rA= KGQ= YWluZXI= zq0= IGRldmVsb3A= bGVjdGVk INit QWRk Q2xhc3M= aXRh aW1lbnQ= 2KfYrw== IEFwcA== eW5j RW0= aW5wdXQ= 4KSm w61h 158= IGNvbnRpbg== LnV0aWw= IC8qKgo= bGljaA== QWxs IG1ldGhvZA== ICk7Cg== aW5kb3c= 2YTZiQ== aXRvcg== LlQ= Il0= IGN1c3RvbQ== 4LWG IE9y 5bo= IHF1ZXN0 IOCmlQ== IHN0YXRl aWdl RmllbGQ= LkI= cGFjZQ== IG5leHQ= cGxveQ== IGxpZmU= IHJlcXVlc3Q= IHRob3Nl ISE= UGF0aA== Y3Rpb25z IGVhcw== IGZvbGxvdw== dHJhbnM= c2VhcmNo 4K6+ aXRpYWw= 55w= aW5kb3dz 4buL IOCkpg== IGNhcmU= IFNv aXJh 2Lo= 0YvQvQ== MzY= IG11 INiu IHZvbA== IHZp bGlzdA== dHJhY3Q= dW1w IGFycmF5 aWNsZQ== QWQ= IGRpZmZlcmVudA== KG5ldw== YWluaW5n IG9wZXI= IOCksA== wq0= Rm9y SUw= IExpc3Q= IHByb3Y= 5oA= VXA= LmxvZw== 4YOj4YM= 4LmJ IGJlZw== PD8= 0LDRgQ== IGV4cGVjdA== cmFwaA== IG1vdg== cm93cw== 7IQ= d2Vy IGRhbnM= IFNjaA== IFRl IG1hcg== IOCktQ== IOCksg== b3Rz IgoK 0L7RgdGC 4LSk IG9yZ2Fu aWFz 4LmA4Lg= IHNhbWU= QVA= IEFk w64= ZGVmaW5l LmFwcA== aXZpbmc= IyMjIyMjIyM= IGNvdW4= IGludGVybg== SU5H bGVzcw== XVs= Ll8= IGxvY2Fs TE8= IGA= Tm9kZQ== IHNpdGU= bmVjdA== 5Yw= dXJh ZnVuY3Rpb24= IHJlY2U= c3RhbmNl IH0pOwo= 4LSo IHByb2JsZQ== bWVu IHN0eWxl IHJlZg== IHJlYWxseQ== aXJk ZWxh 15s= TG9n aWZpZWQ= X19fXw== b21i fSwK 5YY= QXJyYXk= dWls aXNzaW9u zrM= X0Y= IGlr c3Bhbg== 0YDRgw== IOKAlA== 0YLQsA== IHBvcA== CWM= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHdyaXQ= TWVzc2FnZQ== cmlj dHJpYnV0 KGludA== IHNlbQ== OTA= 2ro= Q29tcG9uZW50 IC0+ R3JvdXA= 4LGB4LA= IGlkZQ== aWxp 6YA= aXNoZWQ= YXRv 5rM= 4YOh ICs9 IG1haW4= c2l0ZQ== T00= IEluZA== 4KSv IElz ZXZlcg== bWl0 IHN3 1oE= aW5j UmVzdWx0 64qU d2F5cw== dXJjaA== IOCkhg== TWFuYWdlcg== CQo= IG5ldA== IHBheQ== IMSR 0LjQuA== IHF1aQ== 4Li0 4Kqk IOWkqeWkqeS4reW9qeelqA== 4Kq/ IC8q c2M= IGRlZmF1bHQ= 4LKm NzA= SW1hZ2U= IGF1 4K6w 25A= IGV4cA== 4LiH 4KWC IGNvbW11bg== ICgh ZW5jeQ== T3ZlcnJpZGU= IGVxdQ== bG9jaw== IO0= IG11c3Q= IGRhbg== z4k= ZWxzZQ== cHR5 5Lw= 5bm0 Q29uZmln IHZvbg== IGdhbWU= INC+0YI= IGNvbmY= bmVzcw== IG9iamVjdA== QWN0 w58= 0YHRgtCy 4Kq1 dGVz IGRpcmVjdA== T1Q= KCk7DQo= INeV IGZ1bg== 778= RU5U 4Lih ZXJj dGk= SU0= IGRlcA== aXJt Q29kZQ== aGVjaw== cm9zcw== IGF2YWlsYWJsZQ== IGZhY3Q= 4KaV INmC ODg= IGhhYg== ZnJvbQ== IGFyb3VuZA== 0YLQuA== 4Kak w6Ry RGVz dWNr aWpr LnByaW50 aHRtbA== 57q/ IFNw YWZm Lmlk LnJl aXphdGlvbg== c3RhbmQ= IGN1 VmFs b2Zm 5aSn5Y+R IEJy IHJlc3Q= IHRh ICgp IGJldHdlZW4= IGNvdXI= 4Kqu dmE= Tm90 5LmQ Pg0K w7Zy bm90 IOGDkOGD IOGDkw== IHJldA== ZWU= aXVt dXJv Y3Vs V2l0aA== LWw= 7Kc= IHdlcg== IG9sZA== IHNheQ== aWxlcw== IG5vbg== w6ll SEU= IE1l cGxhdGU= b3Zlcg== IG1haXM= PT09PT09PT09PT09PT09PQ== cG9y ICAgICAgICAgICAgICAgICA= aHR0cA== cG9zaXQ= aWNhbGx5 4KqV b3Nz 15I= b3J0aA== IG1hcmtldA== MzE= QUI= b21lbg== IHRlcm0= IGVycm9y YWdz b2R1bGU= IGNlcnQ= IHRp dmly 5a0= MDU= IHB1 2KfYqA== IGFuZHJvaWQ= VU4= IG11cw== IHN0aWxs IGFuZw== KFN0cmluZw== cGVu IHBsdXM= IGF1Zg== zq4= IHdpdGhvdXQ= 0LDQsg== 4YOg UHI= Y3JpYg== b2JhbA== SGFuZA== IEdldA== bG4= IG1vbnRo 0LjQuQ== IGFr Q29udHJvbGxlcg== IG1hcw== dWJs 0LDRgtGM LnI= IFVT INmD YWFu aXRv Li8= 5YiG X0Q= aWx0ZXI= IGRpc2M= IG9mZmVy IGVycg== cm9u 5ok= Lyo= IGdvaW5n 4KS+4KSo 150= IOI= aXZlbg== QUc= ZW50aWFs IGJvdGg= IGJlbg== cXVlcnk= aWZ0 IOCmrA== dm9s 0LXQsw== 544= bmVjdGlvbg== INGI IOCmuA== YWRpbmc= VUxM U2M= cG9ucw== 0LjRgQ== YW5lbA== YmFy Mzc= b2xkZXI= IHByb2plY3Q= 4LSw ZW5h cmVhdGU= dHJpYnV0ZQ== dGVnZXI= IG1heA== MDQ= bWV0 LWY= Pjwv IE5v YXRlZ29yeQ== IHB1dA== 1oQ= bnk= YXRp YWxp IHBhZ2U= aXBw 4KSw4KWN4KQ= IH0NCg== 4LiB fQ0K 5Lqs ZnR3YXJl IHJlcG9ydA== MzQ= b25leQ== 44O8 bid0 IGJ1aWxk YXZpbmc= zr/PhQ== aW5nbGU= RnI= dW1tYXJ5 IHVtYQ== SXM= IGluY3Jl Z3JvdW5k IGhhcHA= b2xvZ3k= 0L7Qtw== PgoK IExh 4Ka+4Kaw YWRp IGFubg== VVM= 0KE= 5byA dmVk aXR0bGU= IGxvdmU= YW5p 1bjV IGxlZw== 0rM= 5Zu9 b3Vk IGNsaWVudA== IHNlZw== Y29kZQ== IE9i IOCqlQ== 4Kef IOGDoQ== 4Kay MDg= IGNvbWU= d3d3 4bq/ 55s= X3Jl eXBlcw== IHRlcg== dGhpbmc= I2RlZmluZQ== IEJ1dA== dXN0cg== 0JA= IGFscw== 0YPRgA== INC+0LE= 0Yo= IGJh X04= IHN0ZA== aW50ZXI= CQkJCQkJ 4KuB c2c= dGhl bGFy w7I= IGNvbG9y 4bqh 4LiU Ym9vaw== IGZyaQ== YXBp dW1l cHJpdmF0ZQ== IGNvc3Q= YXJkcw== IHNlY29uZA== IGNvbnRlbnQ= IHRvbw== cmlzdA== YmE= IHBhdGg= IOCklw== IFF1 7JeQ b2dsZQ== Lmlz 0LjQtw== UEU= 0LDRgNCw aWth MDk= IGVuZw== Lmxlbmd0aA== IENvbnQ= 0J8= 2YrYsQ== IGZldw== emk= IOCmqg== IHdh IGhpc3Q= IGbDvHI= Y3JlZW4= KTo= YmVu a2k= IEJs 7ZWY ZmVyZW5jZQ== IElt 5ZM= IHBvcnQ= IGFhbg== YW5v 2KfYpg== cmVzZW50 cHJpbmc= 0L7Qu9GM ew0K TGF5b3V0 XQoK IE1hcg== IHLDqQ== IGxpbQ== aW5u IGZ1bGw= Mzg= 5bg= NTU= IGFwcHJv Y29uZmln IHBvZA== aWVm 2KY= IGFjY2Vzcw== IGVmZmVjdA== Tm8= LXA= T0w= IGthbg== IFRoZXk= IGph aWZpY2F0aW9u UGFyYW0= IFBo 4YOQ4YOc Y2xl ZWxk Iiku MDc= 66E= IGNvbXBhbnk= IG1lc3NhZ2U= IOCkpA== 6L2m bGV4 b25h 5pyI IHN0YW5k 4KeL Y2hlbg== YXNzd29yZA== UmVzcG9uc2U= IHNwZQ== 4KSs IGhlYWQ= dGVzdA== yrs= dmVj R3I= IGtv IGZlZWw= IERlcw== dmFsaWQ= bGFiZWw= bHQ= aXBz X0I= IGtvbQ== IElO MTk5 SUc= SXQ= cHg= IHBvdA== 4KqC IHppam4= IGxldmVs b2Np IGRvY3VtZW50 IHRlYW0= IG1pbGw= ICIi bWVk MDY= IGVuYw== cGVydA== 5piv IGJhcw== T3B0 INuB IG1lbQ== aW1h T3V0 bWF4 KGI= IGhlYWx0aA== LnBybw== YWJsZXM= U3RhdHVz NTAw 5p0= 5LiJ aW9uZXM= QmU= IHN1cmU= IGV4cGVyaWVuY2U= IEVs INGB0YI= cGxhY2U= emVu IGludmVzdA== yJs= YWNlcw== VHJhbnM= Z2c= 6Zw= 77+9 Y29udGVudA== IEhvdw== RkY= Mzk= INil Y2hhcg== ZW5kaW5n IGZpZWxk aWRnZXQ= IGxvdA== 7Is= RW50 Y3Vy IE1hbg== z4c= ZmVjdA== IGNh INin2YTYqg== ICkK YWx0 ZXRoaW5n aW5hdGlvbg== IFRoZXJl SW5wdXQ= aXZlZA== INGP INKb b3JpZXM= cGVjaWFs 7J2E IGltcA== IHRoaW5ncw== IG1hZw== 6rg= MDI= aW5pdA== IGly w6lu 4K6+4K4= IHNtYWxs ZWx0 IHRhYmxl bWI= aXNr 4LCo 1aHVrw== IGlzcw== dWZmZXI= IOC2 aWxsZQ== l+S6rA== bGVu 4KSc dGluZ3M= dXJhdGlvbg== INC/0L4= Y2Vy dHJ1ZQ== 4oCL 7Jo= IExpY2Vuc2U= IHdvbg== IGtp 4LSV IHNleA== IG1vbQ== IMO8 IHByb3RlY3Q= U3lzdGVt bGluZw== IHJlc3BvbnNl YW5ndQ== IGFsd2F5cw== UGFnZQ== 56s= IEFtZXI= 4LiV T0Q= 4KSf IGNvbnNpZGVy cm9vbQ== IHByZXNlbnQ= IHR1 SWY= NDQ= 1aXWgA== Lm91dA== VXRpbA== 5oo= INCy0Ys= IOCkruClh+Ckgg== IGNoYW5nZQ== YWN0ZXI= IGFucw== ICAgICAgICAgICAg IHBlcmZvcm0= IOk= IGpvYg== dmVz YXR1cmVz IHJhbmdl INCQ IGR1cmluZw== 6KeG zrQ= IGtlZXA= IHJldmlldw== 4Lia T1M= YXJyYXk= IHByb20= aWdlbg== 5bc= aW1hZ2U= 0LXQu9GM CXRoaXM= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= b2JqZWN0 Ow0KDQo= IFBhcg== 4LCC4LA= 0Z4= b3B0 aWRz IGRheXM= 5b+r IGltcG9ydGFudA== INCf IFNj b3VnaHQ= INii 4LCw NzU= 44Gu IGFmZg== RXF1 0YPQtA== IGxpdHRsZQ== 4bqj IOCqqg== XG4= 77yB 5rg= LlI= SW50ZXI= IHRlY2hu cmw= aXJ0 0LDQtw== 2YbYrw== IGh1bQ== aXk= 0LjQtA== IDo9 IGRvcw== IHRocmVl 7J2Y c3RydQ== 2KfbjA== IHdhdGVy b2k= IEkn 44CCCg== 1rc= Y2hlY2s= Q291bnQ= aWFsb2c= dWxh 1aHVtQ== IGV4cGw= IGlucHV0 IHZh 0YvQuw== IGludGVyZXN0 Jyku IOg= 5LiN VGFibGU= ZWFyY2g= cmV0 IGJldHRlcg== dWlsZA== X2g= IHJvb20= QW5k INWw IHdlYnNpdGU= 56A= TGFiZWw= 4Kas X3I= TmV3 YW1lbnRl IOCkrQ== 0LXQtw== 5Zyo57q/ YW1lc3BhY2U= 5ag= IGVzcw== UmVn LWM= IHRpbA== KGU= cGk= INCh INmI2KfZhA== YW8= YWxlcw== YW5kcw== IGxpbms= 4oCZcmU= IGluY2x1ZGluZw== IGJpZw== IG9s TGlzdGVuZXI= LA0K 4LGL IG11bHQ= IHBvd2Vy b3VyY2Vz IGluZGV4 IEFO IHNjaG9vbA== INCS IGxp RGVm IM+A IGhhcmQ= 4Kau 4YOa LmV4 IEFi 4LSC cmVzaA== ZWxsZQ== Y2h0 Y29yZA== YXJseQ== IGNvZGU= dW1i YXRpdg== aWxlZA== IGNhdGNo 77yJ IHBsYW4= aXNh bW9u d2F5 IHZvdXM= UG9z IGZhbWlseQ== IGRvdWJsZQ== U3Ry IHN1Y2Nlc3M= YXBz 5LmF IGdvdA== b3V0ZQ== Q2xpZW50 6LWb 5L8= IGZhYw== aW1n 5b4= KCkp 4buH IHdpdGhpbg== NDg= CXM= IGRhdGU= ZWRlcg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= Q2xpY2s= dWRl cmF3aW5n IGFjY291bnQ= YW5jZXM= IGV4Yw== ID09PQ== cXVlcw== LCI= 4bq5 dWlsZGVy IHNhbQ== ICgo X2RhdGE= RGlz IHN0cnVjdA== 0JI= QWN0aW9u INGE IHNvbWV0aGluZw== YXJpbw== YWE= IGJpdA== ZW50ZXI= INei ZWRl ICAgICAgICAgIA== dWlk LnRv YWJhc2U= 2KU= 4LWN4LSk b3RhbA== IGJlaA== 1bU= IG5pY2h0 aWJy IGxlZnQ= YWdlbWVudA== YWJpbGl0eQ== ICAgICAgICAK Y2lh IGdyb3Vw X3c= b3JtYWw= 5pe25pe2 4K+I IMOh IG1pZ2h0 aWk= 0YPRgg== WW91 2LHZig== IGVsZW1lbnQ= YWth 6Zk= IGNvbnRyb2w= IHNlcnZpY2Vz IHNwZWNpYWw= Q0g= YW1ld29yaw== 5bmz bXQ= IHByb3ZpZGU= YXN0ZXI= ZXRh 5Y4= yJk= IHJlZA== a28= 0LTRiw== aWRhZGU= 4K6k 4KSo4KWH IG1vdA== b3Jlcw== aWdpbmFs IGRpc3Q= 2r4= 77yI IEF0 IGNvdW50 IOWkp+WPkQ== Z2w= IGJhcg== IHRvdGFs IM66 IGJhc2U= IGNoYW5n IGFub3RoZXI= 5LqJ Q29udGVudA== aXRpb25hbA== b25lcw== NjY= aWRk 7JU= IGltYWdl INmF24w= dmlyb24= IGFyZWE= aXNpb24= aWduZWQ= IFNoZQ== cml0ZXI= 4LKC IHNpbmNl YW5kb20= IEZs YXZvcg== 5pe25pe25b2p aWdodHM= aGVhZA== IOc= U3Vi RGV0 IHZlcnM= IGJvZHk= U1M= eWw= IGdpdmU= IGdlbg== RU0= 4K+N4K6V IGhvdA== KGk= 4LGH RUw= IHRyYXY= ICgk 4LKy YXRpcw== IHdhcg== ZnRlcg== IGV4dGVuZHM= MDM= IHNpY2g= IOGDkg== cmVhZHk= IHDDpQ== IGhhcg== TGluZQ== 5pyJ IHV0aWw= YXJnZQ== IM+D 5Yc= IG7Do28= 0J4= IE15 dmVycw== IGtpbmQ= 2YTYpw== 24zZhg== aWxscw== aWNvbg== Ki8= xLFu 0Jo= 6Zy4 IHNlYXJjaA== IOCquA== aGk= ZGI= 0LzQuA== INin2YTYow== bW8= 1bjWgtW0 LiI= IGFpcg== 1b8= TnVtYmVy IGFzc2VydA== Y29tcA== IHNvY2lhbA== b29nbGU= Lng= IGNvbnRhY3Q= w7k= aWV2ZQ== IHJlY29yZA== enk= Y2hlZA== 0LjRgtGM xJs= LmFwcGVuZA== 66Gc 5paw w6Fu IGVjaG8= IGJybw== 6aKR IHR1cm4= YWNj 4Lii IGVtYWls 0L7Qvw== YXRlbHk= CWI= YWRvcg== b2N1cw== CXByaXZhdGU= bWFw IGdyZQ== IGZvcmU= 5aix IGhyZWY= dXk= Nzc= 2YjYrw== aXJlZA== 5Y+w IGFjdGlvbg== IGJlZA== 5LqJ6Zy4 w7Vlcw== 16Y= IGFibGU= IGJpcg== Y2E= IG5pZXQ= z40= 0LXQvdC40Y8= aW1lcg== 7ZWc 7Io= LnByaW50bG4= b3JhZ2U= 6LWb6L2m am9y 0LjRhw== IGRlc3Q= IERv aWNp IGFuYWw= IHJlcXVpcmVk IGxlc3M= aXTDqQ== IOKApg== IGFsbG93 U2Vy Z3Jlc3M= 2YTZig== YWN0b3J5 2Lg= ZXR0ZQ== Q29sdW1u 5LiL IGFkZHJlc3M= Lkc= 4KSa 5b2p56We IGphdmF4 0YPQuw== IGxvb2tpbmc= IG5ldmVy UGg= 1aHWgA== b28= IHRhcmdldA== Pjw= IG1hdGVyaWFs cG9zdA== dWxlcw== 4Lin IHN1cw== w6w= 2KfYoQ== IGJvb2w= IM6x dXRv 4YOU4YOa NDk= 4YOT 6KE= SVA= 4KS/4KSv IG1pbA== IHBhcmFt 5rQ= X3R5cGU= YWN5 am95 IGRpZw== IERy IHRpdGxl IGFzaw== 66U= 55yL IFdpdGg= IGNvbnRleHQ= YXB0 2YXYpw== c2s= 0J0= ZW5kbw== 0LjQsg== b2Rlcw== Y29udGV4dA== IHZpZGVv 4KWL4KSC bXk= 44GE VUU= 66Y= 44GX aXZlcnNpdHk= YXBlcg== IHBlcnNvbmFs IGNvbmZpZw== c3Vi 4LKo Y2hh YXBo SW5zdGFuY2U= IGdyb3c= IGNvdQ== dmlvdXM= bWFuZA== b3Blbg== 4LWN4LSV 5aix5LmQ Zmlj 5b2p56We5LqJ6Zy4 IOCkiQ== IG1hbA== cmVxdWVzdA== ZW5jZXM= IFZlcg== IGVudHJl 4buR cG9zaXRvcnk= IOC0qg== aXN0YQ== 4YOQ4YOb eWQ= IHNlbnQ= c3VtbWFyeQ== IGluZGl2 4KS+4KSy 6Ik= RW50aXR5 eXI= aWNhbg== YWJsZWQ= aWN5 IGJvb2xlYW4= 4KSh IHByb2Zlc3Npb24= 4YOb ZW50bHk= aW9k 55A= IGJ1eQ== IGRvbQ== RnJvbQ== IG9wdGlvbnM= LOKAnQ== aW1hbA== YWluZWQ= YXB0ZXI= LmRhdGE= IG1lcw== IGNvbnNvbGU= 0YHQug== aXRp YcOnw6Nv IHByb2R1Y3Rz VUk= IFN1 zrHOuQ== UHJvcGVydHk= UE8= Q29udHJvbA== NjU= cGE= bWk= Pwo= ZW5zaW9u CWZvcg== 574= IG1vbmV5 LmRl 0L3QtQ== 7KeA 4Kq+4KqC IGFkdg== IHByaWNl 4Kqy w6l0 Ci8v aXRlcw== LmNyZWF0ZQ== w6pu 6IA= cGVydGllcw== Pj4= YWRhcw== RVg= 5a6Y 0LDQu9GM 2YbYpw== IHZlcnNpb24= 5LmI IGluZGl2aWQ= ZW1iZXJz YW5uZWw= IGluY2x1ZGU= IG3DoXM= ZW5kZWQ= INek Ym9hcmQ= ZXJpbmc= IGF2ZWM= bWVzc2FnZQ== 6KeG6aKR YXNzZXJ0 b3B0aW9u bGluaw== IE5VTEw= bGV2 5pU= IERpcw== IGRldg== 4K+N4K6k 4LWN4LSo IEVuZw== IGlkZW50 Ym94 IGNoaWxkcmVu IGxhdw== IFJlZw== 6rOg IFNldA== IGh0dHA= 0L3Ri9GF LkdldA== KHsK UXVlcnk= IGZyZQ== d2luZw== 4KeH4Kaw YWt0 IHNu c3Rlcg== w7Zu 1avVtg== INCa KHs= bHM= IG5vdg== IHVucw== IGF1cw== U3R5bGU= bWQ= 4Kq+4Kqw Zm9ydA== IG1hdGNo SU8= IE1lZA== IHph 5aWW dW1lcg== IOCqrg== IGJlcw== 2YjYpw== aXRoZXI= KS4KCg== IGZvbGxvd2luZw== 4bql YWdlbg== INC40Lc= IGdvdmVy IG1p 4LiX 5Z0= IOCmhg== IG5vcw== 15Y= 4KS2 IENhcg== ZW50aW9u IFNpZQ== c2VsZWN0 4KeA 4LCy IHBvc2l0aW9u CQkJCQkJCQk= IGluZw== b3Bw IG1hcA== 6Zc= INi52YTZiQ== XCI= IOWM LkRyYXdpbmc= 0LDRiA== IGF3YWl0 IHNob3J0 ZW5hbWU= dW5h 44Oz IOCkleCksA== IHVwZGF0ZQ== INeT IGxhdA== IHZpc2l0 aWNybw== 1aXVrA== 4LK1 15nXmdc= IEludGVybg== IHVpdA== IE5vdA== IG5pbA== IGhhbA== LkZvcm0= w6dh IOCkleClgA== YnV0dG9u IHRvZGF5 IOCkleCliw== l+S6rOi1m+i9pg== IGVpbmU= IHNvYg== b2JpbGU= Ii4= LkFkZA== 4LSv 4KS/4KSV LmNs cmFmdA== IG1hY2g= IGNyZWF0 b3VjaA== cGxpdA== dW5r KHg= 6rI= IEFkZA== YW1vcw== KHN0 ICAK INWn IOye IHNvdQ== INin2YTYuQ== IGRpcmU= 5bE= IGZ1dA== Jywn 0YDQuA== dXBkYXRl 4KeN4Kav Zm9ybWF0 56CB IGJpag== 6rCA bWF6 dXo= CWludA== Y2x1cw== dHJl 5pys YW5ndWFnZQ== 0Y7Rgg== aWN0aW9u ZGk= KFI= 5q0= JHs= MzAw YW5rcw== 7Jw= dXBwb3J0 IG9iag== ZXR1cm4= IENhbg== YW5kZQ== 8J8= cmVjdA== aWRlcw== z4Y= IOyd anNvbg== IGJsb2c= 64uI IOCmjw== ICgK IHdvcmtpbmc= zrg= YXJpbmc= d2Vi ZGVz J3Jl w6hz IG51 IGRvb3I= IGJhc2Vk TUw= IGxlYWQ= b3B5cmlnaHQ= 4LKk IGFwcGU= IGRvbid0 OTU= IGxpaw== ZXRlcnM= eWxlcw== amk= IGNvbWI= w6lt 0L3QvtGB0YI= IG1ha2luZw== IG9jYw== SGFuZGxlcg== IEdlbmVy IHpl b3JlZA== Ym9s Y29ub20= SFQ= NDc= 2YjZhQ== INCc IHBvc3NpYmxl IGZhcg== em8= INiv2LE= INW0 5pQ= IGFjdGl2 44O7 IGt1bg== IG1lZXQ= a3U= Q29sbGVjdGlvbg== aGVs X2xpc3Q= IHNldmVy T1A= IGNvdXJzZQ== IGNhbQ== IGRvbmU= YWJpbA== IHF1YWxpdHk= IElE aXRpdmU= aHR0cHM= 4YOc IGF1Y2g= IQo= IHJlc2VhcmNo KCk7 YXVy KGw= fSw= YWJvcg== IC8+Cg== 4LSf Ij48Lw== IEludA== bWVudGU= Y29wZQ== LlRleHQ= cGF0aA== RWRpdA== IHVy IHlhbmc= U3RyZWFt IGF3YXk= 0YbQuA== cml4 QVRF IGFsbGU= IGF5 LWlu dXRlcw== dGFibGU= anM= w6Ru IG1vbWVudA== IGNlbGw= IGxpZ2h0 IGxhYmVs CQkK IGltcGxl ZGVmYXVsdA== 648= Liw= U09O IHN1bQ== YWJh NDY= IHVuZGVyc3RhbmQ= UG9pbnQ= ZGlz cGx5 CWY= IGRpdg== IGVhc3k= IEVy QXJn bWFz IHZvdA== ZXJlbg== IOW9qeelnuS6iemcuA== LmZpbmQ= IGZvb2Q= IHZhcmk= IHdlbA== YWJseQ== 0ZbQvQ== dWRpbw== IHRpbWVz VXJs IFsK IHBhc3Q= IGZvdXI= dmlyb25tZW50 wqs= Rmw= IG1pbmQ= bGF0aW9u dXJ5 LuKAnQoK YWRlcw== IGFsb25n IGJlZ2lu IOC0lQ== IOCkrw== 0LXRgdGC IHNvdXJjZQ== b2dyYXBo X0w= xYg= 0LDQtA== ZW1haWw= IG9k 4buB b2Jq IHNlZW0= IGVucw== c3RhdGlj IHRocm93 4oCi cmVzcG9uc2U= IGVuam95 dGhlcnM= IE1heQ== 65M= IGl0J3M= IGhvdXNl LnNo IM61 IGFscmVhZHk= 2LHYpw== INiM Vmlz 6riw YWF0 YXJncw== 5LiK 0ZE= aWVudHM= IOCqmw== dW5z IOCkuOClhw== QWI= IFVzZXI= Iiwi aWJpbGl0eQ== IFdoZW4= IGl6 5a8= ZWxv 4YOQ4YOT bmV0 6LS5 INW4 aWNpYWw= IHNvZnR3YXJl INCR IHNpZGU= L2M= IExvZw== IGV4aXN0 5bmz5Y+w IFBvbA== 4oCZdmU= VFI= IGRlYg== YXZpZw== 4KeN4Kaw LldpbmRvd3M= UHJl fTsKCg== IGNvdmVy IHByb3BlcnR5 Z3JvdXA= YXNlcw== IHRlbg== 4LKX IHdoZQ== 5ZOB xaM= aXZv cG9uZW50cw== 0L3Ri9C1 0LXQsg== IMK7 IGdpdmVu cmFs TWVudQ== IGltcHJv IEVt IGRvd25sb2Fk c2lkZQ== U2VsZWN0 aWV0eQ== 44Gn IHdpZHRo w6hyZQ== 5os= IHByb3RlY3RlZA== INCd IGVtcGxveQ== LmNsYXNz Kysp 1aHWgNU= 0L3QvtCz0L4= IGJsb2Nr bGV5 IHByYWN0 IGNhbGxlZA== 4buZ IHRyZQ== IG1lcg== 16LXqA== YXRmb3Jt IGt3 0JQ= KCY= dXJlZA== SVI= 4oCmCgo= dWg= INeb IGFnYWluc3Q= 5YWN 0LrRgw== X1JF IHJlc3VsdHM= 5ZCI 4LWH am8= IENocmlzdA== IEJv bmVz Q2hlY2s= 4LWL 4KWN4KSk IERF IHBlcmZlY3Q= Nzg= cG9ydHM= IHJlZHU= X0g= IOGDoA== 0L3QvtC5 15XXqA== 4bub IGN1cg== cG9zZQ== 5rA= c29s 0YLRiw== 66c= YXNp IM68 IHByaW0= IERhdGU= 4Liq UGVy b2hu IHJh IGxhcmdl JzsKCg== IOCmrg== cG9ydHVu IG5lZWRz 4Ki+ X0lO j+CklQ== 4K6f INeZ IGJlbmVm VG9rZW4= RWw= IG55 IGJp 64I= 0KI= IOCqhg== IGZsb2F0 bmV5 c2Vs Z2Vz IHBhZw== Q0M= INio2Yc= IHRoaW5n IHdoeQ== 1avV IE1pbg== Lk4= IGRpbg== YWlt ICAgICAgICAgICAgICA= aWZm 5o4= IGluZGl2aWR1YWw= dW5jaA== 5ZCX b3R0b20= IHdpbg== LXc= ICAgICAgICAgICAgICAgICAgICAg 4Ka+4Kao IENhbA== IGNlcnRhaW4= UmVhZA== 4K6p IGVzdGU= 4LGA U3RhcnQ= CW0= c2l6ZQ== 5qA= LnNpemU= LAoK IGxvdw== IGNhbXA= IOC5gOC4 IGNvbmM= 4LeK 6Z0= IGVsZWN0 6Imy 4KuN4Kqv 0Jw= IE5l IHJlc3BvbnM= IGludGU= SVY= IFZpZXc= 0L3Rjw== ZWxsaW5n a2Fu IGZ1bmQ= IGxlYXJu IGFsZw== Lnk= IGRpZXM= 4LKV IOCqpA== b255 aW5jaXA= aXplcg== IHZpYQ== 4LmM IHN0YXR1cw== aXNp 0YPRhw== 15XXnw== IGVuZXJn c2w= IHN0dWRlbnRz dWJl bWlzc2lvbg== cG9zaXRpb24= 1ag= IHNvcnQ= ZW1lbnRz b29u aXJv 0LXQvdC40LU= 4buV Z2luZw== Pig= 0LzQsA== w7xu fTsK VXM= IHV0 Lm9yZw== ZWxpams= cHJlc3Npb24= d2hlcmU= Y3k= cGxlcw== IHRob3VnaHQ= IHRyYWQ= IGFtb3VudA== IG5lZw== IHZhbGlk bGVmdA== 5LqG UHJvZHVjdA== IOCqnA== IEJ5 ruCvjQ== aW1v IHNyYw== bW0= ZXRl VU0= ZHI= QnVpbGRlcg== dGVybmFs Z3k= IGhhdA== YXJ0bWVudA== INin2YY= Y292ZXI= 5p4= aWZpZXI= LkZvcm1z aXZhbA== X1Y= 0L7Rhw== IEVzdA== aW11bQ== IFNlcg== Y3Rvcg== LWg= dWlz IGxpdmU= IH0NCg0K 05nRgA== IFRleHQ= z44= IGhhdmluZw== dW1lbnRz IA0K IFRoYXQ= IGluYw== bnVt 4oCZbQ== IG9vaw== KCkpCg== IGVzYw== dGl0bGU= 44CA44CA c2E= TGE= dGltZQ== IHNpdHU= bGlzaA== IGxhbmQ= IHRvb2w= Q0U= a2w= INC00LA= Lmh0bWw= IGRpc3BsYXk= IHNpbmdsZQ== IFN0ZQ== INqv INqp24w= 2YrYrw== IHRhbGs= IG5vZGU= IERpZQ== aWNhdGlvbg== xLA= INC00LvRjw== 0LPQsA== ZWxsYQ== ZW1h 0Zg= IDs= UG9zdA== IOCkquCljeCksA== INWl IHVudGls Y2Vs YWdh YXR0ZXI= bWVz IFdoYXQ= dWVy dWNjZXNz X3Bybw== X2U= dWVs 0LjQug== NTk= QmFy CXZhcg== IGFudA== Njg= YW1lbnRv dmk= 56c= IGljaA== 0YPRgQ== IGxlbg== IOCmqA== IE1vcmU= UmVm NTg= XSk= cmVhY3Q= IGtvbg== dXRz XSk7Cg== IOCqm+Crhw== IENv 0Jg= dW5nZW4= b3Bz Ly8vLy8vLy8vLy8vLy8vLw== 0KA= SUY= YWludA== 4KWB4KQ= IFBlcg== YXJuaW5n ZG93bg== 0YDQsNCy aW9uZQ== b3V0aA== 4LWN4LSw IG1vcg== IFByZQ== IGZ1bmM= IGdvdmVybg== IE5vbmU= INCe IGNvbmQ= IHRyZWF0 IHVybA== IOC0uA== Q29tcA== IGVkdWM= INqG IOCmuQ== dWxhdGlvbg== IHB1Ymw= IFRlc3Q= IGdybw== 4oCY IE9iamVjdA== IEpl IGhlaWdodA== w6Fy Ym9keQ== SHR0cA== LnZhbHVl 4oCe IGN1bHQ= IFVw IGNsZWFu bGVnZQ== NDI= Zm9ybWF0aW9u fQ0KDQo= aW5jZQ== w6fDtWVz IG1pcw== 4Ka4 5py6 7JY= IG9jaA== 2LnYrw== IGxvYWQ= Q2FsbA== INGA0LDQtw== IHB1cmNo 4YOQ4YOV IHNpbXBsZQ== INGB0LI= CgoKCg== IHRvZ2V0 TGluaw== VHJ1ZQ== YW5kYQ== Iik7DQo= b2NrZXQ= xZk= PT4= 4buj IHRvZ2V0aGVy b2tl 4LSu 4oCZbGw= TW9k YXRhbA== TWV0aG9k bGlu IG5pZQ== aXBl b3Vybg== INi1 KHI= IG9uY2U= 67A= IGl0ZW1z IG91dHB1dA== anU= ZmllbGQ= IHNlbGVjdA== IHdhdA== aXR0ZXI= 0LXRhw== 7J2A LnNwcmluZw== ZXRjaA== YWdlZA== IEFzcw== MTk4 4YOQ4YOg4YM= QWN0aXZpdHk= IG1lYW5z 5YWN6LS5 ZGY= QVk= 4LCV IH07Cg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWx5 IG9yaWdpbmFs IOWMl+S6rOi1m+i9pg== IGRpdA== IH0pCg== YXJs b3Jy b29t IG9r RW5k g70= IGNhcmQ= aWx0 IOCqhQ== QU5U IGNpcg== IGFjdHVhbGx5 0YPRjg== 0L3Ri9C5 IG1lYW4= 4YOi a2Vy INij2YY= c2k= cmlq IGJlYXV0 4KS+4KSk 54g= IG9mdGVu IGVpdGhlcg== 5Y+3 1bjWgtWp IG1ha2Vz dXJpbmc= IMO6 IGJhZA== IHRvZA== IHByb2JsZW0= IGNvbXB1dA== SVo= b3VuZHM= aWdh bmFtZXNwYWNl bXVu TnVsbA== INC40L0= IGhvbQ== 77yf 2Ys= 2LHZiA== IHN1cHA= ZWxsZXI= dmlkZXI= 4YOU4YOc IEdvZA== 54mH IGdldHRpbmc= NDAw INCi YW5ub3Q= 4Kqo4KuH iJg= ZXJk IGRhbQ== KGRhdGE= IEFt 0YDRiw== c2NyaXB0 U291cmNl IHZhbHVlcw== IEFycmF5 ZnJhbWV3b3Jr V2hhdA== IGRlYWw= cmFt 05nQsA== 66W8 IGNvbW11bml0eQ== IERhdGE= Lm5hbWU= 0LjRhQ== Q2hhbmdl IGNvbm5lY3Q= IGNyZWQ= 5rU= YXRvcnM= cGFyc2U= IG1hc3M= IHBsZWFzZQ== IHNvYnJl IGFtYg== IGJvbg== bW9k 0LXQsQ== IGxhdGVy IE1vbg== 4LS4 IGdlYg== IHF1aWNr IGFv 5rOo IG5pZ2h0 IHNwZWNpZmlj IHRhbA== cG9pbnQ= INWv T3JkZXI= IGV2ZXI= INGH0YLQvg== Li4vLi4v 7ISc cGFyYW1z VEg= 44GZ IHN0b3J5 RmFjdG9yeQ== IGluaXRpYWw= aXN0ZQ== IOGDk+GDkA== Y3JldA== 0LrQvg== 4YOQ4YOh IGZlYXR1cmVz IGRldGFpbHM= IG5hdHVy INC/0L7QtA== IOCkhw== QmFzZQ== 5paH IHBhcnRpY2lw LnB1c2g= IFlvdXI= 0YHQvw== IGVsZQ== IOyg q5g= INqp25I= IGF1dGhvcg== 5Lqa YWdu IGJlbG93 IOKAng== IHN0b3Jl KSg= IFdlYg== dXJhbA== IGNvbnRpbnVl 0LXQvdGC cGFyZW50 0YPQvw== YWJl IFBhcnQ= xqE= Li4uCg== YW50bw== IOCklA== 2KfYsw== c2VydmljZQ== 1aHVtA== 4Kq4 LnBocA== U3A= IE9S IHNwYWNl IHNldmVyYWw= PFN0cmluZw== IHByb2I= IHJlY29tbQ== IFVuaXZlcnNpdHk= IOC0tQ== eW8= IOGDmA== IGVtcA== IHF1ZXN0aW9u IOCyrg== IG9udA== IGNvdW50cnk= YXRhYmFzZQ== QmFjaw== IGluc3RhbmNl c291cmNl INmE2YQ= aW1hdGU= YW1p Y2hhbmdl cG9uZA== 5Lqn cmVtb3Zl dXNlZA== 4YOd4YOb QWNj c3Rk IGNvb2s= 6YeN 5b+r5LiJ IGZhY2U= IGVub3VnaA== IHNlbmQ= YW5jaA== ICksCg== VXBkYXRl IEds 5qw= IOCwqg== b3ZlZA== 66as IHBob3Q= IHB1cg== KF8= INC/0YDQvg== YWdpbmc= IGFyZ3M= LnN3aW5n ZmE= zrXOuQ== UmVwb3NpdG9yeQ== 4KS/4KSk 05nQvQ== 4Z+S 5a6Y572R X1NU IMOpdA== aWxh 6YE= IHVpbnQ= muGDmA== Y3JpYmU= b3JkaW5n 5pa5 4KSj INQ= IGNsb3M= NDE= 15DWtw== IHByZXNz b3Blcg== Y29sb3I= IOCyuA== IEd1 IGV4YW1wbGU= 0LXQvw== 6Ic= KGo= dXJp IOCl IG1lbWJlcnM= IGFsdA== aWRheQ== IHNheXM= dWludA== Lko= IFRoZXNl NTY= IGJhbA== IGJlcg== IOCmpg== IE9mZg== IHN0dWR5 IGdhcg== IGhvc3Q= ZGF0ZWQ= YWtpbmc= IDw9 IGV4dHJh 0LXRgtGB0Y8= IOGA IGhlYg== IGZpbmFuYw== IGFjaA== IHBhcnRpY3VsYXI= IGJlY29tZQ== 55k= aWRkZW4= c3RpdA== IHNpbmQ= IGNpdHk= L3M= 4K6z IHBsYXllcg== IOCklOCksA== IG1ham9y IG90aGVycw== bWFyaw== IS0t YWN0aXZl LnNwcmluZ2ZyYW1ld29yaw== YXBwaW5n 44G+ IOCuqg== X3NpemU= T25l 0LjRgdGC X2Rl IGdhbWVz IG1lZGlh IHNlbnM= aWxhcg== YmFsbA== IEdl INuM 5pyf IGVzcGVjaWFs IGJ1dHRvbg== 0LjQu9C4 IOCqtQ== IGhvbGQ= IEV1cm8= 2LHbjA== Iikp ID49 INeg aXNpbmc= IHdyaXRl a24= IG5lY2Vzcw== IE1hcms= IOCkmg== aXNvbg== IHlldA== IHByZWM= VEU= TW9kZQ== aWVudG8= IGts bW9kZWw= OTg= aXJp VVA= Z2Vk 576O NTc= IHBvbGl0 4oKs dXN0cnk= X3Rv IGxpYg== INi3 IHN0YXk= IHNhdmU= YXlh ZW50YWw= ICcuLw== aGVpZ2h0 VVJM IGF1dG9t IGxvY2F0aW9u IGZhdm9y IG5ld3M= IHBlcnM= Q3JlYXRl QU1F 1bjWgtWp1bU= CWVsc2U= IE9uZQ== IGZvbnQ= 4LmH IG5nYQ== cHU= IHRlYWNo IHRocm93cw== Z3Q= ZWRk INCU IHNjaGU= ZXN0ZXI= zrnOug== TlM= 4LeS IGhvdXJz IGNvbWVz YW51 IG9kZXI= IGNvbXBsZXQ= aW5kaW5n emVy Z3U= 4LiE IOqw LnB1dA== IOCkquCksA== IFRIRQ== YXR1 bWluaXN0cg== 4LS/4LSy IHNhdg== IFsn IG1pc3M= IHdvbWVu IHNoYXJl T2Zm 5YWo 4YOu IMO+ IHBpZQ== b3Nw IGNvcHk= IGFib3Zl IyMjIyMjIyMjIyMjIyMjIw== IGxlYXN0 zr3OsQ== 4LKz V2lkdGg= IGxhcmc= Lm9u 4KuN4Kqw T1JU w6llcw== LmNvbg== ZWN1dA== IFZhbA== IG5hbQ== aWZ1bA== 4Li4 IGZyaWVuZA== XSkK OTc= INCx0L7Quw== aGFuZA== UEw= ZW5jaWE= T0s= cXVpcmVk 4LC+4LCw IGV0Yw== 67M= aW5hdGU= IHByb3ZpZGVk 5L+h 4LSk4LWN4LSk IGZvY3Vz 5aY= 5oM= IEFjdA== IHJlcHJlc2VudA== VGVt X1I= enQ= IGR1ZQ== YW50ZXM= KFs= 4KS+4KSu WVBF INC/0LXRgA== 4Z+S4Z4= INCg IGFwcGxpY2F0aW9u RVNT QVg= ZnVsbHk= b2xh 44Gv ZW5zaXZl IHJlYXNvbg== ZWxlbg== ZW5kaWY= aXBv IENvbXA= Lm1vZGVs aWdy 0q0= MTUw CQkJCQkJCQ== IHNlYXNvbg== IGJyZQ== LW4= REI= 4KS/4KSy b2du Y2FzdA== 0JE= IHJvdw== 4bud cGxvYWQ= aWNsZXM= IHdhbGs= IHBpY2s= IC4uLgoK LnRleHQ= w6R0 IOC0qA== 5b2x c3RhcnQ= aW5nZW4= IHdhaXQ= IE5vdg== eXQ= IHBvdQ== IHNvbnQ= 5Yy6 IERlYw== YXJnaW4= 7Js= 56uZ 4bk= YW5nZXI= INin2YTYsw== IGFjcm9zcw== 44CN w7Nu INin2YTYrQ== aXJlcw== IOGDqA== 770= VmFsaWQ= IGNvbXBhbg== cHJvZHVjdA== 0Y/Rgg== IEZpbGU= IGNsb3Nl aW5hcnk= IHBlcmlvZA== Q29tbWFuZA== X19fX19fX18= IFVz IGRldmVsb3BtZW50 0YPQvQ== IGF1dG8= LyoqCg== 25U= IGh1 IG1vdmU= ZWZ0 IGZ1dHVyZQ== 4LS1 IHRhbWI= 44Gr IHdyaXRpbmc= c2VydmVy anVzdA== 4LWN4LSf IHdlcmRlbg== 4Liw IEZvcm0= IGFnbw== INmF2Lk= IHRyYWNr 2YXZhA== IGNsaWNr cGVuZA== c3RhdGU= aXN0YW5jZQ== IHRhc2s= IG9mZmVycw== INin2LPYqg== SG93 TW9kdWxl IHNpZQ== 4KuL4Ko= 5ZI= IGRhdGluZw== 4oCdLA== IGRvaW5n IE9G SGVs bW9zdA== wqA= IG9wcG9ydHVu 5YWs Q29uc3Q= 6YeR IGlubg== c3RydWN0aW9u IG9wdGlvbg== IGhhbmRsZQ== 6auY NDM= aWRkbGU= IHByaW5jaXA= d2FyZHM= c3RydWN0b3I= IGdpcg== INeQ15nX YWRpbw== 25Q= IEls 44Go cmVx IGV2 bGVhcg== IOG7jQ== aXBsZQ== cmVh IHBhbA== 1b4= IE91cg== IGJpZW4= YW56 cGFnZQ== 4LGG jIA= QVY= Q2VsbA== 4LGN4LCw w610 4K6y 2oY= R3JpZA== QWRkcmVzcw== 5ZE= PDw= IGNvbW1vbg== IHBhY2s= IHN5bQ== IEZyZWU= IHF1ZXN0aW9ucw== T3B0aW9ucw== RGVmYXVsdA== IH0pOwoK INGW IGNsZWFy aXhlZA== wrc= aWpk aWtp IGFo 0LDQsQ== IGNyZWF0ZWQ= IHpv aWF0ZQ== IG5w IGNvbW1lbnQ= 2Y4= IGluZm8= IHR5cA== dXJ0aGVy bmg= IGRpc2N1c3M= INGB0L8= IG11c2lj 4bqt IHVzZXJz IG1nYQ== INCy0YE= IFN0YXRl INGG X3Y= Lmpz RVJS bGVlcA== IHBpY3Q= aXRlbg== IGh1bWFu IEJhcg== bnVsbA== YWRkaW5n dW5pdA== IHN1YmplY3Q= IG5ldHdvcms= IOC0rg== IHNpZ25pZmlj IFJlYWQ= bGlt 0YDQvg== QXR0cmlidXRl cmVldA== 5YE= bHU= YWhh ZWN1dGU= 0LDRgdGC VGl0bGU= 77s= T1Y= IGRldGVybQ== YWdtZW50 Y291bnQ= INio2Kc= Q2hpbGQ= YmFzZQ== IHN0YXJ0ZWQ= IG1haW50 6rU= IHJlbg== Iik7Cgo= aGFz IHJvbGU= IEFydA== IHR3 IOCmpA== aGVhZGVy ZWRpYQ== IElT SW50ZWdlcg== IG1pbnV0ZXM= X2c= 4LmE 5o8= QVJU IHRlbGU= TXk= 0YPQvA== dmFsdQ== aGVu IGJpbA== ZWxl YXN1cmU= X3NldA== IGNvbXBldA== IHByZWQ= YXV4 Y3VyaXR5 0LXRiA== 4YOQ4YOg w6Vy X0c= LXNl 4KeN4Kak Njc= Y2VudGVy QmxvY2s= 4K6V IGdsb2JhbA== IG5o aW1wbGU= IMO8YmVy IGVjb25vbQ== IMOt 4LWN4LSx IFB1YmxpYw== IOCktg== 2YrZhA== 6KY= IEknbQ== aXR0ZWQ= UEk= xJA= 0YXQvtC0 UGFuZWw= 4LSz IHRlbXA= IHRlbGw= INC/0L7Quw== b21hbg== cm9vdA== fSk7Cg== INeS 4Z62 IOCkueCliw== X1c= bG9vcg== IHRob3VnaA== YXRpZQ== SWNvbg== IGhvcGU= aWdubWVudA== aXRpb25z IHRvdXQ= IGFwcGxpYw== IG1vbnRocw== IGN5 ZXRy IGJveA== TWU= aW5kZXI= aXRhcg== 5ZU= IFBvc3Q= aGFs Um93 TG9hZA== IFRyYW5z IGFzc29jaQ== IGxlbmd0aA== YW1t IGV2ZXJ5dGhpbmc= LnY= cGxp aWRhZGVz IHJlbGF0aW9ucw== YXV0aG9y 44K5 c2hvdw== IEVz KGZ1bmN0aW9u IOCwlQ== cXVhbHM= CSAgIA== IHN0cm9uZw== IGNvbXBsZXRl b21h IERldA== IGJlaQ== 7IKs aWNhcw== b2xv CWNhc2U= IGVzdMOh IGtub3du 5oiQ 7J24 IGdlcw== 6Zs= IG5hY2g= UUw= 4LSy 5rSy IEhvd2V2ZXI= 0LTQuA== IFVuaXRlZA== INep15w= aXNlcw== bGln 5Zyw X3BhdGg= KEM= aGluZw== aWxsYQ== 4KSn RmU= IG9idA== SUI= IOCylQ== IGZyb250 IH0s IM+Ezrc= aXNjaA== IHBvaW50cw== ZW5p Y2hpbGQ= 77u/ ZWRz 2LHYrw== IHRheA== b2U= 1rg= IENvcg== dmluZw== IEFn INeW 55CG IGFzeW5j IGZpbG0= KG5hbWU= IHdoZXRoZXI= 0LDQu9Cw IHBsZQ== aXNjaGU= 2LHYqA== T1c= IHNlcmllcw== dXJn LlNpemU= IGRlZw== 44Gf RkE= IG1hYXI= IFNlZQ== KCl7Cg== IGluZg== IGhlYXJ0 IEludGVy cHJpbnRm IFJF ZXR0 IGRpcg== w6F0 c3k= IHlvdW5n 4Lir YXN5 55So ZmZlY3Q= IGZhbGw= IHJlc3BlY3Q= dHlw YXN0aWM= IHdhdGNo U3RhY2s= aWJyYXJ5 IGJyaW5n 5rOV Q29udGFpbmVy Y29udHJvbA== 4K+N4K6q dXNpbmVzcw== IOCquQ== 15XXnA== VGhlcmU= 5oCO ICovCgo= c20= IGRi 7Iuc aXZh 0Zc= 2YfZhQ== IFN0cg== dXJ0 YXNh 4LSj 1aHVvw== IENsYXNz UG9zaXRpb24= 7Iqk cGxpZWQ= 7ZW0 ZW50ZXM= ZnVuYw== IGRhcg== 7IM= IGNob29zZQ== Q0w= IGluc3RhbGw= IGV1 IGhhcHBlbg== 1bjWgtW2 IGZhc3Q= 44OI Lg0K IGZyaWVuZHM= 4bqv IHN0b3A= IGludm9s 5q8= dW1h 66A= ZXZlbnQ= IOClpA== 4Kqq dXJhbmNl w6lj RXF1YWw= 4bun IGhpc3Rvcnk= 4bux U2Vydg== UGFydA== eWVhcg== IGhvcg== VE8= INOp IENpdHk= VXRpbHM= 4LOH 6aE= zrnOsQ== 4Kaq RW1wdHk= IHNvbWVvbmU= IEdlbmVyYWw= MTk3 4LKh 4buD eW5hbQ== Og0K IHdpZQ== IGpzb24= TnVt IHF1ZXJ5 5peg 0L7QstCw0L0= dWdpbg== aWVudGU= IERlcA== 6II= QVRJT04= 44Gm L20= JSU= IHBob25l T0RF IHBldA== YW5nZWQ= YWNlYm9vaw== 55S1 YXNpbmc= bGVkZ2U= QnVmZmVy YXV0aA== X2V4 dWZhY3Q= INiy IGFuaW0= 5Yk= 6L4= 4Ka8 OiI= IGluZmw= IHBvcHVsYXI= IHdpbmRvdw== IGluZHVzdHJ5 IGJ0bg== SGVhZGVy IjsKCg== 5rI= Q2hhcg== 4LON4LKw 4LWN4LSv YXRyaXg= IGFnZQ== 57I= IHVuaXF1ZQ== IGVudGVy dXN0b21lcg== IG1pbGxpb24= INGC0LDQug== b2NvbA== IGto 4KSV4KWL Ly8KLy8= 4LGH4LA= b21icmU= KCksCg== c29mdA== Njk= 4KS/4KSo aXNlZA== xKc= 4Kaf YWRtaW4= IEFtZXJpY2Fu 2KI= YW50YQ== IGFkZGVk IGZpdA== dW5u dmVyYWdl 0LXRgNCw dXRpb25z IHZvcg== IEFuZw== IHN0cmF0ZWc= INY= 2YrYpw== 6KeC MjU2 a3k= LmFubm90 RGlhbG9n 44Gq aGV0 IHNpbA== IGFydGljbGU= YXNzZQ== aW5mbw== IENy 0LPQvg== aXBwaW5n dW5kbGU= IHdpcg== INC80L7Qtg== ZWdpbg== IOCwtQ== INCY 4KSy4KWH IEdvb2dsZQ== IGNvbGxlY3Rpb24= IENPTg== 5Zu+ Y3VycmVudA== b3B0aW9ucw== IG90 IOuw U28= IHVr w7Ny IMOn ZW50aXR5 dXBlcg== 4Lax cGFydA== dHRwcw== SGVpZ2h0 bG9jYWw= YXRlbg== 5bCP IOCulQ== RHI= cHk= IHZpcnQ= ZW1l INGB0Ls= 64+E eXNpcw== dWVk Jyc= IGNhbWU= 5Z2A PFQ= xKs= 7Jg= IOCmhQ== IGlo b3V0ZXI= IHlu IGZpZw== 4LK/4LKm Y2Fs IGV4cGVyaWVu INen aWVydA== IGV4YW0= IHBoeXM= dWo= 2KfZgQ== IGF1eA== 4buNbg== b3Rh ZXN0ZQ== IEZl IGNoYXJhY3Rlcg== IGFkZGl0aW9u IOyV T1VU w4k= INC/0YDQuA== aXZlbHk= IG5lYXI= IGpvaW4= c3RyYWN0 1bQ= aWFt YW5kaWQ= IHRpbQ== IE9m IGVudmlyb25tZW50 cGF0Y2g= IMO2 aWdlcg== KCkKCg== Rm9ybWF0 cm91cHM= LnNl PGRpdg== aWxz IHByZXZpb3Vz 0YvQvA== IHdvcmtz 55Sf 5ZKM IGhvbg== IHRyYWI= IGNvbnNl IG92ZXJyaWRl 5pyA IHZhcmlvdXM= 4KS+4KSC IHByb3A= 4YOY4YOX aXZlcnk= UFM= UGxheWVy IGRldmljZQ== IHJlbmRlcg== IHdy Z24= YWlseQ== Q29ubmVjdGlvbg== 546w Qmw= Q0s= YWNpb25lcw== ZGl0aW9ucw== YWNoZWQ= 1b0= dmFz IGhp aWRlbg== ZXR3b3Jr IG5k 4bqn IOCmleCmsA== 2KjYsQ== IGh0dHBz cm9kdQ== 5Liq yZly IFdvcmxk IGFjY2VwdA== 5Lul 4LS/4LSV R2VuZXI= VGFzaw== IEpvaG4= IHJlZ2lzdGVy IGV4cGVjdGVk 4LS/4LSv b29y X2ZpbGU= IFN1Yg== UmVzb3VyY2U= cGhvbmU= IHByb2Zlc3Npb25hbA== YWtv INW2 66k= IHRlcm1z ZXNzYWdlcw== 4KuH4Ko= RmlsdGVy IOCwuA== IOCutQ== 7J6Q bG9vZA== LnVzZXI= SVpF INio2KfZhA== IFJlZA== dWxv IGVuZXJneQ== 4YOX YWxk IOCkleCkvg== V2hlbg== 7Ja0 IGJsYWNr IHBlcm0= aXR1ZGU= 4LSx cHRpb24= aWRvcw== IGVw IGxpbWl0 ZW5kYQ== IFNt LlY= CWQ= cm95 e3s= IG5hYXI= U2VhcmNo Z2Fu dXNlcw== 0LTQtQ== 2KrYsQ== IHBhcmVudA== IHdlbnQ= 4LK+4LKw IHN0ZXA= IE5ld3M= IGdlbmVyYWw= d25lcg== 4Kam 4KSk4KS+ IGN1c3RvbWVy 4LWB4LSC Ly8v 4KS8 IGHDsA== XFw= IGNoYWxs RW5n bGli TG9jYXRpb24= UHJvdmlkZXI= IGNvbHVtbg== IENlbnQ= 5rE= S0U= cmVs IGNvbXBhbmllcw== 56w= KTsNCg0K IHByb3ZpZGVz IHR5cGVz aW5lcg== IGZvcm1hdA== amV0 SUk= IHN1Z2c= d2lkdGg= 5Lya IHNlcnZlcg== IGVuZ2luZQ== c3Y= 15nXqA== IGRhc3M= IHBlbg== IHNlbA== Z2xl IEF1Zw== 1aHVvQ== IG1lbWJlcg== IGN1c3RvbWVycw== IFdlc3Q= IGNvbnRy YWNpdHk= 4YOd4YOR IGVr 5omL YXR0cg== IOCqqA== Y2xpZW50 bGlnaHQ= ZWxp IGRpZmZpYw== IFBh IE91dA== dWRp 564= IF0= VG9w IGVhcmx5 IFBsZWFzZQ== IHdlaWdodA== dHJpYnV0ZWQ= IGRpbQ== IGFuc3dlcg== ZWxsbw== IOC0hQ== 44CM IGlkZWE= IHRlcnI= IGhpZXI= IGdvdmVybm1lbnQ= IEFwcg== CXA= IHdob2xl c3RhdHVz RG93bg== dW5kbw== IHRvb2s= aWxlcg== I2lm INC60L7Rgg== IERvbg== YWJz 5YA= ZW52 0pPQsNC9 IENvcHlyaWdodA== 4Ki+4Kg= eHk= IG5vcm1hbA== IGluZGlj 4KWN4KSf cGxhYw== I2VuZGlm IFNvbWU= ICop IHJlYWRpbmc= IGlzc3Vlcw== 4KSW IHBhc3N3b3Jk cmllZA== J2xs IOCyqA== IGN1dA== 0pk= 4Kq5 5Lu2 IGFwcGx5 bnM= KGNvbnN0 5oCO5LmI IHJlY2VpdmVk IGV4cHJlc3M= qOGDmA== KE0= YWRkcmVzcw== 4Kq+4Kqo MTIw IGJlYXV0aWZ1bA== IHN1Z2dlc3Q= aW5lbg== IGNvbGw= b3J0ZQ== b3JpYQ== 0LDRhQ== YWtlcg== dmlld3M= IG1lbA== IEVk IG5lZWRlZA== ICsK Jy4= dHJpYnV0ZXM= 4KSo4KS+ INio2LE= IGV2ZW50cw== VHlwZXM= IFtd 0YvRgA== IF0sCg== cXVhbA== b3V0cHV0 2YXZhg== KCktPg== b21haW4= IGZp RGVzY3JpcHRpb24= IEhvbWU= IGFueXRoaW5n 15XXoA== 4YC5 IOGDoeGDkOGD 6L29 Li4uLi4uLi4= MjU1 aWNpcA== IGNvcnJlY3Q= INCj VEVS 4KSt IG9uZGVy 5a62 IHRyYWluaW5n IOC4qg== VGFn 4LWA IFvigKY= IOCurg== IHN5 4YE= IENyZQ== IHN3aXRjaA== SVRZ dW1z IHJlZ2FyZA== bGV2ZWw= dHR5 ZmZlcg== IHRha2luZw== IGRlbGV0ZQ== 6aY= IGNlbnRlcg== IGdp 0YvRhQ== IFBl IGRyYXc= IFlvcms= IG5vdXM= IHNlZW4= IEFORA== IGludGVybmV0 67Y= KFM= X3N0cg== 5aSa IFJlYWN0 4Kqv IFRW Q2FzZQ== IHNjcmVlbg== LU0= 5biC 0LbQtQ== ZW1vcw== 1bbVpdaA YWNodA== cm93c2Vy RnJhbWU= cnQ= IHBlcmZvcm1hbmNl 5Lqa5rSy IGFtb25n bm93 aWVyZW4= INin2LM= 1KU= YW5jZWQ= RGVj aXN0aWM= IENoZWNr 5Li6 IOCwrg== IHNpbmc= IGxhbmc= IHdvbmRlcg== IEp1c3Q= 4K61 KGZhbHNl IHByaW9y 6Zg= aXBtZW50 INC60LDQug== IHRhZw== cmllbmQ= IHNlc3Npb24= 5ZCN IGludGVyZmFjZQ== SUxF ICovDQo= aWJpbA== YnM= YmxvY2s= NTE= IGltcGFjdA== IHd3dw== IHJlbW92ZQ== aWdv X3VybA== YW5uZXI= xJM= 5L2c ICoq dW50aW1l SXRlbXM= bXNn 24zYrw== 0LjQvdC4 IGF1dGg= IG5hdHVyYWw= Z2k= Lmlv IGthbm4= IHJhdGU= 5Z8= REE= IHByaXY= Lkg= 2bk= IHJhcA== SVNU 4YOg4YM= YXZlbg== 4YOU4YOh 5pk= 4LSq CXQ= b3VudGVy IGxvc3M= IEV1cm9wZQ== 4buf T3Blcg== Ym9y KGE= IMOo dGhlbg== 4LON4LKy QW0= b2o= 15nXqg== IEFjYw== IHZvdHJl 4YC6 IOGDlw== IGJ1aWxkaW5n NTI= IGNhbm5vdA== cmFz IGZlYXR1cmU= IGludGVncg== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= INCx0Ys= IGFjdHVhbA== IGZpbGVz 5bqG 66w= KS4K 4LCC aXNzaW9ucw== YWR1 IOCkj+CklQ== LmxhYmVs aGw= IHJlbGF0aW9uc2hpcA== aWNvcw== 4K6v 4KuB4KqC 5LmF5LmF 6IO9 YXN0YQ== 4Li5 4KS/4KSP T3V0cHV0 IEFmdGVy IHNlYw== Y2hlbWE= aW1lbnRv VUxU xYQ= YWRlbQ== IFJldHVybg== z4TOsQ== 4YOQ4YOa LXN0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IG9wcA== 4KS54KWA 650= IOCqsA== IGluaXQ= aG9zdA== 4Lib IOCkqOClhw== zrI= d2l0aA== KHZhbHVl YWdv LXI= IHRybw== 4KWkCgo= KHRydWU= 44Kk IHRlY2hub2xvZ3k= IGJyYW5k a2lu 4oCdCgo= cGM= IOqy 0KM= 4Kqj IGNvbW1hbmQ= VUc= aWRlZA== 2YTZhQ== VGU= IHZvYw== IGV4YWN0 IGNvbWZvcnQ= 1a8= IGJhY2tncm91bmQ= b2Jlcg== TVM= ZWRpdA== IHBsYXRmb3Jt UmVs IGdyYW5k ZWxsZW4= IGltcGxlbWVudA== aGVldA== IHdvcmRlbg== IHBlcmNlbnQ= YWxsZQ== aXplcw== IiI= IGhvdGVs 1aHVvg== IOCkueCliOCkgg== IGhhbGY= Q2FyZA== IHNpZw== Ii8= 4LWN4LSa w61z IM66zrHOuQ== a29t w6lk IGV4Y2VwdA== IHNlbg== IHNlbGVjdGVk IEhvdA== QXV0aA== IHBhbg== 5Ye6 IHdvcmRz IGNvbXBvbmVudA== IHJpZ2h0cw== IHJlc29s IFByZXM= aXppbmc= b2Rv 0LvQsNGA 0LjRiA== IEV2ZW50 INGB0L4= VmVy INin2LI= IHBp IGxpdmluZw== 4Lij4Li1 IOCwhQ== YWNpb24= IGNvbmRpdGlvbnM= IHRyYXZlbA== IG1hbmFnZW1lbnQ= IFBhcms= 5L4= 54ix IOCkpQ== 0LvQtQ== 0YDQtdC0 UE9TVA== IHNldQ== 54mI dmlzaW9u QnI= IGJlbGlldmU= INC60L7QvA== X3RpbWU= 6KeC55yL IHNpdGVz IGZvb3Q= LmFzc2VydA== 0LrRgg== INmF24zaug== IFRydWU= IFNU INC/0YDQtdC0 cnM= 57K+ IEVuZA== INin2YTYrA== IGxhbmd1YWdl 5Luj ZXJzaGlw IHJlY2VpdmU= Uk9N U2VydmVy IGNsYWlt IGRvZw== T3Blbg== V2luZG93 RG8= cGxheWVy IHBvdGVudGlhbA== IGZpcmU= ICAgICAgICAgICAgICAgICAgICAgICAgIA== IEdyZQ== 0YvQtQ== IHN0YWZm ZGly IG5vZw== 2YLYrw== dGhvdWdo IHdoaXRl IHNpbXBseQ== IOCklg== 15o= ICR7 U3RhdA== IHZlaA== IGZpdmU= ZnM= 0YPQsQ== c2VjdGlvbg== 4Liy4Lij dHJpZXM= 4bmj w7Fv IGVzdGE= YXJpYQ== fX0= 64uI64uk 15XXkA== aXNtbw== VGhyZWFk ZW50YQ== aW5uZXI= ZWZvcmU= IGlsbA== LXRv Z2VzdA== aWdpbg== IGthcg== IOGDmQ== dHJhbnNsYXRpb24= IFNlcnZpY2U= ZXR5 RVJU IGRlc2NyaXB0aW9u IOCqleCqsA== YWlycw== TWF4 dW5p IE9jdA== b3Bo dGV4 IFBvcnQ= IG11dA== 0LDQsw== ZXN0YQ== IGVudGlyZQ== IGhvbA== b3Jp 4K+N4K6f ICJc TGV2ZWw= MTk2 4KS+4KSv Yml0 IGRybw== IC4KCg== dXJzb3I= IHRvZG8= IGNhc2lubw== IGp1 IOCupA== IGV2ZXJ5b25l 4Li3 IEhlcg== YWxv IOCmnA== IFN3 24zaug== cHRlbWJlcg== aXNv X2dldA== 2KjZig== IGNvbnY= IERlZg== IEFw IGJ1ZA== YWxscw== IG5vdQ== IGRpZmZpY3VsdA== IFNF 0YPQtg== IGZ1cnRoZXI= b21ldA== IHN0b2Nr 0JU= IOydtA== IE5vdw== 6KGM IM60 aXphcg== INKv 6YeN5bqG ZmluZA== IGdlcg== IHdpcmQ= aWNyb3NvZnQ= LWc= 4Lix4LiZ IFN0dWQ= 4LK4 TGVuZ3Ro IGRlemU= ICdA 7Jy8 IGRlY2w= w6Fs aXN0cnk= 4YC4 5Y+v INGC0LA= 5oi3 IH4= IG5hcw== Q3VycmVudA== IHJvb3Q= r+CmvA== IGdhbQ== Y2xpY2s= Qm8= QUdF 0JM= X0U= IENyZWF0ZQ== IFNjaG9vbA== Y29taW5n IGVtYg== KGlk IHNhZg== aWd0 IHZpcg== 0LXQvdGM ZWxsZW50 aGFt bGVt IEhpZ2g= UGFyYW1z IFpl dXc= IHRz IHRva2Vu aXR0aW5n YXN0ZQ== 1aHVr9Wh1bY= QUJMRQ== 1aXWgNU= IG9yZA== aXN0b3J5 IFNhbg== IEludGVnZXI= 15nXoA== 4Kw= INK7 IFNvbA== J2VzdA== KCcv 4K6/4K6y IE11cw== LCc= IE1h RW1haWw= IGFkZGl0aW9uYWw= REY= IEFpcg== IGlzc3Vl R2FtZQ== aWVuZQ== IGNoYW5nZXM= 2pM= LmFubm90YXRpb24= 44GM V2Vi w6ln LiIKCg== aWpl xLFy IikpOwo= OwoKLw== QWRhcHRlcg== X0lE b2Rlcg== t7g= X0RF YXJlbg== PigpOwo= 4LSo4LWN4LSo IGhhbg== aW1t 0L3QsNGP IHBhcGVy 4KS/4KS4 IGNlbGU= 0YbQuNC4 4KeH4Kao 5oQ= U1A= Kgo= 0LvQtdC9 44OD 05nRgg== L2Q= 6528 IGluY2x1ZGVz Y2hlcg== IGdh c2Vl c2Vt 2YTZgw== 5o+Q d2VldA== LmFw RVJT YW5uaW5n IHlvdXJzZWxm 44KT IHN1YQ== 0YPRiA== IFBhdA== b2Zmc2V0 TG8= 6K6h 2YjZgg== bGFzdA== ODAw IG1hcmtldGluZw== IGZvcndhcmQ= IFRpbWU= Lm5leHQ= IGZpbHRlcg== cGc= IG1pcg== INeo ZW5zZXM= 5ow= LnN0YXRl IHRha2Vu IGNvbnRyYWN0 ICIv IHRyeWluZw== aWRnZQ== SnNvbg== IGNvbm5lY3Rpb24= 0YDQsNGC IHRlY2g= IGJhYg== IHNlcw== aWdoZXI= IGNyaXQ= 4LS/4LSo YWN0aW9ucw== TWlu IGJpbGw= b3NlZA== IOCqrA== IHJlZmVy IGF6 NjAw bG9zZQ== bGlr UmVjb3Jk c3Rlbg== IGFyZWFz X2tleQ== IGFjdGl2ZQ== IGhvd2V2ZXI= 5p2l VW5pdA== w7hy w6RuZA== IGbDtnI= 2K3Yrw== NTQ= X3ZhbHVl IMWh IOCkmw== IFN0YXRlcw== Ymk= RXF1YWxz b2ludGVy IGluZGU= Lk5hbWU= IE5hdGlvbmFs X2luZm8= 0YnQtQ== UGFzc3dvcmQ= INi52YY= 6ZI= 5aWz 4KS+4KS4 ZGV2 IHF1aXRl 5YWD IHJlc2Vydg== IH07Cgo= IMSN IGVuc3VyZQ== QU5E IFNlcnY= IHN0dWRlbnQ= IGJvcmRlcg== 4pY= eWVz INeX LndyaXRl IG1vZGU= 5ri4 OTY= 572R56uZ 0YvQuQ== IHNpbWlsYXI= IGluc2lkZQ== w6p0cmU= 0L3Rlg== IGVpbmVu Y2luZw== Ij48 w6ls 15XXkw== IHNvb24= Q0E= IGRhbA== KCIj IHRvbQ== IHdvcg== IOWkp+WPkeW/q+S4iQ== IGFsbW9zdA== IHJ1bm5pbmc= IENvdW50 IGZpbmFuY2lhbA== IHNlcGFy 4YOY4YOc wrA= IFRI fSkK IGJvYXJk bGFt NTM= INin2Yg= IFNvdXRo KCcj Z2Fy cGVjdGVk IHBsYW50 0LXQtg== IGRvYw== IGF4 YXZlcw== IG1vZGVybg== 56g= 4YOU4YOg dWRv ICIs IFwK IEVudA== RW50cnk= QXBwbGljYXRpb24= ODc= IOGDlA== LnBuZw== IGN1cnJlbnRseQ== IENvbG9y IFdvcms= dWxp INuB25I= INC60L7RgtC+0YA= ZW5kYXI= 56Q= X0E= Y2Fy IGZhbg== ID4+ IHdhYXI= b3o= IFdpbGw= IHN2 IGVyYQ== 4oCZZXN0 5pI= IHByb2JsZW1z Q1RJT04= IHRhYg== b3BwaW5n 2LDYpw== YW5nYQ== 654= o7w= 5LiH 4Z624Z4= IOCyqg== IEV4Y2VwdGlvbg== IGZsZXg= 4YCs IDwhLS0= IHN0cmVhbQ== IGZ1bA== ZW1wdHk= 7Zk= 57E= LkRhdGE= YWtlcw== IOun aGVt 2KfZhw== Ym9u IG51cg== KCIv 4KS/4KSv4KS+ dmVzdA== IHByZW0= IGNyZWRpdA== IMW+ IG11aXQ= dHg= fT4K 5Y6/ IGplZA== RVJF IGRlZA== LnZpZXc= w6Fj UmVt 0LDQvdC0 IGRlc2lnbmVk IG9mZmljZQ== aGli z4TOvw== IE5h dWRh IFJlbQ== 5ps= RnVuY3Rpb24= YmFu IHRlbXBsYXRl aWdnZXI= Y29udGFpbmVy aWZp IGxhdGVzdA== IEJlc3Q= cGFyZQ== YWRpdXM= 4Lit4LiH YWZl Qm9vaw== IFVJ aXRpbmc= YWhy V29yaw== dG1s IE9ubGluZQ== MjUw 6Ieq 4YOQ4YOq IHRoaXJk 54I= aHU= 4KWN4KS1 aXRlbXM= cGVlZA== IGZhbWls IGluc3A= IGJhbms= ZXY= 7J28 IHRvZG9z IGFxdQ== IGZlbQ== IHNhYg== Y2Fu 5LiL6L29 IGxvd2Vy KHY= IHNpZ25pZmljYW50 c2VsdmVz b3Nh SW5pdA== b3R5cGU= 6IE= IG5vdGhpbmc= 2ZE= U2Vzc2lvbg== IGVmZm9ydA== 4KaX 4K+H 1aXVtg== 5Yiw IEhldA== IHRha2Vz TGFzdA== IE5T IEJvb2s= 4KmA IHJlZ3VsYXI= IGZpbGw= cmFwcGVy IGhlZWZ0 IGNvbXBy IGJpbg== IG1pZA== IGxpa2VseQ== Pz8= a2luZw== 4Kqu4Kq+4KqC IGZyYQ== w6puY2lh UGFyYW1ldGVy IHRvbGQ= LVM= aXNzZQ== IHRvdXI= IHVzdWFsbHk= 5byA5aWW 0LfRiw== IOyX cXVlbmNl Kys7Cg== IHJlYWR5 Y29yZQ== IGhhYw== IGVzcGVjaWFsbHk= IG1zZw== IGdldw== 54Q= IHdheXM= Y3J5 IEFj IOGe b2No 0LjRgtC1 0LDSmw== cG0= dXY= aXNhdGlvbg== Zmlu aWNpZW50 44KL IG9yZ2FuaXo= ZWxlcg== QXJncw== IGRlbGl2ZXI= Lm5ldA== IGli IFR5cGU= 560= bm9kZQ== IEZhY2Vib29r IOCwmg== YmVycw== Zmls dXRh QUxM IHJlc3RhdXI= IHJlY29tbWVuZA== KFQ= IG1vZGVscw== QXY= IOyeiA== 2LnYqQ== IEFudA== Q29sbGVjdGlvbnM= z4HOvw== IEdhbWU= 15XXkQ== IHN0YW5kYXJk YWRhdGE= INin2YTYtA== Q1I= IHJlcXU= IExlcw== cmVnaXN0ZXI= IHJpc2s= d2hpbGU= INeU154= aXRodWI= 4LON4LKk YXdh ICIiIgo= IHByb2JhYmx5 IHBhcmFtcw== cGhh ICcv IHJldmlld3M= 7Yo= 0rs= aW1hZ2Vz 0LXQutGC IGvDtm4= ICAgICAgICAgICAgCg== IG1hbnVmYWN0 aXNjaGVu KCE= 44Or IGFncmU= X3g= 0LHQvtGC 0L3Ri9C8 IHRhcg== IGRpZ2l0YWw= INin2YTZgQ== IGNvbmRpdGlvbg== ZWZpbmVk IFNvYw== YXBh IGluY3JlYXNl IGFjY29yZGluZw== CVN0cmluZw== bsOt SUE= aWRpbmc= Ki8K INKz IGVudHI= 44CK 5L2T IGNhdXNl 4Kq+4Kqu IFR3 SW50ZXJmYWNl IEluYw== 2YTZhw== UGhvbmU= 4KS+4KS5 INCw0Ls= 15XXog== YXRhcw== IMOl YXJ0aA== TW9u 5YiG5b2p dHJpYnV0aW9u YW1pbHk= KHBybw== dmVyc2U= IHZleg== IHR1dA== VmVyc2lvbg== IHBsYWM= YXZpZ2F0aW9u IERlbA== IERheQ== IOCuhQ== IHNlY3Rpb24= IGhpdA== 0LjRgtC10LvRjA== Y3R4 IGxvdg== bW9z 4LON4LKv ICgi IEhhbmQ= IGZhaWw= QXBp IOyL RlQ= 5Li7 IE5PVA== IHNvbmc= IHRyYW5zZm9ybQ== KGdldA== bWJseQ== T2Jq 4LeP X3Nl IGtub3dsZWRnZQ== aW55 CWJyZWFr Rmlyc3Q= 44GL YWxhcg== b3Vyc2U= ZW5nZQ== YWtp w7Fvcw== cmVzdA== 5pWw INC00L4= 5YaM INC60L7QvQ== IGFwcHJvYWNo YW5nbGU= IG1vYmlsZQ== IHByb2R1Y3Rpb24= INi6 IGJhZw== IjsNCg== X3VzZXI= 6YeN5bqG5pe25pe25b2p b2Rpbmc= IGxpZQ== IGhhcHB5 YWRvcmVz RGV0YWlscw== LlRv SU5U IHNhbGVz 4LCk aGVpZA== IGNob2ljZQ== bWVyYw== IGZhYg== INGN0YI= xbE= IHlvdSdyZQ== IGNvbnN1bQ== IG1hdHRlcg== aG9sZGVy IGNvdXBsZQ== IHJlbGF0ZWQ= IFJvYg== ZHVsZQ== UmVhZGVy IMWf SGVscGVy IOCkqw== ZW1w IGZv 4Kiw IHJlY2VudA== INil2YTZiQ== IE5vcnRo IGRlZmluaXQ= 0LDQtg== YXZp 0LDRjw== 4oCL4Z4= LnR4dA== IGJvb2tz IFBN ODY= 0LrRlg== IE1vZA== aWtr 0LPQsNC9 4Ka/4KaV KHVzZXI= ZW1v dHJhcw== YXBhbg== VG9vbA== IOCumg== IHdhbnRlZA== YnRu IHNlY3VyaXR5 IGJpcw== c3Jj IFdpbmRvd3M= 6LY= 4LW8 2KrZhw== IOCyhQ== LnJlYWQ= UHJvY2Vzcw== 4Lit4Lil aWtv aW1p Ynl0ZQ== IEZyb20= IGVzdGFi IEFN 4KSk4KWH INWr dmFsdWVz 2YrZhQ== IHN1YnM= IHJ1 IFNs IE1ldA== IGRpc2U= IGZvaQ== 4KmH IGRydWc= VUI= INqp2Yg= c2V0cw== Y2hlcw== INC+0YE= Qm9keQ== IHBsYXllcnM= JyksCg== IGltbQ== IDw/ YXRhcg== IHlv 0Jc= IGNvbWluZw== U2w= IGFtYXo= INeQ16o= IENlbnRlcg== ZWxpbmU= IGVudHJ5 15DWuA== c2No YXV0bw== X2NvbA== 4K+G IHJlcQ== 4YOU4YOR4YOY4YOh LnBhcnNl 0LXRhQ== IGFq 15nXnA== KGVycg== IHByZXR0eQ== IGRlc2M= IGhpZ2hlcg== IG1lZXI= IE1hdGg= IHB1Ymxpc2hlZA== aXJpdA== IGJvbA== 7LI= b3NwaXRhbA== IEZlYg== 0YDQsNC9 aW5pbmc= 44KS 5oOF U3Rl 4KSo4KWN4KQ= aXNoaW5n dXN0ZXI= IEZvdW5k IHBlcm8= cmFpbnQ= RW5naW5l 44CL LXVw YnVt ZWNobw== bmI= 4LWN4LSq 4LC/4LCC4LA= 4K6q YXRvcnk= UFQ= 44KK IGZyYW1l ZW5pbmc= Y2hhbg== 66o= 2LHZgQ== QWNjb3VudA== 4LKv IOCkh+CkuA== IEhlcmU= 0L7QuA== INC+0LQ= Jyk7Cgo= IGFsdGVybg== bmV4dA== 0LrQvtCy IG9mZmljaWFs IHB1cmNoYXNl 4LKy4LON4LKy a3I= IE5hbWU= 4KqX U3RvcmU= LmNvbA== bGljZQ== IGdhcw== ZWt0 QWNjZXNz INin2YTYpQ== IHZlbA== w61u IGln 7KCV YWxpbmc= ZWFk IHByZXZlbnQ= ZW1wbA== IHN1bg== IFByb2dyYW0= IM+Ezr8= 4LOC INmF2Kc= IHJpcw== dGVtcA== J3Zl IG1hY2hpbmU= IE1hcA== 4LCu 4KSw4KWA IHZpcnR1YWw= X1NJWkU= b3JnZQ== UEM= muC1jeC0mg== IHNvdW5k cm93bg== IHJvdW5k IFdI 2KrZhQ== V2lkZ2V0 IHNhbGU= INC5 ZXRpbWU= IGluY2x1ZGVk LnN0YXR1cw== IHBhcnR5 IHByZWZlcg== IG5vY2g= INin2YTYrw== SVRI YWNrcw== KCkNCg== IHR1cg== 4LS+4LSv YWRz IGNvbmNlcm4= 4Ka/4Kao IGFic29s aWRhcw== QUNL IHJldHVybnM= QVNT IGVpbmVy IEludGVybmV0 IHRvdWNo ZW5zb3I= KSk7Cgo= RXh0 ZG9t IGFyY2g= xJc= INC40LvQuA== 4Ki/ YXJ0ZXI= fTwv IGludmVzdGln b25seQ== dGFn 4Kqc IG9pbA== aWRlb3M= IHNob3dz aW5pdGlvbg== YXNj ZW5zaW9ucw== IHBlbA== IG5pY2U= IHp1bQ== IGNp 0qE= 5a2Q IHByb2dyZXNz IHRlbXBlcg== X3Ry IGxvbmdlcg== IG1haQ== LQo= cXVhcmU= b25p IHJlc291cmNlcw== UHJpY2U= ZW5kZW4= IOCyuQ== KHc= 7IY= YWRo PSQ= 4LW9 Z2Vi 0LXQvdC4 IC8qKg== IEVY IHNpeA== IGty QkE= IHBhaW4= cHRy IOCkuOCkrg== b2tv 5Yip IHNlbGw= c3R5bGVz 6bs= b3VybmFs IHBhcnRl IMOu b3Jpbmc= 0L3QvtC1 IGZvbA== IOCmrw== YWd1ZQ== IHRyZWF0bWVudA== IHdlZWtz YAo= IFByb2R1Y3Q= ZHVj 4LmB TEw= 2LHYqQ== 4YOU4YOR4YOQ IOCuhw== YXJlcw== 67I= Q2F0ZWdvcnk= IGVzcA== IHPDqQ== cHJpc2U= YWxpYQ== IGdyYXBo aXNlcg== aWN0aW9uYXJ5 4K6/4K6v b3Rpb24= IGVpbmVt TGVmdA== IOGDng== IGZhaXQ= IC0tPgo= 4LiI YWlsZWQ= IG5vdGU= QVJS ODk= d2lzZQ== Zm9s YWNpb25hbA== YXVm ZXNj IGNsaWVudHM= LmNvcmU= INW/ 4YOS 24zYsQ== xaA= d2k= IG1lbnU= IGltYWdlcw== INin2YTZgg== 0YDQtdC8 eXk= JwoK U2VsZWN0ZWQ= 0ZQ= 44GV 4K+B4K6u4K+N YXJlYQ== INC40Lw= IGhlbGQ= IGFubm91bg== YnVn IGhhYmVu IOWkqeWkqeW9qeelqA== aWNoZQ== 0YbRjA== IHN5c3RlbXM= z4TOtw== 0L7QvNGD 2YTbjA== IGRyaXZl IHRvcg== INm+2Yc= YW5nbw== 4KWM ICk7Cgo= MTgw 5oiR IGh1bg== IGxlYXJuaW5n 5rOo5YaM IHJhbmRvbQ== INix2Kc= IFVS IGdlc3Q= 0YLQtQ== X2Nvbg== IGNvbnRpbnU= aWxv Ijoi LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== X2NvdW50 IGh5 IHZpb2w= IG91dHNpZGU= IM+Ezr/PhQ== IEF2 IHJhdGhlcg== 0LvRlg== IGludGVybmF0aW9uYWw= IGFueW9uZQ== ZXNzbw== aW5zdA== IGZvcm1h IHdvcnRo INWh1Q== QkM= 6YM= ZW56 YWtz ZXRv ZmFsc2U= IHVwb24= ZXN0cw== IGNhbGN1bA== INC+0L8= IE1hcmNo IHBvbGljeQ== 4Ka5 IFNvZnR3YXJl INin2YTZhg== 5LqU IGxvY2F0ZWQ= YW51YXJ5 IGludHJvZHU= XHU= Zmxvdw== UHJlc3M= 4LWB4LSo IOOD IGF1ZA== 0LDRgNGL 0pPQsA== IHNvbHV0aW9u IGZheg== VmVjdG9y IGRpc3RyaWJ1dGVk IHdyaXR0ZW4= IHZlcnQ= ID8+ bGFuZw== IGZhY2ls b2dyYXBoeQ== b25kZXI= 7Lk= amVz IEhhcg== aXN0aWNz ZHk= YmVk IGNvbXB1dGVy INin2YTZgw== 4Kqo4Kq+ IG11bHRpcGxl 4K6u ICsr YW1hbg== IF4= dmVjdG9y YW1lcmE= eHg= YWx5 SU5F LnF1ZXJ5 YWR5 4Lie L2I= cGFzc3dvcmQ= IEJsYWNr aW1hcnk= 6YGT 0rE= eW5hbWlj aG9s LnN1Yg== IGNvbmZpcm0= LgovLw== KyspCg== 0LXQs9C+ 56ys IEZPUg== bmF2 IHJlYWNo z4TOtQ== cHJpY2U= IGhpag== 2YjYqA== YWdyYW0= MTIz IG1lbnM= zr4= 7Zg= xas= w6dv YXRpc2Y= bmll IG5lbQ== aXR1 IEluc3Q= 4bup Iiks IG50 4LC4 z4HOsQ== IFVzZQ== Q29uZmlndXJhdGlvbg== UG9s INin2YjYsQ== 7JWE SUU= IEFwcmls Um91dGU= IOKAog== INC80LXQvQ== MDAx 5YmN dW5ncw== IEVO 64KY 4La6 IGluc3RlYWQ= cmFm 4LGN4LCo IGxlYXZl JzoK IHVuaXQ= RU5E MTAy LlNldA== UXVl IGVp Py4= Lmpzb24= ZWVz 4KS+4KSm IGFwcGVhcg== 7J6l 4KSI VFA= w6Rs IGZlZWQ= cml0ZXJpYQ== Y2FyZA== IHByb3Bvcw== T1NU IHNhbg== b3VudHJ5 ICAgICAgICAgICAgICAgICAgICA= bG9jYXRpb24= IGPDsw== TmV4dA== IGNldHRl 57uP IHJlbGU= IHdvcmR0 TG9jYWw= IGRpYQ== ZW5v IHNhZmU= IHRyYW5zcG9ydA== INem IMOkcg== LmFwYWNoZQ== 1aHWgQ== CQ0K YXltZW50 w4E= Q2Fs INin2YTYqA== ZWg= IOCyrA== 4LGN4LCv w6Ju aW5hcg== Y3U= IOCwqA== TlU= z4DOvw== 0YbQsA== 6KaB IEVuZ2xpc2g= Rk8= 5p6c INCT aXRjaGVu WFg= bWFpbg== ID0K IHNwZWVk 5ac= 4Liy4Lii cnVwdA== ICRf 2LHZgw== fn4= IGdyb3VuZA== 4KWN4KS3 4LmC Zmlyc3Q= IEl0J3M= IGtpZHM= aXJlY3Rpb24= IGFza2Vk X2luZGV4 IGxlZ2Fs IGJ1bA== RVJST1I= LkNvbGxlY3Rpb25z YWRy IHVs IGFkbWluaXN0cg== IGFzc2lzdA== IHZhYw== CSA= YWthbg== IEFmcg== w7pu bG9naW4= 2qo= 4LOA IOCqjw== T3A= Nzk= 4LSV4LWN4LSV IG5hdGlvbmFs IGNlbGVicg== IMO9 IEZpbg== ZWxsb3c= IG1lZGljYWw= ZWRlcmFs 4LON4LKo bWVyY2lhbA== 4La7 5LqM YXJkZW4= IMQ= IOC0jg== IERlc2lnbg== 0LTRgw== IEF1c3Ry cGFjaw== 44Kv IE9wZW4= dXJyZW5jeQ== IExvbmc= KGc= IEhpcw== 0YHRiw== dG9jb2w= IGFwcg== b3Vi U2V0dGluZ3M= xLFuZA== xbM= R0VU IFRoZW4= ZXNjaA== INiq2Yg= 5o0= UmVk 4KaH IGJlaGluZA== Wzo= IHJvbQ== 4oCdLg== 4pk= aG9vZA== bmRlcg== 4Ka+4Kay CVN5c3RlbQ== Lio= cGxldGU= Rm91bmQ= IHJlY29nbg== 7IiY aWNoYQ== 4YCv IOC3 Q1A= IE1hbA== IEhvdXNl PVRydWU= INC/0L7RgQ== ZmxvYXQ= INGC0L4= IHRpdA== IFNp R0w= U3RvcmFnZQ== IGVhc2lseQ== IEZyZQ== 5a6J INC+0L0= 6Kg= aXBs IHByb2NlZA== aG9sZA== IEp1bmU= IGxhdGU= IGZsb3c= enU= YWpv IGF2ZXJhZ2U= IEdyb3Vw IGVkdWNhdGlvbg== IFNhbA== TEVDVA== 0YLQtdGA 1aQ= 4KSu4KS+ 6LA= IEdv IERpcmVjdA== ZWRp w54= KQoKCg== IGRhdGFiYXNl LWU= IEJybw== IGlkZWFz MTk1 IG5hdHVyZQ== IG9wcG9ydHVuaXR5 aWZlc3Q= IHNraWxscw== Y20= UmVjdA== IE1hZw== IHNwcg== IG1hdGVyaWFscw== IHRocm91Z2hvdXQ= w7xjaw== aW5kYQ== ZWN1cg== IGJhbGw= IHBhcnRz IG5vcm0= IGltYWc= IGNoYQ== aXph Z3JpZA== IGNvbW1lbnRz IHZvY8Oq VGFyZ2V0 IHNlZW1z b25v IHRpbGw= YW1pbg== IEFOWQ== W2o= UkE= INmF2K0= U2lnbg== 15nXqQ== INCx0YPQtA== 6LWE IGFmZmVjdA== aWxkZXI= 4LCf aWxsZWQ= IGljb24= IHBhaW50 n6U= IFNr 55yf IGNhc2Vz YmxpYw== 4LKu bGVuZ3Ro b2RheQ== IGNvbGxlY3Q= INeq IFRP RWFjaA== MTEw IEhvbA== aW1hdGlvbg== IEhlYWx0aA== VGhhdA== KCcu IEtleQ== IGFsbG93cw== IHN0b3JhZ2U= 4LWC TG9uZw== IE92ZXI= 2K7Yqg== IG1ldGhvZHM= IOCkpuClhw== IE1j IGNoYXJn IHByb3Blcg== IGNhbmRpZA== 5ro= IEF1Z3VzdA== aWNrZXQ= T3Vy QnV0 aWNrZXI= Y2VlZA== KHN0cg== NzY= 2ZA= aXRhdGlvbg== IOKCrA== YXZ5 7JqU dmV5 IOCuqA== 4YOY4YOa IE1haW4= YWpl INW6 MTAx UHJvamVjdA== w6ptZQ== ZW50cnk= YW55YQ== IHp1cg== VUQ= IHNlaW4= IHJlZ2lvbg== IHZhcmlldHk= aW5nZXI= INqp2Yc= IGNvbW1l IFN0YXJ0 IFNpbQ== Jykp Lm1hcA== c3Fs 5Y2a Z3JhcGg= IEltYWdl IDsK 4YOU4YOb YmFuZA== IEZhbHNl 7Yq4 0LvRjg== LnJlbW92ZQ== IHNraW4= 4Kqo4KuA IHB1bg== Oig= Q2hhbmdlZA== 4KS+4KS1 IGlw IGV4Y2VsbGVudA== 64U= 6rKM YWNpbmc= INqq IGNoYXQ= RGVw IOC0pA== ZW1vcnk= KHN0cmluZw== T1JE dmFu 4Kqm 7ZY= 4LWB4LSo4LWN4LSo IOyE 4oCm4oCm U2VsZWN0b3I= IGNvbXBsZXg= eno= INqp2LE= YXRpdmVz IOGDrA== ODU= 4K6x 4Lif IGV4Y2VwdGlvbg== 7KCc IFRvcA== X29m IGZvcnQ= Qk8= b2Ny IGRlYXRo 57Q= 15nXpw== 0L3QvtGB0YLQuA== IFvigKZdCgo= ICE9PQ== IEFT MTk0 IGhlYmJlbg== 0YDQsNC3 Q28= 0LrQtQ== IGNvcA== YW5jZWw= ZW5lcmlj 6I0= X1NF dGVybQ== 0YbQuNGP T0RP INeh 4Ka/4Kak 1bjWgtWp1bXVuNaC1bY= 1bjVsg== IFNlcHRlbWJlcg== IGzDoA== 65A= cXVlcg== YWlnbg== bW9kdWxl 0q/RgA== IGNoYW5jZQ== IOCkleCkvw== dWd1 5aW9 VHJlZQ== IGdlbA== Lkdyb3Vw IHF1aWNrbHk= IENhcw== ZXhw bGFu 1bjVvg== 4Li14LmI INCx0LA= dmV6 cmVnaW9u LUY= 2Yjaug== MTI4 odU= 0Js= 0LjQsw== IG5vbQ== INWk aW1pdA== aWprZQ== IEJ1c2luZXNz 57K+5ZOB IOGDoOGDneGDmw== KC0= IGNyb3Nz 5aSp5aSp5Lit5b2p56Wo amVu aWNhdGU= 64yA T3B0aW9u IHByb2dyYW1z 24zaqQ== bnVtYmVy 2YLYqQ== IOGDo+GD RVhU bGF0 IHNpc3Q= Y3M= IGRlZXA= IG9uZXM= z4POtw== VmFy IGhhaXI= IEFtZXJpY2E= IGxvY2s= IGFjdGl2aXR5 KHJlc3VsdA== IGluc3VyYW5jZQ== IGJ1aWx0 IENoaW5h IHdpc2g= YXllcnM= IGxlYWRpbmc= 0YHQutC4 IGZhaXJl KGg= 2KfYsg== 67O0 fQoKLy8= 4K6w4K+N L29y ZW5nYW4= cXE= 2KE= IOCksOCkuQ== 5YWl TUE= IiksCg== TG9naW4= 5a2X IERhdg== 640= 6ICF L3A= ZXRpbmc= SW1wbA== VVJF IHNlZWs= 7JuQ ICc8 MTky TWFwcGluZw== aW1i IHBhdGllbnRz IGNhcnQ= cm90 6Z8= m+Cnhw== LnBhdGg= YXR0bGU= IG5lY2Vzc2FyeQ== IERhbg== IGNvb2w= IH0KCgo= d2l0Y2g= IENvbnM= 56Y= Kik= 4KuC 5pKt IHRyZWU= fSk7Cgo= 4LC1 RmFsc2U= dG9w IEp1bHk= YWhs d29vZA== IGFjdGl2aXRpZXM= IHdpZGU= dGVtcHQ= 54m5 IGJhbmQ= KHJl TmU= QVBJ Zm9udA== LmF3 LmNsb3Nl IOCkuOCkgg== bWFy IE1vZGVs 0YDQvtCy QWZ0ZXI= YWlyZQ== IG5hbg== UmV0dXJu Lkxpc3Q= aXBwZWQ= 4LC+4LCy IHJlc2lk 4LSw4LWN IG1lbW9yeQ== IGluc3RpdA== IGNvbnN1bHQ= aW5vcw== IHdyb25n LC0= IHJlbWVtYmVy LXllYXI= IEpTT04= dXNlcnM= c3R5bGU= 772e 0L3QvtGB0YLRjA== IElk IGhlYWRlcg== WyQ= IGVtcHR5 X2J5 IHNsb3Q= 0LjRh9C10YE= 4KSP YWNjb3VudA== INGB0LDQvA== IFN1cGVy 0YHRgtCw0L0= IHVudA== RGVsZXRl IGxvb2tz 1bjWgA== UG9ydA== IGltcGxlbWVudHM= IOCkteCkv+Ck bW9yZQ== dGVjdA== 4KSV4KWH IHJlbGVhc2U= IGNpcmM= IHRvd24= LWJhc2Vk IEJlcg== IHF1YW50 c2hpcA== 0L7RiA== QWN0aXZl X18o fS8= emll c2Vu IGZhbnQ= IGZpbGVuYW1l 4LiK IHByYWN0aWNl IG1vdmll d2VpZ2h0 aWt0 IHBsYXlpbmc= IHN0YXI= X2F0 0LDQu9C4 UGxlYXNl Q0Q= dXBw SlNPTg== amVy qOCvjeCupA== zrzOsQ== IFBlcnNvbg== IE1hYw== IGdhbg== IGdyb3d0aA== IGFiZXI= b3JkaW4= IENvdW50eQ== VG90YWw= 4Kac IGNhZGE= YW5nZXM= IHNhdw== IGRpc2NvdmVy 0LDQvdGL IGthcw== VmFsdWVz LnJlcw== IEtl IEFueQ== 4K+N4K6x IG1lbmc= IGltbWVk IGFiaWxpdHk= b2tlcg== LUI= INm+2LE= 0p8= 4oCU4oCU 0LDQvw== RVNU YnV0 YXRhbg== RGly IERlcg== IHBhcA== Z2Fs INiz25I= 54K5 Y2Q= IHBhdHRlcm4= aW5ndG9u KEA= IHJlc291cmNl INk= 6Is= INWj IHBob3Rvcw== Q08= bMSx IGhheQ== U2hvdw== dGVtcGxhdGU= eW1ib2w= IHVzZWZ1bA== Q29udHJvbHM= b3V3 IOGDkOGDoA== 4LK+4LKX IE1pY3Jvc29mdA== QVRB IHRhbg== Y3o= IOyn INin2YTYtQ== 6L+Z xa8= 15HXqA== X2NvZGU= KHJlcw== 77y/ IGV4cGVydA== 44Gj 2KfYuQ== 5YiS YXRlZ29yaWVz IEZpcnN0 b2xvZ2ljYWw= IGZhdm9yaXRl 658= IGNvbXBhcg== 2YTYqQ== INGe YXZlbA== 1aXVvw== 0L7RgNCw IExpbms= IHRvbg== IGZsb29y IEh0dHA= 0LvRiw== 4KS+4KSc IGxpdmVz 0YLTmQ== 4YOn LmN1cnJlbnQ= IG1hcmdpbg== IHByb3BlcnRpZXM= 5oCn 06M= QE92ZXJyaWRl IGNoYXJnZQ== Lklu IEplcw== 4KSV4KS+ IHRlbmQ= YXJpb3M= IFBSTw== IFVL YWtlbg== QXJ0 0L7QtNCw IGxldmVscw== aXRhYmxl IOCqpg== 5Yqo b25nbw== IGpvdXI= QVJF IHd1cg== ZXNo c3Rh LmNvbnQ= YWN0ZXJz YW1lZA== 1aHVrg== INWi IHBvb2w= X2FkZA== dWx1 IFBhbA== INin2YTYrg== R2w= Y29tcG9uZW50cw== VGVtcGxhdGU= IGF2b2lk 2KQ= bWF6b24= IGltcHJvdmU= VmFyaQ== IOCmtg== IGV2YWx1 RGVs IEluZGlh IFdoaWxl RW5hYmxlZA== eWc= KEI= bGFn eGlt IOCwpA== ZWN1cml0eQ== aXJpbmc= IGdvZA== IGZyZXF1 IHZpZGE= c2NvcGU= b2xm IHBhcnNl YXJv IHJlY2VudGx5 7Jqp IGRhaWx5 IG1laHI= b25kYXk= zpE= YWN0b3I= IHNjb3Jl IGVtcHJlcw== bG9uZw== IGNvbXBs 2YrZiA== 4pg= IGVxdWlwbWVudA== ZXhwb3J0cw== IHRvb2xz SWw= IGZpcm0= IGFp IHNlbGVjdGlvbg== UHJvcGVydGllcw== IGFicw== IGNhcHQ= dHJ1Y3Q= 44KC TWFpbg== PVwi IGxpdGVy IGFuYWx5c2lz IHByaWNlcw== IGNvbnZlcnQ= 2YrYsw== LmRpcw== IFNh Rm9udA== 4K+B4K6V b3Zh ZW5jaWVz ZWRlbg== IGNhcmVlcg== IEJlbg== w40= IMK3 IHJvbGw= LnN0cmluZw== IGFtYXppbmc= 44GT b21z VXNl 4oCZZA== 4LKC4LKm IGJveQ== IOCmlw== Q2Fu Lik= 5b+D KG51bGw= IM6/ YWNrZXQ= 0YHRgtCy0LXQvQ== LmNzcw== IGpv 55U= IHZlcmQ= IGZpbmFsbHk= Zml0 IGVmZmVjdGl2ZQ== IHVwZGF0ZWQ= zq/OsQ== IGluZmx1 IGRlbWFuZA== 0LjQvdCw 06nRgA== 4Lat IGNvbmNlcHQ= 6Lc= IGTDqWM= acOpbg== ZWxsZXM= IHRydXN0 bnU= IGJhdGg= dXR0 Tm9uZQ== ZXJzaXN0 YWlyZXM= IHByb3M= ZGVsZXRl IGZlcg== IGtsZQ== IHNlbnNl IHRyYWlu dW5kYXk= IHN6 IGRpcmVjdGx5 IEF1dA== LiQ= IEZST00= a25vd24= INec15Q= IGNsdWI= IGRo IGFsZXJ0 LgoKCg== YXJpZXM= b3Jv Pzo= IFRlY2hu 5ZWG IGxpdg== IGZpZWxkcw== 4K6/4K6y4K+N b3Rlcw== IGNhbid0 IGRpZG4= IHBhZ2Vz 0LTRlg== w6FyaW8= NzI= QWc= RGV0YWls QWJvdXQ= 4Kqn IFdhcg== 5Lia 44Op IC4u 6Ze0 IENvbW11bg== YWdlbQ== b25kb24= TkU= IHByb2plY3Rz IFByb20= eXRo IHPDpQ== IM6z ZHM= 6ZQ= aW5kZQ== 6rO8 dXJlcg== Lm5ldw== INCw0YA= IGFzcGVjdA== IOuL IGdvbGQ= INs= IOWN IGtt 6YOo IGJ1ZmZlcg== 44GG LWE= UHJvcHM= INGN0YLQvg== KCgp SGFzaA== ZmlybQ== w7RuZw== Ljwv IGdvYWw= IFBD IHZpZQ== IHTDqw== LmNo IOCqheCqqOCrhw== 0YHQsA== 5a2m IHRocmVhZA== w6Ro 57qn TXNn KCk6Cg== w7s= ZGF0 c3RyZWFt KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 4LeA IHN0YXJ0aW5n ZWRh w7Zn cGF0 aXNj YXJhbnRl IEJlbA== Y2Npw7Nu X3N0cmluZw== IEJyaXQ= IG5vdGljZQ== 7IOB 4LC/4LCo UmFuZ2U= IG1vZXQ= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IGV4ZXJj LXJl dWdhcg== IGx1 UFI= bmVycw== IEluZm9ybWF0aW9u dXNzaQ== IGdldHM= KyI= UmlnaHQ= LmVycm9y IHRlY2huaQ== INin24zZhg== 0LTQsNC9 IGVsZW1lbnRz IG1lbnRpb24= IOCkreClgA== 65Ok 0YjQtQ== IGthbQ== 0LrQsNC3 bGF5 SUdIVA== 2KfYrQ== IGJsb29k TWFyaw== JHRoaXM= cmFtZQ== LndlYg== aWFuYQ== IDo6 Lm1pbg== YXNvbnM= 0YvQtw== aWph 4KeN4Kas IEVycm9y IHZpZXdz IOmHjeW6huaXtuaXtuW9qQ== 4LOL 2YPZhg== ZXo= IGRlY2lzaW9u YXJ0cw== 7Iq1 IG51bWJlcnM= IG9ic2Vydg== aGFy IE5vdmVtYmVy IG93bmVy IGFzc29jaWF0ZWQ= 5LqL 4K6j ZXVy 4LKw4LOB bGVhbg== YXVz IFNlbg== IGRlbGl2ZXJ5 Y29udHI= aXZpbA== 0YHQu9C4 IGFkdWx0 IGhpc3Rvcg== IGvDtm5uZW4= 1bjWgNU= IGF0dGVudGlvbg== IEphbnVhcnk= ICcn IHJvYg== IEludGVybmF0aW9uYWw= LnVwZGF0ZQ== IHJhaXM= RGlzcGxheQ== IHRpZA== 4YCt 5aA= T0M= Y2hhZnQ= bWV0aG9k IGxpbmVz XHg= z4nOvQ== a2s= IFJlYWw= Y2ls IGF0dGVtcHQ= w6TDpA== b25vbQ== IHJvY2s= b3Rlcg== IG1vcm5pbmc= b2dnbGU= IGNhdGVnb3J5 IHNoYWxs IOCytQ== IEVpbg== X2JhY2s= cm9sZQ== 4YOd4YOh IG9o cmFu IFdJVEg= IOqz Y2xvc2U= IHBpY3R1cmU= IGRhZw== IGJvdHRvbQ== IFNhbQ== IHZlcmI= IGt3YQ== IEJhc2U= IGNvbGxlZ2U= IGVzc2VudGlhbA== 0YLRjA== IHJvYWQ= IElU 4YOU4YOR4YOY aWNrcw== IGNvbW1pdA== U2VyaWFs 4Kqw4KuN4Ko= IGRvZXNuJ3Q= dW5zaWduZWQ= J107Cg== IHNldHRpbmdz IGlubm92 5a6a IHNsZWVw IG5hbWVz IGVhcm4= 0L7QtQ== IE9jdG9iZXI= fQoKCg== 4LCm c3ljaA== IHNvbGQ= IERvd24= 6YeM cmVjaQ== 0YHQuw== aW1z IGNpbg== IFByb2plY3Q= 4LSZ 15XXmdc= IFZlY3Rvcg== INis2Yo= X2FycmF5 IHBob3Rv IEtpbmc= IGlnbg== INeU15A= IGV4dHJlbQ== LmE= IHdvbWFu IHVuc2lnbmVk c3BhY2U= IGF34buNbg== 0LDRgNGC IHB1bA== QlVH MTEx aWxsZXI= 4LOK IHBhcmVudHM= KSku IHNvbGlk IExv IGR1cmNo INC+0YA= IHNpdHVhdGlvbg== YXR1cmRheQ== 57M= UmVuZGVy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= VHJhY2U= b2xlcw== RGll LWRl X1RZUEU= IG3DoQ== aWJseQ== 6ZU= YW5ndWxhcg== IGxvc3Q= RFM= IGdvZXM= IGFkdmVydA== IGl0c2VsZg== IGJlbmVmaXRz 4LeU T0c= d3M= IGludGVybmFs cHJvcGVydHk= 4K6u4K+N INW41oA= 5Lmw ICI8 IGVuaA== IGV2aWQ= IEFsc28= aXN0cmF0aW9u 4Ka+4KaV X3No IHNhdGlzZg== IGhvdXI= CQkJCg== IG1vZHVsZQ== 0YHRjA== IG11eQ== YW5jeQ== IHRyaXA= w7Nz IEdOVQ== X2RhdGU= INCX Zmc= Y2F0 2YTYp9mF LmtleQ== IHJlZ3Vs IHBvc2l0aXZl 4LiC 2Y8= IHVzZXM= IHJvdA== b3Jpeg== IHNtYXJ0 IOCksuCkv+Ckjw== LndpZGdldA== IGNhYg== IGdyZWVu 4KS+4KSI 4YCA ICAgICAgICAgICAgICAgICAg IHByb2ZpbGU= Lic= QUE= w5w= IGRlc2Rl 2YjYsw== IGNoYWxsZW5n c3RvcmU= UHRy YWph Q2FjaGU= IHN0cnVjdHVyZQ== 6YI= IGRpZmY= Llg= 44KJ LnNob3c= bWF0 LmJvZHk= IOC4mg== Y3JhZnQ= NjM= X0NPTg== cnVhcnk= IGRyaW5r bGljaGVu IGdpcmw= 4YOY4YOT IGRhcms= SG9tZQ== IGNvdg== 0L7Rjw== IE1vc3Q= IEJpZw== INiw IHRyYW5zZmVy LlBvaW50 LmluZm8= YXNpYw== IGRvZXNu IGNvbnRhaW5z IGdyb3Vwcw== IGNvbnNpc3Q= 4Lit4LiZ aXU= Lmdvb2dsZQ== IG9waW4= cmVmaXg= 5ZCO ZWxlcw== RGF0YWJhc2U= 4LCq IHBlcw== IHJhdA== RGV2aWNl IGt1dA== IFtdCg== IENyZWF0ZWQ= 5bqm X2No 5YWz IGhpZ2hseQ== LnNlbmQ= IOq4 IHRtcA== IGxlZA== ID8+Cg== IHJheg== aG93 dmVyc2lvbg== QVNF IOCmquCnjeCmsA== aW1pZW50bw== XV0= 4KWB4KSw 44GK IGRyaXZlcg== KGtleQ== IOC5gQ== dWRlbnQ= IHBsYW5z 5rC0 YWxsZWQ= T2Zmc2V0 55CD IOCmmg== bGVnYXRl b3Rvcw== 5bel 4KSr 4KS44KWH IOCqsg== NjI= INC70Y4= ewoK IGhhbmRz Q2FsbGJhY2s= KFA= 0L7RgNC8 NjE= dXNoZXI= OTE= IG1t b3ZpZQ== IGNvc3Rz LyoK IG51ZQ== 0LDRgtCw IOyImA== IExvcw== IHNjcg== aXF1 IGdpdmVz dmFyaQ== 4LGN4LCk IOyY dWdh IGluZGVwZW5k 4YOU4YOV IGNvcw== IGZpbmU= IEhlbA== QXJy VmlzaWJsZQ== IG5q wq4= IGNvdW50cmllcw== IGZyZXNo b3V0ZXM= INCV IG9mZnNldA== LkxvZw== ZW50eQ== 4La4 IMKj 5oE= dm9pcg== LnRy Jz0+ 572R5Z2A IE9wdA== SVg= 4LKf cnlwdA== IGNpdA== KCo= bG9vaw== aW1lc3Q= 0q/QvQ== 2YjZig== 4Liy4LiZ IOC0mg== 44Oq 4buT 0LjQvw== Lklz ZWJ1Zw== IG15c2VsZg== Z3JhZGU= IFVO IGthdA== 6K6h5YiS 0LjQsQ== 66m0 YWtr dWFyaW8= RGlyZWN0 LmV2ZW50 IOyCrA== IExldA== IGxpYw== 546p T1JN 4buv IGNhcGl0YWw= IG51dA== b2dh LkU= UmVwb3J0 6YCa YXBwZWQ= YXVnaA== Ym9vbA== 5riF INqp24E= Lms= IHN5bg== dG90eXBl 4LGN4LCy IGluag== 2YXYsQ== IOuC IHBpZWNl 5pel5pys IM69zrE= UnVu U3BlYw== 15nXlA== IENvbGxlZ2U= IGp1ZA== IHZlbg== IHPDo28= QU5H hpI= IGNhdA== Y3J5cHQ= RXhw VHJhbnNhY3Rpb24= b3JhdGlvbg== IGlkZWFs LldyaXRl INec15A= aWNpbw== R0I= IFZvbA== 5peg56CB 4YOd4YOc IHByb3ZpZGluZw== 4oCZdW4= 5oqV IElo IG51bWVy IG1lZGlj aWJlcg== KS0+ dWVu YXZpb3I= Y292ZXJ5 24zZhQ== dXU= IFByb2Y= IGluaQ== 4YOj4YOg 4KSo4KWA IGZhdA== IG1vZw== 2LPYqA== SUVT PGludA== KSk7DQo= QXNz IGluZHVzdHI= fWA= INCy0L7Qtw== 2KfZgg== IHNob3A= IHbDoA== YXJvbg== IFBsYXk= IMOqdHJl INin2YTYsQ== IHVudHVr IHByaW1hcnk= KHJlcXVlc3Q= IG5laWdo aWZpY2F0aW9ucw== bmlr IFJlc3VsdA== IGRlZmluZWQ= INOZ IGZpbmlzaA== 5Yqg ZWRlZg== X3RleHQ= YW5kbGU= UHJvZmlsZQ== IEZvdW5kYXRpb24= T0I= IOKApgoK IHBlbG8= TVA= d2Fy X05BTUU= 6aaZ IFsi OTk5 2KfYtQ== YXBwZW5k Q29udGFjdA== Lkk= IFBvcg== LmVxdWFscw== IOuz IHNpemVvZg== cHJvY2Vzcw== IHJlcXVpcmVtZW50cw== IGNvbXBsZXRlbHk= b3Jkcw== 0L7Qu9GM0LrQvg== IHdhcm0= ZGVs w5Y= INei15w= T05F S0VZ IGRhYXI= J10s IFVwZGF0ZQ== zrY= 4Ka+4Kau IG9j IGJhaw== TE9H 6ZM= IFRS IHBhcmU= Lno= cm91dGVy IGFndXM= 15XXng== IGd1aWRl LnR5cGU= SU5E LmNvbnRlbnQ= U0Q= IEZpbA== IGJhbg== KCkpOwoK IM68zrU= Z3Jl aWRp IG1lZXRpbmc= INW41oI= IE1lc3NhZ2U= 4YCx IGNoYW5nZWQ= 4LKo4LON4LKo IiwNCg== IHdvcmtlZA== IE51bWJlcg== 6KeE ZGVzY3JpcHRpb24= IFBhZ2U= bWluZw== IFByZXNpZGVudA== cmV0dXJucw== QkQ= IG1vbA== ICcuLi8= YW5nYW4= IGluZGl2aWR1YWxz IERp IHByaW1l IHNlcmlvdXM= LnRyYW5z INin2YTYsA== Zm9yZA== 24zYpw== IOOC IGVkaXQ= w7N3 IFVSTA== IERlY2VtYmVy dWth IEluaXRpYWw= cGxvdA== INmE2Kc= VkVS IjoK 5rqQ ZGF0ZXM= IHBldXQ= IG9v 4Laa aWVr IGNvbnN0cnVjdG9y IFJ1c3M= YXR6 dXR0ZXI= IGRlYWQ= IHll 6ZKx 5YaF TWV0 IEhU aW1w UGFyc2Vy IEFS Z3M= 15XXnQ== IHBldQ== ZWRkaW5n IFtb IENhbGw= IGJ5dGU= IHZlcnNjaA== TW9yZQ== YnVpbGQ= Q29yZQ== MTkz cm9tZQ== IHNhZmV0eQ== IHRoZW1zZWx2ZXM= 0LLQtdGA IG1vdW50 IOCkheCkqg== 77u/dXNpbmc= ruS/oQ== QmVhbg== IGZvcm1lcg== KDo= IGNt dWJh IHNldHRpbmc= IGV4ZWN1dA== IHN0cmVzcw== INin2YTYqtmK IGRpcmVjdGlvbg== fSk= IHB1Yg== LWNvbnRyb2w= IEl0ZW0= QXN5bmM= 5paZ 4LCh 4K+N4K6V4K6z ZXN0aW9u YWRvdw== 7KO8 aWVkZXI= IGxpZw== dW1hbg== IHBheW1lbnQ= IGNyZWF0aW5n IGFsbG93ZWQ= ICIiIg== IHZpdA== IGNvbnRhaW5lcg== YXBwbGljYXRpb24= ICovCi8= cmVj IERhcw== 0YvQvdC00LA= INCy0LA= IGRpZG4ndA== cmQ= Y29ubmVjdA== KGV4 IMOubg== 7Jk= IGZpeA== ZW1icmU= IHdvb2Q= 4LWN4LSZ 4LCv MTMw IGRlc2NyaWI= b2Nv yZlu Y29tZXM= ZXJtYW4= w7pibGlj IC0tPg== 4LS/4LSV4LWN4LSV bWFpbA== Q1M= Oic= IEV2ZXJ5 LnNlcnZpY2U= 6KGo IER1 7YM= IEF1cw== IHNjYWxl IE5P Z2I= aWNhdGVk 0rU= LkZvbnQ= IGRpc3RhbmNl IG1i 5Zu95Lqn IGVmZmVjdHM= 2YjYrA== aW51ZQ== YW5kZXI= IENoYXI= YW5uYQ== IHN1bW1lcg== IGNoYW5uZWw= IGhlbHBz KCIl QVJSQU5U IHJhaXNl QXV0aG9y LmFwaQ== INGA0LDQsdC+0YI= IGNhc2g= Y29uc29sZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== RG9jdW1lbnQ= IElsbA== INC00LDRgA== IHByZXBhcg== IHB1c2g= IHN0dWZm IGt1bm5lbg== IE5ldA== 5a+5 bmFw IHBlZA== IGJ1cg== 0LjQu9GM IFF1ZQ== IHN1Y2Nlc3NmdWw= 7ISx aXRvcw== IGxpbmtz IGZhaWxlZA== LW1k IGFuZGVyZQ== QVRI IG9wdGlt IHNvbHV0aW9ucw== TWF0Y2g= 4LK/4LK4 IGhlbQ== O2k= IHNwb3J0 IENoZQ== UkVF aWZvcm4= IEZyaWRheQ== IE9w 2YjYsg== Y29sdW1u 4YOQ4YOu IFdBUlJBTlQ= LmxvYWQ= 4KS+4KSV YWt1 IHN0cmVuZ3Ro IEFzc29jaQ== 4LON4LKm 65Oc aXRlY3Q= IGFwcGxpY2F0aW9ucw== INWh1bU= IE1ha2U= YWxpYW4= KGNvbnRleHQ= c2VtYmx5 4LS/4LSa4LWN4LSa IGV4Y2x1cw== aWxsaW5n 4Ka/4Kay YW5kcm9pZA== IHN0YWdl LmF3dA== 0LvRjA== IHZpY3Q= LUE= IHN0YXRlcw== RW50ZXI= cXVldWU= X3k= LnNj IHRyw6hz 4K6k4K+B LmpwZw== IOGDlQ== LmFz uYQ= U2NyZWVu IGNvbmR1Y3Q= IHB1ZWRl IHByaW50Zg== IEJpdA== 0LDQu9GL IHByw6k= 24c= IGFjY3Vy IGNhbWVyYQ== aXR1cmU= UmVj 57O7 bmJzcA== 5oql aWF0ZWx5 IG11bg== aXN0YXM= IGNvbnZlcnM= 4Kaj IEFuZHJvaWQ= IGJhc2lj IGRyb3A= IENvZGU= KCk6 YWxpdHk= MTYw IGludGVyZXN0ZWQ= IGNvdW50ZXI= YXNzZW4= 4Ka+4Kew xIw= L2o= 0L3QvtCy YXpp bG9j ZXJyeQ== 55u0 cGV0 Z2Vs IERlbQ== bGF0ZQ== 4Ka+4KaH IGRlbmdhbg== IHJlbnQ= ZXh0ZXJu IGxvZ2lu aWJ0 b3JpYWw= aHM= SUNF IFZpcw== 0YDRg9Cz VUlE 44KM IOCqtg== IGNvbnNpZGVyZWQ= KCRf 55m7 dm9sdXRpb24= dWFu X3N0YXRl d2Vycw== IGVudGl0eQ== 2K/Ypw== IMOpcw== 4KSk4KWA J10sCg== 6L2v IHtA YW1lcg== ZG91Ymxl IHN1ZmY= INCw0LI= U2VydmxldA== IFJlc3BvbnNl 0YHRgtCy0L4= IG11aXRv LWdyb3Vw IGVsaWY= 4Ka+4Kak 5Zyo57q/6KeC55yL a3c= 0L/RgA== IGNhbGxiYWNr KCkpLg== IGRlZmluaXRlbHk= p+e+jg== IG9wZXJhdGlvbg== ZW15 4Liz LkdlbmVyaWM= IGZhaXI= 5a6e SFRNTA== 4LKy4LON4LKy4LK/ 4YCQ IGltZw== 7KCE 0LzQtdC9 IHBhcnRuZXI= YWRlbg== IGVuY291cg== 0YbRlg== KGZpbGU= YXNrcw== cmF6 b25u X2Rpcg== dmlsbGU= YXZv IEFtYXpvbg== 4YOU4YOX INW9 IOCqpOCrhw== 5oiP NzAw 4YOR YWxlZA== IOWb IGFsaWdu XT0= IHZlaGljbGU= IGZvcmVhY2g= bHlpbmc= CWNvbnN0 57u8 X2xvZw== IGV6 bG9y 1rw= b3RoaW5n INC/0Ls= w6FyaQ== IPCf 5ZCM IGVtZXJn TkE= IOKAmQ== 0LDQvNC4 INGD0Yc= IGludGVyZXN0aW5n IGh1Z2U= V3JpdGVy 4KS+4KSH OwoKCg== LnByb3Bz QXR0 d3JpdGU= IGNlcnRhaW5seQ== IFN1cg== IFVTQQ== IHJlc3BvbmQ= IGJhc2lz 0YLRgw== KGlu ZW5kcmU= LXNt VGFi dG90YWw= IGZvcmNl IG9idGFpbg== RkFVTFQ= cGxveWVl 6ZY= IHBhZGRpbmc= dmVudGlvbg== 15nXmA== YXZlcg== 2YbZig== Iis= b25zdHI= YW50aQ== IHNoYXBl 54s= 0LDQvdC40Y8= IGNvbnN0YW50 IGV4aXN0aW5n IGJpcnRo QXV0 IGhlYXI= IHNoYXJlZA== RWZmZWN0 4LS+4LSo IGZlc3Q= aG9tZQ== z4HOuQ== YWNh dmVudWU= IHJ1bGVz Zmk= IFJldHVybnM= IHBsYWNlcw== 4KWL4KSX IHZlZWw= Ij4NCg== bm9zdA== INqp2Kc= bWFs bGljaGU= 4KaC SGVhZA== J11bJw== IHBhcmFtZXRlcnM= IERlbg== IGV5ZXM= IHNlYQ== aWthbg== w61hcw== dXRlbg== RWQ= IG3DvA== IGRlcGVuZA== 6K+0 2YbYqg== ICIuLw== IEhvdGVs IGVzc2F5 IHJlbGln IGZ1bGx5 2YXYqQ== 4YCE TUVOVA== IGZsYWc= IHN0cmE= Ii8+Cg== 4YOl ZXJ2ZQ== INeT15k= IGdlYnJ1 IGFrdA== KGA= 2YfZig== b3N0ZW4= INiq2Lk= 4LKq SGFuZGxl IE1y IHJvdXRl IGFwcHJvcHI= IFJlbA== MTkw IHRoZW1l REQ= IGNvbW1lcmNpYWw= CWc= 4KS54KWA4KSC LUw= LXBybw== YmVyZw== aGFwcw== IFRlbQ== 0LDQvdCw xLHFnw== 0Y3RgA== Y29ucw== IGN1bHR1cmU= IOCmrOCmv+Cm IHB1cnBvc2U= 4LKk4LON4LKk aXZvcw== IG3Dqm1l Q2Fy INCx0YM= IHJlZmVyZW5jZQ== dW5kYQ== IHBvZGU= 6aM= 0L3QvtC8 YWNjZXNz IHdhbGw= 4KSw4KWH IHRhbWLDqW0= IFRPRE8= 2YjbjA== IHBvcnF1ZQ== INCx0LDRgA== 4Ka/4Kef IHBlbnM= 6Ko= 0qk= ID4K IEdvb2Q= IENhcA== Lm9wZW4= ZWxscw== INCw0LQ= IFNlcnZpY2Vz CXZvaWQ= IGV4YWN0bHk= IE1lcg== IENvbXBhbnk= IHN0YXRlbWVudA== aWZvcm5pYQ== aW51 KTsKLy8= IG1lYXN1cmU= IERlcGFydG1lbnQ= IG9yZ2FuaXphdGlvbg== IOCkhuCkqg== IGRpZmVy WW91cg== IHVudGVy IHNpxJk= 6ak= 4KS+4KSX IGdyYW4= dmVtZW50 IHBhY2thZ2U= IHZlY3Rvcg== b2Jz LmJpbmQ= KCJc Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= LmNvbmZpZw== IG5vbWJyZQ== dXJ1 JykKCg== LmluZGV4 aGFu 4KWN4KSl b2Rh IExhdw== IExvbmRvbg== IGRldmVsb3BlZA== 54M= IGVudg== IGxpY2Vuc2U= KSkKCg== IHRyYQ== dXJzZGF5 YXJyYW50 KG9iamVjdA== IGFkdmFudA== OTAw IHN1cmZhY2U= 4LS+4LSj cmVzcG9uZA== J10K YXZlZA== Y2VudHI= IHBvZGVy RUM= 57uT IG1peA== 44O844M= IEZpbmQ= IHNvbGw= YXNzZXRz w6htZQ== IGVn 4YOq IGNvbnN0cnVjdGlvbg== IG1vdG9y YmV0 cGxpZXM= cmlz 4Li04LiZ INmH2YU= 4KWJ IGNsYXNzZXM= IHBvdw== aGVz UEE= YcOx 6YCB IGZu 5pyN b250YWw= IEZpcmU= J3Vu IOC0hw== IEkndmU= IHRoaW5raW5n IFBoaWw= IEJhY2s= UmVnaXN0ZXI= INeY 0LTQtdC7 IGxhZw== IGzDpA== IMOpdMOp IHNsb3c= UXVldWU= IG1lYXM= aG9y Y3V0 IGRlY2lkZWQ= 0YbRiw== IGRyZWFt IGludm9sdmVk IGRpZmZlcmVuY2U= IOC0hg== IHBoeXNpY2Fs YW1v IHJlbGV2 67aA dWVzZGF5 LkFwcA== dGhyZWFk IGlv IG5hbWVzcGFjZQ== RmxvYXQ= IGphYXI= IHJlcG9ydGVk 0L7QvdCw IHZpbGw= aXR6 b3Vs LXY= IHNhbnM= 0LDRgtC10LvRjA== IHBlbGE= IGNhc3Q= IM6t IEdvbGQ= X251bQ== Iik7 IGVkaXRvcg== IHJhdGVz 5L2N IElJ 0L3QuNKj IGludGVudA== IHNvbWV0 REM= d2Fz ZWRuZXM= PSIj RnJhZ21lbnQ= IGZpZ2h0 4LGI IGNvb2tpZXM= c3Ryb25n IGNhcnJ5 IGxldXI= 4LGN4LCf XC8= IGRpYWdu YXNoaW9u IHRpcHM= LnRlc3Q= INWl1bY= IGJsdWU= IGNoYXJhY3RlcnM= YWdvbg== 2KfYtg== aWNlZA== UVU= cXVpcw== RXN0 IHZlbnQ= MzYw 7KCB 77yb YXVnaHQ= IGdpdmluZw== ZmlsdGVy NzQ= 1ok= 5o6l IGZlbHQ= YmVs Xy4= IGRlZ3JlZQ== 0LLQtdGC 5Z+O 0YLQvtGA ICQo IGxhYg== aWdyYXRpb24= 4YOY4YOQ IHByZXNzdXJl IGNvbnZlbg== dGVjdGVk PSg= IGF1c3Np UE9SVA== 2KfYrA== 4Kqh 57u85ZCI 4LS+4LSw U3RhdGVtZW50 INC90L4= IHt9 IFN0cmVldA== LmJ0bg== IEFjdGlvbg== ICgn YWxsZXQ= KEQ= U3VjY2Vzcw== IHNlY3JldA== 7Jy866Gc NzM= IGxpbWl0ZWQ= IHR1bg== 5LuA 4KSh4KS8 IHJlbGVhc2Vk IGxhbg== IOqwgA== IHJhZA== PSI8Pw== R3JhcGg= IHPDsw== IHJlc2VydmVk Y2FsbA== IE1hdA== IHBhaWQ= ODQ= 4KS+4KSw4KWA YWxsYQ== cmllcg== UmVjZQ== IGthbA== aWFy UkVE YnU= KSkpOwo= 5pS+ IFNob3c= INC/0YDQsA== 6L2v5Lu2 IG1hc3Rlcg== QWRtaW4= TmV0 YnJl IGJ1ZGdldA== IHNvbG8= cGFzcw== IE9O IEJhbms= 16nXqA== IGRyeQ== Tm9u w68= dXNp 4KWN4KSv4KS+ cGFyZWQ= IENhcmQ= 54ix5b2p56Wo RXM= 6Z2i 4K+L IFZhbHVl IGZ1bmN0aW9ucw== 0L7Qu9GM0Lc= bGll b2xp aXZlcnNl X3Rlc3Q= IHN0b3JpZXM= IFBvaW50 X2Vycm9y aXhlbA== U0VMRUNU IG11bA== TmFtZXM= 1aXVvQ== dmVudG9yeQ== IHRvd2FyZHM= INij2Yg= IFZp IHZpZWw= aG91c2U= ZXNvbWU= 4YOj4YOa4YOY IGdlbQ== IHN1c3Q= d2hpdGU= ODE= YWNoaW5l U2NyaXB0 ZGlzcGxheQ== b3JnYW4= Y2FzZQ== bGlrZQ== b3JpdGg= 5Ys= IEluc3RpdA== b3Vw 4LmD TW9kYWw= UkVT 16LXoA== IFZlcnNpb24= IG1vdGhlcg== IG1pZGRsZQ== IEV0 LnByZQ== INiq2K0= ZXNzZQ== LlRhYg== 4LWH4LQ= 5LqO cmVxdWlyZQ== 4LWB4LSf KGl0ZW0= LnNhdmU= NzE= LkNvbnRyb2xz d29yZHM= IHNwb3Q= IHVuaXZlcnM= IGN1bQ== ZsO8 IOCujg== bG9z YW1pbA== IHZpZGVvcw== YmI= ZWRuZXNkYXk= IOCknw== IHdlbm4= eW9u 5oqA IEhv 4Kqf MTkx IHN5bWJvbA== IDoK 5Zy6 2KfYsdip ZG9j IHBvc3Rz amFy 0rc= ZXNzYQ== Jyks ZWNhdXNl IENI LUM= YXph 566h X29u KGlucHV0 IMOJ 6Ig= IE1v aXp6 INaH UkVG UmVmZXJlbmNl dnI= 4Ka+4Kef IGRvbGw= IFVt cm91Z2h0 IG1vdmluZw== 4LC/4LCV IHNvbWV0aW1lcw== IHNlbmRlcg== b3NpdGlvbg== IExlZw== 77yBCgo= IHBt IHNwZW5k 1aM= IGt1cg== 0L3QsNGH IFBvd2Vy 0YvRiA== c3RyYXA= IHJlcGxhYw== TG9j IGtpdGNoZW4= bmVs IGV0dA== IERldmVsb3A= OTI= IGNvcmU= IElucHV0 d2Fu 5ouN IE1heA== IGdyYW5kZQ== 0YHRgtCy0LA= IGtvbnQ= IENsaWNr IExhbmQ= INCw0Lo= 2YrZgQ== Lyoq IGdvZWQ= IOCmrQ== 4oQ= bGluZXM= YWxlcnQ= 2LHYqg== IElQ 4YOU4YOg4YM= IG1haWw= dWxhdGU= IG1heWJl aXBlcw== IGR1bXA= IildCg== ODI= X3B0cg== IHVuZGVmaW5lZA== IENvdXI= IGJhYnk= 5byA5oi3 4KeN4Kaf 77+977+9 IEFwcGxl peCrgA== Y29pbg== ODM= IEZyYW5jZQ== 5bs= 5Lqk ZmVyZW5jZXM= 5Y+4 IGRlY2lz eWFu Q2hhbm5lbA== ZGV0 15nXkw== IGNvdXJz IHNhdA== IE1hcnQ= QVNU YWxsb2M= IHNvZnQ= IGdyYXRpcw== ZWxsaWc= IG1vcnQ= IHNob3du IFRhc2s= bsOp 5ri45oiP 6ao= cm90ZQ== UGF0 5Zue IG9ucw== 4LC+4LCo TGlrZQ== LXRpbWU= YXRhbG9n 56k= ZXN0cm95 xZ4= IHBlc3Nv 15nXldeq MTQw Lmp1bml0 UGFyYW1ldGVycw== IHsKLy8= 1aw= 5q2j ZWNo TFM= SW5pdGlhbA== IGh1bmQ= IGdhdmU= IHNhbXBsZQ== 5b2V 4LSZ4LWN4LSZ YW1pZW50bw== YWxsb3c= LnN0YXJ0 4LGC4LA= IEVkaXQ= IGd1YXJhbnRl IHNwZWNpZmllZA== bGFuZHM= ZXNpcw== 4YOU4YOT IGdlZW4= ICAgCg== dHU= IGF0dGFjaw== IFJlcXVlc3Q= w6lyaWU= KCkpOw0K dGVk eGlz IEphcGFu IHJldmU= INGB0Lw= d3k= YWU= 4LGB4LCy 5oC7 54Sh IEZlYnJ1YXJ5 IHByb2Q= 0LDRhw== YWJldA== Ll9f IFRhYmxl aWV2ZWQ= IF0K ZXJhcA== c2hvdA== 2YA= IHZz KHZvaWQ= 668= IGRldmljZXM= Ig0K IOuq 4YOd4YOT IGFzc2Vzcw== IG11bmRv w4c= VEE= IOCwsA== XHQ= IHN0cmFpZ2h0 U0M= IGNvbnRhaW4= IOCqlw== INW+ 4KWN4KSu 4Kq2 IEV1 Q29ucw== 4LS/4LSw cm9vbXM= IGJleg== IEhhc2g= INCw0Lc= SWRlbnQ= UGxheQ== eWk= IOC4hA== IOCmiQ== IHBsYW5uaW5n IGh0bWw= IHBpbg== luGDlA== IHJlc3Ry ZXF1YWxz UFA= 4LmI4LiZ 0YDQsNC8 IHByZXY= IHRpamQ= IE1lZGlh IGxheWVy IHR3ZQ== IGxldHRlcg== RUU= 4K6/4K6V IGFkanVzdA== 5aSc mow= Y29tbW9u 5aaC IENP b2Nh 4YOd4YOV IHJp IG90aGVyd2lzZQ== ICIiOwo= YXRpdmE= IHRvdQ== 4YCV QXJlYQ== INmF2LM= IE1pbA== aWN0dXJl IGhvcA== YXLDoQ== 4Kq+4Kq1 YXlv IGJlY2FtZQ== LmVuZA== ZWxu IGRlbnQ= IHBhc3NlZA== IEFyY2g= 44GC IFRoYW5r IHBvbGljZQ== IGhlbHBmdWw= b3V2ZXI= 4KS/4KSw IGV4cG9z IGRldXg= IHJhbms= zpU= UVVF 0LDRgtC4 ZG9vcg== dWtl IGNhbXBhaWdu SU1F b21pYw== 4YOQ4YOX Z2l0aHVi ZnJvbnQ= IGNvdXJ0 L3Y= LVA= IGdpZnQ= 7LY= dXNh LkxvY2F0aW9u 2YTZgQ== YXRvcw== IHBhdGllbnQ= 6K66 IHNwb3J0cw== IHNheWluZw== IGJyb3dzZXI= IEFQSQ== IGFudGk= b2Jl IHN0ZXBz IHN1ZA== IG1vZGlmeQ== 0KQ= IHVuZGVyc3RhbmRpbmc= aWRlbmNl aW5hcw== IGFkbWlu INCx0LXRgA== IGlh IHVzZXJuYW1l aXNw IFllYXI= IFNpbA== aXRhcnk= dG9rZW4= LnNwbGl0 5byP 0YPQu9GM IFByb2R1 IENhbmFkYQ== RGFv aG4= IGNvbnRyYQ== IOCmsA== LS0t IElP IHJpY2g= RGF5 4YOo4YOY RFI= YXdu IGxhYm9y IGRhbWFnZQ== 4LSm IHNhdQ== w6Zy IOyD X3N0YXR1cw== IGFjdGlvbnM= SUxJVFk= 44O744O7 bGFz IHF1ZXI= IGN1YWw= MzY1 IGJlZ2Fu Q29tbWVudA== 4bq3 c3RhbnQ= 0LXQtQ== IFN0YW5k IGFyZ3VtZW50 b2xvZ2llcw== IGVlcg== b3Jyb3c= 16LXnw== IHNtbw== IHJlZHVjZQ== 15nXog== bWl0dGVk 5aM= ICgq 6K+3 Y3JpcHRvcg== 2YjYuQ== 4LCC4LCm 44Ki INGB0LLQvg== IHR4 IGNvYWNo IGJ1c2luZXNzZXM= IGrDoQ== aW1vcw== IEdyZWF0 ICAgICAgICAgICAgICAgICAgICAgICAg L3c= IHBhbmVs IHRhbWJpw6lu 6KM= RU8= IHNlZA== ZW5zZWQ= IGZ1cm4= dHlwZXM= TWF0cml4 4K6k4K+N4K6k KHJlc3BvbnNl IGdlbmVyYXRl IGpvYnM= IFNP IG5hdGlvbg== 0ZbQtA== PXt7 IH19 ZXJhbA== b2JpbA== a2Fy 4oCZaA== U1FM IENocmlzdG1hcw== SG9sZGVy 4KWD IENPTQ== UGFuZQ== YXppb25l IGluY29y INC80YM= dWx0aQ== cm9uaWM= 55uu IG5hZw== J2E= IENhbGlmb3JuaWE= IHBpY3R1cmVz cGl0ZQ== V1M= 1aHVow== IG1pY3Jv Y3A= 2YXZig== 66eM 0L7QsdGL IGFybQ== KGphdmE= acOw b3Zlcm4= IHZvcw== 44GP VHJhY2s= 5qM= IFR3aXR0ZXI= XTsKCg== IHByZXNpZGVudA== bGVnYWw= cm91dGU= IE9z cmV3 IHdvbmRlcmZ1bA== IG1hbmFnZXI= IHRyaWVk ZmFzdA== IE90aGVy IGRpdmVycw== IOCqueCqpA== INmF2Ko= Jyk7 b2dlbg== IO2V IHBvbGl0aWNhbA== QUNF IGNvcnBvcg== IGJsZQ== LkxhYmVs 5omL5py6 4LWB4LSV 6YCJ IGNvbXVu Y29tbWFuZA== Um9sZQ== IHByw7M= 4YOQ4YOi 4KWN4KSy IHsi IGN1cnI= IHDFmQ== IFNlYXJjaA== IHN1cHBseQ== IHRob3Vz YWNsZQ== RHJhdw== 0pPRiw== IFdvcmQ= IGNvdXQ= IHNlcnZl 2YjYqg== KCIu IHJldHVybmVk IGhlYWx0aHk= UGFyZW50 IHRpcA== IGh1cw== cWFy dXNpb24= 0L3Rg9GO IG5hdg== Z3JhZA== IHBsYXllZA== IGFkdmljZQ== 4KS+4KSl QW1vdW50 bXV0 IENvbmZpZw== INmF2LQ= IGJlcmU= IGJlZ2lubmluZw== 0LDQtdGC aW1pbg== IFdhc2g= IGRvbA== aXRhbg== IGNlcw== aWFubw== 0LjQu9Cw LkNvbXBvbmVudA== INmI2Ko= IEplc3Vz 4Kav4Ka8 IHJlZ2FyZGluZw== IGJlbQ== IGNhcmRz IGhlYXJk 1bk= 5a6i OTQ= QnRu IEFyZQ== obA= IGRyZXNz ZXN0bw== SUFM IHRyYWRl IERhdmlk VXNlcnM= 5LuA5LmI R3U= IGxheW91dA== IFdoaXRl IEJldA== IFN1bmRheQ== IGVpZ2Vu IG1heGltdW0= IHZlYw== KE4= IHBhbmQ= TEM= 6Kej 0L7RgtGA xLFuxLE= a2c= 4K+K 4Ka+4Kas OTM= IGxhcmdlc3Q= 4LKX4LKz IHNhdmVk IFJlcA== 15nXkQ== IOCksuClhw== YXNpb24= YXJpbHk= SVRF 2KjZhA== 6aG1 IG5lY2Vz IGdyaWQ= zr3Ovw== 1bjWgtWp1bXVodW2 IHByaW5jaXBhbA== LmZvcg== IHNwZWFr YW5naW5n IHZlbmQ= RnVsbA== c2hvcA== QW5n INC/0L7QvA== 6Zmi IOq3uA== INCt aXN0ZW4= X2NsYXNz 5riv IGFydGljbGVz cG9yYXJ5 IGdyb3dpbmc= X2ltYWdl IElucw== IGhlYXQ= IHBhaXI= IOGDkQ== J2g= IHF1ZWw= IFRleA== b2th RFRP R2U= c2hvdWxk 1aHVrA== Tm93 IGl0ZXI= YWxsZXJ5 IGx1aQ== 15nXkA== IH0p X3Jlcw== 4LS/4LSy4LWN CQkNCg== Qnl0ZXM= wrss b3Nlbg== IGRhbm4= INGC0YA= IHRyYWRpdGlvbmFs IHByb2R1Y2U= IGJhbGFuY2U= Q09O zrXOrw== IGJhdA== UG9w IGNoZW0= IGRlY29y U3RlcA== RHRv IHdyaXRlcg== 0Y7RiQ== IHRpZW5l IHdhbnRz IM+EzrfPgg== 4Ka+4Kam T25seQ== IHJ1bGU= IGFwcHJlY2k= IGV4aXQ= IE9wZXI= IGZlZWxpbmc= Y2lv 0Y3QvQ== dXNlcm5hbWU= IG1vbml0b3I= aWRo IGFsZQ== IHRhbQ== IGVycm9ycw== cHJvamVjdA== CQkJCQkJCQkJ 5Lit5paH IHdlZWtlbmQ= IEV2ZW4= 4KSV4KWN4KS3 T3BlcmF0aW9u IHNhYw== X19fX19fX19fX19fX19fXw== IGNvbXBvbmVudHM= ZXJpYWw= MTI1 LlZpZXc= c2l0ZXM= 6ICB IOyc 05nQvA== ICAgICAgICAgICAgICAgICAgICAgIA== U0E= IGZ1ZQ== dmlu INC/0L7Qug== IG1lcmM= IHRvdXM= INCx0L7Qu9GM aWVudGVz IGhhc2g= cG9s IOC0quC1jeC0sA== IEhh Q3VzdG9t IEFzc2VydA== IHZpdg== b250bw== IG1lY2hhbg== 4Ki/4Kg= b3VzbHk= IGZ1 YW1vdW50 Qnl0ZQ== IG92ZXJhbGw= KEE= aW5oYQ== 5LmL xLFt b29scw== IENsdWI= YWhhbg== 0LDRgtGL aWVsZHM= IE1vbmRheQ== IHRlbA== c2Vn aW5saW5l dm9y zqM= IGNvbWZvcnRhYmxl IFNhdHVyZGF5 5ak= 4LKs dW5kZW4= ZGFn 5aSW IG7DpA== aG9z Pz4= IGltbWVkaWF0ZWx5 Y29z YmQ= IOCkqOCkueClgOCkgg== IE9yZGVy IOKAnQ== 4Lif4Lij4Li1 IEZsb3I= 0ZbRgA== IGdyZWF0ZXI= aWxpbmc= IHRlc3Rz LmJl 0L7QvdC4 bmVo IFNpZ24= YW5uZWxz IOWI IHNhbmQ= UlQ= 4LS/4LW9 Lmhhcw== IG1pbGVz xaU= IHNxbA== IGHDsW9z 4YCZ IGFncmVl 6Zeo dHlwZWRlZg== INCy0YHQtQ== w7x0 ZW1vbg== IEF1dGhvcg== IGZhYnJpYw== aW1wbA== IHNwaXJpdA== U3VwcG9ydA== bGVl 4Lia4Lit4Lil 2YLZig== IHN0cmF0ZWd5 IGNlbA== IFRlYW0= IGzDrQ== 4YOj4YOa IGlra2U= 7LA= 6L+H ZXJuZWw= ZXJp UE0= IGluc3Ry INCb U2Nyb2xs 1aHVsA== 6Io= IGZpcg== IGVtcGxveWVlcw== INiq2Yc= IGV4cGFuZA== IGRlbW9uc3Ry LS0tLS0tLS0tLS0t cGxpYW5jZQ== 0ZbQtw== IEVkdWM= IOCkmA== IM6xz4A= OwovLw== 7YQ= INC60L7QvNC/ IGxvb2tlZA== IGNvbG9ycw== ICQoJyM= IHR1cm5lZA== IGthcA== U3RyaXA= IHJldg== IEVhc3Q= INC00L7Quw== TWFwcGVy Y24= YWx1 IGJhdHRlcg== 0Y/Qsg== IGNlcg== U2F2ZQ== YWxhbmNl b3Npbmc= Ym9vdA== 6rE= IikKCg== 1bbVpdaA1as= IGhvc3BpdGFs IHN0YWNr IEJh muGe X2NvbQ== 06nQvQ== 4KWN4KSV RGI= 2KfYtA== c2NyaWJl Um9vdA== CXRyeQ== IGxvdHM= IEJvYXJk cGxhbg== INim 2YfZhg== IE1lbg== IOCqruCqvuCq V2VpZ2h0 aGVsbA== 5rY= IGNsaW4= aW5kaQ== eyI= 0LjQutCw IGNvbm4= IGRldGFpbA== X2E= X2k= IG1lc3NhZ2Vz ICdc IHJlbGk= dGFyZ2V0 YXJsaWVy IGNhc2E= IHJlcXVpcmVz INCl 4pQ= UGVyc29u eW9uZA== IGpvdQ== 1bo= IFBsYW4= b21hcw== IGxvdmVk YXZhcw== 7ZQ= fQoKLw== IE1hcw== IEphY2s= 4YOQ4YOg4YOX IHNlcmlhbA== IG9mZmVyZWQ= 2YjYp9mG IGN0eA== ISEh IHNoaXBwaW5n IE5vZGU= CXdoaWxl xLFuZGE= IEJ1aWxk 54mM aWNpbmc= 77yR ZWdlbg== IHR5 am9pbg== IOGDrg== 4KWH4KS2 PHN0cmluZw== IFR1cg== cnVt LWs= IGluc2VydA== IHBzeWNo IHNjZW4= IHRvcGlj IFNI 4YOY4YOq YXJhbg== xrDhu6M= IHNvcg== 4KS3 IHJlc3BvbnNpYmxl dXRpbHM= IG1hc2s= IHV3 ZWN1dGlvbg== IGxvZ2dlcg== LmNv IG1lYW5pbmc= IHRyYWJhbA== IEJ1dHRvbg== IFNleA== IGdleg== IE5F 4oCdLgoK 4KeB4KY= ZXJ0YWlu Ijs= tIA= 0KU= ZWxjb21l X21vZGVs zqA= V3JpdGU= KXsNCg== IGhhY2Vy 4KeH4KaV Y2xlcw== LmZyb20= Y2VsbA== 0Y7RgtGB0Y8= X3Blcg== dW1p 16DXmQ== 5LuK IHBz 4K6/4K6w w6Rocg== IHZvbHVtZQ== 6L+b INmF2Kw= RG91Ymxl X3N0YXJ0 UGU= INC40YHQvw== IGV5ZQ== ICIr IHRoYXQncw== INin2YTYtw== INC10LPQvg== 0YHRgtCw0LI= IHJlYWRlcg== T1ZJRA== Y2F0ZWdvcnk= Y2hpbGRyZW4= IEdyZWVu d2luZG93 IM+EzrfOvQ== CXBybw== IOWu IFNvY2lhbA== ZW50aWNhdGlvbg== IG5rZQ== IHRydWx5 aW5kZW4= IExhcw== Qml0 IGpz 0LjQutC4 IGRpZXQ= IHBpbA== eHR1cmU= IFdIRVJF l+Cwvg== b3Rp IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IHR2 2YXYrw== IOuMgA== aXJjbGU= IEF1dG8= IHJlcG9ydHM= YXRpY2FsbHk= IikpCg== 5omA IGnDpw== KHBhdGg= T1VS eWxlZA== IENvbXBvbmVudA== 6rWs IGd1dA== YW5qZQ== aWNpZW4= 5Y+W IG1ldGFs MTA4 LmpvaW4= bWVyY2U= wro= 4Lit4LiV 0LPTmQ== w7Nn dW50bw== IHJlY29u aWVycw== IENvdW4= LmNvbXBvbmVudA== 0YHRgtGA am9u YXBhdA== 0YLQuNCy IG9wZXJhdG9y 4YOZ SVZF IGdsYXNz w61zdA== INCx0LXQtw== 24zYqg== 4bur d2Vu IExhdA== 5Y2V IHRpcG8= bGVtZW50cw== IEVuZ2luZQ== LmNsaWVudA== QUxVRQ== IEZ1bmN0aW9u IEtvbQ== Ymxpbmc= LndpZHRo IGVzdGlt 4LC+4LCw4LGB 4oCZw6k= IOu2 KSo= Lmh0dHA= IGd5 VmlkZW8= IHBhcmFtZXRlcg== IE1hbnk= 7ZmU IEF1Zg== IGNhc28= IGVsbGVy 4LK/4LKV aWNoYWVs WWVhcg== IGludmVzdG1lbnQ= INeQ1rc= RkM= IGZlZXQ= w7R0 IOq4sA== J2Q= cmFhZw== IHNldHVw IGF1ZGlv INCx0YvQuw== 15XXpw== QlM= IGV4dHJlbWVseQ== IHByw6lz 5piO 0L3QuNC6 7Yw= 4K6/4K6p KEw= IHZhcmlhYmxl IHNldHQ= IGd1aWQ= IOCkjw== IFZpZGVv IGFwcHJvcHJpYXRl IGNlbnRyYWw= YXp6 INmE2Yc= IG1pbmltdW0= IFJlc2VhcmNo IGVhc2llcg== 2K/ZhQ== IGRpc2Vhc2U= LnRhcmdldA== IGdhbA== IGlzbg== dW5kZXI= 0LXRgtC1 IGNvcnJlc3BvbmQ= xak= z4TOuc66 0YHRgtGM PSIv YXRldmVy LmRhcnQ= JywNCg== INio2YY= IGtlcg== b255bQ== IHBhw61z Rkw= IHJldHI= IE1ldGhvZA== IGVwaXM= Y29y INmG25I= aXRhcw== YXJnbw== IHBsYWNlaG9sZGVy c2VsZWN0ZWQ= IOCqhuCqtQ== VFM= X3Vu IGRlbGxh IGNvbXBsZXRlZA== IHdlYXRoZXI= 2LXZhA== Lwo= aXNoZXI= IGdydXA= w6ty JSUlJQ== 2LDZhw== IGhvdXM= 576k aW50ZXJmYWNl IHByb3ZpZGVy Lmxhbmc= a2VpdA== YWF0cw== IHByb3RlY3Rpb24= 4YOT4YOQ ZWxpbmc= dGVl Ym9vbGVhbg== RUNU QCI= Zm9ybWVk IE1pdA== J20= d2lkZQ== LlN0cmluZw== IGFsYnVt IGVuY29udHI= RXZlbnRz LnVp 15DXqA== bWV0YQ== IGFkYXB0 IHdhcnJhbnQ= INCy0L4= 2LnZhA== RG9j IHRlbXBz L2NvcmU= INC/0YDQsNCy U2NhbGU= 2YvYpw== IGVkZ2U= IGhpbXNlbGY= 562J SXRlcg== aWt1 w4M= IGtvcg== IHRoYW5r RXJy cGFyaw== cmVuY2g= IOCmsg== IGR1cmFudGU= INCy0YDQtdC8 IHNjaG9vbHM= IHNjZW5l IGJvbnVz w6Ft IFdoZQ== 4KWH4KSy w61jdWw= aXNlbg== bW9kYWw= dW1pbmF0ZQ== 0LvRgw== U2NoZW1h YXNpbA== IOS4 4LK/4LKv IGVsZWN0cmlj 4LK/4LKX LkV4 IOWQ IMq7 IGtuZXc= Q2xvc2U= IG9sZQ== IGluY3JlYXNlZA== 0LjRgtC10Ls= 4YOV4YOU4YOa ZHJhdw== IG9wcG9ydHVuaXRpZXM= IHNlY3Rvcg== IikNCg== X2Ns RG9u IG5haw== IGluZ3JlZA== IGRpYWxvZw== INGA0LDRgQ== IHdpbmQ= JyktPg== IHZpZA== IEZyYW5j 2rs= IE5ldHdvcms= QWM= IHNjaWVuY2U= IGNvbXBhcmVk dWly 4KWB4KSo 7IaM IHN0dWRpZXM= IHNwZW50 INC40YU= ZWFybg== IGZhcm0= cmlhbg== IENhbXA= b2lk IGVh YXJkZQ== IGVhdA== IGFsb25l 4bubaQ== Iwo= IC8+ IGNlbGxz INC/0L7Qsg== dW5uaW5n IGJyb2Fk IHNjaWVudA== IFNvbg== 2LPZhQ== IE1hbmFnZW1lbnQ= Q29uc3RhbnRz aW5jdA== d2Q= dGVncg== dWx0dXJl LnByb3RvdHlwZQ== IHZpc3VhbA== IGJvdA== dmVydGVy IG9mZmVyaW5n IOCkoQ== 4YOs b3Zlbg== 2KfYsduM LVQ= LmNvbW1vbg== 0Y/Qtw== IG1lam9y 15nXnw== SFA= IGNybw== IFJlc3Q= TWFy IHRlYW1z IExvY2Fs 44Gd IEZvcmU= IGZhbnM= IEF0dA== Sm9i IHBhZA== IHdv IGxpYnJhcnk= aGVscA== ICcj zqQ= IHJhY2U= IDoKCg== VGltZW91dA== cHJpbWFyeQ== YW5pYQ== IG3DqQ== dXBsb2Fk IGluY3JlYXNpbmc= 5rw= X2RpY3Q= IHppY2g= IGFubm91bmNlZA== IG1hbmQ= 4LSf4LWN4LSf YW1pbmc= IOWkqeWkqeeIseW9qeelqA== SmU= IEJF IGdyYWR1 QUlM IEN1c3RvbQ== IFN0YXI= Lls= IG1hYw== IGZpZ3VyZQ== IGJyb3VnaHQ= 4K6o4K+N4K6k Q3Jl aW1lc3RhbXA= IElN IHN1bA== IEty 2YHZig== TG9nZ2Vy 5o2u IHR4dA== LlNl YWRvcmE= IGVjb25vbWlj 6K6w IMO6bHQ= 5LuW L2c= 6ZW/ YW1lbg== IGN1YW5kbw== IHZhc3Q= IGF0dHJhY3Q= IGJlYWNo YXNrZXQ= 4KuN4Kqf 57w= aXpp IE9L IHdldA== YXlsb2Fk IExpbmU= 5Yqb LmV4YW1wbGU= aXNzZXQ= 0L3Ri9Kj IM66zrE= IHJvb21z IENhbQ== IChf ICIj aXNpcw== aXRldA== IGlsZQ== Y2FyZQ== UHJvZ3Jlc3M= aW5zdGFuY2U= 4KeN4Ka3 IOCypA== IE9mZmljZQ== 2YLYqg== IFBhdWw= 4LS+4LSj4LWN 4Ka/4Kaw 5YWt IGdvYWxz z4TOuQ== IGluY2w= LmJ1dHRvbg== c2VuZA== IOCmj+CmlQ== 5Lit5Zu9 TGVz TWVtYmVy 4YCU c3RydWN0aW9ucw== IFllcw== ZW5hcw== IGFwaQ== ZW5kYW50 IHB1bGw= Y2hvcg== LnBvc3Q= IHBvbGlj 2YHYsQ== bGlzaGVk IGJo 2J8= 5bCR X25vZGU= 0LXQuA== YWhp 1aXWgNWo IHdpcmU= IGxvaw== 4YOY4YOg 66y4 TmE= ODg4 4Z6A 4oCZYQ== IHNwcmVhZA== IG9mZmlj IENvbnNvbGU= aW50YQ== IFdlbGw= aWxpYXI= IT0= 0LXRgdC/ IGlkZW50aWZ5 INSx 4Lil4LmH aWFucw== INis2Yg= 5YyW IG9jY3Vy IOC4gQ== LWNlbnRlcg== IGNvZmY= ZWdh IHt9Cg== 4Ka2 7Jes IHJlbGF4 IGxpc3Rlbg== IG11cg== 15XXpA== IHJhdw== IHJlc3A= eWs= INCy0LjQtA== UGFyc2U= IGRldGVybWluZQ== IGVuYWJsZQ== LmZy IEphaA== RmluZA== IGZlbA== bGljaXQ= 7JeQ7ISc w7xuZA== MTA1 Li4KCg== IGdpcmxz 5qyh UmVsYXRlZA== LkFz IFBS IHNob290 4bqldA== IGVsbGU= IFF1YWw= IGxvb3A= IGhhcm0= 5Zub b2RlZA== ZXJzaXN0ZW5jZQ== IOC4ow== IEdsb2JhbA== b2x2ZQ== ZW5hbmNl zq/OvQ== 2K/Zhw== XTs= RW5j xrDhu50= ICkKCg== INqp25A= IGVzdHI= SW5zdA== IExpbg== cm9rZQ== 4KSl INWh1bY= IGxs SG9zdA== 0L7RgNGC UGVybQ== aGFuZGxl RnJlZQ== U0VU 4K6a 4LK/4LKm4LON4LKm IG5hbWVk IHdheA== LnRpbWU= b21pbg== dWdn bnlh 2K/Zig== IGlocg== RE8= IHRlc3Rpbmc= IG1pc3Q= Y29uZHM= U2Vn ZWo= a2l0 IOCyhg== X2NvbmZpZw== ICQoIiM= L2Y= IEFU IHN0ZXI= YXVnaHRlcg== IERvd25sb2Fk IHN1cnY= LnVu dXR1cmU= w7pz IHNhcg== IGZhbWlsaWVz 4KWN4KSq X2xlbmd0aA== aWNpw7Nu eXRob24= 4Kak4KeH YXBvbg== IERC IOWkpw== IElr IGRpc2NvdW50 IGJlbmVmaXQ= YW50ZW4= IHNvdXJjZXM= IGZvcm1z IHdpZmU= aWxlbmFtZQ== IHNlaHI= IGNvbmNlbnRy IGN1cA== IGFmZm9yZA== amVjdGlvbg== Q29y YnVyZw== KGV2ZW50 b2Vz IHN0YXRpb24= TUQ= IHBvcHVsYXRpb24= 5pe26Ze0 IGxhdW5jaA== IG1w LnRpdGxl 4Liy4LiB 5Zk= ZnJhbWU= 4LW7 4KS/4KSC dG9y 0pvTmdCw U1RS 4KSk4KWN4KSw IG1vbnQ= IEVhY2g= 54Ot ZG9jdW1lbnQ= IEphbg== b2xhcg== Lk1vZGVs 0L7QstCw0YLRjA== IGRvbnQ= 4Kq+4Kqv IHRlbXBv INi2 pJE= IFRydW1w IGFuYw== ZW1wbw== IGF3YXJk 5o+Q546w X3N1Yg== b3Rvcg== YW50aWM= IGltcGxpZWQ= CXNlbGY= 4Lix4Lia 2YfYsQ== IFdJVEhPVVQ= ZXJzZQ== 6auY5riF KHR5cGU= IGluY29tZQ== 4KS+4KSq aWpv 0Kc= KV0K IFtdOwo= IFJvb20= IHVi LCQ= IGJ1aWxkZXI= 4YOd4YOa YXRpdmVseQ== 0YPQsA== LWxpbmU= 0L7RgdGC0LDQsg== X0VY IHdlYXI= IHVuc2Vy cGx1cw== U29ydA== w61t aW5lc2U= YWxsZXI= IHNob3BwaW5n YXNoYm9hcmQ= IGJvdW5k IGZhdGhlcg== aWdpdGFs Z2lu IGF0w6k= UmF0ZQ== 55S3 IGJleW9uZA== b3lhbA== IOCwquCxjeCwsA== IOCkr+CkuQ== IHVsdA== b2d5 IGdhaW4= IHRocg== X3Jlc3VsdA== 0LDQvdC40LU= IGNvbGxhYm9y 4LOG4LKv X0VSUk9S IFN1bg== IHBvd2VyZnVs 66eI 4Kqs bWVudQ== aWZvcm0= cHJvZHU= IEdhbA== TG9hZGluZw== X2s= IGJ1cm4= IGhpZ2hlc3Q= IOC4rQ== ICcuLi8uLi8= IEdvdmVybg== IGJ5dGVz Y3JlYXRlZA== IHRlbnQ= IERvdWJsZQ== INCw0L0= IGxvYW4= aWN0aW9ucw== ZXJyb3Jz LnNlcnY= IGZhY3RvcnM= IHd1cmRl aXF1ZXM= IGd1eXM= 4Kaa INi52YTZig== 15XXqQ== IG1hbmFnZQ== LmRyYXc= 16LXnA== IGVl 2r7bjA== IERlc2NyaXB0aW9u IGVq IGNhbGxz IGJlc2No d2lu dG1w IOGDkOGDmw== INiq2LE= IGdlYnJ1aWs= IG1lcmU= IERldg== 4K6Z 6Zo= aXTDoA== X08= Pns= IGFub3M= 56aP LmhlaWdodA== ZW5lcmF0ZWQ= IGZpbmlzaGVk IG5lYXJseQ== IGNvbW11bmljYXRpb24= IOGDqQ== YXRy IEZ1bGw= 1aI= ICAKCg== IG1lbWI= X1BSTw== CXI= IHRhbGtpbmc= cmVo IOCwhg== 4LSk4LWN IHRyYWZm INWp 5pu0 zrzOtQ== INC90L7Qsg== IGNtZA== cmVtZQ== IGltbWVy IHRoYW5rcw== aWNrZXRz 4Lij4Liw 2LPbjA== 4K+I4K6v 5rCR IHNjcmlwdA== IExpZmU= IHJlYXNvbnM= IGV2aWRlbmNl 2K7YsQ== 2KfZiw== IOCkleCkvuCksA== TElD X3RhYmxl IHJlY29yZHM= IHZvaWNl w59lbg== QmFja2dyb3VuZA== IGZhdg== MzUw IGxhY2s= YWFs ICIu aWZpY2F0ZQ== aGVpdA== X251bWJlcg== 7IS4 IHF1YW5kbw== IG9iamVjdHM= 2YPZhA== Y3Nz 5Yqh 0YHQuA== bm9u aWN1bA== IG1pam4= IGfDtg== w6RuZw== INC80L7QttC90L4= IGZlYXI= IHZpbA== bmRlZg== dGVyaW9y 068= aWdp 7Iug 4KSH 5LiO QXA= R2Vu 6KI= 4YOU4YOR4YOh 1aXVsg== 5b2T IGRpc3Bvbg== TGF5ZXI= Lm1lc3NhZ2U= cmVkaXQ= IGV4cG9ydA== 5bGx YW5uZWQ= IGLhu6U= IHNwZWN0 IHZlcnc= IFByaWNl IGFpbQ== IGd1YXJk J10p ICIk IG5vcg== 5ZOq IGh1bmRyZWQ= INC60L7RgA== aXRhdA== KF9f IGhhc3Rh YXJw T1U= YXRlZ29y 5rc= bGV0ZWQ= 5b6X IGV4cGVyaWVuY2Vk IHRyaWFs 44Gg IGFnZW50 IHJlYWxpeg== 4Ka+4Ka4 IHBhcms= 2KrZig== IHBlcm1ldA== IGVuZGw= 5o6o INio2LnYrw== dWxlcg== 64+Z 4Lax4LeK IHJlcGU= IGluaXRp IGdlZA== 4oCZdW5l IHdpZWRlcg== IGtpbA== IEdhcg== IG1ha2Vu 4LK/4LKo IHRlY2huaWNhbA== W2luZGV4 YXVj RW51bQ== w5M= IGRvbWFpbg== IEdlbg== IHZhbG9y MDAz dWVudA== X21hcA== Vm9s 5q+U IGhhYXI= IHJhZGlv IOW+ YWJpbGl0aWVz 15XXmQ== 4Lil4LmH4Lit4LiV INiz2LE= 7YSw QUY= IEV1cm9wZWFu 0LrQvtC5 IFRvbQ== IGRldGVjdA== QUJJTElUWQ== dXRvcw== cGhlcmU= IHdlZXI= 7ZqM UnVsZQ== IHNlY3VyZQ== IEVuZXI= 0L3QuNC8 Z2xvYmFs 0L7QtNGD b21ldHJ5 44GN Zml4 c2Vzc2lvbg== 4LiB4Liy4Lij LkNvbQ== Y29tbW9k IGxpZg== cHJvcHM= aXR1ZA== IE1pbGw= X2Nhc3Q= INC60L7Quw== YXBlcw== QW55 IOCqleCrhw== 4LOB4LK1 56We LXNo Q29uZA== cGVjdGl2ZQ== RVRI IGNhbmNlcg== Lk9u 4K+B4K6k KS8= 6ams IGRpY3Q= RWRpdG9y IHByb3Bz IHsn IEJveA== Lm1heA== IHBhcnRpY3VsYXJseQ== IFRleGFz IFdhc2hpbmd0b24= c3VjY2Vzcw== IGZyaWVuZGx5 IExvb2s= 7Jqw IGluY2x1cw== 0LXRhg== Ymlu dm9pY2U= 2YTYqA== YWN0aXZpdHk= KSk7 U2s= IFBsdXM= PSJ7ew== YWxm dXdl X2Zvcg== dmlzb3I= IOCyhw== IHJlbW92ZWQ= ICAgIA0K IGVzcGVy 6JA= 0YPRhQ== ZW5lbg== IFVuaXZlcnM= IOCmpQ== MTAz IGd1ZXNz 2KfYsdmK IGFyZ3VtZW50cw== zp8= 4buJ IEFjY291bnQ= 2YXYp9mG IGlzc28= IHBvbQ== IHN1cnJvdW5k 05nQuw== INmH2Yg= aXN0cmljdA== 57G7 IGFwcm8= IEF1c3RyYWxpYQ== IHJlc3RhdXJhbnQ= IGpvZw== IHplbGY= INCn X19f IENhc2lubw== IGFyZW4= IOq1 aWRlbnRl 4KWN4KS4 6LWw IEJsdWU= IGFsdGhvdWdo IElzcmE= Y2xpcA== 6re4 4Kq14Kq+ IHRocmVhdA== 55u4 MDAy LmRlbGV0ZQ== ZmFjZXM= IFNwaWVs 4KuH4Kqy IHdyb3Rl IGNhY2hl dGFi 2Ybbkg== 5qE= aXJhdGlvbg== IFBheQ== 4pc= ZGs= IGltcHJlc3M= IGVhcmxpZXI= IGFncg== IGNodXJjaA== 5L+d 4Kat 6Z2S IOWbvQ== 4KeN4Kew Y2hlZHVsZQ== IG9uemU= IM+M R28= V2hlcmU= Y29udGFjdA== YcOnw7Vlcw== IGxpdA== 2YTYsw== IHNldHM= dmM= 2LPYqtin2YY= aXN0bw== wr8= 5oSP emg= LUQ= cmF0 TEE= IE1vbnQ= ZWVu IHbDtQ== IERhdA== IGR5 4LKV4LON4LI= IOC4lw== MTE1 ZXNjcmlwdGlvbg== RW51bWVy cHJpdGU= zr/PjQ== IGFzdA== IHZ1 IENvbnRyb2w= YW50ZWQ= IGFic29sdXQ= 4KWB4KSy IOCkueClgA== IGZldGNo 0LDRgNC4 ZW5kbA== YcOw ZXNzb3I= 44Os 5a6Y5pa5 6rWt XVsn 7Iq164uI64uk X2o= zrvOuw== IG5hag== IFVuaXR5 4Z6T YXE= cmFpbnRz IHdhaXRpbmc= w7xo IHDDumJsaWM= IGJvZA== IGRpc3Ry IGZvbg== IFBhcmE= IHN0cmljdA== IGJyYQ== 4Z6E Tm90ZQ== INmF2K8= IOG5ow== 4Liy4LiH 0YPQsg== INC+0Yc= KEY= IEFyZw== eG1s 0q/Srw== b2xz YXJzZQ== c2VydmU= ZGVycw== 4KSv4KS+ IHVwbG9hZA== b2dyYWY= IHVubw== 66M= 6IGU Q2hv X29iamVjdA== CXNldA== 16jXkA== 0L7Qu9C+0LM= IGh5ZA== KFZpZXc= 4bqhaQ== IHBhc3Npb24= 4LSX IHNlY29uZHM= YW5uZQ== X2l0ZW0= Y29yZXM= cmlvcg== IGxpc3RlZA== IHJlbW92 SUdO 4KS/4KS1 RU5TRQ== IGPhu6c= IGNvbm5lY3RlZA== b3JpdGht cGxleA== 0LrQvtC8 e30= IG9wZXJhdGlvbnM= IE9yZ2Fu cm9hZA== 4piF IHRlbXBlcmF0dXJl bmFt IOCmkw== IENPVklE IG5vdHJl IG1pc3Npb24= IGFjYWRlbQ== IGNsb3Vk RUI= IHNjaG9u KSks a2V0 IHBhcnRpcg== dXJlbg== IG1vbWVudG8= 56I= YW1iZGE= INqG25A= IGVzdGF0ZQ== IGphZw== 4La9 4K6q4K+N4K6q IGJvb3N0 IENhcmU= IGFwbGlj bmlz IGxldg== 4KeI IFNvbQ== IG1lc21v 4LKj IHdob3Nl YXRjaGVz bGxh 0L7Qs9C00LA= Rmlu 0YvRgQ== KGs= IEVsZWN0 aWVuZW4= zrXPgg== IGZpbmRpbmc= IGltcG9z 5pmC YW50aXR5 5q2k 4Kqz 5Luj55CG 4LWG4LSv IGhlbHBpbmc= c3RhbmRpbmc= dXNldW0= IHJlZmxlY3Q= Q29ubmVjdA== IGN2 aWd1 4LiX4Li14LmI 7J6F IGNvbGQ= ZXR6dA== PUZhbHNl INGB0LU= Y2F0Y2g= IG11bHRp IG92 IGPhu6dh 5Y2h ZXNzaW9ucw== IHZhaQ== KGVycm9y 4LmA IGd1eQ== IGNoYWxsZW5nZQ== 0LvQtdC6 IHdlYnNpdGVz b29raWU= c3RhdA== 5Zyw5Z2A IGRpcmVjdG9y IFRlcm0= Q2Fw IHdpag== IHNi X291dA== Y2hp bXU= aWN0ZWQ= IOuT LnVzZQ== 0YPRgNCw IENE XAo= IOCkheCkqA== Lm9iamVjdA== LlVzZXI= IG1vdmVk 1oc= aWVsZQ== IENyZWF0 4K6f4K+N4K6f 2YXYp9mE TG9hZGVy IGdlbmVyYWxseQ== 4Lij4LmM KHJlcQ== SW50ZW50 SGk= ZW5zaXR5 bGlqaw== IHN1cnBy IGRvdWI= INir VHJhbnNmb3Jt IGNyw6k= IO2VmA== 0LvRjtGH MTA0 IOC5gg== IFJldmlldw== IGFoZWFk IFJlcG9ydA== IGl5bw== IHNjcmU= TG9vaw== aWNvbnM= IGZhbA== Y2hyb24= UG9vbA== IGdhYW4= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IG9wZW5pbmc= w7Zz IGNvbnRyb2xsZXI= IGNvbXBhcmU= bGV0cw== 4YOd4YOg V3JhcHBlcg== IE5vdGU= CWFzc2VydA== INGN0Lo= IHN5cw== IGV4dGVybmFs IGdpYnQ= 5YWI 6YO9 IGF0aQ== aWJsZXM= TlQ= XTsNCg== L3Q= c3VibWl0 IGF0cg== IEVudGVy IGNhcGFjaXR5 56S6 aXphYmxl T1VO cHJvZmlsZQ== IExhc3Q= dW50ZQ== IG1hdHJpeA== LUs= CWxvZw== IFJvY2s= Y3JldGU= SGVyZQ== INmH2LDYpw== ZWtz IEVzcw== INeR154= w6Fn IGFwYXJ0 4LC/4LCC4LCa IOCkpOCliw== IHNjaGVkdWxl Ii4KCg== IEFM IFNpbmNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGplZw== INC60LDRgA== 4YI= IENvbnRhY3Q= IG1lbm9z IGRpc3BhdGNo ICIK IOCqpQ== IGJvcm4= dW1pbg== LmZvcm1hdA== SW52YWxpZA== ZWxlc3M= VGhleQ== RmllbGRz IGNvbmZpZ3VyYXRpb24= dWNodA== IOWkp+WPkeaXtuaXtuW9qQ== X2ludA== 4Li14Lii IFRoYW5rcw== 44K/ 0YDQvtGB IGpvdXJuYWw= 5YC8 1ak= QXhpcw== ICIuLi8= IFNpbXBsZQ== bGo= pb8= c3Vt IGdvbmU= 0YLQsNGA IG5hcg== IERpdg== IFdhdGVy IFVy INeQ15XXnw== INCw0LE= MTEy IHVk LW1haWw= YXRhc2V0 U2VjdGlvbg== 0LrQuNGF YXJnYQ== IHBvc3RlZA== 2K/Zitiv 67mE 4Kqa IHNleHVhbA== INC60Lg= SU9OUw== 2YfYp9uM 06E= IHByb2Nlc3Npbmc= LW9sZA== IGFsbG9j U20= IGFwcG9pbnQ= IE1vcg== Il0u 56S+ IHJlbGV2YW50 IGZhY3Rvcg== IHdpbGQ= IHJhYw== ZWxpamtl IOGDnA== IGFydGlzdA== IHNldXM= cmVlcw== 5bu6 cmVzaG9sZA== IGRvY3Rvcg== 6LWi 4KmL IERh IHJ1Yg== INWw1aHVtA== IGNvcHlyaWdodA== 0rPQvtC4 IHRvZGFz 4KeH4Kay IEJheQ== ZmVu 7Jik IGFubnVhbA== 0LvQtdC8 U2NvcmU= IOCkuOCklQ== 2K7YtQ== Y3ljbA== LkVycm9y b2xpYw== IG1lbnQ= YWxsZWw= TU0= IEZyYW5r 1aHVttWr S2V5cw== IGdyYWQ= 5L2g Z2FuZw== dW5lcw== 0YHQutCw dWdpbnM= YWxpcw== INCx0LDQuQ== ZXJ0YQ== w5c= IHJhcGlk SWRz IHBlcm1pdA== INGB0Lo= IGNyaXRpY2Fs IGxhcmdlcg== IOCyjg== 0YHQtQ== 2YTYp9mE IHRydXRo 6ZuG 6IM= IG1lbnRhbA== IGR1cw== IFRyYQ== Y29ubg== R2xvYmFs IG9yZ2FuaXM= ICAgICAgICAgICAgICAgICAgICAgICAgICA= IGJ1eWluZw== IGluY3JlZA== 6ZmF LVI= IHV6 YWxhaA== ZGV2aWNl IHRhbnRv INuB24zaug== IHNoaXA= b3Nv b3Np VGV4dHVyZQ== INmE2YU= IGNsb3NlZA== ZmlsbA== IHByb2Nlcw== IGx1Z2Fy Sm9pbg== cXVpcg== IHN3ZWV0 b3ds INC00YDRg9Cz IHplcm8= 4LWN4LSy KSkNCg== IGNoZWFw 4KWN4KSo 5rW3 aW9uaQ== 0YvQu9Cw UG9y IGVmZmljaWVudA== IE9s aW5ndQ== XTo= IG1pbnV0ZQ== INmD2KfZhg== IFJpY2g= U2k= IGphbQ== fHw= VVNFUg== IFRvcg== ZWR5 KXs= IHPDrQ== w6FyaW9z IFNQ VEM= 4LGB4LCo KEc= YWdtYQ== 4KSV4KSw acOocmU= IFRodXJzZGF5 IGZlZGVyYWw= IHNob3Q= IHJlYWRvbmx5 2b0= IE9o IGludGVydmlldw== LmVu IGhvZQ== 4LON4LKf 0LTQtdGA KG9iag== INin2YTZhNmH IE9uY2U= IGFmZmlsaQ== IOyLnA== IHRyYW5zYWN0aW9u aXRuZXNz IGlzbid0 0LXQuNGC QWxpZ25tZW50 IGVtb3Q= LlJl YnN0 YXRldXI= 4Kik aXTDqXM= J2Fp ZXNh IFByb2Nlc3M= X2Vu IE1pc3M= IE1hc3M= IG1pc3Npbmc= IFBsYXllcg== TWFueQ== IHRoZXJhcA== ZHQ= 57Gz 4Ka+4Kac IEFwcGxpY2F0aW9u IFBvcA== IGFsbGVz INC606k= IFJvYWQ= IHRhbGVudA== YXdz 15XXoQ== IEpv IG3DpQ== ZXRhaWw= 44Kz 4LGK 4LSq4LWN4LSq X2lucHV0 IGZsYXQ= IFZpcg== VkFM IG1hbGU= IEJp 5Lmf LT5f UkM= L2xpYw== KToNCg== IElkZQ== 0LzQtdGA d2Vp IHt7 IHp3 4KSB KCkpKTsK IGNvZmZlZQ== X2Zyb20= IGV4cGVyaW1lbnQ= IG9yZGVycw== LWl0ZW0= IHBvb3I= IOCmuOCmrg== RGlk IOGDpA== Zm9u aW5kbw== MTcw IEp1bA== IGNhbnQ= 4LK5 cHJldA== INCk 4KS+4KSo4KWH INC40LM= IOqygw== IGRpc3RyaWJ1dGlvbg== b3dh dWpl w612ZWw= 4Ken IEJlZA== YW5jaW5n IGRpcmVjdG9yeQ== 0LvQvg== IGxlYWRlcg== IOS6mua0sg== IGdq 4YCt4YCv dXJhcw== aW5ldA== aXN0YW4= UGFzcw== KSkpCg== IGdlc2No INC30LDQug== IENvbmc= IHJpZA== IGNydXNoZXI= 4YOd4YOS YW5o IGhhcHBlbmVk IEdM IFR1ZXNkYXk= IOC5hA== 0L/RgNCw0LI= ZXhwZWN0ZWQ= IGVscw== IGxvc2U= IEhlYWQ= IGFkdmFudGFnZQ== U00= Q3VzdG9tZXI= 5bmV IC09 2YbYqQ== IHBlYWNl IFNwZWNpYWw= IFdoeQ== IEV4cGVy aWJp 0LjQstCw IHdlbGNvbWU= Y2lvbg== b3N0YQ== IOCqquCrjeCqsA== Y2lhcw== IGJlc3Rl IG1hZA== IFBlb3BsZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0b3Jl b3No xbxl 0LnQvQ== IHVubGVzcw== IOCqquCqsA== Y29tbWVudA== IENocmlzdGlhbg== YXJ0aWNsZQ== 4LeZ IGFuYWx5 dmFsaWRhdGU= 1aHVrQ== IHbJmQ== w6hyZXM= IE1B IGRvZW4= 77yaCgo= IM6zzrnOsQ== YXZhc2NyaXB0 ICIpOwo= 5ZY= 64WE IGRhcmk= INC20LU= IEZpbmFs IG5lZ2F0aXZl UFVU IGhlbHBlZA== IGVxdWFs 5Y+j LmNoZWNr bGY= RXhwcmVzc2lvbg== IGZlZXM= b3Npcw== IGV1cm8= IGplc3Q= c2hhcmVk Y2x1ZGVz RnVuYw== YXJhbQ== IGF0dHI= IOCkquCkuQ== IHNsaWdodA== IHNjb3Bl IC4uLgo= IGpvdXJuZXk= IHNwbGl0 4KeH4Ka2 IFBhcmlz LXg= IOyVhA== U2VsZWN0aW9u 6K6v aW5zaQ== aXB0 6Jk= IEJvbg== 2YrYqg== U3RydWN0 IGZvbGxvd2Vk ICcu IHVwZGF0ZXM= SGlnaA== IHRyaQ== IGluc3RhbmNlb2Y= 15XXlw== IGhvbWVz 4LKo4LON4LKo4LOB RWxlbWVudHM= csOh xLFs IGFkZGluZw== RU5H KHVybA== IGludHI= 0LDQvdC4 INCw0YU= IGdyYXQ= UmFkaXVz 4K6+4K6V aWNpb3Vz 77+j IHZpw7A= IHdlcms= SEE= TGF0 IOyngA== IEphbWVz YXJ0ZW4= 7Y8= IFBv IENvbW11bml0eQ== IGlubmVy VmFyaWFibGU= IHJvdXQ= ZW5nZXI= IG5vbmU= IOCysA== bG90 Li4uLi4uLi4uLi4uLi4uLg== 4LK/4LKk YW1wbGVz d3Q= 15nXmdef CWU= TW92ZQ== QkI= IOC4lQ== SGFz IGZlZQ== IG7Dug== INiq2YU= IHbDpg== w71jaA== Y3VsYXI= 1aXWgQ== 4but IGFsaQ== a3RvcA== IGNpdmls IGRvbmRl Um9vbQ== TmV3cw== 0LjQudC9 4Kex YWN0aXY= J8Op LWNvbnRlbnQ= Y2FsZQ== IHZvbQ== Qm9vbGVhbg== IFRlbGU= IEFsZXg= ZXJr b2NpdHk= dWthbg== 4Kio IG5hcA== ZHJvcA== IGJlaGF2aW9y IHRhaWw= IEFuYWw= LmZpbHRlcg== YXppbmU= ICIt Pic= 1aHVvA== IGRlaQ== SU9FeGNlcHRpb24= IGx1Y2s= 4KSF 7JmA 44CA44CA44CA44CA IENvdXJ0 UFU= 6rk= IGFkZQ== IEJvb2xlYW4= IHJlbWFpbg== IHRyYWls IHBpZWNlcw== 0Zo= IHlvdSdsbA== 4KeD bnA= IHNpc3RlbWE= IENoaWxk IHRyYWZmaWM= b29kcw== INin2YU= IG1vdmVtZW50 2KfZhNmF 0LjRgtGB0Y8= IFVudGVy IHByZXN0 IG5hdA== aWVjZQ== 5bCx 6rCE IGFwcGxpY2FibGU= X3Zhcg== PU5vbmU= 6L+Q LnN0eWxl TmF2 IG9sZGVy YmluZA== LmFuZHJvaWQ= IHByb2R1Y2Vk IGVzdGFibGlzaA== ZW50cg== bGV0dGVy LmV4cG9ydHM= IOGDk+GDkOGD IHJpbmc= IHN1cmc= IG5kaQ== Lmxpc3Q= 4LS44LWN IGhhdmVu IFByZW0= IG5vZA== LnJlcGxhY2U= IGRpZXNl MjIw MTI3 IGZhc2hpb24= 6rO1 0LzRgw== dW5v IGVzdGFibGlzaGVk VkVOVA== ID0+Cg== 5oGv 6IKy IE9ubHk= dGhyb3c= 0LfQsA== IHJlc2V0 0YDQsNGB 0YjQsA== IGluc3RhbnQ= IFBldA== IFN0YXQ= j+CkleCliw== IEFubg== IFByb21pc2U= IHJhcmU= IGFpbmRh 2Ybarw== 0LvQsNGB IGThu4s= IHBlcm1hbg== yZl0 IHN1Y2Nlc3NmdWxseQ== IHN1cHBvcnRlZA== IEF1dGg= IG9yaWdpbg== KioqKioq IHRpZW1wbw== IGJpbGxpb24= 2LnYqg== dGs= TGV0 YXJ0YQ== IHNoaWZ0 ZW5lZA== IHN0eWxlcw== IOC4pw== bm9uZQ== IEtvbg== 2qs= IHBvbGw= IHNwZWNpZg== ICIl IHBsb3Q= ICYmCg== IGx1eA== IHNwcmluZw== QVJE INC00LXQuw== IGFncmVlZA== amVt LmxheW91dA== IGxvZ28= 0LTQsNGA ICIn c3dlcg== IG5vdGVz IGNvbnN0cnVjdA== amFuZ28= IMK/ IHByaQ== LlBy Zng= IGh1c2JhbmQ= IE11c2lj IGNyZWF0aXZl IHRoZXJlZm9yZQ== IGFwcHM= cGs= IG1vdGl2 IHNpZ25hbA== cm9n IGRlc2NyaWJl 2YPZiNmG aXJ0aA== IGRlY3Jl IGVsZWc= IGJyYWlu 4KeN4Kal QnVpbGQ= IG9ibGln aWNpZW5jeQ== aXRhdGU= dXJi 4Kq+4Kqu4Kq+4KqC IHN0aWNr 4YOo IHN0cmVldA== 44CC4oCd aWpz INC80LA= IHRlY2huaXF1ZXM= b2ly 0LvQsNC0 5YWs5Y+4 IHRhcA== CXc= IEZyZW5jaA== IG1n IFdlZG5lc2RheQ== IGhlYXZ5 xb0= 2KPZhg== 2YHYqg== b3BwZWQ= cmVxdWlyZWQ= INW5 w4Q= 2LPZig== 5pyA5paw aW5o Zm9yZWFjaA== U29tZQ== 5Yi2 UmVzdWx0cw== V29yZA== IG1haW50YWlu IOCmquCmsA== ZWE= IFZhbg== SVJF cnVu IExpZ2h0 T1JF IHNldmVu IHZlZw== TG9jaw== YXNpcw== IHByb21vdA== IOus YW5kaQ== IGhvbGlkYXk= IOyghA== IFN1cHBvcnQ= dW1lcw== ZW5jb2Rl IOCopg== IHBlcmhhcHM= 0LjRhg== IEFzc29jaWF0aW9u IEluZGlhbg== IOGDkuGDkOGDmw== 4YOd4YOg4YM= U1NJT04= IEFib3V0 LldlYg== IHVn VGVybQ== IM64 dXNoaW5n IHNlcsOh IHF1YXJ0ZXI= SWRlbnRpZmllcg== ZXBz RmlsZXM= IG1vZGVy Vk8= INmF2Yg= dGhyb3dz IGV4cHJlc3Npb24= IOCkleCkuQ== IHByYQ== b3dpcmVk 4LGB4LCC4LA= IFByb3A= 0L3QuNC5 X0tFWQ== bGlh 0YvQvw== YXRlZ3k= IFBhc3M= IHdlZGRpbmc= LkNvbG9y IGRyaXZpbmc= dWdl IHBsYWNlZA== IGFkdmFuY2Vk TW9udGg= IGt1bnQ= IEFjY2Vzcw== IGtleXM= 4Lea amF2YQ== 4LmI4Liy IGFjaGlldmU= IGV0YQ== X25ldw== IGRlY2lkZQ== 57U= Y29tcGFueQ== IGFic3RyYWN0 JQo= IEtu IExvdmU= IHByb2Zlc3Npb25hbHM= aXNjbw== IHJldGFpbA== 2LHYtg== X3F1ZXJ5 IGNhbWI= IEJyZQ== IGxhd3M= IOuP IG1lc3M= 4Kq+4Kqk Kyspewo= IHTDpA== IElPRXhjZXB0aW9u WWVz X0FE IM6xz4DPjA== IEludGVudA== cHBlZA== Z2Vycw== 5YW2 dXRp 2KfYtw== IGV4aXN0cw== em9uZQ== IFNRTA== IG5laWdoYm9y ZnJhcw== QmVmb3Jl LXRoZQ== 7II= aW5pbg== Q29tcGF0 IGV4Y2hhbmdl IM+Azr/PhQ== IHNhbmc= IFJlcHVibGlj IMOpbA== V29ybGQ= IHBvc2l0 4LeD IE1hc3Rlcg== KSl7Cg== 5Yq/ U2VuZA== IHByb3By YWxsYmFjaw== YWJv IEly IHVwcGVy 0Y3Qsw== XQ0K 6LE= 4Kmw IOCkuOCkvuCkpQ== IEJsb2Nr INmF2Lc= IExpdmU= IOC4mQ== 4oCs IEJsb2c= IGNoaQ== 7ZWg IGV4cGVydHM= d2VsbA== ZmQ= IE1hdGVyaWFs IOW5 V2hpbGU= dWFy PiY= SW52 aW5x UGFja2FnZQ== IGNhcGFj IGNvdmVyZWQ= IHphbA== ZmFjaA== RmVhdHVyZQ== CWVjaG8= X1RS 0LvQtdC90LjRjw== U0w= LUg= IH19Cg== IGhhbQ== 44Kw 0LLQvtC0 MTg4 15nXng== IGJsbw== Tm90aWZpY2F0aW9u dXNzZW4= IHBvbg== IENvbGxlY3Rpb24= IFByaW50 IHB5 aWVi INC/0YDQvtCy IHJlY3Q= LW9m IFNwZQ== IHNoYXJpbmc= IMOc LUc= INC00LU= IEphdmE= IM63 KGxpc3Q= I2lmbmRlZg== IGF0dHJpYnV0ZQ== YnVm IExB IOCkueClgeCk T05H bW9kZWxz b3N0ZXI= hOC4ow== 7YY= IHN1aXRhYmxl IHByZXBhcmVk IHNlZWluZw== LnBvc2l0aW9u IOKAiw== 0YDQsNC2 UmVxdWlyZWQ= IEJ1eQ== 2q/YsQ== xaFl LmF0 IOaJ YmxlbQ== bGFk YmFhcg== aWNpb24= IGNvbnRyaWJ1dA== INaE VGhlc2U= 4Z6Y 4Kan IEhE dW1teQ== 4KSy4KWA VHViZQ== 0Kg= w59l w6pz IGRlbGF5 RklH cGFyYXRvcg== c2F2ZQ== IOCuiQ== YWdp INCx0LjRgA== IHZlZA== KCgo xJ/EsQ== IEFQ U3R5bGVz 4YOg4YOX IG5hZA== IFJvYmVydA== aGlkZGVu IOGDpQ== 4LCw4LGN4LA= IHdhc3Rl IGRlZmluZQ== X2xhYmVs KGFycmF5 YWJp Q0NFU1M= TVQ= IENB YWZ0ZXI= YXJ0eQ== IGJlaw== 16TXqA== IGtlcHQ= dXJhbg== cmVhbA== IGZvbmQ= IGV4cGVyaWVuY2Vz IGVmZm9ydHM= IHNvdw== IC49 IExvdQ== IEJyaXRpc2g= VkQ= aWR4 Zm9vdGVy IG9yaWVudA== 64Q= IHJlZGlyZWN0 IOCqteCqvw== IHRyYWRpbmc= bWFr IEVV IGdhcmFudA== RXI= IEZvcnQ= suCxiw== 4KSb b2NoZQ== Lk5ldw== DQ0K IGZpeGVk IGFubw== INW3 cGFu IHN0YXJ0cw== U3Fs IHZy w7xr 4Liy4Lih Lmluc2VydA== IG1pbGl0YXJ5 LkNvbHVtbg== SGVsbG8= YWNpw7M= UVVFU1Q= IFRvZGF5 IOCkueCkrg== INC70Y7QsQ== 44Ot IEFr YW1iYQ== LlU= 5oub IE1p LW9u cXVlbnQ= IHRob3VnaHRz IHByaW1lcg== IHNtb290aA== LmV4ZWN1dGU= b3JkZXJz aXRlaXQ= 0L3Ri9C80Lg= b3Jpem9udGFs IEFE Z29pbmc= IHdpbA== INWt YXJndW1lbnQ= yZls IG1heW9y LWFs IHBvcm4= IGhhYmU= cGx1Z2lu IGxsZWc= IGZhemVy IGhhYml0 IFNlcnZlcg== YXRpdm8= X3BhZ2U= aWVyYQ== IFRhZw== IE1pY2hhZWw= RmxhZw== IGNlbnRyZQ== 5aI= IHdlaXRlcg== 0YLQvtC8 YXBzZQ== IO+8mg== aGF0 X3RpdGxl IOC0sA== 0LPQtQ== 5Lq65Lq6 4LWB4LSk U2lt Y2VtZW50 IHLDqXM= IGthZA== IHJlcGxhY2U= z47OvQ== IEJ1 IGRlc3M= cHJhZ21h Y2hhaW4= IGFudGVz IG9udG8= IOCkieCkqA== IGRpc3Bvcw== 2KvYsQ== 1Z0= 0LXRgNC4 cGFyc2Vy 0LrQuNC1 aWRlbnRpYWw= 0YLQvtCx0Ys= U2luZ2xl UHJpbnQ= 2KzZhw== CWVuZA== X2FsbA== IHVuaXRz dWdz IHNlbXByZQ== IG1hdGVy IGhhbmRsZXI= IFR3bw== MjQw IGluZGVwZW5kZW50 dWxhdGVk IGFjY29tbW9k IHN0ZWVs eWNsZQ== YmxvZw== IGFsdGVybmF0aXZl eW91 IOCqrQ== IG1vY2s= 6YeP IG1hdGg= aWZlcg== JF8= UmVzdA== 5qC3 L2xpY2Vuc2Vz IGRlc3RpbmF0aW9u U3BhY2U= IGZvb3RiYWxs IEFmcmljYQ== IHBlbnQ= IGFwcGxpZWQ= IG1pbmU= J3VuZQ== I2lmZGVm IGF2YW50 4Li14LmJ IGNoYW1w IExpa2U= KG1lc3NhZ2U= cWE= SW5z 4KSV4KWA d2hhdA== YXlhbg== VUxBUg== IGNvdXJzZXM= IGtpdA== IFBBUlQ= dXRm IFJv LWZl KG5vZGU= 5Y+M YW5jZXI= Y2h0ZQ== IG51ZXN0 IOC4nw== bGljYQ== IFRpbQ== IMOz MTA2 5Lu7 IGhhcHBlbnM= 4K+A IHRob3VzYW5kcw== PVs= w6tu IHRvaw== c29ydA== INmF2LU= 2LnYqA== Jz4= INGC0L7Qu9GM0LrQvg== IFVuZA== TlVMTA== YWdy 54mp IGdlZg== IFplaXQ= IGF0dGVuZA== IGJpZ2dlc3Q= bGVyaQ== IG3DqWQ= 16DXlQ== 4KeB4Kay IGNvbXBsaWFuY2U= IEVzcA== IHByZXNlbnRlZA== 1aHVug== IGRlc2NyaWJlZA== cmFjaHQ= aWtlcw== IEJlYWNo INeS16I= IENlbnRyYWw= aWNpb3M= IG1lZw== w6dhcw== aXJs 0L7RgdGC0Lg= 7ZWp cG9zZXM= LiIpOwo= IGjDoQ== cmVp IC4K aW1pbmFs IFJh IE1lbA== KHRleHQ= IE1hbmFnZXI= IOCksuCklw== IEF6 SGV0 IGdlaw== aWNrZW4= IGRhbGFt IGNvdmVyYWdl cGxpZXI= IGV4dHJhY3Q= IHByb3Blcmx5 7LmY IGRvY3VtZW50cw== 4Keo cGxlbWVudA== zIE= IGltcG9ydGFudGU= IGF1dG9y dWxz IExvcmQ= IHN5bXB0 cmlhZ2U= 4Kql4KuA 2K/YsQ== IGJvdWdodA== IGVhcnRo 2LTYsQ== IGVzdGFy LkFycmF5 QVBQ aXRy xb5l 0YPRgw== dmlydA== IOColQ== 0K8= 5p+l Jyk7DQo= YWRkcg== b2t1 YXJrcw== Lmdyb3Vw ZWRnZQ== 4LKw4LON4LI= IGxpcXU= IERP INC/0L7Qu9GD0Yc= SnVzdA== IFByZXNz IGNoYWlu 5bee ICAgICAgICAgICAgICAgIAo= QUNU zpo= emVpdA== UGx1Z2lu IExvYWQ= IOCwmuCxh+Cw 2KjYp9ix 5YaG 4LCo4LC/ YWlsYWJpbGl0eQ== IFdpcg== Y2I= IFBERg== IGRhbmdlcg== IFBhbg== IFNlbGVjdA== IGhlYWRlcnM= IGtub3dz IHdoYXRldmVy MTE0 QUxTRQ== 4KS+4KSP 4Liy4LiX 77ya4oCc IGNhbmNlbA== 5YyX5Lqs6LWb6L2m 5Z4= ZW50aWFscw== aXNs INGH0LDRgdGC X0VO IERlZmF1bHQ= w6lyaQ== vpk= IHNvY2lldHk= Lklk Y2hhdA== U3VibWl0 YXZpZ2F0ZQ== IFJlZ2lzdGVy a2Vs SGlzdG9yeQ== IHBsZW50eQ== U2hhcmU= 5qC8 15nXoQ== IM+H 1aHVsg== aWxsaQ== IFNlY3VyaXR5 KGluZGV4 RGVy bGFyxLE= IENH RGl2 MDEw U3RvcA== ICoNCg== IGNoYWxsZW5nZXM= IGV4ZXJjaXNl X1ZBTFVF aXNzYQ== UElP IGJhaA== IHBhcnRpZXM= YXBweQ== 24zYtA== YWxlcg== X3Rva2Vu 0LXQvdCw IGFkbQ== YWJi 6YU= 4Ka/4Kas ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== J10pOwo= IEZlc3Q= IH0sCgo= h+C4tOC4mQ== IG93bmVycw== ICEKCg== 44OV 2KfZhtmK Q2VudGVy IHByb2pldA== b3duZXI= 5bI= 2KfaqQ== 15fXqA== IHdhcnJhbnR5 4KSg 5qU= IHJlYWxpdHk= LXRlcm0= TWF5 LmNsZWFy IENodXJjaA== IFV0aWw= ZWxlbWVudA== 4Lav MTY4 IFNpemU= TUU= ID8KCg== IHJlbW90ZQ== IGFkdmVudA== IExF IHNlcGFyYXRl X25v IGNvbXByZWg= Y2xhcg== b2Rp 64K0 YW1wcw== INKh CQkgICA= 4Kal IHByeg== IHJvd3M= IHdlYWs= UHJvZ3JhbQ== YXR1cmE= MTg5 IMOnYQ== 4YOU4YOS IEdlcw== RVJW U0c= w7xs IGVtcHJlc2E= IGRlcG9zaXQ= 6LaF IGR1cmF0aW9u 0LTQuNC9 n+Crhw== IEJlY2F1c2U= 4Lan IEVlbg== cHV0ZQ== IFN1cA== 4KeH4KaH IHRvZQ== IO2Z YXVn IOuztA== 5YGa IHJo dW5hdGVseQ== w6h0 IFNlZw== aWNoZXI= 0YvSmw== 5Lit5aWW Y291dA== YW5pZQ== dm0= IMSw 4LW+ b2x1dGlvbg== IEVkdWNhdGlvbg== c3BsaXQ= 15XXpg== IHByZW1p dXVy w4U= IHJhdGluZw== IG51bWVyb3Vz b3Jlcg== Ki8KCg== IGRlcHRo KVs= IHRhc2tz YmVz IM+Dz4U= dGlw RGVzYw== IGFwcGFy 0LHQsA== 4YOe 4KSy4KS+ YWNobWVudA== IEp1bg== INC90LDRhw== IGFyY2hpdGVjdA== 2YLZhA== YWNoZXI= IGNhcnM= INii2YY= IHdpbnRlcg== b2NpYWw= 4YGL 6LI= VGhhbms= IGdhdGhlcg== IHF1ZXVl IEV1cm9w SEVDSw== IHBhcnRpYWw= MTA3 IOCkleCkv+Ckr+Ckvg== IEthcg== 44K3 Ym90 Q2FydA== IFRh 4LGB4LCV dWt1 IHV0aWxpeg== IOyW cmV6 IHsNCg0K LmNvbnRhaW5z IHNtYWxsZXI= IGRlcGFydG1lbnQ= 15zXkA== Zm4= X2xlbg== U2hl aWVuY2Vz IGNsYXNzaWM= Zm9yY2U= IFNpbmc= 65+s IGVsbA== YW1tYQ== aGQ= aXZlbA== X3ZhbA== IG9idmlvdXM= LlZhbHVl 2YTZiA== IOya LmltYWdl aWZ5aW5n IHN0YXJz 0LTTmQ== IEV4dA== RGlyZWN0b3J5 IGd1ZXN0cw== 56iL X2VuZA== IHByZXBhcmU= IGNyYWZ0 LXNpemU= c2Vj IGJyaWdodA== IEluc3RhZ3JhbQ== ZW1hbmQ= cmFy YWto IGxlYXJuZWQ= TWFrZQ== IHJ1bnM= 2KzYsQ== 4LmJ4LiZ 4Lih4LmI INGB0L7QsQ== IERldmVsb3BtZW50 IGZ1bmRhbWVudA== IGtvbA== IGdhcmRlbg== IFJpdmVy IHR5cGljYWxseQ== xLF6 X21heA== LWxhYmVs 0YbQuNC+0L0= IGhvbmVzdA== INek15XXnw== LlJlYWQ= 550= YmFs IGnFnw== IOCouA== IEFmZg== IGRm QXJndW1lbnQ= YXN5bmM= IHR1Yg== IGFsbGE= aWNpYW5z SW1wb3J0 IHNxdWFyZQ== b2E= IOax INWA Ymlq IGJhdGNo 0K0= JykpOwo= 1avWgQ== 5qyn576O zrHOvQ== IHBvcm5v IE1pbmlzdGVy IHpvdQ== IE5vbg== cm9y IGFpZA== b3V0dWJl IERpZXM= IGdlbmVyYXRlZA== INin2YTZhdiq IGZvcmVpZ24= INC80LDRgg== OkAi IHN1c3A= 7KeE Q09N Y2xpcHNl IGJhxZ8= 4KeC QW5pbWF0aW9u RHVyYXRpb24= 6KW/ IHJlcXVlc3Rz IHRzZQ== IGNoYW5naW5n QVRVUw== RGVmaW5pdGlvbg== IG11ZA== YWJ5 IHBvbMOtdA== IHRydWNr 15vXnA== IG9yZ2FuaXphdGlvbnM= IGtpbmc= IERpcmVjdG9y 4Kao4KeN4KY= 4K6/4K6x TW9jaw== 4oSi 4YOU4YOa4YOY IHN1aXRl 6K6+ bm92 IENvdW5jaWw= aW1hcw== yJlp REVCVUc= LmVudGl0eQ== IG1lbnRpb25lZA== CXByb3RlY3RlZA== 4YOY4YOV 5L2V IGRpbA== IG9waW5pb24= IGZvcmdldA== 2K3Yqg== IHdvcmtlcnM= 5Y67 YmVpdA== IGvDtg== 15nXmded IHZlcm0= IE1vdW50 YW5pbQ== IEdyYW5k cm9sbGVycw== ICAgICAgCg== YWxhbg== aWdhbg== IEFm 7ZaI 4Kaf4Ka/ c2V0dGluZ3M= LU4= aW5kcw== YXpv WE1M 5Zmo dWRhZA== IG9iamV0 IGVzY29ydA== bWVkaWE= IHNlaw== IGp1bXA= IOCwhw== YWdlcnM= KSksCg== IGltcGxlbWVudGF0aW9u wrI= c3o= YWxt INmI2LE= xbo= IHN0YW5kYXJkcw== IERpdA== 4YOY4YOi X1U= IGRhdWdodGVy LnN0cg== 0LvQuNGH LkNyZWF0ZQ== IOCkruCkuQ== aXR1cg== T3RoZXI= 54E= 8J+Y VHdv 2KjYrw== PW5ldw== 5oI= aWZ0cw== IGFuZHJvaWR4 INC80L7QttC10YI= IHJhaW4= TUI= IGhhbmc= UHVibGlj ID8+PC8= IGludGVyaW9y LkJ1dHRvbg== IE1haXM= 4K+N4K6z Lmds IHJlY29tbWVuZGVk dWVnbw== IENvbnRlbnQ= IE5leHQ= Z3Vu IFZhbGlk IGF1ZGllbmNl IGRlc3Ryb3k= IGVtcGxveWVl 77yS INeQ15nXnw== X0NI ZGVj IGdhYXQ= IGZpc2g= IHNlcnZlZA== VGltZXI= X1NI c2Vjb25k Z2FtZQ== V2h5 zrnPgw== R1I= IG9wZW5lZA== IGFic29sdXRlbHk= 5LiT X2luaXQ= 4KSV4KS+4KSw IFVuZGVy 4KuN4Kqk IFNlY3JldA== 2YfYrw== 6rCc YXll 0LvQtdC0 IGNvbm9j IGTDrWE= 6K+d aW5obw== 4YOY4YOb MTA5 IGFvcw== w6xuaA== RmFpbA== IE9r LnVybA== Rmk= IHRpZGFr IFBvdXI= 5Lus ZWZm IEZsb3JpZGE= 4Li34Lit IHJlcGFpcg== 4LiZ4LmM QXJl IGRoZQ== IHBsYW50cw== b2x2ZXI= dmV0 dmc= 4Ki4 6aKY 5bGV SW50ZXJ2YWw= LmJhY2s= dWVzdHJh IGFzw60= RHJpdmVy 4LK/4LKw IGNvbnNlcnY= YXNw IHZhcmlhYmxlcw== IGZhY2lsaXRpZXM= IFNlbQ== IGtlZXBpbmc= 16DXlA== w6TDpG4= IOCkpw== IGfDtnI= IGZhaXRo ZGM= IGhlbGU= xZtjaQ== IGFsZ28= X21lc3NhZ2U= ZW50bw== 2pg= IEJpbGw= IHRodXM= TXV0 IEl0cw== ICcnLAo= IGJ1Zg== IG1lZQ== 0LzQtdGC 0LXRiQ== d2hpY2g= puCwvw== xrDhu6Nj IGFuaW1hbA== VkM= 2K3YqQ== IGdlbmVyYXRpb24= aWJh 0LXQu9C4 NDA0 YWdyYQ== IGxvYWRlZA== 4bq/dA== IFNjaWVuY2U= 4LWK IG1vdmllcw== Pz4K 7YE= IGxlYWRlcnM= IENoaW5lc2U= IHJlZ2lzdGVyZWQ= IFNhbmQ= ICAgIAk= IE1leA== dWl0ZQ== PSIuLi8= TWV0YQ== LmNvbnRleHQ= IGR0 5biD IHNpZG8= cG9pbnRz IGR5bmFtaWM= YWdn T1dO IGNlbnR1cnk= IGlkeA== aWFudGU= IHdpZA== LmNvdW50 aW50bw== 5pif TmV0d29yaw== LXVzZXI= IGRlZGljYXRlZA== IGNvcnJl IGp1cg== IFBhdGg= MjEw IHRlYWNoaW5n IG5vdmVs IFRyZQ== IENhc3Q= z4TOrA== 7ZI= dGVhbQ== IEFsdGhvdWdo Y29ob2w= d2l0dGVy INC805k= REFURQ== IHJhZGk= IGF0aA== IGVuY29yZQ== IHRlYWNoZXI= LmFsbA== TW9zdA== IHBlcnNvbmFz IHZvdGU= INC00LI= LnBlcnNpc3RlbmNl IGhpZGRlbg== 4LSj4LWN4LSf 77yQ IOCkleCksOCkqOClhw== aXN0YW50 1a0= 15nXlQ== IGZlZWRiYWNr IGtpZA== 2YXYuQ== 1bjVtg== IHJlc29sdmU= INC/0YDQvtGB0YI= aWVn Q2hhdA== IGFjY291bnRz INGB0YM= RGlt IFByb3BlcnR5 IGFyaWE= INeU16k= IGZsYXNo Q2FuY2Vs acOnw6Nv MTEz QWxlcnQ= IGV4aGli IHdlc3Q= 4KeB4Kaw KS0= IGJlY29tZXM= IG1pY2g= IGNvbWJpbmF0aW9u RGlyZWN0aW9u 5Y6f 4YOm 4oCZbg== ZXNzZXI= ICcs IGZhaWx1cmU= X3JlZw== IF9fXw== IG1lZGl1bQ== QnVuZGxl aXN0cm8= IG7Dqw== 4Liy4LiE IEZhbWlseQ== SW1n 2YPYsQ== b3JkZW4= 7JeF IOas Z290 d2ljaw== 6Z+p KHN0cnVjdA== 7ZWY64qU w6RsbA== 77yJCgo= KGZpbmFs IG5pZXV3ZQ== KFsn IHN1Ym1pdA== IGVjb25vbXk= dGhhdA== UG9pbnRz cGVyc29u aWZz bG9hZGVy Li0= IHZpc2lvbg== aWFpcw== IHBhYw== IOCyquCzjeCysA== 0L7RiQ== INC+0YDQs9Cw0L0= LmRi INCw0Lk= em4= c2VyaWFs IFJlZg== IHBlcnQ= IHZ1bA== YXhpcw== 0L7RgdGB TWVk 7J6I UmVzb3VyY2Vz IGRldmVsb3Bpbmc= 44Oh INCv IExlYg== IGluZHVzdHJpYWw= IOCwpg== 2YrYsdip IHB1cmU= 2YbbjA== 0L3QuNC60LA= IGVsZXY= IGRlYWxz Xyw= 4K6+4K6p LkxpbnE= ZXN0ZWQ= ICks IE1lbnM= IHBlcm1pc3Npb24= T1JZ aXRlcmF0b3I= X3dpdGg= IFBlbg== INC90LDRiA== YnJpZWY= U2VydmljZXM= IFRha2U= 4Z+L aXJz cGxveW1lbnQ= Q00= dW5kZQ== bWFrZQ== X2ZpZWxk L2g= zpw= IOCypg== 06nQuw== 4Kec RlM= aXBlbGluZQ== P+KAnQ== IGRlcGFydA== IGFsdGVy Um91dGVy IOC0teC0v+C0 IExpYw== SG90 IGF1dG9tYXRpY2FsbHk= IHB1cnBvc2Vz IHZ5 IHRm RGVidWc= 4KiV IGNvcm5lcg== 0LXRgtGM VmVydGV4 INC30LDQvw== 0ZbQsg== IEludmVzdA== INWr1oA= c3Rvbg== ZGFt 2KfZhdmE IGNyeXB0 IOGDnQ== IGRvbmM= IENobw== IE1hcmtldA== IERldGFpbHM= IG9kZA== 2ZI= IGVpZ2h0 2Kbbkg== 44Kr INin2YTYpw== IHBhcnNlcg== IOCyruCyvuCy IGNvbnN0cnU= IHdvbid0 77yfCgo= Q29udHJhY3Q= 0LXQvdC40Lg= IGRpcA== IFRyZWU= Q3I= IElzbGFuZA== IGNvbnN0aXQ= IENl ZmFsbA== 0LvQsNGC IFdBUlJBTlRJRVM= Q29uZGl0aW9u IEdlcg== IEth b29rcw== YWJhbg== IGludGVsbGln 4YC8 INC80Ys= 4Li04LiV IHRyaWI= U29ja2V0 0YPQtdGC IHZhbHU= IGxvY2F0aW9ucw== IExpYg== INmI2Kc= IHBsdA== INin24w= 0LDQtNCw cml2ZXI= LnV0aWxz IHNob3dpbmc= IGVsZWN0aW9u IGZpbGxlZA== IG1hbmFnZWQ= z4TOsc65 b2JieQ== 1bTVodW2 YWxlbg== IE5hY2g= IENlcnQ= Lmk= 6LSt INGB0L7Qsg== IGRpc2N1c3Npb24= IGx1Yg== INeR15A= YWR0 IHJlZGlz 2YfZiA== LmZpcnN0 IGNhdXNlZA== 54Sh44GX TW91c2U= 55+l INmI2Yo= ICJA IHNlbGxpbmc= Zm9saW8= IGF3YXJl RG93bmxvYWQ= 4K+C IOCknOCliw== IFRpbWVz YnVy Ym91cg== bGljaHQ= IGt1bQ== IOaWsA== X3JlYWQ= IEVtYWls 6YCf bG9vcA== Lm9z IOyglQ== YXNzaWdu W2s= INmH2LDZhw== INec154= b3Nlcw== 0LvQuNKb IGR1dA== 0YvRgg== TFk= IHNhZA== 7JWI INmF2YI= IGRpc3RyaWN0 4K+N4K6V4K6z4K+N 4KmB VVNU TEk= w7xt IGRpYW0= ZW5jZWQ= QXR0cmlidXRlcw== IEVuZ2xhbmQ= YW5jbw== INC/0L7Qtw== IHJlbGF0aW9uc2hpcHM= IE1hcnk= UGhvdG8= IHByZXNlbmNl Q0k= IGV4cGxvcmU= aWNoZW4= 4Z63 LlRlc3Q= b3JnZW4= aWF0 5Lq/ INGC0LXQvA== 5Y2B IGtlcw== IGZhbW91cw== IEljaA== IGJyYW5jaA== aWVt IHByb2Nlc3Nlcw== dmVpcw== IGluY29ycG9y IFRlcg== LkZpbGU= 0L7QstCw0L3QuNGP IEhhbGw= IGVuZg== IHRs IFRvdXI= 77g= 5Lic IHN0b25l xLFr IHBhaw== em9law== RGVsZWdhdGU= INCx0LjQuw== IExlYWd1ZQ== IG9wZXJhdGluZw== IGZseQ== IHRlaw== RmxhZ3M= KHRy YmFja2dyb3VuZA== IGZ1bmRz ZmVycmVk IOuLpA== ZWxpbmVz 5ZGY IGFkdmVydGlzaW5n IHRlZ2Vu eWFh LW91dA== aXJ1cw== T0xE IHlpZWxk IOygnA== bmFwc2hvdA== 0ZjQtQ== IHByZXZpb3VzbHk= X0xP CSAgICAgICA= 44OJ UG9saWN5 6Lev ZGw= IHdpbmRvd3M= INuB2Yg= w6Fw X1VO IOCylw== 4KSC4KSX INiv24w= 7JyE c2NhcGU= LiIK MjA0 IGRvbWlu w7ZnbGljaA== IEVxdQ== ISEhIQ== 4Kmx Kyc= IGRlY2xhcg== YWd0 X0NPTQ== IFN0YXR1cw== a2F0 dXBz IM61z4A= TWVkaWE= IHZlZ2V0 Lkh0dHA= IHNob3dlZA== IHBpYw== IGRhdGFz 4KSG X2xpbmU= 4KeH4Kab4KeH IHJlY2lwZQ== Y3RvcnM= IFNE INqp2KfYsQ== IGVzdGFz 5pKt5pS+ 0LPQuA== 5a2X5bmV IENvbmQ= 44G+44GZ 5b6L IEh5 IGxpbg== 0r8= LmRlYnVn c3RhbmNlcw== X2FkZHJlc3M= KFE= KCk7DQoNCg== LVc= LnJhbmRvbQ== ZnJhc3RydWN0 IC8vCg== TWF0aA== IHBhcnRuZXJz 4YOj VUNDRVNT 4YOY4YOZ INin2YTYqw== YW5rYQ== LWZyZWU= IGVsZWN0cg== 6Kk= IHZhaw== LmJlZ2lu aXpv IGV2ZW5pbmc= YW5hcw== X21zZw== IG1vdXNl ZWRvbQ== IG3Dtg== IEFkbWluaXN0cg== IHRyYW5zaXRpb24= YXNzYQ== IEhhdmU= IHBpbGw= IHLDqWc= z4HOrA== IHBlcmZvcm1lZA== SGVscA== IGNhbGxpbmc= IHBhcmtpbmc= CUM= LkNvdW50 Lks= b2Jh U3Vy IGFrYW4= IHdvcnJ5 5a6d aWNhdGlvbnM= IOCouQ== ZW5naW5l INC90LDRgQ== 2YXZiA== eWNo IHNvdXM= IGZhbWlsaWFy IGJvdHQ= IMK7Cgo= 5qg= IENvbW1hbmQ= ZXJkZQ== IGNob2ljZXM= 6buE LnN1cHBvcnQ= eWVy QVRFRA== IOCmueCnnw== YW11 dW1iZXJz MTg2 MTIx 4Kq/4Kqv IGJlYXV0eQ== IG1lYW50 2YrYp9iq IGhpbg== TWF0ZXJpYWw= Il0K INGB0LDQuQ== IFdhcw== UE4= X3RyYW5z 44OX IHB1cnM= INmD2YQ= IGFwcGVhcnM= 4K+N4K6a IGZ1bmNpb24= IOCkpeCkvg== ZmZmZg== IEJ1ZA== IOKW IHByb2NlZHVyZQ== b3Zlcw== 4LK/4LKm4LOG 4K+B4K6V4K+N4K6V IOGDpw== U0VTU0lPTg== IHllcw== INqp2YY= bmlo 4oCd77yM IEFscw== IEN1cnJlbnQ= IGRlcGVuZGluZw== YXR1cmFs 4YOY4YOQ4YOc LWRheQ== UHJvcA== IG5hZGE= 4YCb IEluc3RpdHV0ZQ== CXByaW50Zg== Y2h0ZW4= RXh0cmE= IExha2U= 1aHVvdW/ IHByb2M= 0L7RgtC+0LI= 56eR IExvY2F0aW9u Y2lwZQ== U3BlZWQ= 4KS+4KSB LmFycmF5 Qm9hcmQ= bm9ybWFs IGZhY3Rvcnk= 66+4 w6pt b3NzYQ== IGhlZWw= ZGFu ZXRp IGJyaWVm emVs IG1lbnNlbg== b25ncw== dWxhdGlvbnM= IEJZ RkZGRg== IFJlY29yZA== INij2Yo= IEJP 4LK/4LKC IHRoaQ== INCo IEluZGV4 IFJ1bg== 4Kem IE9sZA== LmVk IGpvaW50 b3JkaW5hdGU= QUs= 6ZO+ IEZlZGVyYWw= 1aHVpg== QmVzdA== INeU16o= IAk= IOCqlg== dW1tZXI= ZmlsZXM= LmRpc3BsYXk= 6IQ= IEJlcw== IHBvbHk= IOC0nA== emVr cmV5 IHN0b3Jlcw== INC40YHQv9C+0LvRjNC3 IFdhbGw= IGphaw== IHNlbmlvcg== 5Y2X 0Y3RjQ== 0L7Qu9C9 5rKh X3BhcmFt IFRocmVhZA== LkFzc2VydA== Y29udHJvbGxlcg== Y2Fz IHBheWxvYWQ= IFdp IG51dHI= IENvbW1pc3Npb24= b2Nrcw== CXN0YXRpYw== YXRyZQ== INin2YTYsNmK INC80LXRgg== IGFkdmlz In0sCg== 0LjRgNCw IFRvYXN0 IERpbQ== 1KXRgQ== IGRldGFpbGVk 4KaW IGNvbXBvcw== IOC4pQ== 15nXmw== IHRvcmNo IOCqiQ== IEZ1bmQ= 0LXRgdGM MTE4 INWh1bw= dWxsZQ== 4KS+4KSJ LkF1dG8= IGFzc2lzdGFuY2U= Q2hhcmFjdGVy LnJlcXVlc3Q= 4LiU4LmJ IHBsYXRl 44GV44KT TG93ZXI= RklMRQ== IHdlbg== IG1hY2hpbmVz IOCqqw== JiY= IHNjYW4= KGN0eA== IFdpbA== 4KSC4KSm IHbDrQ== INCx0L4= IHBlc3NvYXM= 4Kq/4KqV IGZhbnRhc3RpYw== 0rPTmQ== 57Y= aWNhcg== YXBwcm8= Vm8= IHRhc3Rl UGFk KA0K IOWbveS6pw== c2lnbg== IGRlY2lzaW9ucw== INC/0L7Rgg== IO2VnA== 4KS44KWN4KSk b3RpYw== J2ls KHk= IHNxdQ== dHh0 IHVp ZXN0aQ== MDA1 IGxlY3Q= LkltYWdl X3Bvcw== aWtlbA== IOCwrA== Tk8= INmB2LE= IGZvaXM= w6R0dA== IHRyaWdnZXI= 4YOQ4YOo4YOY IFNhZg== IGJpc2E= dHJs UkVTUw== IHdhdGNoaW5n INWs ZXN0aWM= 4KS+4KSa aXZp YmFn TXVsdA== 4buF IGNvbXBsaWM= b3N0bw== Lk9iamVjdA== IGFuc3dlcnM= IFdlZWs= IENsaWVudA== 4K6V4K+N4K6V IFRyeQ== U2NlbmU= 16M= 5rS7 PD4oKTsK IHRlbXBvcg== INmH2KfbjA== IGtyaWo= IGFuYQ== IExFRA== Y29weQ== 6KKr IG1ldGE= 4buHbg== IOW9qeelqA== b3JkZQ== IHByb2Zlcw== wrQ= XS0+ bG93 IOCmhuCmrg== MTg1 IGxvYWRpbmc= IGVm IGd1bg== 6JU= IFVuaW9u aGFi 0LvQsNCy UE9TRQ== UmV2aWV3 IG51bg== PCEtLQ== IFJlYw== MjAz Q29tbWVudHM= 4Kab 55m+ YXN0aW5n IHNpZ25lZA== aXRvcnM= cXVhbGl0eQ== INio2K8= IE1hZA== YW5jaWE= IHRyb3A= YWpheA== INC/0L7RgA== IERldXRz IGRpZWQ= YXpl YXJyb2xs Y2hlY2tlZA== IOC4ng== X3Bvc3Q= 5byA5Y+3 0ZbQvA== IHJlbWFpbnM= IG1haW50ZW5hbmNl IGNhZA== MTg3 YXN5b24= IENvbW1vbg== bsSb 57uT5p6c MTIy IGZvcnVt QVJH IEZpZWxk ICIiLA== IHJhbg== 4LC/4LCk IGF1Zw== Kig= ZmM= LnJ1bg== IFBhcmFt YXJndg== aGVscGVy MTE2 Il07Cg== 2LPYp9mG R2VuZXJhdG9y IHR1bQ== bG9nbw== IGFkdmFuY2U= IHNlZ21lbnQ= VUxF 4LiW IGR1bXBzdGVy LXJpZ2h0 IOCmlg== 66y0 aW5zZXJ0 4K60 IG9jY3Vw INCz0L7RgA== IGJlY29taW5n IGV4cGVuc2l2ZQ== LWxn aWxvcw== IGljZQ== 66qF KGNoYXI= 0LjRgtC4 IOWc IGtn IGZ1ZWw= 4oCZaWw= INio2YrZhg== 55S15b2x fn5+fg== IG7DqQ== LnNoYXBl IEVS LHA= IHBvc3NpYmx5 IHN3ZQ== Y2Vhbg== CXN0cnVjdA== 4Kqw4KuA IHJlamVjdA== TkM= IGNoYXJnZXM= 7KGw Y29tcGw= IGNsYWltcw== KHN0ZA== Ym9vdHN0cmFw IHZvbHQ= cGxhdGVz b3V2 L2Nzcw== RGVzY3JpcHRvcg== IGdvb2Rz I2ltcG9ydA== IFVuaXQ= IE1Q IGt0 ZXJ0bw== aWNodGln 15DXnA== 7J2M 4LWI IGZvdG8= 27E= IHZlcmlmeQ== c3RyYQ== ICku NDUw IHNq INem15U= 4LSz4LWN IFZvcg== IFJvbQ== IExJ fAo= s865zrE= aW5nbw== cHV0ZXI= RVA= IOC0rA== Q29tbW9u IGp1c3RpZnk= X2V2ZW50 KGFyZ3M= IEpldw== yZs= 15XXkg== 5Zu96ZmF 4K6p4K+N4K6x XEh0dHA= INGB0YDQtdC0 bWF0Y2g= cWxp 0Y/QtA== IGt1bA== VGhhbmtz 4Ki5 IHZhcnk= IExvZ2lu xaF0 IE5lZGVy 4Lit4LiZ4LmE INeU15c= ZXJvcw== JSw= IEtpbmQ= ZW5uaXM= IGJsaWo= 77yP UHVibA== INmI2KM= Qm90dG9t d2VzdA== d2Vn IOCynA== INCf0YA= w6Rt 6Ziz YXNqZQ== cXVlc3Rpb24= INin2YTZig== IOGDm+GDkOGD SkVDVA== UHJveHk= TkVTUw== IFwi LXRo 5ben LmluaXQ= YWluZQ== IFNlcmllcw== 4YOU4YOi 0L7QstC+0YA= IEZvbnQ= IHdhcmVu IGHDsW8= dW1wcw== 4LWB4LSf4LWG w6Rz IGNsZWFuaW5n IGRlbGl2ZXJlZA== INmG24E= IGN1cnNvcg== IG1ham9yaXR5 ZXJjYQ== Y3J1aXQ= U2No aWxlbg== YXJldA== 5Z6L IFBT MTM1 d2FuYQ== 4KSV4KWN4KSk X3BhcmFtcw== U3luYw== 65CY IFdoZXRoZXI= LkRhdGU= cuG7pQ== IHd5 IG1hcmNo IENS aWNhZ28= IHN0aW0= IHdpbmU= IOCkl+CksOCljeCk IGluc3RydW1lbnQ= bmVjdGlvbnM= IFBVUg== IGlzYW5n CQkJCQkJCQkJCQ== 44K4 IGFzc2lnbg== IGt1Yg== X3ZpZXc= eGltYXRlbHk= YmVydA== IGNz IGnDp2lu IM+Dz4TOvw== Qm9yZGVy IOC2mg== b25kYQ== IHZhbGlkYXRl IGxhdg== ZXNp ZW50aQ== KGxlbg== IHRvZGE= KQ0KDQo= IOCmmw== Y2xlYXI= RmFpbGVk YnJv LnNlbGVjdA== IFBM T2s= IExPRw== IHJlbGF0aXZl IOCwiQ== aXN0b3I= IEV4cA== IOCkheCkpw== 4YC3 YCw= IGNvbnRpbnVlZA== TWVtb3J5 4KS44KWA QXV0bw== aWpp 4bq/bg== LmhwcA== IHdhbGtpbmc= IHJlbmQ= YXRpbw== X2Rpcw== IHNvdXRo IOC3gA== IGxlYXZpbmc= IGFuaW1hbHM= KGN1cnJlbnQ= IFNvdXJjZQ== INqp2LHYrw== bWc= IG5hdGl2ZQ== IOCksOCkueClhw== T3duZXI= IGNvbmZsaWM= IEZvb2Q= YW5qYQ== b255bW91cw== IEts IEpzb24= IGVzY29s IGZsbw== 5bCG IMOi IHByYWN0aWNlcw== S2l0 cG9w Llw= 5pWZ INC00LDQvQ== IOCqruCqvuCqn+Crhw== INC80L7Qsw== IHJlbGlhYmxl IEdlcm0= aGlu YW55ZQ== INCx0YPQtNC10YI= YW5nZW4= IG1pbm9y IGZvY3VzZWQ= 6rK9 OyY= IHN1aXM= IMOpZ2Fs IE9T IGNvbW11bml0aWVz 0LzQvtC2 4KS+4KSs CW5ldw== IG1pbmk= IGtvdA== 0YHRgtCw aGV0aWM= LkFs IHpvbmU= IERpc3RyaWN0 IGFncmVlbWVudA== INC/0L7RgdGC 5YG3 INin2YE= RkU= CWw= IGlsbHVzdHI= I3ByYWdtYQ== INmG2Lg= IOGDkuGDkOGDnA== 6Z+z IHRvcGljcw== INGC0LXQuw== IEZhcg== a3Rl IOCqmg== aWVuZG8= UG9pbnRlcg== aWVudG9z IGt1aw== IGVuZGVk IGNvbnRpbnVlcw== LwoK IHF1aWV0 IGNyb3c= T3M= IM+Az4HOvw== Y3JpcHRz IGZsZQ== IFRlY2hub2xvZ3k= CQkJCQo= INee15Q= IHJpZGU= IGhhY2U= IG51bGxwdHI= eW50 IHRvdGFsbHk= 4YOV4YOY4YOh IElzcmFlbA== 0YHQutC+0Lk= LnJlbmRlcg== IG/DuQ== IHNvY2tldA== UGFyYQ== IHJlYWRlcnM= QkU= IHBvbGljaWVz 0LHQvtGA 5Lit5paH5a2X5bmV 44Gn44GZ IEx0ZA== dWlsdA== RElU IOC0iQ== 2KfYr9ip IHZpbg== IMiZaQ== 6aA= IGZvbGw= IGJlZHJvb20= INGB0LXRgA== 0Y/QvA== YW5hbA== IGJvbmQ= IEFjYWRlbQ== bGVycw== IGp1bg== IHNvbGU= zpc= m4Q= IHN0cmF0ZWdpZXM= UXVlc3Rpb24= IOGDmOGDoQ== c3RhY2s= am91cg== c8Ol 77iP i+eJjA== b21v 4K6p4K+N INWo zq3Pgg== IOW+ruS/oQ== IOKGkg== IGthag== IGZpZg== zrvOvw== 5L2/ IGVxdWlw 44KI 2KrZiQ== 2KrbjA== IHByb3Vk ICk7DQo= 5bGe IENoYW1w IG1vZ2VsaWpr w7Fh IHN1aXQ= UHJvbQ== cmc= IGZvdA== IGRpdmVyc2U= IGNvbXBldGl0aW9u IGFjY2lkZW50 4LmI4LiH dWxk IFdobw== TWF0 IHJz KG1zZw== cm93c2U= b3BlcmF0b3I= INiq2YY= IGN1bHR1cmFs IGF0dHJpYnV0ZXM= YWZh IE5n TUM= IHJvdQ== KHNpemU= IEN1c3RvbWVy 15nXpA== INeQ15nXlg== IHNpc3Rlcg== ICci ZXN0ZXJkYXk= IGRlYnVn INC10YHQu9C4 cml0aW5n QVNL IG1hbnVhbA== ZW1wcmU= IGluc3RhbGxlZA== 4KWN4KSw4KWA YmFz cmVwbGFjZQ== IGV4Y2l0ZWQ= cmVzc2lvbg== aG91 IHdpbm5pbmc= IHZhY2M= IHNub3c= UEVDVA== VFY= IG1z LkV2ZW50 ICIiLAo= aW5lY3JhZnQ= IGRvaw== IHBoYXNl b2Rvcw== X2lz SW50ZXJuYWw= IHByb21wdA== LgoKCgo= w6lsw6k= 0LrRgNCw IHByb3ZpZGVycw== Y21w IHByb21vdGU= IE1FUg== 0Y/QvQ== aW1vbg== IHBheXM= IHJlYWNoZWQ= IGVudW0= RVJTSU9O INC30LDQvA== IEFkdg== INGC0LXRhQ== IGZsaWdodA== 2KfYqw== J24= IFJldmlld3M= PiI7Cg== IG1hdGNoZXM= QW5pbQ== c3R5bGVzaGVldA== IOG7iw== IGPDoWM= LnNlcnZsZXQ= U3c= IGNvbmo= IHRvd2FyZA== X2lkeA== YWxn YXRpbGU= IGRhdg== UGVyZm9ybWVk IG1lbGhvcg== IHZpc2libGU= IGFzc2V0 cHRo RHJvcA== X01BWA== IGRvdQ== CXByaW50 Q29weQ== SW5mb3JtYXRpb24= IFVTQg== IFRoZWly UGxhbg== IHR1cw== 4oCZaW4= JykpCg== IEJyYXNpbA== KG1vZGVs IGx5 INix2Yg= IFBvbGljeQ== IHBlcm1pc3Npb25z a20= b3Zv IGxlYWRz 6L+R IHJvdXRlcg== IHNsZQ== Jzs= IG1pYw== IGNoYXJ0 IGFsaW1lbnQ= IEZJVA== Q2hpbGRyZW4= R0VO IGRpZXNlcg== ZmVjdGlvbg== V09SRA== 2KfYsdin2Ko= c2libGU= IHdpbGxpbmc= aG90 4YOY4YOd aXNtZQ== 6ZmQ IENvcnBvcg== 2pE= IGVuam95ZWQ= IGZydWl0 Y2hhbnQ= cmVsYXRlZA== IOC0kg== IENhcm9s IHVwcA== J10u 4Kim IGNvbnN1bWVy 5YiG5YiG5b2p IHbDpA== 7ZKI IHBsYXN0aWM= IEJhZA== YW5ndWFnZXM= X21vZA== LnRoaXM= 4LKa IGN1bA== b2JyZQ== IGfDqW4= IEV4cGw= ZWdv IHRoZXJlJ3M= SGF2ZQ== xZM= IGVpbmZhY2g= X1VSTA== IHN1Z2Fy IGF3ZXNvbWU= IHNsb3Rz IOGDqg== xKE= b3JkaW5hdGVz XSs= Y3JpdA== 5pS5 IHNlZWtpbmc= 15XXmw== IGdyYWRl YWp1 2KfZhNmK IOC0juC0qOC1jeC0qA== 44K1 YnJlYWs= 6aKG INGB0YLRgNCw RlI= INCw0YI= 4KWI4KSC 4LSo4LWN4LSk IHNwZWNpZXM= IFNob3J0 MTQ0 ZHVsZWQ= IGFzc3Vt dXNoZWQ= INee16k= IGVzc2U= IGV4dGVuc2lvbg== b3E= Rm9sZGVy Zm9ybWFuY2U= d2F0ZXI= IHNvbmdz WG1s 44Gh IGNoZW1pY2Fs IGFycmFuZw== dnQ= dsOt INu+ 1aHVtdWr1bY= Lm9m IG1hbnQ= INGP0LI= dWNpw7Nu IGlscw== LmxlZnQ= IGNvbnRlbQ== SSdt IOWw VVJJ ZnVsbA== U3R1ZGVudA== IOyG IFNpbg== b3BlcmF0aW9u 05nQuQ== bWlzcw== X29y IHBvaw== eWVjdA== U0g= aWFuY2U= IHRyYWRpdGlvbg== IENvbW1lbnQ= IGNvbXBhdA== IMSRxrDhu6Nj RFU= IG1hZ24= 0LXQvdC40Lk= IO2Y 0LjRgtGM0YHRjw== 5rGf MzIw IM+EzrE= 1bbVpdaA1ag= IGNsb3Ro INGH0YLQvtCx0Ys= QVJBTQ== 4buZdA== IHBva2Vy ZXJ2ZWQ= IGRhdGVz 6aaW 4Z+G 4KS/4KSu INio2LHYp9uM LnNxbA== IFNhbnRh IE11bHQ= 4KuN4Kq1 W24= IOCqquCqow== 7Jq0 b2Jv X09Q Um93cw== IOWMl+S6rA== 4Lix4LiH ZWxsdA== LS0K IGltcGw= aXJr IOCqj+CqlQ== U2NvcGU= X29mZnNldA== IHJlbWFpbmluZw== IHBhbmRlbQ== 6rOE 4Kqt IMOW YWxwaGE= ZW1wbG8= IElsbHVtaW5hdGU= IGxvcnM= IGV4Y2l0aW5n IHRyYWl0 4K0= w61hbg== LXRy ZW3DoXM= cGlz 4Lil4LiZ4LmM IGNvbmZlcmVuY2U= X3BvaW50 7KY= KX0= LnhtbA== TUk= INCx0LDRiA== zr/Phc69 IHBhZGE= INu9 4YOa4YOY4YOh IGJyaW5ncw== IHJ1bQ== IHJhaXNlZA== 6ICM dXR6 ZW5lcmF0ZQ== Y2x1c2lvbg== 7Jyg 5rWB 5pS/ 5oqA5ben IGFjYWRlbWlj IMOpZ2FsZW1lbnQ= IGd1ZXN0 IEFuZGE= aXNoYQ== 65Q= KCcuLw== 7JW8 IHRhdA== IGFnZW5jeQ== cHVu IGd1c3Q= 0Y/RgtGM IHRvdWdo 2KbbjA== 0YfQtdGB 4LSo4LWN 2K7ZhA== IGNob3Nl IHByZW1pZXI= IEdp IOyekA== IOCmheCmqA== c2VydmljZXM= IHNlcmE= IHNlYXQ= UFJP 4LK+4LKo b2tlbnM= cmln MzMz YW5jaWFs RmluYWw= IGJn IHVzbw== IE5Z LmJhc2U= 4KS54KSw c2VydmFibGU= 4Z6f INeV15Q= ZW1lbnRl IHRlY2hub2xvZ2llcw== 5qCH LlRocmVhZA== IHZlcms= TWV0YWRhdGE= dGhlcm4= w7Ns IHRyYXQ= IFdhdGNo IHNvdW5kcw== LWNo 6K+E aWV1 IHNwZW5kaW5n IGluc3RydWN0aW9ucw== IOaY Q29tcGFueQ== 6LW3 642w IGRlcmU= Rm9yZQ== 15HXnA== YWJvdXQ= 5omT Lk1hcA== Y2Npb24= ZW5kb3I= 4KeN4Kaq IERpZ2l0YWw= Y2Fw IEdyYXBo 4YOY4YOa4YOY IHN1c3RhaW4= 4KWH4KSf YmVnaW4= IFNhdmU= aWV1eA== IGNpdGl6 67aE IG1pbGxpb25z IHVh ZWxpZw== emlw IGxpc3Rh UGFpcg== KGNo IG1hag== X2NvbG9y IG1hcmtldHM= 5Y+v5Lul IGNoZWNrZWQ= IFND IGZ1cm5pdHVyZQ== IEFwYWNoZQ== IHdlcmQ= c2Vk IHN1YXM= IHRhdQ== IGFtYQ== U2hlZXQ= 4LS/4LSk cXVlbA== w6p0 RW5hYmxl 15PXqA== IEFzc2VtYmx5 UmV0 IG1pc21v 0L7RhQ== IGl0dQ== Jy4k IGJpbmFyeQ== IEVtcA== IEJ1cg== IGNsZWFybHk= 0YfQsA== IOy2 IGVyZw== MTE3 IGtlaW5l IGNyZWF0aW9u IGZvbGRlcg== IiIiCg== INmF2LE= IOCwlw== 4LCw4LGN eXRpY3M= 5Y+C 4Ka+4Ka5 4LeQ dXJzb3M= IGVudGVydGFpbg== 56ug YW1s IGt2 4KWkCg== INep15Q= KToKCg== 6JWJ aW5hdGlvbnM= IENvbnZlcnQ= cHJvcA== 4YCF bGc= 0KY= IGxheQ== IFZv IGNpdGllcw== IGZ1ZXI= 0YPQu9GM0YI= IFdhdA== S2U= UHJlc2VudA== dmlydHVhbA== b250aA== X2Jsb2Nr YXBwZQ== IG1vc3RseQ== IG5vc3Q= LmRlZmF1bHQ= Q2hhcnQ= am91cnM= 0L7RgdGM IGV4YW1wbGVz cmVlbg== dWN0aW9u IHNjcm9sbA== YnJh IGxlYXZlcw== aW1lbnRz aWNhbnM= z4HPjA== Z25vcmU= R0VS IGludGVuZGVk 5a+8 YWduZQ== Il0sCg== 4bqp bm90YXRpb24= INC90YPQtg== IFNhaW50 4KWL4KSc zrXOvQ== VGVtcA== IGV4dHI= 5ZQ= 0YHRgtC4 IGVydg== JS4= IHdhc24= IFBBUlRJQw== IGNvbnZlcnNhdGlvbg== IEdvdmVybm1lbnQ= IGNvbnRhaW5pbmc= LUU= 2q/bjA== IOCkl+Ckr+Ckvg== 4KWH4KSw Y29uZGl0aW9u INC/0LA= YW1lbnRvcw== QmluZA== INCx0LXQuw== IHNpbXBs aWVyb24= IHBvc3NpYmls IHByZW1pdW0= IGNvbHVtbnM= CiAgICAK IHBpw7k= IGVhdGluZw== IOCmqw== 5b6u5L+h IFBhcnR5 ZW5jaWFs bGVpY2g= 1bc= 44GR Q3JlYXQ= 4YCe KV0= z4HOrw== IGFzcGVjdHM= TEVURQ== TElORQ== fWVsc2U= IEdhbWVz 6Iez 0LjQvNC4 7ZaJ ZnJhc3RydWN0dXJl aWtpcA== IG7Dum1lcg== IHBob3RvZ3JhcGg= 2YPZhQ== LmxvY2F0aW9u INin2YTZhA== 2LnYtg== YXRybw== VGhlbWU= Y2x1ZGVk INC60L4= Lml0ZW0= IGxhdWc= wrsu 0LjRgdGC0LXQvA== IEpvYg== 4Z6U bmVtZW50 INGP0Lo= aXVz VFQ= IE1vYmlsZQ== IEVsZW1lbnQ= IGRlc2lnbnM= RXZlcnk= LnBvcA== IENCRA== Lmxhc3Q= IG5vZGVz LmlubmVy IExvZ2dlcg== MjMw UGF5 IFNwcmluZw== INio2YQ= INC00L7QvA== 4KSi w6ljbg== w6F2ZWw= IGhlbGw= 4LK2 xYJh IHZpc2l0b3Jz Q2l0eQ== IHZpYnI= 55qE5ZCX bWF0ZXJpYWw= IE11bg== IEhpbGw= J3I= IE1hdHQ= IM6y 4LS0 w44= w6dvcw== JzsNCg== dWx0eQ== dWt0 0YPQtw== 0YDRg9C/ 0YzRiw== IOC4quC4peC5h+C4reC4lQ== aXJvcw== dm9vcg== J255 aGVybg== Q0hBTlQ= CXN0ZA== RU5HVEg= 2og= IFsuLi4= IGV4ZWN1dGU= 0L3Rgw== 4pmA IG5ldQ== IGludmFsaWQ= Um90 CWV4 aWNhdG9y LnZpcw== LWV4 IGFtZXI= 4LSx4LWN4LSx VGVhbQ== aW5nZQ== IGZlbWFsZQ== IG1vbmRl 0Y3Rgg== IEhlbHA= QVJZ aWV2 IGNpcmN1bQ== X1NUUg== IG9obmU= IOCqsOCquQ== KHZhcg== IGxpbWl0YXRpb25z IFNob3A= INGD0LQ= QU5DRQ== 0LXSow== ZXN0aW5hdGlvbg== Q29tcGxldGU= IH0pLg== IGNvbnRlbnRz IFN0dWRlbnQ= IGJ1c3k= KG51bQ== cmV0Y2g= 4LSh IGJhdHRlcnk= dW5nYQ== 1aXVrw== SXQncw== w7Ru aWJl QmluZGluZw== IGluZ3JlZGllbnRz IGN5Y2xl Pjo6 INC90LDQtw== PEludGVnZXI= ZmxleA== 4Z64 aGVpbQ== YWJy X2NoZWNr IHJlcHV0 4oCmCg== IFNxbA== aGVhZGVycw== INC40Yg= 6rSA IGVlcnN0ZQ== IOC3gw== IGJhdHRsZQ== 54w= LWNvbG9y 6Lo= IHlp IE1T IGluc3RhbGxhdGlvbg== IFBVUlBPU0U= YXZpb3Vy U2Fs 5LiW 4Z6P IOCwnA== bmlnaHQ= Zm9ybXM= 1avVvQ== LmVt 66Cl IGtpbGw= IHJlc2lkZW50cw== cXVpZXI= IGNyZWFt 5bGA xIdl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 546L IOaI IGNhcmJvbg== aWNpYW4= IHNwbA== UmVtb3Zl INGB0LA= IHByZWNpcw== 6aKE IGNvbWJpbmVk IG1hbmlmZXN0 5aSn5Y+R5b+r5LiJ YWNoaW5n dGw= 4Kq/4Kqk YmF0 IHBvc2l0aW9ucw== VmVydA== 4LmI4Lit U2hvcnQ= IHN1cnZleQ== aW1tZXI= IENT IHdob20= IGlubGluZQ== eGY= IGFueXdoZXJl IGRlbnRybw== Lm1ha2U= 0L7QstCw 4K6+4K6w IOC4qw== IEdlcm1hbg== IHRyYXM= IOCuhg== IHJlZ2lzdHJhdGlvbg== IGpveQ== IOCkieCkqg== 4LCX 4LCo4LGN4LCo dGFzaw== YWluYQ== IEhpZXI= IG1vaW5z aXTDpHQ= IENvdg== z4g= IFNwb3J0 IHdlJ3Jl YWNraW5n Y2h0ZXI= INmK2YU= w6FjaA== IHBk 2KfYsdiv 0YLRlg== Q29tcG9uZW50cw== aWNodGVu IEdlb3JnZQ== IGhpZ2hsaWdodA== IGludGVyZXNz REFP dXNy IGh5cA== KHJvdw== IEhpc3Rvcnk= IEhhcw== INGO Y2nDs24= X21pbg== 0LXRgtCw TGlnaHQ= X21vZGU= 4Lit4LiZ4LmE4Lil4LiZ4LmM IEdFVA== QGVuZA== Qmx1ZQ== IEF0bA== 15nXmQ== INCw0Lw= IEhUTUw= aXNzZW4= 4Ka+4Kaq RmFj IGdlcmU= IG1haW9y YnVmZmVy IHNrYWw= cHJldg== MTE5 IHByb2ZpdA== IHwK INC30L3QsA== LmNvbG9y KSkp INWw1aXVvw== 1bI= LmF1dGg= 0LXRgdGB MTg0 IGFsbGVlbg== IG15c3Q= IExlYXJu 0LDRgtGM0YHRjw== anVk Y29ubmVjdGlvbg== cHVi LuKAmQ== IFNlbGY= X2dyb3Vw IHJlbnRhbA== dW5jYQ== IFB5 cmVzc2U= IGN1ZW50YQ== IGdyYQ== 2qnbjA== IG90cm9z TW9kZWxz IHlhaw== ICcnOwo= IHRlZW4= dXJlcnM= INGA0LU= IG1lYXN1cmVz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 05nQvdC1 Olw= IHRlbmVy IG1hbm5lcg== 4YOV4YOU4YOc 7J6s aWVydW5n b3N0b24= 4Lil4Liw Z2ll b2NvbGF0ZQ== cmllbmRseQ== IHB1dHRpbmc= YXBlZA== IOmm IHByb2o= IGJpZA== b25uYQ== 4buP aWp1 dmF0 7JeI 4LmA4LiH4Li04LiZ Y29uZg== IGbDqQ== z4POtc65 IGJhcmU= c2NyZWVu IFNpbmdsZQ== INCy0YvQvw== IGxhdGk= X3Ro IOGDkuGDkOGD 2YbZiQ== IEtvcmU= 4LGB4LCo4LGN4LCo IHJlc3RhdXJhbnRz IGluZmx1ZW5jZQ== IGltcG9ydGFuY2U= UGlja2Vy IHN1cGVyaW9y IGNvbmhl emV0 SUxM YnQ= 4LGN4LCq bmVyc2hpcA== IGFza2luZw== IENvbG9ycw== 44OG NTEy X2Zl MTI0 IGRhZA== 0LDRgtOZ 0LrQuNC5 0JY= YW1tZW4= IHZyYQ== KHRlc3Q= IElM 15nXmg== 4YOQ4YOa4YOY 7JuU V0FSRQ== VmlzaWJpbGl0eQ== IFNtYXJ0 eGE= SU5GTw== dmw= 5a65 IGRpbm5lcg== PHRk MTc1 UmVnaW9u w7Bp IGRlZmluaXRpb24= IG1lYQ== d3I= Rm9sbG93 INC60L7RgtC+0YDRi9C1 2YrYqw== INmF2YQ= c2hvcnQ= 0LDQu9GW YW5jZW1lbnQ= IHNraWxs IOCwteCwv+Cw 0LXQvdC90L4= 4KeH4KaW 2YHYsw== IGNvbmNlcm5z LXRvcA== 6ZO+5o6l INOp0Lc= IGVnZw== LHk= IFBldGVy IGZz IM+Dz4TOtw== IGZhc3Rlcg== JykNCg== IHRhbms= RGFz IGV0aA== IFJhZGlv QmV0 KHN0YXRl IFBvdA== IGF0bW9z ZW5zYQ== YW56YQ== IGVudGg= enc= dnM= INCy0YDQtdC80Y8= Q29sbA== IGRpc2FibGVk 54S2 IGhvcmFz ZW1lbg== LmNhbGw= INC80LXRgdGC IOyjvA== IGJlbGFuZw== IHNsaWdodGx5 4KeH4Kab Q0I= IGNvbmZpZGVuY2U= INC60q8= Ozs= IGVudHJlcHI= 0LDQu9C+ 4oCZLA== IG9jY2FzaW9u IG11bmljaXA= IHJlc3BvbnNpYmlsaXR5 LnNw Lkxlbmd0aA== INil2YY= RGVjaW1hbA== IOC2tA== 5rs= LmVudg== cGFyYQ== 5rWL IHBsdWdpbg== IGVwaXNvZGU= 4LKC4LKm4LOB CWk= IOW9qQ== 2YPYqg== INC90LDRgA== IFBBUlRJQ1VMQVI= KSs= 6LWw5Yq/ 0YDQvtC8 IMW+ZQ== IFNpdGU= INeb15w= IENoYW5nZQ== 1bjWgtW1 INmI2LI= IG10 KGlz eGU= IG5vcnRo IHNpemVz INC00L7Qu9C2 IGZpbG1z 4Kq+4Kq4 IENW ZXNv IGNob3Nlbg== 6L+U INC/0L7Qvw== aWdvcw== IHN2bw== 55m75b2V SU1JVA== IGloZQ== LmNwcA== IGJpcmQ= Y2xvcw== xY0= IGt1cA== aWFsZQ== INC40L3RgtC10YA= CUxpc3Q= RGljdGlvbmFyeQ== bG9jYWxob3N0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 4KSk4KS/ KExpc3Q= IFdvbWVu IHx8Cg== 2YjZgQ== c3Rhcg== 66mw bm9t 56m6 IGFsZ3Vu IHF1b3Q= Q0hBTlRBQklMSVRZ 44GU INCx0L7Qu9GM0Yg= IG1vbnRobHk= LmhhbmRsZQ== 0LjQt9Cw IHppcA== 4Z+B IGd1YXJhbnRlZQ== IOC4mw== 0L7RgdGC0Yw= Q3JpdGVyaWE= Pic7Cg== YWpp IGp1bA== dXJjaGFzZQ== ZW5jaWFz X2xpbms= d2hlbg== IGtpbmRz IENsZWFu 0LvQtdC90LjQtQ== 2LfYqQ== IHBvaW50ZXI= IGTDvA== IHRhbnQ= 24zYsg== 5aCC 7LK0 zq/Ovc6xzrk= IHN0b3JlZA== LkNvbnRleHQ= YW10 IGzDoQ== 6I2J X1g= IGFsbG93aW5n KHRhcmdldA== SWR4 dXNpYw== bmV3cw== IHNvbm8= IFNlbA== 5q+b QVJL fS4= IGhs Q29uc3RydWN0b3I= IGNvdA== aWRpcg== 0LXQudGB0YLQsg== 0L3QtdC5 IGtldA== Q291bnRlcg== acWf 4KWn IHZpbmQ= 4KuA4Ko= 7JiB IHJlZnJlc2g= IOyw 6b6Z 4LeE IGF1bWVudA== 05nQug== Lm1vZGVscw== IGNydWM= IGRlcHVpcw== LnBs KTsKCgo= IGZ0 IHNlcXVlbmNl IEZJVE5FU1M= 4LiX4Lii 4YOb4YOQ aGlkZQ== IHJlYg== IOCoqA== IGRlc2Vu IGJyZWF0aA== IM+G VG91Y2g= IHByb3Q= QmVo Y29tcG9uZW50 U2lkZQ== IEh1bWFu INGB0LXQsQ== emVsZg== IGVzdGFkbw== IGF4aXM= 0LXQvdGL IOychA== IFBsYWNl IOS4gA== aWdodGVy a3Ry Nzc3 1aHWgNWk IENvcmU= 4LWN4LS1 IGZhdm91cg== INi52YXZhA== IG7DoQ== b3Jlbg== IHZyaWo= LnBhcmFtcw== 4KWN4KSa INCW INC/0LDRgA== 7YU= INiv2Kc= LmRvbWFpbg== VXBsb2Fk b2xvZ2ll IGdyYW5kZXM= Zm9ydHVuYXRlbHk= IGFjY29tcGw= R0E= 4Z6b IHN0YWF0 IHJlZ2lzdHI= IG91dGRvb3I= aXp6YQ== IGxvdmVseQ== b2dv IGludGVnZXI= IHNlZ3U= IGh2 5rGC INCy0LXRgA== IEdlc2No Y2ll IHR5cGVvZg== IEFjY29yZGluZw== IHNhbHQ= 2KfYsdmH L2w= IGxldXJz IFdoZXJl Qkw= d2Vyaw== IE1lbnU= b3JuZXk= IFJpZ2h0 YXVyYW50 IGJyZWFrZmFzdA== QVZF IFN0cmVhbQ== 1aHVpA== IGFjY3VyYXRl IGFuZGVyZW4= YW1hcw== IEFzaWE= LQoK IGNvbW1pdHRlZA== bW92ZQ== IHJvb2Y= aW1pemU= IOuqqA== Jys= IGFpbnNp c3RlYWQ= IGJ1Y2s= IG5pbmc= INC00L7RgdGC 1b7VodWu INGB0YLQsA== RXh0ZW5zaW9u YXBwb2ludA== mYI= dWxhdG9y IFN0b2Nr IG1hc3NhZ2U= aWNodGU= 572u KHVpbnQ= IGJlYXI= eW5k IHRyZXM= 5pE= TGljZW5zZQ== 5pyq INiq2Kw= IEVuZXJneQ== YWRpYW4= IEVkZ2U= INC90Lg= IGNvbnN1bWVycw== IEFkZHJlc3M= IEVsZQ== W2tleQ== aWV0ZW4= CVM= IGxlYWRlcnNoaXA= IOCmrOCmsg== w6l0w6k= 5oCd w6B5 IM+DzrU= IHRlY2huaXF1ZQ== IGVuZ2luZWVyaW5n MTMx ZWRiYWNr IGRlc2lyZQ== tZw= cGVjaWZpYw== IGxsZQ== UmVhbA== IGRlc3BpdGU= IGRpYg== IHNhbWVu 0LPTmdC9 IHZldGVy VXNlcm5hbWU= cmFpdA== IEV2 MjIy IERlbW9jcg== IGtow7RuZw== Y2VydA== IGNhdXNlcw== KFN5c3RlbQ== IENvbW1pdA== IHRhaA== IG1peGVk IFdpbg== IHp1cw== RG9tYWlu IHB1Ymxpc2g= c3c= 4bq9 IHlhcA== LlJlcXVlc3Q= IOCkquClgg== YXNzZXI= vrM= fSkKCg== IMO6bg== IGVudmlyb25tZW50YWw= IGhvbGRpbmc= DQoNCg0K 4YOu4YOV IEdybw== IEhhcmQ= IE5vcg== IHJvZA== U2Vl IGNvbG91cg== IGZhY2lsaXR5 IGFwcsOocw== MTY1 Qm91bmRz INGB0LvRg9GH IEVhcnRo IFdyaXRl IGVyZQ== IGdlbWU= IGVsYQ== QXNzZXJ0 4Liy4Liq 4LCC4LCf ICh7 IOCkrOCkqA== IHRyZW5k 4Kiy UGFs IE1hcmtldGluZw== ICI7Cg== INCw0YE= IHByaXZhY3k= eWNs w61k cmVzZW50cw== RXQ= YWNp UHJvZHU= IHNlbGU= IOOAkA== IGJpbm5lbg== IHVuaXZlcnNpdHk= 57qi ZXNzaW9uYWw= IG90cm8= INmI2Kw= Q0Y= IGNvbnNj X2FkZHI= IGRlaXg= IHBsYW5l X2NvbnRlbnQ= 4KS/4KS2 b2tpbmc= Jz4K 1aHWhA== IG9uZGU= IOCmleCnsA== IGFkbWluaXN0cmF0aW9u w7NyaWE= ZGVt IGJyYW5kcw== IHZlaGljbGVz 6IU= b3V0cw== IGxhYXQ= IHNwZWNpZmljYWxseQ== 6I4= IHBlbmc= MTMz 4LCV4LGN4LA= IEFC INiz2Yo= KEludGVnZXI= IGNsb2Nr IHRyYWJham8= aXJlYmFzZQ== YWJlaQ== 6Laz RGlzcGF0Y2g= IGh1Yg== Y2xh b25hdg== cmVr b2Nj aGVkZW4= cG9vbA== LUo= UmFuZG9t IGFuZ2xl bnRlbg== IGNoYWly IExldmVs 0YPRjtGJ QXJjaA== IHPEgw== IGV2b2w= IE1lZGlj Li4K 4LS+4LSv4LS/ cmVuZGVy INC80LDRgQ== INGB0LvQtdC0 IHN1bW0= cmVkaXJlY3Q= 16U= 4LWN4LS3 Rm9jdXM= IGhhdg== UkVGRVI= cXVlbmNlcw== 2KfYr9mH 56Kw cmVzZXQ= IHJld2FyZA== IG1vdXRo L1M= IFZpY3Q= INC/0YDQvtGG IGJhdGhyb29t VHlw cmVzdWx0cw== 6IuP dXJpZXM= QnVz IFN0YW5kYXJk T2JqZWN0cw== MTI2 RWRnZQ== IGFwZW5hcw== IGRvdA== IHRlY24= 4K6x4K+N4K6x yZlz IExpYnJhcnk= IHRhYmxlcw== IOGDnuGDoA== eW55 2K/YqQ== 2YPYp9mG IGFsY29ob2w= w7Zs IGZlZWxz IHNlZW1lZA== TG9z SXRlcmF0b3I= IGF2b2ly aWFscw== VVRG Q3JlYXRlZA== 6buR INee15A= IHJpc2U= dW5jaGVk IExpbQ== IGFkdWx0cw== ID8/ cGY= IHTDrQ== IGFwcHJvdmVk CQkg IE1lZGljYWw= zpQ= U3RhbmQ= IHRhZ3M= IENvbnRhaW5lcg== bGlnaHRz dXBsZQ== YWd1 4oCcSQ== 1avWgA== MTQ1 c29sdXRl IHVzYWdl Y2hhcmdl ZWRpbmc= 4LCC4LCk IGl5 IFNtaXRo 2LnYsQ== IHN5bXB0b21z IGNhbnZhcw== 0LDRgtC10Ls= IHZpdGFs INGC0LDQutC20LU= YW5kb24= IFNwcg== 4KSJ IGRpY2g= IFdheQ== X0RBVEE= Y2x1ZGluZw== IGJvcg== QWN0aW9ucw== ZXJhcw== IGV4cGxhaW4= 157XlA== 6Z2g IMOpdGFpdA== 67CU b25kZQ== bWFhbA== IGlzb2w= IFNlY29uZA== IEZhbGw= 6IKW 4oCZZW4= Plw= YWNv IHNoZWV0 IHRlYWNoZXJz Zm9v YXN0cw== 7Lac IEtv 4bqhbg== IHhtbA== IExhYmVs IG5vbWU= 6riI 6L+Y dnk= w5g= PD0= aWdpdA== LWZvcm0= 57uE IHBvZHI= IHNraXA= cmllbmRz IGFwcHJveGltYXRlbHk= MDA0 IHRpY2tldA== IGhvb2s= IMOgcw== 7Zi4 IENlbnRyZQ== IHRyYWJhag== UmVuZGVyZXI= b3ZlcnJpZGU= IHByb3RvY29s IHRpcg== IGZvcmNlcw== 4YOY4YOj4YM= YWNhbw== 4K6/4K6k X0hF IGlkZW50aXR5 cHJpbQ== IFB1Ymw= IOCwiA== IGhvcml6 aXNzdWU= IGNsYXI= IFByaXZhdGU= Tm9kZXM= KEk= IGNvcnBvcmF0ZQ== INC90LDQvA== INiq2YI= aGFsdGVu dGVjaA== 44CP QkVS IGRvbGxhcnM= IHJpZw== YmM= IENvb2s= IFNhcg== LnNlYXJjaA== cGlv IHNpc3RlbQ== IGNsaW1hdGU= cml0dGVu IHF1b3Rl IFJldA== U0VE aWxsbw== 566X 57yW INmI2YU= cGFk 5qOL54mM X291dHB1dA== J10pCg== YW5ueQ== 6K+B 4LGN4LC1 IHByb3RlaW4= IGdyYXR1aXQ= 4LGG4LCy J2Vu IHNvdWw= 6Zeu c3RvcA== YXNt YWlk IGVj IG1haA== 4KmI IFZlcnM= w6Bu IG11c3M= UXVhbA== S2luZA== LlByaW50 IEphaHI= TGVu IFZhbGxleQ== IGluanVyeQ== YXR0aQ== IE5lZGVybGFuZA== IOC4muC4reC4pQ== IENM IGtpY2s= YXJkYQ== IGhhbGw= IFdlc3Rlcm4= ZXBlcg== aWtpbmc= IGhpcA== IGVuYWJsZWQ= X0lN NzUw YXdt 5YWx KHBhcmFt IHByZXQ= 0YXQvtC00LjQvA== IOCmhw== ZGVidWc= SFM= IENvbnRleHQ= CW4= 4KS+4KSo4KWA IG51Yw== 7IOd b25kZW4= YW1hcg== IOC4oQ== IG1hdQ== aWVsZW4= IHB1ZWQ= IEZh Jz0+Jw== IHJlcGx5 INC/0YDQvtC40Lc= IGNvbXByZWhlbnNpdmU= 44Kj IGRvZ3M= 4YOY4YOg4YM= IHNoYXJlcw== LnRvcA== IGRlc2Fycm9sbA== LikKCg== INmG2Yc= IGdlYXI= IGNvbnZlbmllbnQ= IGJlYXQ= w6p0ZQ== IGRpc3A= CWZ1bmN0aW9u KGNs LkFjdGlvbg== MTgx IGFwcGVhcmFuY2U= Q29zdA== w7Z0 IGRldGVybWluZWQ= X2ludGVy IHByZWdu IGJyb3RoZXI= UGF0dGVybg== IE1FUkNIQU5UQUJJTElUWQ== 4YOU4YOR4YOj4YOa4YOY IOCkieCkuA== IHRvdXRl LXo= IHVzYQ== 5Y2O KCkpKQ== YWdyYXBo IHBlbnRydQ== IHZpZXI= IG5lbA== IENvbm5lY3Q= IEtlZXA= 44OW zrnOvw== 5pM= TE9X MTM5 Lk1lc3NhZ2U= PyI= IEpvc2U= a2VsZQ== 0YDQvtC6 IFN5bQ== IGFydGlzdHM= IG1pZ3I= aWxsZXM= 0L7Rgw== RFA= IEx1Yw== Ijpb TE9DSw== IGvDpA== INmI2LM= 7ISg IGNyaXNpcw== Q29uZmlybQ== IEZyYQ== IE1vdg== IHRzaA== IGpvaW5lZA== IENoaWNhZ28= 0YHRgtCw0L3QvtCy IGFwcHJlY2lhdGU= IHRvdWpvdXJz IGdhbno= IGhvcnI= IOWl INmH2Yo= X3RyYWlu YW1hdA== 0Y3Quw== 2KjYqg== IOyduA== YXRvbWlj aXRpcw== X29iag== IEFycg== 4KS+4KSy4KWH b3JhbA== cmly IOOAgA== Z2FnZQ== w6Fi T1JT IGF1dGhlbnQ= YW5zaW9u Y2lvcw== MTI5 IGhvdQ== dWx1aQ== TWFzaw== dW5xdWU= 4LWN4LSx4LWG IGV4cGVydGlzZQ== YW5keQ== Q29ubg== INCw0Yg= 0L7RgNC80LA= IHNhbXBsZXM= LkRF IHByb3Rlc3Q= IHRpbWVy 6rc= YmVyZQ== IHN1YnN0YW50 aGFzaA== c2VjdA== ZW5hbnQ= 5aSp5aSp5b2p56Wo IGRpc3RpbmN0 IHZhcmlhbnQ= IHN1Y2M= 57uf aXBoZXI= Pyk= b3J0aGVybg== INWr1bY= KGNvbmZpZw== ICQu 0L3QuNGF IFB1dA== 4LiE4Lij MTQx IHN5c3Q= IGRvdWJ0 X1BBVEg= IGhpZGU= IGVub3Jt YWdlbnQ= 27A= dWxw IEJlZm9yZQ== V2VsbA== IOGDog== INCz0L7QtA== 4YC9 YW7Dpw== zpk= IGRlY2s= IOGDm+GDneGD IGNhdGVnb3JpZXM= PXNlbGY= KG1hcA== Y3B5 INC90LXQvtCx KFY= IFNwb3J0cw== Llk= IOCwjg== IGJsYW5r dmVucw== X0NsaWNr IGZybw== aWNpYQ== IENvbnRpbnVl aXJ0dWFs IE1BWA== YXBzZWQ= QXR0cg== IGNvcnI= IOCmj+Cmhw== Y3VsYXRl Ojwv ZXRhaWxz IGV4Y2Vzcw== IHN0YXRlZA== IGdyYXY= U2hhcGU= MTMy 4Z67 IGVzdMOhbg== IEd1aWRl w7Nk INWo1bY= TEVT IHRyZWVz aWtlcg== dW50ZXI= 5Lyg IGdyZWF0ZXN0 IOCquOCqvuCq 4LOI IHppdA== 6ZaT IGRpc2NvdmVyZWQ= RGk= IOCqnOCrhw== am9i IHRzYQ== Lm1haW4= 0LvQsNCz IE9iYW1h QWJzdHJhY3Q= 4LC+4LCv bm4= IEtlbg== IHNpZ25pZmljYW50bHk= aWVuc3Q= IGxpbmtlZA== IGVpbmVz dGVsZQ== IHRyYXZhaWw= YXZhaWxhYmxl LWxlZnQ= SUVM 6LWM IGFmZm9yZGFibGU= 0YbQtQ== 4K6y4K+N IOCmleCmsOCnhw== IGdlZ2Vu IENhdGVnb3J5 YXJuaW5ncw== IHDDq3I= c2NyaXB0aW9u d2VyZQ== VXJp YW5zd2Vy IGFkb3B0 ZWRpdG9y 4LS3 IG1vYg== QVJO UG93ZXI= eyQ= INGB0LjRgdGC0LXQvA== cnY= aGVsZXNz V2VsY29tZQ== bWVhbg== IEp1ZA== 2bw= UGF5bWVudA== IHB1ZWRlbg== 2KrYrQ== ZW5r IGxpc3Rpbmc= w7B1cg== amFz aW5nYQ== dWx0dXJhbA== QW5zd2Vy LnJlZ2lzdGVy 5oub5ZWG d2Vlaw== IEFyZWE= QVNI 05nRgQ== ZW1wbGF0ZQ== IOmHkQ== IENvbGw= IHBpdA== IGVzZQ== KHU= 0ZbQuw== 4KS/4KSw4KWN4KQ= d3U= KFg= IENFTw== X3U= KGphdmF4 7Iuk IOC4lA== IHRhcw== 4K6+4K6y IGlyb24= IENyb3Nz 5am3 Q2FtZXJh IHdpZGdldA== IGthYg== YW5kbGVy 5oqV5rOo 6rGw IGV4Y2x1c2l2ZQ== IGVudHM= INGH0LXRgA== IER1cmluZw== INis2YY= PXsoKQ== Piw= 16TWvA== L2pzb24= 7Iud 4YOW4YOU LnJm IEJ1ZmZlcg== 5Lu3 IGxlYg== IEpvdXJuYWw= IGNyYQ== IGVuZHM= X2Jhc2U= 7Jew IGNhbmRpZGF0ZQ== 0LXQu9C+0LI= IOCumuCvhg== emVudA== 4KeL4Kao IGdsYWQ= MTgz IE9t IE1lbQ== YW5kZWQ= YnVs dGVlbg== INio2r7bjA== IG11Y2hv bWVt QXVkaW8= V2FpdA== b21p IGludGVydmFs IGtvc3Rlbg== IGJlaW0= 0pvQsA== b3JzZQ== INK3 INiq2LU= IGRpZmbDqXI= Rmls IGxhYmVscw== YW50dQ== IGJlbnQ= IHB1bXA= ICIuLi8uLi8= 2KjZhw== ICEh 656Y 4LSs IEZM IHBhcnRpY2lwYW50cw== IGN6 6KOF z4HOsw== 15PXmQ== aXZlbmVzcw== IHZvbGc= bmVobWVu IFZl IHRlcnJvcg== YW5pc2g= 4Kqo4KuL IGFwcGVuZA== dmFsaWRhdGlvbg== IFNhbGU= 0LHRiw== 4KWo TW92 5oSf IHRoaWNr IOuQ IGJpbmRpbmc= aWJsaQ== IE1heWJl Y3Bw Ij4KCg== IHJlYWxpemU= IGJyb2tlbg== IG11c2ljYWw= xYJv zq7Pgg== IEN1 IHR3ZWU= 0LvQsNC9 IG5vdXZl IHN1ZmZlcg== IEx1 Ols= IHNwb25z LkRpcw== CXRocm93 TGltaXQ= 4YCE4YC5 KG1heA== 4Kqk4Kq+ IGJvb3Q= 2LHZitmC YXRld2F5 RFQ= INqp2Yo= bmVl ZGVzYw== IGthbnM= aXZpZA== IG1hcnJpZWQ= UlM= 4Kaw4KeN4KY= IHN1Yw== Lk8= IExvdWlz bGV0dGU= ZmluYWw= IGbDpQ== 7IKw INC10YHRgtGM IGNyaQ== Q1JF IGFycmVzdA== IHN1cHBvcnRz 7J6R X0xF LlVJ 4KWc IGVsaW0= ZWth INCx0YvRgtGM 2YjZhw== R29vZA== c2VtYmxl IERhcg== IFJvdXRl LVo= YW5q R2Fw 5bqX IGRpZmVyZW50ZXM= 1aHVttaE IHJlcXVlc3RlZA== IOCkheCkquCkqOClhw== LWFuZA== w6tz 4buBdQ== IGNvbnNpZGVyaW5n IFNvdQ== aXRlbA== Lkl0ZW0= 7ZWY6rOg CWdldA== Y2xhc3Nlcw== IGVsaWc= INiw2YTZgw== IEtJTkQ= IEdlcm1hbnk= TGFuZ3VhZ2U= IGRydWdz IHZpcnVz IENh TkFNRQ== IGZhyrs= IG1pag== IHF1YW50aXR5 IHRpZ2h0 4LS2 YXR1cmluZw== Iys= IHB1cmNoYXNlZA== IFNlbmQ= ICMj 7ZWZ IGVi IHJlZHVjZWQ= INmC2K8= IEN1cA== RXhwcmVzcw== IGRpeg== U3VwZXI= cGhvdG8= INC+0Lo= YWNlcg== SU5T UmVw IERlbGV0ZQ== 66qo IM+AzrE= INaD IC8qKg0K IE5hdg== U2V0dGluZw== cGxldGVk X1JP IGNvbXByb20= IGZpcw== 4YOU4YOR4YOY4YOX IM61zq/Ovc6xzrk= bmVx IG1k IHpvYWxz IOG7pQ== U3RhdHM= IHNlZWQ= IGNyaW1pbmFs INm/ INGJ 4Kq+4Kqm YmFuaw== IGV4dGVuZGVk IEknbGw= 4KS54KWH IHNvaXQ= YXRpbg== W3g= 1r8= 56uL 5aWH 4LCV4LGB 4LS+4LSk IOWIhg== LWRvYw== IGR6 4KS/4KSv4KWL4KSC IGFwYXJ0bWVudA== INi02LE= IHNreQ== ZW1z LmdhbWU= ZnJl LnB5 YWR2 IFdlYnNpdGU= aWVkZW4= IGFsbGVn 4YCc dWl0cw== ZW5nYQ== z4nPgg== IGFtaW4= L2luZGV4 aW5uZXJz IHRpY2tldHM= c3lz IHRpbg== b21lbnQ= INCd0LA= IG1hcnJpYWdl IFdBUlJBTlRZ IOC4iA== aXJhcw== 4KS+4KSf U2VxdWVuY2U= LWxpbms= aWxpZw== MTUy IGhq YW5hZ2Vy IOCmnOCmqA== IGFzc2lt b3Nj MDEx IGxldHQ= IMOk YWJldGVz IHRoZW9yeQ== 7Y4= INCy05k= b2tlcw== 4Lio cmVzYQ== J30= 2LnZig== IGFudGU= IEFW IGNsaW5pY2Fs IOqyvQ== SWs= 4Liy4Lin c3lzdGVt IHdvcmxkd2lkZQ== QWxpZ24= LlRocmVhZGluZw== IGpldw== IHJlc29sdXRpb24= CWNoYXI= SGVhZGVycw== eW9y IOCqleCqsOCrgA== 2KjYqQ== X3JlcXVlc3Q= IGtpbGxlZA== 4pSA 552A INin2YTZiA== IGZsYWdz IHByYWN0aWNhbA== IEhvc3BpdGFs IHNpdHRpbmc= PT09 5Y+L IFRob21hcw== 4K6j4K+N4K6f VVRI MTU1 IHRyb25n IG1s IGJldw== IHZvbHVudGU= 5Z2b KHZhbA== ICcl INin24zaqQ== yZlr MTUx aXNhbg== 0YbTmdCw 4LS/4LSf MTgy Y3ljbGVy IE1hcnRpbg== IHp2 aXphw6fDo28= 6L6T INit2KfZhA== IGFscGhh cmVw Y2Ft IHR1ZG8= KHJvb3Q= 4LCa KGpzb24= IEFic3RyYWN0 JCg= IFdvb2Q= U3ltYm9s IOCkpOCksA== IGx1bmNo MTM0 YWNrZWQ= 4KSo4KWN4KS5 U2Vjb25k bm9zdGk= IHNpZ25z IFRvd24= IENvbHVtbg== IHN0dWRpbw== IOaXpeacrA== 0L3Rg9GC IFVr IGJpa2U= ZWk= IGxvYW5z U3Vt IE1lbWJlcg== bnRl IHNlYXJjaGluZw== 2KfZhtiv LmRhdA== IG1pZw== IHRoZXJhcHk= 5ZGo IGdheQ== 16LXnQ== IGFueA== X29yZGVy L3I= IGdvdG8= Y2Y= 2LPYsQ== IGRlYnQ= 0LjRgtCw0Lk= IOad LnBhcmVudA== IGJheQ== IGVmZmljaWVuY3k= YW50YWw= IMOlcg== IGVzbw== IGRyYWc= IENvbW1lbnRz IGV2ZW50dWFsbHk= IG1vbGU= IHNwaW4= X2lkcw== uOCxjeCwpA== 4LKc IGFyYmU= MTM4 IGt1bmc= IM6xzr0= aGVyaXQ= IHBsYXlz w7Nt INC90LXQtA== YW1zdW5n IHlvbg== INC00LXRgg== xLFuxLFu SW5mbA== IG9yaWc= IEhvbQ== 4KSt4KWA IERvZXM= IFvigKZd Q2xvdWQ= 4YOk 0LzRiw== ICct ZXN0aW9ucw== IGhhbmRsaW5n ZXRpYw== aW5pdGlhbA== IGZ5cg== IM6R IGZpbmFuY2U= LkFu 65Cc QlI= Y2l0eQ== INeU16g= IHRvdXRlcw== Wy0= IOC0uOC0gg== IHphcA== IEZhYw== 4Kas4KeH OiU= c3RlcA== 5Y2I IFVzaW5n dW1lbg== IGludGVyZXN0cw== YXB0b3A= cGVn INeV15XXkA== L3s= UmVzZXQ= cmls CWlubGluZQ== IGt1cw== 4LS+4LSy 4LK+4LKy IG11bHRpcA== RGlzdGFuY2U= RW1wbG95ZWU= QUk= IG5laWdoYm9yaG9vZA== ICAgICAgICANCg== INiu2YTYp9mE IHJlZ2lvbmFs Q3Vy INei150= IElocg== ZWtlbg== IHN0eWxlZA== MTM2 TkQ= 4LCy4LGL 2LHZg9ip c3RlcnM= IGNlbGE= ICk7 R0U= 0YXRjA== WVM= IEZvbGxvdw== b3N0cmVhbQ== IHByaXM= YXdheQ== IEZSRUU= INuM24E= IGxvZ2dpbmc= IENoYXQ= cXVvdA== 4KiC IHBvc2U= 4LSe 4KqW IHBsYWF0cw== 0LDQvdC90Y8= IGFjY2VwdGVk aWRlbnRz YXNzZW1ibHk= IFRvdGFs INeQ15w= IHNuYXA= LGI= CWJvb2w= zrHPgg== IH0pCgo= IGNyaXRlcmlh IGJvdQ== w7Bh YW5kZW4= IHRoZXJt 4Kq+4Kqy V2hpdGU= IG1hbmVyYQ== dGVybm9vbg== 5piT IERD 6LM= IGtvbWVu aWZlc3R5bGU= 4Kq14Kq+4Kqu4Kq+4KqC IG1pbmluZw== YWhyZW4= SUVE dXBsaWM= bW9kZQ== 5oyB 4KWN4KSm IENvbmdyZXNz X3dpZHRo aXphZG8= IEF1dG9t aXRlcmFs X25vdA== IGV5 IGhhdQ== IFN0eWxl 4Kqo4KuN4Ko= 4LWN4LSz c3RlbGw= IFJ1bnRpbWU= aXZlYXU= 4KaT IEZvb3Q= IGZvbmN0aW9u IGhlcnM= IHBhbQ== LmZpbGU= IGJhc2tldA== dmlkZW8= QXBy IGlocmU= YXNzZXQ= b3JkYW4= 0LLQsNGA IHByaW9yaXR5 IHNpZW1wcmU= IHBheWluZw== IHNvbGFy IHBkZg== 4Kao4KeN4Kak LnJpZ2h0 IGdlbmRlcg== cXJ0 aW1taW5n IFJlbg== IGhvbGRlcg== LmVjbGlwc2U= ZXVycw== IHN0cmU= IGVuY291cmFnZQ== IOCytg== 66Ck IGdydXBv 0LjRgtCw IGdvb2dsZQ== X2J1dHRvbg== 5ZWq aWRpdHk= w6ltZW50 YW5nZXJz INiu2YjYrw== 4LS5 LWZlaXJh IOaJiw== IGF1dGhvcnM= 56E= INK705nQvA== IG3hu5l0 56ew 0LvRj9C10YLRgdGP oeCxgQ== YWtlcnM= IEJvdGg= 2YjZhNip 5aix5LmQ5bmz5Y+w IHNlcnZpbmc= X3JlZg== IHRpbGU= ZmxhZw== MTYz IM67 IGVzcGE= Pjw/ IFZhcmk= dW1lcmlj X1JFRw== VEVSTg== IG5u IG91dHJvcw== 0LPQtdC9 64uo 4YOj4YOg4YOY IHZlcnRpY2Fs b3N0aWM= IFNlc3Npb24= RVRIT0Q= IFRISVM= KGRvdWJsZQ== LmNvZGU= PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IHF1ZWxxdWVz ZWtlcg== 4LWN4LSe cm9r IGZvbGQ= RGV2 44KB dGFpbg== Il0s IHBlcmQ= 0L7RgtC+ Pyw= IGRpc3Nl ZW5kZXJz ZXRoZXI= IERhdGFiYXNl YmFyZQ== IM+F 5LuO 6rmM YW5ubw== T05U aWRlcnM= RlRXQVJF ZW5nbw== L00= Mjgw zr/OvQ== IGJpcnRoZGF5 IHB1bnQ= IHByb3Zl IE1vdA== IG5hdmlnYXRpb24= Y3VzdG9t ZW5uZQ== IHNvbHZl 4LSt 4LWB4LSu wqDCoA== lYw= 15XXmA== 5Zyo57q/6KeG6aKR 4LK/4LKX4LOG INW01as= 5bi4 IGRpZXNlbQ== ICcK IEFyYWI= IFZBUg== IG1lYWw= INmC2LE= Tm9ybWFs LyoqDQo= IOaXtuaXtuW9qQ== cG9x cmVjZQ== IOuCmA== bmlh 6aaZ6JWJ LmphdmE= IG9idGFpbmVk 5p8= 558= aXN0aW5n IFZpbGw= zrzOrQ== IG5naA== 4K6/4K6f 5LyX 15jXqA== IOCkpuClh+Cklg== 4LmA4Lil 4LKC4LKk 55m9 cG9ydGU= bmFo IHRyYWJhbGhv cmFn 6KiA INCw0L8= IGFkcw== 44Oe IHZpbGxhZ2U= ZWx0YQ== IGNvbnRyZQ== eXNxbA== MTUz b21ldGltZXM= IEF3 IHJlY292ZXJ5 0LbQsA== 4oCZZQ== IMSRaQ== 5LyY 0LXQvNGD 0YDRg9C0 IG5lY2s= CWRhdGE= INeV15XXog== IGFic29sdXRl 4KSX4KS+ IHRleHR1cmU= c3VwZXI= 4LON4LKu IGJpZ2dlcg== IGJvbWI= bWFj IGF0dQ== IGFic29y IE9wdGlvbg== IMSQ YWNrZXI= IGNi IGlkZW50aWZpZWQ= IGVuY3VlbnQ= IM6V 1bjWgNWu IGNvdmVycw== dXJlYXU= 2KfZhtuM 5ZGK IEVjb25vbQ== IGVtZXJnZW5jeQ== IOuN 4YOQ4YOZ cHXDqXM= IOqx IEJvc3Rvbg== INC/0YDQvtC0 IOCkleCkrg== dWNrZXQ= PDwi INaF Mjcw IGZhdXQ= YWhv IG1lcmNhZG8= IGNoZXI= IHpu ZW5zY2g= IEFmcmljYW4= IMO4 IG5vdGljZWQ= KGZsb2F0 IENsb3Vk 15DWt9eo ICc8Lw== Li4uLgoK 0YvQvdCw aWNlcg== 0LjRgdGM b3Bh IGh1bmRyZWRz 4K+B4K61 4LSy4LWN RU5T VmlzdWFs YmVzdA== MzMw IMOB IHRvcm4= WVk= LnRyYW5zZm9ybQ== IExp Vk0= IGVudGVydGFpbm1lbnQ= INCx0YPQuw== 0LPRlg== IHJlaW4= 4bqnbg== IEluZg== IEluZm8= 0YbQuNCw0LvRjA== cmVjb3Jk IExvYw== IGFzc2V0cw== IEAi d2Vpc2U= IGZ1bmRpbmc= YW5jaGU= 4LS+4LSV 44OQ IG1vdGlvbg== X2FjdGlvbg== IHBvY28= IOCmnw== CWRvdWJsZQ== IGVsZWN0cm9uaWM= IG9mZmljaWFscw== IOmmmQ== IE1pcg== IFZpcmdpbg== Q0c= geC4oQ== IGJsZXNz IGludHJvZHVjZWQ= U3Rhcg== LmVxdWFs 5pA= V2lsbA== IGlnbm9yZQ== LWVu IG9yZGVyZWQ= IHNhYmVy IGdlbnRl X2J1ZmZlcg== SFRUUA== INC90LDQtA== bW9uZA== 1avVrw== 44G/ IHBocg== IGxldmVy xaHDrQ== ZWN0aW9u VGlsZQ== TlNTdHJpbmc= IGhlYXJpbmc= IFNFVA== 2LXYsQ== TWlsbA== 4oCmLg== IM+Ez4nOvQ== IGdlaA== UmVnaXN0cnk= 2LTYqg== IGNvZGVz 157XqQ== 4KuL4KqV IEVudGl0eQ== b2xpZA== INGD0YHQuw== LkRl J2U= IHBsYW5ldA== VmFsaWRhdGlvbg== IHRyb3VibGU= aXlv aWZpY2Fy IFdhbGs= IHVua25vd24= LXVp 77yM4oCc UHJlZml4 IGdvdmVybmluZw== IG9saQ== aXhlbHM= 15nXpg== ZW50cmU= Y29uc3RydWN0 IGxhZG8= IG1vbWVudHM= IGdlbGQ= aWF1 Ynl0ZXM= J2lu IEJhbGw= YWRkYQ== IEZlc3RpdmFs IHByZWRpY3Q= cGxhY2VtZW50 LgovLwoK aW5uZW4= IGNhbGN1bGF0ZQ== IFRva2Vu dG9vbA== MjA1 INii2YfZig== xIs= 4KWA4KSo IHByb2dyYW1h U2ltcGxl IHN0cnVnZw== IG1vZGFs LmVtYWls IGNyaW1l 1aHVtw== IGJlbGll IFdhbA== IHRlYQ== IEJvbA== aXNzYW5jZQ== KHByb3Bz IG9jdA== IGFsb3Jz IHNodXQ= eGltbw== Oy8v IGRvY3VtZW50YXRpb24= SGVhbHRo IHRyYW5zbA== INeW15Q= 0LjQt9C9 IHZlcnNpb25z IHJldmVudWU= IE11c2V1bQ== 0q/QvA== INC/0YDQuNC8 4oCC bGljYXRpb25z UkVGRVJSRUQ= IGV4ZW0= IE1hYXI= 5Lmd Pik= 5by6 IHZhbHVhYmxl IHByb3Bvc2Vk IHdhbA== IHNlbWFuYQ== IGNvbW1pc3Npb24= ooU= U3RhdGlj 5q4= IEFjdGl2ZQ== IHF1ZW0= IHPDtg== IHNlbGJzdA== IG91cnNlbHZlcw== IGV0d2Fz 55Y= IExpY2Vuc2Vk T2g= IEph IHN1ZGRlbg== 4YOU4YOl IGdyYWI= IGFkYWxhaA== IGJlZ2lucw== IEF1 Rmxvdw== IERvZw== IHbhu5tp IEJyb3du IFNlcmlhbA== YXZpZ2F0b3I= IHBlcmY= IG1laWxsZQ== YWN0cw== IHF1YW5k PSIi IFNjb3R0 QUU= IGFwcGVhcmVk 6Zu7 IGxpZ2h0cw== IG1hbmc= bHl3b29k 05nRiA== QVRDSA== 0YfQuA== q+GDmg== INin2YbYqg== INeU16I= Lm9y IF8s 7Z4= IGRpc2s= YXdv IGNvbWVudA== IOCotQ== TGli T25jZQ== INC205nQvdC1 IHJhdGlv 4bqr IGd3 IGNvbmNl IGltcHJvdmVk 6ICD IFNob3VsZA== INi52KfZhQ== IHBoYXJt INiq2r4= ICIiCg== ZWxsaQ== INC30LDQsg== 4LWN4LSu INGN0YLQvtC8 44CO 2qnYqg== CXJlc3VsdA== eWFs IHByb21pc2U= QW50 IEhlbg== IGFuZGVy IOCkteCljeCkrw== IHJlbGF0aW9u IEFo dW5kZWZpbmVk IEFuZ2VsZXM= dWVsbGU= 2po= ZXhjZXB0aW9u IGVyc3Q= INGA0YM= dXRoaQ== 4og= QWdlbnQ= IEdyaWQ= Y3Ry IHNpZGVz 2LLZig== IHdlZw== V0U= INCz0L7QtNCw IG51ZXZv IHByaW4= SWdub3Jl VElPTg== xZ90 UGxhY2U= IGt0w7M= IHdhc24ndA== LXk= LG4= LmdyYXBo c3Vic2NyaWJl IGhheg== 0LjRgNC+0LLQsNC9 IExlZQ== IG1vZG8= INCx0YPRgg== IGjDpA== IFNFTw== IGVzdG8= 4Li04LiU IGRhcGF0 IGNhbmRpZGF0ZXM= IG51bXM= IMO2bg== IOCknOCkvuCkpA== 5L+h5oGv YmVlbGQ= YWJs aWV1cnM= 7Lm0 IGJsb2Nrcw== IHN1cHBvc2Vk IOCkheCkuA== IGNvbXBsZXRpb24= IOydvA== IGVmZmVjdGl2ZWx5 CWZsb2F0 MTc4 cXVldA== IHBpZXI= IGludGVycHJldA== VmVj TWFzdGVy INmF2Ks= ZXJzZXk= IGxhaA== IFJlbW92ZQ== ZnVu IGFjb24= U3VwcA== IHN0b3BwZWQ= bWlzc2lvbnM= cG90 IEtub3c= IGlzbGFuZA== IGZyw6U= IGxldHRlcnM= INWl1oDV IGZlbGw= IGjDtg== IGFmZmVjdGVk UmVmcmVzaA== IGFycml2ZWQ= c21hbGw= INGD0LbQtQ== QHByb3BlcnR5 z4TPjA== 4K6/4K6p4K+N 4Kq14Kq+4Kqo Ukk= 5oOz IExvdw== IG1hbnVmYWN0dXJlcg== aWtlbg== IGxhZA== YWRyaWQ= a29s IHByb2JsZW1h cmluZw== U3ViamVjdA== IOGDlOGDoOGDlw== b2hs X3By KGxpbmU= IEltcA== IEV4ZWN1dA== IHt9Owo= ICck IGZvbGxvd3M= INCx0YvQu9C+ 6I2Q IGlubm92YXRpdmU= IERpc3BsYXk= IGFudQ== IGJpdHM= IHByb2dyYW1tZQ== IGRpbmluZw== X2Zs ZW5jacOzbg== INC00L7QsQ== QXZhaWxhYmxl 4LCo4LGB 66OM IGRldmU= IHJldmVyc2U= ZXRvb3Ro 5YyF IMO8w6c= IHJveg== Kioq 4LeT KFsK IOCkuOCkrA== 5ZCn yZQ= IGRlZ3JlZXM= IHZhY2F0aW9u IGNpdWRhZA== ZXRyaWNz IERJ IFJvdw== dHJhaXQ= 6K6k IGxhdW5jaGVk 0YHQutC+0LPQvg== INC/0YDQvtCz IGVneQ== zr/Ouw== Qkk= 4Li2 IG5hcnI= aWto IGF0YXU= YW5uaQ== 6I8= 4LC/4LCv YXNlcg== IHF1aWVu Lm9iamVjdHM= IG7EgQ== MTQ5 Ymc= IGZtdA== 6aqX X0FU IGFjY2Vzc2libGU= IEVsbA== CSAg 5Y+K 2YjZgti5 b3Zp IGVkaXRpb24= YXJ0ZQ== IERhYXI= aWtpcGVkaWE= VGFncw== LWNvbQ== X3o= 2YXbjA== Q3Bw IG93bmVk IEJpZA== 5Z+6 aW5nbHk= LlBSRUZFUlJFRA== b3JzaGlw IFBvZA== LDo= PHNjcmlwdA== amFu dXNv CXJlcw== w6F2 aW9uc2hpcA== Z3JlZw== dXJk IFBhYw== IFByaXY= IHdoZWVs IExpbmtlZA== LmJs IHTDqWNu CWNvdXQ= LnN0cmluZ2lmeQ== IHN0cmluZ3M= TWVy IGNvbXBlbnM= IGRvb3Jz IGdhcmQ= LkVudGl0eQ== xrDhu51p IHJvbA== Kz0= IHNvY2k= QWxsb3c= 44Gk 4LCo4LGN L24= Q2VydA== b25pYw== IGtlZXBz kZw= IG9wdGlvbmFs IGVhcg== IGF5YWE= IG1hbnVmYWN0dXJpbmc= QXV0b3dpcmVk 2YjYp9iq b2Rk IHR1cm5z IGhvbGRz ICJf 2LXZiNmE YWNlZA== 0YPRgdGC IGxpcA== 56C0 05nQvw== ISI= INC+0LHRig== IE91dHB1dA== LCw= X1VTRVI= aHk= X01PREU= bWlz IGNhcnI= LmlucHV0 IFBhcw== IGNvYw== dW1ibg== Lm15 4Kq+4Kqc IENvc3Q= 4Lic MTQy LmV4dA== IFZlZw== 15nXmdeg 7YGs IHlvdXRo IGRhdG9z 5YGH IGFycml2ZQ== IEljb24= IGdvbGY= IGNhdWdodA== ZXNw IG5z aWVydGU= IG5hdHU= 4bqjbg== IGhhcmR3YXJl IG11amVy INC+0YfQtdC90Yw= IHN0YW5kaW5n d3JhcA== INC60LDQtg== IE9pbA== dXBwb3J0ZWQ= c3RtdA== PSU= bW9ucw== IOCkpuCliw== IOyy 4KmC LnBlcg== INC/0YDQuNCy b2xvZ2lh dW8= bHltcA== INC60LXQuw== IGRvY2g= 44Kt MTU2 IHR3aWNl IOuy 2YjYp9mE IEJhcw== X0NM IGVudGVyZWQ= IHJlZnVuZA== IHBpdGNo 5L2T6IKy X29uY2U= IGVhc2U= IHppZW4= IHBheW1lbnRz IGFsbGVy 5pav YWxsZW4= INGA0LXQsw== aWVubmU= X09L LmZvcm0= IHJlY2VpdmluZw== LXJlcw== LmtleXM= IGt1dGk= 4bq7 MTY0 LXRpdGxl b3Bl 4oCcLA== 0LvQtdC60YI= IGluaXRpYWxpemU= T0xPUg== IGZpdG5lc3M= IGNoYW5uZWxz X2xldmVs INeQ15XXmdc= IHZlcnNjaGlsbA== IG13 IGRyaXZlcnM= INC90LXQvtCx0YXQvtC00LjQvA== Y2xhaW0= RVJWRVI= IHRlcm1pbg== cGFs dGVzdGluZw== Wm9uZQ== IHZpc2l0ZWQ= IGVkdWNhdGlvbmFs IHBlcnNwZWN0aXZl 2YXYqg== YXVjb3Vw UEc= LXRleHQ= 5aSq IOC0sg== IFR1cm4= 0L7RgNC4 16rXmQ== IFNPRlRXQVJF IE1haA== IGVzdG9z YWdlbnM= INio2LQ= 77yJCg== VklE IGRvaXM= INec16I= IG5r MTc5 5b2x6Zmi IEJhbmQ= YcOxYQ== INeR16I= IGVuaGFuY2U= 2Js= MTQz INC/0LXRgNCy PHN0ZA== IG7Dum1lcm8= VG9kYXk= IGRlc2lyZWQ= IGFtcGw= aXJlY3Rvcnk= 4LKX4LOG 4LWB4LSo4LWN4LSo4LWB IGNhcmVmdWxseQ== 0rPQvg== IGhvdXNlaG9sZA== IGNvbnNlbnQ= xKk= IG5vYg== IGRvdw== Y2h0cw== LWxpc3Q= INGD0Lk= IHJhdQ== IENsYQ== dW1paw== T0lO INGA0LDQt9Cy 0YPQtNCw 0YDQtQ== INGC0LXRgA== IEJpdGNvaW4= YmxhY2s= IOyK YXNhbg== IG1ldQ== 5a6M IHBhbmc= xrDhu5s= bmVh IE5p LnRhYmxl INGI0YLQvg== IGxvZ2lj IERhbQ== IGRhbmNl 5Zug IFRheA== 66Gd X3Nw 5LuL X2Fs X0xPRw== IHNvd2ll ZW56YQ== INGA0LXQtw== 54Y= LWk= XS8= IGphbg== 54ug YWdnZXI= ZW1p IOC0muC1huC0rw== 4LKn LWVuZA== LmNoYXI= 4KqC4KqX IGNvbmNlcnQ= LWdy T1JL INW61aHVvw== cmF0ZQ== IOGDqOGDlOGDmw== IFJveWFs 57c= IGNyZWF0ZXM= 4KWC4KSq IGdlbnQ= Y2lkbw== IHN1bW1hcnk= RXhhbXBsZQ== 44Gp dmVyZQ== bGVsYQ== 5pel6Z+p VU5D 2YjYsdip cmljcw== 4LS/4LS1 4KuN4Kqv4Kq+ 5LqR w6hu SlM= IGhvdGVscw== 5raI IGN1Yg== 4Ka/4Kef4KeH 0LrQsNC9 IG5ldXQ= MjYw 56aP5Yip 5Yib IGRqYW5nbw== 4KS+4KSv4KS+ IFByb3Rl IFJvbGw= IHBvYg== IFJlc291cmNl YXRpZXM= IHJlY292ZXI= IG1vYmls 7ZSE T3du 1aXVrNW41oI= IC8qCg== IFBhaw== INC/0L7Rhw== IHNlbmRpbmc= IGZsdQ== IHNlbnNvcg== IFdlcg== 5aa7 IEF2YWlsYWJsZQ== MjI1 aWFsaXM= INC40YHRgg== dW5nZQ== INmK2YXZg9mG IEZpbG0= INij2YM= aWZpZXM= IFF1ZXJ5 ZXRlbg== IGdhbWluZw== IEFD 5aS0 XSo= IGFjY3VyYWN5 VXBkYXRlZA== ZXhhbXBsZQ== In0= IFBob3Rv IGVudmlyb24= IEdh IHBhdHRlcm5z YnVz 1aXWgNWr 4LKV4LON4LKV IHRlc3RlZA== IHV1 6Zmk IERvY3VtZW50 IENvdQ== wqc= IOyDgQ== INCy0LDRiA== X3ByZQ== IGJvb2tpbmc= 5bey IGNvbXBldGl0aXZl dW51 IHN1cHBvcnRpbmc= IGZhc2M= 44GI INC00L7Qug== IHNwYWNlcw== INKa U3VtbWFyeQ== IGVjaHQ= IHN1YnN0YW50aWFs c2NoZQ== IGVudHJpZXM= IHly bGVnZW4= c3RvbmU= IGF0dGFjaGVk IExMQw== ImAK 6Lqr IOCksOCkvuCknA== 6K665Z2b dWtv IHpvbg== YXB0dXJl IHJlcHJlc2VudHM= IEZ1bg== IGdlaHQ= 2KbZitiz IGRlbW9jcg== 4pw= IHByZWZpeA== INC+0L3QuA== aWd1cmU= IGRk 5Y+q IEhF TWE= IGjDoA== QlU= QXZn IOCksuCli+Cklw== X0FM X2FuZA== Zm9vZA== 5L6L bW9udGg= T25saW5l 4Kq+4Kqw4KuH IOuTsQ== IHZhZw== INC40L3RhA== 4LCc IGFjaWQ= INC+0LHRgNCw0Lc= IEdldw== IGRpc3BsYXllZA== IERlYg== QmVnaW4= 4KWN4KSn IEJ1bA== MTM3 X2Zvcm0= IOCmqOCmv+Cm IyE= IGVzdMOjbw== ICANCg== IHRyZWF0ZWQ= ZW5jaQ== IOasp+e+jg== 5YWL 2pY= 4KSV4KWN4KSw Y29sbGVjdGlvbg== INqF 4Kiu 7Ig= IEJveQ== IGxpZA== IGFwcmVzZW50 cmlm SG93ZXZlcg== IOKAi+KAiw== IGNhcnJpZWQ= dXp6 zqzOvQ== IHV0aWxpcw== L0E= KCI8 Y2VwdGlvbnM= IOCkr+Ckvg== IGRlbGw= MTYy INM= 0LvTmdGA INC70LXRgg== INiz2Kg= LktleQ== 0LHQuA== IGF1dHJlcw== Q29udmVydA== 0YDQsNGE IGZvcm1hdGlvbg== 4YOj4YOg4YM= IHRyb3U= 4oY= INGH0LXQu9C+0LI= Ym9yZGVy b25nb29zZQ== UG9zdGVk IGNhbGVuZGFy IGRlZmVuc2U= INmI2Kg= Qk4= cmljaA== IENvbW1pdHRlZQ== 4YOU4YOc4YOi ZW5kcmVnaW9u IGN1c3Q= X3Vw IHN1cmdlcnk= aXJj w4A= 0LLQtdGB0YI= IGJlZHJpag== IG5vaw== IGZyZXF1ZW50bHk= 4LKC4LKh 5b6I 4oCZYXV0 IGJyaW5naW5n IHRlbGxz IChA YWNjZXB0 IHBj IGp1Zw== INin2b4= IHBlcmZlY3RseQ== IHNleHk= IEdlb3Jn KFtd 4KWC4KSo IGF2YWlsYWJpbGl0eQ== IG1vaQ== 2KXZhg== IGZvb2Rz IGhvcm0= xLFuYQ== aW50ZQ== IOW/ dW11 IFJvbWFu IEknZA== IGxpdmVk IFBvc3Rz aXTDpA== aWZmZXI= aWtz X2NsaWVudA== b3JvdWdo Q29udmVydGVy IEhhdw== T2N0 IHNlcHQ= IHB1aXM= IENhYg== IHF1YWxpZmllZA== 4La0 5bmy IHByaXg= LmdpdGh1Yg== 4LSV4LWN4LS3 IFVubGVzcw== bmVn Z2V3 IGNhcGFibGU= IGdvYg== IEF3YXJk SHo= a3Vy IFZhcg== VW0= cmlh z4POtQ== ZW1icm8= INuM2Kc= 568= Ymx1ZQ== b2l0 Ym91bmQ= IENvdW50cnk= NDAx YWxhbmQ= IGZpYg== IGlzc3VlZA== CXN3aXRjaA== IHZpc2l0aW5n IHRlcnVn IGRlbHRh KC8= vuiurw== IGRlY2FkZXM= Y21k IOG5o2U= V2F0Y2g= 0YfRiw== ZWxseQ== IHllc3RlcmRheQ== X2FyZ3M= Xyg= 2LPYpw== KHBhcmFtcw== X3ByaWNl IGxhcA== SW1hZ2Vz IHbDvQ== 6YKj dGhh IHNhaA== ZHJpdmVy IHJlcHI= IGtvbXQ= INGC0Ys= LSg= IEZyYW5jaXNjbw== IE1pZA== L0M= YWNpbg== cGFuZWw= 5bqU b25hdmlydXM= IGFuaW1hdGlvbg== IHJvbGVz 2KfYsdiq 4K+B4K6z 0YHQutC40Lk= Q1JJUA== IGZpbmRlbg== IFVs UG91cg== IGN1cnJlbmN5 YXJj IEVudmlyb25tZW50 IGFmdGVybm9vbg== IOC4nA== ZnJlZQ== 2LrYp9mG IEJBUw== QU5T c3RlaW4= X2ltZw== 4K+N4K61 4KS+4KSw4KWH IHZpZw== aXphY2nDs24= IElJSQ== b2tz IHdpcw== UHJlc3NlZA== IGxpa2Vz 0L7QvdC+0Lw= dWxpbmc= IGZ1bmRhbWVudGFs ZmFz IFNvY2lldHk= X0RJUg== L3Jl IGNvcnQ= X1NVQ0NFU1M= 5ZCN54Sh44GX INGB0Yc= cHVzaA== IHZlc3Q= IGVpZw== Ij48Pw== IOGDoeGDkOGDmw== IHJpdA== IHByb3Zlbg== IE51 MTYx IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IGNvb2tpZQ== dW5jaQ== IGJpbw== IEppbQ== IGZsb3dlcnM= cGVhdA== X2NvbnRleHQ= IHNhaw== aW50ZXJuYWw= IGF2YWl0 5Yqf IH0sDQo= 5pS2 IHNob2Vz IG1lbmo= INmF2LPYqg== IMOpcXU= R29vZ2xl quCvjeCuqg== MTQ3 IHBhcnRuZXJzaGlw 5pSv IGfDvG4= INCz0Y0= aWV6 SWxs INC80L0= YXR0cmlidXRl IGJ1dHRlcg== IGZ5 INC90LDQsg== LmRhdGU= IHBoaWxvcw== 4LGB4LCk TWVzc2FnZXM= cGFnZXM= IGZyYW1ld29yaw== 16fXqA== IHBsYXRmb3Jtcw== bHVuZw== IHNjb3Jlcw== ZnJpZW5k dnU= IHNwZWVjaA== IGxvbWI= KG8= JSk= INGB0L7Qtw== LmZs IGFtb3I= INC80LjQvQ== QXNzZXQ= IHNlcnZp IEVzdGFkbw== 2qnZhg== IEphcGFuZXNl IGfDqW7DqXI= IHRoZXkncmU= 4YOQ4YOl 0LvQuNGA0Lg= wqM= IGFsdGlqZA== LXdpZHRo 2KzZig== bWVs IGRlc2lnbmVy Y2FjaGU= IGdyb290 0YDQsNGC0Yw= IGNvbW1pdG1lbnQ= 5p2D 0LjRj9GC IGVx IFZlcnk= 0LLQvtC7 IGluc3BpcmVk bmVq IHNpZ25hdHVyZQ== IHB0 LmVtcHR5 IHBlcnNvbnM= IENhc2U= IG1hc3NpdmU= INGA0LXRiA== VkE= IE1hag== 2YHYtg== aXc= 4Lix4LiB 4YC7 4YOW ICQoJy4= IHN0YWQ= LnJlZg== IGFxdWk= 4KaV4KeN4Ka3 QU1Q 77yT 0YbQuNGO Qm91bmQ= 0LrQsNGP IGZvbGtz IERFUw== d29ydA== IERvbQ== IHByb2NlZWQ= Qm9u LW9mZg== 2KfYptmK VmFsaWRhdG9y 4KS+4KSn YXNhbnQ= 4YOd4YOk aW5zdGFsbA== 77yBCg== IHF1w6k= IGJhc3Q= IG1lZGljaW5l INC80LXQtA== 6LSj IGhvcmE= IHF1YXJ0 IHN1cnByaXNl IGFjY29tcA== d3A= IGNydWNpYWw= cHJvZHVjdHM= IOqztQ== IGhlcw== aXN0ZXM= Y2tub3c= IHlvdSd2ZQ== IOC2uA== IGhlJ3M= YW1ibw== IGZyYWdtZW50 aXJhbg== 5YyX bWFyZ2lu Tk4= IFNhbGVz CWxvY2Fs IE9VVA== T1ZF cmFk LmludGVy L2ltYWdlcw== KGFyZw== IFNhbnQ= IEFtZXJpY2Fucw== IG11aw== IGdhbWJsaW5n YW5hbg== 4oCZYWk= ZHA= IG5vcnM= 4LWN4LSl aWNvbA== IERhbmllbA== IHNpbmdsZXM= IEJlYXV0 IG5vaXNl b2dyYXBoaWM= Lm1vZA== 5YiX U2luY2U= IFFTdHJpbmc= NDgw 2oE= X21ldGhvZA== 548= IGp1cw== IGV4dGVuc2l2ZQ== 55WM a3Np zrvOtw== PigpOwoK aGFuZw== IOmmmea4rw== IGZvdXJ0aA== UGVybWlzc2lvbg== z4TOrg== VEY= IElzbGFt IGTDrWFz aWVyZQ== IHJlYWN0 IG1hY2hlbg== IOCmj+CmrA== RU5DRQ== IHR1c3Nlbg== IGltYWdpbmU= 6K+7 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Q29uZg== IOykkQ== IMW8ZQ== w6RjaA== 0LvQuNC6 IGlsaQ== U2hvcA== IGFjZQ== 4LmA4LiU IFBlcnNvbmFs aWVkYWQ= IOC0tg== c3Rv 67Cp 0pvQsNC9 IHZlcnY= 4KS+4KSy4KWA KHRlbXA= YXJlbmVzcw== IHNlamE= IGFsdGE= ZGVybg== U2VsZg== cmVi IHRlbWE= QUNI IOaxnw== w6F0aWNh IFTDvHI= YWN0dWFs 0ZbQvdGW IFN0b3J5 IE9Q 5aaH 44K6 ZmFy IGRpYXM= IOCkruClhw== eGM= aWVzdA== UHJvZg== X0k= IHJlY29t dXBh IE1hY2hpbmU= U3RvY2s= IHRlbGV2aXNpb24= SW5zZXJ0 Rk9STQ== IEVzYw== YXRpdmFz INGC0L7QvA== IGJpbmQ= Qmln X0ZJTEU= 5rk= IFBB IGRlbGljaW91cw== bWFn IGZvcmFt IHBvcnRpb24= Lio7Cg== IE5pZ2h0 4Lit4Lij4LmM IGNoZWNraW5n IEdS IEFtYg== dm9rZQ== MTU0 LWJvZHk= 0LLQvtGA IHBpY2tlZA== MTQ4 IOCqhuCqqg== 5LqU5pyI IGpldHp0 IFVQ IGJ1Zw== Q21k INiv2Yg= X3Jvdw== IHdoYWs= INKX 44KE IG1pbmlzdGVy IHNhZw== IOeZ MDIw IGZyZWVkb20= 2KfZhNio IFByb2R1Y3Rz IGVmZWN0 5YM= TWVzaA== IFJhbmRvbQ== IHVyaQ== IHZpb2xlbmNl ZWFybmluZw== aXJ0cw== KQovLw== aXNrZQ== IHVzdA== IFJvZA== 4KuH4Kqw IGRpZ2l0 INGC0L7Qs9C+ LlVu L2xpYg== 6LWE5paZ 4KWm LlRhc2tz TWFpbA== IFtdLAo= IHNvbGlj 1aHVog== KHRpbWU= IGtheQ== w7xocg== UGFja2V0 TElDRU5TRQ== IGV2dA== xbx5 16DXmA== a3dhcmdz IGluY3JlZGlibGU= IFPDo28= ZGVycg== ZmlsZW5hbWU= cml0ZXJpb24= IGludGVucw== IHJlcGxhY2VtZW50 IGJvbQ== IG1vZGlmaWVk IGhvZw== IGNvbXBhcmlzb24= XzsK IOaJi+acug== IFZvdXM= IEFH IHdhaw== IGdhbmc= MTU5 IHNwZWFraW5n SEQ= 4KqI 4Lij4Li0 IGNvbnN0YW50bHk= V2lu IFJ1c3NpYW4= UGE= MTc3 CSAgICA= b3V0aW5n IGNvbmNyZXRl LWxldmVs IG5vdGlmaWNhdGlvbg== IFRoZXJlZm9yZQ== IE1pZGRsZQ== IHRyYW4= Tkc= IHB1dHM= IGdyb3Rl xL4= IHJldmVhbGVk YXdhaXQ= INmE2Ko= 4KWB4KSm IGRhaA== INGC06k= IG5lZA== IG1r RW52aXJvbm1lbnQ= MTcy IHJlYWxpemFy LlR5cGU= w61v aXZhbGVudA== bMOk IGFjY29yZA== IHdvcnNl 54o= IHByb2Js IHJlY2hlcg== IEhp IHVzdWFs 2YjZhtmH IGRlZmlu U2VjdXJpdHk= bG9zcw== WVA= MDEy QWRkcg== LmdyaWQ= KEh0dHA= IHR5cGljYWw= am4= IGRyYWZ0 IGVtcHJlc2Fz SHRtbA== IHJhbmQ= IGNhcmFjdGVy IENoYXJs IeKAnQ== 44Gb INGE0L7RgNC8 IGFkZHM= IGNhYmxl IFdpbGxpYW0= 44OB c3Nlbg== 4buvbmc= IENhdA== IM6g LklE IFRyaXA= V0g= 4KWH4KS4 IG1haW5seQ== IGVtcGg= INC30LDQsQ== IGFnZW50cw== RGF0 Ii4k YXh5 IEplcg== MTQ2 INin2YTZhdmG IHNob2Nr LkxheW91dA== Lm1vZHVsZQ== IGNvb2tpbmc= IE11 ZGVmaW5lZA== IOCkpuCkv+CkqA== ZW55 IGNvbmZpcm1lZA== MTc2 cmY= 4LKm4LKy4LON4LKy4LK/ 5L2G Y2ltZW50bw== TFA= aXZhcw== bm90ZQ== aGFsdA== IGhpc3RvcmljYWw= w4I= KX0K bG9u 7IU= YXBpbmc= bWFubg== 0L7RgdC+0LE= RXhlY3V0 vZQ= INGA0LDRgdC/ 1oM= IHRyaW0= Um9i INCg0L7RgdGB IHJlbm92 IOCkuOCljeCktQ== 0LjQvdC1 5YyX5Lqs MTY2 X2FwcA== aXJlbWVudA== 44CBCg== ICkNCg== 0LrQuNC8 INC90LDQvw== dmVyYg== IOCkuOCksA== 0q/Quw== IE9wdGlvbmFs 0YPRiQ== IGVzaw== NDU2 VHJhbnNmZXI= 5Yqp Lm9w ZmllbGRz 4YCr IG5k4buL dWJi 4LS/4LSq IFRlY2g= IOCquOCqrg== INC60LDRgg== 5oiY Q29tYm8= 0LDQu9Cw0YA= IMKp 5ZCI5rOV VGhlbg== INio2Ko= 4LmH4LiZ IGNhcHR1cmU= IGFtZW4= T01F 4LCy4LGB MDA3 4KWB4KSq IERpc25leQ== 4YOU4YOd CXN1cGVy IGV4Y2Vs X3E= bWl0dA== 0YzRjg== IGZvcmNlZA== 64u5 25QKCg== X1RP 5YWN6LS56KeG6aKR INC/0YDQvtGC 5LiA5Yy6 5qGI IGxvbg== IG51ZXN0cm8= IGJ1ZmY= 5oCB IGhhZw== VVBEQVRF INeU15XXkA== 4K+N4K6y Lm51bQ== IE5hY2lvbmFs CWxldA== ISk= 0YnQtdGB0YLQsg== IENhcnQ= YWNvbg== IEdlYg== cmVxdQ== IGN1dHRpbmc= 4KuH4Kq2 IGNvbmNlcm5lZA== 4YCs4YC4 IHlhcmQ= IGVzc2E= 44OD44Kv X2NyZWF0ZQ== IFJ1c3NpYQ== 4Ka+4KaX aXlh L2pz QW5hbA== IHBveg== 5aSE MjI0 SW5mbGF0ZXI= IGFzc3VtZQ== KHNl dW1hcw== ICAgICAK IERlemU= 5oyH LkJhY2s= UEVD UHJvZHVjdHM= IGluYQ== IGhpcmU= 4YCh X05PVA== Z3Jlcw== INC/0YDQvtCx IGZldA== IGhvdXNpbmc= INC40LzQtQ== IG9uYQ== IG9yZ2FuaWM= IGVudGlyZWx5 zrzOvw== IEZBTFNF Y29udGludWU= aWJlbg== IGTDqXM= c2lt dGY= IFNV IGZvcmVzdA== IGfEpw== IHJlY29yZGVk IFlPVQ== aWJ1cw== cGxpbmc= IGp1Z2E= IEFMTA== IGNpdGl6ZW5z dWxsZW4= IFNwYWNl INC70Lg= INmK2Ko= IGxpc3Rz IEpvaW4= QmxhY2s= IEV1cm9wYQ== IHNlZ3VuZG8= IGFjb21w IFJP ZW5kZW50 dGM= IHByaW1lcmE= aXZvdA== 2LDZhNmD asOg IGthdGlrYQ== 0YvQu9GL IG5lYXJieQ== IGhvbm9y IE1lbnNjaGVu IG1veQ== aW9yZXM= 5Yqe INCx0L7Qu9C10LU= 546H ZWhpY2xl w6Fk IEluaXRpYWxpemU= IHJldmlz IGV4aXN0ZQ== IHdpbm5lcg== IG9nc8Ol 4LWB4LS1 IFByb3BlcnRpZXM= VGVzdHM= IGRpZmZlcmVuY2Vz IGNldA== IE1pYw== IGR3 IGRvcA== IGNoYW0= Q29uc3RhbnQ= VkU= PHA= eXN0YWw= dWtz Q29udGFpbnM= IE5hbQ== LmFs IEN1cg== YXJkbw== b25nYQ== IOCkruCkv+Cksg== aWVybm8= IG1vdmVz Lz4K IHBpcw== IEVYUEVDVA== IHNpdHVhdGlvbnM= X3VwZGF0ZQ== IG51bXB5 aXBpZW50 4KeB4Kao IHBlcmNl IGl0bw== INin2YTYug== 0LjRgNC+0LI= IGZvcm1hbA== IHByb3llY3Q= MDA2 IGJlYXVjb3Vw INCy0YvRgQ== UnVudGltZQ== Tm92 2YXZhw== IGJyZWFk IHByb29m IGdlbmU= INuM2qk= MTU4 0pc= IOCkpOCklQ== LnNvcnQ= CXVpbnQ= 4KSw4KWN4KS3 cGlk UHJlZmVyZW5jZXM= IGFjdG9y IExhYg== 5Zu+54mH dHlwZW9m XSks 0pPRg9GA Y2lu 5Y+X Q29uc29sZQ== 5a2Y J107 IG3DqXQ= v4A= IHRvdXJu 4K6+4K6f IFNu IGdvbA== aWprZW4= IGRlc2Vudm9s U2l0ZQ== IGRlag== IGNoYXJnZWQ= IGtub3dpbmc= INC/0L7RgdC70LU= IHByZXNlbnRhdGlvbg== IHNjaGVtYQ== bGFzcw== IGxpZ25l MjEy 4Lip IHByb2NlZHVyZXM= dHJpbQ== 2YPYqQ== IHRyYXbDqXM= IG3Dsw== IOWkqQ== 4LmI4Liy4Lii 0LnQuw== IENvbnN0 IHJvdWdo w6FzdA== IFdpbGQ= LWJsb2Nr IHJlYXNvbmFibGU= RE0= emln IHJlZ3VsYXJseQ== MTcx IGxpZnQ= b3N0aQ== 55Sz Lml0ZW1z RGljdA== IFNB 4Z6R LnBhZ2U= IFRpdGxl 67KI 0LjQvdGL IEVzdGU= IHdhcm5pbmc= IHNtaWxl IHZhbGlkYXRpb24= aWxpdGllcw== IGxvdmVz IG5lcnY= INC00LDQsg== IE1pY2g= YXBlcnM= 0L7RgdC/ QnV5 IGNvbmZvcm0= IGJlbGllZg== aXBlcg== YXllZA== IHphaw== 2YTZgg== IHdlYXJpbmc= bG9hZGluZw== LnN3 IGhy IENPTkRJVA== IHVuZg== YXR0ZWQ= IERWRA== TE0= xI1p 4LKt IERldXRzY2g= bnljaA== KGFycg== INC00LXQvdGM 0LjQtg== 0LzQvtGC0YA= Lm5vdA== 4YOY4YOo bGlmZQ== 15nXkg== 2K/Yp9mF IGRpc2g= IHN1YnNjcmli IGNvbXB0ZQ== INin2YTZhdit INmG24HbjNq6 4YOY4YOW 4LiU4Li04LiV IGhhdHRl d2Vs ZW5ueQ== IFNwZWM= IERvbid0 IEpvbg== IHRyaXR1cg== CWZpbmFs IHV1cg== 56Wo IHBlcnNvbmE= IGVuY291bnRlcg== LVY= IGluZm9ybWFjacOzbg== MTU3 IEFkbWlu IHNlaQ== PjsK IHJlcHJvZHU= QGc= IGVzdHVk 0LfQtQ== 7KSR IHZhcw== 16HXmA== RmFtaWx5 4KWB4KSk IHRpaw== IOCkrOCkvuCkpg== IHllbGxvdw== dHJhbnNmb3Jt emllbg== d20= IGV2ZXJ5ZGF5 IEhhbA== IEJhdGg= bGltaXQ= IFNlY3Rpb24= IG5vdGVk IGRhbWl0 z4HOtQ== 6Ze7 YWNoZXM= IGJyb3du IHVuYWJsZQ== 5LyK IHN0YXRz IOWcqA== TGVn 4LK+4LKw4LOG IG5pbmU= 4LK+4LK1 IGJvdXQ= IGxpc3RlbmVy IOGDlOGDoQ== IHBlcmNlbnRhZ2U= IHBhYXI= IGZhY3Rz LWo= IERhaWx5 YW7Dp2E= IGNsdXN0ZXI= Q29sdW1ucw== IE1leGljbw== ZW5jZXI= YXRldXJz LlVzZQ== IOClpAoK bGF5ZXI= IFNL IEJpYmxl IGxldHM= QWxzbw== INCy0L7QtA== IGJvYXQ= IFBvbGljZQ== dHlwZW4= X3RlbXBsYXRl ID8K Z29z wqk= IFNtYWxs b3VuY2U= IG1hZ2lj eGZm 0YHRgtGA0YM= IGJpeg== IHJvdXRlcw== IGNoZXo= IEZhaXI= IG1paw== IGdsb2I= IGlldHM= SW50ZXJu 5oiQ5Lq6 bmFs IFVuZQ== xZ/EsQ== 1LE= 0L3QtdC1 YWxhbQ== 4Lac KHN1Yg== LW8= IHRhbGw= CVQ= 4KeH4KaV4KeH aWRvcg== IHRlZXRo hOC4o+C4lOC4tOC4lQ== YmVycnk= 1aHVvtW41oA= LlNob3c= LmFk 4Z+S4Z6a4Z4= IHppag== IFRvb2w= IOCoqg== XCc= IFJheQ== CQoJCg== INC90LXQvA== IEhvbg== JSUlJSUlJSU= IGltcG9zc2libGU= 0IY= LkxvZ2dlcg== INC+0LHQu9Cw 15HXog== IHNlc3Npb25z IE5lZWQ= X29wdGlvbnM= IFBoeXM= IGZyYW0= IGNvbmNlcg== ICI8Lw== 4KuN4Kqv4KuL IFJpZ2h0cw== 44CC77yM IENvbnRyb2xsZXI= CSAgICAg KE9iamVjdA== IGNvbGxlZw== IEZ1cnRoZXI= 4LKm4LOB IGZlbGxvdw== IGdldg== IHByaXNvbg== IGxvbWJvaw== IE1F IHByZXNpZGVudGU= IGZyZXF1ZW5jeQ== Q3JlZA== IOy5 dHJlZQ== IHJlc2lzdA== ZW51bQ== INGH0LDRgQ== IEluZHVzdHI= aW1hdGVseQ== w6FyaWE= 5Li7566h UHJvdG9jb2w= IGAkew== IGRhdGV0aW1l dmFyaWFibGU= IGV0dMOk IGNyb3dk X2ZpbHRlcg== INeR16g= X2Zvcm1hdA== 0LXQvdGC0LA= IENocmlz KHF1ZXJ5 4YOQ4YOg4YOY NjY2 5oi/ IO2M IHNuZWw= INWw1aHVtQ== IEJyZWFr ZmV0Y2g= IGNvdWxkbg== IFByb2ZpbGU= cGV6 IHN1Ym1pdHRlZA== LlBhcnNl ZW50aXRpZXM= 5b2p56Wo5bmz5Y+w IGdlbnU= 2YLYp9mE LEI= IG1hdHRlcnM= IENvbm5lY3Rpb24= LnN1YnN0cmluZw== IG5vcm1hbGx5 4YCy IHdlYWx0aA== 4LmJ4Lit IHNwYW4= U08= YW5jYQ== IGVtb3Rpb25hbA== IE1haWw= IG9wZXJhdGU= 5p2h U2FtcGxl INee16o= 4KS/4KSf b250ZQ== 24g= aWZpZXJz IHN1YnNl ZXll VE9O IHZpZWxl cHBpbmc= c2Q= VEhFUg== QUlO IOCmmA== IFZlbg== QmVu cGxpZXJz ISEKCg== aWdrZWl0 T3JnYW4= IGtvamk= IGNvYXN0 IGhvZ3k= INGB0YLQvg== INWm IFRSVUU= IGdhcmFnZQ== 5o6o6I2Q 2YjYtA== 5YQ= INC60YA= IElocmU= IHZveQ== YWJlbg== 5byA5aWW57uT5p6c aW5lbQ== IG1hc3Nhc2pl 64ql INGH0LXQvA== X2NvbHVtbg== INGC0LDQvA== ZWxkZQ== IEV4cHJlc3M= T0RVTEU= 44Ol d2VicGFjaw== IEZB 7YOA IHw9 IGdhc3Q= IHJlbGF0aXZlbHk= INqp2pM= IHBhcGVycw== o+GDmg== b3JyeQ== IG1vaXM= IGNsaXA= 0YjRiw== IGFyYQ== IHVyYmFu IHN1YnNjcmlwdGlvbg== IGltcGVy KGFkZHJlc3M= IGJhbmc= QnVzaW5lc3M= LmNvbm5lY3Q= 6L+e R3JlYXQ= IG7DpQ== IGluc3RpdHV0aW9u ZsO8aHI= b2NrZXI= IG51bmNh 2LLYp9ix LXByaW1hcnk= Y2tlbg== IOC0qOC0nw== RXhwb3J0 Zm94 66y8 am9z IHNjaWVudGlmaWM= IGlrZQ== X2ZyYW1l IGdhcA== LlJF IM6xz4U= IFRhbA== IG1pbmltYWw= Rm9vdA== 4LGN4LC4 IMOpcA== Y2FydA== dmlh 4LON4LK1 IENydQ== 0YDQvtCx meCnjeCm 2YTYp9iq LWljb24= YWtlZA== IHNlbGVjdG9y IGVzcGVj IG51ZXN0cmE= b25pYQ== KGltYWdl REVS ZW1hYWt0 4LiZ4Li14LmJ 2YLYtw== IHJlbmV3 YW1pbmU= LWhlYWRlcg== INC80LDRgA== IFdlaWdodA== IG91dHN0YW5kaW5n INeR16k= ImdpdGh1Yg== 57uP5b2p56Wo IFRyYWluaW5n J10pKQ== IHZldA== 4KWB4KSW aGVyZQ== IHBhcnRpY2lwYXRl 0YLQug== IHJvdXRpbmU= INCz0L7Quw== 4LSa4LWN4LSa IEltcG9ydA== aW1lbnRvcw== 6Lw= Q2hlY2tlZA== aW50YWdl QmFn bWVudGF0aW9u IEphYw== IGtlbA== MjA2 KHN0YXJ0 5pWw5o2u INGB0L/QtQ== INmK2Lk= X2FyZ3VtZW50 VW5k L0xJQ0VOU0U= 4oCZZXg= IGtvaw== LyR7 IG1pbGs= INC60LA= IGNpcmN1bXN0YW5jZXM= MjA4 IGVpbmc= cmlqaw== 4oCZLg== dmVuaXI= 5Lik YXN0aQ== 54U= IGFjaHRlcg== dXJzaW5n 0LXQvdC90Y8= IGxpcXVpZA== 56eN cGVjdGlvbg== 4KSP4KSV4KWL 5oU= 4LS/4LSa4LWN4LSa4LWB aG92 IGNsb3Nlcg== IGRlbGlnaHQ= 4Kq/4Kqy 6L2s 7J6E X3BvcnQ= LW1pbg== LAovLw== b2xlbg== 4bqjaQ== IHRpbnk= 4KWL4KSy R2VuZXJhbA== YXJyeQ== IHNwaXJpdHVhbA== SW5m LmJlYW5z 4KeL4KaX IGZlc3RpdmFs IOGDl+GDkOGDlQ== IHNoZWxs 27I= ZnRlbg== zr3Otw== bHlwaA== IEFub3RoZXI= IHBpbGxz c3RpdHV0aW9u IHZlcnNjaGlsbGVuZGU= INC30LQ= IGNoYXB0ZXI= Wwo= Q29sb3Jz IGhlYWx0aGNhcmU= IElC IOCkuOCljeCkpQ== IC0q IHVwY29taW5n cnVwdGVk U3dpdGNo IHJlZGlzdHJpYnV0ZQ== IEJhbmc= IGNvbnRyb2xz Y3JlZGl0 IGNvbnNpc3Rz RkQ= IH0KLy8= bWVtYmVy 4LSn IGFzc2VtYmx5 IGNhc2lub3M= KG91dA== w6FuZA== IHRpZW5lbg== KGRi UG9k 4Kq+4Kqj L2FwaQ== IGNvdW50eQ== VXN1YXJpbw== IHNvcnRlZA== 4LK+4LKv TWFn IGRlcGVuZHM= LnNlc3Npb24= IElOVA== 4YCu IM+AzrU= Ymxhbms= IGlraQ== Om4= bGVp X29w IHN0cm9rZQ== IHd4 XSk7Cgo= fSIs dHlwZW5hbWU= IGFydHM= Oi0= IGNsb3RoZXM= YXNpbGU= 5Lmm 4KuN4Kqv4KuB4KqC IGFzc2Vzc21lbnQ= IFRhYg== aXNzaW5n IHBvdg== IG5oaQ== 4K6/4K6V4K+N4K6V IHByw6lj 6rWQ INeT16LXqA== IG5lbg== 4LK/4LKC4LKm IFByaW1l IHNww6lj w5o= INCy0ZbQtA== IGNvcGllcw== Q29uc3RyYWludHM= IFRlcnI= IGVtcGxveW1lbnQ= aWdz Q2hhbmdlcw== 6ZSL MDA4 IHByZWZlcnJlZA== aW11 aGVlbA== 1bjWgtW9 b2x5 IOCmqOCmvg== 4LWN4LSm xZvEhw== X25hbWVz IGFudGljaXA= IFB1 0LrQvtCz0L4= IOCwsg== IHJlbGlnaW91cw== ICcnLA== IOCkleCkvuCksOCljeCkrw== IGNob2NvbGF0ZQ== IG1hZ2F6aW5l 5pyN5Yqh IGthbmc= 5LuY NTUw 4LS/4LSy4LWG IHp3ZWk= IEd1aWQ= IOCmpw== IOCknOClgA== INin2Kg= RlA= IOaA IEp1 4Ka3 IFJU IG1vbmQ= IFVTRQ== IG1lc2Vz INCw0LLRgtC+0Lw= IGNyaXRpYw== X2hlYWRlcg== IGZsZXhpYmxl IHRlbGxpbmc= IGhvc3Rpbmc= IEFydHM= IGRpcGw= IG1lbWJlcnNoaXA= IFst IGxpc3RlbmluZw== IE5vdXM= 2YLYsQ== UmVjZW50 aWHDp8Ojbw== eGQ= ICAgIAogICAgCg== c2VsZWN0b3I= IGlndWFs IHRoYQ== IEF1ZGlv IHBlcnNvbm5lcw== YXR5 IG9ic3Q= IGh1cnQ= IEFjYWRlbXk= UGx1cw== IFNX ZXN0cg== IOu2gA== 1bA= 4KeB4KaV IGxpa2Vk 0LrQu9GO0Yc= 4oaS IFJhbQ== IEV0aA== IHdp QXJ0aWNsZQ== INmI2KfZhNmF 55c= IHNpbHZlcg== IGFncmlj Lz4= 4LSV4LWN4LSV4LWN IHNob3dlcg== UHJpdmF0ZQ== xrDGoQ== IGhhcHBlbmluZw== aWtpbg== 4KWL4KSf Zm9yd2FyZA== cm9nZW4= 4LOB4LKk4LON4LKk IG9jY3VycmVk SURF IG1hdGNoaW5n IGV4dGVuZA== IG5ldHdvcmtz IG94 IHBpZWQ= IGRlcG8= 5YWJ 4LCC4LCh 0LLQsNGC0Yw= IHBvaXM= IGNhcmE= IHRldA== X0lORk8= IGFkag== 4LCC4LCy4LGL 4YOQ4YOW IHRyYWNraW5n IGludGVyYWN0 ISIpOwo= IHJlZm9ybQ== IG5nxrDhu51p XSkp IGRlYmU= X2luZA== INCy0L7Qt9C80L7Qtg== IGZ1bms= IE1hZHJpZA== 0q3QsA== bGV6 IGFrbw== IG1vZXRlbg== 0YDQsNCx0L7Rgg== ZGF5cw== fQovLw== Lm1l IGZpYw== INC606nRgA== RW52 bWVr IGJveXM= IGF1dHJl IG9yZQ== 0LTQsNC8 aGVhbHRo IGNoYWxsZW5naW5n 2K7YqtmE2YE= VGlw IHNlaW5l IOyXhg== 4Lin4Lix4LiZ Y3JlbWVudA== IGh1aXM= IHRva2Vucw== 2LPYqtiu Y29sbA== MjEz IHJ1c3Q= Y3JlZA== IGNob29zaW5n IFNN cHJvZ3JhbQ== IHBvZGVt aXRpb25hbGx5 4LmA4LiX w6FjaWw= IGNpcmN1aXQ= IFRydXN0 4bu3 SU5L SUNBVElPTg== IEZpbHRlcg== IGxhaw== bWF0aA== INC/0YDQtdC00YHRgtCw0LI= IGJ1aWxkaW5ncw== kZA= IGFmZmlsaWF0ZQ== 1bjWgtWp1bXVuNaC1bbVqA== IGN1YWxxdWllcg== YXJyb3c= cGVz KSwNCg== IGZlYXR1cmVk INio2K0= U2VyaWFsaXplcg== IGNvcnJlY3RseQ== IENPTkRJVElPTlM= IG11bmQ= INqp24zYpw== IGhvdXNlcw== 5aKe IOCyheCytQ== 0LXQvdC40Y4= ZnU= X05P IExhbmd1YWdl IERyYXc= MTY5 IFJpY2hhcmQ= 5qy+ IG1lag== U291bmQ= dW50dQ== IE5vcmQ= TEQ= YWNpb3Vz IGNvbmR1Y3RlZA== IG1lcmdl 0LjRgdC4 IGfDvA== LdGC0L4= IFBob25l MjEx IHR1bA== IEN5 44Oj IG9tZGF0 IGFnZXM= 66ek 7Z6I IFpv IOyVig== IHdpZGVseQ== Ym9va3M= RmlsbA== INio2Yo= cXVvdGU= 2KfZgdip 16DXmded 4KeN4Kau LnZhbA== 4LC5 eWluZw== IOCmpOCmvuCmsA== IGtpdGE= vrPpl6g= IGJyb3dz YWNpYXM= IHBvc3Rlcg== LnNsZWVw 4LGB4LCy4LGB LHM= 2LfYsQ== bm9z IHRpbmc= IG5hY2lvbmFs 15DXqg== INC+0YHQvdC+0LI= IER1cg== IHNocg== X0lOVA== IGRpc2FwcG9pbnQ= IGNhZg== 6K+i YXVlcg== X3ZhbHVlcw== bGF5b3V0 IG9ic2VydmVk INCx0LDQuw== MzEw QmFzaWM= Y2xhaW1lcg== IGtldg== LlRoZQ== IGVzdGltYXRlZA== INmE2Yg= IHdyYXA= X2pzb24= U2xvdA== wqE= 1ac= xJlk IENoaWxkcmVu aXN1 IGxlZ2VuZA== INC80LU= IGRvbm4= IHJlc29ydA== IFJvdA== CiAgICAgICAgCg== IHJlY29nbml6ZWQ= IHpvcmc= IGludmVudA== SUVMRA== LnZhbHVlcw== IG1lw7A= IHRhaQ== IGxpZmVzdHlsZQ== 5po= IG1pbmhh IGRlbGV0ZWQ= X3ZlcnNpb24= 5biI IEtpbmdkb20= INiq2LQ= LmxibA== IGNvbnNpc3RlbnQ= 0LDQvdGC IHJlY3J1aXQ= INmC2KjZhA== KysrKw== INin2YTYsg== U25hcHNob3Q= INC80LDRiA== 6riA 4LmJ4Lit4LiH SWNo IEJ5dGU= R08= IO2U aW50cw== IHN5bnQ= dmlzaWJsZQ== IHRpbWVvdXQ= aXRyYQ== bGFo aWZpY2lhbA== IGFwcG9pbnRtZW50 IExpZQ== IGdyb3du cGVjdHM= bG9nZ2Vy IGV4cGxhaW5lZA== IHdyaXRlcnM= IEpvZQ== 6Iqx IHRyZW5kcw== INGC0q8= IFN1cw== 4KuH4Kqf X05VTQ== MTY3 IO2P Y2hlZHVsZXI= dGFpbA== 44KP IM64zrE= IFVTRA== ZXR0YQ== X3JhdGU= INix24E= IGFwYXJl IGNvbGxlY3RlZA== d29vcmQ= IMOhcmVh IGZ1bmN0aW9uYWw= Y3Y= IHdhdmU= IHdvcnN0 dW1ibmFpbA== IOCymg== 5L+u 0YDQtdC00LXQuw== IGhvyrs= b2xsZW4= X2Vycg== 0ZjQsA== 0YXQsA== INGC0YM= b3duZWQ= aWNreQ== IEZvcmQ= 5aSH IE1hdGNo IGhveQ== cGluZw== TEVE IElG IHRheGVz IOCkleClgeCk Q3RybA== IG9zbG8= U3R1ZA== IGZhY2luZw== 0YDQsNGJ INWw1aHVtNWh1oA= IFByb3Y= IGF1dGhvcml0eQ== IG9sYW4= IGVuY29udHJhcg== IOCknOCkvuCkqA== IHNhdmluZw== 4K6/4K61 6K0= dGVyeQ== ICdf IENvbmY= IGhlcnNlbGY= IG1hbmlw 4Kah cm9k cGFkZGluZw== IENhcm9saW5h c2hh IOGDkOGDkw== YWRhbg== IENvcnBvcmF0aW9u IG1hbQ== 4YOY4YOY4YOh 0LLQvg== SUNL IExlYWQ= IOCorg== IGNvbnRhaW5lZA== Wyg= IEFxdQ== OwoKLy8= IGFzcA== VGhyb3c= IHJlc3VsdGluZw== 0LDQvdC40Lg= 5Zui IFBlcm0= IFR1 IOGDoOGDneGDm+GDlOGDmg== IGd5bQ== IG5laQ== X0s= 6YKA 55yB IGluaWNp 4KSo4KWN Q291cnNl 0LzQsNGC IHdhbGxz IGdyYW50 YWNoYQ== Q29sbGVjdA== c2V4 IERhdGluZw== IGNpcmN1bA== LmNvbXA= IGZydXN0cg== 5pW0 aXNtaXNz 4LiY IFRvb2xz INC80LjQuw== xrDhu51uZw== IHBldGl0 44CC44CC 5YeG IHdha2U= CQkJCQkJCQkJCQk= 1aHVuw== aWVrZQ== 0L7RgNC+0Yg= 5YWN6LS56KeC55yL KGRl aWxldA== IOCmrOCnjeCmrw== INeU16A= IENhdGg= IHlvZw== IG15cw== IGFkYQ== 1aHVttWh1a8= bmlxdWU= 4LmA4LiV IOyeiOuLpA== LklPRXhjZXB0aW9u IHNjaGVkdWxlZA== V2hv IGludmVzdG9ycw== Y2Vzc28= INmB2Yk= IGp1c3RpY2U= IEl0YWxpYW4= IGludmVzdGlnYXRpb24= 4KWN4KS5 IHJpdmVy b2dyYXA= IGV1cm9z IHZvaXI= T2xk IGRpc2N1c3NlZA== XSg= cGF5 dWdhbA== IOCqnw== IE1pa2U= 4LmE4LiX4Lii IOCkieCkqOCljeCkuQ== LnJlc3BvbnNl 15nXlw== INGB0LTQtdC7 aWRheXM= X0FTUw== 4KWN4KSb INio24w= 0LjSmw== Z3J5 bcOk IFN1cHA= 4KS+4KSw4KS+ Lm5vdw== c3U= IGNhdXM= IGxlc3NvbnM= cmVzb3VyY2U= IGNvYg== INC60LDRhw== 4KSX4KWA IHRvY2g= LmZhY3Rvcnk= X2Zy IHdpdGhkcmF3 4Kq/4Kq1 Lm1pbmVjcmFmdA== IGRhbmdlcm91cw== TW9iaWxl a2g= aW5peg== PT0n 5LiN5Y2h 0L7RgdC6 IHbDqQ== aWVudGF0aW9u LnNlY3VyaXR5 YW5uZWVy 5aSn5aWW 5bm/ yJtp IHN1cHBsZW1lbnQ= IGRlbGxl IGNvbnRyYXN0 IEJBU0lT IEhhbQ== IEtF 4KS+4KSh cXVlbnRpYWw= IOGDmOGDmw== IyEv b2lz IGVuZ2FnZW1lbnQ= IHN0YXRlbWVudHM= 0LDQtdGC0YHRjw== IFBhY2s= LWxl IG1pc3NlZA== IG11cmRlcg== IG9wcG9z IGZvcm1lZA== IGltcGxlbWVudGVk 4KWC4KSw IHZpbGxl IFRocm91Z2g= 4KSY IEVhc3k= IHBoaWxvc29waA== SURUSA== IGNvbnNlZ3U= IGZvcm11bGE= IGNvYWw= IGltcHJvdmVtZW50 VHJpZ2dlcg== VU5DVElPTg== IEpvaG5zb24= IGJlZXI= 66W0 IHN1cHBsaWVz X1NUQVRVUw== X1RJTUU= 0LLRiw== ZmI= IGF4aW9z IEJvZHk= cmFpbmU= 0YHRgtGA0LA= KT8= IHN1cnJvdW5kaW5n INC40YE= IGV4ZWN1dGl2ZQ== IGRyYW0= cmVhcw== IHBsYW5uZWQ= J2F1dA== 5aeL xJ9p Y2hlc3Rlcg== 4Li44LiV 4KS44KWN4KSl SVNT IF07Cg== YXF1ZQ== 0LTRi9Kj IEto IGFkYXB0ZXI= 4K6Z4K+N4K6V IGNlbnRybw== IGFkdm9j zrvOtQ== IOCyuOCygg== IHplZw== IEplZmY= IGtpcg== IG5ldWU= W2Fzc2VtYmx5 INee16E= LkludA== YXp5 IHN0b3Jt INit2YrYqw== 2YjYsdiq INC10LU= 4Lat4LeK IHRhbmc= IHPDvA== 4KSw4KWN4KS1 dWNl dWxhcw== IHJlYXI= MTc0 0LXRgNC2 PEk= IGJlbG9uZw== b25kcw== 4LWB4LSz bmlj IMU= aW5uYQ== LkdyYXBo YWNodGVu IExpdmluZw== 4KWB4KSu 4Kq14KuA REk= IHpvbmE= IEZlcm4= IHBvdXZleg== 2K3Zhg== LXR5cGU= TGl2ZQ== MjM0 LWJl IG5vdm8= IGZha2U= IG1pbmVy 4KSk4KWN4KSk IEZ1dHVyZQ== KClb IG1hcmtlZA== LlNo IGV4cGxpYw== 4LiL Lm5s IGxpcw== IHVwZ3JhZGU= IOCmj+CmrOCmgg== YXZvcml0ZQ== 0L7QuNGC IEpvcw== IHJlcG9ydGluZw== KCIiKTsK cmlvcml0eQ== 4K6+4K6w4K+N IGRlc2s= IGZhdWx0 IENvbnN1bHQ= TUlO YXRpcXVl IHdhbg== CXY= IGl2 4KSC4KSh IFBlZA== 4Z+C 5b+F INGN0YLQvtCz0L4= IENyZWRpdA== IHJvYm90 IHBsZWFzZWQ= IOCksuCkvuCklw== ODA4 4YCE4YC6 IOCyruCyvuCyoQ== IHNjaG4= 4YCa dWRk a2V5cw== UEg= d2lkZ2V0 IENoaWVm X2h0bWw= INek1rw= QGdtYWls IGJ3 X0JV IGVsZWt0cg== 5LqU5YiG5b2p IG9sYXI= X2RldmljZQ== IGRhdGFzZXQ= b3JhYmxl 4LK+4LKm LlN0YXR1cw== IHTDoQ== 6IKh ISg= IEFJ aWhhbg== INC60LDQvA== IGNyYXNo LlJlc3BvbnNl INio2KfYtA== b2Rlbg== X2hhc2g= IGhhdGU= dGhlbWU= IHJhcHBvcnQ= Q2hhaW4= YnJpZA== cGhvbmVz a29tbWVu IEhvc3Q= 0LPRgw== IGJldHRpbmc= IHJlY2h0 INWE X2VudHJ5 IFNvbHV0aW9u IOyYpA== IGV4ZWN1dGlvbg== 6IGU57O7 IHN0YW5kcw== IGZvYw== NjUw T3JpZ2luYWw= IGFkZHJlc3Nlcw== IHBhdGNo 4Lib4Lij4Liw IHBvc3Rpbmc= WmVybw== dHJhY3Rpb24= IG1lYXQ= KHBsYXllcg== RXJyb3Jz IHBsdXNpZXVycw== 66CI INW01aHVvQ== 0L3QsNC7 IENhbmFkaWFu IGRlYmF0ZQ== X0ZM KEU= SVJFQ1Q= bmVt QWNjb3JkaW5n IGFsYw== 4Kab4KeH IHBlbQ== IEVM IGxsYW0= INeQ15U= IGNvbnRybw== 1aHVttaB IM+Ezr/OvQ== IENyaXRlcmlh IG1lbnk= INC/0LXRgNC10LQ= MTcz IExpdHRsZQ== IOGAoQ== V2luZG93cw== IFN0YXRpb24= IHByZWc= KEg= b2RhdA== IG1hdHQ= IG1hbmU= aXN0ZW50 LGludA== IGdlbnJl IEZpbmFuY2lhbA== IOCkpOCljeCkrw== IGNhdGFsb2c= IFNpZGU= IGNoaWVm TmF2aWdhdGlvbg== IGhlcm8= IHJlc2lzdGFuY2U= 4Ka/4Ka4 IHJhbQ== YWdpbmF0aW9u IFRyYXZlbA== IHF1YWxxdWVy LmJ1aWxk IHlvaw== 4LS+4LSf IOCkquCljeCksOCkpA== IHNz b2Nz IHJlbWFyaw== LklO QWdl IGluZnJhc3RydWN0dXJl IGluY2lkZW50 IGVuZW15 YXN0eQ== a3Vu LXN0eWxl IFNldHRpbmdz cGx0 YWxsZW5nZQ== IGFja25vdw== IGFob3Jh IERyaXZl IHZhbGU= YXR0ZXJu IGNvbG9u 0LrQsNGF ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= L2Jpbg== 44OH dWF0 IE11c3Q= LnE= 5L6b 4KuN4Kqy 5pys6YGT IGdlw6c= IGd1aWRlbGluZXM= 2KfZhtmH YWt5 4oCU4oCU4oCU4oCU 0LHRgA== IFdv X0dldA== IHdpdG5lc3M= cmFuZ2U= 44OL IE7Do28= INCy0LjQtNC1 LlNlcmlhbA== IENvbW8= IGNoYW5jZXM= Pj0= U3Bhbg== 240= INeV154= 0LDQvdC00LA= IGNvbWVyYw== IOCkl+CksOClhw== 7LCo aXBo QXc= 0ZbRgQ== IGF0dGFja3M= IGFuY2hl ZmZlbg== CWds 6LCD LnBhbmVs Y3Vzcw== IG9udHc= ZGljdA== IE9seW1w 4Lit4Lit4LiZ4LmE4Lil4LiZ4LmM QmFsYW5jZQ== a2VlcA== IGhvcnNl IGluc3RpdHV0aW9ucw== YXBwZW4= TG9vcA== zr/Phc+C ZGJj INi52YbYrw== VEVTVA== V2Vlaw== IGVjb24= 5bm2 IHJlcGxhY2Vk IGRyYXdpbmc= YXRyYQ== IEJlYXI= 4KS/4KSC4KSX INC00LXQvw== KCcuLi8= IGtlbQ== YXBvbnM= INm+24w= IEJsdQ== Sm9obg== xIFr w7xiZXI= IOyeiOuKlA== PGxp INC30L3QsNGH acOf IMSR4buZ 6LWa INC60L7Qs9C00LA= IENoYW5uZWw= X2VtYWls cm9jaw== 2YTYp9mC ZW8= Q3Vyc29y X3dyaXRl RXhwcg== IOCkrOCkuQ== 57uZ IHNvbw== 2KzYqQ== ZXJlcw== IHJlZ2lvbnM= aXhv XSkKCg== IHN1Z2dlc3RlZA== IERJUw== bGFi 4Kay4KeH IEluc3RlYWQ= U2hhZGVy IGTDtg== d2lsbA== IHNjaGVtZQ== IG1hcnQ= 4LmA4Lih Y2Vsb25h 4YCB IHNpY2s= Z2ViZW4= LnBhc3N3b3Jk IG1ha2E= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IFN5c3RlbXM= bWF5 IEZvdXI= YWZp 2KzZhA== IGNvbm5lY3Rpb25z IFlvdW5n UGVyaW9k IGxhbQ== IGluY3JlYXNlcw== RVNTQUdF 5LyB IEFsZQ== INmH2Kc= VU5U IFRob3Nl 4LmH4Lia IGdlbmVyaWM= 1bjVvQ== IEF1c3RyYWxpYW4= U3RhZ2U= IGRyZQ== aWdtYQ== IHR1cm5pbmc= INCw0LvQsA== IHJlbGFjaW9u IHJhZGl1cw== IGFwcHI= INC00YM= IGVudW1lcg== X2Z1bmN0aW9u INin2YTYo9iz IOuniA== LWFsaWdu 6aOO IHRhdWdodA== a2Fw LnNlcnZlcg== X2Nv aXplbg== IFRlbg== aW5jaXBhbA== QW5nbGU= cm9waA== IEFnZQ== zrvOsQ== IGFjb3Jk INC60L7QvdGC 5YWa IG11bGhlcg== IGtpbg== b3ZlcnM= aGlnaA== IExpbnV4 dXN1 cGll INKb0LjQu9C4 Vm9sdW1l cGFz 4KSw4KS+ V2Fz IEluaXRpYWxpemVk IGNvbXBhY3Q= 0L7Qu9C4 ZWRvcg== X0VR IG5pYw== X2VsZW1lbnQ= 4KaP IHBhY2tldA== b2RpZ28= IOCkleCkv+CkuA== w6Bp xLFuZGFu IE9USEVS IHNhcA== dWNoZW4= IFZvb3I= 4Laa4LeK IFJvcw== IGdi IGFuZGE= Y2hhcmc= IEphaHJlbg== YXRlZ29yaWE= IGNvdWxkbid0 5q+b54mH IOC5gOC4pQ== w6RyZQ== aWFo IOCkreCkvuCksA== 4KS+4KSj ZXR6 IGFybXM= Wzos IGxvc2luZw== IGxpYmVydA== LiIs IHdoZW5ldmVy b25kZXJz IOCmuOCmgg== ZnVy LnByb2R1Y3Q= 4bqx 5Lqb IGV4cGVjdGF0aW9ucw== fVw= IG5o4buvbmc= VFlQRQ== RkI= IE1vbmV5 INiv2YjYsQ== 0L7Rng== cmF6aWw= IHBhc3Npbmc= IGluc3RydWN0aW9u LmZyYW1l YWxlbmRhcg== IHRob3JvdWdo 0LDQvNCw IGVudHJlZw== IGluY2hlcw== b2xpcw== INGD0YE= IG1vbml0b3Jpbmc= ZXJlZA== 0LTQtdC9 aWxseQ== IGluc3Bpcg== IE9yaWdpbmFs IGNoYXF1ZQ== IGtvcA== 5pyo ZXJ0ZQ== 65SU MDIx c2NvcmU= c3TDpG5k 2YbYp9mF YXJpYW4= X2ZyZWU= IGZpbHRlcnM= 7ZuE IHN0cnVjdHVyZXM= zrrOtQ== IFNoYXJl 4KeH4Kak INCy0Lc= YWNpbw== IGZlYg== YWdhbg== IGTDqXZlbG9w TGlicmFyeQ== IGZ1bm55 Q291bnRyeQ== IHVuaWZvcm0= SmF2YQ== LmxpbmU= ZXNzZW4= dHA= IGVzYQ== 44Km 2YjYsdiv 1avVvw== SU5HUw== IGTDqWrDoA== IEJlcmxpbg== CWFkZA== IHN0b3I= 5aSn5YWo 4LeS4La6 IGJvbmU= INC90LDRgdGC IG11c2NsZQ== dXRjaA== Jw0K 1YA= IG9jY3Vycw== T1BZ QU5O 4KaV4KeH IGhlY2hv YXR0YQ== X3Byb2R1Y3Q= IHBhbmRlbWlj w6lobw== 5LqM5Yy6 IHZ1bG5lcg== IOyWtA== 2KvZitix IGluZm9ybWVk IG1hZ25ldA== b21tZW4= Zm9vdA== INCm IGVlbnM= PGE= 7Zc= rKw= IOCn IGFkZXF1 IOC2hQ== RGE= INGW0L0= INin2YTZhdi5 QW5vdGhlcg== 2YXYp9ix IGd1aXRhcg== IEJhbA== IGphY2s= c2NhbGU= Li4uLi4= IGdyYXBoaWNz IEZyb250 IG1ldGFkYXRh IGJvbGQ= 54Gr IEJ1bmQ= IGRpc2FibGU= MjA3 IGRpc2NpcA== IM6s IHNlaXQ= IGNydXNoaW5n 5piv55yf eGI= 6Iw= IE11cg== IGFpcnBvcnQ= U3BlY2lhbA== Q2hl RGVzaWdu LkZpbmQ= 5pON IGthaA== CWVycg== IEVsbGU= CgoKCgoKCgo= IG90cmE= bGV1cg== 6YKA6K+3 5YiZ IGJldGE= IE11dA== 5ZCR ZWFjaA== YXN0ZXJu IENvdXJzZQ== IHdlZWtseQ== IHB1cA== IGppag== aWNpb25lcw== IHJpc2tz IGh1cg== INGC0YPRgA== IOCkteCkuQ== 4YOd4YOq IHBldXZlbnQ= IFN0YWZm IGpvdXJz IGNsaW0= YXJlc3Q= IGhvb2c= INeU15E= IEFydGljbGU= INiq2Kc= IOCkheCkp+Ckv+CklQ== IHbDpnJl IEJ1cw== IFN1Y2Nlc3M= Z21lbnQ= RXhpc3Rz d2FydA== dmQ= 7KQ= IGVydQ== peCrhw== 4peP VkFMSUQ= ZXhwcg== IGd1aWRhbmNl IOWNmg== 4KuL4Kqy IGRlYnV0 Lm1hdGNo IHBvc3Nlc3M= 4Kqr xa0= IHBhaW50aW5n LmNvbnN0 1aHWgNW/ 4YCK 4KSX4KWH IFJpbw== dmVyaWZ5 7Y+s ZWRlcmU= 4KS+4KST dHJhaW4= cmFpZA== bGlhcw== 0LXRhA== 56ue 0LDRjtGC 4YOQ4YOW4YOU cmVkaWN0 4LiT IEJVVA== Q3U= cm0= SW5pdGlhbGl6ZQ== ZHVjZQ== IGJvdw== ZXRhZGF0YQ== QnJlYWs= IEpvbmVz IHJlZ3VsYXRpb25z INij2YU= ICgt IGdyYW50ZWQ= IOyb YmVj 4LiB4Lij IGNvbnRlc3Q= U0k= RUc= INiz2KfZhA== X2Ri IHVzdQ== cHJlYw== dmVsbGU= CXg= Y2xhcmF0aW9u IHNoYQ== IGBg IM+Dz4TOt869 cGxhdGZvcm0= MjE0 IHBsYWlu VXBwZXI= 0L3QtA== dWNreQ== IEhpbA== IGV2YWx1YXRpb24= LXJlbGF0ZWQ= IERpZA== amVr 0L3QuNGH IFZpcmdpbmlh 2KfZhNmK2Kk= IHRhYmxldA== X3RhZw== IHJlYWN0aW9u IGR5bmFt ZGg= IFJ1Yg== IFVzZWQ= IG9mZmljZXI= QURFUg== IGJ1dHRvbnM= dsOk IOGDqOGDlOGD IHV5ZQ== 4bqndQ== IHB1cmNoYXNpbmc= IHBhY2thZ2Vz IHTDqWzDqQ== SUVX 2YjZiQ== IHNlY29uZGFyeQ== 2KfZhNiq INC30LDQvQ== IHNlY3Rpb25z dGVr IFBhdHI= INGA0LDQuQ== 4buM IHJlZHVjdGlvbg== 4Li04Lih IGFnZW5jaWVz LiIsCg== IHByb2JsZW1hcw== IGFwcGVhbA== Z2VzY2g= INeZ16k= YXNv T08= YmlsZA== IGV4cG9zdXJl Y2hhbm5lbA== INGD0LI= bm9n LnNlbGVjdGVk IExJTUlU ZXhlY3V0ZQ== IERpY3Rpb25hcnk= IElobmVu IGNvbmZsaWN0 aXBh IOCknOCkv+CkuA== 64W4 Lm8= INC20LXQuw== 77yg b3JlbQ== IGZlYXR1cmluZw== IGRlc3B1w6lz dGJvZHk= INC90YPQttC90L4= bGluZWQ= PiI= c3BlYw== LnJlcG9zaXRvcnk= 44OD44OI 5YWF KHE= Z29vZ2xl IFJlZ2lvbg== IGFzc2lnbmVk 4oCZcg== 4pE= 5bCU 4LSw4LWB IGt1d2E= U3RyYXRlZ3k= IFVocg== V2FybmluZw== 4LC/4LCC4LCm4LC/ IHBlcnNvbm5lbA== IOC4n+C4o+C4tQ== IM6j IEVuZ2luZWVyaW5n 2YXZiti5 5aOr 4oCM2YfYp9uM LmludA== IHBlcXVl IGPEgw== IOCkqOCkv+CksOCljeCk fSI= d2VuZA== INep154= IFJvdXRlcg== IOCkleCkueCkvg== IEF1c3Q= bGV0ZXM= IGx1eHVyeQ== IGNhbm4= Ym9ycw== IEhhbg== NzIw X3R5cGVz 2LHYsw== RXZlbg== aW1lbg== IHJlc2VhcmNoZXJz IG5hbA== VmlzaXRvcg== 5aeU IHRyYWNl w6puY2lhcw== 6JmO 55S16K+d IHZvdQ== IGNyYXp5 IGVsaW1pbg== IG9wb3J0dW4= b3RoZQ== yZlk IEF1ZA== IHJlY29nbml6ZQ== IGFjb250ZQ== UHJpbWFyeQ== bmVr 4LmJ4Liy IOGDqw== xYY= IGFkdmVudHVyZQ== YnJpZGdl IEluZG9uZXM= IGVzY2FwZQ== IGNu IGRw IEND 4LK/4LK1 IDwt IOCmpeCnh+CmleCnhw== YXZhZA== b2tlZA== LkFwcGVuZA== IGRyYQ== 2LnYp9iq Y2hlbWU= 4LS/4LSo4LWN4LSx4LWG IOCkleClgeCkmw== 4LK/4LKm4LON4LKm4LK+4LKw4LOG IG1hcmc= IHN1Z2dlc3Rpb25z IGFidXNl LkJhc2U= IHNoZWw= IHBsZWFzdXJl IOuCtA== IGVyZg== IHBvc3NpYmlsaXR5 INiz2YY= Y2VwdG9y IGhpdHM= IENp IGNvbnRlbXBvcmFyeQ== IGFuY2llbnQ= 0LXQutCw X2hlaWdodA== L2FwcA== IGRvbWVzdGlj LmVkaXQ= IFdoaWNo YW1o aWpm IHNpcg== 4Li44LiU xYJ5 UmF3 IGVzY3I= cmI= esSF IGbDoWNpbA== b3Rlbg== VU5E IGZhbWlsaWE= IG9sZHU= IENpdmls LkRlZg== IEZhc3Q= b2dyYW0= 0LvRg9GD0YA= IFNlcA== IGNhbXB1cw== zp0= 4Ki+4KiC 2KrYp9io Y3VzdG9tZXI= IFBvbGl0 RVJZ IOCukg== dW5kaQ== 6Iiq IGluZGljYXRl IM+Ezr/Phc+C INmI2YQ= IHRpbWVzdA== Q2xlYXI= Y2xvdWQ= IHN1Y2NlZWQ= 4KeH4KaT IFNwYW5pc2g= IFByYWN0 IG3DunM= 5aSx 5Yab INi02Yo= MjE1 IGRpaw== IHNhbGFyeQ== 2KfYptuM IGRpdmlzaW9u IGNvbXBsYWludA== YXJpcw== 4LC/4LCy T3B0aW9uYWw= IGt0ZXI= IGFjaGll w7ZydA== U2hhcmVk IHN0cmV0Y2g= aXZpZHVhbA== IMWb 44O744O744O7 IHByb2Zlc3Nvcg== Lzo= 6K+V IGtvcw== IGV2YWx1YXRl IOCyrQ== IExhYm9y IHJpYg== IEZlYXR1cmVz IHBlcnNvbmFsbHk= 0rPQsA== IHBvd2Rlcg== LkNoZWNr INec16k= U2hvdWxk IG9uZ29pbmc= acSN 5pyv IG5ld3Nw RW51bWVyYWJsZQ== 4LWH4LSw IGNoaWNrZW4= aWRkbGV3YXJl IHJhaWw= LlE= KGFwcA== INC00Lg= dWJz MzA0 IOCkl+CksOCljeCkqA== KHZpZXc= 4KWB4KSV IGRhYmVp LWNvbg== 2pk= YW5vcw== INGF0L7Rgg== IHBvbnQ= IGVsaWdpYmxl IHBlcm1hbmVudA== UGVyY2VudA== 5Y6G IEZhcm0= IE1C IM+Ezrk= dWJibGU= IE1hZGU= IG1vdW50YWlu 4Kq+4Kqw4Kq+ LWZs INeR15Q= T3BlcmF0b3I= KCk7Ci8v IElW IG92ZXJ3 ZW50bGljaA== IENvbmZlcmVuY2U= IGxlYWd1ZQ== IGNvbWJpbmU= TGF0ZXN0 IE1vdG9y RVJD IOG6uQ== IGHDpw== IGRlYWxpbmc= IHJlZnI= IG5pdmVhdQ== IEFybQ== IOCyiA== IFBhdWxv aW5pdHk= 2LHYp9iq PS0= ZG9uZQ== IGNvbmZpZGVudA== 0ZHQvQ== aWxhdGlvbg== IHDDumJsaWNv IOCqpOCqrg== YWJ1 IM6k IG5law== IHt9Cgo= ZXE= IOCyruCypOCzjeCypA== 5aSa5bCR KFVzZXI= IHN0YXRpc3RpY3M= INWv1aHWgA== 4LC+4LCk X21hc2s= IEdldHM= d2FrdQ== IEJS IGhlYnQ= LXF1YWxpdHk= 4KeN4Kan IGJ1bmRsZQ== KGRhdGU= IGVsZWN0cmljYWw= KG9z 1aHVtdW2 44Oz44OI 5r0= IGtlbg== c2VydGlvbg== 4pmA4pmA IG5vZGln eWxs aGF1c3Q= IGludmVudG9yeQ== 4buxYw== 1aXVtA== IHZlcno= IG90cmFz UXVhbnRpdHk= b2NvbQ== Y2hlY2tib3g= INeR16o= YWt0ZXI= IGpvbmc= 4Li44LiV4Lia4Lit4Lil IGFwYXI= IFNhbXN1bmc= Y2Vu ZGF0aW5n IFByb2Zlc3Npb25hbA== IOCkpeClgA== INC60YDQsA== IOS5heS5hQ== YXNrYQ== d2VydA== LmxvY2Fs IOyXrA== IHBvZGNhc3Q= b3R0ZQ== aWNvZGU= IGZ1cg== dXJpZGFk IGludGVncmF0ZWQ= IHJlc3VtZQ== w6J5 KCkpewo= cmFuZA== b2RnZQ== IGxpZ2h0aW5n IFZlZ2Fz IENvdmlk 0LLQsNC10YI= Q2x1c3Rlcg== L2Jvb3RzdHJhcA== IGZpZ3VyZXM= 4KqC4Kqk 4KSX4KSw IG9zdA== 4buX IGFjY2VsZXI= IGthbmE= IGNvbXBsZW1lbnQ= IHRlcm1pbmFs bmF2YmFy IGxlZ2l0 IFJFUw== RkZFUg== IGZvcnRo 4Lib4Lij emVk INGD0LnSk9GD0YA= UkVBRA== RnJhbWV3b3Jr KCJb INGA0YPQsQ== IHJ1Zw== IGp1ZQ== IGxpY2Vuc2Vk 4YOQ4YOo YWFz LmVkdQ== YWNpYQ== IGJhcnM= IGRvaXQ= b3JkZXJlZA== IGNvcnJlc3BvbmRpbmc= 77yaCg== QmxvZw== cGxheXM= aWd1ZQ== IFBvc2l0aW9u 67g= cmVsYW5k IHNpZ2h0 IFRp IG5ld2x5 IHZpZGU= IHNlbw== IGludGVyZXM= IGRpYWJldGVz 4KSo4KWN4KSm RmFpbHVyZQ== Y29udGFpbnM= 5rKz INGD0Ls= X0NPTlQ= xZnDrQ== IHdhc2g= bGFnZW4= IG5oxrA= IHByZXNlbnRz Y3JldHM= IGxhcHRvcA== 2LXZgQ== IOyhsA== INio2YjYrw== IHByb24= IOGDoeGDkOGDpQ== 0LLQsNC7 QXVn IGRvc2U= IGNhc3VhbA== IEVkaXRvcg== IGd1YXJhbnRlZWQ= Lm9wdGlvbnM= IO2VtA== 4Ka+4KaB c2Vz IERlbGl2ZXJ5 IGFycmFuZ2VtZW50 2LHZiQ== 44K7 IOesrA== IHNlbnRlbmNl w61jdWxv aGFsYg== w6RsdA== 4LmA4Lib IFRocmVl JQoK IGlubm92YXRpb24= IHN1aXY= INCd0L4= Rml4ZWQ= 4Liq4LiU IHNoYWRvdw== 0LzQtdC90YI= Y2hvaWNl YW5nZWw= ICMK LVR5cGU= xrDGoW5n IHRodQ== dWdnZXN0 4YKU QnVm IGxhdGVu IE1vdmll YWRlbA== 2K3Zig== w6FjdA== VW5kZXI= dW1v 7JaR INC60L7RgtC+0YDRi9C5 IGVudHJlcHJlbmU= IHJlc3VsdGFkbw== 5YWt5ZCI IGluc3BpcmF0aW9u IHNob290aW5n 2K/Yp9ix c2luY2U= TUFY IFNvdW5k IFRlaWw= VVRF IGZvdW5kYXRpb24= IGbDuHI= dWxsYQ== IEF5 aW5nZXJz IHN1ZmZpY2llbnQ= YWJvbA== UmVkdWM= IHNlbmRv IGJhc2ljYWxseQ== 7Jet IFRoYXQncw== IOq0gA== 4LC/4LCV4LC/ IEhUVFA= 6JE= aW50ZXJlc3Q= aW5uaQ== 4YOQ4YOk X2RlZmF1bHQ= 546v emly IHBoZW4= YWluZXM= KENvbnRleHQ= ZXJlaw== QmVk IG7Dsw== 2LnZiNiv Jywk IOqwnA== IOGDm+GDmOGDoQ== 1avVtA== RmlyZQ== YXVwdA== IGZsYXY= b2zDs2c= IFV0 XSku IHNlcmll aWNhbWVudGU= INC80L7Quw== INC00LXQudGB0YLQsg== ZsOpcg== IGRpbWVuc2lvbg== Y291cnNl IGp1c3F1 UGFyYWxsZWw= IGlucHV0cw== b3VzZWw= IGhpbmRp xLFz IGJveGVz IH0pLAo= CXZpcnR1YWw= IFR5 dXBkYXRlZA== INin2YTZitmI2YU= 4Kmx4Kg= IHF1ZWQ= IGJvdHRsZQ== IEJhc2lj 2YjZhtmI X3Jlc3BvbnNl IEhQ VHJh IGFwcHJvdmFs c3RvY2s= UmFkaW8= LmJvb3Q= PT09PT09PT09PT09 b25jZQ== IGxldmVu IEZvbA== ZW5uZXM= INC+0YQ= IGNvbGxhYm9yYXRpb24= aXN0ZWQ= IHfDvHI= aG9sZGVycw== IHN1YmplY3Rz U3RhbmRhcmQ= KG5w cGxhbnQ= 4Lin4Lii YW55YWs= IGNvbGxl aWVudHJhcw== cXVhbnRpdHk= IHZlcmc= IGNpcmNsZQ== IEFsdGVybg== 6JCl b21ldGVy Vmk= IO2G IOGDmOGDpw== X3Bhc3N3b3Jk IGVuZGluZw== IGNvbnRpbnVpbmc= INWn1oA= IGZpbmRz LnByZXZlbnQ= IEdpcg== KGxvbmc= IHZyb3U= IHRvbW9ycm93 X3Jhbmdl YmFk PGlucHV0 IGJlaGFuZA== IGVtYWlscw== 4Li14LiB INi02K8= 4LSZ4LWN4LSZ4LSz INC10YnQtQ== IERvb3I= 6aG5 dWVzdA== IEJyYW5k YXJm 2q0= b3Rpbmc= LXRvZ2dsZQ== b3Jubw== Ym4= IGhpZA== 4LS+4LS4 cHVlc3Rh 1bjWgtaA IGluaw== IERpcg== 6aqM QmFk cHV0bmlr INix2LM= bnRvd24= 4LGN4LCa IOWQjQ== IOConA== IEFsZXJ0 IEhlYWRlcg== QmFuaw== 4LS/4LSo4LWN 0LjQvdC+ IGZhY2Vz IMSR4buD 44CR44CQ77yM ICNb YXRoYW4= XVsi YmluZQ== 4YOQ4YOY 4oCZYWI= IEFTUw== 67KV IG1hcmtlcg== PHNwYW4= INC70YPRhw== CWg= IOC4gg== 0YPQu9GP bWFuZHM= IGRpY2U= IHPDqXJpZQ== ZmxpeA== IFF1YWxpdHk= IERhbnM= MzAx aW5pZw== LWxpa2U= TW92aWU= RW51bWVyYXRvcg== bGxl ZHV4 ZXJ2YXRpb24= SUs= IOW8 Y2hvcw== IHNlZ3VuZGE= c24= INC80LDRgtC10YDQuA== IGNoZWNrcw== IG1vbw== aWxzdA== ZHg= IERpcmU= 4LK3 IGF1dGhvcml0aWVz IG5pdmVs IHN0YWJsZQ== IGtsZWluZQ== 2K/ZiQ== LmFt 15zXlA== J11b INeU16E= IHByaW1h dW5nYW4= IFNlYQ== IGJpYXM= 0LjQvdC40qM= INin2YTZhw== IGVxdWlwbw== IGxheWVycw== 5p6B 6LWE5rqQ IGVsZXM= T1VOVA== IGRldGVybWlu IEhheQ== 55S7 IGZhdm91cml0ZQ== IHN0dW5uaW5n IEJhdA== ZG9u IGRpY3Rpb25hcnk= IGNhbGlkYWQ= IGZhaXJseQ== IM6a QWly IEdP IGF0bW9zcGhlcmU= IHBhcmM= IHBhcnRpZQ== 4K6+4K6k IGRlY2ly VGlt IHR1YmU= SEw= IEZD PGJy IOuv IHN1YnN0aXQ= IOCkkw== IG5pZXV3 IGJhY3Rlcg== XToK YWxsYXM= IEdhcw== b3JpZ2luYWw= IE9vaw== CQkJDQo= IGltbWVkaWF0ZQ== NDIw IFJvc2U= IGFjcXU= IGNha2U= IGR1c3Q= IHB1YmxpY2F0aW9u IGNvbnZlcnNpb24= w6RmdA== IGV4dGVybg== 0L7Rg9C/ 15LXog== 4LSo4LWN4LSo4LWN IGV4cHJlc3NlZA== IHRyYWNrcw== IGNvbm5h IGxlaXM= IGF2ZQ== 4Kak4Ka/ 2KfYr9mK IHByenk= IGNvaW4= eGk= Z3JlZA== INin2YTYp9mG IOyGjA== IGFsZ29yaXRobQ== dWhhbg== 4LC/4LCw IEthbA== IFtdLA== X2xlZnQ= IHNpcw== IFRyaWI= INCV0YHQu9C4 QlQ= IOCquOCqvuCqpeCrhw== 0Y/Qtg== IHTDtg== INC+0L3QsA== 67Cc IGFrYQ== YXRoaQ== INmI2KfZhNiq IGxlbmc= IHRyYWluZWQ= TGluZXM= IHJlbGllZg== 1bs= Z3lwdA== IHVuaW9u 1aXVrNWr IHBhc3Nl IOCksOClguCkqg== IG1lc2g= IFNldHM= IGRlbHM= ZGlt T3JpZ2lu IGFmaW4= IENoYXJsZXM= IHRyYW5zYWN0aW9ucw== 0LjRgNGD IHd1cmRlbg== IOCkkA== IGltcHJlc3NpdmU= XCI6 bGVr aW5m Lig= IEd1YXJk IG9sYXJhaw== IOyDnQ== IHN0ZW0= IFNhdA== 4KS/4KSq 2YHZgg== INWl1oI= INGY0LU= IENocm9tZQ== zq/Osc+C INCx0LDRgQ== INmF2K4= IGZyZW50ZQ== aGVtYXQ= INW01aXV IHRpZQ== ZW5kaQ== KHBvc2l0aW9u IEFjdGl2aXR5 IHN0eWw= 5rK7 ZWxsZWN0 cGhhbg== X2Z1bmM= IGV4dGVudA== IMO2eg== aXJtYQ== 2LHZgg== IG9yaWdpbmFsbHk= IOGDkOGDoQ== 4buBbg== IElubg== LGM= LnU= IGFrdGl2 IGZvcmV2ZXI= MjM1 LmZpbGw= 6Ls= 2K3Yr9ip IFNjcmVlbg== LkZy z4POt8+C IHRo4buD INmI24E= 5aSN NTU1 QmF0Y2g= IGFzc2U= IOCkhuCkueClhw== b3Jw MjMy Y2lw 5Yeg INqJ IHNlcmlvdXNseQ== 0L3QsNC5 ZWtv IGtlZXI= IHN5bmNocm9u IEhvcGU= IGZpZ2h0aW5n IFN0ZXA= IGRlcm5p aWhp IEdhcmRlbg== cG93ZXI= ZW5zdXM= 4K+N4K6p Zm9yY2VtZW50 4Ka+4Kan X1BS LWZyaWVuZGx5 UmVx IHJleg== Qm9vdA== X3s= IEphY2tzb24= 6L6+ UGFnZXM= IG9iamV0aXZv INmD2YXYpw== IHJlcHJlc2VudGF0aW9u eW50YXg= YW5pZXM= d2Fs LnBsYXllcg== 7KCA IOCuh+CusA== IGRpYw== LnVr IOat IGNlcnRpZmljYXRl 5b63 KGJvb2w= 4pah 55Sx 5Yir 4KS+4KS3 MjMz IG9jY2Fz INin2Ko= 6Jc= IGFueXdheQ== QU5HRQ== UHJvY2Vzc29y IHN1cnByaXNlZA== IGtlbm4= L3VzZXI= IGVuZ2FnZQ== IOGDqOGDlOGDoQ== IG7DrQ== b3dl 7ZaI64uk dHJp cHJpdg== 4KeA4Kef IGxhc3Nlbg== 0Zs= Q0xVRA== 0LfRlg== IHBpbms= LmFjdGlvbg== w6Jt IGZlZWxpbmdz ZXJs CW5hbWU= 4K+B4K6f IEZvcmNl 0LXRgdGC0LLQvg== w61jaW8= IMOcYmVy bmFz aHVt IEVN IGF1cg== dW5pcXVl YWd1ZXM= IG1laW8= xrDhu5tj 5bel5L2c X0NPREU= IGVsbGE= LkRFRkFVTFQ= 2YLYr9mF IEVORA== INij2LM= 5bqT xI1l IGNvbW1vbmx5 IHNldmVyZQ== aWVsbGU= IHNhdmluZ3M= RWVu 2YrZhtip IEl0YWx5 5Lmw5b2p56Wo IFN0dWRpbw== INWh1bQ= 05nRiw== INC80L7QtA== IHNvaWw= IGludGVyYWN0aW9u 4Z624Z6T IE1lc3M= 4KSC4KSk YWJhcg== b2dldGhlcg== PT57Cg== IHNlcnZlcw== INmG24w= IOunjA== INiz2Ko= YW1hZ2U= IGJyb2FkY2FzdA== IOCkrOCkpA== YXJpYXM= IGxpbWl0cw== cGhlbg== SUJMRQ== IGNlbGVicmF0ZQ== IGJvZGllcw== 0ZbQu9GM YXRpb25zaGlw Mzgw LmFjdGl2aXR5 IHBlcmZvcm1pbmc= b3JpZQ== IFRveQ== 2LbYuQ== 5Yy7 IHJheQ== IENvbHVtYg== d2luZA== Zmljbw== IMOE IG9h INC90LDQuw== SFI= p+C5h+C4mg== 0YHQvtCy dWdnbGU= IElsbGVnYWw= 4K+B4K6k4K+N4K6k IOC0pg== ICcnJw== INeU16c= IG1pZ3JhdGlvbg== IEtsZQ== 15XXlA== IHJlY29yZGluZw== 44GX44Gm INGB0LXQug== INiz24w= 15bXlA== ZXNr KSI= IGVo CVA= IEVmZmVjdA== IEdydW5k IGxlaw== X3RoZQ== IHNwZWNpYWxpc3Q= UG9zdHM= aWFtcw== LS0+Cg== c2luZw== IGNvbnRyaWI= IGNvZGluZw== IGVudGVycHJpc2U= w7pkZQ== 4K+B4K6u IOaxn+iLjw== 642U 4LmJ4LiH 4K+B4K6z4K+N4K6z IFdlbm4= 4LCC4LCX4LC+ dWtp IGRlZmU= 4LCq4LGN4LCq IGNvbnZlcg== LmFubm90YXRpb25z IHRvbGVy IGxibA== INC+0LM= IGluZGVlZA== X1k= IEJ1aWxkaW5n IEtpbQ== IERpYWxvZw== 5Y+m IGtvc3Q= IE9wdGlvbnM= aXphcmQ= KG91dHB1dA== L2pxdWVyeQ== 7Ys= IHJlc3BvbnNlcw== IGF3YXJlbmVzcw== 0LXQvdC+ IG1pbnV0b3M= X29wdGlvbg== Lmdvdg== Y2xvc3VyZQ== c3R1ZGVudA== INC80L4= INio2YU= 2LTZhg== IHJlY29tbWVuZGF0aW9ucw== IOCmoQ== IFN1ZA== b3J0ZWQ= IEFiZXI= eXU= IHLDoXA= L21hdGVyaWFs aXRhZ2U= UmVhY3Q= IHNob3Bz b3JnZW91cw== 4KSV4KS/4KSo IHlvdW5nZXI= VVg= IGtvcnQ= QWg= b21lcg== IHRpdGxlcw== IFZBTA== IEJlcm4= IGVxdWlwcGVk IHRvcnQ= bWFzdGVy RGVzdHJveQ== IGdpZnRz IHVzYXI= 4bupYw== bWFzaw== IEthbg== IMOpw6lu KSk6Cg== IEJ1bmRsZQ== fTs= IG1hbmFnaW5n IFByYQ== IFN0b3A= IGJlbGlldmVk IG1pbQ== MjIz IG15c3FsaQ== UmVzb2x2ZXI= 0LXQvdC40LXQvA== IEFucw== IG1lZGlv INWh1bXVtg== IGNsaWVudGVz IEFwaQ== 0LrQsNC80Lg= a2VpdGVu 4YOQ4YOg4YOX4YOV4YOU4YOa IENsZWFy INC/0YDQvtC40LfQstC+0LQ= IHJldHJv INCy0LDQvA== IHBvcnRmb2xpbw== X3Njb3Jl 2LHYrQ== 4KWB4KS4 IHRoaW4= INGB0YLQsNC9 2KfYug== aW5hdGVk IGRpcmVrdA== LkFsaWdubWVudA== cmVhZGVy INqB 6rCB ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== cmFuZG9t IGVkZ2Vz VVJO X1RFWFQ= LWRpcw== IG1hcHBpbmc= 4LWG4LSf IGludHJvZHVjdGlvbg== xJdz IGtq 4bqtbg== IGNpZGFkZQ== IFhNTA== MjUy IEJvYg== IOCkmuCkvuCkuQ== IEZvcnVt LXZvdXM= IGFtb3VudHM= 4LWN4LSx4LWN4LSx 2LTYp9ix IElyYW4= dW5hbg== LS0tLS0t 55u05pKt ID8+Ig== 5p6X INCx0YPRgtC70YPRg9GA INit2YI= INi02K/Zhw== REVY 55u05bGe QVRPUg== IExP Tmc= IEVzdGF0ZQ== cmll IOCksOCkueCkvg== IG5vdmE= c3BvdA== 0L3QuNC60Lg= 5r+A cmVpY2g= IHBlbmRhbnQ= IEFpcnBvcnQ= bWVkaWF0ZQ== IG51Y2xlYXI= 4YOg4YOd ZWtl IENvYXN0 IOGDmg== IEJhaA== IG9icmE= IGFueGlldHk= IGZ1bmN0aW9uYWxpdHk= KHRtcA== RmVhdHVyZXM= IHZpY2U= IFBIUA== IHZs 0L7QvdGL INi62YrYsQ== X2JveA== Ymg= 4p0= 774= dXVu 2LHYqNmK2Kk= U1Y= w71t LklucHV0 IGVhcm5lZA== IOW9qee7j+W9qeelqA== IGRlcG9pcw== dW5uZWxz IOu5hA== IG1vcw== 0LjRgNC4 IE51dA== IG5ldHQ= V1c= IHJlY2lwZXM= YnJhbmQ= 2YXYp9uM IOqzoA== IHJlZmVycmVk cGVyYXR1cmU= IGxlYXRoZXI= YW5zYXM= IOGDp+GDleGDlOGDmg== QVJDSA== X1NFVA== Q29udHJvbGxlcnM= IHF1b3Rlcw== IFBvcw== 16nXlA== IGRyb3BwZWQ= IEFsbGU= INio2LnYtg== IE1hY2g= IHVub3M= Y2hvb2w= ZGll RGVu CWo= IGLhuqFu IOCkpuCkv+Ckr+Ckvg== 4KWN4KSh 0YLQsNC9 TVc= IGRvbGxhcg== IHZlcmRlcg== REVE 4LC+4LCf IHdvcmtlcg== IS4= aXRhbHM= TU8= cG9zdGE= MjIx emluZw== dWdpdA== IGNvbGxlY3Rpb25z 4Ka+4Ka2 Ljo= YWJpcw== IMOe Y3JpcHRpb25z IHByaW1hcmlseQ== LlNlcnZpY2U= IGNvbG9j c2Nyb2xs 7ZGc IG1lYWxz IFN0b3JhZ2U= QWxn Ly8K MjE2 IENoYWly IGrhurk= 44Kq KGVsZW1lbnQ= UmVndWxhcg== IGNvbnRh LGo= CUc= UHJlZg== IOiF 4KSo4KS/ IFNwaXJpdA== dXV0 0L7Qv9GA0L7RgQ== X09O IHRveA== 0LvQsNC50L0= Vkk= dWRhcg== IGh5cGVy 15PXoteo IHJlc2lkZW50aWFs IGF0dHJhY3RpdmU= 4KS/4KSc b3JldA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhbnQ= 44CR44CQ77yM44CR44CQ IFRF IGdvZWRl INek16g= IGJhbm4= IMWfaQ== L3g= VUVT IG1hbmE= IEtpbmRlcg== Z3JlZW4= 6LSi 0q/QuQ== YWt0ZQ== IHNtYXJ0cGhvbmU= IOycoA== IGxlc3dha3U= IGNvY2s= IGluZHVzdHJpZXM= IHB5dGhvbg== IGFuZGVycw== 5b2p56Wo5aSp5aSp IHpvbmRlcg== dXNldA== IHbDpGw= LUZp INmE2Yo= LnN0cmVhbQ== IFNjYW5uZXI= IHdhbGxldA== IOCkleCkvuCkrg== IHRhY2s= IFJlY3Q= INin2YTYog== IEltYWdlcw== U2Vj aW9zdHJlYW0= IE1vZGVybg== cXVp IGxhbmd1YWdlcw== IGNvbWJhdA== IHByaW50ZWQ= cmlmdA== d2FsbA== 15nXmdeY IOCkuOClgA== IG1hbnVmYWN0dXJlcnM= IGhpc3Rvcmlh cGlu IHdlJ2xs IG3DqXM= ZXh0ZW5zaW9u IHJlcHV0YXRpb24= IHRyZW0= INC90Yw= X0o= UGVvcGxl ZmFsbHM= IGNhbXBv dHJhY2s= ZW5zbw== IGNhdGVnb3I= INWq IOuwlA== IHN0cmVhbWluZw== aWZh IOCmhuCmsA== IFRyYW5zcG9ydA== 5qih IE1E aGV4 IEZhbWls 4LS+4LS1 MjMx 4LC/4LCq IHNpbm8= IHByb2R1Y3Rvcw== 6YKA6K+356CB IGNvbnZlbnQ= IEJvb2tz KGltZw== IFBlbm4= IHRyYW5zbWlzc2lvbg== INC+0YHQvtCx IERhcms= 0LzRlg== INGB0LvRg9GH0LA= 4Kq24KuH IGZ1Y2s= YXBwbHk= IHV0Zg== Y3Vl IGNvbXVuaWM= SW5zZXRz IHJlbGlnaW9u IG1haXNvbg== cGxldGlvbg== csOp IHNpZA== IGdyYXNz INmE24w= IHNpbms= IHNhdm9pcg== IHRhcmdldHM= IE5lZw== IE5pZ2Vy IGdyZXc= W2M= aWZpaw== IMO+YcOw IG1lbmM= 4LKw4LOG IGVtaXQ= IFJo IHF1YWxpdMOp IFJvbg== 0LfQuA== IFN0b25l 4Z6W IGVmdGVy Y2VsbGVudA== IGtlcm5lbA== 4YOj4YOc IGJlbmNo emV1Zw== IHdvdWxkbg== aXNzZW1lbnQ= SG9yaXpvbnRhbA== IPCfmA== meCnjeCmlw== IGNvbnNpZGVyYXRpb24= IGJpbGVu INGC0LDQsQ== 4buLYQ== LlJlbQ== 56o= cmVwb3J0 IGRvcm0= VGVsZQ== IGdheg== 4LGC IFBhc3N3b3Jk aWxsaWFudA== 1aHWgNWv w6Fr IE1vbnRo 4Lin4Liy4Lih aWFv IHN0YXRpc3Q= 4LKw4LON INiq2Ko= IGVsbG9z IEthdA== cXVpc2l0aW9u INiv2Yc= IGZvcmVjYXN0 IGxlYmlo INW21aHVrQ== IG1hcmtz U1I= dWtr INC+0YLQug== YWlubGVzcw== cm9pdA== IGZpcm1z IHNm LkNsaWVudA== IG1hZg== MzQ1 w6huZQ== IG1laQ== aWpkZW4= INGD0L8= IHBpcGU= INeU16Q= YXVmZW4= eWdvbg== IHByb3Bvc2U= 5YW3 5LiA5Liq 4KaG 4LK+4LKX4LK/ IFZlYw== cGVhcg== LmFkZHJlc3M= IHNvdXI= TWVt IGtvbW1lcg== 5Zyf TWFj IGpvdXJu IGRz LmNvcHk= 6KiY INCS0Ys= INeV15A= X21lbnU= 4KqV4KuN4Ko= TXVsdGk= IHZpc3Rh IGtobw== 2YPZig== IGxhbmdl IHNsb3dseQ== ZXJpZXM= IHZpbmRlbg== aXhh 16DXldeq b3JjZQ== INWu fT4= IHJlbWluZA== aXRvcnk= INeU15I= Jzon UGFjaw== 4Ka+4Kav4Ka8 IFJhZA== VGFrZQ== IFB1cg== QUdFUw== w6JuY2lh 4Ka+4Kam4KeH4Kaw Rm9ybWF0dGVy IOCqpOCrh+Cqrg== IGRldmVsb3BlcnM= 4Ka+4Kaf 7Ya1 IGhhYsOtYQ== IHJlcGVhdA== LmltcGw= IOCumuCvhuCurw== LnJlc3VsdA== IGJhbmtz IHN0cmlw IHJldHVybmluZw== cmlxdWU= Z2Fz IOCkuOCliw== IHZt 4Kq+4KqX 0L3QvtC80YM= dWx0aXA= 2LfZhg== IGNvbnRyaWJ1dGU= eWFy JCgiIw== IFNxdWFyZQ== IGF1dG9tYXRpYw== YmVhbg== YXlpbmc= YXB5 IGhvbGU= cuG7jQ== aWNpb25hbA== IGNj IHTDqQ== IGludGVsbGlnZW5jZQ== IHNvbWV3aGVyZQ== YWR1YXRl 2KzZhQ== IEtvbnQ= 0LPQvtGC0L7Qsg== IGt1bGw= IHByb2Zlc2lvbmFs IE1vY2s= INiy24w= PXRydWU= W25hbWU= IENydXNoZXI= IFBpbg== 5Y+N IHRlbXBvcmFyeQ== IGNvbnRyb2xsZWQ= IGNoYXJhY3RlcmlzdGljcw== dWRlcw== ZWxlbml1bQ== bmw= IGh1bWFucw== IEJlcmU= IGtleWJvYXJk IG1hcmNh IENsb3Nl IGphdw== IHZpYWdyYQ== INGB0L/QvtGB0L7QsQ== IOq1rA== fX0K IGFzc29jaWF0aW9u 6IqC IEV4cGVyaWVuY2U= IGxlZ3M= IExheW91dA== IOCqpOCriw== IE9k IGdlbWFha3Q= VXNhZ2U= YXN0ZWQ= IHRvZ2c= IFBlcnM= Y3VsYXRvcg== 0LrRgtC4 INGD0YfQsNGB0YI= b21w INin2YTYudmF2YQ= IGhvcGluZw== X0VSUg== TGFz 4Kq+4Kqw4KuA d29ya3M= IGNyZXc= IHNhbnQ= IHNvcnJ5 IHNlZ3Vpcg== 4Lig IGFhbnRhbA== 2YHYuQ== IENlbGw= 0LvQvtC2 5rex IGltcHJvdmluZw== U2E= IFRY INiv2Yo= ZW5lcmFs IOWIhuWIhuW9qQ== IGRpc2Ny xaFp IOCmieCmqg== IG9iamVjdGl2ZQ== INGA0L7Qtw== YWJ1bA== ZW50aW5h b2FyZA== IGFiYW5kb24= 1bXVodW2 asSF bGltaXRlZA== MzAz 54mb IHJldW4= KFw= IGVubg== X21haW4= IGphbWFpcw== MjA5 IFdlbHQ= IOGDkuGDkOGDkw== LXhz IHJpZW4= X2Rm IHdlaXQ= 44GX44Gf 4LC+4LCC4LA= w6Fuw60= IGFjaGlldmVk IG96 0LXRgdGC0LLQsA== c2hhbA== bGFw IEVSUg== d2ljaA== Lkhhc2g= IEplcnNleQ== 2KfYptmE IGF0dG9ybmV5 67CY IEFsaQ== YWthdA== IMSRw6M= IHJvc2U= IG9waW5pb25z IGdyYWR1YXRl IFNjb3Q= YW52YXM= IGVsZW0= 2KfZhtmK2Kk= SVRhYmxl IFdpZGdldA== cGFwZXI= IHByb2R1aw== IEludGVncg== 44U= SW5qZWN0 7KE= IHBvbGl0aWNz 0YjQuA== IGxvd2VzdA== IHNhdGlzZmllZA== RUY= IOS5kA== cGxpYw== KHBhZ2U= YXRpdm9z RU5URVI= 5o6S IGRhaGE= 44Og d2lq IEJvcmRlcg== Q29uc3RyYWludA== IGNoaXA= IE1hcmlh z4HPiQ== IHByYWt0 aW91c2x5 IHVuc2VyZQ== IFNpbHZlcg== IGV4cGxpY2l0 IGR1dHk= IFBob3Rvcw== LlJlcw== QWN0aXY= IHByZXBhcmF0aW9u dWluZw== IGFjY3Vt bmRh MDgw IGxhaW4= emlvbmU= TE9C CWRlZg== KHNhdmVk 2K/Yrw== IG1hdGE= 4LmD4Lir dGFy ICAgICAgICAgICAgICAgICAgICAK IFdlbA== yrtp IOuU 66W4 LyI= 2YjYsduM z4HOtw== zIA= 4LWB4LSz4LWN4LSz dG0= 4oCcVGhl IGN1dGU= INin2Lk= dHRh IHJlYWxpemVk IG50YXdt Pigp Lk1vZGVscw== 0YzRjw== IE1pbmk= aWVycmE= IExpbWl0ZWQ= 6ZyA IG5vdXZlYXU= 0L3QtdGA IGhlbg== 2LHZhQ== 5a6i5pyN IFdpbGxpYW1z IGNsb3RoaW5n U3RhdGlvbg== IERyb3A= IOCkteCkv+Cktg== IHRoaWFi IHRyb3V2ZXI= Lkpzb24= dmls YXJlbQ== R3Vp 0L3QuNC1 IHJlbW92YWw= 5aix5LmQ5b2p56Wo 5YG35ouN 5a6J5YWo dWxvcw== IHRvbmU= IE5vdGhpbmc= 15XXoNeU a29y LWRvbQ== IGFuZ2U= X1BFUg== IGdhYg== YW5naQ== dHRp IGxpdGVyYXR1cmU= INec16Q= IHJ5 bWFzxLE= IGbDpXI= RmFjdA== INin2YTZhdiz amFjaw== IEROQQ== IGFnZ3JlZw== IE1hdHJpeA== KEJ5 4KS+4KSC4KSa IHJlcG9zaXRvcnk= 4Ka/4Ka2 0LDSsw== 5Y+I 4bmj4bq5 W3A= dW50YQ== IGFyZW4ndA== 57ay IHByb2dyYW1taW5n IGNhc29z LkJ1bmRsZQ== 0Y/RgA== Q2xpY2tlZA== W0A= 2KrYpw== 5YWr 6YWN 2Krbkg== IGVra2k= 6KeE5b6L b2x1 4Ka/4Kav4Ka8 IHJvbmQ= 0L7RgNC+0LI= IE1lcmM= IG1vZGVsbw== IGR1cmFibGU= IHN0ZWVkcw== INin2YTYo9mF IMSv b21t 0LrQvtC7 b3BlZA== IHTJmQ== IGR5cw== 1aHVttW41oLVtA== IHB0cg== Z3Jh IGNvbXBhcnQ= I2Vsc2U= IGRlY2FkZQ== IHVuZGVyc3Q= IHdhbGtlZA== IGJyaWRnZQ== X2xvY2s= IGV4Y2VlZA== INee16I= IG1lZXRpbmdz IG1vcmFs IFBsYW50 IEdC IOCujuCuqQ== ZXJ0ZW4= IHByaWNpbmc= IOCopA== IERlYnVn IHJlZGU= RXhwZXI= INqp2YU= aWFk cm91cGU= IG9yZ2FuaXplZA== IHJlcXVpcmVtZW50 IFRhcmdldA== IOGDlg== IGFsdW0= INWr1bbVuQ== IHNvbmRlcm4= IFN1Y2g= LnN0ZXJl 5YCN QnV0dG9ucw== 0YHRgtCy0LU= cml0dA== 4K614K6w IGthdQ== 0LDQu9GM0L3Qvg== d2Vk INC00L7Qvw== IHJj YXJiZQ== MDQw INi4 cXVlbnRseQ== IOGDo+GDnA== cWF0 5aSp5aCC ICJb Q0xVRElORw== IGp1ZGdl IHNpZ3U= X3ZhbGlk IHJ1aW0= LkNPTQ== 2LPYqQ== 4KWL4KSV dW5hbA== IFVuYQ== IHNjaG9sYXI= 4Ka+4KaC IHByaW1laXJv 2KfYqNmE IHVyZw== IG53ZXJl IGFzYw== IMKw IOGDkOGDpg== INmI2YTYpw== 4K6/4K6k4K+N4K6k IGJlcmVpdHM= 15DWt9eg IGZsYXZvcg== 5Y+R5biD 4KSy4KS+4KSI X3NvdXJjZQ== IEVU 0YHRgtGL IHByw7Nwcg== 4Kao4KeH IE1pY2hpZ2Fu a2Fhcg== 2KfZhtmI YXBvcmU= IFJlYWRpbmc= bmFtZXM= INC90LDQuQ== IHDDoWc= IFJlY2U= 6LWw5Yq/5Zu+ IGJhZ3M= IEJhcmNlbG9uYQ== IHByZXNlbnRl SVNF IG1pbGU= IG1vaXN0 d29ydGg= Lm5vZGU= bGV1cnM= Y2VkdXJl eWFyZA== IGRlbnRhbA== INC/0YDQuNC9 IFN0dWRlbnRz IHBhdGhz LnRvdGFs INC/0YDQvtCx0LvQtdC8 Ymll IGJvc3M= 0LLQsNGC IHN1Z2dlc3Rz 0LDRgdGL bHlu IHXFvg== IGlkaQ== UHJlcw== IGx1bQ== 4pSA4pSA UmVjZWl2ZQ== MjU0 LnBsYXk= IGZsb29k aWV0bmFt IHJlY3ljbA== IEt1 X3RvcA== bGg= zKM= IG3DvHNzZW4= X2NoYXI= IGhhdmVuJ3Q= b3J1bQ== IM60zrnOsQ== RmFjZQ== U3ByaXRl TWFuYWdlbWVudA== dGVpbA== cmVzc2Vk QWNjZXB0 aWF0aW9u 4KS+4KSW aWxsYXM= xI1lbg== IOaz IHZvcm0= IOyC 0L7QsdGJ aW5vaXM= 2YjYsdmK IGNvbmNlcm5pbmc= emlu IGJsb3c= INec15E= LnN0ZXJlb3R5cGU= IHByZW1pw6hyZQ== IOGDmOGDnA== VHg= 2K/ZiA== IOCqmA== KVw= IGxhc2Vy bWlk X21hdHJpeA== 4LGN4LCu YCwK 1aXVvA== IE3DqQ== IGNsb3Npbmc= bGFyeQ== 4oCz IG9mZmljZXJz IGZpdHM= IHNwbw== KSIs YW1tZW50 IOC0rw== w61j YXBv IOC4og== IHVsdGltYXRl b2xvZ8OtYQ== cGlj IFNwZWVk INKx T0xVTQ== Mzc1 SVRT Qm9vbA== UmVwbw== IGVxdWl2YWxlbnQ= 6rG0 KHRva2Vu IG91dHJv IHBpZA== c2NyaWI= CWZvcmVhY2g= IGFsYXJt a2Fs SVJTVA== Uk9VUA== dXRlcg== IGJyZWFzdA== LS07Cg== J2V4 IG92ZXJz IGV4cGVuc2Vz 0YDQsNC0 IHNwZWw= IHByaW5jaXBsZXM= IHByb2Nlc3NlZA== X1RI IGRzdA== MjQ1 YWdhcg== TmVlZA== 2YPYsw== 6aaZ5riv aG92ZXI= 4YOX4YOV4YOY4YOh MjQ2 IHByb2R1aXRz IGluc3RhbmNlcw== 4Ki1 cnVjaw== IGNsaWNraW5n IEJyb2Fk INGB0L7RgdGC0LDQsg== IGRlcGxveQ== ZWNh aHlk 4KSw4KWN4KSu IERB LkdyYXBoaWNz 4YOY4YOh4YOi IG1vcnRnYWdl KCc8 aWxvcg== IOCkuOCkuQ== zrnOrA== IGNsaWVudGU= IFVzZXJz IGNoZWVzZQ== IM6c X0FD Rkc= IGZlcnQ= IFRZUEU= c2lu IG5lY2Vzc2FyaWx5 dW5paw== X2V4aXN0cw== 0LLQsNC9 IMO+ZXNz IFBFUg== IGNvbnRlbg== IHp3aXNjaGVu INeQ15XXqg== 4KeH4Kaf MzQw IE1hbnVmYWN0 IHphbQ== IENhcGl0YWw= T2JzZXJ2ZXI= IFNreQ== 4KSv4KWL4KSX INee15nXmA== cXXDqQ== INiq2Yo= ZW50ZWQ= IENvbWU= IENvbG9yYWRv IG9udHdpa2s= LWJ5 0r/Riw== 4KS/4KSv4KWL 2o8= LXJvdXRlcg== Q2F0 4KSw4KWL IGV4cGxhbg== LuKAnQo= IFBBUg== 0YDRg9C3 IGxlc3Nvbg== IOuVjA== IGxhZHk= 2ok= IGxhdmE= IGVhc3Q= INC+0YLQvdC+ IEFjdGl2 YXlsb3I= 4LmI4Lit4LiH IGdhbGxlcnk= IEpT IEhhcnJ5 SUlJ 2YbYsw== RW5jb2Rpbmc= IEZpbmFsbHk= INGA0LXQug== IGRpc3Bvc2l0 IEhvdQ== cGxpaw== 5YWI6ZSL INGB0YPQtA== YWhvbw== eW5jaHJvbg== fSIpCg== IGFndWE= UmF0aW5n 4LKh4LOG IGxlZ2lzbA== IEFzaA== IGVyc3Rlbg== IFF1aWNr 5qI= IFRodXM= ZmFocg== 656M IEplYW4= Qml0bWFw Y2x1c2l2ZQ== IEJpag== IGF2ZXo= IGluY2g= IGNsb3NlbHk= acOjbw== 4LSc YmFnYWk= 2KfYsA== IEFzaw== 2KjYrQ== QURJTkc= X09C IMKn 0YPQsdC70Lg= IEluc3RhbGw= LmV4aXN0cw== ZW5jaW5n LS4= UGxhdGZvcm0= grk= ZHJvcGRvd24= 5paw6Ze7 KHNvdXJjZQ== c3RlbGxlbg== 67O4 INeS150= X1JFUw== IFRhcg== IEVkaXRpb24= IGluc3RhbA== IGZwcmludGY= YXZhdGFy LmFwcGx5 UVVJ KCJA 4KSC4KSk4KWN4KSw zpM= IGVsZWN0cm9u IE55 ZGlzYWJsZWQ= w6BuaA== YXRlcm4= IGt1Zg== IC4uLi4= IH0pOw0K INC20LA= INC90LXRgg== VGltZXM= bWVl IHByaXZpbGU= X3NlYXJjaA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= YW7Dp2Fpcw== bnRpbA== INin2YTYudin2YU= 4KS+4KSo4KS+ c3Rhbg== LmRlcw== 1aXVttaE aWt3 IHN0YWFu IFBvaw== 4piF4piF IG1ldGVy IFN0ZXZl dG9v IGt1aQ== IGxhbmRzY2FwZQ== 4bqtdA== dm9sdW1l INGP0LrRlg== Y291bnRyeQ== INCi0LDQug== SW1wbGVtZW50 IHN0YWJpbA== IGtoaQ== SGl0 aWJs IHRyYW5zcG9ydGF0aW9u IEdQSU8= aWVkYWRl YWtpbg== IGVuYWJsZXM= IG1pbmVyYWw= IGxpYnI= IEdU IGpvdXc= OTc4 IGFueW1vcmU= RmFjdG9y IEtpdGNoZW4= IGJhcnI= IOCkuOCkvuCkrg== MjY0 IHPDs2xv IHVuZGVydA== IOC4lg== 2LrZhw== IG5hdmlnYXRl IGxlbQ== IMOpdg== INC20LXQvQ== INGF0L7RgNC+0Yg= 4K6z4K+N 5aeQ ZmlyZQ== xINuZw== IGRpcmVjdGVk IGV4dHJlbWU= R3VpZA== IHJ1bmQ= IFNlbmlvcg== IHN0YXlpbmc= IGxlZ2lz IENPTlRS Pg0KDQo= INmI2YLYqg== INC80L7Qs9GD0YI= RUxM IGlsbG5lc3M= IElS IMmZ 5rKh5pyJ IGZ5cmly IOyZ INWx 4KWB4KS1 IOCkuOCkruCkrw== w6p0ZXM= IFF1ZWVu IGJhdHQ= MzAy 5pep KG15 0qc= RW50aXRpZXM= oos= KHNxbA== 5oiW 4LWD VmVs WFhYWA== 4LiN IE5hdHVyYWw= IGNhcGFiaWxpdGllcw== IOC0leC1iw== IGFsZ3Vucw== X3Bvc2l0aW9u IGvDtQ== a2lucw== 6L+9 IHN0YQ== cmVtb3Rl 157XqA== X2lw IEF0aA== IOCmnOCmvuCmqA== IGRyZWFtcw== LmNvbnRyb2xsZXI= IG5hbmc= XCI+ IGNvbmNlcHRz IE11bmljaXA= PGRvdWJsZQ== 0LvQtdGC IGFsaXZl X2hhbmRsZXI= ZGVjbA== 44Ko 4KeH4Ka3 5a+G INC/0L7QvNC+0Yk= xINt 0YvQug== IGt1bWE= IGx1Y2t5 IF0s IHJvdGF0aW9u aWVsdA== J8OpdA== INiv2KfYsQ== bnVuZw== LkNsb3Nl cmllcnM= 4KS+4KS2 LmRhbw== 4Kql RXhpdA== bmlt RnJpZGF5 X2Fk X18s 5qWt IGFnb3Jh 4LWN4LSn ZXhwcmVzcw== IOGDqOGDlA== QWxz IOCknOCkrA== IHZpY3Rvcnk= aW50b24= IEtpdA== 2q/Yp9mH wrsuCgo= Ikk= aGV3 U2Vjb25kcw== INi52YTZitmH dHJhZw== IHVzdWFyaW8= IGlsbGVnYWw= 4LWB4LSx IFBhcGVy ICIiKQ== IGhvbWVt IHBlcA== IGhlYWRpbmc= X2RpbQ== IHN0YWtl Y3JlZW5z IG5nbw== INCt0YLQvg== X3RvdGFs IGNlcmNh IElyZWxhbmQ= UmVtb3Rl IGNvbnN1bXB0aW9u INGA0LDRgdGB 5oSb IG9wcG9zaXRl RmV0Y2g= dW5zdA== KCIs 4Ki+4Kiw IERFRkFVTFQ= 0YPQvdC6 4Kar 0L3QuNC60L7Qsg== IHBsdWc= INCx0ZbRgA== 1b3Vvw== Q3JpdGVyaW9u IEluc3VyYW5jZQ== cmVzZW50YXRpb24= IGhvamU= UmVhZHk= ZHVjdGlvbg== L2E= LkZvcm1hdA== b3Jm INGB0L7RgdGC PGg= PiwK LlRvb2w= IHTDug== c2hpcHM= SVRFTQ== YW1wYQ== 2LnZhQ== 55qH IGphcg== IHRpamRlbnM= YWrEhQ== aGF1cw== IGludm9sdmVz 4LK/4LKy cm9i IHBvdGVudGlhbGx5 Y2Vt IGFo4bul IFR5cA== IFNjaGVtYQ== IGNvbXB1dGU= w7Rp IHDDpA== IOem 5aC0 IFBPU1Q= YW1lbA== bG92 1aHWgNWx LkRlZmF1bHQ= IG1pbmlt IE1lbWJlcnM= IGxpbmVhcg== IGNvbW1hbmRz INeQ15Y= IHVjaA== IOC0sQ== 0J/RgA== b3dlcnM= IG91dHJhcw== IG9yYQ== IFNoaXBwaW5n ZnA= X1NUQVRF IERvdQ== 0L3Ri9C9 INC/0YDQvtGE IOuwjw== IGNvbW11bmljYXRl IG1vZHVsZXM= 5ZyW 4oCZw6l0 4LS/4LSo4LWN4LSo IOCkr+Clhw== INGD0LE= bGF1Yg== w7NyaW8= R3JvdXBz X2xvc3M= UmVsZWFzZQ== aW1pZW50b3M= c3RyaXA= VG9nZ2xl 4Kiq 4Lia4Liy4LiX NDAz cmlu IEtvbmc= Q29weXJpZ2h0 IOCknOCkqA== 4YOX4YOQ4YOc INC80LXQvdGP IGhlYXY= IE9oaW8= 56uv IEphbmU= 5pa55rOV V1I= IHRleA== IHPhu5E= a292 KTsvLw== INC70Y7QtA== LmRyYXdhYmxl IGluY3JlZGlibHk= 0YTRhA== 0LDQu9GL0ps= ZXJyaW5n 6Z2e aXNpbg== LmZsb29y INCf0YDQuA== Q2FsZW5kYXI= IOCkrOClgA== cGxlcg== IGRlY2VudA== IGFjY2Vzc29yaWVz IGRpZXNlcw== aXZlcnNhcnk= IGFkZHI= cm92 IGphdmFmeA== 4KeN4Kay aXRvcmllcw== IGZsdWlk INeU15Q= NTA5 IGVzdGF2YQ== 6ZmG IGdvcmU= IMY= 7ISk IGTDqWY= IHN3aQ== IGNodW5r IE1hbm4= IGJvcnJvdw== IGR1bg== IGFkdmFudGFnZXM= IFF1ZXN0aW9u mJA= aXJ5 IOKE IFZpbg== 0LDQstCw IGdsaQ== LkZvcmU= aW5lcQ== ICIkew== IHN0cmF0ZWdpYw== JiM= YXR0ZQ== IHNlbWk= cGx1Z2lucw== 4oCZYW0= IGxpZXU= aXNjaGVy X2N1cnJlbnQ= INm5 IHNsZWU= YXRpZg== 6YCg c3RydW1lbnQ= X0VORA== cGVk IGdlbmVyYXRvcg== b3RlZA== dXN0ZQ== aXRsZWQ= ZXRyeQ== IHJlZ2FyZGxlc3M= IGRpbWVuc2lvbnM= TnVsbGFibGU= bWFuYWdlcg== IGFuaW1hdGVk Ym95 IHR1dG9yaWFs IOyEoA== W18= aG9w IEhpag== IHRyYW5zbGF0aW9u QWR2aXNvcg== IFZpc2l0 INm8 5YuV U24= 4K+B4K6x 4KqG IGluY2x1 INCy0LDRgQ== LnVzZXJuYW1l IOCquOCqgg== ICl7Cg== IG5pZ2h0cw== 66+8 b3JuZQ== cGFyYW1ldGVycw== IGFyY2hpdGVjdHVyZQ== IG5vdGlmeQ== QXV0aGVudGljYXRpb24= Y29udGVudHM= IENvbXB1dGVy PT0i YXV0b20= IOCwuQ== IOuwqQ== IFJhdGluZw== IGluY3JlbWVudA== 2qnZhw== IHdhcm4= IGZpc2hpbmc= IFF0 YmFnZQ== IOyXsA== IHJ1cmFs cHRz cnVwdGlvbg== KHRv Yml0cw== IFplYWxhbmQ= 4YOd4YOR4YOQ 0YPQug== W11bXQ== 0LjRgtC10LvRjNC90L4= 0LzQsNC9 IHPDug== 0LrRgtC10YA= Il1bIg== X3BhcnQ= IGNyeQ== IG5y QW5ub3RhdGlvbg== IFN0ZWVs IGluc2lnaHQ= bGVi IGF0dGFjaA== IG9wZW5z Lmdl IHN1cnZl IEV4ZWN1dGl2ZQ== 44OR dGlk 7LKc IG11cmk= IOCqtuCqlQ== aGVhZGluZw== IOCkteClhw== IGVuY29kaW5n IH19PC8= emFobA== IENvdmVy 5q+P Kiw= IHNvbGx0ZQ== IFRlcm1z 15XXlg== IM6xz4DOvw== 4Z68 L3Bybw== 0L7QstCw0L3QuNC1 IHN5bmM= IEJhYnk= dXVt 7J2064uk IFNhYg== dWZmbGU= DQovLw== QmVs IOC5gOC4geC4oQ== IOCqoQ== emVyb3M= IEFzaWFu LmNzdg== IOCqueCqpOCrgA== IOydmA== IGJ1bg== IFBlcm8= IGluZmVjdA== INGC0YDQtdCx IGZpbmdlcg== aWVuY2lh RmVi IM6u 4KS/4KSW LWJvdHRvbQ== c3ViamVjdA== YWdo Q2xhc3Nlcw== IE9ic2VydmFibGU= bmFu 0YzQsA== IFBpbA== IGVtYnI= 4KaW4Kao IFJ1 aWduZQ== IHB1bGxlZA== IHByemU= IGFudGVyaW9y IFdpZQ== IG5hcnJvdw== ZGlzdA== 0ZbRgg== IFJvbGU= IHByw6lzZW50 Mjkw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4Z+E X2ZpbGVz a29u 5b2x6KeG IGRlxJ8= INC00LDQttC1 CWNvbnNvbGU= ZWxheQ== IGV4aXN0ZW5jZQ== MDA5 4Lec IEFnYWlu X2J1Zg== IEFwcHJv VGF4 INCw0YDQsA== IGvEgQ== b3Vyc2Vz INS1 IEV4Y2Vs IGNoYXA= 56CU xb5p X2hhbmRsZQ== RW1w IOiJ INei16g= IHByb3Bvc2Fs 4Kav IHJlcGVhdGVk aXphZGE= IEVuam95 dXN1YXJpbw== 7IaN emVz YXZpZA== IHByb2R1Y2luZw== d29ybGQ= INqI IG11Y2hvcw== X1ZFUlNJT04= cHVibA== IG9wdGltYWw= IGV4cG9ydHM= IHpvb20= W3M= X2F0dHI= Z2l0 LkFjdA== INit2LM= LmNsaWNr IHZvdGVz IG5hdHV1cmw= IHBhcmw= ueaenA== IGluZm9ybWF0aWU= 4KSi4KS8 0LXQs9C10L0= IOCmquCnjeCnsA== 4KuL4Kqh IG91dGNvbWU= IGVkaXRpbmc= U0s= IGV4cG9zZWQ= cGxv UExF 0YDQuNGC 5Zyo57q/5pKt5pS+ bGljaGVy IGZpbGVk Tlk= IHNlbGxlcg== IGF2YWw= YW5pbWF0aW9u 7KCQ dmFsdWF0aW9u IGJheg== IHByb2Nlc28= IHJpY2U= IHByb2Nlc3Nv IGJyZWFraW5n 0LLQtdC0 IGV4dGVyaW9y IGNvdW5zZWw= w7x6 IGF1bnF1ZQ== IEhpbQ== IEhvbGQ= ZG93bmxvYWQ= 5ryU IO2W aXplcnM= IGxlZXI= IFNvdXRoZXJu IGFjY29tcGxpc2g= IHdhcmU= PigpLg== IOCyiQ== IEVTVA== IElkZWFz KCl7DQo= 4oCcV2U= 15XXldei IGpp JCQ= dW5q IOCkhuCknA== INWN INek1r8= 1bjVrA== ZWRkZWQ= IERyZWFt IGFsbGVyZw== IOC5geC4peC4sA== IGRlc2U= IGJsb2dz cXVpbmE= 4KS+4KST4KSC 4LCs w6lyaWV1cg== TE9D IGdyaW5kaW5n ZmxhZ3M= YXVlbg== IOCkueClgeCkjw== IHByZW5kcmU= 4Z+U IE5B 1b7VpdWs IGRldmVsb3Blcg== IHp3ZQ== IEFudG9u IOyKpA== 6aKE5rWL IGJhcm4= IG1hcHM= IE11c2xpbQ== Y2Vycw== 6rKp ZW5nZW4= LT57 IHNwYXJr IHNlw7E= YXRvbQ== IG51ZXZh LW9y INW41oDV INC+0L/RgNC10LTQtdC7 bG9vbQ== IGNlcnRpZmllZA== TW9uZGF5 IEFybXk= IFBpY2s= IHNleG8= IENU 4YOd4YOR4YOY4YOh IGVyb3Q= IHBr IGVuZW0= IGtlcA== CWE= emFz 4KeN4Kao IE5TU3RyaW5n IGNvbW11bmljYXRpb25z IGNhdXNpbmc= IElTTw== IEVsZWN0cmlj b3VuZGVk 0Zk= IGd1ZXI= IGZvdW5kZWQ= IHByb21vdGlvbg== IFdhaXQ= Q2U= w7luZw== IGdhZA== 6Iux 0LPRiw== INCw0LY= 0ZbQu9GW IHRocmVzaG9sZA== 5bim IGRhZG9z IENvbmZpZ3VyYXRpb24= aWduZXQ= JCgnIw== INis2KfZhg== PXsn fSc= 5p2A amVrdA== IOC2rw== 4pU= 4Kqk4KuA IHN0dWNr IEFyY2hpdmVz w6Rk 15HXlA== 4K6y4K+N4K6y 5L2c6ICF IHNhdGlzZmFjdGlvbg== IHBlbmFs bWM= Y3J1bWI= IGt3ZQ== INGC0L7RgA== IG9icw== IFByb3ZpZA== 4LKV4LON4LK3 IGVmZmV0 IGdldmVu 4pag KCdc ZGVzY3JpYmU= IOCksuClh+CkleCkv+CkqA== IOCknQ== IEVW KCl7 INGP0LLQu9GP0LXRgtGB0Y8= IOCyruCypOCzjeCypOCzgQ== cGFr IENhbWVyYQ== IGVzdGFibGU= IE1pY3Jv IHBvcHVs VHVybg== IHB3 IFNUUg== 0YHQutC40YU= CXVuc2lnbmVk aW5lcnk= IHJlc3BlY3RpdmVseQ== 4YOU4YOg4YOY aXE= 55So5oi3 6Ieq5ouN bWFya3M= amV1bg== 5byV ICAgIAoK LkxFTkdUSA== 2KbYqQ== dXpl IGZhaXM= IEJC INGC0LDRgA== KCkpLA== IHdhYXJk w6FpbA== YXJrZXI= 5LiA5Yy65LqM5Yy6 IGxpZXM= Ym93 4LSu4LWN4LSu 2KzYqA== cmFjaA== 16nXmded aWtldW4= IHB1bnRv IGluZmVjdGlvbg== aWJlcm4= 0YDQvtC9 amFt IGhhaw== IGhvc3A= w6RocmVuZA== TW8= 2LLbjA== KEdM X3JpZ2h0 IHByb2R1Y2Vy 4Kao4Ka+ IHRhY3Q= 4buRaQ== IHNvbWV3aGF0 YWlsaW5n IEdyYW4= IHJlc3VsdGFkb3M= IHN1c3RhaW5hYmxl aXNpbmU= IOCkquCljeCksOCkpg== IMKh INGD0Lc= 0Y/RgQ== cmVv X3NldHRpbmdz IHJhcw== IFdpbnRlcg== 4LC/4LCu 0YDQtdGC IOC0quC0sA== IG9tYQ== Lm1vdmU= VXNlZA== IHLDqWFs 578= IGJvd2w= IGxldHo= IGRpYWdub3N0aWM= Lm1ldGhvZA== CWRlZmF1bHQ= ZnRl CUQ= 4KeA4Kaw MjE4 IHNlbnNpdGl2ZQ== IGdhbGw= L2phdmFzY3JpcHQ= IGNpZw== 2LnYpw== 4oCq ICwK IEphaHJl 1oDVoQ== 4LK+4LKu IOCwrQ== 4LWB4LSk4LWN4LSk IGJvbm5l IHF1YW50bw== CXN0cg== aG91ZA== IEZveA== 5Liw IOC0lw== IEVYUA== 5Zyo5ZOq IEdyYQ== LW5hbWU= IHNwb2tl IGltcHJlc3Npb24= IER1Yg== IEl0ZXI= INC80LDQuw== INiu2Lc= INWj1bjWgNWu INiz2LHZhw== IHBlcm1pdGU= IERvbmFsZA== LWJ1dHRvbg== MjQy LXNjYWxl KG9wdGlvbnM= 6aOe IHBlcnNvbmFsaXR5 ZmluaXNoZWQ= IGF0cmF2 IFdpbmRvdw== INCx0LDQvQ== X0FQSQ== IHJldmVs 4LmI4Liy4LiZ IHRvbnM= IOCqrw== R2VuZXJhdGVk IGNhYmU= cG9jaA== IGdpZw== 7ZWp64uI64uk eW5u INC/0YDQvtCz0YDQsNC8 YXppb25p IGRhenU= IERS Q29tbXVu IOyViA== IHlhcg== yrtv U2Ft IFNvbWV0aW1lcw== IGF2b25z IHllcg== LmJhY2tncm91bmQ= IOCknOCkvg== TWVu QXBwcm8= 7YyM 4Ka+4Kas4KeH IOGDkOGDoOGD IE11bHRp cXVpcnk= Lmdy 55uY IHByb3h5 IG1lbmQ= 4LC+4LCV INmI2Lk= 15nXlg== 4KqP KCkpKQo= Y3J5cHRlZA== 0LjQvtC9 IHNhdWNl IG9idmlvdXNseQ== 77yB77yB IFZh ZXdpc2U= IGRpbmE= X2Rldg== MzA1 IHBvcHVsYQ== IOe9kQ== IEdlb3JnaWE= LmRlc2NyaXB0aW9u IFJvZw== RG9uZQ== 0LXRgNC10LQ= IOCnsA== IHJlc3RvcmU= aXR0ZQ== IFBI 1KXRgdC90Ys= bm93bg== 4Lir4LiZ IGRlc2t0b3A= LmdyYXBoaWNz YWJyaWM= IMOH bGVzc2x5 Y29tbXVu 0LDQt9GL IHNvcw== Lyc= IOGDkOGDpQ== YmY= IGRlbm4= 5ZSu LnR2 VW5rbm93bg== ZWVk IG5vdXZlbGxl UmVnaXN0cmF0aW9u IHdlcmtlbg== IGtpbmRlcmVu KHBvcw== 0Y/RiQ== UEs= IG9yZGVu IHV0aWxpemU= IMK7LA== IGVzdGltYXRl eXR0 ZG0= IG1vbGQ= YXpvbg== IGlkZW50aWZpZXI= IGJlYXJpbmc= eWM= YW5m w7t0 IGNvbnZlbmllbmNl QVo= Ly4= Z2Vt IGVsa2Fhcg== IG1lbW9yaWVz IENyaXN0 IOCkleCksOCkpOClhw== dmlr aWVq IEZlcg== 4KS+4KSr 0LPQvtCy IEZS IHBvdW5kcw== aXNoaQ== IOCquOCrgQ== IEF3YXJkcw== LmxvZ2dpbmc= LmxvZ2lu IGVuam95aW5n IGV4cGFuc2lvbg== IGV2aWw= INit2KrZiQ== IHB1eno= z4fOtc65 5aaC5L2V X1BM 4Lix4LiU VkVM IGVsZWdhbnQ= IExvY2s= IGZpY3Rpb24= IGFjdHM= IGhpc3Rvcmlj ICgpOwo= IGFzc2lnbm1lbnQ= IHRhbGtz IHNjbw== INGA0Ys= INKb0rE= 15zXmA== SWRlbnRpdHk= INin2Kw= IGpldQ== LnJvdw== MDMw LnN0b3A= bmVlZA== 15fXkw== SUNFTlNF IFBU UG9wdXA= IFNobw== 0LTQtdGA0LY= IEV4Y2hhbmdl enVuZw== c3N1ZQ== TWV0aG9kcw== YmVr IHJpY2h0 IFN0YWR0 IGxpZmV0aW1l IHN1ZGRlbmx5 PSR7 IFRocm93 IHlvdXJz aGVpcm8= LXdlaWdodA== IEthcA== 1KXRiA== Q0VTUw== I1s= LkpMYWJlbA== IFN1bW1lcg== IEtFWQ== 0YDQtdC9 IOCmleCmsOCmvg== 4KS44KS+ IHPDuA== IGxpag== IG1hdHRyZXNz IEluZG9uZXNpYQ== P+KAnQoK IOCkruCkqA== IGFwcGx5aW5n IHNvcGg= ZHJhdg== INGA0LDQsdC+0YLRiw== Y3RybA== IFRoaW5r 4KuL4Kqf QWN0b3I= ZW5lcmF0b3I= ZXJleg== dWZmaXg= IHJvdW5kZWQ= IHJlc3RyaWN0aW9ucw== RGF5cw== IGVuZmFudHM= IGPDtG5n 0LjRjg== IGthcnQ= b3B0aW9uYWw= IGNvbXBhdGlibGU= IOCkleCliA== IHByb2ZpbGVz IOC5gw== xLFsxLE= IOCkrOCkvuCkpA== UkVH IG91dGNvbWVz IFBhY2lmaWM= INeb15k= IGhlYWRz IOGDkOGDrg== IHByaW50aW5n 0LvQvtCy IEhlYXJ0 IExvdA== IHBhaXJz IGbDuA== RXhwbA== X3RhcmdldA== IHV0aWxz 7Yag c3RkaW8= ZXR0ZW4= IGRpZmZpY3VsdHk= IOKX IHNvZw== IOe+ IOa1 YXNoYQ== IHdlJ3Zl INCf0L4= 0L7RgtGA0LXQsQ== L2NvbW1vbg== IHNvZA== INCw0LM= IG92ZW4= IOmd YmF5 65Ox U3U= 4LS+4LSw4LWN CWZtdA== KHBhcmVudA== X3NpZ24= IG1hbmFnZXJz IERldmljZQ== YXZhbA== Mzcw aWFhbA== 4LmE4LiU4LmJ ZXJ2ZXI= 2KfZhNip IEZyaWVuZA== IERldXM= ODAy IG9ydA== IHNx IGRlc3Ry IOm7 LnJvdXRl CU0= IHByb2hpYg== IGFzaQ== INC40YI= w6dvbg== IG5hdHVyYWxseQ== IHRpbWVzdGFtcA== 4LmJ4Liy4LiZ INCw0YHRgg== 4KeN4Kaa dW5uZWw= 0LXQvdGC0L7Qsg== INGH0LXRgNC10Lc= w7NyaQ== KSgoKA== IHByb3N0 QW1lcg== ZW5nZXJz a2xl IHBhcmVjZQ== 1aXWhA== 2KfYqNmC aXN0aQ== IHBlZXI= 2KPYsw== INC30LDRgg== IG51bGxhYmxl X3JlcXVpcmU= 27M= 4LWH4LS3 INmI24w= ZXJzY2g= IHV0aWxpdHk= IGludGVncmF0aW9u IGNvcmQ= dWNrcw== KGJ1Zg== 4KS+4KSg dXNhbA== IG5hYg== IHJlZGVz 4YOV4YOa 4KS+4KSk4KWN4KSw 5Ye7 IHdvdWxkbid0 IEtldg== 5aE= IFRyYWRl IOyEnA== IHByZWNpbw== IHN0cnVnZ2xl IEludGVybmFs RXhlY3V0aW9u IGdlZQ== XSkpCg== 15vXldec YXZhbg== IGJyb2tlcg== 2LXYrw== amFs w6FyaWFz IG93bmVyc2hpcA== 5oiR5Lus acOr aXNhcw== IHRlbGVmb24= 6K+t w61zdGljYXM= QU5D Y2xvc2Vk IHhh TmF0aXZl IHBpZw== Tk9U IHBhc2Fkbw== UklHSFQ= VUFM aXNrYQ== bmM= poI= IHZlcmU= LmJy IHJlY2li INCw0ps= zr3OtQ== IGluZGljYXRlcw== IHNwcmU= IHdvcmtzaG9w IE1vdW50YWlu IEV2ZW50cw== QnJvd3Nlcg== IER1bXA= LkZyb20= Q1BQ U29t 4Kq+4Kq5 IGFyZ3Y= WVNU 4KWC4KSy IFJlc291cmNlcw== 4LKf4LON4LKf LnRo VXNpbmc= YXRvbg== MDMz IGNk QVc= IGNydXNo IEV4YW1wbGU= 0Y3QvA== QWR2 Q2F0ZWdvcmllcw== IElkZW50 IGNvc2Fz IGFycml2YWw= IGZhbHRh IGJydXNo 4KaB MjQx INC40YHQug== IFp1cw== IEJyYXppbA== Mzg0 IHJpbg== IHN1bnQ= IG5vc3Nv Ljs= IOCqleCqvuCqsA== 4LOD 4Z6Z YWJldGg= IGNvdmVyaW5n Y3ljbGU= U2VnbWVudA== IEtyaXN0 dm9z IGRpc3RyaWI= cGxldA== IEZ1 0LnRgtC1 IGp1bnRv IHRyYW5zbGF0ZQ== IGRpc2Vhc2Vz 4KSw4KWN4KSk TXI= IGNyZXM= IGZyw6Vu IGFmcmFpZA== IHRyZWF0bWVudHM= IGZyYWc= IFVwZGF0ZWQ= aXpvbmE= Y2Vw IEFsbGFo YXRhYmxl IOCwnw== 1bjWgQ== MjE3 4LK+4LKC LW1lbnU= LkF1dA== LnByb2plY3Q= 0qs= CXR5cGU= 0LvQtdGA aGVsbG8= Xy0+ Q1U= OyI= Y2tlcg== Q29udGVudHM= ICd7 LlNj IEtyZQ== IGRpcmVjdGlvbnM= IE1hcmM= IGRlcml2ZWQ= IHp1csO8Y2s= 0L3QtdGC Zm9ybWE= INCy0L7Qv9GA0L7RgQ== NDA5 Lm1vY2s= IHByb3Bvcg== IMOnb2s= YXBvcg== IGZpc2NhbA== 7ZiE 44OT IGxpbmc= T3BhY2l0eQ== IFNwYQ== cGxh dGVyYQ== IFNlYXNvbg== IEFSRQ== 1okKCg== IOCkpeClhw== IHNjcmVlbnM= IGdhdQ== IGRyaW5raW5n SW52ZW50b3J5 Q2FudmFz w6F6 IGlzc2V0 5q2l LlN1Yg== NDQ0 IHBhY2thZ2luZw== bmVscw== IGFsZ3Vub3M= IHJlc3BlY3RpdmU= IFRlbA== MjI2 xaFh KExvbmc= 67KE 55ub 15XXmg== IHRvZ2dsZQ== Tkk= 4Kaf4Ka+ IHNsaWRl 0Jk= KGZpbGVuYW1l IFNpcg== Q29tcGFyZQ== LkJ1aWxkZXI= IHJlY2hlcmNoZQ== 5a6k w6lyYXRpb24= IGdpbmc= YWxsbw== IFRlbXBsYXRl PWZhbHNl IGxhbmdz 4KS+4KSy4KS+ aWHFgg== ZmFuZw== IFRhbWI= ODUw IGRyYW1h IGV4cGxvcw== IG5lZ290aQ== IOyLoA== IHNlYXRz NTAx QnJhbmNo MjUx IGluanVyaWVz bW9kdWxlcw== 15DWuNeo IOC4nQ== 5aCx dXJyeQ== IHFh INin2YTZiQ== 44CRCgo= INC80LDQsw== xIFz IOC4ig== IG9yYWw= IOC4p+C4seC4mQ== UG8= bGVkZW4= zrjOtQ== IHJhdGluZ3M= MzEy 4Kac4Kao IGNvbXByYXI= MjI4 QVJOSU5H aXN3YQ== 2YjYp9ix YXZhbQ== KENvbG9y LSU= LWRhbmdlcg== 6LSo LkNoYXI= UmFuaw== 15zXog== IGzDqWc= ID4+Pg== aWxpaw== LGk= IEVT aXN0cmU= ZXhjZXB0 4oCZb24= dXBv b3V0aW5l 7LQ= IHJlZHVjaW5n IEhhbmRsZQ== IGJlbmU= c2VudA== IGV4Y2VwdGlvbmFs IHdlcmVsZA== Mjc1 IEVneXB0 IG1hY2h0 X21vZHVsZQ== MjE5 IGh1bW9y INmH2LE= IGxhdWdo xIdp IGNodW4= ZXJnZQ== Yml0cg== IGV2ZXJ5d2hlcmU= IHBvbGU= aXZhbWVudGU= IGJ1bmNo IFRyaQ== J30sCg== LkN1cnJlbnQ= RU5FUg== b3ZhbA== xqFu dW5uYWJsZQ== U3Bl 0LzQvg== VUs= INC90LXRgdC6 dWVyZG8= CWNvbnRpbnVl Lk1BWA== PExpc3Q= IHN1ZmZlcmluZw== IHRi IEJvbnVz INiv2LPYqg== INC80LXQtg== cG9zZWQ= 4YOg4YOQ4YOb 0L3QvtGB0YLRjNGO IM60zrXOvQ== IOWH IEJvb3Q= IENhc2g= IGFib3J0 cGRm IHN1YnQ= SXA= IGVsZWN0cmljaXR5 IGluY3JlYXNpbmdseQ== IG1hdHI= 77yV IFZlbA== bWly ZW11 INC80L3QvtCz0L4= YnVk LWNvbnRhaW5lcg== cmljaHQ= 4oCd44CC 566h55CG ZG9tYWlu ZW5jaA== 2KfYr9uM IENQ IGVmZmlj 0YLQvtCy aWdub3Jl INmI2Yc= INin2YTZhdis 4budaQ== KGxvZw== MzA2 IHNlcnZpY2lv SG90ZWw= IGNhcmVmdWw= X2Fycg== IHVsdGltYXRlbHk= cm9sbGluZw== w7RsZQ== XSk7DQo= 4LS+4LSV4LWN4LSV UGl4ZWw= VG9vbHM= IHVrdQ== aWRhbg== R1M= YWRlZA== aWFsZXM= IFN0YWNr cmVlbWVudA== a3RvYmVy 56iz 4Ka/4Kab bmFr Lmhhc2g= IE1P 4KeN4Kam Ojo6Og== 4YOg4YOY IGFjcXVpcmU= 6rCQ LWdlbmVyYXRlZA== IGRvYg== L3Rlc3Q= MjQz IENob29zZQ== IEJpcg== TXM= IGRpcmln 4YOQ4YOs bGlndA== b2NrZXRz X2NhbGw= IHJpcA== LuKAnA== IOS6ug== IHBvbMOtdGljYQ== 4Ka+4Kaa IGFkZW3DoXM= RGVwdGg= IGVrcw== IOCqteCqpw== 15XXldeQ IERi IGZlbg== ZW1hbg== ISEhCgo= IHNhYXQ= IMSHZQ== ZWN5Y2xl INC20LDQvdCw IGFjdGluZw== INC20LjQsg== U2Nhbg== IEFkbWluaXN0cmF0aW9u 2YjYtg== X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= IG1lcmVrYQ== IHN1cmY= YW5jZWxs IENybw== Ojok IFJlc29ydA== IFRyZWF0 IGRhZ2Vu 0Y/RgtC10LvRjA== IGRpYWw= IEhvbGx5d29vZA== 4LiV4Lij IFBsYXRmb3Jt INGB0LXQvA== 4YOQ4YOm IGZyYW5jaA== IG1vb2Q= 55uf IHJhaw== IFBm IGlnbm9yZWQ= 4oCr IOiFvuiurw== X2Fz dGhlYWQ= IHbDrWRl aXJ0eQ== KioNCg== IFdvdWxk Z2VuZXJhdGVk X2RlbGV0ZQ== INGB0LDQuw== LklT SGV5 L0I= X0xJU1Q= IGZvcmdvdA== IOKGkgoK ICIp IHJlbHk= IG7DqWNlc3M= IGthaw== 0LvQsNGF IERyaXZlcg== IG1hbmllcg== TWlsbGlz IGNvb3JkaW4= IGPDoQ== c29tZQ== QW5jaG9y aWJpbGlkYWQ= 44CA44CA44CA IGdhZw== 0LjQvdGD 0YfQsNGB bmllcg== Ois= ICAgICAgIAo= w7xz MjI5 b3Zhbg== IGVv b2Jp IGhlbHBlcg== IGdvcmdlb3Vz NDEw aWdpbmc= U2VyaWVz ZGlhbG9n w7Ju ICo9 IFN5 ZXRj 5bed 5qk= 0YDQvtC/ w612 IM+EzrnPgg== IHplZXI= 4YOQ4YOd d3JpdGVy YW5kaWRhdGU= b3Ryb3M= 54i9 IFJlcXVpcmVk KEo= X2ZsYWc= IFBoaWxpcHA= YW51dA== IGZpeHR1cmU= 56yR IFVucw== 1aHWgNWj IGVtYmFyZ28= Z2Vucw== IGV4aGF1c3Q= IGRyYXdu LXdoaXRl 2oo= IG1lZXN0 aGFuZGxlcg== IHJldm9sdXRpb24= IGZhcmU= dm9vcmJlZWxk IGFnZ3Jlc3M= TXV0YWJsZQ== 0Y3RhQ== aXNtcw== MjQ0 YXZpdHk= IGJ1aXRlbg== IHNlbnRpZG8= IE1lZGljaW5l RUE= INC+0LHRiQ== dmVydGV4 VEQ= 2KfZhtmI2YY= IHdhdGNoZWQ= IG9mZXJl ZXZlbnRz Ozwv IFN0YW4= IGJsZW5k IGNvbWJpbg== INCy0LXQtA== PyE= b2tp ZXJpYWxpemU= b3JpZw== LWls KGJhc2U= LnJlc2V0 IDop 5ao= IHppZQ== IGludMOp bGFnZQ== LnBvcw== INC/0YDQvtGB0YLQvg== LW1l IGJsaW5k Q2FtcA== 16jXmded IHdpbnM= IGNhcnJ5aW5n 4K6z4K+N4K6z 5b2i IEdvbGY= w4NP IEtvcmVh IGNvbXBsaWNhdGVk b25uZQ== 5qCh 2YbZhw== 0LzQtQ== IG1ldHRyZQ== IG1pdHQ= IFBhaW50 YWNoZWxvcg== c2hhcGU= IG9wdHM= c2I= IG5vc3Nh IGNlcnRpZmlj IEJlaA== INC80LjQvdC4 aWN1bGFy aW52YWxpZA== LiIi IGx1Zw== IEJhbg== 54Wn bHVzcw== IGlubQ== YmFyYQ== IGJ1eWVycw== IHN0cmVldHM= IHZhYWs= 6ZKf IHZlcnRleA== YWplcw== IENvbnNl ICcnCg== cmFo IGNvbW1pdHRlZQ== 77yfCg== ems= 4oU= IHBhdHI= INGF0LjRgtCw0Lk= IHlhbg== LnJvb3Q= INmH2YbYpw== IFlldA== IERldXRzY2hsYW5k UHJlZA== 4buHdA== 6Zif IHJlZmVyZW5jZXM= IGludGVyYWN0aXZl 4LSy4LWN4LSy U2Vx 4LON4LKq 55S35Lq6 IENsaW4= IHJlcHJlc2VudGluZw== IG15c3Fs IFNoZXI= IExlYXJuaW5n LWJveA== IGRyaXZlbg== INGC0LU= c2Fs MjQ3 IGV4ZWM= IGR1YWw= 5Y+y dWVsZQ== UGlu IOS4rQ== 0LXRgtC+ aGly IG5ldWVu 56Gu SVNI W10s 4KeN4KaV J2k= 15jXoteo IERpdmlzaW9u TWFya2Vy IDot c2l6ZW9m IFJlbnQ= Q29tbw== IGhlYXRpbmc= IGtvbW10 YXJpbg== INCj0LrRgNCw IGzDqQ== dml0 bGllw58= IGt3YWw= IGV4cGxhaW5z IEJ1ZmZlcmVk LWNsYXNz cmF5 Mjk5 4KWD4KSk IHN1cHBsaWVycw== aXphdGlvbnM= IG9rYXk= X25leHQ= Q2hyaXN0 INmG2LQ= 44O844K5 YXTDqWc= IHN2ZQ== IGxvZ2dlZA== INin2YbYrw== X3Byb2Nlc3M= IEt1cg== IGRvY3RvcnM= IGNvbmZpZ3Vy INCe0LE= IHNla3M= 2KfbgQ== L2U= IOCkoA== 4KSw4KSj 4pml 4oCm4oCm4oCm4oCm 2LnZhdin2YQ= INGA0L7QtA== IHJpdg== RVJWSUNF dWRlbg== b2xvZ2lzdA== 4pmq INC/0L7RgdC70LXQtA== Y29uZmlybQ== IGNvdXA= VmVydGljYWw= IHBob25lcw== aXNk CXJldA== IG9mZmljZXM= 2KfbjNuM IG9jZWFu IG1hYWt0 IGJhY2t1cA== 24Y= IHBw IGRlYWxlcg== IHN0YXllZA== NjQw 0ZbQvw== b2xsYXI= YWJo IFJlbmRlcg== KHRpdGxl IE1vdmU= IGxpYnJl YW5uZw== cGFpcg== IHN3YXA= Ons= am9uaQ== bWVyZ2U= Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== d2F0Y2g= aXN5 xLw= 157XlQ== IHRydXN0ZWQ= IGZpbmRpbmdz QU5L IHJlY3VwZXI= INmE2YTZhQ== 5L2P dmVydGhlbGVzcw== ZWxsaXRl NDQw JC4= 4Li34LmI4Lit 1b7VuNaC1bQ= 4LKV4LON4LKV4LOG IGhvcml6b250YWw= zps= YWNsZXM= 4KSq4KS+4KSy IHNlY3Q= IGZyYW1lcw== IHRpZW4= IG1hdGU= TWFjaGluZQ== IHRyYW5zZg== IMO6bHRpbW8= IHNwb3Rz 157Xqg== IHZlcmw= IFByb2Zlc3Nvcg== 4oCP aXNpb25z IMWe IHBvdWNv IO8= KCIuLw== 44CNCgo= amVk IGVudGVydA== IEFzdA== aW50aA== cGVs 4LCn IG9wcG9u 44Gw IOCqpw== 4oCLCgo= 0LjQtNCw Ilw= U2VuZGVy IHBvY2tldA== 5Zu95a62 IGpvaW5pbmc= Lm9yZGVy IGFwcGxp eW5h IEFkYW0= 0LXQvdC90YvRhQ== bGFyxLFu 4KiX IHdpcmVsZXNz 5ouJ IGNvbnRhY3Rz LnRhYg== INCx0LXRgdC/ IHJldGFpbg== UmVxdWlyZQ== IEFkZGl0aW9uYWxseQ== IHRyb2lz IHR3ZW50eQ== bmRl IGphcmQ= IEVucw== IGludGVsbGVjdA== IGluY29ycmVjdA== RnJvbnQ= IGRlc3Rpbg== INin2YTYudin2YTZhQ== IHdlaWw= Lmlt IGR1Yg== IHN1cHBsaWVy IERpZXQ= 4LCj Pnt7 Y3Vsbw== W2lkeA== 0YbRhtCw ICgoKA== b2xsZQ== IOCohQ== YWNoZW4= Ijp7Cg== 4KSm4KWA IOS4hw== IFNhZmV0eQ== Rm9vdGVy LicsCg== 55u45YWz KERhdGU= ZGFs 4KeB4Ka3 RE9N 5a+M 0LDQt9Cw Y29tcGF0 bnV0 IOGDkOGDnA== ICh7Cg== IGVudGVyaW5n 1bbVuNaC1bQ= 44Of w61saWE= IE1vZHVsZQ== IEZsb29y IGxlYW4= INW41oLVtg== TG93 SGVy IOGDoeGDkOGDrg== c3I= RGlzdA== IHVuZXhwZWN0ZWQ= ZW5hYmxl 5Lym IEV2ZXI= X3F1ZXVl cmVzb3VyY2Vz INKT 4KSV4KS/ IGZvdG9z S2VlcA== IGFkbWl0 0LjRgNC+0LLQsNGC0Yw= IGNvcm9uYXZpcnVz 5YaF5a65 aWJpbGl0aWVz 1aHVttWk UHVzaA== 5Lmx IHByaW1laXJh 4LKo4LOG IGJlbGFuZ3Jpams= Q2FzdA== IGhhbmRsZXM= c3Bpcg== aXR1ZGVz IERpZWdv 4oCdCg== dG90 IE9udA== IE1pdHQ= IGF0aXY= YXN0cg== aW5uaW5n IGFzaWRl cHJvbQ== dHc= RU1FTlQ= IEdvbGRlbg== cmV2 LkxF IENhbGVuZGFy ZsO8cg== IGRvc3Q= wqo= Y3J5cHRpb24= IEJlaQ== IOmY IHRhbGtlZA== dXRldXI= TWljcm9zb2Z0 bOG7jQ== 5pa9 Y29sbGVjdA== INGN0YLQuA== d2FuZGE= bW91c2U= 0LrTmQ== IGNoYXJzZXQ= 5ZCE IHdlZXQ= INC30LI= IEFyYmU= aWxhbg== T3V0bGV0 0LXRgNC1 X3ByZWQ= IHJlc3BvbnNhYmls IOy1nA== 44OU IOCkheCkrA== 16DXoQ== IHBlYWs= IEbDvHI= IGNhbGM= IEZlZGVy 0LDRgNC0 4Ka44KeN4Kal IFByaXZhY3k= INio2KfYsQ== IHNjZW5hcmlv 2K3Zhtip IHN0YWdlcw== zrjOtw== IOKY IGNhbGN1bGF0ZWQ= IGVuZ2FnZWQ= OiIs IHJldm9s MjM4 IGFwcHJvYWNoZXM= 4LON4LKl IGZhbGxz IOC2sQ== c2Vr UEVSVA== YW5kcmE= IGFubsOpZXM= IFNlYw== 7LKt 5rCX IOiJsg== INeU16Y= IGR1YXM= IFNjcmlwdA== zqE= Z2hhbg== IEZsb2F0 IG92ZXJ3aGVs cm9kdWN0aW9u IOCkleCljeCktw== dWFz IGF1dGhlbnRpYw== 0LzQtdGB0YI= QWx0aG91Z2g= INGC05k= X3RocmVhZA== 5pWI 44CC4oCdCgo= IGRpam8= Lm51bWJlcg== IGFjY29tbW9kYXRpb24= 4YC2 Lml0 RkVS 5LiN6IO9 IHlvZ2E= 0YHRgw== IGll IGdyb3Nz aWN1bHVt IGdlbnRsZQ== MDE4 LmRv IOC5gOC4peC5iOC4mQ== a2lsbA== IGVsYWJvcg== CWRl ICcnKQ== IOCyrw== IFNhdg== IFN0aWxs INin2K0= IMOhcg== IGR1cGxpYw== IGZhY2lsZQ== 2LLYqQ== yZl5 RHJhZw== IGdlbGU= IFdpdGhvdXQ= c2Vh IHBvZGVtb3M= INGC0LjQvw== YXdhbg== IE5pY2s= 4Ken4Kc= IHdpbGxlbg== IGh2b3I= QVJT IG7DoHk= IFdhcnM= IGVzc2F5cw== IElyYQ== U2Vt LmRhdGFiYXNl CWdvdG8= 1bbVpdWs bGFuZ3VhZ2U= 4KSu4KWH4KSC w6hs c3N0 IOustA== aWVybw== 4LWN4LS4 YWJhZA== INin2YTZhdi0 IOCuleCvig== IMO+dsOt IG1pbmRlcg== IHRyb3Vi 7Ius MjY1 cG9zaXRl cG4= INiz2KfZhg== 0L7RgNC40Lg= IOCyteCyv+Cy INec15c= aWdlc3Q= LnBvcnQ= 4piG dGhvbg== IHZ1bg== IGZsb3dlcg== J29u aWZ0aW5n Qm90 IikpLg== 66qp U2xpZGVy cGxhY2Vob2xkZXI= IGNvb3Jk INin2LE= X2lm 0LvQuNCy IEhvbmc= IOyeiOyKteuLiOuLpA== IGxpc3Rpbmdz IE5hdGlvbg== aWx1 IHdvbmRlcmluZw== 56C06Kej 5Y+Y IOa+s+mXqA== 4LS/4LSq4LWN4LSq aWVscw== VG9hc3Q= X2Js IHJldmVu U2VjcmV0 IGNoYW1i YXJpdHk= IGRvbG9y VGh1cnNkYXk= IFBob3Q= VGhyZWU= 5peX YW5ueWE= IGFsdG8= 5Lit5b+D IGRlY3JlYXNl 4Li04LmA4Lg= c2hvcHM= X0ZBSUw= INCz0LTQtQ== IGF1Yw== LnJlZw== KFRBRw== IFJlZGlz 2YjZhtiv U2V0dXA= YXPEsQ== INC+0L3Qu9Cw0LnQvQ== IHJlY2VpdmVy IG5vc3M= IHJlY3Vyc29z INC/0YDQvtC00YM= 2YTYp9mB INCy0YvQsQ== X3Bo IG1pc2U= CQkJICAg b25jZXM= dXNhZ2U= QmluYXJ5 INeQ16A= X1BBUkFN IENvbnRyYWN0 VHJhbnNpdGlvbg== 4Kq+4KqV IGPDs21v YW5uZW4= aWxt IGhldXRl IGxlYWY= Pz8/Pw== IFll 56eB IHHDqw== KHJz U3Jj IGlzaW5zdGFuY2U= 0L7RgtC+0YA= U2NoZWR1bGU= KGNvdW50 IOCmpOCmv+CmqA== 5LiJ57qn IOCksOCkueClgA== 5rCU SW5kaWNhdG9y IHBpeGVs IG9sZWg= IG9yZ2FuaXNhdGlvbg== X3ZhcnM= IGNvbmZpZ3VyZQ== IGtvbnM= KHNldA== LmFj 6LaF56Kw LmFjdGl2ZQ== dXJyaW5n IGdyZWF0bHk= b3R0ZWQ= 5a6B c2hpcmU= IG9sZHXEnw== PFVzZXI= INiz2Kc= cHJvdg== IERFTA== X09VVA== INee16c= IHRpcmVk IOCmquCmvuCmsA== VHVlc2RheQ== 5piv5LuA5LmI LnJ1 77yJ77yM IFN0dWR5 IFN3aXRjaA== xK8= 4KeH4Kau IENvcHk= 4KS/4KS5 INWh1b4= zrnOus+M Ymln dGV4dGFyZWE= CUY= INei16E= YWRvcmFz IHNhbWE= IGRpc3RyaWJ1dA== 7JW9 4YOj4YOb IGRleg== IHNob3Rz IFNvcnQ= 0YHQutCw0Y8= cG9uZGVy XERhdGFiYXNl VUM= IGNhcmdv IHByZWNlZA== IGTDsw== X211dA== 1aHVtNWi IEdhbGF4eQ== b3VuZ2U= 4Z+S4Z6T IOC4nOC4pQ== 5oC75Luj IHJlc2lkZW5jZQ== dHJhbnNhY3Rpb24= INW/1aHWgA== INWl1oDVrw== IGNpdg== 44On cGF5bWVudA== b3NpdA== UmVwbHk= IGxpZWY= IE5vcm0= 6aOf IE1pYW1p LlN0YXJ0 LkVtcHR5 IG5nb2s= IGFsbGVu INCU0LvRjw== aW1peg== KGNsaWVudA== IAoKCg== ZWxyeQ== IG91dGVy Qmk= dXR1 5q2j6KeE b3Blcw== KT0= T0Y= 4Kam4KeH4Kaw IHZlemVz d2Vhcg== IGNsYWltZWQ= Lmluc3RhbmNl IHRla24= IHJlY29nbml0aW9u w7xybGljaA== IEJM IGluaXRpYWxseQ== IHFx IG3DtmdsaWNo 0ZbQug== aWRvcmVz ZW55ZQ== VUE= IHJhdg== 0YPRgNGL IGlj Zmx1dHRlcg== 4Lo= IGltcHJvdg== dXN0ZXJz 5LiA5pys6YGT X3Jvd3M= aWdhdGlvbg== 6ISR INep15A= UHJvZA== L0Q= 5L2/55So IEVtcGxveWVl ZW1lZA== IGxpYmVy IHRyYXZlbGluZw== IGRlbGU= 2YHYttmE IGFsaWFz IGFsw6lt T0tFTg== INCa0LDQug== LnRhZw== KFc= UnVubmVy IOC0nw== Z2VsZQ== KG1pbg== IHZpY3RpbQ== IGNlbnRlcnM= INin2YTZhdiz2Ko= X21hdGNo IGVudmk= IGJyaWxsaWFudA== ZXJjaXNl 0YPSmw== IGF0dWFs IGZhY2Vib29r 44CB44CM IHByb3ZpbmM= 4Ka/4Kaf L0w= 2KjYp9iq 44Od IGN1bg== IEFncg== IOCuteCusA== IEdvYg== IOW/qw== IOuE IGJlZHJvb21z 6rKD 4Ka/4Kau IHN0YXRpb25z IFRhbGs= INin2YTZhdi1 IOWkqeWkqeS4reW9qeelqOaAjuS5iA== IGludm9sdmluZw== IGxhd3llcg== LS0tLS0= 06nQsw== NTIw Q291bGQ= IGRvcg== d2Fsaw== VW5pdHk= 0Y/RhQ== xLHEn8Sx IOWFqA== 7ZWo 0Y3RgtC+0LzRgw== IGluamVjdA== INC60LvQuA== LXBlcg== b2PDqg== w7N0 INGG0LLQtdGC Ulk= fSwNCg== IGhvcnM= IGxldWs= LWRhdGU= IOyasA== IGJyaXQ= 4K6/4K60 Y29udg== IHN5bmQ= Z2xlcw== IGJhc3RhbnRl w6J0 IHRvbmlnaHQ= IHdlYXBvbnM= TG9jYWxl 0ZbQvdC00LU= X2FwaQ== 6ZSA INGD0YHRgtCw0L3QvtCy IG1pZW50cmFz IExlc3M= 4Kq+4KqI dW1pbnVt IMWhdG8= INC/0LvQsNC9 15vXnw== IGJ1ZW4= IFByb2JsZW0= INCy0YHQtdCz0L4= 4LSe4LWN4LSe LWZvcg== ZmZpYw== IFlh dXBwZXI= YWlsdXJl w6JjZQ== IEpvc2VwaA== Lg0KDQo= IEphbQ== 1avVuw== IGFrdQ== 6aQ= c3RlcmRhbQ== IGt1bnll IEFnZW5jeQ== 4LC+4LCu VHlwb2dyYXBoeQ== IGNscw== IGJvcw== IHBlcnNvb24= VW5h ZXJ0YXM= CSAgICAgICAgICAg 5ZCN54Sh44GX44GV44KT RVY= ZW5kYXM= TWVtYmVycw== IM6U IEJpbGQ= 4pah4pah dWHDp8Ojbw== zrHPgw== 4LCt IGFkZGl0aW9uYWxseQ== IHNwZWFrZXI= IGtlaW4= aWdlcw== 4Kq+4Kqz IGNhYmlu cHJlZml4 X2Rlc2NyaXB0aW9u IGhleA== IGpldA== LGQ= IHN3aW1taW5n MjI3 IGFsb25nc2lkZQ== IGNvZA== IHNlcnZlcnM= b2dyYXBoZXI= IERlYWQ= aW5jbHVkaW5n IGRlZmVjdA== YW1pYw== L2RhdGE= IGNvbnN0aXR1 IGbDrXM= X29wZW4= KXsKCg== IFJz IGZhbGxpbmc= 0LTQsNC5 YGA= IEVzcGHDsWE= 5Lu9 w61jaA== INin2YTYp9iz2Ko= INWh1bzVodW7 IGNvbmZyb250 IGt1ZA== Y29udHJhY3Q= RGVsYXk= 64Kc fSIK IFRvdWNo IGludml0ZQ== IPCfmYI= IEZvcm1hdA== 4KSC4KSa Xl4= 6I63 IHN0cmFuZ2U= 5ZWG5ZOB INCz0L7QstC+0YA= V2VkbmVzZGF5 TW9uZXk= IG9zcw== MzE1 INiv2YjZhA== IG9yYW5nZQ== IGZpbQ== INC60YPRgA== IG5lcw== ZW1wbGF0ZXM= 15zXpw== dHRlcw== Z2VuZA== IGhlcnI= IEhhdmluZw== IHN1cnByaXNpbmc= CXU= 4Li54LmJ xJ0= IGhhc3Q= VGVjaA== IGJlbGlldmVz IGNvbXBvcnQ= IHR1bGU= 4LiE4Lin4Liy4Lih UHJldmlldw== w6hsZQ== ICQoIi4= 4KaZ4KeN4KaX INC/0LDQtA== IEtpcg== IEJhZw== Y29tcGxldGU= 4bqtcA== X3JlcGxhY2U= CQkJCQkK CWxpc3Q= RXN0ZQ== IHZlcnNjaGllZA== IHNpbXBsZXM= LWlk IHpvZWs= IHRyYW5zZm9ybWF0aW9u IGludml0ZWQ= IHByb3BvcnQ= W1s= YW5zYQ== MjQ4 77yU MzI1 UExJRUQ= TGVhdmU= Zm9ubw== 2YTYp9it IHN0dXA= eGltYQ== 2LnZitip Y29tbWl0 IGTDoQ== LkNsaWNr VmFsaWRhdGU= 54af IHVuZw== IOCkruCliw== 0LXRgdGC0Lg= 4Ka+4KaT RW5jb2Rlcg== Um90YXRpb24= IE5GTA== ZmVhdHVyZQ== IERBTQ== IEp1c3RpY2U= 1oDVpA== cmFkaW8= IHNhbHVk dXNpYQ== ZW1wbG95ZWU= MjM2 INqp2LQ= ZXdlcg== INC40L3RhNC+0YDQvNCw IHBhcGVs INmK2YI= INmD2Kg= KCkpOw== Y29udmVydA== IHN0dWI= IERK 2KzYrw== KgoK 4LC+4LCy4LGB IGVudGl0aWVz IGNhdXQ= MzIx IO+8iA== 2YjYrNmI2K8= IOGDm+GDkOGDkg== Y29ubmVjdGVk 2YjYtQ== LWxv LSw= IEJ1Y2g= IOGDrw== 0YPRgNGD IHBlcnNvbm5l IE5FVw== YWhvbWE= IGRpc2FwcGU= IGxha2U= dW5ndQ== IOCwpOCxhuCwsg== 4YOa4YOU4YOR KyspDQo= IG1lam9yZXM= 0L7Rh9C90L4= IGdsZWljaA== IE1lbW9yeQ== IGxpdGVyYWxseQ== IHVudXM= IE1lYW4= IGV4ZW1wbGU= IHBhY2U= IG9yYW5n IEthbQ== IMSM IGRlbW8= IEhpdA== 0LjQtdC8 IOemjw== 7Ls= cGxhaW4= LmNoaWxkcmVu KGV4cGVjdGVk Z2V2ZW4= Zm91bmQ= Jz0+JA== X18K X2NtZA== 0Y3QtA== Z2V2 MjUz 5ZCm IGNvbmNsdXNpb24= KE1hdGg= 6bI= IG1pZXV4 zr/OuQ== IHVudw== NDMw IG5laXRoZXI= IFNwYWlu aWVzZQ== IEpld2lzaA== IHRleHRv dHJhY3Rpb25z aGFk IGV2ZW50bw== LkFi IHpla2Vy X2xhc3Q= IGx1eg== 2LfZig== 7ZiV INGC0q/RgA== Y29tZm9ydA== IGRsYQ== TE9CQUw= IFRIUkVF IHBhc3NhZ2U= dXRlZA== IOuwnA== a2lt SWxsdW1pbmF0ZQ== IGF2ZXI= X1NldA== IGZlY2hh YXNoZXM= U3BsaXQ= MjYy IHZpZXdpbmc= 4KWM4KSw IGllZGVyZQ== INin2K7Yqg== IGNyZWY= CQkJIA== IGN1cnNv IGVuc3VyaW5n IOusuA== YXJjaHk= Y29udHJl IHBhaQ== 0L7RgtCw MjQ5 IFJlc3RhdXJhbnQ= 4YOV4YOU4YM= RW5kcG9pbnQ= IGVudGh1c2k= IM6/zrk= LmxvYw== Q2VudA== IGRldXRz ZmFu 0L7Qs9Cw IOCkl+CkiA== 4KWI4KSo IGJhc3M= UGh5cw== IHN0eQ== INm+2KfaqQ== IHNvdXQ= dcW+ IFBzeWNo V29ya2Vy IHN0dWRpZWQ= 0LXQt9C40LQ= IEtpZHM= IGV2b2x1dGlvbg== IGFxdcOt INii2b4= 15XXqNeU Rlg= IEFsdA== dmlzaW9ucw== 5Yag Qk9PTA== IG1lc3Q= IHRyYW5xdQ== IG1lZXRz w59lcg== IHZlY2Vz IEludmFsaWQ= IGJvcmQ= IGZlbWlu IHBvcnRl 4LS+4LSC IEhhcnI= IGVucXU= IOC0rQ== IHNlaW5lcg== ZXJnZW4= IGNhcHM= IO2B 4LKo4LON c2VyaWVz LS0tLS0tLS0tLQ== heivuw== IFJFRw== 5a6Y5pa5572R56uZ LmNvbHVtbg== 4KeH4Kab4KeH4Kao IERheXM= dXBpdGVy 6K6u IEluZm9ybQ== KHN0YXR1cw== IGJ1bGw= 4LS/4LS4 IEVzdGE= b2ZmZWU= QVRVUkU= INCx0LjQu9OZ0L0= 6aaW6aG1 X1RFU1Q= IGtleXdvcmQ= IOC0kuC0sOC1gQ== IM61zr0= LlN0 b3RpdmU= Y2lvbmVz INC60LI= IGZvdG9ncmFm IGluY2VudA== YWxsb3dlZW4= IHByZWZlcmVuY2Vz 5paH56ug IHdyaXRlcw== dGVyc2No IHJldmVhbA== IHBvc2libGU= IG5pY2s= cml0YWJsZQ== IHZlcmRhZGU= IHdpcms= eW50aA== INC+0YHRgg== IGlvbg== IOCmpeCmvuCmlQ== IFdpa2lwZWRpYQ== LyQ= IG1lYXN1cmVk ZWJlbg== IGNyeXB0bw== IGJyYXNpbGU= X3dvcms= IFJhcA== X3NlcnZpY2U= T1NT IHJvYnVzdA== INCd0LU= 15PXmded IHJhcGlkbHk= IFdlbGNvbWU= IEhS IE1vZGU= IHdyYXBwZXI= IOGDkOGDoOGDmOGDoQ== Q2xpcA== IG93 IHRyYXNo IOC0qw== 7Lg= VUlM IFZpZXdz IG1haW50YWluaW5n IOCmnOCmqOCnjeCmrw== INee15c= IEx1eA== IGhhY2lh IGxhbmRz 0rHQuw== RXhlY3V0ZQ== dmVo IF8u aWV0ZXQ= IM68zq0= 5aSn5bCP 4LGB4LCw 5bC8 2KfbjNiv LmF0dHI= cmlr INC40YA= IE5vcnRoZXJu IG3DunNpY2E= IFB5dGhvbg== IFN0YWQ= IEFuYWx5c2lz 2KjYpw== z4POtc65z4I= Jyk6Cg== b2xpbmU= 4paI PXso XHI= IGFhbmdl ZXhpb24= 4Li04LiH IG1lZGljYXRpb24= INCY0L0= QWxwaGE= IGNydQ== IOW3 IHRhbGU= IHBhY2tlZA== I2E= IHJpc2luZw== 65Og wrBD 0YbQuNCw0Ls= 2LHZiNi5 IM61zro= IGtyaWpnZW4= OmV2ZW50 INGE0LDQug== IGtyYQ== 0L7QttC1 15XXqteo Y3JlYXRpb24= NTEw 2YjYp9mC 6Js= ZmljYQ== IOCkpuClh+Cktg== IGFxdWVzdA== 0YbQtdC9 IElOVE8= IENhdGhvbGlj cG9zdHM= INmF2K7YqtmE2YE= IOC0heC0tQ== INC80YPQtg== bGlua3M= KTsKCi8v UEQ= IG1lZGk= IGhvbGlkYXlz O30K IHZyYWFn 15fXqg== IG3DoA== IE1vbQ== Q29tcGFy YW5kZWw= dXN0cmk= LmdudQ== IGRlc3RhYw== 5LyK5Lq6 SG8= IGtvag== 4LiZ4Lix4LiZ LlNlbGVjdGVk cG9uc2l2ZQ== LlZlY3Rvcg== IG95 dXNr 4Kij IHJlaw== INGN0LvQtdC60YI= emxpY2g= IG3Dow== cmVzc28= IHByb3BhZw== IGNlcnRpZmljYXRpb24= IHZlbnVl CW91dA== IFJlZ2lvbmFs IGlobg== c3Vy 5omL5py654mI IGdld29vbg== VGlwbw== KHR5cGVvZg== 6LCx 15nXoNeS IG1lcmVseQ== 0LXRgNCy aXhpbg== IG1pbGxvbmVz IGhpbnQ= INGF0YPQtA== Z3Vl IFN1aXRl IENvbnNpZGVy YWN1bGFy UmV2aWV3cw== 15vXqg== IEVzdGFkb3M= IHZyYWltZW50 R2VuZXJpYw== IFF1ZXN0aW9ucw== IGFsbGVnZWQ= IEhvbHk= IHhz IG5qw6s= IHBsZWFzYW50 INC60LDQuw== IGphcmVu 2YLbjA== LG0= X3JlY29yZA== IGludHJvZHVjZQ== RklO 6K+E6K66 IGtvZA== INGD0YI= 6K6w5b2V IHBhcnRpY2lwYXRpb24= IGJvbGU= xLHEnw== IC0+Cg== b3B0cw== RU5D 0q/Qtw== IHlhcmRz o+GDmuGDmA== IGFnZW5kYQ== 546p5rOV LnJlc29sdmU= IGxpdnJl MDYw IGxvdmluZw== IGZvY3VzZXM= IGhhcnQ= LWRvd24= 4YOQ4YOR LnRva2Vu IFJlc3VsdHM= IHNlYg== Mjg4 ZGF0YWJhc2U= YXdp IHVuZGVyc3Rvb2Q= YWJj X2Rlc2M= RVJP J2I= INeQ1rg= IGdyYWFn TGlua3M= X0NIRUNL emQ= IC0tLQ== 4LOB4LKm TW91bnQ= 2KrZhdin IHN1cHBsaWVk IGNhdXNh IHBhcmFsbGVs LWluZA== ICovCgov 4Lij4Lix4Lia IFBhcnNl IOCkuOCksOCkleCkvuCksA== IFZpZXRuYW0= IHRyYXRh b25lZA== IHBpcg== IHRpZWQ= RHU= T1JERVI= YnVyeQ== 16DXqg== dGFudA== YXR0YWNo IFJhbmdl bGlxdWU= IG9mdA== YXJ0ZXJz 24zYsw== 5Yid a21lbg== TWFz 6L6R IGVycmU= bmV0d29yaw== ICcnJwo= IGhlYWxpbmc= ZW50cmllcw== IGFidW5k d2VuaQ== YXJtYQ== IFdpcw== X2NhdGVnb3J5 IGF0dGVuZGVk YnVtcw== IGNvbnRyaWJ1dGlvbg== IG1hcmk= IGRlbWFuZGU= w6dhcg== QENvbXBvbmVudA== IG51ZXN0cm9z MjM3 L1Q= 2YbYuQ== X2hlbHBlcg== IHRhcmRl IHsuLi4= IOCkquCkueCksuClhw== dmFuaWE= VXRpbGl0eQ== YXZhdA== IGRlc2NyaWJlcw== IHsvKg== 4Z6+ KGJ1ZmZlcg== b3lh X2RlZg== UHV0 2YbYrA== INC40LA= IGhpbA== IGRlZWw= IOCyqOCzgA== INC00LXQsg== 0LXRgNGC w610dWxv 2K7Zhw== 4LSO IFNvbmc= IHJlc3Rl w7h5 RHVyaW5n IHJlZ2Vs IHZlc3M= LmNsb3Vk IHNlcQ== LGE= X0RFQlVH IHR3ZWV0 IOCuquCviw== aWVtYnJl 4KWN4KSf4KWN4KSw aWV0aWVz 15HXnw== eXJpY3M= 4KuN4Kql IEtvbA== X2FyZw== T2Nj IGJyb2tl INGB0LLRj9C3 IHRob3VzYW5k IGNoZXN0 TmFtZWQ= IGFjY29yZGFuY2U= X0ZMQUc= IOmrmA== Qm9va3M= 4LCf4LGN4LCf seC1jeC0sQ== INeR15c= IG1pbnQ= bMmZcg== LmRpdg== LmV4cA== IG1laW5l IG91Z2h0 V2F0 c3Rp IEpvYnM= 5byg b3JyZQ== 5LmJ UkVRVUVTVA== dXB0 INGB0LXQsdGP IHVuc2VyZXI= IGVmaWM= 5LiA57qn VW5pcXVl INC60LDQvQ== dGVybWlu wrsKCg== aWFtbw== Y2Ru aWVycmU= c3RyZQ== 0LzQuNC90Lg= UmVkdWNlcg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jm5ic3A= IHByaWRl IGluZGljYXRlZA== dXBwbGllcg== cGFyYW1ldGVy dXRhcg== IGZyZXF1ZW50 2KbZig== VGltZXN0YW1w dWVzdG8= ZWl0 IHByb2R1Y3Rv INC30LDRgA== IGpvcm4= 5YOP IG5pbQ== IGJpbGxz 0LjQtNOZ aG9t IGxvdQ== 6K6p IGfDpQ== JGRhdGE= 5YGc 4LK+4LK4 LkVycm9yZg== IHdlYXBvbg== X0JBU0U= IEVuYw== IGluZmVy IGRlbGVn IOCkquCkqOCkvw== c21hcnR5 IGNldXg= IOiA IGTJmQ== IENPUFk= IFBp Y2hlbQ== IHhp L2Vu IG1haW50YWluZWQ= IG1lcmNo IFBheW1lbnQ= IHJlc2VydmU= LmNlbnRlcg== 57Si 4KSs4KSw OTUw ZW5jaWw= Ii4K 4Kic CVI= IHBvcnRhbA== IEJlbGc= IG5haA== U21hbGw= LC4= IEJvcw== 5pu05paw IGluc2lnaHRz RGVsdGE= UHVibGlzaGVk Y29sdW1ucw== IOGDoOGDneGDkg== IGVrYQ== QWN0dWFs INC80L3QvtCz IHPDqWN1cg== IGRyaW5rcw== RXhpc3Q= IExJQ0VOU0U= 4LSj4LSC IEpvaA== QFRlc3Q= IEtlcg== aHRl TWFs YXRlcmFs 4Kew4KeB cng= 4oCZCgo= INWh1bXVvQ== V0E= V1Q= aGVscGVycw== IHBsYXQ= Tm9tYnJl Ym9ybg== IFdF Rm90bw== INC/0L7Qu9GM0Lc= IGFyYw== IE9jYw== LEM= 4LWB4LSq 5pil LHQ= aWRlbA== IHN0cm9uZ2Vy IGJyb24= 6Ks= KGxhYmVs IGthbnQ= IMON IGZyYXVk INGD0YA= aXJ0aGRheQ== IGRpZXNlbg== IOCwmuCxh+CwuA== b3VzZXM= Lm5v aGV0aGVy 2LrZitix anVt X3Ns b25kbw== eXo= KGRpcw== dGFnb24= IGNhbG0= 0LjQvdCz ICIiKTsK IO2GtQ== INin2YTYo9mI2YQ= LWluZm8= b3Nlcg== IHRyYXZlcnM= IHJlcHJlc2VudGF0aXZl 2YfYqA== IHRyYWRlbQ== bGV0YQ== IFBF IHBlc28= IGRlY2ltYWw= MzA4 X2J0bg== IHThu6s= 5aOw YXRvZXM= IHNwYQ== IGNvbXB1dGVycw== bG9va2luZw== IG9wcw== cHJlc3NlZA== MjM5 INmG2YI= IFFVRQ== Z3Vh X29uZQ== cGQ= IGF3YXJkZWQ= IExlZnQ= IEZsYXNo IEVWRU5U L2lu 2K3Zgg== 0YXQvtC00LjRgg== LnNjZW5l IOaxn+iLj+W/qw== 0J3QsA== U29jaWFs SGV4 IGJhbnlhaw== IOuF 0Y3RjdGA IEtlbnQ= IGZq INiq2LM= 5p6Q IG5ldXRyYWw= 7J6F64uI64uk IGNvZ24= IHB4 IG1lY2hhbmlzbQ== IGNoZWY= 6LGh bGludA== IGhhcmRlcg== 4LKC4LKs IEVtYg== IGZvZw== IM6tzr3OsQ== ZHo= bGVjdGlvbnM= IHByZWY= aXRleg== IHp1c2FtbWVu IHNwZWNpZnk= IikpOw0K QW5kcm9pZA== IFNvbHV0aW9ucw== VEhF IHJldGlyZW1lbnQ= KDos IOCykg== IG11bmljaXBhbA== aW5pxYg= Y3Rs TVI= IHN5bnRo aGVhcnQ= aWxsaW9u VEw= IGFydGlmaWNpYWw= 4KuN4Kqq 6bo= 0LDQt9Cw0ps= RWlu 4YOQ4YOT4YOS dXR5 6KeB IFdhbnQ= X2l0ZXI= IOC0quC1iw== X2NhY2hl IFBlcmZlY3Q= IHdw X09GRg== IGNsaW1i aW5oZXJpdA== IGVyaA== SHVi Z2dyZWc= IG5pdA== IG5ld3NsZXR0ZXI= 2qnYsQ== LWRy IHPDpA== IGN1cnM= aXNlbWVudA== 4KeH4Kef aW5kyZk= IOGDl+GDpQ== aWJlcm5hdGU= IE1pbm4= IGhvb2Y= IEJhc2Vk cGlzb2Rl IG51bWVybw== IFNhbnM= 4LCV4LGN4LCV IOay IEJlbGw= IHRlcw== TE9BRA== LmV4aXQ= IEF1Y2g= X0FUVFI= IHdhbnRpbmc= dW5nZXI= IE1vbA== IGtub2Nr b21icmVz INCx0L7Qu9GM0YjQtQ== 2ow= IFVTRVI= IHNrcg== RGlmZg== 5b2x6Z+z RGFu R3JlZW4= L0Y= INmF2KvZhA== IHZvbHVudA== dWx0dXJh IFRz b3dlbA== YW5zdA== V2ly IEVycg== T1VORA== IGJlbmVmaWNpYWw= 4K6y4K+I YWNoZA== ZGV0YWlscw== IHNjZW5lcw== XS0= X0FERA== IFN1bA== IE5BUw== 4KSa4KWN4KSa IG1y 5YI= ZXBvY2g= IEF2ZW51ZQ== w6t0 5b2p56Wo5aix5LmQ X3RyZWU= IGRlYmVy L1A= X2xl IHNtb2tl 0YPRjtGC wr0= IEV4YW0= 4YOY4YOT4YOQ4YOc IC0KCg== ZW1vbnk= RGVjbA== Llh0cmE= b3V3ZW4= IOC5gOC4hOC4o+C4lOC4tOC4lQ== KCIt 4YOd4YOX IGpha28= IFBlcmZvcm1hbmNl IGluZQ== IERpYW0= aGVhc3Q= IHBsYQ== R3JhcGhpY3M= bGlv IGxq IGJlZ3I= INGJ0L4= IHBhcmNl 0L7Ssw== YWJhbA== IGxlbnM= IGZsaWdodHM= IE1JTg== emVpY2g= IGF3YXJkcw== IGJlZHM= IGdyYXBoaWM= IHN0ZWxsZW4= IG1hdHVyZQ== ZW5zY2hhZnQ= ZXNlbg== 44O844Or X0RJUw== 4LSr 0LfRi9Cy0LA= 0LHQtQ== dWl0ZW4= IHBob3RvZ3JhcGh5 X3Rhc2s= INGB0LrQsNC3 LmZpZWxk IGdo LnN2Zw== IGdhdGU= IE11Y2g= INqp2KfZhg== IGVza29ydGU= c3RlcHM= 5Lul5LiK Lk5v IHBocmFzZQ== INCy0YHQtdGF IFLDqQ== TGlmZQ== IG5hdQ== dWVi 6LyJ IHBhw61zZXM= YWxj 6rKw IHNwaXI= L2ltZw== 4YC+ IGVpbm1hbA== IGThu6U= IG5lc3Q= bGlhbWVudA== 4K6+4K6z IHBvdXZvaXI= 0LXQvdC90YvQtQ== IGFyb20= YW5rZW4= YXJ1 IOunkA== IHN0cm9uZ2x5 IEdpdmU= 4LCa4LGN4LCa IEJvdA== IHNjb3JlZA== INij2YbZhw== INqp2LHZhtuS IFZpcnR1YWw= LWNvbA== cm9j IEhhcHB5 INeQ16g= YXRlZnVs YXZn 2KfYtdip aW5hdGluZw== 5q2i IG1pZGQ= bm90YXRpb25z YXJnYXI= YXVmZg== aGg= INGB0YLQvtGA IGVnZ3M= X01JTg== fn5+fn5+fn4= cHJvb2Y= LnRhc2s= IHRpc3N1ZQ== IGFydGU= IOuvuA== c2VuZGVy 4YOj4YOX bWFya2V0 SU5TRVJU dWxzZQ== amFr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IGRlbWFuZHM= YXlp LCg= c3Zn aXJjdWxhcg== IGFtZW5pdGllcw== IETDqQ== YXplcg== IFNlbmF0ZQ== IHPDqXI= INin2YTYs9mK cHJlcw== YXR0cmlidXRlcw== IHVuaXZlcnNpdGllcw== IGplZGVu IEhhYg== MzEx IOCmruCmvuCmqA== IG9maWNpYWw= IHNpbXVsdA== IHNoYXJw CUo= IHVubG9jaw== IFdoYXRz 16nXqg== IHR5cGVuYW1l YXRpYWw= X1o= IGN1aWQ= ZW5lcnM= Li4uLi4u IGxhaGtv U3VwcHJlc3M= ICI6 INiz2Yg= X2VuY29kZQ== c3RvZmY= IHBlbmQ= TW9uaXRvcg== IGZydWl0cw== LkxvYWQ= YW15 IFZpdA== 4YCV4YCr 0L7RgdGD0LQ= IGFlcg== IFRyYW5zZm9ybQ== IGRlcHJlc3Npb24= IHNpY2hlcg== IGVsa2U= IHBm LnBy LkF1dG93aXJlZA== 7Jq4 a2Vt IEhvdGVscw== UGljdHVyZQ== IGFtaWdvcw== Y2jDqQ== IHBlcXU= LWNp IO2D IHByZWNpc2lvbg== 4LCC4LCm4LC/ IENTUw== yZlyaQ== IHNlbHY= INmI2YXZhg== L3N0 bGVnYQ== IHRocm93bg== CXN0cmluZw== IGF0dGl0dWRl b3V2cg== IFNlY3JldGFyeQ== 5Y+356CB X1dS 6IGM KE5VTEw= 2KfZig== V29yZHM= IM6xzr3OsQ== LmJsb2Nr KCkpDQo= IGVzdGFtb3M= IGVudHJhbmNl a2lw IHJlcHJlc2VudGVk KGNvbG9y SGE= IOCwtg== RXh0ZW5zaW9ucw== 0ZbQuQ== Lyg= IFByZW1pdW0= aWZmZXJlbnQ= IHJhdGVk INGD0YHQu9C+0LI= IGdpdA== IGNudA== 2KfYqNip LnN1Y2Nlc3M= eXl5eQ== IGtvbWI= Y2Npb25lcw== IGxlZ2lzbGF0aW9u cmFpcw== IGxleQ== Lmxl 0LjRgtGL IG11Y2hhcw== Vmlld3M= IHNlcnZpY2lvcw== 44OK IENoZW0= IHNjaWVudGlzdHM= 4Kag INCg0L7RgdGB0LjQuA== IFRyYXY= X3N0ZXA= 4LKy4LOB IGdvdHRlbg== Rm9vZA== cG9uc2Vz IOyLpA== z4HOuc+D ICJfXw== 16LXng== MDE1 IOCyruCzgQ== IGJpbGQ= IG1hcnM= 4YOv 0YHQu9C10LQ= IOCkl+CksA== IFdvcmtz 0YPQsw== aW50ZWdlcg== 5b6M IGlkcw== 57uc IHN0dWR5aW5n IENldHRl Rm9yY2U= YXNoZWQ= JyI= QWRkZWQ= IFJvbWU= INC60YDQsNGB IG1lbmphZGk= IGdvc3Q= 5aSn6aaZ6JWJ IEFkdmVudA== MzI3 X1JFUVVFU1Q= 4Z6a4Z4= IG5lZ29j IHNjaGVk IHdldGVu 2YTZitmF 2LLZhA== IGLDqQ== IFByb2dyZXNz IHN0YXA= dWxpbg== 4Ka/4Kak4KeH YXBldXQ= IFBhcnRuZXI= LkFuY2hvcg== aXRhdGl2ZQ== QW5u INij2YPYq9ix 2YjYqQ== bmluZ2Vu IOCkheCktQ== IOaw X2l0ZW1z IC0K 1oTVqw== MzE2 ZWN0b3Jz INGG0LXQuw== IGxhaWQ= ZMSxcg== 4LWH4LS2 IHR1ZGk= IGFjaGU= IFN0dWRpZXM= IG11bQ== IHRlbGVwaG9uZQ== 4LGB4LCX IHNlZXM= IOuPhA== YXR0ZW4= IGRhbWFnZWQ= Tm90ZXM= Xwo= IE1ldGE= 4KWH4KSk 77yM5Zyo 6Kqq IFlPVVI= IGplbg== IHRhcGU= INC/0L7QvQ== 16LXoQ== 6LSm INC00L7RgA== bGlqa2U= IGZvcm1l YWtzZQ== KFU= z4HPjg== LkNvbnRlbnQ= IHF1ZXN0bw== aWxkZQ== IGt1Zw== IGVuc2U= IHBlYw== IExJTUlURUQ= IOCwuOCwguCw CW15 IOCkkQ== LgovLwovLw== INC30LDRj9Cy cGFyYXRpb24= IG1peHR1cmU= UmVjZWl2ZXI= RG9t eGljbw== IOCkuOCkleCkpOClhw== c2hpZnQ= IOCkteCksOCljeCktw== Oi4= QXZlcmFnZQ== aXZpYQ== U2FtZQ== 55uI IE1JVA== ZGVw Mzkw INGA0LXQt9GD0LvRjNGC YW1pcw== INiq2r7Ypw== IOae UmF0aW8= IHBpYW5v IGNvbGxlZ2Vz IHBlcsOt X1BPUlQ= IEZpbmFuY2U= IHByb21pbg== VmU= IGdlZw== LWJhY2s= IHBvYw== YWRhbWVudGU= ICEK 0YbQuNC5 44GL44KJ cWFycG9x IHLhurk= IHRyYWlsZXI= IGxvbA== 5aSu IEVQ INW21aE= U3VuZGF5 INGC0LXQvw== Ins= X2NvbnN0 IGVhcm5pbmdz INmK2KrZhQ== IGluaGli IERvbA== w6VkZQ== X1s= IHt9LAo= Q2hvaWNl IGlobQ== Lm91dHB1dA== IE1haQ== IE5ldGZsaXg= IGNvbXBvc2l0aW9u IOyCrOyaqQ== 57qm IGV4cGVyaWVuY2lh IMSR4bq/bg== IHB1cmNoYXNlcw== IEZJTEU= IGJvYXJkcw== INmF2Kg= 7YI= LnNlY29uZA== X3RlbXA= 4LmA4LiB 4Liq4Lil4LmH4Lit4LiV IEtp ICkp KFJlcXVlc3Q= 4Liy4Liw c2Y= aG9r b3Zpbmc= b2Zh aWJ1 YXJyZW4= IHRlbXBsYXRlcw== RVJO Y3JlYXNl IGJsaXI= 2YbYr9mH IHN0b29k Y2FsbGJhY2s= IG1o aW5pdW0= 1aHVptW0 a3Y= CgoKCgo= dGFpbm1lbnQ= 5q61 IFdyaXRpbmc= IFBvcnR1Z2Fs IFNpbmdhcG9yZQ== IHZpdGE= IG51cnNpbmc= IFJldHI= IFhY 44CC4oCc 4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo IHNlbG9u 6KaL IEZvdG8= IHPhur0= 4LK44LON IGjhu40= IHByZXNjcmlwdGlvbg== LnNpZ24= 0LDRgtCw0YA= U2FmZQ== IGJlaGFsZg== Z2V0cw== ZXNhcg== Lm1lbnU= IFBvb2w= IOCmpuCnh+Cmlg== cmVsbA== INCy0LDQtg== IOCqruCqsw== dnVl IGRlbnNpdHk= 4KS+4KSu4KS+ LkNvbnRhaW5z IHJpYw== aW94 IE1pY2hlbA== 0L7QvdGD IMO0 ZW5leg== INee16Y= IHBldHM= c2VydmF0aW9u IGV1cm9wZQ== cOG7jQ== 16LXldeq 2K7YsdmJ IHBoZW5vbWVu IE94 4oCd55qE IikpOwoK 4YOQ4YOS Lk9wZW4= YXJ0bw== IGxveWFs w6F0aWNv IGFuYWx5cw== IOCkquCkvuCksA== IHNrYQ== PSIr 4LS+4LW8 0LjQvNCw a2V1bg== dXN0YQ== 0LrQuNC9 LmNu QURP dWxvdXM= IHNoaXJ0 IEVxdWlwbWVudA== IE5hdGl2ZQ== Zm10 4KS/4KS3 5ryr IFRFU1Q= ZWxhbmQ= IGN1cnZl IFNjaHc= aXR6ZXI= IG1vbmdvb3Nl aWxpYQ== cHRvbg== PXsi IMOA IGdlbm8= IGFtYmllbnRl YW1tYXI= IHRyaXBz YXJkaQ== dmFyaWFudA== ZW5peA== 5oKo TG9hZGVk cmVy KCkpCgo= ICos LlJvd3M= IGRldHRl IGNvbmZpcm1hdGlvbg== IGlocmVu IGN1aXNpbmU= IGNsdWJz ZmxhdGU= INGD0LM= QFJlcXVlc3Q= bmVnbw== IG1lYXN1cmVtZW50 IGplbnRlcg== IENoYXJhY3Rlcg== aWxleQ== QXBwbHk= IEFyaXpvbmE= IOCkruCliOCkgg== IHByZXBhcmluZw== KHo= IGdpYW50 bsO9 IEJlaW5n RVND 4KS/4KSV4KS+ dHRl IEZlbA== IHNhcmVuZw== 6rs= INKz0LDQvA== tow= IFByZW1pZXI= LmZl X0NPTkZJRw== 5pi+ a2tlbg== INC00L7QutGD0Lw= IGZvc3Q= IHRpY2s= ZXN0b25l IGthbWk= IOCkleCli+CkiA== PgoKCg== IEltbQ== IHZlcnI= 0L3QsNGC 5Lqr VW5z IGJlc29pbg== IE1vbm8= b3VjaGVy IHByb3llY3Rv MDUw 65GQ 5Y+k z4HOrQ== CUw= dWnDp8Ojbw== QXJndW1lbnRz IFJvdQ== w7zFnw== INqP IHN0ZWh0 IHNhdHU= IOCkmuCksg== INC20YvQuw== IFZB LnBsb3Q= QWRkaXRpb25hbA== aW5rcw== IGZhY3VsdHk= aWNpZGU= IHBhc3Nlcg== IGVtcGxl IGNvbmZvcnQ= cm9uZw== ZXNjYXBl b2NrZXk= Zm9pcw== IGFwYQ== X21hbmFnZXI= LnNsaWNl IHF1aXQ= 4YOQ4YOg4YOb X1dJRFRI IHBlbG9z IHRsYQ== IHBvd2Vycw== IOWwjw== 4LK+4LKc IE1hZ2F6aW5l IGxhcmdlbHk= IGF0dGVtcHRz IGNvbmNlbnRyYXRpb24= MzA3 IGhhY2s= 4Z6F IGVtcGxveWVk IGVuaGFuY2VtZW50 2ZM= IEhlbnJ5 YmFo IGJsaQ== IG9uY2xpY2s= IFRoZW1l IEluZGVw U2VudA== X2NvbW1hbmQ= 7LKY aWJv IHNraQ== IG1hZQ== LWhvdXI= c29ja2V0 IGNvbnZleQ== IGludGVuc2U= IGJlYW4= 4K6p4K+N4K6x4K+B Y29tcGFyZQ== IGJlbGxl 4KaV4Ka+4Kaw IGNw dmVybg== IGV2ZXJ5Ym9keQ== aXBwZXI= aWV0ZQ== bWV0aWM= 77yM5LiN IGNvbXBlbnNhdGlvbg== cmVhZGNydW1i IEpTT05PYmplY3Q= X01PRFVMRQ== IHRyYW5zcGFy INit2K8= IGN5Y2w= IOCkreCkj+CkleCliw== LmltZw== 2YjZhdin2Ko= IHRyYW5zcGFyZW50 c2Vx IOaXpQ== SG91c2U= Z3J1bmQ= 67Cw IGFtcA== INC80LXQvdC10L0= emlhbA== IHBsYXRh aXR1cw== IHN0cmlrZQ== T3JkZXJz 4KS14KS+ QWxsb2M= RmFjZWJvb2s= IGFjb3Jkbw== O2o= d2ly IFRvcm9udG8= KHJlZg== 0LvRi9Kb IERpZXNl YXZpbA== w6luw6k= 0LfRjw== MDEz fSk7 IGJvYg== dHJhbnNsYXRl 0L3QsNC0 a3Jl WFk= 5oiQ5Yqf IHN0YWJpbGl0eQ== cXVv REw= IExhbmc= b3BpYw== KGlzc2V0 bGVjdHJpYw== LiIpCg== IGRlcml2 2qnavg== IGZvY3VzaW5n Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 7L2U 0LDSm9OZ0LA= IGdhaW5lZA== T1VSQ0U= bmdh INmC2KfZhA== aWVydG8= dHBs ICghJA== X2luc3RhbmNl ZmVs aG0= IFNlYg== IENvcw== IHBhcmFncmFwaA== IHN0b20= 0L7QvNC10L0= IGtvbW11bg== IGNlbHVp 5bM= IE5vYg== JXM= INC90LjRhQ== bHA= INek15DXqA== IFVuZm9ydHVuYXRlbHk= 0L7QvdGC IGludGVncml0eQ== IGdlbnVpbmU= KGNvbQ== INeQ15nXmg== IOC0quC0sQ== IGxhbWJkYQ== LnNvdXJjZQ== PHRy V2F0ZXI= 4KSl4KS+ cXVvaQ== 77+977+977+977+9 4LS+4LSu INC/0YDQuNGH IHBlcmZvcm1hbmNlcw== LkFk X2VxdWFs SVRJT04= INmK2YjZhQ== eWRk IFRheWxvcg== IHByZXZpZXc= IE90 IGhvc3RlZA== IHRvb3Ro 566A IHRha28= IOCkmOCksA== IHJlY2VwdA== IHl1 IEVtZXI= IGtvbW1lbg== IGZha3Q= IHVuZGVybHlpbmc= IGxvdWQ= IEhlcm8= Q2hvb3Nl 44OA IGFww7Nz INCQ0Ls= c2hhcmU= IGluaGVy b2Ri bm9uYXRvbWlj IE5vdGlmaWNhdGlvbg== IHNlZWRz IFZpbGxhZ2U= J3k= IGFsZ3U= 4Kq44KuN4Kqk IGFpbXM= IGTDqXZlbG9wcA== 2LHbjNqp INeU15s= cm90YXRpb24= INCx0YvQu9Cw IHN0bw== QmVoYXZpb3Vy IGNsYXNzcm9vbQ== IHBlcmlvZHM= CQkJCQkJCQkJCQkJ IHBlcm1pdHRlZA== INit2qk= YWNlbWVudA== 0LPRjNGL INCy0L8= LnRvb2w= IGNvb3JkaW5hdGVz INC80L3QtQ== dcOnw6Nv RXhjZWw= IGFjcXVpcmVk Z3Vp bW9udA== IHJlc2lkZW50 IHBpenph ISw= IHByZWduYW5jeQ== IEFTU0VSVA== bGHFnw== IFN0cnVjdA== 4Kqo4KuB4KqC 16LXkw== ZmlndXJl IFBha2lzdGFu dWxsdQ== IHNhbGE= KioqKioqKioqKioqKioqKioqKioqKioq IHpk 4LCX4LC+ 4KWH4KSc IOC5gOC4p+C5h+C4mg== 1aHVtdWr 0LrRg9GA IOCuqOCunw== d2F0 IG1hbmdl INC60LXRgA== IGNlbnRy IGZyYW5j IGRlZmVuZA== b2xsYQ== U1c= IFdh Y2V1 X3NlcnZlcg== IOup 0LXRgNGL IE1ham9y Oi8= IExhcmdl IHBlbmRpbmc= 6KGo56S6 IGNvbnRpbnVvdXM= 0LjRiQ== IOCkheCkquCkqOClgA== IGRlcm5pZXI= LnZpc2l0 4Kq+4Kqo4Kq+ IE1pbmQ= 4LS/4LSy4LWN4LSy IGRpc2NvdW50cw== INGD0Lw= dGFncw== IOCkpuClgA== w6lr zrzOrA== 2YfZhA== IGljaQ== IOyehQ== RXh0ZXJuYWw= IOuPmQ== 4K6k4K+N4K6k4K6/4K6y4K+N c3RhdGlvbg== XX0= 2KfYptmK2Kk= aXphYmV0aA== IHJldmlld2Vk IG14 IGNvbnRyb3ZlcnM= w7ZmZg== bsOh b2xlcg== IGNvdXBvbg== IOCkleCksOClh+Ckgg== VHJhbnNwb3J0 64uY 7KeB IFJlbWVtYmVy IHNlcGVy IGludGVybmFjaW9uYWw= cGlwZQ== PXt7Cg== 15nXmda3 VGhhbg== R3VhcmQ= IGZseWluZw== IExldw== IFN0cmE= 15nXqdeY IG1pcnJvcg== ZG9jcw== 0L7QttC0 IGNhcmRp IEJ1bmRlcw== INWG IGhvcGVz IGZlZA== RGVwZW5k IGV4YW1pbmU= X2J5dGVz IGthbw== eWx2YW5pYQ== IEFrdA== 0LDUpQ== RXhwZWN0ZWQ= cHNvbg== 4KWL4KSC4KSo4KWH IGV4cGFuZGVk IGNvbmR1 INCi0L4= YW5lcw== IEFyYmVpdA== IFNW RXhwZWN0 IGVqZW1wbG8= PD4= LlRy SVNJQkxF Q2lyY2xl IHByb2R1dG9z IGZk IGRlbW9uc3RyYXRl U2Vs dmVyYWw= IGJ1eWVy INKv0Yc= YWNlbnQ= IOCqkw== IOyYiA== IGtpbQ== eWRuZXk= IEJ1cm4= IHN0b2Nrcw== IGludGVycHJl IGZlbW1l IGRyZWk= LnRyaW0= IG5vc2U= IAkJ VG9waWM= U2F0dXJkYXk= 4LmI4Lin cmV0dA== 6ZO2 LmludGVybmFs IHByw7N4aW1v Y3JpdGVy 0L7Qu9GM0Yg= IHRoZW1lcw== bGlnYQ== IGRpc2NyZQ== LlNlcnY= IHNlYXNvbnM= ICghKA== X1NUUklORw== 06nQvA== IHRhcmU= aW9uYQ== IHJvbWFudGlj L2s= 2YbYp9ih 4KuN4Kqw4KuA IGnFoQ== LW5hdGl2ZQ== IHBlcnNvbm4= IGludGVudGlvbg== IEdyZWc= 4KSq4KWN4KSw Y29tbWVuZA== IHBpbnQ= IGplZG9jaA== IGJhbmM= IE1hbmQ= IGVuZ2luZXM= IGhvcmU= QkY= 4YCA4YC5 w6lpcw== IGFhbmc= cnVz 4KS14KSo X2ZpZWxkcw== IHBldGl0ZQ== 4Kif IOC5hOC4oeC5iA== IEVudHJ5 IOC5gA== Z292 dmFyaWFibGVz IOyEuA== IHBvZw== RnVu INeV15E= MzU2 44Kn X3Nlc3Npb24= RG9lcw== IGFwcGxpZXM= IHByb2R1Y2Vz QXV0aG9yaXphdGlvbg== IHNvdXZlbnQ= TXVzaWM= Je+8jA== TG9va2luZw== X0FTU0VSVA== IExpdGVy 2KfYptuS 44Gt IElyYXE= YXR0ZXJ5 X0ZPUk0= 642Y IHNlZ8O6bg== IG9idGVu IO+/vQ== IGltbXVu IOCqueCri+Cq RFg= w6lybw== PSJf IE1vb24= 4Kq+4KqH X2xvYWQ= IGhhYmVy VGV4 4Ki8 IOGDo+GDnOGDk+GDkA== IGRlc3Blcg== IGNzdg== IEh1 sbw= 4LKX4LKz4LOB X1NIT1JU INiu2YjYpw== YWxpYXM= IFNoYXJlZA== OnNlbGY= YXRoYQ== aW5zb24= IEFDVA== IG5nZQ== enlt IElubm92 VGFza3M= IExhZHk= IHlhxZ8= IGVuZ2FnaW5n 4YOQ4YOg4YOT IGFjY291bnRpbmc= fX08Lw== LmVs 4KuN4Kqu IGNvdHRvbg== IHB1ZWRlcw== ZW5lcmF0aW9u IEZhbnQ= w6hy 6Z2S6Z2S TkVU IG5lbWVu IG7DpHI= VWk= VG9kbw== 4Z6a 1bjWgtaB b3JpZ2lu 5omN dWxhbg== dW50b3M= IGlocmVy MDE0 4LmD4LiZ bWl0dGluZw== zrnOus6u IF0pOwo= IEJsdWV0b290aA== INWh1bc= IGJlYg== IFRvaw== dGVzeQ== 5Lqn5ZOB ZW5zaW5n MjU3 IOGDm+GDrg== IGFpcmNyYWZ0 R3JhZA== IGhhdXQ= IHNob3VsZGVy aWdoYm9y IGFiaWxpdGllcw== IENpdA== IOCkhuCktQ== UmVjZWl2ZWQ= c2V5 LkNvcmU= 0LvQsNGI bW9iaWxl IGNlbWVudA== 4YGK IGxhdHRlcg== IEFnZW50 dmVydGljZXM= IEJyaWRnZQ== IHdlcmVu IGNmZw== IOCmquCnjeCmsOCmpA== YXLEsQ== IFsuLi5dCgo= Y2VlZHM= LkFsbA== uOi/kA== IGJyb3dzZQ== IEVpbnM= LlByaW50bG4= YW1pdA== IHPEhQ== INC90LXQug== IHZyYWdlbg== INeU15nXkA== 4La2 IGJ1Y2tldA== IEVpbmU= IHN1cnQ= IEp1YW4= IGRpdmlkZWQ= IGNvbXBhw7E= LmNvbW1vbnM= 0LDQuA== IEVudHJl IHNpZ25pbmc= 2LXYqQ== IGVib29r IGNvbnNjaW91cw== 0ZbQvdGW0qM= 6Z2g6LCx IEt1bmRlbg== IOe+jg== UkVFTg== bWV0cmlj IHNhYmU= IOyYgQ== ICdfXw== INC60LvQsNGB aWdk IGFycXU= L3NyYw== IFBhY2thZ2U= X01BU0s= CVJU IGRyaWU= IHNlZ3VyaWRhZA== IGNyaWFu IENN Q29uc3VtZXI= 4KWA4KSy 4KSV4KS+4KSw4KWA INmI2YM= IEFq IHRlbXBlcmF0dXJlcw== b3JwaA== QmlsbA== IGVsc2VpZg== IGp1ZWdv ZGlybmFtZQ== IGRpc3B1dA== IGxhZGllcw== RFVDVA== IFNhZmU= Zmx5 IEdyb3c= IENPREU= IEJD RmVl dGVyZQ== IOmT LWxh 4YOU4YOR4YOQ4YOh bWnFnw== U2Vu a2luZA== 0L7QvdC0 6rCV ICN7 MjU4 IFZpZGVvcw== LWhpZGRlbg== c3TDvHQ= IFRhaQ== IOCmquCnsA== QmFzZWQ= 56iO IGJlbHQ= 5Y2H IGhpZ2hsaWdodHM= IGJpYmxp 0LrQtdC9 IO+8jA== YW50aWU= aXRhaXJl IGZhaWxz bmFy ZGVzdA== LlNU IE9mZmljZXI= IEdlbGQ= INGH0LjRgQ== IFRpcHM= IHRyw6pz INGB0L7QvtCx0Yk= TmVn 2LHYp9is INCy0YvRgdC+0Lo= 4KSC4KSf PD8+ YXBpcw== OyI+ INC60LDQsQ== IGlp 2YjZhNmI 5rKZ IGRldGVjdGVk IGNvbnZlcnRlZA== IG1vxb4= IEdhbGxlcnk= IOCmj+CmleCmn+Cmvw== IGluc3RydWN0 IGdyYWNl IHJlY2w= U2VwYXJhdG9y 0L3QuNGG IH19Pgo= YXRpaw== IGJpdGNvaW4= IFZQTg== TWVhc3VyZQ== SUVS X2Vx IG9kZHM= LWlucHV0 Y3Vycg== RW50cmllcw== 0L7RgtCy0LXRgg== TlA= IHRlcnJpYmxl IFRoaW5ncw== 2KjbjA== INGB0Yo= IHVwYW5n IGRldGVjdGlvbg== ZGV0YWls YWlsYW5k ZGlu SW1w IGNvbXBsaW1lbnQ= IENQVQ== OyI+Cg== d2VhdGhlcg== IE9GRg== IFByaW0= IE93bg== IGF0ZQ== IGdsZQ== MjYx YWJsaW5n Q2xlYW4= IFByb3RlY3Rpb24= IG1hbm8= YXBvcw== 0LXQutGC0LjQsg== IE1hbmNoZXN0ZXI= 5Y+R5bGV 4Lil4Lit4LiH 4LC+4LCm IHRlcnNl 4KeD4Kak IENvcA== IGNvbnNlcXVlbmNlcw== IGV1cm9w 56aB IGFsbGVt IMWg X1NUQVJU IOCkteCkv+CklQ== IGZsb3Vy IGF0cmF2w6lz KGluZm8= 4YOQ4YOb4YOT IMOpdGE= LlVwZGF0ZQ== Y3JpYmVk INW/1aXVsg== 5LiW55WM V2l0aG91dA== Llo= aWxpYg== TkVS IHJhaA== c2FtcGxl ICl9Cg== LkVxdWFs LmNvbmN1cnJlbnQ= INC40Ls= IHBhcmFz INC+0LTQuNC9 LnNyYw== IGxvY2FsZQ== IGJldGVy IHZpbnRhZ2U= YWNqaQ== IGFuc3dlcmVk IGZpbGxpbmc= aWZpY2E= YmVsbA== 15nXqNeV16o= b3JyZW50 KC4= IHRhcmdldGVk YnVyZ2g= 06nTqQ== 5Zg= aWxsdQ== IEJyaXRhaW4= IHByZW9j IHdlaWdodHM= IHTDo28= IGt1bGxhbg== X3dpbmRvdw== IGlwcw== IGxlaQ== w6htZXM= aW1lbnRhbA== aXR1bmc= 4YOQ4YOV4YOh INC30LDQsw== IEJ1c2g= aXN0w6Q= 4Li04LmC bGF3 YW5uYW4= IERlc2lnbmVy 0YHRgtGA0L7QuQ== IHBhc3Nlbg== IG1vb24= IEFuZHJldw== aWdoZQ== dWlu IEhvdXN0b24= amVs IGN1cmw= IFNsb3Q= IElNUExJRUQ= IHJlZ2FyZHM= 0YHQutC40LU= IGZo IGZw IG3DrW4= aWd1bmc= IHsvLw== INC/0L7Qt9Cy0L7Quw== IFJlcHVibGljYW4= VklDRQ== 4KSq4KWA U2Fu IGdlYnJ1aWt0 aGVybw== dWxm 4LiX4Lij IFBhZA== 7KSA IOGDl+GDow== IE1hbGU= 15XXqNea IHNhbml0 IGJpcmRz IEhhdXM= 0YPQstCw IOS4nA== YW55xYg= 4LSk4LWN4LSk4LWN 0LTQsg== IG92ZXJ2aWV3 IENlbnRybw== UGFpbnQ= IGNvb3Blcg== 0YHRgtC+0L0= b29sZWFu KHRhYmxl KEAi YW50YWdl IOuNlA== INmK2YPZiNmG dXRhbg== SUVOVA== IHBpbG90 27k= IHNheWE= IGluZm9ybWHDp8O1ZXM= Jylb 6bG8 IGF0YQ== IHpkcmF2 IENyZWF0ZXM= IGFybXk= IGtsYXNz X2RldGFpbHM= QnJhbmQ= IGRpag== Q3VycmVuY3k= IFZlcmc= 4LmE4Lih4LmI aWZ1 IE1ldGFs zrzPjA== LlF1ZXJ5 IFdpbmQ= INCy0L7Quw== INGC0YDQsA== IG9x 6IOG IGRlbGl2ZXJpbmc= MjYz KHNyYw== IHJlbW92aW5n Rm4= IOGAgA== IGNvbnZlbnRpb25hbA== NzIx ZWxsZXJz 44GC44KK IGNpbmNv LXN1Y2Nlc3M= V0Q= 4KS+4KS54KWA IERvY3Rvcg== IHByb3ByaWV0 IHB1cHA= MzA5 zqU= YW5ub24= bm9tYnJl INiq2K3Yqg== IFBvc3RlZA== IHRvdXJuYW1lbnQ= X0dFVA== aWZpY2FjacOzbg== dXRhcw== 2LbYpw== Tm90aWZ5 IG1hcmM= bGljZW5zZQ== 0LvRg9Cx IMO+ZQ== INKz05nQsA== INGB0LDQvQ== eWVycw== Y2hhbmdlcw== X2FjY291bnQ= SUNU b3d5 2YbYp9mG IG1pc3Rha2U= X2ZldGNo IGRpc21pc3M= IGZ1dHVybw== IHZvbGdlbmRl Jyl7Cg== IGFwcGFyZW50bHk= LnByb2Nlc3M= 4KWL4KSw CXJl IOaIkA== MjU5 IGJ1c2Nh QXo= S2E= IEVTUA== Pz48Lw== IG92ZXJmbG93 IOGDoeGDkOGDmQ== IGV4dHJhb3Jk b3VuZGluZw== X1E= IEJCQw== IHRhbWE= IGhvY2g= Kys7DQo= NDYw IGZvbGxvd2Vycw== IG11amVyZXM= IHByb2pldG8= IOCksOCklg== 66aE IExlc3Nlcg== 57u0 4KSd IHdpY2h0aWc= IG7DpXI= 1aY= 4KeH4Kas IGdyb3M= Mjgx VVNF U0I= cmVnb24= 0LvQsNCz0LA= IGNob2l4 MzEz INCe0YI= IGZvcw== INiu2KjYsQ== IOuQmA== 5Lq65rCR INC+0YLQu9C40Yc= IGRlc2Fycm9sbG8= IFZldGVy 4Lir4Lil MDE2 IFByaW4= IE1lcw== IHB1ZA== IGVyZm9s IM+Fz4A= d2ln 4Kas4Ka+4Kaw INi02K7YtQ== INi52YU= IM61z4DOuQ== aXNoZXM= IEFydGljbGVz LndpdGg= IFRob3VnaA== IGxvc3Nlcw== 0L7QvdC1 IEdpcmw= bWFsbA== IGdvbm5h IGPDog== INCz0YDRg9C/ IGJhc2tldGJhbGw= ZW1hbGU= Mjg1 KTwv INC60LjRiA== IGtsZWlu IEdhcmQ= OTEx 4LSV4LSw INGB0LvRg9GH0LDQtQ== I3s= IGNhbmNlbGw= b2ludHM= ZWJvb2s= ZXZlbg== aWxkaQ== IGVtcGxveWVy YWdpbg== IEJvb2w= KGNvbnRlbnQ= IEtlbm4= 4KWN4KSs ZmFpdA== aW9yaXR5 aWRhbA== 4KS/4KSn IGN1ZXI= IE1veg== INix2YjYsg== ICs6Kw== eW55xYg= IFJ5YW4= Iik7Ci8v w7Zr bXlzcWw= Mjcz IHByb3RhZ29u 4LmD4LiK IOCkrOCkueClgeCkpA== IHVuaXZlcnNl IOCkieCkpA== TWk= 0LXRh9C10L3QuNC1 4Lix4LmJ4LiH IGltcHJvdmVtZW50cw== YDsK IHJlbGF0aW5n X0lT INeV15XXmQ== yZlt IG1pc21h IGludm9sdmU= IE1vcw== RGVsaXZlcnk= LndoaXRl IHNjaG5lbGw= IERhdGVu cmVxdWVuY3k= X2V4dA== IElsbGlub2lz IGNvbnRyYWN0cw== MzQz w73DpHI= UnVubmluZw== IHZpeg== IEdhYg== IE5ldmVy 0L3Qsw== LmZvbnQ= UnVsZXM= IGNoaWxkaG9vZA== U2lnbmF0dXJl NjY5 INC90L7QvA== bWVnYQ== 0LvQsNC5 VkFS 5oyC IGdsb2Jl XE1vZGVscw== 7KKF IGRpYWdub3Npcw== KG5leHQ= IElyb24= QWx0 5Lmg IGVzdGFiYQ== TGVzcw== IFBvbHk= LWRhdGE= IHRoaW5rcw== Ymls IGJpZXRldA== w6lyaWNh IFR1dA== IGVudMOjbw== 1a4= 0LTQsNC7 RElS IGvDvA== IEFuaW0= 4YOr IGplZGVy IGNsYXJv IHBlcnNwZWN0 CWFycmF5 IERBVEE= emFhbQ== IHdlaXJk 16fXmA== dWxr IGthbWE= IEVhc3Rlcm4= IExvb2tpbmc= w6h0ZQ== bWJsZQ== IG5i b2Ji X1VT IHN0aW11bA== Q0hBUg== 5Y+M6Imy KEs= INmI2YY= IHdoaWxzdA== ICIiIgoK IGRlbGVnYXRl IGRs 4LWB4LSw LlJlbW92ZQ== 0L7RgNGL IGNsb25l b25nZQ== 5L6/ IHNuZQ== dXNzaWFu INmI2YTZgw== IGFjYWI= 5p2/ INin2YHYutin2YY= 0LDRgNCw0YI= 5YiG6ZKf U3VyZmFjZQ== INqr IHBvcnRhYmxl 5aSc5aSc VW5l Ij0+ 8J+R cHVz YWxsZXM= ZW7DrQ== IHJlbWFpbmVk INC60YPQvw== IHBhcmFk ZW5hcmlv IGRvd250b3du X0JZ 4Kep IGdlcm5l IEJyb3dzZXI= IHBlbGU= IG3DtQ== bmlzc2U= 5Y2z 4Lih4Lix YWRkZWQ= IFRpcA== IENsYXNzaWM= IEFyZ3VtZW50 IHdpcmtsaWNo INiz2KfYqg== IG1pc20= 6YeO IEN1dA== 4LCw4LC/4LA= X2xheWVy 4b0= X2FkbWlu IGNhdHM= IGx1ZWdv dWx0dXI= b2xpY3k= PD4o 4KWH4KSu INWA1aHVtQ== IHp1bGxlbg== cGh5 IHBhc3Npb25hdGU= IHRyaWNr IEJvcg== LkludGVy w7x5 6riJ IGhhcmk= IHNtZWxs d2lyZQ== zrTOvw== IGt5 15LXqA== IOCkruCkvuCkqA== IEpPSU4= bWVsZA== 4Kam4KeN4Kan IHNpaw== UmVkaXJlY3Q= RW5nbGlzaA== IGhhbm4= IGVudHJhZGE= SWNvbnM= IFdpcmU= Q29va2ll 6ZSZ IGJpanZvb3JiZWVsZA== 1bE= 4buHdQ== YW1paw== UGljaw== OTE4 ICsjKw== IE5D IERlZXA= IOCkpOCksOCkuQ== w6RuZGVy dmFsdWF0ZQ== RXhlY3V0b3I= 6LSl bWs= UXVpY2s= IMOr IEZhY3Rvcnk= INeQ15nXoA== 4LmI4Liy4LiH IHZpY3RpbXM= INGB0L7Rgg== X01FU1NBR0U= ibQ= IOy2lA== 4LSj4LWN dWVsbA== INeQ15fXqA== z4TOsc69 6Zeu6aKY IGVtb3Rpb25z X2FjdGl2ZQ== xJt0 IEFwcGx5 ZGFz IHByaW50ZXI= IGRlc3Rl LW9uZQ== YXNoaQ== 6Laz55CD cmllcw== U3RyaW5ncw== 4YCA4YC6 c2VjdXJpdHk= IE1U 4LGI4LCo IHbDtWk= Lkl0ZW1z cm9sb2c= w6Fsbg== IGZpYmVy IHZpc2l0b3I= dW50aW5n IEZlZA== 15XXoNeV16o= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== YW5lb3Vz aW5kcmU= INGR bcSxxZ8= IOiP IGVsbG8= 4KmN IHdhbm5lZXI= LWtub3du IGhvc3Rz IOGDm+GDkOGDlw== IGRpdmVyc2l0eQ== IGFjcmVz IHNveQ== IGNvc2E= IG5ld3NwYXBlcg== X28= IGFjdGl2YXRpb24= IGNhc2k= cGVvcGxl IHpvbw== IHRlbnM= IGVjb27Ds20= YW5zaQ== MzE0 IGNvaW5z IGNocm9uaWM= IGRvZA== IEZhdGhlcg== cHJlcGFyZQ== IExhdGlu INmF2YjZgti5 Ym9hcmRz X2Rlcw== IEZN IOGDqeGDleGDlOGDnA== 5LiD IFVuaWRvcw== PXtg IG7Ds3M= IGNhdGFs 4YOd4YOg4YOq IEdlbA== Uk9X IGNvYWNoaW5n IHZpZXdlZA== IM6f IGNvdW50cw== IOCorA== INin2Yo= INCz0L7QtNGD UEFS w7Rt IEV2ZXJ5dGhpbmc= IGFycmVzdGVk IOC0kw== IGdvbGRlbg== INin2YTYr9mI2YQ= IHBsYWNlbWVudA== 4Kq+4Kqo4KuA 05nSuw== LlZpc2libGU= IGxvY2F0ZQ== IHZvbHRh Qml0cw== IEVzc2F5 cHl0aG9u IHdhdmVz 5ruh Lkluc3RhbmNl 4YOu4YOd4YOV 4KS/4KSm 4K6+4K61 IEFkdmFuY2Vk IHNhZmVseQ== IOClpQ== 5YaN IHNpbnQ= b3lv IHRlcnJh IHZvbGw= 0YDQtdGB IHNpZ25hbHM= IHBhbGFi IHJpZGluZw== 0LTRi9Kb IGluc3RhbnRseQ== IENvbXBsZXRl UHJpb3JpdHk= 0LTQtdGC X09G 0L7Rjg== IGludGVydmlld3M= IFRybw== Vm91cw== IG1lYXN1cmVtZW50cw== 0YvQsw== IGhvdWRlbg== 4LCy4LGN IOGDmeGDmA== IOCqruCrgQ== IG1heGlt dcWf 0LDRgNGD0YE= IHBvc3PDrXZlbA== IEZhY2U= cGVjdG9y IDopCgo= IE1peA== IOCuquCvhg== MjY2 IG11c2V1bQ== IHJlYWxtZW50ZQ== IGPDtHQ= YXlzaWE= IFN1cHJlbWU= 4oCZYWc= VmVyeQ== IHNvdWdodA== IGNyeXB0b2M= 0L7QstC+0Lk= cHJvdGVjdGVk 2LjZhQ== TFI= IHN1YnNlcXVlbnQ= Kwo= 2YbZitip V2FybmluZ3M= IGh1Zw== INWh1bXVpA== 2YHYp9i5 IHJhZGljYWw= CUg= IHBlbnNl 4YOT4YOU4YOS LmZpZWxkcw== IFJleQ== Li4uKQ== IGxhenk= 4KiG 4Kaw4Ka+ IENF Mjcy 0YHQsNC9 LmR0bw== 4LC+4LCc c3luYw== IG9vcg== IExpbmVhcg== cGxhc2g= Ki8NCg== INW91b8= c3lsdmFuaWE= w6lyZXI= 5q27 INiq2KM= IE9n 2KfYsdis aXJjdWl0 dmltZW50bw== ICAgCgo= 4Lit4Lii 4oCJ RXVybw== IHJlcGV0 W2lk PSci IGRpc3RyaWJ1dGU= IOiL IE1hZ2lj IHBlc3NvYQ== IGFuZHJl IG1ldHJpY3M= IEhpc3Rvcg== 0LXQs9C+0LQ= IHN1cmdl IEZyYW1l U3RydWN0dXJl LmNvbnRyb2w= 4oCL4oCL fXs= 5o6n d2FpdA== JC8= INeR15w= LkNvbg== IGZsaXA= IHN1YnNjcmliZQ== IOCkh+CkqA== IHNjcmF0Y2g= b3Bv w650cmU= IGluaXRpYXRpdmU= xINu 7JiI IGZ1bGZpbGw= X2Fzcw== IHbhu4E= IGZsZXhpYmlsaXR5 NDEx CWNsYXNz X2Ftb3VudA== Lnplcm9z YW5rZQ== IGNodQ== ICIo IHByb3Rv 15XXow== 4Lit4LiB IGNhbWVyYXM= IE5hcA== ZG90 INKv0LnQuw== 0rvRiw== IHNwcmF5 IGRlZXBlcg== CWlu 4KuL4Kqk IGNoYW1waW9u ID8+Cgo= LlNhdmU= SGlkZGVu IGFwdA== bGFpcw== INCe0L0= IHBhc3Nlcw== bWFpcw== IGtha28= IE1vdGhlcg== MzIz 2YTYqg== cGVrdA== IHNwZWxs 5rG9 a+G7jQ== 2YLZiQ== YW50bHk= 4Lar IEJo IGZhZGU= KGJvb2xlYW4= YWNldXQ= IGFzc2lzdGFudA== aW5naQ== QnVmZg== LyU= Z3VhcmQ= IGRpc3BsYXlz IOCwqw== 2KjZiA== dXJyZW5jZQ== w7p0 c3RlbGx1bmc= 0LjQt9C90Lg= dWRpdA== aWthbA== 0ZrQtQ== 0LvRj9C10YI= 0YrRgA== VVY= cGI= 5YWt5ZCI5b2p INC60L7Qu9C40Yc= INin2YTYqNmK IOGDm+GDmA== IMO6dA== 4LCw4LGL aGlyZQ== IGVzc2VudGlhbGx5 IGxlcg== IEl6 dXR0YQ== 0LjQvNC10YA= INmI2YfZiA== IE1pbGxpb24= IGVuZmVy IG5hdHV1cmxpams= emVybw== IGJvZWs= IFNwb3Q= 2LPYqtmH IEdQUw== 5r2u IGJhag== W3N0cmluZw== IGJlc3Rlbg== VEVHRVI= IOCkpuCljeCktQ== b3N0aWNz 4LSo4LSC IHN1YnN0cg== IGxvYWRz 44KN 1bjWgNWk 0Y3QuQ== IGV4YW1pbmF0aW9u IE9haw== Y2hhcnQ= Rm91bmRhdGlvbg== IFBP INmF2LfYrdmG2Kk= Q2Ft IGRpc2Zy IGJ1bGs= LmZldGNo IHRocmVhZHM= IEFG 0YvRhw== INmI2YI= X2xvY2Fs 4LC3 SUNBTA== YWRkbGU= TmFtZXNwYWNl aWN0dXJlcw== IOCqleCri+Cq PiIpOwo= IEZlYXR1cmU= cGxhY2Vz TGFuZA== b3VzdA== 4LGA4LC4 INio2LTZg9mE cnlwdG8= INC60LDRh9C1 IGRpdmlk Q2FyZHM= W20= IG1vZQ== 4LOH4LK2 IHVsdHJh INGB0YPQvA== 0ZHRgg== ZmlzaA== 4KSa4KWN4KSb 5bqP IGZhY2Vk ZXR0aQ== b2Z0 enph IGRpc2hlcw== 4KuN4Kq4 IEJlbmVm X3JldHVybg== 0LjQu9C+ 0LXQu9Cw LXNw IGFmZWN0 IOCkreCkvuCksOCkpA== IGVxdWFsbHk= 4YOY4YOS w6lhbA== INiv25A= dmlkbw== IGNvbnRyaWJ1dGlvbnM= Q29tcGxldGVk IGFyZ2M= INGA0LXQsQ== INmF2KQ= VGVjaG4= X3NlbGVjdA== 5ZG9 4buZaQ== 0LjQtdC5 IGbDtg== IFNlcHQ= T20= IGJhcmE= Y2Zn IHZlcmlmaWVk IE11bmljaXBhbA== IHF1aXo= cHBlbg== IMO6bHRpbWE= ZmZm IOCqhuCqteCrgA== LmVsZW1lbnQ= SW50ZWdy Q2h1bms= 64Sk LlBPU1Q= INGC0LXQug== c3RlbGxpbmc= dmllcg== IEdlc3Q= IGNsYXNzZQ== IFdvcmtpbmc= IHV0aWxpemluZw== 0L7RgtC4 IGzDpg== d29ya2luZw== LWFk IGxpYnJv INis2Kc= Nzg5 xaFr IHByb21v IGFtYmllbnQ= zrvOu86s 2LPZiQ== 4LmA4Lia 1aHVttWj RHluYW1pYw== X2ZpcnN0 IG1pc3Rha2Vz IOC4n+C4uOC4leC4muC4reC4pQ== 0YLQvtGA0LA= IGJvZw== IGRlc2lnbmVycw== IGFwcGV0 IElyaXNo IGRpZ24= INil2LDYpw== QURE IFdvaG4= IGRpc2N1c3Npb25z IFVudGVybmVobWVu IGV4cGVuc2U= LWdyYXk= IGNvcnBz TGl0ZXJhbA== IEJlYXV0aWZ1bA== am91cmQ= b21o UHJldmlvdXM= IHJhZw== IGV4ZW1wbG8= IM+Mz4TOuQ== IHJhYg== 4LWC4LSf IGtpbGxpbmc= UGF0aHM= IiIi IExvc3M= IG5leg== U2VyaWFsaXpl IGVuY291cmFnZWQ= IHN0YW1w emljaHQ= IGV2YWw= 5Y+M6Imy55CD cG9zaW5n IFBvcHVsYXI= TGVhcm4= IG5hdGlvbnM= IFBhcA== INin2LPYqtiu INin2YTYqti5 X2tleXM= IOu2hA== IGFsZA== LkNvbW1hbmQ= QU5Z IHBlcnNvbmFsaXplZA== IGV2aXRhcg== KCkpLAo= IHdoYXQncw== IHVsdHI= IGthbXA= 7ZmY IGNlcmU= IHNy 0po= 4LmA4Lir KGxvY2Fs KGVuZA== IGRlZXBseQ== 4LS/4LSf4LWN4LSf IHBpcGVsaW5l LWRlcw== aWNhbw== IEJ1ZmY= 4Kao4KeH4Kaw IEFtc3RlcmRhbQ== IHNwcmludGY= LmNsb25l INC80LDQug== cm9sZXM= IGJ1ZW5h 7ZWc64uk YXZsag== IHZpc2l0cw== SUNB YmF0Y2g= V00= IHByb2R1aXQ= IGNvbm5lY3Rpbmc= IGNvbGxlYWd1ZXM= 4Kqb IFBhc3Q= LnRoZQ== 15XXoNeZ150= 5LyB5Lia YW50YXI= IE5lYXI= INmG2KfZhQ== eHlnZW4= NjIw IG5ld2VzdA== b3JzY2g= 4KuL4Kqw KGl0 XV0K IHNoYXBlcw== NTQw X2hlYWQ= 4Kqn4KuA IGdlYnJ1aWtlbg== b2Nvbg== 66Oo IOC0oQ== aWZpcXVl ICgpCg== IGV4cGxvcmluZw== IEluZHVzdHJ5 Mjgy NTMw IFBlbA== IGJham8= IG1pbGl0 IOCkleCkv+CkuOClgA== IOGDmOGDp+GDnQ== cGhhYmV0 IO2K 4YCw YXRpb25hbGU= IFN5cg== CQkgIA== IGR4 IHRoYWk= IENyYQ== dmVydGljYWw= IEphZw== IGltcG9ydGFudGVz IHZyaWVuZA== SGlkZQ== 56i/ CWxvZ2dlcg== IGluY2x1c2l2ZQ== NDk5 INaB 0LXSmQ== IGRlY2xhcmVk IHRlcnNlYnV0 0Z8= IGFuYWx5c3Q= IFVW RU5V IG1lcmc= U3RhdGVz IGdyb3VwZQ== X2VkaXQ= T2ZmaWNl ZW1wdA== b2NpYXRpb24= X2NhbGxiYWNr LWltYWdl X2ltYWdlcw== IHN5bWJvbHM= IOCqsuCri+CqlQ== IE9jZWFu IGN1dHM= 5oqk INWq1aHVtA== IEhlYg== KGdhbWU= INGB06k= IEdyZWVr dXNhbg== b3B0aW0= IG1ldGVycw== IGludmVzdGluZw== 4KSz 4YOQ4YOV4YOa IHJldmVycw== X2hvc3Q= 4KeO ZmVjdGlvbnM= INKb0LDQuw== YXphcg== 4KWH4KSV IGNvbmNsdXM= IG5naGk= 4Lil4LiH IHByaXpl dXJzZQ== X3ZlY3Rvcg== IFRyYWQ= IG1lY2hhbmljYWw= IGV4cGVyaWVuY2luZw== 7Yuw IGRpc3Rpbmd1 INGB0L7QtA== IMO1 7LWc IHByb2Nlc3Nvcg== YWhheQ== 4oCZZXM= IGFhbW1h IGJlZHJpamY= IHNpbmdlcg== IENoYW1waW9uc2hpcA== IG9yaWVudGF0aW9u 7ZeY IEJpbw== VE0= 0YPRgdC6 IHNraWxsZWQ= IHJlc2U= QUg= bnVsbGFibGU= UmVjb3Jkcw== d2ll UkVTVUxU IGxsZXZhcg== IHlvbw== 7KeA66eM IHRvbGw= IGfDqQ== cGF0dGVybg== IHJocw== IHF1YWxpZGFkZQ== IFRBQkxF IEZyYWdtZW50 0q/RiA== IHByb21vdGluZw== TWFyY2g= IExpcw== ZW5zaW9uYWw= 2KfYsdmK2K4= IGFoYQ== 2YrYp9ix Q29vcmQ= IExlYmVu bGFjZQ== IGjDoG5n ICIm IER1bXBzdGVy X3ZlYw== IGRhbw== IER1ZQ== ICJ7 Y2FtcA== MzM1 IHdlc3Rlcm4= IGTDqWJ1dA== OTkw IE5vcm1hbA== YXN0cm8= 0ZbRhw== IGhhbmRsZWQ= YWJlbGU= 0L3QtdC8 IGZhY2lsaXQ= IGZpZnRo S2V5Ym9hcmQ= IE9wZXJhdGlvbg== QmF5 V2VhdGhlcg== IOWv IGNyZWRlbnRpYWxz 4YOU4YOR4YOa 6aKd IGdlc3Rpb24= IHNpbm4= INeU15M= IOqwmQ== IHfDvHJkZQ== LkF0 IGxhYXRzdGU= IGNhdGVy YmVmb3Jl IHVpZA== IGJyZWFrcw== IGJlaGF2aW91cg== IHNjcmVlbmluZw== IGludGVycnVwdA== 0L3QsNGB VXJscw== IHNvaXI= IOCmhuCmlw== LkpTT04= INGF0LDRgNCw INC/0LDQuQ== 5a6i5oi3 INC/0LDRgQ== d2VpZ2h0cw== IHNwYWNpb3Vz IEZvcmVzdA== IHN0eWxpc2g= IFJvc3M= 0YjQuNGF INC60LDQtw== IEJlZw== IOCkpuCkv+Cksg== Z2V2aW5n LWNs IFNvbnk= X01FVEhPRA== NDAy INC/0YDQuNC80LXQvQ== IHN1c3BlY3Q= INis2LM= 4K6+4K6y4K+N 55S16ISR LdC/ IGJhbmRz INGN0LrRgdC/ IGxvY2tlZA== z4bOvw== Y2xlYW4= KGZpZWxk INCh0YI= INeQ16Q= IHNvbWVib2R5 INin2YTZhdiv INWh1bfVrQ== IENvb2w= IHZ1ZWw= 5bex IOCqieCqqg== IENIRUNL IGVuZXI= LnN5c3RlbQ== YW1lbnRz 57ut X3N0cmVhbQ== IGVudW1lcmF0ZQ== 0Ks= KCJ7 IGVsZWN0cm8= KGRvY3VtZW50 IFJhaA== Ym90dG9t INmD2KfZhtiq dWto zrrOsQ== w7hyZQ== INGB0YLQsNGA IEFudGg= IHNvdXA= INGE0YPQvdC6 TG92ZQ== 15vXnQ== aW5rYQ== IFBhcmFtZXRlcg== xaluZw== OmZsdXR0ZXI= IOGDoOGDneGDm+GDlOGDmuGDmOGDqg== IHJhY2luZw== QnJv IHRvZW4= ZXlh IGFyaQ== IHNlaGVu INGC0L7Qsg== YXZlcnM= IH0vLw== IGVxdWFscw== IGVuZHBvaW50 LXBhZ2U= dWdv RHJhd2FibGU= IGZpbmVzdA== Q29ubmVjdGVk IOCkm+CkqOCljQ== IGRvcnQ= YXRpbmdz bG9va3Vw IGRlY2xhcmU= IGFzZWc= IOC0iA== Lm1zZw== IFVrcmFpbmU= SW5zdGFsbA== IGRlcGVuZGVudA== 4LS+4LSo4LWN IE5paw== X2xvYw== IGludmVzdG1lbnRz IFRlbXBsYXRlcw== 6K+m X3Nj UGFkZGluZw== IGNvbXByYQ== IEtldmlu VHJ5 IFBhdHRlcm4= Ij57ew== IEVuZGU= IGtvbnRha3Q= IHNwZWFrZXJz dW1hdA== 4LGB4LC1 IOCmrOCmv+Cmtg== 2YjZitip INC40L3RgtC10YDQtdGB IEJyb29r IENhcHQ= 0LDRgtOZ0Lg= b2xpdA== 54q2 aXppb25l IC0qLQ== LHg= IHZhbG9yZXM= Q29kZXM= CWlz dW5jdA== IHdlbGNoZQ== IG9uZ2U= 6K6w6ICF Rml0 IG1lbWls cGxveWVlcw== 0YLTmdC4 4KWC4KS4 15HXmQ== IGRlY29yYXRpb24= ZHN0 IG5pw7Fvcw== c2luZ2xl IFRyYW5zYWN0aW9u ZWxpZg== 4K+B4K6V4K+N4K6V4K+B INeV15w= IGR0eXBl KCkKCgo= IHZvbnQ= IEFudG9uaW8= UHJvYw== b25vbXk= REVMRVRF ZsO2cg== IGtleXdvcmRz INmE2YTYqg== IGthbmdnbw== z4fOtQ== CXRleHQ= 4KSo4KWN4KSo IHNvcA== 2KfZhtin2Ko= 4LS14LWB4LSC IHJlYWNoaW5n IGFpbg== IHRpbmhh Znk= IFByZWQ= IGNlbGVicmF0aW9u INGB0L7Quw== LCY= IEh1bQ== 0YPQu9C4 d2F5ZQ== Lm9mZnNldA== cXQ= X0VN IEVyaWM= 6Ziy IGNocmlzdA== IOCkl+Ckjw== IOyEsQ== LFN0cmluZw== aXRpdml0eQ== IOC0uQ== 5rWO IHNvbGVseQ== X2xvY2F0aW9u JGxhbmc= aXRsZXM= 0LXQvdGC0Ys= IHN0cnVnZ2xpbmc= IEVSUk9S IGRyYWlu NDA1 cm9hZGNhc3Q= 1bbVpA== YWzEscWf INCR0LXQuw== cHJvYg== RXU= 4K+H4K6w KGJvZHk= 4KuH4KqV IHRlcnJpdG9y Q1Y= 4K6o 0JrQsNC6 YWNrc29u LndhaXQ= IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 0pvTmQ== Z2VuZGU= LW5ldw== 0LDRgtC10LvRjNC90L4= MzMx MzIy IHBpw6g= Z3Y= VGljaw== IEdpdmVu IGTDvMWf IOunjg== IG1vZGlmaWNhdGlvbg== 5Y+z dWJlcg== U3Rvcnk= dXNwZW5k 5Y2a5b2p IHNoaXBwZWQ= a2pl aXLDoQ== w61jdWxvcw== IHZhbW9z 2KfZhNuM X3N1bQ== ZXJ0cw== YXJ0dXQ= 4KuA4Kqk YXR1ZA== R1A= IHNtb2tpbmc= IOCukuCusA== b3dubG9hZA== Mjk1 aWFp IEdlZg== 7YOd UGF5bG9hZA== IGVwaXNvZGVz W10p IE5hdA== IG5lbGxh XSkpOwo= cGhlcg== KGFjdGlvbg== IOC3hA== 15XXlQ== TW9kaWZpZWQ= JTsK 44GY 5a6J6KOF IGFkb3B0ZWQ= INGB0LLQvtC5 TG9nbw== 2YjYp9iy aW1ldA== IHRoZXNpcw== IFRyYW5zZmVy IG9wZXJhdG9ycw== 0LLQtQ== IHJvb3Rz 5Yi3 0LjRgtC10YI= Mjcx 4Kao4KeN4Kam 4KSC4KSn IHJpZXM= X1VQ INC70LXQsw== INin2YTZhtin IGluanVyZWQ= 4LS+4LW7 IGhpcmluZw== IGF0dGVuZGluZw== 4KWH4KSk4KWN4KSw 4KSw4KWN4KSj INin2K4= INC/0YDQvtGC0LjQsg== 4LCz 4bqleQ== IGp1aWNl IGludGlt 4oCO dHo= IGVzc2VyZQ== QnU= IFBhbmVs IHN0ZWFt IOCqteCqsOCrjeCq IHN0b3Bz 2YXZitmE cmVhY2g= IHN0YXJr 4KSP4KSV IOqxsA== dXNpdmU= IGNyYWNr aGFiaWw= QmV0d2Vlbg== INGG0LXQvdGC IEZpcmVmb3g= IEZvb3RiYWxs IHbDoG8= IGthbGU= 4KuL4KqX 5qc= IExlb24= 4oCZaQ== X29mZg== IHdpZGVy aWZlY3ljbGU= YXJ0aWNsZXM= INC70LjRiA== 57ea 4LWB4LSj cXVlZQ== IEZsZXg= 6ZaL IHdlZGk= b21iYQ== LWdv IGpvZ28= INec16c= 4KS+4KSC4KSX IEV4cGxvcmVy UGV0 b25kZXJl cG5n 6K+l IGRyb2l0 Y2hlaW4= fQoKCgo= 4YOQ4YOg4YOS IHplbGZz dW53cmFw 4oCZaW50 SUZU IGNvdXBsZXM= ZW5jZW50 LmFicw== IE5hdHVyZQ== ZXNvdGE= INi02YjYrw== IHByZWduYW50 aWV2YWw= Z2jhu4s= X2NvbnRyb2w= 0LjQtNGD IHVuaXZlcnNhbA== INC/0L7Rj9Cy 2K/Zitiv2Kk= INis2YXZiti5 INKb0LDRgA== 0LHQvg== X3Jvb3Q= LWl0ZW1z IGNvbW11bmlj INmK2Kc= IHJ1YmJlcg== MjY4 IEV2ZXJ5b25l QVlFUg== d2hv 4LS+4LSz ZXNzbWVudA== IGluc2Vy Q09ERQ== IERlc3BpdGU= IOiB IGRvbm5l IGVuc3VyZXM= 5p2Q IEJpbA== bGl2 4YOU4YOg4YOX IHNhaXM= IGNoZWNrb3V0 aHJlZg== IGN1bHR1cmE= IHNlaW5lbg== IEhlcnI= R1Q= Mzc3 ZWFyaW5n IFBhcmFtZXRlcnM= IHDFmcOt VHJhY2tlcg== IG15dGg= IOCoueCpiA== JyxbJw== IG9uZGVyem9law== IGRvdg== IHJvYWRz bWFydA== INKb0LjQuw== X1JFQUQ= aXRoZQ== RGVi 2LPZhNin2YU= IHN5c3TDqG1l 56ys5LiA IOGDk+GDpg== IHNwaWVsZW4= IEpvc8Op dXJhbsOnYQ== INC90LXQvw== cm9udA== IG9iamVjdGl2ZXM= R00= IOCksuCli+Ckl+Cli+Ckgg== IOS6mg== 2YjZhdip IHfhu41u a2Vz IGzDoG0= INGA0YPRgQ== IHN3aW5n INm+24zYtA== 66aw 4YCU4YC5 4KeN4Kah IG11c2NsZXM= cGxhbmU= dW1taWVz cGVjaWFsbHk= IGNzcw== IHZlbG9jaXR5 IOCknOCkvuCkjw== 0LjRgtC10LvQtdC5 4Ka/4Kam aXPDqQ== LnBo 2LnYp9ix IG1vb2ll 0LvQtdC5 X3BvaW50cw== Owov IFVJVmlldw== IFJlbW90ZQ== IGFwcHJlY2lhdGVk IGhlYXJ0cw== IERlbGhp ZW5zaw== IGNvdw== VGVzdGluZw== IGxpa2V3aXNl dXNj IHBvaW50ZWQ= aWZmZXJlbmNl IGFydGlrZWw= IGhpbmc= 6LaK IHdhdGVycw== IEFkZGVk IGludGVncmFs YWRlbHBo IOCopuCphw== INeg15nXqdeY IGNocm9u IE9ydA== IOWK IE1Z IHlt IGFubml2ZXJzYXJ5 U3ByaW5n NTYw 7YOc QXByaWw= ZWx1 IGPhuqM= QmVjYXVzZQ== INWv1aHWgNW41bI= 0YvQvdCw0L0= IHBsYW50YQ== SmE= IHphcg== IHN1amV0 U3Vu IHRvaWxldA== IEhhaXI= IDsKCg== IERvYw== IGd1aWRlcw== YXNpbg== INC00L7Qsg== ICcr 4LWL4LSf 2KfYr9ix IE1vdXNl 2LHYp9mC 15LXnA== LnN0b3Jl X1R5cGU= UEVSVFk= 55Sz5Y2a IENoYXB0ZXI= IGZvcmc= aXRtYXA= IGdhbnQ= Q2xpZW50ZQ== YXNzaW9u IGhpc3TDs3JpYQ== 2LHZitiv IGR2 UEVS IOCyjuCyguCypuCzgQ== IEFsd2F5cw== X2FjY2Vzcw== w612ZWlz dWJyZQ== b2x2ZWQ= ZG9n IG1hYg== YXJjaGVk aXNzdWVz YWthcg== 5bKB IHZpc2E= IHN1cnZpdmU= IOCmleCni+CmqA== IOCkheCksg== IHBlbmlz ZW5zZW4= IGdyYXRlZnVs dmVsb3Bl TG9naWM= YWJpbGU= cmFuaw== X2xvZ2lu IGJ1cm5pbmc= b2xlc2FsZQ== INOY IGVpbmQ= INC+0YLQstC10YI= IOCmpuCngQ== IENhdGFs 4buRbmc= b2J5 LnF1 IEdyYW5kZQ== aMO1ZXM= IGViZW4= Q2xhaW0= KEV4Y2VwdGlvbg== IOCkhuCkrw== 0YPRgtGM IGZsb29ycw== aGFuYQ== 4oCZbnk= X3Byb2ZpbGU= 0Y/QtdGC IGRoYQ== 1YQ= INGH0LXQu9C+0LLQtdC6 IHN1cHBsZW1lbnRz R0M= YWRkeQ== LkFueQ== IHZpdGFtaW4= 66mU IGVzcGHDsQ== IGRlc3Rh IFRhbQ== IGNyZWRpdHM= KV07Cg== ZXRlcw== dXNlbWVudA== IHZvb3Jr IHB1ZXM= Lk1heA== 4Li14Lii4LiZ IGV4cHI= IEFzc2lzdGFudA== 56m2 w6lv IGVkaXRlZA== IEJyYWQ= LkxpbmU= 4YOQ4YOc4YOY INeU15DXmA== 7J207Yq4 INGA0LDQt9C70LjRhw== YWJzb2x1dGU= U2hhZG93 IOCqheCqrg== INC/0L7Qsw== bMO8 15nXqNeU IGluY29u 64Ko IHRhcmQ= IHdvcmxkJ3M= IGJvdW5kcw== 4LS/4LSw4LWB4LSo4LWN4LSo4LWB IGJlbmVmaWNp IGxvb3Nl b3J0ZW4= 0Y/Qsw== IGVzdGltYXRlcw== IGltcHI= IG15w7Zz IGJydXQ= INCz0LDRgA== IFZpc3VhbA== IENhcmxvcw== IEJ1aWxkZXI= IGxsZXY= IOy0 4YOU4YOl4YOi SUNFUw== INis2Yc= IGx1bg== IHBoaWxvc29waHk= IGNvbnN0cnVjdGVk IOCosg== ZWRldXQ= IGJlbGU= IFJlc2VydmVk 7KeR Ymly IENvbmRpdGlvbg== IHNpeg== IGVtb3Rpb24= IG5hc3Q= LklP bmVyZ3k= X3NoYXBl IFJhdGU= SGllcg== ZXhpdA== 0LXRgNGI IHByaW50bG4= aWxlcnM= IG1vbmc= 4oCZYXA= IEhpbGxz IGxhbmRpbmc= INC70LjRhg== bWFk 15nXmdei c2hhbGw= IGNhcnRl IOC0jw== Y2lp Y29tbWVudHM= ZmVsZA== IHNwYXI= IGd1bQ== REs= INC90LXQvtCx0YXQvtC00LjQvNC+ IHBhcnRpY2xlcw== X2dy dWR5 IHNsaWNl IlRoZQ== IE5hdHVy IHByZXo= X0JJVA== YW5zZQ== LXBy IEJydQ== LXVu LmNoYW5uZWw= IE1z MzM0 IMSRw7M= 4KqC4Kqm INeZ15XXqteo YWZrYQ== cG93 4KeN4Kag X2V4cA== dW1iaW5n X0NMQVNT 4KS+4KSV4KWL IG3DrQ== X21lbQ== PFM= IG1lZGlkYQ== KG1ldGhvZA== IOWkqeWkqeS4reW9qeelqOaYrw== INCz0LDQtw== 4Lix4Lin bmo= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBva2Vy IHBhaXM= Ym9sZA== RmVlZA== dWNpb24= VG9rZW5z Lm9r IHJvbWFuY2U= QVRFUg== IMO6bmljbw== bG93ZXI= IHdpc2U= 4YOU4YOd4YOR SE8= 6as= IG9idGFpbmluZw== IGNlcmVtb255 bWlj IG5lc3Rl IGV4aWc= IHJlY2VwdGlvbg== Q2xvY2s= bmls IFNjcg== J2Ft Lis= X05F Q1JJUFRJT04= dHRlbg== INin2ZM= VVRP Mjc3 INep15E= bWVkaQ== IFNT IHphbWFu IG51dHJpdGlvbg== 55Wq IHRlYXI= 0YLQsNC/ 5rC4 QXJyb3c= OmludA== IG5heg== LlJ1bnRpbWU= Mjgz IGFwcGxl INCx0L7RgA== 0LvQsNC8 4KS+4KSy4KSv RURJVA== 1avVtw== TlI= IE5pZQ== aXN0cmE= INm+2Kfaqdiz2KrYp9mG IENhc2E= UmVhc29u IGluZGljZXM= eHR1cmVz IGNvb3JkaW5hdGU= 2LnZhdmE IGFja25vd2xlZA== IGN5bA== 4LWL4LSX 4K6H YWNoZWw= 0Y/QvNC4 IFJlbGVhc2U= 0LjQt9C8 IGxhbXA= IFBlcmhhcHM= IGVudmlyb25tZW50cw== 5pma VVJSRQ== 6KaW Iik7DQoNCg== IHByaWo= 4Lix4LmJ4LiZ YXJrYQ== IHZlZ2V0YWJsZXM= IG5pY2h0cw== VlI= 4LKy4LON IG5oaeG7gXU= 2YjZhdiq 5pat b3RoZXJz ZWd1 UmV0dXJucw== 4Ky+ LWNoZWNr IGluc3RydW1lbnRz MzYx IENvbHVtYmlh 2qnakw== IGhvbGVz R2VvbWV0cnk= IOCmr+Cnhw== INGB0LvQvtCy b21tZQ== IOCkruCljA== IGV0dGVy IGThu6VuZw== 0LTRi9GA IGFkbWlzc2lvbg== YXNtYQ== IHRveQ== 2K3Yr9ir 4KSw4KWN4KSl IGluZ2Vu IFRhbg== IGNpYw== INW61aXVvw== eGw= IGRlYWRsaW5l 66Co b29raWVz 4Lih4Li1 w6FiYWRv 1b3Vrw== 0L3QvtC70L7Qsw== Q0VQVA== IGRpdmVydA== IFRvdA== IGFsZ3VtYXM= IFZpY3Rvcmlh MzM2 IOG7jA== b3Nvcw== IGZyYW7Dp2Fpcw== 5YS/ d+G7jQ== Y2Vr IEVVUg== 4KWH4KS3 IENvdWxk IGFmaXJt emVuaWE= SW5ncmVk RnV0dXJl IHRlcnJhaW4= INC+0YLQutGA0Ys= dW1hcg== bmFpcmU= IGRpc2NvdmVyeQ== IGd1cg== X2xheW91dA== YWx0dW5n IGNhZsOp IGxvYWRlcg== IGF1dGhlbnRpY2F0aW9u IGRpcGxvbQ== IOCkquClgA== Zm9ueQ== IGfDqW7DqXJhbA== 5p+l6K+i IOi2 IEl0ZW1z IFJvdW5k IHDDtQ== INiq2YXYp9mF IGhhbmdpbmc= IENvbGxlY3Q= b3R0bw== 24zZhA== X21vZHVsZXM= IGZhbWlsbGU= INW+1aXWgA== IGRpZsOt 4K6q4K+N4K6q4K6f 2YbYqA== IElD dGlvbmVu IGVuZm9yY2VtZW50 Z2VuZGVy 4KSV4KWN4KSw4KSu 0LXRgdC/0YPQsdC70Lg= Jmd0 ZXRhcw== 4YCG Y29tbWVuZGVk Ljw= IHN1cnRvdXQ= INKv0YfSr9C9 cmVuYQ== L28= IGltcHJlc3NlZA== IHJlc3Bpcg== IGNhbG9yaWVz aWx0ZXJz IOCqruCquQ== LmF1dGhvcg== IGtvc3Rlbmxvcw== VmlzaXQ= IHNsZWVwaW5n INC10Lg= IMO6bHRpbW9z X3JlZ2lzdGVy IHRyaWVz 5bem 2LnZhw== OTYw IHZhZA== IEJyaWFu IGFsaWdubWVudA== MDE3 IGJldg== IGFiYQ== IHVudXN1YWw= IHJvbGxpbmc= IHByb3ZpbmNl IGFuYWx5emU= ICAgIAkJ TGFiZWxz UHJvdmlk 4buTbmc= c2hlZXQ= U2VwdGVtYmVy IGltZQ== IHByaW5jaXBsZQ== dW5pbmc= 7LE= dXJzaXZl 4K6Z4K+N4K6V4K6z 0pnRiw== ZGVn IGV4cGxhbmF0aW9u KCcs z4POsQ== 4Kan4KeN4Kav IGZvbw== SnVseQ== MzI4 LmNvbW1pdA== IOS4ig== SUxFRA== INiq2YE= IHByYXllcg== 5oC75Luj55CG X3NlbmQ= IGt3YW0= 0YbQtdCy IGZyw6E= YnV5 ZWRlcw== 2YjZhNin 0L3Rjg== IHDDoWdpbmE= YWRlbHBoaWE= 7KeI IGZ1ZXJvbg== 5Y2D IGN1cmlvcw== MzMy IOWuiQ== aW1hbg== 6aqX5bGA IGZvbGs= IFJldg== IGRvbm7DqWVz INCz0YA= IOC0muC1huC0r+C1jeC0pA== 4LSa c2V0dXA= LnNsZg== Mzk5 IHZlbG9j cm9sbGVk IEZhbg== INCz0LvQsNCy 0LLQsNGP IG9yYXo= IEFQUA== IHRocm8= IGhlbHQ= YWdpbmU= IHZhbmFm 7ISd 4LS+4LSq 4KSo4KWL4KSC IFZlcnQ= INiq2Lc= INio2K4= INmF2YbYqg== 4oCZaW0= IHJlZnJpZ2Vy IGdyYXZl 4Ker 7IWY IGZhbHM= 5pyb IHJhbmtpbmc= UHJpbQ== IHdvcnJpZWQ= IGxpZWd0 dG9vbHM= IO2ZlQ== 0LTQvdCw LmRlY29kZQ== IExlYmVucw== ZG4= PSIjIg== 4KWr X1ND IHN1cmZhY2Vz 5LiJ5Yy6 INC+0LHRj9C3 IEpy IHdoZXJlYXM= IOCyleCyvuCysA== IHNhbW8= IHdvcmtvdXQ= IG9yZGluYXJ5 IOWcqOe6vw== IGRlZGlj IHZpcnR1YWxseQ== UVVBTA== ZW5kZXM= ZWtp CUI= bGlrZWx5 KEJ1bmRsZQ== IGNhbWJpbw== IGZyZW0= CWlk IE5vcw== w61uaA== IHNuYXBzaG90 4Lit4LiU 4YOU4YOR4YOj4YOa 44Oz44Kw MDIy 2KfbjNiq IHBsdWdpbnM= cXVpbg== 5aWH57Gz IOGDoeGDkOGDpeGDkOGDoOGDl+GDleGDlOGDmg== ICAgICAgICAgCg== IFNM IHNvbnJh IEhhbGxvd2Vlbg== 2YTZitmE KHVuc2lnbmVk IGhhcHBpbmVzcw== X2Nsb3Nl IEhhd2Fp IHZlcnN1cw== b3VyZWQ= IG9wcG9zZWQ= b3JpYW4= w6FuZw== IHNlYmFnYWk= MzY0 KSIsCg== 15XXoNeS IOiAgQ== 44Gj44Gm IGhvdmVy w6F2ZWlz LHY= IGNlcnRhaW5z 0YPQu9GP0YA= LmFy INCw0LrRgtC40LI= 4KuD IHNjYW5uZXI= IGhlYWRlZA== IHRvbWFy IGxhZ3U= IHNlY3Vy IHNhbHY= IGV4ZXJjaXNlcw== IGRpc3Nv IGZvcm1hdHM= INGN0YLQvtGC IGhlYXZlbg== IGFjdWVyZG8= LWZsZXg= 4LSu4LS+4LSv IE1pbmlzdHJ5 IFdpag== IGlzZQ== IGVuam95YWJsZQ== IFNS IHBsYXN0 6ruY 0L3Ri9GP IGNvbnNlZ3Vpcg== IOGDm+GDkOGDoQ== IGV4Y2x1c2l2ZWx5 z4TOrw== b3BoZXI= MjY5 IHJldG91cg== 1aHWgw== IFJlZmVyZW5jZQ== R29sZA== 5YW4 IFllaA== VGVu IHZ1ZQ== IGludGVyYWN0aW9ucw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg w5NO X0RFRkFVTFQ= YWt1a2Fu YWx0ZW4= IOCwjw== NDMy dGhp IFNjb3Jl IGZld2Vy cHJvZg== 5Zac IFhib3g= Rm9yd2FyZA== 7JWY LU8= IHN3bw== IGlycml0 TGFuZw== QWo= 55uR Z29vZA== IFBSRQ== IGVzdGlsbw== ZXR0ZXI= IHBhdXNl IGNvbnNvbGlk IGVuZGlm ICc6 4YOX4YOQ4YOV INep15g= SSd2ZQ== UGVybWlzc2lvbnM= IGV4Y2l0 IGluZG9vcg== c2V0dGluZw== IHN1ZGFo IFByb2JsZQ== YWh1 7Kad 4LK/4LKw4LOB4LK1 INCw0YM= IGdj 1bw= IHNpYQ== Lm9i 0LTRltKj 1avVvg== IHRhbGVudGVk 2LPYqNip bGVhcm4= IOCwleCxiw== IHdvcnNoaXA= TlVN aXBsaWVy IGZvdW5kZXI= b3R0YQ== 4LON4LKV b3Jhbg== INGC0L7Quw== IHN0cmxlbg== IG1vbmV0 TGlua2Vk 4LK/4LKX4LKz IGl0ZXJhdG9y IEdpcmxz UkVGSVg= 0LjQu9GB0Y8= IEFERA== INGC0L7QvQ== IEluZHVzdHJpYWw= csOz IHJlZmVycw== IHRpcmU= 4Lin4LmI4Liy ZWZl UGFnZXI= YW5pbWF0ZQ== LnJlZA== IOCmueCmrOCnhw== IHNlYWw= IFJhbms= bmVsbGU= IHZvaQ== Ym9uZQ== 0LjQt9C90LXRgQ== IGdlZWlnbmV0 PGZvcm0= IG5pbg== IGF1dGhvcml6ZWQ= INC80LDQvQ== 55Sw IHdhc2hpbmc= b25pbmc= IEFyZ2VudGluYQ== INC40p8= LmRlZmluZQ== IOCmueCmr+CmvA== INin24zYsQ== IFJhYg== U2lu UEFUSA== INiu2b4= IGRyaXZlcw== 0LXQtNGW IG9mZmljaWFsbHk= IHV1aWQ= IGV4ZWN1dGVk aW5lbnQ= IOyggA== Njc4 YWNz QEA= Pigi IHN1YnN0YW5jZQ== IGNvbnN1bHRhdGlvbg== IGthaQ== w7Fhcw== aWplbg== IFNvZnQ= IGVuaGFuY2Vk IFRyYWNr IHRlZw== IGhlcm0= 5b2p6YeR LlBhcmFtZXRlcnM= IGNpbA== IHNvY2lhbGVz IHJld2FyZHM= U2tpbGw= 5YW0 MjY3 IFNlaXRl SnVuZQ== ZWxlYnI= Qmlu IHBpY2tpbmc= 4bu5 R1VJ INin2YTYtg== IHBhbmVscw== Ymlhbg== YXJhdA== IEFuZ2Vi IGJhc2ViYWxs IHBpbmc= IEluaXQ= IGNhbXBpbmc= cGllY2U= 0LrTmdC9 Mjc4 0LXQs9C00LA= enVn IGJoZQ== IGN5YmVy w6hyZW1lbnQ= IHJlY2lwaWVudA== 5LiB IGNoZWc= 16LXoNei158= Il0pCg== Y3RyaW5l IC0tLS0tLS0tLS0tLS0tLS0= IOCuheCupA== LnJvdW5k bGVndA== 2YLZitmC IHJlY2FsbA== IFN0ZXI= 77yN 1oU= IGN1aQ== Mjc2 5qyi IERvbWlu QWR2ZXJ0 IHdhcmQ= 4KSb4KS/ IEJldHRlcg== 4Lit4Lia aWlu IFNNUw== IOCkueCli+CkqOClhw== IEpvcmRhbg== Mjky IHdpbHQ= ZXJ0eQ== IHNvdXRoZXJu IG1tZQ== IEJyYQ== IHRyb3V2ZQ== IHp3YXI= INC80LXRgdGP 0ZbRgdGC IEJpbg== IGdyYWNpYXM= 4buDbg== IHBpcA== w61zdGljYQ== IGVxdWl0eQ== 15HXmded IENyZWF0aXZl 0LfQvdCw0Yc= IFNub3c= Lk9L IHN1cmVseQ== 0ZbRjw== bXlz IG9yZGVyaW5n aXRpYWxpemU= IG7Emw== MzE5 UHJlZmVycmVk aHTDqw== IHNpbXVsYXRpb24= IHN0YWlubGVzcw== IHNvY2s= 16LXqg== TUFORA== Q2E= 4Z+H IOaIkQ== IGluY2x1c28= 57qq aWNhbmE= LnBkZg== 4KS/4KSP4KSV4KWL eHh4eA== IHRlbGFo KGAkew== IEJleQ== IGV4Y2VsbA== w61jaWE= Um91dGVz IGVsZWN0ZWQ= IHByb3hpbQ== dmVsb2NpdHk= IGltYQ== 4KWt IFRFWFQ= U2V4 IOCqueCqpOCriw== INC/0LDRgNCw RGVjb3JhdGlvbg== IHBhcnRpZG8= 4KqV4KuN4Kq3 IGzDpQ== bm9ybQ== INC+0Yg= 5LyR SW5mb3Jt IG91dHJh 4KuL4Kqc SG91cnM= IOCqueCri+Cqrw== VVNE IHJlbGVhc2Vz 4oCZeQ== INC40LfQvNC10L0= IENyZWVr LnNjcm9sbA== cmVjaHQ= IEFuc3dlcg== IOCkq+Ckv+Cksg== LWJhcg== IGZhbnRhc3k= INmF2K3Zhdiv IGNiZA== w7JuZw== aW5kaWNlcw== IEVr X25vcm1hbA== IHZldGVyYW4= dmVyc2F0aW9u IGzDtg== Mjc0 1ao= 0YDQsNCx IOiH 0LTQtg== IGNvbm9jZXI= b2dl IGFtb25nc3Q= IEhlbHBlcg== MzI0 IEphaw== c3RhZw== INmI2KU= cG9zaXRvcmllcw== IG3Emw== 1aHVr9aB IOC5hg== 5Lq/5YWD IHNhaQ== VGFw INGC0YDQsNC9 IHByZWNpc2E= IEhvbGw= X0VWRU5U 2YrYsg== OnM= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IOCysg== IOCknOCkvuCkpOCkvg== ICjigJw= 4YGA T0xVTU4= IGNvcnBv 6aU= 1aHVstWh1oQ= IHF1YQ== IOWkp+WPkeW9qeelqA== IGplZGU= IGRlc3Ryb3llZA== IG9wbA== IEdlbmVyaWM= INC90LXRgdC60L7Qu9GM0LrQvg== 4Kqj4KuH IHNvcnRz ZWdyZWU= IHByb2Zlc3M= 5b+X 0Zw= IE1haW50 IHdlbmln IHNvbWVob3c= X3Jlc3VsdHM= 5aSr IOKElg== 1aHVpNaA IHJldHJpZXZl 1oDVuw== 4Lax4LeK4Lax 4KeL4Kaw INC00LLQsA== d3lkZA== WVNURU0= IGNvbnN0cmFpbnRz IHBvc3NpYmlsaXRpZXM= IHZlbmRvcg== LlNlbGVjdA== IGFza3M= X1NZ SW5zdHJ1Y3Rpb24= IGFuY2hvcg== cHJldmlvdXM= eWVu X0VOQUJMRQ== LlBhZ2U= VE9ETw== IFNhbXBsZQ== VmFyaWFibGVz IEJhdHRsZQ== INqq2LHZig== IOq1rQ== IEJldw== IHBpeGVscw== IHB5Zw== MzU1 IE1vcmVvdmVy MzUy dW1iYQ== In0K aW52 IGtvbGU= NDIy TWVhbg== IGNhYmluZXQ= asSZ IGN6eQ== IEVudGVydGFpbm1lbnQ= IGdyw7Y= IGxpYWJpbGl0eQ== IGFuaQ== 7Iig bGVnZW5k IE3DqXhpY28= LW9ubHk= INmG2LjYsQ== IOGDo+GDmQ== U0VSVkVS YWhsZW4= Njgw 4Liy4LiE4Liy4Lij aGl0 IENsYXJr X01FTQ== IHF1YW4= IHBhcnNlZA== INi32YjYsQ== INCx0YvQu9C4 IHVrdWJh IHfDpGhyZW5k MzM3 IOW4 RmE= LnN0YXJ0cw== 4bq3dA== LkNsZWFy IHDDqQ== NjI1 IEN1bHR1cmU= Ym91cm5l X2RldGFpbA== IE1ycw== IEZF IERo Lk5vdA== 4Kqw4KuC INC60LjQuw== aW5raW5n emVsZmRl 15HXldeT IOC2rQ== IG1pbGQ= Ii8+ VHh0 IOCmhuCmqg== b2lyZQ== INWl1oA= LnN3aWZ0 INGA0LDRgdGC IGRpc29yZGVy IGRpZ2VzdA== TWl0 IGJhc2Vz IG1ldGg= INCx0q8= 5o2i IGFncmVlbWVudHM= IGNyZWF0aXZpdHk= 4LKu4LON4LKu IHB1c2hlZA== IE3DtmdsaWNo IGFyYml0cg== IGNyb3A= 2LHYp9mB 6Kmx bXI= INmI2KzZiNiv YWNpamU= 0LTRi9C9 R0lO 7KaI IC0tPg0K 5aa5 IOCkhuCkquCkleCliw== T1RI IEFyY2hpdGVjdA== IOynhA== IOCkrOCkvuCksA== a2Vycw== IE9yYWNsZQ== IFJlY2VudA== UmVxdWVzdHM= IGVuYQ== IGNsb3Nlc3Q= 0YLRjNGB0Y8= IGNoaXBz IEZsbw== 5be0 NjEw IGRpc3Bhcg== IG9ycGhhbg== IEZpZw== 2YrYqA== IFNVQg== 6YCA TWdy IEh5ZA== w6RydA== IHBhcnRpY2lwYXRpbmc= L2h0bWw= IEJhcm4= IHJpdmFs emlq IElscw== IGh5ZHJv IFN0YXJz ZG9vcnM= IGt2YWw= IHN1ZmZlcmVk 157Xnw== PQo= IEZ1cm4= KGNvZGU= INGN0YLQvtC5 INmC2LHYp9ix IHNoZSdz 0YvQvNC4 IHJhaXNpbmc= 4YOc4YOY4YOh IOCkueCksA== aGFp IGRpZmlj 4YCx4YCs LmhlYWQ= X09CSkVDVA== Wm9vbQ== IGFubm95 15XXnNed Y2ly w7pibGljYQ== c2NoYWZ0 ICoo UGVyc29uYWw= IOCkqOCkvuCkrg== TWFyZ2lu 0LrQsNC8 ICIpCg== J1M= 44Kx IHN1bmc= bWVucw== LlBhdGg= MzE3 IGVudGVuZA== 4KS+4KSH4KSo LWJ0bg== 4Keo4Kem 2KfYs9mK IFZlbnQ= IHRveXM= INmG2YHYsw== IHZpdGFt IGtlaw== QURB Mjg0 IHdvb2Rlbg== PVsn IOCkteCkvuCksuClhw== IHLDqA== IGdlZWZ0 IOGDoOGD IHBpa2V1bg== IGZvcnRl IE1hcnM= Z2Vv b3JpdGhtcw== IHRyYWc= IE1D 0LTQvg== 4KuN4Kqv4Kq+4Kqw4KuH 4LmD4LiK4LmJ INGB0L7QvtGC0LLQtdGC 2LfZgQ== 5YWs5byP Tm91cw== 4LC/4LC1 IFBlbm5zeWx2YW5pYQ== 1aHWgNWh1oA= TnVtYmVycw== 7ZWt IFZlcm0= ZHVjYXRpb24= IGJpbGE= INio2YfYpw== IGJlc2w= 44CCCgoK b3J0cw== IE1haw== SVRMRQ== IHBhdGlv QVJSQVk= INir2YU= IGVuY29kZQ== IG92YXQ= YXZvaXI= LW1pbnV0ZQ== dXRlcnM= IGzDrW5lYQ== 4KS14KS+4KSw 15nXlded cm90YXRl YXNzaW5n YWludHk= IG7DpGNo cGl0 QXNr IHBpc2M= LkZyYWdtZW50 IHN1cnZpdmFs Lkxl Zm9jdXM= RGVjbGFyYXRpb24= INq+ 4LGH4LC2 RmlsZW5hbWU= IHR1cGxl aWp1YW5h IHdlZA== INuU IHZvb3JhbA== NjMw IGFieQ== YXRpcXVlcw== dGVyc2NoaWVk LmxpYg== INC+0L/QtdGA0LA= KGNtZA== IHdlbGtl xZo= LWFy UkVBVEU= YXRob24= IGxldHRpbmc= X3Bhcg== IENvcm4= Q292ZXI= YWJzdHJhY3Q= 0L7QtNCw0YA= QXJyYXlz IHLDsw== 4KWB4KSd IHR5bQ== IChb IExpdg== 4LKW 0L7RgdGD0LTQsNGA IHNsYQ== IGF0dHJz IHl5 X3N0cnVjdA== IH19Ig== 0LXQvdC90L7QuQ== IERhbA== IGx1Y2g= LlJ1bg== IERpc2U= dW1weQ== IGNhbXBhaWducw== IGludmVzdGlnYXRl MDcw IFllYXJz 16fXoQ== IEthcw== aXNzYW50 IGtheg== 7ZS8 J2Fw YWNhaw== YXNqb24= IENvc3Rh IG1hdGNoZWQ= Mjk4 aGVsZQ== IFJlc2V0 CXVzZXI= aW1wb3J0YW50 4Ka+4Kec U2FsZXM= W107Cg== IGluZmFudA== 4LON4LK4 IGRpdm9yY2U= IHRyb3VibGVz 4Lie4Lix4LiZ RGFucw== IGV4cGVyaW1lbnRhbA== IFVsdA== IGNhbnRpZGFk Jyl9fQ== 6KeG6aKR5Zyo57q/6KeC55yL bmVjZXNz IGRhdQ== 5Yew IOyekQ== 2K3YsQ== IDw+Cg== 5LqS IGJpZWQ= Mjkz MzQx INCx0Lg= Y2hpZW4= dWtraXQ= 57Sg IE9SREVS KGxheW91dA== 5pmC6ZaT MDMx IEF0dHJpYnV0ZQ== XXs= 7IOJ 0LDQu9GM0L3QvtCz0L4= IGVsaW1pbmF0ZQ== aG9uZQ== 0L/QtdGA0LA= U2lnbmFs 7ZWY7Jes 0LDRhdGM IHBvcHVsYXJpdHk= w6lyYQ== bnN0 2KfYttmK 7Iah IERhbGxhcw== IOG7nw== b3Vwb24= 5YWR cGlja2Vy Iil7Cg== NTgw dXJmYWNl IOC4lOC4uQ== dOG7pQ== IExJQUJJTElUWQ== V0VC INC80L7QttC10YLQtQ== IHV2 IHZpYw== 0LDQu9C1 0YHQuNC8 4KWN4KSf4KWA ZW10 b3dv X0NPVU5U Ym9vc3Q= IG1hYW5k KHNj aW5rZWw= IE11bmQ= MDkw 8J+S Y29sbg== IG5vc290cm9z cmllbA== IGdpbg== IHV0aWxpemFy IENvbnN0cnVjdGlvbg== 66a9 IGNvbnNpc3RlbnRseQ== YXLDrWE= IC4v IGJoZg== dWxwdA== w6p1 ZGlmZg== IGNvbmU= INCx0Ls= 4KeL4Kex 4LGN4LCy4LGB ODAx bGs= NjU1 Mjc5 aG1lbg== IFNpbXBseQ== aWZhY3Q= dWxn IG1lZGlhbg== 4KeL4KaV YXRlbA== cHJvdG8= IGNhbmFs IOCmpOCmv+CmqOCmvw== IFN0b3JpZXM= dHJhY2U= 4Lil4Liy LmV4Y2VwdGlvbg== 0LXQs9C+0LTQvdGP X2Nzdg== IHN1Y2s= RUlG b2xhcw== IHNhbmE= IExQ IE9yYW5nZQ== aGVldHM= KHNlc3Npb24= IE5pZ2VyaWE= IG1lbm9y IGFsdGVybmF0aXZlcw== IFN5bWJvbA== IFBhZ2Vz IHNlaXM= IOC2nA== INCx0L7QuQ== VUJMSUM= IHRhcnQ= IHNlcnI= KGVudGl0eQ== KHRoZQ== YXRoZXJz ZXdh QVRFRw== X3ByaW50 0L7Qs9GA0LDRhA== INuB2YU= IHBhcnRpdGlvbg== 4YOU4YOq SW52b2tl QW5hbHlzaXM= IMOnYWzEscWf Mjkx IGJldHJl aWRlbQ== IGZlbW1lcw== LlByb3BlcnR5 IHB1Ymxpc2hpbmc= IHJlYWRz dXBwZQ== RGFtYWdl IEFjaA== 4KWp 4bq5bHU= IHNlcA== 1bjVvw== INC60YLQvg== b2xkbw== IGNoZWFwZXI= IHJlcHLDqXM= aW9kZQ== 44Cc dmFuZw== 4oCN4La7 V2hldGhlcg== bGFuZG8= NDA2 LXRlc3Q= YXJrYW4= 4oCZYXY= IGFubm91bmNl Q3JlZGl0 UXVvdGU= ZW5kZXQ= IGdlYmVu IGZyZWVs Q2hpbmE= IGNyw6lkaXQ= IGp1c3Rl YXRvcmlv IM66zqw= aXNzZW50 Z2Vo IMO8w6fDvG4= RG9uJ3Q= IOCyrOCzhg== U2hpZnQ= IFdpbHNvbg== NDcw IE1vaA== 1oDVvg== IGVtcGxveWVycw== cmVzb2x2ZQ== IHNlbnRpcg== INin2LPYqtmB IGRlcHV0 IHJhbmdpbmc= b21lcw== IFZpY2U= SUdI IFNhYw== 5Lq65aa7 LnZhbGlkYXRl X3N0YXQ= IGtsYXI= INuB24w= 2KrZh9in IHBi UmVjb2du TWFpcw== IEdlbQ== VmVoaWNsZQ== LnByaWNl IFNjb3RsYW5k IGdyw6JjZQ== UXVhbGl0eQ== Qmx1ZXByaW50 ZXhlYw== Ij57 IGNvbnZlcnNhdGlvbnM= bmVv W117 15zXmded IFdB IGx1bmc= zq3PgQ== 5p2R QWRqdXN0 IGRlcG9z IHdhbmQ= IGplcg== X0ZPUg== 16TXqg== INC80LjQu9C70Lg= INGD0YHQvw== Kj4= 4KS/4KSy4KS+ NzY4 X3RwbA== IG9ic2VydmU= IHNlbGVjdGluZw== 4oCM2YfYpw== 1oTVuNaC1bQ= IGhhbmE= MDQz IGRlbm5l IEV4dHJh IHdvbGxlbg== IENsZQ== IGJvdmVu IHZpc3Rv 0L/Riw== b2xsbw== IEF1c3Rpbg== YWN0aXZhdGU= IGR1dGllcw== IGNhcGFiaWxpdHk= 44Kk44Oz YXR1bQ== L21haW4= 6YCP TE9BVA== aG9yZXM= 4LK/4LKu IyMj IGzhuqFp LkRpc3Bvc2U= 157Xpg== IGt1cmk= 15jXnw== U1RSSU5H 4K6+4K6v U3VjaA== ZWVt cWF0aWdp 0L7Smw== IGNvdW5jaWw= Mjg2 IFN1bW1hcnk= IOen IG5laWdoYm9ycw== ZWJh IHLDqXN1bHQ= 7Y6Y NTA1 ZWxhcw== TXU= 0L3RjQ== IFN1bW0= IHByb3Zpc2lvbg== NDI1 IHNhw7pkZQ== 1brVpdW9 4LGC4LCh Lk5vdw== IERpb3M= IEZyaWVuZHM= IGFubm91bmNlbWVudA== IHpvZGF0 IERlYXRo INW01avVuw== IGVtcGhhcw== IFN5ZG5leQ== IGJhbmtpbmc= 1b/WgA== IE1pbm5lc290YQ== INC80LXQug== dmlt 4p2k X2JvZHk= aWJo IGF2Zw== IHByZWNpc2U= 572X 5ZCI5rOV5ZCX IGZhc2U= IGzDuA== QmVoYXZpb3I= 55m76ZmG a2Ft QXV0aGVudA== w7xk KHByb2R1Y3Q= RWxl IGVpbnM= INWh1bo= 64SI IG5vcnNrZQ== IFRvbg== IGdlbnM= cHJvZ3Jlc3M= IHF1YWQ= IGtybw== IHBvxI0= IHNvaw== INC005k= CQoK IFNlbnQ= IHdoZWVscw== IOaK INGI0LjRgA== IGFkdmlzZQ== Kyg= L1I= IGxpc3Rl 4K2N IEZ1cnRoZXJtb3Jl bHlr dmVsb3BtZW50 YWdsZQ== IOCqleCqsOCqteCqvuCqruCqvuCqgg== IGV4ZW1wbA== IGVuZGU= UHJvbWlzZQ== IGlzaQ== IE1vcnQ= Y29sb3Jz ZsO8Zw== IGNvaW5j IHRyw6pu Lm5hdGl2ZQ== aXRlaXRlbg== IGVtcG93ZXI= IGVpbmlnZQ== QHNlY3Rpb24= INeQ15nXqA== IGtvaA== dWx0YQ== IGPFqW5n a29tc3Q= IO2O 5am35am3 INSx1bU= IGhvbWJyZQ== 0L/QuNGB IEFicw== ICItLQ== QXZhdGFy 4K6/4K6q4K+N4K6q 0L7Qu9Cw IHZvbHVudGVlcnM= IGRlbW9uc3RyYXRlZA== INC/0L7QsQ== VlA= IG1pbGxp RGVmYXVsdHM= IGpld2Vscnk= 0LXQvdC90YvQuQ== 7KCB7J24 IGNvbG91cnM= IHNpdHVhdGVk IGtpc3M= 4LmC4Lih Z3Jv IHNlc3M= 55Wl IGNhbmQ= IHN1ZQ== IG3JmQ== IOCwoQ== IHJlcG8= IEFsZw== LmZhY2Vib29r LlRhYmxl RGVtbw== 576O5aWz IHlpaQ== IG5vdGFtbWVudA== IGF2aXM= T2N0b2Jlcg== RHJhd2Vy IGNvbXBldGU= INC80L7QvA== Mjk2 IHBlcHBlcg== IGNlbGxl INCx0LDRgNC+0Lg= Z2lv CWJvb2xlYW4= IFByZWlz IHNsaW0= INeQ150= IEJpYg== ZXJhw6fDo28= IGtlZW4= U2VxdWVudGlhbA== IFNoYQ== SUZZ 6JC9 IFJvb3Q= 15nXldef IEVsaXphYmV0aA== IFByaW5jZQ== 4LC+4LC1 X3dpZGdldA== IENPTlQ= 4KWN4KSv4KWL4KSC LmVuY29kZQ== dGhlcmU= IGdyYWRlcw== 44ON INCG 0LrQvtC9 IE1vbml0b3I= IGbDoQ== INCx0LXRgdC/0LvQsNGC IHRlbnNpb24= IHNwZWN0cnVt INW21aXWgNU= 4K+B4K6o4K+N4K6k 5p2l5rqQ L2NvbmZpZw== IG92ZXJjb21l X2Jhcg== YXZpYQ== IE1lZXQ= IHdyYXBwZWQ= IHNhbXQ= IGVyaGFsdGVu UGxvdA== CiAgCg== IFRvZG8= 0YPQtdGC0YHRjw== UmVjaXBl 2LHZhw== IHNlYW0= Ojpf IG11dHRh PCE= 7YyQ INGB0L7RgdGC0L7Rjw== d2I= cXM= LnNldHRpbmdz QWZm KCkt Y2hhbmdlZA== bWF0ZQ== INCQ1KXRgdC90Ys= LWRlZmF1bHQ= 0L3QuNC80LA= INWw1aHWgA== IGVtb2M= IGJyZWVk 44GT44Gu IENPUFlSSUdIVA== eWI= LkdFVA== IFpvbmU= INmI2KfZhNij XE1vZGVs IHN0b21hY2g= b3duZXJz Mjg5 cmljYWw= IGNvaXNh IGJlcnM= IGluZmxhbW0= LkJvcmRlcg== 0YLRg9GA IFByb2R1a3Q= aXNzZXI= IG1hdGhlbWF0 7Z0= 4LK+4LKX4LK/4LKm4LOG IGFic2VuY2U= 4K+I4K6v4K6/4K6y4K+N INmG2Yg= MzE4 Y3JpcGNpb24= LWZpbGU= ZXh0ZW5kcw== MzU4 5qC5 4YOQ4YOg4YOi IFRocm93YWJsZQ== X2ZpbGVuYW1l 6K+N LUk= aWVnbw== 4YOQ4YOV4YOo IG5kemk= b25j YWN1dGU= UFJF UmV2aWV3ZWQ= 44GE44G+44GZ INC/0L7QutCw0Lc= CXNpemU= 55eF INmB2YLYtw== IEJvdw== IGltbXVuZQ== IOC0uOC1jeC0tQ== 4LS/4LSu VFJB INi02YfYsQ== 5bq3 TWFya2V0 IGjDqA== IGlnbm9y aGFyZA== 656R INC60L7Qtg== IGFjY29tcGFueQ== QU1FUw== CXN0 IHRpbWluZw== INC/0YDQtdC/ U1RBTkNF IHByb2Jl IGJ1bGxldA== IHTDqm0= YWxpZ24= aWFq cGFn IGTDqXQ= INmE2KM= 44O844OJ z4POuQ== IGF1ZGl0 57O757uf IENBTg== LklTdXBwb3J0 IG1lbGw= LkNvbmZpZ3VyYXRpb24= IGVudGl0bGVk SGlz Mjk3 IERhdmlz Lmxpbms= IHByZWNpb3Vz J2F2 cm9zdA== b3VyaQ== U3RhbXA= IGJld2U= IOCmqOCmv+CmsA== bGVldA== IGJvYQ== IOC4l+C4teC5iA== IHThuqFp IOCkheCkrQ== WUVT IEhhbnM= 0LDQu9GM0L3Ri9GF IGNlcnI= IGh1aWQ= U2hpcHBpbmc= 0LjRh9C10YHQutC40YU= 55WZ 4LiU4Lil4Lit4LiH IOCkleCksOCkqOCkvg== IGZyYW5jaGlzZQ== 66eQ 1aXWgg== QGludGVyZmFjZQ== IGZpbHRlcmVk LkludGVudA== dWxhcmVz IGdhdA== IENvbnN0YW50cw== IOCwmuCxhg== 4LCV4LGN4LC3 4KSw4KWN4KSf IE5U IEF0bGFudGE= 4YOn4YOV IE9yZWdvbg== 55+z YWd1YQ== KSgo IHJvdGF0ZQ== SnM= NDEy IFRlbXBsZQ== 0YTRgg== ZXRybw== IGxlY3R1cmU= IHJveWFs 4Ka+4KaW IGNow6w= IEluZm9ybWF0aW9uZW4= KGZpcnN0 LXNwZWNpZmlj KGRpcg== YW5lb3VzbHk= IER1cmNo IGluZGljYXRvcg== IFNpeA== X2F1dGg= NDE0 LmNvbmY= aGVsYQ== Kg0K 4Z6i IGluc3BlY3Rpb24= 0LDQu9GM0L3Ri9C5 CXk= IGNvbWJv INKb0L7Quw== IEhvcg== pOWHsA== IGFsYQ== 2LHYrA== aXRzYQ== cHLDvA== IOGDruGDlOGDmg== IOWkqeWkqeS4reW9qeelqOS4rQ== IHNvbW1lcw== LnBheWxvYWQ= Lkhhcw== Q3R4 ZW5jb2Rpbmc= cmlkZXM= IG9wZXJhdGVk IFBhcnRpY2lw TWlncmF0aW9u INC+0ps= IEFkdWx0 W2E= INC30LDRiQ== IFBhdGllbnQ= YWxzbw== IHNoZWQ= w7puZw== IOCktuClgeCksA== IGRpcnR5 IGRlY29kZQ== IHBob3RvZ3JhcGhz 2YTYp9ir IOCmheCmrQ== LmRvY3VtZW50 IGltcG9ydHM= IEJyeQ== YWNldXRpY2Fs dm9k IFZBTFVFUw== 0LjQsdC+ LmNoaWxk IExlZ2Fs INmE2YM= IG1vZGVz IO2VoA== INC20LXQvdGJ VG9t emM= IOCkleCkvuCksOCkow== 6L+w 5b2x6Z+z5YWI6ZSL a2VsZXRvbg== IG9mZnJl INiz2YU= IG5ldHdvcmtpbmc= MDE5 bmVk aXNpw7Nu IHNldWxlbWVudA== IGVtZXJnaW5n X3dvcmQ= IGludGVsbGlnZW50 YmVo IOyiiw== Mjk0 SURz IEJhdQ== INiq2Kg= IOyVjA== 4oCN4LSV4LWN4LSV 4KeM ZW5zaXRpdmU= INCz0L7RgNC+0LQ= ZGphbmdv NDkw INqa IGJlc2NoaWs= IHNwYXJl cGVlcg== IE1pbGxlcg== 4Z+S4Z6a VmFyaWFudA== IEZhdA== 5qQ= XV07Cg== dGhyb3VnaA== 5paX IGZ1bmc= 0Y/Quw== IHJ1bnRpbWU= 5YWF5YC8 bm/Fm2Np 4YGLCgo= IHByb3BvcmNpb24= IGFnZWQ= aW5ndA== 4KuN4KqV IOCkuOCkleCkpOCkvg== aXZhbg== IERFQlVH ZXRoZWxlc3M= IGFpbWVk YXJuYQ== 2LHZg9in2Ko= IFJ1bGU= 0YHQuNGP 2LPZhA== IEJpdG1hcA== IHF1ZXJpZXM= IHF1YWxpZnk= INC90LDQv9GA0LDQsg== ODgw INi02YXYpw== YXJlbW9z Y291bnRlcg== IGFuZ2Vy IE9yZ2FuaXphdGlvbg== IFRyYWlu IOGDpg== IGppcg== IHZlcmJvc2U= 2K7Yp9io IHZhcmE= YDsKCg== IGFwcGxpYW5jZXM= TWV0cmljcw== U29mdHdhcmU= 4buRYw== KGZyb20= IGVjaA== IHJlbWFya2FibGU= IFNhcmFo IHNvY2nDqXTDqQ== R3Jl LkFwcGxpY2F0aW9u 2LHYqNmK INis2K8= IHRlcnJl 16nXldeq ZW50aW5l IHRlcmM= em9vbQ== IHByb2N1cg== IE5vdGVz Q2FyZQ== RmlsdGVycw== IFNlYXR0bGU= IFRvbnk= IOeZvg== 5Yaz INGB0YLQsNCy IGRpc3BvbmlibGU= NDQz bW92 INKv0Yg= INC80Lg= YmF1 U2xpY2U= 0LDQu9GM0L3Ri9C1 c3RkbGli X0ZS IEZpcmViYXNl 6Iu55p6c IHJlc2N1ZQ== IHt9LA== 7ZWY6rKM 5oqK ZWRpcg== IOqysA== IEhhZA== W3Q= 5ZOl IOC0uOC0rg== IOq5 IGRhZsO8cg== cHJlZA== 4LS+4LSX LXN0YXI= IGRlY2xpbmU= IGVuZnI= aXN0ZW1h IGRlbGl2ZXJz 4Ki+4Kiy IOC0leC1ig== CXRlc3Q= xIFt RGltZW5zaW9ucw== IEJU PjwhLS0= INmI2YTZg9mG b3Js 0L3QsNGA IGludGVydmVudGlvbg== IGfDpXI= IHJhcmVseQ== IFRhaw== QWxpYXM= 5Li+ 4Lap IGFycml2 YWxkZQ== IEZVTkM= UGVuZGluZw== 77yO 4LSk4LWN4LSk4LWG IGRlY2lk VHU= XCIs LmhyZWY= IHFhYg== IG5hdMO8cmxpY2g= INGD0YDQvtCy IGF1am91cmQ= IGRvZWw= IGxhdW5k IF0KCg== INC90LDRhdC+0LQ= UEFDSw== dGF0 YXN1 IGFuw6Fs IEdsYXNz IGJlZXQ= 0LjQt9Cw0YbQuNC4 dWdo IGhlbW9z 4Ka44Kau IE1pc3Npb24= L2k= dmlkYQ== KCIuLi8= 27U= b25hbA== INGD0L/RgNCw0LI= IGliYQ== IG1vdQ== IHBvYmw= IENvdW50ZXI= Y2VkZXM= IE5VTQ== IOCosA== IHR5cGVkZWY= IGJlbGw= 7Lw= 0rXQsA== IHBn IEdpZnQ= VEVSTkFM L2Rl PDw8 dGltZW91dA== SU5ET1c= ZW1idQ== 0YDRg9C2 X3J1bg== IE5PVEU= 4KSm4KS+ IGRvd25sb2FkZWQ= IE5CQQ== T2w= b3NwaA== IGNvbWVyY2lhbA== INep16A= IEZpbGVz INmE2YPZhg== 4Z6c IFJBTQ== yrth 0YHRgtGA0YPQug== zrzOsc+EzrE= aWtrdXQ= IENPTkZJRw== IEludg== IHJhbmc= IGFwcmVuZA== Y29sZQ== IHN0dWs= IHPDuw== XC9cLw== b3VzaW5n Y2hhcA== MzI2 4LK+4LKj cG9zaXRpb25z b2xlc2M= IGdyYXk= KGV2dA== QU5B Ym9n IHByb2R1dG8= IHJhbmtlZA== cno= IGhpbGw= IHBhc3Rl IE1hbnVhbA== S04= VGFibGVz IHJlZ3VsYXRvcnk= IHRyaWFscw== IHZpZWxlbg== 0YvQu9Cw0YA= IEludGVs Lz8= IGF0dGFjaG1lbnQ= w5U= ZXJkaW5ncw== 2LLZhQ== IGRyb3Bz IG11aXRhcw== IHBlcsOtb2Rv IHBhZ2s= bGVhc2Vk 4LGN4LCy4LGL YW5kYWw= b256 w61kbw== Q3JlYXRvcg== IHdvcm4= IHRoZXI= fSk7DQo= w6lyaWVuY2U= 2r7YsQ== ZXR3ZWVu IOq3 IEJB UHJvdg== IGV4cGVyaQ== YXZ1 QVlT RmFzdA== 0LbRjA== IOCusA== IG1q IHBheg== X0FSRw== IHRpbWVseQ== Vmlld2Vy X21ldGE= QXBwbGU= IGFsaw== U3RhdGlzdGljcw== bmVudA== TsOjbw== 4LC+4LCX IG5pamU= INCz0L7RgtC+0LI= IGdpYmk= dmFsaWRhdG9y IHN0aXI= 4YOY4YOa4YOY4YOh ZW5kcmE= INmF2KfZhg== 0Y7RidC40YU= IOKc LnNlbmRlcg== IOab IHJlZ3VsYXRpb24= U2Vuc29y 15XXkdeU QVJN INeR16E= IHPDqWN1cml0w6k= INGB0YLQsNGC0Yw= INmI2K0= NTcw 4K+I4K6V IEF2ZQ== IOGDm+GDmOGD 7YKk IHZpdm8= IFJhaWw= 0YHRgtGA0L4= IGNvdXJhZ2U= T3Jn VVRUT04= IGxhcmdv xLFuxLF6 LmNvbW1hbmQ= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= LkVu IGRvbm5lcg== IGRpZsOtY2ls IEhFUkU= IHZveg== 0L7RgNCw0Y8= INC/0YDQsNC60YLQuA== 4YOY4YOj4YOg IGZpbmdlcnM= LkV4ZWN1dGU= 7LaU TElFTlQ= Zm9sZA== IGFjdG9ycw== 4LmK IGJha2Fs IGNvbnN0cg== IG1leA== dGI= IOWFjei0uQ== 2LbYp9mB 4YOg4YOr INm+24E= 0LXQu9C40Yc= IEFtb25n IG9jY2FzaW9ucw== dXNzZQ== VHJhbnNsYXRpb24= IGxlYXNl IGNvbmZlcg== IG1ldGFib2w= IE5hdmlnYXRpb24= dHJpYnV0aW9ucw== 4Z6K 0LjQstCw0YLRjA== IG56 IG1vdW50YWlucw== IG91dGxpbmU= 0LPQu9GP X1RSVUU= IGJi IGRpc3M= Uk9M IHB1Ymxpc2hlcg== IGVuZ2luZWVycw== wrE= 4Li04LmC4LiZ 0LjQutC+0LI= IHJlbGHDp8Ojbw== IGJ1c2Nhcg== IGdyb25k 5YaZ TGlt IGppbmc= IOCkluClh+Cksg== U29s ZGlzcGF0Y2g= INmF2LnYrw== NTAy 4Kaw4KeH IHNlZ3Vybw== IGdyb8OfZQ== PXM= 2bnbjA== LW1vZA== ICIq aWduZXI= IGV0aG4= IFNob3BwaW5n IFBhbGVzdA== INGN0YTRhA== IOCkrOClhw== MzY2 IG1pbmRz bXg= IHdvcmtwbGFjZQ== IHNhY3I= IGRldmVy aWNrZWQ= IEFuaW1hbA== 4Ke3 IGxi 5rK5 IEdlbmVyYXRpb24= UE9T dWdp 55Sf5rS7 IHRyYW5zbWl0 6re8 ZWxpaG9vZA== SW5uZXI= cGVhcmFuY2U= X2Nvbm5lY3Q= IE9zYw== Lio7Cgo= IE5hcg== 7JeG IEVuaA== TGluZWFy IFdlYXRoZXI= IG92ZXJzZQ== MzQ0 INCy0LjQtNC10L4= IEV4cHJlc3Npb24= IExDRA== 4Keq dGltZXM= IMOpbGVjdA== Y3VycmVuY3k= IEZlcnI= ZmVpdG8= 4KS+4KSJ4KSo 0L7QutCw INmB2Lk= IOGAmQ== 5YCL IERlY29y YWxsb3dlZA== bmF0 0LXRgNGM LW5hdg== IGRpYW1ldGVy ZGluZw== dm9q aWNhw6fDo28= IOybkA== ZXR0ZXM= INC20LjQt9C90Lg= LkxvY2Fs YW5pYw== ZW1lcg== IGVkdQ== YWRhcg== 0YDRi9C8 4Ka/4Ka3 cmVnYXI= IHRlag== IENoYXJ0 YnVpbGRlcg== INmF2YTZig== IFplcm8= 1avVuQ== aWRlbnRpZmllcg== LWZ1bGw= b2RpZXM= Y2tl 55S16IQ= ICgl IFN0YXRlbWVudA== IHdlaWdo IGZpbmFuY2luZw== IFJlcXVpcmU= IOC0pOC1geC0nw== IFNhZmFyaQ== 4KWN4KSe IGVydmFyaW5n IOGDo+GDpA== KG90aGVy bGFyZ2U= 44G+44GX44Gf YWNjacOzbg== xI1ubw== 0LvQtdC60YE= IExH dmVydHM= cnVsZQ== ZWNlcg== ZmVzdA== IOCkuOCkvuCksg== IHZlbnRh IG1pbnM= IHRpcG9z 4YOg4YOY4YOh 15DWt9ec RHVy 0YHRgtGD0L8= 4bq/dQ== Qmxhbms= IGNhcHR1cmVk aXlvcg== LmVycg== ZXJtaW5l LUlu X2JhdGNo cmVtYXJrcw== IF9fKCc= IHByb3ZlZA== IG5ow6A= IOCqpeCqrw== IOCupOCvig== b2d1 IOCkleCkiA== LkxFQURJTkc= IOCmuOCnjeCmrA== IHByw6FjdA== IGdyZXk= IEZvcmV4 5bCE dHY= Qkc= L2F1dGg= IGRpbmVybw== IG1vxbw= IFN0cmF0ZWc= bG9wZQ== eWFuZw== IFN0YXk= aWJpbGU= IG1lZGlhbnRl NTAz IHRvdXJz 6Zu75b2x emFr IGNvaXNhcw== UExJQ0FUSU9O KCkr Lm5hdmlnYXRpb24= a2V6 4K6q4K+N4K6q4K6f4K+N4K6f Xig= MzM5 6raM MzQy LikK IE51bGw= IGFicm9hZA== IGtvbm50ZQ== LnJldHVybg== IGFjcXVpc2l0aW9u aWpvcw== MDI1 IO2bhA== LlRpbWU= IEFubnVhbA== NjAx RmluaXNo IEhJVg== Mjg3 INee15E= IGNhZHJl V2VzdA== IGludmVudGlvbg== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t VGlja2V0 UEY= IGZyb3plbg== 4KeH4Ka4 16LXlA== IEFkdmVydA== 0L3QvtGB IExleA== IOCkhuCkow== 0q/Qvw== IHdpc2RvbQ== IGRpYWxvZ3Vl 5YiG5p6Q SmFu IGFqdXN0 44Op44Oz 1aHVqg== IGRpc3Bvc2U= IGjDpHI= aWpuZW4= aW1lZGlh IGJhbGxz w6lyaW8= dWxpZXI= IENvbXBldA== dG9nZ2xl IHJlZ2ltZQ== aW55YQ== IFN1YmplY3Q= RWxlbQ== 5aW5 IEVkdQ== U2FsZQ== IGluaXRpYXRpdmVz IGdlbmV0aWM= IGRpZW4= IEJpbmFyeQ== 4K6Z4K+N4K6V4K6z4K+N VVRD 25XYqg== IGVudGVydGFpbmluZw== IHNpYw== IGNhcnJpZXI= IENhbWI= IEZpbGw= 4buHYw== IE1J acOnw7Vlcw== IMOhZ3Vh IFtdOwoK 0LHRgw== IHRveGlj YW5zbw== IHpt Um9sZXM= LnNs IElFbnVtZXJhYmxl IGTDqXBhcnQ= 6YeH IFLDvGNr Y2hhcw== IOyepQ== Sm8= IGFwcG9pbnRlZA== INei15M= J30K 4Ka+4Kao4KeH IE1hc2s= IGNvbnNlY3V0 aXNobWVudA== ZXJtdXQ= VHJp IOCkrOCliA== cmVmcmVzaA== YWFx IFRoZXJlJ3M= X3JlbA== IG11bGE= 2YLYqA== IGVsZW1lbnRvcw== IHNoaXQ= 4Liy4Liq4Li04LmC4LiZ c3BlY2lhbA== dWF0aW9u IOWG 4Lix4LmI4LiZ IGthcmVuYQ== 16nXnA== IG9wcG9zaXRpb24= IG91dHB1dHM= IFJlY29yZHM= IGNlaWxpbmc= IHJlY29tZW5k ZXRzZQ== ZW5vcw== dWNoZQ== VGhyb3VnaA== IGFwcm92ZQ== IENoYXA= bW9jaw== INGB0LXQsdC1 4oCcSXQ= INC00LDQuw== IG1vdGl2YXRpb24= IERpcmVjdG9yeQ== IOC0qOC0v+C0qOC1jeC0qA== IOCmleCmsOCmpOCnhw== KHRhc2s= X3F1 IGRhaw== IHJhcHA= IHN1cGVyYg== YWZmZQ== b3Rvbg== ICoqKg== aW5uZQ== IG11aXRvcw== Z3JhZHVhdGU= IHZpZW4= 4YOd4YOg4YOb NjYw X2NoYW5uZWw= bGl0 cHJpc2Vz IOCmleCmvuCmsA== INiq2K8= IGZhcm1lcnM= IHZvbHRhZ2U= IE5hcw== Il0p IGFzc29jaWF0ZQ== 5paH5Lu2 IHRlbXBvcmFkYQ== IEJsb29k 4oC7 IGVzcGVjw60= b2dy YWNoYWRo IE1hZQ== IEJlZ2lu INee15M= IHNhbmdhdA== IFNjZW5l 4Kq3 cmVzbw== aWxpbw== b3NwZWw= cnVpdA== YWNodXNldA== 4Kq+4KqT YXJsbw== IGNhcnBldA== 2YnZhA== YWRlc2g= cmVndWxhcg== dmFycw== IEJhYg== IGN1ZXJwbw== 67O1 dW55YQ== IGjDpQ== IOCyueCyvuCylw== IHByb2ZpdHM= dG9waWM= IHNhxJ8= IEFuZ2Vs IHNlcGVydGk= IHNwaW5z INGC0LXQu9C10YQ= Y29uc2lu LmFtYXpvbg== IHBhbGF2 IFBST1ZJRA== PSck dGVtcGxhdGVz IGFtZW5k Lmdv d2FnZW4= YWRkZW4= YWNodXNldHRz IGR1bQ== IGhlbGVtYWFs IGVzdHVkaQ== iKw= IGlkZW50aWNhbA== IFZS 4KSw4KWN4KSc IOCkpuCljeCkteCkvuCksOCkvg== IHNlcmlh IENvb2tpZXM= IGVua2VsZQ== Y292ZXJlZA== LXNpdGU= IGJhY3Rlcmlh IGJ1c2M= 57yW6L6R KHN0ZGVycg== IFtdCgo= Lm1hcms= IGV4aGliaXRpb24= TE9U IGJlaWRlbg== IFNpbW9u IHRr IGZhc3Rlc3Q= IHZvb3Jk IGV2aXQ= IERvbm5h Zmx1 QmxvY2tz PE9iamVjdA== d2Fw 4L0= aHVi SlNPTk9iamVjdA== IFBobw== 4KSw4KWN4KS2 SmFudWFyeQ== IMOv IHRvbmc= Y2ltaWVudG8= IHRhYmxldHM= YXRlbQ== 0YfQtQ== 5p6E ZWRkaW5ncw== 2KzYp9iq IOCuh+CuqOCvjeCupA== 0YbTmQ== X0lQ IGNvbmp1bnRv cGVyaW9k IE1PRA== aGVsZA== ZW5kZXo= IHJlc3VsdGVk ZXN0YXM= IDw+ IEdN SnVs 2YPZitip UXVlc3Rpb25z IGxpZ3Q= IGJhbGFuY2Vk LWFu IGh5YnJpZA== IHZhY2NpbmU= IGludGVsbGVjdHVhbA== IHdpdA== IFVJTlQ= IOCuquCunw== TG5n IHByb2R1a3Q= IEltcGxlbWVudA== 5qyn 4oCZw6A= KHdpbmRvdw== bW91bnQ= 44Gd44Gu IGRpc3RpbnQ= NTI1 IGVuY3VlbnRyYQ== IE5hdGlvbnM= IGFzc2F1bHQ= YXJpdW0= YWJpbGlkYWQ= 4KqH IHZvbGxlZA== 4KSC4KSq IHNlcnZpw6dvcw== IGRlc2Nvbg== IHNpaXM= 4LSx4LS/4LSv IHRlbmVtb3M= KGVtYWls L2ljb25z 4YOT4YOU4YOR4YOQ IGRpc2NpcGw= LlhtbA== 2LjYsQ== IGhhdw== INmE2KPZhg== IENoaQ== IFRoZWF0cmU= 4buldGE= IEJ1cmVhdQ== IHNpdHVhY2nDs24= b3V2cmly UkVBTQ== 5qC4 IExlbmd0aA== Y2Nh UE9SVEVE IFdlZw== INCw0L3QsNC7 IOCkieCkqOCljeCkueCli+CkguCkqOClhw== bW9vdGg= VEk= YWNjb3Jk X2xhYmVscw== OTIw 6a0= dW5maW5pc2hlZA== IGV0ZXJu IOCkleCljeCkt+Clh+CkpOCljeCksA== INiv2YjZhg== PGh0bWw= IGJlem9law== IOCwleCxig== ICJcIg== cmVmZXJlbmNl IHJlbGFjacOzbg== IOCmj+CmsA== IEhlbGxv IGZpcmVk IGTDpHI= 5bqc LkNvbmZpZw== IHByb2JhYmxl KG51bWJlcg== 562U IOCwheCwqA== KGxlZnQ= QXVndXN0 IOCkuOCkreClgA== IOWNjg== 5L2O b25lbg== XSxb ISEK 4Lid c2VjdXQ= IFlFUw== U3lz RGVzdA== ZXNvcg== KHdpZHRo IEVw INix2KbZitiz LnVz IGJha2luZw== IGZvYW0= INC60LDQvw== 0LPQsNGA ICQoJw== YmlyZA== 5L2Z w6bDsA== 4LSk4LWN4LSk4LS/4LW9 L2dldA== IFNjaWVuY2Vz IEJlaXNw CW1hcA== X2NvcmU= IGx3 IHBydWU= RmVhdHVyZWQ= INqp24HYpw== 44KD IGVsc2V3aGVyZQ== MzUz 572R57uc IGFubsOpZQ== NDE1 4KuA4KqP IHRpbGVz IHVuaXF1 INio2KfYtNiv IGNvbGFib3I= INGA0LXQt9GD0LvRjNGC0LDRgg== IOG7jXLhu6U= 1bjWgtW11bY= IGF1cmE= IERvdw== LnNlcnZpY2Vz IFVyaQ== IFVi xIFy d2VycA== 5bqV IG5vdGE= 2YHYqQ== 1aHVo9aA IGxpdHQ= 4YOj4YOo IGFwcGFydA== 2qnZiA== 2LTZig== IGJvdGhlcg== MzM4 IGJ1bmQ= 5Z+f bGlzdHM= RGlzcGF0Y2hlcg== 44Kk44OI 5peF IGPDqQ== IGLDoXM= IHRvaW0= IFRoYWk= UGxheWVycw== IGd1dGU= IGNlcmM= IGFkbWluaXN0cmF0aXZl oOmZpA== IHNldWw= INin2q/YsQ== TWFzcw== LiIiIgo= IHByb3ZvYw== cGFw IEFCQw== 4Lih4Lix4LiE4Lij CXZhbHVl KG9yZGVy IOyEpA== IOCwkg== 4LKV4LKw IENvZmZlZQ== Rkk= KGZl INec16o= 5LiN5LqG 5oyJ YmluZw== IOCkquCliA== INW01aXVrw== IGJlbG9uZ3M= 77yM6L+Z VW5pdHM= 4LSk4LWN4LSk4LS/4LSy4LWN IMSJ IOCkueCli+CkpOCkvg== IGNhbm5hYmlz IFFV IENvbnN0YW50 IFBhdHJpY2s= Um9sbA== IHNhbG9u YXRvcmk= csOl w650 6auU SUxURVI= IFByYWN0aWNl IGVuc2VtYmxl KGZyYW1l dW50YXM= IGplag== IGhvcGVmdWxseQ== amF2YXNjcmlwdA== IOGDm+GDkOGDkuGDoOGDkOGDmw== IHB5Z2FtZQ== INGC0YPRgg== INi02Yg= IGFkdmVycw== IEFyaw== IG5vb2l0 INCw0LLRgtC+0LzQvtCx IENvbG9tYg== 4KSc4KSo INC60L7RgtC+0YDQsNGP LmhlYWRlcg== IGthbGE= IEhvcA== X3N0b3Jl aXR0YQ== IHRow6BuaA== TWFuYWdl ICovDQoNCg== X2ZlYXR1cmVz emVucw== t6g= 4bq3Yw== Pz8/ IHZlcnNl w71hcg== fS8+Cg== INWw1aHVtdW/ IGZvcmE= IFJveQ== 4oCcLg== Lycs IHRhZA== IHByb2R1Y3Rpdml0eQ== ZW50ZW4= UHJpdg== IGlsyZk= IGhlYXZpbHk= INeT16LXnQ== 4KS14KWA SUNT dGVjaG4= X0FDVA== tJE= dWZlbg== fTo= IGhhbnlh IE91 65Ok7J20 IHfDpHJl IHNpZ25pZmljYQ== IOCwuOCwv+CwqA== cml0bw== IGNhZGU= IHsk IGNhcnJv IGF1dG9tYXRlZA== LnBpY3R1cmU= IGxpdGU= INin2LPZhNin2YU= INC+0Lk= 4LS/4LSk4LWN4LSw IGJsZXY= IMOpZw== RWRpdGluZw== IF07 bGludXg= IGlycg== YXN0ZXM= IFBhcmVudA== LnlvdXR1YmU= IGFsbGVtYWFs IFJhaW4= Y250 5aSx6LSl INuM2Yg= INmB2KXZhg== aWV4 IGJ1cmVhdQ== IE9yb20= IHZhcmlvcw== IGdob3N0 INio24E= IFNldHRpbmc= INii2YTYqQ== IHNvY2lhbGU= IHppbg== 4KWH4KSm NDA4 IOCql+CrgQ== dHdpdHRlcg== bWlkZA== YXRhdQ== IGFjdGl2aWRhZGVz 7ZWY6riw INm+2Yg= QXR0YWNr Y2F0ZWdvcmllcw== S28= 2LfZgtip IENsaW50b24= 15bXqA== ICIiKQo= MzQ5 z4TOuc66z4w= V3JhcA== 4LC/4LC44LGN4LCk dmFyZA== w6Z0 UG9wdWxhcg== X3ByZWZpeA== aWx0eQ== IGFuYWx5dGljcw== ICIsIg== IHNhbnTDqQ== IEFkZGl0aW9uYWw= 4oCD 67iM a2Fz YWNjdXI= UHJvY2Vzc2luZw== INCy0L3QuNC8 IGdlb21ldHJ5 IEFmZ2hhbg== 4LSZ4LWN4LSV dWrEhQ== V2FsbGV0 INGB0LvRg9C2 IHRyZW4= IG9wZXJhdGlvbmFs IFBoaWxpcHBpbmVz cm9ib3Q= MzUx 4LGN4LC44LGN IHJlcGFpcnM= L0c= TG9nZ2Vk 4Ki/4KiG IHR1bmc= RHJvcGRvd24= IFZpbGxh Pj4+ IENiZA== IM61zq8= IHRvZWc= INC30LDQutC+0L0= 64us 4LGB4LCC4LCm4LC/ UGF0aWVudA== IGFsZ3VuYXM= yZc= zrXPhM6xzrk= IGRldmVsb3BtZW50cw== LkFyZQ== INWp1aU= UGlj LnNlbGVuaXVt IE1ldHJv 2KfYqQ== IM68zrnOsQ== IGhhbmR5 Mzg2 IOGDoeGDruGDlQ== IHBhc28= IOC4iw== ICAgICAgICAJ INC90LDQv9GA IGZhbGxlbg== IHN0ZWhlbg== IG5lc3Rh OiM= IGJyZWF0 INGB0LjQuw== IHNpbmdpbmc= ICovfQo= INm7 IGhk dWtlbg== W3I= IGJlcGE= 4LWG4LSf4LWN4LSf IHBsYWNpbmc= IHJhbmdlcw== KHVzZXJuYW1l IGVudHJlcHJlbmV1cg== INGB0Lg= UXXDqQ== KGludGVudA== IOCqqOCqpeCrgA== IE1ldGhvZHM= LiI7Cg== INiq2qk= S0E= LnByZXBhcmU= 55yM RXh0cmFjdA== Z2V2ZW5z INiv2KfYtA== d2Vhaw== Lndvcms= 27Q= IGNyZWF0b3I= X0xFTkdUSA== IGN1c3RvbWl6ZWQ= 15nXmdeq w7xuZGU= IHJlc3RyaWN0 cmF2 IHN5bmNocm9uaXplZA== LnNob3VsZA== YXJiZWl0 INW01aHVvdWr1bY= INCc0L7RgdC6 aW1iYQ== 6L65 w4g= IOCkuOClgeCksA== IGxlZ2FjeQ== IGlkZW50aWZpY2F0aW9u YXNoaW5n IENoYWxsZW5nZQ== T3JpZW50YXRpb24= LmRpcg== IGltYWdlbg== INGN0Yg= IEFkb2Jl PHRo IGNvbnRyYXQ= IHLDqXNl IOaciQ== IGhlbmNl INin2LPYqtmB2KfYr9mH IGFuYWs= IEVn emFu bWFkZQ== IG5vbWJyZXV4 Y2xhaW1lZA== 5YCZ U3Vic2NyaXB0aW9u IHBlcnNpc3Q= IGdlaGVu IG1lYW5pbmdmdWw= IEVmZg== IGVycw== b21lZA== IFdhc3Nlcg== SW52b2ljZQ== eHM= INii2YU= 67OE w6lyw6k= 4YOd4YOR4YOh IOCohw== IHNoZWV0cw== IEpheQ== KCct IGHDvQ== OlNldA== IGFicmls TEI= IG1ha2Vy IGN1cnJpY3VsdW0= 5b6F IGluc2Fu ZG9z IFNhdQ== b3JyZWN0 IGFlc3Q= 2KfZhNin2Ko= bnI= IGhhYml0cw== IOCkuOClgQ== IHJlY3I= IENpcmNsZQ== IGF1Y3Rpb24= ZGlzYWJsZQ== dXJpb3Vz IFNjaGU= ZXJzaXN0ZW50 LlJlc3VsdA== Q0xB b2xhdGlvbg== 65+w IOGDmOGDpQ== INC20LDRgg== aWxvbg== IGNvdXJ0cw== 5rOi IGFzc2V6 IHbDrWRlbw== IGthbm5zdA== IGVtaXNzaW9ucw== INC40LTQtQ== IGZhw6dvbg== 7Jm4 06nQug== IGxzdA== IGFjY3VzZWQ= LOKAmQ== IEZseQ== IGxva28= IERlbW9jcmF0aWM= X2RlYw== 2YDZgA== IHBvdXY= IGRlc2VydmU= YXNjdWxhcg== 2KfYptix aXNlY29uZHM= INio2KM= IOuMgO2VnA== IHF1b2k= LWVmZmVjdA== 0L3QsNCz0LA= 0YHQuNC+0L0= 5pmu IE1pcw== J2Vz IOCuteCvhg== 4LCm4LGN4LA= YW1iZXI= b25uZW4= SVNP KEdldA== 2YbZiA== IHRob3JvdWdobHk= ZXJzdA== IHVwZ3I= IFVSSQ== IOGDk+GDkOGDmw== VHJpcA== YW5kaXNl aWprcw== IEFsbG93 INmF2Yc= IOGDm+GDneGDmw== MzI5 IHNlY3JldHM= IG5vcnRoZXJu 6ZiF6K+7 zrnOus6s cHJpdA== IGt1ag== CWNhdGNo IFJpbmc= a2FtZXI= 57uN fSku IHdhbGtz IHJlc3RhcnQ= X0JP W3N0cg== IGFsZ3VuYQ== X2dyYXBo IGdvdmVybm1lbnRz INWh1b0= c2hp KGZvcm0= 0LrQvtC1 Kzo= 6LSj5Lu7 dG9kbw== 2K/Zhdin2Ko= LmhpZGU= IERJWQ== IOqyjA== IGZhdGFs IHpvdA== aW5jbHVkZXM= Y29zdA== QVNTV09SRA== INee16g= aXJhYmxl IHRvdXJpc3Q= IGhvcw== IEZpdmU= RGVjb2Rlcg== ZWxsaWdlbmNl INC60LDQttC0 IG9mZmxpbmU= ZXlp 77yJ44CB 67k= 5ZyL CWF1dG8= X2ljb24= IGNocm9t IGNob2lz R2VzdA== IEFudGk= IOCkleCljeCksA== INiq2LnYrw== Tm9ybQ== c3PDpA== CXNj bG9hZGVk IHh4eA== LWNlbnQ= 0L7Qu9C+0LY= LnVw NDM1 X3llYXI= b2dn bG9nb3V0 fTsNCg== 0YvRgNCz IGNyaXN0 LWxpZ2h0 4bg= LXdpbm5pbmc= IHVpdGdl IGdlbmF1 IHdz IGJyb3RoZXJz IOqyveyasA== IGxldHp0ZW4= LmZpcmViYXNl IGJ0 IFByb3ZpZGVy IHByZXNlcnZl IGdlcA== IHVsbA== KE1hcA== U2ls IEh1Yg== 4KeB4Kau IOWS IGhhYmls IFNlcnZsZXQ= IHNha2E= JycnCg== 66g= RHJpdmU= IOuUsA== IHDhurlsdQ== UFRZ w6RubmVy d2FuZA== 2YjZhtin aXphZG9z 5pu4 ZGln aW5pcw== IERPTQ== 0YLQuNC5 IGPDtHTDqQ== IENlcg== VGhyZXNob2xk aWZpY2Fkbw== IEZsb3c= IOCkuOCljeCknw== NTEx 0LHQtdGA IFRlc3Rz IGFyY2hpdmU= IGNoZW1pY2Fscw== IOCqquCquQ== IGdpw6E= ZW5lcmd5 dnA= ICAgICAgICAgIAo= ZXN0ZW4= RnVuY3Rpb25z YWxhcnk= 44CA44CA44CA44CA44CA44CA44CA44CA IOCkueClgQ== 5ZGz INC+0LHQu9Cw0YHRgtC4 IGFkZHJlc3NlZA== IE9C cm9wcw== LW1vbnRo bmlrYQ== IGNyZWFy IG1laW4= IHBzeQ== IExpbmtz TEVU IOCkpOCkpeCkvg== cmVkaQ== IEFyYmVpdHM= TkVX YXZlcmFnZQ== bGVtbWE= IG55YQ== Vm9vcg== dGhleQ== IGNvbWVkeQ== IG1lc21h LkNvbm5lY3Rpb24= LmVtaXQ= RGlzYWJsZWQ= xaHEjQ== IGluYXVn IGNvbnN0aXR1dGlvbg== 5Zub6Imy IHRlbmRlcg== 0YnQtdC1 IGLDqW7DqQ== MzU3 w61r IGludml0 IE1hcmc= KHNw IeKAnQoK IOC5hOC4lOC5iQ== IFBpYw== IHRlbm5pcw== Q2VsbHM= IEV4cGVydA== bWV0cnk= LcOqdHJl 0YLQsNC5 5pm6 ZXJ2ZXM= aWVuZGE= z4PPhM61 RmluaXNoZWQ= IGNoYXJt INC20LDRgQ== KERhdGE= IGF0ZW5k IHNoaXBz Y3JpdGVyaWE= IGN1cmlvdXM= X2Rpc3BsYXk= IGJla2VuZA== bWV0YWRhdGE= IGxvY2FsbHk= 56eS cHVua3Q= NTA0 IG1hcmtldHBsYWNl INC606nQvw== ZXRyaWM= Um91bmQ= X2Jy QkFDSw== QXU= IGJpYg== IOuwsA== IG51aw== YWR6 IGJhcmQ= IHN1aXRlZA== IGp1bQ== X0lOSVQ= X0ZPUk1BVA== RU1QTA== INmG2YU= IGJ1c3Q= IGRlYXRocw== YW1iaQ== IG1hZ25ldGlj LmFyZ3Y= INGB0L7QsdGB0YLQstC10L0= cmFjdGlvbg== Iik6Cg== aWd1dA== IEljZQ== IGFuamV1bg== LmVz zrTOsQ== IHN1cnJvdW5kZWQ= w6lsaQ== 4oCZYW4= LHI= 4Li54LmI IGhhdXY= ICk6 Ow0KDQov INC00LXQvQ== YXR0YW4= UGFyY2Vs w7ZycGVy IFBvdw== LlJvdw== INin2K8= IGxvbw== IFNheQ== bm9tZQ== IHZlcw== YWNpamE= ODg1 IHV0aWxpemVk ZXJtaQ== IGR1YQ== zrvOrQ== 4KuH4Kqy4Kq+ L04= INeQ16DXmQ== IG5o4bqldA== U29ycnk= IEFwYXJ0 OTgw X3Nob3c= IGJlYmVy 4Kq+4Kqh IHRlbnNvcg== IGt0b3I= J8Og PGxpbms= 0LvQuNC3 IMOpY3I= IOy2nA== INWn1aw= KHVu IEJ1bGw= Y3Vzc2lvbg== 06nRgg== aW9zbw== IikpKTsK INmE2b4= IFph 4YCW YmV0YQ== IHLDqWFsaXM= 6L+U5Zue 57uG aXR0ZXN0 dWl0bw== 4Kyw IFZhYw== b3ZhdA== dG9z Q3JlYXRpb24= NDE2 OlwvXC8= IG1vb2k= dXZyZQ== IGZhYnVsb3Vz dW5hdGU= IHN1Zmlj IEhhcnQ= YWJlcg== IHNlY3RvcnM= 772l 1bjVrQ== Iilb IGJsaWp2ZW4= V08= 6K2m SEM= 6ams5Lya ZGVk IGZhc2NpbmF0aW5n W3NlbGY= PEM= LWJpdA== Y29uZGl0aW9ucw== PXsK IHNwZWNpYWxpemVk L2xvZ2lu IGFzdHI= INCy0LvQsA== aWphcw== IGNvdXM= 2KfYptiv 0LjQsA== amVjdGlvbnM= IHRlbGV2aXM= IHNlZ21lbnRz YnVybg== 4bqlcA== IH0KCgoK IG5lcnZvdXM= IEpvc2g= bGM= IM69 IGVsZGVy X0NPTE9S IE1PUkU= IHJ1c2g= IGltcGFjdHM= IG11c2U= IGZyYWN0aW9u IGTDpQ== LkZpZWxk IGltcG9ydGFudGx5 IHByaW50cw== INGC0rE= YW5uZXM= dHJv 7JuM KGNvbW1hbmQ= 5b2p56Wo572R ZW50aA== CXRlbXA= TEc= IEplZw== 6LK7 INmF2LXYsQ== IGFmZmVjdHM= a8O2 IGR5c2Z1bmN0aW9u IE9mZmljaWFs IOCwrw== 1YY= X2l0ZXJhdG9y X1RBRw== zqzPgQ== IGRlbmVu IGFsdW1pbnVt 0LXRhtGG0LA= XSkNCg== IGRlbmllZA== IFNlZA== IGNo4buJ UERG Mzcz IHJlZ2lzdHJ5 LdGB SU1FUg== IHZpbmU= IGFhbmI= IGRpc2FiaWxpdHk= IEF1dGhvcml0eQ== IEJNVw== IG1vdmVtZW50cw== IG5ha2Vu 4KSw4KWN4KSV INin2YTYpdmG 2LHYp9mG a8Ok IHBhcnRpY3VsaQ== dXJhcg== ZmFpbGVk IGNhbmNlbGxhdGlvbg== IEJvdQ== 15nXoNeU MzQ2 KHNpemVvZg== 0L7QtNGL c3ltYm9s LmxheWVy IGFycm93 IEZ1bmM= cGF0aWVudA== IEphc29u IE51bQ== IOCknOCliA== dWx0ZQ== RXNz IG1leg== IHR3aXR0ZXI= U3VwcG9ydGVk INC30LXQvA== QVJJ IHByYXk= IHN1Ym1pc3Npb24= KGFzeW5j IMOX IO2YhA== LkFzcA== IHBhaW50ZWQ= 4KSo4KWN4KSk dXRkb3du 4LmA4Lit IEthbnNhcw== IHBhc3Rh IFBoaWxhZGVscGhpYQ== Y8Sx zr/Phc68zrU= X3JlcG9ydA== 0LXRgNGF IG5lcg== 65Y= IExhZw== Y2VyeQ== MzU0 LkVuYWJsZWQ= INeU15nXlA== Oj0= IHlhbmE= 55uK 2KrYtQ== IEFncmVlbWVudA== IHNrdWxsZQ== X3VuaXQ= IOC0quC1jeC0sOC0pA== IGJlcm0= IHJlZmxleA== IGRpbWlu 4Kq44KuN4Kqf PG4= LlJlZ3VsYXI= IHNwYW0= IHBhcnRpY2xl Tm92ZW1iZXI= IGluc2VjdA== 0YLQuNC8 VFg= IGtvamU= b2J1Zg== IG5hbWE= IHN0dXBpZA== LkhlYWRlcg== IHNsaWRlcw== IEdlbmVyYXRl IG9yZ2FuaXNhdGlvbnM= LnJlc3Q= emVt IGRpc29yZGVycw== bGluZ2Vu QmE= cGhp w7PDsA== 5b2p5bmz5Y+w IGNvbXBsZXRv IGdldm8= X2ZsYWdz TU9O dXJuYW1l IGhvcnJvcg== Y2hy 4oCy IEdVSQ== IG9icmFz YW11dA== 4LWB4LSV4LWN4LSV dGh1cg== 2qnYp9ix 0LXRgtGL IGtyaXQ= 4LOC4LKw4LOB cG9zYWw= 0YfRgw== IHZvbHVudGVlcg== IGhp4buHbg== LmdlbmVyYXRl INi52KjYrw== INiv2KfZhg== LlNwcmluZw== cGVr LmFjY291bnQ= b3JvdXM= Mzg1 IOuYkA== IGtlbm5lbg== IHlheg== LWljb25z 2YjYp9iv IHNlcGFyYXRlZA== cmVkZW4= aWZmcw== YmVhdA== IGJvbnVzZXM= IGluZXY= dW5rbm93bg== IHByemV6 aXN0b2lyZQ== INin2YTYqtis bHY= IGxpZGVy 2LPYqtiu2K/ZhQ== 5om+ IHJlc29sdmVk o+GDoQ== RGl0 IGFnb3N0bw== YWZmZW4= bGV0aWM= dW51dA== IGluZm9ybWF0aW9ucw== cmVpYg== INC+0Ls= IHdhYQ== IE1hbGF5c2lh IGFwcHJveA== IHNvbGRpZXJz IVw= IG5vcnNr INCy0LrQu9GO0Yc= xrDhu6NuZw== 55m6 IEJhaw== IGdhdGhlcmVk 77yW ISgi ZWRv INin2YTYudix2KjZitip 4KWN4KSv4KWC IG1hc2E= IHB1cnN1ZQ== c2Fu MzYz IGVuZW1pZXM= 2ZHZjg== SG91cg== IGZ1ZXJh IENvbGU= IGdlcmFkZQ== Y3Vyc28= 4Lir4LmM UGVlcg== aXNpbQ== IE1lZw== IGFwb3N0 aXN0aWNhdGVk IE90aGVyd2lzZQ== 0LXQt9C0 LlN5c3RlbQ== Z2F0ZQ== CW1vZGVs IHByb3NwZWN0cw== INin2YTYsNmH2Kg= IGNvcm4= INC/0L7RgtGA0LXQsQ== KEZpbGU= IHdzeg== INC/0ZbQtA== YXRoeQ== Tm9tZQ== LmNoYW5nZQ== IGVzcGFjaW8= INGB0LjQvA== ICAgICAgICAgICAgDQo= 66WY IEhlbQ== INin2YTYs9i52YjYrw== IHdpc2hlcw== IG1lZGlkYXM= aWRlbnRpdHk= YW5nbGVz fWApOwo= TWF5YmU= IOyCrOuejA== IGTDqXA= IOCkruCliA== 2YrZhtmK 4La44LeK YWxpbg== KTsKCi8= w6ts 44Ov IOCqruCqvuCqgg== IGNvbXDDqXQ= 6Zmp 4YOu4YOQ4YOT 7Y64 IGFjY2VwdGFibGU= IGNvYXQ= 4LK+4LKk IENhcnI= 4Ka+4Kal VVVJRA== 5ryP IHRobw== Mzcy 4LGC4LCw 0ZbQvdC1 YW5jaG9y MzQ3 Omk= INGB0LjRgg== IGFjdHU= 4LmA4Lib4LmH4LiZ SW5jbHVkZQ== 16LXmA== IE1N TGFi IGNoYWlycw== IHNjdWxwdA== 4oCZYXNz dWVzdHJhcw== IHBhc2Fy IG1lbWJy CQkKCQkK INCy0YHQtdCz0LTQsA== IERyYWdvbg== YXBwbGU= X01TRw== YmFj IGhhcnZlc3Q= Y2lkYQ== KGFs zrrPjA== IHRlbmc= KEJ1aWxk ODEw IGRlY2xhcmF0aW9u IGFudg== IGdyb3VuZHM= IFJ1bm5hYmxl IOC2tg== IG9wbGU= a2Vocg== 4Kis 4LSo4LWN4LSm IMOqdGVz 4KeN4Kak4KeB INC/0LDRgg== IEdlbWU= IOeOqQ== b29ucw== INeR16A= IGpldW5l 4oCZdQ== IERlYWw= c2xvdA== 0LvQvtC8 IGJ6dw== IG3Dqw== 546w5Zy6 IEFVVEg= YWthbQ== IEluZw== IFNldHVw NDIx X2FyZWE= IGxpYnJhcmllcw== c2NyaXB0aW9ucw== Lmp1cGl0ZXI= IEFubmE= IHpvbmVz IHN0YXR0 IHByb3ByaQ== Y2h1 IHZvbGF0aWxl b2JhbHM= IG11Zw== 77yM5L2G IGVyZWN0 4K+N4K6u IGNvbXByZXNz LkNvbW1vbg== b21ldHJpYw== xIY= INi52K/Yrw== IGJhYmllcw== IOiPsg== INC90L7RgNC8 2YjZitmE IHJlc3BvbmRlZA== 2LjYp9mF INiz2KfYqtq+ OnsK IER1YmFp 4KmC4Kmw aWxhcmx5 XT09 X251bGw= V2ll IENvbnN0cnVjdG9y 7YWM 0LDRgNCw0L0= SUxE IGFhbmQ= IHVubGltaXRlZA== IFVJVGFibGU= IFN1bQ== IOWlsw== SGFy INGB0LTQtdC70LDRgtGM zrzPgA== IGludHJv 6aSQ euG7jQ== 0LXQtNC10YDQsA== XSksCg== IExld2lz z4TOsc+C JWQ= LmV4dGVuZA== IHR5cGluZw== LmNvbnRhaW5lcg== IGRhZ2E= 5aWX RGVwYXJ0bWVudA== IGZpZA== 5bqn IM+Dz4XOvQ== IGxhcg== b3J1 MDIz 4LSo4LWN4LSx KGNoaWxk IGhvbWV3b3Jr PFY= 15DXkg== ZnJlZA== IGppaA== dm91ZA== YW5jZWxsYXRpb24= Pyg= 4Kao4Ka/ IHByb21pbmVudA== ODIw IHRvYXN0 c2Vlbg== IGTDug== IG1lcms= IENyYWZ0 IHR0 IHN1Zw== aWtrYQ== IGtlcGFkYQ== IGVjb3M= IHRt aXZlcnBvb2w= IEJvbmQ= 4LmA4Lij Rml4dHVyZQ== IOCqueCqpOCqvg== IE1hbGw= dWxsZXQ= TVk= aWJyYXRpb24= NDQx X0JVRkZFUg== IGhvc3BpdGFscw== IG1ha2V1cA== 4LK/4LKy4LON4LKy QWxnb3JpdGht 4LS+4LSn aXR0aQ== ZW5uZXNzZWU= IHdvcmtzaG9wcw== INit2YjZhA== IEFuYQ== IG1u IHZlbQ== INin2YTYp9iq YXRlcnM= 57SE 6JeP Y2t0 IHNjYXI= ODYw RGFpbHk= IE5pYw== w6Fpbg== IHN0YXJ0dXA= IEdB Y3Vyc29y LWF1dG8= IFRoZW1h 6LCB IGllZGVyZWVu 05nSmw== IOCqnOCriw== IGVmZmljaWVudGx5 IGNyaW1lcw== IFN0ZXBoZW4= IG9mZmVuc2l2ZQ== IHNrZQ== IOCwsuCxiw== ICIsCg== IHlyYQ== IGNoYXJnaW5n w6Zr ZHVy IHBhZ2luYQ== IGV4dGVucw== IOCmleCmpQ== IGVnbw== IH0pKTsK IHdvaGw= b3R0YWdl dXJzbw== IGFkdmlzZWQ= IOa4 IM61zr4= IGluZHVzdHJp IFRoZXJhcA== IHZhaW4= INCw0LTQsNC8 4YOg4YOd4YOh 54ug54ug IHNsaXA= aW1wbGVtZW50YXRpb24= 2LfZhA== X3NlcQ== IGJlc3Nlcg== IGJpdGU= IHNvY2Nlcg== IGdldmFs IHZpb2xlbnQ= 4Ka/4Kac REVGQVVMVA== PGZsb2F0 NDI5 IHRyYXA= cm9weQ== UHM= IGtsYQ== Y2llcw== KG9w IGV4dHJhb3JkaW5hcnk= cmF1bA== LmxvZ2dlcg== b2xvZ2lzdHM= 2LPYqNio IGRpdmVyc29z IENlbA== INGN0YA= a2VuaW5n IOCkruClgQ== IGN1bHRpdg== TEFURUQ= YXJzaQ== IE1ha2luZw== IFN1aXQ= IG1hcmNow6k= INOp0Ls= 6LWa6ZKx IHNpYg== aWPDrQ== INeb15A= IFZJ 4LGD IGdhdGhlcmluZw== ZmZl IGFib3Jk T3ZlcmxheQ== NzEw dWNpb25lcw== IFRveW90YQ== IFNpemVk IGdvdmVybm8= IGZhdm9yaXRlcw== RGVjZW1iZXI= CVNldA== IGhldXJlcw== IHJlbGF4aW5n CW1lbQ== IOCmheCmrA== IHJlc3BvbnNpdmU= IGVjaHRlcg== YXJndW1lbnRz 4LC+4LCo4LC/4LCV4LC/ dWxhdGluZw== IOCkh+CkuOCkleClhw== Mzcx ZXRhbg== IGLFqw== aWNraW5n IHZlcnNhdGlsZQ== IGluc3BpcmU= 4oCZYWQ= IGNvb2xpbmc= INC+0YU= INuM25A= IG9sZGVzdA== IGhvZA== IHR1dHRp IGhpem8= IHByZXNzZWQ= bmVnYQ== IGZvcm1hcw== LnJhbmQ= KGRm IHRhdg== IEJyb24= 5LiA5Yy65LqM5Yy65LiJ5Yy6 IHZlbmRvcnM= IOy5tA== IHByYWNodA== IFBoYXJt dWVsYQ== 44CC77yI IGNvbXB1dGluZw== aXNzb24= w7xocmVu IFByb2R1Y3Rpb24= IHBvdmVy IGZhdG8= 44CBCgo= IEhvbGlkYXk= 0L7RhA== IOCkn+ClgA== Ij4m 44CC44CCCgo= X2xpbWl0 aW1pbmF0aW9u ZW1hcw== IHB1c2hpbmc= IHZlbnR1cmU= ZXhwZWN0 IE9iZXI= IGdlbmVyYXRpb25z OgovLw== KSY= IEFkcw== YnJpcw== IG91dHM= 4Ky/ IGVudm9s IGF0b20= IHZpc2liaWxpdHk= IGVsaw== IGLhu4s= IGZpbnM= LlJlc291cmNl KGRlZmF1bHQ= 0L3QuNGP INC/0LvQsNGC dGFnZQ== bmFobWU= J107DQo= 4LmI4Liy4Lin XSk7 LWluY2g= INCw0q0= ZGF0ZXRpbWU= b3JjaA== IEFycmF5cw== 4LS+4LSc X2NvbnRhaW5lcg== Pi4= IG94eWdlbg== YWphcw== CWxvbmc= 5YWw IHVubGlrZQ== 6L+O cG9zZXI= V2hpY2g= IFJFQUQ= IGZpY2g= INi52YTZhQ== INC/0YDQvtCy0L7QtA== IG1hbnVhbGx5 R29k IOCkruCkvuCksA== INmE2YY= IHBsYWlz Li4uIg== IHBvcnRyYWl0 INqv24zYpw== 4LGN4LCl dGFz 4LSZ4LWN4LSZ4LW+ Y2xvY2s= Q2xvc2Vk 4KSV4KWN4KS34KS+ w7ZyZW4= IGFkbWl0dGVk IGt1bnN0 IGFjdGl2ZWx5 INiv2YY= ZmFj zrvOrg== IGxsZWdhcg== 5pCc LXNpZGU= IG3DpA== Rlc= 5YGl LXBhcnR5 VHVuZXM= QkFTRQ== INmH2YbYp9mD IHNwb2tlcw== INC80LDQvA== IEZhaHI= anQ= QXJt 4Z6H IGNvbXBhbmlvbg== em9u IERhdmU= IHNlbWFpbmU= ZXh0cmE= INmC2Lc= 5qmf IG92ZXJuaWdodA== KHBhcg== b21pbmc= MDM5 4KqV4Kq+4Kqw 4KWL4KSn IHZ1bG5lcmFibGU= IGRpc2FzdGVy 5YuZ cXVlbGl6ZQ== IGRvZXQ= IGxpdnJv c3TDpA== cXVpc2E= QWY= QUJFTA== IEFyYw== 44O844OI 4bulcuG7pQ== 4KS/4KSX 2YjYp9i5 IGdydW5k INi22LE= IENvbXB1dA== IEdlbmU= INmH2YY= IO2UhA== INGB0L7QvtGC0LLQtdGC0YHRgtCy 0LDQtNGL IERN NDA3 IHBsdXQ= bHlwaGljb24= YW1pbHRvbg== 0YPRiw== T1ZFUg== IHN2b2o= 0Y7RidC40LU= yrw= IOC4quC4lA== e30K IGdpb3I= IHZlcmlmaWNhdGlvbg== IEJldHI= 5Ymn INC80LXQvdOZ0L0= IGVlcnN0 IGxla2tlcg== IGZpbG1l IEdyYXRpcw== 2KzYp9mF c3RvcmFnZQ== 0LLQsNGO0YI= IOWQjeeEoeOBlw== IiIiCgo= 4LCC4LCX IMO6bmljYQ== IGV4dGVuc2lvbnM= 4KS44KWN4KSf IEltcHJv bGVv TUlU IGR1bW15 0LXQudGH0LDRgQ== 0YPRidC10YHRgtCy IHBhdQ== 5b6u IGZvcnVtcw== Y29sYQ== INeT16g= emVuaWU= IEZhc2hpb24= INWz b3JuYQ== J10tPg== fTsKCi8v cHVy ZXRlZA== X3N0eWxl IEVhcmx5 YWJhbWE= 5Z2H 4YCU4YC6 4KuA4KqT IEtvcmVhbg== IGNvZWZm IGRhbWVy IMOpY29ub20= IGRpcnQ= IHVwZGF0aW5n IGHDum4= IGRpZmVyZW50ZQ== LmZ1bmN0aW9u dXRpaw== IDwvPgo= RVRDSA== IE1lbW9yaWFs W3k= IGxpZ2h0d2VpZ2h0 IGdlbmVz IGhhc3M= 7KCB7Jy866Gc c2tp LmA= z4POvw== UHJldg== IHNhZ3Q= 4Kq54KuA 4Kao4KeN4Kan IGNvbnNpZGVyYWJsZQ== 5pmv bGFm IFVtYQ== IFJlbnRhbA== IEF4 IEFsZXhhbmRlcg== IHJn IGp1ZGdtZW50 0LDQu9GM0L3QvtC5 IHBlbmE= IGNvbnNpZA== YW5kYWFn IG1lZGljYXRpb25z c3RhbGw= fSwKCg== bW4= 0YDQsNC7 4LK+4LKV LmVhY2g= INin2YTZgtix IGhhaQ== IOGAsQ== LmJ5 X3B1dA== IHByb2w= OTk4 IG1hY3Jv IHVuYw== IGluZHU= X25vZGVz IGFjY29tcGFu 4LC+4LCv4LC/ IEd1ZXN0 4Kq+4KqW bmFhc3Q= IG1hZ2F6 INGC0LDQuw== 5piv55yf55qE5ZCX IGFycmFuZ2VtZW50cw== IHZvdGluZw== IOCmuOCmruCnjeCmqg== IGNoYXJpdHk= IGRlc3Nh INmB2YrZh9in X0lOREVY VXRpbGl0aWVz 6ZqP 55yf5Lq6 IHNldHRsZW1lbnQ= IFdhbGVz X2dyaWQ= IGxhYw== VmVsb2NpdHk= IFJlcHJlc2VudA== IG15c3Rlcnk= ODc1 IGRydWs= IGRlc2NyaXB0b3I= IOWt IGx1Yw== dmlvdXNseQ== IGJyYW5jaGVz 2LfZhQ== dW5vcw== QVRP LmdpZg== L2Vudg== IGZpbmlzaGluZw== Y2x1Yg== 5oCO5LmI5qC3 U3Vidmlldw== dXJzZXM= IGludGVuc2l0eQ== aW50ZW5kbw== aW5naGFt JSI= IEFncmlj 0LrQsNGH IGFwcGVs IHBvd2VyZWQ= IEln IGJpbGU= IGN1bXBs bGllc3Q= c3RhZA== zrzOtw== IHJlc2VydmF0aW9u 5qOL54mM5ri45oiP IHZpbmR0 ICIvIg== 4Kak4Ka+ YWJ1bGFyeQ== LXNs INi02LHZg9ip IG9wdGltaXphdGlvbg== aWxsYW5jZQ== X3JlcGx5 IHbFoQ== 4KaJ 4KS/4KS14KS+4KSw IGFkZXF1YXRl aW5lbHk= eG8= INC90LXQs9C+ INKb0LDRgNCw aWV0cw== IFR1cmtleQ== ZHVw IGZlc3Rpdg== IFNJTQ== IHJldmVydA== aWFw bXV0YWJsZQ== 4LeU4LeA 0L3QtdCy IEJpcmQ= IOGDrOGDmuGDmOGDoQ== TG9va3Vw IE5lbA== IGN1bHR1cmVz fSx7 INC80L7QvQ== IGFudGli 4KaV4KeN4Kak Mzk1 IHBlbmFsdHk= aGxlbg== xI1uw60= IMSR4bqndQ== IF07Cgo= IOCmhuCnsOCngQ== IEdpbA== IHBlcmRlcg== bGplbg== IHdpbm5lcnM= 5LiH5YWD IGluZGljYXRpbmc= LU1N IHJvcw== IG5hdmJhcg== UGFyaw== IGNyZWU= c2x1Zw== IGFyZW5h SG9vaw== aGV6 YXZvdXI= X3dlaWdodA== 4Ka+4Kak4KeH 5Y2w IHN0cnVjdHVyYWw= IGNyYXRl YXdlc29tZQ== YXNzbw== LkRlbGV0ZQ== IHByb21pc2Vz IOCkleCljeCkr+Ckvg== 2YLYpw== 4YOQ4YOe KGN1cg== Q2VydGlmaWNhdGU= aXZhdA== IGFkbWlzc2lvbnM= KGFsbA== PSIuLi8uLi8= INio2LHZhtin2YU= xZ9h 24s= aW5pdGlvbnM= IGLEmWQ= IHZ6 IG1ha3M= IGF0dGVtcHRpbmc= IEZvY3Vz IGtlZA== IOCkhuCko+Ckvw== IHRow6k= IFdvY2hlbg== 4bqjbw== YWtzaQ== IGNvbGxlY3RpdmU= IHJvdWxldHRl IGtuZWU= IGFueXRpbWU= IGNsaWNrZWQ= IGhpdHRpbmc= IHNldmVudA== INi52KjYsQ== IGNvbXBvc2Vk IOGDqeGDlOGDmw== X2NvbXA= IOWkqeWkqeS4reW9qeelqOaPkOeOsA== 4LCk4LGN4LCk IHdlaXRlcmU= w61kYQ== Mzc0 4LiC4Lit4LiH cGFydHM= IGNvbWVueg== IGl5aQ== KHsi 4LOH4LKz INGI0YvSmw== X2ZvbGRlcg== IGVuZGxlc3M= Lk9yZGVy aWV1cg== 0Y/RgtGB0Y8= IOCmhuCmuA== IGV2YWx1YXRlZA== IGV4cHJlcw== IG11bGhlcmVz dWxsaWU= IG5hcnJhdGl2ZQ== Q2FsbGVk 0pvQsNGA zqc= Lm9wZW5xYQ== YWluYW4= eWxvbg== YXJjaGl2ZQ== IE11bA== V2Fy IG9sbGE= X292ZXI= IEVD IHNvZmE= SUJVVA== IOuwmw== IHBlbnNhcg== cGVybQ== IOqzhA== IFBQ IG5paw== RElT ZWtvbQ== 5rS+ IC8u Yng= 44G+44Gf X2Zu IHRlbmdv 16nXmA== 54yc 4YOV4YOh IGFudGg= IFRlcw== c3RlZA== UGhhc2U= 4Lie4LiZ4Lix4LiZ 0LXRgtC4 X0lURU0= IFdvbmRlcg== Y29ycmVjdA== IGFzcGly X3BhaXI= IGFrZQ== IHByYXY= INCy0LDRgNC4 IEhhbm4= IHJpbQ== IFBlYXI= IHlha2U= IGxlaA== IOqwlQ== INS7 7KeA64W4 SW50ZXJuZXQ= U3Vic2NyaWJl IHBvcnRpb25z 5omA5pyJ IOCkieCkqOCkleClhw== IGtyaWpndA== IFJT 576O5Zu9 IHNleHQ= RXN0YQ== bXVsdA== IOmdkg== YXJyaW5n 57K+5ZOB6KeG6aKR KHBvc3Q= X0NBTEw= b2d1ZQ== bGlnZQ== INmF2Yo= IOCqpuCrjeCqtQ== INC/0YDQuNGB IENvb3Blcg== IOCkl+CljeCksA== L2h0dHA= IGNvcHBlcg== IFRT IGd1aWx0eQ== IEZvbGxvd2luZw== INCx0LjQt9C90LXRgQ== LmZyYWdtZW50 IGLDtg== X1RBQkxF 4Ka+4Kao4KeN4Kak IGNhcmluZw== Zm9sbG93 INGC0LXRhdC90L7Qu9C+0LM= ZW1iZWQ= aWRlbGlqaw== c2VtYmw= QXJjaGl2ZQ== bG9w INmF2LI= z4TOrQ== UlA= b2tlbW9u IHDDumJsaWNh IEJlc2No Nzgw IGluZ3JlZGllbnQ= 0L7Qu9C2 IGNvbnN1bWU= IEJlcmc= 4Z6O 0L3Rg9GC0Yw= X05PTkU= INio2KfbjNiv IEhhdA== UmVjdGFuZ2xl INmE2KfYoQ== IHllbg== 0YPQvdC00LA= IGFwbw== IHBhcnRpY2lwYW50 4LWB4LSj4LWN4LSf INCx0YPQtNGD0YI= dW11bA== INin2LU= IGJlYXV0aWZ1bGx5 X3NhdmU= IEluc3RhbnQ= IHJldmVhbHM= IHNlcHRlbWJlcg== X0xPQw== NTY3 IHsKCgo= IEF0bGFudGlj IO2PrA== cmnDqHJl IGR1dXI= IENvbW1lcmNpYWw= IHRodW1i IHPhu7E= INin2b7ZhtuS Rk0= 4Liy4LiK 1aHVttWv RmVlZGJhY2s= X3BsYXllcg== IFJlZ2lzdHJhdGlvbg== IEpMYWJlbA== 5YiH YW5paw== Il0pOwo= T1RF IHNjYWw= IGdyb2Vw d2lja2x1bmc= IOCkqOCkv+CklQ== JTs= aWFnbg== zqY= 4Liy4LiU IHByb2JhYmlsaXR5 xqFp IGRlcG9ydA== INC30LDQuw== IOKG esO8 IOCkhuCkpg== 4Liq4LmM IGNlbg== IGh5bg== 4KWA4KSh IFBvcm4= 0LDQvdC+ 0LHQsNGA IGTDqW0= 4Z+S4Z6P IHRyYXZh 7JeQ6rKM qeuLiOuLpA== z4TOuc66zq4= LXN0YXJ0 IEluc2VydA== ZmFkZQ== Q3JlZGVudGlhbHM= IFRpbWVy ICcq bGlz IHRyZW1lbmQ= d2Vpcw== IOCmuOCmsA== Mzkz Q3Jvc3M= IHB1YmxpY2F0aW9ucw== IOGDmeGDneGDmw== IGNvbGxpc2lvbg== NzAx PigK YXJuZXNz 4oCZYXV0cmVz LWZhbWlseQ== 4KSw4KWN4KSo 562+ 5aKD MzY5 INmE24zbkg== b25saW5l U2VyaWFsaXplZA== IGhpbmE= INSy bWVudGVk IG5hdmln LmJ1aWxkZXI= IGVmZmVjdGl2ZW5lc3M= IHJhaXNvbg== TEVNRU5U IMSR4buZbmc= bnRh 4LGB4LCh4LGB IGVwb2No aW5pdGU= IEFkZW3DoXM= IGFudW5j INeS16g= INC/0L7QutGD0L8= IGRlbmtlbg== w6d1 IExpbmNvbG4= 0LLQtdGA0YE= IHrDoQ== IEN1cnJlbnRseQ== INin2LQ= IFRlY2hub2xvZ2llcw== IHJlY29tbWVuZGF0aW9u QmFsbA== IOuwmA== IH07DQo= IGJpZXRlbg== IHByb2xvbmc= 2LHYp9mF IGV1Y2g= IG1hbmnDqHJl IHZlxI0= 6Imv INeV15U= IOCqheCqqA== IERlbHRh UEVDSUFM MzU5 IGJvdW5kYXJ5 0LDQu9GB0Y8= 0YrQuw== IHNlcm9udA== w6l0cg== IOS4iQ== RGln INmE2b7Yp9ix2Yc= IHByw6hz INCw0YPRgQ== IHRoZXJtYWw= IEJhbHQ= IHN0YW4= X0luaXQ= IOCkueClgeCkhg== IHNpdg== Q29ycmVjdA== Y3J5cHRv IGF0ZW5jacOzbg== X3NwZWM= IFlv IOCkq+Ckv+CksuCljeCkrg== R2V0dGVy Q2Fubm90 INmB24w= IGVuZG9yc2U= IHVuYXM= IHBvcnRz Ymlk 6K6+572u X2VtcHR5 IMO8w6dpbg== Y3RpYw== IOq1kA== CWRlbGV0ZQ== IEluZGlhbmE= IG5vcmQ= YWRlcmE= IGVsZWN0aW9ucw== INC80LXQttC00YM= IGh1bnRpbmc= IGxlZ2l0aW1hdGU= IOa3 QXV0b20= IHNjYWxhcg== IGt3YXll Mzgz aW1ldGVy YXdhcmU= MzY4 4LK+4LKf IGltYWdpbg== IHByaW5jaXBhbG1lbnRl IGN1YXRybw== 5Zyo57q/55yL IENhbmNlcg== IOCwuOCwv+CwqOCwv+Cwrg== X0NPTVA= IHLDqXBvbmQ= Xyk= 6ZW3 IEV4cG9ydA== 0LTQuNC60Lg= aWxsw6Q= PG9wdGlvbg== IHByZWRpY3Rpb25z b3RpY3M= IG1hYXQ= IENvaW4= IHDDpMOk IFN1cmU= IGJpbGFu IGRldGFs IENvbXBhcg== 6bw= 6Jw= IHJlY2lw YXN1cmVz IFt7 55M= IGp1cmlzZA== YXNjYWRl IHN0cnVjaw== INCw0p8= TWlzc2luZw== INiv2KfYsdiv Q250 IFRoaXJk U2xpZGU= fTsKCgo= IGphbnU= YW50d29ydA== IE9udGFyaW8= 1aHVttWo IHRoeQ== 4LKm4LOG Kj4o IENhY2hl 4KSu4KWN4KSu V2FsbA== IGdvdXZlcg== UGVk 4Kqj4KuA 4YKV KHsn Z2VuY3k= IHdheGE= X2FsbG9j 2KjYp9iv INC00L7Qsw== IMOhcmVhcw== MDQ0 IGNvbXBsZXRpbmc= w6Bv IOmf LmFkbWlu IGd1ZA== IO2VqA== IHpvcmdlbg== bm9k IGdld2U= 5beu IGjDuA== zpI= IHNpemVk YXVkaW8= aWt1dA== 2KfZhtin IGxlc3dp 5Y2I5aSc IGJyb3dzaW5n IE5H IHB1bnRvcw== IHRzeQ== LGs= eW91cg== IG5hYW0= PGxhYmVs aWVp IG1ldHJpYw== 6rKg IGRpemVy 0YHQutC+0Lw= c3Nvbg== 4LSZ4LWN4LSZ4LSz4LWN X2l0 Q29tbWl0 IHRhaHVu YXJhaw== IM68zrHPgg== Lm1hbg== IFRoYWlsYW5k IGtyZQ== IHlvdSdk IGhlZA== IGVucXVhbnRv X1RZUA== emVwdA== UHJlc2VudGVy IHZpYnJhbnQ= IGNvbXBpbGVk 54uX zrzOsg== 16jXmA== IOCyqOCzgOCyoQ== IHZvY2Fs IEFDQw== IHJpbmdz 15DXoA== IEx5 S29t IGFjY29tbW9kYXRl TXVsdGlwbGU= VHJhbnNsYXRl 4LGH4LCm IFZN IEFubmU= Q2F0YWxvZw== 15fXlA== IHVndQ== KGVudHJ5 2qnbgQ== dXRvcg== PSIn NDg1 IGpheno= LmNhdGVnb3J5 IGt0w7NyeQ== 67CP IG5lYXJlc3Q= Rm9ybXM= Q1RZUEU= IGdydXBvcw== IHNwZWNpYWxpc3Rz IOaAjg== IOuK ZW5jb2RlZA== 2K3ZhQ== IDorOg== IGVyc3Rl RGlyZQ== 0JXRgdC70Lg= IHJhY2Vz ICAgDQo= IHRvd2Vy UmVsYXRpb24= INmB2YrZhw== CWN1cnJlbnQ= LC4uLg== 15HXldeq aWF1eA== LmRyb3A= INC/0LXRgNC4 IG5ldXJv IGhlbHBlbg== IHphdA== IEp1Zw== LnNjYWxl IHN0YXlz 4YOQ4YOb4YOY4YOQ4YOc IEl0YWxpYQ== IHFob3Y= INio2KPZhg== aWFuaQ== IENvbXBhbmllcw== INC30LDRhQ== KSkpKSw= 0LDQu9C+0YHRjA== SW50bw== IGNvbXBldGl0b3Jz 4oCUYW5k 4LC/4LC4 IFV0aWxz INC80LDRgtC10YDQuNCw0Ls= LlByb3BlcnRpZXM= IG55ZQ== IHJvY2tz 4YOQ4YOa4YOj4YOg4YOY 4bulYw== IEZpdA== aWZpYWJsZQ== IC8vJA== IGFueWJvZHk= cXVpcmVz IHVzdWFyaW9z 5oOg IGNvbnRhaW5lcnM= ZOG7iw== KT09 0YLQuNC9 YXRlcm5pb24= NDI0 IGZvYXI= INC+0YLQvdC+0Yg= IGJsb2NrZWQ= aWVydGVu IEtvcw== KEFjdGlvbg== IE5vdQ== bGFtYmRh IOGDqOGDlOGDm+GDk+GDlOGDkg== 0YHQvtC9 IE1hc3NhY2h1c2V0dHM= IHViaWM= IGdyYWlu KXM= ZWxlbQ== YWRlcnM= z4TOv8+C 4LmA4Lie IGFwcGFyZQ== 0YbRi9GW IGLDpWRl IFNyaQ== IFRpbGU= ZXJpYQ== IHRoZWF0ZXI= a2FubnQ= IHBsaQ== IGNvbnRyb2xl IGRpcmE= IGF1c2dl IFdlJ3Jl IGF0aGxldGVz IGNydWlzZQ== IGRpbnM= IEJlbG93 2KfZgdi4 INGP0YA= IGNvbmVjdA== amlu Zm9uZQ== RGVzdGluYXRpb24= X3JlYw== Tkw= CVY= KHJldA== INeZ15vXldec Lm1hdGg= X2NhcA== IGpvdg== IG9idGVuZXI= RGltZW5zaW9u 15nXmdec VE9Q 0LDRgw== INmI2KfZgg== bcOp LmJsb2c= IGzDpG5n IEhBVkU= IFZlcmU= IOC0muC1huC0r+C1jeC0rw== INC/0YDQvtGB IGZhbcOtbGlh 5Zu0 z4TOuc66zqw= SGlzdA== NDQ1 IGF0dHJhY3Rpb25z IGRhZG8= IGZpY2Fy Mzg4 dW55 X211dGV4 IG1vZGVybmU= IHZvdGVycw== IOunpA== IFR5cGVz IG11YWo= IGVrb25vbQ== d3JpdGluZw== IOKI IG91dGZpdA== U29u IGhhcA== IHZhcmlhdGlvbnM= INOZ0YA= IGJpaw== IFlvdSdsbA== IOCksOClgeCkqg== U2NoZW1l IERT 4Ka/4KaC IFNjaWVudA== INaE1aHVstWh1oQ= MDI0 IEFDVElPTg== wq10 IHNpdGlv INeU15Y= IOOCuQ== ICIKCg== IM+Azr/Ouw== IERpc3Q= X3B1c2g= LmRldmljZQ== dW5rdA== UkY= b3JkaW5hdG9y LnN1bQ== IENC Lk1lbnU= IGZm IGhhcnVz Lndvcmxk 4KuB4KqV CUFzc2VydA== IGRpc2NpcGxpbmU= LmNvbGxlY3Rpb24= 4Kqk4Kq/ 4buVaQ== 4YOQ4YOj4YM= YWRvd3M= X3Byb2plY3Q= IGxpYmVyYWw= ZW50YXI= IHZybw== IHJlY2VpdmVz VU1FTlQ= IGNpa2lu YWllbnQ= ZXRlY3Q= LWNl 5LiN5piv IFRob20= LmV2ZW50cw== IGxvZ3M= IHNsaWM= zrrOvw== UGFydGljaXA= X2NudA== SGFyZA== IGJz 5Y2V5Y+M IHJlZnVnZQ== xINy UGFu X2NvdW50ZXI= IOCkquClgeCksg== 2qnZhA== 4K+B4K6q4K+N4K6q TGF1bmNo IHNwZWNpZmljYXRpb25z 5Y2K 4KWH4KSo bWVzc2FnZXM= IGRlZmluaXRpb25z IHNvZ2Fy IHRj IFBvc3M= IOColw== IHN6ZXI= IGFydHdvcms= 5Ya1 NDQ4 IGV4cGVyaW1lbnRz IHBoeXNpY3M= INmF2KfYsQ== IG50aQ== IHNhdGlzZnk= IE5vdmE= IOCkieCkpg== IFBhZw== INCz0Y3RgtCw IGRhcmF1Zg== 16rXqA== 0YDQtdC2 ID0i bGVyaW4= 2YLZhQ== 0ZbRhQ== VUNU IHZveWFnZQ== IFBsYW5uaW5n IHNob3J0bHk= z4o= QVRJQw== KHdvcmQ= aWdpZA== b2JyYQ== IElOQ0xVRElORw== IE11c2U= IHByb2pla3Q= IGt1dg== INi32LHYrQ== 4Z+h IOCyueCzhg== 5aSP cmV2ZW4= ZW1pbg== V09SSw== 0YDQtdC00LjRgg== CWRvY3VtZW50 aXNob3A= PHZvaWQ= IOGDrOGDkOGDoOGDmw== UEhQ IGV4cGFuZGluZw== IGlubm9j IHNpeWE= Xyk7Cg== KCJf b3d5Y2g= YmFja3M= IFBpdHQ= 4Liy4LiE4Lih 0LDQvdC40Lk= IFNpY2hlcg== IGNvbnRl IGVudHJh 4LC+4LCh4LGB a2xhaG9tYQ== IGTDqXZlbG9wcGVtZW50 VmFu dmVyYm9zZQ== IMO2dmVy X25l Q0xV IFVuaXZlcnNhbA== 5pyJ6ZmQ LFs= IG90dA== d2FuZw== 4KWq IGZ1bmN0 IHJlc3M= 5LiT5Yy6 IGhhcmRseQ== INGG0LXQvQ== aW5jdGlvbg== INGB0YLRgNC+ IHNjYWxh UHJlZmVyZW5jZQ== aXl5 INC40LzQtdC10YI= IGJyaWNr 0LHRgNGP bml0 LXVzZQ== 4LmA4LiC IHRldmU= SW5mb3M= aWRnZXM= IHZp4buHYw== IEtlbGx5 Mzgx MzYy 5p2x IEZyYW5rbGlu IHNwZWN0YWN1bGFy 5Yac 25XZhg== X1ZBTA== X3N0YXRz NDM3 IGVkaWw= IGRlcGFydG1lbnRz IEhhbWI= 2KjZitmC 4K6+4K6p4K+N ZXhwZXI= 4Ka+4Kaj w6l0aWNh IOC2kQ== c2NoZW1h IEtvcA== IHVwcg== OgoKCg== IEZsYXQ= X2FjYw== IFdpdGhpbg== IFNlaw== VHJhZGU= Z2xhcw== IG5hYQ== IGllbWFuZA== IGZhbnRhc3Q= IM+Azr8= c2NyaWJlcg== bW92aWU= IHRleHRz aGlt INC00L7QsdCw0LI= IFdvbGY= IOqwkA== IHNjaG9s IFNjaHVs YXnEsQ== X0FMTA== IHRlcnJpdG9yeQ== LXNlcnZpY2U= U2Nob29s IEZvcmVpZ24= IGdyaXA= SHk= Lk1pbg== U3lt 4LOK4LKC4LKh 5pWF IFF1ZXVl INin2YTYsdim2YrYsw== 0ZHQvA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== dGltZXN0YW1w 5Y+v6Z2g V2FudA== cWk= 0LDRgdGM 7JeI64uk IGthZGFy IGZpeg== IE1pbmluZw== Kytd Qlk= Lm5ldHdvcms= X1FV LmZsb2F0 IHNoYWRl b2x0 INC/0LDRgNGC U3RhZmY= YW5jaQ== Rm91cg== IFRlY2huaWNhbA== IHNpw6g= INCQ0YA= Q2FwdHVyZQ== 4LaC Mzc4 IHByZWRpY3Rpb24= IHBhbGU= LmJvdHRvbQ== Ym9yZw== dXVpZA== OTAx IHZpZXdlcnM= X2F0dA== IMW8 IOWkp+WPkeW/qw== ICY9 bMOp IGRlc2lnbmluZw== INCX0LA= 4LON4LKX INCx0L7Qu9GD0L8= IHByZWZlcmVuY2U= KE1l zrvOrA== IHByb2Jsw6htZQ== IOCkuOCkrOCkuOClhw== IE1vbnRl dW51bg== YmV3 0LjRh9C10YHQutC40LU= INGF0L7Quw== IGJhdHRlcmllcw== IHJldGly INC20rE= IGdhaW5z c29t RGF2aWQ= IE5K YW5hbHlzaXM= 77yB4oCd 562W 2obavg== Q29udGludWU= IHRocmVhdHM= X3N0YWNr w4o= IGJvaWxlcg== IHNhbGxl IEFzeW5j IG9odW4= IG9ydGg= YXRpZW50 X3RtcA== V2VhcG9u LmFyZ3M= IGthdGE= c3VjaA== IGxhc3Rpbmc= IHRpZXM= IGJvdW5kYXJpZXM= IHZvdGVk IOCqueCqpOCrgeCqgg== IHBvdGVudA== IE5pY2U= IEZyZXNo IGF1ZGk= IG9wYWNpdHk= REFUQQ== aHVy 4YOQ4YOq4YOY 5Lmz IFN0YWdl IHByb2dyZXNzaXZl OTMw IEZhbGxz IG5lag== 2bnYsQ== INGB0Ys= 2KfYqNiq IElF RGVsZXRlZA== IGtpamtlbg== VlM= U29mdA== YWJsbw== 6IyD ZXJpZQ== IOCkq+Ckv+CksA== IG5hdmU= JHNxbA== no0= IHJlc3Rv IEVudGVycHJpc2U= UmF0ZWQ= INKv0YjRltC9 xb5lbg== ICAgICAgICAgICAgICAgICAgICAgICAgCg== 4KWL4KSo IFNpdHU= IOW+ruS/oeWkqeWkqeS4reW9qeelqA== dWFsbWVudGU= IEVYUFJFU1M= 4bqvYw== IGdvYmllcm5v IFZJUA== IGltbWlncg== IHZvb3J6aWVu ZW5zaQ== IOC0teC0sA== IENhZA== IENoaWxl IGxldCdz IHJvZGU= IFJ3YW5kYQ== IENlcw== QmFz IEJV aGF2ZQ== 4buDbQ== IGRyYW1hdGlj 4ok= IGVzdGFibGlzaG1lbnQ= RmVicnVhcnk= INmF2YU= IGNlcA== LmRlc3Ryb3k= ZXU= ZXR1 LnNpbg== IG1haW50ZW5hbnQ= 6bg= IHN0cmFpZ2h0Zm9yd2FyZA== IOCuteCvhw== IGt1Y2g= 0LTRi9C5 cGxvdGxpYg== Zm9sZGVy SEg= IHZpZW5l aXZlbnQ= IEludGVyZXN0 IOC0teC1gA== Y29weXJpZ2h0 dXhl Y2lkb3M= NDEz KGNsYXNz IMKg IGdyb8Of 6ImH 57G75Z6L c3RyY21w IENoZWFw IGluZGl2aWR1 IOC5guC4m+C4ow== c3RhZHQ= IHNlcmFpdA== w6R0dGU= IFNvbGlk IHNjb3Jpbmc= IHdlcmt0 INmE2YfYpw== IGJvaw== IHVuZGVycw== aWdodGg= RXhjaGFuZ2U= IHVm UGFydHM= IGVpbno= INCz0L7RgdGD0LTQsNGA 67OA IFJlY3ljbGVy INGB0LLQsA== IGdlcmFs VVNFRA== IGRpc2FwcG9pbnRlZA== 572R6aG1 INeV15XXkNeh IG5vYm9keQ== 4K6u4K+N4K6q CWV4aXQ= YXppbw== LXJhZGl1cw== IHN0bXQ= IERvbWFpbg== IGthdw== MzY3 ZGF0ZXI= w6FueQ== 4oCdKQ== IGVtcGhhc2lz dWZpZw== 4LSv4LWB4LSC YXRyaWM= d2FobA== IGhvdWQ= IGt0w7NyZQ== IFdpc2NvbnNpbg== 2LHZg9iy IHBoeXNpY2FsbHk= IGFkbWluaXN0ZXI= IHdlbGxuZXNz IGZ1dGhp U21hcnQ= INC70LjRhw== xLF5b3I= IENvbXBsZXg= hOC4o+C4suC4sA== INC+0LHQtdGB0L8= IGJhcmVseQ== 5L6h IOychO2VtA== IHRodWlz KT0+ewo= cGVyY2VudA== IGxw IE94Zm9yZA== INC80LXRiA== INC70YPRh9GI0LU= w6J0ZQ== IEZp IEVudW0= VHJhbnNhY3Rpb25hbA== LmNvbXBhcmU= IGNoYW1waW9uc2hpcA== IENPTA== LnNjc3M= QWs= INWA1aHVtdWh1b3Vvw== IGRhbms= IE9ORQ== INC30LDQstC40YE= INin2YTZhdik INGA0LDQsg== IHh1 INC00L7RgdGC0YPQvw== IHJlcXVpcw== 0YLQsNC7 IOCmpuCnh+Cmtg== INeQ15XXmdej LlBlcg== INC60YDQvtCy INCy0YLQvtGA IG1lbWlsaWtp X2RpcmVjdG9yeQ== WU4= IGFjdHJlc3M= IGFubmk= ISIs aXJzZQ== ICcm IGV0d2E= IOCopuCpgA== IGJlcnQ= 0LjRgtC10LvQuA== IGVucm9sbA== NjE4 dnJl 4KuH4Kqo IG11bmc= 2YrZhtin 4Liy4Lil IGFuaW1l SVNJTkc= bnlt VVJSRU5U KGVs INCy0L3Rg9GC cHJvYw== IHBhdGVudA== SU5B yZli bHI= INC90LXQsw== IGNvbmNs CgogCgo= CWs= IG9uZA== LlBhbmVs IGV4cGVjdGluZw== ZWxkZW4= IGZsb2F0aW5n YWNodGU= IGV4cGVk IHJva3U= Ly0= IGtvbXBsZQ== YWlybw== IHVuY2VydA== 6JY= xaFlbg== 5ZCM5pe2 emllaA== W3Jvdw== ICI8PA== hOC4o+C4suC4sOC4q+C5jA== 4Ka+4KaC4Kay YWluZW4= ZXJyYWw= w6F0aWNhcw== dXRpZw== IEFsbGVu MzQ4 LXRhYmxl ICcp NTA4 IGVlbnZvdWQ= cHJvcGVydGllcw== dXllbg== IOCquOCqsA== IGV4cGxv XFJlc3BvbnNl 44Oh44Oz44OI IHRyYW5zZmVycmVk INmK2K0= w7ZsbA== 6Zi/ IENlcnRpZmllZA== 4LC+4LCw4LCC IHJlbGF0aXY= IGtsYW50ZW4= b215 IGhvcnNlcw== LUFtZXI= IHZhcmlhdGlvbg== aWZlbg== IFBlZHJv dWRnZQ== IHBoeXNpY2lhbg== QVJHRVQ= X3V0aWxz IHNvbnM= IOC0qOC1hw== 6LuK 5LqI IHByb3N0aXQ= RXVyb3Bl PW51bGw= IMK7Lg== b2pp IHZvaXQ= 4KWB4KSf IE9mZnNldA== VVNI IHNwZWxlbg== U3VpdGU= Q3V0 IHJlbmNvbnRyZQ== YW1pZW50 aWZpY2HDp8Ojbw== z4HOrg== 0YLQsNGA0Ys= IEt5 bWFucw== cnlz PSIjIj4= IGxpdmVy 0YHRgtCy0L7QvA== IGNlaWw= X0lOVkFMSUQ= dXNw 5rS75Yqo IHN1cHBvc2U= 0LLRgNC+0L8= IOCmm+Cmv+Cmsg== 4oCv IG5vb2Q= IysjKw== IHJlc3BvbnNpYmlsaXRpZXM= IGNvbmZ1c2Vk ICJd IGNwdQ== RGFyaw== IG5pcA== w6lw IHBhcmtz INC/0YDQvtGI LWZvbGQ= INC/0L7Qu9C+0LY= IGlzYQ== IE5PSQ== 5biC5Zy6 VVNB IG1vc3RyYXI= 4LSo4LWN4LSk4LWN4LSw YWxnb3JpdGht 5L+u5pS5 4Kq+4Kqq Y3JldG8= TmF2aWdhdG9y IHByZWRpY3RlZA== cXVlbGU= INin2LHYqg== IGVkYWQ= IOCkleCksOCkpOCkvg== aXR1bG8= IGRpZmZpY3VsdGllcw== IHNlbmk= INmG2LjYp9mF YnJhbmNo INGA0LDQt9Cy0LjRgg== cXVlc3Rpb25z LW1hbg== IGRpZmbDqXJlbnRz IOym X0FQUA== 0YPQuQ== IFNy ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IENoZWw= YXhpb3M= IG5vY2hl IHN1cGVyZmlj V2F5 5pS7 INC60L7RgtC+0YDRi9GF INii2K7YsQ== Lk5ldA== 2YrYrA== aW5kdQ== dWVsbGVtZW50 IOGDm+GDnQ== ZmVlZA== YWdnaW8= IHBvdmVydHk= INGB0YLQvtC7 IHByb3NwZWN0 INKy X0VOVA== bWFrZXI= IG1vaXN0dXJl IEJvd2w= IFJlZGlyZWN0 Zm9ybWU= IEplbm4= cXVlZXpl b3bDqQ== 5a6i5oi356uv Tmk= 4LON4LKa IGhvbW1l IHJlY29ub2M= IHdhYXJkb29y IGRpbw== IGJpZWR0 INCx0L7Qu9KT0LDQvQ== INCy0L7RgdC/ IGFwcmls IGp1ZWdvcw== Mzc2 IGJvb3Rz NDg4 4LSC4LSX ICcuLi8uLi8uLi8= YC4K 0LzTmQ== IERhZA== IG3DtmNodGU= ZmluaXR5 IHBsZWlu IGNvb3BlcmF0aW9u QW5hbHk= 4LOG4LKX4LOG IOCwuOCwrg== 4KeB4KaW Y2xz 0rfQuNC60Lg= X2N0eA== IHBzeWNob2xvZ2ljYWw= NDU1 INC90LDQsQ== 5Y2T LmluY2x1ZGVz PSI8Pz0= U2hpcA== 0LvQsNC/ X2NoYW5nZQ== X0xJTkU= IGJhaWw= 4bw= b3Nhcw== IEZyYXVlbg== ICgr PigpOw0K 5L6d IGp1bmk= IGJpdGk= IGxlbW9u 2LTZgQ== INmG2YjYuQ== IHTDqXI= w7Ntbw== 4KWl 4KeB4KaV4KeN4Kak IGZleg== dXNjaA== IOW5vw== IFZvbHVtZQ== PCc= IHNlcnZpw6dv PXN0cg== IEZ1bms= ZWFycw== ZXN0cm8= RGFzaGJvYXJk IGNyeXN0YWw= w6huY2lh QXNzaWdu Rmxhc2g= IEdhbQ== IHNwb2tlbg== J2Fn 4YOY4YOl Rml4 IGdlbWVpbnM= IG5lcA== 4YOV4YOQ IGxpY2h0 VW5pdmVycw== INGB0L7Qsw== VGE= YmVp X3Jhdw== 0LDQvdGB IENvbnN0aXR1dGlvbg== IHJlcHJlc2VudGF0aXZlcw== IFRyYWRpbmc= 5p2O INCf0L7QtA== IGt3ZW55ZQ== IC8+Cgo= NTE1 IHJhZGlhdGlvbg== 4bqhbw== QmFs RmF2b3JpdGU= INGC0L7Rhw== IGNvbWVy IHJvdWdobHk= 4KWH4KSh IFBpbGxz L0U= 4LWA4LS44LWN aWNpdA== LmF1dA== IE5o 1bjVtw== IGF1bWVudG8= IERlcGFydA== LW5vdA== IGVsbGVz IHBvbGl0aXF1ZQ== IGdlbWFjaHQ= 6IOc INin2YTYqNix IGludm9pY2U= J2Fk 4Kq/4Kqf LlZvaWQ= b3llcg== IGJhdGVy IGFuZ3J5 KHR4dA== ZnRpcg== 5b2p5aix5LmQ IFVF b250YQ== 5ZCJ 0L7QsdGA0LDQtw== w6lzdA== IG9ueWU= UHJvYmxlbQ== IGF2YXRhcg== KGJsb2Nr IGludm9rZQ== IGRpYW1vbmQ= IHJvbGxlcg== nuC1jeC0ng== UGVu IGxvYmJ5 IHNxdWFk NDMz dmlhdGlvbg== IGJlaWRl 4Lat4LeS IGZsb3I= IHBhcnRlcw== 4YOd4YOg4YOY4YOh IHZhcnM= ZXJldW0= Liks IGluZGlyZWN0 INeU157XqQ== JHJlc3VsdA== 4KWB4KSt 44GV44GE bmljZQ== IGRlYXI= IGFtZXQ= 6KeS IHBsYXRlcw== YXJkaW5n IG9wZXJhdGVz INin2YTYp9iz RGVhcg== INGH0LXRgg== bnNr aWdlcnM= dGF4 4pSB IEZpdG5lc3M= IOCkl+CksOClh+CkleCliw== INmH2LPYqg== 4Li04LmA4LiE4Lij4Liy4Liw4Lir4LmM 0LXRiNC1 IFNETA== IEludGVyZmFjZQ== NjA2 YW5jb3V2ZXI= IGJlYW5z IHNvbGx0ZW4= IGFkb3B0aW9u IFNRTEV4Y2VwdGlvbg== 15nXnNeU IENvbnN0cnVjdA== IGludQ== OlN0cmluZw== IHBlbMOtY3Vs IGNvbnRyYWN0b3I= IGxhbmRzYw== INC00YA= IGJlc29uZGVycw== 5a6+ 4LC+4LC4 2YTZhdin2YY= 77yf4oCd IEJpZGVu Y2l1bQ== ZHVyYXRpb24= IOGDkOGDk+GDkOGDm+GDmOGDkOGDnA== b2xseQ== IGNvbnF1 INCx0LvQsNCz IM+Az4HOv8+D NDc1 INWj1oA= 4YOg4YOU 0YDQsNGB0YI= IHLDqWM= 0LLQuA== JS4KCg== Lk1vdXNl IHByZXZlbnRpb24= IOaO ZW1k IEFuaW1hdGlvbg== 4KeN4Kaw4KeA Y2FuY2Vs 5pa55byP INiq2YjZhA== IOCmqOCmvuCmrg== IHN1Y2Nlcw== CVU= INW21oA= IHRyYWJhbGg= Mzgy ICAgICAgDQo= TnU= IOCkn+CljeCksA== IEtpbA== IGFycmFuZ2Vk ZWx2ZQ== IHNvcGhpc3RpY2F0ZWQ= aWZv ZW5lc3M= IGFycmFuZ2U= LmFzc2lnbg== X3VzZQ== 2YrZhdip IENvcnA= IG1vbnN0ZXI= Lm1w IGNpZW50 IOCkheCkrg== IMOpcG9jYQ== 4KWN4KSv4KSu 64g= X3Bhc3M= LnBhcg== 6L+d IGZhY2lsaXRhdGU= IERlbnZlcg== NzA3 4LmI4Lih IHRoZW9yZXQ= IGtpZQ== 5ZWP IGJldHM= NzYw IGZvcnNr IGV4Y2l0ZW1lbnQ= b2ZmZXI= 55qE5aSp5aSp5Lit5b2p56Wo QmVlbg== IHByaWpz 4Ka/4Kew ZWVy IEVE w7hk IGN1cmU= dXRoZXI= IFBpcg== dXNzYQ== ZW7Dp2E= w7xsbA== cG9pbnRlcg== Zmljb3M= INGD0Lo= NTg4 IElzYQ== IHBpc3Q= dWxlbnQ= 6I+c LmNj IHR3ZWVkZQ== IEFuYWx5dGljcw== 0L7RgNC40Y8= ZW5laQ== IOCqpuCrjeCqteCqvuCqsOCqvg== CWZpbGU= IFZhcmlhYmxl Ojp+ IHZpc2l0YQ== 0LrQuNC80Lg= 16TXmA== IFBlcm1pc3Npb24= IG1hbnVmYWN0dXJlZA== IGNhcmFjdA== ZWNp IFBpbnRlcmVzdA== IENvbnN1bWVy IGN5bg== TGk= IO2MjA== IGRlc3A= NTkw NjY3 INC90LDQsw== NTYy IGFhbnM= IOCyheCyteCysA== IGFzc3VyZWQ= dmVuZA== IHF1ZWxxdWU= dmFkYQ== IHVubGlrZWx5 5Y+m57G7 IFJFVA== LmhlYWRlcnM= cmVjdGlvbg== KGZpbHRlcg== IOCs IERpY2s= INOp0YE= bm0= IGV1eA== INGB0LvQvtC2 IOCqsuCri+CqleCriw== dGJs KGVu INC20LXRgg== XFN1cHBvcnQ= YWhu IEdyYWRl SURT 4LWN4LSv4LSC IHN1cHByZXNz IEdtYg== LdC6 IHByb3RlY3Rpbmc= Z2VuZXJhdGU= IOu2iA== U2NhbGFy 44OZ VmlydHVhbA== d29u IGFsaWtl IM6/z4DOvw== INm+2LHZiA== LkZpcnN0 0YDQuNC0 IOCquOCqvuCqrg== IGRpc2XDsW8= d2w= IGFnZ3Jlc3NpdmU= SW5saW5l INij2Lk= YXJyYQ== 0YjQuNC5 ODEy NzMw 0L7Qu9C10LI= INGE0LjQu9GM cGFpZA== IOCyueCzig== IFRPUA== IFpvb20= dmVoaWNsZQ== 4Li34LmI4Lit4LiH IOCkquCliw== KGdyb3Vw c2dpdmluZw== b3dpbmc= IHZhcmllZA== IHJlamVjdGVk J2VsbGU= xIdh IHppdHRlbg== VW5pZm9ybQ== INen16g= IOGDoeGDog== YW5oYQ== 1Z4= X18u 0J7QsQ== IGFjdGl2YXRl IHJlc3RyaWN0ZWQ= yZlzaQ== Y2tldA== IEtvcg== IExvZ28= 2YHYp9mC Y2Vzc2lvbg== aW1pdGVy IGVwaWM= INin2YTZg9ix2Kk= Q29tbWVyY2U= IGFueeG7iw== IG1vaw== dGVs 0Z/RjA== IHTDqnRl IEluZGl2aWR1YWw= 4YOj4YOk VG9vbGJhcg== R29vZHM= KGRldmljZQ== zrvOv86z 44Oa U29uZw== 0YLRg9GA0LA= IFNjaG9vbHM= IGRpc2Fn 2KjYuQ== XENvbnRyb2xsZXJz IERpYQ== cm9zZQ== IFBhcnRuZXJz Q29tcGlsZXI= IOCkreCkqOClhw== IEFzc2V0 IHNlbGxl IGVzcGVjaWFsbWVudGU= aW1hdGVk IgoKCg== IOCwruCxgA== IGJlbGllZnM= INin2YTZhdmG2Kc= 4YOU4YOg4YOh IG5lYm8= 4Z+g IGxpY2Vuc2Vz QW5z 2rM= RnVubmVscw== ZWxmYXJl b3Jpb3Vz T2JzZXJ2YWJsZQ== 55Sf6IKW Z2VtZQ== JSUlJSUlJSUlJSUlJSUlJQ== IHNpZ3VpZW50ZQ== INee15s= aWZmaWM= IGRpZmZlcmVudGx5 NDk1 c2VyaWFsaXpl IGluZmVjdGlvbnM= w6JuZA== IHPhuqNu IGRpcmVpdG8= 15DXmQ== 2YjYtw== IEplc3M= 4LiU4Lii IG5ldXI= 4LS44LWN4LSl IHZlbGU= IGVzdGFk V2Vubg== 1aXVug== Ildl aGFhbA== 4LmE4Lib w6RyZW4= 2LHZitmC2Kk= IFJ1cw== IENydXo= xYE= 2YXZiNi52Kk= OnRydWU= 5Yqg55uf aHVpcw== ZWR1Yw== bWF0ZXM= IGJyb3dzZXJz LmZyYW1ld29yaw== IG5haWw= KCc6 SEk= IGp1bms= IGJldGVr IGFkZGljdGlvbg== INeQ15HXnA== 7Jio QWxsb3dlZA== 2LPZhw== RnJl YmFuZw== 5oqA5pyv IGluZmxhdGVy IEVudmlyb25tZW50YWw= aG9k IHZvaWNlcw== 16jXkNep INeV15XXkNa4 IEFydGlrZWw= IERldGFpbA== X1BJTg== 0LzQsNC5 IFBpY3R1cmU= IGZsdXg= TWlkZGxld2FyZQ== INmI2YHZig== INqp2YbbjNiv IHNldHRsZQ== INC00LXRgA== 4oCV IGZpY2E= IHdhYXJpbg== O1w= IGVudG9uY2Vz INGN0LvQtdC8 X3Bvb2w= INmE2Kbbkg== W3Y= IGRlbGE= REVG IEZpeA== IFBST1ZJREVE b3BpYQ== ZWxsc2NoYWZ0 IGdyb8OfZW4= w7pj IFN0cmU= INis2Kg= IHBpc3M= 5LuK5bm0 IGxvZ2ljYWw= NDY1 INCY0Lc= 4K614K6w4K+N IOGDkuGDkOGDm+GDnQ== 0LTQstGN0YA= RUFS 0LPQtdGA IGFwcGFyZW50 IHJlY3Jl 0LvQsNC00Ys= IHbDpXI= IEhvbmRh IGRhbGxh IERyeQ== IGxhdW5kcnk= IGljaGU= ZmlsbGVk VW5hYmxl UGxhY2VtZW50 U2V0cw== IHRow6w= 4Kaw4KeN4Kak KHdpdGg= IGJpb2xvZ2ljYWw= 2KjYtw== dXNpYXM= IGVydw== IGZhcw== Lmhvc3Q= INC80LXRgA== IHVwbG9hZGVk 4YOd4YOZ z4DOsQ== 44GW IG1hYWs= 2pPZhw== 4KSV4KWL4KSC 2YjYow== IGhvbmV5 4oSD IHRyaXR1cmFkb3Jh IHN0b3BwaW5n IGRpc3BvbmlibGVz dG9s aW51eA== 56eY 0YPRgtGB0YLQsg== KHNlYXJjaA== ZGlv IFByZXNlbnQ= INGF05k= IHNlaW5lbQ== 2KjZiti5 IG1vbGVjdWxhcg== IGNvbnN1bHRpbmc= CQkJCQkJCQkJCQkJCQ== U3F1YXJl 0J7Rgg== X0lOVEVS INC70LXRhw== IEVyZmFocg== LnJhdw== UmVsYXRpdmU= IElH aWtpcg== 2KfYuA== IHByaWNlZA== IGV4Y2Vzc2l2ZQ== IM+Dz4TOsQ== 6YWS NDIz IGNvbWXDpw== INeR15nXnw== IHByZXZhbA== IHBpY3M= IGJlYW0= xII= INGB0LLQtdGC IFBpbms= 0LXQvdOZ 4bqpbQ== UGFydHk= 4oCZd2FuYQ== INGF0L7Rhw== aWV0ZXI= Lics 55uu5YmN Zmg= YXLDoW4= IGZlcm0= IGluc3BlY3Q= IGNvbmRp Q2Fz IG5pY2VseQ== dHJhbnNmZXI= INC60L3QuA== dWRnZXQ= c3RhbmRhcmQ= 4LmA4LiX4Lio X2RlYnVn IOyggQ== b2xvZ2k= IE1lZXRpbmc= 4YOg4YOY4YOV IHZlcmE= IHphZA== ZWxsZWQ= IG5vc3Nvcw== LXJvdW5k IHNlZ3VyYW7Dp2E= X01BUA== PG0= LWhlaWdodA== 4Z+i IHN0cmFpbg== IC0tPgoK IFNjaGVkdWxl KGJ5dGU= IHVuc2VyZW4= 0LjQu9GM0L3Qvg== NDUz IEZyYWdl NDM0 INC60q/QvQ== INC/0LvQsA== X3NwYWNl IFNraW4= IOOAjA== IHNhdGVsbGl0ZQ== 0q/Sr9C7 anNw ODIx 4LSu4LS+4LSv4LS/ IOum IGFpcw== IHNlY2FyYQ== IGVpZ2VuZW4= IFJhY2U= INij2K3Yrw== IER1dGNo TXZj 1aHVqQ== bMSxaw== IExldHRlcg== IGV1cw== 4YOY4YOn IGphY2tldA== 6ZmN d2V5 ICUu IGxhYm9yYXRvcnk= aXlhbg== aXN5b24= INGB0LrQvtGA cGVycw== IEd1YXJhbnRl IHNjYXR0ZXI= INCw0YQ= MDMy Y3p5 IERBTUFHRVM= w6BuZw== IE1hcnlsYW5k TkVDVA== 16LXoNeY YXJi IHRhbmQ= xI8= 44Ga IHJldGlyZWQ= IHNjaHc= INC20q/RgA== IGZvcms= IG1vZGVyYXRl aG9vaw== 4YCy4YC3 TUFQ IGRvbmF0aW9u aWRleg== 4LeF IGxhd24= 4YOY4YOg4YOV U1FMRXhjZXB0aW9u 4KSC4KSk4KWN4KSw4KWA 4KeL4Kau IGN1c2g= b3VudGVycw== IGNvbXBvdW5k IGh1bnQ= IHphZw== KScsCg== IGdlbmVyYXRpbmc= IHNwcml0ZQ== IFByb2I= Wy8= INGA0LfRiw== dWV2bw== YWJpbGlkYWRl IHByb2R1Y3Rlbg== INC70Y7QtNC10Lk= aHVz 4K6/4K6f4K+N4K6f IFJlc3BvbnM= IHZlcmnDsA== 4LK+4LKh IFBlcmZvcm0= cHJvZA== INiz2KfYsg== 0YDRg9GI Z2o= INOo INC/0YDQtdC00L8= KGFk 5pu05aSa INek1r/XkNa316g= IFNvbGFy 1bjWgtWp1bXVuNaC1bbVttWl1oDVqw== cGls 4YOV4YOY4YOX IOGekw== IElzbGFuZHM= IHJlY2VpcHQ= L2hvbWU= 56S+5Lya IHByb3Zpc2lvbnM= IGdyYW50cw== IGVuYWJsaW5n IHJvbWFu 2LHZitio LmphY2tzb24= bmVzdA== 4KSq4KWB4KSw IGZsZXM= INGN0LrQvtC90L7QvA== IGhheWE= NDUy IFR1cms= 77yM5LiA xIF0 INC30LDQtA== ZW1pdA== Z3c= IOGDm+GDmOGDoeGDmA== IOCuteCuv+Cu 0L3QuNGC0LU= X2Nvc3Q= IEludGVyaW9y IFRlbXA= UGllY2U= 5Y6F X2N1c3RvbQ== NjA0 IGtvZQ== UGFydGljbGU= IHZlcmRl YnJpdA== OTI1 ODQw KHJlZw== MDYy 2KfZhNit 0LXQtNC40L0= INGD0YHQu9C+0LLQuNGP IGltcGxlbWVudGluZw== Nzcw U2ll IOC0heC0qA== IGdhcmJhZ2U= NDM5 IGFjY3JlZA== INmD2LM= UmVmbGVjdGlvbg== 4KqT OTEw IFlvZ2E= IFByb3M= IGrDsw== 15DXlA== J1w= IHRk YW1haw== dXZl w61hbW9z IGJoZnVpbA== 4Kqc4Kqw IGdlbmVyb3Vz TkVDVElPTg== VFVSTg== IGZvcmV4 c2xpZGU= ZGVr KCU= SVZBVEU= Z3JhZGVk INGB0YLQvtC40YI= IFJhdw== IFNwdXRuaWs= INC80L7RgA== IHbDoWw= 2KfYptmF IHByb3BvcnRpb24= VGVs 4YOV4YOQ4YOa bGFyZw== 7ZSM IEJ1aWx0 IGF5dWRh RE9DVFlQRQ== INGA0LXQsdC10L0= IEZpc2g= IEFL IG5vdXY= IGvDtm5udGU= YWxsaQ== INGC0YDRg9C0 4oCZaHVp UHVi IHByZW9jdXA= 0YDQsNGC05k= IGVuZ2luZWVy INio2KfYqg== IGp1bGxpZQ== IENhcmJvbg== fScs IHBvbnRv IENvYWNo YmVn IG1vdW50ZWQ= IG9iamV0bw== VVNUT00= IERvcg== Y2hpdG8= IM6T c3RhdHM= 0L7RgNC+0LQ= IHBlbWI= IEdpdA== IOWmgg== bG9zc2Vu aW54 64Kg INC60LXQuQ== 4YOQ4YOc4YOh IGluZm9ybWF0aXZl NTA2 LmVycm9ycw== IGFwcGV0aXRl 4KS44KWN4KSV YWluZXJz z4HOtc6v c2VydGF0aW9u X2Rpdg== IFBsYXR6 IEhhbmRsZXI= 4Ka+4KaV4KeH LkRyYXc= IEhvY2g= IOCksuCkvuCkl+Ckvw== Y2hlaWQ= UGFn d2lqbA== IGNob3Nlcw== IGRldQ== IFNVUA== dmFk IFBPUlQ= 4LS14LS/4LQ= aXRjaGVk IHRpYXM= b3R0aQ== IEdyYW50 INGB0LvQtdC00YPRjtGJ IG9mcmVjZQ== NDMx 4bujcA== NDI4 dWxseQ== UHVibGlzaGVy IGFxdWVsbA== U3R1ZGVudHM= IExleQ== IHN1Ym1pdHRpbmc= IGRpdmVyc2Fz IG1j aWthcw== IHByZWNpc2VseQ== INiq2YPZiNmG 44Ks IGluZnJh Mzk4 4bqz Lndz z4TPhQ== IGxpcHM= 5Y6G5Y+y INaF1oA= IEJlYXV0eQ== Znc= X2Z1bGw= 0YbQuNC/ X21l 44Oq44O8 IENocmlzdGlhbnM= IG91dGxldA== J10KCg== 16TXpw== 15nXmdeR IFVwbG9hZA== 4YOY4YOc4YOQ INCf0L7RgQ== LkFwaQ== IFByaWNlcw== w6Vs IGludGVuZA== LmxldmVs QnVpbGRpbmc= IFp3ZQ== IHRhbw== IHRhbXA= 4LiZ4LiZ IGzDpHNzdA== aWJhYmE= IGNhbGxlcg== 15XXqNeZ150= dWR1 X1NVQg== IHN5bnRoZXRpYw== IEVuYWJsZQ== IOCwquCxiw== IFRyYWls LXVwcw== 56ev w6RnZQ== LnR3 15DXmded IGZsb29yaW5n IFBL 0LjRgdGC0YDQsA== dW5pb24= U3R1Yg== IGlkZWU= IGFpcmU= IGVudHJhcg== 1bbVpdaA1avVtg== IMO+w6E= IOCkruClgeCklg== IHJlbGF4ZWQ= IG9pbHM= 4LS/4LSa4LWN4LSa4LWN IGjDqQ== INC00LjRgQ== IGRvbWlj bmluZ2Vy INC90LXQtw== IHZlcnN0 RVJB 4Kqc4KuA dHNjaGFmdA== IGNvbWJ1c3Q= IHRyYWluZXI= LldpZHRo IGludGFrZQ== MDgx IEZhbA== IGxpbWl0YXRpb24= 5as= IHN1a2E= bWF6aW5n 5ZKM5YC8 IGRpYWdyYW0= 6Ie0 6rmM7KeA Mzky VFJHTA== IEVtcGlyZQ== UmVwbGFjZQ== YmxvYg== 4Ka/4Kaa IGFwbGlr bGFiZWxz 4LeD4LeK 4K+G4K6w UmVnZXg= IHByaW5jaXBhbGVz IHdoZXJldmVy 4LmH4LiU IHphYg== J2ludA== V2Fsaw== INC40LfQsQ== 4Kqd IFhDVA== IOC0qOC0n+C0pOC1jeC0pA== YWJhc2Vz ZGVzaWdu KGNvbA== IGFyZ3Vl 0L7Rj9C9 INC80LDQuQ== IGVudHJldg== 5Zut INC90LXQsQ== X0VYVA== cmllYmVu IFZvbg== 0LLQsNC10YLRgdGP IOCqrOCqqA== IGtub3dsZWRnZWFibGU= IGthc3V0 KCctLQ== IGzDrWRlcg== IGJsYW1l SURB IHLDqWdpb24= INGC0LDQvQ== IOS4reWbvQ== TUc= b3VuY2Vk INWh1oDVpA== dHJpZ2dlcg== IHRlYXJz YXZpZXI= IG1ldHJvcw== cmVzaXpl INGB0YPQvw== 7KCI IFBlbnQ= IEvDvA== QUNIRQ== 44OE IGTDrQ== IFRlbm5lc3NlZQ== IGZ1bmt0aW9u X3RydWU= IHJlbnRhbHM= b2xpdGFu YmVsZQ== LWtleQ== LWFwcA== Q2FwYWNpdHk= IFJFQUw= IM68z4DOvw== 67CV IGljb25pYw== IGVzY2Fs IHBpY2tz IHByb2Zpc3M= KCk7CgoK dmVyaw== Lmh0 LWZsdWlk YWN0b3Jz 4oE= IGJhbm5lcg== IGRlY2xhcmF0aW9ucw== IHZlcnRl IHN1aXRz INeW15nXmdef c2V1ZG8= IGNvbHM= ZGlyZWN0 IGNhbG9y LWFj YWNpb25z IHByb21pc2Vk 6aC7 IHJ2 NjA1 YW1pZW50b3M= IGlkZW50aWZ5aW5n IFdlZGRpbmc= 5rmW 6K+G IGxhZ2k= IHByYWN0aXRpb24= 4Ka+4Kay4KeH 65+J aWdpb3Vz IHN0YXY= 4KSc4KWA LWVt IGpvdXJuw6ll 44CRCg== IGTDqWk= IG1hcmU= IHRhY2tsZQ== LnNoYXJlZA== NTE4 IGZyYWN0 dXRpbg== IHdvbA== 24zZhtuM IG1lbm4= IHNob3J0ZXI= INeW15nXmg== IGZyZXM= XV0s 4YOU4YOW INC00YDRg9Cz0LjRhQ== Mzc5 LmNhY2hl IGxn IHN1cmdpY2Fs 4LKy4LOG 77yX 44CNCg== aWNhbm8= IFJG IGJpZWRlbg== IHNpbGVuY2U= T3ZlcmFsbA== IHRlbmhv YWt0dQ== INS/ INGI0YM= YXJtcw== IER5bmFtaWM= 4LmA4Lil4LmI4LiZ LW92ZXI= aXNlbA== INWl1bQ= 2LLYsQ== aW5qYQ== IFN3ZWV0 2YHZhA== 15zXlQ== QWxleA== IGRldXI= IMWhZQ== IG92ZXJ3aGVsbWluZw== IGFra2E= IFJlc2VydmU= IHZzZQ== a2ls IFRhdA== IC8+DQo= IG1lbmluZw== IFNwcmluZ3M= IERpYW1vbmQ= IGJ1cnN0 b3B0ZXI= 2LHYp9it IGNydXNoZXJz IHNpZW5kbw== IENoYQ== QU5ETEU= YW5nZw== PlRoZQ== KSIK IEdldHRpbmc= 6K64 IGTDvHI= 6L+Z6YeM NDE5 JHM= IG1lY2hhbmlzbXM= 5a2j YXNpYQ== IOCmuOCmrA== 5aSn54mH 0YbRltGX IHB1bmNo IGhlYXA= IGx5cmljcw== IE1vZGFs IOCqpuCqsA== YXRpYQ== IEFjY2VwdA== INGF0LDRgNCw0LrRgtC10YA= c3RhZ2U= 5b2p5b2p56Wo IOKZ YWN0aWM= INin2YTZiNmC IGNvbnRlbXBs INC80Ls= IHZlcmFuZA== IHBhc3NlbmdlcnM= Q29uc3RydWN0 b2Zmcw== IHTDtQ== IEtvc3Rlbg== IENBUA== KioqKio= IHBvaW4= IGFjY29tcGxpc2hlZA== INCy0L7Rgg== 4LCk4LGL RVRIRVI= IGJ1cmc= IGNvbnRyaWJ1dGVk Q04= IHbDpHI= 0LDRiNGM T1JNQUw= IGhhbnM= IHBhcnRp X05VTEw= IE1BUks= aW5uZWQ= IGRlY2U= IG9ic2VydmF0aW9u IGZhaw== YWlzb24= 05nQsNGA0LA= wqDCoMKgwqA= 25XYsQ== X0FERFI= X2NvcHk= IHZvbGRv IOCukuCusOCvgQ== YW5uw6ll 4LK/4LK44LK/ 2YjZhNmH IG5lY2VzYXJpbw== 4LS44LWN4LSx4LWN4LSx 2Kfaug== KT4= 4Li14Lii4Lij4LmM X0RBVEU= IM6X bWlzdA== 4LCw4LGB 5rG96L2m IGluaWNpYWw= 7JiA ZW5zZW1ibGU= LXdyYXBwZXI= IOuLuQ== IGZhY2lhbA== LkJvb2xlYW4= RGlzYWJsZQ== bWF0cml4 4YCE4YC54YC4 RVRB 0LvQuNC9 IGNlbGVicmF0ZWQ= IFNIQUxM dnY= IGF1dG9tYXRpb24= INi12YE= IGZlcnI= IFJ1bGVz INCy0LXRgQ== IFZhbGlkYXRpb24= 157Xmded IGNhYm8= IGJhbmRh IEh1bg== IGJvbmE= TmVhcg== INC/0LDQvA== INi52YXYsQ== 4KqC4Kqn YWRhbA== IERpc2NvdmVy IOCkteCkv+CkrQ== IHBvbnRvcw== 6KGA INWh1bXVrA== SGludA== aXJpbA== INGC0YPRgNCw IGhhZmE= IOawuA== IGNsYXNzaWZpZWQ= LXJlZHV4 IGxvb2t1cA== WWU= 4oCZZWxsZQ== IM+AzrXPgc65 IGxleWk= IOC0heC0pA== MDQx IGpvcw== IHByb3NwZWN0aXZl b3JyaXM= aW50ZXJwcmV0 IHRlbXB0 INiv2KfYrtmE bWFhbg== IE5hdnk= LlBhZGRpbmc= IFByaQ== 2KfYs9mK2Kk= 4bqxbmc= IHNlYWxlZA== 0LjQvNC+0YHRgtC4 IEFuZGVyc29u IEdNVA== IGJhbGNvbg== INin2YTZhdmG2Ko= IHNvbHZpbmc= X0dS bGI= NDE4 27g= d2V0 X2RlY29kZQ== 5aqS IHBoYXJtYWM= Q1JJUFQ= IHllYWg= YXBwcm9wcg== 0L3QtdCz0L4= w6lhbg== T3ZlcnZpZXc= 4YCR LWRlcHRo IOGDl+GDkOGDnA== IOW5sw== IOuTpA== INGD0L3QuA== IOColeCosA== IGNvbXBhc3Npb24= ZXN0ZXJvbA== IHByb2R1Y3RpdmU= IHJlYWxpZGFk 2KfZvg== IHByb3RlaW5z 4Kay4KeL IG5vdmVtYmVy IGJlaG8= 0LDRgtGL0L0= YW5na2Fu IOyx 0ZjRgw== IGRhbWFnZXM= IHN0ZWFkeQ== cmV2aWV3 KHsNCg== Z3LDqQ== IG9wcg== SGFwcHk= c2h0w6s= Mzkx INqp2KfZhQ== IGVudGVuZGVy IGludGVydg== 4LS+4LSk4LWN4LSw INC/0YDQuNC3 SW52ZXN0 IE1pZw== YWNoZXJz 4LiK4Lix4LmI4LiZ IENG ICEhIQ== IGNvbWlj INCd0L7Qsg== aWdyYXRpb25z IOyI 4KSC4KSs LnJ1bnRpbWU= KGh0dHA= 67c= 5bCP6K+0 PWludA== IFNxdQ== IENob2ljZQ== NTM3 44CL77yM 7IS47JqU IFdS ODY0 0YjRjA== IG5pdg== XS4KCg== dml2 LmNvbmNhdA== IG9mZmVuc2U= Y29uc3RhbnRz IGVqZXJj 57uP5rWO b3Rhcw== 56+u 0YPRgNCz bmFtYQ== IERpc2NvdW50 IOC0leC1hw== 4LOM Q29ubmVjdG9y 4KuL4Kqw4KuN4Ko= IENvbGxlY3Rpb25z SU9T 8J+Zgg== IHBvbGx1dGlvbg== NDE3 Mzg5 IHByZW5k 4LK14LKo4LON4LKo4LOB IHZyb3V3 cmVzaGFwZQ== R3JhZGllbnQ= IGNpYWxpcw== L08= IE92ZXJhbGw= IERU IGRlamFy 2LbYp9mB2Kk= INWq1aHVtNWh1bbVodWv IOCkquClgeCksA== VW50aWw= bGV2YW50 VG9vbHRpcA== dW5kdQ== IOWSjA== IEhpc3Q= IHNjaG9sYXJzaGlw IOCwquCxhg== IGZlaXRv INCi0L7St9C40LrQuA== INCy0YDQtdC80LXQvdC4 IGxhd3llcnM= IHB1enpsZQ== IGRhdm9u INGI0LrQvtC7 Ki8KLw== IOeL KysrKysrKys= 4KeN4Kac IG91dGRvb3Jz b3h5 IGJlbG92ZWQ= W2lu 4LmA4Liq TGV0dGVy IEdhbWluZw== Y2hleg== IG1hZ2ljYWw= IGFyeQ== LnR3aXR0ZXI= IHBo4bqjaQ== IG9jY2FzaW9uYWxseQ== aXlhdA== IGxhbA== IEVkd2FyZA== IGxvbmdlc3Q= 2qnZig== UmF5 IGNvbmRpdGlvbmluZw== bmVjZXNzYXJ5 NTA3 IO2VhA== INC00L7QvNCw NDk2 IEF2ZXJhZ2U= dG9t IGRldmFudA== L2Rpc3Q= IGZpbm5z IElOQw== QXNzZXRz IGVxdWlwZQ== IOelng== IGRlZmluZXM= IE9mZmVy IGFwcm94aW0= YCk7Cg== ZmFpbA== SUJPdXRsZXQ= INiu2Yg= IFVyYmFu Wmlw 2YPZiQ== PGJvZHk= LW1hZGU= 44OP c2lkZWJhcg== bHlz RWxzZQ== IGdsdWM= 2prYqg== IGRpbmhlaXJv dWVibG8= IG1heW9yw61h IOCwruCwsA== IOCuieCus+CvjeCusw== IG1laWxsZXVy IGNpbmVtYQ== IOCmleCmv+CmqA== IGRpc2NsYWltZXI= IGFjaGlldmVtZW50 IOCqqOCrhw== aW50ZXJ2YWw= RmVjaGE= IG5lYXQ= YnJ1 IENvbm4= X2dlbg== IHBhdHJvbg== fTsKCi8= J107Cgo= LkRlcw== 5rip dW1ibGU= XENvbXBvbmVudA== IHZlcnRy KGNvbg== IGNoYW4= 6bKB IHJlbGF0 IHByZXNlcnY= IOC4neC4suC4gQ== IGFkdmVydGlz 4Li44LiB YW1vdXM= IGNvbXBsYWludHM= X3VyaQ== dWRvcw== RnVuZA== 2K7ZiNin IOmb IGluc2Ny IGNvbXBsZXhpdHk= IOWB LWRh IGh5cG90aA== 4bmD IOuo IHBvdHJlYg== IERydWc= LmNz IHBvc3Nlc3Npb24= IHZhY3V1bQ== 5q2m 5q+N LXJheQ== aWdnZXJz IGRlc2VydA== 2KfYqtmH IOCkrOCkvuCksOClhw== IHNoaW5l IGVuZXJnaWU= b2xkcw== IG5vdGlmaWNhdGlvbnM= NjA4 LXBlcnNvbg== c2VjcmV0 2KfYs9iq 1LU= LlNlcmlhbGl6YWJsZQ== IGRlZmF1bHRz X3NyYw== IHRvdGFsbWVudGU= IG1pbGjDtWVz ZWlu PT8= 4YCa4YC5 IHJ4 INi12K0= INi52YTYpw== IGNpcmN1bGFy IGRvbWluZ28= dW1pbmc= 1oTVqA== IE5PVw== IEZpZg== L0g= ICMjIw== TW9kaWZpZXI= INC30LDQtNCw OkA= IOGAng== RW5lcmd5 IGNsZWFuZWQ= YW5vbg== IEFsYmVy IElORA== IGVzcXU= NzAz 4KSu4KS+4KSo IFB1cmNoYXNl YmFsYW5jZQ== IE1MUw== TEVBU0U= IHRoaXJ0eQ== IGNvbmZpZGVudGlhbA== IGFjY2VudA== IHJpZg== cmljYQ== IGluZGVudA== dXJvcw== 5ZCs IHNvYXA= dWlzdGU= 6YCj IE1hcmluZQ== 6KiI LXN1Yg== NDYx IG9l IHRibA== XFJlcXVlc3Q= IGNsaW5pYw== IGVzcGHDp28= IENO IHNoaQ== 4Kah4Ka8 IHJlbGlhYmlsaXR5 LW9w INuB2YjYqg== 6LWM5Y2a IHJlbG9hZA== a3Rvcg== ZXZhbA== CgoKCgoK IHJlYWxpc3RpYw== 4LC/4LCk4LGN4LCw 4buNcuG7jQ== IG1vZGlmaWVy RGF0YXNldA== b3RoZXJhcHk= IEVjb25vbWlj IEFmZmFpcnM= NDUx 5pG4 IGNhdg== 4Li04Lih4Lie4Lix4LiZ aWxsb24= QW1hem9u 4KS+4KSk4KS+ IG51ZXZvcw== IHByaXA= IENPTlRSQUNU 74I= IGRlc3RydWN0aW9u LWFt IOCkueCkvuCksg== IGFzc3VtZWQ= IHBlcmM= IHdhaA== Y2hldA== IGluY29ycG9yYXRl IHBhcmNlbA== INiz2Ybarw== IGF2ZW50 INit2LY= IExM IOCkrOCknA== IElvd2E= 5aiB IHNpbGVudA== IE93bmVy IHJlc3Bl IGJ1ZGU= IG9rdQ== U2ltaWxhcg== LnZhbGlkYXRpb24= w6R0ZXI= IHNldHRsZWQ= U2Nhbm5lcg== 0YDQsNC20LTQsNC9 IGRlZW1lZA== IOC5gOC4mw== IGFkb2xlc2M= RmxleA== IEF0dG9ybmV5 IGNhcmFjdGVyw61zdGljYXM= LmRldg== IOCmueCnn+Cnh+Cmm+Cnhw== INW31aHVvw== IG51cnNl IE51bg== ZXR1cg== IFBob2VuaXg= IHJvdW5kcw== IHNlcGFyYXRlbHk= INmI2YLYrw== IHJldGFpbGVycw== INGG0Lg= ICAgICAgICAKICAgICAgICAK cmF3bA== IOCqteCqsOCrjeCqtw== 44Ob 4KeB4Kas IHVuc2FmZQ== J2Fu IGNoYXVmZg== NDU0 YmFjaA== U291dGg= NTE2 INC/0YDQvtC/ X0xFTg== IGZpbmFsZQ== X2NhcmQ= J3V0aWw= VmVyaWZ5 1aHWgNW+ cHNp IOGDsA== IHF1YWlz aWRs IGNvbnN1bW8= b3B1cA== IHRpZW5lcw== IEjDtg== IGxleA== 24zZhw== IGhw b2RpYQ== INCy0YHRgtGA INGA0LXQtg== IHRyYWRpY2lvbmFs NzQw IGluY29taW5n IFRleHR1cmU= IEJhcnI= IHRlbWFz IGRlc2Vudm9sdmltZW50bw== IGVuZ2xpc2g= IOC2vQ== IGJhZGFu Q29tZQ== 1aXVttaB IGZsdXNo ICIuJA== IOadpQ== IGF1dG9ub20= bGRlcg== IG1vbWVudG9z 5Lit5aSu Iikpewo= IGVzY3JpYg== IOWT IHNvcnRl ID4KCg== Z2llcw== aXBwZXQ= 2YjYsdmI IO2ajA== IGRpZ2l0cw== INi02Kg= IC89 4LGN4LCo4LC/ IENvbWI= IGFyYg== aXppbw== INCy0YDQsA== IHBpZWw= LlNpbXBsZQ== INin24zYsdin2YY= IGhlcml0YWdl IGhhcm1vbg== 5Lqk5rWB w5E= IGNvbmZpZ3VyZWQ= IGtlbmQ= LmxhdA== INC/0YDRiw== IFNuYXA= IGRpdmlz LmNvbnZlcnQ= MDc1 U3Rk IHNwZWFrcw== UXVlc3Q= IENPTVA= Rmln In0s bWVtb3J5 4LOG4LKv4LKy4LON4LKy4LK/ 4Kik4KmH IHBlYWNlZnVs NTk5 LkNvbHVtbnM= RGVt 4KWN4KSv4KSV4KWN4KS3 IGRj IGVudHJlZ2E= X3R4 Lm5hdmlnYXRl Lmdtcw== IHBlcsOy IGdpYQ== ODE5 RmlndXJl IHV5 UHJvdG8= IHJlcG9ydGVy Njkw 4Z69 IGVkaXRvcmlhbA== IGpva2E= IG1vc3Ry INC+0LHQvtGA dmlzZWQ= 4YOd4YOT4YOQ UHk= IHByb2R1w6fDo28= IGhpbnRlcg== IGdyw7bDnw== IElzcw== IHBob3RvZ3JhcGhlcg== aXR0ZW4= QXR0YWNobWVudA== 4LWG4LSo4LWN4LSo 4LCC4LCa 2LLZitiv IGTDqWI= NjAy IG9wdGljYWw= IEtpbmdz IEhvZQ== IGJhaWs= INGB0YLRg9C0 IGNvb2tlZA== ICkpOwo= IGhpcmVk INCy0YHQtdC8 IExhbQ== ZXN0YWRv 5LuL57uN IFVn IHJlcGxpY2E= IHNrZXRjaA== bWFraW5n 2KfYqNi5 IHRlaWw= IHZlcmRhZA== INmE2K0= IHB1cnBsZQ== IGd1ZXJyYQ== IENhdGNo 4LiX4Liw ZGFzaGJvYXJk IE1BTg== IHZvZA== bmluZ2Fy IFRIQVQ= PSQo IG1vdG8= IOGDl+GDpeGDleGDlOGDnA== Mzk0 LXBvaW50 IOCyqOCyoeCzhg== 0K4= 0LDQu9C40YHRjA== b2NjdXA= INGB0LLQvtGO 6Zu3 UmVjeWNsZXI= IFBlcmlvZA== dmVyZA== cXVhcnRlcnM= W3RoaXM= IFBoaWxpcA== IGludGVsaWc= IOCkueClgeCkqA== IExhdGVzdA== IEF1c3M= IGTDqHM= KioqKioqLw== 4LGA4LC1 4LC+4LCq IHphxI0= 64E= IFN0YWRpdW0= IHBvcHVsYXRpb25z INC80LjRgA== IHN1cHBvcnRlcnM= INGB0LjRgtGD0LA= X0xPTkc= 44Oi dXZv INmD2YrZgQ== INC90LXQutC+0YLQvtGA IG1lc2E= IEFudGhvbnk= 0LjQvNC+0YHRgtGM NDQy IEltcGFjdA== IGV0aG5pYw== IG5hxaE= IGVub3JtZQ== 4Li44LmJ4LiZ PyIKCg== IHBhc3Nhcg== IEp1bmlvcg== PHVpbnQ= IFlvdXRo 4LC2 4KuH4Kq4 INGC0LDQutC+0Lk= dXJm IGxhbsOn IGVhZ2Vy INeU15w= LmRvbQ== IGjhu6Nw 2LHbjNiv b2ludG1lbnQ= IOCqqOCrgA== X2Rpc3Q= X2NsYXNzZXM= c2hpbmU= 0LXRgtGC0ZY= IEx1aXM= 0YLRi9C9 IHJpY2h0aWc= IFNsb3Rz INGB0L7RhQ== IHNlcXU= aXZlbWVudA== 4LGN4LCV UHJvamVjdHM= IOS4gw== IHJ3 IHNjaHJpag== 4Z6B 5ZOI MDk5 IHBlbnNpb24= IGNvbXBsZXRh IGFnZ3JlZ2F0ZQ== IE5hZw== IG9jYXM= VGFsaw== b3BzaXM= IFRvd2Vy IGJvaXM= IHN1c3BlbnNpb24= IG5vdXZlbGxlcw== IHJhbXA= 4KSw4KWN4KSa IGxhdm9y IFNFUlY= aGVhdA== dGV2 YXBvbGlz IEpveQ== IOKYhQ== bG90ZW4= INC/0L7RjdGC0L7QvNGD IGtuZQ== 1bjWgtWp1bXVodW01aI= LnNxcnQ= 4oCZaWxz INC60L7QvNC/0LDQvdC40Lg= INWh1bfVrdWh1b8= IElv IGV4cGxvZGU= INqv24w= IHNjaMO2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IGZyaWVuZHNoaXA= YXJhbnQ= IHRydWNrcw== IGlycmU= IOKCrAoK UmVzZWFyY2g= IGRpbmc= IENvdw== IHZvbHVtZXM= TEFO IFJW IH0u Lk1ldGhvZA== IGFjY29tcGFuaWVk IERlbW9jcmF0cw== ZXNoYQ== IHZhcmlhcw== IHlvdXR1YmU= NTQz Lk1vY2s= 4oaT cHJvamVjdHM= Ymlz IHBlbmV0cg== IGJlaGF2aQ== UGFwZXI= 07c= T3BlcmF0aW9ucw== 5a6f YWJlbGVk 4KS/4KSk4KWN4KSw emllcg== IOC5gOC4lA== IGltcHJlcw== 0YHRgtC40YI= IOC0uOC1hg== IG1pZ3JhdGlvbnM= IGpldW5n INC606nRgNGB aW9zYQ== IHRvaQ== ZWxpbg== IEdQ 0L3QuNGH0LXRgQ== IGrDpHI= U2F0 dmVudGlvbnM= X1JPT1Q= YXBwYQ== IOCyueCyvuCyl+Czgg== IGV4cGxvcmF0aW9u 4LmD4Lir4LmJ YWdvbmFs IFBz IG51dHM= bGF2 a2o= IGZlZWRpbmc= IG51bWE= 5a+86Iiq NDY4 KSQ= IGFkYXA= IGJsYW5j YXJkYW4= 4KSh4KS84KS+ IFBvaW50cw== IHJ1aA== IG1lbGhvcmVz IEhlYWRlcnM= IEdheQ== IGx5aW5n IOeI LWFi IFByaW1hcnk= IGNoaW0= IGp5 ZWxpbmdlbg== IG1lc3VyZQ== cm91dGVz 2K/Zhdip 4LSw4LSC 0L/QsA== X3RpbWVy VUlLaXQ= 44CP44CO aWdodGVycw== IGF1dG9tYXRpcw== KHRhZw== Q2xvbmU= YW5kcm8= aXRpZQ== 77yY IOC4p+C4tOC5gOC4hOC4o+C4suC4sOC4q+C5jA== INi32LHZgQ== 4KS+4KSm4KWA QmVhcg== IGJsb2NrY2hhaW4= 5pi+56S6 IHNk NTU2 IGp1bmlvcg== IG5vaXRl LlJlc3VtZQ== IFZvaWNl IG1hbGVz 2KfYqtuM Z3JvdXBz IOGenw== IGRlc2Vt 6Zq+ cmVscw== xZll IHJlYWN0aW9ucw== Y29k 0LvRj9GO0YLRgdGP INio2YM= INqp2YbYrw== IGFjb21wYW5o aWV2ZW1lbnRz X3NjcmVlbg== IHBldGl0cw== INio2Lc= OTQw Lk1lZGlh 4KSV4KWN4KS4 QXNzaWdubWVudA== IENhcmw= YXZhaXM= w6RobGVu UHJlbQ== 4KSw4KWN4KS4 IOuzgA== IHBvZXRyeQ== Lkxpbms= LmV4ZWM= IE7DpA== IGRhbmNpbmc= IHNhaXNvbg== IEhlJ3M= 0LjRgNGD0YE= 4K64 KGFyZ3Y= 4KS+4KS34KWN4KSf4KWN4KSw 0YHRgtCy0LXQvdC90L4= IGFsYnVtcw== IOCwqOCwv+CwsA== INei16Y= YW5kaWRhdGVz VHJhdmVs Q09M 4LS/4LSx4LWN4LSx IGlq IHBhdGllbmNl IHNpdHM= 5Y+C6ICD U3RhcnRpbmc= X0ZJRUxE YXRvcmU= IHlhbQ== 5ZCN56ew 0LjRgtC10LvRjw== IHByb21vdGlvbnM= IExlbg== IEthYg== IGNvbnRhcg== IExhZA== IGJsYW5k IGJydWc= NjEy c2Vhc29u IHRhYnM= IHVudXNlZA== YAoK 0L7Qv9GA aGVybGFuZHM= aGF3 z43OvQ== ODMw IGF1Z3VzdA== IENvbXBhcmU= ICsNCg== Mzg3 IHR1bmU= IHByb2R1Y2Vycw== 0YbRjw== IOCuruCuseCvjeCusQ== 4oI= INil2YTYpw== IG1hc2g= NDk3 56+H cHJvdmlkZXI= aWR1 LCs= IGV4Y2VsZW50ZQ== 0YHRgtCy0YM= Z8Sn IG11c2g= IHNob3VsZG4= IHBvag== YWxsaXQ= IOGDoeGDkOGDoQ== U3RlcHM= IHRyaWNrcw== ZXJ0dXJh IENvbmM= PGFueQ== IGbDvGhy Qm90aA== INee154= 0pvQuA== IEhpbmRp UkdC LkVY IGVuY291cmFnaW5n 44K544OI KCl9 aGlzdG9yeQ== aW5pc2g= ScOTTg== aGls 4Kae eXRobQ== IElocmVu Y2hhcmFjdGVy V2lkZ2V0cw== IHJlc3RyaWN0aW9u KCdf IGdvcg== X3NjYWxl 2YTbkg== IGNvbnN0YW50cw== INWo1bbVpA== INC60LDRgNGC Njcw YW1vbg== IOyalA== c2tpcA== 7JQ= b2lyZXM= IEFsbGlhbmNl IHBvZHLDrWE= CQkJCQ0K IHN1dA== IHN1aw== IGNyw610 IE9wdGlt IE9iamVjdHM= INmI2KfYrdiv 0LPQvtC0 dXp6bGU= yZlsyZly IG5pY2hl VXI= IG5vdmVtYnJl IOey IOCkiA== IEV4Y2VsbGVudA== IFBlbmc= cm9iZQ== QEF1dG93aXJlZA== IG3DuA== IFNhbHY= INec15TXqg== 4YOU4YOR4YOo4YOY W2w= INeo15A= w7B1 dmVydHVyZQ== aWFyZQ== UVE= ODIy IGPDqWw= IOGDm+GDmOGDmw== LmhvbWU= MDgy INGC0Lg= 5pK4 INGC0L7Qvw== IOi+ 4KqF NDYy IGVsaXRl IHNhag== 0YTQtdGA aGVi IGFkanVzdGVk KGRvYw== IFJvbWE= emVq IFhtbA== IHNhbGFk IGNoZWVy IFZvY8Oq 0LPQvtC9 c2t5 2LrYpw== IG3Dug== SW5j IENhcGU= IGZvcm5l IHpvd2Vs IF9fKA== 15LXnw== KG9sZA== dWV2YQ== LlBvc3Q= IHNpbXVsdGFuZW91c2x5 2YjYsdmK2Kk= IHN0aWw= IOCyquCysA== 5pel5pyf IHJlZnVzZWQ= IGFsbQ== IGNvbGxhcHNl IG5paW4= IHR3aXN0 IG1vdHM= a2Vl IOuLqA== IGluZGVwZW5kZW50bHk= IGphaWw= NDM4 aW7JmQ== 4KS+4KSq4KWN4KSk cml0aWNhbA== SkE= INGB0L7QtNC10YDQtg== IEZyYXU= IHZpbGxh IOCkquCkvuCkuA== dXRpdA== NjAz IGZpdHRlZA== RG9uYWxk NDc3 Lmxpc3Rlbg== IGJhcnJpZXI= 4KWs IHZlcnRpY2Vz IGFzc3VyZQ== L3VzZXJz aWNpYXM= TEVBTg== 0LDRgtC10LvRjw== IGVzdHJl IGRldmFzdA== IGxpbA== NTQ1 4KmN4Kiw IFNG IEFwcHM= IEFsYWJhbWE= 6KGj dW5hcg== LlNwcmludGY= IGNvbnRhbWlu cGxheWVycw== IEJyaWdodA== ZXNzZXM= LWRpc2FibGU= IOC0quC0seC0nuC1jeC0ng== cmFpc2U= ODY2 INi12YjYsdiq LnNjYWw= IGNyeXB0b2N1cnJlbmN5 IGRlaw== IHN1YnN0aXR1dGU= IOCkieCkqOCljeCkueClh+Ckgg== IG1hcmlqdWFuYQ== 4KS+4KSu4KWA w7R0ZWw= YXZhcg== IGNoZW1pc3RyeQ== IEtlbnlh dHdv IGF0dGVtcHRlZA== IG1pbmlzdHJ5 IOWlvQ== KHBy IGFjdGl2aWRhZA== NjEx IFVJSW1hZ2U= INGA0LjRgQ== bXlzcWxp YWlzZXM= X2Vudg== csOk bGF0ZWQ= eWxh 15HXoteo IFNvdg== IFVsdHJh IHN1Z2dlc3Rpb24= X0hFSUdIVA== T1RP LicpOwo= Uk9Q dGlt 44CR44CQ44CC IFJlYWRlcg== IGVjb3N5c3RlbQ== 4KuA4Kq4 X1BPUw== IERhbms= IHXEjQ== IGFjY2Vzbw== 4YOU4YOa4YOh IFZlaGljbGU= J3VzZQ== IFZ1ZQ== IG1pbmE= Q29tbWFuZHM= IGVzbGludA== TFQ= IFBBUkE= 0YDQvtC7 INii2YfZhg== IGN1c3RvbWl6ZQ== IGNvbmZ1c2lvbg== INGE0L7RgtC+ INi32K3Zhg== NTc0 X3VzZXJz IHNlY3VyZWQ= 4KWN4KSf4KSw KSwKCg== IGRvemVu ZGFy IGhhcm1mdWw= INCz0LvQsA== 0LjRh9C10YHQutC+0Lk= INiq2Lo= LkdyaWQ= IEhPTEQ= IFNwZWFrZXI= IGltbWVycw== 0LvQuNC5 KG1vZHVsZQ== OTIy IG91dHI= VklFVw== LmJsYWNr IOyerA== IFVU 4oCZYWNj IFp1Zw== ODAz IEhvbWVz 0YjQuNC1 INGA0LDQsQ== 4Z+F INOp0YI= KHByb2plY3Q= ICgm RHVl X2pz IER1cmF0aW9u IOCmruCmp+CnjeCmrw== LXByb2ZpdA== b3Jhw6fDo28= LWFsbA== IGRpdmlkZQ== 0LXRgdC1 IElzbGFtaWM= UHJpbmNpcGFs 4LK14LOB IGNob2w= IE1laHI= X2RheQ== aWt3ZW1idQ== bmFjaA== UExBWQ== 4Kq14Kq+4Kqo4KuA NDY2 INC60q/RgA== NTMy b2NvbXBsZXRl YW56ZQ== IHVuZW0= YW5naGFp cG9vbg== TGlzdHM= R3JhZGU= Tmls IE5lYg== IGNsb3N1cmU= 4LC/4LCf CQkgICAgICAg dWRhcw== KGVudg== cmdi IFBlYWNl 4KeH4Kab4Ka/4Kay 0p/QsA== Mzk2 ODkw IG9wcG9uZW50 aGlz IEJlZHJvb20= UHVyY2hhc2U= IGludHVpdA== 2KfYsdmK2Kk= INC50YvQuw== YWN6 SUNP IGltYWdpbmF0aW9u bmlldXc= 4YCu4YC4 IGNhcGFjaWRhZA== 0YvRgNCw IEhpbg== LmNvbnRyaWI= aGVhcA== IEluaXRp RGlzY291bnQ= ZXJlY2h0 Y29tbWFuZHM= QU5ORUw= 2J8KCg== IHNlYmVs LkdhbWU= IGJvb2tlZA== 2LHYp9mH aXF1aWQ= IGJlZ3Vu dHJpYnV0b3I= IENvbXVu 4LGB4LCo4LGN4LCo4LC+4LCw4LGB PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 5Zu+5bqT dWt1bg== 4KWA4KSw YnVpbGRpbmc= IMW+aXY= bGF0ZXN0 IHRyb20= V0lTRQ== IHRyYW5zZm9ybWVk IGpldXg= IGFhZA== IHBydg== IOCoiQ== IGRpY2k= IHJlZHVjZXM= IGluc3RhbGxpbmc= IGNoYXJ0cw== IFNhbWU= IENhc3RsZQ== INC40YHQv9C+0LvRjNC30L7QstCw0YLRjA== IOGDk+GDkOGDoQ== IOC4hOC4sg== 15HXqg== NTM1 4KSv4KSw IHNhbGFo 2YXYsw== YW1pbmE= LkpCdXR0b24= Y3B1 cXVpcA== IG50cw== cmVlemU= bGljdA== IG1lbW9yYWJsZQ== IOCkteCljeCkr+CkleCljeCkpA== d2Vya2luZw== IGtlbm5pcw== 4Kun IGJsaWpmdA== SURFTlQ= IGl0YWw= 5bCP6Kqq dW5lcg== IDsNCg== IHZpc2l0ZQ== IOC0qOC0v+C0sA== UXQ= b3VydA== anBn ZWdp cmVzcA== 2LTbjA== IE1hdXI= IG5pbnU= IOCkquClgQ== IGFkZWN1 IGxlbnQ= YWxpeWE= IHNoZWx0ZXI= IGJsb2dnaW5n 4KS14KSw IGFyaw== IGJhc2g= INC80LDRiNC40L0= INCi0L7St9C40LrQuNGB0YLQvtC9 5oiq b3VyZQ== w6l0YQ== SW5zaWRl LkNo IHNwYXdu IFdQ IHRhZg== b3N0ZXJvbmU= cWFyZg== IHF1YXNl LlZJU0lCTEU= IHByYWM= TE9TRQ== w6Rubg== IG1ha2Vycw== IHRlbmFudA== IOGAkA== IHF1eQ== IE1lcmNlZGVz IEFSVA== 4Kq+4Kqw4KuL b3dhxIc= VlQ= INm/2Yo= 4LWX IG1hcnF1ZQ== IGNhcnJl IGN1cHM= w6Fp YXRpbnVt INin2YTYqtit 2YjZhtmK IGNodXk= IOCkhuCkpw== Z29u IGxlYWs= IHJlcGFy CQkgICAg IFt7Cg== IGVtYmVkZGVk X1RPS0VO IGV0bQ== IG5nw6B5 IEdvYmllcm5v c3Rhdg== 4LC/4LCC4LCa4LC+4LCw4LGB 4LiV4LmI VmFycw== UmVzcA== IEZpZ3VyZQ== 15fXpw== IOC4quC4oeC4seC4hOC4ow== IHNjaMO2bg== INC/0YDQvtCy0LXQtA== bGVhbnM= IGdlYmllZA== IEZ1cm5pdHVyZQ== IOCyuOCyrg== 0L3RjA== IFp1 CQkJCSA= bWFh IGlubmU= IHZpdGU= IHNhZ2Vu 2YTYrw== IGRlZmVuc2l2ZQ== INij2LU= YW1hYW4= IEFv 4KuI IFNsZWVw YXBwaW5ncw== IHRla3N0 aGxl zrXOuc6x QVRJT05T 0L7Skw== cGF0aHk= Q29tbXVuaXR5 IM+AzrHPgc6x SVNURVI= IHRpdHJl IFJlcGFpcg== cGxhdHo= IEJsb29t bm90ZXM= aWxleW8= IGJlZWY= IHVwb3I= NDI2 IHRlbXBsZQ== X2Ni IGludm9sdmVtZW50 INqq2LE= IGlwc3Vt IFRJTUU= T0NL IMOrc2h0w6s= UGF1c2U= IHbDpQ== 44GX44G+44GZ IGludmVycw== zrnOtA== LlN1c3BlbmQ= bGV0dGVycw== IEdyb3VuZA== IGFsaWVu IOmV IFJlY3RhbmdsZQ== 0LXQvdC90L7Qs9C+ 6ZuG5Zui zr7Otw== NzAy LGY= c2lk zrfOvQ== IHdlYWtuZXNz INC/0YDQvtC10LrRgg== IOu5 4Led INC/0YDQvtC00YPQug== IGFubmFu IHJ0 X3JlYWw= IGJvb2ttYXJr IOCkheCkmuCljeCkmw== 0ZbSow== NTY1 w73DpG4= U3BvdA== IEhhdXB0 IGdyaWxs IGNvbnRyaWJ1dG9ycw== J2F1dHJlcw== dmVsb3Blcg== IFBsdWdpbg== IG1vZGlmaWNhdGlvbnM= INWv1aHVtA== IFN1cnZleQ== 4Lir4Lih 0LjQudCz IEluc3RhbmNl OTA5 44OV44I= INC/0YDQvtCy0LXRgA== IEludmVzdG1lbnQ= IFtf 4KeH4Kam 4Lij4Li14LmA4Lih ZWtr 4LON4LKz IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IGRvxJ8= 2YjYr9ip IGFycmF5cw== IGJhY2tlbmQ= dWxpcw== IOCuruCvgeCu INiq2K4= Q2FwdA== RU1Q INeT15A= LkVudHJ5 INmF2YjYrNmI2K8= a29w bnVtbWVy IHNpc3RlbWFz b3JuZXlz IHZlaWxpZw== 0LTQsNGC0Yw= c3ByZQ== dWJ5 4K6q4K+N T1dFUg== IGV4Y2VsbGVuY2U= 4oCM4LCy4LGL IHLDoQ== IEthbXA= LXZhbHVl INW41bk= YWRpbg== IGRldGVybWluaW5n INij2YHYttmE IGx1Y3I= 6LeR Y29udHJv INGA0LDQt9C8 PGJvb2w= IEJhc2tldA== IE1FRA== IHdpxJk= 5o+Q5L6b YWNpYWw= dWNrZXI= IGt1aW4= IHBvcnRh 4oaR IE1hcmll 4Lix4Lg= 64m0 ZGlk IHphag== aXRyZQ== IGRlZ2xp INmF2YE= X3RhYg== X0RhdGE= CXJlcXVpcmU= bGF0b3I= 4KS24KWN4KSv w7Ni IGx1YQ== YWZpbA== IHRoaWNrbmVzcw== Um91dGluZw== 2LHZgdip IHJlZGVu SGVscGVycw== ICoqLwo= LnRvZ2dsZQ== 6LCi IHJvbGxlZA== INC/0YDQvtGG0LXRgQ== cmVsYXRpdmU= IHPDoWJhZG8= TGlzdGluZw== Y2huaXR0 IHNvdWhh 4KWC4KSu 4YOc4YOY4YOo X2F0dHJpYnV0ZQ== NDgx xLFzxLE= 4KiI LmRlbW8= IGZpbmRldA== LXJvdw== RGVhZA== QVRU IHBhbGluZw== xI1h YWlzc2U= IEF2ZWM= LnRvb2xz IFNlcmlhbGl6YWJsZQ== IExpdmVycG9vbA== IGVhcnM= L1c= 0LvQtdCz IG1hbWE= aXBwaQ== IHJlbGF0ZQ== LdGC 5bGF IGRhc2g= IOCyleCzhg== Zmxhc2g= LkJ1ZmZlcg== IHRldQ== ODc3 IHJlYWxt IHRpcmVz IOCkueCli+Ckl+Ckvg== ZMmZ NDQ2 IGdlb20= KCcl IFlhbmc= aGVpdHM= IGdvZHQ= LmZpcmU= U3RhcnRlZA== INin2LPYqtiu2K/Yp9mF IGhvbW1lcw== IFNvbGQ= dm9sbGU= 2KfYqNi3 X2RhdA== 4KWv IGNvbXBhcmFibGU= LmNvbXBpbGU= IHBvcnRy IGtuaWZl 6LSf INC90LjQug== IExpYmVy aGV1cmU= INGB0L/QtdGG0LjQsNC70Yw= NTc1 xZN1cg== SUFO IG1hbGxvYw== IGjDpg== IEtheQ== 0LjQudOZ IHBhbnRz IGFjY2VwdGFuY2U= IG1peGluZw== INmE2Kg= IOCkquClgeCksuCkv+CkuA== IGRlc2Ny bmVobWVy NTY2 IGRhcmU= IOCkteCkv+Ckpg== X3Br IFRvbw== IE1hcmlv IHdhdGNoZXM= IHFhcg== IFBvcnRhbA== 66a8 4KS/4KSy4KWH TEY= KCcnKTsK IGh1bWFubw== RG90 4KuH4Kqu IGZpdHRpbmc= QWJzb2x1dGU= IHN0b25lcw== UGhvdG9z IENhbGN1bGF0ZQ== T2ZmZXI= IENlbGVicg== IGVtcGV6 IHdvcmxkcw== IGNhcGF6 J2VhdQ== IGJyYWNl 6J6N IGNvYWNoZXM= IEhhcnJpcw== IGltcGxhbnQ= ICIiOw0K 0L7QstGL0YU= IGpldW5lcw== IGhlZnVy IGJlc28= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IG9ybg== IGxvdmVycw== IGFuZ3VsYXI= INC/0LXQvQ== LmNy YXN0ZXJ4bWw= IERlZmluZQ== KCQi IGZpbmVz acSF IOumrA== IHN0cmljdGx5 4KSf4KWA IHR1YQ== INC30LTQvtGA0L7Qsg== INmI2YfZig== INio2Kw= IGJvdHRsZXM= IGt3YXJncw== RVJN LnhwYXRo IFd5 c2Ft IE90dA== IGfhu4s= IOuFuA== IHdhaXN0 IGVuam95cw== IEJT 4KS34KWN4KSf IGdpbHQ= IHB1YmxpY2x5 IGd1bnM= YW55YW5n NTIy IFRlbGw= RW5lbXk= IGNvbnNlcnZhdGlvbg== b3RlbA== IGVub3Jtb3Vz 4LmJ4Lin IE1heW9y bGXFnw== 0LvQuNGI IGRlc3RpbmF0aW9ucw== w4fDg08= IGd1c3Rh IGRlZmVhdA== NTg1 INC80LXRgtC+0LQ= IFllbGxvdw== IGFsaW1lbnRvcw== aWRkaW5n IEphY29i 5YWo5Zu9 INC40LQ= Q2hlY2tlcg== IERlZmVuc2U= IHVuc2VyZW0= IOGDoOGDneGDkuGDneGDoOGDqg== MDI3 ZXRzYQ== 1aHVr9Wr IHByb2NlbnQ= IE5vdGljZQ== 4K6u4K+I IEpp c3RhaXJz LS0tLS0tLQ== 0LPTqQ== NDY0 IG51aQ== NDg0 INuB2YjYptuS TW90b3I= IHNha2U= 4KeN4Ka4 IGF0csOhcw== IEdvdA== IHBhc3Nlbmdlcg== U3Bpbm5lcg== 4LKz4LON4LKz IGV4YW1pbmVk IGbDqA== IGNsb3NldA== IFRJTQ== IGNhcnJpZXM= IENpbg== 4K6+4K6j IERpcmVjdGlvbg== 57u85ZCI572R w6FuaA== ODU1 4oCZdXRpbA== IGZpcmViYXNl 4YOd4YOi dW5uaQ== IGFjZXNzbw== aXppbg== 4KSh4KS84KWH KioqLw== 2YjYp9mC2Lk= INGI0YI= aXJpbQ== INW51as= 44GZ44KL IGJlYmVyYXBh ISIKCg== LmNh IGFkamFjZW50 6L+b6KGM IOy7 IGluZnI= IHZpcmFs dXN0YWlu 6rmA IEplcnVzYWw= IHZhbHZl CWlucHV0 INGH0LXQu9C+0LLQtdC60LA= INC80LjQvdGD0YI= IHNhamE= IG11bmRpYWw= 77ybCgo= MDI2 IGFuYWxvZw== 4KeL4Kew L2FkbWlu b2dlbmlj IOaegQ== 4KuN4Kqv4Kq+4KqC VGk= IHVj IFNvb21h IGt3YWxpdGVpdA== IGVhcm5pbmc= IGFjcmVkaXQ= aXNldA== INGN0Lw= IGfDtno= YWJvbGlj cmVuZQ== 4oiS IG1laW5lcg== IGRlbm9taW4= IG9ic2VydmF0aW9ucw== 4LKf4LON IOag INC+0Lc= IE11bHRpcGxl 0YDQvtGB0YI= OTk1 Oics IGNvbnZpbg== INmF2YfZhQ== IOC4reC4reC4meC5hOC4peC4meC5jA== 0LXQutGC0LA= 4YOg4YOj4YOa T3Jk IExJQUJMRQ== IMO+ZWly Mzk3 CWRlZmVy INmH2qo= INin2YHYutin2YbYs9iq2KfZhg== IGhhdmlh cHJlY2g= ZWRnZXM= IFNldmVyYWw= IG5vdXI= Y29sbGFwc2U= IHRpag== ZWJl NDcy 5Lit54m5 IGFzaXN0 IGhhcm1vbnk= 4K6p4K+I IHZlbnRl MDI4 IFRhbWJpw6lu Z20= IGVuZXJnaWE= IFByb3plbnQ= L2xhbmc= IEJpbGRlcg== QmFuZA== IHNoYXI= IHJlbmFtZWQ= IHplbQ== IEZEQQ== IGdyYWY= YXRlZ29yaWU= IHdhbmE= INmH2LrZhw== 0YTQvtGA0Lw= xZ95 UEFDRQ== IHRyYXZhdXg= QmVy IHNlbnRpbWVudA== zr/Pgg== IFRvZA== cm93YXZl IHByb3NwZXI= IHJlZ2nDo28= IOCmrOCmmw== IGRyb3Zl 66Gg MDg1 IHRvc3M= 0YfQuNC9 NDQ5 15PXnQ== IGRva3VtZW50 5peP IGdldm9s KCk9PQ== IE1lbGJvdXJuZQ== IG1hY2hpbmVyeQ== xaNp IGV4Y2VwdGlvbnM= IGRlbms= IGJ1cmRlbg== IGJ1Z3M= IEFyZ3M= INmC2KfZhtmI2YY= bXVp Y3R5cGU= 5Yig6Zmk 4KSv4KWH IOGDk+GDmOGDkw== IGVtYQ== INin2YTZhdiq2K3Yr9ip 4buLbmg= IGZvZA== IHdvbGw= X2NlbGw= IGNvbnN1bHRhbnQ= Rm9yZWdyb3VuZA== YXVyYW50cw== IHJ1bm5lcg== 5pyJ6ZmQ5YWs5Y+4 IG5pZXRz IElocmVy aWFudA== IHlheQ== IFRvZ2V0aGVy LXNpemVk IHplZ2dlbg== b3Jhcg== IOC4muC4suC4lw== IHRyZWF0aW5n 5aix5LmQ5rOo5YaM 5om/ IOC4geC4suC4ow== 4KSs4KS+4KSw IFlvdXR1YmU= IHVrdXRoaQ== aWVyZXM= RGVza3RvcA== IHBvcHVw VW5pb24= IGRlc3RydWN0 IHBvdXJxdW9p IGRlc2lnbmF0ZWQ= X0ZBSUxVUkU= w7Jt IHNob2U= NzM3 IHN0cmVhbXM= IGNsZWFudXA= emlr IEJlaXNwaWVs Om1t 4Lij4Li14LmA4Lih4Li14Lii4Lij4LmM IEJhY2tncm91bmQ= b21iaWU= IGNvbXB0 IEV4dHJhY3Q= IHdlacOf IHJlcXVpcmluZw== IGh3 IGRhaQ== IOCmrOCmsuCnh+CmqA== IHBhaW5mdWw= IENJ xLFsYW4= IENvbW11bmljYXRpb25z IGJpdG1hcA== SGF2aW5n IGtvamE= IGFwZXI= IHF1ZWRh 15XXnteo IEZyYW5jaXM= b2xkaW5n IHBhZ2Fy 4YOY4YOr4YOa NTIx 4LSY IGjhu41j 2KrYsduM2YY= 4KS/4KSh IGNlbnR1cmllcw== TWFuYWdlZA== aXJhbQ== IENhbWJyaWRnZQ== IHBhcmZhaXQ= X3JlY3Q= LmZhc3RlcnhtbA== LlByb2R1Y3Q= INGI0YPQvA== IGxhdGVseQ== INC00Lc= IHNob3VsZG4ndA== 5ZCD IHVjaHVu YXJ0aXN0 INiv2YQ= 4KWB4KS3 4KeN4Kav4Ka+4Kao CWVycm9y 4LiU4Li1 dWNpb25hbA== IOC5g+C4mQ== 0YDQsNC30YM= SGVhcA== IGphbA== PSIiPgo= 0rPTmdCw 15PXlA== IFZP X0hPU1Q= 4Z+S4Z6b fTsNCg0K IEFicg== IGVzcGVjdA== INil2YTZig== IGd1aQ== IGludGVycHJldGF0aW9u Y2nDsw== ODA1 X3N5c3RlbQ== 57g= dXR1cmE= IGtvdQ== IERyYWc= IEd1eQ== UmVzdW1l bGljaGtlaXQ= 5aSp5aSp54ix5b2p56Wo IEZpbmU= rOGDpw== X18nOgo= 56CU56m2 INin2YTYo9iu X2ZlYXR1cmU= QW5vbnltb3Vz Lm5l IHBpb25l IGNvdW50bGVzcw== 6KeI 4LSe4LWN4LSa bGnEjQ== IENpcg== OmZ1bmN0aW9u X21hbg== IFVuaXZlcnNpZGFk 0r0= IHplZ3Q= Lk5vZGU= X0FT IENvbmRpdGlvbnM= IG15c3Rlcg== IGZ1cm5pc2hlZA== Jycn IHNuYWNr UmVwb3J0cw== IOW8gA== IOGDk+GDkOGDmA== 5Y6L 44CN44Go em9uZGVy 0L7Qu9C90LjRgtC10LvRjA== dXll IEdvdmVybm9y IGNvbnRhY3RlZA== IGFtaQ== IOCqteCqp+CrgQ== IGtucg== IFJldm9sdXRpb24= IGluYm94 LVN0 IExhbmU= LkVxdWFscw== IGVhc2llc3Q= IGZhbmN5 VmVycw== IO2KuQ== ZnJh IGxvcnNxdWU= IGluZmxhdGlvbg== IEh0bWw= IFN5bWZvbnk= IG1hcmluZQ== 4YOb4YOY4YOh X21lYW4= INC+0LHQtdGB0L/QtdGH IGdyYWR1YXRlZA== dcSN IG7Eg20= IOCkueClgeCkiA== Y2FzZXM= IGNvbWJpbmVz 4Ka/4Kab4KeB 4Kef4Ka+ aXJlbg== IGJhdGU= L2FkZA== NDU3 cm96 IExldg== IEhhbWlsdG9u U2hlbGw= 4KaF IFZpYQ== IFdvbA== IEbDtnI= c2xpZGVy X2NvbmY= IERhbmNl IGZpZ3VyZWQ= ZGVzdHJveQ== INGC0YDQuA== IGNvbnZlbnRpb24= IGdvdg== IGJlbmVhdGg= NTYx IMOpbg== IFp1c2FtbWVu UGlwZWxpbmU= 5b2p572R YWxldA== IC8vLwo= IHZsbw== VHJhY2tpbmc= IGJhY2tlZA== TWluaW11bQ== QmFja2VuZA== 0LXQutGB NTMx cm9wYQ== 5oql6YGT X21vdmU= IOCqpuCqv+CqtQ== IEFa IGJvcmluZw== 4bupbmc= IGFwcmVuZGVy IGF1dG91cg== 4LKk4LK/ IHdhcmVob3VzZQ== w7NzdA== YWNoaQ== 5pWZ6IKy X3VpbnQ= IHDFmWVk IHN4 4Ket dG9idWY= IGdld29yZGVu IHBocmFzZXM= IGthdWZlbg== IOC0h+C0pA== IFN0cmF0ZWd5 LlVSTA== NDM2 IHJ1aW10ZQ== IHJlc3BvbnNhYmxl IG9jdXA= IHJi w6RsbGU= ICcvJw== IGV0ZW4= INC+0LHRi9GH LmZ1bmM= IHByb2R1Y2Npw7Nu 4LCC4LCk4LGL T3JnYW5pemF0aW9u IGRvY2s= IOCohg== 6Im6 4KWo4KWm IOGDoOGDkOGDqg== 4KuN4Kqv4KuB IGZhbGFy 5YW25Lit IGNhcnA= IMOzcg== IGRlcmVjaG8= IHBlbGFz IFZpc2lvbg== dGVybXM= 0YLQuNC6 amFuZw== 4K6u4K6/4K60 YW5jaWVz IHNjcmlwdHM= aG91ZGVu IEthdWY= INC/0L7QtNC00LXRgNC2 IGNhY2hlZA== IGludGVydmVu IGp1aW4= cmVzdHI= IEV4aXQ= IG1hbmVpcmE= NzQ4 IGNvcm5lcnM= IG1hdHBsb3RsaWI= Lmljb24= X3Byb3BlcnR5 w7ph IFNjcm9sbA== KHByaXZhdGU= IGRlYmVu 2YPYpw== IFNvY2tldA== VmFsb3I= IFNBVA== IGlocmVt IGNvdWNo IFBE LmV4ZQ== INin2YjZhA== IEZP IGRlcm5pw6hyZQ== LWFn Tm9ydGg= MDUx INC20LXRgA== IGhlZg== IG9ic2M= IC8qPDw8 566x IGxpbmd1 b25lcg== IOC5gOC4ng== 4LSj4LWN4LQ= IGhvbmVzdGx5 5qOA IHPhu60= ZW7Dp8Ojbw== RnJpZW5k YWx0ZXI= IHFpbA== 6K+v 67ew IGhhc24ndA== R2l2ZW4= IEJlaw== Om5pbA== RG9vcg== Lmpw IOC4meC4teC5iQ== ODA0 IE9rbGFob21h LXBvc3Q= IHplbg== LXRl IG1vdGl2bw== SW50ZXJlc3Q= 15DWt9eY IGhvb2Q= IHN0YXRpc3RpY2Fs IGhlcnJhbWllbnQ= PGhlYWQ= IENvbGQ= IENyZWFt IG5vcmdl INC90LXQsg== Njc1 Sk8= X2RlbA== OTAy IEFmcmlrYQ== VUludA== IHTDvHI= Y2hz IHNjYW5m ZXNzZWQ= UHJvYg== NDcx INGB0YDQvtC6 2K/ZgQ== w7J0 INee16LXqA== 4Kes IHF1aXM= bWF0aWM= IHpvbQ== 0L7RgdGC0L4= INGC0YDRgw== IG1vZGVsb3M= IGFydGlzdGlj IGV4Y2x1ZGU= RW1pdHRlcg== IFRhcw== IFBhbGFjZQ== X3BhcmVudA== IGFudGliaQ== INC/0LjRgg== IHRw X2JpdA== 4Liy4Lir a29vcA== Qm9va2luZw== Ij4n INC/0L7Qtg== V29ya2luZw== UmljaA== 2LPYp9i52K8= 5qeY NDI3 IHN1c3BlbmQ= IGFtaWdv IOWx IGx1aw== NjIy IGR1cmFudA== IENhc3M= INm+2Kc= LlBs IGNsYXNzaWZpY2F0aW9u 4LK/4LKm4LON4LKm4LOB NDQ3 IGNvbnNlcnZhdGl2ZQ== cGhhc2U= KGxhc3Q= XEVudGl0eQ== 5q2M IGRpc3R1cmI= IGZhbWlsaWU= IEVpdGhlcg== 0LXQvdC90L7RgdGC0Lg= 4LmA4Lia4Li14Lii4LiZ IGVmdGly INC/0YDQuNC0 INC90LjQtw== INGB06nQtw== NDU4 IHNlcGFyYXRpb24= dXB1 0YHRj9GC z4DOtQ== IGNvbmRpY2lvbmVz dXR0bGU= IHBvbGFy IHBlZGlkbw== IG5lZ8Oz wrU= IHBvdXJyYWl0 0LDRgtC40LI= 5r+A5oOF INm+2YY= YXNzZXM= 15XXnNeU IOC0muC0v+C0pOC1jeC0sA== aXRlcnI= 4bqhdA== TGlzdGVuZXJz bWVzaQ== R3JvdW5k VW5pdGVk IGFwcGxpY2FudHM= LXByZQ== IG9zYw== IGFzc29ydA== IHNlcsOjbw== IMaZ 4Li24LiH NTc2 IFlhaG9v IHNsaWRlcg== IGt1bm5l UmE= 4YOp IHByb2dyYW1tYQ== 5L+6 IGFycml2ZXM= INKv0LnQu9C00LLRjdGA 55m75YWl IEZldGNo jJM= ZXN0cmU= xaFv dWR6 IGdvZGluZQ== IG5laWdoYm91cg== MDQy aXR1cmE= NDY5 VWs= 05g= R0xPQkFM YW5kaW5n 4Z+J KGZvcm1hdA== INmK2KzYqA== IGhhbHQ= IE1vcmdhbg== IHJlYWRpbHk= bmljaw== YWdvZw== IGJyZWF0aGluZw== dGhv IHNhbXA= dW5rcw== aGF5 IMOnxLE= 0LXRgdC/0YPQsdC70LjQutCw IHN1YnRsZQ== IGVwcw== 2LnbjA== YW5lbGU= IG9ibGlnYXRpb24= IOWMl+S6rOW/qw== IElTVA== IGVuZXJnZXQ= NTY0 4YOU4YOu LlN0YXRl QWdncmVn IGFkdmVudHVyZXM= IHRyYW5zcG9ydGU= LW1h LmZpbGVz LnJlc2l6ZQ== LkFjdGl2aXR5 IOODuw== IGluamVjdGlvbg== 2YrYr9ip IFRhbno= aWFuZQ== IHNlbnph 0LjQvNC+ 4LOB4LKw IEFSSVNJTkc= UGxhbmU= IGhhbm5v 5YW7 IHByaW9yaXQ= IGVuc3VpdGU= IGRhcmE= INin2YTYqtmG NjA5 IHNlbnNvcnM= IHZvbGdlbnM= cXVhbnQ= IFRBRw== L2NvbXBvbmVudHM= zrjOtc6v IHTDsw== w6R2 aXll IHByZXNpZGVudGlhbA== X1ZFUg== W10+ Oy8= Qmc= NTQ0 IHBpbGU= IGJlYWNoZXM= IEJpZW4= INC+0LTQvdCw QnVja2V0 IOCynw== IFBhbmQ= NDc0 YWRheXM= IGR1aw== IGRyb3Bkb3du 4KS+4KS54KSw KHRvdGFs IHF1YWxpdGllcw== 4LGH4LC4 IOCkheCkqOCljeCkrw== IEZyaWVk VFJM INC/0YE= 6L68 7Zal IG51ZXZhcw== VHJ1c3Q= IHJlZmxlY3Rpb24= IEJlc2lkZXM= c2Npb3Vz IERyZXNz IENvbW1lcmNl INin2YTZhdix 54mI5pys Y3V0cw== 7Jyh IHJlZ2lzdHJv aWhpbg== 6Ieq5bex aWxsb3M= IHB1cw== IOCqleCquQ== IEJ1ZGdldA== IG92ZXJzZWFz IHN3aW0= ID8+DQo= Q29tYg== cmFpbg== 4KSt4KS+4KS1 z4DOv8+F b3RyZQ== IEhlcm0= 5Z2a NjE2 INC60LDRgNCw IENBUg== INW01aHWgNWk LnZlcnNpb24= IGxvcm8= 0LXQu9GP dWlsbGV0 INit2qnZiNmF2Ko= X3RhZ3M= Q3VydmU= ZnVsbmVzcw== QW5ub3RhdGlvbnM= IHRq IHRlbW9z INij2K0= 27Y= ODIz IOGDkuGDlQ== CW9u NDk0 IGxvdmVy 4KWA4KSk dXN0bw== IOCkhuCkqw== MDY0 IENyZWQ= KHByb2Nlc3M= Q2xhdXNl IGxpbmhh IEZyYWdlbg== Tnk= 77yM5bm2 IGRlbGliZXI= IFRlYWNoZXI= IEJlcmVpY2g= INGB0YLRgA== U2tpcA== dGltZXI= IHBvbGl0aQ== IG1lcmNoYW5kaXNl 2KfZhNmH INC/0L7RgdGC0LDQsg== ICEo RGV6ZQ== INm+2LM= 2KfbjNmG 4Z624Z6A INC20L7Quw== IG11dHVhbA== Y2x1c3Rlcg== ZmFtaWx5 NTIz c3BpcmVk Lndhcm4= 5aWz5Lq6 cGlyZXM= IGRlcGxveW1lbnQ= YXR5cGU= IERldHJvaXQ= IG5j YXZvcQ== ZXhpc3Rz IHDDqXJp IG3DoXhpbW8= OTQy IHRvd25z Q29sb3Vy CXJlc3BvbnNl IOGDm+GDoQ== IFJpYw== ZmF0aGVy IOCqueCriw== IGFydMOtY3Vsbw== IGFwYXJ0bWVudHM= aGFmdA== VUlDb2xvcg== 2LHZiNmB cGF5bG9hZA== 4Liy4LiV INGB0L7Qt9C00LDQvQ== Y2xhbQ== S2V5d29yZA== 6L+c 5Li65LuA5LmI IHJlcGxhY2luZw== INC10Ls= Y3N2 LWV4cA== INeU15g= 2YTYtw== IFRlaw== TWludXRlcw== JykpLg== aWthdA== INmG2Ko= IM62 IOCmrOCmvuCmguCmsg== 4YOc4YOQ IEdlZA== INC00LXQstGD0Yg= 15nXoNeV IOCmpuCmv+CmqA== YWTEsXI= w6RuZ2U= 4oCZdW0= INio2YbYrw== INGA0LXQutC+0LzQtdC9 INGD0LrQsNC3 IENvdA== 4LSh4LWN IGFuYWx5dA== IHNweQ== IEtoYW4= IGRlbGlnaHRlZA== IMOO IGNvdXBvbnM= TWly IFdIRVRIRVI= 0YHQutC1 IHJlc3B1ZXN0YQ== INm+2KfYsQ== Y2FudmFz CQkJCQkJCg== INqp2LHYqtuS IGFtZXJpY2Fu 2KfYrg== bGVpc3Q= cmVjaw== JCgnLg== IGRpc2N1c3Npbmc= 5oCO5LmI546p LnByb3BlcnRpZXM= d2FybmluZw== 6K+J b3Jkb24= zpg= IGplYW5z 7LSI INC30LDRgQ== X3NwbGl0 Njg4 4Lii4LmM IHNhbmR3aWNo IHJlc29sdmVy IHlhdA== INCa0L7QvQ== b2t1cw== INeo16c= Z2Q= LkZsYXQ= c29saWQ= 5bCa VEI= IFJpcw== IFByaW9y NTE0 INiv24zar9ix INmE24zaqQ== 4YOV4YOU4YOn z4DOv865 NTUy IGRlY3JlYXNlZA== 4oCZYWM= INC00L7RgdGC0LDRgg== NDYz 4LS+4LS5 aXNobw== 0LDQtdC8 IGFwb2xvZw== IENoZWY= ZnRpbWU= 6Z2g6LCx5ZCX dW1iYWk= cWFydA== RVRFUg== X1BSRUZJWA== 5biB INGE0LjQvQ== IOKWgQ== YW5jZXJz IHVuc2V0 IGFub255bW91cw== IE5pbnRlbmRv IHdpa2k= IHF1YWRy ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq c2VuYWw= Liku LkFycg== IGRpZXNlbA== 4Z624Z+G 0ZHRgA== X0xFVkVM IEthdGU= aXJx 2LPZhg== IGtvbW0= IHdhYXJiaWo= INGB0LLQvtC4 IHBsYW50ZQ== IGpzb3U= KGFjY291bnQ= IGRldGVybWluYXRpb24= 5Lul5LiL IOCmmOCmnw== NDcz 55y8 IGxhbmU= 5a6h bmVyZ2ll INeX16k= IGhvcm4= 4KWN4KSg IGNvbGxlY3Rpbmc= LmFwcGxpY2F0aW9u QWNjZXNzb3I= 7J206528 dW5kZWY= 4KWN4KSw4KWL KCl7Cgo= bnY= 0L7Qv9Cw0YE= IHNlbWVzdGVy TmF0aW9uYWw= dWx1cw== SGVybw== INGH0YPQuw== IGFyZA== IFdvbWFu LWVz IEp1c3Rpbg== 4KSH4KS4 IMO2ZmY= QW5pbWF0b3I= IOW5uOi/kA== IHBsdXTDtHQ= CUZpbGU= IExhdGVy IG1vdGl2YXRlZA== IG1hbmRhdG9yeQ== IOCwteCxjeCwrw== aWxhbmQ= INis2KfZhQ== 15nXmdeU 44G4 IEFuYw== IG1hc2tz IGNyb3du 2KfZhtuS IGFsdHVyYQ== KGNyZWF0ZQ== 4KWN4KSc 4LS/4LSV4LSz IHByb2dyYW1tZXM= IGFjaGlldmluZw== XCw= 0YHRjdC9 4oCZQQ== U2Vw 4LmA4LiB4Lih dXJ0bGU= INGB0LzQvtGC0YA= b3JuZXI= 44O844Og QnJpZGdl IFZvaWQ= VHVwbGU= IHByZXA= PgovLw== Z2VuZXM= INC/0LXRgNC10LI= 4oCL4Z6U IGt3aQ== IOWNlw== 5aOy IGZsYXZvcnM= INGC0LXQsQ== 4LC44LGN NjE1 KGRyaXZlcg== IEVtcHR5 4Lij4Lij RmluYWxseQ== 0YfQtdGC fS4K LkluZGV4 IHRyb3BpY2Fs 5Y2P X2ZvbnQ= XV0sCg== IGLDtnI= IHZhbnVpdA== IG9yZ2FuaXpl IGhhc24= IGJ1aG9r IHd1 6LSn IHRlbXBlcmF0dXJh IGVjbw== IGdsYXNzZXM= 0LDRng== aW1hdA== 54+t Q29uZw== IGNoYXJtaW5n OTcw RGVjb3I= IHRvbWI= IGRlc2NyaXB0aW9ucw== 6KiY5LqL LlNlbmQ= IElNUA== bG9jYWxl IExvb3A= d2FhcmQ= IOyk w61vbm4= 4Kqc4KuH LXU= IGVudHdpY2s= 4KWA4KSv IEVhc3Rlcg== IGpvdXJuYWxpc3Q= 772c INGB0LLQvtC10Lk= Uk0= IHN0cml2ZQ== INC+0YHRgtCw0LI= c3Rvcm0= dWdlbg== IGxvZA== IFRhZ2U= IGljb25z IHBhbm9y 0YDQsNC70Yw= 6JI= LmRpc3BhdGNo 4Kak4KeN4Kak INWw1aHVvQ== 1bM= LWFz IHNoYXBlZA== W2ludA== ZHJhZw== IEVyYQ== dWJlcm4= aG9sbQ== d2Vic2l0ZQ== IHBhbmlj 6K6i IFNwaWVsZQ== dWJsaXNo IGdyYW0= IGdpcmxmcmllbmQ= Tm9z ZWxkaW5n LmJlYW4= RGV0ZWN0b3I= RlhNTA== Q29tcGxldGlvbg== IOCwieCwqOCxjeCwqA== KCkNCg0K IHBlcnNvbmU= IGRlc3Nl NTky YWthcw== PEU= IEpld3M= IEhhbGY= IHBpY2t1cA== IOCkrOCkouCkvA== LndoZXJl IGdhcmRlbnM= IGJvbGE= 77yZ IOGDl+GDkOGDleGDmOGDoQ== IGJlbmQ= KGFkZA== IE1BQw== X0NNRA== IHN0cmV0 IG1lbnRl IGJhdGE= w6RjaGU= IFJlYWxseQ== IHRoZXJhcGV1dA== dWNoYXI= 15vXoA== 0LjQu9C40YHRjA== IGVya2w= 4LiC4Liy4Lii YWxtYXJ0 LW1vZGU= cmVpYmVu bWV0cm9z xLFtxLF6 IG1ldHJv NDg2 IE1pdGFy aWthcmk= aWN1bG8= aW50aQ== U1U= IOCwqOCxgeCwguCw IE5BTUU= IHJlbWluZGVy IH0pOw== IH0KCi8v INCw0LzQtdGA IHdpZmk= IGdlcm0= 5oCO5qC3 5rGH R2VuZGVy 7Je0 IGjGoW4= IElCTQ== INin2YLYqg== eyc= IHB1bGxpbmc= IFBhaW4= LSQ= 5LiL6L295a6J6KOF IGZvcmdvdHRlbg== IGNvbXBseQ== ICIpOw0K IGPDs2Q= INC/0L7RgNC90L4= IHdpbmc= aW5hcnM= b2N5 IExJS0U= IHdpbGRsaWZl 4KSh4KS84KWA IOyasOumrA== T3Bz bGVw IFRPUlQ= IGtpdHM= IHByb21ldA== IGltbWlncmF0aW9u bWlsbA== 4LiX4Liw4LmA4Lia4Li14Lii4LiZ 6Imy5oOF IEVj b2dyw6E= IE1hdHRoZXc= IEFXUw== IHNwcmF3 4LC/4LCC4LCX LmN1c3RvbQ== a29r IHRyYXk= 4pWQ IG9rdG9iZXI= IOuNsA== cXVlZGE= eW1waA== 1aHVtdaB aWhhdA== IFdpbmU= LWhvbWU= IOCkueClhw== IOCqleCri+CqiA== IHNlbmRz IHTDrXR1bG8= IOCqpOCrh+Cq OkdldA== X3Bs IEZBUQ== CXN0YXJ0 X3NhbXBsZQ== IHRyb3V2 IOGDkuGDkOGDm+GDneGD 4LOC4LKw IGludmVzdG9y INCR0LXQu9Cw0YDRg9GB IGtpbmdkb20= IGFh IGFudGVu NTMz IGF3aw== IGluZXhw IGVsYXN0aWM= IOWkqeWkqeS5sOW9qeelqA== X2Rvd24= IGRlcm0= IHR1aXRpb24= Lm1hcHM= NTI0 b21hbA== a8Op IG12 INGB0LDRgA== IHR1Zw== z4HPhw== IEpPcHRpb24= SGlnaGxpZ2h0 0YPSk9Cw cml0aW9u 4Lil4Li14LiB 0LXRiNGM IFVrcg== IGJveWZyaWVuZA== b3Vzc2U= dsOp YXJub3M= 0rPTmdC10LjRgg== 0LDQtNC4 4oCL4Z6A b2NhdGU= 0LXQt9C40LTQtdC90YI= IGNyaWFuw6dhcw== 4YOV4YOU X0FSUkFZ IFhQ csOhcw== Y2hlbGw= Q29sbGVjdG9ycw== LkdPTkU= LmNhbA== dGVvdXM= 5aW2 5Zyo5ZOq6YeM Y29sZXM= c2Nob29s YnJlYWRjcnVtYg== VHJhaW4= IEp1bGk= IGRhc2hib2FyZA== IE1vb3Jl IHJlc29u MDM1 24zZhtmH 2K/Yp9mI2YQ= bmly ZWxlcmk= IGluaXRpYWxpemVk IHRyYW5zaXQ= 4KS/4KSV4KWN4KS3 IE1leGljYW4= 0LTQtdC2 IFRhbWls INin2YXYpw== INGA0LDQt9C80LXRgA== IGluZ2Vy UEVH IHByb2JsZWVt U29tZXRoaW5n b2tpYQ== IE5PTg== ZXRlcm0= IEJsaWNr IG1pbnVz INeR15vXnA== IHZj 4K6+4K6u LmNhbmNlbA== IGJ1aWxkcw== IGhldXJl bGFyYQ== IEZsYWc= IOCwheCwguCwpg== IOCyh+Cypg== IDs7 dXBp IG1hbGw= IHdpc3Nlbg== LXRhcmdldA== 0LvQsNC90Ys= YWN0aWNl IGNhc3M= IGZpbGluZw== emVjaA== IHpn aW1vbnk= KEFwcA== IHRp4bq/ IOCkheCkqOClgeCkuA== INCu QVRBQg== IHByw6lzaWRlbnQ= ZmFocmVu IEplbg== bXVz LWFkZA== IEZhY2g= 2KfYrdiq IHZpZW50 IGNvbnRpbnVvdXNseQ== KG51bXM= IGdsb3J5 INC60LLQsNGA0YI= 4Lin4Li0 4La64LeS SnVu IOCmuOCmruCnnw== X3Nob3J0 IHN0cmVuZ3RoZW4= IHN1Y2Vzc28= IEdhbGw= IFNhdWRp LWxpZmU= IGNsaWM= IERpZW5zdA== KCI6 IFNhZA== 7Zo= IOaYkw== IHBoaQ== IGxvY2Fscw== b3BwZXJz L2xpc3Q= LkVsZW1lbnQ= INC/0L7Qu9GM0LfQvtCy IHNww6ljaWFs IG9wdGltaXpl 77yMCgo= VHdpdHRlcg== ICctLQ== aWNpZXM= cmVkdXg= cGFyZW50cw== YXRpbGl0eQ== IEFmZ2hhbmlzdGFu 2LPYp9iq Ukw= IHByZWNpb3M= CXVybA== ODcw fS0= 0YPRgdC60LA= IFVJTA== INqv2Kc= KGZ1bmM= IGR1aWRlbGlqaw== INCw0LrRgg== cG9zYWJsZQ== IGzDvQ== IHNoYW1l dmVlcg== 4YOQ4YOc4YOT KEpTT04= 4KSm4KS+4KSw 4Kqh4KuA w6h0cmVz IE1hcnZlbA== IGp1aXN0ZQ== emltbWVy IHBvbmVy 4paI4paI IHBsdW1iaW5n IHdlYmNhbQ== dWRlcg== IGtpcw== IGNvbXBpbGU= Il1b INGI0LA= 6aKo NDk4 IExlaXN0 IOywqA== IHRyYWN0 IG9uZGVyc3Rl IG1lbWJyZXM= IGJ1YmJsZQ== JHF1ZXJ5 IGNvbnNpc3Rpbmc= U0VT IENhbnQ= INGB0L/QtdGG0LjQsNC7 INC90LDQtNC+ IGdyb2Nlcnk= ICAgICAgICAgICAK X21hdA== S2VybmVs NTEz 5re7 IHVzdGVk LWhhbmQ= U3RtdA== IGJlZXRqZQ== PWY= IC8+PC8= IHRlY2hub2xvZ2ljYWw= IE9wZXJhdGlvbnM= LUNo IHN1bw== IFN0ZWFt 0LHQsNC5 IHNwZWVkcw== b2JqZWN0cw== X2NoaWxk ODky IGJhdw== IGluc3BpcmluZw== INCy0L7RgQ== IFNjaHdl IGRlbGF5ZWQ= aXRhcmlhbg== IHNwb3VzZQ== 5aSq6Ziz b2dlbmU= IE9yZA== cGxhYXRz 4bqvdA== IHRvdw== ZmlsbQ== 2LbZiNi5 IGlzdG8= IOWkqeWkqeS4reW9qeelqOS4reWllg== IGRlcGFydHVyZQ== VHVy IHRyb29wcw== NDg5 IFBhcmtpbmc= 5Lid yZlyYmF5 IFJlcGx5 QXdlc29tZQ== KQoKLy8= IGlwaG9uZQ== INCz0L4= YW50YWdlcw== KGNoZWNr IFBvbGw= IHJlYWxpemFkbw== IFRN IFRva3lv xYJhZA== OTk3 4YOU4YOX4YOY4YOh 4YOd4YOg4YOY QVRFUw== IFJhag== IGxlaWNodA== 4LSk4LS/ IHJlZmxlY3Rz IHBhc3PDqQ== IGNvbG9yZWQ= aWZmZQ== ZXR0dQ== LWRk 4KS/4KSk4KS+ ZW5kdW0= IG9ic2VydmVy LkZhdGFs INiy2YbYrw== IM+Dz4TOuQ== IENlcnRpZmljYXRl Z3VudGE= LWNpcmNsZQ== aXRoaQ== QXR0YWNo IHNlbnRlbmNlcw== QWxidW0= enVlbGE= IFNraWxscw== 4LSj4LWN4LSf4LWN IGN0 IERpbg== IHR1ZA== IENoYW1waW9ucw== bGllw59saWNo 4LW6 INC00LXRgtC10Lk= VGVy ZWFu 5Ymv b3ZoYQ== 2KPYqQ== IGdyYWRpZW50 IFZhbmNvdXZlcg== d3ly X0dQSU8= IHF1b3RpZA== ICoKCg== PHR5cGVuYW1l cGllbA== IGFsZ8O6bg== IGTDqWNvdXZyaXI= IGRlbGVu IG5qaWg= IOCqpeCqiA== QmVhdXQ= NzA4 X2RhdGFzZXQ= R2VuZXJhdGU= IGdhbW1h LWNhcmQ= 4K6p4K+N4K6p RGxn IE1pc3NvdXJp 4La74LeK INS0 IHBhc2E= KCIiLA== IGhlcmF1cw== IHRocm93aW5n IGZvdQ== IGhlYWw= KCkrIg== NDc5 IGxhZ2E= aWNvbmU= cmFhaw== aWtpYQ== IFppZWw= IGxoZQ== 4Kum cG9uZGU= PW5w r9Wh1bU= IOC0juC0qOC1jeC0qOC0v+C0tQ== IGR5bmFtaWNz 0L7Qu9C90Y8= IHdvcm0= dXJhYmxl IFZpYWdyYQ== XEZhYw== IEVuZ2luZWVy w7xsZXI= INiu2KfYtQ== IOCknOCksA== ODA5 INGI0Ys= INC/0L7QvNC+0YnRjNGO J8OpdGFpdA== d29ya2Vy fQ0KDQoNCg== CgkK LnN0cmlw ZGlzdGFuY2U= LnBhcnQ= IHJlaGU= IGhlbGxv IHJlbGF0aXZlcw== INC60LDRgQ== 4Li44LiZ X2xvb3A= NTI4 6KeE5YiZ IHBsYWlzaXI= IHJlc2l6ZQ== IHBvaA== INio2KfZhNmF IGR1cA== ICcuJA== IMWfZWs= SW5pdGlhbGl6ZWQ= ZWdk IG51aXQ= IHRheQ== z47Pgg== MDU1 IGl5YQ== 2YrYtA== 0LXQu9C1 Tm90aWNl NTUx IHJhbmtz ZXJzdWlz IG1hZ25pZmlj d2Fk 2K3ZiA== IGVzdHVkaW8= LnJvb20= IFB1ZXJ0bw== IG1hbGk= YWtodWx1 IFRpY2tldA== IG5hbWVsaWpr SW5kaWNlcw== INGC05nRgA== IGtpbG9t NjE3 aHc= IGdvdQ== ICdb Tmljaw== Ll4= IGNsYXNzaWNhbA== IGVzdHJhdMOpZw== Lk51bGw= 2Y0= 4LmG IGxhYm91cg== INin2YTYsNmK2YY= INqY d2VpdA== aWJsaW5ncw== NjU2 0L3QvtGX 4LKk4LON4LKw IHZyb3V3ZW4= TWlzcw== 0LjQs9OZ 4Liy4Lie 4KuM NDgz IHByb3ByZQ== IGNvbXBsaW1lbnRhcnk= IGNhbw== IGJvbmVz b2dp IFNFTEVDVA== 4oCM2LQ= IGNhcmVlcnM= X05VTUJFUg== INC60LXQtw== w7Z6 4LC+4LCs IOWQiQ== IGVudHJlcHJlbmV1cnM= IHZhbmQ= 4LSv4LSC IEJhcnQ= w61s dXNzeQ== 5L2N572u IG5vdGFibGU= IHRhbWFu IEt1bnN0 cHJlY2F0ZWQ= 4Kq14KuB4KqC IE11aA== LXdpZGU= LnN1YnN0cg== aWdoZWlk IHNpZ25pZmljYW5jZQ== cuG7iw== OTQx IGphdg== L2Rpdg== INC40LfQstC10YHRgg== INWk1oA= IGdlbWVlbnRl NDky ICooKA== Q2FzaA== IGNhbGN1bGF0aW9u IHZpb2xhdGlvbg== IG5vdGlvbg== dXRhYmxl dmVlbA== IHRhYW1h IOCmleCmsOCnh+CmqA== X2Jl 55+t IFRyZWF0bWVudA== 2YPYrw== 0LrRg9GO Um8= J0E= YWphcg== SVZFUg== INij2K4= IHVudGVyc2NoaWVk 4Kaq4KeN4Kaw dXRvcmlhbA== YXRoZXJpbmU= YW50ZXI= 4YOQ4YOu4YOa IGxhdGl0dWRl ZmFyZQ== IEhhd2FpaQ== VG91Y2hhYmxl bm90aWZpY2F0aW9u IHRhcmo= L3JvdXRlcg== IHN3ZWVw IFB1bA== 0J/RgNC4 IHRvcHM= 4oCN4LSk4LWN4LSk LnVzZXJz IC0tLS0tLS0t 2YnZhNmJ bWFrZXJz aG9ydA== IFN5bg== Z2FiZQ== 15fXldeq 6bk= IGVuaw== IE91dGRvb3I= NjMx IFphaGw= IHR1bW9y LmFsZXJ0 IFRlYQ== IGNvbXBvc2l0ZQ== IHN0cmlraW5n IERpc3Bvc2U= NTk1 INin2YTYp9is 24zZiA== 0LTTqQ== dXBhbA== ZWRpdW0= 4LWB4LSo4LWN4LSo4LSk4LWN 5p+l55yL IOCkuOClgg== INC/0YDQtdC00L7RgdGC0LDQsg== IHRyYXZlbGVycw== LldoZXJl INC20LjQt9C9 7JeQ64qU 5pyd IG9sbA== LndpbmRvdw== 2KfYtdmE 2YLYqNmE INC40LzQtdC90L3Qvg== cHJvZml0 ZW5zb3Jz 2YTYp9mL IGVtYmFycg== W2I= IMOpcXVpcA== IHZlbmRh IGRpbmdlbg== 4Kqk4KuL Y3VsZXM= IEdyYXBoaWNz IHB1bmN0 IHZvbHVwdA== YW5rZWxpams= 5Lil 4KeN4Kab4KeH UmVu IGFkZWw= INC40L3QtA== IG1hc3Q= bW90aGVy IHVuZm9ydHVuYXRlbHk= IHBlZXJz ZmVjaGE= WEw= 4KWN4KSv4KS+4KSo cG9k 4buZYw== 77yM5oiR I2dldA== Q29pbg== IEFsb25n IG1pZQ== IGRldGVy INCz0L7Qu9C+0LI= IOCuruCuseCvjeCuseCvgeCuruCvjQ== IG11c2ljaWFucw== IEFsYmVydA== X0lS IHJlcGxpYw== bmpl aW5hw6fDo28= IOCyleCzig== xYLEhQ== IGNvbnNlY3V0aXZl IENhcmRz IGR5aW5n 0Y7RgtGM bGVs 4KWN4KSo4KWH IOCwleCxguCwoQ== IGNvbW1vZA== QWRtaW5pc3Ry c2hvcmU= MDM0 LlNlc3Npb24= IOCmqOCmv+CmnA== IOCql+Cqrw== IGNsaWNrcw== IOWo Ki4= 4KS+4KS44KWN4KSk cGVybw== 4Kq14Kq/ aW1vcmU= NzEx R3Vlc3Q= NDkz IEVpZ2Vu YW1lbnRhbA== b25r 5LiL6LyJ dWx1bQ== CXNi NjM2 IGdsYXM= Q29vcmRpbmF0ZQ== 4LOH4LK1 IE9USEVSV0lTRQ== IGxvaW4= IGFmZmFpcnM= IOCmleCmrg== IGFzc29jaWF0aW9ucw== IFhpa3dlbWJ1 IFBsYW5ldA== INGB0LDQudGC LlJlZ2lzdGVy KHZhbHVlcw== IGF5YQ== 64u0 bWFpbmRlcg== INio24zYtA== IEhhdXQ= 15zXmQ== Y2lz IGVzcGVyYQ== RXNj CXE= IHBsYXRhZm9ybWE= IM66zrHPhM6x bm91 IHF1ZXN0YQ== IHNvY2lhaXM= IGF0aXZpZGFkZXM= INCg0KQ= 0JTQu9GP 4KeL4Kaf 0YDQvtC80LU= ZWR1 IGhhbW1lcg== IyMjIyMjIyMjIyMj IEpCdXR0b24= YXR1dXI= 6Kqe IM6tz4fOtc65 xLFsZA== IGFtYm9z R2FsbGVyeQ== 5byA5aeL 4oCZw6p0cmU= dXNhYmxl IGJla2FubnQ= 0LXRh9C90L4= IHRzaXM= 2KzZhg== IGJpbG8= IGltcHVscw== b2dz LVNo QXBwZW5k X1RY cGxhY2Vk IG1hcmE= a2FyYQ== YWx0YQ== 4LSx4LWN4LSx4LWN 4Keu INeR15E= IHpldHRlbg== ZW1pYQ== IFZpc3Rh IEtlbnR1Y2t5 IGNyw6llcg== IGxva2Fs X2ltcG9ydA== 27c= IFllc3U= INC+0YDQs9Cw0L3QuNC3 IHRvdXJpc20= IOuI IGxpc3RlbmVycw== 0YDQtdC3 4oCmLgoK IGRlaXhhcg== INmF2YjYsdiv IExvdg== INC20LDQuw== IHBlcnPDtm4= 2LrZhQ== IEhheg== Y2FyZHM= IG9mZmVyaW5ncw== IG1lbWJ1YXQ= 55S15a2Q IGNvbXBhbnkncw== IEhlaWdodA== cmV1 IHNlbGxlcnM= IHRyZWF0cw== IEFtZXJpa2E= X0FQ IHN1cnZpdg== IEJlYXQ= IGJsZXNzZWQ= Y2lk dXRsaWNo IHBvc3Rlcmlvcg== 4KuH4Kqh YXp1 LWJldHdlZW4= NjMy cHRpb25z IHNoZWxm IMOpdGFpZW50 IM60zrc= IGJlZmluZA== dmlzaXQ= aHlkcg== IGRpYWdub3NlZA== IHBlcm1pdHM= IGluc2VydGVk LWZpZWxk IFBsYW5z X2Fzc2VydA== Q29tbQ== X1dSSVRF IHJldHJlYXQ= aWh1Z3U= VGVuc29y L3VwbG9hZA== 4Kih IHZlcmg= IERhaw== IGNhcmc= YW56aQ== 4LK/4LKz IHdzenlzdA== YXR0bw== IHZlZ2Fu 4LK/4LK44LK/4LKm IGh1bWFuaXR5 IERlc3Q= 4KWL4KSh INCw0L3Riw== IGR1cGxpY2F0ZQ== INW/1aXVvQ== b2ty IGFjdGl2YXRlZA== IHF1aWVuZXM= b3NzaWVy IGViZQ== 4K6+4K6u4K+N IGdyYWR1YWxseQ== NzIz Lmdlbg== IExldCdz ZGVwdGg= LkNsYXNz IG9wbG9zcw== UG9seQ== b3Jzaw== TW9kdWxlcw== 1aHVttaA 2YLZhw== IHByb3RlY3RpdmU= IHphdg== VG9r 67aI INiu2LU= WWE= IGdlbm9lZw== IFZlbmU= QklU IGx1dA== NTU4 KEtleQ== KHN5cw== NTI5 IOCmleCmpeCmvg== IHRhYmk= IG1hbnRlbg== X2RpZmY= IGVudHJlcHJpc2Vz IOCqsOCqvuCqnA== INmK25A= IMSn IERldmVsb3Blcg== aXNzYW4= ODU3 IHNoaWVsZA== b3Jhcw== IHBpbmU= IEli Y2lzaW9u L3V0aWxz INCh0L8= IENVUg== 4KWM4KSC dWVpbA== IGVuY291bnRlcmVk IEtpbmRsZQ== IGJpam5h IG1lYXN1cmluZw== 4LiH4Liy4LiZ IHdhcm5pbmdz IENvbG9tYmlh INC30L0= TWVldA== dXNoaQ== asOk IHJlc3BlY3Rv aW5kZXJz IHJlc2lzdGFudA== OTcy IM6+ IGltcGFjdG8= KHNlcnZpY2U= LmVuZ2luZQ== QWxsZQ== LW3Dqm1l IFNoZWw= IGJla29tbWVu LnJlY3Q= INij2YjZhA== IHBhZ28= 6IKJ IGF1ZGllbmNlcw== YW1iaXJp L3No w6Nvcw== IGVuY29kZWQ= IOaL IFNUQVJU KGds c3Vw NTE5 INqp2LPbjA== 4Kaq4Kaw IHRpdGxlZA== IENHRmxvYXQ= NzA1 INiu2KfZhQ== J2lscw== w6lyaXF1ZQ== 4LeP4LeA IE1laW4= ZXNzw6Q= NDY3 44O844K4 IE5ld3Rvbg== cGV4 IG7DpnI= 0LXQvNCw IHRvdWNoZWQ= IHN2YXI= KHBhc3N3b3Jk 4KSk4KSw 4Z+Q IGluZGVt INCy0LXQuw== acOobWU= X2NvbnRlbnRz INGB0LvQtdC00YPQtdGC 2YrZhw== IG5vdm9z IFJlcHVibGljYW5z w6l0aXF1ZQ== c3Vu IENoYXJsb3R0ZQ== NTM4 IFJTUw== YWl0aGU= IGVuaWdl IHByZWNpc28= IGVsZWN0cm9uaWNz Pz4KCg== MDgz d2VldHM= LWVxdQ== IEV5ZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3VybmFtZW50 YmlkZGVu INC40Y4= IGFsYW4= w6h2ZQ== IHR1aw== INif RWFzeQ== LnJlcG9ydA== c21pdGg= INKb0LDQuQ== IGhldGVy 4Ka/4Kaq IFBhcmxpYW1lbnQ= IGdlcmE= 2LHZiNiz IER1bg== CQkJICA= LkxpbmVhcg== SlA= IFBvcnRsYW5k IENhcm0= w7pw NDc2 bnnFiA== IOCknOCkvuCkqOClhw== Y2hlaWRlbg== bWFsbG9j 4KS44KSw c3RlbA== 0L3QtdGB 1bbVuQ== INC10LzRgw== 2YrZgdip PD4oKTsKCg== aXNwZW5z XyI= IG1vbWVudHVt IGdhc3Ry IFBhZGRpbmc= LXNlbGVjdA== 2YjYp9mF dmlld3BvcnQ= z4zOvQ== IOCmrOCmv+CmrQ== IFB1cmU= IGx1Z2FyZXM= IGludmlz c3RyaW5ncw== LuKAmQoK IGludGVyZXNzZQ== INmK2K8= IFJlZmVy CXJlcXVlc3Q= 5a2p 7Lac7J6l IHRlcnQ= IHVwc2V0 IGVtcHJlZw== IGnhuaM= 4Z6J bGV0dA== IHF1YXRyZQ== Y3JpcGNpw7Nu ZXR5cGU= Lk5leHQ= X09GRlNFVA== IGRlY2lkaW5n IOCqhw== KGxvYw== IGxvbmdpdHVkZQ== IHRvdGE= IGh2ZXI= OmdldA== 5ZWK 1aHWgNWw RkFDRQ== 0Y7RhtGM IFJD 0Kw= MDM3 INC/0YDQvtC40YE= NjUz YXJkZWQ= IOCkleCljeCkr+Cli+Ckgg== IHbDoQ== IGJlc2Fy IGJ1aw== CU9iamVjdA== 4Ka+4Ka3 SkU= J2Fi INmG24zYsg== IHp6 54Sh5paZ X2V4aXQ= 15XXmdeh IHByb2plY3Rpb24= IGNvbmV4 IEJhxZ8= aWppbmc= IOCqquCri+CqpA== aXJtZQ== IFBhaXI= 4oCZZW50cmU= 4YOc4YOU4YOc CWRv IGFja25vd2xlZGdl aXR6ZXJsYW5k d2No 6YCa6L+H INeU150= IENvbnRpbg== IHRyYWRlbWFyaw== KGJvYXJk 2KfYudiq QXNzZW1ibHk= IG1pbnV0ZW4= T0ZG Lm5vcm1hbA== INin2YTYsdmK IHJhY2s= IOiO 0YjRlg== IGxpdGVyYWw= IHN1YnNjcmliZXJz 0LXQs9GW SW50ZXJhY3Rpb24= 0rXQsNGA0LA= 5b+1 X2VuYWJsZWQ= IGNow61uaA== NDkx INC30LDQutCw0Lc= IExhdW5jaA== IOCkueCli+CkpOClgA== IGFwbGljYWNpw7Nu Lmxlbg== 4KeA4Kav4Ka8 z4zPhM61 w6tt dXdh NTk4 Lmxvd2Vy IHJpag== IG5ld2Vy Njk5 INGD0YHRgg== d3lk YWRpcg== IGZvb2w= IG93bnM= cmVlY2U= bGV2ZWxhbmQ= IHNlbnNpdGl2aXR5 KENhbGVuZGFy IERJUkVDVA== SGVhZGluZw== PScv LnByb2ZpbGU= IOCquOCqruCqrw== INGE0LDRgA== LS0tLS0tLS0tLS0tLS0= IG1hw7E= k50= 5Y+45py6 X2Nvbm5lY3Rpb24= IGRyYXdz INWh1bTVpdW2 IExheWVy LnByb3A= Tm9t IGhhaA== YmVhbnM= aWVudGVk XEZhY2FkZXM= UGxheWluZw== LlNRTA== IGh1aw== IE9wcG9ydHVu IGVtYnJhY2U= w6ht IHBlZGk= aHRh 6K6y IGNvbG9yZnVs IEdyZW4= zqzOuw== IHN0cmlkZQ== INCx0LDRgdGC 77yF INmF2LHYrw== IHBvZW0= INC80L7Qu9C+0LQ= IOCmueCniA== IMO8eg== RGlzaw== X2dyYWQ= NjA3 IEZv dWRlbQ== IE5lZGVybGFuZHNl IGJpbGRlcg== IGFsZ3Vt IEluZGVlZA== IEZyZWQ= PjsKCg== IGxvaQ== 4LSu4LS+4LSj4LWN IG1hc2N1bA== IG5peWE= IERvY2g= VG90 cHJlYWQ= X3Jlc291cmNl aW1lbnNpb25hbA== IGNvbnRyYWN0b3Jz IHJk X2dzaGFyZWQ= IFZhbGlkYXRl b25nb2Ri IEdyZXk= IE1paw== INGB0L/RgNCw0LI= IHRyYWRpdGlvbnM= IHN0YXJ0ZXI= cXI= UG90 NDU5 cHJvY2Vzc2luZw== ICI7 4YOc4YOU4YOR4YOQ INGD0LrRgNCw IGF1c3M= 0YLQvtGH IEFscGhh IHdlZ2Vu IGxpZW4= 0LHQsNC9 X2dhbWU= IGlobmVu IFJFTQ== X3NlY3Rpb24= 4Kay4KeI IGNoYW1iZXI= X2NmZw== w7NzaXRv 2YHYsdin2K8= 2YjZhtip IGZlYnJ1 4LKa4LON4LKa IGRpZmbDqXJlbnRlcw== IHZhZ3k= IFNoYXBl bGVpY2h0 0LjRh9C10YHQutC+0LPQvg== 4LK44LON4LKk NTM2 dWF3ZWk= 0LvRj9GC0Yw= IGHDsQ== X2Ny INWv1bjVsg== LnRz IGJhc2E= IHNhYQ== IOaV 4K+N4K6v IGNhcGl0 IGJhcmc= YXJpYWw= KFsi X2Fj NTU0 IGluZmx1ZW5jZWQ= INec16Y= INCc0Ys= 06HQsA== INGB0LDQsQ== IEFyZW5h LkFic3RyYWN0 IGRyxb4= IGF1c3Ry bWVyaw== aW1hYWw= IGlyZ2VuZA== c3R1ZA== INio2YjZhA== IGVybQ== LWNvbW1lcmNl IGl5b25n IE1vemlsbGE= MDc3 IHJlY3J1aXRtZW50 0YHQu9GD0LY= CW91dHB1dA== IENvbW11bmljYXRpb24= IHNlZGE= S24= INeU15DWuA== X2NoYW5uZWxz IG1pc3NjaGllbg== IGN1YW50bw== 0YDRg9C9 w71hbg== IHJlc2VydmVz NjIx bGluZWFy XSIs 6ZyA6KaB IGluw61jaW8= ODEx 4LmI4Liy4Liq 44Kz44Oh44Oz44OI b25pdG9y b3V4 Rm9sbG93aW5n LlNjaGVtYQ== aW5haXJl NzE4 NTcx wqY= RGlzY2xhaW1lcg== IG1hbnRlbmVy YXN1dA== NTYz IGJhaHdh 2LbYsQ== 4YOg4YOT IG1hcnpv IGFzc2lnbm1lbnRz IGN5Y2xlcw== IG1ldGU= dWJsZQ== IGFuYWx5emVk IHRvZGF5J3M= IGluc3RydWN0b3I= LkJvZHk= IFBpY3R1cmVz INGA0LDQudC+0L0= IHRyaWFuZ2xl XVw= 4LC+4LCh eWV1cg== INmF2YbYsA== IEd1bg== IENvbnZlbnRpb24= 0LPQuNC50L0= IEFkdmlz ZnVuZw== X09S IGxz IG9ybw== IHNlZWtz 5a6z IFNBUA== YXRzaQ== IFNO LmVy VG9kb3M= X3JlcQ== 2KrYsdmG2Ko= IFNTTA== UXR5 IHN1aWNpZGU= IMWT 5Y+C5pWw IOCkrOCkpg== IGFuYWx5c2Vz 2bA= IHRhbGVz YmxpY2s= Q29udGFjdHM= 157Xldeq IG1lZXN0ZQ== NDgy 44OD44OX aWJiZWFu LW9yZGVy dWFpcw== IGvFqw== 4LSu4LWN4LSq NzA0 INmI2YE= 4YOU4YOZ INC/0L7QvNC+0LM= INaF1aM= INqv2YHYqg== IEdyYWQ= IOCkqOClh+CkquCkvuCksg== NDc4 IHBhc2U= KHNlbGVjdGVk TWF4aW11bQ== P3Y= LnJvd3M= bW9uZ29vc2U= IOCknOCkvuCkqOCkleCkvuCksOClgA== X1NFUlZJQ0U= INi52YTZitmH2Kc= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== INC60YDQtdC00LjRgg== IGNvbmNsdWRlZA== bmVybw== VFk= INit2YQ= bHVt 6YCB5paZ 5ZaE Nzk5 KGJ5dGVz aW94aWQ= 6aG555uu Q2Zn J10uIg== VWlk IHRyaXBsZQ== ID8s IGV2ZW50b3M= IHJpdHVhbA== IFJk TmQ= IGRpcmVjdG9ycw== LXN0ZXA= SG92ZXI= IFF1b3Rl 5Y+q5pyJ 0LrQtdGC IGludmVzdGlnYXRlZA== IHBsZWs= 6Lef IG9icmln IG9jaw== 77ye IGxicw== 4KSD IGRldm90ZWQ= dWZl ODk5 INGC0LDQvw== b3N0cg== YWlycm8= LkFycmF5cw== L1Y= 2YjZgw== IGFjY2VwdGluZw== 4LSv4LWB4LSf4LWG IEJheWVy 0YLQtdC9 CWZyZWU= VGhyb3dhYmxl INCS0YHQtQ== 2YjZitix IGFudGljaXBhdGVk 4KeB4Kew dW1lZA== 4bqrbg== IFNFQw== INGF0LA= LkVkaXQ= IEFTVA== INGY YWtpdA== IFF1YW50 NzU1 IHdvdw== IGRvdWdo aW9uYWxl IGthcmFrdGVy INio2KfYsg== 1aHWgNW0 IGFkcXVpcg== YXPEsW5kYQ== IG9ibGlnYXRpb25z LlBJ ZW5naQ== LnJz IFZvbGtz TWls 157XkA== UGVyY2VudGFnZQ== P2lk X3JlbW92ZQ== aGlh IFN0cm9uZw== Lmh0bQ== dXJnZXI= INC80LXRgdGC0L4= w5Q= IGJydWs= INmI2KfZhNiq2Yo= LWxvYWRlcg== IEZJTg== CU1hcA== IGp3dA== IOOCog== cmVybw== IHRhaWxsZQ== 0L7RgtGL IE1lc3NhZ2Vz IFF1YW5kbw== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU IGhvYmJ5 IEdlc2Now6RmdA== YXRvaXJl aGF0dGFu IHZldXQ= INio2KfZhNiq IFZpc2E= IGltYWdpbmc= IGJhc2VtZW50 dXJzaW9u IHBhcnRpY2lwYXI= IHBvdmU= INWl1bbWhA== bWFya3Q= INGH0YPQsg== IHZhbGV1cg== 4YOj4YOh IHBsYW5lcw== IGpvdA== 0LjQstCw0LXRgg== IHRoZW8= J2FwcA== IGhpcg== c3R1 IHZhbmh1 LWVycm9y 44K9 7Ja4 INeV15s= IGF1Y3Vu b2JpbGk= 4LOH4LKw YWJlbGE= LmFjY2Vzcw== X2lv IGluaXRpYWxpemF0aW9u w6FyYQ== 1oDVog== IEhvdXJz bGVyaW5p YXTEgw== IExvYW4= TWM= L2V4 IHLDoXBpZG8= c3dpdGNo 4Kev IGNvbnZlcnRlcg== INqF2K7Zhw== LVVu amo= INGC06nRgA== 6Kit X3NlYw== OTIx IENoYXJsaWU= IHbDoXJpb3M= INi52YQ= IGVpcw== 77+l LmVudGl0aWVz Q3M= 4LS/4LSe4LWN4LSe dXBha2Fu 6L+Z5Liq 4KeB4Kaw4KeB IEF1ZGk= IEFzc29jaWF0ZQ== INC70LA= 2YPYq9ix IExlZXM= IHNhdHVy NjM1 IFstXTo= IE9ybGVhbnM= CW51bQ== INC00L7Qu9C20LXQvQ== IHNpcA== aWN1bG91cw== IENhcnM= 4LKX4LKz4LKo4LON4LKo4LOB IGFsZ29yaXRobXM= IGFicmly 0YbRgw== X29wdA== 0YHRi9C7 IGdyYW1tYXI= 8J+Ygg== IFVwZGF0ZXM= IOCkrOCkuA== 5Lqy cmlzZQ== IGRlc2N1Yg== IGF0dGVuZGFuY2U= IGNvbHNwYW4= YXVnaHRlcnM= IFVubGlrZQ== U3Bhd24= IHRyYWlscw== TWlk INWh1aY= TWVz IGpva2U= IHJt IEhBTA== IHBhdg== 4K6F IHV0dGVy 4KWu dWx0aXBhcnQ= OTA2 QWx0ZXJu W10K IGFtaWQ= YWRvb3A= 5b2T5YmN 0LTQsNGA0Ys= 4KS/4KSs IFJpY2s= CVE= IEJpcnRoZGF5 IGFpZGVy IGdhcmE= KGNv IG50Y2hpdG8= OTMz Y3Vsb3M= IG1pbmltaXpl TGlzdGE= cmlmaWNl 57uI 4Liz4LiZ w7xyZ2Vy IGpzZW0= ITwv OTA1 IFN0YXRpc3RpY3M= 2LrYqQ== VUlJbWFnZQ== INCx0LDQtw== IOCuheCusA== IGhhbmRmdWw= INGA0LXQtA== aXdh IHByZXNpZA== IE5FV1M= IENhcHRhaW4= dHJhbnNpdGlvbg== IFByb2R1aw== dGVhY2hlcg== IHVuaXRlZA== YW5uZXJz IGV4aGliaXQ= dmVyaWZpZWQ= LWNhbGxlZA== Ukc= LnZhbGlk IENlbnR1cnk= IG1pY3Jvcw== L3Ry LmNhcmQ= IG1hc3Nh IGNvbXByZXNzaW9u 4YOY4YOd4YOc IExlYWRlcg== IHNsYWc= IENoZWxzZWE= 6LWU Lm5pbw== IEphbmVpcm8= 4KeL4Kay aWN5Y2xl INmF2YbZh9in IHBlcmNlcHRpb24= IGVycm8= 6Yw= aW5mb3JtYXRpb24= w6FudA== Q29tcGxleA== Nzkw IOC5gOC4oQ== IEJ1Zw== YWJhdA== 5rm+ IGRlYmlkbw== TWFq ZXJlYQ== b251 IHRlaA== NTQx INGA0YvQvQ== IA0KDQo= IOCkteCkv+CktuCljeCktQ== YWNoc2Vu z4bOsQ== IHdvcmtmb3JjZQ== Y3VsYXRpb24= aW5pdGVseQ== INC/0YDQvtGH cXVlbGxl 5bCK w6l0aWNv IOWV Lm1lYW4= cmVnaXN0cg== IE92ZXJ2aWV3 IFVua25vd24= 65WM IFBsYXph LkxldmVs Y29uY2F0 IOClpAo= IHBuZQ== IOCksuClh+CkleCksA== IG1vbnVtZW50 IGJpZHM= YXVuY2g= 0L3QuNGG0LA= X3Rlcm0= 0YfQuNC7 LXNj IHJ1ZA== IGlucXVpcnk= LmNvbXBvbmVudHM= IHJlY2ViZXI= IGNvcnBvcmF0aW9ucw== KGNvbHVtbg== b3V0ZWQ= IEhleQ== aHJlbg== INiq2YjYp9mG IEZJRg== IGNvbW1lcmNl amQ= IOGDmeGDneGDnA== INC90LXQuQ== w6Rn 6auY5r2u aWxpbmU= w6RuZGU= LWF0 IExpc3Rpbmc= w7Bhcg== dWNlZA== 5YGH55qE JHNjb3Bl IG5naGnhu4c= KGRldg== IHJlZnVzZQ== IHJlaGFiaWw= IOC0leC1guC0nw== 6Zyy IG1ld24= Q29uZGl0aW9ucw== IFNlbGVjdGlvbg== IFN3aXNz INSz 4LWB4LSV4LSz aWV2aW5n IHN0YWtlaG9sZGVycw== CWZ0 LmJ1a2tpdA== INC/0YDQtdC6 IGtvbmQ= 546E IFByb3RvY29s IFNC IGNoYWM= IOCujw== IHNlbXVh IOCmuOCnh+Cmhw== IGNpcmN1bGF0aW9u IENhbGN1bGF0b3I= TG90 Q09VTlQ= LWxvbmc= 4YOq4YOQ 0LrQvtC70Yw= 1aHVt9W/ 4YCK4YC5 IE9zY2Fy IG1hdHM= IFNwZWN0 4LON4LKs IGNhcmI= IHBvaXNvbg== YW50d29vcmQ= IM6xzrM= IPCfmYIKCg== LlJpZ2h0 TmFjaA== ZXBpcw== IGRlYnJpcw== IHBhbmRhcw== fQoKCi8= IGVudHJlcHJpc2U= IE5vdHJl NTQy 5oc= IERlY2s= IGR1bA== IOC0uOC1jeC0pQ== LXBhcnQ= INGD0LTQvtCx IEdsYXM= MDUz IHl1YXY= IGdlw68= MDYx IFNJ 4YOd4YOo4YOY INCU0LA= eW5kYQ== 0L7QutGD IOCkmOCknw== 6JuL IElzdA== 1aHVutWl1b8= IE5hc2g= a2VlcGVy UmV0cg== NTI2 Lmx5 LyoNCg== ZWNu IHR3aW4= IOCwteCxhg== IChc 44K0 IGV4cGVyacOqbmNpYQ== c3TDvGNr 4Ki+4Kio IENPUg== IGNoaW4= IHNldWxl Z2VicmE= IHRlbsOtYQ== IENvcm9uYQ== IG1hbm4= IGNvbnRyYWQ= cHJlaA== IGludGVncmF0ZQ== cml0ZXM= IEFsYXNrYQ== 4Lij4Li04LiH IEl0ZXJhdG9y IGFjZXB0 IGLDuHI= INGC0LDRiA== IEhlYXQ= NDg3 IHNwb25zb3JlZA== 0LjRh9OZ IGludGVyc2VjdGlvbg== 1KXRhdGM IHJlY3ljbGluZw== IHN5bmRyb21l IGVxdWF0aW9u IGLDvHk= IGR1cmFiaWxpdHk= IFN3ZWRlbg== LlBsYXllcg== 5amG UHQ= IG1hbG8= IHByb21pc2luZw== LmNvbm5lY3Rpb24= IGFiYW50dQ== LWRpc21pc3M= LW5vbmU= INGP0LfRiw== SVBT IMOm aWtrZQ== cGhy IGNvbXBhdGliaWxpdHk= LWRv QVRBQkFTRQ== IFBoYXNl IGFydGlr IHByb2dyYW1hcw== SW1wbGVtZW50ZWQ= IHNvY2llZGFk ZWt0ZQ== IHt9Iiw= YXN0bw== IOCumuCvhuCur+CvjeCupA== INW21aHWhw== 2KfZhdip IGhpZ2hsaWdodGVk IGltcGxpY2F0aW9ucw== IFV0YWg= IGFsbG9jYXRlZA== IElubm92YXRpb24= 5Y+v6IO9 NTI3 IGluZGlh IERlZmluaXRpb24= MDQ1 KCcvJyw= 6LGq IE51cg== YWxlemE= INWh1b7VpdWs1as= IHJlc2ls YXlvbg== IEJ1Y2s= IGVzdGFiZWxl IE1vdGlvbg== aWppZXQ= IGxvcmk= S2g= IHBvY2tldHM= R2VzdHVyZQ== IE9yZGVycw== YWxidW0= IGhhemFyZA== LmRyaXZlcg== IGAK LdC30LA= IOm+mQ== 67aA7YSw 4bqjbmc= IHRpZXI= amFtaW4= LW1ha2luZw== IGFiYg== INio2Lk= IE1vdmllcw== IGZyZXE= ZnVuZA== KScs INC80LXRhQ== INio2r4= IE9seW1waWM= IELDvA== IGFybWVk IExhbg== R29hbA== b3J1cw== YWx5c2U= U3BlbGw= IHF1YXNp MDcx IEJVUw== IEJlY2s= SWxsZWdhbA== NzEy LFM= 2YHYuA== INW01aXWgA== w6dl JzoNCg== 0LXQvdC005k= IHN0w7hy QGVuZHNlY3Rpb24= IHLDqWR1 aGVpbWVy w7PFgg== 2K/Yp9ix2Kk= IG1pc3Npb25z ZmFjZWJvb2s= Lm5vdGlmeQ== 0LjQtNC40L0= LnJlbG9hZA== 15LXmdei INW01aXVuw== LWJy IGhhZGRlbg== IHBhbGV0dGU= IHllaw== dmVuZG9y 56a7 bWlkZGxl IGRlY2VtYmVy IGRlbnM= aWN6 2LDZig== ZGFsZQ== IOCqqOCqvg== INmK2YY= PScs IG7GsOG7m2M= IGRldmVt INW61aHVsA== aWxpYXRpb24= IGxpY2hh IEFsZA== IHBpbnM= J319 ZXJuZQ== IEN1Yg== IGVydm9vcg== aGFpdA== IHRlbmhh IENHUmVjdA== 5byA5oi3572R5Z2A INin2YTYrdmD NjM5 4LeZ4Lax IHRoZWF0cmU= dmlv INec15k= NTQ5 U2luZ2xldG9u IOCkquCljeCksOCktg== 0LvQvtC9 IGRlbW9u ZXRpY3M= IGlua2w= aWhl b2xlc2NlbnQ= NTY4 IFByb2dyYW1z IG11aXRh IOCwheCwrw== IGvDtno= IGZlbmNl CWZwcmludGY= dHJhbg== aWxpYXRl eXJhbQ== IGNvbXBhcmluZw== IEJpcw== IHNtYWxsZXN0 2pbZig== KHJlY29yZA== RXhwZXJpZW5jZQ== INC80LDSmw== IGh1ZA== INC00LDQvA== OTE1 ODA2 LkNvZGU= aXNzaW9uYWlz IEdF INC/0YDQtQ== UGFz IHBsYW5v IOCyoQ== w61jaW9z aWN1 IGJ1bQ== LlRvcA== IHNrbGVhcm4= X3JlbQ== 0rPQuA== IGtlYg== IE5heg== ZWxsw6Q= INC60YM= ZGVsdGE= IG9maWM= b3JkYQ== IGRvemVucw== IGZhcms= 1aXVpg== aXN0cm9z R2Vv SXI= IEJyZWFrZmFzdA== IHZhbQ== INC80LXQsQ== S1M= QmVz INC90LDQu9C40Yc= 4KeH4Kac NTM0 4Kq+4Kqs IGNsZXZlcg== IGRlcnI= IE5ldGhlcmxhbmRz 67iU QVRT IERpc2s= b3NleA== 4LCm4LGN4LCm 4YOY4YOU4YOg IGJvbmRz IGRhaGls 4KeA4Kew X3NhbXBsZXM= LWlt IHNlcHRlbWJyZQ== ZmVhdHVyZXM= 0YLRi9Kj YXJvdW5k IEluc2lkZQ== IGF0dHJhY3Rpb24= IEtvbW11bg== X3BhcmFtZXRlcnM= IFhYWA== X1RFWFRVUkU= 0L7Qu9C+ IE1pdGds IOCqpuCqv+CqteCquA== IFB1c2g= aWdoZWRlbg== PSIiPg== IEN1bQ== ZGFyaw== IEpvbmF0aGFu 0JLRiw== INCz0YDQsNC20LTQsNC9 IFN3aWZ0 INC/0YDQvtGG0LXRgdGB 1brVodW2 Pj4+Pg== IEFydGlzdA== IE1lZXI= IGxvdW5nZQ== 546w6YeR IGNsZWFyZWQ= IGhvbWJyZXM= IHdlbGNvbWluZw== IHRyYWRlcw== IHBpYQ== INC30L3QsNC60L7QvA== X3Jlc2V0 IGFjY29tcGFueWluZw== RGVzcGl0ZQ== 0YLTmdGA IGJvbnM= a2xhZA== SW5zbg== IHplcm9z SUZJQ0FUSU9O IHZhbHVlZA== IHBlcmZvcm1z IOC0ruC1geC0 IG5vcnRl IGJhc2ljcw== KFRlc3Q= IGRlc2Fm NTcy IEFsw6lt IOCkruCkvuCkrg== UHJvcw== IGFkcmVz X2xvbmc= b251dA== YWNrZXRz SnVtcA== IHZpZMOpbw== IGluY2x1c2lvbg== IFRoYW5rc2dpdmluZw== 77u/Cgo= IG5lcnZl 7Lig cmFq IFsnLi8= IHF1ZWVu 0ZbRlw== dXRyYWw= IExlaQ== YW50aWFnbw== IHRyYXZlbGxpbmc= V1A= IGJhZGdl IOKJ YXJtaW5n 4KSj4KWN4KSv PFI= INC00LXRj9GC0LXQu9GM V0hFUkU= IGJhxJ8= IHRyYWRlcnM= IGdlbnRseQ== U1RBUlQ= IHNjZW5hcmlvcw== b2R1 eXN0ZXI= 7Iqk7Yq4 2oU= 4KSc4KSw IGhhbmRlZA== IGdlZGFhbg== IGdyb3dz Qmlq IG1lbHQ= IGlzb2xhdGVk IHp1Zw== IG1haW5zdHJlYW0= IHNlYXRpbmc= 5ZOq6YeM YXJsb3M= bWls IEFsYnVt IHllbmk= IGthcmE= IE3DvG4= IOC3gOC3kg== c3RhdGVtZW50 INC/0LXRgNC1 IGNvdXJ0ZXN5 IGFnaW5n 1aHVv9Wh1oA= IOuCqA== ODM2 IEhlbGw= X0JMT0NL L18= IHJnYg== IFByZWY= INC80LDQs9Cw0Lc= IGR1bw== INio2KU= INC70Y7QtNC4 yrtl bWJsZWQ= SXo= IGJvbHNh IGFmZmlybQ== aXBoZXJhbA== MDI5 IE1PTg== IHBhbmU= 6Zai IHBvbmQ= KG1vY2s= IEZT X1NVUA== IOqwgOuKpQ== bGluYXJ5 IHJlYWNoZXM= IHJlbm93bmVk IFJhbmQ= 2KzYsg== cml0ZXJz IEludGVsbGlnZW5jZQ== IHRlZ28= IGxvbmdv IGdlbGVnZW4= LmVudHJ5 IHdvb24= IHdheGFh IGVzc2VuY2U= IOCmleCmv+Cmm+CngQ== IGRvbmF0aW9ucw== IOGDoOGDkA== IFJN IGdhaW5pbmc= OTg3 5a625LmQ IHZpbnls Y3VpdHM= IG3DqnM= INmF2K3Yt9mF IG1pbmVyYWxz IGh1bWFub3M= 1bjWgtW01ag= 0LDQt9Cw0pvRgdGC0LDQvQ== amVjdG9yeQ== IGluZmVjdGVk IFVJTGFiZWw= IGRvd25sb2Fkcw== IGJhY2t5YXJk IHNn IHBlbnk= X2NvbW1lbnQ= IFBhcnRz cG9uc29yZWQ= INC+0YLRgQ== OmA= IGJyZW5nZW4= LdWr1bY= OTA0 IHRyYXVtYQ== IFVuaXF1ZQ== 5pyL PFA= 5omn VGhpbms= IE1vc2M= IGFpaw== IGhlZXI= IOmTtg== INCe0YE= YWJ3ZQ== IHJlZ3JldA== IFB1Ymxpc2hlZA== 0LvQuNC8 cXVpcmllcw== INij2K7YsdmJ 576O5YWD IHRyYWl0ZW1lbnQ= IEx1Y2s= 4LC44LGN4LCf cXVlbWVudA== LkpUZXh0 IG1iYQ== 4YOc4YOd4YOR LnNjb3Jl IEJldGg= YXRjaGluZw== IExlZA== aW1vbmlhbHM= IHByZW4= INC60LjRgA== IHZyZQ== IHJldHJvZml0 IOC0leC0tA== NjQy SW5wdXRz IGVxdWlwb3M= 4KeD4Ka3 IGluaGFi IGFncmljdWx0dXJhbA== w6lp IHN3ZWF0 IOywuA== bGl2ZQ== dGlwbw== ODI1 IFRhcA== IE9I 2YrYp9ip IHdlbmlnZXI= IEJhY2hlbG9y NTE3 IHRoZXJlYnk= IGRpc3Bvc2Fs IHNhaWw= IGRpbGU= IGRpZmZpY2lsZQ== IGhvb2Zk 1aHVvtWh1oA= INGA0LXQvA== IFRlc3Rpbmc= SW50ZXJjZXB0b3I= IGNhbmNlbGxlZA== Y29tZm9ydGFibGU= INim2Yk= U3lu 4Kqk4Kq+4KqC IEJPT0w= LnN0ZA== PSIkew== INmD2KjZitix INWn1avVtg== IGFsbGVyZGluZ3M= bmluZ3M= IM68zrE= IEpldA== IFdvcnRo IHJlbW9kZWw= IHNoZWVn CWNvdW50 IGZvc3Rlcg== UlI= INqp2YQ= ODQz dXJwb3Nl LG51bGw= YW55Y2g= IHBlcmc= IGt1cno= IGRlc2lyZXM= MDcy IGJsYWNramFjaw== IGFjY2lkZW50cw== IC8vIQ== dGVtcHM= IG91ZA== 0J3QtQ== 5rSl IHVudGVyc3TDvHQ= IEd5bQ== z4TOtc+C RG9jdW1lbnRz b2xpbg== 5YiG5Lqr T0RZ IExhdQ== 44K344On IHbDqXI= 4KSa4KS+4KSw IEJyb29rbHlu IFBhbG0= IEpQYW5lbA== aW1taQ== cm9ra2Vu aW5naW5n 5YWs5byA INmE2KU= INCQ0L0= IGtsZWluZW4= IHZhdA== dm9sbA== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq w6RuZ2Vy INij2LQ= INC00LXQs9C10L0= IHZpa3Q= w6RsbHQ= Y29tcGxleA== IGZyZWVseQ== yZlyyZk= 5aSE55CG IFN6 cHJpbnRz NTUz INW41oDVuNW2 IGFjY2Vzc2Vk LWdhbWU= LlByZQ== IGRvY3VtZW50YXJ5 R2FtZXM= IHNlcnZpcg== IG1hcmtlcnM= ZWxsaWRv IGxvdHRlcnk= aWdhcw== 44OO INmH24w= 4LGN4LCh TGFyZ2U= IFNvbWV0aGluZw== 6ZOB YXd2 IGNvcGllZA== 2KjZitip IHNpeHRo 0Y7RidC40Lk= IGNhbmR5 LWRhcms= SURFTw== IGRydW0= rZA= b3VudHJpZXM= aXlp IEdyYWNl IERlcHV0 w6RuZGVybg== cGVhaw== 6KaW6aC7 5LuF V2Vic2l0ZQ== CXZhbA== IHJlZ2V4 cm9uaWNz IGp1ZGljaWFs IGVzdHJ1Y3Q= IOCml+CnjeCmsA== LkNoZWNrZWQ= 4oCZLgoK IGNoYW50 I3c= ODE4 U3BhY2luZw== INeQ15fXkw== b21pYWw= 4YOQ4YOg4YOh IGNhcHRpb24= 4La94LeK IEFuZHk= KHRvcA== IE5BU0E= IGJlaW5ncw== Lml0ZXI= IGF1dGhvcml6YXRpb24= 4KuH4Kqy4KuA INm+2KfbjA== IHNlw6c= IG5vbWJyZXVzZXM= 7KC4 ZXNlaGVu IGhhc3NsZQ== xZ9p 4LOL4LKX INC90LDRgg== 1bbVqw== 4Kao4Ka+4Kaw IHNlbWFuYXM= 4KSa4KWH 6Zu2 IFN2 IE1lZGl1bQ== amw= INi32LHZitmC Lk15 LnBhcmFt IFRoZWF0ZXI= IHNjaWVuY2Vz IGxlbw== IHdpY2h0 Zm0= IGNoYWlucw== d2V6YQ== Lldl Njg2 IHB1ZXN0bw== INGD0LLQtdC70LjRhw== IG9ja3PDpQ== 7Iq5 IGFnYQ== IGNlcnRv YWdhcw== IGRvbWluYW50 IE5k IEJyYW5jaA== IGZhaWxpbmc= IFNhbHQ= 16fXnA== X3NxbA== IHByaW5jaXBhaXM= KHJlc3VsdHM= IGF0aW5n cmVuY2U= LkxlZnQ= 0qfRgQ== IHRyZWs= LXN0YXRl IGZsb3dz IGFzb2Np IHJlcHLDqXNlbnQ= IHNvbW9z IG15Y2tldA== 2KfYpA== IHRvbmd1ZQ== 0YLQuNGP aWFx IGVzdG91 INin2Lc= cmFoYW0= 4Z+D eW5hbWljcw== IGJsb2dnZXI= IHNsYXZl IHJlaXM= 5ZOh dW5hcw== MDM2 IHZyYWk= TWFl 0LLQsNC10Lw= IFRB IGRlY29yYXRlZA== Ym91dw== IHByemVk IMOkaA== 4Lin4Lix4LiZ4LiZ4Li14LmJ NjM3 6IW+6K6v IHdvbmluZw== TUFO IGdlbGVkZW4= NTg3 LmFu UGlwZQ== 0J/Qvg== OTk2 bGV0aW5n 0YDQsNC90LjRhw== IGNpdGl6ZW4= Pz4i NzE1 24HZhQ== cmdiYQ== 4LC44LGN4LCk IGFmZmlsaWF0ZXM= NTc3 aWt1bQ== dGh1bWI= INin2YTYp9mC IGdk 4KWN4KSy4KWA IEltcGVy IGp1bGk= IFBvZGNhc3Q= Pnc= INWw1avVtA== IHJlZ2FyZGVk X0lNQUdF IEluc3RpdHV0bw== bG9naWM= IG51ZXN0cmFz IFJ5 0YHQtdGA INC/0L7QtNC+0LE= Lmdsb2JhbA== YmlsZHVuZw== INGC0L7QttC1 IGZpZXI= aWtraQ== IHZlcnN0ZQ== IEludGVybmFjaW9uYWw= IGFubm90YXRpb24= Zml0cw== IGZyYWdy IGh2aXM= cmlv SXNzdWU= IGp1cnk= cmVhc29u aW5haXM= 0L7Qu9C10LU= IGRhYg== NTc4 IG92ZXJsb29r IHByb2ZpdGFibGU= IHTDtGk= LGg= bWluaQ== IFppbW1lcg== c3RhbmJ1bA== VXBncmFkZQ== IGdhcmxpYw== IGFsdW1u LnNvbA== 6Z2p IGlvcw== IGNlbGVicmF0aW5n INmE2KfYodmQ IGluY29ycG9yYXRlZA== IG5vaQ== LnRyYW5zYWN0aW9u Lk1vZA== IGNocg== IGlsYQ== IFp3 IFNpdGVz 4LWG4LSo4LWN4LSo4LWN IGJpb20= IE10 aWFuemE= 4LSq4LWN4LSq4LWG4LSf4LWN4LSf IHRhbGVudHM= IHNhdmVz IGlzdGU= X2VuYWJsZQ== IHByYXRpcXVl X0ZB IOiFvuiur+WIhuWIhuW9qQ== IOCkrOCksg== z4TPgc6/ IE1lY2hhbg== IHByb2Zpc3Npb25hbA== IHN0b3Jpbmc= UE9JTlQ= KGZk PSIs c2ln INqv2LHZgQ== KGlkeA== b2dyYWZpYQ== IHRheGk= b3lp IFhW ZGVjbGFyZQ== 4LmA4LiK IGhpeW8= YXN0ZW4= YXBwdXQ= XC4= bGFtYQ== INC/0LXRgNC40L7QtA== KHNlcnZlcg== IHJlbmRlcmVy IHRyZW1lbmRvdXM= ZXN0b3I= IGtlaW5lbg== 4Kq14KuH IGZlcnRpbA== 7Zmc X0RFVklDRQ== IOCmuOCmuQ== IEZsaWdodA== 4KSk4KWN4KSv ZXN0YXI= IGZpbGxl IEhhcnZhcmQ= 6LS0 IOCkqOCkv+Ckrw== LWJlaW5n b3BsZXM= IGZpcmVwbGFjZQ== 5Lmh IHJlbmRlcmluZw== 4oC6 IHN0b2xlbg== a2lo IHByZcOnbw== IEFsYW4= IGx1eHVyaW91cw== IGltcGxpY2l0 INmI2LDZhNmD bGFr YXJkbGVzcw== IG1hZ2F6aW5lcw== ODI4 ZW5hYmxlZA== 2K/Zitir IHJ1bGluZw== IGdldm9lbA== IExhdXJh LXR5cGVz IGJsYWRl Rks= 6LS1 Lm1hdGVyaWFs LmJvb2s= z4PPhM63 4LS+4LSo4LSC cXVpc2l0ZQ== aWVkYWRlcw== INCy0YvQv9C+0LvQvQ== 66m07ISc aWJpbGlkYWRl IGZ1bmRlZA== X2Zk IGZlYXM= IGxpamt0 dWt0dXI= ZW5jb2Rlcg== NzIy IGNvbnZpbmNlZA== INmE2YTYow== LmZsdXNo TW92ZW1lbnQ= IFdJTEw= NzQ3 IGdsbQ== Nzgx IGluZmVyaW9y aWVuemE= U04= IGNvbGU= cmF0aW5n ZXJ0b3M= CW9iag== c3BlZWQ= 157XmQ== INqp2LTZiNix 0L7Qt9C4 TVNH 1bjWgtWp1bXVuNaC1bbVttWl1oA= IHdhZ2Vy IHJ1cw== 4LC+4LCo4LGN4LCo4LC/ 0LrQvtCy0L7QtA== IGhhY2Vu X05hbWU= IEtub3dsZWRnZQ== IGNyaXRpY2lzbQ== 7ZmV IEpheno= IG1hdg== IGJhdGhyb29tcw== d2Vya2Vu IHNlbWJsZQ== IGhhdHRlbg== X21hcms= b3BwZXI= IGVudHJlbg== IGRlc2NyaWJpbmc= IOeahA== INis2LI= cmlqdmluZw== IHRyYWl0cw== dGVudA== IGJhZ2k= IGV1cm9ww6k= IEJpeg== Tm90aGluZw== YWduZXI= IEludHJvZHVjdGlvbg== Nzc4 44Gj44Gf LS0p OTAz IExhcg== L2Jhc2g= IEhpZ2h3YXk= Xns= IHNvb3J0 Y29tcGlsZQ== 4LS+4LSx IFw8 IHLDqWbDqXI= IGVuZQ== 6LWi5b2p56Wo INKu 0YLRi9Kb IHZlbmly LnN0b3JhZ2U= IHN3YQ== IG1vZ3U= cml0aXM= IOCkmuClgeCkqA== 4LmA4LiE4Lij4LiU4Li04LiV IE5vcnQ= INGE0LjQtw== IMSR4buLbmg= IFJlcXVpcmVtZW50cw== INC/0LXRgNCw IHNwZWNpYWx0eQ== IGV2aWRlbnQ= IGRpc3NvbA== IOGDm+GDlOGDog== 0YjTmQ== bmV0aWM= cmFnZW4= w7NyaW9z IEN1c3RvbWVycw== WFM= X0xFRlQ= IHN1YnNjcmliZXI= IGVzdGF0 4Z+S4Z6Y IHRlcm1l fT57 IExvd2Vy IEZpeGVk IHVubmVjZXNzYXJ5 VGhvc2U= INmK2Yg= w6luZA== IFR4 NjI2 LnNwbGljZQ== zr/Pjc69 Y2hzZWw= LnJlcXVpcmVk aW5jaQ== 2YrYp9mL IHZhaXM= RmluZGVy 4YOt IEVsc2U= w6dlaw== X2xpbmVz IHNtYXJ0cGhvbmVz MDkx bHVpdA== 0LPQvtC7 IHN0YXRv IG1vbHRv 0YHQtdC8 IHppZXQ= cmVnYQ== IGlkZW50aWZpYw== Pi8= IHByb3Bpbw== 44KH 6ZSu IEluY2x1ZGVz 5bKb IHBldGl0aW9u IEJBU0U= 5byA5oi36ZO+5o6l IGppa2E= MDkz cHJp IGN1bHR1cg== Q29sbGlzaW9u IGF5dWQ= IGV4YW1z KHNo IOCkheCklw== LmZ1bGw= IENvb2tpZQ== INGC0LXQvNC/0LXRgNCw LlNlcnZlcg== KGxldA== IFdlaXRlcg== IGFpdA== INm9 UHJpbWU= IGNsaXBz KE5vZGU= aW5kZWQ= IFNlcw== b29vbw== OTEy bcOkw58= X3N1Y2Nlc3M= IGJvb20= IE9QVA== IEN5YmVy IHRyYXo= IOC2muC2uw== IHBhcmxlcg== Zm9ydW0= INKb0YvQtw== IHJld2FyZGluZw== LW1hcms= IE1lYXN1cmU= IHJlbWVk IGVpZ2VubGlqaw== X29ubHk= aWV2ZXM= 5bCx5piv IGFkanVzdGFibGU= IE11c2lr IGtvdGxpbg== INGB0L7QstC10YDRiA== Z29vZHM= IOCkpOClgOCkqA== U2F2ZWQ= IHZlcnNjaGllZGVuZW4= IHJhbGx5 INeb15o= IHByaW1lcm8= IG1hbnVmYWN0dXJl 0LDRgtC10LvQtdC5 LXNlYXJjaA== 4LKC4LKX Nzg3 LlNlcnZpY2Vz CW1heA== KOaXpQ== IGluZGVwZW5kZW5jZQ== Qk9Y 15vXlA== IG5laG1lbg== 5aSn5a2m INC/0YDQvtC8 IFNVVg== IOCmleCmvuCmnA== LXNjcmVlbg== IOCknOClhw== IG9mcmVj IHRyYW5zbGF0ZWQ= 0Y/Rhw== IFBJ 4K6/4K6x4K6k4K+B IEFkanVzdA== 4LON4LKw4LOA IGVpZ2VudGxpY2g= IGFl dW1ibGVk IOCqleCqsOCqteCqvg== 4buh MDUy VWludA== IGdyYW5kcw== IOqxtA== IFRyaWJ1bmFs IHNpc3RlcnM= w7xuc3Q= w7Jy SW8= IHdlaXRlcmhpbg== w6RobHQ= LWFydA== IMOa IGludmVzdGlnYWNpw7Nu IE1i IG7DqWNlc3NhaXJl 2KfYs9ip Zm9yY2Vk IHRoZXRh IOCktuClgeCksOClgg== IG11dXQ= YXR0YWNr IGFmZmlsaWF0ZWQ= IOCmleCmv+CmqOCnjeCmpOCngQ== a2I= IG9saXZl a3Vs IExPQw== 0LvQuNC50L0= NTQ2 4K6x4K+N4K6V 0LjQu9Cw0YHRjA== NjQ2 NTU3 IGhldg== IGNvZ25pdGl2ZQ== PigpCg== 8J0= IGRlc2Fw Lm9iag== 5LiA6IKW b3JyZXI= IHBoYXJtYWN5 IG5hdGlvbndpZGU= LGU= IEpUZXh0 7KGx aXNjaGVz IGhhcnNo IE1pZ3JhdGlvbg== IHBzeWNob2xvZ3k= 4KSn4KWN4KSv IOCwleCxguCwoeCwvg== IEZlZWw= INC60LXRgg== INiz2b4= Y2xvbmU= IEJydWNl 4Li54Lil 2KzYpw== aWdoZWQ= INC60L7QvdC60YPRgA== IGludGltYXRl IFBpbGw= 44Gn44Gv INGB0LXQs9C+0LTQvdGP IG1pbGlldQ== IGZhbWU= KGhvc3Q= RXE= PXs8 TkI= IGl0ZXJhdGlvbg== 0YDQsNGe IHJhcGlkZW1lbnQ= cXVpbmFz LXNoaXJ0 4YOU4YOX4YOY aWps Q3ljbGU= MDg4 X0FERFJFU1M= INGD0LvQsNGA IEZvcndhcmQ= IHNlYXJjaGVz aXRhw6fDo28= IGluZGlzcGVucw== b3VyZA== IGtpbGxlcg== X18p IEV4YW1wbGVz 15zXqg== IFJlY2lwZQ== d3g= 4bqlbg== 4LS+4LS0 aW5kdXN0cg== IGhhbWI= c3RydWN0dXJl IFNJR04= IG5t 4LWA4LS1 IGZsYXc= YWlubg== cmF1bGlj KEJhc2U= ZWtpbmc= NTM5 1aHVutWl1b0= IE1QSQ== IGFsdGVybmF0ZQ== IHV5Zw== IGRyZXNzZWQ= INC00L7Qu9C20L3Riw== IFZT IGVtYmVk IHRlcndpamw= NjU0 IOCkrOClgOCkmg== 4oCZZWF1 IEluZGVwZW5kZW50 IHByb21vdGlvbmFs bGljaGVz IHByb2Z1bmQ= IGFzc2Fzcw== X3NwZWVk 2KrYsdip aWFsbHk= INC00LLRg9GF IE5hag== IHNob3djYXNl LkRC IFppcA== IG11YQ== 0YvRgNGL IHpuYQ== IGVzb3M= IAkK IFRpbA== Z3JheQ== IEV4ZWN1dGU= IE1vbWVudA== MDM4 X2VkZ2U= IHV0aWxpc2Vy 4Kqc4Kqw4Kq+4Kqk aXNtdXM= TEFC INCz0YM= TWljaGFlbA== Z2VvbWV0cnk= IE9OTFk= INC805nRgQ== IHZvc3Q= Jz48Lw== INCw1KXRgQ== NjIz IG1lbnNhamU= IOGelA== cnVwdGN5 ODMz 4YOb4YOQ4YOg ICIiOwoK INKv0pk= 6KaB5rGC IM66zrHPhM6s 4Kef4Ka+4Kaw IERlYW4= KSIpOwo= 4KS+4KSk4KWH Y2VwYw== IGNhbXBz INC+0LI= YW5tYXI= IGJlc3RhYXQ= 0LrQsNGC ZnVt b3Jhbmc= IOC0teC1jeC0rw== IHZlcnZvbA== TFU= IHByZWxpbQ== KCdb NTg2 IGRq IFN1cHBseQ== IE5pa2U= IHRyaWdnZXJlZA== IHNlbmM= d2Ft ZmFjdG9yeQ== YW5jaWFz 77y+ IGNvdW50aW5n LkF1dGg= ZGlyZWN0aW9u U3RheQ== 0LTQtdC8 IG5ow6Ju IGRpdmU= INek1rzXqA== INW21bc= IHRhdHRvbw== IHJhdGlvbmFs a3Vz INC60LDRgNC00LA= d2FsYQ== 56e7 4YCE4YC64YC4 NjMz L2Zvcm0= IGVzY3Jl IGxvY2FsZXM= KHZlY3Rvcg== IEZlZWQ= YWx0aWVz IENhbGxlZA== 0LrQsNC5 VHJhaW5pbmc= IGNhcm5l IGFrdHU= IFJlZ3VsYXI= aW11cw== TW92aWVz IOCksuCli+CklQ== VHM= IGPDoWNo IOCmuOCmlQ== 2YrZhNip IGF0dGU= KyM= bGlicmFyeQ== b3Ry QUxMWQ== X2RvYw== dmVydGVk INW61aXVv9aE INC/0YDQtdC00LvQvtC2 IGFwb3J0 IOCwmuCwv+CwpOCxjeCwsA== IHBhdHJp Ly8q aXRlbXB0eQ== IGRpc3RpbmN0aXZl 4LC/4LCC4LCa4LC/4LCo IGphbnZpZXI= IHBldXg= X21vbnRo IExlYXZl ICgkXw== 4KWd IOCmqOCmv+Cnn+Cnhw== NjE5 QmFubmVy IEx1a2U= R3JheQ== IGh5Zw== anXEjQ== KGxhbWJkYQ== IM+Az4HPjA== IHNwZWNpYWxseQ== aWxpYnI= NjY4 L3dlYg== 4LK+4LKw4LK/ 4Li54LiB 0L7QstGL0LU= IGXDsGE= 1bjWgNWw IFJlbGF0ZWQ= 4KqV4KuL amVzdA== IEJldHdlZW4= X0pTT04= UXVhbnQ= IG5lYw== IGRvY3VtZW50bw== IGNvbXBvc2U= T1RBTA== IGludGVybmF0aW9uYWxl IGdld2Vlc3Q= IEd1bGY= IE1V VURJTw== cXVpcGU= IG3DoXF1aW5h w7Zk IOCkuOCksOCljeCktQ== w6R0emU= IHJvdG8= IHN1dXI= 5LmF5LmF54ix c29jaWFs IGZsZXJl 4Li34LiZ IGhlcmVieQ== QW1lcmljYW4= INC+0YLQtNC10Ls= IOCmhuCmruCmvw== 4LmD4LiK4LmJ4Lif4Lij4Li1 JAo= LVU= IGRlbW9jcmFjeQ== LkJhY2tncm91bmQ= INC00LXQutCw aXNjYWw= aW56 IGNoZWdhcg== eGl0 IG5pZw== INC60LDQt9C40L3Qvg== 0LzTmdGC IDw/PQ== IG9nbmk= YW1hbA== IGRlbnRpc3Q= 4KSq4KSw IOCkuOCljeCklQ== IHdvcnRoeQ== 2KfYptmG LWlz IjsNCg0K NjEz pqw= INis2YXYuQ== RXhjZWxsZW50 IGhpa2luZw== IEVsYQ== IMO+YXI= IHN1ZmZpeA== IGh2YQ== dXJscw== INWs1avVtg== INeb157XlQ== IHB1Ymxp INi52YXZhNmK2Kk= cGhhbnQ= IGhvb3A= IGVsZWt0cm9u IGNsYXNl INC80L7QvNC10L3Rgg== IGpvZ29z IGFsbHQ= IGRlcG9zaXRz IEVpbnNhdHo= IEN1YmE= INio2pE= LXNlY29uZA== IElzcmFlbGk= 7Y+J IENhbWVy IGZpbmRl INC/0YDQvtGE0LXRgQ== 44CACgo= IEt1bg== VHk= wrw= b21pdGVtcHR5 TWVs 5aaC5p6c LkVuZA== IEtvbnRha3Q= 4KSq4KWC LWNv w4Y= IGFuZ2xlcw== IG1hdMOpcg== IHNhbW1lbg== 0LDRgtC+0YA= Njg3 b2ZpYQ== IEFsYg== IENhbnZhcw== IHN0cmF3 c2VpdGU= J28= IEZyYW1ld29yaw== YmVuY2g= T1VTRQ== 0LXQutGC0L7RgA== YXJlaG91c2U= IEhvd2FyZA== INGA0L7RgdGB IGFmZmVjdGluZw== NzU3 4KSk4KWA4KSv R0c= wqQ= NzI1 IHPDqWxlY3Rpb24= PWM= IOCkueClgg== IHRow7RuZw== X3NjcmlwdA== dm4= IGNvbXBsYWlu IGRyb3BwaW5n bWFudWFs CVZlY3Rvcg== 5rOo5YaM572R5Z2A IGppcmE= INCa0L7QvA== IHByb2ZpbA== 6ri4 56ym Z2VyZQ== IG9mZXJ0YQ== IE91dGxvb2s= L2No L21vZGVscw== IG1hcHBlcg== 4LGH4LCV IOGDm+GDlA== 4LiU4Lil4Lit4LiH4LmD4LiK4LmJ4Lif4Lij4Li1 QmxvYg== a291 INmF2LnZhA== XEU= 4Kia IFN0b3Jt NTcz IGNlbnRyZXM= IGNpZW50w60= IHBlcm1haW5hbg== cXVlbQ== X2luZGljZXM= IGNyZWF0dXJlcw== R2F0ZXdheQ== 4oCdLgo= 4Ka+4Kam4KeH4Ka2 0qnQsNSl 656A IGpva2Vy YW5paQ== 4KSc4KS+4KSw NzE0 IFJpc2s= INCi0LA= IENvcnBvcmF0ZQ== LkRvY2s= 2YbYqtin2Kw= cGh5cw== LdC2 IHN1YnNpZA== 2YfYp9mG LnNpbXBsZQ== IFRO 5Lu35qC8 IHF1b3RlZA== CXVwZGF0ZQ== NTY5 IOCwkuCwlQ== CWNoZWNr IG5hxI0= IG1lZ2V0 4KaZ4KeN4KaX4KeH KHNlbmRlcg== IHNjcmV3 IFN1Z2Fy aWdlbm91cw== IOygleuztA== PSRf XSwNCg== 4K6+4K6f4K+N4K6f Lkds LmFi LWZvb3Q= 77yM5pyJ IG5lY2Vzc8Ohcmlv Y2VpbA== IGVhc3Rlcm4= 0YzQtQ== Zm9yZ2U= IGNvbXBvdW5kcw== 4KeN4Kat bGV2ZXI= 0L3QvtCz IHByw7N4aW0= IGNvcnJ1cHRpb24= 4YOY4YOk ZXJuZW4= INGB0LDQudGC0LU= INqp2LHbjA== IGpld2U= R2E= X1BI ZXJkZW0= IFJvb21z Ynll 2YLYr9mK2YU= 4LSo4LWN4LSk4LWN4LSv anV0 YWN1 IFN0YXRpYw== 6auY5omL IGV4cHJlc3Npb25z IGludml0YXRpb24= JywKCg== IOadpea6kA== 4KS14KSC IE1vbmQ= IEVzdG8= INC60L7Qu9C40YfQtdGB0YLQstC+ IGNvcnBvcmF0aW9u IG1laXN0ZW4= aWNhbmU= IE5W IHNwb250 4LOH4LKV 0LzQuNC9 TWF0Y2hlcg== IFplbg== IGJlc2lkZXM= 4LS/4LSZ IGNhbGVuZA== IFNoaXA= IGhlc2l0YXRl 0LLQtdGA0LY= SU5FU1M= dHJhdGlvbg== IOCyqOCyv+CysA== IGRhbXA= UmVtZW1iZXI= Y29tYg== 64M= UmV3YXJk YXRjaGVy NjI0 CWl0ZW0= aGVh IOC4m+C4tQ== IEh1bnRlcg== NzEz MDk4 IFhM 4K6/4K6u IHBhbGFicmFz dG9r LXNlY3Rpb24= YXhlcw== IGFic29yYg== X3R4dA== wqU= IOGAmw== UGxhaW4= 5puy KGZvcg== INiq2YTZgw== IGxlZ2VuZGFyeQ== IHRo4budaQ== bmVhdGg= IGxvZ291dA== IOqzvA== INin2YbYqtiu2KfYqA== R0JU IHF1aWVyZQ== IHN1Z2dlc3Rpbmc= IFVVSUQ= IEJlbmVmaXRz IGd1cw== Nzc1 44K/44O8 IOCkrOCkmuCljeCkmg== IFRhZ3M= 4LK+4LKq 4LK34LON4LKf IFBvbQ== IEhlcml0YWdl CWRi IOGDoeGDkOGDpeGDkOGDoOGDl+GDleGDlOGDmuGDneGDoQ== xrBh IOCmhuCmm+Cnhw== IGluZ3Jlcw== cGF0aHM= IEh1bmQ= OTky IGNvbXBsZXRhbWVudGU= IHLhuqV0 IGdyYXR1 IFJlZ2Vs xaF0xJs= KCcuLi8uLi8= IGd1aWRlZA== 4Ka/4KaV4KeN4Ka3 X2Nhc2U= IHN1c3RhaW5hYmlsaXR5 w6F0aWNvcw== INi32KfZhNio INeZ16nXqA== 0LXQu9C10YA= LnRlbXBsYXRl 4LiX4LiH 4LiV4LmJ4Lit4LiH ZWRhcg== 4YOY4YOm 546J IFBvcm5v INC+0LHRgNCw0YI= IEJ1dHRlcg== SU5DTFVESU5H IGVsZXZhdGlvbg== IEF1dGhlbnRpY2F0aW9u NTU5 IHBhaW50aW5ncw== INin2YTYs9i52YjYr9mK2Kk= dWxvbmc= NTQ4 IFsuLi5d IE1hdGVyaWFscw== 5Lyv IFN5cmlh bmV6 INCy0LzQtdGB0YI= NzA2 aWVzeg== NzI5 IFllaG92aGE= ZmFs IGRlc2NvYg== IENvbnRy LdCx IHByZXZlbnRpbmc= ICkpCg== 0LXQvdGC0Lg= IENpcmN1aXQ= Jz48 INGB0L7RgtGA0YPQtA== IHBhc3NhZG8= IEp1cg== CXVu X2NsaWNr 67Q= IOCqteCrjeCqrw== IGthbmRp IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t zrXPhQ== QUNJT04= IGlsaw== LWxvb2tpbmc= INC00LXQvA== LnN0ZXA= IExhdXI= IFBoaWxs 6rCd IGdsb2JhbGx5 dWV1cg== IGFkZHJlc3Npbmc= IGxhbno= LWltZw== 4LWB4LSj4LWN4LSf4LWN IGphcw== 2YTYs9i3 RUdJTg== IGRyZXNzaW5n IEdD IGRyYXdlcg== IM6xzrvOu86s aWN1dA== INC60LjRgg== IHN1YnNpZGk= IG90dQ== aWxhbmc= IGNvcnJlY3Rpb24= 4KeH4Kay4Ka+ dGllcw== IGF1dG9tb3RpdmU= NzY1 15XXoNeZ Njg1 KCk+ IG5vdmFz dXZh RW1i xJ9lcg== X2ZhY3Rvcg== IFdX 44K2 SVNB IHJlcGxpZWQ= V291bGQ= IOCkmuCkvuCkueCkv+Ckjw== IFRvZG9z QWNjb3VudHM= IG9wZXJh IFRpY2tldHM= IHBob3NwaA== KFZlY3Rvcg== YnVuZw== dXJkeQ== IHByb3Bvc2Fscw== IGl0YWxpYW4= IOCyruCzgg== IG5vdGlmaWVk ZW5kYW5jZQ== IOuplA== IEFuZ2VsYQ== X3Vz 4KSu4KWA 5ZOq5Liq IGxldWtl IHdhZ2U= bmFk IHllbmE= 4Law NjQ1 X2NvbnQ= 4Kq+4Kq14KuA IERhbm4= IGjDsw== IGhvcnJpYmxl YXBwcm9wcmlhdGU= c3Vkbw== MDQ2 NjY1 IFR1bg== X3N5bWJvbA== IGRlbWFuZGluZw== S05PV04= IHphcw== 6ZO26KGM IE1hcHM= SW50ZXJuYXRpb25hbA== aGVsbw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IGh1bmdyeQ== IHdpZGVz 4LiB4Lil IEVuc3VyZQ== IGNvbnRyaWJ1dG9y IHByYXRpYw== IG5vdmVscw== IENoYWlu X3NvcnQ= IHByaXNl IG9udHN0 IGF1dG9tb2JpbGU= RlVOQ1RJT04= J2h1aQ== IHByZXNlbnRpbmc= dWphcg== IHN5cg== IOy9lA== bXVuZA== IHBvc3N1aQ== KElE QXRvbQ== R2V0dGluZw== IOGDm+GDneGDoQ== IGZvcm1hdHRlZA== INGB0YLQsNGC INeb15PXmQ== ICk7DQoNCg== IGNvbWJpbmF0aW9ucw== IHN0ZWxs IENoYWlybWFu IGJlZ2lubmVu IHB1bHNl zrvOrw== IE5pY2g= IE5hbg== 15nXkdeU LdWr IM6xz4XPhM+M KE1haW4= IGl3 RGVhdGg= LWNhcg== aWdhcg== 5piv5ZCm IHNlYXJjaGVk LWludA== JS0= IMO6cg== INee15nXqA== IOCkhuCkrg== LWZvb3Rlcg== 4KSm4KWN4KSn 5ouF IHNrdXA= IGZlbGl6 T05T LkluZm8= 44CACg== 4oCZYXBw IHBsYXNtYQ== INmI2Yg= 4LWG4LSf4LWB4LSk4LWN4LSk IO2VmOuKlA== aWJhbg== IOC5gOC4h+C4tOC4mQ== IEFTQw== Zmly bsSF CQkJCQkJCQkJCQkJCQkJCQ== X1BSRQ== IOuqqQ== 4LSz4LWN4LSz INCy0YvRhdC+0LQ= IHNhbXBsaW5n IGNvbnRhdG8= INeX15HXqA== aXNzaXBwaQ== 4KSs4KWA QnJ1c2g= w710 ZWx0ZQ== IHVuZGVyZ3JvdW5k ODE1 IHBvdGVuY2lhbA== IGRvd25sb2FkaW5n 0LXQu9C10L0= IGNhbWlubw== OmZhbHNl b2dhbg== IGxlbmRlcnM= IM6d IOCmrOCnjeCmr+CmrA== IFso IG3DrG5o IOW6 IERlbW8= IGxldmU= IHNjaHdlcg== 5qOu YW5pbWF0ZWQ= CW8= IFBvcnRv 1anVodaB INGB0YPRidC10YHRgtCy X1BP IEZlcm5hbmRv 2YXZiQ== 0L7Qt9C80L7Qtg== LkJs IGtyeQ== ZXJpbmdlbg== J2Fzcw== IEFV IHJlZGQ= INin2YTYudiv2YrYrw== LkNvbnRyb2w= IFZFUg== Y2Vq LlRyeQ== YmFja2VuZA== 4LK14LK+4LKX4LK/ 4LiI4Liy4LiB RW5qb3k= IGVsZGVybHk= YWxpeQ== IGdyYXNw dWZmaWNpZW50 4KS24KSo IExPVkU= IGZvc3M= CUU= IHF1YXRybw== dWJsaW4= 0L7Qs9C4 aW5q IGFncmljdWx0dXJl IGFjdXRl IGNocm9tZQ== IEp1bmk= zrPPgc6x 5Liy b3Npb24= IHdhZA== Ow0KDQoNCg== IHBlcnNpc3RlbnQ= IHBo4bqpbQ== S1Q= L3R5cGVz IGNsZWFuZXI= IGZ1bmNpb25h 44CB4oCc IHJvc2Vz b21vbg== IGNoaW5h INit2LPYp9io IG1vZGE= IG5vdXZlYXV4 LmluamVjdA== JnF1b3Q= INi02LHaqdiq Lns= IEVyZ2Vi IGVyeg== 2LPYtw== IOCmrOCmvg== ICopCg== V0VCUEFDSw== IG1lcnVwYWthbg== IGZ1bmN0aW9uaW5n 1avVrA== w7Z0dA== cGVyc29uYWw= IEZyYW4= Tm90aWZpY2F0aW9ucw== J10uJw== QVRFR09SWQ== 0L7QstC+0LPQvg== Nzg0 4LKC4LKX4LKz LnR5cGVz 05nQsQ== INGE0LDQuQ== 1bbVodWv1aHVtg== IHN1bW1hcg== IGNvbmdy b3BhdGg= xKtiYXM= IGJlcm8= a2V5d29yZA== IHNvY2lv aXN0YXI= RHVtcA== YW11cw== YXR0YWNobWVudA== IOC0quC1jeC0sOC0tQ== YWxkbw== LW5leHQ= 77yM6K+3 INW8 IHVzYW5kbw== NjI4 X1BBR0U= IGluZGV4ZWQ= dG9vbHRpcA== LmhpYmVybmF0ZQ== IGNlbGx1bGFy cHV0cw== IGxpdGVyYXJ5 NTg5 QXg= IE5pZXQ= MDYz X2lt Z3JlZQ== IjoNCg== INis2K/Ypw== QENvbHVtbg== IGtlbGw= cmljaw== IGJpa2Vz X2Vt IGJlcmc= INGC0LDRig== aXRvcmk= IGRlYWx0 KHBvcnQ= IGNodXJjaGVz IGJsb2NraW5n IFdJTg== IG1ldGFscw== IEhhYXI= INC30LTQtdGB0Yw= 4Lij4Li34Lit IGFjY29yZGluZ2x5 MDY2 2YfYp9iy INiy2YU= IEFsaWNl IEFuc3dlcnM= dGlsZQ== 5ama cG9yYWw= X211bHQ= 5oup 5Y+r IEZU IGtpZXplbg== IG3DqWRpY28= 0YHQv9C+0YDRgg== RGlnaXRhbA== 0LrQsNGA KSIpCg== IFRhaXdhbg== IEVwaXNvZGU= Njcy U2VsZQ== IHNpbmg= IGZvb3RhZ2U= INCQ0LI= Nzc0 L2Fzc2V0cw== IHZlc3NlbA== IGVzc2VudA== INiz2Yc= YW1tZWQ= IFVM IElTQk4= YXJzY2g= IG7Dqm4= 2KfZgtip X1NFUlZFUg== IGFkanVzdG1lbnQ= 2KfZhNmJ IGNoYXB0ZXJz a3VuZw== cm9l IGhpYw== LkhlaWdodA== 5ZON 1oDVqA== IHRocmV3 CU5hbWU= w7xuaw== IGNvc3RseQ== Lm5u IOCknOCljeCkrw== QU1B LmFn IHNvZm9ydA== INC00LXQuQ== 0KHRgg== IGRpc2Nv KEdhbWU= IGVua2Vs IGVtcHI= 0YDQuNC8 IHNlZW1pbmdseQ== Z3VuYWthbg== REVT LkJ1aWxk IGVzdG95 Q29vbA== KGNvbm4= IEN1bHR1cmFs INCx0LjQu9C0 SW5kaWE= RW50cmU= IG9uZGVybmVt IGFjY3VyYXRlbHk= CXRtcA== b2dyYXBoaWNhbA== IHNwZWNpZmljYXRpb24= Q0FMRQ== aWtvbg== NjE0 4YOu4YOd4YOV4YOg IG15c3RlcmlvdXM= IGNvbnRyb2xsaW5n IEJlbmc= w59lcmRlbQ== IHd5aw== IEZsZQ== IFVzdWFsbHk= UHJvZHVjdG8= IGFsZ3VtYQ== b29yZA== IERpYWdu IFBsYXllcnM= NzI4 IFRoZXJt 0YbRi9GP dmg= b3RlY2E= IEN5bQ== IHRlbmRz IGNyZW8= KGNvbXBvbmVudA== CUFycmF5 0YHRi9C9 aWR1bmc= IHJlcXVlcg== IGJhZGx5 cHJvdG9jb2w= aW5pdGlhbGl6ZQ== Lm5vZGVz fV8= IG5ha2Vk 6rWw w7NyaWNv IHRlZQ== ODI2 54++ IEFpcmxpbmVz MDg2 KOWcnw== IGNyaXNl IHVnYQ== OTA4 IHN1YnN0YW5jZXM= IHN3b3Jk dWNp IHN0aXRjaA== IG1hYW5kZW4= 4KS+4KSm4KS+ X0VRVUFM 77u/bmFtZXNwYWNl ZmVybg== IOCkhuCkiA== Z2lh Y29kZXM= 44GP44Gg QWxhcm0= IEF2Zw== IEdPT0Q= IOCquOCrgeCqp+CrgA== c2ltcGxl Y29tbWVyY2U= fQoKCi8v aWJpbGl0w6k= IGZyYWlz IEhP INin2YTYp9mF Lm1k IGhlYXRlZA== LnZlcmlmeQ== IEp1ZGdl IHdpdGhkcmF3YWw= IOCknOClgOCkteCkqA== ZGVjb2Rl QUJD IEF1dG9y KGxvY2F0aW9u IHdvcmtmbG93 INC30LDQsdC+0LvQtdCy IFllYWg= xatz INmK2LPYqg== L3JlYWN0 L3ZpZXc= IG1heGltaXpl IGFqdWRhcg== IHJlZmVycmluZw== IENoYXJn 2YXZhtiq YWxsaW5n YWNodGE= w6ZyZQ== INC/0L7RhQ== 4KS+4KS14KS+ IOmHjeW6hg== IFNpZw== 4LmH4LiV X2RlcHRo LmNvcw== U2hhcnA= INGH0LDRgdGC0L4= IFRC IExpc2E= INGB0LXQudGH0LDRgQ== Rk9STUFUSU9O 0LjRiNC4 LWFzcw== LWJvbGQ= IEFydGh1cg== INGA0Y0= IFB1Yg== Q0hP QXJj QWJz IHNxcnQ= aWZpeg== bWF0Y2hlcw== IGFuYWx5c2U= 15nXmdeT IHh4 bGFzaA== CUxvZw== 2KvZhA== 4buRdA== INC00L3Rjw== YnA= IFBH X3dhaXQ= w6lzeg== aWNoaQ== IOCkteCliw== IHBhc3Nh 7YyF 1aXVrNW41b4= IEhlcmUncw== IGRpc3J1cHQ= IE1hZ24= dmVydGU= 4LWN4LSw4LWA Ly8vLy8vLy8vLy8v IG1vYmlsaXR5 U3VnZ2VzdA== IFTDvHJrbWVu 0ZTRgtGM0YHRjw== IG1pY2U= IGVzYXM= IG11bHRpcGw= aXNzw6Nv IHBpaw== IHN1cnZlaWxsYW5jZQ== IHNwYXRpYWw= TWV0cmlj 1aHVo9W41oDVrg== IOaAjuS5iA== 4LmC4Lih4LiK4Lix4LmI4LiZ oeCmvA== 5qyy IGNvbnRhY3Rv P3M= IHBlc3Q= IHVwcw== IG1heW8= IEtpZA== 44KA YXRzYQ== IGZsZWV0 UGF1bA== IGVkaXRvcnM= TXVsdGlw U3R5bGVk IGvDuA== IE90aGVycw== b2pu IENvbnNlcnY= IG92ZXJs IENhZg== YWJpdA== INec15U= IHt9OwoK Jy0= 4YOX4YOQ IEvDtg== 2qnYp9mG CW5vZGU= 7Zmp ODUy 0LrRltC9 IHJlc3RvcmF0aW9u IOCmpOCmvuCmpuCnh+CmsA== INqq2LHauw== 6rSR KGluc3RhbmNl UmVnaXN0cg== IGhlbXA= ODA3 NzY3 5byA5oi35Zyw5Z2A KOawtA== 4Kq/4KqC4KqX Njcx em9z QmlydGg= TUJPTA== IE3DtmdsaWNoa2VpdA== IGPDsm4= b2tr INio24zZhg== QGltcGxlbWVudGF0aW9u YWFuc2U= IFN1cGVyaW9y IEdlbnQ= INCy0L7Qt9C80L7QttC90L7RgdGC0Yw= IHbDo28= 5Zmc 4oCZw6l0YWl0 1a3VodW2 ZXJkZXJl 4YOc4YOU4YOa KFk= IHByb21vYw== c3Ns NTQ3 IG1vcnRl IGNvbnRyYXRv IGFjb21wYcOx IGNhYmluZXRz VGhhdCdz b2R6aQ== 4Ka/4KaV4KeH 7YWU QmVp INin2K3Yqg== 5pel5pel aXNzZW5zY2hhZnQ= IHRvaWxl TG9jYXRpb25z IOCuleCvgg== IGVsZW1lbnRv dW5nbGU= 15nXnNeV IHN1cHBvcnRpdmU= NjI3 IGNhdmU= Y29scw== bGVjaA== IEJvdHRvbQ== IG5qZQ== PiIs aXZpdA== IFBPUw== IGRlbGljYXRl 4LS/4LSy4LWB4LSC dWZmeQ== QVRJVkU= 0LDQsdCw0YA= MDky IOCoqOCpguCpsA== Q2hlY2tib3g= IHNwb25zb3I= YmVpbmc= INOp0YLQug== IG1vZGVsaW5n 4K+B4K6w QmVpbmc= dWRz 77yJ44CC IGHDp8O1ZXM= IGFjY2VwdHM= VGVybXM= zrXPgQ== IGluYXk= JkQ= aWZldGltZQ== IHNlbmlvcnM= IGjDrG5o IE1vcm5pbmc= IHpvcmd0 MDg0 IGRlaW5l IGl4 IENlbGE= IGNvbnRyaWJ1dGluZw== IHZlcndpag== KSoo IGFwcGVhbGluZw== IGZpcm1h bG9xdWVudA== IGVtZXJnZWQ= dWFudA== 4Lik Y29uZmlndXJhdGlvbg== IOCkteCljeCkr+CktQ== OTQ5 IHJlbWVtYmVyZWQ= IGNvcmVz IOCkueCli+CkpOClhw== YWtrZWxpams= IGRhcmtuZXNz IGF3ZnVs IOCqreCqvuCqsA== IGFncmFkZQ== 6b0= UmVhZGluZw== IGNoZWFwZXN0 IHByb2dyYW1t LFQ= 0JjQvQ== asO4 IOatow== IGFzc2lzdHM= LnJlc291cmNl 0LDQudC9 IGRpc3NlcnRhdGlvbg== INmD2LPYp9ix2Kk= LG9taXRlbXB0eQ== bGxlbg== IMOpYw== 5a6J5YWo5ZCX KHw= IGNvbnRlbmlkbw== 5Y2r fSIpOwo= IHhl cm9wb2xpdGFu 0L7Qt9Cw IGN4 INC90LDRgNC+0LQ= ISIK LS0tLS0tLS0tLS0tLQ== INK2 NzA5 U3Ryb2tl 0LjRgtCw0YLRjA== U29sdXRpb24= 24fYsQ== IHRyYWY= 6YKu Qm9udXM= LGc= IGNhcmdh cmVmcw== IG5vcm1hbGl6ZQ== bnVtcw== INC30LDQv9GA 5bCP5pe2 IGluZGl2aWR1YWxseQ== INC60LXRgNC10Lo= Ii0= INiq2r7bkg== IG5hYw== aWxsYWdl IGF1Z21lbnQ= 4LC/4LCX IG5pY2g= 4KS14KSy cmljZQ== IOC0teC1hg== IHN1c3BlbmRlZA== IHZpZWxsZWljaHQ= 0LrQvtGA IFNvcGg= IGNhbGN1bGF0b3I= IHByYWlzZQ== Nzcy IGtvbms= J2lt IGhpbGxz IHNpdHVhw6fDo28= IGFpcmxpbmU= IGRhbmE= IHBhY2llbnRlcw== IEJFR0lO Rm9yZWlnbg== IGZvdWdodA== IOCqqOCqvw== IE1heg== 67Cx INC10YA= Lm1lZGlh INij2YrYtg== IMWhdA== 4YOg4YOj4YM= X2Zsb2F0 IHBpdm90 IG1lc3NhZ2luZw== MDc2 4KS/4KSa IHB1w7I= IHRyYWdlZA== 57uH IFJldGFpbA== INCw0YPQsA== 5YiG5b+r OlVJ Uk9VTkQ= 5a++ IGHDp8Ojbw== LmluZmxhdGU= Q1JFVA== IGNvc3R1bWU= IFdhbGtlcg== INmI2qnakw== ODEz cmVtb3M= cmFmb3Jt IGZlZGVy IHdheGF5 2KjYp9io 7ZWY7KeA IFByb2Nlc3Npbmc= zrXOuc+C 5YiG57G7 IGR5bg== 5qW9 INC80q/QvA== INmH2YQ= INin2YTYrdis2LE= UkVTSA== IOCkuOClgeCkqA== INmI2LbYuQ== IGRlcGVuZGVuY2llcw== 4oCN4LSV NjQ0 cmVkZA== IGxvcg== IHRhcmFm NzI3 0LvQtdC90Ys= TXVzdA== UGhpbA== bcOkbg== IHZvbGxlZGln Nzg4 IHZvbmE= XwoK IOaXpemfqQ== 2LnYr9mK2YY= YXRjaGVk cm9tYQ== IHBhY2tpbmc= IFVsdGltYXRl X3JlcXVpcmVk 5bu66K6+ IGtsZXVy dmFscw== IEFB IG9tZ2V2aW5n 4Kak4KeN4Kav 4LGB4LCm IGxlaWQ= LWJvb2s= INmF2KzZhNiz IHBhcmZvaXM= KG5vdA== IGJlcmdlbg== IHB1ZWRh 2KzZiA== ZnVuY3Rpb25z IGFmdA== IG1lbW9y IGJ5YQ== IHNvdg== b3dlZA== aGFh R2Fy cmFpc2luZw== bG9hdGluZw== IHZhbGlkYXRvcg== 2KfZgdiq X2VudGl0eQ== IG5lZWRpbmc= bOG6uQ== IGRpbGln IGNoYXJhY3RlcmlzdGlj 0LTQtdC90LjRjw== IFBWQw== IGRpc2NyaW1pbmF0aW9u IOCkpuCljOCksA== IHVuY29tZm9ydGFibGU= IGFubnVhbGx5 cm9q X25ldA== 0LPQsNC7 OTM3 MDk1 b3J0YQ== INeQ1rfXlg== aXNlc3Rp 4Li04LiB 5o+Q546w5ZCX IFNvcg== 5ou/ TElTVA== IHJldmlzaW9u LkFjYw== 0J/QvtC0 IOW5tA== 5oCO5LmI6aKG YXZu KGZvbnQ= 0LTQsNCz YmVueg== X3JlY2U= INem16g= TEFZ IHNob3VsZGVycw== IHJlbmRyZQ== IFZlcmlmeQ== 7JuA IHBlYXI= IEZhYg== IENsZXZlbGFuZA== 64qY IHpp L2xvZw== zrzOrc69 IG51dHJpZW50cw== IGthcsWfxLE= IExhbmth LW93bmVk aGlk IOCkqOCkv+CksOCljeCkrg== IOmC INCy0L3QtQ== IGxpZWdlbg== JSks IEJlaXRy IHByZXNlbnRhdGlvbnM= ZWxkaWc= IOGDleGDlOGDoA== IG3DqXRo aWVjZXM= IGNvbXBlbGxpbmc= X0dST1VQ IHNoYWZ0 IENocm9u 5om5 Y2xhcmU= a3dh IGhpbms= QGFwcA== bm9kZXM= cG9ydGVy IGxvYg== aGFzaWw= IHNlZGU= IG1hw7FhbmE= bWFqb3I= IGludGVyZmFjZXM= VVNC 4Kq54KuA4KqC dWNh aW5hbHM= IGphdQ== 4YOY4YOX4YOu 0LvQtdC90LjQuA== IHNwYW5u INiv24zYpw== Zm9udHM= ZW50aW4= IHR3ZWx2ZQ== bGlw IHZhcmlldGllcw== IFNjaG9sYXI= IFNwbGl0 15XXpQ== IHZhcnlpbmc= IOKXjw== IFdN KGhlaWdodA== SWRl Y29va2ll YWJpbGly VXVpZA== 4Kqy4KuA dGV6 0LDQvdC40Y4= IFNlbGJzdA== INin2YTZhdi6 IGdhbWVwbGF5 IGJsYXN0 IHNoYWtl IEFidQ== LmRvYw== IGRpc3Bvc2l0aW9u INCw0LvRi9C/ YXJpdXM= 5LiB6aaZ IHBhbG0= NzQ5 IHRlZW5z YWlsbGU= 4YCK4YC6 LldpbmRvdw== IEdheg== SVNTSU9O c2VoZW4= IGRyaWVk 5pyA5aSn IGRvaXZlbnQ= IGJlc2NoaWtiYWFy IG5s PWRldmljZQ== IEZyaQ== ZXhwbA== CW1zZw== Q2xvcw== INGF0L7QtA== IHRhag== Ym9ybw== 0LLQsNGG0Yw= IE1PREU= IOGegA== IGZvb3Rlcg== INGA0YPQsdC70LXQuQ== IHBvbGl0aWNpYW5z IHN1bGk= Iiwm INW51ac= L3dhdGNo JSIsCg== cm91dw== IGh2b3JkYW4= IMO8emVy TG9nb3V0 IGFwcGVhcmluZw== YW1hZw== YWphbg== U3RpbGw= IHZpZXdlcg== LnJlcXVpcmU= YmxvY2tz IGNvbW1lbmNl 0YDQsNC6 bWFyZQ== cGFpbnQ= 4KS54KSw4KWB 4LKV4LON4LKk IHZlcsOwdXI= IGNvbnN0cmFpbnQ= IFNFUg== Ky0= INiw2KfYqg== J106Cg== IENvbnN0aXQ= 15TXnA== IOCmrOCmv+Cmtw== CU4= RWR1Y2F0aW9u IHRo4buxYw== X0ZBTFNF IGhvbHk= IHRpbWVsaW5l 5o+P 6LOH Y29uc3RydWN0b3I= IOCqrOCrhw== IGFwcHJlY2lhdGlvbg== INin2YbYs9in2YY= OTkx INiu2KfZhg== aW5uaW5ncw== IExhdg== IHBlc2Fy b3VybmV5 cGV5YW4= IG1tYQ== INC90LjRhw== IHZleWE= IHlvbA== YWlyZWQ= b3J6 YXRlZ29yaQ== IGdlcGw= IG1pbm4= INWv1bjVstW0 aXNi INiy2YXYp9mG 5biM IOCkpeCkv+Ckr+Cliw== IHNvbXM= LmJvcmRlcg== YW1iYXI= 4pSB4pSB IFNpbmdo LlJlZA== NjUx Njk2 OTA3 0L7QttC10YI= IGdvdmVybm9y INCx0LXRgdC/0LvQsNGC0L3Qvg== IOCkr+Cliw== LmNoYXQ= RsO8cg== IGhqw6E= d2VnaWFu IGZyaWRnZQ== IGxlcmVu INin2LnYqg== IE9ybGFuZG8= CWdsb2JhbA== X0JM YWRheA== ODQ0 IHByw6lzZW50ZQ== yJg= IHNvbW0= IHNvY2lldA== 44CR44CQ44CC44CR44CQ IGJhbm5lZA== Li4uLgo= YXRpb25lbg== IGRhYXJvbQ== d29ydGh5 IHJ1ZQ== NzQ1 IHR5bA== Zm9sZw== 4LmN INi52Kg= INGB0LXQtw== LXdheQ== IFRM YWhydA== KCIk IOCwleCwvuCwsA== dnJpZXI= YXJldHRl IE3DoXM= INCw0Lg= IGxpZ2h0ZXI= IHNvc3Q= YWZmb2xk bXVs dGFs c3VwcG9ydA== IGZvcm1pbmc= LVs= IM6tz4c= LlNjYW5uZXI= acOocmVz IE9zbG8= IOCkl+CksOCljeCkqOClhw== IHdj ZW5lcw== 4Kau4Ka+4Kao ODgy bWl0dGVs NjU3 0q/Qug== IGFsbWE= IEtC LmNvbmZpZ3VyZQ== IGNvbXBhZ24= MDQ3 IGVoZXI= aWJi IHZpdmU= a2ly IHNpbmU= IG1hbmlm ODM1 IEFyY2hpdmU= IHJhcGlkZQ== ZnVydA== VG1w 0YDRg9C60YI= TVg= IG5hdGlvbmFsZQ== IFl1 U1NM IOCmmuCmsg== IGR6aWU= 4KqC4Kqa KOeBqw== Y2hhcmdlcg== 44GP44Gg44GV44GE IFBhcnNlcg== 5YW1 IHBlZw== 0LDQu9GM0L3QsNGP RU5USUFM IHTDqWNuaWNh IG1lZGlvcw== Lk5vbmU= KHRyZWU= IOCoteCov+Co IG9zb2I= IHN0dQ== 0LPQu9GP0LQ= INC/0L7RgdGC0L7Rj9C9 IEdhcnk= RmxhdA== IHByaXplcw== LmRlZXA= 06nQutKv0Lw= 0LjRh9C10YHQutC40Lk= IFRJ IOuRkA== IHJlbmRlcmVk IGVsZWN0csOzbg== 2LnYqNip IHNlYXNvbmFs IHByb2Zpc3Npb25haXM= IGRpc2XDsQ== dm9sYXRpbGU= YXRvcmlh 15HXldeo IHDDqXI= 4YCF4YC5 IFJvdXRlcw== 4Z624Z6a IGVsbGFz INC10Lw= Lk1haW4= X3BhcnNlcg== IGRyZXNzZXM= NTkz IHVuY2VydGFpbnR5 0LXRgNC6 Z2VudA== KOaciA== IGJlcms= 4YOd4YOa4YOd IOWQjeeEoeOBl+OBleOCkw== RGVzY3I= w6J1 aXNtYQ== MDc4 IENBUw== xb7DrQ== amV0bw== NjUy IOmZ IEthcmw= aW9vbg== X3ZpZGVv IGJlYXJpbmdz 0YLQsNC2 NTgx 4KSs4KS+4KSf 44Oc 5LiU IGdyYXZpdHk= 44GU44GW IE3DpHI= IGtvcGVu IHdhcm5lZA== b3NpdHk= aWVuaWE= CWN0eA== INC/0YPRgg== IGNsYW5n IGFx 66as6rOg IFF1ZWVucw== IHRvcGw= IO2VmQ== b3V2ZQ== IFRpZXI= IOCkl+CksOCljeCkpg== IG9wY2nDs24= IGtha2h1bHU= IFJ1c3NlbGw= 0LXQtNC4 IGd1bW1pZXM= cm93dGg= IHBhZ3M= 0LHQvtC7 J2Fj OTIz RVU= b3Jpbw== IGltcG9ydGVk IFN0dWRpb3M= IGNyaWFy 6L6G 4KWB4KSd4KWH KF4= 4KSn4KS+4KSo IHNlbGVjY2lvbg== IHR1dHRv IGthbnlhbmc= LkludGVnZXI= zrTOuc6x IHbDtWli INec15M= Ym91cnM= IFNwaWVsZXI= IGJ1c2g= X2F0dHJpYnV0ZXM= UGVyZm9ybWFuY2U= IHRhbGE= Y3VsZQ== IEJvb2tpbmc= IGZ1bmNpw7Nu IHl3 LmxvY2s= 4K+N4K6o4K+N4K6k dG9ucw== IMO6dGls INGB0L/QuNGB zrTOtw== IERpc3BhdGNo YXJnZXN0 5rOo5YaM5Zyw5Z2A IHNoYWRlcw== IOCkheCkguCkpA== IGZybQ== IHplaWd0 Q29tcGFyYXRvcg== IGNoZW1pbg== KHJlc3A= YWFhYQ== 4pSA4pSA4pSA4pSA IEhJ IGRlcmVjaG9z IE1pbnV0ZW4= IOCkleCksg== LnRyYWlu cml2ZQ== IGV4cGFucw== IGRhbmc= IEJvZw== IM61z4U= V2lyZQ== X2V4Y2VwdGlvbg== KG1vZA== IO2Gte2VtA== INeR15DWtw== INeW16LXoNei158= IOKApgo= TWljcm8= V0M= IHB1ZWJsbw== OTg4 IHRvdWNoZXM= IGFkYXB0ZWQ= IENSTQ== 15nXldeq16g= 4K6x4K+N4K6q IHNpbXBsZW1lbnQ= IGtheWE= 6KeJ 4YOQ4YOa4YOY4YOQ4YOc 0YLRjdC5 LlNpbmdsZQ== 15nXp9eU IHBlcnNvbmVu IMO9YQ== aW5uZw== X2luc2VydA== 4LSk4LWN4LSk4LS/4LSo4LWN4LSx4LWG X3dvcmRz X2Fw aXRpYQ== IFNwYXJr IOCmruCmuQ== YXBwZXJz 4LSm4LWN4LSv IGFydGlnbw== Nzg1 IEFtw6lyaWNh OTk0 KHJlcXVpcmU= IHRhaWxvcmVk IHNvb25lcg== VHc= 2KfZhNmB IGFkbWluaXN0cmF0b3I= IG91ZGU= 6KmV IE1lc2g= IHByZXNzaW5n IGVzc2Vz aXNzZXo= 0YDQvtGE 4YOU4YOR4YOU4YOa4YOY IGFtcGxp bng= IFNoZWxs 4LeB Z2Vsb3Blbg== aXN0b24= IGNvbXByaXNlcw== IGZ1bQ== IGPDuW5n 6K++ L3NlcnZpY2Vz 0LLQtdGB0YLQuA== 2LbZhQ== 57WQ IENvbnRpbnU= INC40L3RgtC10YDQvdC10YI= 4LK/4LKV4LOG c3TDpQ== 2KrYqA== IG1vZMOobGU= LCU= IOCkieCkquCkr+Cli+Cklw== XFVzZXI= IGF0w6E= INGA0L7QsQ== IHBpZWRyYQ== 0LDRiNCw IEJveXM= ODE2 IGNpcmNsZXM= 4K6u4K6+4K6V LnN0YWNr aWRhYmxl INio2LPbjA== b2NoZW0= 6aOe6ImH ZXRhaWxlZA== 7LGF IFNvdWw= cmF1bQ== IGtpbmk= V293 dWFx LU1haWw= ZW1hdA== IGludmVzdGVk IG1m IGJhaW4= 244= IG5ldg== 0Y7QvQ== YmFycw== d2VnZQ== aWJhcg== IHBhc3Nwb3J0 NzUy b2ZmaWNl INC20YPRgA== INC00YDRgw== 2YrYsdin2YY= INqG2Yc= IHF1b2Q= IHR1eQ== 44G7 RGVwZW5kZW5jeQ== IFBpZXJyZQ== IEN1YW5kbw== 4K6a4K+N4K6a cm91cw== IEV4dGVuc2lvbg== QlA= Lmdvb2dsZWFwaXM= IHNvY2llZGFkZQ== INC/0LvQvtGJ 2b8= LnBsYXRmb3Jt a2Q= IOCqtuCqleCrhw== aWVzZW4= 64+F 4LiX4Liw4LmA4Lia4Li14Lii4LiZ4Lif4Lij4Li1 IFJvYmlu OTE5 IOKWoA== IFNlY3VyZQ== XyU= WkE= IHZ5YQ== emVpY2huZXQ= X29r IExpb24= IE9FTQ== IOCwmuCxh+Cwrw== eWN6 IOCuquCuv+CusA== IOCkquCkueClgQ== LGw= ZXNlcw== 4LK14LKw ZHc= 4oCd44CCCgo= 4Lib4Lij4Liw4LmA4LiX4Lio IGJlcmljaHQ= IFJlc3VtZQ== zrPOug== 0LPSr9C5 IENhcmliYmVhbg== IHNjYXJlZA== 2YTYuQ== IHR1bm5lbA== ZW5zdXJl 0L3QvtGB0YLQtdC5 Y3JpcHRvcnM= Y29udGlu aGVpdGVu IHphaA== Q09SRQ== 0LjQtNC4 IGFueg== 4KSh4KWA IGFkdmFuY2Vz IMOkbg== 4oCZYWw= IERpbmluZw== IG1vZGVzdA== IGhpZ2h3YXk= w71h 2YjYsdmH QXJnYg== YWN0aXZhdGlvbg== INGB0LjRgdGC0LXQvNGL IGhleQ== IHNlbmc= YmFzaWM= IHN3aXRjaGluZw== IHNvcmc= 4Z6C yrt1 IGFsdW5vcw== INGA0LXQsNC7 Nzc2 CQkJCSAgIA== IG3hu40= IG1lbXNldA== aWJlbA== IGdvdXZlcm5lbWVudA== IERlc2Rl KFR5cGU= IGNvbnNpc3RlbmN5 INC/0L7Qu9GD0YfQuNGC0Yw= IFJpZGdl IE1vbmdv KENvbnN0YW50cw== Ojp7 IHByaXZhdA== dWFsZXM= IHNpbXBsaWM= w6R0emxpY2g= Sm9icw== IGlkw6k= dGV1cg== IGlldQ== IHJlZmxlY3RlZA== SG9s IG94aWQ= RnJhbWVz IG53cw== IElERQ== cmVwbHk= INGA0LDQtA== 0LDRgNC+0LQ= IGthcm8= IFJhY2luZw== X01PRA== Rk9S IGdlem9uZA== LWRlc3M= INC80L7QttC1 IGludMOpcmVzcw== 4YCA4YCt4YCv Q0FB 55E= IGhvbWVvd25lcnM= INGI0YPQtA== IFNH IGtvbmE= IG1hdGVyaWE= dGVyaQ== 0LrRiw== 7KCR IGR0bw== NjQx LmpzcA== IENhbm9u IEdyYXk= INmE2YrYsw== IHBhcnRpYWxseQ== KGZw cmVkaXM= IG3hu5tp LWlucw== IEhPVw== UHJpbWl0aXZl IEZCSQ== X0NPTA== IHByb2ZvdW5k xJNy IFJFRA== b3dlag== IGFsbG9jYXRpb24= IGRvc2Vz 54qv IOCuh+CupA== MDU3 5Zc= IExvbmQ= IHNlcnRh IGdib2c= Q2hhcnM= INC00LXQu9Cw0YLRjA== X0xvYWQ= X21lbW9yeQ== IERhc2hib2FyZA== IOC2hw== LUFu 05nQu9Cw0YA= IEZpcm0= dXJyaWNhbmU= LXNwZWVk IGZsYXNr VGFicw== 4LmA4LiH4Li04LiZ4Lia4Liy4LiX CiAgICAgICAgICAgIAo= IGJlaGF2aW9ycw== dGhhbg== X3N0b3A= IERlbm4= IGF5dWRhcg== IHF1bw== IOyDneqwgQ== IGRyYWdvbg== IG1vc3RyYQ== IHNvdWhhaXQ= 0LjQu9C+0YHRjA== INKf 0YTQvtGA0LzQsA== YXhp IOCkr+CkuA== V2hhdCdz Ig0KDQo= 4YOg4YOS 16DXkw== MDQ5 w61y 0LTQvdCw0LrQvg== 4KS+4KSH4KSf Njk1 IOCkquCljeCksOCkpuClh+Cktg== Z3A= IEZ1dA== c2VnbWVudA== Y2hlZHVsZWQ= IHJldHJ5 S25vdw== UmVzaXpl IGJ1ZW5v z4nPg863 INGD0Lg= INec16g= IE5lbHNvbg== 65+8 IHPDtQ== YW1wb28= IEplZA== IG1hdHVy cmVnZW4= 7Ja1 IGV4cGxhaW5pbmc= ZXhpc3Q= IExvY2F0ZWQ= Z2Ft IE5hdGFs IGNvcmF6 INGA0LXQs9C40YHRgtGA0LA= IGNvbXBldGluZw== IG3DtmNodGVu IEZJWA== INCf0L7Quw== IHNhY3JpZmlj IFJ1Zw== 4LCf4LGN 5o+S ODg5 IENhbm4= 5LuK5pel IGdsdXRlbg== IHBhZHJl bGlzdGE= 4Lih4Liy IGhqZW0= IGVudGFudG8= IOCwkw== MDQ4 IEVq IG5nd2E= IGRpc2ZydXRhcg== INWO aW5lZQ== LnByb3BlcnR5 INiy24zYp9iv IFRvdXQ= IHJlc3RvcmVk cXVpdA== aGxlcg== KHN0cmVhbQ== LlNlY3VyaXR5 INC/0YDRj9C8 5Liq5Lq6 IE1vbnN0ZXI= INmF2YjYsw== QXVm 5LuZ ZWtvbXN0 IFJlY3J1aXQ= INGB0YU= aG9u IG5jaA== INCx0LXQt9C+0L/QsNGB 4YOQ4YOd4YOR IOusvA== Lndl aWxpdA== aW52b2tl IGNvbnRlw7o= IGF5YW50 IGNvbmNlZA== IENvbXB1dGU= 4LiI4LiB IHN5bnRheA== xb5k 0YDQvtC0 IHBlc3F1aXNh IHRvbA== INi02Yc= IG1pbGpv Y2VtZW50cw== TW9kaWZ5 IGluZmxhbW1hdGlvbg== IGdu X2hpc3Rvcnk= 4LWL4LSV IHN1cnZleXM= IFByb2R1a3Rl INmI2KfZhNi5 4oCZaW50ZXI= YWNpb25haXM= NzU2 IHRlYWNoZXM= 16bXmdei 5pS/5bqc IG53 6KGT 4KSC4KSc INiq2YbYuA== INin2YTZg9ir2YrYsQ== IHNlbGxz LUZJUlNU ICAJ IGNsYXVzZQ== ZsO4 IHJlcHJvZHVjZQ== IHdlZWtlbmRz IGtvbmc= NjYx dWxhcmlv aGV0ZXI= aHA= 4LCk4LC/ IENvYWw= UVI= YWdhbA== IGVtYmFy 0LrQsNGe T0g= IG1hbGFk IHBhc3NpdmU= 05nRgdCw w6lyaWM= NTk0 LnBhY2s= INin2YTZiNmC2Ko= IHNlbnNpYmxl 5qW8 Q29vcmRz 4pah4pah4pah4pah bmF0dXJhbA== NzM2 Lmxvbmc= IFBhdHJp INee15k= NTgy 4buRbg== LUxBU1Q= 6LG5 15LXkw== 15vXldeq ank= VGFtYg== LXJ1bg== IGNpbmU= 2YLYp9iq IGRvbWFpbnM= INCy0YHRkQ== IFJlYWR5 fSk7CgovLw== KSc= IGJlYXU= IGFuZHJh aXBwZXJz IHBvaW50aW5n IHJlbWluZGVk IGFybWE= IHByw7Nwcmlv 44Ot44Kw IHVpdGU= INCz0LXRgA== KHN1bQ== U0RM INmB2LHZiA== a2VlcGluZw== IGVzY29ydHM= LWluZGV4 ZW5kZWVz TUVOVFM= LnZhcg== X2Rpc3RhbmNl INiq2YM= bGluZ3M= INCw0LfRiw== acOnYQ== INC/0YHQuNGF 0LDQu9Cw0YHRjA== IFBoeXNpY2Fs NTgz bWFsZQ== IGNvbmZvcm1l 4Liy4Lij4LmM IFZL b2NjYXNpb24= IGhlaQ== 4KSw4KWN4KSX IGZhbnRhcw== dmlkZW5jZQ== 6JmO5py6 2KjYp9mG 0LfRgw== IEVtbWE= IG1vbHQ= UGk= IGplbWFuZA== IGFuZ2Vs IOGDoeGDkA== aW9uZWQ= IGJk IGVuZmVybWVk IGZhcmE= IGNhbWJpYXI= IOKAuw== ODY1 IHJlYXNvbmFibHk= w7xzcw== 4K+N4K6j IFJp IHTDqWNuaWNv IHdhcnM= cGhvbnk= IHRlYXM= IMOvYQ== IFRD IOS8mA== IOCmrOCmv+CmtuCnjeCmrA== INeR16Q= IGbDuHJzdGU= Y2hhaXI= IERvaw== NzMy 4KS+4KSP4KSC IGVsbw== LnJlZnJlc2g= X0lP IExpZ2E= YWt3 KHt9LA== IExpdA== INCw0LvQtQ== CUk= IGNvbXBpbGVy 1bjVtQ== KnQ= 0LLQsNGF 4KS/4KSk4KS/ aW51bQ== ZXJlaQ== IHJlcGVhdGVkbHk= 2YjZgtmB IE5ldmFkYQ== IEdob3N0 KCQo TWVzcw== YWRpYW5z IGt0ZXLDqQ== INCg0LDQtw== 4KuN4Kqa IGV4cGxpY2l0bHk= a25vdw== LmZpdA== IGhhZGRl IElocmVt IEJlc3VjaA== UmVzdHI= 5rSe Z8Ol IGNoYXJhY3Rlcml6ZWQ= INC00YPRiA== IGxlaWRlcg== INi52K/ZhQ== IE5ldQ== 7L0= IGNvbXBldGl0 IER1a2U= IGNsYXJpdHk= 4LCu4LGG 66C5 IHBhcnRpY2lwYXRlZA== U1RBVFVT Uk9MTA== IHNpZGE= U3RyZWV0 ZWRpYw== IGFkdmVyc2U= 56+u55CD UHJvdGU= IGJvYXN0cw== 0L/RgNC40Y/Rgg== b2Zmc2V0b2Y= IOCwteCwvuCwsA== IFNjYWxl IGhlYWx0aGllcg== IGNvbmNlbnRyYXRl IG1lZGl0YXRpb24= INC90Y8= b25pZQ== INC00YDRg9Cz0LjQtQ== X3JvbGU= IGtvcmU= IG5qZWc= IOCmruCmvuCmqOCngeCmtw== IEZC 6L6D INC90LDRh9C40L3QsA== INeZ15Q= INC/0LXRiA== IGVzdGlz IHNlcXVlbmNlcw== IFBvdHRlcg== IHN0cmFw KHJlc291cmNl QUFBQQ== Z2M= IOuh dWhs IElzc3Vl IOCqsOCqueCrgA== 4KeN4Kae IO2YuA== IEF1Z2Vu ZW1ldA== YXNlbg== X3JhdGlv wrM= aXRpb3Vz dGVyaW9yZXM= RXN0YWRv 5LqU5pyI5aSp IGJvcmRlcnM= 4Kq/4Kqv4Kq+ IGVsaXQ= IOC0pOC0v+C0sA== LmNyZWF0ZWQ= IENyb3c= c2VlZA== RGVzZGU= IFlZ INC40LPRgNCw YmFv 4KqC4KqV NzUx 15nXodeY IFBsZQ== IFRydWNr 4LGB4LCy4LGL YWFyZA== UGFydGl0aW9u aXlhcg== 5aSn56We IFBpeGVs ZWRpc2g= 5rOo5YaM6ZO+5o6l IEVtZXJnZW5jeQ== IHBvb2xz 4Kqy4KuH IGtva28= IFVwcGVy IHlldXg= IHdoaXRlcw== OTY4 IERlbnQ= PHc= INep16g= IHPEsQ== INmI2K4= 4KS+4KSt aWdkZQ== xJ91 OiIpOwo= aWNodHM= INiv2KfYrw== IGNsYWltaW5n IFBpdHRz L3B1YmxpYw== IEdvdHQ= 0ZI= IERlbnRhbA== TWF0dA== IGfDtnJl INC10Lk= KHJlYWQ= IOCkpuCkv+Cklg== X2luaXRpYWw= IGVtYm9k YXRlbWVudA== IG1vbmV0YXJ5 IHN0ZXBwZWQ= dWV6 IOCkquCljeCksOCkrg== IGludGVyZXNzYW50ZQ== IOCquOCrjeCqpQ== X2Rlc3Ryb3k= IEplbm5pZmVy Qm9uam91cg== INeZ16nXqNeQ15w= LkRvbWFpbg== aXNpYQ== INmC2Kg= LWRpYWxvZw== IG5ldmVydGhlbGVzcw== IGlzbGFuZHM= cGFydG5lcg== 4Kak4KeL 157XmdeT cGxveWVy IGluaGVyaXQ= NjQ3 0YbQuNC10Lk= LWNvcmU= 4LSm4LWN4LSm IGNvcm9u IEhvcm4= b3dhbmll UG9zaXRpb25z bm90aWZ5 IHByZXRlbmQ= aGlsbA== YXN0aWNzZWFyY2g= IG1lbmNpb24= IElOUw== 4K6f4K+B4K6k4K+N4K6k IGNvbnNvbW0= IEvDtnJwZXI= JykKCgo= IEFuZHJl IFdhaGw= INC/0LDQug== IHRyb3R6 4YOU4YOh4YOY IGRlcmVu IEphaHJlcw== INWw1oA= w6RzZW50 INC60LDRh9C10YHRgtCy0LU= IENvbW1vbnM= aWNhcA== aWV2YWJsZQ== IOaYnw== IGVzdGFibGlzaGluZw== INeQ15XXoA== 4LmB4Lil4Liw INin2YTZhNuB Zml4ZWQ= IFTDvHJraQ== INiq2YjZhNuM2K8= LkZpbGw= IHZvb3J0 57Wm IGzhu40= INC80LDRgdGC IHJlY3RhbmdsZQ== IOCyqw== YXJxdQ== INGC0L7Rgg== YmVpdGVy 5Lq65oiQ OiQ= RnJlcXVlbmN5 IG5lYmVu LWNvbXBvbmVudHM= IOCmj+CmluCmqA== IFVQREFURQ== bGljYWw= IGRpZ2l0YWxl IFF1aXo= IM64zq0= IGd3ZQ== RkVSRU5DRQ== 2KfYr9mK2Kk= VEs= IGFwcHJvdmU= INin2YTYrNiy c2VydmFy IHJlbGF4YXRpb24= CWNpbg== CSAgICAgICAgICAgICAgIA== CXRpbWU= Njc3 w6lyaWV1cmU= IHRyYW5zZmVycw== IHVyYg== IHdpbmVz IGRpY2hv IGVjaHRl c2hl IG9yZ2FuaXNt 0q4= X0RFUw== INit2LE= IG1vxb5l INW21bjWgA== IGNvbm5lY3Rpdml0eQ== 0YHRgtC10YA= LmNhcA== 4Lix4Lii IEFzw60= INC/0LDQsg== QWR2YW5jZWQ= INWw1aHWgNaB IGplcw== bWVzaA== IFJldmlzaW9u IEdlc2NoaWNodGU= IHBvbMOtdGljYXM= IHNvbGljaXQ= IGRpc2Fkdg== aWNhcmFndWE= IGltcHJvdmVz IHPDqA== IFTDoQ== IERpbWVuc2lvbg== IFByb2pla3Q= w6FsbsOt aGV0cw== IENhbXB1cw== c2VsbGluZw== ZWxsaWdl 15HXkw== IOWkqeWkqeS4reW9qeelqOaciQ== 6Kqt IGdlYmV1cg== zqk= IG1lZGljaW5lcw== IGNsb3Vkcw== IGluZ2w= ZWxvcg== 4LWH4LS5 IHNoYWxsb3c= IFJlZGlzdHJpYnV0aW9ucw== 57K+5ZOB5Zu95Lqn LndvcmQ= YW5na2E= INqK z4jOtw== ICksDQo= IHluZw== 0L7QsdGA0LDQtg== bWFhaw== cGxhdA== aWdlbnM= 4K+I4K6V4K+N4K6V IHTDpG4= YWlzZWQ= Lmlw INC60L7RgtC+0YDQvtC5 4Kan4Ka+4Kao 0LLRlg== LXNlcg== IGFhbms= INaG IHdpbmdz IGN1aWRhZG8= IFdvY2hl IGNvbnN0ZXhwcg== Nzcz w7xuZQ== Q2V0dGU= LlJlc3Q= IGFtYXRldXI= aW1vbmlv ODMy bGFyxLFuxLE= LnBsdWdpbg== xIFrb3U= IHJlenVsdA== d2nEhQ== dGFrZQ== IHVyZ2VudA== QWxyZWFkeQ== X0lNUE9SVEVE In0pCg== d25pZQ== 4oSW INmE2K/Zig== LWRyaXZlbg== 54us aW9sZXQ= KC4uLg== LlJlcG9zaXRvcnk= bmFobWVu 4Kq+4Kq2 INGB0YLQsNC90L7Qsg== IGJ1eno= 2YrZiNmG YXRzY2g= INW21aXWgNWv1aHVtQ== IG9wZA== YWxhcsSx IFBldGVycw== IHZlbnVlcw== IGNhbGNpdW0= TWFrZXI= xrDhu58= Y29udHJvbGxlcnM= Zm9yZGVy bWV6 dXRob3JpemVk 44CA44CACgo= IHByb3BpYQ== RWxlY3Q= NTk2 IOCuruCvhw== 4Z624Z6a4Z4= 4YOd4YOa4YOd4YOT OTkz 6KeG6aKR5Zyo57q/ IOeyvg== 4YOU4YOV4YOU X3NpbQ== OTE2 2YLYp9ih 6aG6 IGZpZQ== 4Kqb4KuA X1JFRg== IG9yaQ== INeV15XXkNa416E= NTkx IFdyaXRlcg== IEluamVjdA== IG1hdGlu UVVJUkU= IGNvenk= yZlkyZk= S2luZw== IGFnYXI= aWZ0ZXI= LXJlZw== IFN3aXR6ZXJsYW5k 5pe25YCZ IFJhaG1lbg== LnBob25l Q2hhcHRlcg== IE1FTQ== YXNzaQ== LkFQ IOGDkuGDkOGDmA== IE9yaWVudA== 44Gn44KC INC/0L7Qv9GD0LvRj9GA 77yM44CK 6KO4 IENhbGxiYWNr IGhhbHRlbg== LmNhbg== cXVpY2s= NjU4 IFBPTA== bGFs LkJsb2Nr IOCktuCkvuCkrg== IHJpZGVz 05nRhQ== ODQ1 IGNvbnNlbnN1cw== dW5naQ== 06g= IOCkpuClguCkuA== IM+EzrU= INij2YE= YW1tYWQ= aXJzaW5peg== INqp2YjYptuM NzY2 IHdlaW5pZw== IGVudHNwcmVjaA== b2xsYXBzZQ== RmxpZ2h0 IGRhdGVk bG9l INC00LXQvdGM0LPQuA== IG1waA== IHdla2Vu 15DWuNec IHNlZGFu IHBpZW4= T05E 5bGL bXVzdA== IHBhcmFs IOyVhOuLiA== XCI6XCI= aHRp 0LjQtNC40LrQuA== U2ln Y2hhcnM= INCy0YvQsdC+0YA= IOCmruCmp+CnjeCmr+Cnhw== IFVwb24= aXJhbA== IHRhc3R5 IFN0YXJ0aW5n 44Kk44K6 IHVuZGVyZ3JhZHVhdGU= 2YjYs9i3 X3NpbmdsZQ== YmVycmllcw== 77yM5Lul IEFiYg== YXJpYW1lbnRl Qmx1cg== IENvbmZpcm0= IEtD QUdT INC/0YDQsNC3 X0lG 0LTQtdC70Yw= IOCqquCrgg== IEFX IHBlcnNwZWN0aXZlcw== IGhvbGRlcnM= bmVnYXRpdmU= aW5ncmVk YnJvd3Nlcg== IGF0dG9ybmV5cw== INGB0YDQtdC00YHRgtCy INWh1oDVvw== IENvZGVz IGNlcnRl cm93aW5n WWVhaA== YWlsbGV1cnM= IHRyYW0= IGNyw6lhdGlvbg== IGxpcmU= IGZlYXJz UG9zcw== IOCkuOCljeCkqg== IOCkluCkv+Cksg== IG1hbm5lbg== IEplcnVzYWxlbQ== IG1hcnJ5 IFZpbA== YWpu IEJhbGFuY2U= cGljaw== IGFuaW1hdGU= INC90LDRgdGC0L7Rjw== Z2VsZA== IGJpYw== ZWxobw== cGVybWlzc2lvbg== IEdlZw== IHBvc3Rl IHZhcG9y Z2V6 IFJB 44GX44GL X2xpYg== IER1cw== LkpvaW4= IOCkteCliA== 0YHRi9C3 IG1veWVu 0L3QtdGA0LM= IEhhcm0= IGN1aw== INmG2YXYp9uM Njc2 LnJlZGlyZWN0 QW1i X25vcm0= 4KSP4KS4 bW90 IENBTQ== YWNjaQ== IHBvdXJyYQ== IGFkaXA= IGJlc29pbnM= IGFkZGVkZ2U= cmlvcnM= IGZpbmc= X3NpZGU= KElO 4LK44LON4LKl INC/0YDQtdCy ZXJw c2ls LXVz W01BWA== LHJlcw== IG5pbmfDum4= IGRlZGljYXRpb24= INC+0YTQvtGA0Lw= IHNlw7FhbA== ZW5ldmVy IFJHQg== IOCwheCwtQ== INmF2YjYpw== YXZhaXQ= IGJvdXRpcXVl 4YOQ4YOg4YOU IHsKLw== IFN0ZXZlbg== IEludmVudG9yeQ== dmVr IEZY INGB0L7QstGA0LXQvA== NjI5 a3NhbQ== IHbDoXJpYXM= IHdpZGVzcHJlYWQ= aMOj KOacqA== IGPDtA== IEh1ZA== IGxhbWE= X21lbWJlcg== IGtyaXN0 ZW5uZW4= IGthZGE= 2qnYsw== INW41oDVqA== aWVydGE= IG3DoXI= Njkx Y29tZWQ= IHV0YW4= UkFX IGNhbXBl 1oXWgA== IEZpbGlw IGZvdXQ= IFVJS2l0 LmN1cnNvcg== IERlc2lnbnM= 5LmQ5b2p56Wo IHVpdHZv IG9jY3VwaWVk ODU4 KGNlbGw= NjYy 5a6J5Y2T IHdyZXN0 4KSy4KSs zq/Otg== UnM= IFByaXpl IENyeXN0YWw= IGJhbmNv IFRhbms= IHnDtm4= IGdpZA== IOCkquCkueClgeCkguCkmg== 5omr IGNvcnJ1cHQ= 2bo= QVBI INKv0Lc= IEhI 0LjQvdC+0LI= b21ibw== L2ltYWdl IOGDnuGDmOGDoOGDlQ== 2YLZitmC2Kk= bmV5cw== RXY= IGNvbWlkYQ== R3VpZGU= IHNjYXJ5 Q2hhcmdl IOCknOCkv+CkqA== IGFiYW5kb25lZA== IGdlZ2V2ZW5z dW5nZW9u IFdlcms= IE5vcnRl 4LC+4LCj 4Ka+4Kaw4Ka+ d2VuZHVuZw== IHRhcmdldGluZw== NzMz IGN1YWxlcw== IOOCsw== YXNzeQ== IFJpY2h0 IOCkl+Cliw== b3R5cGVz INqp2LHYr9mH LW51bWJlcg== 4YOd4YOV4YOc Q29udHI= NzQ0 LldpdGg= LXdlZWs= 4YOd4YOe IEplaA== QnJvd3Nl QVND INij2K8= fQov KOmHkQ== INGG0ZY= 4Lia4Lit4Lil4Liq4LiU LVg= zIk= ODgx Jy8= 5puw IHByw7N4aW1h IGNvY2luYQ== IHJlcG9ydGVkbHk= IOCupOCuv+CusA== IGbDqWlkaXI= R1Y= KwoK IENvZA== 4Liy4LiE4Liy4Lij4LmI4Liy IOCqsOCrgOCqpA== IOCqquCri+Cqsg== b3Vj IHZvZXQ= SmV0 dG9pcmU= QFNlcnZpY2U= IFByaW5jaXA= X2Vwb2No IE1haW5l 4KuB4Kqw RW1iZWQ= IjsKLy8= TGVhZg== IGVyZWN0aWxl RE4= LHRoaXM= MDg5 IE3DoQ== IEJhdGhyb29t 1L8= ODc2 INi22K8= IGZhdGU= IFF1ZXN0 INC90LXRgQ== IQoKCg== X05PREU= NjQz NjQ4 z4zPgg== CQ0KCQ0K IG11bmljw60= RXhlYw== IGFsZ3VpZW4= IO2WiA== TWFwcw== VUJMRQ== 2LPYqtiu2K/Yp9mF dXJyZW5jaWVz INeV15zXkA== IGNvcnJlbGF0aW9u cHBv X3Bz IOGAnA== IHBoeXNp IHdlbGZhcmU= IEdyZWVjZQ== INC00L3QtdC5 4Ka44KeN4Kak IGVpbGU= IHN1c2NlcHQ= IGV0aGljYWw= IEVzY29ydA== cHV0ZWQ= IEFwcGxpY2F0aW9ucw== IEJleW9uZA== IFRpaw== RHVwbGlj IGxlYXI= KCItLQ== IHBvaQ== c2tl IGZsZXNo IFlhcmQ= J2FjYw== cG9zYQ== IE1pZ3VlbA== IGRpc3RyaWN0cw== 15DXldeq 6K6/ fWA7Cg== LkRlYnVn IGPGoQ== Nzcx INC70LXQug== dWxlcnM= LWl0 1bXVodW21ag= IEZyZWVkb20= aW5ob3M= 0Y3RgQ== xbs= 0LXRgNC+0LI= IE1lYW53aGlsZQ== RGVjaw== IFwo 0YvQvdC00LDSk9GL IGlsZw== IERpc2Vhc2U= NzM1 X0FDVElPTg== IHJhag== fC4K aWNhdGVz IGFobw== IHNhY3JpZmljZQ== 4LSf4LS/ IMOpcXVpcGU= IG9yZGlu IGp1aWxsZXQ= 6L+95Y+3 X0RPV04= SVNJT04= TWFydA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IGx1ZA== IOWkp+WPkeW/q+S4ieaYrw== IFZlbmV6dWVsYQ== IFBpZXI= 0LDRjtGC0YHRjw== YCkK IFN1bW1pdA== IG1ha2s= cGljdHVyZQ== c3R5bGVk X2N1cg== dW5uZXJz 4KeA4Kak 5bGC IHJpc3F1ZQ== IOGDkOGDoOGDkA== dXNlcmlk c3RpY2s= IFF1YXJ0 d2lqcw== OTc3 IG1lbW8= a29udA== 0YbQuNCw IHByZXZlbnRz ICsi 1Ls= LWhvdXNl IHNvbGxlbg== IGNvbm5lY3Rvcg== 562J5aWW dmlkYXM= IFByaW5jZXNz IGFhbndl aWtzaQ== fS97 bm90aWNl aWZpZQ== L3Byb2R1Y3Q= IG1vbnRy 4LSo4LWN4LSn dXJvbg== ICI+Cg== IHPDu3I= X29i IEFsdGVybmF0aXZlbHk= INiu2b7ZhA== 5pSv5oyB INC/0LDQuw== 2KfYudiv RGVlcA== IGNvYXRpbmc= 0qPQsA== CVg= IEV2ZQ== aGVl JkE= 6KuW IG9ic3RhY2xlcw== LF8= LmV4Y2VwdGlvbnM= ZHluYW1pYw== TEFORw== IGFyaXNl IGNoYW1icmU= 6LWM5Zy6 IEZyZXVuZA== aHJhc2U= IG1hZHJl cHJpbWU= xZFs 2KfbjNin IExhdGU= c2o= KGNscw== IMOpeA== IG11ZXN0cmE= Q3VsdHVyZQ== Zm9vbg== 4YOQ4YOa4YOQ4YOl emlh IGNvbXBsaWNhdGlvbnM= IERlZ3JlZQ== ZGVtbw== 5Lqu INGP0LPQvg== IOCkreCksA== IFJlcG9ydHM= IGZyeQ== IHN2b2pl KGNy z4HOv8+F IGVxcQ== ICg8 IENoYW1iZXI= aW1lc3RhbXBz X2ZpbmFs IOCuquCvig== IHVwdA== INin2LPYqti52YXYp9mE IFBST0Y= IGJsb25n IHBoYXJtYWNldXRpY2Fs IGNlbnRz IFNvbG8= 5raI5oGv IHRyYWJhamFy IHRvdXJpc3Rz IExpbWl0 IGRvbWFpbmU= X3J1bGU= aWdoYm9ycw== YWJsaXNoZWQ= LlByaW50Zg== SVNCTg== IHBoZW5vbWVub24= J11bJA== INio2LM= 5ZWq5ZWq IGNhbnM= X2xhbmc= IGJhY2tpbmc= IHNpZ3Vl IGZvcm11bA== S0I= 0LrQsNGH0LDRgtGM KGF0 5a+f INC/0LXRhw== ODg2 4LGH4LC3 56iu IGNvbnNpc3Rl IGZvcnR1bmU= w7Zo 0ZbQtg== IENBTA== 4LC/4LCC4LCX4LGN ZsO8Z3VuZw== IHZpbmM= IGhhYmxhcg== IG1lcmNoYW50 IG1lam9yYXI= Q8OzbW8= INC20LDRgA== IGJpdHRlcg== NjY0 OTQ1 b3hpYw== T1JJWg== IOCkhuCkquCkleClhw== IG1haW9yaWE= IGNvbnNlcXU= KSk7DQoNCg== KSkpCgo= IHNpZWh0 4LmI4Liy4Liq4Li44LiU INen15w= IGNyYWZ0ZWQ= Pics IO2UhOuhnA== 4KSC4KS4 LnBvdw== IExpcA== IOiHqg== INin2YTZiNiy IGRpw70= IHBhcGllcg== IGhlcm9lcw== 24HYsQ== IOC0teC0v+C0tQ== b3bDoW7DrQ== 5Ya3 IAoKCgo= IHJlZmlu IgovLw== IOCuleCunw== IHdpbmRz IGZ5cmk= 55m+5bqm IGNhbGxl YsOp X0ZVTkNUSU9O IHVo dWt1bmZ0 YXJpYXQ= aXZyZQ== w6R0eg== IGhlbGZlbg== IHJhY2lhbA== U2tpbg== b3Jybw== INCx0Y4= IOCqnOCrgA== IFJlY292ZXJ5 4Z6V 5b2p5Zu+ 5a6D IGZldQ== IFVybA== IGRpc2N1c3Nlcw== IHNla8Ok IMOpY3JpdA== 4buz X0hFQURFUg== IHPDpg== bWFuYWdl aXRvcmlv UmV2 IHRvbGVyYW5jZQ== IGJpc3Q= 4LGA4LA= ODk4 IHBsYXlsaXN0 INC70LjRiNGM KHRyYWlu 4Kq/4Kq4 INW01aHVvdW2 IGhhY2llbmRv IEdsw7xjaw== ZGF0YXNldA== IFRoYQ== X3BlcmlvZA== yZlyYmF5Y2Fu IGlqaQ== IEtlbm5lZHk= MDk0 IOCkieCkuOCkleClhw== 2aE= cmVuYW1l 4LmA4Lin IHByb2c= LmNvbHVtbnM= 4LWD4LSk IMSR4buTbmc= bGVnZw== IOGAlQ== IO2VnOuLpA== TWVucw== YXVr VUlUYWJsZQ== IEF2b2lk 1a/VpdaA YWFuaQ== IG1lbmVy IHVucg== 67aB IGFkZGljdA== aWV2ZXI= IG9jdG9icmU= Z3VzdA== IGxlaXN1cmU= IFByb2plY3Rz IG5hbw== X2V2ZW50cw== IOeUs+WNmg== IHBlcnNv 6YG4 IHBhcGE= IGtvbmU= bGViZW4= IFNwcml0ZQ== 4Kqo4KuN4Kqh W1N0cmluZw== anNweA== 4Lix4LiV IG9uZw== IGNoYW9z ZW5kdQ== YWl0cw== YWxzYQ== c2Vw IG7Dpg== 2ZHYqQ== IGVlcmRlcg== IEFteQ== OTU1 X21ldGFkYXRh IHVuZGVybmVhdGg= X2R1bXA= 0pPRi9C9 Lmdzb24= 4buDdQ== IGNpZXJ0bw== IE5lcA== IG1vZWls IGNlbGVicml0eQ== 4LGB4LCq aWtvcg== U0Y= IGNlcnRhaW5lcw== Lm1vY2tpdG8= MDU0 IFN1cmZhY2U= OTg0 IEd5 4oCZRQ== IOWkqeWkqeS4reW9qeelqGFwcA== SGFsbG8= INin2YTYtdit IGNvY29udXQ= IG9wb3J0dW5pZGFk 5a6j 5aSn5Y+R5b+r b3VzdGlj IGNvbmp1bmN0aW9u 6K+6 IFN0dW5kZW4= INeR15s= IOi2hQ== IHBlcmlvZGU= IGF1dGFudA== IGxlemVu IGppbg== IGRhbW4= QWdhaW4= KTot 4KuL4Kqo IGJyaWRl INi52K8= TW90aW9u X0JVVFRPTg== IHR1dG9y YXR0cnM= 57Sa KCl9Cg== IHdob2xlc2FsZQ== bG5n INCw0YPQtA== Uk9T IE9rdG9iZXI= IEhlcno= T1JMRA== IGxheg== 4LK+4LK5 KHJhdw== IOuVjOusuA== KEFycmF5 1aHVsw== IMOkdmVu OTEz NzE2 IG1lbmdndW5ha2Fu 2K3Yp9iq IGNvbXB1dGVk IGhlcmVpbg== INC30LXQsw== IGZ1bmVyYWw= xrDhu59uZw== V3I= IOCkmuClgQ== IHJhc3Q= KG1vZGVscw== LnNpdGU= IHN1bm55 INGB0L/QvtGA 0LTRg9C9 IGh1bmc= aWZpY2FsbHk= IEFjdHVhbA== bGFyaQ== QU8= IGPDs2RpZ28= IFdheA== YXJyYW50eQ== IHVzaXpl aGFpcg== IGVkaWZpYw== Z2Vr IG1vdGhlcnM= YXZvcml0ZXM= QmVhcmVy IE1lZGl0ZXJy IOCunw== IGRpc2FiaWxpdGllcw== IGt1YmE= IGTDqWNlbWJyZQ== IGRlc3Rpbm8= RGF0YXM= IMO6cw== X1BPU1Q= INiz2KfZhQ== IG1vxbxl IGJhcnU= IGNvbGxhYm9yYXRpdmU= IGZvc3Nl b3BhY2l0eQ== IVs= IGdyw6E= 0YvQu9KT0LDQvQ== IFdvcmRz IHNhZmVy IOCkh+CkpA== IGFjY3Vz IHByaW9yaXRpZXM= IGFqdWRh IE1hc3RlcnM= Vm90ZQ== IGFjZXNz IGNvbnNjaW91c25lc3M= TG9jYXRvcg== IHRo4bq/ IENUeXBl IFNlbGVjdGVk IERvbmU= 4LSv4LS/4LSy4LWN INmF2YbYp9iz ICMrIw== SVBQ IGRpc2NoYXJnZQ== IGV4Y3VzZQ== VGVycg== CXNw dnJv 4KSf4KSw IG11c2lxdWU= X2FmdGVy Q09NUA== IEp1Z2VuZA== IE5vcnRod2VzdA== INC+0Lw= IGFmdGVyd2FyZHM= dGVw X3RyYW5zZm9ybQ== IGluY3Vy IERI IHZvbHZlcg== ODc4 IOCmleCmvuCm JzsKCgo= IExpbmQ= IHNlbnNhdGlvbg== 5pSv5LuY IGZvcm1hdG8= 2LHYqNi5 kas= IHBpcGVz IHRyYXRhcg== 0ZjQuA== b3dhbmlh w6lydA== INC70LjQsdC+ IGFjY3JlZGl0ZWQ= IGhvbWVsZXNz cm9sb2d5 IHB5bg== b2xpZQ== IHN1ZmljaWVudGU= YnVzaW5lc3M= aW55ZQ== IGN1YmU= VWI= PG1ldGE= INGF0L7RgNC+0YjQvg== RmFjYWRl NjM0 NjYz IGxhd3N1aXQ= IFdlJ2xs INCy0YHRgtGA0LXRhw== YXRpZWY= NTg0 IGluZGljYXRpb24= IGVuZXJnw61h dXBo IHNuYWNrcw== IHJvbGxz dWJybw== Y2Np IHRyYWlucw== IEhlbmQ= IEZhaWxlZA== 4LCm4LC/ ewovLw== ZW50YXM= IFZlcmI= IFBob3Rvc2hvcA== IC0tLS0= OTY2 IGRhaGVy IGxlZ2FsbHk= aWNrbmVzcw== INGA0LDQtNC4 IHDDqXJpb2Rl aW1vbmlhbA== L3NlYXJjaA== INin2YbbgQ== k7A= NzE3 IGNhdGVnb3JpYQ== w6RjaHN0 5L6G IEdhcmFnZQ== DQoK X3V0aWw= IGRpc3B1dGU= dmFsb3I= RW50cg== IOCysOCyvuCynA== IHhv VHJ1dGg= IExlZ2lzbA== IGFkaGVy OTI4 IOGDkOGDlQ== INC/0L7RgNGP0LQ= CSAgICAgICAg 4LiV4LmM LkJ5dGU= IGVucmljaA== IFRQ IGZi 0LvQsNCx 4Ka/4Kah YXJldHRlcw== IHJlbmV3YWJsZQ== INC/0L7QstGL0Yg= IGNhc3Rpbmc= VVJB c2FmZQ== W3R5cGU= 0KjQkA== d3JhcHBlcg== LkRyb3A= 2KfZh9iv IEFjdG9y IG1pbGxz aGVlcg== IE1hcmt0 IHRyxrDhu51uZw== NzYy IOGDqOGDlOGDnA== aXhvbg== YXR1cmFz IGVzdHJhdGVn ID8+Ij4K IHZhcmlhbnRz LkNvbGxlY3Rpb24= 66CH Xyc= IHNhbmN0 IGFhbnY= cG9zaXRpdmU= IGJpb2xvZw== 54m556CB 4LCC4LCq INmG2LM= LlRZUEU= TW9udA== ZnJhbWVz LmFtb3VudA== RXhwYW5k IOCqhuCqteCrhw== YWxpaw== IExlbw== dGVp IGFzaA== YWtrYQ== IOCkqOClgA== IGJlZWxk 4Z6X 4LON4LKn IOCmrOCmsuCnhw== X0VOVg== IHZlbnRpbA== LXBsdWdpbg== IGFydGlj IHZhbnQ= ZW5nZXM= LlJlbmRlcg== IENhcmVlcg== IOGDpeGDleGDlOGDpw== IHRvb2xiYXI= Iiwk IGthbXU= IOqyg+ydtA== IHNlYW4= IGNyZWF0dXJl IHJlZnJlc2hpbmc= aXRpbWU= cGVyZm9ybQ== c3ByaW5n IEdvbno= 4YOg4YOQ aXhlcg== IGJlZHJpanZlbg== IGF0dGFpbg== 4KSf4KS+ aWJib24= IGp1Z2Fy IHByb2N1cmU= IOCknOCkuQ== IHNuYWtl KGJ1dHRvbg== U0RL 4LOB4LKm4LOB IFNhbnRv IFdoZWVs NzU0 4LK/4LKk4LON4LKw bGph IEdvdg== Ly8NCi8v IFZhcmlhYmxlcw== ZWdhcg== RGVmaW5lZA== QEVudGl0eQ== IGFiYWl4bw== IOemj+WIqQ== IHdhag== 7LaV IFN1bmQ= IOeahw== X2dsb2JhbA== IGxldmFy Kng= PT09Cg== KHBvaW50 VW5pdmVyc2l0eQ== ODYx Y2hpbmc= YW5raW5n KG9u IGluc3VsaW4= IHZhag== RGlnaXQ= dmVn LmJhcg== IGPFk3Vy 4LiV4LmI4Lit Nzg2 MDcz IGNob2lzaXI= IG9iamV0aXZvcw== IGNvbnN1bWluZw== IEZhYnJpYw== IG1hbm9z IGphY2twb3Q= LnJlY29yZA== 2YrYuQ== IE1pbGFu IGluaWNpbw== ZWxw JeOAgg== X1JFU1VMVA== IGFjaWRz IGFzc3VyYW5jZQ== IFJvZ2Vy xJN0 IEFiZA== IGFubm95aW5n YWxrYW4= IENvbWZvcnQ= IOCkig== IGFhbmRhY2h0 J3U= ZXJzZXlz IGtldXpl YmVm INC+0LHRgNCw0LfQvtC8 IHZheg== IHZlcmhhYWw= 0LDQvdC+0LI= IEFsdGVy IGluY29t KGxlbmd0aA== IOyYrA== aXNwZXI= IERlc2M= INGC0LXRgNGA0LjRgg== 2YHYpw== YWR1cmE= 2KLZhg== IHNldmE= 4LKX4LON4LKX IGNvbnN1bWVk bHVr NjQ5 OTM4 Lm5hdg== LmZu INmE2YTYrQ== IGFkb3JhYmxl IGltcGU= IHJlbWFpbmRlcg== Tmg= IMq7bw== a2VubmVu INmF2YjYttmI2Lk= IOyXkA== J2Fs ICgNCg== INC30YA= 4KS/4KS44KWN4KSk IG51ZGU= VmVydGljZXM= UG9zaXRpdmU= ODQ4 YXVk IEdydQ== IOCyleCyvuCysOCzjeCyrw== 0LrQuNC7 IG1heg== IGRyaWxs X3RoZW1l cnhqcw== IEZvcm1z IGxhdW5jaGluZw== YXlu IG51Y2xl YWdncmVn IOCyheCypw== IGt1bmE= INi52YbZiNin2YY= IE9sZQ== IGNvdXBsZWQ= LWNvZGU= YWNocw== YW5zaw== IGFudGlveGlk INWi1aHWgQ== INC60YPQu9GM0YI= ODcx IEhvb2s= IGRlamE= YXJhYW4= IE1hc3NhZ2U= IGNoYW5nZXI= IGJlbGx5 IE5ld3NsZXR0ZXI= LmRhdGV0aW1l INi52YTbjA== YW7Dp2Fpc2U= UHJvZHVjZXI= 5Yil Z2VoZW4= IGphcmRpbg== Y3JlZGVudGlhbHM= 55qE5piv TWFuaWZlc3Q= IFBlcnNvbmVu L3BsdWdpbnM= IENyaXN0bw== IE5ZQw== b3ZlcmZsb3c= IHBsYW50YXM= dWlsbGU= 5Luk YXVjaA== cm9m Lnp6 0q/Qsw== IHRvZWtvbXN0 IEFkYXB0ZXI= IHByb3llY3Rvcw== IHBhbmRlbWlh L2VkaXQ= CWNo IE1hbmhhdHRhbg== LmRpc21pc3M= 4LKo4LOB 4YOQ4YOu4YOU4YOR IHBvbG8= IENvbmNlcHQ= JzsKCi8v IENhbXBhaWdu IGRleQ== YW5za2U= IGVyZm9sZ3Jl UmVnaXN0ZXJlZA== IEhPTERFUlM= 25TblA== IGhvY2tleQ== c3Rz IENhcm4= IHFv YXNzZWQ= LkRhdGFiYXNl aW9uaWM= INC60L7QvNC/0LDQvdC40Y8= IG1ldG9k T2JzZXJ2 IGNvcnA= IEFtb3VudA== YXBwZXI= Lm9yaWdpbg== IHBlcmZlY3Rpb24= OTUz c3R2bw== IE1zZw== LnZv Ym90aA== dmVuZXM= INC90LDRgNGD0Yg= IEdyZWF0ZXI= IHByb3Zh 4Lin4Lix4LiZ4LiX4Li14LmI bGhh IOCkrOCkpOCkvuCkr+Ckvg== IHBhZ2FtZW50bw== IHR5bGtv c2VxdWVuY2U= IFB1bms= V0lO UkVBVA== IHZvbG9udA== V25k 4KS54KSw4KWC LnNldHVw IHpvaw== 4LSl MDk2 dHJpYnV0b3Jz aGVpZHM= b3ZvbA== INC+0YHRg9GJ0LXRgdGC0LI= INin2b7ZhtuM zrnOvQ== MDY1 YmFyZW4= cm9tcHQ= IGludGVybmE= cml0dXI= UGF0Y2g= IFRpdGFu IGNhbmFkYQ== IGV4dHJhcw== IExvc3Q= INC60L7QvdGG 0YfQuNC70Lg= IGRlZmVuZGVy IHN1cnZpdmVk IGNvbmR1Y3Rpbmc= IG1hcHBlZA== dG91Y2g= Y3g= IFNlbnM= IHDDoQ== IGZhdGlndWU= LXZpZXc= cXVh ZWtzaQ== UmVzb2x1dGlvbg== IGNvbnRpbnVhcg== b2xpYQ== IGzGsOG7o25n IG9yZ2FuaXNhdGll IE1pbmltdW0= IFBvbnQ= IHRoZW9yZXRpY2Fs INGE0L7Rgg== IGpvaW50cw== IG1laW5lbg== IFBhcmFk NzM0 Q2hvb3Nlcg== 4K+B4K6z4K+N4K6z4K6k4K+B S0s= cGxveWVk 4LK/4LKh 4buvYQ== QXNzb2Np ZW1t ZW1kZQ== IHNwYWNpbmc= cHJvZHVjdGlvbg== IExlYWRlcnNoaXA= NjM4 IGRpZW5zdA== 0LXQvdC90LDRjw== IGNvbG9jYXI= 5Lq65bel IHNvbHZlZA== IHZhcmllcw== IGRpZXRhcnk= PGNvbnN0 cmVhZGluZw== IGRlbWFpcw== IG7DrXZlbA== IGdib2dibw== IHN0cnVnZ2xlcw== Rm9ydA== U2Ny IERpZmZlcmVudA== 5LuK5aSp 5Yik IExvaw== QXV0aGVudGljYXRlZA== IHByb2pldHM= IGNyeXN0 Nzkz IGRpbmU= IGRlbWFuZGE= SG9l 0YvRgNCz0YvQtw== IGNvbnRyb3ZlcnNpYWw= IHZhbmRhYWc= IHRvYw== IGludGVzdA== 0YjQtdC5 YXN0ZXJz z4TOt8+EzrE= OTI0 YXJpZQ== aWtlZA== IHJlcG9z aXRzZQ== 15XXkdeV16o= 4KS44KWN4KSv OTg1 IG5paQ== IE5ldmVydGhlbGVzcw== IOCuleCvgeCusQ== J2lk X2xvYWRlcg== L3BrZw== ODgz IHNpbmM= IEFkYW1z enltZQ== NzI0 IENvbmZpZ3VyZQ== IG1vcmE= IEF1cg== IGRlc3NlcnQ= T1RU Q3JlYXRpbmc= RVZFUkU= 5YWz5rOo z4DOtc65 IEtleWJvYXJk IFVzYWdl 2YjZhNmK IOyemA== IOCyheCyteCysOCzgQ== IGZlbWFsZXM= dXNpYXNt IGd1aw== IFRydXRo IOCkleCkvuCksOCljeCkr+CkleCljeCksOCkrg== Y2hvb3Nl Z29hbA== IEFsdW0= cXVhcnRlcg== IGNvbnNpZGVyYWJseQ== Kys7 dGFu IE5FVA== IHNpZ21h IFJlcMO6YmxpY2E= IHRzbw== IE1lZGljYXJl 4Ka/4Kas4Ka+4Kaw IEdhdGU= IHRhcms= KGFwaQ== IOC0quC1jeC0sOC0uA== IHVudG8= Lk5vbg== IEx1Y2Fz IOC0quC0seC0nuC1jeC0nuC1gQ== 4YGB 44Gd44KM IGxlbmQ= IGFkaGVz IFRlYW1z IFJhdGhlcg== Njc5 IGFwb3lv SVRFUg== IOCuheCuteCusA== aWJyYXJpZXM= 4Lij4Li14Lii IElzc28= w7xobA== IG1lbmRhcGF0 IOqygA== YWNobw== Lm9ubHk= IHJhbmtpbmdz dXNpw7Nu INGC0LDQutC40YU= 4Liy4Lij4Liy4LiH LdC8 b2xkZXJz 5oOF5aCx INCw0LLRgg== IOaU IGFzZWd1cg== IGThu7E= 4Kq/4Kqo IFB1bXA= INCy0L7QuQ== 2YjYrNmH aWFj IGluZGljYXRvcnM= IHJlY29uaGU= IHBvdGF0b2Vz QXJ0aWNsZXM= 5Z+O5biC aWNoZXJ1bmc= 5ZCr 0LvQsNC2 IGJydXRhbA== InVzZQ== IGZpY291 INWi1bjVrA== INCj0LrRgNCw0Zc= KDw= IGNvbnRlbXBvcg== IGxveWFsdHk= YXBhcw== IGV4cGVjdHM= IFZhbGVudGluZQ== INi52YbYr9mF2Kc= IOCyhuCylw== IGludGVybWVkaWF0ZQ== LmRlbGVnYXRl INit2YXZhA== X1VSSQ== OTc1 IGJlcnI= LkRpc3BsYXk= IHByb2Zlc2lvbmFsZXM= bm9jaA== OTcz INmK2Kw= INWw1aHVvg== c2NlbmU= INCw0LLRgtC+0LzQsNGC LW5l KSkpOw0K IHRoZW9yaWVz w6lyZQ== bsO9Y2g= SUZJRUQ= Um9jaw== b3Zhc2N1bGFy IFN5cw== IE1pbmU= IGp1xbw= yZlj IG9wY2lvbmVz KHRm IEFkdmVudHVyZQ== 7Luk IGF0dGFja2Vk NTc5 5Y+v6Z2g5ZCX cHJlc2VudA== IGVsYXM= OTE0 IM+Dz4TOv869 MDg3 muCwvw== 2YTZitip ZXJ0ZXM= 4LS/4LSv4LWB4LSf4LWG IHBhZ2I= KGF1dGg= IG1hbnVz NzQ2 PE1hcA== IG91dGJyZWFr OTUx 2LjZh9ix IGFwZXJ0 INGI0LDRgA== bWFp 4LeS4Lax4LeK IHF1ZWxsZQ== INC60YDRg9C/ IEhvcnNl IG92ZXJsYXk= IGRlbnNl IG5heQ== INqp2r4= w6RjaGxpY2g= IMSRaeG7gXU= IOCknOCklw== IHByb2hpYml0ZWQ= IOWNgw== b21iZQ== YWt0aW9u ODY4 xq8= R0k= IHwKCg== XFNjaGVtYQ== IExvdWlzaWFuYQ== IOCkuOCkpg== bG9ja2Vk 0YHQuNC4 CSAgICAgIA== IFNpZ25hbA== INCw0L/RgA== IElOVEVS KTsKLw== IG1hYQ== IOCmrOCnh+Cmtg== INqv2LA= QU5F IHR1aW4= IGx1c3Q= Jzwv IElkZWFs RGVwYXJ0 IOCkrOCliOCkoA== LnNhbXBsZQ== IOGDm+GDkOGDnA== r+Cni+Cmlw== IFNvcnJ5 aGFyZXM= MDU2 IGFkYW0= IM6szrvOuw== 0LvQsNGB0Yw= 2LTZiQ== QVU= LVk= cHJvY2VkdXJl LmFyZw== 2KfZhtiq IEthdGg= 0L3QsNGC0LA= IEludmVzdGln b3lz dXRlbHk= LmVuYWJsZQ== 4LK+4LKn IE5CQw== IGhhdmE= c3RlbGxlcg== 16jXqg== aWNs aWd0ZQ== YWxha2s= LnZlcnRpY2Vz YW5lYW4= Q2hhbm5lbHM= IGF0dHJhY3RlZA== IHRpbnQ= ODk2 IENyaW1l TmF2YmFy IGNvbmN1cnJlbnQ= 2YTZitin2Ko= KENsYXNz INGN0Ls= IG1pbmlzdHI= IOCmrOCmm+CmsA== IExvYWRpbmc= 2YjYp9i12YQ= bG0= INGC0LDQutC40LU= 4Ka+4KaV4Ka+ 4bqhbmc= IM+Fz4DOvw== LlRyaW0= 4K+N4K6k4K+N4K6k IGd0 IHZlcmJldGVy 5rOw SmVz IOWKoA== b2xhbg== 2YXZitmF IHVwZ3JhZGVk 5byC OTUy IG3Frw== 06/Qtw== YXNvbmlj IFNlbnNvcg== xLFtxLE= IHN0YWRpdW0= IGxpY2Vuc2luZw== X2pvYg== IOCksOCkvuCknOCljeCkrw== IHNlcm0= SW5zdGFuY2Vz IOCkieCkuOClhw== 57aa NzE5 VGhpcmQ= IHN0cnVjdHVyZWQ= X2JvdW5k 0L7QtNC4 IHdyaXN0 IG1hZ25pZmljZW50 IEFwcsOocw== IOyDiA== 1anVpQ== zIg= IFJhdGVz IHRlcmNl IOS5nQ== IGNvbnRpbnVh JSg= LlVO NzQx 2KfYptmC Nzgy IHdha2F0aQ== IG5lc3RlZA== IHLDqg== IGFsY2Fueg== IHRocmlsbGVk IHBlcmZpbA== IGFkb3A= IFNURQ== U3VwcGxpZXI= IHNob3Jl IOC2uw== IFNjb3R0aXNo INCw0YXQsA== IGJhcnJpZXJz ISEhISEhISE= INC/0L7QutCw ODk1 44Gq44GE LkFyZw== NzI2 IHdvaw== Rmxvb3I= dHRsZQ== IGViZW5mYWxscw== IGNvbm5lY3Rz IENvbmNyZXRl aXN0ZXJz IGhlcnY= 5bqE Wlo= IHJvYm90cw== IGZvcnM= bnlkZA== INGC0LDRgNCw b3VyZw== YXZlbGVk IGdyYWR1YXRpb24= IGh5ZHJvZ2Vu IHByb3RvdHlwZQ== IERV IGJlcGVy dHVy IGFkdm9jYXRl IEtleXM= INi12LHZgQ== IEhhbmRsZXM= IENV LlNFVkVSRQ== NTk3 67Cb IGV4cGVuZA== IFNraXA= IHBvdXM= NzMx IGt2aW5uZXI= IGthdW0= 0YjRgg== IGRpc2NyZXRpb24= IENhbmNlbA== INmK2LQ= ODQ3 IENpdWRhZA== IGNsaW1iaW5n SXRz LkV4dGVuc2lvbnM= INmF2KzZhdmI2LnYqQ== 6I+y 0L3QsNC9 IGV4cGxvcmVz IGluc2lzdA== INCw0LLRgtC+0YA= IHRoZXJhcGV1dGlj IEZ1w58= UmFk LlJhbmRvbQ== fSIsCg== IGhpZGluZw== IG1ldXM= aWxlcmk= ZnJpY2E= 6K6h5YiS6L2v5Lu2 PicpOwo= IERpZw== YW5ncw== 4K6/4K6v4K6/4K6y4K+N dGhyZWU= IHJlag== X2hvbWU= zog= IGF0dGVudA== 2LfYrQ== OTY1 4LSv4LS/4LW9 55yL54mH Jzw= Q09SRA== X2NvbnRhY3Q= 4LGL4LCc IGlzb2xhdGlvbg== IGNhdGg= IFNhbnRpYWdv 24zZhdiq IG9uZ2V2ZWVy IFDDpQ== IHZyb2Vn IHBsdXJhbA== 4Li34Lit4LiZ IEhlbmNl X0lOUFVU emFy IGVxdWFsaXR5 ODM4 IFNpdA== INGA0LDQsdC+0Yc= 4KuH4Kq1 XV0u IOWIqQ== IFVudA== LlNwbGl0 YWhrYW4= INC00L7RgdGC0LDRgtC+0YfQvdC+ ZmljYXM= d2Vl cG9sYXRpb24= 2KrZhA== INCx0YPQuQ== aWJsaW5n INmI2K8= X25ldHdvcms= J8OqdHJl IMSd IFBsYQ== INGJ0LU= IOm7hA== Lm1r IOGDqOGDlOGDoeGDkOGDruGDlOGDkQ== IENlcnRhaW4= YW1ibGU= IOq5gA== IO2ZnA== IFV0aWxpdHk= aXN0aWs= OTM0 NzY5 IOGDq+GDkOGDmuGDmOGDkOGDnA== UmVjb2duaXplcg== 2LfYqA== 4oCmLi4= c2Vjb25kcw== IE1vYg== 0LDQvdC00LDRgA== YmV6 IOaegemAnw== IOCkheCkquCkqOCkvg== IHByb2dyZXNzaW9u IEtuaWdodA== 16DXmdeq 4buNZA== 1aXWgNW7 INmI2LQ= J3s= IHRlcsOh 1aHWgNWm Lm1vZGU= IElkZW50aXR5 INix2KfZhw== bHVldG9vdGg= 0YDQuNC6 ZHVjZXI= IExPR0dFUg== INWl1oDVog== INmD2YbYqg== 6KqJ 5YWs5LyX IGh1bA== Y29w IHdpcmluZw== X3NvY2tldA== VW1h Olxc V2Vy IEZvdA== IOCkieCkqOCkleClgA== 5LiN5Lit cmF0dWxhdGlvbnM= INmI2KPZhg== b2dlcg== IEZpZnRo ODE0 IGVuY3J5cHRlZA== IOyatA== IENocmlzdG9waGVy IGNvbXVuaWRhZA== 5oOF5Ya1 YXZpcw== ZWxhaA== IGZ1Zw== MDU5 IHDDtWg= Njgx IERhYXJuYWFzdA== IHZldGVyYW5z aWJyZQ== INGI0YPQtNCw 4LSj4LWN4LSj IGRhbmRv 4LGM IG3Do2U= IG1hdGnDqHJl LlRvYXN0 IGhpa2U= IEJhbHRpbW9yZQ== Q1BV VGlwcw== IGJpb2xvZ3k= IE5hdmlnYXRvcg== b3Ji INGN0YTRhNC10LrRgtC40LI= 65Ok7J2A IFVudGls IGJlbmNobWFyaw== IHLDqXNlYXU= IFlpaQ== IGNoYWlybWFu 5rGJ 4LeT4La4 IGLDoQ== INGD0YHRgtGA0L7QuQ== 4KeA4Kas INCw0YDRhQ== IGJvcmVk IGxpY2hhYW0= 0LPRjA== IGltcGxpZXM= IGxsZW4= aXZpZGFk 4LS+4LS3 CiAK INGD0L3QuNCy0LXRgNGB VHY= Y2VycHQ= LmJhdGNo aW5rbGU= ZmxhdA== CXBsYXllcg== INK705nRgA== IH07 5aWl bWVuaXRpZXM= ZmFudA== UHVsbA== IGN1cnNvcw== PEs= IMq7aWE= NzYx INec16E= 5Yuk SmFjaw== IEZvb3Rlcg== IOCwmuCxh+CwuOCxjeCwpA== U3R1ZHk= 4KSU JzsKLy8= IOCknOCksg== bGFyZXM= IGFscGhhYmV0 aXNvbnM= IHBhcnRpY3VsaWVy IGt1c2g= IHRhc3Rlcw== IFRlZW4= IGRlZHVjdA== IG5lY2VzaWRhZGVz IEhhY2s= IHRyZWFzdXJl IGNm IHRlY2hub2xvZ2ll IFBJTg== 0qPRi9C3 IHN1bWE= IGNyYWZ0cw== xJts 0LvQuNC60Lg= dXJyYXk= X2ludGVyZmFjZQ== IHN0cmVuZ3Rocw== IE5hZA== Q29udg== aWZhY3Rz IGF2cmls IG9iZXM= IG91dGxldHM= Tk9O bGJs IMOpdGFudA== dWtzZW4= IExhd3JlbmNl z4PPiQ== IOeZvQ== TG9ncw== 4LWN4LSv4LSu xLFjxLE= IGRlc2NlbmQ= IHVuZ2U= IHllYXIncw== IGRpc2FwcGVhcg== aGF1cHQ= IGxpY2VuY2U= YW1pc2U= ODYy X2NsZWFu ODUx INC/0YDQtdC00LvQsNCz0LA= IGRvZQ== MDY4 7J207KeA IG1hbmFnZXM= IHJlZ2lzdGVyaW5n 2b7ZiNix IERlYWxz IFBlcA== IENhc2lub3M= bGVhdmU= YW5udGU= 0LXRgtGW0L0= ODcy IHN1Y2Vk IG1nYmU= 5bqK Y2FzdGxl IG7Eg25n IGFwcG9pbnRtZW50cw== aXF1w6k= IG5hbWFu INC70LjRgdGC IHJ1bGVk IE11bWJhaQ== IE1pbGl0YXJ5 cHV0YXRpb24= IGFicg== IE1BVA== IHRhcGk= IOCmleCnjeCmtw== INiq2LHZgw== IG5uYQ== w6hsZXM= X2Fu IGRlbWFzaQ== Njgz IHJlY292ZXJlZA== IHRyw60= LWVkaXQ= INmG2Kc= IGNyb3NzZWQ= ZWxr Nzc5 IEhvdXI= SURBRA== INix24Hbkg== IGthbGk= d2luZG93cw== IEJpYmxp INCx0LDQudC90LA= IG1hc2lo bW91dGg= IGV4cGlyZWQ= IEJha2Vy IPCfmIk= IGtsYXM= z4HOuc6x IHZlcndlbmRldA== IHByZWNpcA== INGB0YDQsNC30YM= IGdlbw== INi02KfZhdmE IOCupOCvhuCusA== INCc0LDRgA== IOGDk+GDkOGDlQ== INWK INGB0YfQtdGC IGRhdWdodGVycw== INCy0LXRhw== IOCmieCmpg== IExHQlQ= 5Y+R6KGo IGFsZXJ0cw== 1aHWgNWr 0L3QuNC4 VXBkYXRlcw== dWZ0 IHNlcmlhbGl6ZXI= L3Vp IFN5bmM= 44OH44Kj IEdQVQ== aGVkcmFs 4K6z4K+I IGdlbm9t IMOx 4YOQ4YOa4YOj4YOg IEFCUw== KXw= 5aix5LmQ5Z+O IHRyYWo= IOC4m+C4o+C4sA== 0LDQutGC U2hvdA== 4KuB4Kqy 0YTQuA== IGlzbw== PW4= 2LnYp9iv2Kk= IG7DpGNoc3Rlbg== 4LS+4LSm IOW9qeelqOWkqeWkqQ== IEzDtnM= IGNoYXJz a2Vlbg== 5aKe6ZW/ TUFD 4oCZb2I= LWJvb3RzdHJhcA== IHNsZWNodHM= IGxhcXVlbGxl 25DYsQ== b3VidGVk IEdyaWZm IFBhcmtlcg== LWNoaWxk IOCmuOCmmeCnjeCml+Cnhw== IGNvdWxldXI= 4Z6g IGdlbnJlcw== INix2qnavg== cmFlbA== IHByYWN0aWNhbGx5 IOyXrQ== IGpvdWVy dmVyZw== IHN0ZG91dA== IMO5 R1JBTQ== IFNwZWNpYWxpc3Q= KHByZQ== 0LrQtdGA 4KuN4Kqo YXp6am9uaQ== INiy2Yo= IHZpZ2ls QXJ0aXN0 INC00LDQu9GM ZW50cmFs IFNZ IEhvbGxhbmQ= U291cmNlcw== aWhlbg== IOe0 0LvQtdC90LA= Lmludm9rZQ== 4KWH4KSW IGl3ZQ== TEVBUg== IE1vZGVy cGly 5oCl UEVFRA== cGFyZXI= IEtheg== LXBvd2Vy LnppcA== IHVuZGVyc3RhbmRz IFN1YnNjcmlwdGlvbg== SmFtZXM= L3N0ZA== dm9pY2Vz IFZlcmbDvGd1bmc= INWp1b4= Um9t Q2x1Yg== YXppdW4= IEV4cGxvcmU= OTI5 X3NlbnQ= X3Vp YW1pbmF0aW9u IGJldGVrZW50 X1JJR0hU IFFS IGVzZg== 4LC+4LCn IHdhZw== IEdQTA== IHN1YnNlcXVlbnRseQ== IHN0aWNreQ== IOS5hQ== IGV0YXBh RGlyZWN0b3I= TEVY Njg5 4LC/4LCy4LGN4LCy dWl0YXI= 4YOj4YOu YWtlc3Bl bGxp VEFDVA== INGH0LU= IOeUtw== bWFjaGluZQ== IGFzc2Vzc2Vk aWxpcw== 0LDQudGC0LU= IGF1dG9yaXo= OTE3 IGFvbg== IGRvbmF0ZQ== INGC0L7QstCw0YA= 54yr IG1pYQ== ODk3 LmNvbGxlY3Q= IOCupOCuruCuv+CutA== 4Lia4Lia IHdhcm1pbmc= IHNhZ3Rl YWJpbGk= YW50aWRhZA== Wm8= IMOnb3g= IGNhcHRhaW4= YXNzYWRvcg== ZWN0ZWQ= 4LmA4LiZ IFdlJ3Zl S3U= IGludGVybmF0aW9uYWxseQ== 2YLZiNmE IEJhcHQ= INi52LHYtg== INC00LjRgA== KExldmVs IGZ1c2lvbg== IG1hbnRlcg== X0VYUE9SVA== U0laRQ== PiIK INin2YbYrNin2YU= IEphdw== IENOTg== IGdvdmVybmFuY2U= IGRlcmVz 2LHYp9ih IG1pbHk= LnVybHM= IFJldmVyc2U= IGR1ZGE= IGRlc2VydmVz IG3DoXk= LFN5c3RlbQ== IOCqleCqsOCrhw== IGhvZ2U= b2lkcw== b3ZlZWw= PXA= 4LCV4LC/ V3Jvbmc= XEVsb3F1ZW50 PWk= IGdsdWNvc2U= bGVyZQ== IEFueW9uZQ== IGRlY2lkZXM= IGltYWdlbQ== IGNow7puZw== IHdlbGNvbWVk 0L7RgNGD ZGlzcG9zaW5n IGNhcm4= c2Nhbg== Lmli 4YOV4YOQ4YOc YXRyaWNl IFlvdSdyZQ== IEJlYW4= IFZpZA== Njgy IGxpbmtpbmc= INin2YTYrtin2LXYqQ== ZWFydGg= d2VnZW4= IGx1Y2h0 LmRpYWxvZw== IGV4dHJhY3Rpb24= IHJlc3BlY3RlZA== IGJhbGQ= ICk6Cg== IHNpeQ== IHBlcmx1 IHByw7Nwcmlh IFNoYW5naGFp U2FsYXJ5 IG1hcmdpbmFs IHN0aWZm 4LmI4Liy4Lii4LiC4Liy4Lii 0L7Qs9GD 572R5LiK IOCkqOCliA== IGNhZWw= IGV4dHJhY3RlZA== X3BvaW50ZXI= INC/0YDQuNGF IG9wcG9uZW50cw== Nzk1 TU9ERQ== LlBsYXk= IER1YWw= cHJvdmU= 16bXnA== 0YHRgtOZ LkJvbGQ= X3NoYXJlZA== 1bjVow== IHZlc3NlbHM= IFhpYQ== IE5I X0dFTkVS LnByb3ZpZGVy 5o2V IEZhbWlsaWU= IGphZGk= 4KS54KSw4KWA 5rOo5oSP INin2YTYtdmK2YY= YWxrYQ== IOaXoA== 0L7QstGL 0LXSrw== YWJsaXNo TWVyZ2U= LlRhZw== IGZhdm9yYWJsZQ== IHBhY2tz UG9sbA== IGludmFz IOGDoeGDrA== IOCqquCqoQ== YXRnZQ== IHZpw6pu IGtyYWNodA== IHNww6R0ZXI= IGFsaWduZWQ= LmNvbXBhbnk= IFNhbXVlbA== Ijw8 b29kbGU= IGVjb25vbWljcw== IEZlbg== IHBsYWF0c2Vu INmC2LPZhQ== IFBpZWNl 4LSf4LWN4LSf4LWN Ci8vLw== 0LTQsNC10YI= IFN1cmc= U29tZXRpbWVz LlRpdGxl IOCmheCmqOCnh+CmlQ== U3dhcA== IEJ1ZW4= IENoZW4= IHByb250bw== LXdvcms= ZXJubw== aWxpZ2U= IGV4Y2hhbmdlcw== IEdydXBv 0YjQtdCz0L4= bWFwcw== IGFjaGlldmVtZW50cw== IHdlbmE= 56S8 IGxldmVyYWdl IGFmZ2Vsb3Blbg== U3VmZml4 QWx3YXlz IHdlcw== LkRvY3VtZW50 OjpfXw== ODU5 IG1hcmNhcw== Y29pbnM= X3NldHRpbmc= b3ZlbmQ= ODMx IHTEgQ== OTg5 Y29tcGV0 2YfZhw== W3Bvcw== IGJsdXI= IEFkbWluaXN0cmF0b3I= RGF0b3M= IGF1dG9yaWRhZGVz ZmFzcw== IG9rbw== fWAsCg== JScsCg== IFdlcnQ= IEVi IGjDpHR0ZQ== 2YTYp9io IENvdXBvbg== INCQ0Lc= VGFy dXNzdA== IHByw6lmw6ly IO2d IGVzc2Fz 0ZbRiA== 4YOV4YOY4YOa IGRpc3RhbmNlcw== Nzky IGVkdWNhdGVk INW01aXVrg== IEhvdXNpbmc= LXBsYXk= IHN0ZXJr INC/0YDQuNCx cmlqa2U= JyIs 6529 IHByaXZpbGVnZQ== IGF1cmFpdA== IGh1bGxl IG3DqXRvZG8= 4KeA4Kao OTMx z4XPgw== INWr1b3Vrw== X2NvZGVnZW4= LmRhdGFzZXQ= MDc0 b3JnYW5pemF0aW9u LFI= IGRlcHJlc3M= INCw0LHQvg== INC80YPQt9GL 57ud INmG2LU= IEh5cGVy bnl0 INW91a8= IOuLrA== INGH0LjRgdGC IGdhcmFudGly 0qHQsA== cm9taXNl 6ag= 5Zug5q2k INix2YjbjA== cXR0 4LmB4Lil IENhdg== IFNvdmlldA== IE11bmRpYWw= TUxF IHJldmlld2luZw== c3RvZg== IHJldGFpbGVy IGludGVuc2l2ZQ== 4bqhbmg= IHNsdWc= IGZpaw== IGJvYXRz 4KWN4KSw4KWH4KS4 INW+1oDVoQ== Zm9z 0YzRjtGC INiq2r7bjA== lOGDoOGDlw== ICpf IE1pc3Npc3NpcHBp IOGDkuGDkOGDlQ== 0LTRltC6 2aA= IGNhcnRh IE9wZXJh bGxsbA== ZWxsdW5n INW41oLVsg== X0RC TG9nZ2luZw== 2KjYp9it IEhlYWx0aGNhcmU= YWludGVy IGxhdXQ= aHRhZ3M= IGZ1dHVy dWxhdGl2ZQ== IGdlaMO2cnQ= IGFzcGVjdG9z IE1BUg== IGRpdmluZQ== W2Q= IERlc2t0b3A= INin2YTYo9mF2LE= IOCkh+CkuOClhw== VG9v 4Lij4Liy4Lii INmB2LnYp9mE aWZmaWN1bHR5 R2VuZXJhdGlvbg== NzUz LnJvbGU= IGp1bmlv IG51cnNlcw== 0LDQu9GM0L3QvtC1 6I2v IHdlcmRl RWs= INGF0q8= IGNpcmNh IOCuleCviuCuo+CvjeCunw== X3ZhbGlkYXRpb24= IFNQRUNJQUw= KCk6DQo= LmFkYXB0ZXI= aW52b2ljZQ== IGpvdXJuYWxpc20= aG9yYQ== w6hkZQ== X2J5dGU= xKt0 IGFzc2lzdGVk INC60LDQttC00YvQuQ== 0L3QuNGG0Ys= IHJldGlyZQ== INGH0LXQs9C+ Njcz IGluZmluaXRl 5o6I X2JpdHM= IGJyYWtl 4KSC4KSV MDk3 2qnbkg== IGRlYWxlcnM= IHnEsWw= OTgx IGF0YXM= cnVr 4YOY4YOg4YOT SHVtYW4= IOCqnOCqvuCqow== 0LDQs9Cw O3M= IHBocA== Z2VtZW50 IHN0ZWVw IGVmZmVrdA== YWludGU= SXNz QmFu ODE3 Y2FkZQ== ODU2 IE5haw== IEVsaXRl SW1wbGVtZW50YXRpb24= cmV0dmFs RGVjb2Rl Y3JlYXRvcg== dHJhY3RlZA== NzU4 INmF2YXYpw== KE1vZGVs 5Zu95YaF IFJ1bm5pbmc= IOeIsQ== INm+2YjZhA== IOaApw== 1aHWgNWq IOCksuCkv+Ckr+Ckvg== IENhdGFsb2c= IFdpcmVsZXNz KHJhbmRvbQ== IGJ1bXA= INmB2LY= ZWxsaWs= IGxhcHM= aXRvbA== 0YHQvg== L2Fw aGV5 IEZpbm4= IGRhcmY= 0LXRgtC10YA= Z2VyaWNodA== cmFh IGZpbmlzaGVz ZWRpbg== IGhvcGVk IOCkheCkqOClgeCkuOCkvuCksA== 77yK IHRlcnJpZmlj 6K6h566X IOCqleCqvuCqrg== bWV0cm8= IEJyb3RoZXI= IGZvcsOnYQ== IGFpcnNvbg== VG91cg== 4LC+4LCk4LGN4LCw IGFjdGl2aXTDqXM= 44WL IGFib3J0aW9u Lz4uCg== INeR16c= Njg0 IFNlbGw= Y3VlbmNpYQ== IG5vbmV0aGVsZXNz 4LGH4LCw IG9hbg== IEVWRVI= IMOubnQ= IGJlZG8= IGNvbnZvYw== IGFsbG9jYXRl V2UncmU= yZlo fS8kew== IGJpbGxpbmc= IHRyYW5zcGFyZW5jeQ== IEFyYWJpYQ== IOyngQ== IOCmj+Cmrg== Pyc= ICAgICAgICAKCg== IGt1cnM= ODI3 5aSp5LiL 4Kuo ODQx Y29tbw== IG9wZ2U= IGZvcm1hY2nDs24= 2KfYsdmI b3J0YWw= INin2YTZhtin2LM= MDU4 asWh IEdV X2ds 4YOQ4YOr IGRlbGF5cw== LmV1 ZW1wb3Jhcnk= QmVuZWY= IFN0ZXBo IENsZWFuaW5n LkZvcmVpZ24= IHBhcnRlbg== RkFR 5LiT5a62 IHVhcw== IHNpbmd1bGFy aXNjZQ== YmVyZWljaA== bWg= INC00LLQuNC2 IEJhcmJhcmE= T0xMT1c= IGxlbmRlcg== ZnRhcg== UGVycw== IOCqsOCrgOCqpOCrhw== ODkx INmB2YLYrw== IEhpcA== INGC0LLQvtGA IGJyZWFrZG93bg== QWxp IGlycmVz R3JlYXRlcg== IE5vbQ== IOCoueCpiw== IGvDpHl0dA== Ym9z 2YjZhtuS IFNvdXQ= SW5jcmVtZW50 w7hu IOu4 X1VQREFURQ== 6LC3 0LLQsNC70Lg= Kyspew0K IGNhbm9u IOCkteCkv+CktuClh+Cktw== 2q/Yp9mG INC60L7RiA== cGxlYXNl IE15c3Q= INC00LjQtw== dmVyc2lvbnM= IFBPUg== c2FtZQ== 56eR5oqA d2VsdA== dWxhaXJl IHJlZmVyZW5jZWQ= IGZsb3JhbA== INeQ154= Z2xpZw== IGFjY2nDs24= IGlkYWRl 0LjQu9GP IEhpbGZl ZGRpZQ== IEtO IG1pZWw= 4KqV4KuH IGNydWVs IG1hbGE= 4Kim4Ki+ 0LvQuNKb0LjQvdC4 LXNv IEVOVA== IGJsZWlidA== YWx1Z3U= IGdvdXI= IExFRlQ= IHdha3R1 Q3Nz 0LjRgdCw IGNoaWM= IGRhdGFiYXNlcw== IGpvcm5hZGE= IHZha2FudGll IGRyZXc= 4Ka44KeN4Kav bmF2aWdhdGlvbg== IEZhbnRhc3k= IGNpdGVk IHVwZ3JhZGVz IOC0leC1hg== aW5zaWM= 4LKh4LOG4LKv IGNvbnRpbmVudA== IEJlaWppbmc= xLFrbA== IHZlcnA= LWhpZ2g= cHLDqHM= LUFtZXJpY2Fu IE5J IMO2xJ8= U0VD SGFuZGxlcnM= IGphbnVhcmk= IGJlc3RlaHQ= 15HXqNeZ150= IGFsbWFj 4KWJ4KSy aWVubmVz cWQ= IGltcGxpYw== IGt1bHQ= IEROUw== Y2xp 4LK/4LKf IEFjZQ== c3By bmFudA== IEdlbmVyYXRvcg== IHRlbGE= IEJ1bg== IGRvb2Q= INGB0L7RhtC40LDQu9GM LHd3dw== SGFsZg== IGV2b2x2ZWQ= IGFwcGFydGVtZW50 16TWvw== INC/0L7QvNC10Yk= IGtvbnRyb2w= IOih IErDoQ== YXJsYQ== bG9k U3ludGF4 X2Vycm9ycw== 4KSs4KSC4KSn b2xr 44Go44GG 5ZGo5bm0 YW7Dp2Fz 4YOY4YOj4YOg4YOY Ym9hcmRpbmc= 4KS24KWN4KSv4KSV IENyeXB0bw== dXRpc3M= IHN1Y2hlbg== IHBlcm1pcw== 55S156ue IGNsYXM= IG1ldGhvZG9sb2d5 IG11emll 5ZyW54mH IHBhcnRpZGE= IGRpc3RpbmN0aW9u CWtleQ== IHZpxaFl IG1lbnRvcg== Nzk3 INCx0YvRgdGC0YDQvg== INGC0L7QuQ== IENsaW5pY2Fs YXRyaQ== RmVlbA== IGtsYWFy IMOC IHNpbXBsZXI= IGNlcmFtaWM= 4Ka+4Kac4Ka+4Kaw IHJ1dA== 4YOY4YOe cnVudGltZQ== IHZhbXA= IGp1bXBlZA== cmVjZXI= IERvbGxhcg== IHNvdWZm IHllbQ== IOC4muC4sg== IG3DrW5pbW8= IFBoeXNpY3M= 15nXmdei16g= ZWJvbA== 5Yi4 IE1hbnVlbA== IG1pbGxl TG9jYXRlZA== 77yM5Lmf INGB0L7Qu9C4 IH0pDQo= IGVhcmxpZXN0 IHRlbXBvcmFyaWx5 Lm1ldGE= IHZhbGxleQ== NzQy IEh1bmc= IOC0h+C0qOC1jeC0pOC1jeC0rw== 4Kmc 4KWN4KSX INiq2LPYqg== LnRoZW4= YWhhbmE= IOCwleCwsg== X0RS X0JBQ0s= IGFncmVn X2NlbnRlcg== LmZhaWw= IHB1cnN1aW5n bWluZQ== ODg0 IGNhbGN1bGF0aW9ucw== INiv2KfZhti0 IO2WiQ== IHRoZXJhcGlzdA== INGB0L7QsdC+0Lk= INK706nQutKv0Lw= PiI7DQo= OTcx W3U= 0YvQvdGI0LA= X2xhdA== w61uaW8= IGFkb2xlc2NlbnQ= IHNwb3J0aW5n IENoZXI= IGJlZGV1dA== ZnV0dXJl IGNvbnN0cnVjY2nDs24= IGZpbmFuY2Vz INC00LDRgdGC 5aaI WUxF IG9jdHVicmU= IFJhZGk= j+CkleCkvg== 0LrRltCy c3BpZWw= IGNvbXByZQ== ZHVl IOyymA== 2LLYqA== IMOy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4LiI4Liz IFNQSQ== aXphZGFz IOGDo+GDpOGDoOGDnQ== Njkz CXNlc3Npb24= IGNpbm4= IGdlbmVyYXRlcw== IGRlbcOhcw== IGNvbWJpbmluZw== INeg15A= IEJyb3dzZQ== IEl0YWw= aXNlZXJk ZsO8aHJ1bmc= aG9vdA== w6RobA== JCgiLg== z4HOtc+C IHZhbHQ= ZW1lcnM= LnRlbmNlbnQ= UmVmZXI= IG1pbGl0YXI= ODg3 LXNldA== 5Y+l IFRha2luZw== IERFTEVURQ== VmE= IHBlYXU= OTY5 IHRyZWJh IHVuY29u IFdheW5l 4Ka+4Kak4KeN4Kaw 6auY5riF5peg56CB IERlcGVuZA== 5bCB X3BvcA== 4LC/4LCo4LC/ TXVz csOocw== IFJvYm90 Y2Nv IGtow6Fj TWlkZGxl OTc5 IOCkheCkp+CljeCkr+CkleCljeCktw== 4LSo4LWN4LSx4LWG IOCmreCmvuCmsg== LnZ1ZQ== IGVuY3J5cHRpb24= 2YrYp9mF INC60LvQsNGB0YE= 4oKs4oSi 5oqV6LWE 0Y/RjtGC bG9hbg== IG9jY2FzaW9uYWw= IGt1a28= IGdlbWFra2VsaWpr INGX aWFnbm9zdGljcw== IHphaGw= a2FudA== w610ZQ== INC20LjQstC+0YI= asOzcg== b3Jnb3Q= 4LSH IHRyZWlu U0Vycm9y 55S16ISR54mI IOC5gOC4gg== 15nXow== IGZyZWFr aXNpZXJ0 Q29uY2VwdA== IHJvbWFudA== IOCkleCkguCkqg== INin2YTYudmE2YU= aXlvbg== LWFwaQ== INGB0LLQvtC40YU= UG9seWdvbg== Nzk2 YXJnZW50 aW1lbnNpb24= INCw1KU= Z2FiZW4= Ym9va2luZw== YXNhbA== 4oCZYXJ0 IHByb2Zlc3Npb25uZWxz 4oW0 b3VidGVkbHk= cmVzc2Vy 4KWN4KSw4KWA4KSv IGRyYXdpbmdz INKb0LDQsQ== c2VjdXJl IGNvbXByZW5kcmU= jbw= X3RpbWVvdXQ= dW1iaQ== IEphbnU= 5r4= IMOhbg== c2Vjb25kYXJ5 LW9wZW4= Lk1hcmdpbg== IExlZ2VuZA== Lm1vZHVsZXM= IHF1YW50dW0= IGFwcGxpY2FudA== IGNvbnRpbnVhbGx5 IFBpenph IHN0cmFuZA== 0YDQsNKb YXVnZQ== IGJsb2I= OTc2 INec15TXmdeV16o= 77yM5LuW Y2VuZG8= INqp2YbZhtiv IEF6dXJl IEF1dGhvcnM= xJ9pbmk= IGF0b3I= IEplcnJ5 IOCwpOCwqA== U2VlZA== 4LSk4LWN4LSw IHBoYXNlcw== Njky 4oCN4LSV4LWN4LSV4LWN MDY3 IG1lbGFrdWthbg== aW5hbg== VHJhbnNmb3JtZXI= Um90YXRl IGxlYQ== QCIs IOCynOCyqA== KG1haW4= IHF1YWxpZmljYXRpb25z IGNvbmhlY2ltZW50bw== IOKGkQ== 5b+c IM+Dz4TOuc+C dWJ1 IHN1cHBs IM66zrHOuA== cmVpYnVuZw== IGzDtQ== IOCkquClguCksOCljeCktQ== X0FORA== IHRhbmtz IHJhZGFy 16TXmQ== 4oCZYXR0 IGhpdg== IGxpbWl0ZQ== IEZlZWRiYWNr LlRhc2s= IERhYmVp IGp1cmlzZGljdGlvbg== 4YOj4YOT JkI= IGZsaWNr b3RoeQ== 4LGB4LCV4LGB 4YGC 2K/bjA== IGlybQ== 5Yek5Yew bGFudA== IGNoYWs= IHJlbWluZHM= IGdlc3Rpw7Nu dW1hdGlj ICc7Cg== 56qB 6IGe IHBvZXQ= INin2LPZhQ== cHJldGVy LmJ1ZmZlcg== INGA0LXRgQ== aW1pcg== 0LXQudGC IGlyaQ== IGV4cMOpcmllbmNl IERpZXU= INC90LXQsdC+0LvRjNGI 4Kal4Kau IGVlbnZvdWRpZw== IHBoeXNpcXVl ODY5 aWVlbA== REFZ 0LDQstC70Lg= Lmhpc3Rvcnk= Z2Fhbg== INin2YTZgdix d2VycGVu 0ZbQsQ== Vm9pY2U= IHLDqXN1bHRhdHM= Y2FwdGlvbg== INC30LDQutC70Y7Rhw== IGpvbg== IHRyYXRhbWllbnRv KS5fXw== CW1lc3NhZ2U= IEJlc3Rl INC/0L7RgtC+0LzRgw== INmF2YbZhw== IG1vcnBo IHBvc2liaWxpZGFk IOCqquCri+CqsuCrgOCquA== IHBvZGVyw6E= aWxpcg== ZXdlbA== IG1hcmt0 IEFybg== L25ld3M= 66ed IFZpYw== 15HXldeT15Q= 54iG IHNhbWI= X2ludGVydmFs IG51dHplbg== IHN1cGVydmlz IGVuY291cmFnZXM= DQoNCg0KDQo= ZGFv IGFkanVzdG1lbnRz 2YXZhNmD2Kk= IOOBig== IGFpZGU= IE1lZ2E= 4KS+4KSg4KSu IFNUQVRF zr/Phc+BzrM= IGluZXhwZW5zaXZl IFdhbGtpbmc= IGF1bWVudGFy ODU0 652866eI YmVyZW4= IGJla29t IGV4aXN0ZWQ= YXRha2E= LldoaXRl IHN1bGxh INC/0LXRgQ== TnVtZXJpYw== OnNldA== PHRhZw== IHByYWNodGlnZQ== INC40YHRgdC70LXQtA== UGFydG5lcg== ZXNzb2E= IHRlY25vbG9naWE= IHVudmU= IHBhcmxhbWVudA== INqp2YjZig== LicpCg== 0YDQtdC/ IGtlbnQ= 0YPQtNGL IOCyruCzhw== IHRyw6xuaA== bXXFnw== VU1Q IGJhY2hlbG9y 0YTRgtCw z43PhM61 OTU0 5YiY IFBkZg== IOCujuCuqeCvjeCusQ== fX0sCg== 5qaC INCw0L3QsA== YmVzY2g= IGRpZXRh IHN0ZWVyaW5n X0NUUkw= 4oCm4oCd INis2YbZiNio YWNpZXM= QmVsb3c= bnVtZXJpYw== YWRlcm8= Z29lZA== 4Li14LmI4Lii 4KeN4Kab X0ZPVU5E IEluc3RhbGxhdGlvbg== IEFhbg== RG9n 2LrYtw== IGhvdHQ= c3Rt INis2Yraqg== IG1hdGhlbWF0aWNz IGdseQ== YXNzaXM= IG1hdMOpcmk= 0YPQtdC40YI= UGFydGlhbA== IGVudGZlcg== X3ZhcmlhYmxl IGFrcw== IHJlc2M= INWl1b0= IENPTlRSSUJVVA== YWJpbGl0w6k= eWV6 IGZhemVuZG8= INep15zXkA== INGB0L/QvtGA0YI= IFByZXBhcmU= VWw= 15jXog== IOCopuCovg== YmVl YXBpYQ== cmVhdG1lbnQ= YXRpZXZl LXJlc3BvbnNpdmU= LkNvbnRyb2xsZXI= IHDDumJsaWNvcw== TG9zcw== IOCqnOCqow== dmlzdWFs IGluc3VsdA== cHJpb3JpdHk= IGRlY2xpbmVk cmVkdWNl IOa1tw== LmxheWVycw== cHJlY2Vk IERleg== d2VrZQ== 4KS+4KSh4KS8 aXNzZXM= X3dlaWdodHM= IGFjY2lvbmVz NzY0 R2k= emVpdGln Q2FwdGlvbg== RWRpdGFibGU= IG5vaXI= Z2F0 IG15bmQ= IGN5dA== aXRpbQ== TWFpbnQ= VGVhY2hlcg== IOCkreCkvuCksOCkpOClgOCkrw== OTMy IGNvbW1lbnRlZA== IGJlc2NoZXJt IHRoZWZ0 OTM2 KdiM CXRpdGxl dWFydA== ODI0 IOS4i+i9vQ== dWFyeQ== X0lk INmI2KfZhNiv INmE2Kw= IG13ZW4= 4oCZYXI= 4oCZZW50 IGNvbW1lbnRhcnk= LnZpZXdz IHRoYW5rZnVs IGRhdG8= IGFzZQ== INGF05nQuw== IHBpw6hjZXM= IGluZmx1ZW5jZXM= IENoaXA= LnJvdXRlcg== IHByb3NlY3V0 IHByb3RvY29scw== IGxpbmV1cA== IGFuYWx5c3Rz IGNvbXByaXM= INCh0LDQvA== IG9sZHXEn3U= IHBvdW5k IHBlc3NvYWw= IGFtYXpvbg== IHByb2plY3RlZA== IGFtcGxl IGhpc3Rvcmk= YWtlc3BlYXJl RGV2aWNlcw== a29q OTQ0 IHZvaXR1cmU= IG9vZw== 0L7Qu9C+0LI= 0YDQtdGI INmD2KjZitix2Kk= NzQz X0ZF IENhcnRlcg== Q1NT ICcpCg== IGRvdmU= LmJhZA== 5piv55yf55qE IGZpag== 4KSw4KWN4KSh IGFlc3RoZXRpYw== LXBsdXM= INCx06k= IHlhYg== IGxpbmVk U2hvcHBpbmc= IHRyYWRlbWFya3M= IHTDqWNuaWNhcw== LicK IGJvdXc= LnRyZWU= Uk5B IHZpag== IHByaW5jaXBpbw== 4KSm4KS/ IGtow6FjaA== IGVsZXZhdGVk 4KS+4KSJ4KSB X0NBUA== KHJlYWRlcg== IHByYWN0aWNpbmc= Lk12Yw== IG5ldHRv INC/0L7Qu9C40YI= IHByZXNjcmliZWQ= ZW1icg== INGB0LDQvNC+ LHRydWU= Nzgz IHBlcnN1 IGVyYW4= IGknbQ== INGD0LTQsNC7 ICIpLg== IGlubm9jZW50 LmxvYWRpbmc= b3N0YXQ= IHJvc3Rlcg== IG5hbWVseQ== OTU5 INCy0L3QuNC80LDQvdC40LU= w7xuw7w= Y2xhaXI= INCz0YDQsA== IFZlcnRleA== 0YHRj9GH INio2oY= IEdlYXI= ZGFk SVNUUg== INi02YjZig== KSkKCgo= IHZpdnJl CVVzZXI= INC/0YDQuNC80LXRgA== IHBvbMOtdGljbw== IGNvbmRv IE1hZGlzb24= INio2K/ZiNmG 6L+F IGludGVyZg== IGVpbmRl IGNld2E= INCz0LXQvQ== IOKAug== CXF1ZXJ5 IEdvcmRvbg== IGFtaXM= IGluaW0= U2NoZWR1bGVy b3bDoQ== IOCkteCkv+CktQ== IENhYmxl LWJs IGdhdGV3YXk= IOCkmuCkvuCksA== VEFJTA== LmNhcg== IGVyaw== IEFhcm9u IOC0quC1ig== YXB0aXZl YWRheQ== IGlyZW8= IHNpbGx5 xZtsaQ== 5b+D5rC0 IHJlcHVibGlj dXJiYW4= IGJhYw== IGFuaA== 2YbbkA== IGluc3RpdHV0aW9uYWw= INqv2LHYrw== IGrDpGw= w6lkaWE= 2LnYr9in2K8= IGFjZXN0 5q+S 77yQ77yQ IEhW ODM0 Q292 0LjQstCw0L3QuNGP cmV0ZW4= 4Ka/4Kao4KeN4Kao IGhpc3RvaXJl cm9ycw== IGJpdHRl 7Yq5 IHR3ZWV0cw== 4Z+W NjU5 4LmJ4Lit4Lih IENMQQ== IG1haW9yZXM= IGVsw6k= 57qz IHByb2Zlc3Npb25uZWw= 4LmA4LiL X0NP RlJFRQ== 4LWA4LSV4LSw IHdvb2Rz ZW50aWM= LWNsaWNr 4buTaQ== IGFzc3VtaW5n 4LmH4Lih INGC0YDQtdC9 IHJla2VuaW5n IGdlemllbg== IO2PiQ== 6L27 4KS24KWA LkN1c3RvbQ== em0= IGdhbWVycw== X1JY dXRpbGl0eQ== IHdvcmU= zq/Otc+C 4Lij4Li4 4Kqw4KuH INGD0LY= IEd1YXJhbnRlZQ== eGZmZmY= IHNpbGE= Q1JFQVRF Z3VscA== X2RvbWFpbg== Y2FtZXJh 0L7RgdGC0LDRgg== IGF2b2lkaW5n aWzDoA== IHNtb290aGx5 KE8= IERlcG9zaXQ= aXNvYQ== 2pPZig== a2xhc3M= IHRhY3RpY3M= OTgy IE1L VGVtcGxhdGVz IHVzZXIncw== IHdlZHN0cg== IExvdHM= 5pa56Z2i YWxvbmU= d3lu INOZ0Lw= 0YHQsNGC bGFyZGE= IFByZXo= IE5lbQ== Q29uc2lkZXI= INGN0LvQtQ== 5ZCI5L2c ODUz 5rWq IFNldmVu IGtlaQ== IFNlcmlm IGdsYW0= IGlhZA== cXVlbmN5 IGp1ZGdlcw== U3B1dG5paw== 4K6/4K6a IE9X IGV4ZWN1dGl2ZXM= IM+Dzrc= IEVjbw== LkRlYw== IO2VmOuCmA== INiz2LnYsQ== bsOtY2g= 2KjYr9ij 6L6T5YWl IHNvbnN0 KHVwZGF0ZQ== UmVsYXRpb25zaGlw IOS6uuS6ug== 0LXQu9C+ ZGVsYXk= 7Yyo INGH0LDRgdGC0Lg= INC+0YbQtdC9 X0NPTlRFTlQ= IFdoYXRldmVy RE9XTg== IERvdA== IE1Y LndlaWdodA== IGVuY29kZXI= 1bjWgtWs IGHDrQ== IHRyYW5xdWls MDc5 X0FC ODcz IEZpZWxkcw== 6I635Y+W IHNodXRkb3du X29sZA== X2Nvbm4= 4YOQ4YOq4YOY4YOQ 4peG IEx5bg== IGJ1cm5lZA== 0LDQstCw0LQ= IGdlbGlqaw== IFp1cg== TWFkZQ== IGVzY29ydGU= ODc0 IGNvY2t0YWls Q29kZWM= IHZsZQ== LnJlZHVjZQ== V29ya3M= UmVxdWVzdGVk X25vdw== IGJyaW5nZW4= IGFyY2hpdm8= IOGDm+GDneGDnA== CUE= ZGc= IHNwZXI= dG90aW1l aXJ1 IGF1aw== IGdyb290c3Rl IGxhbmM= 2KfYs9uM 4Ka/4KaT INC60YPQvQ== 0ZrQsA== IGd1YXJhbnRlZXM= 4K6+4K6x 4KeN4Kav4Ka+4Kay IOCmhuCmuQ== INC+0YLQv9GA0LDQsg== RW5jb2Rl 0LDQu9GL0L8= 4LSF ZmF0 INin2YHYsg== W2N1cnJlbnQ= Y2hlc3RyYQ== IGFjY2Vzc2liaWxpdHk= U3VwcGx5 RmFy LWxhdw== IFByZXNpZGVudGU= V2F2ZQ== IGN5Y2xpbmc= IHNpZGVu IHRsaA== KCkpKTsKCg== IOCqrOCrgA== IENsaW5pYw== aXJtaW5naGFt X2NvbnRyb2xsZXI= 4Kqm4KuN4Ko= IGJvbGFz LGZhbHNl Njk3 INGA0LDQvA== IGRlZmluaW5n LmluaXRpYWxpemU= IFNhw7pkZQ== IGNyw6lkaXRv IExpc3Rlbg== IOyXtA== b3Bpbmc= INGA0LDQsdC+0YLRgw== IE9zdA== RWluZQ== IHR1dm8= ODM5 QWJpbGl0eQ== bG9lZA== NzM5 R2VucmU= ZmVyYQ== 4KSq4KS+ IGhhZnQ= 6LWE6K6v IGJlbGllYg== IFByaXg= bWluaXN0ZXI= IFVJQ29sb3I= c2xpY2U= 4LeS4La7 IHdhbm5hbg== 0KHQog== Um9ib3Q= bmV2 ODQ5 amVjdGVk ZHVjdG9y UGl4 2KzYsdin2KE= IOWVhg== INmE2Yjarw== aXBzZQ== IOGDkOGDk+GDkg== IOGDp+GDleGDlOGDmuGDkA== 05nQvdOZ IHNlcsOtYQ== cHJveHk= X2Fzc29j INmF2YjYp9iv IG1lcmdlZA== 157XldeT IOCupOCvhw== LE4= IHF1YW50aXRpZXM= LWFw IGRvdXRl 4LKV4LON4LKw IHBlcnNl bGVsbw== IOGDkuGDkA== IHBhbnRhbGxh IHBydWViYQ== LmVuYWJsZWQ= ZWVwZXI= ISEhCg== 0LjRhtC40L0= IHNtcw== IHNlY3JldGFyeQ== Njk0 INin2YTYp9is2KrZhdin IOC0ruC0sA== IG1hbW0= CXdyaXRl IFp1bQ== IGhpeg== X05FVw== OTYx 0YHRgtCy0LXQvdC90L7QuQ== IGRpcmV0 ODQ2 wq1z YWNrYmFy IGZpbG9z IFNVTg== IGhlcmJz LWVzdA== IGNvbmNlbnRyYXRpb25z IGNhcnJlcmE= w61w Lmd6 Ym94ZXM= IHVud2FudGVk IE5laXRoZXI= aXRvcmVz IOCqiA== INGA0Y/QtA== IOaZ IOav IO2ZlA== 4LK/4LKk4LOB IFRoZXJhcHk= IOGDoeGDkOGDkw== IHDEgQ== INGB0L3QuA== IEZhbnM= IHVuaWRhZGVz IGNvbXVuaWNhY2nDs24= IGNvcnJlcw== bWVtYmVycw== INC40LPRgNGL IExlYXRoZXI= LHc= bWVsZHVuZw== IFdITw== CWluaXQ= INWh1bbWgQ== IOCkquCkvuCksOCljeCkn+ClgA== INKb0LjQu9C40Yg= YXrEgw== cHVlc3Rhcw== 0LDRjg== INeo16I= 0L7Rlw== IGFtYW4= 4KeN4Kav4Kau 6rKA YWt0YWTEsXI= IOCmhuCmnA== IG1lbWNweQ== c2t1 LkJlZm9yZQ== 4KS44KWN4KSl4KS+ 4LeA4LeP 5ZKo YWxsZXJpZXM= IGNvdHRhZ2U= aWxsw6k= YW5rYW4= IGNvcnM= IOS6jA== VmVyaWZpZWQ= CWNvbG9y bmVhcw== IGTDtm4= dGhpbms= 1oDVrw== Y2FsYw== J109 5b2x54mH Njc0 1avVsw== YXJzYQ== OTI2 IG1vbml0 IGdyYWR1YXRlcw== 0LDQvdGB0L7Qsg== IGbDvG4= IHN0aXA= OTc0 IGhhdXRl IOydtOyaqQ== IExhc2Vy IOW9qeelnuS6iemcuOmCgOivt+eggQ== 6YCC xZtjaWU= IGNvbnN0YW50ZQ== IFNvbW1lcg== IG1ha2tlbGlqaw== INmD2KrYp9io PyM= w7xuZGVu IEhlYXZlbg== IGludHJvZHVjaW5n OnNz X3VwbG9hZA== IGJlc2lkZQ== IHNob2NrZWQ= ZXN0eQ== 2KfYptmF2Kk= LnBl IGludmlzaWJsZQ== IGF0aGxldGlj IGhlacOf bG9i V3JpdHRlbg== IEt3 IEFpZA== KT0+ IFhDVEFzc2VydA== 67mE7Iqk bG9yZA== IFRob21wc29u UHJlZGljYXRl IGd1ZXJyZQ== IElsbHVzdHI= LXdyYXA= INGH0LDRgdGC0Yw= 05nSrw== IHRpZXQ= 6Imy57u85ZCI PWdldA== Lml0ZXJhdG9y INqH IMOT K2k= IO2VhOyalA== IOCmhuCmruCmvuCmsA== w6ptZXM= J2Fycg== dGly IG7DvQ== 5a+G56CB IGFyZ3VlZA== w7ppbA== IG9yZ2FuaXphdGlvbmFs IFJFU1Q= IGNvbGVn UmVwZWF0 IEppbW15 XSI= CWhlYWRlcg== IHNpaQ== INiu2KfYsdis 4LGB4LCC4LCm c3RlcnJlaWNo IEJsZQ== IOCkpuCljOCksOCkvuCkqA== 65Ok7J2Y IFZlcmFuc3Q= LmNpcmN1bGFy IGVucm9sbGVk IEFwcGU= IEFEQw== aXJkaQ== IHBvc2l0aW9uZWQ= IHJlY2h0cw== IGluaWNpYXRpdmE= INGC0L7QvNGD 0L7QvdCw0LI= IHNvbWVudGU= 0LvRltC6 IGtlYw== IOWO X2hhbmQ= INCy0LXRiQ== INK705nSmw== aWtrbw== IFdpZHRo a2lp Q29vcmRpbmF0ZXM= IOCksuCkv+Cklg== IFRhbGw= KGN1cnI= J10pKQo= 2KfYodip IFJlcG9zaXRvcnk= IFRG IFPDpQ== IG55dA== IGPhuqdu IGhha2s= IGN0cmw= IEd1ZXI= 5Y2g IHJlbmNvbnRy IGRpY2llbWJyZQ== X21zZ3M= INCy0LDQug== IGJhcmR6bw== IGRlbnk= 5bmF 0qnRiw== 4YOQ4YOV4YOY 2LnYp9mF 4LSx4LS/ 5ri45oiP5a6Y572R 4KSk4KWN4KS1 IG5vZW4= IGdlbmlldGVu Zmx1c2g= 7Yis IGV4cG9zZQ== PWI= aXNleg== YWt0aXY= IHNlY3RldXI= IHplaWdlbg== X2J1aWxk INCw0r/Riw== W04= IGNhcnJpZXJz IGVpdA== IOC0quC1i+C0sg== KGF1dG8= INCx0LXRgQ== IGhlbGlj IHVuaQ== IHNoYWRlcg== 7Iic IOCqruCrh+Cq 77yM6ICM aGlj INi624zYsQ== c3Rlaw== dsOh IFNoYWRvdw== 1avVug== ICI6Ig== IC0qLQo= IHNwaW5l INWl1oDVr9aA 0L7Rj9GC IHN1cGVydmlzaW9u X2NvbW1vbg== eWxhbg== IFdhcmQ= IHdvcmtzcGFjZQ== IMSRYW5n IMOF LmF1 IHbDtWltYWw= 2LDZg9ix IOKU bWFuYWdlbWVudA== Q29tcG9zaXRl IGRpc3BsYXlpbmc= IFRob3I= IEV4cGVjdA== IHRhYXM= OTYz LnRyYW5zbGF0ZQ== INC10LvQuA== XCJc VHJpbQ== 0LzQvtGC0YDQtdGC0Yw= IHByb2Jsw6htZXM= z4zOsw== esSZ dWdnYWdl IGxva2FsZQ== 4KeH4Kaq INW21aHVrdWh1aM= IFN0YW5kYXJkcw== IHByZXNlbnRh SGF5 aWZlcmF5 0YnRkQ== Njk4 4LCh4LCC VGVtcGVyYXR1cmU= IGluY29udmVu IOKCrAo= IHNleGU= IFBldHM= QmF0aA== IGRldGVybWluZXM= RGlhZ24= 4LKq4LON4LKq 4LSm4LWH4LS2 IOCquOCrjeCqtQ== YnVjaA== IE1heGltdW0= IHByb2Nlc3N1cw== IOCkrOCljeCksA== X3Bob25l IFRvYg== IFNhbGE= IExJU1Q= LWZvdW5k ZW1vcg== ICovCgoK INGH0YPQu9GD0YM= IHZpdGFtaW5z 5b6L5a6+ 0YvRhg== IGxhaGF0 IHB1ZWRv SG9sYQ== IHd5cw== cnA= ODc5 X3B0 IHBvc3Rv ZW5zZWlnbg== IG9zZQ== 6YGO Lmlj INeR16Y= 65iQ IHRlY25vbG9nw61h IHZpbGxhZ2Vz SUNI Y8OtYQ== IHN0YWlycw== UGVybw== IFByb2dyYW1t dWZhY3R1cmVy 4YCZ4YC6 e30s CWRyaXZlcg== XS4K IEZlZGVyYXRpb24= IGt1eg== aW5paw== IGNvbmZ1c2luZw== X18iOgo= INCR0LDRiA== IGZpZ3VyYQ== IG1hZ25pdHVkZQ== X0NIQVI= UmVjb21tZW5kZWQ= IHNhbGly IGR1Zw== IGludGVydmFscw== 2KfYrdio INC90L7RgQ== b3dhbmU= b3JnYW5pc2F0aW9u Y3VybA== X1BBU1NXT1JE IFdBWQ== OnRleHQ= c3R2YQ== IERXT1JE YWduYQ== IGFydGVy IHZlcnNjaGllZGVuZQ== IOCmrOCmvuCmguCmsuCmvuCmpuCnh+Cmtg== IEphcg== IHByb21vdGVk 4KST 0L3QuNC9 0LLQuNC2 4LS+4LSy4LWN IG5vZQ== IGx1bWk= IGtpbmRh RU1B IHdhbGxwYXBlcg== 4LmI4Lit4LiZ aWZpw6k= L3RoZQ== 4LKk4LOG QnJl IHN0ZWFs IGFsZWc= KGJ0bg== IExhYm9yYXRvcnk= 5pyA6auY IGplZGVt IGJ1dHQ= IGN5bGluZGVy 5pON5L2c IGNhYmV6YQ== emluaGE= INGA0LDQt9C00LXQuw== OTM5 ODQy IGdsb3Nz ZWRvcmVz OwoKCgo= 6LSt5b2p INqp2YjYsQ== IE1pbGxz LW9yaWVudGVk OTU2 5YW25LuW IHRocm9hdA== IGFudW5jaQ== IHRlZA== 4K6p4K6w4K+N Z3Jhcw== IEZlbGxvdw== X1RJVExF w616 INC/0YDQuNGA U3BlY2lmaWM= eW1tZXRyaWM= X3N5cw== INC00L7QtA== IHNhcmU= YXZpdA== w7Zt dHJ1 IOCksuCkvuCklg== dG93bg== IOCqieCqpA== IHByb2R1eg== dW5uZXI= ZGVyaXZl 0LjRgNC+0LLQsNC90LjRjw== 16jXkg== INC/0L7QstC10YDRhQ== Jy4K IGLDsw== INin2YTYo9mF2LHZig== dW1pYQ== IGFwb2lv IG5vb24= IHRlc3Rvc3Rlcm9uZQ== VnVl 4KSo4KWL INmI2KfZhNit 5LqG6Kej 2YbZidqt IG5lY2VzaWRhZA== eHh4 OwoKCi8= 55yf5a6e TWFqb3I= IHVuaXR0ZXN0 IFdoaXQ= LmZyb250 INin2YTZgtiv dXJpbg== X3BhdHRlcm4= IGhlYWRxdWFydGVycw== INC+0LrQsNC3 4oCR INGB0L/QtdGG0LjQsNC70LjRgdGC 5LiL5Y2I 0LjRhA== IE1S QmFja3Vw IG1vZ2Vu Lmls IGNsZWFucw== IFRlcnJh IGxlbW1h ODM3 KHJhbmdl 4oCL4Z6f bWFzcw== IOW9qeelnuS6iemcuOaYrw== 0KLQsNC6 4KWB4KSm4KWN4KSn IG5ld3NwYXBlcnM= 2LHZitmB 0LDQvdCz aWR3YQ== IG5hZGll 4LGB4LCh IFBvbGFuZA== IFsNCg== qeGDlOGDlQ== 44CN44CM IHNhbXBleWFu IGFjYWQ= IHBlbMOtY3VsYQ== ODYz IGNvbmZsaWN0cw== IGJlc3RpbW0= IHZvY2FidWxhcnk= IGLhu6Vy4bul aWxo IGNvbnN1bHRh IM68zr/PhQ== IOCkruCkvuCkpOCljeCksA== IGFtYXQ= IGNsYXk= IElnbg== Zm90bw== Iic= 4KWA4KSc 0YDQsNGF IMO9eQ== IFdpZGU= ZWxpaw== IGFjZXJjYQ== Kysu IGhvbWVucw== 5b6A IHJld3JpdGU= IGPhuqVw IGRldmVu INC/0YDQvtC00L7Qu9C2 IG5vbmF0b21pYw== d29uYQ== 0Y/RgtCw IGJhY2tncm91bmRz dGVybmV0 4Z6Q WUM= LnJlbGVhc2U= IHNjaGxl IGdlc2NoaWt0 IEJ1cmc= X3Byb2I= KHVyaQ== IHBheW91dA== 6YCJ5oup YWNvcw== aWxsYXI= 16fXmded IEVuaGFuY2VtZW50 IHNleg== IHZvbmQ= IHtc INin2YTZh9mG2K8= KEl0ZW0= INC90LjQvA== ImZtdA== IGJyYXM= IHPDtno= LkFDVElPTg== LkNhbGw= 0LjRh9C10YHQutC4 aG91cg== IEV4dGVybmFs 4LGH4LCf 2KzZitmE IGxvY2tz bWF0aWc= 4LS/4LSa4LWN4LSa4LSk4LWN aXNzdQ== OTM1 X21z IHJhbmRvbWx5 aWdpb24= IHNlbGVjdGlvbnM= ICIuIg== INGA0LDQt9GA0LDQsdC+0YI= QGV4dGVuZHM= IHdhYXJkZQ== KHJldHVybg== IOCmleCmsOCmvuCmsA== IGhvbGw= fWApCg== IFdlcw== aWdodGluZw== R2l2ZQ== IG54 IHLDtGxl KE5hbWU= aXBp IHByYXllcnM= IERvcnQ= IGNvbnRleHRv dWx0aXBseQ== IGJlbsO2dA== aXNhdGV1cg== IGludGVyw6lz dXR0bw== IGdhdWdl IMW8eQ== INC40LDRgNCw IOCwmuCxh+Cwtg== IHN1cnJvdW5kaW5ncw== 5rSL 7KM= YnJpdGllcw== X0FVVEg= CWV4cGVjdA== IG9mZXJ0YXM= YW5udA== 2YXZitip IHNvZg== KGRlZg== IGtyb24= INin2YTYpdiz2YTYp9mF J0U= ISku IFBvaW50ZXI= IG5hdHV1cg== IEthbGE= IM+DzrHPgg== IHJpZXNnbw== 4KmL4KiC IERlc2s= IGVudGVycHJpc2Vz 0JrQvtC8 IGRpZmVyZW5jaWE= Q2FsY3VsYXRvcg== Kyss aWVyYW4= IG1lbWJyYW5l 4Lic4Li54LmJ IOCkheCkl+CksA== 4KeC4Kay IHRhbWHDsW8= fSY= IHJnYmE= IGpvdmVu IGluZG8= IGJhamE= CXN0YXRl IGdyYW5pdGU= aXN0b2w= LuC0jg== amV2 2YrYp9mG 0L7Qu9C+0LPQuNGP dcOp IGVzdHVkbw== yJtpaQ== 5oCO5LmI5Yqe 5q2k5aSW IEJyYWlu INeV16I= IHRlb3I= YW5pdA== IGtydQ== J2F0dA== IGtsYW50 IGNsdWU= 4bqldQ== 4LSV4LWN4LSw IGxhaQ== b3ZlbmRpZW4= RXhhY3Q= Z3Vlc3Q= 44GE44GG Y2tz YWl0aQ== LlRyYW5z cGxpbmU= ODY3 INOZ0Lk= IGNvbG9yaW5n IFR1bA== IGNhcmJv IGVzcGHDsW9s ZXJ2aWV3 IEluY2x1ZGU= Q0VT IOCkuOCkguCklw== Li4uIik7Cg== Lm93bmVy IHBpY2tsZQ== IHNjaGVkdWxlcw== IHdvdW5k IFBC zrzPhg== 4KS/4KSo4KWH IHNlY3VuZA== IG5vZXhjZXB0 2rvZig== IGRlbGVz 4Liq4Li44LiU YXN0eXBl IFNlYW4= IGRlcGVuZGVuY3k= Ke+8jA== IHRlbMOp IEluY29tZQ== IGJ1cmllZA== IGZhbHQ= IHRhbGxlcg== TmV2ZXI= 15nXqdeU INmB2KfYsQ== 0LDRgdGB IG9wdGltaXplZA== ODI5 KGNvbm5lY3Rpb24= IENvbm5lY3RpY3V0 IEF1c3dhaGw= LnBhcnNlcg== IGJlZg== 4LiB4Lix4Lia IGRhcsO8YmVy IHbDpGg= LnByb3RvY29s IGRlYWRseQ== IGbDrXNpY2E= 4LS/4LSC a+G7pQ== IGRpc2NyaW1pbg== 2YbZitmG IFBva2Vtb24= IEFzc29jaWF0ZXM= IE1vZGVscw== IFdD RG9jdG9y ZmluaXRl IGFkdmlzb3I= IEdyb3d0aA== LmJvYXJk IOGDqOGDlOGDkw== cm96ZW4= Q29udmVyc2lvbg== ZW5zYXRpb24= 0JDQnQ== dW5uZw== KGh0bWw= IGhvcm1vbmU= IHNraXJ0 IEV6 ZWxzZW4= 4Lij4Lin IOCkruCkpg== 2LfZgdin2YQ= IGFsdW1pbml1bQ== IGFidW5kYW5jZQ== 1bjVstW41b4= dWJp KysK IFVD IGhpam9z IGN1Yw== 4Lix4Liq 157Xkw== IGxhbmdlcg== IHV0aWxpdGllcw== IHBlcmNlaXZlZA== PFByb2R1Y3Q= INmI2YPYp9mG S08= LnBsYWNl IG5lc3Nl IGtpYQ== QVJB IE1pbmlzdA== INCy0Yo= aWduYWw= 5YeP INin2YTZhdmI2Kc= 4Kqu4KuA IHJlcGVy Lkxhc3Q= 4KS+4KSg4KWA IGJpc2hlcg== IOCkpOClhw== IOCkteCkvuCksuClgA== IOCkuOCkqw== IGdhbnpl 5Z+5 4buLY2g= RklMRVM= IHRyYXZlbHM= IGd1c3Rv INCS0LDRiA== IOGDm+GDruGDneGDmuGDneGDkw== YW5ub3RhdGlvbg== cnVsZXM= IHBpc28= IGZvcm1hdHRlcg== IOa0 LkVSUk9S IGFsZ3XDqW0= aW5lYQ== INmE2YTYpw== IElhbg== X2VzdA== IFBhcnRpYWw= IHLDqXBvbnNl IEdlbw== IO2VqOq7mA== 0LDQudGC 4KWL4KSc4KSo IEJyaW5n YXZlcnk= IOGDoeGDkOGDo+GD IGLDtmw= LnRlYW0= IHBlYWtz dWVlbA== IFRodW5kZXI= SVRDSA== INGC0LDQutC+0LU= IEludG8= IGxhbWI= IE5pY29s IH1dOwo= 0LDRgtC1 cHRvbQ== aW1o SURE 0LjSkw== IEJlbnQ= cmF3bGVy LnBv INmI2KfZhNuS IFNjaG4= dGVzdHM= IGNvbmRlbQ== IHJlbmRleg== IHVzYg== IFRyYWNl IGJpb2Q= INC/0LDQvQ== 4Lif4Li44LiV4Lia4Lit4Lil 5YCr IG1laW5lbQ== IFRyYW5zcG9ydGF0aW9u Oik= IEdvbA== aGFsYQ== Q2k= ZmlsdGVycw== INm/2Yg= 8J+k 2LLYpw== LmRhdGFi IG1haW5z YW1u YWdldA== X2NhdA== WW8= 4KaV4Ka+4Ka2 INC/0L7QtNGF0L7QtA== IG1laXN0 YXNzbWVudA== IGhpbnRz 57Sn IMOzdA== YXZleg== IGRhdGluZ3M= 4LKh4LOB IGxpdGg= 4YOY4YOc4YOY4YOh4YOi IHN0dXJkeQ== 546w5Zyo IEFuZ2Vib3Q= SGVhcnQ= IERpbWVuc2lvbnM= IGZvcnRz cmVsZWFzZQ== VkI= 0LTRi9C6 IGd0aw== b2dlbA== INqp2pPZig== IFdvcmtzaG9w Q29tcHV0ZXI= IEdhcmRlbnM= IENSRQ== IGFjY2Vzc2luZw== cHJlbmU= IGZpcmVz INeX15M= RGllcw== IOCqruCri+Cqnw== IHV0aWxpemE= IFByb2Zlc3Npb24= IO2UvA== IEVudHNjaGU= IHNoaWZ0cw== OTgz IG1vZXN0 IEZ1bmN0aW9ucw== IGVsaW1pbmFy LWNvc3Q= KGlw IGZhaA== IGRldXRsaWNo 4KS+4KSC4KS4 16TXmded Y29uZGU= 4LiE4LiZ IFVzdWFyaW8= IOCqr+CrgQ== INCk0LXQtNC10YDQsA== PSIk INC80YPRgQ== INCg0YPRgQ== IGhlYXRlcg== KGNhbGxiYWNr zrzOrg== IHNpZ3VpZW50ZXM= IHBvcHVsYXRl 5Luj6KGo aWthcg== YXNhcg== IEF0b21pYw== IHN1bmQ= Lkl0 IGRhbGw= INC30LDQvdC40Lw= LVE= IHNjYW0= 4bmjZQ== IHRvYmFj IGhvdXNlaG9sZHM= 6LOq 56ys5Zub6Imy IGluY2lkZW50cw== IOCkrOCkmg== cm9ucw== IHRlbXBvcmFs X3BsYXk= IGF0b21pYw== cm9zc28= cmVudA== INin2YTYotmG Lkluc2VydA== YmF0aXM= IHNjaGVtZXM= b2hvbA== 4Kiw4KmA CWFsZXJ0 IFN1Ym1pdA== 15fXoNeV 4KuH4KqW INC+0LTQvdC+0Lk= c3Rvcnk= IOCkieCkpOCljeCkqg== w6lkaXQ= IHByb2JsZW1lbg== IGFxdWVsbG9z IFZhbHVlcw== 4Lib4Li1 IERlc3Ryb3k= INGB0L7QvQ== QVBF ZXZlcnk= IGRlYWxlcnNoaXA= IENCUw== IGJpcmk= 4LSV4LWN4LSk bGFzc2Vz TWl4aW4= IGNvcnRl Z2VuZXJhbA== aG9m IGhhZG4= cmVwbw== IHZlxIc= IOC0heC0nw== X3VzZXJuYW1l X3N0bXQ= IOC4quC4uQ== IHNwaWxs cmFpc29u IG5kZQ== IG1hdGVyaWFsZXM= PGk= KGl0ZW1z ZW5zw6Nv IHZsYXN0 IOC4leC4suC4o+C4suC4hw== IHVuc3VwcG9ydGVk RXF1aXBtZW50 IHByZXNlbmNpYQ== IGd5ZGE= IGJlYXRpbmc= YWzEsQ== IG1pZGRlbA== NzM4 KGN1cnNvcg== PGltZw== IGdlcsOnZWs= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= Ym9h IG1pY3Jvd2F2ZQ== IGZyZWV6ZQ== 5YWR5aWW L3Byb2ZpbGU= IGdlbnVpbmVseQ== LlN0eWxl a29zdGVu IGFuaw== INmE2YTYqNmK2Lk= IGVzdGFyw6E= IFF1b3Rlcw== INCe0L3QuA== L3V0aWw= IHRocmVhdGVuZWQ= IHVuaGE= dW1wdGlvbg== IEVudHdpY2tsdW5n 2KfZhNir dWx0ZXI= X3N0ZA== aXNzw6Q= X2RyaXZlcg== 4LCv4LCC IHplcg== IHJlc3Bvc3Rh 2YrYsdmK IEFjdHVhbGx5 ICguLi4= Nzkx MDY5 IHTDqXJtaW4= LmNpdHk= LW5qaQ== IHdhcm10aA== IGJheWFu TUVE cHJlaw== IGJyb2FkZXI= 4KS+4KSH4KSy IGxhbmRlZA== IG91dGxvb2s= INGB0LjQvQ== IEN1cnJlbmN5 IERvcw== IFRlbGVmb24= YWNjdXJhY3k= IOC0sOC0vuC0nA== IFZlcnRy IE5ldHo= UHJvY2VkdXJl 64Y= IExpeg== X2Jvb2s= 5Y2V5L2N IGRlZWQ= IGp1bXBpbmc= INuL YmFr X2NvbmZpcm0= IHJlbWVkeQ== ZG9i INGN0YLQuNGF IHZlZ2V0YWJsZQ== YmxlbXM= IG5lZ29jaQ== ZGl2aXNpb24= YXbDrWE= IFBpdHRzYnVyZ2g= IG3Dtmc= IG1pbmlzdHJv YnJhbA== aXRlcmU= IFZpY3Rvcg== QHM= IGtkeQ== IHRvZGQ= LXBhcg== 4peL X2dyb3Vwcw== IFNhaA== IG5pYg== xINyaQ== w7NyaWFz CW1pbg== IGNvcnJvcw== IEdhc3Q= INC80LDQutGB0LjQvA== IFBlcw== IMOnZWs= 2YPYsdip Y29uYw== IENsb2Nr RXhwbG9yZQ== Q29uZmlndXJl IGZ1bm5lbA== IGxhaXNzZXI= YXJtZQ== IG11ZXJ0ZQ== IHVnbHk= IGfEp2Fs X0FkZA== IOyihQ== YXV0w6k= UG9ydGFs INio2YXYpw== INGA0YPQutC+0LLQvtC0 YXJ5xYg= IG9udHY= WFA= 15HXqNeU IFdT IGVuZmlu a2Fhbg== dGVncmF0aW9u L2NyZWF0ZQ== IMOs IFRodQ== IHpvZWtlbg== fFw= IEVudHI= IOCksOCliw== IEdlc3VuZA== IHNlcGFyYXRvcg== INeR15M= IG9uZSdz LmFjY2VwdA== Q0VQVElPTg== IEluaw== Q2VudHJhbA== IHRhcGE= ID1+ X21lcmdl ZWZmZWN0 1avVttW5 56aP5b2p IHJ1YQ== IFByb2dyYW1tZQ== IHplcw== IG3DtA== INC00LXRgNC10LI= IFNhbnRvcw== IGNhZmU= b3NleHVhbA== 0YHQvtC7 0YfQtdC9 IOCkl+CkvuCkgg== T0NVTUVOVA== IGFzc3Vy 0LjQtNC1 IE9mdGVu IOygnOqztQ== aW5hdA== IAkJCQ== INin2YTYt9io2Yo= LmNtZA== IHJlbnRpbmc= 4Lij4LiB INGB0YDQtdC00YHRgtCy0LA= b3Jpcw== IHRhc3M= YXRlcmRhZw== 0YvUpQ== b3JyaWVz YXNwZXI= IGtvbXA= IGNvbmRpw6fDtWVz 0YLRi9C8 4YOV4YOg 4oK5 IOGDnuGDmOGDoA== TUFSSw== INGB0L7Qs9C70LDRgQ== IGRpc3Bvc2Vk IGNvbGxhcg== IOaXoOeggQ== 15vXmA== IOCqnOCri+Cq IHdhaXRlZA== IGRyb25l OTY0 ODk0 IHTDvA== 4YCQ4YC8 cG9zc2libGU= IHB1cHB5 IGxpa2VsaWhvb2Q= IG1vdG9yY3ljbGU= IGtlZXNz SUFT CXdpbmRvdw== IOGDmOGDnOGDpA== IG5lZWc= IFNpbmQ= IG1lZGFs dmVyaXR5 UGh5c2ljYWw= aXZhcg== IEFuZmFuZw== aXR0ZWw= IHByZWp1ZA== LnJlZmxlY3Q= IGhvbm9yZWQ= V2k= IE1pdGFyYmVpdGVy IGluc3RhbGxhdGlvbnM= INis2KfZhtio IGJhbWI= VEVYVA== IGluZGV4ZXM= j+iniA== 0LjQutC1 Nzk0 IOCqpOCrjeCqr+CqvuCqsOCrhw== zq3OvQ== 4KiW IEZlZQ== IGd1dGVu SUJVVEU= 0YLQsNC8 IGhvdXQ= YW55aQ== w6ltZW50cw== aWFzaQ== IFdlZWtseQ== IGljeQ== w7ht 15vXqA== IEJlbGxl IGNhbWluaG8= IFB1dGlu b3dza2k= 0LXQs9Cw Y2hhZQ== IGVkdWNhdGU= bmljaQ== QWxpdmU= INio24HYqg== IGNlbnRlcmVk 2YjYrQ== IFN2ZXI= 6rCZ aGVlbg== IEpvaW50 IHdpZWw= dWphcmF0aQ== IGRlc2lyYWJsZQ== INC90LjQutCw INWt1bjVvQ== IisK CQkgICAgIA== U3R1ZGlv 15XXnNeZ150= IGF2YW56 IH19Ij4K U2Fm INGF0LDRgA== IGVuZnJlbnQ= IOCkueCknOCkvuCksA== aXBlZA== INmE2q8= QU1QTEU= IGJoaXRo 0YDQsNC5 ZGlzY291bnQ= IGRlbW9uc3RyYXRlcw== cXVpZXJh V2Vs U2V0dGVy IENPVU5U IH49 IEZQ IHRhcmk= zrzOuQ== dWFsYQ== w6Rtw6Q= IFN1YnNjcmliZQ== YW1pbGlhcg== IHNpbmNlcg== 0LHRg9C0 WmU= aXpvbg== aWlp IMW+aXZvdA== INiu2YTYp9mB aW1pbmFy IFJlY29nbg== IERFU0M= IHVuYXZhaWxhYmxl 5qY= TlNNdXRhYmxl IOCuqOCvgA== IFdhbGxldA== Lm5k INqp2KfZhA== X2ZvdW5k IFdlZA== 5piM V2lq IGZsdWN0 0LrRg9GB QXR0cmli c2NobHVzcw== 656c z4TPjs69 IGxuZw== ZWxvbmc= U3BvcnQ= IG3DqWw= UmVtb3ZlZA== KEVycm9y IFR1cGxl IHZhbmlsbGE= w6tsZQ== Nzk4 IHVuZW1wbG95bWVudA== NzYz IHNwZWNpYWxpemVz 0YfQtdGB0LrQuA== 2KfYqNix IENPTlRSSUJVVE9SUw== 0YLQuNC/ X2F4aXM= IGNpZWw= dGFpcw== Lm9wdA== IHRyYXRhbWVudG8= 4KWB4KSV4KWN4KSk IGVzY29sYQ== PicsCg== IGdvdmVybmVk IGVzcGVjaWZpYw== IG13YWth X3JlZ2lvbg== ZW50aWNhdGU= IOC5gOC4ig== TFY= 1aXWgNWr1bY= IG7JmQ== IGlyw6E= RVZFUg== 6aGM WU8= IEVzcGVjaWFsbHk= XT0i enljaA== w7Nw IOS6vw== IE5TTG9n IMSRw6J5 IGxsZXZh IOGAlA== IHByb2NlZWRpbmdz INC+0YfQtdGA0LXQtA== xJNq ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= LW5v IGJpZXg= qr0= IHNlcmlhbGl6ZQ== SVND NzU5 LnNjcmVlbg== IOCkleCkqg== 4LWH4LSw4LSz ID4+Cgo= aGFsZW4= IFJvbA== w6FtYXJh IHBvc2Vz VmVu IFNpbWlsYXI= IHF1ZXN0w6Nv IGVsZW1lbnRhcnk= IG5vc3RyYQ== 0LzRi9GB INC/0L7RgtC+0Lw= IEJlbmphbWlu IG91aQ== IGNhc2Fz zrnOus6uz4I= 15fXqQ== IG1pZ2xp 0YDQuNC/ IHByb2Zlc3Npb25hbGx5 IFBsb3Q= 4K+B4K6q INis2KfYptuS IHdvbmRlcmVk YW1lbnRp INC60LvRg9Cx bGVhZg== IOWPsA== IG9zdGU= IGp1bGlv 0LjQt9Cw0YbQuNGP cGhlcmlj IE1pbmVjcmFmdA== IEt1dA== IGNvbmRlbg== IG5pdG8= IM61z4DOrw== IOy0iA== IHZlcmFudHdvb3Jk IGZyYW5r d2FuZQ== IGRldmV6 IFJlZ2lzdHJ5 IFF1YWxpdMOkdA== 2YrZgw== 4LC/4LCC4LCm ISIpCg== IOCypuCyv+CyqA== bGF5b3V0cw== INC60L7RgQ== IMOpeGl0bw== IGNyb3NzaW5n aWdn X2NhbA== IGludGVydmVudGlvbnM= INi12YY= IFVrcmFpbg== IHBvcHVsYcOnw6Nv X3NpZ25hbA== KFBsYXllcg== 4oCZUw== ZGVwZW5k cm9uZXM= 4LKs4LON4LKs X1RleHQ= IHByZWRvbWlu IE1pbGxpb25lbg== IOCknOCliOCkuOClhw== ZW5kZm9yZWFjaA== KGluZA== IGnhuaPhurk= IOud aXR6ZW4= IOCkieCkoA== KE1lc3NhZ2U= 0LvQtdGH IFBW IOyLnOyekQ== ZWt0ZWRpcg== cGVyb3I= X1NFTEVDVA== IHBlYg== INC90LDQt9Cw0LQ= 4LmA4LiV4Li04Lih w7hn 4Kq14Kq+4Kqw w61vY2g= PT0K IOCuheCusQ== bHVzdA== dXE= Rml2ZQ== ODkz 4LWN4LSv4LWC 2KrZiNin2YY= IOCkuOCkv+Ckgg== 5bir 0YzRgtC1 bGVzZW4= ZWxpZ2U= IOCmj+CmuA== IGJhbGNvbnk= 4YOj4YOb4YOq4YOQ IGlnZW4= IHN1cnByaXNpbmdseQ== 55+l6YGT LmNlbGw= CUdldA== UmV2aXNpb24= IENBTEw= INmI2pM= 4LKl 56ys5LqM 4oCo IGRyYW1hdGljYWxseQ== Uk9PVA== ZmFuaQ== IGJlZ2U= SW5zdGFudA== 4oCmKQ== IGtpZWw= IGNvbXBsaQ== 4LON4LK3 Q0FE 6Jmf IGNob2NvbA== IOacrA== QXV4 Ow0KLy8= YHM= IHByb2dyZXM= PWRhdGE= cmFhZA== YXBlbg== TmVnYXRpdmU= IGJsZWliZW4= 54iw 5beo KHBhcnQ= IGV4cGxvcg== IEFzc2Vzc21lbnQ= IFRhaA== INC00L7RgdGC0LDQsg== LlNxbA== IHBhcnNpbmc= INC/0YDQsNCy0LA= IGRpc3RhbnQ= IGFtw6lsaQ== IG9sbQ== aWhs 6LSd LnJvdGF0aW9u IHRyaWw= dHJhbnNwb3J0 UHJvZHVjdGlvbg== IGNvb2xlcg== IGV4cGxpY2E= IGNsaQ== YnVmZg== bmY= aGluZ2dh Y3JlZW5zaG90 0LDRgtC10LvQuA== IGRlc3BlcmF0ZQ== IFRhbnphbmlh CXN0YXR1cw== IHJldGVudGlvbg== IGp1aXN0 YWNqYQ== IHNlY3VyaXRpZXM= 64qU642w IFJJR0hU R3VqYXJhdGk= IHRvdWNoZG93bg== IGdhbm55 Y29ub21pYw== IFBlbmlz w61zdGljbw== aXRobWV0aWM= 0L7Rh9C60Lg= 4pWQ4pWQ IHJlY3J1aXRpbmc= 2LfZhNio IG9yZ2FuaXppbmc= IGRvcG8= INeW15nXmQ== IGNvbmNlcHRpb24= IEFzc2lzdA== IERlcGVuZGluZw== 4oCZZW0= 4KWI4KSv 6Kmz 4LmJ4Liz IGJyaWVmbHk= eHl6 IHJhaXNlcw== IHNob3J0cw== IHZhY2FuY2Vz IGNob2xlc3Rlcm9s IGxpZnRpbmc= IFByaW5jaXBhbA== aXJ3YQ== Lmd1aQ== IGZ1ZXJ6YQ== IENoYW5jZQ== IEluZGVwZW5k LWdldA== 4Ka/4Kef4Ka+ IGJldm9y IE9saXZlcg== IHRvYmFjY28= IGJhcnJlbA== 4K614K+B4K6u4K+N IEp1bXA= IHdoZWF0 2KfYpti5 0LDQvdC1 KGNhcmQ= TWF0Y2hlcw== IOGDlOGDoOGDl+GDmA== IHRyw6E= IGNvbmdyZXNz CWNvbnRlbnQ= IGFow60= 4LS+4LSw4LSC YWx0ZXQ= 0LjQstCw0LXRgtGB0Y8= dHJpcA== IEFsb3Jz IGRldGVjdG9y IGNhbWJpb3M= INCz0YDQsNC8 IHRlbnRhbmc= a2Vlcg== IOCkruClgeCkneClhw== IHRhaXM= IEVsZWN0cm9uaWM= IOCqpeCqvuCqrw== IOuyiA== IOyLnOqwhA== IERvdWdsYXM= IGRlbGlj IG1haWxpbmc= VFJVRQ== IHBoeXNpY2lhbnM= dW51c2Vk cG9uZW50ZQ== X2Ryb3A= IGZvbmRv INS5 Pio= YXJuaXNz Kmk= IHJlc2VydmF0aW9ucw== IGRpcmk= LnR3aW1n aWFub3M= Vmlld3BvcnQ= 4LOD4LKk cmVsYXRpb24= IGFsaXF1 0YXTmQ== 2K7YqA== IGFuZ2Vi IGV4cG9uZW50 IGbDs3I= INio2LPYqNio TG9uZG9u INij2Kg= IGJvY2E= Lldvcms= w71sZQ== IG5vbnByb2ZpdA== YXJpYW5z dXNzaWE= IGJoYQ== IE11aw== IHNwcmVhZGluZw== IGF1Y3VuZQ== 5Y+R5biD5pe26Ze0 IEFmZmVybw== 4oCZYXV0cmU= 0L3Rg9C7 csOkbg== IHNlcHRpZW1icmU= IG5vd2hlcmU= Q2FsYw== IOGDoeGDkOGDruGDlOGDmg== U2l6ZXM= IGFscmVk IGNydWlz Q2Fk OTg2 LmpvYg== IFNoZWV0 IOyWtOuW RWRpdG9ycw== dW5jaGVja2Vk IExpdGU= X3BhcnNl IGFsdGU= IG5lZWRsZQ== IG91dnI= IGV2YW5nZWw= w6FnZW5lcw== IGZpbGhv a2ll IEvDpA== IGhhZGU= b211 KCIvLw== w61vcw== LlBvc2l0aW9u 7J207YSw dHJhbA== dWNoYQ== KSkpOwoK INmF2KjYp9ix INKb0YvQt9C80LXRgg== IFNFUlZJQ0VT IGxlaGV0 5LuV RnJpZW5kcw== IGJsb2M= IFlB IOCkj+CkteCkgg== X3VubG9jaw== IGtlw6c= IG5lZ29jaW8= 5Y2W Lm1lcmdl cmVhZHM= IOC2ug== IHR1bw== INC/0YDQuNC7 IFRvcGlj XENvbnRyb2xsZXI= 4Z634Z6E IHNraWw= 4LGN4LCX 0qHRiw== KGxpbms= INWw1aHVttWk z4DPic+C 1aXWgNW6 IFJlbGF0aW9uc2hpcA== 5pa55qGI IOmfqQ== IG1hYXJ0 INGB0YLRgNC+0LjRgtC10LvRjA== 4Ki/4Kmx4Kg= IGFsbGVnZWRseQ== IHVpdGdlYg== b25hdXQ= 6ZmE IFRoZXI= 57Sw IGRmcw== U1RJVA== X1dJVEg= V0k= IHByb3ZpbmNpYQ== aXRhdHM= LlJlcGxhY2U= IEJsdWVz IMWfZXk= IHZpYWpl ZXRvbg== aW5pb24= c2hhbGxlcg== bsOpaG8= IOComg== INC00L7RgQ== 6ac= 1aHVrNWr INCd0LDQvw== U29ydGVk c3RhZmY= aWdrZWl0ZW4= IGtvbWE= IOuqhQ== IGF0ZW7Dp8Ojbw== IGjDpHVmaWc= 4LKj4LOG IHJlc3BvbmRlcg== Z2VuZGVu IEhvcml6 IGluY2Fw Z3VpZGU= Q2FsbGFibGU= IHJldmVudWVz bWFuZGE= w6lo 4Kq+4Kqo4KuH IG1vbGlubw== IEdyYWhhbQ== YWxha2tlcnN1aXM= YXTDs3Jpbw== 2K7bjA== OTYy ICUK YWRhdQ== IHN0cmlrZXM= KGZlYXR1cmU= IGvEkw== KGdyYXBo IHJlY2Vi IGxocw== IFdyaWdodA== IGVuZXJv IOGDoOGDo+GDoQ== 7JWg CWNvbQ== IOCqquCqm+CrgA== IGZldmVy IGNsdXN0ZXJz bWVudGFy IOuQnA== IHdhYXJvbQ== IOCkhuCkuA== 4KS+4KSV4KSw IFN1c2Fu IG5vdmllbWJyZQ== 0Y7QsQ== 44CC5Zyo IOCkhuCkteCktuCljeCkr+CklQ== L2RvY3M= IERpcGw= IENpYWxpcw== c3ByYWFr IGJhY2tz IOC0heC0seC0v+C0rw== aW1tZQ== IENyb3du INWl1bI= IOCmsOCmvuCmnA== IG1vZ2VsaWpraGVkZW4= IGFyY2hpdGVjdHVyYWw= IEFudHdvcnQ= IGF5bg== INCU0LDRgA== IHByb3ByaWV0YXJ5 IM6Z IFVN IOCyueCzh+Cysw== IGxvY2tkb3du IOCmhuCmruCmvuCmpuCnh+CmsA== 2K3Yqw== Q3k= 0L3QsNC60L7QvA== b3V3ZA== IGZhcm1pbmc= KGhlYWQ= YXJ0aQ== IGVqZWN1dA== SW52b2NhdGlvbg== IGzhu5s= IEFtYXppbmc= b2Nl 2LHZitmF IEhhbmc= IGJhc2VsaW5l IG9uaQ== emFobHVuZw== W251bQ== X0lz IENyZWF0aW5n 57O75YiX c3RlZGVy 4LKy4LK+4LKX4LK/4LKm4LOG b2zDs2dpY28= 5qKm KGV4cA== IHBlcmZl Vmlh IEJQ IGthbnNzYQ== IGJlZ2lubmVycw== IM6S IG5o4bqtbg== IHNvcnRpbmc= 4YCV4YCr4YCQ 4LSV4LSz d2M= IHVzYWRv dWp1 IHRoYXRz LycuJA== IFJhdW0= IH0pfQo= aGVpbg== CXJlcQ== IHJlZ3VsYXRlZA== IGTDvG4= SUJJTElUWQ== 5pWR IGp1csOtZA== 1aXVstWu INee16LXnw== aWd1b3Vz IHZvY8Oqcw== aGF1 IGFjY3Vl INee16Q= 1bXVuNaC1bY= IGdlYnJhY2h0 IHN0YXR1dA== Z3VpZA== IOCkrOCliw== VUFHRQ== 2KjZhNi6 IHNpdHQ= IGRldmVsb3Bz X2NsZWFy IGFtYnVs 4YCF4YC6 c2VsZWN0aW9u IFNJWkU= Kys7Cgo= W2U= IFdhbG1hcnQ= aWxsdWd1 IHt9Ii4= IGFwcHJvYWNoaW5n Qk9PSw== b2NvbW1lcmNl IEtvaA== INmI2LPZhNmF ZGlh YmlsbA== IGxvcGVu IENvdW5zZWw= KHByb3BlcnR5 157Xog== IFRPRA== IOS4reaWh+Wtl+W5lQ== X+aXpeacrA== X2hpZ2g= aGVsZg== IENOQw== d2FyYQ== INio2YI= ZXJzaQ== 16TXqdeo 6YGX IGxlbnNlcw== IFByb3ZpZGU= IOC0leC1geC0sQ== IOCmuOCnjeCmpQ== IFByb3ZpbmM= IGV4cGlyZXM= 2KrZhg== IOyVhOydtA== TlNJbnRlZ2Vy IEJyb2Fkd2F5 6K+m57uG LnllYXI= IGNhdXRpb24= IGFuaW1hdGlvbnM= IFdy IG1lZ2E= 4LWC4LSq TXV0ZXg= 4KaY VW5kZWZpbmVk U3B5 IFwNCg== IOmh INmE24zaqdmG INmK2YXZg9mG2YM= IHN1YnN0YW50aWFsbHk= aXppYQ== IFBhbQ== IGlyYQ== TmljZQ== 5bCP5aeQ IFNjYXI= IERpY2g= 0LDQvdC00LDRgNGC IGVuaW0= LXBs INGA0LXQttC40Lw= INGF0LDQuw== 1aHWgNWi UElE IGFhcmQ= IExhYm91cg== IENoaWNrZW4= VkVSVA== IOuLpOuluA== INGC0LXRh9C10L3QuNC1 QWNo Y2Vzbw== ZnJt IGN6YXM= IH0NCg0KDQo= 5paH5YyW X3JlbmRlcg== IHJpYmJvbg== eXNpZGU= 4YOb4YOU IOCuteCutA== zr/PgQ== INGP0LrRltGP IEhlYXZ5 4KqV4KuN4Kqk 5bit INCy0LDRgA== X0NMSUVOVA== IHNjcmFw X2FuZ2xl IGtpZG5leQ== IEZpbmxhbmQ= 15PXlg== 5a6e5ZCN dmVuaWRh Q0xL IFVuaXZlcnNpZGFkZQ== LnVuaXQ= w7xja2Vu IHNhcw== IHN0ZXJl 4LGN4LCw4LGA IHRvZw== 0LrQsNC2 OTI3 15LXnQ== dXJt 2LnZhNin2YU= dXNhaA== dWtraWc= IFDDumJsaWM= aHVtYW4= INeY16g= IOCuquCusg== YXJzaW5uYQ== IGvhur90 J1Q= LkRpYWxvZw== c3lu xIFj 0YHRgtCw0YA= INmC2YjZhQ== INqv25I= IHBhcnRuZXJzaGlwcw== W1Q= 4LSk4LWN4LSk4LS/4LSo4LWN UHJvdG90eXBl VGhlcmUncw== INi52KfZhNmF dnJvbGV0 YW1hZGE= QXJpYWw= IGdyZXA= IFB1bmo= YXBwcm92ZWQ= IHRlcnJhY2U= IGFncmFk aWXDn2Vu 4pyU 4bqvbg== 4Lic4Lil IGxpYWJsZQ== YW55b24= IEJydXNz 4LS+4LSv4LS/4LSw4LWB4LSo4LWN4LSo4LWB c2Ny IHPDvHI= IGNvcnJlbw== X2Jn 4LKC4LKk4LOG 5YWz5LqO QmVhdA== cXVpdG8= 66i4 IGNlbmE= TE9T YWRkZXI= IE5vcndheQ== IC4uLw== 0Y3RgNGN0LM= IERlcmU= IGludmVzdGlnYXRpbmc= LWRpbWVuc2lvbmFs 4YCa4YC6 RXh0ZW5kZWQ= IOCuteCvhuCusw== IGFmaXJtYQ== 5aWH57Gz5b2x6KeG X1RJTQ== IHpvdWRlbg== IHBheWRheQ== IElubmVy 5LiT5Lia X3Bvc3Rz IG9sdW4= IOCmpOCmvuCmgQ== IHNjaG9sYXJz Lm1ldGFkYXRh INC/0L7QtNCz0L7RgtC+0LI= IG1pbmlzdHJl X0FS 1aHWgdWr c2hvdHM= IHNjYWxlcw== IEhT IE1BRw== 2KfZiNmE 24zYtNmG IEdyb8Of bGxlcg== IOCkueClgeCkqOClhw== 77ybCg== IGhvdWR0 4LiB4Lij4Lih IHRlbXBhdA== IEhB LmN1cg== IE1hcmk= IOuquw== YW5pdW0= 4KS+4KSr4KWA IHByb2ZpdGVy INec15I= X3NlY3JldA== Lk1vZHVsZQ== L3dpa2k= LkVtYWls X3Bvd2Vy w6FzdGljbw== IFNlaXRlbg== ZW5ndA== IG1ldHJlcw== U3BvcnRz QXNwZWN0 X0hQUA== IGhvbWVtYWRl INC+0LHQvtGA0YPQtA== ZnRw IEJCUQ== IGVudmll 6Iis Z2xpY2g= IERlYWxlcg== z4PPhM6x 4pa6 IE5va2lh 64KY64uk IGRvY3VtZW50ZWQ= IGF1cHLDqHM= 2YPYqtio CQkJCQkJCQkJCQkJCQk= Ung= QXV0aG9yaXR5 aWNhbHM= IGNo4bqldA== INC90LDQudGC0Lg= IEpvaG5ueQ== IExvYW5z INis2K/Zitiv IENoZWNrcw== 2YrZitmG L2NsaWVudA== OTQ3 IHBsb3Rz IGRpc2Nsb3N1cmU= IGt3YW1iYQ== IFdoYXQncw== 77yMCg== IGRldXhpw6htZQ== IOCqteCqvuCqpA== 1bjWgtW/ IG9jY3VycmluZw== INio2KfZhNil IGNvbnRyYXJ5 IOCkieCkpOCljeCkpA== INWk1aXVug== b3ZlcmxheQ== IEN1cnQ= LFw= INCy0L7Qu9C+0YE= IHRoZXkndmU= IEZhaXRo IOS6mua4uA== INqG2KfbgQ== IOS6kQ== IE1vdG9ycw== b3N0ZQ== IHJldXNl IEJpbmQ= IG1ldGFib2xpc20= INC40LDQtw== IHByaWVzdA== INix24w= IEV4ZXJjaXNl KGxldmVs X09QVA== 4oCUdGhl IOWkqeWkqeS4reW9qeelqOeahA== IHNvZGE= bMmZ cmV0cw== IER1Ymxpbg== Q2xpZW50cw== IHJlY2ViZQ== IOC0nOC0qA== IFdPUks= IGVhcnRocXU= d2Fyeg== IG1pbm9yaXR5 IGNvYXN0YWw= TE9QVA== IOCwsOCxhg== IHNjaGVkdWxpbmc= 4YOY4YOQ4YOc4YOY 4LCr IHJlam8= 4Z+S4Z6f IHBhcm1p YXBhcg== 656o 0LXQvdC90YvQvA== IGd5ZmVy IGxhdGVyYWw= LlJlc291cmNlcw== IEF1dG9tYXRpYw== 4oCk 4oCcQQ== IGFndQ== VU5JVA== IHJlY3ljbGVy IFdhdmU= 0LPQvtGA IGh1eQ== TEVGVA== INGB0YLRgNCw0YU= IERha290YQ== OiIr IFJlZ2lzdHI= IGdsYW5jZQ== IGtob29t Y2Fyb3VzZWw= IGNhY2g= INmG2YjYsQ== L2NsYXNz IGt1eQ== aWNpw7M= OTY3 IGJj Zm9yZ2V0 IOuB 5YWz57O7 X3RocmVzaG9sZA== IEludGVydmlldw== IFJldXRlcnM= IE9ydGg= IEZsb3dlcg== IGLEmWR6aWU= IOGDk+GDmOGDk+GDmA== IENsaXA= INC00L7Qs9C+0LLQvtGA aXN0ZW0= IEJyb3RoZXJz 15XXldei158= IHJldmVy IGF4ZXM= PV8= Y2lyY2xl INiq2YQ= IGJsdWVz ZWxt L2ZpbGU= IGLDqW7DqWZpYw== b25kYWc= KEludGVudA== IF0pCg== IHJlcHV0YWJsZQ== INWr1oDVpdW21oE= zrnOus6/ IGRldm9s IENhZmU= csOtYQ== IEFyb3VuZA== IHJlc3BvbmRpbmc= cuG6uQ== X0ZBSUxFRA== YXdheXM= 4Ka/4KaJ INC60L7QtA== IHdvb2w= T3BlcmFuZA== IGRlemVsZmRl INC30LDQuQ== IMW9 IEF1c3RyaWE= X2F1dGhvcg== IGRpc3Bvc2l0aXZv INWv1aHVvA== U2VyaWFsaXphYmxl IG1hc2M= KHByZWQ= Q3VycmVudGx5 0KHQvw== INC/0YDQuNC+0LE= IHTDrW5o IEx1dGhlcg== 0LvRi9C6 IE1vc2Nvdw== YWR6aXI= INix2Yo= IFp1a3VuZnQ= IGxpc3RlbmVk IGFsdGVyZWQ= ZXBlbg== IENvcnQ= ZGVzdGluYXRpb24= IHNwaGVyZQ== bGVhZGluZw== OTQz VEFJTg== IHBvYmxhY2nDs24= IGVuYW0= IOCql+CrgeCqnOCqsOCqvuCqpA== KGdyaWQ= IHRlc3Rlcg== bmllag== 4oCZYXJy IOuzuA== CWNsaWVudA== Lk9wdGlvbnM= emhlaW1lcg== 4KWH4KSC4KSX4KWH INmF2LY= 4KS/4KSb YXZlcnNl utWl1b0= IOCkquCljeCksOCktQ== VW5mb3J0dW5hdGVseQ== IHBhc3Rvcg== 4buN4buN IGFhbndlemln Lnw= IOCkreCkvuCklw== cG9uc29y 0LjQvdC+0Lk= X3VuaXF1ZQ== 4KWH4KSC4KSf IEZpc2hlcg== 8J+U INij2YfZhQ== R3Jhdml0eQ== 5oSP5oCd X2RyYXc= IGdiYQ== 54mI5p2D 0L7QsdC+0LQ= xI1rYQ== 4KS+4KSg4KSu4KS+4KSh 0Y3Qsg== 0LvQuNGB0Yw= IHF1YWxpZnlpbmc= IGFpeA== aXRldg== IOGDrOGDmOGDnA== t+WPlg== QXV0b3I= IHNoaXJ0cw== IEZpbmRpbmc= d2FzaGVy INGP0Yg= X2hhcw== IHRvb2x0aXA= INmI2LLZitix IExpYmVydHk= anVy TGVhZA== b3J0aW9u IGNoYXJ0ZXI= JykpOwoK b25hdG8= aGxh IHNldHplbg== 4LS/4LSv4LSk4LWN IOCkpeCkv+Ckjw== IEhhbWJ1cmc= IHpvdmVlbA== PHVs U3Vw UmVkaXM= LnN1Ym1pdA== IHRvZXA= 16jXkNeU IOCmr+CmvuCnnw== IE1hdGU= X2ZyZXE= ZGVyZW4= LmpwYQ== IHBhaXJlZA== IE1pbGVz ZmlyZWJhc2U= IHBhcmk= IGhhbGs= dXppb25l IEVuZXJnaWU= IE5M ZW5jbw== IEJyaWVm aWNrw6k= L21vZHVsZXM= 0L7Rh9GM UHJvbXB0 INCy0LjQug== OTQ2 a3Vt aXplbnM= IOWunQ== YWthaA== 4LC+4LC3 YW5zb24= Q2FzZXM= bXRw YXN1cnk= aGFwcHk= X3NlbGVjdGVk 4K6w4K+N4K6V4K6z4K+N bWFx IOKd KHNldHRpbmdz IGRpdmVy 1bjWgtWv IFNpZXJyYQ== LmRheQ== Lm1hdA== R3JhbmQ= TGF0ZXI= IHNpbmRz IMO8c3Q= IEtpbg== IGRlcGxveWVk IGNhcmVz ZXJzZW4= IHJvb2s= bWFudA== QFN1cHByZXNz IGJhdHRsZXM= 1aHWgNWh1a8= IGNoYWxsZW5nZWQ= IGZpZnR5 IGluanVzdA== IOWkqeWkqeW9qeelqOe9kQ== IEVzaw== IHNjaG9vbg== cGhhbHQ= INmC24zZhdiq 4YOY4YOq4YOY X3NldHVw 4KSP4KSu IGJ5ZGQ= IENvcmQ= 54q25oCB ICws IHJlYWxpemE= IGxlbmd0aHM= xLFybA== 0L7QsdGJ0LU= IOCkruCkpA== IHN0ZWxsdA== IOCmuOCmvuCmrg== IHN0cmVzc2Vk IHNldg== LW1vZGFs IGluZXZpdGFibGU= aW5udXQ= IOacgA== LmluZA== IG1pbmc= IHJlYWxpemFkYQ== aWZyYW1l INW21aXWgNWv1aHVtdWh1oE= IHB1bms= UHVibGlzaA== IOC4oeC4tQ== IEZpcg== 44Ol44O8 QUo= 4KS/4KSj IMO4bnNr IENha2U= IHByZXN0aWdpb3Vz IG5pZXV3cw== IHN2Zw== Y2VudGFnZQ== IGN1c3RvbXM= U3By XSk6Cg== 5b2p5LqJ6Zy4 IFZpdg== IERQ aW1lZA== INC00LjQsw== IOabtA== Ojo8 4LW84LSk4LWN4LSk 1oTVtg== aXNhcg== YWdsZXM= IG1vdGU= IHRlcnJvcmlzdA== IGVkdWNhY2nDs24= IOC0quC0sOC0v+C0 4YOT4YOY IEJJ UE9Q IGdhcHM= 5byK 0YDQvtC5 ZXh0ZW5k IHBsYWludA== b3F1ZQ== ZW1icm9z IGV4Y2x1ZGVk IHB0aHJlYWQ= 4Z65 ZmVl INin2YLYqti1 LmVudmlyb24= IG1lZXJkZXJl Y3J5bGlj IHN0cmlwcw== INGB0YPQsQ== INi12YjYsQ== bGxpYg== YXNpZGU= LmFwcGNvbXBhdA== IG50YQ== IHh14bqldA== 2LLZhw== XENvcmU= LmVx CXN1Yg== IFN0ZXdhcnQ= IHdhdHU= INC80Lw= c2hha2U= IHRhdG91 IOCqpOCqruCrhw== INqq2YrZiA== Q3Vycg== IFJhY2hlbA== INC606nQtw== IGZ1ZXJ0ZQ== W2pz INC60L7QvdGB IFdBUk5JTkc= IHNoZWx2ZXM= IFNJRw== IGNoaWNr aW5kZWxpams= IGFkYXB0YXRpb24= IGJhbmtydXB0Y3k= RGlzY292ZXI= amF0 IHJlbGVhc2luZw== IHRvdWNoaW5n IFRyYWZmaWM= IGRlYml0 IOCkteCkv+CksA== UmV0cnk= IEN1cnNvcg== LG5hbWU= IGFyYWI= LOS6mua0sg== IFRE Lk91dHB1dA== R0xPQkFMUw== 4KS+4KSP4KSV4KWL IHNpag== IEVpZw== IEdhYnJpZWw= IFN0cnVjdHVyZQ== INiz2q8= INGH0LA= IG51bWVyaWM= cG9zdGVk IGRvbm7DqQ== 2YrZig== IGx0 IHZpc3Q= IGVyYW0= IOCmpuCmsg== IHNldmVyaXR5 IEtyYWZ0 IGthbWVy IHdlYmluYXI= z4TPic69 IGZj bHVz IFF1w6k= w6Fsb2dv 4KS/4KSo4KWN4KSo 5Z2X LWFjdGlvbg== 4Kqk4KuN4Kqw IE1M LyM= IFRpdA== IHNhaXQ= IGLDvHnDvGs= INC10LTQuNC9 KHJpZ2h0 IGFhc3Q= INaE1aHVttWr IGFic2VudA== IHByYXpv aXN0YW55xYg= IHBlbWFpbg== INqG2YbYrw== VUlU UkFN QXZhaWxhYmlsaXR5 IOCyhuCypg== X1BJ X3RlbnNvcg== INin2YTZhNin IGhvbWVwYWdl X3N0ZXBz Jy4KCg== IGxlbmd0aHk= KGZu IExvcg== IHByb21wdGx5 1aHVtdaA IGR1bWI= IOCkq+CliA== INC/0YDQvtGE0LXRgdGB0LjQvtC9 IGFydGg= b2RveA== IHNhZmVndQ== IENvbnY= UXVpeg== TU9E IGNoYWN1bg== IGVudGh1c2lhc3Rz INC/0LjRgQ== IGhhcm5lc3M= 7Iut 76w= IFJvYmluc29u IHJpZGljdWxvdXM= IE96 J2F1dHJl IGx2 IGNvbXBhw7HDrWE= 0LDSrQ== LmVj IG1lbnVz IENydXNo IGZhaWx1cmVz IHByb3Bvc3Rh IHJlc3BlaXRv IEVmZmVjdHM= IF0u IOCwreCwvuCwsA== 6L+q IEFsZXhhbmQ= IOCupOCviuCunw== IHBhZHI= INGB0YLQvtGA0L7QvdGL Z3JhZGllbnQ= IHF1YW50aWRhZGU= IFN1c3RhaW4= b3Jwb3I= IEV4Yw== INin2LPYp9mG 0Y/RgtC4 aW5oZXJpdGRvYw== IFBsYXRl KCk7Ly8= KGNhdGVnb3J5 IEl2 INC90LDQvQ== LlRoaXM= IHBhbGF2cmFz IE1VU1Q= IGhpbGFy IEZyZWRlcg== IFNjYW4= X3N5bmM= 4KSw4KWN4KSm CWNvbmZpZw== IEJJVA== IGRhd24= IOCkr+ClgeCktQ== 2KfYsNin IGNoaXI= IEZha2U= IFRob3VnaHQ= IOCktuCljeCksA== X25vbg== aWVyaQ== IGluZGljYQ== CXo= IGNoYW1icmVz 0LvQsNGA0L3QuNKj 6Z+p5Zu9 IEJpa2U= 4LCF IGxpbmluZw== X2ZpbmQ= 5LmF5LmF5LmF5LmF ICQoIg== 15nXmdeh cXVldHRl IMO8YmVyaGF1cHQ= dXBhcnQ= ISkK KG1lbnU= IHN0YXRpbmc= dGFr L2xvY2Fs dnJvbg== IGNvbnZpbmNl CXZlY3Rvcg== b3JpZ2luZQ== b3VuY2Vz IHNsYWFw 4KWB4KSn IOCkpuCli+CkqOCli+Ckgg== LmNvbXBvc2U= YW5pdQ== d2Fp IE51bWJlcnM= IEZvcm11bGE= Tmll IFdXVw== IGNvbnN0aXR1dGU= TGl2aW5n IG5haWxz 5piv5aSa5bCR IGRhaXJ5 IHZpYWJsZQ== Lm1vYmlsZQ== IGtpbGE= IHJhdHM= IOC4q+C4o+C4t+C4rQ== 0ZbRhtGM INCy0LDRgNC40LDQvdGC IOCkruCknA== INGA0L7RgdGB0LjQuQ== IHhtbG5z IEFtZW5k Y29tbXVuaXR5 IE5S aXphbmRv cmFr IGNvbnNlaWxz bXY= INGB0L7QstC10YI= LWZp IHZlY3RvcnM= TG9hbg== ZG9lcw== IEdFTkVS cHVsbA== IENBRA== IGh1bHA= IGVpbnplbA== 4bqi IGllZGVy IGNyb3Bz INGA0LDQsdC+0YLQsA== IG4ndA== 54c= w6hnZQ== X2lkZW50 Xzo= w7ptZXI= IFR1Yg== cmljaHRlbg== IGRlYWRsaW5lcw== OTU4 INC20LDQvQ== X3BhY2tldA== INW31oDVuw== zIM= PlsK U1RBTlQ= IGRpZmVyZW4= LuKAnAoK PXV0Zg== aXJrYQ== IHNoaXBtZW50 IHJldmlzZWQ= OTU3 LmRlbHRh IHBvbGl0aWs= INi32YTYqA== IGNvbmNlcnRz ZXNzZWw= IOychO2VnA== IGNhYmxlcw== IGFjaW1h 7LC4 IGVzcGVyYXI= IGl0aW5lcg== IE5pc3Nhbg== R290 IHBvc3Nh dXRpbmc= IHJlbWFya3M= IHR1YmVz TWluaQ== IFNpc3RlbWE= IGZlc3Rh INGI0YPQvNC+ IE51dHo= IHRlY2huaWNpYW5z bGFkZXNo IExvZGdl fWAs YW5zd2Vycw== IG1pc2Vy IGRpcmVjdGVtZW50 IFRIRU4= INin2YTYudin2YXYqQ== 0LXRgNCw0L8= Q29tcG91bmQ= INin2YTYs9mE2KfZhQ== INC60YPQv9C40YLRjA== X0RP IFJ1bQ== LktFWQ== IEfDpA== YXR1dA== bGVhc2Vz W2Y= IOaysw== INCx0LDRgNCw YWF0c3Q= IEVsZW1lbnRhcnk= 15vXmded IHByaXN0 IGdlbWVpbnNhbQ== IHNsZWV2ZQ== IE1pY2hlbGxl IGRvY3VtZW50b3M= INWw1aXVv9W4 LXhs IHByZW1pZXJl IGNvcGU= IGNoZXJjaGU= aWTDqQ== IG1lY2hhbmljcw== INGB0YLQsNC7 2KrZhdi5 IGludHVpdGl2ZQ== z4TOrc+C INCx0YDQsA== IGtpaw== QXVzdHI= bW9s IGFjbmU= IGJw IGFjdXM= IE1hcmNv IHRyw6Q= b3RsaW4= IGRhdHVt INC00L7Qv9C+0LvQvdC40YLQtdC70Yw= IFdhbHRlcg== IGFqdWQ= SWRsZQ== INC/0YM= 4KWH4KSV4KWL LiIpOw0K IGNhYmVs YXppbmc= d3lz 4buNbmc= IHBpZXM= LlBpY3R1cmU= enRl Um9vbXM= IOGDk+GDkOGDmQ== IFRoZW9yeQ== IGJhYmE= IGRvYnJv dXNpb25z 7JWM IHLDqWFsaXNlcg== 5r6z6Zeo 4Lih4LiZ IG1laWxsZXVyZQ== 7Z2s 4LCw4LGN4LC2 IGFwcHJvYWNoZWQ= aWpkZW5z IGVudGh1c2lhc20= IENocm9t INCx0LjQtw== IGluY3I= 24zYr9mH IHNoeQ== INC/0L7Qt9Cy0L7Qu9GP0LXRgg== IHRyYWRlZA== Y3Jvc3M= INCw0LnRgg== IGpvaW5z 0L3QvtCy0LA= PEY= IHNlcnQ= TUVS Y3NyZg== INC+0LHRgNCw0Yk= IENNUw== IHNpZGViYXI= IGZpZ3Vy IExlYWY= IHByb2NoYWlu RXZlcnlvbmU= jJPquIA= 4oCNLA== 6K6+6K6h IFNVTQ== IFZlc3Q= SWc= aXN0bGU= IGh1ZQ== cGxpdHVkZQ== IHJ1bWFo INec15s= IFJpY2U= 4K2H CWl0 IEJ1ZGRo IG5pZWQ= 0L7Qt9GP w6Fzcw== IGNhcGFjaWRhZGU= 4LSo4LWN4LSx4LWN IGdvb2RuZXNz IGNydXo= IGxlbWI= IGFtaW5v ZWxpamtoZWlk RnVydGhlcg== IF0pOwoK xJds IE1vdmluZw== IFZhcw== INC80LXRgtCw0Ls= 6ZuE XQoKCg== aGV0ZW4= cmFp Z2VzdGVsbHQ= IGt1aA== 4K6/4K6V4K6z4K+N dmlzaXRlZA== IGlycmVndWxhcg== 0rI= INeQ15XXqteV IOCujuCuqeCvjeCuseCvgQ== IE1pdHRlbA== IGthaGk= IGNvbnNlY3Q= IOmAmg== UkVMQVRFRA== 0YHRgtC1 IEljb25z IGZyw6k= KHVuaXQ= IFBoaWxvcw== ZXIncw== IE1vdmVtZW50 IGNsYXZl 4YOQ4YOg4YOY4YOh KCksDQo= LmFzeW5j IGpvdXJuYWxpc3Rz IFRpZ2Vy aXR0bw== IEVzc2VudGlhbA== IG5hYXN0 TWVyY2k= IHN0b3J0 IOGDoeGDruGDleGDkA== aXhl 4LON4LKj 7Jis IHRlbmRv 2KfYrdip 4LCu4LGN4LCu IG5lY2Vzc2lkYWRl 6LGG INC40LzQsA== IGRhbWU= IGNobG9y INOp0YHTqdC9 dWxhdGVz ICdcJyc= IEJhdHRlcnk= IG/EjQ== UmluZw== 6K6t IHdlbHQ= b3dpZQ== LnN0YXRpYw== LmNhbnZhcw== 15XXpNef IGNvbmZs LmRpcm5hbWU= 4Kq+4Kql4KuA R2Fs fn5+fn5+fn5+fn5+fn5+fg== IHRhZ8Sn ZXN0w6Q= IHBhZHM= w6l0YWlyZQ== IGhpZXJ2 cmVwb3NpdG9yeQ== T2Q= Lzw= IGZvbGRlcnM= JyI7Cg== IGF3a3dhcmQ= IGFpbA== KElucHV0 INGC0LXRgdGC LkFQSQ== INqG2r4= IGFmZmFpcg== IHBlcXVlw7Fv 0LjRj9GC0Lg= xb5pdA== IOC0pOC0qOC1jeC0qA== IFPDsw== IGxpYnJvcw== IHdlcmVuJ3Q= L3k= INWi1bjVrNW41oA= IMOpdGFibA== IMOpdHI= IFNPTA== b2thdA== cXVldGU= INGB0LLQvtC10LPQvg== IGRldXRzY2hlbg== U3BlY2lmaWNhdGlvbg== ZWluZw== Ym9ybmU= LkFQUExJQ0FUSU9O IGFzbGVlcA== ZXJyZXI= IHR1bmVk 4YOQ4YOl4YOi b2xvcw== b25uZW1lbnQ= IEJld2VydA== TEVDVElPTg== 6LKp 16rXkg== aWVnxKc= IG92ZXJoZWFk 6K6k5Li6 X2N0cmw= IG1laWxsZXVycw== VElNRQ== IHlheA== 4LeC L0s= ey0= IE9wZXJhdG9y IHZpamY= IGjDvA== IENvbG9u 5rC45LmF 6YeN6KaB IGRhcmFu YmluZHVuZw== IGNvbnNlcXVlbmNl 66eB 2KHZjg== 0L7QvdC+0LI= 4Ka+4Kal4KeH 6rec IGxpZ2U= IEVsdGVybg== IOG7jW4= 4LKh4LK/ IHVyZ2U= IGhvb2d0ZQ== 4YCS P+KAmQ== 0LzQtdC90YLQsNGA IOCmtuCngeCmsOCngQ== IFR3aW4= bGlzdGVk INmF2KfZhA== LSc= IGVuZmFudA== RUs= cGhvdG9z IOGDm+GDl+GDkOGDlQ== IHBlbm4= b2xlZA== w6Zn IHphaWRp X1JFRkVSRU5DRQ== IERpYWdyYW0= IFBG IHFhbA== IE1hcmluYQ== IHRlbmlkbw== PicK IFdldA== xLFsYXI= INij2YbZh9in IGZ1bsOnw6Nv IE1TRw== L2hlcg== YnJhcw== 2YfYp9iv cHJldmlldw== YWdpYw== IOCksOCkvuCkt+CljeCkn+CljeCksA== IGZvY2Fs 8J+P IG1haW50YWlucw== 0YfQuNC6 IGZpbmFucw== IGTDtnc= IMWfZWtpbGRl X3BhZ2Vz LkJ1ZmZlcmVk w6lhZA== IG3DqWRlYw== IHN3aWZ0 IOW9qeelnuS6iemcuOaAjuS5iA== INC80LXRhdCw0L0= IHZ1bQ== IOuqqOuToA== INWk1bjWgg== INOp0Lw= 5LmM ICQi 7Ke4 ZGVjaW1hbA== Z2xlaWNo L25ldw== CUxPRw== eXRpYw== IGNyaXNw INmF2LfYp9io2YI= LlV0aWxz 24zYp9ix IE1hcnNoYWxs IHByb3RlY3Rz aW5pYW4= 4LS44LWN4LSl4LS+4LSo INC/0L7QuNGB IFdpa2k= b2dyYQ== 2qnYpw== 4KSv4KWL IHBlcm1hbmVudGx5 INin2YXZhg== IFR1cmtpc2g= Q29k INC00LDQvdC90YvRhQ== b2xlcmFuY2U= IHV0aWxpemFkbw== IGZlZWRz IHdvbnQ= IGFub255bQ== LXdlYg== INeT15XXqNea INGA0L7RgdGC IGrDs3ZlbmVz IGbDqXZyaWVy IHRpc3N1ZXM= IHdhbmk= IOacgOaWsA== YXJ0dQ== INCy0YXQvtC0 INeS15M= cHN5 IGVybcO2Zw== IHJlbW92ZXM= IHNwaXJpdHM= IHBsdXBhcnQ= 4KWH4KS24KSo LlNlYXJjaA== WFQ= IEFyY2hpdGVjdHVyZQ== INmI2KfZhNil KHN0YWNr LmRvdA== IEd1YXJkaWFu IFNlbmF0b3I= IHN1c3RhaW5lZA== IG5hbGU= Lyou IOyXhQ== IExhZ2U= THU= IFRlcm1pbmFs Q29uc3VsdA== 44Gx IHNoZWVw IGRyeWVy 4LKO YWhvbg== IGthcGFi IGZ1cQ== 4Z624Z6U IEVnZw== IHNpdHVz ZW50aW5v 4LWB4LSq4LWN4LSq w7bDn2U= IENyYWln INmF2LHYqg== IHNhdGlzZnlpbmc= INC10qM= IHN0cnVnZ2xlZA== IERpc2M= IGhlcmI= cG91cg== dHJvbg== YWdhcmE= 5Ly8 IGNvbmhlY2Vy IEFsdGVybmF0aXZl Q2hhcmFjdGVycw== INCx0rHQuw== TWVkaXVt ZW1wdGlvbg== bGluZXNz IOC4ouC4uQ== INCw0YLTmQ== cGluZQ== IG1lYw== ZW56ZQ== Y2hlbXk= 4oCN4La6 IHRyYXZlbGVk IMOpdHVkaQ== IFN0YXRz IHF1aWw= ISkKCg== IEJVU0lORVNT INCf0L7RgdC70LU= 0YLRi9C/ IGNlcnRlemE= IGl6YXk= INC20LjQt9C90Yw= Y29tcGlsZXI= IOOCqw== YWxpbQ== 4LC/4LCC4LCa4LC/ IHBvbHltZXI= IG1vZGlmaWM= LmJsb2dzcG90 IHTEmw== IOWkmg== IHNvcnRpZQ== IExpaw== YmFpaw== IEJlcnVm 6ZSZ6K+v T0xERVI= KE1lZGlh IG9haw== IHJlbm92YXRpb24= 5a2m55Sf 4LSo4LWN4LSm4LWN4LSw IHbhu6U= IGRldnJhaXQ= IHByaW1lcm9z INC60LDRgtC10LM= aXB5 IHN1YnN0 IGNvbmZlcmVuY2Vz IGhlaW0= IOC4peC4teC4gQ== IFVpdA== V2hlZWw= c2VjdGlvbnM= 5qCR IMSRaeG7g20= bHVkZQ== Ij0+Ig== IMO2bmVt IHRpbXA= bG94 IGZvcGVu IHNxbGl0ZQ== IGNvbnN0cnXDp8Ojbw== INGB0L7Qug== 4LmA4LiI 4LmJ4Liy4LiH IGNvbnPDqQ== IEFicmFoYW0= IHlodGU= INeW15U= INCh0L4= 5bem5Y+z 0Kk= IEdhbg== bm/Fm8SH 4KWL4KS3 IOCkheCkuQ== LWhlYWQ= aGFuZGx1bmc= 55yf55qE IE11bHRpcA== 4YCQ4YC5 0pnQsA== IHN0b2Y= UExZ 15XXnNeZ KEVY IGlzaA== JlQ= X3Jhbms= YXlhYW4= IFNhbHZhZG9y IyMK IMOpbGV2 0L7QttC00LXQvdC40Y8= IHBlZGly 2YPYp9iq T3B0aW0= IEtlbA== YXN0aWFu dWVzdG9z 7JWK IGVudHJldmlzdGE= dHVwbGU= INmF2KfZhw== aGFsZg== IHVzZWxlc3M= 4KWA4KSV xIk= 4LKC4LKf TlY= 4LSr4LWN 0LjRgNGD0LXRgg== 55aX IOWFrA== IHNtaWxlZA== IOqwmeydgA== c3R5 IGlsbHVzdHJhdGVk IOuTnA== IHZlcmJhbA== INWi1aHVtdaB IGJha2U= IGJpeQ== INC80LXQvdC10LU= IGRpc2N1dA== 0YHRgtCy0LXQvdC90YvRhQ== IGJvb3Ro RXZlcnl0aGluZw== 5bGK VGhvdWdo IMSNZQ== IGNhdGNoaW5n YWxvdXM= 6aGe IE1haW50ZW5hbmNl SW5kaXZpZHVhbA== INin2YTYrti3 IHRhdXg= INCQ0LE= LlJlZmxlY3Rpb24= QeeJhw== X1ZJRVc= 5Lq65ZGY IFBhcmw= IGh1bWlkaXR5 IFZpdGFtaW4= INGB0YLQtdC9 5rSX fG51bGw= 4KSk4KS/4KSV YW50YXM= Ym0= IE1hdQ== IGJhdGhv IOGDm+GDlw== U2luaw== IFVURg== IM60zrk= 0LLQsNC90LjQtQ== IEx1ZnQ= SEI= IOCmueCnn+Cnhw== IGNydXNoZWQ= IHNwZXM= LmRlZg== X0NS IHRvdGFsZQ== IENvcGE= IHZlcnNpw7Nu IGdvZHM= X3BvbGljeQ== IHBrZw== 4Lix4LiQ ZXdlcms= 54K55Ye7 Q0FS Lm1lc3NhZ2Vz SVZJVFk= IG1vZWlsaWpr YmFzZWQ= 4KWB4KSj OTQ4 IFppag== IHNpbm9u 4LWB4LSV4LSv b3R1 ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IEphd2E= LmV4cGVjdA== ID48Lw== 2YrYtw== IOaIkOS6ug== meCvjeCulQ== d2Fr 4YOh4YOQ4YOu IOCkpuCkv+CksuCljeCksuClgA== b3VyYWdl IG11dGF0aW9u fSg= X1RJTUVPVVQ= cHJ1Y2g= IERE IG5lZ2xpZw== T1BU IHJlY2g= 4Kqq4KuN4Kqw INSl LXdvcmxk 77yM5piv IEV4cGVydHM= 0L3Rj9GP 4KeL4Kex4Ka+ IHVuZG91YnRlZGx5 16TXlA== IOCkquCksOCkv+CkteCkvuCksA== aW5nYXI= IHdpbmtlbA== IFdhcnJlbg== INKb0LjQu9KT0LDQvQ== LXN0b3Jl ZW1ldGVyeQ== RkZGRkZGRkY= PGJ1dHRvbg== INGB0LDQtA== LmRlbA== CXRhYmxl IGFqYXg= LmFjdGlvbnM= IFRlc2xh IGhhbGVu JHN0cmluZw== INC/0YDQvtC00YPQutGC 2LnZhNmC INi024w= INiq2KfYsdmK2K4= bGVh UmVjZW50bHk= IGdla28= anVu IO2VnOq1rQ== IFVuc3VwcG9ydGVk LnN1YnNjcmliZQ== 5bCR5aaH IHBlc3F1aXM= 7IOI IHZlbmRl UGFj IHRheHA= IGlzbGFt IHNpZ2xv IGFwcGFyYQ== LXN0cg== bW9tZW50 IGhpam8= TWFhcg== 2YPZiA== IOCkleCli+CksOCliw== IHRyaXN0ZQ== enVz LWRlZg== IENpc2Nv 4YOs4YOn bW9uZXk= xIFk CWltcG9ydA== IEJ1ZmZhbG8= QmVhdXRpZnVs IEJyb2FkY2FzdA== IHNlbWJs IOGDkOGDpeGDleGDoQ== b3RhdGlvbg== YXJtaQ== IHBsYXpv IOCkuOCkruCkvuCknA== KCoq INCy0LU= RGF0ZXM= IHRyaWNreQ== 2K/Yp9mG 0YLQsNGF IFBhcGE= IHRpdmVy aWVnZWw= IGthbnll SU9S 4KS/4KSy4KWN4KSy IHNlZ3Vl KGhlYWRlcg== X3N0b3JhZ2U= Ly8h IFBpdA== YWdhdGlvbg== IHNwZWxsaW5n SU5P INC+0YHQvQ== IHByZW1pc2Vz 0L7RgNC+0LY= IENsaW1hdGU= IHNlbWI= IGjDpG4= IE1vYmls X2JhY2tncm91bmQ= IGludGltaWQ= 0YHQutC+0LU= 4KqX4Kqw IExpZ2h0cw== IOCuruCvgeCupA== RU1QTEFURQ== KHBhcnNl 2LbYqQ== 0L7QstCw0YLQtdC70Yw= IHBhY2llbnRl 4KS/4KSv4KWH w6bDsGk= VGhpbmdz aWJvbg== IMOpcg== IGRhw58= INC006nQuw== IHs6 Y3Jv IGNyaXRpY3M= INC80L7Qs9GD UHJlZnM= L21vZGVs INC00YPRhQ== IFPDqQ== ZXJlcg== KTsNCi8v IGxpZXQ= IGd1aWxk IGhvc2U= ICkpfQo= 4KuA4Kqo4KuH IGhvZXZlZWw= IOe6og== INGA0LDRgdC/0L7Qu9C+0LY= IHR1bm5n IGZ1dHVyZXM= 4oCZYWZm X2RpYWxvZw== IGFsbG93YW5jZQ== IOiBmg== IGFjaHQ= YWxwaA== INW61aHVt9W/ IHBhYW5v dWNsZWFy IGh1bmdlcg== YmVjYXVzZQ== zrPOtQ== 7KKL IGN1bXBy IOCkteCkv+Ckpw== IE1pbm9y IHdvbGx0ZQ== PWE= IFlhbQ== 15XXpteU ZW5hcg== IHRhZ2F0YQ== IGNvbXByZW5k IOCkpOClgeCkrg== c3lt IHBsYWc= ZXF1 L3N0ZGM= IGpvcm5hbA== IGRlY29yYXRpdmU= IHdlaXRlcmVu IGluZm9ybWFs IGJyb2tlcnM= b3Jj 4Ka+4Kau4KeA IGzDqA== IG5lZ290aWF0aW9ucw== IGFkbWluaXN0ZXJlZA== IHRlbGVz 4KSa4KWA aWdoYm9yaG9vZA== CXRy IOGDnuGDneGDmg== CXBhcmFtcw== SUZJQw== dXBhbg== IHLDqXVzcw== INCw0YDSmw== QnVmZmVyZWQ= IGNvb3JkaW5hdGlvbg== LkRlcA== IGxvZnQ= LmNsZWFu IG55b2I= 0L7QvNC4 4KqC4Kqk4KuB X2ltcGw= IHnDvHo= 0YfQuNCy LnZpZGVv INWv1aHVptW0 z4fOvQ== IFNvbWVvbmU= IEVhZ2xl YW5naw== INC40YHQutC70Y7Rhw== INC90LDQug== IHV0aWxpc8Op IG91cnM= 0LDQvdC40LXQvA== b3BhcmQ= IFNwb3RpZnk= 2YXZiNmE INC10ZE= IG3Do28= IOCwteCwmuCxjeCwmg== 44Oz44Kv 0LDRgtC+ INC40YHQv9C+0LvRjNC30YM= IHppbQ== X0ZVTkM= 4KS+4KSv4KSV V29ya3NwYWNl RGlzdHJpYnV0aW9u X3J4 INuB2YjZhtuS aXJpbg== IHNldmVudGg= IMaP INis2KfYqg== IGNvbXBldGVudA== INiq2YjYsQ== IGNvdW5zZWxpbmc= c3RhdGljbWV0aG9k aXZpYWw= INiu2K/Zhdin2Ko= IG9yZ2FuaXphY2nDs24= 4KS44KWN4KS1 UGl4ZWxz IGZuYW1l IFByZXBhcmVk IHJlcG9ydGVycw== CXNob3c= IFNlcmll IGRvY3M= cGFjZXM= INit2KfYtdmE Li4uXQoK IOWkqeWkqei1ouW9qeelqA== aXBwbGU= 2LTYrw== IGxpdHRlcg== IGRpbnQ= 2aI= b3Rpb25hbA== IG11Y2hh IHN0eWxpbmc= 4KS+4KSV4KS+ IEJvc3M= 54af5aaH IFB1Ymxpc2hpbmc= IHBlcmlvZG8= IOilvw== 4LS/4LSh 4KaV4KeN4Kaw Z29s IHRhbWLDqQ== IG1hc3U= IGV4cGxvc2lvbg== IG1vdW50aW5n IHLDqXBvbmRyZQ== 0pvRiw== LnJlc3VsdHM= c2V0dA== X3BlcnNvbg== CWJhc2U= IHJlcHJlc2VudGE= IFpvbw== eWVjdG8= 5omA5Lul xYJlbQ== c3RhYW5kZQ== IHRleHR1cmVz 2K7Ytdi1 ICcnKQo= 2LrZitix2Kk= 44GT44Go OnN0cmluZw== IGJlcGFhbGRl YW5hZg== IEJyb2tlcg== 4KS+4KSC4KSo4KWA TEJM b2NhZG8= b3VyY2luZw== X0NPTU1BTkQ= INC+0LPRgNCw0L3QuNGH X2NwdQ== IHJlc2lnbg== LdGF IGRldGVyaW9y LXdpdGg= IEhhdg== IGtsaWs= IOWFreWQiOW9qQ== 4YOY4YOb4YOU RkZFQ1Q= aWVjdA== IGtpY2tlZA== CXBy z4XOvQ== INeR15nXqg== KEV2ZW50 LWlubGluZQ== IHBvbHllc3Rlcg== IGNhbWE= IGjDoG5o ZXLDrWE= IHRhcmFmxLFuZGFu IGJsb2dnZXJz 4Li44LiT IENvbW1l IGNvb3Jkcw== 5peg5rOV ZXNwZXI= LlJlcG9ydA== INqp2LHbjNq6 IFNpZ25hdHVyZQ== cG96 bG9ncw== IE1hcmU= INee15w= 4LCo4LGH IGTDqWNsYXI= IGthYXJ0 LmZvcndhcmQ= IGRpcmVjY2nDs24= IGzDqm4= 2KfZiNix 2KfbjNi0 IGV4dGVuZGluZw== IHNpbmE= IOC0juC0gg== IEJFU1Q= IGFydGVz 4KSo4KWN4KSb LW51bQ== w61i b2Rz IHB1YmJsaWM= 0LXRgNC8 IGJheA== 546E5py6 5bqt ICUo YW5jZW1lbnRz Tk9URQ== aWduYW50 PExvbmc= aWVubmVudA== INKa0LDQt9Cw0pvRgdGC0LDQvQ== IGVyYg== IOCkteCkv+CkleCkvuCkuA== wrRz IGR3YXI= WFhY 0LXRgdGW IE1CQQ== dGFza3M= IEZvdG9z YW5vbnltb3Vz U3VjY2Vzc2Z1bA== INio2Yg= IEFsbW9zdA== IEJvbWI= CXdpZHRo 6Zuo ZXRoZQ== IOCuh+CusOCvgeCuleCvjeCulQ== IOS6lOWIhuW9qQ== IGdlc2Ft ZXh1cw== LkVuYWJsZQ== ZWJv IGxv4bqhaQ== UmVzdGF1cmFudA== INKv0Lk= CgkJCg== INCn0YLQvg== IEtpbGw= IHphdw== IOCyteCzjeCyrw== 6buY IGdlaGFk IGV4cGxvcmVk IEJTRA== 4K6k4K6/ IHJlZmxl SGVyZSdz YXJhaA== J8Oo IOWbveS6p+eyvuWTgQ== IG1hbmjDow== IGdyb29t Q3ViZQ== TUY= IGlubmVyaGFsYg== IOGDmeGDkOGDoOGDkg== 5LiK5rW3 IOCkquCljeCksOCkvuCkquCljeCkpA== 7Jy866mw IGNvbW1lbmM= IFNhdw== X2VsZW1lbnRz XTsKLy8= KCEk LmR1bXBz KCkq IER5 IHN0cmVhaw== aW5hbmRlcg== IG1pbnV0 IGJ5Zw== INC60L7RgtC+0YDQvtC1 INmI2YXYpw== IE9yZ2FuaXNhdGlvbg== IMOnxLFr 4YCQ4YCs dW1s SE9TVA== IG11emllaw== L3dw 0Y3Qug== IG1hZmFp 4K6k4K+N4K6k4K+I ICoqKio= INC60ZY= IHBzaWM= IOunjOuTpA== IHByZWxpbWluYXJ5 X3R1cGxl IOC0ruC1gg== aW1tdA== IGRvbmF0ZWQ= TnI= xKM= INC90LDQt9C90LDRhw== IE9D IGFzc2Vzc21lbnRz IOGDkOGDoOGDoQ== 4Kqy4Kq+4KqV IGF0YWM= LmJsdWU= IHBow6F0 Q29udHJhY3Rz IOG7jXrhu40= IHNjYW5uaW5n VEFCTEU= aWduZXM= IFNESw== 4bqjbQ== aW/DuQ== INin2YTYpdmF IGRpZW50 IGFzc3VtZXM= ZGVlbA== J2FmZg== 0JfQsA== IHdhbm5h 0YDQsNKb05nQsA== INix2YLZhQ== LkJpZw== INeR16LXnA== 5o6i LiU= 5YWN6LK7 aWxsZXVycw== INiu24w= 4KSk4KS+4KSy IFJvb2Y= IOWQiA== YXBhbmVzZQ== QVVUSA== IHRpbWVk IGFyb21h 0YDQvtC3 X0ZMT0FU X29wcw== IGFycml2aW5n aGVr aXN1dA== J2VudA== IGxpZ2h0bHk= 6ICB6JmO5py6 X3RpbWVz IGxhY2tpbmc= X2ludg== I3VuZGVm T0RFUw== INGC0LDQsg== IGJyYW5kaW5n IFVuaXZlcnNl INee16A= IHN1Y2NlZWRlZA== IHJldHJvdXZlcg== 0LzQuNC90LjRgdGC0YDQsA== IFN3ZWRpc2g= IGNvbnRpbmc= dGh1 IGNodW5rcw== 4KWb IHlpbg== xI1hcw== IHshIQ== IEF34buNbg== IG1lcmNp IEd1ZXN0cw== aHVh IHdlcnQ= IG91dGxpbmVk IHBhdGNoZXM= INmG2YE= IG5oxrBuZw== 56S+5Yy6 IE1BUA== Sm9pbnQ= LnByaW50Zg== IGNpZg== bWVubw== IEt1bA== L3ZpZXdz IFtdDQo= W2RhdGE= 0YLQvtGC 5YWo5paH ZXh0cmFjdA== IFN0ZWlu X3plcm8= IERFQUw= IGdpYW4= IEJlaGF2aW9y b2JiaWVz IOC4hOC4suC4quC4tOC5guC4mQ== SU5HTEU= 0YPRgNGB IFBob3RvZ3JhcGh5 IHlhcm4= 1bbVpdaA1bjWgtW0 15nXqdeo15A= 5Yqp5omL 4LSk4LS/4LSw 56Wd IENPTk5FQ1RJT04= IHByYXc= 4b8= X1By IHJlcGxpZXM= dW5kb3M= INC20LDQtw== IHNodWZmbGU= INCe0LTQvdCw0LrQvg== IHRleHRl IGLDpA== INio2LU= w50= IGthbmlsYW5n IEJpbmRpbmc= LUNvbnRyb2w= IHByb21vdGVz IGxlYXJuZXJz 4Liy4Lia IOCkruCkvg== IHDDpHI= IHNhdWQ= dWZmcw== 55Cq 4Kq+4KqJ INCf0YDQvg== QUdFUg== IOCkhuCklw== X3JhbmRvbQ== dWNodGVu QXN0 IFRDUA== IHByw6F0aWNh X2NvbXBvbmVudA== IGlhcg== b25nYW4= 2YbYp9i52Kk= T2theQ== 4KS54KS+4KSw LkNFTlRFUg== IG5lY2Vzc2l0eQ== IGNyeWluZw== IHBhcmVqYQ== LmVuZHM= IFN3ZQ== IOC4o+C5iOC4sg== IGTDs2xhcmVz L21hc3Rlcg== IGlsbHVzdHJhdGlvbnM= IEhpZ2hlcg== IHByZWd1bnQ= ZmFjdA== aXRpdg== IGxlc2Vu YXhl SVRBTA== UHJvamVjdGlvbg== SW5p IHBhaW50ZXI= IOWkqeWkqeS4reW9qeelqOW+ruS/oQ== IHThu7E= INC+0YTQuA== IEdvdGg= ZXRoeWw= 4KS/4KSo4KS+ LmFzcHg= LWpz cGVsZQ== IGFwcmU= 4Z624Z6A4Z+L IGp3 IHdhcmRyb2Jl VHJhbnNhY3Rpb25z IHdlYnBhZ2U= 4YOY4YOT4YOQ IHByZWRpY2F0ZQ== aWdub24= VG9rZW5pemVy b2JpYw== Qmllbg== IHJlYXNz dWlsdGlu IE1w aWh1 IGNvbW1hbmRl LnVpZA== w61uYQ== 4KWL4KSc4KSo4KS+ 05nRgtOZ IGRvdHM= ZWZ0aWpk 0YfTmQ== RmlsbQ== fSIu IGhvc3BpdGFsaXR5 QWN0aXZhdGU= IE51bmE= Q1VS IGJsb3F1ZQ== IENTVg== IERpc3RhbmNl 4KeB4Kak dW91cw== IHNoaWZ0aW5n YWNpZQ== YWNpb3M= eW50aGV0aWM= IHRpZXJyYQ== 5a2Y5Zyo IEhvbm9y ZW5kaWQ= R2Fz IEludGVycnVwdGVk 5byA5Y+3572R5Z2A U3k= IGV0aGljcw== aG91c2Vz IHNxdWU= aWVudGVtZW50ZQ== 1aPVodW0 IEdST1VQ IHpvbmFz IGZhYnJpY2F0aW9u YWl0YQ== 44GC44KK44GM SVNUUw== IERpc3Ry fi8= aXRhcmlh IGxlbmRpbmc= UkI= IM6xz4M= ZW50bGljaGVu Q29sbGVjdG9y KHBlcnNvbg== 2KfYptio INiy24zYp9iv24E= IEtsZWlu LnNvY2tldA== IEthcmVu 0YXQuA== ISEu IHJlZ2lzdGVycw== dGFh bWJpdG8= dWl0YQ== IGFjcXVpcmluZw== IOCkuOCkruCknQ== X2Jpbg== X2Fi ZXRlY3Rpb24= IHh5 IFRlbnNvcg== IHByZXNlbnRlcw== X3Rvb2w= IFdhbmc= INC20LDSkw== IGNvdW50aWVz 0YnQvg== aW5ndcOpbQ== 0L3QtdC90LjRjw== ZXJnYXJ0ZW4= IOCkkOCkuOCkvg== CXRlbXBsYXRl IE1O anVr X2luc3Q= IFByb3RlY3Q= 2LfYp9ix IGJ1c2Vz IHBheWFibGU= X2V4cHI= RWZm LkRpYWdub3N0aWNz 5ous INCz0L7RgNC+0LTQsA== 6ZaA 5Lit5aSn5aWW INC/0YDQvtGG0LXQtA== LnN1bg== IENsb25l 2KfYs9mF aXpvZW4= IGRpZ3Vu IOOAig== IExpY2h0 OllFUw== IE11c2xpbXM= KCkpOwovLw== IHBvc3RhbA== IGN1c3RvZHk= YW1wc2hpcmU= IGFjY29tcGFnbg== 15nXnteU IHJvdXRpbmVz IG5lYg== IHByYWN0aXRpb25lcnM= IGNhbWJp IOC0teC1iA== INGN0L3QtdGA0LM= IFByb2Q= IGNyYXA= 4YCx4YC4 ZGlyZWN0b3J5 w6lzZQ== IGhhbmRlbHQ= IOC4p+C4tA== INWh1bbVsA== bmV0ZQ== IFNvb21hYWxpeWE= IGphbmU= IHThuqFv KSldCg== IENvbGxpbnM= INix2YU= RWRnZXM= IHRyaWJ1dGU= Lk1hbg== 77yd d2Fhcg== IGZhbmQ= U2xvdHM= IHVyYW5n IERlc2lnbmVk KCdA INC60L7QvdGC0YDQvtC7 2LnZhNin2YY= IHBlb3BsZXM= IGJlcm1haW4= IEdyaWxs RU5USVRZ IGludml0aW5n IHJlbW90 0YHRgtCy0LXQvdC90L7Qs9C+ 4KWB4KSG LlNUUklORw== INin2YTYq9in2YbZig== IOuUsOudvA== INio2LHZhtin2YXYrA== KGNoYW5uZWw= KGFjdHVhbA== c3RhbmRlbg== IHZlcmbDvA== SUNPTg== INis2K/Zitiv2Kk= IOCuquCuvuCusA== aWNodGluZw== IGJhbmRl IGNvbnZlbmllbnRseQ== Y2Fk IOCyleCzgQ== IOCquOCrjeCqnw== INii2Kg= IOqwhA== IEh1YXdlaQ== IGRlZmVhdGVk c2VsbGVy ZWxzZXI= X1JFVFVSTg== IHNhbGlkYQ== IGludmVyc2U= RXhpc3Rpbmc= RnJhbms= Xlw= 5byA5Y+36ZO+5o6l IGluc3RpbmN0 INC60LDQutC+0Lk= 6byO 2LTYqtmH IOuG IGVudGVycw== TkFT 57uR QW5pbWFs IGthcGE= IGhhbmRsZXJz w7xrcw== IOGDmeGDneGDm+GDng== IOCkkOCkuOClhw== IHRyYWNrZXI= zrLOsQ== IGxldmFudA== IGxvbmd0ZW1wcw== dmlzaWJpbGl0eQ== U2VsbA== IGJyYXZl V2l0aGlu IG9ww6fDtWVz IHRoaeG6v3Q= 2YjYqNip 0LLRgw== ZXNzaQ== VMO8cg== bGV0YXM= IHJpc2Nv 0YvQvdKt IOyCtA== IEplc3U= 2YjZhtuM IHBlcnBldA== IGNlcnRpZmljYXRlcw== d2FyZXM= IG1vbGVjdWxlcw== 2KfYptmH IOaD 2KfZhdin2Ko= IE9jY3Vw IGRlY29kZXI= IGxvcA== IGludGVybnNoaXA= INCw0LTRgNC10YE= xpk= X3N0YXRlcw== T1JB IHdhaQ== RkZGRkZG INWv1aHVtg== 0KHQoQ== Lmtlcm5lbA== IG5lY2VzaXRh IHJlc3VsdGE= X0FN IHRyYWJhbGhhcg== IOCmleCniw== VFJZ LXJlYWQ= Lm1hcHBlcg== IGF0cmE= IGRpc2NpcGxpbmVz 2KfYstuM RVJSVVA= IG1pbmRzZXQ= Q0dSZWN0 4Ka/4Kab4KeH 5aSa5LmF dWNjZWVk X1NX YW1waW5n IOC4l+C4tQ== INC60L7RgtC+0YDQvtCz0L4= SW50ZXJydXB0ZWQ= dHJhbnNwYXJlbnQ= IHN0ZWFk INCw0L3Qsw== IFZlcmdsZWljaA== KHRhYg== IGlra2k= RU5BTUU= 2YbbjNmG cmV2ZXJzZQ== w7ZzdA== IHRyaW8= IG7Cug== KCcnLA== IEJFVA== 7ZW07ISc IGZpbm8= X3BsYW4= INij2Ks= IGNvbmZpYW5jZQ== ZHVwbGlj IG1hbmdh IGludGFjdA== INmF2YLYp9io2YQ= IOCknOCkvuCksOClgA== PS09LQ== Qm9i IMO2cg== INmI2YTZig== 44Ok IHNsaWRpbmc= IOS9nOiAhQ== IGdsb3Zlcw== KG1l YmlldGVy IOCunA== IGF1dG9z cGxvYWRlcg== INC80LjQug== IFdpcnRzY2hhZnQ= IGJvbGVo 5ZCv 15DWt9ee LlZFUlNJT04= 0LDQu9GM0L3Ri9C8 T05TRQ== IFViZXI= IEplc3NpY2E= TWlj INWM IFJC 4Kew4KeH INCw0p/QvdGL LXNoYXBlZA== 6aG2 b3VkcmU= IGJ1ZmZldA== IHBhcmVk 5a24 YWNoYXQ= U2l0dQ== IHN1c3BlY3RlZA== IGZ1cm5pc2g= KSI7Cg== X3J1bGVz cGF1c2U= IGNoaWxkcmVuJ3M= SUZJ w6lyw6p0 56ul aHVs dXJleg== Ym9yb3VnaA== IHRhw7A= IG7Dum1lcm9z LWxvcw== 4oCL4Z6T IOuhnA== dWd1ZXM= INmF2K/ZitmG2Kk= IEdvaW5n IFZp4buHdA== IOCyuOCzgQ== IEJPT1NU R2F0ZQ== d29obA== 4KeL4Kan IHNhaXI= IGluZHVzdHJpYQ== KCIiKQ== IEthZA== IEdlbmRlcg== IFRU cG9uZ2U= INee15DXldeT IOGDkuGDkOGDrg== IGRldHRh IGdlc3TDo28= IHRlaG4= xZFz ZmFpcg== IGZyYW7Dp2Fpc2U= 5bC9 IHBvcms= IHN3aXRjaGVk ZW5kZWRvcg== IFB1bGw= b3BweQ== IEx1Yg== IFN1eg== IFRhbXBh Il0nKS4= 4Z+UCgo= IFNUQVRVUw== IGtvbW1l YXJjYQ== c3RpbGw= fV0= LkpQYW5lbA== T3V0bGluZQ== IGNvbWE= IFJvdWxldHRl INeR15nXldeq16g= 2KfYstmH 4Lin4LiZ INGN0LvQtdC60YLRgNC+0L0= dXRhdGlvbg== c3RhdHQ= 0L3QsNC6 IGFyZ3BhcnNl IGltcG9ydGFuY2lh 5q2z IGVuY29tcA== IGRpdmlkZW5k 64uk64qU IHBhcnRseQ== IHdlaQ== IGJpbnM= 0LXQvdC90L7QtQ== ZWxpc3Q= IMW+ZWw= 0YzSrQ== IFByb2dyYW1h IGxvZ2lzdGljcw== 1bjWgtWp1bXVuNaC1bbVttWl1oDVqA== INC60LjRgQ== IHNocmluaw== LWxlbmd0aA== IGFjcmU= IOaP z4POr86x b2Js IOywvg== IELDvHJnZXI= IOGDl+GDo+GDm+GDquGDkA== IGZydXN0cmF0aW5n Pz4NCg== INep15zXlA== LnZpc2libGU= w7x0w7xu IHZvcmVz w6lkaQ== 2Yraqg== INeQ15E= 0JDQoA== KHRo YWJiaW5n 56M= TW92aW5n X2lucw== IExPUw== KFF0 IEJvcm4= IOCkquCkpOCljeCksA== IEthbm4= w7B1bQ== IFR2 aWpubGlqaw== IGNvdWxldXJz IHV0aWxpemFuZG8= IHJlY2liaXI= INm+2YjYsQ== VUY= IFNwaW4= 5aSn5Y+R5pe25pe25b2p IGxk IM68zrXOsw== ZGVjZXNz w711bg== RGFzaA== IG5lZ3Jv zq/Oug== IHF1YXJ0ZXJiYWNr IGJldmF0 INeR15U= IGTDqWNvcg== X2VtYg== IOGDkOGDoeGDlOGDleGDlA== Q0hB bmljYQ== bWJsZXI= IFJvc2E= ZXJkZXI= 4LSm4LWN4LSn 1avVvdWr IG7DrW9z 5YWs5LyX5Y+3 IOCksOCkueClh+CkleCliw== d2VudA== 0L7QtNCw0YDRjw== dXNhaGFhbg== IGFibm9ybWFs Y2VsbGVuY2U= 4LSy4LSv UmVmZXJlbmNlcw== cHJlY2VkZW50ZWQ= IHNleHRh LHNlbGY= TXVjaA== IGtvcnRl IHLDoXBpZGE= IGFwcmVuZGl6 0LvQvtGC X2Vw INi22YXZhg== 4YOa4YOQ zrPOvM6x 4LeU4La7 IFNhaw== IG1vamE= w7NkaWdv IF5e X0lSUQ== QXNzb2NpYXRpb24= IFJhdA== IE5ITA== T3B0cw== QmF0dGxl KCIiKV0K INS8 IHdvcnJpZXM= IGhhdmVy dW5pdHM= IGxlY3R1cmVz LuKAlA== 4oCZdWI= eW5vbWlhbA== IEdyYW0= QXBwcw== aWtpdA== IG1pdGln 4LK+4LKz UHJlcGFyZWQ= IHNjZW50 IGFuYWx5dGljYWw= IG1vdW4= RXhhbQ== 7LyA IOCksuClh+Cklg== SG9wZQ== IGZlc3RpdmFscw== IHBvYXRl 6LSm5Y+3 IGZhY2lsZW1lbnQ= IGplemVsZg== XEZvcm0= IEJhbmNv IOm4 IG5vc3Nhcw== IHZvaw== dW5lbg== INin2YXYsduM2qk= IHdlYWx0aHk= LUxl LlBSTw== IFZpbmNlbnQ= IGV4ZWN1dG9y Jyk7Ci8v X1NFVFQ= 4KeB4Kex eWV0 IHNlcmk= 4Ka+4Kaw4Kaj IGNvbXByb21pc2U= IGZpcm1seQ== Z2Fkbw== zr/Ouc69 IGVwaWQ= IGNhcnRvb24= IHRlbmdh INmG2YLZhA== IHBlcmZla3Q= IHByb2l6 2obZhw== INmE2LHZig== b2hlbg== INGI0LDSsw== IGdyYWRv IGVuaGFuY2luZw== LmRvd24= Lk1zZw== ZsO8aHJ0 IOODrA== 0L3QvtC3 LE0= IOCyrOCysw== IHJy INGB0LDQvNGL0YU= L2xpYnM= IGFydGljdWw= IGZvbnRz 2qvZhw== 4oCa INC/0L7RiA== UG9zZQ== U2luZw== IG5pZW1hbmQ= IEFya2Fuc2Fz YW5hbw== IHZpdmly 15nXqNeZ150= aG1h IHDDpGl2 TGlzdGVu IM60zrU= 15XXmdeV16o= IEFjdGlvbnM= IERldHRl IGFncsOp IG11c2ljaWFu X2Fy IOGDlOGDoOGDl+GDkOGDkw== 0LrQsNGB IMOJdA== INqp2KrYp9io YXRha3Nl IHdpbGRl IHBhcmxpYW1lbnQ= b3JpdA== IGNpbWE= IHNlbmRpcmk= CQkJCQkg JywnJA== LnByZXY= IG51bW1lcg== JykpLAo= IENvdHRvbg== INiu2KfYtdip IG1heW9yZXM= LlBhc3N3b3Jk bmlu cmnDsw== INC/0L7Qu9C90L7RgdGC0YzRjg== IGNvbnRyb2xsZXJz IMSB X0FW IOCkpuClgQ== IGNvdXNpbg== IE51cnNpbmc= IHByb3hpbWl0eQ== RGlj X2ZhaWw= INC70Y7QsdC+0Lk= IGludmVzdGlnYXRpb25z cHJvZHVjdGl2ZQ== IHN1aXZyZQ== IHNsb3dlcg== IHZpdmVy 6LSj5Lu757yW6L6R IEJhc3M= 0LjQsdC+0LvQtdC1 INin2YHYsdin2K8= UGh5c2ljcw== IG9qb3M= w6Rr INC60YvQtw== 0LvQuNKb0Lg= Y29udHJh 0L7Qvg== 5L2z IE50 IENoYW5nZXM= 5Y+W5raI IEFpcmVz IHByZXNxdWU= IEFtZXJpaw== LmZvY3Vz X1BUUg== IFBhY2tldA== IGh1bWFuYQ== IG1pZG5pZ2h0 IEhvZmY= IGFuY2g= 4LWN4LSV4LWN4LSV REVDTA== YWdyYW1z IGluc3RhbGxlcg== PGNoYXI= IER5cw== aGFv LmpldA== IGNoYWxl U2FtcGxlcw== 4LGB4LCu LlBlcmZvcm0= YXVq IERlcHV0eQ== Sks= IGJpbGk= PD89 IGhlcmJhbA== INC30Lw= INW41oDVuNW3 IGRlZmVycmVk Y2c= IOGDm+GDkw== IE5a IG7DoG8= IHJobw== Ol8= IGFjYWJh bGFncw== 4KSK INC80LXQtNC4 4KS44KSu 15fXmded IGVzdHVkaW9z aW5wdXRz ZGVi LmhpZGRlbg== YWNjb3VudHM= 0J/QvtGB X19fX19fX19fX19f ZnJhZ2U= IGludGVyZXNzYW50 dmV1eA== J10pOwoK QnJvYWRjYXN0 IG91dmVydA== INir2YTYp9ir IEJvb3RzdHJhcA== IEJhcmFjaw== U29sZA== YWZlbg== dGVtcGVyYXR1cmU= LkFjY291bnQ= 4KyV IE1leQ== 54K6 4Kay4KeN4Kaq 15XXkdeo U1VQ YWlydA== cGhlcmQ= IMSh IikpDQo= INC90LDQv9GA0LjQvNC10YA= IGZpbHRlcmluZw== IOC0leC1geC0nw== 44OU44O8 IGJlZQ== LSI= IGtyZWU= IGFwcHJvcHJpYXRlbHk= IGJhw7Fv IE1lbWJlcnNoaXA= RlJJTkc= 0YTQsNGA IOCorQ== IMO2bmNl X0NMT1NF 5Lyf QW5zd2Vycw== 16bXqA== IERyZQ== IOCkhuCksA== IHBhcnRpY2lwYW50ZXM= 4KSo4KWN4KSn IFN1cHBsaWVy IOCyhuCysA== IGNvbWVudGFyaW9z IGVtcHJl X3R3bw== IG1ldGFwaA== J2Fy 4Li24LmI4LiH IGNvbGxlY3Rvcg== IGRvc3NpZXI= U2FuZA== IGdsdWU= IE15YW5tYXI= Q0xBU1M= IENsYXI= YXB0b3Bz 0LXQvdC3 IHF1aWNrZXI= IG1hbHdhcmU= b3JkZWVs IEdldHR5 05nRgNC1 b3RlYw== IGRlc3ByZQ== UHJpbnRlcg== PXQ= IGxvYQ== 2KfYqtmB IOCmleCmvw== INC+0LrQvtC70L4= IHdvbWVuJ3M= IGJlYXJz 7ZWE INGU cmVpY2hl IE9yaWdpbg== IHRocml2ZQ== IGVmZmljYWNl 2LbYp9ih IG5hdHVyZWw= 0YDRi9C7 44G+44Gn IHF1aW50YQ== 4oCd4oCc INGD0LTQsA== IHNpw6hjbGU= IHPDsg== IG1lY2Fu QXVkaXQ= a3A= c3RybGVu 4YOY4YOc4YOY IGNvY28= c3Bl 0qfRgdC90Ys= IEV2YW5z Lm1vdXNl Vm9jw6o= IGJyZWF0aGU= IFByZXZpZXc= 4LiB4Lix4LiZ IGZlY2g= 4K+I4K6k4K+N4K6k bGljbw== IG9jY3VwYXRpb24= IEJlcm5hcmQ= ID09PT09PT09PT09PT09PT09 dW5jYXRl U2xlZXA= LXRoaXJk aWxkZW4= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IEluc3RydW1lbnQ= YW1ib28= 4oCcVGhpcw== IGJhbQ== IHJlYWc= IHRlc3RpbW9ueQ== aXBhZGE= IG1vdG9ycw== emI= X1VTRQ== 4LGH4LC1 ZHJpdmU= IGNvbnNwaXI= IGxpZ2dlbg== b3JtYWlz YXRvYQ== Q0FU LnByZXNlbnQ= YWxldHRl IG9iZW4= IFdyaXR0ZW4= IGNvbmNyZXQ= INeo15DXqQ== IGVsxZE= 2LLYrw== dHJhcg== INin2YTYtNiu2LU= 5aix5LmQ5a6Y572R dWxlbg== INC+0LTQvdC+0LPQvg== 0L7QstCw0L3QuNC4 b2NpYQ== IHRvcHA= eW5jaHJvbm91cw== IFJlbGF0aW9ucw== INW/1aHWgNWh1a4= IG51cnQ= IOGDkuGDkOGDoA== Z2Vub21tZW4= c3RhcnM= IFRyYWluZXI= INC00LXQug== IFBvcGU= 2YTZhdip IHJldHZhbA== IHdhZ2Vz INi32Kg= IERpc3RyaWJ1dGlvbg== LmFuZA== eWNsZWQ= IG9idGVuaXI= IGxlc2JpYW4= IHBpbGxvdw== IGthxbw= IGZhYnJpY3M= IENhZGE= INC/0YDQvtC00LDQtg== IGxhdWdoaW5n IEFjYWRlbWlj INC+0L/QuNGB cmVjaXBl IGtuZWVz YW5nYWw= 5oGQ IEJhdG1hbg== xIN0 IGJlYXRz IOCmhuCmruCmsOCmvg== dW50ZWQ= IGZsZWU= IEh1cw== IHdobydz IG3DqWRpYQ== IHZpb2xhdGlvbnM= aW5pdGk= T1JBR0U= IHByaW1v YXN0b3Jl SUJBY3Rpb24= YWxvbg== IGlra2pl IERhZw== ICJcXA== 4LS/4LSo4LWG eW1p IE1pZ2h0 44GT44KM X18oJw== 4oCYcw== 6b4= w610aWNh IFdhdHNvbg== QWpheA== IOelnuW9qeS6iemcuA== IGJpcA== 16LXmded IFJhdg== 4KS/4KSt dmFzdA== IGNvbnNlY3RldHVy IEZyeQ== Y2hvZA== IGlubm92YXRpb25z LmNi VHlwZWQ= IHJvdXRpbmc= INWr1bbVudW61aXVvQ== 4Ka+4Kat IGFueWE= bWVkaXVt IGNhc3RsZQ== INiv2Lk= IGVpZ2VuZQ== 5a6M5pW0 IHZpbQ== IENoYW1waW9u IHbDqWc= IENhbXBiZWxs ZmluZGVy IEdVSUQ= aWthbGk= IFZpZW4= YW50b20= IEV0aGVyZXVt w6FuZG9zZQ== IFRyZW5k w7ps IHF1aWVybw== CWFwcA== IHJlbGF0ZXM= IHN0cmF0w6ln IGNvbmNsdWRl PHRhYmxl QXBwZWFyYW5jZQ== U3Bpbg== b2xvZ2lxdWU= UHJpY2Vz UXVhbmRv YXRhbWVudGU= 16HXpw== LmFueQ== LmF0dHJpYnV0ZXM= IGluY29ucw== IOOCtw== QXVk IGtvYg== X2Jvb2w= w6RuZGln Y29tcHV0ZQ== LkVycg== IGRpc2NvbWZvcnQ= YXB0ZXJz INeg15XXoQ== IGRyb2l0cw== J2VudHJl 4K6o4K+N4K6k4K+B VUlWaWV3 IOqwgOyepQ== 5pCc57Si IFRvcGljcw== INeR15g= 4YOd4YOR4YOa IG1pZGE= aWxlbmc= IEZG IGhpbmQ= 0LvQsNGA0Ys= IHp1Zg== IOCwqOCxgeCwguCwmuCwvw== ZGllbnN0 INGG0LU= INin2YTYtNix2YPYqQ== IGhpamE= IGxpZnRlZA== IERlbGw= b3V0aW5lcw== IMKgIMKg ZmZ0 bsOtbQ== 56ef w7xzdA== IFBBR0U= UmVzZXJ2YXRpb24= 0LLQsNC90L3Rjw== 7JWF IHDDqW4= INij2KzZhA== IGRvYnI= IHdhdGVycHJvb2Y= fX0i 1bjWgtWy IG9sZHXEn3VudQ== IERldXRzY2hl 4Liw4LmB IFRlbGV2aXNpb24= 4KS+4KS14KSw Ll0= IGFuY29yYQ== IEZJRkE= PEl0ZW0= IMSNYXM= 5oqV56i/ zrzOv8+N IEJpbGx5 emVj IOCuteCuvuCu TVE= ZXN0b3Jz w6Nlc3Rl KSsi IOCkpuCksA== eWlu IEJhY2g= INiz2YE= IGZ1Y2tpbmc= IEx1ZA== IHBvZGVyaWE= IGVzdHVkaWFudGVz ZXJ2YQ== INC00LXRgNC2 d2nEmQ== IGFydg== IFNvb24= IGR1bXBzdGVycw== INim25U= IHRlbGVm IENob2NvbGF0ZQ== IGF1w59lcg== IOGDoeGDkOGDqA== J2w= dGFpbHM= U1k= IEFkZHM= IHRocnU= IEd1c3Q= LW1pbmRlZA== TGVhcm5pbmc= 4YOj4YOl IGJ1c2NhbmRv aWdodGVvdXM= IHPDqw== IEFiZW5k IEVtaWx5 0LjRgNC+0LLQsNC90LjQtQ== IENsYXk= xLFx IOGDqOGDlOGDmOGDq+GDmg== IOCkog== IGtvbnRyb2xs INC90LjRh9C10LPQvg== IOCmhuCmsg== IEJpcm1pbmdoYW0= IFByaW9yaXR5 IEhhbXBzaGlyZQ== INmF2YTaqQ== IOCmuOCmvuCmpeCnhw== 2YTbkA== IElSUw== IEFjdGl2aXRpZXM= IGltbWVuc2U= d+G7pQ== aWVuY2Vk amFhcg== aWR6 IFdhcm5pbmc= IGVzZnVlcg== IHJhesOzbg== IFJPTQ== 4KeB4Kay4Ka/ 4Kqo4KuN4Kq4 V0Y= IGlkbGU= IHBhag== IGRpc2NvdmVyaW5n IHNpa3U= dXJyZW5kZXI= 4YCQ4YC6 bWY= XT4= IGNvbW11bmU= INGA0LDQt9Cy0LjRgtC40Y8= INin2YTYqtmC IHJlc3Rlcg== IOC0nOC0v+C0suC1jeC0sg== Om5vbmU= IOGDkOGDm+GDmOGDoQ== IFN0YW5sZXk= IHRlbmRlbmN5 YXJhcQ== IG1hcmNv IGNsYXp6 INin2YrZhg== INCy0L7QtNGL IE9ic2Vydg== IGtvbXBldA== 6riw66W8 IEFueXdheQ== IFVycw== IGZpcm13YXJl IGhhcHBpbHk= IG1hcmtldGVycw== 5Ye9 YWxsdQ== IOCktuCkvuCkruCkv+Cksg== IC8qIQ== INKv0Ls= LkZyYW1ld29yaw== d2VkZA== KG5hbWVvZg== IHdpcmVz IGltcG9zZWQ= RGlydHk= c3No INC60YDQsNGB0LjQsg== IGVpY2g= IOe+juWlsw== IGNhbmRsZQ== YWNpZGFk IEluaQ== IHBpeA== 0II= TW9y 5Li9 0LHRg9GA z4HOr86x ICdALw== IHNvY2tz IGFja25vd2xlZGdlZA== LXByb2ZpbGU= dGVyZGFt IGJp4bq/dA== LmJvb3RzdHJhcA== INGH0LjSmw== UGVyc2lzdGVuY2U= IG5vbWE= IGlkZWlh IOyYqA== 6K+X Y29tcGF0aWJsZQ== IFNTRA== 0LLRgNCw0Yk= bGVkaW5n IENIQVI= dmVsZA== 4LmA4LiU4Li04Lih4Lie4Lix4LiZ LOOAkA== 0qnRi9C6 4KWL4KSh4KS8 dXJzdA== INiu2LXZiNi1 Ol4o LnBlcmZvcm0= IHBhcmxl Ijw= b3VudGFpbg== 4LiX4Liy4LiH IGVmZWN0bw== Zmxvd2Vy PEQ= IOCyjw== INin2YTYsdiz eXR5 INWh1oA= IEJhdGNo aHRhYmxl IGN1ZXN0 UHJvdmlkZXJz INGB0L7RgQ== R0g= IGNvcmHDp8Ojbw== IOydtOyDgQ== YWNs IGJ5xIc= 0LTQtw== Z3Rl 4KeO4Ka4 4oCZbw== cHJlZGljdA== w6l0w6lz aW50dQ== IGZlcnJhbWVudA== IGZyZWVsYW5jZQ== 0L7Qu9GM0LrRlg== amV0cw== IHBlZWs= 4KSV4KS+4KS2 IGZ1cw== IG9wbmlldXc= PXJlcXVlc3Q= IGx1cw== ZnJlaQ== b3Rpb25z cGo= 4Lai IHNlc3Q= IExJQg== R292ZXJu IFJlY2h0 Q29uZmlndXI= VEVT 7LC9 aGVhbHRoeQ== bGVpdHVuZw== 0Y/QtdGC0YHRjw== 0L7Rj9C0 INiq2K3Yrw== IG9mcmVjZXI= 2b7Zhw== IHRodW1ibmFpbA== IHJlc2lkdWFs 16fXldee IE1hdGhlbWF0 IHNlbWFpbmVz U3F1 IOC4nuC4o+C4teC5gOC4oeC4teC4ouC4o+C5jA== IOygkA== LXdhcm5pbmc= w7NnaWNh IEJyYXNpbGU= U1VN RU9G 15nXmdee CgogIAoK IENvbHVtYnVz IOCuruCulQ== INin2YTYqti3 IO2ZleyduA== TmFt INix2K0= INin2YTYrtin2LU= CW5leHQ= IGhpaQ== IGxpZ2dlcg== V29ya2Zsb3c= IHBhZ2luYXRpb24= Q29kaWdv 0LXQvNC1 X3BhbmVs INmB2LHYpw== 4KSa4KS+ IOCwhuCwrw== IGRpc2FncmVl d3JpdHRlbg== bWFudWVs IE5hbWVu cnNjaGVpbg== IHN0aWNrcw== IGR1Y3Q= INio2KfZhNmG 4Lin4LiH IGRlZmVuY2U= IGZsb3dpbmc= IFJpdmVycw== 4LK/4LKv4LKy4LON4LKy4LK/ IHBvZW1z PXRoaXM= IGhpbmF1cw== 4KSq4KSb4KS/ 5Zyw5Yy6 IFdhYXI= IOC4hw== INmI2LU= Q29tcGF0aWJsZQ== INi02LHZiNi5 IOusuOygnA== IGJhY2twYWNr IFJlcGxhY2U= IHBha2s= 57un IFNPQw== IFBvbGl0aWNhbA== aXZhZA== X2Fn 0YHRkQ== WVlZWQ== IGNvbmNsdXNpb25z LnNpbmdsZQ== 4YOd4YOT4YOU4YOh IOCyruCzguCysg== VGh1 ZHJl IEhpZGU= 4Ka/4KaW LnNwZWVk IFNraWxs X2NvbHVtbnM= Q3VzdG9tZXJz 6L+b5YWl IOC0uOC0guC0mA== 7Lm07KeA64W4 INCw0YLQsA== INWi1bY= L0dldA== TGl0dGxl IEFzc2lt IG1lbWU= IG9uaW9u IHByb2NlZWRz KGR0 aW5ndW5nZW4= IFJlZ2lzdGVyZWQ= b3JhdXM= 6K+35rGC KSwo INCy0LvQuA== IGNvbXBpbGF0aW9u aW1hbHM= X0ZSQU1F INin2YTYqti1 IFF1aQ== IFNhcmE= xZllZA== KGpvYg== IFNpbHZh LWNoZQ== INmH2LPYqtmG2K8= IGNvbnRhY3Rpbmc= IOC0pOC1gA== IHdhbGk= IGNoaWZm In07Cg== X0ZJTFRFUg== 4LSq4LWN4LSw INKz0LA= IERpcA== 2LTYqQ== IGhhZmk= THVj IGVuc2XDsQ== IG1hdG91 b2Jhcg== IHRlcmVjaHQ= IFdhc3Rl INeV16k= 5rer Ymlh IENhYmluZXQ= 2KfYr9in2Ko= cG9xdWU= IGludGVnZXJz 6K+m5oOF b3BlcmF0aW9ucw== KFRleHQ= IGRpc2Nvbm5lY3Q= IEFub255bW91cw== IGR1bmlh ZW5ub20= LHo= d2lraQ== IHByb3Nlcw== IGJlbGly d2c= 4KSP4KSV4KS+ 4LK14LK+4LKw X3BsdWdpbg== 0LzQsNKb IGNvdmlk IHt7LS0= UXVhZA== VXQ= aXphcnJl Q2hyaXM= IHJpdmVycw== YWpz bGzDpA== IGtpcA== IFNsb3Y= LmRldGFpbA== IENlbnRlcnM= ZWxlbWVudHM= Y29vcmQ= Y2HDp8Ojbw== 0LTQuNKT0LDQvQ== 4YOQ4YOq4YOY4YOY4YOh RGVn IOCkn+ClgOCkrg== dMOp w6JtYXJh cnVhcg== X21hYw== IGtpZW4= 1bbVodaA ZWxpZXI= ZXJtaWs= QW1lcmljYQ== 0YXRgw== IGFzc2VydGlvbg== INC+0LHRg9GH INW41oDVuNW21oQ= QUlMQUJMRQ== IOCqrOCqqOCqvuCqtQ== LkNPTg== YWFyaW5n 5bee5biC ZXJpbg== X3dlYg== IHJlZmluZWQ= INW41oDVutWl1b0= 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm 5pu+ aWt1d2E= IERJU0NMQQ== IGluZm9ybWHDp8Ojbw== IMOtbmQ= IHBhcnRpZG9z 4Kam4Ka/4Kao IHRoZWU= a3VuZnQ= bWFyc2hhbA== IHRvZXN0 c29mdHdhcmU= bm9q IHJvaQ== IG92ZXJy IG11dGFibGU= IHlhcHQ= KHR4 xJlw IGFpbmE= aXbDpHQ= IExhbmRz IGFwcGVhcmFuY2Vz KFFTdHJpbmc= eWxpbmRlcg== IEZ1ZWw= aXTDpHRlbg== IGltbWlncmFudHM= KG9wdA== IGNvbmdyZWc= c3NlbA== cmVhdGVk U3VibWl0dGVk IOyytA== IG5lbmh1bQ== 5pyL5Y+L IEF0dGFjaw== 4Kq+4Kqw4KuN4Ko= 4Lij4Lih YWNpag== IEZPUk0= IGVuZ3I= w6ltb24= LkVudGl0aWVz TGF5ZXJz 16fXlded X2Fzc2lnbg== IGZlaXRh 4KWC4KSf 5Y+v5L+h bGRl 4Kas4Ka+4Kam dXp6eQ== aWRlYQ== IGZpbG1t Lm1t LnJlc2hhcGU= LmhlbHBlcg== IOCkrOCkog== IFNoYWtlc3BlYXJl IOuGkg== IGRydQ== IOCumuCvhuCur+CvjeCurw== RHJhd2luZw== IHdvb3Jk LnNwZWM= 0LXQutGC0Ys= 2LHYqNip IGNvbcO6bg== LnZlbG9jaXR5 5YGl5bq3 aG9sZQ== IOC0qOC0suC1jQ== IFZpbnRhZ2U= Q29scw== IHNoZWVy cG9wdXA= LnJv IE5hbmN5 IOC5geC4iOC4gQ== w6FiYW4= INeQ16TXqdeo 2LPZgw== PSIt IGluYXBwcm9wcmlhdGU= bmFtZWQ= QnJlYWtpbmc= Ijwv 0YfQsNGB0YI= IHF1aWVyZXM= v6A= IHJlZnJpZ2VyYXRvcg== ZW5uaWFs 4buFbg== IFRyYW5zbGF0aW9u IGRpY2h0 IGNvc21ldGlj Lldpbg== IOGDmeGDmOGDkw== IHplaXQ= TXV0YXRpb24= IFN1aXRlcw== LnJlbQ== IHR1bnQ= dHR1 X2ZpbHRlcnM= 44G5 IGluY2VudGl2ZXM= 44Gd44GG 6I2j INC90LDQv9C40YE= IEJJRw== KSkpKQo= IEJldGE= 4Li44Lih bWFo IE5PVElDRQ== IGxhYmVsZWQ= IGZpeHR1cmVz IGdlZGU= 0LXRgdGC0Yw= IOGDrOGDlOGDmuGDoQ== a2Fh zrHOsw== X3dyYXBwZXI= dXJpbGU= xLc= IG1vdmltaWVudG8= 64WA IHNvc3Rlbg== IGZlYXQ= xI1uZQ== 4Kak4KeB4Kao IHB1Ymxpc2hlcnM= IOCqsOCrgg== INC60LDQtA== IENvbnZlbg== c3Ryb20= IEluZ3JlZA== IGNvbnZlcnRpbmc= INio2KfZhg== LWRlbA== IGVuZXJnZXRpYw== IGRpc3Bvc2luZw== dmlkZXJz KFo= IHJlaWdu IOCkr+CkueCkvuCkgg== 6JGh IFNvbmdz T0lOVEVS U1RBVEU= Xls= VGhyb3dz IExhbWI= INGA0LXQsdC10L3QutCw IMO6xI0= IEvDtm4= INC10YnRkQ== Ym9sYQ== IFNQRFg= IHNwb3I= IG1laHJlcmU= TWFk IOunjuydgA== IHJlYWxpc2U= YWNjaW9u 2LjZhdip dGVybmU= PS8= 6LWe L3NoYXJlZA== IM68z4DOv8+BzrXOrw== IG1lZGlldmFs IF8K IEJvdHQ= 57GN dmVyYWdlcw== IG51dHJpdGlvbmFs INC40LPRgNC+0LI= IEluaXRpYXRpdmU= 2YHbjA== IGxlcXVlbA== IFJlZnJlc2g= 1Y0= zrvOtc+F IOCksOCkvuCkrg== bms= IEpvw6Nv KCkKLy8= IGhvaGU= IFJY Y29udHJlcw== IGVjYw== IG5vdGVib29r IHRyYWRlcg== X2Vs 4LS+4LSx4LWN4LSx IHbDpGxqYQ== IHF1YWxpZmljYXRpb24= IG5vYmxl eml1bg== IOGDp+GDneGDlQ== Y3ljaA== INC/0L7RgNGC IHZw 7YWc IERpY3Q= IEtpY2s= IG3EgQ== 6buE6Imy 1aHVsQ== YW1tZXJz INmG2YXbjA== 4Lij4LiH c2VyeQ== w65uZQ== emlsbGE= bmV1ZA== IGNsanM= INec15DXl9eo INGA0LXRhw== cnVzdA== KGlt IGNvbm9jaW1pZW50bw== IE1hbnVmYWN0dXJlcg== IENvbnZlcnRlcg== IGJlbG9uZ2luZw== IGthZw== dmFyZQ== IGluZ2lu 0Y/Rng== 5Zu95Lqn57K+5ZOB IFNwYXI= 2KfZhNi5 Y2xlcg== 5ZKo6K+i IOCmpOCmrOCnhw== 4YOn4YOd4YOk Q291 aXJpaw== Ymxp IG9ww6fDo28= IGV6aQ== 4Ka+4Kah4Ka8 X1NUQUNL INCx0Y7QtNC2 IGRlbWFzaWFkbw== ZXR0bw== IHRhcmlm 16LXpw== 2LLYtA== IHF1ZXJlbW9z IGplaG8= b2Jo INin2YTYqti52K/ZitmG w6hyZW50 Lkdsb2JhbA== IFJpY28= IE1hbmFnZQ== IGluZmx1ZW50aWFs a2VybmVs dmFsbA== IOCyteCysOCzjeCy IO2BrA== d2FhcmRlbg== YWZ1 b3Bs 4YCv4YCV 4LGC4LCq IFZhbGU= IOCqpOCrh+CqqOCqvg== IFNpZA== Ly8KCg== 0LDQu9GL0Lo= IGluZm9ybWU= IERpc2NvdmVyeQ== ICco INC80LXQvA== enVm 57uE57uH IGdz 4buLcuG7iw== IHRvbWU= R2Vy IOCyl+CzjeCysA== Q291bnRz ZW1wbGU= 5LiK55qE IFN0aWNr IExpbmRh VmVuZG9y INC/0LDQvw== IHRvw6Bu IHNpbGljb25l KHBheWxvYWQ= YXRhdA== VmljdA== IHNldGlhcA== IGNsZWFyYW5jZQ== IENvcnBz IGthYmE= UlRY LnRoZW1l 4Liy4LiI IGluaGFiaXQ= d2F2ZQ== TG9ja2Vk IE9yZw== IEN1bHR1cmE= acOrbnRlbg== 4KS/4KSv4KS+4KSC INC00L7QvNCw0Yg= Y2FsZW5kYXI= CWV2ZW50 IGltw6FnZW5lcw== IGNlbnM= IGFsY2Fu IGFueGlvdXM= IFBhcmtz RGVmaW5l IGNvbnRlw7pkbw== IOCkteCkv+CknA== IMSNaQ== 2LnYqtio2LE= KGFjdGl2aXR5 LXVybA== IOCkpOCkrA== 44GC44KK44GM44Go44GG INin2YTZhdiu WmE= IGhvb2tz INin2YTYo9mI2YTZiQ== LWJhc2U= IGFyYXPEsW5kYQ== IGFjY29tbW9kYXRpb25z cmV0aWVu b3JzY2hl IGV4cGxvaXQ= IHByw6E= 4LSo4LWN4LSo4LWB IExE IGNvbnNjaWVuY2U= SU5BTA== Ymxy INGI0YvSm9OZ0YHQsA== IHBhZHJlcw== IOCktuCkv+CkleCljeCktw== IExhcnJ5 INGP0L0= IFZsYWQ= IOCkhuCksOCliw== X2NvbXBvbmVudHM= IE5pY2h0 aHVtYQ== IG91ZGVycw== 4YKP 4KS14KS+4KSo a29n IOq4sOyekA== IGV4b3RpYw== IGRvc2FnZQ== eXJhbWlk IOCkleCksOClhw== INim24c= IOqwgOuCmOuLpA== IGxlbWJy IHJlY29ubmE= CVR5cGU= IHRhbnBh IChfXw== IFZF IEV4cGVjdGVk IGdyYXM= IOCqhuCqlw== 0LvRj9GO0YI= IE5hY2h0 IGRlc2FwYXJl 0Y/QsQ== 4KeB4Kan IHNhY3JlZA== TnM= XX0K IHdzcA== a3Nlbg== IGhvdHRlc3Q= 4K6O c2tpbGw= 4LC/4LCy4LGL bHlneQ== IHBlcmNow6k= UEVMTA== LC4uLgoK IGluaXRpYXRlZA== UEFSQU0= VnM= IFRoaQ== IHNwaWVs IEthcnQ= cmlqZg== IFJlc29sdXRpb24= IEhhcHA= INqv2KbbjA== INCV0LLRgNC+0L8= IGp1ZGk= IOqyjOyehA== IFNsZWU= IGNpZA== IEdT INC005nQvw== 0YPQs9Cw cGVuZGluZw== dm9lcmQ= IFR1YmU= IM68zrXPhM6x IGV4cGVjdGF0aW9u KCJcXA== ICQK RU5F 67CU7IKs X0NIQU5ORUw= IHZpZXQ= IGFsdHJp IEJhbGk= 0LjQvNGD IHdhc2hlZA== IOCmleCnh+CmqA== dXR6ZXI= 4LmN4Liy INmF2LnYr9in2Ko= 0LvQtdC90L4= IGNpZ2FyZXR0ZXM= IHFheQ== LmNvbmZpZ3VyYXRpb24= IEVsZW1lbnRz IHJldHJpZXZlZA== IOC4o+C4seC4mg== IGlub3Y= IOCmtuCmv+CmleCnjeCmtw== 0L7QvNCw IGhhYml0YXQ= IEphcmQ= IHN1bmxpZ2h0 dWxhdA== 0L/QvtCy YWNhcw== IHNsaWs= VUlMYXlvdXQ= Sm91cm5hbA== IHJlY3ljbGVk c2VlaW5n IHbEmw== dWJibGVz INmG2Kw= cmFkbw== b2xpbmE= 0JjQtw== 652866eI67CU7IKs IGJsZXNzaW5n IEVESVQ= 67OR IHNlcmVt INGB0LjQu9GM IHByw6ljw6lk IOG7pWzhu40= 2YrZgg== asOz IOynkQ== IE9wcA== IGFuw6FsaXNpcw== bXV0ZXg= IGFtYXplZA== INaD1bjVrQ== aWV2ZW1lbnQ= LS0tLS0tLS0t YWRhcHRlcg== d29tYW4= IOCuh+CusOCvgeCuqOCvjeCupA== IG1vcnRhbGl0eQ== IG9wb3J0dW5pZGFkZXM= Q29ybmVy SW5ncmVkaWVudHM= IGRt IEluc3A= 6ZSA5ZSu INeU16jXkNep 4K6/4K6q 24zaqdq+ IOqwgOuCmOuLpOudvOuniOuwlOyCrA== T05FTlQ= cml1bQ== cGhyYXNl IGRp4bq5 5bu2 d2Vz X3NjYWw= IOCqrOCqvuCqpg== 5YWo6YOo b3dlZ28= IG9jdXI= IGA8 IHNvaQ== X3ByaW50Zg== Qml6 IHJoeXRobQ== IFVJQnV0dG9u INii2LE= IHJlY2VwdG9y ICInIiw= IFRlbXBlcg== X1NQ IHBlcm1ldHRyZQ== dWVzdGE= LkZl IOC5guC4lOC4og== UHJvZHV0bw== IHPFgg== YXJyZQ== INeR15I= IGZ1bmtj IHJpZGVycw== INC/0YDQsNCy0L4= IGhlZWxz IOCkhuCkpA== 64+E66Gd LnBp 1aHVtdW41oLVtA== aXRhdGVh ZHVpbm8= 0L7Qu9GP 4oCw 55qu IOCmuOCmsOCmleCmvuCmsA== IEdld2lubg== 8J+H mOGDnA== YW5kYXJk b3NzaXA= LW5vcw== IGNyZWNpbWllbnRv 7JWh 1aPVodW11avVtg== 0LTQsNGC IHNvcnRpcg== IMOY IHpha2Vu IGJ5cGFzcw== IHRyZWZmZW4= 15DWt9ef INmI2KfZhg== INmF2LHaqQ== 4buXaQ== IEZpbmFueg== cGFja2V0 4Lig4Liy4Lie IEJheWVybg== X2xvdw== X01PTg== IHBhcmlz amFk bGdl ZW5zacOzbg== IFBST0M= X09VVFBVVA== IHJvaw== IOCkleCljeCkr+Cli+CkguCkleCkvw== UHJlc2lkZW50 TW9udGhseQ== IGJyZXc= 4YOY4YOR IG1pbGpvZW4= IGhhY2VybG8= INGC0L7RgNCz0L7Qsg== X0FDQ0VTUw== INC60L7QvdGB0YLRgNGD0Lo= 5rqq X1RBU0s= YW5kZXM= IGRlbWVudA== IG1vdmltZW50bw== IE1FVA== dXJuYQ== a2VsZXk= INC+0LTQvdC+ IEluc3RydWN0aW9u LWVxdWl2 IHNwaW5uZXI= IOCmleCni+CmqOCniw== Itec ZW52aXJvbm1lbnQ= w7xucw== INCx0YPQu9Cw IGJyZWFjaA== IGV4cGlyZQ== YW50b24= IGJyZXZl IGplcnNleQ== 05nQtw== cnVw IGdhbWE= YWRpaQ== IGhlYWRsaW5lcw== IGZhbWlsaWFyZXM= IGlsbHVzdHJhdGlvbg== INCy0LXRgdGM IGJsdQ== LnBlcnNvbg== 4YOQ4YOV4YOo4YOY4YOg IHRyYW5zZm9ybXM= IEZhY3Q= bGluaW5n 4LSq4LWN4LSq4LWL IERhbWU= IHBvb3JseQ== 0LXQs9C1 IHNvcmU= fQ0KDQovLw== IENvbW1pc3Npb25lcg== IHZlcnZvbGdlbnM= IHBsYWNlcg== aW1tZW4= IGZpbmFuY2llcg== IGZydXN0cmF0aW9u a29h INmI2KfYrdiv2Kk= IGVzY3JpdA== 15DXnQ== bmpp cHJvY2Vzc29y IEFNRA== IFByZXZpb3Vz Pyw/LA== w7hyZXI= IHsh X3NlcXVlbmNl IHBvcsOpbQ== IGRldmlkbw== IG5pcw== UGxheWxpc3Q= CWxhc3Q= TGV4 IOCmhuCmhw== 4YOY4YOj4YOa4YOY 5pig IE1lZGl0ZXJyYW5lYW4= IHBldGl0ZXM= IGRlY2lzw6Nv LWNlbnR1cnk= IFJhbmNo IHPDqWpvdXI= aXN0aXNjaGU= SVRB 1aHWgNWi1aXWgA== IGtldWtlbg== TklORw== IG1hc3RlcnM= Y29ybg== INGL IGxlZGVu ew0KDQo= IExpZWZlcg== IGVkaWNpw7Nu IHBhc3Nv IGVwaWRlbQ== 0LvRj9C10Lw= IGdyYW1z IOCkuOCkruCljeCkrg== IE3DpG5uZXI= IOunng== IEFwcGxpYw== 1oDWgQ== IGp1bOG7jQ== 2K7YsA== INW61aHVtQ== w61jw60= IEFiaWxpdHk= Rk9SRQ== 6bq7 b2tvbA== 4YOg4YOd4YOb eXN0ZW1z IHNhbWFu IHBvbMOtdGljb3M= IHRha2E= IGV2YWx1YXRpbmc= ZGVjaw== 4LKX4LKw S0c= 4oCZb3A= INCx0L7QudGL0L3RiNCw YWxhcw== aMOkbA== LS0tLS0tLQo= IEtvbWI= IFVJbnQ= IOCmpOCmvg== IHpvZw== IGJha2Vk IOCwruCwvuCwsA== IGNvbnN0cnVpcg== IEF1dGhvcml6YXRpb24= IHZldXg= 0YDRi9GI IScpOwo= LWZ1bmN0aW9u Y2Fubw== IHppbA== IFRlZA== IFBlcnJ5 INin2YTYrdiv2YrYrw== 5p2f TUxT IEV0aGk= IGFybW9y IO2RnA== YXRpY3M= IEtldA== bG92ZQ== c3RyZWV0 15bXldeo RmluYW5jaWFs IHNwb3R0ZWQ= IHNwb3M= zrjOt866zrU= cHVudA== 2KfZiA== IE5hc2h2aWxsZQ== LnByb2dyZXNz dWdi Y2xr IGFyYmVpdGVu IE5BVE8= IG1vbGVzdA== INC/0L7Qu9C10Lc= KGxhdA== b3V2cmV6 LnBsdWdpbnM= IE11dGFibGU= IG9saG9z IGVubGFyZw== IEJvZA== IGZvcnR1bmF0ZQ== IG5pbmd1bmE= Q2FuJ3Q= IG5pY2tuYW1l d2F5bw== IGx5bXBo IERhbm1hcms= IGtyaWpn LWJsdWU= IG1hbnM= IHJvbmE= L1N0cmluZw== LmFscGhh 4Li34LmJ4Lit IGRow6lhbg== IHB1bmlzaG1lbnQ= IH0pOwoKCg== CWluZGV4 J2ludGVy INC/0LvQvtGJ0LDQtA== INC60L7QvNC/0YzRjtGC IEdoYW5h INCy0Lg= INCx0L7Qu9C10Lc= X2JvYXJk INeU15bXlA== IGJhcHQ= INC/0YDQuNC6 Z2Fl bWFuYWdlZA== QnVkZ2V0 TGlj IFVnYW5kYQ== IEdpYg== UGFnaW5hdGlvbg== IG1lbGQ= 0YzQtdGA JmFtcA== IFRpYg== IHJlY29uYw== X2VzY2FwZQ== IGJlc3RlbGxlbg== IE11cnJheQ== 6LSt5Lmw aW11dA== INCy0LXQtNGM IGluaGVyaXRlZA== aHVu IENhbnlvbg== IG1peGVy IEN1cnI= IGFsbMOt IHNhYW4= IFZvcnRl IHBvc2l0aW9uaW5n IGV1cg== INmI2LrZitix IEhhcmR3YXJl IGNlbnRydW0= IGF0ZW5kaW1lbnRv zrnOus6/z40= 16TXnA== INij2YI= aXR0eQ== X3JlYWRlcg== IHRvZGF2w61h VE4= IHR5ZA== IGFtYml0aW91cw== IHJhbmNo 4KSV4KWN4KS34KSj INit2KfZhNip 0L7RgNGC0LA= IEV4cG8= LmR1cmF0aW9u IHN0cmVzc2Z1bA== IGxpbWU= LnBvcnRhbA== KExPRw== IHRlcnJpdG8= IEhvcGVmdWxseQ== IHByZXJl 4LeZ4Lax4LeK INC/0LDRhtC4 IHVuYmU= IG5laWdoYm9yaG9vZHM= IFsl KQoKCgo= QUNJw5NO IOC0heC0pw== YW5kbGE= 4oCZYWdpdA== IG7DqWc= IGFkaXBpcw== IG9jY3VycmVuY2U= IOudvA== INm+2KfYsw== LmFzcw== b3VjaGVk INC/0LXRgNC10Lw= IOCwteCxiA== IGNydXN0 YXJlbA== INWi1aHVtg== LnJhbmRpbnQ= IHZpZXJuZXM= 77yM5a+5 dmFq cHJpbWVy IHNvd29obA== b3RlY2hu 15XXqNeq LWNvbmZpZw== 4KSk4KWL 5Yqo5oCB Zm9ybWVy IENlcnRpZmljYXRpb24= INGB0LDSmw== INmF2K3YtdmI2YQ= IEx5b24= 6Zuq LkluaXQ= Y2tv IHByZWNpZXM= IHdoaXNr IG9udHZhbmc= 2YrYp9mH 4oCL4Z6Y YXJjaGFy INGF0LDQvA== 67Kg 4YOQ4YOT4YOS4YOU4YOc dGlja2V0 INi02YrYoQ== INeV16A= 4YOU4YOR4YOW4YOU IHNtZQ== INCx05nRgA== S2k= IGRlbnVuYw== aGVuZw== INmA X0NPTlRST0w= IOGDk+GDpuGDlOGDoQ== dGVh IHNqw6Rs IGVuY3VlbnRybw== X1BST1BFUlRZ IGNhdGFzdA== IGZ1bGY= J2F2b2ly IFRpcG8= ZXJlY28= IHRvbWF0b2Vz 0L7QvdGD0YE= YXZpbmdz IHVucHJlY2VkZW50ZWQ= ecWI 0LXQvdGW aW1tdW5n aXRlbWFw b3VkZW4= IEFsbQ== IGNhcmRpb3Zhc2N1bGFy IOCqnQ== INmD2Yc= 15nXqNef YW5udXQ= IHNjYWxpbmc= Y2h3 2YTbjNmE 25QK c29sdXRlbHk= ICIuLi8uLi8uLi8= TG9jYWxpemVk IOazqA== WUE= IGVtaXNzaW9u IHdhbm4= 4LGB4LCC4LCh IOOAgg== YWFh ICopJg== IE9mZmVycw== IHN1Y2PDqHM= aXNzZW1lbnRz z4XOvc6x U2Vjb25kYXJ5 5LqV IHVtaQ== Q2FjaGVk IHLDs3duaWU= 5bey57uP LlVuaXQ= ZXh0ZXJuYWw= LWxp IHByb2plaw== IGVtcGZl IGF2b2lkZWQ= LXN0b3A= 2KjZitix IOODlg== IFVidW50dQ== IGVkdWNhw6fDo28= IEVF b3Bybw== xJFlbg== IGNlcmVtb24= IGZlZXN0 INC10YE= IFBhYmxv INiq2YbYpw== KEZhbHNl INC80LXQsw== c3RhYmxl 4KSw4KS/4KSV LS0tLS0tLS0tLS0= IHByb2Nlc29z d2l0aG91dA== IG1lbW9yaWFs RlJJTkdFTUVOVA== IHRyYWNlcw== IOW9qeelnuS6iemcuOWkp+WPkeW/q+S4iQ== 4Ka+4Kab IOq4iA== Q3JlZGVudGlhbA== IFRoZXkncmU= 5b6B LmxvYWRz aGFsdGU= IGHFvg== IEVQQQ== 2KjYp9mE IOCkteCkv+Ckmg== 2YjYp9is 5amm cmFkZQ== X09QRU4= 4LSx4LWG 5a6I IHVraQ== IGF2ZWs= IExhbmRlcw== IGV4cGlyYXRpb24= INCy0YvQtw== IFNpY2hlcmhlaXQ= IGFuc3dlcmluZw== YWN0aXZhdGVk c3dhcA== INC+0YLQtNC10LvRjA== IGxpdnJlcw== IHNvdA== IHBpYW4= IGFsbw== INC80LXQvdGM IHJlc3Rh dXJhY3k= Y2FwdA== INit2YLZiNmC INeZ15M= IHZvZWQ= 6ZWH IG11ZGE= IFVQUw== 4pmA4pmA4pmA4pmA KFRydWU= IO2ZmA== w7hr INGF0L4= aWRoZQ== 0LTQsNCy fgoK LnRyaWdnZXI= dXBl dXJ1dA== 2LHYp9mD IGF0dHJpYnV0ZWQ= ZXN0b24= IGZvcmNpbmc= IGVudmVsb3Bl IHdoYXRz IFJlY2VudGx5 IHNhbmN0aW9ucw== IGdydXBw IGJlemln X1NISUZU YWx3YXlz cm4= SGFs IHdoZXJlaW4= X0VOVFJZ d2F1 RUVL 4LiY4Li1 YXRvcmllcw== 4LS/4LS3 IG5hamJvbA== 0LjQvdC60Lg= IERBVEU= 56aP5Yip5b2p56Wo IHNoZWVnYXk= IHNvbGE= QW50aQ== IG95bw== IHBsYXlncm91bmQ= IERFRg== bGxlcw== IGVuc2lubw== 4Kab4Ka/4Kay IGRvbWluYXRlZA== IHZhY2NpbmF0aW9u IOiN 57WM 56Wl LmxpZmVjeWNsZQ== KyIv IGRlcGljdA== 0pnTmQ== IOCwl+CxgeCwsA== 57KJ IHBvcmNo X1BBQ0s= 1oDVpdWs IHZlcm8= 4YOY4YOr IGludGVudGlvbnM= IOC2iQ== IHpldA== IHNlbWluYXI= TEVS QU5J ZXJlemE= SW50cm9kdWN0aW9u INWp1b7VodWv1aHVtg== aWZpY2FjaW9u IGtldG8= ICcnKTsK IOaB X3JldA== IE1pY2s= IEphbWE= IHB1cnN1aXQ= ZXRodQ== 0YXQsNC9 ICYj IHBvaWRz INmF2Lo= INCU0LY= INC70ZY= U3RvbmU= 4Kam4Ka/ Y2hhcnNldA== KG9mZnNldA== IGZvdW5kaW5n INKb0LDRgg== INGB0YfQuNGC0LA= IGtlcmFz dWxzaW9u INmB2YQ= aWd1YQ== ZXdlcmtlcnM= w6lwZW5k IHJlY3JlYXRpb25hbA== 44Gf44Gg cmVzc2Vz X2Zyb250 4Liu L251bGw= IFVuZw== YW5kYW4= IHNlcnZsZXQ= IG9waA== YW5kaW4= INei15XXkw== X1NZTUJPTA== IGbDvG5m 2KfZgw== d29y IHB1bXBz IOGDqOGDlOGDmOGDq+GDmuGDlOGDkeGDkA== IHJlYWxpZGFkZQ== IE1vcnJpcw== IM+Dz40= b3BlZGlh 5p2+ 4KSa4KWN4KSv4KS+ QVJFTlQ= b3RyYQ== 0YrRgg== IGZyaWdodA== LUxpY2Vuc2U= IHBpc2NpbmE= YW5nZ2Fs IFdpc2g= 0LPQtdC7 5by3 IHJlb3Blbg== aXRpbg== aXNhbnQ= RnM= IEFlcg== IGZpbHM= 4LGH4LCC4LCm dW51bQ== 0L7QutC+ IG9mZXJlY2U= IGV0ZXJuYWw= IGJhbmE= 4YOU4YOR4YOU4YOc IEludGVncmF0aW9u w7Nq IGfEp2FsbA== 2qnbkA== IGJ1cmdlcg== Kikm YXBwcw== INin2KjZhg== INCa0LDQtw== 4KS54KS/ IHBpw6hjZQ== c29i IHNsb3Bl V2lsZA== 16rXlw== IGRydW5r INuB2Yjaug== 4LCV4LGN4LCk 4Ki+4Ki5 IHZhc3Rl ZGVwYXJ0bWVudA== IGZhemVt IFB1cnBvc2U= INmI2LHZiA== IEVtaXI= IGRlZmVjdHM= IFNhbmc= X21lc3NhZ2Vz IE9yZ2FuaWM= PSIiOwo= 1bjWgtW11oE= IHByb3RlY2Npw7Nu X3RpbWVzdGFtcA== b2zDs2dpY2E= Y2h1bms= IEVudW1lcg== 4KuA4Kqu IG9pa2U= IGFsbGVnYXRpb25z 1bjWhA== 4Kaw4Kaj a2llbQ== 4KSV4KSw4KSj CWVsaWY= IGdyaWVm 6Z2S6Z2S6I2J IERPV04= IGR1cnVt IOCmtuCnh+Cmtw== aXZpZGFkZQ== IGPhuqd1 IFdvb2Rz IGRpc2NvcmQ= YnJ1aWs= IHBzeWNoaWF0 PSJ7 IEFyc2VuYWw= IMOpZA== IOCqqOCriw== 5bO2 IOeOrw== 17I= IFNFTQ== dW5zY2g= LXByZXM= IHJlZmVycmFs IHN5bnRoZXNpcw== w6FsYQ== X05BTUVT YXdr 4LWA4LS4 b3JpZW50 IGt1YQ== Y2hvaWNlcw== IMOeYcOw TW90 IGJhaXg= IEZpbmlzaA== 4KWJ4KSV IFJ1Ynk= IG5naGnhu4dw LnZpc2liaWxpdHk= IOODlQ== IEJ1ZW5vcw== 4YOQ4YOb4YOT4YOU4YOc IEhlYWx0aHk= 64u1 5p+Q IO2X X2Nsb2Nr IE1lbnRhbA== IGpvdXJuYWxz Lm1vbnRo 4bqteQ== 65CY64qU 0rPRg9GA IExha2Vz IFNsaW0= INio25A= INiz2qnYqg== KGNvbnRhaW5lcg== IEhhdXNl XzsKCg== IGltcGFjdGVk 15nXqtef IGJsaWprdA== LnBlcm1pc3Npb24= 1aXWgNW41oLVtA== IGVudmlhcg== X1VzZXI= KFZhbHVl ZXJuYQ== IG1laXM= 0YPQu9GL 6L2u INW31aHWgA== IGdyYWJiZWQ= IGZpeGluZw== IGFudsOkbmQ= 2YrZhtmK2Kk= IGFwb3k= asWhw60= amRl LmNhbGxiYWNr 4Liv IHJlYWRpbmdz bGllw59lbg== c3BhY2luZw== IExU IFN3aW5n INCx0YPQug== w63DsA== IHRha8W8ZQ== X1RPUA== LmRpc3Bvc2U= IGNvbG9uaWFs ZW5pZQ== Q29uZmlybWF0aW9u LmFuaW1hdGlvbg== IOCquOCrjA== IG1vbnRyZQ== YnV0dG9ucw== IHJldW5p IG5ha25l IHNjw6huZQ== Qmlk IGF0aXZpZGFkZQ== LUlkZW50aWZpZXI= INin2YTYrdix anVz Y2hpcA== IGRlbW9jcmF0aWM= aXTEgw== IGHFnw== IOC0huC0sA== bGVnZA== amI= R2l0 IOC3g+C3kg== 65287J24 QERhdGE= YWJheQ== IGJyaWxs IOW/q+S4iQ== Q09OVA== IHN0YXJ0ZW4= IENsYXNzZXM= X3NlbGVjdGlvbg== 0YPQstCw0L3QvdGP 4oCZ4oCZ YXdhbmc= IGZlbGlj IHZhbGlkaXR5 IEdyw7w= IExlY3Q= LcOg dWJv IG1pbmlzdA== X01vZGVs 4Kqw4KuN4Kq1 X2NhcnQ= IOWbmw== IEltYWdpbmU= IHRvbmVz emVyYQ== IFRhZ2Vu IGRyeWluZw== IHBpbGx1Z3U= IHJlc2lkZQ== 5ZOB54mM 0LjQudOZ0YI= ICItIg== IFB1Ymxpc2hlcg== TnVtZXJv IHJlY2s= IHNhdGlz IEhleA== IAogCg== ZXNpYW4= ICcpOwo= INiu2YjYqA== KGVtcHR5 IGRlbW9uc3RyYXRpb24= X01BTg== INmK2LM= IEdhbmc= ZXRlb3I= YXJ0b3E= IHJhY2lzbQ== 4bul4buN IEFyaQ== L2Jsb2c= IHJldmVhbGluZw== IOCmueCmmg== 5Lul5p2l IFByb3Bz SUZJRVI= 2KfYqNi52Kk= IGpvdWV1cnM= aW5raQ== IGNoaWxs LkNvbWJv IHByZWd1bnRh 0LPTmdGL U2Vhc29u aGV1cg== IMO9b2s= Oyk= INCx0LvQvtC6 INC006nQu9OZ0YI= INi12KfYrdio IHNtw6U= X3NoaWZ0 INiq2YjYrNmH IFZBVA== dXp1 IOymnQ== IOCqquCqsOCqguCqpOCrgQ== LnNob3J0 INin2YTZhdmC IGp1c3Rv b25kaGVpbQ== IFBsYXN0aWM= IGtpams= X2ludGVybmFs IHJlZm9y w6Ryaw== ICcsJw== 4KuH4Kqc IGZpc2M= IOCmuOCmpg== IEF6yZlyYmF5Y2Fu acOrbGU= 6YCx 4Ka/4Kat 5oub5ZWG5Li7566h IGNvcmF6w7Nu IGF0dGVuZGVlcw== IGl6YW4= 6IGU572R IFVzZXJuYW1l IGt0ZXLDvQ== VGFs Lm15YmF0aXM= LXByb2R1Y3Q= IG9iamV0b3M= lOuLpA== IFRvdXJz IGdyYXZlbA== IHVuY292ZXI= IGZpbmFsbWVudGU= 2KfZhtiv25A= QU1FTlQ= LnRi 0L7QstCw0Y8= UG9saXQ= c3Ryb2tl IOCwruCxig== cGJz INeQ15nXqQ== PHZlY3Rvcg== bGF1cw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWZpcXVlcw== INuM2qnbjA== X1N5c3RlbQ== IGxlZ2lzbGF0aXZl IHNlcsOhbg== INGB0LXRgNCy IGluc3VsYXRpb24= IHN0b3J5dA== PWQ= b2xvZ2ljYWxseQ== IGVyc2No Ozs7Ow== IOCyruCyuQ== 2KfYptmK2YY= IExlaHI= ID0+ewo= INGO0Lw= IGxvZ3Jhcg== IOCwheCwpw== IGFyYml0cmFyeQ== IHF1YW0= aWxpZ2Vu IHJvcGU= L2dv 4LCl 1aXVrQ== IOC0sOC1guC0qg== z47Pgc6x QWR2ZXJ0aXNlbWVudA== dWxhZG8= zr3Ov868 4LiI4Lij4Li04LiH LmxpZmVyYXk= bGF1Zg== KGhhbmRsZQ== IEdyb3Vwcw== IOCkquCkvuCkqOClgA== 6YCB5paZ54Sh5paZ 4KS+4KSv4KSw INC90LDRg9GH INmF2YM= 4LKX4LON4LKX4LOG 4KSa4KSo4KS+ IHZlcndlbmRlbg== IGNhbXBhZ25l IGVhdGVu SkM= ICwKCg== IFVuaQ== INC00LXRj9GC0LXQu9GM0L3QvtGB0YLQuA== IGNvbnRyYXJpbw== aXNzb25z ZmxhbW0= cXF1 c2VjdXRpb24= 5Lya5ZGY 1aHVr9W41oLVtA== IOC0qOC1h+C0pA== eXNp X21hc3Rlcg== X0RFRg== dGVj Q29tcGFyaXNvbg== b3BlbnM= IOC4neC5iOC4suC4ouC4guC4suC4og== IHJpZ2lk YmVjdWU= cG9ydGZvbGlv 0LDSm9OZ 0L/RgtC+0Lw= Rm9ydW0= IGJlZ2VsZQ== IO2OuA== IG1pc21vcw== IHRhdHM= IFByb3h5 IGxhdGVpbml0 ZW56ZW4= IGNpcGhlcg== 6ZmI Lk9wdGlvbmFs IHZlcmxvcg== IHByb2pldG9z ZGJv PWA= IG1hbnF1ZQ== YWRheHdleQ== IGLDonQ= IHZpcnVzZXM= IGxpdGlnYXRpb24= X3RyYWNl IGRldHI= 4Lir4Lin IEFzcA== aGFua2VsaWpr IHdpcGU= RnJhbmNl IE1pc3Q= 6Zet dGVycg== IGVsYXBzZWQ= 4KSy4KS+4KSH4KSo IGNsZWFyaW5n aW5idXJnaA== IGVxdWl2YWw= dmlhbWVudGU= bWFya2Vy LmN1c3RvbWVy INSx1bXVvQ== IC8vLzw= w7Npcg== INCS0L4= IHRvcm5hcg== IFJhZmE= cG9zdGFz LW1p IGZ1aQ== IEJlZGV1dA== 0YDQsNGI KCkpOw0KDQo= b3JnZXM= IGNyZWF0b3Jz Z293 RnJlcQ== IGh1ZXQ= IOCqsOCqueCrhw== c2xhZw== In0pOwo= IE1hbnVmYWN0dXJpbmc= 5pyr 6KU= b3BoeQ== KGxvZ2lu IHZhdWx0 IHVyaW5l ZWN1cml0aWVz IHVyZQ== X0RFQ0w= ZWN1dG9y IHNpbGs= IEV4aGli yZl0aQ== IOCkrOCksA== IGFtYXI= IGRpZG50 RXZhbHU= U3Vic2NyaWJlcg== cHRpYw== IOCqsOCqueCrjeCqr+Cqvg== IGdpw6A= IHByb3Zlcw== IGVsZWdpcg== IFxc dWZh aWVkbw== 4LC/4LCv4LGB IGV0bw== 0L/QtdGA 4LKC4LKm4LON4LKw z4HOv8+N IGJyYXNz cmlrYQ== IGFmZmVjdGlvbg== VGh1bWI= bWFuaWE= 2LXYp9mE 2LTYp9ih INqp2YjZhA== IGlueg== b29w IENsdXN0ZXI= dXlvcg== 0L3QvtC/ w6py 2LnZhNmI2YXYp9iq 2KfYs9mI TGl0ZQ== w6p0cw== PSY= IFRlY24= b21lZGljYWw= YmlsZGVy 4Z+S4Z6R SW5zdGFncmFt X2RlbGF5 IEVyb3Q= IHByb3g= Y2F0YWxvZw== 0LDQvdC00Ys= Lklt 4KSq4KWC4KSw4KWN4KSj IGfDtnJh INee15I= eW1hbg== IG5ldHRzdGVkZXI= YXRhYW4= IGLDunM= IHN0ZWQ= IGZlYnJlcm8= CXNxbA== IFJvZHI= 6Kw= INeW15DXqg== IG9nZQ== cmVtZW4= IG9wdGltaXplcg== ZWRpYW4= SU1BUlk= beG7jQ== IOCyruCyvuCypA== INC90LDQt9GL0LLQsA== IHNsZWVr IGFkdmVydGlzZW1lbnRz IEhvb2Q= 4YOa4YOY IGRhbmdlcnM= IGN1cw== ZXN0aW1hdGU= Q1RM 4Kq+4Kqa INC80LDQsg== V2FpdGluZw== IEluZHVzdHJpZXM= 5bOw Pnw= 5o2V6bG8 IG92ZXJsYXA= IGVuY29udHJhZG8= 0YPQu9Cw0YA= UG9saWNl IEdhcnRlbg== YnVuZA== INij2YXYp9mF X2JlZm9yZQ== 2KzYp9is w6lkZXI= UsOp IGRpdm9y 4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LWN IGxlc3Nlcg== IGdhbW1l LWNy ICI7DQo= INiy2YbYr9qv24w= IFJlaXNl U0VM 2LHYp9i5 Z2FsbGVyeQ== INGB0LXQutGB IE1ha2Vy IGjJmQ== INW+1aXWgNW7 IO2BtA== IG5lbGw= IGJsaXZlcg== IGRlbGlnaHRmdWw= INii2YbZh9in IGLhuqNv LWZhY2U= CWJ0bg== IFJ1c3Q= b3JpYw== LXNlY29uZGFyeQ== W10pCg== ZWRhZA== w6ZuZA== IGZvcnR5 b2xvZ2lj IGNlbnRyb3M= INW01b8= IMO8cg== CXRhcmdldA== TmVlZGVk 4YOQ4YOb4YOQ4YOo LnB5cGxvdA== INWI YXB1 am91 SW5zdGl0 5ryP5rSe UmVuZGVyaW5n 1bjWgtW11ak= IG1lbm5lcw== SVJU IG3DqWc= IFNjaMO8bGVy IGZ1bmN0aWU= IOCkuOCkrQ== INWw1aHVvw== 4LKz4LOG IEp1bGlh IGR1bGw= 6rKs IGN1bG1pbg== dGVpbHVuZw== IHJhcg== IEx1eHVyeQ== IGRpbWFuY2hl IG1haW8= INmI2YrZhg== z4POv8+Fzr0= IOC0qOC0v+C0sg== X3NldHM= IFZldGVyYW5z IGtyZWVn IM+AzrHOuQ== V3JpdGFibGU= Q29uY2x1c2lvbg== z4HOv8+C IGp1cmlk eXNpY3M= 4YOU4YOR4YOd4YOT4YOQ IGF0bw== IEZhbWlsaWVu INCx0LDRgNGL IE1pcnJvcg== 4Kqw4Kq4 IGxpdmVseQ== IOGDoOGDkOGDm+GDk+GDlOGDnA== IG1lYW50aW1l b3ZpZXM= 0YvQvdKt0pvQsNGA IGFkdmVydGlzZW1lbnQ= INC00YDRg9Cz0L7QuQ== 6bue IHBsYW50ZWQ= bnRhZw== CXBhdGg= aXNpdA== Q29tcHV0ZQ== INGB0YLRgNCw0L0= JlA= IHppZWs= SG9sZA== INGB0YHRi9C7 IE9U ImNsYXNz TElC IHdpdG5lc3NlZA== IGfDvG5zdA== INmE2K8= ZnRpZw== aXRjaGVz INit2LU= IGxleg== IHByb3Zv YmlydGg= IGZhdHRv T0U= IG1pZHN0 IGJlZHJl IOCyuOCzjeCypQ== 0L7QstCw0YLRjNGB0Y8= YWRj LWNvbnM= 4Kef4KeH L3N0eWxlcw== 4KSy4KS/4KSP IFRyYWI= IFNlcXVlbGl6ZQ== IGdhZg== IHJlY3JlYXRpb24= IHJlY29tbWFuZA== IHRpdHVsYXI= KEVudGl0eQ== IGJlaGF2aW9yYWw= IGRpc3RpbnRvcw== IOCypOCyv+Cysw== IFBhdGNo INC/0YDQuNGF0L7QtA== aWxvdA== 2KjYrdir IOCmueCmv+CmuA== YXJlbnRseQ== IEVjb25vbWljcw== TGF3 772A 5Lqk6YCa 4LmC4Lil cmV1cg== IERvZA== INm+24zYrw== IERhdw== zr/Ovc+EzrHOuQ== X0xBQkVM bmnEjQ== 7ZWY66m0 IG9udQ== IEdyYWR1YXRl IMOhbGw= bGF0aXR1ZGU= 4KeH4Ka5 0LHQttGM IGtvbm50ZW4= INC+0LHRitC10LrRgg== IFNwYW4= 5Z+65pys IHBo4bqnbg== IGFzc2VtYmxlZA== IGNvbmZpZ3VyYXRpb25z 4KWI4KSC4KSV IGNhcnRy IG1vxbxuYQ== Q29udGludQ== IHJlc2VhcmNoaW5n IGFsZWdy 4YOl4YOd4YOc bmph Q2FtcGFpZ24= X2RvbmU= LdC5 IGNvbXByaXNpbmc= IC4uCgo= UEFSVA== 4LCy4LGN4LCy IE1vdW50YWlucw== IE9yb21vbw== 4pa8 4KWD4KS3 YW1wZWQ= IGdvZGU= Z2lvcg== INCx06nQuw== UGFsZXR0ZQ== IGVmZWN0b3M= IHRob3VnaHRmdWw= IFByZXR0eQ== IG1hcnI= INC00L7Qu9C20L3QsA== INGD0LvQuA== J10pOw== Z2HDp8Ojbw== LmNvbm4= IGNlbHVsYXI= IGVucm9sbG1lbnQ= IOCmleCmsg== zrzOsc+Ezr/Pgg== U2lkZWJhcg== INGA0LXRgg== IFNRTGl0ZQ== IG9q IHRyYWJhamFkb3Jlcw== INCy0LjQtw== IHBlaW50 4KSe IGplZGVz 0LHQsNGB IE9QRU4= X09SREVS bWl0ZQ== IOCqieCqquCqsA== IFRyaWdnZXI= IGxhc3Rz IHBhcnRpY3VsacOocmVtZW50 IGFvw7t0 Q2xhc3NpZmllcg== XSl7Cg== 7KG0 INCy0L3QtdGI IOCmquCnsOCmvg== 5rGf6IuP IGdvc3BlbA== IHBlbnRpbmc= X18pCg== IGFwYXJlY2U= IGZvcm1hw6fDo28= dXNzaW9u INin2YTYtNmK X0NGRw== IERlY2ltYWw= INWA1aHVtdWh1b3Vv9Wh1bbVqw== aXNlZW4= IGNvbmZp 5L+65Y67 4KWL4KSw4KWN4KSf 4LWH4LSV4LWN4LSV4LWN 5pe25Luj KV0KCg== 54i1 w6lpZXJ0 INeY15XXkQ== IGNvbGVjdA== IENyaW1pbmFs IHByaW5j IERyYWZ0 IFByZXZlbnRpb24= IGjJmXI= 4K6j4K+N4K6j IERpcmVjdG9ycw== V2F0Y2hlcg== IHJlc3BpcmF0b3J5 5Y20 Zmx1eA== IGVuY3VlbnRyYW4= IGNyaXRpcXVl L3B5dGhvbg== w6ltYQ== INC40LrTmdC9 0YDRi9GB0YLTmQ== 4YOd4YOg4YOi IFTDvHJraXll IGtvbnRy 4YOd4YOR4YOQ4YOh IENoZXZyb2xldA== b3JkYWJsZQ== 5YCN5oqV IGF1dG9tYXQ= INC80LjQvdC40Lw= IHN1cHBseWluZw== b25law== UmVudA== IGdyYXZlcw== IG5hdmVn 0YDQtdGB0YE= IHNwZWNz IGJyZWV6ZQ== w610dWxvcw== IGNvbWljcw== IHRlxbw= asOkaHI= IHZvb3Jrb21lbg== INCS0LDRgQ== IEZyYW5rZnVydA== Q0FQ cnZhdHM= IHJvdWdl IHRoZXJlb2Y= KGJvb2s= 2LjZhw== INWl1oQ= ICgu INC+0LY= cHJlY2lzaW9u YXJkaWE= PWhlYWQ= IHF1YXJ0YQ== IG3DpW5nYQ== CQkJCSAg IHNwZWNpYWxpemU= INio2KfYstuM INeQ15o= IG11bmdraW4= 4LmC4Lib4Lij IOCwtw== TmF2aWdhdGU= IHTDoWM= 2YnYsQ== X3NjaGVtYQ== INin2YTYp9mG2Ko= IG7DoXM= LmNvbnM= ZWxlcmF0aW9u INCx0LDQudC70LDQvdGL IGLhu5k= bW9kaWZpZWQ= bGVuZQ== 4YOQ4YOr4YOa IFRyZWs= b3B1 R0Y= KD8= INCe0L3QsA== IGRpcmVjdGV1cg== LmdyZWVu INek15DWt9eo 6YCa55+l 4LWB4LSV4LW+ IOCkueCkruCkvuCksOClhw== YmVuemk= IHZlbmRlcg== IGNvbG9yZXM= cmVpcw== aW5jaA== dW5kYWk= 4Kyo PXg= IHB1ZWRhbg== IHNhZ2E= IEFQSw== 4LK/4LK44LK/4LKm4LON4LKm4LK+4LKw4LOG 5Yi7 0LzRg9C9 b3BvbA== Y3ljbGVydmlldw== IGluc3RydQ== Z29t IGRpdnVsZw== X3BhdGhz T250 IHF1YXJ0bw== IETDqWM= INC30LXQs9GM0Ys= LWhlYWRpbmc= IG1lbW9yaWE= IE1ldGVy dHJhaW5pbmc= YWRq IGNpY2xv IGN1aWRhZA== 0YHRgtCy0LXQvdC90YvQuQ== INC+0YjQuNCx RW5z IEFsemhlaW1lcg== b2NhYg== YmluYXJ5 IFNlbGxlcg== IOCmrOCmv+CmreCmv+CmqOCnjeCmqA== IOCqleCqvuCqsOCrjeCqrw== INCh0KjQkA== 4buHbmg= Y3JpdGljYWw= 0LXQutC1 INin2YTYqtiz UkVO 4pGg aW1iYWJ3ZQ== IEZJRw== S2Fy 1oDVodW91b8= IGF2b25k INiz2LfYrQ== dmFsdA== KG1hdHJpeA== IGRuaQ== 1aXWgdWr1bY= 0LrQsNC30YvQstCw UkVN 5ZSQ IHRyxrDhu5tj IHPDuGtlcg== 1bjWgNWx IGFic29ycHRpb24= 4LGN4LCw4LCu IGhv4bq3Yw== Um9iZXJ0 IM66z4U= IGJsYW5rZXQ= IGZyaWVk IE5pY2FyYWd1YQ== Q2FsbGJhY2tz IOCqsuCqvuCqlw== VlJUWA== RHQ= 4Yg= INqp2obavg== IGJ1ZGR5 IGFzc2VtYmxl 2KfZhtuB IGNpZ2FyZXR0ZQ== IC8qKjw= 0LDQu9Cw0YDRiw== IExhaw== IGNzYWs= INGB0LLRj9C30Lg= IFJFTA== IG1haGk= IOCuteCvgA== IGJlZ2lubmVy IGtpbWk= IFRvZGQ= INuB2YjYpw== INin2KzYqtmF2Kc= IFNob3dz IHNvcnBy IGFwbA== IHDDqHJl YmFubmVy IOCkqOCkvg== IOGemA== INC/0L7QtNGC 0L7RiNCw0LQ= IERldGVybWluZQ== 4YOV4YOY4YOa4YOY 1avVvdW/ w6RsbGVu IFNleHk= IGJhbw== QU5HVUFHRQ== INW21a8= X0NSRUFURQ== 4YCV4YC8 IGZhaXRlcw== IHZlcmVu Q29tcGV0 INeQ16nXqA== w7NuaWNh 0L7Qu9GM0L3Qvg== L3BhZ2Vz IHN0cm9uZ2VzdA== Pn0K w6lyY29sZXM= LWJvcmRlcg== IHN1cHI= LmNoZWNrZWQ= UGVyZmVjdA== IG9waW5p IOCkqOCkv+CktQ== IFNlcQ== SUZF cm9sZXVt IHp2YWs= IOqwgQ== zr3PiQ== INin2qk= IE5TTXV0YWJsZQ== IFR1bQ== IENMQVNT IGF0ZW5kZXI= IE1lbnQ= LnN5bmM= QXVz IExpZWJl IMOd 2LHbkg== PGNsYXNz IG1lbWJlcmlrYW4= IERFU0NSSVBUSU9O IG1haGQ= YW50aXM= IEt1bmc= 4YOd4YOW IHLDpQ== 6YGH IGhlZXJsaWpr IFNreXBl IGxvb3Bz IFRoYW4= bWVpc3Rlcg== YWR2ZXJ0 IEV0aGVy IGN1cnQ= 4LWB4LSV4LSz4LWN IERBWQ== INGB0LjRgdGC0LXQvNCw IERvbGw= I2xpbmU= INiv2KfYtNiq2Yc= IOiOt+WPlg== IFJlY2h0cw== IFNlcXVlbmNl 6KGl IHRyaXVt 5omY xJ4= ZW5pYQ== d2VhbHRo IHN0YWly c2Vydm9pcg== 6Iie cXA= IM65z4M= IGJvdW5jZQ== INGN0YLQsA== LkZvcg== b21pZA== zrzOrc69zr8= CXBhcmVudA== bmVlZGVk X1NUUkVBTQ== INWr1oDVodW+ LWVmZmVjdGl2ZQ== IG9udHdpa2tlbGluZw== ZWNv LOKAnA== IFByb3ZpbmNl QXByw6hz 0LjQstCw0Y7Rgg== IHRyZW5keQ== VmVyaWZpY2F0aW9u RWZmZWN0cw== xId1 IFZlcms= IGFydGlzdGE= KEls IGNvbnNpZGVyYXRpb25z aXR0w6Q= IGplbA== IGF0YWF0cw== Q1NW IHJldmVyc2Vk 0LvQtdC90L3Rjw== YW5ucw== 06nQsg== IEFzc29jaWF0ZWQ= 65Cg IHVuZGVyZ28= IGNvcnJlbA== IGNhdGVyaW5n 4KS54KWL IGFkdmllcw== 4YOQ4YOg4YOQ IE1hc29u IGJpc3M= IGFpcmxpbmVz IHNlc3U= aWNodGVy IOWR IHNrbw== IHNvbHU= IHNjaWVudGlzdA== 2YfYp9io KE1lbnU= IHNwZWNpYWxl Y2Vycg== aWRpYW4= 4YOY4YOZ4YOj4YOg4YOY LlRS IG9ic3RhY2xl IO2MkA== IHNodXR0bGU= IHByw6p0 IGltcG9ydMOibmNpYQ== IOuTpOyWtA== IFNwaWRlcg== IOCkteCkv+Cktw== LmFyYW5nZQ== IGltcGFydA== 4bq5cuG6uQ== IGFwaw== 4KSw4KWN4KS24KSo IGhycw== IOmB IG5vd2FkYXlz IFdlYXI= Q2hhbg== IOCkleCkvuCkq+ClgA== aXRlaw== aW5reQ== 5p6B6YCf IGFscmVkZWRvcg== 4KeB4Kam4KeN4Kan IG5nYXBo 2bnavg== 1bjVtA== IENvbXBsZQ== IOCqnOCqo+CqvuCqtQ== YW7EsW4= cG9ydGFs IENhbGN1bA== IGluc3RydW1lbnRhbA== IEFncmljdWx0dXJl IHJlcXVlc3Rpbmc= RMOp 5rGg IGRldGFsbGVz IENhdGVnb3JpZXM= c2FsZXM= Y3JlYXNpbmc= YmluZGluZw== IGh5ZHJhdWxpYw== c3B5 WkU= YWRlcXU= LVJl IGNvbnNpZGVycw== 5byA5Y+35Zyw5Z2A IM6kzr8= IGhpem1ldA== 0LXRgtGC0ZbQug== 15nXp9eo bWlkZGxld2FyZQ== IHBvc2l0aXZlbHk= IENVUkxPUFQ= QVZB IHNxdWFyZXM= IOCkpuClgeCkqA== INGH0LvQtdC9 IENsb3M= LmJh ZnJpZW5kcw== INqp2LHYr9mG IGhhcHBpZXI= IGVyaMOkbHQ= LGRhdGE= IM6uz4TOsc69 IOCymuCyv+CypOCzjeCysA== 5a6e546w IGV4Y2w= bGF1bmNo ICJ8 IGl0YQ== 2YrYr9in IGZhcm1z INmG2Kg= IG1pbmVz IHRldGFwaQ== IGFzc3VtcHRpb24= 4LCw4LC/4LCX YWPDrQ== LklkZW50aXR5 0YDQuNCz 0L7Qu9C10YI= UXVlcmllcw== IOGDoOGDneGDkuGDneGDoA== INGB0LjRjw== 4KWN4KSk4KSw IHZvb3JkYXQ= X05PTg== cmFhbA== IG1ubw== IHBhbGFicmE= IFZlcmQ= IOCkuOCljeCkpeCkvuCkqA== IOCqrOCquQ== IHBvc2liaWw= VGVybWluYWw= bGF0aW9ucw== 5LqC IGluY2x1eWU= S29u INCw0LbQuNC7 IOCmheCmuOCmrg== ZW5haXNzYW5jZQ== Y3JlZGk= IHZhbGlkYXRlZA== IEZsb3dlcnM= Tkg= IEdvZCdz UkQ= IE1hcsOtYQ== IGRlZmljaXQ= IOaciA== IGNvbXVt IFN0cmVzcw== IG5vc3RhbGc= zrvOuQ== aWxkYQ== IEJpcnRo 4KaX4KeN4Kaw IGtpxZ8= auG7jQ== IHNsZWV2ZXM= aGV6dWx1 IMOkbA== b3NvbWU= IGJhcms= INii2LI= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9saw== a3Rp 4Kaw4KeN4Kal 66eJ IGNlbGVicml0aWVz ICAgICAgICAgICAgICAK dXnDqm4= LnVwbG9hZA== w7xsdA== IGVuZm9yY2U= INC80LDRgdGB 7Y+w YW1tZQ== IHRhZQ== IExpbA== IHZvaXM= IGhlaWdodHM= IGNvbnRyw7RsZQ== IGZpbGhvcw== 4KeB4Ka34KeN4Kag 4LWH4LSW IGludmVydA== IEJlbmNo 4LK/4LKX4LKz4LOB IFBFVA== aWVw IFJlYXNvbg== KGRlc3Q= INC605nQuw== CWNyZWF0ZQ== IGF1dHVtbg== TGVnYWw= IMOpbMOpbWVudHM= 56iL5bqP KCkuX18= IHBhcnRpY2lwYWNpw7Nu CW9z IO2DgA== IGVuY2FudA== Q29va2llcw== LnNv IGFicmE= w6J0ZWF1 INGB0L7Qvw== IG1ldGVlbg== IG11bHRpcGx5 IOCoheCopOCphw== eXNr IFZQ IGFmc3RhbmQ= X2VuZ2luZQ== X0FO eXN0aWNr 5Y2A 57uf6K6h IEVzcGVy 7YG0 4Kin IE5lc3Q= LWdyYWRl IHRp4bq/cA== IHByaW1pdGl2ZQ== Q291cg== IOGDlOGDmQ== 5bm46L+Q LmFnZQ== Lm1pY3Jvc29mdA== 4LKk4LON4LKv IMO7 IEJlbGdpdW0= LnNlcmlhbA== IGRpcGxvbWE= QEluamVjdA== IGxvcnNxdQ== X2JlZ2lu IGVsaWdpYmlsaXR5 xaF1 IG9yZ2FuaXNlZA== LmVtZg== IHN5c3RlZW0= IHVpdHM= IOCqtuCqsOCrgg== IGJyb256ZQ== 6Zqc IOG5o2k= IHByb3ByaW8= QmFycw== INin2YTZhdi52K8= TUxFbGVtZW50 IG9yaWdpbnM= w6dvaXM= bWVn ZXJ0aQ== IOeyvuWTgQ== 4Liy4LiE4Liy IEVpbms= IEdyYXBoaWM= X0RFQw== IOCquOCquQ== INGC0YPRgNCw0LvRiw== LkZ1bmN0aW9u 6rKo aXJ0c2NoYWZ0 4LK14LKw4LOB IER1dHk= ZmllbGRzZXQ= IEVsaQ== Lk5ldHdvcms= INiz2YbYrw== X0RFU0M= IGhhZg== IHNlYW1sZXNz LkFyZ3VtZW50 LnNjaGVtYQ== IGh1bWJsZQ== SW50ZWdyYXRpb24= KSkpKQ== INCf0L7RjdGC0L7QvNGD IMSR4buRaQ== 0LHQtdC6 X3BhY2s= IENvbW0= IGFuYWx5emluZw== 2LPYqtix w7Nr IGdyYW5kbW90aGVy IGp1bnRvcw== TGV2ZWxz RlJPTQ== INC+0YLQt9GL IEdyYWI= IE1vbnRyZWFs IHNvbGRpZXI= INGW0YU= INC+0YLRgdGD0YLRgdGC0LI= 4YOT4YOU IEhpdGxlcg== IG1veWVubmU= IElOUFVU IHF1ZWxxdQ== IGluZGlzcGVuc2FibGU= IENhbmFs IGtpbG9tZXQ= cGNz INCy0YHRjw== 5qCH6aKY IHRpYg== aXJpdHVhbA== QFNwcmluZw== IGh1aWRpZ2U= IGJvb3RzdHJhcA== IG5vcm1hbGU= LlJhbmdl bGhl IGZydXN0cmF0ZWQ= 44CB44CB IENhbWVyb24= IFhp emVh IEpvcmdl IM60zrnOrA== IGtyZWQ= IHJlY29tbWVuZHM= IEJhcnJ5 IGF2YWls IOCkquCljeCksOCkreCkvuCktQ== IERhaA== IEJBQ0s= INin2YTYp9mC2KrYtQ== IOGDquGDruGDneGDleGDoA== INC80LDQu9C10L3RjA== INix2LPZiNmE IGJhcmk= IHNpbXBsaWNpdHk= ICRfXw== IOC0quC1geC0pA== X1RZUEVT IFN1cHBsZW1lbnQ= INC80LXQtNC40YbQuNC9 IHByw6lzZW5jZQ== IG3DqHJl LWRlYw== X21hbnk= IEZvcnR1bmU= IOe9keaYkw== X2F2 b2xhdGU= bXVzaWM= IHBvdm8= ICAgICAgICAgICAgICAgCg== IOGAhQ== IGdlYmU= aG9uZw== INin2YTZhdmF2YTZg9ip IHN3aXRjaGVz IE9seW1waWNz IG1hYWw= IGFzcGVjdG8= emhvdQ== IHZhcA== IEF3ZXNvbWU= IGF0dGl0dWRlcw== CWxhYmVs RU5TT1I= RFZE Q2Q= IGRlY2F5 15nXk9eU IGh5ZHI= IENvY2s= IGVsdQ== IOC0teC0v+C0pg== VGhyZWFkcw== IG1hc3Nlcw== LmZlYXR1cmU= IEZyYW5jZXM= IEx1Y2t5 INGC0L7Qs9C00LA= IOCkpuClh+CkqOClhw== 0L3QsNGF 5pio 5L+E U1RSQQ== YWthdGhp IGNhbmRpZGF0bw== LnJlY2U= 0LjQstC40LTRgw== LmhhbmRsZXI= IGZsYW1l d2o= IGNlbGxlcw== IGdyaW5k e1w= IHZvbGdlbg== cmF1 IG3DpMOkcg== UlBD cGFyZXM= IGNvbnRlbnU= W2xlbg== QXVjaA== CWxpbmU= IE51dHJpdGlvbg== 0LDToQ== 5a6M5oiQ INCx0rE= UVN0cmluZw== Xzs= IGt1bmQ= 4LKW4LON4LKv aWFl IFNoZSdz IGR1csOpZQ== IG5lZW10 YXR1bmc= YXdhdA== KSwn bGVhZA== IOCkquCkpg== L2FqYXg= S2V5d29yZHM= IGRyaWZ0 QkxF IFBlYXJs 5YSq IFJJRA== IGFwcm9i cHJva2Vu IFVUQw== In19 2LrZig== IHBvc3RlcnM= J10pCgo= Lm1vZGFs REVD emXFhA== c3E= Q2hp IHByYW4= 7Lmo IGFsdG9nZXRoZXI= IExpcmU= IHp2aW4= IG7Dtg== YW5uYWg= IOGDoeGDkOGDkQ== LnNkaw== YWN0ZWQ= IHTDvG0= X2ls IGNo4buNbg== L3VwZGF0ZQ== IENMQUlN INmC2KfYqNmE w6R0ZQ== aW5uYXI= IHNhbm8= INin2YTZhdi3 IEZvb2Rz 5rS+5aWW 4KqC4Kqq INio2KfYstin2LE= cHdk aG9vdGluZw== dWxrYW4= 4LS/4LS14LS4 X1NJR04= KHZlYw== IFJpY2htb25k IOC0leC1h+C0sOC0sw== IFdhbGQ= KEludA== IGVybnN0 KSU= aW5zdWxh INC/0YDQsNGG cmVlZg== IOCmuOCnhw== IGRlY29t KGhhc2g= INCZ XE0= IEFwYXJ0bWVudA== IERvZ3M= X3Bsb3Q= 4YOY4YOQ4YOX INCR0YM= IGRpcmVpdG9z IGFzc29ydG1lbnQ= IHF1ZWxsbw== aWRhaw== bWFq 5Za3 UGV0ZXI= 4Kaq4KeB4Kaw b2hhbg== LmFtYXpvbmF3cw== 4Kqw4KuN4Kqj KE15 JykpOw== IHLDs3duaWXFvA== 44KK44G+44GZ IGdlZ2V2ZW4= UmVjb21tZW5k INCy0YvQug== IGFyxKs= VGh1bms= 2K7Yp9i1 IHNlaGluZ2dh 44K344On44Oz IG9kYg== IHNwaXRl 4YOh4YOi ICovCi8v IOix IENocmlzdGlhbml0eQ== cGF0Y2hlZA== RXll INiu2YjYtA== 0YvRgtCw IHJlbW90ZWx5 IGdhZ3dl IE1pdGNoZWxs c2lnbmFs Wk8= cHY= IHRlbmly bMSB IGRhdGFzZXRz INC+0YTQuNGG0LjQsNC70Yw= IHTDqWzDqXBob25l Ojo6 emVzcw== 4KS+4KS44KWN4KSl emlhxYI= KHB0cg== 6KO9 IGJsZWVkaW5n 4Kqw4KuL Zm5hbWU= UGFya2luZw== 2YjZhNin2YrYp9iq IFs6 KGAv IOCmquCmsOCnjeCmrw== Il0KCg== 4YOT4YOU4YOc INm+2pE= 55Sj INin2YTYo9mG Z2x5cGhpY29u Ym5i IHN1cHBsw6ltZW50 IENoaW5l IHN0YcOw INC/0YDQvtCz0YDQsNC80Lw= IHNvbWV0aW1l ZW56aQ== IHNlZ3VpbnRl IG5yb2c= 0LzQvtC9 IHBlcm1hbmVudGU= IENsYWlt 0LvQsNGA0pPQsA== 2LHbjNmC 7LCp IOC4leC5ieC4reC4hw== IGFhbnQ= QWRz IGludMOpZ3I= INW41oLVttWl1oE= aWNpb25hZG8= X0xPQUQ= IHZhcmQ= IG9wb3J0dW5pZGFkZQ== 64uk6rOg YXVydXM= QWRkcmVzc2Vz SU5GUklOR0VNRU5U IOatpg== IGtvdGxpbng= YW5xdQ== ZGlyZQ== 6YGu ZXRhbA== INC40YDRiw== IFJldHJv IGRpc2FwcGVhcmVk w6lyYXR1cmU= LkJM IGF1Zmdl 4Z624Z6P KC9c a2M= 4LGB4LCV4LGL w6hzZQ== IGV2b2x2aW5n IFByZXNzdXJl aW9ycw== ICUl TWFya2V0aW5n IEJhcmI= UGxhbnQ= 5aSq6Ziz5Z+O 0LzQsNCz 5LiH5YaG 1oY= TWVhbndoaWxl X2lycQ== cGZsaWNodA== LnRhc2tz IHBvdGF0bw== IH0pOw0KDQo= dWJlcm5ldGVz IGluZHVjZWQ= IGlsdQ== IGVyZmFocmVu IOCmleCmvuCmsOCmow== 2LTZhQ== INC+0YDQs9Cw0L3QuNC30LDRhtC40Lg= IGxhbWFuZw== INCw0L/Qvw== IOCuleCviw== IGdsb3c= UFJJTlQ= INin2YTYrNmG2LM= IGZlaXQ= IE1vbnRhbmE= IGhvcml6b24= X18pOwo= IGNvbXBvc3Q= IGFwcGxlcw== VGFpbA== IHN5bXB0b20= IGRhdw== IHRvcm5v IM+Dz4Q= IHByb3TDqQ== 0LjQutCw0L0= IGNtcA== IHDDumJsaWNhcw== IEJhbmdrb2s= I3ByaW50 4LC+4LCy4LGL dWJsaWs= IOCyheCyrQ== 15XXpteo IE1pbmlzdGVyaW8= bmHDsA== 2LLZitiy aW5mZWN0 IEVWRU4= 4LSm4LWN4LSm4LWH4LS5 IOuUlA== w7py 2YjZgdmK aW5jaW5u IHbhu4s= IHBvbGk= IGtpbmRuZXNz IOOCtQ== IHNjaQ== Y2hpbmU= IHNsdcW+ aXZ1 15vXlg== xb5ldGU= IEhhcmJvcg== IHp1bg== INin2YTYtNix dGhldGE= 1bXVodWs IHJlZmVyZQ== 6JGX dWxkYWRl IOmVvw== 0JDQog== IOyZuA== LmNvbG9ycw== IGFudGVyaW9yZXM= aWFldGg= IGPDuQ== IGNvbWZ5 5qih5byP 6LO8 L2Jhc2U= aXNrbw== 0LzQuNC90LjRgdGC0YA= IFdJ 57k= INW01avVodW11bY= LnByZWRpY3Q= 6IOM IGZsdWN0dQ== 0L7RgNC1 IFNsb3Zlbg== IOCwruCwsOCwv+Cwr+CxgQ== IEJvb3N0 IENvbXBldGl0aW9u IHNpZXI= ZW1taW5n INmI2YrZiA== INC/0YDQuNC70L7Qtg== IGZheA== IHRocmVhdGVuaW5n 0YvQu9GL0ps= dm90ZQ== IGTDqWZpbg== X2ZhY3Rvcnk= IERlc2NyaWJl LVVT IEdyb3Zl IGdlaGVlbA== ICghXw== INC/0YDQvtC6 LXJlZA== IGZhaXRoZnVs IHRyYW5zbWl0dGVk IO2F INec16TXoNeZ IikKCgo= IOCkqOCkvuCkueClgA== UmV2ZXJzZQ== IGdseXBoaWNvbg== 4YOU4YOh4YOi IGp1Z2Fkb3Jlcw== J14= aWNobw== 4Laz IG9yaWdlbg== IOGDm+GDmOGDlg== YnJ1c2g= IEVsZXY= INmI2YXYuQ== LkFkZHJlc3M= IOCmleCmsOCnjeCmrg== IEFuZ2xl IGdyYXRpdHVkZQ== INC60LXSow== 6Laj bml0ZQ== IE9uZA== IMq7YW5h z4TPiQ== IHJlYXNvbmluZw== QVJHRQ== IGhhYmw= INmI2KfZgti5 5p2v 6K6k6K+B IHlha28= IE11cnBoeQ== 4oCZaWI= w7ZudA== INWt1bbVpA== IFBpZQ== INC70LjRgg== QlJF V2ls 566A5LuL INCy0YvRgdGC0YPQvw== KGJ1aWxkZXI= IGt1dG9rYQ== IGVyZ29ub20= RmFrZQ== IGdyYWlucw== PEI= IEZlbWFsZQ== YW5udGVu IHRyYXZhaWxsZXI= TWF0Y2hlcnM= INin2YTYpdmG2LPYp9mG INiv2YjZhNin2LE= IHRoZXknbGw= 4LiI4Liw 4LiV4Lix4Lin IGNpdGE= IOS4jQ== VVRJT04= 44CB44CK J2FpbWU= IGFuc2No IHN1bnNldA== INCy0LzQtdGB0YLQtQ== IOC0quC1geC0sQ== 4YCv4YC2 QnVmZmVycw== c2F0 IEdlZ2Vu IDopCg== IOiC IGhlbGE= 4K+N4K6a4K6/ IGNyaWNrZXQ= IGludmFzaW9u IEFyYWJpYw== IG51bWVyaWNhbA== 6Iul INKt YWNjYXJhdA== IGtlcnQ= 5o+Q56S6 IHRyYWlsaW5n aWdt 44Op44OD44Kv emnEmQ== INCS0LDQvA== IG1vbmRv IGRlZmVuZGFudA== 4Ki/4Kmw IHRlY2huaXNjaGU= ISks 5YiX6KGo endl SGVi IOyngOuCnA== IHByb3Rlc3Rz bmVyZw== CWNtZA== IGJ1dXJ0 IGxhdWdoZWQ= IHByaW5jaXBl INC60LLQsNGA0YLQuNGA IExhYw== IG9tbg== dWxpYQ== fWAK 24zbgQ== KHNoYXBl IG1vYw== 4KmB4Kiw IEdsZW4= IHRo4bqleQ== 5bQ= LkJBU0U= IHRhYmxh ZW1tZW50 LnBvaW50 IHN1cGVyZmljaWU= 2oM= L3Nw Vm9y 4K6/4K6k4K+N4K6k4K+B 0YPQs9C4 IEdlbmVyYXRlZA== INeS16LXldeV16LXnw== IGJhY2tkcm9w IHNwbGFzaA== 4KS14KWH dmlj IOiPsuW+i+Wuvg== 4Kqg IkE= INKz0LDRgA== L2NvbQ== IGZyZXVlbg== IGdhbnplbg== IGZvcmVzdHM= IHdpbms= IGlsbGVn YXdhaQ== 4YOd4YOR4YOQ4YOo4YOY 2YnYsg== IOC0teC1hw== IGhlY3Q= IHDDsw== INCy0LDQuw== 5bCP5ri45oiP INCx0LXRgg== IOCmquCmvuCmsOCnhw== Lkljb24= J2ltZQ== Jyk7DQoNCg== IEVpbmQ= IGdpw7pw ZWNl IGFuYXRvbQ== ZGli IGtvbWJpbg== IHRpZW0= 4LCk4LGN4LCv IGhhcmR3b29k d2lz XykK LnBhdGNo dGVyZW4= T2ZmaWNpYWw= 4Lik4Lip 4Ka/4Kay4KeH IOCknOCljeCkr+CkvuCkpuCkvg== INin2YTYr9mI2YTYqQ== IHNjaG9sYXJzaGlwcw== KHllYXI= IHJlcHJv IHplaQ== IGVtZXJnZQ== SW5jb21l 0ZvQtQ== IGNhYmXDp2E= IGZvcm1lcmx5 IHByaWU= IGhvZWZ0 dXRleA== bGlja3I= IExldXRl IHdhbGE= YXJpaw== dXdpaA== 4oCZYXZvaXI= IEVp 4KeH4Kao4KeN4Kaf INGC0LXQv9C10YDRjA== IG5vcm1hcw== IExhcA== LXNjaG9vbA== IHN1YnByb2Nlc3M= 4K614K+B SGFuZGxpbmc= IGNheg== IGF1dG9tYXRpc2No IGRlY29yYXRpbmc= 2q/ZiA== IG51ZA== IGZpcmluZw== IFBpbmU= IHh0 IFJpdg== IHBldw== INmI2YfYsNin Q2FuZGlkYXRl IGJ5Z2c= YWxsb2NhdGU= 2LfZgg== IOiLueaenA== IEVB a3V1 4LeW X2J1cw== 5YGa54iw KHNvY2tldA== INmI2KzZhw== IE5X X3RoaXM= INC+0L3Qvg== Y2lkYXM= IGfDrA== IHNld2luZw== TWFnaWM= IEZVTkNUSU9O IOCyruCzig== YXRpc2NoZQ== 4K6k4K+N R1BJTw== IFlhbms= cG9saXQ= 65Ok7J2E IG90cw== emlt LVBybw== LVVuaXM= ZWxpYw== 0Y/QsdGA0Y8= INC/0YDQtdC/0LDRgNCw aWxkbw== IGFjcXVpcw== LnRpbWVzdGFtcA== IHRlcm1vcw== 4Z624Z6f IOCmqOCmpOCngeCmqA== KGFkZHI= JykpCgo= 5Y6C IMWZ IHJlY2lwaWVudHM= 4Liw4LmB4LiZ4LiZ SW5pdGlhbGl6ZXI= 5Lit55qE IGVuY3J5cHQ= 5p+T IG9rYW55ZQ== IHBhY2tldHM= INC/0YDQuNGI dGV4dGU= IGVzdMOhcw== 4LK+4LKw4LKk IE9rYXk= ZWxsaWo= IEdhbmQ= UmVjZWlwdA== IFBpcGU= IENyZWF0b3I= 24zYp9iz2Ko= ZGVjb3I= IHNvZGl1bQ== IHR1dG9yaWFscw== dWVt YW1wdG9u INGD0LLQuNC0 0LDQvNKt IEdvc3BlbA== IOC0leC0o+C1jeC0nw== cGF0dGVybnM= IHZhY2NpbmVz IE5laWw= INeo15E= TGVk LS0tCg== 15nXlNed IG1hcmNoZQ== INGD0Yg= dXJhdA== RGVhbA== Q3VhbmRv 4K6/4K6p4K+N4K6x IHdhbmRh 2KfYr9iq IHRvd2Vs IGFkaWNpb25hbA== INC606nQvQ== 5LmQ6YCP IEdE Li4vLi4vLi4v IG9udHZhbmdlbg== IENoYXNl IGhhbmRlbg== IOC0pOC1geC0n+C0meC1jeC0mQ== IFByb21v 0LXQstC+0Lk= IGx1eGU= 5a6H IEZhY3VsdHk= U25hcA== 4KuA4Kqh 4YOa4YOU4YOR4YOY4YOh Lm1lbWJlcg== 0LDRgtGA V2FzaA== U3ByZWFk IEhETUk= IGJpbGFuZw== IEJyb3c= IGltYWdpbmVk 0LDQvdGM 5pWw5a2X IENEQw== IHDDoWdpbmFz INCx0LDQsw== IOCqpOCrh+CqqOCrgA== IElR IGRlZXI= aW5hZG8= IHllYXJseQ== IGhhbmRtYWRl 1aHWgdWl1aw= IHRyaWdnZXJz INec16A= SURJ IEFzc2lnbm1lbnQ= IGRvYmxl 5YuS INCQ0YQ= IHbDqXJpdGFibGU= IGbDvGhyZW4= INCz0L7RgdGC INC00LXQudGB0YLQstC40Y8= LWJ1aWxk IGV2ZW50dWFs INCg0LXRgdC/0YPQsdC70LjQutCw 6ZuF LldhaXQ= 4LK/4LK3 0LTQtdC90LjQtQ== IOCqquCqvuCquA== IGxlYXA= a2FtcA== xJ9h IGF0aGxldGU= 4Z624Z6Z w7ZsZA== 4YOU4YOR4YOX TWFudWFs cmVhZG9ubHk= IHLDqWVs JwoKCg== IG3hurd0 1bjVstW7 aW1pdHM= IHZvbGRvZW5kZQ== IHd6 INGP0LLQu9GP0Y7RgtGB0Y8= IGluZm9ybWF0aW9uYWw= IG1vcmdlbg== ZW1lZW4= IFphcA== X1N0YXRl IGxhYWc= IGFjY2Vzc29yeQ== bm9m LnNlbGY= IGNob3I= IG1lc3VyZXM= IHF1aWV0bHk= IGZvcmM= IHByb3Bvc2l0aW9u IHRvbWE= IHNlcnVt IGhp4buHdQ== LmluaXRpYWw= IEN5bXJ1 Lm9uZQ== LS0+ 4Lax4La6 IG1hemU= IOCkhuCkjw== IFRyb3A= z4HOuc69 INW21oDVoQ== 4pmqCgo= IGNvbW1lcg== w6Rya2U= aXJscw== IHRyYXBwZWQ= xb51 24zYsduM INCx0YPRgtC70YPRg9GA0YvQvQ== YXJzY2hpam5saWpr UGFzdA== LlNlcnZsZXQ= SU5D 6ICB5Y+45py6 IGltcGVk 4KWI4KSV IOCkl+ClgQ== IHN1cnByaXNlcw== aW5jaW5uYXRp LmVsZW1lbnRz 4LS+4LSw4LWN4LSv cm92ZQ== IElEcw== YW5nZW1lbnQ= UGlk dGVuaXI= IFBvcnR1Z3U= dWdhcw== IFBST0RVQ1Q= INC80YvRiA== Y2FzdGVy bG9h YW5kdQ== IE1hY2s= aXJvbg== LkhUVFA= IEtpcms= fScu IH1dLAo= 7LM= IHRhc3Nh 4p4= INix2YjYsw== IHRydWM= 0LvQtdC90LjQtdC8 IEJ1bGxldA== ZmZmZmZm IGRldmVuaXI= IFVp INC+0YLQvdC+0YE= KWZpbmQ= IOC0ieC0qg== IHbDrWRlb3M= 4oCZb250 IGVuam95bWVudA== IHBhcm9sZQ== IG1vbml0b3Jz IGJhbmR3aWR0aA== YXVmdA== IFRoZW1lbg== 0Y3RgtCw IGZpbmFuY2lhbGx5 c29sZXRl bMOkc3M= IFJhcw== 4Kat4Ka+4Kas4KeH INin2YTZiNi32YY= Rm9ybWF0dGVk IGdhdWNoZQ== INGB0LXRgNC0 TGV0J3M= IFRlc3RhbWVudA== 4LK+4LKW 4YOQ4YOV4YOQ4YOT IENpdg== IExpbmc= Y3Jhbg== Y2hlbA== 4Kas4Kaw 2YjYp9mE2Yo= IOGDqOGDneGDoOGDmOGDoQ== 2LHZiNiy T3V0c2lkZQ== LnR0 IEJsbw== IGFzc3VtcHRpb25z IOaKlQ== IGNvbXBhcnRpcg== IGJlaGFuZGVsaW5n 4LKH IFJlZmxlY3Q= IEV4ZWN1dGlvbg== W0E= IHJldmlzdGE= INGE0L7RgA== YXRpbA== fSI7Cg== IHJlcHJvZHVjdGlvbg== X1N1Yg== IHZvbHVudGFyeQ== 2K3Yp9iv IHRlcm1pbmF0ZQ== JSc= dXN1cw== IENPTE9S IEd1aWxk VGlsZXM= LmF1dG8= IOWQjA== IGdhZ24= SElURQ== b3RpYXRl aXN0ZXJlbg== INmF2YPYp9mG b2xsaXNpb24= LlR5cGVz 4YOX4YOu4YOV IOCkuOCkv+CkguCkuQ== 0Y7RidC10Lk= 4Kit IGNvbXByZXNzZWQ= IFNBTA== IHByZXN1cA== INC80LvQvQ== IOCylg== 4Lix4LiX cHVibGlzaGVk QWRq 1bbVpdaA1avWgQ== dGhhbA== INC60LDQuQ== IERpc2FibGU= IFNVQ0g= b2N1c2Vk IERNQQ== KCkuCg== IEdlbmVyYWxseQ== L3Bvc3Q= KFdlYg== SG9y IHBvbGxz 4bqjbmg= dOG7pXThu6U= IHphbg== YWxhbWE= IENPTlNF 6IGY IGlsaW5uaQ== ZXNwZWNpYWxseQ== IOCkleCljeCksg== bW9i TWVtbw== IGNvbnN1bHRhbnRz IFN0cm9t Y2FsY3VsYXRl b3By IENvcm5lcg== IGRhbGth IOC0ng== 4KS+4KSJ4KSo4KWH 4Ka/4KaX LmNvbmZpcm0= INCh0L7Qsg== QXk= IHBvc3NpYmlsaXTDqQ== X0VESVQ= aGlzdA== IOCkrOCkpuCksg== IGVzY3JpdG8= IHJlcg== LkFkYXB0ZXI= Km4= aXZpdMOg L2hlYWRlcg== KS4uLg== IEjDtmhl IGthemk= IFJFU1VMVA== IHNwaW5uaW5n INmK2K3Yqg== IHNpdHVh IG5ldXJhbA== emVpdGVu IEJlZGV1dHVuZw== 0YDQuNCx 4LKw4LON4LKV IHbDqWhpYw== JyksDQo= INin2YTYsdmK2KfYtg== IGJlbmVmaWNpb3M= IG1wZQ== 44Gz IOCkhuCkq+CljeCkqA== LXNlcnZlcg== INC/0YDQuNGB0YI= IGNvbmNlcm5hbnQ= IGRlxJ9pxZ8= IOyVvQ== IFZhbGlkYXRvcnM= IHphc3Q= L3N2Zw== IHJhZmY= IGZ1dGJvbA== ISI7Cg== SU1H IGNyb24= IENJQQ== IGR1cm8= KENvbGxlY3RvcnM= IGRlcm1hdA== 5ZC4 IGJlbGFuZ3Jpamtl 2YrZhdmD2YY= IGdlZnVuZGVu IGRpcmVjdGFtZW50ZQ== INC60LDRgNC0 IE11ZA== IOW4nQ== 4YOj4YOR T3V0ZXI= S2Vu IE9VUg== IOCuruCvgeCuqQ== cmVsbGFz INC10YI= IFF1YXJ0ZXI= w61jaWFz 5Ye656Wo IEhFTA== IGNoZXNz aW51dA== UEI= IFBvbGlzaA== INW01bjVvw== aXRhZG8= IOW7 0YDQsNGC0Lg= INC/0LvQsNGB0YI= IEjDpA== IGFyY2hpdmVz IGLhurFuZw== INC/0L7Rh9GC0Lg= 0YXRiw== 5bel56iL IGtqw7g= aXphbg== IHNpZ2h0cw== IFRSQQ== IE5lYmVu ICYo dGV4dHVyZQ== IiktPg== IHNyZWQ= b2luZQ== IGR1ZA== aW5uZXE= IHThu5F0 IG11ZGFo IHNldG9y Y3JpcHRpdmU= aXZhdGlvbg== IG5pc2k= IGvEsQ== L2ZvbnQ= INGB0YLRgNGD0LrRgg== INC00Ys= INmK2Y8= INiv2LrZhw== IEdvcg== 5a6a5L2N IGJpcmxpaw== IGFjcXVhaW50 LmpkYmM= INqp2LHZhtin dW5pZnU= 5o+Q5qy+ IGNpdHQ= 5Lq655qE IHBhcmFkaXNl IHBhdGh3YXk= QUND X2J1ZmY= LdC0 INCx0LvQuNC3 LkZM aXZleg== YXJ5YQ== Z2VucmU= IGRlY2lzacOzbg== LlBybw== IHRlY25vbG9n Pj4o IFBsYW50cw== IOCyheCypg== IE9j IHR5cGluZ3M= 4Ka/4Kav4Ka84KeH IGNsYQ== Y29hbA== 7JWI66eI IHZlcnJl IEphcA== aGFsbA== IHppbmM= YXJsZQ== INiu2YQ= IHJvY2tldA== IHJlbGFjaW9uYWRvcw== IHJlYnVpbGQ= 4bqvbmc= IOGek+Get+GehA== 6KeG6aKR5YWN6LS5 LWNvbnQ= W1w= IOC4guC4reC4hw== IGhvYw== IOCuteCvh+Cuo+CvjeCunw== X2NvbGxlY3Rpb24= z4fOrg== R1U= IG91dHVicm8= INCw0YXRjA== L2Zvcm1z 4oCNLg== IFZlcnRpY2Fs IEFwcGVuZA== 67CA 5biu IHVhbmc= aWhhcg== IOCkl+CksOClh+CkleCkvg== 0LTQsNC90Lg= Lk51bWJlcg== IGxhbWVudA== INiz2YbYqQ== dW5nYWw= ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= IGludHJvZHVjZXM= cXVpeg== IHdvbmRlcnM= IENhZsOp 4KWC4KSk IHNpdHRlbg== IGNvZGlnbw== 4LmA4Lir4LmH4LiZ IHNoaWZ0ZWQ= IEjDpG5k Qm91bmRhcnk= KXsKLy8= IOCkruCljeCkuQ== 5YGa5oSb LkxvZ2lu IFNlZ3VuZG8= IGFzc2lzdGluZw== X2NvbnY= IG1lbmU= IENpdGllcw== dGVlcw== IExvY2FsZQ== INiu2Kg= YXRodQ== IOCuquCupA== IGVkacOnw6Nv IFNhdGFu IGpva2Vz bG95ZA== U1VC d2VhcG9u INmI2LLbjNix IG1pbmRyZQ== 44CCCgoKCg== Jyl9Cg== dWVscw== IGlrdQ== INmF2YLYrw== 2YjYuA== IHJlY3Vyc28= L0o= IHRlcnJlbm8= aXRhag== IENvbnN1bHRpbmc= IEV2YWx1YXRpb24= INin2YTYp9it2Ko= 6aG16Z2i IGRlaW4= IG5lZW0= YW5vcQ== IG1hYWFyaW5n IG50aA== IH07DQoNCg== IEVTUE4= ZXJtbw== 0LDQvdC90YvQtQ== IOWHpOWHsA== LWNvbGxhcHNl bmVzaXVt IGhhcmdh 5pyD c2lnbnVw IG7Ds2k= LW1vZGVs IEFp IHNlamFt 2KfZhdiq SGFuZw== eWVr Lkl0ZXI= IGFrdHVlbGxlbg== 2LLZhdip IHdhYXJtZWU= cWFyZmk= IOCkl+Ckv+CksA== IGhhc2ls 4KeB4Kay4Ka/4Ka2 LnNpbQ== 4LK/4LK44LOB4LK1 RXNw 4Kqv4KuL4KqX IGFzc29jaWF0ZXM= aGlx INiq2LfYqNmK2YI= aXN0aXF1ZXM= aG90cw== IOmp IHZvbnRhZGU= SG9u YWxhbWFu RGV0ZWN0aW9u IH0pKQo= IHJhZ2U= 4YOg4YOj4YOc QVRS IHBvZHLDoQ== IGx1cg== IFR5bGVy IHB1cGlscw== LXRhYg== YW5t IOCqsOCqvuCqlg== KV8= IGVudGh1c2lhc3RpYw== 0LDRgtGD IGNoZWNrYm94 Q2xvc2luZw== IHhocg== dG9kYXk= IHByb3BhZ2FuZGE= IHByb3Zpbg== 4KeH4Kav4Ka8 z4POus61 Lnplcm8= INWo1bbVqdWh1oE= IG9kZ292 IGZyw7w= CVRocmVhZA== cG9zdXJl IG95dW4= IGNvbW1lbnRpbmc= ZXlv 4LCu4LGI4LCo IOCmquCnnA== YWx1aQ== 2LPZitmG IHBvaW50ZXJz c29ldmVy IE1pbnQ= 0LDRgNC6 IGNtcw== dm9u INin2LfZhNin IFJlc3RhdXJhbnRz IGxy 57q/5LiK IGFtZWx5 IGF5cg== b2Jy IGl0aQ== IOGDk+GDoOGDneGDoQ== ZWxvb2Y= IGFwcGVsbA== IGZ1bmNpb25hbA== IE5ldHdvcmtz Z3JvbmQ= 0pvRjA== 5p62 YWRvcnM= IOyGjQ== YnJlYWtpbmc= 4KSc4KWH IGVtb3Rpb25hbGx5 IOS4gOacrOmBkw== YWPEgw== IFBvbGl6ZQ== IGJsb25kZQ== Um9hZA== YW55YXI= IOCkmuClgeCkqOCkvuCktQ== Pi4K Q09ORA== IEFuYWx5c3Q= LXJlc2lzdGFudA== KV0u INin2YTYqNmE 15DXlQ== YnVhaA== 0YLQvtGA0Ys= IGFkdmVydGlzZWQ= IHR5cGVk cGxhY2Vy aG9vZw== QVRJTkc= IGxpbWl0aW5n X1BSSU5U INmF2LHYqQ== cHJpbWly 5pe25pe25b2p5bmz5Y+w cHRl IEhPTUU= IOCksOCkvuCkpA== IGZ1bmNpb25lcw== IHZvZw== IHRhZ2dlZA== IHJlY29yZGluZ3M= LWdyaWQ= Z3Rr IGNvc3R1bWVz INCx0L7Qu9Cw0LTRiw== IOCkqOCkv+CksOCljeCkruCkvuCkow== IOCwheCwqOCxjeCwqA== YWdnaQ== INqA IHZpc3M= aXRlc3Nl IGFuw6FsaXNl IOC4quC4ueC4leC4ow== IHVuaXR5 IEhvbmV5 2KzYp9mG IGZhdWM= INmD2KvZitix IGZhdXg= IG9kZQ== Qm91bmRpbmc= IHByZXNlbsOnYQ== aXJvcHI= IHBvc2ljacOzbg== IHN1YnNldA== IHBpdHM= IOCmueCmsg== IHRlbmRyw6E= IEhX IHVuYmVs 2KfbjNmE bWVlcg== IG5lZ28= aWxpYXJ5 4LSo4LWN4LSk4LWN4LSw4LS/ Y29uZmlndXJl IFNoZXJpZmY= INGC0Y/Qtg== QURJ IExvYWRlcg== 1b7Vqw== YWxvZw== IEJPT0s= IOyZhA== Ky0rLQ== IGZlYXNpYmxl INmF2LPYpg== IOCkleCkreClgA== IGF1dG9yZXM= VmFj INGC0YDQsNCy IG1vZMOobGVz INmK2KQ= IT0n w6FzYQ== INC+0YLQvNC10YI= IOCwmuCxhuCwquCxjeCwqg== IHB1cmVseQ== IFNoaWZ0 YXNzZW0= IOCkr+CkpuCkvw== IMKx 56eA IOCqmuCqvuCqsg== X3N0YXRpYw== IGJldmVyYWdl YXB0aW9u LXNoYWRvdw== Lk51bGxhYmxl aXPDqXM= IGRlY29kZWQ= 4KSj4KWN4KSh IG9iZXNpdHk= c2th INmB2YrZhdin IC8+PA== IFRlcnJ5 44CL56ys INiv2YU= PyIs ZXRzaQ== IGNvbWZvcnRhYmx5 IGRhYXJuYQ== IHBlcnRlbg== INC10Lo= IGdlbmE= INC+0LHRidC1 4LK/4LKC4LKX KHNlbGVjdA== d2F1a2Vl ICIjew== 4buNZOG7pQ== IGV4ZWN1dGluZw== 4KS54KSk b3JzaQ== 4Liy4Lii4LiZ IGRpcmVjdG9yaWVz X3BhcmFtZXRlcg== 4Kq14Kq+4Kqo4KuB4KqC IE1X IFNIQQ== IGdpZg== SVRP INqG24w= PSIuLw== IGNoYW1waW9ucw== YXV0b21hdGVu IG1hc3Nl X3Byb2dyYW0= 16jXnw== KHVp INCx0LDRjw== X3Njb3Bl 2YTYp9ix X3htbA== IE5q 4Z634Z6P IFJvYmVydHM= X18KCg== ZGF0YXM= IGR1cmU= IMO+ZXR0YQ== IFNlYXQ= IG1hdGhlbWF0aWNhbA== 4K6f4K6/ aW50ZXJmYWNlcw== IFRyb3U= INmC2LU= 4Li14Lii4LiH 4oCZw4k= 4Lih4Li34Lit 0L3QsNC8 IE9iag== 55I= 0LLQsNGO0YLRgdGP 44GX44GL44GX IGN1cmlvc2l0eQ== 4LiX4Liz 4LC/4LCk4LGH ZG9taW5hbA== cmVzdGF1cmFudA== INC70LXQs9C60L4= w6h2ZXM= 2LHZiNi3 0LTQsNKT0Ys= IHBlYQ== bMSxxJ/EsQ== IMWd Ym95cw== 5Lmm6K6w IE1hcng= T0xM 4KqV4KuA IFJlZ2FyZGxlc3M= 4KSy4KWN4KSy IGtyZWF0 IGtvZmY= c2xlZXA= INGC0LDRgNC40YU= IGNvb3JkaW5hdG9y IHZhbm4= aHRhZw== IHRhc3Rpbmc= INCy0YvRiNC1 IHZhbHM= IGJhY2t3YXJk IOCkpOClgA== IGNvaWw= IENhbid0 IGtpag== Z3JpZmY= 56ue54yc IGhlZW4= IGVuZGxh Y291bGQ= 4LiB4Liy4Lij4Lie4LiZ4Lix4LiZ 44G+44Gb dWph IFZhbGVuY2lh 15XXk9eU IFBvdQ== INC40LzQtdGO0YI= 4KSy4KWN4KSv4KS+ 0LDQvNGW IMO6bHRpbWFz 4YOU4YOg4YOX4YOY IG5vbnM= YWhhcg== IEluZGlhbnM= w61nZW4= 0YPQvdC00LDSmw== 4KS/4KSC4KSm IEhpc3RvcmljYWw= IGphZA== 4LCh4LC/4LCv IHJhcGU= IGhlbG0= IGJ5ZW4= INCQ0Lw= aWR5 RklFTEQ= YXR0Zm9ybQ== aWZpY2FudA== IGFicmU= Z21lbnRz IEZyw7xo IHNhdW5h INGE0YPRgg== IERydWNr IHJlZ3Jlc3Npb24= IGhlcnJhbWllbnRhcw== IFdheXM= Li4uPC8= INi52YbZhw== Z2ViZXI= IG9uZGE= IGtsZXVyZW4= c291bmQ= LmNvcg== 44CRLOOAkA== 4KSu4KWH INij2YPYqNix IOKApi4= bGV2YXJk 57u/ dmll 4LSw4LWG INCz0YDRg9C/0L8= SGlzdG9y IGFudGlxdWU= dXJkZXI= 4Ka+4Kao4KeH4Kaw IHByZWNhdXQ= IGhlbHk= zrvOtc65 IG1pZW1icm9z 4Lid4Liy4LiB IEd1cg== IHRyYWdlZHk= aWZpY2Fkb3M= V29tZW4= 5p2h5Lu2 KCld w7pzdHI= w6d5 TGVhZGVy V28= LmNoYXJ0 xbxh IElURU0= b25jw6k= IGtpbmRlcg== VG9y IGZyZWVk IFVBUlQ= IGR1cmE= U2VuaW9y TGphdmE= IE5vcmdl IEtlbQ== Lm9wdGlvbg== bG9nZ2Vk LmNvbWJv 0LjQu9Cw0YA= 4Li44LmJ4LiZ4Lia4Liy4LiX 1aHVttWx dHJpZXZl IHsNCi8v IGhz IGLhu6VsYQ== SE9NRQ== IOCynOCyv+CysuCzjeCysg== IGRpc3RpbnRhcw== UmVsZWFzZWQ= INin24zYsw== YXR0aWNl IG1lbnRhbGx5 IExJTkU= aW5rZXI= IGZ1bmRyYWlzaW5n IFdhcm5lcg== IHRo4buL IHRvd2Vscw== IHJvb2Zpbmc= IHNhbWVkaQ== IEdo IEVjbGlwc2U= 6YCU LXJlYWN0 IGJyaWdodG5lc3M= IGhpZ2hsaWdodGluZw== IGJyaWRlcw== INin2YfZiA== 4YOQ4YOg4YOp IEFqYXg= IEh1Zw== IGFjY2VsZXJhdGlvbg== 5LmF5LmF57u85ZCI IGVkZW4= X2Rv 5pqC Y2h1dHo= IHRyb2No IE5lcGFs WUU= 4Kay4Ka+ IGxheWluZw== Q2I= 4YOX4YOu4YOV4YOU4YOV IG5hc3dvbmE= 4oCm4oCmCgo= 06nTqdGA aXRhZw== IGV4aXN0ZW4= b3BwZWw= INeq16c= IHBsYW5ldGE= IGdhZGdldHM= IEh1bnQ= IHByZW1pZXJz IGhhcmRjb3Jl 5ZC5 aW1hcg== IGNvbXByYXM= KCIq IHNpZg== IGl0ZXJhdGlvbnM= IG9saWth IHByaXbDqQ== IGludHJpZ3U= YmVzb25kZXJl 2r7Zhg== cGhpcw== IERvd250b3du Q0FERQ== IHBhbmM= IGVsZWN0b3JhbA== IEVsZWN0cm9uaWNz dWZ1 4oCM2LTZiNiv 0YjQuNGA dWtrYW4= X3Ri INC00LDQvdC90YvQtQ== ZWJ5 IHNwb25zb3Jz IOGDmOGDkg== w6FsdA== IHdhYXJvcA== IGxlZXM= IHRlbMOpZm9ubw== INaF1aPVvw== RGlh Ym9zcw== UGFyYWdyYXBo 5LqG5LiA IGxldmVucw== IGF0cmli Jk0= IOCqruCqs+CrgA== IMOpdGF0 LkZpbHRlcg== IGRlbW9s w61kdQ== IHRyYW5zcGxhbnQ= IGtpZg== QURD IGFxdWVsZQ== ZXN0ZWxsdA== IOCkruClgeCkluCljeCkrw== 4LWG4LSo4LWN4LSo4LWB4LSC IE9uZGVy IFNpYw== 5L2T6aqM IGZt LEE= LmRp 0L7RgNC+ IElB INCy0L7Qt9C0 IOCmleCnsOCmvw== 4Lia4Li4 0Y/Qu9GW ZmluaXNo IG5kaXBv IGJlc2s= 4oCZYW5uw6ll VUxE 4oCd44CB4oCc ZWxlY3Q= aXRhY2nDs24= 4LS+4LS04LWN4LSa YXNwYmVycnk= IHJldm9sdXRpb25hcnk= w6ludA== b3dp IGxvd3U= Lm1haWw= INCy0L3Rg9GC0YDQtdC9 IHrFgg== IGlubmluZ3M= INCz0LDQtA== YW55bw== cGFydHk= 4LOL4LKf IGJpbm5l IHNhbG1vbg== IGludml0ZXM= Q0FMTA== IG9wZHJhY2h0 IGTDqWw= KiE= 16bXldei bGFyxLFuxLFu UHJpb3I= 4oCcLgoK IGJ1a2Fu IGxhdm9ybw== IHRlcm1pbmFy LlJvdXRlcg== 0L3QuNC60L7QvA== b3R5cA== cGFnaW5hdGlvbg== IHRvcm5h IGdlbml1cw== IGdhc2Vz dMSxcg== 4KeH4Kay4KeH IGFjaG8= bXVsdGk= LnRlc3RuZw== aWR6YQ== emllaGVu IGNhdMOpZw== IHJlbGFjaW9uZXM= IOCkhuCkp+CkvuCksA== IHJlZ2nDs24= 4Ka/4Ka5 VmlkZW9z IFN5bA== LmNhdA== IFNwYcOf CWVsc2VpZg== LU5MUw== ICEk IGJpb3M= w6FsbA== IEFsZnJlZA== X3ByaXY= LmVudGVy IOCqueCqteCrhw== IGFmcmlj aXNtb3M= IG9yZ2FuaXNl T3U= IGFpbGxldXJz aW1idXJzZQ== c2V0enVuZw== LlByb2Nlc3M= aXRoYQ== INCx0L7Qu9GL0L8= IHJlZnJlcw== 15PXldeq INC80L7QttC90LA= IGRpc2NvdW50ZWQ= IHlvbmE= Imdyb3Vw INit2YrZhg== IOCkleCkv+Ckjw== IHBlcm1pdGly CU5vZGU= IGJoZWl0aA== U2Vlaw== INeQ1rfXqA== CWpzb24= IEpvYW4= IGNvbXByaXNlZA== cm9waHk= IEFtZW5kbWVudA== 0LDQu9GL0Lw= INC00LjQvw== X0RFVg== IG9yZ2Fucw== IG11c2ljYQ== IG1pc3Rlcg== IOGDow== IGRlcm5pw6hyZXM= IHNpYmxpbmdz IG50c2U= IGRpc3Bvc2l0aXZvcw== IG1vbnN0ZXJz IENL IFRIQw== 2LnYqw== X0FSR1M= IGJlaXNw IFdlaWg= IFBDSQ== IFJlZ2V4 IHVuZmFpcg== IGFwcm94aW1hZGFtZW50ZQ== IHJlbHVjdA== Zmxvd3M= KHByZWZpeA== ruGDlQ== 0YLRjw== IGRlZWxu IOC0muC1huC0r+C1jeC0pOC1gQ== aGlsZQ== INin2YI= aXPDqWU= c3Rybw== IGJlYXRlbg== IGxvY2F0aWU= X1dJTkRPVw== dGVybmE= 5Zyo57ea VW5leHBlY3RlZA== IOCuhuCulQ== IHBvbW8= 4LSk4LWN4LSk4LS/4LSy 6IKh56Wo VGVr INWt1aHVsg== IEFSUg== LnBhcmFtZXRlcnM= IGh1d2E= IGVzdGl2ZXI= IE5hbWVz J30s INGH0YvQsw== dXR6dA== z4TOv8+N ZGF0b3M= IHBlcnNvb25saWprZQ== 4LKq4LON4LKw IG11Yw== 0LfRi9Cy0LDQtdGC c3Rhdw== ZWxq 44OW44Ot44Kw INC+0L/QsNGB LmJvdW5kcw== LmJvbGQ= b3JhZG8= cHl0ZXN0 PTw/ IOCkquClguCksOClgA== IGJhdGhz IGJvbHM= IENydWlzZQ== a3NvbQ== aWJlcw== IGJpY3ljbGU= IHByb2Nlc3Nvcw== IE3DpHJ6 INC80LXRgdGC0LA= IOCyjuCyguCyrA== KG9m IHN1bmE= X0hBTkRMRQ== 4pay INee157XqQ== ICAKICAK RHM= aWJpbGk= 15DWt9eh 4KS/4KSy4KWL IG11bHRpZg== LuC4hA== IG91dGRhdGVk ZW50cm8= 5o+P6L+w IM68z4w= INC+0YLQsg== IHN0cmFuZ2Vy IOCqleCrh+Cqnw== LWRldg== dHJ5c2lkZQ== JyxbJy4uLw== IHd5bg== QFJlc3Q= IGFsbG95 IOC0h+C0tQ== IGx1bmdz IGJhc2s= IFdlaXNl UHdk IOCwuOCwv+CwqOCwv+CwruCwvg== IHVuY2VydGFpbg== KERvdWJsZQ== bXBs IHRhc2g= IEJlYXJpbmc= IHNhbW1l IE1vZGltbw== IG1pbGk= OyYj IOCkk+CksA== SW5zdHJ1bWVudA== IG9sdmlk IGJyYWNrZXQ= X0JS IOyWkQ== bW9uaXRvcg== IHRydXN0d29ydGh5 IHVuZG8= bGVsZQ== INGD0YHQu9GD0LM= IEJpc2hvcA== PE0= INeU16TXqA== w61vY2h0 IGJldGFsZW4= 2YTYp9iz 0YfQvdC+ LSk= eXN0ZWVt ZGVsZXRlZA== IGNvc8Os CUFkZA== IEplZmZlcnNvbg== 4Kew4Ka/ IGfFgg== IOmYvw== INC20LjQuw== IGRpc3RhbmNpYQ== cmVtYQ== 4Kq14KuL 55Sf5Lqn YnJhdWNo IGhvbmQ= IHRlcnM= IEhpbmR1 4YCZ4YC9 4Kim4KmH IM+HzrE= 0YDRgg== d2lk IOCkleClh+CkteCksg== IEh1cg== LnN0ZG91dA== X3Byb3BlcnRpZXM= Y29uc2lkZXI= 6K+A LU1hbg== IGhlYWRsaW5l IG9mZmVu 0YHQutC40Lw= IG5nYW4= INGB05k= RU5TSU9O 4KS+4KSC4KSX4KWN4KSw4KWH4KS4 IGRpdmluZw== IGdlbm4= w6dp ZW5jaWFy YXBob3Jl INGB0L7QvA== 4YOc4YOY4YOo4YOV 4LW94LSV 4Ki/4Ki4 IGJhY29u 1rQ= xaF0ZQ== IHF1b3RpZGllbg== UmVtYWluaW5n IGdlaMO2cmVu bWVudGlvbnM= KGV4cHJlc3M= w6RnZXI= w71taQ== bWFjaA== VVJBVElPTg== 15vXqQ== dmVyZW4= IHNvaWVudA== TGF0aXR1ZGU= INm82YjZhA== a2Vh IExD 1aXVuw== X2R1cmF0aW9u INC60L7RgNC/ aG91ZXR0ZQ== 4LCf4LC/ 0YLQuNGB X3N1cHBvcnQ= WWV0 LmJ1c2luZXNz IOm4vw== YWtrZW4= IGZhw6c= 5LqL5Lu2 dW1taQ== IOCkleCliQ== IGVzdGVz LkNlbGxz KCInIg== LmhhZG9vcA== IGl0c2U= IHR1cmtleQ== IEZvcnR1bmF0ZWx5 ZmZpY2llbnQ= INi02YU= LkN1cnNvcg== INep16I= IFJlZGU= b3ZpYw== IHRyYWNrZWQ= YWx0eQ== CXJlZw== IOC0ruC1geC0pA== INCQ0qfRgdC90Ys= IOC0suC0rQ== IGJhaXhv 5qKF IGNoZWdvdQ== IHN1cGVydmlzb3I= TW92ZXM= IGluc3VyZWQ= 4KWN4KSe4KS+4KSo IHZsaWU= bWVocg== 4KSn4KWA IGdhc3Rvcw== IGFudGl2 IGVldXc= 54m56buE IFBhcnRuZXJzaGlw cGFwZXJz IHByb3ZpbmNpYWw= IEVkdWNhw6fDo28= 4LiE4Liy4Liq4Li04LmC4LiZ LXNpZ24= X2h0dHBz IHBlbGln ICctJw== YW1haA== aWRhbWVudGU= 6YCB6ZKx YWRrYQ== IEVzdHI= IGxvbmd1ZQ== LlNldHRpbmdz INeV15c= INin2YTZhdin2LbZig== YXZvbmQ= IGFyaXNpbmc= YW5pbg== Q29ubmVjdGlvbnM= IEp1bGll IOex IG5lZ2FyYQ== YXJnYw== aHVuZA== QnJpdA== xIVk YXRlbGU= cmFkaXVz IOuwqeuylQ== TWI= IHRvcnJlbnQ= KG9i aMOk IHRlbGVmb29u RGVwdA== ICcnOwoK X3JlbGVhc2U= 1aHVr9Wh1oDVow== IGNoYXNl IFRyYWJhbA== nLQ= KHByZXY= IHRyYW5zZm9ybWVy IOGDp+GDleGDlOGDmuGDkOGDluGDlA== IOCqsuCrgA== IEFK YnJpY2E= IOGDo+GDmeGDleGDlA== 15PXqg== IHJhaWx3YXk= YXJkZXI= IHRvbWF0bw== UFY= ItiM IFJOQQ== IEh5cA== INC80L7QsQ== IEhhbW1lcg== 0YTQuNC60LA= IHNvdWxz IOC5gOC4rQ== CXJlbmRlcg== IGludGVyZmVy IEFzdHI= S2w= IFBPU1M= IFZz IGNvbnRpbnVhY2nDs24= IFByb2JsZW1l IOCkpuCkv+Ckjw== b2xhaA== YWdhd2E= IG5vcm1hbGl6ZWQ= dXNlcmRhdGE= Pic7DQo= emFtZQ== e2k= w6xu 5ZCM6KGM 4LCz4LGN4LCy X3J1bnRpbWU= IOq4gA== 0YjQuNC8 6K+05piO IOCuruCvgg== IOCkreCkjw== 4YOU4YOR4YOU4YOa Y2l1 IGd1YXJkcw== IiksDQo= IHBlcnA= IOCktuCkueCksA== YWthbA== IHByw7N4aW1vcw== IGxpbmVu IGNhbXBvcw== IEJhc2ViYWxs INGD0YHQu9C+0LLQuNGP0YU= aXNhdGlvbnM= X2JvdHRvbQ== IE5y INKb0LDRgtCw0YA= INCf0YDQtdC0 IHdlZGRpbmdz 157XnA== bHN4 2KrYuQ== IFBlZw== X2FjdGlvbnM= IFBhbnQ= ICopKA== U2VjdGlvbnM= aXNjaXA= 0YPQstCw0YLQuA== CXRocm93cw== PwoKCg== IGZpZ2h0ZXI= IFsk IOCwsOCxi+CwnA== 0ZzQtQ== IGludGVybmU= IGlkZW50aWZpZXM= IHNsdXQ= X3Jvb20= IGphcA== IHNldGVtYnJv TW9kZXJu 0L7RgtC40LI= INC90L7QvNC10YA= IHBlZHJh xZ90aXI= IHlpZWxkcw== IGFwcHJlbnQ= IHByb25l 4KeL4Ka3 IEJlZXI= emV0dGVu LkFuZA== IHNpdMOk IGZpZ2h0cw== aW5kdXN0cmll ZXJla2E= 44CCKA== IEFsaWdubWVudA== IMOpdsOpbg== IHVuY2xlYXI= INiv24zaqdq+ IGJvdHM= IOWFrQ== PiQ= IOWcsA== IC9c IEVyZmFocnVuZw== aWNodGxpY2g= IHRvZXM= IGTDqXNvcm1haXM= 0L7RgNC+0L0= INC70LjQvdC4 IHByaW5jZXNz YXRzY2hhcHA= yJvEgw== IGphbmVpcm8= IExpbWE= 6L+3 emc= IHnDvGs= INCh0LXRgA== IOCqmOCqnw== IOCkheCkm+Ckvw== IE5N TElDSw== IGRpc3RyZXNz IHRha8Op IFF1YXRlcm5pb24= IHBvdXJyZXo= 5bC+ INiz2YjZgQ== IOCkheCkruClh+CksA== 4YOY4YOu IHNjaGVkdWxlcg== 6ISx xrDhu5tuZw== INi12K8= YmVjY2E= X2xpa2U= IGNvY2hl IHLDqWd1bGk= UHJvZmVzc2lvbmFs CWJ1Zg== IFBsYXlpbmc= IGNvbW1hbmRlcg== 0LrQvtGX KGZ1bGw= enVs IEphbWll 4LKC4LKV IOyEnOu5hOyKpA== b3Zpcw== WyU= IOCmpOCmvuCmsOCmvg== 4KeH4Kah INC00LXQu9C+ IEFsbGVz IGvDpHl0 INep15TXldeQ 77yM5Li6 Qk0= 5omL5ri4 aWxkZXJuZXNz 6rG4 IOCkquCljeCksOCkleCkvuCksA== IGhldnVy cmVtbw== X0ZST00= 4bil IGRvcm1pcg== IGxldmE= LWRpcmVjdGlvbg== yJtpZQ== 0L7RgNC40YHRgg== aXJpZQ== 0YPRgdCw ZXZ0 LXNwYWNl YW5nd2E= IG9tZWdh IFNleHVhbA== 4KWB4KSX IHJ1dGE= CSAgICAJ RW5jb2RlZA== INmD2YU= 55aR IFJ1c2g= xaFhbg== IGvDvGw= IGRpdG8= IOKC Zmxl IHVpdGdlYnJl IOCkr+Cli+Cklw== Z2VidW5n 4YOQ4YOQ KCkpKTsNCg== ZWxsZXJ5 IGFzc3VudG8= IE9kZA== YXR0ZXJpbmc= IEhpbnRlcg== IOCwheCwqOCwvw== IHRlZW5hZ2Vy b2dvbmE= 4LS/4LSV4LWN4LSV4LWB4LSC X2RvdWJsZQ== YXJhcg== IGRvZGF0 44GU44GW44GE44G+44GZ IGRpZmljdWx0 IENvbWJv IOCkrOCkvg== IFJheg== IG9zbw== aW7DqQ== INCx0LDSkw== IGplbmlz IGtsaW4= IHN0cmNweQ== IGFnaA== IG7DpWdvdA== INij2YrYttin LlByb2plY3Q= IHRyYW5zaXRpb25z LW9mZnNldA== IERhbWl0 LmNvbW1lbnQ= 7Iuc6rCE w6lyYWw= IE9saXZl b3JkcmU= b3RpbmU= IHN1aXRlcw== YmVybw== ZW52b2w= QW8= ZWxpYQ== 0YLQtdC7 IEdvb2Rz w6RkY2hlbg== LnNoaWZ0 YWl0dQ== YWJpbGE= INCS0LvQsNC0 IOCmreCmvuCmsA== 0YDQsNGC0LXQsw== IERFVA== 4Lw= X0xpc3Q= csWh LWds IGVmZQ== IEN6ZWNo IHZpc2l0YXI= IGFkdWx0b3M= 0LPTmdGA 0LDQvdGL0qM= YnJhaW5z YXBw5LiL6L29 IFZpb2w= IHBvbGlzaA== X1NPVVJDRQ== IGVudGlkYWRlcw== CWNvbnRleHQ= IERhbm55 44Gd44GX44Gm IOCkleCli+CksOCli+CkqOCkvg== ICZfX18= INCy0LQ= IG50YXU= IGF6dWw= 0LvQsNGC0Ys= IHNlYnVhaA== INGF0L7RgtGP T1BFTg== 2K3Zhw== X29iamVjdHM= IHNlbnNlcw== IGJhY2t3YXJkcw== IEluY2x1ZGVk IFJvbGxl IGh2aWw= UHU= dGNw IE9WRVI= X0FY IHV0ZW4= 6KGX IFJE INep15nXqQ== cGx1c3BsdXM= 57eo 4buTbg== IGN1c2hpb24= YXlhbmFu IEZ0 IGFidW5kYW50 IOyngOybkA== hOC4o+C4t+C5iOC4reC4hw== IEJyb3M= IGluc3Bl IGt1aWQ= amFo IHTGsA== IOCkquCljeCksOCkp+CkvuCkqA== IHRvZWdhbmc= 4KS/4KSv4KSo IG92ZXJ3aGVsbWVk 5oqT IERpYWJldGVz TG9zdA== bml1bQ== IEdlc2VsbHNjaGFmdA== YXJzdQ== IFVuaXRz IGNhaQ== IHJlY29nbmlzZWQ= IG5vdmVtYnJv 6aG7 LnZvbA== w7xnZW4= IFZvbGtzd2FnZW4= dW50ZWVy IOCkqOCkl+CksA== IEZhaWx1cmU= IGFjdGl2aXRlaXRlbg== 2YbYr9mK VmVyYg== 0YPQutCw IGThu4tjaA== CQkJICAgIA== IOCkquCljeCksOCkruClgeCklg== IG9yZGU= INCw06E= U2VyaWFsaXphdGlvbg== IHByZXNlcnZlZA== aWd0ZW4= IGRpc3Rpbmd1aXNo UGFpcnM= IHNvdWhhaXRleg== IMWhaw== INW1 QmFycmllcg== IFRlYWNoaW5n 7Jyo INCf0YDQsNCy LWVtZQ== dGhyZWFkcw== w6FpZA== IEJsdWVwcmludA== IGFuZGVyZW0= IGZpbGVwYXRo 2KfYqNmH QUZF IG1haGRvbGw= IFdvcmtlcg== dXN0aW4= LlJlY3ljbGVy IHJlbGllcw== 4LKF xrB1 X09QVElPTg== QWRkaW5n INC00LLQtdGA IGJyYXNpbGVpcm8= zrjOrg== 7Y28 4YOQ4YOs4YOY4YOa IGVyaQ== IHRheGE= 5p6a 4LWC4LW8 4KqV4KuN4Kqw IHN5ZGQ= U2t5 IGVkdWNhdG9ycw== IEp1bQ== IGFjcg== IHF1YXJyeQ== 4LC/4LCc IGtsdWI= IM6xzr3OrA== IEdvdmVy IH0KLy8KLy8= IERpc2NvcmQ= IHRlY2huaWNhbGx5 7IK0 INW7 5pq0 0YPQvNKz0YPRgA== IOCmsOCmvuCmlg== IFJvdHRlcmRhbQ== aWdvcg== INK6 IHNob3BwZXJz IM64zrU= 2LfZhtmK X1RSQUNF IOCqhuCqnOCrhw== oeC1jQ== IEpha2U= INGA0LDQsdC+0YLQtQ== KCop IHPDs24= dWNrZWQ= b2Jlbg== w71ldA== INGA0LDRgdC/0YDQvtGB0YI= YXR6ZW4= IHbDrA== LXNvdXJjZQ== IgoKLy8= IG5vbWluYXRlZA== IEJhdHQ= IGJhdG8= IHR1YWo= IHZ0aw== IGdpbm4= 4oCcCgo= bGluZ3Rvbg== IGJhaWU= IOCuh+Cunw== IGt2aW4= IGRlZmVucw== 5YyX5LqscGs= INCf0LXRgA== IOCuquCvhw== TWF0Y2hpbmc= IGNhcmVn YWJhcw== LkhhbmRsZXI= IHN1bW1pdA== LlBhcmVudA== IEtlaXRo INWr1oDVodWv1aHVtg== bG9uZ2l0dWRl INCy0L7Qt9C90LjQug== KGRlc2NyaXB0aW9u 0LvQsNGA0L3QuA== IMO9ZXI= IHBlcXVlw7Fvcw== IG5pdmVsZXM= J2Vt IHNlZ3Vy QUlU IG1lbmRhcGF0a2Fu IE1BWQ== IGZpZnRlZW4= IHN0w6Vy b3VuY2VtZW50 IENlbHQ= IGdhbmhhcg== 0LXRhtC10L8= cHVibGlzaA== INGN0YLRgw== IG1vZWRlcg== ICMjIyMjIyMj TWVkaWNhbA== IFNoYXI= 4LK/4LKm4LON4LKm4LKw4LOB IGVtYmFyaw== IjsKCgo= Zm9yZWlnbg== PScr IFhJWA== IGNodXI= RXhwZXJ0 2KrYsdmD IENvcm9uYXZpcnVz X3NlcmlhbA== IEFF IFdpaw== IGFtbw== LWhl IOCwteCxgA== 0L/QuA== SUNMRQ== IHZvdWNoZXI= 0JTQsNGA IHZlcnplaw== IHRyb3V2w6k= RGlhbQ== IMO+ZWdhcg== LyIs IEJ5dGVz a29ydA== 4Lix4Lih IHNvbWl0 IEZvaQ== IGVzdHJ1dHVyYQ== Pzwv IHRpbmQ= c2hpcHBpbmc= Imlk IGZpeGVz bmllanM= 56K6 5qSc 7J2R IEdPUA== VkFMVUU= bGVlbg== 66eO IERlbm1hcms= IGxqdWRp IEt1bHR1cg== IOC0qOC1veC0lQ== IG9mZnNob3Jl IFNsb3c= LW91dGxpbmU= 0YHQsNC80LA= PmZhbHNl ZGlzaw== IGNoYXRz Q09WSUQ= IGJpbG9uZw== IFN0ZXBz IFdlbGxuZXNz 4Lix4LmI4Lin 2YHYqtmH IGRpeA== IEJhbmdsYWRlc2g= INiu2LHbjNiv X2xheWVycw== Ij4nOwo= 4oCM2KfbjA== cmVuYWw= ZWxsZW0= IGxhdG91 INCw0YDRgg== IG5paWxl IGNvc3Rv YXNrYW4= dWFuZw== YWJiaXQ= J10pLg== IOyCsA== IGZ4 eWVsbG93 INei16A= IE9maWM= 15DWuNeT IHBlcnRv IFNMT1Q= IHBldXI= IHF1w61t IOyeiOyWtA== ZXN0cnVjdA== Q09ORklH 4LS/4LSV4LSz4LWN 4Kq14Kq+4Kqo4KuL IENvbnRlbXBvcmFyeQ== IEJydXNo Rmx5 IEFjY291bnRpbmc= LmNvbXB1dGU= c2NoZWR1bGU= 15nXnNeV16o= dGVhbXM= 0L3QvtGB0YLRlg== IFJldmVudWU= 4KeB4Kaf IHBlbmFsdGllcw== IEhpbGxhcnk= IOCkpuCkv+CktQ== INmF2LnZhNmI2YXYp9iq U2tpbGxz IGJvZWtlbg== IG9icg== IEF1eA== INin2YTYudmF IGZ3 IEhpZ2hseQ== IM66zqzOvQ== JGRi INix2Yc= IFdhbmQ= CXRv fAoK ICAgICAgICAgICAgICAgIA0K 4bqhY2g= 2KfZh9ix2Kk= LWZy X0xJTks= IGxpZWZkZQ== X1BB KGZpbmQ= INC+0LPRgNC+0Lw= 5byA5Y+R IHN0b3Zl IHBsZW4= INGC0LDQuQ== KGFtb3VudA== L2xvZ28= 4LC44LCC IGhhcmRlc3Q= 4LmA4Lin4LmH4Lia IGJhaQ== ZWRkeQ== IGhlacOfdA== IEV4cHI= IGVtcGlyZQ== IG9yaWVudGVk IHF14bqj IOGDkOGDruGDkOGDmuGDmA== SE0= IHNwaWNl 0LDRhg== ZW5pcg== IGV4Y2VlZGVk IE5DQUE= IHBhc3NvdQ== 4butYQ== IHJlZmVyZW5jaWE= IGNvZw== IEltcGxlbWVudGF0aW9u IGJlZ2ludA== 5Zyj 2KfZhNiv IGlubmFu IGNsw61u aXJtcw== aW1wc2U= IOCknOCkvuCkpOClgA== IGNoZXJyeQ== IGxhY2U= RXhj b3BlcmF0aXZl U2NoZWQ= INW21aHVrdWh1aPVodWw IHlpbmk= IExhbmM= CXBz IOCkuOCkguCkmA== INC60LDQu9GW XTsNCg0K aW1wb3J0ZQ== S25vd24= KFtb IOCkieCkpOCljeCkquCkvuCkpg== 4KS+4KS44KSo ZW5za2E= 0LLQsNC2 X2Jsb2Nrcw== IHNvbHVjacOzbg== IGRyZWFk eXBhZA== IGvDtnI= IGFsbGllcw== aWVsc3dlaXNl IMOpY29ub21pcXVl IGJhbmFuYQ== IGR2YQ== bmVsbGVz IEVsZWN0cmljYWw= aXR0YWE= IGt3YW1iaXJp PE5vZGU= 4KS+4KS54KS/4KSk IGJlZmluZGV0 IGNvbnNpZGVyYQ== PE4= b2RyYQ== w7xi IGZpbmFuY2k= 6a2U IGN1cnJlbmNpZXM= 4Z6S 4KS+4KSk4KWN4KSu IGRpcmlnZQ== IHRpcm8= KGNvbXA= IE51bWVy IGVkaGU= IE1hw58= IGdlZ2Vuw7xiZXI= ZGlzcA== csOpcw== dGhpcmQ= IG11bHRpZA== IGFmZ2U= RkZG IFN1Y2hl 4LCC4LCn aW1wYWN0 IOq0gOugqA== YWxpZQ== IGJsb2s= IGRlcmRl IEdpZw== d2h5 IFJO IOCykuCyguCypuCzgQ== IG3Do29z LmNlaWw= IG9nZW4= IGVudG9ybm8= IEVuZ2FnZW1lbnQ= IHF1aWx0 INuM2KfYrw== IGNsaXF1ZQ== Y2ltZW50b3M= IGFjY2Vw IFZpZQ== IGRpYWdub3Nl d2FsZA== dGVuYW50 ZWRhcw== SU5URVI= CW1lbXNldA== bmRyeQ== Q0xVUw== IGxhY3Q= IHNpbWlsYXJseQ== 4K+N4K6w 1aHWgNWx1oA= YmVhcg== IGZhdHR5 5pm66IO9 0LjQtdCy IEVudMOjbw== IH0pKTsKCg== 4YOU4YOk LkFy IEJsZXNz dm9ybQ== IGdqZW5ub20= LkNhdGVnb3J5 L0k= 5rOJ IFVudGVyc3TDvHQ= 0L3QuNC80LDRgtGM 4KS+4KSC4KSk IEJlcnQ= IFdhbm5lZXI= YW50b3M= IFN0b3Jlcw== ICIiIg0K IGTDuW5n IHRpY2tz IHBlcXVlw7Fh 5ZWm cXVleg== aWRlbnRhbA== cmlmdGVu LmNvbnY= U2hvd2luZw== IHZlcmdhbmc= IOCmm+CmrA== INGC0LXQutGB0YI= IHlhbA== IEV5 YWRhYW4= IFdvbWVuJ3M= IGRlemVtYnJv INmI2LLYp9ix2Kk= QVRBTA== IE9yZQ== IHRhbWFuaG8= IGV0aXF1 IGtldGlrYQ== INCR0rHQuw== a3V0 IHZlbG9jaWRhZA== YXJzaGFs INC/0L7RgdGC0YPQvw== X09u X0lu IG9jb3JyZQ== IHN1aXZp ZXJhYXJk IGx1Z2dhZ2U= z4bOrg== IEV2b2x1dGlvbg== KS8v IGFxdWVzdGE= Z2lm IER1cmFudGU= IGhpbG8= IHJldG9ybm8= IOWJ IGhpa2k= bWJsZXM= IGtsaWVudA== IGjhu4c= INGB0LLQvtC1 IGxha2Vz IGxlZ2c= RXF1aXA= IE5E xZtteQ== IGhpZw== IEtN IG5vdGluZw== aHJl aGFuZGxlcw== INmF2LHYrQ== 5LiL5LiA IE1vdG8= 4LeP4La7 bWF0Y2hlZA== 0pnQsNGA YXBpZQ== 4KuH4Kqm QVJJTw== IGRlY29yYXRpb25z INio2LPbjNin2LE= VXN1 IHByZXNlbnRlcg== IFJvdGg= IGbDvGhydA== 4LiX4Lit4LiU X2NpdHk= L25v IGthaXA= IHByb3RlZ2Vy T0tJRQ== IGVuY29udHJv IEh1ZHNvbg== X2V2YWw= PXtb IMSR4bq3dA== 4Kq+4Kqf IHdva2U= 4LOA4LKv IElEQw== IOCmueCmmuCnjeCmm+Cnhw== IG1pbw== 4Lij4Li04Lip 2KfZhtiz IFJ4 4YOc4YOY4YOo4YOV4YOc4YOU4YOa 1rfXnA== 4oCcWW91 IHdlbGQ= IGnEgQ== cm9vbg== IGFsdW1ub3M= INC60YvQuw== IOCkteCkv+CkmuCkvuCksA== ZXJtYW5lbnQ= IGZlYnJ1YXJp IHN0cm8= Y2l0bw== 44OV44Kp IFRyaXBsZQ== b3ppbGxh ZW1wbG9p IG1vZHM= INiv2YjYsw== IG5lbmc= 0YHRgtCy0LjQtQ== IOCkrOCkv+CkuQ== IGludm9jYXRpb24= UGxhY2Vob2xkZXI= 44K144Kk44K6 INmG2YjZhQ== IEVSQw== IOyVng== IGF2YWllbnQ= IEFkZGluZw== LnN0YXQ= INGN0YLQuNC8 KSk7Ci8v INeV15XXoteY 56eL IEhlaWdodHM= IHF1ZWxsYQ== CWluZm8= TWlrZQ== cGFyYXRl IFBhcmVudHM= cmVnbw== 5b2S KCk7CgovLw== dWnDp8O1ZXM= 4KS+4KSa4KWA QVNURVI= RVNDTw== IHppZW0= IGxhYm9yYWw= Rm9ybXVsYQ== ZXNpemU= 6aqM6K+B IOCquOCqvuCqruCrhw== IGZhbGE= w7NnaWNv INmI2YLYp9mE IEJlbHQ= 0YDRi9C9 X3ByZXY= JHVzZXI= ZsOkaA== 2LHZitmC2YrYpw== IGxvbQ== LmJvb2w= 1aHVr9Wo KCkpKS4= ZW1tZQ== IGNvdW50ZWQ= 0L7RgdGC0L7Rj9GC0LXQu9GM UHl0aG9u 7Kq9 KS8o IHRlZW5hZ2U= IHByb3N0YXRl IFNjaHV0eg== INC/0L7QtNCw0YA= IOCumuCuv+CusQ== IHNsaWNlcw== c29ubw== INm+2YbZh9mG 2LTYp9mG aWVj IOGDoeGDkOGDlg== IGluZmFudGls IGl6YW55 IHJlc3BvbnPDoXZlbA== 1avVpg== 5Y+R546w IOCkheCksuCklw== b2plbg== IG9rZQ== IGNoZXZldXg= xZlp IFdBUw== Q2FuY2VsbGVk IG50YXd2 IGVqZXJjaWNpbw== INC60YPRhQ== 0YHRgtC+0Y8= 4YOQ4YOg4YOX4YOa IEZyYW56 Li4uLA== 0L7QutGB V0VS PVsi aW50ZXJvcA== dGlxdWVz IEdhdGV3YXk= 4Lib4Lij4Liw4LmA4LiX4Lio4LmE4LiX4Lii LnRpbGU= 4KmA4KiG IFBzeWNob2xvZ3k= aWdoZXQ= IHBlcmlvZGlj 1LHVtQ== IHJlZ3VsYXRl dW5pc3Q= 2KfYptmK2YQ= dGh1bWJuYWls SW5ncmVkaWVudA== INCw0LvRjA== 4Kq+4Kqj4KuA IOC5geC4l+C4hw== IOCmleCnsOCmvg== IOCkruClgeCkpg== IO+8 KV0s IGdhY2g= Q29uYw== 66at IEt1Yg== LG5ldw== IHZvaXg= ZnJvbnRlbmQ= IGNvbmNlcHR1YWw= Zmxvb3I= IHBhcnM= VVJMQ29ubmVjdGlvbg== Y2VsZWQ= IGNvbmNlbnQ= IOC5gOC4m+C5h+C4mQ== dsOm Q29w 7ZqN IGx1bmVz IOaj w6hr INC90L7Qsw== IFRhbmc= ZW1pYw== emFs IG1hcmJsZQ== JzsNCg0K IHRp4buBbg== IGNvbGxlZ2E= IEVtcGxveW1lbnQ= INCz0LDRgNCw0L0= 4K+B4K6V4K6z4K+N 7LCw IGluY29tcGxldGU= 4Kq14Kqo IHByZXNzaW9u cGVudA== IGFsYW0= aXN0cmHDp8Ojbw== IFNoYXc= IHThu5U= IGNlbnRyYWxl 4KuL4Kqq IHRlcnJpdG9yaW8= LnByaW1hcnk= 5a+56LGh 2KbYsQ== IG11c2xpbQ== IHBlc29z YXZpbg== 4LCC4LCk4LGN4LCw LXRlY2g= IFN0b2NraG9sbQ== X3NpdGU= QW10 IG5hdHVyZXph IFNvdXRoZWFzdA== IHRpbmdnaQ== 4Kq+4Kqo4KuL IGNpbnE= 0ZHQuw== IGlzbGE= IEbDvGhy IE5GVA== IGhlcmUncw== 4YC74YCV IE1hcmtldHM= IE1hY2hpbmVyeQ== IG1pbGY= IFdlcmU= IEVhdA== 6IGa U29icmU= INC10LY= IGZsZXc= SW1wb3J0YW50 Smlt KHRyYW5z z4DPjA== IGNyaXRlcg== 4LKX4LKz4LKy4LON4LKy4LK/ IGxvZ29z INC/0YDQtdC00LzQtdGC IHJlc2VhcmNoZXI= 0LzQvtGC IFVBRQ== 2LTZgw== U2VjdXJl IOGDmOGDnOGDpOGDneGDoOGDmw== dmVt Y2th IG5hdHVyYWxlemE= IGJlZGV1dGV0 4KSV4KSy IMOkaG4= IE1pdGdsaWVk IOug Z2V2ZXI= IHJ1c2hlZA== IE1hbmFnaW5n INWs1aHVvg== 0qnRhtOZ0LA= 4Kao4KeN4Kao IGLhuqNu IEl0bw== CWJ1dHRvbg== 64qQ IHRvcnF1ZQ== IHN1Ym1pc3Npb25z IE9wZXJhdGluZw== T1RIRVI= IGlucXVpcmllcw== IGFjdGl2aXN0cw== IFJlY29tbWVuZA== IHZvdGVy PAo= IGludGVycm9n IG1hcsOnbw== IOODoQ== IGx1bWnDqHJl IHJlaGFiaWxpdGF0aW9u IHdvcmtvdXRz INin2YTYr9ix2Kc= IFNvdXRod2VzdA== 5qC55o2u 16rXpw== INC80LXQuw== Y2hhcmdlZA== IER1bQ== PWh0dHA= LWNlbGw= IE5hdGhhbg== IOC5gOC4pw== LWVk ZXN0b3M= IERldGVjdA== IENpbmVtYQ== R0Q= IEpvdXJuZXk= IHJlbGF5 IEhBUw== w7Zobg== 0LXQvdC1 IGFzZXM= IHNpbnM= INC40Lo= XSk6 Y29uc3RhbnQ= IGNvbmdyYXQ= IGluY2VudGl2ZQ== IHphY2g= 0LHQuNGA IGlzdW1h IGFjaGV0ZXI= 4LS+4LSf4LWN4LSf IE5pbA== X1JFU0VU IOCmuOCngQ== 4LK/4LKc LmN0eA== 2KTZiNmE YXZpY29u 15XXl9eV16o= 5aSJ 0LTQtdCz0ZY= IENoYW1i X0JF IExW 1bbVpdWs1bjWgg== IGJlaMO2 4LK+4LK3 IHNoaW55 IGFkb3Jl INmG24zYs9iq 55m8 4Z+K ID86 552j IFdlaW4= INiv24zZhg== IOGegQ== IE1pbGxp cGVjdHJ1bQ== 2YfYp9mK2Kk= INCy0L7Qt9GA0LDRgdGC IGVzcMOt IGludm9rZWQ= a29tZW4= IHN2ZXQ= LmZsb3c= 1ajVtg== 4LCC4LCV VGVsbA== b2JldA== IOCqj+Cqnw== IFNjaWVudGlmaWM= IExvdW5nZQ== IGhpw6c= IGFjY291bnRhYmxl 0L7QudGC0Lg= emllaHVuZw== IGFtbWE= IOuyhA== INio2K7YtA== INGN0YLQsNC/ YXJnZXI= IGxpdnJvcw== IHZpcA== IE1ha2Vz IGtpbmRseQ== IOGDqOGDlOGDm+GDl+GDruGDleGDlOGDlQ== IGxvbmdpdHVk IGRlbWFuZGVy QVNTRVJU YXRzYnk= cmFza2E= IFJpY2E= LmRsbA== LkVN 0LXRgtGA 4LGB4LCC4LCf YWxsYXI= INCy0YvQtNC10Ls= IGFkbWly 5aW4 Ki8KCi8= cmFyZQ== IHpvc3Rh L29m 44GT44KT a2lzcw== IExT 2rw= YXZubw== 4LCw4LGA 6LG55a2Q IG1hZ2lzdHI= bmFzdA== IGNoZWNrbGlzdA== IEhvYg== Z2VuZQ== LmR1bXA= 0YHRgtCw0L3QsNCy0LvQuA== IHTDrW0= 4LWC4LSw4LWN upA= IEJhc2lz IHNvY2lhdXg= RXh0cmFjdG9y IGN6xJk= IOCmruCngeCmlg== INm+2Yo= INi52YTYp9mC IGhlcA== 4LmD4Lir4Lih4LmI IHBvc2ljaW9u Q29z IHNjYWxlZA== X0NMSw== INGC0LXQu9C10YTQvtC9 dWVsbGVz b3Zhbmpl IENyaXQ= IGNoYXJnZXI= T29r X2R0 IHBhcnRpY2lwYcOnw6Nv VHJhaXQ= X0RJU0FCTEU= X0l0ZW0= cmVlZA== IFNlY3Rvcg== cXR5 IOCkquCljeCksOCkueCksOClgA== IFVpbnQ= IGNvbXBldGl0aW9ucw== IOCmj+Cmsg== YXN0cmU= ZGZz bmlv LmluYw== IEFzc2lnbg== IOy5mA== aWVrZW4= SU9OQUw= INC70LXQutCw0YA= IEF1Yg== LS0tLS0tLS0tLS0tLS0t IENvcnI= RU5ESU5H Y21z IFdyYXA= IHRlZW5hZ2Vycw== YXN1cmVk X3Byb2dyZXNz Z2VuY2U= ZGllcw== IEtP dWJpbA== IOWkp+mmmeiViQ== IEtvcGY= IEpldHp0 IF9fX18= IGNyb3dkcw== INGC0YDQsNC90YHQv9C+0YDRgg== LkFw IGFydMOtY3Vsb3M= LnF1ZXVl KSl7DQo= RGVwb3NpdA== aWNhc3Q= 4LmE4LiX4Lii4Lif4Lij4Li1 0J7RgQ== a3VuZA== IG9kcG93 INGA0LXQutC+0LzQtdC90LTRgw== 4LS/4LSv4LS/4LSy4LWN YXRpc2ZhY3Rpb24= INW21bjWgtW11bY= YW1pc2Vrcw== cXVpZXQ= IEJhcHRpc3Q= IGluYXVndXI= IHRpbmE= IGPDs21vZA== cmVjdGlsZQ== IFRyaWFs PFN5c3RlbQ== X21haWw= INC+0YHQsg== IOCyuOCzjeCytQ== IHJ1ZGU= IG1hbXA= aXNlcmVu IGRpbGFrdWthbg== 2KfZhdmE2Kk= IGpvxaE= IM+Azr/Ou8+N IOCkheCkreClgA== 2KfYsdiz SkI= IGJlbnM= cG9ydG8= IGNvbWXDp2Fy INWA1YA= INC/0YDQsNC30LQ= IO2S IHByZXN1bQ== Q29tZW50 d2lyaw== 1oDVvQ== 0L/QsNC9 meGDlOGDlw== Y29udGFjdHM= 4LON4LKh 2KfYudip IHZlcm4= 56eR5a2m IExhbXA= INmI2LHagQ== IGFkaA== LlRhYmxlcw== U3RhcnR1cA== 44Gy IGFjdGVk b2Njbw== 4LmA4LiH4Li04LiZ4LmE4LiX4Lii4Lif4Lij4Li1 IGZhcm1lcg== X2NvbHM= IHRpZW5kYQ== IGNvbXBvc2Vy bWxlcg== CWRpc3BsYXk= 2YTZg9iq2LE= 0LvQvtC/ z4HOrc+AzrXOuQ== IG9wZW5pbmdz T1JUSA== IGF0dGFjaG1lbnRz IGhhcmU= IGp1bnQ= IHJla2w= dGVpbg== 77yf4oCdCgo= IHNvZnI= zow= IERhbWFnZQ== IGFua2xl IFNhbHVk w6h0cmU= z4HOug== YWhhdA== IOCmj+CmruCmqA== IGxhaWs= cGx1Zw== IOynhO2WiQ== IGdyYXA= 0L7QvdGH IG5lxb4= IFN0eWxlcw== LOaXpeacrA== cmFtZW50bw== IM6Y INeb157XlA== 2KfYptis Jyk7CgovLw== 4LCw4LGN4LC1 LWNvbHVtbg== IGdlc3R1cmU= IG1vaXN0dXI= IHBvdHM= IG1ldGFsbGlj J0g= ZWxo INC206nQvQ== IGlsbHVtaW4= 4YOg4YOQ4YOT CXBvcw== X0xPQ0FUSU9O b2JveA== INmF2YbYt9mC2Kk= IFNvY2k= INC50LjQuw== IHBzaQ== xZ90dXI= YnVja3M= Vmly IHNwcmluZ3M= LsK7 L2NvbnRlbnQ= KHNjcmVlbg== 0LjRgtC+ IHRvdGFhbA== IFNoaWVsZA== IMOhbA== INmF2LXZhti5 IHZvcmc= 5Zyz 4K+B4K6u4K+N4K6q X2dlbmVyYXRvcg== dXJnZQ== INWj1b8= cmlqdmVu 0LDRgNKt INC30LDQutGA0Ys= IEd1dA== INKb0L7QuQ== INCw0qk= IGhpbmdnYQ== bmF0aXZl IGNyZXNjaW1lbnRv IGRlc3Nlbg== ZmVlZGJhY2s= Lndpa2lwZWRpYQ== RVJBVElPTg== KGl0ZXI= 6Z2S6I2J IHdhbmRlcg== aWxhcmVz IGxvbmE= dW5lZA== ICQk IG5nxIE= 2ZDZhg== YXR0ZXJlZA== IOyeheugpQ== IHJlc3BvbmRlbnRz 0LzQvtCy IGNvbmNlbnRyYXRlZA== X3Nz IGFueXM= IExpc3Rl IG1veWVucw== XV1b IGNvbnN0aXR1dGlvbmFs IFVuZGVyc3RhbmRpbmc= IGJlcmVpdA== IE11bmRv INOp0L0= 2LrZhA== w7Bpw7A= X3Zlcg== IE5lYw== RGVmaW5pdGlvbnM= X2RvY3VtZW50 ICo+ IGdlbGk= 5Yay 4YOb4YOU4YOT INeU15vXnA== IFByb3ZpZGVz IM+Az4HPjg== IOCkm+Cli+Cknw== INC00L7QutGD0LzQtdC90YI= IGVxdWlsaWJy IGFubm8= INCx0ZY= X2N0 LDos IHdoYXRzb2V2ZXI= aWFuw6dh IFNlaXQ= 4pGh bsOtaG8= LmNhbWVyYQ== VW5pY29kZQ== IGVxdWlwYW1lbnRvcw== dGFyYQ== 4Kqw4Kqu4Kq+4KqC INmF2YTZitmI2YY= IFBBVEg= IG9sYQ== 4Kas4KeN4Kav KSkpKSk7Cg== YWlsYW5nYW4= INC00LjQsNCz IGFxdWVsZXM= INC90LDRgdGC0L7Rj9GJ IFJvdmVy UmVzcG9ucw== IG9mdGU= IMK7LgoK IENvb3JkaW5hdG9y INKb0LDQvQ== IGvhu40= 1aHVvtW41oDV LmNvbW1hbmRz LSR7 IExpZ2h0aW5n IHNleHVhbGx5 IHByb2NoZQ== IEZJUlNU 4YOj4YOQ4YOa IHBlcm1ldHRhbnQ= IGFtZW5kbWVudA== ID0n X0FDVElWRQ== 4Ki/4Kiy IGludGVyYw== IE1pbmlzdMOpcmlv 0LLQsNC90LjRjw== IGFyaWtv IGtpdGU= V2Fybg== b3ll IHRydW1w IG1vbXM= IHJlZ2lv 0L7Sow== IGFpZw== LmhpZ2g= IOC5gOC4peC5iOC4meC4n+C4o+C4tQ== SW5zdHJ1Y3Rpb25z IHBhcmVjZXI= IFN0YWlubGVzcw== IGNoxqFp Z2Fw 4YOU4YOo4YOY INC00LLQtQ== X3JlZmVyZW5jZQ== IGJlcA== ZXJ0b24= 4Lij4Li04Lip4Lix4LiX CWNsb3Nl IFRpbWVzdGFtcA== IHBhbGF2cmE= IGludGVyZmVyZW5jZQ== IFNob3Jl Qmlv IFBsYWNlcw== INGC0LDQu9Cw IOy5tOyngOuFuA== IG1hcmNoYQ== INCw0LrQsA== X0xJQg== 4Lix4LiN IEJhbmtz INmF2KjYp9i0 IGNvZXVy IPCfkQ== IHlhcMSxbA== Y2hyb25v ZmzDpGNoZQ== IHZpZXdwb3J0 IGRvdWNoZQ== Y29ubw== IHN1cnJlbmRlcg== X3RheA== TElO 4KSC4KSm4KWN4KSw 57+7 IGJpemFycmU= IExvZ2lj YWt0aQ== w7Np LWFyZWE= aGV0aWNz 2o/Zh9mG dHJlY2h0 2YXZiNi5 IOCqpuCrh+Cqtg== IGJ1ZGdldHM= IOCksOCkvuCkuQ== IHNlZ3VpZGE= IG9mZmljaQ== IGVsaW1pbmF0ZWQ= IHTDom0= INCy0YvQv9C+0LvQvdGP IHNlY3VyaW5n 0YvQu9Cw0YDQsA== QWk= IGhvbm91cg== IGJlc3Rh 6Laz5b2p ZWJp LWVkZ2U= IHNoYW1wb28= L3o= IEplaG92 xaF0bw== IEFnYWluc3Q= KHN0b3Jl IGFwcGFyYXR1cw== IEZydWl0 IENhbWJvZGlh QU5DRUw= IGNvcHlpbmc= IHNvbGVpbA== 0YbRltC5 YWxhYQ== 4KS+4KSv4KSk ZW5keQ== IHRyYWRpdGlvbmFsbHk= IH0KLw== cmlvcw== IGVzdMOp zrrOv867 0qPQsw== IMOzcmc= IG1vZHVsYXI= 4KeN4Kas4Kaw 57qi5YyF 4KSq4KS+4KSy4KWA IGVzZm9y IEthbGFhbGxpdA== IHF1YXJ0ZXJz ZW5lcmE= IEhlbHM= LmJveA== R3JlZw== 2LHbjNmB dXRlcQ== IOCymA== 54i2 IGxhbmdzdW5n 0L3QuNGC0Yw= LnJlamVjdA== 1aHVuQ== dnc= 0YDQtdCy ZGVsaW5n IHBhcGVyd29yaw== QFRhYmxl IGNha2Vz INGC0rHRgA== YWRkZQ== PSInLiQ= IOC0kuC0sA== IFNlY3VyaXRpZXM= IFJlY3J1aXRtZW50 0LTQuNC6 IGRpc2Nsb3NlZA== QWt0 IHByb21wdGVk IExlZ2FjeQ== eWFnZQ== YXN6 IFJlYWx0eQ== 4Lix4LiH4LiB b3JzYQ== KGRlcw== 1aXVtw== cmVjYXRlZA== wqI= QmluZGVy 5Ye95pWw IGFsY2Fs INGB0LjQsw== IFN0YW5mb3Jk ZXhwcmVzc2lvbg== IGNvbW11bmljYXRpbmc= 6Kan IOCopOCphw== IFNFUlZJQ0U= IHN1cnBhc3M= 5re75Yqg IG1hcGE= IGVycmVpY2hlbg== IHRoaWdo 4K+N4K6V4K+N4K6V IOCkh+CkuOCksuCkv+Ckjw== IGp1aA== IG1lbnNhZ2Vt IOS4iua1tw== ZXRhbQ== 2LHZitix Qm9sZA== YW5hcg== 44CC4oCdCg== IOCujuCuqeCvjeCuqg== IHbDrXQ= bGlrZXM= 2K7Zig== IG11dGF0aW9ucw== IGJyeQ== d2FsbGV0 IGRlcm5pZXJz J30pCg== TWVldGluZw== KG9yZw== b3JsdQ== IGVtcGly SEFM IOC4quC4tA== IHN0YXJl 4K6u4K6+4K6p 6Yo= J2F2YWlz 2YbYr9in 5q+U5YiG IGNvbnZpY3RlZA== IF8oIg== 2KrZiA== IHZhcGU= IGZpY2s= LlZlcg== IG1lbm9yZXM= IHJlcHJl INWk1aE= IGzEqw== fQoKLy8v ZXZh IFBMVVM= IGFjb250ZWNl IG51bmE= INCx0L7RjtC9 IEJE IGZpbmRlcg== 4LWL4LSw4LWN 0LfQsNC8 INW41oLVttWl1bY= 7Kec IHByw6FjdGljYQ== KioqCg== INmI2KfYsw== IGF3YWtl IHZlbmRyZWRp INix2Kg= UHJvb2Y= 4LiX4Li1 Q2hhbGxlbmdl IGFudGljaXBhdGU= IEFuZHJlYQ== Z2FtZXM= IEFVVEhPUlM= LWRpdg== ICEhfQo= IOGDqOGDlOGDo+GD IHJlbGlldmU= 6L+H56iL IiwKLy8= aW5zdGFsbGF0aW9u LmZp U3BoZXJl 4LmI4Liy4Lii4LiX4Lit4LiU ZW50aWU= SHVt IOGDkuGDkOGDnOGDoQ== YWp0ZQ== IOiw IGludGVyY2VwdA== IHN3aW4= b29v INmH2YXZhw== IHNpdHXDqQ== IGthbmQ= 5pe6 INCg0LDRgQ== IGFsdGVybmF0aXZh IGZvcm1hdHRpbmc= 4KaV4Ka+ xa9t 0LvQuNGA0LjQvdC4 ZW5zY2hhcA== IG9yYml0 b3B0aW1pemVy 0L7RgNC+0YI= 4oCN4LS3 ueCqv+CqpA== ZHVjZXJz IHNhbw== LVNw 0LDRgNCw0pvTmdCw w7ZuZQ== 2LPYp9io 5L2c5ZOB UmVzb2x2ZQ== X09T 54ax ZW1wZWw= IOS6lA== INC00LLQuNCz 4oCZYXU= ZnN0 ZnY= IHJlbGF0aWU= 0LjRh9C10YHQutCw0Y8= IOGDo+GDmw== Lm1hbmFnZXI= INi52KfZhNmK2Kk= IGJhc3Rh cmFudA== YWZmZWluZQ== 5bm05p2l INCy0LjRgg== 4LCf4LGN4LCy4LGB INqv2LLYp9ix IOGDqOGDlOGDoeGDkOGDq+GDmg== IOCkquCksOClgA== LnRpbWVy KG9wdGlvbg== T1RB IMOpdmlk ZXh0ZW5zaW9ucw== LXNlYXNvbg== IGF0dGFja2luZw== 0LvQtdC60LXRgg== IEhhdmVu IHdvbQ== IHNvbW1pZ2U= L2ludGVybmFs IGdyZWV0 IHVwc2lkZQ== IGRlc2VtcGVu IGRldmFt QU1M R3Jv INmH2YXahg== 7Lmc T1RUT00= IGhpZXJkaWU= YXBwZWFy b2ph LWNsaWVudA== 0YPRgNC4 YW1tZXI= Q2F1c2U= RUNUT1I= 5YWs6YeM J30pLAo= IEFzaGxleQ== am5l INC40YHRgtC4 IHJoZQ== LkNvbnRyb2xsZXJz IGNvbnNlaWw= a2zDpHI= IGlueQ== IE9idmlvdXNseQ== IGRyb2l0ZQ== c3RhcnRz IERY IG92ZXJk VGFob21h IEZlcnJhcmk= aW1paw== IChg b2JqZXQ= 44OG44Kj IGNvbnZpY3Rpb24= IFBpeA== LmludGVsbGlq 5q2j6KeE5ZCX 4KuN4Kq3 RGVzY3JpYmU= xI3DrQ== IGZsYXR0ZW4= IOCmog== ZnVuaw== 5LiO5L2g LmV4cGFuZA== 7J21 IGFjZWl0ZQ== LWFkbWlu IFBV IG5lbGxl IGJlYXN0 dXNi IGRpYWc= L291 54Ot57q/ X0NoZWNr IE1lc3Nlbmdlcg== 0p/TmQ== IEdyaW5kaW5n ZWJ1 LgovLy8= IEhhbmRz IOCkuOCkleCkpOClgA== 4Ki+4KiI IHd5ZA== am9q ZWJhYg== IHByb2N1cmE= IOCkr+CkvuCkpg== 4LmD4LiI Lm5vbWJyZQ== J30pOwo= 4Z624Z6Y CWJ5dGU= LXNlcmlm IE5lY2s= IG9sbHV0 IGJsYW5jbw== IGVuY2FyZw== IHRpbWVsZXNz Lndhcm5pbmc= IOW/hQ== KCI8Lw== 1Zs= IGRldmFzdGF0aW5n 6LCI 2LPYqtuM IG11bHRpdHVkZQ== Ll8K d29vY29tbWVyY2U= TG9yZW0= Z29sZA== cHN6 IOCqreCqvuCqsOCqpA== YmFiZWw= QVRUUg== IOCkluClgQ== aWxoYQ== 44Op44Kk RXRhdA== IOyLrA== CWh0dHA= LEQ= TWFyeQ== IH1dCg== dGVyaW5n cmljb3M= zrnOus6tz4I= IGNob3BwZWQ= 0L7QttC90L4= IHJlaW50ZXJwcmV0 INC90LDRhdC+0LTQuNGC0YHRjw== Q2F0ZWdvcmlh IOGDoeGDng== IG1hbmlwdWxhdGlvbg== IHZpdmlk IHJlc3RhdXJhbnRl SEs= YWNoYXM= IGVxdWF0aW9ucw== IGN1cnZlcw== fSQ= UVVJUkVE zrfPgg== IOCkl+CksOCkv+Ckj+CkleCliw== IM+Dz4c= dGc= 4LiE4Li04LiU INCy0LjRgA== INC/0L7QvNC+0YnQuA== IOC0quC1hw== IHZlcmJs IGhpZXJhcmNoeQ== YW5kZXo= X0RFUA== IGRldmlz IG5pbmd1w6lt dXJyZQ== IExPUkQ= INi52YI= VU5H IHBpdg== IEhWQUM= 4LGB4LCX4LC+ 0L7Qs9GA0LDQvA== dXpv 0YDRg9GH yZl5yZk= IGN1a3Vw IGZ1bGZpbGxlZA== cGxvaQ== INin2YTYrdmD2YjZhdip cnVubmluZw== aHRha2luZw== IGV4YW1pbmVz QkFS X0VMRU1FTlQ= IHNlY3VyZWx5 6LK3 KGVsZW0= IHJhY2lzdA== Zm9ydHVuYXRl IFRvdXJpc20= em5p IFVk IFR1dG9yaWFs INCx0YPQtNGD IENlcA== IFJQRw== INGA0LDQsdC+0YLQsNC10YI= w6RuZ3Q= IERpYW5h IMO+ZWlt IHJlZm9ybWE= QnVsbGV0 4KWI4KSk YmxhZA== INGB0YLQsNC90LTQsNGA0YI= IGVudGnDqHJl 7Lac7J6l7JWI66eI IFN0YXJ0ZWQ= IGhha2E= IG11c3N0ZQ== X3V1aWQ= J2FydA== d2Vya3Q= 15nXqNeq cHLDqXM= IE1ldGFkYXRh INec15vXnA== INmC2K/ZhQ== IHB1c3N5 LnN0cm9rZQ== Ol0K IGRyaXZld2F5 YWN0aXZpdMOp INC80L7RiQ== IildDQo= IOeCuQ== QW5hbHl6ZXI= IHRhYWw= KHN0YXRpYw== LVRy IHlhcw== YXZlbGVuZ3Ro INCc0LDQug== X3ZvbA== IG9idGVy INmH2K/ZgQ== 4Ka+4Kan4KeN4Kav4Kau 4Kao4KeN4Kak4KeN4Kaw 4YCY IGthZg== 4LC+4LC5 ZG9jdG9y IE5IUw== IHN1ZG8= IHNjZW5lcnk= fSksCg== IGRvZXNudA== IEZhaA== IOCuruCvgeCunw== INGW0Lw= Vk9JRA== IERM Q29l IGludHJpZ3Vpbmc= IHV5dQ== IENvbnRhaW5z 57ay56uZ IGNyb3dkZWQ= INCy0YvRiA== IElzc3Vlcw== IHR1bm4= qeGDnA== IMWC aXRhbnQ= Il09 dGVycmFmb3Jt IEplc8O6cw== INaD1bjWgNWx KG1hdGNo 5byA5aWW5Y+356CB 4Kq+4Kq3 INGB0YPRgg== ZWVua29tc3Q= 0rPTmdGL0L3SrdKb0LDRgA== INCx0ZbQtw== VWx0 IE1vZGlmaWVk zrHOuw== Ym9k IGphYw== 4YOd4YOR4YOY4YOX 0LXQu9GM0LfRjw== U0VP IOCyueCzhuCymuCzjeCymg== T3ZlcmZsb3c= TU9EVUxF INiz2KjYqA== QXBwb2ludG1lbnQ= 77yB4oCdCgo= Z2lz ZGVzcw== IGFzaWdu w6ZydA== IFN0cmVuZ3Ro IE1lcmNp IHThur8= aW5lbA== IGHFrQ== IGdvbg== IOC0tw== IHRyZWI= bWFpbnQ= 6b6Z6JmO INCc0LXQvQ== IGRpc3Rpbmd1aXNoZWQ= cGVuZGVudA== IOCyl+CzgQ== YW5zZW4= 55m+5a625LmQ IG1vZ2VsaWpraGVpZA== IHdlbGNoZXM= xaFhbmFz IGvDqQ== 4KuH4Kq24Kqo IGdvcmQ= QmxlbmQ= INC80q/QvNC60ZbQvQ== Q29tcGlsZQ== IGRlZmVuZGluZw== IHdpZGdldHM= CWZ1bmM= IEJyYXppbGlhbg== YXRha2Fu LnJlcGx5 w6xt Zm9yZ2V0dGFibGU= IHVucGFjaw== IHNpbXVs IHZvcmhhbmQ= IFRyZW5kcw== aGs= TEVH IOuW bGVyaW5l IG9wbG9zc2luZw== ZXN0ZW5z Q2xhaW1z IHNrYXRl IM+Jz4I= ICMjIyM= zrTOuQ== c3Vic3RyaW5n IGRpYW1vbmRz c2V1ZA== V0FSRA== IGVzdGFkb3M= IOCyqOCyoeCzhuCyuA== IExJVkU= IOCupOCusuCviA== IGNsb3Nlcw== IOCkquCljeCksg== IGd1aWx0 4YOd4YOc4YOY4YOh L1VzZXI= LnJlY3ljbGVydmlldw== 4LON4LKf4LON IOC0puC0v+C0teC0uA== X3BheW1lbnQ= 15nXmdep IE11c2s= IOqyg+ydhA== IGRvbm9y INuB2LE= IFJlc2lkZW50aWFs IGhlbHBlcnM= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K INGB0LXRgg== Zm91cg== aW5leg== IGNo4bun IHRhbmE= IGVzY29sYXI= IGFtYmFz IERlZw== 66as64qU IERlbHV4ZQ== IHBlaw== IAoKIAoK IGF0cw== INCy0L7QvtCx0YnQtQ== 0YDQuNGB0YI= VlBO bGRh IEJlbm4= 5Zyo57q/57K+5ZOB X05FVA== IFRocg== Ok5T IFFhdGFy IHVyZ2Vk IFBvcnRhYmxl IGR1Y2s= 4Z6Y4Z624Z6T IGRlbWk= INGA0LDRgdGB0LrQsNC3 IENvbG91cg== VHJl IGZlcnJv Z2V2bw== 4KSV4KWN4KSV IFVGQw== VGFyZ2V0cw== IHJlY2hhcmdl IOuCoA== R2Fpbg== UGVz IFZBTFVF IOCkruCkueCkv+CksuCkvg== KHdvcms= ZW5zb24= IExpb25z X2NvbmQ= 4Ka+4Kew4KeH 4LGB4LCW 5LiN5Yiw INGA0LXQs9C40YHRgtGA0LDRhtC40Lg= cHBlcnM= IG9xYXJwb3E= IGhlbG1ldA== IHByb21vdmVy CWZvbnQ= 6IW5 IGNvbnRyb3ZlcnN5 IHdhcnVt IFBlcnU= 54uC Lklm IG1lcml0 UVVFTlRJQUw= 77yB44CN b250ZXI= IHJ1c3M= IG5vdGljZXM= IG1pZGRsZXdhcmU= IFPDvA== IOCmruCng+CmpA== IG11bHRpcGxpZXI= IHNhYmVtb3M= 4Lix4Lil IFByb2M= 4LSv4LWN4LSV4LWN4LSV IGZpZXQ= IENhcGl0b2w= dWNj cml0dGU= X2F2YWlsYWJsZQ== 4KuD4Kqk 4Z674Z6E KeOAgQ== IHNob3dj IFp1c3Q= IFV6 IOCmquCngeCmsuCmv+Cmtg== 0L7RmA== IOCwteCwv+Cwtw== xJNj IOS4tA== ZnJpc3Q= INGB0YDQsNCy IOCmhuCmqA== IiwKCg== 0YDQtdCx IGJvw711bg== IGluaXRpYXRl 44Gj44Gx 4LWL4LSz IOC0leC0tOC0v+C0nuC1jeC0ng== IFZveQ== IwoK INeT15HXqA== RU5W ZmxhcmU= 5oiQ5Li6 d2FyaQ== 5LyY5oOg CWltYWdl IGh5Z2llbmU= IFNpbmdsZXM= IGNvbXVuaWRhZGU= IHRpZWfEpw== IG1lbXBlcg== V29vZA== IGluZXZpdA== 4Kqw4Kqj YWdk KXRoaXM= INCx0LXRgNC10Lw= IEdEUA== LmJpdA== RGFuaWVs LkFjdGl2ZQ== VHJ1dGh5 IEhlcm4= 4LGL4LCC4LCm4LC/ IG1lZGV3ZXJrZXJz IHNob3J0YWdl IOWMl+S6rHBr zr3Ov869 IHJ1bm5lcnM= IEVkaW5idXJnaA== w7pjYXI= VGlja3M= U2Fi IOCkpOCliOCkrw== IHNjYW5kYWw= IHJlcXVpc2l0b3M= INGB0LLQvtC40LzQuA== IGthdGVy cG9ydGlvbg== IGh5cGVydA== INCx0LU= 5YWz6ZSu IO2IrA== X3BhY2thZ2U= X3NldG9wdA== IGNvbXDDqXRlbmNlcw== INmG2YY= IG5pw7Fv IGRpZ3VuYWthbg== bWVzcw== 5oyh zrjOrQ== RGVwZW5kZW5jaWVz IHJlbmNvbnRyZXM= IHRyYW5n IOGDlOGDpQ== IOCkrOCli+Cksg== LXJhbmdl INC00L7Qu9C70LDRgA== 4LeS4Laa IGNhZ2U= IEFkdmVydGlzaW5n IG11a2Fhbg== IHNhYm9y IGNoYW5nZW1lbnQ= ZGhh IGNvbWXDp291 IGdhdGVz IEFzc2lzdGFuY2U= IHJhemxpxI0= 2YjYrNiv TGFuZ3VhZ2Vz IGxhbmRlbg== ZWhpY2xlcw== IOCwieCwguCwnw== bWVhbA== INC/0LDRhw== IGd1bHA= IFNjaG5l SGFi INix24HYpw== 4KS14KS+4KSy IGtvbGw= 4YOQ4YOn 5oiR55qE 5Lqk5piT IGpvdGth 4KuL4Kqu4Kq+4KqC IHBvdXJ0YW50 dmFpcw== b21vcw== YW1tYXQ= 15nXqdeo15DXnA== IHNwb2tlc21hbg== KHRlbXBsYXRl dW1tYWE= 5Li0 15zXkQ== IG9sdQ== 0LjRj9C4 IGluY2lk QW1vbmc= 4K6e X3JlZA== IEJyZXhpdA== IGVwaQ== YWluaQ== IEt5bGU= aG9l IGhpbGFyaW91cw== 2YbYr9mI IGJ1bHVu YWRpYw== ZW5o IEZsaXA= IE3DvG5jaGVu IFNleG8= X2NoYW5nZWQ= IGNocmlzdGlhbg== 0KDQsNC3 Z29y INCx0L7RjtC90YfQsA== U1RSVUNU X2NvdW50cw== IG3Dumx0 IEluag== IENoYXJ0ZXI= IHRoxrDhu51uZw== bWF5YQ== b3JyaWRv Z2V0dG8= IGtvbnN0cg== Lmxhbmd1YWdl IGJsb2Vk IGp1bmhv IEV4Y2VsbGVuY2U= IFNlcmc= 4oCM2KrZiNin2YY= RXhlcmNpc2U= IElkYWhv IGNhbGxiYWNrcw== CWF0 IGN5bQ== LmFuaW0= 77u/Cg== IGNoYXR0aW5n IGFsZW0= 2KfYudin2Ko= ZGVwYXJ0 INiq2YjZh9in2YY= dXJpYQ== 5Yia IGRow6lhbmFtaA== 4KS+4KSa4KS+4KSw fWNhdGNo IGNoZWZz LlNoYXJlZA== Y3BsdXNwbHVz INC60LDQutC40LU= IHRlbHM= 4Lia4LiZ 4YOU4YOj4YOa LnJi IE1hbWE= IGNvbmRvbQ== IGtpbGxz Z2lk INGB0LDQudGC0LA= INuB2Yjarw== xIFq INC20rHQvNGL0YE= IGRpc3BlcnM= IGtpbmg= cHJlZg== IOGDm+GDmOGDm+GDkOGDoOGDlw== Y2FjaGVk IEFtYQ== INqv2LHZiA== 5L2c5byK 0LTRi9GA0YM= INCw0LLQsNGF 15XXpNeU 4YOu4YOV4YOQ 4YOQ4YOb4YOY4YOh aXRjaGVucw== IGNvbXVuaXQ= UGVyaGFwcw== X2FnZW50 IHB1YmxpY2Fkbw== IHNpbWJvbA== IGNvdW50ZXJz 4KeL4KaB 2YTYp9i0 IEluc3RpdHV0aW9u 6JQ= IFZU IFdpZW4= IGNhdHRsZQ== IHF1YW50aXRhdGl2ZQ== Z2FyeQ== J3R5cGU= IOC4hOC4mQ== LlRva2Vu IERyYXdpbmc= IHN0YXJ0dXBz IHBvZHLDoXM= IM+Hz4HPjA== XEZyYW1ld29yaw== IOCqsuCrhw== IOCksuCkl+Ckvg== INC/0YDQtdC8 INmI2YTZhQ== IGNhcmFjdMOpcg== IHRhZWE= IHdhYXJ2YW4= IGFzaWFu KFNU IGJldHJva2tlbg== IFRvbA== IHRyZWJ1 IENoYXJnZQ== xLHEn8SxbsSx 5Ya7 w6R0dGVu IOCqqOCqvuCqrg== IGFsZWJv IEV2YW5nZWw= Q2Fyb3VzZWw= aXZlcmVk RHVyYW50ZQ== IGJsb3du IGNhbmNlbGVk IHBhZGRsZQ== 4Kq+4KqC4Kqa INCw1KXRgdGD0LA= bGVj IOGDkOGDm+GDkQ== w6RsbMOk IHN0ZXJvaWRz aG91cnM= IERpbm5lcg== d2F6aQ== 4LGL4LCX IHZhcnQ= 4LKj4LON4LKj IOCkruClguCksg== IGtvb3A= IHNww6ljaWFsaXM= 4YOi4YOU4YOg 4KSm4KS+4KSo INC/0YDQtdC60YDQsNGB 4KSn4KWN4KSv4KWH IHhs IG1vcmc= YC4= CXRoZQ== IEZhbWU= IHNhbWVud2Vya2luZw== 4KWN4KSv4KS+4KSw IE1FVEhPRA== 65Sw X2hpZGRlbg== 5Lqs6YO9 IERpbA== IHVq 0J3QmA== L3RleHQ= 6L+d5rOV zrXOr86/ b2Nhcg== RW1wcmVzYQ== IOGDm+GDneGDlQ== IGRyaWxsaW5n IHJpZGVy IFN1Z2dlc3Q= IEFsdG8= dGVybw== 0L7QstC1 IHN0b25k Z2Vub21lbg== INin2YTZhtiz IG1hcnZlbA== LXJlZg== IFN5bmQ= IOCmquCnjeCmsOCmpeCmrg== VUdJTg== INC/0LXRgNCy0YvQuQ== LnF1ZXN0aW9u YXlhcg== CWdhbWU= IERyaW5r IGthc3Q= dW50cw== ICAgICAgICAgICAgIAo= 4KSC4KSX4KSy IM6tz4fOv8+Fzr0= IG1hbmk= TG9uZ2l0dWRl IEPDom1hcmE= IOCkruClg+CkpA== QU1JTA== 15XXmdeW IGVubGlnaHQ= IG5lZ2xlY3Q= IHbDpGdh IFRhYmxldA== 5byA5b+D IG9tcw== IFJld2FyZHM= IGd1bA== LWFjdGl2ZQ== IOyekOyLoA== 4q2Q 4LS/4LSv4LS/4LW9 c2x1 77yM5LuO VmFsaWRhdG9ycw== IOGDp+GDneGDleGDlOGDmg== 4LKC4LKX4LKz4LOC4LKw4LOB IExhdGluYQ== IGhvY2h3ZXJ0 IFRlcm1pbg== 4KWH4KSy4KS+ IHNsbw== IGNvbGxhYm9yYXRl Q29sbGVnZQ== INC70LXRgQ== TWFsZQ== INqz IG1lc2U= IG5hdGlvbmFsbHk= W3N0YXJ0 ZGlzY2lw IHZhbGlnbg== TWlzc2lvbg== IGFsbGlhbmNl RXhwZW5zZQ== IGTDqXRlcm1pbg== IGluc3RhbGE= IM60z40= 2KzYp9iv IHN1YmplY3RpdmU= IFBVQkxJQw== IHBsYW50aW5n IGVwdWI= 5YKZ aXZldA== IHZpc3VhbGx5 IE1hY2hpbmVz cXVhbQ== 5L6h5qC8 IGVzY29saGE= IFBheg== IFJvZHJpZw== IGFudGFyYQ== IGRldXM= X2RldA== IHZpYnJhdGlvbg== INGH0LjRgdC70LU= IExPU1M= IGNvbGV0 IHVybGxpYg== X1BSSVZBVEU= IGRpc3RyaWJ1dG9y X3Byb2M= IG11bmljw61waW8= IOCwruCwqA== IGNvdWdo IHBvYnJl IGJhbGFuY2Vz b255bXM= INin2YTYudix2KjZig== IHNpdHVhdGll 4YOQ4YOc4YOY4YOQ 6aiT INin2YTYo9ix2LY= IEZhY3Rz IGxsZWdh IOWFqOawkQ== IG9wdGltdW0= LnJhbmdl 4YOR4YOY4YOa4YOY4YOh IEpvZWw= TWl4 7JeI7Iq164uI64uk INmF2K3Yrw== IEJldHQ= 0L7RgtGD IG1vdXZlbWVudA== UHJvcGFnYXRpb24= IGV4dGVuc2l2ZWx5 b2do IGVjb27DtG0= IHZhaA== 0LDQu9GC 4LKC4LKk4LON4LKw 4KWC4KSm LlN0cmVhbQ== 0LrQvtGB0YLRjA== 0L7QstCw0L3QuNC5 ZmVycw== T3JpZw== IHBvc3Nv IOGDmeGDmOGDk+GDlOGDlQ== IHRyYW5zYw== IGdpbmdlcg== IOGDkuGDkOGDoQ== IHDFmWk= VGhlcg== IGFjY2lkZW50YWxseQ== IENoYWxs UkVR IHN1ZnI= aXRlY3R1cmU= 57K+5YeG LWJyZWFr ZmFrZQ== 0LjQsdCw0YjRjA== 0LrRgQ== 4KSG4KSI IHNvbGlkYXI= INin2YTYudix2KfZgg== IHBlcnRhaW5pbmc= IG5vbWluYWw= dGV0 J29i IGNvbnRyaWJ1dGVz IGRvY2tlcg== QXBwcm92YWw= IGFjb3VzdGlj INin2YTZhdmE2YM= IEVyZm9sZw== IMSR4buB IG5ha28= ZWNk 65+9 IGJvcmU= RUVF xKtidQ== KTw= INi02YjbjA== IGFkaGVyZQ== b2JsZQ== IGRlc2hhbGI= IGxpYmVydGFk IGhvcm1vbmVz IOebmw== IHJlbmFtZQ== 5a6F 4KSj4KS+ 2KfYqNuM 4LKC4LKn IERpZXNlcg== IGF1ZmdydW5k 2YTbgQ== IGF0YXF1ZQ== IG11c2N1bGFy IFRhZ2Vz IGFkbWluaXN0cmF0b3Jz VGhlaXI= 4oCL4Z6R IFZhcmlvdXM= 5a6/ QW5pbWF0ZWQ= IG9vaXQ= oIA= X0lOVEVHRVI= dGVuZXI= U2F5 INC/0YDQvtGP0LI= IHVwbA== IGtpbmE= IExvcnM= IOC0qOC0v+C0rw== 06nQuQ== IE1hZ2U= 0L3QuNGC IOCyrOCyguCypg== INGC0Y3RjdGA IGxvbmVseQ== YXRlcmluZw== LlByb3ZpZGVy IGFpZHM= X3B1YmxpYw== IGltYWdlbnM= 5YiG5pe25pe25b2p bnVtZXJv KCkv IHRoYW0= 4Kqo4KuN4Kqf aWZ0eQ== IOCkquCksOCljeCkrw== IHRhaWxvcg== 4LC/4LC3 INm+24zYr9in IENNRA== IGp1dmVu IOaxhw== aMOkbHRu Rmx1c2g= INC40L3QtNC40LLQuNC00YM= aXNhbnM= IMO8YmVycw== L21lZGlh X3Bpbg== IGdw IG13YQ== IMSNbA== V3JpdGluZw== KExvZw== bmVtZW4= 4LKr b3Z5 Z3Jhdg== LmpwZWc= bMmZcmk= CQkJCQkJCQkJCQkJCQkJ 1Yg= cmVpY2hlbg== 4KSo4KWN4KSm4KWN4KSw aW94aWRl 4YOQ4YOb4YOT4YOU bGx0 KGNhbGw= Z3Vlc3M= IGNvaGVy IHRyYWdpYw== INC+0LrRgg== dWxhw6fDo28= IGfDtnN0 IHNhYWI= b3Jlc3Q= L3Rlc3Rpbmc= 4K6j4K+N4K6f4K+B IHNheA== IGRhbWFnaW5n W2NvdW50 IEplcmVteQ== 0L3QtdC9 IHF1aW50 IGVzcG9zYQ== IGVjb27Ds21pY2E= IFNjbw== IHBoZQ== 2Yw= IFRocm91Z2hvdXQ= IOC4p+C4tOC5gOC4hOC4o+C4suC4sOC4q+C5jOC4muC4reC4pQ== IGxlYmVu INio2LLYsQ== cG9sbA== b3JyYXI= X2VmZmVjdA== YWJlbGxl w7RtZQ== INGB0YQ= KHJvbGU= ICc9Jyw= IFJpZGU= INGB0YPRhQ== IFRlYWNoZXJz dmI= IGTDqWc= IE1pam4= INWv1bjVstW01avWgQ== IE1haXNvbg== 0q3QsNGF aWFzYQ== aWdsaWE= L2Nvbg== V2luZA== IHbDtmxs aXRhdGVk QWJlcg== KS4NCg== IEplZXA= INeb15HXqA== 772l772l IOCkieCkqOCkleCkvg== IGxhbmd1ZQ== LOWkqeWkqQ== IGFic3VyZA== IOCyleCzhuCysg== RmFudA== IGV4Y2VwdGlvbmFsbHk= IHdpc2hlZA== INiu2YjYp9mH2K8= IG3EgWtvdQ== INGB0LDRjw== Y3JpcmU= RWFzdA== IEVzcGVjaWFs 4Kq+4Kql a2lsZQ== IEFycm93 IGNlcnY= 0YDQsNC90Y8= IOCkhuCkl+Clhw== RG9jcw== IGdlbGVu IOC5gOC4lw== INC505nRiA== IGZsYXZvdXI= 4Ken4Kev IG1lcmN5 IG5vcm1h 15nXmdeo aWxpZ2h0 IHNhZ2U= Q3JhZnQ= Ii4uLg== IFRlbm5pcw== IOCqj+Cqrg== IGNyaWHDp8Ojbw== IGRvd25z IFBhcmU= INW91bo= IFJ1ZA== KG1lbWJlcg== w6RmdGU= ICYK IHdhbGFuZw== IENvbGxhYm9y INKb0L7RgA== IOC4peC4hw== bW9n aG9yaXpvbnRhbA== anF1ZXJ5 IOCmpuCmv+Cnn+Cnhw== ZW50aWNhdGVk TW9uc3Rlcg== 2q/YsduM 0LXQstCw RGVjb3JhdG9y INCQ0LQ= R04= L21pbg== IGluZHVs 4LKy4LOA IGRhdHQ= IOGDm+GDmOGDlOGDoA== X1ZBTElE CXRvdGFs Y2VyaWE= UEFSQVRPUg== KXNldA== bWV0aWNz 5Yib5paw IHNoYXJlaG9sZGVycw== KGV4cG9ydHM= RW1wbG95ZWVz IHZvdWxleg== 0LvQtdC90LjQuQ== INGB0YPRgA== 4LK/4LKo4LON4LKo b3RoZWs= UmVncmVzc2lvbg== 0JDQsg== INC20LDQug== IHNlcXVlbA== INWv1aHVtQ== IEJvdXI= Q0xVREVE RmlsdGVyZWQ= IHN0cmFuZ2Vycw== IFJlY2VpdmU= IG9lcg== IOCwmuCxh+CwtuCwvuCwsOCxgQ== 2YHZitix 4LS+4LSf4LWN IOCkueCli+Ckgg== YWdpbmF0b3I= bG9nZ2luZw== IEZsb3JlbmNl SVJB IOCwpOCxgOCwuA== IGltcG9ydGE= LmVyYXNl IHlvdW5nZXN0 IOCkpOCksOClgA== IEZvcmNlcw== IHByZXRlbmRl IHNtaWxpbmc= LnNlY3Rpb24= INCy0L7Qt9C00YM= KHdvcmxk c2hhZG93 W2l0ZW0= IHN1bnNoaW5l LHs= b2Jvemk= IHZpbmVnYXI= bGllcnM= aWthaQ== IG1pbnN0 IGrDpA== INi52LI= IHN1dXJl U2lnbmVk wq4s PHNyYw== RU5B IEpvaGFubmVz IG1hcmtpbmc= IGZyZWV6ZXI= IGNsaW5pY3M= IGVnZXQ= KGRhdA== b290YQ== IHLDqXN1bHRhdA== LmludGVyZmFjZXM= aWJz IHB1bHM= INCy0LDQtw== 0L7QstGL0Lk= LWVsbGU= ISEhIQoK L2Ri b3Nr YXJtaWs= b3Nwb2Q= QW5hbHl0aWNz Lk1JTg== IFByZXppZGVudA== IHN0cmFpbnM= L2ljb24= Lnhy YW5kZXg= IGNhcGFjaXTDqQ== IEVpbnN0 IGltbWlu IOCkquCljeCksOCkuA== Y2htYWw= 0ZbRlg== IOCwuOCxjeCwnw== IHJpc2ljbw== L3N0b3Jl YW1wbw== aW90 INGB0L7Rhw== 4LK/4LKV4LOK4LKC4LKh 6Jed bGVyZGU= Z2ls UkVTRU5U IG1pZWo= INC40L3RgdGC0YDRgw== IFN1cmdlcnk= IHRhaGF5 a2Fo Uk4= X2F2Zw== IEhpbHRvbg== IERq IHZlaQ== IExhYnM= INC40L3RhNC+0YDQvNCw0YbQuNC4 IGNob3Jl cm9rZXM= Pjo= IGbDvGg= YW1wYWlnbg== IGPDoWw= INmG2LPYqA== IGVzY2FwZWQ= YXBlc3Q= IHF1ZXJv X05PUk1BTA== LeGDmOGDoQ== 4Z+G4Z6W IHdoYWth INC20YPRgNC90LDQuw== 15fXnA== IOCmh+CmiQ== KGNmZw== cmVnaXN0cmF0aW9u IFdlbGxz zrTOrg== IHBhcmNvdXJz IHBvc2nDp8Ojbw== IERlbm5pcw== YWd5 4LGA4LCv ZGlj IHJlZGVlbQ== IGhhdHM= cm91bmRlZA== 55qE5Lq6 4LSW 4Ka+4KaJ UmVjb3JkZXI= IGdsaW1wc2U= 5omj IFBldGU= Q0FTVA== IGRpdHQ= IGZyaWN0aW9u bGV0enQ= IENyZWF0aW9u KGZy IGVuZ2Fn YWNpdMOp IFNjaGw= PEE= IHPDrcOw IGVuY291bnRlcnM= dWrDrQ== csOhbg== aWVnZW4= T3BlbmVk LmNvbnN0YW50 IOCmueCmvuCmuA== INmG2K3ZiA== KHBhdHRlcm4= Q2hlY2tvdXQ= Li4uLi4uLg== LkludGVyb3A= b3VsZGVy IGJyaW5k IGN1ZGE= 6LS05ZCn IOGDm+GDneGDkg== 6IY= IHRlc3Rl IGlsYW5n INGB0L7Qt9C00LA= IEFwb2xsbw== IGlkZWFsZQ== IEJvdXQ= IOCmj+Cmn+Cmvg== Tm0= LW1hcA== INCz0Lg= IOCyquCzgQ== INC90LDQu9C+0LM= 444= IE5vb3Jk YWRybw== IEFmZmlsaWF0ZQ== eWFyYWthdA== IG3DoXhpbWE= IGludGVydmlld2Vk IGLDunNxdWVkYQ== VEFH YW1iaWE= IHN0YW5kYXJkaXplZA== INW01aXVttaE IG3Ds3ZpbA== INGB0YLQuA== IGZhbWlsaWFz IHRo4bupYw== aW10ZQ== bm9ybWFsaXpl aWNpbmU= IG1hcmF0aG9u IOCwhuCwr+CwqA== INGA0p8= 4KeH4Kas4KeH Y3VhZG9y 2LbZig== d2Vncw== LlBhcmFtZXRlcg== IGFkcmVzc2U= 0LTRg9C90LDRgNC+0LQ= IEJUQw== IFJI QWRlbcOhcw== 2YjZitiq 4YOS4YOQ4YOc IEhpZGRlbg== RXJybw== aWVuaQ== 6KqN IOC5hOC4l+C4og== INGB0L7QsdGL IE1vbnRobHk= IHVtYnJl QmVzY2g= 4LS/4LSx 2KfYsdio IHN0cnRvdGltZQ== VGlja2V0cw== INiq2KfYsduM Q29tcGFyZXI= INGD0LTQvtCy INio24zYp9mG bWFpZA== INiv2YjYsdin2YY= IGhhaXJzdA== IEt1cnM= 0qPRiw== LmZsYWdz LmNhcnQ= IHNhbGFyaWVz IHNpbXBsZW1lbnRl IGhpc3TDs3JpY28= IGVyb3Rpc2s= IGRldG94 IGN1bHBh IGdhcmFudGll INin2YTYrdi12YjZhA== CXNlbmQ= 4YOQ4YOk4YOU4YOg4YOY 2K/Yp9iv IEhvZg== w5A= IG1lZXN0YWw= IGNvbnZlbmM= 4K6/4K6v4K6+4K6V 2LfZhNin2YI= IGluc2U= Li4uLi4uCgo= INGA0LXRiNC10L3QuNC1 LXE= IHBhZ3BhcA== 0LPTqdC9 6K+a cHc= IOC0juC0pOC1jeC0pA== IG5hcmM= 2KfYptuM2ro= INm+2LHYrw== INC40LPRgNC+0Lo= 4LCq4LGI LnJhZGlv IFlu IHJldGFpbmVk ID4+Cg== X2xpbmtz IGJlc3RhYW4= IHt9Jy4= 4pmh 77+9cw== IGRhdGk= IEhpZ2hsaWdodHM= INGF0L7Qt9GP IGFsbMOh IG93bmluZw== KG9wZW4= SW5kZW50 zq/Ov8+F IFdhcm0= X3NsaWNl IHp3ZWl0ZW4= 6YCB5b2p6YeR cmVq IERhYXJvbQ== S2F0 bWVudGlvbmVk 0LPRltC9 IOCwquCwsOCwv+Cw IHBvbmRlcg== IHN1Zg== IEVm cHJlbnQ= IOCmheCmreCmv+Cm IOyGkA== fS8v IOmD IEJhc3Q= cmVnaXN0ZXJlZA== IEhvbG1lcw== X1RZUEVE IHJlY3Y= dGFsaw== xbU= IHN5c3RlbWF0aWM= LWNhcmU= YWN0aXZpdGllcw== IENydXNoaW5n 5LmF6I2J XV0pCg== KGludGVy INCw0LvQsNGA L215 IFRyYWRpdGlvbmFs IEFkZQ== IGRlZ3JhZA== aWdheQ== IHJpa3Q= IHVuc3VyZQ== IGNhbXBhw7Fh IHN1c3RlbnQ= IENoYW4= PSJ7eyQ= bWF5YmU= b3JpYXM= IOCkruCkvuCkpw== IGdyZWVucw== IM6+zrU= bmFoYQ== IENvbmNlcnQ= IG9sdA== Q2Fi LnNwcml0ZQ== 0JDUpdGB0L3Riw== cmVjb3Jkcw== 2K/Yp9ih LmRhdGFz YXB0b3I= IFZpY3Rvcmlhbg== IFB1Ymxpc2g= IHByZXNzZQ== IFRvdXJuYW1lbnQ= 2b3YsQ== IFdvdw== 4Kaw4KeN4Kaj 2KjYp9i3 5p2A5Y+3 IHLDqWN1cA== IG1pc2Nvbg== IGFkZGl0aW9ucw== 64SQ IOKZpQ== S2V2 4LGN4LC3 IOe9keS4ig== IGtvbXVuaWs= YXJyaW5ncw== IFBETw== X1ZhbHVl IHBvbmU= IGFwbGljYWNpb25lcw== INWP VkVSU0lPTg== Ymxlcw== b2ZmaWNpYWw= IOGDkOGDmg== IHN0YWI= 2K3Zitit IGFhbA== IOCwpuCxgA== INqv2Kbbkg== cXXDqA== IEVWRVJZ KEJpZw== LkV4Y2VwdGlvbg== INin2YTZhti42KfZhQ== X2V4ZWM= 57WE IFN0YWF0 IG11c2V1bXM= 4LKo4LON4LKo4LKh IGRlxJ9pbA== IEVjb25vbXk= IGNhcHR1cmVz 4KqX4KuA IGzhu5tu IE1hbmlmZXN0 IGZvb3RwcmludA== IGxkYw== 4KSo4KWN4KSu YXplbg== IERJU0NMQUlN IENhbmQ= ruGDlOGDkw== INGC0YDQsNC00Lg= INCc0LjQvQ== w6ltdQ== IOCmoA== IGVyb3RpYw== IGVsZWt0 IOGDkOGDk+GDkuGDmOGDmg== IGp1bGhv 4Ka+4Kaw4KeH IHN0YXZhbmdlcg== IHJldHQ= b3JkaQ== U3VyZQ== 0YHRgtC40YLRg9GC IFVubGltaXRlZA== w590 LmZpZ3VyZQ== IG7DpWdvbg== 2KfZh9ix IHBlcm1ldHRlbnQ= IGd1aXQ= dXJ1aA== RGlyZWN0aXZl IGVnYWw= Q29uc3RydWN0aW9u 0LbQuA== c3RlaGVu LkFmdGVy INiq2KjYrw== IFRvdw== IEhlbXA= INin24zZhQ== IEltcGVyaWFs 4LSa4LWN4LSa4LWN IOuVjOusuOyXkA== Vm9pZA== IHJlYWN0b3I= INmK2LU= 0LbTmQ== IHZlbGlr 44GS IElCT3V0bGV0 b2luaG8= IENvbXBs IGhhaGE= INin2YTYqtmB IGZvc3NpbA== IGRpdnVs IOCmleCmsOCnh+Cmm+Cnhw== IGdhbmFy IHNob3dlcnM= IHNjaGFkZQ== xJNt IFN0YQ== KERC Lk5FVA== 0LjQu9OZ0YA= IFNpdHVhdGlvbg== 4oCQ aWt1cw== IGt1dw== 4LmK4LiB IGVpbA== IHfDqWk= IEd1ZA== IGNydWRl XV0+Cgo= 4Liq4Lih IG1pcnJvcnM= VHJpYW5nbGU= 4KSv4KSo aGFyZQ== IHBzZXVkbw== IOC5gOC4geC4oeC4quC5jA== Pnt7JA== 4Li24LiB IGVpZ2h0aA== 5b6E YW1taW5n IGthc2lubw== IHBlaW5l aW5rbGVz 0LjRgtC+0YA= LmNvbnN0cmFpbnRz LkRv INC60L7QvNCw0L3QtA== aG90ZWw= 0LvQuNC90Lg= X2Nhcg== IGJ1Y2tz dHN5 IHN0dWRpb3M= TEFORA== INiz2K3Zgg== IGdyYXR1aXRv IGFsdHJl 2YXZhNmH SW5kZXhlcw== X3Rz Ym9yZA== aWNpZW50cw== IEF2YWw= IEFjY291bnRz dWRlZA== b3Rlaw== 6YOo6Zeo IHNvY2lldGllcw== INGA0LXQs9C40L7QvQ== aWdpcw== IFBlbnM= YWJrYQ== IGxvY2Fpcw== INCQ0LvQtdC60YE= IHBlcmU= INC/0YDQvtC40YHRhdC+0LTQuNGC 15nXoteU IOCkleCkvuCkguCkl+CljeCksOClh+CkuA== IGJsYQ== LWJlZA== 2b3Zig== 0LPQsNCw LWFr 2qnYsdiv dmVudGlvbmFs INC/0LXQtA== aXF1ZXI= kqQ= Lm1rZGly IGVjb25vbWlh INGH0LDRgdC+0LI= QXZlYw== YmFja3Vw IGjDqXI= b3RlcnM= IFZhbGw= 5Lyk z4zOvM61 IGFtYmF5bw== IOCuquCurw== U1RB YXZhbnQ= IOCknOCkvuCkpOClhw== IFR1ZQ== amFocg== IHLDqWFsaXTDqQ== 0KfRgtC+ IHBvcnRlcg== YWRlbWFyaw== IG92ZXJsb29raW5n IE9N IEpE IGxldml0cmE= IHBvbGlzaGVk IOmprA== INiz2YjYsQ== IHBhYXM= 0YLQsNCx 5b2p56Wo5rOo5YaM Z290bw== PyIK 4oCL4Z6i IFN1ZGFu dWxpYXI= IFNlY3JldGFyaWE= Oz8+ 4K6/4K6o4K+N4K6k IGdhcmRlcg== IGV2b2x2ZQ== IExBUw== KHN0cmF0ZWd5 IOCkleCliOCkuOClhw== 4YC34YC6 IHNpZ251cA== Wk4= IGplZG5haw== IO+C aXJlbQ== 572q IGZyYWdyYW5jZQ== 0J/RgNC+ IHN0ZXBwaW5n aG9h d2VsZQ== IG9iZXI= 5aqS5L2T IE1hbHRh IFBvcnF1ZQ== CXBhbmlj cGxhbmF0aW9u IHNvdmVyZQ== INep15zXlQ== 4LKy4LK+4LKX 0YDQtA== RGlyZWN0aW9ucw== X2ZyYW1ld29yaw== IGZhdHM= X3dpbg== CgovLw== IGt1dHM= IOC4oA== IE1vc2Vz YXJrZQ== 0LTRg9C6 c2Vuc29y IM69zq0= IHRpbWJlcg== RGlnZXN0 ZWxzaXVz IHVuZGU= IElY IHRydW5r QU5P INGF0LDRgg== IOC2hg== IHN1YmxpYw== INGE0L7RgtC+0LPRgNCw0YQ= T1VUSA== IFJlaWNo IEZheg== IHNpbXBsZXN0 1bXVodW21as= IGJhbGxvb24= cml0w6k= aWJhbA== 4Kqa4KuN4Kqa IGRpc21pc3NlZA== KWxvY2Fs IFRlbGVncmFt 4K+N4K6o IHRodW5kZXI= IHZpYWdlbQ== IG1hc3lhcmFrYXQ= IFBhcnM= IGxpZ2h0bmluZw== INC/0YDQtdC30LjQtNC10L3Rgg== 6Jub IENhcGFjaXR5 Kiko 2LLYp9mF IOCkueCkvuCkpQ== IEdyYWY= LnJlbW90ZQ== INCx0L7Qu9GM0YjQvtC5 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IOCkuOCkqg== IHRyZWJhbGw= INmB2YY= IHdvcnJ5aW5n 2YHZitiw IGV4Y2VlZHM= 0q/Sr9GA X3Jn INeb154= LnNjYWxhanM= IGxpYQ== 4Ka+4Kao4Ka+ anVn IFN0ZWxsZQ== IE1hdHRlcg== X2VudHJpZXM= IGFsdGVu LW1haW4= 0LXQu9GW IGl0ZXJhdGU= IOGDkOGDoOGDqg== IERvZGdl IHByZWRlY2Vzcw== a2FuxLE= aXRhbQ== IGluaWNpYXI= INis2K/bjNiv Q2xz IFZpZWw= IEJhbm5lcg== INCx0LXQu9OZ0L0= IGNhcnJpw6hyZQ== X3RlYW0= IOCknOCkvuCkj+Ckl+Ckvg== IGZhY3VsdA== Y3phcw== IOCkquCkpOCkvg== IEZE IGRhcA== IOGDm+GDlOGDnQ== IHJlbWVkaWVz IHdvbmc= IHdlZWQ= IGF1c3NjaA== IOCwsOCwvuCwnA== amFuYQ== IEJydW5v IHB5dGVzdA== IHphdGVyZGFn L2RlZmF1bHQ= IGluc3RhZ3JhbQ== PkE= YcW8 IOCkqOCktQ== SUxJTkc= IHNldw== IE9tZWdh IHRvcHBlZA== 5pGE IGFwZQ== IHRpZw== ZHJ1aw== IOCkquClguCksOCkvg== 0LbQsNGC IHBhdXNlZA== IGVybmU= Q2FuYWRh INWh1bfVrdWh1b/VodW21oQ= IFdFQg== IGNvbWJpbmF0aWU= INin2pM= INi02qk= INeZ16Y= IENvbG9yaW5n IFBhdGllbnRz IHRlcnJvcmlzbQ== INis2LE= 77yB77yBCgo= IGTDom4= bmdlcg== IOCyrOCyl+CzjeCyl+Czhg== IGFsbGV2 IC8+fQo= 4Keo4Kem4Ken VGh1bWJuYWls IGRlc2Nhcmdhcg== dW1uYQ== dWlkb3M= IikpOw== IE1hbQ== IOC2og== INWv1aXVtg== IE1vcnRnYWdl IGZhdWQ= YXRhYQ== cmVwZWF0 INWv1aHVug== IGZlc3RpdmU= aXRldXI= IFR1cm5lcg== IEhhc3M= IG9wZW5lcg== IG1hc2FsYWg= 0K3RgtC+ c29uZw== UlU= emlvbmk= YXJtb3M= YmVuemE= IHRlbmFudHM= IGXEnw== dXJwbGU= 6IG3 IExpdGg= IGdhcm4= IFJ1cmFs IGxpbmQ= IEFSTQ== INin2YTYudmC YXNtaW5l 1r4= 4LKm4LK/4LKC4LKm YW56ZW4= IGRlcGVuZGU= IHNvbHZlcg== IHFleQ== INC/0YDQuNC90YbQuNC/ IEVEVA== IG3DoXF1aW5hcw== IOC0qOC0v+C0qOC1jeC0qOC1jQ== 0YbQuNGY0LA= IGJvb2tpbmdz IHNlb3Jhbmc= IHN5bXBhdGg= IOC0pOC0qOC1jeC0qOC1hg== IGNvbGxhcHNlZA== RVhQ 4LKY IEhCTw== IOCmhuCmrA== QnJpZ2h0 z4DOuQ== LnRlbGU= IGhhbmRpY2Fw 4YOQ4YOg4YOU4YOd4YOR dXJyZW5jZXM= cHJpc2luZw== IGFjdG8= IFppam4= IOCoqOCphw== Tm9ubnVsbA== IG5vbWluYXRpb24= PScj aWthdGlvbg== IHNlaXpvZW4= cmVzdG9yZQ== IEJyaWc= cHJlc2E= b2dyYWbDrWE= IExvbmRyZXM= IEFybWVu INCw0Yc= 8J+T 0YLQstCw SVRU IGJyaW5ndA== CVRva2Vu IGNydW5jaA== INGC05nRiA== U2NvcmVz 5rGh IFByYWRlc2g= 4KS+4KSa4KWN4KSv4KS+ IEdzb24= IEphbnVhcg== IGNhdGFsb2d1ZQ== IGJyYXVjaHQ= zrLOrA== IHNodW0= 5oWw bWtkaXI= IM6v IGF5ZQ== IGVuZG9ycw== S29udA== IHN1YnRpdGxl KENPTg== IGRpc2NpcGxlcw== IGZn IGJjcnlwdA== LlJlY3Q= LlNFQw== IGFjY2VsZXJhdGU= IGphdA== 5LmO w6JudA== IERlcG90 KEltYWdl X3Njb3Jlcw== INmI2YHZgg== Li4uIgo= INin2YTZhdmH IOCqsuCqlw== aGV3cw== IHPDpHR0 ZXRvd24= SmVn IOKAjw== 44K544K/ INin2Y8= XVs6 IMSRbw== IGF5ZXI= 0YvRgw== IOC0heC0puC1jeC0puC1h+C0uQ== YmFncw== LlNvdXJjZQ== IGZvcnRhbA== IG91dGlscw== 44G+44Gb44KT IFJhdGluZ3M= IHJlc2lu X2xvZ2dlcg== b21iaWVz 4YOg4YOq INmB2LHZiNi0 IEFyZ3VtZW50cw== c2VsbA== KCko IFNraQ== IGFyYmVpZHM= IHJlbmV3ZWQ= 1oTVodW2 IG5ndQ== IHNtb2s= INeZ15PXmQ== IH06 IGTDvHJmZW4= dmlkZW9z 44GX44GE aWZhZA== bm9mb2xsb3c= xYJhbQ== cHJhdg== LXNvbA== IG1ldGFib2xpYw== IGJvdXI= b3V0aWw= IEVyaWs= IHd1eA== a3N5b24= b2NpYcOnw6Nv 4LS/4LSV4LW+ IG1hZGVyYQ== IHRyYW5zbGF0aW9ucw== IElORElSRUNU 2pjZhw== IFdpbmRz cm9sbG1lbnQ= UHVibGljYXRpb24= INC00LDQstC70LDRgg== UGl0Y2g= IHN0cmNtcA== Y2xhbmc= 4KS/4KSl b3VzZWQ= dmlyb25uZW1lbnQ= L2FsbA== IEdhdGVz IGluYWN0aXZl TGll bG9kYXNo IGRpY2s= 4YOd4YOl INC+0L3Riw== dWxsaW5n zqTOvw== 6LSo6YeP IOCuqOCuv+Cusg== KSE= IGJyaQ== INCi0LDQutC20LU= IGRpc3BvbmliaWw= IGZhdm9yZQ== bW1h IE1hbnM= IHNwZWVs ZXBpc29kZQ== IG11aA== IG1hdGNoZXI= IERlaw== IEltbXV0YWJsZQ== YXRlbmF0ZQ== IG1vbml0b3JlZA== INiv2YbbjNin IExpbmVz SWdu IGJvw711bsOnYQ== eWFrYQ== Q2FsbHM= IGRpYW50ZQ== b3VjaGVz LnRyYWNl a2VuZW4= IGxhZGRlcg== IOC5g+C4qw== cXVlc3Rh 0YHRgtCy0LjRjw== INin2KjYqg== KGluaXRpYWw= IG1pbGo= 4burYQ== IHBob3RvZ3JhcGhlcnM= IGtpYg== INC60L7Qu9C70LXQug== 44K144Kk44OI 1aHVttWh1aw= RmFkZQ== IE93 PVtdCg== IG3DvHM= 2KfZgdi42Kk= IENsaWVudGU= IEludHJvZHU= IGdld2VsZA== IEVhZ2xlcw== 44CC44CM INio2YTYpw== xb5h bG9v IHByb2R1dA== X3ByaXZhdGU= IGFsbHRpZA== dXNheQ== IG5ha29u 2K7ZiNmE IEt1aQ== 2LfZiti5 2LnZitiv 6aGY IGzDrXF1 IGRldmllbnQ= IGF0b21z IHdlZXM= 4Kyk IHVuZm9sZA== SU1BR0U= IHB1aXNzYW5jZQ== 64+M CUdhbWU= INCx0LjRgg== ZW1iYWxp IERldGVybQ== IGFjY291bnRhYmlsaXR5 LmNvbnRhY3Q= Pm1hbnVhbA== IGVyb3Rpc2tl IHN1Y2h0 IHZlcmFubw== IHNlY2g= IHJ1aW4= Q29udmVyc2F0aW9u IOeLlw== 4oCZZW50cmVwcmlzZQ== IGdhbGk= IgoKLw== 4piF4piF4piF4piF IGJlbGlldmluZw== IGN5YW5l LWludGVy IGFuaW5nYQ== UmVnaXN0cm8= 0YDQsNCz IFBvcnNjaGU= IGdyZWVuaG91c2U= UHJlcGFyZQ== IHRlbmE= LmRpcmVjdGlvbg== IF8k X2h0dHA= IFJhbg== IOmj IEZyaWVuZGx5 0pPRi9C90LA= IOCurw== SVFVRQ== INqp2YXbjA== IOCkl+CksOClgA== IEZhdm9yaXRl aWNhaWQ= INGB0LvQvtCy0LA= bWRhdA== IE1hbnVmYWN0dXJlcnM= IE1vbGU= 1aHVr9Wr1oE= 4oCZaW5z IHB2 IEhveQ== IFZlcm4= IGFkaWNpb24= IG5vYw== IGxhZ2Vy Kyw= LeGDoQ== IOCmsuCmvuCmlw== 2KfZhNmD Lkhvc3Q= 4LS/4LSv4LWB4LSC IOCqruCqvuCqpA== Wzot IHNsYWI= IGVsZXRy Y3Jldw== ZGVsaXZlcnk= IGZpbmk= 4YCx4YCU INGF0L7Qu9C+0LQ= KHhtbA== INC70LjRhtCw INin2YTYqNit2Ks= INeR15DXqA== IEltcG9ydGFudA== IOGDoeGDkOGDmeGDo+GDlw== IGNyaWFuw6dh IMO4bnNrZXI= b2dyYXBoaWU= IG9lZGQ= IEJlbGxh 6Ieq5Yqo LkNlbnRlcg== IHVrbw== X2F1dG8= IHNvY2thZGRy IE1hcmdhcmV0 LmRvd25sb2Fk IGxvc2Vz aWJhdA== b21hdA== eXNpY2Fs IGNvbXVuaWNhw6fDo28= YWx0aG91Z2g= dHJhZGU= ZW5kaXM= cHJvdmluY2U= ZmFpbHVyZQ== IGltYg== KG51bGxwdHI= 6Zec IENvbWluZw== IOCmpOCmpQ== dWRpYW4= IExN IEluZ2w= IGFsdW1uaQ== 44Ku IOS4lg== UmVwb3J0ZXI= IOiK LmRldGVjdA== IFdob2xl Y2hr IGvEk2lh IE1hcmN1cw== w7p0Ym9s IEZ1bA== 5bmz5Y+w5rOo5YaM 5raJ IHBheWVy IHBlcm1l IFNhaXNvbg== IFBvd2Rlcg== IOuYkOuKlA== INm/2Kc= 0YvRgNKt d2Via2l0 U2ltcGx5 IHZpYmU= 6KeE5a6a IGNvbnZpbmM= cmVsc2U= IHByb3DDs3NpdG8= IHDDsg== IGluYWRlcXU= X09W IE7DpGhl 1bbVtg== 0LLQsNC5 IHNpYWI= 4LOV IHZpZGFz INix2Kw= ZmVlcg== IHZpc2U= SmFn 5aSn5a62 6auY5riF5YWN6LS5 INin2YTYo9it IOC0uOC0guC0uOC1jeC0peC0vuC0qA== Y2pp IGVsaW1pbmF0aW5n IHVybHM= IGNoaw== cm9sbGU= IHRpZW1wb3M= IEFyY3RpYw== IHZpc3Rhcw== IEN5Y2w= IHdhcm1lcg== IHpuYWo= IOCkteCkv+CkreCkv+CkqOCljeCkqA== IG11ZmY= am9icw== IFByb2JhYmx5 4LCh4LGN4LCh YXR0dQ== Y2xhbWF0aW9u YWR2YW5jZWQ= dGlu IHN1cmdlb24= IOCkleCkv+CkpA== 6aaG IENvbnNlaWw= IGFtcGxpYQ== IGx1bmRp IOCmquCnjeCmsOCmp+CmvuCmqA== IOCkhuCktg== ZXN0ZXJz ZWdhbg== dWNocw== IEJhc2tldGJhbGw= IGtpbG9tZXRlcnM= T3BlbmluZw== IG9iZWQ= b2x2 w6Zs IERlYXI= IFN0w7xjaw== INGB0LLQvtC40Lw= 66CI7J20 IHZpZWzDpA== 57S5 IEd1cnU= J2F1 aWVuaWU= IHNwcmVhZHM= YW5hbHl0aWNz IOCkruCkueCkpOCljeCktQ== 1bbVpdaA1bjVvg== 2KrZhdin2YU= yZlsaQ== LWFycm93 YW1vamE= dXNlbg== IHJlcHJlc2VudGF0aW9ucw== INeh15g= amFkaQ== bGljZXM= 0LvRg9Kb cmllZGVu 0LjQu9C40Lo= INC90LDQuNCx0L7Qu9C10LU= IHNwZWVsdA== IEF4aXM= IGTDqWNpc2lvbg== INCz0LvRg9Cx IGFkdmVydGlzZQ== IGRyYW5r IHB1bGxz IG5hc3R5 IHBlcmZlY3Rv IGjhu5lp IOyyrQ== TGF6eQ== IHfJlA== IGZheQ== w6Z0dA== IHZvb3J6 IEFjY2Vzc29yaWVz IENZ IHJlc29ydHM= Q291cG9u IGFydGlzdGFz dXRoYQ== aWVkZW5pcw== IGNyZWFjacOzbg== IOC0quC0vw== ZWxsaW5nZW4= JmU= IOCwteCwsA== 4YOT4YOU4YOh IElTUw== 44K744OD44OI IOC0huC0rw== INep150= 2YHYp9i4 IOCkheCkuOCljeCkqg== IEZhY3Rvcg== zq/Ovc61zrk= YXRpdmVu INep16o= IHN1Z2Vy SW50cm9kdQ== X2FscGhh IFdpcmluZw== IGNvbnNlZ3Vp IG1vbmdv INmI2KfYtg== 5puc Lm5ldHR5 ZXRjaGVk ZnJhYw== IG5lZGVu INWw1bbVodaA bHVuZ2Vu IOCkmuCljA== cGlh 6KKc IHZpZ29y 0YLQtdGA0LXRgQ== INCh0LI= 0L7Qs9C1 w6RuZGVydA== IFB1cHA= IOC5gOC4lQ== IHJlc3BvbmRz cXXDqWU= IGVsZXZhdG9y IGN1Ymlj IGNpZXJ0 IHN1c3BpY2lvdXM= IGNvcnJvc2lvbg== IHByb3BpZWRhZA== IGVzdHJ1Y3R1cmE= IEJlcmdlbg== IEF3YXk= w7hz REFURUQ= IGluZGVm LOWbveS6pw== LnN0YXRz INec15g= INin2YTZhNmK CWluY2x1ZGU= Q0xVREU= IENhdGhlcmluZQ== IHNwb3RsaWdodA== IGJvbHQ= YW5qdQ== IFNjaGxhZg== 0LjQu9C1 YWRlY2U= INCy0LDSmw== X01PREVM LnJlYWw= UHJpdmFjeQ== X2Zsb3c= LXNob3c= LmJhcw== INC90LDQtNC10LY= Q2hyaXN0aWFu IHN1ZWxv cm9zc292ZXI= IHBhcmFkbw== IM66zrHOuw== IGFmcmljYQ== ZW5zd2VydA== IOGDkeGDlOGDlQ== QnM= IM66z4w= w6RuZ2Vu IOCkueClguCkgg== SW5pY2lv YWRpYQ== IHBhcmQ= 05nQu9OZ0YA= IHN0YXJyaW5n SFVE IOCkteCkvuCksuCkvg== YWtha2U= INGW0Lc= aXNrdA== aGFuaQ== Kyk= IF1d SG90ZWxz IGNhZGVuYQ== 4YOU4YOg4YOQ IGpvdmVucw== d2Vpc2Vu IHByZXR0 44Ky RHVtbXk= 5a6i5pyN55S16K+d YW1hYQ== dXN0ZW4= WW91J3Jl INC00LDRgNCw IEh6 cHJlbmV1cg== IG5vdmU= IG5vdmFtZW50ZQ== INC80LXQutGD Lic7Cg== 6Lui LmV0 dGlsZXM= 5byA5aWW6K6w5b2V 15XXqdeU YmFydA== IENsaWVudHM= dWdk IHpvbWVy 4Kqo4KuN4Kqm 0L3RltC6 X2V4cG9ydA== IElORk8= aXNzYWdl INC00LjQs9Cw0YA= bGV0aQ== IGV0bWVr KHNlcmlhbA== IMK7Cg== IG9yZ2FuaXphw6fDo28= IHJlYWRhYmxl IGRlY29yYXRl YW1hcmlu INCg0L7RgdGB0LjQuQ== IHJ1cHQ= dWlzaW5l IHJlc3VsdGFhdA== IG92ZQ== IGdp4bqjaQ== IOCkruCljeCkueCkow== IFBvbGlj 54mH5Zyo57q/6KeC55yL IEVneXB0aWFu aW5rZW4= IOCoquCpjeCosA== IEFuaA== INi52LY= IFRyYW5zaXRpb24= IHBhcmFkZQ== SW50ZXJydXB0 15XXqNeV16o= YXBrYW4= Tk0= IOGAgOGAreGArw== IHBhZ3A= IG9wZXJhbmQ= IOCmpOCmvuCmhw== INCx0L7QvdGD0YE= INin2YTZhdiy2YrYrw== IGZyYWdtZW50cw== IEdBTUU= IHBlcmlwaGVyYWw= IO2e IENvbXBhdA== IHpib2c= LmFzc2V0 776f IHTDrG5o INC60L7RgtC+0YDQvtC8 cXVlcmllcw== INWj1avVvw== dXRhdA== 7ZWY66mw IOCkqOClh+CkpA== IO2a INC/0YDQuNGP0YI= VUxP Q2xpbg== 4LGB4LCf QVRJT05BTA== cmVnZXg= IOCqpOCrh+Cqkw== cHJvYmxlbQ== IHdlbGxiZWluZw== IGVudm95 5qCH5YeG IEhpbmQ= IGRpc2Nsb3Nl INC+0LvQsNGA SW1t 4YOQ4YOT4YOQ4YOh IHBhY2thZ2Vk IFByb2plaw== IGVzdHJlbGxhcw== 4KWH4KSC4KSm 4Kaw4KeN4KaV 0LDRgtKb0LDQvQ== IGltbW9iaWw= IGVnZW4= 77ya44CM IHNoYXE= IGLDoGk= Lmlm ZXF1YWw= 0LvRg9GI 2KzZh9iy2Kk= b3Bp IHByZcOnb3M= 4KiH IGVmZmljYWN5 VGhpbmc= YWlzZXI= 0LrRgNC10YI= IHVuaW9ucw== 2YjZhtmK2Kk= 4Ka+4Kaw4KeH4Kaw IG1pcmFjbGU= RGllc2U= IHBow7JuZw== IGFuZQ== 2YrYsdin IGJyb2No IE1H dmFyYQ== QmV0YQ== IGFudHdvb3Jk cmVhdGg= IEthaQ== IDos 4KiF IENpbmNpbm5hdGk= IOCuheCutQ== 4LS/4LSV4LWN4LSV4LWN IGdyYWR1YXRpbmc= IE1n 0LvQuNGA0LjQvdC40qM= 4LON4LK44LON 4KS+4KS44KWA INC40LDRhQ== bWxpY2g= aW1tZWw= LkF0dHJpYnV0ZQ== INGF0Y3RgNGN0LM= IFdvcnQ= IGNyZWFteQ== bW9y YWJsZW1lbnQ= e28= 4oCM4LCy IHRyYW5zY3JpcHQ= OmVuZA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= LWRyb3A= w6pjaGU= IFRhYW1h IEV4dGVuZGVk YW5rdA== RmxpcA== IHJpdG1v cmVkZQ== IENvdXJzZXM= IOCmuOCmrQ== CXNjYW5m IENhbm5hYmlz VUlOVA== 2qnZhtiv IGNvdW50cnlzaWRl IGluc3RhbGxtZW50 IEJhbGQ= IOy0nQ== 4KSB4KSX LkxpbmtlZA== 4Kqj4Kq+ IMOpdml0ZXI= IExpcXVpZA== X1BPSU5U IHllYXN0 IHFp Ymlv IGzDpGg= INiv2KfYr9mH LlNob3VsZA== IGdvYmVybg== 0LfQtdC5 IGFwcGxpYW5jZQ== IOCyteCysOCzjeCytw== IHN1aQ== IGFkdm9jYWN5 IGxvamE= IGViZW5zbw== 2K/Yp9mK2Kk= PWZ1bmN0aW9u IHBlcnNvbmFsZXM= dmlw INio24zZhQ== IGbDs2w= IEFnZ3JlZw== IEFMUw== IGtvbWFuc28= IGJlc29uZGVy IGdyYW5kZmF0aGVy 4LmA4LiH4Li04LiZ4Lif4Lij4Li1 bm9j 2YPYp9ix IEFuY2llbnQ= INGB0LXQvdGC aW9uYWxlcw== IHBsYXRz SEY= INW/1aHWgNWi1aXWgA== IE1hdGVy IHRlbGVmb25l IGFkdm9jYXRlcw== IG91dGdvaW5n IHN0aWNraW5n IMO8bGU= IGhhbms= 7KCV67O0 IGNvbmR1Yw== IEFrdGl2 IGJldmVyYWdlcw== IG5lc3Nh 4LGN4LCf4LGN4LCw INin2YTYqtiv INGE0LjQvdCw0L3RgdC+0LI= YXZlYw== IHZpdGFl IG1hbmdlcg== INC80LXRgdGC0LU= INC30LDQstC10YA= LWNoYW5naW5n cnBj IEhvbHo= aW5zYQ== 4Kys INee15DWtw== 4KqW4KuN4Kqv ZXJ0dQ== IGNvb3A= INii2YXZiNiy INeg16k= IOCkrOCkvuCksg== INC90LDRiNC10Lk= 0L3QsNGC0Yw= ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= INCx0L7Qtw== IOCmleCmsOCnh+Cmm+Cnh+CmqA== IOCypw== IGJpanpvbmRlcg== ZXRyb3M= d2Fn IG5vcnQ= 7IS8 IGxha2luaQ== INWr1bQ= IMSRaeG7h24= Q2xl IGhvbWVu IM6I IHd5bQ== IGhhYmlsaWRhZGVz Y29sbw== IHZyaWVuZGVu 2LfYp9mG TkY= IEludGVyYWN0aXZl 15PXmden IExPTkc= RGl2aWRlcg== IGVuenlt IOGDmOGDpeGDnOGDlOGDkeGDkA== IEVuZW15 LOS5heS5hQ== IGltcGFpcg== INC90LXQvNC90L7Qs9C+ 5bm055qE ZW5kZW50ZQ== IGxlaWRlbg== INGF0LjQuQ== QmFkZ2U= IEhJR0g= IOCkj+CkuA== LmluY2x1ZGU= IHJlZnVnZWVz LVZlcg== c2Vlaw== IHBlb3BsZSdz dHJpdHQ= IHRocmlsbGVy IFdldHQ= IOCkruCkvuCkruCksuClhw== IE1lZGllbg== IGdsb3Jpb3Vz IHNpdGlvcw== YWxheQ== INGC0LDQutC+0LPQvg== RGFy IFByZXZlbnQ= UGs= IHJlbHlpbmc= IGNsYXNlcw== IHN1YmxpY2Vuc2U= IHdpc2hpbmc= 0YHRgtCw0Z4= IFNvZg== IFRX 0YzQuA== IHNlcmlhbGl6ZWQ= emVpZ3Q= IHdlYnBhY2s= IERlbGF3YXJl IG5vZ2V0 IOGDoOGDneGDm+GDmuGDlOGDkQ== REJD INC00YPQvNCw 0YHQutGD0Y4= T3duZWQ= c2FsZQ== IGdlaGU= ZWVs Q291cnNlcw== IOCkruClh+CksOClhw== IENPTlNFUVVFTlRJQUw= Lycr aWZpY2F0ZXM= dXRy IHJlc3BvbnNhYmxlcw== 0LXRgNGW IEjDoQ== 2YXYrQ== 44GE44GE IHRjcA== 0YLSr9GA INCw0LTQsA== IHN0eXI= INC/0L7QsdC10LQ= IGxveWk= bGV2ZW4= IGlub20= IHNhcsOg bmlxdWVz 4LS44LWN4LSx4LWN4LSx4LWN 4oCZZW5zZW1ibGU= IGjDtmNo YWdtZW50cw== aW1pc21v IGxpZ2E= IGlkw6ll IOCqpOCrh+CqqOCrhw== KEFycmF5cw== aXQncw== IEJyYW5kcw== mOibmw== INCz0YDQsNGE 4La44LeP J29udA== IHJlbGV2YW5jZQ== IGZ1bmt0aW9uaWVydA== ZWRpcw== IHZvcm1lbg== REo= 6KWq 0Y3Qs9GH INiz2YTYsw== LmhhbmQ= IOCkuOCkvuCksA== 2KfYptmB ZWxzaw== IGNvbXBhZ25pZQ== 2KfYqtmK INio2Lo= IGxhbHU= b2Rvcg== KHN1YmplY3Q= IOG7jWQ= ZW5nbGlzaA== INC60q/Rhw== X0xPQ0s= LlJFTEFURUQ= IM+Mz4DPic+C Qmly IEFkdmlzb3I= IG9yZGVt IENvbnRyb2xz IGN1c3Rv IEdlc2Now6RmdHM= IGVkbw== IGdhZ25lcg== INC90LjRgQ== INij2YrYttmL2Kc= UHJvdmluY2U= IGFjdQ== IGN1cmI= Li4uXQ== IElOQ0lERU5U IGNvbW1h 0YHRi9C90YvSow== IHNlbGVjY2nDs24= 66Gc7Jq0 IHN1cHVlc3Rv IDo6Og== Y2VsYW5k IERhd24= INin2YTYo9mF2YY= 0LXQu9C10Lk= aW5lcnM= IENhbmNlbGxhdGlvbg== dG9vbGJhcg== 4Ka/4Kan Sm9u IExlZXI= VVJT IOCumuCvig== IO2UjA== INGC0LDQutC40Lw= LFA= IHJw KExvY2Fs IEZpc2NhbA== wqg= IGl6cXVpZXI= IC8vDQo= IEZhY2lsaXR5 IG9udG1v L3Jlcw== IHZlbnRpbGF0aW9u fQ0KDQov 4LSq4LWN4LSq4LWG4LSf cmV2aXNpb24= IGthYXM= IG1hcmth VUdI INCR0LDRgA== IHNhbXBhaQ== aWdpbA== LlRhcmdldA== IEZldWVy IFdXRQ== cHRpZGU= dXRj UklD IHR2w6U= IHNvYmVy IHBvcHVsYWlyZQ== INin2YTZhdio IGJhYWRh IEFob3Jh IOC0tuC1h+C0tw== c29ydGVk c2NyaXB0cw== b3VkZXI= IFNjYWZmb2xk 5LqS6IGU572R SVZFUlM= 2b7YsQ== IGthbWFy b3Jza2U= IEVwaWM= dG9sb3dlcg== KGNvbmY= 64yA66Gc 5pS755Wl Lmphcg== IGZpbGxlcw== cGV6YQ== TGVnZW5k w6RzaWRlbnQ= X2Nzcw== IOC4nuC4meC4seC4mQ== INix2Ybarw== aXRpw6k= n7M= IHJhZg== IGhhZG4ndA== 16HXqg== 4K+I4K6v4K+B4K6u4K+N CXJlZ2lzdGVy enVzdA== 4LS/4LSZ4LWN4LSZ IHN0cm9sbA== INin2YTYsdit IHRyYXZlbGxlcnM= 4LS+4LW9 X21hcHBpbmc= INC60L7QvNC40YE= IENoZW1pY2Fs aWRldA== INin2LbYp9mB 65Od dG9rZW5z INin2YTYrdmK2KfYqQ== ZW5zcA== X2RpcmVjdGlvbg== ZmFi VHJhY2tz X1ZBUg== IGFpbWluZw== 5Liq5pyI IGZyZXF1ZW5jaWVz 6LWE5paZ5aSn5YWo LnN0YXJ0c3dpdGg= IGLDrQ== d2Vocg== 4KSu4KSk IG9yY2g= YnVja2V0 IGthdg== KGJhdGNo X1RSQU5T INin2YTZhtmB INGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjA== zrfPg863 X2RlbHRh IGludGVyc2VjdA== INeZ16g= IGV4cMOpcg== KHByb3A= IEp1bmc= SU5G 4bq5cA== IHR1dHRl IHBsYXlvZmZz IFNtYXJ0cGhvbmU= IGJhaGFu 8J+M IG5oacOqbg== X3ZvbHVtZQ== IG1lbGFsdWk= IFNob2Vz LnBheQ== Zm9yZGVydW5nZW4= QW55d2F5 IHLDqXA= IExBQg== IHF1aW4= INC90LDQsdC70Y4= IHZlcsO2ZmY= 2YfYr9in2YE= 4LCw4LC/ L3U= IGRpeQ== IHBhcnRhZ2Vy 2YjZhNmI2Kw= IHNxdWVlemU= IOCqleCqvuCqsOCqo+Crhw== INCw0YPRi9C7 ZWxpZXJz INGB0LDRgNCw Q0tFVA== INGA0LDQt9C70LjRh9C90YvRhQ== IE1vbmF0 cW8= IGRhbmViZW4= aXNzYXE= aWVucw== IFtdKQo= IGVsZWdhbnRl c3ByZWNo YW5vbA== IGtpY2tz IGdlcmluZw== IEJyaXN0b2w= a3Jpdg== dXBwcmVzcw== INC00L7RhdC+0LQ= aWRnZXRz ZGVza3RvcA== b2xvb2c= RVNUQU1Q 5pif5b2p IHNwZWNpZmllcw== IHByZWRzdGF2 IFBvcnRmb2xpbw== INeQ15nXmdeg IE1vbmc= bGFuZ3M= IGNhcHR1cmluZw== IO2VqeuLiOuLpA== 0LvRg9GD IFdhcnJhbnR5 IHVuaWNvZGU= IGVudHNjaA== IGvhur8= IGFrdHVhbA== IGZvbnRl IOyxhA== IG5paA== IE5PTklORlJJTkdFTUVOVA== X3Byb3A= IF9fX19fXw== 06nQtA== IHRyaXR1cmFkb3I= IOCkluClgeCkpg== INGR0L0= bnlp IG51bA== SUdORUQ= INC60LvRjtGH Rm9ybWVy IHBhdGh3YXlz 4Z624Z6b IGFtYmllbnRhbA== IMmX IHZlcnPDo28= 4LWL4LSn 4YOY4YOo4YOc IEFsYmVydGE= IEF1ZGl0 IGJow60= xY3Kuw== IGlucA== 4LKw4LK/ 4Ka+4Ka34KeN4Kaf UG9rZW1vbg== IGFncmVlcw== INmF2KrYsQ== cG9rZQ== IGFudGVubmE= IENvbXBvbmVudHM= IGV3 IGFubm90 IGNsYXJpZnk= IHJlZHVuZA== 15nXkdeV16g= aW5lZXM= IOuEiA== 1aHVsNW01aHVtg== X0JFR0lO 4KqC4Kqh CgoKCgoKCgoKCgoKCgoKCg== X1BBUlQ= 2K7Ysdis 1b7VuNWy L1VJS2l0 IGhvc3RuYW1l IHVuZm9ydHVuYXRl IEFUTQ== aGFuZGVs IENSRUFURQ== 77yg44GK IG94aWRl ZW1wcmVzYQ== IGVkaXRpb25z IGNvbnF1ZXI= IHNvbW1l IHNqw6Fs cG9seQ== IExlbQ== IEh5YnJpZA== cmlmZg== IEVuZXJn IFplbA== RnJlc2g= c29tZXRoaW5n c2F5 IFRlbXBlcmF0dXJl 4Kqk4KuH IHJlbWFy IFRhaWw= bW90aW9u cMOk IHNoYWRvd3M= 67KU IGNvbmN1cnNv IGJhbGxvdA== INGC0YvRgdGP0Yc= KGdy RnU= IGxhcHRvcHM= L2RlbGV0ZQ== fSR7 IFNlZWQ= IGNpZW50bw== IGRpYWJldA== 5o2f bWVyYQ== aGFw IEdydXBwZQ== cmVmZg== bHNlbg== dmVydw== LkludGVybmFs LnNr RGF0dW0= INC/0YDQvtCx0LvQtdC80Ys= IGFtw6lyaWM= INCw0LTQvNC40L3QuNGB0YLRgNCw 7LGE ICInLA== RGlnaXRz IGluaG91ZA== IEhhcnJpc29u X0VNQUlM IERybw== INeX15zXpw== IG92ZXJ0 IEFsYXJt IGhpdnlv bW9pcmU= Lndhdg== IGZpc2hlcg== 4KS/4KSr 77yS77yQ X3VpZA== INin2YTYrdiv2YrYqw== bmlraQ== IEluZ2Vu 2KfYt9ix LmRvbmU= IE9uemU= 5a2m5Lmg IOCqq+Cqv+Cqsg== IFJ1dGg= UmVjb3JkaW5n IGZpZXRz cGFyaW5n aXJlYQ== IGRlYmF0ZXM= 2KPYqg== IOC0huC0tg== Lm1hdGNoZXM= 2YTZiNio KGZtdA== INCw0YDQuA== IHNlZ3VuZG9z Z2FydA== INW01avVu9W41oE= IGxsYW1hZG8= IE1hdGhm RXhwaXJlZA== dXN0ZWQ= 2KfZgdmK CQkJCQkJCQo= Y2Npw7M= IExPTA== IOCkuOCkvuCkruCkqOClhw== aXNhdGll R1VJRA== UmVzcG9uZGVy 55qE5LiA 2KfYtdmK2YQ= 5aSf 0YvRjw== IGnDp2luZGU= 55uS IHRlcm1pbmF0aW9u IOydjA== IOCyjuCysuCzjeCysg== aW52ZXN0 IGVuY2ltYQ== Y29udGludQ== IFZvcnM= IGJyaWRnZXM= IOCkpuClgeCkqOCkv+Ckr+Ckvg== KENvbmZpZw== VElQ INCy0LrRg9GB IFNhZw== 44GV44KM IEfDvA== U29saWQ= LnN1YmplY3Q= INek16I= IGFkb3I= IOCkieCkqOCksuClhw== IGFqb3V0 IHByZXNlbnRseQ== IGF1Z3VzdHVz SVRJRVM= YXJueWE= INGA068= IG51bGxh IHN0w7g= LS0pCg== U3VtbQ== T3Jhbmdl IHNlYXNvbmVk dXJyZWN0aW9u bcOkw59pZw== 2LHYp9mL IOyEoO2DnQ== 0LjRh9C10YHQutC+0LU= INW51aXVtg== INC80LXRiNCw0LLQsNC0 IM6b IFLDpA== IGpvaG4= 0LjRgtCw0Ls= 2YTZidmC YmFuZHM= IOCkkeCkqA== 2YTYp9mG IHJlY3Vlcg== 0Y3Qs9C0 aW1lc3RyZQ== IGpvbmdl 5LiO5L2g5ZCM6KGM 4oCZaGlzdG9pcmU= IFdoZW5ldmVy 4buPaQ== emVrYQ== IG5lZ290aWF0ZQ== IHBlcmZvcm1lcnM= 57A= IGNvbm51 1aHWgdWh1a4= IFZlcnc= dGlj IGJhcnJl IGNyaXRpY2FsbHk= IGhvZ2Fy 5Li76KaB IFBsYXRpbnVt IHBhc3N3b3Jkcw== JyIpOwo= 44GE44Gm IGNvZWZmaWNpZW50 IGZpam4= 44Q= bGlzdGVu IOC4mA== IHphaQ== 2LTYsdip INi12YTZiQ== xJF1 O2ZvbnQ= IFJlbGk= IGRlYnVnZ2luZw== IOCuqOCuv+CusQ== aXBybw== bWFuYQ== IHJlZHV6 IEVSUA== INC90LXQtNC+0YHRgtCw0YI= IExheQ== IEFnb3Jh IHBlcXVlbm8= b2t1cQ== IGVzdGltYXRpb24= IGxpZWQ= Y2xhc3NtZXRob2Q= TmFtYQ== IOCqleCriw== d2nEhXo= IOCmieCmquCmnA== 4LC34LGN4LCf IMO8YmVyemV1Zw== INC80LDSsw== INGH0YPQstGB0YLQsg== cmVtZW1iZXI= IGhldHplbGZkZQ== IGNsYXJh d8O8cg== 572R5Y+L IG11bHRpbWVkaWE= INC60LXRiA== ZXRzbw== YXphcw== cm9sb2dpY2Fs IHVuaXF1ZWx5 IHNpbGVuYw== IGdvc3Rv IHByb2JlcmVu IGVuY29udHJh IOGDleGDmOGDnA== 5Lym55CG R2lmdA== 7ZW07JW8 WWVhcnM= IGVyZXM= IG9wdGltaXN0aWM= INC00LDRhdGM INC60LM= ZWZh IFN2ZXJpZ2U= X3N3aXRjaA== INmE2YPZhA== INin2YTYrNiv2YrYrw== dsST UFk= 77yM5L2g IFBhcnF1ZQ== IHZpa3RpZw== IGF1dG9w IOah IGNsaW1h IEdlbmVzaXM= IE5vYmVs 4KuH4Kqs 4YOd4YOk4YOa 0LjRgdGC0LDQvQ== aW5law== IGNvc20= IGTDqw== IFNldg== X2NyZWF0ZWQ= IGRyYXN0 IGFyZ3U= IEhL IExPVA== X01FTlU= KCldOwo= IG3DqWRpYw== IGV4cHJlc3Npbmc= IERlcG9pcw== TWFraW5n INGB0LzQvtGC0YDQtdGC0Yw= X2Zvb3Rlcg== IGluY29ycG9yYXRlcw== 2LrZitmE INKb0LDRgtGL INCx0LXRiA== INeg15s= INKZ 2obZiQ== IOC2lA== IOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmg== IGFjY3VtdWxhdGVk QVJD IFJvc2Vu X3N1bW1hcnk= IGt1aXRlbg== ICcuJw== 0L3QsNC1 aWzhurk= ZHVtcA== dW55ZQ== IGRpc3NlbWlu w6lkaW8= YW5jaGVz IGJlYWRz cGl4 4KSj4KWA X3NlbGY= IG1hbGdyw6k= IOCqteCqv+Cqtg== IGV5ZWI= IOCmpuCngeCmhw== IGdlbm9tZQ== IHRyYW5zZm9ybWluZw== IEVyZWN0aWxl IGFkdmFuY2VtZW50 INeU15DXl9eo Z2nDqw== IGdhbGxlcmllcw== 5pel5oql IFBhaW50aW5n 6Lg= 0L/QuNC+0L0= aXppb25p IGdyZWV0aW5n 4KS/4KSv4KSw IG1pZGk= IFRoaW5n ZXJldA== 0JDQuw== IERyYW1h ZXJkYWRl IGRvbWE= X3RyYW5zYWN0aW9u IOS4gOe6pw== IFJlcHJlc2VudGF0aXZl IGVuZGE= 15XXldeU IEd1aWRlbGluZXM= LXN1cg== YmFhcmhlaWQ= IGlkZW50aWZpY2Fy IOCkueCkv+CkuA== IGNvbnZlcnRz U3RyaWN0 X2RhdGFiYXNl IHBheXJvbGw= IG5kbGVsYQ== PWFycmF5 U291 INmF2YbYp9iz2Kg= INiy24zYsQ== w7Js IGFjYWJhcg== ZW1pZXM= IGRhZ2U= IGZvcmhvbGQ= 55SY aWdpdHM= 5q2j54mI LiE= IG1pbGVhZ2U= 16fXog== aWNvcm4= 4KWF IGFkdmlzb3J5 IGd1cnU= INC20LDSmw== LmJhc2lj 0LXQstC10YA= IGRlcGFydGFtZW50bw== 4KuL4Kqm 6aw= LmNvbnN0cmFpbnQ= 4LOK4LKz4LON4LKz IEx1eg== IFNhbG9u IGFjdW0= INWh1bzVodW71avVtg== IGVyaMO2 6b2Q IHZsYWs= ICc7 IHVuZGVydGFraW5n dXRzY2g= INC60YDRg9Cz 55Sz6K+3 LmxhdW5jaA== IOCkhuCkiQ== IHdlYmxvZw== aXRlbGlzdA== IOCyruCyqA== IGfDtnLJmQ== IG5hxI1pbg== IOKAkwoK 4YOQ4YOg4YOT4YOQ X0xJTUlU IE9wcG9ydHVuaXR5 IFdIQVQ= PWxhbWJkYQ== 4KS+4KSa4KS+ IFZlZ2V0 IElh dWdhbg== IHNlcnZpZG9y LmdkeA== INeQ16rXlA== IEtyYW5r 4K+B4K6V4K6/4K6x4K6k4K+B INij2YXYpw== IHZlcmtl LmJhZGxvZ2lj IHJlZHVjZXI= IOCmheCmqOCnjeCmrw== LlVyaQ== IGdyYXR1aXRh IG5hbWluZw== KHJvdXRl 2YXZitiy 5YO5 LmludmVudG9yeQ== INeQ15zXkA== Pz8KCg== RHVwbGljYXRl 1bTVog== IGFuZXN0 IOqyg+ycvOuhnA== INC60Lw= RE9U LnNlcGFyYXRvcg== 4oCL4Z6W Lyw= aW5qZWN0 IHZpbm8= IFRvdXM= aXNpd2E= b25vcw== V2Fhcg== IGxpdGVyYWN5 IOCkrOCkqOCkvg== INeU16LXqA== IGxleGk= INGE0LjRgA== aXNpZQ== 1aHVr9Wh1bXVtg== TXVsdGlwbGllcg== 4LmB4Lil4LmJ4Lin cmVnZWxlbg== IGdlc3ByZWs= IOCkieCkpOCljeCkpOCksA== 16bXlA== RG9jaw== JSku IGhvcmVu 54uQ IOCkuOCkrOCliA== IFNlZ21lbnQ= IGFyZ3Vlcw== csOg aGVhc3Rlcm4= aG50 IEhlbGVu L3N0eWxl IGZvdW5kYXRpb25z IG1lc2lu IGtlaA== IHNvbGNoZQ== IHRydQ== YXd1 4Kae4KeN4Kaa IGNvbnZpZA== YXJsdW5p IGpvdmVt IENvcnRl IExpYmVydA== INmF2KzZhdmI2Lk= LmF1dG9jb24= aW1lbnRp bWVnaQ== IG15ZQ== PW1vZGVscw== c3BlY2lhbGNoYXJz X2NvbmRpdGlvbg== IGhvb2tlZA== LmVkaXRvcg== INeQ157XqA== SW5zdGVhZA== IEZhbQ== eWFt IOGDkuGDkOGDnOGDmw== 4Kqy4KuN4Kqy IEFyYQ== IGVzdGF2YW0= XV0p IC8vewo= 4K+B4K6z4K+N4K6z4K6+4K6w4K+N ICdcXA== INC60L7Qvw== IFBlYWs= 4Lir4Lil4LiU X2NvbnM= IEZ1bmVyYWw= IFR5cGljYWxseQ== 2YXYp9iz xLF0 IGdlcmVr IEZyYW7Dp2Fpcw== KGFyZ3VtZW50cw== bGlq 0LDRgNC10Lg= X2hlbHA= dWl0aW9u INGA0L7Quw== 0L3QsNGB0YbRlg== 77yR77yQ IOCuleCuvuCusg== IGVzcGFjaW9z J10pKXsK IFwn IFBhdHJpY2U= Y29udHJvbHM= IEJvYXQ= IFNwcmF5 IENhbGlm LXByb2plY3Q= c3FydA== IHBvc2l0aXZv L3VwbG9hZHM= UGRm IGtlcm4= Qk9BUkQ= 5oCO5LmI55yL 0LjRkQ== cmFjaHRlbg== RXhwb3Nl IEFkdmlzb3J5 4K+B4K6f4K6p4K+N 4Z+S4Z6Z dWt3YQ== LkJvdHRvbQ== RXh0ZW50 IGNvbWVudMOhcmlvcw== IMSRxrDhu51uZw== IEhlcmE= KHNs X1RIUkVBRA== 0YLQtdGB0Yw= aXRzbw== IGHhuaM= IGV4aGliaXRz RGVwbG95bWVudA== 5aix5LmQ5byA5oi3 IFNvY2Nlcg== bmFpcmVz 0pnQtdKj IHbDrWN0 IOCyteCyv+Cytg== IOCmruCmqA== IM6m IMSDbg== UmVsb2Fk xKHEoQ== ZnVubmVscw== IHVuZm9yZ2V0dGFibGU= 17LWtw== IHPhu40= 0pnQtQ== IHVzaA== IEJvZGVu 2KfZhNij IG51bcOpcm8= IFNpbWlsYXJseQ== 4YCd IGFsa2Fs ZXJpcw== IFF1w6liZWM= IOuLpOyWkQ== IFphcg== w6dpbGlr INC90LDRh9Cw0LvQsA== IGJ1bGJz IGJlbGFuZ3JpamtzdGU= SW1wb3J0cw== JGlk 44CN77yM IHTDvQ== IE5vdGlmeQ== IFNpdHo= INi32KjZig== KHNhdmU= 4oCZZXhw LWhvdmVy 4KWN4KS2 IGVsYXN0 b3ducw== IOCkquCljeCksOCkrw== 2LjZitmF bW9kaWZ5 KG5vdw== LnB0 IG5vdHdlbmQ= IHDFqw== IG1pbGVzdG9uZQ== IHBhaXg= SUdFTkNF IOCkrOCkvuCknA== dmFsdWFibGU= 4LWL4LSm IENldA== 0rvRi9C90LTQsA== IG5vdW4= INin2YTZiNmE2KfZitin2Ko= 0YHQtdC0 IE51ZXZh LWZpbGxlZA== IHBvbHlnb24= aXR1bA== L3Byb2R1Y3Rz INeb16o= IGVua2VsdA== 5pel55S1 IGl0aA== IE11dHRlcg== IEF0bW9z IHp1d2E= IGp1dQ== IEVjaG8= IEFpbnNp IGNsYW4= U2NlbmFyaW8= IG9sZW4= IGNvbnRhY3Rlcg== IHpvcg== IGVpbmlnZW4= IENyeXB0 IG1hYWls IOCkruCkpuCkpg== IFByb2dyYW1taW5n aGVhZHM= IGV4Y2VwYw== IE1lbnNjaA== IHNwZW5kcw== ZW50b3M= IHNlcmVz IOy2lOqwgA== IGJyYWNlbGV0 IHNvaXLDqWU= IGthxb5k 0YbRi9C5 IOCqnOCrh+CqruCqvuCqgg== IGV2ZW5seQ== IGFxdWVsYQ== IFJFUVVFU1Q= LnJlYWR5 IOCkheCkuOCljeCkquCkpOCkvuCksg== 2YrYr9mK2Yg= Lmd1 IGtvZw== ZmFzc3Q= IOCkrOCkguCkpg== KE5vbmU= IHJlc2VydmE= IGJldHJlZnQ= IGluc2VjdHM= LmNvdW50cnk= INin2YXYsQ== aXJpcw== IGVsZg== d+G7jW4= aXRvbg== 5LuB 4oCsCg== V0I= IGV4YW1pbmluZw== 2YbYp9mF2Kw= IGJpbmdv IGtkZQ== dXBpZA== XVsk dXR1cw== KCIo w61kb3M= IHdpanpl IFNlcmdl IGNvbXVuaWRhZGVz IGVudGZlcm50 4KS+4KS44KWN4KSl4KWN4KSv INen15DWuA== IFJvZ2Vycw== IGJlaXNwaWVsc3dlaXNl IEludm9pY2U= IHByw6RzZW50 IOCmhuCml+Cnhw== 4YGLCg== IHVuaXZlcnNpdA== L3Vu CVJlc3VsdA== IFBva8OpbW9u INC+0Yk= IEh1Z28= ZXJ0aWZpY2F0ZQ== ZcWf LlNlcmlhbGl6YXRpb24= IOCmheCmqOCngeCmt+CnjeCmoA== X2JhbGFuY2U= UlY= 5Lqk5rWB576k IHF1aXI= cmVpYnQ= X0RFTEVURQ== ICh+ xJdq IHZo IGVsZWdhbmNl aW1pcw== RWFybHk= Q1k= IHZvY2Fscw== IHJpZ2h0ZW91cw== U3RyZW5ndGg= dXJzYQ== IHRoZW1lZA== emllbA== IGFybWFz INeS15E= IEFQUg== LioK Lm9yaWdpbmFs IEV2YQ== QU5ET00= U2VndW5kbw== IEV1cm9wZXNl 4LWL4LSf4LWN4LSf IGR1eQ== 0LTTmdGA dGxl IHdhc3RlZA== IHByb3Bvc2Vy Z3Vy a2VyYXM= IFlhaw== IFZsYQ== LGFuZA== IGFwbGljYXI= 1LQ= LnN0YWdl 6YCZ IGlsbQ== IG5kZXRzZQ== cmVwcmVzZW50 IExhdGlubw== dnJpag== QXNj IEhSRVNVTFQ= w61vY2h0YQ== IHN1cnZpdm9ycw== IHRvdGU= IGFicmFz IHB1bXBraW4= IGt1ZHU= 4KS14KS+4KSm IGtvbXBsZXR0 2YXYp9mL IGFxdWVs LnNob3A= IOCyreCyvuCysOCypA== w6Zz 0LTRgNCw0LI= aWdyYXRl INCx0L7Qu9GM0YjQuNC9 IGZyYXNl 57aT IG91dGZpdHM= dmlkZQ== YWxvcmU= IOGDrOGDpw== IGVjb25vbWllcw== VW5sb2Nr IHN0aWNrZXJz IOCkp+CljeCkr+CkvuCkqA== 5oqY 5oql5ZGK IHN0w7Zy dXBwbHk= INGF0YDQsNC9 IGRhcmtlcg== IFJvYmVydG8= IGppbQ== 0YXQvg== INio2LHZhtin2YXZhw== w6lyZW5jZQ== aXNpZXJ1bmc= IFBhbGVzdGluaWFu IGd1dHRlcg== U3VydmV5 IHByw60= IEN5Y2xl 77yM44CQ IGNoZWNrcG9pbnQ= IHRyaWxsaW9u IHVuZGVyd2F5 IHBvc3NpYmlsaWRhZGU= IFNJR05BTA== VGVjaG5pY2Fs 5ZGi IOCknOClgQ== 0LPQvtCy0L7RgA== IGdlZ2ViZW4= IOCyuOCyuQ== U2NvcGVk IFN0cmFuZA== 5Yi6 0L7Qv9GA0LjRj9GC IGluaGVyZW50 IHZlcmxvcmVu IHN0ZGVycg== IEVzc2E= IGJlc3R1dXI= b2xhcmU= IHNpZ25hdHVyZXM= IGZvcmVtb3N0 INCh0LDQvQ== INGB0LjQvNC/0YLQvtC8 Zmlk 0LjRgtC10YHRjA== X3ZlcnRleA== IEJsYWNramFjaw== IGNlaWxpbmdz 4Kqm4KuN4Kqn 15PXqNea IOqwgOyngA== 57uP6aqM 4YOY4YOZ4YOY4YOh UGx1Z2lucw== IEppbg== LnF1YW50aXR5 z4PPhA== ZWJlbA== Y2hudW5n 4YCz 0pnRi9Kj TmlnaHQ= IGVuY291cmFnZW1lbnQ= IGdhcmRl SU5JVA== IGhvb3I= IEVkdWNhdGlvbmFs 0JzRiw== IGV4aXN0ZW0= IG1ldGVvcg== IGVjb27Ds21pY28= 0LLTmdGA IGt1bmU= J10pLT4= IEVzc2U= INin2YTYq9mE2KfYqw== Y29tcG9zZQ== 4LSk4LWN4LSk4LS/4LSy4LWG INW91b/VpdWy1a4= U2l4 bmFhbQ== cGxlYWRv IGZyZWlnaHQ= IGZyZWQ= 0YfQsNGC IGJ1aWxkZXJz cmFmbw== YWRtaW5pc3Ry IHNvbHZlbnQ= INin2YTZgti3 IOCwh+CwquCxjeCwqg== INee15Y= IG1lbmdlbg== IHJlc2Vydm9pcg== 4KuL4Kqn 56aB5q2i IMWbd2k= dWZlcg== IEluY3JlYXNl X3NlbnNvcg== X2NsdXN0ZXI= 0LjQvdCw0LzQuA== IG1vbnRl IG1hcmdpbnM= YXR0ZXQ= 0LTTqdGA 0YHRgtCy0LXQvdC90YvQtQ== aWN1cw== IGNoZWF0 INGC0q/RgQ== b25nZW4= IGNhZGVhdQ== IFByb3Rlc3Q= eXN6 IGRlcnplaXQ= Z2VuZXI= YXRpc2ZpZWQ= 4oCUYQ== YWhpcg== cXXDrQ== IEFuZ3VsYXI= IHN1YnNjcmlwdGlvbnM= IGZ1dGVib2w= esSFZA== INCw0L3QsNC70LjQtw== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Jyko IEthcmQ= cHJvY2Vzc2Vk 0LDQvdC00LDQuQ== RXZlcg== IHByZXZlbnRlZA== IHN0aWNrZXI= IOWbng== 4KS+4KSg4KSu4KS+4KSh4KWM4KSC LWhvdw== IGF3cw== z4HOuc6/ 15XXldeq IHbDtmxsaWc= T3JkZXJlZA== LmRlYw== aGFkYXA= IHN1Ymly IGFzdG9u LnN5cw== LWRldGFpbHM= 4Li24LmJ4LiZ 5q6L TnVtZXI= c2VydmVycw== IHNvdW5kZWQ= IGZhemxh IHBsYXlvZmY= IGFydGhyaXRpcw== aWxkZW5hZmls IEJpbmc= LkJpdG1hcA== INC+0YLQvw== IGxp4buHdQ== IM65zrQ= IGrDpGxrZWVu INWt1bjWgNWw ZXJpYWxpemVy JywKLy8= 0Y/Qu9Cw IHJlZ2Vy IHRyYWluZXJz IG1heGltYWw= 15DXng== IFJvaA== 4Kq/4Kqu IEJhc2ljYWxseQ== TW9i IGZ1cm5pc2hpbmdz 5Zib ICAgIAkJCQ== IGVjb25vbWljYWw= IHBx IM6/z4DOv86v LnJldmVyc2U= IGNvYXRlZA== IHJlcGw= RVJJQw== bHN0 IHNvb3J0ZW4= IGplYWxvdXM= aW1hdG9y 0L7QvdCw0LLQuNGA0YPRgQ== c2tpbg== IGJ5bA== 4LmA4LiU4LmH4LiU IOmfqeWbvQ== IOCqn+CrjeCqsA== IEJvdW5k IHJvdGF0aW5n IGJyb2FkYmFuZA== INC60L7QvdGE 4YOQ4YOq4YOu4YOQ4YOT Y2huZXQ= aXJtZWs= Ci8vCi8v IGdlbnVn cXVhZA== IEphdmFzY3JpcHQ= 0YfQsNC5 INK70YM= TEVTUw== IHByZXNzdXJlcw== IGbDrXNpY28= IERFQw== IHRlcnVz IEFVVA== z4TOtc6v IHVudGVycw== 74E= INmB2LHZitmC zrnOus+Ozr0= INin2YXYp9mF IGxhbmRtYXJr LlN0b3A= IGZhaQ== IG5ldWVz INC/0YDQsNCy0LjQu9GM0L3Qvg== IHRlY2huaWNpYW4= IHVuY2xl X3Jv aXNvcg== IOC0heC0rQ== b3bDvQ== 5pS56Z2p IGV4Y2F2 INin2YTYqti52YTZitmF IERlcGFydGFtZW50bw== IE11Zw== KGNhY2hl LmRpc3RhbmNl b2JvcmE= QXJvdW5k IGNyb2lz aXRla3Q= bWVyZQ== IGJlZ3Jpag== aWNlcnM= IG1hdGVt 57WC 4KSv4KWA IHdoaXNwZXI= INW91a/VvQ== IOeB IGFnZW50ZXM= 15jXmded 4oCZZWZm IGJyYWtlcw== 5q+U6LWb 2LLZiA== IGltZWRp LlVURg== IOCyquCzig== IEVudg== w6V0 INC60YDQtdC/ IEVG Lmlucw== 7Jy866m0 RGlzcGxheWVk S2Fu IFNlY29uZGFyeQ== IM+AzrHPgc6s LkFzc2VydGlvbnM= INGI0YvSkw== INmC2K/YsQ== X0VOQUJMRUQ= IOGDnuGDkOGDog== IGdvZGluYQ== IHN1YnNpZGlhcnk= IGJyZWF0aHRha2luZw== IGJhZ2F5 INis2YXZhw== aGx0 IFBhcmFkaXNl IHVuaXF1ZW1lbnQ= bWFscw== 2LPYqtmF IGludGVybmFsbHk= IENsYWlyZQ== INmI2ow= INKb0LDQt9Cw0ps= IGFjY2xhaW1lZA== IGRlc2Vq IGF0b2k= IGthbnRoaQ== dG9yY2g= emF0 0LXRgtGD 6Kq/ cmllcmU= IHByaXZhdGVseQ== IFNpcmk= LXJpY2g= 0YDQsNC/ 6aeF 0YLQvtC5 IGLDvHTDvG4= 6KGM5Lia 4LCy4LC+ 2YfZiNix 7LSd IGZhb2k= RmluZGluZw== IGhlY2hvcw== IG1pdHRl IOCqhuCqsA== aW1pbmc= eXR1 ICI+ dWxsYWg= PVtd 0L7Qt9C80L7QttC90L4= IHJpamRlbg== IFByw6lz IHByYWt0aWpr xLFi IGVzY29saGVy Q2FsY3VsYXRl 4KmA4KiC IFBvbGl0aWNz INC90L7QstGL0YU= dXRldXJz cmlhZA== 4LC+4LCX4LC+ cGVybWlzc2lvbnM= 0L7QstCw0YA= U3BvbnNvcmVk INmI2KfZhNiz INin2YTYq9mC LmF1dG9jb25maWd1cmU= IERpZXNlcw== 2K3Zitip LS19fQo= 67Kk emVpZ2Vu X2N1c3RvbWVy IGFwb2k= IM66zrk= IHBhZ3Q= INin2LPZhNin2YXbjA== dXN0ZXJpbmc= IGNvYWxpdGlvbg== X3RyYWNr 0YLQsNCz IHNhaWxpbmc= IC4uCg== O24= IEF0b20= INio2YbYpw== cHJldHR5 IOCmpuCnh+CmluCmvg== IGh5cG90aGVzaXM= LkdM INCj0LrRgNCw0ZfQvdC4 4YOT4YOd4YOb IEdTVA== aGlzdG9y 0LDQu9Cw0LI= IHB1ZXJ0YQ== L2Zvb3Rlcg== IGp1bXBz 2KbZhg== LkdlbmVyYXRlZA== IG9zcA== 0YDQsNGH IERBTUFHRQ== 5rOV5b6L eHA= IGZhaXJ5 IGxpYmVydHk= IGTDvG55 4K6k4K+N4K6k4K6/4K6p4K+N INCw0LPQtdC90YI= IG9zYQ== ITo= U1BPTlNF 44OV44Kj 1avWhA== IEp1c3Rpw6dh INmE2LDZhNmD IGFsYg== 74K3 Zm9ybWF0aW9ucw== INWh1bbVvg== 4YOQ4YOT4YOd IHByZXNlbnRhcg== Tmo= IG9udGRl IHByYXRpcXVlcw== IGRpZmZ1c2lvbg== IHdpdG5lc3Nlcw== LmxpZ2h0 6Kqs IFN0cmVhbWluZw== 4Ka+4Kag IEJMT0NL 4oCZaW5k IE1lbmc= IGZpbGxz INC00LXQsw== IHhhcg== IHRpbm8= IGhhbmRzb21l IGdyYW5kY2hpbGRyZW4= IHN0cmFwcw== IG5lZ8OzY2lv INGB0LHQvtGA dWpvdXJk IOaYrw== 0LDRgdCw IEZVTg== 0Y3RjdC7 IGp1Z2Fkb3I= IEdlc3By U3BlYWtpbmc= c2F2ZWQ= INGB0LE= cmluZQ== IG1hdGVyaWFhbA== IFBheXBhbA== IHN0b2w= LCo= IFByb29m YXRpaQ== IG92ZXJseQ== IGVsZXQ= IHN0aWps IERvaW5n b3Jhbmdl 0YHRgtC40YLRgw== V2lmaQ== INCx0L7Qu9GB0LA= IGRldmls ZXdz IikNCg0K IG5pcGE= 4KSW4KWN4KSv4KS+ IHBsdQ== 16bXog== IGJpb2dyYXBoeQ== IGJ1ZmZlcnM= 4Z+S4Z6E bGFyxLFuYQ== IHBvbGl0aXF1ZXM= RXhjZXB0aW9ucw== IEJlcmtlbGV5 IHByb251bmNp c2hlbGw= IHBvbGl0ZQ== X2Fuc3dlcg== cG9uZXI= TlNBcnJheQ== LlJvbGU= IGt2aW5u w7N2ZWw= QUJB IHRvdXJuYW1lbnRz INC+0YHQvtCx0LXQvdC90L4= Zmx1ZW5jZQ== UVVFVUU= 7KGM IEdsb2Jl 2Y7ZhA== IGZhaW50 VGhh IGFsbGVpbg== cnc= L3BsYXRmb3Jt 0LXRh9C1 YWxhdA== IElOQ0lERU5UQUw= 2pPbjA== IOCwquCxjeCwsOCwrQ== IGZ1ZWxz IOyLtg== IEx1aw== X2NvbW0= IGltcGVyaWFs IHByb3VkbHk= ZnJhc3Ry INC80L7QuQ== Jmx0 X1NFQ1JFVA== IGlkw6lhbA== X0NyZWF0ZQ== 4K6V4K+N LnJlYw== IG5lZ2F0aXY= IHJlbmV3YWw= IGVsYWJvcmF0ZQ== 4LGN4LCv4LGC4LA= YW1idQ== TGlu IENPTU0= IGTGsA== 4LWL4LSf4LWN IElzYWFj IGNhcmVk LlNRTEV4Y2VwdGlvbg== IOC0nOC1gOC0tQ== IGNyYWNrcw== VGltZWxpbmU= TUFJTA== IHBpZXJ3cw== IHV0ZQ== IOCkteCljeCkr+CkvuCkqg== INGF05nQu9Kb INio2LHYrw== Y2Vkb3I= X2hlYWRlcnM= 4KWc4KWA QVdT 0LLRgA== ZWxzZWlm 5b2p56Wo5a6Y572R IFTDvHJr IHRpcw== 0LHQsNGC 6L2s6L29 L3E= 15nXpNeU IGhvbmU= INGB0YDQtdC00Lg= 0LDQu9KT0LDQvQ== IFdpbmc= IHBpY25pYw== X2tlcm5lbA== INGB0LXRgNGM IHN3aXBl dGljYQ== dWxsaQ== IG1lbnRyZQ== IEtvbno= KGJy IERFQUxJTkdT IOCkleCkvuCkqA== ICAgIAkK IGR6aWHFgg== IOygkQ== QENvbnRyb2xsZXI= 4LWG4LSv4LWB4LSC IHJ1aw== IOCmruCmqOCnhw== IFRpbmRlcg== IOWwkQ== 27LbsA== IGF1ZGl0b3I= 4KSu4KWN4KSs LmZsYXQ= 0L3QuNGG0YM= YWxkYQ== 5rO9 5o6n5Yi2 X0VYVEVSTg== IFBBUkFN KF8u INmF2YbYtQ== IGNvY2E= ICMt INGB0YLQsNC70LA= aWVsZGVy R3JhcGhpYw== X2xpZ2h0 VUlT IOC0quC1jeC0sOC0uOC0v+C0oQ== IFByaWNpbmc= IGhhZ2E= IGp1bWxhaA== IHZpb2xlbmNpYQ== IG11bmh1 IikpLAo= IGJsaW5r 5pyA6L+R INC+0YLQutCw0Lc= IFZJSQ== YWNyZQ== aWphbA== X3Rva2Vucw== INeW15nXmdei16g= IHZpZMOp LmRndg== IGJyYXNpbGVpcmE= IHNhaW50 IGlsbHVzdHJhdGU= IOCyqOCyv+Cyrg== 6rOz 4LOB4LKk4LON4LKk4LKm4LOG IHFhbm9x IHJlc3NvdXJjZXM= IFBPUA== cmHDp8Ojbw== LWZvbnQ= 1aHVttWh1a/VodW2 SGFk IEl2YW4= bG9nYQ== IG1pbGxpbmc= IFNoYWg= UmVzdG9yZQ== 1aXVt9W/ cHN1bQ== IOCwsuCxh+Cwpg== 5YWs5ZGK ZXhwYW5k X01VTFQ= IHNhbGFyaQ== YW1iYWg= CWZyYW1l IOeu 0J3Qvg== aG9va3M= cG9sYXRl IHRob3U= U1RJVFVURQ== V29uZGVy IM+Dz4XOvc61 IGFjdGl2aXTDqQ== IGRvdWJsZXM= YXV0YQ== RGlzdHJpY3Q= aWtoYXRoaQ== IHByb2xpZmVy 5a625amG IHBhcmVudGluZw== IGNvdW50cnkncw== IFVudGVybmVo zrvOv8+C 16TXldeq IHBpc2NpbmU= IOC0quC0seC0rw== IGVtYm9yYQ== INC/0L7QutGA0Ys= X2FjdGl2aXR5 aXJpc2g= IEtT IG1hdGVyaWFpcw== 2oA= 4Kab4KeH4Kao X3Nsb3Q= IFB1cnBsZQ== aW5mbGF0ZQ== IHByb3Zpcw== IHBlbmNpbA== INmI2KfZhNmG U2libGluZw== LmF0dGFjaA== IGplZ28= LnRlbXA= LmltYWdlcw== IG1hcmlhZ2U= IOCyleCysA== 55Ge 5aix5LmQ5Zy6 IGFudGlndQ== INC+0L3Ss9C+ dW5nbw== IGNpdGU= 0L7QstCw0Ls= IFdldHRlcg== INKv0LnQu9C00LLRjdGA0Ls= IHNhc2E= LmpldGJyYWlucw== IG9ww6ly 2KrZgw== IENvbXBvc2l0ZQ== IHByYWc= INCy0LXRgg== IGFzc2VtYmw= INW01avVttW5 IG5pbGE= IFZFUlk= RGV0YWxsZQ== IOCkrOClh+Cknw== IHdlZQ== IGFiZA== KCR7 IGhhYsOtYW4= 6Zm1 IHDFrw== zK0= c3RlbGxl INin2YTYrNmG aXVu dWRpYQ== IFNlbmhvcg== IGJyZWVkaW5n INGB0YLQsNC70Lg= RWxhcHNlZA== 4pyT INin2YTZgtin2YbZiNmG IGNhdQ== IFF1YW50aXR5 INC/0YDQuNCz0L7RgtC+0LI= 5pS/562W IHN0YXRh IGFjY8Oocw== IFZhbGxl LmVw b3RoZXM= IGRpYmRpYg== 4LSv4LS/4LSy4LWG INC90L7QstGL0Lk= IEJhbmtpbmc= IExpdGVyYXR1cmU= b3JpZW50YXRpb24= IOCqquCrgQ== IHByaXZhZG8= IGJsb3Nz IEx1bQ== IHBvbm8= 5ZCo IEVUSA== IEJyYW5kb24= RXBvY2g= INC+0LHRj9C30LDRgtC10LvRjNC90L4= IMWTdXZyZQ== INeZ16I= Ymx1cg== INWh1bbVo9Wh1bQ= INC005nRgA== IG1pbnV0bw== dWd1YXk= IG11bmljaXBpbw== w6FjdGVy IHfDvHJkZW4= IE1pc3Npbmc= cGl4ZWw= 0LrQu9Cw0LQ= 1aHWgNWu O30= IHZlZ2V0YXJpYW4= INGA0YvQu9Cw IFByb3Zlbg== IFBvY2tldA== 7J6Q6rCA 5omn6KGM IEZVTEw= IOGDqeGDlOGDm+GDmA== 5pGY IHRpbWJhbmc= IHNlYWZvb2Q= IEpha2FydGE= seS5kA== KUw= IElOVEVHRVI= LWxlZA== YWtldA== R1JPVU5E IHBlbmM= IGVuZmVybWVkYWQ= 5py65p6E IGVzcGFjZQ== IHByaW5jZQ== IGNhbG9yaWU= 6IGK IHBlc3RpYw== 16nXldeY INmF2KzYp9mE INin2YTYtNi52Kg= IE1pbnV0ZQ== zrrOsc69 5Zug5Li6 IyMjCg== z4TOuc66zq3Pgg== IGZyZW5jaA== IGFycXVpdm8= INmF2YTYpw== X1JFTQ== INmF2LPYqtmI2Yk= aXRlbmluZw== Q29sbGlkZXI= 0Y3Qtg== INC70LXRh9C10L3QuNGP IHV0aWxpemF0aW9u IHRvdHM= IGFkcXVpcmly IGVsZXZlbg== ZW5kdXI= 4Li14LiZ IGFsdGl0dWRl IGNvcm9uYQ== IFNwZWNpZmlj IFN1bm55 IG1hZHI= IOGDm+GDqA== INmI2KXZhg== IGFuaW1hbGVz SU1B INio2Kg= IHRyYWJham9z Y29kaWdv LlNw CWRldg== cmFpbA== KGFuZ2xl IGFpbWU= IGJvaWw= 5YyF5ous 6K6i5Y2V 4Kqc4Kq+ INC/0LjRiQ== X0FETUlO IGNvbW1lbmNlcg== ZW5raW5z IHJlY29s VEVE w6lueQ== IHR1dg== IGTDqXJvdQ== aXRpdmVz LWZpdmU= VVJFTUVOVA== IERpc2N1c3Npb24= dG9vcw== T3JpZ2luYWxseQ== YW11bA== ZHY= IOCmqOCnh+CmpA== IGdhdw== Q29vaw== INGN0LrRgdC/0LXRgA== 4YOQ4YOc4YOQ IGJ1bGFu LXNoaXJ0cw== QW5j 0YHQutCw0Lk= IFJlZ3Vs 4Z+A IGVudmlyb25uZW1lbnQ= 44Gr44Gq aXNiYW5l IGZpbmFuemk= IGNvw7s= IHNlaXo= YmJl 0YbQtdC90YI= IGNvbnRvdXI= LW1lc3NhZ2U= VmFscw== IGluY29ycG9yYXRpbmc= 5rao IGNvbGxlYWd1ZQ== INGB0LDQvw== T3JhY2xl UUE= V2l6YXJk 6L+Y5piv IHVuZGly INC20YvQu9GL 4LS+4LS2 5a6Y5pa55LiL6L29 IHpvbmRhZw== IHTDoGk= aWNpbg== b3J0aHk= X2JpbmQ= 4KS+4KSz IE1heW8= INW/1aHVrA== 4Lic4LmI4Liy4LiZ 4buZbmc= IHN0YXR1ZQ== INOv IGZhcmtsxLE= 4K6k4K6/4K6w IG1lbWJyZQ== 4LC/4LCa IMmZcw== 2LXYsdmK2Kk= 0YDQsNC90LQ= IGludGVycHJldGVk 4KSs4KSy INGC0LXQsdGP LVw= IOuouQ== IHZ5cw== KG5ldA== INin2YTYrdiv TmVzdGVk cmVtZW50 4KSC4KSs4KSw IGZsb29kaW5n IHB1aXNxdWU= 5bm05bqm IGlsZ2lsaQ== IGltcG9zcw== 4Kik4KmA Lmluc3Q= IE1lYW5pbmc= QUxT INeQ15XXmdeh IExhdXJlbg== 0Z7RgdGP IFN0ZXZlbnM= YWdnYWJsZQ== INC60L7QvdC10YfQvdC+ IOC0ruC0vuC0pOC1jeC0sA== 4YOg4YOY4YOV4YOY IOiHsw== IGNhcHRpdg== 0YDQsNCx0LDRgtGL fDsK IElOSVQ= IOCkuOClh+CkteCkvg== YXBybw== INio24zYtNiq2LE= X+WkqeWkqQ== IHZvdG9z IHppY2h0 IGluZHVjdGlvbg== IEZlZXM= IE5lYnJhc2th bGllcg== INiz2YHYsQ== 5oWL IOCmrOCmqOCnjeCmpw== TW9t QUJPVVQ= IOCkieCkqOClgA== X0hFQUQ= 4LKy4LK/ IFJldHJpZXZl IHBydWViYXM= 2KfYtNiq IGtlc2s= QnJva2Vy IFdhbHQ= 1oDVotWl1bs= 0LDQsdGL b2dyYXBoaWNz 1oDVotWl1Q== IGdhbGF4eQ== IHdyZWNr Lwov emVrbw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IGNvbW1pc3Npb25z LURheQ== IG1pZGRlbg== bMOt IHTDog== IOC0pOC1hg== IGhlYWRwaG9uZXM= IE3DtmdsaWNoa2VpdGVu IGFjb250ZWNlcg== IG55bG9u IOGDq+GDkOGDmg== IHJlY2VudGU= IMO8a3M= IGdvbHBl IGV4aGF1c3RlZA== IHNlY29uZGU= YXRpZnM= LUFs z4fOsQ== IE9wZW5pbmc= QUxL 05nRi9K3 IEplZmZyZXk= IHBpbGk= OlVJQ29udHJvbA== IGFtYml0aW9u 0LHRgNGM e30p IG11bHRl KGVxdWFs aW9uYXJpbw== INGC0LjQv9Cw Y2xvc2VzdA== 4KS+4KSy4KSo IHBsYW5ldHM= ZXhpc3Rpbmc= w7NyaWNh IEplaG9mYQ== IGVhcnRocXVha2U= 0LXQvdC40Y/RhQ== IGJhxJ9sxLE= bGVpZGluZw== 5pyq5p2l 4LOG4LKw IGJyZWQ= 1oDVodWj1oA= IGhhdGE= ZXN0cmlhbg== IEpz Z29tZXJ5 IHN1cG9ydA== IHNpbXBsaWZ5 IGdhcmRlbmluZw== RXZhbA== IGlkYWc= YWhhbA== IHNwZWN0YWNsZQ== 4bqpbg== IHRpcmFy IOC0huC0tQ== X2VudA== a2VubnQ= w6h0ZW1lbnQ= IFNUTw== IENhcHM= aGFwZQ== IExpc3Rz dmlhcg== IHB1YmxpcXVl IGFuY2VzdG9ycw== IHN0ZXJlbw== cG9saWN5 4Z624Z6U4Z+L w6huZXM= X3BheQ== IGZhbGxiYWNr IE1JTA== SEVS IE1tZQ== dmV1 IGTDqXBhcnRlbWVudA== yZlzaW5kyZk= INeV16o= 0LTQvtC9 IEtub3du IGF1c3o= IHRlc3Rlbg== IGhvbm9ycw== bWVyZ2Vk IEx1bmE= 4YOU4YOj4YOa4YOY 4Kmx4KiV IGRvbWljaWxl IGl0dA== X0NvbQ== LicKCg== IGxlYWtz YWtrdXQ= 0YLRi9GA 5bC85pav IHNlZ3VyYQ== IG5ld2Jvcm4= 6YeK IGluc3RydWN0b3Jz IGxvY2tlcg== IGFsxLFu b2xlb24= RXBpc29kZQ== IGFiZG9taW5hbA== IGNhbmRsZXM= INC30LDRgtC10Lw= LXNr IFBheXM= IFdhaA== X0NBQ0hF cHJvY2hlbg== S00= IGvDpG4= PCg= IGZ1bm5lbHM= IF8p IHByb3hpbWl0w6k= IHZlcm1l IGR1ZGU= 0ZU= IOColg== IFZpaw== IHdvbGY= dXZlcg== IEJsb29tYmVyZw== IC0o IFdpZmk= YWtvbg== IHJpdmFscw== IHRyaWJ1bmFs IHNhaGlw 4oCL4Z6K IHJlbXBs LnNwYWNl IENyZXc= IOyInA== INee15nXnA== IOGDoeGDkOGDk+GDkOGDqg== INCe0L8= IGNvbnRhZw== INGC0LDQutGB0LDQvNCw IHNwYW5uaW5n IHN1aWM= 54G1 0L7QutC+0Lk= IERpc3RyaXRv IG9uZGVyd2lqcw== INC80LjRgNCw IFBST0ZJVFM= 5ZCM5q+U INC/0L7Rh9C10LzRgw== IOCqnOCqvuCqrw== IGRlc2VyaWFsaXpl IOCml+CmpA== ZXN6 asOzw7A= INGD0LLQtdGA w6R0emVu IHdlZGVy em9yZw== IOCkqOCkv+CksOCljeCkpg== 1oDVodW2 IHJlbWlu 4oCZw6g= Y3Jlc3Q= INC+0LHRgNCw0LHQvtGC 4Ken4Kem PERhdGE= ZXBlbmRlbnQ= X3NpZw== b2dhZG8= 5Luj56CB IGh5dmlu IGxpdGVyYXR1cmE= IHNvaW5z IG55dHQ= IGVudHdpY2tlbHQ= IOqyg+ydgA== INCx0L7Qsw== KCh7 IEN1bA== ICgj b3VudHk= INCy0LDQttC90L4= IFdha2U= IOCmrOCmv+CmnA== IERlbW9jcmF0 IGdhZGdldA== IOm7kQ== IGRlcml2YXRpdmU= 4YOq4YOY IGxvbmdl YXR1cmVu IGZyZWV6aW5n 4LWL4LS3 IG5lbWE= eXBlcg== IG9uaW9ucw== IFByZWc= 4YOU4YOR4YOQ4YOo4YOY IGFlcm9z aGVhcnRlZA== IG1lbnRpb25z 4LC+4LCw4LGN IHByaWs= 0pnTmdGA 4Kao4KeN4Kau aWViZW4= dWludGVz IFN0cmlw LlN1YnN0cmluZw== IOCqleCqsOCriw== IOyngOyXrQ== INqG2KfYsQ== INC00L7Qu9C20L3Qvg== IGdldm9uZGVu T3Bw IG9sZXY= SnU= IOCqleCqsOCrjeCqr+Criw== IOCwquCwvuCwnw== b3dhbnk= IGJib3g= ZXJrdA== IOCmsuCmlw== IHBlZGFs 0LjRh9C90L4= 5L+d5a2Y LVVw 2LHZiNq6 4Kae4KeN4Kac IFNsaWRl IG3DqWRpY29z J10pOw0K IGFydGlmYWN0cw== XScs Z3J1cHBl IGludmVudGVk IOCksOCkvuCklg== IHNlY3Jl IFJhbmdlcnM= IOCmr+Cmvg== CSAK IGVsc2lm 2YjYsdin INin2YTYrNiv2YrYr9ip INCx0LDQug== INij2KjZiA== aWZpY2U= INij2YTZgQ== aXBheQ== 4YOj4YOg4YOQ4YOT KE5ldw== 0YPQvdC60YI= eHR5 IHRoZXJhcGllcw== INiv2KfYtNiq INCX0LDQvw== cmlk PXVzZXI= ZGVydA== IEhFQUQ= IHNwaWNlcw== IGhlYWRhY2hl IOC0ruC0pA== IGTDqWNhZGE= IFBvbg== IEJlaXRyYWc= QXNpYQ== 4Kqq4Kqw IE1pbGU= IHN0cmF0 4Kaw4Ka/ X+S6mua0sg== bWluYQ== 7Leo IE1lbmdl IFNIT1c= INGA0LDRgdC6 4KqY RmF1bHQ= 6JyY6Jub IOCusg== IHJheXM= YXJiZWl0ZW4= IOCkleCksOCkpOClgA== IG5vdGFibHk= aWNvbQ== bmVi IGxpZWJl dXJ5bw== RGlzY292ZXJ5 YWNjaW9uZXM= 5aiY QXR0ZW1wdA== X1NZUw== LkFsbG93 5pys5paH X0NBU0U= 5ZG8 IGthcHM= S0k= IGxvb3B0 IOuIhA== IOC0uOC0uQ== IEVsZWc= IHJoeQ== Q29yb3V0aW5l YmVyZ2Vy IHZpbm4= 2YjYr9mH IGNsw6Fz QUREUg== IHBpZ21lbnQ= KFBhdGg= IGNvemluaGE= IEZlYXR1cmluZw== IOCkueCli+Ckl+ClgA== INGN0YE= X0FUVA== IGdldm9sZw== IHB0cw== IFJpY2h0dW5n IEJvbQ== 4KSy4KWN4KSv cXVhbGlmaWVk IEFtcA== INWl1a8= Ly8k IENhdGFsdW55YQ== YW50b29y YXZhZw== IGpzbWU= INqq2YY= IHByaW50YWJsZQ== z4POsc69 4KS+4KSC4KSo4KS+ dWlkYXM= IOuLtA== IGxhc3RlZA== IGVzdGFiYW4= IGRlbWFuZGVk IE9ic2VydmVy IGVudGhvdXM= xYhh IGRpZmZlcmVudGk= aW5kcm9tZQ== dWNodGU= 5b2x5ZON c2VtcA== Lyoh LmRlc2lnbg== IOCuleCusg== IE1pbmVyYWw= IOa5 JykNCg0K 2LHZiNis 4K+I4K6V4K6z4K+N IGlnbGVz KGdsb2JhbA== IHByZW1pdW1z 4LiC4LmJ4Lit 4KS54KSu IHZpcmdpbg== 2K/bkA== LkJsYWNr KV0pCg== IENhbXBv IGtvdGE= Li4uKQo= cml6 PXtgJHs= 5pep6aSQ aXB1 IEpTT05BcnJheQ== IGNvbm5hw650cmU= IHRpdg== 0LvQsNC00LA= QnVzY2Fy IFdlZWtlbmQ= 57q4 16TXldeo ZXRyZQ== IHByZXplbnQ= IGRpdmlzaW9ucw== IGFkZWxhbnRl IOqyg+ydtOuLpA== IGZhY2g= J2FubsOpZQ== IHNvc2lhbA== INCa0LDRgA== IHR5cg== IOuNsOydtO2EsA== L3d3dw== Licv 0YPRgtCw0YI= IHBhYg== IHJpbw== IFDDqQ== IFDDumJsaWNv aW5kcmE= TWVtYmVyc2hpcA== aXN0aXF1ZQ== ZXN0eWxl IOCmheCmpw== IGFpa2E= IEh5dW5kYWk= IHRydW5n YXJ1cw== 7IaQ 0L3QuNGG0Lg= IOWNiA== PW0= IE9ha2xhbmQ= IOCuheCusOCumg== IGludHJh IFZlcm1vbnQ= IENodWNr 0Y7RidC40Lw= IGVudmlyb25tZW50YWxseQ== aGFzaHRhZ3M= aWvDpA== IGZvdXJuaXNzZQ== IEFobWVk INWi1aHWgNWx1oA= 15XXmdef IGRlY2lkaXI= IOGDqeGDleGDlOGDnOGDmA== IHZhbGlkYXRlcw== IGt5bg== IEV2aWw= KGN1c3RvbWVy IHNob290ZXI= b2RvbA== IEVtcGxveWVlcw== CWNvbm4= IGh1bw== IHZlcmJlc3M= IHp1bA== 5oiQ5bm0 4YOU4YOo IM+AzrXPgc6v dWZz IHRlbXBvcw== IGF3ZQ== LmJ0 dmFr IOC0uOC0guC0rQ== IGNvbnNwaXJhY3k= 4LC/4LCC4LCa4LC/4LCC4LCm4LC/ IGNvbW1vZGl0eQ== IGFuY2Vz aWJsZW1lbnQ= IERTTA== KG93bmVy 4oCZdw== IHJlbm92YXRlZA== INC90L7QstGL0LU= 2YjbjNmE IHJpZmxl YXNzYWdl 4YOQ4YOg4YOZ dW5uaWl0 IGJlZ29ubmVu IGxpbmdlcg== Y2h5 IFZvdGU= IEN1bHQ= IHNpbGk= ZW5vbQ== 5pyA5ZCO Y290dA== 0LvQsNGD 4LC+4LCy4LCo4LC/ IGRhYXJiaWo= IHN1YnN0cmF0ZQ== 4KS+4KS34KWN4KSf IEFzb2Np X1NM 2YXYr9ip IHNwaA== IFBhcmNlbA== 1aHVtdW/ YW56YXM= LEY= d3VrYQ== IOCmrOCmuQ== LkZsb2F0 4KSc4KS+ IGF1dGVt IOCmrOCmv+CmsA== IGVkYXNp INC20LDSk9C00LDQuQ== IHNpbXVsYXRl 4Liq4Li0 eXJ1cw== IENvbnRlc3Q= IGxhaXNzZQ== IHRhbXBvY28= LnBvaW50cw== Z2xpc2U= IEJ1eWluZw== IGxpb24= IG1pZWpzYw== 6L+Z5qC3 IHVpdHN0ZWs= 4KuC4Kqs w6liZW4= IGJvbm5lcw== IOCknOCkv+CkuOCkruClh+Ckgg== UHJlY2lv IOCwheCwrQ== IOCuh+Curw== IHNjcmVlbnNob3Q= IGFwcmVzZW50YQ== IOGDmeGDlQ== CXN1Y2Nlc3M= IHJlY3Vyc2l2ZQ== INiz2KfYqNmC 4YOU4YOg4YOT IGx1YnJpYw== IGxhbmNl aW1hZw== INix2YjYtA== IE1pbHdhdWtlZQ== IOCkpuCksg== IHRy4buL IG3Ds2Q= 4KeH4KaT4KaB IGZhZA== IEFwYXJ0bWVudHM= IHJlbW9kZWxpbmc= dXVz 2q/Ysg== 0YLRgNCw KCIiKQo= 6KeA IERpc2g= IM6n Lk9iamVjdHM= ennEhw== 546v5aKD YWNvbQ== IHN0dW1ibGVk IHZlbmRyZQ== SsOh INmE2LM= IHBvbW9j 4LC+4LCw4LGN4LCf INW61aHVv9W0 IikpCgo= IG5hY2h0 INiz2YTYp9mF QE5n 4LiC4LmI4Liy4Lin YW50aA== IE1hdGE= 5bm7 xJ91bg== INC90LDRgdGC0YPQvw== IGJldHI= PScuJA== IOCkruClgA== 5Zui6Zif INWw1aXVvA== IHNvdXRpZW4= aWp0 IGFkb3Ju INC60L7QvNC/0LvQtdC60YE= 5Yaw 0L7QudC0 IOy3qA== 66as66W8 64iE 4KSf4KSV b2trZW4= INmE2LE= aW9uYXI= INis2Ybarw== REVW IGZpbG1lcw== IG11eg== IHBvcHVsYXJlcw== aXN0aWNhbA== xYJ1 LkRlc2NyaXB0aW9u aWRpYQ== INin2YTYqNit2LE= IOC0heC0qg== IGZvaWw= IFJldm9s IGVydmFu IGluZm9ybWE= Q2FsY3Vs S2lt 0LDQu9C00LA= X2xhbmd1YWdl IHBsYW5uZXI= bmVhcG9saXM= IOCuheCuruCviA== IFBBUw== IEFzc2Ft dmVybQ== IHBldHJvbA== 2YjYoQ== IOWkqeWkqeS4reW9qeelqOiDvQ== bW1t 16DXmdeU IHbEkw== IF1dOw== YW1k IEd1ZXJyYQ== bcmZaw== INC/0L7QtNGA0L7QsQ== IEFQSXM= X3Byb3ZpZGVy 56yU INmF2LHYr9mF zrrPgc65 IGJhaXJybw== INGA0LDQsdC+0YLQsNGC0Yw= IOCktuCljeCksOClgA== PFRleHQ= IOCwleCxi+CwuOCwgg== LWluZHVjZWQ= IFRvZ2dsZQ== SW50ZXJmYWNlcw== IOeLl+S4hw== 4KSc4KS8 4oCM4LS4 aXRhbGl6ZQ== INWx1aXVvA== 6LWU546H 1avWgg== IHdlZHN0cmlqZA== IFRyYWlsZXI= 0LXQtNC2 0YLQuNC60Lg= X2ZhbWlseQ== IHVwb3JhYg== LkN1c3RvbWVy dWJsaXNoZXI= IGRlbGV0aW5n 15nXpQ== IEZpbG1z INiv2YjZhNiq IExvb2tz c3lvbg== Q2hpcA== IGFsb3Q= 4Lis PWRvY3VtZW50 LkJlYW4= IHVzZXJpZA== U2V2ZXJhbA== IFNZU1RFTQ== IEJlZg== aGFuZG8= IEFUVA== CXBhZ2U= anVzdGlmeQ== LXNlbGxpbmc= IHJhYWQ= IEF0bGFz IEJvYmJ5 5Yib5bu6 cXFhdA== QWxsb2NhdG9y IG5nYXk= KCgq IGNvbmNyZXRv 4Kao4KeN4Kak4KeN4Kaw4KeA IE1hbmc= IGxhcmdh OyIs YXZhYQ== IER5c2Z1bmN0aW9u 4LC+4LCo4LGB IGFubm90YXRpb25z dGFibGVz L3BhZ2U= IOCkqOClh+CkquCkvuCksuClgA== IFNBTQ== 0YvQvNC10L0= cmhz bG92ZXI= X0hBTkQ= 44O844Kr INGA0LDQt9GA0LXRiA== dWVnb3M= V0FZUw== IFRyYWNraW5n LkNoYW5nZQ== 2YjYqtix IGrDpMOk IOCwqOCwnw== IHJlZmxlY3Rpbmc= IFDDumJsaWNh LlBo IFJhcGlk IHRhdw== IHJhc2E= 2LPYp9iz Q1RJT05T IGRpZmZlcmVudGlhbA== IGfDqW7DqXJhbGU= 5aeT aGFhbGQ= IHN1cmZpbmc= 4LiE4Lil INGA0LDQt9C90YvRhQ== IOCql+CrjeCqsA== IFdvaG51bmc= dW5zYWZl IGxpbmVh 5aq9 IGdqw7hy IOmYheivuw== IHRyYW5zY3JpcHRpb24= IGRlcHJlY2F0ZWQ= 2LbZhA== INGW0YE= IOC0leC0vuC0ow== 4Lit4Lii4LmI4Liy4LiH 5o+Q6auY INC/0YDQsNC60YLQuNGH0LXRgdC60Lg= Y3Vz IOGDmOGDm+GDmOGDoQ== V1JJVEU= LmNob2ljZQ== IG9rdA== INGB0YLQtdC/ TWlz 0YjRgw== IOGDkOGDpuGDmw== INm+24HZhNuS aW5za2k= QnJvbg== LnN3aXRjaA== IOuPjA== INmI2KfZhNi1 INGA0LDRgdGB0LrQsA== IOC4q+C4p+C4og== bmRlbg== IGNvcnJlc3BvbmRz X25hdg== aW5rZQ== X2NhdGVnb3JpZXM= LnJlbA== 5b+D5rC06K665Z2b INC30LjQvA== ZW5uYWk= X0JZVEU= IGtodQ== Z2VzYW10 IGdlc3Bl IGVzc2VudGlhbHM= 4YOT4YOY4YOc LW11dGVk TmF0 IERhc2g= IOC0sOC0o+C1jeC0nw== IGF1dGhlbnRpY2F0ZQ== IHRyYXZlcnNl IOC0qOC0v+C0sOC1jQ== INeS16LXlg== X21lbnRpb25z IEZJWE1F LkNvbXBpbGVy KFtdKTsK 0YfQuNGB IGlncmU= IFTDqWNu b3JkYXQ= IGFsb2Fk ICcsCg== TWludXM= INin2YTZhdmG2LfZgtip 44Kv44Oq INC80Y8= KGF3YWl0 LWJsYWNr YWN0aWNhbA== LE9iamVjdA== RGVncmVl IEVQUw== IOCyqOCyoeCzhuCypg== SVZB IENhbGxpbmc= UXVp INec15o= IGhqw6Rs IG9mZnJlcw== IElDVA== 4LSy4LSv4LS+4LSz 4Kaw4KeH4Kaw IGJhcmJlY3Vl LEc= 4Lat4LeU 44CA44CACg== cHVyY2hhc2U= IERPTg== 24zYp9iq IHZvcmhlcg== IHlvbQ== IEJlbmQ= IEdpbGw= IENvbnNlbA== cmVwcg== IGZhaXNhbnQ= T3V0bGluZWQ= IHNlYXM= IHZlbnRhcw== CUlE YWJ1cw== 0LDRgdC40LHQvg== QmFieQ== IGZyYW5jZXM= IHJlZWxz IGbDpXR0 IFN1cHBsaWVycw== IHJlcGFz X3VzZWQ= RGFhcg== LWRldGFpbA== IGxlYXQ= IGx3ZQ== CWhlaWdodA== dsOkdA== 44KI44KK YXRpY2E= X2RheXM= IOCqpeCqhw== YWNjbw== IGt2YWxpdGV0 IOGDoeGDkOGDlOGDoOGDlw== PTo= cGtn TElOSw== 4Ka44KeN4Kaf IEVscw== X0NBU1Q= IC4uLi4u TlNEaWN0aW9uYXJ5 IOC0huC0o+C1jQ== 2KfZhdis IFNjb3Bl ZnJpZ2Vy IHLDqGdsZXM= 0L3QvtGH INC80LXRgQ== IHdvcmtzaGVldA== IEFuZ2Vib3Rl 4Liq4Li4 X3VzdWFyaW8= em5l ZXJyYXM= IHRvdXJpbmc= IFF1YW5k IHRhYmxlYXU= IGxhdGV4 YW5jZW4= 15HXldei IGxhbmRzY2FwZXM= cGFydGljaXA= w6lub20= 2YXYqNix IGphYg== IE1lcmN1cnk= IFNhaW50cw== IGV0dGk= IHJlc29sdXRpb25z IOGDmeGDmg== IHRyZWFk aWxsYXJ5 5qyn5rSy LmlkZW50aXR5 IGVydmFyZW4= 4LWB4LSu4LWN4LSq w6TDnw== IFtdKg== IGfDqW7DqXJhbGVtZW50 V2hhdHM= LWV4cGFuZGVk INiz2qk= aXN0eQ== IGVjb25vbcOtYQ== YWltYW5h IHRyYWN0aW9u SU5HVE9O LmJhbGFuY2U= 4LS+4LSZ IEx1Y3k= INeT15DXoQ== Lkl0ZXJhdG9y bXVsdGlwYXJ0 IFRvbW15 YW1iZQ== INC/0YDQvtGF0L7QtA== IE1vbGQ= INqF2Yc= IGVuZ2luZWVyZWQ= IHNjYXR0ZXJlZA== IGxpcXVpZGl0eQ== INep15zXoNeV INi52LTYsQ== INCz0LvQsNC3 IGRlc2NlbnQ= IHB1enpsZXM= IFBhw61z X2FjdA== IGdlc2FndA== ZHVr aMO2cg== IEt3YQ== IGRlcHV0eQ== IOC5guC4mQ== TmI= X3NjYW4= IOCkquCkv+Ckmw== KG5v IEZvbGRlcg== IGFycmliYQ== UGVkaWRv IHF1w6E= IHNldmVyZWx5 0L7QstC4 YWduaXR1ZGU= w7NzdGljbw== QXV0aG9yaXpl IGJlcnNhbWE= IOiLsQ== IE91dHNpZGU= 2YnZig== IFRhYmxlcw== IFVybGF1Yg== IGNpcmN1aXRz LWFpcg== IOW+tw== 4YCZ4YC+ IGluZGVu IHnDqnU= Lk1hdGNo ZXN0b25lcw== b3bDvWNo 2YbZgw== IHRpZGVu bGVuYW1l J10NCg== 0L3QsNGA0YPQtg== ZHVtbXk= 5pyX YW5hYW4= amF2YXg= INC/0LjRiA== LkFjY2Vzcw== 4Kq54KuH4Kqw IGRvdWJ0cw== dW11dA== IHJhYmJpdA== IGdpdGh1Yg== KCldCg== b2ZpbA== LnBvam8= 4LK/4LKm4LKw4LOB IGbDtnJz IEdvYWw= INmK2LnZhtmK INWw1bbVodaA1aHVvtW41oA= IGFycm9n aXNod2E= IFdIRU4= IG9mZXI= IM6xzr3PhM65 IOuqqOuRkA== IFJheW1vbmQ= 4KSs4KS5 SU1Q 0pPQsNC90LTQsA== UmVjaXBpZW50 4oCc5LiA IGVsZWN0csOzbmljbw== 5a6c 4LmC4LiU4Lii 7IWU IOCkleCkguCkquCkqOClgA== 2YjYp9iz YXRlYQ== IGxlZg== IGZ1bGZpbGxpbmc= INiq25U= IGlycmln IHJlYm9vdA== IOC4p+C4tOC4mOC4tQ== IGZ1cm5hY2U= aXl5yZl0 24zaqduM VU5F CVc= dWRhZGVz LWlubmVy IjsKCi8v 4YOQ4YOg4YOX4YOj4YOa4YOY b3VuZGF0aW9u INCR0YPQuw== 0LjRgtC10LvRjNC90YvQtQ== IEVkdWNhY2nDs24= IFJFUVVJUkU= IFNx 0LjQvNC40Lc= IHNtYWFr IDoo 0LjRgNGD0LXRgtGB0Y8= IOafpQ== IOCkrOCkvuCkueCksA== LWluY29tZQ== 4LSX4LWN LnN3YWdnZXI= 0L7Rh9C60LA= IFN1ZQ== LmNvdXJzZQ== 2LHYp9iy IHLDpA== IOCqpeCrgA== 0Y/RgdGM ISgK IHBlcmRyZQ== IGRvbm9ycw== INi52YjYp9mF IOGDkeGDoA== INC40Yc= IOCmquCngg== 1LI= IFN0YXRlbGVzcw== IOCmquCnjeCmsOCmtg== IGZsb3Jlcw== IOC0ieC0o+C1jeC0nw== X0ZVTEw= IFVrcmFpbmlhbg== IFZlcmtlaHI= IOC2keC2mg== w6hxdWU= IGVtYm9kaW1lbnQ= IERpbmdl IHppY2h6ZWxm 2YPZitmB IEJld2Vn QmluZGluZ3M= INmF2LTYsdmI2Lk= IOCkrOCliOCkguCklQ== IGNlcnRh IG9udHdlcnA= 4Liq4LiZ d2Fybg== IOCqqOCqueCrgOCqgg== 0YfQuNC60LA= IG1lbGxvbQ== dGVlbnRo 0J3Qng== UGhvdA== fSko IGFwcG9ydA== SVBQSU5H X25vdGU= IGlkbw== 4KWA4KSh4KS/4KSv4KS+ Pj4K 0YLQvtGB0YLQsNC9 IEFtYW5kYQ== IGFjdGl2aXN0 IHdhc2hlcg== WW4= IGFsbW9uZA== IGxlaXR1cmE= W25vZGU= YXPhurk= b3NhaWM= INC30LDQvNC10YI= LlN0cg== aW5kZXN0 aWNpZW5jaWVz IG1hdw== IGNyZWRlbnRpYWw= IOqysOqzvA== Q01T INin2YTYrtin2LHYrA== 4LmJ4Lit4LiZ IGh2YWQ= UGFpZA== xIXFvA== IE1vc3M= JXg= X2NvbXBsZXRl 15XXoNeY IHByb21vdg== IGJhbnk= zrTOtQ== IDoNCg== INCz0YPQtw== IGFncmVzcw== IHJpY2h0aW5n bGV0aWNz IHJveQ== LnNlcmlhbGl6ZQ== 0L7QsdC4 IHBvY29z IOGAuw== IHlz IOCwieCwguCwoQ== aW5hbGU= X2lucHV0cw== IH0pLA== Ki8NCg0K OmNlbnRlcg== IGtlaW5lcg== 15XXnteU dXJpcw== QWN0aXZpdGllcw== INC80L3QvtCz0LjQtQ== 2LTZhA== IHN0ZWFr IGtub2NrZWQ= INCy0L7Qt9C80L7QttC90L4= c2VyYQ== IFJlc3BvbmQ= 5aOw5piO IOCmueCmpOCnhw== IGxvY2tpbmc= dXBwZW4= INCy0YDQtdC0 IEhPV0VWRVI= TWV0ZXI= J08= 2YLZgg== 65286rOg 7ZWY64uk IHN5cnVw IFRyZWFzdXJ5 IHBlcnRhbWE= KGRhdGFzZXQ= IGJldGFhbA== KCIiKSk= cWFybmVy IHNvdXJjZWQ= X1JBVEU= IENSQw== 5pGp IGNvbnNpZw== 4LKs4LOG IGxhdWdodGVy LkludGVyZmFjZXM= IOe8 INC+0LrRgw== IGRldGFsaGVz IEJsYWtl IFNwaWVsZW4= IGZsdW9yZXM= INmE2YfZhQ== IHNlcnZhbnQ= IOuwnQ== IGp3YQ== 4LmB4LiB4Lij4Lih YWduZXRpYw== IHJlc3BlY3RmdWw= IGRvbWVzdA== IHRlbnNvcmZsb3c= IHLDqXY= 5Ymy 0LDQt9Cw0YA= IFR3ZWV0 IGVuY2xvc2Vk bXVsYQ== IGTDqWNpZMOp KHN0dWRlbnQ= aW1pbmU= IGFsbWFjZW4= KGFz IOiM d2lqaw== IGhpa2FyaQ== INC00YPQvA== IEZlYXR1cmVk ICwi Ol0= bGV5YmFsbA== 2YTYp9is 0YHQsNC8 b3JkZWF1eA== IHZhcmlhbmNl IHN1ZmZpdA== IE5lZWRz IOGDm+GDneGDrg== IENocg== IOC0juC0suC1jeC0sg== IHNvY2lhbGx5 IFlhbg== 4YOU4YOg4YOb 0ZbQvdC10L0= Q29uZmlncw== IGh5dsOk cm/EjQ== cG9zcw== IGFkanVzdGluZw== INuB2YjYqtin INin2Yc= QWN0aXZhdGlvbg== IFdpbGRsaWZl IEFzYw== IElnbGVz 4LGL4LCv IHJlc3VsdGF0 IGtvZHdh LmRy IGTEmw== 2LLYp9mG 5bm4 INmF2KfYtA== IEZvbmQ= 4LC/4LCm 2qrZig== 0YPRh9GI KG5pbA== QEluamVjdGFibGU= LkhhbmRsZQ== IGRlaXhh YWRt IGZvcmdpdmU= IEJhY2t1cA== LiIpOwoK INmI2Lg= IOCyquCziuCysuCzgA== R0xJR0VOQ0U= IOCktuClhw== LmRpc2FibGVk IGluY2lkZW5jZQ== INOp0Lk= KioqCgo= KHVzZXJz b3Vybw== I2dh beG7pQ== VGhvbWFz IHBvc2l0aXY= IENvbmU= 4LS/4LW8 INqG24zYsg== CW1lbWNweQ== IG1lcmtlbg== INin2YTZhdmB L21vbnRo IHN0YWw= dXJhw6fDo28= Ym9udXM= aW1lbGluZQ== IG5lbw== IEZvcm1lcg== IHJlZ2VsbWF0aWc= YWt0b3I= 77o= IGFuaW1haXM= IGRlc3N1cw== YWxvbmc= IHR1cmJv IGhvZ2Vy IHN6Y3o= ZHJ1Y2s= IGRhZGE= IEluc3BlY3Rvcg== QnVn 77yM5aaC 0LvRi9Kh 4LmE4Lij 5LiN5Lit6L+U IM6xz4HPhw== INi32LHZitmC2Kk= IHVuZGVydGFrZQ== 54+g IGNlbGVicmF0aW9ucw== IGJvcnQ= IFR1cmJv YXpvcw== IFZlcmRl INWU IOeUt+S6ug== 0L/QvtC7 2YjZhtiz 7IKs7J207Yq4 IOGDm+GDqg== IHB1dGE= QmxvY2tpbmc= w7NsaWNh 55Si IEfDpHN0ZQ== IG9jdXJy IGxsZWfDsw== IGVyZm9sZ3JlaWNo 0LjRgtC40L3QuNKj IOCkruClh+CksA== IGtpdQ== IEBA LyIK w6ltaWU= UGhyYXNl CURhdGE= IHN1c2NlcHRpYmxl b2Zz 4bqhYw== IGVmaWNheg== CQkJCQkNCg== IOmX SSdsbA== VklTRUQ= IOCmrOCmvuCmuA== 0J/QvtC7 0LvTmQ== INC00L7Qtw== X3pvbmU= 0LzQsNGA 6LWi6ZKx IGt3YWs= 4Lix4Lie IEVkd2FyZHM= YW5jZWxlZA== IOCkpOCkrw== IOCmj+Cmn+Cmvw== T2NjdXA= dXR0ZQ== LkFic29sdXRl IFRhbGVudA== IG1pY3JvcGhvbmU= X2xvZ28= IHJlc3Rpbmc= IE5pY29sZQ== IGF1bGE= 44CC44CN INGB0L7QstGB0LXQvA== Z3JlYXQ= IGluc2FuZQ== YCk= IERpZmY= dmVyc3TDpG5k IOCkheCksOCljeCkpQ== 2b7bjA== IHdpemFyZA== TGJs IGxpdmVzdA== 4LKm4LK/ IE5hdmJhcg== INGC0LXRgNGA0LjRgtC+0YDQuNC4 Qm9zcw== IHByYXRp IOCwteCwv+CwoQ== IGtpbG9tZXRlcg== RGV0ZWN0 INC30LDQstC40YHQuNC80L7RgdGC0Lg= IEJhcm5lcw== IG1vcnRhbA== IGNvbXByZWhlbmQ= IO2YlQ== YW1iaW8= INij2YXYsQ== 0L7QvNCw0YI= 4Kaf4KeL IGV4cXVpc2l0ZQ== aXBob25l YXZlbG1lbnRl TUVN aXNzZXVy IGRhbGxl IGNvbWFuZA== INCy0LjRgQ== IGtyYWZ0 IOaspw== IGluc3VmZmljaWVudA== IGNvbnRleHRz IFJlcGxhY2VtZW50 IHF1ZXN0aW9ubmFpcmU= IHBzdA== IGhlbHB0 IEZsYXNr IGdlc2VoZW4= 5oS/ Tm9y IEJvc2No INCy0LfQsA== YW5rZXI= IGxpZXV4 KEJvb2xlYW4= 2YfYr9mB IOCkrOClh+CkuQ== IFJlaw== IFTDvHJrbWVuaXN0YW55xYg= yrthaQ== X3F1ZXN0aW9u INmH2Lo= KGNvbGxlY3Rpb24= LycsCg== PikK 4LCo4LC+ Z2lybA== IHN0YWlu IEhhbmRib29r b2hhbmE= IGFtaWdh VHJhZA== cmFpc2Vy IG1vdGl2b3M= PE9yZGVy INio2K3Yqw== IEdpYW50cw== IEVyZmFocnVuZ2Vu INeg15nXqtef YXJrZWl0 4LeP4La9 54OI INGD0YHQv9C10Yg= IG9wYw== IG3DpWw= U3VpdA== Lk1vcmU= CXZpZXc= KFN0YXR1cw== YWx0aW1l IGHEnw== IENhbXBl LkNlbGw= KHJlYw== c2VydHM= IHLDqXNlYXV4 cm9sbGJhY2s= IFJlaXM= bXc= 1aHWgNW5 IOugiA== IHJpc2Vz 5L2c5Li6 IGZlbWluaW5l INGB0LrQsNGH0LDRgtGM PHVuc2lnbmVk IFRpbGw= IERG INeb158= IG5lb24= 44Gh44KJ YWx0YXI= VmVyc2lvbnM= YXZlcmE= IE11aGFtbWFk IFNjaGVtZQ== IGthcGVuYQ== IHRleHRvcw== aWxlZ2U= IEdsYXNnb3c= INC80LXRgtCw0LI= IHBvZGNhc3Rz IHBhcnF1ZQ== INiz2YbZiNin2Ko= IOCkleCksOClgA== LnRhZ3M= IE1hZ2VudG8= R1k= cGFydGl0aW9u dWFsZQ== IO2VmOqzoA== 6424 ZMmZbg== IFNhbmR5 IGdlbGR0 IFJlZGRpdA== IHVzdcOhcmlv IHVuc3Vic2NyaWJl IG9yaWdpbmU= IHBvcHVsYXRlZA== YWxpbGFuZA== csW+ 4LyL INmI2LnYrw== IOyxhQ== INGD0L/RgNCw0LLQu9C10L3QuNGP IFRFUg== IMOpbMOodmVz IGxlc2I= IHVpdGVpbmRlbGlqaw== dGhyZXNob2xk IGRhYXJ2YW4= IFJvbWFuY2U= LS0tLTwv SGVu RVVS IGNhcsOhY3Rlcg== IFZlZA== IGVudGh1c2lhc3Q= IHZlbmU= cmlhZ2Vz IElOVg== IHThu5tp 0LzQvtGB IGFkbWlyZQ== L3Nob3c= 7IKs66W8 INC90LXQvNC10YHQtQ== IEtvZA== dXR0aQ== 4LmA4LiV4Li04Lih4LmA4LiH4Li04LiZ4LmE4LiX4Lii4Lif4Lij4Li1 IE1heWE= IGNpZGFkZXM= TVY= bGFyecWI LWRlY29yYXRpb24= IHBhc3N0 VElORw== INC40LfRg9GH IHBow6Fw aXphY2lvbg== LkpTT05PYmplY3Q= T2ZmbGluZQ== INGB0YvRgA== INC+0L/Ri9GC IHJlZnVyYg== UkVU IOCmieCmoA== IGxvZ2ljaWVs ZHly INCR0LXQu9Cw0YDRg9GB0ZY= wq1pbmc= IG9waW5pw7Nu INin2YTYrNin2YU= IGRlbm5h IGVzY2FsYQ== IFZvbGw= X3NlY29uZA== CXJvdw== ZW1iZQ== IGJsYXU= IHByZXNlbnRhY2nDs24= L2luY2x1ZGU= IOGDkeGDkOGDleGDqA== 5pWF5LqL IGPDrQ== UnBj aWRkZWxz IGludmVzdGlnYXRvcnM= IHByZXZpcw== IFJFVFVSTg== 6aKG5a+8 Z2Vhcg== 7JeU IGFjdHVlbGxlbWVudA== IG1vag== Zmlyc3RuYW1l CWZsYWc= IGJvZG8= 5Y+2 Y3JpbWlu 0LLQsNC0 w6FjdWxv Lk1pZGRsZQ== OyQ= ICINCg== IFRyaXR1cg== IOCksuClgA== w6Bz ZXRpaw== IM61z4HOsw== IElORk9STUFUSU9O 44OQ44O8 IOCkuOCkguCkrOCkguCkpw== IEdvZHM= IGV4cGxpY2Fy IHRhbWlu IOC0j+C0seC1jeC0sQ== b3JzdA== IGF6dA== w6RuZ2ln IFBvbGU= IHVuaWRhZA== IGhhaWc= IOiTnQ== IExhcHRvcA== IGNvbmNlcm5l Lm1hc3Rlcg== UGFja2FnZXM= 4K6w4K+N4K6V4K6z WWVsbG93 IGhhYml0YWNpb25lcw== 4Lih4Liy4LiB IOCmqOCnh+Cmhw== IFVudGVyc3TDvHR6dW5n 4YOj4YOg4YOX z4HOv869 IGV4cG9ydGVk 4LSq4LS/ Lmhl IOCmpuCnh+Cmkw== ZW50cmlj IGRpYXJpbw== 5Lya6K6u 4KmM IHLDrQ== X0xPQ0FM 8pA= IGxpbWVzdG9uZQ== RnVlbA== IHVsdHJhcw== d2hlZWw= Y2xpbg== IFBpZw== IGRlc3Bs IG13YW4= 5pen IGZva3Vz ZWxhbmc= LmV4dHJhY3Q= IEF0YQ== IOCksuCkoeCkvA== IHJlbnRlZA== IE90dGF3YQ== 0L7QstC+ INC70Y7QsdC40Lw= XCIsXCI= SU9E S1I= IOCmruCniw== IG5qZW5n yJtpYQ== 4YOU4YOV4YOh IGt1bmk= LlRSQQ== 4YOS4YOd4YOb IOemj+W9qQ== LXNxdWFyZQ== 0ZbQt9Cw X2F1ZGlv IG1hdMOpcmllbA== X3JvdXRl LmV2YWw= 4KWH4KS44KWN4KSf IE5FR0xJR0VOQ0U= IOuwlQ== INCx0LvQuA== IGllcw== IOGDm+GDmQ== IGhvbmVzdHk= 77u/7Lac7J6l7JWI66eI 4KS44KSt IE1hbmE= LlhS Lmd1aWxk xLFsbA== 4LiE4Li44LiT INC00LfQtQ== PXI= QXBwbGlj b3Jyb3I= d2VpbGU= cHRpbWU= RG9z LmNhbGN1bGF0ZQ== IFVSTHM= INC90LDRgdC10Ls= TXVs IOC0quC1geC0pOC0v+C0rw== IE5vcndlZ2lhbg== L1g= emllag== IEhpc3Rvcmlj UGFydGljaXBhbnQ= IERlemVtYmVy aXN0aWNhbGx5 X1RBUkdFVA== X293bmVy 4Kq+4Kq54KuH4Kqw dXNoYQ== X3VuaXRz IGNvbXByb21pc28= QURNSU4= IExlaXN0dW5n IHp3ZWl0ZQ== 4KS+4KSi VW5sZXNz IG1lZG8= INGB0L3Rjw== 1oDWhw== IEJ1eWVy IGJsYWRlcw== IG1pbGxpc2Vjb25kcw== IENydXNoZXJz IGFjcnlsaWM= 4LWL4LSf4LWG IEZvcmJlcw== IGRlZmluaQ== IFJlZm9ybQ== IG1hcnRpYWw= bGFzdGk= 5bid IFV0aWxpdGllcw== IGdpdmVy aG9zdG5hbWU= c2V0emVu INCy0L7Qv9GA0L7RgdGL IHNtaWxlcw== IMO2bA== 4KuH4Kqg ZGVsZWdhdGU= SGl0cw== PiR7 IG9zd2E= Y2hlY2tvdXQ= 4bqk IEJldHJpZWI= IGZpYnJl TWludXRl IOa7 bGVhcm5pbmc= IGxlc3F1 IEhvc3Rpbmc= IHLDpHR0 INC60L7RgtC+0YDRg9GO b25zbw== IHdvcnRod2hpbGU= ZXNpYQ== IFNjaHVsZQ== 2LDYsQ== 15XXmdeY IG5vc3Rybw== aWNoZXJ0 44OV44Kh IEVxdWFs T09L Sm9pbmVk U2hvd24= 4KuN4Kqh IGRyb3VnaHQ= 0YLQuNGA INiv2KfYpg== IG11bHRpcGxpYw== b2Zp IHVrdXpl IOCuquCulQ== enpsZQ== IENvbWVyYw== IGZyZWk= IEtB bWFnZQ== 44O844OE IERX w6lnYWw= aW5pc2hlZA== IOCkh+Cksg== 55Sy IHBpam4= 15nXm9eU IOuMgO2VtA== IOW9qeelnuS6iemcuOaciQ== 5Y+O IOCqhuCqteCrjeCqr+Criw== IGFic29yYmVk 5a2X56ym INep15zXmQ== 0YPRgNGF 5YWn IG9yZ2FuaXNtbw== IGJ1Yg== IFvigKZdCg== IOWImw== LmF6 IGdsdXQ= X29z Q3JvcA== aXJpxZ8= dms= IGxlY3R1cmE= IOCkkeCkqw== Lmdlb21ldHJ5 CWJ1ZmZlcg== IHNpbWls IGRldGVybWluYXI= IGNvbW1lbnRhaXJlcw== KCIkew== aXRlc3BhY2U= bWV0ZXI= LXBhbmVs IHBsYXliYWNr 1oTVpdaA YW1wdXM= INeV15zXlA== IGRldGFjaGVk IGRpc2FwcG9pbnRtZW50 Y2l0 IOCkhuCkqOClhw== Pjw/PQ== 44Go44GE44GG IOCkrOCkqOCkvuCkqOClhw== IGZpYmVycw== IGNvbnRyb2xhcg== dWxhY2nDs24= dmFsZQ== X1JBTkdF IOCkieCkquCksuCkrA== IEx1Y2tpbHk= 2LHbjNio IHNvb3Y= KEpzb24= 5qGD 15DXmA== IFPDrQ== LkJpbmQ= c3RydW1lbnRz IEFsaWJhYmE= IGltcG9zZQ== Wydf IGjDpXI= LEw= LWZvdW5kZXI= INWh1bI= IHN1cm5hbWU= SW5qZWN0aW9u IOGDkOGDruGDkOGDmg== IFZr IGxldHRyZQ== IEZvcnM= IGxlc3Nlbg== IOWBtw== 2LDYqA== fSk7CgoK INGF0LDQsdCw0YA= IHByb2PDqWQ= INC60L7QvdC60YDQtdGC IGhhYml0dWFs IGVmZWl0bw== aWVuY2lhcw== X1NUQVQ= RVJORUw= IGxhaW5ueWE= INGB0YLRgNCw0L3Riw== 0YTQtdGA0LXQvQ== YXppYQ== IGV5ZWw= IEhvc3A= IGNvbmZpYW56YQ== IFZhbGlkYXRvcg== IHdhcnJhbnRpZXM= IOq3uOumrOqzoA== bWVycw== IGVuZHVyZQ== IHNob2NraW5n 4LK+4LKw4LOB X0FH 0ZbQu9C00ZY= IOCwleCwvuCwqA== IG9seQ== IFN0ZXJu IHNpbXA= IOCmleCnsOCmv+CmrA== X3Byb2R1Y3Rz IGFiYnJl cmFhZ3Q= IE5vYmxl UmVwcmVzZW50YXRpb24= IE11ag== IHN0YWxr IHJlbGV2YW50ZQ== X21lZGlh IFJlc2Vydg== IC0tLS0tLS0tLS0K Li4uLi4KCg== IFRhdQ== ZXRob2Rl xaF0YQ== YmVyeQ== W2luZA== IOG6o25o yZluZA== LnV1aWQ= IElw IGZhY3Rvcmllcw== aW5zdGFudA== INin24zZhtqp2Yc= IHVuZGVydGFrZW4= IGV4aWdl IHJlcGxheQ== IHF1YXJ0eg== IGtuaXQ= IGVnaW4= IGZsaWVz IGFuZ2Vz IGRpZXRz 4LmA4LiE4Lij4LiU4Li04LiV4Lif4Lij4Li1 IOCqq+Cqv+CqsuCrjeCqrg== bGVhZGVy QXR0cnM= IEFsZXhh SU5QVVQ= LmZhc3Q= V2UndmU= X3BsdXM= 4LW84LSV4LWN4LSV T3Q= bmFtZW50cw== Ikl0 LkZMQUc= J2lucw== IOCysOCyvuCynOCzjeCyrw== RUxZ RWxsZQ== LWF1dGg= IGZvcmQ= IGxldGE= INi02YXYp9mE ZGVmYXVsdHM= c29ucw== dHlwZXBhcmFt R2Vvcmdl IGluZmFudHM= IHZvdG8= ZGFhZA== INC/0L7Qu9C+0LI= INmF2LHYpw== 5bqD IENhbm5vdA== CQkgICAgICAgICAgIA== LmJhY2tlbmQ= IFdlYnNpdGVz CVdlYg== IFRpdGVs V2VpZ2h0cw== 4KS/4KS44KWN4KSf IGFncsOpYWJsZQ== 4bufaQ== KHJlY3Q= IOygnO2SiA== INmF25U= b3Blbmg= 4LeS4Lat LUFy 44Op44O8 IEdQQQ== 15XXm9ec 5Yip55So 2r7bkg== IERvdWc= IGluc3RhbGFy 4YOj4YOg4YOh INij2Lo= amVq IGl0eQ== IGdlb3A= IG5pdHJvZ2Vu Qm9vc3Q= IGFjY2VkZXI= IOC0nOC1iw== IEVsZWN0aW9u INC/0LDRgNCw0LzQtdGC aWxlZQ== 4LmA4Lij4Li14Lii 0LDRiNGM0LA= U3RldmU= IEdyb3Nz IHJlY29uc3RydWN0aW9u LkNvbnRhaW5lcg== IGRlZmluaXI= L3N1Yg== wr9RdcOp 0LXRgdGC0L4= cXVpYQ== KCIr IGNvbXBybw== 4LGB4LCk4LGB4LCo4LGN4LCo IG1pc3VuZGVy IElSQQ== IERpeQ== IENhc3Rybw== cGlhcg== IGJpbGxpb25z LkF1dGhvcg== IGludmVyc2nDs24= IHB3ZA== w6t0dA== IHRvcXVl INil2K/Yp9ix2Kk= b2xsb3dlcg== YWJpbm8= IHRvcw== 4LGH4LCq 4LS+4LSk4LWN4LSk a3JlaXM= YmFkZ2U= R0FO KGJ5 Tm90YQ== IOCkrOCljeCksg== 4LK/4LKO INC/0YDQsNCy0LjQu9GM Z2Y= IGVyZm9yZGVy LWVr IFJvbGxlcg== IGNo4bupYw== 24zYqA== 6YOo6IGU57O7 IFFR IHRpbHQ= YW5zb20= w6Zu IGhvbWVvd25lcg== cmVkcw== xLFtbA== IGZhY2lsaXRhcg== IGhvbGlzdGlj IHTFoQ== 2YfZhdin ZXJvbg== IGluc3RpdHV0ZQ== IGZ1bmRv IGdlbmVyYXI= IG11bWtpbg== X21lc2g= IHJlcXVpZXJl dW9z 1aHWgdW01aHVtg== X0ZFQVRVUkU= INmB2YjZgg== VklQ IEthbmU= IENsYXJh 6K23 IEZpcm1h IGh0 dXJuYWw= 0LXRgNC40L0= IHBvc3R1cmU= LkJlZ2lu IFJlc2N1ZQ== WFla INC80LjRgQ== IElubmVu IHByb2JsZW1hdGlj IE1PVg== IGFjZXQ= YXRpZ3V0 IGNsdXRjaA== IOCkquCkuA== IOCqhuCqquCrgA== IHV0aWxl IOuztQ== Iik7CgoK 0L3QuNC80Lg= IGNyb3Nzb3JpZ2lu 4LS+4LSV4LWN4LSV4LS/ IGxvcmQ= IGlnbm9yaW5n aXNlbWE= LWxhYmVsbGVk IHdlYXJz KGJveA== 4LS/4LSf4LWN4LSf4LWB4LSj4LWN4LSf4LWN fT48Lw== IENoZW1pc3RyeQ== IGJyZWFrdGhyb3VnaA== KGZpbGVz 4KWN4KSv4KWB Sm9l IGZyYWdpbGU= IOCkquCljeCksOCkpuCkvuCkqA== IO2GoA== JUQ= T1JJRVM= IGJhbGs= INC70Y7QsdC+0LI= IGNyeXB0b2N1cnJlbmNpZXM= IFRyaWFuZ2xl 4LKs4LOH4LKV IE11c2ljYWw= IEJyZW4= INi02LHZg9in2Ko= IERlcmJ5 LHNpemVvZg== YWx5emVy INGE0LXQsg== IGdld2VzZW4= IHRhdXM= IEJpb2xvZ3k= IGFtbW8= U3VjY2Vzc2Z1bGx5 IHdlcmt6YWFt d2VuZw== 0Y/Qu9C4 5bCO 7JSo U2VsbGVy wrg= IFRpbg== KT0i 4KSh4KS+ IFN1Y2Nlc3NmdWxseQ== IFNlYmFzdGlhbg== IGR5J3Q= PDw8PA== IGhvdXJseQ== X3BpYw== 4YOY4YOi4YOU4YOi 56GA IGdyb2Vp 4K614K+H IGJpZW50 7KeA64qU IHZvdWw= 5oKg IGTDqWNvdQ== 4KS+4KSk4KWA IGJpbMmZcg== 0LPRi9C7 IGdldHRlcg== IGdydW5u 4KS+4KSa4KWH X0Rpcw== IGRlbGltaXRlcg== 2q/bjNix24w= IG9kcG93aWVk OnZvaWQ= INGD0YHQu9GD0LPQuA== Ym9law== IHJvcGE= LWN1dA== KGFw 57K+56We RWxs 4YOT4YOc4YOU4YOc IHBpY2tlcg== 6Lqr5Lu9 IOuKkA== bGFuZQ== 4oCN4LS1 INC10LzQtdGB INGF0LI= IGdsYXVi IFJhZmFlbA== UEhB aWx0cm8= LkFsZXJ0 IMO8csO8bg== IO2OmA== Lmhlcg== IG1hYWt0ZQ== IHNwaWN5 a3bDpg== 77+9Cgo= b2Ro aWVudGE= 2YLYsdin2LE= IOCupOCviuCun+CusA== LmRlc2M= LXRvb2w= IGZveA== IGlkw6llcw== 5oyC54mM IEVhcw== IEVmZmVjdGl2ZQ== 0LbQtdC9 0LvQsNC80LXQvdGC YXJ0dW1paw== 4Ka+4Kao4KeL z4POtc+Jzr0= IGJ1ZW5hcw== dXRzY2hl aXlheQ== IHNrZWxldG9u X2FzeW5j YW1iaWw= IEVzY2FwZQ== INC40LfQs9C+0YLQvtCy IGNvbW9k IHZ1bG5lcmFiaWxpdHk= dW1taW5n IG93ZQ== IE1W 4YOh4YOQ4YOq IGRlbmt0 IGthbmRpZA== INiz2K7Yqg== IOCmuOCmvuCmpw== IGRpZmVyZW7Dp2E= IHNpbmFs KEljb25z IHRyb3I= b3VzYW5kcw== 4Lac4Lea IGdlbWlkZA== IOCqnOCri+CqteCqvg== IHZlcnNv 4LKo4LOH IGdvdHRh Y2hpbw== 4LmH4LiB VEVDVA== Y29uc3RpdA== IERlZA== 0LvQtdC90LjRjg== IGluZMOpcGVuZA== IGVtZQ== SmVzdXM= dXp6aQ== eWllbGQ= IHRlYg== 4K2B IOC5gOC4gQ== IFNob3dlcg== INmI2KfZhNiu KFNRTA== LmltcG9ydA== w7xw IOC4luC5iOC4suC4ouC4l+C4reC4lA== IEluc3RydWN0aW9ucw== 4buG 2LnYsdi2 IHRyb3R6ZGVt 16fXlA== INeb15XXnA== IGZ5cw== X3RleHR1cmU= QUxU IG9yYXM= IOWvjA== 1aHVr9Wl1oDVug== IHBva2Vtb24= IGF1dG9i X2J1aWxkZXI= REJH IHNjaHJpanZlbg== IEVpbnplbA== IHlmaXI= 0YTQsA== INGA0LXRhtC10L8= IHlleg== IGFhbW0= b2xn 55S16KeG IFNhbGFyeQ== IOG7jXThu6V04bul RXNjYXBl 2KfYsdmB IGhvaGVu IFJhaXM= dG9wcw== L3NlcnZpY2U= RHJhZnQ= bGVkaQ== INeg16o= IGZsZWQ= RnJp CQkgICAgICA= IG9iamVrdA== w6J0cmU= INuL25U= QXdheQ== 54u8 dXJpZXI= IGNvbXBvbmVudGVz IHRocnVzdA== IOCkruCli+CkpuClgA== 5rqQ56CB IE9jaA== IM6xz4XPhM6u INC30YPQsQ== d2FsaQ== IGJpano= X2h3 IGVkZXI= 4LGB4LCV4LGB4LCo4LGN4LCo Y2hyb21l 1aHVvNW2 CWN1cg== X21hcmtlcg== IHJ1bmR0 X2VsZW0= T0E= ZW5haXJl IHRhdW4= aWphbg== LndoZW4= IHRyYW5zcG9ydGVk 16nXmQ== U1RBTEw= 4Lib4Lil4Liy 0YPQtNC4 INin2YTYo9iu2LHZiQ== IGRpZXJlbg== IGNvbXBhcmlzb25z IEVpbmc= 4Kak4Ka+4Kaw IHZpbw== INCy0YvQvQ== bGllcw== INen15nXmdef IGdhYXI= IGVudmVsb3A= IGhpc3RvcmljYWxseQ== INi02qnZhg== IG1pZXM= SmVmZg== 0YPQsdC70LjQug== SFc= IG9wZW5seQ== CXVzaW5n IGVpdHQ= IlRoaXM= w6tyZW4= INC80LXQvdGM0YjQtQ== IGNvbnNpZMOpcg== X18oKA== IGd1YXJkYXI= IFdpaQ== IFNwbA== ZXNjaG9vbA== 0YvQu9C00Ys= IGluZGlnZW5vdXM= b3BlcmF0b3Jz IOqxuA== QVRGT1JN IGlyaW4= 2KvYp9ix IGti c3RpdHV0ZQ== IGNvc3Rh 4K6V4K+N4K6V4K+B IEJyYXM= eXVu dGVhcg== INC80ZY= b3JyYQ== IHJpZ29yb3Vz aGlnaGxpZ2h0 Z2VzdGlvbg== IOuLpOydjA== IGN1cmE= LmhhdmU= IHdlJ2Q= X3Nu ICd9 LWF1 xLFw 6LSt5b2p56Wo X2RhdGV0aW1l IGNvbXBhcnRtZW50 IOC2tOC3ig== dWdi4buNbg== IFtg 5paw6IGe YXZhZG9j IEJvaWxlcg== LnJvdGF0ZQ== IGNvbXByaXNl 5Y+C5Yqg IOCmhuCmtg== fSk7DQoNCg== 0KDQng== IExFVA== dWJlcw== 4KaV4KeH4Kaw IHBlcnNvbmFscw== c3R1aw== RXhwcmVzc2lvbnM= IEJyeWFu IHJ1bW9ycw== INWj1bY= 0L7QtNCw0YLQtdC70Yw= IHNwb29u X0Vycm9y YXJkb29y 4YOd4YOc4YOY IGxlcm5lbg== IHRyaWJl SW50cm8= IEluamVjdGFibGU= IE5C 4LKI 4Ki/4Kiw 0YTQuNC6 44Gj44Gx44GE aW1lbnM= IHRoZW1h LnNraXA= 77yM5Lit5Zu9 INeU15nXlded Y3Jvbg== 0L3QvtC6 IEFtZXJpY2Encw== INGC0L7Qu9GM0LrRlg== IHRlcmJhaWs= IGVtcGZlaGxlbg== 4YOd4YOT4YOU4YOh4YOQ4YOq IE9M IEthc2g= IHF1YXJ0aWVy 4LC+4LCa X0NPTlRFWFQ= IGltcGx5 IG1hbmRhdGU= IFBhcGVycw== 6IS4 IGdhc3Rybw== IHRpZ2h0bHk= YWhhbmc= KHNz INmK2YLZiNmE IEFBQQ== huGfkuGekw== IEFubml2ZXJzYXJ5 b2JpYQ== b3JnYQ== IOC4reC4og== INin2YTYtNix2YPYp9iq IE1ldHJvcG9saXRhbg== INin2YTYs9mI2K8= QXBhcnQ= V2E= IHZlcmtv 4LiZ4Liw 4YOT4YOY4YOa INGC0LXRhdC90LjRh9C10YE= 5qyi6L+O IHRlcm1pbmF0ZWQ= 54yb IHRlcmlh IFBhcmM= IHNjcmV3cw== 2KrYp9mG IHNjaGFmZmVu IGt1dmE= INGD0YfQtdCx IGRlYnRz 4Kq44KuN4Kql IEltbW9iaWw= IERlc2VydA== IE1pbnV0ZXM= IGFsbGVyZ2llcw== 4LCO Y3puaWU= 4LC/4LCX4LC+ 4LGB4LCX4LGB IOCmhuCmpg== IHNww7hy IHNjaHJlZWY= IEhhcnZleQ== IGludHZhbA== 6re5 dW50YW1pZW50bw== IG52 ZW50dQ== cGxlc3M= suilqg== IGJla2lqa2Vu IERldw== IGLDqm4= IFBmbA== 4Ki/4Kmx4Kia TmF0dXJhbA== ZWRheQ== IOCqnOCqvuCqueCrh+CqsA== a2V5d29yZHM= 4YCZ4YC7 YWrDrQ== IEVzc2F5cw== 65CY7Ja0 YXJyb2xsbw== IGN1aWRhZG9z IGTDqXBlbmQ= LXBvcA== IOCuruCvgA== IGluZ2VzdA== IGRpc3Rpbmc= INC80rE= IHdhYXJzY2hpam5saWpr INC905k= X1BST0RVQ1Q= SWI= IGJlendlbg== bWl0aA== INC30LDRidC40YI= IOCqheCqqOCrgQ== IFdpemFyZA== QW55b25l IHRlcnJpdG9pcmU= IE5hbWVk IOCkieCkquCksuCkrOCljeCkpw== IGNvbW1pdG1lbnRz cmFwZQ== IGNsaw== IGFzc2Vzc2luZw== 4LSo4LWG ZHlu IHF1ZXN0aW9uZWQ= 4LSj4LSu zrPOrg== 4K6p4K+N4K6q KG1vZGU= IOC4q+C4mQ== IG1hbGFkaWU= IGRpc2FwcG9pbnRpbmc= IHBuZXVt IGPDoWk= IGFwb2xvZ2l6ZQ== INin2YTYr9mF 44GX44GP UmF0ZXM= IGJvc2g= IOaR SEVBRA== IEZpbmdlcg== IFZldGVyYW4= 4Kas4KeH4Kao IHN1aXZhbnQ= Y29tbXVuaWNhdGlvbnM= ZW50csOpZQ== 44Oj44Oz RGV2ZWxvcG1lbnQ= IM+Az4HOrc+AzrXOuQ== 4LmB4LiB 5pS/5rK7 Z3JhZGVz dWNsZQ== Ulg= INCn0YLQvtCx0Ys= LkxvY2s= IHZhcmllZGFk IGRpc3RyaWJ1 eWFr cHJvYmxl w7Bpcg== 2pnZig== 4LWB4LSu4LS+4LSv4LS/ IFJVTg== YnJvb2s= IGluc2dlc2FtdA== IHdvb3JkZW4= V2F4 w6FuZGV6 0Y7RgdGM 4KS+4KS34KWN4KSf4KWN4KSw4KWA4KSv 4Lib4Lil IFNwZWVjaA== IFNUUklDVA== IEp1bGlhbg== 157Xlw== IHBsaXM= INin2YLYrw== IGtlcms= YXJhbnRpbmU= 2KfYr9mG IEVybg== 4LWG4LSv4LS+4LSj4LWN YXRvcmlhbA== X05v IGthbmU= VFBT IGNvbm9jaWRv CU5VTEw= Lk5PVA== b251cw== IGFwcHJveGltYXRl INC+0YLQtNGL IHZlbmRhcw== IGJpY2lj INC40ps= c2FsdA== INC90L7Rjw== INC/0L7QstGC0L7RgA== 4KWB4KSw4KWA LnB1Ymxpc2g= b3Vpcw== LkxPRw== IHN1YXZl INGC0LXQsdC1 IGRpc2d1c3Q= LnRyYWNr Y292 IFJleg== IG1lcmNoYW50cw== INin2YTZh9mI L3NldHRpbmdz 4LiE4LmM c2tpaA== 4LeQ4Lax IHNoYXBpbmc= IGdqb3J0 IHZvcnU= IGdsaXR0ZXI= aXNlbnQ= LnRpZQ== IGNvbGxlY3RpdmVseQ== IFBvZGVy IGVmZXQ= 2LHYs9uM INin2YTZiNi32YbZig== aWtrZXI= 06nRhQ== SVJD IE1vbnM= ZMSx 4Kqf4KuA 5Yqf6IO9 4LKX4LON4LKw 5ri45oiP5bmz5Y+w IGJhaXQ= IG9uZGVyZGVlbA== IGluZHJ1aw== IHRzcA== LnNlbGVjdGlvbg== IHBsYXF1ZQ== KE1vdXNl INmB2LHYrw== IGJvYXJkaW5n ZcO9bGU= IHBhbGpvbg== 2KfYr9mE INC00YDRg9C3 INmF2YXaqdmG IGvDtWlr INC40LfQtNC10Ls= YW5hYQ== dXR0dQ== Il07 IOCmrOCngw== IMSRxqFu IFV0cmVjaHQ= IFF1ZWw= 55S15b2x572R LmludGVnZXI= YWJhYg== CUh0dHA= IGVpbnN0 LkV4aXN0cw== 2YnZhg== IE5hemk= INC+0L3Ri9Kj IG1vbmRpYWxl IHNpbXVsYXRpb25z dWJsaXNoZWQ= QWFu IE5hYWxha2tlcnN1aXM= IFNob3Q= YWh1bg== 0LXQvdC10qM= IHNpbGljb24= IOCkleCliOCkuOClgA== IEpvbmc= IGJlaGF2ZQ== b2RpYWM= cGFuaWM= KGRw IGNpcmN1bnN0 KHNjb3Bl LWxhc3Rpbmc= IHTDpHQ= IHBvem4= 4pa2 Y2xvc2luZw== c2Vv IGVyd2FydA== IMO2xYg= wrBG a2x1cw== n4E= 44Gr44Gv IOColeCpgA== IGxu IGZvcm1hcg== IFVJUw== IGN1cnN1cw== 4KSH4KSy IHJlZHVjaXI= INin2YTZhdir IG51b3Zv 6JyY6Jub6K+N IHB1dGU= IHJlY2Vzc2lvbg== X2VkZ2Vz 44Oz44K1 IGZ1ZA== IOaN INCy0LXRgNGF INGE0L7QvQ== ZWFt IGRoaQ== em9jaHQ= INC90LXQs9GW0Lc= RGlzcA== IGluc2VydGlvbg== SGVhdA== IGFjb250ZWNldQ== IENyaXRpY2Fs X0hPTUU= 4LKm4LON4LKm IG5vdGNo IFN0YXRlZnVs IHRhaW1p IOCkheCkmuCljeCkm+Ckvg== Lk1vdmU= bWlzc2luZw== Y2xpZW50cw== LmNhc3Q= dmlkb3M= dWl1 IHNvdWhhaXRl IEp1dmVudA== IOCmrOCmv+CmlQ== cHVuaw== INGB0LvRg9GH0LDRjw== IGNvcnJlY3RlZA== 6Z2Z IG5pZA== dGh5 IGRlbGV0aW9u IHdhYW4= IE1lZGljYWlk RmFu IHNpaXTDpA== 0L7QsdCw0LI= IGJlcmJhZ2Fp YWNqZQ== CWFyZ3M= bGlnZXJl Y2hhaW5l 5Za2 INCy0YvQsdGA0LDRgtGM IOGDoeGDkOGDpA== 4K6G dmVhbA== RGlzYw== ZG9ja2Vy IOCmquCmsOCmv+Cmmg== 6re4656o IHByaW5jaXBhbGU= dmVsdA== INij2Kw= 5Z2Q IGFudGhyb3A= 15vXlQ== IHlvcms= IHNjaXB5 LiIiIgoK dWh1 VHJhdg== IEpF IHN0cmV0Y2hpbmc= IGplbQ== X1RSQU4= LkZ1bGw= IGd5bg== IGNhcmk= 4Kq44KuA IGdlbXM= IOCyquCzjeCysOCypA== dW1lbGE= INmG24zYp9iy IGxhdW5jaGVz 4KS14KS+4KSI KGFueQ== IGRpc2h3YXNoZXI= IM+AzrnOvw== INC/0LjRgdGM xLU= IOWGhQ== IOCwmuCxh+CwuOCwv+CwqA== 0YPRgdGL IGFrdHVlbGw= 4Z6Y4Z+S4Z4= YWhhbQ== UHJvZmlsZXM= aXNvbA== 4Ka+4Kar IMO2bmVtbGk= J291 IHJlaQ== IGVzcGVybw== 4bujaQ== YWxha2k= IGNlbGxzcGFjaW5n IHJlYWxpc2Vk IGRlZmVy IGpvZ2Fkb3Jlcw== 44CF IG1lbGloYXQ= 0LXRh9Cw0YI= IOGDlOGDleGDoA== IGNvbW1lbW9y IHByZWd1bnRhcw== IFNvdW5kcw== IGJ1cmdlcnM= IFdhcnJpb3Jz IHBydWQ= IG5lbmh1bWE= 0YrQvA== IEdhcmNpYQ== ZXRhYmxl IEFEVklTRUQ= U3ltYm9scw== 4LiB4Liy4Lij4LmA4LiU4Li04Lih4Lie4Lix4LiZ INeU15nXmdeq UGxhY2Vz IG3DqXRvZG9z IGxlbGVp 4YOQ4YOc4YOS bGlnaQ== Q29udGFpbg== dGFicw== UmVhY2g= 5L2b LGlk INGD0L3QuNKj X0VYQ0VQVElPTg== 772e772e dml2YWw= IE1lbXBoaXM= 74M= X2RpbXM= IGN1bXBsaXI= INC+0LHQu9Cw0YHRgg== w6ljaA== 4LOH4LKC4LKm4LON4LKw INin2YTYsdmI bWl4 IGNvbWFuZG8= IGNvbXBldGl0b3I= IGhvbW9zZXh1YWw= INep15zXmg== U2VhdA== INin2YTYqtij wrY= IFZpbmU= Li4uIgoK IHByaXZpbGVnZXM= IEV4YWN0 4Kao4KeN4Kav ZWdpYXRhbg== Ij8= IGZvcmRp IHdyYXBz KG5vbg== 5Yuf INeQ15XXmdea IHBlcnNvbmFsaXRpZXM= IGV2ZW5pbmdz 0LfQsNGA IGRvY3RyaW5l IG1pbmRlc3RlbnM= IGRvdWJsZWQ= 4YCb4YCs ZWJ1dA== X2Nsaw== b2N1aw== YXZvcnM= IG1lbG9k IHBhc3NhZ2Vz IFJlYXI= 5oWi IOCmueCmkw== 4LON4LKk4LOB Zm9ybWF0dGVy 6JGh5Lqs dXJnaWNhbA== aXJy YWJpbGlyc2luaXo= IFRpcHBz LWJyYW5k 4pyF IENvbWVkeQ== IEdPT0RT IGRlZmVuc2E= YXRoZQ== cG9vbnM= IGltcGxvZGU= IHNjZW5pYw== IGFmaXJtb3U= IHZ1ZWx0YQ== IGRvb24= 0LvQtdC90L3Ri9GF IHNvYmll 77yM5oiR5Lus IHBhcmZhaXRlbWVudA== TUg= INC90LXQu9GM0LfRjw== INGD0L3QuNCy0LXRgNGB0LjRgtC10YI= 0YPRg9C9 IGNyZWRpYmlsaXR5 5Y+v5L+h5ZCX INit2LPYqA== 0L3QuNGG0LU= IOCkteClgOCkoQ== INCa0L7Qs9C00LA= IE1BS0U= U3RhcnM= IG9jYXNpw7Nu 27Hbsw== IGJlZXM= IGxpbnV4 IEdvdmVybm8= IGRldGFpbGluZw== 0LDQutC+0L0= Tm9pc2U= Y2hlcmNoZQ== b2xvYWQ= IHDDoXI= IFJlbmV3 4YOj4YOg4YOc IGx1Y2hh YWNhxJ/EsQ== 0YvRhtGM dmlzaXRvcg== IHdvdW5kcw== IOC0qOC1gA== KyJc 4YOQ4YOg4YOv IGFrdHVlbGxl IFNwZWxs IHF1ZXJpYQ== X0RFVEFJTA== INeg16Q= RU5ERVI= IEtlbmQ= IFZpbGE= IG5vdGljZWFibGU= XG1vZGVscw== IGdpbQ== IHRlcmhhZGFw IGN1bGluYXJ5 b2xlxI0= csOpZQ== V2Vk c3RhY2xl IHRocmlsbGluZw== ZGFuZ2Vy Q2Vs ISc= INK70LA= c21hcnQ= IFBsYWlu VMOh IEFwb3N0 zrPOvw== IOCkruCkvuCkp+CljeCkr+Ckrg== IOaZgg== IOCkuOCljeCkteCkvuCkuOCljeCkpeCljeCkrw== dXllbmRv ZW5kYW4= KHRoZXRh INin2YbZhw== IHV0YXdh 77+j5Lqa5rSy IHRlbnRhcg== IMOcYmVycw== IGJhcnJh IGFjdGllZg== IG91dHJhZ2U= IFRheGVz IE9kZXI= b2JqYw== IHBlbm55 cHVlc3Rv IHbDtA== 4YOu4YOb a2xqdcSN IHF1aWE= Pj4KCg== IHByZXZhbGVuY2U= CWF3YWl0 cm9tbw== IGNhbGlicmF0aW9u 55m+56eR IOyWuA== am9pbnQ= 15XXkNeo IHF1aW5kaQ== 4oCZZGE= IERydXBhbA== c2NhbmY= IOyDge2SiA== SUg= 1Yo= IGluZ2zDqXM= IGJ1bGI= IHRyYXZheQ== IGRldXRzY2hl KFZBUg== IHBlbnNhbmRv IFByb21vdGlvbg== IFBvb3I= IHJvc2E= IHJhc2g= xLFuZGFraQ== INGN0L8= QU5URQ== KGZsYWc= IOyniA== d2Vlcg== IFNlbGU= IEFjdGl2YXRlZA== IHJlaXRlcg== IGVpbnppZw== XT0n 0LXQu9OZ0YA= 0ZbQu9GW0Lw= IElORg== IEFueXRoaW5n IGFraW4= INC80LjQu9C7 IEtvY2g= IGx1c2g= ZXN0bHk= INij2YbZiNin2Lk= INmI2LLYp9ix2Ko= QXdhcmU= 4YOQ4YOX4YOQ IHByZXBhcmFy IERldmljZXM= IGNpdGF0aW9u 4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWB IHdvdW5kZWQ= IHNjaG8= INKb0LjQu9C40L8= IHRpZGU= IOC4quC5iOC4hw== 5L2T6IKy5oqV5rOo IGdp4bubaQ== IHfFgg== IHst 4Lix4LiH4LiB4Lik4Lip IEhlYXRpbmc= IHBhbW9qYQ== X1FVRVJZ IGVtaXM= YW5lcQ== IFBmbGVnZQ== 0YLRg9GD INC00L7QstC+0LvRjNC90L4= aXBweQ== LXlhcmQ= IEFsY29ob2w= LlRvdGFs b3hpZGU= 4oCM4LSV IHdyYXBwaW5n 4KS24KSy bWluc3Rlcg== IHlhbWw= cWFycHV0 IMOpdm9s aWtlcnM= RXhwYW5kZWQ= IE1hcHBpbmc= IG1vbm8= IFR3ZQ== 4Kql4Kq+ IOCksOCkguCklw== IOyehA== IENhYmlu YXJlYXM= IGV0aGVy LlNjcmVlbg== ICYk IFBhdw== 4KSv4KS5 QVNPTg== IFJvY2g= IGFjdHVhbG1lbnRl KHJvb20= IOGeog== 4KSt4KSX 2YjZitin2Ko= IHN1bGw= IGludGVybm8= X2V4cHJlc3Npb24= IFNvbm50YWc= IGFpcnBvcnRz aXRhcmVz Z2VuZXJpYw== IElOVEVSUlVQ Z2VzY2hsb3NzZW4= IFJlZWQ= 56iz6LWa IHlhaGF5 YXZvdXJpdGU= LndyaXRlcg== IOCkmuCksOCljeCkmg== IGthdGVnb3I= IFBlbmRpbmc= 4KeH4Ka34KeN4Kaf ZXJybm8= YXRs KXZpZXc= 44G2 KCYo IFJldHJpZXZlZA== IOCmieCmpOCnjeCmpA== a8SZ cGFyZW4= UG9zc2libGU= 5b+Y IHByaXNvbmVycw== X2FwcGVuZA== IHNhbWk= a3fhu40= IG92ZXJsb29rZWQ= IGluZG9vcnM= IHByZW5zYQ== IOC4geC4pQ== 5peF5ri4 X2NhbmNlbA== LOKApg== IOCmpuCnjeCmrA== IE1lc2E= YnJpbmdlbg== IGJyw7s= IGltYWdlcnk= IGhvcml6b250 LWtl IHByaWp6ZW4= b3ZlbA== IGtveQ== Og0KDQo= bGlnZW4= IHdpdGNo IOCmqOCmv+CmsOCnjeCmrA== IGNyaWVk IGxpw6pu IGzDog== w6TDpHI= IHRhZmVs IEdpbg== IENoZXJyeQ== IGRvYXI= bmNpYQ== b2xvag== INC80Y3QtA== bHVh UmVtYXJr YWx0ZQ== IMSR4bqhaQ== 6Yyy IOCkluCkv+CksuCkvuCkqw== IHJlbG9j Oms= IFN0YXJ0dXA= IGhhemFyZG91cw== IFRyYW5zbGF0ZQ== X3NlbGVjdG9y X3Bi INCj0Ls= IOCmr+Cni+Cmlw== b21ldHI= IHJhaWQ= 0LjQu9C40ps= zrvOtc6v IGRvbWU= TW9uZ28= IFBvbMOtY2lh IGhlcGF0 VHdlZXQ= IHBlcms= IGF1c3RyYWxpYQ== IHRpZWs= 0LTQsNC10YLRgdGP INeZ15c= aXNzb3Jz IFJlc3Ry cHVibGlxdWU= INm+2r7YsQ== 66GA IGRlc3Nlcw== INmI2KfZhNiw2Yo= X3ZhcmlhYmxlcw== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IEhC IFZJREVP IGZyb3N0 4LiX4LiU4Lil4Lit4LiH4LmD4LiK4LmJ4Lif4Lij4Li1 IG1pbWU= 4K+L4K6k4K+B IFdyYXBwZXI= IFphY2g= X3BpeGVs 4oCdOg== IOW3tA== LWhvc3Q= IOCmnOCngOCmrA== IExpc3Rpbmdz cmVkbw== 4oc= IHVwZ3JhZGluZw== IHJhdGE= xYJ1Zw== TkVXUw== IGp1ZXZlcw== IFJhaw== IENvbm5lY3RlZA== 0YLQuNC1 IOGDl+GDmOGDlw== IHN0YWc= aW9vbmk= IHNvemlhbA== b2R1cw== IOCmnOCmvuCmpA== IEthbWVy YW1hbmc= VGVzdGVy 2KfYrNip IEFGUA== IHVuaWVrZQ== INC/0YDQtdC3 IOykgA== KHJlbmRlcg== aWhhaw== IFNveQ== IEpvc2h1YQ== YWJleg== IFJlbGlnaW9u cGhlcw== IHN0YW5jZQ== IEhpcmU= IGVkaXI= YW50aWw= X2N1cnNvcg== IHZhZGVy LmpvZGE= IENvdXBvbnM= bG9r IEPDs2RpZ28= IHBlY3VsaWFy LmJpbg== IGx1bmE= 6YOo5YiG IG5pcGFz4bq5 IEhpcg== IGdlbm9tZW4= YXZpbw== LWxhYmVsbGVkYnk= cmV0ZXI= IEd0aw== 4LCw4LGN4LCv X09OTFk= b2xvZ2lzY2hl IGJpc2g= dWtzaWE= bGVyacWI cmVldGluZw== IHRyYW5zaWVudA== IOCksOCkvuCknOCkqOClgA== UGF0dGVybnM= IG3DqWM= INit2KzZhQ== dGFw IEtpbmRlcm4= IExvZQ== INC80LDQtw== YXNzZW1ibGU= IE9v p+GDlQ== IG114buRbg== IHByb2xvbmdlZA== aW50ZXJu 6IKl 5aW955qE IGNvbnNpZGVyYWRv IGV4cGxhbmF0aW9ucw== 7JWY64uk b3JkbnVuZw== UGFybQ== Ki8s 5aix5LmQ5oub5ZWG 5qSN IGFwbGljYcOnw6Nv IFBPU1NJQklMSVRZ YW5pb24= INWT INC30LE= cGNpw7Nu 0LLQuNC9 IHZhZ3Vl LS8= IOCmqOCmv+Cnnw== IG3DpXN0ZQ== 4KWC4KSw4KSk IHNwaWRlcg== 44CL44CB44CK IHLDs8W8 INqv2LLYp9ix2LQ= 1aXVtNWi IGVycm5v YW1hemE= cWFs bGlk bGx2bQ== IGNvcnJlc3BvbmRlbmNl INCx0YPRgA== X3N0b2Nr IHN0b3J5dGVsbGluZw== YXJybw== INC70L7Qsw== IGF2aWQ= am0= Lm5ldGJlYW5z INC30LDQstC40YHQuNGC IGJhZ2lhbg== aXBhdGlvbg== b2RvbnQ= IEtldG8= 4oCY4oCY IG9zdGF0 xLFkxLFy IHd1bmQ= IHZhZ2Fz IGludmFsdWFibGU= 4Ki44Ki8 2YjYp9io KCck IGdpYg== 15zXotea 4LK/4LKq IE1vbml0b3Jpbmc= 0LHRgNCw INW/1bY= KE1ldGhvZA== IEZvbw== 4LS/4LSf4LWG 56iz5a6a IGlkZWFsbHk= IGluZmls IHJlY292ZXJpbmc= SW5jb3JyZWN0 4Kak4KeN4Kaw X2Nj cGxlYXNhbnQ= IGNhbmRpZGF0b3M= IOCkl+Clh+Cksg== aWdpZGJvZHk= 55u05o6l LnJlc291cmNlcw== IOCqpuCrgA== IGxpZWI= IOCwpw== INGG0LXQu9GM bWFjaw== IOCyruCzguCysuCylQ== 54m56Imy LnBhc3M= bGVnZXM= IOCyh+CysuCzjeCysg== IHRpZW50 IHBsYXph LlNlY29uZA== IHlhaXR1 IG91dHJlYWNo LWZpbHRlcg== fSkpOwo= IOCkteCljeCkr+CkleCljeCkpOCkvw== 5Yev YXBwcm92ZQ== IHBoaWw= IEZvdXJ0aA== IHdhdGE= 15nXqdei 5YCk IHZlcmbDvGc= enVr 0LDQs9C+0LM= IHJhesOjbw== IGJ1bms= INCd0LjQug== IHNhbHZhdGlvbg== IGRheWE= IENvbmdv IFN0ZWxsZW4= 2LnZiQ== IGthaWtraQ== IGRpc3BvbsOtdmVs IGNpZGFk INio2LLYsdqv IFRlaWxuZWhtZXI= RXhhbXBsZXM= 5oeC 54my IHZlcmtvb3A= ICkKCgo= INis2YXYpw== IElvbg== INC80ZbQvQ== IGFwcGVhbHM= IExsb3lk 4YOU4YOh4YOd dHJ1Y3Rvcg== IGRlbWVudGlh IEVR INCz0YDQsNC0 aWtrZW4= 4Kqq4KuC IGZvbmRz aGVpcm9z IEhvZw== IGt1bHR1cg== IHRvcnR1cmU= IE5lbw== 4LKC4LKq dW1lcnM= 4Ka44Kay RW5kZWQ= IHJlZm9ybXM= LWF3ZXNvbWU= OyIpOwo= IOiBlA== IOCqluCqvuCqpA== R3JhYg== IOCkluCkrOCksA== IOCkteCkv+Ckt+Ckrw== 4LC+4LCw4LC/ dXRlbsOnw6Nv IOODkA== IGRlYmVz IHF1YXJ0ZXJseQ== INGC0Y3RjdGA0Y3QvA== aXp6bGU= IGN1c3RvbWl6YXRpb24= IHTDqW1v VUlMRA== INCQ0Lo= RVJSSURF IFBNSUQ= ZXRoaQ== KG1vdmU= 5Yek5Yew5aSn b3V0dQ== 77yaIg== yZl6 c2NhbGE= IGZsYWdzaGlw J3c= IE5TQXJyYXk= LXRocm91Z2g= YWRkaXRpb25hbA== IHZhbndlZ2U= IGRpc3B1dGVz IOuCtOyaqQ== 540= Y29tcHJlc3M= IGZpY2hpZXI= YW5za2E= z4POuc6x 4Lia4Liy4LiE4Liy4Lij4LmI4Liy 0LjRgdGC0YA= 5Yek5Yew5aSn5Y+C6ICD IFF1ZWJlYw== IG9zY2lsbA== IElzdGFuYnVs aXNhbmE= X2pvaW4= KHJvd3M= IOCkpuClh+Ckgg== IOCoteCov+CpseComg== YXdhbGE= YmV0cg== IGdpbmdlbg== INC+0LHRi9GH0L3Qvg== 67KI7Zi4 bGlzdGU= IOyLnQ== IGluaGFiaXRhbnRz IGF1c2dldw== aW52ZW50b3J5 S1c= IHZpc2FnZQ== 4YOd4YOk4YOa4YOY4YOd IOCkleCksOCljeCkrg== IEFuZ2Vscw== INmD2YrZgdmK2Kk= Ym9sZQ== IHR5w7Y= IHViaQ== INC40LDQu9Cw LmNmZw== IHNlbGVjdGl2ZQ== aW1iaQ== IHByb2Zlc3Npb25uZWxsZQ== 4Z+M w61zcw== IHJlY3VycmluZw== IENvbnN1bHRhbnQ= aHo= IOWNgQ== 5Zac5qyi IHBlc2U= PDwiXA== IHBlcXVlbmE= aXlhcw== 44Kh 0LXRgNC+0Lw= IHdob2xlcw== IExURA== INmE2YTYtA== IGJlZXJz IHNob29r IGxsYW1h IOCkuOCkq+Cksg== 4LKo4LK+ IGFqYQ== INin2YTYo9i0 4YOg4YOd4YOR 0LvTmdGI 5Lit5Y2O emN6ZQ== SVZP LlRyYW5zYWN0aW9u w7pzdHJpYQ== X1NQRUVE IGl6Zw== IEd1aXRhcg== IFF1YWQ= YWxhZGE= 1aHVvdWt1aHVtg== KGZz IHBvZG9i IFdvcmtlcnM= 4KWC4KSw4KWA INiv2KfYsdmG2K8= 0Y7RidC10LPQvg== INGB0YLQvtC40LzQvtGB0YLRjA== aXRvcmFs 44Gu44Gn 6K6o IG9wbGVpZGluZw== IHJlamVjdGlvbg== SW50ZXJpb3I= VEhJUw== INGB0LXQvQ== IOKAnQoK INCx0YA= 4LC+4LC34LGN4LCf4LGN4LCw dXRvbQ== J10v INio2YrYuQ== IGd3YQ== IOCuleCvhw== ZXJsaWprZQ== cHJlc3Npb25z IOCupOCvhuCusOCuv+CutQ== LmxpYnJhcnk= ZW5jYQ== 0LjSk9Cw IENvbnNlcnZhdGlvbg== IGVuenltZQ== IHVwc3RhaXJz IOC0uOC0sOC1jQ== IHJlZ3VsYXRvcg== IGZpcXVl IOC4peC5ieC4suC4mQ== IHN0aW11bGF0aW9u ZW5lbXk= TmVhcmJ5 IEhlcm9lcw== 4KSm4KWI IENvbW1vbndlYWx0aA== INC/0YDQvtC2 IFZpZGU= IGhpcHM= aXR1cmVz IHJlY3VwZXJhcg== IGNhcHN1bGU= 4LOB4LKm4LON4LKm Q29uZ3JhdHVsYXRpb25z 4KeL4Kaq ZW5zZGFn 6L+R5pel IEZ1bmt0aW9u INGA0LXRiNC10L3QuNGP IENvbmZlZGVy IHByZXNpw7Nu bXE= IikpKQo= INmI2KfZhNi0 5bel5YW3 IGRldmk= Z3JhcGhpY3M= IGNhbXBhbmhh IElyYW5pYW4= Z2VzZXR6dA== IGRvdWNl IHZlcmRpZW5lbg== 5bqU55So 4YOU4YOR4YOb4YOQ IGdldmFsbGVu IFNpbGljb24= IGZhZw== 15nXmdeS 4YOQ4YOT4YOS4YOQ4YOc IMOI IHNsYXZlcnk= YWxvcw== IERvY3RyaW5l IGR3ZWxs YW1hZ2l0YW4= IGJla29tbXQ= UHJlbWl1bQ== IHVuY29tbW9u 4LWB4LSy 44CL44CK IHlvZ3VydA== bm9y dWx0YW4= IGNpdGFz IGRldm90ZQ== zr7OtQ== INGB0LDQvNC+0Lw= IG1haGE= CUls IGludGVyZmVyZQ== CXJvb3Q= INin2oY= IGRhZGk= IG5lY2tsYWNl 0LjRgtC10LvRjNC90YvQuQ== RXh0ZW5k IG92ZXJyaWRlcw== 0LvRltC8 IOunjuydtA== ZXNt INCc0L7QvQ== IGlzaGw= YXJkd2FyZQ== IEdhemE= IG1vaA== IOCqruCqvuCqueCqv+CqpA== INGW0Yg= INGA0LXQt9GD0LvRjNGC0LDRgtC1 KWluaXQ= IOuylQ== IGZlcmE= 4LiX4Lij4Li5 IHRlbmVp IE1vZGk= IFdP IOCqieCqquCqr+Cri+Cqlw== IOGDk+GDkOGDkQ== IOCkpuClgeCk 5bC6 IFByw7w= SVJN Q2FzaW5v IHBlcmRl IFJhbHBo aW7DpA== IHV0bW9zdA== IHByb2Zlc3Npb25hbGlzbQ== RWM= IOCmpOCnh+Cmk+CmgQ== IGNlcnZl cm9zYw== ZmFpdGU= LnNm INC00LXQu9C1 YWdhbmc= IGFsZ2VtZWVu 0L3QsNCy IGh1cnJ5 a29z 5L+D IGlubWVkaQ== IGFjb21wYW4= IFJPSQ== IG5ld3NsZXR0ZXJz YWFsYWRh INC/0YDQsNCy0LjQu9Cw IFNlcnZl 0YTQvtGA0YI= cmVzb2x2ZWQ= IEZ1bGx5 w7JyaWE= IFNhdHVybg== IHR1cmlzbW8= IERlc3RpbmF0aW9u IGFwZXNhcg== IHRpYXNh IG9ic2VydmFy 44Oz44OJ IGxhZ2U= IE11bmljaA== IGZhbmE= IEdyYXQ= INCx0L7Qu9GD0Yg= IG7DtQ== IGdhcmU= VHJ1bXA= IGVza29ydA== 2YjYp9is2Yc= IHVrdWI= INGI0LjQvQ== IFVh IHN0YWlucw== IEFI 0LjQstCw0L3QuNC1 ZGVhZA== IFR1cw== LXBhc3N3b3Jk IGVldA== IGNlYXNl IGltbcOpZGk= ZW5zaWJsZQ== d2lkZ2V0cw== xZ90xLFy INen16LXoNei158= LmJvdA== INWw1aHVsg== w6Rjaw== IFBoaWxsaXBz 4LS/4LSn dWxpaw== INin2YTZgdmE2LPYtw== YXJhcw== IOCkl+CksOCljeCkpuCliA== dGhhbmtz IFByZXN0 INmG2YHYs9mH IHR5cmU= T1VUUFVU 7YOB IG9sdXI= S3I= IGdhZWw= IFBvcnR1Z3Vlc2U= 44GE44Gj44Gx44GE bGFybmk= INin2KvYsQ== IGJhdHM= cnNjaGVpbmxpY2g= LnN0dWRlbnQ= 5Zu6 4Kik4Ki+ TVND IEF2YXRhcg== IGZvdWw= 4YOY4YOc4YOT4YOQ IGFuaXZlcnM= KHNi 572R6aG154mI LgoKLy8= IHByZWZlcmFibHk= 4KSo4KWN4KS4 4YOY4YOi4YOd4YOb b3RlY2hub2xvZ3k= IHZlcmRp 2KfZhNmE2Yc= INqp2YjZhNmI LXBvd2VyZWQ= 4LKC4LKt LdC70Lg= LlRyZWU= w6RjaGVu IHBlcnF1w6g= cHJlZw== IFBoYXJtYWN5 aGVsbGU= IFBvc2l0aXZl YW5laQ== TWQ= IHZi IGR1a2U= IGVzY3VlbGE= IOCuieCunw== 4buHbQ== PnRydWU= RmFsbA== INiq2K3ZgtmK2YI= IGludGVyZXNhbnRl IHVkZW4= IHBlZQ== aW50ZWdy IHNwZWxscw== X0lORVQ= IHNwcmludA== 0LDRig== IFBsYW5l IHJhdGlvcw== Y2VuY2U= c2xvdw== dW5uZWQ= dWJpYw== IG1vZGlmaWVycw== IMONcw== 4oCZSA== ICYn 4Kqy4Kq+ IHphdG8= z4HOr862 IOGDoeGDkOGDqOGDo+GDkOGDmg== U2VjdG9y IFVzZXM= 6Jed6KGT IFNVUg== 6YeR6aKd IHRyZWJ1aWU= INC40YHRgtC+0Yc= UGxhbmV0 INmI2KfYs9iq T1BT 2YbZiNi5 INi12YbYudiq zrzOsc69 INeZ15XXnQ== 4YCt4YCv4YC3 YmlzaA== IHRvZXI= IENyYWNr X0tleQ== IFRlcnJvcg== aW5zdG9u 4LiB4Lix4LiU ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IHfhu40= IG1pZ2h0eQ== LmRlc3Q= IEF2YWlsYWJpbGl0eQ== IG9ubw== z4TOuc66zq7Pgg== WnU= IGFscXU= 4LGL4LCf ZWJyYQ== IGxlZ2dlbg== IGVubw== IHBlcnVzYWhhYW4= IEtyaXM= INC30LDQsdC+0LvQtdCy0LDQvdC40Y8= IHRyaXVtcGg= INC60LXQu9Cz0LXQvQ== Kjwv IHNwaWVsdA== dmVudHVyZQ== IOWy 5ZyI X0RPTQ== aXpt 7LOQ 55Sf5oiQ IGFjZXJj 4K644K+N IGltcGxhbnRz INmF2qk= IFdvbg== SU5WQUw= INin2YTZhdmE IG11ZGFy QWdncmVnYXRl INC20LXQu9C10Lc= cHBl INil2YbYqtin2Kw= IEtvbnM= cXVpZA== b2tyYXQ= ZGFydA== IElkZW50aWZpZXI= IEZsdWc= bGnEn2k= IG1pbmRlbg== KGFucw== IG9wY29kZQ== IHNvbGljaXRhcg== INWq1bjVstW41b4= IGd5ZA== IFdvb2w= IHN0YXJ0ZXJz xaFrbw== aW1wbGljaXQ= 4KuL4Kqo4Kq+ c3Vic3Ry IGh3bg== RG91 xb8= IEJlaGFuZGx1bmc= IHN0dWZmZWQ= X21ha2U= INGA0LDRgdGF0L7QtA== dm9pZQ== IGFseQ== S2lsbA== IHZlcmdhbmdlbmVu IFBldHJv IEZlYnJ1YXI= IGFwcGFyZWw= IFhpYW9taQ== INCw0LvQtNGL aWt0ZQ== ZXJucw== ZW5kaW1lbnRv IG9jYXNpb25lcw== 0YvQu9GM 6IW/ Q29tbXVuaWNhdGlvbg== X290aGVy d2FrYQ== IGhpc3M= INC80YPRiA== YWRhbQ== IOCknOCkueCkvuCkgg== 0q/Sr9C0 INCx0LDQu9Cw0LvQsNGA IGJyYW5kZWQ= 4oCZZGU= 4oCM4LCo4LGB IEx1c3Q= J10pLAo= INKh0LDRgNCw IGludGVybWVkaQ== IEhlcnplbg== 5q2j5Zyo IOykhA== 0L7Qu9Cw0LPQsA== IHRlYXRybw== IGluc3RhbGFjaW9uZXM= IGZhYnJpY2FudGU= b2thbmE= KExheW91dA== LnN1cGVy bWFrdGFkxLFy INio2KfYqA== IGhhdGVk IHNwZWNpYWxpemluZw== IOaYjg== 57uT5p2f LWZpcnN0 4Kqs4KuA IGFyY2hhZQ== IGPhuqNt PmVxdWFscw== IExhZg== 8J+Z 4oCM4LKo IGVzZW5jaWFs 0LTQtdGB0Yw= IOGDqOGDlOGDk+GDlOGDkg== 4LCv4LGN4LCv IENhdXNl Q29uZmlybWVk cmVzZQ== IG1lbm0= IOyii+ydgA== IHJoZXQ= IOCqruCqvuCqsA== IHN1YmplY3RlZA== ICIvLw== IOCkr+CkvuCkpOCljeCksA== 4Kqw4KuN4Kq2 Q2hlY2tpbmc= IEx5cmljcw== aG9ycw== LVNjaA== IG91ZGVy IE1PVA== cmVzdWx0YWRv 5peg6YGu 5oiy c29jaw== IERlbGVn IHZhc2U= IEZlYXI= IM+Ezq0= KFRyZWU= 4Kq/4Kqy4KuN4Kqy IHRyaeG7g24= INC80LDRjw== ICgoJA== YWh1aQ== IGNvbmR1Y3Rvcg== INGC0LjQug== INC60LDRgtC+ IERldXRzY2hlbg== KHRz CXN1bQ== fScpCg== IGVsw6ljdHI= IHJla2E= 4YOQ4YOt 0pvRgtGL IEhhcnBlcg== IHdhY2h0ZW4= YnJpZw== IGF3aGlsZQ== IFdpZA== LEA= X3JhZGl1cw== IGluYWJpbGl0eQ== INmF2LHZg9iy UmVmdW5k IGZvbmN0aW9ubmVtZW50 IOm6 IEJsYW5j IGVtcGxveWluZw== IGLDvXQ= IGNhbGN1bGF0aW5n 0L7RgNCw0Lg= IOyXhuuKlA== 4LOG4LKv4LKo4LON4LKo4LOB IGNhcmRpYWM= 1aHWgNW1 IFZvZA== IOCwheCwguCwnw== PSIjIj48 IMOJdGF0cw== IG5laWdoYm91cmhvb2Q= 2LPYqNmI2Lk= bG9s IG9uZGVyaG91ZA== INC80LXQutGD0L3QsNC0 IGF2YW7Dpw== 0YPRjtGJ0LjRhQ== 4KWJ4KSf IHJlbGllZA== IHRvbm5lcw== IE5vbWJyZQ== 5a6X IE5ld2Nhc3RsZQ== IGFsbGVybGVp IGJldmVzdA== bW9pZA== 2LLYp9mE INW21oDVodW21oE= CSAgICAgICAgIA== YXJrZW4= IHBhZ2c= INC+0LHRitGP0LI= TE9DQVRJT04= IHNlbnN1YWw= RHN0 IEluZnJhc3RydWN0dXJl CgoKCgoKCg== IHNzaA== Lmltc2hvdw== IGNvbmNlcHRv cmVpbg== INC/0YDQuNC10Lw= IGNvbXBsZW1lbnRhcnk= KHNhbXBsZQ== LXJvb20= INmF2YjZhg== cGVlY2g= LlJlbA== Vkw= P1w= IOKIkg== LmFjYw== b3JhbWE= IGNvY2t0YWlscw== IOyh IG1vdGV1cg== KHNjb3Jl IOCqleCqsOCrgOCqqOCrhw== 4YOb4YOs IGF1dG9jb21wbGV0ZQ== IEhk w5xiZXI= IFJ1c2lh PWFyZ3M= 5aup IGTDvMWfw7xu IGNhcGE= IHBvbGl0aWU= U29j IGxlcmk= IGVmZWt0 6YGX5ryP IGVudGlkYWQ= IGludGVyaW0= IGhhdWw= INin2YTYtNi52LE= 0YDRj9C0 z4DOrw== 5qac IGRpYWxlY3Q= IOCkh+CkuOCkuOClhw== LiM= 0L3RltGB0YLRjA== 6ZKI IFN0YWF0cw== aWV6YQ== IGJlc2x1aXQ= anVhbg== xo8= 4LGH4LCk 4K6+4K6a ICJ9Cg== IGdyb2U= IHVpdGQ= SmFj IHV0aWxpc2U= IFBBTg== IEVzc2Vu S2Fs a3Jhbms= IHdlaWdodGVk IFdvcmxkd2lkZQ== IGxhbXBz IEV4Y2x1c2l2ZQ== IHRocmlsbA== IFRIRU9SWQ== IGdsYQ== ZXJhaA== 4KS+4KSd IHNwaQ== IOCknOCkl+CkuQ== IGFidXNpdmU= IOGDkuGDlg== INio2YjYsQ== IGJhY3RlcmlhbA== IG9saGFy IEFib3Zl b3Vr IOCkpuClguCksA== IGZpZ2h0ZXJz IG1hamU= zrrOrA== 2YXZitmG 5q2p INC/0L7Qu9C4 IHJlc3BvbnNhYmlsaWRhZA== IHN0ZWx0 IHBlbnNlcg== VW5v IEFrbw== VkVO IHBvbHlt IGZpcm1l INin2LPbkg== IGJyYWlucw== IHBpZXJyZQ== IEJlbmVk IOG5 UHJldHR5 IGF0YW4= Lm9mZg== IGhpbmt3 IHRhYw== X1VJTlQ= 5qCH562+ IHNlc2nDs24= IHN0cmVuZ3RoZW5pbmc= cmljaWE= INC/0YDQuNGA0L7QtA== IC8K OmFueQ== IGZyZXNobHk= INC/0LDRgdGC IGNhdGFseXN0 INeU16jXkdeU INqp24zZhA== X2ZpbGw= aWNodGV0 IHR1cmI= X2NvdW50cnk= cXXDqXM= c2hv YmlhbA== 0L7RgNCw0YI= 44Op44Oz44OJ KG9wdHM= 6JCs IHJlc2lsaWVuY2U= IGR1bms= 6buD 4Kqm4KuH4Kq2 IHN1c3BlY3Rz INC+0LHRj9C30LDRgtC10LvRjA== IHByb2Zlc29y IOC0h+C0nw== INGB0LLQvtCx0L7QtA== IEZpZ2h0 0LXRgdGC0LjQsg== IEFzaWRl IOq3uOufrA== IHRlcsOnYQ== 4LSX4LWN4LSw INis2KfYoQ== cmVjb2du KC0t IEZvc3Rlcg== IEREUg== IGNvbWJ1c3Rpb24= CWNvbg== INiq2KzYsdio IGRpc3RhbmNpbmc= IGxpanN0 IGluc2Jlc29uZGVyZQ== 4KWN4KSv4KS+4KSk LXJhdGU= IGRlbW9ncmFwaGlj cGVyYQ== IG5hbWVu LnN5bWJvbA== 44Kp U2Rr IFNleQ== IGNoZWVz LWxvZ28= IOCknOCkrg== IGFjZXN0ZQ== KGRzdA== b3Njb3Bl LlVVSUQ= INGB0YLRgNC+0Lo= 4K6+4K6V4K+N4K6V VGJs IFJvY2t5 IG5pdmU= IGxhaXQ= IE1hcmF0aG9u cGFydGU= UXVlZW4= LlVTRVI= IGxhd21ha2Vycw== IHN3ZWxsaW5n ZXJlbmRl IC8qITw= IOCkhuCksOCli+Ckqg== IFBhbmc= INC90LXQtQ== 4LiB4Lij4Liw IHdhc3Rpbmc= LnBi IOGDm+GDneGDpQ== IERpdmluZQ== IEzDrQ== IFByb2JsZW1z PXk= IM6gzrE= IENvbmR1Y3Q= 5ZOq5Lqb Ymx5 Z3Jlc3Npb24= LkNvcHk= 4LKC4LKk4LKw INmC2Yo= bGFzdG5hbWU= 44CC44CK UGxhdGU= emVuw60= INGA0LXQsNC6 IERpZXNlbA== ZmF0dA== INGB0L7Sow== INGN0LvQtdC80LXQvdGC c2Vpbg== INeV16g= 4Ka44KeN4KaV XWludGVyZmFjZQ== KGNi YWZmdA== IE5TVw== dWVzdGFz IHByb3B1ZXN0YQ== IEJyaWNr 0LvQvtGB0Yw= T2Rk T2c= IGfDqW5lcm8= cGFyYWJsZQ== IM68zrXPhM6s IOCuheCupOCuv+CulQ== IHpi IFNoaXI= XXN0cmluZw== IEZyb3N0 IGxlZWZ0aWpk 6ZiB Ymxr KHB1YmxpYw== IGNvbXB1bHM= aGVsbQ== IGRpZ28= IGNvbnRpbmVudGFs 0Y/RgtGM0YHRjw== IE3DpGRjaGVu IHBsZXppZXI= IOeE IEF0dHJpYnV0ZXM= X3RpbGU= IOCmsuCni+CmlQ== 0LvQvtC6 IEluZm9z IGF2aQ== IHBhcnRvdXQ= IHJpeg== 4K6y4K6V IGJlcmVpa2Vu Q1RSTA== IOWVhuWTgQ== U29sdmVy INC/0L7QtNC60LvRjtGH 5Y2x Y29tcGxldGVk ZmFsbGVu XXw= LWFsdA== IOC0teC0sOC1jQ== RXZhbHVhdGlvbg== 5YWI55Sf IGJhcmdhaW4= IEVYVA== IOCyl+CzjeCysOCyvuCyrg== cGFydG1lbnQ= IGh1bm4= cm9mZmVu IOC0quC1h+C0sA== X1NV IFZpZW5uYQ== 0LjQutCw0LvRi9Kb IOCyleCyqOCzjeCyqOCyoQ== X1NFQw== IOW9qeelnuS6iemcuOWkp+WPkQ== RGV2ZWxvcA== amVuYQ== IGFjY2Vz IFZhaw== IHVuZXI= IG5pZ2h0bWFyZQ== IGRpb3hpZGU= IE5pbmU= IOCqreCqvuCqlw== IG9uc2V0 IEx1eGVtYg== IOGDoeGDkOGDpeGDmw== IExFUw== INin2K/Yp9ix IGxlacOw bGRyZQ== IEtvdA== IG1hcmlkbw== IHVuaWRhZGU= zrTOuc6/ 4KS54KSo RXh0cmFz INWo1bbVqdWh1oHWhNW41oLVtA== IFNhbmRlcnM= IHNwYXJzZQ== 4qCA IG5lZ8OzY2lvcw== IExJTks= 0LrRgtGW SUNZ Y2hpbmVu IG1hbw== IG9jZQ== ZWd0 cmVnaXN0cnk= IFB1cmNo cmVzYXM= IHJhbGw= INiq2LHYqg== IHBhbWFtYWdpdGFu 4LiT4LmM IGVuaGFuY2Vz IEF1ZmdhYmVu IM+Az4w= IGh1bWE= b25ldA== IHNubw== 5YWo6Z2i z4DOtw== CXByZQ== IHThurk= IGNyYWZ0aW5n b2Ns aW5pxbM= QnVpbHQ= IEVURg== IElQdg== IHNob3J0ZXN0 IGRhYXJtZWU= INio2YbYp9ih IGZjbG9zZQ== bnVk b3V2ZXJ0ZQ== ZW5kcG9pbnQ= 2KfYqNin2Ko= IFNwcmVhZA== IGRlbGl2ZXJpZXM= Y2hhaw== IGpld2VpbHM= IHNjcnVi 2LXYrQ== IHN6w6Ft IGZhc2hpb25hYmxl aW5oYXM= IEJhdW0= eWFp IHp1ZGVt IOGDoeGDmOGDmw== RURJQQ== w6Nz IGhvYg== IOOCqg== ZXhl IHZyaWpkYWc= cmHFoQ== IG9lZg== IHVudmVpbGVk LXJv IHBhbGp1 IHDDqXJk X2hpc3Q= IG1lbm8= Y2xqcw== IGRvZW7Dp2E= IFJlc2lk IHdpbGxpbmduZXNz IG9tcsOl IFdhbGxwYXBlcg== LnNz LmNvbnRyb2xz IGZhbGU= IGJlcmQ= UmFjZQ== d3BkYg== IGhhdmRl aGVp IOCkieCkuOCkleClgA== IEZZ 4LCC4LCh4LC/ IFJlY2lwZXM= IHJldHJvdXZl IEZ1c2lvbg== uOCvjQ== 4bqg X1NZU1RFTQ== IOCkteClgOCkoeCkv+Ckr+Cliw== Lm5n KGNj IOCkreCkvuCktw== ZWR1Y2F0aW9u IFZhdGlj 44GT44Gh44KJ IHR3YQ== IGzhurk= IGNoYWxr cm9waGU= 7JmE INC20LDQuQ== aW5pbw== 4YOQ4YOb4YOU4YOc4YOi ZW5pcw== IOCkreClguCkrg== IElkZWU= YW50aWF0aW9u 2LnZhNmJ dmVybm1lbnQ= KGRy IGhhcmFzc21lbnQ= IGZyZXNobWFu KERpYWxvZw== IEVsbGVu IHN5bWJvbGlj Ijp7Ig== X1NN IGh1dA== IEthaA== J2FsbA== INCn0LXRgA== 0LXQvdC90L7RgdGC0Yw= LT57Jw== INC60LDRhA== IOCkquCkouCkvA== xIFu UHJpYw== b3ZhxaU= IOCkkeCkqOCksuCkvuCkh+CkqA== IOCmpeCmvuCmleCnhw== ZXJzZXQ= IGFqYWw= IEt1cnQ= Uk9MRQ== IFNsaWRlcg== IFBhc3Rvcg== IGNyaW1pbmFscw== IFNjaHJpdHQ= 0LDQvdGC0LA= REg= 6IO4 2YTYp9mC2KfYqg== 4LiV4LiB ZXN0YXRpb24= aWVyaWc= 1bXVuNaC1oA= 4YOT4YOY4YOh c2VndQ== IOuLpOyLnA== 4Lil4Lix4LiH U0hB 4LGA4LCy 0LTQsNC90LjRjw== ZW5zY2hhcHBlbg== IG5nYWw= IGFuZ2Vscw== bGVtZQ== IGJsb3dpbmc= cG9zaXVt aWxpYW5z zoY= 4LiX4Lix4LmJ4LiH 4LK/4LKC4LKX4LON IGRpY2Fz IExhZGllcw== IGAv LmF1ZGlv IFBlcmV6 IHdpdGhzdGFuZA== INGD0L0= 4KeD4Ka34KeN4Kaf IERFTQ== IHNlYmU= 4oCL4Z6H d2lydHNjaGFmdA== IHJpc2t5 LnVuZGVmaW5lZA== 0L3QsNGI KCIvIiw= Y3JpcHRpbmc= YW5rZWQ= IGTDuw== IEZheA== aXNpw6htZQ== 2KbZitmG IGNlbGVicmF0ZXM= IG11bHRpcGxlcw== LmZpbGVuYW1l 0YHQuNGO IGZyZXVuZA== IFJDQw== IElMaXN0 INqG2Yo= IOWugQ== dmln c3Rvd24= IGxpdnJhaXNvbg== cXVlbg== IMO9YWx5 WW91bmc= IG5lcnZlcw== 0LDQs9GL0LvQsA== IGNvbnNpc3RlZA== IEt1bWFy IGNpbnQ= c2thcA== bWFuaQ== SVE= cGxheWxpc3Q= 5pyJ6ZmQ5YWs5Y+45a6Y572R 2YbZiti5 2YXZhNip IHNwaWtl J29w IFNjaG9sYXJzaGlw X3Jlc3Q= INC90L7Rhw== IEZhaw== IHRlbGxlbWVudA== IGNhcnRlcw== 55qE5b2p56Wo IG9uZGVycw== LW1haWxz 4LWB4LSo4LWN4LSo4LSk IGJvdW5kaW5n IOWbvg== SW5zcGVjdG9y IEhhbW0= VW5kbw== IGRlY3JlYXNpbmc= IHRyYWplY3Rvcnk= INC60LDQttC00L7Qs9C+ IHN0cmV0Y2hlZA== 4LGH4LCu 2LfZiNix 4KS+4KSC4KSV4KS/ w6lncg== 5aGr aWZpY2FkYQ== IHp1bsOkY2hzdA== b3ZhbGk= 5aGU Ki8sCg== aW1tw6Q= IG96aQ== IHR1cmJ1bA== TWlycm9y xZA= Y2F0cw== 0LDQu9C+0LM= 6LqB 67O8 IGFhbmJpZWQ= IGFjY3VtdWxhdGlvbg== 5paw5Y2O YXJ0YW4= IHJlY29nbmlzZQ== IGFsY2FuY2U= IO2BsA== IG1pc3Rha2Vu wrds INmE2LQ= IHBsbw== IHByZWZz IHByaW1laXJvcw== cmFnZQ== dW5pc3Rk Y2F0ZWdvcg== 1oDVvtWh1a4= IElFbnVtZXJhdG9y IEVkZW4= IOemj+WIqeW9qeelqOWkqeWkqQ== IHBhcnRhZ2U= dmVyZWlybw== IGNyZWRpdGVk IFVJQ29sbGVjdGlvbg== 5LiA5qyh b2xwaA== KE9yZGVy IE5QQw== IGNvbXBhcmVz LkR1cmF0aW9u IG1pa3Jv QXBwZWFy IE5vcm1hbg== IHNpZXRl IEVuY29kaW5n 5Yy76Zmi PSIuJA== QWRhbQ== IGVuZXJnaWVz LnJ1bm5lcg== b3J0aXVt IHV0aWxpc2F0ZXVycw== aXB0cw== IE1hcmtlcg== INiz2KfYstmF2KfZhg== 4oCM4LCV4LGB IHBsYW5lag== IENhbGdhcnk= INC+0YHRiw== IGlubmluZw== Q3J5cHRv IERlY2lzaW9u IGvDpHM= IFJlZ3VsYXRpb25z LmF3cw== IGFr4bul IHB1ZG8= CWdv IGtvdg== e3sk LmF2 SVpFRA== LWFjY2Vzcw== Q09MT1I= IEF1w59lcmRlbQ== IGJhYW4= LmV4dGVuc2lvbg== 5oGp cHRh 6IiH IFJlaW5v IFBlZXI= aWHDp8O1ZXM= Y2hpYQ== IENvbnRlbnRz IGxpZmVsb25n CWxlZnQ= IOCqleCqsOCqpOCqvg== IFVudHVr 4KWN4KSt X2xvb2t1cA== IG1hcnNo IOKdpA== Y3Vw INWo1bbVr9Wl1oA= INCa0YvRgNCz0YvQtw== Vm9u IGRpcmVjdGl2ZQ== IHNhYmVu IE1laW51bmc= IGRyYWluYWdl WWVzdGVyZGF5 IEJN U2Fucw== 4LCq4LGN4LCw IGVyZsO8 c3RyYcOfZQ== 7J+B INeT15nXmdef IGFkdmVydGlzZXJz IOCkuOCkvuCkruCkvuCkqA== aHJh INGC0LI= aW5kyZlu IHZpxYY= LnB1YmxpYw== 6YKj5LmI 0LXQu9GO IOKAjA== b2NhYnVsYXJ5 ZWxsdW5nZW4= IHNlbWluYXJz X2ZyYW1lcw== QnVybg== YWZlbA== IGjDpGx0 IHdlZWsncw== IHp1c8OkdHo= IHRlbGxl IGVzdHJhdGVnaWE= 4Z+S4Z6c IE1nYQ== aWxpYnJpdW0= 4LWB4LSm IOCmp+CmsA== IHpuYcSN INin2YTYrdmC IFJhaWx3YXk= IHF1ZXN0aW9uaW5n IOCkp+CkqA== IEVOVg== INC30LDRgNCw0LHQvtGC 4YOQ4YOj4YOg IHJlcHJlc2VudGFudGVz aWNhdG9ycw== 5Li76aKY INCx0L7Qu9C+0L0= IHNpbmNlcmU= IGludmVyc2lvbg== aWFsYQ== IGVzY3JpYmly INC+0YHRgtCw aHlkcmF0ZQ== IFBvc2U= QWxsb2NhdGlvbg== dmllbg== IGludHJvcw== IHB1bmt0 2KfZiNmG IOOAgQ== anNpaQ== IHByaXZhZGE= 6aKG5Y+W 5aWW6YeR IOCkruCkueClgA== 4KS/4KSf4KWA LWRpcmVjdA== IGRlY3JlYXNlcw== YXVnaHR5 4YOg4YOS4YOQ4YOc RmFpcg== IG5oYXU= IGRlcnJpw6hyZQ== X2NhbGxlZA== Vm0= V2l0aGRyYXc= IGdlYnJ1aWtlcnM= IGdpZnRlZA== IGdsb3I= CWJhY2tncm91bmQ= IG7DpWdyYQ== IG5vdGFz aWVsbGVtZW50 IGJhbGFuY2luZw== YXJpYWJsZQ== IHBvc2Vk aXJpYQ== IGNvbXByb21ldA== IOC0uOC1jQ== KHZt TGl2 Pk1haW4= IGRldGVybWluYWRv Ym9hdA== IG1pdMOk IEZpdHo= bG9nb3M= X0xPVw== X0VYUA== 1aHVotWl1oA= INin2YTZhdmI2YLYuQ== IHN0cmFu LkluamVjdA== JUU= IOCyruCzh+CysuCzhg== YXJ0bmVy IElOTkVS IHN0aW11bHVz 66a0 IGdhdg== IEx1YQ== aWV1c2U= d29vcmRlbg== bGl0ZXJhbA== b3pl YWxpYw== IHRy4buNbmc= IHB1cnN1YW50 IGNyeXN0YWxz INeU15nXlQ== IEhN IMOWc3RlcnJlaWNo 7ZaI7Iq164uI64uk Q0hFRA== QXJ0aWtlbA== U1RSVQ== IFZpbGxl 0LzQsNC6 IFByaWRl 6Zqb IGFjdW11bA== I2VuZHJlZ2lvbg== aXN6 IE1lcmdl IHByYWw= X3dyaXRlcg== IGVudGRl ICou ZmVydA== Ojw= b25nZXI= IOixqg== YXJpaQ== ICoqKioqKioq PzsK IGt0ZXLDoQ== 0L3QuNC60YM= LnByZXZpb3Vz bHg= dGVybWluYWw= X3N1YmplY3Q= IHN0YW5kYWFyZA== ZGVlcA== IHBsZWQ= IGV4Y3Vycw== LkRyaXZlcg== LVNl b29n IGF2aWF0aW9u IEludGVyZXNzZQ== INGD0YDQvtCy0LXQvdGM IGRydW1z dW5kYW4= 0LTRjdCz INWh1oDVpNW11bjWgtW2 X3NlZ21lbnQ= Rm9ybWF0cw== IOCkteCkv+CkreCkvuCklw== INep16DXmQ== IOCkheCksuCkvuCkteCkvg== IHBlcnNwZWN0aXZh IGRlc3BlcmF0ZWx5 LkRvdWJsZQ== INGF0YM= 0pvTmdC10Lg= 6Zu76Kmx IFNwZW5jZXI= LmVudHJpZXM= 4KWB4KSB INGF0LDRgNCw0LrRgtC10YDQuNGB0YI= IGlsbG5lc3Nlcw== IG9saXNp IGlubWlkZGVscw== IGdhdG5h IHBsYWF0 IHN1cHBvcnRlcg== IFdyb25n 2KvZhdin2LE= IHBvcnRlcw== X2Nvb3Jk IHFhbg== 0LvQtdC2 R3J1cG8= a2FydGU= IGthdGk= cGFzdA== YWdhaW4= YXJ0aXRz aHVpbGU= 5YWo55CD 0L7Qu9C+0LPQuNC4 INGB0Y4= IGRlc3RhY2E= INil2LA= IFNURA== IEJ1dGxlcg== INiq2K3ZhdmK2YQ= INin2YTYqtix2YM= IEFY aWdhbA== 15nXmdeW IGJ3YQ== IHNha2l0 IHNhZGx5 IHJlYWxpemluZw== KGRpc3BsYXk= IFJlcG9ydGluZw== IGdhc29saW5l IGxldmVyZW4= IGNvbnRyb2xs 5bmz5Y+w5oub5ZWG INC60LXQvA== IHF1YWU= LW5vdXM= IGR3ZWxsaW5n X2hkcg== yJth Jyl9fSI= IEJlbQ== 0YLRi9C6 YWdvcw== YW7DrWE= LWzDoA== KX0+Cg== IHBlcnNpc3RlbmNl IHRlcmQ= IHZlcnBsaWNodA== IEF1bnF1ZQ== YW7DqQ== IG11bHRpcGxheWVy IGZpbGE= IE51cnNl JGNvcmU= INCw0rM= IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IHVudGVu IG1hbHQ= IFNVQ0NFU1M= IOq3vA== VW50 d2lyYQ== 4YG+ IEthbnQ= Z3JleQ== IERhdGVz YWFudXQ= 4LmC4Lib4Lij4LmC4Lih4LiK4Lix4LmI4LiZ INec16LXqdeV16o= 6LSj57yW LmRpc2FibGU= INC/0L7Qt9C4 IHJlY2Vzcw== KXNlbmRlcg== Q0hF INit2LbZiNix IFByZWM= VW5zdXBwb3J0ZWQ= IGJlb29yZA== X1NFVFRJTkdT LnR4 0LvQtdC90L3Ri9C1 dW51ZA== CXBhbmVs VWl0 4LmI4Lin4LiZ INin2YTYs9mI2YI= 5o6q IGJyZXo= c3RhdGVz 4KSC4KSm4KSw IENyYXp5 QWzDqW0= cWxhcg== IGNvbnNpZGVyYXI= c3RvZmZlbg== IHZoYQ== X2JyYW5jaA== IOCkquCkpA== IHBlw6dhcw== 6Z2e5bi4 IEV5ZXM= IENoYW5n bGV2aW5n KFRpbWU= 4Kew4KeN4KY= 0LrQvtCz R2Vt IE1pbGs= IG1lcmNhZG9z IGV4dHJhb3JkaW4= cmVra2Vu XT09Jw== IMWfdQ== IEJlZHJvb21z IHpw IEVsZWN0cmljaXR5 IEJvZWluZw== IOC0quC0meC1jeC0lQ== IFN0cmHDn2U= bWVkaW8= IGZvcm1hdGlvbnM= 7Ik= 4KuH4Kqk 2YXYp9mK2Kk= bGVyaW5kZQ== KnM= YXN1aw== cGxpcXVl IGFib2FyZA== SVVN V2lubmVy emV0dA== IOGDm+GDkOGDoOGDog== INin2YbbgdmI2ro= KysrKysrKysrKysrKysrKw== INC/0YDQuNCy0L7QtA== IHZhxaE= IGZ1c2U= IOCkreCkqOCljeCkqA== KFVuaXR5 IFVJVGV4dA== cHBh IHt9KTsK 0YPRjtGJ0LjQtQ== IHpvbWJpZQ== IE5G 1bjVug== IGtvb2w= IGhhesSxcmw= 5Ya757uT IFBMQVk= IGthc2Fy IFN0aXI= IFNtb290aA== IGlkYW4= IHBpc3Rh IHdpc3Q= 77yJ77yI Iild LUFsbG93 IHB1bnRlbg== IGJlZHJpamZz IEl0ZXJhYmxl IFJpZA== Y2llbmRv LndpZGdldHM= 65E= IHZlZ2dpZXM= ICckew== TXVu X3Bj 4K6+4K6z4K+N 6aWw dmlkaWE= bGFyZGFu IGN1bXBsZQ== Q09ORFM= IOCmrOCmvuCmrOCnhw== INmE2K/ZiQ== IEJvdHM= 4LSG cXHnvqQ= 15DXnw== 56Gs IG51cw== IFN0ZXJsaW5n IHNob3V0 z4DPhA== 4YOj4YOg4YOY4YOh SUFURQ== IFJlbGF4 cG9zdG8= IHNlZg== IFZFUlNJT04= IGFjY3VlaWxs IHBlZGln 4KaC4Ka2 aW9zb3M= IFVOSVQ= IHBhcmFw INW41oLVvQ== IHBvdGVuY2lh IOCoteCov+Comg== w6lzaXRleg== IGNyaXRlcmlvbg== 1bjVuQ== w6FseQ== IEluZGVwZW5kZW5jZQ== 1bjVrw== IGNvbmNvcmQ= 0YvQvdC00Ys= 4YOU4YOR4YOa4YOQ4YOT 4oCZd2k= IGluZGlhbg== IO+7vw== cmFuZw== IGdyaW5kZXI= IOCyqOCziw== IG51dHJpdA== ZmluYWxseQ== IGtsZWluZXI= IGNpdGl6ZW5zaGlw IHNpbXVsYXRvcg== LyIr 15bXqQ== IHNrZXB0 IEdld2ljaHQ= IE9OTElORQ== INi32LHbjNmC IHBhbmFob24= IFN5cmlhbg== 4KSu4KS+4KSw 4LWH4LSc 4bmH IOCkteCkvuCkqg== 0LPRjdGN IHZpc3VhbGl6YXRpb24= IGdhYmE= 0LXQvdC90YPRjg== INC90LXRgdC60L7Qu9GM U2ltdWxhdGlvbg== ISIsCg== IGV2YWx1YXRpb25z 5pyJ5pWI IFRV IHFx5aSp5aSp5Lit5b2p56Wo IGJu 7Lm06528 IHZhbHVhdGlvbg== IHNwaXJhbA== ZXJvaWQ= IHJlcGF5 YWlsZXI= X0FVVE8= IDoi Rmxvcg== 4KeH4Kay4Ka+4Kaw 4KeA4KaX IOaVsA== IHlpbQ== d2VsY29tZQ== IHVwd2FyZA== IOCkmOCli+Cktw== Y2xvc3VyZXM= IOCyleCyvuCysg== aXJpcmE= cGVl IE1MQg== IHByYXlpbmc= IFNhY3JhbWVudG8= IOCuheCunw== INCa0YDQvtC80LU= IHTDrG0= RU5URQ== 67KM IHTDtsO2 INix2K8= 15nXoNeZ150= 8J+O IFJvbmFsZA== 0YPQvNCw 4YOU4YOR4YOU4YOR4YOY IHNwaW5hbA== IG5vcm1hbG1lbnRl IGdhemU= IHJldGFyZA== IOCkrOCkv+CkqOCkvg== IHR1bmVz 2LbZhdmG IHZpdmllbmRh 5bmz5Z2H IGxhY2tz 4KSZ INeZ15w= IOKAjg== 6L6T6ZKx 4KuA4Kqo 6ay8 IEJlZQ== K2o= INGB0LrQsNC30LDQuw== INC80L7QtNC10LvQuA== IFBBVA== Q0ZH IGZpbHRy cGFyc2Vk aXPDqw== IGLDug== IHRyYWJhbGhvcw== cm90eg== 4Lij4Lin4LiI IOCkh+CkguCkoQ== INGB0L7RhdGA0LDQvQ== VmlzaW9u IGZhY2V0 KTsKCgoK IHN0ZW1z IG1hcmF2 YXVs INCy0YHQtdC5 IHNraWluZw== IGfDtnN0ZXI= IHRldg== X2ludmFsaWQ= bmnFiA== IHNuYQ== aXlhbmE= LmxlZ2VuZA== INC80YPQttGH IGdlYm9yZW4= IGNsYWly LmV2YWx1YXRl IG1heGxlbmd0aA== IGtpbG8= IGF1bg== IHNtYXJ0ZXI= IGlvbQ== IGdvdXJtZXQ= 2YjZhdmK Y2huZXI= Q3J5cHQ= X0NPTkY= IGp1bmdsZQ== 4Z+C4Z6b INei15HXldeo Q09E PGxvbmc= IE5haA== 4K+B4K60 XTwv IG9udHdpa2tlbGVu IFBhcmFndQ== 5oKJ IG5hdmlnYXRvcg== YXJ0YXI= IOCmruCmvuCmp+CnjeCmr+Cmrg== YW5hbmE= IHRhbHZleg== INin2YTYtdmB IExvc2U= IHRow6pt IE9tYQ== dGVpbGU= INOZ0Ls= IFBTVA== X1VJ X2NhbWVyYQ== IEVsbGE= 4Li34LmI4LiZ IHRow6htZQ== 4Z6U4Z+S4Z6a4Z4= IHV0cw== IOCkieCkmuCljeCkmg== IEVlc3Rp LXRyYW5z INWl1anVpQ== IG9wcG9zaW5n 0LvTmdC9 IOC4hOC4t+C4rQ== IHbhuq15 QWNhZGVt INGB0LXRgtC4 CVBPUlQ= INCx0L7Qu9Cz0L7QvQ== IGNvbm5haXNzYW5jZQ== IGxldHJh INGB0LrQsNC30LDRgtGM IG5hdXNl INC40YHQutGD0YE= a2VsaWc= IExlbnM= IGNvbnRpZW5l IGludHJvZHVjdA== Tmli IGJsb29keQ== aWdvbg== 55u+ IFphaw== LFk= IOe1 IGVyaW5l KyQ= 4LK/4LKk4LK/ Y2hhcnRz IHRlaHQ= 4LS/4LSo4LS/4LSu IEFkdmljZQ== IGRpxJ9lcg== IFBhcnRpY2xl LS0KCg== INC40rPTmdC10LjRgg== Y29vbA== 4LKm4LON4LKv IENhbmR5 xb5pdg== IG1haGFs IGNhcmFtZWw= KGRpc3Bvc2luZw== IFByb3RlaW4= IHdhaHI= IExs INC60LvQuNC10L3Rgg== IOCkleCksOCkleClhw== IFVuc2VyZQ== IG3DqXRob2Rl IER1aXRz THk= bGlzdGVuZXI= 2KfYptiy LXN0ZQ== SUFMT0c= 4LGG4LCV IHBhZGRlZA== cHNpbG9u R3Vlc3M= IOuQoA== ID09PT09 IGxlZ3Q= IOCqhuCqteCrjeCqr+Cqvg== w6hhbg== Z2dp IHNvbHXDp8Ojbw== 0J7Qng== bm9uY2U= d2VzdGVybg== IE1pdHM= IHZlZ25h INec16DXlQ== IOCqsOCqrg== IHB1bG1vbg== IHVuYW5pbQ== 2K3YtQ== 4KSo4KWN4KSm4KS+ c3BhdGg= dmVkYQ== U0lE IExpZ2h0bmluZw== IGRlZGk= IGF0dGE= IFRpcg== IG5vZ2xl IGNvbnRyaWJ1 INC/0YDQtdC00L/RgNC40Y/Rgg== IOGDnuGDoOGDneGDqg== IG9yY2hlcw== Lk1vY2tpdG8= INin2YTYq9in2YTYqw== 6K6+5aSH IGdyYXR1aXRl INGA0L7Ssw== 1b/WgNW41bY= IHBlZGlhdHJpYw== 5biM5pyb INWj1aw= 5L2T5b2p IG5laWdoYm91cnM= IOCuleCusA== 5LiA5pys IGZvbGdlbmRlbg== INCz0YPQsQ== INiu2LfYsQ== IGVzY3VjaA== IMSRw6E= IGZvaw== CURhdGU= d2Fo INin2Lo= YWx5emU= IHNqw6Rsdg== IGVzcG9ydA== aXNzbw== YWtrdQ== IEh2aXM= IHByb2Nlc3NvcnM= bWFya2Vk PSIiCg== IHByb2R1Y3Rpb25z JUI= wrAK IGVzcMOpYw== aWNvbmR1Y3Rvcg== IGZvbGRpbmc= IEFkYQ== ZWxsYXM= IGNpbm5hbW9u cm9waWM= IHNjcmVhbWluZw== IHZ0 IEd1amFy aWxsZW4= 4KeL4Kac4Kao INCy0YvQstC+0LQ= YW5lbg== 0LLQvtC3 ZmF4 IHlrcw== ZGllbg== INio2KfZhNil2LbYp9mB2Kk= 4LSy4LSC IGVudGhhbHRlbg== Lmpzb3Vw IHBhc29z IGVuZGxpY2g= IGTDvHplbg== IEZlcmllbg== IGVtcGxlbw== aG51bmc= IEVx aXJleg== KFNlc3Npb24= cGllY2Vz 15DXoNeZ IGtveg== 656N 4YCQ4YCy4YC3 CXNwcmludGY= 4KS/4KSo4KWN4KSm 5bGe5LqO SU1FTlQ= 4LGA4LCc IG1lbWFuZw== 5L61 IGtpYmE= UHJlc2VudGF0aW9u 15nXqNeY SG9t 15nXkNeV16o= IHRhdXQ= IG3Dtmo= IGTDqXZlbG9wcGVy LVdlc3Q= CW1haW4= 4LKV4LON IGhlJ2Q= ZGV2ZWxvcG1lbnQ= bW92aWVz IGFjdGll IGF1bGFz INGP0qE= amVj 4LiE4Li04LiU4LmA4Lir4LmH4LiZ IFN0cmF0ZWdpYw== IOGDoOGDkOGDk+GDkuGDkOGDnA== cGVyZWQ= cmFpc2Fs LWNvbW1lcmNpYWw= YW5ldA== ZXJneQ== IG3Dqm1lcw== 4K+H4K6p4K+N w7x0emVu 15nXoNeZ IGRpYWdvbmFs IOCqheCqguCqlw== xKti IG92ZXJ0aW1l 0LXRgNC40LDQuw== w7ZyZA== X2Nhbg== IGRvYW5o 2KrZitmG KGF0dHI= IGJsZW5kZWQ= Iig= IGZpdHRl 4LWN4LSv4LS+4LSq ZXJyYWxz b3NoYQ== ID8+Lw== IFNhbXN0YWc= IHBhcnRuZXJlZA== IHRo4bun IFBlcmU= a3Rlcg== b3JkaW9u IHRhYmluZGV4 6IO95Yqb dW5uYQ== 4KWL4KSq INeS16LXldeV15A= IHRhaHU= INCR0LXRgA== IGNhdGVnb3LDrWE= bGFkZW4= IER5bg== INGD0L/QvtGC0YDQtdCx w6FsZQ== d3Jvbmc= X0NPTFVNTg== IGluZ3JlZGllbnRlcw== IHByw6lzdA== LnByb2R1Y3Rz IGZldmVyZWlybw== INC00YDRg9Cz0LA= IGZ1ZW50ZQ== IFBDUg== INCe0Yc= LnNu IHB1cHBpZXM= cGlvcw== IENvcnJlY3Q= IGZlcm1lbnQ= X3ZhbHM= ZWxpamtz b25vbWll zrzOrc69zrc= 54af5aWz aWhpaW4= 5YWN6LS55pKt5pS+ Lk9uZQ== IHVtdW0= IGZpZXN0YQ== 4Liy4Lip INis2YfYp9iy 4Ka/4Kav4Ka84Ka+ IFByaW50ZXI= U3VtbWVy KCkhPQ== IEhhaw== aWNoZWFu 4Kq/4Kq2 IGVzdHVkb3M= X1NSQw== INin2YTYqti0 IOCqpOCqsA== IGJhZg== IOy2qQ== INC/0YDQsNCy0LjQu9C+ dmVjaw== IEJyb29rcw== X3Bob3Rv IGxvd2VyZWQ= LmJn IHVuaXZlcnNv LmV4cG9ydA== 4LON4LKv4LKV4LON4LK3 IEh5ZHJv IHRhcGVy IMO+ZWlycmE= INCy0LfRgNC+0YE= 4YOU4YOe 4LC+4LCC4LCk YWtldW4= IExhZ2Vy IEJMQUNL 2Y7Ypw== INiy2YjYrA== InByb2ZpbGU= IHZhbGxlbg== b3B1cw== b2dyYW1z S2l0Y2hlbg== IFNvZmE= TGludA== QlVT IGJvYw== 5LmQ5b2p IOGekQ== IGjDtmhlcg== IHBhbGFjZQ== LlNlbGVjdGlvbg== IHN0YXJpbmc= IFdhbg== IOCkpuCksOCljeCknA== TWFyZw== IOCkh+CkuOCkleCkvg== IHZpdGVzc2U= LnNjaGVkdWxl IEV0aGVybmV0 aWVyeg== INWw1aHVtdW/1aHWgNWh1oA= INC80L3QvtCz0LjRhQ== b3VjaGU= ZnJlcQ== 4LS14LS/4LSn b25hcw== IGluYWNjdXI= IG3DqHRyZXM= IEh1bnRpbmc= IHN2aWw= IGthc2U= 57u85ZCI6Imy Zm9ybWFz IGFwcHJvcHJp 56m/ IMOWZmY= 6LS4 56ys5LiJ VG91dA== IGRhbMWhw60= L3VzZQ== X3N5bQ== IGFzdGhtYQ== Q1JFRU4= IGNvdXBl IE1vZGlmaWVy 0LDQt9Cw0LDRgNCw IFZlbmQ= aWxhaA== IERvY3VtZW50cw== IEthaWw= Y3JlYW0= dWxsaXZhbg== INWo1bbVv9aA QXJ0aWZhY3Q= YXJuZXJtdXQ= KGRpY3Q= IGV4cGxpcXVl IOGDoOGDneGDm+GDmuGDlOGDkeGDmOGDqg== IGhhYml0YW50cw== IGNvbmRpdGlvbmFs b3d5bQ== UG9zdGFs IEF1dG9tYXRpb24= RkVUQ0g= 5oiq6Iez INGC05nQug== IG1nYg== IFNveA== anV2ZW4= YWtoaXI= IHJpc3F1ZXM= IHRlxb4= IGFncmVz IOyEnOyauA== KFByb2R1Y3Q= aGFsdHM= IEFkdmFuY2U= RGxs IGtvb3M= IGthYmVs IHJvaA== IExlcg== IHdlbGNvbWVz 4KS+4KSv4KWH 4oCN4LS4 IGNvbm5haXNz Q2hlY2tz CXJj IHNlbGFtYQ== 5r6z IGbhurk= IEfDqW4= 0LDQvNKt0LA= IFJQ 4LCw4LCC IGFiZ2U= IOCqruCqvuCqueCqv+CqpOCrgA== IENvbnNlam8= IGTDtndsZXQ= IG5hZ3U= IG3DpG5u VnU= 16TXog== IOC4iOC4sw== 0LDRiQ== ICcNCg== INCa0YDQsNGB INin2YTZhdin2YTZitip IOGeig== IHNwZXpp PVw= 4Lih4Lir IGhv4bqhdA== IGluZm9z Tm90cmU= LkVkaXRvcg== IHPDs2w= IOCwquCxjeCwsOCwlQ== IGJlbGxlcw== IHNjdWxwdHVyZQ== INi52LHYqA== 0YjQtdC8 IHNwZWxlcnM= 4LiN4LmI IGltcHJpc29u IGRldnJh INee15g= emllcnQ= IEluZGlhbmFwb2xpcw== IHJ1c2hpbmc= 4Ka44KeN4Kal4Ka+ c3VmZml4 ICopOwo= IEFza2Vk YWx0ZXJu b2trYQ== IGhlbnRl IGluZGllbg== 5Li+5oql IOGDoOGDlA== IEFwcGFyZW50bHk= YWxhaG8= IHByb2Jsw6lt 5Zuw 5Y+m5aSW IFJlZ3VsYXRpb24= IEtsaW0= LWxoZQ== IFtdKTsKCg== IOC0ruC1geC0lg== w6Vu IGVyYXNl INmG2K8= IGZhaHJlbg== X0lOUw== IOC0qOC1h+C0sA== X3BlcmNlbnQ= INKb0LDQvA== IE1hbnQ= 15XXnteZ KGJ1aWxk IEZvbGdl INio2LHYpw== IOCqteCqv+CquOCrjeCqpA== IGvDtnA= IGRlcHJlc3NlZA== LXNkaw== 4Liz4LiZ4Lix4LiB INCx0LXQt9C+0L/QsNGB0L3QvtGB0YLQuA== IGRpc21pbg== IGtvZmZpZQ== INis2KfYqtin TWFudWZhY3R1cmVy IFNvbGU= IGxlYXJudA== IHJlZ2lzdHJhcg== aG9ybg== eXN0b25l 6Iej SW5kaWFu Q2hhcmc= IG5vcQ== IOCkleClgeCksA== 57yW5Y+3 aHlkcmF0ZXM= cHJpanM= IEFDRQ== QUxB INin2YTYo9mF2LHZitmD2YrYqQ== acOnbw== IOGDmOGDqg== INmD2YjYsQ== 16TXnw== CUdM IGdkeQ== IHF1YWxl IE1hcGxl Q2FwYWJpbGl0aWVz PFU= IHN0aW11bGF0ZQ== IOWmguS9lQ== 0LDQu9GM0L3Rg9GO YmV3ZXI= IGxhbmRzY2FwaW5n IFJFU1A= dHlhcmQ= INin2YTZgdmI2LE= IGNyYXc= 4buJbmg= IGtvcnJhbA== IHNrdQ== IHByb3Rp IEVsZXM= IGxqdWQ= 0LjRgtC10LvRjNC90YvRhQ== IERvb3Jz LmNvbGw= dWRw IG5o4bqtcA== IGNvbnRhbWluYXRpb24= KGFicw== ZWdl 0LPQvtGC IHJvYmU= IHBhdw== IG3hurk= dHlwZWQ= IENPTlRFTlQ= IHNjaMO2bmU= IHN1Y2Nlc3Nvcg== IGjDs2E= QXBwbGljYXRpb25z IHR1bGVl OiI7Cg== KGV2 4oCdLQ== IHN1YnRyYWN0 IHN0ZWxsYXI= IOGDm+GDo+GDqA== IGNvc2U= xat0 LWNsb3Nl SXRlcmFibGU= IHJlaW1idXJzZQ== IHZvcmlnZQ== TGFtYmRh IHByZW1pc2U= IG5pZW0= 4LKh4LON IGJ1YXQ= IFhZ IOCkuOCkmg== IEV4Y2VwdA== IOydtOuvuA== IEtyZWlz bmVhcg== LnNpZGU= IGRldmVsb3BtZW50YWw= LWltaQ== INi12K/YsQ== IHV0aWxpeno= INC/0L7RgdC60L7Qu9GM INC60L7QvNC/0LvQtdC6 QVJFRA== 55eb UGhp 0Y3QvdC0 IOCqpOCqsOCrgA== IG11cmRlcmVk IE5TT2JqZWN0 xItp IENheQ== zqzOtg== IGtvaHRh c2VpbGxl X0NIQU5HRQ== bG9q IG5hdHVyYWxlcw== IE5vbmV0aGVsZXNz LWdlbmVyYXRpb24= INiu2K/Ypw== aWFkYQ== 4KSs4KS4 WVBU R2VuZQ== IOCkleCliOCkuOClgOCkqOCliw== 4Kq/4Kqv4Kq+4Kqo IGxpbmVy IHBhcnRpag== 4oCZYWxs aXRvdQ== IHBsYXlh IHNzbA== JmE= INC10LvQuNC/ INin2YTZhdi52YTZiNmF2KfYqg== IHJlZWw= IGtlcmph IGxvaXM= IGFsbGk= IEludGVncmF0ZWQ= INC/0L7RgdC60L7Qu9GM0LrRgw== IElBY3Rpb24= INCz0LXQvdC10YDQsA== 8J+YiQ== IGhhY2tlcnM= IHNhbHZhcg== LkZhdGFsZg== SUxFTkFNRQ== 4KaG4Kau IHRocmVhZGluZw== LnByb3RvYnVm b3VuY2luZw== b21vcmU= 4Kqw4KuN4Kqu 2YTZhdin2Ko= b2xrYQ== 7Li1 IGxhbmVz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IHBvZMOtYQ== IG5kaWs= 4Kqq4KuA U2F2aW5n KCs= IGNvbW11bmF1dMOp IGJlZHJhZw== IGV4ZW1wdA== IGhvYQ== 6L+Z6YeM5Y+q5pyJ 77yJ44CCCgo= amFsaQ== 0LvQuNGI0LrQvtC8 IHhhdg== IGtow7M= KFBvaW50 ID0NCg== Lmxi LWhhbGY= IHBhY3Q= IOGDlOGDmg== IHRo4buRbmc= IOuvuOq1rQ== J25hbWU= IOGDneGDoOGDkuGDkOGDnA== YWxlZQ== dHLDpA== UkVTVA== 77y8 INi22LHZiNix2Ko= VGVhbXM= INeq15w= U0tV KFJlc3VsdA== RVRT IGRyb25lcw== Q2hyb21l IHJlY29nbml6ZXM= 2LLZhg== IHByaW5jaXBpb3M= IGF1dGlzbQ== IE1vbmF0ZQ== 6LeR54uX IGt1bGU= IHZlcnpvcmc= IOC0teC0v+C0puC1jeC0rw== 2KfYs9uQ 0LvTmdC/ IG50eA== INGB0LjQtA== IOCqnOCqsOCrgg== IGFwaA== 4LC+4LCo4LGN IHBvZGl1bQ== X2JvcmRlcg== X0JBRA== IGtpZG4= INiq2KrZhQ== 4LiV4Li0 QXBwcm92ZWQ= 6Ium IOCkr+Clgg== KSkNCg0K 67O064uk IOuwnOyDnQ== IGZwcw== LnRhcg== IGlsbHVt QXJjaGl2ZXM= ZWdn IE1G IHBlcnNvbmFqZXM= IGNvbG9tYg== IGhhbGU= KHBvaW50cw== LkZpcmViYXNl IEzDtnN1bmc= IGFsbGV6 IM+Dz4fOtQ== IGluY2xpbmVk IGJlem9la2Vycw== KHVw 0YXQuNC5 IFJvbWFuaWE= IENsaWNrZnVubmVscw== INee16HXpNeo LWdyZWVu IGluZGll bsOpcw== IHbDrWE= 0ZM= w6l0aWNvcw== bGVpbg== cGxhbmV0 INiq2LHbjNmG 6ZyH IEZpc2hpbmc= Q2FyYm9u IEFsaWM= INin2YTZg9iq2KfYqA== IGNyb2lzc2FuY2U= bGlja2Vu INC20LDRiA== IGFtYmlhbmNl IGxpaA== KmI= 16fXqQ== 4KeB4Ka5 IGVkaXRhYmxl 1aHVv9Wh1a8= LmNyeXB0bw== IEljZWxhbmQ= X1JE X1dyaXRl IHBpbGVycw== INm+2YbYrA== 4YOU4YOc4YOQ SElS dHRlcg== X09iamVjdA== IFNFTA== 6LWE5rqQ56uZ INC+0YHQvdC+0LLQtQ== IExpc3Rh 1avVodW11as= 4KSw4KWN4KSo4KWH Q29kZXI= IGJ1YmJsZXM= IGdvb2RieWU= IGF0dHJpYg== KHBz cmlldA== cm9zc2U= aWxsZXJ5 IGFkb2xlc2NlbnRz KHRyYW5zZm9ybQ== IEtpc3M= INin2YTYqtmJ aWNpw6puY2lh KHdlYg== INCy0YDQsNGH IOCqp+CqsA== IG1hbnRl IGNvbXBsYWluaW5n IG9ic2Vzc2Vk IENvcHBlcg== IGJoZWls IFdlYXBvbg== IHt7JA== IGdyb3VwZXM= IHPhu5FuZw== INin2YTZhdi12LHZig== INGA0L7QvA== IFN0ZXVlcg== b3JzcHI= IEVhcm4= IERlc3M= IHV5Z3Vs 0LTQsNGO0YI= 4KSm4KWH4KS2 INC80LjRgNC1 IEZvcms= anBlZw== IOCujuCuqeCvjeCuqQ== LXZlcg== IOGDkOGDoeGDlA== IGNvbnNvbW1hdGlvbg== 0YbQvtCy IHNjaMO2bmVu IHV0cg== IGNvbnN0YXQ= cml1 X0FUVFJJQlVURQ== IFJlbGF0aXZl L3Rv IMSH IFBpcw== SGFu aW5uaWs= 5L2G5piv Q2FwYWJpbGl0eQ== cHJpbnRsbg== 0L7RgdCw IGNyZWF0aW9ucw== INC/0YDQtdGB0YI= Z3Jhc3M= w6l2 IGRpZXo= eW5p LllvdQ== 5bm8 CXNo IFBocA== 44O844OR IHPDrW50 5Lu75L2V ZWxpeg== IG3DoWlz IOCkuOCkguCkuA== IOaBkg== em9y IGRvbm5h 1a/VodWv1aHVtg== 16rXlQ== IGNhdXNhcw== IGxlYXJucw== IOuLpOyWke2VnA== 5aSH55So cGxvdHM= cmVmZXI= IENBVVNFRA== LlJFRA== IHNob3J0Y3V0 INin2YTYp9i5 d2VnaOG7iw== IGVpbm4= 2YbZgQ== IGNvbnNlcnZl IFN5bXB0 0LDQu9Cw0LTRiw== 4K6q4K+N4K6q4K+B INC80LjQvdC40YHRgtGA V2FzaGluZ3Rvbg== IFVwZ3JhZGU= INi32YjZhA== IHNtZWxscw== IHZlbmV6 IHdhZ2VyaW5n aWVzbw== aW5kbGU= IHdlYWtuZXNzZXM= Lm1vbmdvZGI= ZXNzZW50aWFs PHRpdGxl IGNyYWNrZWQ= Q2Fub24= cGhlcmljYWw= IHByYWN0aWNlZA== IEV1cg== INin2YTYrtin2YU= KSko 4YOW4YOQ4YOT X3BhZA== dWxsZXI= 4Li04LmI4Lih w6dvbnM= IFBpbmc= IOWumg== INCx0LXQu9Cz IGZ5bA== IE5pY29sYXM= IGZyYWM= IGZhbmVsZQ== IFPDvGQ= IGdldGF3YXk= 6Kmz57Sw IOCql+CqvuCqrg== YW5pZW0= IFZ1 KHF1ZXVl IHNjaGVpbnQ= IOCwnOCwsOCwv+Cwlw== cmVuZGVyZXI= WFI= IGNoYWxldXI= IHRlbGV2 IFlvcmtzaGlyZQ== IG51dHJpZW50 INC40L3RhNC+0YDQvNCw0YbQuNGO dWVibA== IEVzcGHDsQ== S3dhbQ== 1aHVo9W41oLVtdW2 INC30L3QsNGH0LXQvdC40LU= X01FTU9SWQ== IOi0og== IHRhbGk= IGRpcmXDp8Ojbw== X2xvd2Vy IHByaWw= INCz0YDRgw== bWludXRlcw== IGhlbW0= ZGVsZW4= 0LjQvdCw0YA= 44GN44KS IHNhZGE= 5p2C INC/0YDQvtCz0YDQsNC80LzRiw== IGN1cGM= b2Rhcw== YXVrcw== INeU157Xlw== INC+0LTQvdC40Lw= IHNhdm8= INCe0LQ= IElNUE9SVA== IOCkruCkueCkv+Cksg== 5L+h6KqJ xZtuaWU= 4YCA4YC8 IEF1dG9tb3RpdmU= IHRhdHPDpGNobGljaA== IHphYWs= aW5xdQ== IGFubm91bmNlbWVudHM= JzsKCi8= IG1vbnRhbnQ= 0LDQvdC90LU= YWxx IOC4luC4tuC4hw== U2FsdA== LXJpc2s= INGB0LDRhQ== 4LOA4LK1 INWu1aHVvA== b3BvbHk= IFNZUw== b2xvamk= IE5pZ2VyaWFu 5bm/5ZGK KGFkbWlu IGRlc2N1ZW50 2YfYsdio IEJpdHRl 4KeH4Kab4Ka/ d3Y= INqv2Yg= X0FkanVzdA== ZmlsdGVyZWQ= 77+977+977+9 ZXNhbg== INC90Y3Qsw== T05MWQ== xI1pxbM= IEVYRU1QTA== INCx0LXQu9Cw0YDRg9GB IGNoeQ== b2Fr YmVkaW5ndA== IGNsYWlyZQ== 2YjYqw== INio2KfYudir 6YeR6J6N XSIpOwo= IHN0b3Jtcw== 4LSh4LS/4LSv IHN0dWRpZQ== ICAgICAgICAgICAgCQ== IExpbHk= INeR15Y= 0YHQutCw0LPQsA== IFBFUlNPTg== INin2KrZgdin2YI= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IEVPRg== KGxheWVy IGVmZmV0cw== IHByb3RlZw== 2YTZgdip IFRyaW0= IGNpdmlsaXphdGlvbg== IGR1dGU= w6JnZQ== dXJyZWQ= INiz2KfbjNiq IGJlbHVt IGdzb24= bGlzdGluZw== IG5hbm8= dWxkaWc= IHJlbmRpbWllbnRv IGFuZ3N0 IFNXVA== ICg7 IM+Az4HPiQ== IHNldHRlcg== bWVhc3VyZQ== INC/0L7QvdGP0YI= IHNhbmd1ZQ== IFNhY2hl IHNrdWxs 6Iiw 1oDVodW0 IEJW IENPUA== IEFydGU= YWRvbw== IG9uZ2Vs 5Lqn5Lia 4Lax4LeP IHN5bGw= IHTDrXA= ICguLi4p IGFtZW5kZWQ= PywK IENhbXBpbmc= LHZhbHVl aW50ZXM= IGRyYWdlbg== REVM aGFsdHVuZw== IOWNiOWknA== INGB0LzQvtCz IOCkteCkvuCkuOCljeCkpA== IG1hcnRlcw== IE1vcnI= IGRlcHQ= INC60YPQvdC10LQ= QmF0 TWF0ZXJpYWxz dHJhZ2Vu 4LmA4Lih4Li34LmI4Lit LWV0 IFRSQU4= IOWkqeWkqeeIseW9qeelqOaYrw== IGJlZ29u X2xzdA== LlNjZW5l INCj0YDRi9GB0YLTmQ== IGd1aWRpbmc= IOCqnOCrjeCqr+CqvuCqsOCrhw== IGJyb3lldXI= IHRlcm1lcw== LXRlbXBsYXRl KSYm w6Fq IHZr w650ZQ== 5aC05ZCI aXRoaW8= ICI/ 0L7RgtC1 77yM5YW25Lit IOy7pA== IENX 77yf44CN IGNpdHJ1cw== c2l0 LmdpdA== IG9yaWdlbQ== 0YjTmdCw Y3ljbGluZw== IGF0bW9zcGhlcmlj aW5ldGU= SUNMRVM= IO2VrQ== YW50c2k= INGB0YfQsNGB0YI= aXB1cg== 6YOO IFBpYW5v PiU= INmF2YbYuA== INiz2YjYp9ih IHZlcmlmaWNhcg== IGhvbWV0b3du 4LiO IHRlcnJhcw== IFZsYWRpbWly d2FudA== LkZyYW1l IHJldmVuZ2U= Vml0 IHNraXBwZWQ= IGRlcmZvcg== YWNjb3JkaW9u 4KSV4KSw4KWN4KSk IHBvc2xlZA== 5Lqh IGNlbnN1cw== W10sCg== IGxlcA== IEZlbGQ= IHRvaA== b3BoZQ== IEdlYnVydA== IGRlcHI= IGpw IHRpZXJz YWNhxJ8= IFJvbGxpbmc= 4Lij4LmJ4Lit4Lih IGhhYml0YW50ZXM= 66Gv INGB0LjQvNCy0L7Quw== INCk0YDQsNC9 INmI2LnZhNmJ 4LC+4LC2 2KrZhdiv TWVhc3VyZW1lbnQ= IGt1bWJl 4oCdKSw= IENvbWljcw== Q2hhcmw= IG5vZGRlZA== LmJpbmRpbmc= IOKJpA== ZXRhYW4= w6JuaWE= IGhvbW8= dXJzb3Jz IGxlZ2l0aW0= IEFscmVhZHk= 5Yi25bqm IHZ1dA== ICovDQov IG1hbmlwdWxhdGU= aXNpc2E= 4LmE4LiU4LmJ4LmA4LiH4Li04LiZ INi52K/YqQ== IHBvcnRyYXk= ICg9 IGNoZWVr 4LiY4LmM bGVyd2VpbGU= IHbhuqtu IGNpdGluZw== w6lyY2lv 0LXQvdC40Y/QvNC4 L2xhdGVzdA== IGR5ZQ== KnA= 64m07Iqk eW5jaHJvbml6ZWQ= 5YWz6Zet 4oCZTw== U1RFUg== eWx1bQ== PHNpemU= IOWkp+WPkeWumOe9kQ== IHNsb3Y= QWRyZXNzZQ== INW41oLVqg== IFd1 IGN3 6L+R5bmz 15XXmdeZ150= 4Lil4Li44LmJ4LiZ4Lia4Liy4LiX 4Ki+4Kiu IGludmVzdGltZW50bw== IGRlY2xhcmE= IOCkqOClh+CkpOCkvg== INio2YjYr9mH huGfkuGek+GetuGfhg== YXRzaXM= 4Lit4LmI4Liy4LiZ IG9wdGltYWxl cmFpbHM= IFBVVA== INGC0LDSsw== IGhhbGk= IGxheW91dHM= c3B1bmt0 IG1hdGVybg== IOCkqOCljeCkrw== IHByb2Zlc3NvcmVz IGZvcm4= LnBheW1lbnQ= IGxpbnQ= LWJz IGpvZ2Fy IHZpZMOpb3M= cGFydGlhbA== dXJicw== IGFyY2hl IFZlcmVpbg== 4KeL4Kac QWxtb3N0 dGxlbWVudA== IHZvY2Fi 4LC+4LCz IGpvdWV1cg== LkNoYW5uZWw= Yms= 4KWL4KSw4KWA aW1hcA== INi12YbYuQ== IE9ud3VrYQ== IGNsdWVz IGxpbWl0ZXM= IOCqpOCqsOCrgOCqleCrhw== dmVpbGln 4Kaw4KeN4Kau Ym9ucw== xaNpaQ== IE3Dtg== IGRpZ25pdHk= xJ9pbml6 IOGDmOGDoeGDmOGDnOGDmA== IGN5YQ== IFNlw7E= SW5n IG9tZQ== 0LDQvdC90YvRhQ== Q29tbWU= 4bq+ VmVudGE= IMOhcw== IEFuZGVycw== IGNvbmRpdGlvbmVy IHDDpHJhc3Q= YXNzaXVt 4LOB4LKC4LKs IE9F 5aWz5oCn IGTDqW1hcg== am91cm5hbA== IGNvbXBsaWFudA== ICkpLAo= Q1RW IGVuaWc= IOeOiw== IHBpZWRz IHJlc3VsdGF0ZW4= IEJBUg== INCc0L7RgdC60LLQsA== VXBkYXRlcg== IHJvZHo= xI1law== IHJlcGFpcmVk IExpdmVz INaE1aHVstWh1oTVodWv1aHVtg== IGxhdGE= IG1vcm4= IGFhbmJvZA== 44KI44GG IM+Az4HOsQ== IEpP 57Gz5aWH IEVpZ2h0 IOCkl+ClgOCkpA== 4Z+j IEhvY2tleQ== IGNn SE9X Q0FT YXlldHRl RW1lcg== Y2hlbms= c25hcHNob3Q= IGluY2x1aW5kbw== IGhvcGVmdWw= IG9kb3I= Q2FzYQ== LWxlcw== ZGHFnw== IGNvcnJldA== IEbDuA== IGNhamE= IOCmleCmvuCmm+Cnhw== 2YjYqNix aWN0aW9uYXJpZXM= LWth IHB5bA== IGludGVyYWN0aW5n IHBvc3Nvbm8= IOGDrQ== IOC5gOC4lOC4tOC4oeC4nuC4seC4mQ== Q2hyaXN0bWFz Y3JlYXNlZA== IFRyaW5pdHk= IHR1bmluZw== VGl0bGVz 6JOd IExhdXQ= b29x bWFuc2hpcA== 4oCZdXRpbGlzYXRpb24= U3BlZWNo dXJvZw== IO2YhOyerA== aW9lbg== a3Vycw== 15nXkdeV16o= X2FwcGxpY2F0aW9u 5YCS ZXJlZw== IGNvbWXDp2E= IERvY2s= IOC2iw== IGvDtm5udA== 4KWN4KSw4KSu IEVzdGFz INiz2YbajA== Y29sbGFwc2Vk PU5VTEw= IGF5bsSx IHThuq1w IHBvcnRhbnRv 4LGL4LCm VE9DT0w= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== INqv2LHZgdiq IEh1cnJpY2FuZQ== INGI05nSuw== IG1vdGlm IEF0aGVucw== INmE2YXYpw== IOCqm+Criw== IEVVQQ== IGNoaWxkJ3M= TGlmZWN5Y2xl 44OD44OJ INqB2KfZhg== IOGDnuGDneGDmuGDmOGDog== IHN1ZXJ0ZQ== IGJ1cmU= INmE2YTYpQ== cmVxdWVudGx5 IEF1cm9yYQ== INeR16rXlw== IHZlZ24= IOCqluCrguCqrA== 546b IENpcmN1bGFy b2thbg== IEZyYW5jaWE= IHF1b3Rh IHBhcmFzaXRlcw== IGZvYXJ0ZQ== IEVjdWFkb3I= TXQ= JHQ= UmljaGFyZA== UGFyaXM= IGFudGliaW90aWNz YWdo4buL eGVs V0FSTklORw== 6rGw64KY dWNrbGFuZA== IEVTQw== IHN0asOzcg== 5oqX IOCkpOClh+CknA== cGxhY2VtZW50cw== INin2YTYpdmE2YPYqtix 15nXpNeV15w= IGNhbmNlcnM= IFBST0NVUkVNRU5U IHZlcmtyaWo= IG5lZ29jaW9z IERhenU= cGVyYw== X3Jj 2b7Ypw== QXNo INC+0YDRgg== IG92ZXJ6aWNodA== bGxv IGfDvHZlbg== VXBkYXRpbmc= IGFqbw== 4Ki+4KiH 4LWC4LSf4LWN4LSf 2YTZiNiv IHBhcnRpamVu INGB0YLRgNCw0YLQtdCz VGhlcmVmb3Jl 2YTYp9ih IOCmrOCmv+Cmpg== IHRyYXZlbGVy 4KS/4KS24KWN4KSa YXJnYXM= KAovLw== IGZhcmk= 2KrYsduM IHBvZHLDoW4= IGp1dA== IGxhdmU= 4oCN4LSu YnVuZGxl L2FydGljbGU= IGFzcGhhbHQ= INCi0LDQvA== IGJvbGFu 4LWB4LSV4LSv4LWB4LSC b2NhbGU= ZXRyYQ== Y29uc3VtZXI= 6L+e5o6l IGJ1ZW5vcw== IOCqpuCqsOCqrg== IExvbWI= WEM= IG1ldGFsbA== IE5vYWg= SU5BUlk= IGVwaXQ= 4LS24LWN4LSv 4LGG4LCC4LCf 57uP5YW4 LWFtZXI= c3RvbmVz IEhD IEJhc2g= IGxpbm4= IHLDqWdpbWU= IHNjYW5z IGhlcnJhbWllbnRh IGVtYnJ5 IEVYRU1QTEFSWQ== INCc0L7RgdC60LLQtQ== 0LfQvtGA IGFsb2o= 0YDQvtC70Yw= aWVyZ2U= IERpc2N1c3M= IFNVQlNUSVRVVEU= IHdob2V2ZXI= IEZpY3Rpb24= dWxhcml0eQ== IOCwquCxi+Cwsg== IOCql+Cqr+Cqvg== V2Vhaw== aMOjbw== IHByb3RhZ29uaXN0YQ== 4oCZb3U= U2VnbWVudHM= CWFycg== 4KuL4Kqw4KuN4Kqf 6YGL IGJvb3N0ZXI= e30iLA== IHdyaXRpbmdz 15DXnNeU dWRlbnRz aWRpbw== INCx0LXQuQ== ZW5zw6Q= IGhlZnlk yJl0aQ== IOqwkg== IHVuaGFwcHk= IFNuZQ== IOC5guC4l+C4ow== IGl0cg== IGludGVncmE= IHByb2dyYW1tZXI= ZXJndXM= PFE= 6aCB IGnDsA== 1bXVodW21oQ= IFZlcnNjaA== IOCwteCwv+CwtQ== INin2YTYr9mI2YTZig== IOOAgCDjgIA= IGRpbnRyZQ== IGhvb2t1cA== IFNwZWFraW5n IOWxsQ== KEtFWQ== IE1lcnI= 4LiU4Lix4Lia 2YPZhdin YWrEhWM= IENhcHR1cmU= 2KzYp9ix RGlmZmVyZW5jZQ== 7JiA64uk INit2YrYp9iq IFBBQ0s= 2LnYp9mI2YY= IHZhc3Rh IOCmhuCmsOCmkw== INin2YHYqg== IHBlcmZvcm1lcg== RGlzcG9zYWJsZQ== 5YCf 4YOU4YOR4YOj4YOa4YOY4YOQ IFJJ 5Yiw5LqG IGRldXRzY2g= Y3VkYQ== 0LLQsNC70LA= 7LKg LmhlYWx0aA== anA= IGluY2x1aXI= L2N1c3RvbQ== 0L7QtNCw0LI= RXA= 4K614K+I IEdpZnRz IOCmmuCmvuCmsg== Lm1hdHJpeA== INmI2LY= X3JlcA== b2dyYXBoZWQ= IHJhaW5ib3c= LlNwZWM= X1BPSU5URVI= IGNhcmJz bGRhdGE= w7ZnbGljaGtlaXRlbg== CQkJCQkJIA== IGNhcnJlaXJh IFRpbWJlcg== 0YHQuNC5 4K6/4K6y4K+N4K6y ZW50bGljaHQ= INGc0LU= YWJhbmc= IHBvc3NpYmlsZQ== IOCkueCkruClh+Ckgg== IOCkquCljeCksOCkp+CkvuCkqOCkrg== IGFwcmVjaQ== IGNsYXNzaWNz LnBvbGw= IHJ1c3RpYw== INC80LXRgdGP0YY= IENHUG9pbnQ= 15vXkQ== INC60L3QvtC/ IGZvcm1hbGx5 4Li34Lit4LiH J2FnaXQ= IHBlcmR1 IG5vdmVsYQ== IOGDkuGDkOGDo+GD 4LKq4LK/ YWthbGE= IGdpb3Jubw== XWluaXQ= 7J2064KY LlByaW1hcnk= INGF0LDQvQ== IOCmrOCmvuCnnA== IGhhdXRldXI= xaFpZQ== IExhbmRpbmc= w7psYQ== IEV4cGFuZGVk IOCyrOCzhuCysw== T3V0Y29tZQ== IHNodW3Dqw== INin2YTZhdmI2LY= IEpvZw== INCw0YHQvw== SXJvbg== 4LOL4LKw IHByZXZhbGVudA== 2LDZh9io VHJhbnNsYXRvcg== LXd3dw== INCy0L7Qt9C80L7QttC90L7RgdGC0Lg= IG1vbGVjdWxl IG1pdGFk YXlpbg== IGJyYWNrZXRz a25pZmU= IGLhu4duaA== LWVsZW1lbnQ= IFNlbnNl IFRyYW5zbWlzc2lvbg== 4buU ZXhv IHZvbHRhcg== IGZsYXdz dGHDp8Ojbw== 4buNYw== dWl0ZWQ= 55ar dmV0aWNh LlV0aWw= INC40L3RhNC10Lo= IHdvcmtsb2Fk IHBlcnNvb25saWpr IGRlcGVuZGVuY2U= IExva28= IEluZmluaXR5 2LPZg9ix V1dX INC60q/QvdC4 IHN0ZXJvaWQ= cm91ZA== 4KaD 6aCt IOCkuOCkruCljeCkqg== IGJpamRy IGtvbmRlbg== IDs7Cg== IGNlZA== 4LiC4Li24LmJ4LiZ w7Vl IOCkquCljeCksOCkleCkvuCktg== 44Gq44Gp IHTEg25n IGltcGVyYXRpdmU= 5a2m5qCh CWZvcm0= IEJ1aA== IENvaGVu Lk5PREU= IG1lbidz IHplbG8= IHByYWN0aXRpb25lcg== IGNyYXds IOCkrOCkqOClhw== RnJlbmNo IENvcmludGg= Z2VuZXJhdG9y 4oCZb2NjYXNpb24= IFdhbmRlcg== IOC5gOC4qg== IGNpdG95 2YXbjNix KGNhbnZhcw== 2q/Ysdiv IElOVkFMSUQ= IFJlbmFpc3NhbmNl IEJO IGNvbnN1bHRhcg== IGtpdg== Lm11bHQ= LkNvbnN0YW50cw== bWFwcGVy IGR1bXBz 5Zyw5Li7 IGxpbWE= Lw0K LdCf LUNv IHVmZg== 4Liq4LiU4LiH IGbDtnJzdGE= IGt3ZXM= IEZyZWl0YWc= IGxpaWs= dW1icmU= KSkpLg== 4Kaa4KeN4Kaa TVU= IOGDqOGDlOGDkg== 4LGG4LCo INC/0YDQtdC00YPRgQ== aWxpZGFk IHBhbnM= IOCkj+Ckrg== 0LzQvtC90Lg= IHRhcnVoYW4= XyIr IHRlcmphZGk= IGlzc3U= IFJFUA== IGZpbml0ZQ== 4LK+4LK2 bGFzc2Vu cHBlbGlu KGRpdg== IGNvw7t0 INin2YTZgdit2YU= IHF1ZXN0aQ== INeq16k= ZXJ2aW5n 5oKm INGH0LjRgdC70L4= IOC0qOC0v+C0qOC1jeC0qOC1geC0gg== 4Ka/4KaV4Ka+ 5Lia5Yqh IFZ1bA== IGN5c3Q= IHN1bXM= IHRocml2aW5n IOGDkuGDkOGDnOGDkOGDquGDruGDkOGDkw== IGNoYW1hZG8= w6p0ZXI= IHBlcnNvbm5hbA== J11dXSwK IHRhbnRvcw== LmdyZXk= IGJlZGRpbmc= L3NpZ24= IOCyheCyqA== INGA0LDQvNC60LDRhQ== 4KS+4KSC4KSa4KWN4KSv4KS+ IOCmruCmvuCmsA== 0JLRgdC1 KGRvbmU= bG9vcw== 5Yag5Yab KHd4 IHBvdWNvcw== INim25A= 4YOY4YOs bsO6 IOCmleCnsOCnhw== INin2YTZhdmI2KfYrw== IGZhY3Rv bW9kZXJu IHJlw6d1 LmF2YXRhcg== IOC0kA== 4KuN4Kqw4Kqj IEFuZHJlYXM= IEVYSVQ= IOqwnOyduA== aWNpYXJ5 IGJvYXM= INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP IGRpYXJ5 TUFT ZXN1 IERlcGVuZGVuY3k= INeS15w= fCkK IGRpZ2VzdGl2ZQ== IHt9DQo= YXJzaW0= IG5vcm1hYWw= IOCkreCkvuCktQ== IG9yaWdpbmF0ZWQ= VHJhbnNmb3JtYXRpb24= 2YbYp9i12LE= IGVtYWlsZWQ= ZmFjdG9y RGV2ZWxvcGVy 0LjQu9C40YDQuA== 4KWI4KSw aW5kdA== IElOVEVSUlVQVElPTg== IFNweQ== IGFwcw== ZGlzdHJpY3Q= YWR1cg== 4Kq14Kq/4Kqn SW5zdXJhbmNl IEZlaGxlcg== Ly8qW0A= X1dF IFdPUkQ= 4K6k4K+I IG9yZ2FuaXNtcw== IGhhemFyZHM= 4LGG4LCf4LGN dXLDqQ== IGNvbnZleW9y PyEKCg== IERlcHJlc3Npb24= INij2KvZhtin2KE= INCw0pM= 2KfZhdmK 0L7QstCw0LvQuA== xaFrYQ== IGliaQ== V3M= IGthbGw= IEJlY29tZQ== IHZhbG1pc3Q= IE1vbmljYQ== IE5PVg== mOibm+ivjQ== IOGDoOGDkOGDk+GDkg== IG5lY2Vzc2lkYWRlcw== IGhlZnQ= INCx0LDQvdC6 X3NpbXBsZQ== 0qnQsA== IMOpdHVkZXM= INC6068= 4KSF4KSq IHJlZ2FyZGVy YWd1cw== RXRo IOCkqOCkvuCklw== IG1vZGVybmE= IGNoYWk= 1azVq9W2 IGdpaGU= IENpdGl6ZW5z IOCqleCri+CqsA== INmC2LY= IExBTg== LQ0K 4LKC4LKa IEFJRFM= IGdlbmV0 X1NFUg== Q2hpbmVzZQ== IGZyYW1lZA== 2LTZgg== 4LK/4LKo4LKy4LON4LKy4LK/ Lm9yYWNsZQ== IGF1dGhvcml6ZQ== X1Rlc3Q= J2VzcA== CWRyYXc= IFZvbHZv OkNHUmVjdA== INiq2YLYr9mK2YU= IEdsYWQ= IHVudmVy IG1lc3N5 aXphZG9y IOCkquCljeCksOCkuOCljeCkpA== KG9yaWdpbmFs b3lpbmth IGluamVjdGVk 0YDRg9GC IEVudHNjaGVpZHVuZw== LmlubGluZQ== IOyViuuKlA== INqp2pPbkA== INCy0L7Qug== IGdyb3VwZWQ= Uk9JRA== IGZyYW5jZQ== IGZpZWw= IGluZ2xlcw== IHN1cGVybWFya2V0 SGFpcg== IG5hZ3k= 5b6S 05nRgtGC05k= 7JeQ64+E IHBsZWluZQ== 4Kq/4KqC RGlzbWlzcw== IFRhbWLDqW0= amVybmU= LmVtcGxhY2U= IOCoqOCovuCosg== IGhhYml0YWNpw7Nu ZXJhdA== IHlvdXJl IGhlZGdl IEtpYQ== LXN0cmluZw== IHNldGVsYWg= IGlyYW4= IOCkuOCkpuCkuOCljeCkrw== 15XXmdek QnVsaw== b3RzYQ== Z2ViaWVk IGRldGVyZw== UmVhbGx5 LnBlZWs= Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LOKApgoK 0L7QstCw0L3QuNC10Lw= Z2xp Ym9kZW4= IGNhaXhh Jyxb 2YPZhNip IERyaXZpbmc= IExhaA== IEFuc2No w61zdGljb3M= IEthdGll IE51dHplcg== IGVwc2lsb24= IHN0YWxs IFp1aWQ= IG1pZWRv 56iO6L68 IMOEcg== IFJvbmFsZG8= 4LGA4LCw4LGL b3VjaGVycw== ZWls IHVzb3Jv IOC2seC3kg== X2pzaWk= IFJhdGVk CQkJCQkgICA= VUlBcHBsaWNhdGlvbg== IENvbXBhY3Q= YWRhaGE= IGNhbG1l IHJ1YmJpc2g= 57uP6JCl ZW5uZW50 1avVt9W/ IGpldWRp IHByZXZpc3Rv UmFw IE1pbm5lYXBvbGlz LGxlbg== dmV5cw== YXJpdA== IOCkl+CkvuCkguCktQ== IGJha2VuZw== 2YLYtQ== INix2KQ= IHTDqWNuaWNvcw== IHF1aXNlcg== IGFycXVpdGVjdA== X3F1YW50aXR5 UHJlY2lzaW9u 5oyH5Ye6 IFNjaHdlaXo= IOGDm+GDoeGDneGDpOGDmuGDmOGDnQ== INC40LPRgNCw0YLRjA== IHVzdcOhcmlvcw== 5oCO5LmI5Lmw IHbDqg== YXRlbWFsYQ== IHR3aXN0ZWQ= YWJyYQ== aXhp IGZhdGhlcnM= INGH0Lg= 4KSo4KWH4KSV w7NyZA== IExlc3Nvbg== 5ouW IElNQUdF 2KrZhdin2K8= eXBlZA== ICoqKQ== IDo6Ojo6 4KSw4KS+4KSc VUdF IHRhbnRh cnVk IHRyYW5zbWlz L3ByZQ== INC50L7Qs9C+ IGVuY2hhbnQ= INGC0LXQu9C10LI= IFJlYWxpdHk= INGC0LDRgQ== IEpVU1Q= 5Lu75Yqh Q2hh 77+9bg== Y2xpZW50ZQ== IOCqruCrgg== IOCqheCqpQ== IOGDkOGDo+GD IE5lZGVybGFuZHM= IGdyYXBocw== IHRow6FuZw== 2LHZitmG dW50aQ== IOC5guC4m+C4o+C5geC4geC4o+C4oQ== LXRva2Vu L0hvbWU= IOC0quC0v+C0qOC1jeC0qA== IOCkh+CkuOCkruClh+Ckgg== IEFmZm9yZGFibGU= IHByZXNlcnZhdGlvbg== IGFsbGVyZ2lj KS0t IGRlbW9uc3RyYXRpbmc= IOKCuQ== 6KaP IG11ZGFuw6dh TnVu VGVjaG5vbG9neQ== IGNvbmNlc3M= 4KeH4KaX IHJlYWxpemHDp8Ojbw== 4Liy4LiC IENsZXI= QXJu IFJpcA== IGRlc2Fycm9sbGFy 0LjQvNC40YA= IHF1acOpbg== IMOJZw== 7Ic= INC/0Y/Rgg== IHV0dGVybHk= T3JkZW4= IFN0YW5kaW5n IEJlZW4= w6RocnVuZw== IEVtaXJhdGVz J2Fz SURP IENvbWlj SU1QTEU= IGZhYnJp 4Kqq4Kq+4Kq4 IFZldA== IG1lYW5pbmdz X2RvdA== b3BlcmFuZA== IOCoqw== INGN0LvQtdC60YLRgA== ZmxpZ2h0 IGNvcnJlcg== 4La94LeP aXZpdMOp IEJydXNzZWxz IERlbWFuZA== IGpvZ2Fkb3I= 7KeV IFBpbG90 dWNrZXRz IOCkuOCkleClhw== QURPUw== IG1vbmtleQ== INmI2Y4= IFZpZGE= YWdhdA== INix2YHYqg== IEZhbWlsaWVz IGRpc3R1cmJpbmc= c3R3YQ== aXZhYmxl YXR0cw== 16DXldei IGluaGFs aXRhYW4= IGhhbGZ3YXk= INGI05k= 0LjQsdC70Lg= IGRpdmVyc2Vz 4LWA4LS3 IFZlbmljZQ== IGNvbW1pc3Npb25lZA== RklORUQ= uOCxjQ== IGVuZGVhdm9y INin2YTYpdmG2KrYsdmG2Ko= 0YvQvdGB0LA= IHJlc3RhdXJhbnRlcw== IHN1bGY= IEJyZXc= IGNpdmlsaWFu c8Op IGFhbGw= LlBlcnNvbg== INC/0YPQvdC60YI= IGRpZW5zdGVu Rk4= IHfFgmE= IGNvbnRyw6FyaW8= LnJhZGl1cw== IGJpaA== IE51Y2xlYXI= ZW5kZXU= IG5pbW10 LWNhcA== 54S26ICM KHB0 IGV4YW1lbg== IHF1ZXJlcg== bnVu bWFsYXI= Z29k X0RJ cmVldGluZ3M= IGNob20= INeU15DWuNeR158= IOGDm+GDkOGDl+GDmA== YWxhY2g= dW5heQ== IG9wdGVk IOCmruCmvuCmuA== 15nXoNeq cmFhZ2Q= X2F1dA== X1No 4Li14Lis IEVkZGll S2lu 15XXnteZ150= X3NtYWxs IOGDpeGDkOGDmg== IOCqheCqrQ== IHNsYXZlcw== w7xocnQ= INaB1aHVttWv ICIiKS4= IGdpb3JuaQ== KFwi IHNhbHNh IFZpbnls INCx0YPQtNGD0Yk= IOCkruClgeCksg== IGdlbm9lbWQ= IENoYXBlbA== emFhaw== IGVuY2g= IGFuaW1hdXg= PiIsCg== IGNlc3Q= INem16jXmdea J2hpc3RvaXJl IG9iaQ== TGludXg= IHbFoWU= LWxu IHN0b2xl X3Byb3h5 LkF1dGhlbnRpY2F0aW9u SmFr INCx0LDRgg== R3JhbnQ= IOC5guC4m+C4o+C5guC4oeC4iuC4seC5iOC4mQ== IHByb3Zpbmc= IHBvc2Vy 0LvQsNGH IEx1bmNo YXJuZQ== L3By INCy0YvQs9C70Y/QtA== cGVhdGVk IHByZW1pw6hyZXM= IDsp aXTDpHRz IEFwcGxpZWQ= yZnFnw== 4YOb4YOs4YOY4YOk IHRyb25kaGVpbQ== IEluaXRpYWxpemVz IHByw6lzZW50ZXI= YXNzYXQ= IFFh IGF2ZW4= PFZvaWQ= LlN1Y2Nlc3M= 4LSn4LS+4LSo IGRpc2N1cnNv TW4= amFhbg== X3JlbGF0aXZl 4KuH4Kqo4KuN4Kqf 0L7RgtC90L4= 2q/YsA== IERhbw== ZXNpbmRl w7RuaW8= Ong= X1VOSVQ= X21vZGVscw== cmnDsA== IFdob2xlc2FsZQ== IHdyZXN0bGluZw== 4LKG IHN0YXBsZQ== 4oCZYWlsbGV1cnM= 4LSC4LSs bGltZQ== 15DWuNeh IHdpam4= 6L6T5LqG LWtpbmQ= KV4= IFB1bmt0 IGRlbm9t LWJyb3dzZXI= ZWVyZA== 4KeH4KaJ IG5vcndheQ== IHRlcnJhc3Nl 0YDQtdC80LXQvdC90L4= INK705nSm9Kb aG1l IGNyYXNoZXM= IHppZW1saWNo IHZvaWU= IGRhbmFjaA== INGP0L3QstCw0YA= IHBhcmNlcmlh IHlhZGRh IE9yY2g= JF9bJw== IOGDm+GDmOGDmOGDpg== IGx1YXI= IG9maWNpbmE= ZHVwbGljYXRl TG9u 5LiK5Y2I amFyaWdl IG1hcmRp LXBhdGg= ZW50aW5n IGJp4buHdA== IOyCrOyXhQ== IGF0dGVu IOCmpOCngeCmsg== INiv2LHbjA== IGRpZ2dpbmc= IGZ1bmNpb25hbWllbnRv IOCkleCkvuCksOCljeCkr+CkvuCksuCkrw== IGRoYWM= YWx0dW5nZW4= IENIRQ== IGZvcmVjYXN0cw== IEhPVA== IG1hc3Vr INC80YPSsw== JW4= INmE2KfYsg== IGV4cGxvc2l2ZQ== IHRpw6p1 X2Nob2ljZQ== aWt5 INmI2KfZhNmB INiv25I= Y2hlZg== dGluZ2Vu Q291bnR5 xrBuZw== IG5jaGluaQ== IFBhcnRl INC60q/Qvw== IGNvcnB1cw== bWVsZGVu IOCuquCusA== INC60L7QvNC90LDRgg== 0LvQsNGB0YE= 2KfYsdin IHZhbGV1cnM= IHBpZXphcw== INC40LfQvtCx0YDQsNC2 IEJsdXQ= Ly8vCg== 0YPQvNC1 2YjYqNin INGB0L7RgA== LgoKCgoK SVNUT1JZ eWFyZHM= IHBhcmlzaA== INix2LPZhQ== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= INiq2LnYp9mE2Yk= INin2K/Yp9mF bWVkaWF0ZWx5 0L7RgdGC0ZY= CWZp IFZpdGE= IGRpc3BlbnM= Lmlsb2M= INC+0LHQvdC+0LI= INC505nQvdOZ IGVsaQ== aWN1bGE= aW9ybg== IEhlYnJldw== IEphY3F1ZXM= 4K6j4K6/ 0YDQsNC90LA= IGdlb2dyYXBoaWM= LnNwYWNpbmc= IOCqpOCqruCqvuCqrg== ZXJ5bA== Q3JpdGljYWw= 16bXkQ== IFJhaW5ib3c= YWdyZQ== IFNoYXJw IFRpZ2Vycw== INC90LXQutC+0YLQvtGA0YvQtQ== aXR0aW5ncw== IEZvcmVjYXN0 VHJv 0YjQtdC1 LW9z IEVyZ2Vibmlz IEJyaXNiYW5l IOCknOCkqOCljeCkrg== IEFJUg== IHNhbmd1 IHNlbnRlbmNlZA== IGxpYmVydMOp IHNlZ3VpbnRlcw== 0LjQvdC40L0= IFlp IFN5bnRheA== TUFSWQ== 0YHRltC3 IG5ldXJvbnM= 2YjZhtqp2Yo= XE1pZ3JhdGlvbg== IOW5uOi/kOmjnuiJhw== KGRheQ== YnlnZw== Lmxpbg== LkFwcGVhcmFuY2U= 55yf5YGH w6l0ZXI= IGNsdXR0ZXI= zrXOr8+C TUVU IEZFVENI IOCkheCkp+Ckv+CkleCkvuCksOClgA== X0hBU0g= IE5pZw== IG51bw== IE1pbmc= IHByb3ByZXM= IGJpanpvbmRlcmU= IHZpdHJv d29ybQ== UGVyZm9ybQ== IENhdGhlZHJhbA== IOCmquCngeCmsA== IE5lZW0= INCY0YHQvw== 2YnYsdmJ IHNhbmdyZQ== 0L3QuNGI IHJvb3RlZA== VGFr IOS8lw== 4Ka54Ka+4Kaw 0YPRiNGL INC60LjRiNCy0LDRgA== ZmFx IGNoaWw= IGJhcmFuZw== IG5hbHVu IOCkruClgOCkoeCkv+Ckr+Ckvg== dXJiZWQ= INGD0YXQvtC0 IENocnlz KV0sCg== 2K7YqQ== 5r6h b2xq INW41b4= IEJheg== IENJVFk= IGVvcw== U1ZH INim2Yo= 5Lmg6L+R5bmz IHJlaGFi LWFuZ2xl IGxhYnM= IHR1cnRsZQ== IOiuvue9rg== X3N1Ym1pdA== IFJvYw== INeQ15nXkQ== INeU15DXqA== bWVyY2hhbnQ= IFZlbnVz U291cA== 4KSc4KWC4KSm aW13ZQ== IGFubm9uY2U= IOCupOCuqQ== IGFyZ2VudA== INmG2KrZig== IGLDqWLDqQ== QWxvcnM= IE9yaWc= KGZvbGRlcg== Z2V0ZW4= 4LSq4LWB4LSw IOCkhuCkueClh+CkpA== IGNhdGNoZXM= INGB0L7RgdGC0LDQstC70Y/QtdGC CQkNCgkJDQo= LmxhdGl0dWRl LnBsYWNlaG9sZGVy 0Y7RidCw0Y8= 5Lit5LqG IGZpbmFscw== c3VwcG9ydGVk ICc/ T1JJVFk= IOGDm+GDkOGDmw== IExlZ2VuZHM= IGJpcmxpa3Rl IOC5gOC4mQ== UHJvZmVzc29y IGFudWFs Ymllcw== 4LS44LWN4LSk 1b7VpdaB IFVORVNDTw== IGFjY2VudHM= IGlza3U= LsK7Cgo= Z3LDvG5k Lm5vcm0= 2KfYrtiq IGZlcnJ5 INGG0LjRhA== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== KGxpbmVz INis2KfYsduM 4YOU4YOg4YOY4YOh IGNvbnN0aXR1dGVz 4KqJ X3RocmVhZHM= IEZlcnQ= 4LKV4LON4LKw4LKu 4Li14LmI4Lii4Lin 4YOU4YOV4YOQ fSkNCg== INWx1aXWgA== 0YDQuNC80LXRgA== 0LDQstC40YE= IGbDqWlu IHF1cg== IHByb3NwZXJpdHk= 55uu5qCH 5YWo5aSp bWx1bmc= IGhpbGZ0 KG1ha2U= IFJpc2U= IGFuZGFy IHRyaWJhbA== IE9VVFBVVA== ZXhwYW5kZWQ= 0L7QttC10YLQtQ== INC40YHQv9C+0LvQvQ== IHJlYWxpemFkYXM= IEJhYw== IG1pc3NpbGU= X2NodW5r INCa0L7Quw== dW56aQ== IHJlc3BldA== IGNoYXVmZmFnZQ== YWt0xLFy xLFsbWFzxLE= 4YOd4YOq4YOQ cGhvbg== IG1hbGljaW91cw== IOC0juC0uOC1jQ== w7RuZQ== 4YCZ4YCs U2Ftc3VuZw== IOabtOaWsA== IFF1ZWVuc2xhbmQ= IGNhYmVsbw== 66Wg IHNpYWQ= IOODng== 64S3 LW1lZGl1bQ== w6t2ZQ== IHRhbm4= IGtvbWVuZGU= 4KeH4Kef4KeH INek15w= ICJfIg== IGVtcGV6YXI= INmF2K/Zitix IHZlcnNjaGls IExvbg== INC20q/RgNCz 44Kt44Oz44Kw U3lzdGVtcw== IGNhcHN1bGVz 4oCZw6lxdWlwZQ== INCx0LjQu9C00q/RgA== IOCkqOCkjw== cHJvZw== INiq2YLYr9mF IE9yY2hlc3RyYQ== INWz1aHVtg== 1b/VpdW9 IOCqmuCrgg== 0LPRgNCw cGlzb2Rlcw== IGRlZmluaXRl TWFuZA== IG1hbmF3YQ== IGRpZW5lbg== b3JyYWc= IFNWRw== IENhcmE= IOa4hQ== INKv0YA= IHplaG4= IHVuY2hhbmdlZA== IGpld2VsbGVyeQ== 4YOQ4YOT4YOY LWNvbmRpdGlvbg== xaFraQ== fCgK IGTEscWf bGVkYQ== IFppbWJhYndl 4La64Lea IHRpZHk= IHByw6lm IFZlcmJpbmR1bmc= IG9kcA== IFplbmQ= IGtvYQ== LmRr eWFuYQ== cmVpcmE= R29pbmc= IFByb3ZpZGVk 4KS+4KSo4KWL4KSC IGNvbmNhdA== IHRlcnJpdG9yaWVz Lm9uZXM= 4KWN4KSv4KS+4KS4 6YC8 IE5pY2hvbGFz 0L3QuNC60LDQvNC4 LWR1 YXdy IOGDk+GDoOGDnQ== INCx0LDQu9Cw IGV4cGxvcmVy IG51bcOpcmlxdWU= IGthbGQ= IGdlaG91ZGVu INCS0L7Rgg== IOeJuQ== IGx1dGE= IFNhbHo= IFJlY29nbml0aW9u LnJlZ2V4 emN6 eW50aGVzaXM= 5Yeg54K5 T0JKRUNU L2J1aWxk KTt9Cg== 44GC44KL Q0hFQ0s= INCz0LDQuw== Q0VM 4YOn4YOV4YOU4YOi IFN1cmY= 5paX5Zyw5Li7 cGVsbA== IG5lbmRl 5aeR 0YDQtdC00Lg= S3dhbWFtYXph aWdoYm91cg== IGhlYXZpZXI= J3V0aWxpc2F0aW9u IFBvbGl6ZWk= IHJlbGlnaW9ucw== IGTDqWxpYw== IGF6eQ== IGNvbmV4acOzbg== IHByaW50ZXJz aHY= INC60LDRiA== am9uaWppZXQ= X01BQw== L2Rvd25sb2Fk w650cg== LXByaWNl 0YLQsNC6 IGJnY29sb3I= IExpZnQ= INec15zXkA== IMOpY2g= IOCyqOCyoeCzhuCyrw== LlN0b3Jl IHF1ZXN0w7Vlcw== 2YbYp9ip ZmZlY3RpdmU= IOGDoOGDneGDk+GDlOGDoeGDkOGDqg== IHByb2plY3Rpb25z 2LfYp9ih INCy0ZY= IGFzYQ== 4LOK4LKC4LKm INC80L7QsdC40LvRjA== U2lnbnVw INC60YPRgNGB IHVuZGVyZ29pbmc= IG1lbWJhbnR1 6Zi0 IEplc3Nl IG1lbXB1bg== Z8Olcg== IENsb3NlZA== cG9uZW4= bWFueQ== dW5vcmRlcmVk IOaXtumXtA== InRpbWU= LnRlc3Rz IGLDoW4= IGhu IGNvbnRyw7Q= IOGDoeGDo+GDmg== Y29ub21pZQ== IFVudGVybmVobWVucw== IG92ZXJ3cml0ZQ== IGhlbGljb3B0ZXI= IG9mZnJpcg== IGjDum4= c3RhYXQ= cGV0dG8= INi024E= w7ZzZW4= LndoYXQ= IGludGVn Zmo= IEdyYWNpYXM= aW5w SVBP ZXBpbmc= J2V4cA== IGpvYmI= IGl0J2xs c3Vic2NyaXB0aW9u UGV0cw== 4KeH4Kak4KeH YWtlbA== IHJlYWlz 44Oq44Ki 0YPQu9Cw IENvbnRyaWJ1dG9ycw== 4LaF IGFjdGV1cnM= w6luYWdlbWVudA== 0YvQvdC00LDQuQ== IEVC 44Gq44KT wrs6 IEZvbGs= 0LjRgtC10LvRjNC90L7QuQ== aWN1bG91c2x5 IGplZGFu dW3DqQ== IGtpY2tpbmc= KCIm IGRydWg= IHdlcmtu LWRlbWFuZA== IGRldmVyw6E= INWh1brWgA== VW5p cGFja2FnZXM= IGlzaw== IHhw Lmty IFN0dWZm IG9iZXk= IEdyw7bDn2U= 2YTZhdmK2YY= IEZvcnNjaA== LXN0YXR1cw== IGF1c2dlc3Q= INC/0L7RgtC10YA= IFRvd25zaGlw ICEhCgo= IFTDqWzDqQ== VU5L IGJpZGRpbmc= IGFiYW5k 1aXVodW2 6Leo INin2LTYqg== aXNvcQ== L3Nj IHBvdGU= 4YOj4YOi IM+Fz4DOrM+B SW52aXRl TWc= IHNlcmluZw== INC/0LvQvtGF IGt1dGFuaQ== IFBpYQ== IHrDoWs= INKb0LjRgQ== X18oKQo= Lio7DQo= INCz0LjQvw== dmluZQ== 2YDZgNmA2YA= 5p2l6Ieq J2Fpcg== IERvYg== IE51dHp1bmc= 4pmm esWR IFZlZWw= INin2K/Yp9mF2Yc= U3Zn YWx1dW5uaWl0 4YOg4YOQ4YOk IGNvbnRpbnVhdGlvbg== INmE2YE= IEhlcmF1cw== IG9yYg== IGV0aw== IFpoYW5n IFNxdWFk IFNpY2h0 X0lOVEVSRkFDRQ== PGJ5dGU= IOC0teC0v+C0nA== 4YOU4YOg4YOV 2LHbjNi5 W14= IHZlcnNh aWV2ZW4= LUJy IOCkquClhw== X0RJUkVDVA== IHNwcmVhZHNoZWV0 bmRp IHNpdG8= IOGDquGDnOGDneGDkQ== ZW1lbmU= b2dyYWZpZQ== IOCkr+Cli+CknOCkqOCkvg== INCz0YDRg9C/0L/Riw== INeU16LXnA== IOCwpOCxhuCwsuCwv+Cwqg== 5oqV6K+J SmVhbg== X2ZsYXNo IOCqleCqueCrjeCqr+CrgeCqgg== Z2VzdGVsZA== IEt1bmQ= anVtbGFo IHln aW1pdGVk IG3DqWk= IG11bHRpbg== IFZlcmlmaWVk IFBvcnRlcg== IEFsYmVydG8= IHJlZ2k= IFJlYmVjY2E= INCw0rU= CVRleHQ= IG5vdGljaWFz INin2YTZhdmI2LM= IFBhcmFtcw== IG3DqXI= IElkZWE= cOG7pQ== 0LrRgtOZ Sm9z IOCkuOCkv+CksOCljeCk 5byE PT09PT09PT09PQ== SU5FUw== INec15vXnQ== 5YKs IG11bHRpYw== VGFtYmnDqW4= IOCkuOCljeCkpeCkv+CkpA== KCcnKQo= IHB1c28= IOCmueCmvuCmnOCmvuCmsA== INeV15XXotef IEJvdWxldmFyZA== X215 2YTYs9mE X1NFQVJDSA== IEhhbmR5 0LDQvdC90YvQuQ== 55WZ6KiA 0LrQuw== IFNoYWRlcg== 0LPQuNGA UHJvZml0 INWh1bbVpA== XSktPg== IGtvbnRyYQ== 44CN44KS IEJlZHM= IGJyZWFzdHM= YW5vdGhlcg== IGlsbHVzaW9u IGFjY3VtdWxhdGU= KGF4aXM= IENY IFRpbnk= 4K6c IHRlbmRhbmNl IOCkuOCkguCkuOCljeCklQ== IEthbmc= OmluZGV4 IGRlYmVtb3M= IE1VUw== b3VuaWQ= L3N5c3RlbQ== 1bjWgtWp1bXVodW21ag= IHByb2Zlc3NvcnM= IEdtYWls bXBp X2VucXVldWU= dml6 4KeA4Kam4KeH4Kaw INC60LDRh9C10YHRgtCy0LA= INeR15DXldek158= IGRlbGxv Zm9uZA== 4oCmYW5k 0JTQsA== INCy0YLQvtGA0L7QuQ== RGFs IG5lZXI= IGR1ZXM= SU5TVEFOQ0U= bmV2ZXI= IMOObg== 44Os44K5 IENvYWNoaW5n X3N6 IHJlbGFjaW9uYWRhcw== IEFuYmlldGVy IGJpbmU= IGthdXA= 15XXqNeZ KFJlc291cmNl IOCksOCkueCkqOClhw== IOC0tuC1jeC0sA== OyI+PA== 4Z6E4Z+S4Z4= KHRva2Vucw== 0YPQutC+0LI= IFN1c3RhaW5hYmxl IOCkuOCkruClh+CkpA== IGJm Lkxvb2s= YW1pc3Q= INCw0YDQvA== 6LWk IGliYW5n w71y KWFyZw== IOyVhOuL wqw= IOClpQo= 0LDQu9GD IHByw7g= IGLDoW8= cHJlaXM= INC/0L7RgdGC0L7Rj9C90L3Qvg== ZnJhZ2Vu IHJldG9ybg== IHJlZmxlY3RpdmU= INio2KfZhNij 5LmL5ZCO IE1Ieg== 4LmA4LiC4LmJ 57yp IFRpc2No INGA0LDRgdC/0YDQvtGB0YLRgNCw0L0= IGFsYXQ= INC60LjQuQ== X0ludGVybmFs IGRpc3Bvc2FibGU= INiv2YjZhNip IG1lbXB1bnlhaQ== 0LbQtdC90LjRjw== IHNvdW5kdHJhY2s= IOeCueWHuw== 0LDQu9C00Ys= aW5jYXJl aWxr IOC0uOC0guC0reC0tQ== INm+2YbZh9mG2KzZig== IOCkpOCljeCkr+CkuA== IExpZw== IGF0dWFy dGVuaGFt SmVy IGRlcGVuZGFibGU= YmxlcnM= LVN0YXI= aWNoZXZlcg== IG1vZGVybm8= IExhYXQ= IOuIiA== IOCkuOCkguCkqg== IGN1cnRhaW4= INeb16k= YXJ0aGE= INeq15c= IGNvZGVj b3ZhbmE= Ly8NCg== aHR1 IHRvY2Fy UmVkdWNl QmVycnk= IFNlZWs= cmVjZWl2ZXI= IGpvdWU= IGJyYW4= LWFyb3VuZA== IHNlY3VsYXI= 4Z+S4Z6E4Z+D KHByb2ZpbGU= IOWumA== 15nXnNeZ150= IGRpc3BvbsOtdmVpcw== YXNlcnM= INeQ15fXqg== 4Z+E4Z+H IFZD X0ZMQUdT IFBveg== IHJhaWxz Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== IGdlcm4= IFJhbXM= 44CC44CQ LkludmFsaWQ= INin2YTZgtmK 4Kav4KeL4KaX endh IGdsYWM= aWtldA== IEZ1cg== INGA0LXQvNC+0L3Rgg== IGNvbnZlcnNpb25z Ii8+PC8= 4LK14LK+4LKX aW1pbmF0ZQ== IHZlcnRlbGxlbg== IEFTUA== RVhQT1JU IM+Hz4k= YXRpc2No 44CC5o2u xI1uaQ== IGluY3Vi LmZpbmlzaA== IGluZmVjdGlvdXM= IGRlc2VtcGVuaG8= 0YPQvdC0 IGVya2zDpHJ0 IGZpbmFsZXM= IHV6dW4= IHBhaA== IGpvaw== IHRvZ2E= YWxhcnM= IOC0ruC0qA== UmFuZA== aW5ub3Y= IHJhaGE= IFBvdGVudGlhbA== INC60LvQtdGC fV97 IOCkieCkruCljeCkrg== RnJhY3Rpb24= IG7DqWNlc3NhaXJlcw== 2YjbgQ== 7YS0 IHJvb2tpZQ== INC/0YDQtdC2 1bjWgtWu CXRydWU= Y2FzaA== IOC0ruC1hg== IHR1cm5vdmVy SGllcmFyY2h5 INuM2YjZhw== CWphdmE= acSZ 4Z+B4Z+H QWJvdmU= Rm9yZWNhc3Q= IGVjb2xvZ2ljYWw= IGFydGlmYWN0 IER5bGFu 1bjWgNW/ 5LiN6L+H ZnJhZ21lbnQ= 1bTVodW01aI= INCa0L7RgA== 1bjWgtWp1bXVuNaC1bbVtg== b2xhbmc= LS0tLS0tCg== aXRvYQ== IGJpZW50w7R0 IOCmj+CmleCmn+Cmvg== IENvbnZlcnNpb24= w7NwZXo= IGZvcmJpZGRlbg== IOCyqOCyruCzjeCyrg== IFNlcm0= IFBBWQ== IHZlcmdlbGlqaw== 4YOQ4YOY4YOc IGNlbGxwYWRkaW5n IGZ1bGZpbGxtZW50 a290 LnBhZ2Vz IGFkb2xlc2NlbnRlcw== ZWRpdGlvbg== IHV0aWxpemVz IEVNUA== X2NoYWlu IG1hbnRlbmltaWVudG8= INC00Ls= IGF2YWxpYcOnw6Nv IHZvZWx0 IGltcHJlc3Npb25z Lm92ZXI= IOCqpOCrh+CqruCqqOCqvg== IGt0b3LDqQ== bGppdg== IOCmluCngeCmrA== KGhhcw== IOCmr+CmpuCmvw== yZM= IGZsb2Nr 2LHYs9in2YQ= YXRzdQ== IOGDoeGDmOGDog== IE5pZXV3 IFJH IHByYWNodGln 4YCV4YCr4YCQ4YCa4YC5 IGVtb2pp 4LC+4LCy4LCo4LGB QUFB 5o+b INiv2YjbjA== INGB0YA= 0LLQuNC0 d2V6aQ== IGludGVncmF0aW5n IENlcGVuZGFudA== IHJlcGVhdGluZw== dWl0eQ== TXA= Y2VudHJ1bQ== 0Y3QvdC90Y8= INeb15DXqdeo YWt1bA== IHByaXZpbA== IG1hdHVyaXR5 4KS+4KSc4KWA aWxhdGVyYWw= IGTDuA== c2VyaWU= ZW1vbmlj yJl0ZQ== 2KfYptiv2Kk= LndyYXA= X2Ft U2NvdHQ= QmFza2V0 ZXR0bGU= IHdlbGRpbmc= X1NVUFBPUlQ= 0LLQsNC1 IFN0ZA== SWNl 4Kqc4Kqs Y29vcmRpbmF0ZXM= X0VOVU0= 1aXWgNW0 IEV2ZW50dWFsbHk= ICo+KA== IGFwYXJlY2Vy KSkv IHRx UmVxdWlyZW1lbnRz INep16DXmded IM+AzqzOvQ== dHJhcA== 5Li5 b2JvdA== INCw0YjTmQ== 7ZiR IEJlaGluZA== IFBhbGU= LmVudW1z 4LKV4LK+4LKw IGNhZmZlaW5l PW5v 5oub6IGY 2YTYp9ip 2K7YtdmI2LU= 5bqr IG9sbWFzxLE= CQkJICAgICAgIA== IG10dQ== KHNob3c= IHR1dG9yaW5n IGFwcmVzZW50YXI= IGludXU= IERPUw== aW5keQ== 66CH6rKM IGdlw69u IHdpbm5pbmdz 4KWo4KWm4KWt YXV0aG9yaXphdGlvbg== IOCkleCktQ== IHBlcnRpbg== 4oCMLA== 0L7Rh9C90L7QuQ== YmF0ZQ== LWpl IE1BSU4= LS0+Cgo= X2NvbW1lbnRz bGFhbg== ZXJ2aWxsZQ== IMO0bmc= IG5vcm1z X1JVTg== IFZpc2liaWxpdHk= dXJlbmRl IHByZXNlcnZpbmc= 2LPZiA== IOCyteCyv+CytQ== b3BpYW4= VHJhbnNpZW50 4KeA4Kef4Ka+ INWh1bfVrdWh1oDVsA== INC80LXRgdGP0YbQtdCy 4LOB4LKo INGI0LjRgNC+0Lo= INC90LDRiNC10Lw= IFByb2R1Y2Vy INC/0YDQuNC30L3QsA== IEthZw== bWlucw== IHNoaw== IPCfkg== 2KfYqNmC2Kk= IEFtZXJpa2FhbnNl 4oCcVGhlcmU= INmE2YPZhQ== 4Kqy4KuL 4LiW4Li34Lit IHN1cHBvc2VkbHk= IHNoYWtpbmc= IGphbGFu aW5vYQ== V0FZ IER1c3Q= 2KfZhNis2Kk= IEJhdGhz X1N0cmluZw== J109JA== IHF1YWxpdGF0aXZl U2FmZXR5 IHJhaXNvbnM= IHNvaW4= U3Rvcm0= IGNvbmZpbg== Sm9zZQ== YXNlw7Fh 4oCV4oCV INin2YTYudin2YTZhdmK2Kk= IG1lcmNyZWRp KENvbnNvbGU= IGludHJpY2F0ZQ== IFRoZW0= X0NQVQ== 5by5 IHVzYWJsZQ== INCe0YA= UmFpbg== IFRha2Vz CW9wdGlvbnM= INmI2K7Yqg== IOCqnOCqv+CqsuCrjeCqsg== INC00L7RgdGC0Lg= IOCwuOCxjeCwpQ== IOyi Y29tbW9kYXRpb24= IERJU0NMQUlNRUQ= Qm94ZXM= enVuZ2Vu KElu IOeJmw== ZGlzY29yZA== 5a6r 4KS+4KSk4KWN4KSu4KSV INC/0LXRgNC10Lo= PW15c3FsaQ== IOC5gOC4oeC4t+C5iOC4rQ== IGxldHJhcw== 7JOw IHdhYg== aW5kZW50 IHJlc3BvbnNhYmlsaWRhZGU= INGC0L7Rh9C90L4= 4KSm4KWH IHRhbnRhcw== 4Kak4Ka/4KaV 4YOV4YOY4YOT b3ZpxIc= 4oCLCg== IOCkh+CkuOClgA== 4LSZ4LWN4LSZ4LSz4LWB4LSC yZlyaW4= 0YPQvdCw REFR IGdlbmVyYXRvcnM= INCw0L3RgtC4 aGF1c2Vu IOC0qOC0v+C1vA== IGZpbmE= IM+AzrXPgc65z4M= IHRlYXNwb29u Y2hlbnQ= IFhWSQ== INix2KM= IEd1aQ== IGFycmVn IG91cm8= IOWMl+S6rOi1m+i9pnBr 4Kqm4KuA IGhvw6Bu IM6xzrrPjA== IERheXRvbg== aGFsZQ== LmNvbnN0YW50cw== 5Lqe LnJlYWRsaW5l QWRkaXRpb25hbGx5 IHZlcmxpZQ== CVo= INqp2LHYqtin 4YOm4YOV IG1hcmF2aWw= IG9udHN0YWFu IGJvbGo= 0JDRgA== dmVybw== 4LmA4Lii IHdpcmVk IEhhbm5haA== IHJpY2h0aWdl Qml0Y29pbg== IGFzc2lzdGly QW5pbWF0aW9ucw== IHBlcm5haA== S2F5 CXNlbGVjdA== IGNvdXJhbnQ= UG9wdWxhdGlvbg== IENveA== IG92bw== LsK6 LklORk8= cHJlY2hlbg== cGFyYWdyYXBo z4HOr86/z4U= IEppa2E= L2ds X25vbmU= IGNpag== IHRyaW1lc3RyZQ== 4Yo= cmVsYXRpb25zaGlw INOZ0LvQtQ== IOe7vOWQiA== Qm9s aXNodA== IOCmleCnhw== LmFyY2g= IHN1amU= eHBhdGg= 546W IOC4meC4seC4gQ== 4LSy4LS/4LSv IGFraGly IFNlaW5l IGluc3BpcmF0aW9uYWw= 4oCZbmlu LXN0cmlw IEpvaQ== KHN0ZG91dA== 2LrYp9iy IEJhbGs= 5L2T546w INC805nRgdC40LvQuA== Ym9uZA== INC30LDQstC+0LQ= 4LCw4LC/4LCV aXN0aWNh IEthdw== IG91dGxpbmVz ZXJ0aWE= INC80LXQutGD0L0= b2NpYXRlZA== IGNvbWJhdGU= 4KSc4KS5 IFfDvHI= Lm9ubG9hZA== IEJsYW5r YWNpamk= INiw2YPYsQ== IGFib2w= IHJhdGlvbg== IHB1cOG7jQ== a29tc3Rlbg== IGN1cmF0ZWQ= 4LK/4LK44LKy4LOB IO2FjA== IHDDtA== 4YOY4YOT4YOU4YOc4YOi IGxpZmVz IHByw6ljaXM= IG5hZg== amFuZHJv IHdlbGNoZXI= 8J+YjQ== 15nXnteV16k= U2Vuc2U= 5rCj INKb0LDQtg== d2lubw== TWFnZW50bw== INC00LjQt9Cw0Lk= IOCmrOCmv+CmtuCnh+Cmtw== IHZvbGxlZGlnZQ== IG1hbmRhdA== ZXNzb24= INin2LPYqtin2YY= KHNpZ24= IOCyuOCysOCzjeCylQ== 4Kyu INmI2KzbgQ== ZHJ5 dXZyZXM= U2Vzc2lvbnM= IHZpcnR1ZQ== 4Keo4Kem4Keo IG3DqWRpYXM= PSciLiQ= xI1rZQ== IGthc2k= QkVU IGt0w7NyYQ== 5Y675bm0 INmK2YLZiNmF IHJ1bmdh IO2KuA== QWNjZXB0ZWQ= IMWa b3J3YQ== IHTDpGg= IG5jaGk= X2Rvd25sb2Fk Im5hbWU= IE9wcG9ydHVuaXRpZXM= IOCuteCuvuCutA== IEdlZW4= QWxvbmc= qOyWtA== Lm1z aWxlcmlu 4YOQ4YOc4YOi IHd1eHV1 INC40YLTmQ== IGVyc2NoZQ== LWRlc3N1cw== IFVMT05H 2LPYsdin2KbZitmE 2KfZhdin 6aKc dGll IHJvemg= 0LDRgNCw0YLTmQ== INGa amFsYW4= 15XXnNeV15I= INCo0YM= 4LWN4LS44LWN IHN0YXBwZW4= 2KfZhduM IGludmU= IC8vCi8v IGfDpg== w7Nrbg== 4YCc4YCt4YCv bmlvcw== INCQ0LzQtdGA zrrOrg== IFNhY2g= IGRpc2NvdXI= IHNhbGRv INep15s= b3Nhbg== CXJlc3A= W0Ai 4K6k4K6+4K6V 0YDQsNGG 0LLQsNGC0pvQsNC9 LHJl IERvbmc= ZWxhaWRl IGluZmxhbW1hdG9yeQ== c2dlcw== IGd1ZXNzaW5n IOG6uXLhu40= IOS4sA== INC40rc= ZW5za2U= IENFTlQ= LXlvdQ== IGFkdmFuY2luZw== TG9naWNhbA== UHJvZmlsZXI= IGhlbm5l 06nQvNC2 IGFyZ3Vpbmc= aWF6 IG5haGU= IGdlbmVyYQ== X0FkanVzdG9y IEJlYXJz dmlzZQ== IGVpbnplbG5lbg== IMSR4buVaQ== IHBvcnR1Z3Vlcw== cHRv bMO2cw== IFNpZGViYXI= YWx0bw== IOWA IHdydGg= QUxJ IHplZQ== VG9waWNz IERlcHRo IGRhZHVyY2g= IGNvYmVydHVyYQ== IHBhaW5z 44Oq44Oz44Kv 2LTYp9ix2YPYqQ== 0LDQvdC00LjQtA== ZWdlcg== IGVzZnVlcnpv IHByZW1hdHVyZQ== IGh1cnRz 4Z624Z6E 0YHRjNC60L7Rlw== IHlhdw== cm9wb2xpcw== 4LGB4LCy4LCV4LGB IGl0dGk= LT5fXw== INeg15nXmA== aW3EhQ== ZW50b24= IHBlcnNvbmVz Onc= dWJhaA== YXRlZQ== IEdlb21ldHJ5 ZWZz IOCkruCliOCkguCkqOClhw== IHJlZWRz INC90LjQttC1 dXR0YWE= IGh1bGw= ZmVobA== 6Iy2 UmVzcG9uc2Vz KCcq Lm1ldHJpY3M= QWNjdXJhY3k= UmFt TmV3c2xldHRlcg== IFN0eQ== 0L/QvtGA0YI= Q0FO 4pSC IEdhbWJsaW5n IEJ1cmdlcg== IGZhY3RvcmVz IGl6eQ== IOWkp+WPkeaXtuaXtuW9qeaYrw== RmVtYWxl IHRlcmFw IGRpc3RyYWN0 IHN1cnZpdmluZw== IEJhbmdhbG9yZQ== IHJwYw== 15XXk9ep 0LHTmdGA X3NlbA== XToKCgo= 0L/QvtC9 IOCkheCkpg== 4LCH IGJyaWc= QVJQ IGNyw6htZQ== LWdlbg== 0YDRi9C/ 0LHRg9GA0LM= IHBsZWFzaW5n IGZpbm4= IHLDqXNlcnY= IHJlbW92YWJsZQ== YW5jaWVy IG1vdWxk bGl5 4KS44KWN4KSv4KS+ IGRlc3Rpbnk= 1aHWgdW21aXVrA== IFN0ZWZhbg== 4Lav4LeK X2Ry RGF0aW5n 44CCDQo= KEN1cnJlbnQ= X3RvcGlj ZW1iYQ== 2YPYqtmI2LE= INC/0L7Qu9GD0YfQtdC90LjRjw== INC60L7QvNC/0L7QvQ== R1JFU1M= INGB0LvRg9GH0LDQuQ== XENvbHVtbg== X1JFUQ== 4KSV4KWN4KSk4KS/ L3Jlc291cmNlcw== 4Kao4Kew c2hpZWxk DQ0KDQ0K 4Kaw4KeN4Ka2 0LDRgtGL0L8= bW9qYQ== 4Kq+4KqP 4KSh4KWH IOCwleCwvuCwsOCxjeCwrw== KHNwbGl0 INGC0L7QstCw 2YjZgtin2YQ= CXBhcmFt IHdpY2tlZA== IG1pc3k= 4Z+i4Z+g ZW1iYWQ= cHJvYmU= IGxhdQ== IGdlbnRsZW1hbg== ZWxvb3M= IGtsaW1h UGFyZW50cw== 16fXkw== INC80L3QvtC2 IHNlbGJlcg== KGFkYXB0ZXI= IEZhcmJlbg== IGNvbWllbg== INin2YTZhdin2YQ= IGphbsOr INmK2YE= IE1hbGk= dHJhaW5lZA== T05UQUw= IGt1dWw= IGluZm9ybWFzaQ== dWFsaQ== ZWxpbmVzcw== IOCknOClgOCkpA== IExq 0LDSm9GL0YI= IOCmruCng+CmpOCnjeCmrw== b2RhbA== IHBhcmVudGFs IHNrag== IFdpdGNo IFNlZ3VyaWRhZA== IHByYWN5 IOWkqeWkqeS4reW9qeelqOWPr+S7pQ== IEFsYw== 4Kqk4KuN4Kqk IOWkqeWkqeS4reW9qeelqOi2s+eQgw== d2Fzc2Vy INi02Kc= 5pCe IGJyZW5ndA== Lk5vcm1hbA== INeU15DXnQ== IGluY29udHI= 4LWG4LSZ4LWN4LSV IGJvbHVw dmHDp8Ojbw== IEZhY2lsaXRpZXM= INeh16TXqA== INGA0YPRhQ== LmxvbmdpdHVkZQ== IOCkreCkj+CkleCkvg== ZW1iYW5n b2JlaQ== INCg0L7RgdGB0LjRjw== cm9zaXM= IHRpbWV6b25l aXBpbmc= INin2YTYr9in IGplcnNleXM= RW50ZXJlZA== IGVyZWN0aW9u INWk1aHWgNWx IG3DrXN0 IEJleg== IGZpcmVm IFByb2Zlc3Npb25hbHM= 16LXoNeY16k= TWF0ZXI= IGJsaXZl IHNvcHI= INin2YTYqNmE2K8= YXJ0ZW1lbnQ= 4LC+4LCy4LGN4LCy4LGL IHRvZGRsZXI= IOqzsw== 4LWH4LSx4LWN4LSx cmVjZWl2ZQ== CWh0bWw= aWRlbGl0eQ== RUxMT1c= U3I= LnBpYw== W2lp IHNldHp0 IHJlcHJvZHVjdGl2ZQ== aXRhYWw= INGE0LjQuw== aXp1 dHJhdg== LnVwcGVy IHFz IHNhbW0= IHLDqWFsaXPDqQ== IHNjcm9sbGluZw== IG7DpG1saWNo TWo= LVRW 4YOQ4YOh4YOj4YOu INCz0LU= INCy0L7Qt9C90LjQutCw IHJlY3ljbGU= IGFiYw== 2YPZitmG INGC0L7Qug== INi52YTZitmD aWNhdG8= Xik= IGJ5ZQ== IMO5bg== 4LKf4LKo4LOG 4KS+4KSq4KSo 4burbmc= WFhYWFhYWFg= KG5u IGludGVycnVwdGVk LWF3 IHRvdGFsZW1lbnQ= L1w= X211bA== IHbDoW0= X1NQRUM= LkJ0bg== LcSn IGdyb3Rlcg== IGVuZHVyYW5jZQ== IGltbXVuaXR5 44K544Od dW1wZXI= UFVSRQ== 5Zyo57q/5b2x6Zmi IGRydWdl Z2hp c2VjdG9y INmF24zZhNuM IFJpY2FyZG8= IGRlZmluaXRpdmU= QU5EQVJE KGlm IG5rYQ== IGVuY29udHJhbW9z IHRzaW0= IMSR4bq5cA== 4LK+4LKk4LON4LKw QWNjZXNzaWJsZQ== IOCwruCwuQ== IOCkuOCkueCkr+Cli+Cklw== IGRydcW+ LmNvbnN0cnVjdG9y 0YjQsNGP IM+Az4nPgg== IHN0ZGlu ZWJvb2tz IFNheA== IFRPREFZ IGNvbmhlY2lkbw== IOCqheCqqOCrjeCqrw== IEluc2lkZXI= dXJvdXM= IFJPUw== INCQ0YE= IG9ybmFtZW50 IOC0ruC0suC0r+C0vuC0sw== IERlbW9uc3Ry IHNuZWFr YWRnZXQ= 4LKV4LKw4LKj b2dlbmVvdXM= 4Liq4Liz cmlkZ2U= INC90LXQtg== 4LK/4LKm4LON4LKv IOCkheCkpA== IHBhc2k= IGthcnR1 IHt9KQ== IEJlcnJ5 INC/0YDQuNC90LjQvNCw 4KS/4KSm4KWN4KSn KHJvdW5k 5pa8 4bq1 wr4= 0LrRltC8 5ZyS ZXJkZW4= Q292ZXJhZ2U= IEdlbnJl 4K6/4K6w4K+B4K6o4K+N4K6k IGdld29ubmVu 4LiL4Li1 z4bOrc+B IGNob29zZXM= IHJlYmVs 4Kef4KeH4Kaw 0L/QuNGB0LDQvdC40LU= PHNlY3Rpb24= IGnFn2xl IGJsb29t LmxpbWl0 R2lybA== IOCkrOCliOCkoOCklQ== 5peg56CB5LiN5Y2h IOGDk+GDlOGDkw== 0YTQvtC00LA= IGNvb3JkZW4= IHlha2hv Lm15YmF0aXNwbHVz IHBhc3Npb25z Lm1lbW9yeQ== IFBldHI= INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuA== a3Jpbmc= YnVyZ2Vy 44O744O744O744O7 reygnA== X0RFTEFZ 5Li76aG1 IHZvbGxl 0L3QsNC30L3QsNGH 0Y3QvNC2 L2ZpbGVz IMO2c3M= U2NyaXB0cw== IHso IE1leWVy Qmx1ZXRvb3Ro IOC0quC1iuC0sg== IMOpcXVpcGVz Z2VnZW4= 4oCM24w= KV0NCg== IGNhdXRpb3Vz RmFybQ== IHZpYWphcg== bWludA== QVNZ TGl0 INis2Yjakw== YW50ZA== IOC4peC5iOC4suC4quC4uOC4lA== IExpc2JvYQ== IHRlbnRl IExvY2F0aW9ucw== 2KfYqtmI zrvOu863zr0= dsSb INCy0L7Qt9C00LXQudGB0YLQsg== IGluZnJpbmc= CQkJICAgICA= IHNpZ25hbGluZw== 5b+r5LmQ IHRoeXJvaWQ= c3RlaA== IGlx IG1vZGVt LWNvbnRyb2xz IGNhcnJvcw== IEVhcg== INil2LU= IGtyYWo= IHNvZ2Vu IGhlYWRhY2hlcw== IFJhbmc= IOWf b3ZlbWVudA== dWJlbg== KGxibA== IHVudGVyc3TDvHR6dA== IHBpbmNo YWt1d2E= IGJlaG92 INqJ2YjZhA== IHRy4buf IGRlYmVyw61h X0NVUlJFTlQ= INil2YbZhw== IFJvY2tldA== IG9ixI0= 5b6I5aSa 4KWI4KSC4KSh IMO0bA== IGJlbmFy INi52YTYp9is Q01E IGRhdW50aW5n X3BpZA== IOGDm+GDmOGDpg== X3N1cmZhY2U= IHBpbnR1cmE= IOCkquCljeCksOCkr+Cli+Cklw== IG1pbmFuZ2th Z2FtbWE= 4KSC4KSX4KWH INC40LzQtdGC0Yw= QnVy IEJ1eno= IFN1YQ== IG9jY3VyZWQ= IGt5cw== ZGVyYWJhZA== 5LiL6Z2i 0LTQsNC90LjQtQ== RXhwaXJhdGlvbg== IG55dW1h IGJpbGxpZw== LWRlcGVuZGVudA== IHNhZGQ= 4Lij4Lix4Lia4LmA4LiH4Li04LiZ4Lia4Liy4LiX LkxhdA== IOCmquCmpg== INin2YTYr9mK2YY= IENvbXBhcmlzb24= IG1ldWI= IOq0kQ== IG1hbnVzY3JpcHQ= INC/0YDQtdGC IGNlcnRpZmljYXRpb25z INGA0LDQvQ== INit2KzYsQ== IG1laWxsZXVyZXM= IE1pZGQ= IExFR08= IHBlcnRl Ymlucw== IGxpZHQ= IFZpdGFs INC60LDQutC+ IOCyruCzgeCyguCypg== ICIoIg== IE1FTlU= 0L/Qvg== ZW5kaWRv ZmZlY3RlZA== IGZvcm1lcw== PSciKw== VUxB INGD0LvRg9GH0Yg= TWludA== IHRvcm5hZG8= IG5hdnk= IGRlc2lnbmF0aW9u INin2YTYs9i52LE= ZXhjbHVkZQ== IFBvc3Rlcg== IHZlcmxhbmc= IGVpbmdlcw== ZW1vamk= IG1hcnF1ZXM= 0LrQuNC0 L3dvcms= IENvbWlzacOzbg== w6ljaQ== IEF1c2JpbGR1bmc= TW9ubw== aW5zY2hhZnQ= 7J2065286rOg IGRlY2Vhc2Vk b21lZ2E= LXR3bw== X1NUT1JBR0U= 0ZbQvNC00ZY= 1LM= IGN1cnRhaW5z LyIsCg== 4Z+G4Z6T IGZyw7xoZXI= 54yu IE1ldGVvcg== INC+0LHQu9GL IGNvbnRhcw== IG5hZ3M= IENoYWQ= ZXJjaXNlcw== cGVyY2VudGFnZQ== 7JeQ7ISc64qU IGFjb3N0 IG1lZGljaW5hbA== IHByb2du ennFiA== INC/0LXRgNC10L8= IHRyb2lzacOobWU= Q3VzdA== IHVucHJlZGljdA== IG5vaG8= Q1JN IGNhbWluaA== X1dBSVQ= 4LCG IHB1YmxpY3M= IHV3ZQ== 5LqC5YCr PigpKTsK LWF4aXM= aWZpY2Fkb3I= cmVra2luZw== X21lbWJlcnM= IGVmZWl0b3M= LWJvcmRlcmVk 4oaQ IERlY2w= IOCmueCmv+CmuOCnh+CmrOCnhw== IGVmaWNpZW50ZQ== TUs= KHJlY2U= IGPDqWzDqA== IMSwxZ8= 4Ka+4Kam4KaV 4oCZYWJvcmQ= IGRldGFsbGU= IEVtcGVyb3I= IGh1c3Q= X2NoYXQ= a2zDpHJ1bmc= IHNvcmdlbg== RW5o aW5udA== IHVudGVyc3TDvHR6ZW4= IOS6uuWmuw== IOCwteCwv+CwoeCxgeCwpg== IOCwmuCwvuCwsg== w6FjaWE= YXJhYQ== IElncmU= bGpl IHN0ZWVy IEdJ IG1pbmhhcw== IGRldmlhdGlvbg== Umlzaw== IGNvbnZpbmNpbmc= X2Zw INGA0LDQt9Cx IHRlaGQ= cm9mZg== IERO IEhvcml6b250YWw= Lk5P 2Y7Zhg== aXBsZXM= w6Rrc2k= INiz24zZhQ== IOC4muC4o+C4tOC4qeC4seC4lw== YW5raQ== IGRpc3BhdGNoZWQ= w6F0aWw= eWxlbmU= ZXJncm91bmQ= INeU157XoQ== IHBlcmNlaXZl IFBlcnQ= TWFjcm8= IENtZA== INC60L7RmNC4 IFRpZQ== b21pZG91 YXBwb2ludG1lbnQ= ZGF0dW0= INGC0Y0= IHlhcmk= 2KfZhNix IHZlcnNhdGlsaXR5 ICAgICANCg== Y2x1c2lvbnM= YWR2YW5jZQ== IEtyZWRpdA== INin2YbZiNin2Lk= LldISVRF 0LvRg9Cw0YLQsA== 6JKZ INC00LXQudGW0L0= INCy0LXQsQ== bWlkdA== IHBhZ2g= 0YPQvNKz0YPRgNC40Lg= IGNhZGFz IGFkbWluaXN0cmFjacOzbg== IENVU1RPTQ== dWVsYXM= 4KeB4Kac Jiw= IGN1c2hpb25z IOCksuCkvuCkhw== YW1pbmVu 4bqnbQ== IM68z4zOvc6/ IG5lemE= IGFyYXc= INmI2oM= IGNyYXNoZWQ= IHJ1Z2dlZA== IGRpZmZlcnM= VGVuYW50 INmI2KfYsdiv Rm9v 1Y8= 4LKw4LOC RmFi cOG7jWzhu40= 1bbVpdaA1bY= IHNpbGhvdWV0dGU= IGVzcHJlc3Nv 4KSk4KWN4KSk4KS+ IGJvdXdlbg== ZXlheQ== IOCkhuCkq+CljeCkqOCliw== cGVuZw== IG9wb3M= IGdyaXM= c3R2w60= emlvbg== IEJyYWRsZXk= IG3DoWw= 772X b2RpdW0= IM6azrE= cmVraw== IOC0ruC0ow== INGB0LDQvNGL0LU= ZWxpcw== IHRyYWlsZXJz IGNvbWV0 INC+0YDQs9Cw0L3QuNC30LA= IGFsbGdlbWU= IGxpdGhpdW0= IE5VTUJFUg== 0YDQsNC90Lg= LmJhb21pZG91 0YDRi9C5 z4PPhM6/ IGRlaW5lbg== 7Ja8 4KuL4KqP IHNwZWNpYWxz aXhlbg== IEF0aGxldGlj 1avVttWh1a8= 2YbYp9iz LmZvcmU= IHNodA== IEt1cw== CSAgICAK IHVpdGVy aWVuYQ== 4LK/4LK44LK/4LKm4LKw4LOB ZWJhY2s= IHZhbGw= IHNpbWlsYXJpdHk= IE1pbmlzdHI= X2NvdXJzZQ== 0LPRg9C3 IFBpcGVsaW5l IG1lY2hhbmlj IOCkueCksg== IG1vZWl0ZQ== IHBvZGF0 IHNlbGVuaXVt 5ou/5aSn IGNsYXNzaWZpZXI= IGVya2VubmVu QXdhaXQ= ZmxpZXM= IEhvbGRpbmdz LXRoZW1l IHZlxL4= IHbDoXM= IHJldW5pw7Nu INqv2LE= X1BPU0lUSU9O T2k= IGhhc2F0dHI= 5ZSv IGFzY2VuZGluZw== ZWxvcw== 4KuH4Kql4KuA IHRlcnJpdG9yaWFs IGltcHJvcGVy IG1uaWU= LEk= IHNlbGVjaW9u IHF1aWVyZW4= IEZsdQ== IHNuZA== QmxvY2tseQ== INmF24c= zrPPgc6xz4Y= cGllemE= IHNwZWN1bGF0aW9u INGB0LXRgNGM0LXQtw== U2VndWU= aXRhcmlv IGTDqXI= LmFp YXZ1dA== IGdlYmV1cnQ= cXVlbGE= 4LiU4LmM IERhY2g= X3w= 0L/QsNC90LjRjw== INOp0YA= a2Vubg== IGFncmVlaW5n 4KSH4KSo W3Bvc2l0aW9u IGNvbnRpbnVlcg== IGZvcmdpdmVuZXNz Z3VuYQ== IHRyZW5kaW5n IGFwbGlrYXNp IG1vZGlmaWNhcg== IFZpYnI= IOCmqOCmv+Cmr+CmvA== X3JlZGlyZWN0 INiz2YjYrw== bMOh aWZpa2FzaQ== cXFh aWVtZQ== 57KX IG5hxaFl LnNwYXJr IEh1Z2hlcw== IGZvY28= INW21bo= IE1vbnRnb21lcnk= 1ofVuNaA X2ZhY2U= w7xyZW4= aW5hbQ== aWlk KWdldA== IFdvbw== QUNURVI= 5Y+w5rm+ IFZX IGN1bXVsYXRpdmU= eWVhcnM= bGVnZ2Vu Ojoq INiq2LnZhdmE IHByZWRz bGVuZW4= QWxl 44OD44Kw IGV4ZXJjaXNpbmc= IOCkuOCkguCkluCljeCkr+Ckvg== IOmmlg== IHTDqA== INin2YTYuA== XSc= IOGDm+GDkOGDqA== IHTDqm4= IOGDoOGDkOGDm+GDk+GDlOGDnOGDmOGDm+GDlA== INC30LjRjw== IOC0teC0v+C0tg== INGC0L7RgNC8 4Ka+4Kay4KeH4Kaw INC10LrQtdC9 IOCkieCkrg== bWV0cmljcw== z4XPhM+M 77yM5bCG IGFjYWTDqW0= INGB0YvQvQ== IFJvbWFucw== ZW50aWVz 2obbjA== IGNvbXBsw6h0ZQ== IHdi zrrOuQ== YXRseQ== cGxhbmVz Omxlbmd0aA== IGVuaXlhbg== IFRvcnJlcw== LnJj dHPDpQ== IGRlc3Ryb3lpbmc= VE9S IG5wYw== IGdlbG9vZg== INiz2KfYrtiq aW5jZXRvbg== 4Kay4KeN4Kay IOC0huC0puC1jeC0rw== cm9wZQ== 4oCZb2Zm IGxpa2luZw== IENvbmN1cnJlbnQ= aWFyaXNt 5Yqo5ryr J2FpZGU= X2ZlZQ== IGRlY2tz 4YOY4YOh4YOj4YOk INC30L7RgA== IGFidXM= 5Ly0 INC90LDRgdGC0YDQvg== IGZvbGRlZA== LkpvYg== IGluaGVyaXRhbmNl TWFya3Vw 5pGH X01FVA== 1bPVodW8 X2VuYw== L0dldHR5 IOu0 4K+I4K6v4K+I dXlv INCz0LDRgNCw IGtpdHU= IEFzc2V0cw== IG9mZXJlY2Vy IOCmn+CnjeCmsA== IGZpbG1lcg== IFN3YW4= IFBORw== 6Kqt44KA QXfhu41u IOCmpOCniA== LnlhbWw= IGh5cGU= aGFpZGg= IE1hcnRoYQ== dXR1cg== c3TDtg== IGV4ZWN1dGFibGU= IHZlcmRpY3Q= IHNhYWRh IOCknOCktQ== Q29tcGxl IHVwaG9s IHRlYWNoaW5ncw== IHZvbGF0aWxpdHk= IOCmheCmsOCnjeCmpQ== amVuZQ== IHNlem9u RkFMU0U= IOCkrOCliQ== kOuLpA== 4KWB4KSu4KS+4KSw LS0tLS0tLS0tLS0K cHJvag== 5aSn56We5o6o6I2Q IGF3YWs= 5L2T6IKy5b2p56Wo IGN1aXI= INeg16c= IOGDkOGDlg== IOuMgO2RnA== IGNvbnN0cnVjdGluZw== LUZyZWU= dXJ6 INi02LnYqA== Tm90aWZpZXI= U2Vnw7pu J2VmZg== IOCksOCkv+Ckqg== IGZpbmFuY2nDq2xl LWRlZ3JlZQ== IOyEuOqzhA== SW1wYWN0 IHTJmXLJmQ== IHDEgXI= IFRSZXN1bHQ= INWv1bXVodW21oQ= KGNvbW1lbnQ= LmxpbmVhcg== INC/0YDQvtC40LfQstC+0LTRgdGC0LLQsA== 4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4Lif4Lij4Li1 cmxpZw== cnlk z4PPjM+EzrU= YW5zaGlw IEJq aGM= IENhcm9saW5l b3RlY2g= b3JjYQ== 4Kq44Kqw IGfDtnLDvA== IOGDnuGDmOGDoOGDleGDlOGDmuGDmA== IHVubGU= 4Z6f4Z+L IOCmrOCnh+CmtuCmvw== IHhpZA== dmFj IHBlcmZ1bWU= IC8vfQo= IEfDtg== 5bmz5pa5 IGZhaWJsZQ== IFBvbGl0aWs= PFR5cGU= IGludmFzaXZl IGxlbmVp INC90YDQsNCy 0L7QvdC+ IGtlbWJhbGk= IOWkqeWkqeS4reW9qeelqOS4reWkp+Wllg== dmVyYmFuZA== YXRhaXJl IHBvbGE= IGVueg== ZGR5 INC00LDQuQ== YWdhbWl0 IEN1cnNv IHLDqWZsZXg= IOC4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC4n+C4o+C4tQ== IFNvbWFsaWxhbmQ= IOCmpOCmvuCmgeCmsA== CU1lc3NhZ2U= KEFwcGxpY2F0aW9u 16jXlA== INin2YTZhdix2YPYsg== cGRv IGNoYXNpbmc= IExC 2KrZiNmG IOCkpOCliOCkr+CkvuCksA== xZ0= IGNyaXM= ZGVhbA== 572R5piT 0LDRgdGL0L0= IGJsdWV0b290aA== SHlk LeCkuA== IHV0YW1h IHdhcnQ= INGC0LDSmw== IFBvcHVsYXRpb24= QEpzb24= T3JkaW5hbA== IFBMRUFTRQ== IGZlYw== 2Kzavg== VVU= IGxvag== IFN1Y2Nlc3NmdWw= dXR0Z2FydA== c3ZpbGxl c2lnbmF0dXJl IGF0dHJhY3Rpbmc= IG5pY2tlbA== IGNpdGF0aW9ucw== IGRlZmVzYQ== IHByb25vdW5jZWQ= IGtkecW+ IGhpdHQ= INC90LDQvNGD0LQ= INCY0L3RgtC10YA= ICg6 IOCmleCnjeCmsA== IGNvbnNvbGlkYXRpb24= 2b7Ysw== W2NvbA== INij2LPYudin2LE= QWx0ZXI= IEdlYsOk Vkc= TE9Z LnJlYWRlcg== U2hhcmVz IFNldQ== INCe0Yg= KGZpZw== IGJ3ZQ== IFTDpA== INiq2YLZiNmF IENvZ24= IEdyZWVucw== LlNvcnQ= 4KSt4KS+4KSw IEJlbmdhbA== LkJvb2s= INCy0YHRjg== 4KeH4Kab4Ka/4Kay4KeH4Kao IOmmmea4r+WFreWQiOW9qQ== IHN0YWNrZWQ= IE1lbGlzc2E= INGF0LjQvA== IG1pw6lyY29sZXM= IHJlbmFs INin2pPZhw== IGFsYW5n INCx0Y7QtNC20LXRgg== INCy0YHQvw== IGRlc3RhY2Fy IOCksOCli+CknA== IFJlcGVhdA== INiz2LnZiNiv X2ZvcndhcmQ= IGZ5ZGQ= cGFyZW5jeQ== IGNoaWNhcw== 7J6I64qU d2Fzc2Vu 4Kq+4KqC4Kqk IG9icmF6 IHbFoWFr IGNhxYI= 4KSs4KWN4KSm X25lZw== 44Gd44Gu5LuW INCy0LjQtNCw IGdldGF0dHI= IHByb2NlZWRpbmc= Lm1hc2s= IGxvd2VyaW5n SVNIRUQ= IGFrYWRlbQ== QnVk IGxpbmRh IHBlcmlvZGljYWxseQ== IHRyYW5zZmVycmluZw== IGxhZGVu IGhvbGxvdw== Jyl9 J2Fubg== IFByZWlzZQ== UEFUQ0g= c3Np KCIuLi8uLi8= IHTFmQ== UHJlc3N1cmU= IG1lbm5lc2tlcg== IEVxdWl0eQ== IGNoZWNrZXI= QXPDrQ== IOWHug== T0xT 5p2o IHBlZGFnb2c= aXRhbmRv 4LK+4LKf4LKV LnN0cmZ0aW1l IHZvaWNp IFBhdg== IG1hdHJpY2Vz aGVyZXM= IGNoYXNzaXM= INGB0L7QtdC00LjQvQ== IGJsZW5kcw== b25lcnM= 1bjWgtW21oQ= IGFkYXB0aXZl aWJpcg== IOCkqOCkv+CksA== IHNwb25zb3JzaGlw ID8/Pw== IOGAlg== IExvZ2Fu IENoZWVzZQ== xLFsxLFy IHN0dWRlbnRlbg== dmVlZG9y INmB2KrYrQ== X251bWVyaWM= IGlycmF0dGk= IOCkmOCkn+CkqOCkvg== IFNUUklORw== 5Li75LmJ IHBvcHBlZA== IFRpamRlbnM= dW50aWw= IGNhbWFy bG9jYXRpb25z cHJlaGVuc2l2ZQ== IEZyYW5jbw== INGC0q/Qtw== QVRIRVI= IGZvcmVmcm9udA== IGFkb3B0aW5n LmFmdGVy aXJ0ZWVu IHZhbnM= IOGDl+GDkOGDnOGDkOGDmw== IG92ZXJsb2Fk IGRpc3J1cHRpb24= IGZpZ3VyaW5n IHRlbnNpb25z 16jXmQ== IHVuaWZpZWQ= IGxsYW1hZGE= IHNlc3VhaQ== CWJvZHk= CSAgICAgICAgICAgICAgICAgICA= 0LLQsNGe IHRlbnVyZQ== TcOhcw== 0LXQv9C10YDRjA== INCw0YY= 5rua LmF1dGhlbnRpY2F0aW9u IFRoaW5raW5n IG5pa3M= ICjCqw== INGB0LXQuw== IHNhbmM= INGB0q/RgA== IEFtYmllbnRl CQkKCg== Z2VvbQ== IEFCT1VU IOCksuCkl+CkreCklw== dm9t bGFyxLFuZGE= IGRhdWc= dmlvbA== 6ZKi IGJ1bGx5aW5n UnU= INGG0LLQtdGC0LA= LW5vdGNo IOCuquCvhuCusA== IEVpcw== 4LGB4LCk4LGN4LC1 IGNvbnNlcXVlbnRseQ== INqG2YjZhg== IOCkheCkp+Ckv+CkleCkvuCksA== 64uI6rmM INek1r/Xldef 4Kew4Kak IHBvdXJlZA== KFNldA== IHVucGxlYXNhbnQ= IENoZXNz 0LXRgNC+ U2NpZW5jZQ== 15XXnNeV16o= 6Led X1NUUlVDVA== IG9udW4= INCx0LjQu9C4 Y2F0ZQ== bGVuaQ== IGTDqWNsYXLDqQ== w6RtcA== IGF6aQ== QUxUSA== INiz2YQ= LXRhYnM= LmZpbmFs YXRlaw== b3Vl IHBvcHM= Lmxvb2t1cA== CUludGVnZXI= IHNveg== IGVpdXM= IEx5bm4= XHM= IGdwcw== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 6Lez IGludGVudGlvbmFsbHk= IGRhbHM= INiv2LPYqtqv2KfZhw== IG3DpG5n c2Vycw== INin2Ks= 0LzQtdC6 PT09PT09PT09PT0= 4KWA4KSm QmlsbGluZw== 55eH INC80LjQu9C70LjQvtC9 LWRpcmU= L01N 7J6h IGPDug== UE9QVUxBUg== IOGDqOGDlOGDruGDlQ== IGtpbmdz VHJhdmVycw== IGPhu6k= IFNlbGxpbmc= 6bih IGFuZ2xhaXM= IGt1bm5h d2ls aWVsbGVpY2h0 INmK2YjYrNiv dW1ueWE= IFJlZGlzdHJpYnV0aW9u bW9uZ29kYg== a2V0w7h5 QHB5dGVzdA== QXJtb3I= cGVyaW1lbnQ= IFBhdGllbnRlbg== IGNvdW50ZXJwYXJ0cw== IEplbm55 IExlb25hcmQ= PWl0ZW0= IFplbnQ= IGvDq3Q= 5a+4 ZnJhZw== IGNlc3M= IGJla2VuZGU= IGNyw610aWNh IHRlYW1tYXRlcw== IHZlcm9vcg== 4K6V4K6w IERldmls YXJtZW4= 4KWN4KSv4KWL 0LjRiNGM INmF2LPZhNmF2KfZhg== IG1rZGly INC40L3RhNC+0YDQvNCw0YbQuNGP IGdwaW8= IM6l aXNzYW11dA== QVlPVVQ= OgovLwovLw== IOa2 Y29tcGlsZWQ= 4KSu4KSo IOGDnuGDmOGDoOGDleGDlOGDmg== 4oCi4oCi IExBTkdVQUdF 4KWN4KSr cmVpc2U= 7Lap bGVkbw== ZWR0 RW1pdA== IE1ldHM= ZmFuZ2Vu Yml6 IEN1YmU= IHZpY3Rvcmlh IHByb2FjdGl2ZQ== YWtj IGPDoW1hcmE= IHPDqWN1bG8= IG1lbWJyb3M= IGNvbXBsZXhlcw== IFNwZWNpZmljYWxseQ== SUNQ IOCmpOCmvuCmleCnhw== IENBVA== SEc= IE1vY2tpdG8= LmVsYXN0aWNzZWFyY2g= aXRzaWFx IHNjaGw= IFF1ZW0= Y29tbWE= INGB0LvQuNGI0LrQvtC8 IOC4l+C4lOC4peC4reC4h+C5g+C4iuC5ieC4n+C4o+C4tQ== IHVjeg== dW5jYW4= IE1hcmtldHBsYWNl IHdpdHRl IOS8iuS6ug== 0Y7RhtGG0LA= Z2Vl IGbDunRib2w= YWZpbg== IEtlcw== UGVyc2lzdA== 4KqC4Kqf dWhrYW4= INec15w= w7RuaWE= IG11bGFp IEZhYnI= INCQ0LvQtQ== IGRpc2NvdXJzZQ== IFBvc3NpYmxl b3NoaQ== IOCyuOCysA== IEpvcm4= IGNoZWF0aW5n IOGDkOGDmA== KGRz VHJhaXRz IEJ1aw== 0L7RgdC60L7Qsg== Q2F0Y2g= Iil9Cg== INC/0ZY= IGRhcmlwYWRh cmVmbGVjdA== LnBt IG9sdHJl INmF2K7YqtmE2YHYqQ== IE1hcmNvcw== 0LjRgdC6 6L6F KGNvbnQ= IHJlc2lkZW5jeQ== IENvY28= LW5pZ2h0 IGJhbmNvcw== INCy0LjRgNGD0YE= SG9saWRheQ== IHVpdGdldm9lcmQ= INeQ16DXl9eg15U= RWxldg== LmFycg== IGVzaQ== IGRvc2lz IOGDl+GDkeGDmOGDmuGDmOGDoQ== IG1hdGNobWFraW5n IG5vbWJyZXM= INCQ0YU= IFBlcnRo IHJm 4LSk4LWN4LSk4LS/4LSo xaFrZQ== U1NG anRl IGFycm93cw== INC30L3QsNGH0LjRgg== IGdlw6dpcg== IEFyaXN0 INGE0L7RgNC80Ys= IHJlZ2VuZXI= IG9ybmFtZW50cw== LnVuaXF1ZQ== a2ljaA== 6b6E IGVycmVpY2h0 dW5pbg== 2YXbgQ== IOGDm+GDkOGDpg== c3ByaXRl aW5lbm8= IG1hZ2FzaW4= IFNjcmlwdHVyZQ== IGdyZW4= IFVubw== 4Ka/4Kaf4Ka/ 77u/Ly8= IEhvcGtpbnM= ZW5kaXI= 0LTQsNGI IM67z4zOsw== X1NFUEFSQVRPUg== IFJlc3B1Ymw= IGNvbGxlY3Rz IEhUQw== IGVxdWl2 cmF0cw== bWFpbHRv IG5pbnRo IGVkaWZpY2lv QW1lbml0aWVz IOC0reC0vuC0lw== IG11c3Vs YWxhbmc= IHLDqWbDqXJlbmNl IHBsYXM= IGluc2lzdGVk 4Ys= c2NhbGFy 5rWm ZGFnZW4= IENBU0U= 6LSf6LSj IHVpbnRwdHI= ZWxhcg== IGNoZWdh IG51cnNlcnk= IHp1c2FtbQ== X1NUT1A= IAogICAgCg== IHBoZW5vbWVuYQ== IGNvbnRlc3Rz IOyXrOufrA== INCy0LvQsNC0 2LfYp9mC 4YOg4YOU4YOR4YOY INW91aHVsNW01aHVtg== 4YOU4YOb4YOQ IGdyZWV0ZWQ= IGxvY2F1eA== OiR7 IOCwueCxgOCwsOCxiw== KGFyZ2M= IGRldGVjdGl2ZQ== 5aWI X3Nt em1hdA== cXVhbnRv 44O744O744O7Cgo= INCy0L7RgdGB0YLQsNC90L7Qsg== 4Ki2 5byf U3VibWlzc2lvbg== INee15nXkw== IERlbmdhbg== IGFubm9u cHJlbQ== IGVudHNjaGVpZGVu X01BSU4= IGFyZ3VhYmx5 IG5vdXZlbA== LkNI b3fEhQ== IERhZg== IENoYW1waW9uc2hpcHM= 4KWD4KSk4KS/ 5Lit5aWW5b2p56Wo IHV0aWxpemFkb3M= IG5qZWdvdg== LmF4aXM= 4LGN4LCv4LCC IEJ1ZGRoYQ== IGVudHc= X2FnZQ== IFJvdXRlZA== X3Bl 4LK/4LKn 4LC/4LCy4LGN 4Kq/4Kqq IGluc3RpdHVjaW9uZXM= INC+0LHQvdCw0YDRg9C2 IFdhcmVob3VzZQ== IEtyYQ== IEJlZ2lubg== IG1vbGw= 2LHYp9it24w= 2bnYsw== IERlcHVpcw== 7KI= IMSMZQ== Ky4= 16fXqNeU c3RlbQ== aXp3YQ== T05B INin24zYrNin2K8= INCj0Lg= INGC0LXQvQ== IGZhbGxl 4Lin4LmI IGNvZWZmaWNpZW50cw== QVhC IEV4cGVyaW1lbnQ= IFRpYW4= IGNvbm9z aWNhY2nDs24= IGplc3pjemU= LkNvbXBhcmU= 5rWP6KeI 1aHVutWh1b8= IGNlcGVuZGFudA== aGI= IOCkuOCkguCkrw== X0VE IOCosuCoiA== IHZvZWxlbg== 4LK/4LK44LK/4LKm4LOG L3RvcA== IHBvdXJzdQ== 2KfYudix cmVrdA== IOuyoA== IGzDpnI= IGlsdW1pbg== IERJU1Q= IEhlYXRo IOOBrg== CVRoZQ== Y2hhbm5lbHM= IOC0heC0sQ== 0L7QudC00LXRgg== 4oCN4KSv INC90LXRgA== X1VOS05PV04= eXnJmXQ= IGJ5xYI= IHJlcGFydA== a29kZQ== IGVyZm9sZ3Q= SW5kdXN0cnk= 6riw7JeQ INi02K/Zhg== IG1heGltYWxl 4KWc4KS+ KGZldGNo IOCmquCmsOCnjeCmr+CmqOCnjeCmpA== Q0FTRQ== IOGDkuGDkOGDk+GDkOGDrA== IGlsYWF0 IERH IHLDocOw IGl0aW5lcmFyeQ== UG9saWNpZXM= IOC4iOC4s+C4geC4seC4lA== 0L7QutCw0Lc= IHBhaW50cw== U3Ryb25n 2q/blQ== 0LXQtNC10L3QuNGP ZXN0cm9z IMOpbGVjdHJpcXVl INCw0LrRgtGD c2NyaWJlcnM= UG9ydGZvbGlv IFZpZWxl 0YDRjQ== w7xuc3RsZXI= IFR3ZW50eQ== IFNpbXVsYXRpb24= 4Lij4Lix4LiQ INC/0L7RgdC10YI= 4K6y4K6u4K+N TWV0YWw= IGNvbXB1dGF0aW9u Im5ldA== IFJlbW92YWw= IGdvw7t0 IHBvdHJl X0ND IEhvbGRlcg== IEVsZWt0cg== ZW5zY2h1dHo= IGJsZXNzaW5ncw== IGRpc3RyaWJ1dGlvbnM= IHBpbG90cw== IGNvbXB1dGF0aW9uYWw= dXJ1cw== LmRldA== IENoaWxkcmVuJ3M= 44Gn44GZ44GM Zm9yZXN0 IGludGVsZWN0 6Ziz5Y6/ INC705k= Y2hpbg== INiq2YjYs9i3 56m0 INqG24zZhg== IExpdQ== IHRyYWdlbg== 2LbYp9mG IOCkpuClh+CkpOClhw== KGluc3Q= IOCmsOCnnw== IGV0ZQ== IFBhcnRpY2lwYW50cw== SHU= IHN0cnVrdA== IHBoeQ== aW1lbnRl KGhhbmRsZXI= IG11c2hyb29tcw== R3JhdGlz T1JJWk9OVEFM X3NlZWQ= aW9sb2d5 IGVuZHBvaW50cw== INW/1aHWgNWr 4YOY4YOU4YOg4YOY 5pep54K5 IHZvb3JiZXJl IGNvbnN1bWlkb3Jlcw== IEtlZXBpbmc= Jyk7CgoK TGVzc29u IHZlbmM= IHJldGFpbmluZw== b210 bXVsdGlwbGU= YmVjaw== IG1lbGRlbg== IOG7qW5n KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= IOq0gOumrA== 4YCZ4YC5 INmE2KfYsw== IEV0aGlvcGlh 4KS44KS+4KSv IEVkdWFyZG8= IFRzaA== dXJsaWpr dmVyc2Vk IGdyYXR1aXRlbWVudA== 4LC+4LCW X0ZPTERFUg== IGxvY2tzbWl0aA== IOCqnOCrgQ== KSktPg== IHRlcnJvcmlzdHM= LXJhdGVk 0YDQsNC00Lg= IGNvb3BlcmF0aXZl R3JhbnRlZA== IFNrcg== IEFyZWFz 65Cp64uI64uk bGVpc3R1bmdlbg== IG1lbGhvcmFy IHZvbGd0 IGdld2lubmVu LXBhcnNlcg== IERhbmE= 77y/6Imy IGRpc2NyZXRl IGJ1ZmZlcmVk IGNsYW1w w73DpA== IEVORw== aXp6ZXM= IOCkheCkqOClgeCkrQ== IHNwb2tlc3BlcnNvbg== VUJF IOGDmOGDoeGDlA== QWR1bHQ= IFBhdHJpb3Rz LmludG8= IGNvbW1pdHRpbmc= IMOpdG8= IT0i IHNlY29uZG8= IFN3YXA= IHByb2N1cmVtZW50 IOGDkuGDkOGDm+GDneGDqg== INC90LjQutC+0LPQtNCw 2K3YqA== INiv2YE= aXRhdGlvbnM= JHJvdw== aXJlYW5u INmI2Lo= 2LLZitip X0ZpbGU= IHB1cHBlcg== IOWoseS5kA== IGRlcHRocw== IHBlbMOtY3VsYXM= a3Rlbg== IFhJ IG3DqWRp SmFy IGRpYWdub3N0 KGluaXQ= INGA0LXQvw== IHdhcnJpb3I= IG9yZ2Fz Y2Fubm90 4YOd4YOQ IOCwleCxjeCwsA== IEZvdW5kZXI= IE9ucw== IOCwsOCwvuCwt+CxjeCwn+CxjeCwsA== aWUncw== IHJhdXM= 4Kaj4Ka+ IG5pY290aW5l INC90LjRiA== IHZhcml0 77yM5aSn IFVtcw== KGxs 1oDVvw== IO+s INC/0LXRgNGB0L7QvQ== IHNpbGw= aXRlaXRz IOCqsOCri+CqnA== KE51bWJlcg== IGNsZWFuc2luZw== InM= IHBhcmFy IHLDtg== IOGDk+GDkOGDo+GD IHR1bW9ycw== c2ljaHQ= IG1vc3F1aXRv IOCqquCqvuCquOCrhw== c3R1ZGVudHM= 4LKm4LKy IGVzcXVlcg== RElW 5LiN5Y+v 55CG6K66 X3BheWxvYWQ= 0YHQtdC9 IOGAhg== aW1hbmE= IFJlbmF1bHQ= IHBlaQ== IGVhcnJpbmdz IHVuaGVhbHRoeQ== KHZhbGlk 6ZqQ INW01bc= KCIi INGB0LLQuNC0 ZWZmaWNpZW50 IC8vLy8= IGtr IFJFRg== IHlvdW5nc3RlcnM= IGFsdG9z IHNoZXI= Um9k IFBpZXQ= IFN0YXJidWNrcw== IEhFUg== LXNtYWxs IOCuteCuqOCvjeCupA== cHJlc3N1cmU= RGVzaWduZXI= OmhvdmVy K2I= IGVudmlz IGZyaXQ= bcSb IGVmZm9ydGxlc3NseQ== 0Y/QtdC8 IGFsdW5v IOCksuCkvuCkrQ== IEFtYmVy IHBhbm5l IOCmrOCnsA== 0LjQsdCw0YjRjNGA0LA= Q29uZmxpY3Q= IEVJRg== 2KXYsNin 16jXoQ== IGN1ZXN0acOzbg== endpc2NoZW4= IHByb3ZpbmNlcw== QmVuY2g= 6K+K IFNlcnZpY2lv 2KfZhNmF2Yo= LWRlc3NvdXM= IOGDoeGDkOGDkg== IFBPV0VS 77yK77yK IEZsYWdz IOCksuCkleCljeCktw== IHLDqWQ= IEZsb3lk Q0VE IGdseXBo INi02YjbkA== QXdz IHJlZmluZQ== Q2Vz w6lyY2l0bw== aW50YWg= IFByb2NlZHVyZQ== IHRyb3V2ZXJleg== QXRs IGV4Y2x1ZGluZw== IGFsZg== IGludGVyZXNlcw== IOC5geC4leC5iA== IHRlbXU= IG9kbm9z IHN1ZcOxbw== bnRpbWU= IHBlcnNvbm5hZ2Vz 4oCL4Z6a4Z4= dW56 INin2YTZgdix2YrZgg== IEFuZ3N0 IHJlZ3VsYXRvcnM= INC/0YvRgg== IHJuZw== IEZsZXhpYmxl IFJw b3V0bGluZQ== 0YXTqdOp0YA= aGRy IGR5c3Q= IHByZXN0aWc= LmZyZWU= IFNpcw== IOC4nOC4ueC5iQ== INmI2KfZhNuM 2K7Ytw== IHRhcGVz 2YjZhduM X25ld3M= IHByb3Rlw6fDo28= 6Ii5 LlVuZGVm dWdlcg== IEV4ZWM= 0KHQvg== IENvbXB1dGluZw== IOuEpA== IFJlY29tbWVuZGVk IEdyYXNz 4KS14KWN4KSv INGB0L/QuNGB0L7Qug== 4LK/4LKv4LKo4LON4LKo4LOB LnBz INeZ15XXkw== LlB1c2g= IFdyaXRlcnM= IGvDtm5udGVu X0dFTkVSSUM= IFBDQg== IHRyYXR0 YsSb dXpp IOCkl+ClgeCksA== INGI0LDQsw== 4KSw4KS+4KSs IGNsaW1hdA== IGZ1bmRhbWVudGFscw== RXN0aW1hdGVk cmFpc2Vz RGVwcmVjYXRlZA== CXJlYWQ= IOC0uOC0v+C0qOC0v+C0rg== X1BBUkFNRVRFUg== IGdsZWljaHplaXRpZw== IEdsZWljaA== 0LTRgA== 4LKz4LOB IHN1cHJlbWU= X0hJR0g= 4Kaq4KeN4Kak IFRyYWNrZXI= IM6czrU= INW41oLVstWy IOC4iOC4suC4gQ== INWh1oDVpNWl1bY= 6YKm IGFmb3Jl IGF3YWl0aW5n 4YCB4YC6 IGJlbno= IGFlcm8= IO2VqQ== IHNsZXB0 IHN0aWo= w6Jucw== IHJ1aW5z LXRhZw== IHRlbGVjb20= b3JwdGlvbg== IGNoYW1h KioqKioqKg== INC00LXQvdC10LM= IGNvbWJpbmE= 4oCZYWlkZQ== IGZoZQ== IG7DoW0= IERhbmlzaA== IOCmhuCmquCmqOCmvuCmsA== 0L7QvdCw0LQ= IElL IG1hZ2FhbGFkYQ== IHbDsw== IE1SSQ== IHpnb2Q= 5b2p57uP5b2p56Wo 4KWc4KWH VXRm IGdla29tZW4= aWJ3YQ== IEFybm9sZA== 2LnYttin2KE= LlNpZ24= INCg0L7RgdGB0LjQudGB0LrQvtC5 SlNPTkFycmF5 4LOA4LKk 4LKw4LK/4LKX4LOG RG9jdW1lbnRv INS11b4= IGTDqXRhaWxz Q29tcHJh IGVtYW4= IHByZWNlZGluZw== 4LSV4LWN4LSf Y2xpYw== IGzhuqdu Z3JhcGhxbA== IOyJ IGF1bWVudGE= IHRoxrDGoW5n Y29tb2Q= INeg16I= 5rOB YWR6aXJ3YQ== IGludmxvZWQ= w7xzc2U= Lk5PTkU= w6R0dGVy IHsq 4KS/4KSV4KWL CQkJCgkJCQo= IENoZXN0 IGVudHNjaGVpZA== INWl1oDVr9W41oI= 5qCq xaF0ZW4= IEF1Y3Rpb24= IOCkruCkv+CksuClhw== IHRyaXVu IHNlbnNpYmls IOGDoeGDkOGDruGDlOGDmuGDm+GDrOGDmOGDpA== INeQ16E= IGhhYmxh IGNyZWE= 4oCcSW4= IGhhbmRlbA== IEJlcms= dWViYQ== IHRyaWJ1dA== IOCqn+Crhw== IOCmquCnjeCmsOCmleCmvuCmtg== IHZlcnNlcw== SU9VUw== 7Yq8 X3dvcmxk 4YOQ4YOh4YOX4YOQ4YOc IFtdOw0K 4LKw4LON4LK2 KHZlcnNpb24= dGhlbQ== IOCyl+Czhg== IFByYXhpcw== X1BST0ZJTEU= INGB0LjRgtGD0LDRhtC40Lg= 4LWG4LSk4LWN4LSk INGH0LDRgA== IFNoYXJpbmc= IOacqg== IFRlYXRybw== IEFuZHLDqQ== IEJhdHRlcg== IGVtcGhhc2l6ZQ== ID48 aWVuY3k= 0L7RgNC90L4= bWFzxLFuYQ== aW5mb3Jt IG5pbmk= IHdvdmVu IE1lc3Np X251bWJlcnM= 4YOv4YOQ4YOu 4Kmx4KiW IGVucmVnaXN0cg== IGxlbmE= IHBlcmZlY3Rl IHNwbGl0cw== INGA0L7Qug== IHJlY2FsbGVk IHNlY2hz 5a6e5pa9 IGJyZWFkdGg= IGF0b3A= SGlnaGxpZ2h0cw== IEdhcmPDrWE= IHZlcmJldGVyZW4= IEJsb2NrY2hhaW4= IEFnZW50cw== IGNoaWVu z4TOt8+Dzrc= IHR6 aXRzaQ== IHJhZ2F6 cHJpdmFjeQ== IOC0leC0nw== 0LvQvtCx IGtpbm8= IOCqreCqsA== IGt1bXA= LXN5c3RlbQ== IGRpcmV0YW1lbnRl IOCkleCksOCko+CljeCkrw== IEdJRg== IGluc3RhbGFjacOzbg== INCx0YvRng== IOC0teC1jeC0r+C0leC1jeC0pA== b3Zhbmph IHN0YWtlcw== UmVhbG0= IGzDtmc= IFNvbmlj IOCquOCqsOCqleCqvuCqsA== IOu4lA== b2NhdXN0 IGRhcmxl eWFz JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSU= Rm9sbG93ZXJz IHByb2JhYmls 5b6u5L+h576k 66C4 IGFkcmVuYWw= 4LWA4LSv IGNsYXNzaXF1ZQ== IOaLiQ== 77yg44GK6IW5 INit2K/Zitir IGh1YQ== IHRlcm1pbmU= LnBhdHRlcm4= YXlhaA== UExBQ0U= IG5lZ2F0aXZlbHk= INW/1aXVstWl1a8= IHNvb3M= IGF1ZnM= IGV4Y2g= INiq2LnYr9in2K8= V2lraQ== INiv24zYrw== CWV4cGVjdGVk Lkludm9rZQ== ZmZlZQ== KQoKLw== LWZvY3VzZWQ= IHppcw== IHBvcmNlbA== IE3DvA== IG9nZ2k= 4KS+4KSo4KWA4KSv b2xsZXI= 4LOC4LKV dWxpbmU= 4Li04Lil IE1haGFy IHBvc3PDqGRl INix24HbjA== RGVwbG95 w6lyaWFz cmljaHR1bmc= IHNyZQ== YXRyaWNlcw== emVn 4LCw4LGB4LCX LXRyYW5zZm9ybQ== 4KeB4Kay4KeL 4LWA4LSV4LWN4LS3 bGVpZA== 54my5Lqk 5YeA IEludHI= IGZpZXJjZQ== oeCxjQ== YXBwcm94 IHBheXBhbA== IG3Ds24= IEFydGlzdHM= IG1hdHRyZXNzZXM= IGl0YWxpYW5v CWZpZWxk OzsK IGtlZXNzYXR0aQ== IEZhcmJl b3ZvbHRh aXlldA== YWtpYQ== IGR3ZQ== 0LDQvNC40L0= PHU= IOCkuOCli+Ckmg== IHZvbHY= IE1vdXI= IE1hdGhlbWF0aWNz 4YOg4YOX4YOu IFRvdWw= INiv24zYqg== LXF1 4LSV4LWN4LSw4LSf4LWN4LSf IHNjaGlsZGVy IENhcm1lbg== d2VuemE= KHRocmVhZA== 5b2T54S2 RWFybGllcg== JwovLw== IHByb3BvcmNpb25h YXN6dA== IEZBSUw= IFZJRVc= INin2YHYstin24zYtA== Y29tcHV0ZXI= IHBvcmNlbnQ= X2VudW0= Qmxvb2Q= IGxvZ2VtZW50 IOa3sQ== Ly8j INaF1aPVv9Wh1aPVuNaA1a4= IGF1dGhlbnRpY2F0ZWQ= YC5g IHJlc3BvbmRl ICd7fQ== IHBhdHJvbA== CW9yZGVy L2xheW91dA== IGdpdmVhd2F5 IGNhc2NhZGU= 0L3RltC5 IGRpcmV0b3I= CW9iamVjdA== R3JhY2lhcw== IFJleW4= 0YvQt9GL xIvEiw== KGNhcg== 4Z+S4Z6a4Z67 IHRvYXRl IHNla3Q= XE1pZ3JhdGlvbnM= IOWunA== IEluZG9vcg== 0LPQvtKz KiEK IGNpdWRhZGVz X2Jlc3Q= IG9zaQ== IGVsw6l0cg== IGZpbG1pbmc= ZXhjaGFuZ2U= bWluZA== INij2KjZig== U3RvcmVk ZHVjZWQ= OmE= Il06Cg== IHBvc2Vi IExhdWY= J119 4LSw4LWB4LSf4LWG RGVjaXNpb24= IGJpYXNh 15HXmdec UHg= IHR1bmdrb2w= 6ZO26KGM5Y2h 0JDQmw== 57uD IOC4l+C4suC4hw== INGA0LDRgdGC0LI= INCx0q/RgA== IGRpc2NpcGxpbmE= IHBhcnRlbmFpcmVz LlJlc2V0 IGzDpG5nZXI= IGVzdGFjaW9u ZW5jaW9u 4Ki+4Kij LWZyb20= INCx0LvQsNCz0L7QtNCw0YDRjw== LuKApg== IGRydWdp INWk1aXVtA== X2FsdA== YXVzY2g= 5bGP IHN2aWx1cHA= IGRlc2Vudm9sdmVy 4YOQ4YOa4YOu IEVxdWlw INGG0LXQvdCw IE1k IEVzdG9z IHByZXBhcmVz 0LzQtdGH aGFydA== IHNjaHJlaWJlbg== 4pah4pah4pah4pah4pah4pah4pah4pah IC8+fQ== IGVsbQ== 77yM5bCx IGthYnVs YmVuemlzYQ== IFZpcnVz 7YOE 4oCM2qnZhg== IFdpbm5lcg== L2tn VGFraW5n IHV0ZXI= LnBsYXllcnM= IHNoaW5pbmc= a3JpdA== 4Ka+4KaH4Kao IHRpbGxz IGJhaXhh TWFo IGJyaW5j IHZpdQ== I19f dXN1YWxseQ== IG5vY3Q= 0LLQtdGA0LQ= IGZvdG8ncw== 4K+B4K6x4K+I X1BBVA== IHJhc2s= TWVlcg== 4YOQ4YOV4YOQ4YOa IGV2ZW5lbWVudA== 44Oz44K6 LklDb250YWluZXI= IGFwYXJ0YW1lbnRv IiU= IOCkquCli+CkuOCljeCknw== IOC0uOC0guC0teC0v+C0pw== 16bXqg== INqp2YTbjA== 4Lat4LeP YW56dQ== IFNpbmdsZXRvbg== 4KS/4KSV4KS+4KSw UmVzdGFydA== IGxpZmVjeWNsZQ== 4Lag IGRpcmVjdG8= IE9yYWw= b3J0aWM= IHNhdHQ= INin2YTYs9mG dXZhZA== enVt 44OD44Kv44K5 4Ka/4Kak4KeN4Kaw IHR1bmE= cm9waGlj 4YOg4YOj4YOa4YOY 4LWB4LS14LSo IEFpbmRh RWRpdGFy 6ZGr 4Lav4LeU INuB2YjYptuM 15nXqdef IOWTqg== YWRi IEF2aWF0aW9u IGNsdWJl IOqwgOqyqQ== TUh6 4KaW4KeN4Kav UGluZw== IOWkqeWkqeS4reW9qeelqOi/veWPtw== LWhh IG3DpHI= IE1hc3Nhc2pl TWluZQ== IGRpYXJy INio2YA= Kyc8Lw== IOCqsuCqiA== 57qv IGxlYXNpbmc= IHBlcmRpZG8= IGNlbGVicmE= TGF0ZQ== INC+0LHRgNCw0LfQvtCy0LDQvdC40Y8= ZW5uaXVt INC80LXRhw== IG1pbmlzdGVycw== IE1hcnJpYWdl IOCmuOCmruCmr+CmvA== Zms= 15XXodej IFBsdWc= 0YHTmQ== 0YHQutGW IHNlYXRlZA== IEZyYW7Dp29pcw== IFBR aW1idXM= 5bmy6YOo IEzDs3Bleg== IHZlcmdl LWluc3BpcmVk 4KSf4KSo IHNpbXBsaWZpZWQ= IGVzdMOg 5Z2R 4Ka+4Kao4Ka/ INCd0YM= INqv2Yc= IOCkmuCkvuCkueCkpOClhw== IOCkqOCkv+CksOCljeCkow== cmV4 IEAo IOCqteCqlg== IENlbnN1cw== 15HXmdeo IHN0YW1wcw== IGtyZWRpdA== INC90L7QstC+0LPQvg== w7ptZXJv rOGDmw== IHFl INiz2YjYp9mE LlRSQUlMSU5H b2zDs2dpY29z bGVybmVu Skk= IC0tLS0t 5YiK dmFsYQ== Lml2 0LTRg9C8 IGVudHJldGVu 5aSa5bCR6ZKx IGxhbmRsb3Jk IGZ1ZWdv IFBhaWQ= INC+0LTQvdCw0LrQvg== X3JlY29yZHM= REc= IEJlbno= X2NvbXBhbnk= IEVuZ2luZWVycw== INin2LfZhNin2LnYp9iq IHJld2FyZGVk IOa/gA== 2LnZhNmG IHBvbGl0aWNhbGx5 IFByb2ZpdA== 4Ka/4Ka34KeN4Kag 4LS/4LSc IHRlcmI= IGNvbWVyY2lv IOCkhuCkhw== 1bjVsA== IG5hdGlvbidz VU1F aW1tZXJz X2Rp cmV2aWV3cw== INin2YjYsw== U3RhdGljcw== IHN3YWxsb3c= IHJlcHM= IGFjY29tcGxpc2htZW50cw== IE1hcnI= b2JpbGVz IHBpdGFu INGD0YPRgNGF INC40LTQuA== IGVuZG9yc2Vk IGNob2lzaQ== INGH0LjRgg== IHJlYm91bmRz bGluZXI= YXJsYXM= amFj IENhcmxv LnByb3h5 U2NhbGluZw== UmV1dGVycw== IFJpYg== IG1hbnV0ZW7Dp8Ojbw== IHBzeWNoaWM= IHBoxrDGoW5n IHBlcm1ldHRyYQ== IGt1aXRlbmtpbg== JScs IOGDkOGDkg== LWNhcnQ= UGVyc29uYQ== IEVzdMOh 17Q= IHRlbmllbmRv LmRw 4KSy4KWL4KSC IEFsdW1pbnVt 4oKsCgo= IOC0qOC0n+C0leC1jeC0lQ== IGx1bWlu IEJldmVy 4Lit4Lit4LiB IGVzcGVjaWFsaXN0YXM= Lk51bQ== IExlbW9u bGFjZXM= cm9hZHM= KGRlYw== RXhwbG9yZXI= 5LmF5LmF57K+5ZOB LmNtYg== IGFpbnVsdA== IExhenk= IFNwaW5uZXI= IEtybw== INmH2YXbjNmG IOCkteCkueClgOCkgg== 2qvYsQ== 5LiJ57qn54mH IGNpdWRhZGFub3M= 2KTYp9mE VUJM IOGDk+GDkOGDnA== IGRvbWluYXRl 77yg44GK6IW544GE44Gj44Gx44GE ZW50bGln YW12dQ== JmVhY3V0ZQ== IHN3ZXB0 IHRvdWNoZQ== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= w6F0aXM= 15HXkA== INiz2LHZhdin24w= IOCknOCkv+CksuCljeCksg== INeU157Xqg== IOCkrOCknOClhw== INmK2LnZhdmE IGVzdHV2bw== IG1lbmluZ2thdA== IDspCgo= IGFzeW0= 4KeB4Kaj X2NsaWNrZWQ= 7J207Iqk 4YCv4YCt KCEo b25pY2E= 7ISx7J2E L2Jsb2I= IGVsaW1pbmF0aW9u INmK2KM= ZWxsaWdlbnQ= aWViZXI= IGJld3VzdA== INC+0LTQtdC2 IEx5bmNo IG9ic2N1cmU= b3VyZXV4 IGFtZmFuaQ== IOCmreCmvuCmsOCmpA== 24zYp9q6 IOKXhg== IHNvbHVjaW9uZXM= Y2VyaWVz IFB1bmt0ZQ== 0YvQsg== 4YOY4YOt CUhY CU51bGw= 4KqC4Kqq4Kqo4KuA ICcuLi8uLi8uLi8uLi8= a2F0YXBvcw== 4LiE4Li34LiZ 0Y/QtNCw IEVuYWJsZWQ= dW1ibmFpbHM= YW1hZA== LWNob2ljZQ== 4YOU4YOl4YOh IFNpbm4= IG11dGV4 IGhhYmFy Z2V2aXR5 IGRlbmlhbA== IGJpYmxl 4KS+4KSP4KSV4KS+ IER1Y2s= IGRlbGljaW9z IE5nYQ== X0JVUw== IGN1cnNl IE5vdm8= L3NoZQ== IGZvcnRoY29taW5n YWN0aXZleA== R2hvc3Q= IG1lbGxhbg== IHJvbmRl IERlc2Vudm9s IOC0suC0leC1jeC0tw== IHd0 JeOAggoK IENocmlzdGluZQ== IHVtYnJlbGxh IOCuh+CusuCvjeCusg== IOyVhOuLiOudvA== IOCmueCniOCmm+Cnhw== Q2FwaXRhbA== 2YbYp9mD IGphbG8= IFJQQw== Z25l IG9iamVjdGlm IGVsZHJl IHBsYWludGlmZg== IFNvemlhbA== IFZvdHJl IHBhbm9yYW1h ZWxsaWtsZQ== IGRhxZ8= IFJvc2Vz 4LeS4Lax IOCwpOCwsA== 5b2p56Wo5oub5ZWG IOCkreCkvuCknA== IFJlcG9ydGVy RGlzcG9u IFVuaWNvZGU= IGFycsOqdA== LmRpc3Q= IHBlcnNvbm5hbGlz a8Oh 24zYrQ== INCy0LfRgNC+0YHQuw== 1bjWgtW3 IEJlYXN0 QUtF IG9udHNw IHBhcmNpYWw= 0YDQuNCz0LjQvQ== INC70LDQsw== IHBvdXZhaXQ= 4Ka34KeN4Kaf 2YjYp9qp IHRydXk= 15vXmQ== X21hdGVyaWFs IHBpbGloYW4= S2lkcw== INC505k= 4LS14LS/4LSh4LWN bGV0YWw= IOCykw== LWZlZWRiYWNr 4YOd4YOS4YOQ4YOT4YOd IGdpYW8= 4Z+B4Z6f IOCknOCkvuCkqOCkvg== LdWo 55uW IGN1c3RvbWl6YWJsZQ== LW9yZ2Fu 4Lix4LmI4LiH IHbDpnJ0 IHN0ZWFkaWx5 IOCuteCvhuCus+Cuv+Curw== IGh1ZXM= INCR0LDRiNKh IEFP IGJ1cm5z ZmxhbW1hdG9yeQ== INCz0LjRgNC4 IEhlcmFsZA== INC80L7QttCw 4LiX4Li44LiB INC20L7Qug== X2V4dHJh PF8= IGxpbGxl aW1hZ2Vu IGlsdXN0cg== RGg= IGFjY2Vzc29pcmVz IENvbnZlcnM= IOCkquCkleCljeCktw== KCgi IHN0YXR1dG9yeQ== L3JlZ2lzdGVy ZW1lbnM= 4Li04LiI QXRsYXM= cmVnaXN0cmU= IGtla2FoaQ== IFZlcmE= INC80LDQu9C+ IGRpw71pcA== X3Bvc2U= 0LzQsNGC0Ys= 4K+C4K6w w7x0dA== IMWha29s IGVzdGFkb3VuaWQ= IGJlcGFhbGQ= IGJyb2tlcmFnZQ== INei15XXkQ== IGVzdGFu 1aXVvdW/ IGFzbQ== X2NvcnJlY3Q= TGlrZXM= RG93bmxvYWRz IGV4aGliaXRlZA== IHBzdG10 IHR1bGVi IGFudHM= SUVMRFM= IGJhdg== INit2YM= 4LiV4Li4 INGC06nRhdOp06nRgA== IEFSRw== IHdlbnNlbg== IEVyc3Q= IFJlbGllZg== 0YLQvtC9 4KqX4KuN4Kqw IGhhbw== 5pqW c2vDqQ== IGNvYXRz INix2YjYp9mG IEV0c3k= IGZpY3Rpb25hbA== INGC0LDQvdGL IG13eQ== IHZhY2FuY2llcw== IOW9qeelnuS6iemcuOiDvQ== INmB2KM= IM6/z4DOv86vzrE= IDo6Ojo6Ojo6 INC80LDQu9GL IHJ1Z2J5 4K6J INix2KfYqg== LT0= 4KWC4KS5 U2x1Zw== IGN1cnZlZA== IFwiIg== INC60L7QuQ== IHRleHRpbGU= INep16c= dW5nc20= IHNhY2Fy INeR157XqQ== LnNxdWFyZQ== IHVuc3VjY2Vzcw== W3NpemU= IG11ZGFuw6dhcw== IG92ZXJzaXplZA== IENvYg== 0L7Qu9C+0YI= LkF0dHJpYnV0ZXM= IFBhcnRpZG8= bmVzdGpz IGxhbmd0 eXl5 IOGDqOGDlOGDlQ== ZGVwcmVjYXRlZA== IOefsw== IEVydw== IEJlbGdpw6s= INGB0LrQvtC70YzQutC+ IFBoaWxvc29waHk= IHdyaW5rbGVz IHZpc8Ojbw== X2JpbmFyeQ== INC+0L/RgtC40Lw= INWh1bTVog== INC10LTQuA== IFVJRA== IGNhdGU= 16TXoQ== RHJlYW0= 4LC/4LCV4LC+4LCw Lm1h IMOhbGJ1bQ== aW5zdGFsbGVy LmJpeg== LW1pbGU= c3RvcmVz 4LS/4LSy4LWH4LSV4LWN4LSV4LWN IE1pdHRl LkNvbnY= YWl0ZXM= IHBpbGx1Z2l0 YXNjbw== IGho 4Kq/4Kqk4KuN4Kqw 5L+65Y675Lmf IHNlcnZpY2luZw== 0LrQsNCy 2r7Zig== cmVtZWx5 LkFzeW5j PVVURg== 4K6/4K6V4K6z VHJlbmRpbmc= 5qyh5pWw IHBhcmFncmFwaHM= IGhhaG9sbw== V0w= IFJlbnRhbHM= 4Lii4Li04LiH dW5sZXNz 5YW8 X3Bw IEVzcMOt zrTOtc+C 4LiK4LmI4Lit4LiH 4KSk4KSu IOyatOyYgQ== aGFkbw== Pic7Cgo= INCz0L7QstC+0YDQuNGC YWdncmVnYXRl IGF0dGVuZGFudA== IG1hY2hl IEhhdQ== cG9saXM= 2K7ZgQ== LlZlcnNpb24= IGRlc2NyaXB0aXZl IG5hdGFs IGXFnw== IE9BdXRo X1dPUks= IHZvaWzDoA== INC00L7RgNC+0LM= KHJlcXVpcmVk LXBv IHRyYWZmaWNraW5n 0YLQutOZ0L0= IGdyb3VuZGVk KHRvcmNo IEdsZW5u YWJpbg== VHVl ICEhIQoK IFZpcnQ= Ym91bmRz IEluc3RhbnRpYXRl X2FsaWFz IGZvcm11bGF0aW9u 57uf5LiA IGRlcml2ZQ== 0L7Qt9C40YI= IGNvbGFib3JhY2nDs24= IGVpbmY= IENvbW1hbmRlcg== IOCkruCkguCkpOCljeCksOClgA== IGNsaWZm 4KWN4KS44KS+ aWFkYXU= INCk0LXQtNC10YDQsNGG0LjQuA== IHNlYW1sZXNzbHk= 6Kmm YWNpanU= IHR3aW5z 2LfZhNmC IE1pY2hl IE1vbmF0ZW4= INWh1bbVsQ== IMSNbGFu IGZhYnJpY2FudGVz 4KeC4Kaq IGRpc3Bvc2ljacOzbg== INGC0YPRg9GA0LA= IOCyuOCzh+CysA== INGN0YLQvtC80YM= IGx1Z2E= IG91dHJl IOCqnOCri+CqiA== YWFk SG95 IEFubm90YXRpb24= INeb15DXnw== IGdyb3NzZQ== SVRV IGFnZ3Jhdg== IENoZXN0ZXI= LmR0 UHJlZw== IGV5aQ== IElzbGU= IHN0YW5kYWxvbmU= IGlycmVsZXZhbnQ= IHNlbmhh IHVwcGw= d2lzcw== 4YCQ4YC9 IG1hcXU= REVTQw== L1E= IHZpc2nDs24= 6LWE6YeR bGl0ZQ== INGC06nRhdOp06nRgNOp0LzQtg== w7ZmZm5ldA== IHJvdXRpbmVseQ== w7pzdA== bm92YXRpb24= IOC0leC1h+C0qOC1jeC0puC1jeC0sA== V2lsbGlhbQ== IGhlaXI= IGNvaG9ydA== INC+0LHRgdC70YPQtg== aW5hYQ== 6I635b6X IGt3YW1lbg== 2pPZiA== IHJveWFsdHk= IGNvbXBhc3Npb25hdGU= INmF2YjYp9mC2Lk= IG1vdGl2YXRl IG5vbmc= IG9ic2VydmluZw== IEdpYW50 U2lsdmVy aW9s w7pk IOCktuCkv+CktQ== bGllw59lbmQ= IGF2ZWE= IGdyaW0= UXVvdGVz X1JFR0lTVEVS 5q2j6KeE55qE5ZCX IEVsbGVz IHRlcms= 7KOg aW50ZW5kZW50 KGFy Lk1hdGVyaWFs aWxkyZk= 0LvRi9C9 IHJhc3A= X2N1cnJlbmN5 ZmZp IOCqheCqpeCqteCqvg== IFNhbmRyYQ== cXVpc2l0ZXM= cmlvdHQ= 4LmD4Lir4LiN4LmI dGV1cnM= IHZvbGxzdMOkbmQ= IGxj IFRhYw== IOCopOCpi+Cogg== IEthdQ== INmE2KfZhg== 15nXqteZ IEZPUkU= IOC0heC0puC1jeC0puC1h+C0ueC0gg== INeU157Xkw== aXNzaW1v LmRk IGNodWlk 0YXQsNC0 IOCkluCksOClgA== R2xvYmFscw== PEdhbWU= IEZybw== IFJFQw== IGVmZmVrdGl2 eGlu IGbDpg== Y2luZA== X3VzYWdl UXVlbA== INC+0YnRg9GJ IG1lcmdlcg== ICgpCgo= IHRpa2E= LmFuaW1hdGU= IElkZWVu 4Lit4Lii4Li54LmI IG1hZ25lc2l1bQ== QW5h 44O844Kv IEJsdmQ= IGNoaWNh INmD24Y= 4Z+N I2VsaWY= IOC4nOC4peC4muC4reC4peC4quC4lA== IGNyYW5r PyIsCg== IHZlbW9z YWthaQ== QU1T IG9xYWw= IHZyZW0= ZWxkZXI= LnVpbnQ= IFVtZ2VidW5n X2xv IEV2YW4= w61kYXM= INiq2KfYsduM2K4= aXN0aXNjaA== CWFjdGlvbg== U21z IGFzc2Vn IENvbnZlcnNhdGlvbg== IExldHRlcnM= IGFzc3VyZXI= IHRldGFoaQ== ZW5nbA== IFRvb2xiYXI= IGVzY29sYXM= w7xjaHQ= IExlYWRlcnM= 44GE44G+44GX44Gf IHN1ZmZpY2llbnRseQ== IExpYmVyYWw= IFN0cmFpZ2h0 IOCuruCusA== INGD0YDQvtCy0L3Rjw== INin2YTYo9mF2YrYsQ== IERpYWw= IMSJaQ== IHN0cmFhdA== aXNpcA== IG1vdmVy RGVzY3JpcHRvcnM= IFByb2ZpbA== IFRhdg== IGV4dHJhY3Rz IGx1d2lo IAogIAo= 2YrYp9ix2KfYqg== XEF1dGg= IGd1ZXNzZWQ= YWphdA== ICAgICAgICAJCQ== LmNoaw== IGJyaWdodGVy SXRlcmF0aW9u IENvdHRhZ2U= IHByZXRv Ij48Pz0= ZnRz 16jXldeq 4buxYQ== IG1rcGE= INGI0LDRhQ== 1aHVotWh1oA= IHdpbGRlcm5lc3M= PEFycmF5 aXbDqWU= Q2FsbGluZw== 0YHRgtC+ 15XXl9eT INin2YTYo9i52YXYp9mE IGZyb2lk zrvPhQ== IOCkheCkqw== cm90dGxl 4Lia4LmJ4Liy4LiZ 2KfYr9ir IHN0ZXNzbw== INGD0L3QuNC6 2KzYuQ== INio2KfZhNmG2LPYqNip IGhhaXM= Q29sbGFwc2U= 0YvQu9GL0L8= SG9yYQ== T1JO 2obblQ== IHNlbWlm 4Ki+4Ki4 IOC0l+C1jeC0sA== INKb0L7Skw== IGNoYXJpdGFibGU= IOCkpuCkv+CkqOCli+Ckgg== RmFtaWw= INiu2LE= IHRyb3V3 z4TPgQ== IGVudmlzaW9u IFNlc3Npb25z 4KWM4KSo aW5hbGc= IFJvdWdl LkFicw== IGtpbmV0 c2Nobml0dA== LWhhbmRlZA== IGNodWNr IGNvbnNlZ3Vl IOCwuOCxjeCwtQ== IGhlbnQ= YXV0aQ== aW5pdGlhbGl6ZWQ= THV4 IOGDm+GDo+GDqOGDkOGDneGDkQ== INCy0LDQvQ== IGJlbmVmw61jaW9z 4LCC4LCs IOCmrOCmuA== IG1iZXJl IGh1bWFuaXRhcmlhbg== IFBlcHBlcg== IHB1aXNzZQ== IGRpcm5hbWU= 6aqX5Lq6 RmlzaA== PElBY3Rpb24= b3BhbA== IGVybcO2Z2xpY2h0 6YCy IGhvag== IFBBQw== INC505nRgA== PERvdWJsZQ== IG1iZQ== xJ9pbg== IG5la2Fq X2V4dGVuc2lvbg== IOaji+eJjA== UmVxdWlyZW1lbnQ= 15XXk9eZ 5omR IGhlY2s= IEJhaWxleQ== IGFsa29ob2w= INeq15XXmw== IGNvbnNhYw== cGFj IGthdG9h INK20YPQvNKz0YPRgNC40Lg= INqq2YU= ZXJjZQ== 0YvRgNKT0LA= 0YfRjQ== 0LDRgdGL0L3QtNCw IM6xz4E= d2FjaA== YXRyaXo= aW5nbGVz KG1z LXBvc2l0aW9u Qm9va21hcms= KGlp 15HXmA== IENvbXBy IOGelg== YXJtZWQ= IEtt IHTDrWNo 2KfZhdmG dWFsaXRhcw== 44Kk44Oz44OI aGFkYQ== IGZpbmdlcnByaW50 IFJlZHVjZQ== 4LKV4LOG ZGV2ZWxvcGVy IGloYW4= bnR5 INKp X2Nvb3Jkcw== IGPDoA== RW5jcnlwdA== IGdhbmQ= cGVuc2Vy L3RpbWU= IOC0uOC1jeC0seC1jeC0sQ== uOCxjeCwpQ== Y2FyYm9u IMOkbmQ= aG96 IGV4cGVuZGl0dXJl INC40L3QsA== IG1hYXRzY2hhcHA= IGJyYXVjaGVu INWh1a8= 15nXmNeU INGB0LDQvNGL0Lk= dXJlbA== Li4uXA== emVpY2hlbg== IGNvbmZlc3M= IEFpcmJuYg== IMSR4buBdQ== ey0j 2KbYp9iq YW5kcmU= dGhz IGRlbGliZXJhdGVseQ== Y3ljbGVz xI1pdA== IGZpbmFsZW1lbnQ= IGV4cGxvaXRhdGlvbg== IENPTFVNTg== IExhcnM= IE5pbmph ZWhpcg== X29wZXJhdGlvbg== IOCqhuCqteCrjeCqr+CrgeCqgg== IGx1bA== 6rOh IHBhZHLDo28= 1bjWgtWw Q2xhc3NpZmljYXRpb24= d2Vnbw== INGB0YLQsNC90L7QstC40YLRgdGP IOCmqOCmvuCmhw== IHZlcsOwYQ== IGVtcGxveXM= ICgqKQ== IG1hZ25pZmlxdWU= IGF1dG9u IHJvYXN0ZWQ= bmdp 2YfYsNin IERhbGU= INmI2KfYsdmK I3JlZ2lvbg== SGFycnk= IEJvaXNl 5Z+56K6t IHNlbGZpc2g= INC20LjQtA== 0YHQvtC70Y7Rgg== IE9wdGltaXphdGlvbg== cm9zYQ== IHN1cHByZXNzaW9u dGljaw== INiq25A= 0LHRi9C3 LkVudW0= IGNvbGxhdGVyYWw= IGxpYmVyZGFkZQ== IOq3nA== U0NS 77+j5aWH57Gz X3JhdGluZw== IE1hbmlsYQ== Z2VnZXZlbnM= IHN3ZWVwaW5n IEFubmll ICAgICAKCg== 0LjRgtC10LvRjNC90L7Qs9C+ X3Byb2Q= IGZldGE= IOCquOCrjOCqpeCrgA== IHdha2luZw== ZXlvbmQ= IGtsZWRpbmc= R1BT Lk1PREU= 5Y+R55Sf INin2YTZgdmK2K/ZitmI IERyZXc= QU5HRUQ= bWluZW4= IGTFrw== Li4uIikK IG5naMSp 2KfYrdmG dHRhcg== INmB2Yg= IHPDrW1i INi02Lk= IHJlc2VhcmNoZWQ= 0rvQsA== INC/0YDQvtC10LrRgtCw 2LHZiNi2 IG1lbW9pcg== b3R0ZXM= 4LiE4LmI IFRyb3k= IEzDqQ== LkJ5 aW5rYW4= INio2KfZhNin IGd1YXJkYQ== IGFzaWE= LUNvbA== INGA0LDQt9Cw 4oCcSWY= IGJlaGU= 2bzYsQ== ZXR6dW5n INmE2YA= IGF0cmFjdA== IHpvbXdl IERW IOGDm+GDmOGDlQ== 5YWl5Y+j INC/0L7QvdC40LzQsA== dGhlc2U= RWxlY3RyaWM= LOasp+e+jg== IFN0dWFydA== 0KLQng== meaxnw== IGNvbW1lbmPDqQ== IENvbmdyZXNv IExlYWRpbmc= IOCyleCzjeCysA== IHBuZw== IG1taXJp ZmxpcA== IENvbWJpbmU= IEJyZXQ= TmFz bGV0aW9u IGF2YW50YWdlcw== IGJlc3RhYW5kZQ== IGNob3A= IEluZGl2aWR1YWxz IGxpbXBpZXph aWRy IGNvbXByZXNzb3I= IHJldHJvcw== RmVzdA== IGRlbWU= IGVzcGlyaXR1YWw= IHN0cmlwcGVk RmFicmlj emlqZA== INmK2YjZhA== INWr1bc= INCv0Lo= aXR1bQ== Y29sb2d5 4oCg IGtvcms= Y3JvcA== IGzDpHVmdA== cG90cw== IENlbWVudA== X3JlYWR5 IFdlYWs= INCi0YPRgA== IFNob3BpZnk= IFdlYWx0aA== YWrDug== IHNvbGlkaXR5 LmFyZWE= IGJ5xYJv YCR7 0LrRi9C7 Xy0= IHByb3BpZXQ= IOCyuOCziw== IHJlY2VwdG9ycw== 2LbYrQ== DQogICAgDQo= 4LCV4LGN4LCV4LCh 4Ka54Kaj 6L+Y5pyJ acOzZA== VG93bg== 4LGA4LCq IGNhdml0eQ== ZWxsaW5ndG9u VVJJQ29tcG9uZW50 SUxMRQ== IGludHJpZw== c3RhcnRpbmc= IGRlZmljaWVuY3k= IFRlZQ== IGRpc2Nvbm5lY3RlZA== X0NPTk5FQ1Q= RGl2aXNpb24= IHRyb3VibGVk IFNjYWxhcg== ICI9Ig== cnlu LlRydWU= IOCkqOCljA== IHRhbWFybWlr LWRlZmluZWQ= IE1hbm5zY2hhZnQ= 7Zqo aWFsaQ== IHByZXk= 7KSE IGJvb2Q= IOODkQ== IEJsYWRl b2Nvcw== aXNobmE= T2Jz X1BVQkxJQw== X0RFTA== w6HFoQ== IGN1YXJ0bw== IEtS d2FkaQ== IHN5c3RlbWlj IOCytuCzjeCysOCzgA== IExpYnJl IOCkuOCljeCkpeCkv+CkpOCkvw== IEVsZGVy Q2xhc3NpYw== IG5laWdoYm9yaW5n IOexuw== 5pS26JeP IHBrdA== XFZpZXc= 5o+0 IGhheWF0 TW9tZW50 c2VtYmxpbmc= LW5hdmlnYXRpb24= 57qn5q+b54mH INGC0YvRgQ== bGl3bw== IHZhcmNoYXI= IERvZQ== YmVlcg== cmllbmRv IHBhdGk= IE15c3Rlcnk= IOCujuCutA== IEJyZWFraW5n aWNpYXI= IHNpZGV3YWxr X09ORQ== IHJlYXA= INin2YTYtNmK2K4= RWRpdGVk ZsO4cg== 4Z+E4Z6Z 772eCgo= IFLDqXB1YmxpcXVl IFNBUw== IHTDrXR1bG9z IGFic3Q= xb5ubw== IFNhdmluZ3M= b3J0ZXg= IOCkteCkv+CkpA== 4KS+4KSw4KSj aWduZWU= IHBhaWVtZW50 IFBhdWxh QVRFUklBTA== IMOhbWJpdG8= IHBhdHJvbnM= RW5jcnlwdGlvbg== zrPOsQ== IEJvcmRlYXV4 IEdyZWVubGFuZA== INmK2YM= 77yc aWRsZQ== IGdlemVnZA== 44Kk44Or INC20LXQvdGJ0LjQvQ== IHBsYWdl IGh1bnRlcg== Z2VyaQ== b2ludGVycw== ZmVk 4LiE4Lin4Liy4Lih4LiE4Li04LiU4LmA4Lir4LmH4LiZ IOCqq+CqsA== IGFnYg== IOWkp+WPkeW9qeelqOWumOe9kQ== RU1CRVI= INmH2YXahtmG24zZhg== YXlzYQ== INCz0Y3RgtGL LXJldmlldw== IEdFTg== SW5zdGFsbGVk IEFudGVz X1BST1A= IGxldHp0ZQ== LklQ IGNvcnJ1cA== INCw0YXQsNC00LA= IFJlc2lkZW5jZQ== IGRpY2hh IHPDvHJl IGRlc3RydWN0aXZl INGB0LvRg9GH0LDRj9GF LmZhY2Vz IGh1bWlk 0LXQuNSl0Yg= YWNvZXM= 5Zue5aSN LWZvdXI= bmFjaHRz IENlYw== 2KjYsdiv 0LjSow== INC/0YDQsNC0 aWZmdA== cHJpbWl0aXZl INmF2LnYp9mF2YQ= X2NoaWxkcmVu 4LS14LSw4LWN 4KS14KSw4KWA INCw0Y8= 6ICB5biI dWN1 b3Rhcg== SU5VWA== IENvbGlu IGRpbWVucw== aXphY2lvbmVz INiq2LPYqtiu2K/ZhQ== INC+0LrRgNGD IHLDqWR1aXJl LmtlcmFz IOC0tuC1h+C0t+C0gg== IHJlY29uc3RydWN0 INC60L7Qs9C+ IFZJSUk= IFbDrQ== IGFycml2ZXI= IHBsYXRlYXU= IEFkcmlhbg== IEdlbmV2YQ== b21hdGlj 5Lq/576O5YWD IOCkheCksA== wrsuCg== 0rPTmdCw0YDQsA== 6YY= IE5vw6ts 5o6S6KGM IHVwc3RyZWFt IEF6ZXI= IOC4o+C4reC4hw== IEVYSVNUUw== ZHpp IHdhcA== IE1PVkU= dmFzaXZl ZW5ldA== LmF0dHJpYnV0ZQ== IO2aqA== 0YDRg9GD IOWMlw== ZGlnaXQ= IEJyYWR5 TllTRQ== 5qiC UHVyZQ== d25k IGFkcmVzcw== TW92ZWQ= IHNwZWNpYWFs RVNQ INC60LXQudGW0L0= INC00LXQudGB0YLQstC40YLQtdC70YzQvdC+ IHNvbWE= IEJvdmVuZGllbg== YWNhbg== IOC4hOC4ow== 15zXldeq IGLDrG5o V04= Lm5kYXJyYXk= INW41oLVttWr IHBhdGFraQ== IFNhbWVu IHJpY2hlcw== 0YPQvdGC0LDQsw== 6YaS 4oKs4oCc aXRlcmF0aW9u IGNhdGVnb3JpZQ== IOCwheCwpA== IEluc3Bpcg== IHpvYg== IGZhaXRl IGV4Y3VzZXM= 7Iqs dW5kZXJz LlNsZWVw QXNzZXNzbWVudA== YXRhc2k= Y29pbA== IHNla2FsaQ== U2ly IE9yaWdpbmFsbHk= IHZlaWxpZ2hlaWQ= INGH0LXRgtGL0YA= 4YOV4YOa4YOY4YOh RGVmcw== LlByb2dyZXNz IHJlbWV0 IFJ1bmQ= INC90LDRiNC40YU= LdCy bGHDp8Ojbw== IEhhYWc= 0YPQs9C1 IHRleHRib29r IOCksOClgeCkquCkr+Clhw== IHRhdHU= IOuEmA== IENhbmRpZGF0ZXM= IENvbXBsaWFuY2U= 1aXWgNWp IOGDneGDoOGDmA== IG9mZnNldHM= vrg= KHZpZGVv Y3JpY2Fv IGt3ZW0= ZW50dXJl IFJvbW5leQ== IGNvbXBsYWluZWQ= IGludGVybmF0aW9u L2dvb2dsZQ== 4LGN4LCj IOCkteCkvuCkuOCljeCkpOCktQ== IHRhcmpldGE= IM6/zrnOus6/ IG1hZ25h INGD0LHQsNGB INCR0LjRgA== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 4K+N4K6q4K+N4K6q IGtuYXBw IHNlZGltZW50 INKz0LDQvNCw IGVuZG9yc2VtZW50 INi02YY= 2YbYr9uM IGJlcmVpaw== LXdlc3Q= 4oCL4Z6F 5Z2a5oyB 5oGS IExPQ0FM 4K6/4K6x4K+N4K6V RmlyZXN0b3Jl IEFuaW1hbHM= IHZlaMOtY3Vsbw== IENsb3RoaW5n X3Rhc2tz 4YOU4YOR4YOT4YOQ IFNpbnQ= IFB1bnQ= YXJrdA== UkVBSw== IERva3VtZW50 KGFuc3dlcg== IGbDqWw= UmFuZ2Vz X01F 6YeM6Z2i IOCqrOCqpw== Qmg= IENvbnNlbGhv IEFtb3I= 4YOi4YOg IOG7jW5h 4YOU4YOR4YOY4YOh4YOX4YOV4YOY4YOh dGF5 IE5vYm9keQ== 2KfYrdmI2YbYqQ== KmE= IGRlbGFz IHJlc3Bvbg== IGNsYXNo 0KHQodCg IGFzdHJvbm9t IENvb3JkaW5hdGU= IHJpZ29y Y29tYm8= IGFqb3V0ZXI= aXBwZXRz IGZpc2s= YWRqdXN0 aWVydW5ncw== IENlbWV0ZXJ5 emVnbw== aXNzw6k= 2KfYqNmK R3VpbGQ= IHdhaXZlcg== Qm9vdHN0cmFw INWk1avVtA== 44Kz44Of INmE2Yjar9mI2ro= L3NoYXJl cHJhY3RpY2U= INin2YTYtNi5 IOCumuCurg== 2LnYsdmB IEFsaw== IGZvcnRlcw== 4KWN4KSj INCQ0LvQtdC60YHQsNC90LQ= IHd5c3Q= 4KuL4KqC4Kqa IHNpbXBsZXNtZW50ZQ== IOGDp+GDneGDpA== IEluZGllbg== IFJlcHJlc2VudGF0aXZlcw== ZXlu UmVwcmVzZW50 4LmA4LiC4LmJ4Liy 0ZbQu9Cw IQoKCgo= bGlua2Vk ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK INin2YTZhdis2KrZhdi5 4Lit4Lih w6FsaXM= KFRva2Vu U2VsZWNjaW9u X3NpZGViYXI= d2l0 IExvcGV6 Zmx1c3M= 1aHVv9Wl1b0= LkNvbnZlcnQ= IOC0quC1jeC0sOC0p+C0vuC0qA== UmVzZXJ2ZWQ= IGfDvHplbA== IENvb3Jk INKb0LjQu9C40L0= IGVtbw== KHNob3J0 INit2LbYsdiq b3p5 IOCyleCzgg== YWNjZXB0YWJsZQ== INmC2KrZhA== IOCqteCrjeCqr+CqleCrjeCqpA== IHDDqA== IHNvYnJldA== ZW50YW4= aXN0ZW5jZQ== INin2K7YqtmK2KfYsQ== KG1vdmll IEZ1bm55 dWJ3YQ== IE5FRUQ= INeQ15XXoNeT15Y= Lm1vdmll IHN1cnBsdXM= IFZhbG9y KGtleXM= LWNvbmY= 4YOQ4YOc4YOY4YOh ZWl0dXJh IGThuqtu IFR1cmlzbW8= KHN0eWxl w7zEnw== IOC0suC1i+C0lQ== XCI+XA== 0YPRgNC00LA= IEVpc2Vu dW5kaW5n dXJnZW5jZQ== IHNwYW5z 5Y+s 2KfZg9mE 2KrYp9mE cmFj IGdvc3BvZA== IEF1Y2tsYW5k LnNtYXJ0 IOC0muC1hw== 0LXRgNCw0LzQuA== 5L+d5oqk IHJlZ2Fsbw== IOCqpOCqpeCqvg== INiu2K/Zhdip 0L3QtdGC0LU= Y2hpbmk= IHRvaG8= INGA0YPQutCw0LzQuA== LnBob3Rv IOCkquCkoeCkvA== 0LDQu9GL0qE= 44Os44OT KExvZ2lu 2KfZgduM UGVyc2lzdGVudA== IHBpbGxvd3M= v4g= IERlY2xhcmF0aW9u IERpc2NsYWltZXI= IG9iamVjdGlmcw== INC+0YfQtdGA0LXQtNGM LG51bQ== 4LOH4LKf Pls= IGNoYXVk 5Z+656GA c2lnbWE= IGxpZW5z KT87Cg== 4LiI4Liz4Lin4Lix4LiZ4LiX4Li14LmI IGh5cGVydGVuc2lvbg== aXN1cmU= IFphbQ== LOmmmea4rw== UGFnbw== 5o6I5p2D IGFicnVwdA== b29tbGE= ZXh0cg== IGZyYW1ld29ya3M= IHJhaQ== LmV0aA== IHNhZGVjZQ== QWR2aWNl INin2YTZhdix2KPYqQ== eWxsw6Q= bWF4aW11bQ== 4KS9 IGJyYXNpbGVpcm9z RmlyZWJhc2U= Zmlh IHZlcndhY2h0 INin2YTYs9in2LnYqQ== 6561 w610w6Fz IHRlbXDDqXJhdHVyZQ== INC00L7RiA== IFZlcnNhbmQ= ZXJybw== dXllcg== IGNvbXBsZXhl T09MRUFO 2LHYrg== IMO6ag== IG9wZXJhY2lvbmVz IGFubm91bmNpbmc= IGNhbGlicg== aW51cw== IFdhdGVycw== INGB0LrQu9Cw0LQ= INGN0YTRhNC10LrRgg== LmZvcm1z KHNlY29uZA== Lm1hbmFnZQ== IHNlYmVsdW0= R3Jhbg== INC00LDQtA== LXNleA== 0LjRgtCw0YA= INC/0YDQuNC30L0= J10sDQo= 4LK/4LKk4LON4LKk4LOB 57iu IOCumuCvh+CusA== UVQ= IOCqsOCrguCqqg== KHdpZGdldA== X1RJTUVS V2lzaA== INmH25A= 4YOd4YOq4YOY IOaKleeovw== IEVL Y29vcmRz cnV6 IHByZW1h X3RyaWdnZXI= IGhpZ2hz INGD0YfRgNC10LY= L0A= IHdob2xseQ== 6KuL IikKLy8= INGA0YPQutC4 TWFwcGluZ3M= IG1pc2xlYWRpbmc= Q0FM b21uaWE= IHJlbmRh Q2FsbGVy IExlZWRz IHDDqWQ= dGltZXN0YW1wcw== IHZhYW4= KHNlcQ== X2JhZA== IGN1eW8= INW61aHVv9aA1aHVvdW/ 44Gn44GN LkNvbWJpbmU= IGZvbGk= 0YPQtdC8 IGF1dG9ub21vdXM= IHRhcmVh 2K/bhw== emV1Z2U= IHJpaw== X1JlYWQ= IGdlZGFjaHQ= INCw0LzQtdGA0LjQutCw0L0= J0Q= 0LjQvNC10L0= aWd1cg== INix2KfYqNi3 INWl1bLVpdWs d3dlcg== INin2YTZitmF2YY= IiI6 5rOo5YaM6YCB ZWxpdA== 4LC+4LCm4LGN IGRlcmVjaGE= KGlucHV0cw== 5byA5aWW55u05pKt IHN0ZWFsaW5n IHNpZ25pZmljYWRv QUJC INGO0YDQuNC0 IGRyYWdnZWQ= INis24E= IGRlbW9zdHI= IGzhu7Fj 4Ky4 5bmz5Y+w5byA5oi3 IOyDneyEsQ== 6YO95piv c3BhY2Vz ZnN0cmVhbQ== IHZlcmFudHdvb3JkZWxpams= w6dhbnQ= IFdlbg== IGt2YWxpdA== IHZvbHRl X3NsdWc= IEFsZ29yaXRobQ== LnR3aWc= IOCkquCljeCksOCkpuCksOCljeCktuCkqA== IHBvcnRyYWl0cw== INiv2LHYrNip QW5kcmV3 IOCkleClgQ== IOCkleClh+CkguCkpuCljeCksA== IHZvZXJlbg== Il8= IEhlcnN0ZWxsZXI= SW5kdXN0cg== IOCkuOCkruCkuOCljeCkr+Ckvg== IGx5cw== IOCkqOCknOCksA== ZW5raWw= IGtpaQ== 77yI56yR IOGDnOGDkOGDmQ== 4KS/4KS24KWN4KSa4KS/4KSk IHN3aW5nZXJz IE1vZGlmeQ== 4YOU4YOW4YOY4YOT4YOU4YOc4YOi VGls IENvbnNlcXVlbnRseQ== 5Lq66auU w6N5 KGV4cHI= inBw IGZlYXN0 IHNlbnRpbWVudHM= Q2FsaWZvcm5pYQ== 44CC6L+Z IMOpdHVkaWFudHM= w7R0ZQ== Z2hvc3Q= 5rG6 IM+AzrvOtw== IGp1c3RpZmllZA== IGluY3VycmVk IEZvcnVtcw== 2YbYp9mH IGNyw6nDqQ== X1ZFUlQ= dWFzaXZl 4pGi IHVzYWRvcw== INin2YTYqtin2LHZitiu INC/0YDQvtC00LA= INen16LXnw== X1dPUkQ= IGPDsg== Kigt X1BPTA== IOCkruCkvuCksg== LnRpbWVvdXQ= IE5leHVz IGtvbWZvcnQ= PFBvaW50 IHNwZXo= IOCwleCwqA== IHNvcmd0 PVsK IOWkqeWkqeS4reW9qeelqOWmguS9lQ== X0NPUkU= IGt1ZmFueWE= YXNzaWdubWVudA== c8Ok IHRvcnI= IG5vc3RyaQ== KGRlbHRh 6LaF6L+H IGxvY2FsaXplZA== IEFubWVsZHVuZw== ZXN0YWw= IOGDoOGDneGDm+GDlOGDmuGDoeGDkOGDqg== YXppbg== IFZlcmRlcg== IOyCrO2ajA== IGxlaXQ= INWv1aHVv9Wh1oA= INmF2YjZhA== PExN wrfCtw== J11d SHA= w6FuaWNh YmlrZQ== cOG7jWzhu41w4buN w6RoZXI= 0L3RjtGO IO2MqA== ZmVlZGluZw== IEtub3dpbmc= INGB0YLQsNC70L4= IHNlZGFuZw== 4Kq/4Kqw SW1wbGljaXQ= 0LjRh9C10YHQutC40Lw= 2KfZgdmK2Kk= 6Kej5Yaz IHBsYXRpbnVt IHJlZ2lzdHJvcw== IEdhaW4= INCw0qM= 4oCZYW5u IOydtOumhA== INGW0L3RiA== aGFtbWVy IHBsYW5vcw== IGxvbmd0aW1l LmNvZA== 2YjaqQ== IHPJmQ== 6Y0= Y2hlbWFz LnRpbWVz 4K+B4K6j IOmbuw== KERFRkFVTFQ= IHJ1Z3M= IHNldGU= INWv1aHVptW01aHVr9Wl1oDVug== INin2YTYt9in2YLYqQ== IGFsZHI= IHByb3Bpb3M= IHhlbQ== IGNvbnF1aXN0 IGdlc2NocmllYmVu aWdhcmU= IOCwmuCxguCw IHBlcmNo IFByaW50aW5n IGVtZXJnZW5jaWVz IOCyr+CyvuCytQ== 0YPRgNCw0LvRjA== dGFt IGVuenltZXM= INC00LXQu9Cw CWludGVybmFs CQkJCQkgIA== IGdlcGxhYXRzdA== d2Vr INmG2LTYp9mG IGl0ZW5z IFJhYw== IOGDpeGDkOGDmuGDkOGDpQ== ZW50bGljaGU= IGxla2s= IGZvcm11bGF0ZWQ= 6L+Q6JCl 5aeU5ZGY IHRpa28= dXJhaQ== IG5lZ290aWF0aW9u IG1lbHRlZA== 4LC+4LCy4LC/ IHByb2NoYWluZQ== IG3DqW4= IHBhZGQ= LlZpc3VhbA== dWRldA== dWplbXk= X0NFTlRFUg== 0LDQt9C40YA= J10iKS4= 1aHWgg== INGC0YDQtdCx0L7QstCw0L3QuNGP IEJydW4= YmxlZA== Il07Cgo= INit2K/ZiNiv 0L7Qu9C+0LQ= IG9wZXJhw6fDo28= IOWkqeWkqeS4reW9qeelqOi9r+S7tg== IGVuZ2Vu IGZyZWN1 IGhhdHJlZA== IEVzdGFk IHVuYmVkaW5ndA== IOCwheCwr+Cwv+CwpOCxhw== SW5kZXhlZA== IENvbnRhY3Rz 4YOU4YOT4YOY YW1wbGluZw== IG1ham9ycw== 4buNdGE= 4KS44KSC IG1hcmtpaQ== IHLDqXVu CWltZw== IHJlc2lzdGVuY2lh IGNvb3JkaW5hdGVk 4YG+4YCA w6lseQ== Y3dk aWZ1a3dh Lm5ld3M= IGV0cmU= LWJ1aWx0 IHRlcmNlcmE= dWJib3Ju IFF1ZXI= IT8= xLFyxLFt cm9wcGVk IHZpc2l0YW50ZXM= INeQ15c= IFBoaWxpcHBl YXNzYWFx IGFubmF0 0LDQvdGD dXB1bmN0 X2Rlc3Q= IG51YWly IEtoYWw= IEJyZW50 IGTDqWRp INGD0YfQsNGB0YLQuNC1 U2VydmljaW8= b3BlbmhhZ2Vu LXdpZGdldA== U3Bs IFBhbmFtYQ== X3N0YXI= INCy0L7Qt9Cy0YDQsNGJ IENyeQ== IHN2aQ== INGD0LTQuNCy 0YPRidC10YHRgtCy0LA= INmE2KrYrQ== 1oDVtA== IENhbGM= IHNlbGFsdQ== IEl0YWxp 4YOU4YOX4YOQ IFBST0pFQ1Q= IGNvbm9jaW1pZW50b3M= 0L7Rh9C90YvRhQ== X1VOVVNFRA== IHZlcmhpbmQ= 7Je8 6reg 0LbQsNCy Y3JvbGw= IGVwaWRlbWk= 6KiK 2YrYr9mK IOmRqw== UmVhZGFibGU= IOC0uOC1huC0leC1jeC0sOC0n+C1jeC0nw== IGJvbmhldXI= IHdhZGE= X3NlZw== IGNtYg== Y2h0ZW5k IElQVA== QnVs IOCksOCli+CklQ== IHRyaWJlcw== 4Kqo4Kqy JyU= KGRpc3Q= YnJlYWQ= 6ZqG SW50ZXJwb2w= YW50aWNz IOuPhQ== X0lOVEVSTkFM IGNsb2c= 6IO95rqQ X2dwaW8= 0YvRgNGL0L8= KEVSUk9S IHByYWlzZWQ= LnBhdXNl IMKt L3RoZW1lcw== KHF1ZXN0aW9u IG9ic3RhbnRl IHNwZXJt IGFkaGVzaXZl UHJvcG9zYWw= aXNzdA== IGFpeMOy IGRlY2lzaW9uZXM= O21hcmdpbg== dsOmcg== IHByb21wdHM= ZsO8aHJlcg== INGP0L3Riw== bGVpdGVy 0LvQsNGC0LA= SUZP IGphdmFzY3JpcHQ= 66q7 aW5kaWs= w6F2YQ== INCf0L7Rgg== IOCwteCwv+CwnA== Y291 IGVzcGVjaWFsZXM= IGVwaWRlbWlj IFZlcmVu Pj4oKTsK IG5rYXI= aW1pc2U= IEJvcmQ= bG/Fvg== 0YbRltGP c3F1YXJl IHBoaWxvc29waGljYWw= YmVkaW5ndW5nZW4= IEFtYmFzc2Fkb3I= LXJlcGVhdA== aXNtYXRjaA== IG92ZXJzaWdodA== IOC4l+C4teC5gOC4lOC5h+C4lA== 4oCZaGE= IExlYmFub24= dmVyc2No IHRvd2Vycw== oeCwvw== IOC0ruC0vuC0uA== bGFpbg== X2VhY2g= IEd1eXM= LnN3dA== IGV2ZWw= INC40YHRgtC+0YDQuNC4 1aHVsNWh1b8= IHVwcGVyY2FzZQ== 4K+B4K6k4K6/4K6v UmVnaW9ucw== UmVjaXBlcw== 4LK44LON4LKv b3JwaGlj 5pW4 IOGDmOGDp+GDneGDoQ== U3E= 15DWt9ek1rw= IM+Dzr/PhQ== IHBsw6FzdGljbw== IFNvcGhpZQ== IERhdGFzZXQ= Ym91 0LvQuNCy0L4= IG3JmWw= ID09Pg== IFVydWd1YXk= IEvDvGNoZQ== UEFHRQ== IG3DqW1vaXJl IG5lZg== bm9vcA== 15XXp9eY IHF1YXJ0b3M= IGd1c2g= Y2Nj 4LW84LS3 X1JHQg== IGVtb2Npb24= 5oq9 5LiH5Lq6 bGljYXM= INin2YTYtdmG2Kc= INW61aHVv9Wz1aHVvA== IGZvbmN0aW9ubmU= bmJh LWNlbnRlcmVk IHRoYXc= IGt2aW5uZQ== LnJvYm90 INGC0YDQtdGF IEZQUw== INCw0LvQuA== IGFyaXNlcw== Y2xhdmU= LXplcm8= X2Z1bmN0aW9ucw== IHJlZ2w= IHRhbmdpYmxl 0LvRg9GH IG1hc3R1cmI= 5bmz5Y+w55u05bGe ICM6 5qGl INGE0LjQug== IERyZWFtcw== IFN0YW1w INin2YTYqtmI2KfYtdmE IFNldmlsbGE= IERJTg== XQoKLy8= aWVicw== 0YPRg9C7 U2Vh IGFrb2tv IGN1bmc= X0ZBQ1Q= IFJhcmU= IE3DqXQ= 4LK14LK+4LKm IGlub2M= 4buK aW5ncmVkaWVudA== 4LWB4LS14LSw 5ouf 4YCU4YC54YC4 IHByaWpl 0q/Sr9C9 IHRlc3RhbWVudA== IFJhYmJpdA== dW5jYXRlZA== xLF5 IERBTw== CXdyaXRlcg== IGxhbWlu X2NvbG9ycw== 5byA5bGV YXphbg== IHB1YmxpZWs= Wyo= U2VuZGluZw== Y29tbXVuaWNhdGlvbg== IG9mcmVjZW4= IHZlcnphbQ== IHBydmk= 1bjWgNWl1bY= IEFzb2NpYWNpw7Nu IEtZ IG1sYWQ= INio2YPZhA== IFJlaW4= IG1vdGl2ZQ== cmVsdQ== 4LiU4Li5 YXN5bmRh IysjKyMrIys= IGVuZHJvaXQ= IFByb3RlY3RlZA== INC00LvQuA== 4K6q4K+G IExlaw== aMOp Rml0bmVzcw== 5byC5bi4 cmlt IHdvbmRlcmZ1bGx5 J3o= c2NvZGU= U2Vz IEdvcmU= ICsjKyMrIysjKyMr IFBoaWxpcHM= LeCkqg== U3dpcGU= IHNoaXI= IGlzdGlmYWQ= INCw0LLRgtC+ IOCwruCxguCw INC/0L7RgtC10L0= IGludm8= IEJhcnM= IFNjb3V0 IGNpcmN1bXN0YW5jZQ== 0L/RgNC4 IHNraWVz 4LC+4LCC4LCf IFNvYnJl cmVlcA== IE5vcnNr IG5vc3RyZQ== IFBvbHllc3Rlcg== 4LWB4LSC4LSs IOWls+S6ug== L3RoZW1l IGRpZmbDqXJlbmNl LiIpCgo= 2KrZhdix IGNvbWVudGFyaW8= IHBvcnR1Z3U= IHBlYW51dA== 4Kq+4Kq34KuN4Kqf INC/0L7QtNC/0LjRgQ== IGFtYWNo LXN0b3J5 IGltcHJvdmlz LWxvZ2lu IG1hbmtpbmQ= LmFydA== INmE2YI= 2K7YqtmH Jykpewo= IGFtZXJpY2E= IOCqquCri+CqpOCqvuCqqOCqvg== 4YCv4YC24YC4 IG9ic2Vzc2lvbg== IGt1bGE= KCci aWVkeQ== YWxlbnQ= INWH IOCwpOCwrg== IGNvbnZlcnRpcg== KGxpc3RlbmVy XEJsdWVwcmludA== dW1hbmE= IFdhcmU= aG9sZGluZw== IOCmm+Cmv+CmsuCnh+CmqA== IE5pdA== ZWxpamtzZQ== SW1hZ2Vu 5Yqx IEVyZw== IEdlc3VuZGhlaXQ= IHNwYXJrbGluZw== IOCkleCli+Cktg== CXBvc2l0aW9u INC/0LXRgNC10YE= IHVucmU= 6aKG5aWW IOCqquCqueCri+CqguCqmg== IHRyYWJhamFuZG8= U21pdGg= aWZhbg== KCd7 emnEmWtp IHNoYW0= LlNlcmlhbGl6ZQ== 4KS54KWH4KSV4KWL IHZpaW1l IEJvbmU= INC30LDQvNC10L0= INix2YjYrQ== IHJpY2h0aWdlbg== IHRlcmNlcg== IOCkteCkv+CksOCli+Ckpw== 4KS/4KSV4KWA TG9ycw== IGJsb25k 0YLQuNGH0LXRgQ== X1Rv 5peg6YGu5oyh X3JnY3R4 IExBU1Q= IGvDqw== IE1vZw== X3NpemVz 15HXlw== INC60L7RgtC+0YDRi9C8 4Ka44KeN4Kal4Ka/4Kak IGVuY2Fwcw== IEZyZXF1ZW5jeQ== IteQ cmVtYXJr dXJ2ZXk= ZWRpdGVk 7Zi8 IHVudQ== IHBvcmVz X3RibA== IHBsZW5h INC80LXRgdGP0YbQsA== b2Jhbg== 1aHVttWr1oE= LlBhcmFt IOC3g+C3hA== QmF0dGVyeQ== IHBhbHM= IHNlbnNvcnk= KSl7 IGNvcmFs 16LXnNeU INC+0YLQstC10YLRgdGC0LLQtdC9 IEdIeg== IENMSUVOVA== IGRpc2FzdGVycw== X3JvdW5k INGI0YPQtNCw0LDRgdGC IGVudGnDqHJlbWVudA== LXN0YWdl IHRldGFw UHJlZmFi IFBhdGlv IFBvd2VsbA== IOCkteCkvuCksA== TmVhcmVzdA== quGDrg== cmVjdg== 4KuN4Kqs Z2F2ZQ== IGRla29y dmVydGVycw== IHZlcnN0ZWhlbg== IGZlbGxvd3NoaXA= IOy9 6bKc LnRha2U= PCQ= L2V2ZW50 IM66zr/Ouc69 INiq2LXZhdmK2YU= 4buQ IGJlc3M= INGB0LXRgNCy0LjRgQ== YWx3YQ== IOy2lOyynA== 1bjWgtW21aHVrw== RmluZ2Vy INW/1aXVstWr IHZvb3JiZWVsZA== 76yB IOS5jA== IHB1bGE= INm+24HZhg== IMOkdQ== b3RoZWVr CWxibA== c3RhbmRpZ2hlZGVu 6ri0 J2Vuc2VtYmxl INGB0LzQtdGA ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== INC70LXRh9C10L3QuNC1 IOCuruCuqQ== IGRlbW9jcmFjaWE= IHRlcnJpZnlpbmc= IFFVQUw= IEFubw== d29jaA== IHBlZWw= IOG7jWph ZW5zY2hhZnRlbg== IGRvd25zaWRl CW1lbnU= LlVzZXJz aXNrZXk= UXVpdA== IGVhdQ== IG9sbWFr IOCwhuCwruCxhg== IGNvbmNvdXJz 4oCYeg== IENhc3VhbA== LmFsaWJhYmE= IENyaWNrZXQ= INC20L7Skw== Lmxpc3RkaXI= cmVkaWNhdGU= VGV4dHVyZXM= X2lkZW50aWZpZXI= IG1vdXI= 4Li44LmI4LiZ b3R5 IGTDqWZhdXQ= IFBlbmluc3VsYQ== UHJp INC/0YDQvtGB0YLRgNCw0L0= cGhhbA== b2thbA== IHJlbmZvcg== 15nXl9eU IOCktuCkrOCljeCkpg== INin2YTZhdmG2LLZhA== cmVjZWl2ZWQ= VHJhZmZpYw== INmF2YTbjA== Lic8Lw== b2xlbQ== Lg0KLy8= IG1pdGlnYXRl IEJsb2dz IHNwb2xlxI0= INmC2LfYuQ== IHZhcmU= IHJlY29nbml6aW5n IHN0YWdnZXI= 5Ye6546w IOCwheCwguCwpA== IFNwbw== KG5l IEZlcmd1cw== Um95YWw= 15XXoNeZ16o= IFNVTk5Z bWVybg== IGh5em1hdA== IERlc3B1w6lz IOy5nA== CWxvYWQ= 4K+A4K6w INmI2KrYrQ== IEtvbW1lbnQ= zq/Pgw== UGFr 4LGH4LCc IExlaXA= YW7DoQ== IGFjYWRlbWlh IFdhbGxhY2U= IGhpZXJ2b29y IEdSRUFU IFNoaQ== KHdyYXBwZXI= IFByb2NlZA== IGdlb2dyYXBoaWNhbA== IExlaXQ= IHRpbw== cWU= YXplZA== IHJvdg== IOCwheCwsg== IEVyZ2Vibmlzc2U= YWtvcg== IG1pZ3JhbnRz SU1BTA== YW1hYw== bmF0aW9uYWw= JycnCgo= LXRvdWNo IHRpdHVsbw== IERlc2Fycm9sbG8= X0N1cnJlbnQ= IM+Azr/Ou865 aXp6YXJk LmRlY29y INii2KjYp9iv IG5pdHI= INiv2YjYs9iq IGjDtmc= 4LCf4LGN4LCy IGt1Z2lyYQ== IHBsYWNh IHBlcnRpbmVudA== IHZlZ2V0YXRpb24= 5b+F5Lit RE5B 2YjZhdmK2Kk= INGG0LXQvdGL IHVudWk= INC00L7QtNCw 1brWgA== 0LjQtNC40pPQsNC9 cnN0 LXN0cmlwZWQ= IEhhZw== INCw0YjQuNCz IGFyY2hpdGVjdHM= KG5z IGRpc2Nlcm4= ZWx3YQ== 5oGL IGJyb2o= IHNhbmR3aWNoZXM= aW5zaWRl IFBhdXNl INCw0LLRgtC+0LzQvtCx0LjQu9GM z4TOuc+D 4LSk4LWN4LSl IFlhbWFoYQ== IGFkdmlzYWJsZQ== 15bXpw== INCw0YHRiw== LuKApgoK dWRpbmc= IOGDm+GDmOGDo+GD IHBhdWw= IEJH amFkZQ== IOCqheCqpw== KCJcIg== IERhcndpbg== c3Ro 2qnYp9ix24w= bWFrZW4= RmluYW5jZQ== IE9V IEF5dW50YW1pZW50bw== IHbhuqVu KQ0KDQoNCg== 2KbYpw== INmE2YTYrw== IGxpYnJlcw== IGZvbGxvd2Vy 7ZWY7IS47JqU IGFtYmFv KFVSTA== IGFraQ== 4Ka44KeN4Kas IGJlcm4= YXRhw6fDo28= IHRheHBheWVycw== LnNlZWQ= 65Cc64uk aWZsZQ== INC00LjQsg== PEludA== IFZlcml6b24= ICIuLg== Q29tbWVyY2lhbA== bsO9bQ== dW5hbWk= IGJpdGVz IGxvZGdl INGB0LDQvNC4 fWB9Cg== INiy2KjYp9mG bGFx IG5hc8SxbA== YWlzZW4= IERvbWVzdGlj IOCuieCusA== IEZvcmV2ZXI= 0L7Rg9GA dmzJmXQ= IGZsdWlkcw== IGtlY2ls bmlrdQ== Xycr IEFsdGE= IG5lbsOt w6lpZXJlbg== IGltcGxpY2E= X21vYmlsZQ== LXNhdmluZw== IENhdHM= IHRoaXJzdA== INW21aXWgA== 7YWQ IGp1bmN0aW9u LkF0dA== L1k= IHZlcnZv IOCkuOCkueClgA== QnViYmxl INin2YTYotiu2LE= RGlhbA== dXNlZ2E= IMmZbg== b2NoZW1pY2Fs 16bXmQ== IG9ibA== ZW5jZXJz 2LPZvg== a2nDsA== IFNrZXRjaA== IGRhbWVz IEhydmF0cw== U291bmRz fQoKCgoK IG9yZGluYXRl 2LHYp9i3 IHN5c3TDqG1lcw== IGdhbWxl IEp1cGl0ZXI= cml0eg== L2Fz IEFkbWlzc2lvbnM= bWljYQ== IPCfmIkKCg== INW61aHVtdW01aHVtg== IHBlcmRh X1ZJREVP IHBlcnNvbidz IFZpc2l0b3Jz IHByZWo= IOCmpuCmv+Cnnw== IHNlbHRlbg== IHdvbmVu IGJydQ== IE11bmd1 cGFxdWU= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IFdlbHNo IE1UVg== 4Yk= 15nXkNa3 X2ZpdA== IHN5bA== T3RoZXJz IG1hdHJpeg== IGNoZXJjaGVy b3BsYXM= LWdyb3dpbmc= X2lj 4YOj4YOg4YOV 44GQ SXN0 IEthcmRhc2g= ZXNzYWdpbmc= IERlaW5l T05EUw== IGbDqnRl IG1lbnN0cnU= INin2YTYq9in2YbZitip IGR1aW5l IE1hcnNo IFdPUkxE IGxpaHQ= IGdyYW5kcGFyZW50cw== LkJhc2lj IExlb25hcmRv 4KWN4KS24KSo QVNISU5HVE9O 4Lil4LmI4Liy4Liq4Li44LiU IHNpbWlsYXJpdGllcw== IGRpc2FkdmFudGFnZXM= IG91Ymw= IEhvbGlkYXlz INee16LXoNeY16k= IOi+kw== IC9e LUJlbno= UE9M 0L7Rh9C90YvQtQ== IGRpc2NhcmQ= TlNVUkw= IE1vZGVsbA== 4pSB4pSB4pSB4pSB IHZpZW5z IEVOQUJMRQ== X0Jhc2U= IEVsZA== INqp24zZgQ== IHJpc2Vu 1oDVqQ== KENvbW1hbmQ= IHNvYWs= IOCyqOCyl+CysA== 0pA= INi02KfYsQ== INiz24zYp9iz24w= b3Bob25l IEtvZGk= 4K6e4K+N4K6a IHBhaXJpbmc= JGM= IHJlZ3Jhcw== LycK IOC0uOC0vw== cmF4 IFR1Yw== Zm9saW9z T0lE IF49 IOm8 IGJvaWxpbmc= Q0RD IGlzb2xhdGU= Lz48 IHdlaWdoaW5n IGlzYWFu IGFtcGxpdHVkZQ== dXRt IG1pbGl0YXJlcw== IERvY3RvcnM= IGN1ZW50YXM= bWxlc3M= IOCkquClh+Cktg== IHdhYXJvbmRlcg== IGVtb2Npb25hbA== IGRvbG9yZQ== IEJI dXJzYWw= IOCkquCljeCksOClh+Ckrg== ICIiOw== 2LnZhNmF b3VyY2Vk IGZvcnNrZWxsaWdl IOCqueCqvuCqsg== IGRpbW91bg== XQ0KDQo= 0LDQutC+0LI= IGNoaW5lc2U= 5b2p56Wo5byA5oi3 IFJlaWhl U3Vz VGllcg== INGB0LjRgA== YW1hdGFu IEV4dHJlbWU= LmRlc3RpbmF0aW9u IHB1Ymxpaw== IOCkieCkqOCkleCliw== IO2emA== PEZpbGU= IHJlY3Rhbmd1bGFy IOuouA== JSIs YW5kYXM= YXB1cg== z4TOuc66z47OvQ== IOiq c3RyYWF0 4Z6A4Z624Z6a4Z4= IFNlY3JldHM= IMO9YWc= IGF0dGVudGl2ZQ== YW5jZWxsb3I= LmNvbnRyYWN0 IOGDkuGDkOGDnOGDkOGDquGDruGDkOGDk+GDkA== 6buO 2LPYp9mF IOCkm+Cksg== a2F1 Z2Lhurk= INin2YTZhdiv2YrZhtip QUNZ 0LXQs9C4 IHN1cGVycw== IHdhdmVsZW5ndGg= IHR1cm5v LmRpbQ== INeU15DWuNeY c3NjaA== 0LjRgNC+0LLQutC4 IGJ1cmVhdWNy IHNpbnVz IEZO IHNhZG5lc3M= IM61zr3Pjg== Q2xvc3VyZQ== 1oTVuNW+ IG5vbnNlbnNl KHByb2dyYW0= INC40p/QvtGD IHByZXNldA== IGFjZWxlcg== LWJn e30KCg== IMOlcnM= IOWkqeWkqeS4reW9qeelqOS4jeiDvQ== b3JndW5n aXRlcmFscw== IHNsYXNo IG1haXRo IG5vaXN5 IGluc3RydWN0ZWQ= INin2YTYr9in2K7ZhA== dXBsb2Fkcw== IGdlcmljaHQ= IEFwcG9pbnRtZW50 a3JhZnQ= bWVyemVu 4KuN4Kq5 IGN14buZYw== 2KjYudiv 44GB LkNhbGVuZGFy 2YfZiNiv SkQ= IEdlcmFs IERlbms= U2xvdw== 0LPRi9C9 X2RzdA== ZXJyYXI= IO2PrO2VqA== IGNvbG9yZQ== IE1lY2hhbmljYWw= IG9yZ2FuaXphY2lvbmVz IOCqsOCqueCrjeCqr+Criw== IHZpc2Vy 7J6Q64qU 06nQvw== 4LS+4LS14LWN 4oCd2Iw= Lm5vbWU= IFNhcA== IHBhdGVudHM= IGpq acOrbnQ= IHZldHQ= IGtsYXNzZQ== IOKUgg== IHByb3TDqWdlcg== 4YOQ4YOp IGJvcmc= INek16nXldeY 15nXqteU fX0+Cg== cHJpbnRlZA== Y29udGludWVk IGF1dGhlbnRpY2l0eQ== L3BuZw== IHJpY2h0ZW4= 1Y4= IHNjYW1z RlVM IFBMQw== IHRlZ2E= dXRlbA== 2Y/ZhQ== INmB2KrYsdip cmHEjQ== IHPDoQ== INC60L7RgNC8 IEJ1bGc= IMOpZGl0aW9u IGZvcmVncm91bmQ= IE5ld3RvbnNvZnQ= IHRoZWF0ZXJz U2NoZWR1bGVk 4LmA4LiX4Lie dOG7jQ== R292ZXJubWVudA== IOCkueCkvuCksuCkvuCkguCkleCkvw== amlhbmc= IG9wZXJhY2nDs24= IOGDleGDkOGDoA== 5paH5a2X IHBlc3Rz IG3DpW4= IGh1dQ== IENhc2Vz YmV05a6Y572R IGFkdmlzb3Jz Y29uZGl0aW9uYWw= IENvYWxpdGlvbg== aGFuZGxlZA== IG1zZ3M= 5qGj IHByZXBhcmF0aW9ucw== X1dBUk5JTkc= IHJlY2xhbQ== IHNlbnRl IGFo4buLYQ== IGhlZXJsaWprZQ== IGFudGlib2R5 4oCM4LCw LWRlc2lnbg== IEthag== IG1hbmlmZXN0YXRpb24= 44GX44G+44GX44Gf IOGAkg== IE1lZGk= 4LS+4LSk4LWG IOCwteCwv+CwoeCxgeCwpuCwsg== IHN0ZXJrZQ== IHJleQ== INCR0LA= IFJhZGl1cw== 4KS/4KS54KS+4KS4 IEVjb24= 4Z+S4Z6T4Z674Z6E IFNhbmN0 IEluY29ycG9y d2FhcmRl IE1vcmdlbg== IGJhcmFkYQ== 5aix5LmQ55u05bGe IHTFoWU= L2Vz 0LPQsNCw0YA= VXN1YXJpb3M= IHN0cmNvbnY= 5r8= ZWdhbA== anVtcA== IOCmheCmguCmtg== IFB1bmphYg== 0LDQu9GM0L3QvtC8 INC90LDRmA== INGA0LXRgdGD0YA= 4LCI INW21bTVodW2 c3RyYWN0aW9u YWduZXM= ZW5jdg== IikpLA== IGV0ZA== IGJlc2U= INGC0ZbQuw== IHBpb25lZXI= IEZldw== IHZlcmlmaWM= INmG2q8= IHN1Y2Nlc3Nlcw== IHN0cmF0w6lnaWU= YWN0aW5n LXRlcg== X3Rlc3Rz IGV4Y2hhbmdlZA== INin2YTYrtio2LE= aXZlc3Nl X2V4cGVjdGVk IE1hemRh CWxlbg== IHBlcmtz cml0dQ== IHBhcmtlZA== IEFydGlmaWNpYWw= 4KS/4KS34KWN4KSg aWd1cw== 0LrRg9C/ Y2V2 IHBldXBsZQ== IOq4uA== 0LXQvdC90L7QvA== IGTDunZpZGE= c2hhbg== c8O4 Oiw= YW5kZXJlbg== 4LSZ4LWN4LSZ4LSz4LWB4LSf4LWG IM66zqzOuM61 INiv24E= IG1haWxib3g= IFZhbXA= 5q+r IHFlZA== Uk9PTQ== IEpwYQ== 0LXQu9C40Lo= ZW5kZXJyb3I= YXJsdWd1 Y2VudHJhbA== 55qG 24zYsdmH aWNrbGU= IGlub3g= IOCkrOCkv+Cksg== LWN1c3RvbQ== X0FTU09D IGRpbGk= 0L3RltC60LA= 2YLYr9ix 4Kak4KeN4Kas IOywvQ== IGludmVzdGly KHN0ZXA= amVyb3M= IGNhcnZlZA== UGl4bWFw IHNhbXRpZA== U3RyZWFtcw== 5LyZ VW5saWtl LkFwcGx5 IHB1bmlzaA== 2KzYp9mH SVRPUg== RURJVE9S 0LjRgNGD0Y7Rgg== IGdqb3JkZQ== IMSR4buLYQ== IEFnZW5kYQ== IEdvYWxz IHNjb2w= ZGVyaXZlZA== IGNhcmNpbg== 7KeA66W8 INGB0LDQvNGL0Lw= 0J7QvQ== IOCkquCkuOCkguCkpg== INC/0LDQudC00LDQuw== b3JnaWE= IFN0eWxlZA== aXp5 INin2YfZhQ== Q0FN IGh0bWxzcGVjaWFsY2hhcnM= KHVpZA== bnVtcHk= IENhbmFk 56K8 4Lir4Lij4Lix4Lia cmVncw== IENvbmRpdGlvbmluZw== 4Z6R4Z64 IGFwcmVuZGl6YWpl YW50YW4= IGNvbnRyYWRpY3Q= IOCkuOCksg== 0YfQvdGL0YU= L3ZpZGVv X3dlZWs= YXZpbGlvbg== IGVzY3JpdGE= IGFjYWRlbWljcw== IHplc3Q= 0LrQuNGB0YLQsNC9 bGhz aXJyb3I= IGNyZXNj 6JCo IEJlYW0= IHDDqXQ= IHZlbG9jaWRhZGU= IEthcm4= IG5hd2V0 5pWw6YeP IHRlbnU= INmF2Yjalg== INii2YXYrw== IMO8bA== IFZhY2F0aW9u IOCmquCmvuCmsg== IGdvdXQ= IEZsZWV0 IOCktuCksOClgA== IEVzY29sYQ== 2LHZitmE IOCwl+CxjeCwsA== IOC0quC0sOC0v+C0tg== IOCwleCxh+CwuA== IE5Q IGtpdGNoZW5z IGNvbnRyYWlyZQ== INij2YbYpw== RGVuc2l0eQ== zrXPgA== cmFucw== ZmFocnQ= INC00LXQs9OZ0L0= aG9sdA== IFJlc3RvcmU= IG1pbmRmdWw= ZXJlw6dv IHByZW1pbw== bGlmdA== LXNjcm9sbA== IExlYW4= IOCuquCuow== dWJhcg== IHBu UXVhbGlmaWVk INio2YbbjA== YXJiZWl0dW5n dWJpc2hp U2FpbnQ= IER5bmFt IHNsb2dhbg== IGFra29y 4KuN4Kqq4Kq+4Kqm b25hbg== UHJpbnRpbmc= IHV0aWxpc2F0aW9u INC60LXQudC40L0= IG5heWU= aXNzYW50ZQ== LmNyZQ== INCz0Y3Qtg== IGFidXNlZA== a2FtZXJz KSoq IHJvdG9y IGvDtXI= IHZhaWs= RG9jdHJpbmU= IGRpcmVjdGU= INit2YU= INGe0Lc= w6lzaQ== IHNocmltcA== IGR1ZGFz INW21aHVrdWh1oDVodaA TW9kZXM= IEZlbmc= IOCkpuClh+CkluCkvg== 4oCZaWQ= dW51eg== QFJlcG9zaXRvcnk= INiq2KfYs9mI eW50aGVzaXpl IENoZWNrb3V0 IEtvdGE= IHZlcnNpZQ== IOCmheCmqg== c2NodWxl IOCkm+CliOCkqA== 0YDRi9GB 4YOQ4YOg4YOa CWJ1aWxkZXI= IEplcnNleXM= aXRzdQ== cmg= IGRpcmVjdGluZw== Ymo= 6L+F6Zu3 YXBpdA== ZXhhbQ== INC805nQutGC IER5bmFtaWNz IGV2ZQ== QmV0dGVy 5q+V 4K6x4K+N4K6x4K+B IE5TRGljdGlvbmFyeQ== IGRlaXhvdQ== IGTDoA== RGVsYXllZA== IHZlaMOtY3Vsb3M= VGFu 5oSP6KeB 0YDQsNGC0YzRgdGP IEt2 IEFuaW1l INij2YjYsQ== X2RpcmVjdA== IGNyaXNlcw== IOC0leC1i+C0nw== IGx1bXA= IEFVVE8= a3R1 INC90LXRgdGC IOasog== IFN0b2Zm INC90LjQtg== IG1lc3Nlbmdlcg== 5L6L5aaC INmB2YfZiA== KFdpbmRvdw== IOC0quC1geC0seC0pOC1jeC0pA== IGHDp8Sxa2w= IFdoYXRzYXBw Q3N2 IE1u 5bmz5Y+w5byA5Y+3 IGRhb2luZQ== IExURQ== YWR6aQ== IEd1aWRlcw== eW5ud3lz INC/0L7QtNGC0LLQtdGA0LY= IHNvb3RoaW5n IFBvcHVw cHVudGVu IGluZXF1YWxpdHk= 0q3QsNC30LDQsNGA0LA= LtC0 Z29vZw== w7Zw IHJlc3BlY3Rz CWJvcmRlcg== IHNpdHVhY2lvbmVz IGJvdXF1ZXQ= 4LC/4LCo4LGN4LCo INC80LjQvdC40YHRgg== IGtvdWw= 5Zyw5pa5 IGNoaWFy INGC0LDQutCw0Y8= 4LSo4LS/ emNh IGFnZW50ZQ== 4LKC4LKc IFNpc3Rlcg== U0VBUkNI IGdlc3A= IOGDoOGDkOGDmw== IFJlYWNo IHphcmFkaQ== d2VpdGVy 4YOY4YOh4YOX4YOV4YOY4YOh IGhlbmQ= ICMjIyMjIyMjLg== KGdlbg== L3NlbGVjdA== IGF0dGFja2Vy 4Ka+4Kaw4KeN4Kal w61tZQ== IEJlbm5ldHQ= IEZyZW0= IHLDqWd1bGnDqHJlbWVudA== IGZsb3Q= LnRl IGNhYw== INGD0LzQtdC90Yw= YWxjdWxhdGU= aWthyrtp IHF1YWxpdMOg IGpzb25pZnk= IGZpbGhh YmVyb3M= VU5USU1F IGludGVuZHM= INCw0LvSk9Cw0L0= KQov yZljyZlr IGVuZXJnaQ== LXdvcmQ= IGTDs25kZQ== IEt1cA== X2xpbWl0cw== cW4= QXR0ZW50aW9u QVVU U2VydmVycw== IGdlYXJlZA== 1aHWgNWo xKfEpw== CWNsZWFy LWlw IOGDo+GDoQ== INiv2YfYrw== 4LC+4LCw4LC+ aW1lcms= IEtvaw== IElncmVqYQ== 5Zmc5Zmc IFRPYmplY3Q= IHBvdXZvbnM= Qm9uZQ== RGlmZmVyZW50 IOWIm+W7ug== Z290YQ== IFJS INC00L7Qu9Cz0L4= YWpq IGNvbGxlY3RvcnM= IGZvcm11bGFz IHdpdmVz 4LSo4LWN4LSk4LSq4LWB4LSw IHByZXNjaG9vbA== RWxpbWluYXI= 5a6M5pW054mI IE1lcmNhZG8= 4LWA4LSq IGFuaW1hdG9y IHDFgg== IHRla25paw== TWlqbg== KGFuZHJvaWQ= YXRvcml1bQ== 4KSC4KSs4KSI IOCqleCrjeCqsA== IEFtZW4= 56iz6LWi LdaA1aQ= CXJz IHJlY29yZGFy IGJhbGxldA== 5pyA5aSa IFN1enVraQ== IE9ybw== IE1JQw== IOC0leC0vuC0sg== KHNwZWM= LS0tLQo= LnNhdmVmaWc= IGVtcGF0 IM+Gzr8= IGRpYWdub3N0aWNz 5raI6LS5 IGNvbWVuesOz dGlwcw== IGxldmVydA== INCx0YPRgtC70LDRhQ== b2dlbmVzaXM= dmVsaXNv IExPQUQ= 4LOm IHRhd20= aWRlbmQ= IGbDrQ== c2F0eg== IHJlY2V2b2ly aXpo IFBsYXRh INi32YjZitmE IHNhYmFi IG92YWw= INC+0YLRi9GA INC80LDRgtC10YDQuNCw0LvQvtCy SmFt bGVtcw== c3Bpbg== KHBhcmFtZXRlcnM= IERvbHBo cGFyYXRlZA== 4Z+l KGFsd2F5cw== IOOCrQ== PT4k LnBpcGU= IHByZWNhdXRpb25z X2F4aQ== X0NPREVT ZWNoZXM= YWh1YQ== ZW5kZWxlYQ== IG7DpGNoc3Rl Y8O8 IOCmnOCmvuCmqOCmvuCmqA== QU5ETw== RW50ZXJwcmlzZQ== IEFuZGFs 6rCI 2LXZiNix 7I0= IGVtcHJlZ28= dmlld2Vy IFNoYXJvbg== IHRpbGJ5 2KzYp9iy INi12YbYp9i52Kk= U3Zj INqv2r4= IHByb2R1a3Rlcg== RWxz 4Lie4Lij4Li14LmA4Lih4Li14Lii4Lij4LmM IFNwbGFzaA== IOyTsA== INeV15XXotec IFBldGVyc2J1cmc= IEVsZWt0 w6JuxIM= IHVuYXV0aG9yaXplZA== IGNyZWRpYmxl IOCwieCwguCwpuCwvw== PWZsb2F0 IFRyYW5zaXQ= INqp2LPYp9mG bWFjcm8= INei16k= IOma QXVzdHJhbGlh IM+I IOyXsOq1rA== VGFuaw== INC30LDQstC10YDRiA== IExpZmVzdHlsZQ== U29saWM= IOCkuOCkguCkleCljeCksOCkrg== IMOpdmVudA== dm9sZQ== IHBsYXlmdWw= eW91dHU= IOGDkuGDkOGDnOGDleGDmOGDlw== IGZhdWx0eQ== IENvdmVyYWdl INee16nXlA== 4KmN4Ki5 IGhvYmJpZXM= IHphamVk aXZhbHM= IGFncmVnYXI= INC60YDQsNC5 X2hvdXI= IHBvbGljaWFs IG1lZGljYW1lbnRvcw== IFRveXM= IHN1Y2Nlc3Npb24= LmF0dA== IE1vbnJvZQ== INC80LXQutGC IHhpbg== J10pLA== INC40YHRgtC40YTQvtC00LA= Om51bWJlcg== INCj0LrRgNCw0LjQvdGL INin2YTYudix2Kg= KGFwcGxpY2F0aW9u IGVzdGFibGVjZXI= IHJvYXN0 LmZlYXR1cmVz dWNpbg== IGxpZWJlcg== IFBhc3Npb24= IHNpbXBlbA== YWxpZW4= IOC2uOC3mQ== LkJ1c2luZXNz 1bXVuNaC1b0= IHTDqXJtaW5vcw== IOazqOWGjA== IGVzcGHDsW9sYQ== KEVsZW1lbnQ= IFJ1dA== IG3DqWxhbmdl 5Yeh 4KS44KSt4KS+ IE1QTw== IHdoYWthbQ== W2c= IOGDnOGDkOGDrg== 4YKQ bWFt IO2DnA== IGdlbmlhbA== IG1pbHlvbg== IENvY2E= IFBlbQ== IScsCg== INC40q0= IOCkuOClgeCksOCkleCljeCkt+Ckvg== eHRh IHNleHVhbGl0eQ== IEpldHM= IOC0rOC0qOC1jeC0pw== Ymxpbmdz c3RhcnRlcg== INCw0YDQsNGB INW+1aXWgNWh1aI= IG3JmW4= IGFkZWN1YWRv IHNjaGVybQ== INin2YTYpdmF2KfYsdin2Ko= 0LnRi9C8 X2VkaXRvcg== IMO2bGs= IFN0cmluZ3M= XTw= 0J7QnQ== 4peO IGJvcnJvd2Vk IHBhbmNyZQ== IHRyZW51dA== 0L3QsNGH0LDQu9Cw b2x5Z29u SW52b2tlcg== LmtpbmQ= QXNzZXJ0aW9u IFZvbGdlbnM= 4KWB4KSy4KS+4KSI IHRlbnNl cGFyaXNvbg== LdC70LjQsdC+ INi52YTYp9mF LlJhZGlv 2YrZhdmK IGRpc3RyaWJ1dG9ycw== IHNjcmVlbmVk IHJlZmVyZW5kdW0= 4KWD4KS34KWN4KSf X1BBWQ== IGJpZg== aW5ncmVkaWVudHM= YXJjaGljYWw= INKh0Ys= YWthdGk= X2xpdGVyYWw= IGNsYXNzcm9vbXM= SW9u IGVrc3RyYQ== IENvb2tpbmc= IE1vbmV0 2LHYp9iq2YrYrA== IENvbmNvcmQ= LklOU1RBTkNF IHNwZWNpZmljcw== 4LiT4Liw IHF1YWxz 4LS/4LSy4LS+4LSj4LWN X3RyYWluaW5n XSsrOwo= X0RFUFRI Y29uZQ== IGluZXZpdGFibHk= INio2YrYp9mG INec16LXpg== IGVudGllcg== INC90LXQv9GA ZWR6YQ== IOCkuOClgeCktQ== w6Rpc2NoZW4= 8pCC IFZlbmV6 IGFhc3Rh LnN0dWI= w6FzdGljYQ== IOColeCphw== TWF0ZQ== dWVibGVz zrzOrc69zrE= LmZ4bWw= LXN0cmVhbQ== LkFM IGtvdGU= aWN1cg== ZW1hcA== IGltcG9ydGU= 2LnYr9iv IOW9qeelnuS6iemcuGFwcA== Lk1lbWJlcg== IOCksuCkl+Clhw== IHRocm9uZQ== SW1hZ2luZQ== VW5zaWduZWQ= IEJlaW0= ZGVudA== IOCwruCwvuCwnw== IHp1bWluZGVzdA== IHBhc3NlbmRl INC20L7Smw== IHdpY2h0aWdl X3VwZGF0ZWQ= IGNhcmFjdMOocmU= aWV0YQ== IGFrd+G7pQ== IGZlbGE= 15nXoNeV16o= bGVpdA== a29tbQ== INmB2Ko= IEFsbGE= 57un57ut VMO8cmttZW4= IHZlcnN1Y2hlbg== IGNvbnRhaW5tZW50 IGthbWVyYQ== IHdvcnM= 0YbQuNC+0L3QvdGL0YU= IHNjYXJl 0L3QtdC90LjQtQ== IOCkuOCkv+CksOCljeCkqw== CXN0cmNweQ== IGlodA== aXRhZGE= 0LXRgNGD IGxlam9z 554= IGtodXN1cw== 4K6y4K6+4K6u4K+N LmJ1cw== IHVpdGRhZ2luZw== INin2YTYp9iq2K3Yp9iv INC40LfQvNC10L3QtdC90LjRjw== IGJhbWJvbw== UGVhaw== 4KS54KS+4KSB INC00L7QvQ== LlRFWFQ= IGJyb29k dWNoaQ== a2F0YQ== IEFVVEhPUg== 5o6l5Y+j KHdvcmRz IEJsb2dnZXI= U3BhY2Vz X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== IFRyYW5zZm9ybWF0aW9u IOCwquCxjeCwsOCwreCxgeCwpOCxjeCwtQ== IHRhc3Q= IGFjdHVhbGlkYWQ= IEJyZWFk IGdhbGxvbg== IHB1cnNl aXhlcw== IE3DqWQ= IOGDoeGDkOGDrQ== INGC0LXQu9Cw IGRlbm5vY2g= INGB0LXQvNC10Lk= cGFzdGU= INeU15DXkdef IGRpc2NvdmVycw== LmRpcmVjdA== INiu2YjYp9mH IENpcmM= IHRvZXBhc3Npbmc= 0YLQsNGD IHN1YnNjcmliZWQ= IGJ1bGxldHM= aW5pZ3VuZw== bmlpdA== IExhd3M= 4Liy4Lib IGluYXVndXJhbA== J109PQ== INec15TXqQ== 5ram U01T IMOpc3Rl 56uf INmF2LTYp9mH dXRlbmFudA== IEFtZXJpY2Fz INee15zXkA== YXNzaW4= IOao INC10LQ= INGB0LjQu9GM0L3Qvg== dWxhbmc= INC+0LHRitGP0YE= 0LLQsNGC0Lg= IGthc3Y= 0LzQsNGC0YDQuA== IGh1cmQ= 0LDQsA== aHR1Yg== INin2YTYqNmE2KfYrw== INij2YrYp9mF YWF0aWc= IHJlY2ViZXU= IHRlbGV2aXNpw7Nu 4Ki/4Ki5 YWPEsQ== 4oCdPw== 4KWA4KS4 INi62Yg= ZW5jaWFpcw== X21vbg== KScpCg== IOadsQ== IFJleA== IOCkquCkv+Ckm+CksuClhw== IHZlcnRyb3V3ZW4= a29ub20= IEZhaWw= w6Nlcw== IGxlZ2VuZHM= INmF2K3ZhA== XScpLg== IExvcmVu IFVG 44CC5LuW Q2Fycw== dG9j IGJlaMO2dmVy 5Ye65p2l 4YOY4YOa4YOY4YOQ IGJvdXRvbg== z4HPhQ== TUlTU0lPTg== X09WRVI= IFF1YWxpZmllZA== INC20LXQvdGJ0LjQvdGL Yml0b3M= IGRleA== 4LGN4LCs INGA0LDQt9C90L4= IOGDqeGDkOGDmw== IGluYWRlcXVhdGU= LyI7Cg== aW5hbmQ= 6LSt5b2p5bmz5Y+w bGVldGNvZGU= U3o= ZW55YQ== cXVlYw== LkV4aXQ= LmNvc3Q= 64WQ IGlnbm9yYW5jZQ== yZlsyZk= IGZsYW1lcw== KSkpKTsK IGTDqW1vbg== IGRvcnA= X0FDVElWSVRZ IHRvbmVs 44Oa44O844K4 INCy0LfQsNC40Lw= IHZvcmhhbmRlbg== IHJuZA== 0q/QutGC IG1pbmlhdHVyZQ== YWjhu4th UG9ydHM= IHBvbHZv bWFkYQ== IG1hcmlu ICcnOw0K IHJlc2lkdWU= IHR4b2c= IHJlZ2Vscw== IGRpZXA= INeW15DXnA== 2K/Zhdiq 54i4 OiIpCg== YXl5 U2VyaWU= fQ0KLy8= IEdO IOCkueCkv+Ckgg== IGRlbmtl IGNodXnhu4Nu IGFsZXJn IEludGVydmFs INec15TXnQ== INeW157Xnw== b2xhdA== IEtsYXNz LHU= INmE24zZhg== IG1laWU= 6LeM 0LXQtNGM a8Wv 57+8 IOCqruCrh+Cqsw== IHNwcmluaw== RmFjZXM= L2Rpcw== c3Rlcnk= INC20q/QuQ== 6YWS5bqX IEZUUA== IGtvbmZlcg== PSInKw== IE1FU1NBR0U= IEZpYmVy dmXEjQ== w6VsbA== IGFtYmllbnRlcw== IHByaWg= 2ao= INin2rM= IGNvbnZpdg== X29wdHM= LXBhY2s= IOCyhuCyuA== INin2YXYsduM2qnYpw== aWxhcw== IOCkluCkvuCkqA== IHByZXppZGVudA== IGNvaGVz YXJleg== INGN0LrRgdC/0LvRg9Cw0YLQsA== RVc= IGJ1dm8= IGJvaWxlcnM= U3RhdGlzdGlj 5Yas IEF3cw== IHNpbmdsZXRvbg== IFlhbmtlZXM= IE1pZHdlc3Q= IGRlc3Nhcw== Q29uc3VsdGE= aXlvcnVt w7Fhcg== IGh1bW91cg== KG1hc2s= IOyKuQ== IGtvbmtyZQ== IENhcnA= IHJlYWN0aWU= 4Kqa4Kq+4Kqw 77yL IE5vdmVs IGFyY2FkZQ== IMWfyZk= 0YPQsdC70ZY= IGludGVsaWdlbnRl IC8vCgo= 5YG35YG3 INGB0YLQtdC6 IFBDcw== IHJlZ3Jlcw== INio25I= T0JK UHJvdGVjdGlvbg== IG5nYXRp IOGDoeGDkOGDluGDneGDkuGDkOGDk+GDnQ== IHJs IERlcmVr IOyWvA== UmVzb2x2ZWQ= 15LXmdep IGRpY2Vu IEhvbmQ= IGJlYXV0w6k= IHN0YXRpc3RpYw== IHJpc3VsdA== b2dnbGVy IEJlYXRsZXM= IGhpZHVw bGJz YWZhcg== IG1pc2g= IGFpcnBsYW5l RXF1YWxpdHk= KHN6 X3B1Yg== TWlzYw== IEVudHdpY2s= 4oCZSQ== 2YbZitmH IHBvbGxpbmc= INGP0LU= INWy IGFnaWxl INGA0LDQt9C80LXRiQ== 0LDRgNC8 IGtvbW1lbnQ= IOyeiOydhA== bWV0aG9kcw== z4bOtQ== d2Y= INqp2YXZvg== IGLEpw== 4KSC4KSX4KS+ IOCkruCksA== IM+AzrXPgc65zr8= QmVjb21l LWNvdW50 IHBlcXVlw7Fhcw== bm9ybWFsaXplZA== YW50cnk= 4LWB4LS14LSo4LSo4LWN4LSk4LSq4LWB4LSw IEpGcmFtZQ== 0Y3RjdGB IFJpbmdz IGdyYXU= 4Ka+4KaH4Kay OkAiJQ== IHbDqnQ= 0YPRgNC1 IGJld2VnZW4= IGJlZm9yZWhhbmQ= IEJ1ZGRoaXN0 Q29ycg== LnRyYW5zZmVy 0YvQvdGL z4POuc68zr8= 0YDQtdC80Y8= IGJsb2NrZXI= IE1laQ== b2xvZ2lxdWVz Z2VyYQ== IOCoueCoqA== IOuniOydjA== 2KfYrNix SGF0 0q/Rgg== IGdlc3RlbGx0 IOi2heeisA== IGFkZGljdGl2ZQ== IG5hZGF0 LkJBU0VMSU5F R0lT X3F0eQ== X2luYw== 0LvRgg== IG15cmlhZA== Y2FwYWNpdHk= IHdoZXJlYnk= IHp1c3Q= Li4uCgoK IFBhcmlzaA== LW1lZGlh c21hbnNoaXA= INmI2KfZhNmC IGht IGdlemVsbGln bGV5cw== SEVNQQ== IOCmrOCnjeCmr+CmleCnjeCmpA== INC/0LXRgNC10LM= INCV0LPQvg== IEZpbmRlcg== QUxP 0LDRgdC4 IG5ld3lkZA== 2LnZitmG KGRpbQ== IHN3ZWFy IOGDneGDr+GDkOGDrg== IFNhdmVk 6KaL44KL IGtvbnNl b2dlbnM= IGJhaGlz 4LGB4LCV4LGL4LC1 IHRoZXJhcGlzdHM= 4bqneQ== 0YHRg9C7 INil2YTZitmH dGhhbms= 6Zai6YCj IGNvcHM= IHB5cg== IOCkhuCkr+Ckvg== IOCwnOCwv+CwsuCxjeCwsg== INCg0LDQsQ== LmNvb2tpZQ== IOGDpOGDlOGDrg== INmB2YTZhQ== IEV3 IHJlc21p IHBpY3R1cmVk IG5hdHV1cmxpamtl IHRvbm8= IFNVUEVS IGNoYw== aXppxYg= IHRyYW5zbGF0b3I= IFRXTw== INC+0LfQvdCw0Yc= IFNlYWw= INC/0YDQtdC30LjQtA== IHNlaXplZA== KHNvY2s= bGxk 0L7QvdCw0YU= IllvdQ== 44CCLA== IEV4cGVyaW1lbnRhbA== IGthc2E= IGRhZGth IOCqnOCqo+CqvuCqteCrjeCqr+CrgeCqgg== IOuSpA== b2xpdGg= IGludGVybmFjaW9uYWxlcw== bGVzc25lc3M= w6RocnQ= bWV0ZQ== IEAk INGW0YHRgg== IGFsZ2VicmE= IFR5cG9ncmFwaHk= VFc= INGB0YLRg9C00LXQvdGC IHPJmw== IGluemV0 bWluaW11bQ== z4TOuc66zr/PjQ== IFfDpGhyZW5k IG9ubg== IEZyYW5z Lmd3dA== dnVz 5byA5aWW546w5Zy6 IGRpbWludQ== IGxhaGE= X1NUQVRJQw== INGE0LDQutGC0L7RgA== 0YHRjNC60L7Qs9C+ IOGDk+GDkOGDmOGDrOGDpw== IG9kaW8= ICciLiQ= IGV1cm9ww6llbm5l IGJvbnQ= IHRyYXZhaWxs INqG2YrZiA== IGRpbWVuc2lvbmFs IE5pZWRlcg== Iik7Ly8= IGNhc2FtZW50bw== aGV0dGk= 4oCdKS4= IGluZ3Jlc29z IFBhcmxhbWVudA== 4oCcV2hhdA== 4YOY4YOZ4YOQ UHJvag== IEhvbGRpbmc= z4TOv869 INiu2KrZhQ== INC90LXQutC+0YLQvtGA0YvRhQ== 4KSG4KSq IHJheW9u 0YPQvdGD0L0= IGdhcmFudGl6YXI= IHNpbXVsYXRlZA== LHVzZXI= aW5hdG9y xJNz IG1hbmlwdWw= IERpc25leWxhbmQ= aXphcmRz IGJveGluZw== 4Z+E4Z6A IHZpbGtldA== R3Jvdw== INmE2YjYqA== IGR2ZA== IHLDqWFsaXNhdGlvbg== QkVHSU4= 5LiA562J5aWW IG1lbHRpbmc= IGVsZWN0cm9t LDop IOCwpuCxh+Cwtg== IGdvbmQ= bWludXM= b25lc2lh IOGDkeGDkOGDleGDqOGDlQ== IOCkuOCkvuCkpw== IHNvbGFtZW50ZQ== dXZhdA== em7DoWw= IFZvcmF1cw== cm95cw== 4LKk4LON w7N0dA== IFdlaQ== IOCqrOCqqOCrgA== IHRyb3Rz CWNs IFNpbXBzb24= d29vcmRpZw== IENoYW0= IHZlcmbDvGd0 4Kqm4KuN4Kqv IEludGVyYWN0aW9u IHRpdmU= LW9i IEphbWFpY2E= 15XXqNeh IOS4nOaWuQ== INin2YTZhdmI2LbZiNi5 bGVyaW5pbg== 5ZC0 IOCkieCkuOCkqOClhw== IGNhbmM= IOq1kOycoQ== IFJoZWlu IG3DqWRpY2Fs 0LDRgNCw0LfRiw== IGFyY2hpdmVk w6R2w6Q= IOCkueClgeCkqOCljQ== and0 IERvbm5lcg== 16TWvNeo 6ISa IOKckw== IHZldGVyaW5hcnk= bmFhcg== IHZlcnN0ZXI= INC/0YDQtdC00L3QsNC30L3QsNGH Lm1ldGhvZHM= aWt1dmE= IHdvaA== X0RPTUFJTg== 2J8K YW5jaGk= XCI+PA== 2KfYr9ix2Kk= INGB0LDQvNCw 0L7RgNGC0L7RgdGC0LDQvQ== IGVzdGFibGlzaG1lbnRz 4Kil IHRo4bup ZGVucw== IOCwreCwvuCwsOCwpA== p+GDlOGDnA== IOCyhuCyrw== INC90LDRh9C40L0= IOCqquCrjeCqsOCqrg== IGxlZXJsaW5nZW4= IGFmaGFua2VsaWpr 5Yqz IGdlbmVyYWNpw7Nu Kms= IGNhcmRib2FyZA== aWFuZw== IGRhdGFuZw== 0YPRiNC60Lg= Z3JhbW1hcg== UnVubmFibGU= IOCkmuCkvuCksg== IFZvaWNp IOC4hOC4sOC5geC4meC4mQ== IOCkuOCljeCkpeCkvuCkqOClgOCkrw== IEF1dHVtbg== KHNjZW5l PicuJA== b3Jpbg== IFZlbmRvcg== IHN1Y2tz 4Liq4Li5 YmFsbHM= IHbDpnJldA== aXN0ZW5jeQ== 4KWB4KSV4KWN4KSw IGTDqWNhZGFz INm524w= IHBlcnNvbm5hZ2U= 4YOU4YOg4YOY4YOd 4KiJ IOCwquCxhw== IHByZXNv 0LTRi9C8 X21vY2s= IEdhbGljaWE= cm90YQ== IOWkqeWkqeW9qeelqOS4reWllg== aGF0YW4= T256ZQ== INis24w= IGJlc2Now6RmdA== IGVuZGZvcmVhY2g= UXVhdGVybmlvbg== L3NlcnZlcg== YXJhbmE= IENvbWl0w6k= 7ZeI 0L3RltC8 IHJlaW5mb3JjZWQ= X1NFU1NJT04= cWRpc2hv asOzbg== IOCqsOCqvuCqnOCrjeCqrw== INmH2YXYsdin2Yc= INmI2KfZitmK INGH0LDRidC1 6IyD5Zu0 IEd1YW5n d29v 5L+d6Zmp IEFkYXB0 dWx1aw== IEtuaWdodHM= INis2YjZhg== LnVuaWZvcm0= KGFjdGl2ZQ== YXNobw== X3NjaGVkdWxl 6LCD5p+l IGJhZGthbWVy IGFudGVyaW9ybWVudGU= IHRzaHU= ZXRoYXU= TWlsbGlzZWNvbmRz 05nQtA== L29wZW4= IHNlaWVu IGxlaXRl IGxlYWd1ZXM= RWZmZWN0aXZl IOCqrOCri+Cqsg== 6aas IHByaXo= 5a+E UkVBTA== 5oyR IGlzdW0= w7hq wrssLQ== LnN0YW5kYXJk INmG2YrZiA== IHNpZ25pZmll IOWQjeWJjQ== O30KCg== 4KSr4KWN4KSk X25vdGlmaWNhdGlvbg== ZGVlbg== LFY= YWfDqQ== IGt0w7Ny UGFyc2Vk LnJlbmRlcmVy IGxpZWZzdA== IOCyquCysOCyv+Cy INWt1bjWgNWw1oDVpA== ZXNzZXVy IFBlcmY= QWNr IFBhbG1lcg== IGFudGFnb24= IFN0cmF0ZWdpZXM= TU4= bWl0ZXM= INC70LjQtA== INC/0LXRgNC10YXQvtC0 IENyYXc= IOaOqA== IGd1YXJkaWFu IEJ1c2luZXNzZXM= L3J1bnRpbWU= IHFy IOCkqOCkv+Ckr+Ckrg== 0L3QtdC4 IHloZA== IOq4sOyIoA== IHNmZWVy INmC2KfZhQ== LmluZg== YXNoYWRh b3JhdA== INmG2qk= IGluZGVy CXdw LXBlcmZvcm1hbmNl Pyku IMK1 IGlzyZk= IHnDvGtzZWs= INC/0YPRgdGC IOCqpOCrh+CqruCqnA== IOCkpuClguCkuOCksOClhw== IFJlYWRlcnM= 6LSr IFNpbXVsYXRvcg== aWPEgw== IEFybXN0cm9uZw== w6FkaW8= 4YOg4YOb IHBhcmFu X211bHRp YmFobg== 16TXldef 0LrQvtGB0YLQuA== IGRpcHV0 44K8 Q09OTkVDVA== IGNvbnN1bWlkb3I= IGPDqWx1bGFz INCz0YDQvtC8 UkVD IHRvdGVz IFlFQVI= YWZpYQ== 5YaF6YOo PnsK INGH0YI= ZW5uaWFscw== IOCqpuCrgQ== eGZl IHJlbWVtYmVyaW5n IFNvbGw= INCQ0L3QtA== X29yaWdpbg== IOCqr+Cri+CqnA== aWdzbGlzdA== IGVuY2FyYQ== KHBhc3M= INC80LXQttC00YPQvdCw0YDQvtC0 IG9zbm92 IHBlcmd1bnQ= dmVudGg= IGVuZ2Vt IGN1cnJ5 IG5pbGFp 4oCZYXQ= IHdpxJljZWo= bGFuZGE= aXJlYWRo 5Yiw6LSm IOGDlOGDoA== 2KfYpti52Kk= IGZhbW9zbw== IHZhaWQ= INGB0YfQuNGC IOCkpOCkqg== INC80L7QtNC10LvRjA== SSdk eXByZXNz SHlwZXI= IOydtOyVvA== IG1hbmdv IHBhbGw= IGNvd3M= IHRhc2E= UmF0aW5ncw== 57up b3NzZW4= IGNvbXBsw6ltZW50 IHBlcmZla3Rl IOychOy5mA== IGF1bnQ= aWtleQ== IG5hdHVybA== IOCqpeCqr+Criw== IEhpZ2hsaWdodA== IGFudGljaXBhdGlvbg== IERlcm0= IHlhdg== IFNwZWN0cnVt IGNoYW1wYWduZQ== IFpJUA== KHByaWNl IFN1cHBsaWVz YWlzeQ== IOCqleCqsOCrjeCqr+CrgeCqgg== IGthcGl0YWw= OmluaXQ= b25pbmdlbg== INC60L7RgdGC IMOpbm9ybQ== IGplbGx5 IHVwcmlnaHQ= 0pPQsNC5 IOGAgQ== IG3Ds3I= 4KSC4KSf4KSw w7xuc2NoZQ== IGlnYg== zrzPic+C cHJ1cw== 0YjQuNGB0Yw= IEV4cGFuZA== 2LPYqNin2Kg= IGltYWx1dW5uaWl0 IGZpeWF0 IHdvcmtib29r Y29sb3Vy IHdhc3U= IG1lc21vcw== IGFzc2lu IGLDqW7DqWY= QGV4YW1wbGU= X2Ficw== ZW5hbWVz IOGDm+GDkOGDqOGDmOGDnA== IHRyYWplY3Q= IENsYWltcw== YW5ub28= IGdlc3RlbGQ= dW5vZA== QWN0aXZhdGVk LnZvbGxleQ== IFJvZHJpZ3Vleg== IEV2YWx1 IGNpcw== X21vbmV5 5YWo5bm0 IG1hdGVz IG5lc3M= IHVwd2FyZHM= INmI2LHZiNiz2KrZhw== Q2Fwcw== IGV4ZXJ0 b3V2cmU= IGRn IFplaXRwdW5rdA== 0L7QvdC40Lg= 4LK/4LKs IGt1cmFuZw== VG9u WGQ= cmF0aW8= 0LXRgtC10LvRjA== IGp1ZGdlbWVudA== INin2YTZhdit2Ko= c2tpbQ== INio24zYpw== fSks RFY= IHBvc3Nlc3Nlcw== IGp1bmdl IFByYXllcg== CXJlbW92ZQ== 5aKe5Yqg IHNraW5ueQ== CW1hcmdpbg== INW+1aHWgNW5 IEJvb3Rz IENlZGFy bm/DuQ== IOCqquCqueCrh+CqsuCqvg== IE1pbmVy IEhvbGx5 UmVhbGl0eQ== VUNL IFJlc2VydmF0aW9u INmI2LHaqdqT IFByb2R1Y3Rpb25z IGJyYWNlcw== IGZpbHQ= INC606nRgNGB0LXRgg== IGZyw7xo IOuwne2Y IGNvYXJzZQ== IFplaXRlbg== IEltcHJvdmVtZW50 dHdlZXQ= IHBvc2libGVz IGF2YW5jZQ== aWFi IOCypuCzh+CytQ== IHNwcm8= IOCyteCyv+CysA== YXZvcw== INmD2KfZgdip IGLDuHJu IGdla296ZW4= VklERU8= IHN0dmFy IGtz YW5haw== aWd0aWc= IHBvdcW+ IFLDqWc= IFJ1YmJlcg== KHN5bWJvbA== IOaJi+acuuWkqeWkqeS4reW9qeelqA== IOCmruCnguCmsg== zrTOuc6s IOai VGltaW5n X2N1dA== Q09NRQ== 4Kq14Kq+4Kqw4KuH Y2Vtb3M= aWxnYW4= IGNvbWViYWNr 5omN6IO9 5aix5LmQ5Li7566h 5Lya56S+ IG1law== bWljcm8= IGNvbXBhbmlvbnM= IGluc3RydW1lbnRv IGdsZWljaGVu wrst IGl6cXVpZXJkYQ== IHBva2F6 IOuwlOuhnA== KCQoIiM= 0LvQsNC90LQ= IGlsbHVzdHJhdGVz INGE0L7RgNC80LU= amFzdA== INeT15U= IHR1cmU= 4KeA4KaV4KeN4Ka3 IEFkbWlzc2lvbg== IERlZmluaXRlbHk= JHJlcw== IGFkbw== IGRlc3BlcnQ= LnlsYWJlbA== IOCmruCmpOCniw== IHBlcm1pdGVu IHNjYW5uZWQ= IHBlcnNvbmVy IOCkqOCkv+CksOCljeCko+Ckrw== cm9pZGVyeQ== INGC0q/Qs9C10Ls= INij2YHYsdmK2YLZitin IHBlcnNvbmFqZQ== aWxsYWM= 7J6Q7J2Y w6p0cmVz YXZhbmpl IGRlY3J5cHQ= 2LjYp9ix RWg= 4Ka/4Kao4Ka/ IMOpbGVjdHJvbg== 16DXpw== IG11c2lr w6hhbmFtaA== RkxBR1M= 0KHQmg== Ky8= LXNpZGViYXI= c3RkaW50 5Lq65rCR5biB 4LSq4LWN4LSq4LWN Y2hlYXA= IGRlcG9zaXRlZA== IEdvdGhpYw== INC00L7Qu9Cz IOW3pQ== Z2Vmw7xocnQ= INi52YLYrw== LG1heA== IG3Fr8W+ZQ== IEdPRA== IHRyYWNpbmc= 0YDQvtGI LkFMTA== U0lN 2aM= INGC0LjQuw== XEFkbWlu 4Kqo4KuN4Kqm4KuN4Kqw IFdoZWVscw== dGxz X2JsdWU= 0LrRgtGL RW5kaWFu IGhpc3RvZ3JhbQ== aXNpZXJlbg== IEhlYXRoZXI= L3Byb2plY3Q= IG1lam9yYQ== Qm9ybg== 4YOU4YOl4YOb TG92 0YPRlA== IHNpbWlsYXJlcw== w6lnaQ== bGljaHRpbmc= LnN5bW1ldHJpYw== IFNvYg== IGrFq3M= 0LPQsNGF IEJyZXR0 IGFsbGVyZ3k= Y291cG9u X3BsYWNl KSkq ZWVl X2t3YXJncw== KHByb3BlcnRpZXM= IOWkqeWkqeS5kOW9qeelqA== IFBhdGVudA== IEZDQw== IEVycm9ycw== Kz0i IFRWcw== INGG0Yw= Ym91cmc= ZGVq INC60L7QuNGC0L4= IGphcG9u 6LW1 INC+0LrQvtC90Yc= 7Jqx INin2YTYtNix2YI= IEN0cmw= QXR1YWw= RVZFTlQ= IEZpbHRlcnM= IG51YQ== 4KWN4KSw4KS5 CWZpcnN0 Om50aA== IOW+ruS/oeS4ig== INmG2YfYp9mK2Kk= IE1pdGdsaWVkZXI= KFBhZ2U= IGF2YQ== R0h6 IHZlcmJ1bmRlbg== YXJraQ== w7Nsbg== IOqwnOuwnA== INCx0q/Rgg== IFNjaQ== IENhbmRpZGF0ZQ== IOWW 56qX LmNsaXA= IGV4YWdnZXI= L25vZGU= INGB0L3QvtCy0LA= IFNvbWFsaWE= IGdlYw== 4KWN4KSv4KSu4KSC4KSk4KWN4KSw4KWA IFBJRA== IEJsb2Nrcw== bnVtZXI= INep15c= IFBheW1lbnRz 4KS/4KSP4KSV4KS+ IOaM LCIl INC/0L7RgdGC0YDQvg== z4TOt8+C INGA0Y/QtNC+0Lw= 5o+Q5Ye6 0Y/RgtGL L2dy b2duZQ== aWFubmU= IOCkluClgeCksg== xI1lbsOt IER1dA== IEtsaWs= IEhpZ2hsYW5k YWxsZWxlZA== 0L3QsNGB0YbRjA== J2F1cg== IGNvbm5leGlvbg== IHNpemluZw== 5oms IGNo4bq/ IHByZWRpY3RhYmxl SURBREU= 2KjZitmG INin2YTYr9mI2YTZitip ICIpOwoK aGFuZGxpbmc= Vmllbg== U2FyYWg= IGdlbHVra2ln 4oCZdW5h 4LmA4LiH4Li04LiZ4Lia4Liy4LiX4LmE4LiX4Lii X2F1eA== IHBpb3I= w7xja3Q= YXNzaWduZWQ= LmNsdXN0ZXI= IOWFqw== X2Rpc2FibGU= IEJyb256ZQ== Q0dGbG9hdA== 6I23 IEZJ dWNz IElFRUU= IOCkquCktg== IFByZXNlbnRhdGlvbg== IG1hcmNhcg== dXN0dQ== X1NQSQ== KHBhbmVs 4KS/4KSu4KS+ 2YHZhw== YWRhxZ8= w6fEsQ== 4oCM4LCo YWdsaQ== 0L7QstC10YA= IG3DqWRpbw== IGxhd3Y= IHF1YWxjaGU= IGNhbmU= IOCqteCqmuCrjeCqmg== 4KS14KS+4KSm4KWA IGJlcnJpZXM= ZWN6 IGdhcm1lbnQ= 0p/TmdCw 5oOF6Imy IGZpemVy INKg IGpvc3Nh LXByb2dyYW0= IGhvc3RpbGU= ZW50ZW5jZQ== IOCkluCli+CknA== LnN1bW1hcnk= Uk9O UmVjdg== 4Kaq4Ka+4Kak IFNwaXJpdHVhbA== IChbXQ== IGFubm91bmNlcw== b3J0bw== IGFwb250 Z2FnZXM= IGthbWJl IGFyaXRobWV0aWM= U25vdw== 5LiA55u0 Rm9jdXNlZA== X3N1cGVy INGB0L7QstC80LXRgdGC IGhhYnLDoQ== IOa+sw== 4LGB4LCy4LCo4LGB aWd1YWw= KGZuYW1l X01T IGRpc3BsYWNlbWVudA== IGVpZ2g= IGdhc3Ryb25vbQ== w6h0ZXM= IHN0cmlwZQ== dXR0dXQ= X2tpbmQ= X1JFQUw= T2M= dmlsZXM= ISEhISE= IHByYWs= YXRpb3Vu IFJhbGx5 INGH0LDRgdCw X2lubmVy 2KfZhNin LOiJsg== INaE1bbVtg== INCx0LDQudCz0LDQsA== IOC0ieC0pg== IHBvdXJz TUFS UmVxdWlyZXM= X0xPR0lO a29saWtv keGDoA== IFNlcmdpbw== KmQ= U2t1 IGxpZ25lcw== w7Zsa2Vy IEt1bQ== INC/0LDQu9GM IHN0YXR1dGU= 2pHbjA== IEFUVFI= IGNvbXB0ZXI= 2LnZhtuM INiz2KfYudip IHNjYWxw IGnFvA== 6LSt5b2p5a6Y572R 5aSp5aSp5Lmw5b2p56Wo CUV4cGVjdA== dGVn Zm9ybWF0aWU= IHNvdXZlbg== IGvDpHI= IGVtcGlyaWNhbA== IHRpYw== IGNvbXVuaWNhZG8= cmFi IGNvbXBvc2l0aW9ucw== IGxhdGlu 0pPRg9GH 4LSV4LW+ 0KDQkA== INGC0YvQvA== IMKu IGRlY2VudHJhbA== IG1hbmNobWFs ICZf IEFkdmVudHVyZXM= IEFSUkFZ IEJlYXU= X0ludA== UGFyc2luZw== 1bjVpA== 2YrYsdin2Ko= 4Liy4LiX4Li14LmI KGFu IOu4jA== IGFsdGVybmF0aXY= IGRlc3NlcnRz IGFuY2llbg== IGJyaWNrcw== 0L7Qu9C90LU= IC8+Owo= IHPDpGdlcg== 15LXqQ== KHBs IHNlcnZpZG9yZXM= INmG2LTYsQ== X2FyY2g= PgoKCgo= IOeQ IG5vdGljaWE= INCy0YvRgdGC0LDQsg== a2V5dXA= w7xuc2No IGFjYWRlbXk= YmV0d2Vlbg== bHc= IERyYWtl IG9waW5pb25lcw== 15nXoNeT IEdlc2V0eg== LmN6 0YPRjtGC0Yw= IEFnZXM= 2KjZiNmE X2Rz IFBlZGk= IHJlY2V0dGU= dGl0dWxv IOG7jW7hu6U= 5YuH 6Ziq IGNvbXBsw6h0ZW1lbnQ= IEtlcm5lbA== IGvDtWlnZQ== IHdlYWtlbg== IHLDtQ== INis2YTYsw== IOCmqOCnnw== IOCkheCkqOClgeCkrg== 4KWH4KSw4KWI YW5nYW5h INin2YbZh9mG X1BPV0VS IG9ic2VydmFibGU= Y2hlbWljYWw= LnhsYWJlbA== aG9wZQ== 0YHRgtCy0LXQvdC90L7QtQ== c29uYXJv b3N0cmFy IOGDoeGDmQ== 15XXldeZ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== LnBvb2w= b2Nob25k IFJhY2s= IOODlw== IHBvcm7DtA== w7xuZw== 4LiU4LmJ4Lin4Lii IGJlZ2lubnQ= IHRlcm4= IFNoaXJ0 IGhvc3RlbA== IGp1YmE= IGNvbGxhZ2Vu xIdlbg== IGRydcWhdA== IHJlbmNvbnRyZXI= CXNlYXJjaA== TWFydGlu INGF0YPQsg== 5LiI IOS4uw== IHJ1ZWQ= IFN1aXNzZQ== cmVxdWVzdHM= 4K6f4K6/4K6v IHNrbA== PGI= IHZlaW8= X1RFTVBMQVRF 4oCZYXZhaXM= 6riw64+E INeV15LXnQ== KCQoJyM= IHR1bWI= 4LSV4LSz4LWN IOCqpOCqruCqvuCqsOCqvg== KGxvZ2dlcg== YXRobG9u IGJlaGFy IG1vbmRpYWw= IGxpdGVu IOCqleCqguCqquCqqOCrgA== IGpvaW50bHk= INGF0LjRgtCw0LnQvdC40qM= 4YOg4YOq4YOU4YOa 4LiX4Li14LmI4Liq4Li44LiU 15nXmda315g= IGNpdHkncw== 5YSE ISIpOw0K LXBsYWNl IOygleuPhA== TnQ= IGlidQ== ICIpOw== Lm9sZA== IHZva3M= IOCypOCyruCzjeCyrg== IFBSRVM= IGlkZW50aXRpZXM= IHNsdcSN KHRyYW5zYWN0aW9u 4LGB4LCo4LGB TG4= IGhldXQ= cm9rZXI= IGRhbGU= IOCknOCkvuCkguCkmg== IFNlcmlhbGl6ZQ== IHZlZ2Fz IGJ1ZGRpZXM= 5YiGcGs= Rm9udHM= IGRyb2dhcw== IGdlcm1hbg== IHZhbmE= IOC0qOC0n+C0qOC1jeC0qA== IHVwZnJvbnQ= dWVydGU= X3BhcnRz W2N1cg== IEVtcHJlc2E= IGR1bmc= IEFuemFobA== 0LzQtdC90L3Qvg== Q3JlYXRpdmU= O2s= IOCuig== IHNlY3RvcmVz X1VBUlQ= LnBvd2Vy Q0hBTkdF 4Ka/4KaP IGFkZXF1YXRlbHk= INmB2YTYs9i3 IHlsZQ== IHN5bnRoZXM= IikpKQ== IGdlbmllw59lbg== YXJkb3du IEdhdA== LlBPUlQ= 5Yqe5YWs c3BlbGw= 0pPQuA== 4oCMLg== INiq2KQ= 4Ka/4Kak4Ka+ 44GK6aGY IHZpc2l0YXM= IE1WUA== IGNhaXI= ZGVyZA== 4LiX4Li44LiZ IFdhdHQ= IGVsYm93 IGR1dXJ6YWFt 4LmC4Lij dmlzYQ== IHRldnJlZGVu IGZpb3M= 4Lir4Lin4Lii wrsK bW9udG9u IGt1dQ== IFNhdmluZw== IGdhbmFz IHB1bQ== S1Y= IE91dGxldA== IHVycw== IEhhbmRlbA== 4Kmx4Kiy IFNoaW4= YXd5 INin2YTYqtiv2KfZiNmE 4Kao4KeA aXp6YXppb25l IFdpZWRlcg== LdKp0YvQug== IM+Hz4HOtw== YWJhcmE= IG1pbms= enlzdA== IEF0dGVudGlvbg== IHN1cHByZXNzYW50 INqp2Kg= R01U YnVpbHQ= X3Byb3RvY29s Z3JlcA== INin2YTYs9in2KjZgg== bGFhdA== IHVuY292ZXJlZA== INqp2YjZhQ== IFN1cGVybWFu IOC0ruC0pOC1jeC0uA== 2LjYqQ== IFNoZXBoZXJk ZGljdGlvbmFyeQ== IGJ1cm5lcg== 0LDRhA== IOC0teC0v+C0sg== IGzDrW5lYXM= ID4+PQ== IOGDoeGDkOGDnA== 0YPQsNC9 IG9yZ2FuaXphcg== IHNhbmN0aW9u ZW50ZWVs IOCuqOCun+CviA== ICoqKioq IG9rb2w= CXVzZQ== b2dyw6FmaWNh INqp2pPbjA== aWl2 IEVza29ydGU= LmZj IGlsacWf IO+/ve+/ve+/ve+/vQ== INC+0LHRgQ== aXRhbGlj 44GO 15XXqdeQ IGNvcnJlc3BvbmRl IOCkl+Clh+Ckrg== IGVsZWNjaW9uZXM= IGNvcnJlY3Rpb25z X2hvb2s= IHByZWZlaXRv RHk= IHBvbGl0aWNpYW4= IHJlcmU= 44CC77ya IFtbJw== IHN1cGVyYXI= IGTDqW1vY3I= JCgn IHJpY2hl IExlbm4= IGV4Y2x1c2lvbg== REVQ IHR1bGFk IGJlYW1z IE9H bGFuZ2Fu IHZpaw== IOC0teC0sOC1hg== 4KeN4Kav4KeH RmlsbGVk TW90aGVy aW5zaw== INC90LDRiNC4 IGRhZ2VsaWprcw== IHNoYXJr IHZhY2NpbmF0ZWQ= IOCyieCyqg== IGlucXVpcmU= IGNhdMOpZ29yaWU= 5bmz54m5 IGFkdmlzZXI= IHBpaGFr PFJlc3BvbnNl IGbDqW1pbg== IENvbWVz 4Kqk4KuN4Kqv IHVrdw== IENEcw== IGFhbW1hbHU= IMSRw6FuaA== IGFsbHk= L3ZlbmRvcg== dXJuaW5n IHRleGFz IHdvcmtzaGVldHM= IHBvc2liaWxpZGFkZXM= IFBlcmM= aXNpaW4= b2N5dGVz IGNhbGxlcw== KCkpLT4= dnJlcw== IGJhc2lu X3VybHM= SXNv b3NldmVsdA== IOCquOCrhw== IGRpeWU= IFJlY2VpdmVk dm9p LXBpZWNl IOCmpuCnh+CmtuCnh+CmsA== IOCuteCvh+Cuo+CvjeCun+CvgeCuruCvjQ== INGD0YLQstC10YDQtg== IFBvbG8= dXJkZQ== L3BsYWlu IGJsZW5kZXI= IEVyZQ== aWVuZGU= IGVzdHVkYW50ZXM= INiv2YTbjNmE 2b7ZhA== LXVs IGVuc2VpZ24= IGRvbXU= IHJlYmVsbA== INmD2Ks= IG5hY2hkZW0= IGZyZW4= ZW5zaXRpdml0eQ== IHB5cw== 4bmx 55Sf5ZG9 4K6y4K+B4K6u4K+N IG93bw== IHBpdGNoZXI= 5LiA5q2l INin2YTZiNi32YbZitip IGJsZXc= IGRhdmFudGFnZQ== IGFkdWw= IGfDpW5n 4K6+4K6w4K6j INC+0LHRitC10Lw= IHdhcnRv INC805nQvQ== IM61z4DOuc+D IHJhcHBlcg== IOGDkOGDpuGDnOGDmOGDqA== IHNob290cw== 1oDVqw== cG9ydGVk ZW56aWU= w6RsbGVy bmd1YQ== IFJPT1Q= IOCkteCksA== YXBr IOCkruCkueCkpOCljeCkteCkquClguCksOCljeCkow== aGF6 4oCmSQ== IHZyaWp3aWxs INWr1bbWhNW2 IFF14buRYw== IGFraW5n IHNlbHVydWg= xJd0 LlB1dA== IHRhbmRpcw== IOCkquCljeCksOCkpOCkvw== IOGDoOGDneGDquGDkA== 4LeA4LeS IGRyYXN0aWNhbGx5 IOCqteCqv+CqlQ== IFByZXA= X3ZlbA== IGFzcGlyaW5n IOCyteCziA== IHNwcmVjaGVu Z2ljYQ== IEtX IHNuZWFrZXJz INGB0LDQsg== IENhbGxz IGNhcmJvaHlkcmF0ZXM= ICAgICAgICAgICAgCiAgICAgICAgICAgIAo= a2Fi INiy2YrYp9iv2Kk= IG9td2U= IG91dmly IHZhY2FudA== IOGDoeGDrOGDneGDoA== INin2YTZhdiu2KrZhNmB IGFhbGFq 5Lmx56CB IM+Hz4HPjM69 IOCwqOCwv+CwsOCxjeCwrg== SUNLUw== IGZsdW9y Q3JlYXR1cmU= dXNlYmVuemE= IGNvcHlyaWdodGVk IOCkhuCkpOCkvg== 4KSk4KS+4KSk IOCksOCkv+CkquCli+CksOCljeCknw== w6RocmlnZQ== IGlubmVu IHRpeQ== IHZlbGlrbw== IHByaW5z IFwiJQ== IG5hbmQ= IEFtZW5pdGllcw== w7xja2U= PEV2ZW50 J11bXQ== bHV0 5pys56uZ ZXhj L2FjdGlvbnM= INir2KfYqNiq IEphaHJodW5k aGVoZQ== INin2YTZhtmH IHJ1cg== IFVFRkE= IEJvb20= YnJhaGlt IGVpbnNjaA== IOOCqA== w6RkZXI= 562R IOCkr+CkueClgA== xZllag== LmdyYWQ= IOCysOCzgg== Q2VsZWJy LS0tLS0K IFJ1bm5lcg== b2x0YQ== bGplbmpl IHByZWNpc2FtZW50ZQ== IHRzaGFq IEV4cGVkaWE= IOCmheCmreCmv+CmqA== IG1hdGVyaQ== IHZlaW4= IHN0w7Y= INGC06nQuw== LmZz 5ZCb INKb0L7RgQ== INi52YbZh9in IGFuZGVyZXM= dGVyc29t IGF2ZXJl IE9tZGF0 IOCkruCljOCkpA== 4KWN4KSv4KWL4KSX IG1ham9yaXTDqQ== IOCmuOCnjeCmpeCmvuCmqA== IHZlbGRpZw== X1ZBUkk= 4KWN4KSv4KS+4KSy4KSv Lkhl IHZpbGU= 4Lii4Li5 ICAgICAgIA0K 44OG44K0 4Kav4Ka84Ka+ IOGDkuGDkOGDnOGDqg== IGtsaQ== LUlz IScpCg== INCy0YvRgNCw0LY= xLF6xLE= INCw0LTQsNC80LTQsNGA Y29uc3RydWN0aW9u 4KS+4KS14KWH IGFiZXJ0dXJh IGlsbG8= IOC0h+C0qOC1jeC0qOC1jQ== IGNhcnRhcw== IGNoaWxp IHB1ZGQ= IG92ZXJoZWlk IHZvbHVtZW4= IFRvZW4= IGFwcmVzZW50YcOnw6Nv IHNsaWNlZA== 0YPQu9GM0YLQsA== IGRhbWFscw== INK/ bsOjbw== TWVyY2hhbnQ= b2zDs2dpY2Fz w6FuaWNv KSkuCg== IHNsdWl0 IHBob24= 65w= INmI2YTbjA== IOCkquCljeCksOCkpOCljeCkrw== IOaE XywK IGNvbW1pc3M= b2N0 IOCyuOCzhg== IOCkp+CksOCljeCkrg== IFJhbmR5 ICovCgovLw== IOGDkOGDruGDmuGDkA== IGFwcm92 LnNoYWRvdw== R1BV J2luZA== IGFtw6lsaW9yZXI= IG1pY2Nh INis2YbZh9mG IOmF IGFsZXg= 2LPYs9ip IERBVA== IHR1dG9ycw== YWNjaW5l UGVuZw== IOC0leC0ruC1jeC0rg== IGNpdmlj b2xvY2F0aW9u IOCkleCksOClh+CkguCkl+Clhw== IGl6dg== IENvdXJ0ZXN5 ZWN0YXI= 4KSo4KWN4KSk4KWN4KSw4KWA IE5pZ2h0cw== IEluZGlnZW5vdXM= IG9uc2l0ZQ== VENQ ZW5kYWRh yZluaW4= IHVzcA== IGNoYXJpdGllcw== IGVwaXNvZA== IOGDnw== IHByaW1lcmFz IFNpbGs= 0LvQuNC60LjQvdC4 amV1bmVy IGxsZWdhZG8= IFBlc3Q= LXBhY2Vk IGluY2VwdGlvbg== IOCqtuCqueCrh+CqsA== c2VpdA== IEhlbmRlcnNvbg== IHRlcm1pam4= J10pKTsK IG3DqXRpZXI= IHNjb2xh acWI 44CB5aSn IOCyruCzgeCyluCzjeCyrw== bWFnaWM= b3Jzbw== IERydWdz 0L7Sm9GD0ps= IOCmueCmvuCmpA== IGJpbmRpbmdz 0LvQsNGA0LTQsA== IHppZWhlbg== IE1lbmQ= INmF2LPZhNmF aXR6ZQ== IENoYXJsZXN0b24= IGZhdm91cml0ZXM= IHBvc3Rwb24= IHfDpGhsZW4= T3V0cHV0cw== IFBXTQ== IOyekeyEsQ== INin2YTYqti32KjZitmC 0YPStw== IHBpbm4= IGNvbXBsZXRlcw== IHZpbGxlcw== IHZvb3JkZWxlbg== IEhhc3Q= INGB0LDQvNC+0LU= IGNvbG91cmVk Y2hlZHVsaW5n 4KS+4KSc4KS/4KSV IGViYXk= IGp1ZGdlZA== OiY= U1RBVA== IHRocm90dGxl INCx0ZbQu9GW0Lw= L2Fs IOCkueCkvg== IHLhurFuZw== INC90LDQs9GA0YPQtw== PDwo KGZpZWxkcw== IHNjb29w IElocmVz IHBsZWRnZQ== 4Ls= S3Jpc3Q= IG5vdmVsbGVy 0LrQsNCz0LA= QmVuZWZpdHM= IGxsdQ== IOyaqQ== Lici QUdS IFJlc3BvbnNlcw== IOWbveWGhQ== IGdlbHVpZA== INGC0LXRgNCw0L8= IGdlbWE= IExvdWlzZQ== IOG5o3VnYuG7jW4= 2pPbjQ== X2JpYXM= 4YOj4YOa4YOY4YOh IGFwcHJlbmRyZQ== IG1lbmFyaWs= INGE0LXQtNC10YDQsA== IOCmuOCmpuCmuOCnjeCmrw== INin2Ybarw== ZnJhbQ== IGVoZW0= 1aHVv9W+ INS9 cWF0aWdpaXNz 0LDRh9C4 IOCmreCmvuCmsuCniw== IFd5b21pbmc= IE5FVkVS IGF1dGV1cg== IGx1bWlub3M= aWdsaWNo LWZvcm1hdA== 6aG+ IHByb2plY3Rlbg== IGTDqWZlbnNl dHVybmVk IG1pZ3JhdGU= IGJhd2Fo TU9SRQ== 4oCZaG8= ICQoJzw= IHByb2ZpdGFiaWxpdHk= Z2l2ZW4= LCwsLA== 5peg56CB5LiT5Yy6 4bq/bQ== 4Ka/4KaV4Ka+4Kaw INW61aHWgNWm INGH0L7Sow== IFNDUkVFTg== YmVkcmlqZg== Q1JZUFQ= IE1hcnNlaWxsZQ== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IHRhcmVhcw== YWhsdA== IOGDkuGDo+GDnA== IHF0eQ== IHN1bGU= IHBhZ2E= IGdt IGNob3Jk IEtlcmFsYQ== IGJvbml0bw== IGVnYQ== IGVudGVydGFpbmVk 0Y3QvdGC IGF3YWw= IHRyYXZlbGxlZA== c2Vzcw== IGJlbG9uZ2luZ3M= 44K544OG cmdjdHg= 0L3QuNC60LU= IOiI 5LiA6Lev KTsNCg0KDQo= INCz0YDRg9C0 KCkpKXsK Y2FtcGFpZ24= IEdUQQ== IFNBTg== YXJtb3I= SURERU4= IG92ZXJ3ZWlnaHQ= 4LCw4LCj IFNUQVQ= IOCwmuCxhuCwguCwpg== IExPVw== 5o23 0LXRgtC+0Lw= CWZu IERlZmF1bHRz IGtlbmRp IEJhc2ls yrtvbGU= aXNpw6Q= IHBhc3NhbnQ= 57q/6Lev IFdvbmRlcmZ1bA== 2Kfar9ix IE5BVg== bGFyaW5n QmFja2luZw== LkNvbGxlY3RvcnM= IOCqteCqmuCrjeCqmuCrhw== IHByZXN1cHVlc3Rv IEFtaW4= INC60YPQu9GM0YLRg9GA0Ys= cXVvaXNl eWRpYQ== IHNhdGlzZmFjdG9yeQ== Ym9nYm8= IFNjaGx1c3M= 5by1 Ymxv IEhvdXNlcw== 4YOU4YOX4YOo4YOY IGFzZW0= X1N0YXRpYw== YWNoYWJsZQ== IGxvbmU= IGNvbmNpc2U= IM6xz4DOv8+EzrU= RlVOQw== INC/0LXQtNCw0LPQvtCz cHJvbXB0 IOGDkuGDkOGDnOGDm+GDkOGDleGDmg== IeKAmQ== INC/0L7QvNC+0LbQtdGC IOCqquCqueCriw== 0L7RgNC40Y4= 4LWL4LW8 IOCmuOCmvuCmuQ== IGZpcmV3YWxs xJnFvA== TWVhbA== IEFycmFuZ2U= IE5hdmFs 5YW9 XGQ= IExpa2V3aXNl IGRlYmVyw6E= IHNpZGVy IHB1YmxpY2l0eQ== IFBlbmQ= IHJhbnQ= 44Gh44KD IGZyb250YWw= KG51bGxhYmxl aWFkbw== IEFkcmk= aWRlYW4= 4oCZZXNw fScsCg== INC/0L7QutCw0LfRiw== IGFub24= IHByb2ZvbmRl IG5pY2k= IG11bmE= IHh5eg== aWxoYXI= IHJlcGxhY2Vz 2LTZhw== IHNlbmE= a2FyYW5n 4KmA4KiG4KiC IEVo LkNhcmQ= IGxldGk= INmC2LfYsQ== IGZhdmU= IFVJQWxlcnQ= 8J+RjQ== 0LXQuNKt 0YHQutGD aW50ZW4= IGhsYXY= IFNQRA== INis2YjYp9io PEFjdGlvbg== IG5vbWVz IE1pbmFz X2luc3RhbGw= dG9ycw== LXNsaWRl 0q/QvdC0 IFJpbQ== VVRJTA== IFJpZw== IELDtg== X2hleA== KHRoYXQ= IGN1ZQ== KHBhcnNlcg== ZGVyZGFn INC60LjQvdC+ XEJ1bmRsZQ== eW15 IFBlcsO6 xaHDrW0= bMSxxJ8= IOC5gOC4lOC4tOC4oeC4nuC4seC4meC4n+C4o+C4tQ== IGtvanU= 4LS44LS/ IOecnw== IEtn LXRh LXBl IG1lbmFuZw== INGF0q/RgA== IGRlcml2YXRpdmVz VklT INC00L7RgNCw0LQ= IG1hdHRl 4YGP IGdvb3Nl UFJPRFVDVA== INGD0LvRiw== YWlsYQ== INin2YTYrNmF 4K+B4K6V4K+N4K6V4K+B4K6u4K+N IGdwdQ== IHN1bmdsYXNzZXM= KHN1Y2Nlc3M= a3Nlcw== 572X5pav IEdlZGFua2Vu RWRpdGlvbg== IGdlb21ldHJpYw== LXVwZGF0ZQ== IHBhcnRpY2lwZXI= IGZvb3R3ZWFy IOCkheCkteCkuOCksA== IF0pLAo= bHVuZ3M= IEtlbGxlcg== W21pZA== IOCkhuCkpuCkvw== IGRuZQ== fTsKCgov IG1hc3RlcnBpZWNl IEJlc3VjaGVy IGltcG9zdA== INiq2LnYr9mK2YY= IGJlcmljaHRlbg== INin2LHYqtmB2KfYuQ== X2NvbXBhcmU= LiIu IEFVRA== 4Z674Z6T aXrDsw== 0YTQuNGG IHBlb3I= IElPUw== R3k= IENvbWJhdA== IExvdWlzdmlsbGU= IG5hc2E= 4Ka+4Kex 24jYsQ== 77yG IHRhaXA= IOCkuOCljeCkpeCkvuCkqg== dWNjZWVkZWQ= xLFsbcSxxZ8= YXBwYXI= 5b28 IOCkquCljeCksOCkr+CkvuCkuA== IHNpZ2E= Y2NvbGk= IGVqZW1wbA== dXJ0ZQ== INC60YDRiw== LkZD IENPTU1BTkQ= 0LLQuNGC bGFybGE= IGVybGF1Yg== INmC2KfYptmF2Kk= 4YOu4YOU4YOT LnBr IOC0muC1hg== OmJn IGVtcGF0aHk= IFBSSU5U 2KrYqNix U2FtcGxlcg== Y2xlYXJmaXg= INin2YTZgtiv2YU= INGE0YPRgtCx0L7Quw== RGVwdWlz 0LXQvdC0 77+j5b2x6Z+z5YWI6ZSL IEFTRg== IG7DvA== 0L7Qs9C+0LQ= INij2YbZkQ== INmB2YjYsQ== Q29n X21k 0LDRgNGF IHZlcmbDvGdiYXI= cGxlZA== IOykkeyalA== eG4= IHlycw== dXJhZG8= IHN0YXRp IE5hbXVu IGRyYWdnaW5n IOGDquGDlOGDnOGDog== INGF0LDQu9GL0ps= 5b+F6aG7 KENvbm5lY3Rpb24= Ojo6Ojo6Ojo= IGRpw6Fsb2dv X3VwcGVy cGxldGVseQ== IGzDoXQ= INmE2YXYr9ip w6ZuZw== 0LLQtdC00LjRgtC1 aGVtdQ== IHPDvQ== LmNpcmNsZQ== IOC4quC5iOC4h+C5gOC4h+C4tOC4meC4muC4suC4l+C5hOC4l+C4og== KGFjYw== KGFscGhh YW5kYm94 IHByb2ZvbmQ= IGNvbnNpZ28= IGNvbnRleHRl X2Vz IGJvb3N0aW5n cmVsb2Fk IGTDunZpZGFz IHBvcHBpbmc= IFByZXQ= IGFncm8= KGZpbGVwYXRo IHN0cmlkZXM= Q0JE LGZ1bmN0aW9u IHRyZWFzdXJlcw== 4Li04LmA4Lin INqp24zZhNim25I= YWt0aW9uZW4= cGFzc2Vu IHRydWQ= IE1pYQ== 4oCmKQoK YWlyeQ== LmJyb3dzZXI= a3dhbA== PD4oKTsNCg== IGxhbmNlcg== X2Nz LmliYXRpcw== INC00L7QutGD0LzQtdC90YLQvtCy IGNob21o IGJq YXJheQ== 4Kun4Ks= IHppZWtlbg== TGlyZQ== IHBvc2l0aXZh IOCmquCmpQ== IHHJmWQ= IHByZXZlbg== Y29tbW9ucw== IGFuZ2VuZQ== IFNURU0= 44Gj44Go KeOAgg== IHNlZ3JlZw== INmB2YTYpw== INi12LrZitix2Kk= IHNob3dyb29t 4Kim4KmA INGC0YDQtdCx0YPQtdGC0YHRjw== IOCwuOCwguCwpg== bXV0ZQ== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 4LSq4LWN4LSq4LWG4LSf4LWB4LSk4LWN4LSk aWN1bGFybHk= INC+0YDRi9C9 X3Byb3Rv w61jdWxh INeU15fXnA== 2LDZgw== 4LWI4LSo IGFr4buN 4YOQ4YOg4YOj4YOa4YOY IFdhZ25lcg== IGFiaQ== IOCkoeCkv+CknA== 5Y6f5Zug IOKWiA== IEFzc2VydGlvbnM= IGNvbnRyaWJ1aXI= aW1pYQ== IENvbnRyaWJ1dG9y 44Kv44K7 w7Jk SGFyZHdhcmU= c2hpdA== X3N0ZGlv IOGDneGDoOGDkuGDkOGDnOGDmOGDlg== INiz2YjZgg== IHNtZXI= INeQ15nXkdei16g= Z2VsaWprZQ== RmVlcw== INGH0LDQu9Cw0LI= IGFmc3ByYWFr 4KeB4KaX Zm9ycw== z4TPgc6x 0YHRgtGA0YPQutGC kOe+jg== INCw0LTRgw== IHppbmE= VEFJTkVS IHNjb290ZXI= 5pyJ5Lq6 dm9sdA== IF0sDQo= IHByZXN1bWFibHk= IGRpbGVtbWE= LmFzdA== 4LmA4Lib4Li04LiU P+KAnQo= IGdyb292ZQ== KGVycm9ycw== IOCkuOCljeCkrg== X09WRVJSSURF IGlvbnM= 4LmJ4Liy4Lii IGRlbWFuZMOp IHRlbmdhbg== 2K7ZhNi1 4Kqm4Kq+4Kq1 IHppZw== IHVwbG9hZGluZw== 0LDQtdGC0LU= w7N2ZWlz dWdnbGluZw== 7ZWR cXVhcnRlcmVk IFBzeQ== IOGDk+GDkOGDrg== RVBT IOuBnQ== OnRoaXM= IExhZ29z X+S5heS5hQ== INC60YDQvtCy0Lg= IFNuYXBjaGF0 Im9z INGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjNC90L4= IGFjY2lkZW50YWw= KiovCg== LnZt Y29tcGFjdA== IHB1ZXJ0YXM= IHdoZWVsY2hhaXI= IGF2ZXJhZ2Vk IHJhaW5mYWxs INCy0L0= 4LS/4LSv4LWG 4buk cmlxdWVz IEV4YW1pbmF0aW9u IHZlcmJhbmQ= PWVkZ2U= INCx0YPQtNC30LU= INGD0LfQvdCw0YLRjA== b25hcg== LkJpbmRpbmc= IGVuZ2w= IHPDoWNo YWRlcmluZw== ZmVsdA== IHNwdW4= IHN3ZWF0ZXI= IEJG IGZpbG9zb2Y= bGlqbg== 0YHRlg== ZmluZGVu IOC0leC0vuC0sA== IGdlc2NoaWVkZW5pcw== IHRyYWN0b3I= L3N0YXRpYw== IEd1YXRlbWFsYQ== QXZvaWQ= bmRhcg== IGFsdHJlcw== aHZlcg== LlRyYW5zcGFyZW50 IGdhdGhlcmluZ3M= 5rWL6K+V X+S6uuS6ug== IOGDkuGDkOGDnOGDm+GDkOGDleGDmuGDneGDkeGDkOGDqOGDmA== UmVwb3NpdG9yaWVz IFRyaWJ1bmU= INin2YTZiNin INGB0L7QsdC40YDQsA== xZFr IGNoxrBh c3RvZmZl 0YnQtdGB0YLQstC+ IGJvdGhlcmVk IOCqteCqsOCquA== LkV2ZW50cw== 2K/Yqg== UHJvdGVjdA== IG1hYW5kYWc= dHJhZA== IOCwruCxhg== IOCkpOCkvuCklQ== IHRlaGE= IG1hasSF RWFydGg= 4LOA4LKw IOa8 IE9W IGxvb3M= IH19Pg== fTsKLy8= IHZlbGl0 5LiA57qn54m56buE SU1P IO2UhOuhnOq3uOueqA== IE1hbmFnZWQ= IFBpdGNo 6Z+T VG9wb2xvZ3k= INin2YTYpdi52YTYp9mF xI1pYXU= INmI2K3Yrw== 6Jm9 IGRlbGVnYXRlcw== zrzOrM+Ez4nOvQ== INC30LDQv9C40YE= INmE25I= T2JqZWN0aXZl OnA= cGVybWl0 IFR1ZG8= UmVmbGVjdA== IHppZWt0ZQ== IHBhc3NpZXJ0 0ZfQvQ== INC+0YHRgtCw0L0= 2LLbjNmG2Yc= IGhlbnRldQ== 2o/Zig== IHVuZGVyd2F0ZXI= 4KiP bGVnYWN5 4Kiw4KmH 44G1 Q0VP IHNhYmlh INii2YTYp9iq IEd3 IFBJTA== 2YfZhdip X2ludGVnZXI= IGZsaXJ0 aGVtYg== IGzDrWRlcmVz Y2hhdXM= 4KWC4KSV aMOh INC/0YDQuNGB0YPRgtGB0YLQsg== IHBvc3Rjb2Rl IFN0dWRpZW4= zrjOv8+Nzr0= IGNvbnN0cnVjdGl2ZQ== IOGDrOGDkOGDoOGDm+GDnQ== 0LzQvtGC0YDRjw== 1aHVttWx1bY= IFNUT1A= IGZ1ZW50ZXM= IOGDnuGDoOGDneGDkeGDmg== Q2hlYXA= IGRlc2VydmVk 1bjWgtaA1bs= IHp1c8OkdHpsaWNo X0ZJUlNU INC90LDRhtC40L7QvQ== bm90aWZpY2F0aW9ucw== 0LzQuNGC IFByb2Nlc3Nvcg== 4Ka/4Ka34KeN4Kaf Y29udGFpbmVycw== dmVpbGxl 0YPQvNCw0L0= IOq4sOyXhQ== IGJlc3RzZWxsaW5n INin2YTYrNiz2YU= cHJvdmlk IEppbGw= cmV0ZQ== 4Z654Z6E 5reY Q21w IGtub3Q= IGFydGlzYW4= cXVldHM= IHZlcmFudHdvcnQ= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 5LuA5LmI5pe25YCZ b2F1dGg= X01BRw== 0KHQsNC8 IGJhcnJpbw== amll IGVib29rcw== IHp3YXJ0ZQ== IERyYXdlcg== 44O844OR44O8 L2FydA== 4LC+4LCo4LC/ SW5pdGlhbGl6YXRpb24= LmNvcm91dGluZXM= Y2FsbGVk IG9mZmVucw== UHVyY2g= IGF0dHJhY3Rz 4Ka+4KaV4Ka+4Kaw Ij57eyQ= IEdpYnNvbg== IHBhbnRyeQ== IGZhw6dh IGVtYmVsbA== YW5lcg== aWxhcQ== aW5jaWE= LkNs 4YOQ4YOU IENvcnM= Q2hhbmNl 4Kir IGZpc3Q= IFlhbGU= IGRhZ2dlcg== ZW5zaWM= IG1vaW5obw== IEJKUA== 5oOK IGJlc3RpbW10 IGdlaG8= Lk1hbnk= XDw= IEdpbGJlcnQ= IFJlY3JlYXRpb24= 44Kz44Oz KG1hdA== IGV4dGVybmU= IHZhdXQ= bXBlZw== LmNvbW11bg== w71hdA== bGlm IHRyb3Vz LkFkbWlu c3TDpXI= w6llcg== INeX16E= IGluc2lnbg== 0L7QstC+0YDQsA== eXN0eQ== IOCkuOCljA== QXdhcmQ= IEh1ZmY= c2thcg== INC/0LXRgNC10L0= aXRlY2g= IERJUg== SUxMSQ== 0LXQs9C40YHRgtGA 6riw6rCA xKtnaQ== X1NFTkQ= 64yT6riA IHNwaWVsZQ== IFJlYWxt IHBvcmU= UGF1c2Vk INGN0LzQtdGB IG5ldHdlcms= IGJvbWJz IHZhbXBpcmU= INmE2YXZhg== 2KfZhNis IFZhcmlhbnQ= LWV2ZW50 aW1pZA== IEdlZsO8aGw= IGFoYWE= bWVya2Vu RU5P IFB1ZWRl IHRhdHRvb3M= IHNxdWVleg== Umg= IGRpc2t1dA== IGdlbm9tbWVu IFRyYWJhbGhv 8Y4= 4YOd4YOV4YOQ4YOc4YOY LkR5bmFtaWM= X05BTUVTUEFDRQ== Y2hyaWp2aW5n 6Kem IHBlcnR1cmI= IE1hcnNoYWw= IHNpZ2g= IGNoZWNrc3Vt IC0s IGRpcmVrdGU= aWNhbm9z IE5lc3Rl IEhR IGNhcmdvcw== IOG7pWThu4s= IGZ1bmNpb27DoXJpb3M= KGFjY2Vzcw== INGA0LDRgdGI0LjRgA== IHBldHI= ZW5kZWRvcmVz IGFjY2VsZXJhdGVk b2FkZXI= IElzaA== IHNlZ3Vyb3M= INmE2YTYrA== b3BzeQ== aHVpemVu IOq3uOufsA== IEzDtg== X2Zz INeQ15PXnQ== dXNlbA== 4Liq4Lij INC40L3RgtC4 IG11bmM= X291dHB1dHM= LUVORA== 0L7QttCw0Ls= QmVzaWRlcw== IHZhc2N1bGFy IGNpdmlsaWFucw== CWFsbA== 5byA5pS+ INCy0YvQtNCw IOC0pOC1geC0n+C0meC1jeC0meC0v+C0rw== ZWxsYXI= PeKAnQ== IHByb2R1Y3RpZQ== IGt1c3Q= IOCkquClguCkmw== IEV1Y2g= PlQ= IEZhaHJ6ZXVn 5Yqg5by6 5oul IEluY2x1ZGluZw== X2FsZXJ0 IOW3qA== IE1hdHRyZXNz IGRpc2NpcGxpbg== IEhEUg== IGthbWVu IHNwZWNpZnlpbmc= aWNrdA== INCy0LDRiNC10LPQvg== ZW5jaW9uZXM= U1lT cmVwb3J0cw== QXR0YWNoZWQ= IOCml+Cnh+Cmm+Cnhw== IFRvdQ== 77yf77yf X0RJVg== IDst LWNhc2U= IEbDtnJkZXI= LCk= INmE2YbYpw== INi32YY= IG16 5oKo55qE X1RIUkVTSA== IEJvbGQ= 4KSa4KS+4KSo Q29tcHI= IHJlcGF5bWVudA== 44Gq44GX INeQ1rjXk9ei16g= aXNpbmk= IGVtcGxlYWRvcw== YXVmcw== VVJFUw== 0L7RhdGA0LDQvQ== c3Nw X1N0YXJ0 INC60YDQuNGC w7xuc2NoZW4= IOmHkeaymQ== IHRlbGxlcw== IOC0uOC0vuC0pw== T0F1dGg= 4K+I4K61 LmNhbGM= IGFsY2FuemFy LWludmFsaWQ= Z29v IHFvZg== IOGDoOGDkOGDoQ== IEdlbWVpbmRl YWxjaGVteQ== INWr1bfVrdWh1bY= 0LTQvtGA IE9yZGVyZWQ= INmI2YPYsNmE2YM= IGtvaHQ= IHBlc2M= IGrDtQ== IEVSQQ== IGRlc2NvYnJpcg== IGVzc2VuY2lhbA== 5oG2 w7x0enQ= L2lzc3Vlcw== L3htbA== b3JuZXJz YXB0Y2hh IHNlcXVlbnRpYWw= INC30LDQsdGL U3dlZXQ= X1N0YXR1cw== 4YOQ4YOm4YOb 0YfQuNGC0Ys= IGNsw6k= IM60z43Ovw== IERvd25sb2Fkcw== LkRldmljZQ== IFlPUks= 4Ki+4Kis IHZpc3VhbHM= IE1vdQ== w61icg== 4KSg4KSo IHRhdGE= IC0tCg== dWRpcg== IOCkruClh+CksOClgA== IERyaXZlcnM= bWRp IG5vbmNl IFByZWZlcmVuY2U= IOygiA== IGtoZQ== U3RyZWFtaW5n IFRH IGlycmFh bmp1 4KaV4Ka+4Kew X3NlY29uZHM= IE7DpXI= INCT0LvQsNCy INC20LXRgdGC IOCwquCxi+CwsuCxgOCwuA== cm9lcA== O3Q= 0L/QsNGA0LDRgg== 6LS3 IOCwuOCxjeCwqg== QW5nbGVz dXJvcGU= IHN0aXJyaW5n X1JFRA== IGNvbG9ueQ== 7Lih IHRpZWY= IGJ1Y2tldHM= QlNE 2YLZitip 1avVodW2 YmHFnw== IGVyd2FydGV0 IGRpdm9yY2Vk dWxkYWRlcw== IOCmpuCnh+Cnnw== SWo= KGxvYWQ= IENBUkU= IFp1Y2tlcg== J2FpbGxldXJz 4KSG4KSw IGltcGVjYw== IHNpcnZl IOyVoA== INin2YTYo9i32YHYp9mE IHJhcGlkYW1lbnRl cHJvY2Vz Ij4kew== IOODiA== IHVuYXdhcmU= ZGlw 4K614K+N4K61 0LrQsNGC0LA= 4bqxbQ== IOCkheCkmuCljeCkm+ClgA== IFRhc3Rl 6rCS 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA INGF0L7RgtC40YLQtQ== IFNPTg== IGNvbmR1aXQ= IEtleXdvcmQ= IOGDoeGDruGDleGDkOGDk+GDkOGDoQ== IGZpbGxlcg== 0L7Rh9C90YvQuQ== IGRpbGlnZW5jZQ== J2FydGljbGU= IG1vcm5pbmdz 4YG/ UkVB IGVudGVuZHU= IGdvb2c= TGlr IGFudGl2aXJ1cw== z4PPhM6s dW5uYXI= KENsaWVudA== IOGDm+GDlOGDneGDoOGDlA== IGRlc3BhaXI= LioKCg== INGA0L7QutGD VGhldGE= IE1hbGF5 IHNhc3Q= INCz0L7RgdC/ IFNldw== aW50ZW50 IGFwbGljYQ== 0LrQvtCy0LA= 15XXodeY b2xvxI0= IGJt dGluZ2hhbQ== IGp1c3RpY2lh IFN1cHBsZW1lbnRz YnVsbA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExHQlRR YWRlaXJh w6Fpcw== INWm1aM= INii2LM= Y29sbGVjdGlvbnM= OnY= IGR6aWVjaQ== 4KeH4Kau4KeN4Kas4Kaw IE9ibA== IGNvbnZlbnRpb25z INC00LDQstC90L4= IGZvdXJuaXI= dcOxYQ== IGhhdGNo IEJpbmdv INGD0qE= LW1hcmtldA== IGRlc2VtcGU= aW5hcmlseQ== a2FzdA== IE5GQw== Y29kZWM= UHJvY2Vzc2Vk IGJ5bG8= 4oCZYXJnZW50 IGF0bQ== INuB2YXYp9ix IHJlbHVjdGFudA== IGNhbWVs b21leg== IHBzeg== ZXNlbGVjdA== dWVsdmU= Lldvcmxk LWFkZHJlc3M= IHNhdGVsbA== IOS5sA== IGJldGVyZQ== amV0YQ== IG5uZQ== IExJRkU= IG5ldWVy LnltbA== Omlk IEZpbGlwaW5v IHJlY29ubmVjdA== IGNlcmVicmFs IHJpcHBlZA== U1RN IE1peGVk Lkxvbmc= IHfDqg== IEFpcndheXM= YXZuaQ== IG5lZ2xlY3RlZA== TGVnYWN5 aWxpbg== IGJlYWNodGVu 5YGa54iw54mH INC60YPQtNCw VFJBQ0U= IHBlcmw= 0LDSow== IHJhaW55 INC/0L7QtNGB IHByb3BvcmNpb25hcg== IGVmZWs= INC80LDRhQ== IOuvvA== IGJlYsOp IGVzdGVqYQ== IOGDkOGDoOGDoeGDlOGDkQ== 16bXmdeU IGRhbmNlcnM= IGFm4buN IFdlYmVy INio2YfYqtix 0LjQt9C80LA= X2ZvcmU= UHJvZHVjZXM= X2Nsb3Vk dHJhY2tpbmc= IHZpbGxhaW4= IEJld2Vy IHJ1bnQ= IHZlY2lub3M= 5rCP IFNFRQ== IGF2eQ== w7RuaWNh IGFmc2w= INKS 2KfYsdmG KFJlc3BvbnNl 0LTQuNC90LA= IG1vdHRv IERhbGFt IEZJTFRFUg== IEVpbnN0ZWlu X0JJVFM= INCw0YDSm9GL0LvRiw== w61kdW9z IHBhbmR1cm9n IOW9qeelnuS6iemcuOWumOe9kQ== YXR0YWNobWVudHM= IOWkqeWkqeS4reW9qeelqOS4reS6hg== IHN0dWJib3Ju KGRhdGFiYXNl IMOnxLF4 L2hlbHBlcnM= KCksIg== emw= IGRlY2xhcmluZw== IFRFTQ== INqI24w= IEtyaXQ= LlNFVA== IGF0cmFz IFJVTEU= KmM= IHBlcXVlbm9z CUs= 4K6+4K6z4K6w4K+N INWi1bbVodWv IEVzdGFibGlzaA== LXlvdXI= W+KApg== IGJlc2NoaWt0 IM+Dz4TOv8+Fz4I= IOyngOq4iA== LmFwcHM= IHB1cml0eQ== IGVpdsOkdA== INin2YTZhdmI IHVuYW5n J2loaQ== cmVzcGVjdA== d3JpZ2h0 KHJlZA== IEtpdGE= INqq2Yo= S2V2aW4= 2LnZhg== IHNsZWNodA== cnR5cGU= IHVsdHJhc291bmQ= IGV4aGliaXRpb25z IGJhdGNoZXM= IGdlc3Rl IGF1dG9m 2KfZh9mK IENhdmU= dmVudGE= IG5rYXJoaQ== 4Z634Z6T IGjDpW5k Um9zZQ== INiz2YXYpw== 4YOj4YOZ PiI7 w7xja2xpY2g= Vmlu Q29tYmF0 dm95 IGlkaW90 cmV0dGU= IEphY2tzb252aWxsZQ== z4POtc+EzrU= b3Jtb24= KHdpbg== w61saWFz IGNvbXBldGVuY2lh IGbDtnJldA== INGC0YPRgNC40YHRgg== INin2K/Ypw== IG9kcsW+ Q3JpdA== 2K/ZhA== IG95bg== IE93ZW4= KEJsb2Nr IFNwcmludA== IGNhcnRyaWRnZQ== dWVkZXM= RGVzY3JpcHRpb25z X0JPT0w= IG1paXJhbg== 25XZhQ== 56ue5b2p IFBoYXJtYWNldXRpY2Fs 0LXQutC+ IFRyYWRpdGlvbg== IGZpbmRlc3Q= 4KWn4KWm IEtyYW5rZW4= 4LSV4LWN IG1hdMOpcmlh IGJhc2ls cG9uc29ycw== cm9p 2YfYp9iq IHRyZWtrZW4= IG5lY2g= 44CC5Zug5q2k IGZldGlzaA== cm9vdHM= QVBB RkFJTA== X21t ZWxsdWxhcg== INCf0L7QvA== IG3DqWNhbg== IGNoYXVzcw== IHJlZ2ltZW4= X3Zpc2libGU= LW1hdGVyaWFs IGNyZXdz IHRyb3Y= c3BhcGVy Pik6 IHJlYWxpemF0aW9u INeQ15XXqted IG92ZXJhbA== 4LGB4LC4 YXJhbmc= d291bGQ= INmE2LU= 4KWD4KSm4KWN4KSn IGxsb2M= IEdhbmRoaQ== IOC0j+C0seC1jeC0seC0teC1geC0gg== IGRlZ3JhZGF0aW9u 2KfZgdix ZHlt KCkpOgo= KGVkaXQ= PSIvIg== IHdlaWdocw== bMO4 PgoKLy8= 4K6/4K6z INep15DXqg== IFRSQU5T IGludmFsaWRhdGU= dnJhZ2Vu IGdlemV0 IHRhb24= IGF0dHJhdmVycw== IGluY29udmVuaWVuY2U= IHJlbm91 QUNB LWFnZQ== T0NLRVQ= ZmZh SUJF OwovLwovLw== Tk9X X3BsYXRmb3Jt INCx0LDQsQ== Lmludg== RW52ZWxvcGU= IEZyZXM= 652864qU Z2V3aWNodA== 0LDQstC90L4= 4YC24YCv dWlsbGV6 IGZsYXRz cmVtYWluaW5n KFBETw== IEV1Zw== LWF1dGhvcg== IG1hZ2Fz Knk= IG1paA== 4oCdOw== 5LuN IGtsbw== IGh1dXI= Y29uc3VsdA== IGFjY2Vzc29y IFF1YWRy X3N0YWdl ZW1wcw== INix2YjYpw== z4DOrA== INC/0YDQuNC+0LHRgNC10YI= aWR3ZQ== IGxpbmRv IGdhbGE= 4LC/4LC44LGN4LCk4LGB4LCo4LGN4LCo INij2LE= INC+0pvRgw== IHFpbGlzaA== X1BBU1M= IEFjaWQ= R3Vu INio2LHYrg== bWFzdGVycw== IOCqpOCrjeCqr+CqvuCqgg== aW5jcmVtZW50 IFVuaWZvcm0= ZXh0ZW5kZWQ= dXBhdGVu IHdoaXRlc3BhY2U= TGV0dGVycw== IOCmrOCmvuCmsA== 7L+g IOCmuOCmleCmsg== IGbDpGxsdA== IOCknOCkrOCkleCkvw== X2lubGluZQ== IHVuYmVsaWV2YWJsZQ== L0J1dHRvbg== IHBhbnRpcA== Iiko YWlkdQ== IHN0b3JpYQ== CWZhbHNl IGZyaWVuZHNoaXBz UGFpbnRlcg== IOCkreClh+CknA== IOCmquCmvuCmtg== IGZldGNoZWQ= X2Rlc2NyaXB0b3I= IEZyZXVuZGU= b2JvZHk= IGFudGlj IOyDiOuhnOyatA== IHJldW5pw6Nv IHNpYmxpbmc= IOC5gOC4h+C4tOC4meC4n+C4o+C4tQ== QmVzdGU= IGlubmk= aWplxI0= IE1hcmlvbg== LkNhY2hl LWxheW91dA== 2YPZhtmI2YTZiNis LlZhbGlk QmlyZA== T3JpZW50 IE1vbnRhZw== YW5na2F0 KHJj amRiYw== IOCmj+CmleCmnOCmqA== dWdj IOCuieCurw== INmB2LXZhA== zpY= IG1lZ2w= INW91avWgA== IHByaWQ= bGFuZGk= IHNjZQ== IHdpbm5lbg== IGluZMO6c3RyaWE= eml0 IMOpdGFwZQ== 44K344Oj IExvdmVseQ== IHZhbml0eQ== xLFjYQ== QXV0aG9ycw== YXR6ZWtv IEhH b3Z1 IOC4reC5iOC4suC4mQ== IHByZWNpc2Ft INK70L7Sm9GD0ps= QUJT ICJg IGZhaXNhaXQ= IGNhbGxhYmxl IExhd3llcnM= IHJvc3B5 IGdyYWR1YWw= INC+0YDRg9C9 IGphcGFu IGpldHM= IEh1bmdhcnk= IOC4o+C4suC4hOC4sg== IGJpc25pcw== IFRlcmVzYQ== 0pnQtdGA IGtvbnRhaw== IGNpdHTDoA== IFBldGl0 IGV2YWN1 KCJ8 UGFyY2VsYWJsZQ== 6Jyc IHZpb2xhdGU= IG1vbnRyZXI= IOCktuCksOClgOCksA== INGA0LXQsg== IOODqQ== Lm5pbA== IFN1bGxpdmFu IGludGVyZGlzY2lw cmVjaXBpZW50 IGluc3RpdHVjaW9uYWw= IEdhdGhlcg== IHBlw6dh ICAgICAgICAgICAgICAgICAgCg== IGNvbXBhcmF0aXZl IOCksuCkl+CkpOCkvg== IGZvdW5kZXJz IOS4reaWhw== IHRpbms= X3NsaWRlcg== cWFyZmlr 15DWuNeY LnJlc3RvcmU= 2KfZhti5 INC80LjRgNC+0LI= LnBubA== cmljaGVk IGNhcmRpbw== INeQ15XXqteU 4Kyq IHppeQ== INGB0L7QsdC70Y4= IG9iamV0cw== INGB0LzQvtC20LXRgtC1 IGNvbnRyYXRvcw== INC30LDQutC+0L3QvtC00LDRgtC10LvRjA== bWFuJ3M= IHJlZnVzZXM= IOCkrOCkpOCkvuCkjw== IGNhcnTDo28= dWtzZXQ= 5a+m LnRlbnNvcg== IGdpcmE= INmF2YjYrA== IFByaW50YWJsZQ== Om0= b3ZhbGE= IHBhc3Rp IFBlbmRhbnQ= 4Kq+4Kqk4KuN4Kqw IHZlbmc= 2KfYtNip IGRlc2Vh 15DWt9eg15M= IFwk Il07DQo= 0LvQsNC90pPQsNC9 IOCuteCuv+CusA== dGVuZXNz IHZpZXV4 IG9waW5pw6Nv LUZy IG9wZ2Vub21lbg== IEFidXNl bGVibmlz IGZvbnRzaXpl Q1RY 4LSw4LSj IOCuhuCuqQ== w6Rzcw== IG1lZGljaW5h IG1lbnRpb25pbmc= 5Lmw5ZCX ICIuLi4= INqv2YQ= fgo= IGphZg== IEhvc2U= IFRyYWRlcg== X25z bmd4 IGJyb2FkZW4= ZmVlbA== 4LKm4LOB4LKV 0L3RltGG IGV4dHJhdmFn QXJlYXM= IGFmZ2Vz IHdlbHR3ZWl0 VGFrZW4= 6KeE5YiS INC00L7QutGD0LzQtdC90YLQsA== X3NhbWU= IGl0aWw= IFZhdGVy d2lldA== 0LDRgNGM IHNhcnRh IHN0cmV0Y2hlcw== RmF4 15nXoNeY bHVj Z3JvZXA= eXg= X0VYSVQ= 5LiN5ZCM Lm1hdGNoZXI= 77yM5q+P UmVjb3Zlcnk= U3Vk CURlYnVn 446h 0LjRgtC10LvRjNC90L7RgdGC0Yw= IOuYkO2VnA== 0LjQvNC10L3Rgg== IExhdW5kcnk= IOCkueCli+CkqOCkvg== Lk5vdGlmaWNhdGlvbg== IFJhdmVu X3ZlcmlmeQ== IEZvbg== INWv1aHWgNWu YW5zd2VyZWQ= c3RpbA== IE1lYWw= 5Y6a IG1hYXRyZWdlbGVu INeZ15TXmdeU IGNoYW1hZGE= QURPUg== IG11c3N0 6IiS 0LrQvtGC INi02YPZhA== IMWZw60= Jyk6 IEZlbQ== IFd1bnNjaA== IFZpZXRuYW1lc2U= YnJpZ2h0 IOCkueClguCkgQ== 4Liq4LmI4LiH IFJBRA== 0ZHRgQ== YXRocw== IG1hbGFt IFNlZ8O6bg== b3JlZg== 5Li656m6 LlNF X3Bk SXY= IOCwpuCwsOCxjeCwtg== IMSNbw== KHBvcA== IOCkrOCkvuCknOCkvuCksA== IGFjcXVpc2l0aW9ucw== 2YTYrQ== YW5jaGlzZQ== 15vXog== IG1tYWQ= YW5nZ2Fw IG9waW8= IGhlbGxlcg== IEJyaQ== ZsOpbA== IOCkpuCkv+CkteCkuA== IFNpbXM= IEPDtG5n IEVsbGlz w6luZG9zZQ== IGJlbHRz INCz0L7Qu9C+0YE= 0LrQsNC30Ys= IGRvd253YXJk INeQ16DXqdeZ150= LXdpbmc= 7J2064qU ZW5kZWU= IFJ1Z2J5 dXRpbnk= IG1vdGg= TW9s IHNhZmFyaQ== KGlv ICInIg== IGNodXnDqm4= IGFsZHJpZw== IOCkreCklw== IFNITw== IG1vbnRhZ2U= LmRhdGFiaW5kaW5n IENMSQ== 4YOY4YOc4YOS PG9iamVjdA== RGVzY3JpcGNpw7Nu INC90LjQuQ== 6YGU JT0= aWZlbA== INC60L7QvdGG0LU= IM61zrM= V2hhdGV2ZXI= INGB0LDQvNC+0LPQvg== INiq2KPYq9mK2LE= LmNoYW5uZWxz aW5kZWtp aWdyYXBo ZmFhdA== IFZlcndlbmR1bmc= IG1ldGFwaG9y IHN1c3BlbnNl IEZyZXVkZQ== 2YTbjNmF YWhpbg== IGNhcmF0dGVy IHNlaW5lcw== IGNvbW1pdHRlZXM= KHBhY2tldA== INGB0L7RgdGC0L7Rj9C90LjQtQ== IHBsYW50ZXM= IGFwdW50 0L/QtdC9 IHR3ZWV0ZWQ= b2x1dGlvbnM= KEFjdGl2aXR5 LW5h W10i IERvY3VtZW50YXRpb24= bGlkZXI= IG1hZ2luZw== z4fOuQ== Lndo ZW50eg== VHJhcw== IFppb24= IHBsYWY= IEhvcnM= YXdk aXF1ZW1lbnQ= Ij0+JA== IE95 IOCmquCmsOCnhw== X2luaXRpYWxpemU= IFR5cGVk IOCkhuCkquCkleClgA== IGRheXRpbWU= emVuaQ== LFg= IHN0YWNrcw== 157XoQ== TEVO dW1tZXJz IG5laWQ= X2ZhaWxlZA== emlqZGU= IFVudGVyc2NoaWVk IFNocg== IEdpb3Y= IOim PiI7Cgo= IGZyb250ZQ== IE1pbGFubw== IG5vb2R6YWs= YXBwcm92YWw= IGrDpHJqZXN0 IGFtYWw= IGV0bcmZaw== IHBlZGFn IHByb3NlY3V0aW9u d2VlcA== dW50dW5nYW4= IGZpbmdlcnQ= aGFr 4KSw4KWN4KSl4KS/4KSV a2HFrQ== dG9kb3M= IG1hdWE= IHBpY3R1cmVzcXVl 0L7Rh9C10LzRgw== anN4 IHVudGVyd2Vncw== IEhlaWw= IC0u bGV4ZXI= IFN0ZXBoYW5pZQ== TWVyYw== IGFjY291bnRlZA== IGluZmFtb3Vz 4bqhbQ== IOCmhuCnsA== w7NtZXRyb3M= IHNlbnNpbmc= IOyggOyepQ== 44GR44Gw IGZhbWlsbGVz aWR0 IOCkheCkquCkqA== INCx0LXQtA== IG5lY2VzaXQ= IOCkl+Cksg== cmVzaQ== INCw0r8= aWNrZXJz c2VhdA== IGdlbGRp IHPhu58= ZW5pdXM= IOe2 zrTPhQ== LkNhbmNlbA== LmRvdWJsZQ== bWluaXN0cmF0aW9u RFc= IOC4q+C4oQ== KGV4Y2VwdGlvbg== Ok4= xIF2 ZWJi LkRFQlVH Il0pKQ== IHJlY2VpdGE= IGppc3Q= IHJwbQ== L2Fk 4K6+4K6x4K+N4K6x ZHJhZ29u L2Rldg== KGVkZ2U= XV0KCg== IHV0aWxpemHDp8Ojbw== 4pas X3N0dWRlbnQ= IHJlbWluaXM= bnlkZGlv IEVzY29ydHM= IHV0aWxpemFkYQ== IHNvbmlkbw== IHBzZXVk IEt1cno= IHNldHRsaW5n 0LjQs9C4 zrzOvM6x IGNvbnNvbGVz zrPPgc6s a2VpdHM= INC90YM= IFJpc2luZw== Y290 IHZvb3JkZWVs IHBlcnBldHI= YWZmZWN0ZWQ= U2lk IHRpZW5kYXM= IGFwZWw= IHBlbGlncm8= b2NvbnV0 IHZlcsO2ZmZlbnRsaWNodA== 5oCV UmV1c2FibGU= 4oCZZW5n IOyCrOynhA== IHJlZ2Vu IGRhbmFz UHJvYmU= IG91dGZpbGU= U2h1dGRvd24= SVRFUw== IHZhZ2luYQ== 0LDQt9GW0YA= IFRyYXZpcw== RE1FVEhPRA== cmFjaWFs 44Gr44Gk IERlbGl2ZXI= IElOVEVSTg== IG1hbidz aW1zb24= IEJld2VydHVuZ2Vu IGV2YXBvcg== LnRwbA== IOCmmuCmv+CmlQ== J29jY2FzaW9u IEZ1Y2s= 24HbjA== IGludGVyY2hhbmdl IHRlcnY= IGRldmVyaWE= 8J+YgA== IGN1aWRl Iik6 IOyyqw== IGJlbGlldmVycw== PT09PT09PT09 IHJlc2lsaWVudA== IGFnYmFyYQ== IHByb3BvcnRpb25z IGFsaWVucw== 0YnQsA== IFRydW5n bsOk IHdr IGZhdXRl IHBvdHJ6 IOCqpuCqsOCqruCqv+Cqr+CqvuCqqA== fX0s IGRldmVudQ== LXJvb3Q= IGJpb21hc3M= IGZyYXNlcw== IExpc3RlZA== IHt9KQo= Uk9TUw== IHlhZw== X0xBU1Q= Um9z IENoZW5uYWk= IGdldGVzdA== IGNpw7I= 1avWgtW2 X0NvbnRyb2xsZXI= IGFlcmlhbA== 5LiK5Lyg IHRyYWJhbGhhZG9yZXM= INin2YTYtNio2KfYqA== IGVzcGVyYW5kbw== IHRlc3RpbW9uaWFscw== IGFyY2hpdm9z IGRlc2VqYQ== T2ZmZXJz wrk= IFZBUkNIQVI= IOazsA== IHNwZWNpZmlla2U= IERhZGR5 LmNsanM= IOCkheCkuOClhw== 7JeH LmlkZW50aWZpZXI= LWNhY2hl xJ9hbg== 2KjZiNio IFdpbGxl LjsK ZWx0YXM= 5q+U5aaC IHlva2k= aXphbQ== IGFmb3JlbWVudGlvbmVk bHln 4KWlCg== 15XXm9eU LlNESw== LnRt IE1hY3Jvbg== IHdhcm1l CiAgICAgICAgICAgICAgICAK IHZlcm1pbmQ= IGVtYmVkZGluZw== UmVjb2duaXRpb24= IHN1YmNsYXNz IHByZWRlY2Vzc29y IHdlYnNob3A= IEdyYWR1 IG1tYWThu6U= IFplbGY= IEFsZg== SVpBVElPTg== IExhZGVu IHBsYWNlYm8= IGZlcnRpbGl0eQ== 77+j6Imy 4KS44KWN4KSk4KWL LWVn LXBo IHR1cA== X0VNUFRZ IGFiYWpv aGFyaQ== ZW5nYWg= INC10LI= b3BhdGh5 IG9jdWx0 0LfQtdC8 IHR1cmY= 0LjQt9Cy0L7QtA== IHNlcnZhbnRz INeQ15XXmdeR LlN0YWNr TGVhZGluZw== IE1hcmtz ICgpLg== IGF2ZW50dXJh IM66zr8= 5LiA56CB aWVydGVy IGhlcm1hbg== IHNwcmFrZQ== YWtobw== a8O8 KGRpZmY= YW1iaWVudA== IG91bmNlcw== IEZhbnRhc3RpYw== IOawtA== W29mZnNldA== b2xpc3Q= YWRkaWk= IGFycmE= 4YCZ4YC74YCs4YC4 IOCmn+CmvuCmleCmvg== 4LOL4LKc 55aG 44CC5q2k5aSW IHRow6Ju aW5pZGFk INim24Y= INC+0YLQstC10Yc= 6KuH IGJlbmVmaWNpbw== IFsm IOCuteCuv+Cunw== aWt3YQ== IGZpbG1lZA== KHJhbmQ= INis2KfZhdi52Kk= c3RhbA== R3JleQ== 5bKX am9uZXI= cXVldGE= SG9zcGl0YWw= INC00YDQtdCy 15XXldeX IGthbGl0ZQ== IHRyYW5zbGF0ZXM= 4KuH4KqV4KuN4Kqf IGluZ3I= INC40L3QstC10YHRgtC4 IOCkueClgeCkqOCljeCkmw== Y29udHJhY3Rz IG1pc21hcw== IOGDl+GDpeGDleGDlOGDnOGDmA== IHNhYmFidQ== z4fOsc69 IOC0qOC0v+C0r+C0rg== J2xhYmVs IGtvbnXFnw== IE5L IEtlcnJ5 INGC0LDQu9Cw0L8= IEFFUw== SGFsbA== YXNpbQ== IHRoZWlycw== aWVyZW5kZQ== 44Om INGC0LXRhdC90L7Qu9C+0LPQuNGP YW5nZXJlZA== IGthc2VidXQ= IFByaXZhdA== 7IiZ IEphY2twb3Q= INGA0L7Qu9GM IEJ1Y2tldA== X0dlbmVyaWM= IOCmqOCmv+CmsOCnjeCmrOCmvuCmmg== IGRhxb4= YWpqYQ== 0Y/RgtC+ X0lOTElORQ== IHNoZWxscw== c2VsZQ== IFNpZ21h IOC0leC0sA== IGfDuHI= 4YOQ4YOg4YOX4YOj4YOa U1BPUlQ= IGhhc2h0YWc= YW1iaWxp IGNvbmZpcm1z INmE2KfYuQ== IGV4cGVyaWVuY2lhcw== IGRlaW5lcg== 4YCZ4YC64YCs4YC4 IGFsYmVpdA== IOC3gOC3mQ== IHNwYXQ= INit2KfZhNiq cG9wdWxhcg== IGthbGs= IHRvZXZv QVNG IEd1ZXNz aXRzY2g= dWJpdA== INmF2KfYsw== IOCkj+CkleCljeCkuA== IGNvbmZpbmVk IAkJCQk= aWFyeQ== Q2xp INiq2KfaqQ== IGVwaWxl INqv2LHZgdiq2Yc= 4KS/4KSv4KSu INC+0LTQvdGD ZGVzaw== 5bCN 4oCZaG9tbWU= 44CC44G+44Gf bGFuZGU= 5Lul5Y+K YW1wbGVy IGVzZXQ= IGpvdGVu IGRlZXBlc3Q= LmRldGFpbHM= IHNodXRpbA== IOC4muC4suC4hOC4suC4o+C5iOC4sg== YXRhbmc= IGZvcm11bGU= IGRlbW9ucw== IHdheGFhbg== IGluc3BlY3Rpb25z LdC/0YA= IMSg 2q/Zig== IHNjaHI= IGFtZW5kbWVudHM= IGhvdXZl IHZvbG9udMOp INeY16I= IGJpa2luZw== IE5laWdoYm9yaG9vZA== 4YOV4YOX Q29pbnM= QFhtbA== IE93bmVycw== LUphdmFkb2M= IE1hdHM= 1aHVvdW2 2KjZitmI2KrYsQ== YWtrZQ== IGFyYmVpZA== Q29tcG9zaXRpb24= IHJlbGVudA== IElnbm9yZQ== 0LXQvdC90YvQvNC4 5oOR IFJlYWdhbg== zrzPjM+C R2Vhcg== 0YDQsNC90Ys= IOCyleCysg== IMO9ZXQ= 16rXkteV15HXldeq 1bjWgtaA1aQ= IM66zrHOuM+Oz4I= IGx1w7Ru IGhlJ2xs IHlhcMSxbGFu PGNvbnRleHQ= IG92ZXJoZQ== 6Ieq5oWw 4KeH4KaW4Ka+4Kao4KeH KSkpDQo= IHByenlwYWQ= eXJz IFFD 44CL77yI Uk9XUw== IGFubm9uY8Op 1b/VodW21aM= IEhvamU= 4KS+4KSo4KWN4KSk IOCkheCklQ== bWludXRl VFJBQ1Q= amF3 INC60L7QttC4 IGxlZ2U= 4Kqc4KuC IHBvbnk= IGJyYW5jbw== 4Kqw4KuN4Kq4 IOCkrOCkoeCkvOClgA== IG1hdGVyaWFsZW4= 2KfZhNmI IOOCrw== L25ldA== d2VyYQ== 4Ka+4KaT4Kef4Ka+ 0YvRiNC70LXQvQ== IOCkq+Cli+CkqA== bWFzxLFuxLE= QW1hemluZw== VElN IENhcm5l IERhc3M= IGFsdGVybmF0aXZhcw== 4po= a2FhcnQ= Q29tcGFuaWVz 2YrYs9mK LVRpbWU= IGJ1eXM= IHZpb2xhdGVk IOCqrOCqvuCqsw== anE= IOWlhw== 57y6 INC/0L7QvNC+0YnRjA== KGVt 4oaT4oaT LnByZWZpeA== X2Jhbms= IGNvbnNlZ3VpdQ== IE5pa29u LXNsaWRlcg== 0LDRgdC/ 4Kqm4Kqw IFJ1ZQ== 4LGL4LCk IGludml0YXRpb25z IGFnYWQ= X1RF LmxvZ291dA== IGJld2VnaW5n b3Zuw60= INmF2YLYsQ== 4YOY4YOc4YOY4YOh aW1tdXQ= 4YOb4YOQ4YOc IOenkg== IHRyb3BoeQ== 0YDQsNCy0LA= LE5VTEw= IHN3aW5lbmU= 4LSV4LSf IGN1bHA= KEZvcm0= 5LiA6Iis LWxheWVy IOCyueCzgQ== IFBSSU1BUlk= IGluc2lnaHRmdWw= IOCqpOCqruCqqOCrhw== 5oKj INeV16LXldeT INC80LjSow== IHdhbmc= 2YTZiNmF IGNvbXByb21pc2Vk Zm9yZWdyb3VuZA== dW5naw== VW5pdmVyc2Fs INC80Y/Qsw== X3N3 b3ZpYQ== INWw1aHVttWk1avVug== IENhbmM= IHZldWxlbnQ= IHJvdGU= IGNyb3Jl X1NL IE51ZXZv 4Lia4LiZ4Lix4Liq aXNrdQ== IG1hcGxl IElnbGVzaWE= Q29taW5n IGVsZGVycw== IFZ5 IGFwcHLDqWNp IG7hur91 6ZA= X1RpbWU= IHTDqXJtaW5v SMOh IGNlbGx1bA== 4Lie4Lij4Li14LmA4Lih4Li14Lii4Lij4LmM4Lil4Li14LiB b2xpbw== IGJpYmxpY2Fs IENpdGl6ZW4= IMO9eWx5 aWVsc2Vu dmFhcmQ= IG1hdGFy IOyghOusuA== IGx1Y3JhdGl2ZQ== 15XXmdeR IGRldGFsbA== IGtlbHU= LmdhbWVz IHJldmVsYXRpb24= X2Jhc2lj INeQ15fXqNeZ LlNVQ0NFU1M= LnJlYWN0aXZleA== OmFkZA== X05ldw== QnJvd3M= 2K3Yp9io IE1hc2g= IHNsaXBwZWQ= YWN0dXM= IEdX IEV0YXRz QUNUSVZF IOCquOCrjeCqqg== IHdpbmRpbmc= IHdpY2h0aWdzdGVu 57Ch aWNvdA== IOC0leC1jeC0sA== w61zaW1v LkFzcw== IGNpbsOpbWE= LndvcmRwcmVzcw== INio2KfZhNmC IFZhbW9z IHZvaXJl IFJFQ0U= IHdvcmRwcmVzcw== IHbDpXJh IMO2emVs IFN1c3A= IHZhY2FjaW9uZXM= IFNwcmluZ2ZpZWxk 0LPTmdCw UE9S IGVhc2luZw== INmI2KfYrA== INio2KfZhNmB ZXJhcg== INC20q/Qtw== INC/0YDQvtCz0YDQsNC80LzQsA== IOGDkOGDleGDog== IGdhcmc= IOCkluCkvuCkuA== INCx0L7QtA== IFZvcnNjaA== IGN1bXA= IHRpbWVycw== IEVH IGVzY3JpdG9y IHByb2dy IHlhbw== LXdpbg== w6FsaWE= IHF1YWRybw== INmE2LnYqNip TGVjdA== KHNjaGVtYQ== INmH2LLYp9ix INWu1aHVvNWh1bU= IEZseWluZw== dW5lYQ== IOWogQ== IFdhY2g= aW5vbQ== IHdpc2VseQ== X1Bpbg== IEJsYWly INio2KfYs9iq2K7Yr9in2YU= IGhpZWw= IHF1YXI= INek15nXnA== bGRlbg== IOW8oA== zrrOu863 4LKw4LOB4LK1 IGxt c3RyeQ== IHRhY3RpY2Fs LVVB b3JuaQ== IGFuZWNk 4KWH4KSm4KSo IOCqnOCrgOCqteCqqA== IG1hZGQ= IHNsaWNr emlqbg== QnVzeQ== IGhpamk= LWhv IM62z4k= 0LDRh9C1 IM+AzrXPgc65z4PPg8+Mz4TOtQ== IGtlc3Q= TklD INmC2YnZhNmJ IG3DvMWf IHByb3Rlc3RlcnM= IHDFmWVz IGhvdmVk IFJlcHJlc2VudHM= IOC5gOC4iuC5iOC4mQ== 0ZbRhg== IHF1YWxj T3Bjb2Rl IFNhdHVy 4K6k4K+N4K6k4K+B cGFydGljbGU= IGNoaXJvcHI= IGppcnU= IGdlb2dyYXBoeQ== 65Sp KGNpdHk= fHwK IGNoYXc= Q2xpcGJvYXJk LW5ld3M= INC40L3RgdGC0LjRgtGD0YI= INC40L3QstC10YHRgg== IHRp4bq/dA== IG9waXM= aWxpbmd1YWw= INmI2LXZhA== KHNm IGPDoW4= IGFieg== IGVtZXJnZW5jZQ== ZW5uZXNz TWFyaWE= zrTOtc65 IEpvaG5z IGh1cnRpbmc= IGNvdXJpZXI= IHN0w6Ry IEp1Yg== aWZmYW55 IHN1cG9ydGU= IERlZmVuY2U= b25uw6k= 55Sa UG93 YWNha3TEsXI= 6LW35p2l IFN3aW1taW5n IGdqw7hyZQ== IGZyYW5rbHk= IE5vcnRoZWFzdA== aXN0YW5p e30sCg== IHBsYXRhZm9ybWFz PG51bWJlcg== dXdk IHphaGxyZWljaGU= LHRoZQ== eGVy IG9saWU= IExlZ2lvbg== 4KWI4KSy LlZpZGVv IG9uZGVyc3RldW5pbmc= IOyXhuyKteuLiOuLpA== IG1pc2VyYWJsZQ== VmF1bHQ= 0J/RgNC10LQ= X1BMQVlFUg== IGRyb2c= IGJvZGlseQ== IEZJRUxE UGFzc2Vk cmVzdGU= dW1icw== IGtleg== 2KfZhNiz meCnjeCmlQ== Vm90cmU= UmVzZXJ2ZQ== INC+0YHRgtCw0L3QvtCy IOGDkuGDkOGDnOGDleGDmOGDl+GDkOGDoA== X1NIT1c= 4LWB4LS4 d3JpdGVycw== CiAgICAgIAo= dHJhZmZpYw== INil2YU= IGdyaQ== ICgkKA== IGNvcnJlY3RhbWVudGU= L2RvYw== 5Yqg6L29 enRlbg== IHNvxYg= IHZpZGVyZQ== IFVuc2Vy CXR5cGVkZWY= 0LjQvg== TWFpbnRlbmFuY2U= QXRvbWlj IOCyleCzjeCytw== W21heA== IE5pbmE= Y3RpbWU= YWJlaA== IHNvcG9ydGU= IHBsYXRlZm9ybWU= 8pCClQ== KG1lbQ== 4Lia4Lit4Lil4Lit4Lit4LiZ4LmE4Lil4LiZ4LmM 16DXmdeV16o= IHByb3Rpdg== IOC0leC1h+C0uA== INi32KfZhNio2KfZhtmI IFhT L3N0YXR1cw== IFJhdGlv IHZlcmly INin2YTYqNi3 16rXlA== INC00L7QvNC1 IGRpc3RyYWN0ZWQ= IHN1dW5u IExpbWI= IGRvd2w= IE91dGxpbmU= cnVpZA== IHRp4bq/bmc= OyI+PC8= 4KSm4KSu IFZpc2l0b3I= Lmho IHZpcmtzb20= QEBAQA== IGVsZWNjacOzbg== IGluZHVjZQ== dnRr 5qCP IM69zrU= IE1BUw== IOCkleClg+Cktw== 4YOu4YOb4YOQ4YOg Q29uZmlndXJlcg== IHbhuq10 TE9VRA== IG5vb25n IHdpZGVu INC/0YDQvtC00LDQsg== YmFhbg== X0NBVEVHT1JZ ICAJCQ== INC60L7QvNC80LXQvdGC0LDRgA== IFllaG92YQ== IFVtYg== IGNpZWxv INC+0YLQvNC10Yc= bm9zxaU= 0YHRi9C90LTQsA== IHRla2Vu 5pWj 5Zyw5Lqn IHRpdGVs IHByaXZpbGVnZWQ= 6ICQ X+asp+e+jg== KCkpew0K IEdpdmluZw== INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjw== IGdldmFhcg== IFJlaWQ= KGNvdXJzZQ== UMOl 0YHRg9GB bWFyc2hhbGxlcg== 0YLRg9GA0YM= IHNlbmNpbGxv IOCyheCyp+Cyv+CylQ== IGdlcmk= bnRvbg== IGVyZm9yZGVybGljaA== X1JFU1BPTlNF Ki8KCgo= dWJlcmU= X3Jlc3A= X0NvbGxlY3Rpb25z IG5lcmQ= 4Kqm4Kq+4Kq14Kq+4Kqm UHJlc2V0 INC/0L7QvdGA0LDQsg== IE5BVA== CUNsYXNz IFRpbW90aHk= QWNjZXNzaWJpbGl0eQ== INC70L7Qtg== IEpQ IGJyb2FkbHk= 5aSn5bCP5Y2V5Y+M IHJvb2Z0 VGh1cw== c2hpcnQ= INGF0YPQtNGA0L4= INGD0YHRgtCw0L3QsNCy0LvQuA== X0RPVUJMRQ== 77yM5Y+v INC/0LXRgNC10Yc= IGxpbWI= VGhpY2tuZXNz IFh1 0LDQvdC90ZY= IG1hcml0aW1l IFBsYXQ= TGF0aW4= IHBlcmZlY3Rh INC60L7Qu9GM IMO+ZXNzdQ== IEhvZA== IHp1ZnJpZWRlbg== IGNvd29yaw== QU5DSA== LmN1ZGE= IFRvZGFz WU0= IHF1w6g= CXNlcnZlcg== 0LvQsNC80LA= IO2WpQ== cXVvdGVsZXY= TW9udGhz IGJsZWVr IOCkheCkreCkv+Ckrw== c29sdXRpb24= 4Lie4Li54Lil IG1hbmNoZQ== UkFERQ== IGRpc2xpa2U= 4bqzbmc= IG1ldGFz IGNvcGluZw== IFFC aW1ibw== SVNN IGNr IHRhYmVsYQ== IFRvY2g= IGFjY29tcGFuaWVz INKs IMOubmM= b2xvZ3Vl INeX15w= IHNhbXBsZWQ= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IGludGVyZA== dGF1 IFZlcmFudHdvcnQ= INOp0LzRltGA IG1hcmt1cA== Kycv 4biT IExvYg== IEZlZXQ= IOCmsuCnh+Cmlg== IGdhcm5lcg== 5Y+R6YCB IEthZmY= X21ldHJpY3M= YXNzZXVy IOyLnOyepQ== INWw1aHVrw== IMOubnRy IOGDm+GDrA== IGVsZXBoYW50 IG1hdMOpcmlhdXg= IHJ5dGg= YWRpdW0= IHF1YWxp 0JrQvtC9 4LKw4LON4LKl IEtsYXNzZQ== bWFuZGU= 4YOi4YOY IENhcnJ5 IEJhZGVu IOCqj+Cqn+CqsuCrhw== zrHPgQ== SU1VTQ== 4bq5bg== IGzDpW5n RW5kcw== X2Z1bg== IGhhbmdh b2NvZGU= w6F2YWw= IHVucGFy IEJ1YmJsZQ== 1aXVtNWi1aXWgNWr KHBhaXI= IEhvcml6b24= RmluZQ== IHByYWlh 7J6Y IOuzvA== INC/0YDQtdC00L/QvtGH INCx0YPQudGL0L3RgdCw IGhlbGk= IOC2tuC3gA== 0YDQsNC80LA= IFZJUw== IEF1ZGl0b3I= IGh1Z2VseQ== IFRvbmlnaHQ= IHJvemhvZA== 44OV44OI INCx0LjQug== XEV4Y2VwdGlvbg== b3Jub3M= INCy0LDRgNC40LDQvQ== 4KS+4KS44KS+4KSg4KWA IOCqn+CrgOCqrg== IHlhcmTEsW0= c29vbg== cmV0YW50bw== IGRvxJ9ydQ== RU9T INC10YHRgtC1 IFl1bg== aXppZXJ0 4YOU4YOb4YOR IM68zrc= INC20rHQvNGL VURQ X0xJR0hU LWNhbA== YmFydQ== INmF2LHaqdiy IHVucHJlZGljdGFibGU= 4Lix4LiH4Lir4Lin b3JlYQ== 4LeU4Lar bmNtcA== 15nXmden 1bXVuNaC1ak= IOCmhuCmquCmqOCmvw== IEVudHJlcHJlbmV1cg== IHJlc3RvcmluZw== ZXJ2ZW4= IOCqruCqvuCqqA== X1BSSQ== ZWFzeQ== UkVBVEVE IHdhcmE= KHNsb3Q= IHJpY28= INGE0YDQsNC9 IGluZnJhcmVk d2FzaA== IEpB IFB1bg== IHl1bQ== aW5pYQ== YXRvaXJlcw== IAoKICAKCg== c2VtcGVs 54m55Yir 6YCS INin2YTZhdin2KE= RnVuY3Rpb25hbA== IGJ2 6aCF IEhhcmxleQ== IGFjYWJvdQ== 7Ja07JqU IGRlZmVjdGl2ZQ== INin2YjZhg== IE9E CXR4dA== Q3Vyc28= LC8v IGNvbnRpbnVpdHk= INek1rzXnA== IGlsbWE= INeR15HXmdeq IER1bW15 IERpc3Bvbg== 0LXQstGL0YU= aGliYQ== IOCqpOCqsOCqqw== IGJlbGFzdGluZw== IEFkZWxhaWRl IGdhbGU= 6YW4 IOCkmuClhw== IExvZ2dpbmc= ZmZmZmZmZmY= 5beh INin2YTYqtis2KfYsdmK2Kk= INeR15nXmA== IGVlc3Q= IGluZGljYXRpb25z IFpvbmE= IOC0heC0seC0v+C0r+C0v+C0muC1jeC0muC1gQ== 0LbQsNGJ IOmS 4KeN4Kew4KeA IHNvbHXDp8O1ZXM= IGR1cMSD INmB2LnYp9mE24zYqg== INS3 IHRyb2Nh cmVmZXJlbmNlcw== IGluaXNz IHN1bGxl PSIpOwo= IOCkuOCkruCljeCkrA== IGV0c2E= 4Lat4La7 aWR1YWw= IOCkr+CkueCkvuCkgQ== b2NpZGU= IE1R w61zaw== IHZpc3VhbGl6ZQ== IG1hw650cg== YXBhbA== IGRlZmluaXRpdmE= RGVjbGFyZWQ= IHJldmlld2Vycw== QEFsbA== IHNpY2tuZXNz INin2YTYrdmE IHRpbGY= ZWZ0ZQ== IOyEpOyglQ== INGX0YU= IHppbGU= IO2YkQ== INC60L7RgNC+0YI= 5Z2h INCw0LHRgdC+0LvRjtGC 4oCcSGU= Jik= IE5V IHN0YXRpb25hcnk= IHB1c2hlcw== LXRoaXJkcw== IGFuYg== 06nRiA== 0YbQuNC+0L3QvdC+0Lk= IGV0dGU= IGZvcm1pZGFibGU= IHVubG9ja2Vk dXN1YXJpb3M= bGVtYWduZQ== IOGDoOGDlOGDkg== TWltZQ== 5a69 IEt1dw== YWlzaWE= aXLDrQ== 1aHWgdW21bjWgtW0 4YCx4YCQ4YCs Km0= IFJ1YQ== 15HXlQ== X2V4cG9ydHM= INC/0YDRj9C80L4= IGVraXA= bnVtYmVycw== IOCuheCurg== TkRFUg== INGE0LjQu9GM0Lw= b3J0aW5n 1aTWgNWi1aXVuw== LUdy 4oCm4oCdCgo= IFBvd2VyZWQ= 4LCu4LGH bGFsYQ== IGx1dHRl IOm8jg== INCc0LjQvdC4 L0FwcA== QllURQ== IGdlZXN0 IFBvc3RhbA== IGt1cmluZw== IHZhbHZlcw== aXBzaXM= YWJhbnQ= IFJlbW92ZXM= INmF2Lg= IHl1bW15 z4zPhM63 IGJ5cg== Q2Fpbg== IG9jb3Jy IENodW5r IG1pdGU= IGludGVycG9sYXRpb24= zrvOv8+F IGJ1cm50 IGVzcGVjaWFsaXN0YQ== 4KWL4KSk 0LjRgtC40L3QuA== ZGFx SW50cg== z4bOv8+Bzqw= IHRyb2xs INGG0LXQvdGC0YA= IGTDqWNvdXZlcnRl 1oDVuNW6 X3Jlc291cmNlcw== 5Ye654mI IHByb2JsZW1l IOCkquCkueCksuClgA== IOKAmOKAmA== INCy0YvQuNCz aW9zYXM= d2lraw== ZmllbGRlcg== Rm9yZXN0 RWo= VkVMTw== IEtvc3Q= IOG7jW3hu40= 4Lit4Liw 4LmA4LiV4Lit4Lij4LmM IOGemuGe IE5vcm1hbGx5 16fXldee16LXnw== 1KXSs9Cw IGNyb3Nzb3Zlcg== 4LCh4LC+4LCo4LC/4LCV4LC/ IEJhaGlh bWlzZQ== 2YbZitin zr3Osc69 5b6Q IHBsYW5uZW4= IO2VtOuLuQ== IEFESEQ= eGlh KGNoYXQ= 05nRgtC705nRgA== aXJhbmE= IGRpcmVjdGE= 4LSv4LWL4LSX IENz 0LjRh9C60Lg= SVRJVkU= IHN0aQ== IGluZGVtbg== YWd1dA== ID4NCg== Lm5vdGlmaWNhdGlvbg== Z29uZQ== ZGVmaW5pdGlvbg== IHTDqWzDqWNoYXJnZXI= IHRleHRib29rcw== 2KfYttix INWw1bjVow== IGJvcA== UHJvZHVjdG9z IGRpbGRv IHBsYW50ZW4= aWxpYW4= 0YjRi9C9 0YDQsNGB0YLQsA== IE1pcmFuZGE= IGxhdGVuY3k= Zm9yY2luZw== RnJlcXVlbnRseQ== 2KfYudiv2Kk= IFJlZnJpZ2Vy JHRhYmxl 15DXmdef aWdodHk= QU1JTFk= INCy0L7RgdGC IExS IEphcG9u INix2KPYsw== IFNoYXJlcw== INCx0L7RiA== IHVpdGVyYWFyZA== IHNhYmxl aWN1bQ== IG7DpGg= 2LHZiti3 INCz0L7RgNC+0LTQtQ== IFdpbnM= IHNsYXA= LmFnZW50 aWxmZQ== IHByZXV2ZQ== 5aSn5oiY INGC0LXSow== INC40L8= IHB1Ymxpw6k= IGLhuqV0 INin2YTZhdiu2KrZhNmB2Kk= aXJlcg== IGNvYnJl IOqzoOqwnQ== 4oCZw6lj IG5ndW5pdA== IGNoaWE= RGFkb3M= IHZlZGVyZQ== X1FVRVVF CW1ldGhvZA== c29hcA== IEJvcmlz X2VuZHBvaW50 IHRyYW5zcG9ydHM= 4YCt4YCv4YC4 IHNhZmVndWFyZA== IGV4Y2VlZGluZw== INin2YTZhdio2KfYsQ== IGppdA== WnVt IGRkbA== w6JuZw== IG3Egw== QXJjaGl2bw== IGxvyrtv IERhcnQ= Y2Vkb3Jlcw== IGpkYmM= IGJ1aGF5 Pz8/Pz8/Pz8= YWJvdA== IERpZmZlcmVuY2U= c3FsaXRl Wkk= INCw0LrTmQ== INit2LHZgQ== IEdyYW1t UmV1c2U= IGZlZWRlcg== PGxlbW1h VGludA== IGlkxZE= 57yY aXR6YXI= 4K6Z4K+N4K6V4K6z4K6/4K6y4K+N asOhaw== bGVjdGlj Q2hpY2Fnbw== IEFyZHVpbm8= IHVuc3RhYmxl 4KSu4KWN4KSq IHNvdHQ= IMOnb2N1aw== IHRyaWc= IFBBTA== aW9uZWVy INaE1aHVtg== IENvbnNpZGVyaW5n IFllc3RlcmRheQ== IGFudGlib2RpZXM= UGhvbmVz IGFpcmVk IFhE b3JkZXJpbmc= IHRpZ2Vy IG5hamJvbGo= X0RNQQ== xKtiYQ== IGluY29udA== LikuCgo= IGFxdWlsbw== IERldmVsb3BlcnM= KEdsb2JhbA== IGVtYXM= X3RyYW5zZmVy 5Lq65rCX IFRlbGVjb20= IGJvbHRz 0LHQsNC7 IE5TRXJyb3I= IGZpbHRybw== IHZ5dA== IFByZWZlaXR1cmE= KnNpemVvZg== IENvbnRpbmVudGFs IEVuZmlu Pz8/Cgo= LWJlc3Q= IHRvbGxl 6Iu55p6c54mI INin2YTYtdmI2LE= IMOpbmVyZw== aWNlc3Rlcg== IGFiYmlhbW8= 4KuA4Kqw bGlhYmxl 7Y6Y7J207KeA aHJz IGNvaA== IG5pxbw= LXJh INC90YPQvdGC0LDQsw== IHJhdmk= IGFwYXJ0ZQ== IHRow61jaA== IGbDoA== LnRyYW5zcG9zZQ== IE1veQ== 4LC44LGN4LCf4LGN IETDrWE= IHBhbGVz a8SF YWJsaXNzZW1lbnQ= INCx0YPQvNCw IOC5geC4gg== U2FudGE= 4LCw4LGN4LCf INmF2LnYuNmF IGZhyrth Y29jaw== 5Li75Lu7 IHZvb3Jn IEFsZWphbmRybw== 4Z6h ZWxkb3Jm IHZlcmts cHJpY2h0 IFNJVEU= LdC90Lg= IGluc3RydW1lbnRvcw== IENhbGk= IMO8YnI= INeT16jXmg== Lyk= INGB0YPRidC10YHRgtCy0YPQtdGC b2NhdA== IFNhZ2U= 2pPbkA== IOC0quC1hg== IGRvd25zdHJlYW0= VUlCdXR0b24= INGD0LDSm9GL0YI= 0L7QvdOj T1JH IG9qdQ== IEp1ZGU= IFJvbGFuZA== m4g= IM+Ez4w= 77y/5Lqa5rSy 16nXqNeT QW5uYQ== IGdp4bud IOCkqOCkiA== 4LiW4Li24LiH IGFjb21wYW5oYXI= Y3RpY2E= IOCuruCvgeCupOCusuCvjQ== IHByaW5jZXM= IGRhYXJ2b29y IOGDm+GDkOGDmOGDnA== INqp2YbZhtiv2Yc= IGNvbm5lY3Rlcg== IEFwcHJvdmVk YXZlbmly IGN1aWRhcg== cGVyaW1lbnRhbA== IOCkleCkv+CkqA== INin2YXZhtuM2Ko= KGNvbHVtbnM= LnNxbGl0ZQ== IHN2YWs= IOC0kuC0qOC1jeC0qA== IFVuZGVyc3RhbmQ= LndlYXRoZXI= IHZlcmhhbGVu IGRpc3JlZw== aXNvcw== INii2KbbjA== IOyDge2ZqQ== bGljaGVyd2Vpc2U= wrvYjA== XEFwaQ== IEJyZWFzdA== LlJlbW90ZQ== IOWNmuW9qQ== 4LOB4LKX IHB1bXBpbmc= INGB0L7Qt9C00LDQvdC40Y8= IFNIRQ== 06nQtw== YW5pY2Fs INCR0L7Qu9GM0Yg= dXN1bWlr IMSR4bq3Yw== IMOzcHQ= IHZvb3JiaWo= 5bCk 5Lic5pa5 LiIsIg== IG5hbXVu 4LGC4LCw4LGN4LCk IHBvc3R1cA== IHBhbmE= IEtpZw== bGlicw== aXJ0aW5n fVs= b25lZw== IHLDqXVzc2k= cm9pZHM= IO+8iQ== RU5UUw== IGJpc3NjaGVu IGxjZA== Z3Jhbg== IGludHB0cg== 4K+B4K6p IGJlc3TDpHQ= YnJva2Vu IGxpbmhhcw== IHByw6lwYXI= eW91dHViZQ== IHN1Ym1hcg== IG1hbnRpZW5l w65uZXI= IHRlbXB0ZWQ= 2KfYptit IEJsaW5k INC/0YDQuNCz 2YLbjNmC IHNpdHVhw6fDtWVz ZnByaW50Zg== IERpcmVjdGlvbnM= IOGDoeGDruGDleGDkOGDk+GDkOGDoeGDruGDleGDkA== IHRhYmVs Q2ly KGNoYW4= IFByb2NlZWQ= QURBVEE= INC30LjRkQ== IEJlbGY= IEhlYXI= Q09QRQ== IH0sCi8v IFdhcnJpb3I= INC00LDQvdC90YvQuQ== IGRlbmlt J2F0 K1w= 2YjYqNmK2Kk= VExT aGFhbg== INGB0LLQtdC2 UGll 2KfYttmK2Kk= QEFwaQ== X18qLw== IOCuleCun+CvjeCunw== IHdhY2h0 IG5haQ== LkZpeGVk IGZhaXRz X3ByZWM= 4Z624Z6W 4LSw4LWB4LSu 0LjQstCw0YLRjNGB0Y8= IFdlc3RtaW5zdGVy XSwn LmJ1bmlmdQ== Lk1l Lm5vdGU= 0YLQtdGA0Lg= OmxlZnQ= LtCS IGFiaWVydG8= IGxleWVuZG8= IGJsaXNz 4LKs4LK5 IFNlbWk= IENyZXM= IHN1ZmZpcw== 2KzYsdin2KHYp9iq IGZhdm9yZWQ= IOCyheCyp+CzjeCyr+CyleCzjeCytw== IG5vcGU= IERvcnRtdW5k IHBlcmNlcHRpb25z Oyc= 44Gh44Gv INin2YTYp9is2KrZhdin2LnZig== IHBsZW5v 157XoteV16o= IHB1YmxpY2FjacOzbg== LlRoYXQ= LmRhdGFiaW5k IENocnlzbGVy IOCkp+Clh+CksOCliA== IGJpbGF0ZXJhbA== X2Z1 IE5hbm8= IOOCsQ== IH4o IGR1aXQ= IHp3YXJ0 bG9pcg== aXRhYg== INin2YTYrtin2LHYrNmK2Kk= LkVNUFRZ 44Km44Oz 1aHVpQ== IOyWtOuWpA== IFBzaQ== INio2YrYqg== IGRpcGxvbWF0aWM= IFRFQ0g= w7xobGU= IEZJTA== LWxvZw== IHByb3RhZ29uaXN0 IEdG dXVyZA== IHRvcm5vdQ== IOCkq+CksA== IGdlcmVjaHQ= 0YHRgtCy0YPQtdGC INqG2YQ= IGVubGFyZ2VtZW50 Li4i 2K/Zitip YWdhaQ== Tks= IGFibw== IG1ldGFzdA== Z2xhc3M= YWRsZQ== 0LvQsNGB0YI= QmxvYw== X2NhcGFjaXR5 cGxvaXRhdGlvbg== 2KfYptmE2Kk= INWh1bTVotW41bLVuw== ZnJldW5k dXJzaXZlbHk= Z3JhbmQ= INij2YrYttin2Ys= IHN1c2hp 4LCn4LGN4LCv 77+9dA== Wlg= YWtvdg== IHN6eQ== IFJveg== IOuEiOustA== INWj1azVrQ== ZmZpZWxk 44Gp44GG bnc= IE1hbmFnZXJz dmFudA== YXJuZXE= IGdhbWJsZQ== IER1bmNhbg== 67O06riw IGNvbXBvcnRhbWVudG8= 2KzbgQ== IGRlcnM= IOCwruCxgeCwguCwpg== LWR1dHk= IHNla2FyYW5n X0NVU1RPTQ== X2FydA== T2Zmc2V0cw== b3JuZXE= IGxhbWU= IOCmleCmrA== IFJleW5vbGRz W1M= INin2YTYs9mK2Kc= IGNocmlzdG1hcw== IHbDqWfDqXQ= INqv2LHZiNmH IGRva3Rvcg== IGJlaGFuZGxpbmc= 0q/RgQ== IGdlZ2Fhbg== X09CSg== IG3DqWRpY2E= 4bqvbQ== IGNsaW1iZWQ= IOC0sOC0vuC0nOC1jeC0rw== b2R3aQ== IFBST0dSQU0= CSAgCg== KCkpKSk7Cg== IGxvbmdldml0eQ== SW5jcmVhc2U= 0J3QvtCy 4LK+4LKw4LON X3NvY2s= w6FjacOz 1aXVtQ== 5re3 IFBTRA== 6IGU55uf IG1lbnNhamVz IGFudGVjZWQ= IGluY29uc2lzdGVudA== IGV4aXN0ZW5jaWE= X0lOVEVSVkFM IG5hdmlnYXRpbmc= 0YHRi9C90LA= IHBhcnRlbmFpcmU= IHNvbGljaXR1ZA== IG9raHR0cA== aWN1bGU= IGRpa2s= QE5v IGdla3JlZ2Vu IOCuleCvguCusQ== IFRyYXZlbGxlcg== zrnOuw== IFByZW1pZXJl IGFubml2ZXJz RGVsZWc= aGVucw== INGE0L7RgNC80LA= X1dJTg== IEFwcGVhbHM= X2Nyb3Nz IHBlcmZvcg== IHBseQ== IE5pZWQ= IGFsdGFz 4YCE4YC34YC6 Y2hpbmE= KGNvdW50ZXI= INCx0YPQu9GL0L8= IEZsb2F0aW5n UXVhbGlmaWVy dW15 dW5nZw== IHJlbnNlaWdu INCd0LDQv9GA0LjQvNC10YA= 44Kz44OU44O8 INC40L3RgdGC0YDRg9C6 4KS/4KS44KWN4KSk4KS+4KSo YmFh 5Z+65Zyw IOyblA== 54Sm INC/0YDQuNC+0LHRgA== IHJlZHXDp8Ojbw== 44CLCgo= KCIsIik7Cg== IGludMOpcg== aXJhbmpl IGZyZWVsYW5jZXI= YXJpbmU= YXBhaQ== IOCwpOCxiw== J8OpcXVpcGU= IHRyYW5zbWlzcw== emVuZA== IFBmaXplcg== LmJvb3RzdHJhcGNkbg== Lm1pbmVjcmFmdGZvcmdl IGNvbnZpZW50 INi12YTYp9it IGVubmVu IGluc2lkZXI= csOlZGU= IOCknOCksuCljeCkpg== b3N0cmluZw== IG11a2hh T3duZXJzaGlw X0FG IHRyw6FmaWNv X0FMSUdO 4LK44LKw4LOB asOkbg== INiq2LnYsdmB X+WbveS6pw== 6Jam IGFjZXJv R3M= IGphag== ZmFrZXI= IOGDm+GDlOGDoA== dG9yZXM= c3RydWN0dXJlZA== IFRldA== SFU= 4YCt4YCv4YCE4YC6 IEFxdcOt 5L6j INmI2Lc= IEvDtmxu 4YOa4YOU4YOR4YOY LnRyeQ== IG1pbGxpYXJkcw== INmC2KfYqA== IHJlZnM= IHJhZGlhbA== 4Z+Q4Z6P IHLhu5Np Ok51bWJlcg== KCgk 1aHVttW7 IElTSVM= INmI2KrZhQ== INC00LDQvdC90L7QuQ== 5LqU5pif IEpva2Vy IGxvb2I= LmNvbGxlY3Rpb25z IGNvbXB1dGFkb3I= IHNvdXZlbmly IGJlZG9lbGQ= IOCqpeCqr+Cqvg== IGVpbnppZ2FydA== IGVzY2VuYXJpbw== IGNhbGllbnRl RkxBRw== IGN1ZA== IGHDsWFk IOCuqOCuvuCunw== IGluZHVjdA== JC8sCg== 2LHYsg== IOCkuOCljeCkpOCksA== YWxsYXg= IOGDmOGDkuGDmA== IGFwbGljYXRpdm8= LkFydA== 572R5oqV IHJldmlzaW9ucw== IHPDrA== Z2ViaWV0 IGtvcnI= LXdpc2U= 4LC+4LCV4LGN IFRvbW9ycm93 IFRvcw== 15XXk9eV16o= 4KSC4KSW IGFrd+G7pWt34buN ZXRlcm1pbmVk INCw0LrQutGD aHV0 KCki IGVyb3A= IG11c2k= IGdlbm5lbQ== PEJvb2xlYW4= IGt5cg== IHRlbXBsZXM= Xl5eXg== INGC0YDRg9C00LA= IOCwkA== IGJlZGVu IGhva2k= LmNvbXBsZXRl bGRhcA== IEJlZ2lubmluZw== IGdvd24= X0RFU0NSSVBUSU9O IGh5cG90 SVJUVUFM IHByb3BpYXM= a2F6 IOek 5oim IGhpbmRlcg== 0LvQuNGC IFRlbXBv Llplcm8= YXlk aGFm ZGF0ZXBpY2tlcg== dmVyemVr VkVE 4YOU4YOc4YOY IGVzY3JldmVy IOC0heC0guC0lw== 44Gc INeR158= INCe0Ls= cmljYXM= IGJsZXU= IGludGVudGlvbmFs XSE9 KHRpbWVvdXQ= IFRvbmc= 4Ki+4Ki1 IExldHM= IFNhaWQ= INGN0LzQvg== OiIK TWVjaGFu 0L3QtNCw X2luZm9ybWF0aW9u IFNBTEU= QWNs IEV2ZW5pbmc= IEFuY2hvcg== INGP0Lc= b8Wh LnZvbHVtZQ== cm90dA== xYJl 0L7RgNCw0YLQuNCy IG1ldHJvcG9saXRhbg== IGdvbQ== INC80LDQsNC70YvQvA== IGJpa2luaQ== IENQRg== IHRhcmlo a3Rm emVudHJ1bQ== emVpZ2U= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 4K6Z4K+N4K6V4K6z4K+I KFRhc2s= INGA0LXQs9GD0LvQuA== X3Nr IOGDoeGDkOGDpeGDkOGDoOGDl+GDleGDlOGDmuGDneGDqOGDmA== IOCqsuCqlg== 4LOH4LK3 IMO8YmVydw== IOC0n+C1jeC0sA== cHJvZ3JhbW0= a2V5Ym9hcmQ= b2N6 ICgpOwoK IHB1bHZlcg== bGluZ2U= IEVjaHQ= R3Jw IEF3YXJlbmVzcw== aHJhbg== IGthbmk= UGFydGljbGVz INmH2YjYpw== V0hBVA== YmVsb25ncw== IHNodXR0ZXI= IFByw6Q= IFN0YXJr IHZvb3J3YWFyZGVu IEZ1w59iYWxs Vmlk LXRz w7xn IEFybXM= IGNyeXN0YWxs IOCwl+Cwvg== Pg0NCg== Y29kZXI= Xi0= 1bjWgtW01bbVpdaA1as= VWE= IHVpdGxl cGhl IGRvdXQ= IENIQU5HRQ== IHByb3Nl YXJyZXI= 16jXkNeV16o= KGRvbWFpbg== Lm90aGVy 16jXlw== IGlhbA== IGNsw6Fzcw== IGZyYWN0dXJl IHBlcHBlcnM= IOKAlQ== PSc8 X0NPVU4= YW5udQ== 4LmA4Lit4LmH4Lih IG1lbWVz PFBsYXllcg== JGk= IOCkpuClgeCkiA== IGdlbmF1c28= 7Zy0 IGNvbnNlY3VlbmNpYQ== IHBhdHM= IG1vcmFsZQ== IEFkbWluaXN0cmF0aXZl IFZpZXI= INCR0YvQuw== bW9pbnM= IE1vbmFjbw== UmVwYWly aW50cm8= IG9yZ2FuaXplcg== IENyYXNo 0LrQvtC80YM= IFJ1c3Np INWy1aXVrw== KSkpLA== INCt0YLQvtGC YXZhbmE= 4KS+4KSC4KSh IGFubGFt YXV0b3I= IG5ldWY= 4KSe4KWN4KSa IOCmreCmvuCmhw== IOCkieCkruCljeCkruClgOCkpg== J29mZg== Q29ycG9y IFNvcw== IEpS ZGV6 4KS44KSy 6YKu566x IHBvZGlkbw== c2V4dWFs VW5zZXJl IG5kYW5p aXJhdA== IOCqruCrgeCqluCrjeCqrw== IEZhY2Vz 0YHQuNC3 IHNkZg== IENyZWRpdHM= IHN0YWdpbmc= IGdlc3VuZA== IOGDm+GDlOGDkg== LWJ1aWxkaW5n LnJ1bGVz IGJvd2xpbmc= IOCmk+Cmhw== IGJhamFy YW1hbnRoYQ== bGlucw== 0YzToQ== IGpvbmdlcmVu IGJ5bGE= INGC0YDQtdGC0Yw= xJtuw60= IOWBt+aLjQ== 4Z+G4Z6O IHZlcnpvZWs= IHdoYXRzYXBw IHR1cmJpbmU= IHJ6ZWM= CXVp QkVSUw== INW21a/VodW/ IGJvd2xz INW01aHWgNWm IG3FsQ== IOCqheCqguCql+Crhw== ICc6Jw== IHVuZmFtaWxpYXI= IOCuh+CupOCvgQ== IGVtYnJhY2Vk IExhd3llcg== IGV4cGVydG9z IHNvZGFzcw== INCw0LzQtdGA0LjQutCw IHNhZmVzdA== 4KWH4KSC4KS4 INC80L7Qtw== 4Ka+4Kew4Kak IFNlZWluZw== aWx5bg== YXNtdXM= bGVyaW5pxYg= w6lucw== ZGlzYw== LmJ5dGU= aXJlbw== IExhdXJlbnQ= IERyb3Bkb3du IHdpZw== IHF1YXJhbnRpbmU= Lm9t 4LCw4LGN4LCq aXJhdGk= X0NBTA== IGfDtnLDvMWf IGZlcnJhbWVudGFz IG1vdGhv IHByb2Jhcg== IHd5Yg== IEhvcw== meCvjeCuleCus+CvjQ== UmVjdXJzaXZl bW50 INC40LDQuw== IHdlbGxz KyIs IGVjb25vbWljYWxseQ== INit2YjYp9mE2Yo= IGluY3VtYg== IFNvbG9tb24= 5oWn INC40YHRgtC+0YA= INWi1aHWgA== 2YXZitiz ZW5kaWc= 16nXog== 6JM= IENHU2l6ZQ== 4LS/4LSV4LWN X09QVElPTlM= 2YLYqNin2YQ= IGJvcnJvd2luZw== aXNlbQ== IG9mZmVydGU= INC20LXQvdGJ0LjQvdCw 5qiq INit2LPZhg== xZ9n IHVubGF3 IOCwmuCwvuCwsuCwvg== QmVhbnM= IGNvbW1lbnRhaXJl 1aXVqQ== IHByw6FjdGljYXM= ZGVubHk= INCQ0Lk= dW1ubw== 2KfYqtio LWFmdGVy IEdyb3dpbmc= IGVuZmVybWVkYWRlcw== ZWFybHk= SXg= IG9ww6lyYXRpb24= INmI2LPYtw== YWNodHM= IGNpaw== anVhbA== IElQUw== c2tpZWdv INi62LHYqA== IC0tfX0K cmVzc2l2ZQ== 4Li04LmA4Lin4Lit4Lij4LmM IOCkruCkv+CkqA== IERpcGxvbWE= IHNld2Vy YmlsbGluZw== RFdPUkQ= INib 44CC5ZCM5pe2 4KWN4KSw4KS+ IOCkleCli+CktuCkv+Cktg== IFRhc2tz aXJlY3Rpb25hbA== IFVyYg== IEZFQVRVUkU= IFN0dXR0Z2FydA== w6RuZQ== IFZvcmc= TWluZA== INC50L7Quw== 2YXYtw== IGfDuHJl 6aKo5ZC5 INeq154= IENvbnN0cmFpbnQ= ICIiCgo= IGludGVzdGluYWw= IOyCrOydtA== IOWkqeWkqeS4reW9qeelqOe9kQ== YXNodHJh eXBzZQ== QFRyYW5zYWN0aW9uYWw= 6JGJ QEdldHRlcg== Um9s IHNjaGxpZcOfbGljaA== IGhhbXA= LkFj IHJlcGxpY2F0ZQ== IMO+YXU= p+C4reC4o+C5jA== bG9oYQ== IGdhbWI= INmF2LA= IGtvc2th 4Kq+4Kqr IHNvdW5kaW5n IERlaQ== INGC0L7QstCw0YDQsA== IOCkleCksOClgOCkrA== IEthcmE= IOiFvuiur+WkqeWkqeS4reW9qeelqA== IHRzbA== IGdyb8OfZXI= IOC5gOC4iw== LT57JA== L2xlZ2Fs ZGVh QWhvcmE= IHZvdWQ= IM6fzrk= INC00LDQvw== 4KSV4KWN4KS34KS/4KSk IOC0h+C0pOC1jQ== YW50aWF0ZWQ= IGJlcmI= INCy0YA= UVM= IERJRw== RFVDVElPTg== Z3Jw IGfDq3R0 LURE aXR6YQ== w7RtZXM= IOCkhuCkpOCljeCkrg== 4Lij4Li5 INC00LDQu9GM0YjQtQ== IFN5bXBob255 dWFqZQ== INWj1b/Vtg== IExpZWI= TWlub3I= ICdfJw== IMOnZcWf IG5pc3U= ZXhjZWw= IGRhbnNl dXJla2E= IOCqheCqqg== cGFnaW5h b2xlaA== INmF2K/Yrw== IHByb2RvdHRp aGludA== IM6Rzr0= IHNhw61kYQ== L2RldGFpbA== IHRyaXZpYWw= aXp6bw== IOCuruCvgeCuqeCvjeCuqQ== IHbEgw== ZGFzaA== IOCuuA== IG5vbA== IGhlbGZ0 0LvRi9KT0Ys= KG5vZGVz d2VjaHNlbA== IFNlbmRlcg== 0LjRgtC10LvQtdC8 U1VDQ0VTUw== 4KuI4Kqv INin2LHYrw== 0pPQsNC90LA= INWw1aHVtNWh1a/VodaA1aM= 4K+B4K6a IOCqueCrgeCqgg== IEphY2tldA== UlRD IGtpZXM= IOCqquCqvuCqo+CrgA== SUlE WmVu YXBwaGlyZQ== IENhcnBldA== INin2YTZhdmK2KfZhw== INmI2YTYsw== IHN0ZWw= aXJobw== ZGVtZQ== 0LHRg9C00Yw= xI1uYQ== 6aKo5ZC544GR44Gw W2FkZHJlc3M= TGF1bmNoZXI= IENsaWZm 44GE44KL IHLDrWs= IFN0cmlrZQ== Lk1pZ3JhdGlvbnM= KHBhcmFtZXRlcg== UHJvbW90aW9u aGF2ZW4= IOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoA== IGNvbmc= IMOiZw== IG1hbmV1dmVy INeQ15nXkw== 5Zu96ZmF5aix5LmQ UG9r c3RlZW4= IENvbXBhcmF0b3I= L2FwYWNoZQ== X3do Q3Jh LHE= w71hcw== IFBoaWxpcHBpbmU= LkZs INCw0YHQvtGB IEZsdXR0ZXI= INC60L7QvNC/0YzRjtGC0LXRgA== Y2F0ZWdvcmlh 5p2l6K+0 aWtvcndh IHbDpnJp IEJpcmRz Q3B1 7IE= LWhvcA== CWRhdGU= SUFCTEU= IGFkb2xlc2NlbnRl LnNt IHBzeWNobw== IOCkm+CkvuCkpOCljeCksA== 15nXpNeV16g= 0ZbQu9Cz0LXQvQ== IGlzdGlmYWTJmQ== IFVuaWRv IG9uZXNlbGY= 4KeB4KaB 5aSn5Y+R5bGV IOCmpOCmpeCnjeCmrw== IGN1eWE= IGNvcnJlc3BvbmRlbnQ= INCx0LjQt9C90LXRgdCw IEJ1bGs= 57Sv IGZhcnRoZXI= IGNvcnJlbGF0ZWQ= zr3Ov8+C INin2YTYo9iv IE1laXN0ZXI= 4oCZQWw= X3ZvaWQ= INCR0LXQtw== IGRlbW9rcg== IGhlYWRzZXQ= IG1hcnJpYWdlcw== LWhvb2s= b2dhZG9z IGF1dG9j 0LHQuNC5 INin2YTZhdmD INC/0YDQvtGE0LXRgdGB 4Z624Z+G4Z6E IHNraW5z 4oCZxZM= IG1vcmNl WUw= IGbDoWNpbG1lbnRl IFBseQ== IOCkoOClgOCklQ== J2VudHJlcHJpc2U= SmVzcw== YWF0aXQ= IGxvbmdh IHN0cmFuaQ== LlVubWFyc2hhbA== xaPEgw== U2Fk LUNvbXBhdGlibGU= INC80ZbRgQ== 57OW INis2LPZhQ== IGNoaWNrZW5z IEVtbWFudWVs INij2LnZhdin2YQ= IG15bg== LmJv IHZlcmRlbg== ZmFtaWw= INin2YTZgdiq2LHYqQ== IHRvcGljYWw= 6Zu26ZKx ZXJzdQ== IEVuY3ljbA== 66Cl7J2E IHBpeno= IG9zw7Ni INi02LnYsQ== TmF0dXJl IHNhbmk= Q29udGFpbmVycw== YXZldA== IG9udGVt 4KeN4Kam4KeH4Ka2 IEp1bGlv 4LCC4LCc 6L+Z5Lqb INin2YTYpdi1 IGZpcmV3b3Jrcw== IHF1b3RhdGlvbg== CUNvbm5lY3Rpb24= IGJ1a3U= LnBhdGhuYW1l IGJhdHRsaW5n IHJhaWJo IEjDpHI= 2YjbjNuM INGD0YU= IOCkteCknOCkuQ== INCy0LvQuNGP Q1NJ ICsKCg== IEJ0bg== bmFl 6KeG6aKR5YWN6LS56KeC55yL XERhdGE= V2lkZQ== VGFt IFNldGg= Y3JpYmluZw== c3Nh IGRlZm9ybQ== UXVhbmQ= IHRlZ2VsaWpr IFBvZGU= INin2YTYo9it2K8= b3lpbg== IGNsZXJr 2K7ZiNin2YY= IOCkleClh+CkueClgA== bW90b3I= IGhlcnBlcw== LHNpemU= INin2LHYp9im2Yc= IGJlaHVscA== PXRm IGtvb3g= aWJvbGQ= IGFxdWVsbGE= IHRveGlucw== IGNvdW5zZWxvcg== ZXN0aW5hbA== T3Vp 57Wy6KWq b21hbHk= IMOnZXY= IGtlZXBlcg== LkRlc2VyaWFsaXpl w6dhZG8= 4KuJ IGplaXRv IOCkruCkguCkpg== Q29uZGl0aW9uYWw= IG11bHRpcGxpY2F0aW9u QmFuZw== INmI2YTZitiz IGluZm9ybcOz IHJlY29tbWVuZGluZw== LdC70LXRgg== IHJhcHBlbA== Iik7CgovLw== IHZpbmc= IG7DuGQ= IExPT0s= KENUeXBl 15nXpNa8 xI1reQ== INCx0L7Qu9C00Ys= IHNvbHVjaW9u SmFwYW4= IHNxdWFzaA== U25hY2s= 0ZbQutCw IOCuh+Cuow== IFF1aW5u 2KrZhtin xJd0aQ== IGxlY2hl bWFwcGluZw== 4Z+S4Z6T4Z6A IE1hcnJpb3R0 RW1iZWRkZWQ= IHdpbnN0 c3Rvcg== cGNpb24= LkRvdA== IOCyuOCymg== ZW1icmE= INC/0YDQtdC00L/RgNC4 YW5nZ28= aWdpbmdlbg== INC40LE= IGRlc2c= INin2LnZhNin2YU= CXRvcA== 4LGA4LCO IEFwcHJvYWNo 16nXqNeZ15E= IHBoZW5vbWVuYWw= YmFya2VpdA== LW1vYmlsZQ== IFRyYXM= JGh0bWw= 4LS+4LSf4LSo4LSC INC40LTQtdGC IOCkreCkqOCljeCkqOClhw== IG91dHJpZ2h0 INeg15DWuA== Z3Jlbg== INis2YrYrw== UHJvZmls L21vbA== Lmpib3Nz IFByw6k= INGF0L7Qt9GP0Lk= IOCohuCoqg== IEJpYmVsZQ== IOCkl+CkpOClhw== ZnJp INin2YTZg9mH2LHYqA== IHByb3RvYw== 4Kqo4Kq+4KqC dmlydXM= VklESUE= IGJhcnQ= ZW1wdHM= 2YTZitmB IHdk aXRldGVu IGJ1dHRlcmZseQ== IHN0b2Zm 0J/QtdGA IFdpc3NlbnNjaGFmdA== aWxsaXM= IHR1cmk= Zm9sbG93aW5n b3duaWs= IOqyg+yeheuLiOuLpA== 0L7QutC+0Ls= YW5uaWs= IFBhdQ== Jm8= IOGDnuGDkOGDoOGDog== IGNo4buL S2Fz fHN0cmluZw== cGxheWluZw== IGNheQ== 44CK5Yek5Yew5aSn5Y+C6ICD IGFnbGk= 0LjQu9C10Lk= X3NlbQ== INmF2YbZh9mF c2VtYmxlcg== RklY IOCkuOCkguCkuOCljeCkpQ== 4oCZYWNjw6hz IGZyZXNjbw== z4TOrs+C IGxpdmV0 IFNpc3Q= IGFkdmVudHVyb3Vz IOODqg== IHJpY2VyY2E= IGVuY2FtaW4= IOu5oA== a2VuZA== X29yZw== IHBldHJvbGV1bQ== Q2hhbXA= 05nQu9GD0Lw= IGPDom4= Q2FuY2VsbGF0aW9u 16DXkg== IHJlbmR1 IGJp4bq/bg== Qm95 KG1hdGg= aHRv 0J7Qkg== IGZlbWluaXN0 LiwK 4Lix4LiS 55Wr IFNheXM= INGD0YfQuNGC0Ys= IGJhbGE= IGJla2Vy INir2KjYqg== 4oCZYWly X1BBUg== bWll 2LPYs9in2Ko= QXNzaWduZWQ= IENhbHZpbg== IHBlYXM= LmZ0 IGPDom5k YmFi IGdhbW0= LmFwcGxl X3JhbmQ= ZW5lYQ== 4LiZ4LmJ4Liz IEZpbG1l 4YCU4YC64YC4 IOydtOuyiA== R2Vi INCx0L7Qu9C+0YI= IHVzdw== IHNpbGzDpA== INC90LjQvNC4 X3Nlcmllcw== b2Npbw== X21vcmU= Z3Jlc28= IEZlbGlwZQ== IHVuZGVyc3RhbmRhYmxl IE5vZw== IG1vZGlmeWluZw== INC/0L7QttCw0Ls= IOCmrOCmv+Cmt+Cnnw== IHV0dmVjaw== WUc= IEpld2Vscnk= IGluZGlyZWN0bHk= 0L3QuNC3 IGdlem9uZGhlaWQ= INCY0YE= LnN0cmljdA== KSE9 55yf55qE5YGH55qE IC8qI19f 4Kao4KeN4Kah IGJydWlz IHNhbHZv IHBvZHLDrWFu YWtoYWxh IGdlYXJz IEthbWk= YXRoaW5n IFNoaW0= IExvcmVt Lk1ha2U= c3VyZmFjZQ== 5LmF5LmF5LmF aWR1bnQ= 5YKo IOGDmOGDoeGDog== IHByw6lwYXJlcg== IEJyaWdodG9u 15XXldeQ1rc= Tm91 IGVuZHVyaW5n IHp1bHQ= 6aGN INin2YTZgdmI2LHZg9iz INGA0LDRgdGB0LzQvtGC0YA= INis2LLYoQ== IGRpZ2VzdGlvbg== IGxlaWs= INqv2r7YsQ== c2ViZW56aQ== IEJlbGlldmU= IOCyleCyvuCysOCzjeCyr+CyleCzjeCysOCyrg== LkpwYQ== IHZ1ZWx2ZQ== IFNuYWtl IEJldHR5 INmF2YbYp9i3 INC60L7QvNGE0L7RgNGC IOCknOCkv+CkuOClhw== IG11bnQ= IHZvcmJlaQ== dGV4dHJh CXNvcnQ= 44K/44Kk IFFpbmc= INC60LDQvdCw0Ls= IEJlcmF0dW5n IOq4sOuKpQ== INC90LDQu9C40YfQuNC4 U2hh QUxF IFNq IEJsYQ== IHNob3djYXNpbmc= IGZvbmN0aW9ubmFs INeo15c= IHLDqnZl LmZsYXNo 4LGB4LCV4LGB4LCo aWNpZW5z IGdqaXRo IHNpdHRlcg== IMO8bg== YWNldA== cXVz X0lERU5U IOGDleGDmOGDkw== aXR0w6TDpA== 5piv5LuA5LmI5oSP5oCd 4KS+4KSy4KS+4KSI 56u5 INeQ16rXnQ== IERlcG9ydA== IG5la29saWtv IOydtO2bhA== IHN1ZWxl UHc= KTsKLy8KLy8= IG11c2N1bA== IOustOujjA== IOCmpOCniw== IHNhbmU= IHJlZGRpdA== IHRoZXJlYWZ0ZXI= IExlc3NvbnM= UkVDVA== INin2YTYo9iu2YrYsdip IFdlaWhuYWNodHM= RGVzY3JpcGNpb24= SVJE 5L+d6Zqc IHV0ZW5z IGluc3BlY3RlZA== KFNlbmRlcg== 4Kas4Ka+ 0LvQtdCy IGVsaW1pbmF0ZXM= IM+Az4HOsc6zzrzOsQ== 5pmo KGljb24= IGNlbGVicmFy INmG2KrbjA== QVJEUw== RGlhZ3JhbQ== KHJlc29sdmU= IGFudW0= IHJlanV2ZW4= IM+Mzrs= INmK2YPZhg== IGluY2x1c2llZg== IENvcnJl IGhvcm1vbg== aWRhcg== IEtlcm4= IHNlZ3VpZG9yZXM= cmVzacOzbg== IFVC INmF24E= IFNwYW5u IGltbWVucw== IOGDrOGDlOGDlQ== 0LjRgtCw0LnRgtC1 a2FtaQ== IGFmdHVy IGRpc3BhdGNoZXI= Lk1hcnNoYWw= IOCkueCkvuCkruClgA== IGdhbWVy IFlvdXJzZWxm IEJyeWFudA== IMOhcmJvbA== IGNyZWFkbw== IG9wcG9zZQ== IHNsYWNr IHByw6lwYXJhdGlvbg== IHJ1aW5lZA== 55Wq5Y+3 TnVldm8= LGNvbnN0 5a2X5q61 w41B IHByZWNpcGl0YXRpb24= IGLFq3Q= IHNsYXRl INC/0YDQvtC40LfQvtGI 4KSv4KS+4KSB dmVuZG8= IGJvbmRpbmc= 0LvTmdC5 IE3DvGxs IHN1c3BpY2lvbg== IHJhbmVp IHZlcnZhbmdlbg== YWxlaWdo IFBBU1M= Y3VzdG9tZXJz IG50bw== 1bjWgdWr TWFr INmE2Lk= IGJhcnJlbHM= Q2FyYWN0ZXI= INGC0LXQtw== 4LGB4LCC4LCh4LC+ IOC4i+C4tuC5iOC4hw== IOCkleCkuA== INeX16nXldeR IHJlc2lkZXM= IGVzY3VjaGFy IGFsY3VuaQ== INC20LjQu9C4 QUZQ dGVybm8= LWhhdmU= RGljZQ== 5qC85byP IGFwaWU= IGxpdmVzdG9jaw== INmB2LHZh9mG Lm1v CXNhdmU= IE1vaGFtbWVk IHJlaGVhcnM= IFF1ZWxsZQ== IEJyYWg= 5aeL5YyW aXRhdGluZw== 2KfYtdmF2Kk= 16fXldeq IEVzbw== LGhlaWdodA== IGludHJvZHVjdG9yeQ== 4Kq+4Kqw4Kqu4Kq+4KqC 2LHbjNmF 4KeN4Kak4Ka+4Kaw 0LjQstCw0LXQvA== IG5ld2NvbQ== INmG2LPYqNiq IGRhcnVt INin2YTZhdmI2KfYt9mG U3RlYW0= IFNwaW5z X2NvbmZpZ3VyYXRpb24= 44WL44WL zrvPiQ== INC80LDRiNC40L3Riw== INWt1bbVpNWr1oA= INGC0YDQsNC90YE= QVBURVI= 0YDQuNC9 4LS/4LSC4LSX4LWN dGl0bGVz 77yM5YWx IHBhdGVudGVk RGVtYW5k IOCkuOCkueCkv+CkpA== INGA0YPRhw== 0LzQtdC90YLQsA== IOCkruCkvuCkguCklw== IE5PREU= IGVzcGVjw61maWNv 4oCK IGRpYWdyYW1z IHByaWM= IEJvdXRpcXVl IFJlYWx0 LmF3dGV4dHJh 4LOA4LKV4LON4LK3 IGNhcGl0YQ== SFY= IEFuaW1hdGVk c23DpWw= a2xhcnk= IFRocmVhdA== YXRlcm5pdHk= dXJpZw== aWxhbnRo IGF0aGU= xZllbsOt IGJ1eg== 4LGB4LCV4LGB4LCC4LCf 5p2Q5paZ IEFydGVz IHN1cGVyZg== IHNpbmNlcmVseQ== S3k= IG1pbmltYWxpc3Q= 0LXQt9C00LA= KHJ1bGU= YXlhYQ== IGRldm9pcg== TnV0 IHByb3BhZ2F0aW9u X1BST0NFU1M= 0JXQoA== IOGDoeGDkOGDmeGDmOGDl+GDrg== IOCkleCkrA== 4Ka/4Kab4Ka/4Kay IENvcmFs INCy0LXQu9C40Lo= 55qE5aSp5aCC LS0tLS0tLS0tLS0tLS0K 0p/QsNC9 IEltbWlncmF0aW9u INWt1bTVog== IGNhbWlu IGfDqXJlcg== 0L3QuNC60LDQvA== dmVya2Vocg== IHN0cmFuZw== LWNvbXBvbmVudA== IFdhc3M= 6J0= 44O2 IEFuZ2FiZW4= IOC0leC1jeC0sg== 5o6o6L+b dXVubmlpdA== YW5ub3RhdGlvbnM= IOCknOCkqOCkpOCkvg== c3RyaWN0 ZW1pZQ== IHdpxJlj UG9zdGVy IGZhYnI= 4Li44LmI4Lih IEluc2Vs LlZhbHVlcw== INC00LjRgNC10LrRgtC+0YA= IOCksOCkueCksg== IETDtg== IGlzYWE= IGx3YQ== IOCkpuClh+CkpOCkvg== IGFoYWFu IGRlcGljdGVk IHTDtmJi IEthaw== YW5kaW5hdg== INCf0LXRgNCy IGRndg== IHJlcHJlemVudA== IEFud2VuZHVuZw== S0VO 7IKs7KeA ZGVsZQ== SW5zdGFsbGF0aW9u 4Lia4Lij4Li0 IFByb3ZpbmNpYWw= ZWxvZw== bWFya2V0cw== IGfDqg== YXJpYW5jZQ== R29sZGVu IHBlbmV0cmF0aW9u 4LCm4LGH4LC2 IHFhcsWfxLE= ZXJvbw== IGJsYWRkZXI= IHByaWVzdHM= IGNvbmZpYW7Dp2E= IGRhbnNrZQ== IGR1xbw= X2NtcA== IOC5g+C4q+C5iQ== 5bK4 INC90LDRgdC70LXQtA== 4Kqu4Kq+4Kqo bGhv UmVnaXN0cmFy 0YPRiNGL0LvQsNGA IG5hbGlrYQ== IG5haXNzYW5jZQ== INC90LXRgdC60L7Qu9GM0LrQuNGF SUo= ZW5kb20= IHNldXJh KG5hbWVz IHBhcmFubw== INCx0q/Quw== IGdlbnV0enQ= 4oCZxLFu IEhlYWxpbmc= IHN1b2k= IGN1YWxxdWllcmE= IG1vbnRlcg== IEluc3BpcmF0aW9u IM6VzrvOu86s IOWFgw== 4YCb4YC9 c3Bp LWNyZWF0ZQ== IGJyb3c= CWNvZGU= W2ZpZWxk IHZlaWs= 0YLRg9GA0Ys= 4LeE4LeP INC605k= Q2hhcmxlcw== IHTDpG3DpA== IGNhcGFjaXRpZXM= IHBhdGhuYW1l IGFudGlveGlkYW50 IGNzcmY= LnVyaQ== 4bq/cA== INC/0LDQtw== IE5FWFQ= X3Byb2Y= IOCkuOCkruCksOCljeCkpQ== aXBwZQ== IHRlcm1pbmE= b21pYQ== IGNhc2M= INGB0LXRgNC10LQ= INiq2Y8= IHNob3djYXNlcw== ZXhhY3Q= 77yM5ZCM5q+U TEFJTg== UmVmcw== IHNhbmR5 IHJlZmVyw6puY2lh INC/0YDQvtCy0LXQtNC10L3QuNGP IElUUw== bsOpZQ== IG5hdMO8cg== IOGDqOGDlOGDpeGDmw== IGJsaW5kcw== RXhjbHVzaXZl IGdld2VsZGlnZQ== 0LjRgtC10YLQsA== IENvcmludGhpYW5z IEltcHJvdmU= IGRldm90aW9u IFlvZw== 5a+7 YXNpdA== 6Ziz5biC IG5nYXlvbg== IEdlc2ljaHQ= INCl0L7Rgg== bm92YQ== IEF0dGFjaA== U3Y= 4YCB4YC7 0JXQnQ== IOCwquCxjeCwsOCwrg== INiz2KfbjA== IHBvc3RhZ2U= ZG9yZg== 4LS14LWN IHJlc2lzdGVudGU= aGluZA== IHhy b3ZpdA== IGRyZWFtaW5n 4LSv4LS+4LSj4LWN INin2LPbjA== IHRlbmhhbQ== aGV1cmV1c2VtZW50 b3BsYXN0 1bjWgtWp1avWgtW2 IENyaXNpcw== 5ray X01BUks= IGFzc2lzdGFudHM= INin2YTZhtmC IHNlbWFudGlj ZXJlYWw= INGD0LA= KGNvbnRyb2xsZXI= IGF1cmV6 IOq2jA== LXNvY2lhbA== LWxhbmd1YWdl 4LK34LON4LKf4LOB b3JhaA== Q291bnRyaWVz 0rPTmdC+0LjRgg== IGVmZm9ydGxlc3M= IHZyYWFndA== bmlidXM= IOC0leC1guC0n+C1geC0pA== 2YjZuQ== SXNh IGFzZXNvcg== dcOn IERlcmVjaG8= IEJhcmU= LkRBVEU= IE5pag== IGFtYml0aW9ucw== IHRhcmFw Y2VsbHM= YWlyYQ== UGVyZg== SEVBREVS IGZyYW5jw6lz IGVuZnJlbnRhcg== INC70LDQsQ== IE5hYg== INGC0L7QvdC+0LM= IGNvbnRlbmlkb3M= ZW50ZW1lbnRl 0LLQtdC9 QVBT cHJpdGVz IEJldg== INC60L7RgNGA IOiy IHRxZG0= IiIiDQo= IENvc3Rz 4KeB4Kam INC20YPRgNC90LDQu9C40YHRgg== Z3JlZXM= IHBvxI1ldA== IGdhcm1lbnRz IEjDpG5kZW4= PEltYWdl IHNxdWly c3RlbnM= 0Y/RntC70Y8= IHRpcnM= xLFsZMSx IEludGVycnVwdA== IOydgA== SUxFUw== 4LS/4LSx4LWN4LSx4LS/ INCz0LjQtA== PEw= IGxlYWtlZA== LS0tLS0tLS0K IGhlbGFhcw== YWNhcQ== LldyYXA= TGltaXRz IOCkh+CkuOCkleClgA== INCw0YLTmdGL0LvQsA== INCy0YvRj9Cy YWx1ZWdh aW1lbw== IHNodWc= ZmVhdHVyZWQ= IG9yYWNsZQ== 2YLZhNin2Kg= LnRpY2s= RkFJTEVE YWNodQ== IHRhZ2U= INmI2KI= IHRlcm1pbmFscw== c3R1ZGlv TGVlcw== IOC0uOC1gg== IGzEgQ== IHBvc3Nlc3Npb25z Lm5hbg== Qk9TRQ== xKtq IGHDqQ== a8Ozdw== 54Wn54mH IOCknOCkv+CkuOCkleClhw== IEhG IGRpYWduw7NzdGljbw== IEhvcnJvcg== bGx1bQ== IEZlcmd1c29u X1VwZGF0ZQ== Klw= 0YbQuNC90LA= dWrDug== IGdyYW5kaQ== 0JHQtdC7 O3BhZGRpbmc= LnN0ZGVycg== IOCwquCxig== 15XXk9eZ150= IFVY IGNvbmNlaXRv IGVudGjDpGx0 IGNvbXBlbnNhdGU= CWhhbmRsZQ== IOGDnuGDoOGDnQ== IGhpc3Rvcmlhbg== IOCksuClh+CkqOClhw== SEVNRQ== 0YPRiNC60LA= INWl1oDVpdWt Y2Fycw== IHN0YWluZWQ= nos= UHJvZHVrdA== INeS15HXldeU 4Kqs4Kqw IHBvY2g= aW5pYW5z IHBpdGNoaW5n b2dyYXBoaWVz IOGDnuGDoOGDneGDkg== bGVzdA== IEVkZWw= 4oCM2qnZhtiv dWdu LWnhuaPhurk= IHZlcmxl 0LDQs9GL0LvQsNC30LA= VGVtcG9yYXJ5 IHNlY3JldGx5 IG9yZ2FuaXplcnM= LmluaQ== KElT eXNxbGk= ZmVpdA== TW9kZXI= IOCkleClgeCksg== IG91dmVydGU= IOaelw== 5bmz5Y+w5oC75Luj LXNwZQ== S0w= IOCmrOCmv+Cmqg== IFJlZ3Jlc3Npb24= QnJhY2tldA== IHBvdHI= IGphb2tz IERPVA== IENpdmlj IFNjaG9s L2RheQ== IEFsYmFu aXNlYXNl INC70L7Qug== INmI2KrYuQ== LWxhcmdl INGF0Y3Quw== 55Oc IHRvdG8= IFByb3ZpZGVycw== xLx1 6aKo5ZC544GR44Gw5ZCN54Sh44GX IOC4l+C4lOC4peC4reC4hw== IGRlcMOzc2l0bw== 4LmJ4Lit4Lii IGdyb2Vu eHRvbg== IGhhbnk= IHNwbGl0dGluZw== IHdlbGtvbQ== IGlycml0YXRpb24= INmF2KvYp9mE IM6M T3ZlcnJpZGVz IOio IHNsb3dpbmc= IHZvb3JhZg== IGNvbW1lcmNpYWxseQ== YmVyYQ== Z2FtaW5n w7NsZW8= Q1RPUg== INGH0YPQtA== IGvDq24= IOC0ruC0seC1jeC0sQ== IOCkuOCkvuCksOCljeCktQ== IHVtdW50dQ== YWhhaA== X0NBTQ== IOC5gOC4ow== bmFh IHBlcnNvbmFsaXNlZA== 0LjRgtC10LvRjNC90L7QtQ== IG1ldHM= 572y X2VuZXJneQ== IExlbm92bw== IOCuquCuv+CusQ== 2YTZgdin2Ko= INeR157XoQ== 5Yqg5YWl SU1T IOCkmuClgOCkqA== aWVzYQ== IFJlc2lkZW50 IGppcw== IFNsZQ== LmFuc3dlcg== IGVzcGVjaWU= IOCqpOCrh+CqruCqo+Crhw== RXZhbHVhdG9y 15nXnteZ150= IOmmmea4r+mprOS8mg== IM60zrfOvM6/ dmlzdA== IGFubmU= LmVtcGxveWVl IOCkrOCkmuCljeCkmuCli+Ckgg== IGltcGFpcmVk 4YOj4YOg4YOc4YOQ4YOa IGZlYXRoZXI= IHRyYWRp IFF1aXRl IMOWeg== 57aa44GN44KS INC30LDQv9GA0L7RgQ== IExpZXQ= 5Lik5Liq INC60YvQt9C80LDRgg== dGllcnM= IHNkaw== IHBlcnNldmVy 4KSy4KWN4KSq INeQ16TXmdec15U= IOeUqOaItw== 5YiR IHNvcnI= IHBhcmFkaWdt IGh1cnJpY2FuZQ== X3RvdA== INmF2LXYsdmB IHByb21lbg== 4Z+S4Z6Q IHNhbGFz 2YHYp9iq IHVkZg== IHN1cGxlbWVudA== IGpvdXJuZXlz IER1bms= aWdoZXRlcg== INir2YI= IOCmrOCniA== 5oyv IEJvbHNvbmFybw== IEhlaW0= WW91J2xs IjoiIiwK Z3Vhcw== 4YOY4YOV4YOU IOWtpg== INin2YTZhtmB2Lc= 6YeN54K5 4LS/4LSv4LS+4LSj4LWN V2FubmVlcg== IGxhbsOnYW1lbnRv IGV0YXBhcw== IGluc3BlY3Rvcg== IHJlY3J1dA== IFdlYnNlaXRl 4LC+4LCV4LGB CUdsb2JhbA== IGNvcnRv INis2KfbjA== LnRvZGF5 5Y2Y IEtOT1c= PSIu INGB0YLQsNC90LXRgg== IiQ= 4K+N4K6o4K+N4K6k4K+B IGNow6E= TW9kaWZpY2F0aW9u IEVzY29s LnNlZWs= OmI= KHV1aWQ= nuGDmOGDoA== IOCkleCkvuCkrw== INGA0L7RgQ== X3N0cmluZ3M= IGhheW8= IOCuheCuseCuv+CutQ== T0xB 5LiJ5YiG5b2p IOCmruCmvuCmqOCngeCmt+Cnh+CmsA== aWx2ZXI= LmFjdA== IM68zrXOs86s 6Zi2 c29h 4bqvcA== LnN0b2Nr IOii 4Lir4Lil4Lix4LiH INC30L3QsNGC0Yw= INW91aHVr9Wh1bXVtg== INiv2YjZhQ== bG/EjQ== IOCyqOCyv+CyruCzjeCyrg== IGzDsm5n IHVrdXM= IHN1YnNjcmliaW5n 4LON4LKo4LK+4LKf4LKV IOCwpOCxhg== RGVk LWdyYWRpZW50 IENQUA== IGVybmV1dA== IHbDqWhpY3VsZQ== LlN0b3JhZ2U= IFdlbGxpbmd0b24= IGZvbmN0aW9ucw== ICcoJw== w6ByaWE= QXJxdQ== LdC3 IENPTlM= IGFmZmFpcmVz IHNoaXBtZW50cw== IG1hcmFtaW5n IGxlZ2Vu dXN0b21lZA== IGNvbW1vZGl0aWVz IEZyYW7Dp2E= UHJvdmlkZXM= IGJlbnR1aw== xINyaWk= IFBPU1RT IGV2b2x1dGlvbmFyeQ== dWVybg== IHllZW0= IFRlcnJl 4Liy4LiB4Liy4Lij 4LWD4LSk4LWN4LS1 16LXoNei KHRvcGlj IGJ1bmRsZXM= IOCkrOCkoeCkvOClhw== X2d0 ZGFpbHk= IGF0dGlyZQ== aWFzdA== Ii8+DQo= IEhlcA== IE5PUw== w6ptaW8= IGluZmU= 4oml IFBhcmtpbnNvbg== IGltcGxlbWVudGF0aW9ucw== ZW5zY2hhcHA= 1aHWgNWh1bY= IGdlemljaHQ= aMO2 Y2hhbA== IOCmr+Cnh+CmqA== IGRhcmlu IHByb2Zlc3Npb25lbGU= IGVuY29udA== IGZyZWN1ZW5jaWE= b21pcw== aWTDpG4= U3Vic3lzdGVt IGZsZXVycw== IGdvc3Rh IGdlZHJhZw== IGpheg== IFRhbGliYW4= 4Z+M4Z6Y4Z624Z6T IFVuacOzbg== IFNJTg== IGt1Yndh 4KS/4KSw4KWA IHNpZ25l INiv2KfYsdin24w= INC/0YPQsdC70Lg= IEluc3BlY3Rpb24= IGVtcHJlc2FyaWFs cG9zdGFs IHVuZWk= 5oCA 44KP44Gb IG91dGls CXBzdG10 IOCyhuCypuCysOCzhg== INiq2K/Yp9mI2YQ= IHByZWRvbWluYW50bHk= U2VudGVuY2U= IE5hYXN0 0Y3QvdC90LU= INGC0LDSow== Lm9wZW5z SU1QT1JU INqp24HZhtin bGnDsA== UmVkdWNlcnM= IGbDpHI= IOCkhuCksOCljeCkpeCkv+CklQ== IGFib25uZW1lbnQ= INCc0LA= IGhpZXJiaWo= RmV0Y2hpbmc= IHJlZmVycmFscw== 6KGM5Li6 4oC5 INm+2YjZhNuM2LM= 4oCZb3JpZ2luZQ== IFVuY2xl INC+0LTQvdC+0Lw= IFNoYXJr U2hvcnRjdXQ= IHJldGFpbnM= IGFhbmdlcw== IFJvb3NldmVsdA== IGF0bA== ICgpewo= 4K+G4K6v INGD0YHQv9C10YU= IGJhY2NhcmF0 0YHRgtGL0ps= IFByZXNpZGVudGlhbA== IENoYW5naW5n IG1hbXB1 d2FqdQ== IGltbWlncmFudA== IC8vWw== IHZlw61jdWxv 0L7RgNCw0LQ= LHRleHQ= INC80LDRgtC10YDQuNCw0LvQsA== IOCkleCkvuCksg== INm+24HZhtqG IEhvbGU= 0LbQtdC90LjQtQ== 2LHZiti5 IGVzY2xhcmU= IOCwqOCxgA== ZsOp INWm1aHWgNWj IFp1c2FtbWVuYXJiZWl0 YWZvbmU= LmZsYWc= IGVzY2Fw z4PPhM6u RGlzY29ubmVjdA== IOaJgA== LmF2YWlsYWJsZQ== RGVwb2lz YWN0aWU= IGJ1aXRlbmxhbmQ= IE9saXZpYQ== IFp1ZGVt IHZlc3RpZG8= 54mI5p2D5omA5pyJ IHF14buRYw== INGD0YDSrQ== INWw1aXVv9aH IE91aQ== IHBvc3N1ZW0= IEZ1ZQ== INmG2K3Zhg== INC00LXRiA== LlNFQ09ORFM= IOiQ IExlYXNl ZW50aWV0aA== YWdpbmE= CWRlc2NyaXB0aW9u IG9ncg== IGlub2Rl IFJldmVs IEVNUFRZ 0LbRiw== INCg0L7RgQ== IFBvbGljw61h S25vd2xlZGdl IG5hbHVuYWFy aGlwcw== IHZlcnN1Y2h0 IEdhcA== dW5zaQ== YXJ0eg== IG91bg== IHNhdHVyYXRlZA== Rm8= LXZpZGVv LlJlbmRlcmluZw== YuG7jQ== IGluc3RydWN0aW9uYWw= IGhpc3RvcmlxdWU= IGNyaXN0YWw= LnRhaWw= IGFyYmVq IGp1ZGdpbmc= IGN5YW5nd2E= Ke+8mg== 4YOV4YOU4YOa4YOY INCz0YDRg9C3 77y+77y+ QWN0dWFsbHk= IEluYQ== bGVnZW5oZWl0 IOyKrA== INGA0L4= IGplZG5v IGFsdGFy IGRheWxpZ2h0 IEFTQ0lJ cnVpbXRl 4LWB4LSW 0LrRgtCw0YA= INC+0YLQvdC+0YjQtdC90LjRjw== 4LK+4LK14LOB IEFUUA== cm9wb2xpdA== IGhpY2llcm9u QlRD IE1vbmtleQ== z4zPhM63z4TOsQ== 2YPZhdip IGxhbG8= INC70Yw= LUFmcg== Lkdl IHJ1aW1l LXByb29m IGRvd25zdGFpcnM= IEx1bGE= INit2K/Yqw== PT09PT09PT09PT09PQ== IENvdXBl X3ByZXM= 4bqlbQ== IHJlbGHDp8O1ZXM= aWxhaQ== 2KfZhNi1 IOC4luC4reC4mQ== b3ZpZA== IEFtYmllbnQ= LkludGVyZmFjZQ== IENvbnN1bHRhdGlvbg== Q2VudHJl IEJ1ZGFwZXN0 INin2YTYutiw INC60LDRh9C10YHRgtCy0L4= 0LDQu9Oj b3VwcGVy cmVjZW50 KHppcA== IGluZGVyZGFhZA== 4Lix4LiB4Lip 2YjYp9mF2YQ= IEF0w6k= IOCkleCljeCksOCkrg== IHnDvGtz SW50ZXJwcmV0ZXI= IFJUQw== IGNvbmNsdWRlcw== J307Cg== IGxpZnRz d2lya3VuZ2Vu IGtzaQ== X3NoYXJl IGFydGlzdGVz IGluZ2VybGFu IHRu IOCmheCmpA== IG1pbGlvbg== INeR15DXntem KSwi z4fOvw== IO2WiOuLpA== bmd1 0LDQu9Cw0pvRjA== IGFtcGxpbw== IHRlcmNlaXJv U3lub3BzaXM= IHBvxb4= IE5hbA== IGJhcmNvZGU= dW5pZm9ybQ== IOCkkOCkuOClgA== IEZhdm9y IGVkaWxlbg== X3N1ZmZpeA== IOCkh+CkuOCljeCkpA== CQ0KDQo= LWxvY2s= INC+0YDQuNCz0LjQvQ== Ymlvcw== 44WO IGdvdHQ= dGVyc3VjaA== KERlYnVn IFBhY2thZ2luZw== 5oqi IHJlcGxpY2F0aW9u 4Kqw4KuN4Kqa bWFya2V0aW5n IE1hcmE= 4bqtdQ== INC50LjSkw== ZWRlcmxhbmQ= IGlzc3Vpbmc= UGF5bWVudHM= JHN0bXQ= IHNsZWQ= IGNvbXBldGVuY2U= JG91dHB1dA== INGB0YLRgNCw0L3QtQ== IGx1ZnQ= IG3hu41p IFByb3Blcg== xrDhu6N0 IGludm9pY2Vz 1bjVvtW41oA= IOCqleCrh+CquA== IFJFUE9SVA== IOC4lOC4suC4pw== dW5kZWQ= IOCquOCqvuCqgg== X2Zhc3Q= IOaf IOGDpOGDmOGDmg== OmU= RXhwZXJpbWVudA== IERyYQ== IGlkZWFhbA== IG1hY3Jvcw== IGRpZXI= IGh1YmllcmE= IE92ZXJyaWRl IG9sZHVr IGRlcG9ydGU= INmB24zYtdmE 2ZQ= IOCuj+CuseCvjeCuqg== IGZhY2lsbWVudGU= IGpvbmth IGJlbGV6YQ== IE1vbmRl cnVpaw== IOCmpuCmv+CmleCnhw== IGRpbmFt IOGDkOGDqA== KGR0bw== LlBhcnQ= 4YOU4YOR4YOX4YOQ4YOc 15nXkNa4 Z2Jh IEludHJv Q2l0 IGJpdGNo Y2hyb20= IGLDpHN0YQ== LkJMQUNL IHNlY2Npw7Nu IEV4aGliaXRpb24= IHlsaQ== INC00LY= IE1vbnRocw== IGluY29ycmVjdGx5 LmdlbmVyaWM= IOCypOCyvuCysg== IGN1YWRy IOCqheCqsg== 4KWN4KS14KWA IGVxdWlsaWJyaXVt YWxpbms= Lmx1YQ== IGNvbGE= 4oCUCgo= IHdpdGhk YWxleg== IGV4Y2VycHQ= aXhhcw== 5L6g 4Ka+4Ka44KeN4Kal IHRoYXk= PWpzb24= 0J/QvtGB0LvQtQ== 0LjRgNC+ YmVoYXZpb3I= IOC0leC1geC0n+C1jeC0nw== INC/0LvQsNGC0LXQtg== IEhhcmJvdXI= d2lua2Vs IHVucmVhbA== IG1lYW53aGlsZQ== IOC5gOC4hOC4o+C4lOC4tOC4leC4n+C4o+C4tQ== a2V6aQ== IOCosOCouQ== LnNoYXJl 1LHVtdW9 QU5HTEU= RVNI QVJFTg== IGRldGVu IERJVg== SUVXUw== IGJhc2tldHM= IGluZnJhc3RydWN0 IGV4cGlyeQ== RXh0ZXJpb3I= 4LiH4LmA4LiX4Lie TWF0dGhldw== 5bGx5Y6/ IHNvcGhvbW9yZQ== LkFS INmI2LPZig== IOCkteCkv+CkpuClh+Cktg== K24= IGlycmlnYXRpb24= IG1pcmE= IOCukw== UkFM INix2YHYuQ== b3Npw6fDo28= ZWRpZw== 6Kaq IFFVRVNU YWNybw== IFVTQw== YWNqxJk= IGlnamVu 4Li04Lin IFJhaWxz IOCmquCmsOCmv+CmrA== IGdoZQ== IGplZmU= YmVlbGRlbg== IFVB 157Xldeo U3RyYXRlZw== UXVlbQ== IGN1ZGQ= IHNwaWxsZQ== YnVyc3Q= IGJlcm9lcA== IFJhc3BiZXJyeQ== IGRhdGFmcmFtZQ== IHBpag== X0V2ZW50 INin2YTYqNix2YbYp9mF2Kw= RWc= IFB1aXM= IE11bQ== IGRldHLDoXM= INqq2KbZig== YXBy 4LGB4LC44LGN4LCk 6reA IGNoaXJ1cmc= IENlbGVicml0eQ== IGZvcm11bGFyaW8= IG1haW5sYW5k IGFzdW0= IOCuheCuqOCvjeCupA== IHByb3ByacOpdMOp IOC0juC0qOC1jeC0qOC1jQ== IHZvbGNhbg== X0FDQ09VTlQ= dXdhbg== IHRyYW5zZ2VuZGVy LVBy IHNwcmVrZW4= IFByZWRpY3Q= J319Pgo= IHByb2JhYmxlbWVudA== b3Bvcg== 5pe25pe25b2p5byA5aWW IENhcnJvbGw= IGRlc3RhcXVl IGFiaWRl IOCwteCxh+Cw IE1lcmNoYW50 YW5pcw== INmF2YbYtw== bGljb3M= Lm9ybQ== IOyhsO2ajA== LnVucw== IFNBUlM= IHd1bmRlcg== IGRlcnJvdA== IGNvbmNsdQ== w6F0aA== IHN1bWlu INin2YTZh9mK VmVyZA== IOCkquClguCksOCljeCkow== 4LC/4LCo4LGN INGE0LXQstGA0LA= IOqwnQ== IGJpbGRpcg== IOGDm+GDlOGDouGDmA== IG5pbmV0ZQ== IGhpbmk= IGxsZWdhZGE= IHppaw== X2xpbmVubw== IG7DtnQ= IOCkj+CkqA== IGdsb3dpbmc= IG9seWFu Q1JFTUVOVA== fX0KCg== U8Ol INmH24zahg== 2YnYqtmJ Q29uY3JldGU= IGJlcmFkYQ== ZXJtYW55 IGZvb2xpc2g= RVhQRUNU xIFw 4LK+4LKo4LOB xZts dXZ1 4KWH4KSs ZW5hYW0= IGhhag== 4LmA4LiU4Li34Lit4LiZ LWJvcm4= IEJhdGhyb29tcw== aXNtaWM= IGZhaWE= 0LHQuNC9 IOCmj+CmpA== IM68zq3Pg86x IHRyYW5zcA== 16bXldeq IGNhdXNhcg== L3RlbXBsYXRl IFdhcmVu IGRlasOz IEbDvGhydW5n INC80YPQtA== 1avVqQ== dWtzaQ== IGV4cG9zaWNpw7Nu J+G7pQ== b2Nlc2U= IGRlYWY= IEF1dG9z IGJsZW5kaW5n Tlc= IOCkuOCkvuCkruCkvuCknOCkv+CklQ== INmF2LfYp9mE2Kg= X0NPTU0= IEFETUlO IGpld2VpbGlnZW4= INin2YTZhdi12LHZitip IGJvbWJh bmlrb3Y= IOCumuCuv+Cusg== b3VzYW5k IOuMk+q4gA== 4Liy4Lio IOCkmuClgOCknA== dm96 INep16DXlA== IGZhbcOtbGlhcw== IEtyZXV6 5a6j5Lyg IFBhdHJpY2lh w4w= IGdyZWFzZQ== IGdsb2JhbHM= INmI2KfYttit IGfJmWw= RW1wbGVhZG8= IE56 6ZqU IEVuZ2w= X3NhZmU= IGNpbmVtYXQ= 4Kqk4KuN4Kq1 IG9jaG8= IGNvbGxhcHM= X0hBUw== 4LS/4LSm xLFkYQ== c3R5cg== 0qnQsNSl0YvRgQ== IGRyYXdlcnM= INmI2Ks= IFNhcw== YWNpZGFkZQ== INCx0YDQtdC9 IOC0qOC1h+C0pOC1g+C0pOC1jeC0tQ== IGphZGU= IOCkuOClgeCkteCkv+Ckpw== 2LHZitit IHdoaXRlbmluZw== YXlhcmFu X2RlcGVuZA== Q2FuY2VsYXI= IGhhY2tpbmc= dW5zZXQ= IE9mZmVyaW5n IHZvb3JrZXVy IG1hbnVhbHM= X0NMRUFS 1aHVvdW/1aHVttWr Q09ORg== a2traw== IGhhbGxz IE1VTFQ= INC90ZY= bnll cG9yYQ== 4Z6+4Z6E 4LCC4LCk4LGN4LCw4LC/ LUJFR0lO 4K+B4K6V4K6z YW5kdWs= 0LvRgdGP IGludGVycHJldGVy INCR0LDQuw== IGtlbXVkaWFu xL5h 4KS/4KSo4KWN4KSb 0LDQt9C4 IOCqquCqvuCqsA== 5pyf5byA5aWW57uT5p6c 4LSS IOCqruCqvuCqpOCrjeCqsA== IGluc2VydHM= IG90b20= IHN0eWxpc3Q= IG1pbmRlZA== RVJBVE9S QmV3 xJdqbw== IEtub3g= IGRlZmF1bHRzdGF0ZQ== LWNlcnQ= 2YTZiNmG PWlucHV0 4Kaw4KeN4Kac IHNpZ3Vp IGdhc3Rlbg== IGtvbGF5 IFVtd2VsdA== IFdpbnN0b24= IEZPWA== IHNhdWY= SldU 4YOQ4YOh4YOs b3V0bGluZWQ= b2Jvb2s= ZmljdGlvbg== IHZhaWtrYQ== IGlycmFkaQ== IGhkcg== L2FwcGxpY2F0aW9u IGV4ZXJjw61jaW8= IGplZGVyemVpdA== INC+0LHRj9C30LDQvQ== IHZ1bGdhcg== IGhhbmRpZw== ICk7CgoK IFRhag== IGF2YW4= IFJoZQ== 6K6/6Zeu CWV4Y2VwdA== IFRpbWVvdXQ= IERpcmVpdG8= IHNvbWVkYXk= 4KS44KWN4KSl4KS/4KSk J8OJ 2KfYr9mF IOCmsuCmleCnjeCmtw== aW15 IGR1cmNoYXVz b3JkaW5hbA== INC10LrRlg== w6Vr INmI2KfZhNio IHVybQ== b3VudGVk IFJUTA== LlZL LlRpbWVy 5Ymn5oOF V2FyZWhvdXNl 4KS44KWL IGluc3RpdHVpw6fDtWVz IE5lZ3Jv INeY15DWuA== IExvb2t1cA== TWFwcGVk ICVAIiw= LnByb2dyYW0= Vk9L IFByZWNpc2lvbg== IOCmqOCmv+Cmtg== ZGVzY3JpcGNpb24= IGVzdHJhdMOpZ2lh Vm90ZXM= acWz 15XXkNeU IHNpbmdlcnM= IGNvbG91cmZ1bA== IOCmrOCmv+Cmmg== INC30LDQvdGP0YI= IHNhbWFyYmU= Rm9ybWF0aW9u 0YDQtdC5 IEVkaXRvcmlhbA== b3JkaWFs IGF2YW5j IFN1bmRheXM= 4YOQ4YOV4YOU IGVudHJhZGFz KHRlYW0= 4LCy4LCV4LGB IGdsb2JhbGU= IFBhZ2luYXRpb24= IGdn VVNT IEVsdmlz INmI2LPYp9im2YQ= 4YOQ4YOm4YOb4YOT4YOU4YOS PHs= IOCkquCklQ== VG95 IFdpbmdz YXR1dXJsaWpr IOC3gOC3kA== IHVudGVyc2NoaWVkbGljaGVu KHNvcnQ= YXJlaQ== YXJ0aHk= IGFsZXJ0YQ== IGxhdGVudA== TlNJbmRleA== QnVpbGRlcnM= IG1lbnRvcmluZw== IHVydQ== 2YjZhdmG PGJvb2xlYW4= 4K+B4K6y ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN5bXBhdGh5 aHJ0 INio2YrZhtmF2Kc= INC40LzRjw== 4K6+4K6q IGV4cGFuZHM= KGxhYmVscw== X09DQw== IEZ1bmRz X2NyZQ== xatr bMO8aw== LCIK IFNvdXM= IHJlY2h0ZW4= IHbEg24= IHN0ZXRz L3Byb2plY3Rz 4LGC4LCy CW9w IPCfmIA= SW1tdXRhYmxl c3VidGl0bGU= IHdhcnRlbg== 2YnYs9mJ IEp1bnRh IOCuheCusw== INCx0YvRgdGC0YA= 65Ok7JeQ6rKM IGRpc2NhcmRlZA== IG1vZGVsbGluZw== X0RBWQ== L2F3cw== zr/Pjc68zrU= YWFubw== X1BMQVk= INeU15LXkw== IHRyYXBz INuB2YjYqtuM IHZlcnRlbHQ= IFFp IOCyuOCyvuCypw== ZmF2b3JpdGU= IEphdmllcg== IGNyaXB0 Ikl0J3M= QXhlcw== LWFo IGbDoWJyaWNh 0YDQuNGB LGluZGV4 IGFi4bul4buN INGC0LrQsNC9 aWNhdA== YWNsYXNz YWRhdA== INC80L3QvtC20LXRgdGC0LLQvg== IGdyYXBlcw== 1aXWgw== cGFzc3BvcnQ= IFBsYXN0 IOS8rw== IGtpbG9z IHVseQ== ams= 5Y+W5b6X INmK2K4= IGthbnNrZQ== INKv0YHRgg== PERhdGU= IGVpbmdl IHJlZHVjdGlvbnM= IHZlaW5z 4Kao4KeN4Kaf IG3DqWRlY2lu UERP IEludm9rZQ== b25jbGljaw== IGt2YXI= INCT0LXRgNC8 IGdpcmnFnw== IHNhaW4= 4YOY4YOc4YOQ4YOQ4YOm4YOb4YOT4YOU4YOS O2E= IEtpcmNoZQ== IGluY2VuZA== IFJlc29ydHM= IHN0w6U= INeU16fXqA== 4KSt4KSw R2FtbWE= IGFuZ2Vu IHN1c3Bl aWZ0ZQ== IGhlcmlubmVy yZlyaw== IFNlbWluYXI= 4KS+4KSV4KS+4KSw Z2lmdA== 5Yy755aX IEhhaQ== X3NjZW5l IOCupOCuvuCuqeCvjQ== IGthaXQ= IGxpcXVvcg== INC60L7Qu9C40YfQtQ== QURT XS5b IOWNkw== INC40L3QvtCz0LTQsA== IOWkp+WPkeW/q+S4ieW9qeelqA== IG1hYWFyaQ== IHHJmWTJmXI= IGFpa2FuYQ== IGNsZWFuZXJz IHVuY29uc2Npb3Vz IE1lZGFs cmVzdW1l IGNvbmZpZ3VyYWJsZQ== IGRlc2N1YnJpcg== IGRlbW9uc3RyYXRpb25z Q09NTQ== 54K4 X1dBUk4= IOCqtuCrgeCqgg== IGFsdHJv 5bmz5Y+w5Li7566h INii24w= IGFtYmFzc2Fkb3I= IGZhc3Rpbmc= INGB0ZbQtw== KyIu Z+G7pQ== KHN0YXQ= YW5kdW0= ZXJzb25hbA== 5bKh IEFjaGU= IGludmVjZQ== IGNwcw== IFZhbHZl w6FtaWNh INio24c= YWxvbQ== 4KS+4KSh4KS84KWA INC30L3QsNGO RE5T IENPTkY= V2Vla2x5 IFNhZGx5 SW1tZWRpYXRl 0YLSrw== LkdldHRlcg== 4Kec4KeH 0LPQsNGA0LA= IOCktuClh+Ckr+CksA== Z2Vm IOWPjA== 5pmu6YCa 4YOd4YOa4YOY4YOh PUA= PWZpbmQ= X2NvbW1pdA== IFBlbm55 4YOU4YOR4YOU4YOa4YOY4YOQ aW51ZA== IHBlZGlkb3M= IEFjdHM= IE11c2Vv 0L3QvtGO IE1vbnRlcg== IHdhcmZhcmU= 4LGH4LCC4LCm4LGN4LCw LXRlYW0= RnJt aWJlbGU= R05V IOCmluCnh+Cmsg== IHZlcmFuZGVyZW4= X2dwdQ== 2bnYsduM IEJvdHRsZQ== 5b2p5aix5LmQ5bmz5Y+w 4LWN4LSv4LSV4LWN4LS3 IHJlZnVz IOCkruCkueClgOCkqOClhw== IOCuheCuteCusOCvjQ== IGphY2tldHM= IEZlbGw= T05FWQ== IG1hbmVqbw== 4KSk4KWN4KSv4KS+ c3RhbmRpZw== IMOpdm8= w7NuaWNv IFNhbGx5 UHJpY2luZw== IFByZXNzZQ== c2dp IGVjb21tZXJjZQ== IGltbWVyc2l2ZQ== IHNpZ3Vlbg== IEFnZw== 4Ki+4Kik IG5hdXNlYQ== INCx0L7Qug== IGhhcQ== 5qSc57Si IHNlYWxz IGNvbWVyY2lhbGVz IE5hcnI= cOG7pXRh IEthbmE= IOCkheCktg== IHdvdQ== bmV0cw== IHZlcmY= aWt1bHU= bWl0cw== IEd1YXJhbnRlZWQ= IHVucGFyYWxsZWxlZA== IGJlZmluZGVu OmltYWdl IFRlZw== IFZhdGljYW4= Y21hdGg= IHRhc3RlZA== IEF2YW50 IEdyZWdvcnk= IHZpYWo= IGlsZWdhbA== aXppcmE= IGVzdHV2 CUFTU0VSVA== IGNlcnZpY2Fs IOCyheCyqg== IGJlc3RpbW10ZW4= 16TXkNeo 4K6k4K+H 5qiZ X0lDT04= INGB0LDQug== ZW5zaXM= IGRr IG5pdmVhdXg= IGVtcG93ZXJpbmc= IGV4YW1pbmF0aW9ucw== IHZpYnJhdGluZw== IExhbWJkYQ== IHN0cmlqZA== IHByZXNzw6Nv IOCkl+CkpA== IHBlbWVy aXp1bmc= a2xhc3Nl Q29udGlu IGRvaQ== 4Kqu4KuH SGFuZGxlcw== IElEUw== Q29vcmRpbmF0b3I= IG3Dumx0aXBsZXM= IHZpY2luaXR5 IGVsZWN0aXZl INWk1aXVvA== IHNlbWFraW4= IGluZGl2aWR1ZWxsZQ== IGx1cA== IEhvbWVwYWdl QW5v IHJhem9uZXM= OmM= 4LCo4LGN4LCo4LC/ IHNpZW4= INi02LHYp9ih IHN1cGVybmF0dXJhbA== Z2V3w7Zobg== IOCmuOCmvuCmp+CmvuCmsOCmow== INGI0LDQvA== IOq3uOuemA== U0NSRUVO w6FuY2hleg== IG5nb8OgaQ== IGtvbXBsZXQ= dWRpYW50ZQ== KHBvb2w= IOGDnuGDoOGDneGDlOGDpeGDog== LnJlZ2lvbg== 4KWN4KSk4KS+ IFNTSA== ICovLA== xZt3aQ== IHRvbmE= IHJlc3BvbnNhYmlsaXTDqQ== aMOkbHRuaXM= IOuJtA== IOCuruCuv+CulQ== IOCqquCqvuCq KDo6 RU1BSUw= LlNldHVw IG9ic2VydmVycw== 0LTQtdC5 bGVjdHJpY2l0w6k= IHJldmVuaXI= 5pGY6KaB INeo16Y= IMOtbmRpY2U= IHZpb2xpbg== IGJ5bw== INGA0YvQvdC60LU= U2VlZGVy IHBvdmFz 66eM7JuQ IE9saW0= PntA X1JFU09VUkNF KHdyaXRlcg== dm9sdmU= IFN0aWw= 2KfbjNi3 LVRoZQ== X0lD IHBpbmFrYW0= IHp1Yw== 15DWt9en P2ZhbWlseQ== 55So5ZOB IHJlc29sdWNpw7Nu IERyZXM= aXpvdQ== 0YDQsNC80Lg= INmC2YTYqA== IHN0cmNhdA== IGthdXQ= 0LjRgNGD0LXQvA== 5LiN5Lya ZG90ZW52 0LzQvtC8 0LrQvtGe YWxpYXNlcw== IHZhZ2E= CXN0eWxl 2LHYp9it2YQ= IEFsYmFueQ== X3RhYmxlcw== QEVuYWJsZQ== IG1pZXN6 IEZyZWVs SW5jbHVkZXM= IGNvbnZlcnRpZG8= IGRpZmZlcmVudGlhdGU= IGRkaQ== Y8Ozdw== IEdsb2I= IG1lbnNl INep15XXmdef 6L2v5Lu25LiL6L29 d29s IGFlc3RoZXRpY3M= IHNrZXc= VXBsb2FkZWQ= INC90LDQudC0 IHJ1bGVy 4LWN4LSY INGY0LA= w6FuYWs= ZXJ0b29scw== LmNvbmM= INit2YjYp9mE IExhdHY= INCy0YDQtdC80LXQvQ== KGNvbnRhY3Q= b3BlcnM= 6K+R bWV0YWw= X19bIg== bWVya3NhbQ== Lmxpc3RlbmVy IMOhdA== IFNhbGVzZm9yY2U= IGdlc2NocmV2ZW4= QmlydGhkYXk= LnRyYW5zaXRpb24= w6dhZGE= IOGDo+GDoOGD IOCuqOCvh+CusA== IEFkdWx0cw== UmVzZXJ2 INC00LXQtNC4 572a IE1pY2hh cG9t ZXR6ZW4= IFdpbmRzb3I= b3JnZXQ= IFJhbmdlcg== INmD2YTZhdip IGV4cHJlc3NseQ== PkM= ZXN0YXRl IEthZmth X29yZGVycw== IFdMQU4= LmJlZm9yZQ== 5LuW5Lus aWRkZWw= X0RhdGU= 4K6/4K6q4K+N4K6q4K+B IFN1ZmY= LkVudmlyb25tZW50 4KuN4Kqb dmVuaQ== IEZvbGQ= zrTOuc66 aW1vaW5l INin2LnZhNin2YY= YXF1 IOmW IFBhaQ== IOWwmg== IHBhc3RlbA== 66i8 IHRwaA== IOC4lOC4ueC4muC4reC4peC4quC4lA== IGVkZQ== UHJh ZW5kYW50cw== ZW5pbmdlbg== INC/0L7RgtGA IHRpbGI= IOCkquCkvuCklQ== IFBldGVyc29u IGplamljaA== IOGDluGDneGDkg== U29sYXI= PWU= IGN1YmVz ID46Og== IHZhcsOw ZXR0aW5n X1JH IG1lbm9w QnJvd24= IGNldg== IH07CgoK 5o6o5bm/ INCy0L7Qsg== IHBvdXJpbmc= IGRlbmc= TEFT Ymxpag== IGlkZWlhcw== IHN0cm9vbQ== IEhpc3Bhbmlj IOCkreCkvuCknOCkquCkvg== IScs IHVubg== 0LzTmdC9 IGRydWdh IFJhaXNl IGRlbnRpc3RyeQ== IOCmtuCmuQ== Rk9OVA== IFNlcmlvdXNseQ== IG5o4buP ZWxlcmlr IHDDqXJkaWRh 0L7Rhg== CWVsZW1lbnQ= CXNz X0FOWQ== 4YOQ4YOV4YOX Lj0= 0LTQtdGA0ZY= IOWkqeWkqeS4reW9qeelqOevrueQgw== IHdhbQ== IElkZW50aWZ5 IGZlaXRhcw== IGJhbnQ= IGt1bGl0 SVZFUlk= IG1ldG9kZQ== IGZhdWRyYQ== IGV4aXN0ZW50ZXM= IGZvbGdlbmRl IHBow60= IOCkpOCksOCkqw== aWZpw6ll IERpZ2VzdA== IEFsdW1pbml1bQ== IFtdKTsK KCIiKTsNCg== IHJlY2VpdmVycw== JHN0cg== IEFrYWRlbQ== INC00q8= IDotKQ== IEVsYXN0aWM= 4Kqz4KuA cHJpZXQ= QkxPQ0s= LnJvdXRlcw== INeR16DXmQ== 2YHYs9mK2LE= IGphaA== IG5vdmljZQ== IGFmZXQ= IGNhc2Fs enVzdGVsbGVu zrvOu863 IHN5c3TDqW0= 4KSc4KSo4KS/4KSV IENvZGluZw== IOCqleCqvuCqsOCqow== 5YC85b6X IOCwlg== IGRpYWI= IGFzdG9uaXNoaW5n IOWp IGNpZW5jaWE= IFNpbmdlcg== 4oCZw6ls CXB1dA== IGVpbmE= IHRlcm1hc3Vr INmE2YTYuQ== T25z IG3DrW5pbWE= IERpYWdub3N0aWM= IE9jZQ== Y2xhcmF0aW9ucw== 2K3Yr9mJ IOCmhuCmsuCniw== IOCkueClgeCkgQ== IFTDpHQ= 0L7RgNC+0Lw= IGplbnRl KGNsaWNr IHJlYWxpesOz IHRhw70= INC90LXQtNCy0LjQtg== IG1hbnU= ICoqCg== IGNoZW1vdGhlcmFweQ== INCX0LTQtdGB0Yw= IFPDpA== IG1vdmVycw== 0JzQmA== OmQ= KGRpcmVjdG9yeQ== 6YG/ OyI7Cg== X1JPTEU= IHR1bGk= IOCmuOCnjeCmnw== IHJlY2h0ZXI= INC00LDQu9GM0L3QtdC5 IExlw7Nu IGFmdGVybWF0aA== IGRyYWE= enM= IGZ1bmNpb25hbWVudG8= IGThu4U= IEFtYXI= IG1ha2Fu INGC0L7QsQ== 0LbQtdGC IEluc2lnaHRz QENvbmZpZ3VyYXRpb24= KCM= z4HOuA== LWRpZ2l0 cmVnZWw= 57u05oqk IHNvbGlkZQ== 0LvQtdC60LXRgtGC0ZbQug== IHNub3Jr IHBvZHM= a3JhdA== IOCmr+CmvuCmmg== INC60L7QvNC40YLQtdGC IHBlaW50dXJl IGlocmVz CUltYWdl IGLhuq90 IENsYXJrZQ== IGNhbXBlcg== INGB0LjRgdGC0LXQvNGD T1g= IHZpdMOzcmlh LndhdGNo IGplZG5h INGA0LXQs9C4 IGxveQ== IGludGVs 55S35Lq65aSp5aCC X0VYRUM= IOCkhuCkteCktuCljeCkr+CkleCkpOCkvg== IHJlc3BldG8= 15DWt9eg15g= IHZvbHVt INiv2KfYs9uQ 4oCZw6luZXJnaWU= INCz0L7QtNC40L3QsA== 0L3QtdKj IFN0YXA= IGRlZWxuZW1lcnM= Q291bg== aWNrbmFtZQ== IM+Hz44= IOCqheCqueCrgOCqgg== 0LDQu9C+0Lw= IOC0quC0v+C0nw== IOCkmOCkguCknw== IGJyZWVkcw== IGthbsOr YWRlbmE= X2VudGVy INWv1ag= IHByw6lzZW50YXRpb24= JGE= IOCwqOCxhw== IGhpbnM= RUxT 4LK+4LKv4LKV INGC0LDQsdC70Lg= IElDRQ== 4K+N4K614K+B 7J206rOg 4KqC4Kqk4KuN4Kqw IHNsb3Blcw== IOC4lOC4tQ== UmVtaW5kZXI= XFRlc3Q= RHVtcHN0ZXI= INGB0L/RgNC+0YE= ICgpLA== IG1hcmluYQ== IGdlc2V0eg== YWN1bA== YWRheHdleW5haGE= csOzZA== 2LXZitmE aWRhZ2k= IOykkeq1rQ== IHBvcG9s IOCkleClh+CksuClhw== IG5lZ290aWF0aW5n IFByZXNjcmlwdGlvbg== Q2hhcmFjdGVyaXN0aWM= c3RheQ== IGJlcGFsZW4= 5omT5byA aWdodGhvdXNl LlRyYW5zYWN0aW9uYWw= 4KeL4Ka5 IGJpbGc= LkJ5dGVz aW50aHU= IHZvbGNhbm8= IGZhc2NpbmF0ZWQ= INiq2YfYsdin2YY= INGA0LXQuQ== YXVyaQ== IOCuh+CuqOCvjeCupOCuv+Curw== YnJlcw== QXNzb2NpYXRlZA== INiq2Yjaq9mH 4LK/4LK14LOG VGVtcG9yYWw= 0YDQsNGC0LjRgtGM R2Vz IGxhbmRtYXJrcw== 44CB6auY IHPDumE= 2KfZiNmE2Kk= IOiBlOezuw== zq7OvM61 YXVnYQ== INC20LjRgg== X2JpZw== bcO2 QnVuZA== IEV4dGVyaW9y YXTEsQ== 25XZvg== dXN0aQ== 2YjZhdin2YY= 1bXVuNaC1bI= IEZ1bmt0aW9uZW4= 0q/QvdC006k= YXJyYXM= IOCyteCyv+CypuCzjeCyrw== INeg15Q= IGhpc3Rvcmlhcw== z4HOv8+Nzr0= IENob29zaW5n 44O844Oe IOCypuCyvuCylg== IOeah+WGoA== IOCqquCrjeCqsOCqtQ== dXdlbg== Qm9uZA== c2ltaWxhcg== 4Li04LmA4Lin4Lit4Lij4LmM4Lie4Li54Lil 5Yqo6L2m cHJvcw== INGB0L7QstC10YDRiNC10L3QvdC+ IHJlYWxpdGllcw== 7IK8 INCy0L/QvtC70L3QtQ== 64Sk7JqU IFNlbG9u IFJUUg== INmI2KfZhNis IHNvbmhv 4KWL4KS5 IEjDoA== IOCmsOCnn+Cnh+Cmm+Cnhw== Ynl0 INKb0YPRgNGD IEJsZW5k X2hlYXA= IGV4ZQ== IGNsZWFyZXI= ZXJlZg== IGxlZ2dl IHVpdHppY2h0 INis2LnZhA== T2JzZXJ2YXRpb24= LlNlcmllcw== IOCqheCqruCrhw== IGp1c3RpZmljYXRpb24= IHpvZWt0 IHJlbW92ZXI= IGJlcmlrdXQ= IHJoeXRo INCm0LXQvdGC IEZha3Q= INCe0YHQvdC+0LI= IEvEjQ== LW9ucw== 4oCZaW1w bXVy INmF2YbYp9i32YI= Ymlhc2Vk c21z 0Y3RjdC0 2YXYsdin2LE= IExpc3RlbmVy IHnEsWxs IG1hdGVybmFs IGxhdmFy IHZu ZXR1cw== 0L3QtdC90L3Rjw== cMOnw6Nv IEVPUw== cHJlc3Nvcg== 4K+B4K6V4K+N IHRyb3VibGVzaG9vdGluZw== PmA= IOCkleCkvuCkueClgA== INiz2KfYudiq U2Vnb2U= YXR1bA== ZW5jaWFkbw== IEhhbnNlbg== 0LXRgdC4 IOCmmuCmvuCmhw== IGFybw== IG93aW5n IGZvZ28= IFdJRFRI IOCmuOCmruCnjeCmquCmsOCnjeCmlQ== YWRoaQ== IHZha2Vy IOyhtA== IOCqrOCqueCqvuCqsA== IHRlZWI= IGVycm9yZXM= IG1pdHRsZXJ3ZWlsZQ== IEJ1bGxk IGF1Z21lbnRhdGlvbg== INC70LjRgtC10YDQsA== YXRvcmlvcw== ZmZlY3Rz IExvdHVz Y3JlZGlibGU= 4YOY4YOj4YOa INC00LDQu9C10LU= 15XXmdeU 7YOI ZW1lbnRv YXNpZQ== IHNuaXBwZXQ= IGJydXNoZXM= Q09S IGNvbnRhbWluYXRlZA== b2xsYW5k Z2Vmw7w= IOyYqOudvOyduA== J2V0 INCw0LLRgtC+0LzQvtCx0LjQu9GP Lmhlcm9rdQ== IM61zq/Ph861 IGV4cGFuc2l2ZQ== Lio7Cgov IEthcnRlbg== RWY= 0YDQsNC00Ys= IHRlbXBs 4KuL4Kqs YW1pZGU= aXZhcmk= INKv0L0= IGhhcmJvcg== X3Jld2FyZA== IERvbmM= 4KaP4KaH IFJlYWRz rOCwguCwpw== IGfEp2FuZA== IG9id29obA== aXJrZXQ= IOCqquCqsOCqv+CqtQ== IFRocm9uZXM= IFByaXNvbg== IOCwleCwvuCwsg== 4KaZ IFJvY2hlc3Rlcg== w6F2w6E= e3N1Yg== IGxlZWY= aXJhbWVudGU= TmVj JykpOw0K IHJhc3M= IGtlcnN0 L2NoZWNr IEhhbXB0b24= w6tuZA== INeQ158= IGNyYw== IHRldmVucw== 0LzQsNGB YWlua2Fu IGl6ZGVs 2YjYsdin2Ko= IHJlZGVtcHRpb24= X2NvbnN0YW50 IGFzcGlyYXRpb25z UmFpc2Vz IEbDpGg= IG1lemk= IMOWbA== IMO+YW5u INOp06nRgA== IEFybGluZ3Rvbg== 2KfYqNiv bG9t IEV1cm9wZWE= 0YPRjtGC0YHRjw== IOGDm+GDneGDnOGDkOGDrOGDmOGDmg== 4LmA4LiV4LmH4Lih IHLDqXBvbnNlcw== 4LC/4LCz ZGV2ZWxvcA== RGlnaXRl INCS0YE= IHDDtWhqdXN0 IGFhbmdlcA== 4LKw4LKj QXV0b21hdGlj L2NvbnN0YW50cw== IGdhbHZhbg== IEJyYXZv QW5ub3Q= IHRoaWNrZXI= 4Li04LiU4LiV4LmI4Lit IGZlbWVu W2g= UmVwbGFjZW1lbnQ= INGI0LDQsQ== IENlbHRpYw== INGB0YLQsNCx IGJhdHU= IFN1aw== 5aGe IGzDsnQ= IGFsZ2VtZW5l IEZlbGxvd3NoaXA= dWNlcw== IHJlcHLDqXNlbnRl IGRpc3TDom5jaWE= LnVwZGF0ZWQ= 4KmI4KiC INCy0LXRgNC+0Y/Rgg== w61ibGU= INek15k= 5LqM57u0 5L+E572X5pav IERvbnQ= IHdhaHJzY2hlaW5saWNo IOasoQ== IGxpam4= IHJlcHJvZHVjZWQ= KCcsJyw= IHZpc2Fz JnJz J2Vy b2dyYXBocw== IG1lcmN1cnk= Q2hlbQ== LXNvbGlk INCw0LrQsNC00LXQvA== IG9iYQ== YWdoZXR0aQ== IE9mZmljZXJz 4K6+4K6v4K+N ZXJtaXNzaW9u IHdhZg== QHBhcmFt IHNvbGNoZW4= INmE2YTZgQ== IF8oJw== IHRhbmdhbg== IGFsYXM= IFBpZWQ= IikuCg== 55S35aWz IFN1bnNoaW5l INGE0LjQsw== L2lucHV0 IE1lcmtlbA== IGh1Ym8= IGt3YXJ0 IGNpZXJyZQ== UGVs IGFtYWs= IGtlbmE= RMOpYw== IGV4cGVjdGF0aXZhcw== IGdvcw== IFN1bnNldA== RGVuaWVk 2K7Yp9mG2Yc= 5YW35L2T IHpvb24= IGhpcHA= IGRpYmVy 4LKw4LK/4LKC4LKm IGVhdHM= IGRyZWFtZWQ= IGJldHJvdXc= IGJ1bmE= KG1vbnRo IFRyeWluZw== SUdP aWVyYXM= IHBow6Ju X21ldGhvZHM= IHTDpGdsaWNo 77yd77yd 6Lqr5Lu96K+B IFRL 2YXZiNiv KGVtcGxveWVl IHJlc2VudA== SnVk aGVyaXRz IGNvbW11dGU= IFdlaXRlcmU= IHN3ZWV0bmVzcw== 15XXpteZ150= Q2lwaGVy INin2YTYp9iu2Ko= IGNvdXBsaW5n INOZ0rs= INGA0LXQvNC+0L0= 5puc5pel c2VyZGU= 6aSo RU5ERUQ= IGZ1ZXJ6YXM= dXJr IEdlc3Byw6RjaA== IGJhbm5lcnM= IGRlbnlpbmc= IHBvc2l0aWY= IGxlYw== X3NlcnZpY2Vz 5aeo bWVuZXM= IHJlZ2Fpbg== IGVkdWs= 4YOb4YOY4YOX IE1pbmg= SU5J IENGRA== 5aix5LmQ5oC75Luj IEF1c3RyYWxp IGRlYmF0 IE5ldXJv IHRyZXQ= 4KS44KWN IGhlbmtpbA== YWZmbGU= IFN0cmF0 0L3RltC60LDRng== IGtpaXM= L3Blcg== IGthbGF1 IFdhZGU= IOi3 INC40L3Rgg== IFBhcmFsbGVs IOCkleCkruClgA== 6YCG ZXJyYW4= YeeJhw== KHJ1bg== IHBvdGFzc2l1bQ== L3JlcG9z IGlnbm9yYW50 IGVtYmFycmFzc2luZw== 0pPRi9GI IG9jY3VweQ== dmlrYQ== IEthcmRhc2hpYW4= IGNoYXJtZQ== IG1lcnQ= IHBlcmk= 25XZgw== 4KSw4KWL4KSC IGR2ZQ== eGlldHk= IOeEoQ== INeb15M= INKz0LDRgNCw IFRob3VnaHRz ZGRh IGFhbnBhaw== IGp1aHQ= RUVQ IHdhbGU= 16DXog== IHPhu6lj IGNvbnRpZW50 15XXoteT IMOkbmRlcm4= INWv1aXVttW/1oDVuNW2 IGdlb21ldHI= IHLDqWR1Y3Rpb24= IGh1aQ== IEV4dHI= IGludHJpbnNpYw== IGNoYXJjb2Fs 4KSq4KSk4KS/ IEFibA== KGF0dHJpYnV0ZQ== IFJlbm92 X1JFQ09SRA== IHBlZ2Fy X3ByZXNlbnQ= IE1lZQ== IOCkleClgeCkqA== CQkJCQkJCQkK IGhhcsOh IGt1YmU= KEF1dGg= 4KWH4KS24KS+ IG1hZ2U= CWNlbGw= IOC0qOC0n+C0pOC1jeC0pOC0v+C0rw== IGludGVycA== Rm9yZ290 IHBlcmZlaw== IHBhcnRpdGlvbnM= IGxheWVyZWQ= 0LzQsNC7 IFRlbnQ= IHZvbHdhc3Nlbg== 4LKh4LOB4LK1 INK705k= aWxvZw== IOOAjg== KGRlbGV0ZQ== PEFN IE5vcmRpYw== dmFuYQ== IFdpZmU= IOGDkuGDkOGDnOGDquGDruGDkOGDkw== IE1vbnVtZW50 2LrYqA== IGFjY29tbW9kYXRpbmc= 0YbRltCy 0YLQsNGA0LTRiw== aGlwcGluZw== aWduYQ== IHByb3RlY3Rpb25z z4PPhM+M IEtV IE5lZA== IFRvdXRl IOCuheCutA== PiIpOw0K R1JPVVA= IHJpdGU= LlBvcnQ= 56+A IEdlbnRsZQ== IE1lYXQ= INC00LjQv9C70L7QvA== KHN0cmljdA== IFNwb3J0aW5n IG1vbGllbmRh YWxyZWFkeQ== IFdhaHI= IGNyYWNraW5n IGFuYmVm PXY= ZW5hcmlvcw== bGVpc3R1bmc= INiz24zZhg== IOCkqOCkvuCkl+CksOCkv+CklQ== INCw0YDQsNC40L7QvQ== L21hcA== YWludGllcw== IEFyenQ= IOCqk+Cqqw== LkVtcGxveWVl IHByaWNleQ== IE5ldHdvcmtpbmc= TlBD IGJvcnJvd2Vycw== R2VybWFu IEp3dA== IOyEpOuqhQ== 56Gu5a6a IENlbGU= YXJuZXI= RHJ1Zw== IGNlcnRhaW50eQ== X3JlbW90ZQ== IGluZMOtZ2Vu Y3Vt IHJlY29yZGVy 4LmA4LiE4Lij4Li34LmI4Lit4LiH IGVyc3RlbGxlbg== IHNrb2w= INix2qk= IHNwZW5kZXI= IHPDoW5n bmVvcw== 7J6Q66W8 YWR2aXNvcg== IOCmueCmsuCnhw== 4oCN4LSx4LWG IENhc2V5 IOCkteCkvg== INGA0LDQt9C90L7QvtCx0YDQsNC3 1aXWgNW41b4= QXNw IGR5bmFtaWNhbGx5 IEludGU= IGFtb3J0 IHN1YnVyYg== YmF0aQ== IFN0YXJ0cw== IHNraW5jYXJl IOCyheCyguCypA== T2zDoQ== SW50ZXJ2aWV3 VVJBTA== IFBvbMOtdGljYQ== IHBlcnPDtm5saWNoZW4= aWNpb25z INGB0YLQsNGC0YzQuA== Rm94 4LmA4Lij4Li34LmI4Lit4LiH L3Nl IENhc28= IGt1bmRl IGNvc3Rpbmc= 6KKL b3VkZQ== INOp0LvQug== INCc0LDRgQ== IGVzdMOpbg== INC80LDRgtC10YDQuNCw0LvRiw== IGNpbnRh 4LK+4LK34LON4LKf IOCwquCwvuCwsg== IFNISVBQSU5H IOCyuOCyguCyqg== cXVibw== LnJhZA== INC60L7QvNC80YM= IGZlcm1l IHF1YW50aXTDqQ== 2YTZitin SURHRVQ= X2F2ZXJhZ2U= X3R1cm4= TGVl IEVhdGluZw== IEdlcsOkdA== IGNvbmp1Zw== ZXJpbmdz IG1pc21hdGNo fSkpOwoK INiv2KfZhti02q/Yp9mH Ynlu IHB5dA== IHNpbW1lcg== INGB0rE= ZXN0aW1hdGVk X0NPUFk= IOC0quC1i+C0suC1gOC0uOC1jQ== 5p2w 1oTVq9W2 CVNjYW5uZXI= IGNvdW5j IGjDug== 4YOg4YOr4YOU4YOa IHBzaWNvbA== b3Rw IOCkuOCkruCljeCkruCkvuCkqA== IHp1ZW4= IHRhdHQ= PT09PT09 IGF1w59lcmRlbQ== IOaWhw== X1NQQUNF dWd0 RmF0 INmF2KfZhNuM bWFhdA== IGNlbsOhcmlv z4bOrQ== IOCwieCwpg== IGlkZW9sb2d5 INeo15HXmded IGd1dGVy IGvhu7M= IG9wZQ== IOCqruCrhw== IGxlYXJuZXI= aWNpZW50ZQ== IFJlc29sdmU= zrXPjQ== IGVtcGhhc2l6ZWQ= d2luaQ== 54mZ QU1C INuM2LnZhtuM bmnDsA== IFByZWZlcmVuY2Vz IHNjaHdhcg== 2YTZidmD IGxldmVyaW5n 0L7Qu9C40YI= LkFuZHJvaWQ= IGhpc3Rvcmllcw== IGRpZmZ1c2U= 4YOU4YOR4YOU4YOR4YOY4YOh 4LmJ4Lih INCx0LDRiNKh IGNoYcOubmU= IHBhcmFkb3g= IOCwruCwsOCxiw== b29kYQ== 0LDRgtC10Lw= IFN3b3Jk 4K+B4K6V4K6/4K6x IGdlc2FtdGU= INmG2LPYqNip eW5kYW4= 4YOd4YOa4YOY IGJ1dHRlcmtuaWZl IG92ZXJ0dQ== IGNvbXBsaW1lbnRz IHlvdXRoZnVs INC80LXQtNC40rM= INGB0YLQvtGA0L7QvQ== IEdhbGE= INC80LDRiNC40L3QsA== 4LC+4LCs4LC+4LCm4LGN IEVhcmw= 15XXqdeZ150= cmViYmU= IGFnZ2k= IG9yZ2FuaXphZG8= emFrZW4= IHNhbm4= IHbhu6th 0LDRhtGM IHBlbGw= IEl2eQ== INmB2YjYrA== IHV0dA== IEd1aW5lYQ== IFBhdHJvbA== IERldGFpbGVk IG1vZ8SF Y291cnNlcw== INin2YTZgdmD w6FsZXM= IGtpc2k= LVph aWHFgmE= 4K+N4K6V4K6z4K+I X2NlcnQ= IGNvb3BlcmF0ZQ== XyQ= 4Z+B4Z6J YWNhbQ== dmV0dGU= dWVibG9z 2LnYsdin2LY= INC00YDQvtCx IG9rdWw= IHN1ZmZlcnM= LmhhbQ== IHZpdmE= IEZBQ0U= IHJlZ2lzdHJhZG8= IGR5b25k 4KuL4Kqo4KuH IHBhc3NhdA== 0YPQsNCw TGlzdGVk LXNlbGY= 7Zic IFVJQXBwbGljYXRpb24= J29yaWdpbmU= IFJob2Rl IOmU cmljaHR1bmdlbg== 5oiW6ICF X29icw== IEFww7Nz IHJhxI0= aWVyZW5kZW4= IGlubw== IEVuZHBvaW50 IG15dGhz Q29ubmVjdGl2aXR5 0Y/RjtGC0YHRjw== IG5lY2VzaXRhcw== IGZhYnJpaw== QlVGRkVS IGZpYnI= IOWkqeWkqeS4reWlluW9qeelqA== IOCqpOCrh+CqruCqqOCrgA== INC20LDSo9Cw IGp1bmc= e3stLQ== IGZvbGlhZ2U= IGVoZW1hbA== RU5DRVM= IE7Cug== IERpdmlkZXI= 0LvRj9C0 IChfLA== IFdlaWI= IHPEsWs= 4LWA4LSk IGZ1bmNpb25hcg== aXphw6fDtWVz Ymli IGRlbGVnYXRpb24= IENvdW50cmllcw== IHVuZGVm IFdC IG1pY3JvYmk= bWl0dGVy IEphY2tpZQ== IGltbW9iaWxpZXI= IHJlbGFjaW9uYW1lbnRv X01PVkU= IG5paGls IHN1Y3Jl LlVJTWFuYWdlcg== IG1hdXZhaXM= IExlaXB6aWc= aGVuZA== INCf0YDQtdC30LjQtA== RGFt 5YWN6LS56KeG6aKR5Zyo57q/6KeC55yL e30pCg== IGFzdHJvbmF1dA== IGRlZW0= Q2FtcG8= YWJvdmU= IOCknOCkv+CkuOCkuOClhw== IOCyieCypOCzjeCypA== IHdoaXN0bGU= cWlu IG1hcml0YWw= IGFrYw== KG5vdGU= KHBpZA== 4K6a4K6/4K6v YWtrYW4= IHZhc3R1 4LiZ4Liy 4Ki/4Kik U2VydmU= 5omp LnNvdW5k QEdldA== IGxvY2F0b3I= Q2hvaWNlcw== IGvDq3TDqw== INeq16g= W25ldw== IGFydGlzYW5z 4Liy4LiX4Li1 IGJlbGxlbg== IMOneWs= KHNlY3Rpb24= KGlkcw== IHVuaW5zdGFsbA== IHByb3N0b3I= aWNpc20= IEhFQURFUg== 55+l6K+G IFBvZXRyeQ== IERleA== LiY= IGVubGFjZQ== ZXRpbg== IGZpcmVhcm1z IHRy4buj SG9va3M= IHB5cmFtaWQ= b25uZXI= YXppcmk= v5A= IFNhdGVsbGl0ZQ== IGR3YQ== 0q/SmQ== IE1pbGl0YXI= aXZpbmQ= IGxlZQ== X2NvbnZlcnQ= 6auY5omL6K665Z2b INW01aXVpg== 5a2m6Zmi IG9nw6k= IENhcmRpbmFs IHNraXBwaW5n IOCmsuCmv+Cmlg== U3R1ZmY= INee15XXoQ== IFNwcmFjaGU= IOCqquCquA== IOGemw== 15HXmdeq 6YCJ5LqU INGB0LLQvtC10Lw= X0ZSRUU= IGhpZQ== ICAgICAgICAgICAgCgo= IG90cg== 5Y+C5LiO IOuTseuhnQ== 4KS+4KSv4KSm IGRlc2NlbmRpbmc= INGH0LXQuQ== IEpPQg== amx3bQ== INmC2K/Ysdiq IHN1YnN0cmluZw== INC+0LHQvNC10L0= IE5ld3BvcnQ= 6aKG5Z+f w6hjZQ== IHBpZGU= INeU15HXqA== IOCqtuCrh+CqsA== TUVOVQ== xqA= KGNhcnQ= 4oCL4Z6P zrvOv865 IG5hdHVyYQ== U29ydGluZw== IGVsZWt0cmlzY2hl b3JwZW4= bGVkZ2Vy INGC0L7Qsw== IFNUQVI= 4KWJ4KSq INin2LPYp9iz enlj RHJ5 IGZpbm5l IHBvcnRyYXllZA== IEhhaXRp SW52ZXJzZQ== IHN0b3BwZW4= 16rXnQ== aXJsyZly LWNvbG9yZWQ= Q2l0aWVz IOydtOycoA== IGFtaXN0 IOCkuOCljeCkleClguCksg== IGjEsXo= IEludGVyZXNz IEluc3BpcmVk 5b69 INmI2KjYudiv bGVybw== IGV1bQ== IGNlbnRyYQ== INin2YbbgduM2ro= IHJzcA== IHVuc2VyZXM= L2hvdw== IGNvbmRpY2nDs24= IEVsZW5h QXV0aG9yaXplZA== INCx0ZbQu9GM IOCmruCmvuCmp+CnjeCmr+CmruCnhw== qeGDlOGDleGDnA== INmE2YrYs9iq 77yM5YW2 INCy0LvQsNGB0YLQuA== INmF2KjYp9i02LHYqQ== IEdSQVQ= IGNvbm9jZQ== IEJha2U= bmltaQ== LmNvbHM= IEhhbGxl X3Nob3A= LmN1cnJlbmN5 IE5vaXI= KENvbW1vbg== IEJldmVybHk= IHRyYXplcg== 15jXmQ== LkJhdGNo IEpNZW51 YmVt IG1heGltYWFs Q29tbWlzc2lvbg== IOuLueyLoA== IGTDuQ== INCz0LXQvdOZ IHdlcmt6YWFtaGVkZW4= bHVlbnQ= IOeUqA== IGRlY2xpbmluZw== 0YDQvtCy0L7QtA== IHZlZGU= IENvbXBsZXRlZA== IGRlZ3I= IG1hbmpl VGV4YXM= L3dpZGdldHM= IOODhw== IGhvcmFyaW8= IEdyYW1teQ== INC30LTRgNCw0LI= IGdvYXQ= IGd1w61h KENoYXI= IHBlcmd1bnRh IEFGVEVS IGF1Zno= INC805nQtw== IHdpc3M= IEdyaWZmaW4= 5Lid6KKc IHRhcGFodA== 0J3QsNC/ IHBlcmltZXRlcg== IERWRHM= 2LXYp9ix ICcqJw== dXJhdGU= IEV2aWRlbmNl IOiR KFRoaXM= INW41oLWgA== aGF1bA== IGFsaWFzZXM= IHNjaHJpZnQ= IOGDneGDng== RUlOVkFM IEhpZXJkb29y INin2YTZhNi62Kk= 6YCJ5Zub 4LSy4LS/ IHNsaXBwZXI= KHt9KTsK IGNhbWlz KGNz IHBlcnNvbmFnZW0= IHRlcm1v IOCwquCxiA== IEdydXBwZW4= IHJlZGlyZWN0ZWQ= X3JlcXVlc3Rz IE3Dqm1l LHN0cmluZw== 4Kqs4KuN4Ko= 2KrbjNin IFBsZW50eQ== IHNtb290aGVy bWFyYXM= IGRpc2Nz IG5m IG1vdGlmcw== U1BFQw== IOCykA== 4LKX4LKz4LK/4LKX4LOG IGNsaWNo 5rm/ IGJpY3k= X2Jsb2c= LmNvdW50ZXI= cGxhY2luZw== U2l0ZXM= IGltcGFpcm1lbnQ= IFNhcms= dG9h IGFuc3Zhcg== IGF2ZXJhZ2luZw== 4KeL4Kao4Ka+ LmxhYmVscw== U2hhcmluZw== INin2YTYrNmF2Yc= Y2Fv X1BBUkFNUw== INi52YXZhNmK2KfYqg== IOCmrOCnjeCmr+CmrOCmueCmvuCmsA== UGxheWJhY2s= 16LXqQ== IElzYWJlbA== aWdoZXRlbg== 5pyf6Ze0 SWRlbnRpZmljYXRpb24= IOCwuOCxiw== 4Lix4LiH4Lir4Lin4Lix4LiU KGhvbGRlcg== IGJlbG8= IGFkZGljdGVk INCw0LvQutC+0LM= IHByb2ZpY2llbnQ= IGFmdGVyd2FyZA== IFJvdGFyeQ== IOal IOS7ig== 1aHVpNWh1oDVsQ== IHZlcndl aXZhdGl2ZQ== INW61aHVt9W/1bjVtg== IFRpbWVsaW5l ZXJ0eg== IOCqpOCrjeCqsOCqow== INmE2YfYsNin IGNvbmNlc3Npb24= aWplaw== aWxsdW5p b3Zhbmk= 4LGH4LC34LCo4LGN 4Ka+4KaB4Kaa Ulc= IG9uYm9hcmQ= IHBlcmnDs2Q= 4Kew4Kaj 5YWa55qE Li4uDQo= bGVuZw== dmVybGVu IE9yaWVudGFs IHDDs3M= 0YbQuNGP0YU= IGZ1enp5 IHJlbWFya2FibHk= IFRhbGU= SURFUg== Tmlj IOGDmeGDoA== KFRFWFQ= T3BlcmF0b3Jz IGluc2V0 IE5hdHVyYWxseQ== a296 IHNlw7FhbMOz IGFxdWVsbGFz IFNhaWw= IE15dGg= IGVrc2VtcGVs LiIn z4TPjg== 6L+Z6YeM5Y+q5pyJ57K+5ZOB INiv2YHYp9i5 c3VwcGxpZXI= aXRsZW1lbnQ= dXB1bmN0dXJl aWtrb29ydA== IE1lbidz IHJlZnVuZHM= Ym9r TUFJTg== IGVzY29saA== INCw0r0= YXRlcnJh IENvbmdyYXR1bGF0aW9ucw== LWluZmxhbW1hdG9yeQ== 5o6S5YiX aWxpaA== aGVzaWE= IGRlc3Byw6lz aWZkZWY= amVl RXo= IElOREVY INin2YTYrtiv2YXYp9iq INio2LHYsdiz24w= INGA0LDQt9Cy0LjRgtC40LU= INqp2YbbjNmF cG9wdWxhdGU= Lmdyb3Vwcw== 0qHQsNC9 4Kqk4KuA4Kqv IFllcg== IOGDkOGDoOGDmOGDkOGDnA== INee16nXqg== IFBPSU5U SGlzdG9ncmFt O2JvcmRlcg== bGljdGVk IO2MjOydvA== 4bmjaQ== IENoYW5k LkNPTlQ= IHVzYWRh 4Kmw4KiX IHJlZ2VyaW5n IG1hbW1h IOGDruGDkOGDmuGDrg== b2NraW5n IFNFUlZFUg== IOyCrOyLpA== IOGDl+GDleGDkOGDmg== IOCwqOCwv+CwsOCxjeCwtQ== IOuztOqzoA== IH0pOwovLw== IEhFTFA= IGNpaWQ= QXZpcw== T0JJTEU= LmJ5dGVz IOGDk+GDkOGDlA== IGpldWdk SVZFUw== 4Kq+4Kqt IOCyquCyoeCzhg== 5Zue562U IGNvbm5haXNzYW5jZXM= eXNh IENVUlJFTlQ= dXJpaw== KGN0 LmRlcHRo Wyw= QnJhaW4= INC/0LjRgtCw0L3QuNGP w6dvaw== INW01aHWgNWk1a8= INWo1bbVpNW41oLVtg== IHBlcnNvbmFsaXpl IEltbXVu ZW1lcw== IG9wcGVy z4HOtc65 IGV4Y2x1c2l2YW1lbnRl a2hhemlh INmF2LHYqA== INC90LDRiNC10LPQvg== IFBCUw== ZW56aGVu IHNlbGXDp8Ojbw== ZWRpbw== INCX0LDQug== 5oiQ56uL IOet IExlYWs= aWJvbmFjY2k= QWNjb3JkaW9u X2ZyYWdtZW50 INmD25A= Z3Vub3M= IOWInQ== KGJ1ZmY= IGZhY2V0cw== 4LKs4LOH4LKV4LOB INC30LDQvNC10Yc= LkNhbGxiYWNr 4LSn4LS/ IGVuaGFuY2VtZW50cw== IGVyYXQ= SUxJ ICksCgo= IHNoZW1hbGU= IHN0YW0= 4YOd4YOT4YOj4YOl IEVxdWFscw== IGTDqWZpbml0 IGx3bQ== 0YDRg9GB IGlnYQ== IEdMT0JBTA== INC90LDQt9Cw0YA= IEFycXU= VEhJTkc= 1aHVtdWs 6KGM5Yqo INC40L3RgdGC0YDRg9C80LXQvdGC IFdhaXRpbmc= RGVzaw== IG1vdmltZW50 VGl0dWxv IHBlcnNvbmFnZW5z IEt1bHQ= IOWung== IEJhcmQ= IFNBUg== IGhhdGk= IHBhZ2w= INOZ0Lc= 6am+ IER1aXQ= CWVudGl0eQ== b2JqZWN0aWY= 4YCZ4YC94YCs IHF1ZWTDsw== KGNlbnRlcg== IOCkpuClh+CkluCkqOClhw== fCI= LW9wdGlvbnM= Z2hhcg== IHV0dmlr 5a2p5a2Q Q2FkYQ== IHdlbmlnZQ== IHdvYmVp 44KT44Gq IEFsbGVyZGluZ3M= INec16fXkdec IMSR4bqldA== 4pmqCg== 4Kqn4Kq+4Kqo IGthbnRvb3I= YmVuaA== YXR0ZXM= IEdsZQ== INGC0L7Rh9C60Lg= LklOVEVHRVI= INin2YTYo9mB INei154= IOWHrw== IEphbmV0 Ij4nKw== 0pvQuNC5 INmE2YTZhg== 1bjWgtWp1aXVodW2 LkphdmE= JG9iag== IGJpc29n d2VlZA== LnR1cm4= INmF2LHYtg== IHZhxaFl IFlhaA== YWN5ag== 6aOO6Zmp RXhjZXB0 aG91ZGluZw== 1aHVpdaC IGRhYXJkb29y IGVtYnJv aWRlcmVk 4KeB4Kat INix2YXYttin2YY= LmxpbmFsZw== 44CH LmJpdHM= 6buY6K6k IG1pZGRhZw== bW9kaXR5 IGFpa2k= IOCmmOCni+Cmtw== IGjDpHR0ZW4= 4KWB4KSz SW50ZXJzZWN0aW9u 0LbQsNC5 INWr1bbVsQ== IHVuZGVz 4LS+4LSs INC80Y/RgQ== LWxvY2Fs IGthbWVycw== IGFsbGV2aWF0ZQ== bGVzc29u X2ZpeGVk 57yT 0LXQstGL0LU= IOi/lOWbng== INC/0YDQuNGH0LjQvQ== dmVyYQ== IHZhbGlkYXRvcnM= 4K6f4K+N4K6f4K+B IMOEbmRlcg== 44OH44Kj44O844K5 IGvDtnZldA== L29yZGVy IGJvdg== w6dhbWVudG8= IG1hbmlj KGVz IHJlcHJlc2VudGFudGU= 2LTYtA== IEZH IEF1ZmdhYmU= X0RJU1BMQVk= IGtsaW0= QFJ1bg== fCc= IHBsYXRv IGxvamFz aGVsaWFs IHNjcmVhbQ== IER1bw== IGxvbmRvbg== IFNhYQ== QnJpYW4= aXNwaGVyZQ== 6L+U54K5 IHN0aWc= 4oCZYWN0 IGxpc8Okw6Q= 0LHRltGA IGNvbW11bmFs ICsvLQ== YWxlcnM= IFJlYWN0aXZl IE1pY2tleQ== LmNhdGVnb3JpZXM= IOWklg== UkVM IFZhZA== IGNvbWVuemFy aWp6ZW4= YXNvcQ== IGxsdm0= INGI0YvSm9OZ0YE= 0ZbQu9C10YA= IGNvbXBhw7Flcm9z 4KWL4KSf4KWL UExJQw== bGFtcA== J2Fib3Jk ZWxhYXJz INeU15nXnA== 5pqX INWw1avVtNW2 2KfYsdi2 IEJvbGl2aWE= IGFtYXM= IGlwaW4= IGF0cmlidXQ= IGN5bGluZA== 4Kam4Ka+4Kao IGFsdGFtZW50ZQ== INmF2K3Yqg== IGFrdW4= 2YPYqNix X3BhaXJz Lm1ha2Vk IHNwZWVkeQ== INeb15zXnA== YXRpdmlkYWRl ZXN0aWFs IE5pbmc= LmF4 IEFwbGlj 4YOU4YOj4YM= IHNjw6lu IFNwaWVsb3RoZWs= bG90cw== IOCuheCuqeCviA== IEtvcnQ= IEh1Z2U= IFNhYXQ= U3VzcA== INWv1azVq9W2 IGx1YW0= IGluZ3Jlc3M= bMOhbg== IGNvcnBvcmFs IGNvbmZpcm1pbmc= dmVuZGU= IEdvbmU= 0YjQtdGA IOyii+yVhA== IHNtb2tlZA== IGNyaXRpY2l6ZWQ= IG1vbGlub3M= 4Z6J4Z+S4Z4= VGFp IHByb21lZGlv Rm9sZA== IGZpZmE= 6buR5bmz5Y+w L21lbnU= IGthcmk= Ozw= IGlhd24= IHRocmVhdGVu YXJtb255 SHJlZg== INmE2YLYrw== IGNvbnNlY3U= xI11 X3NwYW4= IGhvyrtvbA== IOS7 TWdh 7KCV7J2E INWd YmF1bQ== IOGAkQ== dXJhdGlvbnM= 0YHRhtGM Qmlz IHNuZWxsZXI= Ll0KCg== YWJlbmQ= IHNhdGlu 5LiT6aKY YXJrZXQ= w7xyw7w= L2Vycm9y IHZpbmN1bA== 7L2Y Y292ZXJhZ2U= INin2YTYs9mK2KfYs9mK2Kk= IFNhbGVt TWFyYw== INmF2YjYqg== IHJlbGlhbmNl IOCqnOCrh+Cqrg== IGF1dG9tYXRl IFZs IGVudGlyZXR5 IOGDoeGDkOGDreGDmOGDoA== IOCumuCusA== Lm1hcmdpbg== INit2LLYqA== IGTDqWNs IGV1cmU= IGJlc3Bva2U= b2ludG1lbnRz LWV5ZQ== LXByZXNlbnQ= IOGDpOGDkOGDpeGDog== INmE2YTYsw== IERFVg== IGRhZGR5 bMO8c3NlbA== IHJlYWxpemFkb3M= INC60LDQvdC00LjQtA== 5oGQ57iu 2KjYp9ix2Yc= 0L3QvtGB0YLRgNCw0L0= b3Zvcg== IHJhbnNvbQ== b2NyZQ== L2lv IGJlbnV0 IFdvY2hlbmVuZGU= IOCmh+CmpA== IGxvY2FsaXphZG8= IOG7jW1h IFBhcmFndWF5 4KuC4Kqw aW5jZXI= IG1lZGU= LkxFRlQ= IExpZmV0aW1l INmG2KrZitis2Kk= IOa1j+iniA== IOyghOyytA== IExhbmRzY2FwZQ== IEVsaWc= IG1lbGxlbQ== IOCmleCnh+CmqOCnjeCmpg== LlBhY2thZ2U= INep15nXqNeV16o= IGZydXRhcw== RmF0aGVy L1hNTA== IGLEmWTEhQ== LkhhbmQ= INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4 IHBhbGE= IG9yZ2FuaXNhdGllcw== IO2C IGtvcmlzdA== X1VTQg== 4LC14LC+4LCw4LCC zrPOuQ== IFB1bmphYmk= IE5ldWU= IGV4YWNlcg== IG1hdHJpYw== aXNjaXBsaW5hcnk= IE15ZXJz aWV1emU= IE9CSkVDVA== IFBpbGlw dW5nYWxvdw== INei15HXldeT15Q= c3Rkb3V0 RmFjaWxpdHk= IHBvc3NhbQ== ZXJuZXQ= LnNhZmU= IOODmw== IHNhbms= b2dlbm91cw== INep16TWvA== IElyYXFp 2LDYqQ== L1dlYg== IGRvY2U= 4YOQ4YOi4YOY 16DXotef ZXN0aW5n INil2LbYp9mB2Kk= dWV1eA== w6HFvg== IGZhY2lsaXRhdGVk IOCmuOCnjeCmlQ== aW5zZQ== INCx0LjQu9C00LjRgA== IOC0huC0teC0tuC1jeC0rw== IHRyYXNsYWQ= bGljYXRlZA== 4KSm4KWH4KSW IFBpY2t1cA== IGFmZmljaA== aGFtZWQ= IGtpZXI= IGVkdWNhdGluZw== IOOAgOOAgA== X3BlbmRpbmc= KEZJTEU= aW1lbnRhdGlvbg== Y3ViZQ== 4KeC4Kaw4KeN4Kaj LdC90LjQsdGD0LTRjA== 15nXm9eZ150= INCy0YrQtw== IFNFRw== 4oCZYXJ0aWNsZQ== IG1vZ2VsaWprZQ== IHNhbmN0dWFyeQ== aWVybg== YW5pdHk= IGJvbmRhZ2U= 2K3ZiNmC LnF1aXQ= SWxz IGNyb2lyZQ== 66CM IOCuqOCun+CviOCuquCvhg== dW5na2lu INC/0YDQvtGI0Ls= LW5vZGU= QnJpbmc= 57qs SVJP IGthxb5l INC80YPQttGH0LjQvQ== IGFtZWE= X2RvbQ== INGD0YDRi9C9 IG1ldG9kbw== 4Kq+4Kqo4KuB4KqC IM6/zrzOrA== 2YbYr9ix IHNvdWQ= IE51bmFhbm5p aW1wb3J0YW5jZQ== INC90LDRgtGD0YDQsNC70Yw= IExhbmd1YWdlcw== IGHFn2E= LXJvYWQ= ICQiew== 4LKh4LON4LKh 4K+B4K614K6w w6lkaXRpb24= IGNhcGl0YWxl IEluZmw= IOC0teC0sw== IGVudW1lcmFibGU= IE1vcnJpc29u IGdla29tbWVu IHNhbXBsZXI= IE1pbHRvbg== IGNoYXZl UG9kcw== IGNsYXNzeQ== IFJlc3M= INqp24zZgduM2Ko= IOCoh+CouA== IGRyYWZ0ZWQ= ZHVpdA== IGJ1ZHM= 4LWL4LSu aWFueQ== UHJpeA== LmZpbHRlcnM= IG1lZGxlbQ== Y29tZW5k LXVzZXJz 44CN44Gu INCw0YDQvdCw0Ls= IFdyZXN0 IGZsb3Jh IFB1enpsZQ== IHNpbnRvbWFz UHJhY3RpY2U= INmF2q/YsQ== IGVtYmxlbQ== 4LGA4LCV IM+Mz4TOsc69 IHJlc2N1ZWQ= INK705nSm9Kb0LjQtNOZ Licn IGFzeW5jaHJvbm91cw== IGZhdHQ= IGtuaXR0aW5n IGJydW5jaA== LlRpbWVzdGFtcA== emVycw== IFJhZw== INC00LXQv9GD0YLQsNGC IC4uLi4uLi4u cXVhcmVk 4YOa4YOU ICoqKioqKioqKioqKioqKio= dHJhbnNhY3Rpb25z 4KSo4KWN4KSk4KWN4KSw ZWxhbg== cGh5c2ljYWw= 4K6f4K+B IOCuruCuvuCutQ== 0ZbQvdGD 5oGQ57iu44Gn44GZ IGdlYm91dw== INCw0LvQtA== INGF0L7Rh9GD IHN0cmVzc2Vz eW1vb24= dXBncmFkZQ== IGhhbGx3YXk= ZGRs INC40pvRgtC40YE= IMOpdHVkZQ== IENyb24= IEhhcnZlc3Q= 4Kav4Ka84Ka+4Kaw ZGRk Q2F0ZWdvcg== IGJyb2NodXJl d2llcg== IOGDnuGDoOGDlOGDluGDmOGDk+GDlOGDnOGDog== dXJubw== IGjDtnI= WU5BTQ== IENoaW4= IOC4guC4seC5ieC4mQ== b3JvxI0= IOCkhuCkr+Cli+CknA== LWNvbnRyb2xsZWQ= IOCqhuCqquCqteCqvuCqruCqvuCqgg== YH0K INiq2LHaqduM INmE2KfYsQ== 0LDRgtC60YM= IGZpbHRyYXRpb24= UmVwb3M= IHJlcGFpcmluZw== IOGDlOGDleGDoOGDneGDng== INGF0L7RgtC10Ls= YXVt 4LCo4LCC YW5kYW5n IOeV IGdlc2FtdGVu IOivug== YXRhaXJlcw== KGNvbmRpdGlvbg== emFuYQ== IG51bWI= 4LKc4LOG IG5lZ2xpZ2VuY2U= 5aSn5Y+R5a6Y572R IElycg== IGF0dGl2aXTDoA== IOG7jWg= LXRoZW1lZA== INiz24zYs9iq2YU= QU5URUQ= 0LDQu9C40Lc= 4Kas4Ka+4Ka4 4YCC IGRlcXVl INC00LDQtdGC dHJ1c3Q= 4KS+4KSK IFZpa2luZ3M= T3BlcmF0aW5n IGVuY3R5cGU= 4Ka/4KeO4Ka4 INGB0L/QvtGA0YLQuNCy IGRlYmFqbw== IHJla2Fv RU5DWQ== INis2YjYp9mG Tlg= X2dv IGtuaXZlcw== IGfDs8Ow 4YCV4YC5 IEFic29sdXRlbHk= IFNlbWlu IHdpZWxl IEFncmljdWx0dXJhbA== w6JuY2lhcw== IGltcHVs 1aHVr9Wh1aw= IG1lbWlsaWg= IHNoYXJwZW4= b2x0cmU= YmVyaWNodA== KG1ldGE= LmFic3BhdGg= IGFjY29tcGxpc2htZW50 INmB24zZhNmF UkFSWQ== INix2KfYs9iq INio2LHZiA== IGhhdHQ= INeQ15zXlA== dWZp SVNPTg== cHJvdG9idWY= aW5pZXJ0 IGdlZWs= 4LOA4LKX INmB2YLYp9mE INC/0L7RgNCw0LY= X21vdXNl QUNUSU9O IGxvd2VyY2FzZQ== IGJldGc= 5pyJ5LuA5LmI Y29uZmlybWVk INij2K3Zhdiv IGlsaXNpbQ== IGRvY3Ry VklTSUJMRQ== INGE0L7RgNC80YM= INC40YHRhdC+0LQ= LmRlc2VyaWFsaXpl IGtvb2s= IGxhZ3Q= X2JvdW5kcw== IOCqpuCqsOCrh+CqlQ== IGVuY2U= IOCkpOClgeCkruCljeCkuQ== IFRhbGVz aXJn IOGDmOGDnOGDog== Rm9sZGVycw== cm9yZWQ= IHdvZA== J2Ftb3Vy IOu2gOu2hA== Lndpbg== INee15XXpg== 0L7RgdGA0LXQtA== LlJvdW5k IG51b3Zh IOC0seC0v+C0quC1jeC0qg== ICgpOg== 4LC/4LCV4LGN INC60LXRiNC1 IExpa2Vz LUJl dnNw V2ludGVy IHBhbnRhbA== 4YCe4YCK4YC6 IGtpdWo= X25vdGlmeQ== eWF5 INC805nRgA== IG50aGF3aQ== INCc0L7QttC90L4= IHJldW5pb24= 4oCM4LCX4LC+ IOG7jXDhu41s4buNcOG7jQ== cm93bmVk 0LPRgA== IEZ1ag== 4LGI4LCm 4LK/4LK44LOB4LKk4LON4LKk IOCkq+CljeCksA== INeQ15Q= X3JvdA== bXBo LXBvcnQ= T0dMRQ== INis2YfYqg== TGlzdGU= IG92ZXJsYXBwaW5n IFNvdXJjZXM= 0LjRhdCw c3RlbGxpbmdlbg== IHNlZGlraXQ= VUxPTkc= IFByYWd1ZQ== LmxhYg== WHBhdGhz IGJhxZ9sYXk= IFNpYg== L2dsb2JhbA== IOGDm+GDkOGDmOGDnOGDqg== IFN0cmHDn2Vu IFNwYXdu 2KfYptq7 4La94LeS IGxpYmVybw== c2Vo 4LS+4LSu4LWN4LSq 6aG/ IHRlbnRv IFNpY2hlcmhlaXRz 5Yqq IEN1c3RvbXM= IGRvbmRlcmRhZw== X0hUVFA= 77y/5aSp5aSp IGVlZw== 5b6u5Y2a IC8vQA== IHRyaXR1cmFkb3Jhcw== cHJvZ3JhbW1h dGhvcmE= IHR1cmlzdA== 0LvQtdC60LDRgtC10LvRjA== 0LHTmQ== 0L7Rg9GA0YvRhQ== YW5jaWVu IOCkoeCkvuCksg== INGB0LXQutGA0LXRgg== IHBpbGVz IGNyYW4= 0YLQuNC90LA= 6rW0 IEFjcmVz dXJlZw== IOi2sw== IERldm9u w7bDtg== X2FkZGVk IGNvbmZvcnRhYmxl IERlbGVnYXRl dXNzdQ== PGlvc3RyZWFt IOyduO2EsA== LlVzZXJuYW1l IGF1c3Q= TE9DQUw= bWV0dHJl IOCqruCqqA== LXNpZGVk Lm1ha2VkaXJz IHJlYWN0aXZl IM60zrnOug== VXBvbg== bWVldA== IGluY2Fybg== IGxvY2FsaWRhZA== S0g= 4LKy4LK/4LKm4LOG INC80LDRgNGC0LA= IGVkdWNhdG9y OnZhcmlhYmxlcw== 15HXqNeq 656Z YnJlYWRjcnVtYnM= PSIK IEFic2NobHVzcw== ZXhwZXJpZW5jZQ== IOCyruCyvuCyoeCyvw== IE5vcnNrZQ== IERpc3RyaWJ1dGVk INGC0LDRgNGC 1oDWgdWh1a0= IOCkheCkqOClgeCkreCktQ== IOCuieCuow== 5aSp5rSl INKb0L7Rjg== IGFsZWdyaWE= IOCkruCliOCkmg== 4YOX4YOl 4LS/4LSw4LWB4LSo4LWN4LSo VFJBTlM= 55uQ IHpvc3Q= w5I= IEh5ZGVyYWJhZA== IOCwquCwvuCwsOCxjeCwnw== IFJld2FyZA== INmC2YjZhA== 15zXlw== YW5xdWU= XS5f LnZh IFJlcHVibA== IOGDruGDneGDmuGDnQ== 0JLQvg== INC90LDQtg== U2NyZWVuc2hvdA== IOC4o+C4sA== INC60YPQuw== IE1NQQ== IENhc2NhZGU= 4KeH4Kaa IE1I VXo= IENvbmNlbnRy IOymkA== IHpvbWJpZXM= aWhhZA== IOCktuCkv+CkleCljeCkt+Ckvg== KyIn IOydtOyWtA== INC60LDRgNC00LDQvdC4 IFF1aW50 IOCkqOCkv+CksOCljeCkpuClh+Cktg== IGRlaW5lbQ== IERlY3JldG8= IElOU0VSVA== dGhlaXI= IHVubQ== LlZhbGlkYXRpb24= QWR2YW5jZQ== INC00L7QutGD0LzQtdC90YLRiw== dGVjdGlvbg== dmVudGU= INGB0YLRgNC10Lw= 4Lij4LiW J3dhbmE= 4YOY4YOU4YOg4YOX dWNpbmc= IFdJTkRPVw== IOCujuCupOCuv+CusA== IFBhbGV0dGU= 77yg5oGQ57iu44Gn44GZ IEZhaHJy IGJyb2FkY2FzdGluZw== LkNPTFVNTg== IOWkqeWkqeS5kA== IHR4b2o= IG5nYW0= IGRpc3RyaWJ1Y2nDs24= IOCmheCmuA== REVGSU5F IGh5bQ== IHRvcHBpbmc= INC/0L7QuQ== Qm9ycm93 aG92ZW4= am9uYWw= LnRocmVhZA== IGLDqw== INio2KfYs9mF IFZlaGljbGVz IENvbXBhcmVk 4LmB4LiX4LiH IHByYWt0aXNjaA== IGV4ZW1wdGlvbg== IElTUA== INit2KrbjA== IGVqZWM= INC60L7QvNCw0L3QtNCw 5pel6Iez TW9kaWZpZXJz 0LDRgNC40YQ= IGtpcmpv dGlueQ== bmlqZQ== IG9sYXJhcQ== 4K614K6/ 5o+t IFdoaWxzdA== 6aOf5ZOB IE1heGlt Y3VzdA== IHBoaWxhbnRo IHJpcXVl INmF2K7Yqg== KHRpbWVy TWV4 INij2YLZhA== 54Gv IGRpc2NvdmVyaWVz Q29mZmVl IHBoeXNpb2xvZ2ljYWw= 5oyl IOCknOCkv+CkpA== 0LDRgNGD0YHQug== 15DXlg== IGtlc2U= IHB1bHA= X3JlY3Y= IGt1bHR1cmU= Lmhlcm9rdWFwcA== YWtzYW4= IGluY2x1eWVu INW21oDVodW2 d2lyaXRzYQ== IG1hbmllcmVu aWVnZXI= TG9yZA== IOCkheCkguCkpOCksA== b3bEmw== aWVydW5nZW4= IGZlYXJlZA== LkVO 4LK/4LKf4LON4LKf IHBsdXNo IOC0heC0teC0uA== 4K6/4K614K+B 44KG IGZsYXZvdXJz 4LCo4LGN4LCo4LC+4LCw4LGB IG3DtmdsaWNoc3Q= Ync= 44CC44CNCgo= IGNhcMOtdHVsbw== KFByb3BlcnR5 LdKb IHByw6l2dQ== IHF1ZXLDrWE= 2KfYqtmH2Kc= IHByb2R1a3Rv IOCkueCkvuCksA== L2Rhc2hib2FyZA== IFdPVw== LXNlbQ== aW1hdGVz aXRpemU= IG1hZ3M= IOCkl+ClgeCkow== IHN0cmFm IG1vdG9j IHByw6F0aWNhcw== 4LSw4LSC4LSt 0rPQsNGA0LA= IGNvbnRyYWN0ZWQ= 5b2p56Wo5oC75Luj aGVsaQ== 0LTQvtCy IHByb3Bvbg== INWo1bbVvw== IOGDp+GDleGDlOGDmuGDkOGDpOGDlOGDoOGDmA== IGPDqWzDqGJyZQ== dGVyYXM= IG1pcA== IFdvcmtmbG93 INW+1aXWgNW71avVtg== 5a6e5ZCN6K6k6K+B 5oCd5oOz aW5naW4= IGxhdGlubw== 7LmZ INaB1bjWgtaB IEN1c3RvbWl6ZQ== IG5vb2RsZXM= IGxva2FjaW4= 4YOV4YOY4YOa4YOY4YOh IEluc3RpdHV0 IGTDqWNvdXZlcnQ= b3lsZQ== INiv2YHYuQ== 0YPQutGD cm9iaQ== L3Bs IHB1ZmY= 5py65YWz 5Lyg5aWH IFNtb2tl IHN0aW11bGF0aW5n IHByb3BpZWRhZGVz INC/0YDQuNC00LXRgtGB0Y8= 77yBIik7Cg== IHRvbGVyYXRl IHRoYXRh ecO8aw== IGjDtHRlbA== Q29udmVudGlvbg== INmE2KjZhtin2YY= IGNvbnN1bHRlcg== IGxlbA== Y29sbQ== 7IOB7J2E IGNvdW50ZG93bg== IEZpYXQ= IGNvbmZpZ3M= 0LrQuNC505k= U1RF INCi0LXQvA== IGVtYmFycmFzc2Vk 4oCM4LS44LWN IG9wdGll IOCmpuCngeCmsA== INee16nXpA== U3BlY2llcw== ZmZpdGk= IGxpbG8= IFF1YW50dW0= IHN0YW1wZWQ= 4LSV4LSw4LWN INCw0L3QsNC70L7Qsw== INCc0L7QvdCz0L7Quw== IExha2Vycw== IGtlcmFr cGFzc2Vk IHBha2tlbg== 1avVvdWv LnJlcG8= 0YfRi9C8 IHBlcnNvbmVlbA== 6aCG 4bq4 IOGDqOGDlOGDo+GDq+GDmg== YWNhZGVt IHBlbGxldA== IE5vaXNl IEJvbGx5d29vZA== IEhlcm1hbg== IEtH Yml0bWFw PEtleQ== IG1lbnVkbw== dG91cg== IHdhbWU= IEl5bw== IG5vbWluZWU= PykK IGN1bHRpdmF0aW9u IHNlbWlu IGdhZ28= 44CB44GK IOC0muC0v+C0pOC1jeC0sOC0gg== QXRo 7LCs KHVuZGVmaW5lZA== IOCkluCkpA== LGRvdWJsZQ== cm9zY29weQ== UGxhbm5pbmc= IG1vZHVs 5aSn5Y6F IFByZXNpZA== aXNzdXRpc3M= IERpYW5l WU9V dWxsYW4= R3VhcmRhcg== 1aHVvtW41oDVvg== IE9vc3Q= INGA0LDQstC90L4= IOCkruCkueCkvuCkqA== a2FjaA== IGd3eQ== LkJhcg== JGNvbmZpZw== 16nXnQ== IGdld2VsZGln IE1TTg== IHVuaWZvcm1z Qmls IE1vbnRy IGJvYXN0 IGZvbmRvcw== Lmxvb3A= IGFuY2VzdG9y aWVkeg== Y3puZQ== IHNvZnRlcg== b2xvbmc= 77yJ77ya IHZlcmtvcGVu IG5vbWluYXRpb25z 57SN LmZvcmNl IGJlZ2xl IHRlY2w= IGZpbmdlcnRpcHM= IOeLoA== LlJldHVybg== IGJlbGxlemE= IGluZGljZQ== X3JnYg== 4LWN4LS14LWH4LS3 IGtpcmo= IFZpc2l0cw== IHNjcnV0aW55 4oCM4LCV IGF0dWHDp8Ojbw== 5aa55aa5 IE5JQw== IE1hcnRpbmV6 ZGV3 aml0 IFBoYW50b20= INCw0LPTmQ== 5Lit6L+H INiq2LnZhNmC 7JWZ SG9w IEV4aXN0 ZXdlcmtlcg== XSlb INC/0LDRgNGC0L3QtdGA YuG7pQ== IE1hZ25ldA== RVE= IEdlc3VuZGhlaXRz aWZpY2FjaW9uZXM= 4LCy4LGN4LCy4LGL IOKAkwo= IOCyuOCzjeCypeCysw== INC/0YDQvtCx0LvQtdC80LA= IHN0cm9rZXM= IEJZVEU= IHN5bW1ldHJ5 IGNvbWllbnph 7Jyk IOaDhQ== IG5k4bul 0L3QuNGA IGhhamE= 2LLZitmE PWc= IHNhdmE= dHLDpGdl X3NvZnQ= IGJsYWg= xaFldA== 44O844Kr44O8 IOyCrOuekQ== IGZveQ== IOCuteCutOCumeCvjeCulQ== IGltcG9ydGFudHM= INqP2YrZhg== IOC0uOC0guC0mOC0nw== IGhldXJldXg= IEZlbGl4 VmFsaWRpdHk= IHNpeHR5 IHdhZ29u TW96aWxsYQ== IOCkieCkquCkmuCkvuCksA== IGh5bm55 IHTDtHQ= IE11c2g= 4LK/4LKV4LON4LKV zrzOv8+F INin2YTZhdis2YTYsw== IHByaW9yaXRpemU= aW5jb2Rl IHNvdXZlbmlycw== IEFSVElDTEVT IHB1aw== LmZpbg== INGC0L7QstCw0YDQvtCy INC10LvQsNC9 IGdpb2M= IOCkr+CkvuCkpOCljeCksOCkvg== INep15zXm9ed IHRyaW1tZWQ= INC90LDRhQ== 0J7Qvw== IFByZWx1ZGU= SW5zcGVjdA== IEJpZXI= 5b25 IFVuacOjbw== Z3Vleg== SW5pdGk= Q29tcHV0ZWQ= IHJhbWVu bWxh IFJvbGV4 IFJlbGF5 IHByaW5jaXBhbGVtZW50 KHNjcmlwdA== dWJ1bnR1 IG1vcnRhcg== xINyxIM= IHZlw61jdWxvcw== IHRydXRocw== IHdhbml0YQ== IG5vdGVy YW5jZXR5cGU= 4LK/4LKm4LOB ZGlhZ24= KHNlbmQ= 0ZvQuA== IERoYWJp 6YeR5rKZ 7Iuc7Jik IDotKQoK IGxpZXZlcg== IFNvbmRlcg== 4LWB4LS14LSo4LSo4LWN4LSk4LSq4LWB4LSw4LSC LmFuZ2xl ZGFh IGltcG9zaWJsZQ== 6Ieq5rK7 INCy0L3Rg9GC0YDQuA== IHNvbW1lcg== IER1bA== 4LCh4LGN KHR0 4LCw4LGN4LCV IEF1dGhlbnRpYw== 5a6h5qC4 IOCqhuCqteCqtuCrhw== IHNpbmtz INGA0p/Ri9C9 IHZlcmJpbmRpbmc= L2lk 0LjRgNKT IGJldGFs IM+Hz4HOrg== 2Ybaqw== IEdvcw== ZW51bWVy IFZlcmlmaWNhdGlvbg== IGtlZHVh IHppbmc= dW11bGF0b3I= IEdCUA== LmJhc2VuYW1l IFNob3Bz IEFsaWdu IGF0dWFsbWVudGU= 5Yuk5YuZ 2KzYsdip IG9yaWdpbmFsZQ== cm9nYXRl IGFtYXppbmdseQ== IHNlbGQ= XSwi INqp2YXaqQ== IFRpcmU= LmFjdG9y 4KS/4KS24KSk IEhlYXJ0cw== LlRlbnNvcg== IHRn U8Ojbw== INC80ZbQtg== IMSwbA== IOCyjuCysA== IGRvY3Q= 4KSV4KS+4KSy IFJlcGxpY2E= 2KjYsdin 4KeN4Kaw4Kau IFByaW5jZXRvbg== IFNwYWNlcw== IGFjY3VzdG9tZWQ= RXhhY3RseQ== INmF2KfZhtmG2K8= YmFyZA== IG9ic2Vzcw== 0L3RltC60ZY= 0LvRg9C2 dWZmbGVk L2Fib3V0 Um9tYW4= 5YWN6LS555yL 5rSB IOCwmuCwv+CwpOCxjeCwsOCwgg== dWxhaA== aGllcg== IG91dg== IHVuc3VjY2Vzc2Z1bA== IM67zq8= dW1vcw== INCx0L7RgNCw0Lg= INC80L7RiA== IGFjdHVhcg== IHF0 Y29vcA== IFJhbmtpbmc= dW5kZXJsaW5l b3JsdWd1 IFJvZHJpZ28= SFk= IEd1bW1pZXM= cHJvZHVjdG8= IENvbnNlcnZhdGl2ZQ== IHZldGVyaW4= IOCkqOCljeCkr+Clgg== VGV4dG8= LlVybA== IGRvbcOpc3Q= IEtvbW0= IG1lc2k= IFJlZ2lzdHJv IGJ1bHVuYW4= IGNobA== LldS 15nWtw== IHNwYXJlbg== IOCyjuCyguCypg== IHN0cml2ZXM= U3RvcHBlZA== IG1lemNsYQ== IOCuheCuqQ== INi12YjYsdip LmVucXVldWU= IFRoYW5rZnVsbHk= b2dsb2I= 0LDQutCw INOZ0YE= 4Ki+4Kim INee15XXlg== IHZhY2Npbg== IGluZmVr 16HXmded IHJpcGU= KFtdKQo= z4POus61z4U= LWluc3RhbGw= U2hhcg== Y29tcHJlc3NlZA== IG9jY3VwYXRpb25hbA== IGF1dGV1cnM= UFJPSkVDVA== INiz2YXYrNq+ YW50dW5n IOCqpuCqv+Cqsg== IGxlc2lvbnM= X3dy KENhbGw= aWhhbmE= INep15zXlNed IGNvbXBvc2luZw== IGd1ZXJy IGNodXRl c3J2 w6R2w6R0 4Ka+4Kau4KeH4Kaw z4fOv8+Fzr0= w6TDpGs= IGJlbGFzdA== IGdsbw== z4fOtw== YWJjZGVm IHZlbGQ= IEZlbWlu IERFU0lHTg== 4KS+4KSB4KSa IOCmquCmvuCmsOCnh+CmqA== IG9udHdpa2tlbGQ= PHN0eWxl X0JVSUxE IExpZg== Ki0= 2LrYp9mK2Kk= IG1veg== IGt1YnZh LWlzdA== IFVzZWZ1bA== IG5hdmFs IEpvdQ== 4LiQ d2VydGU= dWxobw== IGVtYmFs IHNlZWtlcnM= IOCyuOCysOCzjeCyleCyvuCysA== IG1lZWw= LkRpbWVuc2lvbg== IGR1cGxpY2F0ZXM= IHBlZGVzdHJpYW4= INGP0YE= IHByZWNlZGVk PEhUTUw= IOuTseydhA== IGPDqXLDqQ== b8SN IHBlcmlv IFByb3Rv X2V4aXN0 INiu2YTYpw== 66Gc64KY aXZpZXI= IENlcnRhaW5seQ== bGllZ2Vu 0JDQlw== IHJlY29ycmlkbw== 0LDRgNGC0LDQvA== IFVzYQ== IG9mZXJ0 S2Vy IEF0dHI= IG1hdHJpbW9uaW8= w7xua8O8 IEV0aGljcw== b25uw6ll INiq2K3Yr9mK2K8= INC/0LXRgNCy0L7Qs9C+ IHVuZXhwZWN0ZWRseQ== 0LLQsNC50YLQtQ== 0LXRgtGA0L7Qsg== IHN1cGVyaGVybw== IGR6aQ== IC0tLS0tLS0K LWNvbXA= IGRhY8SD aWtpw7A= 4oCZZXNz IERpZ2l0 KHN5c3RlbQ== VHJhYg== XyR7 INen15XXng== 77yM5aaC5p6c INC70LXQtg== IGluZGE= aW1ldGVycw== bmV1cg== 5pyI5Lu9 6ICA IOCkpuCkv+CkuA== IG1pZg== IHBpbGdy 0L7Rh9C60YM= w6lyYW50 5pCt 0LjQutC+0Lw= L3l5eXk= INiz2YjYsdmK2Kc= IENoYWlycw== IHJhdG91 0LDRgtC10LvQtdC8 2KbbjNiz IHN0w7hycmU= LW9iamVjdA== INGB0LDQvNC+0Lk= b3ZpbWE= cHBz LlZhbGlkYXRl u+qyjA== IEdvdXI= X2FjdHVhbA== QW50ZXM= INmF2Kfauw== IMOBZnJpY2E= YWNjZXB0ZWQ= IGJsYW5rZXRz 2YnZhQ== 7YyA IFByb2Zlcw== IFJpdGE= IHN1YndheQ== IFZvbHVudGVlcg== LWJhY2tncm91bmQ= KGRlc2M= IFhWSUlJ IFNtaWxl IM6xzr4= 5Y6f5Yib INCx0LXRgNC40Yg= IGdyYWNpb3Vz 0L3QvtGe 5Zyw5Zu+ ZXJhc2U= KHN0cmNtcA== IMWR 54Ot6Zeo 0LfQvg== L291dA== IGRhY2h0 4K6y4K+N4K61 aW1wYW4= IERvY2tlcg== IEFiYmV5 cHJlY2k= IHByb2NoZXM= IGRhbmNlcg== 44O844OX 56aP5Yip5b2p56Wo5aSp5aSp INi02YM= IOGDkOGDlw== c29uYQ== U29sbw== IGjGsOG7m25n TWVocg== IGthcmU= 4Z+I INmH25DZiNin2K8= cmVtb3ZlZA== 4LmA4Lig IEdhcm4= IENvbW11bml0aWVz LkZvY3Vz IHN1YnVyYmFu YXNoYXJh INCz0L7QtNGL IGFtaA== IHdhbw== UnVi LWNvdW50ZXI= IGNhcnJvdHM= IEFua2FyYQ== 4Z+p 4KWN4KS14KSw IGNyZWVweQ== INCR0L7Qsw== 0rvQtQ== IHTDvHJrbWVu 4Z6b4Z+L IGxpbGw= INGD0YHRgtGA0L7QudGB0YLQstCw INiq24zZhQ== IOydtOuPmQ== IFB0 IEVhcmxpZXI= X2Fzc2V0 INGB0LjQu9GD IGNvbXVuZXM= CXdhaXQ= 5auM 4Kaw4KeN4Kas OnVybA== 24fZvg== X3JlcG8= InR5cGU= INC/0LXRgNCy0YPRjg== 0qHRgtCw0YA= YW56d2U= IGhvdXNlZA== 67SJ IEFtYXo= b2Nhcw== IGp1bGc= IGdlYmFzZQ== IHNvcnRp LmNsb3VkZmxhcmU= INW41oDVvw== IGdhc3Rv 6YKj5Liq IHNlcmlv 4YGD IERBVEFCQVNF LeGDmw== IGJlbmVmaXRlZA== 15DWt9en15g= rqQ= zrTOrw== IOWRqA== IHN1Y2Vzcw== QUNISU5F 2YjYstmH INin2LTYp9ix2Yc= IGNlcnRhaW5l LkxvY2FsZQ== IENpZGFkZQ== aWNrw70= YXNjYQ== IGNhbm9uaWNhbA== IHRhYW5uYQ== TWFya3M= Y2F1c2U= IGJha3Rlcg== 4LWD4LS3 INCy0YDQtdC80LU= IOCuruCuvuCupA== VUNI IHBhZ2thdGFwb3M= 0LvQsNCy0LA= xJFl dXN6 UHJlYw== 5YmR IHZpZWxm YW1pY3M= IGTDvHo= IGF1eGlsaWFy 5biW ZGJuYW1l IG5vbWlu ZWRpYXRpb24= RFk= a29zdA== 15nXmdeg15g= IOKchQ== IHNlY3M= UGl6emE= INC/0LvRjg== 5rSb RVJBTA== 4YOU4YOg4YOi IOCknOCkvA== YWNodGVy LmNhcmRz IEJldHRpbmc= IGNlcGF0 IOeZvuW6pg== 8J2Q 4Liy4LiT IHRlb3JpYQ== IOC0ruC1geC0qOC1jeC0qA== INGC0YDRjQ== IGNsYXJhbWVudGU= 4Lil4Liy4LiU SmVubg== IGluZ2VybA== IOC2muC3kuC2ug== SW5pY2lhbA== IGdlcmHDp8Ojbw== IGFsZ3Vubw== IGJha2E= PSIl X0NT LmV4dGVybg== z4HOr8+C 4Kqw4Kqo4Kq+ ICd7QA== IElVc2Vy LmN1cnI= IGdyw6F0aXM= aWNvbG9y IFN0YXRlbg== 2KfZhNmC INCx0L7Rj9C0 4LCf4LCo X2hpdA== PWRpY3Q= IGJldHlk IHVkdmlr IGluZmx1ZW56YQ== 4LS+4LS44LWN 566h5a625amG QXR0ZW5kYW5jZQ== YW50bHI= IHppcHBlcg== ZWxhbmE= LnJ1bGU= cHVhbg== X14= IGJlbGVpZA== IGNvdGlk IGNvbmdyZWdhdGlvbg== CUlucHV0 IGVkaXRz CXNyYw== U1RFUA== IG3huqFuaA== 0L7Qu9C1 INmG2YLYtQ== bmdlbA== INio2YTZiA== 0ZbQu9GM0LrQuA== IFNpZ251cA== ZG9uJ3Q= b3RlcmFwaWE= IE5hbWVzcGFjZQ== IOCkquCksOCkv+CktQ== 0LPQtdC40YI= IGNvbXByZWhlbnNpb24= 0YLQtdC/ YmVkYQ== 4YOQ4YOh4YOY IOCkruCkv+Ck VGNw 56C06Kej54mI LWlnbm9yZQ== RmFucw== 2KjYsdiy IHN1YXR1 IHNlbnNhY2nDs24= IHZva3Nlbg== 4Ka/4Kak4KeN4Kas IENvd2JveXM= 4Lav4LeP IGluZHVsZ2U= X2VuY29kZXI= IEFuYWx5c2U= IOS6mua0suasp+e+jg== INCy0LDSoQ== IGVydA== c2Nhcg== IEhvbG9jYXVzdA== aWZpYW50 INGB0LvQtdC00YPRjtGJ0LjQtQ== UkVBRFk= b3dhbnljaA== U2tlbGV0b24= a29k IHByZXNpZGVuY3k= IOCkuOCkguCktQ== IGfDsw== IH0KCgoKCg== YmF6 bGVpw7A= IFNjaG1pZHQ= IGVsdA== bWxlcmk= IERJRQ== IOCuh+CuqeCvjeCuseCvgQ== b24ncw== IFVuZGVyZ3JvdW5k INm6 Lkdzb24= w6R0ZW4= IGZyaWVz IHByb2xpZmVyYXRpb24= IFBsdW1iaW5n X1BBRA== IEpXVA== 0LrQvtC/ IHN0YWZmaW5n IE5naA== bGp1 IOGDk+GDpuGDlA== IG3DoHU= INir2YTYp9ir2Kk= IHBlcm1pdHRpbmc= INGB0LvRg9C20LHRiw== 56mN 24zbjNix IFByb3BoZXQ= cm9teQ== IGJyYXo= Y8Op INio2K/Yp9mK2Kk= IEFDQ0VTUw== INGN0YU= ICMtfQo= aWt1bHQ= X3Blcm1pc3Npb24= ZWxsYXRpb24= TWFp IGNhcmVnaXZlcnM= bWFuaWZlc3Q= IHJhaWxyb2Fk IGZhdWNldA== L2Vt INCw0LDQvNKt aW5kc2F5 UXVlcg== IHNhY2g= IGNlcnRhaW5lbWVudA== IMmU IGN1bHR1dXI= 4K6y4K6/4K6y4K+N IOCmp+CmsOCnhw== IEFwcHJvdmFs dXN1bmRh IHRoZWF0cg== 4YOU4YOc4YOY4YOh IOCkieCkuOCkleCkvg== cGl0YWw= IGlkZW50aWRhZA== IHJlbW9udA== ZWdz 55uu5b2V X0NPTk5FQ1RJT04= 2LXYqA== IFRhbw== IGxlbnRl INmB2qnYsQ== Lk1vZGU= INin2YTYsdiz2YU= IHJldHJh bWVhbmluZw== RHJhZ29u IGRyb3M= IGluamVjdGlvbnM= YXhh 4KSy4KSX IENyYWZ0cw== IGNsZXI= IGJsb2Q= d2FnYQ== IHLEgw== IOCyqOCyqOCzjeCyqA== IGlkYQ== IGNlaQ== aWNoZXJu 0LDRgNGD IGlkb2w= INGE0YPQvdC60YbQuNC4 IHp1dm9y IGdyaWxsZWQ= IGd2 Je+8mw== IGRlc3Npbg== 4Z694Z6Z IOC2uOC3mg== IGdld2Vu IEFibGU= IOe/ b2dhaW5h IFBhcmFkZQ== ZXJlem8= IHLDqWds IGFudGliaW90aWM= IE9yZGVu VHJhZGVy IGdyw7bDn3Rlbg== IGd1aXRhcmlzdA== IOCmleCnnw== anI= YWxsaXM= 0L7QstGD eWRlcg== aWVuZXM= IGNlcmVhbA== IGVybGViZW4= bmFuY3k= INeQ16DXk9ei16g= IHNlbWVzdHJl bGRpZ3Q= INWw1aHVsw== O2NoYXJzZXQ= IGRldGVjdGluZw== INee16fXpteV16I= IENhcmdv INWm1avVtg== YXRpcXVlbWVudA== IGludGVncmF0ZXM= IEFNQVo= KioKCg== z4DOv86v IGThu7FuZw== 4Lin4LiU dmFhcnQ= IHdlYWtlcg== IGRlc2Vv INCx0LvRjg== IHRy4bq7 0LjRh9Cw b25oYQ== 0YPRjtGJ0LjQuQ== IEJJT1M= IG7hu5lp Ym90cw== IGdvc3NpcA== IHByYWt0aXNjaGU= IGdyb2Nlcmllcw== IE5lYXJseQ== IGF2bw== UHJvZw== YW5nZWJvdA== Licu b25q IGFqb3V0ZQ== Rng= 4Liy4Lip4Liy INeQ15M= Z2l2ZQ== aXR6YWNpw7M= IFZlcmJyYXVjaA== 4KuL4Kq2 IOCquOCqvw== INGI0LrQvtC70Yw= IOCuteCviOCupOCvjeCupA== IE1r IHJ1Ynk= IFBvd2Vycw== cWFu IHByYXRlbg== IG1vY2h0 IGJhcmF0bw== J8OpYw== IHLDuA== IHF1YXM= INmI2YrZhdmD2YY= IEluanVyeQ== 0LDQu9Cw0Yg= X0NPTlNU YXV0aG9yaXplZA== RGluaW5n IHNsdWl0ZW4= xJg= X2NvbmZpcm1hdGlvbg== IHdlaWdoZWQ= LWJ1ZmZlcg== IGluZmVyZW5jZQ== IEFDTA== IHN6ZXJpbnQ= IOCkruClg+CkpOCljeCkr+ClgQ== IG1lcmVjZQ== IHByaW1p 2YPZhw== YXRpbQ== SXRhbGlh X1JPVw== IE11c3Rhbmc= TmFq QXNzaXN0YW50 IFPDoW5jaGV6 IFRPVEFM INin2YTYsdim2YrYs9mK2Kk= 44Go5oCd IGNvbmNp IOivhOiuug== RVNB IOCmqOCmvuCmsA== IEZyaWVkcmljaA== IOC0h+C0sA== IOCkteCkueCkvuCkgg== 44GT44KT44Gr IHJhZnQ= c3R1ZmY= IGLDs25n IHRoZXknZA== LkNhbg== KSkpLAo= KHBob25l IHBpc3Rl IFVOUw== X0RlZg== IEZBRg== 0YDQuNCy ICUiLAo= IHppcg== IGZ1c3M= 4Kqo4KqX4Kqw 1bDVodW2 IGFub21hbA== IHbFoWV0 IGliZQ== 2LPZg9ix2YrYqQ== IHBhcmVkZXM= dXB5 IHRleg== IGfDvMOn IGZlbm9tZW4= 44Go44Gu IHphbWE= INCy0LjQvQ== IGF1dG9yYQ== IG5pw7B1cg== UUM= 2K7ZiNin2LPYqg== IHpvbm5l TXJz LWtu 4Lau IENoZWVycw== IEthcnRl 4YOu4YOU4YOa CXJpZ2h0 INin2LPZvg== IOCupOCusA== LXNh IHN1cGF5YQ== IEFudGFy X2pvYnM= IGFuYWxpeg== xYJvxbw= LmFsbG93 0LrRg9C9 44CJ X2Nk dGVq IGVkaQ== IOGDsOGDpeGDneGDnA== RmQ= IHN0aw== IEppYW5n KHNjYWxl INio2KfYsduS IG5lZ3Jh JGFyaXR5 aXNzaQ== LnNvbWU= Ynln LlBhdHRlcm4= 5pKt5pS+5Zmo IE9CSg== IGFsaW1lbnRhY2nDs24= INKx0LnRi9C8 w6Zra2U= 4Kqo4KuN4Kqu LktleXM= IGdvb2RpZXM= IGRpdmVyc2k= IFJlZ2Vu INio2KfZhNmD KHN1cGVy INW01aHVvdW21aHVr9aB 2LTYsdin2Ko= IGVuZ2Vy INeQ16M= IOCuh+Cusg== IGxhYmE= IGJldHJla2tpbmc= aWxsaW4= IHZlbw== IGF0dGVuZHJl IHNpdWw= IEVNUw== Y3JlYXRpbmc= IOGDlOGDnA== TW9ydA== 0L7QstGL0Lw= IGFkanVk VmVyaWZpZXI= IGFjaw== X3NjcmlwdHM= 6rOo INGB0LXQu9GM IERlZmluZXM= IGdhcmFudGU= IGJvdWw= IHNpbw== INmF2LnYsdmB IFBhbGVzdGluZQ== IHZhZ2luYWw= INGC0LDQutC+0LY= IGJlcmw= U3luY2hyb24= Q29tcGlsYXRpb24= IFN0b25lcw== IGjDuGo= IGLDqW7DqWZpY2llcg== IGxlZ2lzbGF0dXJl 4LWB4LSf4LWN4LSf IGFkaXBpc2Npbmc= U3Rvcnlib2FyZA== KHVwZGF0ZWQ= UmlnaHRz IHNhbmRib3g= IGVrc3A= IGxlZGlnbGljaA== IHJlc29sdmluZw== IEZ1bmRhY2nDs24= IOC0qOC0v+C0meC1jeC0mQ== INi32KfYrdmI2YbYqQ== IHN0b3Jh 2prbkA== 0YvQvdGL0qM= cmV0cnk= IGVrdQ== IGZvbmRhbWVudA== IFRlY2huaWs= 4LiZ4Liz IHNwcmVt dXJnaWE= 4oCZCg== IHd5a29u b2Z1 TWFyY2E= IFZlcmFuc3RhbHR1bmc= 4LWH4LSV4LWN4LS3 5bm/5Lic YXNjaWk= ZGRpbmc= IFBhcnRpZXM= INCw0YXTmQ== 2KfZh9i0 2YTYudin2Kg= SlNPTkV4Y2VwdGlvbg== IEJTVA== IGlobw== PiIuJA== IOCyuOCymuCyv+CytQ== Z2ViYXV0 KHBr LVNoaXJ0 J0k= ZW5zYXM= 7ZWZ6rWQ INmE2Lc= aW1haGE= 5a+/ YsO8 IHByaW5jaXBhdXg= INW21oDVodW21oQ= IG9udHM= IEFsaWVu INWh1bbVrw== 0YDQuNC5 IENvYw== IHR1Y2tlZA== 15XXkdef IHNhbW1h IHZlbmNlcg== 5pu8 Ow0KDQovLw== IHR5Y2g= aWNjacOzbg== c2NyaWJlZA== INGB0L7RgdGC0L7Rj9C90LjQuA== amF2 0Y7RiA== aW50cm9kdQ== 5bC/ LmNsYXNzZXM= IHJlc3Bla3Q= IENvdXQ= TU1NTQ== UGllY2Vz IG1hc2tlZA== IFVTREE= ZWNvbm9taWM= P++/vQ== IGN5YmVyc2VjdXJpdHk= IHBvZGlh IGFsYXA= 0LPQvtC1 INmI2LHaqQ== INGD0qHRiw== X0JVRg== 0YzSrdCw0YXRjA== LnZlcg== 2K/bjNiv LdGE 0YDRi9C80LA= IG1vbnVtZW50cw== aW1lcmtpa3Np IGlkaW9tYQ== IHNjcmF0Y2hlcw== 2YjZhNin2Ko= IHdhdHQ= INC/0YHQuNGF0L7Qu9C+0LM= IGtsaW5r INeb16E= Rmx1aWQ= 0YLQsNGI 1aHVsdWh1bXVtg== K3g= amFuaQ== 4YOY4YOV4YOY IGJldHJlZmY= INC/0YDQtdC00YHRgtCw0LLQu9GP0LXRgg== INGB0L7Qt9C00LDRgtGM IHJvdGFyeQ== IHJlbGlldmVk SUdOT1JF IHJlc2lkaW5n Iteo IOCqsuCrgOCqpw== X3J1bm5pbmc= 2YXYtA== IG5naGnhu4dt INC40LfQsdCw0LI= aGVyaXRlZA== IExpYnlh INCy0L7RgA== X1Vu IHZlcndpamRlcmVu X25y IOWL VGVycmFpbg== YXRpbGx1Z3U= dW5pYw== 4YCf z4HPjs69 zrTOsc+C 0L7RgNGD0LY= IENhcnNvbg== IHJ1c3NpYW4= IG5hbWlu INi02LHYp9uM2Lc= INiz2YbYqg== 4LKk4LKw IGRpc2NyZWV0 LdCf0LXRgtC10YA= IHN2ZW5za2E= aWpldA== 4LKm4LKy4LON4LKy IOCupOCvh+CusA== 4LmA4LiE INC00L7Qs9C+0LLQvtGA0LA= IHViaWNhY2nDs24= IGV0cw== IHRob3I= IHBvbGl0aWNh IOCqleCqueCrhw== IFpvcmc= IGdlemlu w7Z2 1bjWgtW01bY= IGxpbXBlemE= IGZ1bmRhbWVudGFsbHk= INCt0Lo= IFNhc2s= zrrOv8+N IGZpam5l IEVzdGFtb3M= 1avWgNWo 65287J20 cmFsZQ== IEJhxZ9rYW7EsQ== b2RpYW4= a2FydA== b3Zhbw== b3Ns LkRi IHNlZ2ly IGtlbGxl IHRoYW5o 0LfRltGG0Yw= INmK2YbYpw== KE1hdGVyaWFs IGxhc3RuYW1l QUdP IHF1ZXN0aW9uYWJsZQ== 4LOB4LKm4LON4LKn IMO9b2thcnk= KScK c2htZQ== 4YOY4YOd4YOg4YOS LnBpbg== 0LTQsNC0 IOC0quC1iuC0suC1gOC0uOC1jQ== dmVzdGVy IHdvZW5zZGFn IFNwZWNpZmljYXRpb25z IFVEUA== IHJldGVu 0LjRgdC40LTQsA== IHNpZGluZw== 0YbQsNC8 w6FnaW5h 5Y2H57qn IGlsaXk= LmFqYXg= LtCh 4oCZYXM= 4YOs4YOQ4YOV4YOa yZlsyZlyaQ== aWxkaXI= IHBpb24= IMSwc3RhbmJ1bA== IExFVkVM IERpYXM= 2KfZhdmK2YY= INC00LLQuNC20LXQvdC40Y8= 4oCZw6l2 IHNlcGFyYXRpbmc= IG11bHRpbQ== 4YOg4YOU4YOR4YOY4YOh TGlz XFxcXA== INCV0YHRgtGM aWN1bG9z 44OD44OB IEdyYXZpdHk= IEFjYWRlbWlh IGh1dg== YW1wYW5p IEZlbnN0ZXI= a2V0YQ== IHN2w6k= KGF0dHJz IGxlaWRpbmc= IHF1ZWJy IGZpdHRpbmdz IGdhbWJhcg== IHbDrWNl IOCyuOCyguCypg== 2YTZitmC IHN0YWdu IHNlYWxpbmc= IGJlYXV4 X2JsYWNr zr/Ovc+EzrHPgg== 4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOG ZGlm IHRyYXVtYXRpYw== IHRhbGVudG8= YXJldGg= IEVkbW9udG9u KFtdLA== IHJlbWFrZQ== Y2xlcm9zaXM= 5bm05YmN INC/0L7RgNGP0LTQutC1 KSk6 QlVUVE9O IOCupOCvhuCusOCuv+CuteCuv+CupOCvjeCupA== IOGDqOGDlOGDm+GDl+GDruGDleGDlOGDleGDkOGDqOGDmA== INmK2LPZhQ== IOGehQ== INW21aHVpdaC IOWU IFRoZW1lcw== IER3 IGludGVybWl0dA== INC805nQutGC05nQvw== 0YbQtdC8 IHhyYW5nZQ== IGVjb2w= YXJ1aA== INCy0LDQuQ== IEVa 5pei IG5hdWQ= LlZvbA== KGNodW5r dW1waW5n IG5vdGF0aW9u RXJpYw== VGhyb3du 44CB5paw SmFzb24= IE5TQQ== IGFiZG9tZW4= IEFybWVk IGhhcGE= IOC4geC4o+C4uA== IGFjdG9z IGltcG90 X2FjY2Vzc29y IElDQw== IHRlbnVl X29yaWdpbmFs TWVudXM= IGphZHg= 4LiV4LmJ4Lit4LiH4Lid4Liy4LiB 6riw64qU LXJlbGVhc2U= 2LrYsQ== IHByb2Z1bmRh 0LTRg9GJ IG1hdGVpeA== cGVydGlubw== IERldXg= CXRva2Vu 4K+L4K6k TEVWRUw= dcWh IEx1bmQ= IGZsZXN0ZQ== IHVidQ== IHJlc29uYW5jZQ== IGFscmlnaHQ= KnI= c2tpZWo= IGFuYWxpemFy 0pvQuNC9 KHJlYWw= IHZvbHVudGVlcmluZw== INC+0YDQs9Cw0L3QuNC30LzQsA== 5LqM57u056CB RXJh dW5lc3Nl 57uT5p6E IGRhbmt6aWo= b3JkdQ== IFN1cmdl w6lzdXM= IOCkuOCkvuCksOCljeCkteCknOCkqOCkv+CklQ== zq/Ovc61z4TOsc65 IGV4cG9zaW5n IGZyYXVkdWxlbnQ= 7JuD RGVsaXZlcg== VHJpYWw= INSx1bXVtg== w6hn IHByb3RlY3Rvcg== IEZhcm1lcnM= INC60YPQu9GM0YLRg9GA CXVuc2V0 IExvdHRlcnk= IGF0dHJpYnV0 IERlYnQ= ZGFq 4LWK4LSw4LWB IGRucw== IOCwpuCxjeCwtQ== W2FyZw== IGRpc2NyZXA= IOCmpuCmvuCmrA== 5aix5LmQ5byA5Y+3 LXBsYXllcg== 4oCc5LiJ IGhlcnZvcnJhZw== IE9ic3Q= IGFuZGVu INix2YrYp9mE aW5rdQ== IMOpdsOpbmVtZW50cw== YWdyaWQ= IENhaXJv 4KeB4KaH yZlybA== zrbOrw== CXZvbGF0aWxl 566X5rOV IHNwb3PDs2I= JmFwb3M= IGVuZm8= INGD0YHQuNC70Lg= IHBpa2s= IGdlYm8= IGd1dGVz IOCyueCyv+CyguCypg== UEFE X0Zvcm0= aWRkZQ== IGVrc3Q= UHJvdGVjdGVk IHN0w7Ny Sm95 IGFydGVyaWFs IMS+ IHNvdHRv RURT IOC0uOC1huC0leC1jeC0sOC0n+C1jeC0n+C0seC0vw== IOCkpOClgeCksg== INCz0LA= IGjDuHk= LnNpbmdsZXRvbg== IDo8Lw== INij2YfZhA== 4YCe4YCw IGdlbGV2ZXJk Jz4i IHN0b2NrZWQ= IExhY2s= INGP0YjRh9GN 44Os44Oz LlhNTA== IERvbWluZ28= INC30L3QsNC60L7QvNGB0YLQstCw KENvbGxlY3Rpb24= 4K6+4K6c IEthbXBm IEF0dGVtcHQ= IGdldXM= IGtsYWNodGVu a2Vp LmZhY2U= SGRy IFByaW50cw== ZXJtaW4= 4KWH4KS1 INGB0LzQtdC9 IERhbmdlcg== 6aWu IGxlZGdlcg== IFBhcmFncmFwaA== X0FVRElP X0dMT0JBTA== IFNPTQ== b2xleQ== 4K6a4K+N U2V2ZW4= IGRlcHV0YWRv 0YLQuNGA0LA= IENob3A= ZG9uZw== IFJlYg== 4KS/4KSu4KWN4KSu THVh IHBleg== RW51bWVyYXRpb24= Lnpvb20= 5ZKM5aSp5aSp5Lit5b2p56Wo 6Jma IOCkhuCkqA== IG1peg== cG9zdGdyZXM= IGZlcnRpbGl6ZXI= IGFtYXRldXJz IHNla2l0YXI= IElDb2xsZWN0aW9u IOq0gOqzhA== 0ZHQvdCw aGFiaWxpdGF0aW9u Pn0n INC80LDRgNGI X3hwYXRo INGC0L7RhQ== IG5ha2VuYmlsZGVy J2F2YWl0 LnJlYWRsaW5lcw== INm+2YQ= IGNyYWI= w6VuZA== Oysr UGhw IGxvb2tvdXQ= IEthc2htaXI= IGtyYXY= INC00ZY= IGdsYW1vdXI= IGFuZ2Vib3Rlbg== 0LDQtNGD IGNvY29h IHBha2V0 IOKYhg== 5ZCI44KP44Gb Z2FuZ2Vu 0Y7QvA== INmF2KrYrdiv IEFic29sdXRl IFNpbXBs IEZBU1Q= IGhhYml0dQ== b3Vp xJlkenk= X3NvdW5k 4Kq+4Kq14KuH 4KSV4KS+4KSg4KSu4KS+4KSh4KWM4KSC IFN1cGVydmlzb3I= IEZyZWRlcmljaw== IOCkruClgeCkluCljeCkr+CkruCkguCkpOCljeCksOClgA== IGpvaHQ= c2VwYXJhdG9y 4Kq34KuN4Kqf INin2YTZgtix2KLZhg== 7ZmU66W8 INGB0LvQsNCx cGVyaW9kZQ== IOeD IGdlbmV0aWNz dXN0dXM= IHRvdGFscw== IOCyiOCylw== 4Kaj4KeN4Kah IGF1c3NjaGxpZcOfbGljaA== w7Nsb2dv IOCkrOCkvuCkuQ== IOaQ IGRpc3RyaXRv INGC0LXQu9C10LLQuNC3 IGNvbnRhZG9y IEdSRQ== ZXN0ZWVt 5ri45oiy IOCkquCksOCkv+CkuA== IGRpdmlkZW5kcw== INCx0LDRgdKb0LA= IHNsYXVnaHRlcg== IOKAmeKAmQ== 4YOQ4YOg4YOa4YOQ4YOb4YOU4YOc4YOi 0LPRjdC7 IHByb3ByaWVkYWRl IETDrQ== IHVpdGdlYnJlaWQ= IHJvbmRvbQ== IE1pbmlz IOCqrOCqpg== IEplbmtpbnM= INC/0YDQtdC00L/RgNC40Y/RgtC40Y8= IFNQUg== INGC0YDRg9Cx KHRpbGU= X3Jpbmc= CQkJICAgICAg IFByaW5jaXBsZXM= 4Z+Q4Z6P4Z+M4Z6Y4Z624Z6T IG1pbGlvbmk= IEhhdXNo xbxz IGpx INmC2YU= INC60LjQvA== IHNhZGRsZQ== IHB1b2w= IHJvc3Rv IHZ1cg== a2V5ZG93bg== QXBwbGllZA== IG1ha2FuYW4= 5pyJ5YWz IG7DuGR2ZW5k IGdpYW50cw== IHNjaG9sYXJseQ== IG11bmljaXBhbGl0aWVz IGFwZXJ0dXJh IGNvbXBsZXRhcg== IERFVEFJTA== bGFuYQ== IFNwaXI= IE1ldGFsbA== IHZvbGRvZW4= cHJ1bmc= UHVycG9zZQ== Y2FyYQ== IGTDqXNpcg== IOCkrOCkvuCkrA== IHByb2NlZGltaWVudG8= IGFkaWRhcw== IGZhdWx0cw== IHJlcGxhY2VtZW50cw== IG9ibGlr IGRlc3Rlaw== INin2YTZhtiz2KfYoQ== IGlwYWQ= 5Y23 IFN1bmc= V0lEVEg= IGJhxZ9sYWQ= 2K/Yp9mL IEJyb2tlbg== INmG2KrYp9im2Kw= KENyZWF0ZQ== IHJpcg== 4Z+S4Z6U IGNyYWZ0c21hbnNoaXA= emHDsQ== IHRva2tv IOCkquClguCksOClhw== IHRzYXJh INC506nRgA== 4Kqw4KuN4Kqc IGNhbmNpw7Nu IERpcmVjY2nDs24= w61tcA== 0LLQsNC90LU= RGVncmVlcw== LXNldHRpbmdz TGF0Y2g= IOC0qOC1h+C0nw== IGZldGNoaW5n INin2YTZgA== IGhvcm1vbmFs IGNsaXBib2FyZA== bGx1 b3hpZA== 4YOa4YOU4YOR4YOo4YOY YnVsbGV0 5pmT IGNvbnNlam9z IGRvY2VudGU= IHByb2R1Y2ly IGNvbXBvbmVudGU= Q2Fycg== ZW5idXJn IOC0uOC1lw== X0ls IOCksuCkguCkrA== IExlZ28= IEluaGFsdGU= IEtleXdvcmRz 4KSc4KWN4KSe IGvDvHI= IFZlamE= X0RBVA== cGxhYXRzZW4= dWF0ZQ== INCY0YU= PW5hbWU= IHNhbMOzbg== IGt1aWRhcw== IGNvbG9uaWVz IFB1bHNl IHdhbGxldHM= L1s= LmFuY2hvcg== 15XXp9eo IExldmVscw== INmD2KfZhdmE IHF1YWk= IGdlcmFsbWVudGU= IO2VmOyngOunjA== cm9ja2V0 aWprdA== IG5hbWVvZg== IGNvbnRv 1aXWgNW2 IGJpZW5lcw== INCw0YPQsNCw INC70LjQvA== 4LWB4LSq4LWN4LSq4LWN IFRpbmE= 0L3QsNGH0LU= IOCmquCmsOCmv+CmrOCmvuCmsA== KGls X2N1cnI= 0LXQu9GM0LzRlg== INCa0LDQtg== IGFiZXJ0bw== LWN1cnJlbnQ= 5a6e6ZmF PE1lc3NhZ2U= 0q3QsNKb05nQsA== Y2Fi 0ZbQvNGW c29j IGJldHLDpA== IGR1YmJlZA== aXNlZXJkZQ== INii2YXZiNiy2LQ= dWR6YQ== IOC4iuC5iOC4reC4hw== RVRP UElO IGZsZXJh LWxlYXJuaW5n Ukg= 2LrYp9mE IGZyaXM= IHBlbnlha2l0 YW5vYQ== IGdmeA== X2Vk IE1hbm9y IHBpZ3M= INC80LXRgNC+0L/RgNC40Y/Rgg== IHJlZGVzaWdu YXp6bw== IHRhbnRy 0YXRjNCw IGNvcnJpZG9y 1bjWgtaB1avVuQ== INWh1abVodW/ IOCmmuCmv+CmleCmv+CnjuCmuA== 4YCR4YCs4YC4 IOCuhuCusA== IGNvbnN0cnVpcmU= IHV0aWxpc2FudA== IGFsY29ob2xpYw== IOWj IGludGVyaW9ycw== 0LDRgNGC0YQ= 55S6 SUNJ IOiPsuW+i+WuvueUs+WNmg== dm90ZXM= 1avVow== IGVwaXPDs2Q= IE1hcmNlbA== 44OQ44OD44Kv Zmlr KHNvcnRlZA== ZW5lZg== 4Kaq4KeN4Kew IFJFVg== aW1tb25z YWJsZXI= X2RlZmluaXRpb24= YWxsdW5p IOCwruCwvuCwpOCxjeCwsA== IFdpc3Nlbg== IEJlbGVk INii2YXYsduM2qk= IHZhY2F0aW9ucw== INC/0L7QstGA0LXQtg== IFdlbmR5 IHByb2NlZWRlZA== IGNhcm8= IGV4ZW1wZWw= YW5rdQ== YmVzdG9z IFN0cmlwZQ== TWVuc2FqZQ== IHZhcm0= IFJX IEJyYXPDrWxpYQ== IGVuY3ljbA== KHBsdWdpbg== IGXDvQ== IHRlbGVmb25v IHN0cmlwZXM= 5b2p56Wo56uZ 0ZTQvA== b3Jpem9u d2FuaWE= IENoaWM= 4K6H4K6o4K+N4K6k X3Njcm9sbA== IGVzdGk= IFNhdGlzZmFjdGlvbg== PSI8Pz0k 5L2c55So IGtlcmFuYQ== xJ9pbWl6 c3Bhd24= IHN1cGVyZmljaWFs IEJlbnV0emVy IHx8PQ== bG9vdA== 4oCd6rOg IGNhcGl0YWxpc20= d29sZg== IOCkpuCli+CkuOCljeCkpA== IEJvcmc= Qm9t VGFibGE= aW1lbnRhcnk= IHN1cnByZQ== IOCyquCzjeCysOCyleCysOCyow== LdGP U2Vlbg== IFBhZHJl IHNwZWVjaGVz INin2YTZhNin2LnYqA== INGH0LXQvNC/0LjQvtC9 INWw1aHVttaA INGD0YPQuw== INeQ15HXoteo 4KS+4KSn4KS/4KSV 4LiC4LmJ4Lit4LiE4Lin4Liy4Lih LWxlYWRpbmc= cGVyc2lzdA== 44Op44Oz44Kt44Oz44Kw LXBhbmU= IGVzcGVjaWFpcw== IG9sbWFk IFphaA== IHNvbGl0YXJ5 5LiA5a6a IG5hdGE= IFBoZW4= IFNjaMO2bg== IHNocmVkZA== IGF2dWdh INCS0LvQsNC00LjQvNC40YA= IHJldml0YWw= IOCoqOCouQ== 4KS+4KSC4KSV cGVp INi02qnZhA== IGFjY2Vzb3I= YnVzdGVy 4LCw4LGN4LCu IERlZQ== QmVkcm9vbXM= IOCqruCqs+Crhw== IEFsbG9j IE1hdHRl IFZvcnRlaWxl INmI2KfZhNmD INGA0L7QttC00LXQvdC40Y8= U1BJ 4LiK4Li1 INii2YE= KTw8 R1VJTGF5b3V0 IHN0b3J5bGluZQ== 0LPRltC70ZY= RGVzY3Jpw6fDo28= IHRyYXZhaWxsZQ== INCy0ZbQtNC/0L7Qsg== 0LDRgtC+0LI= ICwn c2lnbmVk IOCuieCusQ== IGdlZHVyZW5kZQ== Ikg= Y2huZW4= IOCqquCqlw== IFN0ZWY= IHJlY3J1aXRlZA== YXJ0aXNhbg== X0dM 4LmI4Lin4Lii 4bq3cA== IGNyYXNoaW5n 2LPYqtmK VUVM PycsCg== 6IKv IEJhbmM= IGNvbW11bmljYXRpZQ== 5oyC5py6 IOCwruCwguCwpuCwvw== 4YOh4YOU4YOc INCx0L7RgNGM Kiop b2JhbGQ= RU5HSU5F IHpheg== XSoo PS09LT0tPS0= c3RyYXRlZw== SW5jbHVkZWQ= X0J1dHRvbg== IEFxdWk= IOCqheCqguCqpA== IGdhbGxvbnM= IOCmpOCniOCmsOCmvw== IGLDpg== 4KWn4KWv 4LS+4LS34LWN4LSf 44OS IEJla2lqaw== b2t1d2E= ecWf 4Kq+4Kqa4Kq+4Kqw LnRvb2xiYXI= z4TOtc+B IM+Dz4XOsw== IGtpbmRlcmdhcnRlbg== IGRvbWVu zrjOvQ== IHVzcg== IHNpdHVhZG8= IG5nZW4= LWZpdA== L21hcHM= INC60L3QuNCz0Lg= bnBt 6Ki8 TWFya2Vycw== IOCkheCkguCklw== IHJlbm91dmVs 4LmH4LiE Y3VscHQ= IOy1nOqzoA== aXNhYQ== IEhvbWVt IGFsaXNlbWE= U1RE aW5zdGFsbGVk LmhlbHA= INC00LXQu9Cw0LXRgg== U3RlbmNpbA== IGFtdXNlbWVudA== ID0o INC+0YDQs9Cw0L3QuNC30Lw= c3RlbGx1bmdlbg== Lm1lYXN1cmU= IGl2ZQ== 2YTYrdip IGFzc2F5 IG5lY2VzYXJpb3M= IHBsYWdpYXJpc20= b2xpY3M= IGxhdWdocw== Z2FkYXM= IOCmrOCmv+CmuA== 4Z6P4Z+S4Z6P z4TPg865 IGJyb3Ro ZWxsaWRvcw== 2KfZhduM2YY= 2YbYs9mK 4LSV4LSC LmN0 IERydW0= aW1pbmE= IEJld2VydHVuZw== Y2FwZQ== IEF1Z3VzdGE= IHBha2tldA== IEJFRk9SRQ== IGVtYnJhY2luZw== IEJ1ZGR5 4Lia4Liy4Lil IGFzc2Fzc2lu IE5vcnRvbg== IOyXhuuLpA== 4LmB4Lia4Lia IEFjcm9zcw== IGNvdXJ0eWFyZA== aWRlc2hvdw== 4LmI4Lin4LiH 15nXodeU IGVzc2F5ZXI= PFRhc2s= TE9HWQ== INW41oDVv9Wl1bI= KG9uZQ== X21hcg== IHNhdXNhZ2U= w61ndWV6 KHJlcG9ydA== IHJlbWVtYmVycw== LXJlbg== bWFhcg== INmH2YXYp9mG X3BhdGNo IGVpbnppZ2U= INGB0LDRgg== IHNsb3R4bw== L3hodG1s 4LC/4LCv4LC+ X0NBTExCQUNL RG93 cGFhdA== IOqygOyDiQ== IGFybWF6ZW4= IOCktuCkvuCkpuClgA== QW5uZQ== INWk1aHVvw== 2KjYsw== eWxpbQ== INC/0YDQvtC00YPQutGG0LjQuA== w7RuaWNv IFNpZ25z IEVtcGxveQ== IOG7jWrhu40= INGA0LDQt9C90YvQtQ== INin2YTYs9io IOCkuOCkruClgeCkpg== 4K+K4K6w 1bjWhNaA W117Ig== ZWJhYmthbg== 4LGN4LCz INio2LPZig== IGfDvG5zdGln INCz0L7RgNGP0Yc= IGJheWE= IOuwsQ== IGvFjQ== IGdkemll IGxlYWtpbmc= IG5leA== 0ZbQtNC+0Lw= IEJX IGZlc3Rl TcOh X3R2 aXp3ZQ== 2YjZhNuQ X01vdXNl Y2jhu4s= IFNwZWVkd2F5 IHdoaWNoZXZlcg== IOW7ug== 4KSq4KS+4KSy4KS/4KSV4KS+ w6FsZXo= IGFsZHVz 2ak= 1bbVuNaA1bA= IOC5gOC4mg== IFhhdmllcg== IGNvbXBsZWV0 IG5vcnRod2VzdA== KGNhbA== IGluY2U= IGluc3RhbnRpYXRl QmFyY29kZQ== 4LiK4Lih RGVzZXJpYWxpemVy INin2YTZhNio IEJhcms= IGhhbmdnYW5n VlY= PlM= IHJpZ3U= Y2hlbGxl IFBTUA== IGJvdWNoZQ== IExvZ2lzdGljcw== KXA= INin2YTYrNmH2KfYsg== IGlt4buN 2YTZidix2Yk= 2YfYp9uM24w= SUdJTkFM aWVudGVu dXJrYQ== IOC4o+C4suC4og== Y3JlZGl0cw== 16fXqNeZ150= IHJlZQ== IHRlcm1pbm9sb2d5 IOCyteCyvuCysA== IGFtZXJpa2Fu b2NyYXRpYw== INix2LY= IGNvbnNjaQ== 4YOj4YOo4YOQ4YOd IEJVVFRPTg== IFBpcmF0ZXM= IFNlw7Fvcg== CQkJCSAgICA= IENhbmFkaWFucw== 15DXkQ== IOCwpuCwsOCxjeCwtuCwlQ== IOiZ IFN1YmFydQ== b3VuY2VtZW50cw== z47Pg861zrnPgg== IHBhc8Oz 0LXRh9C10YE= 5aix5LmQ5Luj55CG IG7DrXZlaXM= LnJ4 IOCmleCmvuCnsA== IHBsYXN0ZXI= IHN1YnN0aXR1dGlvbg== d29ya3NwYWNl INGA0LDQt9C70LjRh9C90YvQtQ== IGRpc3BvbmU= amVuaXM= INmF25A= IHBpc2Fu IGVuY2FudGE= 0LrSr9C9 eXNzZXk= IHJldGU= 0L7QstGD0Y4= IFBvcnRyYWl0 IEdlc3R1cmU= IOCyqOCzhg== 15nXp9eY INmF2YbYuQ== 0LDRgdGL0L3Ri9Kj emVuaXU= IHBvc3Nlc3NlZA== 4K6/4K6V4K60 7YG8 IGFlZw== IHNwb250YW5lb3Vz IENsdWJz INeo15XXpteU 0LjQtNC10L4= IM68zq/OsQ== amlk aW9t IOCkquCljeCksOCkpOCkv+CktuCkpA== 5paw6Ze7572R IGluc3RpdHVjacOzbg== IG51dHJpYw== IERpbmc= IHNlcnJ1cmllcg== 4K+B4K6V4K6/4K6p4K+N4K6x eW5l IGVuc2ltbcOk IHZvZWw= 44CN44CC YXZsamE= IGVudHJlcHJlbmV1cmlhbA== Lm5vcm1hbGl6ZQ== IHNjaGxlY2h0 IG1laHJlcmVu S3VuZw== 4Lia4Li44Lij4Li1 IGNvbmZyb250ZWQ= ZW51cw== 4YOT4YOm IG1pbGl0YWlyZQ== 4Liq4LiU4LiH4LiE4Lin4Liy4Lih4LiE4Li04LiU4LmA4Lir4LmH4LiZ 4YOY4YOc4YOQ4YOQ4YOm4YOb INmF2YHYqg== TGlzdGVuaW5n IFJlc2lzdGFuY2U= IG9taXR0ZWQ= bXV0YXRpb24= 4LWB4LSq4LSk4LWN4LSw IG1hcmtldGVk 2LjZitmB IHNlZ21lbnRv IG91dHdhcmQ= IGdsb3Zl 4K63 4LGN4LCn INC30LDQtNCw0Yc= IHRlbmRlbmNpYQ== IEdI 4La64Laa4LeK IOC2muC3nA== IENhbXBlb25hdG8= cGjDpHJl IOCyquCzjeCysOCypg== IGNsYXNzaWZ5 ICAgIA0KICAgIA0K IERPQw== 8J+kow== UmVqZWN0 IENsZW0= IHJlZ2VsbcOkw59pZw== INiq2LHYrA== YXRvcmVu 0p/QvdGL V2FyZQ== IFJlbmRlcmVy IOC4hOC4p+C4suC4oQ== INmF2LPYp9ih IHRyaWFuZ2xlcw== INC90LDQvNC4 IHNvdXRod2VzdA== INqG2Yg= IGthZMSxbg== SW5hY3RpdmU= X3Nob3VsZA== INin2YTYrNmK2LQ= 5paw5Y2O56S+ IEFkdm9j 5Y6f5qCH6aKY dWtlbGE= IHN5bXBhdA== IHlpaGlpbg== IGJvbG8= xaty w6Ruaw== IFBpY2Fzc28= IHBlc3Rl INKT0LDQvdCw XSkpCgo= IGV2aWRlbnRl IERlc2hhbGI= IHNpc3Rl IGJyaWw= IGV4ZWN1w6fDo28= IE1hcHBlcg== IOCktuClgeCksOClgeCkhg== IFByb2pldG8= zr3Osc+C INCh0KHQodCg IGd3bw== INC30LDRgdGC IGNvbWVu dXJpc3RpYw== 0LjRhtC1 IEJvdWxkZXI= LXBsYXRmb3Jt 4Li14Lii4Lin INCw0LjQvQ== 15nXkNeU 0YbQuNC+0L3QvdGL0LU= 4LOL4LKq 4LGG4LC44LGN IHBpdGNoZWQ= IOGDk+GDkOGDqg== ZW51aW5l aW1pdGl2ZXM= Snd0 IGLDonRpbWVudA== IGluc3BpcmVz IGV6aW4= IGZyYW1pbmc= IOunjOuTpOyWtA== INC60L7RgNC+0L3QsNCy0LjRgNGD0YE= bGVkZXM= IHBhcnRpY3VsYXJlcw== eHh4eHh4eHg= VUVTVA== IOuQnOuLpA== Y3JlbWVudHM= IEVuZm9yY2VtZW50 IGhvaw== IFBO ZWRpYWthbg== bWF0ZXI= 5aOB 44Od44Kk44Oz44OI IOu2gQ== INi52YXYsdin2YY= IGhhZGk= Ij4NCg0K 5bim5LiA6Lev cmVxdWlyZXM= YWh5 IOC0ieC0puC1jeC0mA== Oz8j ZW5kdXM= IGxhdmVuZGVy IEFudHdvcnRlbg== 4YOo4YOY4YOg b3JkbmV0 IMO6c8OhaWQ= IGtyb3BwZW4= IOCkuOCkteCkvuCksg== IGZhbXA= INi02YjZhtiv LGVuZA== U2hpZWxk 0YPQutC4 IGFsYXJtcw== RUVERUQ= X2FsaWdu IGh1bnRlcnM= IGZ1bsOnw7Vlcw== 6LWP IFNvbnM= w7Jh IHlhY2h0 IEFjY2VsZXI= IGNyaWFkbw== UFc= INeV15DXqg== IGFya2FkYcWf cnls IE1hdHRlcnM= IHZlbnRhbmE= IFN0w6Rk IHBzeWNoaWF0cmlj 5a2X56ym5Liy YWxvZ3k= IGlndWFsbWVudGU= 0YfQuNGC IGFuZGVyZXI= IGRlc2Vqbw== LuC4og== IGJ1bXBlcg== IFJpbGV5 IGFjdGl2YQ== X2FydGljbGU= XSkv INmH2YbYrw== IFNpbm5l IEJvaA== INqB2KfbjA== L2RhdGFiYXNl IOCuquCuvuCupA== dXdhcg== X2dlbmVyYWw= IHJlY29tcA== LlF0 4LOK4LKC4LKm4LOB aW9zZQ== IM+MzrzPic+C b21lbnM= 4LGC4LCo IGNyb2NoZXQ= SlVuaXQ= LlRleHR1cmU= ICYmDQo= cXVpbmFyaWE= INmE2KPZhtmH IHlhbmdv IHBlc3RpY2lkZXM= IEtM IGVyc3Rlcg== INCh0YA= 0LDQvdC00Lg= cmFjZQ== IEFxdWE= 6rCA64qU KSsn IGNvbWVudMOhcmlv INC/0L7QstC10YDRhdC90L7RgdGC0Lg= IEFuZHJld3M= IGZsdWN0dWF0aW9ucw== IGRvY2h0ZXI= IFNjaHdhcg== IENoZWNraW5n Y3JlZGVudGlhbA== X0NvbmZpZw== IGVyZ2Vucw== Pi0= IENoYXJhY3RlcnM= IEZvcmdldA== 4oCZVQ== INmI2ozZitqq IENvbmNl aXN0ZXJ0 IHRvcnM= IGhlYXJ0YmVhdA== IOCuh+Cur+CuleCvjeCulQ== INCx0LDQudC70LDQvdGL0YHRgtGL IFRhcGk= 44KH44GG 0LzTmdC5 INWu1oDVodWj1oA= IGNvZGVk IFJlbGVhc2Vk LmNvbmRpdGlvbg== aWNrw71jaA== IGJlc29uZGVyZQ== INec16TXmQ== 4LWB4LSV4LSv4LS+4LSj4LWN 4buldGFyYQ== IHNhdHVyYXRpb24= IFNY IOCql+CqiA== 24A= 6LSh 24fZhg== 6Im65pyv aW7Dqw== IHN1YmNvbg== 7Iuc7JWE RENBTEw= IHJlZnVnZWU= INij2YXYsw== IHBhc3NhbmRv IGhha2vEsW5kYQ== YmVzYXI= LmxvY2FsZQ== IEhhd2FpaWFu IG1haXNvbnM= IHNwZWN0cmFs IGvDsg== INmG2YXZiA== IE1vc3RseQ== IHdlbmlnZW4= T1BMRQ== bmljbw== IGRvZW7Dp2Fz INGA0LXQs9GD0LvRj9GA IEFkdmFudGFnZQ== 05nQvdC00Lg= INmK2LnYrw== b3VuY3k= y4Y= aHl3 YWlkaA== aWNpZQ== IEZq Y29uc3VsdGE= X3ByZXNz 5LmF5LmF5Zu95Lqn Ymxhcw== IMOobg== 0LjRgNC+0LLQsNGC0YzRgdGP Q3VlbnRh KElz IGNvbW11bmVz IHNwYXM= IGFyYmV0 QWdvcmE= IHN1cnJlYWw= YWRhcHRpdmU= IHJhZGE= IOCquOCqqg== Q2xpZW50ZXM= X2Nscw== X1NJTkdMRQ== 0YLRi9C5 Lm11c2lj cmVkYQ== cmluZ2Vu IHByZXBhcmFkbw== ZXh0w6lyaWV1cg== RVJJ 5pCP dG5pZQ== IFZlcnNl XCI+Cg== ZXJjdWw= Z8Olbmc= IFB1YmxpY2F0aW9u dmlyb25tZW50cw== INio2YbZig== IGJlbGxz IHJlcGV0aXRpdmU= IEluY2g= IHZlaw== 4K6/4K6v4K+I IG15c3Rlcmllcw== IOGDr+GDlOGDoA== INin2LXZhNuM 0LvQsNC90LA= X3Bvc2l0aW9ucw== IG51bWJlcmVk IGFrdGFy INC40LDRhdGM WWlp IOCkteCljeCkr+CkvuCkquCkvuCksA== IOip IHJlbG9jYXRpb24= IG9sdcWf YWFuaWs= lOGen+Gfiw== J2FyZ2VudA== IGFmZmluaXR5 IGp1aWN5 IGFic2No UExBWUVS IGluZGlz IEjDvA== 4LSv4LWN4LSv IGRvbWljaWxpbw== 0YPQv9C40YLRjA== IHNlcmlhbGl6ZXJz aWV0dGU= IG1vaXRpw6k= cG93ZXJlZA== b2dyw6FmaWNv LlJlY29yZA== YXB1bg== IGp1bmdlbg== IOCmpuCmv+CmpOCnhw== IGFtb3Vy KX0sCg== 4YOU4YOa4YOY4YOh J2jDtHRlbA== 0KfRgtC+0LHRiw== IHRlbXBlcmF0dXVy 4bqrdQ== IHBlbmU= VW50ZXI= 0L/QsNGC LnJlZGlz IHNpa2tlcg== IENlbHNpdXM= IEVl IGluZmlu LnBhZGRpbmc= INCw0LLRgtC+0LzQsNGC0Ys= ZW56aXN3YQ== IHN0cnV0dA== 4KWH4KSV4KS+ IOydvQ== L2NhdGVnb3J5 IHphbWFuZGE= IHR1bGw= Y2hhdQ== IHLDoXBpZGFtZW50ZQ== IMSNZXQ= PHN0ZGlv 4oCZb2s= INC/0YDQvtC40LfQstC10LQ= 0LjRj9GC0LjQuQ== INC60LXRgQ== UXVlbGxl IOC4leC5iA== INCy0L7QtNCw LXRoYW4= IFBsYW5v JUE= VHJhcA== IGZvdW50YWlu IGluc3RpdHVpw6fDo28= INit2KfZhNin2Ko= IGFkbWluaXN0cmHDp8Ojbw== dmFsaQ== IGZ1bGZpbA== YXJtYW4= IGVsZXZhdGU= INin2YTYr9mB2KfYuQ== 4Kq44KuN4Kqq INCx0LfQuA== IHRyeWdn IHZvY2U= IEFiZHVs IG5hYXA= 4K6f4K+N IG1pa8Ok IGxpYmlkbw== 1YDVodW1 IOC5gOC4iA== IGtlbm50 IHp1aw== IOuqqOyKtQ== IGJpb21lZGljYWw= LWZhc2hpb24= YXRpc2F0aW9u IG9vcnNwcg== INC90LDQu9C40YfQuNC1 bG9zdA== IGtvcnRpbmc= IGF2ZXJhZ2Vz IHN0dXJlbg== IG92YXI= IGJlZGU= LWVmZmljaWVudA== QVNJQw== IHJvZHM= IFZhbmFm INeX15nXmded IGhlY3RhcmVz IHR1bmQ= wq10aW9u IHJlY2hlcmNoZXM= IEN1YmFu IHJoYW4= IGJpbmRlcg== QnJpdGlzaA== IOC0nOC0v+C0suC1jeC0suC0vg== IGFwcGFyZWls VGhhaQ== bmRhbg== IEFuc3BydWNo IENvcnJlc3BvbmQ= IGdlYmV1cmVu INC/0L7Qv9GL0YI= IERlZXI= 4YOY4YOn4YOV IFNR IGVudHdpY2tlbG4= IGFnZ3JlZ2F0aW9u IHsqfQ== INij2LTZh9ix dXNzZXM= 15XXldef IOCqqOCri+CqguCqpw== IOij IFNjcmVlbmluZw== INi02YbYpw== b2JzZXJ2 IMOlcmV0 IG9wcm8= INC/0LXRgNCy0L7QuQ== IOCqluCqvuCqpOCrhw== INC00L3QuA== IGNvbGxlY3RpZQ== QGF1dGhvcg== YnVkZ2V0 IExJR0hU 54KO aXRpb25lcg== 0L7Qs9C70LDRgQ== IGNhcnBldHM= IG5oYW5o IHByaXN0aW5l ZXJpeWE= X2JveGVz TUVTUw== IHN0YXRlJ3M= IFJlc2VhcmNoZXJz IFRhdHM= 0L3RltKj IOGDl+GDkOGDm+GDkOGDqA== IHZ1b2Rlbg== c2Vi IGFhbnRyZWtr IGh1b20= 2LPbkg== 4KeL4Kex4Ka+4Kew IEp1c3RpY2lh IMSr 6ZW/6b6Z PUM= IMO+w7M= YXLEgw== IGBgYAo= R2x5cGg= bGFzdGluZw== IGRhbnNr YWRpZ2Fu INC+0LHQvtGA0YPQtNC+0LLQsNC90LjRjw== IOyDge2DnA== Lm1vbg== LGlu zrrOtc65 LWdl LeCklQ== RXN0YW1vcw== IHJ1YXM= IHRhbWFt 4LCh4LCC4LCk4LGL IGNhYmVsbG8= IGJlc3ByZQ== LmNwdQ== w6FybQ== 4KS44KWN4KSq 4LeD4LeU IHN0dWRp dmVyZGU= INWh1oDVqg== X2luY2x1ZGU= YWlzZXQ= 4K6/4K6V4K+N Rmxk 4YOS4YOj4YOk aXllc2k= IENXRQ== IHLDrW8= CURC IFBlcnNpYW4= ZXN0cnV0dXJh IHdheGFhbmE= cmlhcw== 5aSr5aa7 X1BBVFRFUk4= eWdvbnM= IHBsYXVz ZXJ0aWpk S2VlcGVy IGNhbmluZQ== IOCkheCkreCkv+CkqA== IHNlcnZv PWxpc3Q= fSU= IENoYXJha3Rlcg== 4YCe4YCs IG1lYXRz LmthZmth IHNhbWFy IFByb3o= IOCmuOCmvuCmgg== INCz0LDRgNCw0L3Rgg== IHBpc3RvbA== 4Kao4Ka+4Kef IOC0r+C1gg== IGhpbnp1 IOCupOCuruCuv+CutOCvjQ== IEN1cnJ5 64iI IOGDk+GDkOGDkg== IEluc3RydWN0b3I= aXNlcmluZw== IFBsYXR0Zm9ybQ== dGVzdGVu aW5uaWc= INC00L7QstC10YA= LmNocm9tZQ== LlN0YW5kYXJk Q3JlZGl0cw== Y2hlbmc= INiv2YjYsdmH IGFkZWN1YWRh CVJPTQ== 2LLZitmG IHRhbnRyYQ== 5YCR U3Rhbg== X3ByaW9yaXR5 IGbDvA== IHRvbXU= 0YPRgtCw X3N0YXRlbWVudA== L2xpY2Vuc2U= Wlc= IGJsYWQ= xI1raQ== ZGVl aWtsaWs= 1aHVt9Wr1bY= 44O0 ZXTDqQ== X3RhaWw= INGC0LXQvNC/0LXRgNCw0YLRg9GA0LA= 4LeR IHN0b3M= d2lmZQ== TGFib3I= X2NlbGxz 4LmC4Lil4LiB bWHDnw== IGNyYXZpbmc= c3N5c3RlbQ== IGJhYmU= LmNvbmNhdGVuYXRl LkdlbmVyYXRl VXN1YWxseQ== J0Fs IEhhbmRsaW5n IHRvcG9sb2d5 LnN0ZGlu IHViaWNhZG8= 0LXQudGC0LjQvdCz 2LTYsdmK2YY= IGVzY29uZA== 4KSP4KSy IGN1c3Rvcw== X2FqYXg= bHRl INmF2LTYp9ix bGFyeW55xYg= IE1JREk= IHJlZnVzaW5n IGZlcnJhbWVudGE= INmF2LfZhNio 4YOj4YOa4YOi IGZveWVy 4Kq+4KqH4Kqo z4POvM6x UGVyZmls IGFydGlrZWxlbg== IOGDkOGDk+GDkOGDm+GDmOGDkOGDnOGDmA== LkNPTE9S 6K+36L6T5YWl 2LTZhtin IE1PREVM Q29tZm9ydA== IHNlcnJ1cmU= 0LTQvtGF dHlwZXNjcmlwdA== X2NvZWZm 2KzYp9io bGdlcg== IE1ldGhvZGlzdA== IERhbWVu IFNpZ25lZA== IHZvZWRzZWw= IG9ud2U= IGLDoXNpY29z IOCmleCmvuCmrg== YXdhaw== IG93ZWQ= 0L7QstCw0L3QuNGO w6RzdA== IHBhZ2Vy IOCkheCkp+CljeCkrw== 5ZiJ IGtvbmt1cg== IGZsYXdsZXNz IFBlcm1hbmVudA== IGJsYW1lZA== z4fPgc65 IEhvYmJ5 IEZpbmlzaGVk dXJ1bQ== aWl0 4LSZ4LWN4LSZ4LSz4LS/4LSy4LWN 4KWI4KSo4KS/4KSV X21vZGlmaWVk IEJSTw== 0YvQu9Cz0LDQvQ== 4KqV4KuN4Kqw4Kqu IE1lbGw= 1abVqw== IHR1YnVo aWJyaQ== IOCkpuClgg== INC+0LHQu9Cw0YHRgtGM IOCkueCkruClh+CktuCkvg== 5bmz5Y+w5a6Y572R IFBhc2NhbA== IGFhbnppZW4= IG5hamxl dGFm IM68zrfOvQ== INin2YTYtdit2Kk= IHNhbXU= INin2YTYs9ix IERpdmVycw== VUlMYWJlbA== c2VndWU= 0YPQsNGA 1bjWgtW01bbVpdaA Q2FydGh5 aXlhZGE= YXRheQ== IENvbnZlcnRz IHN1cG9uZQ== IEF1Z2U= P3E= IGFzdGE= LXdoZWVs 0YbTmdC10Lg= IEpD IHBlcnN1YXNpdmU= IHRzYW0= X1NURVA= 2YTZitiy2YrYqQ== IHB1cm8= IE13 YXRpdml0eQ== X0NPTVBPTkVOVA== IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== IGRpbWU= IGlzdQ== cm9tYg== IOe8lg== aXB0bw== IHZ4 IENocmlzdHVz IGZvcndhcmRz IGdpcm8= UGluaw== IHRlcmNp IGNvb3JkaW5hdGluZw== INin2YTYrNmF2LnYqQ== IG5nZXM= 4KuL4Kqo4KuA IGJvcnJvd2Vy IOCmpOCmluCmqA== Pw0K IGFsZ29yaXQ= IEVsbGk= IHBhcnRuZXJpbmc= cHJlY2lv X3JlZ3M= IGdp4bqjbQ== X01BVENI IHN1YnVyYnM= X2xpc3Rz 4K6V4K61 IOCkpOCksg== IHNrcml2ZXI= IGltcHJl 66as6rCA 77yN77yN ZXJ2bw== INGI0LDSs9GA0Lg= 4KS/4KSV4KWH4KSf IEx1ZWdv 0L7QstCw0L3Qvg== 2YXYp9i5 5oY= X3BoYXNl 4bQ= 5Y2I5aSc56aP5Yip Y29udGFpbmVk 0YfQuNC60L7Qsg== IGV4dHJhYw== INGC0LXQutGD0Yk= IGl6bQ== 2YHZitmG VGQ= 2KfYsdmK2Lk= INi02YjYsQ== X0VOVElUWQ== YWJvcmHDp8Ojbw== IGhhcm1sZXNz IHjDow== INC905nRgtC4 4K6V4K6u4K+N LWhlbHA= 4YOQ4YOZ4YOj4YOX IPCfpA== IHNhbHV0 IEhlbnJp CWNhbGxiYWNr INij2YXYsdmK IHByb251bmNpYXRpb24= OyU= KX0s LnJlcQ== ICktPg== IEhlcmJzdA== 5LiN57uZ aWZ0dW5n IHB1cnN1ZWQ= 0ZbRgdGW IEN5cHJ1cw== YWdhbQ== QUNM 4YOd4YOg4YOq4YOY INGD0LTQvtCy0L7Qu9GM IGRpZmZ1cw== IC4uLi4uLg== IGJ1Yw== 1bjWgtW91b8= 0YbRkQ== IHdlbGE= IHJldHJvdXY= INW41oDVqw== IHbDqXJpZmllcg== 44Kr44OG44K0 LXNlbGVjdGVk INCw0YLTmdGL IOCkl+Cli+Cksg== X3dyYXA= IOCmieCmqOCnjeCmqA== 0LDQs9GM0Ys= KGltYWdlcw== INCy0YvQsg== Y2ltaWVudG9z IGluZGljYWRv IGthaWs= Z2F5 X2hvdA== cmluZ2Vy ZWRlZA== IGNyZcOrcmVu IGF1dG9iaQ== IFN5bmRyb21l IOCqreCrgg== IG1la2Fu 4KSa4KS/4KSk IHByemVr IHZyaWplbWU= IEJ1cnRvbg== KGN2 IHJlY2FsbHM= 56m65b2p56Wo IFRoeQ== IEhlcnJlbg== 4YOQ4YOg4YOj4YOa IFByYWN0aWNlcw== IGNvbnNjaWVudA== IERlbGF5 IGV4aXRz IFRBUkdFVA== IG1hcmF2aWxs YnJ1Y2g= IHNhYmVz Q2FsY3VsYXRpb24= U8Ot IGRhZ28= RnJh IHBvbGVz 0L7Qs9C+0YA= IFBvbGFy IGZvbWVudA== INSx1aTWgNWi1aXVuw== IGZsdWZmeQ== Lmljbw== IOCmquCmoeCmvA== asOh 44OX44Ot IG5lZ29jaWHDp8Ojbw== INKb0LjQu9C00Lg= cHVs INin2YTYs9mK2KfYsdin2Ko= IFRSQUNF dGlr CUhhc2g= aW9uZ28= IGFzbw== RGV0YWlsZWQ= IGxpcXVpZHM= bmlja25hbWU= X3NoYWRlcg== IGhlbGR1cg== IMOtZ3k= aWdlbQ== IGNvbnRleHR1YWw= IHRpdQ== ZnRh Ki99Cg== IGLDoXNpY28= IFVOQQ== IGthZGVy IHlhaA== IHJlZnJlc2hlZA== LWFm 0YDQsNC70Lg= YnJldw== 2pnZiA== PyIpOwo= IO2CpA== b2tlZQ== INis2KfZhtuS IEFzc29jaWHDp8Ojbw== Y2x1aXI= PGM= aXlleQ== IOCwmA== IHByYXplcg== IGNvb2tlcg== IGhvcGVsZXNz ZsO2 aXNzYWl0 IGFyYml0cmF0aW9u ICMjIyMjIyMjIyMjIyMjIyM= bWFsaW5r IFNhdHo= IOC4quC4tOC4hw== IOCkhuCksg== IGhvyrtvaw== bWVubg== IGdvdmVybm1lbnRhbA== SVJFQ1RJT04= IHB1bG1vbmFyeQ== TGlnaHRz IENhbm5lcw== IHBvbGljw61h INiu2YTZgQ== IGVpbmdlc2V0enQ= KG5ldHdvcms= b29rZWQ= IEp1dmVudHVz 5YWB IGludGVncmFudGVz IGNyw610aWNhcw== IG9ydGF5YQ== 0L3QvtGC0L4= INi32LHYp9it24w= IEJhc2lu IFBhc28= 2YjZhNuM IOCkruCknOCkrA== INCw0LrRgQ== SUdHRVI= IEltZw== b3BlbmVk 4Kq+4Kqu4KuA IGFkbWl0cw== aWdoZWRlcg== w6hjaGU= dGV4dG8= 6Zmw IEJBRA== SW5jb21pbmc= INC30LTQvtGA0L7QstGM0Y8= 2LnYr9in2Ko= IGNoYWw= IHJlaW5mb3JjZQ== VXBjb21pbmc= LnNjYW4= IOCmuOCmruCnjeCmrQ== w6FjdWxvcw== IGJyaWVmaW5n IMSR4buZaQ== IHJvdGF0ZWQ= 0YPRg9C0 IEJlbGdpYW4= YXR1cmFnZQ== LmZvb2Q= LmNvdmVy IOCyueCziuCyuA== IGV4cGxvZGVk Pi0tPgo= IGplxaF0xJs= 5aSp5aSp5aW9 4LCh4LC/ INCh0LDQvdC60YI= IFVsdGltYXRlbHk= IG3DpG5uaXNr INin2YTZhdiv2LE= 0LXRgNCz05k= IGNvdXNpbnM= bmVobQ== dWl0ZXM= IGhhdXM= dXBsaWNhdGU= w6RraQ== 2KzZhtip 4KS+4KSk4KS+4KSw IG9wYXF1ZQ== IFPDuA== IFR5cg== IEFMU08= IGNvc3k= IGNvbnZhaW4= IHN0csOhbg== Zm9yaw== 44GZ44GZ IGJ4 dHJhY3Rvcg== 57q/6KeC55yL IGV4dGluZw== Q0ND IG91dHNvdXJjaW5n IGhhYnLDrWE= IGZyYWdlbg== IGFidQ== IGRvbGxz IHR3aXN0cw== IHRlcnJpYmx5 6IGU5ZCI cG9zdGVy 5Li75ryU IHRpb24= ZGVjb3JhdGU= IHJvdXA= 4Ka+4Kec4Ka+ X3ByZWRpY3Q= X01PTlRI INin2YTYrtmE2Yo= 4LK/4LKk4LKw INiq2K3Yqtin2Kw= IEx0 KCQiew== TmVlZHM= LdGC0LA= IEFzaQ== Zm9ybWluZw== X2NpcmNsZQ== IOC4nuC4o+C5ieC4reC4oQ== IE1laW5l IGNvbmRlbW4= IEpvbmFz IHBsZWo= INC40LfQsg== IG1lbmdhdGFrYW4= 5pyf5byA IHNhYW0= IGxlYW5pbmc= PVwiIg== IHBsZWE= IGNodW0= KFVJ aW5hcmlhbg== ZW50d2lja2x1bmc= IOCktuClgeCkleCljeCksA== IENhcmRpbmFscw== CWNvbA== IGLFq3Rp IE1lZ2Fu IOCwqOCxhuCwsg== IENvdmU= IOGDrOGDkOGDmw== YWNodGV0 IGNhcnJpYWdl 77yM4oCd IOCuquCuvuCunw== IOGDoeGDkOGDkOGDlw== 4Liy4LiV4Li0 IER1aXRzbGFuZA== IOColeCpiw== 4LmE4LiL b2RhdGE= IGdhbmE= IHdlaw== IG1lbmNhcmk= 0rXQsNCw0YDQsA== 2qnbjNmE LXRlbQ== 1oDVodWq YWhsYQ== 44GC44KK44GM44Go44GG44GU44GW44GE44G+44GZ xaNpZQ== IGNvcnJlc3BvbmRpZW50ZQ== 15XXm9ef IHlo INin2YTYsdin IOGDm+GDneGDlw== IGdyYXR1aXRz INeo15HXmQ== 5LmY X0RCRw== RGFn Y2RuanM= YXV2 IGJlc3RlbGxpbmc= 44CN77yI 0L7Qu9GM0YjQtQ== IOCmqOCmv+CmnOCnh+CmsA== IGlnbml0aW9u IOCwruCxgeCwlg== IM+Azqw= INiz2qnYqtin Q291bGRuJ3Q= IEFsbGdlbWU= IEJpb2dyYXBoeQ== 55qE572R56uZ Lm9wcw== KGNoaWxkcmVu 5a6J5Y2T54mI Kj0= b21hcg== IGhlbHN0 LWVtcHR5 INiq2YTYp9i0 IGdlbmlldA== 0L3QuNGG0LjQvw== YWthdGE= IOCqluCrgQ== 0L7Rh9C90L7Qs9C+ R3JhbW1hcg== IHJhd2E= IOGDneGDlw== IHVuZGVyd2VudA== LkRvYw== IGdyYXBl LuOAkA== IG1hZGVpcmE= INiq2YbYp9mI2YQ= 4Ki/4KiV IHBvdHJlYm5v IFZBTg== IGNvc21ldGljcw== 0p/TmdGL aWVodA== 2LfYuQ== IOCkruCkvuCkgg== IE5vdHRpbmdoYW0= IHBvZGVyw6Nv IGRldGVudGlvbg== IHBlcmNlYmVy IOydtOufsA== INCS0L7Qtw== IEFrdQ== X3dhcm5pbmc= IGZhYQ== INeU15fXkw== IGp1Yg== 4oCM2KfZhtiv U2NpZW50 INWh1bXVvdaF1oA= KEdQSU8= 4LmA4Lil4LiC INC00YDRg9Cz0LjQvNC4 z4TOv8+F IHJoZXRvcmlj b2NhbHlwc2U= IG5lY2VzaXRhbg== IGFsY2FsZGU= IE1FTg== IERhdHVt LsKr a3Rpdg== IGN1dHRlcg== IGdldm9sZ2Vu INeQ15XXnteo INC/0YPRgtC4 4oCUYnV0 IGNvbcOpcmNpbw== IMOJcw== CWRlYnVn 4Kay4KeN4Kay4KeH4KaW IGdyaWV2 IHRyb24= dW5zd2ljaw== 0YDQvtC10LrRgg== 7KO87IS47JqU Y2hldHM= IFNwZWNpZmljYXRpb24= YWN1c2U= bsSxeg== IFdISVRF INin2KrYrQ== 0ZjQsNGC0LA= IGJlbsO2dGlndA== CUJ1ZmZlcmVk KGhhbmRsZXM= IOCyh+CypuCzgQ== TmFu IGludMOpcmlldXI= aXp6YXJl YXTDsw== IGNvbnRvdXJz IHN0w7hyc3Rl 4oiA IGRpdGVt 0JDQsQ== IGdyb2VuZQ== IGRlxJ9lcg== 4KqV4KuN4Kq4 IE1vZHVsZXM= IOCqueCqvuCqpQ== 6ZmE5Lu2 IG9sdXA= IGFqdXN0ZQ== LlBvcw== 0LjQtNCw0L0= bWdy IOGDqOGDlOGDruGDleGDlOGDkw== KT8u ZXJyaWVz IENyb2F0aWE= IFdvcmRwcmVzcw== IHBhY2llbnQ= IGJsb3dz JGw= bGVnZXI= INGP0L3QstCw0YDRjw== IHRyYWluaW5ncw== IOWkqeWkqeS4reW9qeelqOWkp+Wllg== INCw0LrQvg== IGzDtnM= IHN1bnM= IG5hY2hoYWx0 IFBvbGljaWVz IGFsaW1lbnRhw6fDo28= IHBvc3Rlcmlvcm1lbnRl LC4uLgo= IHRyZWF0eQ== IEN1cnRpcw== INWk1bjWgtaE IOC5gOC4p+C4peC4sg== IERITA== IGVpc2Vu 44G+44Go X3Zhcmk= U29uZ3M= KSIKCg== IEV2YWw= T1RT IGNvbXBvcnRhbWllbnRv b3dhxYI= IGR1dXJ6YW1l INaD1aHVvdW/ IFhJSQ== 2KfZhtmK2Kc= IGNvbnN0aXR1ZW50 44CA44CA44CA44CA44CA Lm9uY2xpY2s= aWNvbG9u IE5haWw= VmlvbGF0aW9u IGFkdmlzaW5n IEdvbg== 4Kql4Kqu IHThu4luaA== CWdyaWQ= IEZsaWNrcg== ZGFtYWdl ZXJjaWNl IG1pbnV0aQ== INC00YPQvdGP IE1hYWs= IHJlYWxpemVz aW5zdGFuY2V0eXBl IFBhY2thZ2Vz IHVsYcWf KFN0YXRl IHRlc3Rh Z2J1 INWw1aHVtw== 0YDQvtCx0L3QtdC1 4KSu4KWI4KSC IGNhcnJlZw== IHNpZ25lcg== IGxlc3o= nOCyvw== 15jXqNeU IOCkrOClnQ== X18k YXRoYW0= bHVtYXQ= IOCuleCvgeCutA== J2ltYWdl J2hvbW1l dWpv 2LDZitip IHN3aWxv 4KeB4Kam4KeN4Kan4KeH INep16Q= 4Kio4Ki+ aXNzYXQ= U3BlY2lmaWNhdGlvbnM= aXNlbGU= IOCkquCkpOCljeCksOCkleCkvuCksA== IOKEgw== xJvFmQ== INiv2KfYuQ== a25vd2xlZGdl LWVzdGVlbQ== 4Kqw4Kq+ 4K6x4K+N4K6x4K6/ IGhpc3TDsw== 5biu5Yqp IHN0YW1pbmE= 4piG4piG L2V2ZW50cw== ZHJhZnQ= IEVOVEVS IGdvZw== KyI8Lw== 4KWe IHJlY3VycmVudA== IHVuaWs= 0LvQvtGF IGNvaWxz INin2YTYsdis LWRlc2lnbmVk eXNrZQ== YWN0ZXJpYWw= IHRpbmhhbQ== V0VFTg== X3V0Zg== IGJpdg== IOC0leC1iA== SUxFUg== IE1hZ2dpZQ== IOCkquClgeCkqA== 2K/blQ== 15nXk9eZ INC60LvQuNC10L3RgtC+0LI= KT8KCg== IGd1aXRhcnM= YWZuYQ== INmI2KfZhNir IEFsZXhhbmRyaWE= 0LPQvtKz0Lg= IHLDqGc= YW1idWw= IG1laA== IOCwh+CwpuCwvw== 4LS+4LSZ4LWN4LSV cG9uZQ== IOCqueCqnA== IGNob2ly IGF0YXF1ZXM= IOCwteCwuOCxjeCwpA== YXlhcw== IM+Az4HOv8+C KGRpc3BhdGNo IEVuZ2Vscw== IFNvYXA= 0ro= INGD0LzQtdC90YzRiA== w6FzaQ== IGNoYXJhY3Rlcml6YXRpb24= IG11Yg== 5bGB IGRpbm9z ICInLCc= IG1hbnVzaWE= IGNhc3Nlcg== IEtsaW4= JCcs IER1Y2g= 6YC4 IE9jY3VwYXRpb25hbA== IOWkqeWkqeS4reW9qeelqOWPjOiJsueQgw== 4LCX4LGN4LCX DQ0= IGVtcGxvaQ== 0LjQu9OZ IHJlY2liaWRv U0VN IOCmleCnh+CmiQ== YWtrZXI= IOCkqOCkueClgA== Ym9sdA== IHRlcGF0 w7pzaWNh IFZpag== IOGDkOGDm+GDmOGDouGDneGDmw== YWphcmFu dW5laG1lbg== IFNjaGVkdWxlcg== xaFhbmE= 0LLQsNC20LA= Y2hhaW5z INGB0YbQtdC9 IGjJmXk= IHRlcnJpdA== Q2FuZGlkYXRlcw== IFdpcmt1bmc= PW15c3Fs b3hlbA== IGJhY2tib25l ICgoKg== YXJsdQ== IGVyb3Npb24= 4KeN4Kak4Ka+ IGZhY3Rpb24= X2NoYXJz INij2LnZhNmJ IFNlcsOh IOCqquCri+CqpOCqvuCqqOCrgA== INC00L7QutCw0Lc= IG5vdG9yaW91cw== enVyZQ== 0LjQu9Cw0LrRgtC4 dm9sdmVk IE11cWRpc2hv dWxsbw== X2hl IHV0aWxpc8Opcw== 4Liz4LiZ4Lin4LiZ 1aXWgNW/ IGxhbmdlbg== 0LjQu9C60LA= IGtpaXJl IEfDvG4= KGxpc3Rh INC/0LXRgNC10LLQvtC0 IOGDkOGDmQ== IHTJmXM= IG1hdGk= TE9TRUQ= PENhdGVnb3J5 UHJvdmlkZQ== 56qd IOCqtuCqleCqvuCqrw== IGZhc2ls IHZlcndhY2h0ZW4= IGFtZXJpY2Fubw== IFNlb3Vs IEJVWQ== IG9yYW4= 5riI IGJydW4= IOCkqOClgOCkmuClhw== X2d1YXJk xI1ldA== a2xh IOCmrOCngeCmsuCmvw== IEhpdHM= aG9yZQ== IG91bmNl IGJhaGthbg== IHV5Z3Vu INC/0YDQvtGG0LXRgdGB0LU= 1aHVotWh1bY= INC00LDRgg== IFNwZW5k INmI2LXZgQ== IGFpaGU= INGI0LDRgNGC 0J7Qmw== b3dhbg== 66+A LlN0dWRlbnQ= IGJsb3Q= IGtlbXVy IEFsbG93ZWQ= IO2MkOunpA== IHNib2JldA== 4KSv4KSC dXNlbGU= IEhldXRl 4LmJ4Lin4Lii a2luc29u IEZhbGNvbg== INio2LHYrtuM 4buBbQ== CVBsYXllcg== IGFydGlnb3M= INCz0LvQsNC30LA= 4Kqw4KuN4Kql LWFia2hhemlh IHByb2Zlc3Npb25z LmNoYXJhY3Rlcg== INC00YPRhdC+0LI= LWlscw== QmVhbQ== KCk7DQovLw== X1NZTkM= YmVuZWY= IOCksOCkvuCktg== IHN1amV0cw== IGxsZXbDsw== INC/0LXRgNGI IGxvZ3I= 0LXQsdC4 IHJvaGtlbQ== IGNvbmdlc3Rpb24= IGZsYXNoaW5n RVRFUlM= IHNpc2k= W3c= IG1hbnNpb24= IEhlYWRpbmc= INGB0LrRgNGL IHRoZW9sb2d5 0L7QvdCw0Lg= b2NoZW1pc3RyeQ== INmD2LDZhNmD LnRlc3Rpbmc= SW52ZW50 c3RhbmRz IHZvcmln 4oCT4oCT IHRveGljaXR5 2YTZhg== IHB1ZXJ0bw== IGdyYXBoaWNhbA== IFBlcm4= ICAgCQ== IOCwteCxjeCwr+CwleCxjeCwpA== YWZldHk= X0NvbnN0cnVjdA== 5rW0 IHJpYnM= IGluYWNjdXJhdGU= IGxlc3Q= LlZhcmlhYmxl 4LiX4LmM IG90b3Jn w6luZw== IGludGVudGFy Zmxk Znlu IC0qLQoK IHNlbXA= Lm1hcw== Jyld 0ZbRng== IGVuc3VyZWQ= dmVyYnM= IGluemljaHQ= INGC0Y3RgA== IGZlcnM= IGp1aWNlcw== IGRhcm4= Xygi IGVpc2luaQ== emlz IHRpZGxpZ2VyZQ== IHF1aXJreQ== 6JC95a6e INC/0LvRjw== IEh1bWFub3M= IG5lY2VzYXJpYQ== LWxhcw== IOC0teC0suC0v+C0rw== IHNhY2VyZA== LmJsaXQ= SlI= LEg= CVJ1bnRpbWU= IOCyruCyvuCysA== IHByZXN0YXRpb25z IGt1bmRlcg== LlRlc3Rz QVNB IGJhcA== 44Gr44Gk44GE44Gm IHRheHBheWVy X2RtYQ== IOGDmeGDleGDmg== INCy0YvQuQ== dWhl YWRvbA== IOCqleCqsOCqteCqvuCqqOCrgA== IHNwYW5uZW5k IFBhbmRh IHRyYW1w INiu2YjZhg== 5LiA6LW3 5Lit546L INWv1oA= IG1vbmd3ZQ== IEZpYg== IHN1ZWxlbg== INCe0YHQvtCx IGJhdHRpbmc= INin2K3Ys9in2LM= dmVybMOkc3M= IGFnb24= 15XXldei16g= VFo= Y2FzaW5v IGJyZXdpbmc= IEJlZMO8cg== 4oCc44CR44CQ 1bjVqQ== IGFwb3M= IHRhaW0= bW9t Sm9zaA== LmFyYw== 0YrQtdC8 IHF1eeG6v3Q= INC90LXQuNC3 4KS+4KSw4KWN4KSl IGNvbmNlYWxlZA== IGhlbHBsZXNz 2KrYp9it IGNpcmN1aXRv IEJFTA== U3RpY2s= RsO2cg== IOCquOCqvuCqsA== IGFxdWFyaXVt IMOpdmlkZW1tZW50 INCx06nQsw== IHJ5YQ== IHJlY2V0YQ== YW5jaW4= 0YLQuNGI KEFic3RyYWN0 INC00LXRgtC4 IGhlbW9ycg== b3Bm 6KeA55yL QW5udWFs VGVzdGltb25pYWxz IEJlcmQ= ImQ= am7Dqw== cHN5Y2g= 0LjRgtC10LvRjNGB0YLQstCw IGRlc2NhbnNv X2NoYXJ0 IHJhYmI= IHJhbm5z 4oCL4Z6b IFJpdmVyc2lkZQ== IGJpY2ljbGV0YQ== Y3JhZnRlZA== VFU= INWI1oI= 0YHRgtCy0LXQvdC90LDRjw== IOuCmO2DgA== 0LjRgtC10LvRj9C8 IGFyaXN0 IHRraW50ZXI= z4TOv8+Fz4HOsw== IEluY2x1cw== IOGDoeGDmOGDoeGDog== INGN0LrQtdC9 IHBlYWNo IFByZWRpY2F0ZQ== 4KSC4KSk4KSw IHZpY3Rvcmllcw== Z2VoZW5k IGl0YWxpYW5h IFRpZXJyYQ== IOC0huC0tuC1geC0quC0pOC1jeC0sA== IHJlY3JlYXRlZA== IExpbGxl IEFTQVA= IGFiaA== INC/0YDQtdGB0YE= 4LCw4LGN4LCl IG1pcmFkYQ== Y29udG8= IGNhcGl0YWxpemU= INmF2LLbjNiv IFBvdXJxdW9p INCU0L4= INGC0Y/QttC10Ls= IEJhZ3M= IHRpw6pu IGFudGlveGlkYW50cw== IHVuZXZlbg== 4YOQ4YOo4YOd4YOg4YOY4YOh Q2hhbmdpbmc= IFJlcXVlc3Rz IFdvcmtvdXQ= b3BwZW4= aXRpdm8= LS0tLS0tLS0tCg== IFJlbm8= IE7DrQ== IHRlcA== CWVudW0= IHBsYXN0aWNz REVDTEFSRQ== IHdpdGhkcmF3bg== Lm1lc2g= IEJNSQ== b21iaQ== 4LmE4Lir4LiZ 5q+O IG3DvMmZ 5Zub5YWt IHZvY2F0aW9uYWw= OnQ= IHZpb2zDqm5jaWE= aWRlbnRpZmllZA== QVRSSVg= IOGDouGDlOGDpQ== RWl0aGVy IHHJmQ== LW1lbWJlcg== UEVSVElFUw== RmM= IGRpZmZlcmVudGlhdGlvbg== z4TOuc6x INil2LnYp9iv2Kk= IGNyZW1h Q0hPT0w= X3doZXJl IERlcHQ= IE1pc2M= IFlvdSd2ZQ== Sk5J IENhbGxhYmxl QVBQRVI= IFN0cmF3 IGF2ZXZh 66a964uI64uk IG1laXJh 0JDQtw== IG3JmWx1bWF0 IGRheno= IGVyYWQ= 4Z+C4Z6A IG1vc3M= IOCqnOCqlw== 4LKh4LK/4LKv IFdlc2xleQ== IHTDpHpl IGdydW50 bWVyeg== eWVs IHN1bnJpc2U= L2Ry IHZvZQ== IGdlZmFsbGVu IG5vcnRoZWFzdA== INCY0Lw= IHRhY3RpYw== IMO8emVyZQ== IHBvZXRz 0rfQuNC6 YmxvZ3M= 5oCn5Lqk IEZvdW5kZWQ= PicrCg== ImA= c3BlbA== 66ee 0YvStQ== 0LvRj9GF Lkhvcml6b250YWw= IE1vdG9yb2xh YW1pYQ== VmlzaXRlZA== 4oCZb3JnYW4= INio2pHavg== IGluaWNpYQ== 5YWz6ZSu6K+N IGhlcm9pbg== IHByb3Bvc2Vz IGRlZmluaXRpdg== IHdldHQ= IHNhbml0eQ== IGJpbGxlZA== LWVtYWls IGJobw== IGh1Z3M= IEhpbnM= IFNUVUQ= INCf0LDRgA== IHJlbGFjaW9uYWRv IGFzaGFtZWQ= IHNhdnZ5 IE9yYQ== YW5ub25zZXI= IGV5aXRp LmNt IM+Dz4XOvM6y 4LmA4Lie4Li04LmI4Lih 4LK+4LKw4LON4LKl INC80LXQutGD0L3QsNC90LQ= IEZvcmdvdA== Qmlhcw== 2oc= X3RlbQ== IHRpbmg= Pi8v 4LKo4LOG4LKv INin2YTYrNiy2KfYptix fXB4 RnVydGhlcm1vcmU= IHNlbGVjdHM= YWvEsQ== 4LCv4LCC4LCy4LGL 44GZ44GZ44KB IHV0w6Fu LWRlbMOg aWNhcmU= IEJlcm0= IEVtYmFzc3k= IEdyYW5hZGE= IG5hY2lvbmFsZXM= 4LeP4La74LeK IGRlbHV4ZQ== 57y0 U3Rvcmllcw== IEFkbWluaXN0cmFjacOzbg== LWJv IOmYsw== IGVydmFyaW5nZW4= IGhhdGg= 0LXSsw== bGlnbmU= LkNoYXQ= 4pi0 INCw0L3Ri9Kb fn4KCg== INWk1aHVvQ== ICJ7fQ== c3RpdGlhbA== U3Rlcg== INGF0L7Ssw== IOeG R3Vlc3Rz IG5vbcOpcw== INGD0LrRgNCw0LjQvQ== INiz2qnYqtuS IG1pc2Vz INin2YTYrdix2Kg= IGLDoG4= IHBvbMOtY2lh IOGDm+GDkOGDoOGDlw== dHJhdmVs 4Ka+4Kay4KeA KCJe 2YXZg9mG IENoaWVmcw== LXJlY29yZA== X0dBTUU= INeQ15nXqg== IOCkluClhw== KEJ5dGU= 4KaV4Kew Vm9pY2k= 0YPQsNC/ IOCkuOCljeCkteCkpA== IFBlbGw= 7Iqk7YWc IFNwb25zb3I= IEluaGFsdA== IGNvY2FpbmU= INCR0LXQu9Cw0YDRg9GB0Yw= IOCqpOCqquCqvuCquA== 0LDQstCw0L3QtA== IOep 6L6F5Yqp 4KS+4KSh4KWA IGhlcmQ= Ii4kXw== IOyj IHRyYWM= 4pWQ4pWQ4pWQ4pWQ IGJhZ2dhZ2U= IEh2 IOCwheCwqOCxhw== IOCkuOCkvuCkruCkvuCkqOCljeCkrw== LWluc3Q= bmNweQ== IHNlw7Fvcg== IHRpdHM= IOC0teC1h+C0o+C1jeC0nw== IOGDpeGDkOGDoOGDl+GDleGDlOGDmg== IFNhY2hlbg== INiv2YrZhg== QmFzZWxpbmU= CXB0aHJlYWQ= IHBvdWw= IGNoZWVyZnVs aWRoZWFu aXZy X2NvZGVz 4Ka/4Kaj LkRlY2ltYWw= z4HOsc66 IHRyYW5zZm9ybWF0aW9ucw== IG5vZW1lbg== ICIiLg== LkNoaWxkcmVu d2FyZWhvdXNl IOi0tQ== IFBQQw== 4KS+4KSH4KSh KFBSTw== aXBlcnM= 55m95bCP5aeQ 0YLQuNGH IHdhdg== IEV1cm9z IHNwZWNp INio2LHYp9io2LE= IOCqleCqsOCrjeCqr+Cqvg== U3dpZnQ= IHVpdHZvZXJpbmc= IHNvYnJldml2 RlRQ IGxvY2F0aW5n INWv1aHWgNWj 5Yud ZmFzc3VuZw== INC/0YDQtdC00LvQsNCz0LDQtdGC IENoYXF1ZQ== SW50ZW5zaXR5 IEF2ZW5nZXJz INC40L3QvtGB0YLRgNCw0L0= 4KeB4Ka4 IHN0dW5uZWQ= eXN6ZXI= 2LHYtA== YWxhbWk= wqDCoMKgwqDCoMKgwqDCoA== IGNvcnJlZA== bHNh INC00LXQvdC10LY= IGtuag== IGNoYW50ZQ== IG1pbmVycw== IHZlcnRpY2FsbHk= IOeR IGJlZ2l0dQ== IGFtw6lyaWNhaW4= IFRlY2huaWNpYW4= 5omR5YWL IHJlY29n IHdpcmt0 2pjbjA== IOCmnQ== INin24HZhQ== INi52YTZitmD2YU= INC80LXQutGC0LXQvw== IHVtcw== IGVucXVpcnk= LmFzYXJyYXk= INCh0LvQtdC0 LXByZW0= IHBsdW1iZXI= YW5kYXI= X3BhZGRpbmc= LOS4gOacrOmBkw== Z2JhYXI= SElQ IGNvbGxv ZnJlcXVlbmN5 oOiPnA== IEd1bA== IOCkrOCkoeCkvOCkvg== INmF2LTaqQ== IERhbmk= INGB0LXQvNGM0Lg= 15nXqdeZ aW5uaWU= IFNJTA== c3BpcmU= IHRoaWdocw== IEJvb2ttYXJr 4Z+k IHZva3NuZQ== IOGDkuGDkOGDk+GDkOGDrOGDp+GDleGDlOGDog== IE1hc3NpdmU= LmhhbWNyZXN0 KCcvOg== LmRlZmF1bHRz LmxvYWRlcg== ICIpKQo= 1brVq9W91as= IE9yaQ== bmVp INC/0YDQuNC80LXRgNC90L4= IGVwb2Nocw== IHZlbG1p IHRleQ== 4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU IE9wcw== INiq2LrbjNuM2LE= INGB0LXQt9C+0L0= INCy0LjQvw== IG5lZWRsZXM= b2RuaQ== IGJldGFsaW5n IGRpZmljdWxkYWRlcw== 0LXQvNGB0Y8= IGNvdXJ0ZW91cw== IOCmheCmqw== IG1wbw== 5a625bqt JHBkZg== IHJldXNhYmxl RmFjdG9yaWVz IEludWl0 IHZpZW5uZW50 ICAgICAgICAgICAgICAgICAgIAo= 0L7QtNC10LnRgdGC0LI= IGxhdWZlbg== IFRvbGVkbw== b3V0cHV0cw== IGJpYmxpb3RlY2E= IFNvZmlh IENvbXBhdGlibGU= IENoZXZ5 PSIvLw== IHdpcnN0 emXFmw== INC00LfRjw== 0YDQvtCy0LXRgA== 4YOd4YOc4YOd4YOb IENvbXByZWhlbnNpdmU= UHJvamVjdGlsZQ== UklFTkQ= dGVycmFpbg== bmhvZg== toE= IE5lZ2F0aXZl IHBpc29ydA== IHNvdGk= IGFydGVyeQ== INC90L7Qtg== IHRhbmdnYWw= INCx0LDRiNC60LA= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvdXJzZXdvcms= 4KeH4Ka34KeN4Kaf4Ka+ Lm9wYWNpdHk= IGRpdmlkaW5n TnVtcw== IEluZ3JlZGllbnRz 4LeE4LeS INWw1aHVtdW/1bY= IE5hY2hyaWNodGVu IHByZXZlbmly IGFsdGlk L2dwbA== INeU158= IEhvcm0= aXJ0ZQ== 0ZbQvdGL IOCwruCxiuCwpg== IE92 LXBvaW50ZXI= 4LKz4LK/ IEFsZ2Vy 4YOk4YOU4YOg X1NDQUxF IGZsaW5r IGRvbWluYW5jZQ== INi52K/Yp9mE2Ko= INCw0LnQvQ== IGl6YW5nbw== aXRpZg== IHJlY3JlYXRl 56uL5Y2z INin2YTYo9mD2KvYsQ== IHByw6Q= IGJlbmRpbmc= QWxnbw== VmVudA== X0ZPTlQ= 0YPQsNC3 IGV0ZGk= U2V2ZXJpdHk= 15DXmdea INiu2K/Zhdiq IG5lcXVl aWNpdHk= IGRvbGFy IGxvY29t LnBlcnNpc3Q= aWFuYXM= 2LnZhNmG2Ko= UHJvZ3JhbW1pbmc= IHF1ZXJlbQ== IHN0YXRpc3RpY2FsbHk= cmVzdHJpY3RlZA== 4Kqm4Kq+4Kqw KG5vbmF0b21pYw== VHA= 5aaC5q2k IHVsdGlt IM66zqzPgM6/ IHB1cmNoYXNlcg== IGRpYWJldGlj emVl dmVydGluZw== IOCmleCngA== 24zYtNmH 4bq54bq5 4LOI4LK4 X3Jldmlldw== UGFydGljaXBhbnRz 0rvQuNC8 IFNjaG0= 5b2p56Wo55u05bGe IHVuYWJo IG5naOG7hw== IFZhdWx0 552h 5LiK5LiA IGRpc3RyaWJ1dGluZw== IGluZm9ybWFy IENlbGVicmF0aW9u IGFmZmlsaWF0aW9u IGVyd2FydGVu dXJ0bGVz aW1hc3V0 INiq2YbZh9in J2Vzcw== 4YOQ4YOV4YOQ4YOa4YOY IHBpcmU= IOGDoOGDneGDm+GDmuGDmOGDoQ== INWM1bjWgtW9 PSInLg== LmNsaWVudHM= LmxpdmU= Vm9sdGFnZQ== IOCkoeCljeCksA== KGRlYnVn 4Li04Lib 57uR5a6a 4Z+S4Z6L X0lOSVRJQUw= aGlxaXpv 0L7QudGH0LjQsg== IENhZXNhcg== IHJlc3Rvcg== d29o IEZ1bmN0aW9uYWw= RGlu LWRlbGV0ZQ== IHNlcmVu RGF2ZQ== IFJpdA== IGRlaXhl IHdhY2g= LlJlZGlyZWN0 b3JtYXA= IGNhbmFk IOCwheCwpg== Y2xhaW1z IFNlcnJh CXN5c3RlbQ== 5a2V IHNlbmF0b3I= IGzDrXF1aWRv INin2YTYrdmK2Yg= IGZyYXVlbg== X1Rpcw== IGRpbmVy 4LSv4LWG 4Kqu4Kq+4KqC4Kql4KuA KTtc IGFsZXM= IGFnaXI= IHNpdHXDqWU= INC/0YDQtdC00L/RgNC40L3QuNC8 IE1hcnTDrQ== w6R1bQ== IHp2ZQ== IGV0aGFu 2K3YqtmJ X1BBUkVOVA== IGltcHJpbQ== INC00L7Qv9C+0LvQvQ== IGd1bGw= aW5kYXdv IG5vdGlvbnM= INio2YE= INiz2KjZitmE IG5ldHM= b3B1ZXJ0bw== IEJyYW4= LlVubG9jaw== 15nXmdeb IEdlc2FtdA== IMOHYQ== Lm9wZXJhdGlvbg== INiz2KfYpg== 0LTQsNGD IHJlbmRlcnM= 77yaaHR0cA== 6Zi1 IOCwteCwv+Cwpg== b3JpYXNpcw== IGlwbw== IG1laW9z bnV0cw== IOCkmOCli+Ckt+Cko+Ckvg== aXBsYXllcg== w6Rtw6TDpG4= IFNhbG1vbg== INC80LDRgdGC0LXRgA== INmE2YjZhQ== dmVyc3TDpG5kbGljaA== INWV X2J1dHRvbnM= IOCkuOClgeCkpw== L2Js INen15g= IGF2ZW51ZQ== INee16fXlded 4LC+4LCC4LCX IGdld2ljaHQ= IEludmVudA== IHJldGk= 1rA= U3VidGl0bGU= IHRpdGFuaXVt zr3Ov8+N QXJhYg== IEplaG92YQ== SW1wcm8= IEV2ZXJ5Ym9keQ== IjpbIg== PSIjIj4K IOCkquCksOCkv+Ckow== IGNhbmNpb25lcw== LmRpc2Nvbm5lY3Q= IHN0ZXJpbA== IENhdGFy IHByZWRpY3Rpbmc= IGtvZGU= cm9iYXQ= IOCwruCwguCwmg== IGltcHVsc2U= IERpdmVyc2l0eQ== IEF1am91cmQ= IGNvbnN1bHRhdGlvbnM= IG1qw7Zn b2hp YW5pbmc= IFZvcw== IGdyYXZpZA== IO2XiA== IG1hZ2dpb3I= 15fXldef INWG1aE= IGJ1ZHU= INCc05k= IEl0YWxpZW4= IGZhbGFuZG8= ZmZvcmQ= LlZhcg== xJ9sdQ== X0lOU1RBTkNF IGludMOpcmVzc2FudA== IEpveWNl IOCktuClgA== 2YPZitiv IOC0leC0pQ== VW5peA== IHhzaQ== INGI0LrQvtC70Ys= IOG7jWvhu6U= cnVpdHM= PigpLA== LHN0cg== INeR157Xp9eV150= IGVtaXNz ICAg44CA IGNvbmNlaXZlZA== 0YbRi9GO IHNlcnZpemlv RWNvbm9t cmV3YXJk IMO2xJ9y IG1haWthyrtp KyspOwo= IEZBRlNB 4LKo4LK+4LKh 2KjYp9i0 ZW5kZW5jeQ== IGludGVycGVyc29uYWw= IEx1Zw== UmVsYXRpb25z IGFwcGxh IG3DqXRob2Rlcw== UHJpbnRm KG5hbWVk INiz2YrZhg== b2ls X1Jl 0YLQsNGe INGC0LXRgNGA X0hFTFA= IHJpc3BldHRv dW1ibGluZw== aW10 IGluc3VyZXJz IOCkqOCksA== IGFtYnVsYW5jZQ== INGB0L/QtdC60YI= IOCkruCkvuCkuA== IHRlYW1lZA== IOCkleClgeCkruCkvuCksA== INGA0LXQtNCw0Lo= CWls IGRlc2Nvbm9j RU5DSUE= 4YOQ4YOr4YOU IExlbmc= IExFRHM= LmJhbms= IGNvbGVjY2nDs24= IHdpcGVk 4YOh4YOQ4YOu4YOj4YOg IOC4geC4seC4mg== VUludGVnZXI= Q3Vt 2KrYtA== IGJvc3Nlcw== 2YbYr9in2YY= CQkgICAgICAgIA== IGRlaG9ycw== IGtpbG9tZXRyZXM= 4YCs4YCA4YC5 dGhlbWVz 4YOY4YOc4YOd 1bjWgtWq 55Om IOCkrOCkpOCkvg== Lk1lc2g= IGxhd3N1aXRz T0xVTUU= KGNoYW5nZQ== Lm5vbg== 7LyT INee16DXlA== dWdhZGE= IFByw6lzaWRlbnQ= IGFuYXRvbXk= IMOldA== IHZpc2lvbnM= dHJhYg== 4YOh4YOQ4YOl IFBlYg== 5b2p56Wo5Li7566h IFRlbHVndQ== dGVzdGU= UkVUVVJO d293 c2hvcHBpbmc= IGNyZW1l IOOCseODvOOCuQ== IMOhaw== 4KSu4KWH4KSC4KSf IOC4ouC4tOC4hw== IOCkquClgOCkmw== U1E= 5oyJ54Wn KGFj IERhaGVy INin2YbYr9ix RmFsbGJhY2s= IHBlcm1hbmVjZXI= aWduw6k= IOCmruCnjeCmrw== w6dpbA== IG9iamVjdGlvbg== IHJhbmRvbWl6ZWQ= KHhwYXRo IHBpZ2U= IHBvdXJyYWllbnQ= IFFPYmplY3Q= J29y 55g= aGVjeQ== IOWPkeW4g+aXtumXtA== Lm1lbQ== IOCwh+CwguCwnw== IGZ1bmdlcg== RGlyZWN0b3JpZXM= X2FueQ== IHVubWF0Y2hlZA== 0L7QvNC40L3QsA== IEF5cg== LkF1ZGlv IEhpbWFs IFN0YXJ0ZXI= INin2LHYsg== IENoYW9z TWFuaXA= IHRy4buxYw== LmNvbnRyb2xsZXJz IHZhbmc= IGJhdGFs 4Li14Lis4Liy LkFuaW1hdGlvbg== X2Zpbg== 0q3QsNCw LXBhY2tlZA== LWFjY291bnQ= IHN0cmF0ZWdpZQ== J2FjY29yZA== LS07DQo= Zm9yY2Vz IHByw6ljaXNl IG9jdXJyZQ== IOCkruClgeCkuA== IOCqteCrjeCqr+CqleCrjeCqpOCqvw== 4YCx4YCQ4YC8 IOC0quC1jeC0sOC0uOC0v+C0oeC0qOC1jeC0seC1jQ== YcOxYXM= IGNvbnRyYWN0aW5n CWljb24= IE1hZ2E= LWphcmlnZQ== INC90LDRiNCw SU5ERVg= IOC0h+C0quC1jeC0quC1iw== 5b2p56Wo5byA5Y+3 X05FWFQ= IGZlcnY= 2YXZiNqW 4KWN4KSV4KS/ 656c65Oc 5Y2B5LqM IGNvdW50ZXJwYXJ0 2YjYr9uM TWFjaA== IHF1ZXJpZG8= U0VS IHZveWV1cg== b3JiZW4= INC+0YLQt9GL0LI= INiq2LXZhtmK2Lk= 1avVuNW2 IFRyw6hz IE9maWNpYWw= 0LvQuNGH0LXRgQ== LmRlbGF5 Lk1ldGFkYXRh IHdhbmRlcmluZw== LWRlc2NyaXB0aW9u bW96 IG1peGVz IOCkm+Cli+CkoeCkvA== 0L7RgNOj INW61aHVv9Wh1b3VrdWh1bY= cm9tZW4= IGNhbGN1bGFy INCy0YvQs9C+0LQ= CWZpbHRlcg== IEZyYW5rZW4= LnBhbGV0dGU= 24jZhg== ZXTDpMOkbg== YXNzYXI= w6lkaWVudHM= IEFwdA== IGJvb2RzY2g= dmVyc2libGU= 4LiZ4Lix4LmJ4LiZ IHRhY2tsZXM= IOadjg== IFBlbmFs IFRyYXVt U2Vi IFJldGlyZW1lbnQ= IHZhcmpl Ij4qPC8= INC00Y3RjdGA IHRyw6Fz IG5vdGFy CUVuZA== IHd1bmRlcnNjaA== INC30LDRgdGC0LDQsg== U3RvcmVz 4LWL4LSj 0ZbQvdC00LXQs9GW IOCmoOCmv+CmlQ== IHNvY2nDqXTDqXM= IGhlYQ== INCy0ZbQvQ== IGFycmU= IGNvbnN0aXR1Y2lvbmFs IGV4YXRhbWVudGU= 0LrQsNC6 IGtvc3Rlbmxvc2U= w6l0YWlyZXM= X2dvb2dsZQ== 5LiA57qn54m56buE5aSn54mH IOCmruCni+CnsA== IGF1c2dlc3RhdHRldA== 5b2T5YmN5L2N572u IOCwpOCxhuCwsuCwv+CwquCwvuCwsOCxgQ== IOGDl+GDkOGDleGDmOGDoeGDmA== IHNwaW5hY2g= IOuzgOqyvQ== IGVzY2VuYQ== LnZlcnRleA== 4KuL4Kqh4KuA J00= IOCkhuCklQ== INWv1aHVvNWh1b7VodaA IHZp4bq/dA== IOaKleeov+aXpQ== IOCmruCngeCmleCnjeCmpA== 4KeH4Kau4Kao IFdSSVRF LXJlYWR5 VHV0b3JpYWw= ZXJ0aWQ= PykKCg== IGRveg== IHsKCi8v IGTDqXRhaWw= X0xFRA== IOS/nQ== IOODjw== 6aKR6YGT IHByZWRpY3RpdmU= 6aqo 4oCcTm8= IHjDonk= 4Kup 6K6A In0sDQo= 4Lir4Li44LmJ4LiZ 6aqX5a2Q REVTQ1JJUFRJT04= w6HFmQ== 6KeG6aKR5Zyo57q/5pKt5pS+ X1VTRVJOQU1F 4LGG4LCV4LGN4LCf IHNrZXB0aWNhbA== QU1FTlRP IFRIRVk= 15DWt9eT IH19Ij48Lw== LVBs W0I= IOa9 0L3QuNGB0YI= IFphaGxlbg== IGZhaXJuZXNz IGxvbmdpdHVkaW5hbA== IGFwcG9ydGVy IEJpbm5lbg== Y2FwdHVyZQ== IG9ta3Jpbmc= IHZpZGVvZXI= IGFwcGFyZWlscw== IGF0dGlj IGtpbm5l IOC3hOC3kA== dXRvYQ== U2VpdA== INCy0LjQtNC+0LI= IFRhc3M= IOCyueCziuCysA== INeg16E= CWZyb20= IENpbmVt TmVpZ2hib3Jz IOeLoOeLoA== IHRvbmVsYWRhcw== IOaymQ== IE9ydGhvZG94 IE1vcm9jY28= IFBST0NFU1M= IOCyleCziA== dWN1bWJlcg== QU5OT1Q= RVRJTUU= IFRhdHRvbw== QUZG IGRlc3BsYXo= 4K6p4K+N4K6p4K+I ZsO8aHJlbg== IGdvbw== YWZ4 bHVndQ== IHV0aWxpemFu X2V4YW1wbGU= INC/0LXRgNC10YHRgg== IFtdKQ== IHNjdWxwdHVyZXM= INCx0YPQtNC1 Lm15c3Fs emVpY2hudW5n X2J1Y2tldA== IG5pdG9yaQ== X0VPTA== cmFzY2g= bmnEmQ== IGhlc2Fi 0YfRgtC+ dmltYm8= 4LK+4LKo4LON 5bu656uL IOazog== IG3DvG1r IG9jb3JyZXI= IOe3qA== 0LvRj9GC0YzRgdGP INSx1bY= IFdlbGNoZQ== 64G8 LdGA b2xsaWRlcg== 0YPQu9GM0YLRg9GA0LA= S0M= IEJyYXNz YWNleQ== 2YnarQ== KHNpZGU= IHRhcHBpbmc= aW1haQ== IHZpYg== IENvbm5lY3Rvcg== c29l X2RpYw== KENPTkZJRw== IGJldGVrZW4= 0JDQmg== IHZlcmVpbg== IFJlZmVyZW5jZXM= xI1uxJs= 0L3Ri9C80LXQvQ== xJ1pcw== IOCmheCmreCmv+Cmr+Cni+Cmlw== IMO2ZmZlbnRsaWNoZW4= IGFtbW9u IG1pYWth TlVNWA== IHZlcmdlc3Nlbg== IGdlc3RhcnQ= 0LzQsNGF 6YWN572u Q29tcGw= IM60zrfOvM65 Y2llbnM= 1bjWgw== IMOpbGV2w6k= a29tdA== INmI2pg= ZWRlcnM= INiv2KfYrg== IGxhbmRldA== w6FydA== IGNvdW50ZXJ0b3Bz IGJlemVpY2huZXQ= 0YPRgNOv IER1cmhhbQ== IHNjb3A= 4LmB4LiC IFBlcnNvbmFsbHk= KEd1aWQ= IGhhbGE= w7PFvA== IG94aWRhdGlvbg== IFJlZ2llcnVuZw== IE1pdHN1YmlzaGk= IG11dHVhbGx5 IGZhbWlsaQ== 5aSu6KeG IEluaXRpYWxpemF0aW9u 5bmz5Y+w5Luj55CG IGJlYXJk U3Bhcms= IENDVFY= IHJldmFu IE9iamVjdGl2ZQ== INC+0YLQt9GL0LLRiw== IOGDkeGDlOGDleGDoOGDmA== X0JPT0xFQU4= w6lnZQ== IHZhcmlhYmlsaXR5 XSgpCg== 2YXYrA== 0LjQstCw0Y7RgtGB0Y8= 4Lid4LmI4Liy4Lii INqp2LM= 5rWB5rC0 aWt3YWxhaG8= LWJlZHJvb20= aGVkZXI= IOuwne2YlOuLpA== IEFnZ3JlZ2F0ZQ== INee15XXnA== IGFjbA== IGNhcmdhcg== IEhBTkQ= TEVZ YWt3YQ== IHPDvGQ= IEJ5cg== T3JnYW5pc2F0aW9u INiv2r4= IGNvbG9jYQ== INin2YTYqNmG2KfYoQ== eG0= xZllYg== LmJlc3Q= INin2YTZhti1 bWVya2luZw== IFBhZGE= IExpYnJhcmllcw== IENPVVI= IHRpY2tlcg== INGP0qM= IERvcmY= IHBhbm9yYW1pYw== UHJvYmFiaWxpdHk= IEFzdG9u 5pS25YWl CQoJCgkK Y3VsYXRlZA== ICd9JzsK IExhdWQ= IOWkp+WPkeW/q+S4ieaAjuS5iA== IOCkmuCksOCljeCkmuCkvg== YWzEsWs= IHN2ZW5zaw== IHRvc3NlZA== INC/0LDRgNGD IFJlc3RvcmF0aW9u ICcnOw== YWhyZW5oZWl0 Z2VyaWVz IGTEl2w= 4KWN4KSo4KWA 2K7Zgdi2 aW5pc2Vr IHJvZ2g= IGFwcHJlaA== IENyaQ== IHBlcXVlbmFz IEN1cnJpY3VsdW0= IHBvc2l0aXZlcw== X0RJU1Q= IGVudHNwcmVjaGVuZA== bcOpbnk= 0L7Rh9C10Lo= IGtvbm5lbg== IGVudHLDqWU= cGFnZXI= INGD0YDQvtCy0L3QtQ== TW9kZWxv IE1ldHJpY3M= IG50bGU= IOCktuCliw== LmluY3JlbWVudA== Oklz IHRpbWVmcmFtZQ== IHpvbmtl INiq2LrZig== dGVpcw== IHJlc3BlY3RpdmFtZW50ZQ== IHZpZXdwb2ludA== IHByb3B1ZXN0YXM= IFBhcm0= IGZhc2Npbg== IHZsb2Vy IHJlbWluZGVycw== INin2YTZhtio2Yo= Om5ldw== LW1lZA== IE13ZW4= aW50ZXN0aW5hbA== YXV0aGVudGljYXRpb24= IFByZXZpb3VzbHk= IERlY29yYXRpb24= IE1laA== IGRlc2NlbmRhbnRz IERlc2Vudm9sdmltZW50bw== IHRlaWx3ZWlzZQ== IOykgOu5hA== INeV16E= IG5hdGlu IFRMUw== IGxhcHNl Z2VicmFjaHQ= aXJhw6fDo28= INCx0Yo= IG1lbnRhbGl0eQ== IGZpY2Ft KGV4dA== 4KaV4Kau 4oCZYW1vdXI= 4LKk4LKo LHdpZHRo IHlhcmF0 1aHVr9aB1bjWgtWp1bXVodW2 IHdpZXI= PVtdOwo= IG1hcmtldGVy IE5QUg== 4Kur INWw1aHVttWj 4oCZaW5mb3JtYXRpb24= 5rex5Zyz LWNvbnN1bWluZw== IOC2heC2tA== aXNtZXM= IHN1c28= IGFwcGw= IHNldHRsZW1lbnRz cGFnaW5hdGU= IHdlbnM= IHdpcnRzY2hhZnQ= L2l0ZW0= IHNlYmFn IHBsZXRob3Jh IG1lbWJlcmk= ICcnKS4= w7xuZnQ= INC90LXQtNC10LvQuA== IGRpdmlkZXI= Jmlk INii2LLYp9iv IOCmuOCmruCnjeCmquCmvuCmpuCmlQ== SW5qZWN0b3I= aXRvcmlvcw== IOGDouGDoA== IGJyaWRhbA== INin2YTYt9mE2Kg= IGRyaW5rZW4= IM+Hz4HPjM69zrnOsQ== a2lkcw== Q2hpZWY= LdGI IO4= aWVsYQ== LdC4 4Kq14Kq+4Kqo4Kq+ IHJlcGVhdHM= IM+O X1JlbQ== SVpFUg== IGRpcmVjdGl2ZXM= IG5vdHdlbmRpZw== IHRodeG6rXQ= KGxzdA== KGRlbA== IGphcnM= IGNvbWlnbw== ZnBz X3N0eWxlcw== IHBubA== IGRlZWRz INCx0LXSmQ== Y3NvbA== IHJvY2t5 IHJldmlld2Vy IOGDmeGDkOGDnA== INC/0YDQtdGB TmVpZ2hib3I= L29w IEh1Z2g= V2lzZQ== IOCqteCqv+CqtuCrjeCqtQ== 55m66YCB IEVzc2V4 4YOQ4YOb4YOQ4YOg4YOX4YOa PFBlcnNvbg== IHRyaXR1cmFjacOzbg== IGdlbmVyb3NpdHk= INin2YTZhdmI2KzZiNiv IG1lbmE= IGludHVpdGlvbg== bnVuZ2Vu IGJhYnlz cnXEjQ== IOCktuCklQ== IHBvZGxl LnJhdGluZw== IGdyYXZh 4Kqs4KqC4Kqn IHdhcnJpb3Jz 5LmL6Ze0 Lm11bHRpcGx5 IO2ajOybkA== IOCkrOCkqOCkvuCkjw== LmxpbnNwYWNl IOCoteCpgA== INCw0pvRiw== T2JqZXQ= IOiiqw== IGF0dGVpbmRyZQ== IHdhcnI= X2xpYnJhcnk= IGNyaXRpcXVlcw== IE1law== VW5hdXRob3JpemVk IHNvdXJjaW5n INin2YHYttmE INGB0YDQsNCy0L0= 4LmB4LiZ 2YfZitix IHFoaWE= bG9yZHM= IHZvb3J1aXQ= 0LTQsNGe IFdFRUs= IGZvcm8= YXZhanU= INCy0YvRgg== aWZpw6lz IFNBVkU= IHVud2luZA== 0pPTmdGC INCh0L7QvQ== IHZlcmxhc3Nlbg== Y3VydmU= IOCqhuCqteCrh+Cqsg== IHBlcm1pdGlyw6E= IOCqieCqrg== 6rw= IG1hZGE= dW5hbWU= LWZvcndhcmQ= SlY= IGdlbGnFnw== RXVyb3BlYW4= IOCqruCrgeCqnOCqrA== LHNldA== UmV0YWls IE1hw59uYWhtZW4= cGhhcw== IOCkreCktQ== 4KaX4Kak IGNhcHRpdmF0aW5n IOaa INGC0YPRgNCz0LDQvQ== IERvY3M= IE5hdMO8cmxpY2g= YXJiZWl0ZXQ= IOCwquCxjeCwsOCwnA== am9uZw== IHBhcmZ1bQ== IG3huq90 IGRlaHlkcg== IOC0heC0qOC1jeC0teC1h+C0tw== KHNpbQ== YW1vcg== IHBvcGNvcm4= 0YvQu9Cw0YDRiw== 0LDQu9C+0LjRgg== IGZlcnRpZw== IOCkh+CkguCkn+CksA== IOCkqOCkr+CkvuCkgQ== U3BlYWtlcg== IEplc3Q= ZXRpdGU= 5pWw57uE ZXhhbw== IG5ld2xpbmU= 7J6l7J2E IFNoZW4= IGFub3Q= 2LHYp9is2Lk= Pyks IOCknOCkv+CksuCkvg== IHnDqW4= IHJpY2E= InN0cmluZ3M= LnNjYXR0ZXI= IGVsZWN0cm9kZQ== IPE= 6I6x YXJhbmph IGxlbWJyYXI= YDo= IEV2YWx1YXRl IHZlcnNwcmU= CWl0ZW1z IGzDumM= SW50ZXJhY3RpdmU= YW1waWw= 0LXQstC+0LPQvg== dHJhY2tz IGRyb29n Jm9hY3V0ZQ== dWNrbGU= IHZlcsOwaQ== 4KSj4KS+4KSw 4KqV4Kq+ Rm9yZA== IG5sYQ== aXRhZHM= X21ldHJpYw== IGxpeQ== IFRpZw== 44GT44KT44Gr44Gh44Gv aWVnYQ== QURF w61waW8= INeQ15nXnQ== aWNpb25hcg== INeU157Xpw== YWlyb2Jp IG11dGU= bGFtYWs= IHNjaGE= INC00LXRgQ== IE5PUg== IENvbWVudA== IGNyb3NzZXM= LXRyYXNo Ils= IOCknOCkvuCklw== aW5zdGFncmFt IE1hdw== IGV0aWFt IE5vcmZvbGs= INin2YbYqtmH INiz2YrYsQ== IHBsdWdz IGR1YmI= IHJlZmVyZW50ZQ== IHF1ZWRhcg== IFJBVw== LXB1cnBvc2U= IOuPmeyViA== Ligq IHRvcm1lbnQ= INqv2LDYtNiq2Yc= c3VnZ2VzdA== c3R3bw== LXdzag== JykpDQo= Pk5v L29mZg== 2K3ZhA== IHd5cA== INmK2LnYqtio2LE= INWh1b3VpdWs IGTDqA== IOCkquCljeCksOCkleCljeCksA== 4LiV4LmJ4LiZ 4LCy4LCo4LGB IGVudmlhZG8= 0YvRgtGD IGRhbWE= IGVxdWlwYQ== IEJhYmE= IGZ3eQ== IM6zzr3PiQ== KGNzdg== IEhPU1Q= IHN0YXJlZA== IGZhdG9yZXM= 0ZbQvdC90Y8= IOG7jWR1bg== IHJldmllbnQ= IM+Fz4DPjA== IGx1cGE= ICR7KHs= ZmluYW5jZQ== INC10LLRgNC+0L8= IHNvbnI= 4buVbmc= 0LXQvdC60L4= IE91dHN0YW5kaW5n IHJlaWNo R2xhc3M= IGNpbmM= IFNURVA= 2KrZhdio2LE= IOuzhA== XCI+PC8= YmVhbQ== IHdpxJlrcw== INGE0LDQutGC INW61aHVt9W/1brVodW2 IGphcmTDrW4= IENvbWJpbmVk 0LXSmdC805nRgg== ZXJyaQ== IGltcHJlc2NpbmQ= 2YbYr9mC cGVyaWVuY2U= 44Gn44GX44Gf b3RvcGU= INqv2o8= IM+Ez4HPjA== IE1hc3Q= IOqwlg== Z2l2 c2xlZA== bGFrZQ== IHBvc2xvdg== IHnDtm5ldA== LnNwaQ== 1aHVptWj1aHVtdWr1bY= 4KS/4KSy4KWA IEFyYmVpdGVu IOGDm+GDneGDkw== ZGFw 4Kaq4Ka/ IEFuaW1hdG9y IENocmlzdGluYQ== IFBlbWI= IGFzc29ydGltZW50 IHNwYXJrZWQ= 0L7RgdGC0YzRjg== cXFpc3M= 4LKf4LON4LKf4LOB IOCmieCmquCmuOCnjeCmpeCmv+CmpA== 4bmF IFRpZW5l 6L6+5Yiw IGJldGU= IG5kw6ty IG1vcnRnYWdlcw== emVsYQ== 5LiW57qq IHZ1b25uYQ== IHNjcmVlbnNob3Rz IGZlbG9ueQ== LU1hcnQ= IEFsbG93cw== X21vbml0b3I= IOCmrOCmvuCmrA== IOCyleCziw== LnB0cg== IGhhdWpsd20= yZlzaW5pbg== IG9jY3VwYW5jeQ== cGzDpHR6ZQ== IHZvbGxleWJhbGw= CW1hdGNo ID8iLA== VG9kYXkncw== 4KS54KWB R2VvbQ== IEpvaGFubg== IHJldm9sdWNpb24= IHJlZHVuZGFudA== IEZvcm1hdGlvbg== LWF1dA== X1RPT0w= IFdpcms= bWnFn3Rpcg== IGRhcsOh INGA0LDQvdC10LU= IEdyb3U= IOy1nOuMgA== LW9wZXI= w7pyZw== IFNwZWFr LmZpbmRhbGw= IOS4i+WNiA== UmVzdWx0YWRv 4LKX4LOK4LKC4LKh IExldmk= CWJsb2Nr IHNvcnJvdw== IGFuw7pu YXRpdmFtZW50ZQ== IHBhbGF0ZQ== 56m66Ze0 auG6uQ== IGVuZGxl 5o6o5Yqo INC90LDRh9Cw0LvRjA== INi02LHYrQ== LnBsYW4= IGluY2x1eWVuZG8= dng= U295 dXl1 IOCkuOCli+CktuCksg== ZuG7jWThu6U= 4YOQ4YOf aWpmZXJz IOCqhuCqpw== IHJhbmdlZA== IOGDnuGDoOGDneGDk+GDo+GDpQ== INmF2YbYstmE IHVucmh5dw== R0VE IHNwZWNpbWVucw== IMOkcmE= X1BD IGhvb3J0 INC10LjSrQ== IEhpc3Rvcmlh IGFwcHJhaXNhbA== IEJ1Yw== INek16LXnQ== IEVtbXk= INWw1aHVuw== IG5hYW4= OmRhdGE= X0luZm8= IOCkruCkguCkpuCkv+CksA== IGFsbWFr IHNuYXBwZWQ= IEFsbHRhZw== IHNlZ21lbnRhdGlvbg== IG3hu6Vj IOCnsOCmvuCmnA== b3BhdGhpYw== IHN0YXJyZWQ= IOC0ieC0quC0r+C1i+C0lw== 5bu66K6u INC00YvRgA== IFJTQQ== IFBvbmQ= IHJ1c3RpZw== INKv0L3RjQ== b3N0cmE= bGVhZ3Vl aXNlaw== 5a6i5oi356uv5LiL6L29 b3N5 IHBpcmF0ZQ== IGJlbGxh IGvDvQ== IGFjdGl2bw== LXRyZWU= IGbDqWQ= IGFuZGV0 INCy0LLQtdC0 4YCw4YC4 Y2xlbw== INmI2YPZhA== IOCksOCkqA== 4LSv4LWN4LSV4LWN4LSV4LWN aXphdA== Y2xpY2tlZA== KGJlYW4= IOCkl+Ckr+ClgA== IGNvbm5lY3RvcnM= IGZpY2hl IGRp4buHbg== 0KLQsA== IGRlc3RpbmVk IHRlbXB0aW5n X3dpdGhvdXQ= IHZlcm1vZ2Vu 0L3QvtCz0LjQtQ== QXR0YWNobWVudHM= R2I= IGNvbXBsZXRlbmVzcw== IGZvcm1hZG8= Jyo= X2ZhbHNl IFhYSQ== IOWOnw== IHBlcmZlaXRv IGhm IHdlZWtkYXk= IGJlc3RhbmQ= L0ZvdW5kYXRpb24= b3JndA== INCz0ZbRgdGC IOCyruCyvuCyuQ== bGVtZWs= IHR1dHRh INin2YTZiNi12YjZhA== IOCmleCmvuCmsOCmo+Cnhw== X2JvdA== IEZ1bmRpbmc= 0LXQutGD IG1lbmVt IHJldHJpZXZhbA== X2luaXRpYWxpemVy Z2V0dA== 0YHRgtCw0YLQuA== IOConw== IEhvbGxvdw== 4Kqm4Kqm 5YiA Z2Vubw== cHJhYw== IGNhcmFjdMOpcmlzdGlxdWVz INin2LY= X2Jhcw== IGthdGF3YW4= INio2YnZhA== IHBhYQ== INin2YTYs9mI2LHZig== IExvcmVuem8= IFdhaw== IFRyZWVz IGVxdWlwYW1lbnRv IGdyYWRpbmc= IGdlbGllZg== X1NFTEY= Lm1ldHJv IHBpdm90YWw= Tmlja25hbWU= cHJlc2VudGF0aW9u IHNwaWw= INWj1aHVrA== IHN0dXVy INCy0LfRj9GC0Yw= IGFzc2lnaQ== IHVuaXRl INC90LjQutGC0L4= IHVtZQ== X3JlYXNvbg== QWlycG9ydA== IFBlbmg= IHVucmVsYXRlZA== IFNvbm5l IFBJWA== 4oCN4LSf4LWN4LSf 4Lij4Liy4LiK LnBpZA== IGV4aXN0aXI= IGFhbnI= IGZpcm15 bWF0YQ== U0lH IGluZ2zDqnM= KHNlbGVjdG9y X01FTUJFUg== IGNvbXBhcmF0b3I= IGtyaW5n INW01bY= 1aXVvNW2 CXByb2Nlc3M= INmI2KfZhNin IFJvZHLDrWd1ZXo= IOCmtuCmv+Cmtg== INiv2LHYtdiv IHNlY3I= YXRzaW9vbg== IEludmVzdG9ycw== L3BocA== IGludmVydGVk LnNvZnQ= IHNsb3dlZA== IHp3ZW1iYWQ= dWt3dQ== IGJlaWdl w7psdA== IOCuteCuv+Cusw== X3ZlbG9jaXR5 IFNhZ2E= YWJpbGlz INmC2YjYp9iq INWh1brVoQ== IG1lbcOzcmlh INmF2YrZhA== IGxhbmdzYW0= 5bGx5aSn5Y+R zq7OvM61z4HOsQ== IGNvbXBhbmhpYQ== 77yM6K6p IEtlbm5ldGg= 4YCE4YC54YC3 c29sZA== IFJpY2hhcmRzb24= CW9mZnNldA== PHNlbGVjdA== 5bGe5oCn U2NhbGVk IOaJkw== IENvcm9u IFNQQQ== YWtrZXQ= IFBhc3Rl YXN0ZXJ5 LmhlbHBlcnM= IElQTw== bWlh IOenkQ== IGpld2Vs VVJSRUQ= aG9n JSkK 7LKY65+8 INeU16rXpw== IEh1bmdlcg== IEd1bQ== bmlrZQ== IGdyYcSR X01PVg== 0LjQutGD IERPRQ== w69z INmH2YjZhg== IHJ1bndheQ== IOCwquCxhuCwn+CxjeCwnw== IOCqig== IENpYw== INin2YTYudmF2YTYp9iq KW0= bGFuZGluZw== J2hh IHZlcmxlZGVu dXJscGF0dGVybnM= xJ9pbQ== IHR2ZQ== IGNhcnJldGVyYQ== IHRhcmE= YWJhcmFoYQ== c3RydWFs X0NvZGU= IEhvb2tz IFByb3Bvc2Fs b3dpxIU= ICkpOwoK 0L7QvNC40L0= IGNvbnZlcnNh IHdlcmtpbmc= IG1pbmRmdWxuZXNz X1NUWUxF S2Ft aWJlcmFs INCY0LM= IHNuZWxsZQ== dW1lbGU= YnJ1aw== IOG7pXrhu40= IHJpbnNl IGxhZG9z xI1uw6k= INqp2KfZh9i0 6YCQ LXJlcXVlc3Q= 7LC+ IOCmuOCmguCmlw== Qm9tYg== IFZhbGVudA== IC0tLS0tLS0tLS0= QnQ= IEVNQUlM SG9qZQ== IGFtdA== IHJlbmc= IHVubGF3ZnVs YXR0cm8= 4K+B4K6z4K+N QXR0cmlidXRlZA== IGRlYnVnZ2Vy 4KSj4KWH INmF2YjYp9is2Yc= IFNpc3RlcnM= IGxvdW5n YWNpZmlj cmVucw== Z3J1cHBlbg== 4KaV4KeN4Ka34KeH KiQ= X0lOQ0xVREVE IOCmhuCmnw== IGFjcmVzY2VudA== 1aHVt9aA1bs= z4nOvc6x YWJlbGxh 4LS/4LW7 IHJpY2hp 0YHRgtCy0LXQvdC90YvQvA== bWFneQ== IGFsdGVyYXRpb25z 2YbYp9mF2Yc= IGZsb29kZWQ= QWx0ZXJuYXRpdmU= IGZvcmVoZWFk INin2YTZhdmC2KfZhA== IOCkuOClgeCkqg== QW5nZWw= X2Nvb2tpZQ== YXRpdA== IHN3aWZ0bHk= IFByaW1pdGl2ZQ== IGZhbW9zYQ== IEJ1bGdhcmlh ZXJ0ZXQ= IOC0pw== IE1hcmlu INmF2KjYp9ix2KfYqQ== RUg= IE5lZWRlZA== IGJyZWF0aGFibGU= INGN0YQ= INCw0LLQsA== 2LHZitiz IHByb8Wh xIN0b3I= IGdyYXppZQ== 54K56K+E IHBvdXJyb250 LmR3 dXRpZQ== IHNvcnVu LlBvcA== dWVydA== 4YOS4YOQ4YOW IGRu IHRyYWR1 CXR4 INio2KfYtNuM2K8= IG9sdcWfdHVy IGNvcnNv IGvDpQ== IHN1YXY= IFhS IGNob2M= 15nXldeV IOCkteCkv+CkleCksuCljeCkqg== IGzhuq1w 5Yqe5rOV 4YOQ4YOg4YOd T3g= IOCuruCuvuCuteCun+CvjeCunw== IGVuZm9yY2Vk IHB1YnM= z4TPjM+C IGJhesSx IGvDvGzDtm4= INmF2LTYsQ== 0LzQsNKb0YLQsA== IG1hYW50YQ== IGRlc24= INGC0LXRhdC90LjQutC4 TmlldXc= 16LXqNeY IGd1dHM= INit2YHYuA== IEluZm9ybWF0 IEh1dA== LmNodW5r LklERU5USVRZ KC4uLik= 4KaV4Ka+4Kay IGhpc3TDs3JpYXM= Lk5BTUU= LWZ3 aXlhaGE= IE5PTkU= IEZlcm7DoW5kZXo= INWy1aXVr9Wh1b7VodaA IHN1Z2VzdA== KHNlY29uZHM= IFVubG9jaw== LlNvY2tldA== IEvDtm5pZw== 44Oz44K144O8 IG9kbg== ICZb w6ljdXQ= U2Nob29scw== IHNlY28= aW5zZWw= KF8s IHVuZ2RvbQ== INin2YTYs9mE b21pbmF0b3I= IGluZmlsdHI= IFNpdHRpbmc= IOCkleCksOCli+CkoeCkvA== w6li LkNoYXJ0 LXNlcnY= IFBhbnRoZXJz aXVtcw== ICl7DQo= IGJlc3RlaA== IHNucHJpbnRm IFNJUA== IOCkluCksOClgOCkpg== IEx1eGVtYm91cmc= IGV4aXN0w6puY2lh X2Vycm5v ICgv CVByZXBhcmVk IOCmuOCmsOCnjeCmrA== IGVzdHJhdGVnaWFz 65CY6rOg INeQ16DXlQ== INCx0L7Qu9C+0LI= b3Zhcg== IGF0dHJhdmVyc28= 67K9 IGdlbmFubnQ= 0LTSrw== 55O2 IGltcHJlc2lvbg== IOuFvA== X3N0cnVjdHVyZQ== IMOR OjpfKCc= IG1lbGU= INC00LfRj9GA 54++5Zyo IHNocQ== dGlpbg== IHBlcnJv IERlbW9jcmFjeQ== INCw0LrRi9GA 4oCZZWxsZXM= IEtpdHM= YWJzY2g= IHhlbg== IHNhdXI= 5YWs5Y+455qE aWxpYnJl IHZpY2lvdXM= aXN0bGVz 4Kak4Kau IOCksuCkl+CkvuCkpOCkvuCksA== IHByZWRzdA== IHlheWk= IGN1bXBsaW1pZW50bw== aW50ZXJydXB0 IGFjZXJ0 IGNyZWVw IGphbW1lcg== X3doZW4= IGR1bXBlZA== cm94 IOC0teC0v+C0nOC0rw== YXRzaW5uaQ== IGFmYXN0 0LjQstCw0YLSm9Cw0L0= IHFvcg== T2ZmZXJpbmc= IHBsdWdnZWQ= ZXRlbnRpb24= KHZlcnRleA== IGhvZWs= IEJ1bmRlc2xpZ2E= INC/0LDRgNGC0LjRjw== IHRvdWNoZG93bnM= IGdhcmFudGlh IOC0leC0o+C1jeC0n+C1huC0pOC1jeC0pA== 15nXoNeV15k= 4LeS4La2 IHN1cnZleWVk d2HEhw== b2Rhbg== LXRyYWNr LWV5 IOCkuOCkguCkrQ== dW50ZXJuZWhtZW4= LWVhc3Q= bXVjaA== dXRzZQ== ZG9pbmc= VHJhZGVtYXJr IHB1cmE= IGdldnJhYWdk IFBvbHlnb24= IGFnZ3Jlc3Npb24= IG53YQ== KHBlcg== VG93ZXI= IHBlcnPDtm5saWNo INGC0YPRgQ== IFBsYW5uZXI= VHJhdmVyc2Fs LmFpcg== IFJQTQ== dWRpb3M= YXZpdGk= UmVudGFs X21w RFNM IEFkanVzdGFibGU= INW/1aHVrNWr1b0= INC80LXRgNC1 QWdn 0L3QuNC60ZbQsg== IGRpZ2E= IHNjaG9vbGluZw== IOC4guC5iOC4suC4pw== LnRlY2g= UmFzdGVy c2ly IOCmhuCmkw== INin2YTYr9in2K7ZhNmK2Kk= IC9cLg== X+WFjei0uQ== IGlyZ2VuZHdpZQ== S25pZmU= YWNodG8= IGluY2Fy IM68zrnOug== IHB1dGVh QU5UUw== IOuMgOyDgQ== IGlyYXk= b3NvbWVz amlo IOq8 INC70LDQvA== IGFtZQ== INC60LDQttC00L7QuQ== bMSxcQ== ZGVwdA== IGV4cGVkaXRpb24= IOywuOyXrA== IGF0ZWxpZXI= INCy0L3QtdGB IHBvbGlz INC80LvRgNC0 cmF0ZXM= IOCkmuCkv+CkpOCljeCksA== cGFycw== IFBlc3NvYQ== dWVzdHJhbg== IFJhc2g= 2KfYr9mC IGFyYml0 LCM= INee16rXlw== 44G+44Go44KB RkxPVw== IGFubm95ZWQ= 4K6+4K6o IFBlcnNvbmE= INGD0YPRgNGF0LDQudC9 W3ZhbHVl 44CCPC8= IG5nYXBoYW5kbGU= 0JrQvtCz0LTQsA== 4LiB4Liz IFNwZWNpYWxpc3Rz Z2Lhu40= IOyCrOydtO2KuA== 0LvRltCy0LA= 5LuK5Zue IHByb3ZlZWRvcmVz 4YCv4YCV4YC5 IGVudsOtbw== ZMOpcw== IElzbGE= IHRyYXVt 4LmC4Lir4Lil4LiU IOCkuOClguCkmuCkqOCkvg== IHdoaXA= IMOpdGFwZXM= IG5hdXQ= IHlvdXJzZWx2ZXM= 4LCw4LGL4LCo4LC+ fScK dXNlcmNvbnRlbnQ= IHNvaWxz 0L7QstCw0L3QsA== INWi1aHVqg== IEJ1cm5z 6K6h5YiS576k TUFU IGVjY2VudHJpYw== IHZpY3RvaXJl KHBhcnNlZA== YXRpZA== IGRydWdpaA== IEx1bg== LmxpbmVz 0LfQtdC9 0LXRgtC40Lw= IMq7b2xl Lmhvcml6b250YWw= 8J+UpQ== Q29uc2U= 2YjYp9mB2YI= IGNob2NvbGF0 IE1pdHR3b2No IOaxgg== Ojot IOCmuOCmvuCmsuCnhw== IOGDoeGDrOGDneGDoOGDlOGDkw== IFJvbWVv IGNsw6lz 56WW 4LWH4LS1 IGdyYXo= IG5lZ2F0aXZv IHByZWNp Umk= 4KWH4KSC4KSh INin2YbYr9in2LI= IG1hbnRyYQ== TGFuZQ== X2xlYWY= Z3Jlc2U= IENvbXBlbnNhdGlvbg== quGDmOGDmg== IENsYXVz IFRyb20= INqp2Yjahg== Q2xlYW51cA== 5bC85pav5Lq6 IHNhbGFkcw== IOG5o2nhuaPhurk= bWF0aQ== IHZlcmJvbmRlbg== LmNvbnNvbGU= aXN0dQ== IHJlcHQ= IGRpc2FkdmFudGFnZQ== 0YHRi9C90YvQvQ== LlJvb3Q= YW5oYXM= INio2YnYsQ== IM67zq0= YW1haQ== c8OkdHpsaWNo IFRoZW8= b2zDqQ== IExpZ3Vl IHThu6Vj INi22Lk= IGJlcXVlbQ== IOGDkuGDkOGDm+GDneGDp+GDlOGDnA== LmZ1bmN0aW9ucw== 0YfQsNC9 Lm1lbWJlcnM= IGhhbGth IGNhcmV0 YXRlZ28= IGZsaXBwZWQ= IGVudGhvdXNpYXM= KHVzZQ== XSIK 7JqV Z2V0YQ== c3RkZXJy INeU16HXpNeo IGtvbGk= INCd0LDQsg== IGRldmFpdA== IGN1ZW50YW4= X3Rlcm1z bm90YQ== S3Vp IERpZW4= IFRvcnJl 5Y2B5LiA INCw0YDQs9Cw0L0= IGhlcnVudGVy Rm90 X29yaWc= IHNvcGhpc3Q= b2dpZQ== dXJzZWQ= IOCkruCkpw== 0LPQsNC3 QXp1cmU= IGZvcmPDqW1lbnQ= 4Ka24KeN4Kav Q2FuY2VsZWQ= IOGDm+GDlOGDkuGDneGDkQ== 6LSv IHZhaXI= IGJhc2VuYW1l IHRlc3Rlcw== IFRha28= Y29saQ== IGJhd2F0 IMmZc2Fz INW01bfVodWv KG9yaWdpbg== INGP0YU= IHZlcmJlc3Nlcm4= IH0qLwo= xI1lbmpl SW1wb3J0ZXI= IEphZ3Vhcg== aWxsb3c= IOCkuOCkruClguCkuQ== QnV6eg== ZnVzYw== X0VOVEVS CXNvdXJjZQ== IFRhbGtpbmc= IOaJi+acuuS4ig== IHhpbA== IGFjb21wYW5oYW1lbnRv IHByZXNzbw== IGdyb3RlcmU= IGFjY291bnRhbnQ= Um9u RXN0aW1hdGU= IFN0dW5kZQ== IGVybcO2Z2xpY2hlbg== IOCknOCksOClguCksOCkpA== dcWI IGRlZmVuZGFudHM= 2LPYsdmH IEFtYXRldXI= IHNlbWVsaA== L2FuZ3VsYXI= YWNpbWllbnRv WEQ= IGhlbWF0 IHdhcm5h IG7GoWk= IEFsZWc= IHNsb2c= IHZpYWplcw== INmK2LnYsdmB IHBpdHk= 7ZmI INCz0LDRgNC0 IHBvY2E= IOGDkuGDkOGDkg== ZGltZW5zaW9u IFJlc3BlY3Q= INiq2YjYsw== X3JhZA== LuKAneKAlA== IE5r IFhDVGVzdA== YW1hdGE= LnBhY2thZ2U= Qk9PU1Q= eXR5eQ== IHZpdmk= IHB1ZWRhcw== bGlvbg== IGludmVzdGltZW50b3M= INCw0Z4= IG91dGluZw== IMSNbG92 INC/0L7RgdC10Yk= LW5hdHVyYWw= IGd1dHQ= CWdyb3Vw IGVudHJlcHJlbmV1cnNoaXA= INGC0YDQtdCx0YPQtdGC IHNjYW5k IFBhbG1h IHJlZ2lvbmFsZQ== IGNpdmlsZQ== IHZlcmxv d2VjaA== INCw0L3Qs9C70LjQuQ== w6RkZW4= IOCwjuCwqOCxjeCwqA== 2YjYp9iz2LfYqQ== IGFmZmlk X2Jvb3Q= IExvZ291dA== IGV4cGxpY8Oz INWk1bjWgtaA1b0= IGFjdHVhbGl6YXI= IG1vY2tlZA== IMOldGVy UGc= LnJhbms= CSAgICAgICAgICAgIA== IG9ic3RydWN0 PiIpCg== IE1vbGx5 IGRyYXdhYmxl 4Lib4Lij4Liw4LiI4Liz4Lin4Lix4LiZ4LiX4Li14LmI 0L3QsNGA0L7QtA== IG9udGJpag== X2VxdQ== INC90LDQv9GA0Y/Qtg== X2hhdA== aW9uYWxp X3JlZnJlc2g= INeU15DXkQ== IGd1c3RhcsOtYQ== INmC2LHYqA== YWhlYWQ= IHJlbWluaXNjZW50 4KS/4KSV4KSy IGNvbXB0ZXM= b2dpYQ== INGA0LDQudC+0L3QtQ== IEhhcmk= INC/0YDQvtC3 IGRlbGliZXJhdGU= IOC0r+C1geC0tQ== Q2xh IEF4aW9z IHRlYXQ= w6F0aWNhbWVudGU= IEt1bmRl IHNpcXVpZXJh IFRpY2s= LXR1 IGJvbmc= KClbJw== IFZBTElE LW5ldA== IG11bmljaXBhbGl0eQ== IMO8cmV0 INin2YbYsw== IGRlc3RydQ== IOCmh+CmieCmqA== IFVX IHByaWI= IGFtcGxpYXI= IER1aXRzZQ== IFN1cHBvcnRlZA== X3ZlcnRpY2Vz X1JFUE9SVA== INio2KfYtNmG2K8= 2YjYsdmG 2KfZgdi5 IEhM IGVpa8Ok 5py65Zmo IG9mZmVuZGVycw== 1aXWgNWh1abVtA== INin2YPYqg== LWVkaXRvcg== IGVuc2lu Q2FyZWVy LWNhdGVnb3J5 X2Nw IHNwZWN0cmE= KGNvbnRyb2w= Y2hhaQ== IGxlZGVy IFByb2dyZXNzaXZl X0hhbmRsZQ== IOyeiOycvOupsA== 4YOj4YOq INGC0YDQsNC90YHQvw== YW1hcmE= IHPDqXJpZXM= IHBpdGNoZXM= LmNvbW1lbnRz IOCyuOCyvuCyrg== IGRpc2NvdXJz IMmZbA== IG5vb2R6YWtlbGlqaw== LnNjcmlwdA== IFV3 Z3B1 IGZpaA== IHRpaA== V0FTSElOR1RPTg== 27DbsA== 15nXmdem IGludGVuY2nDs24= INW01avVttW51oc= aXNzZXVycw== IGlycQ== KHBhY2thZ2U= IHRhYmxlc3Bvb25z 2KfZgtiq IGJlc3RpbW10ZQ== IG1ldMOh IOCyleCzguCyoQ== IFRBQg== IHZpcnR1 4KSa4KSo IOW9qeelng== IOCkqOCljeCkr+CkvuCkrw== 4KaP4Kaw X2xldmVscw== IEFuZm9yZGVydW5nZW4= IHBvcnR1Z3XDqnM= b2Zhbg== IEluZnJh IOC0ruC0vuC0seC1jeC0sQ== w4s= IHZlcmRpZQ== IGhvZXZlZWxoZWlk IFBldHNj L29yZw== 4buNaQ== IOWQjg== LmVtYg== X2ZtdA== IFRyaWNrcw== RVJWRUQ= IHByb2Z1bmRv IGdyYWZ0 b255Y2g= 0LrQvtC70YzQutC+ IHRheGF0aW9u 0YLQsNCy IHJzdA== 4oCZaWc= IEluaXRpYWxseQ== cGFzc3Q= bGVhc3Q= IHJlc2lnbmVk b25uw6llcw== SVNQ IGZoYQ== IHJhcHByZXNlbnQ= IOCqteCqsOCquOCqvuCqpg== IG1hcHBpbmdz IOCyueCzi+Cylw== 5pyN5YuZ 0YHQsNC0 4YOU4YOR4YOY4YOQ4YOc IGluaGliaXRvcnM= IGxhbnQ= X2JhY2tlbmQ= IEJpbGxib2FyZA== IOGejw== IGNvbnRyYWNl dGVydA== INix24zYp9iz2Ko= IFNoYW5ub24= IFJhbW9z IHJlbWlzZQ== IOCktuCksOCljeCkrg== RW1vamk= SVJPTg== INC40YHRgdC70LXQtNC+0LLQsNC90LjRjw== aXNlY29uZA== IFFMaXN0 IGNyaWI= IGJlZHN0ZQ== 6ZSm 4KSV4KSf IHByb3BoZXQ= IMOhaA== 4LS/4LS44LWN4LSx4LWN4LSx INmF2YTYqg== 4KS54KS+4KSy X25vaXNl cGxlbWVudHM= IOCkrOCksuCljeCkleCkvw== IGhvcsOhcmlv IHNlbGZpZQ== IEthdHI= IOC4o+C4uQ== 4KSl4KWH 4byQ INC60YDQvtC80LU= IHVuZGVydg== 2YTYp9mD 1bjWgtaA1oTVqw== IG3DrWQ= IHZhbGc= IFBoYXJtYQ== INC60L7RmA== LWdvaW5n IG9udGg= YW1ibGluZw== Zm9sZ2U= xbx5dA== IOq4sOykgA== RXZlbnRv IGp1Z3U= LkhpZ2g= IOWvuQ== IFBsYXlh 4YCv4YCV4YC6 IGZsYWly INWw1aHVvdW/ IGxhcmdlbWVudA== IE1ldHJpYw== IGdvbmc= IGpvYWxv VU5B INis2YQ= ZGHDvQ== ZmlndXI= IGJhZGE= IGNyb3Nzd29yZA== IG1hbmlmZXN0YXRpb25z 6LCi6LCi IGRpc3NvbHZlZA== IGNvbXBlbGxlZA== IGNvbnN1bHRhbmN5 INin2LPYsQ== ZXRoZXVz cmVzc2luZw== IOCmrOCmv+CmreCmvuCmlw== bHVn YXliZQ== IGF1eGlsaWFyeQ== IcK7 IHRleHRlcw== INeg157Xpg== IOaPkA== IGlyaXM= IGZpbmly IHZ1dXI= IFp3ZWNr IENoYXJpdHk= IFNoZWZmaWVsZA== INWk1aXVutaE1bjWgtW0 IHPDqWFuY2U= 6YGV IG9wdGltaXNt cmVpYmVy IOCkieCksuCljeCksg== 4LS/4LSO IGNvcnJlY3Rh IOCkuOCli+Ckrg== IFN0ZWxsYQ== IHNoZWFy IEVsaw== IOCkteCkv+Ckqg== INCc0LDRgg== IG5vbXM= IGFzaXN0ZW5jaWE= IHJlY2liZQ== LlN5cw== IteX SmRiYw== V29ya2Jvb2s= 4YOg4YOU4YOh IGdlbml0YWw= zp4= IGVtZXI= INiy24zYp9iv24w= INmE2KfYstmF 77yB77yBCg== IEFQQw== IOC0quC1jeC0sOC0teC0sOC1jQ== IGluaXRpYWxpemVy 4LCw4LGN4LC14LC+4LCk dmVybm8= IOCkiuCkquCksA== IGNhZmVz IFZvbHQ= Ly8vCi8vLw== IOC4oeC4sg== IHNvY2lldGFs V0lUSA== bGlkZQ== b2xvZ28= IGNlYg== ZWRpYXRvcg== 5ZGo5pyf IFNURENBTEw= TlNOdW1iZXI= ZXJnZWQ= IEd1aWw= INiy2YXbjNmG IERvbm5lcnN0YWc= 4KS/4KS34KWN4KSf 5bmz5pa557Gz IGxhbmE= Zm9ybWF0dGVk INio2YfYqtix24zZhg== IGZ1bmtz IGzEq2R6 aGl5YQ== 4KuL4Kq44KuN4Kqf IGJlYmlkYXM= IGRvdXg= aWNj VVo= Um91dGluZQ== IGplbGFz IHdhc3Q= KGRheXM= IGJhaW5h IHNjaG5lbGxlcg== 0LjQstCw0Y8= Ll8KCg== INGB0YDQtdC00YHRgtCy0L4= QU5FTA== IFBlbnNpb24= 2YTZitmH c3Rvb2Q= IHNhY2hl ZXJuaQ== 5oiQ5pys IHduZXVk IGtpbMOzbWV0cm9z IGjhur90 IFByYWN0aWNhbA== LWxvYWQ= aXBhcw== 5pu/ IFNpbms= IGNhbnRv Ymxh LmV4dHJh 6ams5oql WE0= IE9tYXI= IENhc3RlbGw= 7KaM IFR3aWxpZ2h0 IEtvbmQ= IHTDqW0= KFF1ZXJ5 IGxvb2d1 IOCyquCzgg== X21vZGFs IHLDqXNpZGVuY2U= Q2VydGFpbg== IGNhbXB1c2Vz IERMQw== IFNvbm5lbg== IOGDkOGDoeGDlOGDl+GDmA== IFNlbGxl IGhsbw== IGtvcHA= INC00LvQuNC9 IFl1cA== eml3YQ== CW1vZA== Sko= IOCyqOCzhw== Lk5hdmlnYXRpb24= XFNlcnZpY2U= aWRlcmU= INC20LDRgNCw IFZvYw== IFp1Z2FuZw== IExPQ0FUSU9O YmlldA== IENQQQ== IENhcnJpZXI= IHDFmcOtcGFk IFN0cmV0Y2g= IHJlY29ub2NpbWllbnRv 0YPRgtC40L0= YmVnYmU= IHPDqXBhcg== IGVybw== IGtpc2g= IHp3acSFeg== INCy0LjQsQ== IG1lYXI= IHNhbGc= TGFrZQ== IOydvOuzuA== IG1pc3NpbGVz QVBFUg== INem15XXlQ== IGJlaG9sZA== IHJlc3RydWN0 X1NlbGVjdGVk YXJha2E= IGF2b2NhZG8= IFRyYWJham8= INep15DXoNeZ Y3c= IFNhdWNl LWhvcml6b250YWw= IGxvb3Q= IOCkq+CkvA== IOCkuOCkvuCkpA== INC60L7RgNC40YHRgg== IG5vYQ== IHXFvHk= IGfDvG7DvA== Q0lE IHJlbWVyYw== IEludmVzdGlnYXRpb24= LnVubG9jaw== PEVtcGxveWVl IExlaWNlc3Rlcg== 4K614K6w4K+N4K6V4K6z4K+N IGZpbmFsaXpl YXNvbnJ5 TW9vbg== INGF0LDQuQ== IFJlZmxlY3Rpb24= X3BkZg== dXJneQ== bGVncw== INin2YTYp9mI2YQ= Q29udGE= IGdiZQ== IGNoaW5v IHJvYmJlcnk= IG5hdG8= Izo= dmFpc2U= IE1hZGFnYXM= IFdlZGRpbmdz IG1vdGlvbnM= a2xpZg== IEVzcGFu IGF2YXQ= IOGDoeGDneGDpA== IG5qaWhvdg== 4Lij4Lij4Lih IHTJmcWf Y2hlZHVsZXJz INGB0L/QsNGB INi32KjbjA== IEFudw== LWFnZW50 b3J6eXN0 IHTGsOG7o25n IHByb2ZpY2llbmN5 CWRvbmU= 4LSZ4LWN4LSZ4LSz4LS/4LW9 INmF2KfYqg== b3RsZQ== IGfhuqdu IHV1ZA== dXJuaXR1cmU= bGlnaHRlcg== IEtsYXI= b2tlYQ== IHZlZG5v IM6xz4Y= INCz0Y3Rgg== IGdyb3VwaW5n IOWn 2KfYq9ix IFVTQVJU LWxpYg== INin2LHYqtio2KfYtw== INC70LXQvw== 4oCZaW1t bGljYW50 IElubGluZQ== IHRyYW5zZm9ybWFy 4oCN4LSh IGRsZw== IM68zqw= INit2YLbjA== TWl4ZWQ= IHF1ZXN0ZQ== IFJhdmVucw== INqp2YjYtNi0 IExpYW0= 4KS/4KSo4KS/4KSn bGVjaHQ= 44Wg IHJlY2Fw IGh5YnI= cmF1Y2g= IG1vdmltaWVudG9z 4Kqa4KuH KEdyYXBoaWNz IG9vcmxvZw== LG8= IEZsb29k IOCkruCli+CkrA== 6IGv RXNzYQ== 4Lil4LiU IOCmm+CmrOCmvw== 2KLZhdiv YW5zdQ== b3V0ZW4= IGNvcm9uYXJ5 IGbDuHJzdA== dWV0 CXNlcnZpY2U= IHByb2l6dm9k bGluZ2Vy IOyViOyghA== IGFsbGFu 6auY5riF6KeG6aKR IGVzcGVjw61maWNvcw== 15nXnNeq 44GK6aGY44GE IOWkqeWkqeS4reW9qeelqOS5sA== IMWfw6RoZXI= IGJvdMOzbg== 0J7QoA== 0YHQutC+0LzRgw== ICsrOwo= IGtpZGRpbmc= U2VuaGE= 4K6f4K+I 1aXWgNWr1oE= dWpvcw== 4Kq/4Kqv4KuL IGLEsXI= z4PPhM6xz4POtw== IOCkrOCkv+CknA== IG3DuHRl 4YOd4YOa4YOd4YOS IGF1Y3Rpb25z IGFjY3VzYXRpb25z INC80YPRhQ== 4oCL4Z6C X1RhYmxl LmpzeA== IGZ1cnRoZXJtb3Jl IG1haWQ= INin2YTYs9mK2KfYs9mK LWlvbg== INGC0LXQvNC/0LXRgNCw0YLRg9GA cGFubnQ= IGluZGlxdWU= LS0tLS0tLS0tLQo= 0J7Qv9C40YHQsNC90LjQtQ== e30nLg== acOqbmNpYQ== INGC0LDQs9C+ 4YOU4YOc4YOT aWxlZw== dmVsYQ== IGJhdHRsZWZpZWxk INin2YXaqdin2YY= INC80LXQvdC10LTQtg== 2aU= IFBTRw== IHJlbm92YXRpb25z IOWFtA== aWxsb25z IMK0 UHJvbW8= IERpZg== b2t3dQ== IHF1ZXJ5c2V0 IHRyw7I= IFN1bHRhbg== Lmxs IOCmnOCnh+CmsuCmvg== IOCqpOCrh+CqruCqqOCrhw== IEhUTUxFbGVtZW50 4LeD4LeS IGrEgQ== IMOBcmVh IHByb3ByacOpdGFpcmU= IHBlcmp1ZA== LWZyYW1l INC60L7RhA== 4oCm4oCm4oCd IOCmquCnjeCmsOCmpOCmv+CmrA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IGJpZW5z INCh0LA= IHBhbGxldA== 6IOh IG51dHJpdGlvdXM= IEVVUk8= IENvbW11bmlzdA== 0L7Qu9GO IGJpbGjDtWVz 4oCZ4Kay INGe0YHRkQ== PFN0dWRlbnQ= IG1hbmdhbg== 4pyo IEVyaW4= 4YOR4YOj4YOg4YOX INiz2oA= IOiAgeWPuOacug== 4LGH4LCy IGjDtnJlbg== IEFzc2VydGlvbg== b2Zk IEVkZ2Fy 4YOq4YOY4YOQ IGt3YW56YQ== INeQ15XXmdek IOCksOCktQ== IFRhZ2dlZA== w6fDo2VzdGU= 0LPRg9GD0Ls= IEhFSUdIVA== dGhhbmU= YWJvbg== IHNvdmVyZWlnbg== IG1vYmlsZXM= 0LDQtQ== X2Vj 5oCO5LmI6aKG5aWW w71zaW5n UGx1Zw== 0LPQvtC40YI= YWxhZ2E= YXRjaGU= IGZpY2hpZXJz 07fTmQ== IGVtcHQ= IOq1reuCtA== a2ljaw== INC00LXQvNC+0Lo= IHByb2N1cmFy aXBpZW50cw== IEhhbGxv IGJpbGxl 4Liq4Li44LiC xaNpYQ== IExvY2g= IGh2ZXJ0 IERPV05MT0FE PFdlYg== KHVuaXR0ZXN0 KGRpcmVjdGlvbg== IHJla2xhbQ== aXR6dA== IHLDqWdsZW1lbnQ= INin25I= IG1vbGRpbmc= IGp1csOtZGljYQ== IGVzaW0= 57Kk QW5ndWxhcg== IOC0k+C0qw== IOCoruCpgQ== IOm4v+i/kA== YXV0aG9ycw== IHJlY2VpcHRz IOGDoeGDkOGDruGDlOGDmuGDm+GDrOGDmOGDpOGDnQ== O1wK 4LCC4LCt 5aOH INCx0LjRgNC4 0L7QvNC10YA= IGNhbmRpZGF0 55yL5Yiw X21hY2hpbmU= S29s 6JuL6JuL INiq2LHZg9mK2Kc= YXRhZw== RGlmZmljdWx0eQ== X2ludm9pY2U= IM6Vz4U= IFJ1aGU= IGdvbGU= IOCkp+CksA== c3RhdHR1bmc= INGC0LjRgA== aWdlcmlh IGRvYnJl IGNvdXZlcnR1cmU= Y3Vzc2lvbnM= X21hdGNoZXM= ICJe IHB1aXNxdQ== LnBvaQ== WU5D IFBseW1vdXRo IOCkq+CliOCkuA== IEJydXg= Pm51bGw= IGZhY2lsaXRhdGluZw== U2Vk ZXBh IOGDkOGDpeGDog== 2YbZiNi52Kk= IGRpc2dy YnJlbmdlbg== 5ZWl INC+0LrRgNGD0LbQsA== c3Vz IENsYXVkZQ== IFBlcmZvcm1pbmc= 4LiK4LiZ IGVpbm5pZw== IGRpbnNkYWc= Y2FuZGlkYXRl IOCkruCkguCkl+Cksg== cmV1dW5n dWd1dA== 4KS+4KSC4KSa4KWA 4KSG4KSc IGRpbm5lcnM= dmFtZW50ZQ== IElQQw== IEZyb3plbg== INee158= 4oCZYXZhaXQ= VFJBTg== amVuaQ== LmZvbGxvdw== IGlzcmFlbA== P3Q= IGFtdXNpbmc= T1BUSU9O 5pWs aXZlcnNhbA== XinvvI8= UklE YXJvcw== 4YOc4YOY4YOX aXNhbA== IGFyYmV0cw== 4LC14LCw 2LHZitin2Ko= IOCmrOCmsA== IFRyb3R6 IOCkueCli+CkguCkl+Clhw== IHJhcm8= IHNjYXJz INC30LXRgNC6 INC60LDQvg== 4pSc IGl1 IG7Ds2c= INGF0YLQvg== IHJhZGlhdG9y 0L/QsNC5 IOCkruClgeCkpuCljeCkpg== IHLDqXR0 IOCwqOCxgeCwguCwoeCwvw== INC60LDRgtC10LPQvtGA0LjQuA== IEp1bmN0aW9u IGFkaQ== cGVyZmVjdA== IGluc3RpdHU= IGVubmU= 0LPRjNGL0Ls= IOC0heC0uA== IGFsbG8= IGVzdGF0YWw= IHByaXbDqWU= a29vcmQ= IGTDpA== JnJzcXVv 2YPZhtmI2YTZiNis2YrYpw== 4Kq+4Kqh4KuA w7NuZw== IGxpYWJpbGl0aWVz IG1hZXN0cm8= 0YLQuNGE0LjQug== LlF1ZXVl IGF1c3JlaWNo IEdvbnrDoWxleg== LWNoYW5uZWw= IHZvb3JyYWFk INGB0YLQsNGC0YzQtQ== IOCqieCqpOCrjeCqquCqvuCqpg== IOC2tOC3kA== LnRleHR1cmU= 4paI4paI4paI4paI U3BlY3M= INCb0Y7QsQ== IFZpb2xlbmNl 0YfQuNC60Lg= IGRlZHVjdGlibGU= 4Kaa4Kao4Ka+ LmdlbmRlcg== IG11c2hyb29t IE1hdHRo RmVs IG5vc3RhbGdpYQ== 4LWL4LSq IEJlenVn IHZvZXRiYWw= IOeZuw== IOCmpuCmv+CmrA== 0YfRg9C90LjQvQ== INW01oDWgQ== IGp1cmlzZGljdGlvbnM= IOCkteCljeCkr+CkteCkuOCljeCkpeCkvg== T1RFUw== INCz0YPRhNGC Lk11bHQ= PENoYXJhY3Rlcg== IE11eQ== INC20YvRhg== INmD2YjYsdmI2YbYpw== RmFjaW5n IHBvc2w= ZXhwZWN0cw== IGV4aXRpbmc= IOGDmeGDkOGDoOGDkuGDkOGDkw== IGNhdmFs IOC0qOC0vuC0rw== IHN1Y2Nlc3NpdmU= VHJhbnNwYXJlbnQ= YmVydG8= IFNjaG5laWRlcg== INC/0L7Qv9GA0L7QsQ== 2KfYsduB dmVudHM= X3RodW1ibmFpbA== IGF0YWF0c2ltaQ== X2F3 Q29hY2g= IGRvbWFpbmVz bGV2ZWxz KHRyYWNr xLHFn8Sx IEluZGljYXRlcw== IOGDkeGDneGDmg== IGV4cHJlc2nDs24= IGVtYmVy cHJpc2luZ2x5 IEF1ZnRyYWc= IEhpbnRlcmdydW5k 1a/VodW2 IHRhbWJpZW4= 0YLTmdGL0LvQsA== 4LON4LKv4LK+4LKC bGVyZGVu IEZvYW0= IGJlZWlu CXBvc3Q= IEFobWFk IGVuY29tcGFzc2Vz IOCkquCkvuCkguCkmg== IHVuY2VydGFpbnRpZXM= IGJvdmVuZGllbg== 5ZOI5ZOI IHN1w60= INii2YQ= IHBhc2FuZG8= IOCmtuCngeCmpw== LcSh INC90L7Ssw== 4LSw4LWB4LSC IGZyb250ZW5k IENpbmU= IEF1w59lbg== LnNlcXVlbmNl 4Lit4Lij4LmM4LiV IHByaXNlcw== 5oiY55Wl IGlieW8= 67mg IGFsbG9ucw== IFFXaWRnZXQ= IGNoYW90aWM= 4LK14LOG cGVrdG8= IOiHs+Wwig== IGxhYm9yYXRvcmllcw== IFN0cmljdA== IHRoZXJtb3N0YXQ= IG5pZ2h0bHk= L3RhYmxl INi12K3Zitit cmVkdQ== dmFsbGVu IEFicmls IMSR4bun IHNhdmV6 0LvQvtCz IG5hc2Fs IGZlYXNpYmlsaXR5 5LiA5LiL INii24zYpw== IOC0leC0sw== KSk6DQo= aWZheA== w6lyaWV1cnM= JSI+Cg== xJ1v IG5rdw== INC/0L7QvNC+0LPQsNC10YI= KE1vY2s= RmF2 IExvdHRv INis2YfYp9mG INGD0YHRgtCw0L3QvtCy0LvQtdC9 IGdlcsOnZWtsZQ== 2oHZig== IHN1YnNpZGllcw== Q2FudGlkYWQ= IGdyYWJiaW5n IOCyueCyvuCylQ== IOCqpOCriOCqrw== 1aHWgdWr1bY= IERL INW61aHWgA== UmVhY3Rpb24= PT09PT0= IEdDQw== b2RhZXRo V2VicGFjaw== amFsYQ== 0L7QvNC1 IHRpZ2E= bWV5 IGzDuHM= IEZyYXNlcg== 2LTYp9mB IHZhamE= b3bDqWhv IGV4cGVuZGl0dXJlcw== 4KWD4KSk4KWN4KS1 5p+c INC90LDQsdC+0YA= INmE2Lo= LnB1Yg== IOODrQ== IHRvY2E= X2N5Y2xl 44CC77yM44CC b3R0YWdlcw== IHV0aA== L3Jlc3Q= IGRpZmZpY3VsdMOpcw== IEZsb29yaW5n IEN2 ZW5pYw== IOCkquCljeCksOCkpOCljeCkr+Clh+CklQ== IHJpdHVhbHM= IEZpZ2h0ZXI= IFZpY3Rvcnk= T3V0ZG9vcg== IOmdkumdkuiNiQ== dW11bGF0aXZl INKb0L7Qu9C00LDQvQ== 7ISx7J20 SVZFRA== IGtlcmU= 1aHVutWh1oDVsA== YXJ6 IOCmleCnjeCmsg== 4YOQ4YOe4YOY4YOg IOGDnuGDkOGDoeGDo+GDrg== INeV15XXmdec IFNwaWVsYXV0b21hdGVu IENvbWlzc8Ojbw== INmD2YY= IGhhZQ== IGxpbmdlcmll X1BST0pFQ1Q= CXN5cw== IGluc2VydGluZw== IG1lbmdlbmFp IOC0huC0sOC0guC0rQ== aXNzdWVk IHNlaXpl 4KSy4KSV IHBvc3NpYmxlcw== IHdpbmtlbHM= Y29tbWlzc2lvbg== IFVtZ2FuZw== cnVubmVy yZl0ZA== w61maWNv Y2VtbWVudA== IG1hw6c= IExMUA== RXhwb3J0ZXI= INGA05k= 5pWi IGFnYWlubg== IGRpZmVyZW50cw== LnJlbHU= IGNsb3VkeQ== 4YOU4YOd4YOR4YOY4YOh X2VuY29kaW5n INin2YTYsdi62YU= Xzw= ICAgICAgICAgICAgICAgICAK IHNla3Rvcg== PicpCg== IGlsdW0= IHNhbGFyacOpcw== IFRvY2h0ZXI= IE1vcmQ= 2K7YqNin2LE= IHVuZGVyd2Vhcg== Rk9STUFU IHRhbnk= IOygleu2gA== LnNlcQ== ZW5kYWI= IHbDpnI= ZW1haW4= IHZvbWl0aW5n aGVyaXRhbmNl IEJPWA== cHJhaw== 44CL55qE IOCkruCkv+CksuClgA== IF0sCgo= 4LiJ IHBhbHZlbA== IG7DuA== INC+0YDRgtCw IGluYm91bmQ= UHJlZGljdA== IOCkruClguCksuCljeCkrw== IGthcGFn INC10LjUpdGI IG9yZGluYXRldXI= 0LHQvtC5 IG3DunNj IGZpZXRzZW4= c3RlcmVk TGVhZ3Vl 6Ieq5bex55qE cGxpYW5jZXM= 4KS+4KSv4KSy X0NOVA== 0JHQsNGI IGFhbnNsdWl0 aWJpYQ== IGhheWFu INCx0LDQvdC60L7Qsg== IHNjYWxhYmxl IOCuhuCuleCuv+Curw== aXN0b3M= INis2KjaqduB 4YOQ4YOZ4YOj4YOX4YOg IOWkp+S5kOmAjw== 0ZHQtw== QVJC 0YbRltGO aW1tdW5l IENPTU1FTlQ= 77y/5pel5pys ZWxsZWN0dWFs IGtoYWk= IGFudGlxdQ== IGJlbsO2dGlnZW4= 0LXRhtC1 4LCC4LCh4LGB ID4o Q2FyZ28= INCd0LDQtA== IOCmquCnjeCnsOCmpA== IGZvdG9ncmE= 4KqC4Kqk4KuN4Kqw4KuA INGA0LXQsNC70LjQtw== IFRvdWxvdXNl dHJhY3RpdmU= IOGDoeGDkOGDmeGDo+GDl+GDkOGDoOGDmA== INC90LXQv9C+0YHRgNC10LQ= VHdpZw== IGN5Zg== IOCksOClhw== IOCkruCktg== IGZyZXQ= 0LvRltCz0ZY= INWj1bjWgNWu1ajVtg== Zml2ZQ== cmVkZGl0 4LS/4LS0 YXBvdA== aXR1YXJ5 PEJvb2s= c3RvZA== IFJCSQ== IOunkO2WiOuLpA== IE9tYWhh dWxvZw== 7Iuc64qU 5LiL6ZmN IGRpc3RyYWN0aW9u 6rCA7KeA w6lyaW9z IGludGVydmVuY2nDs24= KGNvbmZpZ3VyYXRpb24= 4YKP4YC9 IGNvbXBlbnNhdGVk INC/0LjQuw== 0YnQuNC60LA= PlRoaXM= 5b+D5b6X KGN1c3RvbQ== IOC4rg== IOCyrOCzhw== IGxpbWJz IG92ZXJzdA== 4Kq/4Kqk4Kq/ LWZpbmFs IFJGQw== YWrEgQ== IFBlcnNvbnM= X2FwcGx5 aWN1bGFz O30NCg== IFBST00= IOC0sOC0o+C1jeC0n+C1jQ== RU5UUlk= Y2hlY2tz IHN0ZXJsaW5n 4YOQ4YOR4YOQ4YOb4YOY4YOh INC40L3QtQ== IHJvb2Z0b3A= 0LvQtdCz0LU= IHN1cGVyaW9yZXM= 4K6x4K+N4K6V4K+B KGF1eA== IOyWtOuWu+qyjA== 44O844O8 IFZpw7A= WVc= aW1iaW5n TGVhbg== CXByaW50aw== IHRyw6Y= IGFzdW50bw== INC00L7Qv9C+0Lw= IHNodQ== 4LWB4LS3 KHNlZWQ= X3dl IGNpZGVy IFN1cnZpdmFs IFByYWt0 4Ka/4Kam4KeN4Kan IGt1dGVu IGJyZWFzdGZlZWRpbmc= X29wZXJhdG9y LmJpZw== IOGDnOGDkOGDrA== IGtvbnN0 INeU16jXkQ== RmV0Y2hlcg== IG1hbGlpdA== IOCkruClgg== Y29va2llcw== CUVJRg== IGNsZWFyZml4 XA0K 7Lo= 2KHZkA== dWN0b3I= IHJlc2VtYmxl cHJvbWlzZQ== IG11cmFs IGhpZXJvbmRlcg== W0Y= IGF1dG9tb2JpbGVz IGtlZ2lhdGFu Pik7Cg== IHZlbHZldA== 5pma5LiK IHBhdmVk IHNwbGVuZGlk 4bq3bmc= ZW5jacOz IGZhZGluZw== b3R0bGU= IGlrYQ== Lmhw IGNoaeG6v24= INGA0r/Riw== IGdlZsOkaHI= QUNFUw== eWlp IERpZmZlcg== Y2l0ZQ== IGVjb3N5c3RlbXM= IENvcGVuaGFnZW4= 2LLZiNis IG5ldHRveWFnZQ== INin2YTYsdis2YQ= IEJlbGFydXM= w6R0dHJl IHNhdGk= IGlsbGVnYWxseQ== IHbDpXJ0 0LDRgdGC0Yw= IHN0bQ== Y2h1cmNo IHRvcG8= IG5ha2E= IGhpc3RvcmlzY2hl UGljdHVyZXM= Y29hdA== IEphc3Blcg== IGdpeg== IGppaGFy 2LTZhtio2Yc= IOCmhuCmpA== 1aHVvtWl1aw= IGxlZnRvdmVy IHZpdGFsaXR5 0LDQu9GM0L3Ri9C80Lg= b3Rpbg== zrjOtc+Dzrc= IHByb2dyYW1tZWQ= 5LiN6KaB WVBFUw== LmRpZmY= IHPDrW4= 1oDVodWq1aXVt9W/ IOCkruCkv+CksuCkvg== INC30LDRidC40YLRiw== 6K6o6K66 IFB1YmxpY2F0aW9ucw== Km5w IHZlbmk= 15zXnQ== IEdyYW5pdGU= IEJvb3Ro IGZlbsOz 4KSP4KSo IGdlcnQ= Z8SndQ== XzsNCg== 5LiA5aSp 4YOc4YOU4YOh IHNvdXRoZWFzdA== 1a/VoQ== cmVzdHJpY3Q= IHBhc2FkYQ== INCy0LXRidC10YHRgtCy amVuamU= INmE24zYpw== 4Liy4LiK4Li04LiB IGlud29u IG3Fr8W+ZXRl IOCqquCqueCrh+Cqsg== IG1vZGVyYXRvcg== IERlY29kZQ== IOCmpOCni+Cmrg== INCj0YDRi9GB0YLTmdGL0LvQsA== 0LPRg9GB0YI= IFJvdGF0aW9u 6ZiF IFR3aXRjaA== IGlsYWxpbQ== INC20q/RgNCz0ZbQtw== 4LKw4LON4LK1 INC60L7QvNGD INix2LPbjNiv IG1lcml0cw== IGJhbGk= 2LLYuQ== IEFlcm8= IENvbnRyYWN0cw== IHNlbnNhdGlvbnM= IHppZWw= IEd1amFyYXQ= wq8= IG9wcGVydmw= KGNsdXN0ZXI= IHbhu7Fj IOCkleCkueCkqOCkvg== IHJlY29uc2lkZXI= IGhhbGFtYW4= IHN6ZW0= aXp5b24= IGVudHJlZ2Fy INC/0LDQudC00LA= INCw0YDQvdCw0LvSk9Cw0L0= IEZsYQ== IOqwkOyCrA== Y29tYmluZQ== 4LSV4LWG w61jdWxhcw== IG1rcA== IGhpbm4= 4K6p4K6u4K+N IHByb3Nz YsO6 2KjZitiq KENvbXBvbmVudA== INCw0LvRgw== IHRlcmFwaWE= IO2YuO2FlA== IExheg== YW1tbHVuZw== 4Z6E4Z+L IOCkteCkvuCkr+CksA== 5aeG 4YCQ4YCt4YCv IGNhbm5hYmlubw== V0lORE9X IOC0uOC1jeC0teC0puC1h+C0tg== KENvbmZpZ3VyYXRpb24= 4KWH4KSu4KS+4KSy INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGP IHdlY2hzZWw= IGhpZXJybw== X0JPRFk= IOeo IGtvbXBsZXg= IFByb3plc3M= d2lubmluZw== Tms= IHRlbsOtYW4= IEtpbmdzdG9u IHJlc2VtYmxlcw== IGFhcmRl IHNpZ3Vy IEbDpGxsZW4= IFJlZHVjdGlvbg== 2rU= IFNQRQ== emFt 4Ki/4Kio IGJ1bnU= IG5vbWJy U29tZW9uZQ== INmI2KfZhNmF2Lk= X2RpY3Rpb25hcnk= IFN1c3NleA== IGjJmW0= IOCwheCwp+Cwv+CwleCwvuCwsA== YXlvcw== KERhdGFiYXNl 5ruR IExhc3RseQ== V29uZGVyZnVs IOC0leC1i+C0sw== 0K/Qug== 77yM6Ieq 15XXkdeZ150= 5aS5 IG5lZQ== ZW1hcms= IHZhbG9yaXo= IHRvaWxldHM= VUlGb250 IHVuYmlhc2Vk IEhhbmRlbHM= IOCkheCkquCksA== IHLDqWNlbW1lbnQ= 1aHWg9W41a0= IGZpa2s= c3RlaHQ= INi42YQ= IHLDtA== IGJpdGg= IGVsbGVu IEZyZWk= IEF3YWtl U2Vuc2l0aXZl 4KSu4KSk4KS+ IFdW IGJlbG9uZ2Vk IOCkpeCliw== LlJvb20= IGNvbXBvc3Rv w6lyYWxl IGxvd3M= 4Liy4Lij4LiW YXZhaWxhYmlsaXR5 aXZvcQ== 4K6/4K6v4K+B4K6u4K+N 6ZqO asWz IHZlbnRhamFz THY= aXR0dQ== IExFRw== IEJlbmNobWFyaw== IEJhZGU= IHLDqWZs 5oyB57ut 4Kq+4Kqv4KuL 5LqP IFVuaXZlcnNpdMOkdA== IOC4qA== 0LHQuNGC cGVjaWZpZWQ= 6KQ= YWNvbnM= 5LiA57qnYQ== IHBvdGVudGk= LmlucHV0cw== Q1VSUkVOVA== LlRyYW5zZm9ybQ== IMO9YcWf IHN0cml2aW5n INiq2YbYuNmK2YU= IGpvb2tz IGp1aWNpbw== 7J6Q7J24 IFRyZWFzdXJl IOCkleCksOCkpA== QXJyaXZhbA== 4LS+4LSo4LWB4LSC X3Nv IFNQRUM= X0lEWA== IOCwh+CwmuCxjeCwmg== IOCkreClh+Cknw== 4K+L4K6u4K+N IGNvcnJlY3Rv IGVtYnJvaWRlcnk= dXJpZA== IGhhdW50ZWQ= IMOpY2xhaXI= IGFucGls INeV15XXotec15g= INeR15nXqdeo15DXnA== IENPTVBMRQ== LkNhbWVyYQ== IOCmhuCmrOCmvuCmsA== IGJhc2k= IGNsdQ== IE9idA== IFRlbGVwaG9uZQ== 5Liw5ruh IFJlY29yZGluZw== CXRhc2s= 2KjYr9mI IOCuquCvhuCuseCvjeCusQ== IG9wbmVtZW4= 4LK+4LKa INGA0LDQvdGM b21pbmk= IOiwgQ== cmljZXM= INmC2KfYptmF 5Yi26YCg IGRpcGVy IG9jdQ== VFVSRQ== cm9rZW4= CW1vdmU= INGB0LXQvdGC0Y/QsdGA0Y8= b2NjdXBpZWQ= INec15TXkQ== U0FDVElPTg== YXNjaW1lbnRv 4LGN4LCm INmE2YTZgg== IM6h Y2huaWs= dGVyZWQ= w6Vz IHDDqXM= c2tpbGxz IGlucXVpZXQ= IHRoZXJlaW4= IENPTlRBQ1Q= RnVsbHk= 2KfYptix2Kk= RHJpbms= Unlhbg== Ij4nLiQ= IHNjdQ== IGV2ZXJ5b25lJ3M= IOCmheCnjeCmrw== IGFiaW4= amV0aQ== IGJhbGFucw== IEVmZmljaWVuY3k= IGVkaXlvcg== IOCmpuCngg== IELDvHJv 4KS/4KSv4KS+4KSB RnQ= IOCqteCqvuCqsA== IEZsYW0= IGRpYXJyaGVh IENvbmNsdXNpb24= IOCkheCkqOClh+CklQ== Y29uY2U= IG1hamQ= Z3JhbnQ= IGNvbmVjdGFy IGRlbWFpbg== w7xzdGU= RGVhbGVy IC4uLi4KCg== IGNhbm5lZA== 4oCZaW50w6lyaWV1cg== ID8+Pg== cXVpcmVy 5omA5Zyo IOC2tOC3kg== IHBhcmFhbg== LnJvbGVz 772h IGluc3VyZQ== 4LKs4LOG4LKC4LKX4LKz4LOC4LKw4LOB ZXJjaWNpbw== 4KeA4Kav4Ka84Ka+ IGZ0cA== INiq24w= INC00L7RgdGC0LjQsw== IGtvdXQ= 4YOQ4YOa4YOY4YOh IOCmuOCmvuCmsA== IFZpa2luZw== QmFzaXM= INmB2LnZhA== IGJlbGlldmVy YW5vaQ== YWRvcmlh 2KzbjA== IERlbnNl X2JyZWFr 4K6/4K6y4K+N4K6y4K+I 16LXoNeZ15nXnw== PFZlY3Rvcg== INC/0YDQtdC00YPRgdC80L7RgtGA IHVyZ2VuY3k= J10pDQo= 0LXQtNC1 wq10ZQ== QmxvY2tlZA== X2ZyZXF1ZW5jeQ== IHVudGVyc2NoaWVkbGljaGU= IFN1Ym1pdHRlZA== IOS4gQ== INGB05nQuQ== IG5vcndlZ2lhbg== INqa2Yc= INi52LU= 66Gc6re4 64Ks YWx0dW5ncw== IGRlc2Nhcmdh VGhyb3VnaG91dA== IG1ncg== KioqKioqCg== IGRhcmluZw== INC605nRgQ== IG9zb2Jh dXNzYXQ= X3Jk IGNsb2Nrcw== INeb16A= IHN0cmFuZQ== zrzOv869 INii2KY= IE1lYXN1cmVtZW50 IENvbnRyYQ== INeg15nXoQ== IEJhbGxldA== ZMOp cmlleg== IGJhcmJh IFRlcnJhY2U= VGVsZXBob25l IEthcm5hdGFrYQ== IFN1aXRhYmxl IEJsb2I= dW1icg== ZGVv IOWtlw== LlZpZXdz IHZsZWVz dW5la2E= IEthaXNlcg== IE1JUw== IOC5gOC4guC5ieC4sg== IHRpdmVyYW0= IHByb2dyYW1hw6fDo28= Zmx1Zw== IHdpZWQ= IGVzcGFjZXM= KDosOiw= 0LTQuNC8 IHdhdGVyZnJvbnQ= 2bzZhw== ZGFkb3M= 4LGA4LCy4LGL IFBvbnRl INeS16LXlA== IG1vb3Q= a3JpcHM= IOCyuOCzgeCypuCzjeCypg== cmli IG5vdmVk LkJPTEQ= IGzhu6Np INC60L7Qu9C40YfQtdGB0YLQstCw IElsZQ== IHBlcm1hbmU= IGFrdHk= IOCmquCmvuCmqA== INS11oDWhw== IOCyqOCynw== J109Jw== X1JFR0lPTg== IOCqluCqvuCquA== X3JlY2VpdmU= IHRleHR1cmVk 4Z6Y4Z+S4Z6Y IG1pbGxpZXJz Q2hhcnRz INGC0L7Skw== INC90LXQtNC10LvRjg== IFp1aA== IEFkcmVzc2U= IENvbnN0cnU= b3Rhbg== YXTDs3JpYQ== 0JDQtA== dGnDsA== CXBhZGRpbmc= IHNwZWFy IOadjw== 7KCd SVNUQQ== L3NjcmlwdHM= W00= 0ZnQsA== LXRpZXI= c2dvbA== IGRlZmVuZGVk RG9jdW1lbnRhdGlvbg== IG1hcXVpbmE= U3BhdGlhbA== 5YGc5ZSu Q29uZmVyZW5jZQ== UFJFQw== PiIr IEthbm5hZGE= IHbDqXJpdMOp X251bXB5 IE1hY3Jv IGthbGlhbg== IGJyYWNlbGV0cw== IteT LUFnZW50 ZXJ2b2w= ID09Cg== IG51Zw== aGFhcg== 4YOd4YOg4YOq4YOY4YOU4YOa INC60L7RmNCw ID4m 0LXQttCw0YLRjA== IENvaW5iYXNl IOyymOumrA== IGthcm1h IHbDqnRlbWVudHM= X0lORA== w7xnZQ== IGZpcnN0bmFtZQ== d2lzaA== INGB0LLRj9GC INuB2YXYp9ix25I= X1JldHVybg== 4KS+4KSk4KWA4KSy aWxsYXRpb24= 4YOY4YOX4YOQ4YOT IFJvbGxz eGJldA== 44GE44Gf IGthd2E= IOCmuOCngg== UVVFUlk= U1BBQ0U= cWM= VEc= LmxvZ2lj IHZyaWpl INCz0YDQsNC9 LlB1YmxpYw== IG9pZA== IGluc29s IOCmquCmvuCmoA== IGZsdWVudA== LmRhcms= IENvbXBvdW5k 7YK5 KFNlcnZlcg== KFRocmVhZA== ZMSb IGVtaXR0ZWQ= aWZlc3R5bGVz 0LDRlA== INGJ0L7QsQ== 4LKz4LOG4LKm IOClhw== ICAgICAgCgo= dMOk ZWds LnByZXNlbnRhdGlvbg== IGN1bHRpdmF0ZQ== IEJFTg== IOC4iOC4o+C4tOC4hw== OkQ= LmludGVyZmFjZQ== 4KSf4KSy IOCyrOCysA== IHNwZWNpbWVu YW5rbw== IHN1cMOpcmlldXI= b2JhbHQ= IExPR0lO b2RvYg== IGRlY2xhcmFjacOzbg== xYJvxZtjaQ== IM+Dz4XOvM+A 0LjRgtGD0YI= a3lu IEFzc2VtYmxl IGNpZW50w61maWNh cmVzcG9uc2l2ZQ== YW5qdXQ= IEZhbW91cw== YWxlbGU= R3Jh 6K+E5Lu3 IE9mZmxpbmU= PT09PT09PQo= IGFuaW5nYWFz IHdyaXRhYmxl IOCkpuCktg== dW5pcQ== IGhhY8OtYQ== IFhh IEtsYXVz IG3DrXQ= 772N IM6szr0= IE51bW1lcg== IEVtcGxveWVy ID8+Ij4= INmG2YXYpw== IGNhbXBlb25hdG8= ZHLFvg== IGJlem9la2Vu YWhydW5n IE1MQQ== Oy4= W0ludA== bnR1 ZWxpdGU= IOCmuOCnh+Cmnw== IGp1c3RpZmlj IMOpc3Rh IFZC IG9jY3VwYXRpb25z IHRlaGTDpA== IHNwYW5uZW5kZQ== ZW5naW5n IGFpeg== IGNlY2k= YXRobw== IHBhZ29z INC+0YDQs9Cw0L3QvtCy aXRpYw== IGJpbGdp X1NDUkVFTg== IFJUUA== aGVtZXI= INC90LDQstC10YA= zr7Otc65 4oCd5ZKM IGZpYQ== Li4uKQoK d2l0aGlu IHN0YWdlZA== aXR0ZW5z 0Y/QsdGA0Yw= 44O744O744O7Cg== IEVsZg== IFJvdGF0ZQ== 16jXm9eW QU1J IEJpYmxpYQ== 5Y+R6KGo5LqO ZW50cmFkYQ== IEhpYmVybmF0ZQ== IHNhdXY= IGNvbnN1bWVudA== Q2VudHJv INmI2YrYqg== IGt0b3LDvQ== fSkpCg== Tm92YQ== IOC0ieC0puC1jeC0mOC0vuC0n+C0qOC0gg== INC30LDQv9C+0LvQvQ== IG1lbmluZ2thdGthbg== IGF3b24= IFRvcnQ= IGZpYnJh IE5lYXJieQ== IG9maWNpbmFz INGC0LDQutC+0Lw= IHds IGZsYW0= VVNQ Y29uZXM= 0JDS 6YOR IG1pbmVyYWxlcw== KG51bWJlcnM= IGVzcXVlcmRh INCf0L7Qu9GD0Yc= IFdhcnVt INWi1aHVptW0 4oCZbsSxbg== INGB0LjQtw== 2LHYtQ== 5omL5py65Zyo57q/ LnRvcGlj VVNURVI= KXJldHVybg== INiv2LHYrw== IMO8YmVyYWxs IG5ndXnDqm4= 0YPRg9Cz0LA= IHN1cHJlbQ== INGB0YPQtNC10LE= IOWJjQ== INC90LXQt9Cw0LLQuNGB U1RPUkU= 4Ka+4Ka34KeN4Kaf4KeN4Kaw IFByb2R1dG8= 0YHRgtCy0L7QstCw0YLRjA== X3ByaW1l 5Lq65Lq654i9 LWRyb3Bkb3du INeU15fXkdeo15Q= IGZha3Rvcg== LklubmVy IOCkrOCkmuCljeCkmuClhw== L3RlbXBsYXRlcw== IEJlbmVmaXQ= IGVmZmVjdHVlcg== IFJlcXVpcmVz IHNhbml0aXpl IG1lbmk= 4LiK4Lij4LmM IHdpams= INOp0Lo= a2VudA== IG7hu40= 4Kew4Kew IG1hbmRhdG8= INGI0LXRiA== IHNtYQ== RG9taW4= YXR0dXR0bw== Q1g= 0YbQtdC5 INGA0LDQvdGM0YjQtQ== IOyCvA== LW1pbGxpb24= IHbDrW4= IFRlbmVy IHByw7N4aW1hcw== INWJ IGNvbXBvcnRlbWVudA== 4LC+4LCm4LGB IG9uZGVyd2VycA== IGVjdA== IMOzdGltYQ== INCz0YDQsNC80LDQtA== INC00LDQvdC90L7Qs9C+ 0YbQuNC+0L3QuA== IFZPTA== IOCmtuCngeCmqA== ZGVncmVl IEphaWw= U3RhdGVtZW50cw== IGxvZGdpbmc= X0JZVEVT T1VSUw== RWR1Yw== Y2VsZQ== INCg0LA= X21hc3M= b2JzZXJ2ZQ== 4LSf4LWN IM+Dzro= IGthcmFy IG5hdHVyZWxsZQ== 4Ka+4Kaq4Kao LkhvbWU= IG1lcmtleg== 4KWL4KSy4KSo L3Rvb2xz Li4uLi4uLi4u IHphbWJpcmk= IGFic29sdW1lbnQ= IGdlZWY= IGbDs2xr IELDvGNoZXI= IHPDqg== 4YCx4YCs4YCA4YC6 INOZ0L8= INGB0LzQsNGA0YLRhA== c3Bv LXRocmVl IGtw w7NyZG9iYQ== LdCw0ps= dXRvbg== IGNsYXNzbWF0ZXM= c2J1cmc= 0L7QtdCy IEVGSQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IEvDuA== IGVjbGVjdGlj IHlhaG9v IOq3uOqygw== INCx0Z4= IGJhdHRlcmll aWtvcw== KEFkYXB0ZXI= IGR5bmFtaXF1ZQ== LWV3 IHByw6lk IEphZGU= KXx8 2aQ= INC/0YDQuNC80LXQvdC10L3QuNGP bWVp IGFkZXB0 L2lz IOmE aGo= IHRzZWxh INC90LXQvQ== 4LeT4La44Lan aW5raW4= OmJvb2xlYW4= IGhp4buDdQ== IOCyreCyvuCylw== INqp2YjYrw== IGt1cGF0YQ== IGhvamE= 4YOU4YOg4YOS LeGDlOGDoOGDl+GDmA== LWFwcHJvdmVk TWluZXI= dWludHB0cg== IHRyaWxvZ3k= 4LOG4LK44LON INGC0YPQuw== INKb0LDRgNGI0Lg= 2YXYtQ== IENsaXF1ZQ== c3RlYW0= IHJlY2V0dGVz IOCmtuCmpA== INeQ1rjXkdei16g= IHN2b2ppbQ== IE5O IHNlcmV6 Vm91Y2hlcg== IHN0b29s INmK2YjZhg== 5Z+66YeR INCy0LXQu9GM0LzRlg== IMO8emVyaW5kZQ== Y2xlZA== 64Ol IGhpZW4= YW5sYWdl IGNvbmdyZXNzaW9uYWw= RlVMTA== 5a6Y572R5LiL6L29 YmV0dGVy YXNzYWRl Y29uc3RyYWludA== LkJhZA== IGt0w7NyeWNo INC60LLQsNGA0YLQuNGA0Ys= INC/0L7QtNGF0L7QtNC40YI= IGZpemVyYW0= IFNvbGlj IFZvbGs= IOCquOCrgeCqsA== 4YOj4YOr IHJpaQ== 65Cp IGFsdW1pbg== INC60LDQsdC40L0= dXPDo28= IG5lY2Vzc2l0aWVz INCy0LDRiNC4 ICc9Jw== Lm1pZGRsZXdhcmU= IGFkamVjdA== 0ZHQvdC4 Lm5z IHJlYXJy IGNvbnRpbmVudHM= bmFjaHRlbg== aXNtYXRpYw== xbxlag== IHN0aW5n IGthaGxl IG11bmljw61waW9z IHdpbGRseQ== 4K6x4K+B IGxpa2E= IHByb3Bvc8Op INin2YTYtNmH2LE= IExpY2VuY2U= UGxheWVk IG5hbm9w IGZyYW5xdQ== IGNvbWVkaWFu 0rXQtdC40YI= 4Ka+4Kad 5pak IGZhdW5h INC60LjRgdC7 4LiI4Li1 Li4uIiw= IG9tc3RhbmRpZ2hlZGVu IGltbW9iaWxp Y2h0aWc= cGVjaWE= IGRvbHBo INC40YHQv9C+0LvRjNC30YPRjtGC INii2Kw= IFppZQ== IHdvdGU= 4bqpdQ== 5Yy65Z+f 4LmA4Lil4Li34Lit IHV2ZWQ= IFRhcGU= IOCkluCliw== RXNzZQ== 6KeS6Imy IHRodW1icw== d2Vya2U= 44CCLi4uCgo= IH0pLAoK INix2KfbjA== PXsoKT0+ IEp1bmdsZQ== IHThuqV0 IGZyb2c= zr3Ot8+C 5ryC IHNhbHV0ZQ== w6huY2llcw== INC/0L7Qu9C1 IGRlZGljYWRv IHN0cmVhbWxpbmU= KCkiKTsK LWxpbmtz IHNwcmljaHQ= zq/Ovc63 dXph IOWY 6buR5Lq6 INK706k= ICAgIAogICAgCiAgICAK IOCyuOCypg== O2NvbG9y IM60z4XOvc6x INiq2YXYsQ== YXBoZQ== UXVlcnlhYmxl IHJpc2Nvcw== W2xlZnQ= KGRlc3RpbmF0aW9u 5LqL5a6e IEFybW9y INCc0LDQvQ== IFRheGk= 55yL55qE 4K6/4K6x4K+N4K6V4K+B LnNsdWc= IMO9b2w= bmppaA== INi12YjYqg== IHByZWtv IOCyheCyqOCzgQ== IOC4quC4peC5h+C4reC4leC4reC4reC4meC5hOC4peC4meC5jA== IHJlcGVudA== 0YfRi9C9 IHB1cGls L1hNTFNjaGVtYQ== c2tlcg== INGF0L7Rh9C10YI= SGUncw== IEZPVU5E IOCmmuCmvuCmsA== 05nRgdOZ0Lk= IFNvbW0= IHByZWNv b3Vlcg== IHBpxJk= WWk= LVRv IGNvbmZvcnRv 5oOF5L6j IENsYXNzaWZpY2F0aW9u 4YOQ4YOo4YOd4YOg4YOY4YOh4YOd IFNhaQ== REVWSUNF L2Rk 7IO1 IGNvbXBvc8Op IHNlc2U= IEdvZXM= IFZvcnRlaWw= Lk91dA== ZGlhbQ== IE1lcmNo IGRhw7Fv INC806nQvA== IGhvbWVzY2hvb2w= IHJlY3VwZXJhY2nDs24= IOW9qeelnuS6iemcuOeahA== 2q/Zhw== w6Fzb2s= IOC0teC0tA== IGxlbmd1YWpl IFRvaWxldA== IERlbm5l IHBvYnJlcw== INWE1as= IGZpbmVseQ== IENsZXJr INGH0YvQug== dW50ZWVycw== ICdd 4oCZYWx0 IOeuoQ== 2LnYp9mK2Kk= 1bjVvA== IHRlcmw= VHJhZGluZw== IGJhbnF1ZQ== INmI2YjbjNmE 64WV ZmZz ZWNpbWVudG8= IEludGVyZXN0ZWQ= LkxvZ2dpbmc= S3Vu aWduw6ll IGNvbmZpZGVudGlhbGl0eQ== IERyYWlu IHJlcHJvZHVj b3VuZW4= IGNvdXBz YW5pbWFs c2VydGluZw== IGhvbGRpbmdz IGJlYmU= IGV0aGFub2w= IEplenVz INeQ15XXqA== Y29tYQ== IFZhbmRlcg== LXdvcmtlcnM= IOCqteCqv+CqtuCrhw== PFNj LWNvdW50cnk= aWdhdG9y YXB0aWM= IOGDkuGDmOGDneGDoOGDkg== 4LSe4LWN4LSa4LS+4LSv PD89JA== IFRZ 67CU7Lm06528 YXN1cw== INmF2KzavtuS IHBvc2l0aWV2ZQ== IGNlcmVtb25pZXM= IEdlb2dyYXBoaWM= bHRhbA== IGRvb3JzdGVw IEltbW9iaWxpZW4= IFtdKA== csOm SW5zdHI= Sm9o UmVwb3J0aW5n SHY= IOa4uA== INC20LjQu9GM IGVnd3U= 4LS14LW8 IGxvb20= YWdhZA== IGNvbWl0w6k= 4YOg4YOQ4YOi IOW5v+S4nA== IGluaGliaXRvcg== 4oCcV2hlbg== 4LmA4LiB4Lit4Lij4LmM IGtub2NraW5n IFJldmlld2Vk INiw2LHbjNi5 IHdlZWRz YWtpdGE= IEdpbmdlcg== IENoYW5uZWxz INCy0LDRiNC10Lk= IHN0cmF0ZWdpY2FsbHk= IElvbmlj IOCwqOCwv+CwsOCxjeCwteCwuQ== IFNhdmFubmFo L2NvbnRhY3Q= IFJlY2VpdmVy dm9lcg== IHZlbnRlcw== IG5vcm1lcw== KFVyaQ== KX08Lw== INin2YTYrdin2YTZig== INiq2YLYrw== IFfDpHI= YnJpbmc= PEc= IG9ic29sZXRl Vmlld2Vk IOGDlOGDmw== bGVuZA== IOGDmOGDnOGDpOGDneGDoOGDm+GDkOGDquGDmA== INqp24zaltmK IEVsbGlvdHQ= cm9sbGV5 IGNsbw== INmG2Yo= IGp1dmVuaWxl YWRlcmVu 4oCM2K/Zhw== INin2YTYpdiz2YTYp9mF2YrYqQ== IOCmruCmvuCmrg== IGFscXVpbGVy 6L6J Q2Fub25pY2Fs INCw0L/RgNC10LvRjw== IGtudWxsZQ== IHVud2lsbGluZw== IEFQQQ== IHNwdXI= IHByZXZlbnRpdmU= IHR1c3M= IEJoYXI= IGzhu4tjaA== INCU0L7QvQ== IHNob3BwZXI= IGhlbm5lcw== IER1Yw== IGNhcm91c2Vs INC/0YDQsNCy0LjQuw== W21zZw== CWhhcw== 6ICz 4oCZZXhww6lyaWVuY2U= 0JXQmw== INmF24zYp9mG aXN0ZXQ= IEZBQ1Q= YWJzZW5jZQ== 4LmA4Lij4Li14Lii4LiZ 4YOa4YOU4YOR4YOQ INmG2KfYr9mK IHJldml2YWw= KFVu X21pc3Npbmc= TGFzZXI= IOCwmuCxh+CwuOCwv+CwguCwpuCwvw== INin2YTZhdmG2KrYrNin2Ko= bm90aGluZw== eWR5bQ== KV0p ZW1iZXJn IE5WSURJQQ== IFN0eWw= YWxpZXJz JGY= IOGDr+GDkuGDo+GDpA== INmF2KfYtNuM2YY= IQ0K X3BvbHk= L3Ro L0xpc3Q= Y2hhcmdlcw== dmF0dXJl KFst INGH0YM= INC40LrQutC4 IFBhcnRp IGtvxYQ= IEp1aWNl b250b24= cm9tYW4= IOCmruCmpA== Y291bnRz c3Rhcw== IGNvbmZpcm1h 25XZhA== IGVzcMOpY2ll IGltYWdpbmF0aXZl IGFjb2w= IHZlbnR1cmVz IFB1bnRsYW5k INmE2YTYutin2YrYqQ== KGNt RXN0bw== 0YDQtdC4 IGhvcHM= 5aWL 4KSc4KSs IHJhaW5z RmVy Y2hhcHRlcg== IG1lbnRvcnM= IGVrc3Blcg== IHJvam8= IEhlaW4= KmlubmVu IGVudHdlZGVy 44Ot44O8 4LOH4LKc X1JFQw== IE1vdGl2 L2ZyZWU= aXRla3M= IG9iZWM= 5o+Q5Y2H 4KuB4KqC4Kqs IGhhZ2hhaWRo ZXN0ZWxk PFVuaXR5 IFZlbnR1cmU= IGVkaWI= IEJMT0c= QmVn INin2YTZiNiy2LHYp9ih IGh1aA== IFJK xaNh anNjZQ== cGFydGlhbHM= a8O9 IHp1bGV0enQ= YW5uYWdl IEpvb21sYQ== T2ls IFR1Y3Nvbg== b2NjdXBhdGlvbg== YXJlbGxh w6Ruw6Q= aG9sZHM= IGZpbG1tYWtlcg== IE9MRUQ= IFBZ IGbDqXI= INOp0YfQtdC9 IGphdWg= YXNhZA== IGdyaWxsZQ== aXBlbA== YXdhcg== INin2YTYt9io 1aHWhNaA 6KOB IFRyYWN5 4KuL4Kqu INC00LXQutCw0LHRgNGP Lm1hcHBpbmc= 05nRi9GA 4LOB4LK14LOB4LKm4LOB 4Lin4Li1 IM67zrE= INGG0Y8= X21h IGxvdGlvbg== dW5keQ== IGdpbw== IHBhcnRpY3VsaWVycw== IEV4ZWN1dG9y 44Ki44Or IFJhcGlkcw== IFJhYWQ= IOCkleCknw== 4YOQ4YOa4YOj4YOg4YOQ4YOT IGRlcmdlbGlqa2U= 4Lin4Li04Lin IGxldm91 X1ByaXZhdGU= IM66zrHOvQ== IG5hdXc= IOCkoeClgA== IEdsb2Jv IFNvdXA= IOC0quC1h+C0sOC1jQ== IHRvdWdoZXN0 IE1hY2h0 INCa0LA= IHRhbmRlbQ== Zmxvd2Vycw== ZWxpZ3Q= RmlybQ== IMO9eWx5xYg= IG1ub2c= IHN1ZWQ= LXdhdGVy U3BlY3Q= IHN3ZXM= bGFuYW4= IOaXpeaXpQ== X1pFUk8= xJtzdA== IExleHVz 4KuA4Kqo4Kq+ IHByw6F2 IGtleW5vdGU= Z251 LnJlY3Y= IM+MzrvOsQ== IE5vbWU= w6lxdQ== IG1pdHRlbHM= V3k= INiv2LQ= IGTGsOG7m2k= 4oCZYW1i IHJlYm91bmQ= IGVlbnZvdWRpZ2U= 4Kq/4Kqd LlNwcml0ZQ== IGxvY2FsaXphdGlvbg== 4oCZYWltZQ== IHZhcmTEsXI= dWV2ZQ== 4oCZYWN0aW9u IOCmreCmv+CmpA== 2LfYsdip IEJPTg== 4LGA4LCk IGlieQ== INGB0LrQsNC2 IGdpbA== 4KWH4KSC4KSm4KWN4KSw IGTDqW1hcmNoZQ== IFNhbXBsZXM= IERFQ0w= LmNvcm5lcg== xKtr 4Liq4Li04LiZ IHByb2plY3RpbGU= IOC0seC1iw== INCw0L3QtA== QnJvYWQ= INGB0YPQtNCw aXNoaW5p IHJlZmxlY3Rpb25z IHZ1bG5lcmFiaWxpdGllcw== 0LvQuNC90LA= 4KeA4Kaw4Ka+ IHRhY2tsaW5n IEJhag== Y29ueQ== Lm1pZA== X3NpZ25hdHVyZQ== IExlaXN0dW5nZW4= b3NzaWVycw== 4K+I4K6q4K+N4K6q4K6f 5aSn55qE Q1JB IGJpbGluZw== IE9yZ2FuaXphdGlvbnM= 67Kk7Yq4 0p/RjA== IGxhcGhv INGB0L7QvtCx0YnQsNC10YI= IEZyw7xoc3TDvGNr a3Rpb24= IE1QTA== IHRlYW0ncw== IHZldXJl IFNlbmFkbw== YXJlbGE= IOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pA== IHNleGxl W3E= LXNpeA== INiq2LHYpw== IERJRA== 4Z+m IGx1cmU= IFBmZXI= IM6jz4U= 0YPQudGC0LU= Lm9wdGlt IOCkruCkueCkvuCksA== b250cm9s w6puZw== 4KWH4KS34KWN4KSg IGluZGVwZW5kaWVudGU= wr9Dw7Ntbw== c3RhY2tvdmVyZmxvdw== LmRlc2NyaWJl INin2YTZhdix2K0= IFdvb2Rlbg== 7ZmN IEN1YnM= 2LHZiti2 INqM 2YjYo9i22KfZgQ== IGFtcGxpZmllcg== IGN1ZmY= INi52LbZiA== INC60L7QvdGC0YDQvtC70Yw= IG3Dsg== 2KPZig== ZW5za2Fw VU5JVFk= IERJU0M= YCxg dXJ3YQ== Y3Jvdw== IGluanVzdGljZQ== X18oLyoh Lkh0bWw= IOuc Jywi INqq2Yg= IOCyleCzh+CyguCypuCzjeCysA== INC/0L7QtNGA0LDQtw== IG1hZG5lc3M= YWRyZXM= IHByZWZlcnM= CWNvbnN0cnVjdG9y IGNvbnN0aXR1ZQ== IGVtcG93ZXJlZA== IEluZm9ybWF0aW9ucw== WklQ ZGlnaXRhbA== IHJlYWN0aWVz IG11eA== 4YOr4YOm 4Z+S4Z6S LnBvc2U= IOCuuQ== xb5pYQ== X3dvcmtlcnM= IOCkuOCksOCkleCkvuCksOClgA== QWRtaW5pc3RyYXRvcg== IOCqqOCqteCrgA== IGRyaXY= 4LC44LGN4LCk4LGB4LCk IGNyZWFk IHN1cHBsw6ltZW50YWlyZXM= IOGDoeGDkOGDng== IFRBU0s= YXV3 IOCmhuCmlQ== IEJ1dHRvbnM= IEt1aw== TEVFUA== IFRpbmc= IEx1bXA= IOCqreCqvuCqtQ== IFVuYWJsZQ== cGhhbnRz IOCmuOCmreCmvuCmqg== IEdlb2Zm IHBhcmFkYQ== ZW1lbnRhcmE= X2Fycm93 INW21brVodW/1aHVrw== 5YWD5qOL54mM INC40qM= IFRpZGFr IGhlYXZlbmx5 ICI7Cgo= 0ZbRgdGC0Yw= QnV5ZXI= IGRlcG9zaXRpb24= IG1hdXB1bg== IHB1ZWJsb3M= IHJpams= IGltYWdpbmFy IGpveWZ1bA== X3dvcmtlcg== 0LXQutGB0YI= IHJlaW1idXJzZW1lbnQ= CXZhbHVlcw== IHdm IGbDoWls IEZIQQ== IE1vcmVuYQ== IHVsbGFt Z2VnZXZlbg== IFNoYW5l IGNvbnZlcmdlbmNl IG1lZHM= INeo16k= IFVuaXg= IEdyb25pbmdlbg== X3Jldg== c3R1bQ== YWR6aXJh INC/0YDQtdGB0YLRg9C/ dmVuZQ== IHByaW1hdmVyYQ== b3ZhYmxl IEFMVA== IGt1bXU= IEVqZWN1dA== 5pys572R LnN0YXI= IHjDoWM= Z2V0dGk= bGVpbmU= 0YPRh9GD IOCmq+Cmsg== INCi0L7Qu9GM0LrQvg== 77yM5Y+q IM6yzqw= QW5pbWF0ZQ== ZmFpcmU= IHJpc2lrbw== IE1lbW8= w6Rzc8Ok X0NUTA== IGpvaA== 4KSo4KWA4KSv INC60LDRgNGC0Ys= 5pud VVRFUw== IElicmFoaW0= INC/0YDQtdC00LLQsNGA YXNoaW4= IHByb2dyYW1tZXJz c2V0cQ== IHVuY29tcA== IE5TVA== 5YmN5bm0 U2l6ZXI= IHlpbA== IGdm VW5zZXI= IGhpc3TDs3JpY2E= IG1vb2lzdGU= INin2YTYs9i52YjYr9mK 4KSV4KSu IHBob3RvZ3JhcGhpYw== INGE0LXRgdGC0LjQsg== 4YCb4YC+ IGNvbW11bmljYXRlZA== X0RJRw== L1U= IOCkreCkvuCkiA== bHdh bGltaXRz 2YXYp9mE2Yo= IG9sZWtz Itee IGJsaw== ZmlsbGFibGU= Z3JvdW5kcw== IGFtaW5n QWdlbmN5 aXRpaw== IHVyZ2luZw== ZWxhYXI= d2hldGhlcg== IO+sgQ== X3NxdWFyZQ== dWNlbmU= 5YiG6ZKx LmFzcA== IG5la2k= IFByb3ZpZGluZw== IOCkieCkpOCljeCkquCkvuCkpuCkqA== 4KuC4Kqf 2K7ZiNix IE1pbmltYWw= IGtheWFr 2ZHZhw== IEhhbG8= YXZhc3Rp IM+Ez4HOsQ== aWtpYW4= IHNpZ2h0c2VlaW5n dXN0dW0= 4Kqa4KuN4Kqb ICpfXw== LUNvcmU= IHJpbA== YW5kaXNh IG1ldHI= 2K7ZhQ== IOCwruCwp+CxjeCwrw== IHN0YXRld2lkZQ== X09DQ1VSUkVE 0q/Qu9OZ0YI= ZWJpbA== ICciKw== IOS6mua0skFW INCw0YHQsNGB S0VB IG9pdG8= SVNTSU5H IG91YmxpZXI= w6Fycw== IGthYmVo 4KS44KWN4KS14KWA4KSw IFBsZWFzYW50 IGNyZWVr IHVydGU= IEJVSUxE IFBhbmFzb25pYw== IOCkleCkueCkpOClhw== dG9p IGhpbGk= IE7Dug== 6L+b5LiA5q2l CXJlc291cmNl INC20L7Sk9Cw0YDRiw== IGp3ZW5u IMSR4buT bGl5ZQ== IEdsaWRl 0LvQsNGA0LA= X1RBQg== 5o6J KGhleA== IGNob3Jkcw== IHLDqWNlcHRpb24= IHByZWp1ZGljZQ== INmE2YTZhw== IHBo4bul 4KS+4KS54KS/4KSk4KWN4KSv IHBlcmNlcHQ= IG5odw== 6LCD5pW0 IFdpdA== LnJlYWN0 IOaLieiPsg== 55m+5LiH zrfOsw== IEFsbGVlbg== IGNvbmNpZW5jaWE= 1a/Vq9W2 LWxpYnJhcnk= IE90dG8= INC/0L7RgdGC0LDQvdC+0LI= INC+0YTQuNGB IGzDqg== INm+2LHYpw== IG5lcHI= IOWFqOawkeW9qeelqOWkqeWkqQ== IGZpdGE= IHJlaA== TWVudA== IGRpc3RvcnRpb24= PFZpZXc= IHZvbGU= IG1waQ== ZXdvcnRoeQ== J8OpdGFpcw== IGRldm8= dGFyZ2V0cw== QXVucXVl IGpvYw== IGJhbmhv IEdTTQ== R1BM IEzDpG5kZXJu IGRpc2ZydXQ= CWRpZQ== IEp1ZGljaWFs JGFycg== L3NldA== INin2YTZiNix Lmpk IGNsYXVzZXM= IMOtdA== KCcvJyk7Cg== INC80L7Qs9C70Lg= IGd1bXM= IOCqheCqqOCrh+CqlQ== IFdJRkk= KGNhbWVyYQ== RW50cmFkYQ== aWVnZWx0 IMSdaQ== L2phdmE= SGFt 2LnZiti0 UnA= 5piv5YGH dG7DrQ== IGRhbmg= YXJhcA== IOGDrOGDmg== ZmxhdHRlbg== IHJ5dGhtZQ== IHVzdGVkZXM= IOCkrOClh+CkueCkpOCksA== IF1b YXl1 IGRpc2NoYXJnZWQ= IE1hcmtlbg== IM61zrrOtc6v IGNoaW5lcw== INeV15XXmdc= b3dhbmE= INC50LXQtw== 0LfQsNC9 2YTYp9i5 5o6y RUk= X3Jlc29sdXRpb24= 1aXVstWl1oE= INin2YTYo9mF2LHZitmD2Yo= IOCyteCzjeCyr+CyleCzjeCypA== IENvb3JkaW4= IGt1bnk= V0hP INii2LPYp9mG INCc0YM= ZW11bg== dWplbg== c2tvZw== IGFyZWlh INmI2qnak9mK X0xBTkc= IG1hY2h0ZQ== IEdlcsOkdGU= 2YbYr9mI2YI= IMOpbMOpbWVudA== L3Byb2JsZW1z IFNFQVJDSA== IG1laWE= INCx0q/Qsw== IEN1cnZl IMOpY3Jhbg== IFNpeg== 2LHZiNio YWphbA== QWxsZXM= IGFycm96 X1JlbmRlcg== L3Bvc3Rz INGG0LXQu9C+0Lw= IHBo4bulYw== IGFybWU= IOGDlOGDoOGDneGDleGDnA== IOCmpuCmv+Cmsg== YWJhYWI= INCx0LXRgNC10LzQtdC90L3QvtGB0YLQuA== IGZ1bmRyYWlzZXI= IHZlcmRpZW50 X3ByZXZpZXc= IG1ldGFkZQ== KHRlcm0= J2hhYg== IEFyZA== c2ll X3h5 IHLDqXBvbg== IEdlc2NobWFjaw== INCy0YvQv9GD0YHQug== IGdlaGVpbQ== 4oCZdWtv IM6kzrE= INee16LXnA== IGF2ZXJ0 IHRva2VuaXplcg== Iiwn IExhbmNl aXZhbmpl 0LDQs9GL0LvQsNC30LDQsNGI0YzQsA== IEFsYW0= IGRhdWVy IGtvbXBsZWtz IGTDqXRh IGNvbW1lcmNpYWxz INWu1bY= dmVpbGxhbmNl INeU15nXmdeq15Q= IG1veWE= IHDEk2M= IEFrdGlvbg== aWNodHVuZw== Z2xpZWQ= IOC0pOC1gOC0sOC1geC0rg== IHJpZXNnb3M= YWNhcg== X3Rvb2xz INC80LXRgtCw0LLQvtC9 IGluZmx1ZW5jZXJz IGlzc3Vlcg== INW91bjVvtW41oA= 0YzQtA== IGR1cmFjacOzbg== b3JlYW4= w71hbnnFiA== IERFUg== dWNy QkJD IOGDkuGDneGDkg== IEt1dGFuaQ== IHNob3J0Y3V0cw== IGZlbmc= INCT0Y3RgtCw 8Y6U TGltaXRlZA== LnRyYWluaW5n IGFjaGF0 IFRhYnM= IOC4leC4seC4pw== IHNvbGVt IFJlbGF0aW9u YXJ1bQ== INC90LDQt9Cy0LDQvdC40LU= IGFsbWFjZW5hbWllbnRv 4KuH4Kqq IG1lZGQ= IGRpc2VidXQ= IG1pZXI= IFJPVw== IOCkh+CkuOCljeCkpOClh+CkruCkvuCksg== IEdyw7zDn2U= RGlzY3Vzc2lvbg== RW1lcmdlbmN5 LT4k LmlzZmlsZQ== IGxheXM= IFNFTg== IFNlcmJpYQ== xb5keQ== IGh1a3Vt IOCwsOCxgg== IOKJpQ== IHF1ZWxsaQ== IGFubmV4 INin2YTZhdi52K/Yp9iq 0YfQuNC90Ys= LmtvdGxpbg== INin24E= OyIK IOCkuOClgeCkrOCkuQ== 4Kq+4Kqv4Kq+ INiz24zYp9iz2Ko= INGA0LDQudC+0L3QsA== 2LfYp9iq IGdyb3U= IGRvY3RvcmFs QURJVVM= IGhpc3Rvcmll cms= IEN1dHRpbmc= 7Lus INGB0LvRg9GI 55qH5Yag INio2YTYug== INGB0L/QvtC60L7QuQ== IGFrdGlm IEtvbWJpbmF0aW9u SGlw W107Cgo= IGTDqXBhc3M= xpI= 16TXp9eZ15M= bmVyYQ== 4LmA4Lih4Li34Lit4LiH IHZheWE= IHBhcnRpY3VsYXJz IG1vcmVvdmVy IGdhdG8= IGFuZXI= IEhhbGU= RmxvYXRpbmc= 0LXSm9C40L0= Lk1hdGg= YW5udWFs X2dhaW4= LkluZnJhc3RydWN0dXJl Lmlnbm9yZQ== IHdhaXRz d2s= IGRpc3Bybw== VGlu IGFuaW1h 5a6L 2LDZgQ== INC00LXRgdGP0YI= IG1vZGVyYXRpb24= 5oiq5Zu+ LW1hdGNo IHByb21vY2nDs24= IHZlcmdldGVu IFByb3ZpZGVuY2U= c3dpcGVy IteZ YW11YQ== d2lubmVy QlVJTEQ= 5YW35pyJ Pic7 IGJpbGRlbg== IOCkleClgeCkqOCliA== IFNlbGxlcnM= SW5uZW4= b2tpbg== dHJhdA== IHNlZ2E= LdW2 LkNvbnRhY3Q= IGVxdWlwbWVudHM= SVBB 4KeH4Ka24Kao Pk5hbWU= KEVYSVQ= IGR1cmNoZ2Vmw7xocnQ= IOWkp+WPkeW/q+S4ieW8gOWllg== X2FkYXB0ZXI= IGFheWU= 4LKs4LK54LOB4LKm4LOB aXp6YXRv IGRlbW9saXRpb24= IGFkZW0= IOCwmuCxhuCwguCwpuCwv+CwqA== IHNoaW5lcw== IFNFQ1RJT04= IHBhZGU= IGxpZmVzcGFu IOi/ng== IEhlcw== IFJvbGVz QVNDQURF bmdv IG1vbmk= RXhwYW5zaW9u UmFua2luZw== IOCuteCulQ== dmV5b3I= IFNoYXJtYQ== INGC0LjQsw== KENoYXQ= IFNDT1JF IHBvaW50ZQ== IOCkruCkqOCljeCkpA== INin2YTYr9mD2KrZiNix IOGDouGDlOGDoA== 4LCw4LGN4LCa INC70Y7QsdC+0Lw= INCy0L7RgdC/0LDQuw== IOCkueCkruCkvuCksOClgA== IGFsaW1lbnRv IGhhbnQ= IG1pbmlzdMOocmU= IE5leQ== INCy0L7Qt9C00YPRhQ== IEJlbmVkaWN0 IGFkdmlzZXM= IGluZm9ybWF6aW9uaQ== IGdhcmFudMOtYQ== OkM= a2VydA== ZXRjb2Rl KEVudW0= 0YDQsNC70LA= LkRBVEE= 77y/6ICB5Y+45py6 INGC0LXQsNGC IHByb3BvcnRpb25hbA== IOCql+Cqr+Criw== IEFkbWly 0YDRjw== IHTDtsO2dA== INGP0LrQsNGP IMOJbA== c3TDpG5kZQ== IGR5cg== aW1iYWxp IHNpdW5uZXJz 4Ken4Keo IMOhcmE= INmF2YXYqg== RXhwaXJ5 YWRkaXI= IG5lYXRseQ== INCR0YPQtA== IOKWug== 4Liy4Lir4Liy4Lij IGhhd2E= IGxpaXR0eQ== INC60LDQv9C40YI= IGFpc2xl X2NoYXJhY3Rlcg== IFllbg== 5Y2B5YiG IOC0ieC0rw== KGhy IHVrdXRo IEdlY2tv IGNvbnNpZGVyYWRh IFNlYXNvbnM= cXVldHRlcw== IGNlcnRpZmljYWRv dXR0ZXJzdG9jaw== IOCqpOCqvuCqsg== YXNhcmthbg== 4Lin4Lih INGH0LXRgtCy0LXRgA== INep15TXnQ== IOCmhuCnnw== 4KeH4Ka44KeN4KaV IG9udcWI IOeciw== IOCksOCkluCkvg== IEluc2lnaHQ= 2K/ZitmI KCIsIiw= IGJpYXNlZA== 4KWB4KSz4KWH TkJB 4oCcQXM= IHTDtnJ0 INCy0L7QutGA0YPQsw== IEdhZA== LmJ1Zg== YW1wYW5n IGluY29tcGV0 IOC0quC0sg== aXNxdWU= IOa1t+WNlw== IGNob3J1cw== bnVz IGhhbmRib29r IE5lcg== IE1rdXU= INiy2YXbjNmG2Yc= c2Nl IGxhd2E= 7YuA IGluY3JlbWVudG8= zrXOuc+Ezr/Phc+BzrM= IFJpc2lrbw== IE5hdGlvbmFsZQ== IGl3d2Vy ICkuCgo= aXBsaW5h 0q/Sr9GF aWdudHk= dHJhY2tlcg== IEFic2No YmV0dA== YWR0bw== IEFjdGl2YXRpb24= 4oCZbA== IGNvbmp1bnQ= IG1vdW50cw== 6ZyA5rGC IEFsbGVn KGJpbmRpbmc= IGJhbmdldA== KU1hdGg= IG1ldHU= 5Lqa5rSy57K+5ZOB INC40LzQtdC90Lg= INC/0L7QvNC+0YfRjA== IGNvbnZpZXJ0ZQ== IOCqqOCqteCqvg== IHBzeWNob2xvZ2lzdA== z4POv8+FzrzOtQ== IG1pdGlnYXRpb24= RGVhZGxpbmU= SVJT cmVuaWE= 4LGB4LCk4LGC IHJldmVsYQ== IOGDm+GDmOGDm+GDk+GDmOGDnA== INii2LPbjA== IGFwcGFyYWF0 IHNlbGRvbQ== 4KSQ IGdsYW5k 2KfZhNi0 Ozs7 IFByaW1lcg== cmFtZXI= IGRvd250aW1l INeT15DXqA== Q2h1bmtz 0YPRgdC+0LI= IGluc2NyaXB0aW9u IGtqZXI= 4LGI4LCk xJFh IGNvbGFib3JhZG9yZXM= IHBvcnRmb2xpb3M= 4KS+4KSw4KWN4KSf w6xvbWg= IGRyb3BvdXQ= 5a2Z IGRhZW1vbg== IG9jdXBh ZXRlcmFuZ2Fu dWrEhWM= IGRpcnM= IGRldw== INGB0YPQvNC80YM= IHJlY2llbnRl Lj8= IFRlbXBvcmFyeQ== SGludHM= INeQ1rfXnNei IOWPsOa5vg== IGFzZWd1csOz aGFuZGxlcnM= INC40YHQtdC8 KG5vcm1hbA== IFdlYmNhbQ== 2KfZhNiq2KfZhNmK IEtlbm55 IOGDqOGDlOGDoeGDkOGDkeGDkOGDm+GDmOGDoQ== IGzDpGJp bGV0c28= 5qC45b+D IGJsYW50 IGJ0dw== IOWwkeWmhw== IGNoZXc= 4YOQ4YOa4YOT 6K6h5YiS572R 4oCZw6ljb2xl IFhhbmE= IHphc2U= IEhlbGVuYQ== aXZhcmlhdGU= 0LjQutC+ KEZpZWxk IHVuYWNjZXB0YWJsZQ== IHByb2JhYmlsaXRpZXM= bXluZA== INC/0L7RhdGD0LQ= IO2ZnOyaqQ== ZXh1YWw= IHBpbG90bw== IGNvbXBsaWNhZG8= IHN2b2w= ZW5jaWFsZXM= IGRvbmF0aW5n LWVuZ2luZQ== KCIn T01T bGV0b24= 0LDQvdC6 INCd0LDRiA== IENMSUNL 1bjWgtaE IOyViuydgA== 15XXoNeq INGO0Ls= IOCkteCkvuCkuQ== dGVybWluYXRl 77yM44CM 1bjWgtWp1bXVuNaC1bbVq9aB INeR16LXldec150= INCw0q3Ri9Sl IEludmVzdG9y IEJyYWNl IGVycm9z IGJyZWU= eXJl YW5nZ2Fu 6Y8= IHBheW91dHM= IGFkZG9u 4Lix4LiV4Lij IGt5bGzDpA== IFBPVA== IO2ZnOuPmQ== IHVrdWY= 2YjZitmG aWJhem8= IF0p IERyYWdvbnM= IFJFQUxMWQ== LXNob3A= IERCRw== IOCksOCkvuCkt+CljeCkn+CljeCksOClgOCkrw== IGh1bWFpbg== enlr YWxvYWQ= IGVsZWN0cm9ucw== INmB2LHYtQ== L3F1ZXN0aW9ucw== IOGDm+GDneGDqw== 0LjRgtC+0LI= QUNJTkc= IGLhu59p CXBlcg== IG92ZXJsZWc= IGxpw6lz IGVzcGVjaWFsaXphZGE= IHNpdW4= IGRlY3JldG8= Omh0dHA= 15vXqdeZ15U= IENvbnN0cnVjdHM= LklN Iw0K INGF0L7RgtGM IEp1bms= IGdlc3Rv IGludGVyZGlzY2lwbGluYXJ5 4YCV4YC6 6bqm INSx1oDWgdWh1a0= IGNyZWFtcw== YW1hc8Sx IFR3aWc= 0L7QttC00LXQvdC40LU= INC80LDQs9Cw0LfQuNC9 IGNlYQ== IGNlbWV0ZXJ5 Pj8= cHRocmVhZA== IHphY2h0 X1BFUklPRA== IHBlYXJs LXJlbA== INio2KfZhNit bG9nZQ== 0YDRi9Cy PT8s 2KfYptmH2Kc= S2Fw IGZhaWc= IOCmreCmvuCmrA== 4LC+4LC44LGN InRlc3Rpbmc= bGF5ZXJz IGV4cGVyacOqbmNpYXM= IG1vbm5h IEhlZWw= 4Kiw4Ki+ LW1hbmFnZXI= INio2LTYo9mG IHJlZHV6aXI= INCz0L7QstC+0YDQuNGC0Yw= RWxpZw== IGRlamFkbw== TW9uaXRvcmluZw== IEdUWA== Lmll 44CA5o2u 4K6/4K6p4K+N4K6p IHNlcnZpY2Vk IGltcGVjY2FibGU= QWxpY2U= cWI= IGNvbmNyZQ== LXRhc2s= IGtvbW11bmU= INGB0YLQsNCy0LrQuA== QWRhcHQ= IGNvc3Rl ZW50YXRpb24= IHBhcmVz LWJyZWFraW5n IFRhdGE= INCy0LXQu9C40Yc= IHRleHR1YWw= 55uR5ZCs LW1hcg== IGluZmF0dGk= b2dyYW1h 2ZDZig== INmI2pPYp9mG2K/bkA== 4LSV4LWN4LSV4LS+4LSw TG9va3M= IGNlYW5u IGFtZXJpY2FuYQ== INC90L7QstC+0Lk= X1NUT1JF IHVwaG9sc3Rlcnk= IOCuleCuow== IGV0aG5pY2l0eQ== IOCqquCrjeCqsg== 157Xoteo IGNhbmRpZGF0cw== RmF2b3JpdGVz IOCqteCqv+CqteCqv+Cqpw== b25zdHJ1aw== QmFsYW5jZXI= YmxpY2E= dmFybw== 0LLRi9GH0LDQuQ== IG9yY2hlc3RyYQ== INin2YTZhtis IOCmuOCmguCmrOCmvuCmpg== aWx0YQ== IOCmueCmr+CmvOCnh+Cmm+Cnhw== zrrPgc6x IFlvbg== 15nXkNec w6R0dGE= Y2hhcmFjdGVycw== YXBwZWw= LXB1YmxpYw== IGJhZ2FpbWFuYQ== KGFzc2V0 IGtvbW1lbmRlbg== bGFhZw== IGNvbWZvcnRpbmc= INGB0LLQuNC00LXRgtC10LvRjA== ICpA aGlmdA== ZXRlaWxpZw== YWN0w6ly 24HZiNix YXVyYW50ZQ== YWJ1bG91cw== IGN1bnQ= INmI2LrZitix2YfYpw== IGNvb2xlZA== IGFiYWs= IHByaXNvbmVy INC/0L7RgdCw0LQ= IHN3aW5ncw== YmlyZHM= IETDvHNz IMiZ 4YOQ4YOh4YOi SW5maW5pdHk= IFNvaG4= 4LiI4LmK4LiB IOCmreCngg== IHZhY2FuY3k= IEFORw== INin2YTZhdmC2K8= ICko IGpr IE11aXRv LnB5dGhvbg== 0L7RgNCw0YLQuA== IGZyb250aWVy IHZvZGU= IG9yZ2FuaXNlcmVu IGJ1bXBz P3BhZ2U= b3JnYW5pYw== LmN5 4Liy4Lii4Li4 4oCM4oCM LXN0YW5kaW5n LXZhcmlhYmxl IHBlcnRlbmVj IOCwn+CxjeCwsA== 1Lw= KioqKioK IGt1a2E= CQkJCQkJCSA= IHR14buVaQ== ZHJv 2YLYp9mF2Kk= 6K2w UXVvdGE= IExhbmdl c2FtcGxlcw== b2dyYXBoZXJz IOGDm+GDl+GDlOGDmuGDmA== c2NyZWVucw== LmRyYWc= LWJvYXJk bGV5bw== IGRhZ2VnZW4= INmG2YLYt9ip 4LKy4LOH INC00LXRgNC20LDQsg== IHNvc3lhbA== IOCouOCorg== IHN2w6ZydA== IHdlYmluYXJz Z2FyZA== 0LPToQ== b3Jkbw== IGdob3N0cw== IEhlYXA= IFZNd2FyZQ== INin2K3Zhdiv IMOzbGVv IEJlaXRyw6RnZQ== X0dP INiq2LHZitiv amM= INmD2KrYqA== IFdL IExlc2Vy 44O844OT b3Rvdg== IGRlc2N1ZW50bw== 7Y+t 5pel5LiK5Y2I IHNhYWQ= 4KWL4KS4 IHlhbnp1 IFJvbw== IHJhc3Rlcg== LXdyaXR0ZW4= ICgoKCg= IE9sZGVy IGRuaWE= IGdlbmnFnw== SGFjZQ== IHJlc3RpdA== IHRhc2k= ID8+Ij48Pw== 15nXnteV16o= IE5vdGVib29r INCR0LvQsNCz IFBvcsOpbQ== IFp1c2FtbWVuaGFuZw== X3NwZWNpYWw= X+WMl+S6rHBr IER1cA== INGN0LrQuA== aXp6bGluZw== Y2VwdG9ycw== IHN1cGVybWVyYw== IGNvbmdlbA== IEludGVycHJldA== IOCypuCzh+Cytg== X1dPUkxE 2qrZhg== IHBvY2Fz IFRlY2huaXF1ZXM= IGJtcA== IFByZXY= YXRhYmxlcw== 77y8KF4= ZXN0YWFu IOyekOuPmQ== IGVuZGVyZcOnbw== IGRlcGFu INGB0LvQvtCy0LDQvA== IOC4l+C4uOC4gQ== LnZhcmlhYmxl 4Lir4Lih4Liy4Lii LS0tLS0tLS0tLS0tLTwv INGB0L3QsA== IEdyw6JjZQ== INmF2KfYsdiz KSk7CgoK INin2YTYtdit2YrYqQ== ZW1waW8= IGxha28= IEbDqQ== IHByb3N0aXR1dGFz 0YLQsNGA0YvQvQ== 2LPYp9i52K/YqQ== IGFzeWx1bQ== w6hjZXM= Z3Jpcw== IOCksuCkvuCksg== IGhlcm1hbm8= LXN1aXRl bWVhbnM= IGF1c2dlcw== IHNoZXJpZmY= T01B 4LWC4LSw ZW5jZW1lbnQ= 44Ki44Kv44K7 4Lir4Liy4LiE4Lih IE7DpHI= w7Bhbg== IGNvbmNvcnI= INin2YTYqNi02LE= KEluZGV4 0YPRgNC90LDQuw== IGJhdGVyw61h Rm9yZw== INio2YbYr9uM INiz2LHZhdin24zZhw== 4LSk4LWN4LSv IFNvbWFsaQ== KHByb3ZpZGVy IOGDm+GDkOGDpQ== INC/0YDQvtGC0LjQstC+0L8= IHDDrQ== IGVzcGHDp29z INmI2KfZhNin2LPYqg== 2KfZhNmK2Kc= IEzDoA== Vks= 4Lii4Lix4LiH eWVlZA== INij2LPYp9iz 54aK 44O844OW INGE0LDRig== IFBhcnRpdGlvbg== IGZhY2lsaXRhdGVz IEJyb20= IGFkb3Q= IGF1ZGl0aW9u woA= IEtpZ2FsaQ== IHV0dQ== X2ZpcmU= LWV2ZXI= IGTDqXZv YWxhYmxl 6Le1 bWVrdGVkaXI= 15nXkdec dW1ldXI= LlZpc2liaWxpdHk= IFZvaXI= IHPDqXJpZXV4 UFND IExpdGVyYWw= X1BJWA== INGF05nQstOZ0YA= aXBtYXA= THVrZQ== 0LvTmdGA0LPTmQ== IGdydWVz IGJvbml0YQ== PlwK LXV0aWxz IEluZHVzdHJpZQ== 4LOK4LKC4LKm4LK/4LKX4LOG IHJlam9pbmRyZQ== INGB0YY= 0L/QvtC0 dXNhcg== YXRhaQ== IOCkqOCkv+CksOCljeCktQ== KFJ1bnRpbWU= IOCuheCusuCvjeCusg== IGNsb25lZA== KGludGVydmFs IGxlbmd1YQ== REFU 4KWM4KSB IEV1Z2VuZQ== IHVtbw== 4YOU4YOR4YOQ4YOX IELDqQ== IHByb3Rz IGRhYWQ= IOCkqOCkuA== IGNhcmFjdGVyw61zdGljYQ== IG11YWI= IGltw7N2ZWw= 4K6/4K6v4K6y4K+N 4KaV4Kay IGFycmnDqHJl IHNvbGlkYXJpdHk= IGtpZw== IHVsaQ== IG1vbWVudGVlbA== IGluc2llbWU= IOq1rOyEsQ== aW50ZWQ= YXNoZQ== KFNwcmluZw== 5o6q5pa9 5ZOm IFBha2lzdGFuaQ== LmVudA== IG1pbnU= TW9yZW92ZXI= LmFsdA== IHNpc3RlbWk= INC/0YDQuNGH0LjQvdCw 0LvSk9Cw0L0= 0LDQvNCw0YI= b3lvdGU= IEF1YnVybg== 1KXRhdGM0LA= aXNreQ== IHBsYW5r INCz0YDQvQ== LU1hcg== X0JPWA== IE1vbnRyw6lhbA== IM+Az4HOv86y IGRpdmlzb3I= IERhdmlkc29u IHJlaXplbg== IFBSSUNF IOCkpOCljOCksA== IGbDs3JtdWxh INin2YTYqNmK2Ko= 16DXldee PSI8 IFVOREVS IOydvOuwmA== b2xscw== IFZpZw== IHZhbGlkYQ== 0L7QsdCw IFhNTEh0dHA= IHNpbmk= IEhhdXRl REFM IGZpZ3VyYXM= IEZhY3VsdA== VG9vbGtpdA== w6FjaWU= IHBhc3RyeQ== ZW5tZW50 4Kic4Ki8 X3BpY3R1cmU= KHRyaW0= 15LXmded 4KuA4Kqf IE5vdGlmaWNhdGlvbnM= IFNlbGVjdG9y 05nRgtC70LjQug== IGFjdGl2b3M= YWxlbQ== IFNpZW1lbnM= 4LK14LK/ IOC0qOC0n+C0qg== IOCmrOCmv+CmqA== IHByb3ByaWE= IGthaGE= INW21b4= 4YOv4YOU4YOg 157Xmdeq IGhhY2tlcg== 4YOY4YOh4YOY w7xsZXQ= IOGDkOGDruGDmg== IHRpbmdrYXQ= INCy0LjQutC+0YDQuNGB0YI= X2F0dHJz Ym93cw== IHByb3NlY3V0b3Jz LlNlcXVlbnRpYWw= IG1wYWth 15nXoteo IFRPS0VO IGFsZGU= IOGDrOGDkOGDoOGDm+GDneGDmw== INmF2LTaqdmE U3VnZ2VzdGlvbg== INGN0L3RjQ== IGdyb3VuZGJyZWFraW5n IC4uLik= dW5rZW4= 4KS/4KSZ IGJldHJheQ== 4LSf4LWB4LSk4LWN4LSk IGl5ZQ== IGZ1bGxlc3Q= INGC0LXQv9C7 IOCyleCysOCzjeCyqOCyvuCyn+CylQ== aW1pc3Q= IFRhYmxldHM= IHJlcGV0aXRpb24= IEF6aQ== IGdhbGF4 LmZsaXA= 5Lq65Lq65pG4 IGZsYXJl 2LPZitip bGlnaGV0 YWNodXU= IHN1cGVyc3Rhcg== INC00LXQstGD0YjQutC4 IGdsYXViZQ== IGxvZ2ljaWVscw== Kik7Cg== YXNhcQ== IEhZ IGNvbGxpc2lvbnM= IHBpdMOkw6Q= Ojou ZmFudHM= INC605nQu9Cz05nQvQ== X0ltYWdl Lk1N 4YOY4YOc4YOT IGLDpHR0cmU= IEFwaw== INin2YTYqNiv 7JWU IERPRVM= 4oKsCg== IGJhaXNzZQ== ICY6 IG1pdGVu IHVtZmFuZw== CXZlYw== LmVuZHN3aXRo IGjFjcq7 IEJpbGxz IGN1dG9mZg== RHVi ZG5z 0YHQutC+0YA= IFJlZnVuZA== IFBhY2tlcnM= IOCyuOCyvuCytQ== 7IiY66W8 csmZ Y2Npbg== 5a+55LqO IEZsdWdo IGVrb25vbWk= TEVN IOyeiOuPhOuhnQ== 6YCf5bqm INC+0LrRgtGP0LHRgNGP IGphbnVhcg== IGphbWI= 0YDQvtGC 5ryr55S7 ZWlk IM66z4zPgw== 0Y/RidC40YU= IGNvbXBhc3M= cmluaw== IEZyaWVz QnVlbg== 4Ken4Keq IE9yZGVyaW5n 2LDYrA== IFRvdHRlbmhhbQ== INC80LXRgNCw IGRlbnRz IHVtZmFzcw== 4Ka+4KaZ IGRpc2luZmVjdA== IG5pZW1hbHM= aWphaA== ZWF0 IENvbXBhcmFibGU= INC60LDQutC40YU= YXR0ZW1wdA== IGNoYW1wcw== LmFkZHI= IOCksOCli+Cklw== IOCypOCyguCyoQ== LmJz IG5hdHVyYWlz IGFubnM= IHN1YmxpbWU= YW5ndWFyZA== 2YLZitmK2YU= IGJyZWFrZXI= IGNhdGVnb3JpemVk IGNlcmVicm8= IGVudGlkYWRl IHNlcnZpcw== ICd9Cg== CXBhc3M= IHZpdGFtaW5h IGJpemlt 4KSw4KWN4KSn KGJ1bmRsZQ== IGtydg== IOC0n+C1gA== IHJlc3VtZXM= IEthbWVyYQ== INiu2YrYsQ== INKb0L7Sk9Cw0Lw= IElyaXM= QWdyZWdhcg== YXBlbA== IFNlZ3VuZGE= IGV4Y2x1c2l2YQ== YWxw IMWfZcO9bGU= c3RldWVy bWxpbg== LklOVklTSUJMRQ== INGC0YPRhQ== IGxhZ28= IFBSSVZBVEU= X0VYVEVOU0lPTg== INC/0LDQu9GW IGltdW4= 5pyJ5ZOq5Lqb IGRpbXM= 5q2j5byP ZWRlbA== IGludGVyZXNzZXM= IEd1aW4= IGh1bWFpbmU= cmFjaGFkaA== 0L7QutC4 Q3Jv IGhvZWY= IEltbWVy IEphY29icw== 0LDRhdOZ INin2YTYrtmF2YrYsw== IG9kbA== dHJhbnNsYXRlZA== IHBhaWs= IGV4aXN0ZW50ZQ== b2xpdGljYWw= IHDDoA== aGV0xZE= 44Op44K5 c3BlY2llcw== cXVlbGVz YXZhbHQ= IHRhbWFubmE= ICUs IHdhbmRlbA== IEFsbGFu IGluc3RhbnRl IGdlw6dlbg== INC60YDQtdC8 IHJlZmllcmU= 6YeM55qE 4LK/4LKc4LOG 4piF4piF4piF4piF4piF LWVy UkVTRVQ= 5Luq INmF2KrYudmE2YI= UG9wb3Zlcg== UmVuYW1l IGtvb3N0 z4POr86xz4I= LWNhdGNoaW5n 4LmB4Lia bnBvcw== IHF1eeG7gW4= IFJhbGVpZ2g= IHNvdXJpcmU= IHJhY2tz 4Lan4LeK IG1iYWw= IHlyaXR5 IGluaW1lcw== IGJvaA== zq/Ots61zrk= YW5nZWI= IGx2bA== YW7EsXo= INin2LnYqtmF2KfYrw== ZmVyw7A= IGltbcOpZGlhdGVtZW50 Lm9yZ2Fu IHByYXRpY2FtZW50ZQ== T0xFQU4= T3BhcXVl IGhhbHY= IOWmguaEjw== IEpvZXk= 4LKX4LOB IGxpYmM= YW5uaWU= TE9XRUQ= bW9udGhz QHN5bnRoZXNpemU= INC70LjRhtC+ IHBvcmNlbGFpbg== IE51bWVyaWM= 55S15a2Q5ri45oiP INC/0L7RgdCy IGVkaXA= IHNlbnNv IGLDoXNpY2E= IG1vxbxsaXdv 0LLQsNGO IEF2ZW5pZGE= 15XXqdec15nXnQ== 0YHRgtGL0YA= b2RvbQ== IGRpcmV0dA== IHNoaW0= IGluZGlxdQ== IHZvb3Jz ZXdheQ== IERlbmlz d2FuaQ== X3RoZXRh 5aeT5ZCN 4oCZaXM= PENsYXNz aXZhbnQ= YW5obw== IE1PTlRI INGP0LrQuNC5 JeeahA== IGJvag== INGD0LTQsNGA IHByYXllZA== J3RpdGxl IGxhc3RpZw== 4LSf4LSZ4LWN4LSZ IOCkqOCkrg== ZHJh bWVyaWM= YXJkYXI= IGlwdg== 8J+Puw== IHBvbmk= CQkJCQkJCQkJCQkJCQkJCQk= ZWxsb3M= IExhbmNhc3Rlcg== aWxsYXJk IGFjcXVhaW50ZWQ= IOCkleCkruCljeCkqg== IOCymOCyn+CyqOCzhg== IENvbGxpc2lvbg== IGRvbmE= UkVW IFl1aw== IFNtb2tpbmc= IEdsb3J5 UmVzcG9uZA== INCx05nQuw== 4oWk IHRoYXVt IGluY29udHJp IG9hdA== 157Xmdef 2YXYr9mK2YbYqQ== Q29tcHJlc3Npb24= 4K+I4K6V4K6z IG9udHdvcnBlbg== 6YGN 4oCcVGhleQ== IGhhbGRh RGVzaWduZWQ= 0KTQvtGC0L4= IGltYWdpbmFyeQ== 4K6+4K6w4K+N4K6V4K6z4K+N IEJyaWQ= INCw0YLQtdC8 cmF3ZA== IEJlbGdpcXVl IOWumOaWuQ== INaD1bjWhNaA ZW5lYW4= IHNhaW50cw== IOenkumAnw== IGJ1c2luZXNzbWFu VU5JQw== IEVsZWdhbnQ= Lk9wdGlvbg== IEFnaWxl YXNpbm8= IOeRng== IGJhbmFuYXM= YXTDqw== IFRoZXNpcw== IOCouOCpgA== INiv2KjZig== ZGVyYQ== Lm9wZW5hcGk= c3RpZWc= 7Lu0 INqp2KfYsduM IGlzbnQ= IHVuaW50 INiu2LQ= 4KqF4Kqu dGlp IHNlbWljb25kdWN0b3I= IE1BRA== w7xuw7xu 2YHYqtit IHNlZ3VpZG8= 4YCW4YC8 IOCqruCqueCqv+Cqsg== IEZpcm1lbg== IOGDkOGDm+GDlOGDoA== IGhlYWRxdWFydGVyZWQ= 56e75Yqo IHbDrWN0aW1hcw== IHRlbGplcw== 44Gq44KJ IOCkqOCkv+CkleCksg== IExlZg== 0LTQsNGP INin2YTYudmF2YTZitip IGVmZmVjdHU= INiq2LPZhQ== LkhpZGU= IM60zrfOvM65zr/Phc+BzrM= Lk11c3Q= IGludGVyaWV1cg== IEJBTks= UGxhbnM= zr3Ov865 IElFUkM= IEZsdWlk amFkbw== 0YbQuNC+0L3QvdC+0LPQvg== IFRhbXA= IG1lbnNjaA== LXVwbG9hZA== 4oKs4oCw aW5zdGl0 IFJldHJlYXQ= IOKAmg== 6Zax 0LjRgtC10LvRj9C80Lg= INW21bfVodW21aHVrw== JCgi IHR4bg== IOCkpuClh+CktQ== IOCkruCkp+CljeCkrw== IGd1aWRlbGluZQ== IEFsdW1uaQ== 5Z+O5Y6/ IOCmr+CmvuCmr+CmvA== INin2YTYo9ix2KjYuQ== IOCqhuCqrw== Z2Fycw== IOGDl+GDleGDmOGDlw== IGZhbG91 LkNvbW1hbmRz X0VYVEVSTkFM IG1pc3Nlcw== 4Kqc4Kqo ZHJlYW0= bGFkbw== IGltcG9ydGluZw== IE1PUg== IERpY2U= L3NpdGU= UVVFTkNF emV6 eWxpZQ== IGRlbGFudGU= IGF0YXdh OiIsCg== INin2YTZhti42LE= IEhy fWB9 IERlbW9u IG1vxb5ub3N0 IEFkaWRhcw== IOCyleCyvuCygg== IOCqleCri+Cqhw== 57K+5b2p IFJhaWRlcnM= X3ZpZXdz IGd3bmV1ZA== IOCwrOCxjeCwrw== 4Kqk4KuB4KqC IGlucGxhY2U= aXplaXQ= Y2F0aW9u 4LC+4LCC4LCV 05nRgNOZ0Lo= L3BkZg== IHNpeHRlZW4= INC/0L7RgdC80L7RgtGA0LXRgtGM IExlaWQ= INC30LDRidC40Yk= INCx0LXRgNGD IE1QQw== IEZsb3Jlcw== IE9yaWVudGF0aW9u LXNhZmU= 1bjVpg== IOaC 77yM55uu5YmN SW50ZXJhY3Q= IEVudGVycHJpc2Vz aXBwaW5lcw== INiq2YbYuNuM2YU= IOCkquCljeCksOCktuCljeCkqA== IGJvcmRl INC90LXQv9GA0LjRj9GC 0YfQtdGA KioqKioqKgo= IDwk X3NjYWxhcg== LUlE IG5hbnR1 xI1v QnV5aW5n aXRhbmE= 4KqV4Kq+4Kqw4KuA KWAK IGNvbnRvdQ== IEJyaXR0 IOeK LnRocm93 IGtvbW1h IHByb3c= IGludGltYWN5 IOC4l+C4sw== 0J7RiA== ZW5law== IEZJTkQ= 4Z6c4Z63 44CCLg== IOCqrOCrjeCqsA== dXJldA== 15nXldeV158= IGluZ3Jlc28= IEF2aQ== YXJlY2U= IEVtbw== 4LSe4LWN4LSe4LWG4LSf IEFsZXJ0cw== IG5pZXo= INC/0YDQuNC5 IOCkruClh+CksOCkvg== IOCumuCuqOCvjeCupA== RW5kcG9pbnRz INin2YTZhdmG2KfYt9mC QXBwcm92ZQ== IE5hcnV0bw== UmVzcG9uc2l2ZQ== INGB0LzQtdGI IFllbWVu IM6xzr3PhM6v IGNvbnZp 4Lij4Li14LmI 0LXRgNCz IOWkqeWkqeW9qeelqOaAjuS5iA== IGhpZXJ2YW4= Y2FzdHM= w45u Tk9ORQ== 0JDQug== bWltZQ== IGNoZXF1ZQ== IG9iZXNl cGxpcXVlcg== IHVpdGxlZw== INin2YTYqtix IElNRw== X0FSQ0g= INC40Y7QvdGP IEdvdHRlcw== IHN0YWRpZw== KSlb IGZ1bmN0aWVz IEVybA== 4buNcnVu ZGFi INin2K3YqtmF 0LvRj9C9 0LXQu9OZ zq3Pgc6x bGFuZ3VhZ2Vz IFNoYXdu 4LSw4LSj4LSC IFRvbWI= 2KTZhNin2KE= IOyeoQ== IFRi 0LTQtdC/ INCi0LXQv9C10YDRjA== YXRhbGFnYQ== X21pbnVz 4LC+4LCC4LCf4LC/ IGdldHVy IOCksuCkvg== QXNrZWQ= YW1pbmk= LXByaW50 CQkgCg== IOCksuCkl+ClgA== IFZlcsOkbmRlcg== IEJpbmFuY2U= Z2dpbw== IGluY3JlbWVudGFs INeQ15bXldeZ 4LKw4LON4LKj dGRh 6amw CXdhbnQ= IGt0bw== d2Vraw== LnVj IENoYW1wYWduZQ== IOCkruCkvuCklw== INC/0L7QtdC30LQ= INGD0YDQvtC6 IFZy IG9uZGVyZGVsZW4= INC/0YDQvtCy0LXRgdGC0Lg= RGVyaXZlZA== LkVYVFJB IFNwZXppYWw= S29udGFrdA== IOCyrOCyuQ== IGRlc2Y= c2VxdQ== IGFkdWx0ZXM= L3Bob3Rv LnNjb3Bl IOGDoeGDrg== X1JFTEVBU0U= IGxldG8= LnNsaWRl IGJlYWQ= YXJtYWN5 LmV4cHJlc3Npb24= 5qOA5p+l INGA0LDRhdGM IHdlcmtuZW1lcnM= IHB1YmxpY2Fy IG1lbG9keQ== U2xhc2g= IE1PUw== YXV0w6lz X3BrdA== IHJhZ2dp INCy0LvQsNC00LXQu9GM IGNvbWVt INin2YTZhdix2YM= 0YvSm9OZ0YE= SE4= IHR1bGFnYQ== INGC0LXQvNGD cmVvbg== IHBobw== INC+0LnRi9C9 dWRpYW50 cmVwZW4= CWhlYWQ= IHBhcmFi IFRyZXM= IOC0quC0pA== IGJ1c2Nhbg== 6Kqs5piO 4oCf 4KS/4KSk4KWN4KS1 INin2YTZg9ix2YrZhQ== IHbDrXRpbWE= IOC0puC0v+C0teC0uOC0gg== YWNrZW4= X2VwaQ== IGltbWVuc2VseQ== IH1c 77yR77yS cGxheWVk amV0YXM= LnZhbGlkYXRvcg== eW1lcw== IHVwc2NhbGU= IGJha2VyeQ== YXN0xIM= IHN1bGZ1cg== IG3hu5dp Ky0rLSstKy0= IHdhdGVyaW5n IHN0b2NrYWdl IG9sdWI= INmI2LLZhg== IOCkheCkqOCljeCkpA== 4LS/4LS44LWN T1VT 4oCZaW5j IFZlZ2Fu IHBsYWs= IGR1ZWw= IGhhbmd0 IHJlcGVydG9pcmU= LWVsZWN0 IOCqqOCqtQ== IGlsYWFz YWxpZ25tZW50 2YbbjNmI KCgm aWV0dA== IHJlc3Rz IOu2hOyEnQ== OmY= INi12KjYp9it IGRlZGljYXRl IOGDm+GDlOGDqg== 4oCZYXByw6hz IE1BTA== IOCyh+CyguCypuCzgQ== IGFpZGVk CWZpbmFsbHk= IEVsaXM= 55qE6KeG6aKR IGJlZ3JpanBlbg== ZXJyZW4= ZWN1dGFibGU= LlNjcm9sbA== IGNlbnRyaWY= KGJvb3N0 IElzdG8= IEFzc2Vzcw== IOCkuOCkvuCkguCkuA== IMOiZ2U= IOCmuOCmguCmluCnjeCmrw== IE9ydGU= 0LLQvtC9 IOGDm+GDoA== IGxpY2g= IHZpZg== IGdlbmVyYWxtZW50ZQ== INC30LDRgNC10LPQuNGB0YLRgA== 4KqC4KqX4KuN4Kqw YW1hbmk= IFNob2Nr IHdoaXJs INC40qs= X05vZGU= UGM= IGx5aw== b2xvZ2E= dWl0YXM= RGlzaA== cmllcmVu xIQ= 2LPYp9iv IGNyZWRpdG9ycw== 4oCZRXRhdA== IGVmZmljaQ== dG9hc3Q= IGltcHJlbnNh IGJ3bw== IHNla29sYWg= 4KuH4Kq24KuH 2oQ= X1NFTA== w61idWxh IOWkqeWkqeW9qeelqGFwcA== YWNpam8= bGRp 5Lmd5Lmd 16LXnteZ150= IFplaWNoZW4= IFNLWQ== YW5za2k= 2LnYqtmC2K8= IOuj IGxldHRyZXM= SGFzdGE= IM6zzrU= IHNjaGl6 IGV4dGVybmE= 6bmw 55S1546p IOW9qeelnuS6iemcuOW/qw== 4LKu4LOB PSIiPjwv IFdpa2lw IMSQaQ== IGVodA== xKt2 INio2LHbjA== b25vbW91cw== IFJlc3BvbnNpYmxl IGRhbmdlcmU= IG9taW4= 6r64 0LXQutC+0LzQtdC9 S2hv 4Lii4Li04LiH4Lib4Lil4Liy 6YGp b2Rvbg== a3Jhcg== INmI2KfYqg== 5pel5LiL5Y2I IEx1aXo= 4LiV4LmJ IGNhbG1pbmc= IEtobw== IGNtYXA= IHJlZ2V4cA== IGLhu48= 0YXRi9C9 QVbop4bpopE= X3Zt 0JfQsNC/ 7Iut7Iuc7Jik YXduZXI= 4Lav4LeT IGFubmE= YXRvaQ== INiq2LfZiNmK2LE= IGRlbm9taW5hdG9y 2KvZhQ== IHRib2R5 IE1lZGljaW5h IGVtcGhhc2l6ZXM= INCx0LDRig== IGJlc2xvdGVu IGxlZWc= IGlncmE= IGRlcG90 IMOpcXVpcGVtZW50cw== 0LDQvdCx0LU= TmVs zp/OuQ== V2VkZGluZw== IHbDtWltYWxpaw== INiv2LHbjNin2YHYqg== IOC5gOC4m+C4tOC4lA== IGphcGFuZXNl IOCqsOCqueCrjeCqr+CrgeCqgg== IHNpw6hnZQ== Jycs IGNoZWVrcw== IGp1ZGE= IOWkp+WPkea4uOaIj+WumOe9kQ== w6d5bHlr IENvcms= huCwsOCxjQ== dHJhZG8= bmlrw7N3 IGNvbnNvbA== INeR15DXntem16LXldeq IOGDoeGDkOGDm+GDo+GDqOGDkOGDnQ== cmVqZWN0 dXVk 57q3 LmNvb3Jkcw== IENsZWFybHk= IHls IEhQVg== rZQ= ezo= IEZvb2w= IGFsdWU= LkJpbmFyeQ== 4oCM4LCk4LGL INGB0Y8= IGNodWly d2FzYW5h ICgoIQ== 2KzZhtio IFNhbmNoZXo= KGNvcmU= IHRpbGJ1ZA== aGVzaXM= Y29ycw== IGNhbGVuZGFycw== INC20LDRgtC60LDQvQ== TW9kYQ== 4La44LeU INin2YTYtdi62YrYsdip 4LKw4LON4LKt IGhhY2tz Q29tcHV0 a3Vi IGVuYWN0ZWQ= Pi48Lw== IOW/gw== INGH0LDQug== IHNvY2tldHM= 4KSv4KS+4KSo IHBhcmZhaXRl ZW5zZWlnbmVtZW50 w7hydA== 4KS+4KSj4KWA IHdoYWk= INGP0L3QsA== YmVsb3c= IFNlY3JldGFyw61h 77yM5L2G5piv YWxpZ25lZA== LnRpcG8= ZGlr IMSNw6FzdA== aWRvbg== IGRvY3VtZW50aW5n IENK IEF0dGFjaG1lbnQ= INCy0LDQvNC4 IEVzY3VlbGE= INGB0YLQvtGA0L7QvdGD 44OY IGZhbWlnbGlh IHbDqWxv IHZlcndhY2g= VGI= YXNzYW5kcmE= IOGDpeGDleGDlOGDp+GDnOGDmOGDoQ== IGZ1bmNpb25hcmlvcw== IGRwaQ== INC805nQu9GD0Lw= CQkJCQkJDQo= IFsr INeR16fXqA== IG9tbmlz 15nXmdea IG1ldGh5bA== IEFSQw== INCw0LLRgtC+0LE= IFJpZGVy IOCksOCkluCkqOClhw== L3Rva2Vu IGNpcmN1bGF0aW5n LlJJR0hU IGZlcm4= RXhwaXJl IHJlbXVuZXI= IGFjaHRlbg== IFRvdWNoYWJsZQ== IExBVA== IEVybnN0 b3R0ZW4= INCY0LzQtdC90L3Qvg== IGNoYXVkZQ== bnVsbHB0cg== cGxhbnRz INqp2LHbkg== INin2YbYqtiu2KfYqNin2Ko= 4KuN4Kqv4Kq+4Kqo cnXFvg== IHB1ZXN0b3M= IFF1aWV0 IOCmruCmhw== IGt1aHVzdQ== IGxpZWJlbg== KG1w IGJlbmVmaWNpYXJpZXM= INij2YbYqg== CWNvbW1hbmQ= 4Kew4Ka+ IHZlcmRhZGVpcm8= IGLEmw== ZWxpYg== IGRhZ2Fy IOC0heC0rg== INGA0LDQt9C80LXRgNCw cmVzc2Vu IGJlcmhhc2ls IGFwcGVsw6k= IOaZguioiA== 4KuH4Kqa IFNwaWNl IGdlbnVz 4oCZ4Kas X0RJQUxPRw== IGFrb3Ju KGNvbnZlcnQ= IHNhbnRh IHByb2JsZW1p ZW50cmFsZQ== IGluc3RhYmlsaXR5 4Kyy R2VybWFueQ== IG9mZmVuY2U= IHZpc2l0ZXI= IFZlcmthdWY= IEtpdHR5 INio2YjYp9iz2LfYqQ== YXRhaw== IEVhc2lseQ== cHR1cw== 2ojbjA== IG1pc3PDo28= c3BvcnQ= IEFsZW1hbmlh IHBlbnNhbWVudG8= bmFjaHQ= 4K6/4K6V4K+N4K6V4K+B4K6u4K+N IHRyYWNlZA== IGRvbmc= d8Okcg== LnJlZ2lzdHJ5 LnJlZmVyZW5jZQ== INio2KfZhNi5 cGxpc3Q= IHRleHRpbmc= LmF1dGhlbnRpY2F0ZQ== IOCqquCrjeCqsOCqpeCqrg== IHNlbmNpbGxh IGludG9sZXI= LlBob25l IGRyb2dh IHVuZGVuaQ== X2NsaWVudGU= 4LWH4LS4 INmD2Ko= IOCwquCxguCwsOCxjeCwpA== IHZhbmxpZw== IOGDoeGDkOGDmA== INmF2YLYpw== X1JlcXVlc3Q= 5ZSx IEJyYXNpbGVpcm8= 0L/QtQ== IGltcGFjdGluZw== IOCksuCliQ== J3VuYQ== dXBhcg== KENvbnN0YW50 4LKk4LON4LKo IENvbXBsZXRpb24= CXJlZGlyZWN0 IG92YWo= INeV16LXkw== IFN2ZW5z e0A= 2YjZhtqp24E= IOyEseqztQ== IMO2w7A= 5aSn5LuZ 1aHVo9Wr1b8= IEPDqQ== IGt1YXQ= PEVudGl0eQ== LndhbGxldA== IGRlc2NhbnM= IGVyYmp1ZA== INix2LPYp9mG 0pvQuNKb 4LSm4LWN IHN1cnZpdm9y IOCqrOCqguCqpw== IG1vcmFsaXR5 IGZpbmFu IHJldHJhaXRl IEZhcm1z IOG7pWbhu41k4bul LuC0quC0vw== IEFsbG9jYXRl IG1ldg== xKdyYQ== IGtp4bq/bg== IG1pbmltYWFs IEJlemllaHVuZw== 2KjYp9ix2KfYqg== aWFqxIU= eWFtbA== bGFybmluZw== 4Laa4LeK4LeC 4LGB4LCC4LCs 4Lir4LiZ4LmJ4Liy Iklm YWNoYXPhu4s= IHfFgmFz INGC0LDQutCw KHN0b3JhZ2U= IEhlYXJpbmc= IHZvdWNoZXJz IHJvdXBhcw== IOCyrOCyv+CyoQ== INC90Ys= 44GI44Gw IGdsYWRseQ== aXRpcg== b3BvdA== IENhcmI= IGV2YWx1YWNpw7Nu IHRvdXRlZm9pcw== IHLFrw== IEpvaW5lZA== IGtpaXNhbHU= IFNhbGFk IHRvbWFuZG8= IGhvdXRlbg== IERyb3Bz 2YrYug== IGplbGVudA== cWF0YQ== INC40Y7Qu9GP X3Nh dW50ZWdu 44GC44KK44G+44GZ INCx0YvQu9GW IGRpc3Bvc2l0aWY= cmVpZmVu Q29tcGFjdA== IGJ1cmlhbA== IOC2uOC3hA== 5pWP 4Kav4KeB4KaV4KeN4Kak b2ludGU= PXtgLw== 2YPYp9mE a3Vw IOCqreCqvuCqsOCqpOCrgOCqrw== IGxhdGNo 5LmD LEU= IG5vaXNlcw== IHN2Yw== IFNoZWV0cw== X0hhbmRsZXI= IENvbmdyZXNzaW9uYWw= IExvYmJ5 IEphcmVk IHB1YmxpY2lkYWQ= KGNvcHk= VE9UQUw= LnRyYW5zcG9ydA== Q29tYmluZQ== TWF0Y2hlZA== CW9wZW4= INWh1oDVsQ== YWRyYQ== IOy2nOugpQ== LmRpZA== X0tFUk5FTA== IHRlY25vbG9nw61hcw== IG1pZW1icm8= X2RldmljZXM= IHJvY2tpbmc= IHN0cmVhbWxpbmVk IGxpbXA= 1aHVttWr1bY= VHJhaWw= INmF2K/Ysdiz IGJvd2Vs 44GM44GK IFRlbGVyaWs= X0xvZw== IHRoaXJ0ZWVu 4KeL4Kaw4KeN4Kaf 0YbQuNC+0L3QvdGL0Lk= 0YDQsNC30Ys= IFNsYWNr aWFuZ2xl aWdlbmQ= w6lyaXI= IGVyd8OkaA== IHRlbWF0 IHNvbGx0ZXN0 IG5hdGlvbmFsaXR5 5YWR5o2i IGNyb3k= V2VzdGVybg== YWNodGHDrQ== IHVuZW1wbG95ZWQ= IGbDsg== 0LfRltC9 INW61aHWgNW/ IGNpeWE= IGFzYWw= dG9udQ== w7x0eg== IHRvdWdoZXI= IEhhbWFz YXRvcmE= TXo= X2ZvcmNl IHByw7I= IHJlaXZpbmQ= IEdvbGRtYW4= LkZpbGVz 44CU ZWN0bw== IGthc3V0YWRh IGNvbmRlbW5lZA== INCy0L7QtNGD IFJ1Zg== INC30LLQvtC9 bWF5xLE= INC90LXRgNCy X2NhcmRz IEV2aWQ= IEphYg== Lmxlc3M= IG93bA== IGNvbmRpw6fDo28= IGtlbm5lbmxlcm5lbg== IHNhcmE= IG1vdXY= IHRhcmlmcw== IGV4dHJlbWFtZW50ZQ== IOGDkuGDkOGDnOGDoeGDkOGDmeGDo+GDl+GDoA== IG9sZW0= IOCkquClh+Cknw== L2xpbms= LkpNZW51 4YCx4YCc INeS15PXldec IEJ1aGFyaQ== IGZhdm9yaWV0ZQ== IElOUg== ZWxlY3RyaWM= IOC0uOC0ruC1jeC0rg== IOGDkuGDkOGDlg== IHNpZW50bw== 5Y+j6K+A IEZ1bmRhbWVudA== ZW5kYWxl INix2LrZhQ== IGFncmFkYWJsZQ== IGRlc2VtYg== IHVuY2hlY2tlZA== INqp2LHZiA== X2dvYWw= b3BoaWU= Z29lZGluZw== IHNoYXJwbHk= w7NyYQ== 4LS/4LSz IHThu6tuZw== IE1hbGF5cw== Picr L0RhdGE= INec157Xpg== IGhhY2Vtb3M= IGJldG9u IOCkp+CkvuCksA== 4KSk4KWN4KSk4KS/ IGNvbm9jaWRh IEtQ IHBvc3R1cmE= INGB0YPRgQ== IHBlxYI= INGY0LXQtA== LlJlYWRlcg== 6ICB5p2/ 4KS14KS/4KSm IEZlY2hh IEtlcA== INCx0LXQug== IHF1YWxpdA== IOCkuOCkrw== IOaAjuagtw== ZXRlaw== IGFueWFy IGNvbnNlY3VlbmNpYXM= ZW5oYQ== IHpvcw== ZW5jaWFtZW50bw== X2Rydg== IHVuaWc= IG5ldXJvbg== TWFuYQ== IGdlbHRlbg== 1aHVo9Wl1b8= 4YOd4YOR4YOU4YOc 4oCZZXNwcml0 2KfZhtio INC806nQvNC60LjQvQ== 4bqheQ== Q2hvb3Npbmc= INeU16LXldec150= IOCqhuCqtg== 0LDQu9C10L0= X3Blbg== LkpGcmFtZQ== QUNT IGFuZ2Vt IE1hcmNlbG8= IG11bGln 5pyA5b+r 4LCk4LGN4LC1 Y2xvdGg= QXDDs3M= IGNyZW0= KCk6Cgo= IOWPjOiJsueQgw== IFBvZw== IHNvcG9ydA== IOCkr+CkvuCkguCkqOClgA== INC80LM= aW9zaw== IEdUSw== IExhZ28= IENoZW5n IGlkZWXDq24= IHNrb3I= b2NyYWN5 IE1PRFVMRQ== IOCkhuCkquCkleCkvg== ZWxsdQ== 4Z684Z6b IM65z4PPhM6/ INWj1bjWgNWu1bjVsg== INmC2YrZhdip IHVpdHZvZXJlbg== IOCoueCpgA== LWVzdGFibGlzaGVk U2hy IGF0ZXI= IGJlZ2lubmluZ3M= bGF6eQ== 4KSY4KS/ IFdpc2U= IG1vYmllbGU= IGthdHM= IG11bHRh IGJlb2I= cG9zYWxz IOCkhuCklg== IGNvbnNlaWxsZXI= 0YXRjdCz INCw0LLQs9GD IHRvaXQ= INCb0Y4= INGN0LvQtdC80LXQvdGC0L7Qsg== IHZldG8= L3NwZWM= YXR0YWE= IGZlYXRoZXJz QXNzaXN0 INio2YTaqduB IOCmr+CmluCmqA== LXRpbWVz IEhlbHNpbmtp 4LKn4LK+4LKo QmlsZA== IOC0sOC1i+C0lw== 5pyA5paw5Zyw5Z2A bMOkZ2U= IEVybQ== INin2KzYqtmF2KfYuduM IGRpZ2l0YWxseQ== YXJ0b3J0 Uk9MTEVS IEJhY2tlbmQ= IENvcm5lbGw= IGNhag== bnVy 2LHYr9mH 4K6f4K+N4K6a YXdhcmthbg== IGxhbmdpcw== QkFE 2KfZhNmG INin2YTYqNmK2KfZhtin2Ko= IHBlcnN1YWRl IGNvbXByZW5kZXI= IHdpZG93 IHNvbmQ= IHB1YmxpY2FkYQ== IGBgYA== IFNlcnZpY2lvcw== IEJlcmVpY2hlbg== IGRlaXhhbmRv RmFjZXQ= 1bjVog== IGpzcA== IG5hcnJhdG9y IHN0cmF3YmVycnk= IGTDqWxhaQ== IHLDqXNpc3RhbmNl 0rvRi9C9 IMO2cw== INGF0LXSmdC805nRgg== IGtpcmE= IENocmlzdGll INin2YTZhtio2KfYqg== 6LSm5oi3 IGfDpGxsZXI= IG1pbm9yaXRpZXM= aWxsaXQ= INGF0LDRhg== U0FU LmV4dGVuc2lvbnM= IFBheWxvYWQ= INin2YTYo9iz2YfZhQ== IEdhbGU= 4K+C4K6w4K+N cGVyaWE= 24fZhA== LyIpOwo= 4LS/4LSV4LSa4LWN4LSa IFN0cmFuZ2U= X0RJTQ== IHJlaGV0cmE= IOGDruGDqOGDmOGDoA== IG1hbGFkaWVz IGFua2HFrQ== IHF3 c3R1ZHk= IGRpdHU= IFNwdXJz 4KSw4KWN4KSq IGzhu7Fh aW9uZw== IGFhbmJl IGZsb2F0cw== IGNoYW5z IHJlbGF0aXZhbWVudGU= 15nXp9ec 4K+K4K60 IGVocg== IGhlYXJz INCx0L7Qu9GM0YjQvtC1 2YTYp9mC2Kk= IOWkp+WPkeS6kQ== IGfDtnN0yZly IEZhyrs= 6KaG IMSRw6xuaA== IG9jZWFucw== INCx0LDRgNC70YvSmw== IHB1dWQ= LUFi 0L7RgNC40Lk= IOC0uOC0guC0uA== IHBhdGnDq250ZW4= INC90LDRgdGC0YDQvtC5 IEJyb2Nr IOCkmuCkv+CklQ== 5pa55ZCR IGxva2E= IGp1eg== LnNlYw== dm91cw== 4KaV4Ka/ X0FYSQ== IHBsb3R0aW5n cmVhY2hhYmxl INiv2LnZhQ== aWt1bg== IEVsa2U= IGdsb3NzeQ== 4bue a29sb2c= IGFuZg== IEFjY2lkZW50 U3Rh b3Jucw== IE5pZWxzZW4= INmB2YfZhQ== IHF1ZXVlcw== Oyw= IG1lZGlhdGlvbg== c2xvdHM= 4LSy4LWG 0Y7RgA== IG5hZ3lvbg== IGNhbGN1bGF0ZXM= 77yM5Lit IOCyuOCzgg== 66Gt ImAKCg== IGdlaGVsZQ== INmB2YfZig== bGFyaW5p 4buTbQ== dWxhdG9ycw== INC00LXSo9Cz IHJlZnJhaW4= INWh1b3VuNaC1bQ= Lk5hbWVzcGFjZQ== IHlhc2g= IFJlYXNvbnM= IGVkaWJsZQ== INC20LXQutC1 LmNhbGxlZA== IEJ1bGxz RW5zdXJl dWVibGU= X0lU IENhbXBvcw== IFdlZ2U= INeV15XXoteS158= IGFudGE= IGxheWFuYW4= eXN0YXRl 4buNanU= PHM= SGlq dmlydGnDsw== IHBlcmZlY3RhbWVudGU= LnNodXRkb3du IHJlZ3VsYXRpbmc= 05jQkA== INin2KzYsQ== IGJyYW5jaGU= IOyVhOuLjA== IGNoYXJha3Rlcg== IEF2aXM= fSkKCgo= IOCqrOCrh+CqoA== ICUt 0IQ= 6L+Q6KGM IOCkpOCkueCkpA== INin2YTZhdi02LHZiNi5 IOCkquCkow== IGTDrA== IG9zaA== IGRhcmI= IHZwbg== IHLDqXVuaW9u IGZvdXJu IGFwaWs= 4oCZZXNwYWNl 24fZgg== Lk11bHRp IENoYW5nZWQ= IGluZmx1ZW5jZXI= IHBvYnJlemE= LGNvbG9y LUJhc2Vk 2YbYr9qZ aWds IFRlcnJpdG9yeQ== 4KeN4Kav4KeH4Kaw YWJsaQ== z4fPiQ== 55uu55qE b3JnZXRvd24= IGdlem9uZGU= IGlubnljaA== 16LXnNei IOGDpeGDleGDlOGDp+GDkOGDnA== IFRvbmU= cmVzcG9ucw== INqq2KfYsQ== IG51YW5jZXM= IFBlcmw= T0xVVElPTg== IFZpZWxsZWljaHQ= 15LXldeo LXRocmVhdA== YXNzZW1ibA== IEhlcnM= LmZpcmVzdG9yZQ== IGRpc3BsYWNlZA== IGdlc2xvdGVu Lm1lZA== 0LXRgNCy0YvQtQ== INep15XXoNeZ150= am9pbmluZw== IGlsbw== IOC0r+C1i+C0lw== INC80L7QvNC10L3RgtCw IHBpZXph IOCysOCziA== 2YjZgtin2Ko= IGNoZXZhbA== LldyaXRlcg== IElQQQ== IGlydQ== LFVuaXR5 INC40Yk= 2ojbjNin IHJhdHQ= IF1dPgoK IGJhY2t1cHM= INiy2Yc= INC80LDStw== ZWxpem1lbnRl IGRlc3Rlcw== INin2YTYudin2YTZhdmK ZW5hbg== INC70Y7QsdC+0LPQvg== IEt1dg== INC60YPQsQ== IERpbw== IOCkrOCkqOCkvuCkr+Ckvg== IOCkuOCkruCkvuCkmuCkvuCksA== IEdhYnJp 4LK/4LKV4LOK4LKz4LON4LKz IHBvZGVu bHVjaw== IGtlZXNzYQ== IHdlbmdp IENIRg== aWVidA== X1BMVUdJTg== 64KY64qU IGlkZWFscw== INC00YDRg9Cz0LjQvA== IEthYmVs INeU16LXmdeo UmV3YXJkcw== IHBldHLDs2xlbw== 44CR44CQ4oCc44CR44CQ IGxhYmVsaW5n IGFiaWVydGE= IGZpbGVuYW1lcw== IGl6aW4= yrthdQ== 4YOY4YOg4YOX dW5peWE= IOyImOyglQ== IGFsbGVyZWRl IGVuZ2FnZW1lbnRz IEJpb3M= PWlk IGluZmx1ZW5jaW5n INCj0YA= w6JsZA== INC60LvQsNGB0YHQsA== IHBlcmNlbnRhZ2Vz INCf0YDQtdC30LjQtNC10L3Rgg== IHZlcmhvb2c= CVF1ZXJ5 IHByb3Bvc29ucw== IEJhc2Vs IFdpdGhkcmF3 J2ludMOpcmlldXI= IHN6Y3plZw== cmF3bg== INio2LHYsw== xKtz YsO2cg== IHVybg== YW1wZg== wr9DdQ== dXJ5YW5nbw== INqp2KfYqNmE RGVidWdnZXI= IHbDpGxkaWd0 IEpBWEI= 6LO85YWl IE1hdXJpY2U= IGJhbmhlaXJv 4YOi4YOU4YOg4YOU4YOh 4bua IGp1cmlz 5rGf6IuP5b+r IGFqaWxp 5Lyg55yf bMmZcmlu w6lyb3BvcnQ= IOCmrOCmvuCmuQ== TWFudWZhY3Q= INC/0YDQuNC1 4Lij4Lij4LiE IE1lbGQ= 4KWN4KSw4KS+4KSu INGB0L7RgdGC0L7QuNGC IHN0dWtqZQ== YnJhY2U= IG1lZ2xpbw== INin2YTYpdmG2Kw= 4KSw4KS4 LWNlbnRyaWM= X1BST1RPQ09M YWt0YQ== IHNpYW1v IGltYWp1 KGNudA== IOCkl+Ckgg== CVVJTlQ= IGRlY2ltYWxz LWJsb2c= IM6Uzrc= IHByb2RvdHRv IOCkruClgeCklQ== aXJldA== dmFzaW9u 5p2l55qE cHLDvG5n INC+0pM= dHJpYWw= X3J0 IGNsaW5pY2FsbHk= c2VtaQ== INCi0Ys= IFBoaQ== LWNoYXJ0 4Lir4LmI4LiH aW5zaGk= IOGDruGDlOGDmuGDmOGDoeGDo+GDpA== IOKclA== 6ZSB IE3DvGQ= IOCqteCqoQ== U21vb3Ro IFRyb3BoeQ== X3RpcG8= IMO9dXJ0 IEJhdg== INW61aHVsNWh1bbVuw== Rm9p IHJlc3BlY3RhYmxl IGx1Y2hk 5rC05bmz 5qSN54mp 2LXbjA== b3Nlc3Q= KFRhYmxl cnljaA== X3JlbWFpbmluZw== IFBEVA== 27Hbs9u5 IGFjdHVhY2nDs24= UFVCTElD X3BpcGVsaW5l T3ZlcmxhcA== INCz0L7QtNC30LU= X2RlY2w= 0YbQuNGY0LU= INm+25A= IOCmmOCmn+CmqOCmvg== INqP2Yo= IG9wbG9zc2luZ2Vu INiq2YTZgQ== IOCwuOCwguCwrOCwguCwpw== IEhhcm9sZA== T2NjdXJz UmV0cmlldmU= b21pbmF0ZWQ= IHTDpG3DpG4= IHZpbGxhcw== IGZyYW10 IHByb2PDqWR1cmU= IEJydWc= IGFic29sdXRhbWVudGU= IOa/gOaDhQ== Ow0KLw== IENBUkQ= X2Rpc3RyaWJ1dGlvbg== IHZvbGxlcg== LGlz IFNvcnRlZA== IENlaWxpbmc= 0YbRg9C3 4LCw4LGN4LCt 6YCJ5Y+3 RVNTSU9O 6IGK5aSp Q292aWQ= LnVh IFB1bmU= IEVsbQ== YXNpbw== IOCmrOCmv+CmrA== 0LvQsNC3 IFBhYXI= b3JtYW4= IGTDsg== IExlaA== INCQ1KXRgQ== LWVuYWJsZWQ= bWVuc2FqZQ== IHBhcnRlY2lw dXJkdQ== cGVsYQ== 4Ken4Ker IEFzdHJh YW5naXJh IHNhbml0aXplZA== IGthdGg= b3JrYXI= IG5hcHI= IEtpbmRlcmdhcnRlbg== IERpc2Nsb3N1cmU= IHNob3V0ZWQ= IGVyb3M= c210cA== IHNjYXJm IOCqpeCqtuCrhw== LS0+DQo= T0NJ 4LiE4LmJ4Liy4LiZ IErDqXN1cw== INCh0L7Qtw== IFsnJA== LWFkZG9u IGluc3RhbGHDp8Ojbw== 2K/ZidmG L0xvZ2lu IHByw6Y= IOGDl+GDkOGDmw== IHRlbXBlcmF0dXI= L2FjY291bnQ= IHfEgQ== SGVscGZ1bA== IHZyZWQ= YmVyZ2Vu YW50eg== IGNyw6ll INWh1bbVpNWh1bQ= IGxleWVz IHNrdWw= INW51bjWgtW2 CVRoaXM= b3Vleg== IGdldHJvZmZlbg== IHNxbGFsY2hlbXk= IGFnZW4= INCw0L/Rgg== IGh1bW9yb3Vz IGVzcHJpdA== SU5BVElPTg== IFplbnRydW0= INin2YbYpw== aWxsw6ll YWdkYWc= cG9wdWxhdGlvbg== Z2F0ZXdheQ== INC40YLQtdC/ 4KSu4KWI IGRheA== IFhD IGRvcHA= IFBmbGFuemVu 7JWe IG1hbmo= RG9tYWlucw== IGFubmV0 IHJlZnVyYmlzaGVk 55S75YOP IOGehuGfkuGek+GetuGfhg== 4YOc4YOY4YOU4YOg OnJlZA== IHBlbHM= IERpZXRhcnk= IHB1Zw== IOCwhuCwuA== IGllbg== WnVy IHBhdG9sb2c= IGbDqXJpYXM= bXVuaXRpb24= IHRla25vbG9naQ== IGJ1bmRsZWQ= 2YTZitmG IGRldGVjdG9ycw== bWXEkXU= INC90LXQs9Cw0YLQuNCy UklTVA== IHN0aWZmbmVzcw== INCa0LDQvA== 4Z6X4Z624Z6W 2YHYp9mB IMOcYmVyYmxpY2s= 2YLZiNmF IHByZXNzZXM= IE1lZGlr YXNzYXBwdXQ= INin2YTYs9mG2Kk= IOWkqeWkqeS4reW9qeelqOWumOe9kQ== IEdlcm1hbnM= aWpudA== Q2hlZXJz YnJhaW4= IGdyb2VpZW4= IEhhcm1vbnk= CUtleQ== IGtpxZ9p IOCqoA== Okk= IG9wdGltaXppbmc= LmJhaWR1 b3VzZWRvd24= IOKe IGRlcmFz INW31aHWgNW41oLVttWh1a8= IG1laXNqZQ== IOGehw== X2RlbGV0ZWQ= IOCqleCqrg== X3ZhbGlkYXRl cHJpcw== IFJlc3BvbnNpYmlsaXRpZXM= dW5hYW4= IGFyYmVqZGU= WVRF aWNjaW9uZXM= 4peH VEVM IGluaXRpYXRpb24= X3BpcGU= INGB0YLQtdC/0LXQvdC4 LWRybw== 5ZWP44GE ZW5lZQ== IEFwcGVhbA== IEJ1c3Q= IG1hc2FuaQ== KikK IE5FQw== QXVjdGlvbg== IEVuc2VtYmxl 6KGM5pS/ QnJlYWRjcnVtYg== IG9idGFpbmFibGU= 4oCZYWNjb3Jk 2K3Yr9mK2K8= 4Ka/4Kay4Ka+ IGN1cGNha2Vz IGxsZXZhbg== IENodXJjaGlsbA== IENTVA== dGVuc29y IGh2aWxrZXQ= eW5rdQ== IGFwcHJvY2hl IFphZw== SmF5 IHByb3NlbnQ= 0LbQtdC90L3Rjw== X0NMT0NL 4K6+4K6k4K+B 4KSw4KWN4KSr IEVpbnphaGx1bmc= IOCwsOCxguCwqg== INC80L7Rhw== IG9mZnNwcmluZw== 4oCZb3I= IHBo4buR LmJ1bmRsZQ== 6YeN5paw IGbDrXNpY2Fz IFZH 0YHRgtGL0YDRgw== U1VQRVI= Q29ycmVjdGlvbg== LkpTY3JvbGw= IEp1ZHk= IGRlc3BlZA== IEV4cGVydGVu IFNob290 IGFwcm92ZWNoYXI= YWhhbmdh IEN1aXNpbmU= IExvcnNxdWU= 5oCq aWthbmE= cmVsbGE= IEJpaw== aXNzeQ== IOGDnuGDoOGDneGDkuGDoOGDkOGDmw== O3dpZHRo IGFsbGV5 4K6V4K+N4K6V4K6u4K+N bGnDqQ== IHZpbGE= 4oCM4LCu 8J+N ZW52aWxsZQ== IOyViuqzoA== IGJvbWJpbmc= INin2YTZiNin2YLYuQ== U2VsZWN0aXZl aWdoaW5u 4YOV4YOU4YOV 4KS44KSB4KSX cHJvdA== IEN1dGU= INC80LDQsNC70YvQvNCw0YI= IGxhdHRpY2U= IGF1dG9ub215 5qKB IFByb2R1Y3Rv INC/0YDQuNC90LjQvNCw0YLRjA== IG11emlr IGdyw7bDn3Rl IOCkquCksOCkv+Cko+CkvuCkrg== IGl0YWxpZW4= 6LWb6ams5Lya 4La3 IHZhYXJk e30iLg== c2h3YQ== IOCmrOCnjeCmr+CmvuCmqg== IG1pw7A= IHdhdGVyZmFsbA== b2xhbmE= IGJlc3R1 IHBvZGN6YXM= YXlhbmc= IHNsYW5n INC/0YDQuNC90LDQtA== 0LXQtNCw LXVybGVuY29kZWQ= bmlw IFVsbA== 4KSh4KSy IOCwleCxiuCwpOCxjeCwpA== 1bjWgtW11b0= LmFzbQ== IEhpZA== IE9obmU= IGhhcmRuZXNz IEluZG9uZXNpYW4= IGFtaWRzdA== YW5kdWthbnll aWVkZQ== 5pWZ5a2m 0L7RgtC+0YDRi9C1 INGA0LXQutC+0LzQtdC90LTQsA== IGdyYWJz w6RsbGln IOCksOClgg== IGTDqXZlbG9wcGU= IGdvdWQ= 4LiE4Liz b2RlcnM= RWk= INGD0LnSk9GD0YDQu9Cw0YA= INCc0LXRgg== ICguLi4pCgo= Y3JlYXRpdmU= IHJlc3B1ZXN0YXM= LmVkZ2Vz IHBvdHJ6ZWI= 0LXQtNC90LXQsg== 4YCW4YCF4YC5 YXZhbmph 4YOb4YOY 5q+P5pel IHRvbWJlcg== aWdoYm91cnM= IGNvbnRyYXRhcg== IG5ow6xu QVRFU1Q= IHNhY3JpZmljZXM= IEZvZw== IGZyZWlzaW4= 0q/QudC7 IHNxZnQ= UlNT CVVwZGF0ZQ== X21hbGxvYw== IGvDqXI= INGA0YvQvA== IHRvbnU= Q2hlc3Q= LkNv 4Ky5 IHRhb25n IG3Dog== IGJydWdl IHJlaWNodA== IERBWVM= IE5hcGxlcw== IOCwqOCxgQ== LWVhcnRo RGlzcG9zaXRpb24= KGx1YQ== w6JuaWNv IOCkquCknw== IHJlY3VlcmRv 4KSX4KWA4KSk 0LbQuNC7 15nXktei RXhwbGljaXQ= TGF1cg== INis2LA= 4LWC4LS5 4LCf4LC/4LCV 44CV IOGDl+GDmOGDl+GDpQ== QWdlbmRh LEludGVnZXI= IENyaXN0aW5h 6JGj IG9uZGVybmVtZXJz IEVEVQ== LkRpdg== IFNhdWw= IGVzdGFkb3VuaWRlbnNl YWxsYWg= IHNpZWJlbg== X01BTkFHRVI= IGNvbXVucw== LyI+ IMOpbMOpZw== IOCqpeCqr+CrgeCqgg== IHB1aXNz IE1lZGlv 0LrQtdGA0LvQtdGA cmHDrQ== 4LmB4Lih IGlncmVqYQ== ZW1ha2Vy xaFlbsOt IHDEgw== IGFhbmdlYm9kZW4= 4LKw4LKy4LON4LKy4LK/ IGV2b2x1Y2nDs24= 4oKswqY= IE1hcmtl IHDDqmNoZQ== IG11c3RhcmQ= w6lyaXF1ZXM= INin2K3Yrw== dW5hYmxl ICk7Ci8v IG1vZGVsbGVu XSwKCg== T2J2aW91c2x5 IGluZm9ybWFkbw== INmG2LfYp9mC X2Rk TGllYmU= KHBhcnRz INC60LDQvdC00LDQuQ== IGtub2I= IE91dGVy LW1heA== IHp3YWFy U2l0 IH19Ij4= 6Zye 5qG2 IHBlc3M= IOC0teC0rw== b3VkZXJz 44Go44Gq IGZpbmFsaXphcg== IHByb3RvdHlwZXM= IHJoYWk= INio2LHYrtmH U1FMaXRl IM61z4DOuc66 IHB1bGU= IEdpdGh1Yg== IFpu IHBvbGx1dA== IG5haGk= IEVzdGFkdWFs LW1t INin2YTYqNi52LY= IGRyYW1hdA== 5oCn5oSb ZXN0cnVjdHVyYQ== IHByb2NlZGltZW50bw== IGZpYXQ= KGR1cmF0aW9u Lmluc3RhZ3JhbQ== X2xpbmVhcg== IGPDqWzDqQ== 0L7RgNGP0LQ= Q2V0 WU5BTUlD IGNhcmFjdGVyZXM= 6Kyd INiz2YTYs9mE2Kk= 0LzQsNGC0Lg= IGtsYXJ0 IOCyruCziuCypuCysg== 5rOo6ZSA bWllbg== IE1hbHQ= aWZmaWN1bHQ= IFhJVg== IG/DsQ== IFJhdQ== IFRvb2xraXQ= VHJpcGxl ZGF1Z2h0ZXI= IGRlbWFuZGVz 8J+Yig== INC30LDQtNC10YDQtg== IHJlc3NvcnQ= aWxtyZlzaQ== aWxsdWdpdA== INuB2Yjar9in INGB0YLQsNGA0LA= INeU157Xqdek15g= IOCwpOCxhuCwsuCwv+CwuA== IOCmquCmsOCmv+CmmuCmvuCmsg== 2YjYttit IHRlcmF6 IENoYWs= IFByYWlyaWU= IGxpbXBpYXI= IMONbmQ= IGNvaGVyZW50 5LqU5pyI5LiB6aaZ IGRldmlzZQ== b250b3M= IGFkYXB0w6k= IHRha2ll Lm1ldGFt KGF4 RnJpZW5kbHk= INCR0L7RgA== X3NoZWV0 Rm91bmRlZA== IOCuruCun+CvjeCunw== LiIp INin2YTYrNmF2YrYuQ== IGZhYnJpY2FjacOzbg== LnBvbA== IElQTA== IOCkquCljeCkr+CkvuCksA== IGV4cGxvdA== IFNwZXI= IGRpdmVudA== INmF2YTZitin2LE= IGJldHLDpGd0 5YWN6LS56KeG6aKR6KeC55yL IFVudGVyc3VjaA== 4LS/4LSV4LSz4LWB4LSf4LWG b3J0b24= INW01ac= IGVzdGFibGVjZQ== INi12LrZitix LW5vcm1hbA== IGNvbmN1cnI= INGI0YLRgNCw0YQ= aWRpbmdlbg== 4YOU4YOg4YOr LXZlcnNpb24= IEJpbGR1bmc= IGJsYW5jaGU= IOCkl+CkvuCkieCkgQ== IFB1bmNo ICovLAo= 4oCZd2U= IEJ1cm5pbmc= INix2KzZhA== IHByZXNjcmlwdGlvbnM= IHTDqWzDqWNoYXJn IOCkrOClgeCkpw== IG5nYWI= 7Ya166C5 e0VJRg== 0ZHRgtGB0Y8= IGVsZWN0b3I= 4bqs IGhsYW0= IGF1dGhvcmVk IHLDpg== IExPQ0s= IM+Azr/Ou867 IOGDo+GDoOGDlw== INCw0YDRiw== IHN0cmlrZXI= PgoKLw== IGFwZWxsaWRv IFNjaG8= IGVieQ== IG90dm9y IENodQ== IHNpcmk= fWB9Pgo= X0FMUEhB 7I2o INCw0YPQvw== IGtvbmtyZXQ= IOCwpOCwsOCxjeCwteCwvuCwpA== IOydmOuvuA== U3RyZXRjaA== IG1ldGhvZG9sb2dpZXM= 0JDQvQ== aXNzaW1h U3RhdHVzZXM= 5om2 IGltbW9ydGFs IG1hcmNhZG8= IHRlbnRo eXN5bGw= 4YOY4YOg4YOT4YOU4YOR4YOQ IOGDl+GDkOGDleGDoQ== cm9kZQ== IGdsZWQ= Zmxha2U= IG51bmM= LmdlbmVyYWw= INKh0LDQuQ== IHRlcmRhcGF0 15PXlQ== IGZyw6hyZQ== cWlx 2YXYp9ix2LPYqQ== IGNhcmRpbmFs IFVo INGA0YPQuw== INGB0Yw= IHNhdGVsbGl0ZXM= IGFyYmVpdGV0 IHp1c8OkdHpsaWNoZQ== IGNvbGxhYm9yYXRpbmc= K3k= c3g= IEJpbGxpb24= IHBvc3Rpbmdz X2xvZ3M= IFNuYWNrYmFy IHByemVj aXBvcw== IG9hdXRo 5Lqe5rSy SW50ZWdyYWw= IOCwn+CxgA== LnR0Zg== Z3o= IGJydWtl IHNoYXJlaG9sZGVy IGdjbHVi bGV0c2E= IOC4quC4suC4oQ== INin2YTYo9i02K7Yp9i1 1KXRhdGM0LDToQ== IFRIRVJF aHVyc3Q= 4oCZdW5pdmVycw== IG5hbmdpbmc= INWi1aXWgA== 4oCZZXI= IGbDpnI= em5h QlY= IFNvdw== 0LvQuNKT0LDQvQ== IEZldA== XENvbnRyYWN0cw== RGlzbmV5 dWRpbg== IGZha3Rpc2s= IM6yz4HOrw== INGD0YHRgtCw0L3QvtCy0LrQuA== IFBhbGVzdGluaWFucw== IG9ww6lyYXRpb25z 5YWo6ZuG Lnh5eg== dGl0 INmG2YHYsQ== IExlaWE= YW5nYXQ= c3BvdHM= QlVG QnJpY2s= IFBpZXJjZQ== X0NBUkQ= IFBsYXlsaXN0 1YTVhg== IEdJUw== IHZlcm1v X19fX19fX19fX19fX19f 576k5LyX IOCmleCmsOCmm+Cnhw== IFJFTU9WRQ== TG90cw== b2R5bmFtaWM= eW9ydW0= YW1zZQ== LWxlc3M= INGe0YE= INix2b7ZiNix ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IHBva2U= IGJ3aW5v 44OX44Os IOC0quC1geC0sA== IHJlbGFq b3VyYQ== IHJlc2lnbmF0aW9u 5ZOl5ZOl IGVuZW1tw6Ru IOCkl+CljeCksOCkvuCkuQ== CWFucw== LmludGVydmFs IOyggeyaqQ== 4LS44LWN4LS4 X1NIQQ== IGxvbmdz 4buA fT0= IEl2ZQ== IG5pbWU= IM6tzro= X2RlY2F5 IGZow6FpbA== INCy0LDSodGL0YI= IG1pdG9jaG9uZA== c3RhcnRlZA== IFRyYW5zYWN0aW9ucw== LlNUQVJU IHJldmFuY2hl IG9rdW4= X2ZlZWQ= 4LyL4L0= X2ZpeA== cmhv IOCqnOCqsOCrguCqsA== IG1hdXZhaXNl IGhhbmRoZWxk IHNvcnByZXNh aW5ub3N0 IENvbXVuaWRhZA== IEFzc3VyYW5jZQ== IFp1c3RhbmQ= IGNvbW1pdHM= Z2Fi IHJ1cHR1cmU= IG11a2E= IEdhbno= IE11cmRlcg== IOCmheCmrOCmuOCnjeCmpQ== LWZpbGVz 56ev5p6B IMOpcnQ= IEludGVybWVkaWF0ZQ== 5pyx z4POuc68zr/PgM6/zrk= IGJhcnk= IGZvbGRz 4LGI4LCm4LCw xJdqZQ== IGFwcm9waQ== 6LWi5a62 IGVuZ2E= c29tZXRpbWVz INC00YDRg9C2 IGVycmV1cg== RGVzcHXDqXM= IHdleW4= bGFoYXQ= IHNjb2xhaXJl 4LK14LK+4LKX4LK/4LKm4LOG IHVyYW5pdW0= 0YLRltC/ INC/0LvQuNGC IHNpbXVsdGFuZW91cw== IG9zdHI= KFNlcnZpY2U= 4YGF IOCmquCnjeCmsOCmpOCmv+Cmt+CnjeCmoA== IGRlc2NyaXBjaW9u ZXJnbGFzcw== IG1lcnZlaWxsZQ== INCV0LI= IHBhc3NhZGE= IHRyeg== 4oCN4LSa4LWN4LSa IHByb3Zhcw== IGNhcnRvbg== IHN0aXRjaGluZw== INC50q/Qtw== IGdlemVsbGlnZQ== IHNlc3PDo28= QVZPUg== INiq2KfYptmK2YY= CWNvcHk= INmH2KfbjNuM cWg= 2LHZhg== 5a6u aGVuaQ== IE5hZGFs IEhhbms= IENhZGlsbGFj 54mi c3Bs IFZhbmVzc2E= LnBw LkNvbnNvbGU= IHRhYmxlc3Bvb24= ZG9v zrjPhQ== IHVsYQ== IGhvbmc= J109PSc= IFBMQVlFUg== IOC0teC1gOC0n+C1jeC0nw== dGlh CUl0ZW0= IGVkaWxkaQ== IHZlcmJpbmQ= IE5pY2tlbA== INC/0L7Qu9GP 0YLRg9C6 4LSV4LSo IFlF LlBsYXRmb3Jt INC80LXQvdGO xKFp 0LvQuNCy0LA= IGV4cG9zaXRpb24= IFF1aXQ= IEFlcm9z PW1heA== IOCkruClgeCkguCkrOCkiA== 0LXQvNCw0YI= IOCkqOClh+CkpOClg+CkpOCljeCktQ== 0LjRhtCw IGXEn2l0aW0= INC90LDRh9Cw0LvQtQ== RXhjbHVkZQ== 77yT77yQ IHF1aXRhcg== X0hBTkRMRVI= IMOpdG9pbGVz KGFydGljbGU= IE1vcmc= IGdhbmk= w61saW8= LmZlY2hh SURETEU= INC/0L7QvdGP0YLRjA== IG5pbWk= IGNyaXNweQ== 4LCk4LGN4LCw IGpvbGll IExhbA== IE1lcmN5 Q24= 0LrRgNGL IGFxcQ== b2tlcmE= 77yM5omA5Lul IM68z4A= IGdla29jaHQ= IGFkdmFuY2VtZW50cw== IEPDoW1hcmE= IGNhdGFzdHJvcGhl IGluaGliaXRpb24= IFN0YW0= cHRpZGVz CU1vZGVs U2lnbWE= YWJyaWs= IGtyaQ== IOy2lQ== IGFwZXJ0dXJl X25w 5Y+L5oOF IOiS aW5vbA== INCz0Y3RgtGL0Lw= INGH0LjRgdC70LA= aWNlbg== IGNvbW1pc3Npb25lcg== INGH0LDQuQ== IGNyaWE= INC+0qM= IHByZXZpc3Rh a3Rpcg== INmG2YjYsdmI IGRlc2FmaW8= IM6G IOKWvA== INeR15TXqg== b2NoYXN0aWM= 4oCN4LS44LWN bGVyaW5kZW4= ICgqKA== IGR1aXo= 4Kab4Ka/ IHZvdWx1 IM6xz4XPhM6/ IGhhaXJzdHlsZXM= INC/0YDQvtC00YPQutGC0L7Qsg== IGF2c2w= IG11cnM= IGthcGFz 5bGx5biC a29uZw== IEhhd2s= dW5haA== d2l5ZQ== J2ltcG9ydGU= IGNhbXM= IEZBUg== 4oCZw6l0YXQ= INCw0LHRgdC+0LvRjtGC0L3Qvg== U2VhcmNoaW5n PT0o TGlxdQ== IOC5gOC4p+C5h+C4muC4nuC4meC4seC4mQ== 5qKw IOeUt+Wlsw== IG1laXN0ZXI= RXNzZW50aWFs LkZpZWxkcw== c3VydmV5 w6Fucw== bXVk IEF1c3RyaWFu 6bM= X3JlY2VpdmVk INCy0YvQsdC40YDQsA== Lmluc3RhbGw= UG9qbw== IHBob25n INWm1aI= Q3J5c3RhbA== IEdEUFI= INKb0LDQttC10YI= IHZpb2xhdGVz IG9yZHJl LWRp 5Lic5Lqs IEVuc2lubw== IHNvbGxpY2l0 IO2OmOydtOyngA== IMO+w6Zy IHBob3RvZ3JhcGhlZA== bWluZXJz IERpc2FiaWxpdHk= 5YWS IOCkleCkueClgOCkgg== IEtpZXM= IOCktuCkqA== IO+Ctw== aW5kaXZpZHVhbA== YXDDpA== 4KS44KWN4KSk4KWI 4Kai fX0iPgo= INCy0LjQtNGL IOq1rOunpA== 5LmF5LmF5YWN6LS5 IEJ1cmw= cHJ1ZA== IFBST1BFUlRZ IHBlbnPDqQ== 4Kqw4KuB IOywvuyVhA== IFNjaHdlaXplcg== IGh1eW8= INeT15XXqA== IHJhZGlvYWN0aXZl INC20LXSow== IGdlYmFzZWVyZA== 7Juo IHrDoWtsYWQ= IGFrdGl2aXQ= INmI2LHYqtmH IOW/q+S4ieWkp+WPkQ== IGJlcGVya3Q= IHB1ZGU= dHNjaA== INCc0L3QtQ== 5Yi65r+A aXp6ZXI= IFdhcm4= 0q/QvdOp IOCkj+Cksg== IOCqj+CqteCrgA== LWVzbGludA== YWbDqQ== INin2YTYo9i1 44Go44Gu5beu IElK INC/0YDQtdC/0LDRgNCw0YI= aWV1d2Q= Y2FsbHM= KGxw IGFycmFuZ2luZw== IOCyquCypg== IHRpdHJlcw== d2FpdGluZw== INK705nRgNC40Lo= IOyeiOyXiA== KmY= IOCqq+CqsOCrgA== IHRyYWJhamE= IE5hZGE= Q0xJRU5U IHBqZXM= IC4i 4YOQ4YOg4YOY4YOQ 4LGN4LCc IOC2r+C3mQ== 4KSu4KSn4KWN4KSv4KWH IGNvbnN0YW50ZW1lbnRl 0ZrRgw== IOCmleCnjeCmt+Cnh+CmpA== L2xpYnJhcnk= IGVucXXDqnRl IOCwleCwvuCwsOCxjeCwr+CwlQ== b21pY3M= IOCyqOCyguCypOCysA== 56ys5Zub 4Kqq4Kqj VW5kZXJzdGFuZGluZw== IOC0leC0sg== IOCmquCnjeCmsOCmpOCmvw== YmVhdXQ= IHR1ZQ== V3JhcHBlZA== L0hlYWRlcg== IE1vaGFtZWQ= IGRlc3RpbmFkbw== IGluZmluaXR5 Lm9mZmVy LlRlbXBsYXRl IEJ1cmtl IHLDqXZvbHV0aW9u d2Fubg== IFJleWVz 0LDRgdGC0LA= IFJlbGlnaW91cw== IHNjaGF1ZW4= 4Kqc4KuL IGFsdGVyaW5n IFTDpG3DpA== IEluZ2xhdGVycmE= IFNheWE= b2N1cnJlbmN5 4LON4LKv4LOC OgoKCgo= IGxpZGFy IERhaGE= IHBvc3Rwb25lZA== 0JHQsNGA IGl0ZXJ0b29scw== Wlk= IERhdmllcw== aXNvZnQ= xaFpbg== IGjDoWJpdG9z IFRFQU0= 0YvQvNGL0Lc= IOC4oeC4tA== IGlycmVzaXN0 IHN2xJt0 UHJvdmlzaW9u YWdhbmE= CXByZXY= IOWKoOaLv+Wkpw== cGhpbng= IOCyueCysg== LnJlbmFtZQ== 4Ka+4KaH4Kaf IOm5 bWxpbms= c3RhYg== TURC VEhPTg== LXRvb2xz INGE0YPQvdC60YbQuNC+0L0= KV0pOwo= IOWTgQ== IG9wZW5lbg== dHJpdHVy IFNDSA== IM+Dz4XOvc6t INin2YTYsdio ZHZk IHRoaW5uZXI= IGVkdA== 2YrYsdmH aWtpdGE= IHZhcmll YWJvcmF0aW9u 0KXQuNGC0LDQuQ== dG91cHBlcg== IGZpbmFuY2llcnM= IG1pbGl0YW50cw== IGhlYWxlZA== IEluY3JlbWVudA== 0LjQvdGC0LXRgNC10YE= IHNhbGFyaW8= LnRhYnM= X0ZJWA== V29u P2s= IGV4Y2x1c2l2bw== LXRvZ2dsZXI= ICIpIjsK SVB2 44CB5Lit INis2YbZitmH dW5nc3Zlcg== INC90Y/QvNCw IOyZgA== IGPDtHTDqXM= U3dpbmc= c2Fy INCz0LvQsNCy0L3QvtC1 IGFuYWxpcw== IHZvdGFy LlByaWNl INGF0Y3QvNC2 Y3JpdHVyZQ== 0Y3RhNGE IMO8YmVycHLDvA== IHBvZGpldA== IGV4cHJlc3PDo28= VHJhbg== bmFpcw== b2h1 IFZldGVyaW5hcnk= b3BsYXk= aXNjaHQ= IFRyb3BpY2Fs INCy0LDQu9GO0YI= 5aw= VHJ1c3RlZA== IGZsb29kcw== X2FuYWx5c2lz KHBj IERlc2VyaWFsaXpl aXRzdXQ= IMO6Z3k= INGB0LXQutGB0YM= 44K444Oj IGZhbWVk L2FuZHJvaWQ= VE1Q IGtob25h INin2YTZg9mF 0LzQtdGI IOWIoOmZpA== IENoaW5hJ3M= IGZvcndhcmRlZA== IGhlYXRlcnM= IFJveA== 4Ka44KeN4Kaq LlRyYWNl IOCquOCqqw== IOGDm+GDkOGDog== c2Fw IFN5bXBhdGh5 6I+v CUlO aXN0cmVhbQ== IEvDvG5zdGxlcg== X0FMTE9D IHdlbnll IFBsYWlucw== 57uP55CG IOC0ruC1iw== 4LKw4LON4LKu INC80YPQvdC40YbQuNC/ INCx0LXRgNC40Ls= IG9jYXNp Omg= IGfDqW7DqXJhdGlvbg== IE51bmNh WEE= IGRpZmljdWxkYWRl IHN0cmF0ZWdp IOCwuOCwvuCwpw== 2KjZiNix IHd1cmR0 KHJlZ2lvbg== INmC2LfYp9i5 IOCkheCklg== INmF2K/Yqg== bWlkZGVsZW4= LWlm YXN1bg== LlBM IGZvcmVz CVNlc3Npb24= INek15nXqA== IHdha28= X25hbWVzcGFjZQ== LnNvY2lhbA== IHJldmlzaXQ= L21s IHBhcm8= YXdhbmRh IHNob3Jlcw== Q2lu Y2lhbA== INeQ15fXqNeZ150= QGxvZ2lu IG9yZ2FuaXp6 IFFB c+G7jQ== 0LDQutOZ IG9yZ2FuaXNlcg== dWvhu40= KHRw INqv2YjYtA== IHByaW5jaXBlcw== IERlaW4= IOCumuCvhuCur+CvjeCupOCvgQ== LkVk LkNBU0NBREU= SXNzdWVz IGRhaW0= X2N0bA== 4LS/4LSv4LS+4LSv cmVzY28= 5pel5YmN 4YOY4YOQ4YOg IOCyqOCysuCzjeCysuCyvw== IOCwquCwvuCwn+CxgQ== LlllYXI= IElrZWE= KGF1dGhvcg== IHN1cHBsZW1lbnRhbA== KCcvJykK IOCkpOCkuOCljeCkteClgOCksA== 0LjQvdC0 5b27 IEdhdXNzaWFu IEJhcm9u IERFTg== INC20LDSow== INmG2YXYp9uM2LQ= T29wcw== IHBsZWFz X2NvbnRyYWN0 0LjQs9Cw L2Ny IGVkyZlu 4YOZ4YOV INC20LDRgNGL KHJlbA== IGNvdWNoZXM= 5pyA5paw54mI IHRodeG7mWM= IGRvb3Jn IG1hZmlh dGV2w7U= IOCmr+CmvuCmrOCnhw== W25leHQ= 4YOQ4YOq4YOU4YOb JHBhZ2U= IOC0ruC1gA== 77yM5Y+v5Lul bW91c2VvdmVy IOCwpuCxjeCwteCwvuCwsOCwvg== IEJha2Fu IOyymOydjA== 6IGM5Lia VGlja2Vy IGJhbnNh U0hPVw== IFBPRA== X2FybQ== 4oCN4LSh4LWN 0YHRi9C/ d2Fsa2Vy cWF0aWdpaXQ= IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= IGPhu61h INmI2oPZig== IOCwleCwpQ== aGFtYg== IGFnZw== LdCw 0LXQvNGL0LU= IG9iYWly IGRlZG9z IFVV IFNjaHJpZnQ= INCy0YvQutCw0YDRiw== IFNleHQ= IEpvdXJuYWxpc20= IEV0dA== aGFuZHM= IHZpc2k= IHRpcmg= INC30LXQu9C10L0= 5rWp YmFzaA== aW5jbA== 77yM5LiO zrnOv8+C IGNsYWlyZW1lbnQ= YWthcA== IOOCuA== IG1hbnVmYWN0dXJlcw== 0LHQuNGA0LA= LWRvb3I= fSIKCg== IE1FRElB IGFsdHk= IEdhcmFudA== ZGVwbG95 IGdyZWVk 4LON4LKe X2V0 57mB IOCqheCqp+Cqv+CqlQ== UHVsc2U= IHF1ZWRhbg== IGJlYWNvbg== IE5BU0NBUg== IGZhZGVk dGVuZQ== IGNlbnRyYWFs IEJld2VndW5n aXRzaW4= 0LvRjtCx INCx0LjQuQ== U1RPUA== INW/1aHWgNWr1bY= IHBsYW5uZXJz INC+0L/Qu9Cw0YI= 4LCC4LCf4LGH IGFwb2xvZ3k= YmVpdGV0 IHJlc3VycmVjdGlvbg== IEVyc2F0eg== LWZpY3Rpb24= cmVhc29uYWJsZQ== IGzDrW5ndWE= INi52YTZitmH2YU= IGVmdGVyc29t IHByw7Nwcmlvcw== INin2YTYo9mI2LE= IHRleHRpbGVz IHBhdGU= IGFncsOt Zmlt SGVucnk= YmFud2U= INm+2LPZhtiv 4Kuo4Kum IG9seW1w IGNvc3Rvcw== SUZu IFNjaWVudGlzdHM= IGluZGlnbg== 0LzRltC9 IGthaGl0 0LvQtdCx IFByZWZlcnJlZA== Y2FrZQ== IENPTlRST0w= IOC5geC4quC4lOC4h+C4hOC4p+C4suC4oeC4hOC4tOC4lOC5gOC4q+C5h+C4mQ== KSc7Cg== 4LS/4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LWN IOyngeygkQ== CXB1c2g= IOCyleCzgeCysA== IFJlZ2FyZGluZw== IERFVklDRQ== 6IKD IGRvd2Ft Y3VsdXM= 4buLZ2jhu4s= d2pnbA== SmFuZQ== IHB1Ymxpc2hlcw== 4Ka+4Kaf4Ka/ IHZvbHVudGFk LUNvbGE= IOS8nw== IHBvbGl0aWVrZQ== 4Kqw4KuN4Kqm LmJyZWFr 5L2T57O7 Z3JhdmU= KCoo aXNlbWVudHM= IHBlcnU= IG9uYWY= TGFy INCy0L7QtNC+0Lk= IOCkuOCljeCkpA== IHRlaWU= IGthdGVnb3Jp S2ly IOCyleCyvuCysOCyow== 15nXqteV15c= YXJsYW4= IG5vdMOtY2lhcw== INin2YTYt9mB2YQ= IOCqquCrjeCqsOCqpOCqvw== IE5lZQ== 4KSt4KS+4KSX IHNpbGRlbmFmaWw= 15DXoQ== IM68zq3Ph8+Bzrk= IOCkpuClgeCksOCljeCk X2NvbGw= IHphbw== 2LPYp9mE X2hyZXN1bHQ= IG5lZ290aWF0ZWQ= LnJlY2VpdmU= IGxvY2FsaXphw6fDo28= cmVzZXJ2YXRpb24= dGds IGvDpG1w X2FjY3VyYWN5 IG1pc2M= 4oCZaGFi UExFQVNF c2NoZW1l LkxpZ2h0 IOCmnOCmqOCnjeCmrg== ICd7ew== INC80LDQvNC70LXQutC10YI= 44GX44KH44GG IHNpZ2Vy aWt1bA== w6R1bWU= IEluZG8= X1NlbmQ= IGZhc2hpb25lZA== 5omV INin2YTZhNio2YY= INio2LHZig== 0KLQvtC7 IGppZQ== INCy0L7Qt9GA0LDRgdGC0LA= 1b/VpdW01aLVpdaA1as= IHBvdWRyZQ== IHRyZWQ= IHNucw== b3BmdQ== QWRvYmU= IteU IHdoYWxl U3RyYQ== IFZpdm8= IGN1cmVk S3dh IHThu60= dXlvYm96aQ== QmV5b25k 5ZCN5a2X aXRpcm8= IHNwb2ls IOuztOyXrA== IMOzdGltbw== IHNvbWJyYQ== IHBow6lub20= 4buvdQ== aGV0aGE= IEhVRA== LXdhcg== YW1lcmljYW5h IFRoZXJtYWw= IGxpbmd1YQ== IExlYXI= IHNwaWtlcw== XE9STQ== INmG2LHZhQ== eXY= IGNvbGxhYm9yYXRpb25z 0LjRh9C10YHQutGD0Y4= IOGDnuGDlOGDoOGDmOGDnQ== aWV2ZXJz IElyYWs= IHRlbGVncmFt Lk9wZXJhdGlvbg== IG1hbGFyaWE= IOCquOCqruCqvuCqmuCqvuCqsA== 15LXldef 4KeB4Kaq YW5nbGVk IG9tcA== 7Lyc INiv2Yk= INiz2YTYtw== INGb0LU= INin2LXZhA== 4LiZ4Li0 IE92ZXJz INi02KjZg9ip IExpcXU= IOCuqOCuv+CuleCutA== IE92ZXJyaWRlcw== 0LTQsNCz0Ys= IM+Hz4nPgc6vz4I= INC+0YLQtNGL0YXQsA== IG1leGljbw== INiv2LHYrtmI2KfYs9iq ZWNhbg== 4bqjeQ== 0LXRgdC/0YPQsdC70LjQutC4 INmF2K/bjNix24w= IFNtb2s= IElsYQ== INC/0YDQtdC40Lw= IHZ1bGE= IOCyuOCzjeCyqg== IOCkquCkvuCkoA== IFJvbWFudGlj IGtpZWR5 2YHYp9ih 55S35Lq655qE5aSp5aCC LkFQUA== 4buY 5rqA IFZhcGU= INeV16Q= IHZpdHQ= IHZlcmtyaWpnYmFhcg== 5YiG5Yir IG1vbnRhcg== b255bWU= IOiKsQ== IGjhu5k= IGJvb2ttYXJrcw== IEpQRUc= dsOkcg== 4K+B4K6k4K6/ IGFudGh1 IGFmZGVsaW5n IGl0b25n IGRpa2thdA== IGpvaWU= INWh1bzVodW21oE= IGJhaW5z IENvbGxlZ2Vz KHBw IHNww6ljaWFsaXN0ZQ== PWw= SVc= INmF2LnYp9mE2KzYqQ== IG1hZ2lh IGhpcGVydA== IHZlaWxsZQ== Rmx1eA== INmF2LPZhNiz2YQ= INCy0L/QtdGH0LDRgg== 5a6Y5pa5572R IHJhZGlvcw== IHJvYm90aWM= 44CC44CC44CC INiz2YrZg9mI2YY= IOGDoeGDnuGDlOGDqg== aWtpcw== IFN2ZQ== IOCksOClgQ== IHBhc3NhZ2Vt w6lyaWNhaW5l 2KfYqtuS 4K6/4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f LnJlcG9zaXRvcmllcw== INC90L7Rj9Cx0YDRjw== INeq15Q= w6RpdA== IEtvbnRv IE1hZ25ldGlj IHByZWZl xIFsxIE= 6LKo LmhvdA== eXRp IGxsZW5v IG1pbW8= IGdyaXQ= IEthdGVnb3JpZQ== RHJ1cGFs PEN1c3RvbWVy Iklu ZHRv IGJlc29uZGVyZW4= R2Fi LldoZW4= eGZj IMOpdsOpbmVtZW50 cGxpYW50 IEtpbGxlcg== IExlZ2lzbGF0dXJl b3Jlc2hh INC80LXQsdC+0YjQsNC0 IGFyYXM= xI1rdQ== XSsi 6IWQ IGJ5aQ== IG1hYW5h IHNhYmVt Lmly IGxsaWI= LHR5cGU= INeg15DXqA== IFppZw== INqv2YfYsQ== IGJpdHRlbg== INii2LrYp9iy IERpcnR5 IOC4nuC4o+C4teC5gOC4oeC4teC4ouC4o+C5jOC4peC4teC4gQ== JSI+ IGbJmQ== IOustOyXhw== IGVyeQ== ZW50cmFudA== LnNlcmllcw== aWtvYQ== IGZpbmFuY2VtZW50 IGxlb3I= PScnLA== LUVy IFBlbnRhZ29u IGtsZWluZXJl dXJlenph IHByZXZpZXdz IGZyaW8= X1RFTVA= b3ZlcnZpZXc= IEdyZWF0ZXN0 dGVjaG5vbG9neQ== 562U5qGI IOC0juC0suC1jeC0suC0vg== LmhvdXI= IElkZW50aWZpY2F0aW9u IHBhdHJpbW9pbmU= CUV2ZW50 aXZpdGVpdA== IFZlcw== IOCmsuCniA== IGVtcGVyb3I= 6buE6YeR INGG0LXQu9GM0Y4= IGJlaG9vcg== cmFuY2U= IHNwaXJpdHVhbGl0eQ== IGluZnVzZWQ= IOCmheCmqOCnjeCmpA== IGNyw6lkaXRvcw== aXNraQ== d2l2ZXM= IHPDoXQ= IEdH 1aXWgNWj IHJlYWxpemFuZG8= IGJpcsOnb2s= INin2YTYo9iz2KjZiNi5 X3N3YXA= w7zDvA== INGH0YPRgtGM IEJvbHQ= INC90LDRh9Cw0YLRjA== X21lYXN1cmU= QmVhY29u ZW1iYW5nYW4= IOCuleCutQ== INCw0rPTmdGL0L3SrdKb0LDRgA== X2ZsYXQ= IHRlYWQ= bWlub3I= IGhhdGVz INeZ16A= IHRhdWE= IMSRxrBh IGZsb3Jl 7ISc64qU cHVibGlzaGVy LWV4aXN0aW5n IGluZnJpbmdlbWVudA== TkFTREFR IHNlcXVlbmNpbmc= YW5kxLFy 54Of IMO9eWw= INWh1bzVodW71aHWgNWv aGVyb2Vz IHphaHI= IGNvbnNvbGlkYXRlZA== b2xvZ25l IGZ1bmt5 IM6czrE= 15nXmdeX LlVuc3VwcG9ydGVk IGVzcGVjw61maWNh KEVudmlyb25tZW50 QnJpZW4= IOCksuCkv+CkluCkvg== IGNvbmhlY2lkYQ== 0L7QtNC+ 2J/Ynw== LlBvaW50ZXI= 4YOS4YOQ4YOW4YOg4YOT X2dl INK30LDQsg== IHJ1YmJpbmc= IOCmrOCmsuCmvg== INin2YTZhdi32YQ= IGJsaXR0 IGhvbGRl IGlwYQ== c3BlZGVz IOCkpeClgOCkgg== INCx05nQuQ== IOCmrOCnnA== 2LHYp9iq2YrYrNmK2Kk= b3RhdGU= INiq2LPYrNmK2YQ= c25hcA== IOGDkOGDpA== TWVkaWFu IENsZW1lbnQ= ZWxlbmk= IGdyb2VwZW4= 4LK14LK+ IFBlcnNvbm5lbA== IGZsYXA= IGZ1Z2E= Il0NCg== 4KeH4KaV4KeN4Ka3 CVByaW50 INi52KjYp9ix2Kk= INW51aHWgw== CXN0YWNr IHN0cnVrdHVy IGVya2zDpHJlbg== Q29ubmVjdGluZw== 4LC/4LCq4LGL4LCv IGRpcmlnaWRv 772eCg== IEdlYsOkdWRl IGtvbW1lbnRhcg== IHVtYXM= IOCuieCusuCulQ== SWRlYWw= SmFwYW5lc2U= IGRyaW5n IHVtdXI= ZXJpYWxpemF0aW9u b2NhcmQ= IGdlbWlkZGVsZGU= LXBhc3M= cGFja3M= IHThu7c= IGtvbmZs IHZpZXM= IGt3ZXN0 SW50ZXJlc3RlZA== IEdq IHBvdWNo dWdlb3Q= INio2YnZhNuV2YY= IOCwquCwoQ== 2YjYp9i52K8= KGRpcm5hbWU= IHVsbw== INi02KfZhw== INCw0YLQtdC80LDSm9OZ0LA= IE5hdGFsaWU= IHVuZGlz ICjigKYp IEFydGVu IGFtaMOhaW4= LeCkrA== IHZlag== dXNob3J0 IGFpeMOt INio2LHarw== IGludGVyY291cnNl IFpvbWJpZQ== IGFndWFz IENvaW5z IE1haW50YWlu IGh5cGVybGluaw== IHBpcm0= IGnFiA== 44Gf44KB IGNvbmZsaWN0aW5n UGFzdGU= IlM= Y2zDqQ== IG5jaGU= IHNvcHJhdHR1dHRv IGt1cmU= INC/0LDQsNC7 IOy4 16nXqNeU 6YGK dXNpbg== IHBhdHJv IOCkpuCkleCljeCktw== X3RhcmdldHM= IGFudGlt dGVib3Jn 15DXqQ== T01Q IGlzb3Q= INmB2LHYtg== IERpZW5zdGFn IGV2YQ== IEdyw7Y= 4LiC4Lix4LiZ eXNhZHk= b3NhdXJz IHTDqWzDqXZpc2lvbg== 44O25pyI IGRyYXVm IFN0YXY= IGRyYWdvbnM= IGRyYWZ0aW5n 4oia IOC2heC3gA== IGludGVpcm8= IFVGTw== LmNoYWlu IHBsdXJhbGl0eQ== IEFraw== dGhvb2Q= IG9lZA== YW3DoQ== Llllcw== UkFJTg== 4K6/4K6y4K+B4K6u4K+N X0NBTg== ZW5jcnlwdGVk QUtB IGRpdHV6 IHByaW5jw61waW8= IGt1YWxpdGFz wq10ZW4= 0LjQvdC40Lk= IFtdOw== KSkr IOCksOClh+Cksg== IGxldmVyYWdpbmc= IGF0dGFpbmVk 4LiH4LmI4Liy4Lii IGkndmU= IHBvc3Nl TGlzYQ== QWNl ZW1hdGlj LndhbGs= IOCkteCkv+CkuOCljeCkpA== IHN1Y2tlZA== IGV4cG9zacOnw6Nv 4Z+o INmI2LfZhg== UnVzc2lh bmdvcg== IGtp4buHbg== IGZyaWdodGVuaW5n UklP INKh0LDQu9Cw VGF1 24jYtA== 6YCA5Ye6 IEplYW5z IHNpbnU= LS0tCgo= aHRkb2Nz IGVuZm9xdWU= IFByb21wdA== IHXEnw== QFJlc3BvbnNl IOC4reC4ouC5iOC4suC4hw== 15XXoteZ150= IEJpdHM= KHJvdXRlcw== xLo= IEluc3RydW1lbnRz INGF0LDQtNCw 0L3Rg9GC0YzRgdGP IOCwnOCwqA== U2hpcHM= 4LWB4LSV4LSv4LS+4LSv4LS/4LSw4LWB4LSo4LWN4LSo4LWB IGFxdWU= LnRtcA== IGNoaWs= U2VsZWN0b3Jz IGNhcmM= UHJlZGljdGlvbg== IGppxb4= IGluZGljYXRpdmU= 77yM5b2T Tlo= 4KSw4KWA4KSc IERlc3Rpbnk= INGB0YfQuNGC0LDQtdGC0YHRjw== 4LWN4LSc INC80LXSow== IHRlbXBlcmF0dXJhcw== w6JuaWNh IHBlcnNvbmFsZQ== CW51bWJlcg== IFRlaWxl IG1vdmls RmxvcmlkYQ== 4Lih4Li34Lit4LiW4Li34Lit IOmrmOa4hQ== IFZvaWNlcw== IGVudHJvcHk= IGVkaXRhcg== IHJpcmU= Y29udGFpbg== IGZsYXdlZA== IHByaW1lcw== YW11bGth IGluY3Jlw61ibGU= INiz2YrYpw== Ol4= IEdpb3Zhbm5p dXRhdGlvbnM= IOCypOCyqOCzjeCyqA== L3N3 IEVyZA== bmVtZW50cw== IHTDrW4= IHdpY2h0aWdlcg== IOCknOCkqOCkvg== X0RJUkVDVE9SWQ== IExhd24= IG9ibGFzdGk= KFB5 IG9sb25h 4LK+4LKv4LK/ IEllZGVyZQ== PXU= IHVuZGVyZ29uZQ== IOCqruCqqOCrhw== INeS16jXldeZ16E= LnZlcnRpY2Fs IHByb3Bvc2l0aW9ucw== 5peg56CBYXY= 0YjRltC70ZY= IHlkeQ== IHNsZWVwcw== IEJydW5zd2ljaw== INSx1bXVpA== IFRlYWNo dmVyZWlu INC80L7RgNCw IOGDm+GDl+GDkOGDleGDkOGDoOGDmA== IOCkquCljeCksOCktuCkvuCkuOCkqA== IGtub3Rz Uml2ZXI= IOCyquCzjeCysOCytg== ICl7 YWduYXI= 0LnSk9GD0YA= KHRj Uk9VR0g= 16LXpg== IG5hYm8= INio2KfYs9iq IFJhaXNlZA== IOC0sOC0vuC0tQ== 4oCZZW1wbG9p IGVpbmdlc2No IOq4sOuzuA== IEh5Zw== 0YHQuNCy IGdhaA== IOOCs+ODlOODvA== IT09 IHRoYW5rZWQ= IGFwcmVz IFNhbGFo IGRpYXA= LnJwYw== INGE0LDRitC+0Ls= IFRlbGVncmFwaA== IOG5og== IGhhbmdz IHJlc3NlbnQ= LW9wdA== INGD0YfQtdC9 IFJlZ2luYQ== IOCwleCwvuCwqOCxgA== INiq2YjYp9mG2K8= IOGDoeGDkOGDruGDmg== INC80YPQvdCw0YE= IHdpbnRlcnM= Jyl7 IGVueQ== IHjJmWI= 4KS/4KSo4KWA QmVhdXR5 IMWfb2w= LnNlcg== YWJsYQ== IGNpZnJh dXJlbWVudA== INCQ0L8= INGC0YPRg9GA0LDQu9GD0YM= IOCoqOCoueCpgOCogg== emlv IGnDp2VyaXM= IGNow6k= YXV0b21hdGlj IEJ1eWVycw== IGJheWk= IHRzaHdhbg== 4YOY4YOg4YOh YnJ1Zw== zrXPgc65 ZWxsYW4= 5Lq65omN IGVtaXR0ZXI= IGdyYW50aW5n IOCkqOCkr+Ckvg== IE9yZ2FuaXo= IHJpZGdl IHlhxZ9hbQ== KioqKgo= IHByb2plY3Rvcg== IGhhYmFuZw== bGVpZ2g= IGVmZWN0aXZv IMOpY29sZXM= IEF5dXI= IERpc3BsYXlz RG9r aW1wbGVtZW50ZWQ= 4KSX4KWN4KSw4KWA IHJhcHBvcnRz IG9udGRla2tlbg== PWo= a2nFnw== 0L7QstCw0L3Riw== 4YCe4YCK4YC5 dmlyaQ== IOC0heC0p+C0v+C0lQ== IGJlaG9lZnRl IOeOqeWkp+WPkeW/q+S4iQ== aWF0YW1lbnRl IMO8emVyaW5l IOWNlQ== IGNvbnNjaWVudGU= 4KeA4Kex IGxsYXc= IFNjaHdlcg== IHLDqWdpbWVu 4K6/4K6V4K+N4K6V4K+B 4YOo4YOg4YOd4YOb IGV6aW5n J25pbg== IOGDoeGDkOGDmOGDnA== INmF2LnZhw== UGlja3Vw VmFtb3M= IGludmVzdGlnYXRvcg== cGxhdHM= IHByZWNpc2Fy IFdlbnQ= IOCmleCnsOCmv+Cmm+Cnhw== IFNjaHdhcno= X21hcmdpbg== IHBvdGVt INWh1bbVsNaA1aHVqtWl1bfVvw== UFg= Li4uWw== IOCqheCqtQ== THN0 IGVzdHVkaWFy IGZ1Y2tlZA== IE1hc3RlcmNhcmQ= LlJlZnJlc2g= 5b2i5oiQ INin2YXbjNiv IGNhdGVnb3JpYXM= dWx1bmc= IOCmrOCmv+CmsOCngeCmpuCnjeCmp+Cnhw== IFRyYXNo IGVuY29t IGJvcmE= PEg= Lmh1 w6lkaXRv IEZhcmdv bWV5ZQ== IGJyYWc= IHN3YWw= bmRhZw== IOCwqOCwvg== ZG9y IGNvbnRyYXN0aW5n SmVubmlmZXI= IHBvemk= IGhhbmRpYw== IOCqleCrjeCqtw== 2KfYsdin2YY= X2xlZA== IEtpcw== dHRlbWJlcmc= X21ncg== fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== cnVwYQ== IGluc3VyZXI= IGthc3Rh YW1tYW5z IOatkOe+jg== IGRpc2tz 7LKo IExhcmE= CWRlc2M= UHN5Y2g= 4KWB4KSh Z2V0dGluZw== INiq2YbZgdmK2LA= IMO8bQ== IGNhY2hpbmc= INCx0YPQu9C00Ys= IE7Ds3M= IG1pdMOkw6Ru Z2V2b2VnZA== ZXJ0amU= VHdlZW4= IHByb2JlZXI= IGRpYXBlcg== IExlc2xpZQ== IHPDrW50b21hcw== INi62LA= IEZPTExPVw== 1oDVtQ== RGlycw== IOCyquCzjeCysOCyrw== INit2YPZhQ== U2lzdGVtYQ== eXN0b3Jl IGRyaXA= IG1lbnlhbmc= IFFWYXJpYW50 INCS0LXQu9C40Lo= YXN1cmVy IFBST1A= CWV4cA== KWM= IEFjaGlldmVtZW50 IGd3ZWl0aA== ZnVzaW9u c3RyaW5nc3RyZWFt IGFuY2Fr 4oCZaW5n RWI= IGlybcOjbw== YXV0aW9u IGdlbmVyZQ== IGllc3A= IHRvbmVu IGVzdHJvZ2Vu ZXB0ZQ== IGpvcmQ= IERBQw== IHRqZW4= IEludGVyZXN0aW5n 6ZqP5py6 44Gh44KD44KT IEFjY29yZGluZ2x5 IEFkdmVydGlzZW1lbnQ= IHJldG8= IOWNjuS6ug== IE7DoQ== IHVyZW4= X3Jz IFNhdHVyZGF5cw== T25kZXI= IFBhbmU= IGRldGVybWluYWRh V2hlbmV2ZXI= IHVtdWc= bWVtY21w asOt IGNoYW1iZXJz 5oyH5a6a IFJlY3ljbGluZw== 4Z624Z6F IGJvbmRlZA== IEhpZ2hsYW5kcw== 77yM5peg IG1pcmFjbGVz 1a/VodaB IHBvc2l0aXZvcw== INin2YTZg9mI2YrYqg== IFRK IHVuZGVybQ== INWx1aXVpg== IG1x IGVyd2VpdA== b2x2ZXJz INC/0YDQtdC00LXQuw== 0LTRi9Kb0YLQsNC9 INec157XlA== IFBpb25lZXI= IOCwquCxjeCwsOCwrw== IGZvcmVzZWU= QWRqdXN0bWVudA== 56an w6Jy YWlsdGU= VHJlYXRtZW50 IGFudW5jacOz 2YTYug== IENsbw== IGluc2lzdHM= RXhwaXJlcw== IERlbGY= RmFudGFzdGlj IGlmcmFtZQ== IGdlb3JnYW4= ZnJhc3RydWt0dXI= IFBlcmtpbnM= ZmFsdA== IHNlcsOg IG92ZXJzZWU= KHNpdGU= X2dlbmVyaWM= XycuJA== IGpvbmdlbnM= PSIiLA== X0ZT SW5zZXQ= ZWRpdGFibGU= INin2YTYp9ir w61ydXM= IEZhcw== INC80q/QvNC60q/QvQ== IGFzY2lp U2hhcGVz aGxvYm8= IHR1cm5hcm91bmQ= 5pyN5Yqh5Zmo X2Jv IHNpbmdz IGthemFu ZW1vbnM= 5b2p56Wo5aSn5Y+R5b+r5LiJ IOCynOCzig== b2Rpaw== KGNw IE11c2NsZQ== 4oCZYWN0aXZpdMOp IFLDqXM= IOyYiOyglQ== V0hJVEU= 4LCy4LCC IGNvbHVtbmE= ZXZl RGVzY2VuZGluZw== YWp0 IG5hbGXFvHk= IHN0ZXVu LlNsZg== Y291bnRyaWVz IHbhu4c= IEFsZXhhbmRyZQ== 0YLQsNGC cHJvZmVzc2lvbmFs 0LDQtNCw0YA= IG1hbWJv R2VzY2g= Q3J1ZA== IOCqnOCri+CqoQ== XSIpLg== IGtyYWp1 X2Rpc2NvdW50 IGZpbmFuY2nDqHJl aXNpcg== IEtlZQ== CXhtbA== dHJhZg== 5LiL5rOo IE1pdGFyYmVpdA== IGxpdmVsaWhvb2Q= 5ou8 IER1cmFudA== IFRyYXA= dXJpbG9y IGV6dA== IE1hbGxvcmNh IHTFoWE= X1NPQ0tFVA== INGN0L0= INC90LXQstC+0LfQvNC+0LbQvdC+ zr3Otc+C IOCkmOCkn+CkqA== 0LHRlg== IGRhZXJhaA== IENBVEVHT1JZ INGB0L7QsdGL0YLQuNGP IHBlbnNhbWllbnRv X2FsbG93ZWQ= IOGDkOGDoOGDkOGDoQ== SU5VRQ== aWxsYW50 IHRlcm1lZA== 0LXRgdC70Lg= PEJhc2U= IHZlbmRhcg== IEJyYXVu IFN1b21lbg== INGE0LXQtNC10YDQsNC70Yw= xYZ1 OycsCg== 2YrYqtmH2Kc= VElOR1M= 6YGT5Lq6 16LXqNeW IEJhbGR3aW4= 4YOh4YOQ4YOl4YOQ4YOg4YOX4YOV4YOU4YOa INC40p/QvtGD0L8= U2xm IEJhaG4= IOKAmOKAmQ== IG1vxb5ldGU= IGVyaMO2aHQ= IHRlbXB0YXRpb24= 4K+I4K6v4K6+4K6p INmF2YfYsQ== IG1lbWJybw== INGC0LXQu9C10YTQvtC90LA= J2VtcGxvaQ== IGFhbGlz IG1lbmdhbWJpbA== Zm9uc28= IGZvcmVpZ25lcnM= IOC0uOC1jeC0lQ== 4K2f YWdheQ== IOCkquClgOCkm+Clhw== 6aqM6K+B56CB ZXJzdGU= IEdFTkVSQUw= XGI= bGFjaA== IOyWuw== 6IW+ IEludGw= IGhhc2hlZA== IGF2aXNv aXRvcmU= IGRpc3B1dGE= ZW50amU= 0L7RgNC0 IGF1dG9tb2JpbA== IGJvw650ZQ== IFJpY2hhcmRz IE5haXJvYmk= IGh5dg== IEdlcmFsZA== IM67zrXOuc+Ezr/Phc+BzrM= IGFuYWx5c2Vy IHN0w6RuZGln 0YHQutC+ IGhhbW0= IHBla2Vy X1BSSU9SSVRZ IOCqleCrh+Cqrg== ZG1h IGRpdmVydGlkbw== IOCkieCkleCljeCkpA== 4oSDCg== IG7DpHl0dA== LnNodWZmbGU= aXRhZG9z INCz0YDRg9C9 IGNvbnN0aXR1ZW50cw== IHZ5dcW+ S2c= IOC0teC1vOC0tw== IEludml0 IGRlZ2VuZXI= 7Iud7J2E IEdMRlc= IGFuZ2dvdGE= 6aKE6K6h 5Yik5pat 4oM= dWt1cnU= IGdsYXY= IGthbmFs IGFjY3JlZGl0YXRpb24= X2hvdXJz IHVsdGltbw== INKz0L7Quw== IG9sYWJpbGly INCw0LjSsw== JElGbg== INC/0L7QvdCw0LQ= 1avVttWo Z2Vlbg== 0JjRgdGC 4LKs4LKC4LKn IENsYXNzaWNhbA== 0YvQvdGC05k= IOCmluCmrOCmsA== IMSR4bqldQ== 0LjQvdC00LU= IGtlcmVu TWFya2Rvd24= X0hX IG5vaW4= TE9iamVjdA== YWhpdA== 6Z2i56ev IMO0bmlidXM= IGlkZW50aWZpZXJz Q2hyb24= w6puaW8= INmE2LDYpw== 4LKg TGlmZXRpbWU= IGR1Z3U= 4Lij4Liy4Liw IGRpbG8= INC80LDQutGB0LjQvNCw0LvRjNC90L4= ZXR0aWlu 4LK+4LKy4LKv INC00LDQvdC90L7QvA== IGJld29uZXJz 5a6J5Y6/ 4KeH4Kef4Ka+4Kaw IHBuZXVtb25pYQ== YXRpdGlz 5aSa6YeO IOCmueCmvuCmuOCmquCmvuCmpA== INGB0L0= LnZlY3Rvcg== INW61aHVv9Wl1oDVodWm1bQ= IEJhcmJpZQ== INGC0LXRhdC90L7Qu9C+0LPQuNC4 IG1vbnRhZ25l IHRvZg== IHdlbGs= IG96bg== IGJpamRyYWdl IFBzYWxt IOCqm+CrgOCqjw== IGx1bmFy INC/0YDQtdC20LTQtQ== IERpb24= QU5UQQ== IOWkp+WPkeWIhuWIhuW9qQ== Y29hY2g= IEZhaXJ5 IG1vbmFyY2g= LXdvcmtpbmc= IGNvbnNlcnZhdGl2ZXM= IHVuc3Vy 6YKj6YeM INqB2YjYp9qp IGlnYmE= IHByw6lzZW50w6k= IGNo4bupbmc= IGludWl0 IGVkw73DpHI= 0Y3QutC+0L3QvtC8 IkM= IM+Dz4fOrQ== IGt1cGhlbGE= 566X55uY IEJvbm4= IG9sYWNhaw== 0LLQsNGC0YzRgdGP YW1pxJk= IGtheWFu IGVuY2xvc3VyZQ== IGF0dW5jaQ== LA0KDQo= IFZpZXdlcg== L3N0YXQ= IFNlbWFuYQ== LmRm LmJsb2Nrcw== IGNvbnRlbmQ= 15XXp9eU 0L3QvtCy0YDQtdC80LXQvdC90L4= IGxvbmd1ZXVy IGxhbmPDqQ== IGJlbw== IHZpZW5lbg== aG9zdHM= c2NocmlmdA== INC/0LXRgNGB0L8= IOCkquCkvuCkjw== IHRlbWVs dW1lbnRp IHZlcmh1 5bCC IMO9dXJk INC30L3QsNGH0LjRgtC10LvRjNC90L4= Y3JpbWluYXRvcg== IGNlbGxwaG9uZQ== IiwiKw== 4KS24KWN4KSu IHJvdWw= 4LeU4La74LeU IG9wcmF2 IHJlcnVt INeV16LXnA== IGNocm9tb3NvbWU= RVBU 4LGB4LCa YXJyaXNvbg== IGplxZtsaQ== IHdpa2lwZWRpYQ== LWFjcmU= 0YjRg9GO KSso IGJsdWVwcmludA== X2NvbXBsZXg= dGhvc2U= IERpYg== IGNvc3Rhcw== INCy0LfQs9C70Y/QtA== YW50b2o= IG3Ds3ZpbGVz IGVtcGE= QFdlYg== IGVucmljaGVk X+i2heeisA== KCRfXw== IOaXtuaXtuW9qeWQjg== IHbDpXJl Q2Fycmllcg== IOyVjOugpA== IHNtYXNo IHdoaXNreQ== IG5vY2htYWw= IGd3YWl0aA== IGRlbnVuY2lh IOCqtuCrjeCqsA== Oy0= INin2K7YqtuM2KfYsQ== IHBvZXRh YXNha2k= IHByb2dyYW11 cG9pcg== ZXJuZXM= IGNvbnNlcXVlbnQ= IHJlYWxlcw== 4YCt4YCz IOCkteCkv+CktuCljeCkteCkvuCkuA== 4LCh4LC/4LCv4LGL IFNDSQ== IEpvaGFu IGVtcG93ZXJtZW50 YW55aWth IE1hbm5pbmc= ZXJkYWxl IG1pbGVzdG9uZXM= 4Z6T4Z+S4Z6R TGF1cmE= IFNoZXJsb2Nr Rm9yZXg= w7ZyZXI= IHN0cmVz IEZyYW5zZQ== c8Ot 0YvQvdC00LDQs9GL IEhlcmJlcnQ= INCy0YHRgtGD0L8= INin2YTZhdiz2KrYrtiv2YU= IHNwb2Q= LWVs IEdsb3JpYQ== INC/0YvRgtCw T1VSQ0VT Lm1pY3Jv IHRyYWJhbGhh 4Kq14Kq+4Kql4KuA IG5vdXJyaXQ= 5biQ INC60LjQudC40L0= IFFhcg== X1NBVkU= INCx0LDQudGF INGH0q/RiA== UmVzdHJpY3Rpb24= w61uYXM= INC80YPQtw== ZnJ1aXQ= w5VFUw== IHByb3NlY3V0b3I= IGFjbGFy 0YDRlg== YW55b2w= VENIQQ== b2NpYXRl IHBvenc= INGC0YDQtdCx0LA= IGhvb2dzdGU= Y2Nlcw== IHB1cmNoYXNlcnM= INCy0L7RgdC/0L7Qu9GM0Lc= IENlcmFtaWM= xI1uaWg= 4omk 7KO864qU IGhpdGNo IOaJi+acuueJiA== IEJlbnRsZXk= INC/0L7Rj9GB IFBFTg== R1c= IGJydXNoaW5n IEN6eQ== 4LSg 55mC IHRydXnhu4Fu IHJvb2Zz 4YCt4YCv4YCE4YC5 X3JvdGF0aW9u IENoYWxsZW5nZXM= IHZvdWxvaXI= IEluY2w= 16TXlQ== IGNoaW5p KGF0dA== RE1B IHJlbWluZGluZw== TUVUSE9E IGRpcmVjdHM= IHNlYmFi IOWFjeiyuw== LmNsZWFuZWQ= IHJldHJpZXZpbmc= INmK2LE= IGRpc2hvbg== 4LOL4LK3 IHl1YW4= 4paq 0LDQu9Cw0Lk= IHBlc3NvYWlz IHJlY29uY2lsaWF0aW9u IOKH L25n INGB0L7Qv9GA0L7Qsg== INC40L3QtNC1 IFJvZGU= LkNhcHRpb24= IG11bHRpbmF0aW9uYWw= INWw1aHVvdW/1aHVvw== IEZvcmdl IFJldHJvZml0 IG5la2U= 0L3QuNC90LM= 4LCC4LCX4LC+4LCj IOyYge2ZlA== PEFwcA== fSIpXQo= YnVqZQ== IHByb3dhZA== RVJUSUNBTA== IOCkquCliOCkuOClhw== IFVTUFM= 4KeN4Kav4Ka+4Kao4KeN4Kah IGludGVsZWN0dWFs YWphc3RoYW4= IOColeCovw== IOWkqeWkqeS4reW9qeelqOi2s+W9qQ== IHByZXZpYQ== INC60YDRgw== INGD0L/RgNCw0LY= IGVsZWN0cm9uaWNhbGx5 QXV0b3Jlcw== INmK2YLYr9mF INCd0JA= 4Kmw4Kic Qlc= INCe0YfQtdC90Yw= IFNwZWNpZXM= IEhvbmR1cmFz cHVyZQ== IOmhtQ== IG1hcQ== IFhJSUk= KG9wZXJhdGlvbg== X25k IGF3ZXI= IEFsbWE= IEVoZQ== 4oCZQXI= IOCqqOCquQ== IFBlcmNlbnQ= IGJyb3M= IEN1bg== ZG9taW5nbw== LXJldA== IHVuaXZlcnNpZGFkZXM= IOCkheCkruClh+CksOCkv+CkleCkvg== INin2YTYs9mE2Lc= IGxpcGlk 0Y3Qtw== IFR1ZA== YXRyZXM= IFplZQ== IHN1bW1hcml6ZQ== IFpFUk8= IHByb2dyZXNzZWQ= IElkZWFsbHk= IOC2seC3kA== IENvbXBpbGVy b2RpZQ== IHBvdXZhbnQ= Ki8KCi8v IFVDTEE= IOCkheCkreCkv+Ckr+CkvuCkqA== aXRhbWVudGU= Z3Vhbg== CVZhbHVl 0LDRgtC+0YDRiw== IFZlcmFuc3RhbHR1bmdlbg== IEZhaXJl aWduZXVy IGF1ZGlvdmlz L21vZA== Z2Fpbg== IMSRxINuZw== 0YvQu9Cw0LTRiw== Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u dGVsZWZvbm8= IE1pZW50cmFz KHJlcG9zaXRvcnk= 24zZhtmI IGVyZWQ= IHJvbg== IHRlcnJhemE= 1oDVodW21oQ= IENoYW5lbA== w7Z0emxpY2g= CVdIRVJF INin2YTZhdix2Ko= LkNyZWF0ZWQ= IGh2b3J0 cXVpc3Q= IEFjZXI= IOyJvQ== Lm5hbWVz IGVzcGVjw61maWNhcw== IGF0dGVpbnQ= IFN0dWRpZQ== YW5kcg== IEdyYW1tYXI= Q2xvc2VzdA== IEZpc2NoZXI= z4TOv865 IOCkleCljeCksOCkv+CkleClh+Cknw== IGRhdGluZ3NpZGU= dWlucw== IOGDoeGDmA== IOCmrOCnjeCmsA== W2NvbnRhaW5z LnNwcmluZ2Jvb3Q= IOCmueCmvuCmsA== 4oCL4Z6U4Z+S4Z6a4Z4= IHNlYW1z IOCkleClgOCkruCkpA== IGJhdGhpbmc= IG9qbw== IGhhbmRpbmc= IHhpaw== IOyLnOyKpO2FnA== INeR16rXl9eV150= IHJlc2VydmFz KeClpA== 4byA Z2dh YW1hbmFu IOGDoeGDkOGDlOGDoOGDl+GDkOGDqOGDneGDoOGDmOGDoeGDnQ== 1bjVstW21aXWgNWr IEF1bnQ= IGVudGFpbHM= bWlkZGFn IGFtcGg= INin2YTZgtin2YfYsdip 0LbQvg== 15XXnteV16o= LmFydGljbGU= IOCkruCkv+Cksw== QmVkcm9vbQ== 4KS+4KSX4KSk IHRlbXBy INCy0Y/Qu9GW ZmlyZXM= INin2YTYs9mF IGfDtnLDvG4= IEluZ3JlZGllbnQ= IOC4geC4o+C4uOC4h+C5gOC4l+C4ng== IGV4aA== 0L3QtdC90LjQuQ== INCS0L7Quw== IEJhZGdl 5bKt IHByaXPDo28= IHRpbWVzdGFtcHM= IGVtdWxhdG9y INiv2YjZhtmI2ro= IHR3aWpm QWNjZWxlcg== IHbEm3Q= IOWMl+S6rOi1m+i9puaAjuS5iA== 66O5 LlNI IGFjaHRlcmdyb25k IGV4cG9zZXM= ZGV2aWNlcw== IGVsZXZhZG8= 0LrQsNC30YvQstCw0LXRgtGB0Y8= aW11bGF0aW9u IGxqdWI= INeS15XXmA== IHBvdWx0cnk= LnVybGVuY29kZWQ= INC00LDQuNGA IGFjdHVlbGxl IGdlbWVlbnQ= IGVzcGV0 X1RSQUNL X2Vwb2Nocw== zrvOu86/zr0= cGFja2Vk aGVkcw== IHByYWN0aWM= dWxvdA== IHZlcmJsaWpm IGJhxZ9rYQ== IOS6rA== dmY= IOCynOCzgOCytQ== IFBhcGVyYmFjaw== IGFmZmFpcmU= 0L3QvtC2 ZWZk b3JwdXM= INin2YTZgti1 IOCqheCqsuCqlw== 4oCYbA== 4KSw4KWN4KSk4KSo aXNlZXI= IGphbmc= IGluZGk= aG9ibw== IGhhaWw= Z2FibGU= 7L2c 0JrQvtC7 SGF6 INW01aXVr9W2 5q2j56Gu IOGDk+GDkOGDoOGD X3RyYWl0cw== IHlodA== IGJlcmJlZGE= 6L+Z5LiA INiq2YXYqg== 4KuH4Kqu4KuN4Kqs X3NvcnRlZA== IGRoYWw= IG5vcWE= Y2hueQ== IEFtcGw= IHJvc3Q= IMO+w7o= 4KSX4KWL CWlw IGZvcmdl YXRhc2V0cw== Ok5P 1avVvtWh1bbVpA== IOCkh+CkpOCkv+CkueCkvuCkuA== IHBldGU= b3JrYQ== INCx0L7RiNCw0LQ= Lm9wZXJhdG9y QW50aA== IGVhZ2xl IFRlbmQ= TG92ZWx5 YmJi IEhhcmR5 IE1BR0lD INGG0LXQvdGC0YDQtQ== IHBlcHRpZGU= INC30Ys= IEF0dHJpYnV0aW9u PW51bQ== IG1hcmFuZw== IC0tLS0tLQ== IEtyaXNobmE= IGV4Y2VsZW50ZXM= INmG2YjYp9iy IHdyZWF0aA== INGB0YLQsNGC0LjRgdGC aXphbW9z IG51ZXZhbWVudGU= IEZu 4Ki+4Kiw4KmA IGhn INC/0L7RhdC+0LY= IOGDm+GDneGDmQ== IHVzYWJpbGl0eQ== IFNlZW1z 16LXoNeT INio2YbYs9io2Kk= 15DXkteY 4KS/4KSv4KSy IENsZWFudXA= IFNjaG5pdHQ= IGZpbnQ= INis2YraqtmI L2Jvb2s= QVJDSEFS ZWl0aGVy U3BlY2lmaWVy ZWxhYXM= IGJpb21l c2FsYXJ5 IGZhdm9ycw== c3VpdGU= b21leWU= IOy1nOq3vA== ICI8Pw== IHNoZWx0ZXJz IHlveA== aWRpa2Fu IGtldXI= ZW5kb3Jm 4K6+4K6f4K+B IHRyw6lz INWh1b7VpdWs IHBhcnRpY29sYXJl IHRvZWdl IGZlYXJy 0LPRjQ== YmFsYW5jZXM= 4LOA4LKq IGFjb25k Y29uZXhpb24= IOCml+Cmow== X0hBTA== acOnb3M= w6FtZQ== IHRlxZ8= IHJ1c3Nl IHZhYXQ= W3o= IE5peG9u 0YXQsNC00L7Rgw== U2hv Tm9yZA== IFJlbW9kZWw= IGVudHN0ZWhlbg== IGdlc2V0enQ= PT09PT09PT09PT09PT0= 6LaL INin2YTZg9io2YrYsQ== 4oCZYXVy SUNQ5aSH IEplZGk= IGF1ZnQ= 5ZWP44GE5ZCI44KP44Gb 4K6q4K+N4K6q4K6f4K+B4K6u4K+N IOC0heC0nuC1jeC0mg== IOGDkOGDo+GDquGDmOGDmg== IHRyYXRv INGC0q/RiA== IGNvaW5jaWRlbmNl IGxlag== Q29udGFpbmluZw== 2qnZhQ== IEplaG92YWg= IFBvZGVtb3M= 55W2 LlV0aWxpdGllcw== 0LjRh9C10YHRgtCy0L4= cmV3cw== X0NvbG9y am9ucw== IGNvbnZlbmllbnRl IOCksOClgeCkquCkruCkvg== INC/0YDQuNGC LmVjb3Jl IHByw6FjZQ== IGF0cXVl IGVpbmZhY2hl 0LvQuNC4 INiz2KrYsQ== U0VDT05EUw== IGFuY2llbnM= IOGDnuGDoOGDneGDkeGDmuGDlOGDmw== INWw1aXVsg== 5LiA5qC3 IGFsc29m J2FwcsOocw== IHJlYWRpbmVzcw== IOCwsuCwleCxjeCwtw== Q2hlc3M= IHRocmVhdGVucw== c3Rlcw== IGVjb27Ds21pY29z IOuR IGV4ZW1wbGVz IE9QVElPTlM= INGC0LDQvNGD IEdlcmFpcw== X2xs 5Li75bit b25lZGFz IGRlcHM= aGxva28= aXNzb3I= INis2YXZitmE IEFuY2g= IE1BVENI 4YOj4YOe IEVuY3ljbG9wZWRpYQ== eGlj INmC2KjZiNmE IFtdW10= IOGDmeGDkOGDoOGDkuGDmA== IFR4dA== IHJlcG9zaXRvcmllcw== KElk IElzcmHDq2w= LW9ubGluZQ== aWFuc2FuZA== 4LiB4Lij4Lij4Lih IGVpZ2VuYWFy INKb0LDQu9GL0L8= INiv2YTZitmE IOCmmuCmv+CmqA== IGJhZGdlcw== L2F1dA== 66Gc65Oc IHR3ZW50aWV0aA== xatzdQ== 546w6YeR572R LmFkcw== 5aSW5Zu0 IOC5gOC4geC4oeC4quC4peC5h+C4reC4lQ== IExsZQ== xJty dXJyaWNhbg== IHVuZGVybGluZQ== 77yM6KaB 44Kk44Kv ZGVwb3NpdA== IEJlaWRl IOCwteCxhuCwsg== d2VyZGVu 6L69 dGVsZXBob25l 0L3RltGF 0LXRgdGC0LXRgA== IOCyruCyvuCypOCyqOCyvuCyoQ== IGZyb24= zrHPg86vzrE= 0YbRi9GP0L0= IG9ibGlnZWQ= IERhaXN5 16LXnNef IOCmqOCmv+CmtuCnjeCmmg== b2ppcw== 0YDQtdCz ZWN0aW4= IHZlcmJpbmRlbg== KGRpc3RhbmNl 4KS/4KS34KWN4KSv 77yM5YyX5Lqs IGluendpc2NoZW4= IGthw6c= IOCwteCwsOCwleCxgQ== 4KeN4Kaw4KeH IHV0bw== w7Zzc8Ok IOCkpuCkrA== cmNvZGU= IFhlbg== IGhhcnZlc3RlZA== 6rKg7Iq164uI64uk INm+2LHbjA== IGZvcm11bGFpcmU= Tm9ybWFsaXplZA== YXRhdGFibGVz INeU16jXkNep15XXnw== IHNhbml0YWlyZQ== YWxhaGFu IOODgA== IFJlbGV2YW50 SFE= 4LmI4Lin4Lih IGJhbnM= RnJhZw== IHVuaXF1ZW5lc3M= IGdyYXBocWw= IG51cnR1cmU= IGZyYW5jZXNh IOGDrOGDkOGDoOGDm+GDneGDm+GDkOGDk+GDkuGDlOGDnA== IFJpYmU= IGZyaWc= IHdhcmdh Y8OpZQ== w7xja3NpY2h0 IGp1bXM= IGhlbnM= IHZlcnRz YXdzemU= CXN0bXQ= Q1c= QWZy IGF4ZQ== cXVpbA== INKb0LjQu9C40L3Sk9Cw0L0= CUpTT05PYmplY3Q= IEhhaXJzdA== INqp2KfZhdmE IG9mZml6aQ== IHBlc3F1aXNhcw== IG9ud2FyZHM= IG9rYXo= SmFja3Nvbg== eW1v IGRkZQ== LWdvdmVybm1lbnQ= IFNURE1FVEhPRA== INeR16LXqA== IOGDoeGDneGDquGDmA== VG9ueQ== IGVubGFyZ2U= IEJyYXNpbGVpcmE= IHBvZHJ1xI0= INGC0L7St9C40Lo= IE9rdA== 2YPYp9mF IFN3aW0= IHNwb25nZQ== INuM2YI= 44CR44CQ77ya ICFf IEtlc2s= 4oCZYXBwbGljYXRpb24= 5LuT IHByZXNlbnRhZG8= LlByb2ZpbGU= LdCz IHdhcnA= 15XXpNeZ X2hhbGY= IENhdWM= IM6YzrU= LXBhcmVudA== dWFh aW7El3M= IHRhcmpv 0YrQu9GD0Lw= IHJlenVsdGF0 WWF3 X01haW4= TWVpbg== IHVzYWhh INCw0rXQsNGA0LA= IHN1bm4= IGNvbWVudGFy IENvY29udXQ= INGE0L7QvdC0 IE1pc2No 5Zyo5aSp5aSp5Lit5b2p56Wo cGhvdA== IHNwbGV0 16LXoNeS aWVydG9z 5q2y IOCkl+Ckow== 4buNdA== IG1hZ2E= cHJlbmRyZQ== RXNzYXk= Z2F0c2J5 INio2r7YsQ== cmFwaWQ= W3Byb3A= L21t IHJldmlzZQ== IGNoaWxseQ== IGRvd25sb2FkYWJsZQ== LmNvbnRlbnRz IGNoaWZ1a3dh IGh1YnM= X1NDSEVNQQ== IHBhcmFzaXRv UGl2b3Q= JykuCg== IGFtc2Vy INC+0YDQs9Cw0L3QuNC30LDRhtC40Y8= IGFsbGVpbmU= X3Np b2NrZW4= 4KSk4KS+4KSo Il0v 4LmE4Lih INmK2Kg= Oi8vLw== LkZyZWU= 4YCx4YCV IExhZ3VuYQ== IGx1bWJlcg== aWFhbg== IOCmh+CmuOCmsg== 2LHZiNuM b2xvZ25h bGx1bg== IEVtcGZlaGw= IHJoYW5k IG1hbmFnZWFibGU= IFNPVVI= IOCwruCxgeCwluCxjeCwrw== IG9taQ== Q3Ry IGdlcmFy d2l0aHN0YW5kaW5n IOCkhuCkr+Cli+CknOCkv+CkpA== IOGDo+GDoOGDl+GDmOGDlOGDoOGDlw== IGZpbmFueg== IMSNYWs= ZW1tYQ== 4KeA4Kay INC+0YLRgtC10L0= wq3CrQ== IGFwcm92ZWNo CXF1ZXVl IGlzaHRl IHRlc3M= IHNwcsOhdg== IHNjaHU= IE1haGFyYXNodHJh LWZhc2hpb25lZA== IGdyb29taW5n INil2K8= IOCkrOCkvuCknw== Ozs7Ozs7Ozs= IGV4Y3Vyc2lvbg== YXJpbmE= P1s= Lm5hbWVzcGFjZQ== IGRhZ3M= LmdldGVudg== IEtpams= IHByb3ZhdmVsbWVudGU= Zm9ydW1z U29hcA== 6YW3 4YOg4YOd4YOR4YOY4YOh VmlsbGE= ZW5kb3Jz X1hNTA== 2LPZg9ix2Yo= U1RBVElD IG1hdGhlbQ== IGVuZGFuZ2VyZWQ= 4KSW4KSo KGZvdW5k IEhlZXI= IG7Dsg== WGk= dWxuZXI= 4La74LeS IHByb2R1cw== IERhYXJuYQ== dWplbWU= IG7hu69h INmF2YjYp9ix2K8= IGludGVycHJldGF0aW9ucw== IGvDqXA= IHNlc3Nv IGtsYXJl IHJlc2hhcGU= IEFwYQ== IHByb2JhdGlvbg== IHNpbGVudGx5 SUVOVE8= IEludmVzdG1lbnRz Q29sZA== IGbDvGhsZW4= LnN1YnBsb3Rz U3BhbmlzaA== cmVhbGx5 IOCqleCqsg== IGZvcmFsbA== IFNPUw== INmG2K0= IHRlbnRhdGl2ZQ== IHNlcnZpemk= IExvbA== IHN1cmdlcmllcw== IOa5lg== JE1FU1M= IGRleWls INCS0LXQtNGM xb5pbw== IHZlbmNlZA== aXN0YWE= IG9wdGlvbmFsbHk= IE1hcnTDrW4= LkNM X0JJTkQ= X+S4gOacrOmBkw== UGFybXM= CW9sZA== bWRs IEVyZGU= 0LvQsNCz0Yc= IOyCreygnA== 6Z+z5LmQ 2YXbjNmF aGV0aWNhbA== INC+0YLQstC10YA= IGFydGlmaWM= ImVuY29kaW5n X2F0dGFjaG1lbnQ= 44O844Oz IGtuaWdodA== IG1hcmNow6lz INCw0YLQvNC+0YE= INCx0YvQsg== IGJsaWs= IOCknOCkv+CksuClhw== IFRpdGFucw== IFJlc2lkZW50cw== LlJhdw== IGNvbWVkb3I= 0JLQstC10LTQuNGC0LU= KHRvZG8= 0YDQuNGI 0LjRgtC40LI= vYM= YWt5YXQ= RFJPUA== IOCkteCkvuCksg== IHN0cmVuZ3RoZW5lZA== 0YPRgtGB0Y8= 5o6o6Jam 0YPRgdCw0L0= INC60L7QvdGE0LXRgNC10L0= INC/0LvQvtGC IFNpZWc= IGvDvMOn 4Ka/4Kef4Ka+4Kaw IFBzaWM= IOCkleCkueCkvuCkqOClgA== IGNoYW5nZW1lbnRz INeX15XXqQ== IEFpeA== SU9ORVM= IGFtZXJpaw== IHBhbmphbmc= YWthbmc= cGllYw== LWZpbg== INW61aXVv9Wh1a/VodW2 IEthdGh5 IGdld2Vya3Q= ZXJvaWRz YWl0cmU= 5oqx KGNvbnNvbGU= ZXRyaXM= IOC0uOC0vuC0uQ== UmVzdHJpY3Rpb25z RGlhZ25vc3RpYw== IHBpbGxhcnM= INCQ0L3Qsw== IHRyaWJ1bg== INC205nQu9Cw0YA= IGNoYW1waW9uc2hpcHM= INC60L7QvdGB0YPQu9GM0YLQsA== IFZpa3Q= aGlybw== IENhbnRvbg== INqp2YjZhg== 5pyf6ZaT IGF6YQ== dWpldGU= TkVT IOCyteCyv+CytuCzjeCytQ== ZWt1 IG1lbmFjZQ== INio2LDZhNmD 5ZKq 5p+0 IHBsYW5lamFtZW50bw== IEZyZWVtYW4= IOCkuOCkvuCkueCkv+CkpOCljeCkrw== IFLDrW8= IOCkrOCkv+CkueCkvuCksA== 4KSh4KSV IHByZXBhaWQ= JHVybA== INmC24w= IHJlZ2xhcw== IGJlc3RlaGVu IHRoZWF0cmljYWw= IGVzdHJhbmdl 6Iux5Zu9 5Za25qWt 5ZCI5rOV55qE5ZCX IHRyYW1h 0LDQvNC1 IFZhcnM= JykpKTsK IGtvamltYQ== 2KfYsdmK2KfYqg== INeQ15k= IGFudHJl 6Zi/dg== IMOhcA== IENvdmVycw== 5paw5rWq IGRlY2lzaXZl cmVzaWRlbnQ= YWRpbA== Z25h INmF2K3Yr9mI2K8= IHJlY2VudGVtZW50ZQ== IHBvaXNlZA== aXh0dXJl 566A5Y2V QkVE U3BpZGVy IGNoaWZmcmVz 2LTYp9ix2Kk= LkluaXRpYWxpemU= dW50dXI= IGNyaXTDqHJlcw== IFByb3ZlbmNl dWdodA== 5Zu96K+t 5ZKM5b2p aWpkdA== IENyYXdmb3Jk b3Zubw== INep15TXmdeQ ZWxsZWVu IGFwcHJlbnRpY2Vz IGJvdWxl IFRIQU5L LmZldGNoYWxs IHdhbGtlcg== IGdlc3Rlcm4= IGludGltaWRhdGluZw== IGNoaWNvcw== YXBs 4YCV4YCr4YCQ4YCa4YC6 IExpZWJsaW5ncw== SW50ZWw= IFJvdW5kZWQ= 74Kn IHTDpHJrZQ== IGN1ZXN0aW9u ZXRhcmE= IEFjY3JlZA== 55m+5YiG 0LvTqQ== X3doaXRl KG1vdXNl 0YvRgtGL Y29uc3RleHBy Oz8+Cg== Lm9ic2VydmFibGU= YW5lag== IHByZWlz w7xuZnRpZw== 0r/QutCw 2YXYqw== w7xtw7w= IOGDoOGDkOGDpg== aXBwZW4= d2HFvA== 4Z+n IOCqleCqsOCqpOCqvuCqgg== IteR LCws IEhpcm8= IE5hcG9saQ== IOCqrOCqgg== IGJyYXY= R2VuZXJhbGx5 IGZpcmVhcm0= IG1lbHk= IEJlYg== IGNvbGxhZ2U= fCwK INmF2K3Ysw== YWRvbg== IEluZmluaXRl IENFUlQ= IExlb25l PWs= IHRhYWs= KGV4cHJlc3Npb24= 1bXVoQ== DQogICAgICAgIA0K IG3Dpg== 4Z624Z6P4Z+L SkY= KGNoYXJhY3Rlcg== INit2LHZg9ip IE1BSw== IOCqleCrh+Cqn+CqsuCqvuCqlQ== IGFmZWN0YQ== 0YvQu9GW ZXJ3ZWlzZQ== IHRzZWVt YXR1cmF0ZWQ= LmNnaQ== KWk= IEtvYg== 55Sf5oCB IOGDkuGDkOGDm+GDneGDmOGDpw== RXhlY3V0aXZl IHBoYXJtYWNpZXM= INek16E= 4LWN4LSs IHRpbGJhZ2U= IOGDpOGDneGDoOGDmw== IHZvc3RyYQ== 4Kas4Ka/4Kam 4oCcVGhhdA== X3BvcHVw IO+9ng== X1RIUkVTSE9MRA== IGF0dHJha3Q= IHZlbnRhamE= IGZvdXJ0ZWVu IGNsZWFuc2U= RGlhbW9uZA== IEJUVw== IOCqheCqsA== IGFrb25n IHRpbGxlZ2c= IGplcms= YXlzY2FsZQ== INeX15HXqNeq X3N0cmlkZQ== LkJveA== c2VjdHM= INmI2KfYsQ== 0L3Ri9C80ZY= IOCkuOCkgQ== IOCmrOCmvuCmhw== IGZyYW56 IG5haXZl 4K+I4K6V4K+N IGNvYXRpbmdz IHRlbmRyw6Fu IFBX cGVhY2U= IG1haW50ZW5pcg== V2FrZQ== IGFzeW5jaW8= 5o6M IGNyaW1pbg== IFBhbGw= UG91cnF1b2k= IFRvcnJlbnQ= IOCkteCkv+Ckrg== IGdlc3RhbHRlbg== YWxheWE= IHN0cnRvbG93ZXI= LlRpbGU= IOuFhA== 666k IOC0leC1guC0n+C1jeC0nw== ZWxkYQ== IHJlxb4= IGtvbGVq IE5pbg== dWplam8= 4LGA4LCw LlNv 0LjQvdC60YM= INmF2KrZhg== Tk9ERQ== IMOnw7Z6 4KSu4KWN4KSs4KSw b3Vucw== KFRocm93YWJsZQ== Z3JlZW5z eW9z IOC0teC0qOC1jeC0qA== UmVwb3J0ZQ== INiv2YjYs9ix25I= 4KS+4KS14KSw4KSj IGtoaeG6v24= IHNsaWdodGVzdA== IGNvbmZpbmVtZW50 IHRpcmE= ZXNjYXBpbmc= bnBj IOCwieCwqg== 5p6B5ZOB dmFt IHRyYWRpY2lvbg== IEtvbms= LXZpcw== IGF0bGV0YXM= 4Kq/4Kqf4Kqy YWJpZGk= LndoaWNo 1bjWgtW01bbVpdaA1ag= w6tudA== IOCkpOCkvuCksg== IGVudHJlbmFtaWVudG8= INin2YLYqti12KfYr9uM IGludGVybmF0aW9uYWxlbg== IMSRw7puZw== 4LiZ4Lix4LiB IEhhc2h0YWJsZQ== cWFybmVx aWxsb25n IHJldGlyYXI= IEVib2xh IEVYVFJB 0rPQvtGA0L4= INiq2YLYsdmK2LE= IHRoZW9y IHZlbnRz INmI2LHYrw== QlNU IGZvcmVjbG9zdXJl YWJsZW1lbnRl c3VyZQ== IGRlYnV0ZWQ= L0NhcmQ= IGJydXNoZWQ= Q29uZmlndXJhdGlvbnM= ZXNhcw== X0RSQVc= Lk5hbWVk IEF1dG9i IFNvdXRoYW1wdG9u IG1lY2FuaXNtb3M= INCx0YPQtNC10Lw= IG3JmXM= IHNrcml2 INGA0LDQudC+0L3Riw== YXNzaXN0 INin2YTYrNmF2Kc= IGt1d2U= 4YOS4YOQ4YOV4YOh IE1heHdlbGw= YWNoZXRlcg== zrXOug== IGFtbXVuaXRpb24= IERvdWI= IGfDonk= IGRpc3NpcA== 77yM6L+Y VVJOUw== RkFDVA== YWds IENyb3M= IEFWQUlMQUJMRQ== INGC0LXQsNGC0YA= IHJlw7o= LmJ1dHRvbnM= IHBhZGhh IFR1bm5lbA== IEFsZWdyZQ== IHZpdGFtaW5l INeR15nXoA== IGzDpHR0 IOCoh+CouQ== IG9iZXJl LXZhbA== INC+0YLRh9C10YI= INW01aXVr9Wo IEZyb250aWVy 0LDRgtCw0Lk= IHR1Ym8= 0LHQttGM0LDRgNCw IGF1dG9yaXTDqXM= INil2YTZitmH2Kc= LnFtbA== 0YbTmdCw0LbTmQ== IOWmguaenA== IOyeiOqzoA== 0LrQvtGO X21pZA== INC/0YDQvtGG0LXQvdGC 5Z2K KGRyYXc= 5aW0 6L+H5Y67 b3JwaW8= 4oCZw4l0YXQ= YWdpcg== INqY2YjZhtiv 0YDQsNGC0LA= IGNvcnJlbnRl IHN1cGVydmlzZWQ= IE5hY2hyaWNodA== IHNleHVhbGVz IG1pcm8= b3ZhdGk= IHZyYWll IEVsbw== INC60L7QvdGC0LDQug== bGl6 QXBlbGxpZG8= Zm90 0LXQtNC10L3QuNC1 4KeN4Kae4Ka+4Kao aW1wbGVtZW50 IGdlaG9s IGNvcnJ1cHRlZA== IHRyYWl0ZXI= U3RhcnRz IEZMTw== IEZlcnJ5 IGFiaXQ= IHByZXNlbnTDsw== LWJvdW5k IFJFR0lTVEVS CW1l XQovLw== IENvbGVtYW4= IE5lc3Nl YXJkeQ== 6K+B5Yi4 IGFr4buNa+G7jQ== IHN0dW5k IOCkueCkv+CkqOCljeCkpg== IHByw6l0 INCR0LDRiNKh0L7RgNGC0L7RgdGC0LDQvQ== IOCqpOCrh+Cqow== IHNhbHVkbw== RkZJQw== IGRhYmE= INC606nSow== IG1vYmlsaQ== Y3JldmVy INGD0LrRgNCw0ZfQvQ== bGVybg== IGdxbA== IGVzZW1waW8= IFbDpA== INGE0LXQstGA0LDQu9GP bmVlZHM= IG5hcnJhdGl2ZXM= INin2YTYpdix VU5DSA== bWF6aW9uZQ== aG9yc2U= YnJpYQ== IGRlY29kaW5n IOCksOCkvuCknOCkqOClgOCkpOCkv+CklQ== 16LXntei158= IEVOR0lORQ== IFRyYXQ= IG1hdGVybml0eQ== IGJlaGVlcg== IGNvbGVnYXM= Lm14 YWRlYw== bGF0ZXI= INCc0L7RgdC60LLRiw== IFJlY29u IGNlbGVicmFjacOzbg== IGRlY2lkaWRv IGF0YW5hcGk= em5hbQ== KCIiKTsKCg== X2NsaXA= LmNvbnZlcnRlcg== IFpvYWxz 4Lid4LmI4Liy4Lii4LiE4LmJ4Liy4LiZ IENTUg== LnRvZG8= U3ViamVjdHM= IERpdmlkZQ== 5YaZ55yf 4KuB4Kqu X0VM IHRhdGF1 IG1laXI= 55uR552j YXJpa2k= 6K+I 4KWC4KSs KGVycm5v IHJlaXJh UHJlc2VuY2U= 5a++5b+c IGZpbGVzeXN0ZW0= 57aa44GN44KS6Kqt44KA X2ZsdXNo IERldGVjdGlvbg== SEVJR0hU IHNvZnRseQ== LkJBRA== INC40LfQvNC10YA= 4LK+4LKs IFdlaXRlcmxlc2Vu IGFuYWx5c2Vk ICcnLg== IG1hcnZlbG91cw== 0LXRgdCw 4YOU4YOR4YOY4YOh4YOQ IENCQw== IGFhc3RhbA== IMOnxLFrYXI= IHVyYmFubw== IHVuZXM= dmVyc2ljaGVydW5n IEZX IGhhaW4= w6FsbmU= IGhhd3dl CWNvbm5lY3Rpb24= X2NvbWI= XFJlcXVlc3Rz 0ZTRjg== IE1pbGxpb25z TW9ja3M= CWN2 0JjRhdCw0LTQvtGD IEplbnNlbg== IGRhcnQ= INGC0LjQu9C4 INC00LDQvdC90YvQvA== 2YTYqNmK2Kk= IE1vZGVsbw== IHRpbWVkZWx0YQ== CWZjbG9zZQ== IGlnd2U= IHNwb2x1 5Za35rC0 IOC4oeC4t+C4rQ== UkVESVQ= QmFo 0YLTmdC9 IOinhumikQ== IHZvbGs= cXVpbGE= X2Rpc2s= IGRyxb5hdg== 4KSX4KS+4KSw IFNhY3JlZA== IENFUw== IHdzenlzdGtv dXRpZ2FsdWd1 INGH0LXQudC40L0= IGluZGV4aW5n z4HOr861z4I= 7ZWY66m07ISc Z2xlaWNoZW4= J10sJw== YWxhbGE= 2K7Yp9io2KfYqg== IFF1YXJ0eg== IFJlY2VwdGlvbg== KyIm IGzhu51p XScsCg== IHRpbmM= ZW5t IEtvdQ== IGVsZWN0cm9tYWduZXRpYw== QVJHSU4= 5omO 6Lev5b6E aWd1aWVudGU= INGC0LXQv9C70L4= IHRlcmNlaXJh am9obg== IEzDtnN1bmdlbg== 6YGt Lm9hdXRo IEViYXk= YWdhdGU= IHR1a3U= YWdnYQ== 0LDQtNCw0L0= IERyZXNkZW4= IHNjaGxpbQ== IMOmdA== aWNpZGVz IHp1ZXJzdA== KG5hbWVzcGFjZQ== SW5ncmVzZQ== IERyYXdhYmxl IFdlY2hzZWw= IGVpbmdlYg== IEhvyrs= IHdzcMOzxYI= 4LWB4LS0 IHZlc3RpYg== 0Y7RidC40YXRgdGP IHbDqWM= QHFx bWFpbndpbmRvdw== YXpvcg== IHZpbnM= IOCyruCyqOCzhg== YXdrcw== IOCwquCwvuCwsOCxjeCwn+CxgA== SnVn QmVybg== IOCwpOCxhuCwsuCxgeCwl+CxgQ== 15nXnNeV150= IGluY3JveQ== c3ludA== IEZyYW5rcmlqaw== 4LKt4LK1 J29r IHZlY3Q= zrPPiQ== aGl0cw== SmF3 INCy0YPQuw== X1Bvcw== 0J7RgdC90L7Qsg== IOCukA== IHViaXF1aXQ= IHNjcmlwdHVyZQ== IOC0juC0tA== IHJlbGE= dXJlZ3d1 IOCkleClh+CkqOCljeCkpuCljeCksA== IHN0YXNo c3RhdGE= INGB0LjRgdGC0LXQvNC1 bMOkbmQ= INeQ15zXlQ== IFR1dG9y L3R5cGU= dGhvdXNl 4oCN4LSo4LWN4LSo INm+2YjZhw== YWFuZXI= QUJJ ZXJ0aWc= 5aSn5LmQ6YCP INeR16TXqA== cmVjb2duaXplZA== U2F1 IExpbWU= QUdB IEtobWVy INC60L7RgNCw IG5hdmVnYWRvcg== LWxvc3M= b25pYW4= IENsZWFuZXI= IEVjaA== 0Y/QttC10L3QuNC4 IGRlc2NvbnRv IGNhbm9weQ== bG9wZW4= SHI= 4LS/4LSV4LWN4LSV4LS+4LSo4LWN INWv1aE= 4oCN4La74LeT INiq2LXZhA== IGthbnlh 6K++56iL IGVnaXRlbg== INin2YrZhQ== IEJlZGluZ3VuZ2Vu bGluaWU= IG51aXM= IMOpY2w= amF6 IEZBUXM= 15vXldef LW1vZHVsZQ== 0LzQuNGC0LU= IFNsaWNl IGRpcmV0bw== KEFQSQ== IG9udHZhbmd0 IGhi IMOubnRyZQ== IOKXiw== cMOydA== IFdlYmI= IHRlbGVjb21tdW5pY2F0aW9ucw== INC60LDQttC10YLRgdGP dmVkZQ== INio2YfYsNin IHJlYnVpbHQ= 8J+RiQ== bWFjaHQ= IHNha2Vy 4KSW4KWH IHZzYWs= INiu2YjYsQ== VW5pdmVyc2l0w6k= IHBsZWFkZWQ= IFNlaW4= INCw0pvQsNC70LDSm9GM IHJhaGF0 IM6xzr3OuA== IOGDm+GDk+GDkuGDneGDmw== CWFyZw== IHbDqWhpY3VsZXM= IGJsYWNrcw== CURlc2NyaXB0aW9u aXRhaXJlcw== IGRlbnVuY2k= IGludGVybmFz Y29sb24= RWFybg== INCh0L7Quw== IGFyb3Nl IGF0ZW50 IHx8DQo= 16nXnNeV150= IGN1cnJlbnRz IHRp4bq/bg== INmC2YQ= JSkKCg== X0dFTg== YW1vZGVs 16nXlQ== IGdyYW5kc29u IHJlZ2nDtWVz bG9pZA== KFhtbA== INWw1avVtw== IGFwYXJlbnQ= IHBvZQ== IHN3b3Ju 44OL44Ol 44WH IETDqWNvdXZyZXo= IHN1aXZhbnRlcw== IG1hc2N1bGluZQ== IFh0 IGNvbmRlbnM= 0LTQsNCw0YHRgg== INi32LHZgg== IGLDtnnDvGs= IEZldmVy IG5pw7Fhcw== IHN0ZXdhcmQ= IHNpaWhlbg== IHB1YmxpY2HDp8Ojbw== IOCwsOCxhuCwguCwoeCxgQ== QElk IHNydg== 4LiE4LmJ4Liy IHZvaWRhYW4= 15DXmg== 1aHWgNWh1bbVqw== ZW50dWs= IHR1anVhbg== Imlv IFNvbm4= X25hdGl2ZQ== IOGDoeGDkOGDm+GDmOGDnOGDmOGDoeGDog== 4oCZaW50w6lyw6p0 IEJhc2ljcw== aXRvcmlh INWz1aHVttWh1brVodaA1bA= Lm11bA== IOCkqOCkv+CkleCkvuCksg== YXR1cmF0aW9u IGF3YWtlbg== L2pwZWc= IFBhc3Nlbmdlcg== IG11cmRlcnM= IEN1cw== IHJhcHBlbGxl IGluZHVzdHJpZQ== KExvY2F0aW9u 0YPQsNKp Jyk7Cgov YXN0dQ== IHRyYW5zcGFyZW50ZQ== 2YLZitmC2Yo= IOKWsg== IGxlY3Rvcg== IG5ldXJvbG9naWNhbA== IOCkq+Cli+Ckn+Cliw== IOW9qeelnuS6iemcuOaPkOeOsA== IExFVFRFUg== IHRyaWdnZXJpbmc= IE1pZG5pZ2h0 eWFkYQ== LmFzdHlwZQ== T1ZFRA== IGNvc21pYw== IFByaW1h ZnVsbG5hbWU= V2UnbGw= IFNlcnZpbmc= ZGFkZQ== TmVt VEhPT0s= IFByb2R1a3Rlbg== INin2YTYq9mE2KfYq9in2KE= IGZvbGts IFVwcw== 0LXRgdC/0YPQsdC70LjQug== IGfDvG5k IE1pZ3I= IOC0muC0v+C0sg== IHR3ZWFr INqG2YfYp9ix INGD0YHRgtCw0L3QvtCy0LjRgtGM IGJpb2RpdmVyc2l0eQ== LlRBQkxF SWhy IFZlcnN0 IGl6bWXEkXU= X2F0b20= IHdlYXZl IFNlZWtpbmc= IGZlaXRvcw== IFRyZXZvcg== 4K6+4K6u4K6y4K+N IGRydW1tZXI= 5b+r5pKt 0LjQtNGL IHZlbmVy X250 IHBpbnBvaW50 4oCL4Z6Q IEZSRQ== IOCkuOCkguCksA== IGVpbms= RGVmZW5zZQ== IEJPQVJE Lkdsb2JhbGl6YXRpb24= IGt3ZXo= UmV0ZW50aW9u IEJBVA== IEhlZA== KGxpYg== U2VhdHM= ZWxsdGVu IGFkbWlucw== YWxpc3Q= IHNwaXQ= IEJpbGxpbmc= IOC0ruC1geC0pOC1vQ== IGZhY2lsaXRlcg== IFJ1bnM= LUxh IHBpc3Rvbg== LkdlbmVyYXRpb24= ICAgICAgICAgICAgICAgICAgICANCg== IHRhYmE= IHJlZnVzYWw= TG9r 2YXZhtmK IGdlbGVzZW4= aWTDo28= IGN1w6Fs IE1hZGFtZQ== TGFu INC80LXQvNC70LXQutC10YLRgtGW0Lo= IERBTg== IGzDs2dpY2E= IOCmnOCmvuCmqOCmvg== c3B1dG5paw== INi22LHZiNix24w= IMWhdGU= IOGDkeGDneGDmuGDnQ== IGJ1YQ== IGZlbWU= IMSRYQ== IHs/ IFdlaWw= X3Rl 4KuL4Kq4 LkNhbnZhcw== RXRh LnRpbWVzdGFtcHM= IGFtcGxh VmVudWU= 4Kmw4Kim IOCyruCziw== LnNlbnQ= IGzhu4c= 6YeR6Iqx IOuztOq4sA== 6byT IHRvb24= IENsb3Npbmc= KGVuZ2luZQ== T1NJ IG1vdGl2ZXM= IGVqZWN1Y2nDs24= aGFjaw== X1NFQ1RJT04= 4K6k4K+N4K6k4K6/4K6v 7ZKN IHN1cMOpcmlldXJl TmFw INCe0YHRiw== PENhcmQ= IG1vZXN0ZW4= IGNyZWVy 2YjZg9in2YY= X05T IERhdG9z INis2o/Zh9mG IGtlbHVhcmdh QFNsZg== IGNlcnRhbWVudGU= d2nEmWtz IHNvbGFuZ2U= IGRyZXB0 4LiX4LiY 1aHVsNW41b4= 4LaC4Laa YW51ZA== IHByZWs= IGJlbGc= RW50ZXJ0YWlubWVudA== INmF2K3YtdmI2YTYp9iq IGhhaXJz IE1hcm9j YXNzdW5n IOCkruClgeCkpA== LkVs 0YHQvtC90LA= c2tvbQ== IHRo4bqtdA== 44GV44Gm aMOkdXNlcg== IEVzc2VudGlhbHM= IOqzhO2ajQ== OmRpc2FibGU= 5aae QWlk 4K+B4K6Z4K+N4K6V4K6z4K+N INC+0L/QtdGA0LDRgtC40LI= IHnEsWzEsW5kYQ== 44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 4LK/4LKv4LK/4LKC4LKm IGluZm9ybWllcmVu IGdheWE= IHRydXN0aW5n 0JzQkA== ZWJpbGly aW50ZXJhY3RpdmU= dWNraW5n IHJlY28= 4Liq4Lit4Lia 4LiC4Lix4LmJ4LiZ IMSR4bqhbw== IENyYW4= IGhvbmRlbg== LXdpbmRvdw== IGN1cmx5 IGJyb2Njb2xp UEFTUw== w6Rw X0lucHV0 IEthbWJl IHByaWphdGVs IHBlbnNh IHhvcg== IGl6aW50bw== IFJpdmVyYQ== IOCkreCkqA== IiIsCg== asO6 4Kq+4Kqc4Kqq 44GU44GW44GE44G+44GX44Gf PSdc IFNtYXJ0eQ== IGludGVycHI= IGFmYmVlbGQ= IGludGVyZXNh IOCkleClgeCksOCkvg== 2YbZitmB IHBvaXNvbmluZw== z4bOtw== IHZvZWRpbmdz INGB0LvRg9GH0LDQtdCy IG1pbmVyYQ== IG51cnR1cmluZw== IOuEow== UGtn ZGVzY3JpcHRvcg== IGJlbmVmaWNpYXJ5 IHNrYXRpbmc= IOC0teC0v+C0rg== 0LjRgdGC0L7QvQ== IGt0w7Nyenk= IGZ1ZXJ0ZXM= IGZlY2hhcw== 4YCx4YCs4YC6 INek1rzXqNeQ1rjXkw== R2Vs KGJhY2s= IFZlcnNh IENvYXN0YWw= IHZpYnJhdGlvbnM= 0LzQtdC90YLRiw== INuM24HYp9q6 xaVh UmVnYXJkbGVzcw== IGRpdGNo IHRhcHM= YW1hbmhv IEp5 IFJveWFsZQ== 0YbQuNGP0LzQuA== IGJlaGFsdGVu X3Zz cHJlc3NpdmU= CXJ1bg== IG5hc3M= 4LmH4LiV4LiX4Lij4Li5 IEFTRQ== QmVl X0RPTkU= YW1ibGVh IGlhbQ== IGV4cGVyaW1lbnRpbmc= 0YPQvNGL 4K+N4K644K+N IGN1Y3VtYmVy Q2x1c3RlcnM= IEJL IGZlbmNlZA== IOCyleCzhuCysuCyuA== Jz4iOwo= IHTDqW1vaWdu IGNvbm0= Q291cnRlc3k= IGFjdGl0dWQ= IOC4quC4tOC4h+C4q+C4suC4hOC4oQ== IHVpdHN0ZWtlbmRl IGxlc3F1ZWxz b3Row6hxdWU= 7JeE aW5za3k= dXBkYXRlcw== 4YCH IGltYmVyZQ== IG1lZGFscw== RHVyY2g= Q29vbGRvd24= IG1vcnRz 6L+Q5Yqo IGVzdGlsb3M= IOCuquCvi+Cusg== IHJlY2liacOz 4LiX4Lix4LmI4Lin IGV4cHVscw== IGd5cg== IGdlc3BpZWx0 0YvQu9GL0Lw= INC/0YDQtdC00L/RgA== IHJlY2h0YmFuaw== IEN1c3Q= IEFuamV1bg== KFRFU1Q= INGC06nQvA== IHN0cmF3YmVycmllcw== YXRpYW4= 0ZbRgdC70Y8= IFVuaXZlcnNpdGllcw== IOCwmuCxh+CwsA== IM69zr8= IOCwruCxgOCwoeCwv+Cwrw== KTsi cm9jZXNz Q2xpY2thYmxl IOCqquCqvuCqmw== 1aXVttWr IGJhaGF5 IGRlbGl0bw== INCw0L3Ri9C9 IOuPhOybgA== w6dhbQ== 0YjRjNCw 4KeA4Kau aGY= 2LHZitiv2Kk= IHB1YmxpY2E= KCk7Pz4= IGFiYWQ= IGxhbWluYXRl IOC0teC0lQ== c2hpbnQ= IOCkluCksOCljeCkmg== 5pC6 X0luZGV4 INin2YbYqti02KfYsQ== KG1lYW4= IExlY3R1cmU= aXJhcg== IFZhcmlldHk= IMWfaXJrZXQ= IHdjaGFy IGFyZ2VudGlubw== dWxpbmE= 15XXotec TWlzbWF0Y2g= IEtI IENPU1Q= IGRlZHVjdGlvbg== INGI0LDRgNCw IGJheXlhbmE= IHV0aWxpc8OpZQ== INCB IFDDqXJleg== IOCwtuCxjeCwsOCxgA== IOaRqQ== 4LmA4LiI4LmJ INin2YTYt9ix2YI= aGFybQ== 4LK/4LKV4LON4LK3 IHBsYXN0aXF1ZQ== LXBhZGRpbmc= IEJhbQ== IG9ib2Rv YW5zaW5n IGltd2U= IOeP 4Ka+4Kan4KeA4Kao INiz2KfYstuM 4KuL4Kqw4KuN4Kqh IMO+ZXNzdW0= 0Y/Qt9Cw0L0= IEFuc2NobHVzcw== KGxvc3M= IOCkr+ClgeCkteCkvg== INeU16rXlw== IOWkqemprA== bGdlbmRl IGFjY2lkZW50ZQ== IGludGE= IOCqsuCqvuCqlg== IGFyc2VuYWw= IGNvbXByb2Jhcg== IHRyb3VzZXJz INm+2r4= IFJlZ3VsYXRvcnk= 0LPQsNC2 IOCkteCljeCkr+CkteCkuOCkvuCkrw== emFudA== IGfhu5Nt LS0tLS0tLS0tLS0tCg== dWJ3bw== IFBhaXM= INCy0LXQutCw 4YOd4YOR4YOT4YOQ 0LvQvtGJ IGRqZQ== ZWRpZXM= IEFzdXM= JHJlc3BvbnNl bmF0YQ== aXNlcnM= IGhhYmxhbmRv IERFVEFJTFM= IHJlZ2Fs w6JtaWNh INCf0YDQuNGH TG9hZHM= VHJlZXM= Y3JpdGVyaW9u IOCyruCzhg== w6dvaXQ= IGhhY2tlZA== IGNhZXI= INi32YjZitmE2Kk= INCw0LzQsA== IElzYWlhaA== IGVqZQ== 6KOk b2tzaQ== L2Jhcg== dXZlcw== IEdvdmVybmFuY2U= 0LXRgtC+0LI= IExhYmVscw== YmFza2V0 4LGA4LCo IFN1Ym1pc3Npb24= w6Np CVJUSE9PSw== 6L6T5Ye6 yZluaQ== IEF1ZmVudA== 4KWN4KSa4KS/4KSu INCx0YPQtw== 4LGB4LCV4LGK 5pyA5L2z IHtb IGN6xYI= INii2q8= IGTDqWZpYw== IM68zq4= 2YLYp9iv INC60L7QvNC/0LvQtdC60YI= KGhvcml6b250YWw= Q3Rs YnVkcw== IOCkuOClgeCksOClgQ== LnRlcm0= PFRlc3Q= IFJWQQ== IGNvbWJpZW4= UnVzc2lhbg== IOWkqg== IEhERA== IOaZrg== IHNlcm1pdHNpYXE= IGV4aXN0YQ== SU9ORQ== IFN1cnJleQ== PT09PT09PQ== INCx0YPQu9KT0LDQvQ== IENvbnZlbmllbnQ= cmVzc2FudA== w6FuZW8= IGluaWNpYXRpdmFz IG5vcm1hdGl2YQ== IOCmq+Cmv+CmsA== IFNhYmI= IO2ajOyCrA== INmF2YLYp9mF IENvbGxlY3RpdmU= Y29tcGxldGlvbg== a2xhcg== INGI0LDQuQ== RnJhbmM= KScpOwo= INep15bXlA== IHJpbms= IOCkruCli+CkrOCkvuCkh+Cksg== R0xJU0g= S2Vz IOCmieCmquCmnOCnh+CmsuCmvg== IOCknOCkv+CkqOCljeCkuQ== INin2YTZiNiz IMSBcg== 4Lax4LeK4Lax4Lea IGJhaGFnaQ== 0LjQstC+ YWdpYW4= IHJhdG8= IOCmieCmpuCnjeCmpw== IGxlaWR0 IGRvY2VudGVz IOCkmuCksuCkvg== IGphY2twb3Rz IOCkieCkpOCljeCkuA== IGZhY3R1YWw= IEdyb3VwZQ== IOuptA== dmxv XEFic3RyYWN0 IOCuqOCuvuCuqeCvjQ== YmVlbg== IGFpZ2U= 4oCd44CR44CQ INCf0LA= dmluY2U= IHNuYWtlcw== bm9pc2U= IGNsZWFubGluZXNz INC30LDQv9C40YHQuA== IE1hbGNvbG0= QW1tbw== 4LCk4LGN4LC4 IEV0aQ== INC70LDQuQ== 0L3QsNC70LA= IOGDkuGDkOGDm+GDneGDoQ== IGFsaW1lbnRhaXJl IHdvbmluZ2Vu IGdjaGFy YXRlc3Q= IEdsb3Nz cHR1bmU= YXJtZXM= 0LDQu9GM0L3QsA== IGVudGRlY2tlbg== IEPDs3Jkb2Jh c2Fucw== 4YOg4YOd4YOV IHByenlnb3Q= TG91aXM= Lnhsc3g= IGJsb2VtZW4= KCgpKQo= 4YOQ4YOX4YOV4YOY4YOh IHBvcmNlbnRhamU= IExpc2Jvbg== LXNhbGU= IOGDoeGDmOGDouGDp+GDlQ== 6Im+ dGh1cw== 4LCu4LGN 5Zu+5Yy6 IHBpbm5lZA== X1ZBUklBQkxF w7xtw7x6 YXp1cmU= IHZlcm1pdHQ= IHTGsMahbmc= ZGZ1bmRpbmc= UnVucw== YmVuaGF2bg== IOCkruCljOCknOClguCkpg== w5psdA== amF4 IHZ1bGF2 5a6P 0Y7Rhw== IGthbnNlbg== IGTDvG7DvcOk IM6xzrk= 0YDRi9GF 2LjZh9in2LE= INCx0L7Qu9C10LfQvdC4 IOGDkuGDkOGDm+GDneGDlQ== IG5qaWE= IEdyb3M= RGV0YWw= IGdycGM= IHRhcmVmYQ== 7LqQ IGRpc2NvbnRpbnVlZA== 4La64LeP bGp1xI0= IHRvbWJl IGJlYW50d29ydA== dGltZXpvbmU= IOCouOCpgQ== LnNpZ25hbA== INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjw== IHJldGlyaW5n IGRlcnJvdGE= IHlrc2k= INC60L7QuA== IHJlYWxpemFjacOzbg== IOmTgQ== IFNlcmVu IOC0ruC1geC0qA== INC/0YDQvtGG0LXRgdGB0LA= INiy2YrYqg== IHJlZ3M= aGFkb3c= aGxhYg== xKdh b3ZpY2g= W3VzZXI= IHBvcnTDqWU= T1ZB IG1vaW5kcmU= 0q/QvdKv0L0= INGA0YvRhQ== IGFnYmVnYmU= Z2V6YQ== INCx0L7Qs9Cw0YI= 6Z2S5bm0 ZXRoeWxlbmU= X2N2 IMOtc2w= IHNlbmhvcg== c2zDom4= cmVjaHRl bGppdm8= IE3EgQ== INC80LDRig== LnBj IHByaXNlcg== IGRlc2F5 0YzQtdCy IGltcG9zaW5n X1NFUklBTA== IHF1ZXM= IOyYpOuKmA== IE1hbmRlbGE= INeS16LXldeV15DXqNef INGA06/Qtw== 2q/Ysdin2YU= 2YbYr9qv2KfZhg== LU1lbg== 4KS44KWN4KSV4KS+4KSw INGC0LjQsQ== IEltYW5h IHJpcXVlemE= IEFwcHJlY2k= KGJhcg== LnJhdGU= 4Liq4Lix4LiV 0LDQu9C+0LI= c2Rr IFRpZXJl IHNpY2hlcmxpY2g= ZWRpZG8= IFNNQUxM IOC4nOC4peC4muC4reC4pQ== Vk4= IG91Ymxp 15nXmdeg15nXnQ== IHRhc2tlZA== IFN0bw== b21ldGhpbmc= ZXNlbWE= TGVkZ2Vy X1BhcmFtcw== b3RoZXJtYWw= IGZhcHQ= b3VmbA== LXNlbnNpdGl2ZQ== zrzPhs+Jzr3OsQ== bWV0cmljYWw= IOyXrO2WiQ== R0FJTg== IFN3YWw= IGVyZmFyaW5n aWJsZW1lbnRl IGV4cG9ydGVy 4KuH4Kq3 0YPQudGB0YLQsA== dMOg INi12K3Yqg== LnNob3J0Y3V0cw== LCcn VGV4dHM= IHdoYWthcg== IHNpZmF0 INK70LDQt9C40YA= IHN0YXJ0ZXQ= IE7hu5lp IGVzdHVkaWFudGU= 5paw5aKe INC+0YfQuNGB0YI= INin2YTYp9is2KrZhdin2LnZitip J8OpbmVyZ2ll IFZyaWo= IHLDqXBhcmF0aW9u RElZ a2Vucw== X1NP Q29udGV4dHM= IHRoaWVm INC70LjQvQ== IEZsdXNo IHTJmXLJmWZpbmQ= w6FjaW8= 2LHZitio2Kk= CQkJCSAgICAg YWxhbXU= IERpeA== 4Ka+4KeO IE1lc21v IHTDrW1h 4LOD4LKm IEJvYXJkcw== IOCmuOCmruCmuOCnjeCmrw== X0lERU5USUZJRVI= IMW+aXZvdGE= IHNvbGRlcg== INin2YbYqti42KfZhQ== IG11bms= IHRpamRlbg== IGNhZmV0ZXI= YWNoZGFkaA== IGtsaW1hYXQ= IHByZXNpZGVudHM= INCx0YvRhtGM IEJsb3c= IGRpcmVpdGE= dmluZGVu w6lnw6k= INC70LDQs9C10YA= IGZyw61v IGdjZA== IOaXpeacnw== 4bmt IFdoZXJlYXM= INGD0LTQsNC70L7RgdGM d2V5bw== IG1tb2ph INin2YTYp9i1 0LrRltGF 15XXp9eZ150= IGJlaGFuZGVsdA== IG9mZnNlYXNvbg== IHrDrXNr LmxvY2Fscw== IOaIkOW5tA== IHF14bqjbg== LlJlcXVpcmVk 15LXlA== d2VsaWprcw== INGX0Zc= IHNhbGxlcw== Z2xvbWVy IE5TSW50ZWdlcg== Y2huaXR0ZW4= Q29ycG9yYXRl dWFt IG9weg== IGV4dHJlbW8= dMSx 15nXm9eV15w= INGI05nRgA== IHBlbGxldHM= LlBFUk0= INC00LjQt9Cw0LnQvQ== IHRvcGFy X2RiZw== IOG7jWthbg== Z2V2ZXJz YWdpbm4= INKb0LDRgtCw0YDQu9C40ps= amVn IGNvbnNjacOqbmNpYQ== IGRlZGljYWRh IG1hYWx0 IFJob2Rlcw== YWxhcm0= INGD0YfQsA== 772v IGRpZ2l0YWxlcw== IGludm9raW5n 16TXmden IERvbWluaWNhbg== IGJlcmVpZA== INGB0LjQs9C90LDQuw== IEJlcmxpbmVy IGxhc3M= IExpYnI= INC80L7Rgg== OnR5cGU= 0LjRgtC10LvRjNC90YvQvA== IGJlbGVn T1RQ 0LXRgtGC0LXRgA== IHNlbnRlbmNpYQ== YXpvbGU= INC80YPQvdCw0YHQuNCy ZGF0ZW4= IOCkquCkv+CkpOCkvg== IFRlc3Rlcg== INin2YTZhdi62LHYqA== TnVy IGluY2x1aWRv 5Lil6YeN IHZvbGQ= dWRhbA== 0LXQudC00ZY= 15LXqNeq LkNvbW1lbnQ= 0LDQvdGH LWVueWU= IScK INin2YTYpdis IG1lbGs= Ymxpaw== VU1B LmF0dHJz IHJlY3VlcmRh ICcnCgo= IGV2YWM= X3RpY2s= 0Ko= IG1lcmdpbmc= IHPDqGw= IEJvY2E= IG1hamVzdGlj IGhlYXJpbmdz QmVr QnJpZWY= IERVSQ== acO6 IHJpZ2h0ZW91c25lc3M= IHltcA== aW9uZ296aQ== IiwiIiwi IHNsYXRlZA== IHF1aXp6ZXM= w6lzaWU= IGTDqWJhdA== IOC2kg== cmVjaXBlcw== IEVkaXRpbmc= IEtvbW1lbnRhcmU= IGVkaW4= YXphbmE= aWVyw61h IERPQ1VNRU5U IGZhdGhlcidz IGNsw61uaWNh UVVFU1RJT04= 0LDQvNGL0Lc= IGxhY2tlZA== IHN1cHJh IHZlbnU= ZmVhdA== INWj1azVrdWh1b7VuNaA 6aKc6Imy IHNhbmRhbHM= YXRpcmE= IHBpb25lZXJpbmc= IHRlbmTDqm5jaWE= IHBvc2l0aWU= dmFsZw== INGB0YTQtdGA0LU= LWFjaA== INin2YTYtNmF2LM= 4K6/4K6v4K6/4K6p4K+N 5o6l5Y+X IOW9qeelnuS6iemcuOaAjuS5iOagtw== YXJlaWw= IGludHJpZ3VlZA== ICIkKA== IGhhYnQ= IE1vcmVubw== zrvOtc+Fz4TOsQ== IEdvbWV6 IGdvc3Rhcmlh IjoKCg== Lk9ic2VydmFibGU= Y3VudGVnbg== 15nXmdeg16I= IOCyuOCzh+CytQ== csO6 4KuA4Kqo4KuA IG9iamVr IOGDm+GDmOGDnOGDmOGDoeGDog== IGNpZXJ0YQ== 7IqI IGFtYmF5ZQ== IFJ1c3NpYW5z UExVUw== INiv2LHYp9iz2Kk= Z2Vud29vcmQ= IHJlc2lzdMOqbmNpYQ== IOuQmOuKlA== LkRpcmVjdGlvbg== IGJyaXRhZG9y IGJpc2N1aXRz ZGlhbG9ncw== 2YXZiNin2YQ= IGF1dGhvcml0YXRpdmU= IGJlc3VjaGVu w6RsbGV0 IOOCvw== IOuwqeusuA== IHB1bnRh b2dhcg== 0LLQsNGA0Lg= 4YCx4YCb IEJhbmRz IHRyYW5zbWl0dGVy IGRlZmF1bHRkaWN0 IENvbm5lY3Rpb25z IE1vag== INin2LDYpw== 0LXQutGC0LXRgA== b3JsdWdpdA== IHNuYXBz IOOCkg== INGB0YLRg9C/ aXNtYW4= 7ZuI IGVpZ2h0ZWVu IGdyZWVkeQ== IHByb2R1Yw== am9uZW4= IGhhYmFyaQ== IMSR4bqjbQ== IGJ1bGE= IG5naGnhu4Fu IHNrZXRjaGVz IM6TzrnOsQ== IHVudGVyc2NoaWVkbGljaA== U1RSQUNU Y29tcGFnbg== IG1hdGVyeQ== 4Kq/4Kqv4Kqy INin2YTZgdmE2LPYt9mK2YbZig== IFZvbHRhZ2U= IHLDqWZsw6ljaA== IFdvaGw= Z3Vt 4KeD4Ka34KeN4Kaf4Ka/ RWNobw== IHNlcGFyYXRlcw== LuC4qA== L21v b3ZhbsOp 5ZWG5Lia INCf0LDQsg== IGdlc3R1cmVz 4KSR R0lORw== 4KS+4KSv4KWA CXRyZWU= VHJhaW5lcg== 0LPRi9C70LA= 4YCZ4YC54YC4 INCg0YPRgdC40Y8= INCY0LDRgNCw LEs= UmVmcmVzaGluZw== 44CC5LiA V2Vp VHJ5aW5n X2FyZ3VtZW50cw== IElkaQ== IEtvbW11bmlrYXRpb24= IGNvbnNpZGVyYW5kbw== 5YWN6LS55Lq65oiQ LXF1YXJ0ZXI= IG9yaWdpbmFsZXM= X25i IENPVU4= IHLDqXNlcnZl Jw0KDQo= INWs1avVttWl1aw= YWtoc3Rhbg== X1RBQw== IE5nbw== IG5lZ2F0aXZh QXNzaW0= IHlheMWfxLE= IFBhbmRvcmE= LWF0dA== TE9ORw== IGNydWlzaW5n INW01aHWgNW0 IGFncmFkZWNlcg== INeY16k= IGVyaMOkbHRsaWNo 16LXmQ== IEVneQ== 0YbRjg== INin2YTZhdiz2YTZhdmK2YY= 0L7QsdGA Lklnbm9yZQ== IHNlcmlrYWxp amFkYQ== w65sZQ== T01FTQ== IEludmVzdGluZw== 5a6B5biC IGjhuqFu X2NhbGM= IGF1Z21lbnRlZA== IOyLoOyyrQ== IEN1cmU= IOCkh+Ckgg== IM+Dz4XOvA== LXBvdW5k IHByZXN0YXI= IGdpb2Nv IGRlam8= IGNvbmRvbA== QW5hbHl6ZQ== IHJlc3BlY3Rlcg== 4LWC4LSx 5Y2B5YWr INGE0LDRgQ== IGVuamU= 7JmU IOC4hOC4o+C4seC5ieC4hw== 4Li14Lii4LiU INGB0YLRgNCw0Yg= IGZyYXVkZQ== IGNhcnRyaWRnZXM= IExpbmll dXN5 INGB0L7Rh9C10YI= IFNpbGVudA== 5aSH55So572R5Z2A IGxpZmVzdHlsZXM= LnVud3JhcA== IFVOSVZFUlM= IGlycmVzcG9ucw== IENpdHI= J2FjdA== INmF2LnYp9i0 IHN1YmRpdg== IEJUUw== INCy0L7Qt9Cy IHNuYXJ0 IHZvZWRpbmc= VGl0 IGJpem5lcw== acSH IHBsYXllcidz IGF1dMOzbg== Jz57 J2FjdGlvbg== IFN0b3I= YcSH 64OQ eXc= 2YLYqtmE b2NvZGVy 2KjYsdin2YY= IGVucm9s IFNjcmVlbnM= LW1hbmFnZW1lbnQ= b3JlZmVycmVy IGZpZGVs bGVndW5n aXN0ZW5jaWE= IGljaW5n 15HXldem IHZpZWxmw6RsdA== IOCkueCkvuCkuA== 4Ka/4KaV4KeH4Kaf IHBvZXM= IGNodeG6qW4= IGRpa2Vu IM6/z4DOv86vzr8= ZWxlbmc= 4KSU4KSw INWW IGTDqWNvcmF0aW9u TUlD c3N0cmVhbQ== LWZhdA== bGl0dGxl IEdlZWs= IOCwquCxjeCwsOCwvuCwsA== INC+0LHRgNCw0YLQuNGC0YzRgdGP INii2r7Zig== aGV0aGU= IENyb3A= IGx1bWU= Y29udGVu IEFnb3N0bw== amFsbw== 15TXnNeZ15o= ZXRzZW5n QEZpbmQ= INin2YTYudiv IGVjbGlwc2U= w7Zsa2VydW5n 4oCcTXk= INC+0YHQvtCx0LXQvdC90L7RgdGC0Lg= LXNlcmllcw== INGG0LXQu9C4 IEpV R2l0aHVi INGB0LjQu9GL IGNvbm9zYw== 5ZCK IHBhcmFsbGU= ZWxpa2U= IHBhY2g= IHppZWtlbmh1aXM= fV57 LnR5cA== IHB1bmN0dWF0aW9u INGB0YLQuNC70Yw= IGFuaGFuZA== INC80LDQs9Cw0LfQuNC90LA= IG9iY2hvZA== IGxhd2Z1bA== 4Liq4Liy4Lih emV3 INiq2LnYsdi2 X2luZg== cml0ZXJpZW4= IHJldHVy IOGegg== IGhvb2w= IHRlZGlvdXM= INit2LXZhA== b21iZXI= X21hbmFnZW1lbnQ= IEhvbWV3b3Jr IHR1dHQ= IGRpZXJvbg== IHdvcmttYW5zaGlw 2YTbjNiq IG11dGFudA== cXVpc2l0b3M= KG5vdGlmaWNhdGlvbg== IHJhcHBybw== IHJlYnVpbGRpbmc= IEthZmZlZQ== 2obZig== KGludg== INin2YTZgdmG2KfZhg== Kyspew== IHbDpGjDpG4= 4KuA4Kqv zrrOsc65 2LTZitin2KE= IGhvyrtvbQ== amVudA== IG5vdG9y IOC5geC4oeC4mQ== 4LGH4LCC4LCm4LGB4LCV4LGB IOC0ruC0pOC1jeC0uOC0sA== INiq2YjZgdmK2LE= IHVsb25n IGNhdXNhbA== IGhvbW9sb2c= bGVlcw== IGNhcGFjaWRhZGVz 5ZG1 IHVyaW5hcnk= dWNhbHk= U3VnZ2VzdGlvbnM= IERhbmNpbmc= IGxvb3Nlbg== IFZlbnVl 2LXYqNit dHRldA== aXRlc2k= LnBvc3Rz Kk4= IEdSRUVO IEFudGU= IOCkhuCkgQ== IHByb2JsZW1s dmVyc2E= IFsnJyw= IHBhcXVldGU= IGFuemVpZ2Vu VmVlbA== 4KeA4Kak4KeH Lmphdg== 4YOU4YOU4YOR4YOY Z2FkYQ== eXl2c3A= 16bXlQ== IHByaXJv INC00LLRg9C8 VGlqZGVucw== Lmp1c3Q= aWFr IFBhdGhz IEluZmx1 4K+N4K6a4K+N4K6a 44GE44KE ZXR0ZWw= IHN0YW5kcG9pbnQ= U0NSSVBU IERJTQ== IHRhZGE= ZWtldA== 2YTZitmD INin2YTYrNmK2LHZig== IOuLtQ== 4LmB4LiI LnZpc3VhbA== LmludmFsaWQ= IHN1Y2Vz bmdl IOCuh+CusQ== IFRpZmZhbnk= IHpvdXQ= INCh0LXQs9C+0LTQvdGP bWVsb24= VkVMT1A= IG9rcw== IGNvaW5jaWRl IGtpZWs= IG1hZHJ1Z2FkYQ== IFNQT1JU aWFpcmU= INiq2LnYqtio2LE= INmF2K3Yt9ip KFBlcnNvbg== ICcuLg== 5aWU IGRyYXN0aWM= 5LiL6L295a6J6KOF5Yiw c2V0ZQ== b3dlbHM= IGNoaWZmcmU= IHF1ZXN0cw== IOG7jWThu4s= dW5hbmc= LmdlbmVyYXRvcg== INmC2YbYp9ip UHJvY2Vk 4KaZ4KeN4KaV 44CL44CC 4oCZaW52ZXN0 IGFjdHVhbGVz IMW+w6Fk IHRpbGJha2U= V29ya2Vycw== IG1pbWlj X2N1c3RvbWl6ZQ== 5b6h 4LGA4LC44LGN IE9jY2FzaW9u IHN1aXZhbnRl IG9xYQ== IOqyjOyLnA== YXRlYXU= IFBlYXJzb24= IGp1c3Rpw6dh INeq157XmdeT IEN1c2g= IOCkuOCkvuCkuQ== IGFzc2lnaWlubmc= IOCquOCrjeCqlQ== Y2Fwcw== IEhldw== IHR5Y2tlcg== IHdvb2R3b3JraW5n IGxsYW1hcg== aWpza2k= dW5pY29kZQ== cmVzc29y Y2Vh INCb0LXQvQ== w6Rtw6Ru IGJlbmlnbg== INin2YTYt9i52KfZhQ== IGloYW55 IGFzc29j XT17 CUNvbnNvbGU= L3ZuZA== INmC2YjYqQ== KGJlZ2lu IG1iYWxpbWJhbGk= KG1lc2g= IHJlaXo= IOyynA== TmlldA== IGRhY2E= UGF0aWVudHM= INGP0Lk= IE9waW5pb24= d2VuZHVuZ2Vu 7Iqo aXRpdmE= CVBhZ2U= IGtob+G6o25n b2VkZA== IFRyaXR1cmFkb3Jh IGl0aWxpemU= IGVzdHJlbGxh QVNJ ZXJzYQ== 0LfQtA== IGdla2F1ZnQ= SURY YXdha2U= IE1pZXQ= IEdyZWVuZQ== IOebiA== LU9u 4KSw4KWN4KSk4KWA IGhlaWw= 4bmb aWRlcHJlc3M= 0YPQstCw0ZrQtQ== cGlwZWxpbmU= IG3hu6lj 5LmF5LmF54Ot INee15XXqQ== IGJpZQ== Ym9vbQ== IGFsdW1ubw== IG1hdGVyaWFsZQ== INmF2YbYt9mC2Yc= IGludGVybmFjaW9uYWlz VmVjdG9ycw== IGNvbXBldGnDp8Ojbw== X0RBVEFCQVNF 4Z624Z6T4Z+L IGludW5k IHJldmVudXM= aXRpYmE= cmVsc2Vu IHZ2 TWVzc2VuZ2Vy INeZ15DXqA== xaFubw== Qlg= w61jaWU= IHN1bWJlcg== IGNvcGlh 0LXRgNCw0LvRjA== IGNvbnN0cmFpbmVk 4KeB4Ka2 IFBhc3Nwb3J0 RFRE e307Cg== IOWPrw== IG1vc3RyYW5kbw== L3N5cw== ZWx0ZW4= INmK2YQ= 4LOB4LKk4LON4LKk4LK/4LKm4LOG dmFh 0LjRgNC+0LLQutCw INin2YTZgti2 4Ki/4Kmx Q2hlZg== 5pif5pyf w6RsZnRl IHNodXR0aW5n INC10YDQtdC6 w7NuYQ== RnVsbHNjcmVlbg== IHNwZWNqYWw= IFRheQ== IHRyYW5zcG9ydGVy 4oCZYWNoYXQ= INin2YTYudmF2LE= 4LmB4LiV4LmI dGVtcG9yYXJ5 zrbOtc65 IFNhYXI= IGZhcm1hYw== 576K 15DXpA== 56aP5Yip6KeG6aKR IGluaGVyZW50bHk= IFdpbGxvdw== IGVmaWNpZW5jaWE= IOCmruCmvuCmnQ== Y291cnQ= IHNlcXVlbGl6ZQ== IHBpdW0= Uk9J INis2YTYrw== 4YOj4YOh4YOi IChe IFBlaw== dXJsYXI= LlZlcnQ= IHRhcHBlZA== acSNbm8= R2FyYWdl IHphaGxyZWljaGVu b21wb2s= IGNvZWY= 546p5a62 IHNwYWNlY3JhZnQ= xaFu 0LXRjw== Y29uc3RpdHV0aW9u IHNhbWxl INC40LPRgNC+0LLRi9C1 SUJN a3VuZ2Fu bGFuZGVy IFBobm9t IHJvY2U= Oz8+PC8= IG9wZXJhw6fDtWVz INC00LXQu9Cw0Y7Rgg== IOCqhuCqnA== IOC0teC1huC0s+C1jeC0sw== 5qOS IExlaXN1cmU= IHN0ZWln IOuzkQ== 0Y3RgNGL bGVidA== OnJpZ2h0 IE5hZHU= QXNpZGU= IGt0w7NyeW0= RU5UQQ== IO+/pQ== IGVudHNjaGllZGVu IGVsc8WR IHZvbHVwdGF0ZW0= ZmlsZXBhdGg= dHJpZGdl IHZsdWNodA== X2Nt INin2YTYp9iq2LXYp9mE IFByZXBhcmF0aW9u IGRvdWxldXI= IFNpemVz IHRhcm4= Lmdsb2I= bGVyYQ== 4Lir4Liy IGJsb29tcw== IGNvbnRyYWN0dWFs LmFyZ21heA== INei15g= 0YfQtdGA0LA= IGFuZ2th R3J1 0LjRj9GF Q29tcG9zZQ== 4LSa4LSw INC60LLQsNC70Lg= 5YeM Lm9ubGluZQ== IOCmoeCnh+CmuOCnjeCmlQ== IGFhbmtvb3A= IEVjaw== IGzEgWtvdQ== eWd5bnk= IEZhY3RvcnM= YXRnZXM= Z2xvYg== LlN0cnVjdA== L2RvY3VtZW50 INWl1bbVqQ== IExG IEFjdGl2YXRl IG13YW5h INOp0YLQutKv0Lc= 2LnYp9iv 0LvQtdGC0LLQvtGA 15nXldeX15M= IHTDtnI= INCz0Y3RgtCw0LPQsA== IHRlbnRz 4oCN4LS2 2LHZgdi5 IGFsbG9jYXRvcg== YXJmaQ== IFN1YnNl INmB2YjYqg== ZXJtYW5u 6L+R5bm05p2l w7Nh 4KS+4KSs4KS/4KSV bsSbasWhw60= bHRr 7ZmU7J207Yq4 INGB0LjQu9Cw IFp1cmljaA== dW50YW1lbnQ= 6YqA IGR1cGxpY2F0ZWQ= IGvDqXQ= SElORw== bWFuxLFu IG1pc2nDs24= IHVpdHpvbmRlcg== IGd1aWE= 2KfYsdiq24w= IGFjaGE= IGhhbmdlbg== IG1hdGVu IHBlcm1pdGlkbw== IGFscA== IHByaXZpbGVnaQ== IG9zdg== bm9uZw== IFRvZGE= INC00L7QvNCw0YjQvdC40YU= IOC0quC1jeC0sOC0tg== OicsCg== INec15TXqdeq IEhhbm5vdmVy IFRha2Vu INC/0L7RgtC+0Ls= INC00LDQv9Cw0Lw= IFRlcnJhaW4= INC20LDQu9C/0Ys= IHNlY3JldGFyaW8= IGJldmVpbGln PScl INCy0LI= IGVybGF1YnQ= PWNvbmZpZw== 4LGG4LCC4LCf4LGN bG96ZQ== IGFuYWx5emVy dXJyaWNhbmVz X0VORFBPSU5U IHR1Ymln 77+9Pw== X3JvbGVz 2KfZhNil IMO8YmVyemV1Z3Q= 4YOb4YOQ4YOq IG9pbHk= INmG2LXZgQ== X0NIQU5HRUQ= INWw1aHVpg== 6LKh X3F1b3Rl IHRhYWtr INin2YXYsdmI2LI= IGRhenpsaW5n 0YvSm9OZ IOuqhw== 5b+N ZW1wZXI= INGI0YPQuw== IHLDqXN6 IG5ldGlq INeU16nXnA== 0YDQvtCy0LDRgtGM IGltb25n Y2lqYQ== IFNsZWV2ZQ== 5a+S IEluZGljYXRvcg== 5LqU5pyI5am35am3 IEJhdWVy 7IOB7ZKI 0JjQog== IGNvbnNlZ3VpZG8= LmRlcXVldWU= IFBhcGllcg== 2KfZhNi6 IHRpc3N1 ZXN0dQ== yZlzaW7JmQ== Y29kaW5n xbxp PmAK dW5uZXE= IHBhbmNha2Vz IGlyZQ== IHRic3A= 5YyX5Lqs6LWb6L2mcGs= b3Vzcw== Q2FudA== IEJvb3N0ZXI= IGNpcmN1cw== IGxha2g= IOCquOCqueCqv+CqpA== IG1pYW4= IG1haXJl IGluZm9ybWluZw== 1aHVutWh1oDVodWv Rm9yZ2U= IOGDoeGDkOGDo+GDmeGDlOGDlw== IGRldGFpbmVk IHB1bm8= 4YOU4YOW4YOU 5Zyo57q/6KeC55yL6KeG6aKR IHLDqWdpb25z IGZvcmdlZA== V2hvbGU= 4YOg4YOd4YOS IOq/iA== LlJFQUQ= INWk1brWgA== dW5rdGlvbg== aW1lcnM= IGJldGFhbGQ= aW9yZQ== IOCmpuCmvuCnnw== IFdvcmxkcw== bGF5cw== IGlsbWFu IHNuZ2k= Lm51bGw= b2Rpbg== IFNlcmlrYWxp IHRhxZ8= IGhldXRpZ2Vu IHN3ZWV0cw== IOWBmg== IG9wZXJhdGl2bw== IENhcnJpZQ== 77yh INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1 IOCkreClguCkruCkv+CkleCkvg== INee15PXldeR16g= IFp1c2No X3BsYWlu 4bq/Yw== IHRpZWfEp3U= 5pep6aSQ5Yqg55uf ZWVlZQ== IGhvcnJpZmlj 0JjQnQ== Q29tcGFydA== IEJlZWY= IFZhbXBpcmU= RXZ0 IHByb2R1aXJl 0L7RgdC+0YQ= 5Zev KGNyYXRl 5pSv5LuY5a6d IOC0teC0v+C0tw== IFZvZGFmb25l IEF6ZXJiYQ== 2LXYp9i1 X2Np INC+0YHQvdC+0LLQvdC+0Lw= IGRvbG9yZXM= YW1iaXF1ZQ== IHN1aHQ= IE1hcm0= INCx0YvQstCw0LXRgg== INmB2LHZgg== INGD0LrQsNC30LDQvQ== aXpsaWs= 44K244O8 dXRhbWE= IGFsbGFpdA== U2hhcmQ= IGVndw== IE1vYmlsaXR5 IGzDqWd1bWVz 55a+ IO2VmeyDnQ== IEFyeQ== b25kYXM= IC8+LAo= w7pzcw== 0LDQvNC10YI= IGRlY2Fk IOC0teC0v+C0teC0v+C0pw== IGJ1b25n zrXPhM61 IGNvbnRpZ28= IFdE IOuwm+yVhA== IOCytuCzgQ== INC10LM= IENhcmRpZmY= INC60YDQsNGC 5Lmf5piv INeU15vXmQ== IOCyheCypQ== IOCkquClgeCksOClgeCktw== 44G444Gu IOCwuOCwguCwlw== 0JDQvA== IGhhbXdl IGF1dG9yaWRhZA== W0M= IGNoYXVkaQ== IGtvbWVudA== 4LmH4LiH IOS4kw== IGdsaW0= bmVzdHk= aW5lc2k= KX07Cg== IGJpbG0= IOCqpuCrhw== dWln Q09VTg== IENoaWxp KGNhdA== IHBsYXN0aWs= IEJlcm5pZQ== IGhhYWw= IOyigA== cHJvbg== IGdlbmVyYWxlcw== IE51bWVyb3Vz IOCuleCvgeCunw== INC30LDSow== IGtyZWdlbg== IOCkquClgeCktw== fG1heA== Z2VzdW5k IHLJmQ== Lkdvb2dsZQ== 5Zu95Lqn6Ieq5ouN IOWItg== Pj4+Pj4+Pj4= R2V3 INK706nQutKv0LzQuNGC0Lg= IHBlcnJvcw== aWRkaQ== LmFm IHZlcmRhZGVybw== IHN0YWxl IGlubWF0ZXM= SHc= 4LWK4LS0 IGtpamt0 6Kyb 4KS+4KSH4KSP4KSV4KWL aWRlbnRlcw== IGFkbWlyZWQ= 6LeR54uX5Zu+ ZXNzYXJ5 4Kqq4KuC4Kqw4KuN4Kqj IG1lbnNhZ2Vucw== LXN3aXRjaA== IGRpc3RyaWJ1acOnw6Nv INC30LDRgNCw 0L7RgdGC0LXQuQ== ZmluZQ== 4oCNCgo= 0YPQtNGL0qM= IG5ldXRyb24= IG5vbmxpbmVhcg== IHByb2hpYml0 IOCmruCng+CmpOCnjeCmr+CngQ== INGA0L7QvNCw0L0= YnJhbg== IOCuleCuv+CusA== 5Zau IOCkruCkvuCksOCljeCklw== IE5hdmlkYWQ= YXJpYW0= CQkJCQkJICA= a2FubnRlbg== INGB0YPRidC1 IGLDoA== INCd0LXRgg== IGZpc2k= UHJlc3Q= IGZsYQ== xI1ub3N0 4KeN4Kaj LkhlYWRlcnM= IFNVUFBPUlQ= 77ya5Lit5Zu9 IHJvenA= IGPDoW5jZXI= LWJ1c2luZXNz INCy0YvQv9GD0YHQutCw IOCuquCviuCusA== IGJlcmVpa3Q= VVJJVFk= IELDrQ== IG1hY2hpbg== 1aHVt9Wt 0L7QstC+0LU= LXJlc29sdXRpb24= VG9ycmVudA== Z2VzZXR6 IExpdnJl QkFU IGRvbmFy IM6tzr3Osc69 acW+ IOC4h+C4suC4mQ== IENvbG9uaWFs 4oCZb20= X18pCgo= 4KS44KSu4KWN4KSu aWtrZXJ0 IGFycXVpdm9z zr7Ot8+C LXdl dWV2ZXM= Lm1hcg== 65Oc66W8 4K6u4K+H LdCz0L4= IOCkl+CksOClh+CksA== IOG7pW3hu6U= Ynl0ZXI= IGJvbGV6bmk= S2VlcGluZw== IHfDvG5zY2hlbg== INCh0YLQvg== IElucHV0cw== IOCwheCwuA== IGNlcnJhcg== IHN1cmdlb25z IGNvbnN0YQ== INiq2YbYuNmK2YE= IOCyuOCyv+CyqA== 44Kx44O844K5 IHN2b2p1 VG9nZXRoZXI= 5pWw5o2u5bqT IHVubG9hZA== IE9ha3M= b2dyYXBoaXF1ZQ== IOebm+Wkpw== 0pPRi9C90LTQsA== IOGDmOGDlw== 2KfYqtq+ SW5zcGVjdGlvbg== 2KjZiti2 ICJdIjsK S3c= X2dvb2Q= IHRvdG9udQ== IGtyb3o= IEpvcmQ= 4LK44LON4LK4 0YPQvNC4 ICgKCg== ISkuCgo= YnVpbHRpbg== IGNlZg== IGdlbWVlbnRlbg== aGFzaWxrYW4= IENoaWNr 4LmA4LiB4Lih4Liq4LmM IFBMQU4= IExvdmVy IGZhc2Vz IGltYWxp IE5vZWw= IHJvbXA= IGNsYXJpZmljYXRpb24= IGFnaWxpdHk= X0FsbA== 2Y7Zig== IG1lbnVuag== IEluamVjdGlvbg== IGtpc3Npbmc= U8Oz UHJvZmVzc2lvbg== b3NzZQ== IFJGSUQ= dWN1cnNhbA== IHJlY29uc3RydQ== IEtyaXN0ZW4= Pz8K 2YHZitip IGtvc3RldA== IFl1YW4= IHJlbGV2YW50ZXM= VmFsZQ== IGluY29tZXM= 4Kau4Kao4KeN4Kak4KeN4Kaw4KeA IGhlc2l0YXRpb24= IHN0ZXJu IGNsb3NldHM= 2ZHZhA== d2FhcmRpZ2U= IEFsZXNz IOCkquClgeCkuOCljeCkpA== 4LmE4LiL4LiV4LmM IFJvY2tz IEhVR0U= IG9jY3VycmVuY2Vz INCa0L4= TWFnbg== IG5lZ2xp INWx1oc= IFBTQQ== LkZhY3Rvcnk= INec16LXqA== 4oCZYWo= aHRvbg== IG5lZGVuaQ== IHDDtg== IGluZWZmZWN0aXZl UGFnaW5n IGRvbWluaW8= ZGRhcg== IHJlbmRlbWVudA== IGFuYXQ= IGRldGU= IFRob3VzYW5kcw== IMOibWJpdG8= INmE2YTYqA== IOecn+S6ug== 7KaY IOCmruCmv+Cmsg== IHBsdXI= IHZvcnN0ZWxsZW4= IGRhdGF0eXBl IHRyYW5xdWlsbw== a2VyZQ== IGV4cHJlc3Nlcw== 2LHZitmD VklERVI= dGhhbG0= 5Y2a5aix5LmQ 2KPZhA== IGVzcXVlbWE= IGZhbWE= IHJ1dGg= IOazlQ== IGxpdHM= IGlzdG9y IG1laXNqZXM= INen16E= xLFuxLF6xLE= VGhvdWdodA== KXsvLw== 6YKE IGFsdGVyYcOnw7Vlcw== IHBvZHN0YXc= 4KWN4KSm4KWI VkFMVUVT IENsYXNzcm9vbQ== IGVlcmxpams= IFJlbGVhc2Vz IGZvbGd0 IGJlbm4= IHNpZ25hZ2U= INS11b0= IEplbGx5 IGJhbmRhcw== IMOpbGlt IFNhbw== IGPDonU= YWhhbGE= IO2L IOuKmA== IGJvb2tsZXQ= IG1ldXI= U3ByaXRlcw== IGFoYXU= IHBlcm1pdGE= 7YS4 fSkKCi8v X2NlbnQ= INCx0YPQu9C+ IEZvcnRuaXRl 0YXRltC0 ZGFucw== INGB0LrQu9Cw LmZhYw== Q2lyY3VsYXI= LmVxbA== IyQ= IHBhdmVtZW50 ZmliZXI= 77yM5b6I 4KqG4Kqk INC40LfQstC10YHRgtC90L4= 4LiZ4LmM4LmC4Lir4Lil4LiU IGvDpg== INix2KTZitip IGthcmhp 2YXYsg== QUxURVI= IOCwleCxgQ== IGRlY29yYXRvcg== IHdhbGxwYXBlcnM= IMOnZcWfaXQ= PEJ1dHRvbg== 4pWR dmFl IGdhbmhvdQ== aW1wZXI= TEFTVA== IHBvc2l0aWVm LmNvbXBpbGVy IGZvcmdldHRpbmc= 4oCUdGhhdA== KEJpdG1hcA== IExlaWRlcg== IHBhZ2thd2FsYQ== IHZ5ZA== IHNlZ3VpbWllbnRv IGFnZ3JlZ2F0ZXM= IHVucGFpZA== Lmxvc3M= U3VybmFtZQ== IE1hZG9ubmE= IOe3qOmbhg== IOGDruGDk+GDlOGDkeGDkA== 77yM55Sx IFBJQw== IFdpbm5pbmc= IGdlbGVnZW5oZWlk YmFyZXI= IGdkamU= IHJvdXRlcnM= IHVuaWZvcm1l Q2FuZA== INWp1b7VodWv1aHVttWr INiv2LHZhdin2YY= IGFzdHJvbG9neQ== IEZhcm1lcg== LkVYSVQ= X3NraXA= INCw0YDQtdC9 INeb15XXnNec IEFndQ== ZW50aWVs IEhheWVz 0LTQsNC90L3Rjw== IE11c3M= IFZhY3V1bQ== 4LmA4LiB4Li04LiU IFJ1bmRl IOWYiQ== IGJpamE= IG1lbmdhbGFtaQ== LWVudHJ5 IOCmleCmsOCngeCmqA== YXp3YQ== IFBUU0Q= cG9ydHVuaXR5 2r7bjNmE IGdsYW1vcm91cw== IG1i4bul IHRlbmRlZA== a2Fk IHNjcmli 4LGI4LCm4LCw4LC+4LCs4LC+4LCm4LGN 4Kqw4Kqo4KuA dmVybmln IGRyYWluZWQ= Ik5v INC/0Y/RgtGM 16DXnQ== ZXNzb2Fz IGVudHNwcmVjaGVuZGVu 17M= IENMRUFS X0VYSVNU IFN5cmFjdXNl IENhYm8= 4LmE4LiZ INGB0YPQvQ== IG1hdWFs IGZhbWlseSdz IGVzdGFjacOzbg== Qmxl IGxsZW5h JV4= KF8p 2YLYp9mF IOCqneCqoQ== aWRlYWw= IG1pdGVpbmFuZGVy YmFzaXM= IGNvbnRpbmdlbnQ= IEphZGk= IGjhu5c= IOGDoeGDkOGDlw== INCw0YHQsA== cGxhYXQ= IGNhZHI= IOCkuOCkruCkvuCkqA== IFRhbWE= Lm1ldA== LXN0YW5kYXJk SU5DVA== IGJ1bGxldGlu IGJvdXRpcXVlcw== RWlnZW4= IGdsZWRl RW1tYQ== IG5heW8= IEJlYXJpbmdz aGx3ZW5p IOunmw== IEVuZ2Vs UVA= w6FjaQ== 74A= INmE2YTYrdi12YjZhA== INeR15nXmQ== 2YbZiNmG INek15DWuNeo IHNjb3Blcw== Rm9s IGxldGhhbA== IGNvb2tz Y2Ftcw== Q29tcG9zZXI= IG51dHQ= IEhlaW1hdA== INmF2LPYptmI2YQ= UmV0dXJuZWQ= IM6yzrE= IHpha2U= 77yM5LuK5bm0 ZGlzb24= aXZ5 LmNlbGxz Il0pCgo= 0LrRg9C00LA= aGV0aWNhbGx5 IHlhbG7EsXo= IG9wdGllcw== IOCkruCli+Cknw== IGZsdWpv IHBwbQ== INix2YjYug== IHZlaWw= INC30L3QsNGH0LXQvdC40Y8= CgkJCQo= INC60LDRgdCw0LXRgtGB0Y8= YXlheQ== INi62Yjamtiq dmnDpA== RmFjdHVyYQ== CWN1cnI= aXPDqWVz 2KfbjNmK LWdyYW5k 2K3Yp9ih IG5lcGhldw== 6K+t6KiA 4oCcTw== IEdld2Vy 24zYr9uM bGl1 IEtyaWVn V2hpdGVzcGFjZQ== 0L7RgtCy0L7RgA== IHNrw7M= ZWxsYW5lb3Vz CXN0cmVhbQ== LkltYWdlcw== aWNoZWw= IGFudGlz c2VpdHM= 4LWH4LS0 4Kiw4Kio YWNoZWxvcnM= IGRvcnM= IGtoYQ== YXRpZ2k= IOGDkOGDpuGDnOGDmOGDqOGDnA== 4K614K6/4K6y4K+N IFNhbmR3aWNo VG9uZQ== IEZMQUc= IGJhcmJhcg== INC30L3QsNGF0L7QtA== IHNpZG9v ZXRpdA== IG1vdXNzZQ== 5LiK5biC b2pl IGx1bWluZQ== INKb0LXRgtC40Lw= IGhpc3RvcmlhbnM= KE9u IGhpZ2h3YXlz xa9zb2I= IE5vd2FkYXlz IHBpbmdh IG1pZ2xpb3I= IHBvbGlzaQ== IHDDqw== IEJldHJpZWJz IE1HTQ== IFBSQQ== IGtvbWVudGFy IHBvc2luZw== IOCqtuCqleCriw== 6I2h xbx5dGs= X3Nwcml0ZQ== IE1TQw== INmI2KrZhg== Lm1ldGFtb2RlbA== aW5zdHJ1bWVudA== X2luc3RhbmNlcw== 0YLRltC6 SlU= IGNhw61kYQ== IHNraWxsZXQ= eXBhc3M= IGVudGdlZ2Vu INGH0YDQtdC3 IEVudG9uY2Vz IGhqw6Zs L3BsdWdpbg== IE1hdGNoZXI= IGZmdA== IOCqmOCqo+Cqvg== 5LuV5LqL INin2YTYtdmI2LHYqQ== IFZhbmQ= LnZu IGjDunM= IExvcmU= IHBlcmls IGFuYWJvbGlj IHN0YWlyY2FzZQ== bmVpZ2hib3I= LmphdmFzY3JpcHQ= YW1lbGU= JQ0K INij2LHYqA== YW5nb3M= IGplZG5vbQ== IOGDkOGDpuGDkOGDoA== INC70YPRh9GI0LjRhQ== IEZsaWdodHM= aXN0aXNjaGVu ICoqKioqKioqKioqKioqKioqKioqKioqKg== IGZlcsOw IHlhc2U= LCE= aWVuaW5n INGN0LQ= INC00LXQudGB0YLQstC40Lk= INmF2LTaqdmE2KfYqg== UHVuag== WE1MTG9hZGVy INin2YTYrdmD2YU= bW9nZWxpams= YWTEsQ== LnByb2Q= IOCmreCmvuCmtw== IHJlZ2VuZXJhdGlvbg== QVNQ INC00L7Qu9C70LDRgNC+0LI= IG5lxaF0bw== IE1hdGVyaWFsaWVu IG9mdGE= dGpl IG9sc3Vu LmRhc2hib2FyZA== SVJJ CWVs IOGDl+GDpeGDm+GDmOGDlw== IEJpZWJlcg== 2KrYsdin2YU= YW5pbWF0aW9ucw== INmK2LXZhA== IGR1bmdlb24= 1bbVpdWs1bjVvg== 0LjQt9C40YDQvtCy0LDQvQ== REVGSU5FRA== IGNhdmVz IGdyZW5z IOGDo+GDmeGDkOGDnA== WVQ= INCw0LLQs9GD0YHRgtCw KGNvbXBhbnk= IGlzdGVhY2g= 4LiV4Liy4Lih KSkpOw== 4KSu4KS/4KSV IG5vaA== IGTDoGk= L2ZpcmU= IHdhamVu c3RhYW4= IG90dGVu IGFjY29tcGFnbmVy cXVlcnF1ZQ== 5LmL5YmN IOC5hOC4oeC5iOC4oeC4tQ== X2ludGVycnVwdA== IGFwYWl4b24= bGlrZWQ= SW50ZXJhY3Rvcg== 6KeE5qih IHByb2dldHRv 1bjWgNWo 4YOV4YOU4YOj4YOa 24zYs9uS 2LHZgdiq IHJ5Y2g= IHN0ZW1tZW4= IG1pcmFy ZW1pbmc= XFR5cGU= IFdpY2s= 0L3QuNC50LM= IOCohuCoquCoow== 4KS+4KSH4KSV L2Jyb3dzZXI= IGFpbcOp IDw8PA== 4Lil4LiH4LiX4Li44LiZ JG5ldw== 7qQ= IHNqdWs= YWJiYQ== IOaVsOaNrg== 0LvRjdGF IGxpbmd1YWdlbQ== IGdhc3Ryb2ludGVzdGluYWw= LmR5bmFtaWM= 4Kam4KeH4Ka2 aWxpc2U= cnVm 0LDRgtC60L7Qsg== SWRlbnRpZmllcnM= dXBvcw== IOCwpOCxig== KCcr 0LjQvdGH0Lg= 6Z2S6Z2S6Z2S IE1ldGFscw== yrtpYQ== IGRpZmVyZW5jaWFz X3JlcG9zaXRvcnk= cXVlcmE= LndlZWs= IGhpa3V2YQ== IGJlZ2VsZWlkaW5n X0JBUg== IOCqm+CrgeCqgg== IGplb3BhcmQ= w6lyYXRldXI= P8K7 IERMTA== IFNlZW4= INin2YTZhdmG2KrYrA== IE5hcG9sZW9u IGFuY2hv aWNpcGFudA== IOCkuOCkguCkmg== 0LXQstC40LQ= IGN1ZXM= VGlsbA== IHJlaW52ZW50 X2xy aXNzdXM= Iiwo JeOAgQ== 0rY= 4LSs4LWN OmFsb2Fk IOCmj+Cmlw== 0LLQtdC5 2YrZhdmC INi12YjYqA== 2q/ZhA== IFNvcGhpYQ== IGRpYXJpYW1lbnRl 2YjZiA== X3ppcA== YWxsb2NhdGVk 5Lq65Lq655yL cm91dmV6 54Ku X3BhY2thZ2Vz IOiNow== 2YTbjNqp KERi IEFyYm9y 4LWH4LSz INqp24zZiNmG2qnbgQ== IG1vdmltZW50b3M= IFN1cHBvcnRz INin2YbZgtmE2KfYqA== IFR1bWJscg== INC/0L7RgdC70LXQtNC90LjQtQ== IHdpZWx1 IEh1bGw= IHZlcmZvbA== IOmiqOWQueOBkeOBsOWQjeeEoeOBlw== IOCquOCrgg== LlByb3A= INCy0LLQvtC0 IFRhcmE= IFNpbW1vbnM= c3NwaWVs IHVpdHN0cg== LVRlYW0= 4LS44LSC ZXRyYXM= IOCuh+CusOCvgeCuqOCvjeCupOCvgQ== IOqwgOyguA== IHZpbmE= cHBp INec16TXqA== QlVS 15LXoA== emllaHVuZ3M= IGdlbmc= IHZlcnNjaGlsbGVu KGFjdGlvbnM= Il09Ig== IOCoquCosA== dXBs X2xibA== aWNrw6E= 0LHRgNC4 LkZvcm1hdHRpbmc= w7NzaXRvcw== bGV2YW5jZQ== IGluY2x1aQ== IG5vdMOtY2lh RXRoZXI= QXNzaWduYWJsZQ== IG7hu68= IGphcG9uZXM= IG5hdWdodHk= aWpza2U= IGZpbm5lcg== IGtp4buDbQ== X1JD 5rKf INeg15DXmg== INC+0LfQvdCw0YfQsNC10YI= IEZpcnN0bHk= INin2YTZhNis2YbYqQ== TGFkeQ== IHNwZWxlcg== IHF1ZWVy INeo16LXkw== IGVudmVycw== IGVzdGV2ZQ== 44Oo IGVsZW5jbw== IGFudGlnbw== IFhWSUk= IGN1bG8= 4LK44LON4LKf4LON IGVzcGVyYW56YQ== IHByZXZhaWxpbmc= aXNldXI= X2RpZ2l0cw== Oi4KCg== IHN0cmFuZHM= IGZvdXJuaXNzZXVy INKz0LDQtw== LT5fX19f 0Ig= INi52YTbjNuB IGfDtnJu aW5zZW4= IHRla2Vt IHRhbmk= 65Ov INC/0L7QstC10YA= Rm9ybWF0dGluZw== IHdvcnQ= LW1pZGk= IOCyuOCyguCymA== IGJvYmw= 0ZvQsA== IGR1ZW4= aXB1bg== Lm1hbmFnZW1lbnQ= KAoK IHByZWFjaGluZw== d3VyZWc= Y2tub3dsZWQ= dWxsYXI= IFVTUA== L2FydGljbGVz T0JT IGFubA== IHZ1cmRlcg== IHRhbmdv IFJTVg== w6tuw6s= IHdt 4oOj ruGDlOGDk+GDkOGDleGDkOGDkw== IGRlc2VzcGVy IGR1cGxleA== 4LKV4LKw4LOB IOCkhuCkj+CkleCliw== INC90LDRgdGC0L7Rj9GJ0LXQtQ== LU1vYmlsZQ== LVBhY2lmaWM= IOCkmuClgeCkleClhw== IHRyb3Bo SG9zdHM= UE5H IGNhdGhvbGlj X2JpdG1hcA== 0LDQvdGL0Y8= 5bKz IFJlZ2FyZHM= Q290 IHByZXZpYW1lbnRl c3R2 IFdXSUk= IGFqYW4= w7xzZQ== IFBpc2M= IGZsb3R0 IGV4YWN0ZW1lbnQ= 0LDQu9Cw0YHRjw== IHByb3ZlZWRvcg== IHRzZXY= INmF2LPYrdmI2YI= Ow0NCg== INC+0YLQvdC+0YjQtdC90LjQuA== IFR1bmU= INCx0LDSk9C00LDRgA== IGFsaW1lbnRhcg== amly 57S55LuL 5p2x5Lqs IFZpY2VudGU= IGNvbmZ1c2U= INC70Y7QtNGP0Lw= IEJlbGdpc2NoZQ== IHByw6lzZW50cw== IGRpc2VudA== INeX15PXqQ== IGdiaWc= IGVtYm9zcw== IGFjdGU= IGV1cm9ww6llbg== INGB0LLQvtGX bWVkZQ== fT4NCg== IGxpY2U= 157Xotef 6KuW5aOH IHRpa2Fp IEhJUw== IHJlcHJpc2U= IOCkpOCljeCksA== 4Kym 0LLQvtC5 IHVwZQ== 5rKS IGRpZmZlcmluZw== INGF0q/QvQ== INeV15XXoteo X0RSSVZFUg== 4La74Lar ZW1wYXRhbg== INC00YPQvNCw0Y4= Tno= cmFkYQ== X2FyY2hpdmU= IFJ1c3NpZQ== IHBvY2hl IOCuleCviuCus+CvjeCusw== IGRyb29t IOCkhuCkpuClh+Cktg== INC40pc= bmFudHM= b2ds LW1pZGRsZQ== IGJyYWluc3Rvcm0= 15TXnNea IHZzdA== IHJlZGVuZW4= IC8vLy8vLy8vLy8vLy8vLy8vLw== INC80LDRgdGB0LjQsg== IHByZXNlbnRhbg== IHBpZXJjaW5n QmFi IHBvZGVyZXM= IGpvb2tzdWw= IOCmquCnjeCmsOCmvuCnnw== INep16k= aXRlcmF0ZQ== b3Bhbm8= IOCkteCkv+CkqA== b2ZpZQ== LnBsdXM= INmI2KfaqQ== dW5pZGFk aXNlbHQ= SVRUTEU= IENydXM= 4KSy4KSC IGNvbmZl IHN0ZXJlb3R5cGVz b2NhdGlvbnM= IGthb3Jl 0LjRmNCw IHByaW5jaXBhbHM= IGRyYWlucw== 0Y/QsdCy0LA= IGlsbGE= IG1hw650cmU= X2hpbnQ= IOq1sA== 5paw55qE 5YiG5Lqr5Yiw IGVxdWlwZXM= IG1vZG9z Iik9PQ== IGJvc3Rl 4Kqi LkZsb3c= 0YLQtdGA0LPTmQ== IFNwZWNpZnk= IHZlbG8= b2phcw== QWJzb2x1dGVseQ== INmF2LXYr9ix LW9mZnM= 44G+44GX44Gm IHRvcm5lbw== LWNvcg== 4LSQ IGNvbmRpY2lvbg== IGhpaw== IGJhcmR6aWVq TUFTSw== IERpcmVjdGl2ZQ== IGZyYcOu INC/0YPRgtC10YjQtQ== IGZpbw== IEFsdGVycw== IGhhcnRl IFZpZXQ= LkRpY3Rpb25hcnk= IEV4YWN0bHk= X0ZJTg== IGJlbGE= 5pa55L6/ IGFwcm92ZWl0YXI= KGNhcA== IGVuZGVhdm9ycw== IFBhcmFuw6E= IOqwmeydtA== LnNpZw== LmVzdA== 0LDRgdGL0Lc= IGRodQ== 5rWZ5rGf IG92ZXJlZW4= IGRvdm9sag== IHXEjWluaw== X2RlZmF1bHRz IGludGVydmlld2luZw== a2tlbA== IG1ldHJl IHtf IO2aqOqzvA== SW5zdGl0dXQ= IEFsZXhpcw== 4YOU4YOc4YOi4YOY IGluZmx1ZW5jaWE= 5YWB6K64 4Lie4Lij4Liw IOCmrOCmm+CmsOCnh+CmsA== 4LK14LOH 6I6J INqG2Kc= IENocm9uaWNsZQ== YXBwdA== INmB2YjZhg== IGluaWM= X0FycmF5 cmVhcg== INC/0LXRgNC10LY= IOCuteCusOCvgeCuruCvjQ== IERBUw== ZWNha2U= 5rKB IERldmlscw== KGJvdA== IGRpemVuZG8= e30u LmltcmVhZA== IGRoYW0= IOCkl+CkvuCkguCkp+ClgA== IExvdmVk X2R5bmFtaWM= IG5pY2Vy INCj0YE= IHNhY2s= IOCkreCkvuCkt+Ckvg== 4LeD4LeP L2dhbWU= eWFhbg== dmlubg== IOCknOCkv+CksuCljeCksuCkvg== IHJvbGxlcnM= ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== IGRvc3TEmXA= IHZpYnJhdG9y 4LCq4LGN4LCq4LGB4LCh4LGB IGZpc3M= YW50aGVt IGluZGlxdcOp IOCkteCkqA== 0LvQtdC90L3Qvg== IGFubWVsZA== IGrDpGhy IOGDmeGDneGDnOGDmQ== KENvbnZlcnQ= INin2YTYt9ix2YrZgg== YWdt IEthc3M= INC90LDSmw== 2YLYsdij IGVyesOkaGx0 INC40L3QsNGH0LU= INWw1aHVvtWh1oQ= INGI0LDSs9GA INC60LXRgNOZ0Lo= IGhvdGVsbA== IERhcsO8YmVy cmVlbWVudHM= IC8vfQoK 6KmV5L6h IE1ha2V1cA== 4LK44LON4LKV INeQ15nXoNeV IFBBU1NXT1JE IHByaXQ= IGp1cm9z IGxlc2lvbg== IFZhbml0eQ== IGh1aXQ= IG9zb2J5 INek1rzXqNeQ1rg= IG5lY2VzYXJpYXM= IG1va28= 0LnRgQ== Y2lhdXg= aW1icmE= 2LPYqtiu2K/Zhdip 5rOo5piO b25nZXph IOyXsOqysA== IEhpbnQ= IGVuZHVyZWQ= IHNvZnJl Q3JlYXRvcnM= IGxpc3Rhcw== IFNpcA== KGRlZnVu Il0pLg== xYLEhWN6 IGhpdHRh w7NsaWNv IENvbW1hbmRz UmVwdWJsaWM= 1aHVpNWr1oA= INee16LXmA== IGhudWI= IGV2ZW50dWVlbA== IGdyaWRz CUNyZWF0ZQ== IFByb2pla3Rl IGh1YmJ5 LmNyb3Nz IHVwdGFrZQ== cG9ubw== IHZlcm1lbGQ= 4LSz4LWB4LSf4LWG CWVudHJ5 4LSV4LWN4LSV4LSC IGNhcmJvbm8= CQkgICAgICAgICAgICAgICA= IGtvbnNlcg== IOConOCovuCogg== RmlnaHQ= 2K/Yp9i02Ko= YXJjaGl0ZWN0dXJl IEZpbm5pc2g= eHI= IHZhbG9yZQ== IENsYXVkaWE= IOKAqw== IOWptw== IOCyrOCyv+CynOCzhg== w6lyaWV1cmVz INGA0LXQuw== IOWutg== IOC0qOC1iw== IGFyb21hcw== IENvcm53YWxs QWdyZWVtZW50 KHN0bXQ= LdGH 4YOd4YOj4YM= IG5ueQ== JCw= IHN0aWdtYQ== 5Lq65L2T IHN3aW5naW5n a3VuZGlnZQ== IEdyYWRpZW50 IHRhbmdhdGE= IGV4ZW1wbGFyeQ== 4LiV4Liz IGVzdGFibGlzaGVz QmF0aHJvb20= IFJlZnVnZQ== ZWhvdmE= b2JhY3Rlcg== IGVydXB0 IGNvdW5zZWxsaW5n IOC0quC0sOC0v+C0tuC1i+C0pw== IGhhcmVrZXQ= anVudG8= VnRibA== cmllcnQ= INC80LDQu9GM IHN5bmVz Imlu dW90 INGB0YvQuQ== Z2dlcg== QWNjZWxlcmF0aW9u 4LS/4LSV4LWN4LSV4LS+4LW7 0YPQvNC10YLRgtGW0Lo= ZGJo 4LmL X1BBQ0tFVA== X2R1 INGD0LzQtdGA YmFpeG8= ZWdlbA== IGxpcHN0aWNr IHNvb3JsdQ== IG1pa2ls IEJJTw== IFNpbW9uZQ== TGlxdWlk IGluZnVzaW9u ntOY0JA= IGV0YWhp IOCooQ== IEt1d2FpdA== IHNsYWNodG8= IEBfOwo= YWRkb24= IHNpY2h0 IE1vaQ== IHF1ZW50ZQ== LWxlZw== IGZpY3Q= 5ZyG aG9uaQ== IEFyYml0cg== IHNlcmlhbGl6YXRpb24= INWq1bjVstW41b7WgNWk LmNhbGVuZGFy IGxpdmVsbG8= aXR0dXQ= INiz2LHYqA== IFBvbXBl ZGF1ZXI= INC60LXQt9C00LU= 4piGCgo= IEFsb25zbw== INOp0YLQtQ== dGFpZW50 IGdyYWRlbg== IOuGjQ== INCe0J7Qng== IGl2eQ== IEFyZW4= IHBpbGxhcg== IOCyquCzjeCysOCylQ== aXphbmE= IHByb2Jp IOGDo+GDlg== IHJhZGlhbnQ= 0LvQtdC00ZY= IHRhY2g= aWRoaQ== IGFic29sdXRh w7NtaWNv 4YOd4YOq4YOu IGdoag== dWNpw7M= YWxpaQ== IGNhcm5hdg== IGNvbsOn 54A= dWVudGE= IOGDm+GDmOGDmg== IG1haXNoYQ== IOC4geC4o+C4sA== IGN5YW4= ZmFybQ== IE51Zw== IGJ1cnlv IHF1ZWxz 5om+5Yiw IENk IE1K IHNhdWTDoXZlbA== IM6xz4XPhM6s IHNlY29uZGVz INC90LDQutC+0L0= 4LCs4LGN4LCs LkluY2x1ZGU= Zml4dHVyZXM= IEFubGFnZQ== IOCkquCksOClh+Cktg== 5pWZ5biI L25wbQ== IHJvYm8= YXRhbmdh IE1pc3NjaGllbg== INeX15k= IG5pw7Fh IEZ1dHVyZXM= INC+0LvQuNC8 IOWm IHNlY2E= 0Y/RidC40LU= IHdheg== IFZhaQ== INGB0L3QtQ== xKtt Q29tYmluZWQ= aWNvbG8= IGVuY2Vycg== CWNvbXBvbmVudA== IGFtYWc= IHJlYWdl IHdvcm1z IGRpc3Bvc2nDp8Ojbw== IHZheHQ= ZWNhbWF0YW4= S1U= 07fRjA== IG5vdGljaW5n KQ0KLy8= IOCmnOCmvuCmqOCmv+Cnnw== 0L7Qv9C10YDQsA== INOp0L3QtA== b2x1bHU= IEVuZHM= IGVyYWlsbA== 4LWC4LSf4LWG IGJpeXU= IERldGVjdGl2ZQ== IFZlcnRyYWc= S2F0ZQ== 0LHQuNGA0LDRgtGM IFVuaWZpZWQ= IEV2ZWw= a2Vk X3JlcGVhdA== 4KqX4KuB IENocm9uaWNsZXM= d2Fubw== IGNvbXBpbA== 4YGC4YGA Q2hlY2twb2ludA== IOC0uOC1geC0sA== Jyk8Lw== YWthbmFrYQ== 0q/Sr9C70Y3RhQ== IGVuZ2FnZXM= INC/0LDQtNCw IGRpc3R1cmJlZA== IHBhZ2VhYmxl IOCkteClh+CkrOCkuA== IOCkuOCkruCljeCkrOCkqOCljeCkpw== INC30YDQtdC90LjRjw== RVJQ 4KS+4KSZ IHDDqWRhZ29n 7Iux IHJhbW8= ZG9udA== IGRlbW9ncmFwaGljcw== IGdldGE= 5ZeO IENvbmZlcg== 57WM6aiT IGRlY2xhcmVz VFhU IGZvbGdlbg== 7IWo IMSNYXN1 4LCV4LGN4LCV4LGB4LC1 LmJp w6ptZW1lbnQ= 4LiW4Lin INGB0YPQsdGK 2YjYsdiz ZmlsZXN5c3RlbQ== aXJlbW9z IG5hZGFs IGjDpG5lbg== IGFkdmFudGFnZW91cw== IEZhZGU= IEJlcmdlcg== IGdlYm91d2Q= IGthc3Vz X1NRTA== Ym9i T05FUw== aXRlbGo= IENyw6k= IGhlcGF0aXRpcw== IFJhdGg= IGVzc2VudGk= IGRpc2NvdXJhZ2Vk Lm9yaWVudGF0aW9u IGdvZGRlc3M= X3JlZ2V4 IHN0b3J5Ym9hcmQ= IOCypOCyvuCysuCzguCylQ== UG90ZW50aWFs IGlnbGVzaWFz bWFzY2hpbmU= bMOkZ2c= IGhlZXQ= cm93bmluZw== IFRyb25n 15XXmdej w7tu IGltbWlra29vcnQ= Y29uY2VwdA== 24fYtA== aGliaXRpb24= Z210 INGD0LrRgw== INGB0YLQsNGC0YPRgQ== IENocmlzdGk= IOCwquCwqA== INGE0LDQudC7 IHBvc2Vl SEVMUA== IMO9YWdkYcO9 IHNwYWNlZA== ZmVjdGVk IHBhcnRv IOymneqwgA== IHRlcnJlc3Q= 4YOU4YOc4YOh 4LSk4LWN4LSk4LSw bmVyZ2llcw== 15fXldeo IG1lbmdldA== 15DXldef INWh1b3VodaB IHJhY2lvbmFs IENvb2xpbmc= INC606nQvA== eG9u IExlYWRz IOC5geC4rQ== 56ix IHN1YnNpZGlhcmllcw== 0LjQvdC+0Lo= L2VwbA== ZmlsYQ== IHRhbGx5 U2NyZWVucw== aW5zcGVjdGlvbg== INC+0L/QtdGA0LDRhtC40Lg= 2YfYp9iv2Kk= IOCmqOCmv+CnsA== CWFzeW5j IGHDsWFkaXI= YW1vdG8= IFN0YWxpbg== IGdyYXNh V3g= IOe7 ZWxpdXM= IHpo 55Cq55Cq QWZyaXF1ZQ== aHJpZg== 2q/bjNix 44CC55uu5YmN b29q b2RuZQ== IHRvcm5l 4Ka+4Kay4Ka/ 5oi0 LlRvb2xraXQ= Y2VudGVz IFhU Lmdlb20= 0LjRj9C70YvSmw== 0YDQsNGG0L7Rng== 44OX44Oq UHJvdGVpbg== 0L3QvtCy0LXQvdC40Y8= IGhlcm1hbm9z IGhveno= IOC4hOC4t+C4mQ== IGNoYXJhY3Rlcml6ZQ== LmV4cGVjdGVk IGNvbnN1bWVz KytdOwo= IEhvc3RlbA== 5Yi25L2c INuB2YjYqtuS X01heA== INWv1aHVvw== LnByb21pc2U= IGt3ZXRz IHBlcm1pc3M= INin2K7YqNin2LE= c2hhZGVy aWVyZW5k 44CC6ICM IGNvbmRpdGlvbmVk TGFt IOCqpuCqv+CqsuCrjeCquQ== IG9jb3JyZXU= X01ldGhvZA== IG1ldGhvZGU= ZWxkbw== aG9law== 2LnZhNmK2YU= LVNlcnZpY2U= IFNlZWRz IHNob3V0aW5n IOWkp+WPkeW/q+S4ieeahA== LlByb3RvY29s IOCmmuCnh+Cmt+CnjeCmn+Cmvg== IEFTTg== IFN0ZWVyaW5n J2VuZw== IHJlY2ljbA== IGlud29uZXJz 4KSz4KWA IGFuY3U= 5oq8 IFBlcm1pc3Npb25z 4YOY4YOc4YOQ4YOc4YOh KHJlbW92ZQ== IENPRA== IHBsdW0= IHNjcmFwZQ== W109 IOC5geC4l+C4h+C4muC4reC4pQ== INWv1bjVuQ== IG9udmVy IG92b2c= IEludGVsbGlnZW50 4Lit4Lix4LiH4LiB4Lik4Lip c2VjdXJlZA== IHBsdW5n 4LmC4Lii aGVzZXM= IGdiYw== IENoaWxkaG9vZA== INKh0LDRgg== IGtpdGFi IGlua2x1c2l2ZQ== IGdldHRlcnM= 4Kqw4KuN4KqV IHZlcmdsZWljaA== INeR15TXnQ== IGdpaHVndQ== LnJlcGVhdA== IG9ibGlnYXRvaXJl 4KqV4KuN4KqV INGB0L7Qs9C70LDRiA== 2YXZhQ== IHJhdGlvbmFsZQ== IGNvbWJ1c3RpYmxl IGJvZGE= IHJpa3RpZ3Q= QWJvcnQ= Pigm IEt1YWxh IGZhyrthbQ== INW01avVu9Wh1abVo9Wh1bXVq9W2 aXR0YWFz IENPUw== IFNjaG9u dGVtcG8= RWdn INWv1aHWgNWl1azVqw== INGI0LDQsNGA w6pjaGVy YW5nZW50 RnJhbWVidWZmZXI= Rm91bmRlcg== 5a6Y5pa5576k RGlzcG9zZQ== w6Juc2l0bw== INeS15XXqA== IHBsYWd1ZQ== INin2YTZgtmK2KfZhQ== LnByZWM= LXNlbWlib2xk YXZvdXJpdGVz IFNlcnI= b2JzZXJ2ZXI= IMOpbGVjdHJvbmlxdWU= IM+Hz4HOt8+DzrnOvM6/z4DOv865 INGA0LXQttC40LzQtQ== 5Y+R6KGM b2RlZ2E= IHPhuq9j S1A= IGZlbmNpbmc= zr3Org== LnJo 4KSw4KWN4KSk4KSu4KS+4KSo RHVhbA== Ymxvb2Q= INC20LDSm9GB0Ys= aWp3ZQ== w7xuZHVuZw== IHZpcmtlbGln cG9r UnNw IE9XTg== IEJyZW1lbg== 44GT44GT Y3Rz IOCqm+Crh+CqsuCrjeCqsg== IEVub3VnaA== 2KfYsdmG2Kk= 546w5Luj X1JFVA== 4LK+4LKv4LK/4LKk4LOB 57WQ5p6c 4LmI4LiH4LiC4Lix4LiZ V2Fs XEZvdW5kYXRpb24= IHNuYWJi INC30LDQutC+0L3QsA== 2KjZitin IHZvaXR1cmVz IGttcw== Lm1j IGVzcXVl IGFlcw== LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= aHly IG1pY3Jvb3JnYW4= S20= IEVucmlxdWU= IGtvcmQ= IGtvbXB1dGVy IHNjYXR0ZXJpbmc= dWl0b3M= aWxpcA== bG9jYWxjdHg= IHdlbGNoZW4= IG11w58= IENGUg== IEV4aXN0aW5n cGljcw== IGVzdGFkdWFs 2LHZhA== dW5pa2E= IOCktuClgeCksOClgeCkhuCkpA== LnBhcmFtZXRlcg== YXR1YW4= IGFremVwdA== IHVpdGdlYnJlaWRl IHJlZG8= X0RJUA== IFZlbG9jaXR5 4Z+B4Z6E X1BsYXllcg== RmFjdG9ycw== KHNpZw== aWxsaWFu INC20LDQsQ== 5q+P5aSp IHBlcmd1bnRhcw== bmdy 0L3QvtC0 bmlwZWc= Ymxlcg== INCx0L7RgQ== ZW1wbG95ZWVz INK1 IOyVhOuemA== IOCwruCwvuCwn+CxjeCwsg== IFNlZ3VyYW7Dp2E= aXJtZXI= IGFtYmFwbw== IF0NCg== LWJhY2tlZA== IHJoYWc= IHdob2xlc29tZQ== WEhS IGlzaW0= INWj1bXVuNaC1bI= IGNvbsOndQ== IHRlYW13b3Jr w7PMow== X1NpemU= 6Jek IGNsdWJlcw== IHByb3Bvc3Rhcw== YXN0b24= INGB0LvQsNCy YWRyZXNzZQ== IGN1c3Vi IEFyY2hpdmVk INC/0YDQvtGE0LjQu9Cw0LrRgtC4 IEhhc3Rh IOC0teC1jeC0r+C0leC1jeC0pOC0rg== IHB1bmlzaGVk 4oCZb3JkcmU= IEdBUg== IG9lcw== INiq2LY= IEZpbmFscw== IHRlZ2Vud29vcmRpZw== 4Z6W4Z64 IGludm9rZXZpcnR1YWw= TWFyc2hhbA== aGFuZ2k= IEFpcmJ1cw== INWw1avVvtWh1bbVpA== X2ZpbmlzaA== SUxB 2YXblQ== ZW5jYW5h 2q/ZiNmG2Yc= IOWNsA== IG7DpGhlcg== 4KSC4KSt 0pnQsNC9 INeV16c= KFVVSUQ= ZWNz IEFuZGVyZQ== IEhlcmJhbA== IGN1bHR1cmFsbHk= IGJldm9s IOiHquaLjQ== W3Zhcg== IG1vdGhlcmJvYXJk YXN0b3M= IOq3gA== IHdhcm5z IHBjcw== YW5kZW5idXJn IOCuteCusOCviA== 157Xqdea 54yq OnNpemU= IGJpZW5lc3Rhcg== INGC0LXRhw== IEdyYW50cw== INmE2qnavg== YXR0ZXJzb24= IEVxdWFsaXR5 INCx0LDSk9GL IGFudWw= KHNwcmludGY= aXRpdXM= 24HYp9ix Y2VsYQ== IEJ1aWxkaW5ncw== INC+0LbQuNC0 IG1lbGFu IHNwaGVyaWNhbA== IHNhYmFiYXJhaGE= REZT IHByb2JhYmxlbWVudGU= TWluaW5n IGZhyrthcA== X2ludG8= Lm5vbmU= IG91dHBhdGllbnQ= KF9fKCc= 0LvQsNGA0LTRiw== IOODrOODh+OCo+ODvOOCuQ== KGZpZA== 6L+Z56eN IOaYr+WQpg== IGRpbWluaXNoZWQ= IGTDqWpldW5lcg== 5ouc bWVldGluZw== IGlnbGVzaWE= IOC5gOC4hOC4o+C4t+C5iOC4reC4hw== IEdhcmRuZXI= 44Op44OD44Kv44OQ44OD44Kv CUlM 0LXQudGB INqF2Yg= ZXNlZW4= INiq2LnZhNmF IHRlc3RpbW9u Ol0pCg== YXRpdmk= bGxsbGxsbGw= INGA0LXQsdC10L3QvtC6 WlM= IHRndA== IGFnaXQ= IFdlbGZhcmU= IGdlcm8= 4KeH4Kaj IFdvbHZlcg== INiv2LHYs9iq RnJvbnRlbmQ= IEthdGhlcmluZQ== IG5vbWVu IGVsw6ljdHJpY2E= IG9ueQ== INmC2YrZhQ== JykiOwo= S2ljaw== 6ZqP552A 6L+5 IOCytuCyvuCyuA== INC90LDSuw== c291cmNlcw== xKluaA== X2FkanVzdA== LWRvbGxhcg== IGNhcnRz 15XXnNeY IGhlZnR5 b2xkYQ== XFByb2R1Y3Q= IOCmrOCniw== INGB0L/RgA== IHR4aHVh INC90LDQstGL Pihf U3RyaWtl 5YWx5ZCM IGNvcnRlcw== INW/1bbVv9Wl1b0= 4Lix4LiZ4LiX INKb0LDQsdGL0Ls= INi02KfZh9iv IG9hc2lz 4Kio4KmA IGJld3Vzc3Q= X2NvbW1hbmRz b2ZpbGU= IFBFT1BMRQ== 54i3 IHJlbGlhYmx5 INmF2LPYp9im2YQ= R3JlZXRpbmdz ZnNt IGZlbsOqdHJl 5Yqp6LWi IGZhbHNjaA== IGJvb3N0cw== IOCkruClgeCkpOCkvuCkrOCkv+CklQ== IG1vdGhlcidz IHZvY2h0 IGNsaW5pY2lhbnM= IOGDm+GDkOGDmA== 2K3Yp9iz 2Kfauw== KOeskQ== IFdhbHNo IE7Dg08= Y2FudGlkYWQ= IOCmleCng+Cmtw== xaFhbnU= IOC4p+C4seC4meC4l+C4teC5iA== INC+0YLRhw== 4LGB4LCs INCw0LzQsNC7 IHBvcnRhcw== IHdzenlzdGtpY2g= IGNsb3N1cmVz IFByZWZlcg== IHpvdmVy VElUTEU= 7KKM IOq1reqwgA== IGRlbW9z IHB1cmdl IENvdXJ0cw== IHN1Z2Fycw== 0LjQsNGC IFdvbmc= 4YOR4YOQ4YOX Il0pLAo= R0FNRQ== IOCkquCljeCksOCkp+CkvuCkqOCkruCkguCkpOCljeCksOClgA== IG95dW5j INC40YHRgtC+0YDQuNGP cXVlc3Rz IOG6uWdi4bq5 IEdhbWI= CW11dGV4 Lyc7Cg== IGJsYXQ= TG9jYWxpemF0aW9u 5LiA6Kan INCz0LjQsQ== 5bGV56S6 4LON4LKq4LKk4LON4LKw YWtpaW4= IEJpYmxpY2Fs IGVuYW1lbA== IGFzdGZlbA== 57eP SmV0enQ= IC8vPC8= INGF0LDQu9GL0qE= IE1o INCy0L7QudC90Ys= LlN1cHByZXNz IHBsZW50 IGhhc3puw6Fs IE1lZGl0YXRpb24= INCY0L3RgtC10YDQvdC10YI= INeU15fXqQ== a2xpaw== IGx1Y3Jv IGZvcmI= INWp1bjVsg== 5piv6LCB IOCkuOCljeCkquCkt+CljeCknw== UEFZ dW5rdWx1 IOCmquCmv+Cmmw== IGJsZXZldA== LXNwZWFraW5n IGZldWlsbGVz LyoqKioqKi8= IG1vbm9j IGdvw70= IHNlaXp1cmVz IOCmheCmqOCngeCmt+CnjeCmoOCmv+CmpA== IOCoieCouQ== IOCqleCqsuCqvuCqlQ== IGltcHJpbWly IOCkpOCkpA== IOS/oQ== IOCqruCri+Cqn+CrgA== VXNlcw== 15PXnw== IGNvbmbDqXJlbmNl IGN1bHRpdmF0ZWQ= 5Yek b25uaQ== IGJ1bnVu IENoYW5jZWxsb3I= UsOpcw== IGvDqXN6 4YCB4YCv Q0xVU0lWRQ== IG1hbWFu IGRpbm9zYXVy X3NlcnY= R29hbHM= IOGDm+GDk+GDkuGDneGDm+GDkOGDoOGDlOGDneGDkQ== IE5ldXRyYWw= SXRhbGlhbg== INmI2LXZiNmE IHN1bms= IGRlcGljdHM= IM+AzrHPgc6/z4U= IOODnQ== cXVhbGl0w6R0 c2hvcnRjdXQ= IE11ZWxsZXI= IFNjaGxvc3M= REVO IERpcHV0 INC40L3QttC10L0= IG1pbmg= IFNsaXA= IG92b20= dGlz 4oCTCgo= IHRow6nDonRyZQ== U09M IGFycml2w6k= IFdvaA== IFBmZQ== IENyb3NzaW5n LnZlcnQ= IG1hcm8= 0JXQog== YWRhYQ== IHByYXQ= IHBvbnRl IOC0ruC1geC0luC1jeC0r+C0rg== 1aXWgNW+ IFByw6RzaWRlbnQ= 0Y7RidC40LzQuA== IHJlZ2lzdA== b3Zza2k= SGVhdnk= IGJvbHNhcw== IE1hdHVyZQ== 5pel6Z+p5Zyo57q/ IGltcHVy INCy0LzQtdGB0YLQvg== IGLDvQ== xJFlcg== Qk9EWQ== IFRSRQ== 1aHWgNW01aHVtg== IEtlbnM= QWxsb2NhdGU= 4Ka/4Kar INC90LDRhNCw0YA= IGdyw6FmaWNv U29ueQ== 5pel6LW3 QU5UTFI= 0LHRg9C7 QXNzZW1ibA== IGtob+G6o24= IHBpbQ== IHRlbGVzYw== z4HPjQ== c29uc3Rlbg== KHJlcG8= VU1C IGVtcGw= INin2YTZg9io w6h5 IGLDtnlsZQ== U2F2 INeo15XXkQ== IG0nbQ== INeQ15XXoNeT15bXoteo 2LTZgdmJ IGNhbGxkYXRh 4oCc5Zub IE5pYWdhcmE= IHRlbnRlcg== IG5hcmVk dW5uYW4= w5k= IHdlbGxpY2h0 IEFhcg== bmlq INCj0Yc= VmVo 0YbQvg== IGthY2hhc+G7iw== IGthaWxhbmdhbg== INC90LXQv9GA0LDQsg== 77yM5pu0 IG3Dqg== INS51bjWgtaA1oTVqw== IHLDqWZsZXhpb24= 6rQ= IHllcm9v IHdvbmE= INin2YTYp9mG2KrYsdmG2Ko= IGRldGVybWluYQ== 5Zad dWplbQ== Q2FkYXN0cm8= Pigo R2V0cw== IOCkuOClgeCkp+CkvuCksA== YW3DqXJpY2E= YmV0aA== 4LKk4LON4LKk4LOB cmFzxLFuZGE= KGpz IEdlc3Rpb24= SGlnaGVzdA== INin2YTYr9mI2LHZig== YmVsdA== 4Ka+4KaC4Ka2 X0RFQ1JFRg== IHBvbmc= IG9yY2hlc3Ry 5YW76ICB IOyhtOyerA== IFBpY2tz LmhpdA== Q20= IGluc3VsYXRlZA== 4LCy4LC/ QW5pbWU= b2xlY3VsZQ== IFNwcmluZ2Vy 44CB44CR44CQ SURM IHNoZXBoZXJk IOyVvA== X211 QWxsYWg= Y2FudA== 4KeH4KaB UG9ydHJhaXQ= 4Ka/4Kay4KeN4Kaq IEV2ZXJ5ZGF5 IERlYWRsaW5l 0L3QuNC7 cmV0cmlldmU= IGNhcm5hdGlvbnM= emFobGVu INCx0LjQtA== IOCwruCwvuCwn+CxjeCwsuCwvuCwoQ== YW1lcmFz 4oCZZW52aXJvbm5lbWVudA== IHJlZW1wbA== INGC0LjQvA== LmNsaWNrZWQ= IFJlaGFiaWxpdGF0aW9u 77+9YQ== IHNhdXM= IGRlc2tz IGJhY2tsaW5rcw== LmpxdWVyeQ== IFN0YWJpbA== IHBhdHJpbQ== KGZs INWi1aHVttWh1a8= ZW50ZXVlcg== cmVzZXJ2ZQ== IG1vdGVs YWNjZXNzaWJsZQ== cGFybw== 6aWt INWv1aHWgNaH1bjWgA== ZWR3YQ== IM61zrzPgA== IMS8 INW81aHVptW0 IHBvbWVu L3JlYWQ= IE11dHVhbA== 4LaC4Lac 4Kuq b25uZXVy 2YPYqtmI2KjYsQ== INit2KfYttix IGFhdHM= 776e ZWNpZG8= IGJhcmNv INKX05nQvA== IEJpYmxpb3RlY2E= IHNjcmV3ZWQ= IHJlYQ== IGlzdW1hcWF0aWdpaXNz c2NvcmVz INmK2YbYqg== IFByZW1pbw== IE1heGFtZWQ= Q2hyb20= IOCkleCkv+CkuOCkvuCkqA== 24zYqw== INW31bbVuNaA1bA= INeh15XXkg== ZW5zYWpl IGZqw7Zs IGZvdG9ncmFmaWE= IGlkZW50aWZpYWJsZQ== IG11bXM= 4LiV4Lix4LmJ4LiH VW5zYWZl IOCkj+CkiQ== LmFuYWx5c2lz IGxhdW5jaGVy IGdhYw== IGV0ZXJuaXR5 Pj4oKQ== INGA0LXQuA== IHByb2xpZmlj IHJlZnVuZGVk IMOpdG9u IGJsdXNo IFR3ZWV0cw== IFRJVExF T0dS IHbDtWl2YWQ= IOuMgO2GteuguQ== IGJhbnllcmU= IOqxtOqwlQ== INC80LDRgNC60LXRgg== T0k= IGlza2E= xaFuag== RXN0w6E= IGxvb2dh UmlkZQ== ZXR1cmU= bmRlcnM= L2ZvcnVt IGxha2E= IFN0YW5kb3J0 LWV5ZWQ= IGFjdG9yZXM= IOWkqeWkqeW9qeelqOaYrw== IHBlcnJvcg== IOCkpuCksOCljeCktg== IG90bw== X0NPTU1FTlQ= INiq2KjYr9uM2YQ= X3ByZWY= IGdldmVzdA== IOCqquCrjeCqsOCqruCqvuCqow== IHNlbGVjY2lvbmFy LkNvbm5lY3Q= X2ZhaWx1cmU= INiq24zZhg== IFdFU1Q= IEVtYmVy IGVtaWdy INWs1bjWgtWu VEhSRUFE aWNrZQ== IGJla2VyamE= WXU= xaHDrWNo 5rCR5peP IFBldHJh QklO INW01aXVsg== IOCkheCkguCklQ== INCx0YPRhQ== INCw0L/Qv9Cw0YDQsA== J2hldXJl IGxhbGFraQ== IOCkuOCkpA== IHN5bXBhdGhldGlj 4K6/4K6f4K+N4K6f4K+B LmR0eXBl INiu2KfYt9ix LWNvbW1lbnQ= INCx0LvQuNC20LDQuQ== INC40LDQvQ== IGVzaW1lcmtpa3Np IGNvbnZpY3Rpb25z 4LGB4LCk4LGB4LCC4LCm4LC/ IEJCQg== IFdvcmM= Q29kaW5n IGluY3LDrXZlbA== X1JFTA== IGludGVuc28= IHBq IFRyZW0= dXRzaQ== IGdlbHVr emlnZW4= INWw1aHVs9Wh1a0= IHBlcnVzdA== IGHFn2HEn8Sx IEVzdGFibGlzaGVk Y29ubmVjdG9y Pi0tfX0K IOCwleCxh+CwguCwpuCxjeCwsA== IExhdmE= INmF2LPYpNmI2YQ= INCt0YLQuA== amVybw== LWVuZXJneQ== U2VydmluZw== cmVzYw== X2RldGVjdA== IOCqmuCrguCqguCqnw== 8J+Zjw== IOCkrOCljeCkrw== KHVuaXF1ZQ== IG9ldXZyZQ== dmHDsA== 5rqW INee16DXqg== IGh1c2JhbmRz IHdoaXBwZWQ= IHN5bXBh 5Lqa5rSy6KeG6aKR KCIlLg== IOCkuOCkguCkreCkvuCktQ== IHNww6ljaWZpcXVlcw== IGhpZGVz 5rKJ IFZlcmZhaHJlbg== IFRpcHA= ZWxpbQ== INCa0LDQuw== INCb0LU= X1ZpZXc= IGVzcGHDsW9sZXM= Y3Jhc3Q= IOCmieCmquCmsA== ZGFsYW4= X2ZvbGxvdw== X2NhbQ== SVNL IHTJmXLJmWZpbmTJmW4= IERvcHBlbA== IGludXVz INeU15XXnA== X3BlcmNlbnRhZ2U= IG1vZGVyYXRlZA== ZGlzY29ubmVjdA== Y2hhcmdpbmc= IM+Mz4fOuQ== IGZhyrthYQ== U3RlcGhlbg== Lm9ic2VydmU= IOCkpuClh+CkluCkpOClhw== IGhvZmZl 6LOe 1aXVow== LkNoYXJhY3Rlcg== IGZhY2FkZQ== INeQ15XXng== INCy0L7RgdC/0LjRgg== INio2YrYsQ== INeX16g= IGLDvA== YXDDqQ== IOCmhuCmsOCniw== INmF2Y8= cHJvZHVjZQ== IHPDuHI= 4Lit4LmI4Liy4LiZ4LiC4LmJ4Lit4LiE4Lin4Liy4Lih 4Lit4LmI4Liy4LiZ4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LmA4LiV4LmH4Lih IOGDoeGDkOGDreGDmOGDoOGDnQ== IFN5bXB0b21z 4LmA4Lir4LiV4Li4 0ZnQtQ== eSdz LnBlbmRpbmc= zrTPjg== 4KS+4KSV4KWN4KS3 RGVwZW5kaW5n ICsn IFJlbGF0aW9uc2hpcHM= KGV2ZW50cw== 4KS54KS+ IFdlZWtz IGJhZ28= Y2hlb24= U2xpZGVz IGNvcnJpZW50ZQ== IE9saXZlaXJh IENvbGxlY3Rvcg== IGNpdXRhdA== 0YfQuNGB0Lg= KFFXaWRnZXQ= 2KfYs9in2Ko= IFNhbGxl IHNlbnRpbWVudGFs IGt1eWE= IEV4dGVuc2lvbnM= LCksCg== IGRlc2FmaW9z IEJMVUU= INek15XXoA== INC60LLQsNC0 ZXJleWU= IHNvamE= INC/0L7Qu9GD YXRzaGU= dGVsZWZvbg== IGxpbWl0ZXI= 44CN44Gv IGtpcms= Pn0= IHBpcGVsaW5lcw== LnNlbQ== INCz0LDQtNC+0Z4= INCx0YDQvg== IHVsaWtl YW5zY2g= INW01aHWgNWk1a/VodW21oE= IEJBQg== TkFQ IGJ1aXQ= IHF1aXrDoXM= IGVhZ2VybHk= LkNhcg== VGVz 2KrZh9mF SXNyYWVs IHRhcmlmZg== IFFVSQ== IFJM INio2LPbjNin2LHbjA== IHNwb3VzZXM= IOCmr+CmvuCmkw== IOq4sOuhnQ== TGVhc3Q= IE9saXZpZXI= IG1pZWpzY2U= YXJ0b3M= IFN0cmFz 4Kqo4Kq+4Kqw IGRlZmluaXRpdmFtZW50ZQ== b3JkaW5hcnk= IOGDkeGDoOGDqw== 4oCd44CB R292 4LC/4LCC4LCa4LGH IHByZW1pb3M= 0JDQstGC0L7RgA== c3TJmQ== IEZyYW5rcmVpY2g= IGtpbmRsZQ== QWNjZW50 UHJpbmNpcA== YXJwdXQ= IHVsdGltYQ== U2Vr 4oCZaW1hZ2U= INGC0L7QvdC9 IFdldHRiZXdlcg== IHVsaWM= UHJlcA== IENPUkU= cWRh IGthdHQ= IG13eW4= LXdo 55yL55yL 0LjRhtC4 IEluZXQ= INCw0YHQsNCx IGNvbm8= 7Jy1 IGNhbWJpYQ== IGFjaWRlbnRl YWludGVk Y2FtcG8= 0JzQtdC9 IG9sb2E= YWxueWE= IEFseQ== IGtpZXN0 IE5law== IFNNQVJU 0LjRh9C10YHQutC+0Lw= IGN5bw== 2K7YqNix IGZydXRv YWZ0 QU5EQQ== IGh5Z2llbg== IOihqA== IEVzdGltYXRl Uk9Z IM68zr8= IGNveg== IOGDlOGDmeGDneGDnOGDneGDmw== INCx05nRgNCz05nQvQ== IGNyYXZpbmdz dW5pbHU= IEV4cGVuc2U= IOCwteCwv+CwpuCxjeCwrw== INiu2KfYqg== IHl1cA== IGJ1dHRlcmZsaWVz IGltZ3M= 0LrQtdGB IHRyYWpldA== INWB IGZpZXN0YXM= IHBvcHI= IHNlbHM= IFNlbGFpbg== 2LnYp9mF2YQ= b2RlbQ== IOCyheCysOCzjeCy IG5vcA== IG1haWxz 4oCL4Z6B 4KuA4Kqu4Kq+4KqC bGVjdG9y SGluZGk= IOS4gemmmQ== IHN0dmFyaQ== U3BsYXNo LkluaXRpYWw= IGjhu691 IGhpYg== 5LiN5b6X IGJlcnVm bOG7jXfhu40= RkVBVFVSRQ== IFBSRU1J IGFuYWxvZ3k= INGA0LDRgdGH YXRvaw== CXdpdGg= IHByaXZhdGVu IGJvdXRl b2luZW4= IHBlbnPDqWU= INin2YTYp9it IG1pZ2xpb3Jp INGC0LLQvg== IHJlbGVn INGG0LXQvdGC0YDQsA== cnRs IE9ybg== ZXRqZQ== IEVtZXJhbGQ= IMSnYWZuYQ== INGI0LzQsNGC IHN0YXR1ZXM= b3Ryb24= IEF1ZGllbmNl IEJyb25jb3M= IGhhcnZlc3Rpbmc= IOygleunkA== CVRlc3Q= IGZhc2NpbmF0aW9u IHRyYWZpYw== X0lETEU= IM6yzr8= c2VnbWVudHM= 4LeS4La74LeS IExhYnI= IOCyuOCyguCyuOCzjeCypQ== b3RpZGU= 64aN 0rHRgA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVRJ IFZvdWNoZXI= c3RyZnRpbWU= aW5ncm91cA== INC90LDRgdC10LvQtdC90LjRjw== bWFsxLFkxLFy IFZlZ2E= INC60LjRiNC40LvQuNC6 YW5lZQ== INWs1oA= IOCmpuCngA== SVZJTkc= KXRhYmxl LlVT IEJyaWRl X1BSSUNF IGZhbGxhaXQ= YW5haXM= 65CQ64uk U2lnbmluZw== IHJlY2nDqW4= LWV4YW1wbGU= IGdpZ2FudGVz IHNvdmVyZWlnbnR5 IElsbHVzdHJhdG9y INC40LPRgA== aXN0aW4= TWFsYXk= IGJpdGNvaW5z IOC0quC0puC1jeC0pw== IGdoaQ== 5bCR5aWz X0NPTU1PTg== SW5kZWVk IHZlcm1laWRlbg== IOCwteCwv+Cwtg== a3RvcHM= eW50aGlh IHbFoWVjaA== aXBhbA== IGRlc2lkZXI= INee15vXnA== LXJlcG9ydA== 5LqL5Lia aWdueQ== 16DXldee16fXoQ== IOCkueCkpOCljeCkr+Ckvg== INCR0L7Quw== 0JDSntOY0JA= IHZk IOCmuOCnjeCmqg== IENhYmluZXRz IE1hcmJsZQ== YWdzZQ== IG9uZGVyem9la2Vu IGZpcXVlaQ== dWlh 0J7QlA== IHdlYmRyaXZlcg== X0dhbWU= IOaxh+S4sA== IHRvZXRz RW51bXM= INmB2YrYr9mK2Yg= YWdhbGE= IMOhbHRhbA== IHphdGVu IMW+ZWxl INW01aHVsA== KHByaW50 LkJy IEloZQ== INC00L7RgNC+0LY= IFBK INC00YDRg9Cz0L7QtQ== 5YWt5pyI INC/0L7QtNCy Rmxvd2Vy KG1ldGFkYXRh VW5hdmFpbGFibGU= IFNhbWFudGhh YWxsdA== 2LPZhdin2KE= IHJlbWV0dHJl IGVhdXg= INin2YTZhtmI2Lk= 0LvRgtGC0YvSmw== bm9zaXM= YW5nbGVy IEVwaXNj IGRlc3Rv SW5kdXN0cmlhbA== IEFMV0FZUw== LmZv 0LzQsNCz0LDQtw== LkV4cHJlc3Npb24= INC60L7QvNC/0LDQvdC40Lk= IHJzcw== IM61zrnOtA== IOCkpuCljA== 4YOV4YOQ4YOh IGdsZWljaGU= IExldGE= IEthYnVwYXRlbg== IGVza2k= KGJs 1okK YWxsZW5nZXM= IHNpbXB0 INGB0L7RgdGC0L7Rj9C90LjRjw== 1abVog== IGludHJhYw== K2s= IGhvcnNlcG93ZXI= UHJvdmlkZWQ= IEZJTkFM IGRlbWlzZQ== INec15Y= LkNvbXBhbnk= IFNhcmQ= xaFsaQ== TUFLRQ== INC/0L7Qt9Cy0L7Qu9C40YI= YnVxdWVycXVl IFNIT1A= 5Lu35YC8 INiq2LnZhNmK2YU= IOCkquCljeCksOCkleCljeCksOCkv+Ckr+Ckvg== LmJ1bXA= IGF6w7pjYXI= IENvbmZpcm1hdGlvbg== Oio= IOCqruCqv+CqpOCrjeCqsA== IGtlbmc= Pz4iPgo= IFdvcmtzcGFjZQ== IE1lcnJ5 IEFsYQ== IG1hZ3lhcg== ZXJub3M= INmK2KzYudmE INGC0LDQsdC70LXRgg== RGVxdWU= 4K6+4K6q4K+N4K6q L2luaXQ= 4Kq34KuN4Ko= INiu2KfZhtmH IGrEhQ== IHBob3RvYw== IGxhemVy IGNvbmZsaWN0bw== INGB0LzQvtC20LXRgg== UHRz IHJheWE= IGRpc21hbnQ= LmVqYg== IMO4a29ub20= RGVzaXJlZA== IMOnYXQ= IEJlZ3JpZmY= OwoKLy8v IGNhbGY= 44Os44OT44Ol44O8 LWRpcg== 4LCf4LGN4LCf4LGB IOCkhuCkr+Cli+CknOCkqA== 6bqf c2l4 IFJvc3Q= IEVsZWN0cm8= IExpbmRzYXk= PT09PT09PT09PT09PT09 INC60YrQvA== 15XXktei X0lOVFI= INC/0YDQvtCz0L3QvtC3 IGRp4buFbg== INio2KfZhNiz CVNETA== IGZhYnM= dmVydHI= LmRz IFNQRg== INin24zYs9uS KCItLS0tLS0tLS0tLS0tLS0t aWNoZXM= c3ByYWtlbg== LmRleA== X1RIUk9X IGt1dG9h IGRlY2lzw7Vlcw== IE1peg== Y3JhdGNo IEZpcmVwbGFjZQ== IGdyaW4= 6KeC54K5 IGdtYWls IGNvbmZyb250YXRpb24= Y3VycmVudGx5 IGNoZWdhZGE= XSIsCg== IGZyYWN0aW9ucw== INi22LHYqA== 4Kqt4Kq+4KqX IFBleQ== LndlYmtpdA== YWR1cmFz INGB0L/QvtGB UlVO xYJhdA== IOC0heC0p+C1jeC0r+C0leC1jeC0tw== IGltbWluZW50 4KSq4KS+4KS4 IFlhcA== IOCyheCysuCzjeCysg== w6lyYXV4 IGhhYml0YXRz IFNlbw== INC/0LXRgg== IETDvHNzZWxkb3Jm LgoKCgoKCg== INC/0YDQuNCy0LXQtA== INio2K/Zhg== IOGDqeGDleGDlOGDnOGDoQ== IGxhYm9yZQ== w6F0ZQ== IHRyZW1lbmRvdXNseQ== INmG2Lk= IOCuqOCuv+CuseCvgeCutQ== dWxlbGU= ZXNwcmVzc28= IEtU 4LKX4LK/ IGRldWRh c3RlaWdlcg== IHByb2Zlc3NldXI= IG1lZGlhdG9y IHN1Y2NlZWRz 4oCZaWTDqWU= ZWVyZGU= INC00LXQudGB0YLQstC40LU= IFVyZHU= INC80YPQvA== IGRlcHJlY2k= IGNvbnPDqXF1ZW5jZXM= 4YOU4YOg4YOu IOCkteCkvuCkquCkuA== INC+0LHRgdGD0LY= IEhlbHBmdWw= IGF1ZGl0cw== 15nXm9eY 7ZSE7ZmU7J207Yq4 PC0= bmVjZWRvcg== IHJlZ2lzdHJl IGFzZXNpbg== 4YOf 0YfQtdGB0LrQuNGF ICcuJyw= 5pqC5YGc IEt1Zw== IHJlY29ub2Nlcg== LWZ1bmRlZA== dXlhbg== IOCmh+CmqA== IOCkieCkpuCljeCkr+Cli+Cklw== IGdlZGFjaHRlbg== IGZpcmVmaWdodGVycw== 2ZHYsQ== INGB0YLQstC+0YA= IGZpaW5k QnJhcw== 4Z+K4Z64 5LiA57qn5q+b54mH IHJvcGVz IGVpbGFuZA== IFRyZWF0eQ== IGplZG5vdA== YXR0YW5v IHJvb2Q= IG11bmljaXBhbGVz IGZsZXVy U2hpcG1lbnQ= 5Lq65aOr LeCkhQ== X2Nvcg== 5piO5pif IEFuY2Fr INGA0LXQutC70LA= aWtsZXJp YXR0dW1paw== IOC5guC4muC4meC4seC4qg== IEVyaW5uZXI= 4KuC4Kqk IOGDkuGDmOGDneGDoOGDkuGDmA== YXJnb24= cXVpbmU= IElI IEZvbGdlbg== 4YOQ4YOc4YOZ 05nRgtC605nQvQ== Py4uLg== yJo= 4Z6U4Z+L INin2bnavg== IG5pbG8= X1BhZ2U= IOCmsuCmvuCmrQ== X2Jhbm5lcg== IGJhZ29uZw== LlNjcmlwdA== UHJvdmVlZG9y IHJpZ2h0bHk= IFdoaXRuZXk= IGVsZWN0cm9seQ== 4LmE4LiU4LmJ4LmA4LiH4Li04LiZ4LiI4Lij4Li04LiH VW5hcnk= IGNoZXJpc2hlZA== IGFpZGVz LWhlYXJ0ZWQ= IHNtb2tlcnM= IERldmVsb3Bpbmc= bHVi cGVyY2F5YQ== INC00LjRgNC10LrRgg== X2xp aXBoeQ== UmVhY2hlZA== aWVsaQ== INC+0YHQvdC+0LLQvdGL0YU= 4bupYQ== IEVudW1lcmFibGU= 06nTqdC0 7IKt IHZpY3RpbWVz IHJpY2hlcg== 4KSW4KS+ IFR1eQ== IM+Dzq7OvM61z4HOsQ== IElSUQ== IEtyYWs= w61zaWNh IFFNZXNzYWdl IEtlbGw= IGFyb21hdGlj IGdzdA== INKb0rHRgA== IGhlbWVu IGV1cm9wZWFu LkZlYXR1cmU= X3BvbGw= X2Z0 dW1pbmU= IGVudGVuZHJl QXBhcnRtZW50 IOGDkuGDkOGDlw== INin2YTYs9io2Ko= IENhcm5pdmFs IHNoYWtlcw== IGZpbG1tYWtlcnM= IOCknOCkvuCkj+Ckl+ClgA== IOCmm+Cni+Cmnw== IGFjY2VsZXJhdG9y IOGAmA== IGJhc3Nl xKtn IOCouOCpsA== eGVz Q1JJUFRPUg== IGtpcmk= YW5kZXJpbmc= LWNvbnNjaW91cw== YWN0aXZlbHk= 4LS+4LSt 55uI5Yip IG1pYg== IMOpY29ub21pcXVlcw== 0YDQsNC30LTQvg== 4YOQ4YOg4YOQ4YOZ IG3DunNpY2Fz VXBsb2FkZXI= IOWkqeS4iw== IEJlZMO8cmZu IERhbmtl X21vdmVz INC80LDRgdC70L4= 2LXYp9mB IHBva2llcw== IHN1cnJvdW5kcw== SW50ZXJwb2xhdG9y IGluZHVsZw== IHdhcm10ZQ== 4Kq+4Kqv4Kqm IGF3YWl0cw== TXVy INiy2LE= zIo= IFRlY2hub2xvZ2ll aGFlbA== IGplZG5vc3Q= IGJpcG9sYXI= IEh3eQ== IG1lbWJlcnNoaXBz IERyb3Bib3g= IHByb3ZpbmNpZQ== a2FuaQ== dGFuZ2dhbA== IHBpbGVyc2Fhcg== IEFrdGllbg== IG1pc3VzZQ== INin2YTYo9mE2YU= X0NBTkNFTA== 2KfZitip 4LiB4LmH IEdlbGVnZW5oZWl0 4KSo4KWN4KSm4KWI IGbDtnJldGFn IOydkQ== IOCkquClnQ== bWVub3M= IG1hbmTDrWJ1bGE= IHBhcnRlbmFyaWF0 INCy0YHRgtGA0LXRgg== INWw1aHVtNWh1bHVodW11bY= LS0tLS0tLS0tLS0tLS0tCg== IGJvbGVzdGk= cm9jaA== J106 IGljeW8= IEtvc292 IHJvZw== 6KeE6IyD IG1pbGphcmQ= 6Ieq5Lqn IG9yZXM= IHBhcmxlbWVudA== RmVkZXJhbA== 0L7QstCw0LvQsA== SVRJQ0FM IHN0YWRz IEVuaGFuY2Vk 0LDQvdOh0LA= cXVhcmVz IGV4dMOpcmlldXI= IERTUA== IHdpbGxzdA== 2KjYsdmJ X3N0YXRpb24= IGFsZ2Fl IGNhc2lu c2tpbnM= IElzbw== IOODmQ== 4oCZKQ== IFZQUw== KENhcmQ= 4LS/4LSk4LWN4LSk IGluY3VtYmVudA== IGZsaXBwaW5n 5py65Yi2 0LvQuNGP 6a2C YWJ0YQ== IGZvbGxpYw== IERpcmVrdA== IOC2h+C2reC3kg== IGFtbQ== IGFudW5jaW8= IHJhbWI= 4bum IOCmleCmsOCnjeCmruCmlQ== LXByb2Nlc3M= 1ZA= ZXJ0dW5n c8OhYmFkbw== TEs= IGJyZWFkY3J1bWI= 2LTYqtuB INCf0L7Qug== a2lk xJN0dQ== IHNvbG9z IOCkuOCkruCksOCljeCkpeCkqA== aWxpYXRlZA== KHJldmVyc2U= b2Rlc2s= w6FudG8= IGl6YW8= YWRhdg== IERhdWVy IOCkpOCkvuCkleCkvw== IHZlY2s= Q2l2aWw= aWRpbmU= IE9zdGU= Q0xJ IFdpbGxpZQ== IGVucXVpcmllcw== IOCmquCnjeCmsOCmuA== IERhZsO8cg== 4KWk4oCZ IFNwZWNpZmllcw== 4KS/4KSf4KSw IGxld2U= IGFtYmlndQ== bGljaGtlaXRlbg== 4KSt4KWA4KSw INCy0LXRgdGM0LzQsA== LmFjdGl2YXRl w6lyw6lz IOCuieCus+CvjeCus+CupOCvgQ== LnNlbGVjdG9y LnNzbA== IEdlc3TDo28= INC80LDRgdC70LA= INWw1aHVstW41oDVpA== X2NoYXJnZQ== Q2hvc2Vu Vnk= IHZpb2xhdGluZw== 4Z6O4Z+S4Z4= 2LHZiti52Kk= LWRvd25sb2Fk IOCknOCkteCkvuCkrA== IG7Em2phaw== UFRS IOqyveygnA== 55S4 IGxhbmdrdW5n IG5peg== aWZ0aA== IERlZmluaXRpb25z IEJ1bnVu VGVsZWZvbg== 0Y7RgtGM0YHRjw== YXR1cmFu INin2YTYttix IFJvY2hl LnRvdWNo IOCkpuClguCkuOCksOClgA== 77u/Iw== IOGDm+GDmOGDrA== 4LSV4LWK TXVsdGlwYXJ0 IGdp4buvYQ== cGlsbGFy Zm9ydGF3ZXNvbWU= ICIiKSk7Cg== INC90YPQvdGC0LDQs9C70LDRhQ== Q1JD IGFjaGFy IOCupOCviw== z4TOtc+N dW1hbm4= IENvdmVyZWQ= IOCksOCkueCkpOClhw== IO2ZmOqyvQ== ZmVtYWxl IHd3 Wk9ORQ== 5L2T6aqM6YeR 4YCs4YCE4YC5 4buNd+G7jQ== aW1taWs= IGJsYW5jYQ== IHPDtnlsZQ== 4Ki+4Kic IHN1aXRhYmlsaXR5 IG5ldXJvbG9n dXRlaw== IGN1YWRybw== IEZpZ2h0aW5n IHRvZGRsZXJz cGFybQ== IFNhdWQ= PE15 5qGG X3ZhcmlhbnQ= IFdpdG5lc3M= IHZybG8= 6KO45L2T IG3DtnI= IEtyb24= IGZvb3RzdGVwcw== IHBpcGluZw== 4oCcT3Vy PSgi LXBvcHVw IE1hcnRpbnM= X3N0cmxlbg== INiv24zZhtuS IE9OVQ== INCy0L7Qt9C00YPRhdCw 4KSq4KWN4KSw4KS/4KSv X0NvbnRyb2w= SW5kZXBlbmRlbnQ= IHNjaWVudGlmaXF1ZQ== IHBhcmVjaWRv IGNvbW1lbmNlZA== IFVuaWRhcw== IGJvbGV0 X3R5cA== 15bXnw== IHZlcmxpZXJlbg== cmVhdGVy INC20LXRgtC60ZY= aGFpZA== KGVkaXRvcg== INKb0L7Qtw== IOCyruCyleCzjeCylQ== 0YbQsNGF IGRhbmNlcw== IGRvb3JkYXQ= 0LzQuNC7 INC90LXQstC10YA= QmVlcg== IEJlZGZvcmQ= IOCkmuClgA== bGFuZMSxcg== 64uk66m0 INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5 Xyo= IE5rZQ== IHNoYXJk IGFkYXB0YWJsZQ== INiv2K4= INmD2KfYsQ== IEtJ IGZyaXY= 2KfYptmK2YTZig== IExvZ2ljYWw= LnV0Yw== RmF0YWw= INCa0LDQvQ== b2dyYWQ= IEJ1ZmZldA== IGl5b24= IHRlZ2Vub3Zlcg== INGC0LXQsw== IGVyaW4= INi62KfZhNio IOyLpO2WiQ== IGFubm90YXRlZA== INC+0L3RgNC+ dWRlbA== IHNsaXBwaW5n IG3DvG0= INC70LjQvdC40Lg= IHppY2h0YmFhcg== INeU157XnA== IOCyueCziuCyguCypg== IHRlYXNlcg== IHByb21vw6fDo28= 7ZS9 IGRpcmVu IHPDpWRhbg== X0FEQw== IHJlYWdlcg== IHJ1cA== IENvbmhl IHNvYWtpbmc= IG1vbHRp IGRhZ2VsaWprc2U= INmK2K3Yr9ir IE1hcml0aW1l 2YTZiNmD IOCuleCuvuCuow== 4KeA4KaV U3RyaWRl 6IKW5Lit54m5 IOCqrOCqguCqqOCrhw== IGR1aQ== IOC0ruC1h+C0lg== IGrDvG5n INeU15k= LnZlcmJvc2U= IFN0dWI= IHBhdGVy INC70LDQtw== IOCmtuCnh+Cmlg== IHNoZWthcg== INmF2K/ZhA== IOC3g+C2uA== b3BlbnNvdXJjZQ== X21ldA== IFJlemVwdA== IHJlZ3JldHQ= 5pWZ56iL IGthdGU= 8bk= LkFERA== IOC5geC4pQ== 5pyJ5rKh5pyJ IGplc3Rl IGJhbWJpbmk= IGNpZXJ0b3M= IFJhYmJp IOC4l+C4seC5ieC4hw== 4Lib4Lit4Lij4LmM4LiV IMmb IHN0w6Zy CWRpcg== IGVzcG9z IOCqqOCqv+Cqrw== IHByb2ZpdGU= IHBpZXQ= IGluY2FwYWJsZQ== IHBoeXNpYw== IOWkqeWkqemAgQ== IEthbmFkYQ== TElHSFQ= X3BoaQ== 2Y7ZhQ== 0LXQtNC+0Lw= J2luZm9ybWF0aW9u b2lyw60= IC8qDQo= IE5hbmc= IHJlZGFu IHJlc2lkZW5jZXM= LFwK 0LfRjA== IGFyeg== IGRpc3RyYWN0aW9ucw== IGFiYnJldmk= 4LWN4LSv4LSk IGJlZWxkZW4= QXJ0aHVy IGpha2ll VmVn YcOwaQ== V2Fhcm9t INin2YTYp9mC2KrYtdin2K/Zitip INmF2K/bjNix24zYqg== ZXJ0aW1l INee16nXntei15XXqg== LS0pewo= yZlyZMmZ 44CR44CQ44CB44CR44CQ 0ZHQuQ== IGF2b2lkcw== SVBMRQ== LWJh 66W066m0 KWU= RU5ET1I= LmhleA== 5Lyw aW5zdGFuY2Vz IHZvcmU= X3B0cw== IHDDonRl INC90LDRh9Cw0Ls= INK70YPSow== 4LKw4LK+4LKm IHBoYWthdGhp IHphxaF0 JkM= 4KS/4KSV4KWN4KSw WW91dHViZQ== INGB0LvQvtC20L3Qvg== Uks= KGNvdW50cnk= IHRpZWfEp2Vr LWRlbGF5 4LGB4LCj IHZpZW50bw== INKb0rHRgNGL0Ls= INee15XXkw== XSkKCgo= UGFja2V0cw== IEFpbQ== 4Kaf4Ka/4Kaw 4KqD IGNsYXNzaWZpYw== INin2YTZhdiz2KrYrtiv2YXYqQ== IGNvbG9xdWU= IGxhZ2Vu KEFjY291bnQ= IHNldmVz 5Y+Y5oCB IEPDsw== IOCkuOClh+CktQ== IGhhZ28= Q2lyY3VpdA== dHJpY2E= 4Kmn INGA0LDRgdGC0LXQvdC40Y8= IOCkquCksOClgOCkleCljeCkt+Ckvg== IMSwbg== IHZlcmls IGdyb8OfZXM= INio2YjYr9mG d2FybQ== IGVzdHVw U1BBVEg= IER6 ICgrKw== 0YDQsNC90LU= Ynllbg== IGhvyrtvcA== IFJvYmVydHNvbg== CU8= IOCmleCnjeCmrw== YWduZXQ= IGFnYXQ= 5a6a5LmJ c2hhdw== aW5uYWg= INis2YXZhNmH Jyl9fSI+PC8= IFJleWtq w6lyYWlyZQ== IGvhu7k= IGluZGljw7M= IERvbWlubw== IGNvcnJpZGE= IFBJQg== IGRpc2NyZXQ= IGxlZ2lzbGF0b3Jz 4Z674Z+G IHRyw6RndA== IG1lcmNhdG8= IEtvbnplcHQ= IHN1bW1hcmllcw== LlZlcmlmeQ== IEVTUw== IEd1aWxs INCR0Ys= 77y9 IEFSQ0g= aGVlbHM= aWp2ZW4= d29ya2Vycw== 4YOQ4YOW4YOY CWNvbnRhaW5lcg== IFFU 5LiN5byA IERpc2t1c3Npb24= IHBsdW5nZQ== IGZvcmVuc2lj IGxhbnRlcm4= KEFwaQ== LXNhdmU= IERlY29yYXRpbmc= dXnDsw== 5YWs5YWx INWw1avVtNW21aHVr9Wh1bY= IGNvbnZlcnRpYmxl INCw0LvQtNC4 5rap IEtvbXBldA== aXNlbGE= WEI= 0L3Rg9Cy IE1VQ0g= IHBvd2lu IGZyZWVsYW5jZXJz IElORw== IHJldGFsaQ== IGdlZ3LDvG5k 0YHQvdC40Lk= IGNvbXBsZWpv IGV4YWN0YW1lbnRl 16nXqNeZ15HXnw== INGP0Ls= dWNhbHlwdHVz 2YjYqNin2Ko= xIF0aQ== b2J3YQ== IEFuYXRvbQ== INGB0L7QtNC10YDQttC40YI= X01hbmFnZXI= IDw8Ig== INin2YXYqg== IHdhZ2Vu X09QRVJBVElPTg== INC/0L7QtNC10Ls= Z2xt IG1heGk= Lmxvdw== IGhvamFz IGZhY3RvcmlhbA== 2KfYptip IFNlaHI= JyIsCg== Il0sDQo= 16fXkA== b3dpdHo= KG1hbg== IHplaWNo IHF1YWxpZmllcg== PXN1Yg== IG1pbmltaXppbmc= IEZhbmc= 5b2i5byP cHJhY2hl IGdycA== IEdvbnphbGV6 INiq2YjZgdix X3Byb3Bz INix2YjZvg== IOCqr+CqvuCqpg== Q29ycA== IOGDnOGDkOGDlw== R2FyZGVu RWF0 IHRpdmVzc2U= aGVtbQ== O3RleHQ= 0YDQsNC00LA= 15vXqteR KGxp IG92ZXJpZ2Vucw== LXN1cHBvcnQ= IHBlc2Nh enltYQ== IGdyZWF0bmVzcw== Y3JpdG8= 7Iqk66W8 INin2YLYr9in2YU= aXJpYW0= 7ZiA IFRFTg== IGvDsm0= YXJhYg== 5bGx5Lic IHBlcnNpc3RlZA== IHJldmVzdA== IOGDm+GDlOGDoOGDlA== IHN1cHBsw6ltZW50YWlyZQ== IGdvaw== KCIvIik7Cg== 4YOQ4YOa4YOd4YOT XENvbW1vbg== b3BlZGlj IEFwZXNhcg== IGhlY3RpYw== YWlzZXN0aQ== QU5HTw== 4LC+4LCy4LCV4LGB VGVtcG8= cXXDqWVz IGNvb2tib29r INCw0LrQvtGA w6l0aWNhcw== bGF5dWk= aWNpbmE= ICIh IOGDnuGDoOGDneGDquGDlOGDoQ== IHZ1b3M= IGFhbnZyYWFn TmF0aW9u U1RBUg== 0YvQu9Cw0YLTmdC4 4Lij4Liy4LiE4Liy 4Z6Q4Z+S4Z6E4Z+D 0YHTqdC9 IHJhem9y IHJlbGF0w7NyaW8= IHNwb2lsZXJz IGZvbmN0aW9ubmFsaXTDqXM= aXR0w6Rpbg== SVRURVI= INin2YTYsdmC2YU= LW1vcmU= INio24zZhdin2LHbjA== IHNhaXU= ImNvbnRleHQ= Z3JhdA== RGVwZW5kZW50 IE1vbGVjdWxhcg== L291dHB1dA== LWZhaXJl IGhvcm55 IGZvcnRlbWVudA== z4HOsc+C IGhpa2Vz INis24HYp9q6 X1NvdXJjZQ== IGVzY3JpYmnDsw== X2V4ZWN1dGU= YW55bA== LXVuZA== anVhbGFu 15XXqteV 5a6e5L2T KCk7Ci8= IHLDqW5vdmF0aW9u IGF2YW50YWdl 2YrYp9mG2Kk= IHZlcmtsYQ== IHByb3BvbmU= 4LC44LGN4LCk4LGB4LCk4LCC IFNLRg== 44Ge LmR4 IHJlY29ubmFpc3NhbmNl IHRpZGlnYXJl INee15XXng== IGVrcmFu IGluZGljYXI= TnBj INio2K/ZhA== IOC2seC3nA== eGJk YmxhdHQ= INmK2LPYp9i52K8= IGFwdWVzdGFz KCIsIg== KG1lZGlh UnVh 0LDQttC90L4= X1BMQVRGT1JN YWxpdmU= INiq2LPYp9i52K8= IHNjYXJjZQ== INin2YTZhtmB2LM= 0LTRjQ== YCku Zm9ybWVz IGNvbHVuYQ== IGFudGlnZW4= INC00LDQs9GL IFBhdHQ= IOGDoOGDkOGDog== IGNvbXBldGVk IFBBUks= IGFzcGVy 4LmC4Lih4LiH IGJvb3N0ZWQ= 4Kas4KeN4Kam IOGDoOGDkOGDl+GDkA== INit2YrYp9ip LnN3YXA= bWVyY2k= IGFsdQ== IFN1c3RhaW5hYmlsaXR5 55u06JCl IGNvbnRyYXNlw7Fh IGRiZw== IGJpYXNhbnlh IGV4Y3Vyc2lvbnM= IGZseWVy IEhlbHBlcnM= QHk= IHNjaHJpZWI= IG9wdXM= TGF5 IEFuZGFsdWM= IGpldW5lc3Nl IHNhxJ9sYXk= 4oCZT3I= IGNyZWM= RGVsaW1pdGVy IFNpZ2h0 IHBhdHJpbW9uaW8= 4LKw4LOG4LKX4LOG Y3VsYQ== IGNhbWlvbg== IGdlcnVzdA== LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KGFuaW1hdGVk IHNwZWt0 IGV4cGxvcmFy LiI8Lw== IOCkquCljeCksOCkteClh+Cktg== YWRvbmc= IFNlYXRz IM+Az4HOrA== PGxs X1NFUQ== IMOD 44O844OT44K5 IHNhdmVy U2hvb3Q= 4LSs4LSo4LWN4LSn IGNoZWF0cw== IOC5gOC4guC4lQ== IGlkZW50aWRhZGU= IHByYWF0 IGZpbmFuY2VpcmE= IHZlcmJyZQ== IGJyaWxsYW50ZQ== IHNudWc= 4buhbmc= IGNlbnRyYWxpemVk INqp2pPZhw== 44Kx44OD44OI IGV0aGVycw== IGNvbWXDp28= IG3DpG5uaXNrb3I= IOGDkOGDoOGDoeGDlOGDkeGDneGDkeGDoQ== IOC0r+C0vuC0pOC1jeC0sA== IOCyh+CyqOCzjeCyqA== IOCkteCksOCljeCklw== IGxhdmVy IGzDqWfDqHJlbWVudA== IGRvd25sb2FkZW4= IGhhbG8= IHNvbmd3cml0ZXI= 4K6u4K+N4K6u RGllc2Vz IGhvcmQ= IFN5bXBvc2l1bQ== bW9kaWZpZXI= INC00L7QutGC0L7RgA== IOCkuOCljeCksg== 4KWH4KSm4KS+4KSw IG92ZXJlZW5rb21zdA== IFNuYXBzaG90 IFN1Zw== IEJsYW5jYQ== IHrDoXA= IGLDoXNpY2Fz ZW5nZWFuY2U= IG9jY2lkZW50 IGNoaWNv IG7hu5Vp fT8= IGRlY2VudHJhbGl6ZWQ= INGD0LLQuNC00LXRgtGM 15nXpteV16g= IOCumuCvhw== IGNvbmV4aW9u IOCkruCliQ== IOCuquCvhuCurw== INin2YbYqtmC2KfZhA== 0LjQvdCz0LA= IGVyb3Rpa2s= IGxvaG50 IHBvdmV6 INi02KY= IHNpbm5lcg== INC+0LrQvdCw ZsOkbmdlcg== IENvdWNo 0LTQsNC4 INC10LTRlg== IOCkhuCksuClhw== IOGDkuGDkOGDk+GDkOGDrOGDp+GDleGDlOGDouGDmOGDmg== INmC2LHYotmG INio24zYsQ== IGxpZ24= IGtvcmVybw== YWdvbw== QURESU5H IOOCuw== IFBldHJvbGV1bQ== IGtldW50dW5nYW4= 4KeB4Kau4Ka/ 15HXmdeR IG1vcA== IFBhcmt3YXk= IGNvbXB1bHNvcnk= dHJhbnNsYXRvcg== IEZlZWxpbmc= LWZsb3c= IHNhdXQ= IFNoaXBz 4YOS4YOV IHRyb3V0 0YvQtNGD0Yk= KS0o U2hvd3M= X211bHRpcGxl LXRocmVhdGVuaW5n IGRpc2N1dGly 4KS/4KSv4KWL4KSX LnJlbGF0ZWQ= bGF2YQ== eXR0ZQ== INiz2KrZiNmG IEFx IOGDkOGDng== INiz2KfZhdmG25I= aXN1dXM= YW50YXJh bWJh YWxsaXN0 IOq3uOufrOuCmA== IFdlcmJ1bmc= 6Jaq IHBsZWFzYW50bHk= IOqzhOyGjQ== eWFyaQ== IOuwnO2RnA== IHVyYmFuYQ== IOKAugoK SU5WQUxJRA== IE3DpQ== dmFpZW50 4oCN4LSo4LWN4LSo4LWN IGZpZWNhcmU= IGRyaWxscw== Qml0dGU= X2N1cnZl INC+0YDRg9C2 VHLDqHM= IE1pdGNo INmE2KfYs9iq Lmdvb2Rz IGludmVzdGlnYXRpdmU= 4LKw4LK+4LKc 5q6K IGxhdmlzaA== 4LiI4Lix4LiU 4KWC4KSC IMOtbnQ= U25hY2tiYXI= IGNhcnRvb25z IGVzc2Vu IHPDoWI= IENyaXN0aWFubw== 0LzRg9C70Y8= IGludGVydmVudA== INC00L7QsdCw0LLQuNGC0Yw= INec157XqQ== 5rSq 4YOh4YOe LlJ1bGU= 0YXQsNGA IHRvdWNoc2NyZWVu INin2YTYs9mK2K8= 4K6f4K+B4K6V4K+N4K6V IHNoYXR0ZXJlZA== dHJlYXRlZA== IHNlcnZpYw== IGxvdWRseQ== b3Jzeg== IGLDuA== IGZyYXU= YWludHM= 5p2t aWFueg== IGNpcA== IGNhcmFz 6ZyN aW1hYW4= IGFubnVt IFJPQg== IEhhd2tz IGjhu49p INi02YfYrw== IHRydXN0cw== Lm12Yw== IEZsdXg= 1Lk= 4LWG4LSZ4LWN4LSV4LS/4LSy4LWB4LSC IGxpdHJvcw== IG1lc2Fq RnVs w7Bpbg== b29sZWQ= IGNvag== SmF2YXNjcmlwdA== IFZlbnR1cmVz dWF0ZWQ= L0Zvcm0= Zm9yZGVydA== c3Bhcg== IGhlcnVt c3BpZWxl INGC0Lo= IGluZ3Jlc2Fy INii2YXYsduM2qnYpw== INiq2YjYs9i52Yc= IGRhdGluZ3NpZGVy IOC0sOC0vuC0teC0v+C0suC1hg== IOCkquCkpOCljeCkqOClgA== IOCyteCzh+Cysw== IHRlbnR1 IGNvdmVuYW50 INmG2YLYtA== IGto4bqpdQ== QmlrZQ== INCw0YDRgtC4 IHJlYmVscw== X2J0 IFp1Zg== X29j 4YOY4YOi4YOU4YOi4YOY4YOh d2V6ZW4= 1aHVsNWh1bXVvw== IHBhdHJpb3Q= RWxh IHN0aXRjaGVz bGVo Y2lvbmFs IHNvY2lhbGlzdA== IGVsb25n IHRlYXJpbmc= R3JhY2U= IHdhcnk= IGHDp8Sxaw== w7B1bg== 15HXmdei IHJ1bW9y 6Lk= IGhvbmV5bW9vbg== IGR1aGV0 4KS+4KSY 4LK44LK/ IHNlcm1vbg== IOyXhuydtA== IFJlcHVibGlr 2KfYttuM INC00YDRg9C30YzRjw== INeR15nXnA== INCx0LDQvdC60LA= 4K6Z4K+N4K6V4K+B w7xyZQ== Q0hFRFVMRQ== IHJhcG9ydA== d2Vt RXhwZW5zZXM= IFNPTUU= IG5haXM= 0YbQtdC7 Z2FyYW4= SEVM KGJpdG1hcA== INmF2LXYp9iv2LE= ICR7KA== INm82YjZhNmI 4Lir4LiZ4LmJ IGVzcGVjaWVz IGV4Y2x1ZGVz 77yf4oCdCg== IOGDl+GDkOGDleGDmA== INin2YTYrdmF2YQ= Q2FrZQ== Li4uLi4K X2lkZW50aXR5 IGNvbmZlc3Npb24= IGRla2xhcg== 4LGB4LCw4LGB VVJMRXhjZXB0aW9u IFN1c3Q= XFJlcG9zaXRvcnk= IM+EzrXOu861z4XPhM6x b3TDoQ== IG11bGlnaGVk amFi IGN3ZA== IENvbmZsaWN0 b21lbmRl 2LbZiNix dmVudQ== cGt0 0LjQt9C4 4YOQ4YOb4YOU4YOT 44OW44Op44Oz44OJ INiq2K3ZhdmE LnJlc3VtZQ== IOC4m+C4peC4sg== IOCktuCkv+CklQ== IGRvbG9yZW0= INC80LDQtQ== IGdld8OkaHI= eHU= IOyEpOy5mA== IFJlc3RhcnQ= IHNtb290aGll aGF0w7M= 6Jo= IFBvd2VyZnVs IHdvaG4= IGZpeGU= LmdsaWRl IG15dGhvbG9neQ== IEJlc3RhbmQ= YWNvbA== ImE= YWhhbmdsYW4= INC+0YLRgNC40Lw= IFJlbG9hZA== INin24zYs9in 2K7YtA== 5aix5LmQ55m75b2V b2N1bWVudGVk LkRBWQ== LWNzcw== INC80LjQvdC40LzRg9C8 IGhvb2Zkc3Q= R3Rr IGNpdG95ZW5z 4KS44KS+4KSo INin2YTYp9i52Ko= IGltbXV0YWJsZQ== IHNlbnRp IGZhbWlsaWFs IE1pbw== d2VnaW5n c3BpcmF0aW9u IOGDl+GDkOGDnOGDkOGDm+GDqOGDoOGDneGDmw== IGtvbGlrbw== c3RyYWluZWQ= 0LDRgNGL0L3QsA== IFRyaWNr SnVzdGlu IHphaGxlbg== cHJvdGVjdA== IGJlZ2Fubg== IFVtc2V0enVuZw== IHNuZWU= INC+0LHRitC10LTQuNC9 7Iqk7YGs 5LqI57SE IGJlbGFqYXI= IFRydW1wJ3M= PXZhbHVl CUxvbmc= LWfEpw== L2RhdGF0YWJsZXM= IOC0leC0ruC1jeC0qg== 4KqV4Kqh IFdlc3Rlcg== 4KSn4KS+4KSo4KWA wqDCoMKg YXplcnM= IOC0leC1geC0n+C1geC0guC0rA== IOGDkOGDruGDkOGDmuGDkuGDkOGDluGDoOGDkw== IEdyZW56ZW4= X3NhbGU= IE1pZGk= CU15 IHBow7k= ICItIgo= IGhhY2Vyc2U= JHA= aWtvdg== 4Kq+4Kqv4Kqw IGNpbWVudA== INin2YLYqti12KfYrw== INin2YTYo9iz2LnYp9ix ICInLCci IHN0ZWRlbg== KGF1ZGlv IG1vcnM= JHI= 4bqm w7RwaXRhbA== IGNhdGFy IEFwcHJveA== X3BlZXI= INil2LPYsdin2KbZitmE IHVuaWVr KExvY2FsZQ== IEJhYnlsb24= IGF0dGVudGVz IHR1YmluZw== 4LWH4LSn IHNpZW50ZQ== IEdlc2NoZW5r Y2FwdGNoYQ== IHJu IHJlZHVjY2nDs24= 5Zu95Yqh IG9tcsOlZGV0 6ICD6K+V Z2VkZQ== INqp2LPYqA== IHpuYWpkdQ== LmNibw== 15XXnteq RFNN IE1hc3Nl INW01aHWgNW/ IGZvcnRhbGVjZXI= Q291cnQ= INCw0LvQu9C10YA= b21oYQ== IHN0cmluZ2VudA== IGFwcGVsbGU= LlJlcG9zaXRvcmllcw== IOCkvg== X3ByaW1hcnk= IHJhbmdv VG91cw== X2Fjaw== IGR1cGxh IElydmluZw== IEzDpG5kZXI= IOCqquCri+CquOCrjeCqnw== IGV4aXN0ZW50 LVN5c3RlbQ== IOCmmOCni+Cmt+Cmo+Cmvg== INCw0YXTmdGL0rc= LnRydWU= IHXDpw== cXVldGVz INC/0YPRgtC10Lw= INC00LDQu9C10LrQvg== IHR1cmlzdGFz dXJhbnQ= IHRvZ2Vs IGJvcm5l 4LS/4LS44LWN4LSl dW50emE= INC30LDRj9Cy0LjQuw== IOCmquCmsOCngOCmleCnjeCmtw== WWllbGQ= dHJlcg== b29reQ== IHNwZWVkaW5n IOGDoOGDkOGDpuGDkOGDqg== 2LHYp9i52Kk= INC/0YDQvtGF amXEhw== IE5vdGE= Y2FuJ3Q= IExpZWZlcnVuZw== IM+Hz47Pgc6x IGdhbWJsZXJz 4Ken4Ken 4oCcLQ== aWJyYXRl IGJhw7Fvcw== xIFjaWphcw== IHRyZWZm IGVyZ29ub21pYw== IGluZHI= PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IOCwpOCwvuCwnA== IOC4kw== IHBvdGVudGU= IE9idGFpbg== aG9v IG9rd3U= IGh2YcOw IGluZm9ybXM= IEJvaw== IOCkruCkueCkuA== IFJhZGFy INin2YTYtNiu2LXZitip U3dhZ2dlcg== IHN1Y2hl IE9yYg== IEltYWdpbmc= CWNhY2hl INin2YTYo9ix2K8= IHBhcmFtb3VudA== Z3N0 IGdvdw== IE5vc3Nh IGlnaWhl 0LvQuNC/ INGN0LrRgdC6 0LXQu9Cz05nQvQ== dmF0ZQ== 4Liq4Lih4Lix4LiE4Lij IEJlZ2U= 6YCD INiq2YjYp9mG24zYrw== dW1ibw== INC10Yg= 2K3ZiNmE INGC0LXRhdC90LjQug== IGF1c2dlc2NobG9zc2Vu LW1ldGhvZA== INGF0YPRgA== INCw0LTTmdC8 IGFkdmVyc2VseQ== IGF0bGFz Y29udHJvbGxlZA== TGFyZW4= INC/0YDQtdCy0YvRiA== ICIrIg== IGlkaXI= IHRlbw== dW13YQ== bGljdHM= T0xVTU5T INiz2YI= PGJpdHM= IHNwcml0ZXM= INC+0LvQvtC9 xIHKuw== IHJlcHJlbmRyZQ== aW5kcnVjaw== SnBh IOC4o+C4tQ== IGFlcm9zcGFjZQ== CUVycm9y INKb0LDQu9KT0LDQvQ== IGludmFyaQ== WFBhdGg= IENyZWVk IFByb2R1a3Rpb24= IGRlxYg= IOCqleCqsOCri+CqoQ== 2YfZiNmG IG1pc2NvbmR1Y3Q= X2ZhY3Q= IGVudHJlcg== RW5jcnlwdGVk U0FO IHdpbGF5YWg= Q2hy z4TPhc+H INGB0L3QuNC8 INGB0LvRi9GI IOWFqOeQgw== IG1hdGhz RmFjaWxpdGllcw== IGV4Zm9s W3BsYXllcg== ICIiKTsKCg== INix2KbbjNiz cGVyZm9ybWFuY2U= INmF2LnYsdmB2Kk= 5YWN6LS55LiL6L29 L2NvZGU= IOCuh+CusOCvgeCuleCvjeCuleCvgeCuruCvjQ== IE1vaw== 4LCq4LCC4LCa IHNleHVlbGxl 2Kfbgdix 5Y2r55Sf 4KS+4KSI4KSC INmG2YLYp9i3 IHJlZWtz 0L7RgdGC0YPQvw== IG1hYW4= IOCkueCknw== IGNhbnRhbnRl RE9DVU1FTlQ= CWRlc3Q= IGRkZWY= INmF2YjZgtmB LmFycmF5Y29weQ== X21lZA== xLFudA== 6ZWc a3VsdW5rdWx1 INmB2YrZhNmF bWVkaWNhbA== dW5kaXI= IOGDqeGDlOGDm+GDoQ== TlVNQkVS IFBHQQ== IGNpZW50w61maWNv 1avVv9Wh1b0= IHJlcGxlbg== X2V4dGVybmFs IFRpYw== IFZlcm5vbg== IEJlbGZhc3Q= aWdub25z b290ZXI= IHBhbm8= IOCkheCkueCkv+CksuClhw== UWk= INC+0YLQu9C40YfQvdC+ cmVnaXN0cmVtZW50 IGFtYmVy IEFkbWluaXN0cmHDp8Ojbw== fXw= 2KfYrdir INin2YTYrti1 IG9mZmVuZGVk IHRheW8= IHByb21vdGVy IGluZmx1eA== IHJhbm4= 15TXqA== INCb0YPRhw== IGZhdm9yaXRvcw== IHJvYWRtYXA= IExlZGdlcg== INC40LPTmQ== IGRyYWFndA== INGC0Yk= IGF2b250 IFdhdGNoZXM= Xy8= IOGDneGDpA== X21j IGxpcg== YWt1aGE= YWNjaW8= L2NhcnQ= IGNvdmV0ZWQ= IGtvbnVzdW5kYQ== YXRldA== 5bSO IG5odQ== 4YOY4YOv INC00Y3Quw== LW9wdGlvbg== IOCkheCkpOCljeCkrw== IHZvbGNhbmlj IGJsdW50 4KeH4Kam4Kao INee15nXoA== IEdlaGVpbQ== IGdlbGFuZw== d2Vubg== IGRhcnVudGVy IGJhdGh0dWI= IGdlbcO8dA== IHRlc3RpZmllZA== IE5ldHM= 6LKp5aOy INqp2KfZgduM IGTDqnI= cmVwcmVzZW50ZWQ= IGNvbmRvcw== IGNtZHM= IGtlemVs 7J6l7J2A INm/2YrZhg== IFNQTA== IGRvbmtlcg== IOCkpeCkqg== U3VwZXJ2aWV3 IHZhc3RseQ== IGR1dGVu YXZlbmk= QEdlbmVyYXRlZA== IHTDpGc= IHNvcGhpc3RpY2F0aW9u 1aHVutWh1bA= 1aHWhNaA1oQ= IExV Jyki IOCwuOCwuQ== IOGDk+GDkOGDpA== IFp3aXNjaGVu IHJlb3JnYW4= IExpb25lbA== ZGVsaXZy Z3V0 IHVzaG9ydA== 5aix5LmQ5Zu96ZmF IOCml+Cnh+Cmsg== SGFiaXQ= INGB0LrQvtGA0LXQtQ== QmVuY2htYXJr IOuWqOyWtA== bW9vdGhpbmc= IOiD LWRlc2NyaWJlZA== INin24zYsdin2YbbjA== YXVw W10pOg== INC+0LHRitC10LrRgtCw aWNhbWVudA== IHByb3N0YXQ= a2tl LFwi IGZlcw== IGRqZWw= INin2YTZiNit CUpMYWJlbA== IEJyYXo= INC/0LDRhtC40LXQvdGC LXByb2dyZXNz YWNlbg== IGFwYWJpbGE= IG1hZ25ldHM= ZW50dWthbg== IGNvbGRlcg== IGNsb3Q= 4K+B4K614K6k X0NvcmU= 4KuL4Kqz bGHDvQ== IFNQQUNF YXRzaW9vbmk= IGd1c2E= CXB0cg== RVo= LmFib3V0 INGA0LDQt9C0 IOaWsOWunQ== ZXJtb2RlbA== W0w= 2qnYtA== IO2ZjQ== bnlkZXI= Il0pKQo= IOCkheCkquCljeCksA== IGNob3Jlcw== IFJleWtqYXY= IEZyYWN0aW9u CXByb2R1Y3Q= INWh1bs= L2dyb3Vw IHBsZWtrZW4= IE1lcmt1cg== IGF2dA== 0L3QtdC80YM= 6aaZ5riv6ams5Lya INCx0LDRiNKb0LA= IG5hcmNpc3M= IHJhbmFy IGVzcGw= IOCmqOCmuQ== 0YnQuNC6 aXNleA== IHBlcmlvZGlzdGE= 4YCZ4YC64YC4 enlu IENhbWVs bW9uZw== IGh1bWFpbnM= IOuGkuydgA== INWA1aHVttaA IHByb2ZpZWw= 4Kiy4KmH IHByZXRlbmRpbmc= 4oCZQW0= IGVyemV1Zw== k6g= ZGl0YQ== IHB1aA== zrvOrc6/zr0= IGV4dHJlbWE= 44Op44Kk44Oz IGJld2Vn bGlua3BsYWlu IGJydWl0 IM66zqzOvc61zrk= IGFjZWFzdGE= cHJlbnRpc3NhZ2U= aW55YWth dHJlbnQ= IHByb21pcw== INC+0YLQvNC10YLQuNGC0Yw= 4YOU4YOS4YOb YWtvc28= IG1ha2Fo IGFudGlndW8= IEhPVVNF IGF2dG9t IEJhaHI= IHnhurk= IHNlcnZldXI= IHRyYW5zaXRpb25hbA== U2Vsb24= IEFwcGxpY2FudHM= INC20LjRgA== IHTDpg== IM+AzrvOsQ== 4LWN4LSv4LWH KG9yaWc= aGFyZ2E= Q2hhcnNldHM= IGZsb3VyaXNo 0ZbQvNGW0Lc= 6ZO6 LUdlbmVyYWw= aWxpYw== KCIvew== 4LSV4LWN4LSw4LSu IGRsbA== 4LmJ4Lit4Lih4Li54Lil IEllY2g= LWFnZWQ= IEhpbXNlbGY= IGPDs21vZG8= IG1vYWdlbQ== IFN1cHJlbW8= U2F0ZWxsaXRl INmE2KzZhtip PS4= 7JWV X1NJTQ== IOCwquCwvuCwpOCxjeCwsA== LWluZg== KHN0YXRz IHZvbGxzdMOkbmRpZw== IGZ1cnJ5 IGVyaWw= bWFuZW50 bW9kbw== IExpdGh1YW4= 0LjQvdC+0Lw= 4Liy4Liq4LiV c29ycnk= IEVzcMOtcml0bw== INC/0L7QutC+0Ls= KENhdGVnb3J5 4Lit4LmC YW5nZW5oZWl0 IG5hYW7hu4s= UmVqZWN0ZWQ= 7J20652864qU LdC20YvQuw== INC10YQ= IGRlY29yYWNpw7Nu IHNwb3J0c2Jvb2s= bWVudGlvbg== YXJsdXRpaw== IOaT IHN1aXZhbnRz IEVpZ2Vuc2NoYWZ0ZW4= X0RFU1Q= INC+0YHRgtCw0LXRgtGB0Y8= SHVk INiv2YjYqA== c3R2dQ== IHBhd24= IGto4bqj 2YXZhtip cGlsZQ== ZW5pbg== IGVhcm5z IHNlbnNhw6fDo28= INec16jXkNeV16o= KGNvbnRlbnRz IOS9v+eUqA== YWRlb24= IOCqquCrgeCqsA== INCU0YPRiA== INCw0Y3RgA== QWdlbnRz VGVsZWZvbm8= IGNydWVsdHk= IMO8dA== IGtpbG9ncmFt dGhvdWdodA== IGFsYmVy INmF2LfYp9mE IHZlamE= IHVzaw== IGVzdGltYQ== XCg= IOuCmOuKlA== QkVTVA== b21icg== IOCkteCljeCkuQ== 0LDRgtGM0Y8= IGFjb2c= 16rXkteV15HXlA== INeQ16bXnA== SXNzbw== IGtyYXQ= QnJlYWtmYXN0 0KHQnw== INCw0YDSm9C40LvQuNKb 15PXldeo15o= IG5pZXV3c3Rl IGludmllcm5v cm9o 0YrRj9Cy X2Nvbm5lY3RlZA== 4K6q4K+N4K6q4K6f4K6/ YXljYXN0 VFBM INCx0LDQudGB0LDQvQ== 4oCZRXVyb3Bl V1g= LWJhbmQ= IHlhxJ8= INC90LDQvNGD 2KfZg9mF IG5lc3RsZWQ= IHJlbGF0bw== IOCyleCziuCysA== IGFyZ3VtZW50bw== IEJ1aWxkZXJz IFZPQw== IGFpcmZsb3c= IHdpY2h0aWdlbg== IOyekOyLoOydmA== bGlqc3Q= SW50ZXJlc3Rpbmc= 6LWa6ZKx5ZCX UHVy 4K+B4K6o IGV4cMOpcmllbmNlcw== L2NvbnRyYWN0cw== IOCwteCwv+Cwpw== 4YOa4YOU4YOh INaE1bbVttWh1oDVrw== IGNvbW1hbmRlZA== U0lHTkVE IFByaW50ZWQ= IHN1Y3Rpb24= VEFSR0VU LuKAkw== INiq2LrZitmK2LE= IGJldmluZHQ= LmVkZ2U= IEdlZmFocg== Zm9yZ290 INC+0LHRg9GH0LXQvdC40Y8= IHR5cGVy INeQ16k= X2ZlYXQ= INC/0YDQvtC00YPQutGC0Ys= X2FuZHJvaWQ= X3Blcm1pc3Npb25z IOCmpOCmvuCnsA== IGdvxZ8= IGFzYmVzdG9z IEJyYWtl aW1vbmc= INio2LTYsQ== INin2YTZhdmC2KjZhA== IOaDoA== 0LDQttCw UmV2ZW51ZQ== INiu24zZhNuM IEN0 ZGlhZw== UmFpbA== IHBhcnRpY2lwZQ== IEdlcmljaHQ= IHdpdGhkcmF3YWxz IHByaXZhZGFz IE9mZmljZXM= INC/0L7Qu9C90L4= IMOpbGVjdGlvbnM= IGV4dGluY3Rpb24= IOCwmuCxh+CwuOCwvw== IHByenlwYWRrdQ== IOCumuCvhuCur+Cusg== QXV0b21hdGlvbg== IE1peGVy IGNlZWE= IGNvbmhlY2U= IEN1ZW50YQ== INCc0L7RgdC60L7Qsg== IM+J IGltcHVlc3Rvcw== YW1waQ== dm9qYQ== wqss IOGDnuGDoOGDneGDpA== INWp1b7VodWv1aHVttWr1bY= T2JhbWE= 0YPRgdC70L7Qsg== IOGDoeGDkOGDo+GDmeGDlOGDl+GDlOGDoeGDnQ== IOCwqOCxh+CwqOCxgQ== IHNlbWVu INee15XXqA== IHJlbnRl INCw0YDQsNGB0YvQvdC00LA= 15nXpteV15E= IGVzY2FwaW5n IOiMlw== IHRlcnJpZmllZA== Y2hhbnRtZW50 1aHWgNW+1aHVrg== bW9uc3Rlcg== IE1hY2Vk IG1vZHVsbw== X25vdGVz IHdpbmRzaGllbGQ= 6L2p IG9rdWs= LkVuY29kZQ== U3J2 IHVhcnQ= IHNlcGFyYXQ= IGVxdWlsaWJyaW8= IERlbGV0ZWQ= IOCkleCkoA== c2VycmF0 LmpzZGVsaXZy IG1vZGVybmVu SnVhbg== RGVmZXJyZWQ= IHVuaW0= w6VydA== 4oCZaGV1cmU= 0LDQuNGC IHJhenZvag== 4Kqk4KuN4Kqo INGP0LrQtQ== LmNhdGNo RGlzdGluY3Q= IGZhaXhh IOWcqOWkqeWkqeS4reW9qeelqA== 5Lqa5rSy5qyn576O Y29ycG9y IENpbmR5 0YbQsNC80Lg= RXVyb3Bh IGJhbGU= IG1vdG9yY3ljbGVz IGVkdWNhdGl2bw== QnJ1 IG1vcmI= IOGDpOGDoA== V2VpdGVyZQ== 2YrZhtmH 0L3QuNGP0YI= IGdlbmV0aWNhbGx5 0LjQu9C40L8= 0p/QvtGD0L8= IE5pZXV3ZQ== IG9sc2Vt IG1pbnV1dA== IGtvbnN0cnVr IHBleWk= PFBvc3Q= INmC2YTZig== IOCqruCqvuCqow== bHljZXI= IEZyZWl6ZWl0 IOC0teC0v+C0rQ== IGtha3M= INCd0LDRgQ== INeZ15vXldec15nXnQ== 15XXl9eU 6aqR INin2b7Zhtin IFRoaW4= U29jaw== Lmhy 0LjRgdGC0Ys= fSk7Ci8v IOC0qOC0lw== IEphcw== LWZpbGw= c2VpdGVu aGFoYQ== IGRhc3Q= 6Zui IHN3b25h bG9ja3M= b21yw6U= INCy0ZbQtNC/0L7QstGW0LQ= INWw1aHVtdWv1aHVr9Wh1bY= 5LqG5ZCX ZW5kZW0= INiu2KfZhtmI IFZhbGVudGluZSdz IGRlbWFuZGFz 0YHRj9GC0YHRjw== INGD0YHQv9C10YjQvdC+ CSAJ INKv0qs= Lm11bHRp 5o+h 4Li04LiE KEhhc2g= IHR1cGxlcw== 15XXpNeY IEluYXRzaXM= IEFsZXhhbmRyYQ== IOCuquCvi+Cun+CvjeCunw== dWxveQ== INit2qnZhQ== 2K7Yp9mF IG5rYW4= KGxpbWl0 INiu2YTZgg== IGFsdGVybmF0aXZlbHk= IEJyaXRhbm4= IOCuleCuv+Cunw== IHBvdno= IGxlYWthZ2U= aW5lY3Q= INmF2qnZhdmE UXVhcnRlcg== IGV4cGVyaW1lbnRhcg== IEdvdXZlcg== IFF1cmFu 5Y+K5pe2 VWQ= IGV4cMOpcmltZW50 IOC0pOC1geC0n+C0sOC1jQ== INGC0YDRjdCx0LA= IHRlaWxlbg== IG1lc3Rh IEx1bXB1cg== b21ldGVycw== IFBhcsOtcw== 2K7Ytdi12Kk= IGFycm9nYW50 IHfDpHJlbg== emVsZQ== cWFyZmltbWk= IOCyr+CzgeCytQ== IFByaWVzdA== INC+0YLRgtGD0YA= IHRyaWZmdA== RWFzZQ== 4KWN4KSo4KWB IGVnw6lzeg== dWlkYWRl IGJlcmljaHRldA== IGRlbHQ= dXNpemU= IGfDtnJuw7zFnw== IOGDmeGDleGDmOGDoA== INil2YbYtNin2KE= IG1hdGNodXA= X3NhbGVz ZXhwZXJpZW5jZWQ= INC80LjQu9C4 YnJvbg== IGNlbGxhcg== IExhdWRlcmRhbGU= LlBFUk1JU1NJT04= 0LbTmdCw0YDQsA== w63Fvg== IOyImOuPhA== IGFjY2Vzb3Jpb3M= IOC3g+C3kuC2pw== IOCkmuCksuCkpOClhw== 0LTRltGA INGC0L7QtQ== KFsnLw== IOCkpOCljeCkr+Cliw== bWFuaGE= X3BvbA== IHNleGxla2V0w7h5 UHJveWVjdG8= IFZhbmlsbGE= KCQu IGJpcnRoZGF5cw== YWRhc3RyYXI= IFBFUkY= INGA0LDRgdGH0LXRgg== IE9DVA== IGjDpmd0 IHByZXNh IGJyb20= YXB0ZQ== VGFj aWt1dGk= IEZpZXN0YQ== dHRpbmc= IGVtcGllemE= dW1iaWE= IEhhZnQ= IHVid28= IGFhbmdlemllbg== IGtvbnRybw== IG9udHdpa2tlbGluZ2Vu IENhdGhvbGljcw== cGFyYW1yZWY= IGZvcsOnYXM= CUxvZ2dlcg== W28= L2hlYWQ= IG11dXI= 4LmA4Lin4Lil4Liy IE9GRlNFVA== 0L3Rg9C70LA= INij2YfZhdmK2Kk= IFR3aW5z OkE= KFdvcmxk LWZyb250 5Lq65pWw X3Nk SG1t IGJpZGRlcg== IOCkuOCkguCkleCljeCksOCkruCkow== ZXhlY3V0aW9u IHZpc2l0ZXVycw== IHF1aWQ= IGF0dWE= IENoZXJva2Vl IGNvbW1lcmNpYWxl IGhpZHJhdA== KGxhbmc= IC8vITw= 5o+Q5Lqk IOS4uuS7gOS5iA== INin2YTZitiv PUE= 2YjYp9ih 7oA= Y2hlZHVsZXM= IOC0leC1iuC0o+C1jeC0nw== 4YOU4YOR4YOg4YOY4YOV4YOY IEZhaHJyYWQ= 5paw6IO95rqQ IEdlcmFkZQ== UmVzcHVlc3Rh UEVBVA== IGVyc2NoZWludA== IGZsZWVjZQ== IOCqquCqvuCqlQ== IHJvdW5kaW5n RGVzZXJpYWxpemU= IGludGVycnVwdHM= IFNNVFA= IGNvbnRhY3Rvcw== QmxvZ3M= 4LSk4LS/4LSw4LWG IHRhaXQ= IFRydWNrcw== IG1lcmE= IGVsw6ljdA== IG1hbmRl yZlkyZlu IM6VzrvOu86szrTOsQ== dW5jaWE= Lk1vdmll IGVzdMOpdGljYQ== ZW5lbw== KENvbnN0 2LnYr9ip IFJlaQ== IHVpdGdlcg== IHNlY3JldMOhcmlv ZsOkaGlna2VpdA== zrTPjA== IOC0quC1i+C0rw== bHVpdGVuZA== IGJyZWFrb3V0 INW41oDVuNW21oE= 0LTQtdC90LjQuQ== IHJlY2xhaW0= IOCksuCkv+Ckr+Clhw== PVtb IHJlc3Bvc3Rhcw== 4oCcTg== IGNvbnRpbsO6YQ== ZXNlbnQ= 16LXqdeU 5oiR5Zu9 IHZpdmFudA== 16TXqteX IHZ5aw== IG5pbmph IHNlbWlmaW5hbA== IOuniQ== INmI2KfYtA== IFRpYmV0 kbg= bWVsZXI= 5oOF5Ya15LiL IGJ1bGt5 VHJpYg== cG9sZQ== X05FVFdPUks= 2LTYp9ix2YM= IGxpZcOf IOCwquCxjeCwsOCwpw== IENvbXBvc2l0aW9u U2lnbmVy 4KuL4KqX4KuN4Kqv IHBhc3Nvcw== bGplZA== aGFsbGU= IE5pdmVhdQ== IGRvdHRlZA== IExvZ3M= b2Rubw== IG55aW5naQ== IAogICAgICAgIAo= dGFibGVuYW1l aWhhbm5h IOGDpeGDkOGDoOGDl+GDo+GDmuGDmA== IHN0aW11bGk= 4YOi4YOY4YOh X2ZuYW1l IGFnYW0= INeW15k= J2lz bGF1YmxpYw== X2NsZWFudXA= IEJvcnJvdw== IGR1d2U= CW1z IFNvbW9z QWluZGE= IGZpYnJlcw== LnNldHRlcg== IEZsZWlzY2g= VHJhbnNsYXRlZA== INmF2LTYrti1 IElOSVRJQUw= IG3DqXRhbGw= IHNwZWNpYWx0aWVz IHNhbGw= IGxpYWlzb24= IjsvLw== IHphcGV3 7Luo IG1mZQ== IEF6dWw= 0YHQvNC10L0= 0pvRg9C9 INmF2LPYqtmC eGZk IFNob2U= IG3DqWRpY2FtZW50cw== INiq2KfYsQ== KEZsb2F0 INin2YPYq9ix IHBhcnRpY3VsYXJtZW50ZQ== 2KfYqNmI2YY= IHNjaG9sZW4= LXBob25l IHpvZGlhYw== IEphbA== 566A56ew IHJlY291bnQ= SE9U IGZydWN0 ICIiKTsNCg== PFZhbHVl IGVudnk= IEhVTQ== IEZyaWRheXM= U3Vs LXJ1bm5pbmc= dXNldHplbg== IOCqquCqnw== IFRPUg== YWdyYWRh IEZhdWx0 LlNjYW4= RXZhbHVhdGU= 0LTRg9GD YXZpbW8= IGZsYXNoZXM= IGt1cmE= IFNIT1VMRA== cm9pdHM= 2YHZiNmG IGFwcGVsbGFudA== IENvbmdyZXNzbw== dXppb25p IOGDoeGDkOGDo+GDkQ== IGlud2FyZA== IGthcGNzb2w= IFN1ZGRlbmx5 IGFsaXk= xJ9pbmRl 6IqC55uu KS4i IGFsaW1lbnRz IOaUtg== IHVuZmluaXNoZWQ= CW9m z4POug== bGVraWxleW8= IHBvbGljaWFpcw== bGFyxLFuZGFu KXZhbHVl IEh1dGNo RUxB 0LLQsNC10YbRhtCw IFdU IHNwZXNzbw== 0YHQvA== IOCmsOCnh+Cmlg== INit2qo= IG1pZGRlbGVu X2Rlcg== Z2lmdGVy SlVTVA== RW5nbGFuZA== IElLRUE= aG9zYQ== LnNweQ== LXN0b2Nr INC40LfQtNC10LvQuNGP INmH2LLbjNmG2Yc= IFN1cnZpdg== 4K6j4K+N IGRpw6E= b2dlbmVyYXRlZA== X3JldmVyc2U= IHNvemlhbGVu INeV15XXkNa3 IHNjb3BlZA== IGPDoWxjdWxv RWR1 4pGj INiv2LHYqNin2LHZhw== IGJhemE= IHdhdHRz IHRhbMOhbA== X0ZJTEVT cHJpbmNpcGFs Q3Y= LSIr IEPDoWM= Lk1PTg== IOydtOuypO2KuA== IG55YcOpdGE= IHJlZmlsbA== 8J+l RXN0YXM= ZW5rYQ== IGJ1cnI= IGVzdHJlbA== INC90L7Rh9GM YWxhcsSxbg== IMO8c3TDvG4= ZW5q IEJhY29u IFNSQw== IEh1bHU= IGNpcmN1bnN0YW5jaWFz VVBT IGluZmluaXQ= YnY= INCQ0p/TmdCw IExvaXJl IGFsa29o IOCyteCysA== IG1lc2Fz ZXJpdA== IOCkruCkguCkpOCljeCksA== IGluZGljYWRvcmVz LmNsb2Nr IEZvcm1hbA== INmB2LHZhQ== IE1hbmdv c2libGluZ3M= 4YOb4YOr4YOm IGFwcHJveGltYXRpb24= Py0= Q2hhcnNldA== 4LGB4LCh4LGN IHJlc3BvbnPDoXZlaXM= IMOpbmVyZ8OpdGlxdWU= KnBp IMOpcG9xdWU= IGtvZ3U= IHNoaWdh KE9m IkQ= IHByZXN0aWdl YW5nZWJvdGU= IEFsYmE= Z3Jvd24= YXNvbA== IEpvaGFubmVzYnVyZw== LmV4dGVybmFs dWNpZA== ZW5uZXQ= IFBvcnRhbnRv IGNhcHBlZA== IGVyYmlq IGNhdGFzdHJvcGhpYw== IGV0aGlj IHBhcsOh INiu2YU= W3JpZ2h0 INCw0YjRjNKt0LDRhdGM c+G6uQ== cmV0YQ== IEVpbmlnZQ== IERvcA== IOCknOCkv+CkruCljeCkrg== IG5pag== 6IGU57O75oiR5Lus IOq0gOyLrA== IEdlb3JnZXRvd24= U2ltb24= w7Npcw== Rm10 RVhFQw== IOCuieCupA== INiq2LTYutmK2YQ= LlBheW1lbnQ= IOCkuOCknuCljeCkmg== INC/0LjRgA== KV1b IHlhY2U= IOGDm+GDneGDo+GD IGNhaA== IGFxdWF0aWM= IOCkuOCkv+CksA== IEtlbm50 IOC0teC1iOC0lQ== IHNpbGljYQ== IHBhbHA= dW5pYQ== Lm5j Z3VuYWFu LGNoYXI= bmRhdGE= IE9ETQ== IENvbXBldGl0aXZl YW5uYXI= aWRlbGlqa2U= cHJheQ== 4Kqw4Kq+4Kqc INiq2LHYqA== IHVx 2YfYqQ== IExldmVy IHRlbXBvcmU= X1RJTUVTVEFNUA== 6bm/ IOCkoeClhw== Y29udHJvbGU= 4LCq4LGB IFByb3ZpbmNpYQ== Lz4NCg== 0YHQutC10YA= J2FwcGxpY2F0aW9u 5oyH5a+8 VHhu 2qrYp9ix LWNhbGVuZGFy YWRyxb4= IGNow7o= 8J+a KGVudA== LnBlcmlvZA== IE5vdGljaWFz INCw0pvQv9Cw0YDQsNGC IHNhbmRz IOyLpOygnA== KHVwbG9hZA== emVydw== IEluZHk= Q0VMTA== INmF2K7Yp9mE2YE= cGVuYXM= IM66zrHOu8+Nz4TOtQ== IOCqruCqvuCqguCqlw== PigpOw== IFRydXN0ZWQ= cmFwcGVk YXRldGltZQ== IG1hc3NhZ2Vucw== IGF1dG9mb2N1cw== CXNwaW4= IGhhbGthcmE= IG9ydGE= IG5kdQ== 1bjWgtW11aw= aWxsdXN0cg== 4YOU4YOX4YOh IE3DunNpY2E= LWF2 YXRyaWNz aW50cg== 4LmB4Lie INmG2LLYrw== LWZvb2Q= IFhhbWFyaW4= UEFM IGJvdHRsZWQ= IGlyb255 PEdldA== IFRr IHJlbG9jYXRl INGB0LXRgNC40Lg= IHBhZ2Fu dW5lcQ== WVlZ Vm9pcg== TWVzc2FnaW5n IOCmquCnjeCmsOCmmg== Pycs IHNzaXpl VmludGFnZQ== IG1hc2U= IEJldHM= cWluZw== 4K6/4K6f4K6u4K+N YWJoYWlydA== 0YLQvtGe IHRhyrs= KEVkaXQ= L21lc3NhZ2U= YHQ= b3JnaA== emFha3Q= zr7PjQ== IGF1dG9tYXRpcXVl INCx0ZbRgNGW U2xhdmU= UmFkaWFucw== IGRlc2NyaXB0b3Jz dmVsb3BlZA== INGN0LrRgdC/0LvRg9Cw0YLQsNGG0LjQuA== IGxhdWY= 4LC+4LCC IHRhdG8= JFw= emV0dGVuZA== 66qw QUdFTUVOVA== LmZvdW5kYXRpb24= ICcnLA0K LlNjYWxl IG1hc3NhZ2Vz IGVudMOobg== IHLDqXVzc2l0ZQ== X0NUWA== Y3Rl 5Lq65Lq65pON P24= IENoYXJ0cw== X18v IGxlYnk= YWdpdA== Q2FtYg== 4YOb4YOr4YOm4YOV4YOQ4YOc Z2VvaXM= 15nXmNeZ IGp1c3RhbWVudGU= ZmFpdGg= IFNhaW50ZQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IGJldHlkZXI= IEh1bmdhcmlhbg== LkRheQ== IGtlc2VoYXRhbg== IENvdW5zZWxpbmc= 4oCN4LSV4LWN4LSV4LWB4LSC X1BF YmVyZWl0dW5n L2Nsb3Vk IGFkYXB0aW5n QmVzY2hyZWlidW5n INGA0LXQt9GD0LvRjNGC0LDRgtGL cmFkb3Vybw== IOCkreCkl+CkteCkvuCkqA== IG3DvGQ= PSgn IEZybQ== IGRldGVyZ2VudA== INCy0L7Qt9C90LjQutCw0LXRgg== IGRlZmVuZGVycw== IM61zrnPgw== UE9TSVQ= IExldml0cmE= 4YOi4YOZ d2FybWluZw== LnNldGRlZmF1bHQ= IGxldHp0 U3Vic3RyaW5n 1oDVodW21b0= IENhcm5lZ2ll IENsYXJv cnV0 YWNpZA== IHByZWp1 Ymhl 4LC/4LCn cGlw V0c= INim2KfZhA== IFNjaGxhZw== LXJlYw== QmFr 0LTQvtGA0L7Qsg== w6FuZWE= IGludMOpcsOqdA== 6L+U5L+h IGRldHJpbWVudGFs IHBvbXA= IE1pY3JvZ2FtaW5n 4KSV4KSw4KWA IGJlc2NoZXJtaW5n IEJyZWF0aA== IGhlYXZlbnM= INmG2K/Yp9ix2K8= fQ0KDQoNCg0K 0LPRg9GD INmG2KfYsQ== IG1vamU= IE5hdGU= IOCkteClh+CkrOCkuOCkvuCkh+Cknw== QVNN IOyeiOyXiOuLpA== dGhpbmdz IGV4dHLDqm1lbWVudA== 0LjQvNC1 IEFyY2FkZQ== IGFycmFuYw== 4LC/4LCC4LCq INC90LXQvtCx0Ys= IG1hc3RlcmVk IHppZWh0 IGRhYXJpbg== IFdhc2hpbmc= IHJ1bmc= IOCqpOCqruCqvuCqsOCrgA== IOCqruCri+Cqpg== IG1lbWJyYW5lcw== w6Nl YXhvbg== IGdlaGFsdGVu IOGDl+GDkOGDleGDmOGDoeGDo+GDpA== LnNraWxs IFRFRA== INC806k= IFR1cm5z IHJvYw== IFNwcmU= dWVyYQ== INC90YDQsNCy0LjRgtGB0Y8= IG1hcnk= IOWFrOWPuA== VHJlbmQ= IGZvdG9ncmFmw61h dml0YQ== IGdlYnJh IGN5bGluZHJpY2Fs Q0NDQw== 5aSn5Y+R5bGV5pyJ6ZmQ5YWs5Y+45a6Y572R IGRpbWFuYQ== cHJh INC00YDRg9Cz0L7QvA== PScnOwo= IGFubnVs IGRpc3Bvc2l0aW9ucw== IOCkquCliOCkuOCkvg== IFRyYW5zZm9ybWVy IGFzc2lnbnM= 55Kw IHdhcnJhbnRz 0LrRgA== IEJBTA== LWNoZWNrYm94 cmVzZWFyY2g= IGRldXQ= w7ZuZW4= IGNvbWJpbmFjacOzbg== IGVtcGY= ZWFybmVk LWxuZA== IOqwgOyngOqzoA== IFN0YWZmb3Jk IMOrbQ== eGg= YWxpc21l INC+0L/RgNC10LTQtdC70LjRgtGM eXJpbnRo 0YvRgtCw0Lk= SW5jaWRlbnQ= IGdpcw== IGJyYWtpbmc= w4FT IHRyZ292 IGxpdHJlcw== 4YOq4YOY4YOY4YOh IGNvcnJpZw== aXLDo28= YWd1emk= IGNhYmlucw== IFdlYnN0ZXI= IOCkleCkvuCksOCljeCkoQ== 4Liy4LiE4Liy4Lij4LmI 5oub5ZWG5oC75Luj IHNww6ljaWZpcXVl IG5vZGlnZQ== IHRyb3V2ZW50 IFNFTkQ= IFN0aWNodGluZw== cXVlYXI= INGA0LXQutC70LDQvA== INGN0LzQuA== INin2YTYt9mE2KfYqA== Q3VydA== IGNhbG1h IHBhcml0eQ== IHJlYWxpemFu INGF0L7QtNC1 2LPZiNmG L1o= IENvbmZpcmE= 6LS45piT IFBhdmlsaW9u IENhZ2U= IOCkquCljeCksOCkpOCkv+CkqOCkv+Ckpw== IHVuaW50ZXI= INWA1aHVtdWh1b3Vv9Wh1bbVuNaC1bQ= INCx0LXQu9Cz0LjQuw== X3NlY3VyaXR5 IFrDvHI= YWNlYQ== bGVnaQ== IGRsb3U= IOCktuClgeCkrQ== xJtqxaHDrQ== UmVsYWNpb24= IGNhbGlmb3JuaWE= IGF1dGhvcmlzZWQ= IHlvbmtl 5Lmx5a2Q wrs6Cgo= INen15nXoA== IGltcGVkaXI= cmlp IENJUw== YXJyaXM= IGlsZMmZ IGJsZWVm 2KbYp9iz2Kk= KEFkZA== IOe9kee7nA== IGxpbmtlZGlu INWk1ao= w6lyw6ll IHZyb2VnZXI= INeq15XXmg== cHV0YQ== INCc0LDQuQ== IGFubmFycw== yZl0aWM= UkVTT1VSQ0U= 5buJ IGhhcmRl IGNpdMOp LWNvbnRhY3Q= IEtvbW11bmU= IGFkZGl0aXZl 6LaF57qn INCf0YM= 2YXZhNmD X2xvY2F0aW9ucw== bmFzaXVt IOCkpOClh+Cksg== IGNoYW5zb24= RkFRcw== YWRpbmk= INC/0YDQvtC80YvRiNC70LXQvQ== IOyViuyKteuLiOuLpA== IOConOCpgA== IHNhcXF1 Lm91dGVy INGC0LDRiNC60LjQuw== IFNlY29uZGx5 IGJpZXI= aW5pcg== IGRlc2lndWFs X2RlbW8= LWNpdHk= IGTDtnZsyZl0 IFB1ZWRlcw== IFRvZQ== YW5lZA== 0LjRh9C90YvQuQ== IOunpOyasA== IGNodw== IOGDkuGDleGDlOGDoOGDkw== dWtldA== IG9yZ2FuaXPDqQ== Z2VyYWxk IEzDpA== IEFiYm90dA== IGF3YQ== IFN0ZWVsZXJz IHBhY2Vk IGFmZnJvbnQ= zrPPhw== IEhpZw== 4KeD4Kal IOeOr+eQgw== IOCksOCkv+Cksg== RklOSVRZ dmljdA== ZW1wYXQ= IGVzdHJhdMOpZ2lhcw== IENhbmRsZQ== LWV4cGFuZA== IOCmpuCnh+CmtuCnhw== IG3DpWRl 4KeH4Kao4KeH CVBvaW50 fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4= Q29ubmVsbA== 4oCZYXNzb2NpYXRpb24= IGluY2FyY2Vy 0L7QutGD0YDQsNGC CVN0YXR1cw== IGVsZWnDp8O1ZXM= IG1lY2FuaXNtbw== IMq7b2U= IE5lb24= IG9taXQ= IGFudGliaW90 4KS+4KSs4KS+4KSm INWr1oDVodWv1aHVttWh1oE= IGThuqFuZw== 0L7RgdGD IGrDpHQ= 0Y/RhtGM d29vZHM= YWVj KCc7 SmVk LmFsaWFz X0ZJTEVOQU1F IGZsZXhpYmVs IOCyruCzg+CypA== IGJ1cmk= aWtrZWw= IOC0juC0qOC1jeC0qOC0v+C0teC1vA== X2NhdGFsb2c= Iil7DQo= 0LDQvNGD IGNoYXNzZQ== IOabtOWkmg== IGZvdXJuaXNzZXVycw== IOuquA== 4LWH4LSm Rm9vdGJhbGw= IEJvbm5l 1aXWgNW9 IENPTVBBTlk= Z3JhZGFibGU= IEdpw6E= W10+KA== bGFyeW55 0LrQu9Cw INC00LXRj9GC0LXQu9GM0L3QvtGB0YLRjA== IOCyruCyvuCyoeCzgeCytQ== IHRvbmFs IOCkhuCkoA== 4KqC4Kqt INeS16LXqQ== bGFndA== YmFsYW5jZWQ= VEVSTQ== LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 1b3Vv9Wl1bI= INei16bXnteV 8bma IOCkruCkv+Cktg== IHBvbGl0aWVr 2YbbjQ== 2KfYrdmK2Kk= IGdlcmVn X3BsYW5l IHBlbnNpb25z INee16nXlNeV YmVycmE= INGA0ZbQtw== INmG2K4= IEhlcm5hbmRleg== IEZvbGxvd2Vycw== 7IKs7ZWt INin2YTZhdix2LY= k7Q= dWRhbg== IFF1YWxjb21t IHNhbMOhcmlv yZljyZk= IGNlcmFtaWNz IEtyeXB0 YXpnbw== YXZz wq10ZXI= ZXRlcm1pbg== aWNoZXJoZWl0 LnNlY3JldA== LU5l IEJsdWVob3N0 INCz0L7QstC+0YDRj9GC IM6xzrvOuw== INeQ16DXk9ei16jXog== INin2YTYtdit2Yo= L2Fu IHZvbHVudGFyaWx5 IG1lemVsZg== IHVwb3o= YXRpc2NoZW4= ZXJsdWthbg== IOi0 IHNpbGVuY2lv Jyl7DQo= IGNvbWllbnpv 7Ja07ISc QW15 IOCwquCxjeCwsOCwvuCwsOCwguCwrQ== IG11bmN1bA== 0JDQlA== LWJpbg== b3NpdGU= INeR15DXnteq 6riw7JeF aXJpa2E= IGvFq8q7YWk= IHByacSN IG1hcm0= IGxlbmdh INC+0LHQtdC3 15fXnNeY IE5ld21hbg== QVNTRVM= IGdhZGE= INio2LPYsQ== IHB1bHNlcw== 4LiZ4Liy4Lii 0LvQuNCz QVZH IOGDkOGDqg== IOy6kA== IHlhbms= LnNvdXJjZWZvcmdl IOCyuOCyguCyrOCyguCypw== IHNjaMO8dHplbg== dXnhu4du INGA0YXRiw== IGV5ZWJyb3dz IGR1dXJ0 SG9j 5bu6562R IHByaW50ZW1wcw== IEZpbmRz IHF1aWNrZXN0 zrvOr86x Y29tcHV0 LkNocm9tZQ== bcSxxZ90xLFy UGVybWFuZW50 dW5nZW9ucw== IHR1cHU= IGxpbmViYWNr IE1vcmE= IG5lbGU= IGNpZW50w61maWNvcw== IOCqruCqpuCqpg== 15nXqteo INGC0LXRhdC90LjQutCw LmZsYXR0ZW4= aW11dGg= VklO dmFyY2hhcg== 15jXqNeg15g= 0YLQtdKv CXNwZWVk IOCkqOCkv+CknA== IGF1ZmY= IGnDp2VyaXNpbmRl LXZvbHVtZQ== IG1lY2g= INGG0LDRgA== IHRheGFz ZXJjdWxvc2lz RVJDRU5U IOWPr+S7pQ== 0L7QtNC+0LI= IMO8enLJmQ== IG11dGVk IG1pZ3JhbnQ= IGx1am8= IHBvbHlub21pYWw= UGI= 4LC+4LCo4LCC Y8mZ IHJpZmVy Jz4NCg== 0YDQsNGC0L3Qvg== 4YCU4YC+ 0LDQttOZ0LA= 656r 44CI IEFuZ2xv IE9yb21v UGVyc29ucw== 5b+r6YCf IOGDrOGDkOGDoOGDm+GDkOGDog== 5a6Y572R5byA5oi3 ZWxoYQ== IGRpc2N1c3PDo28= 4Z+C4Z6E V2Fsa2luZw== IGhpbmdl IGRlYmVyw6Fu 57+S dXRlbGU= WW91J3Zl IMOzbg== IGRvbWluYXRpb24= 0YHQsNC80LE= 16LXnNeY LnNwYW4= KHNuYXBzaG90 wq1u IHZlcmph SW50ZQ== RXhwbGFuYXRpb24= IFN0YWxs aW5pdGlhbGl6ZXI= IFNoZW56aGVu IHJlZ2ltZXM= IHBpenphcw== 0J/RgNCw0LI= VHJhY2Vy IGFueXdheXM= IOCyhuCyuOCzjeCyquCypOCzjeCysA== IHBhdWI= IGNvaW5jaWQ= IHJlbXBsYWNlbWVudA== 77yR77yR 4Liz4LiZ4Lix4LiB4LiH4Liy4LiZ IHBvcnRv IGVyaXR5 IG1vcmFkb3Jlcw== IE5TVVJM RGV0ZWN0ZWQ= IHNpbmFpcw== IOC0huC0pg== VUZG IHByb2NlZGltZW50b3M= IE1MTQ== IFNUTQ== INGB0L7RhdGA0LDQvdGP IGF1dG9tw6F0aWNhbWVudGU= LWNoZXZyb24= 5q2j5bi4 IOCkqOCkvuCksA== IEJ1ZGRoaXNt IGVudm95ZXI= IG5hc2M= IGF5dXU= IGluZGljdA== IERvbWU= 4Lin4Li04LiV IE1BVExBQg== IGtlaW5lcmxlaQ== UGF0cmljaw== IGFkdWx0aG9vZA== IGhvyrtvaGFuYQ== IGdpw6Fv ZmVyZW56 wq1nZQ== IGJvxZ8= INC+0YLRgNCw0LY= IGphbnRhcg== IHByYXM= 6aCC IGFkaXBpc2ljaW5n INC60L7RgNC+0LE= TXVsdGlwbHk= IGp1dmVudA== 5oql6K2m IHBhZ2dhbWl0 INC90LDQvNC10YA= IGdvYmllcg== IGl6Yg== QUNQ IGluZ2V6 INCx05nRgg== IFByb3BlbA== IGN0cg== dGltZWxpbmU= bGlldA== IHRocm93YWJsZQ== IOC4o+C4p+C4oQ== aWNhZG8= IGFkZGl0aXZlcw== XEV2ZW50 IG91dnJpcg== YmluYXRpb25z 6ZCY IGxvdXI= X2hlYWRpbmc= dXRpbGU= w71hc3k= INC40YHQv9GL0YI= IFJvZ3Vl Om1hag== dWx0aW1v 4LS/4LSy4LWB4LSz4LWN4LSz X3ByZXNzZWQ= cml0YQ== TUlTUw== IOCumuCviuCusuCvjeCusg== VGs= 0Y/RgdC/ IO2ctA== IGNvbXVuaWNhcg== IEJhbGU= IPCfmQ== INC80YPQttGH0LjQvdCw Lk1vbnRo bnRz bcmZdA== INCy0YvRgdC+0LrQvtC5 Z3Vpc2U= IGTDqWNpZGU= 4LC/4LC2 LnRvYXN0 IFNvb21hYWxp INCh0L7QsQ== aW1oZQ== 4YOS4YOU4YOc L2Ns IOCqquCrjeCqsOCqleCqvuCqsA== IGTDqXB1dA== IFR1Y2tlcg== IG9kcmU= 5bi45aeU IGNyYW5l INGA0LXRgtGW0L3QtNC1 YWdlbmN5 aW1iZXI= ICovDQoNCi8= KEVJRg== IGJ1YWg= IGdpY2s= INC30LXRgNGC IEVtaWw= IGxldHR1Y2U= ZXBvY2hz IElkb2w= IHJlbXBsaXI= IHRlbGVtZXRyeQ== IHBhcmxpYW1lbnRhcnk= 0LrQvdGL LUFwcA== bG90dGU= 0J7Rhw== 4LGI4LCy INin2YTZhdit2YTZitip UG9t IOC5gOC4hA== IM+Azq8= IGRvc3NpZXJz X2xhdW5jaA== 4LC+4LC44LGN4LCk IGZsb3du IFBlcnNpc3RlbmNl 0YDQsNGG0Yw= IE1hdmVy IHNobw== dW1iZXJsYW5k IGFjdHVlbA== IEtpbWJlcg== aW5uYW4= TGljZW5zZWQ= INGD0LfQvdCw IGthc2FtYQ== 4Kq+4Kqo4KuN4Kqv IGhvcml6b250YWxseQ== ICd8 INGP0LfRi9C6 X0ZNVA== LlJlcG9ydGluZw== 5a2U RXhlY3V0YWJsZQ== IGlubnV0dGE= IGN6YXN1 w7phbg== IOCqruCqvuCqsOCrgA== YXJhbmk= IGlhbGFo X2JhbmQ= emlueWU= IEFOU0k= X3Zpcw== 6Lu9 INCx0L7Qu9C4 5oCO5LmI6aKG5Y+W KGRyb3A= Qm4= INil2Kw= aW5zdXJhbmNl 57Wh IHN1a2U= IGNhcmF2YW4= X051bWJlcg== 5omL57ut IGFsdMSxbmRh IGlvdXRpbA== ICJ7ew== 4KSV4KWN4KS34KSV INis24zYs9uS INil2K3Yr9mJ 4YC24YCv4YC4 2K3ZitmG IGV0dGV2w7U= IHdvb25rYW1lcg== IOGDrOGDmOGDnOGDkOGDkOGDpuGDm+GDk+GDlOGDkg== IGh5ZHJhdGlvbg== QmF0aHJvb21z IHZlcnNjaGllZGVu IOCkm+Cli+Ckn+Clhw== IOWlpQ== aWplcg== IE1hZGg= IOCkm+Cliw== IG9wY2lvbg== 55S15b2x572R56uZ IGluc3Vm INGB0YPRhw== INeb15Q= IFBvZHM= KG1hbmFnZXI= IGdlbnRsZW1lbg== YXNob3A= YXV0b21hdA== IGFkbWluaXN0cmF0aXZh INWw1aHVvdWh1oDVodWv 4KSr4KSy X2dyZWVu 4oCZaW1wb3J0ZQ== IHZveWFnZXM= IO2ZiA== IPCflA== IO2E IOS4gOe6p2E= 4Ka/4Kao4KeN4Kam INGB0YvQvdCw IG1pbGhhcmVz INCR0LjQtw== IEJ1bGxldGlu IHJvdXBh IExvZnQ= 4YOU4YOi4YOY Um9ib3Rv INCf0L7Qvw== 2YjbjNix 0YbRltC+0L0= IG9kc3Ry ZWt0b3I= LnhtbGJlYW5z c3RpZA== c3Bm IOCuruCvguCusuCuruCvjQ== CXN0b3Jl YW5kZWVs IFZpZXdlZA== IGlubmVi INin2YfZig== IFZM IGdvdmVybmFkb3I= d2VpdGU= c2vDvQ== IOCmueCmsuCniw== IFNwb3RsaWdodA== IFJvb2Zpbmc= 4LGC4LCf IENvbXB1dGVycw== IOCksOCkueClh+CkleCkvg== IFJlZ2Vsbg== INmK2LPYqtiu2K/ZhQ== IGTDtm5lbQ== IE1hYg== IOGDouGDlOGDpeGDnA== LnBhaW50 4pmA4pmA4pmA4pmA4pmA4pmA IHBvdGVudGllbA== YXR0aW5n IENPUFlJTkc= IHBvZGVuZG8= INeb16g= 4qCA4qCA cXXDqnRl 2YjZhNiq 5bel5Lia IHdvcmtmbG93cw== IGxpbmd1aXN0aWM= cGrDvG4= IGJsw6U= YWhhaGE= 64KM INGP0LrQuA== LmVudW1lcg== 2YPZitmE INC20LjRgtGM 546p5ZCX IEludGVyc3RhdGU= IGRhYXJvcA== IExHUEw= IGRyYWFk aW9j IE5vdXZlbGxl IFByaW1lcmE= 5a6255qE IERhbnRl bWVtYmVyb2Y= IMSR4bqneQ== INmF2YPYqg== 56iL5bqm IHNrYWxs IGZlbnQ= IGRpc2FzdHI= 5b2p56Wo572R56uZ IGthd2Fp IERPTkU= IGFzZWd1cmFy IGtvcmlz 2KTZiNmG 2K/Zhg== 4KuA4KqV IEVzcGHDsW9s IHBlbmdl IGV4dGVybmFsbHk= R1RL INmK2LHZitiv Y2FzZWNtcA== Y2lwbGluZQ== IG1vcnJlcg== IHBvdHJlYmJl IHNvZmFz IHBpbmdhYXI= INC30LDQv9GA0LXRiQ== INin2YTYqtin2YTZitip IHNpbWI= 4KeD4Kak4Ka/ IGludGVycHJldGluZw== VHJhbnNtaXNzaW9u bWVtbw== IHLDqWVsbGVtZW50 IHRyb3ZhcmU= IGFnZ3Jlc3NpdmVseQ== X2V4Yw== IGV2b2x1w6fDo28= 0ZTQvNC+ INK70LXSmQ== IGZlaGx0 ICUKCg== IG9waW9pZA== IHRlcsOjbw== aWV1c2Vz IOC4hOC4suC4quC4tOC5guC4meC4reC4reC4meC5hOC4peC4meC5jA== 5Lq66auU6Jed6KGT 4LON4LKm4LOH4LK2 IOC5gOC4qw== 5LiH6L6G LkZJRUxE IHZlcmbDvGdlbg== INis2q8= IFB3 IHNpaW4= IEV0aGFu IG92ZXJoYXVs IElNUE9SVEFOVA== INGG0LDQsw== cmHDrg== 4Kao4Ka/4KaV IG5vdmk= L3Ns 0LTQsNGF IENoZXM= 16DXmdeZ150= Q2hr 5YWE IGx5cg== xJli 77yM5YiZ INm+2KfZhg== 44GC44KK44GM44Go44GG44GU44GW44GE44G+44GX44Gf O2hlaWdodA== IENoaXI= IHF1YWludA== 4LS34LWN4LSf IE5hc3M= IENoYW1iZXJz 2KfYptit2Kk= IG1hbm5l INmF2YbYrQ== 4YOQ4YOu4YOa4YOd INCd0L7QstC+0YHRgtC4 dG9uZQ== IGdlbmVyb3VzbHk= KFNlYXJjaA== IGNvbWJhdHQ= QFNldHRlcg== cHJvdmlkZXJz IGl0ZXJhYmxl INmH2YrYptip dXJhZGE= 4KuA4Kqd IEVuc3VpdGU= INW51aXVtA== IHZlcmRlcw== IGRlbnRpc3Rz IG1vZGVsZWQ= 5peg6ZmQ X2Ryb3Bkb3du 0YvRgdC7 6IKh5Lu9 IEx1ZHdpZw== IOCquOCqruCqr+Crhw== IHN1bmd1bGE= IHB1bXBlZA== IHBhbGVzdA== 7Ims QWJy IEpvdXJu ZsOkbGxl IFNvbWVyc2V0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== INC60L7QvdGG0LA= IGNyb3BwZWQ= ICJ7XCI= IOyWtOugpA== cG9uZW50aWFs 4Kq/4Kqo4KuH IG1hZ2x1bWF0 IE1hcnTDrW5leg== INmK2K3Yqtin2Kw= V29ya291dA== QVNDSUk= IOWMl+S6rOi1m+i9puiuoeWIkg== IGRpc2NhcA== IOCqnOCrgg== IHRyYW5zcG9ydGluZw== IFN0b2Nrcw== IHphbmlt INC/0L7RgdCy0Y/RiQ== IEVwaWQ= IOCukuCuqeCvjeCusQ== INGF0LjQudGF IHNrcml2YQ== U1RSVUNUSU9O IEdvZGRlc3M= IOCyuOCysuCzjeCysg== IFBlcnNpc3RlbnQ= KG1k U0FQ xZ95aw== IGlubGV0 IGh1c3RsZQ== aXR0cw== IGJ5ZA== LmFjdGl2 IOeZveWwj+WnkA== X3N0YWZm INCx0LjQsdC70Lg= RHVw IGNvbnRlbXBsYXRl aWRlbmF2 IHN0YWRl IOCkh+CkpOCkqOCkvg== INWh1abVpA== 2YjZhtqp2Yg= INCy0LXQtNGD0Yk= IFVJVA== IEdhcm1pbg== YW5kZXQ= IOS7gOS5iA== 0L/QtdGH ZWRlcmVu IOCwrOCwvuCwsg== Lkxpc3RlbmVy INWv1bjWgA== aWxhdA== aWF2 IHByemV3 4oeS IG11bGk= IG1pbmltYQ== IMO8YnJpZ2Vucw== IG1qZXM= IFhpYW8= IFdpc2RvbQ== IGJhaGFzYQ== dGVycmU= IEVudHNjaGVpZA== IFNhbW9h IGVudHJvdQ== X3BpeA== IH0pKA== Z2VzZWxsc2NoYWZ0 IHNjaHJpamZ0 IE9yYml0 IFJFTEVBU0U= 66i5 IG5ldHRl 5aSc5aSc5ZWq W0xpc3Q= dXJpbm4= LXN0ZWFjaA== INil2LfYp9ix IE1lZ2hhbg== IOCkleClh+CksuClgA== IOCqquCri+CqsuCrgOCquOCrhw== Oicj IGVzcGVyYW7Dp2E= YW1heg== IENoYW5kbGVy IG11dGFuZQ== aXB2 aWVydGFz IGdlc3BlZWxk IG5pcg== 15XXkNec IOCmquCnjA== IHNqw6E= 4LmA4Lir4LiZ INC+0YHRg9GJ0LXRgdGC0LLQu9GP0LXRgtGB0Y8= X3Bt eGZmZmZmZmZm IE1hdGNoaW5n IFRa 5Z2m cmFndA== IHNoaW1tZXI= IE1pbmE= PWxlbg== VEVD RmFzaGlvbg== INGF0LvQvtC/ LnVuc2hpZnQ= IGZhdGE= IGlzaW4= IGluc3VyZw== ZW5zZXI= INeR16nXnA== 0LXRgNCw0Lw= IOCuquCvh+CusA== esOkaGw= IHByb2pla3R1 INmF2YbYuNmI2LE= IGRvb20= IHRvbWFkYQ== IOGDqOGDlOGDqg== ZXRqZXM= 6aaW5YWI dWt1bmc= IGVzcMOtcml0bw== 4KS14KWN4KS5 dWxpd2E= IOeDrQ== QXJxdWl2bw== IHN1cHByZXNzZWQ= INeU157XkQ== IHJlZmVyZW5jaW5n IOCkleCljOCkqA== 5byx YW1pcg== IG1vbnRv IHNlamFr IGthbnNramU= INCy0L7Qt9GA0LDRgdGC0LU= YW5naWJsZQ== UFJFU1M= IG5haGE= IGR1bXBpbmc= 5oiS IHByb3ZvY2E= INmF2YbYqtis2KfYqg== cnVi Zmlz IOCmheCmreCmv+Cmrw== IGVudHJldGllbg== IOCyteCyv+CysOCzgeCypuCzjeCypw== ZW5uYQ== IE1vb3I= INC70LDQug== 5pe25pe25b2p5a6Y572R LmZhZGU= 2YHZiA== cmVsc2Vy IG5nd2FhaOG7i2E= INin2YTZgtix2YY= IHBydWRlbnQ= INC60LXQu9C40L8= IHNuZWxoZWlk 4LSq4LWN4LSq4LWG4LSf4LWN4LSf4LWB 2LLZiQ== IGhpc3Rvcmllcg== IOCkhuCkteCkvuCknA== IGxlYXNlcw== IOGDruGDqOGDmOGDoOGDkOGDkw== IEZJRk8= aG91dA== IERlcnI= IGt0ZQ== IGRpc2c= 5ZGK6K+J 0LvQsNGC0Lg= Q29uZXhpb24= IHR4aGU= cHJlc3Q= LVRo IFR1cnRsZQ== eXRpbmc= IOy6 IGluYWR2ZXJ0 dXRpcA== INin2YTYo9iz2KfYs9mK2Kk= INC40LzQtdC9 IE9XTkVS SXRlcmF0aW9ucw== IOCqnOCqtQ== X1NTTA== 4K6+4K6y4K+I aXR1YXRpb24= IOyekeyXhQ== IHByZXBhcmE= 2LHYp9mC2Yo= YXlhbmE= IGhyYW4= bGluaWVu IExpYQ== IHZzaQ== IOGDlOGDog== IHJlY29tbWFuZGU= dXV0aWc= CWluc2VydA== IHJlcGV0aXI= IOCqluCrh+CqoQ== RW50w6Nv 0K3Qug== 4KSJ4KSo IHRob+G6oWk= 2K7Yp9iw IGPhu6l1 IEZvcmc= 2KvZhdin2YY= INC805nRgdC10Ls= INC40LfQsw== aXZz IFF1YXJyeQ== IHR1bm5lbHM= IFdhYXJvbQ== QUNIRUQ= INK/0YvRhg== INC80L7QttC10Lw= aWxsZXJz b2xvZ2llbg== IEZyZXVuZGlu IFlhcw== IHRlaXI= bnZhcmNoYXI= IGF1dMOpbnQ= IEhBTkRMRQ== U25pcHBldA== IGRlcml2aW5n Kyci dWthcw== LlByZXBhcmVk IGxvcHA= IOuqqO2FlA== RnVzZQ== ICQoIjw= Pk4= INK30LDSsw== IHRlcnJlaW4= KHN0cmluZ3M= IGlubm9jZW5jZQ== 2LbYp9mK2Kc= IEF1c3NjaA== TEVW 4K+N4K6f4K+N IGRpbGw= IFByZXN0b24= IHBvc3PDrXZlaXM= IGZvcmJpbmQ= 1aXVrg== bWlzYw== IOCkl+CksOCljeCkqOClgQ== INCY0YHRgg== IHNvbmhvcw== 4KS+4KSu4KWB4KSz4KWH IEFjaHQ= IGFuYXI= IMOzcmfDo29z cGxhdHRl 0L7RgdC4 IEJlZ3I= IGNvYXN0bGluZQ== fSk7Cgov dW1ibGVz fX07Cg== L25vdA== LnNwYXdu INW41oLVtw== X0ZpZWxk X0FYSVM= INmF2LTZg9mE2Kk= J8OpbA== cmFwaWU= IGZvcndhcmRpbmc= IGluaXpp IE5HTw== INis2KfYqtuM 0LDQu9Cw0L0= IE1hZGQ= X2FjY2VwdA== w7xobQ== aXNsYXRpb24= IGNhcGFjZXM= UnQ= 0LzQvtGC0YDQuNGC0LU= YmVsZWlk aWdnaW5z IGF1dG9yZQ== 0YfQuNC70LjSmw== IGVyc3RlbGx0 IHNjaHJlaWJ0 5o6S5ZCN xJ9pbmU= LGdldA== aXNlcnQ= cXVpcmluZw== zrzOrw== 2YjZgdix IFB1Ymxpc2hlcnM= IGVya2Vr IHdhbmFuY2hp IOCwleCwsOCxi+CwqOCwvg== aW55aW4= 4La44LeS IHNhbWVubGV2aW5n ImxvZw== 2qnZiNix IGdlemVpZ3Q= IG1lZGl6aW4= IGRpc3F1ZQ== 4YOU4YOR4YOQ4YOW4YOU INWl1oDVr9Wh1oA= IGNvbm5haXM= ZWlucw== 5q275Lqh Qm9zdG9u IOCmpeCnh+CmlQ== IHJlbWl4 IGRpbmk= cm91bGV0dGU= cG9rZW1vbg== Qks= QUxFUw== bmluZ2E= S2V0 SGVhdGluZw== dW50YXJ5 KGJvdHRvbQ== IGVzY3VlbGFz 0YTQvtGA bGF1 15HXldef INio2KfYrw== IGFudGlnYQ== dW5jaWFy INCy0LjQuw== 6IqC54K5 IGVyZ8Okbg== INGB0L3QsNGH0LDQu9Cw eG9y IS4KCg== Z2VicnVpaw== IHJldmVudQ== IGZsb3dlcmluZw== 4YCK4YC54YC4 INCh0LXQudGH0LDRgQ== 4Kq/4Kqj IOC0lg== dHJpYW5nbGU= INC/0YDQvtC40YHRhdC+0LQ= 0LTQsNC/ IGFic29yYmluZw== IGNvbXByb21pc3Nv Sm9zZXBo SXNsYW0= IOCkrOCkvuCklQ== IHNla3VuZA== QmVybGlu IGRpc2Nvcw== LnNh 0Y/RidC40Lk= IGFpbWVy IFNpaw== 4LmC4LiZ YmFrYQ== IOCkleCkv+Ckgg== IENoYXJt 4Ka+4Kav IENhaXhh IEZsZW0= INGI0YPQu9Cw0Lk= 0LjRh9C10YHQutC40LzQuA== IHByw6FjdGljYW1lbnRl LUNvbg== IGxsZXZhZG8= IHBlcmN1c3Npb24= IOCkquCkueCkv+CksuCliw== 0YPQvNC10L3Rgg== aGV0aA== IOyKpO2DgA== INio2LHYp9mF2Kw= QnJpZ2h0bmVzcw== dHTDpA== IFdhdHRz 5aic 4bmB IOCyheCypeCyteCyvg== INC60L7QvdC60YPRgNGB INin2YTYpdmG2KrYp9is bW9pbA== IHByb2Vm INm+2LA= IGJleml0 5aW95Y+L IGh1YnVuZ2Fu IOCmheCmquCmsA== 0LfQsdC1 X3BsdWdpbnM= IGVzdGFibGVjaW1pZW50bw== IHByaW1laXJhcw== IFVJRg== LnJlY2lwZQ== INC30L3QsNC10YI= VmVyc2U= INio2pHbjA== SnNpaQ== SmVzc2ljYQ== IeKAnQo= Lm11 IEZvcnNjaHVuZw== IHBlbGxl a3l0 IOC0pOC0vuC0sA== IHByxa8= 4YCU4YCx IGtlxI8= IOCwleCwvuCwtQ== INeU15bXntef 4Kep4Kem 55S15b2x5Zyo57q/6KeC55yL RXhlY3V0aW5n 0YPRi9C9 IG5hYW1t IGRlZmVuc2Vz 2LHbjNqp24w= IGNsdXN0ZXJpbmc= LW1hcmdpbg== IOCmnOCmrg== ZXJlbw== IEhlbG0= IGRhdG9y CXRpbWVy INec16LXkdef X2dvb2Rz 4KaV4KeN4Kaw4Kau Picu IGFsaWE= 5L6b5bqU IOCmpuCnh+CmqA== IOS4g+aYnw== 77ya44CK IHNrb2xl VmlyZ2lu LnZhYWRpbg== dWtobw== bWVybw== IGdlbmFubnRlbg== b3hv IOC3gOC2sQ== IHNlag== IOCmsuCngOCmlw== IHZlcmtvY2h0 CWxvY2F0aW9u 4YOU4YOo4YOU IG3DvG1raW4= INGC0LDQutGD0Y4= IeKAnA== INCw0YDRhdC40YI= 4LK+4LK14LKj 4LOH4LKk4LON4LKw IHByb2ZpbGluZw== INin2YTYo9mH IGFpbid0 IGNodW5n IGxvY28= IHRvw6Fu 1avVr9Wh1bY= IENyZWRlbnRpYWxz aW50bA== IGNpxIU= KGNvbW1vbg== IGp1Z2U= IGludmVzdGlnYWRvcmVz b3ZvdQ== UmVwbGF5 INW91brVodW9 L25ldHdvcms= IHBvbWVtYg== IOCyl+CzgeCysOCzgQ== LdCa IHJlc3Vy IGRpemVt IGVreg== 0YHRjNC60ZY= QUdNRU5U d2VidG9rZW4= IGbEgw== IHZlcmdlbA== IGNhbmzEsQ== 5LiA5pyf IELDvGg= IM+Mz4DOv8+F TlNEYXRl IHlhbmk= 0JDQkw== INC/0L7QtNC90Y8= IGNvbWZvcnRhYmVs INeV157XqQ== IEludGVyZXN0aW5nbHk= IEthcGl0YWw= RkRB 0LvQsNGA0YvQvQ== IGNvbWJpbmFy IGdpbnQ= IEdNQw== IFBhdHRlcm5z IEVzdGhlcg== 4K6/4K6p4K6w4K+N 2YjbjNiq IOKAnAoK INmD2Yo= 1aHVr9Wh1bU= J8Opdg== IHNvd2llc28= amF5 2LPZitmE IOCwnOCxgOCwtQ== ZnVlbA== IGtpc3NlZA== KC8q X2V4YW1wbGVz IG5lY2Vzc8Ohcmlh U2FnYQ== YWtpcw== IOqyve2XmA== IGxhbnphbWllbnRv ZXZhbHVhdGU= c2lj 0KHQvtCy YW5jaWVycw== IHB1c3Q= IEFuYWxvZw== ICMn cm9v cm9tb3Rpb24= IGhhYmE= IOCupOCviuCun+CusOCvjeCuqg== LnNlY29uZGFyeQ== IHN1Ym5ldA== 15DWt9eh15g= U2FjaA== RW1haWxz INGB0L7Qs9C70LDRgdC90L4= IGN1aXM= IHZhbHV0 S3Vy IHBhZ2luZw== IFRFTVA= IOCmpuCnh+Cmk+Cnn+Cmvg== 4YOj4YOg4YOQ IFRyYWNrcw== LlhhbWw= IGR6acSZa2k= b3Byb2plY3Q= IGFwcGVuZGVk ICdbJw== aXphbw== aXRpa2E= IFdvcmtzaG9wcw== IOS/ruaUuQ== INC80LXRhdCw0L3QuNC30Lw= 2YrYp9io 4LGL4LCh IG90aQ== IGzGsHU= IOWpt+Wptw== IFBpc3Q= ZWxvcGU= 5qo= IHNoZSdk TmVzdGU= dmlubw== KChb cm9uZQ== IGFycmVzdHM= INmD2YjZhg== IGNvbmZpcm1hcg== INin2YTZhdiz2KTZiNmE Lk1ldGE= IHNhbHRv IOCqhuCqquCrhw== INC60L7QvNCx IOOCpg== IEFmcmlxdWU= INKb0LA= Oi0KCg== w7ZyZGU= IEVpZ2VudA== 2q/Ystin2LHbjA== IGtpdHRlbg== w7NuaW1v 4LC+4LCw4LCo4LC/ IGV2ZW50dWVsZQ== IHB1ZXN0YQ== INin2YTYqtis2KfYsdip IE1lZXRpbmdz IHRyYXR0YQ== IM6tzr0= INC90LDQvdC10YE= 5pyA57uI IHRpYQ== 5LiW55WM5p2v h7Q= IGludmFs S2lk LWZhY2luZw== IHJpc2No YnV5ZXI= IOCkl+CkguCkreClgOCksA== 65Oc64qU INiq2LnYp9mE24w= 2KbZhNip IHFhYmE= IHRvcGx1bQ== amFucw== IG5hdw== IGPDqXU= IFRlYg== IERvbGxhcnM= bmljaA== IGtyb25lcg== INCx0YPRgtC4 KeKAnQ== IHNvdXRlbmly YmxvY2tlZA== IEtyZWF0 JykpKQo= Y3JhdGU= IOCmruCmqOCnjeCmpA== IGVjb25vbWlzdHM= LmNvZGVj 5aSn6ZmG 44KC44GG X0NsaWVudA== aWN0dXJlZA== IGNhZGFzdHJv IEliZXI= T28= IHZyaWp3aWxsaWdlcnM= IGNoY2U= QnJhZA== QWxpZ25lZA== YXVh LkRlcGVuZGVuY3k= 5qOA5rWL JGZpbGU= IGV4YWNlcmI= QW1w zpzOtQ== ZW5hcnk= LdC80LDQs9Cw0Lc= IGNhcnRlbA== 4LiB4Lin4LmI4Liy YnVncw== cmlhbA== X2d1aWQ= QWZmaW5l LkF1dGhvcml6YXRpb24= eXN0ZQ== IEJ1dHRlcmZseQ== IHBydm7DrQ== dW1lbnRv IGJhY2hlbG9yJ3M= IGF1c3A= INC90L7QstC+0YHRgtC4 5LiA5Lqb 2KLYrtix IHNjaG9lbmVu YW5nZWxv IGNvbXBhcmFjacOzbg== QHRlc3Q= IOCqreCqvuCqnOCqqg== QWJzZW50 IHJha2Vu IEthdHk= 4K+N4K6V4K6z4K6/4K6p4K+N IOCwquCxhuCwpuCxjeCwpg== KEZ1bmN0aW9u IEJhcnJldHQ= INGB0YLQsNC0 2YjZhtin2Ko= JGNvbnRlbnQ= 0LXQstC+ INC80LDRgdGK 4KuN4Kqw4KuA4Kqv 66CJ IGJ5Y2g= IGFuZ2VzY2g= IHBoaWxvc29waGVy YWtvbQ== IHByaW1vcmRpYWw= IGZlc3Rpdml0aWVz 77yM5Y2z 6LSi57uP IOCkteCkv+Ckp+CkvuCkqA== IG11c3N0ZW4= IHBsYW5ldGFyeQ== X2FtdA== b2Vu 0LbQtNGL IHJlY291cnM= 6rCR IGdlYnJ1aWtlcg== IHp1dmVybMOkc3M= INC90LDRh9C40L3QsNC10YI= 4Kqt4Kq+4Kqw TGFuZGluZw== IEhhbGI= IGlsYW5uZw== IHByZWRpcw== INOZ0L/TmdC90LTQuA== U2NhbGVy IEFEVg== w61waW9z Q29tYmluYXRpb24= 2YPYp9mG2YrYqQ== IGJpYXNlcw== bGnFoQ== JykpLA== d29ya2Zsb3c= IHNvY2lvcw== 2YbYr9mF2Kc= 4oCUaXQ= LmNoYXJzZXQ= IOCwquCwpg== X2xpc3RlbmVy Q3Vw INC30LDQtNCw0L0= LmVuc3VyZQ== IGFuY2hvcnM= yJtl IMSMZXNr w6lzYXI= IExJTg== INC/0L7QtNC/ 4Kq44KuN4KqV IHRlbmdhaA== 4KuN4Kqv4Kq+4Kqw X2NhbnZhcw== IOCqquCquOCqguCqpg== INGB0LXRgNC4 VXc= IOCwh+CwguCwoQ== QAo= IGRpc3Byb3BvcnRpb24= IEx1Y2lh IGFuZ2V3 4LGB4LCy4LGN4LCy4LGL XSkq IHByZXBhcmFjacOzbg== LXBsYW4= dWhsZQ== IGZhw6dhZGU= IENvbG9uZWw= Q1VTVE9N INCl0YPQtA== 5Lq65rCj IEvDvHI= INij2LHYtg== U1RSQUlOVA== OkludA== IHJhem9u INCx0LXQu9Cw0YDRg9GB0Lo= KSkpewo= IGF1Z21lbnRlcg== Rmxv 7Y+s7Lig 5LiN5pat IGt3aWp0 dWxhaQ== INC+0LLQvtGJ w6F0ZXI= INC60L7QvNCw0L3QtNGL w6lhcw== IHNncg== b2xlY3VsYXI= YWdvemE= IE1vemFydA== X2xhenk= V0s= w6FpZGU= OikKCg== aXNpb25lcw== aW11bA== IG9yaW4= X2xhcmdl RU5EQVI= 2ZHYpw== IG9uZGVyc3RldW5lbg== aW1waQ== IEFnYXI= IEtvbGxlZ2Vu IOC0ruC0v+C0leC0muC1jeC0mg== QUNDRVNT 67Ko IG9yaWVudGFs IGFyYmE= IG1lZGlhcw== YWRldA== INeQ15zXog== IGFzb3M= IGJlcsO8Y2tzaWNodA== Rlk= dW1pcw== 0rPQsNC4 IGFhbmxlaWRpbmc= IHNlcmRl LlNUQVRVUw== IOCmheCmlQ== IGFtw6lyaWNhaW5l d29obmVy QUJMRUQ= IEFuZ2U= IGdlcGxhbnQ= emFkbw== a3Jh IHByb2R1emly IGF0dGVzdA== 4KSq4KSf REFUQUJBU0U= Y2Vnbw== w6ltYXRpcXVlcw== 576p ZnJhdQ== IOC0puC1h+C0tg== INmF2YbYqtiu2Kg= 0YLRltKj IMO8cGrDvG4= L01haW4= IHByb3Rvxb5l IENsYW4= IG9udGJpanQ= IGltbWVyc2lvbg== INeh16I= INGA0LjRgdC6 RGFubg== IGt1aXQ= IM+DzrfOvM6xzr0= 0LrQuNGC0LU= IOCqsOCqueCrh+CqtuCrhw== INCw0LzQuNC90LjRgdGC0YA= IHBpdMOk IGVpbmdlZg== IM6zz4HOsQ== aXJnZQ== YXTDs3Jpb3M= IG9wdGltYWFs IHByZXN0YW1vcw== 6LKg IE1ldQ== IGVtcGxlYWRv ZW5zcGllbA== ICcpLg== IGRpamU= INGB0YLQvtC40LzQvtGB0YLQuA== 0YTQsNGC CQkgICAgCQ== INC30Yw= IEJlYWNvbg== IGNvbmZpZGVudGx5 IGNvbXByb3Y= xI1pbw== 4LKX4LON4LKw4LOG4LK44LON Y2F0ZWdvcml6ZWQ= IHNpbm5p INit2Kg= YWxnaWE= cHJlbg== b3RpZnk= d2l0aGRyYXc= LsKn IFBj dW1pZW0= IGNvxZs= INGA0LXRh9GM 0LXRidC10L3QuNC1 RU1T 24zaqdiz IGJhbGxvb25z Lk93bmVy IG92ZXJjb21pbmc= J10uJzwv VHJ1Y2s= IGZhYnJpY2F0ZWQ= IOGDk+GDkOGDmOGDrOGDp+GDnQ== IENyaXRlcmlvbg== 2LTYqtuM IHByZXZlbmNpw7Nu IGthbWI= b3J0dXQ= INin2YTZhdio2KfYsdin2Kk= IHBsYXNz IOCkp+Cliw== IHB3b2R3aQ== IG9sbg== LmZt 4La64Lan IGNlbnRyYWxseQ== IG1hdGnDqHJlcw== IGNhbGliZXI= bcOr IOCqteCqvuCqguCqmg== IFJlY2hlcmNoZQ== INS71oA= 5YGP IGVjb2xvZ3k= IGFubmVydA== IG9wcHJlc3Npb24= IEh5ZGU= IGzDqWdlcg== IGRpZmbDqXJlbnQ= IHBvZXRpYw== w7Nwb2xpcw== IEJydXNzZWw= IExleGluZ3Rvbg== IH4vLg== IHBsYWZvbmQ= cHJvYmFibHk= IGZhbmc= d3JhcHBlZA== INio2LHYrA== 5aix5LmQ572R5Z2A IGNvbnRlbXB0 0YHTmdGC YXRlZHJhbA== IHJlc3RyaWN0aXZl IGxhc2Vycw== IOydtO2VtA== IGxlZWs= 5biv IEFwcHJveGltYXRlbHk= CXZhbGlk 5piO56Gu IGFwcGVhbGVk IG1lbnN0cnVhbA== IHFleWQ= ZXN0aXM= CXJlZg== OnVzZXI= IERhbmllbHM= IOKAnOKApg== 7ZWc6rWt zIFu IExhbmRzY2hhZnQ= ZnVuY3Rpb25hbA== Ly9A 0YfQuw== K2M= 2KPZg9iv 56K66KqN 0J3QsNGI IFJlZHM= 5YG2 INin2YTYrNmF2Lk= INWh1oDVv9Wh1aTWgA== RW5maW4= Znly IGlubmVo 4LOA4LKy IEJ1bGdhcg== 2KfZgdit2Kk= YXBhbmc= 0LDQttOZ0LvQsNGA IOCuruCupA== dXJhY2nDs24= CWVtYWls IHRlY25vbG9naWFz 5bqD5ZGK IHnhur91 IGN1YXI= IGZvcm1hZGE= IG11aWQ= IHdvbw== IHBhc2ly LlNoYXBl bW9uZ28= INin2YTYp9iz2KrYq9mF2KfYsQ== YXV0aG9yaXpl IGvDpHl0dMO2 IHZpdmVu cmV0w6k= IG1pY2E= IOC4q+C4peC4seC4hw== IGdpaw== YXVi IHNpZ25pZmllcw== 0YLQtdCz0LXQvQ== 5pyA5paw6auY5riF5peg56CB IHJlaW5v LWltYWdlcw== IHBpbnRlcmVzdA== IEZhdm9yaXRlcw== dWx3YQ== bml2ZWF1 QHN0dWRlbnQ= IExvYWRz IGJvcmRv INGC0LDSkw== IHN6eWI= QkJCQg== cHJpb3I= 5aSa6YeO57uT IMO8bGQ= c2tpY2g= TW9p INWh1brVodWw1bjVvg== IHNvbGlkcw== IOCkpuCkleCljeCkt+Ckv+Ckow== IGFyYcOn IElwc3Vt IGRpZ2l0YWFs RXhl 0L3QsNC/ ZXJhYXI= IG3DpXR0ZQ== LtCc U3VyZg== dXRpY2E= IHJpYWw= IGludm9sdWNy IGF1c2dlemVpY2huZXQ= IFNldmVy e3g= 5aSp5aSp5ZWq IGNvbnZlcnRpcnNl 7JmV 4oCiCg== IOGDnOGDmOGDqOGDnA== IG1hbmdydXA= 66+A66Gc IEthbnll IGVyc3RtYWw= dnBu IHRpeg== IOCujuCuqeCvjeCuquCupOCvgQ== IOGDmOGDoeGDouGDneGDoA== IE1m INGB0L7QvtCx0YnQtdC90LjQtQ== IElTZXJ2aWNl w7Bz Q3A= 4YGE XHdlYg== IOuTseydmA== IENoZWNrYm94 INW+1avVsw== 2K7Ziti1 16LXqNeh PEZ1bmM= Y291bnR5 INeU157Xpg== INCt0L0= X21hcHM= IHllbGxpbmc= IHNsaWQ= IHJlcHJlc2VudGFjacOzbg== INmF2K/bjNix a8O8bA== IHJvYQ== U2hlcg== IGdhdGVk UFJPQ0VTUw== 15nXk9ei YWdlbmRh IGluY29tcGF0aWJsZQ== IGVzcGVz INm+2pHavg== INC50L7Smw== IOCmqOCmv+Cmr+CmvOCnhw== IHdu aWFyZg== IHByb2Nlc2FtaWVudG8= IGRvb25h PCY= IGJhY2g= X2Rpc3BhdGNo IFJldHJpZXZlcw== dWl0dG9u KH4= IOCkl+Ckv+CksOCkq+CljeCkpA== 2LHZitmF2Kk= IENEVQ== IGpvbA== amVkZQ== IOCkquCkvuCkleCkv+CkuOCljeCkpOCkvuCkqA== 44Ki44Kk 4LOn IGxseQ== aW56aQ== IGJlcmF0 IOCkmuClgeCkleClgA== IOC4geC4peC5iOC4suC4pw== IFNoYWtl Q29uZQ== 4KeI4Kak4Ka/4KaV IOC4quC4oQ== IOCqhuCqsOCri+Cqqg== b25hdsOtcnVz 4Ka/4Kal X3BhcnR5 IGFkdmVydGlzZXI= w6FsYWdh INC00LXQstGD0YjQutCw 4KSy4KWH4KSc IFF1cg== INC+0YDQuA== INGA0YvQsQ== INGN0LvQtdC80LXQvdGC0Ys= IGJlZ2dpbmc= IGFjYXJh 5pes 4oCN4LSq INmI2K3Yr9ip INCx0YPQtNC10YLQtQ== IGdpxYg= IHNvY2lldMOg d2VjaHNs IFNyYg== IGx1Y2U= 44OW44Or IOCkqOClgeCklQ== INC80LXRgtGA IFJPVVQ= INmE2K/ZitmG2Kc= INio2YbZgdiz IEthcmVuYQ== IExlYmVuc21pdHRlbA== 44CC5L2G5piv xLFycw== IGxpY2VuY2k= bW9kZXI= 4YOU4YOa4YOY4YOQ IHN2YXJ0 INC60LLQsNGA INCY0LvQuA== INCY0LLQsNC9 IHVudXQ= IHJ1eg== IGhlcmdlc3RlbGx0 Q3Q= IGlycmVzcGVjdGl2ZQ== 4LWA4LSw UVVBUkU= JAoK IOy7qA== IGF1cmU= IHZpc2Nvcw== IO2PieqwgA== SVRVREU= IFJPT00= IOS5heiNiQ== L3NjcmVlbnM= IGNhc2luZw== QWZyaWNh IOGDl+GDkOGDleGDkw== INmK2YbYp9mK2LE= W1I= INqq2YbZh9mG IHVpdHo= XVtd 4KS/4KSV4KWN4KS4 IOCwh+CwtQ== IGFnZW5jaWE= Q09OVEFDVA== IO2VhOyalO2VnA== ICI9 eXPFgg== 5a+55q2k INC30LDRhw== Lm1vbml0b3I= X0NPTlNUQU5U YXducw== IGPDonk= KGNvb2tpZQ== YXVnbWVudA== bGVybGU= INGB0L7RgdC10LQ= INGF0L7Rh9C10YLRgdGP CWhhbmRsZXI= IHByZWRpY3Rz IHJlY29nbml6YWJsZQ== IM6zzrXOvQ== 0ZjQsNCy IM66z4XOsg== 0LDRgtC+0YDQsA== IM6azrHOuQ== INGH0LDQtA== INin2YTYsdmF2YQ= IHRy4bqtbg== 4KS+4KSC4KSa4KWH IHJhcmE= LlF1ZXN0aW9u IHN0ZWRldA== INi52YTZiNmF IG5vZ2Fs INmI2KjZitmG IHBsYXlsaXN0cw== 4KSw4KSy 15XXk9ed IGNwcA== IENhdGVnb3JpYQ== aWNlcHM= INCw0LA= IGNvbnN1bHRl IHNwZWNpYWxpemF0aW9u IHlhecSxbg== z4HOv8+Fz4I= cmVzdGFydA== IG1hbGlnbg== bGVlZA== IHByZWNlZGVudA== cmVuZA== VmllbGU= IGLDpsOwaQ== INC30LDQs9GA0YPQtw== LXNvcnQ= IERpYXo= IHZpZ2VudGU= IGxlbmRv IFNob3dpbmc= KHRpbWVzdGFtcA== YXV0b21hdGlvbg== 4Li34LmJ4LiZ J2Vi 4oCZb3JnYW5pc2F0aW9u dmVhdQ== LiR7 15DWt9eg15Y= X3dw IGZvbnRlcw== IGxlbmRlbWFpbg== IHBpcmF0ZXM= IGdvw7s= U3VnYXI= IGNhcmlj 0L7RgtC+0Lk= IFRpZA== IG1ub2dv IFZlcmdhbmdlbmhlaXQ= 4YOc4YOU4YOR4YOY4YOh IGRhw7Fvcw== 4KWB4KSr IGhlaW4= KGRpYWxvZw== PXRleHQ= RGF0ZXRpbWU= bmluZ3U= QXV0aG9yaXRpZXM= LG5pbA== IHNuaWZm IGtha2E= INin2YTYqti52KfZhdmE IGNvb2xlc3Q= IG9jYXNpb24= INem15nXmdeY 44CC5YW25Lit YW5vcg== IEJyb3ducw== IHN6ZXJldA== IEFscGluZQ== IHNhbXN1bmc= IFpB 0LXRgtC60LA= X2FuaW1hdGlvbg== 0L3QsNGC0Ys= Q29udmVydGVk bmFrZQ== aWVrxaE= IERpeW9z IGJldHJlZmZlbmRl IHVwb3JhYmxq IOGDkuGDo+GDmg== KGFyZWE= IOCkn+Ckv+Ckqg== INGA0LXRgdC/0YPQsdC70LjQutCw IOCwteCxgOCwoeCwv+Cwr+Cxiw== IOC2muC3ig== 0LvQtdC90L3Ri9C5 KGFi IOCmueCmpOCnjeCmrw== IEFudGlxdWU= 0YDQvtGe Z2ly IFJlbGlhYmxl RHg= IEVudGl0aWVz xZ90ZQ== RGV1dHNjaA== IGRpc2d1c3Rpbmc= z4PPhM63zrzOsQ== IHBhbG1z 4LKV4LOB IOWkqeWkqeS4reW9qeelqOS4jeS4rei/lA== dXN0cmU= IHDDom7Egw== IHByb2Zlc29yZXM= INC30LDRgNC/ INCy0LXRidC4 IOCkluCli+Cksg== IO2PrQ== IGtpbGth X2Jsb2I= b2t1cWFsYQ== R2VuZXNpcw== IGVtZXJnZW5jaWE= X3VudGls IEFscGhhYmV0 WEY= L3N0b3JhZ2U= IEZyZXVk IHByZXp6bw== 4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LmA4LiV4LmH4Lih IMO8cGo= 5Z2P INio2YbYqg== T3duZXJz Lm5vdGVz IEtpbmk= w6h1 IGludGVycnVwdGlvbg== IGVudmlv LkRFTEVURQ== IFNNQg== L3JlZg== IHjJmQ== IE1hcnRh INin2YTYrNin2YXYudip 4LKr4LON Y3RpZQ== IEJhY2twYWNr aXNpw6fDo28= IEJ5cm9u IGRoYW4= IG1lxJE= IGZlc3Rhcw== IHZhaWh0 b21pZQ== L0NyZWF0ZQ== IG1hasOt X2NvbnN0cmFpbnQ= INGA0LXQsNC70LjQt9Cw0YbQuNC4 U1o= IOCmj+Cmlg== INi62YTYtw== INqv2LI= INeU16nXqg== cmljbw== IGdhbXBhbmc= IGRvbm8= IHJlY3VwZXJhw6fDo28= YWJpZGlvbA== 0YLRgA== IDo9Cg== IGRpc3J1cHRpdmU= INin2YTYudin2LXZhdip IGVpbmRlbGlqaw== IERpc29yZGVy ZXN0dXJl T0xU INqJ25DYsQ== IGZpbmFuY2Vpcm8= IGhhZGxheQ== 6IOG5ouW IHF1aWJ1cw== L2V0Yw== 4Kay4Ka+4Kaw IERpc2FibGVk Z3Bpbw== Z2Vrbw== X1Jlc3VsdA== 44Oz44OA IG1hbmRv INC70LDRgQ== XSIpCg== aWd0aWd0 INGZ IHN1YnRpdGxlcw== IGNvbnRhbWluYW50cw== IHphbmQ= X3BhcnRpdGlvbg== anVs YcOxb3M= JS4K INeR15PXqNea IFNvY2llZGFk IEtvbGthdGE= a8O9Y2g= IFJlc3BvbnNpdmU= IE1TTQ== VW50dWs= YWt1cg== IGV4cGxvaXRlZA== YW1lcmljYW5v 0L7Rh9C90LjQug== 2YXZhtmJ XENvbnNvbGU= IGZ1dHVyb3M= IGNoZXJpc2g= IGhlYXJ0ZmVsdA== JGQ= IHZldGVyaW5hcmlhbg== IGNvbW9kaWRhZA== IOCmr+CngeCmleCnjeCmpA== IOqwiA== 4KSX4KSy INiu2LHYrw== IOWkp+WPkeW/q+S4ieWSjOWAvA== 0KDQvtGB0YE= WUNMRQ== LkRJUw== aGc= LU1heQ== 4Kqo4KuN4Kqo KGNwdQ== IEplZGVy IGRlcGFydGVk 2LfYsdmC IEtvbW1lbnRhcg== LWNoYXQ= IHBvbGxlbg== INGF0LjQuw== IGxpZWw= R3VhcmFudGU= INC00L7RhQ== IENvdmVu INC70LDQsdC+0YDQsNGC ZW1lbmFuZ2Fu IHBpYWNl TXVuaWNpcA== Qm0= X25pbA== IGluc3RhbmNpYQ== YmlsaXI= 0LjRgtC10LvRjNC90LDRjw== IOCuruCvh+CusuCvgeCuruCvjQ== LWJvb2tz IFByb2NlZWRpbmdz IGxvZ2lxdWU= IEFsbGlzb24= IGNpZ2Fy IGJlcmE= IHNoZWRz IENsb3N1cmU= IGhhdXNzZQ== X0lOQw== IGRlbGVjdA== IG1lZGlvY3Jl L2ZsdXR0ZXI= IOCqnOCqqOCrjeCqrg== IHd1cw== 24zZhduM IGRpZmZpY3VsdMOp IGNvbW1hbmRlcw== xINv IGZsZXI= IHRpcmVy INC+0LLQsA== IEplcmVt ZXRyYWlu cmluYQ== X2JpbnM= RXNwZWNpYWw= 0ZbRjg== IHNvZXA= X2NyZWF0aW9u IG1hamk= 4KqV4KuN4Kq34Kq+ INiv2Kg= Oi8vIg== Y29tcGFu IGR1bGNl INin2YbYqti42KfYsQ== c3Rha2Vz 4LmA4Lil4Lii ZGVyZQ== IFNsYW0= INCh0LDRgNCw 55WZ5LiL IHNhb3I= LWxvdw== YXJkb24= 4K6+4K614K6/4K6y4K+N IGVzcGVyYWRv LkltcG9ydA== dXNzY2g= IHhib3g= IGt3ZWxp QGlm INeR16bXldeo15Q= UGY= 4Li44LiH INKb0L7RiA== IHN0b3Bw IENvbXBpbGU= INin2YTYudi2 4Kas4Kew IGFib24= 1avVodWv1aHVtg== 6Kej5p6Q ZXDhu6V0YQ== IHPDrW1ib2xv IGtsZWluZXM= IHNhYm90 IHdhc3Rld2F0ZXI= IGF1c2bDvGhy IHF1aXR0ZXI= IGdlZsOkbGx0 b2Fu IG1pbmdp 5Li+6KGM JyldCg== IGd1Zg== IEdlb3JnZXM= IHRlbm9y IGRhbWI= IFRvb2x0aXA= IOGek+GfhQ== 2YHYp9mE INSx1YTVhg== IGJlbGxp 0YHQutC40LzQuA== INeZ15XXpg== IE5hemlz 0Y/RiA== INCx0L7Qu9C+0LLRgQ== IHRyaeG7h3U= INCc0LDQsw== IG1lbmluYXM= J10sJA== IGRyZW4= LW3Dqm1lcw== 0YHRgtCy0L7RgtC+ IG9rcmU= IGZsdW9yZXNjZW50 IGVzcMOtcml0dQ== IOqzteycoA== INmK2K3YqtmI2Yo= IHN1cmF0 d2FydHM= IEF0ZW4= IHJlZ2xlcg== IGFudGln IFN0ZXJlbw== YXN0YXM= X2Nhc2Vz IGdyb3VuZHdhdGVy c2VtYW50aWM= bsOtaw== IG5vcm1hbGl6YXRpb24= INGD0YHQu9C+0LLQuNC5 IEZyeXNsw6Ju IEFuZGVyc2Vu 5Yaz5a6a IOy9mA== 65+s7ZWc KHRi 4KSo4KWH4KSf LkludmFyaWFudA== IERpYw== RmVybg== X1NIQURFUg== IEV4cGxhaW4= QXJlbmE= ZW5hbmdrYW4= IEFsbG95 4Ken4Keu IEFxdWFyaXVt Xz0= IGNsZWFycw== IG5vZG8= IG9ybQ== X0VuZA== IGphYWth IMO+w6F0dA== IEJ1bm55 IHNldWxz b21tZXI= KGRhdGV0aW1l 4LS+4LSz4LWN c2VndWly 4Lav4LeS 54qv5rOV INmI2KjYsQ== 2YbYtA== IEF1Z3VzdGluZQ== cGl4ZWxz INC60L7QvdGC0LDQutGC IENlcnRhaW5z IOasp+a0sg== IHJlc2lkdWVz 5oyj IGR1Yw== IHNoaW4= YmVybg== ICInIjsK ZG9jdW1lbnRz INGG0LXQvdC1 LmxvZ28= 15DXmdeo IHJlZmw= ZW5zYXR6 IFdhdGNoaW5n IFBsYWNlbWVudA== b3J0YXI= IHJhZGVu IHF1YWxzaWFzaQ== IFBpY3M= IHZsaWVndA== 0LjRgdC40L3QuNKj IHBpc2FyaWE= IHByb3NwZXJvdXM= KC9e IGZhdm9yaXRv INi52YbYp9i12LE= IHThu5Fp IOyGjOqwnA== w7lh Q2xpbmljYWw= IFVsdHI= IEFl IGNow6Nv IOCkmOCkguCkn+Clhw== IGJlZHRpbWU= INCh0LLQtdGC LmNvbXBsZXRlZA== 2YjYrNmI2KfZhg== IMSNZXNr IEJyb254 dG9q IGZvcnNl zrfPgc61 dXJvbnM= VWg= IOCmleCnn+Cnh+CmlQ== IE1Qcw== IGJ1bGF0ZQ== dW1wZWQ= 0YDQvtC00LU= IGvDtnJwZXI= 57uP6L+H IHN5bmNocm9uaXphdGlvbg== IG9p INiz2LHYrw== IGJhbmNh IOODoeODs+OCug== aGlsZmU= IFNoZXJtYW4= IGZyYW5jcw== IOqzteqwnA== 4LK+4LKj4LK/ QXZhbA== IGPhuqNuaA== IOCknOCkqOCkvuCkj+CkleCliw== LXVuZGVy 0Y7RidC10LU= Kikp IOCml+CngeCmsOCngQ== IM66zr/Ouc69z4nOvQ== a2F0YW4= IG5paXTDpA== IGJyZXdlcnk= UmVjcnVpdA== IHN1a3Nlcw== IEhlcmNl IOCupOCuleCutQ== IHBvc3NpYmlsaXTDoA== IE1hdWk= IOyXhA== Oyg= w69uZQ== Y2lkYWRl 5b2p5b2p56Wo5bmz5Y+w 4Kew4Ka+4KaV IHBvcnRhbHM= 4LS/4LSq4LS+4LSf R3V5 QXNjaWk= INC/0YDQuNCy0L7QtNC40YI= IGNvbmN1cnJlbmNl IHBpZXJyZXM= IHZlcmFuZGVyaW5n IHdpc3NlbnNjaGFmdA== IHV0aWxpc2F0ZXVy INC70Y7QsdCy0Lg= aW5jb21l YWt1cmE= INit2YXYp9uM IGt1YmVyYQ== 2YbYs9mK2Kk= IE9iamV0 KHRoZW1l INC00L7RiNGC 2KfYs9mE2KfZhQ== IOCqpOCriOCqr+CqvuCqsA== VHBs IGF1Zmdlbm9tbWVu IOCqruCri+CqpA== IG5vaXJl IEJ1Y2tz IOCyuOCyguCypuCysOCzjeCyrQ== IEdlbWluaQ== IOCkqOCli+Cknw== IGFnaGFpZGg= L10= KGhvbWU= X1RSRUU= LnFx IG1pY3Jvc2M= INin2YTYp9mB IG9wc2xhZw== YWtpcmE= IENhcnRvb24= c3DEmw== IGZvcmVjYXN0aW5n INC+0YLQu9C40YfQsNC10YLRgdGP INC+0YHRgtGA0L7Qsg== QmVnaW5uaW5n IHDFmWlw 4LOB4LKk4LON4LKk4LK/4LKm4LON4LKm IHBsb21i IEvDtnI= IMO8aGU= IHlhYm8= Oj8= IEtvc3Rlbmxvcw== IGxvbmVsaW5lc3M= IGTDpg== IEFsbGllZA== CWNoYW5nZQ== 5Yqq5Yqb QXdhcmRz INCy0L7Qu9C+0YHRiw== ICJcKA== aW50b3No IHRleHRhcmVh LkJl 2b7ZiA== INen15XXqA== LcOp IHJlbGVudGxlc3M= LmtleWJvYXJk 6YeN5aSn KGZlYXR1cmVz X3RpY2tldA== IGx5bg== ZGo= QWRkb24= IGFwcG9ydGU= INGC0YDRj9Cx0LLQsA== YWVh IGx1dg== INW/1bI= IGRpdmVyc2lmaWVk CWRlZmluZQ== aXNoeQ== 1aHWgNW9 IGZsb3JpZGE= b3B0ZXJz IHVrb2xs IHRlY2huaXNjaA== IHNleHU= INmE2K/ZitmD IOCkmuCkv+Ckgg== IHN0cmFkYQ== IHBhcmVt INGB0L/QtdGG0Lg= QVVE IGNyZXNjZXI= INiz2YrYrw== 5py65Yqo6L2m IEJhcnJh 2YTZhA== IE1vdmVz 0LXRgdGC0LA= IGFzZWd1cmE= ZGlnZXN0 IOGegeGfgg== Zm9udHNpemU= INW21aHVrdWv1avVtg== 4Ka+4Kaq4KeN4Kak 5Ym1 IHRlbmlh 4Kq+4Kq54KuA Y2h0ZXN0 X2d1aQ== IOCqrOCqnA== 4Z+i4Z+g4Z+h IOyViOuCtA== INOZ0qM= IHJhenY= IOWPkeW4gw== IEdldHRlcg== INGB0LvQvtCy0L4= IGNoYW5nw6k= 16fXqg== IGNob2NvbGF0ZXM= INCz0L7RgdGD0LTQsNGA0YHRgtCy0LA= SW52aXRhdGlvbg== IOyeoA== IGFyb24= bGF0ZXM= 4LGB4LCV4LGB4LCC4LCm4LC/ INGC05nRgQ== PFZlYw== IFRlYw== 0LTQsNGA0YvQvQ== 0YbQsNGe TENE 4LOK4LKz X1BN INCz0L7QtNC40L3QuA== cm9vZg== aWxsaWFtcw== 44Kq44Oz IOCkteCkvuCknw== aWpzdA== IGluYXRz INCw0Y/Quw== IHV0YQ== YWxpb24= c2VndW5kYQ== YXJlbmE= INin2YTZhdix2K3ZhNip IEh1ZQ== YXRzbw== IHRyYW5zY3JpcHRz INC00L7QsdGA0LA= IGJvc2U= X2NyZWRlbnRpYWxz IOCmmuCmsuCnhw== IOaOqOiNkA== IGluZ2U= INCw0LTQvw== IGVyaW5u 2K/Yp9uM bGplbmph IGZhw6dv 2YbYr9iz IG3Fgg== INC/0LXQvdGB0LjQvtC9 IGZydXRvcw== LVNQ INei15zXmdeV IHRlYW1tYXRl IGZpbmFsaXplZA== IG1pbm9ycw== dXRhZA== IHJlZ2FyZGU= INGH0LDRgdGC0L3QvtGB0YLQuA== ID8+PA== 44O9 IFNhbnRhbmE= IEtE INGE0LDQvdGC0LA= IERGUw== bWVudXM= IG9wb3NpY2nDs24= Il1dOwo= IGludGVudG8= IHRpbGxzYW1tYW5z IHRvbGlr 4KS+4KS54KSw4KWB IGxvc2Vy 0YDQuNC7 aWFoaWE= IGNvbnRlbnRpb24= IGNvbnRyb2xlcw== IGZlaGw= 0LzQsNKT0LDQvQ== IGh5em1hdGRhxZ8= 2LnYr9iv2Kk= IHNuYWc= IHhvbmE= IC4uLg0K IE1pY2hlbGU= IOCouOColQ== IGhpcmVz INGD0LvQuNGG0LU= IGNvbGk= X1ByaW50 IGluaXRpYXRpZWY= d25n IHRpbWV0YWJsZQ== d29yZHByZXNz SFo= INen16nXqA== IGV4Y2Vz IHRodWc= IMOubXA= 2YfZh9mH2Yc= IFNpcml1cw== aWRvcnM= IElNRg== U3RlZWw= IG1pZGFnaQ== IMOpbGV0 INmF2K/ZiQ== 4YOY4YOh4YOs 5Y+j44Kz44Of 4YOb4YOQ4YOg4YOX QXNpYW4= PFJlc3VsdA== IHB1bnRp IHZha2E= LlRBRw== IOCkquCljeCksOCkow== LkNhc2NhZGU= J2VudHLDqWU= IGlubmF0ZQ== IENDTQ== INGF05nQu9Kb0LDRgNCw 0L7RgdC60LLQsA== YXNzaWM= IHLDqGdsZQ== IE1pbGxpYXJkZW4= 24zYsdin2Lk= X2FmZg== IGTDtnJlZA== IEFQUExJQ0FUSU9O IE90dG9tYW4= INC60YPRiA== 4KS/4KSf4KSy IGJhdXQ= IFNvaw== LlNldHRlcg== YWJyaWE= IEphcmRpbQ== INSy1aHVtdaB IOCqleCrgeCqsg== IHN0YW5kb3V0 5LiD5pif5b2p 54m56ams IOWlvei/kA== X2NoYW4= INC80YPRgg== 7ZOo zrjOt866zrHOvQ== IHNwb25zb3Jpbmc= IOCqtuCrjeCqsOCrgA== IGFsbGF0 IFLDvGNrZW4= INCz0L7RgNCw0LfQtNC+ 5be7 2KvZhdix PFJvbGU= INin2YTZh9in2KrZgQ== IEtpZXY= IGdyYXZpdA== IHBvbG/Fvg== IENpZW5jaWFz IGV4aGF1c3RpdmU= 15DXpNep16g= IHZlcsOjbw== IFRpbGVz aXJhbmk= 44OB44Kn IEx1dGhlcmFu IGxlY3RldXI= ZmFpZGg= T1JJQQ== cGhhc2lz IHNlbGVjdGll IGJvbWJhcmQ= IGxsaQ== 0LbQsNGe IG1hZGg= IOCkueCkv+CkuOCljeCkuOCkvg== YnJvYWRjYXN0 4YOQ4YOV4YOY4YOh KF8oIg== L2Nt 44CCWw== IGxpc3RhZG8= IGl6YQ== IHTDpHNzw6Q= IOCytuCyvuCysg== IOaghw== QVJHUw== IOCmleCmsOCmvw== LyIuJA== 44CN44CB44CM IOCkh+CkguCkoeCkv+Ckr+Ckvg== IOCuteCuv+CutA== IOCwnOCwv+CwsuCxjeCwsuCwvg== YuG7jWNo4buL X1JFTkRFUg== IHJlYWxpc2VyZW4= 4LKn4LON4LKv 2YbZiNin2YY= LHRw 0JDQng== dWRo 5Lqm CWxs bmFnZQ== IG11bmljaXBpb3M= IG1vdGl2YXRpb25z IGFwb3N0YXM= 4YOj4YOa4YOY4YOQ UmVsYXk= IOCkruCkvuCkqOCktQ== 0IE= IFlheQ== IMSP 2KvYqQ== IGFudW5jaW9z IFZlbnRh INis2YraqtmK 4KuL4Kqc4Kqo LWNvbmRpdGlvbmVk IHNhcmlsaQ== Q2FyZXQ= RGVzdHJveWVk IHdoYWxlcw== INC60L7QvdGB0YLRgNGD0LrRhtC40Lg= Wysr IGJpbGlt IGN5bm53eXM= IGV4YW1pbmVy c2V2 IGZhc2g= QXF1 U2VwdA== IGNwZg== INKw xJNqYQ== IOWcqOe6v+ingueciw== IHVnbA== IE5ld2Fyaw== IE1hbm8= IGhvZ2VyZQ== IMq7aWtl IGRldHRv IGJvaWxlZA== X0NsYXNz IOuQqeuLiOuLpA== 15DWuNeS KXg= L3Jlc291cmNl Y2hhbGxlbmdl bmljdA== IHRlYXJkb3du LkVORA== IGJsZWFjaA== IOCysuCyleCzjeCytw== 4LS/4LS2 0LjRgtC10LvRjNGB0YLQstC+ Z2Vow7Zy INi52YjYsdiq cHJlcGFyZWQ= lQoK IGJlaW4= IGJ5xYJh IHdlZGdl aGV2 IHN0cmlwZWQ= IExvd2U= IEJ1cnVuZGk= IGZvc3RlcmluZw== INqp2pPYpg== 65Ok6rO8 4YOQ4YOZ4YOU4YOX IEFkdmlzb3Jz IOCkuOCkvg== IE5hYWxha2tlcnN1aXN1dA== IHBva28= eWlzbw== aXJsaW5n 5qeL 4LSW4LWN4LSv4LS+4LSq IGFsdm9y IGh1ZHVtYQ== 0LDQt9Cw0YDQsA== T3JkZXJpbmc= YXBhcnQ= X0NPTVBMRQ== LXNwYWNpbmc= IFROVA== IEVRVQ== INiu2b7ZhNmI INin2LnYqtio2KfYsQ== IOCmquCnjeCmsOCmlQ== 5Y+m5LiA QUxMT0M= Q2Vy IOy5mOujjA== INCw0YPRgdGD0YDQsA== IHRvdXJuZXI= INC40LzQvw== YW50aWNpcA== INil2LM= PFNjYWxhcnM= 4LGA4LCG4LCw4LGN 64aS IOCwruCwguCwoQ== INC60LDQtNCw IFF1ZXN0bw== TWljaA== IO2Kue2eiA== INC40YLQvtCz0LU= IHJpZQ== QXBwcm94 ZWxpZ2libGU= IHByZXN0YXRpb24= IGNvbmNlbnRyYXRpbmc= IG5pZ2h0J3M= IEtpbG9tZXRlcg== X1NE IOuCtOqwgA== 5YiG5b+r5LiJ IEluY3JlYXNlZA== 5YuV5ryr IHBhdGhsaWI= 0pPRi9GB INGB0L7RgtGA0YPQtNC90LjRhw== aWxhZ2U= IG9yZGluYW5jZQ== IOGDo+GDmeGDoA== IFRvbWFz bsSB 5qWa bm9w IMOpdGFibGlzc2VtZW50cw== YXJuaQ== IOCqleCri+CqsOCri+CqqOCqvg== 4KWD4KSk4KS/4KSV aW5mb3M= IFNVUw== INC/0YPRgtGM IGRlY29yYcOnw6Nv INC40LzQvNGD0L0= IGFubm9uY2Vz IM+AzrHOvQ== 0LTQsNGA0LTRiw== bMO8xJ8= KClg 7KGM64uk 77yM6K+l IGNvbmZy INmH2KTZhNin2KE= IOul U2VtYXBob3Jl INW11bjWgtaA 0L3QsNGB0YI= IFJPVA== 5oq1 Lk1hdHJpeA== IG1lc3NlZA== IOCkrOCkv+CklQ== IGxlc3F1ZWxsZXM= IG9iYXQ= YmFzZW5hbWU= 0LzQuNC5 IHRhbmtvdQ== IENvbnRpbnVvdXM= 06/RiA== INOp0YLQutGW CXNlbGVjdGVk X0NvdW50 IFRvcm4= 4LGB4LCy4LGN 2YXYp9mE2YrYqQ== IENlbmE= b2luZXM= ZXNvbg== 4Kay4KeH4Kaw IHNsYW0= CWhhc2g= IHR1bW15 7Iu2 IGRlZmluaWRv INGB0LrQuNC0 IGRlcGVuZGVy IHVpdHN0cmFsaW5n INW41oDVutWl1b3VptWr IGFiZQ== LkRUTw== ZXNlYXQ= IO+B IEdhZ2E= IHBveml0aXY= INC40YHQv9GA0LDQsg== IHNlY3JldG8= IOC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qA== Q3Jhc2g= UHJpbg== IOCkreCkteCkv+Ckt+CljeCkrw== LWNvdXJzZQ== IENPTlNU IE5pbGU= KGN4 JG1lc3NhZ2U= IFBhb2xv 4oCM4LCo4LC/ fi0= IOCksOCkv+CklQ== IGFkbWlyYXRpb24= IOCmnOCngOCmrOCmqA== IHV0aWxpemFkYXM= 4LmA4Lie4Li34LmI4Lit INC10LbQtdC00L3QtdCy IOCmuOCmv+CmqA== bmFsZQ== Q2Fubg== IHByw6RzZW50aWVydA== LmV4aXN0 IHBlcnPDtm5saWNoZQ== IHJlbXBsYWNlcg== JkU= IGJlc3Ry cHlnYW1l IOGDqOGDlOGDkuGDmOGDq+GDmg== IHNvYWtlZA== YXNrZXRz INqp2YTZhw== IHBkYg== IE1pbmVz X3JlZ2lzdHJhdGlvbg== IOCmr+Cnh+CmpOCnhw== 0LDQvdGC05nQuA== 4Ka+4Kah IEVzdGF0ZXM= KHJlcGx5 SGliZXJuYXRl IGNvcnRh INmI2YTYp9uM2Ko= IHBlcnNvbm5lbGxlcw== IOCkuOClgeCklg== IGthYXJ0ZW4= 55qE5L2N572u IGNpbHbEkw== KFJF TmljaHQ= aWFjaA== 0YPRjtGJ0LXQtQ== IHJlY2hlcmNo J2hv IOG7jWjhu6Vy4bul IFNvbHZl 4YOQ4YOk4YOg4YOX4YOu IGt1cnpl 0YHQutGW0YU= IC4n JHBvc3Q= RmVk IGJvbGk= IHNhZQ== IGluZm9ybWFzam9u IEhlY2s= IOCkruCljOCkleClhw== INmB2KfZhA== LG91dA== aHRhcg== IFRpbWI= IHBlcmNvcg== 2IwKCg== Y2lwaXQ= IGNvbXBpbGluZw== 27HbuQ== IENvZHk= IGNhYmVsb3M= IHNsaXBz IFNuYXBkcmFnb24= Li0t IFNpYmVy 4LK44LKw CU1l IENhbmFkw6E= IFBpbGxvdw== 7Zi5 X2Nh INio2KrYp9uM2Kc= IEZhdg== YXllbGE= QXNzZW1ibGVy Y2xpZGVhbg== 2LTYt9ip VmlzdGE= 0LDQu9GM0L3QvtGB0YLRjA== Z3JhYg== IHNpZ2hlZA== IGFseXA= IENa IGJlbmlt PT0t 0LDQu9Cw0YM= IOCwmuCxh+CwuOCxjeCwpOCxgeCwqOCxjeCwqA== IGRlc2Fycm9sbGFkbw== INC/0YDQtdC00YPQvw== IOG6uXlh IGJvdMOjbw== yrthbmE= INCd0LXQug== IHZpZW5kbw== IEdlYnJhdWNo YW55YWh1 cmVnaWVydW5n IE1vcmFsZXM= IERST1A= X01FRElB QW5ub3VuY2VtZW50 OuKAnA== a3dhbGl0ZWl0 6bif ZXJ0dW5nZW4= Y2h5ZA== INi12YHYrdmH 0L3QuNC70Lg= IGbDo3M= IOC0leC1jeC0tw== IHByb2dyZXNzZXM= cG96bg== a2HFhA== Yml0bw== L0Rlc2t0b3A= IHBhdGhvbG9neQ== IGNvcGllcg== IGVnd3VyZWd3dQ== 2K3ZgtmC ZHJ2 IEVuY3U= bWlubw== IOCmsuCmvuCmlg== IENvbnJhZA== INin2K7YqtmE2KfZgQ== IGVzcGFs IEFtZXJpa2Fu Lmhpc3Q= IGFmcm9udA== IHNvYnJldHVkbw== IEhpcmluZw== IFRvdGFsbHk= X1NFTlNPUg== INOo0Lc= INeR15k= IHN0dW1ibGU= IGVpZ24= INC/0LXRgNCy0YvRhQ== IOGDoOGDo+GDoeGDlOGDl+GDmOGDoQ== Rkg= IFBQUA== YWZmbGVz Y3Jh IGNhc3RlbGw= IGxhYm9yYXRvcmlv 6Ieq54S2 IEZvbnRz INGA0YvQvdC60LA= IERpc2Vhc2Vz INGE0YPQvdC60YbQuNGP TGVucw== ZXJzb3E= IGJhYmFl IEd1cw== YWzhurk= X2NsaQ== c3RhbXA= bGV2ZQ== dmllbnM= IHBhbmFz IGFja25vd2xlZGdlcw== IM+Fz4DOrM+Bz4fOtc65 LkNvbnN0YW50 56Gu6K6k zrvPjA== IGN1ZXN0YQ== w7FhZG8= ruGDlOGDk+GDleGDmOGDlw== IG/EjWVr IGVtaW4= w7ZzZQ== IFByb2Nlc3Nlcw== Jyl9fTwv 66W064qU IOCmqOCmvuCmruCnhw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= Zm9yZGVydW5n Y2FzdGVycw== IGFiYXQ= IGRyYWFn IGFubWVsZHVuZw== KEFQ IGxvYWY= 4YGJ IOCqhuCqquCqo+Crhw== IHVpdGJyZQ== IFBlbmd1aW4= IGRldnJhaWVudA== IGRldGFjaA== 5oql56CB INGA0LDQsdC+0YLQsNGO0YI= IHRocm91Z2hwdXQ= IEJydXhlbGxlcw== IHZpYmVz aXhob2Jv IFBY dW5laG0= IOGDkOGDm+GDkOGDoQ== J09y LXllYXJz IGFnZW5jZQ== VGVybWluYXRl LXZhbHU= IEJhbmFuYQ== LS0tLS0tLS0tLS0tLQo= IGR1ZXI= 0ZbRgtGM IOS6mua0suWbveS6pw== TklFbnY= LnZlbA== dXNzdXRpc3M= IOCmuOCmruCmvuCmnA== IG91dHJhZ2VvdXM= IGLDpQ== IG5vdGV3b3J0aHk= INij2LXYqNit IOC0uOC0guC0teC0v+C0p+C0vuC0qOC0gg== RUxDT01F KFByb2plY3Q= INmI2YfZhQ== bGVyZW4= INCy0LXRgNGB0LjRjw== IGVzY2w= IG1lbnRhbGU= IFlheg== IGhpZ2l0 INio2KPZhtmH IERpYXJ5 0LjQsdC40YA= IGRhYXJuYWFzdA== dWN0aW9ucw== IGFkaGVyZW5jZQ== IHZvb3J6aXR0ZXI= 4Liy4LiZ4LiE4Lij IE1PU1Q= IHBhbGk= IG9rdXM= IOuf INC30L3QsNC80LXQvQ== dGFq Lm1vemlsbGE= IHByZWRzamVk IEVsZWN0b3JhbA== J2FjY8Oocw== J8OpdGF0 IG9ra2Fy IENvbWVyY2lhbA== 5LiY INGB0LXQutGB0LA= QXR0ZW1wdHM= X3VuaWZvcm0= IEdhemV0dGU= IOGDkuGDkOGDnOGDrg== 1aXWgNW1 SVNJ 55CG5b+1 4YOU4YOg4YOc IHZhbGlkYXI= IGNvbmZpZ3VyYWNpw7Nu SU5ERVI= 5a+85ryU IOCkueCkv+CkguCkpuClgA== dXR1aGthbg== IEhpbnNpY2h0 IMSL 4LeB4LeK IEFycw== IGVyaW5uZXI= IOWkqeWkqeS4reW9qeelqOa0vuWllg== aG9zbw== IHByZXN0YXQ= U8Op IGZpYWJsZQ== aWVncw== IENvdXBsZQ== IGx1Y3J1 INi52KfZhdmE IFR3ZWVkZQ== IG1hY2hpbmluZw== IHBvcnRhbnQ= YWxtb3N0 IFdlaXNz IGphbmdhbg== IOyVjOyVhA== LlRoZXJl Y2hvbA== IHZhcmllZGFkZQ== VVJTT1I= IHNvYXJpbmc= YWtpd2E= IMWhdGV2aWw= IOC0heC0qOC1jeC0pA== IEZ1ZXI= dXJtYQ== YW51dHM= KHR5cGVz IEd1bnM= IOCknOCkuA== IFZpZWx6YWhs IGdlcmVudGU= IM61z4DOr8+DzrfPgg== IOW4uA== 5LmL5a62 Lk5hdGl2ZQ== IGxpc2U= 4LKm4LOH 6ZiF6K+75YWo5paH CWFwaQ== CWxpbms= IHJlZmx1eA== IGxvZ3LDsw== 4LC/4LCC4LCm4LGH IHZlcnVycw== U2Nyb2xsYmFy IGNvbmR1Y3Rz 16LXqNef IFNhbGFt IOS9k+iCsg== INis2YXYp9i52Ko= IOuPjOyVhA== aW5nb3M= IGdyaXBz IHByZXN5bw== INWv1aXWgNW6 INC606nRhw== aW5paQ== 77yM5aW5 IGJpYXlh IGludmVzdGlnYcOnw6Nv LWltcG9ydA== IHJlc3RlbnQ= LWNhbGw= eW9ydXo= IOS4qg== INC80YPQvNC60LjQvQ== IHVrdWto IG9yZ2FuaXph IFJ1c3NsYW5k IENvbnRpbnVpbmc= IM+Az4HOuc69 5p+7 dGFjaA== IHlpcmk= IG5pZ2h0bGlmZQ== IEN5bg== RHA= INmF2K3Yp9mB2Lg= 4KSk4KSo 16jXlQ== 6L+b5Y+j INin2YTZhdin2LbZitip IHNlcnA= 0JjQvA== aG9tZXM= X1F1ZXJ5 7ZSI Q2FyYQ== IHJlZ2lzdHJhdGlvbnM= 0YDQsNGC0Ys= IG1hdHVh 0rvTmQ== INC/0YDQuNCx0L7RgA== IG1pbGlq 4LKX4LK+4LKw cmVnaXN0cm8= 44Km44Kn KCcvJyk= IG1pY3Jvc2NvcHk= IEJveGVz IHNvd2VpdA== CWluc3RhbmNl U3ltZm9ueQ== IOC0quC0nuC1jeC0muC0vuC0rw== 4Kq44Kq+4Kqw z4bPhQ== IGhlYXJ0eQ== IGlzaWc= IGJpYWlz IHN1cGVyYmU= IHJvaW5udA== 6LCT IGVubA== IGV4cGVjdGF0aXZh IEhpdGNo 4Lir4Lih4LiU IHJlbGFjaW9uYWRh INis2r4= 2q/Yp9ix LW5lZWRlZA== IOC0uOC1jeC0peC0vuC0qg== IEhhc3Nhbg== INin2YTYqtiu 5L2/5ZG9 w6FuYQ== KE1pZ3JhdGlvbg== IENhbm5vbg== IG1vbnVtZW50YWw= IGNvbXByb21pc2luZw== IOGDkeGDmOGDlg== IErDsw== amVi b3RoZXJhcA== LmZi IOCkuOCkvuCkruCkl+CljeCksOClgA== IOCyteCyv+Cypw== IGdhcmFudGk= INWx1aXVvNaE IGVqZXJjaWNpb3M= IHl0 INC30LXQvNC10LvRjA== IGNpZXJ0YXM= INCx0LDRgdKb0LDRgA== 4Lie4Lix4LiZ4LiY4LmM IHRhcnZpdA== IHNhw70= 4LS/4LSZ4LWN UFJJ YmFpeA== 6ZKu KeydmA== IHNocA== INek15fXldeq IGdlbmVzaXM= IHBlbnNleg== bm5lcg== IOC0tuC1jeC0sOC1gA== z4TOtc+F 5oiR6KaB IHJvbXBlcg== INC50LXSm9C40L0= INmF2ZDZhg== IHdoaXNrZXk= IGZ1bmd1cw== 0LHRi9KZ IHBvbXBl 4p2k77iP IERFUA== IHNpdHVhZGE= INGB0L7RgNGC IHNpY3VyZXp6YQ== IG9mZmljaWVs INC+0LrRgNGD0LM= a2lz IG1hbmlmaQ== J2VzcMOocmU= X1NS IGNlZGFy TW0= bmVjaw== 5bm06b6E Y29ycg== LnJldHJpZXZl IHRlbmdhcw== LlJlY3RhbmdsZQ== IEFjY2VwdGVk IG9wYQ== KGhpc3Rvcnk= UkdCQQ== IOi7 IHByZXJlcXVpc2l0ZXM= IOCmquCmvuCnsA== IFZvbQ== LnJlc2VydmU= Q2hlY2tzdW0= IEhpbndlaXM= IOavlA== IENhc2M= IFRyYWluaW5ncw== ICg6Og== IGd3aXI= IGTDqWZpbml0aW9u IGdldGly IEZva3Vz T01C LXJvdW5kZWQ= VG9kYXM= IG9wdGluZw== INC40YHQv9C+0LvRjNC30YPRjtGC0YHRjw== IGFuYWx5emVz 4LiE4Liw4LmB4LiZ4LiZ UGF3bg== X0RFRklORQ== IHNlcmVuZQ== cnE= aXppZQ== ZGVjb2Rlcg== IGhhbmRjcmFmdGVk IFdpbm5lcnM= Q29uc3VtZQ== IOS8mg== INC/0LvQsNCy IGV4dHJhbmo= ID0iLA== YWRheHdleW5l IFZlcnRyZXRlcg== IG13ZW55ZQ== 1b7VodaA QW5keQ== 4LiK4Liy4LiV4Li0 IHJlZGVlbWVk IGxhYWQ= dGHFgg== INCy0LXRh9C10YA= IGluw7ptZXI= LXVuaXQ= IGNvbmNlcHRvcw== 6I6r IG9sZHVrw6dh c3RlbGx0 IOCkqOCkguCkrOCksA== IHBlc2E= IGxhbmRmaWxs IFJhbWE= ICIpDQo= X1JFQ0U= amFh IGluc3RpdHVj IGRlbGluZQ== IG1vZGVyYXRlbHk= INis2YfYqQ== INGH0YPQtg== 4KS+4KSa4KSo INGH0Ys= 0YrRjw== IENsYXJl X2dyb3d0aA== b3VsZQ== IHZpaA== w7xuc2NodA== dXppbWE= Lkludg== T05Z dmlyb25z RGVsZXRpb24= IGFmaXJtw7M= IG9wZW5iYWFy 16DXodeq CgogCg== R2VucmVz INC606nQsQ== 0LXRhdC90L7Qu9C+0LM= 0LvQvtC7 IGVlbm1hYWw= IHJldG91cm5lcg== IOCwuOCwguCwpuCwsOCxjeCwrQ== 0L3QsNGe LtCR dW11cw== 0YHRgtCy0LDQvNC4 IHNlYmVsdW1ueWE= 0YLQsNC00Ys= IHNlbnNhdGlvbmFs IE5pbWJ1cw== IGFudsOkbmRh YXppdA== IG9ra3Vy X0lOVg== IHNoYXc= 4KS+4KSH4KSu INeR157XlNec15o= IHN1bWFy IFNjaGxl LU9yaWdpbg== 6Zuj 5peF6KGM JwoKLy8= VkVSSUZZ IOyYge2WpQ== INC80LvQsNC0 X2NhbGxz aXJiaA== Vm9sZ2Vucw== IGFwcHJveGlt IGxpbmdlcmluZw== 6Jg= INiu2YTaqdmI IG1hc3Rlcnk= IOCuqOCviw== IGJvbm8= Lmd1bmE= INmG2LXYqA== IGxvY2FsaG9zdA== 7JSp IFJPQ0s= Z2VnZWJlbg== IGZldGFs INC/0YDQvtCy0L7QtNC40YLRjA== 4oCZw6l0YWlz IGFzc2VtYmxpZXM= IGTDqWNoZXRz INCT0LXQvQ== IHByb2l6dg== L34= IHNreWxk Y2VuZQ== INiv2YjZhw== IMOeZXR0YQ== INeV15TXldeQ INep16DXqg== Tm9uY2U= IG1hcmtkb3du IEJyYWRmb3Jk IOCkuOCkvuCkgg== IOq4sOuMgA== IGlzdGlj z4bPjA== Lmdi IG1vdXJu SHZpcw== IOCqmuCqvuCqsA== 0LvRi9Cz Z2hhcuG7iw== IM+Az4HPjM+D z4fOtc6v Q0NJ IHRsaGVsYQ== IGNoZXdpbmc= INem15XXqA== IE5hamVyaXlh IG1pbGxpcw== IOCqhuCql+Cqsw== b3ZvbGo= J2Fq IGpvbGk= aXN0aWNoZQ== IEthbGU= 4oCZLQ== IMO8bGs= INin2YTYo9ix2KjYudin2KE= IHByb2plY3Rl IOCmuOCmqOCnjeCmpA== bHlkZQ== IHJlZmU= 4LCC4LCf4LC/ 0YDQuNGF IGt0ZcWZw60= dmFubw== ZXRlc3Q= IGvDvG0= IEbDs3I= IGdpdmVhd2F5cw== LlN0YXRpYw== IE7hur91 Y3N0cmluZw== X3NraWxs cmVzZXJ2ZWQ= Lm5vbQ== aWdhZHppcndh INi32KfZhNio2KfZhg== IENvbXBhc3M= cXVldWVk IEF0bMOpdGljbw== IFJlc29s IHBvcnTDoXRpbA== IGdsb29t IFZpbmNp IEtyaXRpaw== IOmHjQ== IGFzb2NpYWNpw7Nu LmJyYW5k Rm9udGU= IGlncg== INC50YvQu9C00LA= SUZJQ0FUSU9OUw== 4LmC4LiU R29sZg== IHN0cmF5 CUlt INei15PXmdeZ158= 4Liq4Li1 LlRlcm0= aGFuZ2E= IEFueGlldHk= 5pyf54m556CB YXNjxIM= IFNlbXByZQ== 5YW25a6e INq+25U= INeR157Xlw== INGA0LDRgdGB0YLQvtGP INiv2K7ZhA== IHPEqQ== INWl1oDVpdWt1aHVtg== YWx1aw== INGH0YvQvA== IHNjZWx0YQ== IGV4cG9uZW50aWFs 66as7Iqk LldBUk5JTkc= SGlyZQ== X3BsYXllcnM= xI1hbg== IHJlZmxldA== QWx0ZXJuYXRl PlA= 4YOa4YOQ4YOT LlJlYWN0 5YqH IOCktuCkvuCkr+Ckpg== 772y IGNlbG8= IOCytuCyv+CyleCzjeCytw== 4LSh4LS/4LSv4LWL IE1vaXN0 IHJpY2hlc3Q= KHRlcnJhZm9ybQ== IGJlYsOq IHBob3NwaGF0ZQ== IMOgd+G7jW4= IOi2s+eQgw== X01lc3NhZ2U= IHBsYW7DqHRl IOCmieCmsuCnjeCmsuCnh+Cmlg== IGRpcmVjY2lvbg== IFB1ZXM= Z3Jvdw== IFVrdQ== VmVqYQ== IEJyZXdpbmc= IExvZA== IGzhurloaW4= IGfhu41p IGNvbm96 5a+o IHN0ZXY= INi02KjaqdmH IFhpbg== c2NoYWZ0ZW4= LUlJ IEhpZ2hlc3Q= INGI0LrQvtC70LU= INWh1bXWgQ== 4YOr4YOa bGloYXQ= IEluY2lkZW50 IHJlc3RydWN0dXJpbmc= YXplcw== X3RjcA== aWd0cw== IOS4reWbveemj+WIqeW9qeelqOWkqeWkqQ== YXRpdQ== IGNvbnN0cnVjdHM= IG1ha2VvdmVy Lm1vbmV5 IG1hbmRhcg== INC/0L7Qu9GD0YfQuNC7 7KO87J2Y SUVG LmdyYWRsZQ== 4KSy4KWH4KSV 5L2P5omA IEV2bw== IHNwZXppZWxs IG7Em2tvbA== IOWkp+WUkA== IGlzdGVkaQ== IENvbnRl 66as7JeQ INin2YbYrA== U3BlYWs= IG11dHU= IFNjZW5hcmlv IGdydXBwbw== L29z IGNvbnNlcnZlcg== IHZha2FudA== 0L7RgNGD0YE= INee15nXmdef 0YvRgNCz0LA= IEZBSUxFRA== aWxlYQ== INCn0LXQvA== IEFuZ29sYQ== LmZlZWQ= aWrEgQ== IHJlemVydg== 4YOd4YOT4YOY IHBpbmVhcHBsZQ== IFBldXQ= LnBpcGVsaW5l IG1hbm5h IGluZMOtZ2VuYXM= 7KeA6rOg Q2l0YXRpb24= YXN1cmluZw== IGJvdW50eQ== IHNwcmlua2xl IGhpdmk= IEhlbGQ= IMOkaG5saWNo IGRpc3RyZXNzZWQ= LmFjdHVhbA== IHRyYW5zbWlzacOzbg== IOCkneCkvuCksg== INec15nXng== 44Gv44GT44Gh44KJ fQovLwovLw== IHB5bQ== dmF0aW9u IGNvw7t0cw== IEltbWVkaWF0ZWx5 INC80L7Rjw== INW31bjWgtaA1bs= IGVucmljaG1lbnQ= INmG2KfYptio IHNsYXBlbg== INC90LDQv9C40YI= ZWxsZXR0 IFRlbm4= IG1vcmQ= cHJla2tlbg== IHF1ZW4= IGJlaG9lZnQ= IGxhYmFp INC+0YLQsQ== IHRvb2xraXQ= cm9lbg== c3RyaXBl IHNlaXp1cmU= ICEi SGVsdmV0aWNh IG1lbmdo 77y/5aWH57Gz5b2x6KeG IOCqleCrjeCqsg== INCy0Y/QtA== IGNvbnNw ZW5kbGVsYQ== 5pel5pmC IE3DvGxsZXI= TGVuZw== IGltbWU= wq4u INCw0LLQsNGA KGVuZHBvaW50 IHN0YWdnZXJpbmc= X1JBVw== 6LCL dWR5YQ== 64aT IEZlcmQ= 0L3RltGH IOCujuCuqeCvjQ== IEFsaW1lbnQ= 0L7QsdGF0L7QtNC40Lw= IGJlbMmZ IFBsYWludA== 4LWH4LSj4LWN4LSf X2JhY2t1cA== 6KeG6aKR57K+5ZOB IH4v Lmxv 5am35am35LqU5pyI IOCupOCuv+CuqQ== dXJlcmll IHJlY2llbnRlbWVudGU= IOCupOCurw== IEZJUkU= 4oCm4oCmCg== IHZvZGth IGxvY2FsaXphZGE= LmZpeHR1cmU= aWVzZWw= 4LC+4LCo4LGH IOWNmumHkQ== IG5udWt3dQ== b2xvbg== QVRFR09SSUVT ZnJlZXpl IEFVRElP 4Kq+4Kq14KuL IFBoaWxsaXA= dmVyc2Fs IOC0h+C0qOC1jeC0qA== IGFzaW8= aWNpb25hZG9z IE1VU0lD 57Sr IGtsYXNzaWVrZQ== IOyjvQ== aWxlZ2Vz IERpc2FzdGVy IENvdXBsZXM= 6YCB44KK IHRpZ2h0ZW4= IGxvcmU= IHpldmVu INGI05nSu9OZ0YA= X2tleXdvcmQ= IMOneQ== IG1pbmlzdHJh UE9XRVI= IHlldHU= INin2YTYudmE2KfYrA== z4POrw== Y29lcw== IEFiZQ== IGF2aW9ucw== IEFpcmNyYWZ0 INiz2YjbjA== ZWF4 b21zdA== IOCupOCvhg== IOCkl+CksOCljeCkrg== Y2FkYQ== IGRyaXR0ZW4= 55Si5ZOB Jyg= 4YOd4YOR4YOY4YOa IGFjdGVz dGVhY2g= aW11aA== 0LXQu9C10Lo= 0L7Qv9C+0Ls= KyIp IFZpbGxhcw== d2FsbHM= X293bmVk IHZlcmRlbnM= U2Vocg== IOuPiA== DQoJDQo= INm+2LHYr9in2K7Yqg== ICU9 LnJvbGxiYWNr IG11cm8= IGZvcsOqdA== 2LfZiNmK2LE= IOCqheCqruCqpuCqvuCqteCqvuCqpg== INin2YTYrtiv2YXYqQ== bWl0dGVsbg== IGNow60= IEpC IGhhcmRzaGlw IEFieQ== IGxpY2h0ZQ== YXNzYW4= IGJhbmtlcg== U25ha2U= ICc8Pw== 4LS14LSn4LS/ IGF2YWxp IOCkteCksOCljeCkt+ClgOCkrw== IOGAoeGAng== w7NnaWNvcw== INCp 0L3Rg9C70YHRjw== INmF2KfZhNmK IGdyeQ== LXNlcnZpY2Vz INis2KfZhdi52Yc= IHJlYWxpemFyw6E= LlJvdXRl IGVkdWNhdGl2YQ== IENlbGxz YXVjdGlvbg== aWRhZQ== IG9wdGFy IOy9lOuhnOuCmA== IGNow6J0ZWF1 IOW+ruS/oemHjA== IOi0ouWvjA== INio2KfZhNi0 4Liy4LiY ZW1lZXN0ZXI= IFR1ZXM= IE1hbw== IHRpdHVs 0L3QvtGB0YLRj9C80Lg= w690 IGFjYQ== YnBz 4Z684Z6Y IHlha8Sxbg== IOydtOyVvOq4sA== IHVkcA== IGV4dHJhY3Rpbmc= IHNhYm9kYQ== UEVU cnl3 IEpTWA== 4LiW4Liy4LiZ IEVsZWt0cm8= 0LXQutGC0L7RgNCw Qmxvb20= IGvDtnQ= YWxnbw== X2ZvY3Vz IEFuaXRh IHN1YmRpdmlzaW9u VXk= IEZpc2No IHByb2R1Y2VudA== ZW5zYnVyZw== 0q/Rhw== LmhhbmRsZXJz IGZlc28= IHJldmVyc2Fs IHRhbnRl IOiz VG93 YmRk PSIpLg== YXdpbg== IGlrbw== IGNvcnRleA== 0LTQtdC90Lg= IHllcA== IMO2bGQ= IGVuY2Fy IHJpdmU= IOW9qeelnuS6iemcuOiLueaenA== IElOU1RBTkNF IFByb3NwZWN0 R2VvcmdpYQ== IGJvYXRpbmc= 4Ki54KmB IGJyZWFrcG9pbnQ= IHVzcGU= bmV1dHJhbA== IGdhcnM= IMO2bMOn dW5keg== IG1peHQ= IOCyqOCyvuCyqOCzgQ== 5pel5oql6YGT IGxpc3Rv INC80YvSow== INeg15LXkw== c3RyZWVrcw== IOCoteCovuCosg== IGpvdcOp IGdlc3Byb2tlbg== Zm9ub3M= IE9icg== INeb15c= IGdheXM= TmFy SU5hdmlnYXRpb24= 4KWA4KSC IGVzZm9yw6dv ZW7DpA== IGdlaWxl bcOkcg== IGNvbHVtbmlzdA== IEh1YQ== cml0b3M= 0q/QvdC60Lg= YWNpb25hbGVz IGRlZQ== IEdvYQ== 5ZKL X0VT dWZvcmlh IGNhYmJhZ2U= 77yM5Zug5q2k IOCksuCljA== Itep RG93bmxvYWRlcg== IFZpdmE= IGNsw6FzaWNv IHBsYW50ZXI= IE1hbmdh 0LPQsNC90Ys= IOCmuOCnjeCmpA== IE3DpA== 55qE5bCP IOCoieCouA== b2N1bGFy 0rXQsNC9 INC/0L7QvNC10YnQtdC90LjRjw== IGNhbGFt CWRpYWxvZw== b3V3ZGU= bGVkbmluZw== IGxvbmdpbmc= 0q3QsNGA 4bui IGhsYWQ= ZGV0ZWN0 IENvbnN0aXR1Y2nDs24= INCi0LDQutC40Lw= YW5kYXk= QUJJTA== IOCwquCxjeCwsOCwpA== IOG5o+G6uQ== IHZha3M= d3N0cmluZw== 0YvQvNGW INmF24zYsduS YW5jYXM= INCX0LDRgtC10Lw= ZG9s IjsKCi8= 4Z6T4Z+S4Z6P INC00LXQvNC+0L0= 0YvQvdGf0Yw= YXdhbA== IGludGVuc2E= IGNvbnPDqXF1ZW50 IE5vY2g= QXJ5 dW1waA== 5q+U6L6D IGJlbmVmw61jaW8= 2LLYp9mE2Kk= INmF2K3Yp9mB2LjYqQ== IixAIg== VHJheQ== IGRkaW0= IERlYmJpZQ== IENvbnRpbnVlZA== 55yJ IOmmlumhtQ== bmFtZWxpams= INiu2LfYp9io U21va2U= IGVucXVldWU= QWx1bm8= ZXBhZA== IHBvdXpl IE1lYWxz IOCwuOCwguCwuOCxjeCwpQ== 4LCr4LGN IOC0leC1guC0n+C0vw== IGJhdGxh 15DXnteo INGB05nQsg== IGxpc3RlbnM= INC/0L7Qt9C0 IHRqw6Ru IE11bmljw60= IEVudHJhbmNl IGZyYWN0dXJlcw== INmI2KfZhNix LmF0dGFjaw== bW9iaWw= IHVubWl0dGVs RmFjdHM= 15DXmdeW LFc= IHN0cmFrcw== IGp1csOtZGljbw== INWh1abVo9Wh1bXVq9W2 4YOV4YOa4YOQ cGVyaW5n IOC4reC4seC4h+C4geC4pOC4qQ== RGVjcnlwdA== IHZvY2F0aW9u IHwNCg== INC/0YPRgA== IFN0ZWFr LiJc IFB2 dW5kYWJsZQ== IENvbmZpZGVuY2U= 0LDQtNC1 IFNpdGVtYXA= IGHDp8O6Y2Fy RGVzdHJ1Y3Rvcg== 0LXQt9C00LU= c29sdmU= IOGDouGDlOGDoOGDmOGDog== IE5vaw== 2KfZitin J107Pz48Lw== cmVlbQ== ICjigJg= SUNJQUw= 4Kqw4KuN4Kqk INGC0LDRgg== IHZlcmthdWZlbg== Ol0s IEFsZWtz YW50aXVt 4La64Laa 2LPYqtin2LA= INeZ15DWuNeo IEF0aGxldGljcw== 4LKw4LK1 4LSu4LWB4LSz4LWN4LSz X2Fkag== L2FjdGlvbg== IGdlb3JnYW5pc2VlcmQ= IOCmuOCmruCnjeCmrg== IENvbW1pc3M= IGRlc2V0 IGFncmljdWx0dXJh YXJuaXI= INCS0YvRgQ== IHZhcmVy Z2V6ZXQ= dWxscw== INCT0L7Quw== T1BUSU9OUw== Y2Vpcw== IGbDtnJl X1NlcnZpY2U= 2KrZhdin2YY= 0LXQvNC4 0LvTmdC90LPTmdC9 0q3Ri9GB IOCwruCwguCwmuCwvw== IFNwaWVnZWw= IGJvdG9u IHNob2Nrcw== IOC0leC1i+C0teC0v+C0oeC1jQ== dmVybGVuaW5n IHZpb2xldA== INWr1oDVodW+1avVsw== IGNpa2k= IG51Y2xldXM= Lg0KCg== xaFsbw== IOC3gQ== KGJpbg== INWw1oDVodW61aHWgNWh1a8= UmVuZXc= IG9idGVudQ== W3s= IGVueA== INC90LXRhA== X3BhcmE= 1aXVv9aH J2RlZmF1bHQ= IHVrdXA= 5b+g IHByZWFjaA== 5bCI ZWJlbGU= IHLDpWQ= IOCujuCusuCvjeCusg== 6YGC IOCqruCri+Cqn+Cqvg== Lmx1Y2VuZQ== IOCmleCmsuCnh+CmnA== IHZpc3U= 2YbYr9mG LmJ1bXB0ZWNo J2ltbQ== b3Rpdg== aGVyZW50 4KWN4KSv4KSk4KS+ IG1lZXFx IHVyc3Byw7xuZw== Y2hvbg== IHJlbWFycXU= 6Zey IFNhdmlvcg== LmdpdGh1YnVzZXJjb250ZW50 IHJlbG9jYXRlZA== xYZh 5o6S6KGM5qac IGF3bw== Y2hpZWY= S2Frbw== IHZlcmRhZGVpcmE= IHdlYnM= LnBhdGllbnQ= cm9uYQ== IEdyaW5kZXI= LWV2ZW50cw== X3N0cmF0ZWd5 bG9nZW4= IEVzcGVybw== IFdBTlQ= 4YOY4YOh4YOb IOCml+Cniw== IGNlcmNhbm8= IEJhaGFtYXM= w6ZsZA== IEJvbm5pZQ== IOCksuCliw== cGxhbnM= IERhYXJiaWo= IGRldm9sdmVy IFBpbGF0ZXM= IGNsaWVudGk= IENlbnRydW0= 44GT44Gu6KiY5LqL INmD2KfZhtmI2Kc= IOC0ruC0sQ== IG1pc2VyeQ== IGZsYXR0ZXJpbmc= 4YOU4YOb4YOY LmlibQ== IGVzdHJ1dA== IGJvb2tzdG9yZQ== Q2l1ZGFk 77yM6YKj IGF1dG9wbGF5 IHllcmluZQ== IHN0b2NraW5n INCS0LXRgA== IFNjb3Rz ICAgIAkJCQk= IGVtZXJnZXM= b25kaQ== IHNlbGxlc3Q= KHByZXZpb3Vz 4Lix4LmI4Lin4LmC4Lih4LiH IOCknOCkvuCkqOCkpOClhw== X1BQ IGhvbWFnZQ== IFBsYW50YQ== IGJvZGVt IOWFreWQiA== IGVyYWJpbA== 4La04LeK IGZpeGF0aW9u IFRvdXRlcw== RGVwYXJ0dXJl TE9HSU4= IGthdXR0YQ== 4YOY4YOh4YOQ IOy4oQ== IGNvbW1lbmQ= IHNob3J0YWdlcw== IG1vxb5uw6k= INei16c= IFNlbnRpbmVs IGvEsXo= IHJlbmZvcmNlcg== 16LXoNeU bWF6ZQ== IG1pY3Jvc2NvcGU= IEJlc3RlbGx1bmc= 0JPQu9Cw0LI= LlN3aW5n RWRpdG9yaWFs X2RpcnM= INin2YTZgtmE2Kg= IOCyr+CyvuCyteCzgeCypg== aXNwaWVsZQ== amFyYWg= IOWcsOWdgA== 54Ot5Zyo57q/57K+5ZOB IGxpb25z X21hZw== INWo1bbVv9Wh1bbVqw== IHBpc29z INen16nXlA== INWs1avVttWr IGluaXo= 5LyY5Yq/ amluZw== IE5pbQ== UGFja2Vk IHN0YXJjaA== IFR3aXN0 aGVlZA== X2Zj IOCmpeCmleCmvg== IHZhbnRhZ2Vt IE92ZW4= 6am7 Y2xhc3NuYW1lcw== IEhhemFyZA== IG5hY2ltaWVudG8= 0LTQuNC+ IFZlcmxldA== X0NPVU5URVI= INCc0LXQtg== IGThu4trYQ== IGJ0Yw== bGlubmk= IG9saXNo IExlaWdo IGNoZW4= IHbDoWxpZG8= IHs6Pw== IEPDtHRl IGRlY2lkacOz IHRpdmE= INC40LrQtQ== IGFycml2w6ll 4LSu4LWG INin2YTYpdmE2YPYqtix2YjZhtmK 4Kqv4Kq+ 57ay5Z2A INin2YTZhNmI 77yJ44CN YXJ5bnnFiA== dXZlbg== Lm1s IGNow6g= 2LHYr9iv INC60L7Qu9C70LXQutGC0LjQsg== IHRyYXN0 c2xhc2g= 2KjZiNiv dXR1aGFu IEJlbG8= INC30LDQvNCw0L0= IGNsYW0= IGRlcGxveWluZw== QWNhZGVtaWM= IHRlbXBvcmE= IHJlY2VpdGFz IG9mZnJlbnQ= INC+0LHQvtGA0YPQtNC+0LLQsNC90LjQtQ== LWNsb2Nr INmF2K/Yp9ix IGNvbmhlY2ltZW50b3M= 6KqY IG1vc2FpYw== 4LC/4LCf4LGN xI1pbmU= dGllbnM= IG9udHpldHRlbmQ= IHBhc2s= INC/0YDQsNCz w61icmlv YWFhYWFhYWE= IG5lZ3Jvcw== IFNwaWtl IOCyuOCzjeCynw== Lkdlbg== 6Yk= Z2V0ZQ== X1RSSQ== L2J1dHRvbg== U2FtcGxpbmc= X2NsdXN0ZXJz IGhqZW1tZQ== IGFkdW5heQ== CW51bGw= IEhvZXdlbA== INCx0YDQvtGB IE1vcm1vbg== IGVsZGU= IGdyYcOnYXM= INC/0LDRgNC70LDQvNC10L3Rgg== IFNuYWNr 4KuA4KqW IFNlbmk= IHJlZmluaW5n IGVmYQ== T09N IHdvcmRpbmc= 4KS+4KSy4KSk IEJz IOCyh+CypuCzjeCypg== IGVlbA== IGtlZw== IHZhZWdh w6VuZw== UGFw LGNvbA== IGltcGVyZmVjdGlvbnM= IGxlY3R1cmVy LlR4dA== QW50b24= RlBT IHNoZWRkaW5n VGFibGV0 INGD0LTQvtCy0LvQtdGC0LLQvtGA S2Vs IGVxdWl2YWxlbnRl csOlbg== xbxlbGk= 4YOT4YOQ4YOc IHByw7w= INin2YTZhdi52KfYr9mG IGxhdmk= ZsmZ KCkiLA== 4Kq24KuL IENBU1Q= INm+2YjYs9iq IHNww6k= UG0= INCx0LDRhQ== 4LCw4LGN4LCy 4K6/4K6V4K+N4K6V4K+I INGB0YLRgNCw0L3QsA== IOG7pWdi4buN IOC4peC4tOC5gOC4p+C4reC4o+C5jOC4nuC4ueC4pQ== IEZseW5u Y2Npb25l IG5vcm1l X3JhZGlv TXVp 0LjRiNC1 IHNjaXNzb3Jz dmFp SUVSQw== IG9jaHRlbmQ= cmFjaGQ= IGluc3RydW1lbnRhdGlvbg== INis2K/Yp9mL INC20LDRgtKb0LDQvQ== IHNlcm90b24= Q29udmVu IHZvcmJl T1dORVI= IGZvcm1hbg== INGB0LLQtdGC0LA= 4KuA4Kqy IGF0aGxldGljcw== ZXR0eQ== IE5lcw== bno= TGFw b3RoZWtlbg== IGJlaGF2aW91cnM= 0LrRltGP 0LDQvNC10L0= Q29uY3VycmVudA== IG1hY2E= YnJlZA== X09yZGVy IOCmruCmvg== 2LfYp9mE2Kg= RVRJTkc= IHNhaWJh IEhhZg== IERPVUJMRQ== 5q+U5L6L IGhhcXE= IENvbWZvcnRhYmxl c3Bhbm4= 4KSP4KSr IE5ldHp3ZXJr LWNhcm91c2Vs 0LXRgdC/0LvQsNGC IHR5aW5n IG5yaQ== PkVtYWls IEFuZHLDqXM= YW5kZWxpZXI= IGtvbnN1bHQ= IOCkteCkleCljeCkpA== aGFzaXN3YQ== YmlydGhkYXk= 4Ka/4Ka44KeN4Kak c3RyYW5k 4LC/4LCk4LGL IOCkn+Cliw== IGluZmVydA== IHNpbmtpbmc= IEJlbGx5 IGTDvHJmdGU= SW5zdGFsbGVy IHRvcm5hbmRv IHJlaW5mb3JjZW1lbnQ= IGdlZGVlbHRl IGZyaW5nZQ== IGNvbWZvcnRz INmK2KTYr9mK IGRpc3R1cmJhbmNl bWFyZXM= INin2LPYqtiu2LHYp9is 2ZHZjtmH 5bm05Luj 6Iqd IGVuZG9jcg== 0pPQsNGI VHJhc2g= 4Liq4Liy4Lij INC60L7RgdC80LXRgg== IGludGVycmFjaWFs a2luYQ== IHdvYg== IGhpZXJtZWU= 1oDVvtWl1aw= IGZpbHRyZQ== KG15c3Fs IFdpa2ltZWRpYQ== IG1hcXVpbmFyaWE= 0LrQuNGB0YLQvtC9 0LvRi9C5 IE5hb21p Lm5i PmA7Cg== LWxpbmtlZA== INGC0LXQu9C+ IGFydMSxcg== 4YCx4YCs4YCE4YC6 cmFzZQ== IOC0qOC0n+C0pOC1jeC0pOC0vw== 0YjQsNCy J8Sxbg== IEdvb3Nl IERpeg== Y2t0ZQ== IGNsYXNzZW1lbnQ= 4oCM4LSo IFRlc3M= INC/0LXRgNCy0YvQtQ== IG11aQ== 5Yac5p2R IM60zr8= UG9zdGluZw== IGJpbGxldA== INK30L7QvdC4 IGZlYnJ1YXI= IGNoYXBlbA== INeR15LXnA== aGFiZW4= aWxhbGE= IE52aWRpYQ== INGA0LjRgdGD0L0= IHRoaWV2ZXM= IFF1YQ== 6Im3 IGNvYQ== 4oCN4LSq4LWN4LSq IOCmrOCng+CmuQ== IE5vZGVz LXNvbmc= INC+0YHQvtCx0LXQvQ== IOCmtuCmleCnjeCmpA== IG3hu58= IEZyZWli IGhlcm9pYw== IHNlaXNtaWM= IHdoaXNwZXJlZA== Y2hsb3I= IGxpbWl0YQ== IHNhbml0YXRpb24= IGVsZWt0cmlr IGVzdGFibGVjaWRv IHpkcm93 IEJlc29uZGVycw== IExlYWthZ2U= KGpvaW4= IGVjb25vbWlzdA== IE1FVEhPRFM= IHN1bW1lcnM= IEFEQQ== IHNvbHVibGU= IFNPQ0s= INmF2LnYsdmI2YE= IHs6Lg== IEFtYW4= IFBJQ0tT INGC0LjRhQ== INCw0LTQsg== INCx0L7Qu9GB0L4= c2dlc2FtdA== 5by66LCD RXN0YWJsaXNoZWQ= TWluaW1hbA== RlRB 0L7Qs9C70LDRgdC90L4= IEZhaHJ0 RGllc2Vy IHB1Y2s= IGhvdXNla2VlcGluZw== IOS4pA== IHN5bm9ueW1vdXM= ZXJhbg== dWtrYQ== IG5vbmE= IHRlY2huaWVr 0YHRgtGW bcmZ IEFTVE0= IHdlcmZlbg== IEFndXM= IE1ldGg= 5omT5Y2w OkJvb2xlYW4= IGFrYXI= 4YOQ4YOi4YOQ4YOg IGV4cG9ydGluZw== YXBwaW5lc3M= QWRtaXNzaW9ucw== 4K6+4K6Z4K+N4K6V INCx0LDQu9Cw0L3QtA== IGTDqWZp IGRyYWFpZW4= IFRyaW8= IGFmaWxp IHNsaWo= ICde 44GK44GZ44GZ44KB Sk9JTg== IHNhdGlzZmU= ZWxob3M= IGRpc3Jlc3BlY3Q= IHdlZWtkYXlz X2hw ZW1icmFuY2U= 6YWN6YCB T1RPUw== IGNvc3RydQ== INCz0YDQuNCx aXBoaQ== IOyCtg== INqa2KfYsQ== ICcnJwoK IGltcHV0 IGVwb3h5 UmVsYXg= X3RvZ2dsZQ== INGB0LXQs9C+0LTQvdGP0Yg= 4Ka+4Ka44KeN4Kal4KeN4Kav LHVpbnQ= INC00LjQvQ== IGluc29tbmlh IMOpY29sZQ== xZtj IEFZ IEF1ZmY= IGpld2lzaA== IE1vdG9yY3ljbGU= IG1lbWFz INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQuNCy IEJyb2FkY2FzdGluZw== LnVzdWFyaW8= IGRpc2FwcGVhcnM= IG1pY3Jvc29mdA== INin2YTYstmI2Kw= 5aaW INCy0YvQv9C+0LvQvdC10L3QuNGP IGJyYXNpbA== c3TDpG5kZW4= IHRlcmxhbHU= 0YDQuNGG IGNvbnN0cnVlZA== IFVzdQ== INmI2LPbjA== 5YWN6LS56LWE5paZ5aSn5YWo LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== IGthYmluZXQ= aWdsaQ== IOCyl+Cysw== IHZvdWxhaXM= INGC0L7RgNCw IG5hZmFzaQ== RVJHWQ== INC00LDQu9Cw IGhpZ2llbmU= IGHDvWQ= bWllcg== IOWbvueJhw== IFZpbmNl IHNsaWRlc2hvdw== IGFjdGlvbmFibGU= IG9maWNpYWxlcw== IHBjaQ== INC30LDRhdC+0LQ= w7NtaWNh In19LAo= IOC2muC3kuC2uw== INGA0L7QtNC40YLQtdC70LXQuQ== 4Ka+4Kau4KeH 0LvTmdGA0L3QuNKj CW1w LmR1 IGdyYWRlcg== IGNoZWlv IEVuY29kZQ== IHNxdWFyZWQ= IENvbnRyYWN0b3I= 64+8 IGJlc3NlcmU= 4oCM4LKo4LKy4LON4LKy4LK/ LmNhdGFsb2c= IOq1reuvvA== IOCqpOCrh+CqruCqvuCqgg== J2No IGlpaQ== INqp2KbbjA== IENGTw== IGN1amE= IEJvbw== 0LjRgtC10LvRjNC90L7RgdGC0Lg= 2LXZiQ== 5bmz5oiQ IFByZWRpY3Rpb24= IOCqquCqoeCrhw== 4Lat4LeK4LeA IG5venpsZQ== 6am2 b2duaXRv IGFpbGU= IHNob3J0ZW5lZA== IGFzZW1lbmVh IGluZGl2aWR1ZWxs IOCkreCkr+Cliw== IE11bmljaXBhbGl0eQ== IEhhcHBpbmVzcw== 4YOW4YOQ4YOV IGVvbmE= IGltbWVyc2Vk PFRFbnRpdHk= IOC2reC3kuC2tg== IGFuZ2E= IHZvdWxhaXQ= IFBsYW51bmc= X2luZm9z L2luZm8= IHBsZWRnZWQ= IGFmc3ByYWtlbg== INCc0LXQtA== 4KWn4KWo IOCkuOCkguCkl+ClgOCkpA== IERpbmE= IGbEg3LEgw== IENsYXNzaWNz INC+0LHQu9Cw0LTQsNC10YI= IE3hu7k= IHNlcHRpYw== UmVncw== IHVub2ZmaWNpYWw= IHJld3JpdHRlbg== IHJlbmRz KHJlc3Q= IGFjZWFzdMSD IEFyY2hpdGVjdHM= Qmlucw== IEt5cg== cWFyZml1cA== IHBlcnBldHVhbA== IGzDpG5nc3Q= 5pWM IGNvbnZvY2F0b3JpYQ== IOCuleCvgeCuseCuv+CuquCvjeCuqg== X2NvbWJv 5Lyd b2R3YQ== IFZO 5Zu95Yqh6Zmi IFJhaQ== IOC0nOC1gOC0teC0v+C0pA== w7xobGVu IHNpa2tlcnQ= dWJiaW5n IG9ic2VydmE= IOCmruCmvuCmnA== IGlzcA== c3RpY2t5 IGJ1bHVuZHU= IFJvdWdo IGNhdGNoeQ== IGN1bHR1cmFsZXM= IEZ1bm5lbHM= IOCopw== LkFVVE8= 4LK/4LKV4LON IGJ1cnk= b3Robw== LyoqLyou IGRvYnJ6ZQ== RXk= IGdyYWRpZW50cw== IGlsbHVtaW5hdGlvbg== IM6yzrk= 5L+d5oyB Q09PS0lF INW41oDVtg== 2KzZiNmF X0lOU0VSVA== INeU16LXkdeV15PXlA== ZXhwaXJlcw== 7J247J20 5rWG R29zdA== asOkaHJpZ2Vu IHRlcnRpYXJ5 KSM= INm+2YTbjA== IG1pbmVyw61h 2YbYp9im2YrYqQ== Z3JwYw== IEJlcmljaHQ= ZWN1cmU= 6IGU57O75Lq6 IExY IGtyZWF0aXY= IHRha2k= xJl0cg== V2FycmFudHk= IGZvcm5v IOG7jXLhu40= LmZtbA== 66as7JWE 15HXqQ== aWZhY2U= IEhvbWVsYW5k INi42YfZiNix INiq2YLYsw== IGZ1ZWxlZA== 4YOj4YOp INC/0YDQtdC00YHQtdC0 Q29tcGFyYWJsZQ== IHltYQ== IEdlbHVra2ln IENvbmRv ZWxlc2NvcGU= IGlsaW4= IGluc2NyacOnw6Nv LlJlZmVyZW5jZQ== L1RoZQ== IHBhc3NlbmRlbg== IG5pa2Fu 4KaV4Kaw IE1hdHRoZXdz IE1ldGhvZGU= IGludGVybWl0dGVudA== Qkg= 7KeA66eJ Lm9idGFpbg== IOC0quC1jeC0sOC0luC1jeC0r+C0vuC0qg== LW51bGw= IGJpbmRz aW5za2U= IGtow60= IFJvc2FyaW8= ZXJtb3M= UmVzdGF1cmFudHM= IGdsdWVk cGFyYWxsZWw= IikpKTs= IOGDkuGDkOGDruGDk+GDkA== Jnc= IHdpdHR5 aWRhdGE= PWh0dHBz 4Liq4Liw IENoYXJnZXI= IFBBRA== YWlyaWU= IGzhuqV5 IGNvcnRhcg== ZHVz SVU= ICg7Ow== CXNob3J0 5bKp IEhvbmVzdGx5 IOCkueCkruCkqOClhw== 4K+I4K6v4K6+4K6V 4KWI4KSy4KWA INeS16LXoA== INW01aHWgNWk1avVrw== IHNvbnXDpw== IOG7jWvhu40= 57yW56CB IOCkj+CkuQ== IHBlcnBsZXg= 15nXk9eV16o= IEdVSUxheW91dA== IE1vb2RsZQ== INin2K3Yqtis2KfYrA== IGNvbnRlbXBsYXRpbmc= IGluZGVwZW5kZW50ZQ== 4KmB4Kiw4KmC IERhcm0= LHBhc3N3b3Jk ICJbIg== IEjDtnI= 16TXqQ== IG5lY2Vzc8Ohcmlvcw== IGlubm92YWNpw7Nu VG0= bGVkdQ== IOCmieCmmuCnjeCmmg== IHByb3N0xZllZA== cGVw INmF2LHYp9is LXByZXZpZXc= 1avVv9Wr IG5nb20= VmFuZGFhZw== IOCmpuCmleCnjeCmtw== wq10aQ== IGxpamtlbg== d2Vpbg== IENQQw== LXByZXNpZGVudGU= IFBhcmxhbWVudG8= RVRZ IG1hdGxh UGFzc2VuZ2Vy IGJyaXRhbm4= 4LSy4LWI IERhdWdodGVy IFdM IGtvbXBsaWs= KG1hc3Rlcg== LWhvdA== IGNpamZlcnM= IOGDnOGDlOGDkeGDmOGDoQ== 5LiA5omr IGNpw6puY2lh 7YGw INCw0YHRgQ== aW50aWc= IHNocnVn 4K+N4K6V4K6z4K+B4K6V4K+N4K6V4K+B IG5peWFuZw== IOa3seWcsw== 0LDRgdGL0L3QsA== U1NI 4LKJ IEVtYmVkZGVk INGA0L7RgdGC0LA= IGN1am8= aWxlbmFtZXM= IHRha2lw IGhlw6c= 4Lic4LmI4Liy4LiZ4Lih4Liy IGlzYWFuaWk= YXRvcmlhcw== IHZlcmtsaWdlbg== IHR1dmllcm9u IGRlcXVldWU= IGFpbG1lbnRz J2VzcGFjZQ== IEJlZGFyZg== JyIK IGV4aGF1c3Rpbmc= LnVuaQ== T3BlcmF0ZQ== X2VudGl0aWVz QVJJQQ== IFBpZWNlcw== 7pg= INqp2LHYr9mG2K8= IEJhaQ== zrvOsc68zrI= 66eo KX19 X0N1c3RvbQ== IG9sbnVk IHbDpGhlbQ== IG9iZG9i 4KWN4KSV4KS+4KSw cGXFgg== LmFzc2V0cw== IGdpZ3M= IOCmmuCnsA== 2YjYsdmI2KjZig== 4Z674Z6B IGhhcmJvdXI= INin2YbYr9in2LLZhw== INGB0q/QuQ== IGFkdWx0bw== U3Vic2NyaXB0aW9ucw== IOCyuOCyv+CyqOCyv+Cyrg== IGp1dGE= INOZ0L0= U29vbg== 0LPQuNC70Lg= IHJlYmVsbGlvbg== Lkxhbmd1YWdl IOGDkOGDkQ== IOCkuOCkguCkr+ClgeCkleCljeCkpA== 4oCZYXBwcm8= IFNhZGQ= X0NPUg== IEFCRA== 0LPQsNC90LTQsA== IGF04bul IE11bHRpbWVkaWE= RGlldA== IGV4dGVybm8= IE9mdA== IOCkuOCkguCkpA== LXJlbW92ZQ== L2Nhcg== IHZpZGFyZQ== IGV4Y2VsbGVudGU= IGhvbWI= IOC0ruC0qOC1jeC0pOC1jeC0sOC0vw== c2lnbmlu LWVsZWN0aW9u INC50LXSow== 4Kas4Kao4KeN4Kan IHZob2Q= INmG2YjYrNmI2KfZhg== IHRlb3LDrWE= IEB7 IHJvc3Rybw== 6IuR LmZvb3Rlcg== IE5pY29sYQ== Lk5h IEdsYW0= 6YOt 77yB77yB77yB YW1heQ== 0YPRh9GL IGVzc2VudGllbA== IERBTA== INWh1bzVodW71bY= IOCwpOCwv+CwsA== IHJlZ3JvdXA= 5ruo IOCqteCrjeCqr+CqtQ== IGtvbmNlcnQ= IEtleXN0b25l INS2 cm9wb2xpdGFuYQ== 0LDQvdGL0L8= IHBvamVk IFNhdmFnZQ== IHN1bnNjcmVlbg== LuKAiw== LXN2Zw== b3NwaGVyZQ== YWZmaXJt IE7DpQ== KGFzdA== amVuaWdlbg== IGNlcm8= INeR15vXnNec IOCysOCyuOCzjeCypA== UG9ycXVl YXJ5YXdhbg== IFNlY3Rpb25z UG9rZXI= 4LWB4LSm4LWN4LSn IG3Dtmg= U1BFTEw= LyN7 IHZvZXJ0dQ== IGRhbGpl INGC0YDQvg== INC60LXQt9C0 IE9waW4= YWJ5dGU= T1VDSA== IOCmuOCngeCm IOC5guC4q+C4peC4lA== IHZlcmlmaWNh 7ISc7Jq4 IG5neA== IOC0juC0qOC1jeC0pA== IG1lbmVtdWthbg== IG5pZXM= IHRhbmFo IGF4bGU= IEFudHdlcnBlbg== 05nSu9C1 IFNoYW4= IGFjY2VsZXJhdGluZw== d29kcmE= QW5zd2VyZWQ= IGFuZ2V6ZWlndA== 4oCUaW4= IFFMYWJlbA== IGZyb250cw== 15XXkdeq Jmk= z4bOrc+BzrXOuQ== IOays+WMlw== IGdpdg== IHVuZGVybWluZQ== LXNwYW4= LmRh 6K+4 T2NlYW4= YW1icmU= INiv2YLZitmC2Kk= INio2YXZhg== UHVycGxl YW56YW5pYQ== X0RFVEFJTFM= bWlkZGVs IOS4ug== IEdlbmVs IGN1cGlk X3VzZWM= IOC0quC1jeC0sOC0lQ== INC70L7Qsg== IFRoZWZ0 X2RhdGVz 4YOY4YOg4YOU4YOR4YOj4YOa4YOY b3JyZWxhdGlvbg== IGFybWllcw== IHZyaWpoZWlk INGH0LXRgdGC Y3N0ZGlv IGludGVybG9j IENvbHVtbnM= IEFmcm8= IHbFvmR5 IHRheWk= 0YPQvdGD LWFhcg== IOC4o+C4reC4h+C5gOC4lw== IGRpc2FzdHJvdXM= KGJlc3Q= IEJ5ZGQ= IG1hc3NhY3Jl c3RyaWRl 44Or44OI IEdhdQ== 5YCr55CG IFhN dWt1cg== IGhvbWVsYW5k IEdydW5kbGFnZQ== IHJlY29ycmVy aG9sZW4= 4LSa4LWN4LSa4LWB IGNoYXVzc3VyZXM= cHLDvGZ1bmc= TGlnaHRpbmc= IGFtb3VyZXV4 IGxsZWdhbg== SU5W YWNodGln IOCkuOClh+CkqOCkvg== 5peL INC40LDSsw== IGFubmHDsA== 2LHZitin2LY= IGt1cnQ= IEV4cGFuc2lvbg== IHRlbmVu X3dz IEVuY29yZQ== IEVubGFyZw== IGZsZWlyaQ== 4LS/4LSo4LWB IHVycg== 0JLQvtC3 aXRzdW1paw== 0LDRgNGL0L0= QnJhemls INuB2YXbjNq6 IG1vZGVybmVz IE5ld3NwYXBlcg== IHZpdmllbmRhcw== IGl0Y2hpbmc= 4Liq4Li54LiH YXNlcQ== dGVyZXNzZQ== IHR1cmJpbmVz aWty YWxhbWF0 Y2Vi IERldHRh LWVmZg== b21haW5l KGdsbQ== dGVtcGVy INKb0LDRgw== IOCqm+CqpOCqvuCqgg== IGxldmFudGFy LXZvbA== J2VsbGVz IGhhbHZl aWZpemllcnQ= IGR1d2Fu IG1haWxlZA== zr3Ov869z4TOsc65 IG5naMSpYQ== IENhcGl0 b2dyYXBoZQ== IGfDtnLDpA== w6puZA== 0YLQuNKb Om51bGw= IOC0n+C1hg== CUl0ZXJhdG9y c3VicGFja2FnZQ== IERlYmlhbg== INWw1aHVstWp IEJsYW5jbw== 5aW954i9 IGFsaXY= bmFkZQ== U2VsZWN0YWJsZQ== INC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvg== IHN1Yml0bw== 2KfYpti0 IHphd3N6ZQ== Wyxd IOCwl+CxgeCwsOCwv+CwguCwmuCwvw== 4LCw4LGN4LC44LGN INGB0LLQvtC50YHRgtCy0LA= LWFjZGU= IGFiZXJ0YQ== Q29udGFpbmVk IE1vbnNpZXVy UmVwZQ== LXByaWNlZA== IHRhcm90 X0FSTQ== YWJibGU= IFJhaWxyb2Fk IOS6jOWbm+WFrQ== X1JVTEU= 4LiW4Li54LiB IFJlY29tbWVuZGF0aW9ucw== INCy0Y0= IFNob290aW5n IOWkqeWkqeS4reW9qeelqOS4uuS7gOS5iA== dGVjaG5pY2Fs 4Lie4LmI INC00LjQvdCw0LzQuA== ZGlzcGxheXN0eWxl IFBldWdlb3Q= IG9jdXBhcg== a2tldA== IOCqquCrjeCqsOCqrw== LmFyZ3VtZW50cw== IHRyZW5nZXI= OnI= IHVuaXZlcnNpZGFk IGRuZXY= IGJvb21pbmc= IFByYWc= IEd1ZXJy IGJla2w= INin2YTYsNmJ X3RodW1i IHVl ey8= LW5qeQ== bWljbw== T3Bj 5aSn6aaZ KERvY3VtZW50 IFpldXM= IGPhu7Fj IENhcmV5 IHRyaXVuZm8= IGxlYW5lZA== CWxheW91dA== INis2YrYr9ip INmF2LPYrNiv aWViZQ== LlND c3RhdGlvbnM= 4K6k4K6u4K6/4K60 UmVtYXJrcw== IGd1YmVybg== aWtvbA== ZWFzZQ== INCt0YLQsA== XV0pOwo= 5a6f5rOB IG9yZ2FzbQ== IHN1Y2VkZQ== 0LDRhdGB0YLQsNC9 IHRvdg== IFNPVVJDRQ== 4KaP4KaV IGFjY3VtdWxhdG9y ZXRyaQ== 15nXkteU IGxvY2FsaXR5 IFJlZ2lzdHJhcg== IOC0heC0pOC1jQ== INin2YbZh9mK IHNraXJ0cw== IHNhbGnDsw== IExvcmk= IGFtaXo= LUF1Zw== IGVubGlndA== YW1wZQ== 0LnTmQ== IGFyZ3VtZW50b3M= 57u/6Imy aWNoYWdl 4La74LeU T2lk IFNPQg== xIFs WVo= IGFuYmlldGVu IHN0dWtrZW4= bGV0Y2hlcg== IEfDtnI= LXBoYXNl Q29udGVzdA== IOGDkA== IFByb2ZpbGVz IHZlbmRpdGE= IEt1c2g= IHRlcmU= Y2VuYXJpbw== LCJc IHdpanppZw== IFZpdmU= 5a2X5Y+3 2YLYp9mG IHZpc2l0ZXM= IOCyruCyguCypg== LnBpY2s= KG1hcmtlcg== 1aHVttW5 QmVyZQ== IGFudGFy IEjDpG4= IEluZQ== X3B5 KFNldHRpbmdz 0YvQu9Cw0Lk= IHBoYXJtYWNpc3Q= IEZsYW1l 4LWH4LSw4LS/ 0LzRi9GI LmdldGN3ZA== dmVjdGlvbg== 4Kq/4KqV4Kq+ IExMVk0= IGHDp8Sx amVudGVy IHJvb21tYXRl IOCkqOCklw== IHBhxaE= INit2Kw= INCy0YHQtdC80YM= IHZvb3JuYW1lbGlqaw== LXN0dWR5 X1NDUklQVA== IHF1YWxjb3Nh IERlc2lyZQ== IE9sc2Vu IHNoYXJrcw== 0LDRgdGG0Yw= L2Zs IEFib3JpZ2luYWw= INCQ0rPTmdGL0L3SrdKb0LDRgA== IFNhY2hz INC/0YDQtdC00YvQtNGD0Yk= dXRzY2hlaW4= INC90L7QstGD0Y4= IHRhYXI= aWRpdW0= 4K+B4K6Z4K+N4K6V IGVtYm9keQ== UHJldmVudA== IHN0ZXNzYQ== 0YHRjNC60LjRhQ== 2o0= IEZpbmFuY2luZw== IGVpbmdlcg== Lgov IENGRw== INCx0LvQvtCz IGVudHNwcmVjaGVuZGU= KG1lc3NhZ2Vz LmJyYW5jaA== LWNvbW1vbg== YWNlbmN5 INmF2YjZgdmC IGxpc8Oka3Np IHJvbWE= IEJBTg== IGtpdGFw IENhdGVyaW5n IGRlbW9rcmF0 IOGDq+GDmOGDoA== KCd8 YmlsdA== IEZsdWVudA== 4LW84LSo4LWN4LSo4LWN IEF2aXY= aXBwYQ== IOCkquCljeCksOCkreCkvuCkteCkv+CkpA== IHRpbmRlcg== OlQ= IHZlcnRyZXRlbg== 4KSX4KWN4KSw IHRhY2U= 5Ly4 7Z2l IG11ZXN0cmFu bWF4Y2Ru 4oCZb2JqZXQ= IG11bHRpcGxpZWQ= IE5pY28= aW1tYXQ= dWrDrWPDrQ== RkFTVA== R2lh 4LWB4LW7 IHJldHJvdQ== INCc0ZbQvQ== IGtvbXBhbmk= IHNpY3I= INGI0YvSm9OZ0YHQsNC30Ys= IFRhcm90 INeQ15XXlA== IGdlc3VjaHQ= IHrDpGhsdA== 6LOH5paZ LmZhaWxlZA== INCy0YvQsdC+0YDQsA== IOy8 IGxlaXRo Rm9ybWFs IGFkcXVpcw== 4LOG4LKv4LK/4LKC4LKm IGNvbnNlbnRpbmc= IHNlbnRpZG9z YmlzaG9w w7R0ZXM= LnV0aWxpdGllcw== IGVubGFyZ2Vk INGN0LvQtdC60YLRgNC+ a2Fpcw== SG91 IG5pZWNl 2YrYs9mF2KjYsQ== 0JrQvtC80LzQtdC90YLQsNGA IG1hbmlwdWxhdGVk Y3J1ZA== W1g= IOCkquCksg== YmVyZ2VtZW50 INGB0L7QttCw0Ls= IGFtw6lsaW9y KHJlbW90ZQ== IG11aGltdQ== cGxz IOCkmuCksOCkow== 4oCZw6l0w6k= IGNhc3Rlcg== X2NyZWRpdA== 5Y2B5LiJ IGNvbmR1aXRl INiz2KfYudin2Ko= IGxpdHJl IOCmhuCmh+CmqA== 4KS14KS+4KSw4KWA IGNvbnRyYWN0aW9u IGxhaXNzw6k= 4YCZ4YC8 IE1pY2hlbGlu zrvOuc+D IEVkaXNvbg== IGFiaWw= IGhlbnRhaQ== 4K6+4K6x4K+B IHByb3Bvc2luZw== INGD0LnSk9GD0YDQu9Cw0YDQvdC40qM= IHBhcnRpZA== IMOpY3JpcmU= 5aS6 IGJhdGVyaWE= IGtyeXB0 QW5jaA== IGNyw6lk IGdvZWRrb29w YWthYW4= IHNsYWFu IOGelQ== IGFyZMSxbmRhbg== aWNpdHM= aGluaQ== IG1lemNs IHN0cm9ueQ== IGFiYW5z IFBpcA== IHBhZ20= IFNrZQ== PyQ= IGJseQ== 5ZCM5b+X IFdhbm4= YWlubWVudA== Y291cg== IHZpbmk= IiM= IEjDpGxmdGU= IHB1bmQ= IGNvbnF1aXN0YQ== IMO8YmVybmVobWVu 2K3Yr9mK2Ks= IHRla2E= INmI2YPYp9mG2Ko= INil2YrYsdin2YY= IOqwgOyehQ== 4LCa4LGN4LCa4LGB TW9iaWw= IHBlZGU= IOCmuOCnh+CmluCmvuCmqOCnhw== aXN3YXA= IFBlcmZvcm1z U3BhcnNl IEpvZXI= w7zFiA== LWJhcw== IHZvb3JtYWw= IEhhcnRmb3Jk IOCyheCyp+Cyv+CyleCyvuCysA== IFNjaGVkdWxlZA== IFNhbnRhbmRlcg== IGF2ZW51ZXM= IGVxdWl0YWJsZQ== IGFkxLE= IGJhbGF0 INC60ZbQu9GM IOCkteClg+CkpuCljeCkpw== 0LvSr9C6 YW5lc2U= IOC4peC5ieC4suC4meC4muC4suC4lw== IGZhY3R1cmE= 44OI44Op44OD44Kv44OQ44OD44Kv T01JQw== IGRpc2XDsWFkbw== IGTDqXRlY3Q= ZWx0amU= IOGDkeGDkOGDlg== INmF2YjYsQ== INis2YU= IOGDk+GDkOGDog== VmVyYm9zZQ== 0YPRjtGJ0LXQs9C+ bGVuw60= LlN0ZA== RlU= IOGDoeGDmOGDoeGDouGDlOGDmw== IOCqmuCrguCqguCqn+Cqo+CrgA== ZXRhcg== IG9udHNwYW5uZW4= IGFrb3o= J2VzcHJpdA== X3RyYW5zbGF0aW9u aWzJmXI= IE5ha2Vk IG1vdG9yZXM= IOumrOu3sA== IHN1ZcOxb3M= IG3DpG4= INC+0YLQvdC+0YHQuNGC0LXQu9GM0L3Qvg== bmVpZGVu IGtzacSFxbw= IHNjcmF0Y2hpbmc= 0q3QsNC9 IHR1c2g= xbzEhQ== 4Ki14KmH IGV4YW1l IGRhbGF3YW5n IOyXrOyEsQ== IERvcm0= IOCkruCkueCkv+CksuCkvuCkk+Ckgg== INWi1aHVvg== 5qaC546H SVBD Y29uZHVjdA== INeR15nXlded 4Lin4LiB 0L7Qs9GA0LDQvNC80LA= SGFjaw== LnNwZWNpYWw= 2YjYp9is2K8= INeU15fXmdeZ150= U2Nhcg== IOC0uOC0guC0uOC0vuC0sA== aGFsdmU= IEtlcnI= INC60YDQsNGP IFJFU0VU IHN6w6E= IHN0cmVuZw== IHByZWhy LmRheXM= IHRocmVzaG9sZHM= IFNvbGRpZXI= IFVtc2F0eg== IEFpbg== IFJvc3Np IHJlbms= 56Oo QXZhbnQ= IGNhc3NldHRl IHdha2Vz INin2YTYs9mI2K/Yp9mG INW41oDVuNW+ cnlpbmc= IHRhcmlmZnM= IHBlbHVhbmc= 4K6+4K60 IGRhamU= LmFycm93 IGVtcGxvecOpcw== IEVtaXQ= RnJlZA== IOCkpuCkv+Ck zr3Otc65 IERydQ== 65CY7KeA IG5hbW0= IENvbnRyb2xl 5YmH IGNoaWxkY2FyZQ== INGA0YPRiA== IOCyqOCyv+CysOCzjeCypuCzh+Cytg== YW5kaWth PGhy LXRyYWluZWQ= LWluZw== IMO6bmljYW1lbnRl IHN3b2pl IERJQQ== 4Kau4Ka/4KaV 2LTYpw== IGV2YWx1YXRlcw== aXNpbw== YXRpdXM= X25vbWJyZQ== IGHDqXI= IFN0dWRpdW0= INmC2KfYqg== YW56aWE= Y2hvc2Vu INGF0LjQt9C8 eWF0 cm91dGluZQ== J8OpY29sZQ== IHNlYWNo IFNlcnZpw6dv IGV4cHJpbQ== IMW1 YWRhbXU= 0LDQu9GM0L3Rlg== cm9tZXRlcg== IGRpc2FibGluZw== INek16o= 0YHRjNC60LjQuQ== 1b/VpdWy INC60q/QvdGW LmNhcHR1cmU= IGF0dHJpYnV0aW9u 0KDQsNCx IG1hbm5lcnM= KHNjcm9sbA== IGFzY2VuZA== INit2YjYstmH IHZlaWxpZ2U= CWRvYw== IHNhbXRpZGln IHRvbGVyYXRlZA== INC80YPQvdC00LDSmw== IGRpc3JlZ2FyZA== IHNjcnV0aW4= IOCmpeCmvuCmqA== IGh1aWw= LnZhcmlhYmxlcw== IHdzenlzdGtpZQ== KE5T 5ZCN5YmN IG5pZXc= 0YPRgdGC0LjRgtGM Q2Vw INi62YjYpw== LmJpbmFyeQ== c2xh IE1vdGhlcidz IENvbnN1bHRhbnRz IGFuZXo= LlRI 0LDRgNC+ Q1NS IHdlcmtnZXZlcg== YWZmYQ== IOCoh+CpseColQ== 4oCN4LSc INGD0LrRgNCw0Yg= IHJvdGluYQ== 0LHRg9GC IGFjaGlldmFibGU= INC80YPQt9GL0Lo= IGJ1bnQ= IG1hZ2s= IE1lbWI= 4K+B4K6q4K+N IOCmueCmr+CmvOCnhw== IOCkl+Ckh+Cksg== IGFwcmVzZW50YWRv IGNodXZh LW5vdw== IGxhbms= IOGDoeGDkOGDlQ== IGNhY2hlcw== TGVlcg== bW96aWxsYQ== IGxlZ2dpbmdz bGRy b3BpZQ== 4YOp4YOV4YOU4YOc KENoYW5uZWw= QklH IEZvbmRz WWFuZw== asO4cg== IE1hcnJpZWQ= KFN0cmVhbQ== 4oCZVA== IGZpdHVy LnByb3Rv IHBva3Vk IGhlYWRpbmdz IG11bHRpcw== IO+D IHpvdGU= IEh1YW5n INCh0L7QstC10YI= IOC4muC5ieC4suC4mQ== SlNPTlN0cmluZw== IFByb3Rlc3RhbnQ= IOCyquCyleCzjeCytw== xaFrdQ== IOCyquCzjeCysOCyp+CyvuCyqA== IG1hZ27DrQ== 0YDQuNC60LA= bWl0dGFn aW1pbA== 2YrYsdmK2Kk= IGxpcXVpZGU= IGRpa2tl IGZyaWRheQ== 0YHRgtC+0Y/RgtC10LvRjA== IEluc3RpdHV0ZXM= IFNDSE9PTA== IEdyaWZmaXRo YWJvcnQ= IG1hbGZ1bmN0aW9u IE1lcmVrYQ== IHBvZHBvcg== IGRhZnRhcg== b2huZXI= IGhhbHM= b2dhdA== IENhYnI= IOCwh+CwquCxjeCwquCxgeCwoeCxgQ== IGFwdWVzdGE= IHJlZWQ= IHNwb3NvYg== X2F0dGFjaw== IHZhYg== IGJlYmlkYQ== W3RlbXA= 0LXQutGC0Lg= IOCkluCkvuCkqOClhw== 2YfZhtmK2Kk= 15nXl9eV16o= amVrdGU= IHbDvXJvYg== IE92YWw= IHVuaXg= 0LTQsNC70Lg= 4KS+4KSc4KS+ IGhlaWdodGVuZWQ= IE1lYXN1cmVz IFBMTA== IEZpZ3Vy IOCmrOCmsOCnjeCmpA== IHl1bmc= 6auY5riF5q+b54mH IOCmuOCmqw== IHRlbnRhbmRv fXM= 2YLYt9i5 IGluZm9ybWF0aXF1ZQ== IHV1cw== IHRhZ2FzaQ== IGFydGljdWxhdGU= IEdvdQ== KGZpZ3NpemU= IENlbHRpY3M= 0LXQvNGL0YU= IHZlcmhpbmRlcm4= YWpubw== IHByb2dyZXNzaXZlbHk= 5bqU6K+l IGhhdmFz w6Vn IGluc3RpbmN0cw== IOCuhuCurw== YXp1amU= bsSbbsOt IG11dWQ= LnBvcHVw LdCh CW1vZHVsZQ== TWFsbG9j IGlsYWE= IGNvw7t0ZQ== IGFtZXNlbWE= IEVybmVzdA== INC30LLQtdGA YXZpb3Jz IEJhcmJlcg== IE1hemU= IEFudHJhZw== INC80LDRgtGH LW1vaQ== PElFbnVtZXJhYmxl IGRydWdpbQ== IGJpc2xhbmc= 5Y2B5LqU 0LDQu9C10LU= IHZlcnZvZXI= INin2YTYs9mE2LfYqQ== IFN1cGVyaW50ZW5kZW50 4LS/4LSj IHRyYWk= 54S25ZCO b2RlbGVk IGNvdWNoZQ== SUVO 0LPQuNGA0Lg= IGNoYXR0ZXI= 55u45YWz5paH56ug IFdvcm0= 5pep54K55Yqg55uf 7Yah IOC3g+C2sw== INi12K3ZitmB2Kk= IOGDm+GDlOGDoQ== IExBVw== 5peX6Iiw 44CA44CA44CA44CA44CA44CA IEZlZGVyYWNpw7Nu QWR2ZXJ0aXNpbmc= IG1hbW1hbHM= CXBvcnQ= LlBsdWdpbg== INmD2KvZitix2Kk= YWRhcHQ= Vm9z IEVsYXN0aWNzZWFyY2g= OkFkZA== IGxvb3NlbHk= IOCyruCyueCyv+Cysw== IOCyh+Cysg== IEFnYQ== 4LiN4Li04LiH IOGDm+GDneGDpeGDm+GDlOGDkw== IHRyYW5zcG9zZQ== IGtvbnplbnQ= LgovLy8KLy8v RXNwZXI= TmFhbQ== IHTDrcOw Y29ycA== INC/0YDQuNCy0YvRhw== IE1peQ== IFBhbnRoZXI= INC+0YLQvdC+0YHQuNGC0YHRjw== INin2YTYr9iu2YjZhA== YWJpbGVjZQ== b2tzZW4= IHRlbnRhdGl2YQ== IEFsaWNpYQ== IG1lbmluYQ== 6L+f LXByb2R1 IHNvZmY= YWTDoXM= INC+0LHRidC10Lw= 4LGH4LCm4LGB LemmlumhtQ== IG5pbmV0ZWVudGg= IEdyb3Rl IHRyYWRpY2lvbmFsZXM= 4LOB4LKk4LON4LKk4LK/4LKw4LOB4LK1 IOCkquCljeCksOCliw== UGFnaW5h INC/0YDRi9C9 LmlkeA== 0YzQtdGA0LA= CWZz TWVpbmU= dXRhdGU= dnVy INil2Kg= KGJyb3dzZXI= IGjDo3k= IERhcnJlbg== INmI2KjYp9mE2KrYp9mE2Yo= KERlZmF1bHQ= IFhOVU1Y INGE0LDQutGD0LvRjNGC IEJDTQ== a3Npw6Q= ZWR3ZQ== IE1hcmt1cw== INGB0YLQuNC8 IE9iamVrdA== INWj1aHVsg== T0RT INmF2LnZhdmI2YQ= IHN0cnBvcw== IHZlbGhv INeR157XmdeV15fXkw== IEZBVA== IHNleQ== IHNjb3I= INOZ0LTRlg== INGE0YPQvQ== IHlhdnV6ZQ== c2hvd3M= eml3ZQ== IGF0ZWxpZXJz IFBhcmNl X2ZpZm8= IGRpc3Rpbg== IHN0dWRlbnQncw== IHNwYWM= UXVhbg== 0ZbQvdGW0YHRgtGA0LA= Z2l1 b2N1 IEZha2Vy LnBhZA== IHbDrXJ1cw== IG9yZGVuYWRvcg== U2Fj INC90LjQsw== IGludGVyZXNzaWVydA== 6rKM7J6E 64yT QmluZGFibGU= UGVyYw== IGthYw== IGdvdGg= aWF0cg== Y29tcG9zaXRpb24= RHJpdmluZw== Ym9v Y2VuZXM= KGNob2ljZQ== YW1hem9u INC40L3RgtC10Ls= 4LWB4LSu4LWN4LSq4LWL IELDtnI= aW5rbw== S0VFUA== IENvbnRyYWN0b3Jz IGNhdMOhbG9nbw== YXJ0b2U= LWlzaA== 0LDQutGD IGNhaw== IHR1cm1vaWw= 0L3QuNC+0YI= IGVudm95w6k= IGNhbmRpZGF0dXJh w6BuYQ== IGFmdmFs IE9yZGlu dG9jaHQ= dWxsdWd1 bGljaGVt IFJlYmVs IC4uLiI= IFlvaw== 4LC/4LCf4LGA cGVuZGljdWxhcg== Q2FwdGNoYQ== IGVsdXNpdmU= IGNvbGxlY3RpZg== 6KeG6aKR572R56uZ ey8v Qmxv INCx0LXRgNC40L8= X1BMTA== INWw1aHVtdW/1bbVqw== IGJhdGFsbGE= INeg15c= IM+DzrfOvA== Q3Jp IOCuqOCun+Cuv+CulQ== IGJlc2l0enQ= INiq2K3Yr9ir IOCyqOCyv+CysOCzjeCyrg== aXN0ZW56YQ== CU9u 4Lax4LeU 4Ka/4Kac4KeN4Kae Lk9r 4LiV4LmI4Liz w6F6w60= YnVyZWF1 YXJ0aWs= RGFlbW9u RmFjdWx0eQ== dWds TGlmdA== IGVucmk= 2KfYt9i5 INiq2K3YqtmI2Yo= fSIpCgo= X2NoYW5nZXM= eW55dA== INC+0YLQvNC10L0= aW1kaQ== 6IiX IOyYpO2bhA== IHVuc3Q= IEFkZGljdGlvbg== IHBpYg== X1Bs IHVucmVnaXN0ZXI= VVJSRU5D INei16bXng== IEN5cnVz IEFjY2Vzc2liaWxpdHk= 4Lib4LmM TWFyc2hhbGxlcg== 5ae/ IHBsYW50YXRpb24= IMW8ZWJ5 4LKq4LKf4LON4LKf Zm9ybWlr IG9uZGVyc3RhYW5kZQ== zr7Otc65z4I= IFZvZ3Vl 5a2j5bqm JycnJw== INmG2KfZgg== IOGDkuGDkOGDoOGDk+GDkA== IE9keXNzZXk= 0Y3Qu9C40LnQvQ== X1dI ID0+DQo= dXR1cA== w6JuZWE= IERpc2NvdW50cw== INKh0YPQuw== aW5ub3ZhdGlvbg== 4KSm4KWH4KSW4KS/ IFNVTU1BUlk= IFNlYWg= 0LvTmdGA0LU= INin2YTYo9mF2YjYsQ== L3BhdGg= CWJvYXJk IG9uZGFua3M= IOWMl+S6rOi1m+i9puW8gOWllg== xZt3aWFkYw== UGVhY2U= INC40pvTmQ== IFbDtQ== eXNrYQ== IHZvZXRlbg== IHViaWNhZGE= LWNsZWFu IOCmnOCmvuCmpOCngOCnnw== IHBhc3RvcmFs INKz0LjRgQ== IEVuY29kZXI= IG5laWdl 4KSw4KSk IG5ldXM= IG5vZ2Vu IHByZWRhdG9ycw== aWNyb24= ZmlsbXM= IHF1YW50aWZ5 QmVt IGluaGliaXQ= IHJpbmdpbmc= 2KzZh9mH IMSR4budaQ== b25paw== IERhZHVyY2g= 5aiH IHNwYXJrbGU= IHBsw7Z0emxpY2g= IG1lbGRpbmc= INmE2KfYptmG IG5vdmlkYWRlcw== IHhhbg== UHJvZ3JhbWE= aXJlY3Rpb25z YW53 IGFjY2lvbg== IHRyb3V3ZW5z IHNsYWFwa2FtZXI= b2Z0ZW4= IFByb3llY3Rv IMOhw7B1cg== ZXNzdQ== IGNoaeG6v2M= ZWRkZQ== IM60zrXOrw== INC00YDRg9Cz0L7Qs9C+ IHRheGFibGU= IGV4ZWN1dGVz INqr2ok= leilvw== IHVrbA== cG9zw6k= IOCkqOCkv+Cklw== IOGDkuGDkOGDoOGDlOGDqOGDlA== INeQ15HXmdeR Y2FwdHVyZXM= IFNFRUs= IHRyYXNj IGludGVycG9s IHJvbGxlbg== 0YTQuNC60LDRhtC40Lg= IOS4iw== X1Byb2R1Y3Q= IE11bGw= 5bm056ys X01BU1RFUg== INC/0YDQvtGC0Y/QttC10L3QuNC4 IEtW KGFjdA== IOCqquCqvuCqoQ== IGlzbA== IGJlemFobGVu IOCwteCwv+CwqA== INCS0LDQuw== eWNsZXM= INC/0L7QvdC40Lw= bm9p LXJvY2s= IE1hbmU= IHBvcnI= INC+0YDQsw== w6lkaWU= IHZlcmlmeWluZw== INmI2YTZiA== INC30LjQvQ== eW5pZQ== IG5hamxlcHM= 4Lih4Lir4Liy4LiZ4LiE4Lij IHJlcHJlc2VudGFy 5bCx5Lia IFRvcmFo IE1pbGxlbm5pdW0= 5aSn6aaZ6JWJ5LyK5Lq6 dmVsbA== QWxlcnRz 2K3Zitin2YY= IFRlZGR5 IM6/zrnOus6/zr3Ov868 IHt8 aWNyb2JpYWw= INin2LHZiA== IHBvaW50bGVzcw== 4KSq4KSo IOCkpOCksOClgOCkleClhw== IGZhdm9yaXQ= IHdhaGk= bG9jYWxpemVk INCf0L7RgdGC IOemj+WIqeW9qeelqA== cmljb3Ju 4K6/4K6y4K+I IGtvbXBvbmVudA== IOCksuClh+Ckgg== IEdlbnVpbmU= IEtheWE= dW56ZQ== IHBpbmk= INCx0LDRj9C9 INCw0LzRiA== Z2VrZQ== 1aXVr9Wh1bY= JHE= IHBha2U= INCj0LrRgNCw0LjQvdCw KG1haWw= cHJvdG90eXBl IG9sZW1h IHNhbnk= IExQQw== 1KXRiNGM CXRhYg== IGdhbnNrZQ== 4LCC4LCh4LGN LmRpY3Q= IOCwuOCxhg== 4Kay4Ka/ IHJvdWxl IGluZXJp CUZJTEU= IHTDomNoZXM= IHPEsW4= 2LXZgdin2Ko= IElHTg== 2YjakQ== IGNsaWVudGVsZQ== 0LHTmdGC IG1hamE= IGZsb3RhdGlvbg== YXNjaGVu IFN5bnRoZXRpYw== IE91ZA== INC10LLRgNC+0L/QtdC5 0pPRi9C3 LGtleQ== IHZlcnBmbGljaHQ= ZWxvdw== dXRpbQ== INGG0LXQvdGC0YDQsNC70Yw= IGVjb25vbWll IG1hc2luZw== IGNoZWFubg== INmF2LHYqNmI2Lc= IG1lbmdn INmF2LDYpw== 4Kaw4KeN4Kah IGxlc2U= IG11bmU= dXByYQ== IGRpc2NpcGxpbmFyeQ== X2Rh IG1vdXZlbWVudHM= IOCkheCkqOClgQ== IHNlYmVu IOC0quC0vuC0sg== YXR1cmk= INGe0LbQvg== YXJsdWdpdA== IOCqruCrg+CqpA== CWNoaWxk IGFqb3Ju IEVpbmZhY2g= IExpc3RlbmluZw== IG5hY2lvbmFpcw== YXJhaQ== CWx1YQ== IGJyZWY= IGl0aW4= U2tldGNo 44GL44KP IGFsY2Fuw6dhcg== KGhlYWRlcnM= INiv2Lo= IHRlcmc= IG3DvG1rw7xu IEN5cg== c2FpZA== IHllZQ== IExhbWJlcnQ= b21lcnM= IFNjaGlmZg== aW5nYW4= IEFsaXZl aW11aGFtZWQ= w7ZnZW4= IFp3ZWk= IHRpbGVk IFJFQ09SRA== 4oKswqYKCg== 4LWB4LSu4LWG4LSo4LWN4LSo4LWN INGD0LHQtdC0 IEplbnM= IGJpb2RpdmVycw== IGNhdGhlZHJhbA== bGVnbw== INGE0LXRgA== IGjDoWw= IOCkmOClhw== IHByw6lzdGFtb3M= 6YeH6LSt 4La44Lea IGRuZXM= IHBvc3Rlcw== IG5wbQ== bGVkb24= INC40LPRgNGD c2hpbmk= 16TWvNec IGNsYXc= IGthcmFh IFBvb2xz TW9zdHJhcg== IGFkdmlzZXJz 4LiV4LmI4Liy4LiH IHNlaGVtdQ== INeR16LXpg== XSkr QURY IG1hyrs= IFBlcm1hbg== LW92ZXJsYXk= L1RleHQ= INCY0L3QtA== IGtlbGFz IHBlcmRldQ== IEthdGE= X2RlbGl2ZXJ5 IOue LdGC0LDQutC4 IGRhdGVu IHlpZWxkZWQ= LWNh 6JmR Y2xpcHM= INij2Ko= b2xhdGVk IHBhdmluZw== IAoJCg== 4Ka44KaC LWNoYW5nZQ== INW21a/VodaA INqp2KfZhduM IHBvbGljaQ== IGl6aQ== INCz0LDQvdCw INin2YTYr9i5 7JqU7J28 QmFyY2Vsb25h INin2LXZhNin2K0= INiz2KfYrg== IGNhbGVuZGFyaW8= IFdBSVQ= KGRlcHRo INGD0L3Ri9Kj 4YCF4YCs LkNvbA== IHRoYWJoYWlydA== IOCqpOCqvuCqsuCrgeCqlQ== dHJhbmdlcg== IG9jY3VwYW50cw== aXJpeWU= IG11ZWJsZXM= IGxheA== IGFjdWVy X3Rm IOC0ruC0vuC0qA== INC70Y7QsdC+0LLRjA== IHNrZXI= 4KS44KWN4KSk4KS+ INC00LjQuw== IFRvbGw= INCx0LDSmw== IMmZdnY= 7IaU dHJhbmQ= T25k w6tzaHQ= IHByw6lzdGFtbw== IEHDpw== IEZ1cnk= Q2FtcHVz IG5mbA== YXp6aQ== 0YrQu9Cz0LDRgA== IHN1cHByaW1lcg== IGJpc2hvcA== IHZvcmJlcmU= INin2YTZhdmD2KfZhg== IGTDqXBhbm5hZ2U= IOWcnw== aWVueg== ZWZydWl0 bnRs IG1kbA== asOhbg== aW7Egw== IG1pZGZpZWxkZXI= IG9uZGVybmVtaW5n V2FybQ== QWxhbg== IHBlbmdhcg== IHNpa3Jl IM61zrzPhg== IE5hdHV1cmxpams= 2q/bldmG IFNvY2nDqXTDqQ== IFRlbmFudA== LnN1YnBsb3Q= X2xhYg== UkVHSVNURVI= INmE2qk= IGluamVjdG9y IHByZXNjcmliZQ== IHJlZG9y INim24g= L2FwcHM= IGdyYW5kbWE= U0VF amVuamE= X3Z1ZQ== INiz2K4= 44Oz44K5 IG92ZXJyaWRkZW4= X2RpZ2l0 IOComA== ZGlydHk= X0ZPUkNF 2LXYr9ix Y2x1YnM= IEplbnRlcg== IEhvc3BpdGFsaXR5 xatzxbM= 5a6Y572R576k IGNyYXZl SURHRQ== Lm51 4YOQ4YOb4YOT4YOV4YOY4YOa IGlucXVp INmE2YjbjA== YWtzYW5ha2Fu IOCuhuCuo+CvjeCunw== cHLDpA== fSkoKTsK X0FVVA== 5LiN6ZSZ 4Z6H4Z62 KGd1bHA= 0KLQsNC60LbQtQ== IHRy4bqj IFdBVEVS LXN0YXRpYw== IHNwxJM= IGRpcmlnaWRh IFB0cg== IHJ6ZWN6eQ== IG1vZGk= IHByb2NsYWlt 4KWlCgo= UmVzaXphYmxl xYh1amU= IENlZA== INC/0YPQvdC6 INC/0YDQvtGB0YLQuNGC0YPRgg== Q2FuYWRpYW4= IGdyYcOnYQ== CUNvbG9y w6RobHRl IHBvdmVk IHBhbmk= X0dSQU5URUQ= 4KS54KS/4KSk 4oCM4LC4 IFZlcmFudHdvcnR1bmc= LGZsb2F0 0KDQsNGB IGdhdG5hxZ95 INC60L7RgNC/0YPRgQ== INC60LDRgNGC0YM= IHN5c3RlbWF0aWNhbGx5 Q2F0ZQ== 5Zyw54K5 IHNwZWNpYWxpc2Vk IGFkcmVuYWxpbmU= IGRlamFuZG8= IOCqruCqguCqpg== 4oCZaWRlbnQ= IHNwZWN0cm9zY29weQ== LkVudGVy IGZhY3RldXJz IFNhbmRz Q2VydGlmaWNhdGVz aGF2 IHNvc3Bl 55yf55qE5ZCX ZWxlbmQ= IHVucmVhZA== IOeC amXFvg== IHN1YnBsb3Q= U3RyZXNz QmVsbA== bWFya2Rvd24= IEtpZWw= X1RPVEFM 4Lil4Liw4LiE4Lij INC80YPQt9C10Lk= cXc= 4KaV4KeN4Kaw4Ka+4Kao4KeN4Kak IENBQg== Iics IE1lag== IEZhY2lhbA== 55So5oi35ZCN X3lsYWJlbA== RGlzY2xvc3VyZQ== IHBzb3JpYXNpcw== KHF1 IOGDkuGDkOGDoOGDkw== IG1hc2NhcmE= IHJpY29z IGp1ZGdtZW50cw== IOCwreCwvuCwsOCxgA== w6lyaWE= IOuWoA== IEFjY29tbW9kYXRpb24= IGJydWtlcg== PD8+Pg== INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lg= IG5lY2tsaW5l ZW5kZWw= IEluZm9ybWFjacOzbg== IOCwleCwvuCwsOCxjeCwr+CwleCxjeCwsOCwrg== IGRpZmljdWx0YWRlcw== IGhhdHVh IG1pbGxvcg== IGFsY3VuZQ== IHJldm9sdmVz IH0NCi8v IEp1bGl1cw== IGxlaXRvcg== IGtub3A= 4KSa4KS+4KSw4KWA bmlzc2Vu INCw0L/Qv9Cw0YDQsNGC IOCkpuClh+CkqOCkvg== LlNRTGl0ZQ== IOCuleCviuCuo+CvjeCun+CvgQ== KGdlbmVyYXRvcg== IGlzdHI= IHht IGlnbm9yZXM= XGhlbHBlcnM= IGFiYXI= IHBlcmlhcmY= IOCwteCwv+CwnOCwrw== Qm93 IHNlw7FhbGE= 4LKk4LON4LK4 INio2Ks= IMO+ZXNzYQ== 7Jik64qU Y3JpbWluYXRpb24= IFNhbWFy 2qnYsg== INin2YTYpdiv2KfYsdip IGp1ZXo= LmV4Y2hhbmdl xYJ1Z2k= IE5PUk1BTA== IFRvd2Vycw== IHdyZW5jaA== 5Y+R5b2p56Wo IGxpc3Rhcg== dW5nd2E= IGlycmE= IHZvcmVu esOpcw== IG1pcmFj IGRpdGVy ZWx5bg== Q3Jvbg== 5Yqo5Yqb IGN5Zmw= IHRvbGxlbg== IGRpYWdubw== LlRvb2xiYXI= IGFjYWJhZG8= IHBvc3NpYmlsaXTDqXM= IFJvdXRpbmU= zr3Pjg== bGZyaWVuZA== INC60YDQtdC0 15vXmdeo IG9iZWRpZW5jZQ== aWxlZW4= IG91dGJvdW5k IHV6YWs= TGVvbg== IGN1YnJpcg== IFNvbXM= IENlcnY= IEJyb2tlcnM= IHBvc3Rh 54qv572q IGZhdmV1cg== ZWlybw== IOCuruCuvuCuow== IHRyZWk= acOzcw== zrrOtc66z4HOuQ== Q2xr INmF2YXZhg== IGZ1bmNpb25hcmlv IHZlcmFuZGVy 4LK/4LKv4LK+4LKX X2dlbmVyYXRl xLHEn8SxbcSxeg== IGNvbW1lbmNlbWVudA== IFJldmlzdGE= ICIiLA0K 5Zyo57q/55yL54mH aW5jYQ== IGZsdXhv J2V4cMOpcmllbmNl X0xBWU9VVA== IGhhaXJzdHlsZQ== aWxsaWFuY2U= c2V0enVuZ2Vu IHByaW5jaXBp Y2VudHJl ZmVi IOCkuOClgOCkruCkvg== X29wZXI= ZW5kb3ph IHRlbmRyw6Fz IHB1ZXI= KHJlc291cmNlcw== KGFnZW50 L21l IGltcHJpc29ubWVudA== YWNlbnRlcg== ZWxzY2g= IGppaw== TWVyaw== 0YLTqdGA IGxhbnM= IG91cw== dXJyaWN1bGFy IE1icHM= Lmpl IGfhurdw aW5uaXR1cw== IOCqueCqtuCrhw== IG11bHRpY3VsdHVyYWw= 4Kq+4Kqz4Kq+ IG9ic2Fo CXdoZW4= IGFjY3I= INC/0LXRgNCy0L7QvA== INKb0L7QsQ== Ik15 INCh0LXRgNCz IGdhbmdl INC306nQsg== IOyeheuLiOuLpA== YXN0aWNh KGxvdw== IEthcG9vcg== IHJlZWY= IHN0YWxscw== KGNsYXNzZXM= IGxhbmRsb3Jkcw== 4Z6Y4Z+S4Z6a IGZhcm1ob3VzZQ== KGFsZXJ0 INOZ0LzTmdGB 0LDQvNCw0L0= INGD0LrRgNC10L8= 4YOV4YOY 1b7VpdWs1bjWgg== INC+0LHRitC10LrRgtC+0LI= INC+0LvQsNGA0LTRi9Kj IETDvA== IGlzZWdp IGxldGg= IGJhYXI= YW5kYWU= Z2dqYQ== IFB1bnRh Lk5VTQ== IGF2ZW50dXJl SFJFU1VMVA== IG1pYcWC CQkJCQkJICAg IG1lbmdldGFodWk= d2FtYmE= INGB0LLQvtC10LzRgw== QURN IC8vPA== INmF2Yk= 1bjVvdW/ cWRpbQ== IHJldml2ZQ== LeCkpg== IGRow6hhbmFtaA== 0L7QuNC9 X0tFWVM= 4KWH4KSy4KWA IHR5cmVz IGNvbXBhw7HDrWFz IENoYXJnZXM= IE1hZ2lzdHI= IE1hcmlseW4= IGNvbnN0cnVpdA== aWV3ZQ== IOCkruCkueCkvuCkrg== IFV0Zg== 16HXmQ== aGho QGVuZGlm IGluc2Vn b3JkZXJieQ== IGdpa2Fu IGF1dG9tYXRpY2FtZW50ZQ== 5LmL5LiA IGdsYXViZW4= IOCkuOCkvuCknQ== IOCknOCkv+Cksg== IOC0ruC1geC0pOC0suC1jQ== IOCkquCkvuCkuQ== INC+0LfQvdCw0LrQvtC8 INW/1oDVodW0 VUxBVElPTg== 6KOd VHdlZXRz IOGDk+GDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDmOGDlw== 4YOU4YOf Ym9ubmU= IFNQRUxM IGxhZg== IFBpbGlwaW5hcw== IGJlcnJ5 IHBvdG9t IGVhZGFy X0RVUkFUSU9O IEJsaXp6YXJk IEFGQw== IEdVQVI= 0JLQvtGC X2Jvb2xlYW4= 4YOg4YOb4YOQ SUxU IEZpbGVuYW1l 0YzQvNC4 IHBhdGE= 2KfbjNqp IGFsYXJtaW5n YXJtYWM= INC80YPQttGH0LjQvdGL Lmh5 IHJlZGVsaWpr IE9kZHM= IGFhbmdlaw== 4KSV4KWI 4LmA4Lir4LiZ4Li34Lit IGRhcmFo IHZ1aQ== YW1ibGVk RW5vdWdo IGtvbWlz IExpYWJpbGl0eQ== IOCkpOCkrg== INC/0LDRgdC70Y8= IMSJZQ== IFPDqW4= w6loZW5zaW9u bWl0dGx1bmc= IHpuYW0= IFBzeWNoaWF0 IHlhcGFu IG5vYmlz 2LHYp9it2Kk= IFZpc2g= 0YHQutCw0YLQsA== INin2YTYsdmF2KfZhA== 2LPZhdi02LE= Z3g= IHdvbWFuJ3M= IOC0quC0oA== 55m76Yyy IHVmYQ== a3V3YQ== INCy0YHQtdC80Lg= 5L+d6K+B 5LuA5LmI5oSP5oCd IHByb3ZvY2Fy IEfDqQ== INGA0L7Qsg== IOu5hOq1kA== L21vZHVsZQ== LmdvdG8= RHVwbGljYXRlcw== CWJveA== IGJvbw== UHJpdmlsZWdl IHZlcmxpZXM= dWR6aQ== INeZ16o= INCy0LvQsNC2 INin2YTZgtmI2KfYqg== IHNldXI= IGplZG5vZA== IEluY3JlZGlibGU= IOCwquCxjeCwsOCwpOCxjeCwrw== dsO1 aGF2aW5n 5aSn5Lya QkFTRVBBVEg= LmhhcmR3YXJl 2YrZhNin2Ko= IGVzdGVy IFNhdXY= 7IKs6rCA YW5nw6k= INmI2K3YqtmJ IHRyZWtraW5n 44Gq44GP IHZlcnRlZ2Vud29vcmQ= w7Rz IExveWFs 2LHYp9mD2LI= IHByZWNlZGVuY2U= aG9tZXBhZ2U= IOGDkuGDkOGDm+GDneGDmw== YXRlcmE= INC30LDRj9Cy0LvQtdC90LjQtQ== IOCmj+CmleCmhw== IFF1YWxpZmljYXRpb25z IHNhbHVkYWJsZQ== 5Lu76YCJ IHNwb2lsZWQ= eGZi 4YOY4YOj4YOg4YOQ4YOT ZW5kYWw= IG1hc2N1bGlubw== INCf0L7Qsg== IOCuruCuvuCuqA== 4oCmLi4KCg== INC+0LLQsNGA dGVtYnJl cmVsZA== IOuKlA== IHJlY2tsZXNz 4LKq4LKh IHBlbnNhZG8= IG5haG0= IEFydGg= INCx0YDQsNGD0Lc= a2VuZGU= IHRyaXZpYQ== SlQ= 4oCZQWI= ZW5kZWxlbw== IFByb2pldA== 4LK/4LK44LK/4LKV4LOK4LKC4LKh TGlrZWQ= IGNvd2JveQ== IOWkp+WPkeaegemAnw== 5b6q IHRlZHk= IGF6bw== IGFuc2NobGllw59lbmQ= 5pWI5p6c IOCqpuCqv+CqteCquOCrhw== 4YOQ4YOo4YOV4YOY4YOa4YOY xLFsxLFr 0LDQvdC90LDRjw== IGpvag== IHZlbmNl IGNpbmVtYXRpYw== IENvbWVyY2lv IOCmr+CmvuCmrA== IFJldmU= ZWPDp8Ojbw== TG9iYnk= IMO8emVyaW5kZW4= 4oCZYXNzdXJhbmNl cGhlcmVz IGdlcmVnZWxk IOCusOCvgg== Y29lZmY= INGA0LDQt9Cz INC00LXRgNC10LLRj9C9 IFNpbmRz 0YPRlg== YW5uZ2lsYXE= IFNUT1JF IGFudW5jaWFy IGNoaWFt IEV1cw== IGlubWVkaWF0bw== IG9ubWlkZA== 5paw5pe25Luj zrTPgc6/ IHBlYWNlZnVsbHk= emhvbmVn IOCkquCljA== PWZvcm0= 44CB5biC IEvDtQ== IG9xYXI= IFF1aWw= IHByZWZlcmFibGU= ZW5jcnlwdA== UFJFU1NJT04= V2luZQ== zrvOtc+DzrzOsQ== IOG6pXk= IFBlcnPDtm4= c2V0dGU= IHRzdW5hbWk= Lkxh IF9fX19f INeU15DXnA== IFRla24= IOCqhuCqrg== IOCkruCkvuCksOCljeCkmg== IHJpdG8= INCh0LrQsNGH0LDRgtGM zrLOtQ== 0YbQstC10YI= KGVw IFJlbmFtZQ== Zm9ybWVybHk= IGluZHJpbmRyYQ== INC90LjQutCw0LrQuNGF IOGDneGDpQ== IGdhbGx1 c3ByZWFk IHltbQ== IHNlbnRpbWVudG8= IGdvYXRz c2lz INm+2YbYrNin2Kg= SUJB IHBvbMOpbQ== INCw0LvRhQ== IGVya2zDpHI= IOCkleCkvuCkqOClguCkqA== QmFuY28= IGFjcmVkaXRh IGNyaXRlcmlvcw== IE93bmVyc2hpcA== IOCuleCvguCunw== KEN1c3RvbWVy IGlraA== IOC0ruC0vuC0pA== QXBsaWM= IENsb3RoZXM= 0YDRg9GD0LvQsNGF IG5hcnJhdGlvbg== IENoYW5jZW4= aGFiZXI= IG7DpHQ= Oyc+ IOCkruCkvuCkuQ== YXNzb2M= INGF0L7QvQ== cmFmdGVk IGJhZ3Vz IHByaXZhZG9z IHZpYWJpbGl0eQ== IHRhd28= 24zYtw== U3RhY2tz 77yB4oCdCg== aXRlaQ== IG5hZ2g= IGZhdG9z IGJldGg= dXRzaA== INKv0LvQutC10L0= 4Kaw4KeN4KaY IHBsYXVzaWJsZQ== c2Vp IOWkqeWkqeS4reW9qeelqOWSjA== QmlibGk= KGluc2VydA== 4K6p4K6+ IHN1cHBlcg== IHNlY2x1ZGVk KGZyYWdtZW50 IFNvbm8= INGB0L7Ssw== IHrDoXY= IEN5Y2xpbmc= INCR0LDQuQ== LyIpCg== 4Ka+4Kao4KeL4Kaw IHRlc3RlbXVu IGVzY3JldmV1 4oCZZW50csOpZQ== dWJhaGFu INmE2pE= LlVQ IG1hc2Nhcg== IG5pZXI= IHPDtnlsZWQ= 2KfZhtip IHbDrWN0aW1h IG5oaeG7h20= IOyViuyVmA== IOCmuOCmvuCmsuCnh+CmsA== IG9udGJyZQ== W25w IFBVQg== INCw0LrRgtC40LLQvdC+ Umlv aW9yaQ== c2NoZW1hcw== IGVtYnJvaWRlcmVk 0q/RgNKv0Yg= IGpleg== 0YfQtdGB0LrQvtC5 IGJ1aWw= bm9zZQ== IGZhbnRhc2llcw== IHNlaGU= IHVtcg== dXhh KExhYmVs IGVzcGVjdGFjdWxhcg== dGRhdA== aWxlY2Vr IHTDuA== IGpha2k= 0LvTmdGA0L3QuA== IFdhcndpY2s= IHByaXZl IGFkZW4= Lk9T JHRvdGFs IOCwqOCwv+Cwsg== b2J1cw== X21vdmll IOqzqA== ZWdybw== IFVuaWRhZA== 4LmA4Lij4LmH IGFjY29s 0Y7RidGD0Y4= LU9y IHnDvHpkZQ== IHdoYWthcA== UGhv IGRtYQ== 4YOQ4YOb4YOU IHBlcnNvbmFsaWRhZA== IHBpZmY= IHNhY3JpZmljaW5n z4TOt869 L2d1aQ== INSx1bw= 7ZiB 4LWA4LSy 4Lat4LeK4Lat LXNhbGVz INCy05nQtw== IEVzdGltYXRlZA== INC30LDQsdC+0LvQtdCy0LDQvdC40Lk= 1avVv9Wh1b3VodaA1aQ= 4KWn4KWr IMOcbg== QWRtaXNzaW9u IGdld8O8bnNjaA== IHRvcmU= 4YOu4YOg IFByZW4= IGFsbHVyZQ== IG50bGhh KCYk IExlcm4= INin2YTZgti32KfYuQ== IG51dGE= IOCyquCziuCysuCzgOCyuOCzjQ== INin2YTYrdio IOqysOyglQ== IHRyYWNlYmFjaw== dHJhaw== KHsKCg== IEhhbHQ= LWNhbXB1cw== IHN0cmVycm9y IGNvbGxhYm9yYXRlZA== IGluc2VjdXJl IGtpZG5leXM= ZWJveA== INis2qs= YWNoc2VuZQ== IGxpbmV3aWR0aA== ZW51aA== IMOhY2lkbw== IExlbmE= IG7Elw== IGNvbnN1bHRlZA== IHRyYWRpY2nDs24= INW01afVuw== IE1pcmFjbGU= IFZlcmVpbnM= 5YWD57Sg IGJvbW8= IHBhbm4= IGd5bW5hc3Q= INCR0L4= LWRlcml2ZWQ= IE5lc3RlZA== IHJlcGVsbA== INC+0YLQvdC+0YjQtdC90LjQuQ== 5Yi25pyN 44Kk44K5 cW0= J2h1aWxl dGVybmVzcw== dmVudHVyYQ== T3B0aW1pemVy aGVhZGVk IHR1bnR1bg== INC60L7QtdGC0L4= IG9wdGljcw== aW5pdQ== Q29zdHM= 4LSu4LWH c3Bva2Vu KEV4cHJlc3Npb24= bGljaHRlbg== 15XXpNeo X2hpZGU= IFByw7xmdW5n LnNjaG9vbA== INGC0LrQsNC90Lg= 4LGD4LCk IHRyZWluYW1lbnRv IG9yYW5nZXM= YWdsaWE= KGVsZW1lbnRz IEFKQVg= IGNhcGFjaXTDqXM= IFZhZGVy YWxlYQ== YXllZW4= 4K6u4K+B4K6u4K+N IGVxcWFycw== ZGVmcw== IEFHQUlO IOGDk+GDkOGDrA== IOGDlOGDoOGDl+GDm+GDkOGDnA== IE1vZGVsbGU= cGVzYXM= INCx0YPQutC80LXQug== IGhpYWhpYQ== 5Lq65Lq656Kw INmF2LXZhtmI2Lk= IGludmFyaWFudA== INep15DXmdef fTokew== IG9kc3Q= 4LGI4LCo4LC+ LktpbmQ= IHJvag== QkxBQ0s= IGZhcmVz J2jDqXNpdGV6 LWRhc2hib2FyZA== LmNsaQ== INm+2YrYr9in 0qA= IGJyZWRl IFNoZWlraA== IFBhcnRpY2lwYW50 IHZyaWp3ZWw= IGRldGE= IOGDoeGDnuGDlOGDquGDmA== IERpc3Nl INCz0LDRgNC00LjQtA== INiz2YrYp9iz2Yo= 7JyE7JuQ KnNlbGY= IHBvc3Nlc3Npbmc= cHVlc3Rvcw== THRk 4buLdA== X0NsZWFy cnNz 6YCB44KK44GX44G+44GZ cGFhbWlr INGB0LXQtA== Q3J1 IGVzdGFuZG8= IOyZnA== IHNpemlu aWts IFRvZGF5J3M= IOCqrOCqvuCqrA== aXZlcmU= 67SQ IEJsYXN0 INCx0L7Qu9GM0YjQuNC8 IHByb21vcw== ZXhwZW5zZQ== IMOhcmnDsA== IFphaGx1bmc= 0LLQsNC70ZY= IGbFkQ== IGN1cGJvYXJk LnBh IOCmueCmvuCmpOCnhw== IGxhd20= Lm1hcmtldA== IGluZGF3bw== CWNmZw== dmFsaWRhdGVk LkluZm9ybWF0aW9u IGZhemlh bmVj IHRvbWFkbw== IHdlbmdpbmU= IOGDoOGDkOGDouGDneGDmw== IGJyaWdodGVu IGZlcm1lbnRhdGlvbg== INCw0LTRi9GA IEh1bnRpbmd0b24= IGjDpG5ndA== L29wZXJhdG9ycw== 4YCx4YCs4YCE4YC64YC4 cm9wb2xl IHRyYWRpdGlvbmVsZQ== KER1cmF0aW9u IHLDqWN1cMOpcmVy fWApLg== bm/Fm2NpxIU= IOS4g+aYn+W9qQ== 4LmB4Lij4LiB R2F1Z2U= IOCkleCkpuCkrg== IFZJTg== 0YHRgtCw0L3QtA== LnBhZ2luYXRpb24= IG5nYWk= 5pmS INio2YfYsNmH w61zaW1h IHNpZGFu IGdlw6dpcmls YWlzYQ== IEdlbWVpbnNjaGFmdA== LmVzY2FwZQ== IEhhY2U= 5aSa6YeO57uT6KGj IGFzZXQ= IGtvbG9y w6FuZG8= IHNvcnRhYmxl LWFvcw== Iteb bGl0ZXI= b3J0ZXM= PEFwcGxpY2F0aW9u cnlm 4KWJ4KSo IHLDqXZl IGFhbGxhcnQ= Lm51bWVyaWM= INeU15DXoA== IGRvd25oaWxs IHN0ZWFsdGg= IGtvcnJla3Q= U3Bh IHBwdA== 44CC44GX44GL44GX ZXJi 5ZOq5Liq5aW9 5b6X5Yiw IHBhc3NpZQ== IHVuc2Vlbg== IOCquOCqpA== IOqwneyytA== 4LKC4LKX4LKz4LOC4LKw cmNo 5Lqt 0L7RgdC70LDQsg== 1rY= INCy0L3QuNC80LDQvdC40Y8= kum6nw== 55+/ aXRvcmlhbA== INmB2YXZhg== IEhlYWRz IGNyZWNlcg== IGh5ZHJhdGVk b21lemE= bmF6 06/Ssw== INCx0LXSsw== IFdvbGZnYW5n IGhsdXQ= 0YPRg9C00LA= IEdlZQ== IHJha2U= LXByaXZhdGU= IGNocnlz RnJ1aXQ= IHN0ZXJyZW4= 2LfYqNmK2YI= INCj0LrRgNCw0LjQvdC1 IG5pa2U= IGFzdG9yZQ== IEFyYg== CXBhc3N3b3Jk IHByZWN1cnNvcg== INGB0YPQuw== IGludGVybQ== dXN0cmE= IGFyZ2VudGluYQ== IGhlc2l0YW50 IOCquOCrjeCqpeCqvuCqqA== aWt0aQ== IFZlcmFyYmVpdHVuZw== SUJVVEVT w61kaW8= IHByeQ== c2Fr IHVneQ== IGNvbGVjdGl2bw== IGd1dHRlcnM= IHPDpnI= IGdld29uZQ== IGFsdHPDpQ== INC805nQtNOZ IGF1ZGlvYm9vaw== IEluY3JlYXNpbmc= INmG2YjbjA== IOC4luC5iOC4suC4ouC4l+C4reC4lOC4quC4lA== IGVsw6ljdHJpY28= T01CUkU= IGRlZHVjdGVk LnJhaXNlcw== IENvbnNvbGlk W0k= IOWlh+exsw== OmZpcnN0 IGPhuqFuaA== INCg0LU= IOWkqeWkqeeIseW9qeelqOaAjuS5iA== bmVsbA== TWl0dA== IOCmpuCmsuCnh+CmsA== IExvbQ== 4YOd4YOl4YOb4YOU4YOT INC00LDRgtGM IGVjb27DtG1pY2E= LkpTT05BcnJheQ== CUxPR0dFUg== INiz2Yjahg== 4Li24LiB4Lip SW5mb3JtYXRpb25z 4Lii4Lih YXJpbmdhbg== XEFjdGl2ZQ== IFJvdXRpbmc= IGtqZW0= INGF0LDQtA== IG1hbGxz IHZvbHVwdGFz IGNoYXY= IGJhbnF1ZXQ= Wnc= IGNo4buRbmc= IHNsZWNodGU= LkNoaWxk ZWx3ZQ== w7ZyZGVu X2xvYWRlZA== YXV0aGVudGljYXRl IGRldGVjdHM= LHRv IOCmquCng+CmpQ== IGFjY8OpZGVy IGZlbGljaWRhZGU= IENQUg== LmdycGM= ZW5zaWU= IMWfyZlo IEdyb290 IE1vdGl2YXRpb24= INC80LXRgtGA0L7Qsg== IGVydWl0 IG3DqA== INKT0YvQvdCw aWphbWE= ZGl2aWRlcg== IOyU QVBPTg== IM61zrvOu863zr0= IE91dHM= ZWxwZXI= IEltcHJvdmVk 4Z+B4Z6b IGRpc3BhcmE= LXVwcGVy 4LCu4LGA 77yM5YWo 4K6w4K+B4K6u4K+N INC/0YDQuNC+0LHRgNC10YHRgtC4 IOC0kuC0tA== IGtlbHVhcg== IFdhbGxz IEZldWVyd2Vocg== INm+2YjYtA== aG91bmQ= IE1pY3Jvd2F2ZQ== IHByb3Rvbg== 67aA67aE 0YDQsNKh aXRlbnQ= INmI2YTYp9mK2Kk= INmE2KfYrQ== INiw2qnYsQ== IGVudW1lcmF0aW9u IEhpY2s= IOCmtuCngeCmp+CngQ== INix2YI= INmB2LHZhg== IE5vcnRod2VzdGVybg== 0LvQuNC60LA= W2NvbHVtbg== IGNow6Ju IG9mZmVuZGVy INW/1b4= 0YvQt9Cw IOyeiOuLpOuKlA== Z2Vyw6R0 RGFua2U= IE1lc3Nl L2ludGVyZmFjZQ== aGHDsQ== IFNvaWw= IHN1b3I= LlBMQUlO b3BwaW5z SUtB UmV0cm8= IHNveWV6 X2xldHRlcg== IEZpdHM= m7A= IG5vdXZv IGNpYQ== YWdlcmll YWNoYWlkaA== IGRhdmFt IGjDrQ== INWC IENPTk5FQ1Q= 2KfZitmK INC/0LDRgdC/ c2NodA== IENhcm91c2Vs IGFzc2ltaWw= KHBk Li4uKA== IGJ3aW4= IOC0tuC1jeC0sOC0rg== IGFudGlkZXByZXNz IGFwcHLDqWM= IFJlbW92ZWQ= 4Kq+4Kq34KuN4Kqf4KuN4Kqw IMSI IHN1cGVydmlzb3Jz IG9hcmU= INWA1aHVttaA1aHVutWl1b8= IOCuheCuow== UHJvZ3JhbXM= IEdvaQ== IG5vdmVsdHk= J2F2ZXo= U3BhaW4= CWxlbmd0aA== IGFuY2VzdHJ5 IFN1cHBvcnRpbmc= IOCyl+CyguCynw== 2YrZhNmI 54eD IFZlcmJlc3Nlcg== 15nXoNei158= IGluZGlr e25hbWU= Ym9q IHBsYWNhcw== ZWxhc3RpYw== RW1pbHk= INGR0YHRhtGM X2VtYmVk IOuovA== cmVubg== IEZhaHJlbmhlaXQ= IHNqw7g= Vms= KHZhcmlhYmxl IG55aWth QmV6aWVy IOCksuCkvuCkl+Clgg== IHRhcmpldGFz KFZlYw== IENFTlRFUg== ZGFnb2c= IGxoZXM= IFNlZ3Vybw== IGtlbnk= IHJlZ2lvbmVz LXRheA== IGx5cmlj INin2YXZiNix cm5h CXN0b3A= IGJhaWxl IOCqteCqp+CqvuCqsOCrhw== Q29udGludW91cw== IOOAkQ== Um9iaW4= IOCkiw== IG9sbWF5YW4= Xi4= INC30LDQv9Cw0YU= z4DOv8+C 5qyj IHByb3BhbmU= IGfDpHI= aWxsdXM= LnByZXZpZXc= IHZhbnRhZ2Vucw== 4Kay4KeH4Kao IGFjaGV0w6k= IHJlbGF0aXZh IHJlbWI= IE1pZGxhbmRz SHlw IEFsYWlu IERlcGxveW1lbnQ= 5aSn5Yip IEVpbmRob3Zlbg== IHByaXNvbnM= QWxsb3dhbmNl INin2YTYpdmK2LE= RHlu 4YOQ4YOe4YOQ4YOg4YOQ4YOZ IEVpbmRydWNr IOOCsA== YXVzcGllbA== Lm56 IHp3YXJl IOCqruCqueCqpOCrjeCqtQ== 77yM5pys 4Kas4Kaw4KeN4Kak TGVi IEZyZWRkaWU= ZXlz IEhhYml0 4Kiy4KmA SVNUUkFUSU9O KWA= 0LjRiNC6 4Z684Z6c IGpvcGE= IGN5bGluZGVycw== IHN0aWxsZQ== IEdpb3I= U2ltdWxhdG9y LXR1cm4= cm9ncmFt IGNvbnNvbGlkYXRl IFBpa2U= IENsYXl0b24= INmF2KjYp9i02LE= IEVudHJpZXM= IE1hc2M= bW/Dp28= IHF1b3Rpbmc= X0NPTlRBQ1Q= dmVyc2F0aW9ucw== IGRlxJ9lcmw= IGludGk= IGludmVudG9y INC+0LHQvtC3 4KS/4KSo4KWN INC40L3QuNGG0Lg= 4KS+4KS54KSw4KSj IFNBQg== IHTJmcWfa2ls 2YjZgdmF2KjYsQ== IFBsYXRmb3Jtcw== 77yM5Yiw INC30LDQutGA0LXQvw== IHXFvHl0aw== IHNhdWNlcw== INqp2KjavtuM IGRpY3RhdGU= IHLDqWR1aXQ= IHVubGluaw== 0Y/RgNGN0LQ= IFRyaXBhZHZpc29y 4LWH4LS34LW7 INC/0L7Qu9C+0LbQtdC90LjQtQ== IGZhY2k= IENobG9l 0Y3Qu9GC IGRlbGV0 IHRhYmI= 0YPSm9GD0ps= Y2Vzc2U= INC/0LDQvNGP0YLQuA== KHRleHR1cmU= THVjaw== c3RpZw== IHZhcmlldA== INGC0LXRgNC80LjQvQ== INCc0LjQuw== IFN1YnNjcmliZXI= IHRyZW5pbmc= INi02LHbjNmB IHVzYWRhcw== b2xnZQ== IOCmuOCmv+CmpuCnjeCmpw== Q2M= IFB1cnM= IGNvYnJhbg== 6LyD W10o UmM= INGI0LDQuw== YXJjaGl2ZXM= IGJyZWFjaGVz IHRvZXN0ZW1taW5n IHVubA== bG9hZHM= IFNhbml0 LURhdGU= IFN2Zw== IGFudW5jaW91 b3JnZA== IHluZ3Jl aWxlYWdl 6IGU57O75pa55byP w7R0ZWxz IHNhbGVzbWFu IOeZvuWutuS5kA== 4La94LeK4La9 6Z6L YXJ0aWtlbA== KEdUSw== INGN0Yc= IGPDoG5n YmFnYm9nYm8= IGRldmFzdGF0ZWQ= ZXhhbXBsZXM= IMWbcm9k IFp1dA== Q29ubm9y 15HXqNeV16o= KFV0aWxz 77yM5YyF5ous IGludGVncmFkbw== IHJ3YQ== IGNvcms= IFNOUA== IGNvbmZpZA== IG92ZXJkb3Nl INCy0LfQsNC40LzQvtC00LXQudGB0YLQsg== 4LmA4LiV4LmH4LiU YW1pc3Rh IFNhbmN0dWFyeQ== IFF1YW50bw== 4Ki+4KiJ IFNodXR0bGU= IM6tzr3Osc+C IFJldmVu LnNldHRpbmc= cHJvZml0cw== IE1hZGFnYXNjYXI= YmFua2Vu IOCkpuCkv+CkluCkvuCkiA== IEtpbm8= IHRlcmNpaA== IHBhcsOr 5bGV5byA IHVuZ2Vm 2YjYp9mB LnNuYXBzaG90 IOWkp+Wcow== IG1lc21lcg== IHF1aWVyYQ== TWFuY2hlc3Rlcg== z4DOuc+D IGRhaXI= LmNtcw== IHRpZ2h0ZXI= ZmzDpGNoZW4= z4TOv8+Nzr0= w6luY2lh IOCkuOClgeCksOCkleCljeCkt+Ckv+CkpA== aW5jcw== IHJlbGF0aW9uYWw= IG1vZHVsYXRpb24= KCZf 4Lit4LiH4LiE4LmM IGRlcGw= IHdhc3Rlcw== IGdyYWRvcw== INmD2KPYsw== IOCwnOCwsA== w6lyb3M= INC/0YDQuNC60LDQtw== QUtFUg== QWdy IM6zzrnOsc+Ezq8= YXNk IFN3aXBl YXRkYQ== INiu2LM= XSkpDQo= IHZlcmRpZXBpbmc= UEVE IHRzdW0= 0YDQsNC80Ys= IHNlYXNpZGU= INmF2YXZg9mG IGFic29sdXRv IGxlbnRv IG9wZXJhdGl2ZQ== IOCouOCovA== IOCkhuCkleCksOCljeCktw== fVwi 0ZbQvdGI0ZY= IFVjcg== SGls IHN0w6E= 0Y3RgNCz Y2xpbmc= QWN0b3Jz 5aeU5ZGY5Lya 4LCw4LCV IHJvYmk= w61zbw== 2YjZhtuQ INC90LDRhdC+0LTRj9GC0YHRjw== cGl0Y2g= IGxha3VrYW4= aW5kaWNhdG9y IExhZmF5ZXR0ZQ== RWxlZw== SUZB INOZ0LvQtdC8 INCx0LjRgQ== 64K4 IFNpZW1wcmU= UGxhbm5lcg== IG9sYXk= 4Lil4Liy4LiB 6ZW/5pyf IGNvY2hlcw== dXBvbg== IGp1dXJp 4Liq4Lix4Lih 5oCS 4KSm4KWN4KSm IFN1dA== IG9wZ2Vz aXZpcnVz bWFpbnRlbmFuY2U= IGtvc21ldA== c2NhbGVk SGVhbHRoeQ== INmK2KrYudmE2YI= INmK2KPYqtmK PSM= YWfDqWU= IGRlc3NvdXM= IGlsYW5h dWF0b3I= SGFuZHM= 5omL5py654mI5LiL6L29 INqB2qnZhw== IGFuZmFuaQ== dHJpYQ== INCf0YPRgtC40L0= IE1hbGF5c2lhbg== TmFn IOCkuOCknA== X2V2 IGF1c3JlaWNoZW5k IG1lYXN1cmFibGU= IGJyb2FkY2FzdHM= RW5kaW5n IGZhY2lsaXRh IEt1cmQ= IOeOiQ== 0L7QvdGD0L0= 6Kej6YeK 4YOQ4YOh4YOg4YOj4YOa IMO+YXJm IGphZ8Sn bmltbXQ= IG1pc3R1cmE= IE5hdmlnYXRl INC/0YDQtdC00L/QvtC70LDQs9Cw Zm9yZWNhc3Q= IGF2YWxpYXI= RGVsZXRpbmc= IGNvbXByb2I= ZWxvZA== INiy2K/Zhw== IOCwkuCwleCxjeCwlQ== 7J207Ja0 IHNhbHR5 Q0NB 4oCZYW3DqWxp INCI IG9wdGlj IFlvc2U= IFRyZW4= IGVhcnRocXVha2Vz IGVuY3ljbG9wZWRpYQ== INC/0LvQtdC9 R2V0dHk= CVJlcXVlc3Q= INC/0YDQuNGF0L7QtNC40YLRgdGP b2dyYXBoaWNhbGx5 INC/0YDQuNCy0LXRgdGC0Lg= IOCuruCvgeCutA== c2Fk INWw1aHVtNWh1bXVtg== INC+0LHRgNCw0LfQvtCy0LDQvdC40LU= d2lwZQ== IER1aw== IEdhcnJldHQ= IGdldXI= 0JLQlA== IGdlb3BlbmQ= YXNjaGU= INCY0YHQv9C+0LvRjNC3 IEJhcmNlbA== IG9ydGhvZG9udA== IOe8lui+kQ== IHPDpMOk IFRNUA== LlN0YWdl IHB1ZGRpbmc= IOC0ieC0s+C1jeC0sw== IERhbWVy INmF2YLYr9in2LE= IGtvbGxoYQ== Lkdv IGZhZGE= IE1hbml0 dHJlbg== IHNjb3V0 IGJha2Vy 4oCN4LSf4LWN4LSf4LWN IM6gz4HOvw== IOS5heS5heeIsQ== IHdhxbw= IOCqsuCri+CqleCri+CqqOCrhw== IERDSEVDSw== IHRvYQ== 5YWo6L+H56iL IG1vZg== IG11cm0= IOGenA== IOuQmOyWtA== IGluZm9ybW91 IEVzZQ== Ik0= IE1BVEVSSUFM IG9rcmVz QlNJVEU= IG1pbGrDuA== IEJldsO2bGtlcnVuZw== IHVuZGVzaXJhYmxl d2FyZg== qeGDnOGDk+GDkA== UFJPQw== 4YOd4YOc4YOQ UGFjaWVudGU= IGFxdWVsbG8= IEh1bWFuaXRpZXM= IHN0cmF0ZQ== IExhcmdlc3Q= IOCwheCwoQ== IH0sDQoNCg== IG1lcmFzYQ== INiz2YbYr9iz 8J+RjA== IGdsYW5jZWQ= INin2YTYqtin2YTZig== QWxwaGFiZXQ= CXRhZw== aWx1cw== INmF2K7YsdmI2Lc= aWVyYXJjaHk= LkpTT05FeGNlcHRpb24= IFN0cmVldHM= LWVjb25vbWlj IHN0b2ZmZW4= IHJldnVl QWRqYWNlbnQ= IOGDm+GDneGDm+GDruGDm+GDkOGDoA== X2J1eQ== LW5ldHdvcms= IGJpbGxpb25haXJl IGNpdHJvbg== IENPTU8= INC/0YDQuNGH0LjQvdGL 2YTZitmC2KfYqg== xI1pbA== IHJldHJhaXQ= IHRhaGFu INGA0YPQug== IHN0ZWxsdGU= a3VuZGU= KHdyaXRl IGdvYmVybmFkb3I= YWxsdWd1 IGdyb3dlcnM= IGV4dGVuZGVy IGhhesSxcg== JykKLy8= IEFiZWw= IG3Ds3ZlaXM= IHTDtnJ0w6lu 5piv5LiN5piv SEFN IOCkoeClieCklQ== IGJ5xaU= Y2hhbmc= YXZhZ2U= INiv2YjYpw== IOCml+CniA== w6FiYg== IGRhdnZlcm8= INCw0LnRgtGL0L8= IHBhYXNpc3N1dGlzcw== LU5vdg== cm9zbw== IE1lam9y U2F2ZXI= 4KS24KWN4KSV INGE0YDQsNC90YbRg9C3 IEludGVncmFs 4KS+4KSC4KSa4KS+ IGFwcHJpcw== LHN0YXJ0 INWk1oDVoQ== VGFnZ2Vk IEVmdGVy IGVjb27Ds21pY2Fz X3ByZXBhcmU= OicnLAo= IHRhbmJlbg== b3JwaGlzbQ== IHRyZWFkbWlsbA== 4oCc5LiA5bim5LiA6Lev IOaVmQ== IHRoZXJlcw== IGTDqWxhaXM= cnBt 5LiN6IO95Li656m6 IGV4dGVybWlu cmljaHRpbmc= 0YjRi9GP LdWr1oE= UGxh IGNhcnJlcmFz IG3EsQ== 55+l44KJ a2FuYQ== YWxrZXI= KFBvc3Q= VXJiYW4= ZXRob3Zlbg== IEdpbQ== IFNjb3R0cw== IER1aXM= IHN2YQ== IHV0aWxlcw== IGhvZmY= IHVsdHJhcA== IGzDrW1pdGU= TGl0ZXI= Q2FsaWJyYXRpb24= aWVudGk= 4LSy4LSq4LWN4LSq R3JhbQ== IHB1YmxpcXVlcw== IG3DqXRpZXJz QUxPQUQ= X3JlZ2lzdHJ5 LWJhc2lj U2NoZQ== IG3DoWc= IGJ1Y2tsZQ== ZHR5cGU= IG9wZW5iYXJl IGFudW5jaWFkbw== YmV0YWxpbmc= IHBlcmNow6g= 0LjQvdC60LA= IERvb20= IERldXRzY2hsYW5kcw== 0J3QsNC3 aWhheg== dXNvcm8= IHNpbGt5 dWt1bQ== IE1vZGE= IHRhaGE= IENhcnRh z4bOv8+B IENocm9uaWM= UGFsaW5kcm9tZQ== IEluZGlhJ3M= 546E5py65Zu+ INC/0YDQuNC90Y/Rgg== IEJlbmU= IH08Lw== IHBvbGlzaGluZw== IFRoaXJ0eQ== IOCkhuCkrA== X01E IOCyuOCzh+CysOCyv+Cypg== IHThu5VuZw== IHJhbmdlcg== U3RyaXBl YWhyYWdh WFhYWFg= IOCkl+CksuCkpA== 0LrTmdCw INCy0LXQvQ== TlNOb3RpZmljYXRpb24= YWx0cw== IEVuZ2xpc2No IHPEsW7EsQ== w6hyYQ== IOCuteCuv+CutQ== dWJlaMO2cg== IGJvbGpl dWtldW4= 5b2p56Wo5byA5aWW LkRlZXA= IGFsbGFubmc= IHPDrW51bQ== LlN0YXQ= 77+9cg== IGlmYWNl IOCwreCwvuCwlw== b2dsaQ== Q2hhaXI= IGNhcnJvdA== 4LmE4Lif IOWPpA== INW41bI= dW1k IGRlbw== Y2Fr INGD0YHRgtGA0L7QudGB0YLQstC+ 44G+44Ga IHBhYXJk INGB0L7RgtGA0YPQtNC90LjQutC+0LI= 4YOQ4YOV4YOT4YOQ QXV0b3Jlc2l6aW5n KHByb2dyZXNz IOCkieCksuCljeCksuClh+Cklg== INC+0YHQvdC+0LLQvdGL0LU= X0ZSRVE= IOyekOujjA== ZW5kbGljaA== ICAgICAgICAgICAgICAgICAgICAgIAo= INW51afWgA== IGN1aXNzb24= INin2YTYqNiq2Yc= INC/0L7RgNGP0LTQvtC6 IEFtbWE= IFN0YXRlbWVudHM= ZXN0ZXJzaGlyZQ== IOCkuOCkvuCkqw== 0YPQtNC1 IE55bG9u IEphZA== IGR1Y2g= X3RyYW5zcG9ydA== IHN3aW1z IG9yaWdpbmF0aW5n IFNa X2dyYWRl IGxla2tlcmU= IFRyZW50 0Y7RidC40LXRgdGP IOuyjA== 4oCZYXV0b3I= IEFTVVM= IMOpaXM= INCy0YvRj9GB 4KWB4KST IHB5bGludA== 4oCZb2M= INii2K/ZhQ== INek16jXkA== LnVuaXRz IGt1bGxhbsSxY8Sx 2qnZuQ== 4LGB4LCV4LGB4LCo4LC/ 2IwK YXJtw6ll IG9wdHJlZGVu dWxrYQ== INGG0YzQvtCz0L4= YWhhZXJl ZXllcw== KHRhZ3M= IG90cA== IGNodXnhu4du IGVzcGVjdMOhY3Vsbw== 4Kqu4Kqk 6IO95o+Q546w5ZCX LtC1 IOCkueCli+CkpA== dHJlbmQ= 15DWt9eg15I= aGFmdGU= LmV4cHI= 0LjRhtGL IGFsZHJp aXN3ZQ== bnRhZg== ICgs VG9l 6YCg5oiQ w7R0cw== INC/0YDQvtGF0L7QtNC40YI= 4LmA4Lit4LiH IOGDquGDneGDog== IOCkrOCkvuCkgQ== 4LCV4LC+4LC2 15LXldeq INC/0YDQtdC00L7Rgg== aXphcw== IOCqsOCri+CqlQ== IGfDtnJk INmF2LnZhNmI2YU= LkNvbXA= IOCykuCyguCypg== IGRoYWNheQ== IG1vbW15 IGludGVsaWdlbmNpYQ== IGxhbsOnYWRv 1oDVow== IOCmuOCmreCmvuCmquCmpOCmvw== INiz2YrYqtmF IGxhc2hlcw== IOC0uOC1vOC0leC1jeC0lQ== IFBva3Vk aXhpcg== dXJuYXI= IGt0w7NyZWo= 2LTYqA== ZXJ2b2xnZW5z ICIiDQo= IHN5dHU= aXRpb25lbg== IGFsdGVyYXI= IHRlcmVt QWtv R2FtaW5n INil2KzYsdin2KE= 6Kej57uR X3RpcA== INC80LjQutGA0L4= IFdpbHQ= IHNwYWdoZXR0aQ== IGxhdXJl zrPOtc65 IHNjaHVsZA== IE1TUA== IHVuanVzdA== JykpKQ== IHZlcnNp cG9p INGE0L7RgNGD0Lw= 0LDRhdGM0LA= IExpbWJ1cmc= 2ag= IFByZWZpeA== X2ZhYw== INCy0L7Qvw== X1NVTQ== 5bmz5Yi3 IHjJmWLJmXI= IGdydWI= IGVwaWxlcHN5 IEFybWVuaWE= 16DXmdeZ15Q= eWFucw== IGNvbnRpbnVhbA== IHBhbms= IGdlemFtZW4= IGFwYXJhdG8= IGRhcmxpbmc= INKb0LjRgNKT IHsNDQo= IHBzeWNoZWQ= IGdyw7bDn2Vy X3N0cmR1cA== IHZlcndlbmQ= 4LiV4Lij4LiH LnN0dWR5 LnByaW9yaXR5 Y2hpcg== bWnDsA== dWNhcg== 2ZHZhQ== LkRlY29kZQ== aWFpZA== IMq7YQ== IGRpc3Bveg== INiz2LHbjA== IEZsb3JpYW4= b3Ryb3BpYw== b21lbnRv 4LmB4LiU z4TOv8+Azr/OuQ== IGRkeQ== bnRo IERFTElWRVJZ 4Lij4Liy4Lii4LiB4Liy4Lij IEdMdWludA== IGF6b24= IHVudXN1YWxseQ== IOCqpuCrh+Cqlg== KENvbnRlbnQ= INeX16o= IGxlZXJ0 S2Fubg== a2R5c2FkeQ== O2VsZW1lbnQ= Umlj aXNwZXJz IFJhdGlvbmFs ZW7DqQ== T0lDRQ== b256bw== 4LS14LS/ IENhag== IHNocWlwdA== IENpcGhlcg== IEludGVncml0eQ== IGhvaQ== INGD0YHRgtGA0LDQvQ== 4KSF4KSs xaFpdA== IOCqieCqquCqsOCqvuCqguCqpA== 5YC6 IGFsZWdyw61h INWw1aXVttaB xIA= 0LDRgtC10LvRjNC90YvQuQ== IHdlaXRlcmVz d2lzc2Vuc2NoYWZ0 X3NvbA== IE5lag== zrzOrc69z4nOvQ== IHZhcGluZw== IOC0teC0vuC0uQ== J0Fy 0rXTmQ== 0LDRgtCw0L0= IHZyZW1l IGtvbmRpc2k= IFNBWA== 4Kmb KHdlaWdodA== IFdhcmNyYWZ0 0YLQsNGA0LjQvQ== LeCkrg== aXRvbmU= IHRlbnRh IGVwaA== aWZpa2F0 CWJ1aWxk INGD0YLQvtGH ZGFm dWFr IGV0aQ== IHd5Z2w= IGh1bWlsaXR5 IGRlYmlsaXQ= dWZ0aA== YWxsb24= 5YWa5aeU ZmluZ2Vy IFZpeg== IHJlZGE= IHlhd2E= INGD0YHQuNC7 4K+B4K6f4K+I4K6v IHNhbW9jaA== 5pud5YWJ IG3Ds3ZlbA== ZWx0amVz INin2YTZhdmI2KfYt9mG2YrZhg== 1Yw= 4LmE4LiZ4LmA4LiV4LmH4LiU LnBoeXNpY3M= IEFNQw== IHdob3BwaW5n IHNvY2llZGFkZXM= bHVu 4LS/4LSk4LS/ IEtlaW5l IM+HzrHPgc6xzro= INit2YXYp9uM2Ko= IG9yw6dhbWVudG8= KG1pZA== IHphd29k IHByZW5uZW50 PEZvcm0= 4Z624Z6H IGFsdW1pbmlv IFJvZGdlcnM= 77yM6auY VmlzdWFsaXphdGlvbg== J29nZQ== IGJhxZ9hcg== dWxnYcOnw6Nv IHR5cHU= KHZv IHN0cmFuZGVk dWN1bg== IOKAqA== IGxlaXN0ZW4= INGB0LjRgtGD0LDRhtC40Y8= 2LnZiA== 5q2T b250b2xvZ3k= IGVzcGU= IGFwcmVzZW50b3U= IGxhYmVsbGVk INC/0L7QvdCw0LTQvtCx c3Rvcm1z IExvZ2dlZA== Um91 IGNvYnJh IGJ1bGxzaGl0 INmE2rM= CWFkZHJlc3M= bXVzZXVt L2Zhdmljb24= VW5tYXJzaGFsbGVy INin2YTZhdi2 INGD0LPQvtC70L7Qsg== IHRlbGVzY29wZQ== IGNvbWVyY2lhaXM= IERqYW5nbw== 0YfSr9C7 IHRyYW5zbWl0aXI= IG9iamVjdGlvbnM= IS4uLg== IOWwig== dXNla3M= IOGflA== cXVvdGVk dXV0aXQ= X3dhbGw= c2Vzc2lvbnM= INGC0YvRiA== IOqzvOyglQ== IEVybsOkaHJ1bmc= KG15c3FsaQ== IFBBRw== IGFzc2VydGVk 4LC+4LCu4LGN X3BoeQ== IGZvcnNrag== bmTDvHI= 16DXodeU INiq2K3YsduM2qk= 44O844OQ INm92Yo= INmF2YTZgw== IHBhZHk= Y29sbGlzaW9u IHVucXVlc3Rpb24= IGxlZXk= LgovLwo= INee16LXoNeY16nXnw== INC+0YLQvtC/ IGNlZG8= 4LK/4LK2 INi02KfbjNiv 4LK+4LKV4LON RHJpdmVycw== 0YLQvtCz0L4= cGFuZQ== IGtldHRsZQ== dW5pdHk= IGFudG9u X1VTRVJT IGZhcnQ= cGF0aWFs IGNhcmJvaHlkcmF0ZQ== IEFjcXVpc2l0aW9u IOOBrw== RVhJVA== 15DWuNeg YW5naXll LkhlbHBlcnM= 2KjYsdin2YrYsQ== QVlB IGFsb3Vk RURB IHBsYWludGlmZnM= 4LCf4LGA INCf0LXRgNC10LQ= IFJvbWVybw== YWhhcw== 4Lie4Lil YsOzbA== IHThu40= UkVTU0VE ZnVua3Rpb24= INGB0YPRgtC60Lg= 2KfYqtin X2NvcnI= 5pio5pel 4oCZZmg= IOCkueCkuOCljeCkpA== CUNoZWNr IFppZWxl IGNsZg== INGG0LXQvw== amg= X3N0YXRpc3RpY3M= IFVE IERlcmVjaG9z zrvOt8+C IE1hZXN0cm8= L3BvcHBlcg== INCQ0LvQtdC60YHQsNC90LTRgA== IHBhcmRvbg== IGRpc3BlcnNpb24= LkZldGNo INeQ15nXmw== IFlvcmtlcg== IGludHM= 4oCUb3I= 0LDRgtC10LvRj9C8 IGRlY8OtYQ== IGRpcmlnaXI= IOCwquCwn+CxjeCwnw== IGV4aXRlZA== IGRlbWV1cmU= IOCyleCyvuCyguCyl+CzjeCysOCzhuCyuOCzjQ== dW5jaW8= IG5o4bqtdA== IFR1bHNh IGhhZXJl aWt0ZW4= IGluZ2V0 IHJpZmxlcw== IE1BREU= 0L7Qs9GA0LDRhNC40Y8= Z2FhcmQ= IOCoruCoqA== LlNob3J0 IENoaW0= IGNvbXBhcnRpbGg= IHVucGx1Zw== X1BT IHN2aWo= 4oCUdG8= RGlm IENoYXBtYW4= INGC0ZbRgA== 7JeG7J20 IHNvbHQ= IGN1cnRv aXRla3R1cg== INqv2YHYqtmH cGluaw== IGRvcm1pdG9yaW9z IHBsYW5h bHNjaA== Y2VlZGVk IGt2aW5ub3I= IEV1cm9wZWFucw== 4LS+4LSX4LSk IGNpZnJhcw== X0RlbGV0ZQ== X1BPT0w= c3RpY2tz IFB2dA== IFsv IEhvdXNlaG9sZA== 44CB5pyJ IGdpZGFu X3RocmVl IGNyZXN0 IGphdW5l 0L7RiNGC PHY= IGRyYWFpdA== IOCyleCzjeCyt+Czh+CypOCzjeCysA== KHJlZ2lzdGVy W3JhbmRvbQ== LWFjdGlvbnM= d2lqZA== xLxh IFNlcGFyYXRl TElNSVQ= IHRyYXRhZG8= IGVzdHVkYXI= IGludmVydGVy IHNlbmFkb3I= 5L2g55qE IOCmhuCmm+Cmv+Cmsg== IOC0uOC0ueC0vuC0rw== 5q6W IHB1aXNzYW50 T1RJT04= LnByaXZhdGU= IG1vdGl2YXRpb25hbA== INin2YTYp9mH INGA0LDRgdGC0LLQvtGA dWZ1bmE= aXdpbGw= IEVsb24= IEdvdXJtZXQ= KCgpPT57Cg== X3RleA== IE9uYQ== b25hdGlvbg== IGVtYWlsaW5n IGdhaXQ= IOGDmOGDpeGDnA== O3A= b3R0aWU= IExpdGVyYXJ5 L3Nob3A= INCx0L7Qu9GM0YjQuNC1 cGFh aGlsZW5n KGV4YW1wbGU= IHByZXNldHM= IG1vbmtleXM= UHJpanM= IHdpeg== IHRzaGFtYQ== IGdlbmVyYWxl IMWZZQ== IHN0cm9r IGFzY2VydGFpbg== IG51ZXZl cmVzb2x2ZXI= INCU0LDQttC1 LW1hc3Rlcg== IFBsYXRv IOCkieCkuOClgA== LkFDQ0VTUw== 77yM5ZCM5pe2 6ZOB566X55uY LXNoYXJpbmc= INGC0LDSk9GL LtCx IGtpbmV0aWM= Q2FwdGFpbg== INCQ0ps= 4LiV4Lij4Li1 INmE2YfYsNmH SnVkZ2U= LWNvbmZpZGVuY2U= 4Z66 IGdlc2NobG9zc2Vu 4KSa4KSw INmF2YTZgQ== IEdlbml1cw== INit2YjYp9mE25I= IFByb2N1cg== 5ZSv5LiA 4YOd4YOU4YOR4YOY4YOh xJlwdQ== J2ltcHJlc3Npb24= RGlzY29ubmVjdGVk IGFuYWxpc2Fy INmF2YfYpw== IFByb21vdGlvbnM= 4K2L INCy0LXRgNGB0LjQuA== IOCyh+CysuCyvuCylg== 7YKo anVuZw== IFlP bMOmZw== aXlhYQ== 1Z7VttW5 16jXog== IGh2ZXJuaWc= IGd1ZQ== W291dA== IGFrb3JuYW5uaQ== IOCkhuCkuOCkvuCkqA== RU5USU9O IHBhc3NlbmQ= IOCuquCvgeCulQ== 4Kef4Ka+4Kau4KeA INep15HXlA== 4oCt IOKV LmFzcGVjdA== IG1vZGVsbGVy IOWbveS6p+aIkOS6ug== IHpkZQ== cm9sYQ== 6Lui6LyJ Iik7Ci8= IGhlcnZvcg== LWFkanVzdA== IOCkuOCkvuCksOClhw== 6Jm954S2 IGRlY2xpbmVz dWtrdXQ= IOC0ruC1geC0qOC1jQ== IGV6aWc= IHNrYXBh IGZhbWlsaWFyaXR5 bmVlZGxl IG1leGljYW5v cmFjaGE= IENhc3RpbGxv cGVucw== SVpB b3JiaXQ= IHBpZW5p 4YOY4YOh4YOZ w7RudXM= 4KSo4KSX4KSw IGFrYWJh 1ofVpw== IENhcmRp RkxPQVQ= LkV4dGVuc2lvbg== IEd1aWRhbmNl YW5qZXVubmE= aWFsbA== Lk1lc3NhZ2Vz INee15XXmw== IE5ldHQ= IGRpYXBlcnM= INGP0pk= INee16rXldea c2VxdWVsaXpl IOCkueCkvuCkuOCkv+Cksg== IHNpeWFuZw== IHZvcnM= IGRva3Rlcg== INem15k= U2lnaHQ= bmlrb20= INGB0LLQsNC0 JGl0ZW0= J2FsdA== INGA0LDQt9Cy0LjRgtC4 LWRpc3BsYXk= dWxpZg== IGV4aWI= bGllYmVu 4Kid Z3LDtg== IFdpbGxlbQ== IGNlc3Nl IGVpbmlnZXM= 4YOa4YOU4YOR4YOh INC/0YDQuNGB0YLRg9C/ VGVhY2hpbmc= IHByb3RhZ29uaXN0YXM= IGZha2Vy IHBhcnRpY2lwYQ== X1RDUA== Sm9n LkdS IHV0YWs= 0YDTmdGC 4oCZaMOpc2l0ZXo= IEdPTEQ= 55Sa6Iez IHNsb2I= 0YjQutCw IM+Ez4zPg86/ IGFsZ29k SG9uZw== IG1lbnNhbA== IHBpbmM= IGRlY3JlbWVudA== aWNraQ== 4LC/4LCh Q2hhcmdlcw== IOmVhw== cG9zaWNpw7Nu TG93ZXN0 KCk8 44Gg44GR YW1pbHlh IHBhbGNv ZGVzY3I= IHVubWFy IGZlbmNlcw== IGtlZXNzYWE= IGFsYm8= LuC0juC0uOC1jQ== IGRldWk= IFp1Z3JpZmY= w6FiYW1vcw== X2hp 15XXpteQ15XXqg== IOeUteivnQ== X3dheQ== IOGDmOGDoA== IGdlbm9jaWRl R1JFRU4= Q29uZmlndXJhdG9y 4LOL4LKX4LON4LKv zrLOv867 IFplaXR1bmc= IDsKCgo= YWlzbQ== 0YLQsNGA0LTRi9Kj IOGDoeGDkOGDpeGDm+GDlA== b3Bjb2Rl LnNsaWRlcg== INGC0LDQvdKz0L4= yZlyyZlr IEhPUg== UHJvY2Vzc2Vz amVubw== INqp2LHYpw== IFBSSQ== IE51bGxhYmxl aXN0ZXJu 0LHQsNC10LI= X3JvbGw= YXJ0b24= b25pY3M= Lm1u QWxpYXNlcw== 5omr5LiA5omr IFdpeg== RVNTQUdFUw== CWZpZWxkcw== dXJldGhhbmU= IFtbWw== ZW5vaWQ= IFNoYXk= IE1hcmluZXM= IOCkpuClh+CksA== cHJvdmlkZWQ= zrzOv8+C IHBhdGnDq250 IGNvbmNhdGVu IGFpa2lu c3B1cg== IGltbWlra3V0 IE9wdGljYWw= IE1hYQ== bWVpZA== aW1pbmk= IGdhc29saW5h IGVyc3RtYWxz bGFjaHQ= Y29ybmVy IERlZmVuZGVy 56ev5YiG QkJX IFRoZXJhcGV1dA== IHNjaGl6b3Bo IGRpdGU= IHdvbHZlcw== IG5lxIdl IHBheWNoZWNr SFg= IHdhaXRlcg== IHlpbmc= Lnd3dw== IOKAnFs= LlJlZg== am9pbmVk REVN IGVzdHJhZGE= 2K7ZiA== IEx1Y2E= INC90LjQutCw0Lo= IGtvbnRv ZG9jdHlwZQ== IG3DrWRpYQ== IFNwZWFrZXJz IHVuZ2xhdWJsaWM= 15nXkdeZ IGJpdGluZw== 4YOU4YOs z4fPhQ== ZWdkZQ== IE1NTQ== IOOCueODvOODkeODvA== bWFyY2E= INC/0YDQvtC50YLQuA== IGZvcm11bGFy X3NvY2lhbA== J29l aWrFsw== IEVpbmZsdXNz IHNpYXA= INK30L7QuQ== IHJhd3M= xYJhdw== Lmdlbw== IG9udHN0YWF0 IElDb21tYW5k INCa0YPRgA== IGhvZg== VmlzYQ== Ii4u IFBpcGVy aG9seg== zrnOus+Mz4I= aWNoaWVy 0pPQsNGC YW1hY2FyZQ== IGVsc2tlcg== INeR16LXnNeZ IGTDqWNsYXJhdGlvbg== IG7JmXRpYw== IOCwsuCxh+CwlQ== 4LKw4LOB4LKk4LON4LKk LmF3YWl0 INaE1aHVtdWs IOCmrOCng+CmpuCnjeCmpw== X3Bp CU9wdGlvbmFs SGc= PSdf IGTDqXRlcm1pbmVy IHdoaW1z IHNvbGxpYw== 0Y3RgtGF0Y3Qsw== IFBob3RvZ3JhcGhlcg== b3Zhbmll INi52YrYrw== dWRkZQ== IGZydWl0eQ== INGF0YPQtNCw0LvQtNCw IFRJTUVS bcOh IHRhdm8= IG1lc21hcw== 4LS04LS/4LSV4LWN4LSV INmI2KfYqA== 2K7Zgdin2LY= c2VsZW4= IEVzdGF0 eXTDpA== ZXRoZXJz ZXJlZQ== TElLRQ== 4oCZaHVpbGU= IC4k INCx0LDQt9C1 IEVtaWxpYQ== IHBsYWNlbWVudHM= IFZvdGVz IGd1a29yYQ== IG96b25l IFBvbnk= TkZU IGNoYWxldA== 4Lix4LiS4LiZ4Liy 2LTZiA== IGNvbmNpZXJnZQ== YXZyYQ== ZXlleQ== INGD0YfQsNGB0YLQvdC40LrQvtCy YWxhZw== IHRlbsOlcg== 64ud 5a6i5pyN6IGU57O7 IHbhuq1u KCk9PnsK IGRldGF5 TElORw== INC806nQvQ== 4Kqm4KuN4Kqm dW50ZW4= INCh0Lw= IFTDqWNuaWNv IGhhbnlhcg== IHBpc3Rlcw== IHp1cmU= INCw0YjRjA== 5Lq65aSn Uk9U TGVhc2U= JG5hbWU= IGFoaQ== IGvDpXRl IOCkluCkvuCkpA== IOq3uOuKlA== IGZlcmQ= IG9tYW4= INCz0L7Qu9C+0LLRgw== IldoYXQ= W2V2ZW50 IHJlc3Rvcw== IFZhdWdo X2NvbXBsZXRlZA== 4LOL4LKn IHJvdGE= KHBoaQ== QWdncmVnYXRpb24= INGW0YjRltC90LTQtQ== IHR1cnF1b2lzZQ== 0LjRj9Cy IG5pZg== IGRvbGdv LmNl b2hudA== INCy0L7QsQ== IGxvb21pbmc= IEJlcmRpbXVoYW1lZA== IGRpY3Rpb25hcmllcw== YWxsb3dz IHRyYXlz 4oKq YXJkaW4= IGVzcGFsZGE= Q2VsYQ== IGJhbHM= IERpag== 4LON4LKg IE1pbGQ= 4KSn4KWH INin2YTYudmF2YTYp9ih IGVxdWls 4buNcOG7jQ== IFRvcnI= w7N2aWw= w7xzw7w= IERvZGdlcnM= IG50c2g= UGFkcw== YXJ0aWc= INCy0LXRidC10YHRgtCy0LA= LlNUQVRF INC/0L7RgdGC0LXQvw== IOCkteCkv+CkteCkvuCkpg== IGxhbmd1ZXM= IOS8mOWNmg== Z2xvYmFscw== IERhdGVuc2NodXR6 IOConOCpiw== LmZpeGVk LiIpKTsK Y2FzY2FkZQ== QW1h IFdBUg== IFRvbmk= IGFiYXN0ZQ== dWhha2U= IGFsbGFudA== INin2YTZhNi52KjYqQ== IElraQ== INCx0L7Qu9C+0YU= 6LK4 INC+0LHQuw== 5LiL6L295b2p56We5LqJ6Zy4 KWE= 5Zue6KGA IGNvbGlz IFlN IG1haHVzYXk= IHZpc2M= LkJ1dA== 67mb ZWxhdGU= X1RT IHZpY3RpbWU= IFlhY2h0 IGVzdGFtcA== IFBsdWdpbnM= IGtvam9q 0YLQvtC2 IGzDtnNlbg== IEltcG9ydGVk R3Jvd3Ro IHN0YWluaW5n IGltcGxp S29y IGVzY2FwZXM= 0q/Sr9GB IE1hcmNh 1aXVrdW2 YWN1bGF0ZQ== IEJvYQ== IHJlY3Vyc2lvbg== INC80LXQtNC40rPQsNC0 IOCkteCksOCljeCkpOCkruCkvuCkqA== IGFubml2ZXJzYWlyZQ== IEZMQVNI 0LzQsNGI IHZ5c29r INCx0YPQtNGM TnVlc3Q= IGRyYXdiYWNrcw== KCgn IGFyY28= LC4KCg== 4Lij4Li54LmJ LWNvbm5lY3RlZA== IFNvbGlkaXR5 4LKu4LKC4LKk4LON4LKw IHFpbm4= aGVm Rm9yYmlkZGVu IOKdpO+4jw== IHN1cnBhc3NlZA== INCd0LDRhw== PigpOw0KDQo= IM+Dz4XOvM68zrU= IHZvb3JiZWVsZGVu 4KS+4KSC4KS2 IGdsZnc= IHJldG9ybmE= IGrDug== 4Kq14Kq+4Kqm IGdlc3BlY2lhbA== INGH0LXRhw== IHJlYWN0ZWQ= IEFncm8= IOCkleCkvuCknw== IEZyYWc= YXNwZWN0 44Gm44GE44G+44GZ IFN0YXRpc3RpY2Fs 6Kqw IGFzaGVz IExqdWJs IHF1w61taWNh dXZvcw== 2q/Ysdin2YY= IGFuZ3U= IOCqueCri+CquOCrjeCqqg== IGJldGVrZW5pcw== IOeOqeWMl+S6rOi1m+i9pg== xag= INC60L7QudGC0L4= dW1idQ== IHF1ZWRhZG8= INC805nSlw== IFN1cmVseQ== INeT15DWuNeh bWF0aWdl IGRpZmVyZW5jaQ== IEdld2FsdA== IOC0qOC1jQ== IHJvYm90aWNz IG5hYXBlcnQ= IOCmkA== IE3DtmJlbA== IGV4YWdlcg== IEhlbHBz IEZyZXVuZGVu IMWE IM6/z4U= Qk9U IHNlcnJ1cmVyaWU= 4LmA4Lij4Liy IOCkheCkguCkpuCksA== INGB0YXQtdC8 5Yqe5YWs5a6k IGVneg== IGRpc3NlbWluYXRpb24= ICIiKXsK IGJleQ== PEFjY291bnQ= Sk9S IEdyb292ZQ== TmVpbA== IGtvbWnDsA== IHJlYWx0w6A= IGvDpHl0dMOkw6Q= LkJvb2w= IGRlbHZl CWZhaWw= IHllbGw= INeZ15zXk9eZ150= Lmxpa2U= IM63zrzOrQ== INeX15nXmdeR UmFkaQ== IGNsaWVudCdz INiq2LnZhNuM2YU= INCT0L7RgA== PG51bQ== INGC0LDRgtCw0YA= IHNhbXM= INCU0L7QvA== IMOpbmVyZ2ll w6dvdQ== IHN5bm9wc2lz 4K6/4K6a4K+N4K6a IEFSRUE= INin2YTYt9io2YrYqQ== IGppZw== IEhpbW1lbA== U3Vic2V0 IGhlcnN0ZWxsZW4= RW1wbG95bWVudA== 4Liy4LiC4Lit4LiH INCy0LbQtQ== YWNjYQ== IENvdXM= IHNhbXVu IGNobG9yaWRl IOGDm+GDneGDq+GDoA== INC20Lg= IExlcA== X1lFQVI= IHJhYmJpdHM= IOCkreCkqOCljeCkpuCliA== IOC0n+C0vw== LycpCg== IExpYnJh IFRlY2huaXF1ZQ== IFJpZXM= IElDTw== Q29ycmVv X0FwcA== PgovLy8= w61yYW0= IOCkruCkvuCkruCksuCkvg== IOCml+CmvuCmqA== IOCkieCkruCljeCksA== xLF5b3J1bQ== 0LrRgtCw0L0= xI1pbGE= IGh1a3U= IGRvb3J3YXk= 06nQtNOp0Ls= IGPhu6U= IEVuY3J5cHQ= UGFt 5peg56CB5LiN5Y2h6auY5riF5YWN6LS5 4Kut 0LXQudC9 IGNoYW1hcg== IEdsb2JhbHM= IHByb2dyZXNzaW5n IOGDo+GDkeGDoA== 2YTZitio ZW50cmE= 77yaYWRtaW4= IG1lZGly IE1hbmlw IE5Y IGhhcms= IHBob3Rvdm9sdGE= 4LS/4LSV4LWN4LSV4LWB4LSV INis2YXZh9mI2LE= QVE= 0LLQsNGO0YbRjA== IGhlcnpsaWNo IGhvdHNwb3Q= IGJlZ2Vpc3RlcnQ= ISc7Cg== IGVzZnVlcnpvcw== IGdhcsOnb24= IlRoZXJl IOS9jQ== IG5pdm8= IGNhbmFsZXM= INC90LXQvNGD VmFsaWRhdGVk IG9jY2l0YW4= fSIp INC30LXRgA== IGFmbGV2ZXI= IOCmm+CmvuCmpOCnjeCmsA== 44Go44Gv 772l772l772l INC90LDRgdC6 IGNoYXJnw6k= INCy0LfRgNC+0YHQu9GL0YU= 5YWs5a6J T3Bpbg== IOGDp+GDneGDleGDlOGDmuGDl+GDleGDmOGDoQ== eGVm TWlsbGk= IEJyaWxsaWFudA== IHBpYW5pc3Q= IGF1cm9udA== IHN1bGlz IEJhcmNs IGRvdWJsaW5n LmNsb3Nlc3Q= X0xPT1A= cGVsbGllcg== 55uX w6luZWs= TmdheQ== IHVpdGdlcw== IGJlbnNoaQ== IGFncnVw VWc= INee15LXmdei fSovCg== IGhvcmk= INeQ15XXqteZ IGNvbmNlYWw= LXNvbHZpbmc= b2NoYQ== IGFiYXM= 0JrQsNGC INin2YTYqNmG2YM= IG9yZ2FuaXNtb3M= IHByZXNlYXNvbg== 4LOL4LKV IHNwaXJpdHVhbGx5 INmF2K3ZgQ== YXdhcw== IGFmaXJtYXI= IGFjaGVp KGdjYQ== UmVsaQ== dWdnaXNo INWp1bjWgtW11aw= IENvbnN1bWVycw== IG1lZGlzY2hl IOCkpOCkqA== IE51dHI= IOWkqeWkqemAgemSsQ== CQkJCSAgICAgICA= w6ljdXRpb24= INmE24zarw== INGH0LXQu9C+0LLQtdGH0LXRgQ== 4YOQ4YOT4YOQ IOGDkeGDo+GDnA== 4Kuu IGdvYm9sa2E= IHRhdW0= IG1lbsO6 IHBpc3NlZA== IGxpw6llcw== OjoK IAkJCQkJ IOCyruCyvuCyueCyv+CypOCyvw== Y2FsbGVy IFNoZWxieQ== IGluY2VudGl2 UHJlaXM= IHdlYXJhYmxl PElE ZG91 4Kef4Ka4 IGNsb3du INC60L7QvdGG0LXQvdGC aXRhbmc= LmVl IEluZGl2aWQ= IExhbWE= YWx5YQ== YWxpZGE= IEJVRkZFUg== IHZvbHRvdQ== INKT0LDQuQ== INmC2YjZig== a3JhY2h0 Y2llbmNl 4LC+4LCv4LCV IE7DvHI= IGxvb2Q= YXdi SWE= c3VybmFtZQ== bGljaXR5 IHBlY2Fkbw== IENsYXVzZQ== IGbDtnJzw7Y= IGhha2Fu IGVuZ3JhdmVk 4K+I4K6V4K6z4K+I INek15XXnA== bnVs 24Hbkg== IEREUw== IOC4meC4suC4og== cHVycGxl IGxpamU= IFN1bnJpc2U= 0LjRgtGD 2KfYsdi0 5rWu IOuUlOyekOyduA== IG1ha2luYQ== KCJ7fQ== 0LXRgtGW INGD0YHRgtC+0LnRh9C40LI= Lk1peGVk INin2YTZhdmC2Kc= IHRlbmRlbmNpZXM= IHjDvHM= IEhhbGs= 5LiH6IO9 IHRvaWxldHJpZXM= IHN3aXY= IEh1bmRl IGthaW4= LW5n 4oCM4LC1 IHN1cGVybWFya2V0cw== INC30LDQtNCw0YfQuA== IOCkquCkog== ZXhpc3RlbnQ= w6lyYW5jZQ== 4LK/4LKo4LON4LKo4LOG IGRhdmFudA== IE5hdmln INeU15HXmdeq L2RpYWxvZw== LlBS 5L+D6L+b INC/0LDRhQ== 2aY= 0ZHRng== 7ZWY7KeA66eM IOW8gOWFg+aji+eJjA== 4LKc4LKo INin2YTZiNi22Lk= IG9wbWVyaw== LnNtYWxs INGF0LjRgA== LlN1YmplY3Q= XVsv IEJlcmw= IGRpdnVsZ2HDp8Ojbw== INii2KvYp9ix Q0hL INC+0LHRgdGC0L7Rj9GC0LXQu9GM cGFsZXR0ZQ== IFJldHQ= INW41oLVpg== 4KeD4Ka5 IGF2dXQ= 4LGL4LC1 LXN0b3JhZ2U= IOCmhuCmpOCnjeCmrg== IHRvd2luZw== IHRrdW4= INC00YvRhQ== IOW9kw== IFNDUg== ZXN0ZWFk IENyYWlnc2xpc3Q= 06nRgtOZ YXd1bGU= 0L7QvNC10YLRgA== IEJFUg== 4KuN4Kqe IGluZGl2aWR1ZWxl IG3huqt1 IHB1cnN1aXRz INGC05nRiNC60LjQuw== IEdlYnJ1aWs= IE7Dqw== XFM= IGfDpXR0 IGVpZ25ldA== ZHV1 5oy6 Z2F3ZQ== 44KN44GX44GP IHRlcnJhZm9ybQ== CWxldmVs IOCwheCwr+Cwv+CwqA== CXNsb3Q= IHNla3N1YWw= a293 0YLTmdGL cHJvd2Fk IFZlcmVuaWdkZQ== IE9QQw== IGxvdGU= ZXBlbmQ= 4Liq4LmI4Lin4LiZ INWk1oDVodW21oQ= 4LS+4LSV4LWN4LSV4LS/4LSv YXlzb24= IHJlc3VtZWQ= IGjGsOG7n25n 0qfRiA== IGJyb3lhZ2U= ZsO4cnQ= IGNvY2twaXQ= 4Ka+4Ka44KeN4Kak IHVrdXE= IOCmr+CmvuCmqA== IGJpbmdl 8J+YmA== KHNlbGVjdGlvbg== IGthcuG7i2E= IHZvbHZpw7M= 4Z+S4Z6a4Z68 IGPDoW8= IHJlZmVyZWU= IOCkqOCkpuClgA== IOe7jw== IGV4dHJhbg== INGC0YvRgdGP 0LXQutGC0LU= IGtlcmVz z4bOrM67 IENvbm5vcg== IG9hdGg= IGRlc2NvbnQ= IGRlcGljdGluZw== IGJsb3VzZQ== IGRpZmZ1c2Vy Sk0= 4Liy4Lif IHZlcmJz 4LWH4LSk IHnEsWxk IOC0qOC0ruC1jeC0rg== INCd0LXRgQ== INmF2KjYqg== 4oCCCgo= IGNoaXE= X2VtYmVkZGluZw== IOCwl+CwpA== 2YbYp9mI2YQ= QVBQSU5H IOGDkOGDm+GDkeGDneGDkeGDoQ== IGVudHJhw64= IHl5eXk= LlBvd2Vy IOGDouGDlOGDmg== LmFic3RyYWN0 IGluYWFk X3BvcnRz IEJMRQ== Qk1X IHN2aW0= bmVm 0LXRidC10L3QuNGP Z3VuZw== 44KC44Gu xZtjacSF IGt5bA== IGhlcmVu b2xld2E= IGNvbnNvcnRpdW0= IHLDoA== 15nWtA== RGFuaw== INin2YTZg9mF2KjZitmI2KrYsQ== IGVtcGV6w7M= YW5jb3M= 0L7RgNC00LjQvQ== ZGVwYXJ0dXJl INCf0J4= cmFlZw== 4YOY4YOg4YOU4YOR4YOQ IHByb3Bvc2VudA== IGt2aW5kZXI= IHZpbGph IOC4nuC4o+C4o+C4hA== IEt5b3Rv IEV2ZXJ0b24= dW1hdG8= 6ZO25rKz w6RuZGVu YWthZA== IOaTjQ== IHdpZGVzdA== INC/0YDQuNC90Y/RgtGM IGJzb24= V2VpZ2h0ZWQ= IHdn 6buR5b2p IOyVhOustA== KCIiIg== IGdhbmFkbw== IG5peA== dmVuYQ== IHJldGlyYWRh INGB0YLQsNGA0YI= IG5hbWVucw== IEZyYW5jaGlzZQ== 4LSZ4LWN4LSZ4LSz4LWG dm9x IOCwteCxhuCws+CxjeCwsg== L2Zy IOGAnuGAsA== IGTDpGw= IHRyYW5zbGF0aW5n INS4 IOCkqOCkv+Ckrg== IFNueWRlcg== IOuylA== Lmp3dA== IFdBVENI IFdhcnN6 IOWMl+S6rOi1m+i9pueahA== LnJvbGw= LXZpcnVz IE5hY2hkZW0= 7YOV IOCkmuCkv+CkleCkv+CkpA== IOCkheCkmuCljeCkm+Clhw== IHPDom4= LnBzaQ== X0RlZmF1bHQ= IGNyaWVz IHNlc2VvcmFuZw== IHJlaWs= X0FWQUlMQUJMRQ== 1Lo= INin2YTYrNiy2KE= Wm9uZXM= IEhvc3BpdGFscw== 2LPYp9ih 5peg56CB5LiA5Yy65LqM5Yy65LiJ5Yy6 THZs Y2VycHRz IOGDoeGDoOGDo+GDmuGDmA== RW1wbG95 YW5jw6k= IGdvcmR1cmE= YW5lbw== dXp3YQ== 0Y3Rng== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 2YrYp9mE IOCkoeCksA== INi52Lg= INC60L7QvNC80LXRgA== QUlS eXRpY2Fs IGZ1cmlvdXM= IE5vbGFu IOC4o+C4suC4hA== VW5sb2Fk IGFudGlm IHZpbm5h IGhvcm5z 5Yy755Sf LnN0YXRlcw== IHNpZHN0ZQ== w7Z0w6Q= IGLEsXJhaw== IERoYXI= 5rWB56iL LXByb2Y= IGNhbWlzYQ== IHdlZHN0cmlqZGVu 642V XEFwcA== INmF24zZhA== Q291bnRlcnM= IHRvZnU= IHRyemViYQ== IHNlcmFpZW50 IFRleGFucw== INGB05nQvQ== IOCwj+CwsOCxjeCwqg== YW5jYW5n IHByb21wdGluZw== 4LSj4LWN4LSf4LWB4LSC IOygnOyekQ== IFBhdGVs PE1vdmll YmVi w61kdW8= IE1vb2R5 b3JhZGE= IHVpdHNwcmFhaw== IMOpdGFibGlzc2VtZW50 IOCuteCurw== IFdhbnRlZA== LnRyYW5zbGF0aW9u 4Kec4Ka+ 0pPRi9KZ SW5r IEZ1bmRhbWVudGFs IEFjYWQ= c3RhdGlzdGljcw== IG1hcmw= INC/0YDQuNC10LzQsA== IOCqnOCri+CqiOCqjw== IOCquOCrjeCqpA== INmH24zZiNin2K8= IGFwYXJlY2Vu IG11c8Ot LXJlc3VsdA== IGFydGVyaWVz 0KDQmA== 0L7Rh9C90LDRjw== IGZyYW56w7Zz IOCuleCviA== YXduaW5n IE9uaW9u IE1hbW0= IGRpY2E= 0LrQtdC7 IOC4leC4tOC4lOC4leC5iOC4rQ== YW5pYW4= IHJpY29u IEdlZ25lcg== IG1sZQ== 5rih c2NpZW50 IG9jaHI= IHlhbmd1 INCw0LvQvNCw0Lk= INC80LXRgtC+0LTRiw== IFNjb3Jlcw== IGVuYWN0 INGF0YPQsQ== IEVkbXVuZA== VGhlbw== LnRleA== IE1vdXJpbmhv LdCZ IEJhcnJlbA== IOCmieCmquCmnOCnh+CmsuCmvuCmsA== IFNjaWVudGlzdA== IG1hbGFz IHfFgmHFm25pZQ== INGF0YPQtNC+0LY= IOCmleCmluCmqA== LuC0uOC0vw== INWw1aHWgNWh1aLVpdaA w7xydHRlbWJlcmc= 5Yeg5Liq KEJBU0U= IGtlw6dpcg== aGVq ZXBzaWxvbg== SmV0cw== 4YOg4YOh aW9x INuB2LLYp9ix U0VSVg== Ymlhcw== IHNjaHdhcno= 0ZbRgdGC0ZY= IEFsaWFz X1ZFUlRFWA== IOCwhuCwsOCxiw== INC60LXQu9C40Yg= XCIsXA== xaFsag== 44CR77ya LXJheXM= aG9sYQ== 4Kq+4Kqc4KuH4Kqk IE9yZG51bmc= cHJvamVrdA== IGxpYmVyYXRpb24= X2Nu b3RjaA== IGFyY2hhZW9sb2dpY2Fs IOyyoA== IFdvcnNoaXA= IGxhag== IGJhdWQ= IFJhYmF0dA== KG1hcHBlZA== IGJhdGFz IGdlbWlkZGVsZA== aXNoYWJsZQ== IGN1c3RvbWVyJ3M= IGFib25u bmVyb3M= IGxldHNhdHNp 4buo xLFrbGFyxLE= ZmFjdHM= 4oCcQnV0 ICEhCg== INeZ15fXkw== 4LC/4LC44LGN4LCk4LGB4LCo4LGN4LCo4LC+4LCw4LGB IG5lY2Vzc2FyaW8= PSIkKA== IHJlZGVzaWduZWQ= IGFtaWdhcw== IGRlbW9zdHJhcg== VmFyaWF0aW9u INGO0LE= cm9mZmVuZW4= INC/0LXRgNGB0L/QtdC60YLQuNCy IEVNQw== IGltcGFy 4Kqm4Kq+4Kqo IENsdWJl 16nXqNeV16o= IGRlc3RydWN0b3I= IFBlcmVpcmE= X1w= IHBsdWll IM+Gz4k= YXRlZ29yaWVu INeQ15nXmdef IGF1c2dlbA== YW1lbnR1 INC905nRgA== IGFsbGQ= SG9sZQ== 0L7RgtGM INGB0LXRgdGC IHNsdQ== 6rmo IGtveWE= 4KSc4KWN4KSe4KS+4KSo JGZvcm0= IGFtaWU= IFJlbmQ= IGtsaW5n SW5zdGFudGlhdGlvbg== IHBvbGx1dGFudHM= IExhaQ== IGNhcnY= IFNFQQ== b2RvcmU= IGxhbmdmcmlzdA== IGtvdw== 546L5Lit546L IHN1cm4= 7Iuc66m0 IG5hcm8= aW1hbmU= IOCkqOCkv+CkteClh+Cktg== INW41aw= 2KzZhNiz Rmxhdm9y IHByZXByb2Nlc3M= IGdhcmFudGllcnQ= IHpkasSZ 4Kus INeg154= IOCmleCmsOCnjeCmruCmleCmsOCnjeCmpA== 0YjQuNC9 IG1pbmVyYWk= 4LC+4LCy4LGN IGhvcm5v IOawuOWIqQ== c2tpZQ== IFRIRU0= IMOubmNl IFdpbm5pcGVn INWv1aHVvNW41oLWgQ== IGJlbmVkZW4= 16fXnw== 2qnYqtin INC60LLQsNGA0YLQuNGA0YM= IHNvbGVtbg== IHByZWxvYWQ= IHJldmVyc2libGU= IGFkYW55YQ== INW61aHVv9Wz1aHVvNW41b4= z4HOs86xzr0= IOCyheCyrg== R0xF IOC4nOC5iOC4suC4mQ== YXBhYQ== IGZpbmFsaWRhZA== ZW5kdA== 5piv5LiA IG91emg= IGdvdmVybm1lbnQncw== dWN0aXZl IGluZXNwZXI= IG5vdXJyaXR1cmU= IG9sZHM= 4KeH4Kaw4Ka+ d2F2 INeU16bXnA== Um91bmRlZA== 6Iux6ZuE dXNzZWQ= IGdlbmVyYWxpemVk VUJMSVNI IG5hbmk= IG9yZ2FuaXphZGE= cGxldG8= IG1vdG9z IHJpb3Q= INil2LfZhNin2YI= IOCkreCkvuCksOClgA== IHTDqWg= IOCkhuCkqOCkguCkpg== IHN0YXJrZQ== IFBhdHRlcnNvbg== 0L7Qu9C+0LPQuA== IOWkp+WPkXBr X01hcA== d2lr IENhdGVy 4LC/4LCC4LCf LmNhbQ== LmZsaW5r X2lwdg== bWxhbmQ= ZWxzZWw= IFByZXNieXRlcg== Lk9w INGC0LXQvNC/0LXRgNCw0YLRg9GA0Ys= IHpyb2Jp IEZhdGU= 4YOQ4YOd4YOT w7pr IOaxiQ== IGFkb3JuZWQ= IGtvamVt IM61z4TOsc65 dWt1bHU= IExlbnQ= IGhvbm9t anVqZQ== 7IKs7KeE 4YOX4YOQ4YOV4YOQ4YOW IM+Dz4TOuc6z J11dCg== LGlucHV0 IGZpbmVy 4Ki+4KiV d2luZGlna2VpdA== 0LrRgtC40LI= IHVtYg== IGVtYWhsd2VuaQ== dmVydHJhZw== 576e IFNwaQ== IOGDrOGDo+GDlw== 4KSw4KWN4KSs IHRvZWdhbmtlbGlqaw== RWxhc3RpYw== IOusuO2ZlA== IH1d IGZhbnRhc3Rpc2s= IOCkuOCkv+CkpA== IGl2ZXo= dWxpdHNh IHBwcmludA== SW52ZXN0bWVudA== 5YWx5ZKM YXZvcmFibGU= IHJhY29udGU= 66eI7Yq4 RXRp IGTDqWNy 5ZCI5b2p IH0sewo= PFRyZWU= 4Ka+4Kak4Ka+ YW1hdGlvbg== IEZhcmU= LWFsb25l IFNoZWxm IHBlbmdhbGFtYW4= IHdzenlzdGtpbQ== IOa+s+a0sg== IEVyZWlnbg== LdC90LA= IHVyZ2VudGU= IENvbnN0aXR1acOnw6Nv zrPOv869 IE1TVA== IOCwleCxhg== INKb0LDRgNCw0Lk= RU1QVFk= CXZt ZW1pcw== IOCkleCksOClh+Ckl+Ckvg== IHplbnRyYWw= IFJlc3A= 64+E66W8 15nXmdeg15U= 0LrQsNC30YvQstCw0LXRgg== LlVw YW5kZXJz QkVO 1aHVtNWl1bY= w7lu 1Lg= IOCmouCmvuCmleCmvg== IHphbGU= LnNn IERSTQ== aXNhc2k= IOGDmOGDoeGDlOGDl+GDmA== ICd7JA== IEF1c2dhbmc= IGTDqXRy IFBMQQ== 44GM44GK6YCB44KK44GX44G+44GZ b3ZpbmE= IFBpbnM= LWVqaQ== IHBhcnRpdA== L0VkaXQ= cG9pcw== IHN1dg== Kysr d2FueWE= LeG6uQ== IHdhcmVob3VzZXM= IG5hZ2luZw== IGV4aWdlbmNlcw== ZGVpdGg= 4oCUCg== IG9sdW0= Y3Jt IHJlcGVudGU= IHNhcmFubm8= aXNpw7o= YWphcmE= KGxhbmd1YWdl IEF0dHJhY3Rpb24= IHVuaWNvcm4= IM+Dz4TOv865 IGJlZ2dl INW01aHVrw== 4K6f4K+B4K6k4K+N4K6k4K+B Kigo IGFkdm9jYXRpbmc= IFBhdHJvbg== IERlbW9rcg== IHByaW1hcmlh IEJhamE= 0LPQvtGA0L7QtA== IOC0k+C0q+C1jQ== 4KWk4oCZCgo= IGxpZXA= 15nXm9eV16o= IGhhbmRlbHM= INS71b3Vrw== 4oCZw6JnZQ== 4Lax4LeS 0LDQt9GW0YDQs9GW IHBhaW50ZXJz IHRhcmVmYXM= LXRvbg== IExI IGFzdGU= IHBsZWFzdXJlcw== IFRyaW5pZGFk 6KmV6KuW 5pm0 IFZlcnN0w6RuZA== IHByZXNpZGVudGE= Lmx2 w61n IGNvbnN1bHRhcw== INeV15vXnA== IGFrdGl2ZQ== CWZvdW5k IGFycXVpdGV0 IMO2ZmZuZW4= INCy0YHRgtCw0LI= IGN1ZXN0aW9uZXM= w7N3bg== LW11dA== 0YPRjtGJ0LjQvA== IE92ZXJsYXk= IHByZWRldGVybWluZWQ= IOCkleCksOCliw== Lm1vZGlmeQ== INC00LXSo9Cz0LXQuQ== IGNydWQ= bWVkaWF0YW1lbnRl LWtvbQ== zrTOtc+F IG1hcmtpbmdz Q2xlYW5pbmc= 2KzYp9ix2Kk= IGF4aWFs dsSB 5LiA6YGT 4K+B4K6z4K+N4K6z4K6p4K6w4K+N ID8iOwo= KCkpOwoKCg== X0Jsb2Nr IGxhdmFkbw== am9uYWxp LkFjY2VwdA== IGFzc2lnbmluZw== INC30LDRgNCw0Lc= 4YOq4YOU4YOb IEtvbmE= IERpcGxvbQ== INeU15DXk9ed IEd1cmI= 44Kt44Oj RWxpemFiZXRo IG11c8OpZQ== VmVuZGE= aXRldXJz IGdlbmVs IEdyYXR1aXQ= dWxpcmE= INWw1aXVv9Wh1oTWgNaE IOC0uOC0qOC1jeC0pg== IGtlbWVuYW5nYW4= RElUSU9O 4LC+4LCs4LGB INeg16jXkNeU Y2hlcnM= IHdlYXZpbmc= LAoKCg== INCw0LvRgg== IGF1dG9tYXRpcXVlbWVudA== 4Ka+4KaV4KeN4Kak YXR0YW5vb2dh IGFudGlndWE= 5b2p56Wo5LiL6L29 INij2YjYsdmI2KjYpw== IGJidw== IGV1cm9ww6Rpc2NoZW4= IHdvbWI= aW1lbnRh aWtpc2hh INC90LXQsdC+0LvRjNGI0L7QuQ== IEV4dHJlbQ== Li4uJykK VUFSVA== IGdpZ2FudGlj 0LjRgNC+0LLQsNC7 c3Bpbm5lcg== IHBhdXM= IGhvcnQ= YW5nYW5v INec157XpteV15A= 0JTQvtCx0LDQsg== IElEWA== INCX0LXQvA== IENBR1I= IGZ1bmN0aW9uYWxpdGllcw== TmFubw== LnJlY3RhbmdsZQ== IEVsZXBoYW50 LnN0cnVjdA== IHRyYXRhbmRv IOCmj+CmsuCmvuCmlQ== Z2Ftb3Q= KGhpZGRlbg== zKc= INC/0LvQtdGH IHNld2FnZQ== IGZ1b3Jp IFByZWNpbw== LnRhYmxlcw== IHZlcnRyYQ== Y2hhdWZm IGZlaXJh IGJ1bm55 2LXYp9mE2KfYqg== IOCksOCkow== IHNjaWVudGlmaXF1ZXM= IMOnYWzEscWfYW4= INi32KjZgg== IGpy P+KAnA== INC80LDRlA== IHRvbmVy IGZvcnN0w6U= IGJyb25jaA== KGJpdA== IER1cGxpY2F0ZQ== UG96 IHN1amV0bw== w6FzdGljb3M= c3RhbmRlcg== 4paE ZWxpbmdz YW55YXJ3YW5kYQ== b3Njb3BpYw== IOWPpuexuw== 4LSv4LWN IGRldXJlbg== IGVtcGU= INen16k= INW+1aHWgNW51aHVutWl1b8= ZW5hYXJz 0LvQuNC60YI= IFBTT0U= aWNrYQ== IGJvdGxo INC30YM= xa9q IOCknOClguCkqA== J2FjaGF0 INmC2YjYp9mG 0KHQtdCz0L7QtNC90Y8= IFRlaWxuYWhtZQ== IGhpZHI= YnJldg== KSwKLy8= LkNvbnRyYWN0 INin2YTYt9io2YrYudmK2Kk= 5aSN5Yi2 INC80LDSm9GB0LDRgg== ICjCow== INi52LHYqNmK IHNtYWs= INeR15zXkdeT 6ZKx5oCO5LmI IElyZW5l IFVuZmFsbA== IGZpc2NhbGU= 4oCZZXVyb3M= IFBsYXNtYQ== IOCkq+CljeCksg== ZW5ncg== IOihjA== Y2NjYw== 77yI6K6w6ICF IEltcGxlbWVudHM= INCx0rHRgNGL0L0= bGFicw== IHNlY29uZGE= RGlyZWNjaW9u IEFsZ2VicmE= U29sdXRpb25z UmVzZWFyY2hlcnM= X3NwaW5uZXI= IHVuaXZlcnNpdGV0 ZXJ2YXJpbmc= IEp1ZWdvcw== IGludHJpZ3Vl dXN0YWluYWJsZQ== IE1JRA== 1bjVvdWr IENvbXBhbmlvbg== IHnDtm50 77yR77yT IEFkZWw= JEdMT0JBTFM= aXNzaW0= cXVpbnRh YXJkYWc= IENpcmN1cw== IGNoaWxsaW5n IEhvcnNlcw== nOC4og== IGRvYQ== INiv2LHZhduM LlN0YXRlbWVudA== 4Kao4KeI4Kak4Ka/4KaV IOeUmA== IEFsbw== ZW5nYXI= IFZpb2xldA== LmJyb2FkY2FzdA== b3JhbQ== cHRp IOqxsOuemA== IERhcmtuZXNz 77yI5LiA IHN0aWs= IEFyY2hhZQ== IChfKQ== 0LPTmdC10LjSrQ== INCz0L7RgtC+0LLRiw== IOCmrOCmv+Cmt+Cnn+Cnhw== aXN0cmk= xaHEjWU= cGxlbw== UmVkdXg= 15XXoteo 0LXQtNC40Y8= bWVkaWFu IHBhcmxh IGNvbWVyY2k= IHNwYXduZWQ= INGC0YDRg9C00L3Qvg== CUFwcA== IFNJRA== IMWB IFNjaHI= IGPDrXJj IHBhcmVkZQ== UkVQ 4KWM4KSy IOCqquCrgA== IMOpdHJhbmc= YWNlYWU= 4Kqm4Kqw4KuN4Kq2 4LSk4LS/4LSw4LWB4LS14LSo4LSo4LWN4LSk4LSq4LWB4LSw4LSC IFRlbXBvcg== INix2YjYs9mK2Kc= PXJl IENydWQ= TFRF IGJvcm91Z2g= aXN0dW5ncw== IGFjdHVhbGl6YWNpw7Nu INmF2YjYqA== 4oCZdXI= 7Yqc 4oCmYnV0 IGbDuGxnZQ== 44CPCgo= IHRhbWFhc2E= aW5ndWlzaGVk 7J207IWY IFJpdmllcmE= 2K/ZitmC YXJlaw== CUJhc2U= X01lbnU= ICkNCg0K bWFyeQ== INCa0LDQu9GW 2K7Zitix 44CC44Gd44Gu IOml 0L3RltGG0YLQstCw IG1pbmVyYcOnw6Nv IGF1dGhvcidz IGNvbWg= dXJkdWU= IGdhbmhh IGZhag== IHRyb3VibGVzb21l IGZyZXNobmVzcw== IGV4cGxvc2lvbnM= IEdsYXVi IGNlbGVyeQ== 5rOK KGNsYXp6 0YXRi9GA0LA= Q09NUEFSRQ== aWJldA== YW5kZXN0 5a+85biI aW1ibGVkb24= 0YPQttC90L4= X3ByZWRpY3Rpb24= IGNvbnRhbW9z aWx0ZQ== 4KSa4KS/4KSk4KWN4KSw INGB0YLRgNC+0LjRgtC10LvRjNGB0YLQstCw IE1lZGluYQ== INin2YTZhtiq IGtvbno= IOiJsuaDhQ== INmE2KjYp9iz IOC0quC1jeC0sOC0pOC1jeC0r+C1hw== T2Z0ZW4= 4KS54KSw4KS+ IGx5c3Q= IHdhdG90bw== IHLDqGdsZW1lbnQ= YWJvcmE= INeg15DWuNea IHRyaW1taW5n W3RhcmdldA== d2lj RGlhbG9ndWU= bW9zdGx5 IGNibw== IE1FUw== 2LTYp9mH IFNpY2g= 0q/Sr9Cz06k= 16fXmdeZ15g= TGluZGE= IHV1c2k= Y2hlY2tpbmc= enV0 TmVpZ2hib3Job29k 1bjWgtaA1oQ= IFRoZXJlc2E= IOGDoeGDkOGDm+GDoeGDkOGDrg== CSAgICAJCQ== IHJhdmU= L2RldGFpbHM= aW1pemVk IGRyYWZ0cw== IGRvbm5lbnQ= INC20LDQutGI0Ys= IEZsdWdoYWZlbg== IHF1aWRlbQ== YW5hdA== cHRpdmU= cGVuZGVuY2llcw== X0VOQ09E IHNvZnJlcg== UHJlbg== dGVyYnVyeQ== CUlz YXNraQ== aGVtZXJhbA== bGRz IHDDpMOkdA== IHBlbmV0cmF0ZQ== INGC0q/RgNC60LjQudOZ 4LK/4LK5 IGJsb3dqb2I= c3Rpamw= INin2YTYqtix2KjZitip IExlaXN0dW5ncw== IERJU1BMQVk= IFd1bmRlcg== 0YLQsNC70pPQsNC9 IHPDqXJzdA== IGNvbXBldGVuY2llcw== INCy0YvQv9Cw0LQ= IGV4cGVyaW1lbnRhdGlvbg== IENvbm5lY3Rpdml0eQ== LmxpbmtlZGlu IHBoaW0= LmdyaWR4 IGFmaW5hbA== IHBlcm1hbmVj CUJPT0w= YWNrdA== IFRydWx5 IHBlcnNwZWt0 IHBhcnRpY3VsacOocmU= IOGDk+GDkOGDruGDm+GDkOGDoA== IOCmleCmsOCmrOCnhw== IOCmruCnjeCmr+CmvuCmmg== YmVpdGVu IERyaWxs YWJieQ== INWl1oDVow== IGlyaWE= aW5kaWE= IHp1bmVobQ== IOCmrOCmhw== IGRoYXE= IGlyZ2VuZGU= IEFjdHJlc3M= 4YOQ4YOd4YOT4YOU4YOc IOCkuOCkguCkl+CkoOCkqA== IGFubnVuY2k= dW5sb2Nr KGVsZQ== c2hlbmc= IOavjw== IHZlcm9vcnphYWt0 IHZlcmFudHdvcnRsaWNo Z2Vibmlzc2U= 5piv5q2j6KeE55qE5ZCX IGJlw71sZQ== INin2YTZhdmI2LPZhQ== d2lsZA== bXN0 LnNjYWxh ZWJy IGZvcnR1bmE= aWNoaXRh 2YTZiNin2YY= INGE0Ls= IOC0quC0sOC0vuC0pA== 0LvQsNC6 eGFh dWxha2U= IOGDnuGDkOGDouGDkOGDoOGDkA== UHVs 4oCZYXZleg== IFBvcnRl 4Kq+4Kq14Kq14Kq+ 4LC+4LCC4LCh4LGN Omo= 5p2x5Lqs6YO9 IHJpYmJvbnM= 5Lmx5a2Q5Lym INKb0LDQudGC0LA= X2Fpcg== 5aSn6IOG 4LCw4LGN4LC3 IEthemFraHN0YW4= a3Rhbg== 4Z+E4Z6E IGVuc2XDsWFuemE= IFJ1aA== IGJhcHRpc20= R2Vm IENoaXBz Rm9yaw== IEZpbmFsZQ== xIXEhw== IGN6eWxp IHNldHRl xKtixIE= VVk= IFVJRm9udA== IGJlc2Now6RmdGlndA== IOCwteCwvuCwsOCxgQ== IG5laWdoYm91cmluZw== IGZlcnRpbGU= IGdyYWRlZA== 2YrYr9mH IHNtb2tlcg== IHZvZGk= IGFsZGVy 4Laa4LeS KXt9Cg== YXRpY28= INCx0L7Qu9GD0Ys= IGFlcm9wdWVydG8= LkRvd25sb2Fk IG5hc2NldQ== IOCksOCkvuCktuCkvw== IGV2aXRh IE5hbnRlcw== IGtvc3Rlbmxvc2Vu w4fDlUVT IOC0quC1i+C0lQ== 4oCc5LiN ID8+Ij48 IFVQQw== IEplbm5lcg== IEJhY2tib25l IGNhbGxvYw== T05HTw== IOCumuCvh+CusOCvjeCuqOCvjeCupA== INiy2YY= IMWbd2ll IGtvdGk= U09VUkNF IGZvdXJuaXQ= 06nQs9Op0L0= ZmFsZW4= bmlk 4Z654Z6A 4oCZYXV0ZXVy IEJheA== 44K544Od44Oz44K144O8 IGVudHNwcmljaHQ= LkVuZ2luZQ== INmE2YTYudmF2YQ= INC+0YY= IGlkZW9sb2dpY2Fs 6L2m6L6G 0YPQvdC4 INCx0YPRgQ== IEFyaWFs INin2YTZhdiu2Ko= b3Nla3M= IOColeCosOCoqA== XSs9 IGhlbGRlcg== IHRvbWF0ZQ== CWVt INGA0LDQudC+0L3QuA== IHN3YWdnZXI= 4K+I4K6o4K+N4K6k IOCknOCkvuCkrw== LkNvbW1pdA== IGNvbnRlbmRlcg== IHNlZ3VyYW1lbnRl IHJvZ3Vl IOCmsOCmuQ== IGFtYmlndW91cw== QXF1w60= 2KfYr9mJ 5oeJ RWxt LmxpdGVyYWw= IEtlYg== bmFkZW4= 4KuH4Kqv IHZlbnRyZQ== IOCql+Cqow== bW9vbg== c3RpbQ== IGVyZsO8bGx0 IOWkqeWkqeS4reW9qeelqOaPkOasvg== 0KLQvtC70YPSmw== 4KS/4KSn4KS+4KSo IGludGVybm9z ZWxmYWx0 Z2VsZWd0 IEVyZG9n b2x2YWJsZQ== IEJ1Zg== RE9XTkxPQUQ= TmVzdA== IGludG94 IHlhcG1haw== INCz0ZbRgdGC0L7RgNGL IHN5bW1ldHJpYw== IDon 4Kao4KeN4Kak4KeN4Kaw4Kaj LnN5bnRoZXRpYw== LtCf IG1vY2g= IOCyreCzh+Cynw== 4Ka/4Kex IGV4cHJlc3NpdmU= fC0= bG5hbWU= ecOo IFNjaHVsZW4= IGJlZ3JpcA== IOCyheCylw== IDw6 IGJpbGRldA== cmVicm8= RGl2aWRl IFByb2R1Y2U= IOCwleCxiuCwqA== IHRhbm8= IHRyYWNlcg== IEJhcmc= 5Y2P6K6u L2Jl 4KWJ4KSw4KWN4KSu RG4= 5Y+D INCg0LXQsw== 0L7QvdCw0Yc= IOC4leC4o+C4p+C4iA== LU1pbg== X2x2 INmF24zYstin2YY= IHZpYWM= IOCwpOCwquCxjeCwqg== bnVuZ3M= UmVhcg== 5L+X aG9mZg== 2YTYp9it2Lg= IEFsaXNvbg== IOC4iOC4seC4h+C4q+C4p+C4seC4lA== IEFjdGluZw== SW5zZXJ0ZWQ= Y29tbWl0dGVl 4LiE4Lij4Lix4Lia INC30LDQutC70Y7Rh9Cw0LXRgtGB0Y8= IHpha29u QUJFVA== L3JlcXVlc3Q= IEFsZmE= 7IKs64qU IEliaXph IG1hY2hv IGt1dG9rYW5h IG5nYWo= IFRhdGU= IHR1bWJscg== IOCqsuCqhw== CU5T UmVnaW9uYWw= 4KSt4KS+4KSw4KSk 5byD IHdlYWtlbmVk IG1lbmVyaW1h 0L7QvNC2 IGFqb3I= INC/0LDQsw== U3BlY2lmaWVk UG9vcg== IHRlZ2Vs 0LrRltC7 Z2FyZQ== IGNhc2hiYWNr 5YeG5aSH eWRybw== c3RlaWdlbg== IFZhY2M= 5oi4 IOCksOCkvuCkt+CljeCkn+CljeCksOCkquCkpOCkvw== IGJla2FubnRlbg== 2YrZhtmI IEJydWlucw== 1bjWgtWj XENsaWVudA== J3VuaXZlcnM= IOGDm+GDneGDpeGDkOGDmuGDkOGDpQ== fHx8fA== SXNzdWVy IMO7bmRlcg== IOCyueCzhuCymuCzjeCymuCzgQ== CUZST00= IFNpdg== X2RpZmZlcmVuY2U= 5Yu/ 4KSq4KWB4KSw4KWA IEthcm1h dWll IGJhbGxvdHM= INOZ0LvQtdGD0LzQtdGC0YLRltC6 V2Fsa2Vy YWll 44GM44GK6YCB cGVrdGU= IGFxdWVsYXM= IOGDm+GDneGDoeGDkOGDruGDmg== 0LDRgNC00YvQvQ== IGtvdWQ= IEF1c2xhbmQ= LlJFQUNU 5Lqa5rSy57u85ZCI RElO CSAgICAgICAgICAgICAgICAgICAgICAg aGV1cw== 0YvQu9C+ IGRhxZ9hcnk= IGJhdGVhdQ== LXN0YWNr CXB1dHM= IGFkaWNpb25hcg== IFJFVklFVw== X3B3ZA== JSIK IOC4luC4meC4mQ== 4YOi4YOd4YOb 4KS54KSw4KWH aGFyYQ== IEZPUk1BVA== IGFpcnk= IHllcmw= IOCmleCmvuCmsg== IGVmZmVjdGl2ZW1lbnQ= IOCmleCni+CmqOCmkw== VVNS IGxhdGluYQ== IOCmqOCmv+CmuQ== IMKl IGphbmVsYQ== X0xBWUVS dGVuaQ== d3ls LXN1Ym1pdA== IOaWsOmXuw== IFNhdW5h IG1hdHVt IFN1cGVydmlz IGFuY2llbm5l aWp6ZQ== CURXT1JE IHlvbmU= aW5lcWFycG9x LndyYXBwZXI= IHByb2NyYXN0 4LmD4LiZ4LiB4Liy4Lij X1Blcg== IGhvcGVu LHN0cm9uZw== IExvcmRz IHLDqWY= IHdlbQ== 64W8 IEFuZGFsdWPDrWE= IFNlbWVzdGVy IOW9qeelnuS6iemcuOWkp+WPkeW/qw== asOkaHJpZ2U= LmNn 2KzYstin2KE= UmVwbGljYXRpb24= LmF2Zw== 1KXRgdKt0LDQt9Cw0LDRgNCw IHRlbGVmb25pc2No IGxvcmVt R1JBUEg= IFJlY3Vyc29z IOKCrC4= INCx0LDRgtCw0YA= IERhaXJ5 IG1lc3Rv IHLhu5luZw== IFR5cGljYWw= ZWluYW5kZXI= IExhY2g= X2V4Y2Vs 6IW+6K6v5YiG5YiG5b2p a2VlcGVycw== IGJhYmFnYW4= IGthbmlsYQ== X21hcmt1cA== LmdyYXk= SGVp IOCmruCmvuCmqOCngeCmuQ== UmVnaXN0ZXJz IEthZ2FtZQ== IGVycm9uZQ== IOCmrOCngeCm bmnFoXQ= yZE= INin2YTYtNmH IFByYWlh IGFhbmRlbGVu INC40LDRhdGM0LA= IFNBVg== IFNjcmF0Y2g= IOCkr+ClgeCkpuCljeCkpw== IHpvbmluZw== 5625 aWthdGlvbnM= IGlhbmFv IFBhc3Rh dmlzdGE= IGN5Y2xpc3Rz b3Zhcw== IGt1cGl0aWE= IG1oZQ== RGVhbHM= IG5ldmU= 0YHQuNC7 IHNsYW1tZWQ= IFJpY2t5 KT8K IOCwqOCwrg== 6rKg64uk IG5qZW0= IHN1ZmljaWVudGVz IGhj LWxvb3A= YXRjaGV3YW4= dmVubw== IHViaXF1aXRvdXM= IGxlYnQ= U0NSSUJF INeQ1rjXoA== IFBvbGVu IHByb2N1cmFuZG8= 5paH56ug5p2l5rqQ IHN0ZWFscw== aW3Fsw== IE1hbGF5YWxhbQ== Iil7 4Lih4Liy4LiV IEF0bGFudA== IHVpZ2E= emls IGZyaW5n IEZBQw== IOCwh+CwlQ== 15XXkdei anVi bmV1 IGRlc2Vy 4Li34LmI4Lit4LiZ INGH06M= INC10YHQtdC/ IOGDneGDqg== INC40YLQvtCz INC10L0= IOmVtw== INm+2LLYtA== IGVkaXRpZQ== IHBsYXRvcw== 0YDQvtCy0LDQvQ== X21ham9y 0LrQuNGP INm+2KfbjNin2YY= INqG2KfZvg== c3BlbmRlcg== IENPT0tJRQ== IuqzoA== INin2ZPZvg== IENWUw== 77yM5oC7 LnN0cnB0aW1l 4Ka/4Ka44KeN4Kal IEFsYnVxdWVycXVl IEpvc2Vm IGR1ZGVz 4YOS4YOQ4YOg 5rW35aSW INeV15M= IGNvbm9zY28= Omc= Y29sYXM= Y29mZmVl IGNvcnJlY3RlbWVudA== IGVzcXVpbmE= Q29ycw== IEJFVFdFRU4= Lmtu IG11bHRpdA== IO2VqOyImA== IHBvc2ljaW9uZXM= IEFsb25l IHRyYWluZWVz IFdpbGxpcw== 44CC54S26ICM YWZy cmFmYQ== X0ZPUkU= IGNvbnRyYXN0ZQ== IGh0dA== 5Y6f5YiZ IENhdXNlcw== a3JpcHNp IGvEsXNh 4YCB4YC8 IOGDm+GDlOGDkw== SXRhbHk= LWFuYWs= INin2LXZiNmE IGJhcmI= IENvbmNlcHRz Lm1pc2M= dW5reQ== IERlY28= X3JlZ3VsYXI= IEdlYnVydHN0YWc= aXBhdA== IEluZmVy 0YXQvtC3 d29tZW4= IHN0ZW4= INeV15bXlA== asO2 X0NVUg== bHV4 5b+n IE5FVFdPUks= IFBha2V0 IOCqteCqv+CqreCqvuCqlw== IHJldmlzacOzbg== CQkJICAgICAgICAgICA= 0LfQsNGG0LjQuA== IEphaW1l IOCmpOCmvuCmuQ== IEFOVA== IGNhbm5vbg== IHJob2k= IEF1c3RyYWxpYW5z INKT0LA= IGluZXQ= IOCkquCkguCkmg== IGNvbmRlbnNlZA== aW5zdXJlZA== PXRlc3Q= IGNhcmVnaXZlcg== IGltZWRpYXRhbWVudGU= IEVtcHJlc2Fz IGZlZWxh INCl0L7RgtGP IHdhcmk= IHBhZ2dhbW90 IGFmdGVybWFya2V0 IExhY2U= IGdlcmVrZW4= ICQkJA== IGlzc3VhbmNl INC60YvRgNCz0YvQtw== LXBheQ== IGzDpGhl IOydtOygnA== 5o6S5bqP 15nXoNeV15o= LwovLw== RmVhdA== 15DWt9eg16E= IG1lbnllYmFia2Fu IERlYm9yYWg= IHVwbGlmdGluZw== IGlyb25pYw== 4oCM2KI= IEp1cw== asO8aw== 2ojYsQ== IENvb3BlcmF0aW9u 4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6T IOCmrOCmvuCmguCmsuCmvuCmpuCnh+CmtuCnh+CmsA== INmI2KfZhNmF2Ko= 2KjZiNi3 IGx1bmdv IGJyaXNr IG5kaW8= IHVzaGVy IEZhbWlsaWE= IOGDkuGDkOGDoOGDlOGDmw== IG11bnNp IEFOQUw= IHRlbG8= IGF0aW5naXI= IGtvcnp5c3Q= IEtub2Nr b2NpYXRpb25z IGplZGlz IGhvbWlj INGB0L7Rjg== QWRtaW5pc3RyYXRpb24= IG1yZQ== IGdsYXplZA== eGltaXR5 Lmdvb2Q= INC00L7QvNC+0LI= aW5pdGlhdGl2ZQ== IFRvcm8= U0VUUw== IFdpbGhlbG0= LU1vZA== IFRyYXk= 7Y+Q IHNlaA== IExlb3A= TEVuYw== INqp2YjZhNuM INin2YTYp9iv IOCksuCljeCkrw== IHRhZ8SnaG9t 2YfZitiy IGt1dHVtaWE= IOyalOyyrQ== 4KS14KWB4KSh IEdY ZXJnZW5jeQ== LnBhbg== Y8Ot 56S+5Lya5Li75LmJ 44O844K/ IMO2cHA= 4Z634Z6A bWludG9u IGluY3JlbWVudHM= X1VURg== IOKAqg== PScn IFN0YXRpb25z IHN0cm9u UU0= IOCmr+CmvuCmmuCnjeCmm+Cnhw== YWN0dWFsaXTDqQ== IGF0dGly IGxpY3o= INW41oLVttWl1oHVpdWs YXLDoA== IGNvbm5hw650 4LCu4LGB INC00LXRgdGP Lk1ldHJv LmNhcGFjaXR5 0LDRgtC10LvRjg== IFJlZWY= b3Blbmlk IOC0heC0n+C1geC0pOC1jeC0pA== INin2YTYr9mI2LE= bHXFvg== IGJ1cmRlbnM= 5qij IG5vd3JhcA== IENIQU5ORUw= IGdlZnJhZ3Q= IGfDoQ== dWlkbw== Z3Vs IGJpcmF6 IEthdHJpbmE= IE11c2V1 VFRZ IHRoaW5rZXJz CXJlc3VsdHM= IGt1bmRp Q05O IHnJmw== 6LKs cHE= IExpZ2h0d2VpZ2h0 IGtva2t1 INC30L7Qu9C+0YI= 4KWn4KWn IHNlY3RldXJz IFVPYmplY3Q= INWw1aHVtdaA LmVuZHBvaW50 INC00LLQvtGA 4LWN4LSj 4KWB4KSi IOOAggoK INC60LjQu9OZ d2F2ZXM= INCU0L7QsdCw0LI= IGltcw== IOGDqOGDlOGDk+GDlOGDkuGDkOGDkw== IGFjdGl2aXNt INin2YbZh9in Q29tcHJlc3NlZA== INCR0YA= INqp24zbkg== IEluZ2dyaXM= bWVh IFRpdGFuaXVt IHJlc2lkdW9z IFNjb3RpYQ== IEVMRU1FTlQ= aXpkZQ== 4LOD4LK3 IEFyYmVpdGdlYmVy INCf0YDQsA== KHNjYW4= dWt1YQ== INio2K3Zitir IHByZWRlZmluZWQ= QVpZ INij2YPYqtmI2KjYsQ== 4LGB4LCV4LGB4LCo4LGN4LCo4LC+4LCw4LGB b2ZmbGluZQ== YXNzYWRvcnM= IFNoYW1wb28= 4LmB4LiX IOCwquCxjeCwsOCwreCxgeCwpOCxjeCwteCwgg== IHRoYW5rZnVsbHk= Y2lvbmU= IHJlY29tZW5kYW1vcw== 6buD6Imy YWN1bGE= z4nOvM6x IGV2aWRlbmNpYQ== IG5pYQ== IEFsY2Fs 1bjVttWr IEJhcmFuZw== 15DWuNeo15g= IGpvb2c= IEV4YW1z IGludGVuc2l2 INeV15zXm9ef IOCwruCxgOCwsOCxgQ== IHBpbmE= IOWNg+empw== IER1cmFibGU= IOGDoeGDkOGDmeGDo+GDl+GDkOGDoA== LiIpOw== 2YHYp9ih2Kk= IHRzd2E= 0JzQsNGC IFNLVQ== IOGDnuGDkOGDoOGDmuGDkOGDm+GDlOGDnOGDog== b2NjdXM= 15bXqNeX IG11bmRhbmU= IHZpbmV5YXJkcw== TkFTQQ== IGVudHN0ZWh0 44CN44GM VGY= IFVOSVg= INGI0LjRgNC6 VklMTEU= xaFraWg= IGVmZWN0aXZh TE4= IFtdKQoK 656N64uI64uk IEludGVsbGVjdHVhbA== dXB1aw== IHp3eQ== IGRhbm9z IG9uY2hhbmdl a8O8bmQ= LnJldmlldw== b3RlY2Fz IEZMT0FU J2luYw== INC40LTQtdGP IOCyqOCyvuCyr+CylQ== 5LmF5LmF5LmF5LmF5LmF w7x5w7xr 77yS77yQ77yR YWNlb3Vz eGllcw== INGB0LDQvdGL INC60L7QvNC/0LXQvQ== IG9mZmVuc2Vz S2Fma2E= 44K144O844OT44K5 b250d2lraw== IEVtZXJzb24= IElwaG9uZQ== c3Rhcno= IOCkuOCkvuCkguCkuOCkpg== 4Ki+4Kih INeU15XXkw== IGFjb25zZQ== IHNwZWNpYWxpc2U= ICctJyw= IGRhdWR6 IOGelOGfkuGemuGe 4Kaa4Ka/4Kak RlJBTUU= LmdyaWR5 INec15PXoteq LkpPcHRpb24= IOCkreClgg== 5Zuz UHJvZHV0b3M= IEtq 56CW X3Blcm1hbGluaw== Ym1w aXBvcA== IGNvdXJ0cm9vbQ== ZGFsYQ== 4LWH4LSV4LWN4LSV INeh16TWvA== INC80L7QtdC5 b25vbWk= IEhlaWRp bWHDn2Vu aWprc3RyYQ== 4YOY4YOs4YOn VGhy IEFydGVt IEJhcmF0 b3JnaGluaQ== bW92aW5n IGJlc2NocmllYmVu INC/0YDQuNC/ fS0kew== IExpZXM= 0YPRjw== TWV0cm8= TWFyZ2lucw== INin2YTYqti52KfZiNmG X2RhbWFnZQ== IGNvbXByZWVuZGVy IG5pZ2JhdGk= INio2YfYr9mB LkNpdHk= W2N1cnI= IENpaWQ= IEVtcG93ZXI= IOydvOu2gA== IOCmhuCmqOCnjeCmpA== IG1ldGljdWxvdXNseQ== aW1vdG8= IHBow6E= IGdyYWZmaXRp KG5vbWJyZQ== YWhhcmE= IOydtOulvA== IERyeWVy IEFwcGxlJ3M= ICcvLi4v IFRva2Vucw== IGltYmFsYW5jZQ== IG1hY2Ft IMO2emVsbGlr IGxhYmFu IG5ld2JpZQ== IGNoaWxsZWQ= IOGDm+GDmOGDo+GDruGDlOGDk+GDkOGDleGDkOGDkw== IHVtbA== INio2KfZhNiv YnJhbmU= IHNjaGVu X3NoYQ== IOCkreCkqOCljeCkpuCkvg== IGVhdGVy X3NlbnRlbmNl PXN0YXR1cw== IMO2bsO8 4KaX4KeB4Kay4KeL IOCorw== IHN0YW5kaW5ncw== YW5vdmE= IHByb2Zlc3NvcmE= KGNoYWlu b3Vt w4dB IGZpemk= IGltcGVhY2htZW50 dWFkYQ== cGFzc2luZw== RWlnaHQ= LkNsdXN0ZXI= IOCktuCksOCljeCkruCkvg== IFdhZ2Vu d2V6 L09iamVjdA== IElNTw== ZW5lcmdpZQ== w61uY2lwZQ== 2YHZitmB 4Z6V4Z6b IGFubGF0 INW81bjWgtW9 INCx0L7Qu9GM0YjQsNGP IEh1c2JhbmQ= IE9yaW9u IERlc2NyaXB0b3I= IFdhdGVycHJvb2Y= IEdldHLDpG4= 0YvRgNC6 Q2h1cmNo CUVYUEVDVA== IGFjdXNhZG8= IGtha3Np qeGDleGDlOGDnA== c2VtZXN0ZXI= INGA0LDRgdC/0YDQtdC00LXQuw== IGRoYXc= IFRlcnJhc3Nl INin2YTYo9i5 Lm1pcG1hcA== CVdyaXRl LmJ1eQ== X3RyYWNrZXI= IHJvbGV4 IHJlY2lwcm8= 2YjYp9ix2Yc= IOGDnOGDlOGDkeGDmOGDoeGDmw== 4K6+4K6y4K+B4K6u4K+N 7Y+8 IHJlbGF0aWVm IHNjaHdpZXJpZw== Z3J1 IE51ZGU= d2FydHo= IGJvcnI= IGFmZm9yZGFiaWxpdHk= 1ZQ= 15nXoNed IG9wZXJhcg== IGx0ZA== 6KiC X0NMSUNL xaFsYQ== IFBlYWNo IGRoZXdla2U= IENhbGxl Y2t5 LnNlY29uZHM= 4Ka+4Kaw4Ka/ InVybA== 4LK+4LKo4LOG 4Kqo4Kqu4Kq+4KqC e1wi IOCkluClgeCktg== IOWkp+WPkeW/q+S4ieaciQ== S1k= IG5hdm4= LmJhY2tlbmRz IHRhY29z w6VlbmRl IGJlZGllbmVu bWlsbGlvbg== IOWi Y3ljbGVk IHBhdGhvZ2Vucw== Z2F6 INCy0YDQtdC80LXQvdC10Lw= IGFsbG90 IHN1ZmZpc2FtbWVudA== S0VS eWVsZQ== IGdyYWNlZnVs IHNsZXc= IHRp4buHbg== INit2YLbjNmC2Ko= IGR3YXJm 0LzRi9C9 UHVtcA== IHBvcHVsYWly IFBhdHJpb3Q= RklU INGW0L3Rgg== LWVudGVy QVBQWQ== 4LS54LS/4LSa4LWN4LSa4LWB INin2YTZhdiz2Yo= cXVldWVz IOCkmuCksuClhw== IHRyaWFuZ3VsYXI= bW91c2Vkb3du IOCkl+CkvuCkrw== IGFtw6lu X1JFTU9WRQ== Z2VtYWFrdA== IGh5cG5vdA== LW1m L3N1cHBvcnQ= 4KqC4KqX4KuN4Kqw4KuH4Kq4 UGVudA== 4LSx4LWN IG11ZmZpbnM= INC90LDQt9Cy IHNjaG5lbGxl IOGDm+GDmOGDluGDlOGDlg== IEhvbm9sdWx1 44CRLuOAkA== IExlaWRlbg== IOCmrOCmueCngQ== X3NoZWxs IGltcG9ydGVy IFJpYmJvbg== IGNoaWVucw== YmVyYXBh IGJlc2NoZXJtZW4= INC/0YDQvtGB0YLQvtC5 INCj0LvQsNGA IGV4cG8= IG5hbW1pbmVx IHRlcnRlbnR1 IHJlcHJlaA== IOCmrOCnjeCmr+CmrOCmuA== INmI2KrYsQ== IG5pdGk= YW56aWJhcg== 4Z+S4Z6Y4Z64 IHNpZ25pZmljYXRpdmE= d3VyZg== INC/0Lg= 44Kk44OJ 4LWG4LSf4LWB4LSV4LWN4LSV QU1QTEVT IGFsdWc= IGfDtnJldg== YXVwdW4= INin2YTZhdin2K/YqQ== IMWfYWg= IGN1bHR1cmFz IGZsYWdnZWQ= CXJlc2V0 4KaZ4KeN4KaX4Kay dWdx IGZ3cml0ZQ== INCf0YDQvtC0 4KS44KWN4KSl4KS+4KSo IHN1cHBsZW1lbnRhcnk= YWN6eQ== J8OpdMOp LnBrbA== d2VyYmVu IGJlcmRp LmRldGFjaA== IELDoXM= bHlzaXM= IGluc3RlbGxpbmdlbg== ZXhwbG9kZQ== 4Lir4LiZ4Lix4LiH Q0nDk04= IFlpbg== IHZlcmRhZGVy LmlzZGly ZWxpdmVyeQ== 5rGf5Y6/ IGt1ZnVuZWth IEd1dHNjaGU= 5Z2q IGVpZ2E= INC40LY= IG1hbmlmZXN0YQ== IGFybWVz IEJlcmVpdHM= IFBoaWxseQ== IGxhc3RseQ== KGNyZWF0ZWQ= LnBvbGljeQ== IHF1YWxpdMOpcw== INGD0qM= Onk= IElMb2dnZXI= aWxsaXNlY29uZHM= 4Keo4Keq IELhu5k= INC60LDQutC40Lw= dGVkeQ== IOCkquCkueCkmuCkvuCkqA== LUFmcmlrYQ== IERvcm90aHk= IGdlw7ZmZm5ldA== IHPDpG10 IGJ1c3RsaW5n 4KqV4KuL4Kqf IGhvdGVsZXM= IOCyquCzjeCysOCytQ== bWVuaQ== IGZhdGg= IENvbGxhYm9yYXRpb24= 4Lif4LmI4Liy IHdpaw== INmG2YHYs9mH2Kc= IGNhcHRpdmU= IGFsdGVyYXRpb24= J29iamV0 IGNvdWdhcg== IFp1aGF1c2U= INeg15M= INGA0LXRgdGD0YDRgQ== IGNvYnI= R2F5 IGthZmth IFdhcnQ= IGluc2NyacOnw7Vlcw== KSYmKA== LdGB0LvRg9C2 2YjYp9mH IG1pY3JvYmlhbA== IGR1Z28= IE1vb2Q= IGFic29sdXV0 0J3Rgw== 27HbsA== IE51ZXN0cmE= IE5lZWRsZXNz IElubm92YXRpdmU= UFJPUEVSVFk= LnN0eWxlcw== Y29uZmlncw== a2FuaWE= IGF2aW9u IGp1Ymls X0NPTVBMRVRF 16nXkNa3 cGlsbA== IOCkieCkpuCljeCkpg== IEJhY2NhcmF0 IOCymuCzgeCyqA== IHl1aw== IFNpbmg= 4LC+4LCf4LGB 0L7Qu9GD IGVuZW8= IGJocg== YW1ha3VydQ== IEzDvA== YWx1cw== zrnPg861 ZXJtZWs= IOC4lOC4suC4p+C4meC5jOC5guC4q+C4peC4lA== INmF2LnYr9mG Z3VuYXM= aW1pemlu TGV4ZXI= IG11YWc= IGFuZ2VnZWJlbg== b2Nlcw== IOC0heC0teC0uOC0vuC0qA== IHN5bm9ueW1z INCg05nRgdOZ0Lk= IFJvdXNzZQ== rOGDm+GDo+GDnA== INGB0L3QuNC2 IFRob21zb24= IHByaXBy IHVub3I= IENvY2t0YWls IGLDqXRvbg== 4Kaw4Ka+4Ka4 IG1lZGV3ZXJrZXI= IFp1bA== 0LXRhNC40YA= 2ac= IOCqleCqsOCqtuCrhw== zrzOsc65 INGH0LDRgdGD YXNzZW1ibGVy IGLJmQ== IOeKtg== IC8vIw== IHByaW5jw61waW9z 4LSk4LSu IGthdG8= IHRyb3Zh IEhlcmNlZ292 IGpzcGI= UmVhZGVycw== IHR1c2E= 4KuH4KqX INin2YTYr9ix2KfYs9ip IGNvbGVnaW8= INC/0YDQvtGB0LzQvtGC IE1pbWU= INGD0L/QsNC60L7Qsg== INqp2LHYsw== IHN0asOzcm4= IGhyw6E= 0YDTr9C3 IEdyYWlu KDs= IOCmqOCmv+CmsOCnjeCmrg== IGFzdG91bmRpbmc= IFB1bXBraW4= c3VwcA== WEk= IENHSQ== IGRlc2Nvbmhl INi52KfYr9ip ID8+Pgo= IFNwYWNlcg== LkNyeXB0 IHVzaW5l IEFic29s IEdlc2Ft IEFycmFuZ2VtZW50 aXZhbGk= IG5qaXJh IGnDp2Vy IHByb2pl LWts aWxsdXNpb24= w610b3R0 LUFkcmVzc2U= KGJn 5Yy5 IOCwteCwvuCwsOCwvw== IGFjdXB1bmN0dXJl IOCkj+CkieCkn+Ckvg== VnI= IHRvZXZvZWdlbg== IHRyYXZlbGxlcg== IG1vbmVkYQ== 44K344Ol IHbFrw== IOmCow== zrrOv867zr/PhQ== IOGDoeGDkOGDoeGDkOGDm+GDkOGDoOGDl+GDmg== INin2YTYs9in2KjZgtip INC60LDRgNGC0L4= 5bCR5amm KG1t 2LDZhg== IOyjvOyalA== YWxsZWU= IHNldmVudHk= IG91dHdl 6Imy6Imy SG9zdG5hbWU= 15bXqNeU R2Fu LtCQ IMW+ZW5h IGFjaWRpYw== OndoaXRl CQkJCQkJCQkJCQkJCQkJCQkJ IOCyuOCyrQ== YWd1bg== IFRMQw== IMO+ZXNzaQ== Q3Jvdw== IOGAluGAvA== IGluZGxlbGE= X0FSRUE= 4Lia4Li04LiZ UGVn T2JyaWc= INCT0LXRgA== IGFydMSxaw== IOCkleCkruCljeCkquCkqOClgA== INGG0LXRgA== 2LrZitmK2LE= IGdpZ2FudGU= IER1bm4= IGRhcmF1cw== KSkKLy8= IGdhdGVu T3JiaXQ= IFNlbmRpbmc= aWdhw6fDtWVz IGNsYXNpZmljYWNpw7Nu IGxlaWNodGVy ZW1wdWFu LXNldHRpbmc= IHNhcmViYmU= IGxhc2Np 44GV44KJ IG1vbm9wb2x5 IGZyYcOuY2hl LnVzZXJtb2RlbA== IOCwteCwmuCxjeCwmuCwv+CwqA== 4Kq/4KqV4KuN4Kq3 J29yZHJl IHRlY2xhZG8= IEZ1c2U= YWtvYQ== 2ZHZkA== INGP0LrQsA== IHB1bnlh aWxlZ2Vk IGxo IOCkheCkqOClgeCkruCkpOCkvw== PkFkZA== JUAiLA== IEdlc3Rpw7Nu IEZpdHpnZXJhbGQ= 0LvQsNGA0LTRi9Kj INC40L3Qsw== IOCmruCmvuCmsg== 44Kk44Ok IFB1Ymxpa3Vt cHJvYmxlbWVu IMOpdGljYQ== dXNpeWE= IER1bmdlb24= ZmFucw== IHJlYXM= ZXhwaXJl 0L3QvtCy0LjQtA== IGRlY29tcG9zaXRpb24= IHRhbWls IMO+YW5uaWc= IG/Kuw== QW50ZQ== IOydtOugh+qyjA== IEFsbGVyZw== dmFo IGl5YWRvbw== IERlc3Nh IE1vdHRv w6RyYXN0 Q2FyYWN0ZXLDrXN0aWNhcw== IHRlc3RpZnk= IEZMQUdT VUlBbGVydA== IOCoueCpgQ== IHRocmVhZGVk aXNpb25hbA== zrvOuc66zqw= IOCyquCziuCysuCzgOCyuOCysOCzgQ== IFNlYXJjaGluZw== IOCkuOCljeCkteCkr+Ckgg== IEZhbGs= IGFzc3VudG9z 6LSi5a+M IGFhbm4= bcOpbg== 4KWI4KSy4KWH INin2YTZkg== INC/0L7QstGW0LTQvtC8 ZGlldA== INeS16LXqdeo15nXkdef ZWRpdGluZw== J2FtYg== INGB0YLRgNCw0L3QuNGG0LU= UmVjb3Zlcg== LnNheQ== LVllYXI= Q2FzdGxl IEVGRkVDVA== IHBlbmdndW5h IERpc29yZGVycw== YWRoYQ== IGJpbmc= IEVTTA== amVuaWg= INCw0LvRi9C9 X1NlbGVjdA== LlhuYQ== emVwcGVsaW4= emhha3U= IEtuaWZl cGFydGljaXBhbnQ= IHZlcmthdWZ0 aXNtZW4= 44O844K6 IOCqnOCrjeCqr+CqvuCqgg== X2RlcA== IHViZXI= Lmxpbmtz a3fhu6U= INCQ0YXQsA== IEdlbmVyYXRlcw== IGJyaWdodGx5 IHBlcmZlaXRh IGV4dHJhcA== IEVkaXRvcnM= IGtydmk= IGrFsw== YWthbmE= INC/0L7Qu9GD0YfQsNC10YLRgdGP IGRlc2xvYw== IEbDuHJveQ== zrzOsc+Dz4TOtQ== Vm95 4oCZb3V2ZXJ0dXJl IOuCnA== RG9udA== IGFsbGllZA== TWVkaWNpbmU= TGFhdA== IOCypuCzig== LmF0b21pYw== 4oCZw6lt RE9D IGzDrWth KHVzdWFyaW8= IHRyYW5zY2VuZA== d2VzZW4= 5aSn5aWW5b2p56Wo56uZ 44GX44Gm44GE44G+44GZ IHJlc3RyYWludA== IEd1c3Rhdm8= X2JldHdlZW4= YXB1cw== ICJALw== IHJlcHV0ZWQ= PXRlbXA= TsSB 4KqV4Kq+4Kq2 INmB24zYtdmE24E= INio2K/Yo9iq INit2LHaqdiq ZW50ZXNxdWU= INWk1oDVodW0 aXpvcw== bGVuZWNr ZXRpbmU= X18uX18= INGB0LzQtdGA0YLQuA== SWxsdXN0cg== LnZpcA== IHVuY29udmVudGlvbmFs IHViYW4= U2VtYW50aWM= 5rKz5YyX IGPDqWzDqWJy IGtlZQ== 0LDQu9Cw0YU= IGlvZA== 2KfYstiq 4LSk4LWN4LSk4LS/4LSy4LS+4LSj4LWN dW1pbGx1 Y2luZQ== IFVudGVycmljaHQ= IEJ1cmxpbmd0b24= IkknbQ== LlN1bQ== IOCqquCrjeCqsOCrh+Cqrg== wqHCoQ== IOCuheCuteCusOCvjeCuleCus+CvjQ== IENvbXBhbnkncw== IHByb2Nlc3Nlbg== INW+1aHWgA== X2VtcGxveWVl X0NE YXRzYXBw IMOkdcOfZXI= 0LDRgdGG0ZY= dmVoaWNsZXM= IEJhaW4= IHJpdmFscnk= 15fXqdeR IEZsaW50 IHZlbm4= IGhhdm9j b2puw6s= LXdlYnBhY2s= 0YLQtdC5 IG5vag== YWt0YW4= KGR4 IOC5gOC4lOC4t+C4reC4mQ== aXF1YW50 INC/0L7Qu9Cw KGxvY2s= 4oCZaW50w6lncg== INiq2K7Ytdi1 INC80LDRitC70YPQvA== IERldmVsb3BlZA== X1ZFQ1RPUg== IGRpc3NvbHZl IGNvbmR1Y3Rpdml0eQ== IGNvbnNlcXVhdHVy 5aix5LmQ5oC75Luj55CG 5b2p56Wo6L2v5Lu2 INil2YE= IG5veg== ZWto IGd3YXNhbmE= KFVuaXQ= INGA0LXRgdGC IFJlZnJpZ2VyYXRvcg== IHplbGVu INi12KfZhNit IExlc2Vu dXRlcWFydA== IGxhaWvEgQ== IHTDs3A= INin2YTYrNmI2K/YqQ== IG5hbWk= IGJhcmVz IGxhdWQ= IGNo4buNcuG7jQ== ICAgICAgIAoK zrzOrc69zr/PhQ== 4YOQ4YOc4YOb Y2Vp L2F2YXRhcg== 15XXmdeZ LGNvbHVtbg== xJlz IGxvbmd1ZXM= cm9sbGVu IHNlcnZpbmdz LWNsb3Vk INeR15PXmQ== 4oCZZW5mYW50 4YOY4YOi4YOQ4YOc IGNvbnRlw7pkb3M= 5rmW5Y2X IFBpcmF0ZQ== KHByaXY= w6l0aXF1ZXM= IGVuY2hhbnRpbmc= 0LDQu9C10LjRgg== IGF0cm9j INC70YPRh9GI0LjQtQ== INiv2YHYqtix IGlycmVzaXN0aWJsZQ== IGRlc2lzdA== 0LHQuNGP 4LiZ4Liy4LiU IGFsaXF1YW0= 642k IGzDrW1pdGVz c21vdXRo X0FNT1VOVA== INin2YTYtdmE2KfYqQ== IOCqj+CqteCrgeCqgg== amVyw6s= 4LSj4LS/ IFRyYWRlbWFyaw== W2Rm bGFmZW4= 55+l5LmO CUpPcHRpb24= 4oCN4LS5 YWJyZQ== IGZhZg== 0YLRi9GA0YM= ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= OlM= aWN1bGFyZXM= IGdlZsO8aHJ0 IE1pa2E= LeCmrA== IOCyjuCyqOCzjeCyqA== OlA= zrzOr86x IGJhc2Fs IHNoYXA= IGJhbmdv IHRlcnJpdMOzcmlv cG9saXRpaw== PkI= IG5nZW0= IE1lc3NhZ2luZw== RW5jb3VudGVy QXNzb2NpYXRl IGxvZ3JhZG8= IGluZm9ybWVz IFB1ZWJsbw== YXBwZWFyYW5jZQ== INGN0LrQvtC70L7Qsw== IFdyaXRlcw== IEdlaXN0 LlVSSQ== IE1hc2NoaW5lbg== IHJlZ3JldHM= IHRvYg== J10uIjwv IGZyZWFraW5n IE93ZW5z X1BST0dSRVNT IOCqruCrgOCqoQ== 5rex5YWl dmVq IOG7i2No IOGDleGDmOGDpw== IOaWh+S7tg== 5L2c5byK5Zmo IGlsbHVzdHJhdG9y IHlzdG9k SUdB 4LK/4LKv4LK+ IFRlbXBlcmF0dXI= INuB2KfYqtq+ bmVzdGVk 4Ka+4Ka24Ka/ IGJyaWQ= XENvbmZpZw== INGB0LjQvw== aW5hbWU= IGNhcmJvbmF0ZQ== INiq2KzYsdio2Yc= CW1vY2s= IOq4sOqwhA== IEdyw7xuZGVu 44g= Tm92bw== TmV2ZXJ0aGVsZXNz 4pa9 xI1pbmE= IHVhaXI= IENvcnB1cw== YW5nZXJzY2hhZnQ= IEVMRUNU IHN0cnM= INK706nQutKv0LzQuNGC0LjQvdC40qM= IGNvbXBhcmVy INGC05nQutC40YI= 2bs= IGxpbmVhZ2U= TWVtY3B5 INGA0LDRiA== LWJpbmRpbmc= X0Zyb20= INCw0LvQsNC00Ys= INmF2YbYp9mB TUVO S2VsbHk= IOC0teC1gOC0oeC0v+C0r+C1iw== X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f KEFMT0FE IOGDlOGDoOGDneGDleGDnOGDo+GDmuGDmA== IGRlZW4= IFdlcm5lcg== IGFsdGVybmF0aW5n J29yZ2Fu INmC2LPZhdiq IG1iYWxp IHpvbWFhcg== Ilc= w7NpcsOt IEdyaW5k bWFuZHU= LWRpc3RhbmNl INmF2KzZhdmI2LnZhw== INGF0LDQvNCz0LjQudC9 IFNjYW5kaW5hdg== 4YCF4YCs4YC4 IGJhcmdhaW5pbmc= IGZhbW91c2x5 4Kq44KuN4Kqk4KuB Ymxhc2Vu 4LCf4LGN4LCf4LC/ 0YrQuA== QUFBQUFBQUE= IGhvcHA= IEVqZWN1dGl2bw== LXBvc2l0aXZl X3F1YW50 IGphZm4= IOCkrOCkouClgA== IG9mcmVjZW1vcw== IGTDqg== IOGDpOGDlOGDruGDkeGDo+GDoOGDlw== 4LOL4LKm 44CB5LiN PWN1dA== ZXByb20= IEJFRU4= ItCQ INCh0LXQstC10YA= RW5yb2xsbWVudA== IM60zrnOtQ== 5Yib5Lia 5b2p56Wo572R5Z2A SW5zZXI= DQoNCi8v INCy0LDQsw== 4LmI4Lit4Lii IFN0ZXJuZQ== IM6xzrrPjM68zrE= IHZlam8= b3N1 IOCqj+CqteCqvg== IGR5bmFzdHk= INC/0YDQsNCy0LTQsA== INWh1b7VodaA1b8= IE1lYW5z ZW5pdQ== IGVpbnplbG5l IGFtdXM= INi52Kw= IGVtYmFzc3k= YWxpdA== IEpL IGpvcm5hbGlzdGE= dGV2YQ== INC+0LHRgNCw0LfQvtCy0LDRgtC10LvRjA== INmF2LTYqtix LXByb2R1Y3Rpb24= IOCqmOCqo+CrgA== IExlZGVy IGxpbWl0bGVzcw== IGNvdW5zZWxvcnM= TWluaXN0ZXI= IOyF IElucXVpcnk= 1aHVvdWr1oA= INC/0YDQuNCy0LvQtdGH W+KApl0= U0VMRg== IOafpeivog== CWRldmljZQ== IGVzdGFyw6Fu IHJlY2Vuc2lvbg== INC80LXRgtCw0LvQu9C40YfQtdGB IGtpZGQ= RmxleGlibGU= IFRyaWJl IHNpc8OkbHQ= RGlhZw== X292ZXJyaWRl 4KSw4KWN4KSt INmF2YfZhdip X1JlbW92ZQ== IHByb3BhZ2F0ZQ== IOCkquCljeCksOCkpOCkv+CkrA== IENvbnNvcnRpdW0= IOCysOCyguCypuCzgQ== ZW5iZXJn IE5leA== IEhJUA== IG1vcnRv IGhvbnVt IHJlbGlj INmF24zZhNuM2YjZhg== 4LSj4LWN4LSh IHNldHRsZXJz zrXOr8+EzrHOuQ== 4KSV4KSw4KWN4KSk4KS+ IHBpY28= INmE2YXYuQ== IOCkquCksOCkv+Ckmg== IGFiYWY= IGV4ZXJjaXNlZA== IHN3YXBwZWQ= 0KbQtdC90LA= w6Vk am9yZA== IGhlbmc= IMOpdGFnZQ== IHB1cmlmaWNhdGlvbg== 2YXZitiy2Kk= bGFyxLFtxLF6 INGE0L7RgtC+0LPRgNCw0YTQuNC4 YXNpYW4= INGB0LDRgtGL0L8= IOGDk+GDmA== IG1pbGl0YW50 IHfhu41ueWk= 64qU64uk 24zbkg== IMSNaW4= IGdhdG9z IHN0YW5kYnk= 0LvQuNC00Lg= 0YvRgdC6 THM= IHR1cmJ1bGVudA== IHps IERlbnRpc3RyeQ== IHNob3djYXNlZA== aGVrYQ== IOCokA== IGV4aGliaXRpbmc= INC30Ls= KElQ IOCwpOCxhuCwsuCwguCwl+CwvuCwow== 2KjYrdiq IHZ1b3R0YQ== Lk1hcHBlcg== 4Li04Lia esOz IHBhcGVyYmFjaw== IHh3bQ== IHByb3Bo IExlaHJlcg== IOCkq+CliOCkuOCksuCkvg== IEVya2VubnQ= w6FudQ== INeQ15nXmdeg16LXqA== IOycoOyngA== UENT dWFpcmU= INCV0YA= IGt1dGg= 6ZmQ5a6a IEFwZXg= SW5zdGl0dXRpb24= INW41azVuNaA1b8= Q1RT IGFsYWs= IHRyw6A= IGt5YQ== IOCyueCysA== 15nXm9ei16g= bGViaWg= 0LDQs9GA0YPQtw== IGRldmVtb3M= IGluc3VmZg== 0L7QvdC00L7QuQ== 4LS/4LSV4LSz4LWG VWtyYWluZQ== IOCmreCmv+CmoQ== KGJhY2tncm91bmQ= IFplbGRh JlM= cHJldXZl IHllbGxlZA== b2xsYWg= dGFibGE= IGt1cnplbg== esSFdA== IM66zqzPhM65 IHBlcnNvb25z IHdhdGNoZG9n INm+2YjYsduQ IGR0w60= IGFpcnQ= X2xvZ2dlZA== 4LmA4LiU4Li14Lii4Lin VmM= IGNoZWlh IGxpbmdrdW5nYW4= dHJpY28= IOCqrOCrgOCqnOCrgA== YWphYW4= INix2KfYrdiq RkZJWA== INeo15HXldeq IG51b3Zp 0YvRgNGF IG1lYW5pbmdsZXNz IGZ1bmdp IHlhdMSxcsSxbQ== INiy2Kc= IEFDQ09VTlQ= IOGDmOGDog== 2YLZhNmK2YU= 15nXp9eZ150= IGFhbmdlcGFzdA== IOCksuCkl+CkvuCkr+Ckvg== VGF5bG9y INGB0L7QttCw0LvQtdC90LjRjg== INin2YTZhtin2LE= IHllbnll X2FzY2lp IENob3I= IO2BtOuemA== INW41oLVttWl1bbVodWs IEpVTA== Lm5hbm8= KGlucw== IGNhcsOhdGVy INCw0YDQsw== IGtpZG5hcHBlZA== INC+0LTQuNC90LA= cmVjdGFuZ2xl INGP0LfRi9C60LA= CWd0aw== IM+Azrk= dWdubw== 4KS+4KSn4KWN4KSv4KSV4KWN4KS3 IHN0YXJrZW4= VHJlYXQ= 4Kq+4Kqn IHJlbmRl IENvYXQ= IGRlY2xhcmFjaW9uZXM= IGxhc2U= 2K/amQ== INWv1bY= IOGDruGDneGDmw== L29iamVjdA== INmE2qnZhw== IGltcGVuZGluZw== 4YCY4YCs RGVidA== 2YbYudip INCx0YPQutCy ZsO4bA== 4LmA4Liq4Li14Lii IFBlYw== IEVya3Jhbms= IGVzY2FwYXI= SW5qZWN0ZWQ= 2LPbjNmI2YY= IE1hcmdhcg== IHBlcnNlY3V0aW9u IEZ1bm5lbA== 4Ki+4Kiq IHVtZmFzc3Q= IOWMl+S6rOi1m+i9puWlsw== RVBST00= IE5hdGg= SGVsZA== 5LyR5pel LmNlcnQ= IGRlc2Vudm9sdmlkbw== IHpvbnNl IFBvaXM= IGFwcHJvZm9uZA== IOGDl+GDlOGDmw== IG90YQ== IG90aA== IOGDm+GDkOGDpuGDkOGDmuGDmA== INW/1aHVrw== IFBhbG8= YXNldA== IGtvbmNlbnRy IGV4ZXJjw61jaW9z Y2Vl 4KeH4Kam4KeH4Kaw 4LK44LOB Y3LDqQ== IGJlZWs= IFJwYw== 4KSv4KWC IOCksuClh+Cksg== DQ0NCg== PXN0YXJ0 aWZhdA== U0hPVA== IHdpcmtlbg== IHdlaXRlcmVy IFJhamFzdGhhbg== LXJvdXRpbmc= X2dyYXk= IHRlcmFraGly IGh1bWFuaWRhZA== 0LXQvdC9 UGxheWFibGU= b3R0YWE= PnhwYXRo Rk9STUFOQ0U= IHNlbnRpbWVudG9z 2KjZitio IHNwYW5pc2g= IHN1YnBv IGltcGVyZmVjdA== 4LS/4LSf4LWN4LSf4LWN IGFyYm9y 0YvSm9OZ0YHQsA== INGA05nRgQ== L3JlbGVhc2Vz 5ZCv5Yqo IGF6dXJl 4KSq4KWN4KSq IHNlYXJjaGFibGU= 2KfYr9mF2Kk= IGlycml0YXRpbmc= 0LvTmdKv IGVsYWJvcmFjacOzbg== X1BvcnQ= IEdvZWQ= YmV0cmllYg== IHNlc3VhdHU= R2FyeQ== 2LHYp9uB KX0+ 1oDVpdaB d29obnVuZw== yrtpZ2E= 44O844OG IOWujA== IFRhdXJ1cw== INC/0L7Qu9GW 44Ki44Kv44K744K5 IEZBQg== IGluZGVmaW5pdGVseQ== ZW5kb3Vz 5a6M5ZaE 4Lin4LiI YWd1bA== IEZvdW50YWlu IGJlaG9vcmxpams= IHJlY29uaGVjaW1lbnRv IGNlbnRhaW5lcw== IENocm9taXVt TlNU IENsYXNzZQ== IM66z40= IOCyleCyvuCyow== IOCkleCkv+CksuCliw== INC10LLRgNC+ IGFja25vd2xlZGdpbmc= IGNhcGU= emVkYQ== RG9s IG1lbnVuanVra2Fu IOuJtOyKpA== IGNvbXBsZXhpdGllcw== INee15HXlw== 1bjWgtWm aWxnZQ== b3VyZXVzZQ== IHBvdGVzdA== cGhv cmV0Y2hlZA== IOCktuClgOCksOCljeCktw== IGdpc3RlcmVu ZnJleQ== aW1heA== IHhu IENhc3RpbGxh INmE2YTYp9iz2Ko= IERhbmllbGxl IHBlbnNpb2Vu IGFpa2Fh CWdi IGFub255bW91c2x5 IOyeiOycvA== b2Z5 INCY0YA= dXRhZ2U= QmV0aA== INmG2YjYtA== 5oyH5pWw 56Wl5LqR IHDDpGV2YQ== 4KWN4KSw4KS/4KSv IFJlcGFy IEhUVFBT IEJldGVpbGln X0NPTlRBSU5FUg== IOCmquCmsOCmv+Cmtw== IDwkPg== YXJuZXJt IGlsbHVtaW5hdGVk IG1leWQ= IOCqquCqsOCqv+CqteCqvuCqsA== xI1lbmph IG1iaQ== IE1hY2F1 LmZhc3Rqc29u LC8= IGZvcnph RG9k IOCknOCkvuCkr+Clhw== 1arVtA== IHJldW5pcg== IGNyaWFkYQ== IHNoaW5nbGVz IHdhdw== b2JpYW4= IHByZWNpc2Ftb3M= IHNhYmk= IMWfw7Y= IFBBUlRZ RExM IGF0dGFjaGluZw== IG1pa2nDsA== LnRibA== IHRyYWJhbGhhbmRv INC70Ys= INWo1bbVrw== IFRow6k= cXRpcw== IHVwdG8= IFNlYmFzdGk= 44Km44OI YW1tYW4= INin2YTYrdmF Rk9MTE9X zr/OtM6/ dGVybmF0aW9uYWw= X3Nx IG3DtmdsaWNoZW4= INCd0LDQuQ== 16bXmdeS LWxpbmVhcg== 6JCd 4YOg4YOU4YOR4YOh aGxhcw== IGTDqWNpc2lvbnM= IG1vbWJh TlNFcnJvcg== INOY0Lw= IOCqsuCrh+Cqlg== IGNvbmdyYXR1bGF0aW9ucw== d29kcmFldGg= IERpbG1h IOCkuOCkv+CkpuCljeCkpw== X1dFQg== IFdlacOf w7N0aWNh IGNvbnN0YW50ZXM= IGVpZ2VuZXM= IFBvZQ== 0LjRgNC+0LLQsNC70Lg= 2KfbjNi5 IGdyw6FmaWNvcw== X2F2YXRhcg== IHJvbmc= IFN1b20= IEVudGg= INGB0YLQvtC5 RG9jaA== RmFs U2FsdXQ= IFBSRVNT IER5bmFzdHk= IEhJRA== IFNlZGFu IGFrdGlpdg== IHBvdnLFoQ== LnN5bQ== IOymiQ== 5pyA5aW9 YXJhc8Sx IFRodXJz 5b+F6KaB IOS7uw== IOCkheCkquCksOCkvuCkpw== IGhpbmU= IG5la28= INOZ0YHQtdGA 5o+t56eY IHRyYW5zbHVj IEluZmxhdGU= 0J7QtA== IGhpZHJv IOCkleCli+CksOCljeCknw== 0JDQvNC10YA= 77y/77y/ LUFt IGxpbWl0YWRv IEF1ZmJhdQ== aGVyYQ== VkJveA== 2LrYp9mF INC/0L7QtNC00LXRgNC20LrQuA== INep15HXlQ== INCx0YDQsNGC0Yw= IOCwleCwvw== INin2YTZgtix2KfYsQ== 4KSV4KWN4KS44KSw IHdlbGNoZW0= IGVheA== ICcnOgo= IG1pbnV0dGVy IGhlcmhhbmdp IEJydXN0 IE5hdGlvbmFscw== 0JrQvtGA Y29uaQ== IGVjY2xlcw== QW5p IOCmqOCmv+CmueCmpA== 0LPQsNC8 b3RzZQ== 4LWG4LSf4LWB4LSk4LWN4LSk4LWB XSkpLg== LmludGVncmF0aW9u INeY15XXkdeU 4oCZdXRpbGlzZXI= aXpyYQ== IGRlZm9ybWF0aW9u 0YDQsNGB0YLRgNGD0LrRgg== 4Kq+4Kqw4KuN4KqX IOCwhuCwpg== cmF6aW9uZQ== IHN0YWJpbGl6ZQ== IHRpbGxiYWth LWluaXQ= IE3DoWxhZ2E= aWZhcg== INC/0YDQvtGG0LXQtNGD0YDRiw== IHN0YXR1c2Vz IGtvbXBs IHBhcnRpZGFz IEZyaWVuZHNoaXA= IHBhdHJvY2lu IHN0cm9t X0J1ZmZlcg== 0YPRgdGL0LvQsNGA IG1hcmtpZXJlbg== IFVOQw== W2VuZA== IGJhbnR1 X1NMT1Q= ZW1iYXI= 4LS+4LW+ 4Kas4Ka/4Kam4KeN4Kav4Ka+4Kay INCi0L7Qs9C00LA= ZWNvbm9t IEZTdGFy LmRqYW5n ZXN0cmE= INCi0LXQuw== IOuNlOyasQ== IEFuZnJhZ2U= IEJQQQ== IHJldHJhY3Q= YWZk IGVlbQ== IOCkr+CkvuCkpuCktQ== IGFycw== INC/0LDRng== IGppZXI= IGNpZQ== b21u INin2LnYuNmF IHZhbmRhbA== CXJlcXVpcmVk IGt1a2hhbGE= IHByaW9yaQ== IFF1YW4= IGdlbsO8 IHZpYWdlbnM= INCx0LDQudCz0YPRg9C7 IGVyYWs= IM60zrnOsc60zrnOug== 4LKX4LKz4LK/4LKC4LKm 157Xpw== IHZ1ZWxv KHNvbmc= 05nRiNOZ VGFwcGVk 5q+b54mH5YWN6LS56KeG6aKR6KeC55yL ZsOzbA== IHdvcnRobGVzcw== IHJ1bw== dHJhaXRz IHBvcnR1Z3Vlc2E= U3BlbmQ= dWplbW8= IOS8ig== IGZyaWVuZCdz INeQ1rjXpNa8 4KSu4KWN TEVURUQ= IFbDqQ== U1RSRUFN INCh0YDQtdC0 IOygleuztOulvA== INee16nXl9en 0LDQstCw0L3QvdGP IHNwb3J0eQ== INmG2LI= IEV4cGVydGlzZQ== X2FsbG93 IGdyYXNzcm9vdHM= IOCkruCkv+CksuCkqOClhw== IGxvc3Npcw== YWplbQ== b2JlbA== IGhydmF0cw== LlBl IHZlcmRlcmU= IGJyaWdodGVzdA== INC20ZY= gOydtA== IOCmrOCnh+CmsA== INmI2YrYsw== VG9tb3Jyb3c= IEF1ZGlibGU= IOCmrOCmvuCmoeCmvA== IHVrbGp1xI0= IGxlbm4= LkVWRU5U aWJyYWx0YXI= aXNpbA== INis2KfYptuM2ro= IGZvcmJpbmRlbHNl ybU= INGC05nRiNC60Lg= INC/0YDQvtC40LfQstC+0LTRgdGC0LLQvg== IG9ianM= INCw0LvQu9C10YDQsw== IHRscw== IHJlY2xhbWU= X3RydXRo z4nPg861 LWxvYWRpbmc= VG9sZXJhbmNl IGZyYW5jaGlzZXM= IGNoaW1uZXk= 0YLQsNGA0LA= IHVuZm9sZGluZw== aWhpaQ== KHN0cmxlbg== IFRvdXJpc3Q= L2Z1bmN0aW9ucw== 4LiK4Li34LmI4Lit b2dyYWZp dW5leHBlY3RlZA== Z2VucmVz bm9tbWVu cmV0aA== w7NuZGU= PU0= IGhhc2h0YWdz INCy0L3Rg9GC0YA= INeU15XXpA== INin2YTZgdmG2Yo= 4LCm4LGB IGxhbmdrYWg= IEVWQQ== X2RvY3M= 7Lmt Ing= 4YOQ4YOq4YOY4YOd INC60LjRgtCw0Lk= bGFkZQ== IOCkteCkueClgA== Y3N0ZGxpYg== IOCwl+CxjeCwsOCwvuCwrg== INmF2KrZiNiz2Lc= INC80LDQtA== Z2lybHM= IM6xzr3OuM+Bz44= IOCyteCyv+Cytw== ZuG6uQ== IGRlbGV0ZXM= 0YHQsNC2 IHJlaW5pZ2Vu IMSR4bqhdA== IGZpbG9zb2ZpYQ== IGJlbmNobWFya3M= 15LXoteW IHJlbG9q IHJlc3RhdXJhdGlvbg== IG1lZWc= IEd1YWRhbA== JlI= Ikhl IEll aXRhbGk= IFN0cm9rZQ== IGx1bmNoZXM= c2hvb3Q= INCx0LvQsNCz0L7QtNCw0YA= QWxleGE= IGhpbndlZw== 0YLQtdC8 IOC0uOC1geC0 IEVucXVhbnRv IHRhaWxz SmlrYQ== IOCmleCnh+CmqOCnjeCmpuCnjeCmsA== IGFtYXTDuHI= 4KSm4KSw z4DOrg== INGC0YPQtNCw IGFub255bWl0eQ== IOCwheCwr+CxjeCwrw== IFNwZWNpYWx0eQ== 15nXoNeZ15nXnQ== 4LiP X2tlZXA= IGVudGU= IG1lbmNhcGFp LkFyZ3M= INin2YTYsdit2YXZhg== INGA0LDQt9GD0Lw= 6YCa6LKp IHByaW1haXJl IGh1cmVu YWNpZXI= IG9mZnJhbnQ= YXJla2lu IG1vbGRlZA== IG1hc2xhaGF0 INGC0ZbQu9GM0LrQuA== IGRyd3k= KGlubmVy IOCmqOCmrg== IHN0aWxl LmFjdGl2aXRpZXM= 6IO95aSf IG9yaWdpbmVsZQ== aXNjaGVt IHBpa2ly IGTDvG55YQ== IGVycmFkbw== IGRveQ== IHBlYXJscw== IGV4Y2Vk Ym91bmNl INiv2LnYpw== aXR1dA== IOC0pOC0qOC1jeC0seC1hg== IOGDm+GDmOGDruGDlOGDk+GDleGDmOGDlw== INin2YTZhdiz2KrZgtio2YQ= IGFwb2xvZ2llcw== xIxl 4KS+4KSP4KSw IFNBRg== 0L7Rh9GD QUREUkVTUw== IHBvc3NpYmlsaWRhZGVz IHTDoA== IG1vZ3XEhw== SW50ZXJtZWRpYXRl IG1odXg= INin2YTYp9it2KrZhNin2YQ= 4LCC4LCm4LGN4LCw LkV4ZWN1dGlvbg== IFBpbnQ= IGJvdG8= IHByb3Zpc2lvbmFs INi02LHZgg== IOCmj+CmqA== IEluc29s IGJlcmF0ZW4= IFZlcnRl TE9M IEhlbHBpbmc= X3NsZWVw IGFjY3Jv IEFrdGl2aXTDpHRlbg== 0L3Ri9C/ xZ9paw== Ymx1 IENvc3Rjbw== IHPDpHI= IHBhc3N3ZA== IFZlbHZldA== IDpd bGFzc2U= eW9uaQ== 4YOY4YOl4YOg4YOd4YOR 0YHRjNC60LA= IGFjY2VwdGVy IHLDqXVzc2ly IEJvaXM= 4LK44LKt INWh1bbVuNaC1bY= KE9w INm+2prYqg== IGZyaWdodGVuZWQ= INin2YTYudiz2YPYsdmK2Kk= aW5zdHJ1Y3Rpb24= 6Zue IHF1aW50bw== b3R1cw== LWxhcmdlc3Q= IHN1bW1hcml6ZWQ= IGhhcG8= IMq7YW5v IOC0leC0vuC0sOC1jeC0rw== IG5hdHVyYWxtZW50ZQ== eWVhaA== IGtp4bq/bQ== dG9waWNz IGRlY2lkaXU= aGVhZGg= b2xpdGU= 5Zu+54mH5Yy6 IOGAkuGArg== IOCmquCniw== IHZlcmdlbGlqa2Vu UHJlZmVy INin2YTYs9mI2LHZitip IGVzdGHDp8Ojbw== IGxvdWRlcg== IEFscA== IGdhdG5hxZ8= U2VsbGluZw== cXVlbGluZQ== IOCmreCmvuCnsOCmpA== 2YPZiNmK2YY= ZXN0aW0= INKb0YM= 2LHbjNin2YY= IHZwbA== 0LXQuNKz05nQtdC40YI= VmFuYWY= aXRzaWR3YQ== X3BpeGVscw== IOWMl+S6rOi1m+i9puaciQ== YW5pcm8= 4KSu4KS5 INmF24zaiNuM2Kc= INCa0LDRgg== IOGDoOGDkOGDneGDk+GDlOGDnA== IOCuquCuleCvgeCupA== CUNIRUNL ZWxlcmlu zrvOt868zrE= Lmhvc3RuYW1l w69udg== b2N5dGU= IGNlbnRv ZXF1aXA= IGNlbQ== IGN1ZW50bw== IGF1bWVudGFuZG8= W3dvcmQ= IG51cnU= IM61zrrPgA== INCy0YvQv9C70LDRgg== IG9rdXk= IG1hcng= 2YPZitix IGNvbmNlc3Npb25z KCkpKQoK IGFsYXll IOCkleCksuCkvuCkleCkvuCksA== 4KSu4KWB YXNpeWE= INiq2YTZgg== IHNpZ25v 15XXoNeT IHpwxa9zb2I= JnQ= IEtvbnRyb2xsZQ== 0LDRgdCw0L0= dcOfZW4= IGludmVudGl2ZQ== INC00LXRgtCw0Ls= L3Vz LHRpbWU= IGJpdHRlcm5lc3M= IHN1YnY= INio2pHbkg== VXNi xb5lbA== IFBPVVI= IGp1c3RlbWVudA== Ym92ZW4= IGZydXRh RGFsYW0= IMO+asOzw7A= X3BpZWNl IOGDq+GDmg== 4KaG4Kaq IOC4geC4seC4mQ== IFBhbnRz X2xvYWRpbmc= TGFzdGx5 IFpoYW8= IGFwb3B0 IE1ha2E= 4LSo4LWB4LSC IOCkl+ClgeCknOCksA== 54u4 6rSA66as yZlyaW5kyZk= IGhhc2FyZA== 0YrQtw== IE1hdGNoZXM= IFN1ZmZvbGs= 54mb54mb IHphcG9z w6FyZXo= IFRhbnRv IOGDnOGDkOGDrOGDmOGDmg== IOGDk+GDpuGDmOGDoQ== LnVs IHNlbnRpbWllbnRvcw== UHJvcGVy IEN1bWh1cg== 4KSh4KS84KSV QURFRA== IERldGVybWluZXM= IO2b IGZpZXJ5 IOCqquCqoeCrgA== X2luaQ== 2YPZitio IOC0ueC1iA== LUFT 2LHYp9iz2Kk= IGRlbGlt IE11dHRh IOCmp+CmsOCmqOCnh+CmsA== IGNvbmNsdWly IE5ldGFueWFodQ== QXZhaWw= 2KzZh9uM2LI= IGtsaWNrZW4= IHJlY3J1aXRz dWxpZmxvd2Vy IGFycXVpdGVjdHVyYQ== IG5lc3Rpbmc= IOC0qOC0v+C0sOC0teC0p+C0vw== d2FydGU= LHZhbA== IGh1YWhhbmE= IGNhcnZpbmc= IENhdGFyaW5h IGfDoXM= INmH2KbZig== IGFtYW50ZXM= dWh1cg== IFJpZGluZw== IHNhxJ9sYW0= IENoaWw= IERpcmVjdGVk IGRvdcSD IHNsdXRz 0LDQstC10LQ= IG9saWc= IGFudW1hbmc= IHJlY29w INGB0YPQvNC80LA= IFRlZXRo 4oCM2qnZhtmG2K8= IGVsYWJvcmFy X0lURU1T 0LDQsdCw IHlhdQ== IGZpbmFuY2llcmE= IGRlcGFydGluZw== RXhpdGVk IFZvcnNpdHo= ZGlzdGluY3Q= INin2YTYo9ix IOGDoeGDmOGDoQ== 15XXmdei KGhpZ2g= IHNvbGk= IHVwa2VlcA== IGVtb2Npb25lcw== IGFwcHJvdmFscw== LlpFUk8= L2hl 4Li04LmI4LiH IHJhZGljYWxseQ== IGdlem9uZGhlaWRz IG9wZW5uZXNz IGNyYXo= IG51bWVyb3M= W2xhc3Q= IGhvZXdlbA== CUVudGl0eQ== INeU15PXqA== dWJlcnQ= IHJlc3BvbmRlbnQ= 4KSw4KWN4KSk4KS/ d2l6YXJk SUdJTg== IHBhcnJv bWVudGFs IENob3c= ZWxhZw== ZXJvb24= IHRleHR1cmE= 77yR77yV IHJlw7puZQ== INeW15s= SVRFUkFM IGRhYmFy IEFsdGVu 1aHVvNW21aHVrA== IHNhbG9ucw== IOWkqumYs+Wfjg== 1aHVrdW/ Z2VzY2hpY2h0ZQ== KGlkZW50aWZpZXI= 7Y+0 44Kz44O844OJ IGFsaWt1d2E= YWvDqQ== INCy0LrQu9GO0YfQsNGP dXplcw== IOCkieCkquCkleCksOCkow== IHNpbnRv Iik7DQovLw== 0LDQu9GC0YvQvQ== IGZyeWluZw== xYJvcw== zrrOuc69 IHNhaWI= IEphbmE= Vml0YW1pbg== IHByb2llY3Q= IEhhemVs IHVyZ2Vz IOC4oOC4suC4qeC4sg== IGJvbWVu IHlvdWxs 4LGH4LC34LGN X2NvbnRyb2xz LmRqYW5nb3Byb2plY3Q= IHdlYm1hc3Rlcg== IEhFQUxUSA== 4YOV4YOQ4YOb INix2KfYug== 4oCZZWs= IGJhdGFuZw== IHN1YnRyZWU= INC40L3RgtC10YDQtdGB0L3Qvg== aXNhYmxl IG1hZ2ll IHJlYWx0b3I= IGJsdXJyZWQ= IOCuteCuvuCusA== IEV4cGVyaWVuY2Vk IGhvbm9yaW5n LXNyYw== 0YbQsNGC0Yw= 5YWN6LS5572R56uZ 4LGB4LCk4LGL4LCC4LCm4LC/ b2NhbHk= U2FuZGJveA== ZW5jaGVy Tmt1bHVua3VsdQ== IHJlZ2VuZXJhdGVk INin2YTYs9mB IHFveQ== IHByb3ByacOpdGFpcmVz INC+0LHQtdGB0L/QtdGH0LjQstCw0LXRgg== 2YLZhNin2YQ= b2xvaA== Y2hyaWo= IHRpbXU= IGZlYXJmdWw= YXVkaXQ= 4Lih4Liy4LiT IHJlc3BvbnNpYmx5 IHRyYW5xdWlsYQ== L2ZpcmViYXNl 4Liq4Liz4Lir4Lij4Lix4Lia LXNlc3Npb24= IFBpaw== IOC2tOC3lA== INKu0L3RjQ== INin2YTZgdmE2LPYt9mK2YbZitip IG7DqWNlc3NpdGU= IE9tYW4= INWr1oDVpdW2 IGV0aXF1ZXRh Z3VpbGQ= IGluc3RhbGxhdGll bW9v 4LK/4LKv4LK+4LKX4LK/ IEFyaWVs IHNhdGlzZmllcw== LmxzdA== 5Li75Lq6 SXNsYW5k IGJlZ3lu 5rig INC30LDQvdC40LzQsA== X3ByZXZpb3Vz YXR0ZW50aW9u X2hlYWx0aA== INCf0L7Rh9C10LzRgw== X2ludmVudG9yeQ== 7J6l7J20 IGludGVuw6fDo28= IE1lbW9y IEJvdHN3YW5h IGtlZWw= 4YOU4YOV4YOY4YOh IEFtZXJpY2FuYQ== IEJsdW1lbg== IOCkpuCkv+Cktg== 5riQ IFphbA== bGVuZXNz IHphY2h0ZQ== IGFkbWl0dGluZw== Y3plbWE= IGJhdWVu 77yM5Yqg IFNBQw== YWxobw== ZWxlcm50 IFBhcnRlaQ== IHNhbHRz 0LzQuNC70LA= TmV1dHJhbA== 4LSX4LWN4LSw4LS44LWN IGZvcm5lY2Vy w6RzY2hl IExEQVA= b29raW5n w6lm ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= IG1hbmRh 77yM5q2k IEhpc3TDs3JpYQ== IGNhdGVnb3LDrWFz IOq4iQ== IOC3gOC3kOC2qQ== TW9o INeR15zXmQ== IHBhZ2JhYmE= VkFT aWVuZA== SUNFRg== IEFudGhyb3A= LXNp INGN0LrRgNCw0L0= IHRyYW5zZm9ybWF0aXZl IHRpbmU= YXBwb2ludGVk 5pu5 IEVuY3J5cHRpb24= YW1iYW5h 2KfYpNmG INC+0LHQtdGB0L/QtdGH0LXQvdC40Y8= IERlbmlzZQ== KEJveA== INGA0p/QvdGL d2FuaWU= IOCmrOCmv+Cmpw== IGVnaXRl IHJldW5pb25lcw== 77ya77yI L2JvZHk= KG1hdGNoZXM= IEVpbmVu IGJsZWVk a2tlcg== IHZhY2NpbmF0aW9ucw== IGluc3RhbGxz IHlvcnVt cGxlaw== IEV4cG9zdXJl INC90LDQstCw0YI= X18sCg== IFdvb2R5 YXPEgw== TXV0ZQ== 5Y6o b2xvbmU= INC30L7Qsg== INi52YXZiNmF24w= IGZlZGhh Y2hvZW5lbg== IE9yaWVudGU= ZmljYW1lbnRl INC/0L7QstC10YDRhdC90L7RgdGC0Yw= eGJm Lk1pbmltdW0= IEp1dmVu U2FsdWRvcw== IHZlbmRlZG9y IGNoYXVmZmV1cg== IHRydW5jYXRl Lmlkcw== CQkJCQkJCQkJCg== 5b2T5aSp IOCuheCuruCviOCumuCvjeCumg== 4YOY4YOV4YOU4YOg4YOh IHNsaXBwZXJ5 IG9saXZhdA== IGxleGVy IOOBgg== LmVmZmVjdA== IGNpbQ== INio2K/Yow== IGNvbnN0cnVjdGlvbnM= IEtpY2tzdGFydGVy Y29tcGFuaWVz YXlvdA== aW5nYXQ= INC60L7QvNC40YHRgdC40Y8= IGtpdHR5 IOC0heC0teC0pA== IHNhYsOtYQ== 0LvQuNGA0LjQtA== IHByZXNvcw== bGlqa3M= c296 44CB44CO INmG24zZiNiy INCi0LU= 4KWk4oCdCgo= IGFycml2YWxz SW50ZXJwb2xhdGlvbg== YWdhbmRh VGVlbg== IG3huqV0 0LjQstCw0Ls= PFg= IFFVQUxJVFk= INmI2KfZhNmI IGFpY2k= IGRpeWE= 77yM6K+0 YWNpam9z 0L7QudC9 157XldeT15M= IHNvY2lvbG9neQ== aGVpbA== IHJhcml0eQ== IOC0quC0sOC0v+C0quC0vuC0nw== IGpha2E= 4YOd4YOc4YOh INqH2Kc= xYJ5Y2g= IOCquOCrgA== IGtyw6Y= IOCwheCwqOCxjeCwqOCwvuCwsOCxgQ== bGV0amVz w7ZydGVy IG5nw6BuaA== INCx0L7Rjw== IGVzY3JpdMOzcmlv cGFzc3dk KGRvbQ== ZXVz IHBlYWI= INC60LDRgNCw0L0= INC90YPQttC10L0= z4TOtc+BzrE= IHZlbmlhbQ== INiq24zYp9ix INeX15XXpw== IFVvbW8= IG9wZXJhbmRz LnJlY3ljbGU= 4YGH IMO2xJ9yZW4= S3M= X1JU 77yaPC8= 7Iq0 xZF0 CWN1cnNvcg== 4LS+4LSn4LWN4LSv4LSu INCU0LXQsg== IHVzZWZ1bG5lc3M= 4KS+4KSo4KSm4KS+4KSw IOCkteCkvuCksuCli+Ckgg== IGRvY3VtZW50YWw= Lzw/ Y29sbGVnZQ== IFsKCg== IGhpc3RvaXJlcw== KGNpZA== INin2YTYudmE2KfZgtin2Ko= ZWxsaW5lbg== IO2IrOyekA== aWxsaXI= IEppbmc= IGJpY3ljbGVz 4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+B IGJsYW5kdA== L05ldw== dXNodQ== aWxpbQ== ZGV0YWNo IEFsZ3Vucw== IHZhbnplbGY= Rm9yZ2V0 0YHRg9C9 5peg56CB5Lit5paH5a2X5bmV QVRJTw== ICciPic= IEZyYW5jZXNjbw== PWg= YWdhcQ== 0YHQsNGC0Ys= IGLEp2FsYQ== aGFrYQ== IGbDs3M= IGZpbG1w IG55aW5n IHNpYW4= 0LPQvtC90Lg= aW50ZXJhY3Rpb24= IHNocmVk IHJvYW1pbmc= IOGDp+GDleGDlOGDmuGDkOGDpA== IHNlbm8= IEF2YQ== KG1hcms= IMOzcmfDo28= IHJpdXNj Q29sb24= YXNlbWE= IGNvbXBhw7Flcm8= KGxvY2FsZQ== IG5ndXZ1 5YaS IEplxZtsaQ== IFpvZQ== IOqwgOyhsQ== 0YvQu9GL0pPRiw== IENFTEw= X2Rpc2FibGVk IGR1cGE= IGJldXJyZQ== IHpha3Jlcw== ICRc L0FkbWlu X0ZJRUxEUw== UklB 44CS INi02KfZhQ== IOCyuOCypuCyuOCzjeCyrw== IG9uYw== LkdSRUVO 4Ka/4Kak4KeN4Kav IOCkquCljeCksOCkuOCljeCkpOCkvuCktQ== Q3JlYXRlcw== 2KfZhtmJ X2Nyb3A= CiAKCg== Kls= Smk= IGZhbWlsaWFsZQ== YWR4 Qm9z IEFsZW1hbmhh Iil9 euG7pQ== IOCmpOCmvuCmsg== 6ZmQ5Yi2 IGRlbW9uc3RyYQ== IFNhaGFyYQ== IE11c3Rlcg== bmRyb21l LlBhcnNlcg== LWZhY2Vib29r LnJlYXNvbg== IOCwquCxi+CwsuCxgOCwuOCxgeCwsuCxgQ== IOCkmuCkv+CkqA== IENyZWF0dXJl INiy2YXZiNqW ZHV1cg== IHdhc2hhYmxl w6FnaQ== IHN5aw== IHdpbmVyeQ== IGVneWlr 0YHRjg== 0LTTmdC8 ICUlCg== IHBlbWVyaW50YWg= YmFybg== INSx1bQ= LlRlYW0= 16LXqNei LmNw INGB0LLQtdGA0YU= ZWxpYW4= 1oDVuNaC1bQ= INOp0qM= IFNjb3V0cw== IGluc3RhbGFkbw== IEdyYXo= IG1vcmly Y2hn 4YOY4YOZ4YOj4YOg IHZlcmRhZGVyYQ== IGhpY2U= IGdhd2lu IEhlcmI= IHZpZWpv IGluZG9uZXNpYQ== IFPDqXJpZQ== IHFheWI= IHJhZGlhbnM= IEhBUkQ= IGFr4bula+G7jQ== KFN0dWRlbnQ= QmVhY2g= VVBEQVRFRA== ZmF0dGVy IFNtYXNo INmB2LHZhdin24w= INC60L7Qu9C70LXQsw== 4KWN4KSv4KS+4KSw4KWN4KSl IFRhZA== INmE2YPZig== U3Ns IG5vY2hlcw== IGFpcmJvcm5l IFdvcmtzaGVldHM= 4KS+4KSu4KWN4KSw4KWL IG5ndXZh IHdpdG5lc3Npbmc= bmFx INin2YTYqtmD IGNydXM= 0LPQsNC70YLQtdGA CUdQSU8= 4oCZb2Nj VHJhY2tlZA== IGNvdXJhZ2VvdXM= w6ZscA== IExpbmd1 YXpo IG9ic3RydWN0aW9u w7Nsb2dvcw== INin2YTYudio 2YjZgtiv YW1pbnM= IGluc3RhbnRpYXRlZA== IG9yZ2FuaXphw6fDtWVz X3RocmVzaA== X0FSR1VNRU5U IGJlZ3LDvA== 4Kaf4Ka+4Kaw X2luZGV4ZXM= IGvDtnrDtnR0 c2xl IG5lY2Vzc8Ohcmlhcw== IGJhw70= IHNvcmthcg== INin2YTZh9mK2KbYqQ== IOC0leC0o+C1jeC0ow== IGJpeA== IGNsaWVudMOobGU= U2hlbA== IGFpbmU= IGFkZXM= 4LmC4LiX4Lij LWZpcmU= INij2YXZhg== IGJvb2Jz 6Ieq55Sx QXJteQ== IHBlZWxpbmc= IGNvbnF1aXN0YXI= INGE0LjQu9C4 IENJTw== INGG0LLQtdGC0L7Qsg== IGNvbnRpbnVv IHZvag== dXR0aW5n INiq2YHYs9mK2LE= xYLEhWM= IGlwYw== IExpZGVy LVFh YXJ1bA== 5Y6V IGNhcGl0YWxpc3Q= cGxpbmdz IHZpc2ll IOC0teC0v+C0reC0vuC0lw== IMOkaGxp IGFidXNlcw== IEhpdmU= X2lkbGU= Ij4vLw== 4KqX4KuB4Kqc4Kqw4Kq+4Kqk IOCyteCyv+Cymg== IGthYmlzYQ== IOafpeeciw== IHN2aWg= IGtpc3Nlcw== INm+2LHbkA== IOCkleCljeCkt+CkruCkpOCkvg== INC/0LvQsNGC0YTQvtGA0Lw= IOCyoA== dWluZG8= IG91dmk= IGFzc29ydGVk IHNlbXBlcg== IGzDrW5l w6R0dG5pbmc= IOCuiA== IHNxdWVlemVk INW+1aXWgNWh1aLVpdaA1bU= INW+1aXWgNWh1aLVpdaA1bXVodWs IGN1bHRpdm8= 0LvQsNGB0Y8= IGFwcGFyYXRlbg== IHBvamF2 QWRyZXNz IGhlYWRsaWdodHM= VXBz IEFudG9pbmU= IGFybWVu INCy0L7QvdC4 IGRhbmdlcm91c2x5 IGVudGljaW5n 0LrQsNC80ZY= ICAgICAgICAgICAgICAgICAgICAgICAK 0L/Rlg== INeU15XXqA== IGA7Cg== IOGDruGDlOGDmuGDm+GDq+GDpuGDleGDkOGDnA== a2nFn2Fm IHN0dW50 IGludmVydGly b2xpdGhpYw== IGtpdHRlbnM= IGltcHVsc28= IHJlc3VtZW4= 5LiN5LqG5oCO5LmI5Yqe YWxpdGU= IHBvbGljeW0= INCa0YvRgNCz0YvQt9GB0YLQsNC9 IHPJmWI= R2F0aGVy IFNOUw== ZWxlbmRl IMO8Yg== IGzDoW0= IElERUE= PHBhaXI= IEZsw7xjaHQ= IGNvbmNlaXRvcw== IHPEsXJh IHJlY29uY2lsZQ== IEp1bGVz IGpva2luZw== IElV IEhhbmE= IOCqpOCrh+Cqo+Crhw== b3Jvcw== INi52Lc= IEJvd2ll IHNlZ3VpdG8= QnJva2Vu aMOpdGlxdWU= 0LXQvdC40LXRgtC+ IE1hbnNpb24= IGJpbmE= INGC0LjQutC70LXQvA== 2rvZiA== INqG2LHYpw== INC60LDRhNC10LQ= TmFtaW5n IFdvcmtwbGFjZQ== LykK XFRlc3Rz V29sZg== IOe0qw== 5L6d5rOV IOGDkOGDoOGDkOGDm+GDlOGDkw== INeh16Q= IFFncw== IHNpdHVl IGhqw6RscA== LXNwZWM= INin2YTYp9iz2YTYp9mF IH0KCi8= IHByaWNlbGVzcw== YmFieQ== KCgoKA== IGdyaXBwaW5n IC4uLiw= IG5hd2U= IGRlbmV5 IGNoZWVycw== 4Kq+4Kqz4KuA zrjOsQ== WWFob28= INqp2LHYqtuM KHdoZXJl 4pag4pag IHN3b3Jkcw== IEtvbWZvcnQ= IGVsZXBoYW50cw== cWFyZmlpdA== aWFvbWk= IGdjZQ== Y29tbWU= IGp1bnRh cmVpeg== YWRpcw== YXV0ZW4= IFRvb3Ro IExpZXV0ZW5hbnQ= T0VN IG5vdGVib29rcw== LWRlbg== IOGDleGDmOGDoQ== IGF1c3Byb2I= 0LXRgtC60Lg= INCx0LXRgNCz0LXQvQ== IEZVTkNUSU9OUw== YXJvbw== IFNoaXJsZXk= IHByb3hpZXM= 5a6B5Y6/ b2Rvcm8= IGFma29tc3Q= c3R5cGU= IGRlc2NyaWNhbw== INC+0YLQutC70Y7Rhw== U0lHTg== zrXOr86/z4U= IOCkheCkteCkpw== 5Y2K5bm0 zr/Orw== IGNhZsOpcw== IEpvdXI= IGltcHJpbnQ= 4LmA4Lif INit2KfYr9ir CWNi w7NuaW8= INmG2KfZhdmH IHJpbGU= 0YDQtdC7 IOC0pOC0sg== X2F0dGFjaA== a25pbmc= IFNwYXJzZQ== aXNlZQ== IMO2c2Q= IM+N dW5na2luYW4= L2lw INis2q/bgQ== IHByYXZp 5p2l5LqG KD86 4YOd4YOR4YOX IEZyZWlnaHQ= 6ZaL5YKs a29udG8= IFN0cmFm IHNlbmF0b3Jz INC005nSr9C705nRgg== 2YbYp9mE L21haWw= IGp1bml0 IFJhamE= QUNJT05FUw== IGludGVycm9t IGNvbnRlc3RlZA== IGphbcOhcw== IG9ubnM= IFh4eA== Lmxpc3Rh INCi0LDRgtCw0YA= INGA0LDQt9C+0LE= IHNldHRvcmU= 5bqf 5Zub5bed 0LjRgdC40L3QuA== IOC0ruC0vuC0pOC1jeC0sOC0gg== KS4u IGVybg== w616bw== IENsaQ== INGN0LvRgQ== INW31aHVsA== IOe9lw== aW5lcmFyeQ== 44OR44Oz IHBsYXphcw== IFBhcmFs LVJheQ== LnN0ZXBz IHBhcmVjZW4= IEFyZ2VudA== IHBhc3NhbQ== INqv2LHZhQ== IG1hbmRhdGVk U3Rha2U= IHRyZWFzdXJ5 LXNpbmc= INC90LDQutCw0Lc= 0LvQsNCw IOCknOClgOCktQ== b2tvbQ== IGLDqg== 2KrZhdmK IHVuaXZlcnNhbGx5 IHNsZWVwZXI= bcOkZ2U= IGJhaXhhcg== IGN1cnRh IHZpbmhv IGRpc21pc3NhbA== VWJlcg== IG9rdXA= T2JzZXJ2ZXJz SWhyZQ== Lm1pbmltdW0= IHBsYXNt IOC2lOC2tg== 4Lit4Li14LiB zrjOtc65zrE= IOC5gOC4nuC4o+C4suC4sA== IMKwCg== IG1vdGl2YXRpbmc= 2YrZiNix c2xhbQ== IHByb3Bvc8Opcw== KHdz INCx0YDQsNGC X3JvdXRlcg== IHdvag== INC00L7QttC0 4KaV4Ka+4Kaw4KeA IEFoZWFk INiq2YbYqg== KCIvIikK 4LSZ4LWN4LSZ4LSo4LWG Tmhhbg== IOGDoeGDmOGDqg== IEFnbw== IEFBQw== LlZFUlRJQ0FM IEPDqXNhcg== IOuqqeuhnQ== IGVzdGFuY2lh INeR15nXpw== aGFwdXM= aXNlbXB0eQ== IGxpZHM= IE1hbmk= KEtFUk4= dHJhZ3VuZw== IOCwteCwpuCxjeCwpg== IGFib2dhZG8= LWxpdmVk LXRoaXM= INqp2YbYp9ix J2ltcA== KHN0b3A= INC60L7QvdC10Yc= IOqwnOy1nA== IHR3aWc= IGNvdWxkbnQ= IOCmmOCmn+CmqA== 6ISC X0lNRw== IFdlcnRl INCw0LDQvQ== LlBlcnNpc3RlbnQ= IHBhc2Fq P+KAnSw= w7Zzcw== IM+Dz4XOs866 IHTDuHI= aWdyYW0= emVuaWVt IEl5 IFNjaGF1c3BpZWw= IOCwuOCwsA== LnNp IENUUkw= INi42LHZgQ== UHJlbWllcg== KmZ0 IHByaW1lcnU= IGVsZXZlcg== IOCopOCpgQ== IOyVjOqzoA== IGVwZWt0bw== IGtsb2s= c3RybmNtcA== IHBhdGllbnRseQ== 05nRgtC1 IOGDo+GDoeGDkOGDpOGDoOGDl+GDrg== IGp1ZGU= X1NXSVRDSA== IOGDm+GDneGDrA== ZXhwbw== IE1pbmlzdHJv zrjPgc+J cHJpY2Vz IGNoZWZl IOC3hOC3jw== b3JtYQ== INC80LXRiNCw0LLQsNC90LQ= IGtsaW5rdA== 4Ka+4Ka54KeA 2YPZiNmG2KfYqg== IGNpbGluZA== IEJFRA== IGFyYcWfdMSxcg== VmljdG9yaWE= xKtkeg== IHByZWNhdXRpb24= 6rWQ7Jyh aW9sYQ== INqG2LTZhQ== KHNvbHV0aW9u CVJlc3BvbnNl YW1wcA== IFhwZXJpYQ== IOCkpuCkv+CkqOClhw== eW1ydQ== INCx0LXRgtC+0L0= Q2F0cw== IGFwYXJ0YWRv 0Y/QsdGA IEluZGll IHNvdWNp 4oCUSQ== IHRy4bqhbmc= 2KrZgQ== IOC4quC4sw== IGVsZWs= aXJpemE= IEdlc2NoaWNodGVu 0YLRi9Ge cGFwaWVy IHBvyrtv 5rGC5Lq6 4LWA4LSo 7YWQ7Lig dWVp JywnJywn YWtrYXQ= 4YCl 7KeQ LW5lZ2F0aXZl IOCyteCzh+Cys+Czhg== aWFnbm9zdGlj KGV2YWw= IGJpYQ== INm+2Kfaqg== IG5nZXo= IFNBRkU= QUVT X0ZBQ1RPUg== IGthY2E= b8O5 6amx INiq2YjZgg== INC90LXQtNCy0LjQttC40LzQvtGB0YLQuA== IOCkruCkvuCkqOCkvg== LnByb2plY3Rz 4LC/4LCs 4YOc4YOY KCcm X1BIT05F IHNvdWNpcw== R09S IGR1cmNocw== 0YfQtdC3 IOGDkOGDpuGDm+GDneGD IOGDm+GDkOGDkuGDkOGDmg== LU9uZQ== wq1nZW4= 2KfYqtix QnJh IFRBTQ== 5q20 IEdld2lubmU= IOCyruCyvuCyoeCyv+Cypg== W2NvdW50ZXI= INm+2KfYsdm524w= 4LGG4LCC4LCs IGtlbGU= bGlnYXRpb24= IHRpbnRh IGFyYnJlcw== ICIuLi8uLi8uLi8uLi8= 4Kq+4Kqw4KuN4Kql4KuA IG1vc3Ryb3U= INGB0LDRgNGL0L0= IEpBRFg= LlRSVUU= IETDpQ== c3RpdHV0 L1RhYmxl IGltcHJlc2nDs24= 4KSc4KSv b2xlZw== IGhvZG5vdA== IEFic3Q= LmxvYWRlZA== IHVrdXJhbg== IEppag== IGbDvGhydGU= IGFsZW50 IHN5bGxhYnVz ISIpOwoK IGV4cXVpcw== INin2YTYtti62Lc= KHBhdGhz IHZlbnRv INin2YTZgtiv2YrZhdip TU1D IGRyaW4= IGhpbmdlZ2Vu IFdpbGRl OkFycmF5 IOmCrg== IGVqZW1wbG9z LmJvb2xlYW4= IHZhYXJkaWdoZWRlbg== IOCkheCkruClh+CksOCkv+CkleClgA== SUFOVA== ICJ+Lw== 4Liq4Liz4LiZ4Lix4LiB4LiH4Liy4LiZ IHJhZGljYWxz IGF1dG9tw6F0aWNv c3RyaWpk 6LS555So bGllZg== IHRvZXo= IHJlcm8= X3NuYXBzaG90 IHNvbW1laWw= z4fPjQ== IOC0teC0vw== 6LW2 IOGDm+GDpeGDneGDnA== IHNww6Q= IG1hbmVq IEFwcHJlbnQ= 77yw IG1pbmVjcmFmdA== IGNhbm9l VHJvdQ== INmI2bo= IFNhbnTDqQ== IGVzcGlyaXQ= IGNvbG9jYWRv IEZvcnRl KGZhY3Rvcnk= 0Y/RntC70Y/QtdGG0YbQsA== IHNvZnRiYWxs aWVmZXI= X0RFQ0xBUkU= 0pvQsNGA0LA= zr/Osw== IGdydW5kc8OkdHpsaWNo LnJ1bm5pbmc= IFBvbHNjZQ== IOC0ruC1geC1uw== IHByZXNlbmNpYWw= PW9z IG92ZXJkdWU= 5YeP5bCR IG9udG1vZXQ= IGfDvMO9 IHRla3N0ZW4= IMO2c2TDvHI= dHlt dWx0eg== UXVpZXQ= 44K544Oe IGRlZmljaWVuY2llcw== LWJhbGw= IHNpZWJpZQ== IGRlcGVuZGllbmRv INix2LPYp9mE2Kk= IERpb3I= IEJvcm91Z2g= IGludmVzdGlnYXRlcw== dWx0aXBsZQ== IOCkq+Cksg== LW5hdmJhcg== IHJlY29taWVuZGE= YXlhYXNoYQ== eXNpbg== IOCypOCysA== INCx0L7Qu9GM0YjQuNC90YHRgtCy0L4= 44GT44KN 1bXVodWv IGhhZGE= b2dlbmVu 4LOB4LKk z4jOtc65 IGxlYXNo IHNrxYJhZA== KHNk IHRvaXR1cmU= 4KWB4KST4KSC 4oCd4oCU Omh0dHBz IOCkpOCkuQ== dWxhZw== aGFmdGVu IHVuYmVr IFNFWA== INmF2K3bjNi3 IG1lZXM= IHBlbmluc3VsYQ== w6ltYXRpcXVl IGJpb2Rl IHJlc2FsZQ== 5L2Q IHBlbmVy ICEhISE= IEludml0YXRpb24= VVJZ IE1hZHVybw== IHZhcmnDqXTDqQ== 4Liq4Lix4LiV4Lii4LmM IHBvd2VyaG91c2U= IG1pc2F2YQ== TmV0ZmxpeA== UG9ybg== aW50dXJl IFNocQ== IHZ1bGxlbg== INC+0L/Qu9Cw0YLRiw== 15bXlQ== IHpha28= INS11anVpQ== IHNjaHVs IEdsaQ== INCU0LzQuNGC KF5e IEFkbWlyYWw= INio2LfYsdmK2YLYqQ== IHJvbGxiYWNr YnJlbmc= ZmFkaA== dXN1dA== IGNvbXBhcmFy IOyYrO2VtA== X2RlY29kZXI= 4YCe4YCs4YC4 INmG2pPbjQ== IyMjCgo= IGJlbmlldXdk w6RybQ== 5Zyo57q/YXY= IEFzcGVjdA== X2NoaXA= IGFuaXZlcnPDoXJpbw== INGC05nQvQ== IGV4YWx0 IG7DtnRpZw== IGxvZ2lzdGlj IGhpZWxk xYhl INeX154= aXNpaw== 4KS/4KSC4KSV LWNoYXI= LkRpc3RhbmNl 2KjYp9ih IGdyYW5ueQ== IEFkag== IOC1 dWFpZ2E= Zmx1aWQ= IGRlY2VwdA== IHVyaW4= CVZpZXc= IGJ1c2hlcw== 5qGI5L6L IOaOkg== 2YPYsNin 44GK44KK44G+44GZ IFdvbWVucw== 4LmB4Lij4LiH PTw= 6rCc7JuU X2JyYW5k YXNxdWU= IOCkleCkpA== IHJla29t IG5vZm8= dnVt INin2YTYqNix2YrYtw== IFRSQUlO dXBwdXQ= VWx0cmE= IGRoZXg= IHRlY2hub2xvZw== 16bXmded Jz8= IGNvbmV4w6Nv IENyZXN0 IGV2ZW50ZGF0YQ== 4LGH4LCf4LGN 4YOQ4YOj4YOa IFJpY2h0ZXI= UkVFVA== IGJlc2x1dA== IEtlZA== INC606nRgNGB0LjRgg== U29ydGVy INCw0YDQsNC00LjQvg== IOCkteCkv+CkpOCljeCkpA== 6rCc7J2Y 5bm/6KW/ IMOpZGl0 ZXJ2ZXJz 44ON44Or IOGDm+GDkOGDnOGDpQ== IOCkk+CkleCksA== aXRhaW5l IGNvbXBldGl0aXZlbmVzcw== 4LC+4LCq4LGN4LCk IGJpenRvcw== IOC4ouC4ueC5hOC4meC5gOC4leC5h+C4lA== W3RleHQ= IENMSw== IGp5bGxh Q0hBU0U= aXBvdA== IGV1cm9wZWE= IHTFmWViYQ== 0LDQu9C7 IF5eCgo= 5pm2 IHlvdGU= 2LbZitmB INC/0L7Qu9C90L7QvA== IHJ0bg== IGRhdWVydA== cml0ZWxu IERpYW1vbmRz YXNzYXE= 0LDRgNC+0LI= IGVkaWZpY2lvcw== IGFsbG95cw== IGNvbmNy IGNvbWlzacOzbg== 2YjYr9mK IGZyYXQ= T0NVUw== 4KeL4Kas IHJlaW5l INCV0YnQtQ== INGC05nRiNC60LjQu9Cw0YI= INmD2LHYqQ== IGVjb25vbWlzY2hl W1Rlc3Q= 4LON4LKw4LOA4LKv KHdhaXQ= IExlc2JpYW4= V0FS xLFtbGFy aXJoaQ== ICEhIQo= INiu2YjYqNuM aWRlYXM= 2LHZitiq aW5rdA== bGljYWJsZQ== IEJpdGNvaW5z 5Lit5paH5peg56CB aWdpbm5h cGxvcmVy aWxpZW4= IMOcbml2ZXJz VmlzaXRvcnM= LmdlbmVyYXRlZA== Lldhcm5pbmc= INGF0LDRgNCw0LrRgg== INio2YrYp9mG2KfYqg== IGluZnJhc3RydWN0dXJlcw== aXN0ZWw= ZGlmZmVyZW50 15XXqdeo IHdpY2tlcg== ZXN0cmVhbQ== IFNlbmF0b3Jz IE9MRA== IOCqhuCqteCrh+CqsuCqvg== IEh1aXM= IHPDvG0= X3NzbA== IGB7 R2Vlbg== Y2luaWE= IFNPVVRI 2KfYqNmK2Kk= IOmfkw== INmH2YHYqtmH IE9wYw== w610aWNv IHF1aXR0aW5n IGNpYg== IG5ldGplcw== bmdvZQ== 4KSy4KWL4KSh IHB1cHBldA== IHJ1bGVycw== Y3Rlcg== eGFi INeQ16jXkdei IHdpZHRocw== IOCwruCxgOCwpg== IHZhcmlhcg== 4oCM4LCf INC605nRgdGW0L8= INmI2KrYtA== ZmFzZQ== IOCkrOCkvuCkgg== 06nQvNCx 0LDRgtC+0Lw= SG9wZWZ1bGx5 IFNjaGzDvHNzZWw= X2FsaWdubWVudA== amXFoXQ= enpqb25p IGFhbnZyYWdlbg== 0JrQkA== QmVoaW5k IM+Gz4XPgw== IHJlc3RlZA== IGVmZmljaWVuY2llcw== IHN1c3RhaW5pbmc= IG5ldXJvc2M= IOCwjuCwqOCxjeCwqOCwv+CwlQ== IEtyaXN0bw== IHBvdWQ= IG11ag== LnRva2Vucw== X0NO w6FsaXNpcw== 0LXRgdGW0L0= 4KuC4Kqy IEhvZmZtYW4= IHZhaWc= IGplZG51 IHJlY3VycmVuY2U= c2ty 0LvRjdCz INeQ15XXnNeZ 4K6+4K614K6k4K+B IEjDpG5kZQ== IHNodWdhYmFu IGtsYXNzaXNjaGVu INep15HXqg== IEdhbW1h YXJuYXI= Y29ubmVjdGlvbnM= IGtvb3JkaW4= bnByaW50Zg== cGFjZWQ= 0LvRg9C/ RGltcw== IHByb2Jlcw== KG5i IG9tdW1l IGpla2s= INGI0Lo= bGVpZGVy YWlzaW4= IE9hc2lz IOCkruCkueCkuOClguCkuA== LkNvbnN1bWVy INin2YTYudmK2YY= IFNlcmVuYQ== 7Ie8 2KrZhdmK2LI= IHbFoWVjaG55 UmFpbHM= INmD2KfZhdmE2Kk= 2ZHYrw== IGluc3BpcmF0aWU= 4YOY4YOg4YOj4YOh 4LCm4LGN4LCn SUxvZw== eW1l aGV1 LWNvbnRyYWN0 Q2FuY2VsYWJsZQ== 4LiW4Lin4Liy4Lii INeV15vXnw== IGNoZXY= aW5mbA== IERhbmt6aWo= 2KrYsdmE INGF0YDQvg== IGtpbG9tw6h0cmVz IHN0b2s= IOC0heC0qOC1geC0 RW1wbG95ZXI= IE1lZGl6aW4= IGfDtnLDvGw= 5oSP5ZGz IGVzcGVjaWFsaXphZG8= 4Kao4KeN4Kam4Kaw Y3Jpw6fDo28= 6L6b cGxlbg== IFNhcmFz aWZpa2F0aW9u 4KiV4KmH 5Zi/ IGluY29ycG9yYXRpb24= YmVraXN0b24= IEpQRw== IGthaXdo IFVyYW4= 2YjZitmC IOGDkuGDkOGDleGDoOGDquGDlOGDmg== IGFtaXQ= 15nXmda3158= UHJvYmFibHk= 0J3Qqw== IGJkc20= IENhbWU= IiwiIw== INC90LDQtNC1 b2JlZA== IGxsdXZpYQ== dHJhZ3M= IC4q INC20LXQu9GD0LQ= aWxsYXRvcg== IE5vcmE= IG5nYWg= IOCkqOCkrQ== Y3VyaXTDqQ== INiu2KjYsduM IOCkpOCkpQ== IG5lZGVy IFN3ZWVw IGNoYWN1bmU= INC60LDRgNGL aXZhbmph IGVyZsO8bGxlbg== IOCyrOCyv+CynOCzhuCyquCyvw== 1bjWg9W41a0= CWNw YXRla28= 77yf77yM 4YOh4YOQ4YOl4YOQ4YOg4YOX4YOV4YOU4YOa4YOd4YOh IGdldHU= 2KrZh9mK IG1hdGltYmE= IOClpQoK IGFmZmljaGU= 4K+I4K6V4K+N4K6V4K+B 0LDRgtC10LvRjNC90YvRhQ== 4YGI IFrDvHJpY2g= IOCksOClguCkquCkruCkvg== 15XXpteQ15Q= IGRyYW1hcw== IHRvdWNoZXI= YWJyYXM= 54+N IOCkh+CkmuCljeCkmw== 0L7QtdC8 IGFjcmVkaXRhcg== 0L3RltCy0LXRgNGB CWV4cG9ydA== IOCkqOCkueCkvw== IGNsYW5kZXN0 INCx0L7Qu9Cw0YLRi9C9 U2hha2U= 6IKM LVZlcnNpb24= INin2YTYrtix INin2YTYt9ix2YrZgtip 4K+B4K614K6w4K+N b3RsYW5k IHNuYXBzaG90cw== cMOl INmF2KfZitmI IMq7xY0= LWFy4bul 5b+D57uP INW91a/VptWi IGxpbGU= CWNy INGB0L/QvtGB0L7QsdC+0Lw= b25nd2E= Wkg= QGluZGV4 4Li44Lil QXVqb3VyZA== IERpYXJpbw== INmF2YbYtdmI2Kg= IEZVVA== IEVzc2VudGlhbGx5 IGlrYXc= YWNvY2s= IHBvZ2xlZA== 0LjQu9C40Y8= OnNlbGVjdGVk IG11a2FuYQ== QWNjb3VudGluZw== IOGDrOGDmOGDkg== dmlzaQ== INC60LXQt9GW0L3QtNC1 e3w= KGZhY2U= INC90LXQvNC10YY= X2Rlc2lnbg== IHRha3V0 2KjZhg== IGh1aXNo Y2hs IOC4p+C4seC4meC4meC4teC5iQ== ZnE= V2FydW0= IHBvbnVk 4LGA4LCq4LGA INm82KfaqQ== XHhl IHRyYW5zZmVydA== IHRvbW9u b3J0b3E= YXRpbmE= LWxpbnV4 bHlzbmluZ2Vy Z+G6uQ== IFRpbWluZw== QU5EUw== INis2YjYr9ip 4oCZZW1w IHByb3Rlw61uYXM= 15XXkdec INmF2LHYrdmE2Kk= eGVk 4KSH4KSw X2JldGE= IHt9Ow== IHR1dHVs L3Rvb2w= 1b/Vq9W+ INC+0YLQtNGL0YU= IHlha2xhxZ8= IHBhcnRpcw== 1aHVttaE1as= 6buR6ZKx X25vbQ== b25vbWlj 4KWB4KSq4KSw4KWN4KSo4KWH bHVtb3Q= IEtpcA== X3NwaW4= INGH0LXRgtGL0YDQtQ== 6auY5bqm 5qGM Lm9j 2K/Yp9iu2YQ= INeU16nXoNeU 6LCD55So IGNodXQ= IEZsb3Jh INij2YbYrdin2KE= IE5hcmVuZHJh IHByZXN1bWU= UU4= 4KeL4Kam IM68zrHOts6v IGdhaw== IE5ldXJhbA== IOCmhuCmk+Cnn+CmvuCmruCngA== IEtsaWNr INin2YTYs9mI IHRyb3Bwbw== IGZyZWFk INqG2KfYsdmI IHJvYmVz IFphbWJpYQ== bGFkeQ== IOC4geC4o+C4uOC4h+C5gOC4l+C4nuC4oeC4q+C4suC4meC4hOC4ow== IGNvbnRpbmVudGU= IEbDvA== 5bGl IFJ1aXo= IOCqteCrgOCqoQ== IGF64bul IOeBqw== IOCkquCljeCksOCkruCkvuCkow== IEtpbmcncw== 2YTZitiy2Yo= Umdi IHVsdGltZQ== IGp1aXo= 5LiN5a2Y5Zyo INmF2YLYtdiv IEphaHJodW5kZXJ0 IOCknOCkruCkvg== ICMl 4K6/4K6u4K+B4K6V INmG2KrbjNis2Yc= IOCkuOCkvuCkguCklw== 0ZTQvQ== IHN1aA== IHN3YXk= INeU15DXqNel 5aaI5aaI L21vYmlsZQ== 4oCcUw== 157Xmdeo IE9tYg== IERpdmU= YXJyZXJh IGV4Y2hhbmdpbmc= aXNwbw== 6LSi5pS/ IHNwb2o= IHN0aW50 zrTOrQ== IHRlbGV2aXo= YmxpYQ== YXBlbGxpZG8= X3NvbHV0aW9u 4K+N4K6V4K6/4K6x IHRodXNh IGFwYWc= IGFraWs= PwoKCgo= 4oCmLgo= IGFlZ2E= IGppZA== CVNpbXBsZQ== INmB2YjZhA== IGFjZXNzYXI= Y2FpcmU= 4YOU4YOg4YOQ4YOi LnVk IMOibQ== IERheXRvbmE= ZW5jamk= IM61zr3PjM+C LnNjcg== LW9yYW5n 0ZHRgtC4 Q29uc2VudA== IHN0YWtpbmc= aWR6aQ== IG1vZHU= KGV0 IGFkbWluaXN0cmF0aXZv PWRhdGU= T3V0Z29pbmc= IG9mZmVydA== IFNEUw== IEVtZXJnaW5n IGRpenpl IOCkrOClgeCknQ== Skw= IG15c3RpY2Fs IFZhcmdhcw== U0VUVElORw== IGPGsA== IFVudGVya3VuZnQ= IFNldHRsZW1lbnQ= dG9saXN0 IGRlc3RhY8Oz INCU0YPRiNCw0L3QsdC1 2b7Yp9qp VGVh IEtvYmU= IGFtYW50ZQ== INin2YTYrdin2YTYqQ== KCldKTsK IGNhcmluaG8= TW9ybmluZw== IGhvbG9n IGZlcm1ldHVyZQ== X3JlbGF0aW9u IHBhcnRpY2lwYXRlcw== dmFuamU= IMW8eWNpYQ== 5Yqb6YeP Ijt9Cg== 0LDQu9GP U0hPUA== dWNpYQ== cmFjaGVu QWdncmVnYXRvcg== INC/0L7Qt9C90LDQutC+0Lw= IEhvbWVy IHLDqWRhY3Rpb24= d2hvbGU= YWNpYw== yZnQsA== IGhlbm4= 0LXRh9GM IFNoZWx0ZXI= 0YHRgtCy0YPQudGC0LU= CWRpc3BhdGNo aW50ZWdyYXRpb24= IHbDrXRpbWFz IGNhcmNpbm9tYQ== IGjDqXQ= IOC0nOC1gg== IHJlcGVydA== X0FDSw== IOeOqeW9qeelnuS6iemcuA== IHBlYWxl KEND INmK2YTZig== IGNvZGVjcw== IGludMOpcsOqdHM= aWxlYW4= LmFsZw== aW1pd2E= IFVTUw== LWJlbmFy dW5nZXJl IHJlYWxpc20= IFdvbmRlcnM= IOCqrOCqp+Cqvg== 4YOd4YOh4YOi w6F0w6lr 5YS/56ul YWFybw== IGxsYW1hZGFz IOWkqeWkqeS4reW9qeelqOS4ig== IGNpZW50b3M= IG9ibGlnYXRlZA== VGhp CW92ZXJyaWRl 1aHVqtW41bLVuNW+ IOCksuCli+CkleCkquCljeCksOCkv+Ckrw== b2Rpbmdz X0FDQ0VQVA== X2Fkdg== IGdyYW1tYXQ= U3Bv IGdyYXBoaXRl IGnFn2xlcg== IGNvbnNvbg== X2l2 IGnFn2xlbQ== ZGRkZA== IG9yaWNl IG1oYQ== IERhaQ== IGRvbm5hbnQ= IGhpdmU= IE1BU0s= QW50aG9ueQ== IGNvbXBhcmF0aXZlbHk= INmD2KfZhQ== INCy0LrQu9GO0YfQsNC10YI= c3VyZg== IikpKTsNCg== IGtlc2t1c3Q= IGFqb3V0w6k= IGdvZQ== IGNhbWVy IExpZ25l IG1pdHM= IGVzdGltYXRpbmc= 5YuS5q+U IGFkbWluaXN0cmFkb3I= INGB0L7QutGA0LDRiQ== c29sbw== 2YrYr9ix 157XoNeV16o= INGB0L7RgdGC0LDQstC1 IHJveWFsZQ== IFNheWluZw== dXJnZXJ5 IGV4ZW1wbG9z Q2FybA== IHZhbGFt IGhlcm9pbmU= 0LXRgNCw0YU= IEVI 4YOj4YOg4YOQ4YOT4YOm K2Q= IGPhu5U= 5pe25oql IGVudHNw INeh15PXqA== IGFydHk= IFRhaG9l IFNjaGxhZnppbW1lcg== SG9yc2U= Lnph INiy2YXYp9mG24w= IHByYWQ= dW1pbml1bQ== YWRlZWQ= VmlsbA== 6L+Z6YeM5Y+q CVVQ IERpc2XDsW8= IFRFTA== IEF0dHJhY3Rpb25z 15HXldem15Q= INCx06nQs9Op06nQtA== INC+0LbQuNC00LA= IEfDsw== U2VydmljaW9z KGZsYWdz IEtvc292bw== IEluc3BlY3Q= IExvY2F0ZQ== IGdlZHI= INGC0Y3QvA== 2YLYsdmK2LE= fScsJw== aWxlbnQ= IE91dGZpdA== IEJsaXNz IGFicmFzaXZl IGRpY2h0ZXI= UmVuZGVyZWQ= LkZsYWdz bW1tbQ== INOp0LM= 0L3QsNGJ 44OV44Kp44O844Og INC60LXQt9C10qM= IHBpdGZhbGxz IOCmn+Cmvw== IGNvcGE= INiq2LHYp9mF INCz0L7RgNC8 IOW9 INmF2YbagQ== IGx1Y2Vz X1NFUlY= b2dvbmFs IGJlc3TDpXI= IGdvbGVz IFNlaQ== IHdvbGx0ZW4= YWlzaW5n IHbEk2w= IQovLw== LmJpYXM= IHN0ZW1taW5n cGVyZg== IERhcmU= U2FsZG8= SVJPTk1FTlQ= 4LWL4LSx UHV6emxl IGxlZ2lzbGHDp8Ojbw== IGRlc3Bl IHZpZHJv aGViZW4= IHRpcGk= IFJFU1BPTlM= IGhlZsOwaQ== IGRvZGdl 4LiX4Li14Lih IEJlc2Now6RmdA== IGxvYcq7YQ== zq3Pgc69zrc= INin2YTYtNix2LfYqQ== INin2YTYsdiz2YXZig== IOCuruCuow== RERM IFNlcnZlcnM= IFdvcnRl IE5BTkQ= IGNvbW1vZG8= L3F1ZXJ5 IG1lZGljYW1lbnRv b2Npbg== 55u46Zec 4LGB4LCf4LGN4LCf IGRpc2NyaW1pbmF0ZQ== LlBlcnNpc3RlbmNl KSk7Ly8= Ki8KLy8= IE1lcms= IHRhcmFweW5kYW4= SG9seQ== Ly4KCg== IHNlcmU= IHJhw60= INGN0L3QtdGA0LPQtdGC 24zYstuM IHNvbHM= IGlraXdh cHJvZmls IOGDm+GDneGDq+GDoOGDkOGDneGDkQ== CXJ0 IEFjY3VyYWN5 bGXFvml0 IHBvc3Rvamk= INGH0LXQvNGD LmF1dGhvcml6YXRpb24= 4KSu4KWN4KSt IFRTdHJpbmc= IHN1YmxpbQ== IHB1dGVt X1BIWQ== IOC5geC4peC5ieC4pw== IGRyYWluaW5n IHBhc2Fu 0LjQu9C10YI= IEt1YmVybmV0ZXM= cGVjdGl2ZXM= INC+0YfQuNGJ IGtpbm4= 15HXoQ== IGNhcHA= IGZlbsOzbWVubw== VW5tb3VudA== INC60LDRgdGC IOCkquClgeCksOCkuOCljeCkleCkvuCksA== c2VudGVuY2U= IOC4muC4reC4peC4quC4lA== IG5ldHRzdGVk IG5lb2w= CWJlZ2lu 0L7RgdGC0LA= IHRyYW5zbGF0b3Jz INC605nRgNOZ0Lo= IHZpdm9z Z2Fo INCf0LDRgQ== IGZhbW9zb3M= IOCmhuCmquCmqA== IOCwleCwqOCwv+Cwqg== 2pU= IHDDtWxldA== INmI2KfZhNmE2Yc= IGxpbm5p LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Y2tpbGw= X2ludHI= 0YDQvtCy0LDQvdC40Y8= IGFybW9u IOa3uw== IGFobGk= X25vbmNl INGC0LDQstCw IHNldG9yZXM= SnVuaW9y b21icmE= INC90LDQv9GA0LDQstC70LXQvdC40Y8= INin2YTZhdir2KfZhA== 1aHWgNW+1bjWgtW0 INCw0LTQt9GW0L0= 4K6/4K6w4K+B4K6V4K+N4K6V IGdldGVzdGV0 IEdyYW50ZWQ= 4Z6F4Z+S4Z4= IGRlZmluaWNpw7Nu IHJoeXRobXM= UmVzaWQ= IGluc3RpdHV0ZXM= INCx0YDQvtC9 QWRkaXRpb24= IFphYw== IOCknOCkrw== IEJhc2VtZW50 LWVyYQ== 4Kyj IGRvdWJs IE9wZXJhdG9ycw== X1N0YXRpY3M= 4Kq/4Kqv4Kqo IHNvZnRlbg== 2KrYp9ip IGdlaWw= IEx1cw== IHRhbGxh IGFiZ2Vz w6Rsag== KHN0b2Nr IEJyZW5kYW4= IEJhbHRpYw== LWthcg== aXNjdXM= QU1E b3VzaW5l IGp1bXBlcg== aXhhcg== X051bQ== ZXNzYXk= eXJp Wm0= c2hhbGVk IEtvbmluaw== IHJhYW0= J2lyZW8= 4b22 IHlldGh1 IG5hZ3Q= IEVMU0U= IGludmVzdGlnYXI= IMOpY291dGU= dnVsYQ== 4Lax4LeK4Lat IOCwsuCxh+CwpuCxgQ== 06nRgQ== IGVtYmFyYXpv 5LmF5LmF5YWN6LS554Ot5Zyo57q/57K+5ZOB IGluZGl2aWR1bw== 4YOu4YOV4YOQ4YOV dHJhamVjdG9yeQ== IGtva2Vu 4LS+4LSo4LWB4LSz4LWN4LSz IGthcmFva2U= IHdhdGNoZXI= CWFjdGl2ZQ== INiz2YjZiQ== IGlqcw== Lk9Q aXNzaWU= INC/0YDQvtCz0YDQsNC80LzRgw== IENvZmY= YXRpZXZlbg== w7ZydW5n INC/0YDQtdC00LvQvtC20LXQvdC40Y8= IGbDrXNpY29z SW52ZXN0aWc= IFNla3VuZGVu IGxha2k= aWNodGlndW5n IHNhbXRpbmc= Y3JpYmVz 0pvQsNC90LTQsA== INWh1bbVvtW/1aHVttWj INSx1aw= L1N1Yg== 5r2c U2lnbmFscw== IEFNUA== IHZlcnNpb25lcw== 4YOj4YOa4YOQ4YOT IHBhcmFub3JtYWw= IOCwquCxjeCwsOCwquCwguCwmg== IGNvbXBvc3Rh CXlpZWxk CXRz INmF2LnZhtin WU9VUg== c3BpZWxlbg== dWJhdA== bWF0aHJt IOy5nOq1rA== IHBseXdvb2Q= IGNvbnNpZGVyYWRvcw== INix2LTYrw== IOCquOCqsOCqsw== IGRpc3B1ZXN0bw== IFByZXBhcg== IE11dGF0aW9u SUVD INGB0LvQsNC0 IG9sbw== 4Kam4Ka/4KaV4KeH b3RoZXJhcGll INeR15nXlg== IHppbnRodQ== IGN1bHR1cmFpcw== 4LGK4LCV4LGN4LCV 4oCM2YfYp9uM24w= LlN0ZXA= IENydWM= IHRvZWdldm9lZ2Q= 2LnZhNmC2Kk= 0YfSrw== IGJyb3U= IHF1aXR0 2LXZhNip IGdlYnJ1aWt0ZQ== IOCysOCyvuCyt+CzjeCynw== IG92ZXJzZWVpbmc= IHRlY2lkbw== UGVzc29h IGRhZHM= IFllbmk= IE1ldGhvZGVu UmQ= IGludml0w6lz IOCwheCwrg== Ymx5Z3U= IGJsb3Nzb20= 2LPYsdin2KbZitmE2Yo= 16LXqNeb16o= IOyDiQ== 5LiA6IKW5Lit54m5 IMW+YWw= IENQSQ== IG3DpnI= IGVtYmFycmFzc21lbnQ= IENBUlQ= 0YDQsNC60YI= IHVudG91Y2hlZA== L3NvdXJjZQ== 2YrZhNmF INmF2LHZiNix IOC0leC1iuC0o+C1jeC0n+C1jQ== IMOpcXVpcMOpZQ== 0LXQutGB0LA= LC0KCg== IFBEUA== INC90L7Qs9C4 IGluZGly KHZlcmJvc2U= IOCkreClgeCklw== IENvdXJpZXI= dXR1cmVz IFBlcnNwZWN0aXZl IG5lZ2F0aXZlcw== INCd0LDRgdGC IGhhdW50aW5n IOCwl+CxgeCwsOCxjeCwpA== IOCksOCkueCkpOCkvg== IGZsYXZvcmZ1bA== IEthbm8= IGlubGFuZA== LnJ0 INm+2YTYpw== IOi2ow== LWNvbHM= IOCkruCkv+CkqOCknw== VHJpdHVy IGRldGVybWluYWRvcw== SGFtYg== SUND IFJvb3Rz bWluZXI= b2tvbg== IOCkquCljeCksOCkrQ== LlN0b3JlZA== IGthcHNhbQ== YXNrZWQ= Zno= b3Jyb3M= 25Xbiw== IGl6bA== aWJpbGl0w6A= 4YCU4YCy IEvDpHVmZXI= a2FydGVu IExhdW5jaGVy IHJ1aWRv aXBhbg== IHNwb2lsZXI= RW5kZXJlY28= INmK2YjZhtmK2Yg= IGV4Y2VwY2lvbmFs Y2FsYXI= aWzJmQ== yZl0bMmZcg== LmxuZw== KEdyYXBo IHZhaXLEgWs= IGRyaXZlcidz IFsu 5pu05paw5pe26Ze0 8Y6UinBw cXVhcnRh IGludGVydmVuZQ== INC60YvQt9GL YW1rYQ== IGFzcGlyZQ== 44G8 xLHEn8SxbsSxeg== IGdldGFu IHByZXN0YQ== INC20LjQstC+0YLQvdGL0YU= fCgpCg== 0L3QsNC3 INGC06nRiA== SUxMQQ== INil2YrYrA== U2l0dWF0ZWQ= IOGDoeGDoOGDo+GDmg== INCT0L7RgdC/ Q29uc3VtcHRpb24= IOC0teC0v+C0teC0sA== 4LGA4LC14LGB4LCh4LGN IHByb2ZvbmRldXI= IE5hc3Q= IHNwZWNpZmljaXR5 asOkcg== IGVtcGF0ZQ== bmF2aWdhdGU= IHNpbmRpY2Fs U0VH IENpZw== IFplcg== aW1ncw== IEhhbm9p IOCknOCljeCknuCkvuCkqA== IMOpbQ== VGVsZWZvbmU= 55Sf5pel 4YOU4YOR4YOY4YOX4YOY IGF2b2lkYW5jZQ== 1bDVodW21bjWgtaA 5ouT aGxhbGE= U2Nyb2xsaW5n INqp25DaltmK IGtldG9nZW5pYw== IHV2aWplaw== IOCkueCli+CkleCksA== IGltcGxpY2F0aW9u 44OL44Ol44O844K5 IGNvbXBhcnRpbGhhcg== J2luZw== IOCmrOCmsuCnh+Cmm+Cnh+CmqA== KHNoYWRlcg== dm9sbGVu IMO9eWxkYQ== IGJlw69udg== 5ZCO55qE VEVHUg== IEJvbG9nbmE= IHNlbHZlcw== Kycu IGxldmFuZG8= LWNlcnRpZmllZA== X3B1dGNoYXI= YXNrYXI= IM6tz4HOsw== IERpdm9yY2U= INeV15nXqQ== IGlsYWFzb3J0 4Z+Q4Z6Z IEhlYXRlcg== IEFiZXJkZWVu Um9ja2V0 IFJlc3BvbnNpYmlsaXR5 4YCK4YC64YC4 LU93bmVk IEthdHplbg== X251bXM= IFVwaA== LmhpZ2hsaWdodA== IHhhbHE= IHByYXZh 55m65aOy IGNldmE= IGFuZW1pYQ== csOkbmt0 5o+Q6YaS IEVBUg== CWRw IGV5ZXc= IFNlcnVt 0LjQutC+0Lk= IGFtYXJnYQ== OjoqOwo= 4oCZb2JqZWN0aWY= IHN3ZWxs INio2YfZhQ== IGxhaXNzZXo= 5LiN5LiK IGNvbXByaW0= 4Z+S4Z6a4Z674Z6Y INep15nXog== 0L7RgtC90L7RiA== LHBvcw== IHZpYW5kZQ== 4Kak4KeH4KaH IO2VtOqysA== U3F1YXJlcw== IGphdW4= IEdBTA== LnV0aWxpdHk= IGN1ZWxsbw== INei15HXqA== IG5ndeG7k24= IG5hbGE= IOGDo+GDqg== IEdlcmFyZA== IHRocmVzaA== QXJr INC/0L7RgdC+0LE= IOWkqeWkqeeIseW9qeelqGFwcA== IExvaXM= INGB0ZY= 4YOY4YOq4YOY4YOY4YOh wq1saQ== aW50YWFu emlya2k= IGxpYnJh IHN3ZWF0aW5n LW1lZGk= IG1ldWJsZXM= w5cKCg== Z3J1cG8= IEJyb3dz RHV0eQ== IGVya2Vu KG9r INqB2KfZhtqr 5pel5b+X 7J2066mw VGhlbWVz bWF0dGVy UHNp IHZlcnNjaHc= bGVrdA== IHNlYXNvbmluZw== YWRlcm4= IHBlcmVubmlhbA== IEJlcmtzaGlyZQ== X2lub2Rl 4oCZaHVt LWNoYWlu c3RyYXRlZ3k= IFdpbG0= IGTDo28= 4LWC4LSz 5LuK5pma INC+0LTQuNC90LDQutC+0LI= 0YbQsNGA YmVyaQ== 15LXqg== SmV3 IGhlbmtpbMO2 IG1ldGhhbmU= 4LWB4LSV4LSz4LWB4LSC IOGDqOGDlOGDoeGDkOGDq+GDmuGDlOGDkeGDmg== INC/0YDQuNC80LXRgNGD IGJvdW5jaW5n Oys= IGNhbXBlcnM= IHRo4bqvbmc= 0YvQudGL0L0= IGFzc29s ICAgIA0KDQo= IG5hdHVyZWxz IOe9keermQ== IEZsb3JhbA== IGNvbXVuZQ== IOCkruCkvuCkgQ== INqH2o8= INGA0YU= IOCuquCvgg== J10/Pjwv IOuqqOuNuA== aWdodGx5 INCc0rE= IOCquOCqvuCqruCqvuCqqOCrjeCqrw== IMW+bW9u 4LCz4LGN4LCz 4KWH4KSw4KS+ 4Ki/4KiG4KiC INin2YTZhdis2KfZhA== CXBvaW50 UGVzbw== LkVudW1z IG1vdG9jaWM= ZWN0bA== IHByb3BoZWN5 IFNwYW0= 4oCZZWU= IOCwquCwsA== xaF0aQ== INmI24zZhNmK c2NoZWlu IHR5w7Zu IEdMZmxvYXQ= Sm9uYXRoYW4= IGJ1bGxpc2g= KS4q IElWQQ== INmF2LTYp9mH2K/YqQ== IOWQjeS6ug== IHVudHJlYXRlZA== INio2KfYug== INmB2KXZhtmH KHJlZ2V4 IFdoZWF0 4YCZ4YCU4YC5 4Ka+4Kef4KeA yZlzaW5p IGhvc3BpdGFsaXplZA== IOC0tuC0leC1jeC0pA== LXJlZ2lzdGVy IEJveGluZw== IHNrdXQ= IGtow6E= IHJlZ3Jlc3M= 15nXpNeZ150= 1aHWhNWh1bbVuQ== Y2xlYW51cA== IGpvZ2dpbmc= YnVsaw== INmD2YTYp9mF 0L7QstGW dW5ueQ== IGvDvHNpbQ== IGhlZGVm LWJ1dA== IHNwaWxscw== 4K6+4K6j4K+N4K6f IHZhbXBpcmVz IOCqpeCri+CqoQ== IGdyYXBoaXF1ZQ== IGbDtmw= xaF0dQ== IHBpZXJkZQ== IGFjdGlm IGfDtm4= aWxhcml0eQ== IHbDqWN1 4oCZw6lwb3F1ZQ== IGxhbw== INio2YXYuQ== 0LjRj9C80Lg= IHBpZWRyYXM= IEJlYW5z 4LCw4LGN4LCX 4KSw4KWN4KSb IGFnZ3JlZ2F0ZWQ= dW5rdQ== INei15vXqdeZ15U= aXN0w60= IGhhbmRpZ2U= IHNvbWVvbmUncw== IGRlY3JlZQ== INWn1as= INC30L3QsNC90LjRjw== 6YCA5LyR X0JJTkFSWQ== 4YOV4YOa4YOY4YOa IHJlZm9ybWFz CXNvY2tldA== ZWVydA== IHByw6ljw6lkZW50 LnNoaXA= IGZlY2hhcg== PXsh TWFuZGF0b3J5 IHlvdXRocw== IC0tLQo= INCx0LDSk9GL0YI= IGxhdXM= IE5leW1hcg== INGC06nQvNC10L0= LWthbg== J2F1dGV1cg== IGNhbnlvbg== KGxz IHR5Zw== IHNwaWRlcnM= INis2LDYqA== IHNsYWFwa2FtZXJz IFly IHByb2NlZHVyYWw= IGlsYW4= CXRyYW5zZm9ybQ== IE1lYWRvd3M= INGI0LDQstCw0LQ= IHZm INmB2YTYs9i32YrZhg== IOCqquCqvuCqguCqmg== IGNhc3VhbGx5 IOCkleCksOCljeCkruCkmuCkvuCksOClgA== IHJlbnRyw6ll IGRlZG8= KHBp w6hycw== xLFyxLE= IHNvbGl0dWRl IOGDkOGDoOGDqeGDlOGDleGDnA== w7pzYw== UG9ydGFibGU= IHBoeXNpb2xvZ3k= bml1cw== U29tb3M= aXR5cw== IENlcmVtb255 2YbYp9mC IHNwcmVla3Q= IGvDvMOnw7xr 4oCZw6lw IOCkquCkpOCkvw== IG1hc3F1ZQ== IOCyteCyv+CypuCzjeCyr+CyvuCysOCzjeCypQ== IGJyYXVjaA== IE1lc3NpYWg= IGNsYXNzaWZpY2HDp8Ojbw== IENow6J0ZWF1 ZmFicmlj 4Lih4Li14LmI O2I= IGRhcm0= T2NjdXJyZWQ= bm9zdMOt IG5hY2nDsw== IHRzaGVtYg== KVsn KHJvdXRlcg== IGVzcGVyYW1vcw== IGJyaWxsaWFudGx5 X1JFVg== X3RlbXBsYXRlcw== IHRoZW9sb2dpY2Fs IGFhbGxh IG5vdmlh INi02KfZhg== IHRvaXM= IGNlbWVudG8= IG1pbmdsZQ== IOCkuOCljeCkpeCkvuCkquCkv+CkpA== 5Zyo57q/6KeC55yL5YWN6LS5 IGFudGlw dXBsb2FkZWQ= IG1vdXRocw== INGC0L7RgQ== IHZhc3RhYW4= YXJyYWdl 0JrQvtC90YI= IHNpdGk= INGH0LjRgtCw0YLRjA== X25vdGljZQ== IGVtYm9kaW1lbnRz 4LeA4LeD 0YHQvtC8 5oCn55Sf5rS7 INGB0YPRh9Cw0YE= IG1vbms= 0YPRi9C90LA= IHBhcmFtZXRyb3M= IHBvdHRlcnk= 4LK/4LKj IExBQkVM IHRhb2Jo IOCyhuCypA== 4YOY4YOX4YOY IGhpdHRhcg== IHRldWVy 77yM576O5Zu9 IEFsZ3Vub3M= IGhvbw== VHJhZGl0aW9uYWw= INC30LXQs9GM IOCuh+CusuCvjeCusuCviA== IGjhu5M= IHZpZWxlcw== IFNlcmlhbGl6ZXI= IOCmpuCnh+CmluCnhw== IOCkleCkvuCkoOCkruCkvuCkoeCljOCkgg== CXNjb3Jl UGFnaW5hdG9y L3Z1ZQ== LXBhY2thZ2U= b3JkZWVsZA== IHBmdW5h YW5uYWx1 LnNxdWFyZXVw IOCyteCzhg== c2VyaWFsaXplcg== RGVhdGhz J2FpbWVy dmFyaWFudHM= TU9ERUw= IG1pZ3JhaW5l bXNj IHRlbWFu YmxpY2hl IGJr IHBvbGl0aWth IGVsZWdpZG8= IERlcG9z bGlrdQ== IOWkp+WPkeaXtuaXtuW9qeiuoeWIkg== 4YOQ4YOi4YOY4YOh IGJydXRl YXNrZWxs IGNvbnRlc3RhbnRz RmF2b3I= IHVuYXR0 a29sZQ== 4Kq14Kqj4KuA IGRvb21lZA== CU1haW4= IOCwuOCwrQ== 0YHQu9C+0LI= IHLDoW0= b2dnbGVk X18oIg== IHRlcm1pbsOp X3Npbms= 4KuN4Kqk4Kq/ IENvbmZpZGVudGlhbA== b3Vn 77yI5pel IGJhYmVz IGVzdGltZQ== IFBvdXJ0YW50 KEtleXM= dm9pdA== IGNvbnN1bA== 5b+Z Kno= INmF2LnZhtmJ INC30LDQutGD0L8= IOCkquClgeCkuOCljeCkpOCklQ== IGJvbWJl 0rPQvtC0 IHBvdGVuY3k= IEludGVucw== IGTDqWxpdg== IENhcmVlcnM= INCw0LzQvNC+ b3R5cGluZw== b2NvY2N1cw== IG5hcHJhdg== IHBhbmllcg== IEluY29ycG9yYXRlZA== IENPTlNUQU5U IGVsYWJvcmFkbw== IGFwYXJlbGhv T3Bpbmlvbg== dWZmZWQ= INin2YTYrtmK2KfYsdin2Ko= INm+2YjYodmQ IOCkpuClh+CkluCkvw== IHByb2NlZGltaWVudG9z X2RlZ3JlZQ== IHVteg== Q29yZA== IHRhbcOpbg== ZXJ0eXBl IGxlbmd0ZQ== z4TOtc65 OwoKCgoK IGJ1bGx5 xaFhbsSBcw== IFR1bmc= IHdhYXJ2b29y IHdyYXRo INW01b/VodWu IGdlbG92ZW4= LlNvdW5k INC/0L7QvNC+0LPRg9GC IFNFTEY= IGxpZ2Vy IGxhZHI= 0LXRhdC90LjRh9C10YE= LicpCgo= IGx1a3Q= IHVtdWs= Lm1heGltdW0= IHB1YmJsaWNv IGFpcnM= INC30LDRng== IOCuleCuvuCusOCuow== IGFtYXpl IGJpaQ== 56eY57GN R2lybHM= IM+Dz4XOvc61z4c= 1aXVpA== IGduYw== IHNlw6dpbQ== IGVpbmlnZXI= IG5ow6k= ZW5jaG1hcms= RXhjZWxlbnRl 0LTTmdC6 X01N IHN3eWRk IHRocmlmdA== YXVp 5p6q Q09QWQ== UXM= IElOU1Q= c2Vjcw== IFbDvQ== 4LGH4LCv SUxT IGZpbGluZ3M= IHBvc3RzZWFzb24= aXNhbmc= ZGlhbA== IHJlbGlnaW9zYQ== 4Kaj4KeH4Kaw YXZpYw== SGw= IGdld2Vuc3Rl IENvbnN0cnVjdG9ycw== X2ludGVncg== Jyx7 IGVzY3JpdHVyYQ== 5Lqp IHByb3ZlcmI= IGNyw610aWNv INC00LLQtdGA0Lg= IOaguQ== R2M= 5Yqo5oCB5Zu+ LkNyb3Nz TWVn IGNob2s= 4Kao4Kak IGNhbmNlbGxhdGlvbnM= 6K645Y+v IHRyaXN0 INGC0YDQtdGC IFBlcmNlbnRhZ2U= INC40LfQsdC10LbQsNGC0Yw= IGJsb2NrYnVzdGVy aW9uZWxl INKz0YPSm9GD0ps= IFJhZg== IG92YQ== YWtlbmc= IEZV IGZpY2FyYW0= IEF1c3NpZQ== VGFiYmVk IOGDneGDoA== 55yf6ZKx b3Zlag== IGZr LkNvdXJzZQ== cmVmb3Vy IFVzaA== U09MRQ== IGNka3Rm IFBvdW5k IGvDq3I= IGF1dG9tw6F0aWNh CQkJCSAgICAgIA== PXJlcXVpcmU= LkRpc3BhdGNo 4Z6T4Z+B4Z+H 0YjQsNGA0LA= IGVmaWNpw6puY2lh TWFnbml0dWRl LWVuZGluZw== YmVzY2hyZWlidW5n INCk0LXQtNC10YDQsNC70Yw= IHJhbnNvbXdhcmU= 0YfQuNC70LjQug== PUQ= IG9udGRlaw== INin2YTYrtmE2YrYrA== zq/Ovw== IGFja25vd2xlZGdlbWVudA== IGV4dHJhY3Rvcg== IGR1xZ8= 5Yuk5YuZ5Zyw Y2FwaXRhbA== IHTDpHRpZw== IM+Ezq8= X1N5bnRheA== IHBsYXRlZA== INC20LDRg9Cw0L8= IE1lZGlldmFs aGVtaWFu IENMVUI= Lk51bWVyaWM= VHlwZWZhY2U= cGllag== IHN5bm9ueW0= w6lyaWNv IERveWxl LlRl INC/0L7RgdGA0LXQtA== IHZpZ3VldXI= Y292ZXJz 4KWD4KS5 dXN1Zg== eGNj VVJSRU5DWQ== UG91 IG5vdsOp 5byA5aWW57uT5p6c5p+l6K+i IM68zrXPhM6xzr7PjQ== IOCmheCnsQ== cG9ydGE= IGRvZWxlbg== IG1hdWFsdWdh IG5hcG9sZW9u ZXRhaw== ZW50ZXJp IG50eGl2 IOCyhuCysOCyguCyrQ== INWT1aHVt9Wr1bY= 5oyJ6ZKu aGliaXQ= LXNpbmdsZQ== IGxlZnRvdmVycw== dW1sYWg= IHRhcnBl INm+24zYsQ== IFDFmQ== KeKAmQ== b3R1ZA== IHVzYW4= IOG7i2g= INC80L7QuA== dGhpbg== YXJrbw== IHNlZ2VyYQ== IGFwYWthaA== INWm1aLVodWy IHVucmF2ZWw= RXF1aXBv 4YGG IHNob3J0ZW4= 0LTSr9C9 0YLRi9GH CgoKCgoKCgoK IOCotg== bmF0dXI= IHBvaXNzb24= LnVucGFjaw== 5pem IHVwYmVhdA== IGF1eHF1 IG5vc3RyZXM= IOCupOCvgA== IHBpbnRhcg== IHJpY2huZXNz xbx1 INC10LvQtdC60YI= OyI+DQo= aXNjaQ== IHN1YnN0aXR1dGVk IFNPQ0lBTA== IGNsaW5n U3F1YXJlZA== 2KrYsdin2LY= IG5ld2NvbWVycw== 4LGN4LCf4LGN IGJ1bmdhbG93 IEZSQU1F X3Blcm0= INC/0LXRgNC10LE= INio2LA= IG3DtMW+ZQ== IGNvcmRz IGNvbXDDqXRpdGlvbg== bGRi IOWImA== IFJvYWRz IFBhcnRpZQ== IGNhc3Rz IGludGVyZXNhbnRlcw== IM+Az4HOv8+Dz4k= YXN0cmE= IEF0dWE= IOCmqOCnh+Cmkw== IOGDkuGDkOGDlA== IOS8r+eItQ== b3BlbmluZw== IOC0ruC1guC0qOC1jeC0qOC1jQ== zII= ZmF2aWNvbg== 4LCW IFNjdWxwdA== IGlyw6Nv PFNlbGY= IHRva2k= dmVyemVrZXJpbmc= IG1ub8W+ IGRpcHBlZA== IG1ldGFt INC80LDSs9GB0YPQuw== IGluc3RhbGzDqQ== aWphdA== bmd3ZQ== IGluZGljYWRvcg== IGltcG9ydGFudGk= IERvbHBoaW5z IENvb3JkaW5hdGVz IERVUg== IGFudGhvbG9neQ== 77yf44CNCgo= 4YOh4YOQ4YOb X1NVUFBPUlRFRA== IOCkruCkpOCksuCkrA== 2Y/ZhdmS IGNo4bqvYw== X2tlZXBlcg== aW1iYXdh Uk9BRA== IHNvYnI= ZWN0b3JpYQ== IGNhbnRhcg== IHBvc2lzaQ== YWRoYW4= IHNlc2k= SVZFTg== INec157Xqdec eWg= 5YWs5Lqk RGV4 YXN0YWw= dHJ1dGg= 1bTVodW21ag= IOCwteCwvuCwnw== INCx0LDQudC00LDQsw== 77yI5LqM INC/0YDQvtC/0LjRgQ== IHRpcnNhbg== L2JhY2s= INmI2YXYrQ== X1ZJUw== 2YrYr9mK2Kc= zrvOuc66 SGV1dGU= cmVuZGVycw== 4oCmLA== IHJ1YW5n IExpbGx5 XTw8 QW5hbG9n aXR5YQ== IGV4aXRvcw== PXNj IGV2aWRlbmNlZA== INin2KrYrdin2K8= IFByb2Jl IEZldHQ= IEFkdm9jYXRl IG1pY3Jvbg== IG1hbmHKu28= 0JDQmQ== IGZhdWRyYWl0 0L7RgNC+0LM= IOGDleGDmOGDnOGDqg== INCR0LvQsNCz0L7QtNCw0YDRjw== IGltcGxlbWVudGFy X2hvbGRlcg== INGB0YLQtdC90Ys= IE9QRVI= aW5hbGl0eQ== IHdpbmR5 IOabvg== dXNzZWlu IEFwcGV0aXRl IEp1bGlldA== KEFkZHJlc3M= IGRpc2FwcGVhcmFuY2U= IGNvbW11bmlxdcOp INix2YHYtg== IFRvcmU= CUludA== 4LiV4Lij4Lin4LiI JSkuCgo= IOqwgOuKpe2VnA== IM69z4w= X3RyYWRl X1NURA== INec15vXmg== PicuCg== b2RpZWQ= IFRJTEU= ZGl2aWRl b2xpdmU= IFJlZQ== IG1lbmF3YXJrYW4= IE5lZ290aQ== INio2LPYqtmH INKh0LDQuw== CWFuZA== IG3FjQ== 4KSH4KS44KSV4KWH X2FuaW0= INi02KfYoQ== 0YHQv9GD0LHQu9GW IG50YXVi 4LSw4LS/4LSq4LWN4LSq YW5kYWc= LCkK IGJlcmxha3U= IEJlbGU= IG9sc2E= bmFtZW4= IHJlYmF0ZQ== 2YTZitiz X1VVSUQ= IEZFRA== d2luZ2Vu 0LDQtNCw0Lw= INeg15vXldef INiz2KjYqtmF2KjYsQ== IGRpYmVyaWthbg== KENoYXJhY3Rlcg== IOCmj+CmuOCmrA== IHZpbmRv SGlyaW5n IGJydWdlcg== IGluY2lkZW50YWw= zrPOv8+F IGxlZ2Vy LUlORg== IGRhYWR3ZXJr X29ubGluZQ== IGJyYXpvcw== PFN0YXRl IExhYm9yYXRvcmllcw== 6auY5riF5q+b54mH5Zyo57q/55yL IEzDoQ== 546v55CD IGRlZmVhdGluZw== INin2YTYpdmE2YPYqtix2YjZhtmK2Kk= TkVZ bGFpZA== 7J247J2Y IHBhcmFzaXRl IH0oKQo= ZXhwZXJpbWVudA== IGtvcmRh IOGDoOGDkOGDmA== CWZpbGw= IGVzcGFnbg== LndvcmRz IGFuY2VzdHJhbA== YXJpdGg= aGF3aw== ZG9tYWlucw== TWFuYWdlcnM= KCksJw== IG5pZWRy ZW1iZWRkZWQ= IGFuZXN0aGVzaWE= IGVudHJldmlzdA== 4LSk4LWB 4KSy4KWA4KS14KWB4KSh eml1 aWV6ZW4= INio2K/YoQ== LXJlZnVuZGFibGU= VXNy LWNvbmZpcm0= INqJ24zYsQ== IGJ1cnN0aW5n 24zZhtuQ IGhvbWVsZXNzbmVzcw== 77yg77y8KF4= IHNlbnNpYmxlcw== IGlsYXk= eXN0w6Q= IGJhc2Fkbw== cGRldg== 4YCA4YCv INil2YbZh9in d2Vla2x5 IOCqheCqlw== IE5ndXllbg== d2FpdGg= 0LfRi9Cy0Ys= LW1ha2Vycw== IGJhbmtydXB0 IHNpbm52b2xs IGNhbmRpZGF0dXJl IHVzZWlu IEFFRA== IOCkn+Ckv+CklQ== Z3JhZHU= IGluZGl2aWR1YWxpemVk IEFCSQ== SFRUUFM= cGVlcw== V2lucw== YXJjaGE= IHN3b2xsZW4= U3R5 W2xpbmU= RmV0Y2hlZA== IFRyYW4= aWxlZ2E= IFJV IEJsZXNzZWQ= IG1ldHVz IGJhbmtlbg== IOCmpuCmv+Cmr+CmvOCnhw== 5a6M5YWo 2KfZhdmH zrvOuc6/ IHBlcmRp 5aGR Tk9Q IHV0ZW5zaWxz IGNvb2xkb3du IHRlbmRlbmNpYXM= LG1pbg== KEJ1dHRvbg== IE5vcmRlbg== IGtlbnlh X3ZlY3RvcnM= INC90LXQs9C40Lc= IOCqpuCrguCqsA== IFR1cm5pbmc= IGRpc3RvcnRlZA== IG3DtmdsaWNoZXJ3ZWlzZQ== ZW1haWxz cmVjdXJzaXZl 4LiC4LmJ4Lit4Lih4Li54Lil IHByZXZhaWw= IOCqpOCrh+CqqOCriw== IGF0b3M= IGVsZGVzdA== cHJpYXRl ZWRyaXZlcg== Om51bQ== IGdhbGF4aWVz KHRyZw== 4KWH4KSq 27HbtA== IGNvbnNvbW1hdGV1cnM= INC40LfQvA== IHN5c2NhbGw= IGluZ3JlZGnDq250ZW4= IGV4aGlsYXI= LlNwZWNpYWw= INin2YTZhdmI2KzZiNiv2Kk= IG5nZw== IHRyZXRlbg== IFNvdWxz IOCmquCnjeCmsOCmtuCnjeCmqA== YmllZA== 5Lq654mp w6By IEF1c3N0ZWxsdW5n IGFmZm9yZGVk IFJlYWN0aW9u IOCkqOCkv+Cktw== wrsp 2YbYqNin2YQ= IOCwleCwvuCwsOCwow== ZXJtb250 IFhl IG1hc3NpdmVseQ== IOeM IGTDqXBlbnNlcw== KGJ1Y2tldA== IGNyb20= 4YOV4YOQ4YOa4YOY4YOh4YOs IOCwquCxjeCwsOCwuOCxjeCwpOCxgeCwpOCwgg== INi02LHYtw== IG5pxI0= UmVjb3ZlcmVk IExpZA== LXBsYWNlbWVudA== IGjEsXpsxLE= CWNvdW50ZXI= YWthc2g= UmVwbGljYQ== 4YCs4YCE4YC54YC4 IE5hdGlvbndpZGU= 65Ox66Gd IGZpbmFsaXN0cw== 5L2g5oeC IGNhbmFkaWFu IEF1dGlzbQ== KCkpKSkK cmVzdHJpY3Rpb24= LnJnYg== ZnVz IEdlYmlldA== IGFjY3VlaWxsaXI= INC00LLRg9C80Y8= IHZlbmRldXI= IOCmpuCmvuCmrOCmvw== 2LPYqtmI2LE= IHNocmVkZGVk QHN0b3A= IOuMgO2VmQ== 0LTQsNC6 IFNoaW5l IGNvbGXDp8Ojbw== X0Zy 4Kmw4Kic4Ki+4Kis IOCkquCktuCljeCkmuCkv+Ckrg== IHJvZWRk 77yM55So 5aiD KE1BWA== IGxpbmtlcg== IG1vdWxpbg== IGRpZ8mZcg== IHZlcsOkbmRlcnQ= RXF1YXRpb24= JmNvbW1h IHBvc2t5dA== LHJlc3VsdA== IHBhcmzDqQ== IGRhbmU= 0LXRgtGM0YHRjw== Q3liZXI= c3VibWlzc2lvbg== 6ZOt INiq2Ks= IHByb3RvY29sbw== TEFU INiy24zYp9iq IGdlbGly IHsKLy8KLy8= INW01bXVuNaC1b0= IERvd2w= w6lnZXM= INmI2YPZitmB 0LnRiA== IGFhbmdlZ2V2ZW4= IGVpbmdlbA== IGdhc3Rhcg== IGNvbmNv X3RpY2tz IFNi IEluZmFudGls X1JFQURZ 5Lyg57uf LnpvbmU= IGRlY29yYXRvcnM= YnJldmlhdGlvbg== CW9i XERC IERlY29kZXI= SURBWQ== IM6UzrXOvQ== 55Ww IHZlbmdvbm8= J291Ymw= 4Z6Y4Z+J b3RsaGU= 4LeS4La64LeP 16LXlQ== IEZpbGhv IGAi z4nOvc65z4M= IGxvYnN0ZXI= ZXR0ZXQ= 5pel5pma IFRlc3Rvc3Rlcm9uZQ== 4buNcuG7pQ== INC/0L7Qt9Cy0L7Qu9GP IOmdng== LHRlbXA= 0LvQuNCz05nQvQ== 4YCG4YCt4YCv IGRyYXdiYWNr IFJveWE= amFudA== 4K+B4K6V4K6z4K+I IEJha2VyeQ== INin2YTYp9ix IMONc2xhbmRz Y29udmVyc2F0aW9u KGNoYXJ0 IOC4leC5iOC4rQ== cXVpcGVtZW50 IHNldG1hbmE= IHN1bGluaQ== ZW5kcmVz IHRhbWVu IHdpcGVz IOGDm+GDneGDnOGDkOGDrOGDmOGDmuGDlOGDneGDkQ== X3Byb2Jl IHBvxZk= INC60LvQsNC0 IFJFUVVJUkVE IGJpemk= IGNpZW4= 4Z624Z6A4Z+L4Z6R IHByemVz LlJlbGF0aXZl Rm9yZ2VyeQ== INm524zZhQ== dGhlc3Q= LklOVA== IGZvcmts INC00LDRhQ== X2JpcnRo aW1k 4K6/4K604K6u4K+I 4KS44KWN4KSk4KWA 2YfZhtin2YM= IHBydQ== IG1vbm9wb2w= X2hvdmVy Lndw LnN1bGFrZQ== REFD YWRkcmVzc2Vz Qng= 4LS+4LSr 5omS IOGDoeGDkOGDkeGDrQ== 5b2p5aix5LmQ5b2p56Wo YXBhdGE= U3RyYWlnaHQ= IFNBRA== IGFsdmFzdA== IGltcHJpc29uZWQ= UmVtb3ZhbA== L3Rhc2s= IHJlY2xhbWE= INC90LXQs9GW0LfQs9GW 0LrRltGA INC80LXRgNGL IHVucmVhc29uYWJsZQ== Y3lq IOCkquCksOCkv+CkteCksOCljeCkpOCkqA== b3VyaW5n INC40YXRjNOh X1BBQ0tBR0U= aWZmZWw= 77yI6LSj5Lu757yW6L6R Q3LDqWVy IFNsYXZl 4LKu4LON INKb0LDQvdC00LA= VU5LTk9XTg== IEFkZGl0aW9u IOS4gOacrA== X2Ji LnByZWY= IHNpbWlsYWlyZXM= IOW9qeelnuS6iemcuOW5s+WPsA== IHByaXByYXY= dGVyaWVz X1NDUk9MTA== INeZ157Xmded eGJj LnNhbGVz IHBlcnNvbm5lbGxl IGthbm5h SGlu IEVzdGVz 7Iuc7JeQ IFRocmVzaG9sZA== 4LiZ4LiU4LmM 5YGc5q2i ZW5za2k= INWw1aHVtNWh1aw= bW1l IOGeoA== X1JFUVVJUkVE IGNvZXJj INin2YTYs9mK2KfYsdip IGRlbGlnaHRz INC+0YHQvdC+0LLQvdC+0Lk= IGludmVzdGVyaW5n IOCmpeCnh+CmleCnh+Cmhw== LG5leHQ= IGNoaXFhcg== IOCkmOClh+CkpA== YW1hdGU= 0YDRg9GD0Ls= 0LXRgtGA0LA= IOGDpeGDoQ== IOCyuOCyvuCysA== IFVTRUQ= 0LTRjdGA IE1hcnR5 IGJlZWluZHJ1Y2s= 4oCcQW5k eXB0ZQ== L3Bob3Rvcw== YXNqb25lcg== 0YnQuNC90LA= Pj4sCg== INCQ0LvRjA== IERpc2Nv 1aPVtg== 1oDVuNaC1bXWgQ== ZnVsbHNjcmVlbg== IG1hcmNhZGE= X0JHUg== YWJk X0NFUlQ= INGB0YXQvtC0 6LWE5pys 4KSf4KWN4KSf X3NwaQ== 7ZqM7J2Y IGRpc2E= INin2YbZgQ== IEl0ZXJhdGU= IOCuheCusuCvjeCusuCupOCvgQ== IGVuamV1eA== Q0FG ICMjCg== b25pcw== IOyasOumrOuKlA== 0LvQvtGA 4YOY4YOr4YOU INCw0LvQsNKz05nQsNGA0LA= IGNsaW1heA== IOCkqOCkv+CktuCljeCkmuCkv+CkpA== xIFydA== IGNoYWxldXJl IGthZmE= 4Kav4Ka84KeH X3NjaGVkdWxlcg== IGludGVyZGl0 INOZ0YHQug== 4Ka/4Ka54Ka+4Ka4 IOG7pWLhu41jaOG7iw== IElkYQ== dXJhbWVudGU= X3NpZ21h INis2YTZiA== IGRlbsO6bg== IGbDvHJz IOC2nOC3kOC2sQ== 44Gu44GK 06/QuA== O3g= IHB2Yw== IEdyYXA= IOCkquCksOClgOCkleCljeCkt+Ckow== b3Zhbmp1 IGRlc2N1YnI= O2JhY2tncm91bmQ= INC80LDRgNC60Lg= IHRvYXN0cg== IHJhcHBlbGVy INC/0L7QtNC+0Lc= IOGDqOGDlOGDkuGDmOGDq+GDmuGDmOGDkOGDlw== ZXNzZW5nZXI= dmVsb3Bw Q3JlYXI= cHJpbw== bGVoZW0= IHByw7Nwcmlhcw== IOC4hOC4pQ== IGtnb3RzYQ== YXRlcmlh aXNzYW1p IGNvcnJv RnJhZ21lbnRz IE5lcm8= VEVDSA== IOuztOuCtA== IHVwaG9sZA== IGdhbmlu 4KS/4KSv4KS+4KSw IGF0b3JuZXE= c3VidHJhY3Q= cmFqZQ== 5ZCJ5p6X INC90LjSow== IGZyZWVkb21z dWx0cw== dWp0ZQ== UmVhZHM= 4LK/4LKk4LON4LKv L3RyYWlu X0FQUExJQ0FUSU9O VkVWRU5U IERKcw== dWxla2lsZQ== IHNpbXBhdA== LU91dA== 2obYsQ== QXV0aGVudGljYXRvcg== IEdlbmVyYWxpdGF0 INmF2YPYqtio CWN1cmw= zrzOvA== w6lnaW8= z4POuc6/ LlNlcmlhbGl6ZWQ= IG50YXdk 0LjRh9C90L7Qs9C+ 0YDRg9Cx INeh154= IOCmqOCmv+CmtuCnjeCmmuCmv+CmpA== z4DOv8+Fz4HOsw== IOCmruCnh+Cnnw== IG5nYXI= IEtpbmE= IGdyw7w= KFVwZGF0ZQ== IElFTA== b3Nzb3M= IGRlc2VuYw== LWRlc2M= IHByw6p0cw== bmdlbGVz 4LKf4LON4LKf4LK/ Zm9obGVu IOW9qeelnuS6iemcuOS7o+eQhg== CWRpcw== IEFUUw== IG3huqFuZw== dXNlcHBl X2Nvb3JkaW5hdGVz 4Kqt4Kq+4Kq1 IGRvdWNldXI= INmC2KfYr9ix YW1wdWFu QXV0b2NvbXBsZXRl aW1lc3RvbmU= IGZhaHI= INGB0LLQvtCx 5Y6G5bGx5aSn5Y+R Lmludm9pY2U= INiv24zYqtuS LXJ1bGU= IOGDkOGDqOGDqA== PSJc IGVudmVsb3Blcw== IOGDmOGDoeGDlOGDlQ== IGV4cGxvaXRz IGRlYmF0ZWQ= IG5ldXRy IG1lc3Npbmc= 0YLQsNGB IGlsdXM= cmVzb2x1dGlvbg== ZXR1ZA== IM60zrnOvw== IEZlcm5hbmRleg== 65SU7Ja0 aWRpbg== X0VER0U= IHNvZGVs U3RhYmxl IEZL IGNlYXNlZA== KEdyb3Vw YW1heA== IEpvcm5hbA== LmVtcA== IHZlZ2Fy IG11c2s= Z2luZ3M= IFBlcmc= IEdsb3Vj IGN1cmxz IGFic3RyYWN0aW9u IOCkruCkvuCknQ== bW9kaWZpYWJsZQ== IHRyYW5zbWlzc8Ojbw== IE1t IENhY2hlZA== IG9rdmly IGVwaXPDs2Rpbw== CXJlcG9ydA== IERIQ1A= IOC2muC2u+C2sQ== INmB2LTYp9ix INmF2K3ZhdmI2K8= IGltcGF0aWVudA== IHRlbXBlcmFtZW50 YW50aW5v IFNlY29uZHM= 54qs IMib aW5kZXJlbGxh 2YjZhtqJ X0ZMQVNI IGluZm9ybWllcnQ= IHN1ZmZlcmVycw== 4Kyf aW1waW4= INC40LPRgNC1 RHVz IGlzYm4= INi52qnYsw== PkA= INi42YfYsQ== INGF0LXQu9C1 ZWxlcmluaQ== IOCwpOCxhuCwsuCwv+CwuOCwv+CwguCwpuCxhw== 0J/QvtC8 aW1iYW5n CWNsaWNr IGNvbnRlbnVz IGFzc2VtYmxpbmc= IHrDpGhsZW4= SVNUUlk= IHR1cnRsZXM= IEZBQQ== 6riw7IKs IFR1cA== IHBhdGhldGlj X3Byb2Nlc3Nvcg== 4Ka+4Kan4Ka/4KaV INS71bbVuQ== IGdlYmllZGVu IGNvbmNlcw== a8O8bg== IHRyYWVy IEVyZG9nYW4= w6BuY2lh IHBhc2nDs24= T1JJWkVE IHZhdHRlbg== IE5pcg== IEdW 157Xqdec15Q= INCx0L7Qu9C90L4= IOuLpOyatA== INC30YDQvtCx 5LmF5Zyo57q/ IHRvcnJl IGNvbmNsdXPDo28= INW41b7WhNWl1oA= 4Lix4LiV4Li0 Tm9n 4Laa4LeU IFNjYWxh IOCqnOCqteCqvuCqrA== 2K/ZiNmK2Kk= IENvbmNlcm4= IGF3YWtlbmluZw== bGljZXI= IHR3ZWVu IHBzaWg= Lk1PTlRI IHBpdGs= 0Y3RjdC9 IGFrZWg= IHdpbGRjYXJk IGl6cmE= IGNoYXJtcw== IGN1c3RvbWFyeQ== CVJvdXRl 0YLQtdGA0L3QsNGC IFJhbWFkYW4= 44OV44Kn Y29uZmlndXJlZA== IGJ1cmFkYQ== IGh5w7Y= LU1l L1RS INCw0LvQtNGL0L0= IHNwb2tlc3dvbWFu Y2hhbXA= IOCmnOCngOCnsQ== U0FWRQ== IGludGVueg== IG11ZXJ0b3M= IGNvbnN1bWly X1VUSUw= IHZhcmlh b2xpbmk= 4YOi4YOZ4YOY4YOq YXRpaXY= IFZhc2Nv LnVzZXJkZXRhaWxz IOCuqOCuvuCusw== UkFE amFsYW5hbg== INCh0YM= Q29tZW50YXJpb3M= 0L7RgdC40L8= U2FsYQ== CUlm IHNtYXNoZWQ= IOCqquCqn+Crh+Cqsg== 54G+ KHNoZWV0 b3duZXJzaGlw IGNhc3VhbHRpZXM= IGphbWE= IEFtaQ== INmI24zamNmH INGC0LXQu9C10YTQvtC90YM= IOCkquCljeCksOCkpOCkv+Ckr+Cli+Cklw== IGJpc2V4dWFs c3ByZWNoZW5k 6JKC cGxlZWc= IGdlbsOn IHZlc3Rpcg== IFNtcw== IGVudGZlcm5lbg== INC90L7RgNC80LDRgtC40LI= IHNtdHA= L0FQ INGA0YvQvdC+0Lo= INGD0YHRgtGA0LA= cGFydQ== IEVyaWU= 4oCZaGFu CUFjdGlvbg== 1aXVrNWo IGxvZ2lzdA== TE9PSw== IG11dXRh IOGDm+GDkOGDmg== ID0k INin2YTZgdi12YQ= IFBldGl0ZQ== X2pvaW50 INiz24zaqQ== IHNwb8WC IEdyaXA= c2l6 X0NC 0LDQu9GM0L3QuNGF IC8vJw== aWZpa2E= IFdpZWw= IHN1c2NpcGl0 YmVncg== dW1hbA== KHByb2Q= IOa7oQ== bWlr IEdyw7xuZGU= w6FsbsSb 6ZuA 44G3 IGVsZW1lbnRhbA== a2Rpcg== IOGDk+GDkOGDoeGDoOGDo+GDmg== IFNwcmFjaA== xLFsYXLEsQ== bWFzY2hpbmVu INi22YXYp9mG 77yM77yM INmH2Ybarw== RW5naW5lZXJpbmc= INC60YPRgQ== bW91c2VvdXQ= KGxvZ2dpbmc= a2Fq YXN5b25hbA== IHNvbHZlcw== IGZvcmdpdmVu 2KrZitit 5Y+W44KK 0LDUpdKz0LA= IGZldWlsbGU= bcOm INCz0YPQu9GM IE11eg== X3Byb2Jz acWfbGk= aGFiYQ== INm72ow= TUVTU0FHRQ== RERS IM6Vz4DOuQ== LWh0bWw= INm+2Ko= IERoZQ== ZXJla2U= YXdhaXRlcg== IE1vZGVsaW5n INmH2KfYqtmB IE1JTEw= IGJydXM= WVBUTw== IGJldm8= INC20LXRgNC00LU= IEFUVg== 5p2l55yL PSN7 IHByb3N0aXR1dGlvbg== 7ZmA IFN0aXRjaA== TUVB IGNoYXU= IEF0bW9zcGjDpHJl IExpYnJv IEJpbGJhbw== IElsaQ== IFJvbmQ= IERpeG9u 5pyq55+l IOCyqOCyoeCzhuCypuCyv+CypuCzhg== IOCqsuCqiOCqqOCrhw== aXZpbg== IGLDqA== 0L3RltCy IExpY2Vuc2luZw== INi02Yk= 6JmV dGhyZW4= ZW5zY2hhcHBlbGlqa2U= IG1vZ28= IHNlZ2ph bWFuZXM= IHByb2dyYW1hY2nDs24= IFRpZWY= IOCknOCliOCkuOCkvg== IERyaW5rcw== IENlYXI= TWljaGVsbGU= IFByb2NlZHVyZXM= IG11bGlndA== L2NvbXBvbmVudA== YWJhZw== 4YCE4YC2 IE1hZ3lhcg== INio2KfZhtqp KGh3bmQ= IFNlbmVnYWw= INGF0L7RkdGA IHRhcnY= IHNjaWVudGlmaWNhbGx5 IOCmuOCnjeCmrOCmvuCmuOCnjeCmpeCnjeCmrw== IGlycmF0aW9uYWw= 0pnQsNC8 ZW5naw== IGh1cnJpZWQ= X2Fzc2lnbm1lbnQ= IHN1cGw= w6Bycg== INGC0LXRgNGA0L7RgA== INGF05nQsg== LdGL0L0= INCT0LDQsw== IHNvZmlzdGlj IFNhcmFqZQ== IExJQw== z4TPgc6t IGdyb3NzZXNzZQ== IEJsb2M= 0LDQsdC4 YWJ3YQ== IFdyZXN0bGluZw== RGlzY2FyZA== L3JvdXRlcw== INep15DXnA== 4oCN4LSj IEZlbW1l IGppbnQ= INeT15HXqNeZ150= 5ZC+ IG11c2lt IHN1b3M= IE92ZXJmbG93 cGV0dA== LnByZXNz wq0K 4oCZaWdpaHVndQ== 7LmY66W8 IHVkZA== IGxhbmdhZ2U= INCy0LvQvtC2 IGV2aXRhbmRv LWVxdWlwcGVk IGNob2Q= IGx1ZHpp aWpkcw== IGFpdXQ= IGFudGhlbQ== IHNvw7E= dWx1Z2Fu IGJyZXdlcg== IGRhbnljaA== IGdlbmVyYWRv dGVyw6dh 0YDRg9Cz0LA= IGNvdXZy RGY= IOC4reC4suC4ouC4uA== IENyZW8= IG1vdmFibGU= XX0sCg== IE9uZXM= IFRob3VzYW5k INiq2LjZh9ix 5oCn5oSf IGFjZWw= c3R1a2tlbg== IGJlZWluZmw= dW5rZXI= 5YG35ouN6KeG6aKR INmF2YbZh9mG IFBlbnRydQ== 5Zyo5Lq6 aWRpcw== Q2xheno= 5a6d5a6d IE5lcnY= IGtlaGlk iuGfkuGeiw== IER1bXBz 4LK/4LKC4LKk YW5uaW4= 4LS44LSt IGdp4bqj IFNoYW5n INGI0YPQvdC00LDSmw== INCy0YvQutC70Y7Rhw== IENyYW5l bmdvaW5n IGVudGl0bGVtZW50 w6lkw6lyYXRpb24= YXppb25hbGU= IE9icmln JiYo IGVoa8Ok INGB0LDQvdCw X2Nsb25l IGfDqm5lcm8= KFJvbGU= YWdoZXI= IE1QRUc= IOCoh+ColQ== 4Liy4Lii4Liq4Lix4LiV VHVubmVs X2Vudmlyb25tZW50 IHNpZ25pZmljYXRpdm8= IGVpbnN0YWs= INGD0YfQtdGC0L7QvA== IHZpbmVz IHRhxZ/EsQ== J2FjdGl2aXTDqQ== 2LHZiNi0 IHByb2li YmFyZHppZWo= INCw0LbQuNC70LvQsNCz0LA= IHRyb2Jhcg== IOyVlA== IFRyZWZmZW4= IE5kaQ== Lk1hcmtlcg== X0FHRU5U b25uYW5jZQ== INCg0Y0= INGH0LDRiA== IGdzbA== IGJpcmE= IEV6ZWs= IEdpeg== IOy5qA== IHRhbWJhaGFu IEtlaW4= INiy2YjYsQ== INmI2LLbjNix2KfYuQ== 0YTQvtGA0LzQsNGG0LjRjw== IGJ1c2Nhcw== aW1lZGVsdGE= ZGJn IEJ1cnI= IG5ldHRldA== IGxhYmk= IHBvc2Vibm8= YXNlbQ== IEZpamk= bGltaW5hcnk= 7L8= v+WQjQ== X0FTU0lHTg== RmluZ2VycHJpbnQ= IOGAmeGAvQ== IHJlY29ycg== IOC0heC0quC0leC0nw== ZHVyY2g= IGVuY29udHJvcw== O3I= IGFkcXU= IGltaXQ= Lm9yZGVycw== IOCyteCyv+CynA== Tk9W X1J1bnRpbWU= 4YOU4YOa4YOo4YOY IHBvdGVy cG9zacOnw6Nv KHNlcXVlbmNl IHNlY29u IOCwuOCwguCwpuCwsOCxjeCwreCwguCwl+Cwvg== IOCmheCmq+Cmv+CmuA== YXJwb3E= IHBscw== IGltYWpv IHBhbmRh c2NoaXJt INm+2LHZiNqY2Yc= eGhy IHdlbGRlZA== IEludml0ZQ== IHRzbGludA== INmI2YrYpw== IHVpdHN0 bG9o IEJyYXZl IHV0aWxpc8OpZXM= IFBDQQ== 5bOh IHlhcHTEscSfxLE= IGpvbmdlbg== IHBhZg== INC40LPRgNGD0Yg= RXN0b3M= 0ZbQt9C00ZbSow== Z3fhu6U= IGd3YW1u KHBsYWNl VkFU INCa0L7QvNC/ INC/0LvQvtGF0L4= IHV3bw== INCz0LXQtw== IOCmtuCmv+CmsuCnjeCmqg== 0Z/RjNGL0L3Rn9GM IE1pc3Rlcg== 4KWJ4KSw4KWN4KSh Ikw= 0LDQs9Cw0L0= ZW1wbG95bWVudA== ZXRoZXJldW0= IHN1cGVyZsOtY2ll QWNoaWV2ZW1lbnQ= YWxpbmU= IHZvb3JzdGVsbGVu IEJhc2E= IEtvag== INGB0YPQsg== IGhlY2hh IOWQieelpQ== IHdhcnJhbnRlZA== aW5zYW0= ICgpKTsK INen16bXqg== 4oCcU28= 4KSw4KWN4KSX4KSk IOCuquCvi+CuqeCvjeCusQ== INin2YTZhdi02KfYsdmD2Kk= 7LKr IGdlcm1z emVyaQ== INC10LTQvdCw IGFkYw== YXN1bmlr ZG9p IOS4gOWPtw== IGdhcmFnZXM= LmVudmlyb25tZW50 IFB1dHRpbmc= w610cw== IEdhc3Ry 2YHYp9mI2Ko= IE1hZ251cw== 4Liy4LiZ4Li4 d2nFm2NpZQ== INCl0KU= b3JwaW9u 4LiE4Lin CW5v IEJyZXRhZ25l IG3DunNjdWxvcw== IGlkw6lhbGU= IG9icmlnYWRv INKb0LDRgNC+0YA= IENw ZHVyZXM= emHEhw== YWRpa2Fu ZmFzdGNhbGw= 5pmL 4YOr4YOY IFZvb3JhbA== IOagoQ== IHNvZ2VuYW5udGU= IHVzb3M= ZmlsbG1lbnQ= IHRvZGVsbGE= IGNvbW11bmlzdA== W2xlbmd0aA== IOCkheCkp+CljeCkr+Ckr+CkqA== UENJ ZXNkYQ== 0ZbQutGD IG11dQ== bmFibGU= 77yM5LiK IOCmleCni+Cmn+Cmvw== aHg= IG9uZGVyaG91ZGVu IOCkleCkpQ== INC/0YDQvtCy0LXRgNC60Lg= XToNCg== U3Vh IE5pZW0= IG1lbWJhd2E= IGFkaWNpb25hbGVz dG5pbmdz INGF0L7RgNC4 INmI2YrYsQ== IERldmk= IFBldw== IGJpbGVy IGtk z4TPjQ== 0LTQtdGD X1dJREdFVA== IOCuquCvhuCusQ== IMOhaHJpZg== 44CC5omA5Lul LXNoYXJl INin2YTZh9mI2KfYoQ== IG5lZGVuaXlsZQ== YWludGVyZXM= IGRvbm7DqWU= INeU15nXlw== IE9wZmVy IGNobG9yaW5l b3V6 RXh0cg== IOS5kOebiA== INin2LPZuQ== INiu2YjYr9ix2Yg= 0L7QvdGM LFE= a2VsZXRhbA== IFNZTg== RGViaXQ= LUZyYW5jZQ== IFBlcm1pdA== LWV4aXN0ZW50 IGdlbWFr IG1vdG9yaXN0cw== cm9jZXNzaW5n IHVpdGVybGlqaw== IFBpbm90 INCQ0YDQuA== 4LmA4LiB4Li14LmI4Lii4Lin 0ZbRgtCw IEFjcmU= IEJhaHJhaW4= IOuCrg== cmVuZXc= IGJ1YmI= aWNhw6fDtWVz INmD2Yk= IEdsb3c= 55av INiq2LTaqduM2YQ= IG5hdGlvbmFscw== 0L7Qu9C20LA= 5Y2S IMWfyZlr 0YfRg9C9 aWdodGVk aXJlY2Npb24= zrrOtw== IEFGRg== 44Os44O8 INC40LzQtdC10YLRgdGP X2R3 O20= IEdyZWVud2ljaA== IG1xdHQ= INC60L3Rlg== aWdub3JlZA== IE9seW1waWE= 4LK/4LK44LKy YWx0dXJh IHRyYW5zaXRpb25pbmc= 2LPYt9iz cGVh IG1pbmVk IHBsYXF1ZXM= IHZyb2w= eGluZw== RnJvemVu IFdvcmtzaGVldA== IOC2muC3hQ== YW5ndW4= LWVi VG9ybw== 4LSh4LS/ 0YTQtdGA0LA= IFJldmVsYXRpb24= 2YbZitin2Ko= IOC0uOC0ruC1gOC0qg== 0LDRgNC60L3Riw== xLHFn3TEsXI= IGNydWlzZXM= IHJlc3RhbnRl UHJvZHVpdA== Q291bnRkb3du YW1hbmE= bGl5aQ== IOydtOufrO2VnA== L0RlbGV0ZQ== INCy0YvQs9C70Y/QtNC40YI= XFZhbGlkYXRvcg== X1NUQVRT INmI2LnYr9mF IGZlag== IHN1ZWRl IOCwn+CxjeCwtQ== 16bXmA== INGC0L7QsA== IFNwaGVyZQ== QWZmZWN0ZWQ= IHByb2dlbg== IMO6bmljb3M= 5Yip55uK IM68zrXOs86xzrs= IG9tb2dv IGRvbWluYXRpbmc= zrvOr86/z4U= IHNtb290aGluZw== INin2LHYqA== 4YOQ4YOc4YOY4YOY4YOh IGRlZXBjb3B5 IOGDoeGDkOGDmeGDmw== 0YLQtdGC IHdpZWxk 4Ki+4Kiw4KmH IEJvbHRvbg== INOp0L3RltC8 0YPRgdGM YXJzaW5uYWF2b3E= X1JFR0VY ZXJnZW5z X2dhbGxlcnk= INC60LLQsNC00YDQsNGC X3dhdGVy IHjhu5U= IHt9Ow0K IE9yb21peWFh LW15 IFRydQ== 1aHVo9Wr1oA= IGJyaXR0 IHNhdWJlcg== LmZyYWdtZW50cw== IFBlcnNvbmFsaXR5 4KWN4KSw4KWA4KSo 2KfYptiy2Kk= IEdpdmVhd2F5 YWdpbmk= IGNvdXJ0ZQ== a3bDpm10 IHNhdmFpdA== ZWxsZXk= IHNsdWdnaXNo UmVtb3Zpbmc= JeS7peS4ig== IG5hdXdlbGlqa3M= IHJlY3Vyc2l2ZWx5 LWZpcmVk KHB1c2g= IGJldm9sa2luZw== 4KSw4KWH4KSV ZmluZGluZw== YXrhu6U= IExhdXJlbA== IExORw== IGVzdMOhbmRhcg== IEFDSw== IHNvY2Rh INCg0L7RgdGC 4KSc4KSy IHBvZXNpYQ== IOC2uOC3jw== IEhhYml0YXQ= IOCmrOCmv+CmtuCnjeCmrOCmrOCmv+CmpuCnjeCmr+CmvuCmsg== LWFsZXJ0 IHBhc3NhcmFt INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10Lw= IHRvbXRv IEhhaXQ= IOCkquCljeCksOCkleCkvuCktuCkv+CkpA== b3Jvbg== IExpbWl0cw== IEpvaG5zdG9u IFDDpA== 0LLQsNCy X0ZST05U IHJlc2l6ZWQ= IGF2ZW5pZGE= IGZsb3R0ZQ== 2YrYqtmH R3Jvd2luZw== IG9vdA== LnlhaG9v INi324w= IGNhY2Fv X0lSUW4= INW01avVt9W/ IMO+dXI= T09TRQ== xLF5bGE= LlRoZXk= IOCkreCli+CknA== IOCuqOCusuCvjeCusg== LVfDvHJ0dGVtYmVyZw== IyMKCg== ICovOwo= IHVuaXE= IGxpYmVyYWxz zrzOv8+B IEd1dGU= IHVuYW4= IPCfjA== LWxvdmluZw== 2qnYqtix IGN1Y2luYQ== IE1vbWVudHM= YXppdW5z 5rGX IFp5 aWxlY2U= 6rCA64ql QmlvbWVkaWNhbA== LWluY2x1c2l2ZQ== IM6yzrHPgw== IOyeke2SiA== 2Y7YsQ== 0LjRgdC/ INix2KjZhdin aW9uYXRl Uk9QRVJUWQ== LmpmYWNl IM+AzrHOuc+Hzr0= INin2YbYs9in2YbbjA== Lk1vbmdv IOCmleCnjeCmt+Cmrg== aGFpbg== w6RocmlnZW4= IGNvbnNpZ24= ZXhlcmNpc2U= IOCqr+CrgeCqtQ== dW5rdGU= w6JuZGlh ZW5zaXZlbHk= UmF0 VmVoaWNsZXM= IEJyb29rZQ== IGVyZ2lidA== IGlnYXo= IGRldm9pZA== IGR1YmJlbA== YWdoYW4= aXZhbGV0dGk= IGFuYXJjaA== SVN5bnRheA== L25pZ2h0 INin2YTYudix2LY= KFVTRVI= IHN0ZWxsZQ== 2YrZhdin2YY= 5YKz LWdvb2Q= IE1hcmw= IHZpZXJkZQ== X0RyYXc= IHVuaXI= IFZvcnN0YW5k TGV2 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IHN0b2NraG9sbQ== 4LiE4Lij4Lix4LmJ4LiH IE5hcGE= QW5jZXN0b3I= IGJlbmk= Jyk7Pz4= IOC4nuC4o+C4o+C4hOC4neC5iOC4suC4ouC4hOC5ieC4suC4mQ== 2ZDZhA== IOCkuOCkmuCkv+CktQ== IExvdWQ= IHF1w70= yJtpZWk= LmRlZXBjb3B5 INmF2K3YsQ== 0Y/Qug== 0YDRi9C10Lw= IHNpZWdl UHLDqQ== X091dA== INGA0LXQs9C40L7QvdCw IOGDlOGDpA== IM60zq4= TmV1 INCx0YvRgdGC0YDQtdC1 IHJhcmVz IHNvbmE= 4LiW4Lin4Liy4Lii4Liq4Lix4LiV4Lii4LmM INGC0LXQvNC1 INmI2YTYs9mF2LTYsQ== 4oCdKA== INC+0L/Rj9GC0Yw= CXB1Yg== IG5hbm9wYXJ0aWNsZXM= IOCyh+CypuCzhg== IGNyaW91 a3LDpGZ0ZQ== 15DWt9ec15g= IGRlZGljYQ== L1VTRA== IE1hdGVv IGhqZW1tZXM= INC/0L7QstC+0LTRgw== IG1lZGl0 IOC0ruC0uQ== INGB0LrQvtGA0L7RgdGC0Yw= IOODnw== IE1vdGVs bGVq IGxlYnlp IEF2b24= INmK2KjYr9mI INCx0LXRiNC1 0LDQvdGB0Ys= IHNwZWQ= INmF2YLYr9mF IGxhZGQ= IExlYXZlcw== IEhlcmM= 6aKE566X IE5TRGF0ZQ== KnY= 4KS/4KSV4KWN4KSk IEZ1aw== IHPDrcOwYW4= INCx0L7Qu9C2 dG9vbg== IG1vbnRhw7Fh INC/0L7Qu9GD0YfQsNGC0Yw= INGB0YDQvtC60Lg= IGNvbXBldGVuY3k= w7pzc2lh IFJlc2l6ZQ== IG1hcmx1aw== IHnDvHI= RmF2b3VyaXRl CWlv IGPDom5jZXI= emluaG8= bGl2ZXQ= aWNrw6lobw== Lmtl 2LTYsdin2KE= 1KXQsA== IGNvbWJpbmVyZW4= IHVvbW8= IHZlcmk= IHJpbmQ= KFJlbmRlcg== 0LDRgtC10LvRjNC90YvQtQ== QXNpZ24= 4K6Z4K+N4K6V4K6z4K+B4K6V4K+N4K6V4K+B IEJpcmNo IHVuZ2c= IGZhc29u ZWNvaW4= 0LDQvdC00LDRgNGL IOaipg== IOGDkOGDk+GDkOGDm+GDmOGDkOGDnOGDmOGDoQ== YWlzc2Vy 0JHQsA== IHRva28= RGVjbGFyZQ== IOGDkuGDkOGDk+GDkOGDoQ== IHBsYW5lbg== Y29taW5ncw== 5Lic5Lqs54Ot IEJlY2tlcg== cHJlZmVyZW5jZXM= IGF2ZXM= 0qPRi9C30LTRiw== IGjDqXJvcw== IGNoYW5j INC60LDQttC00L7QvA== IEV2ZXJlc3Q= IGphcmRpbnM= IGVzdHJlbGFz YXJ0aWdl Q2FybG9z IG1hcnJvdw== IOCmuOCniA== cXVpbGxh IOCmpuCmvuCmgQ== IHBhcmtlZXI= CW5ldA== IHNvbW1ldA== U3VnZ2VzdGVk IHRpcGU= UmFjaGVs IElEYXRh dGVpbGVu INeR15DXqNel 2KfYtdix IExseQ== IOC0ieC0nw== IGxlZ2FsZXM= INCw0LbTmdCw 5ZCm5YiZ YWNhxJ/EsW7EsQ== IFNhbHpidXJn IOC0rOC0vuC0pw== TmhhcA== YWJhdw== IFJlY2hudW5n IOCkuOCksOCkleCkvuCksOCksuClhw== IOCqnOCrh+Cqnw== IOCmreCmvuCmlw== IG1vcnBob2xvZ3k= RGFuY2U= IHdoYWthbWFoaQ== IGxlYXNlZA== IERyZWg= INGB0YPQv9C10YA= IPCfkw== 77yM5ZCM5q+U5aKe6ZW/ 4Laf YW5kdA== 0LDQudC00Ys= IHJlbnRz RMOpY291dnJleg== YWlv b3ZhbmU= IHZ1eA== R1JF 24zYqtuM 4LGK4LCo4LGN4LCo4LC+4LCw4LGB 7Ji1 0KHRgtC+ IOCyquCypOCzjeCysA== TExV IExldnk= 5YWQ 0YLQtdC90YHQuNCy IElDT04= IGbDqnRlcw== IGRpcmVjdG9yYQ== IGFtZXJsYW4= 77yM5YaN IGludGVyY29ubmVjdGVk YmlsZHVuZ3M= IHJleA== IEVnYWw= IFRpZGU= IOCqhuCqpA== IHdpc2hsaXN0 eW5jaHJvbm91c2x5 IENoaXJvcHI= IFhYTA== VkVSU0U= QFBvc3Q= 0LbRgw== 5rGh5p+T 5oul5pyJ LmF2ZXJhZ2U= IFNpbGRlbmFmaWw= LkRpcmVjdG9yeQ== IHNwZWN0YXRvcnM= 4K6o4K+N4K6o INin2YTYqtmB2KfYtdmK2YQ= IHZlcmtzYW0= X3N0YW5kYXJk aXRzb25nYQ== 4KSV4KWN4KSk4KS+ IHRoZXJtb21ldGVy IOCqq+Cri+Cqnw== IHNob3RndW4= Q293 UFZD dWJhbg== IGR1c3R5 INeg15nXpg== RGV0ZXJt IEJsb25kZQ== IFBlb3BsZSdz IHByw6ljaXNpb24= X09wZW4= IEpvaG4ncw== ZWxkZXQ= VGltZWQ= cGxvcmU= 6YO95Lya LUNsYXNz IGhha2k= IHV4 IFBvcHVsYXRl IExlZ2lzbGF0aXZl IHZvcmF1cw== IGFzc2Fp IHBvc2lhZGE= KEN1c3RvbQ== aHVydA== INGB0LzRi9GB 4KSo4KWN4KSa bGV2YXRpb24= IG5pbmV0eQ== IHNlYWQ= IGd1cmU= d2VyZWxk 4oCZaW1wcmVzc2lvbg== 4KWB4KSt4KSv4KWL ZXRvcg== IEhhdGNo IFdhdGVybG9v IHNlbGVjdG9ycw== Z3JpZmZlbg== 0LjRgNGD0Y7RgtGB0Y8= YXlhdA== IGFwcmVuZGl6YWdlbQ== xaFuamU= IEFzaGU= IHdld2U= IHN0w6FsZQ== INWh1bM= IlQ= IHNuaXBwZXRz KCkpKQ0K U2Vucw== aW5uYW1vbg== LmFkYXB0ZXJz IENhbWRlbg== IOC0huC0sOC1i+C0lw== IGNvd29ya2Vycw== IGNlbHU= IHBlbGk= cmVjZWlwdA== IHBhcmNvdXI= IGtlc2VtcGF0YW4= IHJlbWJvdXJzZQ== IEJvdWdodA== IGRpZ2l0YWxlbg== IOCmq+CngeCmnw== d2lh VGltZXpvbmU= zr3PjA== IE1TSQ== 4Kat4Ka+4Kas IHRpbmNpZHVudA== IHRlbcOhdGljYQ== 0L3QvtC9 IEJvd2xpbmc= IGVudG91cg== IHNhbmF0 IGltbWE= aXRhdGlz 15fXlQ== ZmFt 4LSc4LSo LnBhY2tldA== INCy0L/QtdGA0LLRi9C1 a2FuaWU= IGR1cmHDp8Ojbw== cnVoZQ== 2YjYs9mB INmF2KfYr9ip IGRlcHJpdmVk ZWxvbmdz IEJveWQ= IOyCsOyXhQ== INGP0LfRi9C60LU= IOCmruCni+Cmnw== IENFVA== IFRjcA== INio2YfYsQ== X0VESVRPUg== IGVsZXZhZGE= INqa2oE= IEPDoQ== IG1hxb4= 44K544Kv IFBpYXp6YQ== L2Jn LlRPUA== ZW55dQ== IHRyYXZhaWxsZXVycw== xZ9pbQ== X2Zvb2Q= LiIsDQo= IGVmZml6 IHhpdg== IHBhcmFtw6h0cmVz IGVsbGlwc2U= WlQ= ZXN0cmlhbnM= IOCkhuCkpuCkruClgA== IGRuYQ== IGZsaXJ0aW5n U2xpbQ== IFFpbg== 4YOU4YOa4YOb4YOQ INGC0L7QstCw0YDRiw== IOGDn+GDo+GDoOGDnOGDkOGDmg== IOC0teC1gOC0o+C1jeC0n+C1geC0gg== 0LXQt9Cw INS/1aHWgA== IGJlZGVua2Vu IG9mZW5z J0Ft IGF1dG9pbW11bmU= IEJvZ290w6E= INC30LDRgdC10LQ= 4KS/4KSX4KSk IExlaXRlcg== a3Rpb25z IHRyYWJhamFu IENvbXBsZXRhYmxl IFlvcg== IGt1bm4= IOWkmuWunQ== IGFiZ2VzY2hsb3NzZW4= YXNoeQ== IG1hZ2FzaW5z Z8Ok IOCkieCkpuCkvuCkueCksOCkow== Q29sZQ== ZXNzb3Jp INiq2KfYqw== IFpo IHRyYW5zZm9ybWE= IFN0cmFzYm91cmc= INC+0LHQstC40L0= VHJpZ2dlcnM= QEJlZm9yZQ== 0KLQvg== UmVjb21tZW5kYXRpb24= IHphY3o= IGJhbmk= Lm1hYw== KGFnZQ== IOCqueCri+CquOCrjeCqquCqv+Cqn+Cqsg== IG5nZXVuYWFu IGPDoW1hcmFz IOCmr+CmvuCmsOCmvg== IGJlc2xpc3Npbmc= L2Vudmlyb25tZW50 IHNpaW7DpA== QnJ5 IEdhcmFudGll IGF0YXRpbGx1Z3U= bGVzaA== IHZlcmFudHdvb3JkZWxpamtoZWlk IHJldXNlZA== IGVud2VyZQ== SUFURUs= cmVzZXJ2 IOCmuOCnjeCmrg== cHJpdHM= IEFwcGxpYW5jZXM= 4KSa4KSy IEVsbGVy Lk9i 0LDQu9C+0Z4= emFk IGTDqWPDqHM= IGJ5dA== 0LDQsdC40Ls= IOC0heC0quC1h+C0leC1jeC0tw== IGRlc2t1bmQ= IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== Pyk6 IGhpbmdlcw== b2Zlbg== eXNlcw== IGFycmVnbG8= IGNlbnRlcnBpZWNl IOC2r+C3kA== UExFTUVOVA== YWJjZGVmZ2g= 0YPRjtGJ0LXQuQ== IHBlbHZpYw== TWg= IGdp4buv IOadoQ== INeQ1rfXoA== PD4K IGZvdG9ncmFmw61hcw== IGRhbXM= 2YHZiQ== IGRvd25n IHZpbnQ= 4LiO4Liy4LiE4Lih X2Rpc3A= KHBo 5LiL44GV44GE IHBvbGl0aWM= Q29tbWE= 4Lit4Liy4Lir4Liy4Lij ZXJpdHVk IE1vZGVyYXRvcg== IERlbGljaW91cw== IG1hc2tpbmc= 4oCZaW5zdGFsbGF0aW9u INC/0YDQtdC/0LDRgNCw0YLRiw== IEhlcm1lcw== IOi+k+WFpQ== RU5TSU9OUw== IOCksOCkv+Cktg== 4bqhcA== IGl3dQ== cGVydGk= IGNvcnJlc3Bvbg== Lm9yZGluYWw= IGFsdHJh IGh5cG9j ICghKQ== INC80YPRgdGC INWw1aHVu9W41bI= IHV0YmlsZA== IGhlYXRz xI1ub3N0aQ== IOCmuOCmv+CmpuCnjeCmp+CmvuCmqOCnjeCmpA== IGJhcsmZZMmZ 4LKw4LKC4LKm4LOB INCi0YPRgg== INmE2KfYudio IOGDm+GDruGDkOGDoOGDkw== Qm9hdA== RGVjbGFy eGZh 4LK+4LKl IGRob3c= IFFGaWxl T3c= KGAK IOGDl+GDkOGDleGDkOGDkw== IGZ1bno= IFRlbWE= IFZvdGluZw== OlZFVkVOVA== aW5laQ== IGNvbXBsZW1lbnRz IGdsYW5kcw== IGNoZWVyaW5n IEFzaW1pc21v IHphdQ== INGB0LjRhQ== IHF1aWVyYXM= IGnFn3Rpcg== IGludGVuc2VseQ== IGtvbnRha3Rhbm5vbnNlcg== W1sn IOCmuOCnjeCmleCngeCmsg== LWpvYg== YWxraW5n IGthbnRlbg== INqp2LHYr9uM2Kc= eGxhYmVs Y3JpYmVy INW21a/VodW/1bTVodW01aI= IG51b3Zl RmlsdHJv wq1k IEZyaXR6 IGlybcOj IHJlZ3Jlc28= IG1hbmlmb2xk U1R5cGU= LnRw RWNv 4KyH RGlzcG9zZWQ= IOC0leC1i+C0o+C1jQ== IEFzcGhhbHQ= IMWhdGE= b3BvbGl0YW4= IMWbd2lhdA== IG1hbGhldXJldXNlbWVudA== IGNhcm5hdmFs cGxpdHM= IHRva3M= INC80LDRgdGI 6ZmM INin2YTYtdmI2Ko= IGhhYXN0 4KeH4Kav4Ka84KeH IOCmtuCmsA== 55qE6K+d w7ZsZg== 0JXQlA== IGRlc2VydmluZw== YXlhbnQ= IGFwb3N0YXI= Y2hlbGxlcw== INmI2YLZgQ== IHRpZg== IOCmq+CmsuCnhw== IO2MgA== IOCupOCuseCvjeCuqg== INC/0LXRgdC90Lg= INmF2KzYp9mG2Kc= IHRoYWlsYW5k dXRhbmdh 4Kik4Kiw IEVtb3Rpb24= INin2YTYtdmG2KfYudmK2Kk= UlNB Lk9S 0LXRhtC40LDQuw== IHJldmlzdGFz IHBlcmE= Q29tcGF0aWJpbGl0eQ== UHVuamFi dGhlcm1hbA== IS0= IEJPVA== IOyhsOqxtA== IOCkquCkvuCksg== 5ruk IOCuieCumeCvjeCuleCus+CvjQ== bWFycw== 4Z6Y4Z+S4Z6W R3Jvc3M= 5ou+ INC+0LHRidC10LPQvg== b25lbnQ= IGNvbmZpc2M= INC80ZbQvdC00LXRgg== ICjigJ4= X0NSRUFURUQ= 6ZKI5a+5 LcOlcg== JHRleHQ= LnBlbQ== INin2YTZg9io2YrYsdip INiu24zYp9mE 5aix5LmQ572R L2RlbW8= IFNPUlQ= IHN3aW5nZXI= 0YTQsNGA0LzQsA== INiq2YjYsdmJ IGVudMOobsOodA== IG1peQ== IFZlcmhhbHRlbg== w7Fleg== aWJibGU= IGNhdGVycw== IEZlcnJlaXJh IHRla25vbG9q LWFo4bul IGFyYWxs IFBhcnRpY2lwYXRpb24= IHNjaGVy 0YDQuNGE UHVlcw== IENvbXBvc3Q= 4oCZZW5k IHB1cHM= IHZpbmd0 IGF6ZQ== ZW5pZW5kbw== IOCqrOCrgOCqnOCqvg== CWRzdA== IGdvbHM= IGluZGlyZQ== xaFldg== aGFzYQ== INCx0LXRgNC1 IGthYWw= 0JXQndCY IEdyYW5kbWE= IFRPTQ== c2xhc2hlcw== 0L7RgNGC0YM= IGNlbnk= 4Ka44Ka5 IFNvbW1pZ2U= IOCmrOCmvuCmqA== IGprdW4= IGNvbmNlbnRyYWNpw7Nu IGluZWZmaWNpZW50 IHBhcmVjw61h IEVmZmljaWVudA== X2Nsb3NlZA== IENIUklTVA== IOCqheCquOCqsA== KGRldGFpbA== 0LvQuNC50LM= X21lZGl1bQ== INGE0LjQvdCw0L3RgQ== X3Zpc2l0 IGNvbnRpZ3VvdXM= IGJpYmxpb2dyYXBoeQ== IG1heGltaXppbmc= IGRlc2t0b3Bz eGVi IG9yaWdpbmF0ZQ== bmlzdA== IGtha2k= IHJpZ3RpZw== 2LLYp9iy IEpkYmM= IHByb2Z1bmRpZGFk aGF3bQ== 0L7QstC+0Lw= c3Rr IGluaWNpYWxtZW50ZQ== Lmdyb3VwYnk= IOCmqOCmv+CmpOCnhw== IGN5dG9r IGFkYXB0ZXJz YW1pc2Vs cmVkZW50aWFscw== c3RyY29udg== 4YOn4YOQ4YOg IEdpcA== IFZlcnNpY2hlcg== IGRvdXI= IHJpcHBsZQ== w6JuZQ== IGJlcmk= IFRlaHJhbg== IOC4iOC4sA== IGl34buNbg== TG91 44CB5rC0 67KI7Ke4 ZWN0cw== IHlha25p IOCupOCviuCutA== CWdsbQ== xJ9l 4LCC4LCy4LGL4LCo4LC/ IGt1c2U= X3NhdmVk IGluZGln dWx0aW1hdGU= IFVQREFURUQ= Q0FMTFRZUEU= IEF1dGhvcml0aWVz aWJ1cg== YWZhdA== aWNhY2l0w6k= IGNvbnRlbmFudA== VGhlbQ== 4LmE4Lin 4Kam4Kao4KeN4Kak IGNoZXRl IOydtOqygw== IHZyaWVuZGlu IHBsYW50aWxsYQ== IG3DtmNodGVzdA== YW5raW5k VGlueQ== 4LS/4LSo4LWN4LSk 0LDRgNCw0Lw= IGlybcOjb3M= 64Gd IEFsZ28= X0JMVUU= IHZvaXZhdA== YmNyeXB0 emVpY2huZW4= INC+0YLRgdGD0YLRgdGC0LLQuNC1 4LCw4LGN4LCk IHNocnVicw== IOGDk+GDlOGDng== X3Nob3J0Y29kZQ== INC00L7RgNCw0L3QtA== IFNwZWNz IGV2YWN1YXRpb24= fTsKCgovLw== b3JhY2xl ZXRlbGU= RHJ2 cXVldGFz 4LWB4LSk4LS/ b2hsZQ== KHBpbg== 4LS+4LSw4LSj L3Nlc3Npb24= INWh1bzVodW+1aXVrA== 4oCM4LCy4LGB emVw INee15DXnA== INeR16rXldea 15zXpQ== IG1ldHJp IGluc2VjdXJpdHk= S0hS TsOlcg== Y2l0aWVz IE1vdXRo IGNvbnRhcsOh 4buw IGhhc2hlcw== IG1hbmRhdGVz IOqzteqwhA== 5YGa5aW9 55ar5oOF IFBST0RVQ1RT 4LWB4LSV4LWN4LSV4LWN INqq2KzZh9mH IHRvbnQ= IHZvcm5l IGVsZWN0cm9kZXM= IGN1ZmZz IExhcmF2ZWw= IHVpdHN0ZWtlbmQ= IEFjY29yZA== IHBlbnNv INGH0L7Qsg== IG9saG8= YXZhdGU= KGF2 IHByZWN1bQ== IGdlbcOkw58= OiIpOw0K IGZha3VsdA== dXnhu4Vu IHBhxb4= 0LHQtdGC IOCkuOCkvuCkruCkqOCkvg== aG91c2luZw== IGFzdHJvbG9n X0FDQw== INC40YHQutC70Y7Rh9C40YLQtdC70YzQvdC+ IF9fX19fX19fX19fX19fX19fXw== 4KSs4KWB4KSV INC/0YDQvtCy0L7QtNC40YLRgdGP IEJhxZ9rYW4= IGNvdWw= Q29lZmZpY2llbnQ= INeR16nXoNeq IOC0teC0vuC1vA== INGP0LE= IOaIkeWSjA== IHBlYXQ= IFNob3djYXNl aHlwZXI= IGlobWlz IE93bA== 5aaC5LuK IGNvbnTDqW0= b29rZWVwZXI= IGRvbWluYW50ZQ== IHNvbGFpcmU= 5p2D6ZmQ 2KLZhNip YWNodGlnZQ== IG1pbnV0YQ== IFJlcG8= IHpuYWs= YW5pbmU= IHBsYWlubHk= IGJhaGF3YQ== bGluaGE= IHNwaWxsZXI= IHBvdmXEhw== INiu2YjYp9io 5bCW aWR1cw== 15XXoNeS16LXnw== U1g= 4bqtbQ== IHBlbmRpZGlrYW4= 0YPQu9GD0YM= IHN6w7xrcw== bmVlbg== Lmdj 5oCh IG9ic2NlbmU= IHRyYW5o IHRyaWFuYQ== SHVu INCy0LDRgNC40LDQvdGC0Ys= INit2YE= IOCmtuCmv+CmleCnjeCmt+Cmvg== INmG2LPZhA== aGV0dG8= X2ly IE1lbmRlcw== IGJ1c2llc3Q= INmB2LHYp9mH2YU= 4Kqw4Kqo4KuH 4LmJ4Liy4Lin 4KWN4KSa4KSw YW5pdGl6ZQ== IEV4dGVuZA== INC50LjQu9C4 IHjhu60= IHR0bA== INmG24zZhQ== 66Gk IEFyYWc= IM6vzrTOuc6/ INec15LXkdeZ YWNrbGU= IG7DqWNlc3NpdMOp CWZpbmQ= IHRlc2lz IFJlZmxleA== 06nQu9Op0YA= OnJpbmc= IOCmruCnhw== z4HPic69 IGNhZGVhdXg= U2hlbGY= IOm6uw== LmZvbGRlcg== IEZyZXF1ZW50bHk= w7c= 4KS+4KSw4KS/4KSk IHJlbW9kZWxlZA== INiq2YjYrNiv IGVmZmVjdHXDqQ== IGRyZXQ= aWxpZGFkZQ== IElX YWtoaQ== IHRvb2xib3g= Y2FsZXI= QW55dGhpbmc= IG5nZW54YQ== IOODhg== KHN0eWxlcw== INC60LDQutC+0LU= X3NlbmRlcg== X2dhcA== YXJyYWlkaA== 2LTYp9i3 IG3DqXRhbA== Sk4= UkFURQ== IGluZnJhZXN0cnVjdHVyYQ== INiq2K3ZiNmK2YQ= IHBhcmNlbGE= IGTDqWZpY2l0 RG90cw== INin2YTYt9io2YrYudmK d8OkcnQ= 0LTTmdC5 INGC05nRgNC40L8= YWt0ZW4= IGhlbG1ldHM= IERhd3Nvbg== IHLDug== IGNvbnRyb2xlcmVu X2xvZ2lj IOCwleCxgeCwnw== dGFpcmU= YWRvbW8= IOGDk+GDkOGDoOGDqQ== INC/0LDQsNC70LjQudOZ0YI= INCx0L7Qu9GM0YjRg9GO IFRpYmV0YW4= IHPJmW4= IG9uYmVr X0JPT0s= IG1vbWVudGVu 7IKs7JeF IEVzdG91 IOC0puC1h+C0tuC1gOC0rw== INC/0YDQuNCz0L7RgtC+0LLQu9C10L3QuNGP 4KSw4KWN4KSW IOCkl+Ckr+Clhw== IGTDqXZlbG9wcMOp IFByZWduYW5jeQ== IHphdnLFoQ== IFlpZWxk IOCkheCkguCkpOCkv+Ckrg== IFJlY29yZGVy IOC2uOC3lA== 0L7QutCw0YI= Q0RBVEE= INCz0YDQvtC80LDQtA== IEVsZWN0cm9u INC00LXRhA== QUdFRA== INGD0LvQsNGA0L3QuNKj INGF0YDQsNC90LXQvdC40Y8= LUxlbmd0aA== IEJvbGE= aXNlYXV4 IOCuheCusOCumuCvgQ== CWpvYg== IMOubnM= LnVm INCw0LjQsdCw0YjRjNGA0LA= IOCwmuCxguCwuA== IG1pbGxpYXJk 0YfQvdGL0Lk= IOCkqOCkv+Ckpw== IGbDtnJzdA== IOCkleClh+CksuCkvg== IENPVU5UWQ== IG5ldXJvcA== IOCqnOCrh+CqteCqvg== IHRhcGlz IOC5geC4guC4p+C4hw== IHJhcGVk INeq16Q= IHZpbmV5YXJk IGFhbmJpZWRlbg== IEFjaGV0ZXI= 7Lm07Jik UGh5 IGpzdGU= KENhbWVyYQ== LGZpbGU= INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC4 c2hy c3Bhcms= IEZyb2c= eGJl IGxhdHRl CQoJCQo= YW5ub3VuY2U= IHZvaWNlZA== IG1lZGl0ZXJy IGxlbmdrYXA= IHNvbmlj UmFkYXI= QU1FU1BBQ0U= 0pPQsNC7 IG9hdHM= cGln IGhlcnN0ZWw= IEF1dG9m IGxpY2VuY2lh IHRpamRqZQ== cHRvbXM= 15XXnNeo IGx1aXN0ZXJlbg== IG9jYXNpw6Nv IFllYXIncw== 2bnYpw== IHZlcmVuaWdpbmc= ZGVhdGg= IOCmieCnjuCmuA== IFPDtg== IFN0dWRlbnRlbg== TmluZQ== IOCqheCqguCqpg== IG1hbmFuYQ== IOCmtuCnjeCmsA== INC00LDQstCw0Lw= LmNvbnN1bWVy IGFwcm92YcOnw6Nv IOuwqeyLnQ== LuC4qg== KHNpZ25hbA== IOCwl+CwguCwnw== LkZhbHNl JyksCgo= 4K+I4K6v4K6/4K6p4K+N IERhbW9u 4Kuv 6Imz IGFudGHFrQ== z4POuc6s V2lsZGNhcmQ= LmNvbm5lY3Rvcg== IGFzc2Fzc2luYXRpb24= IE1pY3Jvcw== INC805nSkw== 4Kem4Kem INCw0YLRgNGL0Lw= 4Z694Z6T 4LKw4LOG4LKm INC90LXQv9C+0YHRgNC10LTRgdGC0LLQtdC90L3Qvg== IHN1bGlmZmU= bW9yZ2Vu IFVuaXZlcnNpdGVpdA== INC+0L/QuNGB0LDQvdC40LU= IOCqheCqqOCrgeCqrQ== Yno= IGRva29u IG5paW5p IG1lbG9kaWVz IOCkq+Clh+CksA== 5Yid5b+D IHRyYXZlcnNhbA== b3JxdWU= 4Li54LiZ 0LrRgtGD0YM= Q3Jpc3Q= IOC4lOC5ieC4p+C4og== IFJL IEvEgQ== c21vb3Ro IGVpZA== KENvbGxpZGVy IGhvcml6b25z IHZlcmxhbmdlbg== IG51bWVyb3Nvcw== 5omL5py65a6i5oi356uv cGxlaW4= INiu2LfYqQ== INC+0YHQvdC+0LLQsNC90LjQuA== 0LrRg9C70Y8= LXdvcmtlcg== IGFydHdvcmtz IGh1cmRsZXM= IGhlcm1hbmE= w7Nj IGfDtnLDvG50 7Z6Y IOCkr+CkvuCkpA== IG94aWRhdGl2ZQ== IGVuY29udHJhcsOhcw== IGvDoQ== IOGDkOGDmuGDkeGDkOGDlw== IHByZW9jdXBhw6fDo28= aG5h JTwv IFJlZG1p IOCqleCqvuCqsOCrjeCqr+CqleCrjeCqsOCqrg== KGZha2U= INCy0L7RgdGM IHByb2NlZGVy IGZsYXZvcmVk IHBhZHg= IHJhaW5pbmc= eXVt IFNwYXJ0 15nXk9eZ150= IGFsYXR0 IMmZbGFx IElydmluZQ== IOW9qeelnuS6iemcuOWPr+S7pQ== 4Ka/4Ka44KeN4Kaf IOCmpOCngeCmsuCnhw== RmFt IOCyqOCyvuCyteCzgQ== IOGDmeGDo+GDmuGDog== IGJpYXNoYXJh CW12 UHJleg== IGdlbWVpbnNhbWVu IGJlaG91ZGVu IHBsYXlhYmxl IHByb2ZpdGllcmVu IGNsYXJhcw== LktleXdvcmQ= UGVuZA== INC60YDRi9GI ZmVybQ== 44GX44KD IGllcg== IGhvY2h3ZXJ0aWdl INC00LDRgw== IEVBU1k= IHNlbXBsaWNl IEF0dGFjaGVk IGRlY29ycg== IGdldmVzdGlnZA== IGxm 4LWH4LSc4LWN IHptYW4= w6R0dMOk YWlueWE= IGRvd2xhZGRh KCkuJw== IHJlY3Vz IG5paWRlbg== IGRpcmV0YQ== IG7DpGh0 IHBvdcW+w612 4LKu4LKo INCw0LTQsNC/ IGF0aXR1ZGU= 4Lii4LiZ INiv2KfYudi0 0YPRgNGD0Yg= 0qPQtdC7 5LmF54Ot 6ZqP5ZCO IGdlc2VsbHNjaGFmdA== IOCkpeCkvuCkqOCkvg== IGxhbmNlbWVudA== Um0= X3VzYg== IGJ1cnN0cw== IERhaGw= IHlvdW5nc3Rlcg== LWZpeGVk z4PPg86x V1NUUg== Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t cGFra2luZw== INij2KzZh9iy2Kk= INCw0YDRhdC40YLQtdC60YI= xaHEtw== IOCkquClgeCkl+Clhw== IHlpbmU= IGTDqWZpbmly aWFtaWVudG8= 56ql 4LK/4LKw4LK/4LKv IOCuh+CusOCvgeCuquCvjeCuqg== IGphc21pbmU= ICcvJywK IHN0cnRvaw== X1BST1ZJREVS cmVubw== INmI2KfYpg== QUNJVFk= IG9ubGFyxLFu IHZlcnN0YW5k 56OB aWxsZXQ= IOCmqOCmpg== IGJlYXN0cw== KCI7 IGZ1bmRhbWVudGFsZXM= IHNjcmVhbWVk IOCyleCyguCyoQ== IGVybGVpY2g= YWFubmc= RmFyZQ== IGJpc29nbm8= IHVub3JkZXJlZA== 546W546W 5Lul5YaF X1BJUEU= QU1PUw== IHRyYW5zZm9ybWFjacOzbg== QWdyZWU= 5Ye656ef aWJvbmc= IHN0b2Q= IGhhbGI= IG9yaWVudGHDp8Ojbw== INCx0LDRiNKh0L7RgNGC INC/0L7Qv9Cw0LQ= IHBhbXA= X1NDQU4= IHZlcm5pZXV3 4K6+4K6o4K+N4K6k QVZFTA== QXJjaGl0ZWN0dXJl IEzDpG5nZQ== IHBvcHVsYWlyZXM= QXBwZQ== R3JhZg== IEphcmRpbg== IE1lbmRvemE= IGRpbm9zYXVycw== XCJd T21z IG1hdGFwb3M= IOCksOClgeCkquCkjw== IG5kbw== a8OpbnQ= 2YfZiNmF 4Ka+4KaZ4KeN4KaX IE1hZg== IGFrdXQ= X01BR0lD KXsNCg0K 0YnQuNC60L7Qsg== IHVuaWNv IOCmquCmvuCmrA== IG5pc28= INC/0L7RgdC10Ls= 5oiQ5p6c CWxvZ2lu IGdvcmdl TEg= dWlkcw== 4LK/4LKX4LKz4LKo4LON4LKo4LOB 4K2A IGt1bWI= Rm9ydHVuYXRlbHk= IOq3uQ== IHJvZGFkYQ== KCkpCgoK IGl2b3J5 IFByaW56aXA= KEJvb2s= LmRpcmVjdG9yeQ== LU5v eWxhYmVs 6L+Z5LmI 4oCZw6ljb25vbWll asOr X3J3 IELDrG5o IHZlcmxpZXplbg== c29pcg== IGludGVncmF0aW9ucw== IGluZmlsZQ== 7Ja17JuQ INiv2KfYptmF2Kc= 4YOV4YOQ4YOa4YOY4YOh4YOs4YOY4YOc IEhhbWJ1cmdlcg== Y2VpdmVk IHBlbGFuZ2dhbg== IHNlbWFudGljcw== IHRyw6g= IOyhsOq4iA== X0RT X0NVUlNPUg== 2KfZhNiz2YTYp9mF INC80LXQsdC10LvRjA== LA0KLy8= IOCqquCqueCrh+CqsuCqvuCqgg== IEJhcnJl IE1vdmVycw== ZXNpZ24= IGLhu6VnaOG7iw== IGRpdw== Ym9va21hcms= X2Nvdg== Lk5vZGVz INCk0L7RgtC+ IOCmleCmvuCmsOCnjeCmrw== IGRlYW4= IOCqteCqluCqpA== IFNsZWVwaW5n YXJkxLFy INCx0LDRgNGL0L8= 6aOv INC60LDQvNC/ IHRoxrA= INin2YTYp9i3 IEViZW4= KCkl 4YOQ4YOg4YOY4YOh4YOu KGNhc2U= IHRvbGVyYW50 4KaV4KeI INin2LHYsti0 4KWH4KS24KWN4KSv IOCml+CnjeCnsA== IGNydW5jaHk= YW5hbHlzZQ== IGltcHJlc3PDo28= IGRpbmVycw== eW5hbW8= IOCwruCwguCwpOCxjeCwsOCwvw== INmI2KbZig== X1NJRw== d2Vpw58= aWh1YWh1YQ== IGFidXNv zrvPjQ== cHJvZmlsZXM= yZlsyZli 44Gn44GZ44Gt IG5nYWs= QWNjZXNzb3J5 INi52LHZgQ== INC40LTQtdC9 X3N5bg== IGVzdHLDqXM= 4LGB4LCk4LGL IGV1cm9wZW8= UG9vbGluZw== IG5nb2Jh INKv0YLQug== 15nXnteZ IFRlY25vbG9naWE= INiv2YfbjNiv IFBsYW5uZWQ= 0YLQsNC4 bGFkYQ== IE5vc2U= QVRPUlM= IE9wZWw= IGNvbm1pZ28= IFN0cnVjdHVyYWw= IGxvd2Vycw== ZWRldg== L3R1dG9yaWFs INC90LDRgdGL IOyDneyCsA== 4LKf4LOB4LKC4LKs aW5jb3JyZWN0 dXJhbmdp IHPDpGtlcg== IERpc3Bvc2FibGU= 4oCN4LSV4LWN4LSV4LS+4LSw4LWN IG9wZXJhZG9y IG5hZ3BhcA== IExX IHRzaGk= IHJlc2VydmVy IEJpb2xvZ2ljYWw= QXJ0cw== 5Yab5LqL INeT15nXqA== J8OpcA== X1BXTQ== INGF0L7RgNC+0YjQtdC8 IOCmquCnjeCmsOCnnw== 4Lix4LiZ4LiU4Lix4Lia 15XXpNeq L2Fj LWVmZmVjdHM= IGhlcm1vc2E= VHdlbnR5 IEVsaXNhYmV0aA== INWk1brWgNW41oE= 5Zyo57q/55S15b2x IHdvbWVucw== IGdsw7xja2xpY2g= IHVkcw== IEdhdXQ= LdC40L0= IExvYWRlZA== IHB1ZGVy dGHDrQ== IEJvbHNh 4YOU4YOR4YOU4YOR4YOh 5Yi35paw IFJlcXVpcmVtZW50 dXJuZQ== IGhpw6diaXI= QmFja3dhcmQ= 4LWH4LSx4LWN4LSx4LWN V2lyZWxlc3M= IEjDqQ== IFZHQQ== INGB0YPQtNGM IGFyZHU= eW5uaWc= aWtleWk= SUxP QnVkZHk= ZXJlbmQ= IEJpb20= KHBheW1lbnQ= X2FzdA== INC/0YDQuNC90LDQtNC70LXQtg== Lnh0 4K6a4K6/ KGRp INGC0LXQu9C1 4KWN4KSV4KS+4KSy b2t1xaE= YW5kYWs= b3RpcG8= LgoKLw== xYM= INeS16LXpA== IG1pbmNl IEN1cml0aWJh 4LmB4Lir4LmI4LiH IE1lcmxpbg== INqP2YrZhtmH2YY= IFBvc3TDqQ== IHN3YWxsb3dlZA== aWN1bHR1cmU= IEdpbmE= IOCkquCkmw== IOCkuOCljeCkteClgA== X2dj IOGDluGDlOGDkw== IEluY2VudA== 4Ka+4KaV4KeN4Ka3 INi52YLYqA== KC4u Xyk7Cgo= IG9uZGVyd2VycGVu IFRydXN0ZWVz YW5hbG9n IGthYmxh INCy0LDRiNC40YU= IOCwpuCxh+CwtQ== z4bOsc+B 2pHbkg== 0LjRhtC10Lk= 6Kaz YWNpZW5kYQ== 4LKC4LKs4LKw4LON XCIi INGB0L/QtdGG0LjQsNC70LjRgdGC0L7Qsg== IGphc2E= IHZlbm5lcg== 66Cs aXJhbmph X2NoZWNrcG9pbnQ= INC40L3RgtC40YU= IGNvbXByYWRvcg== INmF2LnZhQ== 0JjQlA== dWZmbGVz 0LTTmdC9 5oC76YOo IHF1ZXVlZA== 15nXoNeh15g= IGhhbmRzaGFrZQ== IG9yZ2FuaXNpbmc= IOCkrOCkr+CkvuCkqA== INiv2LHYsw== dW1tZXQ= IHN1YnR5cGU= 0LDRgdGC0LDRgA== IM+Dz4fOv867 INmC2KfYsQ== IOCkreCkv+CkoQ== INin2YHYstmI2K8= Lm12cA== cG9ybm8= c2l6ZXM= IHN1c2M= IGRvd25yaWdodA== IOG6uW5p IHRlbGV2aXPDo28= dW5kZXJzY29yZQ== IG5hc3plag== IHRyYWU= IFRhbmdv IOC4geC4teC4rOC4sg== IGtlZW55YQ== 4LKq4LON IFJUVg== 5aSV IHBsZW50aWZ1bA== IHpvc3RhxYI= IOC0qOC0v+C0sQ== aXR0YW5jZQ== INmF2LTYqg== IHNpdWxpdHRhYXM= LlJlZ2lvbg== IGRhbGE= IGJhYnU= INCx0YPQvdC40qM= R3JlZ29y IGtpbGxlcnM= VGw= LWFhcmFs IGzDqWly KG5k UHJvdA== IHZvbHM= X1ZBTFVFUw== 4LS04LS/4LSV4LWN4LSV4LWL4LSf4LWN IHBjdA== INei16HXpw== ZWNlcmE= Sm9yZGFu IHZpZGVvag== LlNraXA= 15jXnA== IGZsdXR0ZXI= eXJpYQ== IGJvbGR5 IHVyesSFZA== IGNsaXF1ZXo= KioqKioqLwov IFRoYW1lcw== IExhbWFy 4YOQ4YOn4YOd4YOk aWNow60= IEZI IHNvZ2VuYW5udGVu IHNraW0= IHlsYWJlbA== X3Rw Lk1vbg== aXRpYW4= IGNvbXBldGVuY2lhcw== IG9kbQ== IEZhbWlsaWFy IGjDoXR0 4K6v4K+N IHZpxaE= INC+0YLQu9C40YfQuNC1 Q2FiZQ== IEFkdmFudGFnZXM= KGRk IGNvbnN0aXBhdGlvbg== L2Vycm9ycw== IOadvg== IOGDleGDmOGDk+GDoOGDlA== INiq2LbZhQ== IGJ1ZG91 dG9n IGlzdHJh 44KI44KN44GX44GP IHVuZ2E= 6ZuG5Lit IGJpZGE= IGFncmVnw7M= IOeUteerng== IENhcmxh LkhPUklaT05UQUw= IOuGkw== IH19Igo= 0LXQvdGM0LU= IHBlcnNvbmFsaXphZG8= IExvdXI= IGdyYW5pdG8= IEZ1bmRhw6fDo28= 0LjQstC10YI= c3lzdGVtcw== IHNpdHplbg== dW5jacOzbg== aWR6d2E= IGVuY2E= IOuyiOynuA== IHZpY2VwcmVz 44CC44CB IGFsdm8= 4LS/4LSa4LWN4LSa4LSk IG1lbmdoYXNpbGthbg== bGlua3k= IGPDonQ= IFJlbmV3YWJsZQ== UnVt IGJp4buDdQ== IOWUkA== IGlkaW9tYXM= KGNvbG9ycw== INCy0LjQtNGD LmlkZW50 IGNvbnNlcXVhdA== IENoYW1icmU= IG9tZW4= IHRhb25h Z2xpZWRlcg== X2Fic29sdXRl IOCwteCwv+CwteCwsA== IG1lZGl1bXM= IGF1c2VuY2lh xrDGoWk= dml2ZQ== RGVzY3JpY2Fv IM6az4U= IEFyaWVz IG92ZXJzZWVz IHByb21vdmU= IHbDoXI= IE5HT3M= JnE= LeS6mua0sg== J2lkw6ll IEJDRQ== VHJhaWxlcg== IGJlbGlhdQ== IHZvbHVudGVlcmVk dGljbw== IGdvYmllcm5vcw== IGZhdG9y IGF0dWFpcw== ewoKCg== IFRyaWU= IHByb2NsYWltZWQ= IGVtaW5lbnQ= 6JKZ5Y+k ZWzDqQ== IEJlaGF2aW9yYWw= IOGDnuGDlOGDoOGDmOGDneGDkw== 5pyt X2V4dHJhY3Q= JSIpLAo= LWRpcmVjdGVk IGFwZXg= c3ludGF4 IGlraW5jaQ== bmFm IEhvbW8= IExhdGl0dWRl IG1pdHRlbA== IHNwYWNlcg== 6KGh IGRlc2NhcnQ= 5LqG5om/ XCcs X2xk IOCmrOCmv+Cmjw== IEZhaHJlcg== IOC0uOC0guC0rOC0qOC1jeC0pw== IGPGsOG7o2M= IGFob3Jybw== Z2Z4 QWRhcHRvcg== INGF0L7RgNC+0YjQuNC5 QnJhbmRz 5Y+I54i9 4oCd77yI IGN1bXByaXI= IOWMl+S6rHBr6LWb6L2m IOCksuClnA== IEJlZXQ= IHN1YnRyYWN0aW9u RkZF IHJhbm5zw7Nrbg== IGluZmlybQ== aWNhdGluZw== IGZvcm11bGF0ZQ== 0rA= IGZ5cnI= LmFjY291bnRz IEd1Y2Np XERvbWFpbg== IHJldw== Q1E= IETDvG4= SHVudGVy 5L6G5rqQ IFN1cmdpY2Fs IGTDsm5n IEJ1bmRlc3Q= IHp3ZW0= IG3DpXNrZQ== IOyLnOyEpA== VGM= 4KSt4KSo4KWN4KSm4KS+ IHZlbmRv UVVPVEU= IFwv UGFnYW1lbnRv IGRlcHJlc3Npbmc= IHdhYXJkZW4= dXBybw== IHdlbmRlbg== IOC3gOC3meC2sQ== 6K6+5pa9 INin2YTYp9iq2YHYp9mC IGdlcm1hbnk= IGludGl0dWw= LkNMSUVOVA== IG5vb3A= IHZyZW1lbmE= INCw0LrRhtC40Lg= IEZheQ== INC+0LrRgNCw IFJlbmRlcmluZw== IGFjaWRpdHk= IGVudGhvdXNpYXN0 IGFsd2Vlcg== 270= aW1tdXRhYmxl L2NhcmQ= IHNjYWxs aXN0aWNhcw== IG9tcsOlZGU= cXVha2U= 5rav 4KSu4KWL IGVtcG93ZXJz INCb0YM= 4KeA4Kef4KeH 2YLYsdix IGFmaWNpb25hZG9z IGV4cGxpY291 IEpldXg= 0YfQtdGB0LrQuNC1 IEt1aA== IE1lbnRpb24= zq7Pg861zrk= 56qN yrtla2k= IExpdGhpdW0= IG9taXNzaW9ucw== LW1vbmV5 IHNoYWRpbmc= LVRh emllaHVuZ2Vu IE5pa2tp IFRhcnQ= IHRhcGFz dWdsaWE= IOCumuCuvuCusA== IGNvYnJhcg== IFht INCx0LDSk9C00LDRgNC70LDQvA== IHRyw6Juc2l0bw== w7V0dHU= IGtvbG9u 4LaR IG1haWRlbg== 4oCc5aSn 0LHQsNC4 aWxpeg== 6Z2e5rOV IHRvdGRhdA== IFNhY2hzZW4= YWNoYW4= ZWRpdGFy IGLDog== Y29uZmlybWF0aW9u 15LXkQ== IE9SR0FO YW5uaXM= IGZ5cmlydA== INC60L7RgtC+0YDQvtC80YM= IEFscHM= IOCkqOClgeCkleCkuOCkvuCkqA== ccO8 IFJlc3B1Ymxpa2Fz IEdseQ== YWhpbA== YnVuZ2Vu IHJlc2g= INmF2LPYqtmC2KjZhA== d29obg== aWdrZWl0cw== SGlnaGxpZ2h0ZWQ= IHBlY2hv 2LXYr9mC LnF1b3Rl KG9wdGlvbmFs IFJlZ2lzdGVycw== IOCkuOCkruCkuOCljeCkrw== 5paH5piO IGR1Y2tz 0YfRi9C6 IOGDm+GDmOGDmuGDmOGDneGDnA== IFJlY2h0ZQ== IFBlcnI= IHR1bWJsZQ== X3hsYWJlbA== IGRpc3NlbnQ= IOmYsg== 6aOy YW1lZQ== INii2LHYp9mF IGtheW5haw== 77yMWw== KS4KCgo= LnByZWQ= IENJRA== IGNvcnJ1cGNpw7Nu IMW7 INWh1b3Vvw== Y3Rh IFpvbmRlcg== IGZpZGU= IOC0teC0v+C0pA== IEh1bGs= 5omT5LiN5byA cHJha3Q= RXhwb3N1cmU= xIVkYQ== INeU16LXldeR 4K6S wpI= aGVrZQ== IHJlc3BvbmRlcnM= UmVzaWRlbnRpYWw= YXNwZXJz IEVtaW4= 4LmA4Lil4Li34Lit4LiB Y2FyYXM= IGHKu2U= 25Xavg== INin2YTYo9mI2LPYtw== Y3VsdHVyZQ== LnN0eWxlYWJsZQ== X2luY3JlbWVudA== IENvbHRz YW5nZWxvZw== LeWkqeWkqQ== W1A= 4YOd4YOu b3J0aGFuZA== 776J aXR3YQ== INCc0L7QttC10YI= IGVudHJldmlzdGFz IEFyYWJpYW4= ICIpKTsK IOCkruCkl+CksA== INC60YDQuNC3 RGlyZWN0ZWQ= 4KqP4KqV ICg/KQ== 15nXlNeV15w= b3VzYWw= IEluc2V0cw== IFN0ZW0= IGNvbnN0cnVjdG9ycw== YXd1bGE= 5L6n Z3Jvd3Ro LWZlYXR1cmU= RGlhZ25vc3RpY3M= 4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah4pah IOGDkuGDkOGDnOGDkOGDlw== IGRvY3VtZW50YWNpw7Nu IHRydXN0ZWU= Q2hhcmxpZQ== IGplY2g= IHN3YXBwaW5n xaFrYWk= U1lTVEVN cm9kZA== IG1hbGVtYmU= IFRJUA== IGZ1bmdzaQ== IOC0pOC0vuC0sOC0gg== 4LGC4LCk IFZveWFnZQ== IHZldMOrbQ== IOCquOCrjeCqpeCqsw== INGI0LrQsA== 4Kq+4KqC4Kqn4KuA zr/Pjc+C IOCmj+Cmmw== IHBlZGl1 bm9ydGg= IHLDqXBvbmR1 INin2YTYo9mF2YU= IGRpbWluaXNo TXV5 QXJh INC90L7QstC+0LU= IGNvYXN0ZXI= IG1vcmF0ZQ== bWFkYW4= IFNldmVyaXR5 aWV3YcW8 2LHZgtin2YU= XSk7DQoNCg== IG5vcm1hbHM= 5Yq5 IGNyYXdsaW5n INei15nXqA== IOC0sOC0guC0lw== YmFt 0LXRgNCw0L0= IGZpbm5h IGFib3JkYWdlbQ== 2KfbjNmH 6L+I IGJvc3Q= VUdIVA== IE1heWVy IGV4cGVydGx5 INCx0L7Qu9GM0YjQuNGF IEhhdGU= IGxldHRv IGd1YXJkaWFucw== 6buR5aSn5oiY anNvbnA= CXdoZXJl IHZhbMOz IFZvZ2Vs INC80LjQsw== IGlndWFsZGFk SHVuZA== LGJ1dA== INim2Kc= IOaUrw== IGp1ZGljaWE= INmG2YXZiNiv ZXRlcm1pbmF0ZQ== INmE2KrZhg== IEFzdHJv IOCkj+CknA== IHN1Y2Nlc3Nv IENhbGRlcg== ZWdtZW50 VmlsbGFnZQ== INGA0LXRiNC40Ls= INee16LXqNeb16o= IEluZHVzdHJp IFNrYXRl PXtbCg== 57Wx IHZpbGxhaW5z IGNvbmRvbGVuY2Vz Tm9ib2R5 INmF2K3ZgdmI2Lg= IEthcmxz IOC0muC1i+C0pg== 4Ka44KeC aWhpbmk= z4DPhM+F ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq IGluY29udG91cm4= X2ltcA== IGJlbmVu IGFuZ2k= 44Kr44OG44K044Oq INmE2YHYuA== IHBpZXJuYXM= INiq2KzYp9mH LkNyeXB0b2dyYXBoeQ== Ly8n U3RvY2tz 6b6Z5rGf IEHEnw== INC/0LDRgdC/0L7RgNGC ZGRl IHByZW1pZXJlZA== INio2YbYp9mG25I= LXRlbg== Qee6p+avm+eJhw== IGJpemU= IGFnZWluZw== IOybuQ== w6huZW1lbnQ= IHZvb3J6aWVuaW5nZW4= IGJsaWVi INC90LDRh9C40L3QsNC10YLRgdGP IHNvdXBz IOCkq+ClgeCknw== IHJlbm9t IOCquOCqruCql+CrjeCqsA== ICc9 IGLDtmzDvG0= IEFR VFJF YW5nYW5n b21hbGE= IOCmrOCmleCnjeCmpA== 5Lq65bel6K6h5YiS IOengQ== 7JSA IEhvZ2Fu w6lkw6k= IGV4cGxpcXVlcg== IHNlZ21lbnRlZA== IFN0aWZ0dW5n IEVzYQ== IFRlbmVyaWZl IHNww6ljaWFsaXPDqWU= IGZvZ3U= IEdyw7hu aGFpcw== INWl1oDVq9W/1aHVvdWh1oDVpA== 4Z+X IHJhY2NvbnQ= IG3DvG4= IER1bmQ= IEZvc3M= Y2hlYw== IGFzdGVyb2lk YWx5emVk IGRhd2E= INmB2KfZhg== IG9taG9vZw== IFRhcmlm 4LKs4LON IHByYWdtYXRpYw== IHlha2lu QnVzaA== 4LK+4LKn4LK/4LKV INCy0YvQt9GL0LLQsA== LmF6dXJl IGdhcm90YQ== CWNvbnRyb2xsZXI= RVJSWQ== INCw0LLQuA== IOCyqOCyoeCzgeCytQ== IHLDqWFsaXPDqWU= 0L/QvtC70Lc= IEJvc2U= IGNhcmFjdGVyaXph IGdlc3Rpb25l IOGDkeGDmOGDluGDnOGDlOGDoQ== INCz0L7QvQ== INC80qnQsNSl IG1vcnJldQ== IHFhbmRheQ== YWpvcw== IOCqpuCqsOCrjeCqtg== IHN0dWZmaW5n bGpp INCa0L7QvdC10YfQvdC+ RmlsZWQ= IGNvdW5jaWxz YWJvdXRz IHRvcnNv IGdhcm5lcmVk c3Nz 5pKu IGhlbHB1 IHJlc3Vt J3A= IHBlc3NpbQ== LkNvbXBhcmF0b3I= L2NvbnRyb2xsZXJz Zm9vYmFy IEFuYWhlaW0= IOCuruCvgeCulQ== b2RpbA== dWt0aQ== 2Ybaq9mH IFRvdWdo IGNvbnZpcnRpw7M= INCx0YvQtw== b3BoaWxl IGh5cG90aGV0aWNhbA== IHJpbnM= IGV4cG9u 0LDRgNCw0Lk= IHFobw== 0YLQsg== IGNoaW5vaXM= IHVsdHJhc29uaWM= INKX0LDQuQ== IOC0leC0tOC0v+C0rw== IOyngOyGjQ== INGB0LvQvtCy0LDQvNC4 IGFzc2VydHM= INCx0LXRiNGC0LDRgA== IGZydWl0ZnVs 6L+d6KeE X1BPUA== 5peg56CB6KeG6aKR aG9i IE1paA== IOydhA== 44CA5Zyo Y2FyZXQ= IGFuZHJv b3BhcXVl IENvb3BlcmF0aXZl IEhlaWRlbA== IMOWbg== dXBy INGA0LDQt9Cz0L7QstC+0YA= IEVJTg== 5bm/5bee INGI0L8= X2dyYWRpZW50 Ymllbg== IFNIT1JU IEZST05U aHVhbmc= IEhJU1RPUlk= IGxvbnQ= INC+0LnQvtGI IGVsZWN0cmljaWFu IOCwnOCwsOCwv+Cwl+Cwv+CwqA== IGNhcHRjaGE= cG9udA== IEhhbHM= IOa3qw== b3dtZW50 INC/0L7Qt9Cy0L7Qu9GP0Y7Rgg== IE5ow6A= 4KS34KSj INiu2YjYp9mG IExvbmU= 4LiX4Lix4LmI4Lin4LmE4Lib Lk1hdGNoZXI= 0L7QutC+0Lw= INC60LXQu9C10LTRlg== INGB0LDQu9GL OkY= IHBhcnF1ZXQ= IOW9qeelqOWkqeWkqeS5kA== ZXRyaXpl 0LDQvNGK INW61aHVtdaE IOGDoeGDlOGDpeGDog== INGI0LDRgg== INio2LHbjNiv IOCwteCxjeCwr+CwtQ== aW1lbnR1 INWh1bzVuNWy1bs= aW5jeQ== IGluw6lkaXQ= YWxhcnnFiA== IFdpZGVy 772w ISo= dW11eg== IEViZW5l 5riv5Y+w Y29vbg== IM6/zrTOtw== Q29udHJpYnV0b3I= IOC4geC5hw== INW21bjWgtW11bbVq9W91a8= b3RlbnRpYWw= IGV4cG9zdXJlcw== INC60LjRgNC/ 4LWA4LS34LWN IGN14buRaQ== 1anVpdaA 0LDRgNCw0Lc= SGQ= IGFmYXI= eWLEl3M= U2Vhbg== IENob2w= IGRlc2NlbmRlZA== IEx1cA== PEJpZw== IFNpeHRo TGVv INmC2KfZhdiq IEtBUg== IG9yYml0YWw= IFRBUA== LmVuY3J5cHQ= LFo= UGFydG5lcnM= IEhhYXJl IGJsb2NrZXJz IMO8bGVz TG9ja2Vy Q2F0ZWdvcmll IGVsbGlwdA== IEltYQ== IGZpYmVyZ2xhc3M= LeCmqg== IHN0ZW5jaWw= IG5hcHM= LlNlcXVlbmNl IOC0leC1i+C0n+C0pOC0vw== IHTDqXRv IHNpZGVk IGVsaXRlcw== IFphcmFnb3ph IHRyb3Q= IOCmtuCngeCmlQ== IEJFTE9X IOCyjuCysOCyoeCzgQ== INiv2KfYptmF 4Z6+4Z6Z IGJlc2l0emVu IGllcnI= 0LjRgdGB c3BlY2lmaWVy IGxpaHRzYWx0 b2Jhbw== RU9iamVjdA== X2luc3RydWN0aW9u aXJkZQ== IG1lbnN1YWw= 4K6V4K+B IGvEgXU= INio2KfZhNi3 IHRlbXBsbw== IHZvY2FsaXN0 ZWVucw== KGFuZA== 0JrRgNC+0LzQtQ== LtC6 Lmluc3RhbnQ= dWVyZQ== 2YjYp9iy25A= ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 LiIpXQo= LGltYWdl IHJlY2hhcmdlYWJsZQ== IHJlY29ubg== IE1pcmE= w6dhbw== aWNtcA== IGJ1ZGdldGluZw== b3Row6k= IFByb3Zpc2lvbg== IHJlZ3Jh 5LmF5LmF5Zu95Lqn6KeG6aKR V2VsY2hl 4LmA4Lil4LmH4LiV V05E IGRhbW9z IMOpbm9ybWU= 0YbRi9GP0LvRjA== IOi1og== IOusuOyekA== IOCkqOCkv+Cktg== IFJlaWtp 4YCV4YCu4YC4 IFdpbWJsZWRvbg== IiE= SUNBUw== ZWdhbmc= U3BvbnNvcg== X21i KTsqLwo= IFVuZXhwZWN0ZWQ= INCa0YLQvg== IEdvc3Q= KCsr IHBhZ2Fs IGNvbW1lbW9yYXRl V0VTVA== 4LiV4Li04LiU INWv1azVq9W21as= IGtvbnNlcnY= IHDDpGV2 IHJlZmluZW1lbnQ= 4LKw4LKo4LON4LKo4LOB YW50aGVtdW1z INCz0Y3RgA== IGxpdGln 4paR INC40YjQu9Cw0YA= IHZzZWg= IOCmuOCngeCmr+Cni+Cmlw== Qmxlc3M= IOCmuOCmleCmsuCniw== IGRlamFu LWNpZw== c3RydWN0b3Jz IG3Ds3dp U21hcnR5 4YCs4YC5 INCy0YXQvtC00LjRgg== INin2YTYo9iu2YrYsQ== INin2LjZh9in2LE= IOCkleCkv+CksA== IHfDpA== ZW56aWFs IHBhdGllbnQncw== IERlbnNpdHk= 4butaQ== LWNvbnRleHQ= 4YOQ4YOg4YOv4YOV w6lwaA== IGZvcmZhaXQ= VmFyaW91cw== dHJ1Y3Rpb24= IHJlc3BvbnNhYmlsaWRhZGVz 44Gf44GE IOCupOCutQ== IFdIWQ== RElN IOCqquCrjeCqsOCqtg== LOWFjei0uQ== X3Byb2o= LnRh LlBhaW50 KE1TRw== 4LS/4LSr IG1vbmdh IFNhbms= IGFzc2lzdMOqbmNpYQ== 0LXRgNC10L0= dXJw IHNpeWFhcw== 5YuV55S7 IENvbXBsZXRlbHk= IGZyZXNod2F0ZXI= IOCkoeClh+Cknw== IOClmw== IG1vZWRh IFZhbmRhYWc= IOmTtuaysw== IG1hc2luaQ== IE9ydHM= IGludGVydmVuaXI= RElTQ0xB CiAgIAo= IHNldHc= ZmnDsA== IOCwrOCxjeCwsA== IOC0qOC0l+C0sA== IGdld8OkaGx0 INin2YTYp9io LnZlaGljbGU= IGFhbmRlZWw= INWv1bjWgtW9 cGdzcWw= eGNi 4Kq+4Kqv4KqV IOCkuOClgOCknw== INei15XXng== IHNpZGV3YXlz IEpK INC60YPQvdCw0LQ= IHN1a2tlcg== X3Rt IFdhc2k= IEF1dMOzbg== CWZvcm1hdA== IG1vZGVybm9z IHrDoXM= ZWxsdGU= IGp1aw== IHp1aA== IGNoaWNrcw== 4YCc4YCs INin2YXYsdmK eW5vbQ== YFw= LWxvY2F0aW9u 44CC5LuO IG91dnJhZ2U= ISEhISEhISEhISEhISEhIQ== 15XXp9eQ KHhz W2NsYXNz cWF0aWdpaWZm QWp1bnRhbWVudA== INC20LXQu9Cw0L3QuNC1 IEFjcm9iYXQ= IOCuruCvgeCusQ== IOCmtuCmqA== IEdvb2dsZSdz aW5uaXNz IOCkquCljeCksOCkp+CkvuCkqOCkruCkqOCljeCkpOCljeCksOClgA== IG5hcXVlbGU= VGVhY2hlcnM= IG11ZXJ0bw== IG1hcmNoaW5n 67mI zrvPjg== IHBhcmVqYXM= 5o6o5Ye6 4LmA4Lio 4K6j4K6u4K+N IG1ha2tlbGlqa2Vy ZXR0w6Q= IHBhcmFn IEhpbndlaXNl KFBhcnNl IFZsYWFtc2U= IGltcGFydGlhbA== IHBhZ2thaW4= IGhvbm9yYWJsZQ== 4LmA4LiV4Lit INGA0LXRiNC40LvQuA== 4oCZeg== PE1vZGVs QXVkaWVuY2U= 0L7Qs9GA0LDQtA== 2LHYp9iz IENob2ljZXM= 4Kij4Ki+ 4LGD4LC3 INep16LXldeq 4KmL4Kiw 4Lii4Lit4LiU IGltcG9zc8OtdmVs LWRlbnNpdHk= b2didQ== IGluc3RydWNjaW9uZXM= cmljdWxh IGt0b3LDoQ== IGFuZ3I= IHRlY2huaXNjaGVu 4oCL4oCL4oCL4oCL IHdlYXJ5 IGRpcmlnZW50ZXM= IHRyb21zw7g= IGhhZGRpaQ== cHJlcGVuZA== 2LrYp9iq LWN1bHR1cmFs IEplcm9tZQ== IHt7ew== w6R1Zmln IMOEcno= YWh1c2F5 IEJhbWJvbw== IGZlbGljaWRhZA== IEFWSQ== IEFidWph KHN3 IENDQw== IEF1c2dhYmU= IGNvcnJlY3RuZXNz X0lURVI= IGxlZ8OtdA== IGhhaXJjdXQ= INi52LHYttmH INep15XXnQ== IHBhcmNlbHM= IFVORQ== cmVhY3Rpb24= IENhdmFs T21lZ2E= OmJvbGQ= IOWwsQ== IHB1b2k= YXJhb2g= dXJrYW4= 0YLRi9GF IGbJmWFsaQ== IG1laXN0ZW5z IE1lbnRvcg== X0xhYmVs INmC2YjZhNmH IFB1c3N5 INC30LDQvdC40LzQsNGC0YzRgdGP IENhc3Rpbmc= 4Ka+4KaV4Ka/ INiv2LTZhdmG IENhcnBlbnRlcg== IGRpemE= Z2Vybg== YW5kaW5nYW4= IHRpbXB1bA== IHByb2ZvdW5kbHk= LW1haW50 5pyf5byA5aWW IHRvZXQ= IEdhdmlu eXNhbg== X1VuaXR5 IGlmYWRl QVRUTEU= IFByZXNieXRlcmlhbg== THVja3k= TWVhc3VyZWQ= INGC0LDQtw== 5rK755CG INeb157XoteY IENvZ25pdGl2ZQ== 4LGG4LCV4LGN4LCV 4KWB4KSy4KWN4KSV INCx0LXQsw== Z2V0dGVy IGFmaA== WE8= VGlr IHRhbGxlcmVz IFBlcnNwZWt0 INi52KfYtA== IG91ZGVyZQ== IHN0b29scw== 5byA5aWW5ZCX UG9saXRpY2Fs IOCksuCkleCljeCkt+CljeCkrw== IENFTA== 0LXQtNGL ICIiOgo= LXByZXNzdXJl WnVsdQ== INC30L3QsNC80LXQvdC40YI= IOGDkOGDpuGDrA== LWF3YXk= bGFzaGVz KFBPUlQ= cHJvZHXDp8Ojbw== INCy0LXQvdGC IHNvc3RlbmlibGU= IHZvZWxkZQ== a2Vo CWVudg== J8OiZ2U= cGVuZGVuY3k= IOCquOCqguCqqg== IGFnw6puY2lh IG1pdHRlbg== IGFmbA== 6L2o IG5vc3RhbGdpYw== IHRhbnM= IFZG ID8+Ij48Lw== IEdpdmVz YW1ib3Rz INaF1oDVqA== IGthZGli IHNhbWJhbmQ= bWVjaGFu IGtleWJvYXJkcw== IGVpZ2Vuc2NoYXBwZW4= cG9seWdvbg== IHByb250 aW5kbGVsYQ== IEN1c3RvbWl6ZWQ= IGR1bHU= 6Lyq INWo1b3Vvw== KE91dHB1dA== IENvc3R1bWU= c2VwdA== LnNhbXBsZXM= IOCkhuCkpOClhw== IOC0uOC1jeC0teC0qOC1jeC0pA== V2lz IGNvbGxlY3Rpdg== eXJpbQ== IGR6aWHFgmE= ZXNoaXJl 0LDRh9Cw IOCqteCqluCqpOCrhw== IHByZWVuY2g= IHRydW5j IFNUWUxF IGluZXhwZXJpZW5jZWQ= IHJlw6c= INC/0YDQvtC00LDQttC4 KEVtcGxveWVl IOGDm+GDlOGDlw== IM66zr/PhQ== IOCkpuClgeCklQ== aWxlbw== YW5jaW8= IFNTQw== IOaXpeWNmg== IEpPSA== IHR1dGtpbQ== dXJhY2lvbg== w6TDpGxsw6Q= 0YXQsNC3 INmF2YjYrNio IGNyYWNrZXJz IE5FRw== RGlzdHI= IOCkquCkn+CklQ== IGNvbnTDrW4= IOCkl+CkvuCkgQ== IC4uLikK IGN1YQ== aWRpZw== IOCqruCqpA== U0FN 5a6J5biC YW3hu40= LlJldGVudGlvbg== Iiwt cXVhbGlmaWNhdGlvbg== TmVpbGw= IGVuY29udHJhbQ== IGNvbmZlcmVuY2lh 5pS26LS5 IHptxJs= IFBhbGFjaW8= ZGlycw== 55uR566h IHZlcnJhc3M= IGV4aGF1c3Rpb24= c3Zj INC20LDRgtCw0YI= IOCmh+CmuOCmsuCmvuCmrg== IOCwteCwv+Cwt+Cwrw== aWZ0ZW4= 4K6/4K6w4K6/4K6v 0LjQu9GM0Lw= IHBvcm91cw== 4Kqw4KuN4Kq3 IGNvbnZleWVk 4KS+4KSV4KWH IHNxdWF0 dGlja3M= UHJpemU= LnVuc3Vic2NyaWJl 0YHRgtC+0Lk= 4YOc4YOY4YOa4YOY KGtlcm5lbA== IHRlcm1lbg== LiI7DQo= w6NuZw== IFllcA== 4K6H4K6k LW9n IHByZXZlbnRhdGl2ZQ== IEFsaWNhbnRl IGpnxKc= IOa4qQ== c3RkaW4= Z2FhdA== IFVH 4YCX 0YvQu9GL0Yg= IGRlZGljYXI= IHNvcGE= IOyjvOusuA== INin2LHYs9in2YQ= IHNoaWVsZHM= LXJlc3BvbnNl IGhpZXJkb29y IHFvbA== IEltbWVkaWF0ZQ== IOyduO2EsOuEtw== INiu2KfYsQ== IOCkteCkv+CkpuCljeCkr+CkvuCksOCljeCkpQ== IOCmuOCmvuCmrA== ICciJw== ZHVs IFNQUw== IGNsb25lcw== LWVsZQ== IGRlZmluacOnw6Nv INGC0YPRgNCw0rvRi9C90LTQsA== KHNwZWVk aWZzdHJlYW0= IEJlZ2lubmVycw== IHRyYWRpY2lvbmFpcw== INC60L7Rjw== IOC0quC1gg== IE5vcndpY2g= 4KuL4KqV4Kqw4KuA INCi0q/RgA== LkZpcmU= RnVuZGluZw== IMOnbw== Q2hpY2tlbg== aW5hbWE= 4La64LeZ4Lax4LeK cGVha2Vy X2Jyb3dzZXI= IOCyquCzjeCysOCypuCzh+Cytg== IGJpbGxp 4LS/4LSy4LWC4LSf4LWG INC00LDQtw== LuKAmQo= 67O07ZeY INCy0L7Qv9GA0L7RgdC+0LI= IEp1ZGl0aA== Lm5weQ== YmliaWdheQ== LWFib3V0 CXBsdA== IEJvbmVz IOCmuOCmguCmuA== 4Kat4Ka+4Kaw dm9saQ== 77+j5aWH57Gz5b2x6KeG b3RoZXJ3aXNl IE9wZW5z X0lNUE9SVA== b3JlbA== IHRhZ2Vy aW5lYXI= IOCmieCmpOCnjeCmpOCmsA== INeb16TXmQ== 4Ka+4Kau4KeN4Kaq IHdpbGRlbg== ZXN0aW1h KHNwYWNl IHByYXZpbA== IGRlbnRyZQ== IHNwYWw= IGdhcmFnZW0= b3BlbmN2 KHR1cGxl IE1ERg== IG1hbnVzY3JpcHRz bGl2aW5n IHZpbGxhZ2Vycw== LmN2dA== X2FjdGl2YXRpb24= YWRlY2ltYWw= YXLEsW0= IGRvbW1hZ2U= d3l0aA== IOC0uOC1jeC0teC1gOC0leC0sA== X3NoaXBwaW5n INiz2YrYp9ix2Kk= IGxsYXdlcg== IOWGhg== LmN0cmw= 77yM5ZCE IG5mdA== 5aSa5Liq QmFzaWNhbGx5 IEtsaW1h UEFU INGC0q/RgNC70ZY= LXJldmlld2Vk 4Kew4KeN4Kas RGFkZHk= 77yM5Zug5Li6 IHVnYnU= KEdFVA== IOCuquCvgeCupOCuv+Curw== IHZlcmhl IGJveGVk IHZzY29kZQ== 4YOQ4YOl4YOV4YOh LdCc IM+Az4HPjs+Ezrc= IGRvaWd0cw== LnllbGxvdw== SW50ZXJvcA== INit2YPZiNmF2Kk= dWx0YXQ= w610w6lz 54Gj LmVi X01FRA== INin2YTZhtmF2Yg= aXJpbWJv cmV2ZXQ= IOCksOCkvuCkt+CljeCkn+CljeCksOCkv+Ckrw== 6aKE5rWL6L2v5Lu2 IGFkbWluaXN0cmF0aW9ucw== IEdvcmdlb3Vz YWxjb29s IHByb2JlZXJ0 IGludGVncmFkYQ== IHByYXo= IOCqruCqvuCqsOCqvg== IGFiYW4= 0YHQsNGe LHBhcmFt IEVzcGFuaGE= IGtlcnRhYQ== IG1hw650cmlzZQ== 4Lil4LmM IG1hbmVyYXM= IGluZ2V6ZXQ= IOC4l+C4teC4oQ== 7Lmg IHRpc3Rh IFpoZW5n INiz2KfYrQ== KGVuZW15 IOyCrOuejOydtA== b3RzaQ== IG5hYmlq IGxvdHRv IOCqteCqv+Cqlw== INWw1bjWgtW2 IHRyZWc= 15HXnNeq Y2hlcm4= SG9zdGluZw== 4Kqh4Kq+ ZW5xdWV1ZQ== INiq2K3ZgtuM2YI= IHBlcnNpc3Rz IOWcow== 2pPbjNmI2KfZhA== IGN6YXNpZQ== LnBlcmNlbnQ= X3RlbXBlcmF0dXJl UGVubg== IENsaW50 0YPRg9C70LDRhQ== IEZvcmJpZGRlbg== 4YCv4YCQ4YC6 IOGDo+GDnOGDmOGDleGDlOGDoOGDoQ== LkFMSUdO bG91 IE9iYW1hJ3M= c2vDqWhv IGdlcmVjaHRlbg== YWRpZXM= RG9i IGFib3JkYXI= aXNobWVudHM= 0L7QsdC+0YDQvtGC IGFwb3N0YQ== IM+Dz43OvQ== 0pPQvdC4 INit2YXYp9mK2Kk= Pks= X2NoZWNrYm94 aXNjaHVu IHF1w61taWNvcw== IGV4ZW1wbGFy Q29udHJpYnV0aW9u LWFzc29jaWF0ZWQ= IHJvZGE= INOp0LfQs9C10YA= 4KS/4KSw4KS/4KSV4KWN4KSk dXN0YWRh 4pM= dGhhdCdz YXphZGE= IHZhcmllcg== IHRhcmpvdXM= KHByb2R1Y3Rz 4LK44LON4LK1 IGpk IHJlY29tZW5kYWJsZQ== INmE2K4= t7o= IGlsaXM= QURPVw== IOWwhg== LnByb21wdA== 5aaC5LiL 4KSV4KWA4KSv 44GI44KL 0LfRg9GA0LA= IFN0aW1tZQ== IHRlbnk= IFRJTUVT JC8s YWtueWE= aXNheQ== Vmls IOC0ruC1geC0ruC1jeC0qg== YXJhZw== IG1lZ3Q= IG3DqXJpdGU= IOC4m+C4o+C4sOC5gOC4l+C4qA== CUNvbmZpZw== IOGDquGDnOGDneGDkeGDmOGDmuGDmA== IFRFQw== IGFycXVl U2NvcGVz bW91c2Vtb3Zl IEZ1bmRhbWVudGFscw== IGRlbGl0b3M= ZGl0aQ== WWFtbA== d2hhdGV2ZXI= 6K+V55yL INGE0LjQu9GM0LzRiw== bmlldA== 6L6844G/ IFNhc2thdGNoZXdhbg== IHV0Yw== IHJlY29ubnU= INC80LXRgdGC0LDRhQ== IHZhcm1l IOGDkeGDmOGDrQ== IHJlYWdlcmVu IOCmpeCmvuCmleCmvg== IG5hc2xlZA== KHRyYWNl dWl0YWJsZQ== IGR1YWI= INCR0L7Qtg== IEJhaWw= INC60L7QvNC/0LDQvdC4 INin2YTYr9i52YU= IEhlYWRxdWFydGVycw== INmF2LTYp9mD2YQ= 2qrYsw== 4KSw4KWH4KSy IG9ieQ== w610aWNhcw== IGRybQ== IHRvb3RoYnJ1c2g= IHNwZWxsZW4= IGthxb5kw70= INC+0YHQvdCw0Yk= 4KiG4KiC 5oSP6K+G Y29udGU= IEluZG9u PWNvbQ== RUZJ IOCwpuCxgOCwguCwpOCxiw== IExhbmRzYw== INWN1aHWgNWj 2YTZhdin2YbZitin RGlhbWV0ZXI= IGxhYm9yYWxlcw== IOC0heC0sA== 4YOT4YOQ4YOX IG9udG1vZXRlbg== INCg0LXRgdC/0YPQsdC70LjQutC4 J2VuZA== YW50YWdlZA== INmG2YLYrw== IOCuhuCuqeCuvuCusuCvjQ== IGZvdMOzZw== INGE0YDQvtC9 IG90aGVyJ3M= dWhheQ== LlJlc29sdmU= IERlY2xhcmU= IMmZdnbJmWw= X2Rw 1b3Vv9Wr1a/VodW2 IOuUsOultOuptA== INCw0LPQsNGA IEJyaWdhZGU= IGFraw== ICcnKXsK bMOpcw== INmF2LTYqtix24w= IHRodeG7kWM= T2hpbw== IEJ1ZW5v L3J1bg== IHRvdWdobmVzcw== 4KeD4Ka34KeN4Kag ZWt0aW9u INGC0LXQuQ== IG5vbWluZWVz IGFmcm8= IGRhc2Fy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= T0Nz 44CR44CQ77ya44CR44CQ4oCc44CR44CQ TUo= IERldG94 LXRyYW5zcGFyZW50 IE9ic2VydmF0b3J5 IEFOTg== cuG7i3Rh INin2YTZhdiz2KrZiNmJ X2ZsYXNoZGF0YQ== IFVORA== IOaYjA== L2hy 6Zm9 INmE2YTYtQ== X3NpbmNl INWj1bjWgNWu1ajVttWp1aHWgQ== IFBocmFzZQ== IHNsaWtl WW9nYQ== IE5i xI1rbw== LS07 IOC4meC4suC4l+C4tQ== IENvbm5lY3Rpbmc= am9t b3JhYg== Y2Rm IGRhbGk= R3JwYw== IHJlbnNlaWduZW1lbnRz 4LGD4LC34LGN4LCf Umljaw== amVqZXI= c2V4dGE= IOCkrOCli+CksOCljeCkoQ== ZGVmaW5lcw== IFByZXNlbmNl INmE2KzZhdmK2Lk= 4buC INC40L3RgtC40Lw= INC/0LXRgNC10Lk= X0dSRUVO RHJhZ2dpbmc= KERBVEE= IOCmqOCmlw== cmV1c2U= IHBpbmQ= IG1vcmNlYXV4 INGA0YPQutCw0YU= IHlrZHlzYWR5 IEdyYXM= 4KSo4KS+4KSl 5Y2X5Lqs emlnZQ== dWJvbg== 55qE5pe25YCZ IOKEog== Q2Fybg== IFBvcnR1Z3Vlcw== 5piv5aSa5bCR6ZKx IM6Rz4U= b25pdGU= IEFsa29ob2w= INC80LDRgdGB0LDQtg== IEJlZXRob3Zlbg== 2KzZhdi5 IHVpdHNsdWl0ZW5k IHBha2F0aQ== IGV4cGVjdGFuY3k= d2Vya3M= IGRpY2llbmRv INaD1bjWg9W41a0= IOC0pOC1huC0sA== IG5nb3M= IEpvdg== LWZhc3Q= 1bjVuw== IEtha28= IOCwleCwvuCwpuCxgQ== bGVkZXI= IE9UUA== J3V0aWxpc2Vy IEpBTg== INiv2LHZhduM2KfZhg== IFN0YWhs aWdzYXc= IHNjcmVhbXM= IGNvbXBhcnRtZW50cw== IHNsZWVweQ== 4KWB4KSw4KS+ IHBsYw== 6LSt54mp 0rPQsNC8 IG51dHJpZW50ZXM= IGxhbWFu IEZyYW1lcw== Wygo IFF1YWxpdMOkdHM= IEludGVybmF0aW9uYWxl 4KSm4KWL IOaji+eJjOa4uOaIjw== IE1lZ2g= IGhpbGZyZQ== LnBldA== IEVzdG9uaWE= xYJvxZvEhw== IGVpbmZhY2hlcg== zrPOtw== IFByYXk= Q29uY2Vybg== INeQ15XXpA== T09U INin2YTYr9mI2LHYqQ== INmE2YTYtw== IGRpbHV0ZWQ= INC/0LXRgNGB0L7QvdCw ICIpIik7Cg== INWw1aHVptWh1oA= INeZ15nWtA== X3Nlcg== cmXng60= JywnPQ== 5o+J IGV4dGluZ3U= X2NvbnNvbGU= INGN0YDRhQ== INio2KrZiNin2YY= d2luZQ== 1ZU= IGPhuq1w KCkpOy8v IOy2lOynhA== 7LmY64qU 6L6w IOCkpuClh+CktuCli+Ckgg== aW52aXRl 5a6e5Yqb ICAgICAgICAgDQo= bWFjaGVu IOCuqOCvhw== IGFsb2U= IHLDqWNpdA== IFZpc2libGU= IFdvcnN0 IO2SiA== cGxhbmQ= 0Y3Qvw== IENvbXByZXNzaW9u 0LDQu9Cw0YDQtNGL IEtsZWluZQ== ZW1wb3JhbA== 0L7RgNGC0LjQvNC10L3Rgg== 0JHQtdC3 4Ka/4Ka44KeN4Kal4Ka/4Kak IFBlb3BsZXM= IFZveA== IM+AzrHOuc60zrnOrA== TGI= LnJoaW5v LXBhaWQ= IGF0bGV0YQ== Y2luYQ== IEhvdWQ= IGltcHJvYg== YmJveA== IGxpbmViYWNrZXI= IG9sbXXFnw== IE51ZXN0cm8= VU1NWQ== IHpy 0LbRlg== IGF0dGFja2Vycw== 4Lqy 4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm IHJlZnVn YXJuZXJtaQ== 0LvQtdC60LA= 4KS44KS/4KSk KHhocg== IGRldGVjdGFy IGxvZ2VtZW50cw== IGtvb3hkYQ== IG1hbnTDqW0= INin2YTZgtio aW5qaQ== IHNvY2lhYWw= XT8u INWv1oDVqQ== aXp6bHk= IOCkruCljeCkueCko+ClguCkqA== IHVvbWluaQ== INCw0LLRgtC+0LzQvtCx0LjQu9C10Lk= IHJpZGljdWxvdXNseQ== IE1hbmRhcmlu Y29tcGFuaA== IOCkrOClh+Cksg== b2NhYmxl PWVu IOCkpOClgg== INC+0YLQstC10YDRgdGC IFVuaXZlcnNpdGV0 LW9mZmljZQ== ZXNzaW9uZQ== IG9rdw== IGltYW0= IHFhbGw= IGh1aXplbg== INC60L7Qu9C00L7QvQ== INep15vXnA== IFRoYW5o IEFiYnk= IOCuteCusw== IHZpcnR1ZXM= IHJlY29tZW5kYWNpb25lcw== IOCyleCzh+Cysw== ZGlmZmVyZW5jZQ== JGVycm9y INC60L7Qu9C4 6Zu75a2Q IGdqZXJuZQ== IHNhdXZlZw== IHZ1ZWx0bw== aHlkZQ== 4oCZYXZlbmly IHNjaHdpZXI= 2YPYqA== IGpwZWc= 6ICX dcOf YXVzYWw= QkJC UmVhc29ucw== IGxlZ2l0aW1hY3k= IOS7peS4iw== X2Zi YW5jb2Nr IE1hbml0b2Jh IHN1Y2tpbmc= IFJpcHBsZQ== 15TXng== b2tvag== X1NJTVBMRQ== IOCkruCktuClgOCkqA== IOWkqeWkqeS4reW9qeelqOaKleazqA== IGzDpm5n IGVmZmVjdGllZg== INW61avVv9Wr INCU0Lg= Ijpbewo= IFJlZ2nDo28= IGvEsXI= IERvZXNuJ3Q= ZXhwZXJ0 IEJhcnRvbg== INin2YTYudix2KfZgtmK INC00YPQttC1 KFNvdXJjZQ== YXppZXI= IGtyb3Bw IGNvbGxpZGU= RG9ja2Vy IGNlbmFz IGJpbGluZ3VhbA== IGLDtmxn aWVsbw== YXBzaWJsZQ== IHRha2ljaA== IGZhcmV3ZWxs IEh5ZHJhdWxpYw== IGVub3JtZXM= QXF1aQ== INCx0L7QudC40YfTmQ== INC+0YDQs9Cw0L3QuNC30LDRhtC40Lk= YXJhZA== IE94eWdlbg== INCE INeh15XXow== aWRsYWxv INC80Y3QtNGN0Y3Quw== IEplcA== KGNvc3Q= INec16fXqA== X3NvdXJjZXM= ZW5jaWU= INio2KfZhNmB2LnZhA== VW51c2Vk 0L3QuNGH0YLQvtC2 INem16I= IHNhdMSxxZ8= IGRlc2N1bA== INGB0L7RgdGC0LDQstC70Y8= U2hhcnBlcg== IGxpeWFuZQ== X0ZJRk8= IF86 IG5nb2t1 X2xpdmU= 1oTVttWl1oDVqw== INin2YTYo9mI2LHZiNio2Yo= IHp5 4YOQ4YOg4YOU4YOd4YOR4YOh IFNhYmJhdGg= IGNvcnBzZQ== ICIrCg== Q0VS IGNvbXBsaWNhdGlvbg== CQkJCQkJCQkg IOC0seC0v+C0quC1jeC0quC1i+C0sOC1jQ== INi02KfbgQ== IOelpeS6kQ== 6YCa5bi4 IGNvYXg= IFZlcndhbHR1bmc= IGFjZXB0YXI= LlJlbGVhc2U= IGRvbWlubw== xb5ldg== w7NnaWNhcw== IGlhcnJhaWRo INmB2LHYtdip KHRk Uk9XU0VS IGRyZXNzZXI= 54uQ54u4 IG9sZXQ= IGRyaW5nZW5k IOCuteCuv+Cumg== IHNpc2FsZA== 55CG55Sx IGN1YWQ= ZMO8cg== X1NFQ09ORA== INC70Y7QsdC+0LU= KFByb2Nlc3M= cnRsZQ== IOWNmuaCpg== Q29tcHJlc3M= IFBlcsOy 6L+e57ut IGFwb3lhcg== INC60LXRgtC60LXQvQ== IExhYnJhZG9y IOCmrOCmvuCmnOCmvuCmsA== IElDVQ== dXNhdA== 4LC+4LCq4LGN IGFkZXI= X2Rhc2hib2FyZA== IGtva2U= IHJ1ZWRhcw== 0YvQu9GL0qHRgtCw0YA= IOCyqOCyv+CytQ== RWxlY3Ryb24= 0LDRgtC10LvRjNGB0YLQstCw IEFyY2hlcg== IFZBUklBQkxF 6ZuG5Zui5a6Y572R IHR1dmU= b2ludGVk LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== INqp24zZiNq6 IOCmquCmvuCmhw== RW5lbWllcw== INec15TXkteZ16I= INC00LXQsQ== X3R5 IGFubmVu IGJhbGtvbg== IFZlbnR1cmE= LmRlbGl2ZXJ5 INW31oDVu9Wh1bbVodWv IEtlcms= IG1pbGxpb25haXJl INCy0YvQt9GL0LLQsNC10YI= INC80L3QtdC90LjRjg== L3Bhc3N3b3Jk X2RlYWQ= bWFwcGVk IOCkueCkvuCkpA== IFBvdHM= IOyjvOyGjA== IFNhbGFhbQ== IEFmcmljYW5z IHJlcGFpbnQ= IG1vZGVsbA== IHZpZ29yb3Vz IHRyd3k= IOCmuOCmpOCnjeCmrw== INCw0LLQstCw0Ls= 0LjQutCw0YLTmQ== 4K6/4K6o4K+N4K6k4K+B IEFsemhlaW1lcidz X0VQ dmVyaWZpY2F0aW9u Q29udHJh IG9zbQ== INCw0YLQsNC7 INC30LDQuNC90YLQtdGA0LXRgQ== aXZpcg== IEJJTQ== IG3DvHNzdGU= IGJhc2FkYQ== INGB0LrQsNGH SU1BVElPTg== ZW1u IGFscGg= IGR1bmU= YWdvZ3Vl ZXN0b3Jl 5LqL5a6e5LiK LllFQVI= w61zc2ltbw== 5pmC6KiI bGl1cw== Lm5lbw== IOS4i+S4gA== IEVzcGHDsW9sYQ== INep15XXkQ== IHBvZGVyb3Nv ICJ+ xb5v IOC0teC0v+C0lQ== IOCkl+CljeCksOCkvuCkrg== JXRpbWVvdXQ= IGZvcnZlbnQ= INC90LXQvtCx0YXQvtC00LjQvNGL0LU= 2KfYsdi5 IGVuZmF0 IG1weWE= IGdlw69udGVyZXNzZQ== IGluemV0dGVu IGJhc3VyYQ== 5ZWG5ZOB44Gu IGljbw== Vmlw 4KSo4KSI IOCquOCqguCqrOCqguCqpw== 77yI5Zyf K3I= IHNjb3Jlcg== 0LjQsdC60LA= IOCkpOClgeCksuCkqOCkvg== CVRpbWU= INeZ16rXqA== LGxlbmd0aA== QWE= INC60L7RmNC1 Qk9O IFRVUg== INC90LjQvQ== INmE2KfYqg== IGRlc3Rpbm9z IOCmuOCmueCmnA== INCy0LXQu9C40LrQuA== IOCmuOCmrOCmvuCmhw== SFRNTEVsZW1lbnQ= IGV6YWxp IGp1cmlkaXF1ZQ== ICc+ X0V4dA== IM62zrc= IGRlc3Rhcw== TGFn IOCwp+CwsA== 4oCL4Z6T4Z+F IHNlbGJzdHZlcnN0w6RuZGxpY2g= 77yv IFZvdQ== IOCql+CrgeCqnOCqsOCqvuCqpOCrgA== IFphbg== INC90LDRgNC60L7Rgg== aGFkb3M= c29v 15nXmdek 5Lya5LiK IE9sbA== IOCkheCkpuCkvuCksuCkpA== IFBoeXNpY2lhbg== IG/Ep3Jh IFFNb2RlbA== PWhlYWRlcnM= INmF2KrYp9ir2LE= 2YXZhtiv RnVzaW9u IHVwcGzDvXNpbmc= INC+0YXRiA== IHNsYWdz IGxvY2F0aWVz IFN0YWF0ZW4= IG1hc3RlcmluZw== b3Bvcm9zaXM= IENyZXNjZW50 INWs1bjWgtW9 IG5hbmE= 5oiQ5ZGY LGl0 IGtuZXg= IGRlYWN0aXZhdGU= IChbWw== IHByb2hpYml0aW9u bMO2 ZnRp IGdsb2JhbGl6YXRpb24= bGVpcw== eGVl zrHOuc6/ L0RvY3VtZW50cw== IG1pZ2xpb3Jl WFY= INWh1aw= bGlx INis2KfYsw== IEVQVUI= IEthdG9uZGE= IGltcGxpY2l0bHk= X2Fzc2V0cw== IGJhYnkncw== INC00LDQug== xJd0xbM= U0VDVElPTg== IFdlYmluYXI= xIN0bw== 44CC5L2G 4oCZRXN0 IHR3b3I= INKv0LnQu9C00LLRjdGA0LvRjdCz0Yc= LmFzaw== IGFudHdvcnQ= IFRPSw== IHN3ZXN3bw== IEFnaW5n cmVsaWc= w6FsdQ== UElORw== IHVuZGFu IGZ1bmdhbA== z4POrg== IFlFQVJT INCy0L7QtNC1 IEJ1aWNr IHp6YQ== IM6jzrU= IGdyYW51bA== IGJpZGFuZw== RXhwb3J0cw== X0dyb3Vw 2qrYsQ== ICAgICAgCQ== IOi9rA== b3Vrc2V0 IOWQieWIqQ== IHB1bnR1 INeQ15fXqNeq INC30YDQsNCx Q2VudHVyeQ== IGphY3V6emk= IGRpc2XDsW9z IOGDkuGDkOGDnOGDoeGDruGDleGDkOGDlQ== INC40L3QsNGA0LrQvdGL a2Fyb29u IFN1bnM= IOWtkA== UGls IOCkrOClh+Ckn+ClgA== RGV1eA== INmB2Kc= INC60LDRgNC00LDQvQ== X0ZyZWU= Wm4= 0LDRgtC40LrQsA== IGluZXJ0 4YCB4YCy4YC3 ZW1ha2U= INeR16LXmden16g= IOGDrOGDlOGDoQ== IEZhbGxl VGhpbmtpbmc= X2Rj INm+24zYp9mF Sk9C INiv2LHYrA== a+G6uQ== TVBJ 4KS/4KSc4KSo X2lzc3Vl IOW0 IHNwaGVyZXM= 2obYp9ix IGJ1aWs= b2xsb3dz IOWNk+i2ig== IOGDnuGDoOGDneGDpOGDlOGDoQ== YWxkaQ== Rm90b3M= INin2YTZiNis2Yc= 0YHQuNC80YM= IGFwcGVscw== IHBvY2hp Z2xpbmc= IGTDqXRlbnRl ICsrKQ== IFdhbG51dA== IGJ1b3k= IHR1cm5vdXQ= IGluY2x1aWRvcw== PnRhZw== IHNsaXQ= 7Iqk7YOA IGNvbnRyYWRpY3Rpb24= IFBFUw== VmVuZA== IFN0ZWxs X2FjdG9y IG1lbWJlbGk= VmFyaWFudHM= a2lzaA== IE1BSVM= IHRyb3VibGluZw== IOmAgeaWmeeEoeaWmQ== IG9wZ2Vs w7hyZXM= IHJla29yZA== IHJldGluYQ== UmVnYXJkcw== IHNsYXY= LkludmVudG9yeQ== 5Lul5YmN 4YCS4YCu enVmw7xocmVu IHRlamlkbw== IE5lc3M= z4HOt8+Dzrc= IHBhcmFsbA== yrtla2nKu2U= IE9wcmFo TmV0d29ya2luZw== IHBlcnNvbmFsaXphdGlvbg== IG1pbmlzdHJpZXM= IEphaHJ6ZQ== IGluZ3LDqWRpZW50cw== IHRvdXJpc21l c2hhZGE= YmVuZQ== 4LSu4LSv4LSC KGZpbHRlcnM= IOCqquCrjeCqsOCquA== 4Lix4LiZ4Lin IG1lZW4= 0q7QvdGN IHNpZ25lcw== 5Lm+ aGVhcg== IGTDvHJsaQ== 4LK44LOG b3JnYW5peg== IGNvbnNjaW91c2x5 IExhemlv KGRv INCw0YDQvtC80LDRgg== IGdhdGE= 4LS/4LSv4LS/4LSy4LWG y5w= IGRvd250dXJu aGFuZGVsaW5n INmG2KfYtA== IGludGVncmFjacOzbg== IMSR4buZYw== IHJlZXI= IFphbnppYmFy V29ya3Nob3A= IFRlbmNlbnQ= IOez IOCwuOCwguCwtQ== 0LrQsNGD0L0= Y2hlaGVu 4Kqo4KuA4Kqv IHJpw6puZw== U3BsaXR0ZXI= S2FyZW4= IGtlaGE= YXRlcm5v INSx1oA= ZMOk IEtvcnM= Lk11dGFibGU= IHN0ZXZpZw== cmFkaQ== IGJyZXY= INC70ZE= IHNoYXZl 4LmA4Lit4Li14Lii4LiU U2NoZWR1bGluZw== U3VibmV0 INin2YTYp9ir2YbZitmG IOCkl+CksOCljeCkpuCkvg== INGE0ZbQvQ== 7Jq0642w bWVyw61h a29wZQ== 15zXoteb16I= IHBlbGljdWxhcw== INeV15vXlQ== IMWTdXZyZXM= IOS6p+WTgQ== INqp2LHaqduS 2LHZiNmK IHNldHRpbWFuYQ== IE1vbmRheXM= IOCuquCun+CuruCvjQ== IHRhcmc= aXNqb24= IGNhcGF6ZXM= 5oCW IGFpcmluZw== IENPQg== LlN0YXJ0cw== IOCqhuCqlg== IGjFjQ== INeQ1rfXlteV15k= IEFCQQ== IHZlcndpamRlcmQ= 0YzSrdCw 4Z+S4Z6C aXNzYW50cw== IHVrdWQ= JmlhY3V0ZQ== X0JhY2s= 0L3Rj9Ge IOCkhuCkr+Cli+Cklw== XyMj bWVkaWNpbmU= 2YXZidiy IHLDqXNvdWRyZQ== IEJTUA== KWRpZA== UmVzdHJpY3RlZA== INCw0YDQtw== IENoYWw= zpnOkQ== UGFja2FnaW5n 2LHZiNit IFRvc2M= bcOl dXN1YWw= QWJsZQ== INC/0LDQstGW0L0= IGNvbmZlY3Rpb24= IENoaWNv IFNwYW5qZQ== eXJ5 ZmlnaHQ= IDw8PQ== 5q2T6L+O dGVyb3M= 4Z+S4Z6J IOCwheCwguCwn+Cxgg== KENvZGU= aW7Elw== IOCkq+Clh+CkuA== IOu2hOyVvA== X2VudHJvcHk= IGJvZ3Vz 77ya6aaW6aG1 IFN5bmNocm9u 6auY5riF5YWN6LS56KeG6aKR Rk9VTkQ= c3RlZWw= Y2VydGlmaWNhdGU= w7NuaWNhcw== aWprbA== INiu2LXZiNi124w= 2YrYp9is2KfYqg== YXZhdGk= UnVieQ== IOydtOuvuOyngA== IHbDrXM= IGRpcmVjdGlvbmFs 1L0= T3V0c3RhbmRpbmc= QUpPUg== 4Kqy4KuB4KqC 2LPYrNmK2YQ= IHBpb25lZXJz IGJlbm8= KGJz LdCk b3Byb3Rl IFNjaG1lcnplbg== U2V4eQ== SUtJ IGRpc3NvbHV0aW9u 7J247Yq4 IHByb3BoZXRz IHJlc3Rlbg== IOy7tA== IERpZW5zdGxlaXN0dW5nZW4= IGF1c3RyYWxpYW4= 4KS44KSo T3Jl IHNhbGl2YQ== IE1hZG5lc3M= a2l5ZQ== IOykkeyLrA== IGppYg== cm92ZcWI IOWFpQ== IOKHkg== aGVn bGVjaHRz b3RveGlj IGRoaW4= YmVsaXNvYQ== IOCmquCnjeCmsOCmp+CmvuCmqOCmruCmqOCnjeCmpOCnjeCmsOCngA== 4oKswqI= IEFmYWFu IHR2bw== IElSQw== IOGDkuGDkOGDk+GDkOGDlQ== IGdyYW5z 2Y7ZitmS IHNlcXXDqm5jaWE= X2Jsb2M= Y29h INCy0Lo= IMO7bnQ= IFZvbHVudGVlcnM= IGtlaGlkdXBhbg== IEVtb2pp 4KeH4Kex aWtpd2E= IENhaW4= IGxlaWE= YW5peWE= 4K+B4K6q4K+N4K6q4K+B IGthbWF5 IHByZXNlbnph 5YWx5Lqr 5Y+L5oOF6ZO+5o6l IHNwbGU= IExpZmVjeWNsZQ== CWZyaWVuZA== cHJlZGljYXRl IFN0dQ== IGzDoWdy IHByb2Nlc3NhbWVudG8= 5aSH5rOo IGNhc3Nlcm9sZQ== IGR1Y2hh IGJyb2FkY2FzdGVy X2JsYW5r 4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4Lid4Liy4LiB IGN1Y2g= IOCkquCkueCksuCkvg== aXZlcmluZw== bnRp 5L+h55So IGtpYW0= cnVo INGD0LLQsNC2 IOODiQ== CXNsZWVw IGd1aXRhcnJh IOCqleCrgw== IOGDpOGDneGDog== IGZpeGVy Q1BG IGFuaXZlcnNhcmlv IGNvcGll IFdpbGxpYW1zb24= IOCmuOCmruCnjeCmquCmsOCnjeCmleCnhw== 4KSV4KWH4KSk IGZsdW9yZXNjZW5jZQ== 54WM bXVsdGlwbHk= IFZpZ28= QXBlc2Fy IGd1cmw= aXZpaw== cXVpcG1lbnQ= cm9waWNhbA== 4LC+4LCy4LGN4LC4 IE5PUlRI IOWkqeWkqeS4reW9qeelqOWFrOWPuA== IGZqw6Fy IE1pbQ== IHNhdm9yeQ== IGRlbG8= 0YHRgtC+0Z4= w5FP IGpveXM= YXbml6DnoIE= UnVzcw== IGRpc3J1cHRlZA== ZW5kZXJl ICMi IEhvcml6b250ZQ== IOCqieCqpOCrjeCqpA== bmFkZXI= T2Jqcw== IGludGVybnNoaXBz IHN1Y2NlZWRpbmc= 5piv55yf5piv5YGH X01FVEFEQVRB IFJlcHV0YXRpb24= 4Z634Z6f KG5vbWU= 44CA5LiA IOC0qOC0suC1jeC0sg== INC/0L7Qt9C00YDQsNCy ZW5ndQ== LdC50LjQu9C4 QWNjdA== c2NpZW5jZQ== IGFsbG9yYQ== YmxvY2txdW90ZQ== U3Vidmlld3M= IHN1YmNvbnNjaW91cw== UGlsb3Q= REVU VGhlb3J5 IOCmleCmsOCmm+Cnh+CmqA== IGRpYnVhdA== LWhvdXJz 2KjYp9i02K8= IFNlcXVlbnRpYWw= 5a+86Ie0 IOCqruCqvuCqrg== INC/0LDRgdGB0LDQtg== IOCkpuClg+Ckt+CljeCknw== IEtuZQ== 7KCE7Z6I IGh3bmQ= 5p+x LnNsaW0= IHRheGlz bGFnZXI= INCW0LXQvQ== IFNvbw== IGN1cmF0b3I= IEVYUEVSSQ== IHlzZ29s c3VicGxvdA== aGFuZGx1bmdlbg== IHhlZWI= bWFyY2g= IGZ5c2lla2U= ZmljaWVuY3k= INC90LDRiNC1 5qSN54mp55m+56eR IGRpcHBpbmc= IOCksOCkvuCkuOCljeCkpA== IHBlcWF0YQ== IHZlcm1lbGhv VGlwb3M= IGRpZWV0 IEF5csSxY2E= X2JhcmFuZw== IHF1ZXNv LnN0cnVjdHVyZQ== IOCkm+ClgA== 1aHVvtW41oDVtA== IEVYRUM= IGFydMOtc3RpY2E= IHNjYW1tZXJz IGV2cm9wcw== INCy0YHQv9C+0Lw= IGxhZGU= R29lZA== 2qvbkA== IFNob3J0cw== S25pZ2h0 c3ltYm9scw== IG9temV0 IGFjdGl2aXRlaXQ= IGtla2VyZQ== IERlbGV0ZXM= INC/0YLQuA== dWt1dW0= INCy0YPRhw== IHN5bXBvc2l1bQ== IOC0juC0qOC1jeC0qOC1gA== INC80L7RgNC1 INin2YTYrdix2YPYqQ== b2xpaw== IEtsYQ== Y3JlYXNlcw== 55Sc IGVzdHJlaWE= IOyViuydhA== IOW+ruS/oeWkqeWkqeW9qeelqA== IGNoYWtyYQ== UmVzcGVjdA== Z3fhu40= IERpYWxvZ3Vl eXN0YWxs IE1pbmhh INC60LLQsNGA0YLQuNGA0LU= IGFsaWNl 4Liy4LiI4Liw aWXFhA== IG9jY3VwaWVz IOivuuS6mg== IE1lYWRvdw== IGNvbmdlbg== INin2YTZiNmE SW5jbHVkaW5n 772cCg== LXJhZGlv IHBvbGl0aXNjaGVu xIVj INC60LDQutCw0Y8= IGNoYXJib24= INec15nXkw== YmVoZWVy QW1iaWVudA== INC30LDQv9Cw0YE= 6KKW 4K6q4K+N4K6q4K6f4K+N4K6f4K+B4K6z4K+N4K6z4K6k4K+B cmVnaW9ucw== 2qnYsduM LmNvbm5lY3RlZA== IEhhYmU= T2JzdGFjbGU= 5peg57q/ IFNFQ1JFVA== IOC0juC0qOC1jeC0qOC0vuC0suC1jQ== 16HXpNeo PSIiPjw= IE5lbg== 0YTQuNGG0LjRgNC+0LLQsNC9 INCy0YDQvtC00LU= Q29udGFjdG8= IHN0YXZl 0LrTmdGL0L0= w7N0aWNv b25vcg== IOCqpOCrh+CqteCrgA== Q0NFRURFRA== INCw0LHRgNC4 INC805nSuw== IOCkquClguCknOCkvg== IFN1YmplY3Rz INWl1oDVr9aA1as= IGRhdmlk Q2xy IGdva2s= INiv24zar9ix24w= IENMRUFO 4Lil4Li54LiB 2LPbkA== IENvbG91cnM= INW21aXWgNWv1aHVtdWh1oHVuNaC1oHVq9W5 eXN0w6htZQ== QkxFTQ== 4Kam4Ka/4KaT 5qSN54mp55m+56eR6YCa IG1hZnV0YQ== IG1vZ2xp amlr IFppbGxvdw== Q3J1c2hlcg== 572p IHRlcmtlbg== IGludGVsaWdlbnRlcw== IOCqteCqv+CquOCrjeCqpOCqvuCqsOCqruCqvuCqgg== IFNwYXRpYWw= IHJlbGlnaQ== IHdpc2F0YQ== IGNlbGx1bGVz J2FwcHJv INeU15nXqteU IHNjcmlwdGluZw== 4Ki/4Ki54Ki+ IG3Elw== YW1tdQ== ICcuLy4uLw== IHByb2R1a3R1 RXZlcnlib2R5 cHJvZHVjZXI= LW1hc2luZw== IE9CUw== IHNrcml2ZQ== IFR3ZWx2ZQ== Tm9ybWFsaXphdGlvbg== TG9vdA== IHN0YW5kYXJ0 IGlubm92YXRl IOGDoeGDkOGDmeGDm+GDkOGDneGDkw== IGJsb3Nzb21z IFJlZmlu IEFCxZ4= IOm6kum6nw== IOCkquCkueClgeCkgQ== IOCkueCktQ== IENvbXVuZQ== IEthbGk= 5LiA5pys6YGT6auY5riF5peg56CB INCt0L3RjQ== IOS7sg== IENvbnN0aXR1dGlvbmFs 5Lit5paw IFJlYWx0b3Jz IOC0quC1jeC0sOC0pOC1jeC0r+C1h+C0lQ== b2N1c2luZw== IGNlcnJhZG8= INC90LDQstGH dWVuY2lh IEhlcmF1c2ZvcmRlcnVuZ2Vu IG9ubWlkZGVsbA== ZmVlc3Q= IEdSQVRJUw== LlN5bWJvbA== IHVybw== IHNtb290aGllcw== INCz0YPRhNGC0LA= IMO2xJ9yZW5j zrzOv8+Nz4I= IGtlbm5l X0V4Y2VwdGlvbg== IGZhY3Rpb25z IHByw6l2ZW50aW9u IGRlc3Ryb3lz IFJhbXA= IHNwdWxsZW4= cGFyYWd1cw== ZXJ1 dWFueWE= IOCqpOCquA== 1aHVttWh IEd1dGVu IHJhc3BiZXJyeQ== IEJsYW5jaGU= IOCmquCnjeCmsOCmpOCnjeCmrw== IOyKrOuhrw== IGtvbmt1cnI= UXVhZHI= Q2FtcG9z INCd0Lg= YXJkb25u 6JaE LmNvZGlnbw== IHN6w6Ftw6FyYQ== IOCkhuCkteClh+CkpuCkqA== 54i954i9 YWRuZQ== IGFjaGVz 57q9 SHM= IGV4cG9uZW50aWFsbHk= aGF1dA== IHByZWRpY3Rvcg== IFN3ZWF0 INiq2KzZh9uM2LI= S29zdGVu UmVkdWN0aW9u UExD INC/0L7QtNGD0Lw= IOCwsOCwvuCwtQ== XHhj INGP0YDSmdCw0Lw= YWVpbGdl IERvbGJ5 IOCkruCknOCkrOClguCkpA== IGNlbGVzdGlhbA== IHRzaHVhag== INGB0LvRg9GF KHJlZmVyZW5jZQ== IOWls+aApw== IOKWiOKWiA== IEFjaw== Q29taWM= INC90LDRgNGD0YjQtdC90LjRjw== IEJhYnlz LnV0 X3dpZGdldHM= cGV0aXRpb24= IEFzc3VtZQ== 6aCD INC80L3QtdC90LjQtQ== 5py65Zmo5Lq6 1aXWg9Wh1a/VodW2 IENhbmJlcnJh ZWRpdGg= IGFyYW5qZXVubmE= CUJ1dHRvbg== IEFOQw== ZmV3 IHRvdXJuZQ== CWRlbGF5 1aXWgNWr1a8= IGFjaWVy IGN1bGlu 44K544K/44O8 INC60LjQvQ== 1bbVrw== IGJ1bmc= dWNv LkdlbmVyYWw= WWFu IEVyYXNtdXM= X0NoZWNrZWQ= IFdvcmxkJ3M= W3N0YXRl IG9udHdlcnBlbg== IGhvdg== bGFueQ== INeb15bXlA== IGNoZXJjaGV6 LnJlcXVlc3Rz INC90LDRgNC+0LTQsA== IGxpYmVyYQ== 4LK+4LK44LON X2VtcA== 15zXmdeZ158= IGV4ZXJjZXI= X25lZ2F0aXZl cG9zaXRvcg== IGFzaWF0 INC/0L7QtNCw0LI= aXRla2VyZXpv IHNsb3dz KG92ZXI= IHpuYW1lbg== 4LOH4LKW R3JhZGVz IHdhZ3Q= IFByb3Vk 1oTVpdaA1ag= IHNjaGFmZnQ= UkFGVA== YWJ1bmc= IGJpb3BzeQ== IGFyY2hpdmFs IENvbWJpbmF0aW9u IEJhbGxz IENsZWFyYW5jZQ== Zmlubmk= bGV4YW1z INCy0YHQug== IHJlb3BlbmluZw== w6fJmQ== IOCkuOCkruCkv+CkpOCkvw== aGFyZHdhcmU= 0LjQutCw0LzQuA== IElFTFRT INGA0LDRgdC60YDRiw== bG9zZW4= CXVw IGF2ZW50dXJhcw== YXBwaWQ= IEbDuHI= INC80LXRgNC+0L/RgNC40Y/RgtC40Y8= IFBlbG8= ZWJpbGlyc2luaXo= LXNob3Q= xaI= IGFtYmF6bw== IExlYXZpbmc= INin2YTZhdmI2KfZgti5 LXNwb25zb3JlZA== INis2KfYqtuS INiq2KzYp9ix2Ko= Zm9yZGQ= LmVuYw== IG5ldHRz 4Kqs4KuN4Kqm 4LC14LC/ Licp IEZyZXNzZQ== 6YQ= INeR15bXntef INC+0LHRidC10YHRgtCy0LA= IOC0rOC1jeC0sA== X0NN QWxidW1z 44Oh44O844Or IFRlbGVrb20= IGdvdm9y IHByZWNvbmNl IHJldHJvc3BlY3Q= WEU= IG5vdmVkYWRlcw== IFFQb2ludA== IHByb3ByacOpdMOpcw== IOCkuOCkquCljeCkpA== IFBMQUNF Lios c3BlY2lmaWM= IOC4quC4tQ== IERlZGljYXRlZA== 44Kv44OI SW50ZXJzZWN0 Z2lvcmU= Z3JhbXM= ZGVwZW5kZW5jeQ== 27LbsNux IG7Em2Nv IGJhZG8= 44GE44Gk YWNpdA== LkZhaWw= ZGVua2Vu 0LTQvtC8 IGZyZXVl IGR1bml5YQ== 0LXQudC60Lg= IGZhcsOh IOCmrOCmv+CmpA== IOyalOq1rA== IG1vbGRl IGFkb3B0cw== d2VldGVk INi52YTZitmG2Kc= dHJhaW5lcg== IOGDm+GDoeGDkuGDkOGDleGDoQ== IGlsw6c= X0FSVA== IEF0dGVuZGFuY2U= 0L7QutC1 IGFwbGljYXRpdm9z IOC2veC2tg== INC/0LDQutC10YI= YWZmdW5n YW1haW4= 5r2t 44Gl UHLDqXM= IGJlenBl IGNva2U= IOCkuOClh+Cknw== IHNvbGljaXRh IGh1bWFuaWRhZGU= U3RldmVu aGVseQ== IEtJTkc= IOyXrOq4sA== INC/0L7QtNCx0L7RgA== IHRlcnJlc3Ry INGA0LDQt9C80LXRgNC1 IEthbmQ= IFBhcnI= IGZyYWdyYW50 OmJvcmRlcg== INCz0YPQvdCw 5L6154qv RGVwYXJ0YW1lbnRv IGJhbm5pbmc= IHLDqWNvbA== LXJlbmRlcg== IGZhaWJsZXM= IHNlaGF0 5aWz5a2p X2ZpbHRlcmVk IGFiZ2VzY2g= INGB0LDQtNCw IOGDnOGDkOGDqg== LnZhbG9y IGTDs2xhcg== IG3DqXTDqQ== 5pyA6ZW/ INCn0LjRgtCw0YLRjA== IHJlY29tbWFuZMOp dW11bGF0ZQ== 55qE5aSn 4Kaa4KeN4Kab IGZ1bGxlcg== LWdlbmVy INiu2KfZhtmI2KfYr9mH IGJldmU= 0LfRi9Cy0LDRgtGM IEFzc3VtaW5n X3JhbQ== 0LXRig== bGFkdW5n IGRpcmlnZWFudHM= INi32KfZgtiq bcO2Z2xpY2hrZWl0ZW4= IEFzcGVu 1avVoQ== IGNvbG8= 0LTQsNGO0YLRgdGP INGP0L/QvtC9 X3ByZWNpc2lvbg== IGNhbGVudA== IExpZWQ= IHdha3dl 0LjQvdC10L0= IGRlZmljaXRz 4LGL4LCo4LGN KCldLg== IG9wZXJl INin2YTYpdmB IE51cnNlcw== IE1haWQ= U0hJUA== INiy2YrYp9ix2Kk= bGVhbm9y 1aHVttW2 IHNhbml0YXJpYQ== INin2Y/Zhg== IGthc28= IHBhdmU= IGZyZXF1w6puY2lh 77yM5rKh5pyJ 2KzZitmG IGVudmlyb25z X2tleXdvcmRz 2YbYsg== IHBvcnTDqQ== 1avVrg== 4Kq+4Kqk4Kq+ IGJpc2M= IG1vaG91 IGxldmVsaW5n 4LKu4LOB4LKW IFdvbmRlcmxhbmQ= 5ZWq5ZWq5ZWq IGF0aXZvcw== IOC0pOC1iw== 4LS14LSj IEZhbmN5 L3N0cmluZw== LldvcmQ= IGtlZGFo QkxVRQ== IEdvbmc= 0LDQu9Cw0YDRi9C9 IEFQUw== IEludGVydmlld3M= X2Jsaw== IGxhc3Rl 5b60 X3Jlc2l6ZQ== JG0= INGI0LjQug== KElN dGhvbA== 0YbTmdCw0LbTmdCw0YDQsA== 6Zi25q61 IE92ZXJzZQ== aWJvcg== aMOlbGw= IM6xzro= IHRlZ2VsaWprZXJ0aWpk IGJldmF0dGVu LkRlc3Ryb3k= KCk/Lg== TWV4aWNv CVN0YXJ0 IEdpbGxlcw== XSkNCg0K aWrEhQ== dHJhbnNwb3Nl IGNhdMOpZ29yaWVz INC80LXQs9Ov IGN1aWRlYWNoZA== 5Yiw5bqV X2hhbA== LUlO aXRyw6RnZQ== LWRlbQ== YWZ2 c2V0dGVy INin2YTYrNmE2K8= Y3Vyc2U= IGhvc3BlZA== X3NoYWRvdw== IGFuc2VoZW4= IGZseWVycw== IOCyhuCysOCzi+Cyqg== IGdpZ2FudA== xaHEjWE= IHNwb29y INeh15nXng== IGVjdQ== 4bmjdQ== IHBldHR5 IENvbGVnaW8= IOGDoeGDrOGDoOGDkOGDpA== IG5nYWFoaQ== 5LiN6IO95o+Q546w cnVzaA== IGhhZnRh IGRldGVyaW9yYXRpb24= X3RoYW4= xI1uw70= IOC2heC2rw== IFNoYW0= IG91dGJyZWFrcw== QWNxdWlyZQ== 4LCw4LGN4LCc CXNjcm9sbA== IG1pc3Npb25hcnk= CUNsaWVudA== IEVpbnJpY2h0dW5n 4YOi4YOU4YOg4YOU4YOh4YOd IENoYXR0YW5vb2dh YWxhcmk= 77yBfn4KCg== IGNvbWlkYXM= IOumrOyKpO2KuA== IEtsYXNzZW4= IHNpbXB0b20= IERhbmFjaA== 5YaK INi52YTYp9mI24E= IFBoYXJtYWM= INC60LvQsA== 1aHWgNW41oLVtA== IMOnxLFrdA== 1LvVttW5 KV9f d2luaw== L2RhdA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGVsZXRlcw== INit2LHYqA== IGZ1bmt0aW9uaWVyZW4= 15XXnNeT aWxhZGk= IENhcmliZQ== IEJ1bGxkb2dz IOWkqeWkqeS4reW9qeelqOWunuWQjQ== J29j PFJlc291cmNl eWVjdG9z 0LDRgNCw0LQ= SUdIVFM= IGd1ZXNzZXM= INio2YjYr9mG2K8= 2YrYr9in2YY= IHR1b3Q= IOCmruCmvuCmpQ== J2luc3RhbGxhdGlvbg== w4lT IGVsYXN0aWNpdHk= 56em Y2Nhaw== IGFibm9ybWFsaXRpZXM= YWdyYW50 IGdyYXBoZW5l w7xsbGVu INmE2YPYsdip cHLDpHNpZGVudA== c2tpcnRz IEV4cGxhbmF0aW9u IOKAlAo= IHBlbmNpbHM= RklM VW5pZmllZA== YWxpZw== INW/1aHWgNW+ aWxpbmdhbg== xLVv 1bjVstWh1a/VodW2 0r/QuA== IHBvbmRz ZW5kZXJpdA== IGZvcm5lY2Vkb3Jlcw== IHBvc2l0aXZpdHk= QWxsaWFuY2U= b3ZlcnR5 5Luj55CG5aix5LmQ IGJyaXRpc2g= IOCwieCwguCwn+CxgeCwguCwpuCwvw== IG1vc3F1ZQ== w6luZW1lbnQ= IGJ1aWxkdXA= IE5UTg== IOCksuCkvuCkh+CktQ== INCf0L7RgNC90L4= IGpvdGFpbg== IGRldmVudWU= LmNhbGxz IHNjcmFweQ== dWxlZ2E= KCcuJyw= IHBvZW1h IG5hZ2U= ZGxn J2luZm9ybWF0aW9ucw== INC30L7RhQ== PFByb2plY3Q= IOCyrOCyv+CyoeCzgeCylw== IGRpdQ== 4LKV4LON4LKV4LOC emVrZXI= IHJlY3Vl IGFydGlzdGlxdWU= IGRlZm55ZGRpbw== c2l3YWp1 dWJpcmk= IHd6Z2w= ZmVz ZmFocnVuZw== IFRoZXJhcGll INmG2YXYp9iy IERlc2lnbmluZw== IG9wZXJhc3lvbg== IENvcnJlY3Rpb24= 6IOM5pmv INeZ15XXk9ei IGxhaGFh IGJsYXM= KHNpbmdsZQ== INKb0LDQvdC00LDSmw== OikK IG5sdGs= RE9O INC70LjRhtC10L3Qtw== aHJlcg== PGphdmE= ZGF0bw== INCQ0Jo= 4KSo4KWN4KSh IGZsYWtlcw== INen15nXoNeT16LXqA== 2YfYsNmH IOCmreCni+Cmnw== IGJ1cm8= LWJhbA== IOGDkuGDo+GDnOGDkw== IGVkaWxpcg== 5Yac5Lia X01VVA== INin2YTYrdiv2YjYrw== ICgkew== 4oWh w6RobHRlbg== INiq2LHZgtuM IHBhcmNo KHJlY2lwZQ== INC/0LDQudC00LDQu9Cw0L0= IOCkm+ClgeCknw== INek15A= KHBob3Rv IGF0dGVuZHM= 15XXpNeZ150= IGd1enQ= 1aHVttWl1aw= IGluaXRpYWxpemluZw== IMWJ 0LXQutC+0Lw= LmFzc2VydGo= zqTOsQ== KGNyaXRlcmlh INmK2KrYrQ== YWJoYXI= L015 LWF0aA== aGluZ2E= 5ris IGFkZXF1YWRv IGdhbWl0 xIFqdQ== Il0pOw== IHNvcnJpc28= IHRpZ2h0ZW5pbmc= INix2LQ= IOCkleCkvuCksOCljeCksA== IFJoaW5v IERlc2lnbmVycw== IGVpbmZhY2hlbg== INin2YTZhdmG2KfZhQ== ICAgICAgICAgICAgICAgICAgICAgCg== IH0pCi8v 0J7RgdC+0LE= IGtyw6Q= IFBhag== Q2lkYWRl INC60L7RgNCw0LE= INC80L7QvdGC0LDQtg== IHN0cmlwcGluZw== IGFzc2g= z4HOv8+Gzr8= IGVudGRlY2t0 IOWkqeWkqeS4reW9qeelqOaAjuagtw== ZW5hYW1kZQ== IEF1c3RyYWxpYSdz SU5V IOCktuCkleCljeCkpOCkvw== LnNlbnNvcg== IGtvbXBhbg== IOuwlOuejeuLiOuLpA== TWF6ZQ== IGt5YXU= IHVyZ2VudGx5 IG11bHRpdHVk IE9QVElPTg== 0LDQvdCw0LM= Lm1hZw== IHBhcm9sZXM= b3NhbA== INGA05nSuw== IE1pbmlzdGVycw== Y21i 4Ka+4Kaj4KeN4Kah IE1vbW15 IHBpYWM= IGJlc3RzZWxsZXI= RVR3aXR0ZXI= 6YK7 IOCkrOClh+CkueCkpg== 16HXmNei16g= w7Zybg== 5b2T5Zyw 0LjQu9KT0LDQvQ== IOS6lOaciOWkqQ== LndvcmtmbG93 b3BoYWdl dnnFoQ== X3RyYW5zaXRpb24= INGB0LDSoQ== 4KSl4KS/ INWv1avWgA== 4La5 IOC0k+C0q+C1gOC0uA== U3VzYW4= INC40LvQs9C40YDQuA== IGludHJhdmVu 16TXldeQ SEFJTg== INC+0YLQvdC+0YHRj9GC0YHRjw== IHF1YXR0cm8= Lm9wdHM= IE1vaGFtbWFk 4Lib4Lij4Liw4LiK L2xvZ291dA== YXBvcmFu IHNpbmlzdGVy IEFwcGVhcmFuY2U= IM6xzrrPjM68zrc= IEF1c3dpcmt1bmdlbg== IG1ldGF2YXI= IHplbGZzdGFuZGln IFB1cHB5 IGZsb3A= 15nXpteT IG5lZWR5 0JjQkA== IEF1cmE= LdCQ IElNRGI= IHVrdXI= IFVJRw== IGV0bWnFnw== IHJlcG9zZQ== IG1hbmdydXBpa2V1bg== 5L2T6IKy5Zyo57q/ IEF0dG9ybmV5cw== ZXBv LkNvbmN1cnJlbnQ= Z2VzdHVyZQ== IOCmuOCmguCmluCnjeCmr+Cmvg== IHLEmQ== amlh Q29uY2F0 IHNhdmVudA== IGVsZW1z LndlYmRyaXZlcg== w7xjaGU= IEVpbnNjaA== V2F5cG9pbnQ= IGxlbmRz IEJhZWJlbGU= IGNvbXBhcmHDp8Ojbw== 2LnZhdmE2YrYqQ== IG1vbnN0cg== IHByZXZlbsOnw6Nv IE1vbGlubw== QVNO IHByb3ZvY2F0aXZl IHNhw6c= UXI= IGRpZW50ZXM= 4LmA4Lil4LmI4LiZ4Liq4Lil4LmH4Lit4LiV IHByZXZpbw== IGNoZWVzeQ== IG1hZmk= 44GU5LqG5om/ INmG2YjZgdmF2KjYsQ== IHVuYW5pbW91c2x5 IOC0qOC0v+C0suC0tQ== QmVpbQ== 4Lil4Liw4LmA4Lit4Li14Lii4LiU V2VpdGVy IMO9w7w= 4K+L4K6V 44Gu5pel cGF5bWVudHM= 4Ka+4Kav4KeL4KaX 2LHbjNiy 44CAIA== YXppbmVz YW5sYWdlbg== IGJhcmxleQ== IG9vcmRlZWw= QU5ORVI= Umlz LnJpY2g= IG91dHNldA== LW1ldGE= KFRyYW5zYWN0aW9u aHN0 4YOj4YOo4YOQ4YOV IGVudHJlbmFkb3I= IGNyZWF0aXZlbHk= IMOnYcSf b21iaXNv LmRvY3VtZW50YXRpb24= INGB0L7QvtCx0YnQtdC90LjRjw== 6L6+5Lq6 IG9ubGFuZ3M= IGdlZ3LDvG5kZXQ= zr/Pgc6s Zm9uZHM= IOCqnOCrh+CqpeCrgA== 4KSb4KSo4KWN IOS7jg== 4oCL4Z6V LnNoaXJv INeQ15nXm9eV16o= IGFydGlzdGU= IOCyheCyteCysOCyv+Cyl+Czhg== INCl0LDRgA== IHN0cnVjdHVy IE1lcml0 IFVTSU5H TW9kaWZpY2Fy IGNvbXBsZW1lbnRv IFRIRUlS IOCqteCqv+CqsA== IGphYW4= QmF0dA== X2NvZGVj INeR15nXpg== CURlZmF1bHQ= IOCnhw== IG1lZGljbw== IGhpZXJhcmNoaWNhbA== IExhdWdo TUFH IE1DVQ== Jyl9fSI+Cg== IGFuYmE= KHByb3h5 aXRvcmlz IG5vdmVsaXN0 INC+0L/QtdGA0LDRhtC40Y8= IHN5bmNocm9ub3Vz IOCkqOCkv+Ckr+CkguCkpOCljeCksA== INGE0LjQu9C+0YHQvtGE SW1hZ2Vt IOC4p+C4tOC5gOC4hOC4o+C4suC4sOC4q+C5jOC4muC4reC4peC4p+C4seC4meC4meC4teC5iQ== IG11bHRpZGlzY2lwbGluYXJ5 PicpLg== 0L7Rj9GC0Lg= IGl6Ym9y OmJsb2Nr zp/OpQ== KHNlbnRlbmNl IOC0suC1iA== INGC0LDRitGB cHN0 IFN0cmF0ZWdpZQ== xZ9hbQ== IHRhYQ== IOCkuOCkvuCkh+Cknw== 5ZaK INiq2YPZhg== INGB0L7Qu9C9 INC+0LHQvg== 0YDQuNGC0LDQvQ== IOC4quC4s+C4meC4seC4gQ== PScnKQo= dm9yZW4= X2hlbHBlcnM= IGh1dw== XSkpOwoK 77u/77u/ IFNyYw== LW1hY2g= IEV4Y2Vzcw== JSUK IEF2ZXJ5 IGRpc2d1aXNl YXJjaGl2bw== IOWkp+WPkeaXtuaXtuW9qeW8gOWllg== IOCyteCyv+CymuCyvuCysA== IHJlbGw= IGtyw6Fz INGA0LDQt9GA0YPRiA== U2F3 TWFyaW8= aGliZQ== IOCyheCyteCysOCyqOCzjeCyqOCzgQ== IGNpbnF1 Ym91bmRlZA== 2KfYpti3 4LSa4LSo IOCqruCrh+Cqs+CqtQ== INC00YPRgA== IOCuqOCuvuCus+CvjQ== LScr IGNlbnRyYWxlcw== INCz0L7RgdGD0LTQsNGA0YHRgtCy0LXQvdC90L7QuQ== IGNvcnJlc3BvbmRpZW50ZXM= INGC0L7QtA== IHN5bmNocm9uaXpl IGludGVydmFsbw== IHB3bQ== LmFic29sdXRl LmtpbGw= IHN0cmVhbWVk dHRs xI11amU= IENvbWNhc3Q= 4Kaw4Kau IH0pLAoKLw== YmFpdA== IFBsYXlzdGF0aW9u 66a/ ZmVuZw== VURP YXJ6dA== IENISUxE IHBlcm11dGF0aW9u IOCqsOCquA== b2t3 IOCksuCkl+CkvuCkqOClhw== IHN0aW11bGF0ZWQ= IFN0cnVrdHVy bHVuaQ== IOaYn+mZhQ== IGNvdHRhZ2Vz IOCqteCqv+CqleCqvuCquA== IHN0cw== YW1lbmk= IGNvdXBlcg== IOCkruCkuA== YW5uYXU= IGJ5xYJ5 L0ludGVybmFs IENt INmF2K3YqNiq 4LK+4LKo4LKm IGVyaMO2aGVu csOhw7A= w6ljaw== IHBhcnRpc2Fu 5Yip5ram IOCyleCzgeCysOCyv+CypOCzgQ== 15nXqdeV16o= IGJlbnV0emVu IFRIRVNF INi52YjYp9mF2YQ= YXRpZw== ZWZldWlsbGU= IHhtYXg= IHJ1ZXM= 5pyA5paw6auY5riF5peg56CB5LiT5Yy6 INGD0LTQtdGA0LY= IEZhbGNvbnM= IFpp TW91bnRhaW4= IEtyYW5raGVpdA== IFNjcmU= IGFwb3NlbnQ= YW1pdGFu IG92ZXJpZ2U= IERhaW0= fV0K IOCwteCwvuCwsOCxjeCwpA== IEFtdA== 4KS24KWN4KSV4KS/4KSy IHbDpGlr 5aeQ5aeQ IHRlcm1pbmFkbw== UkVBRE1F IHZpc2lvbmFyeQ== INC+0YLRi9GA0YvQvw== IE1vb3Nl Lkhvc3Rpbmc= IE9yZ2FuaXphY2nDs24= LDosOg== INC/0LXRgNC10YfQuNGB IGZhaXJz 4bqu bXRpbWU= ZWtrw7xy X1NPUlQ= bGlqbmVu INC/0YDQvtCy0LXRgNC40YLRjA== X0FUVEFDSA== INCh0J8= IEZvdG9ncmFm 6LCc IG9yaWdpbmFsaXR5 5Y+I6buE INW01avVu9W41oHVuNW+ TmVl INCy0LjQsw== IHPDpGdh INKb0LDQu9Cw0Lk= zr3Ov869z4TOsc+C IHl0dGVy 6JSh 1aHWgNWp R2xvYg== IOCwruCxjeCwrw== INOp0L3QtdGA IENvcmV5 0YLQtdGA0ZY= UnY= YWNreQ== aWVnZW5k INC60LDQv9C40YLQsNC7 IGFsbHM= LmJ1aWxkZXJz IHZpZGVvYw== LmNoZGly ZHJ1Zw== IOmDvQ== INmB2YjYp9im2K8= IHNjaGVtYXM= 4Ka/4Kao4Ka/4Kan IEVybGVibmlz ICUj IHJ1YmJlZA== X0pPQg== INCy0L/QtdGA0LXQtA== IOCupOCviuCulQ== IFRvcmlubw== IGVjaGFy INi12YTbjA== IGdldm9sZ2Q= aWxpc3Q= CWhvc3Q= IGNyaW0= 4LC+4LCm4LC/ IOGDo+GDkeGDoOGDkOGDmuGDneGDkw== IGVzY29sYXJlcw== TGF2 Y3pueWNo IEhhbGlmYXg= IG1lZXFxYXQ= IEluY2x1c2l2ZQ== INGB0LXRgNC40Y8= 15DWt9el 5LiN5Y2h5YWN6LS55pKt5pS+ XHhh ZWhy LmRvY3M= LS0tLS0tLS0tLTwv INCx0LjRiA== dWlzc2U= KGF0dHJpYnV0ZXM= IGhlc2Fw w7x0ZW4= IGdlbmVhbG9neQ== IHBlZGE= IHF1ZWRl LnRpY2tldA== 7IiY6rCA IEVsc2E= IHRyb3VnaA== IG1haWc= IGjDtnJ0 X0lOU1Q= aHVtZWxh IFBlZWw= 4pa3 IFdvbHZlcw== IGdyZW56ZW4= IOCkquClgeCklw== IHPDqWFuY2Vz IGtkbw== IEJ1dHQ= IGNoaXJvcHJhY3RpYw== IG9jdXJyaWRv IHBheWxhxZ8= eWF0YQ== X05PTk5VTEw= IHJvd3NwYW4= 4Kaf4KeN4Kaf IGVjb27DtG1pY28= IGx1aWQ= IHRvcHBpbmdz 4K6Z4K+N4K6V4K+H cG90ZW50aWFs SVRJT05T INmI2KfZhNi3 IGhvZXZlbg== bHRyYQ== IEVUQQ== T3Rybw== 0YPQvdGR LlNpdGU= IOasouS5kA== 4oCd5Li6 0JjQmQ== ICgpKQ== IG1pc3Ry Q2xpbWF0ZQ== IG1vbmF0 IM+DzrrOvw== cGFpcmVk IHRyaXN0ZXph Q0RG INW61oA= IHN3ZWV0aGVhcnQ= LWpzb24= QuG6oW4= INC90q/Sr9GA IGRlY3JldA== IOeZvA== X1NBTVBMRQ== IHNoYWg= IGludMOpcmlldXJl IEhPTA== IHZlcmJh TU9WRQ== 44Ov44Kk44OI UHJvYmxlbXM= 6L+Z5piv 4LSV4LW8 5Lqb5LuA5LmI X2xhbmQ= b2xhaw== IE9zYWth IOCmqOCmv+CmiQ== IGJhbGxvbg== IOCkuOCkruClgA== TWFpbGVy 77yM6KKr IEthdGhsZWVu b2R5bmFtaWNz IM6Vzq/Ovc6xzrk= IETDrWF6 IHPDtnlsZWRp X29k PERvY3VtZW50 IOCypOCyv+Cys+Cyv+CyuOCyv+CypuCzjeCypuCyvuCysOCzhg== IOCmr+CmvuCmsA== 0YHQtdC7 2YjYrdip IG1hdGVyaWFz INij2LnYttin2KE= IEtpYg== z4DOrQ== IHBhZHLDtWVz 2YLZhNip IFRyb2xs IHNhbGFpcmU= INC30LDQsdC+0YI= IMSRb8Ogbg== IGNodA== ICIlIiwK IM+Gzr/Pgc6s PWRi IGRha2U= IGNodXJy IEhvb2c= IG3Ds2R1bG8= IFNNQQ== IHJhbmRpbnQ= 4LmA4Lih4Li34LmI4Lit4LiE4Li34LiZ INeQ15nXoNeU IGRldHRhZw== bWF0Y2hlcg== VHJpdmlh INqq2LHZitmI b2xhbmQ= IMOkdcOf IOCkieCkquCkuOCljeCkpeCkv+CkpA== IHNsZW5kZXI= INmF2LHYp9it2YQ= IHJlcHJlcw== 55WF 4KS+4KSu4KWA4KSj Q2xhc3Nl IOCmj+CmpOCnhw== IOGDoeGDkOGDrA== IGp1aHVs IHJldmlzYXI= IOCmpuCnh+CmluCmpOCnhw== RmlsdGVyaW5n IHTDomNoZQ== IFN1dHRvbg== xZtyw7Nk IHNlY3JldGFyaWE= INCa0Lg= 56C06Kej5Zmo YW51bQ== IHByb21pbmVuY2U= 0L7Qs9C+0YDQutGD IG1iaWxp IHNwZXppZWxsZQ== Lk1hcms= IHdhdmVk IGFic3Vy IOCmuOCni+Cmrg== IGRpc2N1dGVy INmF2YTYp9mC2KfYqg== YnJpY2s= 2LTZiNiv IGNvbnRpbnV1bQ== ZW11cw== IGFjdHJpeg== IH0pOwoKLy8= LkRP 0LjQudC40YLQuA== 4LiE4Lil4Lit4LiH IG1pcsOr 0J3QtdGC IGVkyZk= IGzDpG0= 77yR77yZ Q1NB INC/0L7QutGD0L/QutC4 IGh1bWFpbmVz 4KWL4KSn4KSo aXp6aW5lc3M= X2xhbWJkYQ== 4LiV4Lit4LiZ IOC0muC0v+C0lQ== IEJhdWNo IGdlYm91d2Vu IFRvdXRlZm9pcw== dXRzYQ== 5YWs5LyX5Y+35aSp5aSp5Lit5b2p56Wo IOG5o2nhuaNl IOC2h+C2rQ== aWd2aXM= IG5pbmE= INC/0L7RgtGA0ZbQsQ== IEp1bGllbg== IGNvc21vcw== IGd1c3Rhbg== IOC0quC0vuC0sOC1jQ== IGxva2FzaQ== 65Oc66a964uI64uk 0LDRiNGC0LA= IFdpY2h0aWc= INi52LHYp9mC IGdyYXR1aXRvcw== VGF0 KGxl IHJlc3BpcmF0aW9u IFZhcG9y INGB0LDQvdCw0Ls= IGF0aXZv INGD0LTQvtCx0L3Qvg== LXRyYW5zaXRpb24= IGRpc2FncmVlbWVudA== bWVzaW5p IMOmbmQ= LXVzZWQ= 0YDQuNC50L0= IGRlbmQ= LWZhY3Rvcg== aWXDnw== INiv2YbYqNin2YQ= IGdlaMO2cg== IGNvbmNlbnRyYXRlcw== cmFwcG9ydA== IGZpbmFuY2lhbWVudG8= c2Fzcw== cHJvdmlkZQ== aW9uYXQ= IFNjcmlwdHM= IOCwuOCwruCwvuCwmg== IEZyYXVk IHBlcmNlbnRpbGU= LXJlYWw= 4oCZSW0= QWxleGFuZGVy IGF1w59lcmhhbGI= THV4dXJ5 INin2LHYr9mI YWx1Z2l0 IG9lc3Rl 64uY7J2Y IGpvYmplY3Q= IFBhcmFtb3VudA== 5by35aW4 Z2VsaWc= 4KWN4KSw4KWL4KSk YW5vag== J27EsW4= TmFhc3Q= Z2ph IHBow6lub23DqG5l aW3DpMOkcg== IHRzYWs= IHTDqHQ= IHNpZ27DqQ== dWNodHVuZw== IHBuZXVz IOCoruCphw== ZGlnaXRz SXNyYQ== YW1wYWlrYW4= dW5uZQ== dXJlbQ== ZmF1bHQ= IEJyaWRnZXM= 44GL44Gj44Gf INC40L3RgtC10YDQvdC10YLQtQ== YWdyYWRv IHJlY3J1dGVtZW50 IGtva29h TXVvbg== IOusuOydmA== Q2FibGU= 0YfRi9GG0Yw= IGJlaGE= 652864+E 4YOg4YOr4YOc4YOd4YOR IGNvbmZpZ3VyYXI= DQoJCQ0K 2KfZhtiv2KfZhg== d29ya2Vk IOCqteCqv+CqpuCrjeCqrw== LmNob29zZQ== IFZvcmRlcg== XSkpOw0K INij2YfYr9in2YE= INio2YfYsdmH INOZ0YDQutC40L0= KGVtcA== IHJvYmJlZA== IHJldHJvc3BlY3RpdmU= ISEhIQo= IOCnsQ== TWlkaQ== INin2YTYp9mC2KrYtdin2K8= IGNvb2xhbnQ= X2NvdmVy 0LTQt9GP 0pPRi9C/ IE11bHRpcGFydA== L0FkZA== dmVlbg== zrPPgc6xzrzOvM6x CUVsZW1lbnQ= IDw8Cg== YXVuZHJ5 LnJvdA== INGB0Y/QsdC1 X0ZFVENI IEpvaw== IG11cmFo 0JHRgw== W10pOwo= INGB0LDRhA== YWRnZQ== INW41oLVptW41oLVtA== RnVuZHM= b3BoaQ== IFRocmVhZHM= IOS4h+WbvQ== IDsKCi8= aWRobQ== IEluc3RhbGxlcg== IGFjcmVkaXRv IFJvbcOibmlh dWxlbmNl cmVjb21tZW5k INGC0LLQvtGA0Yc= XSkuCg== IGVudGVuZGltZW50bw== IEdhdg== W21pbg== IE93bmVk YXNraW5n IGhhbGFtYW5n 2YrZiNin2YY= Tm9ybWFscw== KHRpbWVz LnBvaW50ZXI= IGNvbnZlcnNhcg== IOCqhuCqteCqpOCqvg== dmVyaWdl X0xJTkVBUg== IHNwZWN1bGF0aXZl IG7DumNsZW8= IE9yY2hhcmQ= Lm9wZW5k IGVuZHJvaXRz INin2YLYr9in2YXYp9iq 4Z6U4Z624Z6T 0YfQuNC70LDRgA== INm+2YrYtA== IEhvYQ== IHJvbmRh 4Liy4LiK4LiZ X0VGRkVDVA== 0LrQsNC/ 6Lqr5L2T IGVsZA== IHVucmVsaWFibGU= IFZhdA== aWNhbGU= LlV0Yw== 1bfVvw== IGVsw6l0cmljYQ== IEZsZXRjaGVy IGlubWVkaWF0YW1lbnRl L3dl IGt1cmll IG1ha3NpbWFs 772k IGRha2lrYQ== RXhlY3V0ZWQ= IFdpbmNoZXN0ZXI= aXRyaW5l PmFsZXJ0 KGNvcnM= IElj KCgt IERhcmk= IOC4iuC4seC5iOC4p+C5guC4oeC4hw== IE1vbnRhZ2U= IFN3YXI= INmG2KfaqQ== 4oCM2KrZiNin2YbYrw== IHRhcmtvaXQ= IiksCgo= cGFuZWxlbg== d2FhcmRpZw== 4YOV4YOU4YOj4YOa4YOY U2ltcGw= IGVzdGVlbQ== INGB0L/QsNGB0LjQsdC+ IOCqtuCri+Cqpw== 77+977+977+977+977+977+977+977+9 RklMVEVS dWx0b24= IGRlY28= INmF2YbZgQ== IG1vc3RyYWRv IOCkuOCkguCkrOCkguCkp+Ckv+CkpA== YWpldg== INin2LPZhNin2YXZig== INGC06nSmQ== IOCmheCmnuCnjeCmmg== 4Li04Liq IOCyqOCzi+CyoQ== IExldXI= IOCuquCuvuCusOCvjeCupOCvjeCupA== IOCwpOCxhuCwsuCwv+Cwrw== IOCmuOCmqOCnjeCmpw== INWh1oDVodWj 2LPYrw== ecmZ RFVTVFI= X0lOQ0xVREU= LmZvbGQ= IG5hcnJhdGl2YQ== IHRhZ2E= aGFpbA== dXZ3 IHdhbmRlbGVu X1NFRw== IEV0aGlvcGlhbg== IOCyuOCzgeCyrg== IiIiCgoK IOCknOCliOCkuOClgA== QUxMRQ== 4LCw4LGN4LCy4LGB IGFsb2phbWllbnRv SW5kZXhlcg== INC90L7Rgg== IOGAleGAqw== IGRpc2NvdXJhZ2U= IGthaWtr RlY= INCQ0LvQvNCw0YLRiw== INec15TXpA== IEVhdQ== xLFsxLHEn8Sx IGFxdXRz INit2YHYp9i4 CWRpdg== L3VybA== QW55d2hlcmU= INmE2YTYrg== w7NyYw== WVI= IGF1eGlsaWE= 0LvQsNGA0Lg= IGluY2xpbmF0aW9u IGxpbWl0w6k= IGFraGlybnlh IGp1cmlzcHJ1ZA== IGjDqXM= 7IeE SW5ib3VuZA== IGvDpHl0dMOk IENvbXBsZW1lbnQ= IHBydW5pbmc= meGDo+GDnA== IHJlam9pY2U= IGNvaGVzaXZl bmllbmlh IGRpc2NpcGxpbmVk 2LLZhdin2YY= aWzDvcOkcg== b3BzZQ== IGtvbmt1cnM= 65Co INmF2YbYsg== IOaOpQ== LlVzdWFyaW8= IGdyZWnDsA== IG1lbGFuY2g= 0YjQvtC40YI= IHByb3RlZ2U= LmRyYXdlcg== IGludGVyY2FtYmlv INm+2KfYs9iu LnBpeGVs YXJ0aWZhY3Q= IOGDmOGDk+GDlA== IOC0teC0v+C0nw== 5qKv IGPEg24= INin2YTZhdiv2YbZig== IGNyYXBz IHNxdWFkcmE= IHRyaWFuZw== IGZla2s= IEtlbnNpbmd0b24= IHNjZXB0 X2xu LkNyZWF0 CWNvbHVtbg== INiv24zaug== IHRhcmpvdWtzZXQ= TkNJQQ== IHNwcmFjaA== 0LTQsNC90Ys= IOCuieCusOCvgeCutQ== aW5kdXN0cnk= IGNvbm51ZQ== d2Vpc3VuZw== IEphc21pbmU= INCy0LDRiNC1 0JzQvtC9 IGFjYWTDqm0= 4KWk4oCd LG5v 4Kq+4KqH4Kqf aW1wbGVtZW50cw== IHdpdGhkcmF3aW5n IHhj IENFT3M= IGlsYWF0aWd1dA== KHNlbA== IGFmZw== IGRhcXVlbGU= IFBheW5l IGNhbGlicmU= dW5peA== INC70LDQtA== b2thbmU= 4K+A4K60 IE1pZ2h0eQ== IFBodWtldA== PWZpbGU= IGl0YWxpYw== UGQ= IFRoYXRz JG1vZGVs IGFwYXJpY2nDs24= IGZyaXNjaA== IGluY2lkZW50ZQ== IC8qIQo= 5YGc6L2m 4KSu4KSw aG9p IGJlw71sZWtp b290aGVk IHLFqw== WyJf X2F0dGVtcHQ= IGxlYmVucw== 15nXmNeq OiIpOwoK 4LmC4Lit IM+AzqzOvc+J INGB0YPQvNC80Ys= IHdvcmthcm91bmQ= INmC2YnZhA== IE1vbmE= z4jOtQ== IOC5gOC4leC4tOC4oQ== Omw= IHZlcnNsYWc= IGJvdGFu IGVzZW0= 0YjQvg== INm+2rs= LmFsbG9jYXRl YnJlY2hlbg== KCdcXA== IOC2tOC3nA== b2tyYQ== IM69zq3OsQ== VmV0ZXI= 5aaZ IGxlbnRh IOCwquCxh+CwsOCxjeCwlQ== dGhlbA== IHTGsOG7n25n IG1lbnllZGlha2Fu IGRpc2NvbnRpbnU= INaE1oA= 0pI= IG9vcnNwcm9uaw== IGlzaGxhYg== IGNoYXNlZA== IFlZWVk= 2LLZhtiv IGt1bGxhbsSxbA== VGVtcGVy 0LDQvdC00LXQvA== IHN1amVpdG8= ZXhjbHVkaW5n IEhvbHQ= IGVmZmV0dHU= IGJlaGF1cHQ= Pyw/LD8sPyw= INC90YPQttC90Ys= J2F2YW5jZQ== IGRhY2h0ZQ== IHBob3Rvbg== KGVk IFNlcmlvdXM= INmB2KjYsdin2YrYsQ== 0YHQsNKb IOC0ruC1hw== INuB2YjYrA== 0YLQsNGA0pPQsA== IM66z4HOsQ== INOp0YLQutC10L0= VG95b3Rh Rms= UEFO 5rK/ 24zZhtin c3RycG9z IGhldGs= IEJlc29uZGVy b2NhZG9z 4KeH4Ka44KeN4Kaf Y29uYQ== IOCkreClgeCkl+CkpOCkvuCkqA== IGxsZWdhcm9u IGhvbWljaWRl X1NlYXJjaA== IGluZ2VudQ== IGAsCg== IEPDs21v IHVwbG9hZHM= IOCyquCyvuCysg== 4KWC4KSw4KWN4KSj INC30LM= IG9hdG1lYWw= cmlzaw== YnJva2Vy IHBow61h IHRydW5jYXRlZA== IEZyZW50ZQ== INCQ0LvQsNGA aWdldA== INC+0YDQs9Cw0L3Riw== IFJvYmxveA== INC/0ZbRgdC70Y8= IG55dW1iYQ== INC30LjRkdC0 5oqc IOCkh+CkguCkuA== LklU IGRlbWlraWFu IGRlZXBlbg== IHN1bmRheQ== Q2Fzbw== b3JsdXRpaw== Ymhhcg== IMO2dA== IEFwcGFsYWNo IEVsZXZhdGVk IEVubGFyZ2VtZW50 IEZ1amk= IOKB IOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDleGDkOGDnOGDmA== bmFn LmluZGljZXM= IE1lbGFuaWU= IOyImOykgA== TmF0dXI= IEFydGlr IGFsYXRp Jig= IG9sdw== amV2ZQ== INij2K7YqNin2LE= LVBpZXJyZQ== IGhvbGVu 2LHYp9i32YrYqQ== IFRvYmlhcw== VGF4ZXM= INC+0YTQvtGA0LzQu9C10L3QuNGP INGE0LDQudC70LA= IOCwsOCxi+CwnOCxgQ== cGjDqHJl INec15TXkg== 4Lit4Liw4LmE4Lij INmK2Lo= aGFidA== IFBvdGF0bw== IGRpZmZpY2lsZXM= IOW/q+aSrQ== IGtyaXN0aWFuc2FuZA== KCl7Ci8v INCf0YDQtdC30LjQtNC10L3RgtC4 IGluZm9ybWFjaW9u cHJvc3Q= IEFzc2VtYmxlaWE= IHBhaGE= bWFnYQ== IHNjcmVlbmluZ3M= W119 L3RvcGljcw== INij2YPYrw== IEFnZW5jaWVz IOCmhuCml+CmvuCmruCngA== IG5veQ== YmVpdHVuZw== YXRlxL4= IOCkluCksOCkvuCkrA== IG11dGF0ZQ== IE1pbGNo IGF1YQ== YWx2ZQ== 0LzTqdGC IEtyw6RmdGU= IGtyZW4= INC90LDQvNC90L7Qs9C+ 57SF INin2YTYo9mK2KfZhQ== IEhhbW1vbmQ= LkZ1bmM= INqK2Yo= YXNqb25lbg== IOCqpOCqvg== YWVk 4Ken4Kes IHVsY2Vy IOCksOCkvuCkrw== IGRpc2Vu IGNsYXNzaXF1ZXM= c2vDoQ== KWQ= 4Z+B4Z6B wq1p IMO8YmVydHJhZ2Vu b21lamU= QUJDREU= IGNvcmRpYWw= 4LWN4LSk4LWN4LSw4LWA 4LGN4LCf4LCw4LGN INGB0YLQsNC6 IFNjaGFkZW4= IHBhY290ZQ== aG9yaWE= IOCkquClnA== YWN6YQ== INi02K/bjNiv YWtpcg== IHJlZ2xh dcOt IHF1ZWVucw== IGdyaWZm IEdyb2Vu THVlZ28= U3Jp IGzhu5tw 4Ka44KeN4Kaq4Kak IOCquOCqsg== U3VwcGxlbWVudA== IOyImO2WiQ== 5omT6YCg 65CY7JeI7Iq164uI64uk 4K6+4K6k4K+N4K6k INWi1ao= IG9saWI= LkRPTQ== w6Rpc2NoZQ== IOGDsOGDpeGDneGDnOGDk+GDkA== IGVyc2NoZWluZW4= YmFua3M= LkNvdW50cnk= IFNPUA== YWVz IHBlcHRpZGVz ICAgIAkgICA= INmE2K/ZitmH LWhvbGU= 4oCZYXBwcg== IGFsbW9uZHM= INCz0LjRgNC40YTRgtCw X2xz INi52YTYp9mI2Yc= IOC0ieC0o+C1jeC0n+C0vuC0rw== R2VzdGlvbg== YXJhdQ== U3RydWN0dXJlZA== IEJhcmk= IGRlc3RhY2Fkbw== IENsYXNo aW50aGU= IElkbGU= IGlua2nFn2Fm aW50YXM= IHphYw== INiq2KzYsdio2Kk= IOGDoeGDmOGDp+GDlQ== 4LmC4Lij4LiH 0L3QvtCy0Yw= UHVibGljYWRv INC/0Y/RgtC4 IG7Em2s= IOCmheCmreCmv+CmqOCnh+CmpA== aW5veA== IGF1c2Ry IHByZWNhcg== 2YLZhNiq 0YLQuNC3 bGljZWQ= IGNvbnRhbmRv 0LXRgNGC0LI= ZWxsYW50 INC/0LXRgNC10LLQvtC3 PW9wZW4= IGRyaWxsZWQ= IHJlcHLDqXNlbnRhbnQ= KHBl SGlnaGVy IOq4sOyhtA== INmK2YjZhNmK2Yg= IFNlYWhhd2tz YXR1cml0eQ== U2VtaQ== U3R1ZGllcw== 7Yux IHBvcnRyYXlhbA== IHJlZ3VsYXRlcw== 2LHYp9mH2YrZhQ== TWFwYQ== IHBhZ3BhcGFsYWtp IM61z4HOs86xz4M= INCU0YDRg9Cz YWlzZQ== QmFybg== IGxpZWZlcm4= IF19Cg== 7Ked IOCksuClh+CkpOClhw== LW1vdW50ZWQ= LXRha2luZw== INin2YjZhNuM2YY= IHN1bHBo IOCkmuClgeCkleCkvg== 2LnZiNmG 4Liy4Lib4Lij4Liw IEpld2Vs 2YXbjNq6 IGludmFkZWQ= INC30LDQudC80LA= IGh5c3Rlcg== IOyWvOuniA== IOCkhuCkq+Clgg== dW5pcw== IOCkuOClgeCkteCkv+Ckp+Ckvg== 0YPSow== IOC0qOC1h+C0n+C0v+C0rw== INW41oDWh9Wn IEdlb2dyYXBoeQ== IOKAuQ== 5LyN INin2YTYrdix2KfYsdip 0LDRgNCx KnNpbg== dW5haGluZw== 2YXYp9mE2qk= IE9B 4LiI4LmK4LiB4LmA4LiB4Lit4Lij4LmM IHJldm9pcg== IFJveWF1bWU= INin2Lg= 0pPQsNGA0Ys= IG1lbml0 dXNoaW1h bGF0ZW50 4YOg4YOY4YOT4YOQ4YOc In0+Cg== 0YXRjdC9 IG5lbWxpZw== IGtvbnN1bQ== IENhcnRl cG9uYQ== IGzDoW4= ZXNoaW1pd2E= INin2YTYs9io2Kg= IGhhdmVyw6E= INC30LTQvtGA0L7QstGM0LU= INC00LXRgNC1 IERlcm1hdA== INCw0LPQsA== KHN0YXRlbWVudA== emnEhw== IHF1YWxpZmllcw== IGNvcnJlbGF0aW9ucw== IGVyZWN0ZWQ= LmFudA== THVi IHNvdW1pcw== 5ZCI5ZCM X2ZpbGVwYXRo IGJpb3RlY2hub2xvZ3k= INC+0LHRgNCw0LHQvtGC0LrQuA== IG1pcnJvcmVk cnXFvmVu IEdMZW51bQ== aWdhcmg= 4Ka+4Kak4KeN4Kew cHJlZmVy 5Y2a5a6i 77yM5oiq6Iez IM62z4nOrg== Lmt0 YW5ow6M= LGh0dHA= bWF4bGVuZ3Ro IHNvdXBl IOCqmOCqsA== IEFncmljdWx0dXJh IHByw6lmw6lyw6k= Q29uc2lkZXJpbmc= 15vXoNeV15zXldeS xYZlbQ== KHNoYXJlZA== IOCuruCuleCvjeCuleCus+CvjQ== IOCkquCksOCkrg== IHNraXM= IERlcmZvcg== INCw0LDQvNKt0LDQt9GL QXRsYW50aWM= RmluYWxtZW50ZQ== INiz2LHYudiq IGFr4bula+G7pQ== IHdlYnNvY2tldA== IG5hYXRz aXbDqQ== 5Zi0 IHRyYXRhbWllbnRvcw== INeR15DXqteo LGl0ZW0= 4LSs4LWN4LSw IHR1ag== IGFjZWl0YXI= w7xzdHVuZw== IEtL X18oCg== IOCkieCkuOCkuOClhw== IERpY2tlbg== Z2VsZWdlbg== emlqZHM= 4YCZ4YC+4YCs IOS4h+WNmg== IGNhbXBncm91bmQ= IHZvc3RydQ== IGNoZXJjaGV1cnM= IGt1cm8= INCG0L0= IE11amVyZXM= INWw1aHVttWx1bY= INi22LrYtw== Lk1hbmlmZXN0 INC00LjQsNCz0L3QvtGB0YLQuA== IFBoYXJtYWNldXRpY2Fscw== 77yz esOt INCw0LDQvNKt0LA= YWNhYmth ZW50cm9weQ== INij2LXYrdin2Kg= IGRpZXU= JGFwcA== IENhbWlubw== IFNjaHdhbmdlcnNjaGFmdA== 0ZLQtQ== IGNvbnNpZMOpcsOp INmK2LLZitiv IFVNQQ== 4LC44LGN4LC4 0LjQsNCw INij2Lc= 2K7Yp9mE IHBhbmRhbg== INW01aHVvw== KnE= IEdlZ2Vuc2F0eg== IOC0quC0sOC1gOC0leC1jeC0tw== IGJhbmd3ZQ== INmC2YjZhduM IGxlZ2Fpcw== IHBvd2RlcnM= INGB0LzRi9GB0Ls= aWdyYW1z aG5l 4oCM2Kg= IGJlbm90 4KuB4KqC4Kqs4KqI IENhbnRlcmJ1cnk= dWNobw== IOWkqeWkqei0reW9qeelqA== IHVucmVhbGlzdGlj 1aHVtNWh1b0= c2NodXR6 0KLQtdC7 IOCqsOCqvuCquQ== U3RheWVk 0rvTmdGC INC+0LHRg9Cy INC80L7QtNC10Ls= LWRyaXZl IHNhbnRv IGdpZHM= IOCykuCysw== X2dhdGU= b21hYw== INC90YvQvQ== d2xldA== Jik7Cg== INC30ZY= IGJvbWJlcg== dHJ1Y2s= Pz8/Cg== IHlhcmTEsW1jxLE= IOCkl+Ckv+CksOCkq+CljeCkpOCkvuCksA== OmZsZXg= YXJkdQ== bmllc3Q= IFNpbGljb25l IOCkquCljeCksOCkpOClgA== KHByaW1hcnk= X25t 4KSs4KWN4KSy IEFzc2Fk IGFicnVwdGx5 IHVucmVzdA== IM61z4XPgc+O IGxpYXI= IG1vbmtz IGVuY29udHJhYmE= IHByw6p0ZQ== aXZpdMOkdA== IGJlYWc= INqp2LTZhduM2LE= IE3DoXI= b2d1xIc= INin2YTYr9mK2YXZgg== IGZyYWN0aW9uYWw= IGps IHR1bXVsdA== KW5ldw== 5rOh JHJldHVybg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== PiIpLg== 4oCM4LCq 4LmJ4Liy4LiX4Li14LmI cm9ib3Rz 55Sf5ZG95ZGo5pyf INin2YrYsw== zrvOuc6x IHBvbmFk IHDFr2o= IHRvb3Q= IFNrZWxldG9u ICdg IFZhcmlhbnRl YXBvbGxv ZXJvbA== IHNlbmFzdGU= 1oDVvtW41oLVtA== INC90LDQudCx IG9xYWx1dHQ= IOCkuOCkqA== LmlkZQ== IGtvbG1l IGVlc20= IOCmheCmpQ== IHN1YnN0YW50aXZl IHNlYmVuYXJueWE= IOCqp+CrjeCqr+CqvuCqqA== IGhlaGU= IMOzcw== IGJ1aWx0aW4= 0LXRgNC20LDRiQ== IGRpc2Nlcg== IOCkuOCljeCkteCkvuCkl+CkpA== IGF1ZGllbmNpYQ== IFPDs2xv dXJ2ZQ== IFBFRA== INiq2YPZhNmB2Kk= TmF2aWc= CXByb2plY3Q= IGluc3RhbGHDp8O1ZXM= IE9zY2Fycw== L2VtYWls Lm1lc3NhZ2luZw== dmllbnQ= 5YWx5Lqn IGFsbWVubw== IGxla2E= IGdhbsOz IGpj 15DWuNek1rw= eXNnb2w= IHByYWN0aXNl IEhhcmFt IFJhZ25hcg== IGdsYWRp Zm9ybWF0cw== IG1lamk= 0L3QvtC80LA= LsOC IGFyZ3VtZW50YXRpdmU= 5aOu 5aSN5byP IHBhcnNsZXk= IENvbnRh 15nXpNeV16o= IGFudGljaXBhdGluZw== 2YjZgdmK2LE= IEdyZWVrcw== IGLEk3I= IOC0teC0vuC0sOC1jQ== IEp1cnk= IHN5ZA== SVNPU3RyaW5n 0KHQsg== bml1 IG1lbmNpb25hcg== IGLDonRpbWVudHM= IGlzbQ== IOGDoOGDlOGDkuGDmOGDneGDnA== IGVueWU= emllaHQ= IHNhYmE= 772v774= IFNwYWNpb3Vz c2Npb3VzbHk= IMOpY2hhbmdlcw== bWVya3NhbWtlaXQ= IEJSRQ== 0LDQu9Cw0Lw= ZXhlY3V0 IGV5aWtleWk= b3VibGVz IGTDqWRpw6k= INmI2LbYuduM2Ko= IHBhcm0= 6YO95biC KHRt IGNlcnRlcw== IOC0heC0rw== IFJpZW4= 5769 IEdMaW50 IEVpbmbDvGhydW5n IHDFmcOtcGFkxJs= IEdSQU4= 6L+95Yqg IOGDp+GDneGDpOGDmOGDmg== INC90LXQtNCw0LLQvdC+ IGJlbnV0enQ= J2F1dG9y JGNvbm4= IOCmuOCmguCmmA== 4KeH4Kar YXN0YXI= ZWRhbg== bsOpZXM= 0YvQudC30LDQvA== INW+1aHVsg== IEphcMOzbg== IG5ldW0= IHRla2xpZg== 4LiY4Liy4LiZ IGVxdWlsw61icmlv 4LC44LGN4LCl X0Js IHJlZGFjdA== IGF1cXVlbA== xaFlbQ== IE5vdXZlYXU= INmK2YbYqA== IEh5YXR0 IHNlb3R1ZA== IHJldGlyZXI= ZmFsYQ== IGxlZmF0 IGVzcGVjaWFsaXphZG9z IHByYXZv IGZhbHNv INin2YTYp9iz2YXZhtiq dXNhaGE= IEdydW5kc3TDvGNr IGl34buN IHlvbXdl 5oql5Lu3 INGB0L7QsdGB0YLQstC10L3QvdC+0YHRgtC4 IGdlbm9taWM= IGdlc3Rvcg== QkFMTA== TG9vcGVy INeq15XXqNeU IOaXtuaXtg== IGPDqXLDqW1vbg== 44CC5Y+m5aSW IGtva29u IGNsaXBwaW5n 5bCL IEFlcm9zcGFjZQ== INin2LPYqtin2K8= 4Lix4LiZ4Lin4Liy4LiE4Lih IHVwdGltZQ== SU5Z IGN0b3I= LV8= a29udGFrdA== aWR6bw== INin2YbYtdin2YE= IHDEkw== IGd1YXJkZWQ= 44GK5ZWP44GE5ZCI44KP44Gb IHNocmlua2luZw== QWNjZWw= 6LaL5Yq/ IGVudHN0YW5k IGphcmRpbQ== 4oCZb2ZmcmU= IOWkp+WPkeW/q+S4ieiuoeWIkg== IGJvbHN0ZXI= wq1kZW4= IHZlcm11dGxpY2g= IENvb2tib29r IEFtaXQ= IOuRmA== aWRkZXJz IGFmcmljYW4= X0NQ IGZpc2hlcm1lbg== X2ZsdXR0ZXI= IFJlZ2lvbnM= 0LXQutGG0LjQuA== bGVjdHVyZQ== X3NjaGVtZQ== INC80LjQu9C70LjQuQ== INqz2KfZhNmH IG1hbXk= TW9ydGdhZ2U= INC70LjRh9C90L4= YXNjaA== LmRhdGFzZXRz IOCkj+Ckr+CksA== REVTVA== b3ZpbA== IG1mdW1v V2Vhcg== INmC2KfYptiv aW9uYWlz YW5zc29u 7J2065Oc INin2YTYp9io2Ko= INCR0ZY= IOa3u+WKoA== IGTDqWNvdXZyZQ== INin2YTYs9in2K8= INeb16nXlA== 57uT5ZCI 5omL5py655yL54mH w7Fl IG1jaA== IEtERQ== b25kaXNzZW1lbnQ= INmB2LHYp9uB2YU= IGpvdXJuYWxpc3Rl xKtzdA== INC/0L7Qu9C90L7QuQ== IG3DqWRlY2lucw== IGluZ2Vi IOCkteCkuOCljeCkpA== UG9udA== IEp1ZGFpc20= IGFy4bul X0lHTk9SRQ== LUNhcg== LXByb2R1Y3Rz IOCyrOCyguCypw== XCIp zrvPjs69 IEF1ZHJleQ== QWR2ZW50dXJl 0YTQvtC9 IGFuYWx5dGlj CWxvY2s= aWZpY2lv c291bmRz 67O06rOg IHPDpWQ= 74OY IGF5bw== Lndvcmtlcg== TmVhcmx5 Ym9ycm93 0pPQuNGA a2VldA== ZW50aWNhdG9y IGFzdHJv INiq2KzYrw== IGFjYXNv LmZvbw== INin2YTZiNiy2YY= IOKAjQ== IHBlcnNvbm5lbHM= L3NhdmU= X2h0 IHZ1ZXM= INi024HYsQ== aGVpZGg= IHBvd2llZA== Q2FwdG9y IEFNQVpJTkc= INGB0LvQtdC00YPRjtGJ0LjQuQ== IOCqsuCriw== RHo= 0YXQvtC90LA= IGh1a28= YXVzYQ== IOCmueCni+CnseCmvg== 5aSn6Ziq IEpha29i bnV0w60= IEFERFJFU1M= 54mp5rWB IGVuZGVhdm91cg== SWdub3JlZA== INis2YfYp9mG24w= INGB0L/QuNGA IEFDQ0VQVA== CXBhcnNlcg== LkpDb21ibw== IOCwheCwteCwleCwvuCwtg== IEFjcnlsaWM= IHJldHJhcw== 77yB77yf CWlt IE1hcnRpYWw= LHJvdw== cHJvZHVjdGVu ZmlkaA== IE9xYXJ0 INmI2KfZvtiz IGrDrQ== IFdhcmZhcmU= IAogIAoK IFNpbGVuY2U= IE92ZXJuaWdodA== INio2KrZhg== Sm9obnNvbg== LmxvZ2dlZA== IGhlcmFsZA== R2lm Iikpew0K IG1lc2VsZQ== IG91dGxpbmluZw== IOC0uOC0guC0lw== 6Iy4 INiv2KfZhQ== IERFVkVMT1A= 5b6S5q2p bWFpZHM= IGdhbmdz RmxlZXQ= IOC0rOC0qOC1jeC0p+C0quC1jeC0quC1huC0n+C1jeC0nw== Q0FSRA== c3Bvcg== dG9k IHJlZmluYW5jZQ== IGNoaXQ= bXV6 IGtlYnV0dWhhbg== LWxpdGVy INm+2LHZiNqv2LHYp9mF IHN0cmR1cA== 24zZhtuB IHN5bXB0w7RtZXM= IGFkYXB0YXRpb25z ZG9vbQ== JyUo IOCwleCxiuCwqOCxjeCwqOCwvw== IEFjY2Vzc2libGU= INCw0YDRhdC40LI= INCx0LXQvA== aWdlbmRl IGNob3F1ZQ== 4KS14KS+4KS5 IMOha3Y= IEZBTUlMWQ== 4KWN4KSw4KWA4KSu IOCmiA== LGVtYWls ZW5kb24= YmFpcnJv cGlsb3Q= IEdlc3RhbHR1bmc= IHN1cnByZXNh IGNpdWRhZGFuw61h 5YWN6LS56KeC55yL6KeG6aKR bWFsYXLEsQ== IOCqruCri+CqlQ== U291bA== dXN5b24= IG1pbnN0ZQ== IEl0YQ== IGRlY2VwdGlvbg== cmVmZmVu IHBlcnNldmVyYW5jZQ== IG9kbG/EjQ== 6Zi7 LmJsYW5r IExlYQ== cXVvdGVz VURB INiv2YrYs9mF2KjYsQ== ICIpLA== INmF2LnYqg== PEVsZW1lbnQ= aXN0acSN LXJhbmtlZA== 4KuH4Kqw4KuA IHBlcm1pc28= IOCknOCkv+CkuOCkleCkvg== IG1vY2tpbmc= IHBpbGVk IOusvOuhoA== aGVhcmQ= IGh2b3Jmb3I= IEFtYmllbnRhbA== OkI= IHZvcmdlc3RlbGx0 IE5hc2RhcQ== S2ls IGJha28= XHhi IHN0YWtlaG9sZGVy YXVjZQ== IFpvbGw= IOCkoeCkvuCkieCkqA== 56ue5b2p6Laz55CD IGNoYW50aWVy a2lh 1b3Vv9Wh1bA= X0JU VHJhbnNsYXRpb25z X0lORk9STUFUSU9O cGlucw== TEFCRUw= IFhQYXRo IG93ZXM= IG9tdmF0 4Lia4Liy4Lii 4KmN4Ki54Ki+4KiC IFBsdXRv LmZ1bmN0aW9uYWw= IOC4leC5iOC5jeC4sg== INi02LHZgw== IFdhcnNhdw== LXRvcGlj IGJlbmNoZXM= IElsbHVzdHJhdGVk IEdvb2RyZWFkcw== 2YrYp9iy IHJlc3BlY3Rpbmc= IGdib29sZWFu J0V0YXQ= IENsw61u Y2FtZQ== dXN0ZXM= IOCkleCksOCko+CljeCkr+CkvuCkpA== LW5lZw== INi52KfZhdip IEdvdnQ= INC80LDRgNGC IOGDoOGDmOGDkg== S2xpaw== INin2YTZitin2Kg= aXNoZ2E= IHZlbnVz IHVuZ2Vs IOmjng== INi12KjYrQ== IEtpcmJ5 IG1lbmphbA== IGhpc3TDs3JpY29z IGhhdWxpbmc= dGFtYg== 4YOY4YOg4YOU4YOR4YOY4YOh INC/0L7QuNGB0Lo= IOaQnA== IGRlcmJ5 IE1hamVzdHk= IGphbG1h INCy0L7RgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjw== bGltcw== 2LPYsw== IGFwcHJlbnRpY2U= Q29sbGFwc2Vk IGFkdmVydHM= 4KS14KS/4KS2 IGJvdW5kZWQ= R2FsbA== IHJlYWs= IOGDnuGDmg== ZXBpc29kZXM= ZXN0aGV0aWM= IOmSsQ== 4LGB4LCt Q2hlbA== 7KCQ7J2E IGNvdW50ZXJ0b3A= IOCkuOClguCksA== IHNwZWxsZWQ= IGN6xJlzdG8= ZWxlZQ== 5YWs5biD IO2KueuzhA== 5b2p56Wo5Luj55CG X1Byb3BlcnR5 IOCknOCkueCkvuCkgQ== a2Vq IHNpdHVhdGllcw== 4Kaw4Ka/4KaV 5qiT IHNvbmRlcg== IG1lcmt0 LnBlcm1pc3Npb25z IGlucGF0aWVudA== 5LmF5LmF57u85ZCI5LmF5LmF54ix IERyaW5raW5n IGxlaGVu X2NvbmRpdGlvbnM= IG11bmk= IG1hYXRhdQ== IGV4aWxl IOCyoOCyvuCyow== IEJsaXR6 YmVzdGU= IE1BU1RFUg== IOC4geC4o+C4gQ== cm9zY29waWM= IG9sZW1hcw== YXZveg== IENvbG9tYm8= YWJyaW5h IGNpYmxl IHJlc3VsdGFy INis2K/Zi9in IHdvb250 IEltYW0= X3JlbmRlcmVy IGZhY3R1cmU= IHBpZGnDsw== IEZyw7w= 4Lia4LiX IE1vbnN0ZXJz 5q275Lq6 4LC/4LCX4LC/ IHRlY2hv 15nXp9eh IOCupOCuqeCupOCvgQ== 5a+6 c3R3 SXB2 77yM6YCa6L+H bWl4ZWQ= IHNvcnByZW5k IOCyruCyvuCypOCzjeCysA== INqF2LE= IFdpbG1pbmd0b24= LXVudXNlZA== 15nXqdei16g= aWdhbnM= IENob2ly IE9iYW1hY2FyZQ== IFZlcmxhZw== IFFv IGNvbmNpZXJ0bw== b2xvZ2Vu dWVsaW5n IOCwuOCwguCwteCwpOCxjeCwuA== IOCkuOClh+Ckgg== 55m+56eR6YCa IHl1bWk= IHNjZW50cw== LW9wZXJhdGlvbg== IGRhYmFu IEhlZWZ0 IGJvaXJl IOCypOCyv+Cygg== INin2YTZhdis2YXZiNi52Kk= 6ZW/5bqm INCw0LvQs9Cw0L0= QVJFUw== eGNm IOCwrOCwvuCwpw== IFNldHRlcg== YXNhYg== IGhhcmRlbmVk LXRyaWdnZXI= 2YXZhtm5 IHZvcm10 0L7RgNCz0LDQvQ== IGJsaXN0ZXI= IOCqtuCrgQ== dXR0ZXJz IG1ha2FoaWtp IGxlZWZ0 d8O8cmRpZw== IHJvY2E= IGNsYXJpZmllZA== RGw= 4Kq+4Kqk4KuN4Kqu YW1hdHV0 IGdobA== IGxpbmVycw== Y29tcGFyaXNvbg== IHJlamU= IOW+rg== RElSRUNU IG5lZ2VyaQ== INee15fXqQ== IOq3uOughw== IMO9w7Y= IHTDqWzDqWNoYXJnZW1lbnQ= TkJU 4K6w4K+I IEltcG9zc2libGU= IHJlbWVkaWF0aW9u IHLDpmtrZQ== IHd5c29r INWj1aXWgA== IHZyaWVuZGVsaWpr IEh1c3NlaW4= IHPDqXU= b3NsYXY= IHLDqWVsbGU= b3VldXI= IOC5gOC4nuC4t+C5iOC4rQ== IHRyYWR1Y3Rpb24= IGhhbWJ1cmc= dWx0aW1h IHRhZ8SnbmE= IGdhc3RyaWM= IHN0w7ZycmU= INC/0YDQsNC00YHRgtCw0Z4= b3J0aQ== IFJpaGFubmE= Q29uc3Rz IGVtcGF0aA== b2duaXRpb24= IOiPsuWosQ== INCw0YPRgNGD IEplYW5uZQ== IHNhdGlzZmHDp8Ojbw== 2YXYt9it2YbYqQ== IHBvd2RlcmVk IGFjaGlldmVz IFNpc3RlbQ== 56S85YyF Q09NTUFORA== wrR0 IFBvaXNvbg== IO2Vmeq1kA== 4Lin4Li04LiX IGthbHQ= 5aeR5aiY 6buE572R56uZ 2YbYp9iz2Kg= IG3DqW0= IENOQkM= INmB2YI= IHRhYWtrdQ== IE5pa29sYQ== IEpvbGll IGNvbnZpZGFkb3M= IHRlZGE= IHR1cm1h X3N0YW1w dWxhZA== 56iN IEhhaXJzdHlsZXM= 5b2p5b2p56Wo5aix5LmQ CXJlY29yZA== Uk9D IOCwmuCxguCwoQ== KE5v IG90w7o= IG1ldMWz 4KS54KSw4KWB4KSy4KWH IOW9qeelnuS6iemcuOmrmA== SGVsbA== CXNl INqI2KfaqQ== LWZpbA== INC40rfRgNC+ INis2YXYp9mE IG9yaWdpbmFscw== emllaHVuZ3N3ZWlzZQ== YWdyYW1h aG9lZGQ= IG1pZ3JhdGVk IOi+k+WHug== 44GK6aGY44GE44GX44G+44GZ IHplaWd0ZQ== IGZ1bGxzY3JlZW4= IOeuoeWutuWphg== INi52LXYsQ== IER1ZA== INKZ0YPRgA== IGlsdW1pbmFjacOzbg== INmB2YPYsdip 7LaY IG9jeg== IOq0gO2VnA== IGZyZWVz IOCwquCxjeCwsOCwleCwnw== IGludmVyc2lvbmVz QWx1bW5v InN0cnVjdA== JG1haWw= IGvDtm5uZQ== IEVsaWFz ZGlyZWN0b3I= JyksJw== 4LmA4Lir4Lil IENhaXI= IE5TSw== LnN0b3J5 IG92YXJpYW4= YXBhY2hl J3ZhbHVl IMO8YmVyc2No INix2YjYtNmG IOCwsOCwguCwlw== INin2YTYqNmG 5paZ6YeR INC00YDRg9Cz0Lg= QVbml6DnoIE= IOCqnOCrh+CqteCrgA== IFVuZG8= INGB0LrQu9Cw0LTQsA== X2RlZmluZQ== IEJlZGllbg== INin2YTZhdit2K8= IHlhcmE= b3Bpbg== IHNlbWJyYQ== PEh0dHA= 4LSq4LWN4LSq4LSC IOCkl+Clh+CkguCkpg== PllvdQ== IHVuc2V0dA== aXdl INCU0LXQvdGM cnVuZGU= IM6RzrM= UHJvYmxl LXNpemluZw== IGVudGVybw== IGFsbGlhbmNlcw== INC60ZbRgNCw0Z4= INGH0LDQu9Cw0LLQtdC6 IOCkleCkvuCksOCljeCksOCkteCkvuCkiA== X1NT 44G+44KK L2dl IOGDl+GDkeGDmOGDmuGDmOGDoeGDmOGDoQ== IOWkqea0pQ== ZGl2ZXM= IMawdQ== 0LTQsNGA0LTRi9Kj TG9yc3F1ZQ== IENhcmFjdGVy INGC06nQsg== 0LDQv9Cw0Lc= V2hpbHN0 IGdyYW5kZGF1Z2h0ZXI= INCy0LrRgw== IGxsb3I= IFZpZ2ls INC30LvQvg== bnBq IFLDtg== IE1hcmdpbg== 4LWN4LS14LS+4LS4 IFNoaXZh SWRlbnRpZnk= 2prZhw== 4KSV4KWN4KS34KSu aW5vZGU= IGdyw7bDn2VyZQ== INmF2YjYudiv 4Ka+4Kac4Ka/4KaV INGC0LjQtQ== INCy0LjRgtCw0Lw= RklOSVRJT04= SUxMUw== IEx1bmc= X3Ni 5YCN546H INuB2YjYsw== INGD0YfRg9GA INGB0L3Rj9GC0Yw= 4YOg4YOU4YOR4YOQ IOqyveq4sA== INGB0YLQuNC70LU= IElzbg== CWNhbGw= IGtyb20= YWxzZXg= OyIsCg== LlBlcm1pc3Npb24= INmC2LHYp9ih2Kk= IHJlaGVhcnNhbA== IGJlc2NoYWQ= IEZ1cw== xJtr INC30LXQvNC70Lg= 2YbZhQ== IGJ1c3M= CXRyYW5z IGl6ZA== IHBhbWlseWE= IGVudHVzaWFz IGV4Y2U= IHRhbW0= 4LWH4LS34LSo4LWN INC20LQ= Q2hhcmFjdGVyaXN0aWNz YXZsamFuamU= KEFkbWlu IHJhY2Vk 4LGB4LCC4LCm4LCo4LC/ INCw0LTQvdCw zrHOvc6x IGJvb2ttYWtlcg== 5o6y6LyJ X3Bh IGRldmlzZWQ= IHhpcmk= cmVwYWly Ok0= INC/0YDQvtGG0LXQtNGD0YDQsA== 4Lir4Liy4Lij INqG2KfYsdmI2Kc= INC/0YPQuw== INCx0YrQtNC1 ZGltZW5zaW9ucw== INGG0LjRgg== IGTDqXDDtHQ= IGVqZWN1dGFy 4LGC4LCw4LGB IGNhdGNoZXI= IGRlc2F5dW5v IGtpbmdvcm5h IOCumuCvgg== IGFnZW5kYXM= INC00LXQstGD0YjQtdC6 IExvbGE= IHJlY2V0YXM= b3hpbg== INio2KfZhNis IOGDm+GDlOGDo+GD dXRpbGl0aWVz 6Zm6 IG5hdHVyZWxsZW1lbnQ= IG1vbGVtbw== YW50cm8= IE1pbmlzdHJpZXM= IGNvbnRhZ2lvdXM= IGrDs2w= T1dM IFNhbnNrcml0 KEZvbnQ= 24zZhtqv QE5vdA== 4YOQ4YOc4YOb4YOg4YOX INC60YDRg9Cz0Ls= IEJPRFk= 4LiY4Lij4Lij4Lih cGFya3M= IHByZXN1bWVk aW5vbWE= IOGBig== b2dhbnk= IHVidw== c3Vicw== IGFjY291bnRhbnRz ICgpOw0K bGV0ZW4= XSgp UHJvamVjdGVk 4KS+4KSj4KWN4KSh IGVudHN0YW5kZW4= IHZvbGdlbmQ= IOGDlOGDkg== IFJhbXNleQ== IGNvbmZlcmly IMST 4YOd4YOR4YOg4YOY4YOV4YOY 6JmQ LdC60L7QvQ== IGFuY2hvcmVk Z3JhZG8= IGJ1cmds IGNvdXZyZQ== TWllbnRyYXM= xYLDs3c= IH0+Cg== IOu/kA== IGx1eG8= IHllZXM= 4Lit4LiH4LiE4LmM4LiB4Lij YWN0b3Jpbmc= 4YOY4YOZ4YOj4YOa4YOY IHRvd25zaGlw IGJyZXpob25lZw== R2Vl U2VtZXN0ZXI= SnZt IEV3cm9wZQ== J2FkcmVzc2U= IM6xz4DOv8+G IE5hYXI= IHByw7h2ZQ== bWFsbG93 INGP0LrRidC+ 0LPQsNC5 IOCmuOCmrOCmmg== 4LON4LKv4LK+4LKv 4LW84LS2 INin24HZhA== IFJlaXNlbg== IERpYWJsbw== IFN0YWtl 2YfZitmE IERvd25z INC80LXRgtCw0LLQvtC90LDQtA== 16fXlQ== INC80LDQvNCw IOCqleCri+CqguCql+CrjeCqsOCrh+CquA== IHRhcml4 IOC0tuC1jeC0sOC0puC1jeC0pw== IG1vZWQ= c3dlZXQ= LmxlYXJu IE1hZ2FhbGFkYQ== ICoKLy8= IHdha2E= IE1vZHVsYXI= IHZvbGFudGU= IHN0ZWY= TWFkcmlk IOCwqOCxh+Cwqg== IFNvb21hYWxpeWVlZA== 0LvQuNGA0LjSk9Cw IHJlbWFya2Vk IHJla2VuZW4= IGFlcm9u IHByb21ldGU= 5qmL 2YXbhw== CUFORA== U01UUA== IGN1cmluZw== IOCyleCzi+Cynw== INmI2YPYp9mE2Kk= QmVzY2hyaWp2aW5n IEthcnJpZXJl INiq2YjZgti5 dWpldA== ZnJlc2g= LWFuYWx5c2lz amlz QXV0aGVudGljYXRl X2VmZg== 4KWB4KSy4KWH 5a655piT LWFh 6IOG56CB ITsK IE9wdGlvbmVu IOCmueCmqA== INin24zYs9uM aGxhYmE= 4Keo4Ker Lmt6 IHRyaWdv INiq2YHYp9i12YrZhA== IEJlZMO8cmZuaXNzZQ== IERpc3BhdGNoZXI= 7Ju5 IHZ6ZA== IHBvZHJvxI0= 44CB5LiA 4YOQ4YOc4YOY4YOo4YOc XT8= IHNww6ljaWFsaXPDqQ== L3ZhbHVl IMSrcGE= em9nZW4= INC40YHRh9C10Lc= 0YLQtdKj IFNFUw== INC60L7RhNC1 INio2r7Yp9ix2Ko= INmF2KrYrti12LU= VHJpZQ== 0LDRgtKz0L7QuA== IHNoYWR5 IHZhbGlkZQ== 5a6Y572R5aix5LmQ z4XPhw== IGNvYWNoZWQ= IE1FTA== 4LC+4LCv4LCC bW9udGhseQ== SUxPTg== IOuwqeyGoQ== IGxvYmJ5aW5n IFRhcmk= IHBsdW1iZXJz 7ZaI642Y IFRPVVI= w6FiaA== UmFpc2U= IGRlc3RhY291 IOGDl+GDpeGDleGDlOGDnOGDoQ== YWdlbnRz INCe0LHRiQ== CURFQlVH LnNvbmc= IFFCeXRl X0JMQUNL 15DWt9eW IGplYW4= INC/0L7QttCw0YA= 77yM5LqO L3BlcnNvbg== IGNlbnRyb2lk KEF0dHJpYnV0ZQ== YmF0aA== INep15nXnteV16k= ICcrJw== 5Lqa5ri4 INC/0L7QuNGB0LrQsA== INC/0L7Qs9C40LE= INiz2KzZhA== LlBhcmFtcw== Lk9mZnNldA== IGNlbnNvcnNoaXA= IE1hc2tz IGNvbW11bmlxdWVy INCy0LXRgdGC0Lg= LmNk b2xkdA== IOWMl+S6rOi1m+i9puWJjQ== uOCzjQ== ZG/En2Fu IOCmrOCnjeCmr+CmrOCmuOCnjeCmpeCmvg== IE5lYWw= IHN0b3Y= J291dmVydHVyZQ== 4oCmXQoK OicpCg== Zm9sZGVycw== IHZlcmtlZXI= 77yM5bCP IGFpdGFi IHBjbA== IEdlb3JnaWFu IGNyaXRlcmlv IOC0rOC0v+C0nA== IEl2b3J5 IEluYm94 2YrZiNio IGF0ZW50bw== KHN0b3I= cmVhbG0= INC70Y7QtNC30LXQuQ== IGdvZWll LlBlcmNlbnQ= IGlrdXQ= IGF1ZGlvdmlzdWFs dmV6ZXQ= 0Y3RhNGE0LjRhtC4 7IKs7J2Y c3Rvcw== IGJpbm5lbmtvcnQ= INCw0LLRgtC+0LHRg9GB ICd7Ig== 15jXlw== 2LPYp9iy24w= LWludGVyZXN0 LnNsb3Q= IOCkuOCkruClgeCkpuCkvuCkrw== LXBheW1lbnQ= VG9uaWdodA== QXVzdHJhbGlhbg== eWxjaA== IOCqqOCrgOCqmuCrhw== IOGDoOGDlOGDoQ== d29ydGhpbmVzcw== 5LuY44GN IFlBTUw= 6IK6 4oCUd2hpY2g= INin2YTZhtin2K/Zig== IHV0ZA== 4K+B4K6V4K+N4K6V4K6/4K6v 4KuL4Kqd IGVud2VnaOG7iw== ICIoKQ== INin2YTYrdiv2YrYq9ip IHF1YWxpdGF0 4K6o4K+N4K6k4K6/4K6w 4LC/4LC44LC/ SUxMSVNFQ09ORFM= IHF1b3RhdGlvbnM= LmRzdA== IHRha8W+ZQ== ZWxi LcW8 IHN2bg== UXVldWVk INin2LfZhNin2Lk= IG9uZGVyem8= INij2KjYsdiy IHBoaWxvc29waGVycw== IFBvcnRz LlZlcnRpY2Fs 0LDQstC60LDQtw== 2YjZgtiq 2K3Ys9io IGNvbnZvbHV0aW9u IGVyaW5uZXJu X0hUTUw= IOCwpuCxgOCwqA== IHBlcnRhaW5z THQ= d2lmaQ== LWJ1dHRvbnM= IGzDqWfDqHJl CU1ldGhvZA== IG9wb3o= IOCkuOCkvuCkrA== ZGVwZW5kZW5jaWVz 4K6k4K+N4K6k4K6/4K6x4K+N4K6V4K+B YWxsb3M= IGFtYWxn IOCkquCljeCksOCkuOCljeCkpOClgeCkpA== IOC4reC4suC4hOC4suC4ow== 15DWt9eg16U= IHN1aXRjYXNl LUNvbW1lcmNl IFRocml2ZQ== 2bnZiA== IOCktuCkvuCkuQ== Lm1hcmtlcg== SGlzdG9yaWNhbA== LlVOUkVMQVRFRA== IENvbnNlbnQ= X2Rs 0LXRhNC+0L0= Y3VlbnRv Lk5pbA== IHVucmVzdHJpY3RlZA== 4LSI INmG2pPbjNmI2KfZhA== b25vbWlh IHNvemlhbGU= amlt IGNhcmTDrQ== INCw0q3QvtGD0YDRi9GF X2ZvdXI= 7KCd7Yq4 INio2K3Ys9io IGF5dWRhbg== IOCkrOCkvuCktQ== 4YOb4YOQ4YOT aXNzaW9uYWw= IGltZW4= IG5vbW9y IGZ1dHVyYQ== IHNheg== QU1BR0U= 2LXZig== IHVuaA== 5reh KENsb25l IFRlbW9z 65y7 bWRpcg== aWdoZGU= INCy0ZbQuQ== IEpTY3JvbGw= INC90YPQttC90LA= X1Bvc2l0aW9u INCw0YjQutC+0Ls= QU5DRVM= IE9zbWFu 0YDQtdC00ZY= IOyeiOuLpOqzoA== 7YyU IGV4dHJlbWVz IHVtd2U= INGC0YDQsNGF IOCuqOCuv+CusA== 4bq5Z+G6uQ== 2YTYp9mE2Kk= 4KSh4KS84KWL4KSC IG5lY2VzaXRhcg== LXZhbGlkYXRpb24= UG9u 4oCZ0Y/Qtw== IGRlZHVjdGlvbnM= 5p+U IHJlYWN0cw== IGJlbm9k INC00LDQsNGA0LA= IHR1YmVyY3Vsb3Npcw== IOCmj+CmuOCnhw== INeq15I= IHBvdGk= IOuhnOq3uA== Z2Fk IGdlYmV1cnRlbg== cm9wb2w= INmK2YXZhg== b3BlcmF0ZQ== IHByb3llaw== INC60L7QvNC90LDRgtGL TUVT IERpYW1ldGVy IGFzc2VydGlvbnM= INin2YTZhtmC2K8= IENvdmVuYW50 XFJvdXRl IOCqrOCqpuCqsg== IOGDquGDk+GDmOGDmg== IOCkr+ClguCkqA== IGFraXM= Tk9T IFR5c29u IOCkuOCljeCkteCksA== IG1hZ21h 0KPQudKT0YPRgA== Q29i IOC0teC0v+C0sw== W21lbQ== IHNla3JldA== xbx5xIc= 2YjZitio IEhPTQ== 2LLZitin2K/YqQ== 5Lq65LiO INmK2LPYqti32YrYuQ== IExpdGVyYXR1cg== W0s= IOCuquCur+CuqeCvjeCuqg== IHl1bg== X0RFU0NSSVBUT1I= IFJva3U= YXBpbg== INij2K7YsA== LnByZXM= IEFPTA== IHBvc2xqZWQ= IFZlcnRyYXVlbg== 5bGB6IKh 2LnZhNmI2YU= IHZvbHdhc3NlbmVu IGlwaA== UkFT IM+Mz4POvw== IGjDqXJv IFBhbGlu IHZlemV0 IE1vbmRhcQ== CVJF IGNvbnNpZ2xp 5p+P IC8+KTsK IFZlcnN0w6RuZG5pcw== LnNlZ21lbnQ= INem15XXnQ== INCx0LXRgNC10LM= INC805nQtNOZ0L3QuNC5 IOygleyxhQ== INC70Y7QtNGM0LzQuA== LmJu YXNoZXI= IOC3hOC3kg== X+akjeeJqeeZvuenkemAmg== w7ZmZmVudGxpY2g= IGpveXN0aWNr X0VuYWJsZQ== IOCquOCqsOCrjeCqtQ== IFBIT1RP IGlncmFs YXdvbg== 4KSc4KS+4KSk IHN5bnRoZXNpemVk IHVkemlhxYI= IFRlbmRlcg== IGluZGl2w61kdW8= Py4KCg== IGdyYXRl INiv2K7ZiNmE RUFO IGVzc2F5w6k= IHNlY3Rpb25hbA== Iyw= IGt1dWx1 IGZpbGFz ZXJtZW4= b3Bhbg== 7IS87YSw LnNlcA== X1NFTEVDVEVE aW5hY3RpdmU= 4KS/4KSu4KWA KGdv INC/0L7Qu9GM IOC0ruC1guC0qOC1jeC0qA== esO8Zw== INmF2LHaqdiy24w= IGtlag== IGRlc2Nhcg== 4KaX4Kae4KeN4Kac IE1vcmFs IHZlcndlcmt0 INGB0YDQsNCy0L3QtdC90LjRjg== IFNjcmV3 X3JhaXNl IOCqruCqvuCqsOCrjeCqlw== c29uaWFu IOC0quC0seC0r+C1geC0qOC1jeC0qOC1gQ== INm+24zZhA== LkFVVEg= X1BST0M= IHNwdW5l IGbDvGhsdA== aXZ5bw== IGdvZHo= IE11bHRpcGx5 4Liy4Liq4LiV4Lij4LmM IHByZXN0YXRpZXM= INGA0L7QutGW0LI= bmV0dA== VHJhamVjdG9yeQ== IERyaXR0 IOCyheCypOCzjeCyrw== r+GDlOGDoA== IGR1aWRlbGlqa2U= 57K+6YCJ 4LeZ4LeD c2FnZQ== YW56ZWlnZW4= IGluZGl2w61kdW9z 0YHRgtC+0Y/RiQ== IG5icg== IMOnYWzEscWfbWFsYXI= IGNvbmNhc3NldXI= IGRkYQ== INin2YTYtdiu2YjYsQ== bWFydmlu IGlzdGVt IGRpdmlkaXI= 2YbYp9mK2Kk= IHRlcnNlZGlh YmVkbw== IOCuquCun+CvjeCunw== Tml2ZWw= IGJld2FyZQ== IOC0suC0leC1jeC0t+C0gg== YmF1ZW4= IOyDne2ZnA== IOCmuOCmvuCmruCmqOCnhw== 4K6u4K6k4K+B KFRoZQ== bWVzc2Vy 4Z624Z6R IG5hb24= IGx1YXM= INW/1b7VtdWh1aw= IFByZXRv 157XpA== 0L7QtNC90L4= 4KSq4KS+4KSy4KS/4KSV 4KeL4KaW RnVuY3M= IHNjaG1l UGVhcg== IOGDp+GDleGDlOGDmuGDkOGDoQ== 4YOe4YOY4YOd4YOc IGludGVycG9sYXRl IG5nb3BmdQ== IOCmsOCmr+CmvA== IOCyreCzh+Cyn+Cyvw== 0YHRgtCw0YDRiw== IGhhZ2Fu IOGDoOGDneGDm+GDlOGDmuGDm+GDkOGDqg== KHNt IHBlYXJz dXJpYXM= emFn z4rPjM69 IGJsYW1pbmc= Z2VsZWdk eGVh 5oyH5Y2X X2Nl IHJlc2lkw6puY2lh IGFraWxp R09PRA== LlVuaXR5 IEd1aW5uZXNz IGluaXRpYWxpemVz LWZ1bmN0aW9uYWw= X3JldHVybnM= YmVsYXN0aW5n SG9zdGVk IERyb25l IGFra29vcmQ= YmJz QWhlYWQ= IG53ZWU= IE1pbmVyYWxz IGJ1ZmZhbG8= IOCyuOCzh+CysOCyv+CypuCyguCypOCzhg== IEx1a2E= aXRhZA== IGPhu5E= 4Kyc IOCuleCusOCvgeCupOCvjeCupA== IOe0hA== T05ET04= IOW3sg== IM+Dz4XOvc6/ ZXNpdHk= IHBlcnBlbmRpY3VsYXI= 0L/QvtC90Lg= IEHDsA== ZmNudGw= INGD0YHRgtGA0L4= IHhwYXRo YXBoYQ== IG91dGY= YWdhc3k= IGxpZ2Fkbw== IHZ5c3Q= KGdyb3Vwcw== IOCmquCmvuCmgeCmmg== dnVsZGln IE11c2V1bXM= UGFp IGxlYWk= IGJlYXJlcg== U2luZ2Fwb3Jl IFdFTEw= 4YOU4YOR4YOd TG9haQ== aW9ueQ== IHByb3ByaWVkYWRlcw== INC60LvQtQ== IFJlbm4= IC8vLg== IGlsbGV0 44Gd44KT44Gq IEJpb2Q= INC60LDRgNGC0L7Rhw== IHh0eXBl IGN5ZnI= INGW0L3RhNC+0YDQvNCw 5a6d5YW4 IGVhcm5lc3Q= IHZhcmlhbnRl IGRlc2VuaG8= IOuniOyngOuniQ== IGRlc2Fycm9sbGE= KERFQlVH 5YW25a6D IOCyquCyoeCzhuCypg== 6YKR CVBhdGg= LFU= IGJlcmthdGE= IG5ybw== 4Liy4LiL X3VucmVm IGVkaWY= IMSRw6FuZw== IGzDrW4= IOCkheCkleCljeCkuOCksA== LlVQREFURQ== dmVyZmFocmVu INCg0LDSsw== RmVhdHVyaW5n aWxsb3Q= 0L7QvtC/ 44Gd44GT IGlsbGljaXQ= IEV2cm9wcw== IGFjdGlmcw== b3JtaQ== 0LjQu9Cz0LA= cmFwaGljcw== CW1ha2U= IOCkp+ClgA== IGrDpG0= aHNpbA== 2b7Yp9ix IGxvdmVzZWF0 IEthbmRpZA== ICgpPT57Cg== IHByw6RzZW50aWVyZW4= 77y7 IOCmr+CmpA== ZGVzZGU= IHZhc28= bnltaQ== U2Fy IGJvZHkncw== IEJvYXJkaW5n IGJldHJheWFs IGN1ZXJwb3M= 0J/RgNC+0LQ= eWnFnw== X2FjY291bnRz INeT16LXqg== IFpob3U= IGNlcnZlYXU= IOyghOuLrA== IGFycm8= QXNzb2M= WlI= IFByaWM= dWR1cg== IFtdKS4= IGdqaXRow6s= IHdvb2RlZA== dWJy IOCmk+Cnnw== IG1hcml0bw== IGFkaGVyaW5n IGV4cHJlc8Oz IENoYXU= INep15HXldei IHN6dA== TEVuY29kZXI= IHZlcsOw IGdhbGVy 5ouU IHRlbmU= 0YXQsNGA0LA= IOCynOCzgOCyteCyqA== IGJhbmFs 4KS/4KS34KSm IENlYnU= L3JlcG9ydA== 4Kq/4Kqk4Kq+ LUFwcg== IEJyZW5kYQ== cGV4cHI= LnBhcmFtZXRyaXpl IGZ1bWFuYQ== IGRpdmVydGlkYQ== IHBlcm1hbmVjZQ== IHZpc2Fy IG11bHRpcGFydA== IG5hcGlz IOCkmuCkr+CkqA== IHRyYW8= IEhlbGFhcw== IHh14buRbmc= IEFzYW1ibGVh xYJhZGE= LW1ldGVy IFphaG4= KHBsYXk= IGNvcnRpc29s IOCqquCrguCqsOCrjeCqtQ== INC00LDRgQ== 5LiJ57Sa IE51cnNlcnk= IHBhdXQ= YWNydXo= 1aXWhNWl1bY= 4KqV4KuN4Kq34Kqj IEFuZ3J5 IFNlYXM= ZW1vdXRo aW5zdQ== IG9yZ2FzbWU= dW5vYQ== ZmF2 Q2FtZWw= IEF1dG9tYXRlZA== IOCknOClh+Cksg== 2KjZiNiq IG7DpGl0ZWtz X3Vs IOGDkOGDpeGDleGDlw== IGltaXRhdGlvbg== INeU16nXoNeZ d29ya3NoZWV0 IOCkpOCkleCkqOClgA== IEFiZHVsbGFo IOCmpOCngeCmruCmvw== ICAgICAgICAgIA0K IHBpZW0= IGFqdXN0YXI= IEJyZXdlcnk= 5rK755aX Y2l1cw== IEV4dHJlbWVseQ== IGZsZXhpYmls 5ZC7 INW/1aXVrdW2 IGhhcHBlbmluZ3M= X2JvdW5kYXJ5 INGB0LDQvdC6 IOOAkQoK X3Bvc2l0aXZl INCy0YvQsdGA0LDQvQ== 0LHRi9GH0L3Qvg== YWdpbw== VVNBUlQ= KHJocw== Q3JpbWU= 4LmC4LiV b2ZmZXJz IG11ZGR5 IHJlZmVyZW50ZXM= IGR1YmJlbGU= 4oCM4LCh 5LuK5Zue44Gv 44GV44KJ44Gr xL5hZA== S2Fk IGJyYW5jYQ== IGludGVydHc= T2Fr IOCyr+CyvuCyteCzgeCypuCzhw== LnBob3Rvcw== c3RyZWFtcw== IHNob3J0Y29taW5ncw== IGRhdGFw zpA= IHdhdGVyZmFsbHM= J2FjY3VlaWw= INin2YTYp9mG2KrYrtin2KjYp9iq IOCyruCyp+CzjeCyrw== LW91dHB1dA== 4KeN4Kaw4Ka/ IFNlcnZpw6dvcw== KE9T 6IGM5L2N U3RlbQ== 4oCN4LSk4LWN4LSl PEls IMOkbmTDpQ== IHZlbmdlYW5jZQ== QnJvd3NhYmxl INC30L3QsNC10YLQtQ== INKb0LDQvdC00LDQuQ== 4K6/4K6j INC00LXRgtGP0Lw= INCw0L3QsNC/ CWFs INin2YTYrdin2YQ= IGN1bWE= IOexsw== CWFkZHI= 4LCq4LCh IOCyruCzgeCylg== INC40L3QvdC+0LLQsA== IOS4ieWIhuW9qQ== 157XmA== IHBha2E= IGNhbWJpYWRv INi52YXYrw== L3Byb3ZpZGVy IHZpbMOhZw== Lio7DQoNCg== IEh1c2s= IEp1Z2VuZGxpY2hl IE1pbnVz ZHVt IGlycml0YXRlZA== Y2xvYWs= 5Lqa5rSy6Imy INiu2KjYsdmH 2qrYpw== IGFwbGljYWRv INmG2YrZiNiy X3RoZW4= IGdlaG9vcmQ= IHDDog== W3Rva2Vu cGh5c2ljcw== IOGDleGDmOGDqg== cmVxdWVzdGVk IGtvbnU= IE5hY2nDs24= IENpbmE= IHdhcm1lZA== 8J+YrQ== 0JPQng== 4Ka+4Ka54Ka+4Kaf IExveQ== IOCkrOCli+CkqA== UGFpbg== IOCmruCmvuCmpOCnjeCmsA== INC60LDQu9GM IGN1w6FsZXM= 7JeQ7ISc64+E IG51Y2zDqQ== IHJ1Y2g= IOCwhuCwpw== aHVp 5LiA5Y+l IOCwquCxjeCwsOCwvuCwguCwpA== IOC0ruC1geC0luC1jeC0r+C0ruC0qOC1jeC0pOC1jeC0sOC0vw== IG9zZWI= a2llZ28= IG1haXQ= RmV3 IGNvbnPDqXF1ZW5jZQ== 5Y2w5bqm IGJhbmtyb2xs YWNlbQ== IOCknOClgeCkqA== z4HPic+Dzrc= IGlsbW8= IEtlbmRhbGw= IGNvbmR1eg== IHNwZW5u INW91aXWg9Wh1a/VodW2 IOWkqeWkqeS4reW9qeelqOacieS6ug== IERpaw== IFNBWQ== ZW5uaWE= INCz0LvQvtCx IE51aw== INeR16LXqg== IGNvbXVucXVl IE1vbw== IGRpc3B1dGVk IGluZGl2aWR1ZWxsZW4= fSx7Ig== IHBlcm1ldHRl IG1pbGzDs24= IHRyb2Nr CXdvcmQ= ZXJzYWNoc2Vu IENva2U= c3RyZXNz IFBhcHVh VHJvbmc= X3Byb2R1Y3Rv ZHludA== IM68z4DOv8+Bzr/PjQ== IMaPbGl5ZQ== IOuztOuptA== IFfDvG5zY2hl X0xPQURJTkc= IOC4p+C4rQ== YWthcnRh IExBTkc= IHRlbmRvbg== dmFsaG8= 44CCXA== 4oCcRm9y YW5lYQ== INeQ16jXldeZ16E= INio2KfYqNiq IGVsZW1lbnRlbg== w7N3bm8= RGV0YWNo INC70Y7QsdGL0LU= INGB0LXRgNGC0LjRhNC40Lo= 0YDQuNC60Lg= L2hpZ2g= IHTDpGxsw6Q= a3VyYXQ= IOCmleCmpA== IGJ1ZGRpbmc= CW9r INin2YTZhdmG2KrYrtio IGluZmxhbQ== IGRpa3Q= 0YDQuNGB0YLQuA== IFJldmlld2Vy LnRvbGlzdA== IE1ZU1FM IENoYXJnaW5n IHNvbGRhZG9z U0VR IHByZXI= YnJpdGFubg== 4Kq44Kqt IG5hcms= SG9tZXBhZ2U= IOCqsOCqnOCrgg== IHRvb250 IGNpcmNvbnN0 LnJlc3BvbmQ= INqG2KfbgduM25I= IGN1bXByaW1lbnRv IG5hc3Rhdg== INS11oA= YXZ5bw== IOCkrOClh+Ckmg== 4YOQ4YOh4YOY4YOQ4YOX INC30LDRgNGP0LQ= IGVyYW5v IGxhYXJpbg== d2V0YQ== IEdyZWVudmlsbGU= 5YWo5aSp6K6h5YiS IFByb3RlY2Npw7Nu INi52KfZhdin IHJlbGF0aXZlbWVudA== dmFyYW5kZQ== IHFhaQ== ZXRob2w= 5Y+X5Yiw IFRvYmFjY28= INmF2LHYqtio IE1FRElBVEVL IOGDmuGDmOGDkw== aW1pemk= IOCypOCzgeCyguCyrA== IHNvcHJh IE1lcmtlemk= R3JvdXBpbmc= IGRpbGlnZW50 VVJMcw== KX0pOwo= KHZhbG9y csOhdWw= T0xG LmRlcGFydG1lbnQ= IFByb3N0aXQ= IFJTVlA= 5aiB5bC85pav5Lq6 w6R2w6Ru IFNsZWVwcw== IHJvZQ== INin2YTYrNmF2YfZiNix2YrYqQ== 4oCZYWNjdWVpbA== Pk0= cHNvbnM= dGFibA== bMO2c3VuZw== INC+0LHRidC10Lk= IGHDp28= Z3JhcGhpYw== INGB0LjRj9Kb0YLRiw== a3N0 0YrQug== IOCkuOCkruCkvuCkpw== IOmFjQ== IGthdGVyZQ== INmK2LHYrA== IEhvcmE= 4LON4LKk4LK/ IFNjaHdhcnR6 IO2UjOugiOydtA== IG5hcmdz IFBPVg== IE9tbmk= ZW5qZQ== IHJlZ3VsYW1lbnQ= LW1zZw== cG9zdGU= w610ZWFy IGJvdGhlcnM= Kmo= W251bWJlcg== IGdvbGZlcnM= IGdlbGV6ZW4= 0LDRgNGG IOCuteCumg== c3ByYWNo IGZvdW5kYXRpb25hbA== 0YPQttC00LXQvQ== bWFzdA== 5Lq65Y+j INC10LrRgdC/ Lm1hdG11bA== IOCknOCksOClguCksOClgA== U3R1 S0Q= 5a6e6Le1 4Kqm4Kq+ IENPTEw= IOWd d2FuZ28= aXNrYXM= IGvDvGxs IEZhaXRlcw== IEVnZ3M= 66mU7J28 KGRlbGF5 IOCkuOClh+Cksg== IOCknOCkqOCkteCksOClgA== IENlbHVp IE5hbmE= LnJldA== 5byA5aWW546w5Zy655u05pKt IHNwZXppYWw= IE1WQw== 0JrQsA== bGVjdHJvbg== IHRlbnNpw7Nu IEdvbWVz IMKgIMKgIMKgIMKg LWRvY3VtZW50 X1JBRA== IEZyZWloZWl0 IG3DqWRpdA== IGxpZGVyYW7Dp2E= 5bm06L27 LXRvd24= Y29udGFkb3I= IOGDlOGDpeGDoeGDng== IGJsb20= IOGDoeGDmeGDneGDmg== Lk1hbmFnZXI= IGNpdGVz IEFJTQ== IGJyaWxo INC80LDQs9Cw0LfQuNC90LU= dWxhdG9yeQ== INGB0LDQvNCw0Y8= PE1lbnU= aXNpd2U= IGNvbWVyY2lhbnRlcw== 4Li04Lij4LmM IE11amVy cmVpbnRlcnByZXQ= INC+0LnQuw== 5Zyo57q/6KeG6aKR6KeC55yL 4YOU4YOg4YOo4YOY IHJoaW4= U3BlY3RydW0= IHsl IGNhcnJp INit2YTZhQ== INC60LjQvw== IOCuquCupOCuv+CutQ== Umlw UFJT KW9iag== IG1hcmdl IENvdXJ0bmV5 57KS INC805nRhQ== IGlyZ2VuZHdhbm4= INCy0YHRlg== IGF0dGFpbmFibGU= ICAgIAoKCg== IEFsb2U= IG1hbHByYWN0aWNl IGZyZWllbg== IEF0bGFudGlz IFJvYmJpZQ== IGVlcw== 4Lij4Liy4LiE IGRpc3Rpbmd1ZQ== IGF3YWl0ZWQ= c3BlY2lmaWVk 5YWl44KK Q29tcGV0aXRpb24= 2YbYr9mK2Kk= aWpvbQ== RXNwZXJv X1JVTlRJTUU= KG1lbW9yeQ== UXVhbnRv w6dhbA== IGVmZWN0dQ== 0YHRgtGO IOCksOCkvuCknOCkp+CkvuCkqOClgA== X2dh IGN0eXBlcw== IO2BtOumrQ== INCR0Lg= L1NlYXJjaA== IHp1dGVu IHNvbHVjaW9uYXI= IHF1w6o= IGFiYnJldmlhdGlvbg== IGJvZ2E= IOeBtQ== VVc= IFBvc2l0aW9ucw== IFByZXNlbnRz INit2KfYrA== cHJvemVzcw== 2LPZvA== X05PVElGSUNBVElPTg== 0YHRgtCy0LjQtdC8 IGluY2Vzcw== IHNwZXR0 Y29uY2lsaWF0aW9u IFN0cmF3YmVycnk= IGZ1bmRvcw== INC00LDQstC70LDRgtC40Lg= IGFrc2Vz IFNvZA== dHTDpMOk IG5naQ== INeU15TXqg== 0YPRh9C4 4oCd562J 0JXQmg== ZW5kZXJh IHphcGF0b3M= ZXN0YWQ= IEJvdXJn b2RhYmxl aGFyZHQ= w6Z0dGVy INGH0YvQs9Cw0YA= IHFhYnU= 4LSc4LS/ IEfEpw== IGt1ZHo= LlJlc3VsdHM= INio2rs= Lmx0 IHBvdXJzdWl2cmU= IFZlcnNhaWxsZXM= IHBvbmVu IElOVFJP ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IFRWYWx1ZQ== IGNvdG9u IE5BRA== IENhcm5hdmFs LmJlaA== IOGDk+GDoA== 4LC+4LCw4LCj IGdlbGVn enVqZQ== IENsYXNzaWZpZWQ= 4Z6a4Z6f INC30LDRgNCw0L3QtdC1 Z3Jlc3Fs IHphaW50ZXJlcw== IGNoYXVkacOocmU= INCh0LXQvA== INCw0LfQsNC80LDRgg== INi12YbYr9mI2YI= IGZyYXBwZQ== IOCkpOClgOCkuA== IHTDvHJr IG1vbnM= bWFzYQ== IGNsaWZmcw== IHNwb3J0aXZl aG9zcGl0YWw= 6K+a5L+h IHZhaWtl IGFkdm9nYWRv INC90LXQtNC10LvRjA== X0VTQw== IOGDruGDlOGDmuGDoQ== c2hhZnQ= INec15TXqtee15XXk9eT IEtyeQ== IHNob290aW5ncw== LkA= 4LS/4LS34LWH4LSn IGJweQ== d29vbg== IOGDp+GDo+GDoOGDkOGDk+GDpg== IFV5 IHp1Z2xlaWNo KFJlY3Q= IG1ldGljdWxvdXM= LeaXpeacrA== IGJlbGV2ZW4= PzsKCg== IFdoZWVsZXI= 6buE5aSn5LuZ S2luZ3M= IOCmleCnjeCmsOCmv+CmleCnh+Cmnw== IHNlZnlk IGJhbmNhaXJl IOays+WGhQ== IG5hcm9k IGNvdMOp IGNhbmFpcw== 0LDQvNC+ TWFhaw== IHByb3U= IGh1bWFuYXM= INmF2KzYsdiv IGdpdWQ= aWthYW5zZQ== INC+0LHQvtC30L3QsNGH IG11dXR0 4Kag4Kao IFRyYXZlbGVy b2xpbmc= IHPJmXI= bWFya2Vycw== IOCmquCnjeCmsOCmrA== X25hdmlnYXRpb24= CXJlYWRlcg== XEV4dGVuc2lvbg== S29tbWVudA== KyIvIis= IFdvaG56aW1tZXI= IOCkj+CkguCkoQ== IOCkpOClh+CknOClgA== INK70LDQuQ== 4LWB4LSu4LS+4LSv IHdrb2xs 0YDRiA== 5rWc IGZ1bGxuYW1l IGlsaGE= IFBSSVY= RGF0bw== IENTQQ== ZW5hw6fDo28= IGvDpG5uZXI= ZWxqZQ== IGFudGlk IGVzcGlvbg== IGTDqXBsYWNlbWVudA== INC60L7QvdGG0LXRgNGC KHNr INCc0LDQuw== LmVhc2U= IGJhcm5h VmVjdA== IMO2cnQ= INC60L7Qsw== IEdvc3NpcA== 6Zyy6IS4 IE1lbnNlbg== IGLhu5E= J11dLAo= IE1hZGVpcmE= SW5zdHJ1Y3Rvcg== IG9ibGl2 IHN0aXRjaGVk 4LWG4LSv4LWB4LSz4LWN4LSz IHByZXR0aWc= 24HYpw== IGZsb3Nz IOC0heC0reC0v+C0qA== 0YvRgNKb IHNlbWFwaG9yZQ== IFR1aw== IGVudGk= IGFhbnZ1bGw= aXJpY2Fs IFRvc2hpYmE= 5ryC5Lqu aWRpb3Vz 4Lil4Lit4LiU 2YrYutuH2LE= IHNhcnQ= INm+2pg= aXRlbGU= IOCkuOClguCkmuClgA== Jy8+Cg== IOCwheCwruCxjeCwrg== IGludml0YWRvcw== SUNPREU= IGJlZG9lbGluZw== IEhpcHA= 4KSo4KWN4KS54KWL4KSC4KSo4KWH IHByb2Z1bmRhbWVudGU= INin2YTYutiw2KfYptmK2Kk= LUJhcg== IGluZmx1w6puY2lh IGjDtmtt IG1vbnRh LUF1cw== IFN1emFubmU= 4KuL4Kqw4KuA IOWFiQ== INij2YXZitix YW5udGVy IGJyaWxsaWFuY2U= IG1pc3VuZGVyc3Rvb2Q= IFZpc2l0aW5n IFJpZmxl XT0o IE5lc3Rh X1JFUVVJUkU= 7JWE7JqU 2K3Ytg== bWFsxLE= IHF1ZWxsZXM= INiq2LHahQ== 5LiN6ZmQ IHNvcnRpZXM= IE1hdG8= c2VtZW50 4Li44Lih4Lin4Li04LiX eGRm IFd3dw== IOyVhOyngQ== IGZsYXNobGlnaHQ= IHRpcHBpbmc= IFhlcg== VnA= IGV2ZW5lbWVudGVu IHTFoW8= IHBpaQ== 4KS+4KSf4KSV 5YWN6LS555qE IGluZmxhdGU= IHRlZ24= IOCkmuCksA== 7Zek z4fOtc6vzrE= INee16rXpw== IOGDl+GDleGDmOGDoQ== IEltYWc= IHdzaw== IOCqmOCqn+CqqOCqvg== IGNvbnF1ZXJlZA== IGFwcmVzZW50YW0= INmF2YLYp9mE2Yc= LWxhc3Q= 5piv5ZCm5ZCI5rOV IEVtaQ== YWRkaQ== Zmli IEJldHJldXVuZw== 4buHcA== IE5lY2tsYWNl IOCkruCksg== 0LXQvNGL0Lk= INi52LHYtQ== IOCqnOCqqA== IGhpa3dhbGFobw== IHNreWxpbmU= IOCkoeClieCkleCljeCkn+CksA== 0YHRi9GA0LA= dmllbA== INmF2YLYp9io INGB0L/QtdGG0LjQsNC70LjRgdGC0Ys= IGNvY2g= aXJhZGE= INC/0L7QtNGA0LDQt9C00LXQuw== IGxhbmd1 IHdlaXRlcmxlc2Vu IOWMhQ== IHJlaW5zdGFsbA== IGFudGVjaXA= IGRvY3VtZW50YXJpZXM= IG11ZG91 55yg ZmFyYW5nYQ== aXJhanU= IG1hbnRsZQ== IOCmquCmvuCmkw== IEZhdWM= INen16HXoNeV157Xp9eh IG55aW5naW5l IHNhc3M= 7Iqk7YSw IG1vZGVyYXRvcnM= IHBldGFscw== IGp1bnRhcw== dWp1ZA== IGJpcmU= INGH0YLQvtCx dHJhY2tlZA== LWFueQ== 5omL57ut6LS5 RGlzY29yZA== ICgiJQ== INCw0rPTmdCw LmdycA== INij2LPYsQ== SHR0cHM= INC/0LjRiNC10YI= IGdlaGFhbGQ= b2Npw7Nu INGE0LDQvQ== IOGDoeGDkOGDruGDmuGDqOGDmA== 4oCZd2luYQ== IOCmrOCngeCmnQ== IE1JTkk= IGhhbmRzZXQ= 546v5L+d IElnb3I= INio2LHYrtmI2LHYrw== cm9hdA== TWFuYWdpbmc= X2Rlc3RpbmF0aW9u INi02YfYsdiz2KrYp9mG 4oCZw6lxdQ== IHppdGg= IEVsZWN0aW9ucw== IGFsb2hh YnJhbmRz LXBhZA== IFJlbW92aW5n IE1lbW9yaWVz IGludmVudGlvbnM= IOCuqOCuv+CuqQ== IGV2YWx1YXI= d2Fzd28= 0YbQtdGB0YE= IGtlYWRhYW4= IM+Dz4XOvc61z4HOsw== IHZlcndlcmtlbg== IGRhcmtlc3Q= PmE= b2Nlcg== LiovCg== dGhlaXQ= 0YbQuNC+0L3QvdC+ IHdvcmtpbmdz IHNwcnplZGE= INew IG1hcnNoYWw= IGZhyrthZg== IEN5bnRoaWE= KToNCg0K LWxpbmVk INGA0p/Ri9C906HQsA== IEh1bW9y xb5uZQ== INC/0LjRgtGM IHZlbmV6b2w= IGN1cmlvc28= IOCmj+CmrOCmvuCmsA== IOCqn+CqleCqvg== IG9ncm9t 0L7QvdGB SUtF L2ZpbmQ= 4Lig4Lix4Lii IHZpZ2lsYW50 IGludGVncmFy aW50ZXJuZXQ= IFdlc3Rlbg== bMSxa2w= b3JpY2Fs Q0xJQ0s= INGN0L3QtdGA0LPQuNC4 IHByYWt0eQ== INC60L7QvdGC0YDQvtC70Y8= LdC20YvQu9GL IGZ1c2Vk 7JeY IEVocg== INW31aHWgNaE IHN2b2ppaA== w7Bpc3Q= IGpxdWVyeQ== INGD0L/RgNCw0LLQu9C10L3QuNC1 IOCkruCkp+CljeCkr+Clhw== IHRlY2hubw== IHbDpmw= IOC0quC0sOC0v+C0tuC1i+C0p+C0qA== 4LiX4LiY4Li0 IEF1dG9tYXRpY2FsbHk= X3dhbGxldA== ZW5lZ3Jv IGhvb2RpZQ== IHZlcmxhdGVu IFN0YWJpbGl0eQ== 4LC34LCy4LGN UmlnaWQ= INmD2LTZgQ== amVyYQ== IGhyeQ== 57uV 4YOQ4YOg4YOo4YOY bGVsxZE= QUl6YQ== 4Kq+4Kqv4KuH4Kqy4Kq+ Z2luYQ== IGRlcmk= IGthYXNh IEVsbGlvdA== 0JjQmw== 56ue5LqJ UGly IGhpbmt3YXlv LOS4reaWh+Wtl+W5lQ== INGA0ZbQsg== IHZpc2FudA== XEhhcw== SnVy YXZvaWQ= 0LXQt9C/0LXRhw== INi62LHZgdip xYbEk20= INmF2KvYqNiq IGRhbWJl VVNJQw== xaFuZQ== IFNoYWRlcw== LkFH LkF6dXJl IFF1aW50YQ== IMWhZXN0 IHp1cnU= TXlhbm1hcg== 1aHWgNWx1aHVrw== VHVi IGxlY3RldXJz IOCkruClgeCktuCljeCkleCkv+Cksg== INeU157Xk9eZ16DXlA== bGVtbWVy LtCY INGA0L7QsdC+0YLQuA== IFPDqXI= IHN0w6Rya2Vy IE9mZmljaWFscw== INC/0L7QtNCz0L7RgtC+0LLQutC4 IOCkheCksOCljeCklQ== IG1laW5lcw== IFBvc3NpYmx5 IOyWtOuKkA== 5ZKM5bCa IOCkpOCljeCkr+Ckvg== IGzDpG5nZQ== INGA0YPQutGD INCy0LjRgNGC0YM= IHJhbXBhbnQ= X2JhbGw= 4YOa4YOd IFBhbm9yYW1h IG5lZ2F0aXZvcw== LmRpc2NvdW50 TGlxdWlkaXR5 YWJ0ZQ== 0LfQsNC6 YWty 56eR56CU IGNvbmR1aXJl IEthdg== CUJpZw== UmVkZQ== IENvdW5j INGB0LTQsA== IHLDqWFjdGlvbg== IFN0b2w= INCw0pvTmQ== IOCuheCupOCvgQ== IGF2YW5jZXM= X01ldGE= IEZyYW56w7Zz INC20YPRgNC9 IGxpZ2HDp8Ojbw== INeV15XXoteo15g= LXVwcGVyY2FzZQ== INSx1aTWgNWi1aXVu9Wh1bbVqw== 4LGG4LCf INeT15nXoQ== RVJSQQ== IGRlc3Blc2Fz L2dpdA== IHRwbA== LWFycg== INeV15XXmdeZ1rc= IG1ldHNp LVNwaWVs INiq2pM= 4YOR4YOY 16HXnQ== aWd1bmdlbg== IHZlbmRpbmc= IEp1ZGk= 4LKO4LK44LON IM6tz4nPgg== 4KS+4KSb 5bGF5rCR IFdlbGtl IG1vZ2/EjWU= IENvYWNoZXM= IHRyYWt0 CWNvbm5lY3Q= 4KWN4KSf4KS/ IF57Cg== IGFic3Ry IEFudGVpbA== IOCksuCliA== IGFsa2FsaW5l VWt1 INOo0YQ= ZWxvaXR0ZQ== INmC2LXYqQ== IFJpag== Lk1vZGlmaWVk 0LDQu9GM0L3QvtGB0YLQuA== IOCwh+Cwnw== IEVDTw== aWd0aWdl UmFyZQ== IGV4ZXJjaXRhdGlvbg== w6lzemV0 LlJFU1VMVA== IGdpbW0= X2RpbWVuc2lvbg== UFJFRklY INC80YPSmw== X3JlbGF0ZWQ= QXBh IGF1w7A= RHNs IHBlbnVo 4KSK4KSo IFdhbHRvbg== 6bqX IOCqnOCrgOCqtQ== IHNlc2lvbmVz IGV4ZWN1dGFy c2NlbmFyaW8= IOCwuOCxjeCwlQ== PHRib2R5 4Kiu4KmA IG9maWNpYWxtZW50ZQ== IEhlc3M= dXRpY28= IOCyleCzgeCyn+CzgeCyguCyrA== LXBhcGVy IGZvbWVudGFy INC80YPQt9C1 IGZvdG9ncmFmaWU= IHRyYWJhaG8= 6Leo5bqm X3ZvY2Fi CVk= J2VuZmFudA== 0LPTmdC10LjSrdC10LjRgg== IEdsdXRlbg== IOyniOusuA== 5Ymp IGxhbmd6YWFt LnVudGls ZW5nZWQ= IGF0eXA= 2KvZiNix INqE YXRlZ29yaWNhbA== L0lucHV0 INGB0LLQtQ== 0LDQu9Cw0L8= IHNhdGFu IGZpY2hh IMO9w7x6 IHplYg== IHFhYXI= IHbDuW5n IHZvd3M= dHVt VGV4dGJveA== IGFtaWM= IE9STQ== IGxlbWJyYQ== 0q/Qs9Kv0L0= IG1lZGljYWxseQ== 5Y2B5Lmd X2JyaWRnZQ== Q29lZmY= QXBwb2ludG1lbnRz IGzDpG5ncmU= INmD2YTZitip L2Jsb2Nr IG51bWVyb3Nhcw== 5aSE55CG5Lit IHB1aHVs a29tbWVy IOCkluCkvA== IFNlbWFudGlj IGV0dGVp dGhy IGZlbWluaW5v IGFtbW9uaWE= 7Jik7ZSE7ZmU7J207Yq4 INeU16LXoden zq3Pgc6z IOCml+CngeCmsOCngeCmpOCnjeCmrA== SXJhbg== IGJlcmVu KHJ0 INC/0L7Qu9GD0YfQuNC70Lg= IG1ldHk= IGFyY2hpdGVjdHVyZXM= LlVua25vd24= INmC2KfZhNiq IEFWRw== IGVtYWc= UGFpcw== L3NxbA== b3N5bw== c2xvcw== cHNpcw== IG1vbm90 IGZsZWE= IHdhdGVybWFyaw== IEd3ZW4= 6I6y YWN0dWFsbHk= J2h1bQ== Xyks aG5lbg== IGNoYWlzZQ== X3NpZ25lZA== IEJsb3Nz aGlzdG9yaWM= 4LWB4LSZ INC40YDQtdC4 INCa0LDQttC00YvQuQ== IGNvbXBsZXhpb24= Imh0dHBz R0VT INC40LzRg9GJ0LXRgdGC0LLQsA== INC60L3QuNC2 JWM= KHtf INC80LDRhdGB0YPRgQ== INGB0L3QuNC80LA= INGB0LjQvNC/0YLQvtC80Ys= IHJhw616 4Z624Z6J IGZhYnJpY2FudA== IM+AzrnPgw== IOyekOyXsA== b3V2b2ly IOCyteCyv+CytuCzh+Cytw== 4KmL4KiV IEZSSUVORA== IFNURE1FVEhPRENBTExUWVBF IHJvYW0= IENMT1NF w6h2ZW1lbnQ= IHN0YXRpc3RpcXVlcw== em9uZXM= 55S35oCn INKb05k= X2Zha2U= INC80LDSm9Cw0Ls= 4KSF4KSo b29mdA== 4Kqu4Kq+ INiz2YjZhQ== IFNtYXJ0cGhvbmVz LkJsdWU= IGFjdGl2YXRpbmc= xKdlZA== KeydhA== X3J1bm5lcg== 0YHRj9Cz YWJzb3I= LmNyZWRpdA== IHJvYWRzaWRl w6VyZA== IOWuog== IGVzZXI= aXTDoXJpbw== bGllw590 Tko= 5LiL6L295a6J6KOF5Yiw5omL5py6 IEFndWE= INGB0YTQvtGA0Lw= 0LTRltCz0ZY= INCl0L7RgNC+0Yg= YWNhYg== CUlk IGRpbWVuc2lvbmVz b25uZWxs IOWNjuWkjw== X2Fib3V0 IGxhc2s= IFNJTkdMRQ== IEZpcm13YXJl IGhpbnRlbg== INCz0YDRg9C/0L/QsA== YWxpc2VsdA== IlRoZXk= INeg15XXodej aWxldmVy L2ZvbnRz cXVpbmhv IOS6mua0suS6uuaIkA== 6Ieq5Zyo aWxsYXVtZQ== IOCmpuCngOCmsOCnjeCmmA== IOGDlOGDouGDkOGDng== bXNh INmE2KPZhtmH2Kc= IHZpbnRlcg== ICAgICAgICAgICAgICAgIAk= IEludGVyZXNzZW4= IOq3uOuFgA== YWRs TkVYVA== 5rmW5YyX ZW1taW4= IHBhZXNl IHNsZWVwZXJz RW5jdQ== IHJ1bA== LWJlbm4= b3JzesOhZw== JGNvdW50 IHNvdXZlcg== 5oub55Sf INCP 4KSh4KS+4KSJ4KSo IGF0w6s= INeo15I= 0Y/QtNGD c2lh IHVzdGFu IG1lcnI= IGV2ZXJsYXN0aW5n IHJlc2lkZW5jaWE= IEJpYXM= V0FJVA== 2KfYpti1 Y2VyYWw= IOWkqeWkqeS4reW9qeelqOS4jQ== IEF0aQ== LkxheWVy Pj4+Pj4+Pg== IOCynOCyv+CysuCzjeCysuCzhuCyrw== 5q2k5ZCM5pe2 b3JkZXJ0 IHRlZ2V2 bWVzdA== IEVnbw== b3Zpcg== IHNhdGlzZmFjY2nDs24= 44CC5LiN6L+H IEdvZ2g= IGJlemllaHVuZ3N3ZWlzZQ== IGd0YQ== IFdvcmNlc3Rlcg== IHNlbWJy z4PPjQ== aW1tdW5nZW4= YWLDqW5z 5Yid5aeL5YyW LmVhc3k= IElubm92YXRpb25z W3Rv dGhhaXI= 5Y+Y5YyW INin2YTZgdix2YI= w6dhbmRv RmVkZXI= INin2LbYp9mB2Yc= YXJlZmE= 4LSV4LW7 Pn08Lw== IFJ0 INCf0L7Qtw== Y2lqZQ== IFNwdXI= IE5hZ2Fy 6aqa 4LOG4LKX4LKz4LOB 4buc 2YXZitiy2KfYqg== cmFmb3M= LlRo X1Nob3c= Q29uY3VycmVuY3k= X3BhdA== IGRlZ3VzdA== IOCmheCmp+CnjeCmrw== IHBhcmFjaA== JHRpdGxl bW90aW9ucw== INC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjw== INmC2KfYpg== IGFxdWVzdHM= IG1lenpv 0LjQutCw0LvRi9C6 0LjQvNGB0Y8= 5aix5LmQ5LiL6L29 4KSC4KSX4KWA INKb0LDRgtGL0YHRgtGL INC/0YDQuNC70L7QttC10L3QuNC1 IGxhZ2V0 IGludHJpYw== LW1lZGlhdGVk IFRIUk9VR0g= IHRhY3RpbGU= INC90L7QvNC10YDQsA== ZXJpbw== VHJhY2luZw== IEF0cg== IM6/zrzOrM60zrE= RG9pbmc= IGx1bWJhcg== xLHEn8SxbQ== YXN1bWlr 44Kr44Op44O8 X3NvbHZlcg== YW5hbQ== IHNlbWJsZW50 LW93bmVy IENvbGE= INKv0LU= IGFtcGFr YW55d2E= 2YHZitin2Ko= LW9wYWNpdHk= IGNoZWdhbmRv IGlzZW1wdHk= TWl4ZXI= c2jDq20= LnNjaGVkdWxlcg== LkF2 IHRhcmlraQ== PUI= c3Bh 2K7Ysdip IFp1Y2tlcmJlcmc= INC00LXQutC+0YDQsNGC0LjQsg== IENpw6puY2lhcw== INin2YTYo9io2YrYtg== RGF2 IGF1ZmJsYXNlbg== IGlub3Zhw6fDo28= IOacqA== QWRh IHBhbG8= IGxvdmluZ2x5 IGRhdWdpYXU= IOCkruCkvuCkqOCkuA== VmlvbA== Zm9ybWVu ICInIik7Cg== X3F1ZXN0aW9ucw== IMSNb3Y= IHBhcGk= INiz2KfbjNix IG1pc3Nlbg== IGRlYWxpbmdz INWh1bXVttW61aXVvQ== LWhlbGQ= JG9wdGlvbnM= IGZsZWVpbmc= IFBlc3F1aXNh IG9vcnphYWs= S2FsYQ== bGVudA== cGxlYWRvcw== X2NhcHR1cmU= TW9kcw== LVRlY2g= IEJlcnM= IOCqnOCqsOCrguCqsOCrgA== IHByw6ljaXPDqW1lbnQ= IOCol+Cov+Cohg== IGFjdGllcw== IGdpdHQ= T0dSQVBI IHB3bw== IEVwc29u IGF2dWxsYQ== a2V6xZE= IE1vbnRlcmV5 IGNvbWVudGE= IGJla2VrZW4= IGludmVzdGlnYWNpb25lcw== INmE2K/ZitmH2Kc= LmNvb2tpZXM= IOCyruCyleCzjeCyleCysw== INqp2LHZiNmG2Kc= INGB0L3QuNC3 IHN0YWdpb25l 5aKo IHBvc3Rp INC/0L7Qt9C40YLQuNCy w7hsZ2U= INKb0LDRgNGB0Ys= IG1heGltaXNl CXNldHRpbmdz IHJlc3RyaWN0aW5n 4Kq+4Kq24KuH IOCkheCkpOCkv+CksOCkv+CkleCljeCkpA== IOCqsuCql+CrjeCqqA== IMO8YmVycmFz X3RyeQ== IGVrc3RyZW0= IFByb2Zlc3M= 0LrSrw== 4LKk4LOG4LKX4LOG LVBhcg== IFJlc2VydmE= 4Liq4Lix4Lih4Lie4Lix4LiZ4LiY4LmM 4LSV4LWL INC40qk= LlNhbXBsZQ== IGto4buP T09PTw== IGp1bnRhbWVudGU= VEVSWQ== aWppbg== IGJhYXM= IHBhdHQ= TGo= IGNhbWluYXI= INC80LDQs9GH0YvQvA== INGA0LXQutC+0LzQtdC90LQ= IHRsYXNl X3BpY2s= YXRleA== IEVTRw== INGB0L7Qt9C9 XyIs IFJlbWFyaw== IGJhxZ9sYWTEsQ== IMOpYWdz IHByZXNlcnZlcw== L2ludGVy IEJhdGVz IHNwb3J0ZW4= INC90LXQvtCx0YXRltC0 IGJlaGVy IOCkrOCkqOClgA== IGF1w59lcmdld8O2aG4= INWk1avVvw== IFNlYXJz 5aSp5Zyw 77yM5Y2g bm91dA== LndhdGVy TWVhbmluZw== dXB1ZXN0bw== IHByZWZlaXR1cmE= bOG7pQ== 4K6/4K6p4K6+4K6w4K+N 4KuL4Kq3 IGdyZWc= Q1BB IG5qZWdh 4Z6E4Z+S4Z6C SWk= IGltcGVkZQ== IOGDmOGDnOGDpOGDneGDoOGDm+GDkOGDquGDmOGDkA== ZW50ZWU= 562L 5pel6K6v INGD0YfQsNGB0YLQutCw INij2YbZh9mF IGtlw6dpcmls IGtvdXRvdQ== INGB0LDQvdGC IOGekA== IHR1Z2Fz PHN0cm9uZw== X2FuY2hvcg== 4K+N4K6a4K+N4K6a4K6/ IGJlaG9vcnQ= b2pv IHN1YnN5c3RlbQ== R3B1 dWVsdA== 4KS+4KS14KSk INGF0LDRhtCw0YDRgg== z4HPic+AzrE= Y29yZGVk IFZhbGVuYw== cHJlbmV1cnM= TXV4 KCk8PA== c2hhcnA= Kmg= INGC0LDRgNC40YQ= 6KKr6aqX IGRlZWc= IEV0dGVy IGVtdWxhdGU= IG5ldHRveWVy Zm9hbQ== INC50L7RgNGC X2xpdGVyYWxz IHByZXZpc8Ojbw== IHJpYQ== INWw1aHWgNWv INiu2KjYsduQ INeU15LXmdei IOC0sOC0vuC0t+C1jeC0nw== 4oCL4Z6c INeQ15PXoteo IHZhY8Otbw== bG9ndWU= IFBhbGVv INCR0LjRgNC+0Lo= IENVREE= INmI2YfYsNmH IHJlcGVhbA== 2YHZitiv IEdyYXY= IGdlb2xvZ2ljYWw= IG1hbHM= CXd4 LmVwYW0= IEdpdWw= IGl6dm8= QXBwYXJlbnRseQ== 77yM5paw IGRyeXdhbGw= dWJiZXI= 5a6J5o6S 16HXlA== KFNxbA== LmZk IGdhcsWfeQ== X0VYVFJB INeR15LXnNec IOGDoOGDlOGDnw== IFdlaWhuYWNodGVu IEZpYm9uYWNjaQ== RmFtaWxpZXM= IG1vbnRyw6k= IGNvdXR1cmU= dW5rYQ== IHRhcGVyZWQ= IGFycmliYXI= YXRlcmk= INio2LPYsdi52Kk= IHBvbnRh IG9ycw== IGdlcmVjaG5ldA== 1bbVodWu IOC0muC0n+C0meC1jeC0mQ== IGd1ZGE= IHpha2E= IGFjdGlldmU= IGRpcmVjaW9u IEF1c3RhdXNjaA== IHNlbmRlbg== INC/0L7QstC1 IEZvcm1hdHM= LVJlZw== aXNrZWw= 2KfYstin2Ko= 4Z684Z6T IFllbHA= 2K/ZidmD2Yk= IOaWueazlQ== dWVyem8= IHJlcXVpZXJlbg== IGRlY3J5cHRlZA== 0YLQvtCx INGB0L/QtdGG LkFDVA== VGFtYsOpbQ== INeV15TXqg== INin2YTZiNiy2KfYsdip IGJvdWxldHM= 4oCN4LSV4LS/4LSv IGJhc8Op IHNjcnVt KGJpbmFyeQ== IGRpY3RhdG9ycw== LWNsaQ== IGNoxrDGoW5n IHJhbWE= IF8o 6KOZ YW1hZ2Vk IHZlcmRlZA== 4Z6A4Z+L INW61aHVsNW61aHVtg== IHZhbGxleXM= IOCkj+CkoQ== w6Rzc3Q= Lk1h INeY16jXkA== IG3DtGk= X0NBTUVSQQ== IEXEnw== IGJyYWs= IHNww6ljaWFsaXN0ZXM= IHN0YXR1dGVz IGNoYWtl INW21bXVuNaC1ak= INCS0YvQvw== IG5hc2NpbWVudG8= SUZG IHRvbGlrbw== IG5hdHVyYWxl LUxpbmU= eGxz IOGDm+GDkg== IEJhbmtlbg== INC/0YPQsdC70LjQutCw IHRhcmlmYQ== IOCmuOCmruCnjeCmreCmrA== IGt1b25h IG5hcHA= SU1QT1JUQU5U IHN5c3RlbWVu em55Y2g= 4oCZOg== 0p/QvtGD IHJlbGF0aWVz 44OQ44OD44Kw IHRyaWU= Li4uLi4uCg== IHN0b25kZW4= IFNpdHVhdGVk IG5hYWxha2tlcnN1aXM= IOGDpeGDleGDlOGDp+GDkOGDnOGDkOGDqOGDmA== LWFuZ3VsYXI= YW5kxLE= INmD2LQ= QUNLRVQ= INin2YTZhtit2KfYsw== 4LC/4LCC4LCa4LC+4LCh4LGB 4LSk4LWN4LSk4LS/ IGluZGl2aWR1YWxlcw== IOCktuCktQ== IEV4cGxvcmF0aW9u LUhvbGxhbmQ= 4KSq4KWC4KSw4KWN4KS1 SU5ORVI= 4YOQ4YOU4YOg4YOX b3VudGFpbnM= IHltcMOkcg== 4buneQ== IOCkquCljeCksOClh+CksA== INeX15PXqA== IGRpZmljaWw= IGFmZQ== IGZhyrthYW9nYWluYQ== K20= IGFjY3J1 IOCkteCkv+CknOCljeCkng== YXNoYXk= 4oCZaXo= IOGDoeGDkOGDo+GDmeGDo+GDnA== IFRyaWJ1dGU= U3Vicw== INC20LjRgtC10LvQtdC5 IGNvcnJldGE= IEZvcm1lbg== IGNvbmVjdGFkbw== LlVwbG9hZA== IHJvenc= IGNpbmVtYXM= 2b7Yp9qp2LPYqtin2YY= IGV0aGVyZXVt INiz2YjZhNuQ IGludGVyc3RhdGU= INWv1b8= IHRpZXJyYXM= UmVwZWF0ZWQ= IGRvYnJh IEJ1Y2tpbmdoYW0= 2KzYp9mI2LI= IHNhY2tz IHN3aXBlcg== 2KjZitmH IHNpemFibGU= IEVzcHJlc3Nv IG1ldHJvcG9saXM= SUNJTw== dGVrc3Q= IHF1aWV0ZXI= X2NvbG91cg== YWthbw== IHVuY29uZGl0aW9uYWw= IOGDl+GDpeGDm+GDkA== IG1vbm9w IHdpZWRlcnVt IEhvbm9ycw== 0LrRgtGD IH0qLwoK IHB1ZGllcmE= IFR3ZWU= IOWQtA== 4KeN4Kav4Ka+4Kao4KeN4Kav YnJlYWtlcg== IGNyYXBweQ== INC90LjRmNC1 ZGltcw== IHV6bw== 44CQ4Lit4LmI4Liy4LiZ4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LmA4LiV4LmH4Lih IHRyxrDhu59uZw== SUdBVElPTg== KeulvA== 5Yeg5bm0 IGFjb21wYW5oYW50ZXM= IG9jdXJyacOz 4KmC4Kiw w7Jn X1NVUg== IGZpbmFsaXN0 INCw0LPTmdCw IHRlcm1pbsOz INmF2K3Yqtix LkZBSUw= IEx1w61z 57G75Yir IOCqueCri+CqteCqvuCqqOCrgeCqgg== IHdvbmtl IEhvZmZudW5n IGPDqWxpYg== IGfEgw== INGH0LDQvQ== TGFuZHNjYXBl 4KeB4Kex4Ka+4Ka54Ka+4Kaf IEZha3RvcmVu a2Fp IGZpY2FuZG8= IHZvd2Vk IGRpc2NpcGxl 6IuX 6Ka9 4LKw4LON4LK24LKo CVRyZWU= INio2KfZiNix INC80L3QvtC5 RGVzZQ== CUpzb24= IM64zq3Pg863 IOuqsA== IHRob2lydA== YWtoYWxl IG1pYXR0 IGFsdGVyYcOnw6Nv aHV1cg== IMOha3Zl 15nXkdeq IHJlbnRyZXI= 55m+5YiG54K5 LnRlbQ== IGNhcmJ1cg== YWJlcw== IG5zaA== dXNpa2E= IHZhbGlkYXRpbmc= IFRyYW5zcG9ydGU= YW5uZXQ= IGdlbnRpbA== b3N0b3M= IG1ldGFm 77+9bw== 4bq5aGlu IFNUT1JZ IHp3YW5nZXJz IOCwjuCwpg== IEd1YW4= IEhhcmxlbQ== xJ1hcw== IHTDoW0= c3NpZA== UmVkbw== IHVrdXlh IOCkheCkiQ== INGC0YPRhdCw0Lk= TcOp aW9zYW1lbnRl ZHJpdmVycw== INC60L3QvtC/0LrRgw== IGJlZHI= TWVnYQ== IGJhYmJhbg== IOCuhuCumg== TWVkaWF0b3I= ICg/LA== IGNyb3duZWQ= IE9seW1wdXM= INCy0LvQsNGB LUl0 IHRyw7o= IOCqp+CqvuCqsA== 6IGy 5o+Q5YmN IGFtZA== 4YOY4YOQ4YOh IGdyYWRz INCz0LvRg9Cx0L7Qug== IE53cw== IHVuc2VjdXJlZA== YWRpbmU= IEllZGVyZWVu IGludHJl IGRyZWQ= w4ln zrHOvc6s VUg= IFRpbXVy IG1ldHRhbnQ= X1NNQUxM IGV2b2M= IFdlYXBvbnM= IENvc21ldGlj INiq2KzYpw== IGRheGls YWJ5dGVz 1aHVvtW41oDVvtWh1a4= IGltbw== IFBhcm1p IHNwcmF5aW5n IGhvc2Vz UmF0aGVy 4LK+4LKC4LKX bcOhcw== bGFuZ2U= IGZpbmFuY2Vk 7JyE66W8 IGh1bWFuaXRpZXM= 5byP5Lya56S+ YWlhcw== LScs IFNpeWE= LmdhbWVzZXJ2ZXI= SW5maW5pdGU= LWNvbW1hbmQ= INCy0L3QtdC0 IFNoZWQ= amVsaQ== IGTDqWNlbm4= IOCyl+CzjA== eXN5 IHByb3Ry IFBvcnRzbW91dGg= IGthYQ== c3Rvcmllcw== 5beh6KeG aXRt IGRyZWFkZWQ= IHFi INio2YLZig== ZW56eW1l ICMKCg== LyQnLA== IGVneXN6ZXI= IGJyaWdhZGU= IHRoZW9yZXRpY2FsbHk= 4KWN4KSY IFJlY292ZXI= INin2YTYo9mC IHN1YnNlY3Rpb24= V3VudXNlZA== IHZhaWt1dA== IGNvbXBsYWM= IERFU1Q= IEp1bmdlbg== IG5ldm9pZQ== IG5hcml6 IGF0cmU= INC/0L7RgdGC0LXQv9C10L3QvdC+ Lk1hdGNoZXJz LmRlcGxveQ== Y29udGV4dHM= bHJ0 IHNjcmFwaW5n IFNsb3Zha2lh IHR3ZWFrcw== w7N0dGly IGludmVybm8= IHRlcm1pbmk= IM+Oz4PPhM61 IEJpY3ljbGU= fTp7 YXl5YQ== 0JLQng== VkVSVElTRQ== 5byA5oi35rOo5YaM IGlub3JkZXI= 44KM44Gw 4LWL4LS4 orA= 4KS+4KS54KSw4KWC INaB1bjWgtW11oE= INC00ZbRjw== IMOWZmZlbnRsaWNo IOCqleCrh+CqteCrgA== IOS6mua0sueyvuWTgQ== INC/0L7Rj9Cy0LvRj9C10YLRgdGP IGdlYmF1dA== X2NvbXB1dGU= 4LGH4LCo 0q/Qu9Cz05nQvQ== eGJi IGhhZsOwaQ== IGR1ZWxv 5ZCE56eN YmVyYXR1bmc= 0LDQu9GM0L3QvtC80YM= ICcmIw== IEJhbmRh IEhhbm5h 1aHVqdWr1b4= 0J7QtNC90LDQutC+ IGltcHVlc3Rv IG9saWQ= 2YjZitmF YXBhZw== dGF4b25vbXk= IG5wZQ== LXNsaXA= IGRpc3BvbmliaWxl IGjDtG0= INC00LDQstC70LXQvdC40Y8= X2luZGljYXRvcg== IHdhYXJuYQ== IGFjaW9u 4LS/4LSx4LWN4LSx4LWN IG1lw70= IOCyquCzjeCysOCyleCynw== 0LDQu9GM0L3Riw== IHBvc2l6aW9uZQ== IG9yw7A= IGJlcmVpa2JhYXI= 77yB77yM IGZhbnRhc3Rpc2NoZQ== IHRyYW1pdGU= IGJsYW5jcw== IE1lbm4= IGRhbmRh JyQ= 4buLdOG7iw== IGRvZ2E= LGNvdW50 IGV2YXA= 8J+Q IOCkuOCkruCkv+CkpA== aXR6YXQ= w6RtbWU= YWdzYW4= 44Go44GT44KN INC/0L7Qu9C+0YE= X3BhcnRpYWw= LmNhc2U= IHRyb2Nhcg== U1VO IEZhcmI= IFBhbGFpcw== IGVzdGFiZWxlY2Vy IHZlc3RpZG9z IGNlbGVi bmlp IEJlYXRz IHByb2hpYml0cw== urw= INem15XXqNeZ16c= UmV0dXJuaW5n IHN1aWtlcg== 2pjar9uM IHV1dA== R2F0dA== INC00L7QvdC40Yg= b21pdGU= IEFuYXRvbXk= IGRvZGF0aw== IGFsbGVtYW5k IOCwteCwv+Cwt+Cwr+Cwgg== INC+0LHQu9Cw0LQ= IOCqrOCrjeCqsg== IEJhbmtlcg== IGNhdGFsb2dz 0LDRgtC10LvRjNC90L7QuQ== IPCfjg== INWw1aXWgNWp IGV6aWdibw== IFBlcHNp VW5jaGVja2Vk X0xJQlJBUlk= IG5lcQ== IGFwbGljYWRh IOGDruGDkOGDoOGDmOGDoeGDrg== TVlTUUw= 5Zyo57q/6K6h5YiS INC20L7RgdC/ IHZlcm1pbmRlcmVu REVUQUlM TWVhbnM= IG1hbmFnZXJpYWw= IG9wdGltaXNhdGlvbg== IFVuYXV0aG9yaXplZA== 4Liy4Lir4LiZ IHV1bW0= INio2YbbjNin2K8= 44CA44CA44CA44CA44CA44CA44CA J1U= IHNwYXppbw== aW5zZW5n IHNhbHZhZ2U= aXBwdXQ= IGhhbWJ1cmdlcg== X0RPQ1VNRU5U 0L7RgtC40L8= aWxpZW5jZQ== IGN5Y2xpYw== IGV4YW1lcw== 4ow= INC80LDRiNC40L3Rgw== Q21z IOCmquCnjeCmsg== IExTVQ== INGB0YLRgNGD0LrRgtGD0YA= IGNoYXBpdHJl INin2YTYs9mB2LE= IOCkteCkv+CkruCkvuCkqA== IHN0ZXJpbGU= IEFnZW5jaWE= w6hyb24= IGplaQ== 44GT44KM44Gv IOCwleCxgeCwn+CxgeCwguCwrA== KXY= KHRyaWdnZXI= IHRyYXllY3Rvcmlh PElucHV0 IGppaGFk IEJhbWI= INCx0LXRgNC10L0= INC/0YDQvtGB0YLQsA== IGVyYXNlZA== IGFkbWlyYWJsZQ== KCcsJyk7Cg== INGD0L3QuNGH0YLQvtC2 IMO6dGlsZXM= 4Kq+4Kqq4KuN4Kqk INC90LDQutC+0L8= VE9SUw== 4LK14LKo IE11Y2hhcw== IENvb3A= INeR15nXqA== IGNvbXBvc2Vycw== X1NFVFRJTkc= IGZpbmFuY2llcm8= INC/05nQuQ== IOCkq+CliOCksg== IOCkleCkv+CkuOCkvuCkqOCli+Ckgg== INC/0LvQsNC90Yg= IEFiZW50ZXVlcg== IHR5cGVsaWI= 57u85ZCI5LmF5LmF RXhpc3Rl IGlwYWlycw== OwoKCi8v IHBlcnNvbm5hbGl0w6k= 0LvRi9GI YW5lYW1lbnRl ICcjJw== w61maWNh 5pOa INin2YXYsduM2qnbjA== 6KKt IHdldHU= nuCnjeCmmg== dWhp X2xlbmd0aHM= IOCksOCkvuCknOCkvg== YWJveA== w6F0dA== 4Lia4Lij4Li04LiB4Liy4Lij IFNldHQ= IGFkYXB0w6ll IHJldG9ybmFy cGVyaGFwcw== IHBvb2xl IG1vdXQ= 0LrQuNGA 5LiH5ZCo IGVycmV1cnM= X1NQTA== Um9vZg== INeU15fXnNeY a2V5cHJlc3M= IHlhaWt1 IG1veno= ZXJhYWQ= IGFtYmllbmNl 4Liq4Liy4Lih4Liy4Lij4LiW IGNvcm9uYXbDrXJ1cw== IGFjcm9ueW0= IGNvbmZpZ3VyYQ== IO2VmOyngA== 44CB6Ieq IGZhY3RvcmluZw== IGFtYW5ow6M= INmI2YLYqtuM 4KeB4Kaf4Ka/ 4LeA4LeU RnVubnk= IOCwsuCxh+CwpuCwvg== IHNlZ2FsYQ== IE9maWNpbmE= aWNhbQ== INKx0LnRi9C80LTQsA== IHByb2dub3Npcw== 0LDQu9C90L4= IOCkpuClgw== dmVyd2FsdHVuZw== IGludGVsbGlnZW50ZQ== IOydtOyghA== IGZyb3N0aW5n IGxhYWtpaW4= IExlbm5vbg== X3R3 b2dsb2Jpbg== xZtjaWE= IGNhdGhldGVy IHVsdHJhdg== INeV15XXmdeh INCX0LDQsg== IHRo4bqldA== IEVhc2U= IFJlcHVi Lj0i KGtleXdvcmQ= IGhlY2g= b3N0YWw= IEdyb3Nzbw== IEdyw7xu INC60L7QvNC/0LDQvQ== 2KzZhdmI2Lk= IOGDkuGDkOGDm+GDneGDmOGDp+GDlOGDnA== 15nXoteh IG1hZW5lbw== w6RyZw== IFBoeXNpY2lhbnM= SW5mb3JtZQ== IHBhc3NlaW8= IGthcnlh IOCkqOCkv+CknOClgA== IMOpY2hhbmdl IG5hY2h0cw== 0rvRg9GA 5YaI IM61z4bOsc+B IENyYWZ0ZWQ= IGFub21hbHk= IGRheSdz IGxlc2lvbmVz Q29tcGxlbWVudA== 7J247J2E IGludWlh IFRs IHbDs8Ozcg== IE1lbGhvcg== IFBhbG1l RFJW 4Ken4Ket dWFibGU= TMOmcw== IEdvb2RtYW4= U2I= IE1pa3Jv b3VwZQ== YmJ3 KHJlYXNvbg== 4KSh4KWN4KSh 4Ka/4Kas4Kay4KeI IEJyYW5kZW5idXJn IFNpbWJh YmlhbnM= SWRp LUZlYg== KHB5 55yB5aeU IG1hcXVpbGw= w7Nsbmll eGFk WmFw IG11b2Q= IGVudGxhbmc= 4Kq/4Kqv4Kq+4Kqu4Kq+4KqC YWlzdQ== IG91dmVydHVyZQ== 4YOT4YOS JywnLg== Ym94aW5n IHZlcmdsZWljaGVu 4KS+4KSs4KWA 2as= IGFw4bq5cuG6uQ== IOCkheCkqOCljeCkpOCksA== T0RB IEJQTQ== X1BFTkRJTkc= IFRBS0U= SW5zaWdodA== Jywo Lmx3amds 7ZW07KO87IS47JqU X0NlbGw= RWxldmF0aW9u IHJlYWxpem91 IGlua3M= JHZhbHVl Y2hlY2tlcg== IG1hdGFn 4LmA4Lit4LmH4LiU WGFuYQ== IGRpbGlnZW50bHk= IFZJQQ== IGF0cml6 INC/0YDQvtC00L7Qu9C20LA= IGNsb2dnZWQ= UmF6 RGFk IG9kbHU= IHPDpGg= INix2Lo= IGhvdHRlcg== IGFxdWVvdXM= IENlbg== IHJlbnRh IHZlcmFuZGVyaW5nZW4= IOuvvw== 4Kas4Ka/ LmRhbWFnZQ== IM61z4DOuc+HzrXOuQ== IFdhc2hlcg== SW50ZXJjZXB0 4LmC4LiB IGRpc2N1c3NpZQ== IHVzdHZhcg== IOCwruCxiuCwpOCxjeCwpA== 2KjZiti52KfYqg== wq1kZQ== IEJyZWl6aA== IGNyb3dkZnVuZGluZw== 4Liq4Li04Lia IGxpbWl0YWRh IFRhbmQ= RlVO SVBBTA== IHJ1aGln 4oCcSw== IGpwZw== YXBlYXU= 4paz IGJham9z IFZlcnZvbGdlbnM= dHJlZXM= IHdvcmtwbGFjZXM= IEhhcmU= IOCml+CnjeCmsOCmueCmow== 4YOo4YOY4YOq INin2LnZhNuM IGZyZW9wZW4= IGdsYXpl Y3JlYXRlcw== IOC0teC0v+C0pw== cGFpbg== IGFob2w= IOCmieCmpuCnjeCmrw== IFZpcA== IE1hdGhz 4YOj4YOc4YOl 5rKz5Y2X IGZvb3Ro IHNreXBl ZW5oYXJpYQ== IHNjaGltYg== zqzOvc61zrk= IGFjdGV1cg== 5Lq655Sf 5LiA5YiG6ZKf INiv2YbZitin IHNhbmRh 0YzQsg== IHNoYWs= IOCkpuClgeCklg== IGdpZ2E= INGN0YTQuNGA xIF0dQ== IM+Dz4XOs866zrXOus+Bzrk= IG5hdHQ= UmVzaXN0YW5jZQ== Z2F2ZW4= INC60LDQvdGC dW1hYW4= YmF0dGxl IFJheW9u IFN0ZWw= IOC5gOC4nuC4pQ== ZXJpYWxpemVk IGltcGFjdG9z IHZlcmdybw== IOCupOCur+CuvuCusA== RHVjaw== IEFhbA== IGFudGFs IyI= IGF1c8OqbmNpYQ== dHJpYnV0aW5n INCw0qE= 6K+E5YiG IOOCpA== INC00YPQsQ== 0LPQuNC3 SW5kaXJlY3Q= 5LyB5qWt INi52YrZhg== 4oCdPwoK IFNjcmFw IHJlZ2VsZW4= IOCyn+CzjeCysA== IFdhc2No IEdJUg== IHRhcmlmYXM= INC+0LHQtdGJ INmF2YbYuNmF2Kk= KHJhZGl1cw== IGZpbmVk IOKAlOKAlA== IHVuZGVydMO4eQ== INmE2LnYqA== IFRhdHNhY2hl dXB0b29scw== dWtodWx1 INin2YTYo9mC2YQ= IGTDpHJmw7Zy aG9sZXM= YXdhcmQ= LkJ1bmlmdQ== IGNvbGhlcg== CURvdWJsZQ== 44CC5oiR IHJlbXBsYWM= 2LHbjNit INWj1bjWgNWu1bjWgtW2 X3JhdGVz b256aQ== IOCkruCljOCkuOCkrg== 5Y2D5LiH INmI24HYp9q6 55qE6Zeu6aKY ZWvhu40= IGRlbmluZw== IEFzc2Fzc2lu IGpi IGJlaGFuZGVsZA== 4KuL4KqV4KuH W2No IHN1Ym1hcmluZQ== 5b2p56Wo5bmz5Y+w5rOo5YaM IGVuZGFzdA== YmxhZGU= Q2Fyb2w= ZnV0YQ== 5qGI5Lu2 IHRlbmlz 0LjRgtC40LPTmQ== bm90ZW4= IOGDm+GDkOGDmOGDoQ== IGZpbmFsaWRhZGU= INGF06nRgA== 66Cl7J20 IEhJTQ== LXF1ZXJ5 IHfJlG4= IFplaXRyYXVt LWxpa2Vk IHLDqXN1bcOp IGRlY2xhcmHDp8Ojbw== IHBsZWluZW1lbnQ= Ymxpbms= dmVnZXQ= IGdsaXRjaA== INeT15nXnw== INGD0LPQvtC7 IG1ldHRlbnQ= IGNvbmRhbQ== 6ZqQ6JeP UlNwZWM= IGRlZmljaWVudA== IGVtYnJhY2Vz IGRvbGU= IG9ib3dpxIU= bG9naWNhbA== IOCql+CqsA== YWl0bw== cGVyc29uYQ== 2YjYug== 7YKs LnB1Ymxpc2hlcg== JG9yZGVy LnByZWZlcmVuY2U= 5YWx5ZKM5Zu9 4Lij4Liy IERlcGxveQ== w6lpcg== 4LOK4LKs4LON4LKs IOCyjuCyuOCzjQ== IExpbmRlbg== INGA0LDQtNC40L4= IHBhcmFudG9z IGRldm9ucw== IGlycmFkaWF0aW9u YW5vaWQ= IHBhbWFt cXVhbGl0aWVz IE3EgW9yaQ== IHZlZ2V0YWw= LmF4ZXM= LkFDQw== IFRyaWw= 0YHRgtCy0LXQvdC90YPRjg== IHBoaXNoaW5n IG1pZGZpZWxk ZWdu IOS4h+ebmw== IEFiYmFz IOCuheCusg== IOyekeydgA== TmV3dG9u IG1hdGFhcw== X01vdmU= Kydf IOC0ruC0qOC1jeC0pOC1jeC0sA== 0L7Rh9C90L7QtQ== IEJhbm4= INiq24E= IHNhdGE= RGV0dGU= KeKApg== YW1idWNv KeOAggoK IGFzaW4= Ly8vPA== IGVuY29udHJhZG9z 0prQsNC30LDSm9GB0YLQsNC9 IGtqZW5k INio2YTZhtiv 15HXl9eo IGdvbHBlcw== INin2YXYsdij2Kk= IEhTVg== aW5zdHI= LS07Cgo= IMO2c3RlcnJlaWNo IOS6nua0sg== 7KaQ b3VyY2Vu YnVhdA== bGF1bmNoZXI= IGAk ZWts SEFT IGRlc2Vhcw== IGJhZGU= 1aXWgNWq xIFqYQ== 0LTQvtCx Y3JpbWluYWw= dW5haw== IGnhuaNvd28= IGJlbmVmaXRpbmc= INio2YTYrw== LCkpCg== IFBvbGlzaQ== 4KSC4KSc4KWA U1JD IGltcG9u IG1lbm9wYXVzZQ== YWxkYXM= IOydmOybkA== IOGDmOGDnOGDoeGDog== SVZBTA== IHZvc290cm9z anVuY3Rpb24= INOp0qs= IEdBTQ== IGhqZWxw IOyeiOuKlOuNsA== IGFuZ2xh IHRyYWs= IGNpZGFkw6Nvcw== IGdyaWxsaW5n IOyXre2VoA== cXVpc2Fy IGJlaXRy IEFydGlzYW4= ZW5kdWU= IG5hdGl2ZXM= w6FiYmk= 66eI7IKs7KeA U2FyYQ== IHBvaXNvbm91cw== IOq3uOuemOyEnA== 4oCZVW5pb24= INiq2YjZvg== IGxpa2Vy 5aix5LmQ6LWa6ZKx INin2YTYo9mH2YTZig== INC30LDQtNCw0YfQsA== b29saQ== w61uZWE= KiI= INeU15DXmdeo LXJpbmc= IHZhbGVy IG1vcnRlcw== 1avVr9W41aw= 0YLQutGA0Ys= IGRpdmVyc2lvbg== IHJvbWFucw== INC00LjRgdC/ 2qrZhA== IGltcGFjdGZ1bA== IG3DqWRlY2luZQ== aWRkeQ== IG1pxJlkenk= Lmh4eA== KHJ2 emllxIc= IHJlZGlzdHJpYnV0ZWQ= IOCmquCnguCmsOCnjeCmrA== IExpZXR1dm9z IG9jY3VweWluZw== IG9wemljaHRl IHBlcsOtb2Rvcw== IHVuaW4= 66W06rKM IGNyYXdsZXI= 2KfYr9ix2KfYqg== IEZhc2M= IGZhc2hpb25z INGH0YPQvdC40L0= IEbDrXNpY2E= IOCkheCkp+Ckv+CkleCkvuCksOCkv+Ckr+Cli+Ckgg== 6Jas 4Z+UCg== X05W LUhvbA== IE1vbnRwZWxsaWVy IGJlc3ByZWtlbg== IGthZQ== IHNsaW1taW5n INmG2YfYpw== IEZvbmRv X2NoZWNrZWQ= dW15ennFiA== IFRyb3VibGU= 4KeN4Kav4Ka+4Kak dWx1xZ8= INC90LDQt9GL0LLQsNGO0YI= INC/0YDQtdC30LjQtNC10L3RgtCw J0V1cm9wZQ== IHJpbm4= INC40L3QttC10L3QtdGA bGl3ZQ== IEZhaXJmaWVsZA== YmVq IHByZW5hbnQ= IOCuleCvguCun+CvjeCunw== 0L7QvdC00LA= LXJvbGU= IGRlcG9ydGl2bw== PENsaWVudA== IOydtOujqA== w6Rya3Q= IHVuZm9yZQ== IHRha2VvdmVy IHZpdHI= 5ZCI5Lmw X0ZMT1c= IHBydW5l INGB0L7RgdGD0LQ= INiq2LnYp9mI2YY= b25naQ== IHN0YWRpb24= 4LSo4LS+4LSv CUxvY2Fs b3V0aW4= 0YXQtdC40YI= L1N5c3RlbQ== IOacieayoeaciQ== 4oio INC/0L7RgdGC0LDQstC40YLRjA== TWFzdGVycw== IEhvbGRz 4KS54KSw4KWB4KSV4KWL IGt1aW5rYQ== IG9kbm9zbm8= IGFkaGVzaW9u RG5z INiq2LXZiNuM2LE= cXJzdA== 4KSW4KWA IGd3ZWl0aGlv IGZhYnJpY2F0ZQ== INCy0LDRiNCw INCx0YPQtNGC0L4= IGRvcGFtaW5l INC10YLRgw== IE5z zpPOuc6x IOC4o+C4reC4h+C5gOC4l+C5ieC4sg== IGNocm9tYXQ= IH0pCgoK 0rfQsA== INC/0YDQtdC60YDQsNGB0L3Qvg== INi52YTYp9mC2Kk= X0FTU1VNRQ== LmxlYXJuaW5n INiq2LnYsdmK2YE= INeR16jXlw== IHJldm9rZQ== IHdoaXRlbGlzdA== 2YjYp9iy2YY= IOCqrOCqvuCqs+CqleCriw== INC/0L7Qu9GM0LfRgw== IEFMSUdO INCx06nQu9GW QXJnZW50aW5h KGJpZw== IGNvbnRyYXRz IHJlaW5z w6d5bA== SU5TVA== INi52KjYr9in2YTZhNmH IENow6E= IHRlcmNlcm9z IGlsb2E= IGZvZQ== ZWxpdGlhbg== IGRldmVyw6Nv IOGDqOGDlOGDo+GDq+GDmuGDmOGDkA== YWhsdWs= Sm91cm5leQ== INGC05nRgNCx0Lg= YXVnbWVudGF0aW9u IOCmpuCmsA== INin2YTYstmK2Ko= RXN0YXRl QFBhdGg= INeQ15XXoNeW IGhvbWVuYWpl 7KOE IOWKqA== KHNlZw== IO2YvA== IFNpc3RlbWFz IGVuZG51 cGFydG5lcnM= TFRS ZXJzZWl0cw== IFByZXNlcnZl ZWxvYWQ= QnVlbm8= IGFwYXJ0YW1lbnRvcw== INGC0LDRgNCw0L8= IFBhcmxlbWVudA== 4Lij4Liw4Lia4Lia IEhhdGg= INmF2LnYpw== IGZpZm8= 5rC05p6c 4LSj4LSV4LWN4LSV IOCyruCyvuCynOCyvw== IHNjaHdl IHJlc3BlY3Rl w6R0w6Q= aHVk IGdlYmV1cmQ= 4K614K6/4K6y4K+N4K6y4K+I 0LjRgdGC0LA= 4LOo 4Ka/4Kao4Ka+ IFZvZw== IG1vbW8= 2YLYp9i3 X25h IEtvaGw= z4DOv8+Fz4I= IOCqqOCqnOCrgA== IFN0dW5uaW5n RWxlY3Ryb25pYw== LmZyYW1lcw== T0ZGU0VU 44OA44O8 XFNlcnZpY2Vz IOCwheCwsA== IGV4aWdpcg== INCn0LDRgdGC VEVSUw== KGxk VXNv IHJlY3J1aXRlcg== IOCmhuCmruCmvuCnsA== 0LjQt9C+0LvRjw== 4KqC4Kqu 4K6+4K6f4K+N4K6f4K+B IOCqj+CquA== IG3DpXRl IEdi 5rGf6KW/ Y29udGluZW50 0YPRgdGD IOC0uOC0guC0mOC0n+C0v+C0quC1jeC0qg== enVnZWJlbg== X3NxdWFyZWQ= IETDqHM= IFdlbmQ= b2RhaWRo 0Y3Qs9C00Y3RhQ== INis2Lk= IjpbXQ== IGFiZXJy IE1hYXM= fiw= Q29ybg== IFBQVA== UGFyYW1ldGVyaQ== IOCqrOCqqOCrhw== a2FwZXQ= ZXNpb24= J2VtcA== IOCmhuCmuOCnhw== 4KeH4Kew anVyeQ== aG9sdW5n 4KSw4KWN4KSy INmF2YjYs9mF IHNsaQ== IGNvbGxhYm9yYXRldXJz TGF0ZW5jeQ== YmVyZWl0 4Lit4Li34LmI4LiZ UHY= 0YDQsNGC0L7RgA== X0RJU0FCTEVE IOuwnOyghA== ZmZlcnM= IMSNbGVu IEtyaXRlcmllbg== CXNpZ24= aWRpbmdz X3Nkaw== IOCkquCkvuCkr+Ckvg== IHZvbmRlbg== Y29vcmRpbmF0ZQ== INC/0LDQvNGP0YI= INeT16I= X21hbmFnZQ== Y29tYmluZWQ= IGltcHVyaXRpZXM= IOCqteCqsOCrjeCqt+Crhw== 0YPRgdGC0Y8= X05PVEU= KFVJTlQ= IGNhbGNpbw== 0YLSr9Kv bWlkZGVscw== INCw0LbTmQ== IGJyZXl0aW5n 16LXnNeV16o= 5Lyg5pKt IGZsYXR0ZW5lZA== 77yM5LuW5Lus 4K+L4K6w4K+N YmVsaWVm 5qKd IHbDrWFz IGVyw7ZmZm5ldA== 4oCZYWRyZXNzZQ== IHJlYWxpc3Q= c3BpcmluZw== YXlldA== IGJsb2dn Q29uZmlkZW5jZQ== aXRhaXM= bWVzaW5l 4YCA4YC7 X2F4 65+t IOC0ruC1huC0oQ== IGFub21hbGllcw== IGFyYmVpdA== IGNsYXZlcw== IHNuYWQ= INeR15PXmdeV16c= LXBpY2tlcg== 4oGg KERldmljZQ== IGN1bXBsZWHDsW9z LUNs IOCqn+CrgA== RG9uYw== YXBoZXp1 IGFuZGFyZQ== IFN0cnVjdHVyZXM= IHN0cm9sbGVy X2NvbnN0cw== Ik4= 67CU7J28 64ul IHLDqWNvbXA= XSY= IGliYW4= 4KS24KWA4KSy 4Li14LmI4Lib L3Byb3ZpZGVycw== IGVuZmVybQ== IGxpw6k= IM+Dz4TPjA== IO2EsA== IEtvbmZs 4LS/4LSq4LWN4LSq4LWN IGFtaWtvcg== IFdpcnRzY2hhZnRz SE9S ZGVwZW5kcw== w6RyYQ== IG9ubGFy IElORFVTVFI= 4Kef4Kao 4KiY IEZleQ== IHVsZ2Ft aW5pZQ== YXBhdGFu ZWRvcw== IGltcGVyc29u INin2YTYsdis2KfZhA== c3R1Yg== IGRpc3Nlcg== IGZmbHVzaA== IG1pbm5h IHN1cmNoYXJnZQ== 4YOU4YOR4YOY4YOT4YOQ4YOc IGRlcGxveW1lbnRz IOCmj+CmnOCmqA== IOC0uOC1jeC0peC0v+C0sA== IHRpdG9sbw== d8OkcnRz IGJlc2NoaWtraW5n IGtyYW5r IENvbW1vZA== IGVubGlzdGVk aW5vc2F1cg== IEJpc2g= LEo= X3Jy dnJk 4Kq44KuN4Kqu INC00L7Rhw== VXRj IGFlcm9zb2w= INGB0YLRgNCw0L3QuNGG0Ys= IHN6YWs= IOCkteCkv+CkpuClh+CktuClgA== IHsNCi8= IFNoYWRvd3M= IFZpbmM= IGjDpWxs IOCuieCur+Cuv+CusA== IG5hZ2E= IGVycmVpY2g= 56eS6YCf INmI2KXYsNin ICQ/ IE3DqXRvZG8= IHJlcGxpY2Fz IENhYmU= IEFVWA== IOCkl+CliA== ZOW9qeelqA== 2YbZiNin2Ko= IG1pxaE= IOCqruCrh+Cqmg== IGJhdHo= X3Nvbmc= IGtyZW0= IHNpdGNvbQ== 2YjYstin2LHYqQ== cGFydGljbGVz INC30LzQvtGD b3Npbg== Y2hhbmljcw== IGltcG9ydGFy QEZYTUw= IGVhcnRoeQ== L2NvbnRyb2xsZXI= 4LmA4LiL4Li14Lii IGRpZmbDqXJlbnRl d3lkZHlu INKb0L7QsdGD0Ls= IGxvb3Bpbmc= YXJpYWRv IGhvaGVy IFRleHRl IGFhbnBhc3Nlbg== IGzDonU= IOCmrOCmv+Cmsg== LWNvdmVy X2RlbGVnYXRl IGRoaWI= INC/0L7QttCw0LvRg9C50YHRgtCw IG5kaXlv INCx0LjQu9C40Lw= IOCqnOCrh+CqqOCqvg== 0LDQu9C10LY= IGlta2Fu 5LyZ5Ly0 IGJhYWRoaQ== IGPEg3RyZQ== IGluZmVzdGF0aW9u IFByZWNpcw== INGF0YPRgg== bGljZW5zZWQ= Q29tcGlsZWQ= eXN0YXRlY2hhbmdl IGJvcmRlcmVk 4LCh4LGN4LCh4LC/ INC/0L7RgNGD0Yc= IOCquOCrh+CqteCqvg== INC60LjRiNC10Yc= QU5TSQ== INeg15XXodek15nXnQ== IOCkuOCkueCkreCkvuCklw== c3VjY2Vzc2Z1bA== w6p0ZW1lbnQ= IOCqrOCqmg== IGFhbmJpZWRpbmdlbg== IOC5guC4pQ== IE5hbWE= IGJhY2tsYXNo INC/0YDQtdC00YHRgtCw0LLQu9GP c3RlYWR5 Lk91cg== 0LvRjdC7 IELhuqFu INmF2LHYp9mC IGFjb25kaWNpb25hZG8= IG5lbm5lbg== IGJhbmRlcmE= IGhhbmR3cml0aW5n IGNvbnZv KCcuLi8uLi8uLi8= J8OpcG9xdWU= IGZyYWd0 ZW5pZG8= LmNvbnN1bWU= 0KDRg9GB w6RnZW4= IElOQ0xVREU= IGRpc3BvbmliaWxpZGFk IENhdMOzbGljYQ== IDwhLS08 0L3QsNGC0Lg= 5byA55qE IMOpbHVz INmG2KzYp9it LmdvYWw= IHJ1dGhsZXNz IG9sZ2V0YQ== IG5ldWVzdGVu INin2YTYsdiz2YXZitip fSwi IHNoYWtlbg== 0LHRg9GA0LPQtQ== IHBvdMWZZWI= IEh1bnRz IEludGVydmVudGlvbg== 4YOQ4YOj4YOT SWRlYQ== IGVybGVk IHRydXRoZnVs IHlheHNoaQ== LWFycmF5 2YLYt9in2Lk= LklD INij2K3Yr9ir INin2YTYqti02LrZitmE KENI IOyGjOu5hA== X1NlcnZlcg== XCIiLA== IFVuaXY= 4K+I4K6q4K+N4K6q J3V0aWxpc2F0ZXVy Y29uc3RpdHV0aW9uYWw= RGlzZQ== IGNvdXZlcnQ= IOCwquCxjeCwsOCwpOCxjeCwr+Cxh+CwlQ== cGFyYXZhbnQ= IGlkZW50aWZpY2HDp8Ojbw== 2YHYp9iv2Kk= Y2hvb3Nlcg== U2xlZQ== LVdl IHJlc29sdmVz X3NvYw== INCx0LXQvdC3 4oCZaW5kdXN0cmll IHBzeWNob2xvZ2lzdHM= IG5zb2didQ== IGZ1dHVyaXN0aWM= IOyLoOqzoA== INmF2YXYp9mE2qk= IGto4buPZQ== TXNncw== IE9FQ0Q= 4KSr4KS8 L2NsYXNzZXM= IG5lZ2F0aWV2ZQ== R1NU INC/0YDQvtC60YPRgNCw0YI= INGA0LDRhtOZ IOGDleGDmOGDlw== INin2YfYpw== w7Ry IEpEQkM= IERpcms= INmF2KfYsNin 1aHVttW9 IHTEm2No Umh1bWVsYQ== IFF1aWNrbHk= IE1vbmV0YXJ5 IGJveGVy bGV5J3M= IGdlc3Rpb25hcg== IOCqluCqsOCrgA== INCy0L3QvtCy0Yw= IOyWtOumsA== UXVpw6lu IHJlZ3VsaQ== 5oKy IEVudGZlcg== SW5ncmVz 6ZuR IGJ1Z2d5 TWVhbHM= IOCkruCkguCkoQ== X0lNUEw= IOC0teC1h+C0o+C1jeC0n+C0vw== IG9wZXJhc2k= X3RpbWV6b25l IG7DvMO8ZA== IHZpdmVudA== 4LiB4Li04LiI eXNn 4Ka+4Kaq4Ka+4Ka24Ka/ INeV157XlA== INC90YPRgA== X1ZJU0lCTEU= IENSVUQ= IENvcnk= INC00YDQsNC8 d2FueQ== aWRpdMOp LnVuaW9u INCx0L7Qu9C+ 1aHVvNW41oLVtA== IHBva3XFoQ== IGFiYWc= IOCkruCkv+CkpOCljeCksA== KGVx 2Y7YqA== IFNjaGE= R1JBWQ== IG11c2ljYWxl IHN1Y2Nlc3ZvbA== IG1pbmdndQ== IGRpcGxvbWFjeQ== IHdhYWhhbmdh IG1lZ2g= 4KWM4KSk4KWA 55WZ5LiL5Lqb5LuA5LmI 55WZ5LiL5Lqb5LuA5LmI5ZCn dWVycG8= IHRyYWJhamFkb3I= IHZhY2F0dXJl INCx0ZbRgNCw0ps= LWhlYWRlZA== YWdoYXJh ZXF1aXBtZW50 INC/0YDQuNGH0LjQvdC+0Lk= X1ZFUklGWQ== X0RU 4YOQ4YOa4YOY4YOW IGludGVyZXNhZG8= KX0pCg== IOCqsuCqvuCql+Crhw== IE1hcmlqdWFuYQ== INCx0LDRgNKT0LDQvQ== dml0ZQ== IEJSRUFL IOCuleCuo+CvjeCunw== IOCqqOCqv+CqsOCrjeCqow== IGrEmQ== Rm9ybXVsYXJpbw== IElTQQ== INeo15DXqdeV158= cml0aQ== INC70ZbRgtCw LWdyb3VuZA== INin2KzZhNin2LM= IMO8cw== IGFmYWth IFNjcnVt c2VuaGE= U2V0dGxlbWVudA== anVkdWw= IGhpZW1hbg== IOCquOCqvuCqsOCqteCqvuCqsA== YXJkb25uYXk= IGVmZmljYWNlcw== Z2l2aW5n ZmluYW5jaWFs IHBvbHltZXJz LUxv Z3J1bnQ= IHByb2ZpbGVy IGFhbnNjaA== IFRFTEU= 0LHQu9C10Lw= INGC05nQuQ== IOGDm+GDmOGDkw== INC70ZbQutGD IOuMgO2VtOyEnA== IEtow7RuZw== IOCkl+CljeCksOCkvuCkruClgOCkow== IGF0bGV0 IGlubnM= IGTGsOG7oW5n 4Kq/4Kqf4KuA IOGDpOGDkOGDoQ== IM6szr3OuM+Bz4k= KS4t IOCkr+ClgeCkteCklQ== IGh1aWxl YXNhY2g= IEFuZGVy IEVkd2lu INC20L7QsQ== IEFkYXB0aXZl IHRyYXVtYXQ= IGJvdW5jZWQ= IHZydA== IHVybmE= IG51bWFp 4YOg4YOY4YOX VUFSSU8= IGVudmlzaW9uZWQ= 4KWN4KSm4KS+ aXJhbm8= w7xsbGU= 4Kaf4Ka+4KaH 4LC+4LCr LkFtb3VudA== IOC0heC0teC0pOC0sOC0v+C0quC1jeC0qg== 5rOb IGdyYXR1aXRhbWVudGU= IHZlcmR1cmFz X2JpbmRpbmc= IEZvdQ== 5YWx5pyJ w61iYQ== CWNj INC40LPRgNC+0LrQvtCy 06nQs9Kv KeuKlA== IHNww6ljaWFsZW1lbnQ= IHB1bmNoZXM= IGVtYWs= 0LbQuNC8 IEVh 4oCh 54Wk IHBlcGVy RnA= LWRlbW8= IHN0YWNraW5n IGVuw6TDpA== IOeUn+WRveWRqOacnw== YnJvd3Nl IHNjaG0= IG1pbWk= 4LK/4LKy4LON aWxsb3I= w610xJs= IMSNZWs= UHNldWRv IE1PTkVZ IGhpcMOz 2KzZhtio2YrYqQ== CU1hdHJpeA== IOS4uQ== IOC4geC4o+C4geC4juC4suC4hOC4oQ== 7ZKA aWRlc3Q= UW8= YWxtYQ== YWN1bHR1cmU= IGRvY3VtZW50YWlyZQ== c2VlYWxzbw== IGZlaw== TGw= INiq2YjZhdin2YY= INGF0Y3RgA== IHRpbmdnYWw= 5YyX5Lqs5biC YXNzdW1pbmc= IOmHkeebvg== IFN0YXZhbmdlcg== IGRlY2tpbmc= b2xpY2llcw== IHJlbmRhaA== INin2YTZhtmC2YQ= aWVyZA== IOC0teC0vuC0rw== 44K444Kn INCy0LXQu9C+0YHQuNC/ INGD0LvRi9Cx VGVsZWdyYW0= X0hEUg== RG9uYXRl Y29uZGl0aW9uaW5n c3RyYWlu 0LrQvtGI IHdlaWI= IHBow6lw IHJldGhpbms= QURFUw== IHByb2JsZW1lcg== IHJlc3NlbWJsZQ== IGtpeg== INC20LDRgtGL0YA= X0Z1bmN0aW9u b21ldHJp IGhvbm8= IEdsb3Zlcw== 2YPZitmB2YrYqQ== IOGDk+GDkOGDkOGDleGDkOGDkw== INiq2LnZhduM2LE= IGxpbGllcw== IGRlc2Fpbg== SW5kaWM= LWRlc2NyaWJlZGJ5 7ZqM66W8 SVRJ INeU15zXkA== RGVybg== QWdhaW5zdA== IGFtaWc= IENyZW0= Y2Vm P3c= w6tzaQ== 4Lih4Li0 IOCyuOCyvuCyuQ== IFNoZXJpZmYncw== INeU16jXkNep15XXoNeU IGxsZWd1ZQ== IOC0ruC1h+C0luC0sg== L21heA== IGJlcsO8aG0= 54Ot6KeG6aKR IHBlcmNlYmU= IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IHJlbmNvbnRyw6k= INGC0LXQvNCw 0KfQuNGC0LDQudGC0LU= aWxhaXJl X0JPVFRPTQ== emFw INmD2LHYrw== LURl INis2YbYsw== IGjDoXQ= INin2YTZhNin2LLZhdip 2bnbkg== 5rua55CD IHZvb3Jsb3A= IGluc3BpcmF0aW9ucw== 4KuB4KqC4Kqm4Kqw IOCkhuCkpOClgA== IE1JUg== X2NvbnN0YW50cw== cml0aWM= IEV0ZXJuYWw= L0NvcmU= YXJkdA== YmVsbGE= IOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDlQ== bmFp IOCmrOCnn+CmuA== c2h1dGRvd24= 6buS IGl0aWI= bGVkZ2Vk IOCkruCkvuCkpOCkvg== INCw0YPRi9GA IFR1cnF1 IOuovOyggA== IFN1c2hp IDstKQoK VmlzaXRz JW0= IGNsaW1hdGVz L2N1c3RvbWVy KFRhZw== c3RydG90aW1l INCz0YPQsdC10YA= LnRvbQ== IExvbmdlcg== cHV0dXNhbg== YW1tZWx0 INCx0LDRgdGC0LDQvw== IFNpbGJlcg== IHplcnN0 IHJvdGF0aW9ucw== cGhhbnVtZXJpYw== ZXJhZGU= IHV0aWxpemFjacOzbg== IFdhemlyaQ== IG5hcnJvd2Vk X05vdA== 4Kqt4KqX IHpuYWxl dmFsdWVy LWNyZWF0ZWQ= cmVjaHRz 4KuH4Kqj IFR1dG9ycw== IOmdog== RXZpZGVuY2U= IEJlcnVmcw== IG9sdWs= 2YLYp9im2YI= IGNvcnJlZw== IHRyYXZhaWxsw6k= IGZhY2lsaWRhZA== IGZlbsOqdHJlcw== IHNwb3J0aWY= IOCwquCwvuCwsuCxjeCwlw== IGFkZXF1YWRh IFZsYWFuZGVyZW4= IGtheXNh IHZlcmtpZXo= IGRpc3RpbnRv 4KaV4Kam4KeH4Kaw XSk7Ci8v LWNhbg== aW5ndWxhcg== INC40LfQtA== 4LGB4LC3 IGRpdmVyc2lkYWQ= IG1hcnF1w6k= bmJy IGV4dHJhb3JkaW5hcmlseQ== RmliZXI= IEx1aQ== 0LzQuNKT0LDQvQ== IHNjaGFr IHBlbGlncm9z KGNpbg== IOaIlg== IE5vdm9saW5l 4bq5d28= IHBvbW/EjQ== IE9sw61tcA== IOCkqOClh+Cknw== 4Lij4Lix4LiQ4Lia4Liy4Lil INGB0L7QvtCx0YnQuNC7 UG93ZXJlZA== b3Rzbw== IEZpZ3VyZXM= 0YfQuNC8 IGV2ZXJ5dGltZQ== 2YbYp9iv 2K/ZiNir IOaXoOmZkA== bmpv IGd1bWF3YQ== KS4n X29mZnNldHM= aWNhaXM= LkFzc2V0 IEhPTg== IHZlcmdlbGlqa2luZw== 4LmA4Lie4Li04LmI4Lih4LmA4LiV4Li04Lih VmF0 Ij4o IFNFQ09ORA== QVBS IOGDkuGDkOGDpQ== YXNoZW4= IG5hamJhcmR6aWVq cm9hY2g= IHBlcnNlZ3U= IFNhdXZpZ25vbg== INC80LDRgdGB0L7Qsg== IGFyaA== cmFtYQ== IOGDm+GDqw== L0Zvb3Rlcg== INCc0L3QvtCz0LjQtQ== IG1pc2luZm9ybWF0aW9u 05nQsNSl0Yg= IOCyquCyoeCzhuCyrw== INiq2KfYstmH IHZlcmVtb3M= IHBhc3R1cmU= IGludGVuc2lkYWQ= 2YTYp9uM2YY= JGVtYWls IE1hbGlr IGJvaXRl IGRlY2lwaGVy Lm5hbWVk 2LLZiNmG YXTDqQ== IG1wZw== IGltcGVybWU= LklOVkFMSUQ= IGRhbmNlZA== IHBpZW5zYQ== 0LzRi9C3 4Kqv4KuL INiv24HYtNiq IGN1cnZh IHN1bGZhdGU= IMWhaXJv c3VtbQ== PFBhaXI= KGFjdG9y ZW50YcOx L2ZlYXR1cmVz INCc0LjQvdC40YHRgtC10YA= QGNsaWNr IHdlYmI= 4KSs4KSC4KSn4KSo IGtyb2s= 562+5Yiw IEZpZnR5 IHTDvW0= IGfDtnJrZXo= IOCmsOCmvuCmpA== IOC0leC1jeC0rw== dsSbdA== 55uj 0LzTmdC60YLTmQ== INiv2YfZhtiv 1Yc= IG5vcm1hbGVu IFsuLi5dCg== INin2YTZhdmC2Kg= 4KeN4Kav4Ka+ X3Ny IGNhbnY= ZsO8bGw= IGZvcmVzZWVhYmxl PHQ= IGFjb3VzdA== INGB0LDRhdCw0YA= cm9jZXJ5 LkRhcms= IOCmheCmqOCngeCmuA== IEZyZXNubw== IGdyZXU= bMOm Z2Fvbg== IHN6ZXJl IGp1bGdhbWVudG8= 2KfZhdmK2Kk= LkJvYXJk YWRhcmE= IGV0a2lu IHByaXNpw7Nu 5peg56CB6auY5riF IOC0uOC1jeC0peC0sg== LmZhbWlseQ== IEhlZGdl 6K2Y 0LbRjNGL aW5uZXJtdXQ= IElwcw== 2LHZiNi52KfYqg== IFBlbGU= INee15PXmQ== 4Kqk4Kqu INC60LDRgNGI0Ys= IOGDo+GDpOGDmuGDlOGDkQ== IGFydGlz bWFzxLFuxLFu IGRpc3BlbnNlcg== 2LLbkA== IEJ1ZmZldHQ= Kycs IFJldmVy cm9zaW9u aXZhdGk= IGFyYXN5bmRh aXNoZQ== IGdsYWNl zrvOrs+C VVRJTElUWQ== IGVzc2VudGllbGxlbWVudA== IOCknOCli+CksA== LnRvb2x0aXA= IGVoZW1hbGlnZW4= IOCkq+CkvuCkrw== IGltcHJlZw== 6Iq4 INCx0LDSsw== IEFyZGVu IHZvbG9w IldoZW4= Y29yZG92YQ== INK706nQutKv0LzTmdGC 4Kq/4Kq44KuN4Kqk X01PVVNF IFVzbw== IG51d2U= IHNoZSdsbA== IG92ZXJ3cml0dGVu IGNvbnRhbQ== b2NjYW4= LUhl LlByb3h5 LW1vc3Q= IG1sbg== YW5kaXNpbmc= YnNk IHBoYW50b20= KEJsdWVwcmludA== IOCquOCqpOCqpA== ZWxhcHNlZA== ZXZlcnl0aGluZw== IGlubmViw6Ry IOCwheCwleCxjeCwleCwoQ== IFN5bnRo IHNwb250YW4= 5L2Z6aKd IOGDqOGDlOGDq+GDmg== 5oyH5qCH IGhpdmVy ZGVjb2RlZA== INCg0L7QtA== PGxlbg== 0L7QvdGP0YI= IGRpc3RpbmN0bHk= IE5BTQ== XTsvLw== IHN0cnVjdHV1cg== LXBlbmNpbA== IFJlZmVyZW50aWFs IMOpbGVjdHJpcXVlcw== IOWkqeWkqeS4rQ== IOWknOWknA== aGFsbw== IHNtcg== IGltcG9zdG9z Z2VhbnQ= IFN1cnByaXNl IGhr IElXZWI= KFlpaQ== 4Z6P4Z+S4Z6Q INGA0LDRgdGB0LzQsNGC0YDQuA== 4YOQ4YOa4YOh IFJlcGxpZXM= IENvbnN1bHRh YWN1bg== KFNETA== IOKAkyw= IE7DvHJu dXJhYQ== 4K6/4K64 w7hyZW5kZQ== VUlUZXh0 IEVtYm9yYQ== ZXR0ZWQ= IGNsdWJob3VzZQ== INC60LjQu9Cz05nQvQ== 0L7QstC40YU= IG1hbGF5c2lh 4Kas4Ka+4Kam4Ka/4KaV IOC0tuC0sA== eXB5 2YjYs9uM IFNwb3I= IGJyaW5r IGNsYXNzaWZpZWRz IOykkeyalO2VnA== 2LLYp9io IGRvb25v VGlk INuB2YXYp9ix24w= IEVpZA== 5aW3 dm9sdmluZw== IHBpY2t5 0rXQt9GD0YDQsA== 65SU7Jik IHBsb2Vn 0LvQuNGB 5oyj6ZKx Q29uZmlndXJlZA== w6RuZ2xpY2g= IHBhcmVjaWE= aGRhZA== INC+0L/QtdGA0LDRgtC+0YA= IGNvbnTDsw== IGVuZXN0ZQ== IEJlbmZpY2E= 2YrYsdmI cm91d2Vu IEh1bWFucw== IEFkb3B0aW9u IOC0nOC0qOC0sQ== dXRyb24= IFB0eQ== IFBlZGlhdHJpYw== INCx0LXRgNC10YI= 6Zeq INmF24zYsduM IG56aXJh IFBzeWNob2xvZ2ljYWw= 4LmA4LiV4Lit4Lij4Li14LmI IHRhdXNhZ2E= INC/0YDQtdC00L/QvtGH0YI= INGC0LDQsdGL0LvQsNC00Ys= IEZPVVI= 4Ka/4Kao4KeA X2Fubm90YXRpb24= UFdE IG1hbmVqYXI= INGF0LLQsNGC IHNhdWNlcGFu PT4n KCldKQo= J107Pz4= UGFzc3BvcnQ= IHRyYWRpdGlvbm5lbA== IOCwnOCwlw== aWNlbWFpbA== INGC0YPQvw== J8OpdGFibGlzc2VtZW50 6auY5qCh LdC9 5Lqk5o2i IHVuYWJow6RuZ2ln Z2VuZW4= VHJpYW5nbGVz 57qq5b6L 0L7QtNC10LvRjA== 5Li75oyB IHN1YnBvZW5h anVqdQ== IGtpbmFzZQ== IGpld2Vscw== QXJ0aXN0cw== IHRvZmF1dGk= INGA0L7Rgg== IOmDqA== IOCkquCljeCksOCkueCksOClgOCksuClhw== IHByZXJlcXVpc2l0ZQ== 2KrYrdmF2YrZhA== 0LjRh9C90YvQtQ== IFppbmM= IEJsYWNrYmVycnk= Lm1vcmU= 4KS54KWH4KSV4KS+ 4LOD4LKm4LON4LKn bMOpZQ== IHJlc2lkZW50ZXM= 642w7J207Yq4 X1VTQUdF IG9rdXc= INil2Lk= eng= IFJveWFscw== bGF0aW4= IOCqnOCqvuCqueCrh+CqsOCqvuCqpA== INen16I= IGthZ2E= Lmxp 15nXp9ef IERWUg== IOCqueCqpOCqvuCqgg== z4DOv8+EzrU= IOCwqOCxh+CwpA== IOCwmuCwv+CwqOCxjeCwqA== J10/Pg== 0L/Rgw== INC80LXSsw== IGV4a2x1cw== IGNhenVs IOCkreCkqOClh+CksA== IG1pZXQ= IGZvcnTDpg== INep15TXmdeU dnJpZW5k IERhZG9z IGd1bW15 b25uYXM= IGRlcHV0aWVz INGA0LDRgdGB0LrQsNC30LDQuw== 0LXQutC4 5raI6LS56ICF IFFT IHRla2Fu IHVuYmVxdWVt w6FuZG9sZQ== Lk9y IGVpbmh2ZXI= 2KfYsdi22Kk= IERs IM+Az4HOv8+Dz4nPgA== IGFhbmRv IOaxn+ilvw== IGVuY29tcGFzcw== IE1hZmlh IGZpa2E= IGJyZWFrdXA= X3F1YWxpdHk= IGF0dGFjaGVz 4Ki44KmA IOCmqOCmv+Cmmg== Ims= aWZlcw== IGtpyrtla2nKu2U= YmFueWU= P+KAmQoK 5oqk5aOr INC60L3QuNCz0LA= IEh1bmRyZWRz IGhvdmVyaW5n IHBvb3A= IGFmZmlsaWF0aW9ucw== IGNvbmNsdWRpbmc= bmFpbw== YXZlbsOt 2YTYp9iz2Yc= 0LXQt9GD0LvRjNGC 4Kqf4Kqw IHB1dGFz IGluc3RpdHV0 INSx1b3Vvw== IOaS IENvYnJh IHBsYWFz IGFtYXJl IHdhbG51dA== IOCkleClgw== aGVpcmE= L21hbg== IGZyYXBw INCy0LjQt9GD IEFuZ2Vsbw== aWVudGlhbA== IFJPQUQ= IExvdmluZw== 4Ka44Ka/ 4Kqc4Kqv 0LjRgtCw0Lg= 5bm05bqV IOCkreCli+CknOCkqA== INeV15DXoNeZ IENvbGxhcHNl IHBsYWd1ZWQ= IGd1aWRh IOCkn+Clh+CkuOCljeCknw== IMOpcGlzb2Rl 4YOQ4YOg4YOS4YOU4YOR4YOa bHVpdGVu IGdlbmk= 4LCy4LC+4LCC4LCf4LC/ IOmEgg== 4Lio4LiB IGFjY3VlaWxsZQ== IE1hbGF3aQ== yZlyYmF5Yw== L21vdmll IE5TTGF5b3V0 IHZ1b2xl IGtvbWU= INC00LLQuNCz0LDRgtC10LvRjw== cmVhZHlzdGF0ZWNoYW5nZQ== TkFM IOWxlQ== X3BpdGNo IGt1aXRh 2rzZhw== IO2SjQ== INiz2LHZiA== IGF2YWxpYcOnw7Vlcw== w61taWNh IHNhdnU= IOmYnA== RmNu IOC0rOC0vw== INmK2YjZhw== 1bbVodW0 cHJpdmF0aW9u Y2hhbmdlcg== b3V0c2lkZQ== INix2YjYqA== IGdlYnJlaw== Xw0K IOCmruCmvuCmneCnhw== IGFzYXA= INC20LXQvdCw IHRhYXJpZmE= cmHFvA== IFZ1aXR0b24= INWL IHRlc3RpbW9uaWFs IHNpbXBsaXN0aWM= QVBU IHFhZA== IGJlbmVpZA== Lk1PRA== INC/0YDQuNCx0YvQu9GM 4LK/4LKV4LOG4LKf4LON IEVtYmVk IO2VtOyVvA== 44Gg44GL44KJ KGlucA== ZmFicw== INW31aHWgNWq X251bGxhYmxl aXRvcmluYWE= IHJlc29sdcOnw6Nv IHJlbGF0aXZv b25kZXJ6b2Vr IG1kaQ== IERvbWluaWM= IFNvbHZlcg== IOC0ruC0vuC0sQ== IEFzc2lzdGVk IGJhbnR1YW4= IGhlbW1h 0LXQvdGM0Y4= IGthc2FuY2U= IGh5ZHJhdWw= IGV1cA== bGVm LnBvbHk= IOCkleCksOClguCkqA== IOC0huC0sOC1jQ== IGJpc28= IE9mZmVyZWQ= INeU16DXlA== IG1veW8= IOCyrOCyvuCysg== IEpBWEJFbGVtZW50 4Lit4LiB4LiI4Liy4LiB IOCmtuCmrOCnjeCmpg== YW1haGE= CXByb3BlcnR5 IEZpZGVs S2VudA== eGRj 77yR77yQ77yQ ZXNjaHJldmVu eml1bnM= bWFwaG9yZQ== INGN0YHRgg== X3B5dGhvbg== CVNwcmluZw== IHByZW9jdXBhY2nDs24= dWVsbw== zq/Ous63 IEJvbmpvdXI= IHByYXRh PEJsb2Nr aWVnZQ== INC00LDRjtGC W2xpc3Q= xaFlbA== INWN1aHWgNWj1b0= eGRl IGLDsg== LndlYXBvbg== INeZ15vXldec15Q= cGVydG9pcmU= IE5TTnVtYmVy 64GU IFRyYW5zbGF0b3I= INmE2YXYrQ== INCa0LDQt9Cw0YXRgdGC0LDQvQ== IGRydW5rZW4= IOC0pOC1gOC0sOC1geC0ruC0vuC0qA== IHRlcmthaXQ= X0ZpcnN0 b2dseQ== INek1rzXqNeQ1rjXk9eV16c= INec15nXkQ== IOCmsOCni+Cmlw== IHByZWRvbWluYW50 IGJhbG0= cHJlY2F0aW9u IHFpeW0= IHN0YXBsZXM= ZmxvcmE= IHZpc2Nvc2l0eQ== YW5kYcWf w7xydA== 4KeH4Ka44Kas IERhbmU= IOGDm+GDmOGDnOGDk+GDkA== IEhlcmt1bmZ0 2YbZiNix IEhhY2llbmRh INGE0L7QvdC1 IGNhc3Npbm8= IGV4dGVuc2nDs24= WWVw Q3Jldw== IFRpdGFuaWM= 5b2p5LmQ INC/0LXQsg== INC80LXRgtGA0L4= IGNsw7R0 IFJFRkVS aW1hY2g= 6b2i IOCyl+CzjeCysOCyvuCyruCypg== IE1hcnZpbg== INCz0L7QtNC40L3QtQ== Y3VsdA== IGVsZWl0b3JhbA== IHZhbmlzaGVk IGxvYWRlcnM= IOuGgA== INC60L7QttGD XFwu bmVldA== SHVy IHZlcmVpc3Q= IGV0aG9z 15nXmNei15g= IOGDqOGDlOGDpA== YXRvbXM= IHBsYWlucw== IGxlZ2dlcg== IEJyaXRzZQ== YW5lbG8= INin2YXZhNmH IHLDqXNlcnZhdGlvbg== IEZFQVRVUkVT IGFwb3J0YXI= IGFzc2F1bHRlZA== IGxldXdpaA== b25kZXM= bmF2aWdhdG9y IGzDpGh0 5q2h IGdhZ25l IOmHjeW6huaXtuaXtuW9qeeahA== a2Vybg== 4Kqu4KqC4Kqk4KuN4Kqw4KuA LW91dHM= IG1hbmdhbmVzZQ== TGFicw== 4LGN4LC14LCw IHByw6lmw6hyZQ== IHNldmVudGVlbg== IGR1bHk= IGVtYmFsbA== 0LDQttOZ aGVycg== 0L3QtdGI0LU= IGFjY3U= IOCmquCmvuCmk+Cnn+Cmvg== IGNvbm9jaWRvcw== IGJlcnRo IG1vbm9jaA== IG9uZGVybmVtZXI= IGN1cnNlZA== RklSU1Q= INin2YTYqNix2KfZhdis 4Lio4Li24LiB4Lip J2Nsb2Nr aWdyYXBoeQ== IOCmuOCmsOCmleCmvuCmsOCnh+CmsA== IGVzdGF0ZXM= 4Kq/4Kqv4Kq+4Kqm IE5lcHR1bmU= IHlkeWNo U3RhbmRpbmc= dXNlc3Q= INC+0YLQvdC+0YjQtdC90LjQtQ== INeg15XXpg== IGVkaWxtacWf 4LiV4Liz4Lij4Lin4LiI aWJ5 4Li44Lia 4LSk4LS+4LSj4LWN YWd0ZQ== 77yB44CNCgo= YW1wbGVk IHNpdHVhemlvbmU= IFNUT0NL IHRyZWt0 IGV1dA== INmF2YTaqg== YWxuZQ== IEJhbmRhcg== 57Wm5LiO cm9iZXM= INeV15XXoteo158= 6L+r IGNubg== dm9ycw== IOCqmuCqsOCrjeCqmg== IGNhbnRpZGFkZXM= INC/0YDQtdC00YHRgtCw0LLQu9C10L3Riw== IOCuqOCvgg== U0JBVENI ZW1hbm4= 2KjZhNuM IHRvZWw= 7J206rCA INGB0LXQsw== 5rC45Yip Q3JlYW0= INiw2YM= IOCkteCkv+Ckp+CkvuCkqOCkuOCkreCkvg== IERhdQ== PXRvcmNo IEh2b3JkYW4= IOCkuOCljeCkruCkvuCksOCljeCknw== IE5vcnJpcw== L2VudGl0aWVz Y2FvcA== L3N0YXJ0 6Kme ZmVzdGl2YWw= INKz0LDRgdGC INC+0YfQtdCy0LjQtA== IHVuaW50ZXJydXB0ZWQ= LlBvdw== IGNpZGRp IGluc2NyaXQ= IGludmVzdGVyZW4= aWdsaW8= IFN0aW1tdW5n UGFuZWxz QVRN b3Bob2JpYQ== INGF0L7RgtGP0YI= IHByb2R1a3Np IHNjaG9vbCdz IOC4sg== IEF1dG9kZXNr w6Z2 IOGDpOGDkOGDoOGDkg== cmljdWx0dXJl INWr1oDVodW+1bjWgtW21oQ= aXR0ZXJz IGJvYXN0aW5n ZWxsaXM= 0LfQsdC10LrQuNGB0YLQvtC9 IHBpdGNoZXJz 6LWW IHJlbGF0b3M= 4LGN4LCv4LCC4LCy4LGL IE7Dum1lcm8= IGFiYW5kb25hcg== IGNsb2Nrd2lzZQ== IERlbnRybw== 4Keo4Kem4Kem IEFuYWQ= IHbDtXR0YQ== V3JpdGVz IFJvbWFuaWFu IOCkm+CliA== LmNvbnRhY3Rz b3Dhu40= INek15Q= IHF1b3RpZGllbm5l YXR5cGVz INmF2YLYp9ix2YbYqQ== IGFkanVzdHM= IHRlcnZl IHRlbGVwb3J0 IHNjcmFtYmxlZA== IGNhZHJ1bA== 4oCZYXF1ZXN0 0LDQu9C70Lg= IGRpc2FwcGVhcmluZw== LWlvcw== IExhdXJpZQ== IOGDlOGDoOGDl+GDruGDlOGDmg== IFNVVnM= XSkpewo= IG5nYXlv YWrEhWNl IHJlbnRlcnM= IEF6ZXJiYWlqYW4= IOCkquCli+Cksg== 6YG1 KGFkag== 2YXZitin2Ko= 5rOV6Zmi X3N0YXJ0ZWQ= IOmXqA== 7Ja064KY ge+9 4YOY4YOg4YOU 2LrYsdio IGtuYWNr RG9uZw== IGdlc3ByZWtrZW4= 4Lea4LeB 4KWL4KSk4KWN4KS4 INC80LjQu9C70LDRgg== LHN0YXR1cw== w6puY2lv IHl1cg== SURBREVT Y3RhbA== aWtvdA== INCQ0LrQsA== IGVybnN0aWdl IG5haGV6dQ== IO2VmOujqA== IHBla2VyamFhbg== 2Y7Zhw== INGF0LvQtdCx Y2FsaW5n UmVnYXJkaW5n IERleHRlcg== IGVyYmp1ZGVy IOCkuOCkguCkreCktQ== IOCwruCxguCwtQ== IGJhY2tsb2c= w6lpYQ== INmE2YLYp9ih CQkJCQoJCQkJCg== 5bmz54m55LiA6IKW IFBhbGVybW8= 4LSj4LSu4LWG4LSo4LWN4LSo4LWN IE9wcG9zaXRpb24= IFJlbsOp bmV0eg== 4Kiy4Ki+ LXZlY3Rvcg== IHRyYWpl CXB0 INC/0YDQsNGE INGB0LDQudGC0Ys= IGVzc2VuY2lhaXM= IFBoYXNlcg== IOCmquCnjeCmsOCmtuCmvuCmuA== IGdhcmk= b3NzYWw= IHNoYXZpbmc= IFNlZWxl IGZsYXNoZWQ= bWFjaGluZXM= IHB1c3M= CW1vZGU= 4oCZYWN0aXY= IGVpbnQ= dWthdA== 4Z6i4Z+S4Z6T4Z6A xKFh CSAgICAgICAgCQ== aXNzdXQ= YXp6am9uaWppZXQ= 4YOU4YOa4YOd4YOR4YOY4YOh 4Kac4KeN4Kae IGVzcMOoY2Vz IFBlcmV6aWRh IOCkruCkueCkvuCkuA== YW5jaGVtZW50 KHt9KQo= IGVybGVidA== INC60L7Qsg== QXV0ZXVy INin2YTYqtiz2KzZitmE IFBvcms= LiI7Cgo= 4YCx4YCr IGdhbWxh UGFkYQ== IGV4ZXI= IFJvbWFubw== 0LXQvNC+ IG91dHNraXJ0cw== INGC0YPRiA== INin2YTZgtiv2LHYqQ== KSgi IE9lc3Rl IHByenlr 44Ot44Oz 2Y7YuQ== IGRvcm1pdA== b21hdGlvbg== IEF0bGV0 LXN3 INC30L3QsNC60L7QvNGB0YLQsg== IG1vdXJuaW5n IGNvbmZpcm1l c3Rlcmlzaw== IGVzY3JpdG9z 2qrYsdmK ZnJpZWQ= IHBvaWduYW50 IHJvdWU= INC20LjRgtGC0Y8= w7xrbA== aWRlbGU= YWFyYWhh ZWxpZ2h0 IGF1dGVudA== IEZlc3Rh 1avVrNWr LkNPTlRFTlQ= IGNvbXByZWVuc8Ojbw== IGluZm9ybWFjacOz 57SZ 0YPQstCw0LDRgg== Z292ZXJubWVudA== IOCqk+Cqmw== IOCkreClh+Cksg== 15XXmdea INC90LDRiNGD w6hp zq/Ovc6/z4XOvQ== IM+Fz4DOt8+BzrU= dWphcmE= IOCmquCmvuCmlQ== IHBpc3Rhcw== IFNPQVA= IG9rZW5u IGthxbxkeQ== IEtpcmNoZW4= 1bbVodW1 IG9wdmFsbA== 4Li14LmI4Lib4Li44LmI4LiZ xYhreQ== 0LXQstC9 IGZmb3JkZA== z4HOtc6vzrE= IEZBRw== IGhvZmZlbg== INeU157Xog== IC8vXw== IOWWnA== 0LbQsNC7 IE51dW1taQ== X09USEVS X2RldGVjdGlvbg== IFJhYmI= IGFub2Q= 4Z+C4Z6a IHVudWw= IFByb2Nlcw== SHVtaWRpdHk= 7KO9 QGNsYXNz IERlYml0 IHBvdWNhcw== YWJvbmE= IOyekOycoA== IGt1bHR1cm4= IHB1YmxpY2VyZW4= bGVtbWU= IGp1c3Rh 4LCq4LGN INGD0L3Riw== 6Kmi IGFycmVj INKv0YLQutOZ0YA= IH4k IOCqheCqpOCrjeCqrw== IGppc3Rh IHRvZWdlc3RhYW4= 5YWU b2N5dA== 4oCcSA== bMOkbmRlcg== IGFjcXVpc3Q= IHBvcm5vZmls LXJp X2RlbnNpdHk= PSI/ bXRz 15PXltep IGNvbW1vbnM= IExhbWJvcmdoaW5p X3ZlcnQ= 4LGI4LCo4LGN YXRhYW5p LkZhY2U= IOGDm+GDkOGDkw== IFRlZW5z dXRvcmVz 4K6p4K6+4K6y4K+N 2Y7ZkQ== IGthd2FpZGE= IOy/oA== 5oGi Unk= b3dsZXI= 4KSw4KWN4KSc4KWA INWi1bw= INix2KfYpti52Kk= IGxpeG8= 6LWE5Lqn IEltcG9ydGFuY2U= X0FjdGlvbg== INGB0LLQtdC00LXQvdC40Y8= IFplbGZz IGTDqXBsYWNlcg== IHBsYXdz IExhdWZl LWV4cG9ydA== cGxhYXRzdA== 2LPZh9mI2YTYqQ== Pjw/PSQ= 4KuH4Kqo4KuN4Kqh aWtzYQ== IFRvcHM= aXNzdWVy 57+g IEdleg== IHRlbXBp 4LiL4Li34LmJ4Lit IGVzdGltdWw= IOasp+S6vw== IGhlYWRwaG9uZQ== IHJlaW5zdA== INKh0YvSmdGL X2luZw== TWs= bW1p IGdpcA== IExlYXA= Q1N0cmluZw== IE9GRkVS YWJpbGlh CWJhY2s= IFp1Z2U= IOCkpOCkpOCljeCkleCkvuCksg== TWlhbWk= IHNjaGl0dGVy LXByb3Y= IG1pZcSH YWJ0 YW1pc2Vu TW9z IFB1cmNoYXNpbmc= ZW5naW5lZXJpbmc= CUludGVudA== INGB0LzQvtCz0YPRgg== X09U IHRlcmJhcnU= IEJY IGtpbmRlcnM= IERvdmVy QWU= IEtyw6Q= IHN0YXRpb25lZA== X1RIUkVBRFM= IFJhZGVvbg== IFBhc3Nl aWN0bw== 5LmL5aSW Y3Bm IOC0heC0rA== INC/0LvQvtGJ0LDQtNC4 4LSf4LWN4LSw INC90L7Ss9C40Y/QuA== INmI2KrZgg== 5rKD IGRpdmVyc2l0w6k= YW5ndWx5 IGRlc3RydWly IOWbvemZhQ== INWl1oDVr9aA1bjWgNWk IHdoaW0= IOG5o2Vl IM+Gzr/PgQ== IHpha2xqdcSN IM6xz4DOsQ== IE1ldHo= INC60L7Rj9GC0L4= IGdlaGFuZA== SUVFRQ== IHLDqnZlcw== IOCkpuClh+CkpOClgA== INio2K/Zhw== IOCmj+CmluCmvuCmqOCnhw== IHRyYWR1Yw== INqG2YbbjNmG KFNJRw== INm+2KfZhtuM LmRlZmVy IG5lZ29jaWFy Oycs cmVwb3M= IGV4dGVuc8Ojbw== RGM= LmRlbGV0ZWQ= VmVnZXQ= IHNlcm90b25pbg== 6YCa5L+h IGNhcHRpb25z IG1lZGlhdGVk IGp3w6h0 ZWdlbm9tZW4= IGJsb29taW5n IFZhag== IGzDpG4= IEN5cHJlc3M= IOy2nOyLnA== ZWRuZXNkYXlz IGFsaW1lbnRhaXJlcw== LWJ1eQ== INGD0LzQtQ== IG1vcmFsbHk= L2J5 IFZlcnN1Y2g= 2YLZitmC2YrYqQ== IG9mZmljaWVsbGU= IEJpZ2dlc3Q= 0rXQvtC40YI= IHJlbWlz INC80ZbQttC90LDRgNC+0LQ= IEF0aGVuYQ== LlNwYWNl IFNNRQ== 4LiK4Liy4Lii IGVzdHJ1Y3R1cmFz xLFtZA== INCy0LTRgNGD0LM= IGNhdGFseXRpYw== 0LDRgNCw0LvRi9Kb RW52aXJvbm1lbnRhbA== IGh5cG8= IHN0YW5qZQ== aW50eQ== UEFTU1dPUkQ= ZW5kbW9kdWxl IGhpbmt3YXZv IHByb250YQ== IGRpc3BsZQ== IG9kZ292b3I= IG1lbmlr IHB1YmxpY2l0w6k= 4Liq4LiH b3B0aW1hbA== 5oKg5oKg 56CU5Y+R IGhldGU= IERpY2tlbnM= INGH0LXQug== L3N0YXRl IOCquOCri+Cqtg== IOeOr+S6mg== IGxhbmRzY2FwZWQ= IFB1cmR1ZQ== cG9sbG8= 0YHRgtCy0YPRjtGC ID0+Jw== IG1hc28= IFNodQ== 15XXpNeV16o= IOCqluCqsA== IE11c2E= IHdhbmRlbGluZw== IOC4quC4s+C4q+C4o+C4seC4mg== IGJ1cnM= IGRpZ2l0YWlz UFJJTlRG IGdlc3RhbHRldA== IENvbXVuaXQ= aWFzaXM= c3RvcmVk INi02YjYsdin24w= IHByb2R1Y3RvcmVz INmE2YXYp9iw2Kc= IOCuteCunw== LXBvbA== IEp1bmdz IGNhaXJv IG91dGluZ3M= w7ZuZXQ= aWVuaXU= INW/1aHWgNW+1aE= IG1pc2RlbWU= YW55YW55YQ== 0YvQu9GL0Lo= dW5na2Fu IHBhc2Vv IFRob3JudG9u R0JQ 0LjQvdC40L3Qsw== 4oCZZGFu IENvbnZlbmllbmNl IOi1pA== IGphbWJv IG5hY2U= b3RpZXM= LWdyZXk= IGthaWw= INC/0L7RgdC70LXQtNGB0YLQstC40Y8= w6dhZG9z IG1hYW5uYQ== IHNhYXRl INm+2Kfaqdiz2KrYp9mG24w= IGNvbXByw6loZW5zaW9u IFdlJ2Q= IG91dHdlaWdo X3ZvdGU= IEJlYXZlcg== ICcnJw0K YWxsb2NhdG9y IG504bul WHA= aW5jaWRlbnQ= IO2DhA== INin2YTYutix2KjZitip IHR1eeG6v24= LmpkZXNrdG9w IEhpeg== d2FybmluZ3M= 4KS+4KSC4KSk4KS/ INeU15bXlQ== LkNvbXBvbmVudHM= YWt1bg== w6ZybA== IGNvbmdyZXM= IEJlbnNvbg== IGNpaGF6 IHBlZ2E= IGR1cGxpY2F0aW9u 4KeC4Ka5 aW5mZWN0aW9u IGJlZGFjaHQ= 2YrYtg== INC00LXRgtCw0LvQuA== a3Rh IFByaW5jaXBsZQ== INmF2LnZh9in IHRoYXI= IOCyuOCyvuCysg== LWFybQ== aXp6YXRh c292ZXI= QHlhaG9v YWxhaw== X01pbg== IHPDqWR1 bWl1bQ== IEJyZWl0 IE1vbXM= YXRhbG9hZGVy INC60L7QvdGG0LXQvw== INit2LDZgQ== TWFsbA== IE1RVFQ= 0LTQu9GP dmnFoWU= YWxpbWVudA== bGVkZQ== Q29ybmVycw== IOCkheCkqOClgeCksA== 4oCL4Z6U4Z624Z6T IGFudHJvcA== IHNvZsOh IFZhbGs= IGluZWZm IGNhaXU= QXTDqQ== INiu2YTYp9mE2YfYpw== 4LW84LSu IOCkuOCljeCkteClgOCkleCkvuCksA== IEducw== enNjaGU= LklOVEVSTkFM INmI2KfZhNmI2ro= IHN1YnN0cmF0ZXM= 1aHVotWh1ak= IEFuZGVz ICYs IHNww6ljaWFsZQ== IOCkpuClgeCksOCljeCkmA== INC/0YDQtdC/0LDRgNCw0YLQvtCy IHByZWI= IGRhZ2Vy ZW5lbQ== L2NvbG9ycw== LmludmFsaWRhdGU= IHN0aW1tdA== w61tZXRyb3M= bGlrbGU= 0L3QsNCx IFNlYW0= IHRyZW5jaA== ICguLi4pCg== IGNvbnZleA== 4LS/4LSk4LWN IHN6b2xn YnVmZmVycw== 0ZHQvdC90Y8= IGNvbmN1cg== L29jdA== INC80L7QttC70LjQsg== 0LDQu9GL0pPRiw== KGxocw== IFBhcmVjZQ== IHRyYW5xdWlsaWRhZA== 4LWN4LSv4LS+4LS4 cG9ycXVl Lik7Cg== L3NjaGVtYQ== dsOkbmQ= IEthcmU= PVwn IFN1Z2dlc3Rpb25z VW5n xZFy INec15HXmdeq b3dhbml1 IGRpYXJpYQ== IGFtaWNp IFNjcmlwdHVyZXM= CXRyYWNl YXN0cmljaHQ= KSEKCg== 4KWN4KSw4KWH4KSc IHF1aWx0aW5n LXNpbmdhdw== IFJFVFVSTlM= IHN0cnV0dHVyYQ== IGhhcm1lZA== IM6xz4DOv866 0YHQutGW0Lw= IHTDtXR0dQ== IC0tLS0tLS0= bW91cg== UkVNT1RF INGB0LrQvtGA0L4= IEJsYWNrYm9hcmQ= b2xmbw== IFRyYWlscw== LXNraWxsZWQ= d2V0dGVu aWxlcmluaQ== LtCa INC20YvQu9C00YvSow== Q0hG IHZpYWw= ZGlyZWNjaW9u 5peo dXJpa2E= IOCuruCusOCvgeCupOCvjeCupA== 15XXqNeZ15Q= IE1pZGRsZXRvbg== IG96bmE= 0LTQvtC+ IGdpc3Q= QWRhcHRlcnM= 4KSs4KWH IMWCYXQ= dsOpbnk= IOCkuOCkv+Cksg== YnJhY2h0 IFJlcQ== VmlsbGU= aW5kaXI= IOCkoeCkv+CkuA== fXsK IGFsbG9jYXRpb25z RU5BQkxF IGluZWVucw== IGNvcnJlY3RpdmU= cml0ZWw= IHN1bW1hcml6ZXM= IHJlYWxl IGJlw70= Ym91bmRhcnk= IGJldGFhbHQ= IEJlbGFzdA== YW5qdXRueWE= IOulvA== IHBvcGU= 0LXRgdGC0L7RgNCw0L0= eGRh IEdyaXM= IG1hbmZhYXQ= IEF4ZWw= IGx1b2dv IGFjb3N0dW1icg== IGtqw6ZyZQ== QkFO IGNvbWlzc8Ojbw== IMOcYmVyc2ljaHQ= IEVpbnN0ZWxsdW5nZW4= IHd5a29yenlzdA== YW50ZW5pbWllbnRv 1bjWgNW41bc= aWFpcmVz X1RSSUdHRVI= w7ZydW5nZW4= YWNldGVk IOS6mua0suiJsg== QXRp 4oCZw6l0dWRl YWhhbWk= 4LWA4LSx4LWN4LSx IGRvc3Rh X2ljb25z U2VhcmNoZXI= IFdPTQ== IGdlYXJpbmc= CXBhcnNl z4DPhM+Jz4POtw== IOCkquCkvuCkgeCkmg== cHJveA== IGNvbGxhYm9yYXRvcnM= IGdvbGE= b2JzZXJ2YWJsZQ== INeY15DWuNef IFVOSVRZ IGAo X25laWdoYm9ycw== IENzcw== IFfDpHJtZQ== dmlzbw== IHRlbGVmbw== IGJlc3o= 5Liq55m+5YiG54K5 IENvbnN0YW50aW4= IGFkZWxhbnQ= YWPDoW4= 1aHVvtWl1b8= IEdpbm4= cHJvY2Vzc2FibGU= IOCkleCljeCktQ== bXVuaWNpcA== IGxpY2s= 4LWH4LS34LWN b2NyYXQ= INC40YLQtdKv IGRvZ29k INGB0YPRgNCw IGlzdGVy IG1hbmNoYXM= 0L/RgNC+0Yc= IMO8eQ== INC60ZbRgA== PD4oIg== dW5zYQ== dW3EgQ== w6tydA== IGRpcmlnZW50ZQ== LWhp 2YrZhNmH IHJlZHJhdw== 0LvQsNC00LrQuA== b2lzZQ== dXJzdXM= IGJlbmVpZGVuc3dlcnQ= LmV4YW1wbGVz IGRvbcOtbmlv IOCkmuCkvuCkueCkpOCkvg== IGNpcmN1bWZlcmVuY2U= IEtvbmt1cnM= QVZBSUxBQkxF IGluZnJhc3Ry IHRydW1wZXQ= IHRlYXNl QXNzaWdubWVudHM= IOGDm+GDkOGDouGDqQ== ICcpKQo= IOCml+CmsuCnjeCmqg== IF9fX19fX18s IHZhY3Vu IExhbmRrcmVpcw== 0L7RgNCw0Lw= X3N1cHBvcnRlZA== IHB1YmxpY2Fkb3M= YmFyY29kZQ== IG5pbmd1bm8= IGfDvGx0 5aib bGV5ZW4= IOuwsOyasA== X0JJTg== IGbDoWE= IEdu IGRvbGE= IGdpbmFnYW1pdA== IFNjb3JwaW8= 0LvQtdC90L3QvtC5 aXBwb3E= U0VDUkVU IOODgQ== 4KSV4KWN4KSv4KS+ IHRlcnJlcw== LkltbXV0YWJsZQ== VUlDb2xsZWN0aW9u IHFpcw== IFhZWg== IHRvYXN0ZXI= 5Y+R5bGV55qE VG90YWxz XEZhY3Rvcmllcw== IOCkhuCkquCkqOClhw== 0LDRj9C9 Lmxvb2s= IGludmFkZQ== IGZ1bmN0b29scw== INmI2LHYp9ih IGN6xJnFm2Np IGRpc2NpcGxpbmFz IG5vcm1hbGVz IGluY2x1ZW0= IGludHU= LkNvbnRyYWN0cw== IEV1Z2Vu IGxpb20= 0JTQvg== 4KS24KSo4KSy IOCkrOCli+CkqOCkuA== 4K6/4K6k4K+N IEFtYWw= IG5vbnByb2ZpdHM= X01BSk9S IMOBbmdlbA== IOKAlAoK IGNvbXBldGVudGU= IHNvbWJyZQ== LkRvbmU= KHJlbmRlcmVy IHJhZ2luZw== LlRyYWNr ZWl0bw== X0RPQw== IGRpZmZlcmVudGlhdGVk IEZlcmRpbmFuZA== IEluc3Rh IENvdW5zZWxvcg== cGFhcg== IEdvZw== w6tyw6s= IEhpZXJiaWo= IOabsg== LXR3aXR0ZXI= bGR5 IOCkuOCkleCljeCksOCkv+Ckrw== SW5zZW5zaXRpdmU= INCw0LrQutGD0LzRg9C70Y8= IGvDq25udA== J30+Cg== IFNwYW5pZW4= KHNwcml0ZQ== IHbDrW5jdWxv aXN0ZW1hcw== 4oCZaWNp IM6zzq/Ovc61zrk= IG9mZmVudA== IHBsZWc= IG1hcmNhZG9y 157XkQ== aXRpZw== IGhhaXJ5 IG1lZ2Fw IC8KCg== IE1lZGljYXRpb24= IHBvdXQ= IGFjY29tb2Q= IGRhbmdlcmV1eA== IEplcmVtaWFo IGhhcm1vbmlj INi12K3YqQ== Lkdlb21ldHJ5 LXNpbXBsZQ== 6JCE IERhYg== LlRoZW1l IEdyb3Vwb24= L0ZpbGU= IHdlbGHDvWF0 bW5vcA== cmllcm9u IOCqheCqlQ== IGdvZWRlcmVu INC00LDQu9C4 IHRha3Q= X1BPTElDWQ== INmF2YXYqtin2LI= IOyduOqwhA== IGFjY3VzZQ== IM67zqw= IEbDpGhpZ2tlaXRlbg== IFRyaWFscw== IGV4Y2Vzc2l2ZWx5 IHBhcmNlaXJvcw== 4Kqo4Kq+4KqT IHNhdMSxbg== IGJlZGFua3Q= REZD X2NhbGVuZGFy aWxpZQ== PEZpZWxk R0VTVA== IHBhdWM= Lmxh 4Z+C4Z6T IFRhcnI= b2xvZ2lzY2g= IG1hbGFraW5n 4KuH4Kqu4KuN4Kqs4Kqw 16HXoteo IGthbmtlcg== q+GDmA== dXNlcQ== TWluZWNyYWZ0 4oCZaWs= 4YCx4YCc4YC4 IG5ldmFy 0LDRjtGJ0LjRhQ== 2KPYqtmK IOWPguaVsA== K2E= YXTDqA== dmVudG8= ICgpPT4= aW5ldGlj KGNzcw== 5Zyo57q/5LiN5Y2h IOCyr+Czi+CynA== 157XqdeZ15o= IGJhcmF0b3M= INGF0Y3QvNC20Y3RjQ== Oioq IOC0ieC0puC1jeC0rw== ZW50aW1lcw== ICUp INC+0YbQtdC90LrQuA== IGRlcmVn KCk7fQo= 6LSi56We INio2LHar9iy2KfYsQ== IFZhbmRlcmJpbHQ= IEVBU1Q= 4KSC4KSV4KS+ IHBhcnI= IOCyuOCyguCypuCysOCzjeCyreCypuCysuCzjeCysuCyvw== IERvbmVj IG5vc3RydQ== IHNob290ZXJz IOGDqeGDlOGDm+GDnuGDmOGDneGDnA== IGhhcXHEsW5kYQ== IOGDkOGDquGDruGDkOGDkw== SVJR IHNpZXZl IE15cw== IEV4ZW1wbGU= IGdlbHM= INGF0L7RgA== dnVsZA== IOCmueCmvuCmuOCmquCmvuCmpOCmvuCmsuCnhw== 66C0 INmD2KfZhA== IGludGVybnM= VHJhbnNpdA== INC30LDQvNC10YHRgg== IGzDqXQ= INC00LfQtdC90Yw= 0rXQsNC3 bm9vcGVuZXI= IHZlZ2dpZQ== zrzOrc69zrXPgg== dmFyZXI= ICk7Cgov IGZyw6hyZXM= KHByaW9yaXR5 IGRpc3BlcnNlZA== QXVkaQ== IGplbGVu IGZvcnR1bmVz IFNPTEQ= Y2tlZGl0b3I= RWln 77iO IG1pZHM= INC+0LrQvtC9 IEFzc2lnbmVk INiz2KjZgg== INin2YTYsdim2YrYs9mK X1FVT1RFUw== IGNhcmdhcw== INee15zXlw== IHZpYXM= INGC0LDRgw== IGFtaXN0YWQ= IEF2cnVwYQ== 0LDQu9Cw0Lo= b3BsZXZlbA== 4KaP4Ka4 IHRvZXBhc3M= IOGDoeGDouGDkOGDog== KEJ1ZmZlcg== IEVzcGVyYW50bw== IENPTVBVVA== KE5ldHdvcms= RkFD IOCumuCuruCvjeCuqg== 0LvQuNC7 INK30L7QvdC40LHQuA== IOC0sOC0vuC0pOC1jeC0sA== 4KuB4Kqq 5YWa5ZGY IFLDunNzaWE= IGd4 dXNpYWk= YXplbA== IHNsaW5n 6LWg KG1vbg== IGJyb2NodXJlcw== 4Kac4Ka/ 4LS+4LSo4LWN4LSk IGZpbmFpcw== 15HXqNeZ IOmq IE5hdXQ= INC/0L7RgtGA0LXQsdGD0LXRgtGB0Y8= ZW1vdGlvbg== PiIu bGljYW4= 5Lim IG9zZw== IEFjY291bnRhbnQ= INC/0YDQuNC70L7QttC10L3QuNGP IHN0b2o= bHl0 KGltcG9ydA== INCy0LDRgNC40LDQvdGC0L7Qsg== LW1ldGFs IELDvHnDvGs= YXB1bHQ= IHJpc3VsdGF0aQ== X2xvZ2l0cw== IOCyleCys+CzhuCypg== IOCmleCnsOCmvuCnsA== Pj4m Lz0= aXp6aQ== IEhlbnJpaw== w6JtZQ== b3BoYQ== IHN0YXR1 INi62LLYqQ== 2KfYsdmC IHRpbGZlbGQ= 6K+x cmFv IOyXreyLnA== IFNhbXM= IHByb2Zlc3Npb25uZWxsZXM= 4oCZw6lkdWNhdGlvbg== INGB0LrQsNC30LDQu9Cw X3Byb2Nlc3Npbmc= IildCgovLw== INC60LvRlg== IM+Ez4HPjM+Azr8= INiz2KTYp9mE RGFuZ2Vy aWtsaQ== INC90LDRgdGC0L7Qu9GM0LrQvg== YWZpcg== IFByb2Zlc2lvbmFs KGxldHRlcg== 15jXqQ== Zm9saWU= 2YbYp9i5 ZGF0YWJsZQ== IEFwcGVuZGl4 CURFQ0xBUkU= IOCkieCknA== bGVlcg== IE1lY2hhbmljcw== IFJlcHVibGlrZQ== IHN0aW11bGF0ZXM= dm9sZW4= X3ZpcnR1YWw= INGN0YLQsNC/0LU= IENoZXo= IGppxKE= ZWRhdGE= 4LS+4LSZ4LWN4LSZ IHByZXJlY29yZGVk IEdvYmVybg== IGxsZXZhcsOh IExhdXJl INin2YTZhdmI2LHYrw== INix2YfZig== IHZyaWpibGlq X3NlZ21lbnRz IGNyZWRpdG8= X0FMVA== VGVjbg== INm+2YjYsduM RElTQ0xBSU1FUg== INCz0LjQvA== IOCkquCljeCksOCko+CkvuCksuClgA== IOCwnOCwsOCxgeCwlw== ICch 5b6z 4LC/4LCu4LC+4LCo IHJhdWc= IFBTQw== IHNjaGl6b3BocmVuaWE= IGdlc2NoYWZmdA== IHVuZXhwbA== cHJvZHV0bw== IHByYXZpZA== KFBvc2l0aW9u IHJlYWxtcw== IHB1bGdhZGFz IG1lc3R1 IO2RnO2YhA== IGN1cGNha2U= X2ZlZWRiYWNr IG5zbw== IGluYWFu 4Lix4LiH4LiE 4LS/4LSa4LWN4LSa4LS/4LSf4LWN4LSf4LWB4LSj4LWN4LSf4LWN INCy0LrQu9Cw0LQ= 4LSw4LWL X2Jw IE9SRA== IEVucm9sbG1lbnQ= 6YKj5Lqb IGF2w6hr 4Ka+4Kew4KeA KGdyYW1tYXI= IEJhaG5ob2Y= 4YOQ4YOa4YOY4YOQ IFNob3VsZGVy 05nQu9OZ IMO2bmTDvHI= IEVGVA== IGZha2F0 X0JH IOCmieCmpuCnjeCmp+CmvuCmsA== w7xua2k= IHdlc2VudGxpY2g= IHByb3NlYw== INuM2YjZhg== IHNlbmVyZQ== IEZhdXN0 PWRm IHBvbGFyaXphdGlvbg== IHNsYWQ= IE1hZ2RhbA== 7ZeM IG55a3k= IGNvbmdyYXR1bGF0ZQ== IHN1cHByaW0= IOaAgA== INCa0LDRgNCw IGNhbWFz eXNl Zml0bmVzcw== IHN1YmNvbnRyYWN0 IENDUw== IGluY2xpbg== YWhheWFn IOCkteCkv+CkuOCljeCkpOCkvuCksA== IGFlcm9wb3J0bw== IFdpZW5lcg== IENvbmZlZGVyYXRl IENhbWlu IGF2ZXRl 6L6e dnJhYWc= 56ug6IqC IGluY3JveWFibGU= RkZU IGJsYXpl 4LS/4LSw4LWN 6rK97KCc 2LDYp9ix XGY= IOiRoQ== IEFxdWVzdA== IHRyYW5zbHVjZW50 IHLDqWZvcm1l SW5mbHU= 4Ka+4Kew4Ka/ fH0K IERpc3NlcnRhdGlvbg== IOCqqOCqgg== X3JlcG9ydGluZw== YWNpZW50ZQ== IOCuleCupA== 2KTZitip INee15nXk9ei INiq2LTZg9mK2YQ= R3Jhc3M= KGZpbHRlcmVk IOKImg== IOCkpuCkv+Ckj+CkleCliw== 4KmI4Kio dWt0dXJlbg== IEdpYnJhbHRhcg== IGdhdGhlcnM= IHRvbmlj b3VmbGFnZQ== INC/0YDQtdC/0LDRgNCw0YLQsA== INC80L7RgtC+0YA= IG1hcnJ5aW5n IM+Az4HOv8+Kz4zOvQ== 55yf5a6e5ZCX 2KjYp9it2YrYqQ== IFRlbmc= IEluc3RpdHV0aW9ucw== IHBhdHRlcm5lZA== IGx1Y2tpbHk= LmZvcmVhY2g= INin2YTYo9is2YfYstip IHRpbWV2YWw= INCx0L7Qu9C80LDQuQ== b2NrZWQ= IHN1ZmZpY2U= Y2hhbGw= IGF1c3NlaGVu 4LmA4LiV4Lii 5oql5ZCN INWE1aXVttaE INC30LDQvdC40LzQsNC10YI= IFNhbmE= IOCkleCkteCkv+CkpOCkvg== X01Q 2KfYsdio2Kk= cnVieQ== YW5tb2lucw== IOCkpuCksOCljeCkpg== IOyngOyglQ== dm9yZXM= IOCyueCyow== IFNoYWRl INC90LXRgdC80L7RgtGA0Y8= JzoKCg== IHNuZWV1dw== IOC0pOC0nw== Z2VodA== IHNlbWJsYQ== IHBvdGFibGU= UE9TSVRJT04= INGF0L7Qu9C+0LTQuNC70Yw= IOCyhuCysOCzi+Cyl+CzjeCyrw== INGP0LLQu9GP IHNlbWVsaGFudGU= dXNlYmVuemlzYQ== IHZhcm4= INin2YTZgtiv2LM= IEFsZm9uc28= 4LK/4LKh4LON aWthYQ== IGJpamRyYWdlbg== IOGDquGDneGDouGDkA== 15nXmdeh15g= INWl1oDVpdaE IEpvZ29z YWJzYW4= e05hbWU= aXlhc2k= IHThuqNp IHZheQ== 5p2h5L6L IE11c8OpZQ== ZXRoYQ== IM60zrnOrM+Bzro= INin2YTYp9mC2KrYtdin2K/Zig== Q0JT dGVycm9y INGH0LXQu9C+0LLQtdC60YM= IGdjYw== CUlu IHRyaWM= IGNvbW1hbmRpbmc= 4Kac4Ka+4Kak IFNoYXJrcw== IGjDtQ== 4LOA4LKo 44OG44Or IGhhbmRiYWdz 0ZbQvdCw PVg= IGVoaw== INC20LDSo9GL IGthbXVw IOC0huC0leC1jeC0sOC0rg== TWw= INmI2o/Zig== LWJlbg== INGO0ps= IHN0dcOw IOGDm+GDneGDl+GDruGDneGDlQ== 0YrQsA== YXRkYW4= 4KS+4KS44KS+ ZGlzdHJpYnV0ZWQ= PU4= IGludGVuZGluZw== PWlu CWNudA== IOyCrO2VrQ== INGC0LDQu9Cw0L3Rgg== 55uR5ZCs6aG16Z2i IEZhcm8= 4KSy4KWH4KSy4KWN4KSv4KS+ YXVjaGU= IG5pZmVy IGxpdHTDqXJhdHVyZQ== aWVjaA== aWVoZW4= T2JqZXRv IOGDnuGDneGDlg== IGlzaXA= 4YCA4YCs4YC4 5omw IOCkuOCkguCkleClh+CkpA== IOCwpOCwvuCwnOCwvuCwl+Cwvg== IHF1aXrDoQ== 5b2p56WoYXBw IGNvbnZleWluZw== QnJhaW5z IGzDtnl0eXk= IG9yaw== IHVuZGVyY292ZXI= eGVj Pg0KDQoNCg== 0YjRgtGL ZnJv YXRpaW4= IGtldw== INC/0YDQvtGJ0LU= IGNvbnNlaWxsZQ== VmVydHM= d2VydQ== L21hdGg= IOC0qOC0tQ== IGFwbGljYcOnw7Vlcw== LXJlc3Q= emlyYQ== IG5hcGk= IENvbG9ueQ== IOGDmeGDneGDm+GDnuGDkOGDnOGDmA== INiw2LHbjNi525I= IOCysOCzguCyqg== 4LiW4Li44LiZ IHRhbnRp IHVucml2YWw= 4KS+4KS14KSy IGphbXM= IEd1dHNjaGVpbg== IFVJU3Rvcnlib2FyZA== IGJpcGFydGlzYW4= IGNyaXNp IGZhbnRhc3Rpc2No IGFjY29tcGFnbsOp YW1ldA== ZnJlaWU= IHN0ZWo= 4LiB4Liy4Lij4LiT4LmM 5py65a6Y572R w7NsYQ== IGZlam4= 5piv55yf55qE5YGH55qE IOCqnOCrh+CqqOCrhw== IFZlcmw= dWNvc2U= IENhdGh5 IGRlbmllcw== IGFzaWw= IHZ5Yg== cmFpc2Vycw== YWN0bw== 2b7Zhg== dXRpdmU= J3Vz IHRoZW1hdGlj INC40L3RgdC/ OmNyZWF0ZQ== IGdlbHVuZ2Vu IOCuhuCuo+CvjeCun+CvgQ== L3BhcnNlcg== IG1pbmltYWxl cmVsYXRpb25z INC+0L3QtA== 4LS/4LSk4LWN4LS4 0YbQuNC6 X0VkaXQ= 0YfRi9C90Ys= IOCmpuCnjeCmrOCmv+CmpA== YXRpbmU= IOeUn+WRveWRqOacn+WHveaVsA== IGF1c2U= YWdyYWQ= INGB0LjRj9GB0LjQuQ== PG5hdg== IHByYXRpY2E= INil2YQ= 4KqV4KuN4Kqf IHd5Zw== UHJpbmNl 1avVttWj LXZvcw== INiy2K4= INC90LXQutCw0LvRjA== IHBhc3RvcnM= J10pewo= IOyCrOyaqe2VoA== 4Kay4Ka+4Kau IGFjb21wYcOxYWRv IGFzc3Vyw6k= IGF0dWFsaXphw6fDo28= IGJsYXV3ZQ== IHV0ZXJ1cw== 5LiN5aW9 KE1lbWJlcg== 6JCl5Lia bW9ydA== YW5kdW5n xJ9yYWY= 4oCZYWE= ZXJtYWlu IGh1bWVkYWQ= IFNBVEE= IGRheWNhcmU= IHdhYXJoZWlk 5qGC LmZpeA== LiIr IG1hcmdlbg== 5aeQ5aa5 V2lraXBlZGlh IC8vIg== RGFuaA== IHdpdw== IGVuZG90 4Kac4Ka+ K10= IHR3aXRjaA== IHRoYWlt IOCypOCzhuCysA== zrnPjs69 INin2YTYudmE2YrYpw== IGZpbmRlcw== IHN1cHBsZW1lbnRhdGlvbg== 0YbQuNCw0YLTmQ== IG1vbMOp 0LjQsdC4 IOiAgeiZjuacug== CWFz 0LLQtdGA0YU= IOG7pXdh IFV6YmVr 6KO46auU IGhvbW9n IFJlbGln 4KS+4KSq4KS+ INGF0YPRiA== 4LKV4LK/ IGZpcnN0bHk= b3JtZQ== 5q+V5Lia IGVudm9sdmU= cmF0aW5ncw== IExvY2tlcg== Y29udGluZW50YWw= SUlJSQ== IGRyZWp0 dXJ1bg== IGVzdGls IOCkl+CksOCljeCkmw== IFNwb25zb3JlZA== IEVX b3RlbGU= IFN0cmVja2U= CVJlc291cmNl 77yJ44CCCg== LdW41oLVtA== CWJlZm9yZQ== INiz2KfYr9mH IHBhcsOi aW1kZQ== IGRpcGxvbWF0 Il06 IGzDpW4= 0YPQu9C1 IFN0cmFw IFJldm9sdXRpb25hcnk= INC60L7RgtC+0YDRi9C80Lg= IGhhYmxhbW9z ZWxkaQ== LmFydGlzdA== IG1pbGxldA== IG5pZ2h0dGltZQ== LmN3ZA== IHBhcmxhbWVudGFy IOGDoeGDkOGDmOGDnOGDouGDlOGDoOGDlOGDoeGDnQ== Lmdh 4YOn4YOV4YOU4YOa dWthcg== INGN0rM= IHNsaXBwZXJz IHJvendpxIV6 YXBoeWw= IGNoZWF0ZWQ= IHJhdmlt INin2YTYpdiz2YTYp9mF2Yo= Y2xpZmZl TVVMVA== INC80LXQvNC70LXQutC10YI= IHBheXNhZ2U= aXNtaQ== TU1kZA== 5aSW5oyC aXNpZXJ0ZW4= IHRhbmtlcg== LnJlZnM= 0YHRgtGA0L7Qsg== LmhlYWRpbmc= 4Kif4KmA J2lkZW50 IOuKpQ== IOCwrOCwrw== IHBvdcW+w60= ZGVzY3JpY2Fv INCd0LDQtw== IGxlY3RvcmVz dXBpbA== IOCyuOCyvuCyp+CzjeCyrw== IG5vYmxlcw== INin2YTZhNmC2KfYoQ== 1avVrNW0 24HYrw== 4YOV4YOU4YOX b3J0dW4= cGFudA== IGdyw7xuZA== dWRkZXI= bGRvbg== IOCuqOCuv+CusuCviOCur+Cuv+CusuCvjQ== IGJldXJz IOC0heC0suC1jeC0sg== IGNvbnZlcnNhY2nDs24= KCk7CgoKCg== INGD0LHRgNC4 IOy0iOq4sA== 57G75Ly8 Um9vdHM= IGF0cmlidXRvcw== INC/0YDQsNGG0Ys= IGluZGl2aWR1b3M= IGFybW91cg== IEJsYWNrcw== aXJpdGhl IEFjaG8= 4oCk4oCk Y2tp wq1tZW50 4YOu4YOU4YOT4YOg4YOd INC/0L7Qu9C90YvQuQ== SU1FTlRP 0LDRgNGC0LA= IG11c2ljYWxlcw== Q0VSVA== IHBhcmV5 SUNBZw== INCx0ZbQuw== IOOCteOCpOOCug== 2KfZhtuB2Yjaug== IGNvbnNlam8= IGVmZmVjdGVu 6YyE Y2hpbXA= IENQUFVOSVQ= INiv2YjYsdmK INiq2KfYqA== IG9mZmljaWE= IHBpbG90ZQ== IFTDpHRpZ2tlaXQ= 6L+B KHBsYW4= IG1pdGg= 4oCZYW5ubw== IEFDUw== 4LC+4LCX4LGH IGV0aXF1ZXR0ZQ== IGNvZXI= b2ZzdHJlYW0= b2t3YQ== X2NhbXBhaWdu TXVjaGFz INin2YTYq9in2YTYq9ip 4LS+4LW84LSk4LWN4LSl aXB0YQ== YWRvw7k= IEVtcHJlcw== INGA0LXQsdGR0L0= IGRhaHVsdQ== 4Ka+4Kaf4Ka+ IG9sbWF5 b21pdA== IHB1ZW50ZQ== cG1u Y29uY2VydA== 5bKX5L2N LGVu IGJlbGFrYW5n IGRldGVjdGl2ZXM= IGNow6lpbGU= IOGDmeGDneGDmg== acOp IGJhbnF1ZXM= TWVudGlvbg== IEdlaA== ZXZlbnRv INiq2YXZg9mG IHVsdHJhdmlvbGV0 15XXm9eZ150= IHNwcmF5ZWQ= IElOVkVTVA== IG9sa2V0YQ== IOuztO2YuA== IGNhYmluZXRyeQ== IMO6cGw= IOCwsOCxhuCwguCwoQ== IGFiYWw= IGFudGFh XC0= IFNUQVRFUw== cGFydGVtZW50 LWdvb2dsZQ== bWo= IGJlcmRhc2Fya2Fu V09PRA== 0r3QsA== IGFudGlxdWVz 4KSc4KS/4KSV X0FTQw== IGZpc2NhbGVz IO2UvO2VtA== IFRldmVucw== IEJvbnVzZXM= IG1hcnLDqw== INin24zYtA== 4YOd4YOV4YOQ YW7EsQ== IOGDkuGDlOGDoOGDmw== IHNrbGVw 1aXVsA== IFByaXNt RmluaXRl c2VtYmxhbmNl z4DOv86vzrfPg863 IGFkam9pbmluZw== IOCmsuCml+CmpOCnhw== IOC0r+C1gQ== IHN0cmVuZ3RoZW5z YmVuY2htYXJr 5ZWG5Yqh IHJlbmRlbA== INeh16TXpw== IHZvZWdlbg== IGZpbGxlcnM= LXByb3BlcnR5 xJl0 IOCkpOClgeCksA== IHNvc2Fp L25hdGl2ZQ== IEJvbmRz IFpY 0YvSow== dG91 IGJlaGFuZGVsZW4= Ol57Cg== INGG0LjRhNGA0L7Qsg== IGNhc2hpZXI= IEluY2x1c28= INGB0L7QstGA0LXQvNC10L3QvdGL0YU= IGludGVyc2VjdGlvbnM= IFRTQQ== IHZpbW9z IG9sdmlkYXI= Q29udHJhdG8= IHVuYXA= 4LCh4LGB 4LK/4LK44LKy4LK+4LKX IOCqsOCqmg== IGJvc2hxYQ== X2ZpbmlzaGVk IFRSQUNL INCf0L7RgdC70LXQtA== IHJhY2Vy IHt9XA== 7IWA IGFjY3VzaW5n bXBy IHV6bWFu INCX0LDQvA== IM68z4DOv8+Bzr/Pjc69 IFZpbmQ= ZGnDp8Ojbw== IFR3ZWVu KEpTT05PYmplY3Q= INGA0L7QtNC40YLQtdC70Lg= INGD0LLQsA== X21vZGlmeQ== SGlnaGx5 IFJ1c2xhbmQ= IHRyb3V4ZQ== IGJoYWludA== b3BwYWJsZQ== X3Nsb3Rz IGLhurly4bq5 INGA0L7QtNGB0YLQstC10L0= IOaDheiJsg== IGJlcsOkdHQ= IG3DoXNjYXJh 6Zax6K6A IOCkruCkiA== LnJlY29yZHM= 4bqpeQ== Q2FydG5leQ== UGhhbQ== ZXJ2b29y INaD1bjVsg== IGbDtmxq Q0VQ IGRhdmE= ZGVxdWU= IEFTTQ== IG1pbnN0ZW5z Z3JlYXRlcg== IGRhbsSxxZ8= IE1PTQ== IFJFQUxUT1JT IOWfug== IHPDvG4= bWF0aWNz IFNldGVsYWg= IOCuh+CuqQ== IG1vbmRheQ== LXByb2Nlc3Npbmc= IENodW4= 2KfYsdmK2LE= IOexu+Weiw== IHJlYWNoYWJsZQ== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v INiq2YfbjNmH IGNvbXBvc2nDp8Ojbw== IHJvc3M= IHNhbm5hbg== T0tF 4KSn4KSw Y25pY2E= LnVzZXJpZA== IGNsYXNw RXNjb2w= INem15XXldeZ16nXnw== c3RhY2xlcw== IGR1cm11xZ8= IOKGkw== J11dWyc= cmVzcHVlc3Rh IGRlbWVhbg== INmH2oU= IHVudGVyc2No cmV6eg== 4LSV4LSo4LWN INC60q/QuQ== IHNwZXRz 0YvRgNGD xLFj b29vb29vb28= ICovCgoKLw== OnRpdGxl IOCyrOCys+Cyvw== U3BhY2Vy KW4= LWZyZXF1ZW5jeQ== IGFtbA== cGllcw== YXR1bg== IGNvbnNpZ3U= X2hy INC/0LXRiNC90Lg= INGC0L7Smw== IGVzdGFyaWE= LCks LkNvbmRpdGlvbg== c2Nzcw== IGF1c3c= IE5hbW1pbmVycw== IEhpbmc= IEtuaWNrcw== IGJlc2NoaWtrZW4= 0L7Qu9C0 IOC0uOC1jeC0peC0vuC0qA== IGdhaQ== aW50ZXJlc3Rpbmc= 5oKq 0LjRhtC40Lk= IENvdW50aWVz 2LnYp9mE 0JzQuNC9 X3dhbGs= fHsK IGFmZ2VzbG90ZW4= LnVt IHBlcnNvbmFsaWRhZGU= 2LHZitit2KfYqg== IHByZWRlY2Vzc29ycw== INC30LTQsNC90LjRjw== IGplZGlu IGfDtm5kZXI= IENhbGVuZA== ZXJzdXQ= INin2YTZhdit2YTZig== IGxpZ2Fy IGRlxJ9pbGRpcg== IEFtZWxpYQ== INuM2KfZgdiq IGVzcXVlY2Vy IGluaXRpYXRpbmc= Q8OzZGlnbw== U2Nyb2xsZXI= cG9zc2libHk= IHNhdXZlcg== IGludGVudGE= INC00L7Qt9Cy0L7Quw== 16TXldeo15g= INin2LPZvQ== IGJhbmRhcg== IOuzgO2ZlA== IGluZHVzdHJpYWxlcw== IOCqheCqruCrh+CqsA== 6KeJ5b6X IGR1cmNoc2Nobml0dA== Rm9jdXNhYmxl IFRvcnk= 2KfYt9ip IFBhxYQ= dGo= ZW50ZXJwcmlzZQ== IEJydXQ= 44OK44O8 dmVyYW5zdA== IHBsYWlk IOCuruCvgeCun+Cuv+Curw== IOGDlOGDpOGDlOGDpeGDog== INC30LDQutC+0L3Rhw== KHNwYW4= INi52YTZhduM IG91dGFnZQ== LkN1cnNvcnM= KHByb2M= 4Ki+4KiX 4LK/4LKX4LOC IG1lbmdl IEtoaQ== IGJyaW5kYQ== LXJ1bnRpbWU= INCy0YvQv9C+0LvQvdGP0YLRjA== INWA1aHWgA== INC/0LvQvtGJ0LDQtNGM INCz0LDQvQ== IHVwb3JhYm8= IGZhc3Nl CVNlbmQ= 4KSX4KSk X1BVU0g= X2Jib3g= emFkYQ== cmVtaXVt IHZlcmFuZGVyZA== IGFycsOqdMOp IGNvbmdsb21lcg== 0LjRiNCw IG5lcGll IFVOSVRFRA== LnByb20= IGVoZA== IHNjYXQ= dmnDsA== IHJlY29taWVuZG8= IHhpcg== INW+1bM= IGFmc2NoZQ== IGRvdHljeg== L3llYXI= w7xyaw== INC80LjQu9C706M= IGJsZW0= IMOnw7I= UHJvY2VlZA== 44O844OB IHZhbGV0 YmxvY2tpbmc= c25k IGRlcHJlcw== IG9rYQ== X0FkbWlu X3dpbmRvd3M= IGdyw6A= IFJVQg== 15XXodeo IOC0juC0o+C1jeC0ow== IG9wdGltaXNl INGC05nRgNC40L/QuNC00LjQvQ== IOCkhuCkquCksuCljeCkr+Ckvg== 5Y2X5Y6/ IENhbGN1bGF0ZXM= INiq2YLZhA== xaFlbmpl IHJlY3J1aXRlcnM= 5YW86IGM IFRlbmhv IEVjb25vbcOtYQ== IGVzdGFiaWxpZGFk U3RhdGlvbnM= JHJldA== IHZlxL5taQ== INC/0YDQuNCy0LvQtdC60LDRgtC10LvRjA== J11dXQo= b2hh aG9zdGluZw== IG1laW50 INC+0YDQuNC10L3Rgg== IE9ic2VydmF0aW9u IGFpdmFu b2dlbmVpdHk= aXJhYW4= b3BpZXM= IOudvOydtA== INiq2K7Yqg== IE1leg== IHRldmVlbA== IM61zrTPjg== IFJheXM= LnRodW1ibmFpbA== IG1hxZ8= IGFjY29tcGxpc2hpbmc= INCx0LXRgNC4 IENyaW1zb24= IHppZA== IG1hcmNoYW5k INCy0LvQsNGB0YI= dW1ub3M= IHR1bm5p IOS6mua0suaIkA== 2LfYtw== LWh1bWFu X1VOU0lHTkVE IG5pYmg= IEJhcmE= INGD0YfQtdGC J2Vudg== bHTDpA== CWdiYw== dmFyeQ== cGFra2V0 4YOV4YOQ4YOg IOmtlA== aWRvbw== IFdpdHQ= IEJBQw== IExlZ2l0 INCy0YvRgNCw0Yk= IOWkp+WPkeW/q+S4ieWumOe9kQ== IEZlYnJ1 U2Vydmljbw== IGxldGFu IOWxseS4nA== IGRpc2d1aXM= IGJyaXRhZ2Vt IG55bg== IG1hc3Rlcidz IFByb24= INix2YjZvtuS IFZhcmlhbnRlbg== IOWQjeeEoeOBl+OBrg== X1BST1BFUlRJRVM= PDw8PDw8PA== IGPDtHRl 4oCM2K/Zh9iv 0LDQtNC40Lk= IEFscGVu 5omL5py65Y+3 IHBlc3Rh IGtyaW1pbmFs WVg= 44Kt44O8 KFN1Yg== IG5hbWVzcGFjZXM= INqp2YbZhQ== IExpdGh1YW5pYQ== YXdlbmk= 2KfZh9uM IE11bmljw61waW8= emY= IEdyb3VuZHM= TGVnZW5kYQ== X2JhdGNoZXM= J9eh QWNlcHQ= IEZsYW1lbmdv X2J1ZmZlcnM= INuL2KfZgg== IGJ1bmdh IERpc3M= 06/RgdGC Z2d5 ZnJlaWVu IOCyjuCysuCzjeCysuCyvg== IGFnZ3JhdmF0ZWQ= IOmbhQ== 2LLZitin2LHYqQ== INC90LDQstGD0Yc= 4YOY4YOZ4YOd4YOh IOC0juC0qOC1jQ== XEh0bWw= IFZPQQ== YXB0b3Jz IOWIneWni+WMlg== IG1lc3RyZQ== aGF3a3M= IGRvdWE= UmVsYXRpb25zaGlwcw== YWxi IOCuleCun+CuqOCvjeCupA== L2ludA== 4KSV4KWN4KS44KWA cmFpc2Vk IHNlbGZpZXM= 0LvQsNC90LTRiw== IGplZGVuZmFsbHM= LmFjcXVpcmU= IGtjYWw= 4Kak4Ka/4Kao4Ka/ INC90LDRgdC60L7Qu9GM0LrQvg== IG1lbGxpdHVz 4LKw4LKj4LOG INWv1oDVrw== IGdpbW5hcw== IHNlYmVsaXNh Y29tcGFnbmVtZW50 IFNpZGQ= IEhhY2tlcg== IOCqleCrh+CqqOCrjeCqpuCrjeCqsA== INCh0YDQsdC4 IOCksOCkueCkpOClgA== bGVtbQ== IG90dGFh IHNldHRlbWJyZQ== IGx1bmk= anNvbndlYnRva2Vu IOCmhuCmnOCmvw== IGdlcsOnZWtsZcWfdA== INC70Y7QsdGL0YU= IGVucg== IGFhc3RhdA== IEZhY3VsdGFk INei15XXnNed IFRodXI= YW5vbmljYWw= KHN5bQ== INC00L3QtdCy 0LHQsNGH IG9wZ2VyaWNodA== dHLDqQ== IOqwnOyEoA== INGB0L7RhtC40LDQuw== IEJhYmllcw== IGRhw7E= IGZsaW0= aWx0w6Q= LnN1YnRyYWN0 YWRpZW5z IGRvbG/EjQ== IHThu5E= IFpla2Vy IFRhw7A= Q3Vi aWZpZXo= J2Fkb3Jl IOC2oA== 5a6a6IOG IEV2cm9w 0YDQsNC4 IGNvc3R1bQ== IGdsaWRl zrbOtw== IGNow6lhZA== IGN1YmllcnRh aW5zdHJ1Y3Rpb25z aW5hYW4= IENvbG9nbmU= CW1k IFphdG8= Y2lwaGVy IOCwquCxjeCwsg== IGVuY2FyZ2Fkbw== 6LSf6LSj5Lq6 IFZhYWs= 0L/RgNC40LzQtdGA IOCkieCkueCkvuCkgQ== aW1hc29x IG1hdGs= IFNpZG5leQ== IG11cmE= YXZlbnQ= LnNk IER5bmFtbw== IGxldnk= IGF1Yg== IGl6dmVk IGNvbnN0aXR1dGVk IGRlbW9zdHJhZG8= IOGDmeGDneGDm+GDnuGDkOGDnOGDmOGDkA== IGNvbXBvcnRl ZXJkZXJpag== b3J0dQ== IMOEbmRlcnVuZ2Vu IGlsbHVtaW5hdGU= b21pbmlv cmVnZXhw IOColeCpgQ== INeR157Xkw== IGNvbnRyYXRhw6fDo28= LnNraW4= 5aSp5aCC572R 2KzZitix INC30LDQutCw0LfQsA== IGRlemVu IHBvcHVsZXI= INio2LfZiNmE2Kk= IOCkleCkguCkquCkqA== IGhlbWlzcGhlcmU= IOyImQ== IGFudsOkbmRlcg== LXBsYXlpbmc= 5paH5a2m IFRvdG8= IOeyvuWTgeWbveS6pw== IOWQiOS5kA== LiIv INGA0LDRgdGB0YfQuNGC0Ys= Y3p5bg== 4oCcTQ== KCJfXw== IGZyb250ZXI= IFBob3Rvbg== IGJ1enppbmc= IHJvdWdlcw== IO2SgA== IFBheA== LkF0b21pYw== IGludGVyaW9yZXM= IERhbHRvbg== ISwK INmG2LTYp9i3 INee15DXqA== IEdhdGhlcmluZw== INin2YTZhdi12K/YsQ== IGlkYXI= IGtldXplcw== VHJhbnNwb3J0YXRpb24= INiz2YXYqg== 5Y+v5Lul5Lmw 0LXQutGC0ZY= anNraQ== LlJlZGlz INCz0LjRgNC40YTRgg== dWl0aXZl INqp2Ko= IEV4Y2VwdGlvbnM= IE9kZQ== w61xdQ== ZsO4cmU= IOCkuOCljeCksuClieCknw== IGvDtnBh U1RSVUNUT1I= IFB1bmt0ZW4= IFBsYXlncm91bmQ= IGNvcm5lcnN0b25l Ymxhc3Q= INC30L3QsNGO0YI= IERpc2Nvbm5lY3Q= dXRlZW4= INin2YTZhdmE2KfYqA== IFZlcm9uaWNh LXdyaXRl INep15HXog== IGFmZXI= IGRpdmlkZXM= Qm9yZGVycw== IGNhbm5hYmlub2lkcw== IGRhdGFzb3VyY2U= ZWR1Y2F0ZWQ= IERTTFI= 0LTSr9Kv IOCuruCusQ== KG9y aGVkcm9u 5bCO6Iiq Y29icmE= KHBsb3Q= IHZyaWplZA== d2FuamE= 4YGN IENlcnRpZmljYXRlcw== IGFqYXQ= X2tleWJvYXJk YXJjaGVz IEJyb3RoZXJob29k IGNvbnRyYXN0cw== Kykv 4Kis4Kiw IHBvbGl0aXNjaGU= IGhhcnI= IHRvcnR1cmVk INin2KzYp9iy2Ko= IHdhbG1hcnQ= 4LiK4LmI4Lin4LiH Lndpaw== 15XXk9ep15nXnQ== INix2YHYqtin2LE= IGRldGVybWluYWRhcw== IGJlbmVmaWNpYXRpb24= IGJjbQ== IGtvcmk= IHRhbmRh IFJlaGFi zr3OrA== Y3Jj IHNhbmFy 66C1 IHPDqXJpbw== IFRSWQ== IG1hbmlwdWxhdGluZw== z4PPhM63zrrOtQ== Q0FD cMOp dWVsZW4= IGJsaXR6 UG9kY2FzdA== YXBwaQ== INGD0YfQsNGB0YLQvtC6 RGlzY3Vzcw== IEZhbGxvdXQ= zrzPjs69 IG5hYsOtZA== 5oSP5LmJ IEZpbmFsbWVudGU= IEFjdXJh IFdhY2hzdHVt ZXNjZW5jZQ== IG5pc3Nv IGpvdGE= IOiFvg== ZmV0 S29tZW50 INiu2b7ZhNmH IGdvbmE= IGluY29ycG9yYXI= IHdlcmVsZHdpamQ= IGVuY29udHJhcsOh IGV4YWdnZXJhdGVk 7YWN INin2YTZhdmF2YPZhg== IGJsYXN0aW5n IGJhbmU= 4LmA4Lig4LiX IFNhbHZhdGlvbg== X2xpbQ== IG5qaGFuaQ== Z2VzaQ== IHNwYXJrcw== IGZvcm11bGF0aW9ucw== LnNwaW5uZXI= IEludm9jYXRpb24= Tmdh ZWR1Y3Q= 7JiA7Iq164uI64uk 5p2c IExpbXA= Zm9vZHM= 4YOQ4YOs4YOn INGB0LXRgNCy0LXRgA== INGA0LXRhtC10L/Rgg== QURBUw== IFRhaHVu INC60LvQuNC10L3RgtCw cHJvamVjdGlvbg== IGJlc3TDpHRpZ3Q= KeKAlA== aGFsZA== IFBvYw== INix2KzYp9mE IGdlZ2FuZ2Vu IGVjaHRlbg== 4Z+S4Z6a4Z64 4Lit4Li04LiZ VVRB IGdpa2s= LndvcmtzcGFjZQ== INC/0L7Qu9GD0YfQsNC10YI= RXhwZXJpbWVudGFs RmI= IHZpZXdwb2ludHM= IOC0muC0v+C0leC0v+C0pOC1jeC0uA== INC+0LHRg9GH0LXQvdC40LU= IGZ5cnN0YQ== 5a6Y5pa5572R5Z2A dW5uaW5naGFt IGd1aA== IOCmquCmvuCmtuCmvuCmquCmvuCmtuCmvw== 4LmA4LiB4Lih4Liq4Lil4LmH4Lit4LiV PFJpZ2lkYm9keQ== IGZpbHRyb3M= IHN0b2Vs Lm9uY2U= IGdyYXZ5 IGluc2FubGFy enA= b3N0w60= IGlzYW4= aWZ1bg== IMO2emVsbGlrbGU= 4Lij4Li44LmI4LiH Lm5ldGZsaXg= IHRzZW5h IGluaW1lc3Q= IHJhaWRz IM6xzq8= INC70LjQvw== 15TXqg== INeo15s= IGVuc2VtYmxlcw== IGdvbWE= 4Ka+4Kam4Ka+ IOGAleGAvA== IMO8YmVyemV1Z2Vu INGE0L7RgNC80LDRgg== wq1h INin2YTZhdmG2KfYs9io IGVpZ2h0eQ== IOCknOCkruClgOCkqA== INCy0LjQtNC90L4= dm91 IOCkteClg+CkpuCljeCkp+Ckvw== UFJJQ0U= IGV4Y2VlZGluZ2x5 INCy0YvQutCw0YDRi9GB0YLQvtGe IEFsdmVz IHR1csOtc3RpY28= IHZlcnRyZWs= PEhhc2g= 0LDQvdC00L7QvdC4 INCx0LjRhw== INCy0YvQtNC10YDQtg== IEJhbGtvbg== LCcnXV1dLAo= IOCmheCmsg== 0YbQuNGP0LvRi9Kb IOCkrOCkqOCljeCkpg== IFNjYW5kaW5hdmlhbg== IENhcGFj IEV4cGVkaXRpb24= TXg= 2KfYqtmH2YU= IGRhYw== aWFibGU= IGJ5b3Nl RGVzdGlubw== cmhlaW4= IHdhdmluZw== IFNvcA== LW9wZW5pbmc= eHR5cGU= IFBob25lcw== YWt0aWY= IOC4i+C4tQ== IHJlYWN0aW5n cHJpbnRlcg== wq4KCg== 6Kiz b2xraWVu IEhvbGxhbmRl Y29sbGVjdG9y RU5VTQ== 0LjRgdGC0LXQvNCw CWZpcmU= bWFuxLF6 IEJlY2toYW0= IOCmueCmvuCmrg== 4KSl4KSu YW5nZXA= INC40LfQsdCw0LLQuNGC0YzRgdGP IEJlbGl6ZQ== IExhdGV4 IGbDsw== 5L6v ZGF2 2KzZiNmG IHRvaHU= L2NvbG9y IGZhdm9yaXNlcg== INmG2YLYtdin2YY= YXV0b2NvbXBsZXRl IFdpZXM= IEZlbmNl 4LiX4Lit4LiH KCk/Pg== IGx1dHRlcg== IHZlcmVhZG9y IOCuquCvi+CupOCvgQ== 4KeN4Kab4KeH4Kao UmVhbHRpbWU= IEVK aWxpa2k= IEh1bWFuaXR5 LWRi dW1lbGVsYQ== dW1icmVz LndhbnQ= Qm9ubmU= L2RvbWFpbg== LXBheWluZw== J2V0aXRp X0NB IHNww7hyZw== 4YOd4YOR4YOg4YOY4YOV J3Vt 16DXpg== 2YTYp9i1 INC+0LHQu9C10LM= Zml4dHVyZQ== IOCyrOCys+Cyv+CylQ== INCx0LXRgNC10LTRlg== INiu2YjZgQ== IGZ1cnQ= IERldGVjdG9y IHNhd2V0YXJh IGRldXRzY2hsYW5k YXRyacOobWU= IOCmk+CmquCmsA== 4LOH4LKw4LK/ IExpdnJv INmI2K7Yp9i12Kk= 4LCV4LGN IMSHZW1v dW9uZw== IHppeWFyZXQ= IGNoZXJyaWVz LW5p aXNpbmlu IFJFU1VMVFM= 0YDQsNGA 2YTZhdmH IMOpbW90aW9u IGRlamFtb3M= 5byV55So IC4uLl0KCg== IE1ldGFsbGlj IGVzdHVkYW50ZQ== aW9q ZW1wbGFy w7xuaQ== INC60YDQsNC50L3QtQ== w6FuaWNvcw== 5Yqe55CG PXBhcmFtcw== IFBlbG9zaQ== INeU16jXmQ== aGVhbg== X2RlZw== IOuniOugqA== PW1vZGVs 2KPZhNip INC40LzSqdCw1KXRi9GB IHZvcno= 77yM6L+Z5piv Lk1lbW9yeQ== 0KLQkA== IENsYXVkaW8= aXNodQ== 2LHZitin IHJlZW4= c2luaw== YXJzdWFx IGNhcHR1cmE= IOyghOuetQ== b25la2E= IE5BQg== INin2YTYpdiz IOCqquCqvuCqsOCrjeCqnw== IGluaA== IOKCqg== IEh1bXBo IERpcnQ= 0LXRgdC10Lk= IOWItuacjQ== INix2YjYp9io2Lc= INec15HXkw== IGluZsOibmNpYQ== IFNvbWVob3c= YW5kb3M= IGhlYXZ5d2VpZ2h0 IOCp INi02KPZhg== KCJ+Lw== IGhlcmtlbg== IHRhbWJt IElUVg== zoQ= X2luZHM= X3Bn INin2YTZgdmG INmI2KfZhNmK IG1pbGE= IHRsaGFs IMSRb+G6oW4= IEtlc2tpbcOkw6Ry IOCkteCkv+CkpuCljeCkr+CkvuCksuCkrw== INeU157XmA== Y29tcHI= IEZYTUxMb2FkZXI= JGNyaXRlcmlh IGFsdGVybmF0aWY= IOWkqeWkqeS4reW9qeelqG5iYQ== IGhvb2t1cHM= IHN2xJs= IGJvdWNo LnN0cmF0ZWd5 KHNlZ21lbnQ= IEZlaGw= b25nZXJh IGFnZ2lvcg== dmlsbA== IHNhaWxvcnM= IOCyuOCzgeCypuCzjeCypuCyvw== IO+9nA== IEZpbmFuYw== PGY= IGNyb3ducw== LdCf0LXRgtC10YDQsdGD0YDQsw== 64aA IM60z4XOvc6xz4TPjA== IGNyZWFuZG8= IFVOS05PV04= 0JLQkA== IGzDug== IEZhdGFs Rm9u UGFzc3dvcmRz LUtvbQ== 4LiU4Lix4LiH SW5kaWNhdG9ycw== IG1hbGVl QnJvb2s= 4YCU4YCt4YCv4YCE4YC6 b2xkb2VuZGU= 44O844OH 4Z6A4Z6Y4Z+S4Z6Y w6Bt IGLDtnJqYXI= IFdhaHJoZWl0 INC10LrQvtC90L7QvA== IERlcGFydG1lbnRz 0YLRgNGL0Lw= IHVtb8W+ IEhBQg== KFV0aWw= IFdhcnI= IOCqleCqgg== IEVpbndvaG5lcg== INin2YTYtdmB2K3YqQ== 5aSp5aSp5aW95b2p IGRyxb5hdmU= IGNhcGFjaXQ= 7Iu4 KHZlaGljbGU= IEthbnM= X2lnbm9yZQ== ZHJhY2h0 UmV6 IOCqieCqnA== IG1lZ3M= INC/0LDQudC00L4= INi52YXZhNuM IMOhaXQ= TsO6bWVybw== IHRhc2hraWw= IGFsdHlk IHVuZW4= 1aXVqw== IOCqleCqqg== IENoZXJ5bA== Imlz IFNoYXBlcw== IiwiLg== IGRpdGg= 77y/5LmF5LmF 4YOV4YOc4YOY4YOh IGNoYW5zb25z yJtpbg== IGRvc3R1cA== IOC0nOC0rw== IGNvbmZvcnTDoXZlbA== 5aW944GN IOCuqOCun+CviOCuquCvhuCuseCvjeCusQ== IGdlbWVpbnNhbWU= IG1leGljYW5h IEpvcmRp IGFwb3J0YQ== IGhhaWxlZA== IHhi IFN0cmVpdA== IHBpbGlo b3JpdXM= aXR2ZQ== IG1vYmlsZW4= X0ZBU1Q= IE9jY2FzaW9uYWxseQ== IGlra2E= IGLDtG51cw== 5Yi35rC0 IEJpZGE= ZmF2b3I= IHNrZWxldGFs IG9wZW50 IFBNSQ== INGB0LXQsdC10L8= IHRlcnBlcmNheWE= ICzigKw= INC/0LXRgNC10Ls= KD8p 4KWN4KSu4KS/4KSV IGRhbW5lZA== IHByaWJhZGk= IHRo4bqnbg== IENvbXBsZXhpdHk= INCx0L7Qu9GM0YjQuNC90YHRgtCy0LU= IGRoaWRp INiu2LHZiNis U3dpdGNoZXI= IEJlY2t5 IEFsZW0= 4LC+4LCw4LGN4LCl IGV4dWJlcg== LlN0cmljdA== X187Cg== IGltw7N2ZWlz INGC0LDQv9GI LlRpbWVvdXQ= IFByw7xm INij2LXYqNit2Ko= 5Zuj dsOkbA== IHNvaA== IHN1bW1lZA== 2qrZiA== INGB0YLQvtC70YzQutC+ 7J6R7ISx aXp6ZXJpYQ== IHVwcGVybg== YWZmaWc= LlR4 IFBBQ0tBR0U= IGNvbmZsaXQ= CWVkaXQ= Qk9S amltYQ== IMOnZcWfaXRsaQ== X2Rt 0L3QuNC70LA= dGVycmE= IE5Vbml0 IGFsY29vbA== IGZhcmluZQ== IG1pY3Jvb3JnYW5pc21z YXllcm4= IGludGVncmHDp8Ojbw== IMOtY2g= INCx0LjRgNC40L3Rh9C4 IHN0YWF0cw== c3RpcA== IFN0w6RkdGU= YWRyZQ== IGdydWQ= 4YOc4YOd IEVtcGxveWVycw== bmljaXR5 2YrYtQ== 4Z+S4Z6a4Z684Z6c XSI7Cg== 44GC44KK44G+44Gb44KT 546p5YyX5Lqs6LWb6L2m aXlhw6c= IEvDuGJlbmhhdm4= IOCwquCxiuCwguCwpg== 5Zyo57q/YQ== IElsbHVzdHJhdGlvbg== IOGDkOGDoOGDkOGDpOGDlOGDoOGDmA== aXlvcnV6 IGVsaW1pbmE= aXNrYW4= IFZpamF5 INWm1aHWgNWj1aHWgdW01aHVtg== PSd7 KFJlZ2lzdGVy INC60L3QuNCz IEVNQg== IHJlc3RyaW5n cXVpY2tsaWNo QWlt INWz1aHVttWh1bk= INCw0LrQutCw0YPQvQ== INmI2YrYqtmF TmViZW4= 5ZCI55CG 44O844OK IHZlcmxpY2h0aW5n IGTDoG5o Q2xpcXVl INGD0YfRgNC10LbQtNC10L3QuNGP X3NodXRkb3du IGhvdGxpbmU= IEltcGw= bW9ubw== 2LTYsdmD2Kk= IGFwYXJlbnRlbWVudGU= 4Z624Z6P4Z63 IGVudHJv IOC2tOC3mQ== IG1vbHRz IOmrmOmikQ== INqp2YbYqtix2YQ= INin2YTYudmE2YjZhQ== IGhldGk= 2KfYudmF IOCqqOCqnOCrgOCqlQ== IHN1bW1vbmVk 5Y+J INGA0L7QtNCw IHNwdXM= 2YXYp9mE2YM= IGF0dHJpYnV0YWJsZQ== 44Kr44O844OJ IGRyYW4= IGhvcmVz 0LXRgNC10LY= Y2llxaE= IGZpa2ly Y3pueQ== SWZj INC/0ZbQtNGC INit2YTZgg== IEJpYw== U29sdmU= 44CN44Gr Z2Fub3M= IOCwteCxiOCwsA== IFBlcmQ= INC+0LHQtQ== IG5qYWxv YWNm IOCwruCwvuCwpOCxjeCwsOCwgg== JGI= IGRlbm90ZXM= IOCkrOCknOCkvuCksA== IEV4ZWN1dGVz IHRhbGFnYQ== IE11bGhlcg== w6RsbGE= YXZhbGk= Zm9sbG93ZXJz IEhlbGY= LnRyYWRl aW5lc2lz INCz0YPQvQ== IExhbw== INC80LDQsQ== a3VsdQ== IGNvbXB1dGVz IFRvb2s= 66C464uk YWrEhWN5Y2g= b3B0aWM= IOCyqOCzgOCyteCzgQ== fSkp IFNvbGlkYXI= INC80YPQt9GL0LrQsA== 4Ka+4Kef4KaV YWtraQ== IMOhcmJvbGVz UmVjbw== IGFicmF6bw== Zm5vZA== KEFSRw== X2FsaXZl IGxpZ2h0ZW4= IHJlY2VwY2nDs24= IGFzc3VyYW5jZXM= IEhPQQ== IG5va3Q= IGxpbmthZ2U= IFZlcmvDpA== IExpdGVyYWN5 TElL IGhhbmRlbGVu IOCqk+CqqOCqsg== IENlYXLDoQ== INCz0Y3RgtCw0Lk= LkJMVUU= IHB1bmNoZWQ= INC20LXRgtC10Lo= 4KWB4KSs xLHEn8SxbmRh IOCujuCuo+CvjeCuow== IHRlaXN0ZQ== Z3Vucw== 64uI7Iqk IGPDoXJj IHRvdGFsaW5n IHVtZg== INGI05nRhQ== IE5vc3Q= 5qyK aW5kYWJh 4LKk4LON4LK44LK1 IENvY29h IGltcHJlc2NpbmRpYmxl IOCmuOCnjeCmpeCmvuCmqOCngOCnnw== IEJyZWVk IGF1dHJlbWVudA== IOCmnOCngeCmqA== ZXJjaGFudA== IOKCrC8= IHN0ZWRlcg== 0LXQu9GM0L3Qvg== J2Rlc2NyaXB0aW9u IE9DUg== 4LC44LGN4LCv IHBvbGljeW1ha2Vycw== IE51dHplbg== IEhlaQ== INGF06nQtNOp0Ls= XV4= IGJpa2lu IEF1Zm1lcmtzYW1rZWl0 IExBTkQ= aG90bWFpbA== IHZhZ3U= INCw0LTQvA== 4LmB4LiB4LmI w6h2 RWxsaXBzZQ== IENhYmVybmV0 IGNvbW11bmlvbg== INGI0LjQsw== INW61aHVv9W+ LmRldmljZXM= 0LHTow== IENlY2k= IHltYXg= Y2xy INin2YTYs9mE2LfYp9iq IHdha2tlcg== IGFncmljb2xl IHJhaXNvbm4= IOCmhuCmpuCmvuCmsg== Oz8+Ig== INin2YTYudin2YXZhA== IHNodXR0ZXJz IOCkrOCkuOClhw== QWxsb2NhdGVk UGVw IFJvYm90aWNz IGTDoG5n IGFhcXE= IFB5cg== IOCqm+Crh+CqsuCrjeCqsuCqvg== LW9sZHM= INCx0LDRgdGB IEdvbQ== 5ZCO5LqM IHByZW5leg== ZG93bnM= aXNzZXJpZQ== IFZlcm9uYQ== LnRpbGVz cHJvZmVzc2lvbg== IHRyYW5zYWN0aW9uYWw= IG11bGw= IG1vc2U= IOGDmeGDmOGDlw== IHdvb2RsYW5k LndlaWdodHM= IEtpaw== cGxlcnM= KEdyaWQ= IGVsZWN0csOzbmljYQ== LndyaXRlcm93 IOCkq+ClgOCkuA== IGhhY2Vz VGllbg== IGVzdGFiZWxlY2ltZW50bw== xZnDrXplbsOt YmFyZXM= IEtyZW1saW4= INmG2K/Yp9ix L0NE KOWbvg== INC/0YDRi9C3 IENlbGVicmF0ZQ== IERlcml2ZWQ= LmNoYW5nZWQ= IHNhY3JpZmljZWQ= Z2ViaWxk IHN1bW1vbg== VHJhaWxpbmc= IOCktuCkvuCkqOCkpuCkvuCksA== IGluYWR2ZXJ0ZW50bHk= IEVtb3Rpb25hbA== 1rk= a3LDpGZ0 IG1lZGFu IG91dnJl IHNlbGVjdGl2ZWx5 6LWM55CD dmFuZA== L1Byb2R1Y3Q= INC40LzRgw== INC+0LHQtdGB0L/QtdGH0LjRgtGM eWFj IOuTrw== IGFzc2F5cw== IO2RnOyLnA== INWw1aHVv9Wv 4KiV4Ki+4Kiw KGNk YXZ1dGE= INin2YTYo9i12YQ= zrvOv869 LXs= INC/0YDQtdC/0L7QtNCw0LI= IHBoeXNpcXVlcw== IOCwteCxh+CwuA== IGF2dXRv IOW9qeelnuS6iemcuOW/q+S4iQ== INC60L7QvNC/0YA= 4oCUaXM= IEVjY2xlcw== IHpvZ2VuYWFtZGU= RHJv IExvd2VzdA== IGt3YWxpdGVpdHM= IHJlcHJpc2Vz INek15XXqA== SU1BVEU= Zm9vdGJhbGw= Q3g= IHNpbmRpYw== 7Jqw66as 0LjRgtC10LvRjg== KCY6 4LC+4LCa4LGN 4LWH4LSw4LS/4LSV4LWN4LSV INi32YE= 4KSw4KWN4KSc4KS+ X2RlZmluZWQ= Z2Vub290 IFNsYXRl IEVsbGll IFFQdXNo INin2KzYqtmF2KfYuQ== IGNvbmNlaXZl 4Ken4Kep 66y87J2E IEl0w6FsaWE= bWVsZGluZw== 6K+V5ZCs ID8u IOGDrOGDlOGDoA== 0LTQsNCw 4oCd4oCm IM+DzrHOvQ== IEJhbmtydXB0Y3k= 4YOQ4YOg4YOb4YOd INin2YTZhdmE2KfYqNiz Y2Npb25z 0YPQvNC70LA= INC+0YLQutGA0YvRgtGM IG50aXJobw== ICAJCQk= IE1ha3M= RmVuY2U= IHRyYW5zbWl0dGluZw== IGF1YWxh IEhhY2tz IGvDqGs= IGludm9rZXM= INee16jXm9eW UmVwb3J0ZWQ= 5Lqk5o+b INCi0L7QvA== KHJlbmFtZQ== IGZyYW7Dp2Fpc2Vz INiq2K3Ys9mK2YY= IOCmuOCng+Cmt+CnjeCmn+Cmvw== INCy0YDQsNGH0LA= YWNldGFt IEhhcmRjb3Zlcg== QCg= aGVsZWxl IEpBUA== RGVybQ== IGJvcmVkb20= 4Ka24KeH4Ka3 IGZ1bmRhZG9y IHdhbGlpbg== IHR3aW50aWc= IEVmZmVrdA== 4KSm4KSv CWNhdGVnb3J5 IOCkhuCkleCkvuCksA== IG1zbQ== IHpvb2w= LkltYWdpbmc= 4Lij4Lin4Lih IOWFjei0ueingueciw== IGlnYmVz SW5mb3JtYWNpw7Nu INi02YXYp9ix IOCkleCljeCksOCkruCkruCkvg== cGZsZWdl 4LON4LKV4LOG THVuY2g= IHPDqGNoZQ== IHJvY2tldHM= 4KeB4Kan4Kas4Ka+4Kaw IEJsZW5kZXI= IGzGsOG7o3Q= IOWkp+WPkeW/q+S4ieixueWtkA== IHPEgQ== RGlzdHJpYnV0ZWQ= INGB0L7Qu9C90LU= 16TXl9eU INGC0q/RgNC60LjRgdGC0LDQvQ== IGfDpHJuYQ== 4KWN4KSw4KWL4KSy LlN0cmV0Y2g= KGN0cmw= YWpham8= IGFzc29jaWE= Li4uJw== 4Z6T4Z+F IGplYWxvdXN5 X1BJRA== SEVMTA== IFNwYXJl INij2LPYqNmI2Lk= INCy0L7Qt9C00YPRiA== CXJhaXNl IiIs IjoiKw== IFBFUkZFQ1Q= Y2FyZ28= fi1+LQ== IG1pcmU= IFJlY2w= IGJlc3RhbmRlbg== aXNtZW50 cGlja2Vk 0YLRi9C1 2LfZiNin2YY= IGJsb2Vt 0YvRiNOZ0YLTmQ== ICcvJyw= IOCkueCkv+CkguCkpg== IGFyYWg= cGFp IGRlcmE= Y2jDqA== XHhm IHJlY29tZW5kYWRv IExldHQ= IOq3uOydmA== c2hvd24= IGV2ZW5lZW5z IEdyZWdvcmlhbg== IGl0ZQ== X1dSQVA= INeS16LXqA== IFNrdWxs a2Vyaw== LmVuZXJneQ== INC/0LvQvtC0 IMOubmPEgw== w7x5b3I= IGFtaXphZGU= IHJhZmZsZQ== IGTDqWFu aG9uYQ== dmFsdWF0b3I= KGVwb2No IGphbWJlcw== 77yJ44Gv IElEaXNwb3NhYmxl SW5mcmE= 4YOc4YOU4YOa4YOY eW1hcw== IGt2YXJ0 INC00LXRiNC10LI= IEd1dGg= J119Cg== 4KWB4KSb INWw1avVtNWh IGJhdGFpbGxl IGxpeg== IGxlZXN0 IGtvcGVy IGxlZWQ= IGZhY2lsaWRhZGU= INij2K/Yp9ih IGZvcmVnb2luZw== IOCkquCli+Cklg== cHJpbg== dW5pa2lyYQ== IOC0l+C0vuC0qA== IHN1cGVyYQ== 1aHVttWr1bc= IHlha2hl IERTTQ== IEFyZ2VudGluZQ== QXBwZW5kaW5n IMOpbW90aW9ucw== IEjDpHVzZXI= IGJhbGM= IGxpYnJhcmlhbg== IGFyYmVpw7A= IGdlc3Ry INiq2YLZiNmE IG9kcw== INGC05nRgNOZ0L8= IGluZ3Jlc3Nv IGF1cmFpZW50 IGluZmxhdGFibGU= KHBlZXI= INCw0YPQtNCw0L0= IFNjYXR0ZXI= IFBvZGNhc3Rz IHRpcHBlZA== QURS IFN0eWxpc2g= IERpc3RyaWI= asOhcg== IENsb3Ro INGC0L7Qu9GL0ps= IGJyYWNodA== RHJpdmVu IHByb3N0YXRh IG1pa3Q= SEJveA== X3VhcnQ= IGdhbW90 IE5JR0hU IEtlbXA= S2Vubg== YWltYW4= IOGDpeGDlQ== 5Li+5Yqe U2Vv bGFuZ2Vu INC/0L7QtNGA0L7RgdGC 4LWN4LSw4LS+4LSv X3tc Y2VwdGVy IGFkanVuY3Q= 15nXkNa315w= KGV4aXN0aW5n INC70LjQug== dHNpb29u 4LKu4LKC4LKk4LON4LKw4LK/ c2V0dw== Lmluc3BlY3Q= INC+0YLRgNC40YY= LdCU RUZG cHB5 KEpGcmFtZQ== ZWZ1 bnV0cml0aW9u SmVu IE5vbmc= IFNwb25zb3Jz eWY= IGRhdGFi IENsb3NldA== IGFudGlnb3M= IOuMgOu2gOu2hA== LnBhcnRz IGtpc2lhbm5p IGNvcnJlY3Rpbmc= X1JHQkE= aW5jZXJlbHk= 4oCM2KrYsQ== IGluYWw= IOGDm+GDlg== 0KDQow== b23DqXRy IHdoYWthdw== J2c= VsOt LkV4ZWM= UnVz 5aSW5Lqk IE1ham9yaXR5 ZW1ib2w= IGNhbXBhaWduaW5n 4LGI4LCC4LCm4LC/ IHByb2R1Y2Vu IHN0YWJpbGl6YXRpb24= 5pWw5o2u5pi+56S6 5pa95bel 5Yqg5Z2h Q2xhbg== ZGVsZWc= IGNo4buLdQ== IGVkZXM= IGFidWI= dWV1c2U= IOCwqOCwruCxi+Cwpg== INmF2KTYs9iz2Kk= aWJpZw== 4LiK4Li14Lin4Li04LiV IGdyYWRlcnM= IGludGVycHJldGFjacOzbg== aW5lcml0 IGVsZWnDp8Ojbw== 4LKz4LOG4LKv 0JjQrw== b3Jub3N0 z4XOvM6x dWNhbw== IGRlc2NlbmRhbnQ= IE9yYW5n INec15vXnw== IFBFUlNPTkFM IFNlaWduZXVy U0FM LXNtb2tpbmc= IOCkuOCkueCkvuCkrw== IGludGVyZXNzYWRvcw== xZllbg== 5LiA54K5 IHBlYWtlZA== IMW+ZW4= IGFwcmVjaWFy IEZsb29ycw== IGVtdmE= IHRocm9tYg== IOyLpO2MqA== UmV3cml0ZQ== IEhBUg== IM6xzr3OtQ== INKZ0LA= IOCkuOCkoeCklQ== JywnIw== JnJldHVybnM= INij2LPYqNin2Kg= 0ZrQtdGC0L4= IEFnw6puY2lh IGV4Y2VwdGlvbm5lbA== IHlhY2M= zrzOtc+BzrnOvQ== IHdlcmt0ZQ== RGV2aWF0aW9u X3Jt IHZlcnNjaGVu 5LiL5p2l IOCmk+Cmqg== c291dGg= IGRhYWR3ZXJrZWxpams= 4Liq4Lih4Liy4LiK4Li04LiB IG1vbGE= IG11c2Vv IEJhZGV6aW1tZXI= 15XXk9eq IEFuYWx5emVy 4Kq+4Kq34KuN4Kqf4KuN4Kqw4KuA4Kqv ZXNjYXBlZA== KGl0ZXJhdG9y PT09Ig== 0YHRgtCw0LLQsA== IHN1cmdpdQ== IFB1bHM= IOCqpOCqvuCqsA== w6FsaXNl dXRzY2hlbg== IGNvdmFyaWFuY2U= IGJlcmphbGFu 66eI64uk YXZsamVu bGlvcw== Ym9tYg== cml5 IGRlbGk= IGp1ZWdh IGJhbmtlcnM= IGRpc2Nlcm5pbmc= INiq2qnZhg== IHNlanVtbGFo IGxvb24= 5LiB55uu INGB0L7Qt9C00LDQvdC40LU= 4KS+4KSv4KSy4KS+ LVRlc3Q= QUNJT05BTA== eXNjcg== IExvdmVz IGVuZXJnw6l0aWNh CXZh 4LSq4LSw IHB1cmlmaWVk IExhbnRlcm4= KGNvbnRyYWN0 CQkJCQkgICAg INee15TXnQ== aXN0w7Y= U3Vubnk= IG1hdGNocw== dXRpbmlr QXNjZW5kaW5n 4LON4LKv4LKm IGVpZ2VuZXI= XScpCg== IOCquOCqvuCqsOCrgA== IOCquOCqrQ== bGFoaXNvYQ== 0rvRi9C90YvSow== IEdhbGVyaWU= IGFnYmE= LWFmZg== IHVuZ3V0 INeZ16LXkw== IGZvbGhhcw== IGNyYXk= IOC0huC0sw== 0YbQtdC90YLRgA== LHdl cm9ubw== IGluZ2VybGF0cw== LlBob3Rv INCz0YDRj9C3 IGtpbGxpbmdz IHbDpG4= 4LmE4Lih4LmI4Lih4Li1 bWFuZQ== a3Vuc3Q= IGFncmFkw6F2ZWw= X1dpbmRvdw== eXlhdA== IGRpYWdub3Nlcw== INeR16nXkdeZ15w= KGNhbmRpZGF0ZQ== ZW50aGFs INGA0LDQt9C00YDQsNC2 IGJhbGFu IEtpcnN0 c25pcHBldA== U0hJRlQ= YWhpYQ== IHByb3Rlc3Rh IENhZXM= IEJvbGw= IOq4sOuwmA== ZW5lcmc= U3BsaW5l IGVsc2Uncw== IENhbm8= IHJldmVsYXRpb25z INGH0YPQu9GD0YPQvQ== IGx5Y2s= CVVQUk9QRVJUWQ== CVNFVA== aWxpeW9y IFBvc3RncmU= IG9iZQ== aW5pbnpp IOCmh+Cmgg== IG15b2NhcmQ= LkZF IMmZbGF2 0Y3QvdC90ZY= cmlrc3RhZA== YWx0cmVz Kk1hdGg= INKb0LDQtA== 4LiW4Li44LiZ4Liy4Lii4LiZ IHN0dWRz dW5uaWs= INGC0L7RgNC80L7RiA== IOCmh+Cnnw== INin2YTYsdmI2LM= 4LmC4Lih4Liq4Lij INGD0YHQutC+0YA= IMOpZHVj IDstKQ== 4Kq+4Kqw4KuA4KqT INCQ0LLRgtC+0YA= IHDhu6Vy4bul IE9idGVuZXI= X2NsaWVudHM= IGluaXRpYWxpc2U= IGRlcG9ydGVz T1RPUg== IGZpcnN0aGFuZA== INmF2LPYp9it2Kk= 4YOY4YOo4YOY bm9naQ== 55+p aXNoYWpp INC/0YDQuNCy0LXRgg== IHBvdGVucw== U2FudA== aW5pdXM= INis2KfZhdi5 IOCupOCvh+CupOCuvw== 05nQvNOZ XSkpOgo= 56ys5LiA6aG1 INC40LfQvNC10L3QtdC90LjQuQ== IHBlcm94aWRl INii2K4= INeZ16E= amF0YQ== TGlzdGluZ3M= IGxhcmF3YW4= 4oCZZW52 IGNhbGVuZHJpZXI= IGFjb20= IHBvdGVuYw== IGNvbXBsZW1lbnRlZA== INC40LzSqdCw1KU= OlsK Wk0= INC80YvRgdC7 2K/Ysdiz IGlkaW90cw== z47Pg861zrk= IGd6aXA= IG1hamV1cg== INC00LXRgNC10LLQsA== IEFuYWx5emU= 7LKZ 1oDVvtWh INin2YTYsdmK2KfYttmK2Kk= IGF2acOzbg== 2qrZvQ== INio24HYqtix IGlkw6lpYQ== IOCwh+CwguCwlQ== IOC0teC1jeC0r+C0vuC0qg== U2hhbmdoYWk= ZWxlY3Ryb24= YmlzeW8= IFN1cGVyYg== IHVuZGVuaWFibGU= IOCkruCkvuCksOCljeCklQ== IG1pc3BsYWNlZA== UGhvdG9u IHNjcmlwdHVyZXM= IHNvZQ== 5b+9 IGFydGlsbGVyeQ== IGlyYW5s4buNd+G7jQ== UmFs CXNm T21zY2hyaWp2aW5n cmF0aW9u IOCkteCkv+CkleClh+Cknw== UkFS INmI2YTYrw== aGFkYXM= IOCkleClg+Ckt+Ckvw== T0RC INit2LXbgQ== IENBUFRDSEE= ICkKLy8= dHJhbQ== IE9ORw== IGVtcHJlc2FyaW9z IGRlc2NhbnNhcg== IFZvcnN0ZWxsdW5n ICAKCgo= IE1PQg== INeZ16LXk9ei16g= IO2VmOuptA== IHR1dG8= b25zYQ== IHp2w70= KS5e IGNvbmdlc3Q= RGlw IHNjcmFwcw== CU91dHB1dA== IGVudm9sdmlkb3M= IHN1ZnJpcg== Lm50 IG9uZGVyc2NoZWlk IEhhcm1vbg== IGN0bA== 4KeN4Kav4Ka+4KaV IHhvZw== INCz0L7RgdGC0LXQuQ== IOCqruCqs+CqtuCrhw== IGJha2k= 44OD44K6 IOyEseyepQ== 2LHZitio2Kc= INmF2LnYsdmB24w= ICd+Lw== IHR1Y2s= IGNvbnZlbmlv IE1vbmdvbGlh IGdqaW4= IHbDpGc= dW16YQ== INC90LXQsNCx IHVrcmFpbg== IERlY2lkZQ== 4KeL4Kat IHNwZWVsZGU= INiq2r7bjNq6 SGFuZGxlZA== IEJlc3RzZWxsZXI= IOC0ieC0pOC1jeC0pOC0sA== YXJhaGE= IGNlbHVsYXJlcw== IHByaWJsaQ== Y2Zm IGplasOt 0LTQtdC90LjQuA== cXJ5 15XXkNa3 LnJlZ2lzdHJhdGlvbg== IGhpYXR1cw== IG5hbm55 RU1PTg== IHByb3ZlbmFuY2U= LU1hcmll INCx0YvRgtC+0LI= INin2YTZh9iv2YE= IGFzdHJvbm9teQ== IGZpbmFuY2llcm9z IOCkquCkueClgeCkguCkmuClhw== IOi0nQ== a2FtcGY= bsOpbQ== IGhhbmRiYWc= INC60LDRgtGL0Yg= INio2YjYqg== IG9udHZhbmdzdA== INmI2qs= 4KSw4KS/4KSv4KS+ Il0pOwoK IHVwZA== LkV4cG9ydA== IFNwZW5kaW5n IOeX IGt3YW5p 4oCZZW50cmV0aWVu VEVDVEVE ID8p IHZvaXNpbg== IExBUkdF IOCmqOCmvuCmsOCngA== dHVzc2Vu LnRheA== 0L3QvtC80LDQuA== INGD0LvRgdGL0L0= LWhpc3Rvcnk= IEludmVzdGlnYWNpw7Nu cGFpbA== YWRhbGE= YWxhcnluecWI INC00LfRj9GA0LbQsNGe IOaXoOaegQ== INGA0LXQt9GD0LvRjNGC0LDRgtC+0LI= 77yI56iO6L68 IMSQ4bqhaQ== IG92ZXJ3aGVsbWluZ2x5 IEx1bmFy IFN0cmFpdA== IHJvemU= 0LDQvdC40LA= 0LjQsdCw IGNvbnN0YXRlcg== IOC0h+C0teC0v+C0n+C1hg== LWdh J10pOgo= IENvbXBhdGliaWxpdHk= IEtyYXM= enRhdA== IHJlY3ljbGFibGU= KEZBTFNF LW1hw7E= INin2YTZhdiy 0LbQsNC9 IOCkueClh+Cksg== IHdpbGxrb21tZW4= IHN1cmZhY2Vk UG9vbHM= IHN5Zw== IEh2b3I= IEdlbcO8c2U= 2KPZhdin dWJpbg== IEhlYXZlbmx5 Pltd IFNhc3M= IFNvdA== IENyZWU= IGRpZmljdWx0YWQ= 44Gq44Gu44Gn IHZhc3RnZXN0ZWxk INmI2KfYs9i5 IERQUg== dGR5 4oCM4LCw4LGN LkFuZw== INGF0q/QtNGN0YA= W3BhdGg= IERvdWU= IHJ5bmt1 0LDRhdCw TWFycw== IGZpZXJj c3Nm IGFsYW1hdA== 4LON4LKv4LK+4LK4 IE9ydGl6 IHRlbXBmaWxl c3BlYWtlcg== xJ91bnU= IGVuY29udHLDsw== IHByb2PDqHM= KHN0YWdl 6IiI YXJ5bnk= YWTEscSfxLE= IOqwgOyatOuNsA== IGtvbXBhdA== IHByw6l2dWU= INit2K/ZiNir IE9yYw== aXppdW4= IOC0pOC1iuC0tA== IExhdHZpYQ== LmJ1dA== IOCwleCwrg== 2YjYudip IOCkruClh+CksOCliw== emVwdGlvbg== IOGDm+GDmOGDmOGDpuGDnQ== IEthbGVuZGVy 0YLQsNC70LPQsNC9 INio2YTZiNqG IGdpag== 16nXmNei16g= 5YWN6LS56LWE5paZ INWj1bjWgtW0 ZXNjbw== d2Vo IOCkhuCkguCkpg== IGdvbm5l IHBhcmFub2lk INGC0LXQvdC00LXQvQ== dmVyc29yZ3VuZw== IOCwquCxjeCwsOCwp+CwvuCwqA== INio2KPYsw== IGxvc2Vycw== IHN0YWJiZWQ= LkhUTUw= IHNlYmk= IOCksOCkvuCknOCkqOClgOCkpOCkvw== 0YLQtdGD SUVOVEFUSU9O aW1pemnFiA== IGdsYXJl IOCkquCljeCksOCkuOCkv+CkpuCljeCkpw== 4Liq4Li44LiC4Li44Lih4Lin4Li04LiX 57qq5aeU IFJDQQ== 5LmU IEZUQw== IHBvc2l0aQ== IGJsaXZpdA== IEthbXU= X1JPVVRF KV0KCi8v IHdlY2hzZWxu 1aHWhNWh1bbVudW11bjWgtaA 4LC/4LCk4LCC IFRvYw== IFZ1bGthbg== IEVocmVu IGNvbmNlZGU= YA0K aWxkaGli 4K+B4K6k4K+B IHRpbmN0 IEdyYXZl LkdVSQ== YWt3YXpp IFBSRU1JVU0= IOaAuw== IGLFq3M= IFJhbmtpbmdz IOS5heS5heeyvuWTgQ== WG0= 4LS/4LSV4LWN4LSV4LSx4LWN4LSx4LWN IEF3YWs= IHJlcHJpcw== IGtlcGFsYQ== IFZhc3Q= IGR5ZGQ= INGN0LvQtdC6 INiu2YTZig== INC/0LvRjtGB IHluYQ== KCcvLw== INWh1bvVodWv1oE= J10+Owo= LWVtcGxveWVk T3B0aW1pemF0aW9u IERpYW4= IMO2c8O8xZ8= IOCkquCljeCksOCktuCkv+CkleCljeCktw== INix2qnavtmG25I= KHNlc3M= IGR5ZXM= X2Rlbg== IOC0h+C0suC1jeC0sg== IFhYWFhY X3NlcA== X1ZPTFVNRQ== Jz0= IHNvbnJpc2E= IEZyaXM= 4KSV4KWN4KSw4KS+4KSJ INin2K/Yp9ix2Yc= LXllbGxvdw== IGN1cmxpbmc= IE1hcmlhbm5l IHNub3d5 IF9fKCI= IG50c2VuYQ== IE9P IG9nbA== IE9NRw== 4YOQ4YOY4YOh 5rW36YGT IERJUkVDVE9SWQ== IMO+aW5n IOCkruCljOCkleCkvg== INec15nXnA== IGtvZg== IOGDmOGDnOGDkw== 0L7RgdC60YDQtdGB INC/0YDQvtC40LfQvtGI0LvQvg== INmE2KfYsduQ INin2YTYrNmF2YrZhA== X2Fm 57Sg5p2Q IFNsYXNo IEpX 0J/QvtGB0LvQtdC0 IOCyteCzhw== S29z YXJlbGU= INGC0LDQutC40LzQuA== IGZlaGxlbg== 4KWB4KSo4KS/4KSV 7J6Q66OM KFBhcmNlbA== IEVpbmthdWY= em9uYQ== aWNhcmJvbg== IOCuquCutA== W3VybA== 54On IHNpY2hlcm4= ZWxvcGVu Lk1heGltdW0= INGB0LXQstC10YA= X2NvbmZpZ3M= INGB0L/QtdGG0LjQsNC70YzQvdC+ 2q/Yp9mH24w= aXNlYW4= bsOl JHBhcmFtcw== dmVsb3BwZW1lbnQ= IEdyw7bDn2Vu IE91dHB1dHM= IOCuh+CuteCusOCvjQ== YmVuemlzaQ== p+GDneGDpA== IGdyb3NzZXM= IFNhdmVz IGNvbXB1ZXN0bw== IGNsw6Fzc2ljbw== dm9vcndhYXJkZW4= ICIpWw== UGlsZQ== INGB05nQudC60LXRgQ== IG5ldmV6 0YLQtdGA0L3QsNGC0LjQsg== IGVycmFuZHM= IHR1YnVsYXI= Jkk= IEp1ZGFo X0hJU1RPUlk= IGRhcXVlbGVz IGtob2E= a2VyaW5n INC30LDQv9C40YHRjA== ouCwv+CwsuCxjeCwsg== IGFmZWN0YWRvcw== 0LfQuNCy INij2LnZhNmG2Ko= IEVDQg== c2hlbnppc3dh b3JzZXQ= U2VndQ== INC+0YLRgNCw IEhhdXN0 VHVz bWVnZW4= KElFbnVtZXJhYmxl INCh0YPQtA== dWxldA== IG1hYWc= aGlnaGVzdA== 0LTRgNCw0LLRgdGC0LLRg9C50YLQtQ== 0LDQu9GW0YHRjw== 5paH5pys IFJlY2VpcHQ= LkRvY3VtZW50cw== INCe0YDQs9Cw0L0= IGVtcGZvaGxlbg== ZHppZQ== IG1lbmV0 IFBvc3RlcnM= ICgpOw== dGVsbA== PScu IHB1bmc= IOCmheCmqOCnjeCmr+CmvuCmqOCnjeCmrw== IHN0cmFuZ2VseQ== IOCkpOCkr+CkvuCksA== INi02YjZhA== IOCkuOCljeCkpeCkvuCkquCkqOCkvg== IOCupOCusuCviOCuteCusOCvjQ== IGdpZGE= INin2YTYtNin2LTYqQ== IG5naGU= d3JkZA== IGhlYXJ0YnJlYWtpbmc= Q1VM 0LDQtNCw0LXRgg== b3JpZW4= IGluaGFiaXRlZA== IGx5Y8OpZQ== X2JhbA== IOC2r+C3kg== IOODnA== IGFwcm9iYWNpw7Nu IHRvcHBlcg== IMSweg== xI1ldg== IG5nZ2F3ZQ== IGhhbmRlbG4= SkVDVElPTg== LnByb2R1Y3Rpb24= esOhcw== IFdG IEFsYnVtcw== L2FjY2Vzcw== IGJvdHRvbXM= INC606nRgNKv0L0= IEFybWVuaWFu IEJNUA== 2YPZhNin2Ko= IOaIkeimgQ== YXRhaA== IE1JTUU= KG9wZXJhdG9y 1aHWhNWr1bY= 4K6q4K+N4K6q4K+L4K6k4K+B IHZpZWlsbGU= xaHFpQ== IEFEUw== INqp2LHYr9in2LE= YH0= IGLGsOG7m2M= aXVs IEfDtnRlYm9yZw== 0YLQsNGP dW1tdXQ= IGZvcmVsZA== 0YLQsNC80LDRgdGL0Lc= LnNob3BwaW5n IG5lY3Q= SmFw IGFncmVnYWRv IGZsaW5rZQ== IEljaQ== IEthcGxhbg== IGF34buN IHZvbHVwdGF0ZQ== IGluZGVi IHBoeXQ= IOCqueCrh+CqoA== 0LDQvdCw0LTQsA== IFN0YWJsZQ== IFN1YndheQ== z4fOtc+EzrHOuQ== X0ltcGw= IOCwjuCwleCxjeCwleCxgeCwtQ== INC/0YDQuNC80LXQvdGP0YLRjA== IG9uYm9hcmRpbmc= IHNwbGVuZA== INin2q8= INeY15HXog== IOC4hOC5iOC4sg== X3h0 INmF2KrYudiv2K/YqQ== IOC0ieC0sQ== IGludGVyYWN0cw== aXRzaA== Z3VlaQ== IG1lbmlubw== IGphbnRlbg== YWlubmU= 4KaZ4KeN4KaX4Kay4Kas4Ka+4Kaw INC60LDQvNC/0LDQvQ== IG9ibg== IGV4dHJhdmFnYW50 nJg= IGhhbmRsYXI= IGRlc2Fj IHNraWQ= IOCmueCmk+Cnn+CmvuCmsA== LWJldGE= IOCkuOClgeCkquCksA== IMO6dGVpcw== 15bXqNeq UFE= 66Kw IG5vdmlkYWRl IFRhbmtz zrjOtc65 15HXpw== INin2YTZhNmI2YY= 4LS/4LSV4LSz4LWB4LSC 4YOY4YOo4YOV4YOY4YOa4YOY IGNvbXByZW5kcw== IHN0csO4bQ== KCJbJQ== LmNyb3A= T01H INC80Y/QvdC1 cXVhbg== IGx14bqtdA== INGB0L7QtNC10YDQttCw0L3QuNC1 IExpbmRzZXk= IGtlcm5lbHM= 44GP44KJ IOCkuOCkruCkvuCkquCljeCkpA== IGZpbm5lcw== QEJlYW4= ICopCgo= IHNpYW5v IElra2U= YWJsYW5jYQ== R2F1c3NpYW4= IG5ldXJvdHJhbnM= X3Zv dWxhcsSx L3RyZWU= 2LPYp9mH2YU= Q29uaGU= IHJlYWtj IOCquOCqruCqnA== R2l2aW5n INeV15I= 4KS+4KS44KWN4KSf J2Vudmlyb25uZW1lbnQ= IOWkqeWkqeeIseW9qeelqOS4reWllg== YW50YWluZQ== bGFj 7J2067KI IGVuZnJlbnRh IEV4Y2VwdGlvbmFs 2KjZiNi5 IFJhbWI= aW5naWE= dXJibw== X3ZlbmRvcg== IG1haWRpcg== a29tcGw= bGlkaXI= YWxzeQ== Q29udHJhc3Q= R2Ft IHJhenVt UGVyc29uYWxseQ== LWhlYXJ0 INil2LbYp9mB LnNlcmlhbGl6YXRpb24= INK70LDSoQ== IGxpY2Vuc29ycw== IG1pc3VuZGVyc3RhbmRpbmc= IGNvdXRl CXBlcnJvcg== U09D IOCqhuCqqA== 5ZCf 4LSV4LS+4LSw4LWN4LSv IFNhbG1hbg== IGluc2lnbmlmaWNhbnQ= INC/0LDRgNGC0LjQuQ== aXBoZXJhbHM= IG5lY2VzaXRhbW9z YW1iaWd1 IGdhcGU= IGRpcmVrdG9y IG7FjQ== T2NjdXBhdGlvbg== b2xkZW4= IGRpZsOtYw== 4Kqk4Kqu4Kq+4KqC IGthc3M= IOe+vQ== SmVzdQ== IG9kYnk= INC40LDQsA== U3RpbQ== IEJhdGE= IGRpamVyb24= INmF2LHYqNi5 INWs1as= INmI2YXYrw== Y2tsZW4= 4LON4LKc 4LK+4LKk4LON4LKw4LK/ IFRyaXVtcGg= 4LWH4LS44LSu4LSv4LSC IGFtcHM= IGZha3Rpc2t0 IHJlYWN0b3Jz IFJBRElP RW52aWFy IEFudGlv IEJ5emFudA== b2Jzb2xldGU= IHBhcmY= X2Zm INC70LXQs9C10L0= IHN0ZXc= 2YnZituV a2FuZw== 4YOQ4YOg4YOU4YOh IGVzdG9xdWU= Y2Fub24= IHRycw== IOWFs+S6jg== W0U= Q2VuYQ== YWNoaW0= IEJlcm5hcmRv INGA0LXQt9C10YDQsg== TWV1 LkpUYWJsZQ== Lmlzbw== IGJpb2NoZW1pY2Fs IHJha3lhdA== LnR5 LWdhbGxlcnk= IFBvaA== VGhvdXNhbmRz w7xybMO8xJ8= IGNvbnN0aXR1eWU= dHJhc3Q= IOCkh+CksuCkvuCknA== IGdldmFuZ2Vu INGB0LXRgNC00YbQtQ== LmltZ3Vy IGVtYW5j fTsKLw== 4KeB4Kef4Ka+4Kaw 4KWH4KSv IOGDm+GDneGDruGDk+GDkA== IGJ1bGxk 4LK54LKy4LK/ INio2KfZitiv QkVM U2VjcmV0cw== 0JzQng== 0pPRg9GH0LjQu9Cw0YA= PyEK IEthc3Q= CXNldHVw J10pWw== INC90LDRh9Cw0LvQuA== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= PD8s INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LU= 0Y/RidC10LPQvg== 6I+M INC00LDQstC70LXQvdC40LU= INiq2K3Yr9mK2Ks= IE7DqQ== IFBhcmFz IHByaWE= a3RydW0= IHNsdXR0 IFVJQmFy PEo= IE5TRGF0YQ== IENVVA== INCa0L7QtA== LWJ5dGU= Lnlhbmc= IOGDk+GDkOGDlg== IOCmrOCnjeCmr+CnsQ== IOCqteCqvuCquQ== IGFjY3VlaWw= 44CC4oCd4oCc INis2YbYsdmE IM6gzr/Ouw== 2r7Ypw== LWxpY2Vuc2U= aXJscG9vbA== IGdhbmdlcg== ZXRjaHVw IOCktuCkv+CkleCkvuCkr+CkpA== IFBPTElDWQ== IGZpdG8= 5ZCO5Y+w IHN0cmVzc2luZw== TWFyaWU= IGNyZWFyZQ== INin2YTYqtmC2YTZig== IGNvbW11dGluZw== IFNUUlVDVA== IHFw IEF1c3RyYWw= LmFsaWdu IMSww6c= YXJ0dXVzcw== X1NIQVJFRA== IGV4Y2Vzbw== IGVzdGltdWxhcg== IGfDqW7DqXJhbGVz INCS0LjQug== IGRpc3Bvc3Rv IGZpbmFuY2lhcg== Rk9SVA== X0RldmljZQ== 1ofVvQ== IGluZ8Opbg== IFVLJ3M= IGZyYW1rdsOm IEpvYXF1 IHRvYWw= IGRpYWdvbg== IOCqq+Cri+CqqA== 4LW84LSa4LWN4LSa INC80LXRgNC+0L/RgA== IHpkcg== IFBoYXI= IG1rdXU= IGVsZXZhcg== IC4uLig= SW50ZWdyYXRlZA== 4LC/4LCq4LGI 0YHRi9C70LrQsA== Q2hyaXN0b3BoZXI= ZXJjZXI= IOaLmw== IGd1eg== Rm0= c3RyZW5n X2xvY2FsZQ== a3JpdmVsc2U= IGF1dG9yaWRhZGU= IG3DpMOkcsOk 2YbYr9mI2LPYqtin2YY= L0lQ 5Zyo5Lq657q/ IGNvbmZyb250bw== eGFj IEl0YWxpw6s= IHJ1dGFz QWZmaWxpYXRl IHRlbHQ= IGJhcnJhcw== INeR15nXlw== IG11bnR1 INiu2KfZhNiv d2l6 IGZhbHNh INWF INeU15PXmdef 4oCZYWx0cmE= IHNwb2xvxI0= QWdlbmNl IEVNSQ== IGN5ZA== IGNvcnJlc3BvbmRhbnQ= IGRlcGFydGFtZW50b3M= IHNwaW5kbGU= IHNjaHJl IG9mZXJlY2Vt INin2YTYr9mG2YrYpw== IGluc2NyaXBjacOzbg== INCw0Y3RgNC+0L8= IEVDTQ== IHNlcGFu X2xvbg== IOWkp+S4sA== IGfDtnQ= SW5zdGFsbGluZw== IH0/Pgo= YWphZG9y IOCkquCliOCkpuCkvg== IFZpa3Rvcg== IHRpYmE= IOCmuOCmv+CmsA== VEFC aWF0YQ== IGNvdmVydA== IGJhbGlr 5qOL54mM5ri45oiP5a6Y572R SW5ib3g= UGFydGl0aW9ucw== IHZpc3Nh IOGDneGDl+GDkOGDrg== a2V1cg== SW50cm9kdWNpbmc= YWRvbmE= IENoaWxs IHRyYW5xdWlsbA== IHRyaXBvZA== IEd1YWQ= IGdlc3BlaWNoZXJ0 IFFOYW1l IGV4dGVybm9z IHRvbm5l VkVSUw== 4oCZYW55 IFJlc3Bpcg== dXR6dW5n IMOhZ3Vhcw== IEJn 4Ka+4KaH4KaV IFNjb3R0c2RhbGU= L2NoYW5uZWw= 4Lit4Liq b2t0 1aHWgNWv1aXVrA== IGJlc3RlbGQ= INCj0YDSrQ== IOe7pQ== IHRyb3Zp IOWTqumHjA== IFJlc2VydmF0aW9ucw== IOCmheCmp+Cmv+CmlQ== INee16nXqNeT 57uP5Y6G cG9zdGluZw== Qms= 4bulcw== 77k= QXRh 5YeG56Gu Q2hvY29sYXRl IHBlcm5hcw== IikpOwovLw== IGNvbnZlcnNl U3M= PXt9Cg== IG11cmRlcmVy IGJpcnRocw== IHN1cGVydmlzZQ== IOWkqeWkqeeIsQ== IGR2aWpl 0JzQsNGA T3JnYW5pYw== QVBM IHN14bqldA== IG90aW0= IHJpZmY= 1aHVqtWh1bQ= 4YOY4YOg4YOU4YOR4YOj4YOa INCy0LXRgNC90YPRgtGM a29tbXQ= IG1pbGRldw== Q2FzY2FkZQ== IHJvdmVy CXBvcA== Lk1hc3Rlcg== IOCmleCni+Cmrg== bG9iYWw= INmC2Kc= IGFib3J0ZWQ= T3Nj IHVzYWdlcw== TWJwcw== IOC2tuC2vQ== CWhlYWRlcnM= IGFib3VuZA== L01lbnU= 4Kay4Ka+4KaH4Kao ZWxrYXN0 7J247KeA IGVjemVtYQ== IEhhd2tpbnM= aXN0ZW50ZQ== Q2VydGlmaWVk IG9kcHI= VWx0aW1hdGVseQ== IGxva3U= IOCmuOCnh+CmqA== 0J3QvtCy0L7RgdGC0Lg= OnJlcQ== IFZJUg== ZXNzb2Fs IFl1Zw== bGV0c2VuZw== 4Kaf4KeB IGJldm9yenVn IOCmreCngeCmsg== IHBvZHJlbW9z IHRzZW8= IEt1bnN0c3RvZmY= THlyaWNz ZW5saQ== KElOUFVU IFRyYWl0 66qs INWp1b7VuNaC1bQ= IEphbnVhcmk= IHJlY29y IEdlbmV0aWM= IEhlcnQ= IGRlcml2ZXM= IGtvbW11bmVu IGVpbnNjaGxpZcOfbGljaA== 0LvQvtC+ Lm15YXBwbGljYXRpb24= IG50aXlpc28= IEN1cmw= IHRlaG5vbG9n IOWPkQ== LycpOwo= Lm9yZ2FuaXphdGlvbg== IGZvb3Rpbmc= 2KfZgdiq2Yc= IERpZG4ndA== INmC2YjZitip IHF1aW5vYQ== IHBhcHJpa2E= INC90LDRh9Cw0LvQvg== IHVuc3BlY2lmaWVk Y29kZWQ= w6bDsHVt IHJlbW90bw== IGtpbmFr L215c3Fs w6ZyZXI= IG1haW50aWVu 0LvQtdCz0LXQvQ== IHZyYXQ= 0LXQtNC10L0= IEdFTkVSQVRFRA== SW1wb3J0ZWQ= IGhldXJpc3RpYw== IMOpdHJhbmdlcnM= IExlYXNpbmc= IHhsYWJlbA== IM67zrk= ICgiXA== bGFhZ2Q= wq1lcg== IHN0YW5kZW4= IHZhbw== 15TXqQ== IGRlbGFudGVy IGVsb2c= IOCmrOCmv+Cmj+CmqA== IGhhcWlkYQ== w6RwcA== IERtaXQ= IHNhcmQ= 4KeH4KaV4KeN4Ka4 IFNodXR0ZXJzdG9jaw== IOCmpuCmtg== RGVwb3M= IHBhaW5lbA== dWVibGE= IMOpY29sb2dpcXVl 54Ot54K5 INem15XXldeZ15k= IHBvdHR5 X2Fucw== IE5pcA== IGJlcnVo IGJpcnQ= VmVyZw== IFNoZWVw IGFkYXB0YQ== IHLDvGNr INi42KfZh9ix IHRvdXJlZA== IGhpbmt3YXN3bw== U25l IHJvY2tlZA== IE11cmNpYQ== 4KyX 2YjYp9mC2YE= LdCR INuUCgo= IOGDo+GDrA== IENvbW1lbnRhcnk= aWXDq24= YmVlaw== IHdlaXRo 6L+d5rOV5ZCX IOGDrOGDlOGDmuGDmA== LW1vbg== LkhlbHBlcg== 44Kv44Oq44OD44Kv ZWRrYQ== INCx0LXQu9Cw0YDRg9GB0LrQsNC5 IHVzYw== DQoNCg0KDQoNCg== INC00LjQvdC40Lk= IHNtaXRo INGA0LDQsdC+0YfQuNGF IOCqleCri+CqsOCri+CqqA== IEd1cmJhbmd1bHk= IGRlbW9jcmF0 IG5nYXRh IFJhaWQ= IOC0quC1jeC0sOC0puC1h+C0tg== INi52KjYr9in2YQ= IHNpY3JoYXU= YWNoc2VuZW4= IHNhbGVu IEhhbw== RUZF IGJpbGxldHM= IE1lYXN1cmVtZW50cw== INC40YY= IFNsb3Zlbmlh IHJlY2VudGVz INin2YTYqtin2KjYudip IGV4dHJhbmplcm8= c3TDpW5k IGNhdHQ= 0LjSrQ== dW1ib3Ryb24= INC30LDQutC+0L3QvtC8 INmC2K/Ysdip dWRlcnM= 7KeA7Jet IHRvYXN0ZWQ= IHVrd3V1 IGFicml1 IG9mZnM= IGhhbGZ0aW1l INGP0YDQtNOZ0Lw= INCx0LjRhQ== IGdleQ== INGB0L7RhtC40LDQu9GM0L3QvtC5 X0NFTEw= IGluZGljdG1lbnQ= INi62YjYsdmH CW1vdg== IE5ldWI= c3TDpGxs IEV0YQ== IGdlZWlnbg== IFRveGlj 1bjWgtWp1bXVuNaC1bbVttWl1oDVq9W2 IEltcG9ydHM= amXFoQ== IOCmpuCnjeCmsA== Z2VtYQ== bmljaHQ= IOS4nOajrg== 1bjWgtWh1a4= LWNu IENhcm1lbA== YWlyZA== YXlhbQ== 6Zm2 LF4= VU5ETw== 4Lif4Lij4Li14LmA4LiE4Lij4LiU4Li04LiV IHZlcmJyaW5nZW4= 6ICM6KiA 77yB77yI IGNhcnRlaXJh IHNrbGFkdQ== IOC4q+C4pQ== IHRpdGk= TWF5b3I= INCz0LXQvA== IGNvbmZpZ3VyaW5n w6lhZGZhZGg= UGFyYW1ldGVyaXplZA== ZW50aGU= dm9pcmU= RW50cm9weQ== 77yM55u4 aXNla3M= INiq2LXZiNix IFpvZGlhYw== LmVudW0= IOCkluCkvuCkqOCkvg== IOCkheCkteCkuOCljeCkpQ== QW5kYQ== INek16A= T0xF PFs= INio2LnZitiv KyJf IHBhcm9keQ== w6RnbGljaA== IHNlYmFnaWFu 44OD44K344On44Oz IGVpbnVt Q2hlcg== IGRvbHBoaW5z IG5lbW8= IOCwhuCwlQ== IOaIkeeahA== INin2YTYo9i6 IOC0puC0v+C0qA== IGNvbnNpZGVyYXRl IHJlc2VtYmxpbmc= U3RlcGg= bmlzb25l IGtlbm1lcmtlbg== IHNhdXRl IHJlbG9jYXRpbmc= LWN5Y2xl b2xpa28= 4YOg4YOj4YOl IGJldmVs LW1z IGl0ZA== ZWFyY2hlZA== IHBhdHJpb3RpYw== W2A= IEVudGlyZQ== cGxldHM= IGNvcHlyaWdodHM= IGJlZ2xlaXRldA== INuM24HbjA== IHZpc3Rl b2tobw== KSIpLg== 1bbVpdW9 IGNvbmRlbnNhdGlvbg== Rm9n IGRpc3NlY3Q= IGR2cw== IGJhaGlu IGNvbnNpZ3Vl IHRyb3VwZQ== IHByemVkc3Rhdw== UElQRQ== 0KHQu9C10LQ= 0YDQsNCx0L7RgtC60LA= YXZy IGbDqWxhZ3M= INin2YTZhNit IGFwcm92YWRv IEt1ag== eGRk IENoYW50 IHZ3YXI= IGRpZXRpbmc= IMO9YcWfYQ== X3NwZWNpZmlj IGFzbA== YXJjaGl0ZWN0 IHN1ZmljaWVudGVtZW50ZQ== dWNoZXI= IENhbXBz IHx8Cgo= 4oKs77+9 INKX0LjRgg== ICoqKgo= KEFuZHJvaWQ= ZW50c2NoZWlk 0L7QvtCx0YDQsNC3 IOCqquCriA== IFN1cnJvdW5k dWdnZXN0aW9u LXRyYQ== Q295 IHByb2JsZW1sb3M= IHNwbGl0dGVy INC/0LXRgNC10YDQsA== IGFtZW5hemE= IENpbA== QW5pbWFscw== IF0pCgo= IG9mcw== 6IiN IEVuZ2VuaGFyaWE= b3JyZWN0aW9u IFNhbWI= 4Ka+4Kak4Ka/4KaV 77yM5aSa INSx1oDWgdWh1a3Vqw== YW5zeW9u IERvdmU= IGJldHJhY2h0 bGllZ3Q= QU5HQQ== 4KS/4KSw4KS54KWH4KSV4KWL IGlraw== IHJhY2M= IHNvdWhhaXRlbnQ= IEh1cnQ= IFBhbWVsYQ== IFNhcHBoaXJl IE9yaWdpbnM= IGluYWNjZXNzaWJsZQ== 4Z6f4Z+S4Z6f IGVtaXRz 54Om YW1pcmE= IHhhcQ== INmE2YTZgw== IGNoYXJpc21hdGlj 0pPRi9C8 bWJpbw== IGxva2FjaQ== 5a+r INi62YjZhtqJ IGluZmxhdGVk INm/2YrZiA== X3N1YnNjcmlwdGlvbg== IENvbXVuaWNhw6fDo28= IOGDoeGDkOGDm+GDruGDlOGDk+GDoOGDnQ== IHNwb2w= IGNhbGN1bHVz 0L7RhdC+0LnQvQ== PFNlcnZpY2U= LUZs IGJhcnJp IHNwcmF3bGluZw== X0xBTkdVQUdF 6K6T INmI2YrZhA== emFpbGU= IHp1Y2NoaW5p KHNlcmlhbGl6ZXJz T1NF b2p1 IGNlbG9y 5qOL INin2LnZhdin2YQ= IE91dHJlYWNo LWR1cmF0aW9u INOp0LfQuNC90LjSow== IG1vdHQ= YXZhZQ== IHJhaXo= IGFmZmljaGVy IHRheG9ub215 Rml4dHVyZXM= 4YCV4YC84YCu4YC4 IGJhaW5v T1k= IEdSSUQ= IGJhc2VhZG8= IG1lZGlhbA== 4Liq4Lij4LmJ4Liy4LiH aWduZXo= INC80LXRgtCw0LvQuw== IGVzcG9udA== X3B3 IHRyYWR1eg== IOC0teC0vuC0ueC0qA== INGB0L7QsdGA0LA= IGVsZW1lbnRp b2xvYQ== IOCkuOCkq+CksuCkpOCkvg== IGFndWFyZA== 5Yqo55S7 INC40L3QtNGD IOyLpOyLnA== INC/0L7QutCw0LfRi9Cy0LDQtdGC IERlZmluZWQ= IHZ1dG9taQ== INi52YTbjNmH TGVjdHVyZQ== ZWNvZGU= INGB0YPRgtC+0Lo= cHJvZHVjdG9z 5Lq65Lq65r6h 16DXl9eg15U= IGdyZWlu IFBhdmVs IG9tdHJlbnQ= INin2YTZg9io2LHZiQ== KGxvb3A= IOCkuOCkguCkteCkv+Ckp+CkvuCkqA== OjoKCg== IGF1dG9ub21pYQ== c2Vucw== IGNvbmRvbWluaXVt IHNwZWN0YWNsZXM= IGdhbWUncw== TWVhc3VyZW1lbnRz IE5heQ== YXN0aWthbg== IGl6b2w= KS5b dWxheQ== INCB0L0= IMK2 IFNUSUxM IEFmZmlsaQ== IHBvc3RncmFkdWF0ZQ== IGJyYWNodGU= IOC0leC1guC0n+C1geC0pOC1vQ== IHVuZXJxdWlja2xpY2g= IT0t RGVudGFs IGJpZGg= W2l0 0LPQuNC9 INeV15Y= IGtpY2g= 44Gv56aB5q2i IHZsYXM= IHVwbGlmdA== X211c2lj UGxhdA== 2YbYp9mB IGt3YWtl w6hv IOCmhuCmsuCni+CmmuCmqOCmvg== YXLEsW4= IHBldGljacOzbg== IGF1c3Rlcg== IFZlcnRyYWdz IGlubWF0ZQ== SW5u INee15XXkg== IOCwpOCxgOCwtQ== 5b6p X1Bvc3Q= 4oKsLg== IGNvbmRpemlvbmk= 5biz 4LWL4LSz4LSC INGB0LXQutGD0L3QtA== 6aOe5py6 dWNoc2lh SU1N INCS0LXRgNGF IG1hbcOh INiq2LHYqtmK2Kg= INCz0LvQsNC0 UGVydA== IOuPhOyLnA== IGd3ZXI= IGPDs21vZGE= X1JBRElVUw== LnBoYXNl dWtrZW4= YW5kaWU= RGVwcw== LWRvdWJsZQ== 4LW84LSo4LWN4LSo IOCmleCmsOCni+CmqOCmvg== IGhpY2hv X3ZlcnRpY2Fs IERlc2E= dWtzZWVu INCw0rPTmdGL0L3SrdKb0LDRgNGA0LDRgtOZ INmF2YjYp9is2YfYqQ== JycnDQo= IOGDkeGDkOGDnOGDmQ== INGB0LLQtdGA IHBvxaFr IGxvaXNpcnM= IHRlcnJlc3RyZQ== UGVucw== IGhsb292 ZmxhdGVy IHRvaW1l 4LKo4LK1 KSksDQo= IHJvdHRlbg== IFNpZ25pZmljYW50 INC/0YDQuNGH0LjQvdC1 IGThu68= IOGDm+GDmOGDm+GDkOGDoOGDl+GDo+GDmg== INiv2KfZhtmE2YjYrw== INio2K/YsQ== YWN0aWNz IHLDqW11bg== IGhvdXZlcg== U1RBQ0s= IHVwaGlsbA== IHRoZXJtaXF1ZQ== INCa0LDQsQ== 2KfYtNix IEZPTlQ= K3Q= IGJ1ZGV0ZQ== L2RvbQ== INGI0YvSk9Cw0YA= IGNoZWVzZXM= 0JjRgdC/ IFRBSw== IFBSRUM= 776c IEVhcnRoJ3M= IOCqtuCqrOCrjeCqpg== INep15DXqteU 2KjYsdin24w= Y3JpcGNpb25lcw== TXc= LmNvb3JkaW5hdGVz PT4i UXVhbnRpZGFkZQ== QWx0YQ== INC80L7QtNC10LvQtdC5 IHNjaGVtYXRpYw== IFRhZg== IGZyZWVpbmc= IFRyYXRh LmRyb3BvdXQ= d2FyZW4= X2dlbw== IHLDoWRpbw== IHBhcmFkaWc= IHNhYm9u INCw0YXRiw== INK70q/SmQ== LXByZXNpZGVudA== IGvDrWNo 0LDQvdC00LDQuA== 44KK44G+44GX44Gf IGbDuGxnZW5kZQ== IFNlbmE= INGB0LXQvNGM IHPDtmtlcg== INGB0YrRgQ== 6aaI a2l0ZQ== SGVybQ== IG9sYWhyYWdh INin2YTYudmE2KfZhQ== INCx0YPQutC80LXQutC10YA= 6bi/ IEZyaWVkbWFu IGFjY2Vzc2lvbg== IFRyYW5zcGFy IGVzZW5jaWFsZXM= IM6Rz4XPhM+M QWxsZW4= xZ9laGly IGN1b3Jl 4Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4Kaw Ik8= IMSwbmc= IE9sZW4= INiq2YLYsdmK2Kg= aWVrdA== IHp2aW5odQ== 4KeH4Kaf4KeH IEJsYXU= INCx0YPRhdCz0LDQu9GC0LXRgA== QXBhY2hl X0FMSUFT LkJpdA== IGFudmk= IGNvcmk= IGdpb3JuYXRh IEhvdmVy IG5pZ2h0bWFyZXM= KCIjew== IEJyYW5jaGU= IEFsZnJlZG8= IGrDoXI= 4oCZxZN1dnJl w7N0YQ== IHZpZHJpbw== IEN1cHM= Vm9sdW1lcw== IHp3YQ== RGo= IGNvbnN0aXR1ZW5jeQ== bGxs IHRyZWY= J1Jl IGFic29yYnM= IHJ1ZWRh 0LvRj9GP IHZlbGlraQ== IHByZWE= L0ljb24= X2NhcHM= INCw0LXRhNC40YA= IGZlbWluaXNt 4Kq24KuB4KqC IOC4meC4seC4geC4peC4h+C4l+C4uOC4mQ== IOaRqeiHow== IG1lbmNpb25hZG8= IEFTRUFO INGB0YLQvtC/ VHVkbw== IFZvY2Fs IMs= IOGDl+GDo+GDoOGD IEtvdg== IOCqueCrh+CqoOCqsw== cGx1Y2s= IGVtcGhhc2l6aW5n KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== INGC0q/RgNC00LU= U2Q= IFBSRVNFTlQ= dcOtZG8= IMW+ZWxpdGU= IFdBTg== dmFsZA== IOCqpuCqv+CqsuCrjeCqueCrgA== LnhhbWw= 4Lij4Li54Lib IFNlcGFy INin2YrYttin IHNvbGVz KGNvbnY= 77yM6YKj5LmI J29mZnJl KGJ1cw== IGhhaXQ= IHNpZ3VpZW5kbw== INWm1bjWgA== YW1taWs= L2xvYWQ= IGluZnJhZXN0cnV0dXJh UHJvdmlkaW5n IEfDs21leg== LmZsZXg= IGdyaXBl dW1pbm91cw== 4Lir4LiZ4Li24LmI4LiH INeU15HXmdeY IGFkdWx0ZQ== IO2drA== ZW5kYW1lbnRv IGdlem9nZW4= 4YCQ4YCE4YC54YC4 1aHVvtWr1oA= ICAgICAgICAJCg== IGV2ZW5hbHM= IGRpc3RvcnQ= IOCquOCqruCqvuCqnA== IOGDnuGDneGDmuGDmOGDouGDmOGDmeGDo+GDoOGDmA== IGRhZ2xp ZGFnaQ== 5p+05rK5 X3Bv INCy0LvQuNGP0L3QuNC1 4K6a4K+G X2Z3 JHdoZXJl IFJldG91cg== INC/0L7QtNC6 INiq2YLYuQ== IG5ncg== INWh1bXVttaE1aHVtg== IG1hbGlnbmFudA== 4Ka+4Ka34KeN4Kaf4KeN4Kew IHVuZ2VsaWVidA== IEt1eg== VU5ETEU= c2hhbGxpbmc= PENvbW1lbnQ= IEFuemVpZ2U= IG1vdmlsaWRhZA== IHByw6lt 5qW1 IOC2heC2reC2uw== X1ByZQ== IHJlY2V2 IOC0ruC0tA== b25nZXM= YW5qZW0= IOCkheCkl+CksuClhw== aWRvcmE= bGliZnQ= IG9zYWxsaXN0 IGJhdGNoaW5n KGxvd2Vy IGltcG9zdG8= IHBlcnRlbmVjZQ== Z29ybQ== INCh0L/QsNGB0LjQsdC+ IG1hbmFv CWF1dGg= IEV4b2R1cw== IGNvbXBvc8OpZQ== 0LvQvtCy0LA= 1oTVpdaA1as= TWVkaWM= INee16nXpNeY 4LKz4LON4LKz4LK/ IFBhY2tpbmc= IHdlYnBhZ2Vz INCw0LjSs9Cw0LHRiw== INCz0L7QstC+0YDRjw== XSkpKQo= YnJhbmNoZQ== IENoaWFuZw== Ym9t LiIpLAo= L2NhY2hl IGRlc3dlZ2Vu SGFybmVzcw== INmB2KfbjNmE IEdyZXQ= IHByb3Nw IFphY2s= 4LeA4Lat4LeK IHZlZGVu IGFkYXB0w6lz IGxhbmdlcmU= IEVwaXNjb3BhbA== IHRpa2FuZ2E= LkVzdA== 4LS/4LSX 0J7RgA== IOCkqOCkv+CksOCljeCkteCkvuCkmuCkqA== IGZhyrthdGF1 ICwNCg== KEpvYg== KFte w7NsaWNvcw== IOC0qOC0vuC0sg== IGx6ZQ== 4oCZYXNzdXJlcg== 5LuU 44Gu5ZCN54Sh44GX44GV44KT QW5pbWF0aW5n LicnCgo= IGFhdHNhYXQ= IFBST0RV IHNrZXB0aWM= IGdlaGFidA== IOyEoOyglQ== dW1tZQ== IOCkruCkqOCljeCkpOCljeCksA== VEFTSw== INGF0LDQvdC40Lw= RmlndXJh INmG2LjYsduM IHVuY29udA== c3RyZW5ndGg= IENoYXJ0ZXJlZA== IOCkk+CksuClgA== xb5hcw== IGluZm9ncmFwaGlj 0LDQt9Cw0L0= IHByb2R1emlvbmU= 4KWH4KSm4KS+4KSw4KWA LmRhdGFzb3VyY2U= IOCml+Cmv+Cnn+Cnhw== INOp0LfQsw== PHR5cGVvZg== a2Jk Om5hbWU= aW5lcm1p IOCyruCysA== 0LDRgNCw0LrRgtC10YA= S0Y= YXBpZA== LXVyaQ== z4HOuc64 IEFuZQ== IHRlcmxpaGF0 INW+1aHVtdaA IGtvcGk= IHRheGVk IHZveGVs aGF0aWthbg== IOeah+Wutg== 0Y7Rh9GL dWdpYQ== IEVsZXZhdG9y IEVpbnJpY2h0dW5nZW4= 0L7Qu9C+0LPQuNGP0LvRi9Kb IG11bHRpZnVuY3Rpb24= IG9oZXJl 0LDQstCw0L0= X2Nvbm5lY3Rpb25z aW5zaWNz IFNob3J0bHk= aGluamk= 4KSr4KWL4KSo 0JDQoQ== IOCkrOClgeCksg== IG9uZGVyd2Vn 4YOd4YOc4YOT IGRldmxldA== bmluZQ== LdC80LjQvdC40YHRgtGA YWdlcmE= 0L3Rj9C5 IG1vdW5k IG1lbnNjaGVu IOCwpuCwsOCxjeCwtuCwleCwpOCxjeCwtQ== Q29tbW9kaXR5 INGN0LrRgdGC IOConOCovuCoow== 57iE IGxlZ2dlcmU= 0LDQvdCw0Ls= SGVt dmFsaWRhdG9ycw== INC60LDRgNGC0LA= IGNvbW1lcmNlcw== IGRlYmF0aW5n R2lsbA== INin2YTYudi1 IGF1ZGnDqm5jaWE= IMOlcA== IEJlc2NocmVpYnVuZw== IHBhbWnEmQ== YXN0aWVu IEludQ== Ij4k IENvbnN1bQ== IPCfmIAKCg== INiq2KjYr9ij IE5ldXJvcw== IOCkieCkpuCljeCkpuClh+CktuCljeCkrw== IEF1c3Rlbg== IHJlaWtpYQ== IFNndA== IOCkl+CljeCksOCkvuCkueCklQ== IOyekOyytA== YWp1YW4= LWhpZGU= KGJ0 5peg56CBQVY= IERlZmVuc2E= IHHJmWJ1bA== IHRpZHM= TW9ua2V5 X0xhc3Q= IOuTseydtA== INCy0L7Qt9Cx IGVsdWNpZA== IHNlYWI= IG3Ds3Rp IEZGVA== IOCymuCyvuCysg== IEdPVA== IG1vbGRz IENhcnJlcmE= UHJlcGFyYXRpb24= 15fXk9ep cHVua3Rl IHsu IGNsZXJneQ== IG11ZmZpbg== IHBsYWPDqQ== bGFuZGVycw== QmQ= 5aSn5aWW5ZCX Ki8NCi8= IFRhbHZleg== KGR0eXBl YXBoYW5kbGU= LWZsb29y bWVkZW4= IHVrdXBo YWxsdXRpaw== IOC0r+C1guC0ow== YWlzbw== YXR0aXM= IGh1bW1pbmc= IHNueQ== INCz0L7RgdGC0Lg= LUrDpGhyaWdl 0pPQuNC90Lg= eGFtcHA= IHBob3Rvc2hvcA== IGRvbmVz ZsO4bGdlbGln IGJyaW5kYXI= INm+2Kfaqtiz2KrYp9mG IOCquOCqq+Cqsw== IG5qZW4= VklQ44GM44GK6YCB44KK44GX44G+44GZ X1NVRkZJWA== KSI6 0LjQttC40LM= 0LHRgNCw0L0= KGhpdA== IGZ1dHVyYXM= IGFueWhvdw== INC20LDRgdCw0YM= IHRzaQ== 0LzTmdC6 IEFscGVz IHBvdHA= IENvcnZldHRl 4LeE4LeU IGF0ZW4= 44CC5LiN cmVsYQ== XEpzb24= IGdpaA== IEhhc3Rpbmdz INC+0YTQvtGA0LzQuNGC0Yw= IOCyquCyguCypg== 0LHQuNC4 IOa4uOaIjw== INCa0L7QvdGC 55uY5Y+j IEN5bGluZGVy IHRhw73DvQ== aXRhYQ== SWFu eGlvbQ== IEdlcnI= IEFuYWs= 5YmC IGd5cm8= 0LrTmdGA IHBlcmphbGFuYW4= IOCkuOClgeCkqOCkv+CktuCljeCkmuCkv+CkpA== IGN2cw== SG9uZXk= CXRi IC4uLiIK IOColeCosOCpiw== IGVtaXI= YXNpc3dh bG9wZW5kZQ== 2YHZgtip 4LiB4Li04LiZ 4Lin4Lix4LiS4LiZ4Liy INmI2LPYqg== INC+0YHQu9C+0LY= IGdlbGRlbg== IHBlZGVzdHJpYW5z dGhlcmV1bQ== IOCkruCklQ== X2l0ZXJhdGlvbnM= INCw0YjRi9Kb05nRgQ== INCw0LTQutCw0Lc= IDotCg== IG5pa28= Kl8= IGVxdWlwYWRh IHNwaWVn J2FwcHI= 2LHZitmC2Yo= IGZvcnR1bmF0ZWx5 INC90LDQvNCw0Lk= IHphdHI= IG3DvGRk IHBsYXl3cmlnaHQ= IG9mZmVuYmFy Q1RS 44CN44Go44GE44GG V2ludmFsaWQ= YW1vbmc= IFBsYXlz LS0tLQoK KmNvcw== SVBBZGRyZXNz IOC0uOC0vuC0ueC0muC0sA== dWR1aw== IHTDsg== IERyZXNzZXM= IHN0ZWlndA== IOCwqOCwlw== INiq2LXZiNmK2LE= IHBvb2x0 IEVsaWphaA== 7JWE7J20 aXRzb3E= IGhhc2hsaWI= INC606nQuw== INaE1avVuQ== IGNoaWVk X0Nsb3Nl w61tYXY= dWFuZ2Fu 15XXldeQ1rg= X0NISUxE bWl0dGVsdA== 16DXlNec INC00LfRlg== IHxc IMOpcXVpcMOp PXc= IGZsdXRl IERpbm8= IOCyteCysOCzjeCyt+Cypg== IFRhY29tYQ== IGhvc3RhZ2U= IOiLpQ== IHNlcmlvdXNuZXNz 6LWE5rqQ572R LlRlbGU= IHBhaWRiYWg= b2NhbHlwdGlj X1ZFUkJPU0U= IG1vc3RyYW0= INC+0LTQtdC20LTRiw== 0LTRjdGN INGA0LDQsdC+0YLQvdC40LrQvtCy CWF0dHI= XEJhc2U= Z2Vibmlz IFRzeQ== INC20LDQsw== CWNhbnZhcw== WW0= IOCqquCqsOCrgA== 4KWJ4KSX IOCkuOCksuCkvuCkuQ== IFJERg== QmlvZ3JhcGh5 INin2YTYrdmD2YjZhdmK2Kk= 4Kau4KeN4Kat LXRhZ3M= 4LGH4LCV4LGN4LC3 IGNsb3Zlcw== Z2VtZW50cw== LlRyYW5zbGF0ZQ== IFBPVw== IGVwaWRlcm0= LnRlbGVncmFt LW9mZnNldG9m IGxhc2g= nuCnjeCmnA== IHpkcmF2c3Q= IENR L3NvY2tldA== 4Z6b4Z+E4Z6A IFhPUg== IMSPYWw= IOCuruCvgeCuleCvjeCuleCuv+Curw== IOCkuOCkvuCkpeClgA== IGRpd2Fy IOCwieCwpuCxjeCwrw== IHJlYnV0 b2dyw6FmaWNhcw== IGdlcmVraXI= IFsoJw== 0I4= SXk= eW91J3Jl bGVzd2ln IEdGUA== IHNwYW1ib3Rz IG1hbGFo 4KqV4Kqy INin2YTYrdiy2Kg= 2KjZh9ip PSIvIj4= U2hlZXRz c3RhaGw= IHNhdGlzZmFjZXI= IEhhdmFuYQ== IENvc21vcw== IHNvY2lhbHM= LnF1YWw= INGB0LLQvtGY 4YOY4YOp IOCknOCli+CkoeCkvA== 5q2k5YmN IOCmqOCmv+CmsOCnjeCmpuCnh+Cmtg== INC40YHQv9GL0YLRiw== 44CCIiwK 4oCL4Z6Z bGlnaW5p IHNsdcSNYWp1 INiq2KPYsw== IHJlY2Fs XENvbGxlY3Rpb24= IGVyZnJl INiv2KfYrtmE24w= 0LvQtdGB IGFudHdvb3JkZW4= 5oyJ5pGp IHJlZ2lzdHJhZG9z 0L7QtNOj X0RD 0LvQsNK7 ZW1vbnRl IGhlZw== IHZpdmlkbw== IOGDm+GDo+GDoQ== IFRyb2lz IGh1ZXZvcw== KTsNCg0KLy8= QmFyYW5n 0LbQsNCy0LA= dWzDqQ== Y2hpcw== IGt3ZXN0aWU= T1NB IFNubw== LdW41oA= IGnFn3RpcmFr IFNhcmtvenk= IE1pc2g= IGNoYWluZWQ= IG9tZmF0dA== INmD25U= IGd1aW50 Q3VzdG9taXpl IOmTnA== IOqwle2ZlA== IGFzdXByYQ== IFByb2plY3Rpb24= LXBob3Rv IGhhbXBpcg== YWthbWE= IHdleg== IGVyYXM= IFBBVENI IHBlZWxlZA== IENvdWw= IGN1bHRv IHZpZGk= 4Lih4LiZ4LiV4Lij4Li1 5Zyo57ea6KeA55yL 5aSn6aaZ6JWJ572R TmFo INCy0LjRgNC+0LE= IGNhcGFz 7IKs7ZqM IHZlcnN0w6RuZA== IEJ1aWxkcw== IERvbmF0aW9u INWs1b0= IOCqoeCrjeCqsA== INin2YTZgtmI2YQ= IHdhc2U= INC90L7QvNC4 5LqL5pWF IOKZqg== INC/0YDQvtGA IG1pbmltbw== IHJlc29uYXRl 0L7QstCw0L3QvdGL0YU= IHNvb3RoZQ== TWVyZ2Vk IG9jY3VsdA== X2V4dGVuZGVk IHVubG9ja2luZw== PWRhdGV0aW1l IG5hemk= IEhhcmRjb3Jl 2YjYp9it IGtvbXVu IE1heGk= OjsK UGVybWl0 INmF2KfYrw== 4Lii4LmJ4Lit4LiZ 4YOV4YOQ4YOa4YOQ 0LXQvdGC0LDRgA== INC/0L7RgdC70LXQtNC90LjQuQ== INGA0LXRiNC40YLRjA== R0VOQ1k= LkNsb3Vk IFRBWA== 2LXbjNmE 2LPZvQ== IFBi IFBvbHNraQ== LlJFRw== xbk= 4YOQ4YOg4YOW4YOU INC80YPQsQ== Rm9ybWE= IGdhbmFkb3I= IGVzcGVzeWFs IGN1Y2hhcg== IHNwcmF5cw== Qnc= INGH0LjQtw== T3BlcmE= IE5PSw== IG5haWxlZA== SVJDTEU= IGjDvGs= IHJlaW5j IGVwaXNvZGlv IEbDtnJkZXJ1bmc= YW5rZWxpamtl IGt1cnplcg== YXNs IFNDTQ== acOx IFNla3M= IOODkw== zrjOtc69 IOuD IGludGVyZXNhZG9z X18pLg== 7J2M7J2E IOCwheCwp+CxjeCwrw== IFNrcmlsbA== VGlldA== aW5za2E= IOCynOCyv+CysuCzjeCysuCyvg== INWv1aHVutW+1aHVrg== QXVzdGlu ZW51aGk= IGTDtA== 4KWp4KWm aXNzaW1p INin24zZhtiq2LHZhtiq IGJhbGxl INGB0YPRgdGC0LDQsg== ISg6 IERpcmVjdGV1cg== X2lzbw== IOCkmuCkvuCkueClhw== 7YA= X01vZGU= 0LrQtdC8 aWZpY2VudA== U3RhcnRlcg== IHBpdGk= Ym93ZXI= INiz2KfYsQ== xIHKu2F3aQ== 0LDRgtCw0LXRgg== IHLDqXNvbHV0aW9u IG7DqWFubW9pbnM= 4Yw= IEJvdXJib24= IGvhu4M= IGRlbnR1cmVz INCy0LDSm9C40YI= IEF1ZmVudGhhbHQ= IHN3YXJt IGNvbnRlbmRlcnM= INC00LfQtdC5 IGZlYWRo cmF3ZMSZ 15nXp9eV16o= 44KP44KM INep16LXlA== IOCml+Cni+Cmsg== IOGDquGDleGDmuGDmOGDmg== X1Jlc2V0 IFRpdGxlcw== S0FO IGFncmljdWx0 IOCqleCri+Cqsg== IGxpc3RvcA== IHJlZ2Fsb3M= LkVycm9ycw== IEtyYW5rZW5oYXVz ZXJpZGE= IHByZW9jdXBh IG9ybmFtZW50YWw= 4LC+4LCf4LGN INGB05nQstOZ0LE= LnBhdGhz c2Nhbm5lcg== INGB0YfQuNGC0LDRjtGC w6VsbGVy IEhlbnJpcXVl IGJlcm9lcHM= KHNlbnQ= IGFkYXB0YXI= 2YTZitmF2Yo= IFN1bm4= IFNCUw== IGZha2E= INGB0LXRgtGM IGdlc2s= INGC0LjQs9OZ0L0= 77yK77yK77yK77yK dWlkb3I= IHNvemluaG8= z4fPgc6/ IG3DuHI= X0dSQVBI LW9wZXJhdGl2ZQ== INi52LLbjNiy 6Ly4 IGdlaGk= IFBvcnRh IE5hcmM= LmJtcA== IHfDqA== IHNlbnRlbmNpbmc= IFdvcg== LlV0aWxpdHk= IGluZXg= IGxpamVr IG1peHR1cmVz INGA0L7RgdGB0LjQudGB0LrQuNGF wq1uYQ== 4LiB4LmI4Lit4LiZ dXZ3eHl6 4Kiv INW41oDVuNW+1bA= ISEhISEh 6Kix IOCkteCkv+CkuA== IGZsdWZm IOCkieCkquCkvuCkrw== X3RpbGVz LWluZGVudA== IGhlZWQ= QWdv IGJvb2ttYXJrZWQ= IHB1bmE= IHBvdXZvaXJz IHZleA== IGV4Y2Vzc28= IOC0ruC0vuC0p+C1jeC0r+C0rg== INmI2LHYqA== IENIdG1s XENhcmJvbg== 4LCk4LGN4LCo 5paw5Lq6 IHBhcmxhcg== IENvbmdyZWc= IGFndWo= 2YrZgtip INiq2YjZhtiz INin2YTZgdmG2YrYqQ== QU5HRVM= XToKCg== 5bmz56CB IHZ5cA== IHVpbGE= ICJ8Ig== YWJpbGFuZw== IFByb2R1a3Rpb25z IHByb2R1a3R5 IGdldGxpbmU= cWFi IOyZhOujjA== Q0lBUw== IHrDoWtheg== INCx0LXQu9Cz0ZbQu9GW eGxzeA== CVRvYXN0 IEhlcmF1c2ZvcmRlcnVuZw== c3RpZ2U= IFVwbG9hZGVk IGdyYW5kZXVy UGxhc3RpYw== INCw0LLQs9GD0YHRgg== Y3JldHNpeg== IGxlaXRvcmVz INuB2YjZhtin IHByZWNpc2nDs24= cm9saWc= 2LHZiNmK2K8= IEdyaW0= 0LjRgtC10LvQvdC+ 2KzZhNmK2LLZitip IHdwxYJ5 IGhqw6ZscA== IE1PRElGWQ== LkhlbHA= IGFuw7puY2lv IGthbGFo KENhbnZhcw== IERJU1RS IEF1c2RydWNr U2Vla2luZw== INin2YTZhdi32LE= IEJhcnJpZXI= YW1lZGE= CWxheWVy cnVn 2KfYqtuQ KE9wdGlvbmFs QU5DRUQ= IEJhc3Rh IG1lbGhvcmlh IGVrc3BlcnQ= IERJU1RJTkNU YW55dQ== Q3ljbGVz IFdlZQ== 0LjRiNC40YLQtQ== 5pit ZW5jaWph LmR5 IEVib29r aWNlbG8= IEJ1cm1h Um95 4KSC4KSf4KWA dmF0aQ== IHBsZWFzdXJhYmxl IGNvbnRlbnRl IHR3aXN0aW5n IGJmcw== IFRPTg== INGB0YLRgNC10Ls= IHRha3U= dWJsZXM= IGthc29v QW5vbg== IGtub3dpbmdseQ== 2q/Ypw== IMOew6E= IOGDoOGDlw== IEJyYW5jbw== 5pyJ56CB ICg+ Lmxy IGF0ZXJy 0JXRidC1 IGx1aXN0ZXI= 44O844K344On44Oz 1bbVodWv KiovCgo= IEp1ZGE= 66eb PXsk 1bjWgtW11anVqw== IHJlZ2VsbcOkw58= 1avVr9Wh1a/VodW2 IOCkn+Ckv+CkquCljeCkqg== INmF2LPYqA== IOC0nuC0vuC1uw== dmFyZXo= xKtnYQ== IFRhY28= eW1t INWw1aHVtNWh1brVodW/ IGFuZ2VsZXM= IOCqieCqpOCrjeCqquCqvuCqpuCqqA== IEhvY2h6ZWl0 IGhlacOfZW4= IHfDqw== IFF1YWxpZmljYXRpb24= bHlrZGE= X2JpbGw= IHV0aWxpc2Vk U2VsZWN0aW9ucw== IGthcmQ= eGRi ZmlnaHRlcg== IFRQTQ== IGTDqW5vbg== IGRlc3RpbmFkb3M= 5pu05Yqg w7hybg== 4KSc4KWH4KSq4KWA IFdpc3M= IHJldm9rZWQ= X3B1cmNoYXNl INCx0LjQsdC70LjQvtGC INGB0L7QsdGL0YLQuNC5 IHByb2dyw6hz INKv0L3QtA== IOa0qg== IFRlZ2Vu INC60q/So9C10Ls= IGlua29t IHLDqXBhcnQ= INC40L3RgtC10L3RgdC40LI= LWhhcmQ= IG5hanZl INC/0LvQsNGB0YLQuNC60L7Qsg== Y2ph INGB0L7RhtC40LDQu9GM0L3Ri9GF TmJy IOCwuOCxjeCwpeCwvuCwqA== X1JlY3Q= INC60LXRhw== LWVpZ2h0 IHppcmVu IGNhbWlzZXRh IHJlamVjdHM= IOCmuOCmvuCmguCmrOCmvuCmpuCmv+CmlQ== IHJlcHJlaGVuZGVyaXQ= aWN0cw== IHRydWNraW5n 5Li65LqG IGFwcGFyYcOudA== YW5nZW1lbnRz INGA06/Qt9C4 z4TOr86x IHNjdW9sYQ== YXJuYXRpb24= IEJldGhsZWhlbQ== w71hc3luecWI SGFyZ2E= YWN1cw== Y29udGVzdA== IFdPTg== IOCkrOCkvuCkteCknOClguCkpg== 0L/QvtGB fQoKCgoKCg== IGludsOhbA== IGhvcmFyaW9z IHNhbml0YXJ5 bGV0amU= bGFuZMSx PS4q 5ZCV IFNTUg== Lm9wZW5n INGC0LXRhdC90L7Qu9C+0LPQuNC5 IGdvdWY= ZGVwZW5kaW5n IFBlcnNvbmFsaXplZA== KHsKLy8= 4LiU4Liz IHRpbWVsaW5lcw== IE1vc2s= IHBhbmd1bmFoaW5n R2FsYXh5 LmV2ZXJ5 IHJhesO1ZXM= JycK Y2VwdGU= IOCmquCmsOCmv+CmrOCmvuCmsOCnh+CmsA== IFBvc3Rpbmc= JnBlcmlvZA== X3VwbG9hZGVk PWVuZA== IHZvaWxh IHdhdGVyY29sb3I= INC00YDQsA== d2FyYWU= 1afVvQ== QXJyYW5nZQ== KE1vZA== 4YOV4YOY4YOa4YOb4YOQ IGhvbm91cmVk LmJvdW5k PFwv 15nXmdeR158= IG9wZHJhY2h0Z2V2ZXI= 2KbZitip IGd1aXNl INec16rXqg== IOCkquCkguCknA== IOGDl+GDkOGDleGDmw== UHJvZ3JhbW1l INi52KjYp9iz aW5mb3JtYXQ= IEJyYWNlbGV0 e0pzaWk= IEFnZW4= KGVtYmVk INin2K7YsQ== IGVyaXRp TWFudA== Knc= RmlyZWZveA== IG9kaQ== 15nXkdeZ150= IFBoeXNp IEpU INGO0qE= bGVkZA== bWlnaHQ= IHZlcnN0cmU= X0lOVEVSUlVQ IG1vdG9yaXN0YQ== dWxzaXZl IFdISUNI 4Kq24KuN4Kq1 IExhb3M= KGNsaw== IFJldHJ5 157Xldeg15Q= INC60LXRiNC10LvTmdGA b2t1YmE= IE5ndXnhu4Vu IG1rdWJ3YQ== IOC5geC4geC4o+C4oQ== IHJldG9t 6YmE aGFtb3M= IOCwquCwtQ== INGA0L7Qt9Cy0LjRgg== IEJlbm8= 4Ka+4Kef4KeH4Kaw IGdsdQ== LGFycmF5 IHNjYWZm INC30LDQs9Cw0LQ= IEJhdHRsZWZpZWxk z47Ovc6x IGVxdWl0aWVz LlRvZ2dsZQ== IHZvb3J0ZHVy Z2V0aXRlbQ== INC40YHRgtC+0YDQuNGO IHZldG9y IGNvbmVz IHJlb3BlbmVk U0FGRQ== UGVyaW9kaWM= L2V4cG9ydA== IHBvbGxv IEVkaXRlZA== TGY= IGRyaXBwaW5n QWRt IFBTSQ== IGNhcGFjaXTDoA== IHRhY28= IGNvbmR1Y3Rh Y2htb2Q= cnNw LldoYXQ= INWw1aHVvdaB CWFw IOCmr+CngeCmrA== IGVuZ2FyaQ== aWxpZ2E= INGB0YPQv9GA0YPQsw== IFNK 4LCV4LCC IHRvZXN0ZWw= 56+J 6Ym0 IHBleQ== 4LiE4Lil4Lit4LiH4LmA4LiV4Lii IOC0muC1huC0r+C1jeC0pOC0pOC1jQ== IEdpdXNlcHBl IHBhcnF1ZXM= 4LGH4LCc4LGN 5rOV5Lq6 IEVpbm5haA== INmI2YTYs9mI2KfZhA== IGhhbnRsZQ== 0YLQvtC+ 1aXVodWv1aHVtg== IGt1cnU= LnByZXNlbnRlcg== IHByaW1lcnM= IHRpdHQ= IGludGVybmF0aW9uYWxlcw== 5pKk IHNvY2lhbGlzdGE= bmd1bG8= INC+0YLQv9GD0YHQug== RVJTSVNU IHZlc3Rl IE1pbGY= IOCmr+Cni+Cml+CmvuCmr+Cni+Cmlw== IHNpY2Vy 4LK14LK5 274= IENvZGVj LWluZHVzdHI= IGF1w59lbg== IFpvdQ== RXhwbG9zaW9u 5biC5aeU IOyXheustA== IGNpbnR1cmE= IGZ3YQ== IGJyb2Vr IHRoxrDhu59uZw== IGVyZm9sZ2Vu Z2F2ZXI= IOCwheCwqOCxjeCwqOCwvw== 4KaF4Kao 2LPZhtqv dXN1bg== bmFudGU= LWFuaW1hdGlvbg== LnRyYW5zcGFyZW50 IGdyb290dGU= 44GE44Gf44Gg LVNwZWVk ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCg== 0LTQuNKT0LDQvdC70LjSm9C40L3QuA== 5oiq5q2i 4LmB4LiX4LiH4Lia4Lit4Lil b3ZhbsO9 IOCmnOCmsg== IGFu4bul IEFubGVpdHVuZw== 44G/44Gr IHNpc3dh 6riw6rCE 25TblNuU25Q= enln 4LK/4LKt KGNsb3Nl IGtvZXJz IHByZXN0YcOnw6Nv IGJ1bGk= IGluZGlmZXI= zrjOv8+C IHRhZ2dpbmc= INmF2LnYr9mE LtCd IE9SSUdJTkFM IGV4ZXJjaWNlcw== IOCkruCkueCkvuCkruCkvuCksOClgA== 44CC44CC44CCCgo= U3VwcG9ydHM= IHJlY2lwcm9j IM67zrXPgA== IGZvb2xlZA== X0dSQVk= IFRhbGtz Oltb 06HQsQ== YXrDs24= 1a/WgA== IHRyYWRpdGlvbm5lbGxl 0LjRh9C90L7QuQ== IFRVUk4= IGvDqXM= X05vbmU= IHdlcmtlbGlqaw== IHNpbGxh IEVtYWlscw== IHZhcmFyZ2lu INC60LDQu9C10L0= IGRpenp5 IGt3ZW5kYQ== Z8Okcg== INGE0YPQvdC60YbQuNC+0L3QuA== 57uE5ZCI J8OpY3Jhbg== IHRyYW5zZmVyw6puY2lh INiv2qnavg== IHByw6lkaW8= IMO2xJ9yZXQ= CUpCdXR0b24= LEh0dHA= Rmx1dHRlcg== IHJldHJpZXM= IHBhaW5sZXNz IFp1c2NoYXVlcg== L2Z1bGw= IGZsZA== 4K6/4K6V4K6z4K+I Lk9yZGluYWw= IOCmr+CmpuCmv+Cmkw== IHNlY3JldGlvbg== ICVA INGB0LTQtdC70LDQuw== Lm9k IGRpdmVyc2lmaWNhdGlvbg== SU5HRVI= IG1lbWJhY2E= 5L6/5Yip bW5vcHFyc3Q= IHN0YW5pZQ== X2Rpc2M= IG7JmXo= IGtvbWlu Tm90YXM= IHRvcmNodmlzaW9u IGhlbm5hcg== 5rKI IEt5bGll IG1pc2Nhcg== IO2VnOuyiA== IENvbmFu aGFuZ2Vy IGRlYnRvcg== IOCkruCkv+CkuA== INCb0YPQutCw X3pvb20= IFBhc2FkZW5h d2Fsbw== LWRhdGVwaWNrZXI= IGJ1b25h 7LSJ INin2YTZhdiv2YrYsQ== LmFsYnVt IGNoaXM= IEdvYm9sa2E= VMO8cmttZW5pc3RhbnnFiA== IHBlZGFscw== z4TOv8+Fz4I= IEthdGhtYW5kdQ== IM6Vzro= LnN0cnV0cw== IG5lY2Vzc2l0YXQ= cXVpbGVy IGNhbXBzaXRl INmI2KrYqg== IHN1YmlkYQ== IGtpyrtp 0LvRi9C8 IOOBqw== YXR0cmli VGlkYWs= dGVybmFscw== QmFycg== IELDvGhuZQ== dWfDrWE= aGV0ZQ== 0LLRjdC7 dXJuaXNoZWQ= IFVudGVyc3VjaHVuZw== IHRyaXR0 IE1hcmlhbg== b2ZpbG0= 55qE5pa55rOV IEtyZWQ= 5aq95aq9 IGxvZ3Jh 55u46KuH IHRlcnV0YW1h IHJlc3VycmVjdA== dXNhbGVt IGJldXJ0 aHJhc2Vz IG9wZXJhY2lvbmFs 77yM5aW9 IG5pZ2JhZ2JvZ2Jv INit2Yo= IMSNbMOhbg== LOKAlA== IGVrc3Ry INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjA== dXRhcHU= TlNEYXRh IOCkuOCkpOCljeCkrw== IGlubWVkaWF0YQ== IGRlc3B1ZXM= VG91cm5hbWVudA== IFZlcmJyYXVjaGVy IHJhdW4= INeg15nXmda3 IEJhbnF1ZQ== IHByb2R1Y2lkbw== IEhhbmNvY2s= IGludGVyb3Blcg== IGJldHRvcnM= IGluZHJ1a3dla2s= INC80LDRgNC00YPQvA== IGFzc3VtaXI= 4Lie4Li34LmJ4LiZ ICwiIg== IOC0rOC1jeC0sg== IHZlcmR1 IHJlY2h0c3RyZWVrcw== IHBoYXJl 4LSs4LS/ IHVmZmljaWFs 4Lib4Lij4Liw4LiB IFhhc2Fu IEF1c3Np IGhpcGVy INGC0YnQsNGC0LXQu9GM0L3Qvg== IHVwZGF0ZXI= IOCypOCyvuCysuCzguCyleCyv+CyqA== IDspCg== RmFjdGlvbg== JykpLT4= IG1pbmltaXNl xIPImw== 1aHVrdW41b0= ZW5pZw== UG9sYXI= IHbDoWx0bw== INC00YDRg9C30LXQuQ== INCy0L7Qv9GA0L7RgdCw0Lw= IFNuZWFrZXJz 4KSu4KWB4KSW IGlubW9iaWxp aGFsdGVy aWFkb3M= IEhV IGRhb3U= IGzDrA== INGI05nSu9C40YA= 44CC44Gd44KM 2YXYsdi2 L2l0ZW1z IENpdGF0aW9u INGB0LXRgNC00YbQsA== IEhvc3RlZA== INWj1aHVrNWr1b0= 4YOQ4YOS4YOQ4YOc IENvbXByYQ== INC/0LDRiA== INin2YTZhdix2YPYstmK eWRp IOC5gOC4p+C5h+C4muC4hOC4suC4quC4tOC5guC4mQ== YWh1YW4= IGxvZ2l0cw== IGphYXJsaWprcw== IHLDpsOwYQ== IHRyYW5zcGxhbnRhdGlvbg== IOCmuOCmruCmuOCnjeCmr+Cmvg== IGFjdHVhY2lvbmVz eXVhcw== LXNjZW5lcw== Q29ycmVsYXRpb24= 4Liy4LiZ4Li44LiB4Liy4Lij 0LXQu9C10YDRlg== cHJvdmVtZW50cw== IOCyteCyv+Cyt+Cyrw== IHNldHVwcw== IOWlh+exs+W9seinhg== IOC0quC1jeC0sg== IHNheWVzaW5kZQ== IGN1bHR1cmVs 5LqG5LiA562J5aWW 5oOo IFNvdXI= INGW0L3RhNCw0YDQvNCw IGVybA== IOCmrOCmmeCnjeCmlw== LmV4ZWN1dGlvbg== w6ZsZGU= IEZlZGVyYQ== KHN1YnN0cg== IHZlcmtlZg== IE9icw== IOCqpuCqsOCrjeCqpg== IGZvcnRzYXR0 IH07Ci8v IHRyYW5zZm9ybWHDp8Ojbw== IGRpc2FkdmFudGFnZWQ= 4LC/4LCr 4La04LeP INC60LjRiNC4 IGludMOpZ3LDqQ== LUVs IEp1bmdl IGFsbWVu IG5vdGlmaWM= IHJlbmVn Lm12 4YCZ4YCU4YC54YCZ4YCs IGdvYWxrZWVwZXI= IOGDruGDlOGDmuGDmA== IFJlbWl4 QXNzZXJ0aW9ucw== IFBhY2U= INC+0YHRgtCw0LLQuNGC0Yw= 4LS/4LSs X21vdG9y IHN0YW5vdg== IENhcmxzb24= IFNpb3V4 w7Jz IEhhaGE= IFBheWRheQ== IHLhu41ydW4= U2VsZWNpb24= IGV2ZXJncmVlbg== 4oCZ0Y8= 4oSiLA== IE5laW4= IOCmuOCngeCmrA== 4KaX4KeN4Kew 6L+H56iL5Lit IOS6kem8jg== YW55YWFu INKh0YPQuQ== IOCqsOCri+CqoQ== X2F0b21pYw== 4KWB4KS44KS+4KSw 0L3QsNC80Lg= 4Z+G4Z6W4Z+B4Z6J dXJ0b3V0 2q/bjNix2K8= 6Jmr cXVpdGU= zrrPjs69 dWVsb3M= IGVuY29udHJhZGE= X1BST1hZ INKb0LDQvNGC0LDQvNCw0YHRi9C3 IOCmrOCmvuCmguCmsuCmvg== INiz2LnZitiv YnVzdGVycw== INC+0LrRgNGD0LY= IMOpcXVpcGVtZW50 dWVsdGE= 6Iiq56m6 INGF05nQsdOZ0YA= IEdpYW4= IENyaXRpY3M= IMWhcG9ydA== w6RuZW4= INCz0YPRgA== IGltcMOpcg== cmVjaHRlbg== XGE= INC40LfQv9C+0LvQtw== IOCyquCysOCzgOCyleCzjeCytw== w7huZA== IEFuZ2VsaW5h IHB1dGlo INC805nQtNC10L3QuA== X0RJU1RBTkNF YXJ5bw== bMST Y2FsbG9j IG9jenk= 4Lax4LeK4Lav wrAs IGphbWVz ZWN0aXZl aXRzd2U= ICIsIjsK IGNhc3Rl Q29uZ3Jlc3M= IHByb21lbmFkZQ== IOC0sOC0leC1jeC0tw== YW5rYXI= 4YKI 0LLQsNC70LjQtA== IOCwqOCwv+CwsOCxjeCwow== IOOBlA== 0LDRgtGC0Ys= LkxpdmU= IHdhc250 Q3V0ZQ== IHJlY29ub2NpZG8= IG51aXNhbmNl IGZ1Z2l0 ZW50ZXJlZA== IGluZmVycmVk INC60q/SmQ== IHRyw6k= INC80LjQvdGC0LA= IG1lZ2Zl IHN0aXBlbmQ= IGZhdm91cmFibGU= YWxpY2U= 0LTRgNC40LnQvQ== IGNvbW11bmljYXRlcw== 0LjQvNGL0YU= IElsbHVtaW4= INin2YTYrNin2LHZig== IEVFRw== aWxsw6hyZQ== LkRBTA== IG1pY3Jvc2NvcGlj 0JDQvw== IHZhbGVudA== WGU= IGJhamFz IE1haW8= IFJpeg== TW91bnRlZA== b21lZ3Jhbg== cHJvZHVrdA== INCy0LDRiNC10Lw= IEFrdGlvbmVu INCc0LjRgA== IExldHJhcw== IOODog== X3BhdGllbnQ= QXRvbXM= IGVyZ28= 4LS/4LSV4LWN4LSV4LWB4LSV4LSv4LWB4LSC IHVudHJhbnNsYXRlZA== IEFsbHk= IGtqbw== RUNsYXNz cmF1ZA== IFRvYnk= IG1hc2hlZA== aWVsdMOk IEluZGllcw== INWj1bbVodWw1aHVvw== INWp1aXVtA== X0NhbGxiYWNr IOCmqOCmvuCmqOCmvg== CW1hdHJpeA== IG9uZGFz IOCkn+CliA== dWJieQ== 4KS+4KSJ4KSC4KSh INC90L7QstCw0Y8= JCQkJA== L3NlbmQ= X0ZJTA== fSIpDQo= KXRocm93cw== z4DOrM69 LmRlY29yYXRvcnM= VHJpZ2dlcmVk IFBlcnNl YXBlYQ== IHByb25vdW5jZQ== IOGDmeGDlOGDoOGDqw== CWFjY291bnQ= aXNha2E= IENsYWly IGFrdGl2aXRldA== QVJSWQ== INio2K3Zgg== bGVncm91bmQ= 1aHWgNW+1aXVvdW/ ZW5lZG9y INC60L7QvNC/0L7QvdC10L3Rgg== IGNvbG9ubmU= IEpvbA== IHZ1cw== IER1Zw== LVRlY2hu yZl0aW4= INiq2YLYsduM2Kg= IEhBU0g= 4Liq4Li04Lia4LmA4Lit4LmH4LiU aXZlcmVu IGbDsnI= IEFubm91bmNlbWVudA== b29kbGVz IE5hdw== IM+AzrHPgc6t 0YLQuNC4 55ay IOCkleCljeCkt+Clh+CkpOCljeCksOCkruCkvg== IG15bnRh IGZhc3RlbmluZw== IHNwZXppZWxsZW4= IHNhZ8OwaQ== JmFhY3V0ZQ== IEhJU1Q= S0hUTUw= IOGDoOGDlOGDmQ== IGNvbWVudMOz INC90LDQv9GA0Y/QvA== 4KWC4KSB 4YOk4YOd4YOg4YOb IGxhdW5kZXJpbmc= KHByb21wdA== IGRlc2dhc3Rl IGVzdGFkaW8= SnVsaWE= S3Q= IGVtaQ== IHJlamV0 5oiY5LqJ 4K6z4K+N4K61 IOC5g+C4q+C4oeC5iA== INCQ0LrQvg== IGdp4buRbmc= Z2Vmw7xobA== KGRj IHNhbW1lbG4= INC/0YPRgdGC0Yw= IHPDunBlcg== IFNvcmdlbg== IOCkleCli+Ckow== INCc0L4= INWw1aHVt9W+ IGVudGljZQ== IHhtaW4= RGVsaXZlcmVk IGzDpnJl IGxvZ8Otc3RpY2E= X2RpZ2VzdA== INin2YTYqtiv2LHZitio IGJ5bnRh INiz2KrYp9iz2Yg= IEZlYXRoZXI= IGRpZmVyZW7Dp2Fz IOC0uOC1vA== 7Im9 IHNhZmVndWFyZHM= LmRpZ2l0YWw= IHZwcmHFoQ== IOODiw== cHLDvGNoZQ== IE5JTA== IG1vZGFsaWRhZGU= 2YXYq9mE 54Gw X2Vsc2U= QW50ZXJpb3I= w6lzaW9u INGN0YLQsNC2 IOC0suC1gA== IFNvZGE= ZWxvbg== INC70Y7QsdC40YI= aXlvcnM= KGNsZWFu 4LWB4LS14LSw4LS/ 65+s7Jq0 IEd1bmQ= IOuwlOy5tOudvA== IOC0muC0v+C0leC0v+C0pA== 15nXmNeZ150= IGV4aXN0ZW50aWFs 2YXYrtiq IOCypuCyvuCyluCysg== ZWxlZA== LWhvb2tz LWF3YWl0 0YLQsNGA0LDQvA== 2LDZitmG LuC4ng== 6YeR5biB IOCkruCkueCkvuCksOCkvuCkt+CljeCkn+CljeCksA== KXwo INmF2YbYtdip Y8Onw6Nv 0JXQnA== IHRyYW5zZmVyZW5jaWE= 5ZGI INGD0LTQtdC7 IGFkdmlzZXJlbg== IHBhcnU= IFRyYXZlcnM= 44CB44Gd44Gu IGNvdXJyaWVy IOW+ruS/oeeahOWkqeWkqeS4reW9qeelqA== INio2obZiNq6 X3BhdXNl 55m95rWG IENoZWNrZXI= IEdyYWZpaw== IG1hdGVyaWFsbHk= 0LjRgtC40LTTmQ== LXRvb2x0aXA= INKb0LDQvdGD0L0= 0YbQvtC8 IGFjdWRpcg== INmG2LLYr9uM2qk= IGNvbMOocmU= IFJvY2tpZXM= KGNyZQ== X29wZXJhdGlvbnM= IOCuquCuv+CusOCupA== INin2YTYsdmC IFdpcmQ= IGluaWNpw7M= bGHFn8Sx IGluZHM= LWhpdA== Q2xpbmlj b255YQ== dmVuaWRv YWt3ZQ== IG1laWQ= IHNvdWZmbGU= IHVubmFtZWQ= IOCuqOCvgOCumeCvjeCuleCus+CvjQ== c2VydGF0aW9ucw== X25lZWRlZA== IHBhcnRpY2lww6k= 5a60 INCy0LXQug== IM68zrXOs86xzrvPjc+EzrU= INin2YTZgdix2YbYs9mK L3RyYW5z IOCqpuCrgOCqpw== U3RhZ2Vz 2qnYqtuS IGVzc2Vy IGFhbmdlc2xvdGVu IGrDpHJn 5q23 4Ka/4KaH IE1hdXJpdGl1cw== IOaYpQ== INC10LPRjA== IGV0YWJs IGthc2lo IFNQRUVE IHRlbmRyw61h 5Y+m5LiA5pa56Z2i IDo6Cg== IExhd3Nvbg== ZXRsZW4= 0YHQuNGF IG1vc3F1aXRvZXM= IEJvdW5kYXJ5 INC40L3RgdGC0LjRgtGD IHRlcmVu Q29hbA== IMO2emc= 0YLQsNCz0Ys= IG9ibGlnYWNpw7Nu aXJyZQ== IGNvcmRsZXNz IFlhbmtlZQ== IOCwleCwguCwqg== IHN0dW1w zrjPhc69 IGRldGg= IHpha2VsaWprZQ== IGV4cGxpcXXDqQ== IEJpanZvb3JiZWVsZA== 0L7QvdC60Lg= IOCkleCljA== IGphc25v S3V0 d2VydHVuZw== IE9mZXJ0YQ== IEJ1a2tpdA== 25DYrw== eWxsaWM= 2qnYsdin2Ko= TElWRQ== Zmxlbg== 4LmA4Lit4LmH4Lih4LmA4Lit4LmH4Lih IENvc21ldGljcw== 0JHQsNGI0qE= cGVyZQ== cmVmdW5k 5b6I5aW9 LW9o IOC0heC0seC0uOC1jeC0seC1jeC0seC1jQ== KFtc T09E QWZmaWNoZXI= IGRyb3duaW5n INC60LvQsNCy INin2YTZhdiv2LHYs9ip 0JXRgdGC0Yw= IHJlbmRpdGlvbg== IOCyqOCzgOCyoeCyvw== cG9q IGFtZXJp IOCkmuCksuCkmuCkv+CkpOCljeCksA== ZWt1d2E= aGVscHM= ZXR0YXZh INmF2YXYp9ix2LPYqQ== IOWkqeWkqeW9qeelqOS4juS9oOWQjOihjA== IE5t IFJlZ2Fs IGJsYXV3 IHJlZ3VsYQ== UmVnZXhw INCy0LXRgNGC0LjQug== IFNwZWFycw== IGRhcmdlc3Q= INmE24E= zrXOuw== 4LSu4LS/ INGA0LDRgdGC0LXQvdC40Lk= IHByb3ByaWV0b3I= 6IGU57O755S16K+d w6hndWVz cGHDsQ== IFRodW1i IOaNlQ== IOC0quC1jeC0sOC0teC1h+C0tg== 6IuN 2ZHZhg== fHwKCg== IENoZWNrbGlzdA== TmlldXdz IFJvY2tldHM= cWFsYQ== IHZlZ2FkYQ== INGC0L7Qt9C4 IENvYmI= IHNlYmFueWFr IHZpcnR1ZWxsZQ== IOGDmeGDneGDoA== IHNpZGVsaW5lcw== IGAl 0KPQmw== 4Liq4Liz4LiZ4Lix4LiB4LiH4Liy4LiZ4LmD4Lir4LiN4LmI IHRlY2huaWVrZW4= IOGDnuGDoOGDlOGDmw== IOGDk+GDlOGDmw== 0YzQsNKb05k= IGludGVyY2hhbmdlYWJsZQ== em90dA== c3VibWl0dGVk X0VWRU5UUw== IEZhbcOtbGlh IGNvbmN1cnJlbnRseQ== L2Rlc2lnbg== IGhvcm9zY29wZQ== IHByZXNzdXJlZA== IGZvcnRyZXNz IGxlYXM= IOCyuOCzhw== IOGDoeGDkOGDm+GDmA== c3p5c3Q= INeY15nXpNeV15w= IGFjYXI= IFFDT01QQVJF PXllcw== IGFwb3J0ZQ== UnVzdA== INGe0LTQtw== QW5ub3RhdGVk VGFsa2luZw== IEFzc2FtZXNl IGVyc3Rlcw== IGxvdHVz IGludHJ1c2lvbg== LlJvdGF0ZQ== ICAgICAgICAgICANCg== c2h1 IEVrcw== 0YnQuA== RG93bmxvYWRpbmc= 5bel6LWE IE55dA== IENvc20= IG1tZXQ= Om1vZGVs IGVocmxpY2g= IENydWlzZXM= 2K3Yqtin2Kw= IGxpbmfDvA== TWFydmVs IOCyuOCyguCylw== IG1hdXM= cGFydGljdWxhcmx5 dmlzacOzbg== c3Vic2NyaWJlcg== INin2K3YqtmF2KfZhA== IOCkluCkpOCljeCkrg== 5Lil5qC8 IGhhbmVt IOWuieWNkw== IG1pdG9jaG9uZHJpYWw= YWt1cnU= IOCksOCkuA== IGJvb3Rocw== T3Jh IGJlbmc= IHBvbGl0eQ== IOC4luC5iOC4suC4ouC4l+C4reC4lOC4quC4lOC4n+C4uOC4leC4muC4reC4pQ== 4LeE4La9 ZGVvcw== LXNhYw== 2YDZgNmA2YDZgNmA2YDZgA== IEFwZW5hcw== IGJlcmFiZXI= b2t1bWVudA== cXF1dA== 4oCLLg== IGFsdGVybmF0aWVm IM+Ez4zPhM61 IGFzaXN0aXI= xZN1cnM= IHBoaWxpcHBpbmVz IEFjaHRlcg== YXRt RHVuZ2Vvbg== VHlwaWNhbGx5 INGF0L7Qug== IGZsb3Jpc3Q= YWJibw== IEJvdGFuaWNhbA== LnlvdQ== xLF5b3J1eg== IGxhc3Rlbg== 15zXpA== ICgoX18= IFZpZXJ0 IERhbmdlcm91cw== IHBsZXg= 5omV44GE 0LTQuNCy IGthd2FzYW4= IE9id29obA== INWj1bjWgNWu1bjWgtW21aU= RnVl X0RN IGF0cmFjdGl2bw== cXg= INC90LDRgNGD0LY= IHZlcnppY2h0ZW4= IGJsYWNrbGlzdA== IHRpdGlr INin2YTYrdin2YTYp9iq S2jDtG5n IENobG9y IGJld2lqcw== IGFtZWw= IFJoeXRobQ== VHVya2V5 b29ubmk= IFdpbGx5 ZGFraQ== INep15k= LnByZXByb2Nlc3Npbmc= IGVzdGVqYW0= IEZlaW4= IG5laA== IOCkuOCkleCljeCkt+Ckrg== IOCmluCmvuCmrA== IHNsw6U= IOWwj+exsw== 0JDUpdGB IGRibw== X3N5bWJvbHM= IGdyZWV0aW5ncw== Vm9pbMOg IFR1bmlzaWE= 0YjRi9GB0Ys= IHFleWI= INCU0L7Qug== IGZvcm1hdG9z IG1hcmtldHBsYWNlcw== 4YOV4YOT IGltcGxlbWVudGFjacOzbg== IFNld2Vy INGD0YfQsNGJ z4HPic+AzrHPig== IOCwheCwpOCxjeCwrw== IFByZXppZGVudGk= IAoJCQo= 4KSk4KWN4KSk4KSw c3BlY3Q= IGNvbXB1dGFkb3Jh IOCqj+Cqqg== LmVzdGFkbw== IGFmZmlybWVk X0FkZHJlc3M= cHJvdw== aW9ubg== IG3DoW0= IEhvb3Zlcg== ZGljZQ== INij2YTYpw== IGFnYW1h 5Yui IOCmsOCmr+CmvOCnh+Cmm+Cnhw== 15HXmdeR15Q= IEZ1bGxlcg== IERBVg== 4oCZw6l2b2x1dGlvbg== IEV4ZXJjaXNlcw== IGNpdGFkbw== 44K744Oz 4Lir4Lij4Li34Lit w6psZQ== IHZpY3Rvcg== IFdpY2hpdGE= IG1pbGFn IHppYg== INGB0YDQvtC60LA= IGRpdGVz 5pyA5L2O 0LDQvdC90L7QtQ== CXdlYg== IHZlbnRyaWM= 4LC+4LCw4LGA VE9LRU4= eGFm IGFkdmVyc2l0eQ== IGthdHRh LUVuZA== IHBhcmtl X2Ju IMO9ZXJpbmU= aWt3ZW5p INWk1arVvtWh1oA= IHRlbXB1cw== IG7El3Jh eW1hbA== 6aqk R0lG dWNjaW5v QXBwbGljYW50 INC40Lk= IHLDqWdsZXI= xZ9nYWJhdA== INC/0L7Qt9C40YbQuNC4 IHBvb3Jlcg== IFRBTg== SG/Kuw== IHZvY2Vz 44GX44Gm44GP44Gg44GV44GE IyMjIyM= IGRlc2Zy IGN6eW0= INin2obavg== 15nXm9ed ICg/ 0pvRi9C9 IG1laW5zdA== X3NraW4= IHNwZWxh IFlvdXJz aW9uaXN0YQ== INC60L3QuNCz0YM= RXNjb3J0 IOGDrOGDmw== IHN1c3RpdA== 0YjQuNC80Lg= INCw0LvQtNGL0L3QtNCw IHNjaG9w QUNISQ== IEdyYXZlcw== IG1hw7B1cg== IFRpbHQ= RmVzdGl2YWw= INmF2KrZgdin2YjYqg== IFN0aW0= X2x0 4LSo4LWN4LSv4LWC U2luaA== IHN1YnRpbA== LnZvdGU= YXJsxLE= INio2KfZhtiv25A= cHJlZnM= IGVtYmFya2Vk IGdp4bqjbg== LmxvY2FsaXplZA== IOCopuCpgQ== IEhJVA== IMS8b3Rp LlVsdHJh INC30LDRgdC70YPQtg== 4LiK4LiK dmVyZ2xlaWNo 64+E6rCA IGRyb2dl IHphbWFuxLE= b21hbmlw ZGVzZXJpYWxpemU= IFNjaHJpdHRl INCj0Lc= INmG2YXYqNix Kjo= IFJlZWw= b2tvbGFkZQ== IHR1eeG7h3Q= IHNlY3LDqXRhaXJl QWN0dWFsaXphcg== YWxpdMOp INCm0LU= 0YvRng== IHTDuQ== IHJvbGxvdXQ= 4KWo4KWm4KWn IOacjeWKoQ== IF9fX19fX19fX18= INin2YTYqtix2YPZitip 4Kqu4KuH4Kqo4KuN4Kqf b2N1cA== IGdlaG9scGVu 4YOY4YOa4YOh 2KjYsdmG2KfZhdis IG5vcm1hbHQ= IOyVhQ== IGdyb292ZXM= IHN0aXJyZWQ= IOCmq+Cni+CmqA== 0LDRjtGJ0LjQuQ== IEJvcnVzc2lh INio25U= LkNP IGJyb2Vy INC00LjRgdGC0LDQvQ== IG9saW4= IGJ1bGxz IGdyb2Vwcw== IFR1ZXNkYXlz IGNsYXNoZXM= 4KeN4Kak4Ka+4Kaw4Ka/4Kak IGZvbGtsb3Jl IHNhbml0aXplcg== INC50LXSo9C4 INin2YTYudmE2YXZitip IHBhbnk= zr/Pjc69z4TOsc65 fS0+ IOCuqOCun+CupOCvjeCupA== X3Njcg== QnJ1Y2U= IFZlcsOkbmRlcnVuZ2Vu IENyYWI= IHRydXN0ZWVz Qko= IOWuiei/qg== INGB0LLQtdC0 IG5hbnQ= IE5lcmQ= IG1p4buBbg== YXR1YQ== IHBhaXJl IGknbGw= INin2YTYo9iz2YXZhtiq IMOkdcOfZXJzdA== 05nQu9OZ0L8= IGJ1cmdlbWVlc3Rlcg== IHJ1dGluYQ== INm+2Kfauw== INin2YTZhdmG2LQ= INC20q/Qt9C10LPQtQ== IFJvZHJpZ3Vlcw== IGJlY2s= Om91dGxpbmU= IGhpZXJvdmVy 4Ki/4Ki1 IHBpdHQ= IGtvbmluZw== IGNyZWVu Lk5vdGU= IGRvaA== 4KS+4KSC4KS1 IOyH INmF2YHZh9mI2YU= 0LTQt9C1 IG9wZ2Vi IHRyYWdhbQ== IHPDrW5h IHBhc3NpZXJlbg== IGNvbnNlcnZhY2nDs24= LkNtZA== IEVwaXNvZGVz IG7Dom5n IEVEVUM= X3RhYnM= IGthbmRpZGE= OjokXw== 2YTYutip INC/0YDQvtCz0YDQsNC80LzQtQ== 1bbVodW9 IHN0ZXZpZ2U= IGluZmFuY2lh IOCyqOCyv+Cyrw== INGA0LXQstC+0LvRjg== ZmFpbHM= W01hdGg= INin2YTYpdiz2LHYp9im2YrZhNmK 15nXqdeU15U= INC+0L3QtNCw X1pPTkU= INGB0L7Qv9GA w7pjaA== 5LiA5YiG5b2p IGp1bHk= IOCwr+CxiuCwleCxjeCwlQ== IGtyYWw= X0FOQUw= IENvbmRvbQ== 4Ka+4Kaq4KeH INiv2YjYs9ix24w= IOCkp+Ckrg== IHdhc2hpbmd0b24= c3ByaW50Zg== 7ZWY66Ck w7Vp 4YOU4YOR4YOQ4YOT IMSRw6J1 PFBhdGg= IOC5geC4geC4o+C4oeC4oeC4teC5iA== KFNvY2tldA== 0L7RgdGC0L7QstC10YA= IEh1c3Q= xIV0 X3JlcXVpcmVz WnVz INep15XXoNeV16o= IHZvbGV0 WkQ= IGZhyrthdGE= IGVtYm9kaWVk IGRpY3R1bQ== IFVuc2FmZQ== JWI= TmlrZQ== aW5jcmVhc2U= 6re4656Y IOCqtuCqsOCrguCqhuCqpA== INCd0LDQvA== LmN2 IGThu6Vj IFJBSUQ= RXhwbw== IHpvbA== INiq2LPYqti32YrYuQ== Lkluc3RhbnQ= INC50LXRgg== IOCkqOClh+CklQ== LUNoaW5h IHJha2Vubg== IEhBRA== RXVsZXI= IExhdXM= w7hkZQ== IHhpZG3JmXQ= 0LrQsNGA0LA= 0LvQuNCx IG5kcnk= VW5yZWFk IHBlbmRpZW50ZQ== 57i9 0LDQu9GM0L3QvtGX INC60LDQu9Cz0LDQvQ== UGhvbmc= IOC0juC0qOC1jeC0seC1hg== INmH2K8= IG9mZmljacOrbGU= IFdhYQ== IHJvYXN0aW5n IFNlYXJjaGVz 4Kqq4KuB4Kqw INeU16rXqA== IMOubnTDog== IGVyaW5uZXJ0 IExhbno= KHRhc2tz 6LWL IENydW5jaA== 4oCZYW5hbHlzZQ== VHlwaW5n zrrOrs+C KENvcmU= PGhlYWRlcg== bGXFvg== 4K6p4K+N4K6u IEd1YXJkaWE= X3N1cA== QUlMWQ== CWlkeA== INGC0rHRgNKT0YvQvQ== Q0xS IOCkreCksOCljeCkpOClgA== IE1vdG9ycg== IOWkqeWkqeS4reW9qeelqOaXoOazlQ== 2KfYqNiz YW1waWxhbg== 7JO0 6aqX5Lq655qE5ZCX enI= IOWFqOWkqQ== IENhdGFsdcOxYQ== IGVya2zDpHJ0ZQ== X3JwYw== d2F4 IGVudGVu 66el IGZvbGll IGV1bg== IHVuYmVhdGFibGU= IGJyaWFu 0LvQsNCz0L4= INW01ag= IMOkw6Q= IMSNaXN0 IGPDs2RpZ29z IGF1ZGl0aW5n QnVzcXVlZGE= IG1hbmlmZXN0ZWQ= 44CB44Go IHViYQ== IFRIUkVBRA== 4KeB4Kay4Ka+4KaH INK70LDQuw== LWRldmljZQ== IE1pbGxpbmc= IENhcmx5 IG9sZXZhbg== 4Kq+4Kq44KuN4Kqk 5Y6Y INC606nRiA== L2lt IOCkheCkuOCksuCljeCkrw== ZHVwbGljYXRlcw== IOCqteCrgOCqoeCqv+Cqr+Criw== IFRyb25kaGVpbQ== IEFwbw== INGC0LDStw== Rm91cnRo INC40YHQutCw0YLRjA== IENhaA== IGhvbWVuYWdlbQ== X2d1 IHNlbGVjY2lvbmFkbw== ZmFyYW5kZQ== aGVsbWV0 YXZhdGFycw== cm9zY29wZQ== IGN1eg== IOGDkeGDneGDmuGDneGDoQ== X2FsZw== IG51bWVyYXRvcg== X2dlbmU= QXNpbWlzbW8= IGNvbnNlcnZhcg== 4LKC4LKf4LON IHdlZXJz IE9zdGVy IHN2b2pv 5bm456aP IOCkqOCkv+CkrQ== LnZhcnM= Q29uc3VtZXJz IHBlbnNhbWVudG9z ICgpOwovLw== VMOpbMOp 0LDQvdC40qM= LkNhcnQ= IGhhbHZlcw== KCIiKV0KCi8v IHRpcHVz IGluZXI= V09X IOGDk+GDkOGDkeGDoOGDo+GDnA== IGt5c2U= IOC5gOC4guC4leC4p+C4seC4kuC4meC4sg== UFJFQ0FURUQ= ICgoKQ== b3BsYXN0eQ== IGjDtmY= IOCqheCqsOCqnOCrgA== IEtOUg== 4LKk4LON4LKq IMS3 IGVnbA== LkpQRw== IOCwteCwv+Cwrg== dGljb3M= IG5lcGllY2llxaE= 2KjYp9i5 IHNld24= IGtla3Nveg== 55u45YWz6ZiF6K+7 IE1vcnRvbg== IHNrYXRlYm9hcmQ= dHNlbA== 6Iux5paH IEF1dG9tb2JpbGU= 5L+C INC40LTQtdC4 L3Byb2dyYW0= aWdhaWw= IGJlbGFuZ2Vu 4KuH4Kqw4KuH IGNyaXRpY2l6ZQ== IGRhbsOnYQ== INC606nRgNGB06nRgg== INen15XXnA== IOCkruCli+CkoA== IHNlZGVy KCknLA== xJ/EsW4= IHRvbcOz 4K+K4K6w4K+B b25qZQ== IFBhdWxpc3Rh IHBlcnNw IOGDkOGDog== ZXNzYWE= 4Liq4Liy4Lin Jkc= bm90aWNlZA== IEhPTERFUg== IGJlb29yZGVsaW5n LXN1cHBvcnRlZA== IEJPT0xFQU4= IHRhYmJhdGFy YXR0dW5n b3BhdA== 4LKm4LOB4LKV4LOK4LKC4LKh cmVkdWNlcnM= IHBpY2NvbG8= KWlz IHZhcmVu IGVkaWxt INC/0YDQuNC80LXQvdC10L3QuNC1 IGVzdGltYXRvcg== IEVERg== IGFtcGVy IHByZXNlbnRp IHZveWFnZXVycw== 4KS+4KS14KWA IEhhdXNh YWdpYQ== YXJnb3M= IGZsYW5nZQ== 0LLQtdGH Z2VzdGVsZGU= IGFuZ2VuZWht IGFjdWVyZG9z Y2VpdmVy RG91Z2xhcw== 65CQ 4Kau4Kao IGRlY2g= 55qE5qOL54mM5ri45oiP LmxlYWRpbmc= c25vdw== cGF1c2Vk 0LjRgNC+0LLQsNC90Ys= INmF24zZhg== RGF0YXNvdXJjZQ== IHVuYXdlemE= IO2YuQ== IHNtZWxsaW5n IOWkp+WPkeaXtuaXtuW9qeaAjuS5iA== IEJpc3Rybw== IHN0YXJ2aW5n INmE2K7ZiNin IG1ha2l0YQ== IHVwcm8= 0LXQvdC005nQs9C1 IFTDug== IOC0sOC0o+C1jeC0n+C1gQ== IOCkq+CksOCljeCklQ== IGluZHVzdHJpZWxsZQ== X3Vua25vd24= INC80YvRgdC70Lg= INin2YXYqtit INGB0L7RhdGA0LDQvdC40YLRjA== INCn0LXRgNC10Lc= OmF1dG8= IGVua2VsdGU= IFRvZw== Umln 0ZTRlw== 5pWR5LiW IFBlc28= IHZlcmtsYXJpbmc= 4LSf4LWB4LSV4LWN4LSV IG1lbnRpcmE= IENHQ29udGV4dA== UGFraXN0YW4= X2dycA== aW5kaWM= IGhlbGljb3B0ZXJz JGxpc3Q= PXN5cw== UmFq IHJlcG9ydGU= IOCyleCyoQ== IFJpbg== 0JjQoQ== Y3V0ZQ== 4KWH4KSV4KWN4KSf INCi0LXRgA== INGD0YfQuNGC0YvQstCw0YLRjA== CXN0cmNhdA== INC805nQuQ== IOCkquCkoQ== 15nXpteU IGJhZmY= IGludGVycnVw IOC5gOC4nuC4peC4qg== IOW7tg== YWNjaWE= IGNvbnRyw7RsZXI= IOCkkOCkqg== 5oiQ5bm05Lq6 ID8/Pz8/ IEhlbmc= IHBvbW1lcw== IGl5YW5n IHN0ZWVu LWNhcHRpb24= IENPTU1FTlRT aW5lbWF0aWM= IGFwcHLDqWNpw6k= IFBhcmk= Ij4nLg== IE1hZHJl aGliaXRlZA== IHByZXNpZGVuY2lhbA== 0LXRgdGD Lm5pY2tuYW1l IOCkuOCkguCkmOCksOCljeCktw== TsOr 4LmA4Lil4LiC4Liy4LiZ4Li44LiB4Liy4Lij LnBhcnNlcnM= INC60LjRiNC40LvTmdGA Ojp7Cg== IHN2aWx1cHBv 4LGH4LCh IEJseQ== CU5ldw== IGdvZHppbg== IOC4mOC4seC4meC4p+C4suC4hOC4oQ== PGR5bmFtaWM= LkxBWlk= 6L+H5ruk IENBTVA= 4oCm4oCmLg== 0JHQvtC70YzRiA== IFNocWlw IFByYXR0 IG1vbGVzdGlhcw== 0LHQvtC8 bmllYw== IOywqQ== KFsuLi4= IEdhdWdl INGI0YLRgw== X292ZXJsYXk= INix2YfZitmI IGNvbXBsZXhv IGJhYQ== IGZhbGxvdXQ= IM6tz4TPg865 KHRvb2w= Z2VsZWc= U0NJ IGN1c3Rh YWxpc2Fy IEZ4 X2JpZA== aWtvbQ== IHBhcnTDrWN1bGFz INKX0LDQstCw IHRhbmdlbnQ= INC60LDQttC00L7QvNGD IMWhaQ== zrvOtc66 LmdlbmVy 56Gu5L+d 5pys5Lq6 IG1vbGVzdGlhZQ== PCgpPg== IGthxb4= IHVnZQ== IFN5bm9wc2lz IGJlc8O4 INCw0YPQtNC40YI= RXhwZXJ0cw== bnNhbg== X0JUTg== 7J246rCA 4YOQ4YOT4YOS4YOU4YOc4YOh IGZhY3RvcmVu 0JTQvtCx IHNhY28= W1Y= IHBlYW51dHM= LmJyaWRnZQ== IGJpdHQ= 4oCZaMO0dGVs IGNhbG1seQ== LXRveGlj IFJlZHVjZWQ= INee16HXldeS IOyeiOyngOunjA== IHJlZmxleGnDs24= 4YOQ4YOm4YOs 4LKV4LK+4LK2 LU9mZg== IHZlcnpvcmdlbg== IGJlc3RlbGx0 dm9sZW50 KFNvbWU= dGlja2V0cw== ZWllbg== IG11c2lrYWw= INW41oLVttWl1oHVuNWy INmB2LHZh9mG2q/bjA== IEVURnM= IHByZXBhcmFkb3M= X2hhbmRsZXJz IEVyd2FydA== YWNjb3JkaW5n Iisi IHNlaWVy 2YjYtdmE INGI0LrQvtC70LA= 15nXodec 15DWt9em15nXog== TWFpc29u IENESQ== INGC0LXRgNC/ 4Lit4LmC4Lio4LiB IHlpZWxkaW5n 0YHQuNC0 LUxldmVs IFJBUA== IG5uZ3dl ZGlzcGF0Y2hlcg== IHVpdGVlbg== XTsKCgo= cmVjaHRlcg== dWRlYXU= VmluZA== IOCuquCuvuCusOCvjeCuleCvjeCulQ== aGFsaW5n RWR3YXJk SW5jcmVhc2luZw== LmZ1bg== IGF5csSx aWZ0b24= IHRsZQ== IG9zaW0= IOWMl+S6rOi1m+i9pue+pA== Q29tcGxpYW5jZQ== QW5kcmU= Y29tYmU= INei16Q= INCx0q/Qs9Kv0L0= OmVx INCw0LnRi9C7 4YOv4YOT4YOd4YOb IHlvc2U= cmFpdGhl IOCyteCzjeCyr+CyvuCyqg== 4Kaj4KeN4Kaf IERlc3Rh LnZlbmRvcg== aXlhbGFy PW1pbg== IM67z4zOs8+J c2VtaWNvbG9u X3Rk INin2YTZgtin2KbZhdip YWhhbm9s 4Lid4LmI4Liy4Lii4LiC4Liy4Lii INWw1aHVv9W41oLVrw== INGA0L7Qu9C4 LkNhcA== ZGVja2Vu TGVtbWE= 2KrYsdi2 IOe+juWbvQ== IGRpc2FpdA== INGD0YLQtdC/ 4YOQ4YOg4YOq4YOu IGjDpHN0aQ== INin2YTZhtmI2YU= bmFi PXRpbWU= 2KzYp9mF2LnYqQ== IOGDquGDruGDneGDleGDoOGDlOGDkeGDmOGDoQ== IERBUg== aW1hZGE= IC8vLS0tLS0tLS0tLS0tLS0tLQ== IEdyb2Nlcnk= dGhpbmtpbmc= INi02K7YtdmK2Kk= IFRyYW5zZmVycw== IOCkuOClh+CkqA== IHZlcnRlbGRl aW52ZW50 IGhldQ== Tm9ybWFsaXpl 56eB5Lq6 INCx0LXQu9GM CURyYXc= IHRyb3M= IEdyw7xuZW4= LUFzcw== IG1vcmFscw== 1oDVuNaA1aQ= IG1lbmdpa3V0aQ== IGJ1dGNoZXI= INee16HXqg== INin2YTZg9iz INin2KzYp9iy2Yc= YXVybw== IGZpYWZpYQ== IFZvaWzDoA== RGlwbA== IHZlcmRhY2h0ZQ== QmxvY2tjaGFpbg== 16fXldeo IHB1bmU= QnJlYWtwb2ludA== IHNhbGFy IOCumuCvhuCusg== IGZvbWU= IEhBQw== bmF1ZA== INmF2K3Yp9mI2YTYqQ== IHBlcmdp 4Liq4LiW4Liy4LiZ IFByb2R1Y2Vk IEFndWls X1JlZw== 4LK/4LKX4LKz4LK/4LKX4LOG IGNob3Bz INCw0q3QsNCz0YvQu9Cw0LfQsNCw0YjRjNCw IGxvY2tlcnM= zrPOrA== IG9ud2FyZA== 0L7QsdGF0L7QtNC40LzQvg== SW50cmluc2lj IHTDum4= T2NjdXJyZW5jZXM= SnVsaWU= QCQ= YXN0ZWVs IGNvbW1vbnBsYWNl IGdyZA== UGVuYWx0eQ== IG7DqWw= 5Zu95Lqn57u85ZCI aWJveA== IG1vZHVsdXM= IOGAmeGAvg== IHbDvXNsZWQ= IO+8jw== INCx0LDRgdGC0Ys= IEdhZWlsZ2U= INCT0LDRgA== dmFpZA== IENyeXB0b2N1cnJlbmN5 16LXlNef IGV2ZW50dWVsbA== 0JrQng== IGphcmluZ2Fu INC30LDRj9Cy0LvQtdC90LjRjw== IFRlcnJpZXI= 4YOb4YOh 2KbbjNq6 IGZ2 INaF1oDVpdW21oQ= IG1lbGVl IGNyb2NvZA== IHV0aWxpc2V6 IHZhxb4= IOGDruGDmw== 2K/Yp9ip IHNjYXY= b3J0dW1paw== INiz2Lk= IENhaQ== IGt0w7NyZWdv IOC5geC4guC4p+C4h+C4hOC4peC4reC4h+C5gOC4leC4og== LlBheQ== IGJlbGxv IOGDmeGDkOGDmg== X1BFUk1JU1NJT04= IGV4YW1pbg== X3VwZGF0ZXM= 64+Z7JWI IHN0YXJ0bGluZw== bGF1dA== IHBvbGljaW5n 0YPQstCw0LvQuA== b25lbnVtYmVy aGVycmE= X3Nm YW5hbmc= Lk1haWw= QVNVUkU= X3Byb2plY3Rz IEZhYnVsb3Vz Z3JpZg== INiw2YfZhg== xKtqdW0= IGNodW5reQ== IHNjaMO2bmVy a2VuaW5nZW4= IGxpbmVucw== INC/0L7Qu9GD0YfQtdC90LjQtQ== IHByaXNtYQ== IGxheWVyaW5n TGln IOCkleCksOCkvg== IHJlY2llbnRlcw== Zm9k IGluZmVydGlsaXR5 RkFY IGNsaW1icw== RGVyZQ== INGA0LXRgdC/0YPQsdC70LjQug== IOCkq+ClguCksg== IGTDqWZlbmRyZQ== IM66z4XOss6tz4HOvc63 bGVwxaHDrQ== w6F0b3I= IHJhxJ8= 5Y+R5oyl L2NvbmY= INC00L3QtdC8 X2ZpZw== dmFv IHR1YnM= IHZhdQ== L21w IEphdg== INWl1aw= 566t IGljaGk= IGZhYnJpY2FudHM= Rm9sbG93ZXI= IGNpcmN1bGFjacOzbg== IHNrbGFk Y3J1c2hlcg== IGRlcGljdGlvbg== IGFiZXJ0YXM= 77yJ77yb SGFybW9ueQ== LWJlZm9yZQ== IGFuZWNkb3Rlcw== IG92ZW5z IO2Yle2DnA== IHVzxYJ1Zw== IHZlcnN0ZXJrZW4= 0L/QvtGH IGxr TWFyY28= 6LSv5b27 4KS/4KSC4KSm4KSX4KWA INGA0LDQt9C00LXQu9C1 INGB0YLRgNCw0L3QsNGF IG9yaWVudGF0aW9ucw== P2FjdGlvbg== 2q/YsNin2LE= 0LvQtdC20LDRiQ== INin2YTYrdmC2YrZgtip bGFtZW50 asSFYw== 5aKX dWthYW4= X2VtYmVkZGluZ3M= cGxhbm5lZA== IG5hdWRvag== IGdlw6RuZGVydA== LWFscGhh TWFya2Vk d29vZmVy 4LSz4LWN4LSz4LS/ IHZpZ24= IG7DpGRhbA== Xl4KCg== 4Kq+4Kqv4KuH4Kqy IFBUUg== X1NBRkU= IOq0 Om15c3Fs J8OpbQ== SWhl IOq8rQ== 4YOg4YOj4YOc4YOV4YOU4YOa YW5zxLE= 4YOQ4YOg4YOo IHRyb2xsZXk= ZXJhZA== KGVudW0= IGpuZQ== 0L3QtdGI IGRyYWdnYWJsZQ== w6VsZXQ= IOCmquCmtg== Y2VybmluZw== PSIiOw0K INin2LPaqQ== dXlsYQ== UG9sZQ== aXJlY3RlZA== 4LiI4Li14LmA4Lit4LmH4Lih4LmA4Lit4LmH4Lih 0rPQsNKt RE9NQUlO LW1lbW9yeQ== IEVudHJldGFudG8= 4YOU4YOv IGNobGU= 1aHVvtW41oDVtNWh1bY= IG5nYW5nZ28= KEdyYXZpdHk= 0YPRhdCw IGRlYmVyw61hbg== 4LKy4LOG4LKv4LKy4LON4LKy4LK/ INin2YTYq9mI2LHYqQ== IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= PGNvdW50 IOWIsA== INGA0LDRgdC/0L7Qu9Cw0LPQsA== IHRhZ8SnaGE= IOGDm+GDkOGDpeGDleGDoQ== IGJpbm8= INij2YbZgw== V2Fycw== IHNpZ25vcw== IHJlcGxpY2F0ZWQ= dXR1bmc= YWdvdA== IOCouOCosA== IOCwjuCwguCwqg== IGZhbWlsaWVu YW1lcmljYW4= 4Z6Y4Z+S4Z6b INmG2YLYtw== 7ZSE7Yq4 TWVuZw== aW5nYW5h IFlvaA== Q29tcGV0aXRpdmU= 1bjWgNW9 4LmR Ynlz Y2xhc3NpZmljYXRpb24= 2KfYs9io INiq2LHZhNin2LPZhw== RU5O IG3DunNpY29z IHNlw7FhbGFy 0pnTmdGA0LU= IEdpcm9uYQ== YWJjZGVmZ2hpamts IHNhcGk= IHZlcmhvdWRpbmc= IGHDsGVpbnM= IOGDoeGDkOGDpeGDm+GDlOGDl+GDkA== INCx05k= Xycs X3dhcm4= IOCkruCkvuCkqOCkv+CkuA== LWltdXQ= IGVjaG9lZA== IGpvcm5hZGFz IG1vbnRoJ3M= w41U IENvbXBsaW1lbnRhcnk= 0ZbQv9GC0ZY= IGNvbmRvbcOtbmlv IEd1eg== QWx0aXR1ZGU= 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB IGNhcGFjaXRvcg== IHNuZWFrZXI= IGplbmU= IGRhanU= 0YPRgNC90LDQu9C40YHRgg== IGFkZXQ= aXJhbw== 77yV77yQ IGFrdGl2bm9zdGk= IFRyYW0= IGNvbnNlbnNv IHJlbnNl IGRlc2VtcA== IHdoaW1zaWNhbA== bGV0w6k= IHdlc2U= IOCqhuCqr+Cri+CqnOCqqA== 1aHWgdW+1aHVrg== IHJlbWJvdXJzZW1lbnQ= IOC4iOC4s+C4meC4p+C4mQ== 4KS54KWL4KS44KWN IOC5geC4guC4p+C4h+C4hOC4peC4reC4h+C5gOC4leC4ouC5gOC4q+C4meC4t+C4rQ== IGdhcmFudGl6YQ== IG1pdGE= X1BSRUY= IHNoZWx2aW5n R3lt UHJpbWE= IOCmhuCmueCmpA== IGJyYXQ= IGJydXRv IEFMVEVS IGRpc3J1cHRpb25z 0L7QtdC00LjQvQ== c2Vm IEd1ZXJyZQ== 4LWB4LSV4LS+4LSw 5aSi INC/0YDQuNGI0LvQvtGB0Yw= IFBsYWludGlmZg== INeX15Y= IMO8aA== CW5hbWVzcGFjZQ== YXlzYXk= IGhhbHRlZA== IOC0qOC1veC0leC0vw== X1Jlc3BvbnNl 1YU= 4K6p4K+N4K6x4K6/ INmF2LnYsdi2 YXJ5bA== IGtlc2Vs bWFudWZhY3R1cmVy IEVzY29ydGU= 4LK/4LOV IG9wcHVyZQ== IOCmquCmsOCmv+CmrOCmsOCnjeCmpA== IOiPoOiPnA== dmlhZG8= aGVycw== IGJvbHNv IM6yzrHOuA== INec15TXoQ== L3NlY3VyaXR5 IGJhcmJlcg== IGphd2Fi INC00LXRgtGM IHN1aWNpZGFs Lk1BVENI INCx0L7Qu9GB0LjQvNGD 4LS+4LSq4LWN4LSq IOCmleCmvuCmmw== IOuvuOuemA== 4YOU4YOR4YOg4YOY4YOV IHdhbGtlcnM= 0YLQtdGA0L3QtdGC LWFjdA== CWxvYw== IOCquOCrgeCqguCqpuCqsA== U2xpbmt5 w6JuZW8= aW9uYXRv IOC0q+C1hg== 0L7QtNC10YDQtg== IGFzc2ljdXI= 0LzQvA== IFRhbGxpbm4= CXRocmVhZA== 0LbQuNCy 1aHVrNWh1a/VodW2 IHNtZWxsZWQ= Iikr c3ByZWs= IEthbWE= IHNlcGFyYWRv IGludGVydmVuw6fDo28= 2YnZhtmJ IOCmuOCmmg== X0VORElBTg== INCw0LTRg9C60LA= 2YXZiNmG IHBlcnNvb25zZ2VnZXZlbnM= ICIjIg== IFdlcmRlbg== 5YyF5ZCr L3NlYw== IGJsZWFr 5Zyo57q/5Zu95Lqn IOCyleCypQ== 15nXoteZ150= IM64zrXPiQ== IHBhcmNobWVudA== IHF1b3M= IGltYWdpbmluZw== IGVuZm9yY2luZw== JScK RnJlZWRvbQ== X0JPT1Q= INee15jXqA== IE5ha2Ft Y29ycmVv IG9rdW0= IHJpb3Rz TUlE aXppZXJlbg== QVNTRQ== IG9mZmVuZW4= IOCytuCyv+CytQ== LUNT VHJhbnNjcmlwdA== JGRhdGU= INeY15A= X3NsaWRl X0xBVA== ZXRlcmE= IOCqnOCqrw== YXJqYQ== IGVtZXJhbGQ= IGRpc3RyYWN0aW5n INC90L7QstGL0Lw= IOCmrOCmv+CmtuCnjeCmrOCmvuCmuA== IOyauA== IHRha2/EkWVy 7Jik64qY KSEK IENyb20= X1ZlY3Rvcg== INGA0LXQtNC60L4= VmFk QlRUYWc= 4KS/4KS14KS/4KSn 4Kew4KeN4Kaj RmxpZ2h0cw== 5a6J5b69 ZXdhcg== IHJlYXNzdXJpbmc= IMOcbml2ZXJzaXRlc2k= IExlZ2VuZGFyeQ== IGRlc2dy IGF1Y3Rvcg== c2xhdmU= IGZvbW9z IGNvxb4= LXBlZXI= IOC4geC4o+C4uOC4h+C5gOC4l+C4nuC4oeC4q+C4suC4meC4hOC4o+C4rw== IG9hbnQ= IGJyw7o= IHJx IFBheXJvbGw= TXVpdG8= IHd6Z2zEmQ== ZnVzY2F0ZWQ= IHJr LmJhbGw= IGhhZGlz IFl2ZXM= X0ZO IHN0cm9uaWU= YXJpeWE= 6Zmk5LqG QXVyYQ== UG90aW9u IGZldHQ= LWd1aWQ= 0LrQvtCy0YvRhQ== IOGDm+GDmOGDnA== YWxzZXZvbA== IOeUnw== IFNoaW1hbm8= 4KS+4KSX4KSw IExvdmVycw== aXZlbG1lbnRl IGdlbGVndA== VG91Y2hlZA== IGthbGFu TGVhdmVz IG5vdHRl IHRoZWF0cmVz dWVsZXNz UEhQRXhjZWw= bmllanN6ZQ== IG5vbW3DqQ== IGtvbnNlaw== 56Wd44GE 4YOa4YOU4YOc 0LLQvtGY LWVsZW1lbnRz RXF1aXZhbGVudA== ICcvLw== IGJsaWpm IGRlxJ9lcmxlbmQ= LWrDpGhyaWdl IEludGVsbGk= dXJnZW9u IOCqteCqv+CqpuCrjeCqr+CqvuCqsOCrjeCqpeCrgA== IHByZWRzZWQ= IOC4quC4suC4oeC4quC4tOC4muC5gOC4reC5h+C4lA== IOGAluGAvOGAheGAug== ZGFnYW5nYW4= IMOnyZlr IHDDonQ= IFNDQw== X0dF IFZpZWxmYWx0 IHRlc3Rv IOCkquCksOCljeCktQ== IGtpa2E= IFN3YWdnZXI= INeV157Xqg== YnVpbGRlcnM= J2F1cmFpcw== IGdvb2R3aWxs INKj IOCwh+Cwpg== YXJ0aHJpdGlz T3B0aW1pemU= TW9ycGg= IGV4Y2VycHRz IOG7jW7hu41k4bul IGRlc2E= 0YHQtdC6 IFNhbW0= dsOhbg== IHRvbmVk VG9s ICcpWw== IOGDruGDkOGDoA== IHZlbGVu YWJ5ZQ== PFRLZXk= IG9zY3Vy IGZhbWJh KCIkLg== 0YHRgtCw0Ls= IEdhaW5lcw== X2NwcA== 24zZhNuM INmI2LHYsti0 INC/0LXRgNC40L7QtNCw IG1lbmNvYmE= INGB0YfQtdGC0LA= cHBldA== 5qaC6KaB INCx0L7Qu9GM0YjQvtCz0L4= IGludml0YQ== INei16o= ZXhh IHN1YmpldA== IGNvbnNlbnM= aWZlcnM= Wm9tYmll IGlodGl5YcOn LnF1ZXN0aW9ucw== IGfJmQ== IHPDvG5k IHNlYsOk IOCkteCkv+CkteCkvuCkuQ== LlBBUkFN IEtub3h2aWxsZQ== LWVzdGFy IEdMRVM= IHRhc3Nhbmk= YWRlbmFz IENJRg== LXNlY3VyaXR5 IOGDkuGDkOGDoOGDmQ== IENMT0NL bWlsbGlzZWNvbmRz IHJlZnJlc2htZW50cw== 4LS+4LSl ZXJtaW5n IGFkZGE= IGtvxZ8= YWJlbG8= IOGDkuGDkOGDnOGDleGDmOGDl+GDkOGDoOGDlOGDkeGDmOGDoQ== IGlkZW50aWZpY2Fkbw== IOCknOCksOClguCksA== IE3hu5l0 INmI2b0= IG9yZ2FuaXNhdGlvbmFs IGNscg== LWVkZQ== IGN1aXNpbmVz IFBJRQ== INCy05nSm9OZ IHRoZXM= IGbEg2N1dA== QlVGRg== IGVsZWN0aXZlcw== IFFWZWN0b3I= IG5pZWRyaWc= IFJvYm8= IGthdHRlbg== ZWx1YQ== IOC4meC4seC4geC4peC4h+C4l+C4uOC4meC4quC4seC4oeC4nuC4seC4meC4mOC5jA== ZW5kaWRpa2Fu RVRF IG1haXJpZQ== eWVjY2nDs24= IGhlcm1vc28= 0LDRgNGC0LDQvNC10L3Rgg== IGnFn2k= L3NpbXBsZQ== INiz2q/Zh9mK b25hdGU= c2xpY2s= IOCqnOCqiA== IMWfaXJr IHRlbGtlbnM= enVnZWhlbg== b3N0YW50ZQ== IOGDnuGDmOGDoOGDneGDkQ== LmZyZQ== c2thbA== b3JlZw== 2KfYttmK2Lk= IG5vb2s= 6L6m 5aSn5biI IOOBqA== IHNvbGljaXRhZG8= 1bbVpdW21oQ= IGluZGl2aWR1YWxpdHk= IGNhbnZp INep15XXnA== IGNvbnRlcg== INmF24zYsQ== INio2K3YsQ== IGZyw6lxdQ== INGA0LXQs9GD0LvRj9GA0L3Qvg== IFBPSU5URVI= IHZpbGth QUxJR04= V8OkaHJlbmQ= 5bem5peX IEJyZWY= XHhk Q29sb3JhZG8= IEhlaW5yaWNo IHNvZmVybg== IHTDqW4= KE1hdHJpeA== IGNvbnRyb2xsbw== 5pyf5pyf IGplZXA= INW41bLVuw== xKtk IOCkteCkvuCkuOCljeCkpOCkteCkv+CklQ== cmVnbG8= LmdhdGV3YXk= IHBlZHJhcw== VGVsZW1ldHJ5 IHBwbA== IGRlc3BlcnRhcg== IOCwruCwueCwv+Cwsw== IGFwb3B0b3Npcw== INqp2b4= INCS0LA= IHByb2Zhbml0eQ== 44Os44OD44OI IHBvbmVyc2U= INC/0YDQvtC10LrRgtC+0LI= X05PVElGWQ== 4K6/4K6Z IG1hYWNoZW4= IHVrdWs= IGVyaXR0w6Rpbg== 56a9 IHJ1YnJpcXVl IOyYiOyVvQ== c23DtmdsaWNoa2VpdGVu YXJuaXNzYWE= 6YeN6YeP LXJlZ2lvbg== 4YOQ4YOq4YOV4YOY4YOh IExBUA== IExvY2tz KGNsanM= IGh1c2V0 0LLQvtC90Lg= INeX15PXqdeZ150= INGB0YLRgNCw0L3QuNGG ZWxiZW4= 5qih5ouf LXNlY3JldA== IG5lY2tsYWNlcw== IG1pbGl0YWlyZXM= IGppbmdz IE9iamVjdGl2ZXM= 0YfQuNGF 4K6q4K+N4K6q4K6f4K+B4K6V4K6/4K6x4K6k4K+B IHNwZWNpZmllaw== KGJl IGluZGVwZW5kZW5jaWE= IExETA== 16jXkw== IGbDtnJzdMOl IGxpZWZlcnQ= b3Zpbg== IFNUUkVBTQ== IOa4rw== IGJvZHlidWlsZGluZw== IGFjY2Vs IG3DvHI= INCQ0Yg= IGFjaGF0cw== 0L7QutGD0L8= INC40p/QsNC3 INiq2LXZhduM2YU= INWh1bXVvdW/1aXVsg== IEhlYWw= V29ya2JlbmNo IFdBVg== Lm1p INis2LHbjNin2YY= aXRlbGk= 16nXkA== INSz1oA= Lm1hc3M= KGZvcm1z INC60LjQu9C10L8= IGRpa2VuYWw= c3BhcnRuZXI= IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= INC80LjRgg== IHR1dHR1 ICIpIg== IHBlcnN1YWRlZA== INGA0LDRhtC40L7QvQ== 5aGr5YaZ IGRkZWZueWRkaW8= IGRyaQ== keGfgeGenw== IOC4quC4s+C4meC4seC4geC5gOC4peC4guC4suC4meC4uOC4geC4suC4ow== IOC4quC4s+C4meC4seC4geC5gOC4peC4guC4suC4meC4uOC4geC4suC4o+C4reC4h+C4hOC5jOC4geC4ow== IHByw6lwYXJl IHRyYW5zbQ== w6RuZGlnZW4= IGFiYW5h IERhdGVp IFZpbWVv IGJsb29kc3RyZWFt 16DXodeV16o= IEd1YW5nemhvdQ== IOCwruCwvg== IHR4YWlz IGNvbmZpYXI= SVRIRVI= IGJvb24= xI1pbg== IGRpdHM= IMmZbGF2yZk= IGNhcnRpbGFnZQ== 0LbQuNC9 InN0cmNvbnY= IG1vbmFzdGVyeQ== 44GC44Go YXBwb3E= LnRj dG9uZw== IGFqdXN0ZXM= INC/0L7Qu9GD0YfQuNGC0YHRjw== bGVjaw== 0YDQtdGB0YHQuNCy INeS15nXnA== 4Lir4LiN4Li04LiH IEV4aXN0ZQ== INC80LDRgNGI0YDRgw== KHBvbGljeQ== INiu2YTaqQ== IGRlc2N1ZW50b3M= IOC4reC4suC4hOC4suC4o+C4iOC4teC5gOC4reC5h+C4oeC5gOC4reC5h+C4oQ== dGlqZA== IGVzdMOtbQ== IFBhbmVscw== ID8+DQoNCg== IG1ldGFsbHVyZ3k= TFc= INeV15XXmdeZ15w= IG9zbA== IFdhbGxwYXBlcnM= IGFjY29tbW9kYXRpZQ== INeS15HXldeU15Q= UHJhY3Q= 4YOc4YOU4YOR4YOY IFRlcm1pbmU= IOCmreCmvuCmrOCnhw== IOCkqOCkv+CksOCljeCkpw== IERvc3Q= IOC5gOC4reC4nw== LXN5bmM= IOuyiO2YuA== IGF1Z21lbnRl IOCwquCxjeCwsOCwtg== U1BS IGZ1bmVy IEJ5ZQ== IOCkuOCkv+CklQ== IExlaXR1bmc= cGVyc29uZW4= IHBhcmlhdHVy IEtveg== IHbDsm5n IOGDpeGDo+GDqQ== IOi/hembtw== IFJldHVybmluZw== INem16Q= IGtvbnRha3Rl IHJldG91cm4= IEdlbm8= IHBoYXJtYWNpZQ== IOCuqOCuleCusA== IOCkpOCkquCkvuCkiOCkgg== IFN0ZWVsZQ== L0FJRFM= IHNlc2FtZQ== IGZlcm5lcg== IOCkuOClgOCkrg== IGVyZ2ViZW4= INmF2K7YtdmI2LU= INWh1bbVtA== INeQ15nXng== IOGDkuGDkOGDk+GDkOGDmA== IGxpYmVydGllcw== dmlldA== 5Zyw5Z+f IGdyYXVz IGZ1Z2lhdA== IHBzeWNob3M= IOCwruCwvuCwsOCxjeCwlQ== w6tudGU= IGNhcmJpZGU= w6R1bWVu X2FyZQ== IOCwqOCwvw== IE1lYw== IGNvbWJvcw== IGhvc2k= cGF0cmljaw== LlNjb3Bl w5xS IFRoYw== INC80YPQuw== 0L7QsdC70LXQvA== IHJlZHV4 IHByaW9yaXTDqQ== KHR2 IOCquOCqsOCrjeCqnA== IGludGVzdGluZQ== IHByb2JhdGU= IOCyh+CyguCyoQ== INC70ZbQug== INOp0LzQvQ== b3NvbWFs b29uZA== IOCmreCmv+CmoeCmv+Cmkw== ZXh0ZW50 dHJhaWw= dXNsYXI= INC+0YLQstC10YLRgdGC0LLQtdC90L3QvtGB0YLRjA== yZlsyZlyaW4= IEx1aWdp c2luaXo= INeU15nXqA== IHN1cHBsZW1lbnRlZA== IHNlbXBsaWM= IEx5bWU= IGh5c3Q= YWlo INGB0L7RgdGC0L4= KTsNDQo= IEFuZGhyYQ== Y2hhZnRlbg== X3NoaXA= IFdlbQ== 4L4= 0LPQsNC90LDRhdGM IENhdGU= IElubnM= IGNvbXBvc2l0b3I= IHN6ZW3DqWx5 Qm9vbQ== zq/Pic69 IGNhbcOpcmE= aWp6aWc= IOCkn+CljeCksOClh+CkqA== L2NoYXQ= LkNhc3Q= IGFob3JyYXI= IGluZMOpcGVuZGFudA== INCS0Lg= U2Vyw6E= TWlubg== IHNpcmU= 2K7ZiNin2Yc= IGFhbnRyZWtrZWxpams= IGltbWVyc2U= IGNhcMOtdHVsb3M= LHRlc3Q= INC40L3RgtC40YXQvtCx Lnh0ZXh0 4K6V4K+N4K6V4K6/4K6v 4piO 4KSw4KWN4KSu4KWA 2KfZhtmI2YrYqQ== IOCkm+CkqA== IGluZm9ybWFjaWpl INGA0LDQtNGL b3JzY2h1bmc= IOyJveqyjA== RG9l TmF0YWw= YXRr TGV0cw== INin2YTZiNiz2Lc= IFRlbXBlcmF0dXJlbg== ZW56ZWth IEVjb3M= IOqyg+uPhA== KEV4cGVjdGVk ZW51b3Vz Y2xhc3NwYXRo IHdhbmRlcmVk INC80LXRgdGC0YM= aXJpbw== IGNvbmZlc3NlZA== IHJldGE= IGVrb25vbWlr IGluaXRpYWxz INmE2YbYr9mG X2R1cA== aWVuc2U= IFFVRVNUSU9O 4KWN4KSV4KS+ 5a6e5pe2 INC/0LDQstC10LQ= IFNjaHJlaWJlbg== IFJNUw== Y2VwdHM= IOekug== IM+Dz4TPgc6x PSgo 1aHVvtWh1bXWgA== INCw0YLRg9GA Km9iamVjdA== IENGQQ== IGRlc2VtcGXDsW8= IHRow6htZXM= PFRhYmxl LmVuZW15 INCw0LvSk9Cw0Yg= w7ZyZGVy IGNob2tl LmdzdWI= IHNlZ3JlZ2F0aW9u IOC4leC4tOC4lOC4leC5iOC4reC4neC5iOC4suC4ouC4guC4suC4og== b29udQ== INmH2KbYpw== IFNwYXJ0YW4= IGNsaXBwZWQ= IHDDtWhq 4KeH4Kaq4KeN4Kaf INCy0LXQtNC+0Lw= 0YrQsg== IFBERnM= 2K3Zhdip b2JpZQ== INin2YTYsdmD IG9saXZlcw== IOCqleCrh+Cqn+CqsuCrgA== LmFkanVzdA== IFF1YXJ0ZXJseQ== aXN0cmlr w61zc2ltYQ== IFVtZmVsZA== 4KWH4KSy4KSo CWdyYXBo X3NpZA== ZmF6 LnF1YW50 IOCupOCuseCvjeCuquCvi+CupOCvgQ== R1g= c3dhZ2dlcg== IGJlaG9lZnRlbg== INGB0LDQudGL0L0= INqq2YbYr9mK INC90Y3RgA== IGhv4bqhY2g= IGtvbW1lbmRl IOCmuOCnjA== J2VtYg== ZWNvbg== aXNhdGllcw== IENvaA== X2dpdmVu IG1hYmlsaXM= IMWfZXJ0 IEVsaWdpYmlsaXR5 IHhm O3E= VG9k b3BsYXN0aWM= 4LiE4Li54LmI IG1vd2Vy IGFiZ2VzdA== 2YjYsA== X3ZlaGljbGU= IHNhY3M= IOCuteCusOCvgeCuleCuv+CuseCupOCvgQ== 4LSV4LWN4LSV4LS/ LmhvdmVy bmFld2VsZQ== bWVtb3I= IFJlc3RyaWN0aW9ucw== INaH1b0= IGFrd2Fp YXJpb3Q= 1aHWgdWh1b4= KHJlbQ== IOC0ruC0vuC0sOC1jQ== IGphd3M= X0RMTA== aGV0aG8= IFBhc2M= INin2YbYsQ== IOC3g+C2gg== X0RJQ1Q= Lmhs IOCkj+Ckqg== IOGDmeGDneGDnOGDouGDoA== IOWHpA== PWluZGV4 IEVsYWluZQ== IGRldGVycg== IG3huq10 7IKt7KCc IOyCrOqxtA== X2VzdGFkbw== L2ludGVyZmFjZXM= IEFwcGxpY2FibGU= b2xhcmk= IGFyY3M= dWxlaw== IE5FUw== IHRhcnk= IOyekOyEuA== IG11Z3M= IHPhurs= PmI= 0L7QttCw INCw0L3QsNC70LjQt9Cw IFRoZXJhcGlzdA== IGdyaWxscw== INCy0LjQtNC10YLRjA== IOCwheCwpuCwvw== INWs1avVttWl1azVuNaC IGFzc3VyZXM= IOC4neC5iOC4suC4ouC4guC4suC4ouC4reC4reC4meC5hOC4peC4meC5jA== IOC4neC5iOC4suC4ouC4guC4suC4ouC4guC5iOC4suC4pw== IOC4neC5iOC4suC4ouC4guC4suC4ouC4peC4sOC4hOC4ow== 5rWT w7hycw== QmFja2Ryb3A= IOyXlA== IOGDqOGDlOGDlw== 4LS44LWN4LSV IOyghOyXkA== w6hpeGVy IFN1c3BlbnNpb24= IGxvcmc= IG1pbmltaXplZA== Y3p5xIc= IOCmpuCmleCnjeCmt+Cmv+Cmow== IFVydGVpbA== IGxlZ28= IMO2ZA== IG9kYQ== IHBlcnNwZWN0aXZhcw== IOC0huC0sOC1i+C0l+C1jeC0rw== IExvZ2l0ZWNo IEZlcm5zZQ== IHJ1bm5hYmxl IHBlbm5lZA== IG1ha2lu eWo= IHRyYXRhZG9z KWFuaW1hdGVk X0xpbmU= 5YWo5rCR INiz2YfZhQ== IGJlcsO9w6Ry IHNuZW0= 0J/QtdGA0LI= IFNvbm9tYQ== INCx0LjQu9C+ IFJhbW9u INmF2LTYp9mH2K/Zhw== 0LvQuNGC0Yw= ZXZlbm9kZA== 16DXnw== aW50ZW5k 7Jil IHBldHJv IG9iacSN LkNPTA== U2Vuc29ycw== INC/0YDQvtC00LDQttC1 w7ZmZm51bmc= fWApOwoK 7Iqk7Yag INCw0YLRgNGL0LzQsA== 44CN44CB YXZpbGk= KHBhdGllbnQ= INC30YDQtdC7 zrjOsc69 IC9eWw== a2F5 IOCkteCliOCktg== IOCqheCqqOCrgeCquOCqvuCqsA== IHVub2I= LnVtbA== IOCkuOCkruCkvuCkp+CkvuCkqA== IOGDoeGDmOGDoeGDrg== 0YXQvtC40YI= IGRlbm9taW5hZG8= U2VlaW5n IHBydcW+ Ii0t CQkJCQkJCSAg IFVpdGVyYWFyZA== IOCkuOCkguCkquCksOCljeCklQ== IOGDleGDmOGDquGDmA== 4YOQ4YOg4YOl TU9W 4K+B4K6k4K6y4K+N IOCksOCkvuCkueClgeCksg== INW01aHVtdaA X3h5eg== IGdhbGltYQ== U29saWNpdHVk ZW5kYW0= RXhjbHVkZWQ= IEvDvGNoZW4= IElWRg== IGRpaA== IFdhdGVyZnJvbnQ= INGC0LDQu9Cw0LE= INCz0L7RgNC40Lc= IE1NQw== IGN1cmVz X1dISVRF YWR2YW50YWdlcw== IG5hY2nDs24= IHByb211bGc= 2YrYsdmK2Kc= Z2hhbmE= INin2YTYr9mC2YrZgtip IGZhbmRvbQ== S29kZQ== 0LXQudC8 IHN0w7h0dGU= IGVzY2x1cw== IEhhcmR3b29k aXphY2Fv INCR0L7Qu9C10LU= IFRyaXQ= IOuFuOugpQ== IGFubWVsZGVu IHfDpHI= IG5rb2th IGJhbGNvbmllcw== IGzDqHZyZXM= IG51Yg== IGJlbGllYnRlc3Rlbg== INGD0LbQsNGB IGNob2R6aQ== IGlteWFrYQ== dXNoYW4= Lm11dGFibGU= IGF0YXVwdW4= IEtvb3BlcmF0aW9u IOCmquCnnOCnhw== IGt1a3U= IHN0dWRlbnRp IGNhdml0aWVz IG5nYXc= INCd0LDRgA== INC40LHQvg== 6ams5LiK IOCkhuCksOCli+CkquClgA== 2YXZiNin2K8= IExhdmVuZGVy L3NjcmlwdA== IG1vaXN0dXJpemVy IHdhZ2Vycw== YW1wZW4= 77yy IEZseWVycw== IEd1amFyYXRp IGlzYWdh VHVt LldSQVA= IEFTQQ== IG11dGw= 56Wt ZmVlZHM= IENvdW50aW5n KGVj IGNoZWVzZWNha2U= IGVkdWNhdGl2b3M= 4LCo4LGN4LC44LGN IHRyYWRpw6fDo28= IGZhYnJpY2HDp8Ojbw== 2YjYrNio IE1NUw== X2V0YQ== cHJvcHlsZW5l 5Yip5p2l Y2hhbmljYWw= KGtpbmQ= INC90LDQt9GL0LLQsNC10YLRgdGP INi62YjYsQ== IOOE cG9uZW50ZW4= IFNhcnQ= d2VyZW4= INeS15PXldec15Q= IG9wZXJhZG9yZXM= IFNlbmlvcnM= T3JnYW5pemF0aW9ucw== 4KuB4KqW aWZpemllcnVuZw== SW1wZXI= w6pyZQ== IOS9nA== VklERU9T IHNjaHJpamY= IEJlYQ== X0lOQ1JFTUVOVA== INC905nRgtC40LY= IFlvc2g= IOCkuOCljeCkn+CkvuCksA== Kydc IOC0oeC0v+C0uA== U2V4bw== 4LCw4LGN4LCo 64SY IENhc3NhbmRyYQ== INGA0LXQvNC+0L3RgtCw IGFxdWlzacOnw6Nv IEltcHJlc3Npb24= 1aHVvNW21bjWgtW0 IGNvbmZpcm1hZG8= b3NpYQ== 4KSo4KWN4KSm4KSw PXsoew== IGZvcmtz 77yJ44Gu RXBpYw== X3JldHJ5 IG1vc2E= INmF2LnZitmG2Kk= 1aHVtdWl1aw= LlRJTQ== IGhlbmRl RGlhcnk= IGVzYW4= Y2tsZW5idXJn ImRlc2NyaXB0aW9u IOC4n+C4o+C4teC5gOC4hOC4o+C4lOC4tOC4lQ== IMOpbGV2w6ll UElY IHBlbWJheWFyYW4= IFNhbWE= eGNl IOC4neC5iOC4suC4ouC4guC4suC4ouC4o+C4suC4ouC4geC4suC4ow== 0YHQvtGA Um9nZXI= 1aHVsNWh1oA= IHFyeQ== INCy0LjQutC+0L0= IGxhbmp1dA== IOC0quC1geC0seC0pOC1jeC0pOC0v+C0sQ== IDw/PSQ= 44O844Or44OJ c2xpZGVz 2KfYptmI2YY= INC+0YLRgtGD0YDQuNKT0LA= IG1vZGFsaWRhZGVz IGxhemltYQ== IEFubGFnZW4= IHN3YXBz IG5lYnk= INCe0L3Qu9Cw0LnQvQ== LnNpZGViYXI= IEpldQ== IE5pZ2Vs 5oSf6LCi INiv2KfYs9iq2KfZhg== Lm1vZGVsbw== IGRpdmVyZ2VudA== CUdyaWQ= 4YOa4YOd4YOR INCy0L7QstGB0LU= IGRvbG8= dXJlbnQ= KFJl IGFtcGxv X0xJQ0VOU0U= YmxpY28= 5rOo5paH IENvcnXDsWE= X2dlb21ldHJ5 QXNzZW1ibMOpZQ== KHBrZw== INiq2KjYrdir INGB0YfQuNGC0LDQtdGC IGZ1bmRhbWVudGFpcw== IEZpbG9z aXBpdA== YWtldXA= UHJvZHVr IGxpdGVycw== IHPEsXI= 2q/ZiNuM IGRlYWxlcnNoaXBz J10KCgo= 2YjYs9mK b2NlbmU= X2Z1dHVyZQ== IEVDT04= 6Ys= IGhhcm1vbmlvdXM= IHVuZm9yZXNlZW4= IHdldGg= bG9nYW4= Okc= esO8Z2U= 2Y7ZiA== ZW50d2ljaw== LnBvcHVsYXRl IG5hc2lvbmFs IGJvb2RzY2hhcA== IGtodXQ= 0YXRi9GA0LDQsNGA0LA= T2xl IGFsc25vZw== IHF1YWxzZXZvbA== Y2hyaXN0 aGhoaA== IHVzZA== IM+Ez4HOvw== INGE0LjQutGB IGRlbGltaXQ= 77yBCgoK SWFt X3V2 b2Jvb2tz IG1hbG9zaQ== IHBlcm1pdGVt IOyekOq4sA== aGVtYmE= PlRvdGFs IOW9qeelnuS6iemcuOeUteiEkeeJiA== ICgtLQ== IGxvdXJk IHVuZGVyZXN0aW1hdGU= 15HXnNeZ IGNvcnJ1cMOnw6Nv YXNzZW1ibGVk IHBhaXjDo28= IHBlcmZ1bWVz IEhlcm7DoW5kZXo= z4HOsc+AzrU= 6Kiq 0YPQtNGW U3VibWl0dGluZw== aXJrZW4= 0KPQutGA0LA= IOeZu+W9lQ== 0KHQvtC3 IHNvbGNoZXI= dmVueg== ZXJzY2hhcA== IGNlaw== INC/0LDRgNC+0LvRjA== IHDDpXZpcg== IOC4quC4m+C4reC4o+C5jOC4lQ== INmF2LnYp9mI2YY= IGJpeXlh INin2YTYo9is2YbYqNmK2Kk= X2V4ZWN1dGlvbg== IG5kaXll IGRlc2VtYmVy 0LzQsNC90Ys= INGB0L7QtNC10YDQttCw0Yk= 5Lq65rCR5YWx5ZKM5Zu9 IGdlbmll IEFscGg= 15nXm9eV158= INC10YLTmQ== bWVyYXM= 4Z+B4Z6R IG11bHRpcHJvY2Vzc2luZw== aG96YQ== IERSQVc= IEB7Cg== IHNlcXVlcg== IOCmleCmoA== 44Kk44OI44Or CWNvbmY= KGRldGFpbHM= dWNob3M= IGthdXB1bmc= 0J7RiNC40LHQutCw RW5jb250cg== IEJhbmRl IGNyZWFkYQ== IGtvbnRhbg== I1NCQVRDSA== IEZpYw== IGFzcGVr cHJveg== INiz2YrYp9ix2KfYqg== Qm91Z2h0 b25zdW0= IGdyb3Q= V2lraWE= a2hpcWl6bw== PEZsb2F0 4oCc4oCm IGZyZXNjYQ== 5pyX5pmu Y2h3YW4= ZXRoaWNhbA== W2ZpbGU= 55qE572R5Z2A IGZyw6lxdWVudA== 4oCM2KrYsduM2YY= IOebkA== IEVsZXZlbg== INGB0LXQvNGM0LU= Y2hha3Jh IOaYk+i0rQ== 4LSw4LS/ Lmd1aWQ= IGxhY2hlbg== VXRpbGlzYXRldXI= b25hbmE= S2F0ZWdvcmk= 77iP4oOj Tm90ZWJvb2s= IFRlaWxlbg== INi02KfYudix IGlzb2xhdGVz IOCkteCksOCljeCkt+Cli+Ckgg== R3JhZHU= IGNpcmN1bGF0ZWQ= IHhpeQ== IOCypOCzhg== IHB5cmFt LW5lY2s= IHByb2PDqWRlcg== YWdlbmE= ZGVwZW5kZW50 INeZ154= b2xvZ3Vlcw== 0LDQu9Cw0Lc= cmVrZW5pbmc= IFRhbWFubmE= X2ZsaXA= 2YbYr9qv24w= X0NBUFRVUkU= 4Lih4Lix4LiZ IEJlZ2lubmVy X3Jlc3VtZQ== IG1hw58= IHBvdGVudGlhbHM= QUZY INmE2YjZhg== UmFo U0VSVklDRQ== IOColeCpgOCopOCovg== IGRpdnVsZ2Fy KHRibA== fn5+ IGRpdmluYQ== IHNpbXU= IEd1cHRh bXl6 IFdpZGdldHM= VHJhbnNpdGlvbnM= Lm51bWVybw== IGthxbxkZQ== 44Gq44GK 4LCC4LCq4LGI Uko= IEh5Z2llbmU= IHJlbGlzaA== IENvbGxhYm9yYXRpdmU= c2VyaQ== INin2YTYrdiz YXRlbGllcg== IHTEkw== IGlseWVu U291dGhlcm4= 0L7Rh9C4 INiq24zYsQ== 66i464uI U3Bpcml0 INin2Ljbgdin2LE= IERvbHBoaW4= IFZlbmV0 dmVya2V0 dGhhdmVu INGF0YDQvtC90LjRh9C10YE= 2LHZiNip TXY= IGZhYnJpY2E= IGFjZXNzw7NyaW9z INmF2LHYp9iq IHNhaGliaQ== INC40YHRgtC40L0= TmVv IGVzdGVlbWVk IHZvbGVy w7zEn8O8 IGhvxZ8= IHdlaXRlbQ== IFNoaXY= IGlubWlncg== Z2V6b2dlbg== 5oCn54ix aGViYmVycw== YW50dA== 4Kif4Kiw IGJvZXJlbg== QVJFQQ== INmI2qnak9mH IGNocnlzYW50aGVtdW1z 0L7Qu9Cw0LM= 0L7QvNCw0L0= IFBIWQ== LGRl INC70Y7QsdC70Y4= IOCmleCnsOCmv+CmrOCmsuCniA== INC80YvQudC30LDQvA== 0L7Qu9Cz0L4= yrxl INW21aXWgNWk IGJveXVuY2E= dmFsbw== INC/0YDQvtC00YPQutGC0LA= L1VJ 77yO77yO LlByb2R1Y3Rz IOCyteCyv+Cyp+CyvuCyqA== IHZlcnBmbGljaHRldA== IOCyuOCyruCyrw== THVvbmc= KGZsb3c= IHZvbHRv IHVubGVhc2g= K3A= 0YPRgtC4 LkVuY29kaW5n anNrYQ== 16TWv9ef LUJs RnVlbnRl PCgpLA== ZW5kaWVuc3Q= IG1pa2U= KENlbGw= dGl1bQ== IFFVRVJZ PFRyYW5zYWN0aW9u IHBhbGs= IHJlcHVkaQ== CWFkbWlu IGJ1cmVhdXg= IGhlcmVkaXQ= IGdhZ27DqQ== 5LyY5YyW K2g= KGVudmlyb25tZW50 Ij4KLy8= 6IeA IHN0xZk= IOCyueCzhw== IOC4hOC4ueC5iA== IE9saW1w INin2YTZgdix2K8= IGRpc2FudA== aGVhZGxpbmU= WUs= eGNk IHNvbWJy IOC0ruC0vuC0uOC0gg== IHphZ290 Lm1vdg== IGV4Y2x1c2lvbnM= IHNwZWN1bGF0ZQ== 4LSu4LWB4LSW IGZyZXV0 LnNhdmVk INin2YTYp9i0 IHR1bmlz bGlnYXJl IOCyieCypOCzjeCypOCysA== INCU0LDQsg== IOGDpeGDoA== IG1pbGRseQ== IHdhbmd1 dGVsZWdyYW0= 4YOQ4YOc4YOu4YOb c3RlbGxhcg== IHJlamVjdGluZw== KG1hdGVyaWFs 55yL5p2l IEd1YXJkaWFucw== INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4= 57q1 IGhvbW9nZW5lb3Vz eW5ldA== Kz0o 0L3QvtGI INis2KfZhw== dWrEmQ== IGlzdGV5ZW4= ImVycm9ycw== IHZlcm5pZXQ= IE5hdQ== XX0s IGdvdmVybm9ycw== INix2KfYpti5 cmF0eW4= TWln CVVJ IGNpY2w= 0L7QvNCx IOu4jOuenOuTnA== IHRlcnJhaW5z IHJlw6dvaXQ= IEF1dGhvcml6ZWQ= 5paw55aG 1aHVttWh1azVuNaC aXRhcmU= IOWTiA== KE1lc3NhZ2Vz 4LC+4LCk4LGA4LCv IHBhc3PDqWU= dXNjaGVu IHNla3Np IFNhcmFqZXZv IHNlbmRl IHRhbWU= IGtpbG4= IGFudGltaWNyb2JpYWw= IEJvYw== IGNvbmN1cnM= IFp1c2F0eg== IHF1w6Ju IEZlYXN0 c29ueQ== IGFhbGFqYW5nZXJz IM6xz4HOus61 INmG2KfZh9mK 2YPYs9mK2LE= IEJpbGRlcm4= IHZhY2g= IM61zrw= IGZlaXRlbg== VnJpag== IHNpbGxl INC/0LXRgNCy0YvQvA== IHphYm8= IEZyZWFr IE5laQ== IOC0pOC1geC0sQ== IOCyruCyvuCyoeCyv+CypuCzjeCypuCyvuCysOCzhg== IGNocm9taXVt Q09NTUVOVA== emlwbGlu IMOL IOCuteCvh+CusuCviA== 5Lqa5rSy5pel6Z+p X3JvdGF0ZQ== IGNx IGRlc3RpbsOp IHBvcmM= INC/0YDQvtGG0LXQvdGC0L7Qsg== Zm9ybw== IGlsbGU= 0YfQsNGA0LA= IHNoZXJpYQ== INC80YPSu9C40Lw= LmVuY29kZXI= INeR16DXldep15A= IEJhbGthbg== 5aKZ IGFzcGlyYXRpb24= 4KWn4KWu IOC4o+C4teC4p+C4tOC4pw== IOWFqOawkeW9qeelqOWkqeWkqemAgQ== aW5lbWVudA== 4K65 INCh0LXRgNCz0LXQuQ== IFN5bHZpYQ== IHNvYXI= IGxldHp0ZXI= INC40L3RgtC10LM= XStc IOCuheCuqeCvjeCuseCvgQ== IHNlcmlhbQ== IEluY29ycmVjdA== IEFycml2YWw= IGxhYm9yYXRvaXJl IENvaWw= IGNpcnVyZ2lh INCe0L3Ri9Kj INep157XqQ== IENJVA== IER1ZWw= IGNoYW1waW9ubmF0 YWx6 Zm9ybWlu IEJ1c2No V2VyZQ== IGJyYcOnb3M= 0LzQvQ== 0q3QsNGA0LA= IOCqruCrgeCqsuCqvuCqlQ== TU9T Lmhlcm8= 4Kq+4Kq14Kq14Kq+4Kqu4Kq+4KqC TGV3 Tng= ZXJpYW4= Z2V0bGluZQ== INmB2YrYsdmI2LM= cmlw IGppcmFu 5ZOI5bCU Y3JpbWU= 4Z6A4Z+S4Z6a X0dVSUQ= LXVpbGU= IOm7gw== 4YOc4YOQ4YOh IHNleHRyZWZm 0YHRgtCw0L3QtNGL0L0= QklP 0LLQsNC70YHRjw== 15DXpw== IGF2YW5jZXI= YW5kaWRhdG8= IEdlcsOk INC60L7QvdGD0YHQsNC9 INCW0Jo= z4POvM6xz4TOsQ== 4bmi ZXRlZXI= 55C0 w6FzdGljYXM= IHNlZ29ucw== IGV4Y2VwY2nDs24= IERvc2U= Wm9hbHM= IGZvcnNldA== aW50cm9kdWNlZA== Y3JlZGl0ZWQ= X1dpZGdldA== Q2Fsb3JpZXM= INWh1bA= INGF0L7RgNC40rc= LHRpdGxl INmH2LrZiA== INCw0YjTmdKf05nRiw== IG92ZXJyaWRpbmc= INC30L7Quw== IHNjcmF0Y2hlZA== INC40L3RhNGA0LDRgdGC0YDRg9C60YI= IExhcmdlcg== IGdhc3Ryb24= 4KqC4KqW IOC4luC4meC4meC4quC4uOC4guC4uOC4oeC4p+C4tOC4lw== SW5kZW50ZWQ= 0LDRgNGL0L8= INW91aE= LGZvbnQ= aXhlbWVudA== L2ZpbHRlcg== 77yM5oqK IG5lb3A= CW9wdA== 157XmdeY INeo15XXpteZ150= INiu2LfZiNi3 LG1zZw== IikpOw0KDQo= YWxpeWV0 IHTDtA== IGtsYXN5 c3VibWVudQ== INC+0YLQstC10YLRgdGC0LLQtdC90L3QvtGB0YLQuA== IGNlbnRpbWV0ZXI= INC60LjQu9C+0Lw= QGluY2x1ZGU= UklT IGd5ZQ== IENyb3dk LnNoYQ== IGtpeQ== IGh1w6k= IOCmleCmsOCmrOCnh+CmqA== INin2YTZhdi12YbYudip IHBvbmlld2HFvA== 44CN44Gn44GZ 157XoNeZ150= YWlzaQ== INiu2YrYp9ix2KfYqg== YnVzY2Fy IFdpZw== IHZlcmhvZ2Vu Z3Vz 5ouF5b2T w71z eXRh IHlhbGk= IOCmpOCmvuCmueCmsuCnhw== IFN2ZW4= IFNvdXph IHN1cGVyaW50ZW5kZW50 IHBlcnRhbmRpbmdhbg== INmE2YTYsQ== LmFwcHNwb3Q= 44Gw44KT YW5nbGFpcw== dG9l INGH0LjQvQ== YWRveA== IHN1c2NlcHRpYmlsaXR5 JGFy IENTdHJpbmc= IEphbGFu IEZydWl0cw== 4KWN4KSV4KWA 2YfZiNip 4oCZaW5mb3JtYXRpb25z KCIvLypbQA== IHVuY29tcGxpY2F0ZWQ= LlZhbA== INC90LDRh9C40L3QsNGO0YI= dGllcg== 2KfZitmI IGZvbGxl IGdyYXppbmc= IENhbGN1bGF0aW9u IGNhbmRpZXM= IExpbm4= IHN0b2NoYXN0aWM= INmG2YXZiNiw2Kw= 4LmC4Lib LlRpcG8= IGbJmXI= X2NvZA== IGdyb3VuZGluZw== IFBhcnRpY3VsYXJseQ== IGdpcmxmcmllbmRz U1RSSUNU nGk= SUdITA== aGFyaWE= IE1vaW5lcw== 7KCc7ZKI KCI+ IGVzY29u IGNpaWRhbWFkYQ== X2ZyYWN0aW9u IGNvbGxpZGVy aXphcmU= IHRhcmtv 4LS44LWN4LS1 dXN0b3M= INOZ0LQ= INi02b4= LDopLA== aW5naXo= IHJldmVuZA== IGFpZGluZw== 4YOd4YOo J9ef INC/0YDQtdC30LjQtNC10L3RgtC4 IGRyYXXDn2Vu INC/0YDQuNC70Lg= J2FmZmFpcmVz U0o= PXE= LWxhbmQ= IGF1dG9yaXphw6fDo28= IHRyYXNl IGhhcmluYQ== IEVTQQ== INi12KfZgQ== dWxkdQ== Q2F0aA== IENvbndheQ== 4Z624Z6f4Z+L LmVudGVycHJpc2U= aGxhbmdhbg== SW50cw== IHRvZGF5cw== IGhhc2k= aGVtYQ== INWk1aXVutWr IHZldGE= IOG7pXThu40= aXJhbGE= LWZsYXQ= 4KeN4Kaf4KeL IHhpcw== IFTDqWNuaWNh cHNrZQ== w6VyZXQ= IGNhcm5pdmFs IMSNYXNh Lmxpc3RlbmVycw== T1NQ 5L+K IGFkb2xlc2NlbmNl IGtvbG0= KGdlbmVyYXRl 4YCx4YCV4YC4 INmF24zaqdmG IHRhZGFs IGzDoWdyaW1hcw== 5omT5rOV INiq2KfaqduB IOuwsOyXtA== IGhpc29i YXdhaA== YmV3aWpz xIFkaQ== IHNlaWQ= IOyIqw== dXRhbm8= INCr am91cm4= 1aHVvdW/1aHVtg== IG9zY3Vybw== INGI0L7Rgw== IGJsdWZm LmZoaXI= IE51dHM= IGJvdGFuaWNhbA== IM61zr3Otw== IElURU1T IGhvZGlu c2luZ2xldG9u INC30LDQutCw0LfQsNGC0Yw= 4oCZdXU= INCS0LDRgA== IFBhc2U= ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== X3dhdGNo IGlndWFsZXM= 4LC+4LCu4LCo4LC/ INCi0LDRgtCw0YDRgdGC0LDQvQ== INCY0YI= 2KfYstmE IEd1bm4= INCx0L7Qu9Cz IG1heGltZQ== IFNFU1NJT04= IGFubm9uc2Vy INio2LrYr9in2K8= RGlhZ29uYWw= KGxpZ2h0 RHJhbWE= IGVmZmU= 4oCZZW5j CWNoYW5uZWw= INee15DXkw== IEJ1Yg== aW1pc2Vrcw== IGFsaXF1YQ== 8J+Rhw== 4oCTYW5k X3dhdmU= IEVDQw== IG3DoXRl 05nRgNCz05k= Z2VsZXZlcmQ= 0LjQt9GL 2YXZvg== IHF1YWxpZmlj INCx0L7Qu9C+0LzQtg== INmI2o8= aXJiaMOtcw== QlVN 5Yag5Lqa 2aLZoA== IGZvdG9hbmE= IHJlZHVjZXJz 64KY7JqU Q2FsZW5k w61ucw== YnV0ZXJvbA== 56GV PSIvIj4K IGVqYWM= INmI2YfZhtin2YM= X1JPVA== YXVmbmFobWU= IGdhbnNrYQ== INin2YTYpdi12KfYqNip IHJlZHVj IG3JmXI= IHJlZnVnaQ== IGJhcmJl IOCqleCrjeCqr+CqvuCqgg== IOCuruCuvuCuqOCuv+Cusg== 4YOZ4YOY4YOX4YOu ZGFhbg== cmlrZQ== IGNvZXhpc3Q= IEVuZGluZw== INCx0LDQudC70LDQvdGL0Yg= IG1hZHJpZA== IHZlcmtlZXJk IG1pbnlhaw== IG1hZ2dpbw== Jyl9PC8= TWVyY2VkZXM= IOCkquCkm+Ckvw== IGhvyrtvbg== YXJuaXNzYWF0 IEFjdG9ycw== IEp1Z2VuZGxpY2hlbg== X3JvdXRlcw== IHR5cw== IOGDkOGDk+GDkuGDmOGDmuGDmA== 77yM5q+U5aaC IGhsZWQ= INCx0YPRjg== IGFpc2w= IOCkuOCli+CkruCkteCkvuCksA== xZ9kxLFy aGV0YW1pbmU= IEFsbGVtYWduZQ== U3RpY2t5 IFBmbGljaHQ= 5Liw5a+M IGxvY2FsaXphcg== IGRlY8OidA== KFJhbmRvbQ== SW5zcGVjdGFibGU= IHZyc3Rl IHJldHJhbnM= IEhlaXo= IOCkleClieCksuClh+CknA== IHNvY2lhbGlzbQ== aW5lYW5u IHNpZ2U= IHJoYWlk L2NvbW1lbnRz INCx0L7Qu9C00YM= LXBvbGljeQ== INiz2YrZhQ== IOCwr+CxgeCwtQ== 44CB5bCP IHTDpm4= IFNjaHVsZA== IG9mZmVuY2Vz fT48 IEhlcnJlcmE= IEFpcmxpbmU= IOCkleCkpeCkvg== U3ludGg= INC/0YDQtdC30LXQvdGC0LA= IFByaW5jZXM= IGJhcnJlZA== Y2FuZG8= RW1waXJl IHZpc2l0YW50ZQ== U3RhcA== 44CROg== IH19Cgo= INCx0LDQudC90Lg= IHHDvA== 0LDQutC4 IOCyteCyv+CyteCyv+Cypw== IHZlcnNjaGlqbmVu IGd1c3Rl RGVmaW5lcw== IHNhaWxlZA== 44K/44Oz 5aKe5by6 INGA0q0= IEt1ZG9z INC/0L7QutCw0LY= 4LON4LKe4LK+4LKo IEFuYXN0 TmV1ZQ== INCx0YPQsg== KG9icw== IGFsa2Fh IGFjdGl2aXRhdHM= INin2YTYqNi02LHZitip 0LXQutGG0LjRjw== 0L7RgNC10YI= YXhz IHBhbWI= IHRoaeG7h24= INWn1bs= 0LjRgdGC0YDQsNGG0LjRjw== IG9kaw== IENodXJjaGVz RERE w71ldGk= 5ZCO5LiJ IFZlcnI= INmK2LjZh9ix T2o= QlRO IGJvc3F1ZQ== Q1JU IFByYXY= IE1vbGRvdmE= IGtsaWNr INC90LDQutC+0L3QtdGG YWlubw== Y29udmVydGVy IHN1w61vbWg= 2LHZgdi2 IEFzcGVy IGRsYXRlZ28= IHpvcA== IGxlbmdl IEhlcnJu L21lbWJlcg== IG15w7Y= IHJlaWNoZW4= Kk0= IOCmquCmvuCmsuCmqA== IGluZsO2cg== dW1hdG9pZA== UExM IOC0ieC0s+C1jQ== IOCmleCmsOCni+CmqA== eW91bmc= IFlvbmc= IG1pbmFz INmI2KfYs9i52Kk= IE15cnRsZQ== INin2YTZhdi02KfYsQ== IGJsb3dlcg== IOCqruCrgeCqsuCqvuCqleCqvuCqpA== INeU16bXmdeR15XXqA== 6aCQ IENhc2Fz IE5naHltcnU= LUFk U2VsYWlu 7JuQ7J2E IERpc2h3YXNoZXI= KGNvb3Jk IGNhbnRvbg== IERpc2FiaWxpdGllcw== IOGDoeGDkOGDm+GDmOGDnOGDmOGDoeGDouGDoOGDneGDoQ== 4oCZYWRtaW5pc3RyYXRpb24= 0LTQuNC5 UGxhbmVz TGF5b3V0cw== IGFjY2VudGVk IGJldHJheWVk XGRi IGFjb21vZA== IGFjY3Q= Ij4KCgo= IM60zrnOrM+BzrrOtc65zrE= INC00L7QvNC+0Lk= a2VubnVuZw== IHZpdGFtaW5hcw== IOC0leC1iuC0suC1jeC0sg== IElOVEVSTkFUSU9OQUw= IOCkrOCkv+CknOCksuClgA== IHJlbXBvcnQ= 0JvRjtCx IFV0dGFy c3dvcnRo eXNlbg== IGJlYW50 LXByb20= IGludmFyaWFibHk= IGVuZ2Fu ZWx1amFyYQ== IE1JWA== ZWxlcmRl IGJhcmdhaW5z IGthZ2FtaXRhbg== aW5pYw== S2Vuemll INC/0YDQvtCx0LvQtdC80YM= INCx0LDRgNCz0YPQtw== 24jYsg== IFB1bXBz LmV4YW0= 05nRgtC605k= UlRM KHJi IGVuc2VpZ25hbnRz 4KeL4Ka4 IENoYXJnZXJz UmVzZXJ2YQ== 16nXqNeq ZWdhYW5rYQ== LmJhY2t3YXJk IGVmaWNhY2lh IOCkreCkvuCkhw== 0YHQutC40YLQtQ== 4oCZYXJyaXbDqWU= INC00LXRgtGM0LzQuA== IGdyZWVuZXJ5 2Y/ZhA== IGJhZQ== IFd5bg== IGx1aHVy IGFsYXNrYQ== X1NPTA== KGJsb2I= INC50LjSk9C40L3QuA== IOGDnuGDkOGDoA== IG1pc2lzcw== IHByenlw R2F6 4Lip4Liy4Lii4LiZ IGRpc3NhdGlzZmllZA== 4Lit4LiV4LmA4LiV4Lit4Lij4Li14LmI aW1taXQ= IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v IGNhbWVyZQ== INmI25A= IGhhbHRl INin2YTYotiu2LHZitmG YXBhbGE= IEFic3RhbmQ= 4LK/4LKo4LK/4LKC4LKm b3Njb3B5 IGJyZWl0 IHVuaW5n INC30LzRlg== IOy9lOuTnA== J2ViZXRzbw== 64yA7ZWc IETDqXM= INm/2Yrauw== 0YHRgtCw0L3QvtCy0LrQsA== 5Yqo54mp YXJrZXJz IGNhcnZl IHNhbGllbnQ= Q2hhcXVl INin2YTYo9io IHBzeWNoaWF0cmlzdA== c3Rlcm4= IFJhem9y IE5ha2Vu 4LOA4LKa IEFyY2hpdGVjdHVyYWw= LnZpcnR1YWw= IHRyb29w IGRhZGVz TWlsZXM= YXNzbGU= IHZvbGRvZXQ= IHZqZXI= IG11dXE= TmVzdGE= IGFubWVsZGVsc2Vy LmtlZXA= INeW15XXkg== w7rEjQ== Jz0+Ig== IMWfYXJ0 IG1lbGR0 IGFkbWluaXN0ZXJpbmc= IOCkquCksOClh+CktuCkvuCkqA== X3BpY2tlcg== eW5kaGFt d3ludA== a292w6k= IEJlcm11ZGE= 0YHQtdGC INCx0LjRgNC+0Lo= LnVucmVnaXN0ZXI= IFdpbms= INmF2YbYp9io2Lk= L3BsYXllcg== fD0K dXZpYWw= 0L7RgNCw0YU= IGlubnVtZXI= INCV0LrQsNGC IOCmruCmv+CmqA== IGRvxZt3aWFkYw== IGdyw7hu dWlkZW4= 5aSa5Lq6 CWluaXRpYWw= 2LfYsdit aWJpw6fDo28= IV0= X0NPTk4= IHByZW5kcw== IHNlbWFuYWw= LVNlbWl0 INCy0L/RgNCw0LI= IGJvb3M= IHR1cm1lcmlj INmI2KfYsdmI INC00LjRgdGG0LjQvw== IGNvbGzDqGd1ZXM= INix2YXYsg== 6YKu5Lu2 bmF5 77yj L3BhY2thZ2U= 4Lij4Lix4LiB IHPDpHJzaw== INqp2r7bjNmE IG5vbmZpY3Rpb24= IE1hc3Rlcidz 2KjYt9in2YQ= amFuamU= INC40LfQvNC10L3QuNGC0Yw= KGNvb3Jkcw== TWVuc2FnZW0= IHNjYXJjaXR5 INC90Y4= IOCkquCkueCksg== INmF2LnYp9mF2YTYp9iq IFF1b3Q= PEdyb3Vw VmVyZGFuYQ== IFZhbmd1YXJk IGNhbnRvcg== IGrDoXTDqWs= IGRlc2NyaXBjacOzbg== IGZhbGxh IOC0qOC0vuC0n+C1jeC0nw== 0LrQsNGB0YbRlg== IOCwquCxguCwsOCxjeCwpOCwvw== IHFhYmFu 0LrQvtCy0L7QuQ== 4Lij4LmJ4Lit4LiH ZGnDsA== IOCksuClh+CkluCklQ== IG53ZQ== INC40L3RgtC10YDRhA== INmF2YrYsg== emlhbGU= Q29uc3VtZWQ= IGtvbnRpbnU= IHJlY2lldmVk LWFubg== IGzDpHNh 0YvQu9GL0LzQuA== IHPDvG1wdG9t IGJlcnA= IOCkleCksOCktQ== IOCwh+CwguCwpg== dWRpZXI= IHNwcmluZ2ZveA== IGtlYmVy IGZpbmFuY2llZWw= 77y/5L+65Y675Lmf X05FRw== INi22LHZiNix2Kk= U2lw IENhbGlmb3Ju 0L7RgdGC0L7QuQ== 7Iqk66Gc 0Y/QstCw aW5kd2E= IHByw6ptaW8= bGNvb2w= R2FtZXBsYXk= p+GDo+GDoA== IOCmsOCmvuCmqA== IFN1aWNpZGU= 4LeK4Lap INin2YTYqNin2Kg= YWdvbmE= 4KSm4KS/4KSo 0YLRg9GA0YPRiA== IFNlbnRlbmNl IE1hcmlhbmE= IG13ZXpp LnBlZXI= IOCmruCngQ== cGllY3plxYQ= YWRlcmFz IGluYW4= IOGDouGDmOGDng== X3N1aXRl Qmli 5Yig w7RuaWNvcw== IHB1Yw== 44CA56ys YWdi IGZyb250ZXJh INi52KfZhNuM IHF1ZXN0aW9ubmFpcmVz CWVu bHZs INC40YjRgtC40YA= IGh1d2VsaWpr LmxhbmQ= IHJpZGQ= X3N1YnBsb3Q= IOCksOCkluClh+Ckgg== 4Z+G4Z6g T0dP IGRlbGVnYWRv 4LS/4LSa4LWN4LSa4LS/4LSw4LWB4LSo4LWN4LSo4LWB IGNyaXTDqXJpb3M= VG9yb250bw== 5Yqg5YuS5q+U IFRpZW1wbw== INC60L7QvNC80YPQvdC40LrQsA== KGRvdA== 4YCx4YCh IEt1bmE= X3VuaWNvZGU= 4LSu4LSo4LWN4LSk4LWN4LSw4LS/ 4LqZ LS0tQA== IHlw IOCkueCkv+Ckrg== IGZvcm1hbmRv L3RtcA== 44Ki44Oz INCg0LDQsdC+0YLQsA== INC+0LHRgdC70LXQtA== LmNvaW4= IGt1Y2hva2VyYQ== 4YOb4YOQ4YOg4YOX4YOV4YOU4YOa IOGDoeGDkOGDqg== INC10L3Qsw== INGI0YLQsNGC U2VxdQ== IGJlZHNpZGU= TGVzc29ucw== IOawkQ== IGplZG4= INCj0L3QuA== CVFTdHJpbmc= Jyk6DQo= 15XXnteZ16o= UmFu IOGAu+GAluGAheGAuQ== IGZhbm5v cHJldmVudA== IE9mZnNob3Jl IOCyleCzg+Cytw== Xyk7DQo= LW1hbA== IHRydWNz IOGDkOGDoOGDoeGDlOGDkeGDo+GDmuGDmA== IHJldHJlYXRz IHByZWZpeGVz IHVuaWxhdGVyYWw= IEFQTw== QWxjb2hvbA== TE9ZRUU= VklJ INin2qnYq9ix IOagueaNrg== IGtvdXA= IHJ1bXBl YnJpbmdpbmc= CXBs 6ZaJ 5a2m5Y6G YWphZGE= IHlhdMSxcg== Y29uc3RyYWludHM= X3llcw== INC80LjQu9C70LjQsNGA0LQ= IEV2ZXJldHQ= IOC0uOC1jeC0qg== INin2YTYrdiz2KfYqA== LUV1cm9wZQ== IFpodQ== IHV0aWxpc2VudA== IMO2w7BydW0= U2ltaWxhcmx5 0LXQtNC10LvRjA== IM68zr/OvQ== INin2YTYqti52Kg= IGN1c2hpb25pbmc= INCy0LjRhQ== IHNjaGVycA== SW52YWxpZGF0ZQ== 2KfYr9mK2YU= IGJ1ZGRo c3Vic3Q= INCz0LvQsNCy0LA= IFZvY2FidWxhcnk= IHByb2NsYW0= X3VuaW9u amFyYQ== VGllbXBv IFdpbGRlcm5lc3M= IHRlbGV2aXNpb25z bWFpbGVy 44Gq44Gf IFRhaXBlaQ== VkY= LXRhbA== LlBsYWNl QnJhbmNoZXM= YXJrZXVu IHBj6JuL6JuL IHRlbWl6 VHVu IG3Ekw== INWN1aE= LlBPUw== IG1heXJvb24= IOCumuCun+CvjeCunw== INiq2KfYq9uM2LE= IEluY2x1c2lvbg== IEdBUw== IG91Ymxpw6k= 4LSV4LS+4LSw Z8Op Y2hyaWp2ZW4= IHlldGVy e3JldHVybg== dWxpY2g= IHByZWRhdG9y 5LqU56CB IGVudGVycg== 0LvQsNKT0LDQvQ== IOyYgeyDgQ== INC60YPRgNGB0LA= IFRFWA== IERyYW0= LnNvbHZl INee15nXnNeZ15XXnw== 4oCmdGhl INiv2LHYotmF2K8= IGdvbW1l b3BlbnplcHBlbGlu IOCmr+Cnh+CmruCmqA== IGFudXM= IOGDk+GDlOGDmQ== IGxkYXA= IEtydQ== L2VtYmVk INei15HXldeT zrnOtQ== LWRpcmVjdG9yeQ== LCIs IOGDk+GDneGDnA== INin2YHYqtiq2KfYrQ== cmVrbGk= ZW5uZW0= IFJlZHV4 IG5hdHVyZWxsZXM= b3RoZXJhcGV1dA== Yml0ZQ== c3RyZXRjaA== 0LjRgtC+0Lw= zrXOtA== RHc= IOCwmuCwpg== IOCmquCngeCmqA== IEZyZWV6ZQ== W2Fycg== 4YOa4YOd4YOR4YOQ 4YOd4YOc4YOY4YOh4YOr4YOY b3JzdQ== IOyytO2BrA== LXJlc3VsdHM= IHNjw6luYXJpbw== YW5nbnlh 77yaaHR0cHM= 15XXnteo15nXnQ== IHVybWE= QFs= X2xvY2tlZA== IiY= IGVzcG9ydGU= LnJldg== IOCmtuCmv+CmtuCngQ== IG5pbWE= IG11cA== IGJhdGVu IOCkruCliOCkpuCkvuCkqA== 2LHYqNuM IGluZmFudHJ5 IOC0uOC0vuC0rg== IOC0ruC0vuC1vA== aWN1cmU= IGJ1c3RlZA== IFNldmVudGg= 2KfYr9mI IGllZw== IG3DqWRpY2FtZW50 IHpvZHJh UGVyaW9kbw== IGVuY29tcGFzc2luZw== IEF1Zm5haG1l IGZhY2lsZXM= 4LC/4LC14LC+4LCw4LCC 15XXldeQ1rfXnA== IHJvdGF0aW9uYWw= IHNoYWRlZA== YWRtaW5pc3RyYXRvcg== IGFudGliYWN0ZXJpYWw= IENBTUVSQQ== 6aGU dW1lcmF0b3I= INK30L4= IEFzc29jaWF0aW9ucw== V2ViaG9vaw== IOCkoeCkv+CknOCkvuCkh+CkqA== KTsKCgov UHJvZ3JhbW0= INil2LnYr9in2K8= eW5v IHJlYWNjacOzbg== INeS15DXoA== Olg= IE1vZQ== w55hw7A= IGNvbnRpbmdlbmN5 IGtpaW5ub3N0 cGFyZA== w7hi INqp2KfYsdio2LHYrw== SHlicmlk IHRvc3Npbmc= 4K+C4K6V IHPDqWNoZXI= IFNlbHY= IOC0muC1h+C0sOC1jQ== LXRvdGFs YWdyZWU= INCy0YvRgNCw0Lc= 0KLQuNC/ L3dyaXRl INWv1aHVttWj bGxhcw== INee15bXlA== IMOlYg== L2V4YW1wbGU= Vm9sdA== 2LnZhNin2YbYp9iq CXdpcmU= INOp0L3QtNOp0YA= IHRvb3RocGFzdGU= IC4uLi4K SU9D 4KeB4KaV4KeH IGHEn8Sx INmG2YHYqg== bWV0aW5nZW4= IHByb2pla3Rh IE1hcmlubw== IGZvbWJh IOCqqOCqv+CqsOCrjeCqo+Cqrw== LWhhc3A= INix2YjZhg== INC/0L7Qu9C+0YI= IOyCrOuejOuTpOydtA== IEd1aWxsZXJtbw== IGF0dW4= IExpZ2h0aG91c2U= ICAgICAgICAJCQk= IGxhbGE= KWRhdGE= U1BB 4Kq+4Kqv4KuB4KqC IGxhYm9ydW0= INCw0LfQsNGA0YI= IGFzc29jacOp VXBncmFkZWFibGU= INiz25A= IGVpbmdlc3RlbGx0 KGVhY2g= 15nXm9eo w7xsbHQ= IFNRTElURQ== 2LPYqtmE fSIpOwoK aWthcmhp 64KY6528 IGNvbWXDp2FyYW0= INeR157XlA== IHRyZWJ1aQ== IOC5geC4iOC4geC5gOC4hOC4o+C4lOC4tOC4leC4n+C4o+C4tQ== c2h1ZmZsZQ== aWRlZ2E= 0LzQuNC50L0= IGRlc2lnbmF0ZQ== Q0RE IHNhaXNpcg== TmV0d29ya3M= IGtoYXM= IOC0teC0s+C0sOC1hg== IOi+vQ== IEFDQQ== IG1vbHRl enplbA== IG50ZWo= 0LvQvtC0 IFNNRXM= YXnJmXQ= 1aHVsNWh1bbVow== IOWIhuexuw== IFNvcnRpbmc= IOCuhuCupA== IGFsZW3DoW4= UFdN IG5lYXJpbmc= J2ludMOpcsOqdA== 4La04LeU 6auY6YCf IHBhdHJpYXJjaA== 66qF7J20 5YG35ouN6Ieq5ouN IGd1c3RhZG8= IGludGVyZXNzYW50ZXM= IOCqnOCqvuCqpA== IHdvdWxkJ3Zl zrPPgc6sz4Y= 4LSa4LWN4LSa4LS/ V2lkdGhz dXlhbmc= YXNvcw== IOCkquCkvuCksuCkqA== ICcKCg== IOC0reC0vuC0sOC1jeC0rw== 4KS+4KSx X3Rj IENvbGxlZw== QkFM IOW/q+S5kA== IHN3b2ljaA== IEJyYWJhbnQ= aWduYW4= LU11cw== IOCqrOCqqOCqvuCqteCrgA== IHRhbGxlc3Q= YnJvd24= YXJ5cw== IOGDk+GDkOGDrOGDpw== IOeZvuaxhw== IG1hc2FqZQ== IGFuYWxvZ3Vl QUNP X2FkZHJlc3Nlcw== 7Kk= IHBlcnViYWhhbg== INij2YTZhdin2YbZitin IGJldGVrZW5lbg== aXJhcA== 0L3Rj9GC0Yw= INC/0LjQutC4 IHBhcGU= 6K+36YCJ5oup IGhpZXJiZWk= IGNvbXBsaXF1w6k= IOGDmOGDnOGDpOGDneGDoOGDm+GDkOGDquGDmOGDmOGDlw== IM+AzqzOvc+EzrE= In19Pgo= 4YOc4YOQ4YOu aW5nc3M= IFRFQ0hOTw== INen15M= XScpOwo= dXlp 4LKy4LON4LKq INee15XXkQ== INmF2YjYs9uM IHBvc2Fy U3BlbnQ= IHR1bmdhYW51dA== IHJhemdvdg== IHRyZWliZW4= IHBvZGVyaWFt KFNpbXBsZQ== KHV0aWxz INCx0LfQuNCw IGRhZQ== INGI0LvRj9GF INC70L7Qtw== IGFmaQ== IOC0leC0sOC1jQ== IG1hbmVpcmFz IEV4cGVuc2Vz IOCmhuCmleCnjeCmsOCmvuCmqOCnjeCmpA== ZGVzaXJlZA== IENyZW1l YWp1xIdp YXB1cmE= IMSNYXN0bw== IHNlcmlldXM= X3ByZWZlcmVuY2Vz Q2VydGlmaWNhdGlvbg== IGFuYW8= IGJvaGxva28= IOCmruCmqOCnjeCmpOCmrOCnjeCmrw== IEFwcGxpYW5jZQ== PUludGVnZXI= IOC0quC0n+C1jeC0nw== IGluZGl2aWR1cw== IEF0ZW0= X3RyaQ== dmHFvg== IOCwheCwguCwn+Cxhw== IEplc3NpZQ== IFJvbm5pZQ== IGN6eW4= LWhhc3BvcHVw INCd0LDRgg== 6riw66Gc IG3DtmdsaWNoZQ== X18pLA== QXJjaGl2ZWQ= IENFUg== IOOCpOODsw== S25vd2luZw== IOCkteCkv+CkleCkuOCkv+CkpA== IHVwaGVsZA== 44K/44Kw INix2LbZig== U3RydWN0dXJlcw== INiq2YHYpw== 56ys5LiA5qyh INGH0LDSmw== bMO8c3M= IFF1ZXN0YQ== 1LXVvQ== IGx1cmE= YnV0aWtr X09QRVI= IOCkquCljeCksOCkpOCkv+CkleCljeCksA== IGtpZG5hcHBpbmc= KGl2 IER1Y2tz KCIoIg== 6KqY5oOR IOu5hOyaqQ== IOCmreCmrA== 4KSc4KWL INmI2LjYp9im2YE= IHR1b3R0ZQ== IHRyYXR0YW1lbnRv IHRyZWRqZQ== IMO2w70= cGRhdGE= Kj46Og== KGhvdXI= 5Lq65rCR572R IGZvcnRhbGVj IENhbmFkYSdz LVJPTQ== IFRvbGtpZW4= X2NsYXVzZQ== IGVuaQ== 0YfQvdC+0LPQvg== IHJlbW5hbnRz w6RobGVy L1Rlc3Q= IE1hdHRoaWFz INC60LDRgtC10LPQvtGA0LjRjw== LlNlY3JldA== IHByZW9yZGVy YXJpdQ== cmFxdW8= IEhvc3BpY2U= Q2VycmFy ZWN1 IG1hbGZvcm1lZA== LXRyYW5zZmVy 6K+I6aqX IE1vbmFyY2g= INmF2KjZhNi6 INGG0LXQu9GP0YU= 5pm65oWn Rmx5aW5n Ly8KLy8KLy8= IOGDl+GDkOGDm+GDkOGDqOGDmA== cmV0YWlu IGNvZ25pdGlvbg== 4K6j4K+N4K6f4K+B4K6u4K+N LnNwb25nZQ== IGhha3VuYQ== X2Nvcw== IGJ1Y2hlbg== IEjDpG5kbGVy IHJlZ2lzdHJh IGFjZXN0YQ== IGdlc3BlY2lhbGlzZWVyZA== INGC0YPRgNGD0Yg= KChf U3VwZXJpb3I= IEVubg== IHnDtm50ZW0= aWlz INC/0L7RgNCw Lnp6YQ== a3XFoWVu IHllbmlkZW4= Q2xhdmU= X2Zsb29y 6Zm3 xaFhbmFp IGJvdXJnZW9pcw== IEZvcw== IM+AzrHOuc+Hzr3Orw== a2lsbHM= INin2YTYo9it2YXYsQ== ZGF0ZXVy IS4u ZWxsaXBzZQ== 5pyf6ZmQ aWprYmFhcg== IGV4b3Q= KeyXkA== IHBlcnNvbmVuYmV6 IM+AzrvOrg== XFNlY3VyaXR5 X05BVElWRQ== IHBuZXVtYXRpYw== INCw0YHRgdC+0YDRgtC40LzQtdC90YI= IG1pc2s= LWtvbg== 2YTYsg== LnNxdWVlemU= Y2hpbQ== IEluc2dlc2FtdA== aXVw aXNpYWw= PXplcm9z IEx5ZGlh LWdyYWQ= IFVuY2F0ZWdvcml6ZWQ= X2V4Y2hhbmdl X3BhcmFsbGVs LklC aHlw IGNvbXBldGly IGZpYW5jZQ== bmRha3k= VmVzdA== INin2YTZhdik2LPYs9in2Ko= dmVsbw== IGdpb3Zhbmk= bW91c2V1cA== IHRpcmVsZXNzbHk= 5ZCN5Y2V 2LHYp9mB2Yo= IHBlc2Fkbw== IOC0quC0nuC1jeC0muC0vuC0r+C0pOC1jeC0pOC1jQ== IGZydW0= 4Z6R4Z+S4Z6S IEZJUg== 8bmainBw 6YOo572y IGTDqWNv IHNvZGRpcw== 0K3RgtC+0YI= aWRhaXJl IGFzc2luYXR1cmE= IHByaXZpbMOpZ2k= IHBhbmNyZWF0aWM= IEFudGl2aXJ1cw== 4LCm4LCw4LGN4LC2 QWN0cw== IGPDs3I= RUNF fWA7Cgo= INCw0LTQt9C90LDRhw== QWR2ZXJ0aXNlbWVudHM= IG93bmVyJ3M= YXNjdXM= X21leA== IGxlYWZ5 IEFybW91cg== zrLOsc65 IERpZmZpY3VsdHk= IFJlcGFpcnM= IHZpZ3RpZ3Q= dmluZA== IHJlc3RsZXNz X1JPV1M= 6L6j dWRpYW50ZXM= IG1vxb5ub3N0aQ== INin2YTYtNio IGFmZ2Vy IOCmoeCmv+CmuA== L3NpZ251cA== IElORk9STQ== IGxpbXBpYQ== X0NBUlQ= aWZyZQ== UmVsYWNpb25hZG8= Ymxvaw== YW5kb25n IOGDm+GDo+GDnA== IGZyYWdyYW5jZXM= IEdyYWRlcw== INCy0YPStw== IGTDqW1vY3JhdGll IGFma29tc3RpZw== INC60YPRgdGC IOCkqOCkv+CkteCkvuCkuOClgA== YW1pc2Vlbg== 4LSk4LS/4LSo IGFsdXM= IHJhbA== IGVsZWN0csOzbmljb3M= IHNjaGFhbA== IHJlc2lkZW5jaWFs IFN0cmFuZ2Vy IFByYWN0aXRpb25lcg== PVJlcXVlc3Q= IOCksuCljOCknw== INC60LDRgNC00LDQsNGB0YI= 0LjQutC40L8= 4LiE4LiZ4Li04LiE IGTJmXlpxZ8= 1aPVvw== dWJsaWNlZXJk IGdvdnQ= LkFubm90YXRpb24= 1bjWgtWs1as= IOCqteCquQ== IEF2YWxvbg== INC80LXRgNC+0L/RgNC40Y/RgtC40Lk= 5rmY IOGDouGDlOGDoOGDmOGDouGDneGDoOGDmA== IE1pbWk= INC60LXQu9C1 INGB0L/QvtGA0YLQsA== IFpob25n 77yM5a6e546w Q0lUWQ== YW11c29ybw== IGNhbGRv IHDDo28= INC40L/QvtGC 0pnTmdC9 QXJ0aWN1bG8= 4Kas4KeL4Kew 5ZOt X091dHB1dA== IHZlcmxldHp0 IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 5Y+v5Lul5o+Q546w5ZCX IFNpbmFp X3JvYm90 15XXl9eZ150= IFJhdmk= IFNocmk= IGh2aWxrZW4= PlNlbGVjdA== IGFsbg== IHNhxJ9sxLFr IHpz INeQ16TXqA== UmVzZXJ2YXRpb25z UGFnZWQ= IEFzc2F1bHQ= IHN1c3RpdHU= IGVzZW5jaWE= 5ouS IOCqsOCqruCqpA== KGJsYW5r 0LjRgNC+0LLQsNC90L3Ri9C5 IGRhcnNl IHByYXRv IOCql+CrgOCqpA== IGdpdGFy Y2tsZXM= ZXNjb3J0 IHNpc3Rh IFByb3NlY3V0 IGRlc2VydW50 Om5vdA== IHN5bWJvbGU= acOpbmQ= IOGDqOGDleGDmOGDmg== KG51bWVybw== IGxpZmUncw== 5YWn5a65 INCR0ZbRgA== 0JzQsNC9 KCgmX19f 4LiU4Li14LiX4Li14LmI4Liq4Li44LiU VmlydA== SGVycg== IFByZWNpb3Vz IGNvbnZlbmNpb25hbA== dmVl bGluZXdpZHRo 55qE5aSp5aSp5b2p56Wo IGNvbmR1Y2ly IFBpdm90 IGJlcmg= IERFUkU= 4oCN4LSu4LWN4LSu w6Rya2Vu IGFkb3R0 U1NE IEdyaXNjaHVu IGhvcHBlcg== INGC0Y8= INKx0LvRgtGC0YvSmw== 4YCQ4YC84YCA4YC5 IGh5Z2c= Y3lhbg== IOCyruCyguCyoQ== INC70L7QtA== I3NldA== LnRpbWVkZWx0YQ== INin2YTYqtmG2YXZitip IOunjOuToA== 1bjVpNW+1aHVrg== 44Gn44GN44G+44GZ IFN1Z2dlc3RlZA== IHRldG8= INqB2YjYp9qp2YjZhtmI IOyxheyehA== dW1taWs= aGVlbQ== SG9sZGluZw== IHlhbsSxbmRh cWFz LnByb2Nlc3Nvcg== 0LDRgdGL0YA= IHRvZWtvbXN0aWdl INGG0LXQvA== KeydtA== IHRhbmU= IGVyaGllbHQ= IEV4cGVyaWVuY2Vz INCx0LXRgdGB IGNvbXBvc2l0ZXM= IFNlYWZvb2Q= ID8nLA== IHdlaXNz aXRlcmVu LnRyYXZlbA== cmVndWxhdGVk IEpDb21ibw== TGlicmFyaWVz IE9sZWg= IEhlaWRlbGJlcmc= INGH0LDRgdGC0YzRjg== IOCmrOCmsuCmpOCnhw== IGJpbm4= IiUo 5YWN6LS55o+Q546w IGdyYXZpdGF0aW9uYWw= PWltYWdl INi52YXYp9mG L01QTA== IHJvY2tlcg== IOCkruClgeCkleCljeCkpA== IGJlc3R1dXJz bGFwcGluZw== LmZh bGlqa3Nl IHByZW15ZQ== J2Fzc29jaWF0aW9u bWlsZQ== X0ZSQUdNRU5U 0LvQsNGB0LDQvQ== IEJhZ2hkYWQ= IHTJmW1pbg== 0JzQvtGB0LrQstCw b3h5Z2Vu IHNjYWxhYmlsaXR5 w7xnZWw= R3c= IEZlcnJv IFBhc3NhZ2U= b3JkaW5hdGlvbg== IEtPTQ== IHJvdXRlZA== dXd1cg== Q3VwaWQ= b3BhdHJh IMmZcg== IHJlZnJvaWQ= IEphaXB1cg== b2J1 5oql6YGT56ew IHRvcGxhbQ== IFBDTQ== cGFrdA== YXZpbGxl YWfEmQ== U2NoZWR1bGVycw== IFNlbmc= IGNhZHJlcw== INC/0L7RhdGD0LTQtdC90LjRjw== 0LjRgdGL Lk1FU1NBR0U= IMOcYmVycmFzY2g= IHJ1bW9yZWQ= IHBvZGVyb3Nh Tm9ydGhlcm4= IOCyl+CyvuCyrw== 5buj IFZFUklGSUVE IGVubGlnaHRlbm1lbnQ= YWJpbGVjZWs= IHRpdWo= xZnDrWtsYWQ= INmE2YPZhtmH INC00LjRgdC6 WE4= INGB0LDQvNC+0Ls= xLFzxLFuZGFu CWZsYWdz INio2LrbjNix 4Kay4KeH4KaT IOGDoOGDkOGDoeGDkOGDqg== 5b2p5aCC IGhldGVyb2dlbmVvdXM= LlN5bmM= IOCmh+CmieCmqOCmv+Cnnw== IM+DzrfOvM6x IHRhYWdl IGNvbmR1Y2l2ZQ== IOyduO2VtA== IGRpYW4= INmF2YfYp9mE IGJvcnN0 X01Z PHg= IHByZXZlcg== IHBvcnR1Z2Fs IEdhbWVy IG3Em2w= Kycm IGF5bA== 0YfQuNC70LPRjdGN IGdhemV0 IOuKkOuCjA== IEludGVsaWc= INin2YTYudmE2YXZig== IOS/neWtmA== IHRyZWFzdXJlZA== INC60L7RjdGE0YTQuNGG0Lg= IHZlcnNpb25l 5aSp5LiL5b2p Ont9 0q/Sr9C90LjQuQ== IG1lbmdoYWQ= cmFpdGg= IEFycmVzdA== 4YOQ4YOb4YOR IHRyYWluaW5nZW4= 4oCZZXh0w6lyaWV1cg== JUM= IHLDoXBpZG9z INis2YXZh9mI2LHbjA== UGllcg== c2Vtb3M= IOCmquCnjeCmsOCmpOCmv+CmqOCmv+Cmpw== IHRla29ydA== IGlrYW4= IGV4dGluY3Q= eXR0w6Q= IHJlcHJleg== INGB0LLQtdGH IFRyZWF0bWVudHM= LXJlcXVpcmVk b29sYQ== INWh INC/0L7Qu9GD0YfQuNGC0LU= 4KS14KWA4KSC IHZsYXN0bsOt LXZpdA== IHByb292 44K/44Kk44OX IGxlZHM= aW5pbmdp IOCksuCkvuCkh+CkqA== IHJ0bA== bml0eg== cHJpeA== IOC0quC1jeC0sOC0pOC0v+C0t+C1h+C0pw== IGFkYXk= aWZuZGVm INiv2LPYqtuM IFphcmE= LXByb2R1Y2Vk IGVuZGluZ3M= IHBvcHJhdw== IHBoZW5vdHlwZQ== 4K6+4K614K6/4K6p4K+N IHR1b2k= IFbhu5tp IHN0ZWFrcw== Rm9yZXZlcg== IGTFgg== IHRvbWF0ZXM= IHRyYW5zZm9ybWVycw== LWZsaWdodA== X1BJQ0s= Lk5PUlRI IHZpZXJlbg== 4LCV4LC+4LCy 4YOU4YOR4YOY4YOQ ICIqIg== IOCkleCljeCksuCkv+CklQ== IGdlbmVyYXRpZQ== TmFr IHBvcnM= LmRlbg== IHRpbm5pdHVz UG9pbnRlcnM= PFByb3Bz IFZhY2NpbmU= INCw0LTRgNC10YHRgw== aW5zdGVhZA== IHFhdA== XEJ1aWxkZXI= T0xFRA== IG1vYXQ= IEtlZXBlcg== 6bmF IGdla2VrZW4= Qm9y 0YbQuNC+0L3QvdCw0Y8= IOCmhuCmn+CmlQ== INmK2YjZgdix IFRoZXkndmU= IHZvb3JzdGVs INC/0YDQuNCx0Ys= X2N0b3I= bWVnacWI X2dlbmRlcg== IEthbGs= IEJK IGNoZXJz IGthc3V0YXRha3Nl 4YOU4YOa4YOQ4YOT 4LC+4LCk4LGL IFJldmlzZWQ= IEV0Yw== IGhvyrtvaA== Lm1vdmllcw== LVByZXNpZGVudA== IGzDow== QW5kcmVh IGd5dmVu IGluc3RhbGxtZW50cw== U0lURQ== 4Z+K4Z674Z6T IGFzbGk= PE1lbWJlcg== IGRvbcOhYw== IE1pbG8= IHphYmV6 INC30LDQutCw0L3Rhw== IHByw6l2ZW5pcg== IOCkn+CljeCktQ== INin2YbYuQ== IGTJmWbJmQ== 4LWL4LS5 INCe0LTQuNC9 IOCkr+CkvuCkqOClgA== IFRpZ2h0 IHRpamRlbGlqaw== 4Kmx4KiX IHRlbmRhbmNlcw== IHRlYXNpbmc= 2KfYptix2Yo= IGdyYW51bGFy IHBvdGlvbg== SGFydmVzdA== 4KiQ Wy4uLl0KCg== INin2YTYs9mG2YjYp9iq IOCuquCuseCvjeCuseCuvw== IGR1YmlvdXM= aWdyYW50 IFZlcmdl IGJlc3RlbQ== IGRlcHJpdmF0aW9u IHZpaQ== w6pudA== IHN0cmlj IGVuZ3JhdmluZw== IGNvbXBsw6l0ZXI= 2b/Zig== b21iaWE= 4LmB4LiV4LiB xKdvbA== 4oCu INm52r4= IElNUw== IEdL z4POus61z4TOsc65 LWNhbWVyYQ== IGZ1aXRl IEhlbG1ldA== INWk1aXWgA== IHN2w6VydA== 0YPQs9GD IGhhyZc= IEzDrW5lYQ== IEVMRQ== IGJlc2NocmV2ZW4= cm9jaGVu INC+0YDQvdCw0Ls= IG1hbWw= yJtpaWxl IFRBUg== Z2Vyw6R0ZQ== IGNsb2Fr IGRvcmVz IO2ZleuMgA== eXN0eWN6 IGtyaXRpaw== INC+0YHQvdC+0LLQsNC90LjRjw== IG5lZ2F0aXZpdHk= IENQUw== IEluZmx1ZW5jZQ== 4Lir4Lix4Lin IOGDpOGDkOGDoOGDkuGDmuGDlOGDkeGDqOGDmA== PFNwcml0ZQ== INCx0LjQtNC1 IFdlYXZlcg== IGhlZXY= UVVFUw== IGZpbG1lbg== 4oCZYW5jaWVu w6lyYXRpb25z IEFmaW4= dXRhbmE= IGNoaXBzZXQ= 0LXQt9C4 ZW5lcmdpYQ== IFJhbmRhbGw= IHRlcm1pbmVy IHN1YnNpZHk= cGF0aG5hbWU= IGxvc3Nlbg== IGJlaGFsdmU= IGRlc3BlcmF0aW9u ZWNhc3Q= 4oCZ77yM IGJ1dXI= c8OpZw== Y2h0aWd0 0LXRgdC/0L7QvdC0 IGthdGFueWE= RURE bml0dA== IG1lbmphZ2E= L2dlbmVyYWw= IGVudGVuZGU= Z2VvcmRuZXQ= IGtlemQ= IOWkqeWkqeS4reW9qeelqOW8gOWllg== IG5hcmU= IOW+iA== IEJyaXRuZXk= RXN0b3U= IHNreWw= IFBhcmNlbGFibGU= XFRhYmxl IENhbGNpdW0= IGxhc2E= IGVndW4= IOucuw== IHNhdm9u 15PXog== IG5lZGVubGU= INGI0LU= bWlycm9y IHJldmlzw6Nv 0YPRgdGD0YE= fSQv LXJhbmdpbmc= eGJh IGxlbnRhbWVudGU= 0JzRgw== IHJ1bm9mZg== IOCwquCxh+CwsA== U0VQ IGludGVycnVwdGlvbnM= X2xvZ2dpbmc= IGtvaQ== SE9O Lmxhenk= IG1hbnVlbA== IGluc3RhbGxlcnM= 2KbblQ== INCw0L3RgdCw0LzQsQ== IHN1bWluaXN0cm8= U2FkbHk= IENlbGx1bGFy LlVV IGRvbGQ= INC805nQt9C60YPRgA== 0Y3RgtGL IEFwcGx5aW5n IG5vcW9u 7Iuc7YKk IGFlcm9iaWM= Y2xpbmljYWw= IHRzY2g= YWJjZA== KGluY2x1ZGU= INCy0YHQuNGH0LrQuA== IGRpc3BvbmliaWxpZGFkZQ== INii24zZhtiv2Yc= IGtheWFraW5n Ym91d2Vu IGRla2F0 IEh2YQ== INCx0ZbQu9GM0YjQtQ== IHVrd2VuemE= UFJPVE8= 2YjYp9is2YfYqQ== IEphaXI= 1aXVog== IElFQw== LGxhYmVs Uk9XTg== IOKGkA== IOCmueCmsuCnh+Cmkw== IEZvcnRhbGV6YQ== IHZsYWc= IOGDkuGDkOGDmOGDm+GDkOGDoOGDlw== IOCwquCwsOCwv+Cwtg== IFRvcmNo IG1vdGV1cnM= TlNPYmplY3Q= dXJ0amU= IGZpZ3M= IGNhdWM= IGFjY8OpbA== LklsbGVnYWw= 6KqM IOKAgg== IHBpdMOkaXNp IGVlbWFsZA== X3BsYWNlaG9sZGVy IHRlbGV2aXNpZQ== IHB1YmxpY8Oz 4LK44LON4LKk4LKV IGRpdmlzw6Nv IHJlcGFyYWNpw7Nu IOGDkuGDkOGDleGDmg== IOGDkuGDkOGDqg== IMOnYWc= U2Vydm8= LVBhY2s= 44CC5LuK5bm0 4Kay4Ka+4KaH IEFwcm92ZQ== INKz0LDSmw== UWw= IG8ndA== IGNzYWw= LlRFU1Q= IHRlbnRvb24= IGV1cm9ww6llbnM= IHbDoG5n IGNvbXBvc2ljacOzbg== 0LTQuNC50L0= cGFydHVt IOGDnOGDkOGDruGDlOGDlQ== IGJlc3BhcmVu 4LCf4LC/4LCV4LGH IOCqmuCri+CqlQ== IOCyhuCynw== IG9ibGlnZQ== KHRvb2xiYXI= X1JlZ2lzdGVy IGxpw7A= 6r2D IOCmqOCnh+CmpOCmvg== INGB0L/QvtGB0L7QsdGL INin2YTZgdix2YbYs9mK2Kk= IOeZvuS5kA== IM+Dzr8= U2VyaW91c2x5 0YHRi9GA X3NlcXVlbmNlcw== IEJyaXR0YW55 IENhcHJpY29ybg== INin2YTZhdi02YPZhNip INeb16rXkQ== X0lOU1RBTEw= INCx0LjQu9Cw0L0= INin2YTYsdmF IOmrmOeZuw== IE11c3RhZmE= IEF1ZmdydW5k IOCkquCkleCljeCksOCkvuCkiQ== INGB0YLQvtC70Lo= J10iKQo= w6t0eg== eWV1cnM= IMOpdmlkZW50 IHlheWlu IE1pZGRsZXM= IOaJi+acuuWkqeWkqeW9qeelqA== IFJhZ2U= IHJ1bmU= IHBhc2FuZ2Fu IOCmieCmquCmsg== IHBsZXM= INGD0LTQsNC70LjRgtGM IG5pdsOl INio2KfZgtuM INin2YTYudmE2YXYp9ih PW15 44CB5Lit5Zu9 IM6UzrnOsQ== IFJPTEU= IHJlc3BlY3Rpdm9z IHN1bWk= 4YCx4YCQ4YCs4YC3 IFRIQU4= INCx0ZbRgNC90LXRiNC1 INCx0ZbRgNCz0LU= KGJyYW5jaA== IHByb3BpZXRhcmlv IGZyZWc= 4K6j4K+N4K6q IGtpbGU= IG11bmljaXBhaXM= 4oCm44CC 5paw54mI 4LCs4LCh c3RhdHVzZXM= IOCwteCxhuCwsuCxjeCwsg== IGpvdHRh INin2YTYsdin2KjYuQ== 6raB IEJvcmRlcnM= 4Kaq4KeC4Kaw4KeN4Kaj INGA0LDQsdC+0YLQvtC0 IHZhcGV1cg== IFNhbXA= IFNUQU5EQVJE 4Z+S4Z6T4Z+G4Z6W4Z+B4Z6J 5oC756uZ Tmd1 INC80LjQu9C70LjQvtC90L7Qsg== X2NvbnZlcnNpb24= 55S16KeG5Ymn IHLDqWFsaXNl P+KAnS4= 6KeG6aKR5aSn5YWo IOCyieCypOCzjeCypOCyrg== IGhpdHJv IGjDsmE= IHBvxI1hcw== INeX15HXqNeV16o= INix2YjZhtiv IGdld2E= dmlyYQ== IG9yZ2FuaXNtZXM= IOCknOClgeCksuCkvuCkiA== 4Lii4Li4 INCy0YvRhdC+0LTQsA== IHNhbXRpZGlndA== bMOz INCx06nRgg== CWZk LlVS IE1lcmU= IGTDqWZpcw== L2Zh IFRYVA== em9la2Vu IGRhcXVp 5YWp IFbEg24= IGFsdHJ1 IOqzteq4iQ== c291 IOCksOClh+CkoQ== IE1pZGRsZXdhcmU= IGJvyrs= 4Kq+4Kq14Kqk4Kq+ IFByYcOnYQ== 5q+B 0pPRg9C7 IOKAnOKAnQ== 2KbYqg== 54m554K5 4LK+4LKz4LK/ IGJvbm9sbw== IHNpbGFuZw== IENocmlzdGNodXJjaA== d2FzaGluZw== 5oiQ57up YXdpYQ== L2F1ZGlv IFdvcmtmb3JjZQ== ID8/Pz8= IG5hemlvbmFsZQ== IFdFQlNJVEU= INCx0LDQutGC0LXRgA== INCc0Lg= IGFsbW/Dp28= IMOpdHVkaWFudA== IEFNQQ== IHpkYXJtYQ== 4LCk4LGN IG9idmlhbWVudGU= IGxpbmRhcw== a2llag== IFB5cmFtaWQ= IENvdXA= YWdpcmE= 4KuL4Kq5 IG9yZGluYWw= amlhbg== IHBlcm1hbmVuY2U= IHVtc2ViZW56aQ== Jycu IEJyaWU= INGB0LrRgw== IHRvdGFsaWRhZA== J29ubw== INC40YfQuNC9 IGNyw6nDqWU= 5pyf5b6F IOCqsOCqguCqlw== 6KeC5a+f IGFuYXk= IHNvYnJlcw== 44CB5pys dmFyaWF0aW9u IOCkruCkvuCkpOCljeCksOCkvg== dHJhdG8= IOCknOCli+CkoQ== 0YHRgtCy0LXQvdC90L7QvA== IENMTG9jYXRpb24= IEt1aWQ= INin24zZgQ== IEhlcnN0ZWxsdW5n w7Zyw7w= CWJy aW50ZXJwcmU= 4LiI4Li14LiZ IGh5ZHJveA== INOp0YLQutOp0YA= VXBk IHZlcmFuZGVydA== IOCmhuCnsOCmleCnjeCmtw== IGhvcmFpcmVz IHV3ZXpv c3RpbGxpbmc= IHByb2dyYW1tYWJsZQ== IHZlc2Vs IHpr INi52YTZhdin2KE= RUxF IHNlZ3VpbmRv YXBlYWtl IGJsYWRlcg== ID4iLA== INii2YTYp9mB aGVraw== cGF3bg== IOCkreCkteCkqA== dXJhbmNlcw== IG51bcOpcmlxdWVz 4LeA4La7 INiu2YXYsw== IFBvZW1z WUFO ZXN0YW5k IGNhbWluaG9z ZWd5 CQkgIAo= J2FsbGVy ZWJhbg== IFRpbnQ= 44CL5Lit IEtvbGw= 4KSs4KS+4KSV SVJUSA== INCz0YPRgdGC IEFmaW5hbA== Q2FmZQ== INin2YTYp9iu X3JlZ2lvbnM= PFNlYXJjaA== b25lYw== IGRpc2NhcGFjaWRhZA== INWo1bbVpNWw1aHVttW41oLWgA== IFNFTEw= X0RZTkFNSUM= IOCmmuCni+Cmlg== IHRhxI1pYXU= IG1vYmlsaXTDqQ== aXNhdGV1cnM= S2F0aA== SG9yYXJpbw== IHZpZGVvZw== IHJldmk= w610YQ== IGJyYXNpbGVpcmFz Q2hhb3M= KHNlbnNvcg== QUdFTg== IOyXheuNsOydtO2KuA== b3LDrWE= IOC5gOC4nuC4peC4hw== UFBFUg== IHVtdXQ= 55+l44KJ44Gb dmxvZXI= SW1hZw== IGJlaW5o TmVpdGhlcg== IEh1bWI= 7J6g IMOhbw== 6Z2S5pil IGZlYXRz IEFsbWFu IOygleydmA== IHNpZ25pZnk= IER1dGllcw== cGxvc2lvbg== 5LyP IHF1w6p0ZQ== 56ue5oqA CiAgICAKICAgIAo= 4oCoCgo= IHJlY3Vycg== 0YPQvNK70YPRgA== LiIpDQo= IEVjb25vbWlzdA== IOCkuOCkguCkreCkvuCkteCkqOCkvg== INeQ15nXoNeY16LXqA== IGHDvXRkeQ== ZXJtaXQ= 4KaF4Ka44Kau w610ZXR0 XWludA== INiv2KfYsduM IGrDpHJnbQ== INGD0YfQtdGC0LA= 0JTQsNGC0LA= dmVyZ2VuY2U= b3N0cmluZ3N0cmVhbQ== 1aHVttaE1ag= IGFiYW5kaQ== KGNvbmQ= Z2VzZWhlbg== uOCxjeCwpeCwv+CwpA== INiz2KjYrQ== Omxhc3Q= INix2b7ZiNix2bk= c2NpZW50ZQ== L0VSQw== IGdvc3Rhcg== bMSxa2zEsQ== IGN1bHByaXQ= IGludmVzdGllcmVu 44OH44Or RnVuY2lvbg== TEVHQUw= b2xlcmE= IGFsaW1lbnRhdGlvbg== dmVybW9nZW4= IHVsdGVyaW9y IGdyYXNzZXM= LWJlbA== 2YPYs9in2LHYqQ== LWV3d2Vs LkxP IGNob3U= dGV4dGZpZWxk IGx14bqtbg== JnR5cGU= IOC4q+C4sg== IOCyueCyv+CyqOCzjeCyqOCzhg== 66qF7J2E Z2V0c2k= IHBpZW5zbw== IM+Azr/Ou867zqw= w7x0ZmVu INiq2KrYrQ== 1aHVo9Wr1oDVqA== IGltYW1v w6lnZXQ= IGFsZMSx IOaNlemxvA== YXRpdml0w6k= 2obbgQ== IGxvZ2ljYWxseQ== OnN0cg== IHJ1bnRlcg== Z2Fh a2ltaQ== 65Kk IOCkkeCkqg== 4LWI4LS1 4LC/4LCC4LCk IFN0cm8= IFBlcm5hbWJ1Y28= 0ZbRhtGG0LA= IEfDqW7DqXJhbA== IG1lw7BhbA== IHN0YW56YQ== 4LGH4LCm4LC/ 77yI77yJ IGh5ZHJhdGU= LGRhdGU= Lmphc3Blcg== IFRyb3VibGVz 4KSX4KSz INCR0ZbRgNCw0ps= X21vdg== IGdldGVudg== YXR0YXF1ZQ== IHNlbnNpdA== IGRpZsOtY2lsZXM= INmB2LHZhtiz2Kc= IGF5dWRhcsOh INGF06nQsw== IGxhYm8= LtC/ 0L/Qu9GP dWdlbnpp IGdlb2dyYWY= 4LmE4Lih4LmJ INCU0L7Qvw== IHN1Ym1ldA== IMSNw61z b2x2ZXM= IGhpemk= dW1iZQ== bWFnZXM= IOC0qOC0n+C0quC0nw== INiv2KfYsduM2K8= INCy0YvQv9C+0LvQvdC40YLRjA== IMOpbGFib3I= LWluZm9ybWVk IGjDtmhlcmU= IGRpY2hvcw== Zm9ydGg= INCg0LDSs9C80L7QvQ== INW21bfVpdWs INWv1bXVodW21oTVqw== IChfLg== IGxhbmRzY2hhcA== IGJhxZ9sYW0= IM+Ez47Pgc6x IERPTidU LkxPQw== 44Kr44O8 4KSk4KS+4KST4KSC IGNvbnN0YXRl IGtvcmlzdGk= YWtlY2g= Q2FydGU= 4oCmKS4= IHXhu5FuZw== 4Laa4LeP VmljZQ== IFRPRE9T 0J3QkA== IHBoYWhhbQ== IEZpeHR1cmU= IGtvbnVzdQ== IEd1ZXJyZXJv INC/0YDQvtC40LfQstC+0LTQuNGC0YHRjw== KT4+ cGFyY2Vs IGJvcnJhcg== IG5nb3N1a3U= bW5vcHFyc3R1dnd4eXo= IHdldHM= 4LS14LWN4LS1 IGbDtnJkZXJu X3RpbQ== IHphZ2Vu IGthdXBhcGE= IFRyb2phbg== IG1hYXRzY2hhcHBlbGlqa2U= IHBlbmFz IOCqtuCqv+CqleCrjeCqtw== IE9UQw== LW1ldA== IENoZWVy IENhcm9seW4= aW52ZXJzZQ== INin2YTZhtmI X19fX19fXw== IHPGoQ== IGFudGlzZQ== 4LmA4LiU4LmH4LiB IGhhcm1pbmc= IHNrcmlm INKv0LnQu9C00LLRjdGA0LjQudC9 esSFYw== IE1hZGF4d2V5bmFoYQ== SW5jb21wbGV0ZQ== INin2YTYutin2LI= 4oKC IFdpbQ== w6lyZXo= aXR0YXJpdXM= X2ltZ3M= INiz2KfYrtiq2Yc= INC30LXQuw== IHNjZWdsaQ== 5bmz5Y+w5oC75Luj55CG b2theQ== 2YTYqNip IOCmreCmvuCmsOCmpOCnh+CmsA== IHN0ZWFkZmFzdA== INKb0L7Qt9KT YXJ5YW5h IFdvag== IHByb3I= IGNhbmFscw== dWVr z4TOrs+DzrXOuc+C IFJ1dGdlcnM= IGx1bGE= IGxld2F0 IOCkhuCkp+CkvuCksOCkv+CkpA== IGNvbnZlcnNhdGlvbmFs KElOVk9L 77yaIis= IHByZXBhcmHDp8Ojbw== IHlhZg== c2VydmF0aXZl L2xl TGFyZ2VzdA== RG9jdG9ycw== Py8= IGtub2Jz xaFpbmE= IOCqq+CqsOCqv+Cqr+CqvuCqpg== IHN1Y2Nlc3ZvbGxl YXV0b3M= 56eN5b2p56Wo IG5hw68= IE9iZXJmbMOkY2hl 77yM5pel5pys IHNub3JrZWxpbmc= IElzbA== IOCkhuCkquCkow== 4Ka/4Kef4KeH4Kab4KeH IGh5cGVycw== IFFob3Y= IGJlaWRo IGZvbmN0aW9ubmVy IHNub3dib2FyZA== IGJ1bnM= IEVsaW1pbg== INiq2LnYstmK2LI= IGJ1c3RsZQ== IOGDl+GDpeGDleGDkA== IHRhYW1hYWw= bHVpdGluZw== IHNpZ25pZg== IFBhc3NlZA== aWtpcmE= c3VwcG9ydHM= 4pWX IGV2YWx1YXRvcg== INGH0LDQvdC0 7qS0 IOCkpuCkuA== IGxldWtlbWlh INiz2YPYp9mG IOCksOCkvuCkueCkpA== xKt0cw== IHZlbmRpZG8= 54m55q6K INCy0LXRgtC10YA= IHJhxJ9tZW4= INCt0LzQvtC8 VGltZXJz 4LmB4LiC4LmI4LiH4LiC4Lix4LiZ IOGDoeGDlOGDlg== IGdyaXR0eQ== aWV2YWJseQ== IGVuZGxlc3NseQ== L3JlZmVyZW5jZQ== w6FjaWxlcw== YW1tdXQ= 4KeN4Kaw4Kas4Ka+4Kaw X2NvbnN0cmFpbnRz cGVjdGluZw== IG1vb2Rz IGRhc2hlZA== IGR1ZXJjaA== IEVudHNjaGVpZHVuZ2Vu 4Kq+4Kqy4Kqv IHB1bHY= INqJ25A= IHBsYWdlcw== 4Ky2 YW5mw7Zy X1NPVU5E IGRhbmtl INGC05nRgg== IHLDqXbDqGxl 4oCZaW1wb3J0YW5jZQ== IE9yZGluYXJ5 IFNm IENyaXM= IFplc3RpbWF0ZQ== 2YrYqNip QWFyb24= 7KSY cXVpdg== IGVzcMOpY2llcw== 4b24 c2vDvWNo IGJldGVn U2hlJ3M= 4Z6E4Z+S4Z6A 4Ka/4Kau4Ka+4Kao IEJyYXZlcw== INC/0LDRhtC40LXQvdGC0L7Qsg== cXVlZW4= 4LOD4LKk4LON4LKk Li4uKS4= Z3J1bm4= IG9mZmVudGxpZw== bHNp IEFicmE= b3JkZXJlbg== LnRocmVzaG9sZA== IGludGVybmF0aW9uYWFs R09SSVRI xZtyZWQ= SXRhbGlj IGV4dHJhb3JkaW5haXJl VG9lbg== IEJ1Y3VyZQ== aWZvbGQ= 4LS/4LS44LWN4LSl4LS+4LSo 5LiA5bm0 4LOG4LKX4LKz QUFG ZWxsdXM= QUJDREVGRw== xJvFvg== Y3rEmQ== IHdpdGhkcmV3 IGV4cGFuc8Ojbw== INmC2LXYrw== IHbDpHJsZA== INCi0L7Quw== IG1hcmlv IOaZrw== IEFsZ2VyaWE= IOWkqeWkqeS4reW9qeelqOeypA== IGRyaWVz INWi1aHVvtWh1a/VodW2 IGluc3RpdHV0bw== bGVkYWQ= IOC3g+C2s+C3hOC3jw== TmF6 cHJvZHVrdGU= IE1vbnRlc3Nvcmk= 64uk6rCA IGNvbmZsaWN0b3M= 4KWk4KWk TUFE INKh0YvSmQ== IOm7hOiJsg== 0YHQutCw0LY= dmo= IHNjaMO2bmVz IFdyYXBwZWQ= L2luY2x1ZGVz b3duaWvDs3c= INC/0L7RhdC+0LQ= 0ZbSo9GW0Lc= 5ZyY INGG0LXQu9C10Lk= ZGRp LWVud2U= IFdlaXJk w6R0enVuZw== IFJvYmJpbnM= YW1vdA== J2NsYXNz UkFG 5LmQ5Z+O PXN1YnByb2Nlc3M= aW1hbWVudGU= V2F5cw== IOCksOCkleCljeCkt+Ckvg== IFNpZ25hbHM= INC80LXQtw== IEFtYm9z IGRyeWVycw== LkV4cGVyaW1lbnRhbA== 5b+G V2VhcG9ucw== IEvDvGg= IGVra2VydA== W2FjdGlvbg== VW5pZGFk 6YKq IGRvYWJsZQ== INC/0L7QtNCw0YDQvtC6 INC70LjRhtC1 IHRyYW5xdWlsaXR5 5p2t5bee bmRpcg== ZXhwaXJhdGlvbg== aXphbnRlcw== IG1vbnTDs24= INio2YTaqdmH IHN1cGVyaW9yaXR5 X3B1Ymxpc2g= bGVzdW5k IOCwieCwguCwpg== IGludml0w6k= 0YDQvtC40LfQstC+0LQ= IGljdA== RG9ncw== c29m 5Yqy IFNpZ25pbmc= IGFic29yYmVy IOCkuOCkruCljeCkquCkqOCljeCkqA== dWdjaW5h LmJvb2tz INC80L7Qs9C70LA= IEpleg== IFRlc3RpbW9uaWFscw== LXNsb3Q= IEFubGFzcw== 1bjWgtaA1ag= IGh1bW8= c2V2ZW4= IG3DvG1raW7Dp2lsaWs= LnBhcnRuZXI= 4KqX4KuN4Kqw4KuA IHJlcXVpc2l0ZQ== LmVsZW0= IOCqqOCrgeCqgg== INiv2YjYp9mF IGZvcmVt 0JTQoQ== IGVzcGVyaWVuemE= KSl9Cg== 5YiG5YiG5b2p6K6h5YiS fCg= YW5ibGU= IG1pZ3JhdGluZw== IFNvbmlh IELDvHJnZXJtZWlzdGVy X3BsdXJhbA== 4K6w4K6+4K6V IENhbw== a2llbg== IExldWs= IOWQjOWImw== 4LGK4LCC4LCm IHRyYW5zbWlzc2lvbnM= IHnDtm5lbGlr aXJpa2k= IOCuteCusOCvgeCuleCuv+CuqeCvjeCusQ== IHphcsOzd25v INCS0L7Qt9C80L7QttC90L4= LXRyYWluaW5n IOGDnOGDkOGDm+GDk+GDleGDmOGDmg== IHR1cmJ1bGVuY2U= INmG2YLYr9mF IOCyqOCyl+CysOCypg== a2V2 IFJ5ZGVy RG9uYXRpb24= IOWkqeWkqeS4reW9qeelqOS4gOetieWllg== IHBlcmFudGU= 0pfQsNKj INin2YTYt9ix2YE= IOW0hw== WWFr SW50ZXJ2YWxz IGVraA== KHRpY2tldA== 15nXp9ei16g= INeX15XXlg== 4oCZZW5zZWlnbmVtZW50 IGNvbXByYWRvcmVz IOCqruCqvuCqo+CquA== IHplYWw= LWTJmQ== LXBvcw== IOCuh+Cuo+CviOCurw== INmF2KTYtNix IOCmuOCmvuCmruCmvuCmnOCmv+CmlQ== 2KzZitio INC80YvRgQ== IERJUkU= IEFDTQ== w6lsaXRl IOCkuOCkvuCkneCkvg== 4oCm4oCm4oCdCgo= INGA0LXQsNCz X1VQTE9BRA== IOuwgA== IGF2YW56YXI= IEVtaXRz QXVy QWJi IGJ6 YW5kYW8= IE1hdXM= INCy0YHRgtGA0LXRh9C4 IM6xzrPOv8+Bzqw= bHVnaXQ= 4YOQ4YOu4YOa4YOd4YOU4YOR4YOY4YOX IHZlcsOh IEdhcmxhbmQ= ZW56bw== IFJhaXNlcw== IENvdmVudHJ5 INmF2LTZh9mI2LE= 5pKD INC805nRgNC60Lg= INC80LDRgdC10Ls= LS0tLS0tKw== ecmb IFNvbGRpZXJz IEFwcGFyZWw= IGRhbmQ= IG1lZGlz INWk1avWgA== IFJvd3M= bWFzeW9u IHdhc2hlcw== IOCwh+CwpA== INC+0LHQu9C4 IHd5Y2g= 44GT44Go44Gn IFNjaHVo IEltcGY= IG9udGRla3Q= IHRvcHBlbg== RGVwdXQ= IHBsYWludGV4dA== IFRlbmdv IHRzaGlhYg== IGplbmVy 0J/QsA== 4LGI4LCw YWl0YW4= IOCmj+CmsOCmquCmsA== IHNjaGxpZcOfZW4= bWV0cw== ZHVyaW5n cmlnaHRhcnJvdw== IGFzdW50b3M= PQoK Z3JpbQ== IG1hbnRlbA== INCy0YDQtdC80LXQvdCw PEF1ZGlv IGFkYXQ= IFNjYWw= INeg15nXodeZ15XXnw== VHV0 4LS04LWN IEN1cnRhaW4= c2hhcmluZw== IOy2nOyepQ== UmVjb21tZW5kYXRpb25z KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys= 0LjRgtC40YHRjw== b25qd2E= IGNvcGls 2LXZiNix2Ko= xaFuamk= KG1j J2V1cm9z INCT0L7RgdGD0LTQsNGA IEJlY29taW5n z4fOrs+C IO2VtOyZuA== 5bCH dGVzdGVy IOCkueCkvuCkiA== 4Kau4KeN4Kav4Ka+4Kao IOCkruCkguCkl+CksuCkteCkvuCksA== INC/0YDQuNGH0LXQvA== 7ISc67mE7Iqk IEFsbWlnaHR5 IHThu6lj aGVqaWFuZw== IOC0leC1i+C0n+C0vw== IGFzZmFsdA== IOCqmOCqow== Q29jaw== bGlmdGluZw== INGB0L7Rhg== IMOnZW5saQ== IEZvbnRl 4YOY4YOg4YOY dmVudHk= CQoJCgkKCQo= INC90LXRhw== IGVyemllbGVu 0YbQtdC/ 77yM5q+U a2F0ZWdvcmk= IFNwaXR6ZW4= IGdvc3BvZGFy LW1vdGlvbg== IGl0Y2g= IHJlY2VwdGlvbnM= INiq2KfbgdmF IE1hdGVt IOm7mA== INWz1avVt9W/ IGFmcg== aW5pbmU= INC+0YDQs9Cw0L3QuNC30LzQtQ== IOGDmOGDpg== IGPDom1lcmE= 2LfZiti3 ZWluZQ== 0L3QvtGB0YLRj9GF IHF1ZWk= LnJhbmRu IGx4 IGhsYXU= IGNvbmNlbnRyYcOnw6Nv IGNvbXBsZXRvcw== CQkJCQkJCQkJCQkJCQkJCQkJCQ== 4KS+4KSH4KS4 IGJ5bGk= KGludGVyZmFjZQ== IOCkuOClh+CklQ== INeV15XXotec158= IG1pc2NlbGw= aXp6YXRp INCf0YDQvtGB0YLQvg== IOGDmOGDm+GDmOGDoeGDkA== b3ZpcnVz 2K3ZgtmI2YI= IHNpenpsaW5n IHRsdWxh INC/0L7Qv9GA0L7RgQ== IHJhemVt IE1QVQ== IGRhcnRl fTsKCgoK X2FsbG9jYXRvcg== IHR14bqnbg== IGF1eMOtbGlv IOGDn+GDo+GDoOGDnOGDkOGDmuGDmOGDoeGDog== IGRlcG9zaXRv IEFDVElWRQ== ZHVzdA== 2LbZitix IOyEvA== IG1vcnRvcw== IExhemFy U3RvcHM= KHBhcmNlbA== IHJlY29tZW5kYQ== T3RyYQ== Z2VuaWM= 0L3QtNC10LrRgQ== UG9ydHVnYWw= IG51bW1lcnM= YWRha3k= bGRxdW8= IHZ5xaE= IOCmleCnjeCmt+Cnh+CmpOCnjeCmsOCnhw== IOCoqOCovuCorg== IEN1cmE= YWZhcmk= IGZsdXNoZWQ= IG7DpGlu IGdyYXBlZnJ1aXQ= IG1pc3RyZXNz IEZhY3VsZGFkZQ== IEZpcmV3YWxs IOCkuOCkguCkuOCkpg== Q0dQb2ludA== IGJ1a2E= PFFTdHJpbmc= 0YfQvdGL0LU= IGVucmlxdWVj INC00L7RgdGC0L7QuNC9 2KfYqNix2KfbjNmG IGZhcmnDsA== INCR0LDQvQ== 4LWH4LS+4LSX IERlbGlnaHQ= IFTDpG4= INGC0q/RgNC6 IFJUWA== IHJlY2tvbg== dGRvd24= IOS4lueItQ== IGpldGVy INGP0LQ= IGNhb3M= CXRoYXQ= IG51dHNoZWxs IGJhc8OpZQ== 4Lih4Liy4Lii cHJvZHVr IENhcmFjYXM= 77Q= IHJlY29ubmHDrnRyZQ== 0LXQudGC0ZbQvQ== IExpYmlkbw== IHbDpmxnZQ== INCa0YPQsQ== INCf0L7Rhw== b2NvYQ== YWpy IGFpbmFraW4= IHBhbXVzb3Jv IENvdW50ZG93bg== IGt0ZXJvdQ== INmK2K3ZhdmE INi12YbYudiq24w= YXNzb2NpYXRl Z3VpZGVk INmF2K3Ys9mI2LM= X2JvbnVz 55qE6YKA6K+356CB IFBlcnNpc3Q= IHZlcnphbWVsZW4= QUNJ aW5jaWJsZQ== 4LiZ4Lit U29y 0LvQs9Cw0L0= IEFsZ2Fy 2LPZuQ== IGZ5cnN0 UMOhZ2luYQ== IFplcnQ= KCldWw== cGVhdGVy b3JtZW4= INC60LDRgNC00LDQvdC0 Y2l0YXRpb24= bHVzaA== 0LLQsNGC0Ys= IM61z40= IOCwruCwguCwpg== IMOpdm9sdXRpb24= IGJ5bHk= IOCkruCkueCkv+CkqA== IFNpY2s= JDo= INmF2YbYqti02LE= X3NlcGFyYXRvcg== dW1pbmVu INin2YrYsdin2YY= 4KyG w71hcmxhcg== aWxpdW0= IGpldMOr ZmFm aWxlcmluZQ== IFBvdWw= IEhlbHZldGljYQ== amFjaA== IOCuleCvgOCutA== 0YLQuNC50L0= IGVzdHJlbg== LnJlbGF0aXZl IGNvbXBhbmlvbnNoaXA= IOCwuOCxjeCwn+CwvuCwsOCxjQ== dXRzdQ== 0KLQnw== IHNhbGFyaXM= IFZvcmF1c3NldHp1bmdlbg== IGpha2/Fm2Np IGNvcnJpZG9ycw== IGR1cmVu 0L7RgdC/0L7RgdC+0LE= LXdvcnRoeQ== IEZpbmRlbg== IOCyh+CysOCzgeCytQ== 4YOQ4YOV4YOU4YOc IFBhZ2Vy IOCquOCrjeCqrg== INi024zYsQ== LWNvcHk= IOyLnO2XmA== IGNlcmlt KGZvb2Q= IGlubm92YXRvcnM= LmVuY29kaW5n IGNvcnJvYm9y 15nXodeV15k= IHJ1c3RpZ2U= INC60LDQvdC00LjQtNCw0YI= IGZlbGxvd3M= IGJhxZ9nYQ== IG1hcXVpbmFz 0YDQvtC40LQ= IGFwcGVuYQ== IHZlZ2V0YXI= 4KS14KS/4KSm4KWN4KSv4KS+4KSy4KSv 44K444Ol IGluY29udmVuaWVudA== IFlNQ0E= ZG9ncw== ZGVsaW1pdGVy JHg= SW5zaWdodHM= INC/0LDRhtC40LXQvdGC0LA= LU5ldA== TnVldmE= IE5lZGVybGFuZGVycw== INmD2LE= IFN0YWZmZWw= IGludXRpbA== IGFyc2Vu IEdyaWU= IHByZWRzdGF2bGo= LWNyb3Nz IE1lZ2hhbGF5YQ== 6Iqz INCz0LjRgA== IHRhdmE= 2YjZitmH IOCkleClh+CksA== IGh5cGVybGlua3M= IEVyaw== IGlhaQ== ICIpCgo= IGJpYmxpb3Row6hxdWU= Wy4uLl0= IENvbnN1bHRl IHRoZW9yaWU= IOyWtOuUlA== IHBpaXI= z4fOtc65zrE= eXl2YWw= INqv2YfZvQ== 6Lui6LyJ44Gv56aB5q2i IEdsdWU= IOC0qOC0n+C0leC1jeC0leC1geC0qOC1jeC0qA== IHNwb29reQ== 15vXoNeZ16o= IHRvbW9uaWRhbg== IERlYWxlcnM= 4LKo4LKy4LON4LKy4LK/ TGF1Z2g= YXBvcnQ= J2Fr KHNjb3Jlcw== 4K6/4K6w4K+B4K6o4K+N4K6k4K+B IGZpbGFtZW50 IEJld29obmVy 4LWD4LSk4LWN4LSk Z8O8bHQ= INij2LrYs9i32LM= IGNocm9uaXF1ZQ== IOmdkumdkumdkg== IGZvbG9z IOCumuCvhuCuqeCvjeCusQ== QG1haWw= dm9j IENoZWNrZWQ= ZGlzaA== IOCkhuCkpOCkguCklQ== IHBvcm5vZ3JhcGh5 IGt3dXJ1 IEFh IEFudGFyY3RpY2E= IGV4dMOpcmlldXJl INC+0YjQuNCx0LrQuA== dWdvZA== aW1hdGE= IM+Fz4DOv8+Fz4HOsw== Lm1peGlu IEluc3RhbGxpbmc= IGlsa2lu PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IHJ1bW91cnM= aWdpdGE= aW5qZQ== IHNsaWRlcnM= IGxpZXZl KHdlaWdodHM= IHRlcnJlbm9z IFNwb2thbmU= IM6dzr8= IGlub2x0cmU= IG9tZw== 6a2F INin2obZig== IEFyb21h RU5EUw== IHByb2R1a3M= YW5ldGk= CSAgICAgICAgICAgICA= YWJhbmdh IFNlcXU= IFVOSUNFRg== 6Z2i55qE aXRhdGk= IOGDkuGDkOGDm+GDkOGDoOGDr+GDlQ== IOydvOydtA== Qm9n UGFja2luZw== 0LXRgNC40Y8= IOGDm+GDneGDnOGDkOGDquGDlOGDmw== INWh1bTVq9W9 IGJlc3RlbW1pbmc= SGlsbA== 2LnZitmF IGFudGhyb3BvbG9neQ== Lk9O b2NpdGllcw== W3BhcmFt IFNwb25z 5raJ5Y+K IHZub2Rl INin2YTZiNi4 IHN0b3BwZXI= IGZpbmFuY2lhY2nDs24= IFJhcGhhZWw= IHNlcnBlbnQ= IGRpenppbmVzcw== am5v QnVpbHRpbg== IENvd2JveQ== R2FsZXI= IHNvbHY= INeg15DWuNeo IGFkb3B0ZXI= IE1BTlk= IOC2pw== IHNwaWxsZWQ= dm9lcmluZw== CXN5bmNocm9uaXplZA== IGRpb2Rl IFRISVJE zr/Ouc69z4nOvQ== 4YCx4YCe4YCs 2LPYqtmG IERlbWk= dmFpcg== 4oCcTGE= acOzdw== 4LWL4LSf4LWN4LSf4LWN IFN0ZXBoYW4= IEJvdW5kcw== INGD0LLQtdC00L7QvA== IHJvenM= KOeojui+vA== LWFkZGVk YWdhc3M= dmVudWVz IOeJiOadg+aJgOaciQ== X2xlc3M= Q0NF INee15PXqA== IEluaWNpYWw= Y29tbWVyY2lhbA== RnJlZXpl IGNoaWxl aXNlYmVuemk= IEdlcA== IOCkueCkv+CkuOCljeCkuA== 0LjQu9Cw0L0= INmI2LLbjNix2KfYudi42YU= IEVWRVJZVEhJTkc= IHN3b2rEhQ== 0LTQuNGA IHJhbmE= LkZ1dHVyZQ== IHBlcnZlcnM= IFNwaXJpdHM= IE1PWg== 0rXQsNC90Ys= dsmZ Lmht INSx1oDVtA== IHRlcnJlc3RyaWFs INCc0LDQutC10LQ= Lk9m 15vXldeo Plw8 IGNvb3DDqXJhdGlvbg== IGxpbW8= IFRUQw== IGFjdGl2YXRlcw== IG1ldHRl IG9wZXQ= 4oCZZW1i IFZpcmdv INGI0LDQug== W2F0dHI= em9s 5p6d IHJlbGlnaW9zbw== IG1pbmlj IFdhdmVz aHJhZA== ICgoXw== 4YOg4YOd4YOS4YOd4YOg4YOq INii2YjYsQ== IOGDqOGDlOGDoeGDkOGDq+GDmuGDneGDkA== 1bjWgNW0 IHByb3Rlw61uYQ== INiz2q/Zhw== INCc0LjRhdCw IGV4Y2x1c2l2ZW1lbnQ= dWVsdG8= LVNhaW50 IHJlc2VydmFy INKb0LjQtw== LmluZmluaXR5 IOaKgA== IEFkb3B0 IMSdaXM= IGZpbml0 IHBpbmVx IGZpbG9zb2bDrWE= a3Nh 0YfQtdGB0LrQvtCz0L4= 5b2p56Wo5ZCX 4KeH4Kao4KeN4Kam IHZlcnRh IHN1b21hbA== KHBsYXllcnM= ZXNzaW4= YCk7Cgo= aXRlZQ== 4KaG4Kau4Ka/ cmlmZnQ= dmVsdGU= IGRpc3R1cmJhbmNlcw== 2YLZitmF IGtvbnRpbg== 4LGB4LCk4LGB4LCo4LGN4LCo4LC+4LCw4LGB INWv1bjVtg== IEphY2tldHM= INi62LY= IEZpc2NhbMOtYQ== INiv2LHYrNmH IGhlbXM= INmF2LnYp9mF IHNwaWVnZWw= LnBhcGVy 4LSv4LSx YWN0aXZv IFsmXSg= ZG9jaA== 5LmZ IGNhcGFjaXRhY2nDs24= INGA0LDQuNGB0Lg= 0L7QvNC+0YLQuA== 4LiE4Li34Lit IGZlaWVybg== IOmTtuiIqg== INC/0LXRgNC10L3QvtGB IG94eQ== 0LvQsNGI0LA= LmVrcw== IHRvc3Q= ZmFsbGJhY2s= IHBvdXJzdWl0 IGNhZw== INC/0YDQtdCx 4YOa4YOY4YOX IExvY2tzbWl0aA== 0p/RjNCw0L3Riw== 64+E66Gc KGhhbmQ= IGJhcm5z IHJvdWI= IFN2ZXQ= KGJi IG51dHp0 0rPTmdC+ IFdpbmVyeQ== LWVuaA== IGV2b2x1Y2lvbg== INGB0YLQsNC90L7QstGP0YLRgdGP cG92ZXI= IEVzc2VuY2U= IEJ3 INC80LDRgNC60LDQtw== aWdlb24= IG5pbmNz U2FsaWRh IFBsdW0= X0lQVg== aXNzaW1l IOC0pOC0rg== INeT15DWuA== IFNvbWl0 CURCRw== IHdpbGxpbmdseQ== LmVtYmVkZGluZw== IOCkuOCkvuCktQ== IOCkqOCkvuCktQ== IHN0cmFpbmVk IGFkxLFuYQ== IOGDnOGDkOGDrOGDmOGDmuGDmA== IGzDpHI= 0LDQu9GM0L3QuNC5 2YTZitmI2YY= 5rGk IE1QRw== IGJvd3M= 0LDRgNC00LA= YWZpbWE= INC00LLQuNC20LXQvdC40LU= IEtpd2k= X3RyaXA= IGtlaW5lcw== IG1pbGxpb25lcg== IEJyYW5kaW5n IFdhbmRh IGVnbmU= IE5JSA== IGVww6Q= Q0NS Lm52aW0= LmxhbWJkYQ== aWduZW50 IOWkqeWkqeS4reW9qeelqOS4reWlluS6hg== IGhhcmRzaGlwcw== L29hdXRo CgoNCg== X0No IHNocnVi 77yM6ICM5LiU V29tYW4= IHBlbmluZw== IG11emU= INqp2YE= Q09OVEVOVA== IOCkueCkruCkvuCksOCkvg== IG1hZXN0cm9z IGhvY2h3ZXJ0aWdlbg== IHRlbMOpZm9ub3M= IGljZWQ= SG91c3Rvbg== IOCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmqA== IHBhYXBhYQ== X3ByZWRpY3Rpb25z INeR16jXkNep IOCquOCrjeCqpeCqv+CqpOCqvw== dW1tYWFu z4HPjM+C XS0tPgo= ISEhISEKCg== IHLDqWly LXBpbg== IM6UzrfOvM6/ Q29yb25hdmlydXM= IFPDuHI= IOC0uOC1jeC0pOC1jeC0sOC1gA== IEZheWV0dGU= IGFtcGxpZmllZA== 0L7Qu9GH 0L7RgNCw0Yc= INCi0LDQutC40LU= IOGDm+GDk+GDlOGDkQ== INGB0LXQvw== INiz2KrZg9mI2YY= IElERU5U c2hheQ== c3Rha2luZw== 5q2m5rGJ JHdw U2Fw RGVzaWduYXRpb24= IFRvdGU= IEVCSVQ= IExpdHQ= IO2XpA== IHdpbmVyaWVz INC70LDRgg== T05V 0LHQuNGA0LDRgg== IGxvY3Vz IGhhZ2F0aQ== IM6tzr4= IGltYWdpbmFibGU= INWt1aHVstWh1bI= IExlaWRlbnNjaGFmdA== IGFmZmlybWF0aW9u IOCyheCypuCysA== IGdyb3VwJ3M= LmNoZQ== 4KWN4KSW IExlYWg= IHltaW4= IHZ1bGF2dWxh IHZlcmphYXJkYWc= IHBpdGFuamU= IOCkleCljeCksuCkrA== INeT16fXldeq 5b635Zu9 aXLDoA== aWRpZW5kbw== IHJldHRlbg== aGFnZQ== IE1hYXN0cmljaHQ= IOyLnOuMgA== IHNhYm9yZXM= IENvbG9tYmlhbg== INeV15XXoteS IENvbnNjaW91cw== b3BlbnNzbA== LUNsYXVzZQ== INij2Yc= IHJhxI11bg== IGdyYW1tYXRpY2Fs IGtyYWNodGlnZQ== ZWRkaQ== cmV0YW4= IHBob3NwaG9yeQ== cHJlZmVycmVk aWJhcw== IGRlcm1lZA== UmVjaGFyZ2U= INi52YXZhNuM2KfYqg== V2FycA== IGF0dWc= IMOtbmRpY2Vz INeq16A= ZsOkbHQ= IGt3ZXPhu4ty4buL IGFzc29jacOpcw== 0L7RgdGC0LDQstC60LA= IOCqteCqv+CqmuCqvuCqsA== IHJ3ZWdv aXRlaW5kZWxpams= Ln4= Y2lvbmFyaW8= 4Kq+4Kqw4KuN4Kqf IOGDkuGDkOGDnOGDruGDneGDoOGDquGDmOGDlOGDmg== IOyiheulmA== IGNvbm5leA== IGNhcmJvbmU= IFBhdWx1cw== 0ZbQsdC70ZY= IGNvdWNoZXI= INmB2LHZhdin24zYpw== LmNybQ== IHNjcmVlbnBsYXk= IOGDl+GDmOGDl+GDnQ== XGh0ZG9jcw== IOC0sOC0o+C1jeC0n+C0vuC0gg== bG9vcHM= ZXJzbw== INmK2YLYuQ== 44Ki44OD44OX IEVuZ2FnZQ== IHsKCgoK IHRla3Jhcg== X01FVEE= IGNvc21ldA== U2xvcGU= INGD0LHQuNC5 INio2LPZh9mI2YTYqQ== IOaooQ== IMO2ZmZlbnRsaWNo X2Z4 IEVWRU5UUw== IFFDb2xvcg== Lm5y 6YGl INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQvg== IOCmruCmvuCmsOCnjeCmlQ== INC00LjQsNCx INWM1bjWgtW91aHVvdW/1aHVttWr cGxhbnVuZw== IOivt+axgg== IHPDrW1ib2xvcw== IOygle2ZlQ== SUNUVVJF Om8= zqDOkQ== 0YHQsNKh IG7hurFt LnN0cmVldA== IFNjaG9sYXJz am9iYg== IEVyd2FjaHNlbmU= IGplbWFuZGVu Lk11bHRpcGFydA== INC40YHRgtC10rM= 5pio5aSp LXRlc3RpZA== a3JpZWc= aXR0w6Rt IGhvbW9zZXh1YWxpdHk= W0o= IGFkcXVpc2ljacOzbg== IGtsaW5ndA== INqp2Yjahtqp ZWt0ZW4= IEVzc2Vz R3J1bmQ= bWHDsHVy aW5kZWVy INin2YTZgtin2K/Zhdip IERlZXJl 5oiQ5Lq655S15b2x SXRy IOCknOClgeCknw== INmB2LHZhdin2YY= IG1pdGk= LXRpcA== z4zPhM63z4TOsc+C IHbDqm0= INiq2K3ZhNuM2YQ= X2ZyYWc= IENyb2l4 X1RSQU5TRkVS 6KKr5Ya757uT aW5kbHU= IG1hZ2lxdWU= 2KjbjNmG X2R1bW15 IFRhdmVybg== 0L3Rg9C70Lg= Lyg/ w7Jw IE5vdMOtY2lhcw== YWNheQ== INin2YTYrNin2YbYqA== 0YHQvtGG0LjQsA== IHByb3Rlc3Rpbmc= IGVzc2VudGllbGxl IGNhdWxpZmxvd2Vy 0J/QvtC00YDQvtCx0L3QtdC1 IE1hbGlidQ== IGFtYmlndWl0eQ== IGNvbXByYWRv 0pnQsNGA0Ys= IMOkbm51 IExvcA== INCO Y2hhaXJz 0JLQtdGB T1JC 4LWG4LSv4LWN 7Ye0 IHNlbGV0 aXptYQ== X1BvaW50 IOCyleCyvuCysuCzh+CynA== IEFNUw== IOGDoeGDkOGDm+GDkOGDoOGDlw== RmlzY2Fs 5aWP IGFsxLHFnw== IFBhbmFtw6E= IOCkheCkuOCksA== L2Jvb2tz IEdpcm8= IFRow6BuaA== IEFkcg== IGfhu61p IEltcHJlc3M= 4Z694Z6b S3Y= 0YvQvNGL IFZlcnBhY2s= INin2YTYo9i3 IG3DoWxp ZXNzaWU= 4LiB4Lil4Lix4Lia IG5pZWRlcg== X1BhdGg= XE9yZGVy IENETg== INmI24zamNqv24w= 0LPQvtGA0LjRgg== b2luaG9z W3NlbGVjdGVk IFdBUk4= INGP0LrRltGF IHBhZ2k= IHRlYWRh puGDlQ== IGluYXVndXJhdGlvbg== IFZvcmJlcmVpdHVuZw== IFNNUA== INmI2oY= IOCkuOCkquCljeCkpOCkvuCkuQ== INWh1bbWgdWv1aHWgQ== IGFudW5jaWE= IHJ5Zw== IHZpc2FuZG8= IEdhbWVwbGF5 IGVudmlzYWdl 4LGB4LCy4LCk4LGL IOCyueCyv+CysOCyv+Cyrw== IMSNZXN0bw== IG1vbnN0 IOGDmeGDmuGDo+GDkQ== INC90LDRgdC70LDQtg== CgogIAo= YWhhbmFw IFRlc2Nv 4Lix4Lib Q09Q YW5pYW5z LmRpcmVjdGl2ZQ== TmFtZXNwYWNlcw== RnVybml0dXJl cnZvcmU= 0YHQuNGP0Lg= IHJlY2h0ZQ== aGxhaA== INeV15DXlg== INio2Yk= IMO8YmVycHLDvGZlbg== YnViYmxl IOCkluCkvuCksuClgA== INGH0LDRgdGL IGdhbHQ= IOCkpuCliOCkqOCkv+CklQ== JmF1bWw= LmNocm9t IGF1dG9k 5rC05Y6/ INC60LvQsNC/ X2t3 IFNob3Jlcw== IFVDUw== IERlbGl2ZXJlZA== INW21aHVrdWh1b/VpdW9 bmVhcmVzdA== IGNyZWF0aWV2ZQ== IFZlcno= IHByb2R1dG9yZXM= UmFiYml0 L2FydGlmaWNpYWw= IEtsaW5paw== IGdlb3RoZXJtYWw= IE9wZXJhdGlvbmFs LXNlZQ== INCS0LXQvQ== X2Jvb2tpbmc= INC70LjRh9C90L7RgdGC0Lg= IFRyZW5kaW5n IOCkneCkvuCksuClhw== INix2YjZhA== IFdURg== IEBb YXRyb24= IENvcGllcw== INin2YTZhdmI2Lg= INGB0YDQtdC00Ys= INqa2qk= IM6xzr3PhM65zrzOtQ== INCa0L7QvdGB0YLQuNGC0YM= INin2YTYudiz2YPYsdmK IHNjw6huZXM= IMWbd2lldA== 4Ka+4Kew4Kew IG9sb3I= 0YbQuNGY IEVOUw== INmD2YTYpw== X0ZVTg== INC30LDQstC10LQ= 4Kq+4KqH4Kqy 4KWJ4KSv IFNleGU= IGltaWI= INC90LDQvtCx0L7RgNC+0YI= cG9ydHJhaXQ= ZWxzZXM= INCz0YDQsNC00YPRgdC+0LI= IEhhbmRtYWRl X3NvbWU= SVBI bm9tYQ== UVVBTElUWQ== IHRlcmFwZQ== RW50cmVnYQ== IEVjaHRnZWxk dHJhc2g= 0JzQtdGC IM61zr7OtQ== IOC0h+C0sQ== IHNpZ2xvcw== X01U ICl7Cgo= LWFnaW5n bmVjZXNzYXJpbHk= IG9ubWlkZGVsbGlqaw== LWludmVzdA== IEVOVElUWQ== KkA= IE1vZGVybmE= ZHnFvg== INKz0LDQvNGH0YPQvQ== c3TDpG5kaWc= IGhhdW50 IExhdHZpamFz IHNhdm91cg== X2Rhcms= IOWbnuWkjQ== 0LvQsNGA0LPQsA== 562J57qn TGlldQ== IGN1bHR1cmVk KEhvbWU= IEt1ZA== 44Gq44KL INio2Kfbgdix IG5lc3Rlbg== c3RyaWtl IGtpbmV0aWNz IM+Hz4HOtc65 0YDQtdC90YI= IGp1Z2FuZG8= IE5pY29sw6Fz LmNr IGFwYXNpb24= IG11w7E= IGFraXdh LWNvdmVyZWQ= 65GY cWxhcsSx IG5vcmVmZXJyZXI= INK706nQudC7 IGVzcGVjaWFsbWVudA== 0YPQsdC10LY= IGdsb3JpYQ== Z3l6 IGFsZWdyZQ== IFZMQw== IG9icmlnYXTDs3Jpbw== IGJpam91eA== Lk5VTEw= IGRlZ2nFn2xp UGl0 IHNpamk= X1NDT1BF INC+0YTQuNGG0LjQsNC70YzQvdGL0Lk= IHJlbGF0aWY= IFBPU0lUSU9O IOCkl+Clhw== IG5o4bqxbQ== 4KaG4Kaw IG1pbsOpcmlv emFqaQ== IG5hcGE= INen15jXnw== IG1pbGll LUNhbA== IGdvd25z aWvhu40= IEZpb3I= TWlsaXRhcnk= IGF5ZXVuYQ== INC90LDQvNGD0LTQsNC90Lg= 4La94LeU LWxpdmU= IGNvbGzDqGdl IOC0n+C1gOC0rg== IGRvbGF5xLE= 0LvQsNC7 IG5ldW4= IFJlc3B1Ymxpaw== 5peg56CB5LiN5Y2h6auY5riF5YWN6LS5dg== IExvbmVseQ== IOCwuOCwruCwvuCwmuCwvuCwsOCwgg== Ly8vCgo= lYU= CW9wdHM= X0VERUZBVUxU 0ZfQsg== 4LKv4LON4LKv IOyghO2ZlA== IHNvbGlkYXJpdMOp TXVzZQ== INC/0YDQvtGI0LvQvtC8 INC60L7QvdGG0LXQvdGC0YDQsA== IEJFQVVU X0FMV0FZUw== X0dVSQ== 1aHVtNWh1oDVvw== 67CW IE1lxJE= IEthdHo= IEJhdG9u INCx0q/RgtGN IEx1dA== bWVuaW4= KHZlcnRpY2Fs IG5lY2Vzc2l0YQ== INWv1bjVtA== LmludGVybmV0 INep16TWvNeZ15w= 15nXkdei16g= PSIiKQo= LkZBTFNF INeR16LXmdeo IGJvb2ttYXJraW5n IEFTSw== dmlkZWQ= 0YLRi9GA0LA= ZmFk IHVybHBhdHRlcm5z INC/0L7RgdC70LXQtNC90LXQtQ== 4KS+4KSP4KSB X2FsZ29yaXRobQ== IHNpbOG6uQ== IGtub2Nrb3V0 RWd5cHQ= 2K3Yp9mE INC/0L7QtNGH IGVzcGFjaWFs IGZlbGlz IGluanVuY3Rpb24= 4YOj4YOg4YOT IHNhbGFyaWFs J2xnYW4= cHJpbWE= IOWNmueMqw== aXppZW56 Z2Vrb21lbg== IENoYXJsb3R0ZXM= IGFsbMOp IGF1dGVudGlj IGZpbGlhbA== ZXNpbmU= IGNvbXByZW5kZQ== INC+0LjQtA== 4KWo4KWr IOCmsuCmvuCml+Cnhw== 2LHbjNiq IHN5bXB0b21lbg== IFNjb29w 4KqG4Kqw4KuA Wmk= bGVyeQ== UElMRQ== UkdDVFg= cHJz IHZpa3RpZ3Q= Y2FudGU= IFNlbmhvcmE= IG9tdWw= INmF2K/YsdmK2K8= QmFsYW5jZXM= 5oqV5rOo5oqA5ben w6Fuc2l0bw== IGNsYXdz INWh1abVpNWl1oE= xJlkemll INeX15XXk9ep dXNpZA== IGRvb3M= UmVsaWdpb24= LUxpbms= IGhlYXBz IHByw6lzZW50ZXM= VGVtYQ== WkVO 15nXmdep15DWt9ef LmFsZ29yaXRobQ== 5Yqo5L2c QnJhc2ls IEJvZGllcw== INC00LLQvtC5 IGluZGl2aWR1YWlz Iks= IOC4iOC4uOC4lA== QmFv 5b2V5YOP YXZvaWRhYmxl IHVucXVlc3Rpb25hYmx5 INC00L7RgdGC0LDQstC60Lg= IE5vcm1h IHN0w7Zyc3Rh IGhldHRh IEZhc3Rlcg== 0YLQsNGG0LjQuA== IFNpbm9u IGludGVsaWfDqm5jaWE= 0YHRgtCy0LjQuA== INC60L3Rjw== b3RvbXk= c29lbmc= 4oCC4oCC IHByb2Zlc2lvbg== IGFwYW4= IGFsbHVyaW5n IGtyd2Fy b3Vm w610w7M= IFdlZG5lc2RheXM= IOCkteCkv+Ckp+CkvuCkr+CklQ== IG55aWFq IEZyaWVzbGFuZA== IHRhYm9v X2VsZQ== IGVubGFjZXM= IOC0l+C1jeC0sOC0vuC0rg== IGFuYWxpemE= IHNjaMO2bnN0ZW4= IMOgcmQ= 0LjQsNCw0LjRgNCw IGhhdXI= IHBsYcOudA== IGRhbmVz IHZyZWVtZA== IHBlcmNvcnNv Q09OUw== IGRpc3Blcg== IGJhbmVu IGvEhQ== aW9ubw== YWRobmE= IGRpdmlzacOzbg== IGFrdGl2aXRldGVy IHVsYXI= bWVyZW4= LlF1 IOCmieCmhw== CVJlbmRlcg== IHZlcmdvZWRpbmc= IHRyw6Fp IOCwpOCxgOCwteCxjeCwsA== IHJpc2tpbmc= IGNvbW1pc3Npb25lcnM= IEphY3V6emk= INWs1aXVpg== IG1hYXRzY2hhcHBpag== 44CL562J Lm9ucmVhZHlzdGF0ZWNoYW5nZQ== tuCqqA== 16fXkdeV16o= Pyg6 INiz2YTZhdin2YY= w715xZ8= IG3DpW5lZA== IGNhZmV0ZXJpYQ== IHF1aWx0cw== LWxvYWRlZA== IHRhZGFsYWZpbA== 5biF INC/0LjRidC4 IOyCtOyVhA== IEJyZXM= IEVkaXRpb25z 0YTQuNC60LDRhtC40Y8= IHRpcmhpc2E= INifCgo= IEdlbGRlcg== IGF0bW9zZmVy IEhhYmVy IOCmp+CnsA== YXZhbw== IOCkrOCkv+Cklw== IEl0YWxpYWFuc2U= IOCyuOCyguCyluCzjeCyrw== IGR6xKs= 0L/RgNC+0YfQtdC8 IEdvbGRiZXJn OuKAnQ== IG1hbHVuZ2E= SWM= ZnJhZ2lzdGljcw== 5p2A56CB IGxlb3BhcmQ= IOODrw== IOCuteCuv+CupA== 4pi6 IGNhcmVycw== IEV4cGxvcmluZw== X2RlZnM= IHZpenVyaQ== IGh1a3Vr INSx1b4= IOCkruClgeCkqw== IG9yc3o= dmVkaWM= QkxM IG3DpW5lZGVy ZXJlaWNo 15XXk9eZ16o= IEdhcnI= aW1wbG9kZQ== IHZpc3VhbGl6YXI= T1BFUg== fG1pbg== UHVibGnDqQ== IFVUSUw= 5aSn5LyX IOGDo+GDluGDoOGDo+GDnOGDleGDlOGDmg== IGJyeXN0ZXI= IGRodXQ= CVJUTFI= IGVzcGFu IFRyYXZlbGluZw== WmFr INC40L3RgtC10YDQsg== IEdPVg== IGV2b2tl 2LHYr9in2LHbjA== IGJhY2tzdGFnZQ== X1NJVEU= INio2KfZiNis2YjYrw== 0L7QstCw0L3QvdGL0LU= XFJlcG9zaXRvcmllcw== IOufrA== X1NJR05BTA== IHRow6lvcmll IHNlbWVudA== IEF1cmU= UFVS X3Ntcw== IFdhZmZlbg== 2KfZhNmD2KrYsQ== SVBF w6lyZW5jZXM= IEJPVEg= INiz2KfZhdin2YY= RG0= INiq2YXYp9iz 4KaV4KeN4Ka34Kaj LOi2heeisA== KXRlc3Q= IFVwY29taW5n e31f KCl9Pgo= ICIvIiw= 1aHWgNWh1aI= IGVsdmVz IHByYWlzZXM= IGVzdGFyw61h IG5vbWI= IENoYW5jZXM= IHNvdXJpcw== IHNjaGxpbW0= X0NPTExFQ1RJT04= IEdlbmF1 INCy0LDRiNGD IGV4cGVydG8= IHJvdGF0ZXM= IGluZHVzdHJ5J3M= dXJpeWU= IG1vcmdlbnM= IENocmlzdG9waA== X1RD 4KuN4Kqv4KuC 5YWN6LS56auY5riF 4YOU4YOU4YOR4YOY4YOh IOCqteCrh+CqrA== IGNyZXNjZW50ZQ== X21hc2tz Lk1vYmlsZQ== IHp1aGF1c2U= IGV2aWRlbnRseQ== 0LTQtdGA0ZbQvQ== X01BVFJJWA== IHNlZWR1 YWRlZw== 0YHRgtCy0LjQuQ== 0Y3RgtCz TU9TVA== INin2KrYrtin2LA= Q8OhYw== INGA0Y/QtNCw bWVzZQ== IGRpY2hpYXI= IGNvbmRpbWVudA== INiv2YTYp9ix IG3DqWNhbmlxdWU= IEhlbGlj IERlZmVzYQ== 2K3Zitin2KE= 0rvRi9C90LA= YW1hbGxh IHBlbnNhbWllbnRvcw== 4Kqo4KuN4Kqc IFBhdHJlb24= IHPDqW4= IEFWQw== 6Kqy IG7Em2t0ZXI= IGNvbGNo bWRhc2g= IHR1cnVu X2Rlc2Ny IFRob3Ju INC60LDQutGD0Y4= bGFuZGV0 IHLDqWZsw6ljaGly INmI2YTZhw== CXByb3Bz CWNhbA== INeV15TXqQ== Lz4uCgo= RmVu IFVuZGVmaW5lZA== YWtzZXM= IGNpdGFy b25zZQ== IOCkleClh+CkuA== bWFzc2E= IG1vaGlv IGltbW9ydA== xYZhcw== KFJlYWQ= IOWE IHBvdW5kaW5n INmE2q/Ypw== bWV0dA== IG1pbGxlbm5pYWxz IGZ1bmNpb25hbmRv KShfXw== IOCyleCyguCyqg== 4LmE4Lij4LiB IFdJTkFQSQ== Okw= 67aZ IG90dGVuZXJl IOC4geC5iOC4reC4mQ== IGNhZGVpYQ== IG5pZ2h0Y2x1Yg== INeU157Xmw== 0LDRgNC+0L0= IGRlZmluaWRh IGtvbW1ldA== IGtvc3Rl IGNvbXBseWluZw== IHBsaWdodA== IOCyheCyguCylw== xatk IG9yaWVudGFjacOzbg== 4YOU4YOa4YOU4YOR4YOY IHZhaGVs INC+0LTQuA== IFdhaXN0 INin2YTYpdmF2KfZhQ== IG5oaeG7h3Q= INCy0YI= c3BpZWxlcg== YW5hdG8= IHBsb3R0ZWQ= IOW9qeelnuS6iemcuOS4i+i9vQ== IEFtbQ== 4Lil4Li1 dW5law== IOWkqeWggg== IOCkn+CljeCkteClgA== KGFyZ3VtZW50 IGVzYXN5 IG5lbGE= IFJlcHJlc2VudGF0aW9u 5Ye65LqG L0F1dGg= IGVyaGVi INC/0YDQsNGG0Y4= IHJlZGlzdHJpYnV0aW9u LndpbmRvd3M= IFZpcmdlbg== INit2KfYrNip IOGDr+GDkOGDnOGDm+GDoOGDlw== X21pZGRsZQ== 4oCZZXhwbG9pdGF0aW9u IOuIhOq1rA== RU5HRQ== IGJvdWxvdA== LiI8 IHZpdmVt INOZ0LzTmdC7 IHbDqXQ= b25la3Np IC0tLT4= IOCksuCkvuCkrg== INCh0YLQsNGA IHBhcm1z YW1waWxrYW4= IGbJmWFsaXl5yZl0 IHZvcnRleA== b25pbg== IGppcmF5 4KeB4Kaa IHZpY3RvcmlvdXM= b25uYWlzZQ== 1bjWgtW8 IE1BSUw= 4LK+4LKt IOCkrOCkqOCkqOClhw== INOZ0LrRltC8 LTw/ QXhpb3M= IG9idGllbmU= INCS0L7RgdGC IHBvbGl0aWNp d2F5aQ== 0L/RgNC40ZTQvA== IHVuaXZlcg== INGJ0L7QtNC+ aWtrdQ== IG9vbQ== 5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9 IOW3peS9nA== UHVlZGU= 4Lic4Lil4Lia4Lit4Lil IG9ydGhvZG94 INCh0LDQsg== U2FsaXI= IGFraWJhdA== IGtqZW5kaXNlcg== IG91dGxhdw== IEludGVyZXN0cw== IHR1cnBpcw== INWw1aHVtdW/1aHWgNWh1oDVpdWs TnV0cml0aW9u IGRpY3Rpb24= IEhlYWRsaW5lcw== IE9wZXJhbmQ= w61uw60= CUJ5dGU= IOGDmOGDnOGDkg== IHTDpHTDpA== 0YDQtdGB0YI= SVBIRVI= IEbDpGxsZQ== IOa2iA== IHNldml5 ZXN5 aW5zdGl0dXRpb24= IElJRA== IGJlYW50d29ydGVu INGB0LjRgtGD0LDRhtC40Y4= 06HQsNC8 INCx0LjRgtC4 IGdlZ2Vuc2U= RU1Z Q2Y= 4KSy4KWH4KSf IFZFRw== dXB5dGVy YWJpc28= IFRyYW5zcGFyZW50 QkFD IM+GzrE= IOaJi+acuuS4iuWkqeWkqeS4reW9qeelqA== IHNhbXV0aQ== INin2YTYstmI2KfYrA== IOCqsuCqvuCqrQ== LcQ= IHZvbHRz YXJtYXQ= IFJlY29tbWVuZGF0aW9u IE90cm8= bGljaW5n TXlzcWw= 4KSC4KS2 aGVw IHJlZGlyZWN0cw== IHByZWdsZWQ= IGthbGTEsXI= IG5hd28= 54iG5Lmz IOuzgOyImA== b25hdmly IHB1aXNzZW50 0LjRh9Cw0Lk= X3RvdWNo 566h55CG5ZGY IHZvaW0= LkZJTEw= INmF2LPYp9i52K8= IG5pZWo= IOyGlA== b3JtYXQ= LmFuYWx5dGljcw== aW5kdXN0cmlhbA== IFNIQVJF cnVucw== IHRow6E= 2KzZhdip 2KrblQ== X0l0ZW1z YWN5bw== INC80LDSo9GL0LfQtNGL 0YfQvdCw 157XkNec IMO6bmljYXM= INC/0L7QttC10Ls= ZWRpYW5z IGFiYXR1cmFnZQ== IOWuneebiA== aWt1ZA== IGJ1cm5vdXQ= IE9uZw== IHdhd2U= INeT15bXqQ== IFJpdHo= 1bjWgNWr xI1pbGk= QXNt IjoKLw== TWF1cg== IHLDqXNpc3Q= INiq2LHYs9ix2Yc= IGludG9sZXJhbmNl IOCksOCkluCkpOClhw== IFdvcmtib29r amF0aQ== X3Blbmc= IGxhbmdkdXI= IGp1ZGlj IERCTnVsbA== IOCmpeCmvuCmleCmrOCnhw== IGV4cGxvdGFjacOzbg== csSx xaFhbw== IGxvdWVy IOCkteCksOCkv+Ckt+CljeCkoA== LmZhaWx1cmU= INiv2LPYqtmI2LE= UEFDS0FHRQ== 0L7RgtC10YDQsNC/ INWA1aHVtdWh1b3Vv9Wh1bY= 5oWO IOemj+WIqeW9qeelqOWkqeWkqeW9qQ== X187 IGNvbmNvbQ== 4Kex4Kew IGVudHJhw65uZQ== 64OI IOyKpO2PrOy4oA== 4LKo4LK/ IGhlag== IFNURg== 2LPYqtin IikpKTsKCg== xJPEvA== T1NI IEFyYWJz INGF0LLQsNGC0LDQtdGC 5bi9 aGRs IGRvc2luZw== IOCwpOCxhuCwsuCxgeCwuA== IHN1cnJlbmRlcmVk Q3Bm IOCmnOCmvuCnnw== ZmlsbHM= IFNlcmllbg== INGC0LDQutC+ YWphZA== YW5iaWV0ZXI= IENSRUFURUQ= TGFyYXZlbA== IOCkqOCliw== IGFzaXN0ZW50ZXM= a2l0cw== INeU16DXqg== R2xhZA== WyM= ZWZp Q2hlbHNlYQ== INC70LXQsg== LkNvbnN0cmFpbnQ= INGD0YfQtdC90Lg= IENhcHRpb24= IEZhw6dh aW5pY2lv IGhhZGRh INKZ05k= IGhhcmR3b3JraW5n RU5PTUVN ZXN0YWJsZQ== U29ja2V0cw== IHdlcmtuZW1lcg== IOyCrOyaqeyekA== IHLDqXbDqQ== IGdyw7bDn2VyZW4= aWV0dGE= IGhhYWx0 IHNpZnQ= IHJlcHJlc2VudGFu INC60LDQu9GP INGF0q/Rhw== IGV0ZXJuYQ== 5LmX xINyaWxl IFBoaWxsaWVz IOygnOqxsA== IHByw7xmZW4= IGRlcG9ydGl2YXM= IGRlc3By IOCopuCov+CpsQ== IHZlcmJlc3NlcnQ= IHNmZQ== INC80L7Qs9GD0YbRjA== IOCkrOClgeCkpuCljeCkpw== 56KR IHJpbXM= X3ByaW9y 0LDRgtC10LvRj9C80Lg= KGNhbGVuZGFy UElSRQ== IEthcmlu 4K6w4K+L IGVmZmljYWNlbWVudA== U2ltaWxhcml0eQ== IOCkteCkvuCkpA== S3Vs XFwi INWo1bbVpNWj aXNtYXI= 77yM5Y+I LlVUQw== INCw0YXSrdGL0YE= X0VS IEZhbGxpbmc= c3RyYXRl YW50dXI= IHJldmVyZWQ= 4YCx4YCb4YC4 INi12YHYrdip LWJlYXJpbmc= LnNucA== SW52YXJpYW50 4KuL4Kqw4KuN4Kqu IFNBTUU= INin2YTYqNin2K3Yqw== 6bit IGTDqWNvdXZyZXo= U0NI c3ViamVjdHM= IOCqrOCquA== IHRlbXDDqXI= QmVkcw== INmF2LHYrdmE2Yc= YWJheWE= IkFz IHB1cnBvcnRlZA== IGluZmluaXRlbHk= 15DWuNef IHBhbm5lYXV4 cHJvcG9zYWw= OnB4 IEJhbmR1bmc= INCf0L7QsQ== INeq15TXmdeU 15HXnNeU IHN0YW5kYQ== INiv2LHbkA== IHBzeWNoaWF0cg== cHJlc2Fz IGphbmE= IEFQUFJP ICgpKQo= 0LvTqdCz IHByaWXFoQ== IGZyw6Vnb3I= IOWwj+ivtA== R2FyZA== ZW50ZWls IG9jY2lkZW50YWw= dWZ0aGFuc2E= 5rS75YuV IGF0dWFsaXphcg== IE1hcmlhbm8= IHBvbHl1cmV0aGFuZQ== IEVpZmZlbA== IGFudGlo 5omT5LiA6IKW IE5hbWliaWE= IGRhZ2Vucw== X3Jm IFd1aGFu IHJoYW5kemE= LXNhbg== IFN0ZXBoZW5z 0LfQsNC7 IOCkruCli+CkuQ== IGhhdmVudA== IOCmrOCmoeCmvA== 5raZ IG92ZXJsb29rcw== IGZpc2hlcmllcw== 16bXmdeV16o= ZsOkbGxlbg== X1JPT00= LXByZXY= LlZlcnRleA== INCQ0po= b3VuY2Vy IHNhbmFk IGRvdHljesSF INC00L7QvdGK0Y8= IGhlbW9ycmhv 4LCX4LGN4LCw LkdyZWVu INin2YXYsduM2qnbgQ== IGLFgg== TmVpZ2hib3Vy IHZhcmlhZG9z 5b2p5aSn5Y+R5b+r5LiJ IGN1YXJ0YQ== 4LSf4LWN4LSf4LS/ LUphbg== IHRpbGbDpmxkZQ== IG5jaHVtdQ== IG1vYQ== c3BvbGl0 IGp1bmU= IOC0teC0v+C0qg== QmlibGU= IG1pdG8= IGVyd8OkaG50 UEhPTkU= IE5k4buL IG1pbGjDo28= IGtvcnM= IFRlbXBz INC/0L7Rj9Cy0LvQtdC90LjRjw== b25pYW5z IEp1cmFzc2lj dXNlaGVu YW1iYWhrYW4= INGB0YDQtdC00L3QtdC8 IHBhcmVpbA== VU5ERVI= KHNlcmllcw== IG1hdHNheWlu L2J1c2luZXNz LkFydGljbGU= IGRvbnM= 4LS/4LSw4LS/4LSV4LWN4LSV Y2hzdA== IG1hw650 KFwn amFtYW4= IHBvbW/Ehw== IHVuZGVyc2NvcmU= IOCuheCupOCuv+CuleCuvuCusA== RnVuY2lvbmFyaW8= IGVhcnRobHk= LlN1cHBvcnQ= 0LHQttGM0LDRgNCw0YLTmdC4 INmE2K/ZitmH2YU= IEdyYW5kZXM= VmVk Jlc= INC90LXQuw== IG3Dpm5k IENhcHA= 4YOa4YOY4YOQ4YOc LlNpZGU= 4Lig4Li5 15DWt9eo16c= IOGDkuGDkOGDnOGDoeGDkOGDmeGDo+GDl+GDoOGDlOGDkeGDmOGDlw== bW92ZXM= KEZpbHRlcg== IHB1YXM= INC00LjQt9Cw0LnQvdC10YA= IHJhbGxpZXM= IHRoYXdq INGB0L/QtdGG0LjQsNC70YzQvdGL0LU= IEFkb2xm ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= IGNhZ2Vz IOuyhO2KvA== 2KfYsdmD 56eB5b2p IGFyY3U= aXVtaQ== INeU15LXkQ== X2FsYnVt 2KzZhNip Y2VydGFpbg== IHZpc2NlcmFs Y2Npb25hcg== cHo= IGJ1ZGF5YQ== RW5naW5lZXI= TUlTU0lPTlM= INiq2KzZh9uM2LLYp9iq bGVrdGlvbg== IHRlcmNlcm8= YXp6YQ== IFBob3RvZ3JhcGg= INmC2LbZitip INiq2LI= INWG1avVr9W41aw= LXF1ZXN0aW9u IEF1dG9ub21vdXM= IM6tzrPOuQ== Vml2 TGFibGU= 4oCUYXM= bGF1ZmVu d29mZg== 2LPbhw== IGVzdHJ1dHVyYXM= IElubm9j cmlnaHRuZXNz IOCkhuCkguCkpuCli+CksuCkqA== IOCmqOCmr+CmvA== Q2hhcmxvdHRl IGF1dG9ub21l IGFhbndlemlnaGVpZA== IOCqleCrgQ== CWJn 44KC44Gj44Go IGR6aWXFhA== IGhha2lt dmVyZW5pZ2luZw== INC20LjQvdCw 0LbQtdC5 R3JhbmRl IFByb3Zpbg== IENVUA== IHJvYmg= IHBoaWxvc29waGll IGluc2lkZXJz IOS8n+W+tw== IHlhbsSx IFRSSQ== zrTPic69 dWVudGFz INmE2KrYrdmC2YrZgg== INi22KjYtw== dXZjaGk= IEplbA== X1BST0dSQU0= 2KfZgtmE IE1pbGV5 IOCmpOCmsA== RXN0aW1hdG9y IE1vdGhlcnM= IHBsdW1l 4KaC4Ka4 IHN1Y2N1bWI= 6Zmq IHZ5cg== IG1hc3Rlcm0= IGFhbnJhZGVy IMO9YXo= K3c= IOCmqOCmv+CmsOCmvuCmqg== INiu2LHYp9io dW5nZWU= V2V0 INC/0YrRgA== IExlaWI= IG1hZ2FjYQ== INGC0LDRgNC40YXQuA== IHRpZW5z KeqwgA== IEF1c3N0YXR0dW5n UGVyc3BlY3RpdmU= fScp 0YHQu9C+0Lw= cm9waG9iaWM= 1aHVvNWh1a8= IHTDpGh0 X2V4dGVuc2lvbnM= 5oqV5rOo5bmz5Y+w IOGDk+GDneGDmg== IFVsdHJhcw== IE9mZmVu YXhi QlVU INGB0LXQt9C+0L3QsA== IOCqsuCql+CqreCqlw== VG9uZw== IHF1YXJ0ZXQ= YWRhbmc= IHB1eA== IOCkteCljeCkr+CkteCkueCkvuCksA== IGTDqWNpZGVy 0L7RgNC10LQ= IHRyb3BoaWVz IFRyYXVtYQ== U3BpZWw= UHJvY2Vzbw== IGNsw6E= 0L7Qu9C10L0= ZW1wb3I= T3V0cm8= IHJlZG5lc3M= IHBha2lzdGFu Z8OlZW5kZQ== QnJlZWQ= INC40YHQv9C+0LvQvdC40YLQtdC70Yw= IHNvd2Fz IHVuZm9sZHM= IExva2Fs IE5hcnJvdw== IEVpbnRyaXR0 15LXoteU LkRldGFpbA== L29kZXI= IGRvcm1pdG9yaW8= 57eo6ZuG IGltYXRp ZXllcg== IHBpbmFrYW1haHVzYXk= 0L7Qt9C9 5Ye65Y+j INGE0LDQutGC0L7RgNC+0LI= 4LmA4LiJ IGdlaXN0 IElzYWJlbGxh INmF2KzYp9mG2YrYqQ== IHBvc3R1bA== YXppbmk= IHRlc3Rvc3Rlcg== INCx0q/RhQ== 77yM6YO9 IGhhbWJyZQ== X2F4ZXM= IHN1cmdpcg== IE5vcm1hbGl6ZQ== INin2YTYqNmK2KbYqQ== 6re465+s X09E cGVyYXRvcg== 6rCQ7J2E IGhpZXJpbg== IENhaXQ= IGNlbnRydQ== IFRyYXZlcnNl Q2FuYw== IGFsbWFz X3Jhbmdlcw== LklURU0= 0YDQsNC90YE= IOmZiA== IG7DpGt5 aGlkYQ== IG7DpHJh IGNhbGVm IFBldHJvbA== INiz2LnYrw== U0VORA== IEN1bm5pbmdoYW0= UkRE Lk5PUk1BTA== IHNrbGU= IHdhcm1seQ== INmF24zYr9in2YY= IHNhZ2Vz OlRoZQ== IEF1ZnQ= IM68zrXOs86szrvOtw== IEF0ZWxpZXI= IEJ1Z3M= IEdNUA== d2VsdmU= VWJ1bnR1 IEF1dG9tYXQ= IHJldml2ZWQ= RG9uYWxkJ3M= IENhc2lu IGVtYmw= IHphaHQ= IGlzcmE= IOaLvA== 7ZiI INC+0YDQvdGL IFNlbWljb25kdWN0b3I= JG1zZw== IEFDSA== IHN5bWJvbGlzbQ== X2dsb2JhbHM= dWFscXVpZXI= YXNpYg== 4LKV4LON4LK34LKj KCItIiw= IG1hcmNoZWQ= Vm90aW5n IHNpZ3Vybg== T2J0 IEdsYWNpZXI= X1RlbXBsYXRl 2YTbldix 0LvQtdC80LXQvdGC 15PXqNeU aG93ZXZlcg== aW5hcmllcw== IGJyZWFrZmFzdHM= IEtyaXN0aW4= IEZvbGRpbmc= 15XXmdeT QmVsZw== IGluc3BlY3RvcnM= KGFuaW1hdGlvbg== INGI0LDRiA== IEdlZsO8aGxl INiv2YLbjA== c3BhcGVycw== 2YjYr9mK2Kk= IHByb3Nlc28= 4oCZ0ZQ= IE1pdHRhZw== IOGAlOGAvg== 0L/QuNGB0L7Qug== KXNlY3Rpb24= IGdyZW0= 0LXRgdGB0LjQvtC9 IGVubGlnaHRlbmVk CSAgIAo= INee16bXkQ== 4KSs4KS+ IEJyaWRhbA== IEhhcm5lc3M= INGD0YfRg9GA0LTQsA== IEthbmFs INin2YTZhdmP dXJvcGE= IEZpb25h aWthbGU= IERpbWl0 dXN0YW4= IGNvbnZlcnRlcnM= SW50ZXJhY3Rpb25z IHNrcmV2 INmF2KzYp9mG2Yo= IM60zrnOsc+Gzr8= IFNvaA== INW41b3Vv9Wr1a/VodW2 aXNlaWQ= Q3Jhd2xlcg== IOC0teC1gOC0nw== ZHLDoQ== QWZmaW5pdHk= IOi9r+S7tg== IG1hamV1cmU= IHllZWo= IHByb2PDqQ== IGLDq3LDqw== IGludGVycHJldGFy X1NUQUdF IGVjaG9lcw== LnJtaQ== QVJJTkc= IExlbmRpbmc= IOCmq+Cnh+CmsA== INen15nXmdee IHVsdGltaQ== IMOnxLFrYW4= amFp IFN0YXRv VHJhbnNwYXJlbmN5 INmF2KTZgw== INin2YTZhdit2YXZiNmE 5rKz5Y6/ VGFsbA== 2KfYsdiq2YHYp9i5 0L3QtdGA0LA= IHRvdGnFvg== 67CA67KI7Zi4 IOCyquCyguCypuCzjeCyrw== b3Vib3V0aW4= IG5hbmdhbmc= IOCkleCkqA== Om9u Z8Okbmc= IGFsZXJ0ZWQ= UG9seW5vbWlhbA== IHVubm90aWNlZA== ICd+ IFRyYWRlcw== P18= IG1wYWdoYXJh IFbDoQ== IGNpdmlsZXM= YW5nYXph 6LWE5qC8 IM68zq3Pg8+J IEJlaGF2aW91cg== QmVsbGU= UExBTg== IHJlbWl0 aWNpb25l IOCkquCksOCljeCkqOClhw== LmJldGE= IHRhYmxldHRl IG1hc3o= PD8K 5oiR5Lus55qE INeQ1rfXnw== IEtlaQ== IHNjdWJh QUdPTg== IGthbWFncmE= LHZhcg== Y2Vj IOS9k+W9qQ== IGthbGxh IHF1YXk= IOyN IOuqqe2RnA== UGlucw== 4Kig IGlzY2hlbQ== w61zdHVw K3M= dHJpZWI= IGFiaMOkbmdpZw== IEVHTA== 4KeH4Kat INin2YTYrdmB2KfYuA== IGlzbGU= aXN0YW5kYQ== IEFjdGlvbmV0aWNz cmFmdHM= IHXEjWVu LXRyaXA= IGFpcnBsYW5lcw== w6l0dA== IGtyb29u IGFwaG8= IGJyaXR0bGU= IHdhbmFhZ3Nhbg== aXN0b2o= X2tu INmC2YjYqg== RXJyZXVy YXJ0dW51dA== IGxpbmtlbg== IOCwheCwreCwv+CwruCwvuCwqA== LWVuZGVk b3hldGluZQ== IGRlaHlkcmF0aW9u IEtvbnRha3Rl IGFtYWQ= 4LWD4LS2 IHRvdXRlZA== 6LWb6L2m5Zy6 4LK/4LK14LK+4LKw 4KSJ4KSo4KWN4KS54KWL4KSC4KSo4KWH IHBvcnRhYmlsaXR5 Sm9zw6k= IGFyZW5hcw== IHZhbGFtaW50 IOaEmw== INKb0LDQu9Cw LXdhbGw= IHNsZXV0ZWw= IHNhbsOpcw== LXRlcm1pbmFs aWRlcm1hbg== IEZvcnNjaHVuZ3M= IHByb3Bvc8OpZXM= LeCmrg== IGN1c3RvZA== INGF0LjRgNGD0YDQsw== w6RodA== 4KeN4Kew4Kau RW5oYW5jZWQ= 4LK+4LKw4LKC4LKt IHBvcnR1Z3Vlc2Vz ZW5zaW9uZQ== 2K3Yr9in2Ks= IGtlbXVuZ2tpbmFu KnU= IHN0aW11bGU= INi22LnZgQ== IOGDqOGDlOGDnOGDmA== IG9uYmU= IHBlbnPDqWVz IGRpemFpbmVz VEVDVElPTg== YXNpb25hbA== cGhhbnM= w6F0dQ== IOC0qOC1jeC0r+C1gg== 5YmK 0KfQtdGA IOGDmOGDm+GDkOGDoQ== 0YHQu9Cw0L0= X01J IFFF 5Lic6KW/ IEFueXdoZXJl IOu2mQ== IHZpamU= IHByb3dlc3M= WW9yaw== 0LXRiNCw IHZvb3JtYWxpZ2U= IGZpcmVzdG9yZQ== IGV1dGg= b3NzaQ== IGdlc2Now7x0enQ= RGVuc2U= IGNvcnBvcmU= aW9zaXM= IGF0bW9zZmVyYQ== IHppbmF6 INC/0LXRgNCy0L7QtQ== X2xlYXZl IOCkruCljeCkueCko+CknOClhw== IG1pY3JvYmVz 4LS/4LSV4LWN4LSV4LW9 U3RvcHBpbmc= dWt0dQ== IOC0uOC0guC0reC0teC0gg== IMOpbG8= LWNvYXRlZA== Lm92ZXJsYXk= IHJlcHVibGljYW4= 4b+m IFByZXNpZGVudHM= SGVyb2Vz IGtvbXBsZXR0ZQ== INW01aHVtA== IGdlbGVlcmQ= IGZhdGFsaXRpZXM= YW13ZQ== INKb0YPRgA== d2dldA== emFobHVuZ2Vu IG1hcXVp PkRhdGU= eWxsYWJ1cw== IFJvZG5leQ== asOpbg== LnF1aWNr IGRhcmFkYXJh LldpZGdldA== INin2YTYrdin2YTZitip INCw0qnQvdGL IE9ocg== IG1vYmk= J2Fycml2w6ll 4LWB4LSV4LWK cHJlZGljdGlvbg== IERpZW5zdGU= SlBFRw== IM6vzrTOuc6x INqp24zYsw== INC50YvQu9C00YvSow== IGFwcGxhdWQ= IgoKCgo= INin2YTYsdiv X1JDQw== 546w5a6e IHppbGl6 INij2LnZhNmG S2Fq IE1vcnBo fj0= IEtvbnplcnQ= IGRpc3RpbGxlZA== 4KWn4KWq OkAiJUA= L2FwaXM= INi52LQ= IGNocm9ub2xvZ2ljYWw= X2lvcw== IENpbmRlcmVsbGE= IGZ1bmRhZGE= LXRocmVhZA== INW91b/VuNaA CU9O 77yM5Z2a5oyB 5bu25pyf eXN0ZXJz IEFtcGg= 24HbjNq6 INin2YTYp9mE2Ko= bGFib3I= YXNpa2Fu IEJvc25pYQ== IOCkheCkl+CkuOCljeCkpA== Sm9obm55 5YWF5YiG IGNvbmR1Y3RpdmU= IHVmYWJldA== Y2xpZA== INW+1b3Vv9Wh1bA= IEVyeg== 5YGa5Yiw cmV2ZQ== INeo15HXlA== ZXJ1cw== IEVudW1lcmF0aW9u YmluZGluZ3M= IEFuYXQ= IHJhZGU= aWhrYW4= IOCkhuCkuOCkvuCkqOClgA== INin2YTYs9mK2YY= IEJyaWRlcw== IHNrw7o= 4LiW4Lit4LiZ INi02YXbkNix IOyghOq1rQ== 1bXVodW21bY= INGC0Y3RhQ== XCI+Ig== IHJldm9sdmluZw== IGVqZXI= 4LSu4LWN4LSu4LSm4LWN 0LrQsNC7 X0hU LlBvcHVw IHRpamVrb20= IGhyYQ== dXJnaWU= IGlua29tZW4= IOW9qeelnuS6iemcuOe9keermQ== U1RT KE1vZHVsZQ== IHNpZGlp INC20LjQstC+0YLQsA== INC/0L7QtNC+0LnQtNC10YI= IGFmZ2VzdA== IGNyZWF0aXZpZGFk 4pas4pas Vk1M IGt1cnVt IFJFTg== IHJpcHBpbmc= IGdlbHQ= eGFl IOGDqOGDog== cmV0dG8= b2xpcXVl INCx0LDQudC90LDQuw== IENlbGxl IOCypuCzgQ== INGP0qPRiw== 54K46YeR6Iqx IGdyYWNlZnVsbHk= QUxMRVJZ SEVSRQ== X0hBVkU= IGdlbGnFn3Q= IFJlZXNl IGFtYWxh IGNhbWlub3M= w7VlbQ== eW50YQ== IENPTE9SUw== IEZTTQ== IOCwrOCxhg== IFplbQ== IE1hY2Vkb25pYQ== 2LTYsdi32Kk= IMO1aWc= INGA05nQuNGB0Lg= aXRpdm9z IGVnbmE= 4LCl4LGN4LCv4LCC4LCy4LGL Ym9uZXM= INi02YjZhw== IGV6aW1i IEJBTQ== IGluaW1lc2Vk IOC0uOC1jeC0teC0puC1h+C0tuC0vw== IOCqleCqsOCrjeCqrg== WW91dGg= 6byg IGFwcHJlbmQ= IFJFR0lPTg== IM66zrHOuM63 IHF1aXRz IHBlcGE= IG9yY2hpZA== 0LjRgtCw0L0= 5aSn5Y+R55S1 Y2hpZQ== cm9tZXRyeQ== IOCyruCzgA== IOCmmuCmvuCmlQ== UnVl aXJ1dA== IOCqteCqv+Cqtw== IGRvbWljaWxp CUNvbnRleHQ= RVJSUQ== 06nTqdC7 5pa96Kit INCy0LDQt9C40YQ= Y3VsYWlyZQ== IGNvbXBsZW1lbnRhcg== X0FMRVJU IG3hu4Ft 4oCd66mw INWh1bbVuNaC1bQ= 0LzQuNGA0LA= IHByb21pbmVudGx5 dW1pd2E= IOCknOCkvuCkj+CkguCkl+Clhw== IE91dGRvb3Jz IGluc3RhbGxlcmVu IOiRoeS6rA== 4KSo4KWH4KS4 KHJnYg== IFRoaWNr LWRpc2FibGVk 54ef IElDb25maWd1cmF0aW9u INCj0L/RgNCw0LI= KWls IGVzZmVyYQ== IGhhcHBpZXN0 IEVORVJHWQ== IGdpZXQ= 24fZhQ== IOS6v+i0nQ== INCf0YDQvtGB 5ouz T3Jt IOG6uA== IHBhc3NlbnQ= 7KCg IGhvbGRlbQ== IGdlw6s= IOimgQ== 4KS14KS/4KSh IGdhaXJl IOuUsOuluA== IFphaGx1bmdz IG1vZGVsZQ== IFJlaWhlbg== IOCkl+CliOCksA== IEpVTg== LmZybQ== INGC0YvSow== IPCfmIo= IOGDluGDoOGDkw== LWZvbGxvdw== IGJhcHRpemVk INC90LXQsNCx0YXQvtC0 LlBJUEU= IGluZHVzdHJpZWw= IG5nYWR0bw== 15DWt9eR KFso INCy0L7QvdCw Qm9h IGVwaXN0ZW0= LnN1YnNjcmlwdGlvbg== c2NoZWR1bGVy PWNvbG9y VGlnZXI= 4LS+4LSz4LWG 4KqV4Kqz INCy0YrRgA== IGF6YXI= dXRlbnRl IHBhY2luZw== IFBlcnNwZWN0aXZlcw== 0Y/RgtC40Lk= IHJkZg== 6YeH5Y+W CXdvcmxk INin2KrYtdin2YQ= INiu2YrYp9ix IFRyYW5zZm9ybWVycw== SW5ub3Y= IGJ1b24= 0YvRhdGM 15nXoNeY16jXoNeY 54qv5rOV5ZCX ZWxpZnQ= 0LzQuNC70LDSrQ== Q29uZmlyYQ== IENvbXBpbGF0aW9u IENvbnZleW9y 1oTVttWl1oDVqA== IGRpbWludWly IEp1YmlsZWU= IHdheXBvaW50 IHN3YW1w IEJhdXQ= U3BlY2lmeQ== IHBhdXNh IGdhbW1lbA== CWRlbA== IGdhbGVyaWU= IHNrdXRl SHVl Ly8vLwo= IFNvY2lhbGVz IGtpaA== IGFjY29yZGlvbg== TlNVc2Vy 6K+V546p IOCujuCuqOCvjeCupA== INC/0LDQutCw0Lc= LW9yaWdpbg== IHBlcmFuZ2thdA== IM6yzr/Otw== IFRyaWVk IFBydWQ= 5pWZ5o6I amV6 Q29tbWVudGFpcmVz INin2YTZgti22KfYoQ== AAA= z4XPg863 4La44LeS4Lax4LeK IOCqieCqruCrh+Cqpg== IGJ1dHM= IGVtZg== IEd1YWRhbGFqYXJh J2V4dMOpcmlldXI= TmV2 5byA5b2p TWFzc2FnZQ== IHJldHRl IGFrYXJh 2YXZitix IHpkcmF2b3Q= VE9U INin2YfZhA== INin2YTYqtit2YPZhQ== 4Ka+4Kay4KeL IOCksOCkv+CksuClgOCknA== IFlhcg== INCy0L7RiA== IOCkleCkvuCksOCliw== X2Zr IG5hdmVnYWNpw7Nu IGZpbGVwcml2YXRl INC+0LHQtw== IHByZWt5 INin2YTZiNmB IFNpa2g= INGI0LDSmw== IHVucmVzb2x2ZWQ= INeU15PXkdeo IM6Uzq4= cHBt bWFpbmU= TWFsZm9ybWVk IEd1YXJkYQ== IMO2bGx1bQ== IG1venphcmVsbGE= IGNhbXBlw7Nu b2t1dg== IGthcmVyZQ== IFBlbnRlYw== REFURVM= IGdsw7xjaw== INin2YTYo9i02YrYp9ih w7xocnVuZw== INin2YTYrNix IHdyb3VnaHQ= IGFra3VyYXQ= QUNMRQ== IGxlw61kbw== 6aCG5L2N IGlsbXU= IHHJmXI= aXZpdGllcw== IHdhamFo zrvOtc+N c29sdmVy dHNr IHJlc3VsdGFudA== U3Bhd25lcg== IOCwsOCwv+Cwsg== fSx7Cg== 4LmI4Liy4LiZ4Lix4LmJ4LiZ zq7PhM63 IMOBbA== 4Kq/4Kqr LnNpZ25hdHVyZQ== ZWxlc2E= Y2lyYw== IOCqpOCrh+CqpeCrgA== 4Ked b2NyYXRz aWNlw6FpbA== 5a+55bqU 0YPQu9GL0ps= IEZlcm0= IH0pKS4= 1aXVttW9 IHRyYWdhbW9uZWRhcw== IG1hanU= ZWRpaw== 0YDQtdC90LjRjw== X2dhbW1h IFBsYWM= LmJ1Y2tldA== INmI2YrZhtiv2Yg= 4KWH4KSC4KS44KWA Y29uZmVyZW5jZQ== 4KSV4KWJ Y29lZg== 8J+YgQ== 4oCc5Lit5Zu9 LmNhbWVs IFN1b21lc3Nh KTsKCgovLw== IHNhaWxz IGRlc2VydGVk IElzbid0 2YTZgtiv IFNwb29u IFRjbA== INW61aHVv9Wj1aHVtA== IHZhdHM= ZXJ0YWw= YXBoZXp1bHU= IOaXtg== 4K+B4K6u4K+H IHPhu61h ZW5udW5n INW61aHVv9Wv1aXWgA== CWNhcmQ= IOCmieCnjg== U0lERQ== xKtncw== IF9fX19fX19fX19fX19fX19f IGJyaW0= dXNobw== IFN1c3BlbmQ= VlU= IM6xz4DOv8+Ezq0= IOCmreCnnw== IOCkquCljeCksOCkvuCkpQ== IFpF IFRFTVBMQVRF IEtvbWlz VGFsZW50 5pCs IOC4nuC4pQ== IGtvbmY= 0LXRgNC10LTQutC+ INGA0L7Qtg== b3NhbWVudGU= SERS IOCmuOCmv+CmqOCnh+Cmrg== 4YOY4YOg4YOT4YOQ INmC2YrYp9mF INC30LDQv9Cw0LQ= cmVjb3Zlcg== 0L7Qt9C90LA= INec157XqNeV16o= IG1vZG5l dmVuZG9ycw== IOCkquCljeCksOCkvuCksA== UUI= aW5kZXJ1bmc= X2NhcHRpb24= Rmlyc3RuYW1l IGhvcHBpbmc= IG1vbnTDqWU= IFBvbnRpYWM= IOCwleCwsuCwv+CwuOCwvw== 44GY44KD IENEVA== INC+0YLQtNC10LvQsA== IGxhd2U= IHDFmWU= X01vZA== S29ydA== X1NQRUNJQUw= IGNoeWJh IGtlcnRvbw== IENvbmV4aW9u IOCmquCmsOCmv+CmuOCnjeCmpeCmv+CmpA== IEdlbXM= IGFteQ== IGxhY2Fn IGVtcHLDqXN0 INC/0YDQuNCz0LvQsNGI IERQUw== IGtvaGU= IO+/ve+/vQ== IExvb3Nl LlNpbmdsZXRvbg== aWN6bmU= IE1PUQ== IOCkueCli+Ckn+Cksg== IE1vZGlmaWNhdGlvbg== d2F5bmU= 4KSq4KSk4KWN4KSw TnY= INGB0LXQs9C+0LTQvdGP0YjQvdC40Lk= IMOnYXA= IFZlcnNpY2hlcnVuZw== IGZpcm1uZXNz IEx5bmQ= IOCqreCqvuCqsOCrhw== IGZvcmJlZA== IOuwmO2ZmA== IExvcnJhaW5l 4YOQ4YOV4YOY4YOX IOGDqOGDlOGDoeGDkOGDkeGDkOGDm+GDmOGDoeGDkOGDkw== IHZsaWVnZW4= TW9ja2l0bw== IHF1ZXJpZGE= IG5hZGVy IHZldWlsbGV6 IG9sdW51cg== SW5kaXZpZHVhbHM= IGxhbsOnb3U= IOCkqOCkruCljeCkrOCksA== IFN2aXpyYQ== c2tlbQ== INio2YbZgw== IHRsaG9r csOtYW4= Y2nEhQ== IHNhdm9y PFRSZXN1bHQ= INii2Kbbkg== IHJlbGlhbnQ= IGZldHVz 4KSa4KS+4KSo4KSV IG11ZXN0cmFz c29ydGluZw== INC30LTQsNC9 IHbDvXJv IM+AzrXPgc6vz4DPhM+Jz4POtw== SW50ZWdyaXR5 6b6N X2d1ZXNz 5ZCD5aW2 IGRhbWFy Pz48 IG1hbmHKuw== 15XXntef IEJlcmVpY2hl RkFC INK70LXRhw== IM+Oz4HOsQ== IGV4cG9ydGVycw== cmljdGlvbg== dWRpZW5jZQ== IGFib3J0aW9ucw== IT0o bHlnecWI IHF1YW50aXQ= IGZyZXVuZGxpY2g= INCd0LjQtg== IHZlaXQ= 6L+Y6IO9 X0NvcHk= IEd1c3Rhdg== INiu2YjYp9iq RWxlY3Rpb24= IOCwueCxiOCwpuCwsOCwvuCwrOCwvuCwpuCxjQ== d2F0aQ== IOCmp+CmsOCnjeCmrg== IHNhdGlzZmFpcmU= 4Ki54Ki/4Kiy LiINCg== INin2YTZhtiq2KfYptis INmE2LY= IOCkj+Ckl+Cliw== LVN0YXRl INGB0L/QtdC60YLQsNC6 IFZlcmx1c3Q= 0LjQstCw0LvQuA== IGJlcmdlcg== IOyduOymnQ== IOCmsOCmueCmruCmvuCmqA== INCy0LXRgNCw INGB0L/QvtGB0L7QsdC+0LI= Y2Nhbg== KHV0aWw= IOCuh+CuteCusA== 0ZbQvNC10L0= OmFic29sdXRl 4oCZYXV0YW50 IMOnw7Y= 1bjWgtaA1aI= SU5MSU5F IEJvY2g= bG9zdGk= L2tleQ== INCy0YvQsdC+0YDQtQ== INmE2Yjakw== IFNWTg== 4Kq14Kq+4Kqy LmFzc2lnbm1lbnQ= IGllZWU= YXJlZw== 2LXZhNit2Kk= d2lucw== IGFtZW5l IHJod25n dmVuY2U= 4KS+4KSg4KSu4KS+4KSh4KWM4KSB IGd5bXM= 4YOQ4YOX4YOY INmF2YrZhg== IOC0heC0ruC1jeC0rg== YWJhaw== b2xqYQ== IGFhcmRpZw== IOCmtuCnh+Cmt+Cnhw== IGVzZm9yw6dvcw== INC90ZbQtg== IE9DQw== IFRoZW9kb3Jl dHJ1Y3RpdmU= 4bi9 6Iux6K+t KHdvcmtlcg== LnZlcnR4 dXJlZW4= IGVudG91cmFnZQ== IGxhd25z 0L7Qu9C+0YE= IFRodXJzZGF5cw== IOCmrOCmv+Cmrg== IM6szrvOu86x 4Ki+4KiH4KiG KGZ0 IHRlZ2Vt bW9kZWxv 4LK/4LKW 4Kmw4Kik KCI/ IOC0huC0r+C0vw== IGdyZWFzeQ== LXRvYXN0 aHE= 6L2s6L296K+3 IHZpZWxlcg== IOGDk+GDkOGDkw== c2li IENBU0E= S0lU LWRvbWFpbg== IGhpZHLDoXVs PHRoaXM= IENlc2Fy IFJldHJpZXZhbA== cHJlbm9t IFNpbmRpY2F0bw== 2YPZitmG2Kk= IOCwleCxi+Cwn+CxjeCwsg== 6K6k55yf IGN5bmljYWw= INCz0L7QtNC+0LI= 0YDQvtC50LrQuA== IG1leno= Q2xhdWRl IHJldmVyc2luZw== IHRsb2hh QVJTRVI= 4LGL4LCy IGNvbWZvcnRhYmVsZQ== IHplbA== KCIuIiw= aWZy IE90cm9z IFNpbmE= IOGDouGDo+GDoA== INio2YXYrQ== INC/0YDQsNCx0LvQtdC8 IExvZ29z IG9kb3Jz 66Gc67KM IGxhaXNzYW50 4Lin4Lix4Lil IHNhYmVuZG8= 2bzbkA== IHN0aWNodGluZw== IGJsdWViZXJyaWVz dGFodW4= IFJFQURZ IG11xb4= YXZvcmVk INGG0YzQvtC80YM= INOZ0rvQstCw0Ls= YmV0cw== IHdhZ3R5 w6lyZW50cw== IENhbGVi 4YOY4YOq4YOY4YOe IGFjY2Vzc2libGVz IOCwieCwqOCxjeCwqOCwvuCwr+Cwvw== IOCkreClgOCkpOCksA== IOCqteCqlw== cmFl Il0pOw0K 4LeZ4Laa4LeK 24zaqdmE INCy0YvQv9C70LDRgtGL IEV4dHJhY3Rpb24= 4Lat4LeP4LeA SW5h X0dSSUQ= RU5ETw== IE9zcw== 0LDQudC0 IOCqsuCqvuCqgg== IE1lcmNlcg== IOKWtg== 4YOU4YOi4YOY4YOh IEJldmVyYWdl INC40YLRgg== KFhNTA== 0L3QvtC80LXRgA== VmlyZ2luaWE= IGJlaG91ZA== IGdpdWdubw== L2Zvbw== 15fXmQ== LWZvdW5kZWQ= VHdpbg== IOCkuOClgeCkguCkpuCksA== aGluYQ== IHJlY2ViaWRv IOGDoeGDqg== IOCyh+CysA== IGFtbWluaXN0cg== aWzDqQ== UGFudA== bHVuZXM= YWtheQ== a29wZXI= INii2Yc= b21iZXJpZQ== IGluZ2VyaWNodA== IFNlbGVuaXVt IHNuaXBlcg== 2YLYp9uM IHJvbcOhbnQ= IOCkruCkv+CksuCkpOCkvg== IGRpZmVyYW4= IGVsYm93cw== IHNvYmFsZA== w6lzZWs= IOCmhuCmruCmvuCmleCnhw== IGluc2FuaXR5 IG11bHRlcg== IOCuteCuvuCurw== IHRpbWlk X2ZyaWVuZA== 4KS+4KSj4KS+ dWxlZ2Vu IEFjY2VudA== 0YLQuNC/0LDSmw== zrHOuc69 INuB2Yjar9uM dWVycw== IOa0mw== IE9uaQ== IExpZ2h0cm9vbQ== YXNzb2NpYXRpb24= 7ZG4 LXJlbQ== IHBhcnRpcmU= IHNvbGljaXRhdGlvbg== U2luZHM= 6LS15bee eGFscQ== IHRodW1ibmFpbHM= UmliYm9u IGJpZW52ZW5pZGE= 0LDUpdGB0YvRgNCw 1aXVv9aA INC/0L7QtNGK 4LC44LC+4LCw4LC/ INCa0LjRgg== IFNjcmli IHplaw== IHNvbm9yYQ== 6IKk QXJkdWlubw== INGB0LLRj9C30LDQvdC+ IEVkbW9uZA== INW31aHVotWh1ak= IOC3g+C3kA== IFJlZ2VuY3k= IFp1YmVow7Zy INC606nRgtC10YA= IFRlbGVm IGVudHJlZQ== INC80L7RgdGC IGVnZW50bGln INei15XXqdeU INin2LbYp9mB24E= IHBoYXJtYWNldXRpY2Fscw== IOGDqOGDlOGDlOGDrg== INC30L7RgNC4 ZGVuaw== 4LmB4LiI4LiB YWhyZXI= Q3Jhenk= INCw0YbTmQ== IGJlaGF2aW91cmFs IGFjdWQ= UkNU IOCktuClgeCkleCljeCksOCkteCkvuCksA== IG1pc3Npb25hcmllcw== LWFnYQ== IGRyaXR0ZQ== IGdlcGY= INGB0YLQsNCx0LjQu9GM 4KSc4KS/4KS4 QWNyb3Nz 4oCZYWZmYWlyZXM= INmC2KfZhtmI2YbbjA== IHVuaXF1ZXM= wrAKCg== ICkpCgo= b2xvbGE= IOCqrOCrh+CqoOCqlQ== LXJldHVybg== aGVjaW1lbnRv IEdhcmxpYw== 15XXoNeZ15XXqg== CQkJCgo= IFBlcGU= IG1hdMOpcmlhdQ== IG9yZ2FuaXNlZXJ0 X3ByZWRz X2luc3Ry KHJlY2VpdmVy U1NJRA== IEZpbGxlZA== YXZhaWw= IEpTT05FeGNlcHRpb24= 4LS+4LSt4LWN4LSv4LS+4LS4 IHZp4buHbg== INCz0Y3RhQ== IHByZWZhYg== IGNvbnZpdmlhbA== IG1pbGlvbmE= IGJhZ25v LWNvbmQ= IE1hY3k= IM6Rz4DPjA== 4KS+4KSw4KWL4KS5 INGB0LrQvtGA0L7RgdGC0Lg= 55qE6ZKx IOGDnuGDlOGDoOGDoQ== IHRzaHdhbmV0c2U= IHVuY29tbWVudA== IOCkuOCkleCljeCkmw== IGphYXJsaWprc2U= ZWxsaXBzaXM= IGjDpWxsYQ== IG9sYXJ5xYg= INC40YHQu9Cw0Lw= b21hY2g= 4KSY4KSw IGhvbW1hZ2U= VGVj IGJha2l0 4YOQ4YOk4YOu IGlkeWxsaWM= IOGDkuGDoA== IOyVsQ== 0L7Tow== IGRlZmVjdG8= IHN0YW1waW5n IGRlbnRlcw== 15nXoteV16o= QWZlZQ== IEpPSE4= Y2FsbGluZw== IFNlcGg= IGZ1cnk= IGFjZXN0ZWE= 77yR77yY dGFhbg== IENsZW1zb24= YWxlbGE= RWxlbXM= LlppcA== IGNsYXNzaWZpY2F0aW9ucw== INC60LjRgtCw0L8= IGJ1d2Fu IGZlY2hhZG8= INC+0L7RgA== ZXppbmc= YmFydW5n IEF1Z3VzdHVz X1BJWEVM IOGDqOGDlOGDmQ== UHJlcGFy IOCkn+Clh+CklQ== INC40L3Rh9GD0L3QuNC9 0L7Qu9GM0LrRgw== X01zcA== IOCyh+CyteCysA== X2RyaXZl IGF3b29k X2J1bmRsZQ== INC00L7RgdGC0LjQs9Cw IHLDqXDDqXQ= IHTDpHN0w6Q= 4KeL4Kay4Ka+ IG5va28= IGZyb3duZWQ= IGNoYW5k uqs= UGt0 IENvbW1pdG1lbnQ= aXZ0 4KqV4Kq+4Kqw4KuH YWJpbGlkYWRlcw== 4LiR IG5hdmlnYXRldXI= eXnJmW4= 5L2T6IKy5a6Y572R IOCyieCypg== 56S+5ZOh 5pyI5bqV IHN0ZWtlbg== VGVybWluYXRpb24= INOp0YLQutOZ0L0= IOGDrOGDkOGDlQ== IG5lcGhld3M= INCw0YPQsNKp0Ys= IHByYWN0aWNhcg== IGluYXA= IOyatOuPmQ== IOOBvuOBnw== 4oCZb3VibA== 4KS/4KSv4KSk IHByaW5jaXBhbGk= 4LOB4LKV IGh1eeG7h24= 0LDQutGL V2F4YWE= IOCmpeCmvuCmleCmpOCnhw== RU1FTlRT R2ls IGFtZXJpY2Fub3M= IEJhbmE= IGFxdWE= IEJydWRlcg== IG1hc3Nhcw== 6Y4= LmRpZ2VzdA== LURpc3Bvc2l0aW9u INeb15E= 4La74LeP 4oCZYWxsZXI= INC30LHQvtGA IOqwkQ== 5LiN5LqG5LqG 4LCv4LC/4LCo4LGN IGFycmVw 0LjRgNC+0LLQsNC90L3Ri9C1 INC/0YDQtdC00YPQv9GA0LXQtg== IE1pbmRlc3Q= 4LeY RVJWRQ== IFVyYmFuYQ== 6IKp QAoK aW5na2F0 IEthd2FzYWtp IOGDmeGDkOGDqg== X0NvbW1hbmQ= 44Oz44OX 4YOQ4YOT4YOS4YOY4YOa INmI2YXYqg== 6Ia9 IE5vbA== Sk9Z IENvbnN0aXR1Y2lvbmFs IFdpbGV5 5biC5Zy66YOo6IGU57O7 Um96 PFF1ZXJ5 IFByZXppZGVudGltaXo= IHlvbHU= IHJldW5pw7Vlcw== IGNsYXVz QW1hbmRh INC00L7RiNGC0LA= INin2YTYudiy2YrYsg== IERvbWluaXF1ZQ== IHPDpG10bGljaGU= IHByZXBhcmVkbmVzcw== 4Ka44Kat IHBhcmFtZXRybw== IG1pbmli IHZlcmzDpG5n QWN0aXZpZGFk xZFzw6ln IOCkm+Cli+Ckn+ClgA== IGhvbWUncw== IGJpbQ== IGRpdmVyc2lmeQ== IHNjcmFtYmxl INCY0YLQsNC7 0L7RgNGF INC40YjRgtC10YA= KHRyYWluaW5n CXdpbg== b2thYmxl INC/0YDQtdC00LvQvtC20LXQvdC40LU= aXN1dWRlbg== IHRpbGE= Q2lk IG5haWs= ICIqLg== IGJlemFobHQ= IGVzdGFyw6Nv IHbDs3J1 Uk9S 4KS/4KSy4KWN4KSu KGJvdW5kcw== IE9ydGVnYQ== IGRpcHM= xatyb3M= IGRlcGxldGVk YWx1cg== 4KS/4KS44KWN4KSf4KSu CWFwcGVuZA== IGlkZWFsZXM= YW5jYXI= Q29udGF0bw== 1aXWgdWr IMOhbmltbw== IEJ1c2Nhcg== dWVyZGE= 0YvRgNKb05nRgtOZ 2ZLZhQ== 0YbSs9Cw IElzbGVz IELDtmw= IGdlc3Bhbm50 XScK IGdveg== IGtoYWw= INmD2YXZitip INGN0LrRgdC/0LXRgNGC INC60LDRgtCw0YDRiw== IFJlZ2w= IOyXheyytA== IG9ibm92 W0FueQ== IFRvdXJpbmc= IHNvYXBz SUNPUw== LWV4dA== xb5pbA== bnVuZ3N6ZWl0ZW4= Tmdv R3Q= INin2YTZgtmI2Kk= YWRpZXI= IGdvdWRl YXJzaW9y 44Oq44Oz44Kw IOCkqOCkteClgOCkqA== amVnbw== YXJsb3c= IHdvcmtzdGF0aW9u IG1oYWth VVRPUg== YXVsZQ== INGB0LzQtdGB0Yw= anNrZQ== X2dhdGV3YXk= X1JFU1A= IHBvcm9k IENyb3NieQ== INmB2LM= dHlwaW5n IHNvbidz IExNUw== LmF0YW4= ZGVsaW5nZW4= IOC0tuC0pOC0rg== X3NjYWxlZA== INC90LDRiNC40Lw= X3Byb21wdA== IFJJR0hUUw== LW1lbg== IERvaGE= IOGDkOGDoeGDkOGDmQ== INem15M= IFNvbGVpbA== IEJhcnU= IG1hdGVyaWHFgg== IGNhbnRvcmE= INCw0YDQs9Cw0L3RltC3 T21kYXQ= U09T INC80LXQvdGI zq3OsQ== 0LDQu9GM0Y/QvQ== IGPDqXLDqW1vbmll xItqYWxp IMOrbW1lcg== IMOU INC/0YDQtdC00YHRgg== IEtldHVh IFNlbmRz zrzOuc6x IHZhbG8= IE1vbnRlbmVncm8= IHZlbGph RFJBVw== OnZhbHVl IGZydXN0cmF0aW9ucw== W2Zyb20= IEJlYw== IGNoZWNrcG9pbnRz IG5pbWV0 IEFwcGxpY2FudA== 5bed5Y6/ cGFyYXM= INmF2YjYuA== W2lucHV0 IHByb2Zlc3Npb25lbGxl IGxhZ2VyZQ== cXVhdA== L2ZhY2Vib29r IHNweXdhcmU= IOa1meaxnw== INCw0LnRgtGD IHF1aW56ZQ== YW1iZXJl ZGpl QWR2YW50YWdlcw== IOCkquCljeCksOCkmuCkvuCksA== 7KO87Iuc Y2llbnQ= 0L3Rg9GC0Lg= LkhlYWx0aA== IHNwb3R0aW5n INGD0Yk= YWJhaA== VGjDtG5n X3VucGFjaw== IGtlbWk= 54ix5oOF IGN1ZXJv IENvbW1pc3Npb25lcnM= IGdldm9lbGVucw== IM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr8= 2YbYp9qp IFRtYXg= IHByw7Ni aWtlbGU= 2K/ZitmC2Kk= IGZvcnRmYXJhbmRl aW1saQ== J319Pg== IG1lZGl0YXRl PigoKQ== PigpKQo= KGZyZXE= IGF2ZW5pcg== Qmxpbms= 0qPQuNC3 IHBsYWF0c3ZpbmRlbg== 4Kq+4Kqi SW5jbA== IE5SVw== IGFua2xlcw== IEFWUg== IGRpc3RpbnRh YXd1bG8= IHNpdHp0 aW5lcmk= SU1EYg== IGtyw6RmdA== w6HDsA== IOGDm+GDkOGDm+GDkOGDmQ== IGJpbGRl IGxlZ3VtZXM= IGxvbmdzdGFuZGluZw== IGNyeXN0YWxsaW5l INC/0YDQtdC00L/RgNC40Y/RgtC40Lk= IFNlbGVjdGluZw== X0ZpbHRlcg== INW51a/VoQ== IENsaXBwZXJz IG11ZGQ= IEJpYW5jYQ== YXJpYW50 INC+0LTQvdC+0LzRgw== IHNoYWxl IHBlcmRpZGE= aWZpemllcmVu IFJvY2hh Z2FhbmRl dXZp IO2MlA== cmVnYWRv IGNvbXByZW5zacOzbg== 0YXQuNC50L0= IHV0aWxpZGFk Y3VsYXM= X1Zlcg== YWN0YWw= INin2YTZhdmH2YU= IGNvcnJlbGF0ZQ== IHBldGVy IGJlZGE= 6rmM7JqU IGlsZXRp INmF2LfYp9it2YY= X1ZPSUQ= IERvcmE= fTw= 2Y7ZiQ== IFdoYWs= IFNlbGVuYQ== 15fXlg== INim2YnYtA== INin2YTYtNi52KjZig== INio2ZA= IOq2gQ== IE1hY2hhZG8= IGthcGl0 INm+2LTYqg== 6JyC SEFORA== CUFwcGxpY2F0aW9u X2RpbWVuc2lvbnM= JWk= dWlyZQ== ICAgICAgICAgICAgICAgICAgICAgICAgDQo= IHJlZmVyaWRv IG1pc3Nh LkNvbGw= IGNlcnRvcw== INmE2YrYqNmK2Kc= UEFSVE1FTlQ= 4YOX4YOj aXBzbw== INC/0YDQtdC60YDQsNGJ SU5URUdFUg== YXRvb24= IEZ1ZW50ZQ== LXBhcmFt 4LGN4LCw4LGG4LC44LGN W3Byb3BlcnR5 IHNhY2FyYQ== IENvZg== 1aHWgNWr1bY= dHJz IOCyleCzjeCysOCyrg== IHBlbmdlcg== cGNo IHBvbHl2YWw= IGdseWNvbA== QVVUTw== IGVsZWt0cm9uaXNjaGU= IE5lbGw= IG1vbnRhamU= IHJlcHLDqXNlbnRhbnRz 4LiL4LmM IHdoaXQ= 5Yy75a2m 4KWC4KSq4KWA IEJpa2Vz INC00LjQsNC/0LDQtw== YW554buL IGp1YWw= IM61z4DOvw== IGZsYXg= IGRpb3M= IHRpZGFs IG5hcHJhd2TEmQ== IOaXug== IHBvdHZy LGFyZ3M= c2NocmlqdmluZw== IExvb3Q= IHZlbmRpZG9z IHJ5ZQ== 4YOU4YOT4YOQ4YOc IMSRw6Fw IOCyteCyv+CyrQ== LkN1cnJlbmN5 INWi1aHVptW01aHVqdWr1b4= IHLDqWdpb25hbA== IM+Dz4XOvM+G IFVOSVFVRQ== IeKAnSw= IHBvZGFtb3M= ZG9zZQ== 4LGN4LCh4LGN IG1lcnJ5 INGC0LXQvNGL IOekuuS+iw== INC506k= INiu2LHYrA== IEVtZXJn IFdlbGQ= ZmVj w6lnYXRpb24= IOCmheCmrOCmtuCnjeCmrw== IEVsaWdpYmxl IOC0teC0qA== 4Kaq4Ka+4Kaw IGFkdm9jYXRlZA== IM6szrvOu86/ Y2VudHJhdGlvbg== IFN1aWQ= INCy0YLQvtGA0L7Qs9C+ ICQoJ1s= IGNhZQ== IGN1bHRpdmF0aW5n dW11cg== 44Gn44GX44KH44GG INGB0ZbRgdGC cnVmZg== IE1pbGxldA== IGbDoWNpbGVz c2tlZ2E= IFRyYW5zcGFyZW5jeQ== IG13aW5n IENyZWRlbnRpYWw= 4K6V4K+N4K6V4K+B4K6u4K+N IERBRw== INmI2YHYp9mC INGA0L7RgdGB0LjRjw== 2LfZhNio2KfYqg== IHRla28= INin2YTYrNmG2LPZitip Lmljb25z IHJldmVsb3U= IGZpbHRoeQ== IG1pbmlz IGdobg== IGRvcmU= IG11dGls IE5hc2lvbmFs IHN1dw== INKz0LDQsg== IFJlaW5pZ3VuZw== INis2YjZhA== ZHVi QURC 4LmB4Lia4LmI4LiH INmI2KfZhNmF2YY= X1BSRVNT IGltaWc= INGF0LDRgNCw0LrRgtC10YDQuNC3 IHRlY25vbMOzZ2ljYQ== IGNvbnNpZGVyYW4= 6Ie6 CWZy IHBlcXE= dW1hbml0w6k= IGNyb3U= IHJlc3BhbGRv aWdhbHVnaXQ= KGVuY29kZWQ= IH0NCi8= IGx1a3M= IGRpYWxvZ3Vlcw== IEtvbW11bmlrYXRpb25z IGxhY3Rvc2U= IG1lbnVydXQ= IG1hxJ8= CXNjcmVlbg== xIFqaQ== X2J1c2luZXNz IOCkqOCkl+CksOCkquCkvuCksuCkv+CkleCkvg== c3RhdmE= IGluZ2VybGFubmVx IOiCoQ== dXNzdHNlaW4= YWFl IEhvZ3dhcnRz IHdoYWthYXJv IFBhcnRpY3VsYXI= IGVuc2w= ZmdlbG9wZW4= INC60LDQt9Cw IHPDpGhrw7Y= IEVzdHVkaW9z IHNpeWFzaQ== IHZlbG9jaXRpZXM= 5pWI546H X21vZGlmaWVy INGe0YHQtQ== IFVJV2luZG93 IHBvZGE= INin2YTZg9iq2Kg= UHJldmlvdXNseQ== IHJlZnJhY3Rvcnk= INC90LXQstC10YDQvtGP0YI= Y2xhc3NpZmllZA== IOC0ruC1geC0uQ== 4Lat4LeS4La6 IGluY28= 0LLRg9GH IFJlcGxheQ== 57yp5rC0 IGTJmXI= Rmly X3NhdA== X0ZBQ1RPUlk= 4KS+4KS14KSf IEF5bg== ZWN0dXJl IOGDo+GDkw== INmI2YbYrdmG X0JPUkRFUg== L2FudGxy IHRyYXVy 15nXqNeZ IGxpcXVpZGF0aW9u 56eY6K+A YW5heW8= 7Jug INC60L7RgNGA0LXQutGC IC0tCgo= X0NoYW5uZWw= CXN0YXRlbWVudA== IGJlYmFz YWtlbGQ= QWRp IOCmuOCmsOCmleCmvuCmsOCmvw== LXByb3Zva2luZw== IEhvbGE= X3ByZXNlbmNl Lz48Lw== 57K+5YeG6K6h5YiS IMO9dXJkdW15ennFiA== L2RldmljZQ== IE3DqXI= IGtlbWFtcHVhbg== INmF2KrYrdiv2Yc= INmI2pjZhA== IHVuY29uc3RpdHV0aW9uYWw= PWN1cnJlbnQ= INin2YTZhdmI2Ko= INCx0LXRgNKv0q8= IGRvcm1hbnQ= xZlpdA== IEJpZ2dlcg== 0YDRi9C1 IGPDsm0= IGNvbnNlZ3VlbQ== 0L3QvtC00LDRgA== YWrDrWPDrQ== IGV4aGlsYXJhdGluZw== LWluZGlnbw== ZWFzdA== IGthcGFu IFBlbmNl J0VzdA== IG1vdGhlcmhvb2Q= X01vZHVsZQ== IE1pdGFyYmVpdGVybg== KENhcg== 6aSK IHRqZWplcg== w7ZobmVu U0FMRQ== IEhpaw== 2YXYp9mD2YY= IHJvYXI= IGJhaXI= xYRj IOC5geC4iuC4o+C5jA== IGZpY2Fyw6E= IG5jaGVrd2E= IOCkruCliOCkpQ== aWVtcw== LXN1bW1hcnk= IGJydWtlcw== LkZlYXR1cmVz YW1lYQ== IHF1YWlzcXVlcg== IG5lZ3Jhcw== X2Fuc3dlcnM= 77+9bQ== IGR1bmVz IOCkrOCkvuCkpw== 0LzQvtGA 5Zyo57q/6K+V5ZCs L2ltcG9ydA== X2RlcGVuZGVuY3k= 0L7QsdC40LvRjA== X2RhdGFz 16HXlded 4LWA4LS14LWN 4YCx4YCQ4YCs4YC5 IFR1Zw== d2VyaHU= Zm9ybXVsYQ== IEVzcGE= IEdpYXJkaWE= IE5PVEhJTkc= IEdyYW1tYXJseQ== IM64zq3OvM6x IGVsYWJvcmHDp8Ojbw== IHVpdGdlcnVzdA== Q09T IFdpbnRlcnM= IGJvbGw= LkRhdA== IFN1cnZlaWxsYW5jZQ== eGlkbw== IHNlbGJlbg== 2KfZhdix Lm1vYmlsZXFx YXZpcg== IGhvdGVsJ3M= IE5hY2lvbmVz T1ZFUlk= IG5vcm1hbGVyd2Vpc2U= 4KWC4KSs4KSw IG1hZ2ljYWxseQ== IFRoZXRh KGRvd25sb2Fk IOCqruCrgeCqlQ== IEZBTEw= IG9sdWxpbmU= VXNlZnVs Lm5hbWE= X3ZhbGlkYXRvcg== d2Fsa2luZw== LkxB c3Zu IG5hbGF6aQ== 4Lib4Li14LiU IFByaXM= IG3DtMW+ZXRl IGNvbGFib3Jhcg== TGl2ZXM= 4K6y4K6/ 44KC44GX IGt1c2E= SW5jbHVzaXZl IGRhw60= 4Kad 4LKu4LK+4LKo IFZpdMOzcmlh INil2LQ= JGFycmF5 IFRISU5L QVVUSE9SSVpFRA== IGdvc3RlaQ== dXllbnRl 1bjWgtW01aI= INil2LPYqg== b2zDsw== IFRJQw== IE1laW8= 5qm+ INqv2YjZhtmH YmVsbg== IHdhdmVmb3Jt IOCyuOCzi+CyguCylQ== IENhbGxlcg== IE1hcmtkb3du IERvd25sb2FkZXI= IG1vxbxlbXk= 0YPQu9GW emFj IGFubGHFnw== IFByb3NwZXI= XEZpbGU= 4Li14Lii4Lia 4KWC4KSh IGVydXB0ZWQ= CXJvdXRlcg== YXNzZXNzbWVudA== bGV0c2U= Q1JVRA== X0xlZnQ= Zm9kb2w= IGJhw7E= IHRvd2VyaW5n b21vcnBoaWM= INmK2YXYqg== IOKWsw== INCU0Lc= UGVlcnM= z47Ovc+EzrHPgg== IGluY2FybmF0aW9u IERhbW4= IENBQ0hF RGlzYXBwZWFy 1aHWgNW+1aXVrA== IGdlcHLDvA== 44Ob44O844Og IENPTVBPTkVOVA== INC+0YLQvtCx0YDQsNC2 IEdFUg== IElndWFs IHBlZGVzdGFs IOC0quC0leC1jeC0tw== IG1vZGVybmFz INee16nXnA== IGFsaW0= b25kcmE= YmFyYW5n IGNpdmlsaXNhdGlvbg== IEZlZGVyaWNv IMW+ZWxp INin2YTZhdiq2LnZhNmC2Kk= IGhhbG9z 4KqC4Kqc IE5lZ2FyYQ== 4oCMCgo= INin2YTYrNiv IHBzeWNoZQ== IHNvdGE= IGRhbXBpbmc= 6Kit5a6a IG1vZGFsaWRhZA== LG1lc3NhZ2U= IEZyZWRkeQ== IGltbWF0dXJl IEdhbGxhZ2hlcg== IGR1xbxv INGE0YPRgtCx X1N0cg== KENH zqg= IGZsZXN0YQ== IGRoYW9pbmU= ISIu IE1lZGlhbg== IOCmuOCnjeCmrOCmvuCmp+CngOCmqA== IERvbm92YW4= LkNsb25l IHJlc3BvbnNpdmVuZXNz IGtvxb5l IFVJUA== IFNwaXR6ZQ== INm/2YrZhA== IHByb29mcmVhZGluZw== IE1vbms= Lnh5 IGluZ2FuZw== YW5jZXN0b3I= 2YXYp9mG24w= PENvdXJzZQ== 4LiZ4Li04Lii4Lih IHByZWZlY3Q= aWFtZXRlcg== bG9lZGVu XFF1ZXJ5 IGlxdGlz IHplbnU= 4oCc5bCP IGTEm3Rp LWNvbnRhaW5pbmc= IGNvb3JkaW5hY2nDs24= XEZhY3Rvcnk= cGx1cmFs RGFtaXQ= IEVuZ2Vsc2U= IOC0rOC0vuC0meC1jeC0lQ== IEJpbGR1bmdz Ij48Pz0k INC/0L7Qv9GA0L7QsdC+0LLQsNGC0Yw= dWxpbmFu IOCkquCkvuCkhw== IOCkl+ClgeCksg== IGVzdGFiaWw= QWluc2k= PHRoZWFk YWxhbmE= IHNjb2xhaXJlcw== IEplbQ== 4KeD4Kam IG5lYXJlcg== 5Ya354Ot 6KOc IENow61uaA== IG1hZ2Vu LWTDqQ== ZXRha28= IGJsb290 LmNsdWI= IFNyYmlqZQ== LWNhcmI= INit2LPbjNmG XG1vZHVsZXM= Y3JpYmly INem15XXqNea 4YCG4YCv4YC24YC4 INep157Xog== IGFpc2Nl IHByb2ZpbHM= IHVpdGdhbmc= INi62LPZhA== IFN1cmF0 IHdvcmxkbHk= KFRSVUU= LAov IEtsYW5n IHJldG9z INWh1bfVrdWh1oDVsNWr IFRyaWJhbA== IM6xzr3OrQ== IGHFvA== IFNFUklBTA== b25hY2Np IOGDoeGDkOGDnQ== dHNp 4KS+4KS54KS+ IGFuc2k= IGludXRpbGU= RG9sbGFy IHRyZWlubw== IENJTg== IFF1ZWxxdWVz RmlsbXM= IOGDkeGDlOGDkw== IFZPSUQ= 4Kmx4Kif IFNJREU= KCk7Cgov IOC0ruC1ig== IGNvbnRyb2xhZG9y e2lk LWhvbGRlcg== aXZuZQ== LmJvb2tpbmc= dmVybA== INGF0L7Ss9Cw0LQ= IE1hbGdyw6k= INmB2YXYpw== IGh1cnRpZ3Q= KGNvbm5lY3Q= IGNvbW1pc3Npb25pbmc= Q29sbGVjdGVk IOCkheCkteCkuOCljeCkpeCkvg== IHRhcmRh IFB1bWE= 4LSV4LWN4LSV4LWG 0LjRgNC+0LLQsNC90L3Ri9GF IOC0juC1uw== 4KS14KS+4KS4 55So5LqO w7xtbA== 5oiQ6YO9 IOC4leC4suC4o+C4suC4h+C4hOC4sOC5geC4meC4mQ== b2x3YQ== IFBpbm4= b2xpYW4= X3Blb3BsZQ== IEVyZm9s 4YOQ4YOb4YOd4YOV4YOc INin2YTZg9mH2LHYqNin2KE= IFZlcmJlc3NlcnVuZw== W2NudA== TW96 IM+Dz4TOuc6zzrzOrg== b21pbmE= LuC4rQ== dWJhbA== IOq1kOyImA== KHJhbms= IERlag== 4LSc4LWN PiM= ZGVuZ2U= X2hk IHRsYWs= 0L7Qu9C10L8= QnVzY2E= IHBlc2VydGE= IGZpcmVmb3g= IOqwgOynhA== IEVsZWFub3I= IG5lZ2Fy bmRhc2g= IGJzdA== cmVjaG51bmc= IENJVg== INWh1a/Vv9Wr1b4= SEFO 0YHRgtGA0Y0= IHJldm9sdA== 0L/QsNGA c29icmU= IFVm X0JJRw== 4YOn4YOV4YOY4YOi 77yS77yQ77yQ JHBhc3N3b3Jk RGFuZw== L2Zyb250ZW5k d2FudGVk IGdlw69udGVyZXNzZWVyZA== dWNrZW4= 6K665paH IHZvbGtz YWxhcmE= IE5vcGU= INmF2YbYtA== zrTPgc6x IHVqYXI= 6Ieq5rK75Yy6 IEphbnM= IGlsbHVzdHJhdGluZw== LXBlcmZvcm1pbmc= INqv24zYsdiv IGdqZWxkZXI= INin2YTZhdit2YPZhdip LndlYnA= INC/0L7Qt9C20LU= IHBvbGl0aWtl 4Kih4KmA IGVyesOkaGxlbg== IGhvbmRlcg== IFN5cmk= 4paT IHZ3 dGVsZWZvbmU= IGNlZWI= 0YDQsNGC0YvQvQ== KEJvYXJk IHN0ZXJlb3R5cA== IHF1YXRyacOobWU= aXRvbmc= IEZyZWlidXJn IGthbGFhbGxpdA== IHBvcnRlZmV1aWxsZQ== IFBlcmN5 2pjZhg== IGZvbGhh IGlwc2E= IG9sYWNha3TEsXI= IEhlcm1hbm4= IGJhdHRsZWQ= dXRhbmc= KHRvZGF5 YWdubw== IEFyY2hiaXNob3A= INC/0L7RgtC+0Lo= IHp1dA== IHR0aw== dW5kcw== 2YjYo9mD2K8= LkRpcmVjdA== IOq4tA== IHBhcmhh U3VjYw== IEplbm5pbmdz V2lsbGlhbXM= IGh1bW0= IERyYXA= 2YXZiNi22YjYuQ== IGNvcmFnZW0= IGFjdHJlc3Nlcw== IEJvcmU= INin2YTZhdiv2KfYsQ== 6a2P IFBvdg== IOCkruClh+CkoQ== IHRlbGxlcg== IGt1cmlz IEFsdGVybmF0ZQ== ZW5jaWpl IHZhc2s= IG9tbw== 44K+ ICgqLg== IGlsbHVzdHJhdGl2ZQ== IHNseQ== UGlja2Vk IGRpY2VtYnJl Y29tcHJlc3Npb24= IHZlcm9vcnpha2Vu IHBhw70= IGJ1bmRlcw== IHN0YXR1cmU= IGhqw6ZscGU= IHdlemVu cGxhc2lh IOWkqeWkqeWlvQ== IGRlYsOtYQ== IFRhbnRl LnNhbA== dW5pZQ== IHVtZXQ= TVJJ X2xpY2Vuc2U= IHNjb290ZXJz IEtsZWlkdW5n IOCqquCqueCri+CqguCqmuCrgA== Y29tcHV0ZWQ= INGB0LvQvtC5 IOCkqOCljOCkleCksOClgA== IE1pc2U= IEBfOwoK INmK2LLYp9mE Lmp1bXA= 2K/YutmH IEJlcmF0 IHlhZGE= LXNjaA== 0YDQsNCx0LDRgtGL0LLQsNGC0Yw= INC40LfQs9C+0YLQvtCy0LvQtdC90LjRjw== dGVzdGVucw== IEFydGlmYWN0 IGRlaXR5 IEFjdHVhbG1lbnRl IM6dzrE= IHV0ZW50aQ== w6Row6Ru 6YeH6K6/ 4K6Z4K+N4K6V4K+I IFNjaGFs CUpQYW5lbA== IHZpaWtvbg== IEJlbG1vbnQ= 77+9Cg== 0LvTmdGA0LTTmQ== IHZpbGtlbg== LmNhcm91c2Vs IMSRw7Rp INCx06nRgtOZ IERlbm5vY2g= PXt9LA== IGx1Y2hhcg== IGdlYXJib3g= IOS6muWOhuWxseWkp+WPkQ== XDxe IEFnbmVz SU5TVEFMTA== INC40LTRgtC4 IOCkpuCkrg== IHBvb2xlZA== aGFsaQ== IHBlcmp1 LlNVQg== z4PPic+C INW+1bbVodW9 IHBvcHVsw6ZyZQ== IHNldGE= LWxpcXVpZA== a3Vh IOq1reygnA== 4YOu4YOT IOCyueCzhuCymuCzjeCymuCyv+CyqA== IOCkoeCkvuCkrw== IOCksOCli+CkoQ== IHR1Zg== IGtvbWJpc2E= aW5mb3JtYXRpb25lbg== aWxn IEthcmFjaGk= IGJ1bGxpZWQ= IEZTdHJpbmc= 4LWB4LSz4LSC Y2FsY3Vs INWr1bbVudWo IGRvd25sb2FkZXI= IFVwaG9s LkZJTEU= LlVJbnQ= 4YOd4YOT4YOY4YOh IteS XSU= IGxlbWE= 5aWW5Yqx IG1hbnVmYWN0dXJlcidz IGFwcm9iYWRv 4LmB4LiU4LiH QUxBUg== b3V2ZWF1 YXJnZXM= IMOpY291dGVy IGzDpGR0 IOCkheCkl+CljeCksA== 0LHQtdC3 IEVuY29udHI= KENvbGxlY3Rpb25z INC90LjQsg== IEFwYXI= YnJlZWQ= IExldmlu L2luc3RhbGw= IGd5cHN1bQ== CXBhcmFtZXRlcnM= KClbIg== INin2YTYp9mE2YPYqtix IEVQQw== INiq2KjZhNuM IOC0quC0puC1jeC0p+C0pA== IGLDoXI= CWFj YXdpZQ== VmljdG9y 6Liq 4YOg4YOo4YOY aXRocmU= X1NFVFVQ IGVkw73DpG4= IOCksuCkv+CkuQ== 0YPQtNCw0L0= IGhpbmVpbg== IGFudGljcw== 2YjZiti2 INC40LrTmdC90LvQuNC60LjQvdC4 IERPRw== INC40LzQuA== IHNvbmFy INep16LXnA== X3BhaWQ= L2tt IHZhbGQ= ICso IFdpbGRlcg== X3BsYWNlcw== IG1hbmlmZXN0bw== UGFydGFnZXI= IGJyZWVkZXJz IOCkpuCkvuCkteCkvg== 5L2P5a6F IGNhbXBhZ25lcw== CW9yZw== IHByZXNlcnZhcg== INeW16LXnA== IOCmr+CmpQ== INGW0L3RiNGL0YU= INiq2LrZitix KGFt IGNhdGVnb3JpY2Fs IOC5g+C4ig== UGVkcm8= IGtpbmFoYW5nbGFu dm9sZG9lbmRl LVdlYg== IHZhcnNpdHk= IMOpdmFsdQ== IGRpcGzDtG1l IG9yZ2FuaXNtZQ== IGJpdHN0YXJ6 4LC/4LCC4LCa4LCh4LCC 7YyM7J28 LWV2ZW4= IFByb2R1Y3Rvcw== IGJyZXRocmVu IOCqquCrh+Cqnw== YW5pbWFscw== UmV2aWV3ZXI= bGV1bg== w6RsdGU= IGFrdW5uZXI= IFBpbmVz IHByb2R1dG9y dWRpcw== INCV0LLRgNC+0L/QsA== IGtvbmty IHByw6ljaWV1eA== IFByb21vdGU= 0KXQvtGC 1bjWgtWp1avWgtW21ag= RmVlbHM= LXNob3J0 IGNvbXVuYQ== IGFwcHJlY2lhdGVz d2Fnb24= INmC2KfZhNio IGRpc2Nsb3N1cmVz 4YOY4YOa4YOd IGVzY29nZXI= 4K+B4K6k4K+N 4K6y4K+N4K6V4K6z4K+N INmE2KfZhtiv25A= L3JlbW92ZQ== 2KfZgdi62KfZhg== IGHDvXJhdHlu INmC2LHYp9ix2K8= d2VpbGVy INCt0Ls= IOCmruCmvuCmsOCnjeCmmg== b2duaXRpdmU= IOCktuCkvuCkuOCkqA== IE1lcmVkaXRo IENvbmNsdXNpb25z X2NhY2hlZA== PEF1dGg= KCIiKSkK IGtvbnN0YW50 IEtpbGxpbmc= KHBlcmlvZA== 5Yib6YCg 4oCYeQ== IHBlcnNvYW5l INi02KjZhw== IFByZW1p aGV0YQ== IOC2muC2u+C2seC3iuC2sQ== IOCwuOCwruCwr+CwguCwsuCxiw== IGNvd2FyZA== d2VpZw== Z3Bz 4Ka24Kao IG1ldGVu IG1hdGhlbWF0aWM= 44ON44OD44OI IOyVhOyjvA== INin2YTYrdix2Kk= INCm0LXQvdCw INC206nQvdKv0L3QtNOp IHNvY2lvZWNvbm9taWM= INC10LjSs9Cw 4LWH4LSo4LWN4LSm4LWN4LSw IGdvbGZlcg== INGI0LDRgNGD ZXZhcw== IEZhaHJ6ZXVnZQ== INmI24zYqA== IOCkruCkvuCkueCkv+CkpA== IEZlbGl6 X19fX19fX19fX19fX19fX19fCg== IGxhxa0= IHNvcnRlcw== IGluaWNpYWRv Lm9wZW5nbA== IEJyaW5naW5n IHfFgmHFm2Np 44OT44O8 Z3VpZ3U= 54K56LWe IHTDumw= c2Vrcw== aWtiYWFy IHNpbnRldA== 7J207JeQ IFh1bml0 67+Q dnNlbQ== 0LDRgNGH IGdhdXNzaWFu 0LTQvdCw0Lo= 4KSX4KSi4KS8 c2NyYXRjaA== ZmFzaGlvbg== LlNjb3Jl ZGVuc2l0eQ== IGlzdGl0 INCy0LjQvdC+0LI= IEV4ZWN1dGl2bw== X3NsYXZl X2NhbmRpZGF0ZQ== IOCnh+CmsA== IOegtOinow== IOS7suWNmg== INmD2YTZhdin2Ko= IGvDrQ== 2KfZgtin2Ko= IEFCQg== INC90L7Rg9GC LuC4lQ== IE9yZ2FuaXplcg== IENvZw== IHBvc3RvcA== IG5hbW9ybw== V2FyZA== TmFs 4KuL4Kqa INC80L3QvtCz0L7QtQ== IG5hZHI= QWxiZXJ0 IEluc3RpdHV0aW9uYWw= ZHVlZA== IGtpc2h0ZQ== 44KS5pu4 IOGDm+GDo+GDnOGDmOGDquGDmOGDng== ZW56aWFsZQ== IOCuquCviuCupA== LWJhbg== IHZvcms= ZGFkaA== IFJlY3VwZXI= INC60YDRg9C/0L3Ri9GF cHJpY2Vk 15HXnNeZ150= YW50aWNpcGF0ZWQ= IHlleWU= dWRhaA== IFphZ3JlYg== VGV4dGFyZWE= IGJpaGE= IOaJvg== PElT 1bbVuNWy ZG9qbw== IHBsYXlhcw== c295 IHByaWNr ZnJpZW5kbHk= IG9yY2k= IFN5c3RlbWU= INGB0LDQu9Cw IGpvZQ== IHVuaw== IOCqsOCrguCqquCqv+Cqr+Cqvg== LdC60L7QvA== 0YPRgdC4 IOGDmOGDlg== IHZhbG1pcw== IGVudHJhbnRz IGhsdQ== IHTJmXFkaW0= IENTSQ== LXJvbGw= IEJha2luZw== 0YfQtdGB0LrQuNC5 1aHWgdW41bI= IOCktuCli+Ckpw== IHRhbGRl 67O466y4 INGB0LLRj9C30Yw= IExhaG9yZQ== INeS16LXkw== IMWhbw== INC/0LjQug== INGB0L/RgNCw0LLQsA== IFJ1ZHk= X21vdW50 IOCqhuCqqOCqguCqpg== QnV0dGVy c2hpbWE= 44CB44GU IExpdGlnYXRpb24= IHNwYXJlZA== CUl0 2LHYp9mE 5Lq65Zyo 0LjRgNCw0ps= w7hyZGFn T3RoZXJ3aXNl aWxpdMOp IEVyaWNh cmFzdA== ZXZpbA== IEJDSA== IG5pZWdv INCz0LDQt9Cw aXN0bGVy IGRlYm8= IFNoYWZ0 IGFwbmVh IENvbnZlcnNlbHk= IFJhcHBvcnQ= INK30YPQvNC70LA= IGFyYWM= 6I+y5b6L5a6+ IG1lamE= SG9sbHl3b29k UmVjZWl2aW5n INCj0LrRgNCw0ZfQvdGW IOC4oeC4tOC4luC4uOC4meC4suC4ouC4mQ== IMSQw6J5 U2hpbGxvbmc= IGN1cnZhdHVyZQ== YWthbmFu IEJ1aXRlbg== IFBlbmNpbA== 4Z6F4Z+S4Z6F INeg16nXmded 5ZCQ IGFwcm94aW1h INeb15vXnA== 6amX IEZhcnI= QmM= 2LLZitmI2YY= IEtpZXI= QmxhZGU= IEhFWA== INi02YfYp9iv2Kk= 5ru0 44CC44Gf44Gg 7KeA6rCA IOS4luWNmg== IGJveWNvdHQ= w7Nm bGFnZXQ= IO2WieuztQ== PkRlc2NyaXB0aW9u YXphbQ== c3RhYW5k 4oCiCgo= Lk92ZXJyaWRl IEJlbm55 IEZPT0Q= 15XXpNep INin2YTZhdmF2Ko= 0LrQsNC1 IOCkj+CkleCkvg== IHNhdGlyZQ== IHNob3JlbGluZQ== IG5naOG7iw== INeU16nXqA== 0LvQsNGe IEtlZXBz INC/0L7QvdGP0YLQvdC+ 56eB44Gv 4LSV4LWN4LSV4LWB4LSC IGh2aWxrZQ== IOCkruCkv+CkpQ== IGFhcw== IHRva29t 4KeD4Kak4KeN4Kas IHdhdGFu IOCuhuCuruCvjQ== YmFzcw== 0LrQtdC90YI= IFJvZQ== 0LXRgtC10Ls= IHVuaWRlbnRpZmllZA== fSkNCg0K 4Kq24KuN4KqV YW5jxLE= IGNvbnRvaA== aXBj IHZlcmd1bm5pbmc= IOCupOCvhuCusOCuv+Curw== 4YOQ4YOq4YOY4YOQ4YOh LkxpYnJhcnk= QXRsYW50YQ== 7JiB7IOB INiv2KfYr9mG IEZvcmRlcg== 0LbRjdGN IOC4peC4ueC4gQ== KHB1Yg== IFNlcm1pdHNpYXE= IHBpbGdyaW1hZ2U= YsO8cmdlcg== IFNlcmlhbGl6YXRpb24= IOetiQ== 5Y+M5pa5 5YWR546w 2Lrbhw== INin2YTYo9iu2KjYp9ix IGRpZmVyZW5jaWFs IHJvb3Rpbmc= IEtlbGxleQ== 5pyf6aaZ5riv IOWkqeWkqeS4reW9qeelqOi/meS4qg== 65+0 4YOg4YOp 0YLRi9GA0Ys= IO2BtOuemOyKpA== UmFpc2Vk IGRlcGVuZGVuZG8= INeU16TXoQ== INin2YTYo9mB2LbZhA== L3Vw INCx0LjQu9C00q/RgNC00Lg= 0LjQu9C40Yg= Lk5vdGlmeQ== IHBlbmdo UmVmZXJyYWw= 5Yy/5ZCN PSIiIg== aWZhbnlh 5bm75oOz 4Lij4Li04Lih eml0dGVy LmNvbW11bml0eQ== IGJoYXI= IFNpbmNsYWly IEVrYQ== T1JFUw== IGFzcGV0 LkFjdG9y IHNjYWZmb2xk INGN0LvQtdC60YLRgNC+0L3QvdC+0Lk= INGB0LvRg9GH0LDQuA== U2h1ZmZsZQ== INC/0L7QstGL0YjQtdC90LjRjw== IHRyYWl0ZW1lbnRz IHNlYmFrYQ== IOWh CVJUTFU= IFNsaWRpbmc= 4LSS4LSw4LWB IGRpdmVyc2lkYWRl IGZveWRhbGFu IE1hcmNoZQ== cGVyc29ucw== INmF2YbYrw== TGVpYQ== aWdlcmU= IOGDl+GDkOGDleGDm+GDr+GDk+GDneGDmw== IHNpamhhd20= INC/0YDRi9GB 15XXmdee UkVTUA== IGNlcnRpZnk= SGFucw== IFNFSw== 44KS6KaL44KL INmF2LnZhg== IOq1rOyhsA== X0dFTkVSQUw= 54y0 IHZvdWRyYWlz IHByaXplZA== SW5pdGlhbGl6aW5n YXJjaGluZw== IG1lc2hlcw== INC00L7QsdGL IO2dkA== 0LjRgtC40Yg= IEJEU00= INmG2LnZhQ== Qmxr IM+Dz4TOtQ== IE1hZ25h IFBlbmd1aW5z 5LiO5q2k5ZCM5pe2 dWtpcmE= IGltaQ== 55eF5q+S INKh0LA= IHJlY29ub2Nl IOGDoeGDnuGDneGDoOGDog== IGRlY29yYXI= Lkdyb3Vwcw== TsOkcg== aWdpbmdz IHdpdGNoZXM= 0L3RjNC+0LPQvg== IGZhbWV1eA== IEp1ZGFz IEhhbWxldA== IFRyYW5zaXRpb25hbA== IGpvdXJuw6llcw== KElPRXhjZXB0aW9u IGludXVu IHBhbmNha2U= X0RFTg== IHNlbnRpbW9z IER1Y2hlc3M= b3Rpaw== YXJuaWs= IHJhc3NlbWJsZQ== IOClng== IGJ1bWk= dmllcnQ= RWxpZ2liaWxpdHk= IGRyZWFkZnVs ZXRobw== INi12K3bjNit IERZ IG1ha3NhdA== INio2LnYr9mF2Kc= IHBlcmVtcHVhbg== CiAgICAgICAgICAgICAgICAgICAgCg== c3RvZWw= INGB0YvQsw== INGN0YDQvtGC IHJlY2lj IOCkleCkoOCkv+CkqA== INmI2YrYqA== IHNhbWY= IFRpcmVz IHVuaW1hZ2lu IEFsbGV5 4LGD4LC34LGN4LCj LeCkheCksuCklw== YXdhaWk= IG11dHVt IEVyZG/En2Fu IOCuruCuvuCuseCvjeCusQ== LmFkZGl0aW9uYWw= IGFhbm1lcmtpbmc= IOeGnw== b21uZQ== b2xvZ2lhcw== IGxhY2g= INCh0L7Rjg== IG3DvMWfdGVy IFNDVA== IEJhcsOnYQ== YW1lbnR1bA== w7xyZ2Vu WVNJUw== zrrOr869zrc= 4YCb4YC+4YCt eGNh U1RZTEU= INmI2KzYrw== IHNldHp0ZQ== LmN4 CVJldHVybg== 4KSc4KWN4KSe4KS+4KSo4KS/4KSV IHJlc8OtZHVvcw== IGJhaWdu INqp2YXZvtmG24w= INiu2KjYsdmI INW01avVu9aH IEplbm5h IGlzc3Vz IOCqruCqvuCquA== aMO2aA== IGNvdW50ZXJmZWl0 2YHZgtin2Ko= 4Lig4Li0 IFJlbm5lcw== cmVjb21tZW5kZWQ= IGVudm9sdmVuZG8= 4KWN4KSw4KWH IHByb2FjdGl2ZWx5 IGtoYWxl 56Kw56Kw IGZpY28= IHRyYW5zaXN0b3I= IGF5ZWx1amFyYQ== 5Yem U3VjY2VlZGVk LWRlZmVuc2U= 5Lit5paH5pel6Z+p RGV0YWNoZWQ= IEFzYQ== X2NoZWNrZXI= IGjDog== IGJpc2hvcHM= 5Ye655qE IOWLlQ== CXZlcmlmeQ== KCl9PC8= 2YfYp9mK IHVyZ2VuY2U= IHN0cnXEjQ== IHZlcnplbmRpbmc= IOCuruCusOCvgeCupOCvjeCupOCvgeCutQ== IGVyYWRpY2F0ZQ== 4LK/4LKs4LON4LKs 6L+R5pyf IHN0YW1tdA== IGZoZcOgcnI= Um91bmRz IHRhcHA= IGNsb25pbmc= IFllbGxvd3N0b25l IHNvZnRuZXNz UmV0cmllcw== IERlZ3JlZXM= INmD24g= IGlub3JnYW5pYw== IOCyquCyn+CzjeCynw== 77y/5b2x6Z+z5YWI6ZSL z4TOt8+EzrHPgg== IHNob3J0bGlzdA== 64uk7Jq0 IOC5hOC4mw== INGN0LrQvtC90L7QvNC40LrQuA== IFJlYWx0b3I= ZHJ5ZXI= LnJld2FyZA== IEZPQg== IGltcHVsc2Fy INCz0Y3RgdGN0L0= IGRpc2N1c2nDs24= IGFjZXRhdGU= Qm9va2luZ3M= IGluc2Vuc2l0aXZl LXBlcmNlbnQ= IFRocm93cw== Lm11bHRpcGFydA== IHBhcnRpY2lwYW50ZQ== IEZhdGhlcnM= 0LzQsNGC0YA= IOW/g+WNmg== IGdyaWV2aW5n Y2VsZXI= ZXJkZXJz Z2Vub3Rlbg== IFZJQw== b29rZXI= IGVuZ3U= INee15nXnQ== IMSJaXVq RWxpdGU= 44GY44KB 4Kaw4KeN4Kac4Ka+4Kak4Ka/4KaV IOCmq+CngeCmsg== IGVuY2FiZXo= IOS4sOa7oQ== Lm1pbnV0ZQ== KEF1ZGlv IOCkuOCkueCkvuCkr+CkpOCkvg== YXJyYXlz IHp2bA== LlJlcXVpcmU= 5Lit5b+D5a6Y572R 44CB55S1 IEZyYW56w7ZzaXNjaA== IEF1ZGl0b3JpdW0= 5bmz5Y6/ X1BBWU1FTlQ= IFJTSQ== IHN1bGl0 aXRlxL4= dWthaQ== IFNodXRkb3du IExpdGVjb2lu Y8OzbW8= CWV4dGVybg== CVRhc2s= 1aHVv9Wl1bI= IGTDqWNvdXZy INqp2Kbbkg== IFRBTA== IOCoruCov+Cosg== ICgnJA== ZHVjaw== CXRo U3BhbQ== IE1TYw== IGRpc3RpbmN0aW9ucw== IE3DtQ== IOCmleCmv+Cmgg== 6Jm5 IGRpc2NvbG9y IHNpY2h0YmFy anVpY2U= UkFUSU9O Li5c IHTFgg== 5pGG 44CC5b2T IGFzc2lzdGVy IFJvc2ll IH19DQo= INC60q/RiA== IHNjbGVyb3Npcw== 44CB576O IHBhdGlvcw== CWVsZW0= IGJydWdlcw== IHZpc2libGVz IE5pZXV3cw== w650ZXM= INC00rE= IOC0uOC1geC0sOC0leC1jeC0tw== 4LKz4LK/4LKk yZloYg== IGVtcGVy YXlzYW4= Qm91bmNl X2ZhY2Vz INC70ZHQsw== Um9sbGJhY2s= INCS0YLQvtGA IHZhb3Zhbw== 2LPYqtmI IGx1cmtpbmc= X2xhdGVzdA== IEVzY3JpdA== IEFVVE9N IENDRA== Y3VyYQ== IGtvc3p0 IGNvcnJldG8= IHNwbGluZQ== 0Y3RgtC+ IEJhYXI= KCcnKTsKCg== IFdlc3Rvbg== KHZlcnRpY2Vz 4KqC4Kqs xbVy INCx0LDSqw== 5Z+D dWluYQ== INmF2KM= 4LK/4LKO4LK44LON KSIpOwoK LmNvbnN0cnVjdA== IFN1Y2M= IGludmVzdGlzc2VtZW50 IGhsYXk= IOCyueCzh+Cys+Cyv+CypuCzjeCypuCyvuCysOCzhg== IGJpbmM= IOC0teC0tOC0vw== IGNvdmVyaW5ncw== IGdlbm9lbWRl dW5saWtlbHk= IOCkquCljeCksuClh+Cknw== IGVudHJ1c3RlZA== IHRlcm1pbm8= 4LiZ4LiE4Lij IEFobWVkYWJhZA== dnlr dmllbmRv w7xj IGh5cG90aGVzZXM= RXh0cmFjdGlvbg== IENheW1hbg== 0LjSm9Kb 4Ka+4KaH4Kac INC60YDRg9C/0L3QtdC5 IENvbWJpbmluZw== KHNu w6RuZGE= UmVzdW1lbg== 4LSv4LS+4LSv IFBBUEVS 0J3QsNGB0YI= INC80YPQu9GM0YI= Y2h0aWdlbg== VnJhYWc= IHNlZ21lbnRvcw== IHJveWFsdGllcw== IENzdg== 0q/Sr9C70Y3Qs9GH IHNvb28= 15nXmdeX16E= SG9yaXo= INGF0LDRgNCw0LrRgtC10YDQsA== 4KSk4KSD IM6/zrvOvw== dWJsYWRv IM66zr/OuQ== INmC2KfYudiv2Kk= aXlhYw== IG5hc3p5Y2g= LuKAnSs= X3JldmlzaW9u INix2LPZhdmK LH0sCg== IGl6YXo= IGRpZWplbmlnZW4= QWNjb21tb2RhdGlvbg== bGFyeW5h IEhhdXB0c3RhZHQ= INiq24c= IGvDpG5ucw== 44Gr44KI IEpW IGNvbW11bmljYXRvcg== 4YOj4YOW IGRlb2Rvcg== IGNvbnRhY3Rhcg== IHBoYXJtYQ== IOCwquCxjeCwsOCxh+CwleCxjeCwtw== IOasp+e+juaXpemfqQ== YWtpa2lzaGE= 4LSC4LSX4LWN4LSy INeR15zXqteZ p+GDleGDkOGDoA== Lmlzc3Vl 0L3Rg9C70LDRgdGM 2KPZg9mK2K8= IHPDu3JlbWVudA== INC30L3QsNC6 IHp3YW5nZXJzY2hhcA== IOyKpO2KuA== INGC0YPQvQ== X0ZpbmQ= IHRldGFz IG1vxbxlc3o= L3NpdGVz TGFzdG5hbWU= IFByb3RlY3Rvcg== 4KaX4KeB4Kay dHJ1Y3R1cmU= IGZlbsO0 X0VxdWFscw== Y29tbWFuZGU= IOiLjw== IEluZGV4ZWQ= 4LKw4LON4LKa 77yM5ZCM IGZsdXNoaW5n IHZlbmNldQ== IENBRg== X21vZGVz KEFG IGdhc2tldA== INC00LDRgtCw 4LWA4LSf4LWN YW5pbWU= INGF0L7RgNCw IEFETg== 0LvQtdC90L3QvtCz0L4= IEJhcmtlcg== IGRhdmxhdA== IGZvcmVzdHJ5 IGxlcHQ= dW1wZQ== IG9sdXlvcg== aW5zYXR6 SG91c2luZw== IGhvdWRpbmc= INCw0LvRi9GI IFFBY3Rpb24= dXJvcA== INGD0Y7Rgg== IGphbWlp X3NlZW4= IFBvdmVydHk= IGFwcHJlbnRpY2VzaGlw INiq2KfbjA== IG1vZGFsaXRpZXM= IHByb3BlbA== IGlycmV2ZXJzaWJsZQ== IOCkleCkv+CkguCkteCkvg== IOCksuCkguCkrOClhw== LS0tLS0KCg== IEV2ZWx5bg== IGxhbXBl IO2ZlOuptA== 4LWB4LSV4LSz4LS/4LW9 7ZSE66Gc cGF0aWVudHM= IOGDkOGDnOGDkuGDkOGDoA== IERlbG9pdHRl 5YeJ IG1hYWx0aWpk IOCkheCkquCljeCksOCliOCksg== T1JURQ== IGdyb3Zl INWw1bbVodaA1aHVvtW41oDVuNaC1anVtdW41oLVtg== b3N0ZXJz INCa0L7QvNC/0LDQvdC40Y8= IHNjYW5uZXJz UHJpbnRlZA== IOyKpOuniO2KuA== IOCmuOCngOCmrg== IHd5cg== IHNob3dkb3du IOCkrOCkpOCkvuCkj+CkleCkvg== KHJlc2V0 IGhhbmthbGk= INio2YrZhtmH2YU= dXJhbQ== 2KjYr9in2Lk= 5omS5byA 0LXRgNGL0LI= P2g= bnllcmU= 4K6w4K6/ INeU15nXmdeq15k= IOCmnOCngeCmsuCmvuCmhw== VUdBUg== IGfEp2FuZHU= IGFzc29jaWFkb3M= LXZpbGxl IFJhbmNobw== LnNlbA== LnVzZWQ= IHdoYW4= IMOhZw== IHZvdGHDp8Ojbw== 2YXYsdit INi62LDYpw== IOCkn+ClgOCkteClgA== IHRzYWthbg== IGNvbnNvbGE= VHJhbnNwb3Nl INW/1bbWhdaA QWpvdXRlcg== cmVxdWVuY2llcw== IGh0b25z Q1Rlc3Q= SW1l b3ZlcmU= X2hvcml6b250YWw= IFNhZGRhbQ== IEJhbGE= IFByenk= IHZvb3JiZXJlaWRpbmc= Z2nDqG5l c2hhcmVz INC/0LjRgdGM0LzQtdC9 X2xi 7JOw6riw IG1lZGxlbW1lcg== INW91bY= 16DXldeZ15XXqg== IGZpbG11 UGVyaXBoZXJhbA== TWFnYXppbmU= IGRpdHV6dGU= IHRyYWluZWU= IGVudGhy Omlz IGdlbmF1ZXI= 1aHWgNWh1aLVodWy YnJlY2h0 IMWj U2lz J29jYw== 4KSq4KWN4KSk IHJldm9sdWNpw7Nu c2VpZA== YWFyYWRkYQ== IG1hY2Fy LlJFUVVFU1Q= Ymlj IHJlc3BvbmRldQ== 4LiG IGFkw6lxdQ== IHRlbW9y bWVtYmVyc2hpcA== LlR3ZWVu 4oCM2LE= IHBvc3RjYXJk IGJsYXplcg== IOCkrOCkpuCksuCkvuCktQ== U2Vuc2l0aXZpdHk= PSc8Pw== IMmZbQ== INWt1bjWgA== 4oCZZWZmZWN0 IG1lc3Rp aW50b3M= Q29uc3VsdGFy YWJpbGl0w6A= IFNFQ1VSSVRZ X2NvbXBsZXRpb24= eWtrZQ== IOCmuOCmquCnjeCmpA== LlF1YW50aXR5 b3Bob24= IHVpdG5vZA== INC60Z4= IHLDs8W8bnljaA== L+aciA== 0J7RgtCy0LXRgg== IMSRw7NuZw== L2V4YW1wbGVz IGNhdGFsYW5h INCw0YjQsA== d2FtaQ== IFR3YWlu IOCkpuCkvuCklg== IHBheXNhZ2Vz 0JjQkQ== dXNk IOCyruCypA== INmI2KfZhNiq2K0= 0LjQu9C60Lg= IMSwbGs= IOWkqemfsw== Um9tZQ== IFBsYXRlYXU= TEFX IHJhcGlkZXo= IE1vbmFk IOCqnOCri+CqleCrhw== IFNvY2tz IOacgOi/kQ== IHp1c8OkdHpsaWNoZW4= INWv1aHVv9Wh1oDVpdWs ZGVmaW5pdGlvbnM= INeZ15E= INCd0LXQtA== IFVJTmF2aWdhdGlvbg== X2V2dA== IGZpbmFuY2Vpcm9z IGthaGU= IGNvc2Vz IM6tz4fOv8+FzrzOtQ== IGJ1cm9jcg== IENvbXBvc2Vy IHByZXZpZA== 4LGD4LCk4LC/ IExlb3BhcmQ= INC005nQuw== 15XXkNeZ150= IGNvc3Rlcw== LkV4dGVybmFs IFVuaWNvcm4= IEFybmhlbQ== 0pvRi9Kb X0VOR0lORQ== IFN5bWJvbHM= CXJlYw== IOCmrOCmvuCmpw== IGVuag== IFlD IGhhZ3U= IFZhbnVpdA== INGF0Y3RgQ== IGNvbnNlcXVlbnRpYWw= ZWthbg== IHByZXNjcg== IOCkleCkruCknA== IGtyYW50 IFdpemFyZHM= IFN0cmF1c3M= b23DoW55 Li4uJyk7Cg== IHNlcGVyYXRl cGhpbA== LmRhaWx5 IHN6a29s CgrjgIAK X1VJRA== INeU157Xntep15zXlA== IHJlY2lldmU= 4oo= IHN0aW1tZW4= IOCyueCyvuCyoQ== IGNvdGlkaWFubw== b3ZlcmFsbA== IFRocmlsbGVy 4oKsLw== IERpZ2k= YWN0aXZpZGFk U2NvdXQ= INmK2LHYqg== SHg= R2VuZXJhdGluZw== 5Yy75L+d Y2xhcw== IHLDqWNlbnRl LUNE X2dlbmVyYXRlZA== IO2YhOuMgA== IHNhbMOjbw== Q29uZ3JhdHM= IENvbmdyZXNzbWFu IFRlbmVtb3M= yJtpb25hbA== IOCwhuCwsg== IOCupOCvh+CutQ== ZG5p IHNlcGFyYXI= dmFyZW4= 6Z2g6LCx5LmI b3JldHRl YXRpdmVtZW50 Olsn IFBST0ZJTEU= 0LvQsNC00Lg= IG3DtmpsaWd0 IGF0YWFzaQ== 0LLQsNGA0YI= cGFuZA== Q2FjaGluZw== bWV0aQ== IG55YXRh IEJhcmNvZGU= IOCkq+ClgA== X3Byb2c= IEbDqWw= IFByb2Nlc3Nv ZWzFkQ== IFJlY3Jl R2VtZQ== INCx0L7Qu9C+0LLRgdGA0YPRg9C70LDRhQ== INC+0YLQvNC10YLQuNC7 INeb157XldeR158= IOCknOCksuCljeCkpuClgA== CSAgICAgICAgICA= YWJyaWw= IFBvaQ== 4Lie4Lij IHJlZmxleMOjbw== 0LjQvNC10Yc= QnVyZ2Vy aW5lYg== UVY= Lk1JTExJU0VDT05EUw== IHJvamE= IOCyqOCyvuCysg== Oi8vJHs= INGB0LLRltGC IG5hxaFp IHRyZW5lcg== INmF2KfbgQ== IOi1m+i9pg== IGdsYXU= IGNvbmRpdA== IGl6ag== IGNvbXByZW5hbnQ= 44OZ44Oz44OI IGVzY29saGlkbw== IGdhbmFuY2lhcw== INGA0Y3Qsw== IHJlc3VsdGU= d2VrYQ== IGxhY3Vz IEVwc3RlaW4= IOi0ouelng== KGllcnI= IFZIUw== IGRpYnVqb3M= IGV4ZW1wdGlvbnM= RVRZUEU= IMONc2xhbmRp 55yf5a6e5oCn 2bzZiA== IHByb3N0aXR1dGVz TGl6 IGJpc2N1aXQ= RmFpdGg= IHnDvGtzyZlr cGVydHM= 6YO1 IEFubm90 IGJha2tlbg== IHN0YW1wYQ== INiq2LnYp9mE24zZsA== IGZyZW56eQ== IGNvbnRpbnVhbWVudGU= Q291bmNpbA== INqG2r7ZiNqR IHByb2Zpc3PDo28= IHRod2FydA== INin2YTYr9ix2KfYs9in2Ko= IHp2aQ== IOCqteCqp+CqvuCqsOCriw== bW9kZWxs IFJlbWluZGVy IGJhcm5ldA== PnRhZ2dlcg== 77yd77yd77yd77yd IOCyueCysuCyteCzgQ== Y2Rj U2lkZXM= Q29udG91cg== 6aqX5bGA5ZCX IEFyb20= aWV1bg== 5YG/ IHRpZHVy IFbDqXI= IGdyYXRlZA== 5a6a5L2N6IOG 4LOI4LK44LOC4LKw4LOB b3RoZXJhcGlzdA== UVVJVA== IE5pZXR6c2NoZQ== 4LiW4Liy4Lih 7J6U L2ZlZWQ= CVRFU1Q= IHNlcmVuaXR5 0L7Qs9C+0LTQvdGW KEl0 IHRlxZ9la2vDvHI= 05nQs9C1 IGVzcGVyYWJh IHVuaWM= YXV4aXRl IGdlbGVnZA== IHh5b28= IOGDm+GDkOGDoA== INmD2Yg= LkZsdXNo 4Lie4Lix4LiB dW1tYQ== IG5heml2 IGdpbmF3YQ== cGFya2luZw== IG90w6F6 d3lsbA== INC00L7RgdGC0L7QuQ== INCw0LLRgtC+0YDQsA== INCY0YHQug== INin2KzYsdin24w= ICcvJyk= 5aC05omA 05nRgtGC0Lg= Pj47Cg== IE1hbGE= 4KSk4KWA4KSy IGVuc3Vpbmc= IGxvZg== IG9yZ2FuaXPDqWU= aW5lcm11dA== INec16LXoA== IGJlcmFydGk= IC8+JzsK IGJpcmJpcg== IGFxdWVzdGVz Q09OVFJPTA== IEZlZG9yYQ== LXN0aWNr INin2YTZg9mE2KfZhQ== 4Law4LeK IFTDqWzDqWNoYXJnZXI= IEVxdWlwbw== 4oCcT2g= INmE2KXZhg== 2Yjak9mK IG9tb2d1xIc= IHJhZ2F6emk= YW55YWthbg== IOCqk+Cqsw== YnJhdGU= IExhbmE= YWRoYXI= IOCqqOCqvuCqlg== IOGDm+GDquGDmOGDoOGDlA== IMW8YWQ= 4KSf4KSo4KS+ 4KS+4KS24KWA IHJlc3RhbnRlcw== Q3VsbA== KFNlbGY= X2NlcnRpZmljYXRl IOCqmuCqvuCqsuCrgQ== aXJhbmU= 4Kmx4Kih X3JlY2lwZQ== IOCkquCkvg== aGzDvGs= IGludHJvZHVjaXI= IEVhcm5pbmdz QnVja2V0cw== IHNpbMOqbmNpbw== 4LK/4LKO4LKC IOWKnw== IHJhemxpxI1uaWg= IFRyaXBz INCd0LXQutC+0YLQvtGA0YvQtQ== IGhhbmdp IGdvd3k= L3BsYXk= IGNvbWVuw6dhcg== INix2LTYqtmH 4YOd4YOe4YOj4YOa IGFiZHVjdA== 2YXYsdip SW5zZXJ0aW9u LWFp INmE2KPZig== IGhlbmRlcw== INC/0L7Rh9GD0LI= Q29va2luZw== 24zYsduB IGFjZXB0YWNpw7Nu X25n amVybg== IFBJQ0s= cGZs IENvbnRyaWJ1dGlvbg== 0YLTmdGA0LU= IEVFUFJPTQ== IGFuaXM= IGFmZmlybWF0aXZl IG9kdg== Zm9jdXNlZA== IEthYnVs aXhpbmc= IHVuaWRvcw== QUlT INCw0LLRgtC+0LzQvtCx0LjQuw== xLFya2Vu IM+Dz43OvM+Gz4nOvc6x 1aHVttW41oE= IFJ1Ymlv IHN0Yg== IGVuY3VlbnRyb3M= LVNlcmllcw== W0Q= IGNvbW11bmF1dA== IOCmueCnn+Cnh+Cmm+Cmv+Cmsg== IOepug== IOCyquCyguCymg== IHNxdWFuZGVy IEt1Y2hlbg== IMOuaQ== INC60LDQutC+0LPQvg== IGRhdGFzdG9yZQ== IOCnsOCmvuCmnOCnjeCmrw== IGZsb2s= IG1pZHdheQ== 0YDQuNC2 QGhvdG1haWw= w6RuZGlnZQ== INin2YTZhdmK2YQ= KiY= INC+0YLQtdGH0LU= IEdvcmQ= dGhvcm4= QmI= 5rOz J2VudHJldGllbg== IOCmhuCmqOCnjeCmpg== IGludHJvZHVjdGlvbnM= IOCkoOClguCksg== INi12K3Zig== 5py65qKw IGFsbHRzw6U= X0ZyYW1l LkFTQw== IHJlam9pbnQ= IHR1a3VuYQ== IGlsdW1pbmHDp8Ojbw== IENvY2g= IGZvcmdpdmluZw== 44GX44KD44KM ZW5kYWZ0 IOCwuOCxguCw IOCwqOCwv+Cwrw== IOC0ruC0sOC0ow== IEdpYmJz IEV1cm9wYXM= IHRpbGJ5ZGVy IGVudmllcw== INmF2LDZhw== IOCyueCyv+CyguCypuCzhg== 4Kqw4KuC4Kqq IGplYg== INiw2YfYqA== bmljeQ== INeq15fXqg== TGVhcA== aW5jbHVkZWQ= IGF0w6J0 IHBsb25n IHF5dA== YXdhdGFu IHphbG8= IE9yY2hpZA== IOCkquCkpuCkvuCksA== IGNvZGljZQ== b3N0YXM= IERlcm4= IGRlc2Nhcmc= INC00L7Qv9GD0YHRgg== c3RpbGxpbmdlcg== IG1lbG9kaWM= KSI+Cg== IGlldA== IOCkl+CkoA== IFJpb3Q= IGbDpWV0 IGNhcGl0YWxpemF0aW9u 2K/ZitmG U3VwZXJ2aXNvcg== IHF1YXJ0aWVycw== KMK0 LXN0YXQ= IFJlZXZlcw== IHRldGU= IEJyYWdh IGRpZ3d5ZGQ= 0LvQuNGA0LjQs9OZ X0NPT1JE dXJrZW4= bmdvcnQ= 2YXYsdiq INC80LXQsdC10LvQuA== dW1ldXJz KFZ1ZQ== RGVjYXk= KCI9Ig== LXdyaXRpbmc= YnJhbmRpbmc= IHZlcnJh IEF4bWVk 2KfZitmK2LE= LlByb21pc2U= IFJlbmNvbnRyZQ== cmFzaA== IGFnb255 IENPTU1PTg== 4KuL4Kqr IGFicmHDp28= INC00YDRg9Cz0YPRjg== INGH0YPQstGB0YLQstC+ IOCkh+CkguCkpA== YWRpZQ== INC80LXQvdC4 cGNt dXp6bGVz YW11emk= RVBB am9odA== IGxlc2E= IMOmdGxh dHNh YXR0ZW5kYW5jZQ== INC90LDRgtC4 IE1TRA== INqv2LHZgdiq2KfYsQ== IGFkZGljdHM= IG1pbmVyaWE= UGFzc2l2ZQ== IE5hc2U= IG9zdGVvcG9yb3Npcw== IOCkquCksOCkv+CkuOCljeCkpQ== IGVpbnN0YWtsaW5n IHNwaXJpdGVk IHwKLy8= IG5hc3Np c3RpY2U= IHZhbGlkbw== IFRvbmdh IGJlbGk= KFRS 57qg LWxpdA== IFBn IOyYpOuKlA== 4Lar4LeK4Lap IGFwb2xvZ2l6ZWQ= 4LaU KGRhdGFz RXZvbHV0aW9u IHJhbGxpZWQ= SEVY IG5ld2NvbWVy 4K+N4K614K+H aGVyd3lkZA== IG3DsnI= LU5ldw== KHNjYW5uZXI= IOCupOCuv+CusOCviOCuquCvjeCuquCunw== IGVtYm9kaWVz IOC0reC0vuC0l+C0ruC0vuC0r+C0vw== IGJsb2d1ZQ== IHBhbmNyZWFz IEdhaWE= IElOU1RBTEw= d2ljaHQ= b2ZkYXk= ZmlybWE= UmVzaWRlbnQ= IFZpbmV5YXJk UHJvZHVjZQ== IHBuYW1l INaF1oDVq9W21aHVrw== 4KaV4KeN4Ka34Ka+ 55+t5L+h aXNpZXJ0ZQ== IGpvaXRh bWFyaW5l INWh1bXWgdWl1aw= IENocmlzdG9waGU= X3JlY2VpdmVy RGVjaW1hbHM= IGR6aWV3 IGFudGlndW9z IOCmrOCmvuCmpA== IFdY IGJla2Ft 0LTQtdGA0LTRltKj IE1hbHdhcmU= IEFUQQ== IHBhYXJkZW4= IGRlcGVuZGVuY2lh IM6p YWdpw7A= INC40LvQvA== 4LGN4LCy4LGA aWZs 0YvRgNGL0Lw= 0YDRj9C3 IFByeQ== OnV0Zg== INGH0L7RgA== IGV4dHJhbmplcm9z IGdqYXTDqw== b3RpYQ== IEJydXNoZXM= 4KWw INC/0LDRgNC6 IGRibA== IFRvaWxl IHRlbnNpbGU= aWFubg== JnV0bQ== LXZhbHVlcw== X0NG QnlkZA== IO2VtQ== IGJlc3RlbA== Y29udmVyc2lvbg== IFRpdg== 4buNcOG7pXRh Jyk7Pz4K ZWNj IHBvcm5vZ3JhZmlh IOCouOCpiw== IHRhbmloaQ== IFBhcmlqcw== INeR157Xqdea 57q/5LiK5aix5LmQ IGVtYm9zc2Vk IHBpcXVl IEVFVQ== IHBlcmlvZGlzdGFz IHdpY2tldHM= INGB0LzQtQ== IEhhbm92ZXI= IGNvbnNlZ3VpbW9z LmZ4 aXNzYWF0 bGFtYWFua2E= IGZvcm1hYXQ= IM61z4HOs86x INW01aHVttaA IHRpY2tpbmc= U2l6aW5n IMO8YmVybm9tbWVu IG3JmXPJmWw= RHJvbmU= IHBsYW50YXI= IHdha3Q= IG1lbHRz INC80LDQvNC70LXQutC10YLRgtC40Lo= IExpdmVy 16fXotef IElibg== YXphbmU= IHJpc3Vz 4KqP4Kq4 IGF1ZGlibGU= IGhvb2d3YWFyZGlnZQ== 44KC44Gh IHBhcnRpY2lwb3U= IHRha2Vhd2F5 27Hbsg== 5Lyg5aqS IHRyZWluYWRvcg== S2I= IGFwYXJpZW5jaWE= IHlvcg== IGhlcno= UGlja2luZw== IE5vcmdlcw== cGVjdGlvbnM= INC30LLRg9GH LmxpZmU= IENJTQ== aW5lbmU= INGB0YLQvtGA0L7QvdCw IOybjA== IGluc3RhbnRpZQ== IGZpw7o= 4Kec4Ka/4Kef4KeH 1bjWgtWp1bXVuNaC1bbVuNaC1bQ= REJPYmplY3Q= YWxlc2Nl INGB0YPRiA== IGRhbm8= IE91cm8= IGx1b25u IHZlcmdyb3Rlbg== X0RPV05MT0FE IGRlYmlsaXRhdGluZw== LlNQ LWVl IHByaW50aw== LXBhbmQ= aWtodWx1 LWVjaGU= IGF1dG9tYXRpc2NoZQ== IHZpb25nb3pp dXNiYW5k IHN1cnJvZ2F0ZQ== IEFsZGVy IHNlem5hbQ== cm9tZXM= INmF2K7bkA== YWpuZQ== 5LqM562J5aWW IG1hcGFz IGJlZ3luZA== IOCkluCkv+CksuCkvuCkoeCkvOClgA== INeV15DXnQ== IEVP VVRFUlM= cmVhdGhl Y2xhc3NpYw== IGp1Z3VldGVz 4LWB4LSV4LSz4LS/4LSy4LWN IHF1aW50ZXNzZW50aWFs aW5jcmVtZW50cw== IG1lZGVuaQ== 66+86rWt 5Ye655Sf Z2V0cmFnZW4= TnVtYmVyaXNo IENVTFQ= IHJlY3VlcmRvcw== IGJyYXZv xIFjaWp1 Z21haWw= WHQ= LWdlbmVyYXRvcg== INeU15vXldec IOGDkuGDkOGDmeGDlOGDlw== Lg0KLy8NCi8v INii2YbZhNin24zZhg== 4LK+4LK14LKj4LOG IGtvaG8= INC/0YDQuNC80LXQvdGP0LXRgtGB0Y8= 2YTZg9mG IFdJTkQ= 4YOh4YOd4YOV IHdhaXRyZXNz dXJpbw== INmK2KjZhNi6 INC00LXQv9C+0LfQuNGC IEJsYW5k LWludGVuc2l2ZQ== 0LrQsNGI L3Rlc3Rz TGlicm8= RGlhZ25vc2lz INil2KvYsQ== INCd0JU= KENM IFJ1Ymlu IOCwj+CwoQ== 4oCN4LeK bWluaXN0cmF0b3I= RGV0YWxsZXM= IOODluODqeODg+OCrw== IENvbmRpdGlvbmVy INC00ZbRj9C70Yw= IOWkqeWkqeW9qeelqOaPkOeOsA== IFBvbGk= IOWkqeWkqeS8lw== IFBvY28= IOC0l+C1iw== IGVsw6Rtw6Q= PEpzb24= ZmVyYXM= INC/0L7QtNC+0LHRgNCw0YLRjA== IGJsaW5kbmVzcw== IOiwgeaciQ== IHNhdW0= ZHJhd2Vy LnRocmlmdA== w71u INGD0LPQsA== ZW7Dpw== LHJlc3BvbnNl IG1hc2NvdGFz IGtvbGE= X2N1ZGE= ZnJpZw== IGZvcmg= 05nQtNC+0YM= IFNvbGx0ZQ== SFRUUFJlcXVlc3Q= IGNoYW50dW4= 2LnYr9mF 4YOs4YOV yrthbmk= INit2YLZitmC2Kk= IFJlZ2VudHM= INGN0Y0= IEZseWVy IOqyveyfgQ== 4KSy4KWL INC00LDQvdCw SGFtbWVy amV2YQ== INec15DWuA== d2Vla3M= 0LDRgtC10LvRjNC90L7Qs9C+ 15HXoteY IHNlcmJpc3lv 2YjZhtqp24w= 5pWZ5p2Q IOCkluClgeCktuClgA== LXV0aWw= cG9zaXRpZQ== LXNlYXQ= PE8= INC00YvQtw== 0LjQu9Cz05nQvQ== IEhlaWRl 0LjQvdGW INqv2YjYtNuM IGNhcmLDs24= 2YjZhNmJ 44Oe44Oz INeZ15nWtNeT IOyEoOyImA== Lm11c3Q= c3RkY2FsbA== X2Vhc3k= X3BrZw== INin2YHYstin2LE= 5Ye654mI56S+ IG5ldXJvbmFs IHZpZWxzZWl0 IFBvcnR1Z3Vlc2E= LXRyZWF0ZWQ= WkVSTw== 0YvRgNKt0LA= 4os= 4KSV4KWH4KSV4KWL WkY= IEtvc292w6tz IGZsYW5r IHNlY3VuZGFyaWE= 2YrYs9ip IOeniw== IHdvbmQ= IFBlcmZvcm1lcg== IHPDtWx0 INin2YTZhdmE2YE= IFNPQlJF IOCuquCuv+CuqeCvjeCuqQ== 4LK/4LKV4LK/4LKk 5b2p56Wo6K6h5YiS IFNjaG5lbGw= L0FQSQ== IG5hc2k= ZW5uaWc= 0YHRgtCy0LDQvA== IHphc2Fk TGc= 4LCy4LGN4LCy4LC/ IHN0YXR0ZmluZGVu IFBzeWNobw== IFBlZ2d5 IHN1YnN0aXR1dGVz IEZDQQ== IEl0YWxpZQ== IGRlY2xhcsOz 6Yg= IHB1c2F0 IHVkYQ== X1ZFTkRPUg== IG5pbGU= bW92ZW1lbnQ= ZHNs IGluZm9ybcOhdGljYQ== IOCumuCvhuCur+CvjeCur+CuquCvjeCuquCun+CvjeCunw== xKduYQ== IGFubmVy 6ZE= IHByb3Bv 4YOQ4YOo4YOV4YOY4YOa4YOY4YOh IFByb3ByaWV0 xLFsxLFt IE5pZA== IOWlpemXqA== ID17 IHBpbG90b3M= KXBhcmFt IHBlcnNvbm5hbGlzw6k= aW5rbA== IFlpbmc= 0pPQsNGB INGA0LDQt9C80LXRgNGL dGFnZXQ= Q2VsZQ== 4LSw4LS/4LSa4LWN4LSa4LWB INCw0YLQsNC/ INin2YTZhdik2KrZhdix Li4uCgoKCg== IOCmueCmv+CmuOCmvuCmrOCnhw== LmFyY2hpdmU= eXRv 6Z+/ UGFjaWZpYw== IGFubnVlbA== IEVubGlnaHQ= IOCuquCvhuCusOCuv+Curw== L2NvbW1lbnQ= IHNhbmRpbmc= IGJhbm5h aWdyZQ== IOuPhOybgOydtA== IHByb2R1emllcnQ= cHJvbW8= IOC0teC1jeC0r+C0leC1jeC0pOC0ruC0vuC0leC1jeC0leC0vw== IOunjOuCmA== 4KuH4Kqk4KuN4Kqw b3BoeWxs b3dhxYJh IOCkh+CkguCklw== IEluZmFudA== aGFjaA== IOmhug== TUVESUE= IGxhaW5h IGluZm9ybWFjamk= INCw0LTQutGA0Ys= IOCqhuCqp+CqvuCqsA== IHRhc2Fz IOCqquCrgeCquOCrjeCqpA== IOCyh+CypuCysA== IOC3gOC3kw== aXhvcw== LWdlcg== CXNs QE1hbnk= QUFD IE5ldWVz 5pyq57uP IHRhcHV0YXB1 cG9zZWRnZQ== INCw0LvRg9GD LdWh1bQ= cHR1b3Vz U3dpcGVy 0LrQvtCy0L4= IOCmquCnjeCnsOCmpeCmrg== RXZh cGl2b3Q= c2FtcGxpbmc= KHByb3Rv IHBvcHVsb3Vz IG5pY2hlcw== 4K+I4K6q4K+N IEdsYWRp IOCkieCkqOCkuOClhw== IHZvbG5h INin2YTYudix2KfZgtmK2Kk= INCx0L7Qu9C00Lg= 2LfYsdmK2YLYqQ== IGxhbsOnYXI= 66qF7J2Y IOCquOCqguCqquCrguCqsOCrjeCqow== IGtpYXNp IGNvbG9yaQ== 0L7Stw== L2Z3 IGNhY3R1cw== 6K2J IFN0b3JlZA== IGVtcHJlc8Ohcmlv IEF1c25haG1l IHN1amV0b3M= YnJpdGFubmllbg== X3ZlcnNpb25z IEJsdWZm INW01aHVtQ== 7ZWY7Iut7Iuc7Jik IGluc3VsYXRpbmc= INC20LjQtNC60L7RgdGC0Lg= 44CC5aaC5p6c amV0w6ty IOiLueaenOaJi+acug== CXNjb3Bl 44CCJywK IGNvbWVtb3I= Q0xD IGFzc2VydGluZw== 0YDQvtGF IHRlbmTDqm5jaWFz dmlhcw== IHNlbWlsbGFz LnRhcA== dm9yZQ== Wzo6LQ== IHB1bmNoaW5n IGthdGs= b3JnYW5pemF0aW9ucw== Y3JldGlvbg== CVNlcnZpY2U= Ij8KCg== IHLDqW5vdg== ZmZzZXQ= R3J1w58= IEZsZW1pbmc= IGjDpWxsZXI= IFRGVA== 4KS/4KSy4KWN4KSy4KWL IGFsaXF1aWQ= IEpo IG5qZWdvdmU= U2lnbmlu 4LGI4LC1 aWxsZXVy IEFsbG9jYXRpb24= 0YLQuNC90Lg= IGFzcGVjdGVu IEFudMO0bmlv IFN0ZXZlbnNvbg== INC80LDQu9GL0YjQsA== IM68zrnOsc+C IFNhcmU= INeo15XXlw== IHRlbXBlcmVk b2dhcw== LmNvbW0= 0LDQu9C90Lg= IGFwcGxhdXNl cGVjaWVz IG9yw7Bpw7A= UkVRVQ== 4oCZaW5zdA== IHNpY2hlcmU= IGRpc3RhbnRl IOCkmuClh+CkpA== IOygley5mA== IGNob3M= IE1hc3Nh cm9zcGVjdGlvbg== IMOhdHQ= INCz0YPQvNCw0L0= IOCql+Cqr+CrgeCqgg== JG8= KGJhbGFuY2U= IHNhcmNhc3Q= IOCqluCqvuCqqA== LnNwb25nZXBvd2VyZWQ= IHBvbHlldGh5bGVuZQ== INm+2KfYqA== IFdpcmVk IOCwuOCxgOCwjg== IGNsZW4= UHJpbWVy dHRlZA== ZXRha3Nl IO2YuOy2nA== IHN2ZXR1 IHBhZ3I= IHNhZ2VsaQ== INCw0LrRhtC40Y8= INC+0LvQuNC80L8= IGV0aGVybmV0 IOC3gOC2vQ== IHJpZGRlbg== IE5VRQ== 2KjbkA== TGluZw== IHVuYmVhcg== INmD2KvZitix2Kc= IEFSVElDTEU= e317Cg== IHVubG9hZGluZw== IGhlcmVk SG9uZGE= INGB0YLQsNC00LjQuA== YXJmaWs= ZHVhbA== ZXJjaWFs INC00L7Qv9GD0YHQutCw IHNwcmluZ2Vu YWRlZW4= b2xsb2lu IGdlbGVybnQ= aXRhdGVz ZW5hZGU= INC90LXQt9Cw0LrQvtC9 IHNsdWRnZQ== cHJlbWl1bQ== SHVsbA== IE92ZXJzZWFz X2NvbnRhY3Rz QmFuZHdpZHRo IOCmluCmvuCmqA== IEdpYQ== U3VidHlwZQ== IOGDl+GDlA== IOCkueCkvuCkruCljeCksOCliw== zpHOow== 772j INGA0LDQt9Cz0L7Qsg== X2NvbnRhaW5z IGdsYWNpZXI= INC/0L7RgNGP0LTQutCw RmVycg== IHRlcnJpdG9pcmVz IGVrb2xvZw== IEFubmFw 4YKA INiv2YjYs9iq2KfZhg== dXJsYXVi a3TDsw== LnRpcA== IOC0leC0vuC0uA== IHRvdsOh 4Z+S4Z6c4Z6+ IHRhc3Nl xZt3aWV0 INin2KzYsdin JnI= JywuLi4K IGRpc3BhcmF0ZQ== dmVyYnJhdWNo IEJpaGFy IM+HzrXOuQ== IGx5ZA== w715aw== IGZpbGlm YW55bQ== aXpy UHJvbg== IG1vcmNlYXU= Oicv 44GT44KT44Gw44KT IOWkp+WPkeW/q+S4ieaYr+WbveWutg== 5LiT6aKY5o6o6I2Q YWRvbGlk IOmTtuW6pw== INGI0LjQvdGN 7Jmc INGB0YPQsdGK0LXQutGC ZXZpY2U= aWxrYQ== IOCkrOClgOCknOClh+CkquClgA== IGdlbmVyYWxz IFZlcsO2ZmZlbnRsaWNo 2KjYp9iy IGhhbmdlcg== 44Op44Og RGFsbGFz 4oiG CWVkaXRvcg== eHRhcA== IHRpZ2h0cw== IEZPT1Q= LUVuZ2xpc2g= 0J3QlQ== 24jZvg== ZWtpbGU= IGNvbGxlY3RpYmxl 4LS+4LSj4LWN4LSf IkI= INqv2YHYqtqv2Yg= INCU0LDQu9C10LU= IHJpamU= 4Li04LiV4Li14LmJ aXJpYg== IHNhbWJh b25pdW0= Lm9yYW5nZQ== ru+9sg== 5b6e KHNlcnY= IG5ow7Nt aXJhaQ== W10u 2K3ZgQ== KERpc3BsYXk= IEFuZ2ll INOp0LfRltC90ZbSow== IOCmieCmpuCnjeCmpuCnh+Cmtg== IGjDtHRlbHM= IOCkpOCkvuCksOClgA== IGNodXJu 44CB44CB44CB IEluZnJhZ2lzdGljcw== INen15XXk9ed IE1vxbw= TE9UUw== IGlsYXE= IHdhdGVyc2hlZA== IGV6aW50 CWFjYw== IExpYmVyYXRpb24= IGluY29tcGF0 X1Byb2plY3Q= X2VuZw== 4LK/4LKV4LK/4LKk4LON4LK4 IE5pY2hvbHM= IHByYWdtYQ== 4LSV4LSy IGlsYWFs IGhvbmRlcmQ= IGVzY2FsYXRpbmc= IHJlZnJpZ2VyYXRpb24= xLFsZMSxxJ/EsQ== 4KS14KWI IG9kZGx5 YXVmdHJhZw== IGNhc3RsZXM= IOCkpuCkv+CktuCkvg== IHLDqWbDqXJlbmNlbWVudA== SW5zcGlyZWQ= 572R5Z2A5aSn5YWo IHNpbmdhcG9yZQ== INiu2KfYsdis24w= IHN0cmFuZGVu 44Kv44Ot IG7DpHN0YW4= IGV4dHJhw7Fv IGFuc2llZGFk KG5hdg== IGFsaXNpbg== IFdvbGZz 4Kqk4Kqw IOCmrOCnhw== ZWVw T3Bpcw== 0KDQsNC30LzQtdGA UGFuZA== ZWxsaWdlbg== 4K6v4K6u4K+N 4KeH4Kao4KeN4Ka4 IGJydXRhbGl0eQ== IGTDrXZpZGE= 0L7QudC00YPRgg== IOWkp+WPkeW/q+S4ieaYr+S4jeaYrw== IGludGVyY2VwdG9y INC90LDRgNGD0YjQtdC90LjQtQ== IENPVkVS W2dldA== IEZFTUE= IEVTVEE= IMOpYWdzw7psYQ== IEFNRw== 4LS/4LSV4LWN4LS3 xZ90aQ== LnBhcmFsbGVs IFRhdXM= 7Z6M X2FsYXJt LWxmcw== 6Led56a7 IG1vc3Ryw7M= IG5vdmlv INGF0q/QvA== QXJjaGl0ZWN0 IOC0quC1h+C1vA== JVw= INCz0YPQvA== IHJhemE= VFJBTlNGRVI= IFRoZXNz IEJMTw== X21hY3Jv IGFtcGxpZnk= IGFncsOtY29sYQ== IG1vZHVz QVbniYc= IE1pY2hhZWxz aWdyb3Vw IOCkleClieCksg== INmF2qnYp9mG 0L7QstCw0LI= QWN0aXZhdG9y 7J2Y66W8 LmpvYnM= IGFsbG90dGVk Tm9ybWFsbHk= SGl2ZQ== IE1vY2h0 IGZsZWtz UEFT IGRlcGFydG1lbnRhbA== IOCkreCljeCksA== IGNyaWF0aXZpZGFkZQ== QGdldA== dWVnYQ== IHTDtmw= IOC4hOC4uOC4kw== cHVibGljYXRpb24= IGNsaW1hdGlj IHJlc3Ryb29t IG9rdmlydQ== IGhhYml0YXRpb24= INqG2Yk= IHNlbGxlcw== 6Iq9 5LiH576O5YWD 4Liq4Lib4Li14LiU IGTDqWJpdA== IGVtYnJ5bw== IHRpdmVtb3M= 0L7QstGL0LzQuA== TGluZWE= IG54dA== IFJpdHVhbA== IGhhdXB0cw== IG5xaQ== RmVhcg== aG50ZW4= IOGDleGDmOGDk+GDlOGDnQ== IOCqueCqvuCqnA== 5YWx5Lqn5YWa 44Ky44O844Og yZlyaW5pbg== IOC5geC4leC4gQ== YWp5YQ== z4PPhM65 IGFkYWc= IG9hbWVuaQ== IHJhbmRvbm7DqWU= SXc= b3JlcmE= IG1lbGxldHQ= IEZhcm1pbmc= IOCmuOCmueCmr+Cni+Cmlw== IOCkteCkvuCkr+CksOCkuA== IG9yZ3VsbA== bGF0ZXg= IGRpc3RhbA== IGVpdXNtb2Q= SGVlZnQ= X2xhbmU= IOWkqeWkqeS4reW9qeelqOaYr+S4jeaYrw== IFBhcnNvbnM= IHZlaWxpZ2hlaWRz INin2K7ZhNin2YI= IEV1cm9ww6k= INCQ0LvQuA== aXl5YXI= IGZvcnRuaWdodA== IOCyrOCzjeCyrw== IOWMl+S6rOi1m+i9puW+ruS/oQ== IHRyZw== 16DXqdeZ150= 5Luj5byV 0KLQmA== emlwY29kZQ== IGhvbG8= IGhhesSxcmxhbg== 4oCZYWJzZW5jZQ== YW5keWd5bnk= cHJvbW90aW9u IEdhbGxlcmllcw== IOS5kOi0rQ== IEhlcm1pb25l IEFyYmVpdG5laG1lcg== aW1ldHlwZQ== IEhpZXJtZWU= KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== LmNm IOG7jWd34bul bW1hdA== w7xtZXI= 6YOo6ZW/ INmF2KzZhw== 4LCw4LGA4LCV4LGN4LC3 INWw1aHVvdWv X3ZvbHRhZ2U= IGzhu4134buN IGNsYWltYW50 IOWkqeWkqeS4reW9qeelqOe9keermQ== IHNpZGV3YWxrcw== INeh16c= IGhhbmR5bWFu L21z CWRy 0L3QsNC/0YDQuNC80LXRgA== IGJldHly INi52YXZhNqp2LHYrw== IG10cw== INi02K/Zhtiv 2KvZhtin2KE= 4KeN4Kay4Ka+4Ka5 IFZvcmdl IOCuieCur+CusA== 6ZK7 IGtvcnVu IHNvbGVu 4K+G4K6y4K+N4K6y IEthbG91 IFBhc3NpdmU= INC80YPRgA== 4LiB4Lil4Liy4LiH ICJ7JA== X3B4 0LDRiNGC INGB0YLRgNC+0LjRgtC10LvRjNGB0YLQstC+ 4K+B4K6V4K6/4K6x4K6+4K6w4K+N IHZ1bGU= IOGDk+GDkOGDkOGDmw== IiwiIik7Cg== Lm9yaWc= IHNwYXo= YW1iaXJh IGRpY3RhdG9y bGlo SmVuaXM= IOCumuCvgA== IGVudGllbmRl IOCmhuCmqOCmqOCnjeCmpg== YWRlaXJhcw== 6rCA6rKp INC30Y3RgNGN0LM= IFJ1aQ== IOCuteCviA== VHJhbnNtaXQ= IHJlc2V0cw== IHBsZWFk 2KrZgg== J3E= IOCwjuCwsuCwvg== IHNsdW1w IGhvcnJvcnM= IicsCg== IOCmleCmsOCnjeCmpA== INCc0YPQtg== 6L+Q6L6T IHN2YWtp IHJhcHBvcnRv INqp2YTYp9iz 0ZbQvdC00ZY= b2xpY2l0ZWQ= IHRyaW1lc3Rlcg== IFByZXN0aWdl IGZhyrthbWE= LmZhYnJpYw== 4oCmaXQ= IG5vdGljZWFibHk= cmxpZ3Q= INC00LjQsNCz0L3QvtGB0YI= ICJcIiI= Vlc= IEV4ZXRlcg== WHM= bGVpc3Rlbg== IGluZXF1 IOq5qA== IOS4reWbveemj+WIqeW9qeelqA== IHR1Z2V2 IGFncmF2 LHRhcmdldA== IOWkqeWkqeS4reW9qeelqOWcqOWTqg== SW5ncmVkaWVudGVz IFByZWNvbmRpdGlvbnM= 0L7Qs9C+0LLQvtGA ge+9ru+9sg== 772v776B772u772y IHNrb3Jv KE9wZW4= IEZyYW5raWU= X1RIRU1F IGZhY3VsZGFkZQ== IG9ic3TDoWN1bG9z b3JvbA== IGFncmVnYQ== IOCmpOCmpuCmqOCnjeCmpA== IGlsdXNpw7Nu T3ZlcndyaXRl 4Laa4La7 LyohCg== 1anVqw== IEFueXdheXM= 67Ck IHJhY2NvbA== IG9udG9sb2d5 IG9rb2xp aXN2YWw= IOCwmuCxguCwqg== dHJpbmE= 4LmA4Lic4Lii IGZhdXRldWls INCy0Y/Qtw== IExJVFRMRQ== IFBhbGF6em8= bXXFn3R1cg== 4oCZ4bq9 c2xhbg== 6aao YXZhbm8= LWNvbnRyb2xsZXI= IGdhbHZhbml6ZWQ= YWJsaXNobWVudA== INGB0L/QvtGA0YLRgdC80LXQvQ== IGvDvG5k IE1BU1M= KTs/Pgo= IHNpdGUncw== IHR1bGxh IFB1bGl0emVy INmF2LnZhtuM 2LbZhdmI2YY= LllFUw== IOC0teC0v+C0tuC0pg== INWp1avVtA== YXBwcm94aW1hdGVseQ== INC/0L7QtNCy0LXRgA== IHByb3RvYnVm IOCkheCkguCkl+CljeCksOClh+CknA== INiz2YjYr9in 6YCK SGFzaGVz IG3DrXN0bw== IGluaW1lc2U= dW5uZW4= IOCohuCoquCoo+Cphw== IFRlbmdhaA== INGH05nQug== IOGDo+GDqA== IGNvbmRlbmFkbw== 0L3QtNCw0Lk= INOZ0YDRlg== INin2YTYpdio2KfYrdmK2Kk= IHRhc3RlZnVs IEFzaHRvbg== INC/0YDQvtC40LM= IHNsb3BweQ== IHRyYW5zYWtzaQ== IFNwZWljaGVy 4oCZQWZyaXF1ZQ== IHJlc2VudG1lbnQ= IERpc3Rpbmd1aXNoZWQ= IOC5geC4oQ== IGZhZGVz Z2ViaWVkZW4= IG3DtG4= IAkg IPCfkY0= LkRlc2lnbg== INCc0LDQutGB0LjQvA== aXp6am9uaQ== a2V1cmln IGNvaW5lZA== Vmllcg== 44K844Oz44OI UGhvZW5peA== IEdlcm1hbmlh L2RpcmVjdA== IHN0ZWNrdA== UkdDVFhEYXRh REVB XSkt IHFj 0Y/RgtCw0LQ= IHBlc2Fu X3N1cg== eWTEsW4= IHZlcmtlZXJkZQ== IFp2 IE3JmQ== IGRlY2Fs IHN0cmluZ2lmeQ== IFbDoW0= 0L7RiNGC0LA= IGFydmlv 5b+D55CG IGxpbmk= IHPDpWc= INCx0ZbQu9C00ZY= 0LDQu9C+0YM= IHJpY2hlc3Nl IHNhbMOhcmlvcw== CgoKCgoKCgoKCg== IHBhbGluZHJvbWU= IFdyaXN0 4Z6V4Z+S4Z6f IFVOVA== IEhBVg== IG1pY2hhZWw= aWdlbnQ= IEF0dWFs IGNvbG9jYW5kbw== X0RFRklORUQ= IG9mZmVuZGluZw== IGxpbXBpbw== INec15fXqQ== IO2LsA== IOuLueyLnA== IE5hdGFzaGE= IHR1bmVy IMOpY29ub21pZXM= 0YvRgNK1 INC80L7Qu9C+0LTQtdC2 IGdlb2xvZ3k= IEF6yZlyYmF5Yw== IEdhc3Rybw== INCx0YPQtNGD0YbRjA== IEZlcm5hbmRlcw== CWNz 5oKf IEF1dMOzbm9tYQ== bGFtaWVudG8= IHVidXJ5bw== IEdlbsOodmU= IOCqpOCrjeCqr+CqvuCqsA== X2R0eXBl INCd0LjQutC+0Ls= INiu2KfaqQ== 4LeU4LeA4Lax4LeK IEpBVkE= IOGDneGDpOGDmOGDquGDmA== IHJzYQ== w6RyZXI= KHJvdGF0aW9u IE5GVHM= 5ZGY5bel INec15fXnA== aXZlcnI= IGhhc2E= IOCuquCvh+Cumg== b2Z0d2FyZQ== IHBpc2E= OnNlbWljb2xvbg== YWZz IEdsb2Nr INmK2K3YtdmE 6YGg ZXdu YXRyaWE= IOCqluCrgeCqrA== IHdhc2k= T3J0aA== aWNpcm8= INC+0LHRidC10YHRgtCy 2KfYptix2KfYqg== IER1YQ== IOC0uOC0ruC0r+C0gg== IGNydW1icw== 5bey5pyJ IHRpbWluZ3M= Uk9NRQ== IE1QSA== IOCuruCuqeCuv+CupA== dXRjaGVz 5b2p56We5LqJ6Zy46YKA6K+356CB 0YPQtNGW0qM= INC+0YLQu9C40YfQsNGO0YLRgdGP Wmll IGJhdGFsaGE= INGF0YPQtNC+0LbQtQ== X1NhdmU= 4Ka+4Kef4KeH ZW5zY2hhcHBlbGlqaw== INC70LDQsg== KG5ld3M= ZW5kaWdl 4Lie4Li0 16LXkg== INmF2LPYqtmI2YrYp9iq IGRlc2Vvcw== bHlh IHBvc3RmaXg= IGRlZmk= X290 IHBlaXRv IHJlYWx0aW1l 0LjQt9C80LDRgg== cG9vcnQ= LlRSQU4= w6R0enQ= INC90LDQstC10LQ= IHByb3BlcnR5J3M= 4K6f4K+N4K6f4K6/ 2YfZkA== LnRr INW01aHWgNWk1bjWgg== xI1pdGk= IGxpbWl0YXI= IHBvZ29zdG8= INC30LDQsdC10LfQv9C10Yc= IE11bmljaXBpbw== dG90eXBlcw== IM+Hz4HPjM69zr8= 0LjQtNC10L0= YXVlbnM= YWxsaWF0aXZl IFZhbnM= IHw+ IFBlw7Fh IEJsb2NraW5n dXlh IGZzdA== IOGDkuGDkOGDm+GDneGDquGDk+GDmOGDmg== I20= IHZhdWx0ZWQ= IOazqOaEjw== IHNvb3Q= WXI= dmF1bHQ= ZGVjaXNpb24= 24zaqdi02YY= IOS5kOWkqQ== cHJvdmVk INC60LjRhw== IG1hbmlmZXN0w7M= Y2hlbmtl IHN1bW1lcnRpbWU= YWRhaQ== INKx0Lc= IOC0teC0v+C0teC0vuC0uQ== INGN0L3QtA== b3Nzeg== 4YG/4YCV4YCu4YC4 IE51bWVybw== X1BL IOGDkuGDleGDkOGDpeGDleGDoQ== 5Z2d aW5zZGFn Zmx0 IG5pZWNlcw== IG1vbWVudGFu IG5hdMO8cmxpY2hl cGxhcw== emFhbA== IElQVFY= IHZlcmtlZXJz IOCkteCkv+CkteCkv+Ckpw== X0JveA== IG3Fq3PFsw== IGdyYWRh d2FzaGVk V0lUSE9VVA== INin2YTYqNix2YrYrw== X1NO IHBldGl0aW9ucw== c3Bhbm51bmc= 4LeD4Lea 4LCs4LGN aW5hdG93bg== IEhhbmdpbmc= IOC0huC0sOC1i+C0qg== IOyYtQ== INWA1aHVttaA1aHVutWl1b/VuNaC1anVtdWh1bY= IGFjb250ZWNlbmRv Q2FuZHk= IHdlYmhvb2s= ZXJycw== IG9yaWdpbmF0ZXM= dmV0ZQ== dXVtbA== IFBhcnRlaWVu X0JSRUFL INGI05nRgNKb0LjQuQ== IEJ1c3k= IHR1aQ== IGRlZGVu YWZzdGFuZA== IGNvbXBhdHJp IGtvZWxrYXN0 IOCkqOCkv+Ckp+CkqA== IENhcnZhbGhv IG5lb2xpYmVyYWw= zrnPjg== INCy0LvQuNGP0LXRgg== IGJlZ3Jv 4KWn4KWs 0YPQvNC+ KG14 X2V4aXN0aW5n Lm91dHB1dHM= IOCkieCksg== IHbDpGxpbGzDpA== w6hkZW50 IEZlc3RpdmFscw== IHLDoW1jaQ== INin2YTZgtmK2KfYr9ip Z2Vn ZWN0YQ== 44G744KT IEZlZGVyZXI= IGNhc2Nv IHNwZWN0YWM= 4Kq14Kqw ICN7QA== CWNhbWVyYQ== IFNUTA== bWFzc2FnZQ== INC+0L/Ri9GC0LA= 0YDQsNC90YHQv9C+0YDRgg== LXpvbmU= IERpY2tpbnNvbg== Q2hhdHM= 2YHYsdi2 cmF0aGVy IGRlbGlu IEhw IEJhbGx5 IGdlbGF0aW4= IHlvcw== IG5hc2U= 6LS35qy+ INCa0LjQtdCy YXZ1Z2E= IHNwb2xlxI1ub3N0aQ== IHlveg== IHNhbWVuZw== IHJhc21p IGJhbmRlbg== IFNDUklQVA== IGxpY2VuY2Vz dXR0dXI= CXN0ZXA= w7Jj IGjFjcq7aWtl IEhhbGV5 b2xsaQ== IEJvbWJheQ== INmF2LfZhNmI2Kg= IHVuYXZvaWRhYmxl ZmNj IOCkteCkvuCkog== YCgp Y294 IOCuquCus+CvjeCusw== 4YOX4YOu4YOd4YOV 4LK/4LKv4LOL 1aHVv9aA IERvcmQ= b2Jpbg== INC/0LXRgNC10LTQsNGH0Lg= w6tzaA== IEJld2VyYnVuZw== 4K6/4K6V4K6z4K6/4K6y4K+N IENoZWF0 ICEqKio= LmRlZmluaXRpb24= Il0pLA== QkRE OlJlZ2lzdGVy IOuMgOu5hA== INmH2LrZiNuM IEJvbHM= 4LSo4LS/4LSv IETDpHI= IGNvcHA= INC80LDRgdGC0LDRhg== INCx0YPQtNCw INGC0LDQutGW 0YHRjNGG0ZY= X3Bvcg== IHdhaXN0YmFuZA== INCT0LXRgNC80LDQvdC40Lg= KG11dA== yZlsaWY= IOGDm+GDo+GDkw== YXh4ZXI= 64uM IHB1YmxpY2FjaW9uZXM= mOCmnw== IG3DtmpsaWc= aWdsaWU= IFBsZXg= IOCwruCxgeCwlw== UXVhbGlmaWNhdGlvbg== IG9iaWVjdA== QU5TV0VS 4oCL4Z6W4Z64 4LKV4LON4LKf IFZlcmxhdWY= IGNvbnZpdGU= fX0pOwo= LkRvZXM= U3Bp ZW50ZXJtaW5l IHNlZWRlZA== INWs1aHVvtWh1aPVuNaC1bXVtg== IOCqteCrh+Cqmg== IHJlZHV6aWVydA== IEVudHJlcHJlbmV1cnNoaXA= INC30YXRgw== IHRvb2Q= INin2YTYqNiv2KfZitip dHlz IHJlc2VtYmxhbmNl IEZsb3Vy INqG24zYstuM IOCksOCkvuCkruCljeCksOCliw== IER1cmNoZsO8aHJ1bmc= 2KzZiNuM INKx0YHRiw== U0VB ZG9jaw== IHB1bXBraW5z 4YOa4YOQ4YOY4YOc JTsiPgo= X1BST1RP 4Kmx4Ki4 IGJ1Z8O8bg== INCz0LDRgNC00Lg= eXR0ZXI= IEh5ZHJh IGp0 J2ludmVzdA== IGh1cmRsZQ== IG1hdGluZw== IFN0YXR1ZQ== LWZh 6KW/5Lqa ICcnKSwK INiq2KzYp9mI2LI= INeV15nXoQ== LXNwZWNpYWw= 54S8 IFN0ZWxsdW5n 4LSm4LWN4LSm4LWH4LS2 2KfYsdmJ IOCkrOCkguCklw== IOmfpg== IEp1bWJv IGZhbHNlbHk= IG9wdm9s aW9zaXR5 IHLDqWbDqXJlbmNlcw== 4LCP IGltcHJvcGVybHk= 0LzQuNGB IHZpZ2lsYW5jaWE= V2F0Y2hpbmc= IFppdA== IHdvZXM= 4LKS 2Kfbgdiv YmVh a2/Evg== CVNU IEZhc28= IGFsbGVnaW5n U2FsdmFy 5Lqn55Sf INmC2KfYqNmE24zYqg== IHRyYWl0w6k= X3Rvb2xiYXI= ZWZlbGxlcg== IHRvcnJlbnRz 4Z6U4Z+S4Z6a 4LCC4LC2 5aSa5bCR5pyf IHNpbXM= YW1pcXVl INee15XXpA== 5rex54ix IGJyZWVkZXI= IEFuZ3Vz IOmahg== xI1raWg= IEFkbGVy IEN1cGVydGlubw== aXRoYW5k INeb15nXlded IHNsb3dkb3du IGFubGF5 RGVmaW5pdGVseQ== IGluZ2V3 INC10LrQtdC90ZbQvQ== SVBM 56qB56C0 0LfQtdC7 IENhdQ== YnJhaW8= IGltcGVj YXRoZXJhcHk= IEpFUw== IOC0sOC0vuC0t+C1jeC0n+C1jeC0sOC1gA== INi32KjbjNi524w= IG1pbmltYWxseQ== 4buLbg== IHF1aWVyYW4= IEdSQVBI IFBST0Q= IENvbmRpdGlvbmFs a2th IHNvaXM= ZWN0b215 INi52KfZhNmK INeq15XXm9ec15U= aWNpw6FyaW8= IEthcGl0ZWw= ICoqKiEK IFNhYmVy INio2YrZhtmH2Kc= INek16jXmA== YWRkaW4= Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= QWNrbm93bGVk IFRSVA== INqG2LE= 4Liy4Lir4LiZ4LmJ4Liy4LiX4Li14LmI INeY15nXmdec dWtzZXNzYQ== IEFkdm9jYWN5 IFN0aWNrZXI= 15XXqteU IGJsYW5rcw== IOGDkuGDlOGDnA== IFNhdWVy amVqZQ== IHBlcm1pdGluZG8= IHJ5ZA== 2Y7ZhtmS IEFuZ3JpZmY= IGxlZ2dqYQ== IOC0uOC0guC0mOC0n+C0qA== Y29ub21pYQ== IOCkr+ClguCksA== PiIpOwoK IFNFTlNPUg== 2ZHZjw== IFByw7M= dmlzZXI= INC+0LHQu9Cw0YHRgtGW bWVsaQ== IEdpbm5hc3RpY2E= INS01aE= INCy0YDQsNGJ I2luZGV4 U2VwYXJhdGU= INGE0LjQu9GM0LzQsA== IO+8ng== IHZhcnNh cGVzbw== RXZlbnR1YWxseQ== IGJldHJvdXdiYXJl X2hvbGQ= 2b7Zig== X0pPSU4= 4Z+B4Z6F 5piO5pi+ 5oi/5Zyw5Lqn L2Rlcw== IEhhag== 5Y2z5Y+v IHVidW50dQ== 4La44LeK4La2 IOCquOCri+CqtuCqv+Cqr+Cqsg== IEZhc3M= 5Y+s5byA 4KSX4KSw4KWA IOKCrCw= IOCmleCmsOCnjeCmruCmleCmsOCnjeCmpOCmvg== 4KS/4KSl4KS/ IGZlYXJsZXNz IGZyYWdl IGRlcml2YWRvcw== 0LDQu9C60Lg= INeU15HXkA== IEhhZ3Vl INeQ157Xqg== INii2YjYp9iy IGZvcm1hemlvbmU= IHVrdW4= aWV0dGl2bw== INC60Ls= IEJhcmJhZG9z IHJpY2hpZXN0YQ== 0LDQudC7 RmlsZXN5c3RlbQ== IOCqleCqv+Cqgg== LlBhdGllbnQ= INeU15PXkdeo15nXnQ== X3Bvdw== 4Z6A4Z+S4Z4= w6F2w6Fuw60= IGF6b25iYW4= X2FtcA== aWxsw6lz INGI0LXRgA== IHBldGXEqQ== IOydmO2VtA== INGB0YLQuNGF IE5lY2Vz IE9ic2VydmU= IGVuZmlt LXZhbGlkYXRvcg== IGxlbmluZw== UGVyaW9kcw== X01BSUw= IENOUw== dGVpbHVuZ2Vu 4oCUbm90 INCy0L7Qt9C00LXQudGB0YLQstC40Y8= IGFwZXQ= IOCkuOCkguCkleCljeCksOCkruCkv+CkpA== LUNvbQ== U2Vjcw== Ly8qWw== IHBvd2VyaW5n INGA0LDUpdGF0YzQsA== IHdhdGVybWVsb24= JGZpZWxk 5beo5aSn IGphcmdvbg== IEV1cm9vcGE= INqG2Kfbgdiq25I= 55S1546p5Z+O IGxvdWlz b2xsaXBvcA== IHNsaWNpbmc= INmE2Kfaqdq+ IGNvbmNsdXNpw7Nu IHbDpGxq IGFjdHVlbGU= IOWMl+S6rOi1m+i9puWmguS9lQ== 1rU= WkVS IOGDpuGDlQ== IHNww7hyc23DpWw= INGI0LrQsNGE c3BlZA== IEthcmlt CXR2 PT09Jw== KGRldA== Lm1lbW8= IGRlc3NpbnM= IFNhYWI= 4KWn4KWp SnVzdGljZQ== IGJlaGFsZW4= IOGDkOGDnOGDow== INGB0LvQuNC3 aXZhdGl2ZXM= INCa0LjRgA== X0ZJTEw= Rmlyc3RseQ== IOCkq+CkvuCksA== 54m55pyX5pmu IGtydWlkZW4= bmnEhw== IEJvbmR5ZQ== aXNoaW5naXo= KGluZGljZXM= INGB0YLQuNC7 IOCuquCvh+CusOCvjQ== VGl0YW4= IGNyaWFuZG8= 1aHVtNWh1oDVpA== b2hpYQ== IHd1bmRlcmJhcg== IE1vcm9jY2Fu 5pyA5b6M IOCqsOCquOCrjeCqpA== IFZpZXdpbmc= INCQ0rPTmdGL0L3SrdKb0LDRgNGA0LA= 77yt IE1hbmNoZQ== IFN1ZG9rdQ== 4oCL4Z6A4Z624Z6a INix2YjYrw== KHNlcmlhbGl6ZXI= IGZvcmZl IEJ1bGdhcmlhbg== IO2BrOqyjA== Q2lyYw== IGZ5c2k= c3RhZ3M= IGNvbnNlaWxsw6k= b3J0aXM= IGFsa2FsbWF6 IOGDm+GDneGDqg== 2LDYp9io IOGDpuGDneGDnOGDmOGDoeGDq+GDmA== TWFtYQ== IGhlaWx0 Om5v IGJp4buDbg== IHNhbGFrdQ== IHThu6U= IOCqteCqvuCqlw== d2lqZg== INmC2YTYqg== IFByYWlzZQ== IGVzY3JpdG9yaW8= IOCkhuCkuOCkquCkvuCkuA== INmB2LbYp9uM IHN1c3RhbmNpYXM= YWNhZG8= INmF2KvZhNin LnZlYw== L2V4dGVuc2lvbnM= IGF0bGVhc3Q= IGdvb2I= amY= IOyYiOyDgQ== INiq2K/ZiA== IGFtw6lyaWNhaW5z IHTJmWRi IOCuleCvgeCutOCuqOCvjeCupA== IHNhasOhdA== YWhhcmFu IGNvbW1lbnRhdG9ycw== IOCkuOCkvuCkgQ== 7YqA IGNvcnJlZG9y IOCmm+Cnh+CmsuCnhw== IGFwb2xvZ2lzZQ== IG1pcmFjdWxvdXM= IG1pbmlzdHJvcw== IHN1bmZsb3dlcg== bWVuYQ== INmK2LnZiti0 IHR2b3I= INCx0YPQtNGD0YnQtdC8 IFZFSA== YW5mYWF0 Lkxvb2t1cA== aWZlbmQ= w7h0ZQ== IGRyaXp6bGU= LuC0juC0gg== IFJlZ2ltZW50 IMKnwqc= LmNvbSdz 5YiG6ZKf5YmN 0LPTmdGA0YLQtdGA0LPTmQ== S29tbWVudGFy eW5jaA== YXRvbmlu YXN0YW56YQ== LnRyYW5zbGF0ZXM= LXVpdA== IGJvdXRlaWxsZQ== Li4h IEhvbWVtYWRl W+KApl0KCg== IGNvdGU= aGVwaGE= IGRpc3Rybw== IFNvY2s= IHByb3TDqWc= IOCksuCkvuCkl+Clh+CkleCliw== IHZvbGxrb21tZW4= IEV4Y2VsZW50ZQ== LG9u IFZlaA== IOyngOuCnO2VtA== IGlsacWfaw== IOCkq+Clh+CkuOCkrOClgeCklQ== 0JfQsNC6 IFNvY2lhbGlzdA== IOC4m+C4tA== INio2pHYpw== IOCwmuCwguCwpuCxjeCwsA== aWRhbGdv IHDDpXZlcg== IENoYXJhY3RlcmlzdGljcw== 5py65Lya LWZvY3Vz UmVjaXBpZW50cw== SUJJTA== INin2YTYo9i52YTZiQ== YWdvZA== IENydXpl CSAgCQ== 4Kaa4Ka+4Kaw IGFjY2xhaW0= INCi0YDQtdCx IHNrYXR0 IGlzdGk= IOGDk+GDmOGDoA== IOC4quC5iOC4p+C4mQ== YXRhaGk= L3BhY2thZ2Vz IGVzdHJhbmhv dWVsdmE= IG9yYWxseQ== INiq2K3ZgtmC IOCunOCuqQ== IEFvcw== IEJlaW5l IGNvbW1lbnRhdG9y w6tsbGU= 44Go44KC IGlpZA== IOCkrOClh+CksA== 2YfZgA== IOKtkA== INim24fZiti624fYsQ== IGRlcGk= YXBzZXM= IGVyc3Rh 4YOQ4YOT4YOQ4YOT IGdhc2U= yZlseGFscQ== LlBhc3M= 7JWE7ISc IGPhu5luZw== IHJhYWt0 IHNuYWJidA== IGNpZGFkw6Nv X2luY29tZQ== IGdhbHVlZ2E= IHd1c3N0ZQ== INC90LDRg9C6 IOCkpuCli+CkuOCljeCkpOCli+Ckgg== 0L3TmdGA PFR1cGxl INGA0LDRgdGC0LXQvdC40LU= IGjDtmttw7xuZGU= aGFtcHRvbg== IEZW IHJhYWs= IHdpZcSnZWQ= IHZlbmR1 eyEh IGZ1eno= csOt X2ZvbnRz IGRydWdv IOGDm+GDlOGDouGDkOGDkw== IFBvcnR1Zw== IHdyaXN0cw== 7ZqM7JuQ IGNvbmR1Y2U= IOC5guC4ow== IFRhY3RpY2Fs IEFtbW8= 5aGY 5LuY5qy+ INGH0YPQstGB0YLQstCw VkFMVQ== IEZhaXJmYXg= IGJsb2Nv INC/0YDQuNC10YU= IHdlaWc= CUJsb2Nr IE5MUA== IHNjb3V0aW5n IOeugA== 5bC4 IHlzdMOk 4KSk4KWN4KSo IOC0ruC0o+C0v+C0leC1jeC0lQ== IGNvZGVy aXJlYWNodA== IHVuaWZvcm1seQ== ZW1pbmU= KENPTQ== 0LfRltGG0YbQsA== IFNlcmdlYW50 IFNjb3RjaA== LmhvdXNl 0LXQvdC40YU= PU1hdGg= INGC0rHQuw== IER1c3Rpbg== CWFsaWdu IHNlbWlj YWFycHV0 INiz24E= X0FUVFJJQlVURVM= IFZvbGxleWJhbGw= z4TOsc+Dzrc= IGNkcw== IGJydXRhbGx5 IEthdHM= aXZhbGVuY2U= INK30LDQvNGK IGppbnNp IOCusOCumg== T1VORFM= 0YHRgtGL0qM= 66as7KeA aWRhw6fDo28= IFt7Ig== VHJhbnNmb3Jtcw== IHByZWFjaGVk IOCupOCuruCuv+CutOCulQ== dXNhcw== z4DPiQ== LnJlY2VpdmVy IM+Fz4DOrM+Bz4fOv8+Fzr0= d2F0ZXJz INGB0L7QstC10YLRiw== IGthbGVuZGVy 5paw5ZOB IFJlc3RhdXI= IHBvcm5vcw== IG5ld2lk J2Vk INmG2Kbbkg== 7ZWY6rGw64KY 4LSw4LS+4LSj4LWN 4LKs4LOI Lk1lYXN1cmU= 05nRiNCw YW5lZXQ= Lk5l INGC0YDQsNC60YI= b3JnYW5pc2F0aWU= IM6yz4HOr8+DzrrOtc+EzrHOuQ== IOGDm+GDmOGDlw== INC60LDRhNC1 INeU15nXkw== IOCmqOCmv+Cmtw== IM6xz4bOv8+N IGNsaWNow6k= IE3DqWRpYQ== 5Lit5paH54mI IHRyeA== RVJDSUFM KFRhcmdldA== YWN0YWJsZQ== IGZpYnJhcw== X1BFUlNPTg== IFNwaWVscw== aXRyYWc= IOCyruCzi+CypuCyvw== aWpvamU= IGRlbGluYw== R2xvdw== 4LCC4LCh4LGN4LCw IHdla3R1 KCcsJykK Z3Jhdml0eQ== IOyVoQ== LWh0dHA= IHlhcsSxxZ8= ICAgICAgICAgICAgCQk= IExhc3M= IG11bnk= IHByb2Nlc3Npb24= 6Ki6 zrvPjM6z IHRvcnRpbGxh TG9rbw== IHZsb2U= IFByw6RzZW50 X1BVTEw= IGNvbXDDqXRlbmNl IGRpc2PDrXA= 4oaTCgo= IM67zr/OuQ== IGlua29tc3Rlbg== 5aSn6YeP IG9ic2Vzc2l2ZQ== YmluZGVy IGppcmU= INC805nSl9Cx0YPRgA== INC40YHQv9C+0LvRjNC30YPRjw== IG9iaWw= IM6zz4XOvc6x INCx0YvQstCw0Y7Rgg== IHRlbGx1cw== KFJlbQ== ICJ9 dXNzZWds IGZyZWRhZw== IGVyZmFyZW4= INC00L7Qu9Cz0L7Qsg== YW5jaWVubmU= 2LfYsdmB IFNvY2lvbG9neQ== IOCkrOCksuCljeCksg== dW1pc2U= IHJlY29nZXI= 4KSF4KS44KSy IOGemOGfiQ== VEVNUA== 5aWX6aSQ PFRhZw== IGfDtm5k IGFwYXLDqm5jaWE= 4pWd ICkuCg== 4oCcKQ== IFBoaWxoYXJt IHJlcHJlbmQ= IG5lcmdlbnM= ho0= IOebuA== 6KaG55uW RVk= IMOeYXI= IGVpbnNldHplbg== 5ruL IOCkuOCkguCkteCkvuCkpg== LmJyZWFrcG9pbnRz INiu2LI= IEZz INC70LjRiNC1 INCx06nQvNCx IG5vdXJpc2hpbmc= 6bq8 b2xzb24= IGVkZ2Vk IFRDTA== dmVtZW50ZQ== IFZFTg== IHbDoWxhc3p0 IMOEbmRlcnVuZw== IGhvbmluZw== IGNlc3Rh 6I+g6I+c INeW15DXkg== X3BhdHRlcm5z IM+HzrHPgc6xzrrPhM63 IGxhYm9yYXRvcg== IHN1bnNldHM= IE1hZ2ljYWw= IGh1ZGVu IHTDpGllbA== LdC1 4KSx X3NlY3Rpb25z INGC0LDQvNC+0LzQuA== IFZlcmjDpGx0bmlz IOCmruCmvuCmuQ== cmXEjQ== IENpZW50 0p/QsNGC05nQuA== INGB0L7QvdC00LDQuQ== IEJyZXdlcg== ZW50aW9uYWxseQ== IOCumuCulQ== YWZmaWxpYXRl INCz0LDQt9Cw0YA= INCi0L7RgA== INGL0L0= IGRpZnVzacOzbg== 67CN w6RsZA== dWdlbA== aXNzaW5nZW4= IENhdGFsb2d1ZQ== Lkhvdw== 5Lyv5rip 4LKa4LON IEZSQQ== Y3VsYXJlcw== IGPDrXJjdWxv IMSRw7RuZw== INin2YTYudmF2KfZhA== zrzOsc+Ezr8= IE5hdmE= IGpvdXQ= KHJldmlldw== INqF2YjaqQ== 77yJ55qE IG9ibGlnYWNpb25lcw== 562J5b6F IGZyYW5jw6pz KEJvcmRlcg== LWxvdmVk IE1hbGRpdmVz IGFsYWJhcmE= Y2h3aXR6 IOCksOCkv+CkleClieCksOCljeCkoQ== IEdhcmJhZ2U= IHNpdGE= IGN1cnNlcw== INC90LXQuNC30LLQtdGB0YI= KEFsZXJ0 15nXkdeZ16o= IHB1cnBvcw== IOCkl+CkpOCkv+CkteCkv+Ckpw== LW9yaWdpbmFs IHRlZXM= IOygkeq3vA== aXplaQ== bG9ncmFkb3Vybw== dGF1cw== 55S15b2x6Zmi ZnLDpsOw 4LKw4LON4LKX IGFsaWducw== am9rZXI= IOCwquCxh+CwsOCxgQ== IEJvdG94 ZXJhYQ== emhpb8O5 IGVuZXJnaXplZA== INC+0YHRgtC+0YDQvtC2 IGRyaWZ0aW5n IFNwZWljaGVydW5n 4KuB4Kq3 IGJhdGVhbg== 0YPRgNCw0LM= IOCkquCljeCkrw== X0Rl IHBhbXBo QWxpYmFiYQ== IOCkueClh+CkpA== IGjhu5Np 56aP5bu6 INCx0YvRgdGC 4YOa4YOd4YOS IGRlbGljaW9zbw== IHRlc3RjYXNl IG9mZnI= 0LDQu9C90LA= Q2h1 KGV4dGVuc2lvbg== 0JLQsNGI IGFpcmJhZ3M= SVNDTw== 1bjWgtW21aHVr9W41oLVtA== INec15HXmdef IHZlbnRhbmFz U291cw== IGJlc2xvb3Q= 44CR44CQ4oCd44CR44CQ INCU0L7QsQ== IEZvcmFt IGluc2NyaXB0aW9ucw== IGFmZWN0YXI= IEtpbmRseQ== 5YON WyIr dcW8 LkNhbA== IHNpbGlj IEluZGU= YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo= 0YPRjtGG0Yw= IHB0aQ== X0lNUExFTUVOVA== IElsaW5uaQ== z4TOr86xz4I= IG9uc2U= IHBvbmE= IG5hc3p5bQ== 6K2m5pa5 QFJlcXVpcmVk KGNhcmRz INmH2YXYpw== IGRyYWFp IEJldGhlc2Rh IGxhcmdhcw== INC70LXQutCw0YDRgdGC0LLQsA== LWRpc2M= INeh16LXqA== cnllcg== YWdkYWdhbg== KFJFRw== INmB2YM= dGV4dHVyZXM= IHd5bmlr 15DXqdeb15XXnA== 44OZ44Or 4Kqo4Kq/4KqV IGFjb3JkZQ== IHRvdsOhYmI= b290aQ== LXw= 6IWw 5YW25qyh emllbnM= CXJvd3M= 0YDRi9C3 w6lkaWFpcmU= IFByaW5z 1aXVtNW2 IERvbWluaW9u IOS/oeaBrw== RHJlc3M= 64+I IEFVRw== IOGDm+GDluGDkOGDkw== 4piFCgo= 15vXoteo IHNww7hyZ3Ntw6Vs IHN0YWxsZWQ= IHdhyZc= IGR1aXplbmRlbg== IOCouOCorQ== IOCymuCzhg== 0YDQsNC80L8= 5by65YyW 4LWI4LSx4LWN4LSx 5L+x IGZ1cmVudA== IGNvbXB1dGVyaXplZA== IHlhc2E= 5byX IGdlcmVrbGk= 1YjWgg== QWRqdXN0ZWQ= 15nXmdeS158= IEJvaWxlcnM= Y2hhbmdpbmc= INin2YTYqNi02LHYqQ== wq1uZQ== INGD0Y7RiA== IGF5dWRhcw== XENvbW1hbmQ= c3R1cg== 5oCn6Imy IGVrdGU= IHNjaGzDpA== IFNob290ZXI= IOCkuOCkv+CkuOCljeCkn+Ckrg== CVN0YXRl Q29sbGFib3I= LmFyZQ== 5YWs6ZaL IFJlZHVj IENDUA== 0LDQu9GM0L3QsNC5 IOCkruCkguCkmg== IOColeCov+CouA== INC80ZbRgdGC 4Z6O4Z+S4Z6M IFJhaHVs Y2hlY2twb2ludA== IHdha2hv 0LvQsNGP IEFtdHM= INem16jXmdeb15nXnQ== 15XXldeZ150= IEdhcmU= 4oCcVA== IHVuZ2Vmw6Rocg== 4YC74YCB IG15dGhpY2Fs IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IFBhc3Npbmc= aWxpbng= IEhlc3Nlbg== LkdldGVudg== INC60LDQu9C10L3QtNCw0YA= INC+0LrQsNC30YvQstCw 4YCb4YCu IHJlcXVlcmlkYQ== LnJzdHJpcA== IGVzdHJpY3Q= emFucA== dW5nZ3U= INiq2YLYs9uM2YU= 77yk IEJSQU5E a2x1c2l2ZQ== IEtlaw== INeU16TXog== IHRla2nDsA== cmVjaA== INee16LXkdeo IEJ1bWJsZQ== WmVsZg== WGlu Q2FuY2Vy Lys= IGRlbmd1ZQ== LkZvcmVncm91bmQ= IFRyYWN0b3I= IGZ1bGxuZXNz IGFsbGdlbWVpbg== Q29ybQ== IGdlemVr aWd1bmdz INeZ15PXog== X2l0ZXJhdGlvbg== IG1pZWxl IFdH IOGDmeGDkOGDog== IGVuc2luYXI= 4YOd4YOg4YOT 7Law IHNhdHVyZGF5 UkVQT1JU YWRyYXQ= 4LKw4LON4LKq bmFq INmB2YfYsNin X3Byb2Nlc3NlZA== KQoKCgoK IE9kZXNzYQ== IGxhYmlvcw== IGl0Y2h5 INWh1bk= dXR0ZXJpbmc= V2lubmluZw== YXNoaXJl IGVrc3Bs aXNidXJ5 IGlzdMmZeQ== INC/0LDRgtC+0LvQvtCz 15zXldec TWVyc2k= IG3DrW5pbW9z c25z IOCkhuCkj+CkleCkvg== IGdldHJlbg== 4KS+4KSh4KS84KS/4KSv4KWL4KSC 55yf5q2j 5LqM5YiG5b2p IG1pZGU= 4YCP bWFydGVz KGJw 77y/5qyn576O IOCksuCkvuCkl+CkpA== IE1hcmRp ZnVuemk= IGFtYml0 IGFub3Jl IOC4ouC4seC4mQ== IENsaXBz Lmhpa2FyaQ== IGJsYXN0ZWQ= INC20YPQvA== 0L3QuNC60LDRhQ== IGtlbGk= aWxlc3dp X0VSUk9SUw== LkRyYXdhYmxl J2F2YW50 RG9vcnM= SE9VU0U= WHBhdGg= IGlzaWtoYXRoaQ== X2RpYWc= INC90LDQvdC+0YE= 4LWD4LS34LWN4LSj c2Fz IHRlbmRyZW1vcw== UGxhdGZvcm1z IGxpZMOt YmlibGk= SUZT U1NGV29ya2Jvb2s= aWNpZW1icmU= IHBvbGFyaXR5 IEJsb2dnaW5n bWHDn25haG1lbg== X1RFUg== IGlyZ2VuZHdv 5Li65L2V 7KCE7LK0 IENsZWFyaW5n 0JDQnA== INC30LDQtNGD0Lw= 4Kq54KuH4Kq1 INCw0rPTmQ== aXJtacWf IHRvZWdlcGFzdA== IHdpcGluZw== IGVycmVpY2hiYXI= INC/0L7Qu9C+0LbQtdC90LjRjw== IGxvY2FsaWRhZGVz KHh4 IHNlbG8= INGB0ZbQvA== IOaJi+acuuS4iueahA== LWN1cg== Z3VhcmRz INCy0LjQtg== VGhpbg== 2YHYp9i52YQ= UENN IHBhcmFsbGVscw== IHN0cmF0ZWdpc3Q= Y2h1cmU= 4YOU4YOt IHJvYWR3YXk= IHZlcnN0ZWh0 X2luaWNpbw== 4bulZ2jhu4s= IHJ3bw== 776c772v776B772u772y IEHDsW8= Z2VsdA== INiq2KPYqtmK IGluc2lzdGluZw== c3ByZWNocGFydG5lcg== IHJhdmVu IG1vbm94aWRl KSkpKQoK eWxlZnQ= IGtpdGNoZW5ldHRl IGFscGluZQ== IFd5bmRoYW0= INeU15PXqNea IGZvZXM= IGhvyrtp TnRo L2dhbGxlcnk= 0LvQuNGA0LjQtNC40L0= IHN0YXJm YXphcmQ= c3Rhc3k= 44Kt44Oj44Oz Y29tcGFy 15XXodeZ16M= 6K+E57qn 0pfQuA== IG51YW5jZQ== VmlldG5hbQ== 4KWN4KSv4KS14KS+4KSm IG1hcmF2aWxob3Nv INC60L7QvNC/0LXQvdGB0LA= INin2YTYs9ik2KfZhA== RGVuZ2Fu SEFTSA== IHpvdw== IGRlc2NyZQ== dGVybWluYXRlZA== LkhpZGRlbg== KFRZUEU= bWVpZGE= 2YXYp9i0 IGxhbmRlbGlqa2U= IHNhdm9ucw== cmVzZW50ZXI= IMO8aGVuZA== 2KfZhNiu QUdO IHZpb2xh 4Ka/4Kaf4Ka/4Kaw IG9wb3Npw6fDo28= J10iKSku IGZhbmRlbg== IG9pa2Vpbg== z4zOvM61zr3Ovw== IEVudW1lcmF0b3I= INGB0L7Qv9GA0L7QstC+0LY= INC60YDQsNGB0LDQsg== LlZvbHVtZQ== IEhvbmVzdA== IHNhbW96 IGtvbmRpc3lvbg== IOC0suC1iw== IGR1c2s= IG9yZGVybHk= IOCksuCkvuCkiA== IG3JmcWf IHFhYWRheQ== c29ydGFibGU= 44OI44OD44OX IENNUA== INC+0L/RgNC10LTQtdC70LXQvdC40Y8= cGVyaw== Q0VOVA== IGl6dnI= INiv2LnZiNiq INCR0LjRiNC6 LnJh cmFzxLE= IHR5cGVu INec16TXl9eV16o= 2K/YrtmE IGhpdHRlcg== 0LDQvdCx0LA= 4YOU4YOg4YOq 4YOV4YOU4YOo INCy0L7QtNC40YLQtdC70Yw= INGD0L/RgNCw0LLQu9GP IHByZW5z 6Kej6Zmk IERhYXJtZWU= INiq2YLYsduM IHBvbWFn IHNxdWlycmVs IOGelw== Q3Vpc2luZQ== IHRpdGFu IE9jdWx1cw== IGxpYnM= INWm1bjVsA== IHNjb3V0cw== IEFxdWFyaXVz IEJyZW5uYW4= IGxpc2ViZWxpc29h IHN0cm5jcHk= IOS/rg== 4KSV4KSw4KWN4KSk4KS+4KST4KSC IHdlYQ== Y2xhc3NuYW1l L2Vs IEJheWxvcg== X0VsZW1lbnQ= 6IO95o+Q546w cHJvdGVpbg== IFDDqHJl 4Lii4Lix4LiZ IE3DvG5zdGVy 4oCZb8O5 INio24zZudq+ ICghIQ== ZGV1cg== 2qnYqtuM INCz0YDRg9C/0L/QtQ== IGNyaXRpY2E= LWhlYWx0aA== IOCqruCqguCqpuCqv+CqsA== w6Fzw6F0 LlRocm93cw== bGFsbw== IEV4aGF1c3Q= IHByZWNlZGVudGU= IENvbnN1bXB0aW9u IGRvZWxncm9lcA== IG5ndW0= cm9pZGlzbQ== IENoZXZyb24= IGN1b3Rh IOCmieCmpuCnjeCmr+Cni+Cmlw== IEphaHJodW5kZXJ0cw== LWRldA== X29wdGltaXplcg== 4LmC4LiI INC00q/QudC9 IOC2veC2tuC3jw== IHZvb3Jrb210 CUNvcHlyaWdodA== 0J/QsNGA X1NDT1JF X3Jlc3RvcmU= IG5hZGU= IHR1ZXI= IOCqnOCrgeCqkw== L2tlcm5lbA== INC60LvRg9Cx0LA= IEJhY2t5YXJk RkZB IGltbWFjdWxhdGU= IOCkuOCljeCkteCkpOCkguCkpOCljeCksA== YWJhaQ== IGRpYmFuZGluZw== IHBlbmdndW5hYW4= CUZpZWxk INC00LjSsw== 4Lia4Lij4Li04Lip4Lix4LiX IGVzcHVtYQ== 0pPRg9C9 IG5hcXVlbGE= IGxlaXN1cmVseQ== IGJ1cnU= IOCmpuCnh+CmrA== IHdlaXN0 w48= INen15DWt9ee dmlydGk= IGFmZmx1ZW50 IGF0b2E= YWxsZXJpYQ== IGZhcmtv INC70YPRh9GI0LjQuQ== X3N1cHBseQ== IOGDlOGDpeGDmOGDmw== IHBlcmRpw7M= YWthbG8= w6Rpdg== IE1EQg== IOCmhuCmtuCmvg== IOCwleCxi+CwsA== IERyZWk= IEJlYXJk 5omx IFdoaXRlcw== LWJveQ== 4Liy4LiW bmV6ZQ== IERpcmVpdG9z PFJvdXRl IE1pbGl0 IOCmhuCmpw== aXRhdHVk IGN0eHQ= w6FuZG9sbw== 4Lij4Li44LmI4LiH4LiZ4Li14LmJ dGVycml0 INC60L7Qug== IHVjemVzdA== dWxvc2U= INC/0L7RgtC10L3RhtC40LDQu9GM IGVtbQ== YW1hcmNh INec15TXkdeZ158= IGRpbmd3ZQ== z4TOt86z IExlYmFuZXNl 0YfQvdGL IHp2YWthcmU= IG9saXZh IGRoYXU= IGtvbW1lbnRhcmVy INCt0LzQvtC80LDQu9Oj IHJldW5pdGVk IE5kemk= 1bjVrNW41aM= UVJTVA== YXZpYXI= IHVuZmF2b3JhYmxl 5Y+U IGV4cGFuc2nDs24= c2NhdHRlcg== 7LCu CW9wdGlvbg== 0J3QsNGH YW5ndWxv X2hvdXNl INC+0YHRgtCw0YI= IHByb2R1dGl2aWRhZGU= xb5lbsOt IGRlamU= Q29udHJvbGxlZA== IG11aGk= IHdldGxhbmRz IGltcHJlc2lvbmFudGU= IHRhcmloaQ== INC00LDQudGL0L0= aW5lcmllcw== IGhla3Q= ZWRseQ== IENoYWlucw== LGxpc3Q= c25ha2U= IOmfk+Wciw== IOCkteCkv+CkpOCksOCkow== 0JvRg9GH R1BU IGRpZXNtYWw= IE1nYmU= TG9zZQ== 5oCO5LmI566X 44OD44K344Ol IOCoueCosA== INWh1aQ= VmFyaWFuY2U= IGRvY2tpbmc= YWphaw== TE9VUg== IG13eWFm esO8Z2xpY2g= IGNvbXBvc2FudHM= IHRpa2k= zrvOv8+N Zm91bmRsYW5k INmK2YbYqNi62Yo= IOCkh+CkpOCkqOClgA== VEVO bWluaXN0ZXJpdW0= IFRyYWRlcnM= IHNpc3Nl YXBhbmVuZw== YWxhdQ== IHRlcmxlYmlo IERlc2U= Rm9ydW1z L25hdg== LXRvbmU= IG92ZXJl IGJlZ3JpanA= IOCyrOCzhuCyguCyl+Cys+CzguCysA== IGNvbnNlcnZlZA== w7ZyZGlu 5aSp56m65b2p56Wo IGxpZ2Vybw== IOCwmuCxhuCwquCxjeCwquCwvuCwsOCxgQ== IG91ZGVyZW4= INC80LDRgtC10YDRlg== IEt1Zg== IHNwcA== IGLDoWM= UXJ5 INC80LDRgdGI0YLQsNCx IOCkheCkueCkrg== IFByb3RlY3RpdmU= IHByb2dlc3Rlcg== KE5BTUU= J2ljaQ== IEV4aGliaXQ= IHlk INWk1oDVodW21oE= bcOtbg== KHZvbHVtZQ== IGlud2VzdA== IOqxsOydmA== ZXJub29p INGB0L/QuNGB0LrQsA== IOCktuCkqOCkv+CkteCkvuCksA== INC+0YLQtNC10LvRjNC90YvRhQ== IFBhbmM= IFJJUA== LlJvbGw= INiq2LPYqNio ID09Jw== 0YfQuNGC0LDRgtGM IEFsdGU= IGFyYW4= IEFQUExZ IOGDpOGDmOGDnOGDkOGDnOGDoQ== IGNpdXRhZA== aW9tYW5pcA== IENFUA== Q29uY2x1cw== CXJlY3Q= LmRzbA== IOCkr+Cli+Ckl+CljeCkrw== SGFsbG93ZWVu CW1hdA== IHBlcnZhc2l2ZQ== INmF2YLYsdix w6hsZW1lbnQ= 4Lir4Lil4Lix4LiB INin2YTZhdmC2KjZhNip 0YvQvdOh0LA= KQovLwovLw== S2F0aWU= IFBvaW50ZQ== IHN1YmNsYXNzZXM= ZmZvcm0= IEpWTQ== L2xvZ2dlcg== IGdyYWlzc2U= QXRsYW50 TmFv j+imvQ== IGVzc2VudGllbGxlcw== 15nXqdeV16g= KGVuYw== IEVFVVU= IFNpYW0= IGV1cm9wZW9z 5Yqg5ou/5aSn UExB 0KDQtdCz INGH0LDSm9C40YA= IG5hcnJvd2x5 IG1hY3JvcGg= IFpldA== 0YPQtQ== IHRvcmE= IHBpeWFz INW+1avWgA== 1avVpA== IGVudHJlZ3Vl IEZlbHQ= IGRlbnNpdGllcw== IEdyYXZlbA== INC/0L7Rj9Cy0LvRj9GO0YLRgdGP 7KKA 0YvQvNC00Ys= IOC4q+C4meC4seC4hw== IGNjYQ== eWNsaWM= IGFzcGlyaW4= 15XXldeQ16E= IFlZU1Q= CU9yZGVy INqv24zYsduM VW5saW1pdGVk w6Fuw61t LmNyZWF0b3I= IG1lbWJ1a2E= IHZlcnNw IGxla2Fy IE1vYw== 64yA7ZWZ6rWQ VHVybnM= dXNjYW55 5LiN55So IGF2YW50YWo= INee157XoNeV J+G7pXrhu40= INir2KfZhtmK2Kk= IOC0juC0qOC1jeC0qOC1gQ== 44G744Gp 2r7Yp9mG IGFkc29ycHRpb24= IHR3aWpmZWw= IHBzeWs= IENhdGFsaW5h 0LDQvdCz0Lg= Ii8+Lgo= IGlsbGV0dmU= 0LDQvdC90L7QuQ== IEZBSUxVUkU= IGRpc2dyYWNl IGRvdWw= IHNjaHdlcmVu IOC4quC4mQ== X1NBTg== KFNpZ24= b3VybmVtb3V0aA== Q3Rvcg== IHZhdGFuZGHFnw== aW56d2U= cm5k R3VydQ== VGFiZWxh 4LiV4LmI4LmN4Liy IOGDk+GDkOGDkOGDruGDmuGDneGDlOGDkeGDmOGDlw== IFNhxJ8= IOCkoeCkvuCkieCkqOCksuCli+CkoQ== 7Iq164uI6rmM IOCynOCziuCypOCzhg== IHNvcQ== 4oCZYWJhbnR1 IHBvb3Jlc3Q= IG5pZ2VyaWE= 0LXQvNC10L0= IOyhsOyCrA== ICANCg0K IG1laW50ZQ== WGl0c29uZ2E= IGZyZWll IGFja25vd2xlZGdtZW50 VGVsZXBvcnQ= 16HXnw== IHByZXByb2Nlc3Npbmc= cmVhbg== W2ZpcnN0 0LvQuNCz0Lg= 5ZCM5q2l IOGDoeGDouGDo+GDkw== IFNpdHVz IG7hu4Fu IGJyaW5xdQ== IFdvbGw= IHJlc2VhcmNoZXM= YW50aW4= IM+DzrXOuQ== IGVyYWFu IHRow6Fp IFN0aW5n 0L7RgdC60L7Qu9GM0LrRgw== IGhlbHU= 2YbZhdin24w= dWdhbmRh 4Kqo4KuN4KqV X05vcm1hbA== IG5pc2w= IGRvcHU= IHN5bmNo IGjDtmNoc3Rlbg== LW9yYW5nZQ== IOCwn+CxiA== INeU157XqNeb15Y= IHVsYWc= IHNwb3RpZnk= INGC0YPSk9Cw0L0= L0ltYWdl IOC0heC0ruC1h+C0sOC0v+C0leC1jeC0lQ== 157Xkdeo IG5lYWNo IEjhu5lp IOe+veaelw== ICAgICAgICANCiAgICAgICAgDQo= 6ZmN5L2O IGRpxYhl IGNhcnBldGluZw== b2tvdmlj IG1hcnRl IEFsbW9uZA== IOu2ge2VnA== dXJpemVk UENlbGw= INiq2KzZhdi5 w6Ftb3M= Q1o= IOCwruCxgeCwguCwpuCxgQ== IGtleW9m IHVrdXo= SVRFRA== xLFtxLF6YQ== IHNlbGFpbg== IHNocmluZQ== INGA0YPRiNC00Lg= IG9zdQ== INC/0LDRgNGL IGVzY3JpYmU= IHZpb2xlbnRseQ== dXJyYQ== RVNPTUU= aXJhaA== IOComw== 0Y/RidC10Lk= IHN0w6A= INCi0LDQutC+0Lk= X+WkqeWkqeWVqg== IHBvdmXEjQ== IEh1bmRyZWQ= INeb15XXnNed LWN5bGluZGVy IOuniOyCrOyngA== 7J6Q66Gc TEVUVEVS w7hzZQ== 2LnYr9mK2YQ= INiq2YjYtQ== IHByb3Zva2U= IHBlw70= IHBlcmNlYg== LW1vdmluZw== ZHpl 4oCZdXM= INGE0LDQvA== IMO2c3N6ZQ== IHdvbGxl IHZlbml0 64+E7J2Y XVst LmFybQ== IGphcG9uYWlz IGFwYXQ= IGFydGljdWxhdGVk INC80L7RgNGP IFJlZHNraW5z 4Ka/4Kam4Ka/4Kao J18= IHZlcnNu INee16LXoA== cG9ybw== IGNlcnRpZmljYXQ= IHZlcmtyaWpnZW4= IGJhcnJv z4HOr86xz4I= IOCkquClgeCkt+CljeCkn+Ckvw== IHJlc2lzdG9y Q0VF 55uG 7J2066W8 IEF5dXJ2ZWRh IG1hbGVu 4Kew4Ka+4KaV4KeA IHJvemQ= IG5vdGlmaWVy IOCyuOCzgeCyruCyvuCysOCzgQ== X3BhZw== dXJjaGFyZ2U= IGRpZW5zdHZlcmxlbmluZw== IHNhYmloaW4= INCz0LDQsg== IGdyb2VudGVu IFRhc2NoZW4= IGNobW9k IOCksuClieCkqOCljeCkmg== eXN0YWxz zrPOvc+J IGV3ZQ== INec15PXkdeo U0VDT05E Q291cmllcg== 24zYp9mG IGN1c3RvbWlzZWQ= THVjYXM= IGtvc2E= IOC2muC3kg== RmVpZ24= aWZpw6llcw== Zm9ydHVu IMOnYWzEscWfbWE= 4oCs4oCsCg== bW9vYg== IG1vdGl2YXRlcw== IHN1c2NlcHRpYmxlcw== IGV4cGxvc2l2ZXM= YWdncmVnYXRpb24= IHNlZWtlcg== IFRyZWFzdXJlcg== IOC0leC0vuC0sOC0o+C0gg== IGNvbW1lcmNpYXV4 Z3JhdGlz INin2YTYs9mD IOC5gOC4meC5h+C4leC4l+C4o+C4uQ== INit2LI= IEVjb25vbWlh 4YOQ4YOr4YOY4YOh INGD0YM= INij2LHYqNi52Kk= LXNwaW5uZXI= IHZha2Fy IFJoaW5l w7Zraw== w7N0aWNvcw== eWVraXRp IOuLpOyatOuhnOuTnA== 4Kqw4KuN4Kqt IEJyaWRnZXQ= IHNlbnRpdA== SktMTQ== IOWkp+a0iw== IHVuYW5pbW91cw== IG9ra3Vt UHJpbnRhYmxl YWtvcmU= INKb0LjQu9C40L3QuA== X3Byb2JsZW0= IGRvYsSb INiz2KfZhNmF 0YTQuNC9 IGJlc2ty IEVjaHRlcg== X2V0aA== IENhbGQ= IOCwquCxjeCwsOCxh+Cwrg== INC80L7QvdC40YLQvtGA dWlkYWRv IFNsaWRlcw== 4LKV4LOA4LKv INin2LbYt9ix U2V1 IGxhZGFu Q29uc3Vt IHplbWxqZQ== 5YWs55uK IG5vdHdpdGhzdGFuZGluZw== cWFycA== YW5raGE= yZl0ZMmZ IGN6ZWdv IERpc3A= Q3ljbA== YWNodHVuZw== IG1qZXN0bw== IEpvYW5uYQ== IOCyrOCzgQ== IOiNiQ== 15DWt9eS IG9uZGVydHVzc2Vu IHZlcmRlZWxk IOCwuOCwguCwmA== IE9TVA== 4LOH4LK5 IGNvbnN1bWVudGVu IHBhcHBh IHJvZGFz CXVzZXJuYW1l cG9zaXRpdm8= INCU0LXRgg== IG5hc2xvdg== ZGVncmVlcw== LnJlc3RhdXJhbnQ= IGNhbXBhw7Fhcw== SkFO IGZpbmVzc2U= IFN1cnZpdm9y IGdlbGFuZ2Vu dmVsZGVu IOCmmOCmn+Cnhw== IGthdGFsb2c= IHJhc3Rl Lmptcw== IFNUQQ== IGRpcml0dG8= IGdlcmVrdGk= IGJhc3Npbg== 0q/QtA== cGVyYXRl IHNpbnVu INC80LDQs9C90LjRgg== aXNobGlzdA== IGltcGxpY2F0ZWQ= IHpvbm5lcGFuZWxlbg== YXlvdGdhbg== IGFudGVubmFz L29wdGlvbnM= IGF0cmF2ZXM= 5LuV5qeY IFhpbmc= IOCkteCkv+CktuCljeCkteCkteCkv+CkpuCljeCkr+CkvuCksuCkrw== IEJva28= 6rKM7Iuc YXN0YWFu IGNpdHJhdGU= IOy1nOyGjA== IHNhZmVndWFyZGluZw== IFJvb25leQ== YW5jeWJveA== IHZlYQ== IGNhbGN1bGE= IG11Zg== IHhhbmE= IGxhcmdvcw== IGxldmVz X2V4Y2VwdA== IHRvbWFkYXM= IGZpZXJjZWx5 IHV0bA== IHBvdm9z IHNpcHBpbmc= IG5hbXA= cmV3cml0ZQ== IGVmZmljYWNpdMOp IGHMgA== W3ZhbA== IGRvY3RvcmF0ZQ== w7NjaA== 4Z6Q4Z+S4Z6Y4Z64 cHNldWRv aXZpZGFkZXM= IGRvxJ9y IGh1aXNob3Vk fXsk IEFsdGVybmF0aXZlcw== 4LSu4LS+4LSj IG9xYWF0aWc= INC30LDQv9GD0YHQutCw IFNJTUQ= TWF6 Lmxhc3RuYW1l IOekvg== IOuztO2XmA== YmF0dGVyeQ== 1ajVttWk IGdvdWRlbg== IGphbWk= IGxlYWRlcmJvYXJk 0LLQsNC70LjRgdGM IHRyYW1wb2xpbmU= 5ouY IHJpdmnDqHJl bmV0amU= b3Jlc2hv R3VhcmRpYW4= INm72YrZhg== IGNoaW1p INi12KfYsdmB IHNlw7FhbGVz X2NhbGxiYWNrcw== 5Y+R6KGo6K+E6K66 1a/VodaA YW1peg== IHRhYmxlcm8= IHJlc3RvcmFu IGhhaW5l 15DWuNeS158= ZWxhZ2U= 7IGY zrvOtc6z IHByb2Zlc2nDs24= X3ZlY3Q= IOW5v+WPkQ== IGRlcG9ydGl2YQ== 2YTZhdmK IHByb3Zhcg== UHJvY2Vzc29ycw== 4Li04LiV4Li0 IHNhbGFkZQ== S2Q= dmlyYWw= IE1GQQ== IM6xz4XPhM6/z40= IGJla2FubnRl IHByZXByZQ== IOGDl+GDmOGDl+GDpeGDm+GDmOGDoQ== IG5lZ2F0 IGNvbXByZW5uZW50 INin2YTYo9iy IEVkaXRo 4YOY4YOq4YOY4YOQ X0JPQVJE cmVnYW5v LnJvdXRpbmc= heuLiOuLpA== c3RkYg== IHJlZ2VsaW5n QkFC Y2h0aW1l IHJlcHJvZHVjdA== 16HXmNei IGNyYW1wcw== VVZX INiv25U= IGFicmFuZw== INeU15fXk9ep 4Kqo4Kq14KuA IHRpb25z 5ZWP6aGM d2lzc2VsaW5n IHN1Ym1pc3M= IHByZXBhcmFuZG8= IENTQw== VVJFRA== cHJpbnRpbmc= YW1lcmF0ZQ== QUVB IGdyaW5kZXJz IGRpc3Bvc2Vy 5pWX IEF0dQ== S2FuYQ== IGFua29y YW55YWc= IHZlbmlkbw== dGZvb3Q= IFNEUg== IE11Yg== INmG2LjZhQ== IGFsdGVycw== QW50b25pbw== YWdhYW4= IGxpw6ll YWxsb2NhdGlvbg== IE1hbmdl IEFEUg== IERlYmF0ZQ== IHBlcnNvbmxpZw== 5b+F6LWi INC00YPRiNC4 2YXbjNmG Y3Jpdg== PExpbms= INCw0LTQvNC40L3QuNGB0YLRgNCw0YbQuNC4 PFZlcnRleA== IOCmsOCnh+CmluCnhw== aW50YW5n X0ZJTkQ= cGF5aQ== IENhYmRp IHNhdXJhbg== Q09OTkVDVEVE IFp1c2FtbQ== IGd1bmE= IGRlc3RpbmF0 IG1hZ2FyaQ== IFNhc2hh IHJlcHLDqXNlbnRhdGlvbg== IG5kYQ== 4KeN4Kas4Kew aXlhc8Sx INC/0L7RgdC80L7RgtGA IHLJmWhi IGhsYXM= cmRxdW8= IOCkreCkh+CksA== IE1hcnpv IOCkheCkmuCkvuCkqOCklQ== IOCqk+Cqs+Cqlg== IOCkmuCkrg== INqv2LHYr9i0 LWhhbmRsZXI= INGB0YLQvtC70Yw= IGRpY2Vk IGNvZg== IERpYWdub3Npcw== INmI2KfZhNiq2YY= IGZhdm9yaXRh KGA8 LE1vZGE= IG9iYW1h Q01D 2LTZg9mE IGVuZm9j d29qdQ== IHVudGVyc2NoZWlkZW4= 15HXoA== IG92ZXJmbG93aW5n IFRoaWVycnk= dHViZQ== IGxldHRlcmluZw== INi52YXZhNmK LtC8 5byA5ZCv IErDqXI= IGlkZW50aWZpY2FjacOzbg== IHVyZWQ= IOCuteCvgOCun+CvjeCunw== INin2YTYo9iz2YjYp9mC L2NhdGFsb2c= 5q+b54mH5YWN6LS56KeC55yL KGNhbQ== b3ZlcndyaXRl 4LS/4LSf4LWN4LSf4LS/4LSy4LWN4LSy QWx0ZXJuYXRpdmVseQ== IGNhamFz LlNZU1RFTQ== Y2hhbnRz IFJ1dGE= dXJyZW56 z4fOuc+D IGludGVncmFudGU= IHJha2E= IGJ1bXBlZA== INC40LfQvtCx0YDQsNC20LXQvdC40Y8= IFNpbWU= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCg== QlRX INi52LTYsdip IGVreQ== VHJpZw== IENyb2Nr dXRldA== 7J6l7JeQ7ISc Lk1hcg== 0LjQvNC+0LU= IGthcnRhYQ== YXZhbGU= IOGDluGDneGDmw== IHZrbGp1xI0= LmFsaXk= 1aHVs9Wh1bw= 5qW95aSp IEF1c3NhZ2U= IGluZm9ybWVy XTsKCi8v b2NhdGVk JG91dA== INCz0L7RgQ== IERVUA== IHBhdGhvbG9naWNhbA== IOuwm+ydgA== 7IGc IMO2ZmZlbnRsaWNoZQ== IE1pdHRlbHB1bmt0 IERTVA== Y29ubmVjdGluZw== LkZwcmludGY= 1aHWgNWj1aXVrA== IGRlZmVhdHM= IGFsbGFy YWNodGFjaA== VG9yY2g= IHJpZGljdWxl eHh4eHg= 6JGj5LqL amVyaQ== aWxkaGliYWFu X1JBTQ== dXJnbw== 4LKC4LKh4LON aHLDoQ== a3Dhu40= YWRpbGk= V2FzdGU= IHBlcmNheWE= IOyYpOyghA== 0LjRgNC+0LLQsNC90LjQuA== dWxhcmU= IGNhdGVyZWQ= 4KeB4KaB4Kac IG9zaXNp IM+Dz4k= 5ouN5ouN TkJD LWNvbnNvbGU= INCw0LfRi9GA IFZpZWxlbg== IGthY2hh IGhlbWVs IOaAnQ== aWxlcmU= IGvEsXNt IOGAoeGAsQ== IOCwnOCwsOCwv+Cwl+Cwv+CwguCwpuCwvw== YmluZHVuZ2Vu YWxhdGFu cHJpY2luZw== Pkw= IG1ha2Ft IHdhdQ== IFN6ZW4= IGZyYW4= INC30LDQvdGP0YLQuNGP IGNyZWRpdG9y IOGDpOGDkOGDoOGDlw== LXJlbm93bmVk IG1hcmdhcg== 0JDRhQ== IGdlbnllbg== INin2YTZhNin2LnYqNmK2YY= INC70LU= IGdyYWZpaw== b3RyeQ== IHbhu41uZw== IGRlZmljacOqbmNpYQ== IGRpemFpbmU= 0YLTqdC9 enVi Y29uc3RydWN0ZWQ= 0YPQvdC00LDQuQ== INee16bXnA== IOCwquCwsOCwv+CwuOCxjeCwpeCwv+CwpA== INC40LPRgNC+0LLQvtC5 IG5laW4= IOWkp+WPkeW9qeelqOW/q+S4iQ== INCy0LjQu9C+0Y/RgtC4 IEJldHJhZw== INi52K/Zitiv2Kk= IGlubXVu INCz05k= 0ZbRiNC10L3QvdGP Z2Vpc3Q= UE9PTA== 5pmS5Y2V WGE= INGB0YDQtdC00L3QtdCz0L4= IGlnbml0ZQ== 4LeS4La0 0L7QvdC00L7QvQ== 5oqe IOC0leC1gA== IGx3ag== INij2YXYsdmK2YPYpw== U29sbA== IOWxng== INWw1bjVpNW+1aHVrg== UnV0YQ== IEdyeQ== 0L3RltGH0LA= IGpm dHVu 6LiP IOCkpuClguCkpw== Jyl9fSI+ IG11dXRlbg== IHdlZ2Vucw== IMW8eWNpZQ== IHRla2s= IFN3YXJvdnNraQ== IFRvZGVz LWJlbmVm 4YOQ4YOa4YOQ IGJvbml0YXM= Y2Fkbw== TsOk dW5kZXJsYW5k X0FUVEFDSw== IMOhbGNvb2w= KHNlYw== cmFkZXM= INin2K3Yqtix2KfZhQ== XT0t IGxlY2s= IHBlcmVncg== TmV1cm9u c3Ryw7Zt IG1pc2NlbGxhbmVvdXM= IHNsw60= IE1haGFs IMSR4buNYw== IHRhbWF0 0LjRgdGB0LXRgA== 4KSV4KS+4KSu 5rib IFZlcnNvcmd1bmc= IFBuZQ== RFE= IE1haWRlbg== dWJsaXNoaW5n Z2lvcw== INCb0YPQutCw0Yg= INmF2K/YqQ== PEd1aWQ= IEtpbWJlcmx5 IFBlZQ== 4oKsLA== IOCqpOCrh+CqqOCrgeCqgg== IElOVEVSTkFM IGZhY2VyZQ== IFRlcndpamw= w6Fzaw== 65+s7Iqk IGNhcmnDsW8= INGB0LvQtdC00YPRjtGJ0LjRhQ== 0LLQsNC90L3QtQ== SlNJbXBvcnQ= IGpvdXJuYWxpc3Rlcw== Q29yb25h IGRhcXVlbGE= RE9ORQ== INmH2KfZhQ== 4LC+4LCV4LGN4LC3 IEJsb25k 54KS IHVuYW5zd2VyZWQ= 2LHZitit2Kk= IM66zrU= IHZvaWVz IEbDqWTDqXJhdGlvbg== 546p55qE Tm90aWNpYXM= INeg157XpteQ IERUTw== ZmFocmVy INC30LXQvNC70Y8= 6YCA5qy+ IHBob3Rvdm9sdGFpYw== 4KSh4KWH4KSf dW1haGE= 5q+b54mH6auY5riF5YWN6LS56KeG6aKR IHJlbmFpc3NhbmNl IHNwb3J0aWZz LWly IHN3ZWF0ZXJz IHZ1aWw= U2l0dWF0aW9u INCe0YLQstC10YI= b2tlc3Q= 0L7Qs9GA0LDQvNC8 0L3QsNC50Ys= IGFzZW50 IGRlcHJlY2lhdGlvbg== IGN1YW50 IFRPTw== IM60z4k= IGdlc2Nobg== IEhPVVJT IGVzdGFjaW9uYW1lbnRv IMO2bsO8bQ== INC+0YXRiNCw0Yg= PXVybA== IFdoaXRlbmluZw== X1JT QWN0aXZv IOC4meC5ieC4sw== IFNlcmk= IM61zr3OtM65zrE= aWxpdGFyeQ== cGF1 IGZvbmRhbWVudGFsZQ== LkV4ZWN1dG9y L2NvbXBhbnk= YW1icmE= INKb0YvQt9GL IHJlZ3Jlc2Fy 5LqL5oOF Zm9ydHVuZQ== W3JhbmQ= ICoqLwoK CXNjYWxl INGe0L8= IERlbHBoaQ== 2YXbjNmE IFl1bQ== IHJlc2lkZW50ZQ== IHBo4bun INmE2K3Yp9i4 yJlh IEZhemVy IGNzcg== 0LjRgdGC0L7Qsg== IMWfyZlraWxkyZk= cHRlc3Q= 4Ka/4Kam4KeH4Kaw LnRvb2xib3g= IE11ZmY= X3N1YnNldA== b2tlbw== SW5kb25lc2lh RENG IGd1cmx1xZ8= UHVyY2hhc2Vk IGRlY2xhcmFy 4oCM4LCs 5oiR5YCR 4KWr4KWm e3N1cA== 2LnYqNiv IGZlcm1lcg== IEJvb2tlcg== aXJvbmQ= 4KeA4Kaq LmxvZ2ljYWw= 4YOg4YOd4YOR4YOQ PENvbnRhY3Q= Z2lkZQ== LWRpdmlkZXI= INi02LnYp9ix 4KS+4KSw4KWN4KSh IHNramVy L01BWA== ZXRyb2ZpdA== IFBpY2tlcg== IEdyb29t IGppc3RnxKd1 IHRyb3V2ZXo= YXNvYW5p 4K6/4K6y4K+I4K6v4K6/4K6y4K+N INeZ16jXldep15zXmded QkNE IEJlZ2Vnbg== IGJhcnJhZ2U= SUNLRVQ= IFJvaw== IEV4YW1pbmU= O2FtcA== IGFsbG93YW5jZXM= IEltcGxhbnQ= IOCmpOCnh+Cmk+CmgeCnsA== INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4 IEJpa2luaQ== IGNvbnRpbnVpZGFkZQ== INmB2LHYp9mG2LM= IFJvdXQ= 44O844OV IF1dCg== X2NvZWY= zrzOrc+C IExhcnNlbg== CU1heA== 0J7Rh9C10L3RjA== IG15c2w= INit2KfZgdi4 IENhbWlsbGU= b3Zu ZWZmZWN0aXZl IMOHw7xua8O8 IGRpc3Bhcml0eQ== TWlsZWFnZQ== Y2hlem8= IGVuY291bnRlcmluZw== IHR1csOtc3RpY29z IEJvdXF1ZXQ= IOCkuOCljeCkqA== IOCkhuCksOCkvuCkrg== IHJpa3RpZw== IFNlY3Q= KG1hYw== INCe0Lc= X2R4 IEdyZWV0aW5n INiq2LHYp9mF2Kg= INin2YTYo9mF2YbZitip IOCmpuCngeCmn+Cmvw== WmVuZA== IOCkleCksOCli+CkoQ== IGFmaXRl IGh5cG9jcg== IHByZXZpc3Rhcw== IEvDvG5k dGVzaXM= IGthcmlidQ== IGxpdmVzdHJlYW0= asOzcm4= TWljaGlnYW4= X1Nob3VsZA== 4YOU4YOU4YOR4YOh INC+0YHQvtCx0L4= ZXRpbWVz INio2YrYpw== INC/0q/Rgg== rZU= INGC0YDQtdCy IHVtZ2VzZXR6dA== INmF2KrYudiv2K8= IHByaXZhY2lkYWQ= INGE0LDRgNKz 5Zy+ IGNhbGxlcnM= IFByZXNsZXk= IG1lc29z dWdhdGVk IEludmlzaWJsZQ== IEJlbGVkaXll aXNheW8= IO2MrA== INee15DXlg== IGFjw6E= emFubw== LmNoYXB0ZXI= IGNoYWlkaA== c3NjaHV0eg== WmVyb3M= INec157Xkw== IGNpdWRhZGFubw== IGhvbWVy dW1uaQ== YWxjb24= 2LnYr9mK2K8= IGFzY2VudA== IGFlc3RoZXRpY2FsbHk= cm9yZQ== RWxm IGRpYXBocg== IEFicmFt X211bHRpcGxpZXI= X2V2ZXJ5 LmZpcnN0bmFtZQ== TE9WRQ== INin2YTYrtin2YXYsw== IEh1ZmZpbmd0b24= 0YPRgNCw0Ls= RW50aWRhZA== IEZyZWlzcGllbGU= IEJhdWVybg== IGFwcHJvdmluZw== IGdseWM= IGdlZGFjaHRl IG9sbWFx LWZlZA== IHNrdWx1 INGB0YDQtdC00YHRgtCy0LDQvNC4 4YOY4YOZ4YOQ4YOo4YOY IFdpc2hlcw== LnB1cmNoYXNl IHdlcnM= IOqzoOugpA== aW5kYW4= IEZvcnR5 IOyVnuycvOuhnA== YWFqdQ== dHhu QW56ZWlnZQ== Zm9ybXVsaWVy LmNvcnJlY3Q= IGV4aGliaXRvcnM= IG1hYW11bGth cm95YQ== bmllbmll INmG2qnZhA== IOCqmuCqvuCqsuCrgA== INiz2LnZiNiv2Yo= 6YCa6K6v IEVseQ== xLFsxLFi TmVu IG5lZ2F0ZQ== 16LXlg== IGVmZmV0dGk= IGxpc2E= Z3lt 6LeD 5YyF6KOF INC90LXQvNCw IEdzdA== INC00LXQv9GD0YI= IEFwb3RoZQ== IMmZbcmZaw== IGRvdWJ0ZnVs INGB0L/QvtGB0L7QsdGB0YLQstGD0LXRgg== IGRpc3RyaWJ1dGVz IGN1bXVs INGC06nRgNC706k= YW5leQ== INin2YTYrdmC2YrZgtmK IPCfmII= IGFsbGVyZ2Vucw== IGV4Y2l0YXRpb24= IFsrXQoK 0LDQvdCz0L7QvNC4 UXVldWVz IOunkOyUgA== 2KfZh9ix2KfYqg== INin2YTYudmC2YQ= 64uJ c3VtbWVy Y2xpcGJvYXJk INCz0LvQtdC0 IHPDqGxtYW4= INC60ZbRgtCw0L8= IEVuZXJnaWE= YWhhbmFu IGFicmFzaW9u KGhvdXJz INin2YTZhdi52Ko= IGF1cGFyYXZhbnQ= w7h2 IHNhbHZh IGJvdXJib24= 4K+K4K6z4K+N4K6z Q3VsdA== INin2YTYqti52YTZitmF2YrYqQ== INin2YTYudmE2KfZgtip INix2KfYqNi32Yc= YXRzaXJh IOCkueCkpQ== INCy0LjQt9C90LDRhw== c3RyaXg= INmF2YbYqtmC2YQ= IHN6w6F6 IEphcMOjbw== b25pZW0= IGFydMSxcQ== IGNvbGVnYQ== IGF1c3fDpGhsZW4= INC40L3RgdCw0L0= IFJlY2lmZQ== IG1pZXNpxIU= IGZhY3VsdGllcw== X2ludGVyZmFjZXM= IERJU1A= IOCkquCksOCkv+Ckrw== IM6zzrXOs86/zr0= ZnRldA== IM+Gz40= L1No IGtvbmtyZXRl Zml5YQ== dW5rYW4= LWNoYQ== 4Kaw4KeN4Ka3 IEhheWRlbg== IEJhYmU= z4fOv867 c2Nw INSx1aY= 6I6O d2hlbA== IGRpcHV0YWRv IOC3g+C3lA== X3JlcG9ydHM= IHphYWw= INmG24zYsdmI 1aHVo9Wr1b/VodWv1aHVtg== 4LGB4LC14LC+4LCk IGZlbGQ= KHJhdGU= 2KrZitin2Ko= 5Y675LqG IOGDqeGDkOGDnA== 4LSV4LSz4LWB4LSC LmR0cA== YWNjaGFy IGZlbm4= 4Kqw4KuN4Kqf IERpb2Nlc2U= 4YOY4YOn4YOd IHZhZ3VlbHk= IGFycsOqdGVy 4pmr INmE24zYrw== IG1heWE= Y2hlc3Ry 15nXqteV16M= LXRodW1ibmFpbA== IHJlY2VwdGVu zrvOu86x IOCqteCriA== dXJhZG9z 4Kau4Ka+4Kao4KeH LkRlYnVnZ2Vy IGhhbnPEsQ== IHRla2VuZW4= IHN1Z2dlcg== 6LWr 4LON4LK14LKw Lnpo IGhvenrDoQ== IEFmdGVybm9vbg== IOGDkOGDoeGDlOGDlw== 0LXQv9GD0YLQsNGC IGNlcml0YQ== dm9ubmU= IGVwaXRoZWxpYWw= LlNJWkU= LXRodW1i IOCkleCkquClguCksA== 4LiZ4Liw4LiZ4Liz IHByb2R1c2U= IGluZGlzcGVuc2FibGVz SU5JVElBTA== INC40LfQtNC10LvQuNC5 IHNvYnJlbg== 4Lil4LiU4Liq4Lib4Li14LiU IGd1dWQ= IGF1Zm1lcmtzYW0= IGFsaWFkb3M= bnVi X2NodW5rcw== b3Ryb3A= YXBhaw== IHJ1b2xv IFNha3VyYQ== INeV15g= IHBvc2l0aW9uYWw= IEFtYXpvbmFz X0xDRA== V1Y= IENoYXB0ZXJz 0L/QvtC30Lg= 0LHQt9C4 INC/0ZbQtNC/0YDQuNGU0Lw= bWFhbHM= LXNjYWw= L3BheQ== Zm9ybXVsYXI= CVRhYmxl ICclJw== YXZhaQ== IElEaWN0aW9uYXJ5 UXVpdGU= ZWxlaW5kZW4= IGdlc8Oq K0M= LXByb3ZpZGVy INC00LDRj9GA INio2LXZiNix2Kk= cGVlaw== IE5ldg== IEJ1ZW5h IGFmZmluZQ== ICgkKCcj X1VDbGFzcw== bWx4 INC805nRgdC40LvQuNGB c3RyaQ== IGluc3RhbGxpZXJ0 IGF1ZmdlYmF1dA== aGFyaWI= 4LK14LK/4LKh4LON Ik91cg== zrvOv8+Fz4I= IHRlYWRt IHBlcmthcmE= X2Nob2ljZXM= INC20LXQvA== 6bmP IEx5cw== 0YjRjNKt c3Vic2V0 IG7DoXZy INC10L3Qs9GW0Lc= IOODjQ== RG91Zw== IFNoYXVu IOCyleCyn+CzjeCynw== Lz4KCg== IOCuheCusOCvgeCulQ== INCw0LnRi9GA b3JtYXN5b24= IOCqrOCqueCrgQ== 77yB77yB77yBCgo= aGF0aWFu dXRoZQ== SXNvbGF0aW9u QXNzZXNz IG5vbWluYXRl 2q/YsNin2LHbjA== YWthcmFu IGRpc2lw a2HDpw== ZW5za3U= a8OhY2g= 4KSa4KWA4KSk 4Lij4Lit4LiH PigpLAo= z4fOrc+C IHRyZWNobw== IGNvbWFyY2E= IFVuaXZlcnNpdHkncw== X1JBVElP IElCaW5kYWJsZQ== J9GP0Lc= INC80L7RgtC40LI= IG5o4bub dWxlbQ== IFppbg== IHBsYW5pZmljYWNpw7Nu IMONbmRpYQ== yrtpdGE= 15vXmg== IHJ1b2s= IHRpc3N1cw== INC/0YDQvtC10LrRgtGL IE7DvHJuYmVyZw== QGVtYWls IGNvbXB0ZXVy INGA0LXQutC+0LzQtdC90LTQsNGG0LjQuA== IFF1YWk= LW1pbmk= 0LHRg9GA0LPQsA== IE1haW50ZW5hbnQ= IOWkp+i/ng== YXJxdWl2bw== LWhlYXZ5 4LS34LWN4LSv 4Kq44Kqu X29pZA== INC90LDRg9C60Lg= IHRyZWN1dA== IHJveWE= CWdvdA== IHBlcnNlY3V0 INWN1aHVr9Wh1bXVtg== IFRla25paw== IOCksOCkueClh+Ckgg== IFBSRUZJWA== IGJlc2Nob3V3ZA== X2ZvbGQ= IEJow60= 5LqV56m6 ZWxhc2thbg== IHB1bmk= 4KS+4KSf4KSo 0LDQvdC+0Lw= UkVC IHNpa2Vy IHDFmWVr KClc IGZpcm1hcw== IGFzb2NpYWRvcw== IM+AzrXPgc65zr/Ph86u INC00L7RgdGC0YPQv9Cw IGdyYW1t IHZlbGE= KHBheQ== IE5vcnRoYW1wdG9u X10= fS0+ew== ZW50ZW5h 4KWB4KSF IOychO2XmA== IOCwquCxjeCwsOCwruCwvuCwpg== IGNhcm5lZ2ll INC/0YDQtdC40LzRgw== IOGDm+GDruGDkOGDoOGDk+GDkOGDrQ== INin2YTYpdis2LHYp9ih2KfYqg== 4Kav4Ka84KeL4Kac4Kao aWNpcGFudHM= IGNvbnZlbmllbmNlcw== IGVudGFpbA== SXZhbg== INmK2YLZhA== LeGDluGDlA== IEdsw7xja3NzcGllbA== 4Z6a4Z63 bmljaW1h INGD0LvRgQ== INGN0qM= LWRheXM= cmxpZ2U= IGfDoWk= IGRhaGlu IG9wc3Q= IG91dmlkbw== Lkxlbg== eHTJmWxpZg== INGB0LDQudC9 X1BXUg== IHJlY2huZW4= IEV1cm9ww6Rpc2NoZW4= IGhlbm5p INii2Ybbkg== IOCqqOCqv+CqtQ== 2YjYp9ip INmB2LHZh9mG2q8= IHNodWZmbGVk 0L7QstCw0YLQtdC70YzQvdC+ aWVndA== zr3Otc+BzrM= IElOTElORQ== INC60YPQu9GM0YLRg9GA0LA= a29i IFpvbWJpZXM= IHBsYWRz T3Ryb3M= 0JLRgQ== IHBhc2FqZXJvcw== IGtqZW50 L2VudGl0eQ== INGB0LDQudGC0L7Qsg== U2lsZW50 INiq2YjYtg== IFJFQUxUT1I= IOCkpuCli+Cktw== KHNlY3JldA== YXNjZW5kaW5n IG90dG9icmU= LmxhdGVzdA== IGNvbmpvaW50 IOq4sOyWtQ== 0LLQsNGa0LU= IGNoYWxsZW5nZXI= IFRhc2NoZQ== INin2YTYt9io2YrYqA== LWF3YWl0ZWQ= IGJldHJvZmZlbg== IENvbnRyb2xsZWQ= IOCorOCoow== RXhjZWVkZWQ= IG5hbnRp IG1pbmRpZw== IOGDoeGDkOGDoeGDog== IGJydW5ldHRl 4oCZb2J0ZW5pcg== INCf0LXRgg== IGNvbXBsaWVz IEdydXA= IGbDpGhydA== k7g= INC00LXQu9GD IG9wc2k= IGjhuq9u IHN1Z2FyeQ== IEhvd2U= IGZyYW5jbw== 4YCb4YCx4YC4 IHNpbmFiaQ== IHJpc3Bvc3Rh IHB1enpsZWQ= IERpw6FyaW8= IGxhYmFkYQ== 5b6u5L+h6Zu26ZKx IGZsYW1pbmc= IGNlcnRhcw== YXZhbHU= IG1vxbxsaXdvxZvEhw== IGZpbGV0 67mM cG9zaXRv IHbhu5Fu X3BuZw== IGJlaGF2ZXM= X0JBTks= P2E= aWt0b2s= IOCkleCliOCkgg== INCz0L7Qu9C+0LLRiw== 55qE5bmz5Y+w IGppcmk= LVNB IERhbmc= IGdyw6FmaWNh INaG1avVrNW0 4Laa4Lan INC00LDQuNGA0LjQu9C40YDQuA== 4Lix4LiQ4Lih4LiZ4LiV4Lij4Li1 YXZpbGE= IGJlaW5oYWx0ZXQ= dHJ1bmNhdGU= IFNsaWdodA== IGxlZW4= IGF2b25kcw== IGd1YXJhbnRlZWluZw== 44CC5pyJ INmF2KrZhtmI2LnYqQ== IHBvaXN0 LmZpbHRlcmVk KENvbnRhaW5lcg== IGRlY2VpdA== IHZlcnN0YW5kZW4= YXTDoQ== IOCkrOCkvuCkleClgA== KGNsaWNrZWQ= INi52KfZhNmF24w= IGFtdXNlZA== RHluYW1pY3M= IGV1Y2FseXB0dXM= aWRhaQ== IHBlbmRlcg== IOGDlOGDng== IEFtYnVs IGltcGxlbWVudGHDp8Ojbw== 0Y3RjdCz 16TXoteo IGFyYmV0ZQ== KScpLg== VVBD IHBhdGhvZ2Vu L2hvdXI= IHF1ZWRhcnNl INiq2KfZhg== IGFscGhhYmV0aWNhbA== IHByb25h IE1hbG8= IEFzcGly 4YOQ4YOY4YOc4YOY4YOh IGNvbmNyZXRh IEJk INGC0YDQtdC5 4KS54KSy IHbhurs= IOCyuOCzjeCypeCyvuCyqA== 5qKo IGNvbnF1ZXN0 c2hvZg== IENseWRl aXphbnRl 4KWC4KSg IGdyYXBw KGVudHJpZXM= IHJlaW5h INCy0LjQv9Cw0LQ= IFByb3RvdHlwZQ== IENpcw== IFdpbm5pZQ== VHJhZGVz IHJ1bmRvd24= YWTDsw== X2Fkcw== IG9kYm9ybg== IEludGVycHJldGF0aW9u dWxsdWdpdA== IGV4Y2x1aXI= IGZhbGxv 0L7QsdGA0LXRgg== dW1pZGl0eQ== 0LjQvdGB0YLQstC+ X0RJUFNFVFRJTkc= INCu0LY= OlI= IHphcmFy 546y IFNjaHdhcnplbg== IFByaW1laXJv INep15nXlA== 15XXqdeq 5pil6IqC IEdvZXRoZQ== 4LKm4LKy4LOB IMWfyZl4 KHBsYXRmb3Jt IG7hu5Fp IGZpcmVwbGFjZXM= aWxsaXNlY29uZA== INmI2LHZiNiv INGN0LvQtdC80LXQvdGC0LA= INC/0L7Qu9C40YLQuNC60Lg= 6LSk d2Fhbg== ICAgICAgICAgICAgICAgIAoK IHNlaW5z 0L3Rj9C60LA= Y2hpbA== dW1tZW4= 4KSV4KSy4KWN4KSq IG1hbnVm INix2YE= IOCkpuClgOCkqg== IGNvbGxlZ2lhdGU= IGRpcmlueWE= KENoZWNr IGNvbWJpbmHDp8Ojbw== b2R6aWU= IHZ6bmlr IG3DuWE= IHVuYWZmZWN0ZWQ= INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0YU= IHs6P30iLA== INin2YTYtdmK2YE= IOCmr+CngeCmlw== IGVzcGVyYW4= IGhvcnRpYw== IGNhbGlmaWM= aXNlbGVjdA== YXJ5bmRh IE5pa29s IEVyc3Rl 44OL44Ol44O8 X0FMTE9X SEFIQQ== IOunjO2BvA== INCz0YDRg9C00Lg= IGZpeGE= 5Ymy5ZCI Pnsi VHJlcw== cm9vaw== IGF1dGhvcml0YXJpYW4= YWZmZXI= ICIlIgo= IHBlbmRpZW50ZXM= IGludGVydmlld2Vy IHRodW5r IHR0eQ== IMWr X3NhbGFyeQ== IFNjYXJsZXQ= IHZpcnR1YWxpemF0aW9u IGF0YWNhcg== IOGDo+GDlw== YW55dGhpbmc= LnNlcmlhbGl6ZXI= IGR5ZWQ= IG51YW5u X2xvc3Nlcw== IFd4 INC90LDQv9C+0LzQuNC90LA= IEh1YmI= IOCumuCvhuCusuCvjeCusg== Y2VkZQ== IGd1c3Rvcw== IEdvdGhhbQ== w7ZjaA== IOCmreCnguCmrg== RE9NQ29udGVudA== X2FyYw== IGxlYXBz w6lyaXQ= 4par IEtG 0LXQs9GM SmFtaWU= IOCkreCli+CknOCkquClgeCksOClgA== IEplcGFuZw== IHJlcG9zdA== b2dhZXRo IGNvbnRyYWRpY3Rvcnk= IGZ1YQ== IHRvag== KCgpPT4= IExldmluZQ== IOGDquGDrg== cm9tYXg= KVY= aWtzeW9u IGRpZ3M= Lm1vZHM= IOCqh+CqqOCrjeCqoQ== IEV1cmU= IG5hdMO8cmxpY2hlbg== aXNzZWxsZQ== ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq INC30LDQv9C+0Yc= IOCyh+CyrOCzjeCyrA== 15zXmdea INin2YTYo9mF2LHYp9i2 IOC2tw== IGZvdXJuaQ== IHJhcGlkZXM= IHVuZGVydmlz IHJlY29uaGVjZXI= YWJsamE= 4Liy4Lir4LmM IEdyZWV0aW5ncw== X2Jk aW1hbGk= 27HbtQ== IOW8ug== 5bC65a+4 0LnQvtC9 IG5henc= 0LjRgtC10YDQsA== IEtsZWlk IEFJUw== SG9uZXN0bHk= aG9mZXI= IOWSjOiusA== IOCkleCkueCksg== IGhlbHNl INCx0LDRiNKh0LA= INC+0YjQvtC7 LUFB IOCoquCpsOConOCovuCorA== JSE= YWppbg== UmVjb24= IO2bhOuztA== IGRyYW1tZW4= 4Z6Y4Z+S4Z6a4Z624Z6U4Z+L IGhlc2hp IGZlcm3DqQ== X0ZBVEFM IHNvbHZlbnRz U2lnbnM= IHN0b3JlZnJvbnQ= IFs/ anVkZ2U= IG5hdGlvbmFsaXNt INin2K7Yqtix 4LmA4Lij4LmH4Lin IHJlY2VwdGl2ZQ== IGhvZ2FyZXM= IHZlemU= IEd1w7A= IOCmueCmvuCmnA== RGVudHJv YsO2cnNl IOCyreCyvuCytw== 77yM56ys INeV15HXog== INCw0YLQsNC5 0LPQvtC5 IGhqw6Fs U2luZA== 0LTQsNGA0YvQvdGL0qM= 0LDSm9GC0Ys= Lk5vbWJyZQ== INi52Y7ZhA== 4Z6Y4Z+S4Z6W4Z67 QVNJTA== IHdpbnQ= IOCqpOCquOCqteCrgA== SVNUSUNT INGF0L7RgtC10LvQvtGB0Yw= dGVybm9vbnM= IHZhbmRhYW4= IGVub3Jtb3VzbHk= IOeUtQ== IGNvbHQ= VmFr Y2VudGFqZQ== aWNpaQ== IHRlcmFwaQ== IOCkuOCkvuCkrOCkv+CkpA== IHZhbGxl LkVudg== IOCoteCphw== IG9mcmVjaQ== INC70LXRh9C10LE= INiq2K3ZgtuM IENTUA== IFJlZmVycmFs IHByZWZlcsOqbmNpYQ== IEhTQkM= IEFud2VuZHVuZ2Vu IEla X3dpcmU= IGNoYXJhY3RlcmlzZWQ= IEh1bA== 0Y7QuQ== INin2YTYr9mI2YTYp9ix LlBhY2tldA== IGNhbGlicmF0ZWQ= IHNpbsOz 0LTQsNGC0Lg= IGtvbW11bmlr b2xvcg== LnJlZmVyZW5jZXM= 0LrRgtGW0qM= IEphaW4= 44OL44O8 IFByZXNlcnZhdGlvbg== ICl9Cgo= IGFtYXRo ZGVjbHNwZWM= YWt0aW9ucw== INGH0YvQutC60LDQvQ== U2xhdGU= IHptYW5qxaE= IOCwhuCwtg== 24zYtNuB IOCwruCxguCwteCxgA== IOGDoeGDmOGDnA== fX0pCg== dWxpZXJlbg== IEFOU1c= KT4K IERpdmVy SGFuZHNoYWtl IOCqruCrgOCqoeCqv+Cqr+Cqvg== IEJyYXRpcw== IGZhbnTDoXN0aWNv X0NPTlRST0xMRVI= INC70Y7QsdGD0Y4= 2YbYp9i3 4b+W IHbDoWxs ICI7Ig== 44Oq44O844K6 aGVwbw== U0VMTA== aXRydXN0 LWNvbHVtbnM= IGNsZWFuc2Vy IGt1ZmFuZWxl KG11 IG1vaGw= IHlheW8= IOCksOCkueClh+Ckl+Ckvg== IHNsYXBwZWQ= IGtvdWRl cmlnaHRz INin2YTZhdi02KfZg9mE aXRpa28= 4LOB4LK14LOB4LKm IHNhcHA= b2xlY3VsZXM= 5aSp5aSp5bCE IGdlY29u IENob25n dW5kZXM= IE1lc3RyZQ== IGZlaW4= IGJhc3RhcmQ= YWRhc3Rybw== 5ZCI6ZuG ZGV0ZQ== 0LTQsNC10Lw= IEhpYg== IGJhdHRyZQ== IFN0YWtlcw== LXpl IEVpbnN0ZWxsdW5n U29ydGFibGU= IHJhZGlvbg== YW1hbGFy T01FVA== 0q3QtdC40YI= INmI2KfZhNiq2LnZhNmK2YU= IExpbmtlZGlu IGRlc3RpbmFkYQ== IGhhbGxvd2Vlbg== IGNvbGxlY3Rpdml0w6lz IOi+vg== IG1ha2F0 RXhwYW5kYWJsZQ== IOCwruCxjeCwr+CwvuCwmuCxjQ== zr3Pic69 4Kew4KeB4Kex INGC05nQu9OZ0L8= IHByb2dyZXNv Zm9sZ2Vy IHRlY25vbMOzZ2ljbw== L3NhbXBsZQ== IHNhbmRzdG9uZQ== IG5pZXV3c2JyaWVm IGJyaXRhbm5pcXVl 2LrZhNin2YI= IHVwYW5kZQ== IGTDrWt5 5rKW IMOpcXVpbGlicg== IGFjcXVhaW50YW5jZQ== 4YCe4YCx4YCs IGNoaWNhZ28= 0L3QvtCy0LXQvdC40LU= IGthbGF5YW4= 15vXoQ== YXJrZWQ= bXVsdGlw IHNlYmVzYXI= Lmxr bGHDvXlu IFN1YnNlcXVlbnRseQ== INCw0LrRgtC10YA= fQoKCgov TEVCZXRh 7Ja07KeE IOGDmOGDrOGDpw== Sm9uZXM= 7J2867O0 INeW15nXmda3158= KHNldHRpbmc= IMOq bGTJmQ== IGVkZ3k= IHBhZ2dhd2E= ZW5jaGU= L3ZlcnNpb24= TGltaXRlcg== INCx0ZbQt9C00ZbSow== w6lyaWNhcw== Ly4K c2lnbmFscw== 44CR77yM SVNS c2FuaXRpemU= w7Zzeg== aWVyc3Q= IGNvaWZm IEJla2FubnQ= INC90LDQv9C40YHQsNGC0Yw= U3Rvcg== 4Kay4KeA4KaX ecOk IGNvc3BsYXk= 6rCA6riw IOCyruCyvuCyoeCysuCzgQ== IE1vemFtYmlxdWU= 0LDRjtGJ0LjQtQ== 4KSe4KWN4KSc 1b7VoQ== c2FuZA== KEJpbmFyeQ== IERlZWw= IE1pbmRz IGJlbGdl IG1pc2NvbmNlcHRpb25z IikuCgo= ICdcJw== IEluZGlnbw== IHBlcnNvbmFsaXphZGE= IMOpbm9ybcOpbWVudA== IGhvcnJpYmx5 IFBpeGVscw== IOCkreCljeCksOCkrg== 4K+B4K6w4K+I LkdsaWRl IGxvd28= IG1pbGlv IHBlcmlnbw== 4KWN4KSf4KWN4KSw4KWH4KSy INCa0J8= XE1lc3NhZ2U= QU5USVRZ IHZvb3JzY2g= IOC0leC1guC0n+C1geC0pOC0suC1jQ== X0NIQVQ= PSd7JA== 0L7Qu9C90LXQvdC40LU= INGC0LDQutC4 IHZlZ25pcg== IGfDvMO9w6c= IGRpcmV0dGFtZW50ZQ== IHdoZW51YQ== YWlsb2dh IHBvZMS+YQ== IOGDo+GDquGDrg== 5Yi25a6a IHTDpGjDpG4= ICcnfQo= INCg0LDQt9C80LXRgA== X3Vj IGd5bm53eXM= 24farQ== 0YPQutGD0LzQsNGC0Lg= IGR6aWHFgmFs IGZvc3NlbQ== IFNlbGF0YW4= LdC80LA= 5Zu95aSW 5rGf5biC KWFwcGxpY2F0aW9u IFN1YnM= IGN1YW50b3M= IHByb3NlY3V0ZWQ= b2dyw6FmaWNvcw== INGA0LXQudGC0LjQvQ== IEtFRVA= cmFuYQ== 0LDQvdC00YA= 77yM5o+Q6auY INio24zZhdin2LE= CXNucHJpbnRm eWVlbg== IGJyZXdlZA== w6lzaWw= 4LK/4LK14LOD4LKm4LON4LKn IOS4nOS6rA== LnRm IGRldGVybWluaXN0aWM= 0LjRgdGC0L7QuQ== IGxlZmF0c2hl RVJH YWJldHM= c3BlcnM= 5Lul5LiL566A56ew X0NIQUlO IE9TQw== d2lya3VuZw== IFNBTVBMRQ== 4oCZw6ljcmFu IE5pam1lZ2Vu IGVzcG9zbw== IGRlbGFy 0LrQvtCy0L7Qs9C+ IENvbGxhcg== YmVuaQ== IHN1Ympla3Q= INWh1bbVpdWs VmlkZQ== IGZlc3Rlbg== IG1la2Vt cmVnZWxz PENhcg== IEJoYQ== IGluc2VyaXI= cmVzcG9uc2Vz 0LXQvdC90ZY= 15bXnA== zq/Ots61z4TOsc65 xJFlbmpl IOC0ieC1vg== INin2YfZhduM2Ko= 4oCZaW50w6k= IOWSjOebmw== IGzDpm5nZXJl 0YLQuNC60LA= 5bCR5bm0 IGvDvGx0 b3Jrcw== 5Yqg5bel 2YTblQ== aWdhdGU= IG1hbnRpZW5lbg== IHNlcnk= IGJlbWVyaw== cGFzc2Vz bWFjZW4= IHBvcm5vZmlsbWVy IHNleGVz VmVyZGVy X291dGVy LnpheHhlcg== XSko IOCkreCkj+CklQ== IFBBUA== IENhbWVyYXM= INC30L3QsNC90LjQuQ== UHJvY2Vz 0ZbQsw== IGV2b2x2ZXM= 0YvQvdGC05nQuA== IHZvb3J6aWNodGln IHdhbGlv IGNhcGl0YWxpc21v X2p1bXA= IG1pZWpzY3U= xatyYQ== IOq5ig== IHRpbGdhbmc= IGFic3RyYWN0cw== dW5jaWF0aW9u w7ZwZg== 4K6/4K6v4K6+ IOiAgeaXtuaXtuW9qQ== IGFtb3Jl Z2dl X3JlY2VudA== cmFx IHJhbWFjaA== LXNlY3Rpb25hbA== IG1hZW5kZWxlbw== IFZlbmRh IGVjaGljaGU= INmF2YTYp9iq c2lw IHTDqWw= J2Ftw6lsaQ== RFNQ IGNvbWJhdGly IHNpemk= 15nXkdeo16E= YWJhbGhv X1JpZ2h0 157XoNeU IHN5bXBhdGhpcXVl IOqyrA== IGVkZW1h Q2hhbmdlcg== ZW1hcg== LWVudmVsb3Bl 4YCb4YCy 0LXRh9C60Lg= X210 4LOH4LKo4LOG IFN2ZXJpZ2Vz IOCmuOCmguCmuOCnjeCmlQ== IGhpbmt3YXdv INi52LM= LW1lbWJlcnM= IGFtYmllbnRhaXM= OkU= IFR1cmtz IGjDunQ= IHJlaXN0 0J/QtdGA0LXQtA== IGFzdHVjZXM= bW/EjQ== 4KS44KSs IGJyeg== J319Cg== ZXNzZXVycw== IGRhcmVk INij2KjYsdmK2YQ= IHVuacOzbg== IGdyZWM= IMiY IEZ1bmNpb24= IG5lY3Rhcg== IE9zbQ== IFNhaWJh IHBlcmlvYWRh IGtvcm9u U3VwcG9ydGluZw== X+S4u+mhtQ== RGlzdGFuY2Vz KHpvbmU= SG9p R3Vk INeh16jXmA== IHNvdmk= IG5lZWo= IOuwlOydtA== KERlbGV0ZQ== c2VtYXJ5 IHdhZQ== INGN0YDSr9Kv dXRpYQ== aWRsZXI= 8Z8= aXTDqWl0 IOGAhuGAreGArw== IHNwcm91dHM= ZGF0YXR5cGU= dWl0w6k= aW5pdGlz IM+Az4U= X2hlYWRz Ijw/ IHNjYWxlcg== IHJlb3JkZXJlZA== IGxha2hv IGJhbmdzYQ== IGxlaGE= IE9NWA== 44Oh44Oq IHBob3RvZ3JhcGhpbmc= IHNvYnJh IGJ1cnV6 LlZpcnR1YWw= IGFyYnJl IGFyYWJl IGludHVpdG8= IGNvbmhlY2lkb3M= 5YWa5bu6 5Ye65aSE IG91Ynllbg== INmE2LfZgQ== IFBhbG1hcw== 5YWt6IKW aWxpc2hp IFRtaW4= b3l1 bmR1bQ== ZHJhd2luZw== L3N0dWRlbnQ= IGluZ3Vy w7puYQ== 4KS54KS+4KSo IHVlZA== LkFyZWFz IOC0qOC0t+C1jeC0nw== aW5mcmE= IG55YW1hbg== INit2KfZiNmE INmK2LnZiNiv IOCmpuCnjeCmsOCngeCmpA== ZsOpcmVuY2U= INi62YbZig== INC/0YDQtdC+0LHRgNCw0Lc= IOWFrOeItQ== IE1BUlQ= IOCkruCksOClgOCknA== 4YOY4YOd4YOh INeR15zXldeZ15Y= aXRhbW9z IEhvdGxpbmU= RWRhZA== IMOWZmZlbnRsaWNoa2VpdA== IGdsYXppbmc= IGdwb2ludGVy INGP0qPRi9C70YvSodGC0LDRgA== IOCkl+Cli+CksuClgA== CQkJCQkJCQkJCQo= INij2YQ= RHVzdA== 4YOT4YOY4YOX IOGDm+GDoOGDkOGDleGDkOGDmg== IERlbGZ0 IOCwteCwv+CwlQ== 5ZWG5Z+O X1RhcmdldA== IGRlY2lkZWRseQ== 4Kak4Ka+4Kef IOCmruCnguCmsuCnjeCmrw== IGRx IGNvbmp1bnRh 2YbYp9im2Yo= X2Noaw== 15nXp9ei SWRlYXM= 5paZ55CG 4LmE4Lih4LmI4LmE4LiU4LmJ INCy0LvQsNCz QVZJ X0JVRkY= IE9wdGltYWw= 0J7QvdCw IOmHkeWwig== IGxldHRlcmxpams= ZWNhcmQ= IHByb2Nlc3U= 4KeH4Kay4KeH4Kaw IFBhcmVudGhvb2Q= emVpY2huaXM= INiq2K/YrtmE IElOQQ== CWZpbGVz LWJhbm5lcg== IHByb29mcw== IOC4q+C4uOC5ieC4mQ== IEZvcm1h a2nDpA== IGt1Z2V6YQ== 5ZCM5pyf IHJlY3RhbmdsZXM= 5Lit54m5572R 2YXYudiv2KfYqg== INC40L3RgtC10LvQu9C10LrRgg== ZXJnZW5pYw== IGliaWc= INC00LLQtdGA0Yw= IGFjcXVh IOW4neS4gA== IGNlbnRlbmFz IENoYWxsZW5nZXI= INiy2YXZhg== IGVzdHJ1dHVy ZsOkaGln LmNvbXByZXNz LVRlcm0= LnB1bGw= bW9xZGE= ZWly J2FpZGVy 5ZCO5LiA INin2YTYudmF2YTZitin2Ko= 55av54uC 4LS+4LSf4LSV dWNodGlna2VpdA== 2YjYp9i2 IGlycmV2 a2ph IGVucm9sbGluZw== IHF1ZWJyYQ== IOCmieCmpuCnjeCmrA== INCy0L3Rg9GC0YDQtdC90L3QuNGF IEVzdG95 IFR1dG9yaWFscw== IHTDrXBpY28= J2luZHVzdHJpZQ== IExva2k= IC8vKA== IEdvcmlsbGE= 15nXlteU 5Zue5bqU IGtlY2U= IHByaWRlcw== WmltbWVy YXNhbQ== Pklm IHR1dGVsYQ== IHLEgQ== IE1hbnU= IGltcGxhbnRhw6fDo28= IHNha2s= dW5jaW9z IGFqdWRhbQ== IG/EjWk= IG9tZ2Fhbg== IGFuZGVybg== Vmlld2luZw== YXJkxLE= IGRlcml2YQ== IENvdXJzZXdvcms= IOCmqOCmvuCmlw== IOCmh+CmpOCmv+CmueCmvuCmuA== IGxhcnZhZQ== aW50dmFs INGE0LDQsQ== 4LGH4LCo4LC/ IERpc2N1c3Npb25z IOCwmw== IHNpbGlrb24= IGtpamtqZQ== Ymhh ZW52b3Vk INC/0LDRgNC70LA= IGF2YWlz IE5BVElPTkFM IOCmnOCmvuCnn+Cmlw== IEdyZWVud29vZA== Z2FydGVu IHBlcnNlYw== IFBlcXU= IGFoYXlk X2Jz X0ZJWEVE 4K6/4K6v4K6u4K+N IHZlc3RlZA== IOCqquCqsOCqpeCrgA== INCe0KE= 0LDRj9Cy 15vXnteU 4Kq/4Kq44KuN4Kqf 4YOg4YOU4YOi bG9jaA== IGV4cGVkaXRlZA== aW5jacOzbg== IOC2veC2guC2mg== IG1lcmdlcnM= IFBhdHR5 ZHBp IG1hdXJpcw== 4YOU4YOc4YOU4YOR4YOa INmG2LPYrtmH IOWkqeWkqeS4reW9qeelqOS8mg== IG9mZmVuc2ljaHRsaWNo IO2VoOyduA== INCx0YPQu9C4 IFNhcmFzb3Rh IHN6YWI= IHRlYWNodA== IEZ1Zw== 0LvQtdC90L3QtQ== INGB0LLQsNGA 65ag IGVudGY= IHBhbXdl IM61zrrOsQ== IHNlY29uZGVu IGFpcndheQ== YXJha2F0 INCw0L/QvtGI W3NyYw== 5oi2 IGNvbmNlbnRyYQ== 4KeN4Kaa4Ka/4Kau X3RyaWFs IOCwuOCwguCwqg== c3RkYm9vbA== INin2YTYqtmE2YE= IG1lbnRvcnNoaXA= IG1hdGVtYXQ= IOm+meiZjg== dW1pdA== VHV0b3I= IGVuY29udHJvdQ== INGI0LvRjg== INin2YTYo9mE2LnYp9io IGZyZWV3YXk= dmVudXM= CWFjdHVhbA== IOOCouOCpA== IGtpZW5ldA== IFRoaWNrbmVzcw== INin2YTYp9iz2YU= bGVhc2luZw== ZW5za28= IG5qZW5nb2Jh INGA0LXQudGC0LjQvdCz IOC0juC0tOC1geC0pA== IFN0YWRpb24= IOKXjg== IHTJmWzJmWI= IFNjYW0= 0Z7Qu9GP IEp1Ymls INm+2qk= IFNoZWxsZXk= INin2YTZg9mH2LHYqNin2KbZitip IGtvbnNh IElzcmFlbGlz IMOubA== L3BsYWNl IOCuteCuv+Curg== Lm5paA== z4DPjM69 IOCkuOCkruCljeCkruClh+CksuCkqA== IOWkqeWkqeS4reW9qeelqOWumOaWuQ== IGZlbWVuaW5v 4K+B4K614K6k4K+B IG5vcm1hbGVtZW50 IGV4Y2VwdGlvbm5lbGxl LXNjcmlwdA== Q3Jlbw== IHJhaW5mb3Jlc3Q= IOCkhuCkluCkv+CksA== IGNsYWQ= IOydtOuKlA== INKb0Lg= IHbDpGx0 IEthbXBhbGE= INC00LXQudC00ZY= Z3JhcGhz IFZlcnNpb25z 4LKk4LON4LK1 IGZvcmJpZA== YXRhZQ== IGRldmFu IGdlZ24= IOqzteuPmQ== IGdlc2NoYWZmZW4= J10uIic= 44GM44GC44KK44G+44GZ U3BvdGlmeQ== IExlYWRwYWdlcw== IGJvb3R5 IOCqqOCqueCqvw== 5oCO5LmI5LiL6L29 R3JpcA== IOCqneCqoeCqqg== IGFhbnNwcmFr 4Ka/4Kag INi02qnYs9iq 4KS/4KSs4KS+4KSw bm9r IG11bHRpbGluZ3VhbA== IHbDpHJsZGVu LkFjdGlvbnM= LXNldmVu JnBhZ2U= aWpza2lo IE91dHJv IFRlYXI= IHByaW5jaXBhbGx5 77yM5L2/ UHJvamV0 IOCksuCkl+CkvuCkr+CkpA== 6YCf5aCx INC80YPRgdGD0Ls= IGNvbnNvbGF0aW9u aGVhbA== 4YOt4YOY4YOg4YOT4YOU4YOR4YOQ IGluc3VsdGluZw== 4oKs4oCd fS4NCg== LHJpZ2h0 IGdlYm9vcnRl yZl0bMmZ a3RpbWU= IEFibGF1Zg== X2RpZQ== IHVuZGVyc3RhdGVk INKb0LDQttC10YLRgtGW IGRlYXJseQ== LlNu IG1hbG9z TmVpbg== IGVzcGFuaG9s IEFyY2hpdg== VHJpYWxz IOCqueCqnOCrgQ== IHN0w7Zk wq1y IGJyYXpv IHRoaeG6v3U= IGJyYXppbA== IEthdGVnb3JpZW4= IM60z4HOsQ== YXJyaQ== X3NwYWNpbmc= IENyaWFu INC/0YDQvtC90LjQug== aXJ0aWVz IGhvbm4= IHBhcmHDrnQ= QnJlYWQ= 44Kk44Oz44OB INCx0LDRiNC60LDRgA== Rmli dW1hYg== IGh1bWFuZQ== 0LfQsNGC IG1wbA== a3Rlcw== IETDoQ== 4LiK4LmI4Lin4Lii IHByw6lub20= IGphaQ== IGFuZ3VuaQ== d2VjaHNsdW5ncw== LlByZWZlcmVuY2U= KXQ= X3NoYXBlcw== IHRyYWJhbGhhZG9y IEVuYQ== IM6zzq/Ovc61z4TOsc65 cnVtcA== INGB0Y/QvA== LnJhYmJpdA== IGNhbXBlw6Nv 5YWx5Lit5aSu 4oCd77yb L3Byb3BlcnR5 IGZvcmRlbA== J2xpc2g= c3R1bmRlbg== ICAgIAkNCg== IEVJ IHN0ZXdhcmRzaGlw 7IaM64WE 0LHQsNGA0LDRgg== IExvb20= IGRpY3Rh L3RhZw== IHNla3N1ZWxl IGthdWc= IOCmruCmueCmvuCmqA== KEJpdA== INin2YTZhdi12YbYuQ== IG7FkQ== IOCqleCqvuCqsOCrjeCqr+CqtQ== RGFhcm5hYXN0 IGtva2Vt OmhpZGRlbg== 2YXYsdin2KE= KioqLwo= IOCqteCrgw== dW5zdXBwb3J0ZWQ= 4KS24KWN4KSw IGFmeWE= 0L7RgNCw0LzQuA== IGNvbnR1ZG8= 4Liy4LiH4Lin4Lix4Lil IHNobm9uZw== bmFuY2U= fS8+ XT09Ig== IO2UhOuhnOygne2KuA== IGNhcm5ldA== 4LSx4LS/4LSy4LWN IFBhY2tlZA== IHlhbmdp IOCwsOCxi+CwnOCxgeCwsg== INin2YTYrdis2YU= INCh0J0= IHByaXZpbMOpZw== IGVsxZF0dA== IHByZWRzdGF2bGph IG5pY2VzdA== IEzDqA== cHVydQ== INC90LDQvNGD0LTQsA== 6Lyv IHNlZ24= INmH2KfZig== INC/0YDRi9C6 IHBpY2hh YnVsYW4= XDo= IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= aWJpbGl0w6R0 IOC0h+C0qOC1jeC0pOC1jeC0r+C0qOC1jQ== w6RocnVuZ2Vu T3Ji YW5kdXM= IG9iamVjdCdz IOaWsOWkqeWkqeW9qeelqA== 44OW44Op IM+Dz44= IGV4cGxpcXU= X2lvY3Rs IM6yzrnOsg== IHZlcnN0YWFu c3Rpbg== 4LOG4LKv4LK+4LKX IFRvbWF0bw== IGplZG5vdGxpdg== PT0k w6ZyaW5n IFNjaG9sYXJzaGlwcw== IGJvZg== IOqwkuydhA== IG5ld2JpZXM= 4K+A4K6w4K+N IEh1bnRlcnM= IGVuZGVyZWNv 15nXmNec 2pHYpw== IG1tZXThu6V0YQ== bWVhc3VyZW1lbnQ= KGRlcA== IENvbXVuaWNhY2nDs24= IFVtZmFuZw== bGljdGluZw== dW5jdHVhdGlvbg== 5YiG6aGe KENvbnRyb2w= 2YXYsdin2YY= IEhvcnQ= IHloZGVzc8Ok IHJlc2V0dGluZw== IETDpA== IHZpYWdnaW8= IGd5w7Nn IOWNmuS5kA== IGdhcmRlbmVy IHBvZXPDrWE= xZ9kaXI= IG9ubmlzdA== ZXBp IHZlcsOkbmRlcm4= IEjDtHRlbA== IFnDtm5ldA== IE11Y2hvcw== IGRvY3VtZW50ZW4= VHlwaWNhbA== IHJlc3RvcmF0aXZl 4KSo4KWH4KSq4KS+4KSy IExlZWZ0aWpk IGZhbWluZQ== KCl9LA== IOyEnOuhnA== QlVZ INGA0YvRiA== a29yYg== LmdtYWls IEFMRVJU YmxlbmQ= IHNlbnRhZG8= ZG93 IOCkteCkv+CknOCljeCknuCkvuCkqA== UmI= IOCkruClgeCkq+CljeCkpA== IGRlYm91bmNl X0luamVjdGVk 0LDRgtGB0Y8= 4Z+B4Z6P4Z+S4Z6P INC/0YDQtdC00LvQsNCz0LDQtdC8 15nXnNeZ IGRlcHJlc3NpdmU= IGludGVyZmVyaW5n SW5mcmFzdHJ1Y3R1cmU= IHBvc2FtZQ== IG1lZGFyYmU= INqp2LHYp9qG24w= 2YPZjg== Olwi LkV4Y2Vs IOODmg== aGxp LlBpeGVs IHphbmc= CSANCg== 0YfQvdGL0Lw= X3lhbWw= IHVycmFpbm4= IOaMhw== U2VwYXI= IHVyxI0= LmRyaXZl INGA0LDQt9Cy0L7QtA== 4LGG4LCo4LGN INC/0YDQuNCz0L7RgtC+0LLQuNGC0Yw= X21hZ2lj IGFjY2VwdGU= Z2V0dGV4dA== IG5kZWdl IEV4dHJhcw== IGFsbG9jYXRpbmc= INiz2YXbjNiq TWlzdA== IGVpZ2lu IERFQUQ= INek15DWtw== Q0o= QUdJTkc= LnJhaXNl a29uYQ== INC30L7QvdGL LlNN LXRlc3RlZA== IGLhurk= LnJlcA== 4Ka44Kau4Kef 0L7Qu9C+0LbQtdC90LjQtQ== IElzaQ== IHLDrWc= IHplbWxqaQ== IFJoaW4= IEp1ZGdlcw== IGRhcmJh IGNvbGxlY3Rl IENvbnR1ZG8= TmFjaGRlbQ== Lk5ld3M= IEd1YXJkcw== LnNheA== IHRoeW0= INio2KfYudiq INC00LDRgtGL LmludGVncg== RkxJQ1Q= IEVsaXNl INCy0LjRgdGC LVBhdWw= INC90ZbRhw== IEFyY2hl RXN0b3k= INGB0YLRgNGD0LrRgtGD0YDQsA== ICVb IHRlZ2Vuc3RlbGxpbmc= IFN0YXJy IFdpeA== IENvbnRyYXN0 IGJlZ2Vn 0LDRgtC10LvRjNGB0YLQstC+ 0LXQu9GW0Lo= INC70YM= IHJ1d2E= 4YOj4YOX4YOu YW5hc2Fu IGRvY2VudA== IOCquOCqruCquA== IHjDqXQ= IGZvZ3k= YmxleQ== X0xpbms= IHDDug== RU5URVM= 4LS14LWB4LSu4LS+4LSv4LS/ IEphaQ== bWFuxLE= IEhPU0k= cmVlaw== aWZhaA== QVRPTQ== IOC0leC0ruC1jeC0ruC0v+C0seC1jeC0seC0vw== b3Jlbw== 4KS24KWN4KS14KSw IGVuZW1pZ28= INmG2LPYqg== IGVubmVt IMOcYmVyZw== IHdlcmtlbGlqa2hlaWQ= aXN0aXQ= ICcsJyw= IHLDqWFsaXPDqXM= R1JJRA== IGludGVycHJldGE= IGltcGVkYW5jZQ== IGFubmlo 4LSn4LS/4LSV INC00L7RgdGC0LjQttC10L3QuNGP RGVjbGFyYXRpb25z LmF0Z3VpZ3U= KilfXw== IExO INC/0YDQvtGB0Yw= IHBlcnN1bmFz L3Jlc2V0 6aqX5bGA5o+t56eY 57uE5YWt Rmlt 5Ymv5Lmm6K6w IOCqteCrgA== INiq2YXYp9mF24w= 0YHQvdGL Il0o IGV4cGxvZGluZw== IG92ZXJsb2FkZWQ= IOS4ieWbvQ== IEltYWdlbg== INGC06nRgNGC IHNlbWJsYWl0 b2dvbg== KE5vdGlmaWNhdGlvbg== IHBvaXNzb25z cm9vbmc= 7ZiE7J6s INGC05nQvA== dXNlcmluZm8= IOuCoOynnA== IGFkYXB0YWNpw7Nu IGNhdXNhZG8= INCw0LvQutC+0LPQvtC70Yw= IHRlaXM= IHN5Z2RvbQ== IHZlcmhpbmRlcnQ= dXNjaHQ= W2xldmVs IHBlcnNlbg== 4Kq44Kq+ IFJlbW9kZWxpbmc= IHdheWE= 6r+I SmFjb2I= IHDFmWlq dW1hY2hlcg== KGNvbW1pdA== IGJlb29yZGVsaW5nZW4= IGlob3A= YXBvc3Q= T3V0Ym91bmQ= INCw0YHQv9C10LrRgg== 5Y2a5aOr LWNoaXA= IG7Do2VzdGU= INii2YXYr9mH IGZlbGx5 IHZlcndhY2h0aW5n IOe7j+e6rA== UGFydGU= IG3FsWvDtg== RGFzcw== Lkl0b2E= IE11a2FtYQ== INW41oLVvdW41oLVtNW2 2K7Yp9mG IHp1c2FtbWVuZw== LnRlbXBlcmF0dXJl IHNlbHZmw7hsZ2VsaWc= IEVyaWNr 4LGC4LCw4LGN VG91Y2hlcw== YmFzb2tl Lm5vdGlmaWNhdGlvbnM= IGZvbGdlbmQ= 5aSN5p2C 44GZ44KL44Go IOCkleCljeCkt+Clh+CkpOCljeCksOCli+Ckgg== L3dpZGdldA== IHBlbml0 IHByb2plY3Rpbmc= INmF2YPYp9mB2K3YqQ== dWFi IFpvbmVz 15nXk9ef IGNveQ== Lm1vYg== IHDFjQ== IHBhbmTDqW1pZQ== IGxhdWs= IGJhdGk= 44OG44Oz IHNjaGlja2Vu xIFpbmE= IOCkquCkoA== INin2YTYudir2YjYsQ== INGC0YvRgdGP0YfQuA== QklUUw== LnRvZG9z 66Cb IGdlbm5haW8= IGFkb2Jl IGhhZGly CW5vdA== IGhqZWw= IFBlZGlkbw== INeU15DXl9eo15XXnw== IGJhY3Q= IOyLnOuvvA== IFdvbGZl INeR16DXldeh16M= IGVsZXRyw7RuaWNv 4Lie4Lia IHxffA== IGNsaWNhcg== IFNtaXRoc29uaWFu IGNoY2lh 4K6/4K6q4K+N 2YPYp9iq2Kg= INin2YTZhdik2YXZhg== IEFudGhlbQ== IE9TUw== IOGDo+GDmeGDlOGDlw== INGB0YfQuNGC0LDRgtGM IG91dHNpZGVy INCy0LfQs9C70Y8= IOCkruClgeCkleCkvuCkrA== IHVuZGVyc2lkZQ== IGJlYXV0aWVz IHVuZG9jdW1lbnRlZA== dGhlcm9z 6IiU cHLDpGd0 QW5hbHlzZQ== ZGV2ZWxvcGVycw== IGZlaWw= INii2LPbjNin2Kg= IOCwquCxjeCwsOCwruCxgeCwlg== b2xpZGF5cw== IHllbWVr IOezuw== IGF0bHk= IOCyueCzh+Cys+Cyv+CypuCysOCzgQ== emluZ2Vu 4KSv4KSm4KS/ IOCkieCkpOCljeCklQ== IHZhY2luYQ== IHVuZ2xhdWJsaWNo IMO2bmVy INmD2YjZhQ== 0LDRgNGC0YM= IEFjaGF0 d2VpdGVu INKh0LDRgA== IHJlaXRlcmF0ZWQ= INeU16bXkw== LWt1 IGVudGhvdXNpYXN0ZQ== IOCkuOCkruCkvuCksOCli+CkuQ== LtCi IOCkleCkv+CkpOCkvuCkrA== YW5za28= b3BpdGE= IERvdWdo IGNvb3BlcmFjacOzbg== INmG2LPYrtip IHN0ZXJlb3R5cGU= IHBsYWludGU= L2N1cnJlbnQ= IGFycmVk QmVudA== IG95ZQ== IHZhbG9yYWNpw7Nu 4YOQ4YOa4YOo4YOY dGVjaG5pYw== 5YWG cXVpcnJlbA== VHJhYmFqbw== IHRhZ2V0 IExvY2FsaXphdGlvbg== w6lmb25v CXBsYXk= IERlbw== 4YOd4YOW4YOU IHZlcnPDtWVz IGFsbGVsZQ== IEhhdGhhd2F5 4KS+4KSJ4KSB4KSm4KWI 7ZWY7JiA64uk 77yM5Lq6 PkVycm9y IGV4cGVyaWVudGlhbA== IFJlZGVtcHRpb24= IGV4cGxpY2Fkbw== YW5ub3VuY2VtZW50 IEdhbWJsZQ== KCIvOg== eW5kYWt5 IGdhYmluZXRl 77yJ44CL INC60YDQuNC/ YXJkaWU= IEFtaXNo IHB1bnRz 0LvQsNC50LTQsA== IGZ1bnppb25l IGJhY2twYWdl IE1lc3Q= IGZ1dHVycw== IEdpcw== IOS4reWkqQ== IGZvcmFu Lm1hY2hpbmU= IGFycml2YQ== INmE2YrZhg== LnNvcnRlZA== Lmh3 IG53b2tl z4HOt8+C IGluc2FubGFyxLFu RGlhbG9ncw== IEtvbGU= 15zXp9eV15fXldeq UExVR0lO 4KS+4KSv4KWB IOWkqeWkqeS4reW9qeelqOaAjuS5iOS5sA== IGxvb3Bo 4Kau4KeN4Kas IOuwnOqyrA== TXlzdA== IOa1t+WNl+WkqeWkqeS4reW9qeelqA== IGVpbmdlbGFkZW4= bWVpbg== IGRlbGVy IFpvd2Vs IERTRw== IM+AzrvOt8+Bzr/Phs6/ IHVuZGVyc8O4 IGFtYWPEsQ== dmlo IGtvcmtl bW9kcw== IGJvdXRz X18oKQoK J2l6 aWt1dGxv 4oCZVW5pdmVyc2l0w6k= IG1lam9yYXM= IGludGVyZXNzaWVyZW4= IGNvbmZyb250aW5n INGB0LLQsNC00Yw= asOzcmk= Q2F0YWw= IGFwcGFydGVu LXNjb3Jl X29mZmVy LUp1bg== IOGDk+GDkOGDleGDmOGDlw== Y3ljbGluZQ== VHVuZQ== LWNyYWZ0ZWQ= INmK2KjYrdir aW1vbmk= Qnll IOCoquCpjeCosOCorQ== IGJpbGlu 4KSw4KWH4KSf ZWxmdGg= 2KbZiNmG aWNow6k= INCz0LDQu9C+0Z4= IGRpemlh IHdhcXQ= INCx0LDQt9Cw IHVuZXF1YWw= IENoaW5la2U= IHBsYcOnYQ== IFN0YWRl IGpva3U= 2LfZhNi5 aW50ZXJw IGRkYXI= YXphaw== dGVhY2hlcnM= IOCwqOCwtQ== IGJhemU= IGRvdWxldXJz IGFjdHVhdG9y 1aXVq9W2 cGllZ2Vs LdCi INCw0YDQs9Cw LWNsZWFy INCw0LrRgdC10YHRgQ== X3N0dWI= IHJlZGVmaW5l IGJpY2FyYm9u IE1hZGRlbg== INiq2KzYudmE Y2xpbmU= O2NvbXBsZXg= IGVpZQ== IG3DrA== ZmxvYXRpbmc= ZXR5ZW56aXN3YQ== IHNlbWVq IHdoaXN0bGVz 6L695a6B IOWNig== YsOpY28= bmFkcw== IOydjOyLnQ== IEFuY2hvcmFnZQ== IG5hbm9z dXBoYQ== IMOlcmV0cw== IFF1aW4= QUdFTQ== INin2YTYsdmI2LPZitip U3V6 IEJVRw== IGVudHVzaWFzbW8= IG1lbWJ1dHVoa2Fu IEF1Z3VzdG8= 4LmH4LiV4Liy4Lih IG1hc29ucnk= IOC0heC0qOC1jeC0teC1h+C0t+C0o+C0gg== INCz0LM= zrzOtc+DzrE= INGB0YrQtdC8 Wy4u IG51Y2xlaQ== IOCqmuCqsg== b3NwaGF0ZQ== bGVnZ2luZw== xaNpZWk= IC4uLy4uLw== 5Y2U IHRldGhlcg== Y2FrZXM= CVJlZ2lzdGVy KGR1bW15 IGFoYWw= IHNhbmN0aW9uZWQ= IHBvc8Op IG1leWRhbmE= IE9yd2VsbA== IGRlcGVuZGVk LkFnZW50 IGRpY2Vz INei15XXqA== IGbDqHQ= IFByb2N1cmVtZW50 IE5hY2hoYWx0 KGNhbg== V2hpdGVsaXN0 YXV0aGVudGljYXRlZA== 0YLQsNKT0Ys= LUFydA== IGlub2w= IGFzc2Vz IG1pc2VyaWM= IFNUQVRJQw== 1aHVv9Wr dG9waWE= IGthdGhvbA== PXJvdw== cHJlcA== KHJvdA== INeU15LXk9eV15w= IG1lbGxvdw== 4KWJ4KSy4KSw 55qE6YeN6KaB cnRj IGdyYWNpYQ== xJNqdQ== IGluY29uc2lzdA== INC00LDQvNGL0YLRgw== 0YbQuNC+0L3QtdGA IHdhZGFuZGE= 7KeA64+E IHJlY29uc3RydWN0ZWQ= INmF2LTYp9io2Yc= IGlkb3Nvcw== 4LS/4LSq4LWN4LSw4LS+4LSv LWJvZGllZA== Uk5Bcw== INiz2qnYqtuM IGV2aWN0aW9u X1BPSU5UUw== IGtyaXRpc2No amF0ZQ== IGdldGNoYXI= CWFy INCy0YrQsg== IFNlZ2E= cmlhbmE= IEdhcmE= LWlkZW50 IExpemVueg== 4KuN4Kqe4Kq+4Kqo IGluZ2E= YXJiZWl0ZXI= IGNvbnNlcXXDqm5jaWFz IENvbXB0 IHZsYW4= IHByw6l2b2ly INCh0LjQvA== YXdn IGtyaXRlcg== IEFjY3JlZGl0YXRpb24= X3VudXNlZA== IOGDouGDpw== 6LOH6KiK c2V0eg== X3BhbGV0dGU= S2Fi IG7DqWU= IHNwcmVhZHNoZWV0cw== IHBpbGE= IG9ydGFr IFNjaHJv 5bm05Lu9 IHbEgQ== SGFp a3dhcmE= IEtleW5lcw== IEdvdmVybm9ycw== Omxpc3Q= Lm1pZGRsZQ== b29kaQ== IHZpc2l0YXRpb24= 4LK44LON4LKf IFJpYmVpcm8= IGNyb2Nr 6K6v572R IGFkamVjdGl2ZQ== IGJpc3Rl IGJvb2ttYWtlcnM= IGtlc2lu 4KS24KWN4KSu4KWA4KSw IHByw6lhbGFibGU= LmF0dHJpYg== IEN5cmls IHJvdW5kdXA= aWVuc3Rlbg== Jm0= LmVuZw== X0xvY2Fs ZW1pc3Q= bWVlbg== IFdpbGRjYXRz 77yaWw== IFRWQQ== IHRlaWxl IHRyw6w= IHJlY2xhaW1lZA== K3htbA== 5aWz5a2Q IGtpYWw= aW5pemk= IOGDquGDruGDneGDleGDoOGDlOGDkeGDkA== CXJhdw== YWtu LnBpeA== INij2KzYstin2KE= IGlzdMOkbGxldA== IGRlbWFubg== YXRpdGE= IGNo4bqheQ== IHbDoWxpZGE= 2KfYstmK b2xlbGxh IG9tbmlidXM= INC00LXQudGB0YLQstGD0LXRgg== TW9kZXJhdG9y 0LXRhdCw0YLRjA== 5pel5Lqn L3Vzcg== IOCkqOCkv+Ckr+CkruCkv+CkpA== 5reY5a6d Jkg= LnNi LkNpcmNsZQ== IHNoaXJr IGRldmllbm5lbnQ= INGC0YDQtdCx0L7QstCw0L3QuNC5 J29yZ2FuaXNhdGlvbg== INin2YTZhtmI2KfYqA== 15DWt9eo15g= IEJhcmNsYXlz 77yM5a6D IEV4aXN0ZW0= 5pel5pel5ZWq KG1p 2qnYp9mF IEdFRA== YXR0ZWw= 0YLQsNGG0LjRjw== b3JkYW0= INmK2KfYrw== LXBhZ2Vz IEpheXM= IGF4cw== IFdlcmt6ZXVn IOCwuOCwruCwuOCxjeCwrw== 0LLQsNGH 4LGN4LCh4LGB IEJhemFhcg== IGNvw7Fv IOyUqA== IOCyqOCzi+CyoeCyvw== IFRvbnM= IM6xz4XPhM6tz4I= 5piv5Zyo IEzDpHM= cGF5cGFs IHBhc3RyaWVz IHZlbGlrZQ== W2xhYmVs IOC0qOC1hg== CWNvcmU= INGA0LDQt9Cy0LjRgtC40Y4= IGJhdQ== L3B1Yg== INeb16HXow== dW1hYQ== IHBob3NwaG9ydXM= 6aaW5qyh IHB1c2U= IGltcGx5aW5n 4LST fQoKCgovLw== QmFjaGVsb3I= IHZldHM= IHJlcG91cw== IGVtcHJlbmQ= IHdoYWthaGFlcmU= X0lEUw== IERlaW5lcg== IGluZGVz 15nXoNeV16c= IG1zZQ== TExMTA== IHdyYXBwZXJz 1aXWgtW41oA= 4K+N4K6q4K+B 4oCL4Z6a4Z6U4Z6f4Z+L INC60YPQvdCw0L3QtA== IGVubGlnaHRlbmluZw== IHVsZw== CXRoZW4= IEhlbHNpbmc= IFJvaQ== IHN1Y2NpbmN0 IGFn55yf5Lq6 IGV4w6ljdXQ= Oi0tLS0tLS0tLS0tLS08Lw== ICglKQ== IGJhYWhhbg== b2Rhcg== bWxhcg== INCw0YDQsNC70YvQug== 0qnQsNKn IGFkb3JlZA== c3RkYWZ4 IGvDtXJ2YWw= IFJlaW5h IHZpcmc= Ym9uaQ== wq1uZW4= IOCmuOCmruCnjeCmquCnjeCmsA== ZsO4cmluZw== X3JlZHVjZQ== IEVER0U= IFJpeQ== IG1hZHJlcw== zrPOtc67 cmVmdQ== CVNlcnZlcg== IHRha8SxbQ== 0Y3QvdGM 6auY5Lit IHN1YnNldHM= INGB0LTQtdC70LDQu9C4 IHJlc2lzdGVk IGJlYsOpcw== 2KrYsdmB X1RpdGxl 6L2s5o2i IHByaXZpbmQ= 16jXkNeq KElP CXB3 5Yqz5Yqo 4LiY4Li4 IHNvZnRlbmVk CUdVSQ== 4LCu4LGG4LCw4LC/4LCV T3o= IEJVUg== 5aSp56m6 IGlrdW4= L2VkaXRvcg== 6Lev57q/ IEluaGFsdHM= IOCmuOCnguCmpOCnjeCmsA== IOWNmuS8lw== IFNoYWxs LkFyZWE= IOq3uOuDpQ== w6lteQ== IOC0j+C0lQ== LkVt 4Kai4Ka8 IGFwcHJvYWNoYWJsZQ== IOCmrOCmleCnjeCmpOCmrOCnjeCmrw== b2xsYXJz IFJIUw== Q29tcGFyZWQ= IExvaQ== IHByw6lzZW50ZW50 IOCkuOClgeCksOClgg== IHR1dGFq 56KO IHBpZ21lbnRz 05nRgtOZ0YA= IG5ndXQ= ZGRpdA== X+S6uuS6uueisA== LtCU LkJyb2FkY2FzdA== INep16rXmQ== IGZpaWNhbg== LVNob3A= IG9ybWFp QXNobGV5 UHVpcw== IHN3aXZlbA== 5a6j5biD INCw0YLQvNC+0YHRhNC10YA= IGVubGlzdA== INeR157XodeS16jXqg== IFN5ZA== IG11bGNo LUNocmlzdA== IHRyYW5zYWN0 IGRpdmVz IG5leHVz Rm9ybWlr IHTDpHlzaW4= 2K/Yp9ix2YrYqQ== IG91dHBlcmZvcm0= IE11bHRpcGxheWVy INmK2K3YqA== IGNvdWdoaW5n 2obbkA== 7J24642w IOCwuOCxi+Cwt+CwsuCxjQ== INqp2KfYsdio2LHYp9mG IGZ1bWFy IENhY2g= INin2YTZhdin2YTZig== 4Kq/4Kqo4Kq+ 4oCN4LS34LSC LkFG QWRy IHNsdXJyeQ== IEFmdGVyd2FyZHM= IHNheXQ= IOCkquCkueClgeCkgeCkmg== IG9ibGlnYQ== IGF1ZnRyZXRlbg== INGC06nQvw== 57uE5LiJ INC90LDQudC00LXQvQ== 2YbYs9in2KE= ICIrIgo= IGNocm9ubw== 0L7Qv9C40YE= IGFiYXk= L3Nu J2V6aWU= IHRlbXBvcmFkYXM= 2KjZiQ== KCk7Ci8vCi8v KGJpbmQ= IGNvbXByaW1lbnRv IGJhZml0ZQ== YW1wb2xpbmU= b3RoZWxp INuM2YLbjNmG 6JuH IG91dGFnZXM= IG3Dtmdlbg== IGFjb25zZWw= IEN6 IOCqheCqnw== 4Lit4Lig4Li0 w7xyZA== YWppYQ== IHV3YWfEmQ== IHJhcGF6 5LuL57S5 IGJlcmo= xLF5YQ== IM+AzqzPgQ== IHNrdXBhag== 4YOS4YOQ4YOb Li4uIik7DQo= INec15DXldeo15o= IG3DtWp1dA== IFBFUkZPUk1BTkNF YWx5c2Vy IOesrOS4gA== IHByaW9yaWRhZA== TGVhdmluZw== INin2YTYp9iz2KrYrtiv2KfZhQ== IE5ldWVy IGZlc3RnZXN0ZWxsdA== LkNSRUFURUQ= INmE2LnYp9mF IHBvc3Rwb25l IGdpZnRpbmc= IHBsYXR0ZXI= 0JDQotCe X0ZPUldBUkQ= SGVq LWVud2VnaOG7iw== 2KvZhNip IOCkqOCksOClh+CkguCkpuCljeCksA== ZW1vYw== IEJhYmVs IFhL IGRlZmluaXRpdm8= IGVmZmljacOrbnQ= w6lnYWxpdMOp X+S5heS5heeIsQ== RmVt aXNzYW8= IHByb2PDqWR1cmVz IHNpw6hjbGVz IHBo4bqhbQ== IOC5gOC4og== IGludmVudG9yaWVz LnN1cmZhY2U= IGpha2FydGE= 0LDQu9Cz0LA= IHZvd2Vs dHJpdHVyYWRvcmE= ICctJyk= INix2KfZhg== 6riI7J2E IGN5bmxsdW4= KFtdKTsKCg== IFJlY2hhcmdl Um9sbGluZw== X186 Lk5hdmlnYXRvcg== IGZyw7xoZW4= dXRhcmk= IHByaXbDqXM= IG5lY2VzaXRv ICIqKg== IEJyZWFkY3J1bWI= IFRydWRlYXU= 1aXWgNWl1bY= 5Li76JCl YXRvc2hp IEhNUw== YXJyaWE= INmH2YXaqdin2LHbjA== ICInKQ== 0JzQvtC20L3Qvg== YXhlZA== IHZpdHU= Q291cG9ucw== IOydjOyVhQ== IOCkheCkmOCkvw== IOq3uOugh+qyjA== INCj0L3QuNKj LGNo IHJlcG9zaXRpb24= IGlmZg== INC+0LTQsNC8 IM6xz4HOuc64 IEF0dWFsbWVudGU= INC/0YDQuNGP0YLQvdC+ INC80LXQtNC40YbQuNC90LA= c2tvc3Rlbg== INOZ0LTQtdCx0Lg= IERlc3RydWN0b3I= PVM= IERlY29tcGlsZWQ= R3Bz YmF1ZA== IFp1c8OkdHpsaWNo IHdhaXZlZA== IOCkquCljeCksOCkpOCkv+Ckt+CljeCkoA== IGtsdXM= INC30LDQu9C10LY= bcO8xZ8= KGFzc2VydA== Z2dpZQ== IGluZXJ0aWE= IGZ1bmdlcmVy QnVsbA== IFRPRQ== aWNsbw== INCx0LDQudC90LDQu9C80LjQuw== IGxhdWw= IHBlcnRpbmVudGVz IERlbnRpc3Q= bXVt IGZhcmluaGE= IFZhc2U= 15XXpteo15nXnQ== IG51bmF0c2lubmk= IGFmaWt1bg== INC30q/QudC7 IGFtYXRh IGdyYWluZXM= TlNVSW50ZWdlcg== xJljaWE= 4KSa4KSV 0pvRgw== IOCqteCquOCrjeCqpOCrgQ== IHBhdXZyZQ== 0L7RgdGC0L7Rjw== IHJlbGFwc2U= IGhpbGFoYQ== INC50YvQu9C00LDRgA== 57SU IHBlbnRl IGRhdnJhbg== dWN1bmU= IFBpY28= X01JTk9S SGVhbA== aW5nYWxl INCy0YfQtdGA0LA= cHB1 IGtvb20= INGP0qHRiNGL KHNraXA= XykpOwo= YWNhbA== dWxvag== IOGDm+GDkOGDkuGDkOGDmuGDmOGDl+GDkOGDkw== INGN0L3QtdGA0LPQuNGP INCy0LDSm9GC0Lg= aXBlbGFnbw== IFN5bXB0b21l IDwiLA== cm9nZXI= 5piv5LiN IGdhc3A= LHRy 4Kau4KeC4Kay YXRpZWs= 16fXoteo IGlsacWfa2lu IGNhcGFibGVz b3B0aW1pemVk Vk1MSU5VWA== LnNreQ== IG9ydGFt IFJORw== aGFyYXA= IOGDnOGDmOGDqOGDnOGDkOGDleGDoQ== QWxsYQ== IOCkleCksOCkvuCkr+Ckvg== IGRvbnV0cw== INW/1aXVstWh1oPVuNWt 4KqX4KuA4Kqw4KuA c3Vic2NyaXB0aW9ucw== IHRhY2tsZWQ= IG1lxJF1 LXRlbXBlcmF0dXJl KCcuJylb 0Y/Rjw== INC60LDQsdC40L3QtdGC Pk5O 0YHRi9C6 4LCf4LCC KElOVA== INW91bjWgdWr X3NjaG9vbA== INC80L7QttGD0YLRjA== IGJvaWxz IGRpbsOhbWljYQ== a2F0ZQ== IGPDqXJlYnJv IEdpYnQ= QUNDT1VOVA== IOGDpeGDkOGDoOGDl+GDo+GDmg== IHLDqXbDqWw= INmC2LHYtg== IG9ibGlnYXRvcmlv IG1vbmFzdGVy IHRyYW5zbWV0 IGhhdWdlc3VuZA== IG9pbnQ= LWVuZw== IEt1Y2g= L3dlYXRoZXI= IOC0pOC0ruC0v+C0tA== IGTDqXBhc3Nl z4bOuQ== IGTDvG55YW7EsW4= 0LLRgNC40LnQvQ== zrHOuc+BzrU= IFJUVA== 56qX5Y+j b3VwZXM= aWZpY2F6aW9uZQ== IHPDqHZp IGNydWlzZXI= 0LjRgNC+0LLQsNC90L4= IFNhbW15 IGbDuHJveXM= INiv2YLYp9im2YI= aWtobw== IOCwteCwv+Cwsg== INC90LXQvtC2 IGluY3Vt 0YLTmdGL0Ls= INi52KvZhdin2YY= IHByb3ZpbmNpYXM= IOCmrOCmvuCmrOCmvg== IEdvdmVybm1lbnRz IGZvb2xz IENvbGxpZGVy YWZldA== IGJyYXZlcnk= IGhvc3BpdGFsaXphdGlvbg== X0VW IFp1dGF0ZW4= 44GL44Gq IGNoYXN0 IGV4ZXJjaWNl ZW5zb3M= IHNvbGRhdHM= 7IWc IG9tYWQ= IFhP IMOpbWlzc2lvbnM= aWNrb3U= 15XXm9eo 1aXVqg== 4LmB4LiV Ym9zY2g= INCw1KXRgdGD0LDQsA== INin2YTYpdiz2Ko= IFNjYWxhcnM= IOCkteClgA== QWZyaWNhbg== IFBVQkc= IG92ZXJ0dXJu U2NyYXRjaA== IEFqb3V0ZXI= 0LPQuNC7 IENhbmFyaWE= IHZpdHJhZ2U= dWR6bw== IGluaGliaXRlZA== IGRpc3Bhcml0aWVz IHZlbGhh IG9zdHJlYW0= IHR4aGVlag== INC/0YDQvtGE0LXRgdGB0L7RgA== IOyXrOu2gA== INCw0LXQug== cmlqZQ== IOGDquGDo+GDkw== IGltcG90ZW5jZQ== zrTOv8+F IE5pdmVs cGllcg== SVpFUw== IHDDpGl2w6Q= ZXN0b3du L2Vj INCx06nQu9GW0Lw= IFNlYmFzdGnDoW4= 4YC94YCU4YC6 0LXQsdGW w65t INee15XXog== b2FydGhyaXRpcw== 4KSv4KWL4KSC 0KDQvtGB0YHQuNGP 2bnZhtqv IHRvbHVh INCw0YjTmdCw INin2YTZg9mK2YXZig== INC80L3QvtCz0L7Rh9C40YE= IOyHvA== IE1vbWVudHVt IGluY29tcGFyYWJsZQ== 05nRi9Cx cXk= IOCqueCri+CqteCqvuCqpeCrgA== b2R6 IHNlbmFyZQ== Y29tcG9zZXI= z4TOuc66z4zPgg== IOCqruCrgeCqpuCrjeCqpg== ICcnDQo= IDpdCg== IHBvbWVuaQ== 5b+c5Yuf 5pSd IHDhu40= IOCwh+CwteCxjeCwtQ== IGAu IEFnb2Rh dG9uZXM= INKb0rHRgNCw0Ls= INin2YbYrtmB2KfYtg== LwoKCg== IFRhaWZh b3NjaQ== IOCkuOClgOCklg== IHJvbWFuY2Vz 4YOj4YOS IEF0dGVuZA== IENveQ== INin2YTZgdmI2LI= INC/0YDQtdC/0Y/Rgg== IEhvc2k= 77y0 IGRpdnVsZ2Fkbw== 2qvYsdmI IENoZWFwZXN0 SGVsbWV0 IGVuY2FudG8= IOCyruCypOCzjeCypOCzhg== INqv2LHYr9iv eG1pbg== 2YjYsdmH2Kc= INmF2Kfau9mH2YY= IERhcmxpbmc= INGB0LDRgw== INC/0YDQsNC60YLQuNC60LU= INCx0YPQtNCw0L3QtA== IGxhaWxh CUxhYmVs IOC0qOC0v+C0r+C0qOC1jeC0pOC1jeC0sA== IENpcA== X09D IG55aWs= 15PXldeo dm9vcnppZW4= INC30YPRgA== IOCkquCliQ== IHN1bGlmZg== 6L2J IHpkcmF2bGplbmpl INC00LXQtNGW dXJhdG9y IENvbWl0 IE5hYmk= IGxpZXV0ZW5hbnQ= 4LSk4LWN4LSk4LWB LmtleXdvcmQ= IOCkrOClgeCkp+CkteCkvuCksA== wq1sZQ== X0ZBQ0U= INC40LrQtdC9 IGFkZWls IFpk IHBlc3RpY2lkZQ== 0rvQtdKZ IE1hbmRhdG9yeQ== IFJpZ2lkYm9keQ== X2VxdWFscw== nuC1jeC0mg== IHZ1bHQ= c2VjdXRpdmU= INCw0LrQvtGA0L7QvdCw0LLQuNGA0YPRgQ== IFVOSU9O IE1hbmM= INGB0YLQtQ== INis2LTZhg== ZXhwbGljaXQ= Z3lp IEZpZ3VyYQ== INqp24HYqtuS IEVybcmZbg== IFd5YXR0 4oCZYXZhbnQ= IGFtYWZhcmFuZ2E= YWhpZA== KGd0 SVNUSUM= IElOQ0xVREVE IOGDoeGDmOGDquGDneGDquGDrg== IENSRUE= w7lp INC/0YDQsNC30LTQvdC40Lo= IGjDtmhlcmVu QlJFQUs= IOGDm+GDkOGDoOGDl+GDmg== IEFsdmFyZXo= dsWR 4oCZeWU= INmI2qnak9im 15nXldeV16I= IOCmhuCmgQ== 0YDRg9GB0YI= IOCkhuCkruCljeCkuQ== IGVmZXR1 w7pkaW8= IFZlcmtlaHJz YWdkZQ== W2l4 IEFkd29yZHM= 5oOc INC40YfQuNC005k= INC80LjRgNGD IE1BVFI= IGZpYm9uYWNjaQ== cXJhbQ== INen15A= aWVsdGVu IGFudHk= 4KeA4Kaw4KeH IENvbXB1dGVz IGluYXdlemE= IElzb2xhdGlvbg== 2YrZiNiq 4LSJ c3l6 IOCkmuCliOCkqA== U0NBTg== IE9uZGU= X2NvbmNhdA== IGZsb2F0ZWQ= IGNvbWJpbmFpc29u LnF1aXo= IHJldHJvdXbDqQ== IGZpZGVsaXR5 IOyngeybkA== Xzw/ SmltbXk= IHZpZWlsbA== IHRhbGFi IGNoYXRib3Q= IGF6YWw= YW5ldGhp 0YPRidC10YHRgtCy0YPQtdGC INC60LDQutC+0Lw= IGV2YW5nZWxpY2Fs IHNsdcW+Ynk= 4KSu4KWH4KSy IGp1Z2VtZW50 L3Bhc3M= INC00L7RgNC+0LPQuA== IGV4cGVkaWVudGU= IExlc3dp IOCkuOCkoeCkvOCklQ== IHBlcnN1YXNpb24= 4LeA4LeK IGZhw6dvbnM= YXJxdWlh IHNjaHdhcnplbg== 0ZbQu9GM0Yg= IE5TRg== w6Rzc2Vy UFVC IGNvbW1pc3NpZQ== IOGDmeGDleGDmuGDkOGDlQ== IFN6ZW5l RXN0YWRvcw== LeGDlOGDoOGDlw== IG9ydGhvcGVkaWM= IFN1YnN0YW5jZQ== IEhtbQ== IOGDoeGDkOGDpeGDm+GDmOGDkOGDnA== INGA0LDQt9C80LXRgNC+0LI= 1aXWgNWx INC40YLRgtC40L/QsNKb JHJz IEFubmV4 IG11YW11YQ== IG1pZGRlbHM= VHVs dXBsZXM= IE9NSVQ= Lmxw INec15TXqdeq157XqQ== 57uE6YCJ JCIs YXR3YQ== Y291cnM= IEtoYXNp IHN0cnRvdXBwZXI= INGB0YPRgw== IGRvbmtlcmU= IGltb2Q= IHBvcnRlbnQ= 2LLYp9iv IOCmsuCngOCml+Cnh+CmsA== IOCwqOCwv+CwnA== X21hcmtldA== INCQ0qk= X3NlY3Rvcg== 2KfYpNq6 IHNpY2hlcmVu Pign IGxvYmE= IOODleOCoQ== IHN0YW1tZW4= LioiKV0K 4YOU4YOb4YOd LkVsZW1lbnRz IM60zrXPjc+EzrU= IGltcG9uZXI= IG5hY2lkbw== IGRhdm9t WU9mZnNldA== b3hh IFNlYXRpbmc= 4YOg4YOd4YOV4YOU INC20LTQsNGC0Yw= 4LWG4LSo4LWN4LSo4LS+4LSj4LWN U2VzaW9u IENyaW1lcw== IFN0YXBsZXM= 4YOQ4YOr4YOU4YOb IOWNsw== IGR1dXJ6YWFtaGVpZA== IHNlZ3VpcsOh V2lk Q0NE ZW5zeWE= dGhvcm5l w6FjZQ== IHNraXBwZXI= J3x8 77yM5biM5pyb IEFtaXI= 44CPCg== IGZyYWdtZW50ZWQ= ZWxha2E= 44CN44CCCgo= L3JlZA== LXJpc2U= IOCmheCmuQ== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== IGJ5cmph IENMUw== 6I2S YW5uaWVz 1bjVstWr IHNlY29uZGFpcmU= 2LPYp9mG2Kk= 5a6d6ams cm9teWNpbg== 4Kq+4Kqc4KuB ZWllbmRl IElOVkVOVA== bGFyZ2E= IHJvYXJpbmc= Z2Vh QXBvbGxv IGdld2lzc2U= IGtleXBhZA== IHBvZG5paw== IG5lbm50 XElucHV0 IGFmYmVlbGRpbmc= enVmw7xnZW4= IHBlZGlncmVl IHdyZWFr IOW3pg== IE5lZ2VyaQ== IHThurls4bq5 IGhpc3TDsnJpYQ== IHRhcno= 4Lij4Li04LmI4Lih d2VlbmV5 K1s= IFZpZGFs L1B1YmxpYw== IHdhamli cG9wb3Zlcg== REFPSW1wbA== INKa0LDQt9Cw0ps= IER0 IGVxcXU= IG3JmWt0 JGFyZ3M= X0NvbW0= IGthcm0= SElHSA== IGNvbmZsaXRv SW5mZXI= aWt0aWc= b21nZXZpbmc= INiu2YXYs9ip IHLDqXBhcg== YXRyaWI= 0LzQtdC2 IGdyb2VpdA== IGJyaWxobw== 0LjRgdC60Lg= INC/0LDQvNGP0YLRjA== KElD 0LvQuw== c29uZ3M= YXJhY2g= IOadj+W9qQ== KExpbms= IHF1YXRlcm5pb24= IFNlbWluYXJ5 INC30LDRh9C10Lw= IGVzZXJj INeW15nXm9ei16g= 4Ka/4KaV4Kay4KeN4Kaq IHF1ZXJpZWQ= INmF2LHYs9iq2Yc= INeQ15XXqtea eHRpZXM= LW1lcg== IG5hdmVnYXI= dW1iZXJzb21l IGTDq3M= IGFnZ2lvcm4= bWV0aA== 0LvQuNC90LQ= 4YOU4YOR4YOa4YOY4YOh IOaNrg== IGFya2FseQ== IE9sYQ== IE3DqWRpbw== LlNlY3Rpb24= 4YOr4YOj4YOa 5Lul5ZCO IE5TTG9jYWxpemVk UGFyYW1ldHJvcw== INC90L7RgNC80LDQu9GM0L3Qvg== IE9GRklDRQ== bGlicmFyaWVz IHRheWFyaQ== IHN1Ymo= IHRhcGVk Py4K 2LnZhdmE2Kk= IE1lYQ== Q29zdG8= dm9lcmRlcg== Lml0ZXJpdGVtcw== IG1pc2ls IFplaWNo IERlcHA= IFR1bmlz INC+0L/RgNCw0LI= bG92YQ== YsmZ 0Y/QstCw0L3QtQ== IGJlc3RlbnM= IOays+WNlw== IGNvbnRyaWJ1acOnw6Nv IHByb2Ns 7KCc66W8 0L3QvtC90LjQvA== YmVhcmluZw== X3Rlcm1pbmFs IGluw7o= ZMSxxJ/EsQ== LXBsYWNlaG9sZGVy Sm95c3RpY2s= IFJldmlld2luZw== INCk0LjQvQ== dW5pdmVycw== XX07Cg== INeR16rXpw== IGJlc2xhZw== L2J1dHRvbnM= IGdlcsOnZWtsZcWf IHVubGVhc2hlZA== 4oCZSXRhbGlh bWlsbHM= IG5hZ3A= 06nQvdGF0LjQuQ== IGVzY3Jvdw== aXNkaWN0aW9u 5YmN5bm05q+U IGFybWF6ZW5hbWVudG8= IHNpbmNyb24= IOCwuOCwv+CwqOCwv+CwruCwvuCwsuCxiw== 6J6N6LWE TG90dGVyeQ== wq0KCg== 4LON4LKu4LK/4LKV IEF2cmls IHByenlzeg== IGtpbmVz IERlZmVycmVk TWVsaXNzYQ== VU5EQVk= IHN0YWJpbGU= 2YHYp9mI2LY= IO2bhOq4sA== SHVhd2Vp IEJBRw== IGZhaXRoZnVsbHk= IEhEVFY= IEtvZHdh IHphxI1ldA== b3ByaQ== TGVhZGVyYm9hcmQ= IHZvZWc= IEZhbGxlbg== IHZlcnBha2tpbmc= IEdpbw== 57WC5LqG 4Z+S4Z6a4Z6+ ICgkKCIj IEJyb3Q= PX0= IOCmleCmvuCmnw== 5ruh6Laz b3VwbGU= IGnFn2w= IGd5Zmw= INC/0LvQsNC90LU= b3hp IM+AzrvOrc6/zr0= IFN0YW50b24= IGHKuw== z4TOrc+BzrE= IHBvc2l0aXZhcw== IGF0dGFxdWU= 0Y3RiA== ZnV1cmE= INC/05nQvQ== T1JJ Lm5pY2s= IOGDoeGDouGDo+GDmw== KElORk8= aXlhbmFz 16DXkA== IOCqreCqvuCqtw== 4oCM4LCq4LGI 7KGw7ZqM 5rW35Y2X INmB2KXYsNin 4KSW4KSC4KSh IExZ IMOpcGE= IFB1bnRv IGNleg== IHBhdHJpYQ== dMmZ IOC0juC0qOC1jeC0qOC0vuC0o+C1jQ== 5peX5LiL IG1hbm9l IGZsdW9yaWRl Zm9yZHNoaXJl IGNvbmZpcm3DqQ== IGRpc3Rpbmd1aXNoaW5n IGludHJhY2VsbHVsYXI= 4oCZb2N0 IOWkp+WPkea4uOaIjw== IHRoZXJtbw== 4YKP4YCt4YCv4YCE4YC5 LkRPV04= Um9tYQ== IFBvYg== cGV0cw== 4KuH4Kq5 4LKQ INm+2pjZiNmH X3RlbA== 15XXkteo INio24zYtNiq2LHbjA== LExpc3Q= YW1lcmljYW5vcw== IGxsZW5n LmludGVudA== IOCyieCypuCzjeCyrw== INC/0YDQsNGG0LA= IENNT1M= IGl4ZXNoYQ== cHNj INC+0YHQstC+0LE= 4LSo4LWN4LSu IGRvYnU= IOmHkeeglg== IM66zrHOu86s dXJ0cw== IHJpc3VsdGF0bw== IEZpc2s= cmF5ZWxl LcOh IOCmuOCngeCmlg== INCV0LLRgNC+0L/Riw== U0VY 0LHQsNGF U1BBUkVOVA== IOCmsOCmvuCmt+CnjeCmn+CnjeCmsA== YXJoaQ== 4LCw4LGC 0YjRltC70ZbQug== INm+2pk= IHNhbW1hbg== V2Vla2VuZA== INio2qk= IHRlbXBlc3Q= IFpvbg== 4Lio4Liy4Liq4LiV4Lij4LmM 4LeA4LeQ w7ZndW0= b3BsYW4= 5YWI6ZSL5b2x6Z+z 2KfYsdiv2Kk= IFJlbm5lbg== IGxva2FsZW4= IGFtYmlyaQ== IG1hbmRpYg== IGJvdGhlcmluZw== IM+Gzq8= IHN0YWZmcw== LkRpY3Q= 0YjQuNGF0YHRjw== IGRpa2c= IOCuqOCun+Cuv+CupOCvjeCupA== LnR3bw== INOZ0YDQtdC6 IHN0aW11bGFudA== IGF0YW8= c3Nr IFJvcnk= INeh15nXpA== IGp1dmVuaWw= IGVsZWt0cm8= INGH0LDRgg== Y2llcg== dXByb2Zlbg== b2Jhbms= IHR2cmQ= IGhhZGlhaA== INC00q/RgA== LXlvdXJzZWxm LXl5eXk= INin2YTYstmF2YY= 0LPRi9C70LDRgNCw IFphaGx1bmdzbQ== INC+0L/Riw== 4pSj IG92ZXJsZWRlbg== IE1hcmxleQ== REFW IEZpcmVk IGFjcXVhaW50YW5jZXM= IM61zq/Ph86xzr0= IHNlZW1pbmc= 4Z644Z6h IGNvY29r IHF1YXQ= 4K6u4K+N4K6q4K6w4K+N IHVua29tcGw= IHNwdQ== IOCmq+Cnh+Cmsg== INin2YTYqtmG2LjZitmF IHN0aW11bGVyZW4= aWRkaXNo INCx0LDQt9GL KkE= IGRldGVuZXI= Lm1rZGlycw== aXBpZA== INCx0L7Qu9C40LTRgw== 2KfZgtiq2LU= IGdpw6Fj IOCmnOCmvuCmqOCmv+Cnn+Cnh+Cmm+Cnh+CmqA== YWxpd2E= zrnOsc6v xKtnYXM= IHByb2dyYW1tYXRpb24= aXZpYw== IGfDpA== aXlhbmFzaXlhbmE= IEV1cm9wZWVz 0L7QvtGF0YDQsNC9 IHNlbGVwYXM= IFBpbnRv INix2YM= IGxvY2FsaQ== IE1hdGhlbWF0aWNhbA== 54mn 4K6k4K+H4K6a 0ZHQsg== 05nQuA== 4LK44LON4LKk4LK/ CWJ5dGVz INmI2KfZhNi6 IE1s cXVpbG8= YWdvbmlh INGB0YLRg9C00LXQvdGC0L7Qsg== IGZhdWNldHM= X2hvc3Rz aXNpbnM= KGVy IE5o4bqtdA== Ij5A IGFkYW1s IHByZXNlcnZhdGl2ZXM= IGxuYW1l IOCuheCuqeCviOCuteCusA== IHlheMSxbg== 4Liq4Li04LiZ4LiE4LmJ4Liy IOCkhuCkl+CkvuCkruClgA== 4LCV4LGB4LCC4LCh4LC+ 5qCq5byP5Lya56S+ IELhuq9j IOGDm+GDqOGDleGDmOGDkw== IGpvc2U= KikKCg== Lm1vdGlvbg== d2Vya2luZ2Vu 4LmB4Lih4LiZ IHNlbmF0ZQ== IHd5Ym9y IGNo4buJbmg= IOCyquCzjeCysOCyuA== 4LON4LKk4LOG J2luc3RhbnQ= 0YnQuNC60Lg= 5Zu96ZmF5b2p56Wo 0LvTmdC90LU= IEpvaW5pbmc= LkNvb2tpZQ== 6LWb5LqL S2luZGVy RmlybWE= IGRpY2h0Ymlq Vm9sdW50ZWVy aXNjb3M= IGJheWFy IGNoYWluaW5n IGJlc3RlbW0= LnRyYWlsaW5n X2l4 INWp1bjWgtaA1oQ= KCkpWw== INGB0YLQsNC90LTQsNGA 4LCO4LC44LGN 0LzQuNC3 INis2YbYpw== IGJ1Y2g= IHLDqXNlcnZlcg== X2FkYw== IHJhaXNpbnM= z47Ovc61zrk= INC80YPQttCw IE7EgQ== Y2Fx IHBlcm4= INmF2LHYp9iz2YU= ZXJtYXA= IHNpZ25pZmljYXRpdmFtZW50ZQ== IHNjZW5h 4YOQ4YOc4YOQ4YOY veeJqQ== 1Z7Wgg== 0LXQvdOZ0L0= IHdhaGluZQ== QXBpcw== KGR5bmFtaWM= 4LSV4LS+4LS2 IEhlcnN0ZWxs SW1tZWRpYXRlbHk= aWFsaXpl 4KmH4KiC X2hpdHM= 4KaV4KeN4Ka34Kau IFBvc2l0aW9uZWQ= 0YXTmdGL INCh0JzQmA== 4LiI4Liz4LiZ4Lin4LiZ xbc= 5YyX5Lqs6LWb6L2m576k IFdyYW5nbGVy INin2YTYqti12YXZitmF KSk7CgovLw== PyIpCg== INin2YTYqtis2KfYsdmK X3BhbA== LmRlY29kZXI= IGZhbGQ= 0LHQttGM0pvTmdCw 44O844Od INGF0Y3RgNGN0LPQuw== IEVsYXN0 IGls4bq5 IGFwcGFydGVtZW50ZW4= aWxlc3M= bml2ZWw= 6Z2g6LCx5LiN INit2qrZiNmF2Ko= IOCkteCknOCkqA== IGhpZWx0 IGVsaW11 IHBvbHlz 0LjSsw== IMOpdmU= IGdlem9jaHQ= INee15TXng== 15XXntei158= TFRSQg== PXNldA== cHBlcg== PkQ= 2KjYp9iv2YQ= IEFHUkU= 15PXnA== IGdva2tlbg== IHVrYQ== INC/0YDQuNCy0LDRgg== U2Y= INGA0LXRgdGC0L7RgNCw0L0= IHdyb25nbHk= 77yM5LuF 4YOU4YOb4YOR4YOU4YOg4YOh IGvDrW4= IHdpanplbg== Jyx7Cg== IHNvY2lhbGl6ZQ== INin2LPYqtin2YbYrw== c29sdXRpb25z aWZpY2FjYW8= Qk1J IEx1bWlh 4Kqy4KuN4Kqy4KuH4KqW IGRlc3RhY2Fu IHZlcnZvbGc= xa/FvmU= LlRocm93 INix2K4= 4LON4LKh4LON 4LS/4LSZ4LWN4LSV IG1hcmdpbmFsaXplZA== IHByb2R1Y3RldXJz IOCkoOClguCksuCliw== IEd1aWxsYXVtZQ== IFp3ZWlmZWw= 2YPZiNix IOCkruCkvuCksuCkv+CklQ== IHNhbGlkbw== Y2xpbmlj IOCmruCni+CmlQ== X01D IENPTUU= 4K614K6p4K+N UElD IHNldGF0dHI= IG1ha2Fy IEFza2luZw== INmI2KfZhtiq INCU0LXQvA== UkVNT1ZF INec15bXlA== ZmZyZWQ= aXplbQ== J2luc2NyaXB0aW9u INC60L7Qtw== IGhlcmVrZXQ= IERpdnVsZ2HDp8Ojbw== Wy4uLiw= KCk9Jw== dGVyaXR5 IMOpbWVy IGdydXBwZQ== 0YjQuNC10YHRjw== X3RyYWNraW5n IGFtYW5kbGE= INGD0YLRgNCw IEZvdXJpZXI= IG9yZ2FuaWNhbGx5 O2M= 4Ky3 IFZBQw== 0LPQuNC50LM= aXRhcmk= IOW4neiLkQ== IGlrb24= IHBvZ29k X2FjbA== IGxhdmFnZQ== IHBvZW1hcw== IOCyteCyvuCyuQ== IEZFQg== IFNoYWNr INCa0YPQv9C40YLRjA== YWx0ZXJuYXRpdmU= 4KS14KS+4KS54KWA SGVhcnRiZWF0 IGNvbWXDp2Ft IHRyYW5zdmVyc2U= 4LmE4Lir4Lih 44G+44Gg 4LWH4LSo 0LXQttC00LU= Lm1lZGl1bQ== INGF0YDQsNC8 IGh2ZW0= zrzOss+Bzq/Ov8+F aXphc3lvbg== X1RvdGFs dWtpbg== QnJhY2U= emFteQ== 4LmJ4Liy4Lih IFBsdXNpZXVycw== IGbDuGxnZXI= dHJvbnQ= Iio= IE1haGE= IOGDpeGDkOGDoOGDl+GDleGDlOGDmuGDmA== bHVjaHQ= X3JlY3RhbmdsZQ== IOCkuOCknuCljeCkmuCkvuCksuCkqA== 4bqnbmc= IFVuZGVydA== IG9oamVs INCw0LrRgw== 2LLYp9ih INiu2YjYsdin YW5zZXQ= 4K+B4K6x4K+N4K6x IGFjY29tcGFnbmU= IGNsaWNrYWJsZQ== INqp2LHYsQ== YmVhdXRpZnVs INmD2KrYp9io2Kk= LlN1cGVy IFNlcnQ= INW/1bjVrw== LnZpZXdwb3J0 IHJlZ2ltZW50 b3dpZWQ= LWF5 IGZx xbxzeg== YXJpxZ8= 0YLQtdCw0YLRgA== Q29udmVydGVycw== IOCkuOCkvuCksOClgA== IGRlc3BsZQ== IHJvdGVpcm8= IOWuow== INGB0YfQsNGB0YLQu9C40LI= INK705nRgNCx0LjQuQ== IHRlY25pY2E= IHByb2NoYWluZXM= INWw1aHVtNWh1aPVuNaA1a4= ZGVuZXM= IHRzYXJpbg== b25la2FuYQ== T2x5bXA= 5L2p IHNhYWJzYW4= LmNyaXRlcmlh IHNvbWJyYXM= QU5HRVI= YXNhcw== Q2F1Z2h0 dmFyaW5n IOCkleClg+Ckt+CljeCkow== IGthbml5YW5n IOCql+CqvuCqguCqp+CrgA== IGTDoXQ= CWVycm9ycw== IOC0juC0qOC1jeC0qOC0vuC1vQ== IM61zrk= zrPOtc69 PFVuaXQ= 5oqA6IO9 IHNpbGhvdQ== IOCquOCqv+CqtQ== IFNteQ== 4LC/4LCv4LCo4LGN b2xhYg== IOC0heC0teC0sOC1geC0n+C1hg== INis2K/ZiNmE IGJpZGhhYQ== UmVzb2x2YWJsZQ== b3Ntb3M= d29sdmVz bmVyZQ== aWVo IHZvZXJ0 IGFjY29sYWRlcw== IGlodQ== IHNhdXJh IENvbW1pc3NpZQ== IFBFTQ== LktleWJvYXJk IG9uYWZoYW5rZWxpams= S2luZHM= 5oKj6ICF IGVtb2ppcw== IGlyb25pbmc= IGJvb3Jk IOS4iua1t+WkqeWkqQ== IG1hbnF1ZXI= 4LON4LKw4LKu IHRvaW1pbnQ= X0VYSVNUUw== IHNuYXBwaW5n 0LjRgtC10LvRjNC90YPRjg== 5bCG5Zyo IOCksuClh+CkqOCkvg== IFPDug== JGltYWdl IGphaWxlZA== IOC5geC4muC4mg== IGN1cGJvYXJkcw== IFNoZWlsYQ== YW5naXo= 5aW96L+Q IHZvaXNpbnM= INGI0YvSk9Cw0YDQvA== 2YLYr9mF2Kk= aXNobmk= IFNhYmhh 15XXpNeV IHZvc3Rybw== IGZpbnRlY2g= IENyZWFy YWJiYXQ= aWN6bnljaA== aXl5YQ== IOC0h+C0qOC0vw== IOCmquCmvuCmpA== IHBvb2xpbmc= IFByZWRpY3Rvcg== LW1ham9y VGVudA== YXNxdWVpcmE= SVBz IOCkr+Cli+Ckl+CkpuCkvuCkqA== IE5BTg== IG1ldGFib2xpc21v IHBvZMOpaXM= UHJvdG9jb2xz INmC2LHbjNio R29s INGD0L/RgNCw0LbQvdC10L3QuNGP IOCuruCuo+Cuvw== IGFmbG9vcA== 6YC7 IGp1bGth b21pbGU= X215c3Fs IHVidXQ= IHBhcm1lcw== IGdhcmFudGllcw== 44aN PFN5cw== IFByZXNjaG9vbA== 4KSu4KWH4KSw xIN0xIM= 6ICB5aaH IHNtYXJ0d2F0Y2g= IOCkleCliOCksg== dWl0aW5n IOCmtuCmv+CmleCnjeCmt+CmlQ== IG92b3M= IEFtbmVzdHk= IOCyreCyvuCysOCypOCzgOCyrw== SU1QTEVNRU5U J2ludMOpZ3I= IO2ZiO2OmOydtOyngA== dG9uYQ== IM60zq8= dXJpZXJz IHByb3Bvc2FudA== IERpcmVjdG9yYXRl xaFpbA== LWFuc3dlcg== 44Gr44KC LW5ldXRyYWw= IOygnOqwgA== IOS4gOe6p2HlgZrniLDniYc= IOCkleClh+CkguCkpg== 2LXYp9io KG1h aWZpY2FudGU= zrnOus6/z43Pgg== LWdlbmVyYWw= 5a6Y572R5ZCX 5aSn5Z6L LW9yZw== 1aHWgNW01aHWgA== aWxsdXRpaw== IGFsZmE= IHBoYWhhbWVuZw== IGVyZm9sZ3JlaWNoZW4= 7Lak INCm0LLQtdGC YXJtYWNldXRpY2Fs LFsn IHJlcHJlc3M= L21k IOCkrOCkvuCkpOCkmuClgOCkpA== dXpldA== IHJvb215 J3dp IE1hdXJpY2lv X2NyYw== O2w= 0J/QvtC70YPRhw== IOCmruCmsA== 4oCZeWE= IGVzY3JpdG9yZXM= KHZhbGlkYXRpb24= IOC0quC1i+C0suC1hg== IHpuYWM= U29waA== INeU15nXnNeT15nXnQ== 6YO95pyJ fSgpCgo= bGF0YWJsZQ== IENyZWF0aXZpdHk= IGd1bmFrYW4= IHRhbHU= Y29tbWlzc2ll IHFlbg== 4Kay4KeA b3V0ZmlsZQ== 4LmA4LiU4Li04LiZ IGzDqXM= IEVzdGltYXRlcw== IHBvdG8= IHRvcm8= INGC0YPRgNC90Lg= IHJldGlyZWVz 5Y+X5LuY IGpzeA== INCg0Y3RgdC/0YPQsdC70ZY= IGRvbW1hZ2Vz IHBhbGV0dGVz IGJsYXppbmc= L2RvY2tlcg== SG9tZXM= c2NoaWxk 4LiK4LiK4Li14LiZ Lnd4 IHByemVkc2k= LmdhbGxlcnk= IGFkbMSx 4K6/4K6v4K6k4K+B IHVybGVuY29kZQ== IGFydMOtc3RpY28= YWR1bHQ= 2YnYqg== INCQ0YI= ZXTDtXR0dQ== INWl1aY= CWNvbW1vbg== cGljdHVyZWQ= IFJpZGVycw== 2LfZhw== IHJhbXBz VGhyb3R0bGU= IEp1aW4= YmVkYXJm xbrEhw== SEo= IHphYnI= cXVlbGFz INGH0LXQu9C+0LLQtdC60L7QvA== X2NsYXNzaWZpZXI= 2YPYqtin2Kg= Y3Ny PlBsZWFzZQ== IGJvb2trZWVwaW5n INC/0L7QstC+0LQ= CVJlYWQ= IOy7rA== UEhZ IHZ1ZXN0cmE= IOa+ IGZ1bmRh IGNlbnU= IEluZmFudHJ5 4KWN4KSm4KWA KHJvYm90 INC40L3RhNC+0YDQvA== IFNjaHVoZQ== IEFUUg== INix2YfZitin IGF0aXZh INCT0LTQtQ== 4YOd4YOX4YOQ IOWkqeWkqeS4reW9qeelqOiiqw== IHRhbmFu Y29uc3VtZQ== dXRhbmU= 7J2464uk aWRlZW4= IOCkruCksuCkvg== Z2plbmc= 5Y6L5Yqb UGVyc29ubmVs IG5hem8= IGNpdGVy IGNhcnRlcmE= IGzDrXF1aWRvcw== IGdlbm90eXBl INC/0LjRgtCw0L3QuNC1 IHNldWV1cg== TnVlc3Rybw== SEVZ IEJsZXU= Tm9jaA== IGxsYXZl dW90aQ== LlJlZ2lzdHJ5 IOCwmuCxguCwuOCxjeCwpA== IEFDVElW INW31oDVu9Wh1bY= aW5jb21pbmc= w7x0dGVy IGhvbWVzY2hvb2xpbmc= L2xpbnV4 INee15TXqA== 15HXlden INGF0LDSoQ== INCV0LU= IERvZXNu IFZm X3Byb20= IHBhbGVzdHJh IEdyYWR1YXRpb24= UmVzb2w= IOWRvA== 5Zu65a6a X3N2Zw== IOCwmOCwn+CwqA== IGZhbnRhc2lh L09wZW4= Rmc= IFdPVUxE INC30LDRgtC+ X+WMl+S6rOi1m+i9pnBr IEJpbGRzY2hpcm0= 6LGK INKT0YvQu9GL0LzQuA== 5biw dXBwZXQ= 6YCP5piO IGRlbW9saXNoZWQ= IFJBRg== IGJpbMmZcnNpbml6 IHfDqnpl IOydtQ== 2YrblQ== IOCwleCxjeCwsg== IGdlcmF0ZW4= IOCwjuCwguCwpA== IGdvZGludQ== aWdodG9u IHNhbWFsbGE= 4oCcCg== YW5law== IHZlcnpla2VyaW5n IFdhbnRz X3VuZGVy IMOEcnp0ZQ== ZXh0cmFz X0RBTUFHRQ== L2NvbnRleHQ= IGbDtnLDpG5k IFZJU0E= IGxpZGVyYXpnbw== IHJvbGxvdmVy IGRow6E= IE1lbGF5dQ== INC/0YDQtdC40LzRg9GJ0LXRgdGC0LI= INCx0YPQvNCw0LPQuA== IGluZGlmZmVyZW50 QWxjaGVteQ== L2JhY2tlbmQ= IGFjb21wYW5oYQ== V2Fubg== IGthcms= VW5kZXJsaW5l IMOhcmk= KHZhbGlkYXRl IHRlc3Rhcg== INmI2KfZhNiz2YTYp9mF IOCkrOCkv+CkleCljeCksOClgA== IG51aXRz dWTDrQ== IE1vZGVybmU= Q0JD Lm1hbGw= IGRlcGxldGlvbg== 4KS+4KSn4KS/4KSV4KS+4KSw4KWA IFNwZWNpYWxpemVk IGFtcHV0 INOp0YLRgtGW ZWxheW8= 1aHWgdW41oLVtA== IENhbmFyeQ== IOW8mA== Y2VwY2lvbg== IGHDsWFkZQ== INGG0LXQvdGD IOyasOumrOqwgA== IEZsYW1lcw== aXRlbGpp KGJvcmRlcg== IOCkuOCkguCkleCknw== IGZlbGl6ZXM= IGNpbWVudG8= IHJlZnJpZ2VyYXRvcnM= IG5hYsOteg== IGplY2h1dW4= IEdlbmll IE5pZWRlcnNhY2hzZW4= KEpT KiopKCY= Ii4i 2KrYrdin2YQ= IGp1ZGljaWFpcmU= eXJtYWs= IFB1ZWJsYQ== INin2YTZhdmG2KrYr9mJ IGVzbWFn dHJhZGl0aW9uYWw= INGB0LjRkdGB IOCwreCwvuCwtQ== IHBoYQ== IOCuqOCuvuCuruCvjQ== xJliaW9y IGtvbnRha3RpZXJlbg== 0LjQtdC4 IOCmrOCmqA== IFdoaXNwZXI= IEtuZWU= 15XXldeZ16g= IEJveWxl IGZhdWNpYnVz IE9sZ2E= IE1hZ251bQ== IEJhbGNvbnk= IHNhbGluZQ== U2VhdHRsZQ== IGNlYXJ0 IHZhc2l0 IG5vdmlo KHZhbHM= IGRvdnJlYmJl IGFwdGl0dWRl IOCyruCyguCypuCyvw== 2LTZh9iv w7hydGU= IGhpc3RvcmlzY2hlbg== INin2YTZhdmB2Ko= IHJlaW5mb3JjaW5n c3R5bA== IGRlbXVlc3RyYQ== IOKApi4u 4Kq44KuN4Kqu4Kq+4Kqk 5aWX6Lev IHNlY3JlY3k= 5aWz55Sf IFB1cHBpZXM= cGFyYW1vcw== 2KjYsduM IGFnYXJy ZWJsZQ== PFRva2Vu T3Rw RXllcw== IHJlY29tbWFuZGF0aW9ucw== 6I+c5Y2V 4LiU4Liy4Lin YXRpaA== IFNwaWVsYmVyZw== IOCqhuCql+CqvuCqruCrgA== 0LTQsNC70LA= bMO8c3Nl 7JWY7Iq164uI64uk LlRpY2s= INCy0LfRiw== LnJlYWxt IG7DoXo= IOCkteCli+Cknw== IHhhbmg= IE5vdml0YWRz Y3E= IEFsZWM= Rmlubg== IERlaW5lbg== IE1hcnRlY2g= IFNCTw== IHBvdXNzZQ== IHRvbnVtYmVy Y2hhcHBlbg== IExpYmVyaWE= dWRkeQ== z4TOuc6s IEFOSQ== IHR1aA== IGluZ2VuaW91cw== 5pKt5pKt IGxlaWNodGU= IEhlYXJk LndlYnNpdGU= aW1hY2hpbmVyeQ== LWltZQ== INi62LE= LkRFRg== 5b6F6YGH IHh5dWFz IOagvA== INi52YfYrw== dmFydA== S2Vt IENSTw== INiw2K4= Ikc= aWVmcw== INm+24zYtNmG LnBlb3BsZQ== 15XXk9ec 0JrQsNC2 IHdldHRlcg== YXJkaW5v 5LyY56eA IGFwb2lhcg== IHBvaXRyaW5l w6t0YXI= INeg16LXntei158= IGV4cGxvaXRpbmc= IEN1b21v IEJsaW5r 2YXZiNmE2Kk= IHByb3RvY29sb3M= b3VzeQ== IGVua2w= IOCymuCyv+CyleCyv+CypOCzjeCyuA== UE9DSA== IHPDrXQ= KGNvZWZm IMOnw6RyZQ== 4oCm44CCCgo= 0YLQsNGA0YvQvdCw 0LrQvtGB0YLRjNGO IEFkZHJlc3Nlcw== IHRyYWNrZXJz IGFwcmVuZGl6YWRv INix2YjZhQ== IHByb2R1am8= 4oCc5Y+M IHPJmWg= IHBpc2FyaWFxYXJ0 aG50ZQ== INGB0L7QvtGA0YPQtg== IGZ1bmNpb25hbg== QVBQTElDQVRJT04= w7JsYXM= IHB1bnR1YWw= IGlteQ== cHJvYmFudGU= 7Yg= INC20YvQu9C00LDQvQ== IGF0dGFpbmluZw== IHBhdGNoZWQ= INin2YTZhdmE2Kc= ID49Iiw= IE9wdGltaXpl Q3J5 4LiQ4Liy4LiZ IGluYWQ= aW5uYXE= Pigq INCz0LvQsNCy0L3Ri9C5 YXBobmU= IGNpbGFudHJv 1bDVodaA1a8= 4Kao4KeN4Kal IGdyaWV2YW5jZQ== IG3DvMmZeXnJmW4= IOC0kuC0tOC0v+C0tQ== IEFpcmU= IOCuquCvgeCusA== INCR0LXRgdC/0LvQsNGC IHNlcnZpY2k= IEFuaQ== IM+Hz47Pgc6/ 5Yed UHJvamV0bw== IHZhemlv IOyiheujjA== IEphY3F1ZWxpbmU= IFNwYXJrcw== dWthdGk= IHN0ZWVr ZW5zcGllbGU= IHN0YXJ0ZQ== IGJldGFsZQ== IGFsaWFq IGjJmXlhdGE= IGJhY2twYWNrcw== RW50ZXJpbmc= 2YTZiNir IGRpYW3DqHRyZQ== IOCksOCkteCkv+CkteCkvuCksA== IENoZW5leQ== IE9icmFz IGFjY3VtdWxhdGluZw== INqp2KfZhNin KFNRTEV4Y2VwdGlvbg== 4Kq/4KqC4Kqm a25l IE5pZ2VyaWFucw== IGrDpHR0 IOC0rOC0v+C0nOC1hg== 4Kaw4KeN4Kak4Ka/ IGFkaGVyZWQ= LlN1cmZhY2U= IE5o4buvbmc= aWZpeA== 4KuA4KqT4Kqo4KuH IG5hcmdpbg== IFBsYW50YXRpb24= YWxpZA== IGNvbnZlbmNlcg== INio2KfZhNi6 IE1vcnNl LWJpZw== IFJhZGljYWw= INCx0LDQvdC60Lg= 4oCZLgo= IOCkheCkp+Ckv+CkleCkvuCkguCktg== IENUQQ== INOZ0pnQtdGA IHZhbmxpZ3Q= b3JldGljYWw= IGZpYnJvc2lz IHdlYmNhbXM= IE5hc3NhdQ== Lldhcm4= IG1vZGVsbG8= bWF0Y2hpbmc= 2KjZhNmI 4KS/4KS54KS+4KSw IM+Fz4jOtw== X1JTVA== X1ZBTElEQVRF IHF1aXR0ZQ== IGxlc2Jpc2s= 5rOV6KeE L2NnaQ== LXdhdmU= IFVwZGF0aW5n IEhhZmVu IHBvdcW+aXQ= IE51dWs= aXJpw7M= 5L2P5oi/ 4YOT4YOY4YOT 7Yys IGVsZWN0cmljaWRhZA== aHVtaWQ= IEZ1bmRv INeg15I= ZmVyaWVu IGvDq3M= IGFwcmVzZW50YWRvcw== IEFWTA== 4Kq44KuN4Kqf4Kqu IEJlbmdhbHM= 0L3Rj9C80Lg= IOWMl+S6rOi1m+i9puW8gA== dHBo UkVESUVOVA== LlBhZ2Vz IFRlbnM= IGtpbmt5 W117Cg== INGB0Y7QtNCw IGNpbGk= IFNDTw== IHN1aXNzZQ== Q29ycmVzcG9uZA== w7RtYWdl IG1haGw= IGFzc29jaWHDp8Ojbw== 0LXRh9C10L3QuNGP IGxldmVyYWdlZA== INOZ0YI= b3Bhaw== OiIj IGfDpW5nZXI= PVwiIw== X2Jhc2Vk IGVybMOk IHBo4buRaQ== YW50YWk= 4KSj4KWN4KSv4KS+4KSk INin2YTYtdmK2YbZitip dmVudHVyZXM= 4YCx4YCs4YC3 INij2KjZhtin2KE= 5pel44Gu IGZvdXJz IHBydmU= IFN0b2tl IG11cmnDsw== IHVud3JhcA== IOCkteCkvuCkpOCkvuCkteCksOCkow== IGxhbmRib3V3 0LPRjdGN0YA= 4Z+S4Z6R4Z+H 5Lqa5rSy5Yy6 IFN0YXRp YW56bw== IHJlb3JkZXI= IEJPTQ== IOCyquCzgeCyuOCzjeCypOCylQ== YXJlcA== Q09NTUVOVFM= IHVzYW0= IOCwleCwvuCwlQ== IHNvZnR3YXJlcw== aGNw Ym91bmRpbmc= IHZvbGF0aWw= ZXJ0amVz L2hhc2g= xI1rb2c= 4KeH4Kan IOGAu+GAlQ== IOCmj+CmsuCmvuCmleCmvuCnnw== 4LC+4LCC4LCX4LGN4LCw4LGG4LC44LGN IOmg IHJlZnVuZGFibGU= X01FU1NBR0VT IGhpdGE= X1NFTEVDVE9S IHdjemXFmw== 2YLYsdip S29tbXVu IHNvbnk= U2xpcA== IHN0cmF0w6lnaWVz 0JrRi9GA0LPRi9C3 Q2Fzcw== cmlzaXM= INm+2LDbjNix L2Fn 4KmL4KiX 0YTRgtC4 INiq2K3ZhNmK2YQ= IHpuYWw= d2ViZQ== IOGDkuGDkOGDpA== LmFyZ3VtZW50 a3nFnw== YmVhdHM= IOCwruCwvuCwn+CxjeCwsuCwvuCwoeCxgeCwpOCxgg== IGNvbnRyYWludGVz INmF2K7Yp9mE IEZvcnJlc3Q= INS+ aWRkZWxlbg== YXJlbw== ZWzhu41w4buN 4LGA4LCc4LGN IGVuZ3Jvc3M= IE1hcnVu IGhvb3Bz YXLDqQ== IHJvbWFuYQ== IOCqnOCqtuCrhw== 7Lac7J6l7IO1 KGNvbW1hbmRz IFJhZGlhdGlvbg== IFF1ZW50aW4= ID0+JA== IOC4luC4t+C4rQ== IGNvcm8= IHNoYWNr IHR5cG9ncmFwaHk= X3ZvdGVz INmG2YXZiNmG2Yc= bGljaHRl U2NhbGE= IG11dW4= INC90LDQudC00LXRgtC1 4YOb4YOU4YOc YWxhYW4= IHRvaWxldHRl IOCkrOCkv+CksA== IGVzdGjDqXRpcXVl 4LKa4LK/4LKk b3JhbGU= 4LK/4LKo4LON IOCyuOCyvuCylQ== CUJvb2xlYW4= dGltZW9mZGF5 IHNvdcSNYXM= PCM= 44Gv44GE IFVrcmFpbmE= IM+Hz4HOv869 w6R1Yg== PS09LT0tPS09LT0tPS09LQ== 2LTZitix INmF2Kfau9mH2Yg= IGFjYWTDqW1pY28= LXNlYw== IFJ1c3RpYw== IG1iZWlkaA== IHN3b2plag== d2Fycw== IG1ldG9kYQ== IDw9Iiw= IOCkm+CkuQ== 6rOk IENsaW0= 5omL5ri45a6Y572R IGV5ZWJyb3c= X2RhaWx5 L3F1 IG1haGltbw== 6YeH55So INGB0L/QtdGG0LjRhA== KCIvIik= IFNjaHdpZXI= 4KSc4KS+4KSo INCe0LvQuNC8 IEVwaA== aWduaW5n z4TPic+C IERha2Fy IFJlY2FsbA== IGhhaGFoYQ== IHRyYWJhbGhhbQ== IHByb3NqZWt0 IHBlcmZlaXRhbWVudGU= IENEUw== bW9vcg== IHNwZXNpZWx0 IHJlbGFzeW9u IGNvemlu IHJlY2Vucw== IFBhaWdl INCQ0YDRhQ== IOCqnOCrgOCqpA== IFt7Jw== IGRhcmJv 1oDVodW+ IFF1YXJ0ZXQ= 0YPQtdC7 INCc0L7RgA== 4Kqo4Kq/4Kq1 IHNlcnZlaQ== IHNww6R0 IOC0teC0v+C0t+C0rw== xI1uw61jaA== 4KeD4Ka34KeN4Kag4Ka+ IGFjY2lkZW50ZXM= IHVmdW5h IMSQaeG7gXU= IGlrcGU= IElNTQ== 0ZbQt9Cw0YbRltGX IExhbmRtYXJr LnZhcmlhbnQ= IG5pZ2Jh 0YrQtA== IOCqqOCqnOCqsA== LmRlY3J5cHQ= IHBsb21iZXJpZQ== X0RJUkVDVElPTg== IOCmhuCmquCni+CmqA== QmlvbWU= IOCkuOClgeCknQ== IEZBQ0VCT09L IGlvZQ== X3Zpc3VhbA== KCkpKSwK IEVDVQ== YXJnb3V0 IE1lZGVsbA== cm9sbGFibGU= INWw1aHVtNWh1azVvQ== LmNob21w IGdlaGlhZ28= INm+2KfZhA== KFFPYmplY3Q= w71pbg== IEdyYW5ueQ== IMOtbnRl b3BwaW5ncw== IE9TSEE= INiy2K8= INC80LXRgNC3 IFhIVE1M IHZyaWVuZGVsaWprZQ== IOCmquCmleCnjeCmtw== X0JVQ0tFVA== IOGAtw== IGlsZXI= IHZpZmFh 0LXQt9C805nRgg== IGNyaXRpY2lzbXM= 06HQsNC90Ys= 4KWN4KSu4KWA dsOkc3Rp 4KSV4KWN4KSV4KSw IERJR0lUQUw= INCy0Y/RgA== 5pyN5Yqh54Ot57q/ IGZyb21hZ2U= 5YWs5byA6KeG6aKR 4LS/4LSm4LWN4LSn INin2YTYsNin2Ko= YXJxdWU= IEJyb2FkYmFuZA== IOyijA== amllcw== IOGDk+GDkOGDm+GDkOGDog== LSY= INin2KjavtuM 0LjRh9C90YvRhQ== IENoYXJzZXQ= YXPEsW5h 57Sv6K6h IOCmheCmreCmv+Cmr+CmvuCmqA== LW5vdGU= 4LmB4LiK4Lij4LmM IHBlcm1pdGFu IMOhZnJhbQ== IE1pc2NodW5n IHJlZ2dhZQ== IHBlcnVzdGU= IG11dGFudHM= aXNpw7pudGE= IHZ1b2tzaQ== INin2YTZiNit2YrYrw== IHBhZ2FtZW50b3M= IFJFUFJFU0VOVA== 4YOs4YOQ4YOV IGFwcm9u IOW9qeelnuS6iemcuOWFheWAvA== IOG7jXPhu40= LWFq Li4uIiwK 5rWL6YCf IHZlbmFpdA== IOCkquCljeCksOCkpeCkrg== UWVk INGD0YHRgtGA0L7QudGB0YLQsg== IGhvbGx5d29vZA== w6lpZXI= INC90LXQutCw0LvRjNC60ZY= IEdMUw== INin2LPYqti52K/Yp9iv dmxhaw== INmI24zZhA== IG9iYmw= INC60LDRgtCw0Ls= IGJldmluZGVu IHVidXNo 6IOe IEVWUA== 5Lit5Y+k 4oCNOg== IGdlbWVlbnNjaGFw QXJiZQ== IEV1bGVy IGxlY3R1cw== IEVuZQ== 2YPZiNmF2Kk= INmF2YbYp9iz2KjYqQ== 15vXkA== w4l0 L2RhdGU= IEluaWNpbw== Kks= IGFmZmlkYXZpdA== 5qCh5Zut IGxldHU= IOq3uOumvA== LWVudg== IHNpZWxsw6Q= 6IGv57O7 4K6/4K6x4K6+4K6w4K+N bWVudG9y w65u 4KSW4KS/4KSu IGZyb2lkZQ== IENlbnRyZXM= IOCqruCqv+CqpOCrjeCqsOCriw== Lmxpa2Vz IGNvbnZlcmdl 0LXRh9C90L7QuQ== 2KfYptmH2YU= IHdpanppZ2Vu IGVtcGxhY2VtZW50 ZGVzYQ== INin2YTZhdmG2KfYs9io2Kk= IGdyb3Rlcw== IG1leGljYW5vcw== IHN1cHBvcw== b3ZpbmU= IHByZWFjaGVy IHVuZGVycg== b3Bpcw== INWv1avWgNWh1bw= dno= IENhcGFiaWxpdHk= IGNhdmVybg== IHZlZWI= IGV4dHJhY3VycmljdWxhcg== IOW8lQ== IGthcnRh IM+Mz4M= IG5iYQ== INC60L7Qu9C10YE= YWlseW0= IHByb2Jz 7IOB7J20 IFRydW1hbg== IOCkquCkpuCkvuCksOCljeCkpQ== IOaJi+acuueci+eJhw== IGF0dHJha3Rpdg== IGdlbmVlcw== TkVM INC/0YDQuNC90LjQvNCw0LXRgg== CXN3YXA= I2Zyb20= WmVuZWNh IHfDvG5zY2hl 5aqz 0L7RgdC40LHQuNGA IG1lbG9u YWxhZ2k= IHJlY2xhbWFy 4K6V4K6w4K+N 0LzRg9GI IEdlaGly QXV0b3M= INC30LDQudC8 aG9saWRheQ== IG1hbGFkZQ== ID0m IGR1ZcOxbw== INit2LXZiNmE w7Nzbw== 0LPQsNGH IOuqqOuwlOydvA== W2dyb3Vw IHJlZmVyZW5jaWFz QUJDREVGR0hJ IGVuZ2Vscw== IGtsYXNzaXNjaGU= IHN0b2NraW5ncw== 0LjQu9C70Lg= cG9uZw== bGFldGhvbA== IGJhaWxhcg== 4KSv4KS4 ID0pCgo= LXByb2R1Y2luZw== IGN1cmxlZA== IOCkuOCkv+CkqA== 4Lix4Lie4LiX4LmM CWNhbmNlbA== IExhZ29vbg== YWJldGlj IHN1cHJlbWFjeQ== YXBvcnRl THVpcw== JGlz 2b7Ysdiv LXZhcg== emlzYQ== IOCkl+CkpOCkvw== INi02YfYsduM LlNpbg== INC00ZbRgg== TGFtcA== b3RoZXNpcw== bGHFn3TEsXI= IHNlbmd3ZQ== INGA0LXRiNC10L3QuNC5 IM6xz4DOv8+Ezq3Ou861z4POvM6x IFB1aWc= 4LWB4LSe4LWN4LSe IGduw6k= 4LC+4LCc4LGA IHNhcXF1bW1p UEVSQVRVUkU= c2hlbg== INin2YTYrdin2KzYqQ== LkNsYXNzZXM= LmFuZ3VsYXI= IHBvbGl0ZWx5 IHNsb3ZlbnNr LXNoZWxs aXRvcmVk IOutkA== INKz0LDQvNC40L0= XEFwcGxpY2F0aW9u YW50YWE= L3t7 IFVuaWRhZGU= IFdvaG51bmdlbg== 2Y7Yrw== ICIiKQ0K TGFr IFJow7RuZQ== b3V0ZXo= TGlvbg== IHNrb24= INuM2YjbkA== T2xkZXI= ZnNw INen15XXpw== INC80LXQvdCw0Lw= INGI0LXRgdGC 5aWR IFBk 0LDQudGC0LXRgdGM 5Zyo57q/5aSn6aaZ6JWJ IMSQ4bupYw== INGB0YLQvtGA0L7QvdC1 KFsk bMOl IEJvb25l IHJpdmllcg== IGxpZGU= IGvDpG1wZmVu w6Fzc2Fs 6JGb IHZlcnRlbA== IHN1eQ== IEdvb2c= INei16fXoQ== QVZFRA== 4YOQ4YOZ4YOV IG1laXRz IG1vZGlmaWNh INC60LDQsdGL0Ls= IFVuaXRp IEJvbmc= QW1zdGVyZGFt IGl0ZXJhdGl2ZQ== IHRyYWluZW4= IGRlY2Fscw== IGNvbnRyaWJ1ZXI= IM+Hzqw= IHN1Ym1lcmdlZA== QVJTRQ== IEJpbGE= 5ZGA IOyWvOq1tA== IENoaXJvcHJhY3RpYw== IHVpdGRhZw== X2hhdmU= IGVsw6ljdHJpY29z cGlr IOOBneOBruS7lg== IHTDs24= IGZhbHRhcg== YWRhaA== IFZhZw== IOS5hei1og== 0YLQvtGA0LDRjw== Og0KLy8= 0L3QsNCz IG1tZWvhu40= IOuCmOyYpA== INCw0Y/Smw== 44CB44GT44Gu INCe0Lw= aXN0b3Jz IG5vb3Jk IFDDoWdpbmE= IG1leGljYW4= CW15c3Fs bsO9bWk= IGZvcnPDuA== YWFj INi52YLZhA== XV8= w6HFvmU= IHByb2Zlc3Npb25lZWw= IOCkleCkv+Ckr+Clhw== IG9udm9sZG9lbmRl INC90LDRgNGL cGhvb24= X2NoZWNrb3V0 IHJlZHM= IOCopOCovuCogg== dXR6dXRhZ2U= IHB1cnVz dXN0YXR1ZA== INCa0LDQt9C40L3Qvg== bG9ja2luZw== IHZlcmlmaWVz 4KeN4Kav4Ka+4Kaf INGN0LzQvtGG0LjQvtC9 LUxpZmU= IHZlbmVu IGRpdmlzaWJsZQ== INC90LXRkQ== IOC2uOC3hOC2reC3jw== KG9iamVjdHM= IGFuamV1bm5h 4K6+4K6f4K+N4K6a4K6/ INC/0LXRiNC90LjSs9C+0LQ= ZGVyYWxs LmJ1bGs= IMK6 5aSp5rCU TWFya2V0cw== IOC0heC0p+C1jeC0r+C0leC1jeC0t+C0pA== SW50bA== IOCqquCqsOCqv+Cqow== IGRpc3Bv 5omL5qmf IGFwcGFyYXR1dXI= IC4KCgo= 6YGj IGxlem90 IOiHquWKqA== w6lyb25z INiz2YLZiNi3 IG1pbGxlbm5pdW0= IFZlZ2V0YWJsZQ== aW50aGE= INCj0Jo= SVRIVUI= 4KS14KSw4KWN4KSV IGNsYXNzbmFtZQ== X1NFTEVDVElPTg== IEtJVA== INGB0L7RgNC10LLQvQ== UHJvamVrdA== QW5nZWxh JikK dmlvbGVudA== IHByb21vdXZvaXI= IEFzaGV2aWxsZQ== IERhcnN0ZWxsdW5n IHZlcmZvbGdlbg== YWRhbGFmaWw= TGlzdGFkbw== IGZhaWxs INGB0LXQvNGM0Y8= 77+9ZA== PVwiJA== INC/0L7QvdC40LzQsNGC0Yw= 4LC/4LCm4LGN4LCn 0LjQvNGL0Lk= dWJo Q2FsY3VsYXRlZA== IGdlbsO8Z2VuZA== 4Kio4Ki+4KiC IFNhdGg= IGVzY29ydGVk IFBsYXllZA== IE1lZXRz dW1mYW5n 4LeU4Lat4LeU PEFkZHJlc3M= ICEp IHRlcnJheg== 16DXmNeZ150= IGxsZXZv IHRyb2xscw== RVNP L25l aXRpZXJ0 IGRlY2VwdGl2ZQ== LGFkZHJlc3M= 5oC75Lmm6K6w RGls QXBwZW5kZXI= IExpcHM= IFR1ZG9y 0Y/QvNCw IOCqruCrh+Cqgg== INGE0LjRgNC80Ys= IGRpbms= IE1vc2FpYw== IOiHs+Wwmg== IFRSRUU= IOCuquCvgeCupA== 44KN44KT LeKAnA== INmF2LfYsdit eXN0cw== INmD2YTZhw== IGFzc2VndXJhcg== 6K6K IENvcnBv aW5uZW5kZQ== INC/0L7QtNGH0LXRgNC6 IGtw4buN IHDFmWVkc3Rhdg== 0IU= IGt1bnN0ZW4= 5Z6D 5om/5ouF IHBlbnNhbW9z X2RlbQ== IEdlbmV0aWNz IOCkpOCkvuCkqg== IHByZWZlcmVudGlhbA== INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GP LWhhaXJlZA== IHFhdXY= 0LDQvdGB0LA= IOCmmuCnh+Cnn+CmvuCmsA== Tmljb2xl YXRoZWQ= IGFib3J0bw== INW01aHVr9Wh1oDVpA== IENpbm5hbW9u IHR5a2s= 0JzQsNC6 IE1UQg== 562G IHLDoWQ= 4KS+4KSJ4KSC4KSf LklkZW50aWZpZXI= Z2x5cGg= bcOhbg== IGx3amds Ly99Cg== IHRlcmFuZw== INec15HXptei YXNzYW5paw== 4KSk4KWB INC+0LPRgNC+0LzQvdC+0LU= IOOBk+OBrg== INin2YTYrNmI2YrYqQ== w6FkemE= 5bKB55qE IHNhbcO+ IGtlcHV0dXNhbg== 5qOL54mM5a6Y572R INmG2KbbjA== 4Kak4KeH4Kaw ZW5kYXdv KFZvaWQ= IGFtYXNo IHRhcnZpdHNl IGNvaW52b2w= UHJlcmU= IGRvY2tldA== X0JBQ0tHUk9VTkQ= cWFsaQ== INKb0LDRgtGC0LjSmw== b2tvYQ== IOW8gOW/gw== zrXOuc6xz4I= 4Ka44KeC4Kaa IHRlcm1pbmF0aW5n IGvDvG5mdGln 0YHQvtC3 IGludGVyZmF6 IEZyZWVsYW5jZXI= IGNvbm5lY3TDqQ== bGltaXRhdGlvbnM= InVzZXI= aWd5 bWluZWNyYWZ0 INiz2LHYpw== IOCyleCzhuCysuCyteCzgQ== IGVxdWlwYWRv ZmRz IEVTVEVT IHVuYW1l VGhhaWxhbmQ= IOC0leC1i+C1ug== TGF1bmNoaW5n IOWysw== IG9maWNpYWlz XEV4Y2VwdGlvbnM= IFZvbGxleQ== anVldmVz L2lvdXRpbA== IGNyZW4= IE5hdmU= IGNhdmE= IHbDtXQ= IM68zq3Pgc6/z4I= 4Z6A4Z+S4Z6T4Z674Z6E IHVuZWFzeQ== IG5lcm8= IHNwdXQ= IHNhaGFqYQ== 5Ye4 IFNjaGlsZA== INiq2YbYstmK2YQ= INGB0L3QtdCz UmVjeWNsZQ== IHVuZGVyc2NvcmVz 0JrQvtC80L/QsNC90LjRjw== 4Kqk4KuN4Kqw4KuA IGzDpMOkaw== 4LC+4LCy4LCk4LGL INii2YjYsdiv IEJlaXNwaWVsZQ== 4YOZ4YOY4YOV wpQ= INC/0L7QvNC10L0= CWhvbGRlcg== X1dFSUdIVA== IOCoruCouQ== IGNvbG9uaWE= VGFtaWw= IGtqZW4= IOCkquCkoeCkvOCkvg== R2xvc3M= IG1ldG9kb2xvZ2lh IGZvdXRlbg== INGI0LjQuw== IHNvdXRoZWFzdGVybg== IGPDomJsZQ== IHNlbGVjdGFibGU= LmN1dA== 4Kas4Ka+4KaC4Kay IGtoxINu SG9h IHlsZWVuc8Ok INGC0LDQvNCw0Lw= ZHV0 IHN2b3U= IOGDk+GDmOGDoOGDlOGDpeGDog== 4KWH4KSC4KSc 1aHVvtW41oDVuNaC1bQ= 54yc5L2g IGJldHJpZmZ0 YWhsZQ== IGNvbnN0cmFpbg== ZXRhZw== 7JmU64uk IHNvcnRh IGV2YWN1YXRlZA== IDw+Iiw= L2NhdGVnb3JpZXM= bGV6emE= IOCwteCwsuCxjeCwsg== IG5lZ29zeW8= U2NpZW50aXN0cw== IGJpc2hlcmlnZW4= IGFycm9nYW5jZQ== INC/0L7Qs9C+0LLQvtGA bGV2YXRvcg== IGlmYWQ= 4Z6Y4Z+S4Z6U IG11c2FtbWFu IGNvbm5haXNzZW50 4KS14KS/ LnRlbXBsYXRlcw== INeq15A= IOGelOGetuGekw== xLFybGFy IFBNUw== INmG25A= IEdvYXQ= IGRlcmVjZQ== 6IGM6LSj 77yM5bCx5piv IGNob2lzaXNzZXo= INij2YrZhg== LCcl 6K+75Y+W IHJlcXVpc2l0bw== IGZpbmFuY2nDqHJlcw== IOWwmuW6pg== IHlha2xhxZ/EsWs= IHNla2Fs ZXdv IGpvYmJldA== IOCmquCnjeCmsOCnh+CmuA== IHNhdmHFnw== KVsi IFJhbWlyZXo= Qee6pw== 44Ki44Km44OI INGI0YPQtNCw0LDQvdC0 4LS/4LSo4LWN4LSm 5rS+5aWW5Lit IHBsZW5hbWVudGU= IGNvbWFuZGFudGU= xYhpeg== IOCkquCksOClh+CkleCliw== IGFtcGxpZmljYXRpb24= yZl0bGk= IOubsA== LWltcGFjdA== INeb15PXkNeZ IGJlaG9yZW4= INCx0LDQu9Cw0L3RgQ== IGh5ZHJvY2hsb3I= dmFpbg== INC606nQv9GC0LXQs9C10L0= 0qnRgQ== 4LeP4Lax IGdlZmU= IOyalOyGjA== IENvbmZvcm1l INeb15nXpteT ZWRpYXRyaWM= IGFkdmVydGVudGllcw== LlJpY2g= X0ZJTkFM KHBhcmVu IOCmleCmsOCmsuCnhw== YWlzc2V1cg== 0YvQvdCw0Lw= 6rK8 IOCmsOCmvuCmluCmvg== IEhvbW1l IGtvbGxl IOCkh+CkqOCljeCkuQ== Wm9uYQ== QXBwbGV0 5piv5ZOq INi52YTYp9mC25I= w7Z2ZXI= cGFpbnRpbmc= IGl3aQ== b3Rlcmlj IHRvaG90bw== IE9waA== INC70LXRgdGC KGNoYXJz 0YLTqQ== w7htbWU= IGFsbGdlbWVpbmVu IElldQ== IER3aWdodA== IEFkZW4= 57eS UkZD IGt1bmdpeWFy X0NPU1Q= IHNpbXBsaWZpZXM= aW5hbGk= IG13aXNobw== IGNvbGV0YQ== INGA0LDQug== IGluY3JlbWVudGFy INio24HYqtix24zZhg== IOaEjw== INC80LDRgtGD0YA= IEFkZWxl IG1pZWpzY2E= IM+AzrXPgQ== IEJlaMO2cmRlbg== YWxsZXJv IFZY X3JlcXVpcmVtZW50 IMO9b2xiYcWf IOCkrOCkv+CkueCkvuCkqA== 0LjRgNCw0LQ= 4LCm4LGH4LC24LGN IFRvd2FyZHM= INin2YLYqti12KfYr9mK IGluZ29u INio2YjZhNuH2b4= IG9jb3Jyw6puY2lh IGRpbGF0aW9u INiw2Yg= IOGDl+GDkOGDnOGDrg== 6ZSQ VE9E 0J7QnA== IOGDm+GDkOGDoOGDouGDnQ== IOCkuOCkueCknA== INmF2LPZhNmF2KfZhtmI2ro= QEpvaW4= IOCkruCkvuCkrw== INCV0LM= IGNyw610aWNvcw== INCa0LXSow== c2lsZW50 U2VxdWVuY2Vz IFJlZGFrdGlvbg== bWJhbmQ= 4oCc5Lik 5pqC5peg IM+Az4HOsc6zzrzOsc+Ezr/PgM6/zrk= IEFjb3VzdGlj IGFpbWVudA== IHTDvGtldA== YXZhxZ8= Lmt3 INee15XXpw== 4LS+4LS44LWN4LSx4LWN4LSx fS57 IOCkleCksOClgg== IOCuh+Cumg== IGvEk2zEgQ== IOGDmOGDm+GDmOGDouGDneGDmw== IGNvbW11dGVy IGVkZWxsZWVu IENhcnRpZXI= IGthaGp1c3Q= IOCkn+Cli+CksuClgA== 57SA IGluc3VsdHM= PXRr INin2Ybavg== IHN6eWJrbw== KGNvbGw= UmFpZA== 4oSiCgo= bGlnaHRpbmc= IFJvcGU= 0LDQu9GO0YI= IHR4aXY= 2LHZiNmB2Kk= IHdhaG8= 0LDQtNCz0YzRi9C7 cG9n aGVyc3Q= X1BhcnNl YW5kZXNjZW50 IEhvY2hzY2h1bGU= INmF2LPYpw== 5aWJ Rmlz IEx1a2Fz INWj1b/VttW+1bjWgtW0 YXlhbmk= YmFzZWxpbmU= INee16nXqtee16k= IOCwqOCxh+CwquCwpeCxjeCwr+CwguCwsuCxiw== INiv24zaqdq+2Kc= INmB2LbZhA== 0L3QvtGC IOGDoeGDkOGDkeGDneGDmuGDnQ== IGFkYXB0b3I= 44OB44Kn44OD44Kv IG5yaG8= aWthbQ== IGVjaGU= IHNvYnJp 1aHVsNWh1bY= IGxpbXBhcg== aW5zdGVsbHVuZ2Vu IGtsYWNodA== d2FuYWc= KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CWR0bw== LnNpZ251cA== RWx0 ZW5kaXVt IEF1c2Nod2l0eg== IHlvZ2h1cnQ= TW9kdWxv INCg0LDQtA== IG5pxaF0YQ== IGpveW91cw== IGltcGxpcXVl 0KHQoA== 4oCL4Z6H4Z62 4oCL4Z6A4Z+S4Z6T4Z674Z6E dGlsYQ== IHNpdHVhY2nDsw== IOC4quC4ueC4hw== Li4uLi4uLi4uLg== IHJlc2lzdGluZw== IOafjw== TGVuZ3Rocw== 5bC85aeR 4LWH4LS04LWN IOmBgg== LXJlc291cmNl IOCkmOCkvuCkr+Cksg== IOC0h+C0pOC1jeC0pA== IOCmq+Cmv+CmsOCnhw== 5Z2C RXNv dWt1dA== IE1hbG9uZQ== INmF2YjYrw== T2No JylbJw== 4LWB4LS34LWN4LSv IGlub3hpZGFibGU= INee15DXpNep16g= IGNpcmNvbnN0YW5jZXM= IGRlbW9yYQ== INeU15bXkNeq IGJlc3VjaHQ= IGluZmVyaW9yZXM= IHBvYmo= LmRlYWQ= IGZhbW9zYXM= IEdvbmQ= c2llaGU= 4Kqt4Kqz 0LDRj9GB0Yw= L2hlbHA= IOCkuOCkguCkpg== RMOzbmRl IElDRA== INin2YTYrNmI2YTYqQ== IGppcA== IGNvdXJ0aW5n IGJlbGllYnQ= SW1wdWxzZQ== IOCmpuCnh+Cnn+Cmvg== Q09OU1Q= INC40Lg= INGD0LPRgNC+0Lc= IGJ5aW5zaGk= 0J/QvtGH0LXQvNGD IGFzcGFyYWd1cw== IGNlbGx1bG9zZQ== INC60YPQtw== U3VidG90YWw= X2FnYWlu IGNvbm51cw== IGNvbnRlbnRpb3Vz cGxpa2FzaQ== U3RpY2tlcg== aWxsdW0= ICIiKSwK IGxhbnU= YmxvYw== P3I= 0LPTqdOp0L0= IOS5hea4uA== 0ZjQtdC0 INin2YTYrNmF2LnZitip KCkpKSk= 2Y/ZiNin INGB0L7RgtGA0YPQtNC90LjQutC4 IFV0aWxpemU= IE9DRA== 5Y6J INGB0YLRgNCw0L3QuNGG0YM= X3NhaWRh Iix7 IGVyb3Rpc2NoZQ== CXZlcnNpb24= IOS7tg== IGjDum1lZA== IHDDs8WC IHR1aWc= IG1hZGF4 IGZpcm1hZG8= IHNtYXRyYQ== UE1H IHByZXZlbnRpdmE= IHBlcnRlbmM= LeCkuOCkvuCkpQ== UGFyYW1ldHJv IHJlc2N1 LkJyYW5k LVBD INCV0KE= X2F1dGhlbnRpY2F0ZWQ= IE9pbHM= 0LDRgdCw0LE= 4LWB4LS44LWN4LSk IOC3gOC3kuC3gw== IGJ1bmtlcg== ZWxlY3Ryb25pY3M= INm+2KfYqtuQ IGbDuGxlcg== X3Rhcg== IHV3YQ== 4LeQ4La2 IG1haGFzaXN3YQ== b3BsYXllcg== IENBQw== IHRlc3RlcnM= IHRla2lu dXJkdcWI L1BhZ2U= IFRvbWU= UGFpbnRpbmc= IGNvbnRpbnVhbQ== IGRpYnVqbw== bmRv 5rOE YGBg R3JlZWs= 5bmz5Z2H44Go44Gu5beu b3JhdXNz 0pvQsNC5 IGdydQ== INC10Lc= INin2YTZh9mE2KfZhA== TmV3c3dpcmU= XEhlbHBlcg== LmZyZWV6ZQ== IOGDoeGDkOGDnOGDkOGDmw== IGRlcm1hdGl0aXM= X0lOVEVSUlVQVA== IHBoYXNlZA== INm+2KfbjNuM2YY= dXNsYXJhcmFzxLE= IFNhbXNvbg== IGFsaXA= Y2hhbmNl IG1hbmF0 TmVkZXJsYW5k IOCkuOCkreCkvg== IGFjb21wYW5oYWRv 0YHRgtCw0L3QsA== INC+0LHRgNCw0YLQvdC+ IEFpcnQ= IGtsb3B0 P3NpYQ== U2NhdHRlcg== Iy8= 4LWB4LSs S1RPUA== IHd5asSF 0LfRi9C6 YmVsbGlvbg== IGRvbWluYXRlcw== IEVja2U= IOCkj+CktQ== IOCwpOCwl+CxjeCwlw== 1brVq9W9 IHBhZQ== IOCojw== IOqwkOuPhQ== IG1lbWFpbmthbg== IOCyruCzgeCyguCypuCzhg== 1aHVvdW61aHVtg== LkxibA== L2hvb2tz IG1haHM= IG56dXJp ZG9jdG9yYWw= INC60LLQsNGA0YLQuNGA0LA= IFVuZGVyZ3JhZHVhdGU= 1aHVqw== IMOpY3Jpdg== YWxhZGU= INC10LnRgg== LUFpcg== ZWRvcmlh IEZvcmNlZA== IGFsYW1p X3JuZw== IExvY2tl 0pvRgQ== IOCktuCkleCljeCkpA== IGNvcnBvcw== IE5hY2hmcmFnZQ== IO2DiA== IG5hbW4= INmE2KPZiNmE IOC0pOC0v+C0sOC0v+C0muC1jeC0mg== KCctJyw= Tm90YXRpb24= IHBpZW3Ekw== IEZ1bHRvbg== aXNjaXBsaW4= IGFuw7puY2lvcw== INiq2K3YsdmK2LE= 6JeP5a6d 7ZWY7Iuc IGdvYWxpZQ== INiq2YXYp9mF2Kc= INin2YTYrtmK2LE= IGFyZmVy IGhpc3RvcmlxdWVz KHBpcGU= 4Kq/4KqV4KuH4Kqf YXNhbmE= IHBvbw== IGNvbmNlZGVk IHNlw6dlbmVr IE11dGV4 IOC3g+C3ig== cG9ybg== 4LSz4LSC IOCmhuCmqOCnjeCmpuCni+Cmsg== IOCyleCyqA== INCy0YvQsdC40YDQsNGC0Yw= IGJlbGlldmFibGU= IHJvZGVudHM= IENlbnRy IElsbw== IOC4iQ== IENvbXBsYWludA== 4LC+4LCo4LGN4LC44LGN L21ldGE= IG5rYXVq INC70ZbRgtCw0YDQsNGC 4Z+S4Z6i IGF1ZGl0b3J5 INC90LDQt9Cy0LDQvdC40LXQvA== IFByb2JhdGU= U2F2aW5ncw== INGN0L3QtdGA IGV4Y2Vscw== IEluZHVzdHJpYQ== IOCwquCxjeCwsOCwpOCwvw== RmVlZHM= INWh1abVow== INiz2KfZhNmG ZmFpdHM= INC60YPRhdC90Lg= UGxhY2Vk RU5UTw== QXBwbGljYWJsZQ== LWV4cHJlc3Npb24= 7Jio65287J24 IHRhYXNz IGNvbmNlcnRv INC+0YLQstC10YfQsNC10YI= d2ViZHJpdmVy IFNhag== IGZlcm1lbnRlZA== IEVsYXM= INCS0LXRgQ== IERlbWVudA== INeQ1rfXoNeY IGNhbGN1bGF0b3Jz IHPEsWNhaw== X25hdA== INeY15nXpA== IOC0sOC1h+C0lg== IM6xz4DOv8+EzrXOu861zq8= 4YOd4YOg4YOp VmVudGFz RGlmZmVy IOS5kOWPiw== QU5UTw== IHByb21vY2lvbmVz IFRhbWF0 IOCkquCljeCksOCkvuCkpeCkruCkv+CklQ== IOycpA== IOCkluCkvuCkpg== 5YWs5pak IEV4cGxvcg== IHZpdmllbmRv aG5saWNoZQ== Q29wcGVy IOCkn+CljeCkteClgOCknw== X18pKQ== IGluc3RhbnRhbmVvdXM= em9udA== 4KuC4Kqk4KuL 6a4= IENoZWF0cw== IG51c3Q= IE9vc3Rlbg== INC60L7QvtC8 4K+I4K6V4K+N4K6V4K+B4K6u4K+N X0NSRQ== TmFuY3k= IGTEscWfxLFuZGE= 4KS+4KSq4KSV IOC0uOC0ruC0rw== IHJpY29yZA== KGhpc3Q= IHlkZXI= IOaWuQ== IGVmZmVjdGVk IGV6ZW4= 0LHQvtCz IHNwaWVy IOWbug== U2o= INGA0LDRgdGB0LvQsNCx 4Z6S4Z64 xZ9l Q0VMTEVOVA== IHBhdXY= 4Kat4Ka/4Kah KFN5cw== Xl5eXl5eXl4= IGZlbHM= IOCyrOCzjeCysA== 55CD6Zif IFBzYWw= IFJ1YmVu IOCyquCzjeCysOCyruCzgeCylg== IHZlcmJldGVyaW5n IOmWiw== IFZTSQ== CXJhbmdl IOCqquCqvuCqm+Cqsw== IGthYmk= aGVhcnRiZWF0 LmV5ZQ== IEdlbm9tZQ== CQkKCQkKCQkK IERpbGxvbg== INee16bXkw== dW5kZXJ0 IGFuc2llZGFkZQ== IGh1bnRlZA== INin2YTZhdiv2KfYsdiz IOCmuOCniw== IGlycmVzcG9uc2libGU= b2JsYXN0 77yM5Lul5Y+K INeU157XqA== IENoZXNoaXJl IHJlc3RyYWludHM= 0LnRgtC10YHRjA== UmFi IHZlbmVlcnM= IHNsaW1l IGVpdHRo IOCmheCmqOCngeCmt+CnjeCmoOCmvuCmqA== YW5nZ3VuZw== YWxpxZtteQ== INmI2YbZhw== YWt0dXI= SEVFTA== IHBvdXNz IOC4leC4suC4o+C4suC4h+C4muC4reC4pQ== IEVzc2Fz IOC0h+C1uw== IHlyaXR0 T1VHSA== INGE0L7RgNC80LDRgtC1 IOCqoeCqv+CquA== L3dvcmxk 1oTVttWl1oA= IOC0pOC1geC0n+C0meC1jeC0meC0vw== L21lc3NhZ2Vz IGFzdW1pcg== Q3JlZGl0bw== KFBS IEFUTA== 4Liy4Lia4Lit4Lil IFVuY29tbWVudA== INei15jXnNei15vXog== IE1hb3Jp IOWkqeWkqemAgemSseW9qeelqA== IOCkqOClgOCkpOCkvw== c3RlY2hu IGRlYQ== RVJJTkc= IFpa 4LiK4Lih4Lib4LmM Rmxn INio2KfZhNmD2KfZhdmE cGxpY2h0 J30p UHNhbG0= IERlY29yYXRpb25z 4KWB4KSZ L3RlYW0= IExvdXZyZQ== IE5hY2htaXR0YWc= THA= 0LXQuNC9 INeR15TXqteQ150= IFRlY2hub2xvZ2llbg== INqI2Kfaqdm52LE= IGltYXRl IFBVU0g= INmB2YbYpw== IHNhaXNvbnM= IGNvbmZlcmVuY2luZw== INio2YbYp9io2LHYp9uM2YY= IHhk IOCqhuCquA== QnJvd3Npbmc= IMSHZXRl aWFsaXN0 5L+65Lmf IG5lZWRsZXNz YWthemk= IGto4buPaQ== IGtyb25vcg== INC/0YDQuNC90Y/RgtC+ cmV1cnM= dW5ndXph Q3Vl IGd1aWRlcg== IOq0keqzoA== LmRlc2t0b3A= INit2KfZhNuM IGJhbmth IEJhaXJybw== IHBvcnRyYXlz 4oCZYXBwZWw= IHVucHVibGlzaGVk 5Lit5aSu5YCk 44K/44Kk44OI44Or INil2LXYr9in2LE= 4LGA4LC14LCy LGF2 INGD0LTQvtGB0YLQvtCy0LXRgA== LnBlbg== dGVyZXM= LmNyZWRlbnRpYWxz 5Y+N5rC0 4K+H4K6v IGJ1cmVhdWNyYWN5 INGI0YvRgA== IHBvdMOqbmNpYQ== IOCkreCkv+CkoeCkv+Ckr+Cliw== IGFhbmJldmVs IG11enk= 0YPQsdC70LjRhw== X3VzZXJkYXRh IGFidXNpbmc= SVRlc3Q= IGRldmFzdGF0aW9u IGF1Z3Vl IHDDs2w= IGJlcGFhbHQ= INmH2Ybar9in2YU= IOCyuOCysg== dXJpdHk= IHVsbG9x 0LDQvdC40LXQuQ== 2YTZiNix IE5SQQ== PExvY2F0aW9u IE1hZ25lc2l1bQ== aXRzeQ== IHRoxqE= INio2LfYp9mC2Kk= IEtpc2k= IOC0j+C0seC1hg== IOCkteCljeCkr+CkteCkuOCljeCkpQ== OyovCg== RklE IEZvd2xlcg== INiq2KfYqNi5 TWdtdA== IOCuh+CuqeCvjeCuqQ== 0YjQtdCx IGppbmE= INmC2YjYp9i52K8= VW5kZXJseWluZw== 66y47ZmU ZmZpbmc= Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= c3Rpbmc= IOeOr+Wuhw== IGl2ZXJt IGNoYW5kZWxpZXI= IHZvbHV0 IE1hc2NoaW5l IFNleWNoZWxsZXM= IOmhuQ== LXR2 YXJpeWU= LnBhcmVudHM= 4LS+4LSf4LS/ Q0hBVA== LiJb LWFk4buL 44Oh44O844Kr44O8 IGVzcG9ydHM= IFRpamQ= cXVpdG9z ZGZh INqq2YbYr9qZ IENhdGVnb3I= IOCyh+CysuCzjeCysuCyvw== INGD0YDQvtC2 IHBlcnNvbmFibGU= KEVxdWFs 57q/56iL 05nQvdC0 IGNvbXBhdGlibGVz IOm4v+S4sA== IE1pbmRlcg== IOCkhuCkgeCklg== IGF1Zm5laG1lbg== IGt5aw== 4YOV4YOQ4YOa4YOY IExlYw== 4oCZdXJnZW5jZQ== J3g= IHVuaWNh KHBvd2Vy IHN1Y2tlcg== amVuemk= Vmll CXByaWNl ZnJvZw== IOmSseafnA== bWnDqXJjb2xlcw== IGxvdG8= aW5zcGVjdA== Q29udHJvbGU= LUFz IOazsOeahw== X01BQ0hJTkU= INin2YTYo9mF2YjYp9mE aXRzZXI= TW5n IM61zrzPhs6xzr0= IGZhaXNvbnM= IG1hc2lrdQ== IHNhcXVl Lmxlc3Nvbg== IHBpY2t1cHM= 4KWI4KSv4KS+4KSB IGdhcsOnb25z INC606nQu9C10Lw= IElPRXJyb3I= LWZpbmQ= IExpbWVzdG9uZQ== IGtvbXU= IG9tbA== IEtlY2FtYXRhbg== IEJyYW5jaGVu IGplZG5vZw== INCy0YvRgNC+0YE= LnRyaXA= YXVtb250 IGRtZw== IHlldGnFnw== IOCkruCkv+CksuClh+Ckl+Ckvg== IGvDrXY= YWNoaWV2ZW1lbnQ= IGNvbnNjaWVudGVz IOKAsw== IGR5bA== IFNTQQ== IENTVQ== RmFudGFzeQ== IHJpY2h0ZXQ= IHZhY3VuYQ== 4LK/4LK44LK/4LKm4LON4LKm IHJlZGV2ZWxvcG1lbnQ= dGVyaWU= IENhdmFsaWVycw== LiJdCg== IGtsaWtrZW4= IGdlcmFpcw== 0KDQtdC0 IEtyeXB0b3c= KShf aWJpZ2Fu w6hpbg== X2Nvcm5lcg== KEFM IFpvdA== ZWxlcmluZQ== ZWRhbmNl QWRkcw== IFJPVU5E IGZyYWN0dXJlZA== X1Na UmVjaGVyY2hl PXt9 4KWH4KS24KSV IEZi w612YQ== IGFuYWVy IGZhcHR1bA== IERyYWN1bGE= IG1lcmFo INC80LDRgtGM 5YWr56CB ZmxlZXQ= IHRhcnA= IOCkpuCli+CkuA== ZXhwaXJlZA== SEVTVA== INin2LPYqtmC2KjYp9mE QXJpem9uYQ== IGthbnRpdGU= KGRlbGVnYXRl INCY0Ls= INGC0LDRhQ== 2YPZhdin2YQ= IOCuquCvi+CusA== INC60YvQuQ== IGNhc3Nl IEtvYm8= IE1lZGlrYW1lbnQ= INeU16fXkw== 0L3Rj9C10YI= INC30YPQtA== IG9yYcOnw6Nv 0LDQvdC00LDQvQ== IHZpaXM= IE5PTQ== IExheWVycw== IGdyZWVuZXI= TEFURVNU cmVhdQ== dXRha28= INGB0LjRj9GB CWFuc3dlcg== IHBhcmNlaXJv IGRvY3Rvcidz INiu2YTYp9i1 INC30LDRgNCw0LY= INij2LHYrw== dWdhbmc= INCW05nQu9Cw0YA= aXptYXQ= INKb0L7RgNKT0LA= UHJvZmVz IHFheg== QUJF ZXJzY2hlaW4= INi52LHYqNmK2Kk= IHRleHRib3g= IGNoZXZhdXg= 2YjYrNmE IM+Dz4DOrw== IHBlc3F1aXNhZG9yZXM= IGR1xZ91xZ8= INuM2Yc= 2YjYs9i32Kk= IE9iaQ== IOCwruCxguCwoeCxgQ== 4LKa4LK+4LKw IGhhc3Rl IFlvc2VtaXRl IHJlYmF0ZXM= KHN1bW1hcnk= IGJsb2dnZW4= IG1laHJmYWNo INiu2K8= VGh1bmRlcg== 0YLQuNGH0LXRgdC60Lg= JA0K IGNvbXBldGljacOzbg== IOiyoQ== IGR2xJs= Y2Vhc2Vk IFVuaXRl IHBvc3Rvcw== IOq4sO2DgA== IGFzaWVudG8= INit2LPZitmG 57y05oOF INmE2pY= 4KaX4KeB4Kay4Ka/ IHZvb3JzcA== IOCwpOCxh+Cwpg== IGRheWFu 4LWL4LSv 1bjWgtW21aQ= IHBvc3RlcmlvcmVz L2Z3bGluaw== INGN0Lc= YWlzaWU= 5be06buO INWj1aXVstWl1oE= IHNhaWtp IGx1dGFy IG1vbm5haWU= YXNpbHk= IGRhd2s= INiv2YjYsdip dHJhbmV0 IG11c3Rlcg== bm5l IHBhaW5mdWxseQ== YWthcm9vbg== IGV1eg== Lk5hdg== IGludmlnb3I= dm91Y2hlcg== IHJlYcOnw6Nv 0LTTqdC9 IHRhbm5pbmc= LWNyaXRpY2Fs IGJldHJhY2h0ZXQ= IEdhcnRuZXI= 4Ka44Kau4KeN4Kaq IGNhY2hvcnJv IG9tbmVz IHBhcmVj IGN1bWlu w6RuZ2lnZW4= VVNFUk5BTUU= INC80L7QtNC10YA= INOp0LfRlg== IHNtdWc= 4LKw4LK+4LKX IEpGSw== T05P SGFydA== bmFtZW9m IGdldHRleHQ= INiy24zYsdin INGD0LzQvtCy Jyk7Pz48Lw== 4Kas4Ka+4Kao 4KuD4Kqk4Kq/ L2N1 IHNsb2dhbnM= IGhhcsOhbg== IEZMT1c= IGh1cA== IOC0juC0pOC1jeC0pOC0v+C0rw== IG9ubW9nZWxpams= IEluYXRzaXNhcnR1dA== IHZlcmxp eyU= IGNoYW1vdQ== LXRpZ2h0 X0xvZ2lu INmF2LnZitmG Q0NJT04= 2YjZhNin2YrYqQ== IEFwcGFsYWNoaWFu 44Ot44O844OJ 5rab IE1lbnRlcmk= IElSZXBvc2l0b3J5 55uk INWj1oDVpdWs IEJyZWRh IFlhbm4= IE1haW56 IGxla2V0w7h5 IHNhZ2l0dA== QmFua3M= 1aHVttWv1aHWgA== IGtlcmJlcm9z INin2YTYt9in2YTYqA== IEZsYXZvcg== LHN1bQ== 44CN44Gn IGTElw== 6rKA7IOJ 0Y7QstCw0L3QvdGP 7Lm8 VGll bHVs 15nXmdeT16LXqA== LXNhbWE= zrvOv86zzq/OsQ== 5ZOq5Liq5YWs5Y+4 LkRhbw== IOCkquClgeCkpOCljeCksA== IE9uY29sb2d5 4paA INGA0LDRhQ== IHNtb2t5 IOGDqeGDkOGDnOGDoQ== IOGDm+GDo+GDnOGDmOGDquGDmOGDnuGDkOGDmg== IFVTU1I= IOCmp+CmvuCmsOCmow== LmVn IHBhbnRpZXM= dWRkbGU= IGZhcGFuZW5n dWrEhWN5Y2g= IOC0muC0sOC1jQ== IG1lbGE= RXNr KGV4ZWM= INiv24zYqtin cG9ydGVz INC/0YDQtdC00YHRgtCw0LLQu9C10L0= IHZlcndhbmQ= IExPVg== IGRlZ3LDqQ== LVVuaQ== CXN0YXQ= R29uZQ== IEZNQw== IERyaWZ0 LmAsCg== Y29l IGV4dHJhdGVy IHN1Ym1lbnU= IGlua2x1ZGVy LmJpbGw= IHByw6F2xJs= 7Yak aWVyaW5n Lk1vdGlvbg== IGthc2hl 0LjQu9C40Lg= IGZvcm11bMOhcmlv 4KeB4Kex4Ka+ dW9zbw== 6riw6rSA IOCkteCkv+CkteCksOCkow== vOGelA== IOC0uOC0guC0l+C1gOC0pA== IOu2gOyCsA== IOCkrOCkvuCkpOClh+Ckgg== 0LjQvNGL0LU= IHJlbMOodmU= IE5vdmFr emJ1cmc= INio2LI= IER1cmNoc2Nobml0dA== INC10LPRjNGL0YDSrQ== 0YrQvQ== IG5hYXRzb3Jz IEl0dQ== dGV2ZQ== dXN0aW5n INCx0LXRgNGW IOGDpOGDneGDnA== anVuYQ== IM6/zrTOt86z IHBzaWs= amVybmVy IHNpbWJh IGFjb21wYW5oYW50ZQ== IHZhcmlhbnRlcw== LWRyaXZpbmc= IGt1bm51 dG93ZXI= W3RvcA== 15XXoNeZ15nXnQ== IOC0h+C0qOC1jQ== IElRdWVyeWFibGU= YW50ZWU= Z2xpYg== 6auY57qn IHdvaG5oYWZ0 IHZlcmJy INCd0LXQvA== IGVyc2NoaWVu IGNhbmNlbGFy J8WT INin2YTYqtmC2LHZitix IG3DqWRpY2FsZQ== 0LXRgdGW0L3QtNC1 IOCqruCqvuCqsg== Lm9wdGltaXplcg== IENvdWxkbid0 IGdlYXJiZWl0ZXQ= ICksCi8v INGB0LLQsNC1 IHNlY291cnM= INqF2LHaqw== U2FtZW4= 56ym5ZCI IHJlY2liZW4= INin2YTYqtit2LE= IOCqquCrjeCqsOCqpuCrh+Cqtg== X2Jj Y2hpbGFy IOGAkOGAvQ== IEXEn2l0aW0= IGVuZG90aGVsaWFs b2xt INmF2K3ZiNix IFJlc3NvdXJjZW4= IHJldGFsaWF0aW9u IEVkZHk= INC/0L7Qu9C40YbQuNGP IGNyb2l0 IHRlbmRl 5Lqa5rSy5Zu95Lqn 15XXqdeZ IGNocm9tb3NvbWVz IGRlY2xhcm91 IGZyZWl3aWxs INWk1bjVrA== Z2Vyw7A= 5aWz5aOr Y2Fycmllcg== IFNjaHdlcnB1bmt0 X09QQ09ERQ== IFNHUw== 6aOb 77yM57uP INC70LjQtNC10YA= 5omr5o+P ZXTDqXM= INin2YTYqtit2YLZitmC IG1lcmtl IGRhcmtuZXQ= Qm9hcmRz IM6xzr3OrM6zzro= IEFsw74= INC00Y3RjQ== 5YmN5bm05beu INmF2LHYqtio2Lc= SW5saW5pbmc= JHN0YXR1cw== IOS4iuWNiA== IFF1aWx0 5Lit5aSu5YCk44Go44Gu5beu IHNpcnZlbg== IG1lbGhvcmE= IFNpbmF0cmE= INGE0LDQtw== IEthaXM= IENoZW1pY2Fscw== 4KS+4KSJ4KSo4KWB IOqwkOyCrO2VqeuLiOuLpA== IOCuruCviuCutA== SUdOQUw= LnBhcnRpdGlvbg== 4KS/4KSo4KWH4KSk4KS+ 4YCx4YCG LeGDqOGDmA== VG91dGVz INmF2KfYoQ== aXNla3Np b2x0w6A= IOOCtA== IHVzZXJuYW1lcw== IHNhbGl0YQ== IOGDoeGDkOGDrw== KG5vcm0= z4HOsc69 2LfZitio 4YOT4YOU4YOR IGZpbG1p 0L3QuNCz0LA= IENMRQ== w6l0YXRpb24= INiq2LTZhdmE IGVtcGxvaXM= IEtvcnRvbQ== 4YCV4YCt4YCv IGFpbGVz LWVuYWJsZQ== PFBhZ2U= UEFDVA== LmJlbG9uZ3M= IOCkneCkvuCksuClgA== 4LiE4Lij4LiH XFJvdXRpbmc= IGNhcnJlcg== IGFuYWx5c2luZw== IHZlcmdhZGVyaW5n IG1hcmNoZXM= 0JHTqdGC05k= IHNsYWNodG9mZmVy w6dhbWVudA== LlRvb2xz IGVzdHJhdMOpZ2ljbw== IGxlZ2Fkbw== IGliaW50dQ== 0YjQu9Cw YmVsbHM= bm9ybWFsbHk= ZXJ2aWNlcw== IOCmleCnsOCmlQ== 4LiB4Lil4LmI4Liy4Lin 0YPSk9Cw0L0= IFNhbWk= 54ug54ug5bmy 0LrRltC90YjRlg== IGJlZ2VsZWlkZW4= INC60YDQsNGX bGlnZ2VuZGU= INC30LXRgNC60LDQu9C+ IENlcnRpZmljYXRpb25z IHNuYXBjaGF0 INCW0LXQuw== ZGVjeWQ= 4LWN4LS2 IHBpbmFhZ2k= IG1pc3Rha2VubHk= IHZvcmJlcmVpdGV0 0YLRg9Kb IGJhcnRlbmRlcg== 0YLQuNCy0LA= J3VzZXI= aWN1b3Vz X2luaXRpYWxpemVk Z2Jl IOW6lA== IGJpb2RlZ3JhZGFibGU= Q29lZg== aG9wZWZ1bGx5 IHlleQ== IEdhcmV0aA== IElrZQ== 6ICB5pe25pe25b2p INC90LDRiNC70Lg= 4K+I4K6v4K6+4K6z 0J3QtdC0 IOCypOCyqA== 0LfRltC70ZY= LnNoZWV0 5Y2P5Lya IEludGVyc2VjdGlvbg== IEV4Y2x1cw== IGRhdWdodGVyJ3M= IOGDk+GDlOGDog== IE5j IGN1bWJlcnNvbWU= IGV4ZWN1dGl2bw== UmVzcG9uc2libGU= IGhhdXB0c8OkY2hsaWNo IHF1b3RpZW50 JzsKCgoK IGN1YWRyYWRvcw== IGjDtmNoc3Rl IENpw6puY2lh IG7DpHN0YQ== IGZpbGlw aXN1bW1hYQ== IHNpbmZ1bA== IHBvbWFnYQ== 55u45YWz5paw6Ze7 IFNwaWxs 4YOk4YOY4YOl4YOg4YOd4YOR 4Lib4Lij4Liy4Lii IHN0YWY= IE5vb24= c3dpZnQ= 6L+Z5qC355qE IM+MzrvOtc+C RWxlbWVudGFyeQ== xKdhYmJh IHN0b3V0 IHRyaWxs INGB0YLQsNCy0LrQsA== IHVtYXQ= ISIpCgo= IHpla2VyaGVpZA== 5YG356ql INGB0YLRgNC+0Lk= IOCypuCzguCysA== IHRpbmk= IHByZXZpc3Rvcw== 4YOQ4YOZ4YOa4YOY IGF1dG9iaW9ncmFwaHk= INin2YTZhNmK2YQ= IFRJRkY= IHN3aW1tZXJz IFN0YW1mb3Jk IGRldm9ubw== VURFTlQ= IGhvbmV0YW4= IFdZ IOycoQ== KioqKioqLwo= cmFhdA== YmVkcmlqdmVu YWRhaXJl IEVOQw== 6Z2W YWt3dW55ZQ== 7ISg7J2E IElnbmFjaW8= 2YjZhNmK2YY= IFVWQQ== 4Lil4Li14LmI4Lii IOq3nOuqqA== X0JMRU5E INi02K7YtduM2Ko= dXJpd2E= IG9tdA== UGN0 IHJlYWxpc3RpY2FsbHk= ZWRlbmtlbg== 4LCC4LCf4LGN IOCwpuCwv+Cwlw== IGZhcm1hY2lh TGV2ZXI= X0NBVA== dmVybWl0dGx1bmc= IGxlZXlhaGF5 z4TOrs+DzrXOuQ== w6RpbmVu IEluZ2xlcw== IGxhbmRl b29rYQ== YnJhbmNoZXM= IOCkl+CljA== ZGlzdHJpYnV0aW9u aWpw IG1lZXR1cA== IGthbXBlbg== X21hdGg= IHTDpGdsaWNoZW4= IHRlcnJpdG9yaQ== aXJlbnpl X3BjbQ== IHB1ZGVzc2U= INGB0YLRgNCw0YXQvtCy IGthd28= X0ZQ IGNyb29rZWQ= o78= IGNlbGVicmFkbw== INC60LDRgNGM0LXRgA== IGFjY3J1ZQ== LnJlcGFpbnQ= 4YOv4YOd4YOR IGNvbnRyYXRhY2nDs24= z4PPhM+Mz4POvw== IM60zrnOsc+Gzr/Pgc61 bMOkc3NsaWNo IG5hanZlxI0= IFJlc2Vydm9pcg== IGtlcnJhbg== IOGDoOGDneGDkuGDneGDoOGDmOGDqg== LXN1cGVy 4YOQ4YOv 0Z/RjNCw0YA= INCx0L7Rgg== 5a625YW3 IEVyaWNzc29u aW5jaGk= INmH2YbZiNiy UVJTVFVWVw== IHByw61w w6dpbmlu KHNraWxs INCX0LDRgQ== IEpvdXJuYWxpc3Q= IOGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlA== INin2YTYo9iz2YjYrw== INeR15PXqA== IOCknOCkvuCkleCksA== 0LDQttC4 LnJlZHVjZXI= fGAK IHRodeG6rW4= 4KSC4KSY 15nXqdeZ150= IGTDqWNyaXQ= IHRvdXJuw6ll IGVydXB0aW9u IGFtYcOn 7J207JeI64uk cmVxdWlyZW1lbnRz 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA IHF1ZXJpZG9z 0JjQlQ== IGNlbGx1bGU= TWV0ZXJz INGA0LDRgdGF0L7QtNGL YXZlbnM= IHNvY2lldGF0 5bm9 IEhXTkQ= IG1pbmVyYWlz Llpvb20= IOmHjeW6huaXtuaXtg== b2xvZ8OtYXM= aGVtZQ== cGFyaQ== 0YDQvtC90Lg= KHVz PVQ= dXV2b3E= IMO9ZXJkZQ== IGxsZXZhYmE= IHNob3ZlbA== IHRhaWxsZXM= IGJlb2JhY2h0ZW4= IFN3YW5zZWE= fiI6Ig== INin2YTZhNmR2Y7Zhw== IOCqleCrjeCqt+Crh+CqpOCrjeCqsA== 4LSF4LSk LXZlcnM= IG9neXN0YWw= 5rOV5Zu9 IOGDmeGDkOGDnOGDkw== IEZpbGluZw== 5rKi X0NIQVJBQ1RFUg== IE1hZ25vbGlh IHNlbnRpbWllbnRv IFNwaW5l IGx1Z2xpbw== IHJlcHLDqXNlbnRlbnQ= IGRpc2JlbGllZg== IHJvd2luZw== 44CL5ZKM IGJpbGxlZGVy IElBTQ== 55Sx5LqO cnlr INGB0LLQsNGO IHlhZA== IFhFbGVtZW50 IGJvdXRvbnM= 4LiE4LmJ4LiZ QHJldHVybg== eW5vcw== IE51Yg== TlNCdW5kbGU= IHVuaW50ZW5kZWQ= 4Kq/4KqT IEFsYmFuaWE= INii2LLYp9iv24w= IG1va2hvYQ== IFVucmVhbA== IGNyaW1pbm9z IGFhYm8= 0L7RgdC60L7Qvw== YmFydGg= amFhcnM= L3RodW1i KE1hdA== 5Z+O5Yy6 IGRlc2xpZw== 55qE5Y+R5bGV 4KS+4KSy4KS/4KSk IMW+ZW55 bGljYXRl YWhz IHbJmXpp 5pe25pyf b21pbmF0aW9ucw== IOCkl+CksOClgOCkrA== 2LjYp9mH2LE= IE5PVEVT cmF1dA== ICsKLy8= IGdlbm9j 5p+E IGRpZGFyYQ== IHJvc2VtYXJ5 IFl1a29u IGF0cm8= bHNl YXJhZGE= IOCkteCliOCkuOClhw== 4K6k4K+N4K6k4K6/4K6w IOCqr+Cri+Cql+CrjeCqrw== INi32KjZiti52Yo= IGNvcXU= 0YfQvdCw0Y8= T1JQRw== IGRvYsWZZQ== IHJhY2NvcmQ= IOCuqOCuv+CuseCvgeCuteCuqQ== IFRhbnQ= IOC0uOC1h+C0tQ== IExhcnNvbg== aW91 X0NPTkZJR1VSQVRJT04= YW1iYXJh YXJuaWE= IM60z4XPgw== X29yaWVudGF0aW9u IG5vaXJz IEFzdHJvcw== ZnJhbXQ= IOeOi+iAhQ== LWdhcmRl IGluZ2VybGE= INCQ0LzQtdGA0LjQutCw IG11bHRpbA== cGV2 IO2UvOu2gA== IHJlY2hheg== INC20LDRgNC00LDQvA== IGR1Y3Rz 5LiN5YOP SG9tZXdvcms= 1avVttWh1bbVvQ== LnJlY3ljbGVy LmxlYXZl IExFU1M= ZGlzY3Vzc2lvbg== IG51bWJlcmluZw== 4KSy4KWH4KSV4KS/4KSo 0Y7Rh9C4 JykuJw== 5pqu IEdhaWw= IE5hdHVyYQ== IOCkuOCkguCkuOCljeCkleClg+CkpOCkvw== IGtpZW51 4K+N4K64 PEFydGljbGU= 55u45q+U IEhlbWluZw== dWt5 IGluY2x1c8Ojbw== IG1hcsOn IGRldnJleg== LWJpbmQ= IOCkj+CkueCkvw== IG5qaWhvdmU= 0LDQvdGL0L0= IG9zb2Jl IGludGVybmF0aW9uYXV4 IG3EgWxhbWE= z4HOuc6s IOCqreCqlw== INC10LjQsdCw0YjRjNGA0LA= b3RyYW5z IGtpb3M= IOCypuCziuCyoeCzjeCyoQ== U2VsZWN0aW5n ZWt0aXY= IHNldGJhY2s= Zm9pbA== w6lnb3JpZQ== IHRy4bqjaQ== IGNyaW1lbg== IGNvbG9jb3U= INC80LDRgtGN0YDRiw== LlN0b2Nr INiq2YjZhg== IOCquOCqruCqvuCqtQ== 0LXQt9Cw0L8= L0dyaWQ= aWVubmE= IG1hcsOtdA== d3Vy IHNlZGk= IGJlemVs IOGAseGAkOGAvA== cmV0dXJuZWQ= IFBpc2Nlcw== IGNvbWJhdHM= IG9yZGFpbmVk INCx0LDQudGA IOCmleCni+CmruCnjeCmqg== IGt1bmRlbg== aWJvZHk= IE13YW4= IFNjaHJlaWI= IEJVSUw= IGRpc3Bvc2l6aW9uZQ== INmF2YrYp9mH IHVubWlzdA== 0LXQstCw0YA= IOC0ruC0sOC0v+C0muC1jeC0muC1gQ== 4K6/4K6v4K6+4K6p Lk1hcHBpbmc= IGRhcmdlc3RlbGx0 IFZpdHQ= IG9mZnNldG9m 4YOQ4YOT4YOY4YOh X0luc2VydA== INCz0L7QstC+0YDQuNGC0YHRjw== INem15nXkdeV16g= 0LDQu9C40L0= 4Kak4Ka+4Kew dGVsbGluZw== aXJhbmdv IEhpa2luZw== IHNvbGljaXR1ZGVz 44G+44GC QnVyc3Q= 4oCF LSo= IGVzY29uZGVy YmV0c2k= dGljYXM= X0VUSA== 4oCZVW0= IGFuc3BydWNo b3Jtw6FueQ== y5o= IFNFUklFUw== ouCwv+CwsuCxjeCwsuCxgA== IENhcmF2YW4= 4LWH4LS54LSC INCf0YDQvtCy0LXRgA== 4Kak4KeH4Kao dHJ4 IGludmVzdGlkb3Jlcw== IEJBTEw= 5aib5qiC IHZyYWlz IHRoaW5uaW5n IFRpbGJ1cmc= 4KSJ4KS4 IOC0quC0v+C0qOC1jeC0qOC1gOC0n+C1jQ== Q2luZW1h IGFzc29jaWF0aXZl b3Rvaw== QWNjdW0= IGFuZ2xlcnM= INCw0LrQvtC8 IELDrWJsaWE= IERj IGFnYmF5ZQ== dWVkZW4= INmD2YTZh9in INaB1aHVttWv1aHVttW41oLVtA== aWV0w6A= KHBt IGtvbXN0 KGd1aQ== IGZsaXBz IOCkn+CljeCksOClh+CkoQ== 77yI5LiJ IGlzdGljbWE= IG1vbnRhZ2Vt 5bCP5ri45oiy XENhdGVnb3J5 LmJvcnJvdw== IGFtYml0aWU= LlJlZw== UnVzaA== IHByw6FjaQ== 4Lii4Liw 4LiU4LmJ4Liy4LiZ INin2LPZhdio2YTbjA== IHByaW11bA== IGNhcm90 IHBhxYQ= X05BVg== IGtvcmJhbg== IERpY3Rpb25hcmllcw== RkZD IGtlaWE= CWZpbGVuYW1l IOCqleCqvuCqruCql+CrgOCqsOCrgA== IHZpc2libHk= w7RtZXRyb3M= X2hlYXQ= IOCyrOCzgA== INaF1aPVtg== IHBvbHlnb25z L2ZyYW1l 0L3QuNGG0LXQuQ== VGFuZw== SWtp INec15TXqA== IGRlc2FwYXJlY2Vy ICheKSg= IHR5cGlzY2hl zqPOtQ== aXN0YXQ= Lkxpc3Rlbg== INC30LTRlg== IHN1c3RlbnTDoXZlbA== ZGFlbW9u 4LWB4LSf4LWG4LSv4LWB4LSC IHTDvMO8 4pGk 0LHQsNC90Lo= IG5pZXZl IG9yZGluYXJpbHk= IEJhbGxvb24= INCw0L3QsNC70LjRgg== SW5ldA== IEluZmVjdGlvbg== IFB1ZmY= IHNvZnJpbWVudG8= KCk/ IGJveWE= IHByZXNlbnRhdGll YXlpdGhp INGD0YHQtQ== ZXJuYXRl IGdlbGluZ3Q= LWNlbnRyYWw= 0LrRltC80LXRgg== INCP0Yw= 4Kqh4KuH IOC0k+C0sOC1iw== IOCwmuCxi+Cwnw== IGZlZGVyYWxseQ== cHVycG9zZQ== KW9iamVjdA== RUpC IHdhemk= IHVuaW5zdXJlZA== bm1hbg== LlBhdGhz IEBf aXJjaGVu INGB0YPQvdGD0Yg= 5Y+N6aaI LlhQQVRI IGl2YQ== INmG2q/YsQ== IEJldHJhY2h0 LmB8YAo= IE5oxrBuZw== IOCkquCljeCksOCkpOCkv+CkleCljeCksOCkv+Ckr+Ckvg== IHRob3VnaHRmdWxseQ== 4oCM4LKX4LOG 4oCUeW91 IG1pc3VuZGVyc3RhbmQ= bWF0aGJm IHp4 JGdldA== IEhBTQ== 4LCC4LCn4LGN4LCw IFByb3Q= CQkgICAgICAgICA= 4YOa4YOU4YOh4YOY 6K+A56qN IHBvdXNzaQ== 4Kq44KuN4Kql4Kq+ INC/0YPRiA== Y2jDoQ== 4YOg4YOj4YOh IE1DQw== w61jw61jaA== INGC0L7RgNGA0LXQvdGC IHNhbmlhdGlndXQ= xI1pdXM= LmZldGNob25l 5a+555m9 4LWB4LSx4LSC bGVlY2U= IGJlcGVya2luZw== IGJ1cmRl IFNjaG1lcno= IFJhZGlvcw== IO2FjOyKpO2KuA== IHN0YWJpbGl6ZWQ= IE5TUA== YWphZG9yZXM= b2xldW0= aW5haw== INCf0L7RgtC+0LzRgw== 0LDRmA== IGRlZmluYXRlbHk= IEFydGlzdGlj IG5hc2Nl IHZlaW50ZQ== X0RJRkY= VkVT IGTDtm7DvMWf IGVsaW1pbmFkbw== 4Kqw4Kq/4KqV ZW1lbmRl 1aHVttaE1bjVvg== IExvc2luZw== w6luaQ== YW5vbQ== IOCyheCypuCzgQ== JyIpCg== IHVubWV0 IOCwquCwsOCxgOCwleCxjeCwtw== INi42Yc= IOCwuOCwreCxjeCwrw== IHVubmVjZXNzYXJpbHk= IM66z4zPg868zr8= IGRvcm1pdMOzcmlvcw== IOC0uOC1vOC0leC1jeC0leC0vuC1vA== IEV4cGxpY2l0 LkV4Y2VwdGlvbnM= IOCuh+CupOCuv+CusuCvjQ== IGFkbWluaXN0cmFy IOyekOumrA== X3N0b3J5 YnJ1Y2s= IGdhZ2Fs IERIQQ== IGJpbGRpcmli KCldLAo= IHNlcnZlaXM= IFByb2dyYW1tZXI= 0p/QsNC3 IG9yZGluZQ== dXVuYQ== IFDDumJsaWNhcw== INGC0LXRgNC40YLQvtGA IOWGheWuuQ== YnV6eg== YnVuZGV0 KGF2Zw== IHByYXRvcw== IHFt INWw1aHVtdW/1bbVpdWs aXB0YWJsZXM= QXrJmXJiYXljYW4= INK70LXRgQ== zrbOtc+EzrHOuQ== X2ZmdA== IHhpa29tYmlzbw== IHJlZ2lzdHJhZGE= 4Kaf4KeN4Kaf4KaX4KeN4Kaw INis2KfYptiy xYJ5bQ== IOCqpeCqpOCqvg== QXF1ZXN0 IPCfmg== IGRyZWFteQ== 4YOs4YOa ZXFlcnQ= IGRoZWVy 2KjYsdip IEN1bWJlcmxhbmQ= W3RtcA== IGRlcMOzc2l0b3M= IOCkueCkruCksuCkvg== IOCyuOCyv+CyqOCyv+CyruCyvg== IGthYmlyaQ== IGZyaXNr IFNhdGlu IFNodWc= IGluZ2VzdGVsZA== IGZlZGVyYXRpb24= IGNyZWRv Y29tcGV0aXRpb24= IFdlZWQ= IHJ0Yw== L21vZGFs IGV0YXA= IGRydg== IGFzc2F1bHRz LlByaW9yaXR5 IGdlbmVyZWxs 2KjYudin2K8= IG3DunNpY28= IGZhc2NpYQ== IGNvbmN1c3Npb24= IGJsaW5raW5n YWxtYXo= IGhhcnA= IEdhbHdheQ== RXJvdA== IGFzaW5n IGxsaWJyZQ== KlQ= c3ZvbGw= IENvbmdyYXRz IOCqnOCql+CrjeCqrw== 4Li04LiV4Lij IH19Ij57ew== OiIiLAo= 7LaU7LKc INeg15g= IOCkh+CkguCkn+CksOCkqOClh+Cknw== IFZhbGVyaWU= LkZsYWc= 16bXqNeZ15o= IENpdGl6ZW5zaGlw IM61z4DOuc67zr/Osw== IGZsb3VyaXNoaW5n 2LHYp9qp INqG2Kfbgdim25I= IEZ1c3M= IOGDneGDnuGDneGDlg== IGVyc2V0enQ= X1NUUlVDVFVSRQ== IFNrYQ== IDsNCg0K xaFlbmph IENoYXJsb3R0ZXN2aWxsZQ== IGFwYWNoZQ== IHNhd2E= O28= IHNjb3JjaA== LWVhcg== Lm9zZ2k= IGNsYXA= IH0sCgoK 0LXRgNCy0LjRgQ== CWNvbnRyb2w= IOCkleCliOCkrg== dHJlbWU= QU5ESU5H IHBlcm1pc3NpYmxl IHBvcnRhaWw= 4LmA4Liq4LiZ4Lit IHRhYXZh 0YLQvtGA0Lg= INC60L7QvNC90LDRgtC1 IHN0YXRlbg== IEx1bWk= IHl1cQ== IDwl IOCwjuCwtQ== IGZyYWdtZW50YXRpb24= LlJpYmJvbg== IGNoZWs= IEZsYW1pbmc= IGFjYWJhbWVudG8= INKb0LjRgdC40Lw= 4Ker4Kem 0L7RgdGB0LjQuQ== IFRhbWFy IOCmnOCmqOCmquCnjeCmsA== IFJFQURNRQ== IGhvc3BpY2U= INWh1oDVv9Wh1oTVq9W2 INeX15XXnA== 0YHQutGW0Y8= Vm94ZWw= IHpvbm4= IFJhZmY= 4piGCg== RXF1aXBl 4YCb4YCU4YC6 IEhvbGRlbg== 0YHQuNCy0LA= IEluZ3JpZA== VGhyZWF0 IHDDs8W6 XGU= IGRldGFpbGw= X2NvbGxlY3Q= LmNvbXBhdA== IHN3b2lt IFJvYm90cw== IOCkl+CljeCksOCkuQ== LnRlbg== IGp1bGxl IHVzZXJkYXRh IGxpZ2FtZW50 15XXqdeR INWN1b8= IFdldHRiZXdlcmI= IG11bGxl IOCwheCwquCxjeCwqg== INiz2YTZig== Tm93YWRheXM= INC30LDQv9GD0YHQug== KFByb2ZpbGU= IHBjYg== IEFjaGlsbGVz IOWNl+S6rA== IElDQQ== X3ZlcmlmaWVk IE5TVGV4dA== INCQ0L3QsNC7 XHY= IENhZGU= X2Nr In0KCg== VkVSVElTRU1FTlQ= 55u06JCl572R IGNhcnJlZ2Fy Z2VzY2hvc3M= INC60YDQtdC00LjRgtCw IGt2YQ== 57at IOCkrOClieCksuClgOCkteClgeCkoQ== X2Z1bmNz Lk5vcm1hbGl6ZQ== VmFjYXRpb24= IGNow7NuZw== IOmmmea4r+i1m+mprOS8mg== IEJyZWV6ZQ== INC30LDQstGC0YDQsA== YXJyaWVz IHByb2PDqXM= ZXJkYXM= IM66z4HOrw== 4YOd4YOZ4YOY4YOT IENNRQ== INin2YTYtNix2YLZitip 44CA44CACgrjgIDjgIAKCg== IEV1c2thbA== INGA0LDQt9Cy0ZbRhg== INiu2YjYp9iq24zZhg== VXNlcmlk INC20LDRgdCw IOCmruCmpOCnhw== ZGF0YXNldHM= aXphZG9yZXM= INmF2K7Yp9i3 IG1lbW9yYW5kdW0= dW5iaW5k KGJhbGw= IGFhbmdlZA== cGhlc2hl IOOBleOCkw== IGNvb2t3YXJl IEV2ZW50b3M= IHJhbWlmaWNhdGlvbnM= ZW5naW4= IGdyYXR1aXRhcw== 4oCcRWw= IHNhaGli IOColeCpsA== w590ZQ== IGluZXhpc3Q= 5bm05Lul5LiK IOW8tw== IENSVA== IOyngOuCmA== IGFhYQ== 4Kaj4KeH a2VocnQ= IHZlbmVlcg== SURD IE1JU1M= IOCkh+CklQ== IHByZW5kYXM= IOCmrOCng+CmpuCnjeCmp+Cmvw== IElSZXF1ZXN0 J109Ig== IGdhbWl0aW4= IGNvbW1lbnRlcnM= Q3lsaW5kZXI= IFNpdHVhdGlvbmVu IEVOVFJF IGRyb21lbg== INGB0L7Qv9GA0L7RgtC40LI= IHNwcmFr INGF0LDQsg== IFZlbmV0bw== IHRpZXRlbg== 4Kyz IGdlc3RvcmVz INm+2YjYsw== IEl0aA== QcOHw4NP IFNpbXBzb25z IFVuYXJ5 fGdldA== 4YOU4YOg4YOY4YOQ UmVhY3RpdmU= UmlzZQ== IGNoYXVmZmU= 2YfZhdmK2Kk= LlNpZ25hbA== IEFyaXN0b3RsZQ== IOCwquCxjeCwsOCxh+CwleCxjeCwt+CwlQ== CQkJCQkJCQ0K 2YLZgQ== LkVtaXQ= LlByaXZhdGU= KCkNCg0KDQo= 6IO2 IOC0pOC1geC0n+C0sA== bmlsYQ== INir2KfZhtmK LeWbveS6pw== INCy0LzQtdGI PUw= INC/0YDQtdC00YHRgtCw0LLQuNGC0LXQu9C4 IE1hbnVz 4KeB4Kaw4Ka/ Z2V2YWxsZW4= 2LjZhdin2Ko= eWts dW5kYW50 IG3DqW5hZ2U= X1NMRUVQ L2pvYg== IOCqueCrgeCqrg== IGltb2JpbGk= IEZFTA== IFN3aQ== IFNlcGFyYXRvcg== X2ll IENhcnk= V2lzaGxpc3Q= dGhlcmFweQ== TnVuY2E= dXZpYW4= IOCkmuCkv+CkguCkpOCkvg== IHRvcm5hbQ== INC80L7Qu9C+0LTRi9GF X3dlYXRoZXI= 2b3Zhg== QmFyYmFyYQ== 0LLQsNGA0LA= UGFwZXJiYWNr IGNvcnRpYw== IG9kcG9y IEF1c3NpY2h0 LnJldHJ5 QVRM INin2YTZgdmG2K/Zgg== INC10qPQsdC10Lo= IEtvdw== UmVjYWxs zrPOrs+C IEFGUg== IGNhcGlyZQ== IHDEgcq7YW5p KeydgA== 2K7YqtmK2KfYsQ== IOuCmOudvA== INee15nXldeX IHRlbmRlcm5lc3M= INCX0LDRgA== RGlhcw== IGRldGVuaWRv IGNvc3RhdA== IHlvxJ91bg== 2LHYs9mE IGFybg== IGF5dWRhcnRl IGbDtnJi IFNpbmhhbGE= 0LLQvtC90L7Rhw== IHZvZGE= IGRpc3BvbmliaWxpdMOp IGNvbGxhcHNpbmc= INWv1bA= dmVsc2U= cGxhc3M= IERldGFjaGVk IOCkquCksOCkv+Ckt+Ckpg== Y29tcG91bmQ= Zmlmbw== INCy0LjRgdC+0Lo= R3VhcmFudGVlZA== IOCqheCqruCqvuCqsOCqvg== IHBlcmnDs2RpY28= a3NlbA== INC/0L7QvNC+0LPQsNGO0YI= L2Ft xKt0YQ== aXlhbmk= INGD0LLQtdC70LjRh9C40YLRjA== 4KS/4KSB IOCmuOCmqOCnjeCmpOCmvuCmqA== INin2YTYrNmH2KfYqg== IGF0aw== IGdhcmRlbmVycw== IEVsZW1lbnRl aXNzYW1paw== IGNvbnRlbmVy INC00YDRg9Cz0YM= X1JX 4KWL4KSf4KWA IE11aGFtbQ== IOCmj+CmsuCmvuCmleCmvuCmsA== CQkgCQ== 4LOI4LKo IG3DpG5uZXI= IGplc3RlbQ== IOCmk+CmoA== IFNsb3ZlbmlqZQ== RGF0YXR5cGU= IHJlc2Vw IHB1YmxpY2lkYWRl d2Vla2RheQ== 44O844Ov INmK2LPZhdit 55qE5paw IGhhYmlsaWRhZA== IEhPVEVM IHBlY2M= IOC4peC4reC4leC5gOC4leC4reC4o+C4teC5iA== IFt7fQ== IG1lbnllcg== IHBhc3NhdG8= aXNibg== IHR3ZWV0aW5n IHVzYWI= RHJhZ2dlZA== Snk= IHdlc2hhbGI= UGFyYXM= KCdALw== IGhlaXJz IHJpY2hseQ== IEZvbGV5 IGhldGVyb3NleHVhbA== 0JHSsdC7 IExhY3Q= aW50ZXJzZWN0aW9u IFBhZGRsZQ== YWdpeWU= IG5qaW1h 4YCB4YC74YCA4YC6 QXN0cg== IOCkheCkleCljeCknw== IGF0b3JmaW4= 5Za25qWt5pmC6ZaT IHNpYXBh IG1hdmp1ZA== INCw0YXTmdGL0rfSm9OZ0LA= INin2LPYqti3 IGZlcm8= a2V5ZQ== PWN2 4YOY4YOu4YOY4YOa IGVyZ2Vy IHNhbml0YWlyZXM= IGRpdmVydGly dWNoZW5nZXQ= Z2FuZ2F0aG8= IHBow7p0 IOCkheCknQ== IEVyaW5uZXJ1bmc= INeX15HXqNeU IOCkrOCksOCljeCktw== IF07DQo= INGD0LHQtdC2 INiu2KjYsdmG2q8= IEluc3BpcmU= IGlubm92YXRpZQ== IFJlc29sdmVy IFNwb25nZQ== YWNjYWxh aWF0aW5n IGZhYWxpeWV0 IFBoYXJhb2g= 5q2k5qyh IHRyb2s= 5Li4 IMWha29sZQ== YWppZW0= IE1PT0Nz IGJhbXdl IOCymOCynw== IOCkleCksuCkvg== INec16nXnA== IE1hcnJha2VjaA== IHNlbWluYWw= IHNlY29uZGFpcmVz INOZ0LzQvNCw IHBhbmdhbg== INCw0L3Rgg== INGC05nRgNOZ0ps= X2xhdW5jaGVy 4Kas4Kay IOCkteCkvuCkueCkqA== IGNoaWxsaQ== INeQ15XXnNed bGVncmE= INin2YTYqti6 LlN1YnNjcmliZQ== IG1lY2hhbmljYWxseQ== IG9kYW0= INGC0LDRgNCw0LE= 4K6f4K+B4K6u4K+N IOCkleCksOCkow== KGZpbg== IGV4dHJhZA== RWU= IEdlc2Now6RmdHNmw7xocmVy IHZlbmdh 4LiE4LmI4Liy YXV0aW9ucw== 16HXqA== IGNvbnZleXM= IERvbGNl IOCuleCuvuCupA== V0hZ IE9ueWU= IHRlcmVtb3M= 4Kaj4KeN4Kav IGZpYnJv QU1QTA== c3RhbnRpYWw= 24zYr9uB IHF1bA== IEJlcm5hcmRpbm8= IEh1aQ== KXBhcmVu IOCkhuCkr+Cli+CknOCkqOCkvg== Q0FDSEU= Q0NJw5NO INC/0YDQsNGG0YM= 4LmE4Lin4LmJ xZg= IGluaWNpb3U= INCa0YPQvw== IGFhbnZ1bGxlbmRl IHN0YWZmZWQ= VHJpcHM= QWxnb3JpdGhtcw== INio2LPZiti32Kk= 0L3QvtGA aWZ5c2dvbA== IGRlc2NyacOnw6Nv KExpbmU= 0LHQtdGA0LjRgtC1 acOrbg== IOCwmuCxh+CwpA== dW9u b250d2lra2VsaW5n VGhv IOyXreyCrA== INil2Yo= IENPUlBPUg== VHJhbmc= LWNvbnRhaW5lZA== X2Zhcg== KFByb3BlcnRpZXM= IGjDoWJpdG8= 44CB55Sf INGC0LXRgNCw0L/QuNC4 IHXEjWlua292 6JCM 0YDQtdC80LXQvQ== dW5lbmU= IOCknOCkvuCkuQ== INC/0LDRgNGC0LjQuA== IHNwcsOlaw== 4KSn4KS/4KSV d2lzdA== aXJtd2FyZQ== IHJoeW1l IFRldGFwaQ== IGZvcm5lY2U= QmxpbmQ= IO2PkA== IGdhbmdh dW5laQ== IEFUSA== IEN1dHRlcg== LnN5bg== IG5vdG9yaW91c2x5 YXRvag== IHRyxb5p 5Zyf5Zyw LlRyYW5zZmVy IEVuY291bnRlcg== IOCmheCmqOCngeCmrg== 4oCZaW1wb3J0 Y29udsOpbg== 0L7QstC+0LvRjA== IER1dGVydGU= IGVzY2VuYXJpb3M= 5LuK5pel44Gv Z3JhZGluZw== IOWkjw== IOWNmueJmw== IGxldmFkbw== 2KfYs9in2YY= aHl0aG0= IGJydWt0 INeR15DXlteV16g= Q2hpbXA= 5aSp5aSp5aW95b2p56Wo 4LOM4LKy INC40LTQtdCw0LvRjNC90L4= IHNhb2w= KHNob3A= IOWkp+WPkeW/q+S4ieWmguS9lQ== IG1ldGF2 INin2YTZhdiq2YjYs9i3 INqv2LDYp9ix24w= IGF04buN IOCkl+ClgeCko+CktQ== IFN1bW1lcnM= UEVM IOCwheCwteCwuA== IEJsb2NrbHk= JGpzb24= bmVlbXQ= IHBhdmlsaW9u 4YOU4YOR4YOQ4YOQ LkRldg== VUZBQ1Q= IGR1cmF0aW9ucw== IFBsYXlib3k= aWxpc3Rl IGRvbWluYXI= IHRoYWl2 J3dpbmE= IENhc3RlbA== IHNhbWxlaWU= 44GI44Gm ZW50aGE= YnVu IGRldXRzY2hlcg== IEZBTg== IENPTVBMRVRF INGE0YPQvdC60YbQuNGO IFJUUw== IG5lY2Vzc2FyaWFtZW50ZQ== IOCkleClh+CkguCkpuCljeCksOClgOCkrw== IHZvaXNp 4K6/4K6Z4K+N4K6V IOWFiw== INC40LU= eXVhbg== IOuVjOusuOydtOuLpA== bm9sb2c= IG7DoXY= LmluZw== b3V0aQ== IG1lZXJkZXI= L3JlbQ== IOCkteCkoeCkvg== IHZvbG9udGFpcmU= w6FpbHRl INC00LjQsNC80LXRgg== IOmmmea4r+WFrQ== bGF0ZW4= IHByZW5hdGFs IEthcmF0ZQ== bmF0dXJl INC/0LDRgNCw0LzQtdGC0YDRiw== QmVraWpr IFPDoQ== YXVhbg== IGxsZWdhbmRv IOCmqOCnh+CmpOCng+CmpOCnjeCmrA== 4oCdIQ== LS0tLS0tLS0tLQoK am5p 4LKX4LOC INec15XXnteo 2YPYp9iq2Yc= IGtpcGluZGk= emFhbWhlaWQ= QW1vdW50cw== IGFpcmZhcmU= 4K+L4K6w IGdhcm90YXM= IHNhc2g= bmlsYWk= IGNhbG9u PXJlc3VsdA== U2VndXJv IENoYXJkb25uYXk= INCx0LDQs9Cw IE11bGhlcmVz J8OpcXU= IGNvbXBhcmFpc29u IOCkrOCkvuCksOCkv+Cktg== INiw2YXbgQ== 0JrQsNGA IHNoYXZlZA== IGRvcnNhbA== dnJvdXc= zrPOvM6xz4TOsQ== PEJveA== INCc0LXQttC00YPQvdCw0YDQvtC0 xLFzxLFuxLE= LmV4cGVyaW1lbnRhbA== R2FuZw== IFNFTlQ= IHNlZGVudA== 4oCTCg== YXJqZQ== X3BhY2tldHM= 4LK14LK44LON4LKl IFJlemVuc2lvbg== IHNhbmRhbA== IHlvc2g= IG9iZWo= IGVxdWl2b2M= b21lbG8= IGV0ZGly 55qE5L+h5oGv INGC0LDQsdC40pM= IOC0teC1iOC0sQ== IOe0q+mHkQ== IG1vam8= LkZPTlQ= IHJlZHVuZGFuY3k= INKb0LDRgtC90LDRiA== IM6xzr7Ouc6/ 15zXmdeb 4KeN4Kas4Ka+4Ka4 IOWkqeWkqeW9qQ== IGV4cHJlc2E= IHZvc3RyZQ== IOy1nOqzoOydmA== Ol0KCg== IE5hZGF0 IOGDoeGDkOGDm+GDp+GDkOGDoA== V3A= YWNoZW1lbnQ= IGFsbGFudXQ= 5omA5b6X IHNhc2U= LkJPVFRPTQ== 06nQvdGM0Y8= IElTU1VF IOyghOunnQ== INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtGM cmV0aQ== LiIKCgo= 1aHVttW41ak= LmhvdGVs ICMNCg== IOGDnuGDlOGDoOGDmOGDneGDk+GDqOGDmA== IHByZXNzdXA= IOCupOCuv+CusQ== INGN0LrRgdC/0L7RgNGC X2RpcnR5 LmFkdmFuY2U= IG1vbnRhZ25lcw== IGJpbGly b2NpYXppb25l IOCupOCvgg== 6Ieq6Lqr IERvY3VtZW50YXJ5 4LGG4LCh IHByb2R1Y2VyZW4= IGhvdHNwb3Rz 0ZHQtg== INC80qnQsNSl0YvRgQ== IGNlc3NhdGlvbg== IOCyqOCzhuCysA== IE9tZQ== KCQoJy4= bmF0aW9u LG9iag== KGNsaQ== 4LK/4LKm4LON4LKn IHBvbmRlcmluZw== 0LLRltC0 X0dQVQ== IHJlbw== 0L3Ri9C90LTQsA== 44OB44Oj IGtldHQ= IOyVhOumhA== 2LbYp9i5 IGJpdHRlcnM= 4LSk4LS+4LSv4LS/ aWJpdA== IGRvbnV0 IHByb2PDqWTDqQ== IS4K IGF2cg== IOC0pOC0vuC0tA== RGVkaWNhdGVk IHNwZWNpYWxpc2Vz cGVyc2lzdGVudA== IOCwqOCwv+CwtQ== c2NodW5n IHJlYWNjaW9u IGdlc3Byb2NoZW4= IE5nYg== IEhhc2Fu 4YOe4YOg IFJpZg== ICR7Cg== 64u3 IM6gz4HPjA== YXJlcg== IGFjdHVhbGl0eQ== IGFuZ2VwYXNzdA== IG1heWRhbA== CUNvbGxlY3Rpb24= IGRpbsOhbQ== IFNlZGE= bGFzc2ljYWw= IGdpZGVy IGVudGllbmRv 4Lii4Liy4Lii IHByb8SN LkNyaXRlcmlh IGNocsOpdA== IFByb21z QWxyaWdodA== aWxoZQ== IMOibWU= 4K6k4K6/4K6y4K+N 6Zeo5oi3 YW5pd2FuZw== c3BhbQ== CUV4dA== 0L7RhdC+0LY= IGludGVybWlu ZGFr IOCwruCwvuCwpOCxjeCwsOCwruCxhw== KCcsJw== X1BFUkNFTlQ= INio2KfZhNmC2LHYqA== YXNlbA== Z3ls dmVydHJldA== X2lkeHM= 44Oq44Ko INis2YrYptmG ZGV0YWxsZQ== IG11bHRpcGxleA== b2Npb3Vz IHdhY2hzZW4= YXh4 dW5jZQ== IGFmbGE= dGFp J2FuY2llbg== Q09MVU1O 7KeA7JuQ 6ZSA6YeP IEphbW11 4K6u4K+N4K6q4K+G Vk9JQ0U= 15zXnteZ15M= IGNhw6dh IEdhcmc= IOCmruCngeCmuQ== aW1wbGljaXRseQ== J3Bvc3Q= IOCyuOCzguCymg== IGRpc3Bvc2l0aWZz 4YCb4YC94YCt IkJ1dA== YXJzdWFybWk= d2ludGVy LkFkYW0= aW9h IGNvbGxhYm9yYXRpdmVseQ== IOC0quC1guC0sOC1jQ== IOCnseCmv+CmlQ== IE1lcmlkaWFu IEFuY2hl IEJoYWc= U2FsbGU= LVBhcnQ= 4K6Z4K+N4K6V4K6/ IGd3cg== KGJpdHM= w6Fkeg== IGN1w6FudG8= IG5lamVu IHJlaW1i aWxtacWf LXNvbmd3cml0ZXI= IGNhdGFsw6A= KENz IOCkoOCkvuCkieCkgQ== U2hhZGU= IEtyYW1lcg== IGJydWthcg== IHdyb25nZnVs IGRhbGVq Z2Vw INGE0LjRgg== IEFib3J0 INio2KfZhNio YWNy INCe0LHRi9GH0L3Qvg== IGFwdWQ= IHlvcmRhbQ== IGFpbWV6 IGzhu5dp IOC0h+C0rw== LkF0b2k= YXNzb2NpYXRlZA== INeR15nXkw== IOCkmOCkvuCknw== bmFhbg== IFNlbmlvcmVu IGhva28= ZmFjaWxpdHk= 656r7Y+8 IGluZGVudGF0aW9u IG1vZ3XEh2U= IOyVlQ== I2Rv IEtvcm4= IM+Az4HOv8+Dz4TOsQ== Y2FyYm9uYXRl IE1lZGU= w61uZQ== INin2YTZhdmD2Ko= YWxmb3JtZWQ= IOC0leC0tQ== IGtlbWVudA== QEJ1aWxkZXI= IG9zY2lsbGF0b3I= IHJhbWFz IGVtb8Onw7Vlcw== IHRoaXJzdHk= IHN1cGVybWFya3Q= 4buNZOG7jQ== INC/0LjRgdCw0Ls= b250ZWVyZA== IG9iamVk IFNJTVBMRQ== Z29uZw== Lk9VVA== 0LTQvtCz IGdld2lzc2Vu IGRpc2NyZXBhbmNpZXM= IOCkpuClh+CkluClh+Ckgg== INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGC IHJlZ29s z4zPhM63z4TOtc+C 5Luy IGZvcnNramVsbGlnZQ== IHPhuqFjaA== Z2FuZ3NwdW5rdA== 4oCZaW50ZXJubw== IM+Azq4= IG5nb24= cm91dGluZw== IGRpc2XDsWFkb3I= INWs1oDVodWj1oA= ZW5nZXJh IENydWlzZXI= IENhbWVyb29u IOCksOCkv+CktuCljeCkpA== IEVyd2VpdGVy cGFnZWQ= IOCmpuCmvuCnn+Cmv+CmpOCnjeCmrA== IHJlcGVyY3Vzc2lvbnM= aXB0aXI= SE9M IOCkl+CljOCksA== INC00L7QsdC40YLRjNGB0Y8= 4YOY4YOa4YOY4YOX UG9seWxpbmU= 0KLQoA== IOCksOCkv+CkuA== IOC0seC1hg== IGJyaWxsbw== IENoaWh1YWh1YQ== IGN1bHR1cmVsbGU= 7Y60 IHBvcHV0 INCx0LDRiNKb IGZsZWV0aW5n bW9uYXJ5 IG9sbWF6 c2l0dQ== REFS KGV4dHJh L2NoYXJ0 dXBk IGNvbmZpcm3Dsw== KGRs IHJhbWJ1dA== IGZvcm5lY2Vkb3I= IFlvbA== 0rfQutOZ0YvQvQ== INeU15DXnNeU INKb0L7QudKT0LDQvQ== IE1vcm8= IFNjaGF0dGVu Y2Fycnk= IENEQQ== KElt 4LKc4LK+4LK1 IEFjY291bnRhYmlsaXR5 dmllcm5lcw== eW1jZQ== IE1hcnRl VEVN ICk7CgovLw== IHZhamFsaWs= IHNhdHM= aW1hYQ== b250ZW4= INC+0LvQsdC+0YA= IM6xzrPOsQ== IGNvbnRlc3RhbnQ= IGRpc21pbnVpcg== IOWMl+S6rOi1m+i9puWls+mDjg== U2luZ2xlcw== IE1pcmlhbQ== INmF24zYqtmI2KfZhg== INmI2YHZgtin Y29sbGV0w6k= YW51cw== 5biQ5Y+3 IENoZXNhcGVha2U= IFRFUw== IOCkneCkvuCksuCkvg== 5LiK5pig cmV0bw== IERhbWFzY3Vz IHNhdmV0 5pW05L2T IOC2heC2sQ== INCe0YHQvtCx0LXQvdC90L4= IHphxI1uZQ== IEJ1bmRlc3JlZ2llcnVuZw== IGRlaXJlYWRo INeg15XXqg== INiz2LHar9ix Lm1ham9y IG9yZ2FuaXphdGlvbidz 4Kaw4Ka+4Ka34KeN4Kaf4KeN4Kaw YWN0w6lyaXN0aXF1ZXM= aXNpcmE= INij2K/ZiNin2Ko= b3VpbGxl bGFp IFRoZW9sb2d5 IEZyZW4= IFViaXNvZnQ= X1RSQU5TTA== b2x1YQ== X09QRVJBVE9S w7Rzb2I= IERyb2c= aW91bg== X3NlcmlhbGl6ZXI= IGFjZWl0YQ== INiv2LHYrNin2Ko= L2Rvd24= IG1pbnV0ZXI= ZGlzY2FyZA== IFNjYXJsZXR0 IHJlc3RhcnRlZA== IOCwt+CxguCwnw== IFBTVQ== IHByZXbDqg== IG5naGnDqm4= INC/0YDQvtGI0LvQvtCz0L4= PXBk ICd7fSc= 5L2j Y2V0 IGVua3VsdQ== IOyYge2WpeydhA== INin2YTZhdit2KfZgdi42Kk= IOCmheCmleCnjeCmn+Cniw== 1L4= Pjs= IFBvbGl0aWtlcg== IGRpZWxlY3RyaWM= IFByYWRh IOCkluCkvuCkpOCkv+CksA== a8Or 5LiJ5pif CXVz IE1vbGw= IE5SQw== IGF1dG9ub23DrWE= UVJTVFVWV1hZWg== YXJpaA== LUdlcm1haW4= IHN3aXNz cmF0ZWQ= 0LPQvtGC0LDQstC70Lg= IHBhcsOhbWV0cm9z UGllcnJl IGZvcm11bGllcg== W2FycmF5 IEluY2hlcw== X09iag== IG5vdXJpc2g= IOC0reC0sOC0ow== INWh1b7Vvw== IGdhbm8= QnVr IOC5gOC4reC4n+C4i+C4tQ== IENMT1VE IOCktuCksOCkvuCkrA== aXNlc3TDpA== QWxpZW4= IEJyZW0= IFNlbnNvcnM= IHByw6l2b2l0 IGNvbnRyYWlyZW1lbnQ= b3ZuZQ== IHluZA== b255ZXNoYQ== 44KC44Gh44KN44KT 2YjZgtmK2Ko= UXVhbnR1bQ== IOCwleCxgeCwrg== IGNoZWdhcmFt IGNvbmZ1bmQ= IOCuquCuv+Cunw== YW5kZWxheW8= IOGDkOGDk+GDkuGDmOGDmuGDluGDlA== INGA0LXQsNC60YbQuNC4 IGJhcmtpbmc= IGJ1bGxwZW4= INC90LjQudC7 IE11aXRhcw== INC+0LHRgdC70YPQttC40LLQsNC90LjRjw== cGF3 0KLRiw== 4LK/4LKv4LK+4LKm 5bel5ZWG IOCuteCuv+Cun+CvjeCunw== INC10LjSmw== INC00L7QsdGA0L4= IOCwtuCwvuCwlg== 4LS+4LSw4LS+4LSv IOCknOCli+CkluCkv+Ckrg== U2F5YQ== IHNjaW50 IGt2ZWxk IOWkqeWkqeeIseW9qeelqOaPkOeOsA== L1R5cG9ncmFwaHk= IHNpbWlsYWlyZQ== IGTDpXJsaWc= IGxhdXRldA== INCy0YXQvtC00Y/Rgg== IFV0aWxpemluZw== INC40L3QstCw0LvQuNC0 IGxhw715aw== CXJhbmRvbQ== IHVuacOjbw== IHV1ZGVu 0KvQnQ== IM61zq/PgM61 54us6IOG 0LDQutGC0LU= INGD0LLQtdGA0LXQvQ== IEFGTA== RGlubmVy 4KWn4KWt IHRvdWpvdQ== IHZpbnRl IGNlbMO9 h4w= 15XXoNeT16LXqA== INin2YTYt9it2YY= c3RlaGVuZGVu X19b aWNpamU= 4Ka/4Kav4KeL4KaX 2YXZitiq IOW+ruS/oeS4iueahOWkqeWkqeS4reW9qeelqA== IGZyZWN1ZW50ZXM= X0FSUk9X INeQ15zXmdeV IEdhcmNpbmlh IEZyYW5rZW5zdGVpbg== 55CG6Kej IMOhcnZvcmVz PVtdLA== Q3Vz IGbDuGxl IOGDoeGDkOGDkOGDmQ== 4LmA4LiH4Li04LiZ4LiI4Lij4Li04LiH IEdydW5kZQ== IOWvnw== IENlcnI= IOCmuOCmvuCmueCmvuCmrw== IERvbGx5 IOCypOCzgQ== IGFubmFi IHRyYW5zbWV0dHJl CXByb2dyZXNz IGJpcm7DpA== YWxpaA== IGFkbWl0dGVkbHk= TUlT zrfOuM61zq8= INC60q/Quw== ID8/Cg== dXRhYg== IGZpc2hlcw== IGx5cmljYWw= 0L7Qs9GA0LDRhNC40Lg= IEV2ZXJ5d2hlcmU= U2tpcHBlZA== ZW5za3k= INin2YTZgtmK2YXYqQ== IGNpdmlsaXphdGlvbnM= INC+0YHQvdC+0LLRiw== IHN0ZWFtZWQ= IE51ZQ== IEVjb2xvZ3k= IOG7jWfhu6U= Li4/ IEZvbGtz IOGAgOGAvA== IHNvbGljaXRvcg== U3ls aXNobHk= LWxldA== IOyYrOudvA== w4FSSU8= IGxvZGdlZA== IEV1cm9wZW8= INin2YTZhdik2LPYs9ip 4LK/4LK44LK/4LKw4LOB4LK1 V2Q= IG5ndXk= KFJlc291cmNlcw== INGN0LrQvtC90L7QvNC40LrQsA== IENyw6lkaXRv IG3DoG4= IOCwqOCwvuCwr+CwlQ== 0LHQtdC5 4LS+4LSm4LWN Lm92 IHNuYWls IGhvc3RpbGl0eQ== IGdlZmVydA== dWJhdWVu IFR1cmlu IERyaXZlbg== IGl3bw== IOCkpOCljeCktQ== IHR3ZW50aWVz KEVWRU5U TklDQUxM IGF0dGF2ZQ== IG1iZWxl LlNoYXBlcw== IGFudw== 5oSf6KeJ ZmVldA== YmF0aW0= IEphZ3U= ZWtheW8= X2ZlY2hh IEVzdHVkb3M= IOi0neWNmg== IGF3b3Jhbg== RkND aXJlYW1o IE5haWxz VW1i IG91dHNpZGVycw== RW50cmFuY2U= fV0s IG5nZXJ0aQ== IEVQTA== YWx5aw== IGFuZ2xlZA== IHVuaGFz IG1laWRlbg== IHJlcHVibGlr IGZsYXNoeQ== LWxhd3M= 15zXmg== 4Z6A4Z624Z6a 4Ki/4Kmw4KiX IGVudHJhbmNlcw== LW9r IEZMRVg= IGtyZWRp YWZhbg== INGG0Y3QvdGC INio24zYqg== IHNwZWljaGVybg== QnJhdm8= 77yl IEdld2lubmVy IGNob3c= IOWMl+S6rOi1m+i9puWGoOWGmw== INCy0YDRg9GH 4Lir4Lin4LmI4Liy4LiH 6bKB5aSc5aSc5ZWq 4Z674Z6b I2Fm IOuUsOudvOyEnA== IOaYk+S5kA== IGNvbWVjZWk= INin2YTYudin2YTZig== INWl1oDWhw== L3RlbmNlbnQ= IFRyb3R6ZGVt INGC0LXQudC10Yg= X1VOTE9DSw== LGxpbmU= IHNsaW1tZQ== IEdyZW56ZQ== SW52aXNpYmxl INee15XXlw== INil2YXZg9in2YbZitip YXJtb24= c2ltcA== 5Lmd6b6Z LmV4ZWN1dG9y IEFuZHJlcw== INGP0LrQuNGF IHJlZHV6aWVyZW4= X0NITw== IExpc8Oka3Np 5aW95ZCX IGNvbnRlbXBsYQ== IGlybw== IHZpcmU= IG1ha2xpaw== X2xlYXJuaW5n INuM2YjYp9iy25A= IFVyc3BydW5n KGZvbw== 5pKS 4YOY4YOg4YOT4YOQ4YOe4YOY4YOg IOGDoeGDkOGDpeGDkOGDoOGDl+GDleGDlOGDmuGDnQ== 0YbQuNGC0LU= cmF3dHlwZXM= IGJhcmF0YQ== YWRlcm9z IGFsY28= YmluYW50 IGt1bGF5 INWk1aHVv9Wh1oA= 4LiK4Liy IHTDoXI= 44Gu5aC05ZCI IHByb2R1emlkbw== Q2xhbXA= IENSQQ== IEtvb2w= IGNvbmRpY2lvbmFkbw== Qm91 YXp3ZQ== INix2qnavtin YXJwYWE= IFN1bGU= IOGDpeGDmw== INmB2KfYpg== IG9sdW5hbg== IGRlZm55ZGQ= IGZlZWRlcnM= R2x1ZQ== IEV4ZXJj IOC0ruC1geC0uA== IEZvbmRhdGlvbg== 4oCd77ya INC70Y7QsdGP0YI= IGJpdGFtaW5h IOGDnOGDkOGDm+GDk+GDleGDmOGDmuGDkOGDkw== IETDvG55YQ== IGNvZmZlZXM= aHdh INin2YTYpdir Iten IG5pdHJhdGU= IFZvbGNhbm8= IGdlbGllZmVydA== IOCkquCljeCksOCklQ== 1ZM= IOWbveWutg== IFBpbQ== IO2ZqQ== INKb0YvRgQ== IOu5qA== INi32LE= wrdsYWJvcg== IFJlc3BvbnNhYmxl IOGDoeGDo+GDoOGDlQ== dGln 2qnYp9mG2KfYqg== IOKAiwoK INCf0Jo= IGtpdGVh Ki8p dGFrZW4= d2lsaQ== IOuwqe2WpQ== 77yR77yW IOCwieCwpOCxjeCwpA== IHVkYXJh INec15HXl9eV16g= KGRlY2ltYWw= INGB0L/QsNC0 IHVuc29saWNpdGVk Km91dA== 0YfQuNC705nRgA== 4oCmKSw= IOCkteCkv+CknOCkrw== IHJvYmJlcg== IE5pcw== IHByb3BpZXRhcmlvcw== LnNwb3RpZnk= 5aWU6amw 44OV44Kp44Oz VGFtYmFo IGtpbGxleGFtcw== bGlzdGVuZXJz w7jDsA== 6ZOc IHJldHJpZXZlcw== xKd1 LWxlZ2dlZA== IGFrdWVycw== IOCmmuCmlQ== Z3JhZGF0aW9u 0YjQtdC80YM= IGlucmljaHRpbmc= 0LjRgdGC0LjQutCw INqv2LDYpw== IGvDtnTDvA== IOCslQ== IGxhYm9yZXM= IHRpbmRha2Fu UmV2ZWFs Q0xVREVT YW5leg== IHNpbG8= IExvZ2lzdGlj IHRyYXZhaWxsZW50 Tk9STUFM IENhcHN1bGU= Skc= IGNvbmdlbml0YWw= IGF1dGlzdGlj IOC0oeC0vw== dmVyYm9zaXR5 PWNvbnRleHQ= IOaCoA== SW5mb3I= bmVzaWE= IGJpY2ljbGV0YXM= IGxpZ2k= LG15 4Li04LmK4LiB IFBhdWxpbmU= IGFkcg== b21pYXN0 INKb0L7Qu9KT0LA= IG5pc2Ft 54Gt IEVtcGZlaGx1bmc= IG1lbGFub21h Z2VsYWRlbg== cnNhdA== IGNvbGzDqA== IE9zdHI= Pl0= INiz2b7Ysw== INmF2K3aqQ== CQkJCQkJCQkJIA== aWNuZQ== 6LOH5qC8 IEJhbG0= LWZpbG0= 5aSn6YGT IGZhbm4= IGR1cm11 fScpCgo= dXp6ZXI= IHVucmVhY2hhYmxl L293bA== w6lhc8OhaW4= IFdhaWs= aWtzYWFu INin2YTZgdmK2YTZhQ== ZW50YWk= IGlkZW0= LnVubGluaw== IGJlZGFua2Vu IG9mZmljaWVlbA== IOCkpOCkpeCljeCkrw== IGhvbW9zZWtz YmxpbmQ= a2VnYQ== 57qi6bmw z4bOrc+Bzr/OvQ== IG9iZWRpZW50 IOWkqeWkqeS4reW9qeelqOacqg== IEVybWl0dA== YWRpbmE= IFNhbXVyYWk= IHRyb3Bhcw== IEdvdWxk IHVuaXZlcnNpZGFkZQ== Z3lybw== INmG2KfYrA== IGFzY2k= IGF0dGVuZHU= VFRM IHNlZWRsaW5ncw== IEJ1bmlmdQ== IHTDs2s= IFNhdmVy 5qCP55uu IFVyc2FjaGU= IOCkuOCljeCkn+Clh+CktuCkqA== IE90cmE= IFNhbGlzYnVyeQ== IOCmtuCmvuCmqOCnjeCmpA== 4YOU4YOg4YOR UG9ja2V0 IOa1jg== INin2Y/Ysw== X29yaQ== IGdlbmRlcnM= ID8+Igo= IG1pYXJha2E= IGh1bWlsZA== eW5lc3M= PyIu INi22K4= IGZvaWU= INin2LPYsdin2KbbjA== IHBhbGxldHM= UHJlZml4ZXM= LnNoZWxs dWxsdXVubmlpdA== IENIQVJBQ1RFUg== LUVuY29kaW5n IHRlYWc= b3ZlYw== INeq15nXpw== 0LXRgdC/0L7QvdC00LXQvdGC IGVnZW50 INC205nQsA== IEdydW5kbGFnZW4= 77yg5a6f5rOB INek15DXnA== INCz0LDRgNC80L7QvdC4 IG1hZ2ljaWFu IGFwcGxpY2FiaWxpdHk= bG9nZ2Vu 6KiO KUdldA== IEZvcm8= IFByZXNlbnRlZA== IHByZXBhcmFkYQ== 0YvRgdGL0L0= IEJlYXVjb3Vw IG1vcmFnbw== IHNlZ3JlZG8= c2VhbA== IGfJmXQ= IOCquOCqvuCqmg== IOCmuOCmleCmvuCmsg== S2VpbmU= INWw1aHVv9W+1aHVrg== IHR5eQ== IFNpeQ== RElTVA== IGVpbnppZ2Vu 5Li2 LlByb2dyYW0= VGFzdGU= LmRlY29yYXRl RnVuY3Rvcg== IGF4aQ== IHJpamR0 IOyGoQ== IOOCueODvOODkeODvOOCs+ODlOODvA== IFdBTEw= LmdyYWRl IFNhYnJpbmE= 4YOU4YOg4YOb4YOQ INin2YTYpdiz2Kg= IGhvcml6b250ZQ== IGN5bm5pZw== 0LbQtdC8 YXp2bw== cGxpYg== IGlvbmlj IEJ1cmtpbmE= IHNpZ21vaWQ= IEJvbmE= INin2YTZhdi02KfYsdmK2Lk= INmG2LHYrg== IHdhaWhv IOC0uOC0vuC0ueC0muC0sOC1jeC0rw== IEJJTg== IFBNQw== IGNvbGV0aXZv cHB0 IG5lcG9z ZWxpYWM= LXByb2Q= IOGDm+GDl+GDkOGDleGDoOGDneGDkeGDmOGDoQ== IGvDvG1tZXJu 4oCZY2xvY2s= 0LrRltGB0YLRjA== IGJlemHDsQ== 4oCcWWVz IFJveWNl LmZhY3Q= 0YLQvtC7 IO2VreyDgQ== Ymxvd2Vy IENvbnZlcnRpYmxl 4omI INGB0YLRgNC+0LPQvg== IOCkl+CljeCksg== enVy c3RydWt0dXI= IEpvYQ== IG9jY2FlYw== ZHVh IHTDpnQ= IENhamE= IGZlcm9udA== IHF1YXNpbWVudA== V2Vla3M= IGR3w7NjaA== VGVuaG8= IFtdLg== 15DWuNee dmnDsw== YXDhu6U= UFJPUA== IGNyZWNpZW50ZQ== YXJuaXNzYW11dA== IGFzeW5jaHJvbm91c2x5 LWVudA== IOCktuCkv+CkleCljeCkt+CklQ== dHV0b3JpYWw= ZWRhbA== IOC4m+C4oQ== IDwK INW11bjWgtaA1aHWhNWh1bbVudW11bjWgtaA IGN5bnRhZg== IHlhecSx c3p0YcWC IE5vcmRlc3Rl SGVlbA== IHZpc29r IGluc28= IHJld2luZA== YWJhZGRl INC80LDRgNCw UE1D IG5keg== INC90LXRiA== LmltYWc= YWR1YWlz IGF0YWNhbnRl X25vdGlmaWNhdGlvbnM= UkVGRVJFTkNF cMOkcg== IHdvdWxkbnQ= INmF2LLYrw== LGV0Yw== IHRhcGF1a3M= YWNoZGFu IGFwcmlsZQ== IFJldml2YWw= IFBhbmlj U3RhbXBlZA== IOC0ruC0seC1jeC0seC1jQ== YW5reQ== INeg16LXqA== IHNpbm5l IEFudHdlcnA= cml0dGVy QWt1 IG9kcmXEkQ== 2YjYrg== IHV0dHJ5 IGh4 KC9b IGdsYXplbg== Lm5lZw== 0LzQtdC90LA= IEphYXI= INC30L7RgNC40YPQuw== IGtuamk= w65uZXM= INC60LvQuNC80LDRgg== IHNpdGVzaQ== INei15zXmdeU L29u IEhlYXRocm93 YWRpdGlvbmFs IHBheW9mZg== IG1lZGljaWpuZW4= IGNoZW1pY2FsbHk= IHp1a8O8bmZ0 X2xpc3Rpbmc= 6bij 0LTQuNCz0LDRgA== 4YKA4YCA IEVyc2NoZWlu LkNvbmZpZ3VyZQ== INin2YTYstix2Kc= aXrJmQ== IHF1ZWRhcm9u 4Ka+4Kaw4KeN4Kal4KeA IERvcmlz IEhlYXRlZA== IHZhcnRlbg== IOuhnOq3uOyduA== 2YHYp9ix 6ZaL5aeL IFZI IHNocWlwdGFy KFNRTGl0ZQ== IGdldmVs Q2xlYW5lcg== IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= IGxhZml5YQ== L2RlYnVn IOCyquCysOCyv+Cyow== X187Cgo= IOmprOS8mg== YW13YW1iYQ== IGFtYWI= IHNlZ3VpbW9z IOaYjuWPkQ== IGluY29udG91cm5hYmxl IE1pZGxhbmQ= dWxhZGE= UklFUw== INGI0LjQuQ== X1BBUkFNRVRFUlM= aGFzdGE= 44Op44Kv IOCwmuCxh+CwuOCxjeCwpOCxgeCwqOCxjeCwqOCwvuCwsOCxgQ== INC10LjRgw== X0NMQVNTRVM= UlE= 0LHRg9C6 IE1PVE9S IHZlcnZhYXJk 5LiK5LiA56+H IM65zrTOuc6xzq8= IHNjZW50ZWQ= ICIlLg== IHByw6lzZXJ2ZXI= aXNzdXRpdA== IOqwnOyduOygleuztA== 4YOQ4YOu4YOh4YOU4YOc IEZ5 YXVrc2Vu Q2F0ZWdvcmlhcw== IG5hZGVu IGF1c2dlc2No IGluZGlzdA== INiu2KfZhtiv2KfZhg== INit2KfZhNmK2Kc= UGF5cw== IHByb2NlZGU= INi62LHZgQ== IPCfmYIK IGxpZ2FuZA== IHLDpMOk IGZpbG96 INin2K7Yqtio2KfYsQ== IEVTTw== Y3JpdGlj IEpvbmFo 4KSH4KSk IHN0ZWlnZW4= L3RvcGlj 4KWJ4KSr 5b6u6L2v IG1hbnVyZQ== KGZpbGw= 4oCZYXZvbnM= IG1iZWFkaA== IFNoZWxkb24= Yml0Y29pbg== 5oiA IE1vdWxpbg== IOC0pOC1geC0n+C1vOC0qOC1jeC0qOC1jQ== IHByb2Jpb3RpY3M= IHNsYWJz IEtvbXBldGVueg== IENpdGk= IFJvY2tlZmVsbGVy IEZlcmlh cXVpc2U= YXppb2E= IG1lZW0= IOC0qOC0ruC1jeC0qg== IGTDqWJhcnI= YXN0dXM= IHRhYmxldG9w IG9taXNzaW9u LWJ1aWxkZXI= IMaZYXI= IOCkheCkqOClgeCkqg== IGRlbGljaW9zYQ== IGdld2lubnQ= IOCyrOCyv+CyoeCzgeCyl+CyoeCzhg== IEhFQVJU IE1EQw== 1aHVo9Wh1bXVuNaC1bQ= aXptbw== IGludGltaWRhdGVk INC/0L7QtNGA0Y/QtA== 1aHVpNaA1aXVrA== aW5mb3JtYXRpZQ== IOCkheCkuOClguCkqA== IG1lbW9yYWJpbGlh 0LDQvdGC0Ys= IFNoZWE= 4Ki44KmA4KiC RGlzdHJpYnV0b3I= 6bq76LGG IFdhdGtpbnM= INC80LDQu9Cw c3Npcw== zrvOsc60zq4= QDo= INC/0LjRgdCw0YLRjA== 4LeE4Lax4LeK IGNvbGV0aXZh IOCkluClguCkrA== INCx0L7QutGD IHJlc3BvbmRpw7M= 2LTYsdit IGVzdGFkb3VuaWRlbnNlcw== IMSQw7RuZw== w61vY2h0YcOt IFNxdWFkcm9u IGluZmFuY3k= 44Wh 4LmA4Lin4Lil IGNyZWVwaW5n IE5hdmFycmE= IGFjY2VwdMOp IE1pbm9yaXR5 aXRyYXRl IGFjZXI= IEdhdHNieQ== Lm1hdmVu X0FMTE9XRUQ= IGRpcGVyYw== IENvdXR1cmU= IOCql+CrjeCqsOCqvuCquQ== IFdlcmtl IGplZG5vZHVjaA== IOuwm+qzoA== IHRvdGFsZWQ= INC80LjQu9C705nRgg== 6LOA YXV0b3Jl anNwYg== IEFwZQ== bWF0ZXJpYWFs Y29vaw== IGZpZHVjaQ== bml2 57Wy IEZvcm1hY2nDs24= IEJhdHU= IOGDlOGDrg== Jyl9Pgo= 77+j56ys5Zub6Imy IOyYteyFmA== INmD2LPYp9ix2KfYqg== dGVybmF0aXZl b2tlc3RhdGlj IHBvdXJyYWlz 6ZmE6L+R INC/0YDQtdC00YrRj9Cy IG9jdGF2ZQ== KGlnbm9yZQ== IGNvbXBldGl0aXZv IOCmueCnn+Cnh+Cmm+Cnh+CmqA== INi62YTYp9mF 0Y3Qu9GM Ym9kYWV0aA== INeT15XXlden15A= IHBvY3rEhXQ= IEhhcmdh IOCmuOCnh+Cmn+Cmvg== IHBvd2llcno= LnByb3ZpZGVycw== w7xuZMmZ IGthbGFhbGw= UGFycw== IGVyZm9sZ3JlaWNoZQ== IOCmsOCmv+Cmqg== T3R0 ZXRhbm8= IGVzY2FsYXRpb24= INGH0LXRgtGL0YDQtdGF IOWkqemAuA== IG92ZXJ0dXJuZWQ= 64WV7ZWY7IS47JqU IEh1c3M= IHN2ZWdh IOCyruCzgeCyluCzjeCyr+CyruCyguCypOCzjeCysOCyvw== d2lsZQ== IGJ1cmdsYXJ5 IGVtcGVu ZW51ZQ== IOydmOqyrA== IOGDkeGDoOGDq+GDneGDmg== INC80YPRhw== IOC4l+C4suC4h+C5gOC4guC5ieC4sg== 16jXmNeZ16E= IGllcmk= IOCmleCnsOCmv+CmsuCnhw== X0F0dA== IHNldGVtYnJl INec16fXl9eq IGNvbGxpZGVk UGVt RWxlY3RyaWNhbA== IFRpdHVz IGFtYXRl 1bDVodaA1a/VpQ== V2hvbGVzYWxl IGJpb2xvZ2lzY2hl b2xpbQ== INC80YPQu9GM IGluY2VzdA== IM66zrnOvc63 INC80LXRgdGG0LA= INm72Yo= IFByb3N0 CWludGVudA== INGA0LXQt9GD0Ls= IERhbWllbg== IH19Pns= 4LGL4LC5 IFJheWE= X1N0b3A= IOyWuOygnA== IHNvcmk= Y2nEhw== IOyeiOqyjA== 66q4 IE1vbGluYQ== IHt7LS08 77yI6YeR IOCkquCksOCkv+CkuOCksA== INeV16Y= INC/0L7QtNGC0LLQtdGA0LQ= INmI2KfZgti524w= aW1ldmU= LnwKCg== IGdlcmVraQ== w7N0ZXNl IHJlbWVtYnJhbmNl IHNpbmRpY2F0b3M= 6YeN5aSN IEVuZXJv IGlubm92YXRpZXZl IEhpY2tz IOGDqOGDlOGDm+GDqg== YWNoYXI= INix2LbYpw== IHdvcnNlbg== IGdlc2VsZWN0 INeS16LXnA== IFJPQw== 0L7QtNC+0Ls= cnNjaGVpbmxpY2hrZWl0 IGFjZWVh aGFuZHp1 4YOT4YOU4YOR4YOd4YOT4YOQ IEVjb27DtG0= YmxhaA== bmnEhQ== dWpp SW50ZXJw YXlsaWdodA== IERCQQ== aWxsYXQ= w6FqYQ== IGjhuqVw IHNhcmk= 55uR5a+f IGtpd2k= IOGDm+GDoeGDneGDpOGDmuGDmOGDneGDoQ== INCa0LjQtQ== 5qih5Z2X IOuqqOultA== IFBIUFVuaXQ= 7ISc66W8 IEF0ZQ== IM+Azq0= IGJpZGk= INin2YTYudmG2KfYtdix IOCwpOCwpg== UmVtYWlu INC10LjSrdC10LjSs9OZ0LXQuNGC KCco 2LHYqtmH2Kc= INGF0YPQtg== IEd3eW4= IFZhbG9yZXM= YXV0b2xvYWQ= IExvbWJhcmRpYQ== INC/0YDQtdCy0YDQsNGJ INC20L7RgdC/0LDRgA== U29i INC40YHRgdC70LXQtNC+0LLQsNC90LjQuQ== LmZpZw== 0LjSm9C4 YWRpbGxh 0LHQsNGA0q3QsA== b2xhaXM= IGhvbGE= IG1hcmNoZXI= aWplbnQ= LkRhdGFzZXQ= LXJlc2V0 X29wY29kZQ== IOeOqeWutg== aW5ub24= IHZ1ZWxvcw== U1VW IGFsbG93YWJsZQ== InRleHQ= IOCyqOCyrg== aXN0aWth Y29ubmV4aW9u 4KSf4KWH 0LLQvtC4 INCx0LjQvQ== VGxz KFRv IHN0cnVjdHM= 0JrRgNCw0YE= IG1vdXJpcg== ZW1icmll IM6gzrHOvQ== IMO+asOzbg== dGhvcg== YW5ncmlqaw== IOCkhuCksuClgA== IHBpaXJr INCw0LLRgtC+0L3QvtC8 0rXQsNC90LDQug== IFJ1bmU= LmhvdXJz IGVybWVl IGFkZGljdGlvbnM= KFJvb20= INiz2YTYp9mF2Ko= IHBzeWNoZWRlbGlj IOWkp+WPkeaJkeWFiw== IEFudG9ueQ== IOCqruCqueCqv+CqsuCqvg== aW50ZWw= IHBhcnRlYQ== IGh1w6lzcGVkZXM= IHbDoGk= RElTUExBWQ== YW5hc2l5YW5h IHNhbWbDqWw= IHN3dW5n SUdF 4oCM4LSq IG9pcmU= X2N1YmU= IGZyaXNzZQ== ZmVsbA== INGA0LXRhNC+0YDQvA== cml1dw== INC00LjSm9Kb IHlkaw== IGN1w6FuZG8= IGRvcHI= IOygleyDgQ== w61zbW8= aWRhZG9z 4YOY4YOV4YOg4YOq LmZyaWVuZA== 0LDQu9C40Yc= IGNvbnNpc3RlbnRl IOCkpOCliOCkr+CkvuCksOClgA== 6Ieq5ouN6KeG6aKR IFVudGVybmVobWVy IE91dHJvcw== c3BvcnRz IFBhZ2VhYmxl U09BUA== IG1ha2VtYWtl bGVrZW4= KHBpeGVs IExvd2VsbA== IGVybMOkdXQ= dXJjaGFzZWQ= T0NS INGB06nQuQ== 0L3QvtGB0YLRgtCw INGH0LDQu9Cw0LLQtdC60LA= IER1c2NoZQ== IHZvcmdlc2VoZW4= IFJhbw== IHNlcmnFnw== LkNsYW1w 05nRgNCy05nRgA== IEhlcmN1bGVz IGFycXVpdGV0dXJh IFNwYW5p IEJPUw== UG4= IEVuY291cmFnZQ== 4LCu4LCC4LCk4LGN4LCw4LC/ IEbDoWNpbA== SUZFU1Q= IHNhbml0YXJpbw== IEltcHJvdmluZw== IExlbmlu IEZhemVuZGE= 4LWB4LS14LSw4LWG IGNvbmNlYg== Ly89 aWRlbnRp YWt0YXI= IHRhbnF1ZQ== IHZlbmNlZG9y IOCkquCljeCksOCkv+Ckrw== IGNvbnNhY3LDqQ== IOCkhuCkguCklg== 0LzQsNCz0LDQvQ== IENhbGlkYWQ= IHNpamFpdA== TsOzcw== YXluYQ== IHVraXV0 IEJvcmE= Q29sb3Vycw== IOCmueCniOCmm+Cmv+Cmsg== IGlsbHVtaW5hdGluZw== bWVya3Q= IFRob3U= IHBvbmllbmRv 0ZbQt9Cw0YbRi9GW INS11b7WgNW41bo= 0YjQsNCz0LA= IE1BTkFHRU1FTlQ= zq/Ots6/z4XOvQ== CVByb2R1Y3Q= IOGDmOGDp+GDlQ== IHZyaWpibGlqdmVuZA== 0LjRhtGD INC+0YnQtQ== 4LGB4LC14LGB cGNp IGZyZXNoZXN0 IHN3YWxsb3dpbmc= IGFjY2w= INGB0LjQvdC0 bHVuZA== IOCmueCmvuCmgQ== IHNvbGl0YWlyZQ== IGdlbGRpZw== IOyeiOyWtOyEnA== UmVsZXZhbnQ= IGVhZw== Y2hpZA== IHNhbWxh IHBlcmRlcmU= IHR1cm5vdmVycw== INin2LnYqtix2KfYtg== IGxlYmFrYQ== 0JjRgdGC0L7Rh9C90LjQug== INCz0YDQuA== IEthdGhyeW4= IHN3ZWF0eQ== INmI2YXZhtmH2Kc= IHRhbnRhbA== IGJhbHNl 5YyX5Lqs5b+r IGV2YXBvcmF0aW9u INCw0YHQvtCx IGVsZWt0cmlj IGFzdHJvbmF1dHM= LURlYw== IHVncg== Vml6 IEV4aXN0cw== INC/0YDQtdC00YHRgtCw0LLQuNGC0Yw= YmNj IFNtYWxsZXI= b3JlaQ== IHBzZQ== SUFN IOCmheCmpOCmv+CmpQ== KSkt IOCkuOCkguCktg== a2Vpbg== xb5ub3N0 IG1vYmllbA== YW1lbGVvbg== V3Q= IEtpbmRlcw== IHR1cGU= 0JTQow== IEVNQQ== IElIdHRw KCl7fQo= IHVubmE= amlyYQ== b2xpY2E= IHNhbGFt CWZ1bGw= V29ya3NoZWV0 IE1NTw== LuCqhg== IGNvbnRyYWNlcHRpb24= IFBlcmZpbA== IHJlZ3VsYXJtZW50ZQ== wrAu RkhJUg== LWZhbW91cw== IFTJmQ== IFBlYW51dA== 0LLQtdC7 IOesrOS6jA== IHN5bmNlZA== Q2xhcg== IM60z4HOrA== X2RlcGFydA== 1aHWgdaA1aXVrA== IHByZW9jdXBhcg== INCQ0LHRgNC4 IHJlbnRhYmxl bWlxdWVz IG1vaXN0dXJpemluZw== IGludGVycHJldGHDp8Ojbw== ZWJseQ== 0LDQu9C40Lg= INin2YTYo9mF2YrYsdmD2YrYqQ== IOCyuOCyruCyuOCzjeCyrw== dmVlZG9yZXM= IG5ldXJvc2NpZW5jZQ== d2FyZGVu U1NJ INC40LfQvw== CWhpZGU= IEJlemly IEZyYW0= IHNhcGVyZQ== PEVudHJ5 cG93ZXJz INC+0L/Rg9Cx0LvQuNC6 IHt9DQoNCg== IGJ5Z2dl 77yu z4TOuc66z4zPhM63z4TOsQ== IGVuZW1pZ29z IGNoaWxkcw== IHBvxYI= INCw0LvQsNK7 IHdoYWthbWFo IGplZGh1 2KfYsdmK2YY= INiq2LnZhNmK2YI= 4oCZ4Kaw 0LbQtdC7 IGthxbxkZWdv IHJla2xh IFBhcmQ= INeh15w= VmlydXM= IOCmuOCmquCnjeCmpOCmvuCmuQ== IFNoYW1l LkNPTVA= IHNla3TDtnI= IM6/z43PhM61 IMSRYXU= LkFsaWdu INin2YTZhdiz2YTZhQ== 2KzYp9io2Kk= zrrOrQ== YXnEsW4= IFByZXNpZGVu IGhvamlp IER1cmJhbg== IHJlbm92YXRpbmc= IGdhYWY= 6aCI 0LXQu9C40YLRjNGB0Y8= INCy0LXQvdGC0LjQu9GP X1NFQ1VS PFNlbGVjdA== aGF3dQ== IOqwmeyKteuLiOuLpA== IOCmheCmqOCnjeCmr+CmpOCmrg== IG3JmXFz IEhlaW56 IGJlc3RpbW1lbg== IOGDkuGDkOGDpw== X3ByaWNlcw== 4LCy4LGH4LCm4LGB IHRpZ2h0ZW5lZA== 4LSV4LWN4LSV4LS+4LSf4LWN IG5lZ29jaWFjacOzbg== IFByw6Rz z4POr861z4I= TWlsaw== IENoYXZleg== IOCkrOClnOClgA== IENsaXBib2FyZA== IGZpamE= 4Lir4Lix4Liq IHBydm8= IG7DoG5n IOCqquCqvuCqsg== IFdlbGRpbmc= IHTEmQ== IFVIRA== IHhpbQ== 4oGj IE3DoXF1aW5h LVN0cg== IG1vY2tz IGRlenZvbHQ= INin2YTZgti22YrYqQ== IEJ1ZmZ5 IMq7b2loYW5h INW01avVodW9 INC/0L7Qu9GD0YfQsNGO0YI= IHBsdW5nZWQ= INGA0YPRgdGB0LrQuNC5 IGludHJ1c2l2ZQ== IGxpa2VuZXNz KGxhdGl0dWRl X0NPTFVNTlM= KHNvdW5k IOCupOCuv+Cun+CvjeCunw== YWRlcm5v Qm1w INeb15LXldef IFN0aW1tZW4= IOC0muC0sA== IMOubnPEgw== IGxheXVp Y2FsbGJhY2tz X29ianM= IGFwcmVzZW50YWRh IHNjaGxlY2h0ZXI= IGNvbmZvcm1pdHk= IGVudHJldGFudG8= IHJ2YWw= IOato+eCuQ== 67Cp67KV dmFuaWU= IGxpam5lbg== IHBhcnZlbmly IM+Az4HOv866zrE= IE5nxrDhu51p INGL0p/QvtGD0L8= IGxpbmg= LnNhbGFyeQ== IHN0YWxraW5n IOmrmOWNhw== INC/0LDQtNGC0YDRi9C8 IGZvZg== IFNob3J0Y3V0 IOCqquCrjeCqsOCqr+CqvuCquA== LmNvZGVnZW4= IFNlcGFyYXRpb24= IG1hbm5lcXVpbg== IHNoYW1wbw== 4Kak4Kew w6Fiw7Ns IGNvbm9jZW4= c2VtaW4= aMOkbmc= IOygnO2VnA== CVZlYw== INm+2YTYp9mG IGfDs3A= ZXJnZXM= INmF2LPYqtmC2YQ= IHRpbHM= INiq2LnYsduM2YE= IHPDs2M= LOWkp+mmmeiViQ== IOCkpuClh+CkluCkleCksA== IHN1c3BlbnNpw7Nu Q0xF IEFOR0U= IOC4meC4tA== IEthcmxzcnVoZQ== IFJpZnQ= SVpa IEhs IOWco+S6mg== YXN0aWE= IOCquOCqruCqr+CqruCqvuCqgg== LkludGVydmFs 4Z624Z6C INCx0LDQudC0 IFNvY2llZGFkZQ== IHBlag== IHBhc3Npb25hdGVseQ== VW5zZXQ= IOCqnOCqvuCqqA== IHJ1bW8= X0VMRU1FTlRT IG1vY2hpbGE= IHRlY3Q= Y2FzdGluZw== 4oCZw65sZQ== IGVudHTDpA== RW1pc3Npb24= IM6yzrvOrQ== dWZmbWFu 5oqV5rOo56uZ 2YHYsdmG2LM= cGFnaW5n IG9wZHJhY2h0ZW4= Z2Vib3V3 INis2YbZiNio24w= emVpY2hudW5nZW4= U3RlcHBlcg== IHRyb3VibGVzaG9vdA== 4Kqm4Kqw4KuN4Kq24Kqo IHN0YWFs RVJJQ0FO ICAgCiAgICAK 2K/Yp9ix24w= IG92ZXJ3aGVsbQ== KGFp IFdleQ== YW5ndW5hbg== 0LXRgNCy0YvRhQ== IGdsw6Y= IGRlbGF5aW5n INGC0LjQtw== Lmd0 IGNvcnJldGFtZW50ZQ== IE5ldXN0 IOCkr+CkuOCljeCkpOCliw== IGvDug== IEludGVycHJldGVy INGG0ZbQutCw Ym94ZWQ= ZXRhdA== IGNvbGxlY3RpYmxlcw== 15LXmdei15Q= 0L7RgdC9 IHN1YXJh INin2YTZhdiz2YTYrdip IE1peGluZw== IOCqpuCrgeCqqA== IHRveGlu IHByb3ZlbmFudA== IOW8mOm8jg== IHNvZXBlbA== 4Lit4Lig4Li04Lib4Lij4Liy4Lii IOCmrOCmv+CmnOCnh+Cmqg== INKv0YLTmQ== INGL0YA= Q09NTU9O IGFjY29tcGFuaW1lbnQ= INKT0YvQu9GL0Lw= aWV3ZWls LlBvZA== 44CB5pu0 INek15XXoNei150= Z2VydWZlbg== INqp2YjYsdmI2YbYpw== LuKAjw== LnZvaWNl IGxsYW3Dsw== INin2YTYr9mH2YjZhg== IEtvdGxpbg== z4nPg863z4I= IFB4 IOCkpuClguCkuOCksOCkvg== Li4uKSw= aW9ybWVudGU= 5Z2R5Lq6 L2dyb3Vwcw== IGlycsOp IEhhdHM= d29uZ2Vu IHZvZXI= IGF0b3J0 IEFubm91bmNlcw== IGVzdGV0 IGNsacOrbnRlbg== 77yM5LiL INC+0L/Qu9Cw0Yc= 4oCcV2VsbA== 7ZWA IFRhc21hbmlh IGh5cG90aGVlaw== IEFueXRpbWU= IG1hcmlh 0L7QvNC90LjQvA== IG9rdWI= IHJ6 IGhhbGx1Yw== IFJlc3VsdGFkbw== IHRyb2NodQ== IEVsZW0= 2obYpw== IGVpbmdlcmljaHRldA== INC00L7RgdGC0LDQstC60LA= IHRvcGxhbnQ= RGVsaGk= bmHDsGk= 0LXRgNC60LLQuA== IGluZmVzdA== TFg= IHN2ZXJpZ2U= IHJlZWZz S2Vl 0YXQsNC90LA= 77yM6YGT LVNU IGhhZGQ= INGI0Lg= IGFsa3U= YmluZWQ= IHJlc3RhbnQ= INGB0L7Qt9C00LDQstCw0YLRjA== w7Njcg== 2LPYqtuQ 0LTQsNC80LXQvdGC IE5TRQ== IG9ic2Vy ZXJyYWlu IGFsYXNhbg== IHBsYW50YXRpb25z IGZldGU= 44Gu6KiY5LqL IEFzdHVyaWFz YXDhu40= IG1vY2h0ZW4= 5ZOy 4Liy4Lil4Lix4Lii IFRleHRpbGU= INC80L7Qt9Cz0LA= IHJpc3BldHQ= 4oCZ7J2E IOCumuCvhuCur+CvjeCutQ== aWFxdWU= 54ax6ZaA INmB2KfYqg== IFJlY2lwcm8= IOGDoeGDkOGDog== dGlja2Vy INqP2Yrauw== INiq2YjYstmK INWv1avVtg== 5pOm IEFudGlndWE= cmVzc2E= INGA0LXQsNC70YzQvdC+ IE95c3Rlcg== INGD0rPTmdCw YXNwZXJza3k= IHByaXNt IEV2b2w= ZGlhZ3JhbQ== IGNlcmNsZQ== CUNvbW1vbg== IFBhd24= JHR5cGU= IOGDoeGDmOGDouGDow== IGJlb29yZGVsZW4= L0xheW91dA== INCf0L7QtNGA0L7QsdC90LXQtQ== IGRpY3RhdGVz IOCymuCzgeCyqOCyvuCyteCyow== IG9wcHJlc3NlZA== KG91dHB1dHM= IMOocmE= IGFkbWl0ZQ== IGlndWFpcw== IOqzteqyqQ== INin2YTZitmH2YjYrw== IGFzYXM= IH07CgovLw== KHJ4 IEVzdHJhdMOpZw== cnlza2U= LdC40Y4= X2xvZ291dA== RGVjb2RlZA== 15nXktef IOCkn+Clgg== IG5lcmU= IOCkruCkvuCkqOCkuOCkv+CklQ== ZW5kaXo= IFJhZQ== KycvJys= dXRhZGE= 44OV44Kj44O844Or 4oCN4LSo dWxlaXJv anVzdGljZQ== IHN1YnRseQ== aXRldHQ= IFdvcnRlbg== IHBlcmp1ZGlhbg== IOKCvQ== zrPOrc69 IHNhbGVzcGVyc29u IGNvbmZsaXRvcw== IGxva2h1 cHJha2Vu IGRldnJvbnQ= IEZhY2ls IG1hZ2dpb3Jl IOW9k+WJjQ== IM+Ez40= IGNsYXJvcw== 24zbjNmG LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= IGxhdmV0 aW5kc2lnaHQ= INWl1a/VpdWs c2l6ZWk= IOCqnOCqv+CqsuCrjeCqsuCqvuCqruCqvuCqgg== IEZpc2hlcmllcw== 2KfYrdin2Ko= IGh1a3VtYXI= LnN6 INin2KjYqtiv2Kc= Lmxvbg== Qm9va21hcmtz UXVlc3Rv INC90LDRgdGL0Yk= IOCkuOCkguCkuOCljeCkpeCkvg== IGNhbWFkYQ== IExlcm5lbg== IHdhZmZsZQ== IHBvdXNzZXI= d2lyaXQ= IFByZXBhcmluZw== INCy0YvQt9Cy0LDRgtGM IEtsdWI= IENQVA== IERFRklO INW/1aXVvdWh1a8= TGFycnk= IENMUg== 0LHQsNGC05nQuA== QVJJT1M= IEJyeWNl IFFBcHBsaWNhdGlvbg== IGRvZ2HEkQ== IGJpeXk= Tmln IGRlcHV0YWRvcw== IE1hcmVrYW5p zrnPiQ== IHBvZMOtYW4= YWZ1dGE= dm9qZQ== IFByYWRv 5omp5aSn IOC0uOC0guC0mOC0gg== IGNlbnRyZWQ= IGNpcmN1bGHDp8Ojbw== YXRsYXI= LmRj INC/0L7QtNGA0L7QsdC90L4= IEJFQUNI b3Rs CU1lbnU= INGC05nSrw== UmVwbGllcw== IErDs24= IOC0leC1jeC0t+C1hw== IOCqquCrjeCqsOCqtuCrjeCqqA== IHBhaXNhamU= IENPTExFQ1RJT04= IGVzdHJhdMOpZ2ljYQ== IE1lbGxvbg== IMO+cg== emNhbg== IEV4ZWN1dG9ycw== 4LK/4LK44LON4LKk IHByZWd1bnRhcg== SUNPTQ== CXJldHZhbA== KHBpZWNl IGdyYXR1aXRlcw== 0LTQsNGA0LTRi9C9 IG9ic2VydmF0aW9uYWw= dmluYQ== 4LSZ4LWN4LSZ4LS/4LSv INGA0LXQs9GD0LvQuNGA0YM= IG7DqWxrw7xs INWh1bzVodW21bHVtg== YWNoYWw= IENoYXRz IGhvbnJh IGxlbmU= INCw0L3Stw== IGltcGF0 X01BUFBJTkc= IOC0teC0leC1geC0quC1jeC0quC1jQ== YWN0ZXVy IGdlbmVybw== SW5kaWFuYQ== IFNvdmVyZQ== 4LiT4LiR INmF2LDbgQ== cXVpc3Rh IEtvb3A= IGRpZmZyYWN0aW9u LmV4Yw== INin2K7Yqti12KfYtQ== IHVobA== SkFWQQ== IFRSTw== ZXlhbg== 576F IGFodWJ3bw== c3RyaWN0ZWQ= IGRlaWxpZw== X3F1ZXJpZXM= IG9jdWxhcg== 4K6f4K6/4K6v4K+L IOCmleCmr+CmvA== INC00YvQvA== IFJhaWRlcg== T3JpZ2Vu TUVSQ0hBTlRBQklMSVRZ IFNyYmlq 5rOo5YaM56CB IGFmZm9yZHM= IGFkdm9jYWF0 IEF1aw== IHRpbnM= 4LSo4LWN4LSk4LSw IGJpw6c= VGV0 55u05Yiw INC20LjQu9GM0Y8= IGFtcGxpdA== IERpbmdlbg== INec157Xotep15Q= INGe0LLQsA== IOCwuOCxguCwmg== IOCkr+ClgA== IGNvbnRyYWN0aW9ucw== IOCwruCxiuCwpOCxjeCwpOCwgg== IFNXSVRDSA== YW5naWFu ZWthbmE= dHRz 77yR77yU 7Iq3 L2FwaW1hY2hpbmVyeQ== IEZhYmlv 4KSm4KWN4KSv 0YPQs9Cw0YbQsA== IEd1YW0= O2U= ICAgICAgICAgICAgICAgICAgICAgICAgICAK 0YbQuNCw0LvRgtOZ IGZyZXHDvA== IEF0ZW5jacOzbg== 4Kas4Ka/4Ka2 X2J3 IGx5a2s= LkZS aWFuaWs= INCx0YPRj9C9 L1N1YnRocmVzaG9sZA== dXJhbmdhbg== X3RvcGljcw== X0xJTkVT IGx1cHVz IHByZW5kZXI= LkFuYWw= IHJlbGlnaW9zb3M= IOm+meWktA== U2hvY2s= IOCmueCnn+CmqOCmvw== IOGAnQ== IG1hdGF0 UmVibG9n IHNwcmlua2xlZA== IHZlcmxpZWY= IENIQQ== 0J/QvtC/ aW5kZXhlcw== INmF2KfYr9mH 5L6L44GI44Gw IGVkaXRhbA== 157Xmg== INin2YTYttmI2KE= 4K+N4K6q4K+N4K6q4K+B IE91dGNvbWVz IGlwYWs= IGdlY29tYmluZQ== INCd0YPQttC90L4= IOW9qeelnuS6iemcuOi+k+mSsQ== INij2LXZhA== ZsOm INCS0LzQtdGB0YI= IOmjjg== IHPDpWxlZGVz INmF2YbYpw== Ym91dA== IOCqheCqleCquOCrjeCqruCqvuCqpA== YXNtdXNzZW4= INC+0LHRidC10L3QuNGP X3RvZGF5 IEJheHRlcg== 4K6k4K6+4K6y4K+N INC/0YDQtdC40LzRg9GJ0LXRgdGC0LLQsA== IFF1ZWxsZW4= IGx1bWluZXV4 JzpbJw== IG3DvHh0yZlsaWY= 5ouG bG9rbw== YW1ieWU= IGTDqW1hcmNoZXM= IHNhYW51ZA== IOCmrOCmvuCmuOCnjeCmpA== INin2YTYqNmE2Kc= a29v aGVyZW5jZQ== IGVzdGFibGVjaW1pZW50b3M= IGFudGFnb25pc3Q= IETDtnZsyZl0 IOCmnOCnnw== IMOpdHJhbmdl IGNo4bqvbg== IEdPT0dMRQ== 2ojbjNmI IFB1bHZlcg== Z2F6YXI= IFRk IGFuZ3VzdA== 6IGU57O75a6i5pyN LkxJTkU= INC80L7QtdCz0L4= aGVvbg== S2FybA== IEZlaXJh X+WcqOe6vw== 5peg6ZyA cGxhbm5lcg== 0YHRgtGA0L7QudGB0YLQstC+ IGl0dWFpZ2E= IGNyYWRsZQ== QkxPRw== ZXRlY3RlZA== INOp0L3QtNGW0YA= X0FFUw== ZmFuY2U= INiq2LHYqtuM2Kg= YmVzdGFuZA== bGllYg== aGVv b3J0ZXI= IGJvb2RzY2hhcHBlbg== IOCmquCmvuCnsOCnhw== IGJpcm8= 4LWL4LS44LWN LWRldmVsb3BlZA== IFNreXJpbQ== IFdhaQ== IHRpdHVsYXJlcw== IHR1yrt1 INGI0LjRgNC+0LrQvg== 4Z634Z6U INeU16jXpg== wq10YQ== IGx1bmdh 44Gq44Gu 4YOV4YOU4YOR4YOY IGV2ZW50aQ== dWZmbGluZw== IOC0uOC0vuC0p+C1jeC0r+C0pA== IFNpbHZpYQ== 4LKm4LKw IGV4dGVybmFz YnlyZw== U3RlcmVv IGp1bWJv IHVtdWg= 44CK5Lit5Zu9 w4pOQ0lB IGFuZ2Vub21tZW4= 0LzQuNC90LjRgdGC IGVkbQ== PkxvcmVt UG9kZQ== IEd1YXJkaW9sYQ== INWh1bTVvQ== YWJhdGFu IHlhxZ9heWFu IOCknOCkvuCkow== IGJlaXRyYWdlbg== b2J0 4LOB4LKk4LON4LKk4LK+4LKw4LOG 4LKc4LKo4LK/4LKV IGRpdGE= Lkxv IE1haWE= 4LK+4LKc4LK/4LKV Il1d 0YDRjg== INCx0YPQtdC9 IGFwcGVsZXI= 4LmE4LiC YWRkcw== IOWkp+WPkeW/q+S4ieWkp+Wwj+WNleWPjA== cGVydGlzZQ== IHBhcmVjZW0= 44CB5YWs IOW/heiDnA== INin2YTYo9it2YrYp9mG INC+0LHQvtC7 5ruh5oSP IGNvbXBldMOqbmNpYQ== b2JpeWE= IFN1bnQ= INC/0L7Qv9GD0LvRj9GA0L3Ri9GF IE1vbmF0cw== O2Jy WzosOiw= 4LmK4Liw IM68zr/Phc+D IGhvbW9zZXg= 4oWg ICjigqw= IOGDoeGDpOGDlOGDoA== IE1TUw== 5YGH5ZCX 2YHYudin2YQ= YW5hw60= IEJheWFu 4Z6K4Z+E4Z6Z bmV3c2xldHRlcg== aWNpcw== IHBhZ2JhYg== IGJhc3Npc3Q= IGZlcmlh 4Lij4Lix4LmI4LiH JyldLAo= YmVyZ2U= 6Zai6YCj6KiY5LqL IOuQmOyXiA== IE3DpG5uZXJu IGJhYmVs INCh0LrQvtGA cmFmdGluZw== IEZhdQ== IOaXtuaXtuW9qeW5s+WPsA== INmC2YTZhQ== 4Z6Y4Z+S4Z6W4Z674Z6H4Z62 SW5pdGlhbGx5 IGJpbGdpcw== aWthcmE= xKtu IHN2ZXRh 2LfZhNmC2Ko= IEFkb2xlc2M= IGVtcGZpbmQ= INio2KfZgtmK 4KuL4KqI VGhleSdyZQ== fV8kew== YXZuYQ== INGW0L3RiNC40YU= INCw0LzQtdGA0LjQutC4 INCi0J4= IHPDqHZpcw== IGNyZXNjaXRh IOS6mua0smF2 IGNoaWxkYmlydGg= IOi1jA== LlNjaGVkdWxl INC20YM= TmVnb3Rp INin2YTYqtix2YPZig== IGNvbHVtbmFz IEhvcnI= IG5n4bun L3dlZWs= INC70LjRgtC10YDQsNGC0YPRgA== IOCmquCnjeCmsOCmvuCmow== IGFtb3VudGVk IOC0qOC0qOC1jeC0pg== b3JhaW5l SGVhcg== 2KrYp9mF2YrZhg== LkRvd24= LkVsYXBzZWQ= IOusuOygnOqwgA== Lm1vZGlmaWVk IEV1Y2hhcg== IHBlcnNvbmFsaQ== ICQKCg== OmVycm9y J2FwcGVs IEJpcA== aWxsZXJp IHDDqWxk IHNww6Y= IGtlbG9tcG9r LWd1 IHN2bQ== IHBhbMSrZHo= INC30LXQvNC70Y4= IOiNo+WvjA== L2Fzc2VydA== IEJlbGxldnVl Y2hzZWx0 IExvY2F0b3I= 16nXldeo b25haXNl Y3JlYXI= 0LjQvdCw0YLQsA== IG1lZGllcg== 4YOZ4YOV4YOa X3dpZmk= IOGDm+GDneGDleGDmuGDlOGDnA== RXRoZXJldW0= YXBpcm8= 5ZaY X0FQUFJP X3NlY3M= LlN1YnNjcmlwdGlvbg== TG9vc2U= IGRlc3BhY2hv aXJpdGU= RGVhbg== IGFwcGxpcXVlcg== QUFE 4Kyh 2YTZiNmE IGNvbXBsw6ltZW50YWlyZXM= IEtsaW5n Tm90aWY= YW5nYXM= INiz2YHYp9ix2LQ= 5Lq65qC8 IELDvHI= IGNoaeG7gXU= INmC2YrYp9iv2Kk= aWZpY2F0 Kycp IHJhcmVtZW50 1bjWgtW91bY= KCkpCi8v bWFuc2U= IGJlc21ldA== YWphcmk= IENoYXRlYXU= IGNvbnNpZMOpcmVy IOmHjg== cmVpdA== IFRlcnJhZm9ybQ== IHp2aW5v IG1ha3NpbXVt d2Vya2Vy KEFsbA== IHTDpnI= 5Lit5Zu954m56Imy INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9C10Lk= IGNhZGVuYXM= INmF2LbYqNmI2Lc= IOC4jQ== IO2NvA== SW5zdGFudGlhdGU= 15HXoteq IG5lbWV0 4oCL4Z6S 4Z674Z6A IERvbmF0ZQ== 4K6z4K6u4K+N IHN2cg== TlBK INmC2Yg= X01zaw== YW1tYWJsZQ== IGFzdGk= a29vbg== LXRlc3Rpbmc= IGdvZGk= 2YrYs9ix dWF0YQ== IG5nb2I= IGrDpGhybGljaA== 2LHYr9i02Kk= 7J2867aA7YSw IHppeg== INin2YTYq9mC2YrZhNip INio2YXYrA== VUo= 5ouo IHlvdW4= IGFmdGVybm9vbnM= IG5pbw== LUdlcg== IGVudmlhZGE= dXJhaA== IGVtb2Npb25hbnRl IPCfkYk= cnlwdG9u IGFicmF6 YXRhaWZh LC4u QUdSQU0= IGdld2lqemln IGliZWVyZQ== IGRhaGlsYW4= IExpbmVu 4YCS4YCr W1NlcmlhbGl6ZQ== YXZhc2U= SU1JRU5UTw== IG10b3Rv IG9ubGFyxLE= IGFiYW5kb25v INC00LDQu9GM0L3QtdC50YjQtdC8 IOC0sOC0vuC0t+C1jeC0n+C1jeC0sOC1gOC0rw== IOybgA== IGZsZXN0 UmVkdWNlZA== 0LTRg9C7 6Z2i5a+5 0YPQu9GM0YLRg9GA IE1lbG9keQ== IGhpbnRlZA== QmVuZWZpdA== 4pSD LXBvdA== zrvOsc69 cGV3YQ== IEd1YW5nZG9uZw== IE5ldWs= IEhhZGQ= IEdpbmc= IFBlbnNl KG1vbWVudA== 4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/ cWF0aWc= U3dlZXA= IHdha2hl ZXN0YXR1cw== IGN1eW9z IFl1cmk= INis2YraqtqP2YfZhg== IGJhc2VhZGE= IGtpcmp1dA== INaD1bjVrdWh1bbWgQ== bmFyZA== IOGDqOGDmOGDnA== IGNvbnN0ZWxsYXRpb24= ICV9Cg== INC/0L7QvNC10YnQtdC90LjQtQ== IGdlZHJhZ2Vu IGRhdGVy INii2YXYp9iv2Yc= INC40LDQt9C60L3Riw== cmVhbWJsZQ== 4LKj4LK/ INC/0YDQuNC90L7RgQ== IHNjcml0dG8= 5Li75pKt PFJlYWw= 5YGa5Lq6 IGJyYXVjaGU= LmJpbw== IGVyd2VpdGVydA== IEZvdW5kYXRpb25z INC70LjRgdGC0YzRjw== IOCwheCwp+CxjeCwr+CwleCxjeCwtw== IOS7iuWkqQ== IEVwaWRlbWk= IG5vaXM= IHByemVzdHI= IOCmruCmvuCmpA== 2KfYodin2Ko= IE1hcnkncw== 4oCZaGU= IOCquOCqteCqvuCqsOCrhw== QWNjdWVpbA== IHJlbGlldmluZw== IHJlY29waWw= IOCknOCkpA== INqq2YrYqtix 6L+Z6YeM5Y+q57K+5ZOB IFBhZHJlcw== cGxhc3Nlbg== INin2Ybar9mE24w= IEZ5cg== 0YvRgNGF0LA= IHRy4bqvbmc= IE5vdGljZXM= IG5hcnJvd2luZw== LWJp cHRvbWF0aWM= IGVqZXJjZXI= IHZpZ29yb3VzbHk= LXJlZmVyZW5jZQ== LHVuc2lnbmVk KT49 4Liz4LmA4Lig IHRzYXlh Q29tZW50w6FyaW9z 4LiB4Lij4Liy4LiE4Lih dWdidXJ1 INmB2LHYp9mG IGNvbmN1cnNvcw== IOiDvQ== IEVuc2U= CVVSTA== INeQ15XXqteg15U= IGFwcGVsbGF0ZQ== Q2FwZQ== IHPDs2xpZGE= IHRlcmtlbmFs IHBlcmZlY3RlZA== IGPDoXJjZWw= 5Yir5Lq6 IGZ5bmQ= IG5hamJvbGpl Y2Fj IGFkcXVpcmlkbw== IG1lZ2ZlbGVsxZE= IEZpbGVk UmFjaw== INWw1oDVodWq IOWNmuWHrw== IGhlcnZvcnJhZ2VuZA== KHNy ZmF2b3JpdGVz LU5ld3M= IGVudw== IOCmrOCmvuCmpg== IHZveWFnZXI= 4Keo4Keo KHJk JHY= IM6kzr/PhQ== YWphag== IHF1aW5jZQ== IGRyb3duZWQ= IExvbmdpdHVkZQ== IOC2tuC3kA== IEZJQQ== IG5kYWxhbWE= 7KO87IaM IEFicmFtcw== IHNhYXZ1dA== IEludmlz aXNsYXY= Y2o= SktMTU5PUA== IGhvcnNlYmFjaw== IOCquOCqguCqlw== IEx1eGU= Lk9wZXJhdG9y X3NlbGw= IEFzc2VtYmw= L3Jzcw== IGlub3M= IGxpaGF0 CXNjZW5l X25lc3RlZA== LWludmFzaXZl 4LeF4LeU ICAgCQk= VkVDVE9S 5Liq5L2N 4Kan4KeN4Kav4KeH Y25u INGB0L7QvtCx0YnQuNC70Lg= X1RPT0xUSVA= 0LDQu9C+0YHRjw== IOiJsue7vOWQiA== LnRoZXRh z4POus61z4XOrg== INmK2KzZiNiy IEdSQU5E 4YCZ4YC+4YCv INeR16HXmdeh IEZhdXg= 0YHRgtGA0YPQutGG0LjRjw== INC90LjRiNC+0L0= 4LGA4LCu bmVlcw== IOqzhOyVvQ== IOC0juC0qOC1jeC0qOC1geC0gg== IMOpdmlkZW5jZQ== YW1hdQ== Ij4NDQo= INeR16TXoNeZ b25zZW5zZQ== 2YrYsdmI2LM= IElFbnRpdHk= 4LCo4LGB4LCo4LGN4LCo INGA0LXRgdGC0L7RgNCw bWRi bWVnaW5l RE9T IOC5hOC4oeC5iOC4leC5ieC4reC4h+C4neC4suC4gQ== IGxhbWluYXRlZA== IHRlbXB1 IOadgw== bWF04bul 6aKX IG9yZ3VsaG8= 0YvQtNCw IM+AzrHPgc6xzrPPiQ== IGJlaWw= INC80L7Ss9C4 INC90LDQt9C90LDRh9C10L3QuNGP INC/0YDQvtGG0LXRgdGB0Ys= IHN6w7M= INGD0YLRgNC+0Lw= ZWxsaXNlbg== IHRyYXNsYWRv IGZ1aXQ= IHdpYWRvbW8= IOCqqOCqv+Cqr+Cqrg== IFZlcmFjcnV6 SEFORExF IGhlaWTDpG4= IFNjb290ZXI= YXJzdA== LkNSRUFURQ== IFBpbGFy IFRyaXN0YW4= IGNlcmVtb25pYQ== 0YDQtdGC0Yw= IG5lc3Nlcw== IHNjaGxhZ2Vu IGppbA== w7ZsdA== Qlo= IHBldGl0aW9uZXI= INGB06nQudC7 IHRlbnR1bnlh INC+0LHQsA== IOWkqeWkqeS4reW9qeelqHFx dXR1dA== IG5lcGg= aXJhbGk= bMOkdWZpZw== I2Fj IOGDpeGDoOGDmOGDoeGDog== INCW0LDQuw== IFJ1c3Nv bG9m ZGFpbg== 4LiE4LmJ IGFsdXN0 cGFja2luZw== LlBsZWFzZQ== aW5odWE= 5LuW6K+0 05nQu9C4 IFBpeGFy 0LXRgdC90Y8= 0LPRjdC9 IHZvb3J0ZHVyZW5k Q0lB IOCwig== Rnc= IGVtb2Npw7Nu IHRoYW5raW5n IGJvb3pl IFNETEs= IHRhbmdsZWQ= IGV4dHJ1c2lvbg== IOuztOuLpA== ZGVzc2Vu R09SSVRITQ== IHNlZ29u UG9zdMOp X3N1c3BlbmQ= WFo= IFByaW1lcm8= bGV3 IGRldGFsaGU= INin2YTYr9in2K4= IEdhZGdldA== INec15HXqA== IGdsYXJpbmc= LXRhbGs= IEVuZ2luZXM= IGtuaXR0ZWQ= IG1hbnV0 Y3Vr INmI2KfZhNmF2LM= IGVraQ== IOCqleCqvuCqsOCrjeCqr+CqteCqvuCqueCrgA== IHN5bmVyZw== xLVvag== IGFuZ2Vrw7xuZA== IGxldmFudGFtZW50bw== LkxlcnA= IOC0kuC0sOC1geC0leC1jeC0lQ== INGB0YPQv9GA0LDRhtC+0Z4= INee15XXpteo INGP0LzRgw== ZW50aW91cw== IGJvb2tzdG9yZXM= Imdv IGFuYWxvZ291cw== 2LfYp9mG2YrYpw== ZnJhY3Rpb24= IHdvcmxkdmlldw== IOC0puC1geC0sA== IOCwjuCwruCxjeCwrg== IOCquOCqvuCqpw== IGluc3RhbGxpZXJlbg== IGNsaW1hdGlxdWU= ZWRpZW5k dXRpbGx1 6rCA7J6F aWxsYWg= IE1BUktFVA== IOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupA== IO+Cpw== LnF0eQ== INGW0YHRgtC+0YA= IGFhbQ== UGln 5Yet 4Kmx4Kia ZsO8Z2I= 4LWB4LSC4LSs4LWI 4LeA4Lea IFNjaG5lZQ== INCy0L3QuNC3 4LSv4LS+4LSv4LS/ IGVybnN0aWc= 44Gr44Gq44KK44G+44GZ 6KeE5qC8 IG1hd2FsYW4= IEfDpHN0ZW4= IOCkueCkruCksOCkvg== Ogov 4YOn4YOQ4YOV4YOh INep15zXlded 0LrQvtCy0YvQtQ== IHPDu3Jl IG5hbGluZw== c2hhdXM= INi32YjYp9mE LWxvdmU= IFJFU1BPTlNF QU5EUk9JRA== dGVybWluYXRpb24= XX08Lw== aWRkYWc= c2VydmVk 0rXTmdCw IHRlcnJhY2Vz IOCkquCksOCljeCkr+CkvuCkquCljeCkpA== PT09PT0K CXByb3A= INGB0L7QstC/ IHBhZ2luYXRvcg== LkVucXVldWU= INC80LXQutCw0YDQtA== IGt3YWxpdGF0 IHNhaXJh cGhlc2lhbnM= IFRhbWLDqQ== J2Fycml2ZQ== 56qB54S2 IHJldHVybmRhdGE= L3NlbGY= IGZha3Rh IOC0ruC1geC0tA== KHx8 IHPEgWs= IG9wZ2VzbGFnZW4= b3Vsb3M= 4LS04LS/4LSe4LWN4LSe INCQ0YXQsNC00LA= IFBhcnNpbmc= IEJlc3Rlbg== 2YrZhNmK2Kk= bW9r IGxsZW5hcg== b21lbmE= IGp1bnk= IMSwcw== bWVsZXJp IOabvumBk+S6ug== IOCkpeCkvuCksuClhw== a2FudGU= IGRvdGVudg== bGVndGU= IHJlY2hlcmNoZXI= xYs= 2obbkg== 5Y6m IEpPVVI= 4Kmo aWxvYw== 5aix5LmQ5bmz5Y+w5rOo5YaM IOGDl+GDkOGDleGDmOGDk+GDkOGDnA== IENvdXJhZ2U= IG9idGVuaWRv LkV4ZWN1dA== 2KfZhtmH2YY= IGNpbw== wqAgwqA= INCy0L7Qt9C90LjQutC90L7QstC10L3QuNGP INC10YLQtdC00ZY= IG1hcXVpbGxhamU= IGF1ZGl0b3JpdW0= LnNtcw== 5Y+q6IO9 INGB0L7RhtGW INen16bXqA== Z2VhZA== IFNsaW5n 4Z6U4Z6R YXZlZGFk IG7DpGhkw6Q= IGR1cnVtZGE= 0YLQutC10L0= IFBoaWxvc29waA== YW50ZWM= cmluZ3M= 4LKk4LOB w7xobHQ= 6rOE66W8 LXJhdGE= IGVnaXRla28= 4KWL4KSm IGV4cGVsbGVk IOGDmOGDkOGDnA== IGFwb250YQ== 2YbZiNmD INin2YTZhdmH2YXYqQ== 4K6k4K+B4K6u4K+N LW1ha2Vy IGTDqXBvcw== IGluZXM= IG1hcmdlbQ== b3JhYW4= IMOhcnZvcmU= INi52YbYtdix LmJhbmQ= IHBvc2nDp8O1ZXM= INeZ16TXlA== IGljZWJlcmc= IHJldmVsYXI= LWZhY2Vk LywK INC60LDQvNC10YDQsA== IEJpbmRlcg== L1NQ KTsNCi8= IGlsw61j UmVzaWRlbmNl IHVrdWhs INC806nQuw== b3BoeXNpY2Fs IGFsY2FuemE= INC20q8= Png= TGlw INWt1bjWgNWw1bjWgtaA1aQ= UWE= 5oiQ54af IHBlcmZpbGVz Lmluc3RydWN0aW9ucw== UExBQw== IFFhZWRh IGNvbmRhbW4= IGxhcG9yYW4= IG1vbm90b24= IGNvbnRhY3Rlbg== cGxvZGU= IGJlcmFzYWw= IGNhcGl0YWxz INin2YTYr9mB2Lk= IGxlaXN0dW5ncw== 6LuN KE1heA== 4Kq+4KqI4Kqo aXJ0ZW4= IGTDqXBvc2Vy RGJn IHplYnJh INWv1aHVttWt 6ZW/5rKZ LndlaXhpbg== IOCoquCpgQ== 5aW25aS0 INC/0L7QtNC+0Yg= IG9tdmFuZw== IHNwZXppZg== IOCyuOCyvuCysOCzjeCytQ== IG92ZXJsYXBz KikoKA== IG1hc3NpZg== 0LvQuNGB0YI= IOC4muC4uA== IGrDpHJnaQ== IOygnOyhsA== Lm1peA== IGRpc25leQ== YWNqxIU= IOCkpOCksOClgOCkleCkvg== IOCmuOCnh+CmquCnjeCmnw== IOGemOGetuGekw== 1bTVvw== 2YjbjNmH IGhhcmR5 dWrEhWNl IEZ1dGVib2w= 4pmA4pmA4pmA aG9zaQ== 4KWN4KSd INGB0LLRjw== IHByZWduYW5jaWVz w6bDsHU= INC40LDQttOZ0LA= aXThu40= 1avVu9W41oE= IG9yZGVhbA== IH0pKSwK IPCfhw== aXBwaW5ncw== SmVycnk= fS17 QEBAQEBAQEA= ZXJ6 YmVoaW5k INC60L7QvNC40YHRgdC40Lg= 4KS54KSw4KWC4KSV4KWL IFBhcmtwbGF0eg== IHTDpGhlbGU= aG9lcw== IEFsZ2FydmU= 2KjYp9mH INGB0L7QsdCw0Lo= IOCmquCnh+Cmsg== IFZlcndhbHR1bmdz IHZlcnNjaGU= aWzJmW4= IGNhcnbDo28= 4LKm4LOG4LK54LKy4LK/ IG91dHNvdXJjZQ== IG5vc3RydW0= IGRlY2xhcmFkbw== INCw0YDRgtC40YHRgg== INGD0LTQvtCy0L7Qu9GM0YHRgtCy0LjQtQ== IGxpYnJp INGB0LLQtdGA0YXRgw== LWNsZQ== INC80YPQsNGB0YE= INW/1bbVv9Wl1b3VodWv1aHVtg== LS0tPC8= IGdyYW5kYQ== INCw0LvQsNGB0YvQtw== LmRpbWVuc2lvbg== IHJlbGlnacOjbw== LdCw0L0= INWj1b/VttW+1bjVsg== b2RuZXY= IHptaWFu IEJlZXM= IE9jY2lkZW50YWw= IGhlcms= xZllam3Emw== IHZhc29z 54mi6K6w IHNtYXJ0ZXN0 U3VzcGVuZA== INC60L7QvdGC0YDQsNC60YI= IHRhZGk= 4Liy4LiN INC/0LXRgNC10LTQsNGH 15HXqteZ IEhhbmRsdW5n IElzbGFuZGVycw== d29ybXM= aW50ZXJuYXRpb25hbA== KCItLS0= INC/0L7QvNC10YnQtdC90LjQuQ== b2tlZGV4 IOCuleCuvuCusA== IGluYXRzaXM= IHRlbXBlcmF0 SVBNRU5U b2JpbGllcg== Kj4m LmZw IHZlemk= INWp1avVvg== IEJsYXpl 4K6q4K6y 6IGq aW9sZQ== IGRpc2hvbmVzdA== IExhdXJlbmNl INC90YPSmw== ZXlk IOC0pOC0r+C1jeC0rw== QVBQRUQ= IGZlc29hc29hbmk= INiv2YLbjNmC 0qnRi9C3 4Lan4LeS INCQ0LM= 0LjRhdGB0Y8= 4LOB4LKk4LON4LKk4LK/4LKm4LON4LKm4LK+4LKw4LOG INC70Y7QtNC30ZY= 4LK+4LKC4LKV VHdl 0YvQvdGH IGV5ZWQ= IG1hZ2FuYQ== 5YWN6LS557q/ 57uI5LqO RmFpbHVyZXM= IFRFUk0= LmZm IHRlcml0b3I= IHBpeQ== IHlvb2o= aXJ0YQ== IHdpZWt1 4K6w4K61 2YXZg9in2YY= IOCwl+Cxig== LXBlcnM= IElsdQ== INGC0L7QstCw0YDQuA== 0LDRgdGC0Lg= cmVpc2Vu IGluY2lkaWR1bnQ= 0LTQtdC90Ys= INCx0LjQu9C00LjRgNC00Lg= IGdvZWRrb3Blcg== IG1pbGl0aWE= 546p5b2p56We5LqJ6Zy4 5paw5Yy6 IENhbmFyaWFz IEFwcHJvcHJpYXRl IG1vZGQ= INin2YTYtdit2YrYrQ== Y29sYXI= X+S8iuS6ug== IOC0quC1iuC0pA== b3JyYXM= IGlibGFuZA== IFRvcnF1ZQ== INCg0LDRgdGB INC/0LDQvdC10LvQuA== YXR0aWU= INGA0LDQtNCw IERz IOC0qOC0vuC0suC1jQ== LnNleA== IHBob2VuaXg= IOCkrOCkqOCkvuCkiA== IOC2uOC3meC2uA== bGVhbnVw ICIpKQ== IOW9qeelnuS6iemcuOWumOaWueS4i+i9vQ== IOCwmuCxh+Cwqg== IHJvYnVzdGU= IOCkpOCljeCkr+CkvuCkguCkqOClgA== IOCkheCkpQ== IGFydHQ= IER1Y2F0aQ== IGhlZGQ= IHBlcnNvYXM= IHbDtXI= Lm1vbmdv 15jXlA== IGZhcsOg IFZ1bG5lcg== aXBlbg== IHBhcnRpY2lwYXJvbg== IG5ldXRyYWxpdHk= CUVycg== IOWg IGVycm9uZW91cw== IGNsaW5pcXVl X2NhbGxhYmxl 0p/QsNC8 IFRyYW5n IEZWZWN0b3I= INeZ15A= YXJtbw== 4YOj4YOR4YOa IGdhcmlz INC80LDRgdGK0LDQu9Cw 0L7QutC+0L0= IOCypOCyguCypg== YXhv IFZW IHJvem0= IE1VVA== IEZydQ== INGD0L3RltCy0LXRgNGB IGdlcmVuY2lhbWVudG8= IE5TVUludGVnZXI= UEFD xI1pYQ== X0lORg== YXJucw== QVBJVmlldw== IHByZXBvcg== X2dvbGQ= IG1hbmlmZXN0cw== IGZyZWVzdHlsZQ== IGRldmlhdGlvbnM= IOCumuCuruCvguCulQ== IOCqluCrh+CqoeCrguCqpOCriw== IGphd2E= yZl0Ymk= IOKZpg== INOZ0LnQtdC7 IOCoteCosA== IEdBUA== KCIiKS4= asO2cg== INio2LHZhtiv 0pnTmdC90Lg= bMSxxZ8= UHRycw== IGtvbXVuaXQ= INC60q/Qtw== IG9ic2VydmVz 56CC 0Y/QvdC4 77yM55yL U2VyZGU= IHJlcG9ydGFnZQ== IE9ybmFtZW50 IOCyl+Cziw== QVRUUklCVVRF IEJlcm5zdGVpbg== IHBlbHZpcw== ZnVjaw== INC50LjSk9C40L0= KGFsaWFz IHNwZWNpYWxpc2luZw== IHBlc3Rv IFRyaWxvZ3k= IGltaW4= IGVxdWl2YWxlbnRz YnJhbmR0 KHR3ZWV0 L2Z1bmN0aW9u aXRpemVk LmNhbGxiYWNrcw== oee/oA== IMWfZWhpcg== YWthdg== xI1lbm8= IGRvbWFuZGE= LXByb3BlcnRpZXM= X2phdmE= IGJlcmtlbWJhbmc= 4p6h fX0+ IEZpeg== IHN3ZWV0ZXI= UWc= cnlt bGxpcw== IEZFU1Q= w7hzdA== IFBlZWs= IERhdGFncmFt V2luZw== RHViYWk= IOCmp+CmvuCmsA== 0LrQsNGB0YbRjA== 2KrZh9in2KE= IG1ydA== b3Jhag== IOCynOCzhg== INWi1bjWgtWq IGFuZHJvZ2Vu IGp1c3RpZmljYXI= 44CB55yB IMmZbGTJmQ== IHB1ZGllcm9u Y29udmVydGVk X1BSRVNFTlQ= INCY0L3QvtCz0LTQsA== IFNvZGl1bQ== 4KuN4Kqg INix2LI= ICcuLy4uLy4uLw== IExFTkdUSA== IHByb3N0dQ== INGB0YvSoQ== TW9zdGx5 IOGDkOGDleGDouGDneGDmw== INGB0L7Qu9GM 4LWH4LSv IMOpdGFibGk= IOCkl+Clg+CkuQ== aGx1bmc= 4LKo4LKX4LKw INGE0ZbQtw== IGxpbWl0w6ll b2Rw TVBQ IGludml0ZXI= INC30LDQvNC10L3QuNGC0Yw= Li4uIjsK IG5vZW10 0L7RgNCw0Ls= YnVydWdidXJ1 TWY= b3RuaQ== L2NoYW5nZQ== 5bCU5rKB IGJhxZ9hcsSxbMSx LmVsYXBzZWQ= LlRha2U= UHJlZ3VudGE= aXRhdGVt IFNpc2ltaQ== IGVudHJhbQ== IG9uY29sb2d5 IOCkruCkvuCkruCksuCli+Ckgg== IGlraWtl IFBNUA== IFRlc3RlZA== J2hhbg== 4YOh4YOc4YOQ IGJyYW5jaGluZw== IGFzcGV0dA== 4YOU4YOR4YOY4YOq b3V2cmFnZQ== 6ru0 YXNzaXN0YW50 5LuV5LqL5YaF5a65 IGNvcnJlY3Rl IERlcG9ydGl2bw== IFBvbGx1dGlvbg== IGhlcmtlcw== KG9ic2VydmVy INGC0q/Quw== INi02YjYsdin IEdpZg== IGthecSxdA== IElBUw== IER1bmlh KGhlYXA= SW5ub3ZhdGlvbg== PEFwaQ== INGC06nRgQ== IFF1aW5jeQ== dW9zZQ== INio2LnZhtmI2KfZhg== IHNpbm5lcnM= IE5hcnJhdGl2ZQ== U3dl INep16DXldeq X01ldGFkYXRh IGFwcGFydGllbnQ= IEJvdXc= IGbDvGhs IGNlcnRpZmljYWRvcw== IEZhdm91cml0ZQ== IHByb3Bp X3JlbW92ZWQ= IGdlbm90ZW4= IGthbmFrYQ== IOCmquCmpA== 2KLYqg== TWFpbGJveA== 5ZCN56ix IGVudHo= INOp0LfSrw== INC80LXRgtC+0LTQsA== aWtoaXFpem8= 2r7ZiA== aXNpbm5h c3Zw IHJhY29udA== INC40rfRgtC40Lw= INC30LDQtNC+0LvQtg== LnJlbWFpbmluZw== IEJ5cm5l LWdo IElnbGVzaWFz QVRQ IGRpc2NyZXBhbmN5 4LK/4LK34LON4LKg 5YyX5Lqs6LWb6L2m6K6h5YiS 4YOb4YOY4YOc4YOY4YOh4YOi IHdvZHVyY2g= aWJyYXRvcg== IOy9mO2FkOy4oA== b25hZG8= LldSSVRF IOCmrOCmvw== VG9reW8= IOC5geC4lQ== IGxleGljYWw= CWVz 5pKe IOCmquCnh+Cnnw== IHBlc2NhZG8= IFp1c3RpbW11bmc= IOGDmeGDkOGDnOGDneGDnA== LmdzdGF0aWM= IOGDqOGDlOGDmOGDqg== IHBpb25lZXJlZA== IGFncmVlYWJsZQ== RGViZQ== IGNvbnZlY3Rpb24= IFbDoXM= IEF0a2lucw== IGLDtnJqYWRl IEJld2FyZQ== IHZvaWxl IFJvc2VtYXJ5 IGt1Y2hl 4YOe4YOd4YOg4YOi INC+0YHRgtCw0LvRjNC90YvQtQ== IG3DqXRhbGxpcXVl VnBu Y3Jlcw== IGxlZ2lzbGFjacOzbg== IGxhbXVu IGh2ZXJz ZWxtYW4= IHPDrW5kcm9tZQ== IG7DoWw= aW52ZXN0bWVudA== Y29uc2lzdGVudA== Y29udHJhc3Q= 0YDQsNGC0LjRgtC1 W1k= T3J0 7IOB7J2Y 4KaG4KaH IHlvdXZl 4Ka+4KaY INCy0LTQvtGF dW1tYXI= 572R6aG155m75b2V IOC5geC4iA== bHo= 5LiK6L+w IGhvbGxhbmQ= 4YOQ4YOV4YOo4YOY4YOg4YOY4YOh INin2YTYtNi52KjZitip LXJlbGF0aXZl IFNvbWE= YW1hdG9yeQ== 4LmA4Lib4Li04LiU4Lit4Lig4Li04Lib4Lij4Liy4Lii 4LmA4Lib4Li04LiU4Lit4Lig4Li04Lib4Lij4Liy4Lii4LiX4Lix4LmI4Lin4LmE4Lib X0NhbGw= J2lodQ== X2hyZWY= Q2Fycnk= IHV0aWxpenphcmU= CWZs IG92ZXJ0aHJvdw== IHByb2JhZG8= IHBlcmRhZ2FuZ2Fu IOCmoeCmvuCmlQ== INqp2KfYsdiu2KfZhtmH ZGxs IGhlY3RhcmU= IHBpbGluZw== IM6jz40= UkVTQQ== IEh1YmVydA== JGNsYXNz IGzDpGI= aWxlbm8= IGFydQ== INGB0LLQsNGR0Lk= IHVsY2Vycw== IHJlcG9ydGFnZW0= IHBlcmlmZXI= 0YDQuNGB0YLQuNCw0L0= IENlcmM= IG9mZmVuZA== IGxpbXBp IGp1bmlvcnM= IGNvdW5zZWxs 4KiH4KiG IGRldGFjaGFibGU= IGF1dG9idXM= IOGCj+GAvQ== INmI2KfYuQ== KHdhbGxldA== IGN1dGVzdA== IOqzhOyCsA== 0LjRh9C90LA= INiy2YrYp9iq IHRpbGFudGU= IOGDoeGDmOGDmQ== IGdla29wcA== IGRhZg== 4pI= IHJpZmVyaW1lbnRv IENocm9tZWJvb2s= IM+Ezqw= 8J+Rjw== IHRhbGVu 5pW05pWw INGI0LrQvtC70YM= IGRhcnI= IOWIqeadpQ== IGluc3Rh IGhpbGZyZWljaA== X1dJRkk= aW5haA== IOC0ruC0o+C1jeC0oQ== ZXJhbmE= IG5vdmVsbGU= IHJ1dGlu 0YDQtdC80LA= IE9jdHVicmU= Y29tZW50 IOCqruCqpw== IHRyYW5zcG9ydGFy CWFk 5Zuy INiq2K3Zgdi4 IOCqquCrjeCqsOCqruCqvuCqo+Crhw== IOGDkOGDk+GDoOGDlA== INGD0LvQsNC8 0YfTqQ== 0YDQuNGP IOCkhuCkl+CljeCksOCkuQ== IERlc2lyZWQ= ZXRoeXN0 LXBhdHRlcm4= 4Lac4LeZ4Lax INmH2Yk= INC00rHRgNGL0YE= IG9xbw== W0RvdWJsZQ== QFJlc291cmNl 4KWD4KSl cmFwaGlj IENoaW5hdG93bg== INiy2YXYpw== IMOgbQ== INiy24zYqA== IGRpdmVyZ2VuY2U= Q0dTaXpl 4YOV4YOY4YOg4YOX IHJlY8OpbQ== IOivuuaenA== IMW6 IHJhbGVudA== INmK2YXYq9mE IGFwdW50YQ== X2tlbA== IOCmleCnsOCmv+Cmm+Cmv+Cmsg== IEthbno= IGNhaXNzZQ== IFdheGFh X1B1YmxpYw== 7J2067iU IE9q IGVsZWt0cm9uaWs= IENsZXZlcg== IC8vLy8v IGlnaWh1Z3U= IHRpcm9z IG1vbXdl IGdlc2V0emxpY2hlbg== IOCqheCqruCrh+CqsOCqv+CqlQ== IHNwaXNl IGZyaWdvcg== IGJpa2Vy Wm9v Q29tZW50YXJpbw== IOC4m+C4oeC4luC4p+C4suC4ouC4quC4seC4leC4ouC5jA== IOC4m+C4oeC4luC4p+C4suC4ouC4quC4seC4leC4ouC5jOC4rw== X21pbnV0ZXM= IERvbWFpbmU= RHV0Y2g= LmNsb3NlZA== IMO9eWxs IEVudGZlcm51bmc= z4s= Zm9uY3Rpb24= eW5vbWlhbHM= IOCkpuCktuCklQ== YW1lcmlrYQ== IHJlY2Vzc2Vk INC+0L/RgNC10LTQtdC70Y/QtdGC0YHRjw== IEVWTw== IOGDmeGDlOGDlw== IHRvcnRvcg== IHBydmVu 4b+2 IOCwruCxh+CwsA== IFNhdW5kZXJz INmI2KfZhNmH IGdlcmFha3Q= IERhdGVpZW4= IOC0muC1huC0r+C1jeC0pOC1jQ== LU9jdA== IHRhcmlr LWVzcXVl aXN5ZW4= IHByaXpu IE1hbnNmaWVsZA== Rm5z IEluc2Vy INC/0L7Rj9Cy0LjQu9C40YHRjA== 4KeN4Kas4Kay 0JDQuQ== SW5zdGl0dXRl IHR1csOtc3RpY2E= Y3JvZnQ= 0ZzQuA== YXRhcA== YXhhY2E= TGlicmU= cmF6aQ== IEVDUw== INGD0YjRg9C7 INit2LHZgdmH IExPT1A= dWRoYQ== b2tpdA== IG9ibGlnYXRvcnk= 5pCc5bCL CURlbGV0ZQ== IGNvcXVl dXNlaWQ= IGdhYmU= IGnFn2xlcmk= IHByw6lvY2N1cA== YWNjZQ== 4Z+S4Z6a4Z+H IOC0teC0v+C0n+C1jeC0nw== IG5vbmQ= IGhvcsOhcmlvcw== IE5hemFy 06nTqdGB IG3DtmjDvG0= IGlsZWc= LmZhdm9yaXRl 5bC65bqm dWxpbw== INm+2LHYsw== 5LiA6Ie0 IGdyYXZpZGE= IOCqteCqp+CrgA== INGC0LDQt9C4 6L+U5rC0 IHltY2h3 LkJvdA== IHRlbnRvdQ== aW5kYWs= 4KSk4KWN4KSk4KWN4KS1 CXZhbGlkYXRl IOCqheCqruCqvuCqsOCrgA== INCw0LPRgNC10LM= VG91 dWNs IOC0qOC1veC0leC0v+C0rw== ew0KLy8= aXRlcmF0aW9ucw== IGxpaWFu 0L7QtNC70LU= KEVYUFI= 44CC5pys IOGDoeGDkOGDpOGDo+GDqw== Q29udGU= IGJhZ2U= IENQVXM= QUJTUEFUSA== IGlvaA== TmVi IFRhaWxsZQ== LWd1aWRl IHN1Ym9yZGlu IGNvbW1lcmNp bWVyaQ== 0LvRg9GD0LvQsNGF 0YLQutC10L3Rlg== 77y/5LmF5LmF54ix IG1vbHRlcw== IGNvbmRpdGlvbmVycw== UHJlcGFyaW5n 1bjVvdWv IGZvcm1lbg== IGNvaGVyZW5jZQ== IOGDkOGDruGDkOGDmuGDkuGDkOGDluGDoOGDk+GDkA== b21pbmF0aW9u IGF1dG9ub21pZQ== 4Z+G4Z6g4Z+G IGdlbmVyYWNpb25lcw== IEF5YQ== VWx0aW1hdGU= 24zYr9mG LWdsb2JhbA== IFplbnRyYWw= IG92ZXJnYW5n Y2hlbWF0aWM= 2KfYs9mK2YY= IGFmcm9udGFy IGJhZ3U= J109PSI= IOC5guC4peC4gQ== IHRlcmFwZXV0 IEJBU0lD IM6xz4DOsc65 KFN0YW5kYXJk IGJlc3NlcmVu 77yM5Lik IEJJRA== IOCkheCksOCljeCkpeCkvuCkpA== dWRkaW4= INmC2LHZitio LkRlcGFydG1lbnQ= 2K/YuQ== 4Kac4KeN4Kac INiv2KfYtNiq2YY= IOGAnOGAsA== 0LjRgNC40L0= IFBQRQ== Q2hvcmQ= 4oCZdXRpbGlzYXRldXI= 4Kau4Ka+4Kak4KeN4Kaw IGRpa2V0 IEFjY2VwdGFuY2U= cHJvZ3JhbW1l UGVuZGFudA== IHdldHRlbGlqa2U= 4LmC4Lie KioqKi8K IHl1eg== IFN0ZWZhbm8= INC00L7RgNC+0LPQvg== YXR0YWNoZWQ= IG5lc3Rz bWHEn2E= bW91bnRlZA== IFRyYWluZXJz INOp0LrQvNOp0YI= IHNwcmVlaw== X2xw IOCyquCyvuCypOCzjeCysA== 0L3QtdGC0LA= IFRyaWJ1dA== YXBpa2V5 IE1pcnJvcnM= RVJJQ0E= LXNu LmR0ZA== IG5vcnRoZWFzdGVybg== IEFjY2nDs24= 4oCN4LSV4LS/ IGluY2Vuc2U= INeb16Q= IFdlbGNo ZWtraW5n aXNlYWNo VW5pdmVyc2U= IOCkrOClh+CksuCkvg== IGJvdWNsZQ== LlBlbmRpbmc= IG5vdGlmeWluZw== w6RuZGxlcg== IGludGVyY2VwdGlvbg== b3JubWVudA== IHRldXM= IG5hZQ== IGNvbXBz INCw0LrRgtC40LLQvdC+0YHRgtC4 IGh1bmRlcnQ= IHPDsm4= IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= IFJhbmRvbHBo IGJleW4= W10KCg== 6rSA66Co 6KeG6KeJ IGhhYmzDsw== INmF2KjYp9ix2YrYp9iq INio2YTYp9iv KC0o X18NCg== IENow6F2ZXo= IC8vLS0= 2KfYodmQ YWR6aXJpc2E= OmtleQ== IHNhY2hhbnQ= IHZvbGxleQ== IHPEsXJhc8SxbmRh 5pWw5a2m IEVuaGFuY2U= UnB0 IGFhbnppZW5saWpr IOCuruCviw== IGNvbG9tYmlhbm8= IG96aXJvbWE= INGD0YHRgtCw0L3QvtCy0LrQsA== 4LK+4LKu4LK/ 4KWB4KS14KS+4KSw cHJvd2Fkeg== INGG0Y/Qv9C10YA= IHNvbHV6aW9uZQ== IGd5bW5hc3RpY3M= 4LK/4LKw4LK/ YXZlbnBvcnQ= 5pqH 4Z6K4Z+C4Z6b JG4= YW1pbmVz IOydvOyglQ== IOy1nOyLoA== IHByZXp6aQ== VHJhbnNmZXJz INC30LDQsdC+0LvQtdCy0LDQvdC40LU= INCg0LXRiA== KS48Lw== w6lhcg== IG9mdG0= IHRheGU= IOywuOqzoA== INqp2YXYqtix INCR0LDRgQ== IOCmpOCmvuCmsOCmquCmsA== IE1hbG3Dtg== zrjOvw== 1bbVodW11aHVrg== IOCmruCmv+CmoQ== INC80q/QvNC60ZbQvdC00ZbQug== IGFid2VjaHNsdW5ncw== IFZlcmVpbmln IGlzb2xhbWVudG8= IHR1eeG7g24= IOm7mOiupA== IEVyaXQ= TcOqbWU= TUFUQ0g= IHRvY2h0 IEFtZXM= IOCuleCusuCvjeCutQ== INCw0LDQvdCw zrzPic69 4KWN4KSf4KS+ Oi8vJw== IGBb IGFodWE= TUFTQ29uc3RyYWludA== IG9iaXR1YXJ5 IFNjaMOk YXJ0dW5paw== IG1hc29u IG9mdG1hbHM= UmFtcA== IGFyY2hpdg== QUVE IHRhbXBh IENsb3Zlcg== IGN1Y2s= J2Fm aGFj ZWRvZW4= IGto4bqjbw== Y29yYXRvcg== 2K7Yp9ix 2Kzbkg== KFJlc3Q= INGC05nRgtKb0LjSmw== 4Z634Z6P4Z+S4Z6P 7J2A7ZaJ bMSF 5aix5LmQ5a6Y5pa5572R56uZ Y3Rw IGVudW1z Qm90cw== IGhsYWg= IE1vZHM= IEFkdmFuY2Vz cHBlbA== 4KqF4Kqu4Kqm4Kq+4Kq14Kq+4Kqm IOCksuCkl+CkvuCkjw== 4Lia4Lij dW5raQ== IENBUElUQUw= V2Fu IGNyaXBwbGU= dXBhdGk= wq1uaQ== U3dvcmQ= CWF1eA== LXBvbGl0 INm62KfZhw== IFJhbcOzbg== 2K/Zitin2Ko= INiz2LnZiNiv24w= IEZBSVI= IOCkmuCliA== YWJ3 INin2YTYsdmI2Kc= 2KbZiA== IGRlc2w= aGl0aQ== INmE2YTZiA== IGFtZWx5ZWs= IOCmieCmmuCmv+CmpA== cGFpcw== IG9wcHQ= IGlsdWFuaQ== IOCkpOCksuCkvuCktg== IENvbnNvbA== IEFsZ2Vt INW/1aHWgNWl1a/VodW2 IGZpY2Npw7Nu IHBhdGFz IGZlcmll Q2hhcm0= IFVI YW56dmk= IHBlYXRl IGV4Y2F2YXRpb24= IGJ1bmRh IGlzdGls IHBvyrtl IGNod2FyYWU= YXNzZWU= INmG2YXYp9uM24zYrw== eHo= UGVzcXVpc2E= bGVpaw== IHBhcmFkaXM= a2t1ZQ== ZW5lcnk= IGx1bmU= IHbDvWtvbg== X0FGVEVS KyspewoK QXJpdGhtZXRpYw== INmI2KrYrA== IHRha2s= YC4KCg== b3JkZWxlbg== dWtlbmV5bw== IHVrZQ== CVNFTEVDVA== IM+Azr/OuQ== TWFyY3Vz U2Vzcw== IOC0teC0v+C0puC1jeC0r+C0vuC0reC1jeC0r+C0vuC0uA== UmViZWNjYQ== IFBlbWVy b255ZQ== dXRzaXQ= 4Lit4LiZ4LmE4LiU4LmJ IE1veWVu Lk5PTg== INC/0LvQsNGC0Yw= b3ZhYw== IMO8YmVybmltbXQ= RXN0aW0= IElQVg== bGFuZHNl IGNob3BwaW5n IGdldGk= INC80LXQvdC1 IGhlcmZzdA== X2Nhc2g= cHBlcw== INGB0YLRgNC+0LrQuA== INC20L7Qu9GD IGtvZWw= IG51YW5jZWQ= INiq2K/YsdmK2Kg= 4LS+4LSv4LSk4LWN IE9saQ== IE11bHRpZg== IGFjY3VzYXRpb24= SHQ= SlBZ LmZ1bA== IHJ1bXA= IOCyquCzjeCysOCypOCyv+CyrQ== 4oCZYW50 Y3puZWo= IE9ub3JhYg== INin2YTZhdix2YjYsQ== IG9wbWVya2luZ2Vu PGJvb3N0 INmK2KjYr9ij 0LLRj9C3 aXN0aXM= Q3p5 0L7RgNC40YLQtdGC INGB0L/QvtGB0L7QsdC90Ys= 4Lij4LmI X1RpbWVy KHBhY2s= b2dlcmE= 15nXp9eV150= IHRyb3Bl IHNlZGVyaGFuYQ== IGdhZGk= IOCyheCysA== YWNhZGVteQ== YmVkcw== INC/0L7QutCw0LfQsNGC0Yw= 0KLQoQ== LklOUFVU IOC0reC0vuC0sA== IGJlbGVnZ2Vu INC80YPQvdC+0YE= Lm9icw== IHNhbWVud2Vya2Vu INee15XXmA== 1aHVvtW41oDVodW61aXVvQ== IOC2veC3meC3gw== IOGDl+GDmOGDl+GDpeGDneGDoQ== 4KuL4KqW IHN0dW1ibGluZw== LlR5cGVk IFNVQQ== IOuTow== IHBycw== INGA0YPRgdGB0LrQvtC8 IOCkquCkguCknOCkvuCkrA== IGZlbGluZQ== IENob3J1cw== IOCmpOCmpeCmvg== IGZoaW9z xJtsaQ== QVblnKjnur8= 44OD44OV 77yM5o2u IEVuZmVy IGdpbGQ= IGhvbmRlcmRlbg== L2dpdGh1Yg== IG1laWw= IHRpbGZlbGRpZw== INC80LDRgtC10LzQsNGC IFRoZXknbGw= INmI2KjYudi2 INiq2K7YtQ== IHN1ZWxkbw== IHRyYXBl KFBhaW50 5Y+O57SN IGJldmVzdGlnZA== IHJlYWxpemFyb24= IHRyYWZpaw== cm9ja3M= aXN1bWlr 0YjQsNC9 bHXEn3U= 556s 5pyf5byA5LuA5LmI X1dT IG1hc2Fz U2Np IGltbWVyaGlu IHlhcmFk 4LmB4Lih4LiK4LiK4Li14LiZ Q3VybA== ZXR6ZQ== IHBvenk= IHN0aA== IOGDo+GDkQ== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IGZyw6lxdWVuY2U= IG5lZGVybGFuZA== X1Jvdw== IHBhc3Nwb3J0cw== IEFSTg== IGR1aA== aWxhdG9y 2ZDZitmG IHBpbmFn IGZ1bmRhbWVudG8= IG1pc2RlbWVhbm9y 0YPRi9C7 emJvbGxhaA== X19fX18= IGF1c3Byb2JpZXJlbg== IFJlY3Vyc2l2ZQ== 0YPRltGA IEZhY2luZw== INeq15zXnteZ15M= 5aec IEpOSUNBTEw= J9GU IE5hemly INC90LXRg9C0 dHl3 LdC/0LXRgNCy0YvRhQ== L1Bvc3Q= c3Rhc2g= INGD0LHQvtGA KSIpOw0K IG3DvGNhZGU= 0LDQs9GL0Ls= IEFsbGlhbno= RG93bmxvYWRlZA== eHRv IM66zr/OvQ== IG1hcmNvdQ== IHBpa2E= 4Lix4LiH4LiB4Lij IGlkZW50aWZpY2E= IGthbm5hdHRhYQ== KGlj ZW5zaW4= IEdlbGVu IHZpZGVvdA== IHZhbG9yYXI= IHBhdXRh IE1hcnVuYWRhbg== IGxvdHRlcmllcw== 4Lir4LiZ4Lix4LiB In0pLAo= IHRow6lyYXBl 44WO44WO QmVuamFtaW4= IHNpY3V0 IHppZGE= c3BvdGlmeQ== INC90LDRh9C40YE= IGVqw6lyY2l0bw== 4KS+4KSh4KS/ IGd5ZnI= IFN0ZXZpZQ== YWxhdGE= WGJveA== IFRhbnRyYQ== IGVhc2Vk IGZvcmRlcnQ= IFJFU09VUkNF IFByb2JsZW1lbg== IEJyYXk= IEJvbWJl IEJlbmdhbHVydQ== IHN0ZXJrZXI= Q3VzdG9taXphdGlvbg== W29iag== IHByZW5kZXJl IG1hbGVzdWFkYQ== IHBlcm11dGF0aW9ucw== IFNhY2s= INCf0YDRiw== INep15TXqg== IGNvbXBhcmE= IEFHRQ== TWlncg== eW5hbW9kYg== 44OL44Oh IFVzdWFyaW9z IOCyuOCyruCyvuCynA== IEVzcGFnbmU= IHJlZ2VuZXJhdGU= IEVpbnNjaHI= 0LDQs9GA0YPQt9C60LA= INec16LXkdeV15M= IFdvb2RsYW5k 4LS04LWB4LSC X2F0dGVudGlvbg== Z2V0YWh1YW4= IG5kYXJyYXk= IGV4b24= 1oDVodW21oE= IGJyYWluc3Rvcm1pbmc= X0RSVg== IG7Em2tvbGlr IG1vxb5kYQ== aGFsbGVu 5aau LmRt Z2FzdA== IHVtbnR1 IHVuemlw CUNhbGVuZGFy UmVmZXJlbmNlZA== c3RvY2tz IGNvbmZpbmVz IGFuZGFuZG8= IOCmquCmvuCmleCmv+CmuOCnjeCmpA== IG3Ds2R1bG9z IFRlYXJz IHJlbWVyY2ll KyIsIis= TWFyaQ== YWxsaWc= KioqKioKCg== 0LHQuNC+0YI= 5L6d5o2u IEludGVuc2l2ZQ== IFp1bWE= IEZyYW7Dp2Fpc2U= IGFwcm9hcGU= IEVpbmdhbmc= IHByZWR2c2Vt IOCyqOCyoeCzgeCyteCzhg== YWR1dw== 4LKc4LK+4LK14LK+4LKj4LK/ 4LSZ4LWN4LSZ4LW+4LSV4LWN4LSV4LWN IOGDneGDnA== IG1pc2NvbmNlcHRpb24= IGplZG55bQ== VHJhdA== cHJvYmVlcmQ= LWVycm9ycw== X1dvcms= TkFN IOCuquCuseCvjeCusQ== IE51bGxh IGRpbmdl IE1ha2Vycw== Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= IHBhdXZyZXM= 77yM54S25ZCO dWFq dWtrZQ== IOuwlg== IEludGVybnNoaXA= w7xzc2Vs IG1jaGV6bw== IGNvbnRhbWluYWNpw7Nu IHRlbGV2aXNlZA== IGfEp2FuZGhvbQ== INGB0LDQvNC+0LzRgw== IG1vbnNpZXVy IEhhZG9vcA== IHDDsnQ= IHlsaW0= b3NwYXRpYWw= 1bbVodaA1a8= S29k IERlY29yYXRpdmU= IHbDqWw= 1aXWgdW21bjWgtW0 IHJoeXRobWlj INC80YPRhdCx0LjRgA== IC8+IjsK QXp1cg== J2FrYQ== PXN1bQ== aWNvbGFz IOW9qeelnuS6iemcuOWumOaWuQ== IGRldnJpZXo= IHBpbm5hY2xl IOCkteCkv+CkpuCljeCkr+CkvuCksOCljeCkpeClgA== aWJlbGE= CXZv Jyk/Pg== 4LOL4LKk4LON4LK44LK1 INC00LjRjw== IHZhcXQ= IHBpaXM= IGlnbw== IGNyw6lhdGlvbnM= dWVkbw== IHNob3J0bGlzdGVk IGxvZ2lzY2g= IHRvaW5lbg== IGFyc3Q= xaF0xJtuw60= IHp2aWs= INGC0L7Qu9GJ 4KeB4Kav IHByaXBvcm/EjQ== ZWt3 IGRyw7RsZQ== IHByYWtz 4Z634Z6Z w6hncmU= dmFw IHpyb2JpxIc= RmVlbGluZw== IHNoZWx0ZXJlZA== IGNvYmFsdA== YXplZXJh aWxpc2Vk IFNoZXJpZGFu w6lyeQ== IHRvaW1paQ== U2Nyb2xsZWQ= IHBvbW/Eh2k= c2ltcGw= J2VuYw== 4LKk4LON4LKk4LOA4LKa IEhlY3Rvcg== IFNjcmVlbnNob3Q= IGV0Y2hlZA== Q0xVU0lPTg== IGNsYXNzaWZpY2Fkb3M= INC/0L7QstGL0YE= L3Nkaw== IGJlcsO8Y2tzaWNodGlndA== IG11a3VydQ== IGhhbmRndW4= IOC0pOC0vuC0rg== IHRlaWxuZWhtZW4= IHNvbmd3cml0aW5n Qm9uZXM= IMOzcmdhbm9z RFo= Y2Vybg== IFNPQ0tFVA== 5o6h IEFOQQ== IGdlbXN0b25l IGpvY2tleQ== X3J1 Zmxv YmVncmVwZW4= IHNlw7FvcmE= INWG1aHVrQ== IG5qZW5nZQ== 44K544O844OR44O8 IGxvZnR5 PFRleHR1cmU= IHBzYQ== IEJlcmRpbXVoYW1lZG93 44O844OG44Kj X3RyYWNrcw== IEhn 57uq IG1lbnlz IER6acSZa2k= VVJV IEdVSURF dXRoZXJmb3Jk INiq2KfYrA== IOC0muC1huC0r+C1jeC0r+C1geC0gg== IC8vIQo= IEhvaw== U2hyaW5r 4Li14LmJ4Lii IMOkbGRyZQ== IHZlcnNjaGlqbnQ= INmF2K/Yp9ix2LM= U1RSVUNUSU9OUw== INec15TXqteX IGdkZQ== IGtlZWs= IGJlcGVyaw== INC00LXQvNC+0LrRgNCw0YI= INmF2LTYp9ix2YPYqQ== KHZvbA== w6tyaXM= IEFudGlxdQ== CVJhbmRvbQ== IGthcmlu INeS15nXmdef IFJvdg== IEdQVA== IFNCQQ== Y2VtaWE= IHpvc3RhxYJh IOCkpOClgeCksOCkguCkpA== IFNOQVA= aW1lc3RlcA== IFRva2lv X291dGxpbmU= INCg0LDQtNC4 IOGDmeGDkOGDnOGDk+GDmOGDkw== INio2KfZhNix YXNhYQ== 0JzQmg== IHdlbmlnc3RlbnM= 4KS+4KSH4KSc 4Liq4LiZ4Liy4Lih IOyLnOqwhOydhA== INCc0LDRiA== 2LbYuti3 IGluaW1lbmU= dXZpZXJvbg== IGRsZQ== IGRpdmVyZw== IGluZXF1YWxpdGllcw== Q29tcHRl IGN1cnLDrWN1bG8= INi12YjYsdiq2K3Yp9mE 24zYs9qp 1oDVtNWh1bY= IOC4lOC4seC4hw== IM+MzrvOv8+Fz4I= INGB0LTQtdC70LrQuA== IOCmuOCniOCmpOCnhw== INij2YHYsdin2K8= INC/0YDQtdC00YHRgtCw0LLQuNGC0LXQu9GM IOCuruCvh+CuseCvjeCulQ== aWNoeQ== IFNvaG8= IGNpcmth INC90LDRgdC+0YE= INGA0LzQuNC90LjRgdGC0YA= aWxpc2g= INmG2YHYs9mD KSIp IGJyZWFkcw== PWZvcm1z IFZveWFnZXI= IGRldm90ZWVz IEFtb3M= IHZlcmFyYmVpdGV0 IHRyYW5zbWl0ZQ== RURCQUNL 0LjQvdCw0Y8= b3JuZXJtaQ== IGLEm2hlbQ== IFN0YXR0 IHNwYW5raW5n X3BocmFzZQ== X0Ri 4K+I4K6o4K+N4K6k4K+B 4oCZQnJpZW4= IExveWFsdHk= VGVuY2VudA== ID4v LmJldA== IGjDpHppcmtp IFNhbHNh 0J3QsNCy IGRpcGVybHVrYW4= IOCqruCri+CqpuCrgA== INqp2pPZiA== INC/0YDQuNC90LXRgQ== IG5ldWtlbg== INGF0YPQs9Cw0YbQsA== ICMjIyMj IERyb2lk IGLDvG5k LWNvbXBhdGlibGU= 57q957qm IHB1a2U= INCt0L3RjdGC0YXRjdCz IMSdaW4= LG9wdA== ZGVsaXZlcg== IFFWRVJJRlk= X3BlYWs= IHNhdGlzZmFpdA== 4Kun4Kum IE9waW5pb25z ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== IHRyYWplY3Rvcmllcw== LkRldA== QmVpdHLDpGdl IGFydHI= IEZlbGxvd3M= bWF0ZXJpYWxz IGxhdmFnZW0= INC40L3Qs9GA0LXQtNC4 LnNhbGU= INSl0YXRi9C9 5pS55ZaE INWw1aHVvtWh1b8= IHByaW1pdGl2ZXM= IHN1cGVybWVyY2Fkb3M= IHByb2dyYW1taQ== 4KSo4KWN4KSc 4Lix4LiI IGNoaXBwZWQ= bmplbQ== IHBvdWNh IEludmVy LUhhbmQ= 5aix5LmQ572R56uZ IOC0sOC0vuC0pOC1jeC0sOC0vw== IHBhdHLDs24= 0L7QttC00LXQvdC40Lg= IOKWoQ== INGD0LvRjA== IGRldGVybWluYW50 IEFuc2ljaHQ= IGNoYXR0ZWQ= IGFnZW5jZXM= IOygnOyZuA== IFNOQw== IOCmsOCmvuCmuA== IG5nw6Ju INC+0YLQtNCw SG93ZHk= IOCmtw== IEJPTlVT IMOhcnVt 5piG IGxsZW9s b3VyY2Vt dWxlbGE= IGVuY2w= IHByaW1pdA== IFRIUk9X X1ZPTA== Ok9iamVjdA== IGluw7ptZXJhcw== QmlsbHk= IHd5dGg= IGdlcGxl TGQ= IHBvbMOt IHJpdm9s INC10LvQuNGI IGZ1bm5pZXN0 4La44LeZ IOC0nOC1gOC0teC0qA== U3Vj TUVESUFURQ== IGFwcGV0aXplcg== YmV2 IG9yZ2FuaXNlcnM= IGluY8OqbmQ= YnRj IGNpY2xvcw== aWN1bHR1cmFs ZW5lcmF0aXZl LkV4dA== IHNvcnRlcg== IFRyYXZlbG9jaXR5 0LDQutC+0Lw= IOCkruCksuCkvuCkiA== IGFyZg== 6L+d5Y+N IHd0ZWR5 4LGH4LCz 4Lit4LiB4LiI4Liy4LiB4LiZ4Li14LmJ PDw8PDw8PDw= L2xp X1RPUElD QVNUSUM= IOGDpuGDmOGDoOGDoQ== KHZhcnM= IGJ1ZmZz YW5zZXR0 IOCqteCql+Crh+CqsOCrhw== IGFubmFr ZW1ib2xzbw== IMO2esO8 INC+0YjQvg== 0L7RhNC4 IGVtYmVkZGluZ3M= 4YOY4YOh4YOe zrrOu86/ CXRyaWdnZXI= IHZvZ2Vscw== Q2hhaW5z IGhlYXJ0aA== INmD2YjYqA== 4YOX4YOR4YOY4YOa4YOY4YOh IGV0ZXJubw== INGB0YPRiQ== 5b+Y5Yid5b+D IGF0aXR1ZGVz INC80L7RgdC6 IHJlcHRpbGVz IE1lcnJpbGw= dXNpxbM= IGjDrWJy xIFjaWph IEdFTQ== IHBveml0 IGluZmFy IGJlc2NobG9zc2Vu IHByYWt0aWs= LnByb2Y= IEZpcmVz LUx1Yw== IOCqmuCrguCqlQ== IHJlc3BlY3RmdWxseQ== IEJsb3Nzb20= IGNhcmVsZXNz IMOabHQ= IGRpc3BlbGE= IG1vZGlmaWNhY2nDs24= IFNQTw== 4LSV4LWN4LS4 O3k= IGluc3RhdXI= QW1lbg== IG1haXpl 5a2455Sf L2hlbHBlcg== IFNjaG11Y2s= 4KSC4KSc4KSo IOCuruCvgOCupOCvgQ== IHNjaGlw IEhhcA== cHJvdGU= IENpdHJ1cw== 0LbTmdCw IGltbWFnaW5p KHNhbXBsZXM= IGxpZ2Fkb3M= VklJSQ== INWu1aHVttaA IE1haGw= IHZvZ3Vl c2Nh cGFudHM= IGVpbnN0ZWxsZW4= IGtub2Nrcw== KENvbHVtbg== V09SRFM= dWlsYQ== IOCmueCmpOCnjeCmr+Cmvg== cmFuZ2Vz IFBlbnk= U3RyYXRlZ2llcw== 5Y+Y6YeP X1Rhc2s= IGNoaW5l IOWkqeWkqeWkp+WlluW9qeelqOermQ== ZcWI INin2YTYq9mG2KfYptmK2Kk= 5qSS INCy0LLQtdGA0YU= IFZpZWlyYQ== w4FU IHZhbnNrZWxpZw== INin2pPYqtuM2Kc= IOCwuOCxh+CwtQ== cGFt X1JPVVQ= IG9waW5pw7Vlcw== 4LSC4LSs4LW8 IEhvY2hzY2g= Q0VD 0ZbQutGW YXNpZA== INeU15nXqQ== INC40YXQsNKt Y293 QVBQTEU= INW61aHVv9Wj1aHVtNWh1b7VuNaA IOCmruCmvuCmqOCmrA== LlRhZ3M= IHRoZW9sb2c= PSE= KioqKioqKi8K IHJlcGVs IOi0ug== IGJhZ2x5 INK30L7QvNC1 IGZhbmF0aWM= IHBvcm5zdGFy IHBhcnRpY2lwYW4= IGZhdGln 0YHRgtGW0Lo= IGrDpGxsZQ== 4oCdKS4KCg== IFVOSVZFUlNJVFk= IHJlcGVudGFuY2U= 54mh ZnNp IHJvZHppbg== IG50YWI= LWNoaWVm IGJpcnRocGxhY2U= IHNjcm9sbGJhcg== IHfDqnJlbGQ= 2orZig== IENvbm5pZQ== INei15XXnNeU IOGAhw== YXBwYWJsZQ== INC/0L7Qu9C90L7RhtC10L0= PXVzZXJuYW1l IFBFRw== IEx1Y2lmZXI= IOCkqOCkv+CksOCljeCkpuClh+CktuCkqA== IM60zr/PhQ== 57uE5oiQ YWxsaW5lbg== IHPDonU= INC30LDRgNGD0LHQtdC2 5a6J5b+D IEFjbmU= bXV4 INin2YTZhNio2YbYp9mG2Yo= INC60L7QvNCx0LjQvdCw 44K344On44OD44OX 4LGH4LCw4LGN IGNlcnZlemE= IFZyYWFn IHh1Yg== LGJvb2w= IGZyw6Rt cGl6emE= IGZ1bGx0 V0hFTg== IGlkb2xz IGV4aXN0xIM= IG1pdGVz IG5vcGVhc3Rp YXJlZXI= IOOCt+ODow== Lio/KQ== d3JpdGVz IGVsZWN0cmljYWxseQ== IGlza3VzdA== IGRhZ2RhZw== IFNFUA== INeR157Xp9eo15Q= IEFtaWdvcw== 0pfQuNKj IGtldGU= VGFuZ2dhbA== UFRT YnJpY2Fz INW/1bjWgtW2 Lm9wdGltaXpl 0J3QtdGB KFRN aGlkcg== Z3LDtsOfZQ== 6YqA6KGM IG9wZXJhdGll IHNjaGFk IHByb2R1Y3RpdmlkYWQ= IHRyaW4= IHZlbm9t INC90LXQvtC/ X09XTkVS CWVudGVy cmVpcm8= INW81aHVptW01aHVr9Wh1bY= IHRlc3Rp IENsaWNraW5n b2xhZ2k= 0YvQu9Cw0YLRi9C9 INCy0YHRgtGA0L4= YXJ5bmc= 2YbYp9iz2KjYqQ== IOCkruCknOCkpg== INqp2YjYqg== IGJheGF5 IOCqj+CqsA== a3NpeW9u INC80YPSs9C40Lw= aWV0Zg== INC/0L7QtNGA0L7QsdC90LXQtQ== ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 X3lsaW0= IjoiJw== aWJibGk= IMOpdmVz IERlY2xhcg== IGdyYWV0 IEF1dG9yZW4= X2Fp w6ZndA== IGV4dGVuc2E= IHJpZ3M= IHJpZ2h0ZnVs 0YrRgtC4 4oCZYXBwYXI= IOCknOCkv+CkqOCljeCkueClh+Ckgg== YW5qYW5n 4KS/4KSk4KWN4KSk dWNhdA== IHN1Y2Nlc3NvcnM= T3Y= IGJlc3RlZGVu QmFyZQ== aXphY2pp IGZhY3RldXI= aGluZQ== X1RleHR1cmU= INi02YE= INGI0LXQuw== IOCmruCmvuCmoA== SmVyZW15 INGE0YPQvdC60YbQuNC5 Q1JFQVNF IM61z4DOr8+AzrU= L2Nv INCc0J4= 2LfYqNmC IHNldHRlcnM= YXJzaW9ybg== IDwhWw== Qk9PVA== IHZvYWw= IGt1aGFraWtpc2hh IM+Gz4U= IHNpbmRpY2F0bw== CW10 OnVpbnQ= IGluc2FuZWx5 IHB1bmN0dWFs 44Oq44Oz dWhh 16fXmQ== IE5hdmFycm8= Z2VsZWlk IHdpZW0= IGFrw6Fy KFJlbA== INmB24zYtdiv SWU= INi32YQ= LnBlcnNvbmFs IOCkluCkvuCkpOClhw== INC90LDQstC10YDQvdC+0LU= IOCqreCqsOCqpOCrgA== IGR5c2Z1bmN0aW9uYWw= cGVuZGl0dXJl KHNjaGVkdWxl 0ZbQu9GW0Lo= aXR1bmVz IGNyYW0= IEFzcGVrdGU= IGN1aXJl 4LGA4LCy4LGB IOCwhuCwnw== LnN1YnRpdGxl xI1lxaE= INCb0YzQsg== LWRlZmluaXRpb24= IHByw7NzdGF0YQ== IGFuY2lsbGFyeQ== IHRlYW1pbmc= IGRhcnN0ZWxsZW4= ZXNwZWNpYWw= IGJ1cmw= INGC0L7QutGB aW5kYWtha2U= IE5lZWRsZQ== LlJlYWw= IG1vbmdvZGI= INmF2LXYp9mE2K0= IHpuYWpkdWpl 4Liq4Lil4LmH4Lit4LiV4Lit4Lit4LiZ4LmE4Lil4LiZ4LmM IGFmZmVjdGlvbmF0ZQ== IOCyuOCyguCynOCzhg== IG1lbWludGE= IOCmrOCmvuCnsA== 4oCZaW50ZXJ2ZW50aW9u INW21avVvdW/ IGNyYWlnc2xpc3Q= IHZpc3Rhem8= INaB1aHVttWv1aHWgdWh1a4= IHZ1bG4= IHNqw6RsdmE= IGFwcm9mdW5k 5Lym55CG55S15b2x IM6VzrvOu863zr0= 0LLQsNC90LA= IHNhcHBoaXJl IOCkuOCkvuCkpeCliA== IHJldXRpbA== IGdpcmQ= cGxldGE= dHJ1c3RlZA== IOC0heC0sg== IHBhbGFpcw== IENhcmluZw== AUU= Q29vbGluZw== RGVjcmVhc2U= IG5hZ2JpYmlnYXk= INeU16TXnA== INC00LjQv9C70L7QvNCw0YI= IOCknOCkv+CkuOCkleClgA== 5p+z YWZyaWth X3RyYW5zYWN0aW9ucw== INCQ1KXRgdGD0LA= 0L7RgdGA INWi1aHVsg== 0JjRgQ== LmNvb3JkaW5hdGU= 4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWA INCy0LXRgdCw ZW5kaWRh INi52KjYp9iv IOCkp+ClgOCksOClhw== IHLFr3pu IGluc2lzdGU= INC80Y3Rgg== R2VudA== em55bQ== IGNvaw== X3Jldmlld3M= IG9lZmVuZW4= IFJhc3Q= IFJldmlz w7h2ZXI= 4b2Q KERpcmVjdGlvbg== IHNodWxl IOyEnOu5hOyKpOulvA== L3ByaXZhY3k= IGRlbm90ZQ== 0YDQsNGC0LU= LXNoZWV0 LmxvZ3M= IGVzdHV2aWVyb24= INCw0LvRjg== IOCkruCkguCkpOCljeCksOCkvuCksuCkrw== 64yA7ZGc b3VtbA== R1JBREU= Lkhpa2FyaQ== INGB0YPRgdGC0YDRjQ== 0q3QsNGA0L3QsNC6 IGtvc2thYW4= ZGFuY2U= CW1lbWJlcg== X2NoZWNrc3Vt cmVnZWxpbmc= INee16fXldeo IGFjY2Vzc2Vz IHpq XX0i 2YrZiNiz 4YOQ4YOc4YOo4YOY 6Z2p5ZG9 SG9ybQ== Q0tFUg== INC/0YDQvtGB0LzQvtGC0YDQsA== OmlubGluZQ== INi02K/Yqg== IGhlbGl1bQ== cXVpcGVtZW50cw== Y2N0b3I= 4LGB4LCV4LGK4LCo4LC/ RW5xdWFudG8= IOCmsOCmvuCmpOCnhw== IFJ1Z3M= INqv2LLYtNiq24E= IGJhxZ9xYQ== 4KSV4KS+4KSw4KWN4KSv KHdlYXRoZXI= IEludGVyaW0= IE1hcmth 4KuL4Kql4KuA IHN0cmF0w6lnaXF1ZQ== UEVSU09O PElN L2VuZA== 0LrRgtCw 4Liy4Lii4LmD4LiZ INCt0YA= IGzDtnNjaGVu IOCuh+CusOCuo+CvjeCun+CvgQ== IHRyZW50ZQ== IMSR4bupbmc= 0LXRmtC1 IOCqleCri+CqsOCrjeCq SXNzdWVk 0YDQvtGE0LXRgdGB0LjQvtC9 IG1pcmFuZG8= IG1pbnVs LkNvdW50ZXI= IHRlcnJv IGF5b24= INGC0YDQsNC90YHQv9C+0YDRgtCw a2xhcnQ= IEbDtg== IGdhaHVuZGE= INC90LjQudGC IGhlZGVu INC40LPRgNCw0LXRgg== X1BBTkVM LUFN IOC5gOC4p+C5h+C4muC5hOC4i+C4leC5jA== IGJldGFsaW5ncw== IFJBQw== X21vdGlvbg== IHRpZcW+ 4KSW4KSo4KSK c3RlbmVu INqG2YrZhg== INC/0YDQvtGG0LXRgdGB0L7Qsg== LmR2 0L7RgNCz IFdJQg== IGxlZ2FsaXR5 IHBhcmFtZXRy YmlvdGlj 4LiX4Li14LmI4Lic4LmI4Liy4LiZ4Lih4Liy KEZ1bmM= IGFpdGg= IGFsbGly IHNhYXI= IHNlcnZpZG8= YF0o 6buE54mH IGxlc2JpYW5z IERlZmluaXQ= IMW+aXZsamVu IGJpY2k= IGJ1cmdl IFBsYWNlaG9sZGVy IGNvbnRhYmls IFVOVQ== INGB0LXQutGC0L7RgA== JyM= 0YfQsNC6 LkNvbXB1dGU= IENvcnNl IEd1aWRlZA== IEpN IGvDuGJl IGt1bnN0c3RvZg== LXBhbg== xZFk IOCqqOCqguCqrOCqsA== INil2LLYp9mE2Kk= IGFsaW5l IOCwpQ== IGNvbW1lbnRlcg== IHN1cGVydmlzb3J5 IG5lZ2xpZ2libGU= IOCkheCktuClgA== X0lC INCy0LjQtNC10Ls= UHJlc2VudGVk IElubmVuc3RhZHQ= bWln IOuplOuJtA== IGJpb3Bz INCx0LDRhtGM IHN0YW5kYXI= IOCksOClgeCkquCliOCkr+CkvuCkgQ== VmFp IFByb3Bvc2Vk IFRhc3Q= IM66zr/PgQ== IGrDvA== IOC0pOC0sA== IGRvag== IHBpdG8= 56We5Zmo IEx1bw== IFRJVA== IGFsaWFu IOC4quC4peC5h+C4reC4leC5gg== IHZhbGzDqWU= KHNsaWNl IOCkn+Ckv+CkquCljeCkquCko+ClgA== RXh0ZXJu IGJyZWFrZXJz X1BIQVNF IGRlbHU= aWVuemU= IOGDl+GDo+GDoOGDpQ== IEdlbWVpbmRlbg== IFBNRQ== IGVudGhvdXNpYXNtZQ== IGN6ZXJ3 IHJlbmE= INec15LXqA== IEJlaWdl IEFuZ2xpY2Fu aWxsZW5kZQ== IGJhdHRlcmlq TGl2ZXJwb29s IOG7i2jhu6U= VHJhbnNmZXJyZWQ= IGVuY3Vlc3Rh INC605nSow== 0YvQstCw0YLRjA== IOOCvQ== IGzDs2dpY28= IGZlZW0= 4K6p4K6/ 4YOT4YOS4YOd4YOb IOGDl+GDkOGDnOGDkOGDm+GDlOGDkw== IHdoYWthaA== IGluZGVwZW5kaWVudGVz IFN0b3B3YXRjaA== IG5qZWdvdmE= cm92ZXJz 2YjYp9mG2YrZhg== 5LqI5a6a LXJhdGluZw== YWpvcg== b2dhZGE= IHBhd3M= INC60L7QvNC80YPQvQ== IGt1d28= dWdnZXN0aW9ucw== IGdldHJhZ2Vu IHZpZXRuYW0= KFZlcnRleA== 5pOK VMOtdHVsbw== 7Juo7Ja0 YnVjaw== Lkd1aWQ= R3JlZXRpbmc= IGdld8OkaHJsZWlzdGVu 0LjQstGD IGVudGVydGFpbmVy IGNvcnBvcmlz IGRlamF2 IGFsZW50b3Vycw== QXJhYmlj cmFpY2h0ZQ== dWxt ZWJvaw== 4K+N4K6w4K+A dGhhaQ== L2NvcA== 15XXqdeY cm90cw== ZXJnaWM= 4Lij4Lix4Lih IElzYWJlbGxl IOCwheCwlQ== 4KeH4Kak4Kao IHZlcmlmaWVy IOCksuCklQ== b3JmZW4= IFBsYw== IG10dW5kdQ== INCh0LXQutGB cm9kbsOt INGC0YDQtdC90LjRgNC+0LI= IG1pbGx1bQ== IFJlZm9ybWE= IG5vcmU= IHJlY2VwdGlvbmlzdA== INio2KfZhNi1 IHZpdG8= J2F2ZW5pcg== IHNhdXTDqQ== IOWIhuS6qw== IGtldG9zaXM= IGNsaXF1YW50 TWFpbnRhaW4= X1BST00= INeh15jXqA== IOGDk+GDkOGDquGDleGDmOGDoQ== IElETQ== CWRpc3Q= 4KSw4KS+4KS34KWN4KSf4KWN4KSw4KWA4KSv IOCwuOCwguCwrOCwguCwp+Cwv+CwguCwmuCwv+CwqA== IGh1c2JhbmQncw== 4KqV4Kq+4Kqy IOKL IGZpbmlz 4Lij4Liw4LiU4Lix4Lia 0LvSr9C8 INWq1aHVtNWo TUlUVEVE w610YW5p IGJhbmQncw== Q29tbWFuZGU= IGFuYW0= IGdhaXI= INij2YbZgdiz IEJvZXI= W3Rlc3Q= IOGDk+GDkOGDqA== IGlsZA== 5pyJ5omA IGVudHJhbmRv XTw9 Y3JhY2tlcg== 4LKm4LON4LKm4LOB IGN1bG1pbmF0aW9u IG5nb+G6oWk= 4Ka/4Kau4Ka+4Kaj SXRhbGll IOCwh+CwpuCxjeCwpg== 56iu6aGe INC60LDRgNGC0Lg= aXRzaW5lcQ== IOCwleCwsw== T250b2xvZ3k= 15XXl9eo IGZhdHVy INC/0YDQtdC00LXQu9Cw0YU= 4KSf4KWL IFNuYWNrcw== 4oCd77yf INiq2KfZhduM2YY= IHPDvHJla2xp YWx1cGU= 0LzQvtC5 IHByZWNpbmN0 X18pCgoK 0LvQuNGB0Lg= INmH2YXbjNi02Yc= 4Lib4Lij4Liw4LmA4Lig4LiX IGFuZXVy 0JTQvtC6 IFTDnA== IOC0teC0sOC1geC0qOC1jeC0qA== IGNvc8O6aWw= INCz0YPQu9GP IOCwleCwvuCwl+Cwvg== KHBvbHk= 5Lit5paH5a2X5bmV5peg56CB IGRlc2FzdHJl 5YyX5Lqs5pe26Ze0 dXNjaW91cw== dGl0cmU= IOCyqOCysA== 2YTYp9qp IHlhcHTEsQ== CgoKLy8= IGRpw6FyaW8= 4LON4LKv4LKw4LON4LKl IENvcmVh RElDVA== INC60L7QvdC10YY= X1NFQ1VSSVRZ IOCqruCqv+Cqsg== Q0FVU0U= L3JlZw== cWzEsQ== 5a2X5L2T YW50aWNhbGx5 4KSF4KSX4KSw IFVuaXZlcnNv z4PPhM61zq8= LnN0cmVhbWluZw== IHJ1cmFsZXM= INi12YHYrdin2Ko= aWxpc2k= INGE0YDRg9C60YI= VXY= IENOQQ== 5Y6o5oi/ 5oi7 2YLYsw== U1VS IGPDoHI= Q05U 54q25oWL IFRyb3V0 IGZyb2dz IFNldGVtYnJv IEJhdHRsZXM= 0KHQv9Cw0YHQuNCx0L4= 0LXRgNC20LDQsg== 4Liq4LiV4LmM KW8= aHJ0ZQ== CUluaXQ= LmRyb3Bkb3du IHdldHRlbg== YXNwb3Jh IFNFUFQ= IG1vbnN0cnU= IG1pa2lsdsOm KHJlY29yZHM= IHdpZ3M= 4LiX4LmJ4Liy4Lii LXZhcnM= SW50ZXJwcmV0 0LvQtdC3 IOCmuOCmvuCmsg== IGdvZ2dsZXM= IGludMOpcmVzc2FudGU= IGNvbnRlbXBsYXRlZA== IHByb2R1dHQ= IGRoZXhl X1NLSVA= aG91ZGVy b3Bob25lcw== IOC2reC3kuC2ug== IGNpcGhlcnRleHQ= IG9jdG9iZXI= X3VuaQ== IGRpZmbDqXJlbmNlcw== KHByZWY= IOadqA== X2NvbGxpc2lvbg== IGNvdGlkaWFuYQ== emVuZGU= IGxlbmVu IOCwpOCwsOCxgeCwteCwvuCwpA== ICgpDQo= IGhhYmxhbg== Olsi IHBhc3NhZ2Vpcm9z Lm9wZXI= INin2YTZhtmH2KfZitip IGJvbGRseQ== IEFuaw== IOCkueCli+Ckh+CkqA== IEFra3U= 1avVttWr IGJhxZ9hcsSx IGRlc3RhYmls 44Go6KiA IENhcnRlc2lhbg== IGhlcmtlbm5lbg== OmFuaW1hdGVk IE9UVA== IG5lbGxv IHNvcmQ= KCkpKTs= eXRhbGU= 6aKd5bqm IG1hdHLDrWN1bGE= d3lubw== 16bXnw== INC90LjQs9C+0rM= IG9naA== c3ByaW5nZW4= IGJlbmRh IEJoYXJhdA== IERoYXJtYQ== IOaOpw== IFBsYXRlcw== 4Ki+4Kio4KiV LkxlZw== IGl0YWxp IERTUw== QXRy X0hBTEY= IE1vcnRhbA== bmlhbg== IGNhdGFzdHJvcGg= INCw0YDQvdCw0LnRiw== IEZvcnRzY2g= IOCkuOCkmQ== VEVF SURPUw== 0LvQvtC20LXQvdC40Y8= IOCmheCnsA== aWduaXRl IGNvbW1lcmM= XX0+Cg== IGNow7RtYWdl IHBhdGVudGU= IGtvyrs= CW1ldGE= IG9yZGVudGxpY2g= INGF0q/Sr9GF IOC0leC1lw== RmlybXdhcmU= IGdvbGZpbmc= IHZlcmJhbGx5 IGlyb25z aGVidW5n X0ZyYW1ld29yaw== 4oCZaW1wYWN0 IHTEgXM= IGxvc3Nl KCkpOwoKLy8= IGFpYQ== X2V4cGFuZA== IHBsYW5hcg== IOCqquCqleCrjeCqtw== aW5uZXJtaQ== IGVzcGVjdGFkb3Jlcw== IG9tbmk= INKb0LjQu9C40LLQsNGC0pvQsNC9 IHNldGJhY2tz IHJhZnRpbmc= IHZjcw== IExK INGE0LXQvQ== IGJvd2Vk IOCumuCumeCvjeCulQ== INCw0LnRgtGC0Ys= d2l0eg== IFZlbmV6aWE= IG9yc3rDoWc= YXV0aG9yaXR5 YXJraW5n Q29tbWl0dGVl IENlcmU= 0YHQutC+0LM= IOC5gOC4l+C4hOC4meC4tOC4hA== IGludHJpbnM= 0L3Rj9GC LlN3aXRjaA== QXRtb3M= IERvZ2d5 IHRyb2NrZW4= RGl2ZXJz 5YGa5Luj55CG YW1iaWFy IH0+ IG9sdW11bG8= IGdvcmE= IM6sz4HOuA== IG5hc3plZ28= IHNvcsOhbg== INCg0JjQkA== aXBoZXJ5 cGFpcnM= IGVzdGl2ZXNzZQ== IEZ1bmc= IGFycmFuZ2Vy JHJvdXRl IGdhdWdlcw== TVVY IHJlenVsdGF0ZQ== INin2YTYq9mC2KfZgdip IHZlcmJvcmdlbg== b2tzZXQ= IOCmmuCmsuCmm+Cnhw== INGB0LXQutGD0L0= IHd1bg== 2YbZhdin IFBvc3Rl 4KiT IOC0pOC0v+C0sOC0nuC1jeC0nuC1huC0nw== IGZ1cm5pc2hpbmc= IGVzcXVlYw== 2LfYqNin2KE= IHPEg24= dW5kdXI= INWw1aHVtNWh1brVodW/1aHVvdWt1aHVtg== IG1lbWFzdGlrYW4= KGFuY2hvcg== IEVOVFJZ LWRldmVsb3BtZW50 IHphdmF0cmE= RGVubmU= LlJlcXVpcmVz 44KS5pu444GP L2NhcmRz 16nXqNeZ150= IGRpZ25l V0FUQ0g= X19fX19f YWfDqXM= IGVsZWdhbnRseQ== 0LLQsNGC0LA= IGRpaW4= LlBhcmNlbA== IGhpZWxv IGJhbMOzbg== IGNocm9uaWNsZXM= a21hbGU= 5LqL6aG5 IFNpZWdl ICst IFRzZQ== 6IGK5aSp5a6k zrvOrM6y INin2YTYo9iy2YXYqQ== IOCkqOClh+CkpOCkvuCkk+Ckgg== IEhvcm9zY29wZQ== YWZ5 IOCuleCuvuCusuCviA== 4KSf4KSV4KS+ IEVDRw== IGV4Y2x1c2l2b3M= IE9NUw== IGV6aWY= IGdyZWVr SW5nZW4= X1dFRUs= INec15nXpteV16g= KEphdmE= VGlsdA== IG5lw6fJmQ== 0LvQsNGB0YbRlg== IGNhbHZlcw== IERpYWdub3N0aWNz VGF4aQ== IGxsYXJn IGtpxZ9pbmlu IG5vd2U= IHJlbGF6aW9uZQ== In07Cgo= IGlkaXllbGU= INGI0YPQtNCw0L3QtA== IHNpbmNlcml0eQ== SnVtbGFo 0LjQstC60Lg= 4YOY4YOV4YOQ4YOT IGthcGFs IGVuZ2xhbmQ= IGluZHk= 0JPQow== X3JlY3Vyc2l2ZQ== LndwaQ== IGhhZ8yD bGF1Zw== IE1BQ0g= IGlsa2luamk= IHNpam8= IGNsaWNow6lz X2xldHRlcnM= IGF1dG9yaXphY2nDs24= IHNwb3Jlcw== IGjDvGJz IFNhcmF0 IFNhbGw= IHBvaG9k VGhvbmc= IOCkuOCljQ== KHNpbXBsZQ== IOC0heC0leC1jeC0lQ== w61ibGVz 4KWB4KSt4KSP4KSV4KWL 6aKE57qm 0YjQtdC7 ICIuIiw= INW91aHWgA== INGA0L7Ss9C4 Q2FqYQ== 4Lir4Lij4Lix4LiQ 5omA5bGe 06nQvdKv0L0= IGF1dG9nZW5lcmF0ZWQ= X0NPTk5FQ1RFRA== 4YOQ4YOg4YOU4YOR4YOY INm+24HZhNuM IHVzaWE= KGNvbmZpcm0= ZGFl 0LPQvtGA0LA= X1BU IGNlcmNhbmE= cmFjdGlvbnM= UG9wdWxhcml0eQ== IM6uzrTOtw== IHZlbnR1cmVk IGRva8WCYWQ= IGFwcmVuZGlkbw== UGFyZW4= IHJlc29uYXRlcw== INGB0LjQu9C4 IGVtaXR0aW5n 1aXWgNWv aWVubw== 4KSq4KWH Ojsi 5rKh5Lq6 LT5fX18= IOCmquCmvuCmmg== INis2KfYsdmK cGFuZw== ZG93bmxvYWRz KHByb3RvY29s IENyYXA= 5omL5py654mI5a6Y572R IHZvbw== YWRldg== THVja2lseQ== 0KDQsA== 5qyg IHZlZWx6aWpk dWRkaW5n IOCyruCyvuCyqA== d8O8cmQ= IFRlbGxlcg== w6hxdWVz aXN0dXM= IGFuY2llbm5lcw== X0FQUEVORA== IFByb2c= 0Y3RgNCw IERpc3RyaWJ1dG9y 5peg5Lq6 IElPQw== X1NFQ09ORFM= dWxsdXRpaw== IOCmnOCmsA== dW3DpG5n IG1pY2hl ZmVyZW5jaWE= LWZ0 INmI2KrYsw== INC00YDQtdCy0LXRgQ== IGtsaW1hdA== IHJlc3BpdGU= RklOQUw= INmF2YTYudio 4YCQ4YCt4YCv4YC3 IGFkaWNpb25haXM= IE9yaWdpbmFscw== 4LWL4LS34LWN4LSv 4LmS IOGDleGDmOGDlg== YWhpbnRh amXEjQ== IG1pc2w= IG9jZW4= LXdhdGNo IGphbnVhcnk= IGZ5cmE= LGltZw== IEFsZXNzYW5kcm8= d3Jub2Q= 4Kq+4Kqk4KuN4Kqu4KqV X3RyYW5zbGF0ZQ== 57K+5ZOB5LiA5Yy65LqM5Yy65LiJ5Yy6 IFJpdmFs dXBwZXJjYXNl IGZpZ2xp INin2YTYs9mD2LE= IEFUSQ== IHp3aQ== IOCyqOCzjeCyr+CyvuCyrw== IHByb2R1Y3Rvcg== IHVsZQ== IEtlbnlhbg== KGJlZm9yZQ== IG1hdGxhYg== eWJyaWQ= eW5jaHJvbml6ZQ== IHDDq3Jk CXBj S29kaQ== IMO1cGV0 INC90LDQt9Cy0LDRgtGM IGRvd25mYWxs IM+Izrc= IGF0aWzhurk= IGNyZXNjZW5kbw== IGF0aGVpc3Q= QUxH IFJldmVuZ2U= IHZn IGFyY2hlcw== IGxpbmVzdHlsZQ== Llhy bmFuZGU= IENvbmN1cnNv 24HYp9im24w= IOCwieCwpuCxjeCwr+Cxi+Cwlw== IHRoYXQnbGw= IEFsbMOt IOC4reC4teC4gQ== X2Jvb2tz IOCmj+CmluCmqOCmkw== IOCwleCwvuCwguCwl+CxjeCwsOCxhuCwuOCxjQ== IGdpbmU= INmF2qo= bGFhcA== 4oCN4La64LeP 44Gc44Gy IGlsbHVzdHJp aW5rZ28= IElOVEVSTkVU INOp0LI= INeZ15U= IEFkZHI= 0LjRgNC10LrRgtC+0YA= INCS0LjQtA== 5ZCO5p2l CWZw LnJlcXVpcmVz IOCuqOCuo+CvjeCuqg== cGVt IG92ZXJoZWF0aW5n 0YDQvtGJ INGP0LrQvtC5 bWluc3Rl KiopJg== PT8iOwo= IGp1eHRhcA== IHJhemxpaw== IOujqA== IEdpb3JnaW8= IHpuYcSNaQ== IOaF INiq2LnbjNuM2YY= IHNjb3JlYm9hcmQ= IGl0YWx5 bWlkZGxld2FyZXM= IHZlcndhY2h0aW5nZW4= YXbDrQ== aXN1bg== cmVzZW50ZQ== KS5f IDwtLQ== IFBvcnR1Z3XDqnM= IHVuaXTDqXM= amV0ZQ== wr9Qb3I= IOC0quC0vuC1vA== IGV0aWs= LnN1cA== Lkxvdw== 0LLQuNCz IHJlc3RpdHV0aW9u IHNpbXBsZXg= aW56YQ== IGZ1Z2ly INeR16LXkdeo IHRvcXU= KHByZWRpY2F0ZQ== J2Vudmlyb24= IHZhbGE= Li4uJywK QVRBTE9H IHZlcmR3 INiv2KfYsduM2YU= aWRlZQ== Zm9yZGVybg== IGh5YnJpZHM= INin2KjZiA== VG91dGU= INGD0LnRi9C9 QlJP X2dhbWVz INGF0LXQt9C805nRgg== IOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpA== 6ICB5bir IEVyZ8Okbg== ZW5kZW56YQ== INiy2YbYp9mG INin2YTZitmI2YXZitip IGFmc2NoZWlk IOC0uOC1jeC0peC0v+C0sOC1gOC0leC0sA== X05PUA== INiq2YLZitmK2YU= CgkJCQkK YXJ0aXN0cw== L21ldA== QWNlcHRhcg== IGR1cmZ0ZQ== IHRzbGli 2b3ZiA== w6FiYQ== IOCmquCng+CmpeCmv+CmrA== IM+Gzrk= LXNob3BwaW5n YXZhaWVudA== KFBBVEg= J9GP0Z7Qu9GP0LXRhtGG0LA= IM67zq/Os86/ 5LiN5Lit5Y+N cGxhc3Q= IFBMQVRGT1JN 64A= 2oHYqtmH LlBhZ2VhYmxl IOCwteCxhuCwsuCxjeCwsuCwoQ== IFBSRUY= 0LvQvtC5 X0VU bXVqZQ== IGFtYWJsZQ== INCT0L7RgQ== TXE= IGZvbHk= LnJvYg== IHNjYW5kYWxz IG1pa3M= b3JhbmE= IE5hbmdpbmc= UGVyZw== INin2LXYtw== IHN0cnU= IGdlc2NoaWt0ZQ== KGNvbHM= LWxpc3RlZA== IOCksOCko+CkqOClgA== QUJM IGFwcmlt XFwv TG9jYWxlcw== IHBhcnRpY2lwYWRv aWFudXQ= 4YOd4YOh4YOQ4YOV4YOa eGVueWU= 0LDRiNGL0LvRi9Kb SEFW KHRpcG8= IG1hbmllcmE= IGVucmVnaXN0csOp PEFzc2VtYmx5 5Ymk IEFsbGk= 546w5Zy655u05pKt IEZsw6RjaGU= 6aCY YW1laGE= LmJhbm5lcg== INeU15fXlden IEFjcg== IFRhYW1hYXR0dW1paw== INin2YTYp9mG2LPYp9mG c3RhbmRlcnM= INin2YTYqtmD2YbZiNmE2YjYrNmK2Kc= 5oqV56i/5pel IE1FTUJFUg== dWxpdA== IENCVA== KHdoaWNo IHdhc2hlcnM= IGlsbHVzaW9ucw== IHZvcmdlc2No INWv1aHWgNWu1bjWgtW0 INmH2LrbkA== IHNvcmVz dmVyc3RhbmRlbg== UmV0b3Vy dXJpZQ== aW1wb3J0cw== IHZvd2Vscw== IHFx5LiK X2hvc3RuYW1l IHZveWV6 IFJhZ25hcm9r YnVzeQ== INGB0YvRgNGC IGdlcmly IHByZXBlbmQ= IFp3b2xsZQ== IHN0aWpsdm9sbGU= INC60L7RgNKz0L7QuA== cmlhcg== IHZvbHV0cGF0 IFNvcnRpbWVudA== IGNvbWVkaWM= 0LDRjtGC0Yw= RmlsYQ== IGZsYWdy IHN1cnZpdmVz YXRlcmlhbHM= ZW5jaWxz IOy2qeu2hA== bWFuZGF0b3J5 INCw0pvRi9Kt0LA= IHNpbGxvaW4= cmlnZQ== IGxlbnRlcw== IFNUUkVFVA== INC80LXQtNC40LrQsA== LlBsYW4= IHPFk3Vy IEVkbw== IGFmbGV2ZXJpbmc= IOGflg== IGdhbHM= IGRoYWI= INCw0YDRgtGL 5piM5Y6/ LkpXVA== d8Okc2NoZQ== 5LqO5piv IENUTw== IM+Gzr/Pgc6tz4I= RXhwbGFpbg== INW+1oA= IGNhcmF0dGVyaXN0aWNoZQ== IGxlY2tlcg== YW1tbw== 5p2P IGxlcG8= TWljaGVs 0LTRjw== IER5c29u INGA0LXQttC40LzQsA== IHBvem9zdA== Om1pbg== IG1pZGRheQ== IHNlcGFyYWNpw7Nu IOGDoeGDmOGDleGDoOGDqg== IGVsaW1pbmFjacOzbg== Lnhscw== IHBhbm5h Q2xlYXJseQ== IGN1b3Rhcw== IHJhemxvZw== X1dlYg== IOC0h+C0pOC0v+C0qA== INGG0LjQsg== IHRyYXNmb3Jt 44Go44GX44Gm IOCkheCksOCljeCknA== IOS6muixqg== TGlrZWxpaG9vZA== RkFB 1KXRgdGL IGVkdWNhdGl2YXM= IERlcGVuZGVuY2llcw== IOCoruCpiOCogg== INCz0L7RgNC40LfQvtC90YI= YWdpemU= 0JTQkA== IGZhdHRp Z2FyZGVu IGthbXB1bmk= IGNsYW5z IEJvbMOt LXBvbHk= IOy1nOy0iA== THVjeQ== IHByaWhvZA== IOmTgeihgA== Kmw= KExqYXZh LXRoaW5raW5n 0LDUpdGF0YzQsA== IOCmtuCngeCmrQ== 0YDQuNC90LA= UHJheWVy LXdlYXRoZXI= dmFjYw== IHphZG92b2xq YXBwbGljYXRpb25z ZnR5 SWVkZXJl IHN2ZWl0YXI= INCx0L7RgNC+0YLRjA== IGR1bnF1ZQ== IOy5tOuTnA== IOC5guC4o+C4hw== INC00LjRgg== IHR1bm5ldA== IFN0aWNo IFJlbmRleg== IHNlbWVudGFyYQ== 6auY5riF6KeG6aKR5YWN6LS5 IFRyYXZlbGVycw== INeT15nXoNeh15g= X0FSQg== 24zYqtin2YQ= 0LvRltC90L3Rjw== a3VuZGVu IFdoaXJscG9vbA== IGludGVyYcOnw6Nv IE5ld2ZvdW5kbGFuZA== L3N0cmV0Y2g= INC90LDQt9C00Lg= IEF1c2JpbGR1bmdz IHFvcw== bGFuZGVu IE5hbnQ= LnVuc3BsYXNo aG1hbg== xbx5Y3o= INiz2YjYsdip IHRyYW5jZQ== 0LzQsNC0 IFJlc3RhdXJhbnRl 5q+F INC/0YDQsNC60YLQuNC60LA= IHZhcmbDtnI= d2Rh IMOpcGlzb2Rlcw== IEZlbmRlcg== 5oiR5piv bGhvcw== IGR2b2o= INin2YTYqNmK2Lk= IHJlY2lwcm9jYWw= 44K444On ZGJs IM63zrvOtc66 w6RobmU= LkV4cHJlc3Npb25z LWNhcmJvbg== IE5ld2x5 IOCksOCkluCkqOCkvg== ZGlzcG9zZQ== IE5ldGVsbGVy IGp1dXJkZQ== IGFsYXJtYQ== LkluZm9m IGJyaWI= IGludmFkaW5n dW5kYW5jZQ== YWxvaw== IHNtYWNr bG9va3M= IFJlbGlhYmlsaXR5 IHZhbHVhYmxlcw== aXR0dXJh Lm9wZXJhdGlvbnM= LXdhbGxldA== INen15HXldem w6l2ZWw= THVt IHNjaHJpanZlcg== IEhhYmVu LndhbGw= KHsuLi4= SU5FU0U= L3NldHVw IER4 c3TDpg== IE9sdQ== INGA0LXQsdC10L3QutGD IGJlYW50d29vcmRlbg== PXsiLw== IHDEmw== X2V4cGVjdA== IHdheGFhZA== INGB0L/QvtGB0L7QsdC10L0= IGNvbnNpZMOocmU= 4LiV4Lix4LiZ 4KeH4Kas4Ka+ X01QSQ== X2NyZWF0b3I= IHdhc2Fu IFDDq3I= INC+0LrQvtC90YfQsNC90LjRjw== cnJycg== INC+0YLRi9GA0pPQsNC9 INKv0LXQtA== INW21bjWgtW11bbVutWl1b0= Lk9mZmljZQ== cm5n 7Iug66y4 d2FjaHVuZw== ICcuJyk= w69xdWU= TWFrZXM= LWF04bul 4KWB4KS14KS+ INin2YTYrdmK2YjYp9mG2KfYqg== INqp2prbkA== QVRZUEU= IFNpZGE= IEVpbmVy 2YrYp9i3 INGD0LHQsNC6 IGluYWNjdXJhY2llcw== IHNocnVnZ2Vk IE9UQQ== IHdlYXJlcg== YmlvbG9neQ== xKtraW5p Tmlr IGNsYXNpZmlj SW52b2ljZXM= X3Jh cHJpxI0= L3BheW1lbnQ= IOCquOCqguCqpA== IGzDqWdhbA== 4LK+4LKy4LON IOmHkeWPtg== IHZvb3JzdGVsbGluZw== INmB2YTYsw== a2Y= RHRvcw== J25n IHLDqXB1dGF0aW9u IHBhZ2lnaW5n 4LWB4LSZ4LWN4LSZ IFB1ZmZ5 IOyggeq3uQ== IGF0dXJhbg== IGFub2lz VG9ycXVl 4LmD4LiV4LmJ ZW5zYW4= LkF4aXM= LmNvb2w= IEFudGFseWE= 15nXnteq INin2YTZgdmD2LE= IOCyteCyv+Cyrg== IERFRklORQ== IEJPT0tJTkdT X2NvbnN0cnVjdG9y X2Zvcm1z IE51aXQ= IFNraW5ueQ== INGA0LDRgdC/0YDQvtGB0YLRgNCw0L3Rjw== 5bCP5pe25YmN IGRvcGluZw== LnRlYWNoZXI= IHRvcXE= INC90LDRhtGL0Y/QvQ== INio2KfYsw== b3V2w6k= INS51bjWgtaA1oTVq9Wh1bXVqw== IGt1Ym9uYQ== IGl0YWxpYW5p IEhldXJl IFsKLy8= LlVpbnQ= IOCkueCkteCkvg== 2KfYr9in INm+2YjZhNmK2LM= IENlbnRlbm5pYWw= IGVsZXZhdG9ycw== CQkJCQkgICAgIA== IE9uZGFua3M= ICAKCiAgCgo= IEVtdWxhdG9y LkNMQVNT INmI2KfZhNij2LM= V2hvJ3M= IE9zYm9ybmU= IOCkuOCljeCksOCli+CkpA== 4LGN4LCe QWxhbWF0 IFbDrA== IENvbG8= IOWC YXZlcmluZw== IOGDmOGDp+GDleGDnOGDlOGDnA== 2b7ZiQ== aXJlbmVuYQ== IG1vcmJpZGl0eQ== 0LjRh9C90LDRjw== IMSQ4buTbmc= IHRvbW9ncmFwaHk= 4KSP4KSa IGNyZWVk IG1hY2NoaW5h XSkpLA== c3Nj IGNvbnNlbnRpbWllbnRv IGhldGE= 4LGN4LCv4LCk IOCwteCxhuCwguCwnw== LmludmVyc2U= IFNPVU5E IFVjaA== INWh1bLVog== IOC5hOC4lOC5ieC5geC4geC5iA== eWd5 5Lmw6ams IGliYWJhdw== cHLDpGc= IG1pbmltaXplcw== ZWZmZWN0cw== 64K07Jqp YW5oaWE= INS11oDVrw== 4YOQ4YOg4YOT4YOU4YOR4YOQ xaNl SW5ncmVzbw== IHNpZWQ= X3BhcnRpY2xl IEZpbGxpbmc= IHByw6l2 zprOsQ== YW1lbG8= IHNvdWxpZ25l IFNwaWVsZXJu IGxpeA== IOCupOCviuCun+CusOCvjeCuqOCvjeCupOCvgQ== 0LvQtdGA0ZY= S2FtaQ== IOCkuOCkguCkrA== IGJvdGU= 24M= IEVlcnN0ZQ== INC/0YDQvtGC0LjQstC+0L/QvtC60LDQtw== 5Y+z57+8 IENvbnNlcnZhdGl2ZXM= KHN0ZGlu IFByaXVz LWxldHRlcg== IFlhbmdvbg== 0LDQutGC0L7RgA== IHRhYmxlYXV4 INeW17LWtw== IHVudmVpbA== INCg0L7QsQ== INC60L7RgNC3 Y2Npbw== 4LeU4Lar4LeU IGF5c2Fu IFRyYWY= IEhvbmU= 4YOc4YOY4YOd TGlzdGVy IGtyaXo= IGZsYXR0ZXI= IHBvYmxl 4KS+4KSH4KSo4KSy IGZvcmdpbmc= X0JBVENI IOGDlOGDleGDoOGDneGDmQ== INCw0LvRiw== 0LXQt9C00Ys= d2FuZGVy IFVudGVyc2NoaWVkZQ== IOGDkOGDk+GDkOGDm+GDmOGDkOGDnOGDlOGDkeGDmA== INC60YDQsNC50L0= IHBlcmFuZw== IGdlYnJhdWNodA== IGVlbnRqZQ== IHJleW4= Y2hhcnRlZA== IFBhcmFu IGNvbnNpZGVyYcOnw6Nv INi42YTZhQ== X18pKQo= 4KS14KWH4KSC INGD0YfRg9C9 Y2hlcmNoZXI= IDo6PQ== 15fXnw== IFJ1cGVydA== IGJhYm8= 0YLQvtC90LA= w6lyaXTDqQ== ZXhlc2hh LdGB0LU= w6FkaXo= IGJodQ== IEluc3Ry Lmhz INC80LXRgtCw0LLQvtC90LXQtA== IGNpbGo= IGNoZWRkYXI= IEZhdWNldA== IG9sZWQ= INmK2Yc= IOWPiA== IEFkbQ== INio2KrYp9ix2YrYrg== CQkJICAgICAgICA= INC10LbQtdCz0L7QtA== IGJvdG9uZXM= IHBsZWFkaW5n Y2xheno= cHJlc2VuY2U= IGxpaWc= W3N1Yg== INil2LnZhNin2YY= INmI2LHYrdmF2Kk= IEpvcm5hZGE= IjsKLw== IFNwYW5udW5n reC0tQ== 4LK/4LKV4LOG4LKv IEdlb2ZmcmV5 LnJk aWxsYW50ZQ== IFNoaXJ0cw== ZGlyZWN0aXZl IEFydHdvcms= fUA= INGP0LzQsNGA 0LDRidC1 qOC4qQ== INmI2KPYttin2YE= w69kZXM= JCIpCg== INCy0LXRidC10Lk= INGC0L7Qu9GB0YI= cmVwaWQ= INin2YTYr9ix IHByZXN0bw== IEJ1bGxkb2c= IGludXVzdXR0 IEFudGFyY3RpYw== IFdhZ2U= XTw8Ig== IOyjvOuzgA== IGdpZQ== aW5kaWNl V3JhcHBpbmc= w6luw6llcw== IOCkqOCkhw== Pz4NCg0K INCV0LTQuNC9 IGhvcm1hdGx5 IGltcG92ZXI= IEZPUkNF 4oCZZXNww6hyZQ== IEdlbWVpbnNhbQ== IExhbmNhc2hpcmU= INeX15XXk9ep15nXnQ== IGRpbsOibWljYQ== IGfDvG5sw7xr dG9pcnQ= IFNpbmdpbmc= ZXV4 bmVhdQ== CXdn IHPDqXJzdGFr INep16LXqA== IGtvbmNlcHQ= 4KSF4KSq4KSo4KWH IHxf IGRlc21vbnQ= IHJlc2Vydm9pcnM= LWVhcm5lZA== IGViYg== IExQRw== 4K+I4K6v4K+H b3BoYWd1cw== IGthcm9sbw== Ojo6Ojo6Ojo6Ojo6Ojo6Og== PEVkZ2U= IE5lZ3Jh w7zFn3Q= INmI2KfYptix2LM= IOC4lOC4tA== IHBpdGE= Y2xhaXJhZ2U= 57uZ5Li75Lq6 INqI2KfZhA== 4Li34LiZ4Lii4Lix4LiZ ZWTDrA== IFByZWxpbWluYXJ5 INC30LDRj9Cy0LrRgw== IE1pdGg= 4YOU4YOQ INin2YTYo9iz2YbYp9mG ZXRyYWdlbg== IOCqhuCqteCrh+CqsuCrgA== INmF2KTYqtmF2LE= IFVNTA== INeS15DXqA== U3ByaW50 IG91ZHN0ZQ== IHJlbGF0YWJsZQ== IHRzYWthbmlu asOhcmE= IGRpYWx5c2lz aXBy LkJVVFRPTg== Ym9la2Vu KElG IMWeZcO9bGU= 4YOQ4YOb4YOQ4YOW dGFrZXM= IO2Pieq3oA== 4YOQ4YOR4YOY4YOv IG7Ds25n IE5pY2hvbHNvbg== IGphcG9uZXNh aWhpYQ== U3RyZWFtZXI= IOCmquCnjeCmsOCmpuCmvuCmqA== IHJlbGlnaWV1eA== IG9nYQ== IHRldHJh IHRyw6FuaA== IGF0dGVuZGVl INC70LXQs9GH0LU= IEVya2zDpHJ1bmc= RHRs IOyCrOyaqe2VmOuKlA== IHplbmQ= INis2YXZitmE2Kk= IHJpc2NoaW8= w6lhbm1vaW5z IFRFUk1T IHNjaG5lbGxlbg== IHTFqw== INC80L7Qu9C+0LTQvtC5 LlRvdWNo IGNyZcOr IFN1cmdlb24= dWxhbQ== X2NvbnN1bQ== IOCyteCyvuCysOCzjeCypOCzhg== IGdldGU= dGVtcGw= 4KS+4KSm4KSo IFJlY29t IOqwgOq5jA== 5Z+O5Lmh INCR0L7Qs9Cw IGxpYmVyYXI= X2V4YWN0 X2J1Zw== IGR1cmVy IEZyZWRlcmlr INCe0JE= bWJpdG9z IHJlc2VuZA== U3lkbmV5 IOCmuOCmguCmlQ== IOCkluCksA== IOGDmeGDkOGDmw== INC/0L7RgNGC0LDQuw== IGdiYXM= IGVuZGV0 IHdhdGVyd2F5cw== KHBi Z2Fv 1aLVuNWs IHJlaGVmYQ== IGxhcGFy WVNJQ0FM z4HOtc+N IEVYUEVSSUVOQ0U= PCEtLVs= INeV15HXqA== 0LDQvNGL0LfRgg== JHVzZXJuYW1l IGR1cmFy INGB0YPRgtC4 0YPQu9GD IENhbG0= IGVuZmFuY2U= 4KWN4KSv4KS+4KSu IFBJUEU= 6ZOD U3Vic2NyaWJlcnM= w7NtZXRybw== IENlZg== IEJhbw== IGt3aXM= LUhlYWRlcnM= INC/0YDQtdC00LvQsNCz0LDRjtGC INCx0LDRgNC70LjSmw== UG9pcw== 4Lic4Lil4Li04LiV IGtsw6Zy zpHOmQ== IFZvZWc= 55m96I+c 6ZmV6KW/ IGTDqWNybw== b21lZ3JhbmF0ZQ== IHJlY29tZW5kYXI= 54K8 IGFydGVhbg== INiq2YXZhg== IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v KGNvbW0= KTw9 IGhhYQ== IFBvbHlu IOCmj+CmleCmn+CngQ== IHNlbnRydW0= IHNhbGTEsXI= Lk9ORQ== IGRpY3RhdGVk INiz2YjZhA== IEJhdHRhbGlvbg== CURvY3VtZW50 IGJlcnVwYQ== ZGlhcw== LWluc3RhbGxlZA== TW9kbw== IEplZQ== IEVneXB0aWFucw== IGnDp2luZQ== KG1hcHBpbmc= IGRpZnVuZA== IEVudHJhZGE= bGlzbGU= IFZpcmFs IOC0qOC0v+C1vOC0ruC1jeC0rg== dXNzZWxz X3N5 IHNhZmY= IFNlY3JldGFyaWF0 44OW44Op44OD44Kv INiq2KfYsg== 2YjbjNiy IGnFvGRh IOCkhuCksuCkvg== KgovLw== 4YOl4YOV4YOQ4YOb INmF2YLYp9mI2YXYqg== IGhhbGxtYXJr 2LHYp9mI2K0= IHhtbGh0dHA= IG1lcmdlcw== L0dhbWU= IGNvbmZpZ3VyYcOnw6Nv INi02LHZiNi3 IGdyYXZpZGV6 IGFyYmVqZHM= IGNvbnRyYWRpY3Rpb25z IGNvc3RpdA== INin2YTYudmI2K/YqQ== IGRpYW5nZ2Fw INC40YLQutOZ0L0= IHR3aWxpZ2h0 IGJpbmFyaWFz c2hpbg== LlNob3A= dHlwaWNhbGx5 IG1vZGFsaXTDqXM= IGF5eQ== 5LiK5LiL IOCkruCkvuCkpQ== VXJn 57OV IOS5kOW9qQ== L0Jhc2U= IEF1ZndhbmQ= aXN0b3JhbnRl T1BB ICcvJwo= X3B1bGw= IOC4geC4suC4o+C4nuC4meC4seC4mQ== IGNvbGVzdGVyb2w= 15XXqNeo c29pbA== w7JtYXN5b24= KHF1YW50aXR5 cnV0YQ== YXBobw== LGxvbmc= IGxpZ2FkYQ== b3Bob2JpYw== I2Fk IGFicmnDsw== IGRhY2U= IOWFsA== INGB0YbQtdC90LDRgA== LndpbmQ= aWJhdGthbg== LkFETQ== IOyjvOuvvA== 5peX6Iiw5Y6F IMWhYWw= IHBvcnRhdm96 b3hl 44CCIg== IOGDnOGDmOGDlQ== aXBhZA== IETDtndsZXQ= 2KrYsdin2Ko= IGluY29tcGV0ZW50 IEFyY2hpZQ== INGB0L/Rg9GB0YLRjw== IHVwYnJpbmdpbmc= I2NyZWF0ZQ== 4oCZZXhwcmVzc2lvbg== YXdkZA== SmFrZQ== cm9teWFsZ2lh IFBIT05F IOq1rOy2lQ== IHRow7o= 2YXYp9mF dXV1 IOCkqOCkv+Ckr+ClgeCkleCljeCkpA== INaE1aHVstWh1oTVodaB1avVtg== IG3Ek3M= 7LOk INmF2KTYrg== INmK2LnZhNmF VGl0cmU= Y2Fm IHN0ZWc= IOaPkg== 0LXRgdGC0YA= 5ZKW INio2KPZhtmH2Kc= UmVjb3JkZWQ= 4Kq+4KqC4KqV 4LOH4LK14LOG IGNvbnRpbnVpZGFk LmFsbG9j IHd5Ym9kYWV0aA== IHJhbmM= IGRlc2VqYXI= INC40LDQvA== IHRhbXBvbg== YXJnZW4= 15DXkdec IGtvZGk= INi22LHZiNix 5Y+q5piv IGF5YW0= X2RyYWc= QnJlYWtlcg== IG1hcmVz IOiBmue8mA== 5om55YeG 2KPZgdi22YQ= IOCkuOCli+CkqA== IHNvZnJldQ== 4K6x4K+B4K6u4K+N IHRow7pj IGtsYXNpaw== SUVudW1lcmF0b3I= IGRldGFsamVy IGFkamFjZW5jeQ== PT09PT09PT09PT09PT0K INCX0L3QsNGH IOyLnOqwhOydtA== 1aHVptW41b8= zrvOrM+HzrnPgw== X2ZlYXRz IExJVg== 0LPQsNGC0Yw= INC/0L7RgtGA0ZbQsdC90L4= IG7JmWY= IHZpcms= IGfDvHo= 5Lym55CG54mH 6L2m5Z6L IOCmuOCni+CmruCmrOCmvuCmsA== IEJJTEw= INmG2KfYqA== e2xuZw== aWRvdA== IGdpcmwncw== 1oDVodWw 8J2X IHBlbmV0cmF0aW5n L2lj IG9wcmF2ZHU= b3bDvW0= IGluZmVsaXptZW50ZQ== INGC0YPQsNC7 2LjZhA== INin2YTZhti4 Y29sb3JlZA== LGFyZw== 15XXodeZ150= IGZyYW1mw7Zy IGxpYnJhcmlhbnM= YXRhZGE= IG5lbnDDsnQ= 4LeE4LeQ IGVuY2VpbnRl INGF0L7QvdCw IEFwcGxlcw== INCe0YLQu9C40Yc= INin2YTZiNin2K3Yrw== YXZhbmNl IM+Hz4HOrs+Dzrc= IOGDk+GDkOGDm+GDneGDmeGDmOGDkw== IGVyaXQ= KG5vdW4= IOCyrOCzhuCyguCyl+Cys+CzguCysOCzgQ== IOCyhuCyoQ== IHRldGVw IGFzcGVrdA== IHJhYmF0dA== IM6Rzr3OsQ== IG55ZXJl IGRhYmk= d2VyZg== INGN0LI= 0LDRgNC1 IHZlcmFuZGE= IOCmsuCnh+CmluCmvg== IGxpYW5n IGJpZW52ZW51ZQ== dmFyaWFuY2U= IOGDnuGDneGDnuGDo+GDmg== IGFhcg== IFBMTg== IGRpc2NsYWlt z4DOv86vzrc= 5YW76ICB6YeR 0JTQuA== IEVyc3RlbGx1bmc= IHJlcHJpbQ== IEpPYmplY3Q= CWZm 5omA5Zyo5Zyw IHByYWlyaWU= bmlnYQ== YnJvZWs= INC/0L7QstGL0YjQtdC90LjQtQ== IGh0bWxlbnRpdGllcw== IGNvbWJhdGVy IGV4cGxhbmF0b3J5 ICMjIwo= Lm9wZW5kYXlsaWdodA== 4oCZZWQ= b25kaGVpZA== IOCkrOClh+Ckn+Clhw== dmlsdXBw IOCmhuCmrOCnh+CmpuCmqA== INmG2q/Yp9mH 5pel5Zyo 15vXmNef IHJld3JpdGluZw== IHRoeW1l IFNpZW5h 4Kqu4Kq/4KqV IGp1ZGljaWFyeQ== 2LTYrQ== IOODlA== 5bqX6IiX JGN1cnJlbnQ= Q8Oz 4KWH4KSk4KWN4KSw4KWA X25laWdoYm9y YW5kb25lZA== 4LKk4LON4LKk4LKw aXRn IGhhcGU= IG55b3Jl IEZha3VsdA== IHNhZHLFvg== 4Z+C4Z6Y IHRldHI= IGFhbnNsdWl0aW5n aWtsZQ== d2VwaGVzaGU= b25rYQ== IHNhcGllbg== INi02KfYr9uM INCx0ZbRgNGW0L3RiNGW INCz0L7RgdGC0LjQvdC4 IGZyZWN1ZW50ZQ== 4Z+P 0LDQutC+ IGJvbGVuZw== fX19LAo= IG3DpMOk INC90LXQvtC0 w6RmdGVu IFNhbmRib3g= IMShZXc= INCx0YPQu9Cz0LDQvQ== IOC5gOC4oeC4qeC4suC4ouC4mQ== w6Fpc3Rl 5bel5L2c55qE IGdyw7g= IHRyYXRl IHRlaW5l INCx0YPRgtGL0Ls= IG7DpnJoZXRlbg== JTsNCg== IGJla29tbWU= IOyXtOumsA== Smw= U2FhdA== 4KS+4KSv4KSj IHJlbGlnacOzbg== X0Rpc3BsYXk= UG9ydGxldA== LkNvbm4= c3RhYmVu IG5vbnN0b3A= IMWfZWts IGphYW5h IGJvbGVzdA== IFB1cA== IGFzc2lnaWlubmdpdHM= cGxhbm5pbmc= IOCuquCvgeCupOCvjeCupA== IOCmheCmpOCnjeCmrw== cHJpbmNpcA== IOCkr+Cli+CknOCkqA== cGlja3Vw IEdyb2Vp PVc= IE11aXRvcw== Q2xheQ== IOCyqOCyqA== IHNreXJvY2s= IGRldHRhZ2xp ZGFreQ== LC0t YmV3ZWc= IOCwreCwvuCwsOCwpOCxjQ== INin2YTYrNiy2YrYsdip 6IWz LmJpcnRo Lmd1YXJk IEZha3Rlbg== IGtpbmU= Um90b3I= 0YbQsNGA0LA= 0LDQvdC90L7Qs9C+ IOyDgeuMgA== IGthcmJvbg== INCf0LXRgtC10YA= IGRvdWNlbWVudA== eXNpZw== IOCyjuCypuCzgQ== IHZpY2lubw== IGJld2FyZW4= 4KSc4KS84KSw INC+0LHRgNCw0YnQtdC90LjRjw== IHVtYW5v IHJlbGlucXU= IGRpcHV0YWRvcw== IMO8Z3k= IGtyZXY= IOCkn+CkvuCkh+Ckrg== LlNhZmU= ICJcXCI= IHDDqW7DqQ== 4Z+S4Z6a4Z65 KCIiIgo= 4LK/4LKf4LON4LKf4LOB 4LS+4LS34LWN4LSf4LWN4LSw INCy0LXRmw== UmFwaWQ= IFZpdmk= KCkKCgoK IHNpZ25pbg== IGRva2F6 IGRlY2FkZW50 V2l0aGRyYXdhbA== IE1ldHJvcG9saXRhbmE= IFJvY2hlbGxl IG9saGE= YnJhYWs= Q29uc2lzdGVuY3k= X1RXTw== KHJlaW50ZXJwcmV0 INC/0YDQvtC30YDQsNGH IFNpbmd1bGFy INGC0LDRiNKb0Lg= 0LDQvdC10YLQvg== INC00LXRgtCw0LvQtdC5 IHRyaW5rZW4= LXBpY3R1cmU= Q2hhcA== w6RsdW3DpG5n 4LeA4Lax INGB06nSuw== IGx1bWlub3Vz IFBhaW50ZWQ= 5LqR5Y2X IOqwgeqwgQ== IHN1dXJlbg== KEJl dW5saW5r IEhlZg== Rm9ybWF0bw== X3NlbnNpdGl2ZQ== INiv2YXYtNmC IHNodXRz 6K6y6K+d IGdhdXI= IFwiJA== IHBhcnRha2U= dXLEgw== INmG2YHYs9mK IG5hdGlvbmFsaXN0 bWFneW5h 5bKb5Zu9 IG1hY2h0ZW4= IENha2Vz IGFmZmxpY3RlZA== IHBlbm5pZXM= IGV4dHJlbWlzdA== LnNvdXJjZXM= 5Li75Yqo IGhlYXJ0YnJlYWs= 57uY Lk1TRw== INix2K3ZhQ== IOCwquCwv+CwsuCxjeCwsg== IFByb2plY3RpbGU= IHBlaXhl INii2LLZhQ== 6ICB5aSq X2NsYWlt LmhlYXA= IEFLQQ== INGB0L7Ss9C40LE= aW5mZWxk IHNleGlzbQ== IOGDm+GDmeGDleGDmg== IGVtZXJnw6puY2lh Y3RvbXk= IGJlbmVmaWNpYQ== IHNjcmFtYmxpbmc= aW1pcmE= IHPDtnls CUNvZGU= INC20LDSk9C00LDQudC00LA= IEhhcmRlbg== 4oCL4Z6Y4Z624Z6T 44CLKA== INio2LnYr9mH2Kc= U2Vjb25kbHk= IOCwj+Cwrg== TkFW IHBhcmFseXNpcw== IGFmZmlybWU= IGxpZWZlbg== m+GDkA== IGRpdmVyc2E= INCx0LDRgNC00YvQug== b3BoYWdlYWw= 7IKs7Jqp IEludmVzdGlnYXRvcg== IENvcHA= IExlc3Rlcg== IHByw6ljw6lkZW50ZQ== IGRhaXM= IEN1ZQ== 5Lit5aWW5LqG INCf0YDQtdC00YHRgtCw0LI= YWPDqQ== Q2Vk IENhcmx0b24= IG1hbnBvd2Vy IFVtbQ== IGRlbnVuY2lhcg== IE1hdHI= IFdoaXNreQ== IEVBQ0g= 1aHVt9Wt1aHWgNWw IFppbW1lcm1hbg== 5q2j6KeE55qE IEZhcm1h IOWkqeWkqeW9qeelqOS4reWkp+Wllg== cG9ydHVuaXRpZXM= 4LCV4LGK INi02K/Zitiv ZXJnYXI= IOCqheCqqOCrgeCqreCqtQ== bm9s TmV3ZXN0 IGV1cm9h IGFiYWI= INmF2LfYp9mE2LnZhw== KEFTVA== INC/0L7QtNC00LXRgNC20LrRgw== 5aSr5aa75oCn55Sf5rS7 SG9zcA== IG5hcnJhdGVk ZnVuZ3Np INmF2KzYqtmF2Lk= IOCkueClgeCkqOClh+Ckmw== IGLDqW7DqWZpY2ll 4Lir4Lil4Liy4Lii IGVzdMOhZ2lv L2Nvbm5lY3Q= bWFz4buL ZXN0ZXBz IOCyuOCyvuCyteCyv+CysA== 0JjQmA== JHByb2R1Y3Q= IHZvdw== IFN1YnNjcmliZXJz 6a2a IOC4quC4peC4suC4gQ== INmI2LPZhNmH L3NvZnR3YXJl 4YOQ4YOV4YOY4YOc cmFhbg== bGFwcw== X3JzcA== INC905nRgtC40pc= LlJhZA== IGluZHVzdHJpZWxz KHNvbA== IHNwZWN0YXRvcg== IOCyn+CzjeCytQ== 0L3QuNCy ZWlnaHQ= 54eV aXVtdXQ= INC/0L7QvdC40LzQsNGO RHVuZw== IGludGVydmllbnQ= IFNjaMO8bGVyaW5uZW4= 0LDQtNC60Lg= ZXNlcg== INCw0LTRg9C90LXQuA== IGRlcmFt INC/0L7Qu9C90L7Qs9C+ RWZ0ZXI= IGV4aG9ydA== T2Rlcg== IHVjaGFy bWVuaXo= zrnPg8+EzrE= 0rXQsNCw0YDQsNKb05nQsA== 44Om44O8 KFt7 IHdoZXk= INW21aXWgNWv IGLEp2Fs Uk9C b3V3aW5n IGJvbGln IHdwaXM= z4HOr862zrXOuQ== IGh1bWlsaQ== LmNvb3Jk IE5vc3Nv 5Lit5peX IGJvdGVy ZW5nZA== IFNvbm55 LHBhZ2U= IGZhbWI= X2RlcGFydG1lbnQ= ZXNhaQ== IHlhxZ9heQ== 0JDRgQ== w61uc3VsYQ== IGluZ2xlc2E= UmV0cmlldmVy IE56YW1iZQ== IGludGVycm9nYXRpb24= IHN0YXRpb25lcnk= QUxMT1c= 57uZ5Li75Lq655WZ5LiL5Lqb5LuA5LmI5ZCn IOCuheCulQ== xI3DoXN0 4YOQ4YOb4YOg dWlsbGVhZGg= 0LvQsNC50LTRiw== IGh5cG9jcmlzeQ== J0JyaWVu IERWQg== 4Lib4Li04LiZ IHTEqw== IOyDgeuLtA== dnVu X3VwZ3JhZGU= IG9wZ2Vk Y2Ry Lndhcw== IGV1cm9wYQ== ZmZpY2llbnRz X1NUQVI= IERqb2tvdmlj IOCwuOCwvuCwrg== IExsYW4= IFJlZ2lvbmVu cmHDrm5lbWVudA== INmG2KfYrg== IOGDo+GDrOGDpw== IHByZXNjcmliaW5n 15XXpteZ15A= dW5udXQ= bm92bw== IOe3 IHBhc3RpbWU= LnNuYXA= IEV6cmE= IOyghOusuOqwgA== 0LHQsNCy 4YCK4YCs 0LvRltC0 IGdlcHJvZHVjZQ== IGplbWd5 LkluZXQ= Y3Jhd2w= IOC0qOC0n+C0quC0n+C0vw== zrbOv8+Fzr0= 77yM5Lmf5piv IOCkpOCkvuCksA== 0JHRg9C0 2YbYuNix IM66zrHPgQ== 4KSv4KWB4KSV4KWN4KSk IOCkuOCljeCkleCljeCksOClgOCkqA== IFBhcnNlZA== IGd5Zg== IHV0Zm9yZA== YW1pZA== 0YrQtg== 16bXnNeX15Q= eGZmZmZmZg== IEZvdXJu IOGDneGDoOGDmOGDlQ== IFNvbGl0YWlyZQ== IGFmZmlu YWLEsQ== 44KM44KL PExvZ2lu IHByYWVzZW50 dmVjdA== INC60L7Rjg== IOCyqOCzgOCyoeCyv+CypuCzjeCypuCyvuCysOCzhg== 0LjQvNC+0Lk= IOCkpuClh+CkleCksA== IOydtOyXkA== 4oCZPw== IGh1cnJpY2FuZXM= IFJhdWw= xb5lbWU= IG1hdHVyZWQ= TU1N bWlvdA== INC/0L7QutGD0L/QsNGC0Yw= IGZhaHJlbmRlbg== IOaUvg== 67Sk X01BUkdJTg== IFF0eQ== cHVsc2U= INGE0LDRitC+0LvQuNGP0YLQuA== 5L2g5aW9 b2xpdGlvbg== INGC0L7Qv9C70LjQstCw IHRlbnPDo28= IEhhYXJsZW0= IGhlYWxlcg== IyNf IHNvYWw= IOuEmOyWtA== VkVSWQ== IFByZWRpY3Rpb25z 5Lq65Lq65pG45Lq65Lq6 ZWxsaXI= 0YPRhtGM IHJlbmRzemVy INmI2KfZhNi52YXZhA== SGVhbHRoY2FyZQ== IGp1bGU= IOG7lQ== 0L7QsdC+0YA= IGV4cGFuc2lvbnM= IGltcG9ybWFzeW9u IEJsdXI= Lycu VW5kZXJzdGFuZA== IEpvc2Vw 15nXldeV15k= IOC4quC5guC4oeC4quC4ow== IMOnaXo= IHp1dXI= 2LXYr9mC2KfYoQ== LmNhY2hlZA== X+iJsg== TmljaA== IG1va2E= IGNoYXJnZXJz 6I6e YmlnYXk= INmF2YbZig== IGZyZWNrbGVz LXdpZmU= IOCuteCvhuCus+Cuv+Cur+CuvuCulQ== IHJlc3RyYWluZWQ= IGRpdW0= LldFU1Q= IEpheg== w61vbg== eG1sbnM= IFJvZWRk IHRsb2E= IG1hcnR5cg== w7RuaWNhcw== INmK2LHZiQ== IEV4Y2hhbmdlcw== IOabsA== w6jMow== YWNhxJ/EsXo= CWJ0 QWxi IGZyb250bGluZQ== U1BE IFBlbGxl IFNJUw== 5rKS5pyJ IGdlYmxpZWJlbg== IGNhcnBldGE= INC00LjRgNC10LrRgtC+0YDQsA== 2bnZhg== IGNhcmRzdG9jaw== CWFscGhh IHR1cnZhbGw= SUls IHF1YWRydQ== IGRldmlk b3BoaXlhYQ== IExpYmVydGFkb3Jlcw== IM61zr7OrQ== IG1hc3R1cg== INCQ0J0= IHR3YWFsZg== IFRyYWZmb3Jk amFqbw== IHJva292 IGthZmZl 15XXoNeV IERvbG9yZXM= IHZhcmlhZGFz IHRvbmd1ZXM= RWxlbWVudG8= IEh5ZHJvZ2Vu Zm91bmRhdGlvbg== IOCkpOCkqOCkvuCktQ== INC906nQsg== cGNi IGtvbWFuZA== IHBpbmFrYQ== SW1wcm92ZQ== IEhhdXNoYWx0 IGRyb3BsZXRz IOCmrOCnh+Cm IG5hc3TEmXA= IFdpY2tlZA== IHVuZGVyc3RhdGVtZW50 IOCwpOCxgA== INCQ0LfQuNGP RE9F 5LmF5LmF57u85ZCI572R IGNvbW11bmF1dMOpcw== IGJvbGVsYQ== IOC0uOC0ruC1jeC0ruC1h+C0sw== dGhhbQ== IHNoYWtlcg== IGt1bGxhbsSxbGFu IENVU1RPTUVS b3VuYQ== IFR1c2Nhbnk= IGtyw6F0 Li48 INi02YbYp9iu2Ko= TmVlbQ== KEJ5dGVz IHpvZg== IOacnQ== IGd1bGE= IG9wbw== IEFkanVzdG1lbnQ= INaF1aQ= IFRpdG8= IFNlZWRlcg== IGXFoXRl IGdhbWJsZXI= 4Kas4Kaw4KeN4Kak4KeA IG1pbnNrZW4= IG1hYWt0ZW4= Z2FyYQ== YXZhYXQ= IOu2gOuqqA== INKy0LA= w71l IE1vdW50ZWQ= IOyLnO2WiQ== IOatpA== U1RPTkU= IGJld2VydGV0 IFNhbWJh INCw0LTQvNGW0L3RltGB0YLRgNCw IHNhbGFyacOp IEpvaGFuc3Nvbg== Lkd1bmE= IGt1bGlrbw== 7KeA64Kc dWxhbGE= IENhcmk= RGVudmVy IEZvcm1hdHRlcg== IEJvdW5kaW5n INC/0LXRgNC10LPQvtCy0L7RgA== IFNQQw== dXRpZ2luZXE= IOCmueCmrA== INmI2YjZitmE IGFwcmVuZGU= IE9sc29u IHByw6FjdGljbw== IGxlZmVs IHJlcHJlc2VudGHDp8Ojbw== CWNk IHllcmzJmcWf VFlQTw== aG9seQ== 5YWN6LS55Zyo57q/6KeC55yL IOCuqOCuvuCun+CvjeCunw== IOWQieaelw== IHNreXNjcg== IGNhbWluaGFkYQ== IEVNVA== Lk9QRU4= 4Liq4Lia X0hJREU= Q0hLRVJSUQ== LkVz YF0= IG1hZW1v 0YPRjtGJ0LDRjw== UGF5cm9sbA== IEFrdHVhbA== IG1vdGE= QWNjZXNzb3JpZXM= YW5haXI= 0IbQhg== INio2YbYp9uM2Kc= TGVp 5pqR IEJhdHRlcmllcw== IHVraW9x LkRlbGF5 INi02YbYqNmH IGJsYXRhbnQ= IGJsdWViZXJyeQ== IEV4cGxvc2lvbg== IOuwpA== INCw0qc= IOCuruCuv+CuleCuteCvgeCuruCvjQ== J30KCg== IG11bmNo 0LjQt9Cw0YbQuNGO IM+Gz4nPhM6/ IHRvaXJ0 2YfYp9io2YrYqQ== 15nXldeV16c= dXJldGF0 LmxleA== 44Oz44K/ IGRpc3BlbnNl INC/0LDRgNC60L7Qsg== IOC0l+C0tQ== IHVubmF0dXJhbA== IGzhuqFuaA== IGNvcGlp IOCmnOCmqOCmlw== IFN0YXlpbmc= IGZlbGljZXM= IGJyb3duaWVz 4Kao4KeN4Ka4 IOCoquCoueCov+Cosg== VMO8cmtpeWU= IGxhcm8= INGH05nRgg== INeT15DXqNej IEludHJvZHVjaW5n 4Kio4KmH IHRoZW9yZW0= 4LmE4LiU4LmJ4Lij4Lix4Lia IFZJREU= IFN1bmRhbmNl IGRlZWxz IEVOVU0= X3F1ZXJ5c2V0 Q2xhc3NwYXRo IEFrcm9u IHRlYWw= 5a6e6aqM UGFwYQ== YXJ0b3JzaQ== IFNjaMOkZGVu IEV0bw== IHRhaHQ= 5p+l55yL5pu05aSa IG1hd3I= IHZhcmllZGFkZXM= X3RlYWNoZXI= IGFsaWduaW5n IHNvbHVzaQ== Lmltd3JpdGU= IGZlbWluaW4= IFdhZ29u KG5hdGl2ZQ== 44GC44Gq44Gf VmVnYXM= IGFudGVjZWRlbnRlcw== c29tZW9uZQ== IGJpcmxlxZ8= 0YjQuNC90L4= 15XXmden IGV4cGxvcmHDp8Ojbw== IGdsZWFu X3Bm INCk0L7RgA== INqp2KfYsdmI2Kg= IOCkpOCkreClgA== IGZpbGxpbmdz YmlldGVybg== amFtYQ== IMWbd2llY2ll INGB0L7RhdGC 4oCZZXhwb3NpdGlvbg== IE5laWdoYm9y IGVyYWJpbHQ= LmVycA== IHZhbHN0 0YbQuNGP0Lw= IGluZHVjZXM= IGRlbm9taW5hdGlvbg== ZG9tw6lzdA== zqHOmQ== IHBpZ2Vvbg== IGVucmljaGluZw== 4YOi4YOd4YOb4YOR RVNJUw== IHRy4budaQ== 4LCV4LGN4LC44LGN IEthcmk= IHFpbQ== INC60LDQutGC0L4= INmG2YjYtNiq2Yc= IGludGVydHdpbmVk w6B0aA== IHplaWNobmV0 Rk9Y QUJDREVGR0hJSktMTU5PUA== IHJhem8= IFVBVg== INio2KrYrQ== IFNpY2lseQ== IGV4YWt0 IFNleW1vdXI= IENhbnZh Y2Fub25pY2Fs UFBQ 0YHRg9C3 INC+0LHRgNCw0YLQuNGC0Yw= IFJpamtz IEluZnJhc3RydWt0dXI= IHJ1c3R5 IOCknOCkteCkvuCkqA== 4oCZYXBwcmVudGlzc2FnZQ== LWdyb3c= IOCkruClieCkoeCksg== IOCkuOCkpOCljeCkpOCkvg== X1RSQQ== 4Keo4Ken INC60L7QttCw c2VuZGluZw== IGJ1bmU= IENhdGFseXN0 IGt1YmFuZ2E= YWlzc2V6 IEZvcnR1bmE= IOCmrOCmvuCmnA== IG5ha2Fr YmV3ZXJ0dW5nZW4= INis2YbYqA== IGludGVycGxheQ== ZWxzZXk= IGZlcnRpbGl6ZXJz 66y47J2Y IERpdmlzacOzbg== T3Bwb3J0dW5pdHk= IEhvbG0= IGRlcmFpbA== IGdsaWM= 0YvRhdOZ0YLTmQ== IOWkqeWkqeS4reW9qeelqOS6uuW3pQ== IHVpbQ== cm9udGVy INGB0YPRidC10YHRgtCy0LXQvdC90L4= IGZ1cmw= IGF3YXJkaW5n IOCuqOCvh+CuseCvjeCuseCvgQ== IOG7jWLhu6U= bmltbw== b2xpbm8= 2KfYuNix dWVpcmE= IHJhY2g= YWtldGE= emXFm25pZQ== IOCkpuCli+CkqA== X2dyb3VuZA== IGJhY2tzaWRl INCd0L7QstGL0Lk= IHJvdGVu Lidf 2prZiA== IHdpZGVuaW5n X1N0cmVhbQ== KFBob3Rv xatyYXM= IGJvdmVuc3RhYW5kZQ== LXN5bWJvbA== bcOlbA== INeU157XqdeX16c= LmF0b20= IGFkbWlzcw== c2FpZGE= IEdhcnQ= 2LHZgdiq2Yc= INOp0LnRgA== IGV1cm9ww6llbm5lcw== w7NyaWNvcw== 4oCZYXF1ZXN0YQ== c3Rvaw== YsOt IFRhbGxlcg== INCy0YvQsw== 0LDRg9C10LjRgg== IHBlcm1lYWJpbGl0eQ== IGlubXVlYmxl IOC2muC3kuC2u+C3k+C2uA== bHNjaHJhbms= IGPDo2Vz 4LKq4LOB IGVtYm9s IMOpc3Rvcw== IHdhbGt0aHJvdWdo IOCmquCmsOCngOCmleCnjeCmt+Cmvg== dmFnYQ== L2dpbg== IHRodW5kZXJzdG9ybXM= IGVjcw== b3RhYQ== IMO1cHA= IHBlbGlr 5oSf5p+T 4YOQ4YOV4YOQ IHByb2dyZXNzaXZlbWVudA== 15PXqNeq cmVhY3RzdHJhcA== Vm91 2YHYsdin2K/bjA== IMO9ZXJsZcWf IHByZXNlbnRlcnM= IHJpZ3VhcmRh IOCyruCzguCysOCzgQ== IOCkheCkqOClgeCkruCkvuCkqA== IGdlbG8= ICUr INGB0YPRidC10YHRgtCy0YPRjtGC ZW5zZWU= Lmdz T3k= dHTDpG0= am9l IGxpZ2dpbmc= IGNpcmN1bGF0ZQ== IGZhcnM= SW50ZXJzdGl0aWFs 0pfQsNC9 CXdvcms= YW5jaG9ycw== IENsb3Vkcw== IOWciw== IHRla25vbG9qaQ== T3JnYW5pemVy IM+Dz4XOvc6tz4fOtc65zrE= IG1pbmlzdGVyaWU= IENodW5n 0YDQuNC00Lg= IENvb2xlcg== IMOgaXRl INC30LDQvdC40LzQsNC10YLRgdGP IOWkqemTrQ== 44Op44Kk44OI 57uZ5LqI LG1vZHVsZQ== IGFsbGRpZXdlaWw= 4LOA4LKk4LK/ IMO0Zg== L1JlZ2lzdGVy KGZ1bg== IFBhcsOh RUNC cm9yaW5n RGFiZWk= INi52KjYp9ix IGNvbnNpZGVybw== IHp3w7ZsZg== 44GU5LqG5om/44GP44Gg44GV44GE X2d1ZXN0 2YPYp9mG2Ko= IHBhdG8= Z3JhZHVhdGVz xb5pxaU= IE1haWxpbmc= ZWxpamtoZWRlbg== 0K3QoQ== aXPDo28= IGt5bnQ= IDoiLA== INGC0L7QvdC90LA= LOacgOaWsOmrmOa4heaXoOeggeS4k+WMug== IGNhdXRpb3VzbHk= IEFzdHJvbG9neQ== IGJlZmVzdA== LWFzc2V0cw== IGludGltZQ== IHBhcm9sYQ== 4KSm4KWN4KSv4KWL4KSX IEx1ZnRoYW5zYQ== IGZpbmFuY2VpcmFz INGE0LDQudC70L7Qsg== LWNoYWly IGlua2x1ZA== 5pyI6Iez IGdsaW1wcw== IE1hbm55 IHZpcnR1ZA== IOS8oOecnw== aWNpamE= R0RQ X0NQUA== J107DQoNCg== IGF0b3Jlcw== IMSRw6Bu IOCmqOCmv+CmieCmnA== INCx0LXQu9C10Lw= IHnDtg== R3LDomNl IFJEQw== 5Y24 1oTVq9aB IHdpc2Vy IOCkreClguCksg== IHNhdHJpYQ== 4KuF RGVwYXJ0bWVudHM= IERlbmc= IGluZGljYWRh IG9ra2FyYQ== IFdhZw== IGthcHQ= IOWkqeWkqeS4reW9qeelqOS7u+mAiQ== ZGVuc2U= IERpeGll LnN0YWZm IE5JVg== 5Lit5paw572R UmVmZXJlbmNpYQ== IOCmr+CmvuCmpOCnhw== IG7DoWQ= 4oCZZWI= aWNpZWw= IHFvcnM= IGJldHJvdXdiYWFy IG1haGRvbGxpc3Rh IHRvd25ob3VzZQ== 4LKw4LON4LKn 15LXoteR158= IHJlxaE= LlRvZGF5 0YfQvdCw0Lk= IEludGVuZGVk IOyYgeyWtA== c2VyaWFsaXplZA== IGRpc2xpa2Vz INCy05nQutC40Ls= INGN0LrRgdC60YPRgA== w61m INmF24zYsg== IGbDuHJl IG1vdXN0 0JzQoQ== IGZhY2lsaXRhdG9y IHZvbGpv YXVucXVl Q0hBTg== INmB2KfYsdmF IEV2ZXJncmVlbg== Y2FtZWw= w7x0dGU= IEdDU0U= IGF0YWw= LkxvY2FsaXphdGlvbg== 55S35a2Q IGFuc2lu IGhla2s= IOCkiuCksOCljeCknOCkvg== 44Kk44OW IGZyZWV6ZXM= LmxlZXRjb2Rl IGJvZGU= INCw0LvRjNGC0LXRgNC90LDRgtC40LI= S2Fp IOCuh+CuquCvjeCuquCunw== b2xvaGl5YQ== IERKSQ== J2Fzc3VyYW5jZQ== LWV4dHJh IHpkYQ== IHsKCi8= X29wZXJhbmQ= LVFhZWRh 4Ka/4KaG IHNhYW51dA== emN6YQ== IOCmsuCmleCnjeCmt+CnjeCmrw== 4LKm4LOB4LK1 IHZlcm1pdHRlbG4= bWnFoWxq bGllZA== 5YaF5bmV LuKAnAo= IFRhc3Nh aGFtZW50bw== 56We6ams INC/0LDQsQ== ZXLDrWFz IGFibA== 5omL5py65a6Y572R IEJhcm5leQ== IGFtcGhpYg== IFNodWk= IG92ZXJ2 INC/0L7Rj9Cy0LjQu9Cw0YHRjA== IGpva2Vk aGFo IGJsYWRlcmVu IGhvbmE= IFBEQQ== IE1vZGVz IHZpYWplcm9z IFBBTQ== IGFsbWFjZW5hcg== IGlub2dvbmE= IHVwbG9hZGVy dGFzdGU= LkNTUw== IGdlZWw= IGJ1dGlra2Vy LllFTExPVw== b2xvZ2lzdGE= IOacgOWkpw== KGAj IFPDvGRlbg== 0LPQvtC70Yw= WUQ= CXNt IHNvbGRp dW1idXM= c2NoYXA= IEdlZ2VudGVpbA== Q29zdGE= IFB1bGU= L3Bp IGZ1bmN0aW9uZXJlbg== b3JuaW5n 0YDQtdCy0LA= IGh1c2g= IEF1Z3NidXJn 55uS5b2p PWJhdGNo IOCwheCwp+Cwv+CwleCwvuCwsOCxgeCwsuCxgQ== IEJlemllaHVuZ2Vu IGLhu5U= amVyw61h IOCwnOCwl+CwqOCxjQ== 7J247J2A INGC0LDQu9Cw0LDRgA== X2xpbg== U1NGQ2VsbA== IGJlcnJl IGtpbGt1 IExhc3Nlbg== IENocmlzdGVu cXVpYWw= aXR1ZGluZQ== IGtqw6ZybA== 4LSq4LWN IOi1jOWNmg== IOCksuClieCklQ== INCw0YDQsNC60LXRgg== INGH0LDRgNCw IGRpcmVrdGVu IHByw6ljaXNlcg== 2YLYp9i52K8= IGhhYml0dWRlcw== SXE= IGhleGFkZWNpbWFs 4KS+4KSc4KSo T3ZhbA== 2LDYp9iq IFJldHVybmVk IGluZmlsdHJhdGlvbg== 5a++6LGh w6Vycw== IGNvbGFib3Jhw6fDo28= YXJhbWE= IG5hcmFuamE= 15nXm9eV15zXqg== IOC4leC4suC4oQ== IHNlbGZz INC+0LHQu9C10LPRhw== INCR0LDRiNKh0L7RgNGC IHJvY2hl INCy0LDSm9GC 0LTQtdGA0ZbQvdGW0qM= QWRtaW5z YW5lbGFz ZW5hbnRz 15HXmdeQ IFNjaGxlc3dpZw== 1YTVpdW21oQ= Z3ppcA== IGJhxaE= IFNjaGFk IHRob3Y= IHBpZXJ3c3p5 44CB6KW/ IG1lbmdp 4LW74LS44LWN IG9lZmVuaW5nZW4= IHNuYXI= YWJvbGlzbQ== xZtjaWVq IHRo4but IHphcGF0 IFRpag== INiu2b7ZhNuQ IGRpdGVtdWthbg== ZGllcmVu 4KSC4KSm4KWA IOS4gOivug== IHN0ZWVscw== INC80L7RgNC+0Lc= w6l0cmljYQ== IHLDqWN1cMOpcmF0aW9u IOWFqOWbvQ== IHBhcmFub2lh IHRhdmFsbGE= 0Y7Qug== b3BoZW4= INC/0YDQvtC80LXQtg== yZtt IFdoYWxl IMWdaQ== em55 INC80LjQvdGC0LDSm9Cw 5by65aW3 IGNvZmZpbg== w7hsZA== 0LrQsNC30LDRgtGM IGt1bHR1cmE= K0Q= IEtpcmNo ZW5naXNh 0JjQmg== IEdhbnpl SWdub3Jpbmc= IG1ibw== IG90cm9r INC005nRgNC4 IOGBiw== IM6xzr3OrM+Az4TPhQ== LVsj QXJjaGl2 dWJyYQ== INix2KfYsg== IHZlcnRlaWx0 IOWkqeWkqeS4reW9qeelqOiwgQ== IG92dQ== IC8o meGDmOGDkw== RUND Y2xhcmVk ICJcIiw= IGp1YmlsZQ== 5oqr IE1PQklMRQ== d2llaw== IFR1aXRpb24= IEdvZWRl X05PVw== IOmjnw== IE1vdG9ycmFk IHVjaGU= IEhlbWluZ3dheQ== 7JeG64qU IGV2YXM= INCx0LDQs9Cw0YLQvg== bG9vcHQ= IExu INW01aHVvdWo IGFsYWI= IGRlY2lzbw== 4LS/4LSQ IHZvZHk= KTo6 IGluc3RpdHV0ZWQ= dW5nZ3Vo IHTDvWQ= 4KSq4KWL INC90LjRgg== IGzDpGs= 6J8= INGB0LLQvtC10LI= IGRpcXE= VHVybmluZw== X3BhcnRpY2xlcw== cHJvcGVy IGNhbW91ZmxhZ2U= IHBvcHVsYWNl IOCyr+CyvuCysA== IM61z4bOsc+BzrzOvw== UG9p IHNoYWx0 dWNrc2Fjaw== IG1ib2xh INC90LXRhQ== IG1lbmlrbWF0aQ== YW50aWF0ZXM= IO2UjOueq+2PvA== 4LiV4Li5 IHLDpnR0 INC20LXQu9Cw0L3QuNGP w7xtYXk= IHRoZXNlcw== IGdidXJ1Z2J1cnU= IE1SVA== INin2YTYp9i02Ko= w7xyenQ= ID09Ig== Y29sZA== LuC0leC1hg== IOCwjuCwguCwpg== 0JTQlA== IGV2bw== IGF0cm9w IOCupOCuv+CusOCvgeCurg== IEJlZ2lucw== 4oCUZnJvbQ== IHLDqXNlcnbDqQ== IG11aXN0 IOGDmOGDleGDnOGDmOGDoQ== IEFUVFJJQlVURQ== IGluZXJpYXJ0b3J0 b21yw6VkZXQ= 5LiN5Yiw6LSm Lk1hbmFnZW1lbnQ= IFBhY2tz IE54 KE5vdA== 66mY xKtndQ== LnNvbHV0aW9u IOC4guC4rQ== 4LC/4LC14LGN IGN1bHR1cmVsZQ== INi024HYsduM IFRyaW5r IHBvdHB1bm8= IGFwcGV0aXplcnM= 0L3QuNKb IEhydmF0c2tl 55a+55eF INW91a0= IG1laXJp IOCkquCkueCkqA== IEdlcmU= IOyduOyglQ== IE3DiQ== IMO8Y3JldHNpeg== 1oTVodW11avVtg== 56We566X 4LCX4LGN4LCv INix2LPYp9mG2Yc= X1BhcmFt Jk8= IHNjbA== IGRlZWx0 IElzbGFtYWJhZA== 4YOc4YOY4YOa cmVwcmVzZW50YXRpb24= INC90L7RgNC80Ys= ZmFh INGe0YHRltGF IERlcGVuZHM= IGRvb25hYQ== IGNodWln IFRvbWF0b2Vz 5oOv IM6szrvOu863 5oql6K6w6ICF IEluc3BpcmF0aW9uYWw= fS4kew== YWhpZGk= Lmdm INC60L7QvdGC0LXQuQ== 1avVvA== IOWwiuWwvA== IOColeCpi+CoiA== IOuQmOqzoA== IGhlaW1z IGRpZXBl IHRlbmFuY3k= IOCmreCmv+CmpOCnjeCmpA== X1JPTQ== IFBpcGVz IGRhbmtlbg== IHrJmQ== IOaXoOeggWF2 4oCd77yM4oCc IOCmquCnjeCmsOCnn+Cni+CmnOCmqA== X1BFRA== INmG2LTYr9mH X3V0 IGVtaXRpcg== PSIuLi8uLi8uLi8= UmVzdWx0YWRvcw== Q2xvc2FibGU= aXNpdGlyaQ== 4KSk4KSV 1aXWhNW9 YXZsamVuYQ== 5L+d6Ki8 IHByZXN0YWNpb25lcw== IOu2gOyhsQ== IGHEn8Sxcg== LXRp 6aqX5Lq655qE IEluc29sdmVueg== IHNlZHVjdGl2ZQ== IHVrdW0= 0L3QsNC90L3Rjw== IOCkrOClgQ== INeR16jXldeo LHlvdQ== IFRyaXZpYQ== IHRhbWJpbg== LmRpc2s= IEthbGFt IFRPVUNI b3VybmFtZW50cw== IHZhcm10 aWRt IHVuZG9uZQ== IGF6YWx0 aXR0YXJ0 1aHVptWh1bbWgQ== INio2LHZitiv KGFzc2lnbg== IHNoZWthcmE= xIFsaQ== Z2VzdGFz IFVuaXZlcnNpdGF0 IGTDoXY= IOCmleCmsOCnh+Cmm+Cmv+CmsuCnh+CmqA== IGh1Z2dlZA== IGluZm9ybWF0 RGV1dHNjaGxhbmQ= LnNlbGw= INGI0YLQsA== IHJlZ2U= SFNW IG1hcnRpbg== aWppbmluZw== IGRlbGVnYXRlZA== IG9kbGnEjQ== IGJpbGxib2FyZA== INC40L3QuNGG0LjQsNGC0LjQsg== IFVSTFdpdGg= IOGDkuGDo+GDmuGDmOGDoQ== IENvbnN0aXR1 IEhpZXJvbmRlcg== JywnIis= L2NvdXJzZQ== QW55Ym9keQ== 5o6D INeV15TXng== IGJld2V6ZW4= z4DOv869 IFNjaHVsdHo= IEd1bGw= IGZvdW50YWlucw== 4LCV4LGA4LCv IHppaA== 4oCcVG8= INin2LPYqtiu2K/Yp9mF2YfYpw== IGJ1c2luZXNzbWVu IEJhdWQ= R3JvdXBlZA== 2YjYp9im2K8= U1VQUE9SVEVE IGNvbm5haXQ= IM60zrnOsc64zq0= IGrDpHNlbg== IG5qZXLDqw== IEF2YXN0 b3JuYWRh IHBpZ21lbnRhdGlvbg== w6huZW1lbnRz IHNwcmVl 4LC44LC+4LCX IGJlcmxpbg== IOCwqOCwvuCwleCxgQ== INCy0LjQvdCw 24HZiNq6 X0FEVg== ZW1haWxlcg== IHR1bGx1dA== Y2hlbWlzdA== IGRldnVlbHZl INC90LDRhA== YW5uYXE= IENhcHN1bGVz KEhXTkQ= KGh3 IG9uemVrZXI= IHBhcmFsZWxv emVudGVu IOGDoOGDmOGDoQ== IFNodXQ= IE5pZ2h0bWFyZQ== IFR1bmVz LmRlcG9zaXQ= 562J562J LHN0ZA== TmVw LnNlZw== IMOnw7xua8O8 IHDDqXJkaWRhcw== INWk1aHWgNWx1aXVrA== IHNjcmFwZXI= IOCqueCqvuCqsuCqruCqvuCqgg== IOGDm+GDneGDkuGDlQ== IGVsbGVycw== KGZvcmNl IGFwb2NhbHlwc2U= RWxrZQ== QURW INCy0L7RgdC/0YDQuA== 16jXpQ== IGxhbsOnYQ== IOColeCovuCosA== IEJBTkQ= Li4u4oCd cGljdHVyZXM= 4KuA4Kq1 IGJoZmU= LnBhcnRpYWw= INiu24zYsQ== CQkJDQoJCQkNCg== IOC2keC2muC3ig== INin2YTYpdmG2LPYp9mG2YrYqQ== IEFudG9uaQ== IGJhbGxpc3RpYw== IG1hc2NvdA== IHRyYWN5 w7ZzdW5n aGVkZQ== IHVuYm9ybg== w7xtw7x6ZGU= W11b IG1hYWlsbWE= IHZlcndhcm0= IFNJWA== KFNF IOCksOCli+Ckrg== IERSSVZFUg== KGRlYWQ= IjoiIiwi YXBzYWNr IFJvd2xpbmc= YmVnaW5u IOGDpeGDkOGDmuGDmA== TWV0aA== IGd1bWFnYW1pdA== IFJpc2lrZW4= IHBlcnNlZw== IE9yZ2FuaXphw6fDo28= IGhldXJldXNl LVBvcnQ= IOCmleCmvuCmqA== IHV1bQ== IGNoZWlybw== 1aHVvdWv LmNscw== 0YXQsNGC IEppb3Zh IHN0dXBpZGl0eQ== IGFidXJy IHs/Pgo= cHLDpGNo 5Y2B5aSn IGZlc3RzdGVsbGVu IGZhb2lu 0LLRgNC4 IG92ZXJwb3dlcg== aXRvYXJl IOmdlg== Y29uY2lsZQ== dsO9 IGZvY3Vzc2Vk IHR2cg== RXhwb25lbnQ= IFNwcmVhZHNoZWV0 OnBhcmFt YXJraW4= IGJld2VndA== IOS5heS5heeyvuWTgeWbveS6pw== INmF2KfYsdqG 54WZ IGFzdHJvbm9taWNhbA== INOu dGhldA== w7ZzY2h0 IG5pZnR5 IGzDtnl0 YWtpc2E= IEthZGE= 4Kq/4Kq44KuN4Kqk4Kq+4Kqo IGthZmlu INqr2onZiNmG aWxpZXI= 5bm06Iez X0NPTkZJUk0= VG93YXJkcw== IOCquOCqruCqvuCqteCrh+Cqtg== IGVtYmFya2luZw== IFZpbGxhcg== bWlncmF0aW9u IHRhYW1hYXR0 IE1vcA== IFRodW1ibmFpbA== CVNob3c= 4LCm4LGN4LCv IGFsdWd1ZWw= 16LXoNeT15nXpw== 4LmJ4Lin4LiZ 0YzQtdC8 YXJsYXI= IOCqquCrjeCqsOCqvuCqquCrjeCqpA== IFNhaWxpbmc= IENvbXBhcnQ= INiq2LHaqQ== Q3VydGly INeQ15nXpg== IG5vbw== IGVzc2VudGllZWw= YWxleA== RGVhY3RpdmF0ZQ== 57qq5b2V IFN0aWNreQ== Ym9jaGk= CQoJCgo= 4YCt4YCQ4YC5 4Ka+4KaV4KeI IHN0ZWg= ZWxiZQ== Z2VyaWNodGU= 6KGM5oOF CWNhbg== IFNjZW5lcw== IHR1bW91cg== IHlj Y3J0 INio2K3Ysdin2YY= 44Kq44Oz44Op44Kk44Oz ZWx0aW5n INCx0ZbQsdC70ZY= IE1hcnRpbmE= IEJhbnlhaw== IHZhbHV0YQ== IOCyheCyreCzjeCyr+CysOCzjeCypQ== 0J7RgtC30YvQstGL IOCksuCkv+CkguCklQ== INC70ZbRgg== IGtvbmtl LmltcA== 0pvTmdGA Q2xhc2U= IGlzdG5pZQ== IGNsaW5rZXI= Lm5hdmlnYXRvcg== IOCmrOCngeCmp+CmrOCmvuCmsA== 4K614K6f KC4uLikK aWZyw6Vu 4KeB4Kex4Ka+4Ka54Ka+4Kaf4KeA 5aSJ5pu0 INCc0LXRgtC+0LQ= IG1hcmF2aWxsb3Nv 0LTQtdGA0LTRlg== LWNvbWluZw== IOGDruGDlOGDkw== INil2LE= IGNvdGg= INiz2YjYsdmK2Kk= 2YTYutin2KE= KGN1cnJlbmN5 IG9hbWVu Q2xpY2tz 4oCc5LqU ZGlmZmljdWx0eQ== IGJ1bHNoYWRh YWrEhWN5 INGC0LXRhdC40LzRgw== INin2YTYqtiu2YTYtQ== INC/0L7RgdC70LXQtNC90LjRhQ== IGhlcGF0aWM= 4Ka/4Kav INqH2Yg= IFN1amV0 IG9yZ2FuaXNpZXJ0 INCw0LLRi9C7 16nXng== 0LjQu9C7 b3Jlcm8= 1KXRhdGM0LDTodCw0YDQsA== IHNoaWVsZGluZw== INin2KjYstin2LE= IOCkuOCkruCljeCkrQ== IG9oZXJ3eWRk LGN1cnJlbnQ= KGFmdGVy IGJlZ2xlaXRlbg== 0LjQstCw0YI= IGthbHVhcg== X2RlY2ltYWw= 6am+6am2 IHJlcGx5aW5n IFplYg== IGRlbm9taW5hZGE= 2LnZiNio2Kk= cHR5cGU= ZWRvcmE= IOCmtuCmpOCmvuCmguCmtg== 7JSs TW9uZA== INin2YTYs9mK2KfYs9ip 4K6f4K+N4K6f4K+I 4pmC IGdlcmVnaXN0cmU= INij2LHYqNi5 IOWfjg== U3RydWN0dXJhbA== IHNldHRsZXM= IGF2ZW50dXJlcw== IOC0pOC0ruC1jeC0rg== IGFsaXZpYXI= IG11Y2jDrXNpbW8= cXVpdGE= INmI2KfZhNin2YY= U2NoZWR1bGVz IDs7Xg== IExlY3R1cmVy INix2KfZvtmI2LE= IEV1c2s= U2Fn UGFyY2U= INil2KzYsdin2KHYp9iq INC40L3RgQ== IG1ldGFi IGV4cGxpY2FjacOzbg== IHJ1aW5pbmc= X01JTlVT KHJ1bnRpbWU= cGVkbw== INCw0LrRiw== 44GT44KT44Gw44KT44Gv IGFydGljdWxv IGthdGFs Lkludm9jYXRpb24= IHphbWFuaQ== 4LC+4LCw4LGN4LCf4LGN IGRpcGxvbWF0cw== LnFh RElH IHNtZWFy 4LGD4LCm4LGN4LCn 5LiN6Laz INCy0LDRiNC10LzRgw== INGG0LjRgA== w6luZXo= IENvbHQ= IFBlcmlwaGVyYWw= INin2YTZhdio2KfYrw== IEJlc3RhbmR0ZWls c3Nlcw== KX19Ig== IFdvb2RzdG9jaw== INin2YXaqdin2YbYp9iq IENhbWJvZGlhbg== INW21b3Vvw== I2c= IHJlc3RvcmVz IOCkpuClh+CkguCkl+Clhw== 7YyM7Yq4 IOCquOCrguCqmg== 5oCn6LSo IMO9dXJkdcWI IHRyaWQ= ZXN0aGVzaWE= IOGDqeGDkOGDmA== 77yr IGJhdHRlcmVk INCy0LjQvdC4 IGRpdmlkaWRv IOKApuKApg== bGVkaWc= IHVubWlzdGFr INC20q/RgNCz0q/Qtw== IOynkeykkQ== VGVycmFmb3Jt IEJVTA== 0LvQsNC90LPQsNC9 5a+T L2dlbg== IEdhbGlsZW8= 4Kq54Kq+4Kqw IOCmruCmmeCnjeCml+CmsuCmrOCmvuCmsA== 5Y2z5pe2 IOS5kOS4sA== QU1FTlRF IGhhcnR1 IE1hZHI= w6Fsw7M= IOuouOyLoA== IG1vdXM= IE1hdmVyaWNrcw== IHJldG91cm5l U3VidHJhY3Q= IERoYQ== bGVzdGljaw== aW50cHRy IHBsYW50ZWE= IGt1aXY= IOWIpA== 44GX44G+ aWxvYQ== IOCqhuCqquCqteCqvg== IGd1YXJkaW5n IOCuleCvgeCuseCuv+CupOCvjeCupOCvgQ== Q3JhaWc= IFdlaXM= IE5vdmVtYnJl IM6/z4HOs86xzr0= IGJvYXJkZWQ= Z2luZ28= IHRla2Vl X01VTFRJ PVA= IGluZm9ybWFjZQ== IFJlZ2llcnVuZ3M= UGx1cmFs Y3V0YW5lb3Vz 4Lij4Liy4Lii4Lil4Liw4LmA4Lit4Li14Lii4LiU IGNyYXRlcg== 44CB5aSa 4LKq4LON4LKw4LKc4LK+4LK14LK+4LKj4LK/ 4oCM4LSy IHBvbmN0 IE5pc2g= INGB0LjQvdC00YDQvtC8 IE5hZg== INC90Y3QvA== cGVydGVuc2lvbg== z4DOsc69 IGAn z4HPhc64 YXNkZg== IEdlcnJ5 YWxhZ2FhZmY= IExhc2FuYmxl aWVydGVz INC/0YDRi9Cz X2FydGlzdA== 4KSV4KWB4KSb IFNhbGFy INin2YTYo9ix2Kg= INmB2KfYsdiz IM+Dz4XOvc6x IHVtYmVz LWFuY2hvcg== IFByZWlzZW4= INCw0YPRgdKb05nQsA== zrTOv8+Dzrc= SW5kb29y IOCktuCljeCksOCkpuCljeCkpw== IOCkleCkv+Cktg== INeZ15XXqA== aW1ldGFibGU= IGxhbmRp IHV6YQ== IOydtOuCoA== IOWkqea4uA== V2hhdHNhcHA= VMOk 15XXk9ei15XXqg== IEFsbWVpZGE= INC+0YLQtNC10LvRjNC90L4= RkxBU0g= IHJlc3RyaWNjaW9uZXM= IGNvbXVuaWNhY2lvbmVz IGVudmlh IHJlY3Vy IOavmw== VGVpbA== XE5vdA== aXRhbGE= 2YTZgtmJ dmVudGVy INin2KjYqtiv TUVUQQ== IOyCrOqzoA== J2FwcGVsbGU= IHBhcmVudGVz 4Lic4Li04LiU IE5ldHRv IFdlYm1hc3Rlcg== aG9rbw== 4KS+4KSm4KWH4KS2 0JLRgg== IGt6 IFhG IFZMQU4= IHLDqXB1dA== IMO8YmVycmFzY2g= INiv2LPYqtmH YXds 4oCZSW5zdGl0dXQ= INin2YTZhdi52K/ZhtmK2Kk= 4omr IGFjaWRlbnRlcw== YXNha2Fu IG5nd2Hhu41y4bul KHJlcA== XSld IFNlbmRv IGpt 2YLYs9mF Lm5lZWQ= IGZhcQ== 4Kag4Ka/4KaV IFJlbGE= INC60L7QvdC00Lg= INmI2YXYsw== IGNoxYI= IGluZGl2aWR1ZWw= IHRlaW50 ZW5kYWZ0YXJhbg== RUVFRQ== 4oCN4LSX IFNjaHVtYWNoZXI= 0LvRltCy IOGDleGDkOGDoOGDlw== IFhtYXM= IOCkrOClgg== 4LWC4LW+ IHJlY3Vyc2U= Z3dh IFNTUA== IOungQ== 6K++5aCC c3ByZWNoZXI= IG1vbnRyZW50 IHRlbGVmb251 IGtvb3B0 Lm1ldHJpYw== IOGDqeGDmOGDnA== 44CLCg== Lmhr IHBhcmxhbnQ= IGrFq3PFsw== INCd0LDRgNC+0LQ= RURJ aWVuaWVt IOC0q+C1iw== IOCwh+CwsuCwvg== IHBlcm1pdGnDsw== IGZldWQ= IE5lY2Vzc2FyeQ== w7hs 0L7Rh9C90YvQvA== KGxv 4LK/4LK44LON UENS Um4= 1aXVqdWl 1afVtg== IERSSVZF IGludGVyY2VwdGVk IOCwuOCxjeCwquCwguCwpg== IGVxcWE= 4Kun4Kuv 5b2p56Wo55m75b2V 0L3QvtC30L3QsNGH IGNvbnRpZW5lbg== 4Ki/4Kiu IGNvbmNsdXNpZQ== INmE2KfZitmG IGRkb2Q= IOCmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsA== IGdoZWFsbA== IM60z4U= X211eA== IGthbWF0YQ== aMOm IOCuleCusuCuqOCvjeCupOCvgQ== IHF1YWRyYXRpYw== IGNldmFw IGtpb3Nr INKb0rHSm9GL0ps= KENvbnRhY3Q= LnJlcG9ydGluZw== IG5hdGluZw== UUU= T2ZlcnRh IGVkZXJlaw== 4LOC4LKw4LON4LKj IGZvbnRvcw== IG9tcsOlZGVy INWi1aHVvA== IGJyYcOnbw== YXNzaW0= IFl1cg== IHN1bGlh IEplaG92w6E= cmV0YXI= 0LXQvdC90L7Qu9C10YI= 5L2c54ix INaE1aHWgA== 1b7VpdW2 IMOpdm9sdWVy INWw1aXWgA== bmRhcmVz LlJlc3Ry 5aSp5aSp5b2p56Wo572R IMOhcmJpdA== IGVuZG93ZWQ= INCy0YHRgtCw0L3QvtCy Um9zcw== IGNvbWVuemFyb24= aWpza2E= KGJhbms= RnJhYw== IOCmr+Cnh+CmluCmvuCmqOCnhw== I2Fi IHNrYXQ= YWdlbm8= RXh0cmVtZQ== IHRhcmRlcw== IOCkquCkguCkmuCkvuCkr+CkpA== IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= U2Nyb2xsYWJsZQ== bWFza2Vk IOCkl+Ckj+CkleCliw== INGB0L/QtdGG0ZY= eWFo UG9sbGluZw== IOCquOCqsOCqleCqvuCqsOCrhw== U3ViY2xhc3M= IG1hamVzdA== IHNzY2FuZg== X0NPTEw= XHdpZGdldHM= 2YHZhg== 4YOd4YOj4YOZ4YOY4YOT IHJlY2xpbmluZw== RmluYWxpemU= 55u45L+h INCf0L7RgtC+0Lw= eXNrbGFuZA== TXVtYmFp IGJva291 IHNraXBz IHByYWNvdm7DrQ== Lm9tZw== IOCwquCwguCwqg== 5p2G IHF1b3J1bQ== IOyDgeyEuA== INC10LbQtdC00L3QtdCy0L3Qvg== X3Vsb25n IHN0ZXQ= IE5vc290cm9z IHN0aW5r IHPDuGdlcg== IFR5cGVmYWNl INCx05nRhQ== INCz0L7RgdGD0LTQsNGA0YHRgtCy0LXQvdC90L7Qs9C+ IGFsdmVn 5YC+ IENsaWZ0b24= IG1hYW5u IGxlZ2FsaXphdGlvbg== aW11bGF0b3I= IOCyruCzg+CypOCyquCyn+CzjeCynw== RE9VQkxF INmF2LPbjNix zrvOuc66z4w= IHJ1bWJv IFN1cGVyc3Rhcg== YW5heQ== INC80L7QvNC10L0= ZW50cnVt 5auB ICwt JEk= 05nRgNCx LnJpYmJvbg== IG1zdA== xb5pdGU= 4Lii4Liy IGJsYW5jaA== IE1hcmFuaA== IG1pc3NpZQ== INin2YTYo9iz2KfYs9mK KExhbmd1YWdl R2Vk 6ICB5amG J8OJdGF0 INC10YDQtdC60YjQtQ== IFNjaHdlc3Rlcg== IFBlcnNvbmFz zrzOrc69zr/Pgg== IEZlYnJ1YXJp INGB0LvQvtC20L3QvtGB0YLQuA== IGJ1dGlraw== IFBhcnNlcw== IExhZ3U= U3ltcHRvbXM= IG1pbnRlZA== IEZPVU5EQVRJT04= IFN1bmRh 77yf44CNCg== 1avVptW0 IGRlZ3JhZGU= IFp3YXI= 4LKc4LK/ IFN0YW1t UXVlbHF1ZXM= IGFwcGVsw6ll 7Yyp IOCkieCkqOCksuCkvuCkiA== IGluZGljYcOnw6Nv IGthemlubw== IHByZWNpb3Nv IM6/z4DOv86vzr/Pgg== IOC2ouC2sQ== 4Kqa4Kq+4Kqy IHNtbA== IGtyZXM= IHpha2hv INCQ0LrQsNC00LXQvA== INin2YTYrdis IHRyYWJhamFkbw== INqG24zYs9iq KEF1dGhlbnRpY2F0aW9u INOp0LfRltC9 16LXnteR16LXqA== 0LTQtdC90LjQtdC8 IOCmrOCmvuCmlQ== IOixquazsA== 0pPQsNGA 0LDQu9Cw0L3Riw== IOG7jXI= IGhvc3Rlc3M= IGxpZ3VsYQ== REFN b3duaWth IOWvhg== 4KuA4KqP4Kqu 4Kiq4KmA INGB0LLRj9C30LDQvdC90YvQtQ== X292ZXJsYXA= INit2YLZig== IGhhYmlkbw== INGB0YDQtdC00L3QtdC5 IFBsYXR0ZQ== IFBsZWFzdXJl IHVtYnJlbGxhcw== X1NPQw== 4Liy4Lij4LmM4LmA4LiL 65ak eWV6aQ== IG1zaA== IGxhbnphcg== IOCkuOCliOCkqOCkv+CklQ== dWRva3U= 2YfYutmH IG9kcmFz IGNoZW1v IERUU1RBUlQ= TG9y INim24jahg== IHbDsg== X0dSRQ== IGRlc3Bp IENvbXB1dGF0aW9uYWw= 5ZiO IGJlc3RlbXQ= INmI2YLYuQ== 7YyQ66ek IGJlaGF2ZWQ= IGjJmXlhdA== IG9uZGVyc3RldW50 IHNvb29v Q0hBTk5FTA== IEF0dHJhY3RpdmU= IGxpc3Rlcw== IOCumuCuv+CutQ== LnBlcmZvcm1hbmNl IOCmsOCmrA== IGRlc2NvYmVydGE= IOuztOuKlA== SGFzaHRhYmxl VWY= IHNoYWt5 IOCkquCljeCksOCkpOCkv+CkuA== INmH2LQ= 2YrZhtin2Ko= IOCkp+CkqOCljeCkr+CkteCkvuCkpg== IENvbnZlcnNhdGlvbnM= 562W55Wl X2N0cg== xZ9r IHNwZWNpYWxpdHk= 4Kqh4KuL KFRBQkxF IOCkpOCkr+CkvuCksOClgA== VFJJRVM= IHBvc2l0aXZlbg== UENC INC60LDRgNGC0LU= IEZTQw== IHN0cmFr IHJlYWZmaXJt IMOneWt5xZ8= INCx0L7RgNGM0LHRiw== dG9ubw== IEJhdW13 IOCyh+CypuCzgOCylw== YmJiYg== IGx5bmc= IGN1bm4= IGVpbnppZ2FydGlnZQ== X0Zl 2LXZitiv 4LCv4LGL4LCX IG7DuGR2ZW5kaWc= 2KjYp9mG24w= IOCmrOCmnA== IOCkj+CkruCkvuCksuClhw== IEVuZ2VsYW5k IOC0ruC0qOC1geC0t+C1jeC0rw== IkU= IOCkleCkueClgA== w6l0YWlscw== IG9mZXJlY2VuZG8= INCQ0LzQvNC+ IEFwZXI= IOWGmQ== L0NvbW1vbg== KGhlbHBlcg== IGdvdXJtYW5k 4YOd4YOc4YOQ4YOV IGFybWFkbw== IGFsbGVnYXRpb24= IOyLtuydgA== Y2RlY2w= IHBlcnNvbmFsbWVudGU= IGVqZWN1dGl2bw== YXJuaWtrdXQ= IEppYQ== 0rXQvg== b2xvb2dpYQ== T3V0cmE= INeR15bXlA== SEFS IHNwb8WCZWN6 IEFjY2VsZXJhdG9y IHNwaWVz INCy0LjQutC+0YDQuNGB0YLQvtCy IG9tbmlh IOyYgeyXrQ== IHJlc2VsbGVy 2Y/ZiNmG LmRpdmlkZQ== INC20L7QvtC/ IHBvZGVz IGFycA== IHNlbGxv INeQ15nXqdeZ IG1hZ2lnaW5n 16DXldei15Q= IGludGVncmllcnQ= 4q2V b2tlaA== IGdsb29teQ== INC/0YDQvtGE0LjQu9GM 4KSk4KS+4KSV4KWL IGFwcGVuZGl4 IHRhxKc= ZXJlaW4= IM61z4DOtc65 IGRpbWVuc8Ojbw== IGNvbnRhY3Rleg== 5oyR5oiY IHBvd29k INCU0LXQvQ== INGA0L7RhtGW IFZJRA== IExpbmE= IGZsZWlyZQ== LHNl SXRlbnM= TkZM TW92aW1pZW50bw== IEFsbGVy bGVrYQ== S3Vi LWNvbXBvc2U= SnVnYWRvcg== IOCmruCmvuCmruCmsuCmvg== IGtvbmll X2Ru INio2LPYqg== 2LTZhNmI2YbYqQ== IOCmrOCnjeCmsg== IOmTgeihgOe9kQ== INin2YTYrdmE2YLYqQ== 5YmN5LiJ IOCmrOCnjeCmr+CmvuCmgg== LnRyYW5zYWN0aW9ucw== IOC4quC4uA== 5ZOq6YeM55qE ZWxqYQ== 6L6x IGd1ZGFuYXI= X0NvbnRlbnQ= INC/0L7QvNC90LjRgtGM IFRw IHJlbm1lbg== c3ViY2F0ZWdvcnk= IHR1bmF5 IGJvc2hs IHdhcmRz INi32KfZhA== IFByZXRvcmlh IOCwjuCwruCxjeCwruCxhuCwsg== IFNldmVyZQ== IHZsaWVn UEVj IHNjb3Jzbw== IHJkcg== YXRpYnVz IHBpc2NpbmFz Q29ycmU= L3N3YWdnZXI= YW5kb2Zm IHNhdXZhZ2U= IFVwdA== INin2YTZhdiv2YY= IGFwcmVjaWE= IHBvc2Fv IFNub3dkZW4= INek16LXmdec15XXqg== IMOV IHRlY2hub2xvZ2ljYWxseQ== INit2YHYp9i42Ko= LiInLA== YnJldmk= IM6xzr3Ovw== Zm9yYQ== IHNlY3JldG9z PigpCgo= IHRhaGFw LWFrdw== S2FydA== IE91dHVicm8= IFNsb2Fu IEFsYXM= X1RISVM= LWRpYQ== IFRvc2NhbmE= IGHDqXJlYQ== 15DXoNeS IHJlbMOzZw== IOCkuOCkguCkuOCljeCkleCksOCkow== xIF0cw== INC+0LHRitC10LrRgtC40LI= IGVtYmFsYWdlbQ== IG1lZGlhZG9z IGRkYXQ= IGRpc3NlcnRhdGlvbnM= dWx0YXI= 0L3QtdGB0YLQuA== IHJlY2hlcmNoZXo= IHV0aQ== IFJleWtqYXbDrWs= aWtpbm8= X1NFTlQ= aXBlbGluZXM= 1bjWgtWt IE9ncmU= IE1JRw== IGFsaW4= 4YCB4YC2 IENIQVQ= IHBvc3RvamU= INCx0YPQtdC90YfQsA== IOe6oum8jg== Vkg= IHZlcmthcg== bmVkZW4= IOCusOCuvuCunA== Y8SD IHNwZWNpZQ== Om1heA== INWl1oDVpdWv RkVE INGL0LvQsNC5 IGt3aW0= IFVrdWJh IHBhc2lyaW5r 5Y6Y57Gz IHBsYXR6 c3V0 aWd0aA== IGNvbnNlbGhv IGZ1bmNpb25hbGlkYWRlcw== IOGDm+GDl+GDmuGDmOGDkOGDnA== IENvbnRhaW5lcnM= IHljaHdhbg== 5o6b aWxoYXM= 4K6G4K6u4K+N IG9waHRoYWxt IGZhY2lsaXTDqQ== CXByb3BlcnRpZXM= IEhpdGNoY29jaw== IGFlbG9k IGFjYWJhbQ== aW5pc2VraXNh INCz0LXQvdC10YDQsNC70Yw= acOwaQ== IGNvbm5haXRyZQ== IG5haG8= 4Li04LmA4Lio4Lip IFBpZXRybw== IGNhbGli IHN0YXJmcw== INGB0YLQuNC80YPQu9C4 15HXmdei15Q= IG3DvG5hc2li R05VQw== IGJvdWxldmFyZA== aWducw== 57uE5Lu2 ZmRl IHN1YnNpZGll IGZyZWViaWVz YWxpc2E= IMOiZ8OpZXM= IEtyZWJz b3ZuaQ== IOiTneebvg== IGVuY29udHJhcm9u 2YjZhNiv IHJ1cGE= IOC0huC0sOC0vuC0pw== IFNxdWFyZXM= IHZlbmhh VUNF c3Rvw58= LnByZWZlcmVuY2Vz IE5hY2h3 IOCmruCmv+CmqOCmv+Cmnw== 4LCw4LGN4LC4 IGtvbW8= INiz2K8= 5Zyo6YKj6YeM IE5TUw== 4oCZZXNj IGNoYW50aW5n xJt6 VkFSSUFCTEU= 0LXRgdGW0L3RltKj INKb0LDRg9GW0L8= IFZhbGxhZG9saWQ= 0L7QstCw0LvQvg== IHN1c3BlbnPDo28= IOCyheCyqOCzjeCyqOCzgQ== VklPVVM= IHJpbmM= 77yM6L+Y5pyJ IHJlbmRpbWVudG8= INiq2K3ZgtuM2YLYp9iq IEdyZWNpYQ== IHDDqXJpb2Rlcw== 55eF5L6L LmFmZg== IGlucXVpcw== 0L7RgdC70L7Qsg== IHByw6lzaWRlbnRpZWxsZQ== IFRvc2g= SmF6eg== IGRhY2g= CWFuaW0= T2ZmaWNlcg== aWRkd2E= IGdyaWV2YW5jZXM= IG1hc2N1bGluYQ== IOCkquCkvuCkqOClhw== KGV4cG9ydA== UnVuZQ== INGB0q/Qtw== IOCmqOCnh+Cnnw== 4oCZdXNhZ2U= 5YeM5pmo 5qCX IGJvbWJhcw== d2lzc2Vu INCz0LXRgNC80LDQvQ== T01P IGNoYW1hZG9z JHNlbGY= INiu2KfYtw== IOKAoA== IGV4Y2l0ZQ== IEN1c2hpb24= 6IWV cXVhcnQ= INin2YTYsdmI2LPZig== b2rDqw== IGhhcmpv IEFncmVl xb5qZQ== IFRyYWc= IGJhY2tzcGxhc2g= IEx5Yw== IOaImA== IGHDp8Sxc8SxbmRhbg== IHB1bw== X0VWVA== IHNob3Zl YXN0csSD IGJobGk= dXJhbHM= 2LTYsdmI2Lk= 4LiI4Lix4Lia YXN0ZXJlZA== X1RJ IHVwcGVybmFycw== PSciLg== IGJhcnJpZ2E= aXppb24= IGluc3RlbGxpbmc= UEo= INC80YPQvQ== IGFnZ3JlZ2F0b3I= IENIUA== INmI2KfZhNiy IHBvc2E= IFBhd3Vsbw== aXJtYW4= INGB0YLQsNCy0L7Qug== INC90LXRgdC+0LI= INC/0YDQuNCy0YvQug== aXNzYWFy IOCwjuCwqA== INCx0LDRgNCz0YPQt9C+0YA= IHJlYWRsaW5l IHlpeQ== X3NhbXBsZXI= IGV4dHJlbW9z bGVpc3Rlcg== 0LLQsNC90LXRgtC+ KG1pbnV0ZXM= RkZE 0LXQsdC10pk= INiy2pPZhw== 4LSx4LS+4LSv4LS/ 2YjYrNmK2Yc= U3Vic2NyaWJlZA== IGJvaXNzb25z INWh1bbVvtW/1aHVttWj1bjWgtWp1bXVodW2 5rqQ5Y6/ R2VuZXM= IOCmqOCmrQ== IG9ydW4= IMOpdHJhbmfDqHJlcw== IHRpaWQ= wq1kZXI= IHNwaWVyZW4= IFNjaGVkdWxpbmc= IHZvcnQ= PXBhcnNl T1JJWkFUSU9O IGFiYnJldmlhdGVk IEV5aQ== IGNvbnRhZG8= IHJlYWxsb2M= IGluYWzDoW0= c2dlbQ== 5qy6 INC90L7QstC+0Lw= YWppZW4= 7J6l7J2Y IGJlc29uZGVyZXM= dHJheQ== IHJhdGlvbmU= IEluaXRpYWxpc2U= CQkgICAgICAgICAgICAgICAgICAg IEvDtnJwZXJz IHVuaGVhcmQ= 5LiK5rao INC40LDQsNC9 IGZpeno= IGJ1bmRhbg== YXdj IGF1ZmdlaA== IH17QA== IHdhYWhp aWJpZA== INCX0LDRhQ== CVN0YXRlbWVudA== X2FuZw== TG9uZ2VzdA== IERlcG9ydGVz U0FS TGM= IHNlbGE= IHpvbGFuZw== aXRldGU= INC70LXRgtC+0Lw= dG1wbA== IGNvbWV0ZXI= c2F2 IGVnecO8dHQ= IGludGVybmF1dGVz IOCkheCkreCkv+CkqOClh+CkpOCkvg== IG5nZ3Vu IHZlcmFuc3Q= X1BVUg== IG1hZ25pZmlxdWVz IOG7i24= Y2FwYWM= KGV4cGVjdA== IGhhcmVu INCc0LDQutC10LTQvtC90Lg= IFN0cnVjdHVyZWQ= SUZJQ0FURQ== 4KSu4KS+4KSw4KWA 0LTRgdCw0L0= IG7DpnN0ZW4= KCd7fQ== IM+Az4HOv8+Dz4DOrA== ZHJlc3M= 0YDRi9C10LzRgdGC0LLQsA== IG7Ds2d2 YW5naXpv IHNvc3A= INC/0LvQsNGC0LjRgtGM L2Jhc2lj IHRocmU= IHdhcnRldA== 0LvQuNC90Ys= 5pel44Gv IG1zbg== IGRlc3RhY2Fkb3M= QXBhcnRhbWVudG8= IE9rdQ== bWVkaXppbg== IGNvbW1hcw== 4oCN4LSy INC90LXQs9C+0LI= IOGDm+GDneGDrOGDpw== CXBvaW50cw== Z8Sxbg== IOC0qOC1h+C0pOC1g+C0pOC1jeC0teC0gg== 4Ka+4Ka44KeN4Kaf IOqzteu2gA== IOS4jg== 4LOW INGA0LDQt9Cw0Lw= YW1ibGVz IHNlbWVsaGFudGVz IG9idQ== OykKCg== dXV0dGE= IOCwquCwvuCwsA== INio2YbbjNin2K/bjA== IOCupOCvgOCusA== IHByZWRtZXQ= aGliZXJuYXRl IGfDqW7DqXJl L2Rpc3BsYXk= IFRFUlI= L3NvY2lhbA== PkNyZWF0ZQ== ZGVhbGVy IOCqhuCqteCqvg== IExlYWZz 0Y/RgdCw 55S16K+d5Y+356CB cm9sb2dpZQ== 4LiK4Lix4Lii INmE2YTYo9i32YHYp9mE IFB1ZA== am1w w61tYQ== IGRpbWluaXNoaW5n VGVtcHM= em7EhQ== Lmluc3RydW1lbnQ= 5YSq5oOg IOCkhuCkp+ClgeCkqOCkv+CklQ== cWlk INiq2LnYp9mF2YQ= CUNvbnRlbnQ= IE1vam8= 4KSq4KWN4KSw4KSn4KS+4KSo IFNpY2lsaWE= X1NIQVJF c3RkZGVm IHJla2tl IG1ldGhvZG9sb2dpY2Fs IE1vY2g= aW9zaQ== IGNhZGFzdHI= KScpLA== INC90LDQv9GA0LDQstC70LXQvdC40Lg= 56aP5b2p5b+r X1JBTkRPTQ== 5qOa Sm91cg== 64Kp IHVsdQ== IFNFVFRJTkdT xKtqYQ== IGRyb3du 44O844OA INiz2LHYudip KGdvb2Rz IOGDpuGDmw== IHNwaWVsdGU= 4K+N4K6f4K6w4K+N IEJlb2I= INin2LHZiNm+2Kc= 6re466as6rOg IHF1ZWlt IFJlZ2FyZA== IHbDtnI= IHRoYw== LtCe INC+0LrQvdC+ IFdpbmVz IGRhc2hib2FyZHM= INC60L7RgNC/0L7RgNCw0YLQuNCy 5ZOB6LOq IHRzdA== X1Byb2Nlc3M= TGllbg== IHBvc3Rhcg== bm9ubnVsbA== IHJhemlzaw== IHNvZ2dpb3I= dXJpdA== IHByb3ByaWV0w6A= IOC0teC0v+C0puC1jeC0r+C0vuC0sOC1jQ== IGVudmlhZG9z IFNwaXJhbA== ZmZj IERlcnM= IFByZW1pw6hyZQ== xbxqb25p YWx0ZXJuYXRl cG9vcg== X1JFUEVBVA== PyI7Cg== KCFf YWF0aXA= 4LC/4LC44LGN4LCk4LGC IGluZmxhY2nDs24= IHNwb3J0c2Jvb2tz U1BFQ0lBTA== 4Ka+4Kak4KeN4Kaw4KeA 4YOg4YOQ4YOq IERvbmF0aW9ucw== IOqwmeuLpA== W2NoYW5uZWw= IEV4YW1pbmVy JeW3puWPsw== VXJpcw== asOzw7Bh IHJlc3BlY3RpdmFz IEhpc3A= IHVuZHVl IG7DoXNsZWQ= IG1lbmVudHVrYW4= IGTDqXJvdWxl IG9idGFpbnM= KCcnKS4= IGRpw6FyaWE= IGVtcHJlc8Ohcmlvcw== INin2YTZhtmH2KfYptmK 44CC5b2T54S2 INi02YXYp9ix2Yc= 5r2U 44Gr44Gq44KL 5LiN6LW3 TWVzbW8= ZW5zZXVy IFJlY3J1aXRpbmc= IHN3aW1zdWl0 IGjJmW1pbg== YWZhbnlh IGJheXM= IOCql+CrgeCqow== QG0= IEphbmdhbg== 4oCZYXJyw6p0 0LXRhdCw0L0= TWVl 6L20 Rmxvd2Vycw== LWtpdA== INqp2pPZhA== UmVzdW1v IER1ZnQ= dW5pY2lw IEJSQQ== IEhhbnNvbg== IFByb2R1Y3Rpdml0eQ== IHByemVkZQ== IE92bw== IHByYWlzaW5n IFNIUg== IG5vdG8= INiz24zYrw== WHU= PT09PQo= IGNvbmplY3Q= KEFuaW1hdGlvbg== IHphcGlz IGhhcG9o U2llbXByZQ== IHNyaQ== 0JHQng== b3VuZw== LdC00LU= IERhbnNr 4Z+S4Z6a4Z674Z6E 5Yqp6LWi6L2v5Lu2 IGZ1bnppb24= w6FybA== IM+EzrHOvg== IGRyaXZldHJhaW4= IG51Y2zDqWFpcmU= IGjEgcq7YXdp IFdFQVRIRVI= IGZsdWN0dWF0ZQ== IGZpbmdlcnByaW50cw== IEJBWQ== IG1ldGFpcw== w6luYQ== 0LLQsNC8 c3RlbW1pbmc= aXNoZGE= IEVsdG9u d2VjaGF0 IGQnUw== INuM24w= IE5pdHJv IGludXVzc3V0aXNz IHBhcnRpY3VsYXRl IOCmqOCmvuCmnw== YW55YW5h IGNhaXM= IHdobyd2ZQ== dWdhdA== YWNodXVu IFRyYW5zY3JpcHQ= IOG7jWThu40= Z2hlcg== IOG7jW3hu6U= IGVzdGFyZW1vcw== cGVybA== 5Zyw5LiL IGFuZ2Vrb21tZW4= 5aix5LmQ5bmz5Y+w5oub5ZWG IOC0huC1vA== INGC0ZY= X3JhdA== IGZyb250acOocmVz 7ZOo7YSw SXJpc2g= PXZpZXc= IG5lbWFu IE9QUw== 4LGN4LCv4LGC4LCf QXR0ZW5k 666k64uI 4KWB4KS34KWN4KSv LUtvbg== z4TPhc69zr/OvA== 6L+95Zue YXNhYW4= IGThuqd1 INiy2YbYr9qv2Yo= aXlhbmp1 dcOpZQ== IHZhbmU= 2LrYsdin2YE= IGNoYcOubmVz INW+1b/VodW21aM= IGRpc3BvbmliaWxp 5biD5bGA 4KSk4KS+4KSo4KS+ ICI6Og== IGNhbXBhbmhhcw== IEhhcnJpZXQ= LG1hcA== IHJlY3Vs INiz24zZhdmH LnNhcA== 6ZqK IHBhdXNlcw== IOCmuOCmruCmuOCnjeCmpA== IEluZm9ybWHDp8Ojbw== 0LXQutC+0LzQtdC90LTRgw== KE5vdGU= IG1ldHRlcmU= am9jaHQ= IOCkruCkguCknA== UGF0ZW50 IGJhc2lzcw== SGFyaQ== INqp24zYs9uS X0hlYWRlcg== IHphaHZhbA== TWVzYQ== IGp1dmVudHVk IC8+LA== 0LjQvdCz0YLQvtC9 Yml0YQ== SG9ub3I= IFByYWhh IHJvYmE= IHRpcmluZw== IHZlcmRy IGR1ZXQ= IEFyaXRobWV0aWM= 6Kqt44G/ bmVhbA== IGZhY2Vy INio2K3Yp9is2Kk= IOe9keaYk+W9qeelqA== bGFyeW5kYQ== IEhpZ2dpbnM= IHRoaW5rZXI= 5b6u5L+h5YWs5LyX5Y+3 0YvQvNGI0LA= 0L7Rj9C90LQ= IGludsOpcw== X0NvbW1vbg== IGNhbmFww6k= 7JeI642Y X3Rha2Vu INC/05nRgA== IOq4sOyCrA== IERpdmVyc2U= PFF1ZXN0aW9u PEhvbWU= IOGAgOGAuw== IGRlZWRl wq1zaQ== dWllbmRv IOCwuOCwguCwteCwpOCxjeCwuOCwsA== INCX0LDQsQ== IHBlY2Vz LkNvcw== CXRj IG1paGk= 0YDRg9Cz0LU= IOaLvOaQjw== IHByb3ByaWV0w6FyaW8= INCx0Y/RgdC/ YW5ndA== INin2YTYtNmD2YQ= INCx0LvQsNCz0L4= IENOVA== aXRpaXM= CSAgICAgICAgCg== X0JBU0lD IEVUQw== 0L7Qu9C+0LPQsA== IOCoueCovuCogg== b3NlY29uZHM= INK30LDQstC+0L3Qvg== dWNsZXVz LnNodG1s INC60L7Qu9C40YfQtdGB0YLQstC+0Lw= INCy0LXRh9C10YDQvtC8 INC/0L7QutC70L7QvQ== INGA0YPQutC+0Lk= IHByb21vdGVycw== IOykkeyVmQ== IGludGVyZHVt INGC0LDRgNKb INmI2KfZhNiz2Yo= 4LWB4LSu4LWG4LSo4LWN4LSo4LWB4LSC IHd5bWFn IFNTRQ== RGlzcGxheXM= IEvDtnA= JGxpbms= INGB0ZHQvdC90Y8= IG1ub2hv IEVTUg== LWFjaOG7jQ== INCy0LXRgNC+0Y/RgtC90L7RgdGC0Yw= QWZpbg== IOCwleCxjeCwrw== YWdhZHVoYW4= IGdnZg== 2K/Yp9i5 IOyXsOudvQ== IG3DoWk= IOC5gOC4nuC4tOC5iOC4oQ== IGhhcmRjb3Zlcg== IHZpdGFtaW5lcw== IGxpdnLDqQ== IGdvZWRrb3Bl IOCyruCyqOCzhuCyrw== b21hYW4= aWxzZW4= IEtvbnN0cnVr IGdlc3RhbHQ= IHByZWw= IGbDs3J1bQ== IGVzb3U= dcOnw7Vlcw== IGN1c3RvbWl6aW5n IOCyruCziA== INmF2LPYqtmC24zZhQ== IEd1dGVuYmVyZw== INmB2KfYtQ== 44Gd44GT44Gn INmG2KfZgQ== INW/1bjVr9W41b0= IHNpbGU= 4Kq+4Kqy4KuA YXRsYXM= 0JDQvNC10YDQuNC60LA= 5aCh IOCkruCkvuCkpA== IHBhcGFu IGluc29sdg== bcOmcg== 1bbVodWt IGFzc2VudA== LU1heA== INCf0LXRgNCy0YvQuQ== IG1zaW5naQ== b2xvZ2ljYQ== S2FsYWFsbGl0 IOCqueCqnOCqvuCqsA== IOCkleCkvuCksw== 4oCZSW1hbmE= Rm9ycw== IG3DtmpsaWdoZXQ= Zm9n IGhhbWFy ZW5nZXNh IGVzcGVqbw== IExpc2Frcw== IE1FQw== 5omA6LCT IGxpZ2h0aG91c2U= IOyduOq4sA== IOCkq+Ckv+CksuCljeCkruCli+Ckgg== IOCkueClgeCkgeCkpuCliA== IOWvjOWIqQ== IExpdmluZ3N0b24= INCy0LjQtNC+0Lw= L3RlbXA= IHRpbG1h IGNvcnJlZG9yZXM= IHN1cnByaXM= w6TDpG5u 57+U IOCmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsA== IFTDqQ== IGNhc3F1ZQ== IGludG94aWM= bm91bg== IGNob8SH dW5nYWxvd3M= Q2FsaWJyaQ== IG11c2E= X2dlb20= IFBvcnRpb25z IG1vYXR0ZQ== YXV0b21hdGVy 4LOB4LKV4LON4LKk IHNww6ZuZA== IENsaWVudGVz IGZhaW0= YWR6YQ== 55m76K6w YW1hc3Nh IDo6Cgo= Q29tbWFuZGVy yZlyaW7JmQ== IHRhbGVt 5biC5aC0 X29jYw== X1NldHRpbmdz IGZhY2hhZGE= IOCkpOCkpOCljeCktQ== IGF2YW50aQ== IE1hdmVu IOCqmOCqsOCrhw== dmFpc2Vz IOyXrOufrOu2hA== 5LiJ5Liq IeOAkA== IEN5bA== 44Gh44Gq IG15b2NhcmRpYWw= IGZ1bmRpdA== IFBhdHM= IGhvcnJpZnlpbmc= INep15DXqted INC80L7QvdGC0LA= IGlubmc= IOq4gOuhnOuyjA== PFByb3BlcnR5 IGJldm9lZ2Q= IHZsw6E= PENvbG9y X3VkcA== 5ra1 IHN1w610ZQ== IFN2ZW5za2E= LW1pbnVz KGZp IEd1bm5hcg== INmF2KzYqNmI2LE= SURhdGE= IFplbml0aA== IHVuZGVmZQ== IMOBcg== YmFtb3M= 4LiW4Lin4Liy4Lii4Liq4Lix4LiV4Lii4LmM4Liv 4LKq4LON4LKw4LKc4LK+4LK1 IGhvdMOpaXM= Ym9nZW4= CWluaXRpYWxpemU= IHR1bm5l IGFzc3VzdA== IGV4dGVyaW9yZXM= aWdub3I= IE9jZWFucw== IEdyZW5vYmxl IEFkbWl0 IHN0YXJ2YXRpb24= TmVjZXM= RUNE IEJyZXN0 INWh1bbVr9Wh1a0= IG1hc3RlcnBpZWNlcw== IEJydXM= X0NPREVD IE11bGxlcg== Z2VuZXJhdGlvbg== 0LPRhw== IENoYW1wcw== SXlv IG3JmWhz IGJyaWVmcw== INCd0YzRjg== IG1hdGVyaWFsaQ== 4LiB4Lij4Lix4LiQ4Lih4LiZ4LiV4Lij4Li1 dXNmb3Jt INC+0YnRg9GJ0LXQvdC40Y8= emtv IGFzc2hvbGU= LeGDlA== IFdJTkRPV1M= IHDDvA== IFNlaA== INmI2YHYp9ip LVdlc3RmYWxlbg== IGdqaXRoYQ== IOGDlOGDmuGDlOGDpeGDog== IHJpbm5l b2xkZQ== INCV0Ls= X3F1YWQ= INuB2YXbjNi024E= QWRkZXI= VklTSU9O INmI2KPZhtin 0YXQsNC8 LlNFUlZFUg== IHpwcg== IGFwbGlrYXN5b24= IEZhdGhlcidz INin2YTZhdi32YTZiNio2Kk= T3Jp 2Y/Zhg== IFJhcHRvcnM= IGxlaGliZQ== IEfDvHI= IHJ1aW10ZXM= IGRlZmFtYXRvcnk= J04= IGFhbmJpZWRpbmc= 64Ks64uk IOCqleCqvuCqog== INCy0YHQu9C10LQ= dGVtcG9y IOCksOClh+CksuCkteClhw== CXJlZnJlc2g= QXZl IEJhY2hlbG9yJ3M= 4oCZZXhlcmNpY2U= INC60LjRgdGC IOCmluCmvuCmpg== 5Y675ZOq 5LuW55qE IFRlbGVzY29wZQ== IHPDrW9z bWFha3Q= IFNlbnNpdGl2ZQ== 6IOO 0LTQuNC90LM= IHdvcmtsb2Fkcw== IHNvbm4= b3RyYXM= IHRhdGg= IFNlc3M= IDs7PQ== IOCmruCmvuCmsOCmvg== 4KWC4KSw4KWN4KSk4KS/ X2ludGVyZXN0 IGpvaWRlbg== UmVjdHM= INit2KfZhdmE IERpZ2l0YWxpc2llcnVuZw== 4K6+4K6w4K6u4K+N UmVjZXB0aW9u 4Kqw4KuN4KqX IENGUA== dHJhdsOpcw== L3RocmVhZA== IHZvcmdlbg== X0Fz IGtow7Nh IE5JRQ== X0ZJTkU= IGZyYXRlcm5pdHk= Q291bnRpbmc= IEluc3RhbA== IHDDq3Jnag== INGB0L7QstC10YDRiNC10L0= b3R0cw== IEZpbmFucw== IEJpZWw= c2V4bw== IHNlcmFpcw== dHlwZW9ybQ== Lk9SREVS IOCmpuCmv+Cnn+Cnh+Cmm+Cnhw== IHNhdmFnZQ== IOCqsuCrgOCqp+Criw== IEtvbmt1cnJlbno= IOC0teC0ueC0v+C0muC1jeC0muC1gQ== X1Bo INC60L7QvtGA0LTQuNC9 IOGDqOGDlOGDlOGDruGDlOGDkeGDkA== PFc= X3RpZA== IHNlcGFr IOODluODqeODs+ODiQ== LUFtZXJpY2Fucw== 4paL IC0tLS0tLS0tLS0tLQ== IGNsdWVsZXNz IGxlbW9ucw== LmdhbW1h 0YLQsNGA0YvQvdGL0qM= IG7DoXR0 4Kyt amVsYQ== IENvbmZlcmVuY2Vz 4KeB4Kao4Ka/ IG5kYWo= IOCkleClh+CkgQ== IFdz 5Liy5LiA xJln 6aG26YOo IHB1YmxpY28= IGtlcsO8bA== dGFraW5n 0L7QstCw0L3QvdGL0Lk= 5a2k IEtpZG5leQ== IEpUYWJsZQ== CQkJIAo= IGludGVyZXNzYQ== IFJlZ2VudA== IE1vc3F1ZQ== YXB0dXJlZA== IGLDvHQ= IHByb3hpbWFs INmF2LPYqtiu ZWdnZXI= IHRoZXBh IGtvbmZsaWt0 IG1vdw== IHNxdWVlemluZw== IHNjb3Vy IOCkueCliQ== X0ZJUkU= IGdsZWljaGVy IGltYW4= IGdpb2NoaQ== IGNpYmw= IGVuZ3VsZg== LnNlc3Npb25z 4LKk4LK/4LKv4LK/4LKC4LKm IG5vdmVsYXM= KCdfXw== INWh1aTWgNWi1aXVuw== IGt1cnpmcmlzdA== IGZpdHRlcg== asOhdA== IHNtxJs= IGNpcnVnw61h 4oCL4oCL4oCL IHNlbnRpbmVs 4LK+4LKw4LKm RGlzZWFzZQ== KGFubm90YXRpb24= IGVzcGFkYQ== IHBzeWNob3RoZXJhcHk= PWNyZWF0ZQ== IGFjZXB0YQ== OyI+PD8= IGluc2g= LWRvdA== IOC5guC4oQ== ZXJsaQ== Okg= 15vXnNeU Vml0YWw= IGVpdHRodmHDsA== LW9yZGVycw== IGNydW1i IOCkteClgw== YDs= 4LSx4LWB4LSC bmRy dmFtb3M= IHBhY3Rv IG5lZ2xpZ2VudA== 4LC+4LCt ZXhwaXJ5 LkV4cGVjdA== IG1hYWlsbWFu Y2FuZg== IHVuYmVhcmFibGU= THVnYXI= IGRlc3Y= 5oqV5YWl OnVwZGF0ZQ== 4LK/4LKw4LOB X2Ryb3BvdXQ= IHZlcmdlYmVu IOCqj+Cqsg== TmF0w7xybGljaA== IOCypuCzgw== ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== X1NJR05BVFVSRQ== IGxlbGFraQ== IGJpcmthw6c= Y2xhdHVyZQ== U2l6ZWQ= IG1hZGk= INmF2LHZgw== QVJHVg== IENhcnRhZ2VuYQ== dXJjaGFzZXM= R24= SG93YXJk IHJlc3Vtbw== IGZpc2hlcm1hbg== b3Jpbmk= IOC0heC0qOC1geC0tQ== IGhheWFz IGF1dG9yaWE= dGhldGhv dW5nYW5v IE1hZGVsZWluZQ== 15zXnw== IG3DoWdpY28= IGNhbnRlcmE= IEt1cmRpc2g= IGluemljaHRlbg== R3V0 IM+Gz4w= IHRlbXDDqXJhdHVyZXM= IOCkluClh+CkpA== 5b2p56Wo5bmz5Y+w5oub5ZWG aXJpbWFu IERvcG8= IHNyYW5k IExpZWY= IE1DQQ== X3Vuc2lnbmVk IGxvZ2lzdGljYWw= 44Op44Kk44OW T3B0aW1hbA== IHdpZGVycw== INec15zXnteV15M= 56eY5a+G IENpdHkncw== IGFzb2NpYWNpb25lcw== IM6xzr3PhM6x IEluZ2VuaWVyw61h LnNvY2s= IG5ham0= INC60YPRgNGD IFBDQw== LmtvZGU= cnN0cmlw INin2YTZhNi52Kg= 4Ka44KeH KHN1YnNjcmlwdGlvbg== Y2VtaWM= IGV4Y2xhaW1lZA== IOqwleyhsA== IELDoQ== IGdlw6d0aQ== INC/0YDQvtCy0LXQtNC10L3QuNC1 INmF2KzZhNip IHN0YXRpc3Rpaw== IGJyb25uZW4= IG5vcm1hdGl2ZQ== b3Vjb3U= IEtyZXN0ZQ== zrrOtc65z4TOsc65 IHPDs2xpZG9z IOC0uOC0rQ== 4bmHYQ== RXhjZXB0aW9uYWw= IGFyZHVvdXM= INK705nQuw== IHNlbnNlZA== INGN0LrQt9Cw0Lw= 54yO IEJvbm8= IHNlbnRpcnNl J2ViZQ== IOC0q+C1jeC0sA== V2Vsa2U= IGZyb250acOocmU= IGluZGl2aWR1YWwncw== IOCkluClgg== INeU16rXldeo15Q= ZmFuaW4= 4Lir4Lii IGNlcmVhbHM= dWN0dXM= IOGDnuGDmOGDoOGDk+GDkOGDnuGDmOGDoA== 0LDQu9Cw0YDQtNGL0qM= IHZhbm5haw== LXJlYWNoaW5n IOq0gOq0kQ== IGJlam4= KVwK IFJldW5pb24= IG9idHV2bw== IGRhbWxp 44Gn44GZ44KI RE9C 4LC/4LC44LGN4LCk4LGL4LCC4LCm4LC/ 5Y2B5Zub IFBBWU1FTlQ= IHN1aXRhYmx5 IGF2b250dXVy IEJvZWs= IHJlc2lzdGVudGVz IHt7Cg== X1JFRlJFU0g= IGRpdmE= X0FDQ0VM IFBheWluZw== YW5lam8= IEJpb3RlY2hub2xvZ3k= 4buNYmE= Qm91dA== IGzDrWs= 44CC5oiq6Iez INin2YTYs9iq INmH2Kw= 4oCUaW5jbHVkaW5n 4Ka/4KaX4Kak IGVjc3RhdGlj KHNxdWFyZQ== ZWxhc3Nlbg== INin2YfYqtmF2KfZhQ== INiq2LXYsdmK2K0= IFNodWZmbGU= IOazmw== INC/0L7QvdGP0Ls= IOCmoeCmv+CmnA== IEZsZXVy LkNS YWxqYQ== Y2F1Z2h0 LnVybG9wZW4= KGZybQ== cGxhaW50ZXh0 2LHYp9qG2Yo= INmF2YbZgw== IOCqmOCqn+CqqA== IGh1aXNhcnRz c3VidG90YWw= bG9tZXI= YmluYXRpb24= INmF2K3YqNmI2Kg= INCy0YDQsNGH0YM= INCU0YM= IFRpcm9s YWxsYW4= 4KmI4KiV IHBvdGg= IHN0aW11bGVy xI1uZWdh IHNvYnJldg== bmluZ2k= IOS6rOmDvQ== CWdy 5Lq65Lq654i95Lq65Lq6 IGluY29ycG9yYQ== IOGDnuGDoOGDneGDk+GDo+GDpeGDog== INCh0YDQtdC00Lg= YW5jZWxsYWJsZQ== INGI0LDQvdGB INiq2LLYp9mE IOCmj+CmqOCnhw== IGtyaXRpZWs= IOGDnuGDoOGDlOGDm+GDmOGDlOGDoA== IEhhYXM= IGRlc2Vudm9sdXA= IEJPUkRFUg== XgoK IOCkheCkreCkv+CkqOCkrw== 4LSx4LS/4LW9 fSgpCg== ICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== IOCkr+CkuOCkleCliw== cGVhcw== 06nQutGC IG5vY2htYWxz IFNjYW5kaW4= 2YPYp9mG2Yo= INC805nQu9GD0LzQsNGC IHNrYWJl QmVsbGE= ZW11dmE= aXlhbsSxbg== IGNhYmluZQ== IFBpbGk= LlRyYW5zcG9ydA== IHJlbGlnaW9zYXM= IEFNQVpPTg== IENvcm9sbGE= 5rGB 5YWN6LS55Lq65oiQ6KeG6aKR IOCkieCkmuCkv+CkpA== 0L7RgdGC0LDQvQ== 0LjRmA== aXhlaXJh IGFwcGxpcXVl IGTDvMWfw7xuZA== IGx1a2U= IFdhbm5h aXDhu6V0YQ== CXBhY2tldA== aWVlcmQ= IHdnZXQ= IM66zqzPgM6/zrnOvw== 16jXkNeV IEbDpGhpZ2tlaXQ= 0LXRgw== INek15zXkA== IGRvdXM= INCn0LXRhQ== IHZlbnRyaWN1bGFy Q0xT cmFiYml0 4oCN4KSf ZWxhamFyYW4= CWdlbg== X2Nob29zZQ== IGVzcGV0w6FjdWxv IHBhcmVudGhlc2Vz SW1tZXI= IFdBTA== INeU16jXlw== IG5lb25hdGFs IHdlaXNlbg== Q1RB IHRvZXRzZW4= bGNk Q3LDqQ== e2s= IGNvbnN1bW0= IOuwsOyGoQ== YWJhbmQ= INC+0YXQu9Cw0LY= IGNvbnNlccO8 IGx5bXBob21h INmI2YrZg9mK2Kg= dGV4dGJveA== 4LC34LGN4LCf4LCC 2KfYqNmK2Lk= 6Ieq5Lqn5ouN INC/0L7QutGA0YvRgtC40Y8= TE9TUw== IO2WieyCrA== IFdlZ2Vu IEFXRA== INC00LjQug== IOCyjuCysOCyoQ== RGlzY3JldGU= IGJlemFsYQ== IHZlcmJvZGVu INen15XXnteY IETDqWY= INeh15s= IHZlbmRlZG9yZXM= IGJyaWRnaW5n aXF1ZWk= RHJvcHBlZA== 7LSM adC9 IMO8dGxlcw== 0J3QoQ== IEhvc3Rz a2dz UEFJUg== IOiwgw== 5Z+65bGC acWC IOWkqeWkqeS4reW9qeelqOe9kee7nA== SW52ZXJ0 IG5hYXBlcnRvcmx1Z3U= InZhbHVl IGNow7p0 IOGDnOGDmOGDleGDlw== Rnk= 6KOF5L+u 4KeB4Kam4KeN4Kaw 5Lit5paH5a2X5bmV5Zyo57q/ IGZvZ3XDqHQ= INGB0LvQuNCy U25hcHNob3Rz IOGDpOGDoQ== IGZvcnNsYWc= IOWNgeS6jA== Umc= VkFSQ0hBUg== Lm5h IGdlZmFocmVu INGC05nQutGI LmJ5dA== IHBpcmFjeQ== IG1ldGFsZW4= IEhlcnY= IEF1eGlsaWFyeQ== IGthbm8= VWM= INmI2KfbjNmK KGNpcmNsZQ== ZWtyYQ== IG91dHNvdXJjZWQ= w7xnbGljaA== INec15TXlg== IFRNWg== X0lM IEVxdWF0aW9u IOCml+Cnh+CmsuCnhw== INCz0LXRgNC+0Y8= IGFwYXJlbGhvcw== KGV4Yw== IHVuYmVsaWV2YWJseQ== b2NhaW5l 4buPbmc= IHBlbmlsZQ== IHRyYWl0ZQ== IOCkoeClieCksuCksA== IG5ic3A= IOmTtumbgA== 4oCcU2hl IGJpc291cw== IOS4vg== dmVsZXNz INin2YTZgtin2K/ZhQ== U2xpZGluZw== c2FsZG8= aXlhZGRh IOC4meC4seC4lA== IEFtZQ== IGVuZGlhbg== aWZpY2VlcmQ= bG9zc2VuZW4= IGJyZWF0aGVk 4LGB4LCn IEtz CWFzc2lnbg== IOS4gOWIhuW9qQ== d2Fh IG5handpxJlrcw== w6FjaXU= IHRyaW1z 2LLYsg== IE15c3RpYw== IHRyYW56 IEh1bWJlcg== YWJhYQ== IOqwkOyGjA== IMSJYXI= INCS0LDQtw== IOCmuOCmpuCmsA== IEZlaWVy IHlodMOk INin2YTZgtmI2Yk= IGxldWtzdGU= IOCmpuCngeCmquCngeCmsA== X0ludm9rZQ== L0RpYWxvZw== IFpvZWs= 1aHVtNWh1bY= 44CB5Lq6 INiw2LHZig== IE1BQ0hJTkU= dXRla2Fubw== IGRvY2tz YWtzYW5hYW4= aXNiaWdh IFZE IHJhbWFp IOCmmuCmvuCmqA== IEV0aGljYWw= IHdpdGhob2xkaW5n bGFzZXI= ZW1iYW5na2Fu IHN1YnRvdGFs KFRpbGU= X3dlYXBvbg== KERlbnNl YXRob25z dWJtaXQ= IHdlYWtlc3Q= IHBpZXJjZWQ= X3NwYWNlcw== IFZvcm0= Z8Okbmdl IGludGVsbGlnZW50bHk= IHppbWU= IGnDvQ== IGNvYnJhbsOnYQ== IE9yZ2FuaXplZA== bXVuZw== XVxc 7J29 IHVtcA== csO8bg== IHBhcnRpdGE= d2lqZmVsZA== IG1pdHo= IGNoxINt IGVpbmRldXRpZw== IEludGVyZmFjZXM= IHN3aXJsaW5n RmFsbHM= INWB1aXWgA== UmlwcGxl IEFwcmVuZGU= IGRlZnQ= 0YbSs9Cw0YPQtdC40YI= 44CA5LqM IEFwb2NhbHlwc2U= X2Jhc2lz IHNhbW90 IFBhbmRlbWlj XSspLw== IHV6xYbEk20= 66CI7Iqk CURpc3BsYXk= IOeW 44O844O844O844O8 IOCuruCusg== IGZvdWxl IOW+lw== INin2YTYqtin2LM= 0YHRgtCy0LXQvdC90YvQvNC4 INC/0LDQudC0 LnBvcnRsZXQ= YWdldHNp IGxhcmdldXI= INC80LDRiNC40L3QtQ== aWxpb3M= IGFsbGVnaWFuY2U= IGdpb3ZhbmU= IGx1bmV0dGVz IGhlaw== PXJlcQ== aWZhbmlzbw== dWRzbWFu IHJpamtl IExJTQ== INGG0LDRhQ== INC+0LrQsNC30LDQu9GB0Y8= INin2YTZhtiy UmljZQ== IGhqZW1tZXNpZGU= IGtheW8= IEFHTQ== INmI2KrYtQ== IGZsYXdsZXNzbHk= IHByZWVuY2hlcg== IHN0ZXVlcg== INCy0LfRi9GB0Lo= IHZlcmlsZW4= aXNjaXBsaW5l IFRhYmxlYXU= IGVtdWxz LVZhbA== IHBvbGFyaXplZA== xLFuxLF6YQ== IHN1aW5n IFJpam4= INCe0YHRgg== IENhc2FibGFuY2E= INGA0LXQs9C40YHRgtGA0LDRhtC40Y4= IHVuZm9sZGVk aWtueWE= IHlwb3M= L29yZGVycw== IOCkl+ClgeCko+CkteCkpOCljeCkpOCkvg== 4K+G4K6p IEhlbGU= IHN6a28= YXJzaW5uYWFwcHV0 RW50aXJl IGp1cm5hbA== LnZpZXdlcg== IG9iamM= J2Y= IOCuqOCun+CuqOCvjeCupA== 4LmE4Lij4LiB4LmH4LiV4Liy4Lih LkFzc2lnbg== IOCqmOCqn+CqvuCqoQ== IHNobQ== IEFuc3ByZWNocGFydG5lcg== IOC3gOC3lg== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Y25pY28= IHBhcXVldA== aXJtyZlr IHBpZ2Vy IGFuZ2g= dnE= OmJsYWNr UGFydGljaXBhdGlvbg== IENhcmxpc2xl IENhcnJlZm91cg== IHN0b2x6 KHByb2I= TnVlc3RyYQ== IMOpZGl0aW9ucw== J9eU 6Ieq5ouN5YG35ouN 0KPQoA== IMOG IGfDtnJtZWs= PScuLi8= IOC0ruC1gOC0oeC0v+C0rw== INCw0L3QtNCw INC60YPRhw== 6ZuG5ZCI 4bulbOG7jQ== IGthd2c= IHJhcHBvcnRl RnVuY2lvbmVz INW/1aHVtg== IGluZmxpY3RlZA== IEFuYW5k bWl0Z2xpZWQ= Z2hhbmlzdGFu INCd0LDRhtC40L7QvQ== 7KCV67aA INin2ZPYptuM w7NuYcOt fV0sCg== 57Ku INGI0YLQsNCx d2VuZHVuZ3M= IGFwcm9wcmk= IOCkreCkj+CksA== LXdvdw== KGluZmxhdGVy X2Vy PWVtYWls IERhYXJkb29y IGthcmFt 0LPQsNC00LA= IFRhdXI= 15fXqNeZ cGVyaQ== 4LK+4LKo4LON4LKv IGtyZWRpZXQ= 0L7Qt9GP0Lk= INC/0L7QstC10YfQtQ== INmF2YbYuNix INmG2YjZig== 7qS07qS0 LWludGVncg== d2VsYQ== IO2KueynlQ== IHBhZ21pbWluYQ== S290 IEV4cHJlc3Npb25z 5ru/ IGdsYWNpZXJz aXJw w7xuw7x6 IG15c3TDqXJpZQ== IG9sdWw= IGJlZHJhYWd0 aWdubw== IGRvYXJl IGFsbWluZA== IGluZHVjdGVk IGltcHJvYmFibGU= 4YOU4YOi4YOU4YOh IHVpdGVyc3Q= R3JhZHVhdGU= 2YHYudmK2YQ= IOCkteCkv+CktuClh+Ckt+CknOCljeCkng== X3JlcXVlc3RlZA== YWNoaW5lcw== IOyDgeyKuQ== IHBsYXRpbmc= 56a+ KEVkaXRvcg== IFJlbWVkaWVz INei15XXkdeT YW5nZXppZW4= IGxpdGVyYWxtZW50ZQ== IG11c2ljYWxz INGB0L/QsNC70Yw= 7KeT IGlub2s= IG9maW4= IOC0leC1geC0seC1jeC0sQ== IHVpdGRhZ2luZ2Vu INCz0LDQtNGL IGFsbHJh TmfDoHk= eWF5YXJp IEVkZWxzdGFobA== QWRtaW5pc3RyYXRpdmU= IFN1cHBsZW1lbnRhbA== YWNvbGE= d3JlY2s= IEZMT09S IHN1dXJp KSgK IG1lcmtlemk= IHJlbmRlbnQ= IGludmVzdGlzc2VtZW50cw== 4KS+4KSJ4KS4 INK30LDSs9C+0L0= 0L3Rj9GF IG5hdXRpY2Fs INCy0YvQs9C70Y8= b2NjaQ== IGTDqWNyZXQ= KFBvcw== IHR1bmdzdGVu b2hhbnk= IOCkpuCksOCljeCktuCkqA== IFRibA== IOCkueCli+CksuCkvg== RWF0aW5n 5YiG6ZCY INCy0LXQu9C40LrQvtC70LXQvw== IEtvbnRyb2xs IHNtYXNoaW5n LW55xYg= IHN5bmRpYw== T3Bwb25lbnQ= IOC0h+C0qOC1jeC0pOC1jeC0r+C1uw== 0LXQutCy0LDRgg== ZmVhcg== LmFnZ3JlZ2F0ZQ== IOCmruCnjA== INC30LTRltC50YE= IHBvdWNlcw== IOCksOCkleCkrg== IHN0cmNocg== IOCypOCyquCzjeCyqg== 4KaV4KeN4Ka34KeH4Kaq INC/0L7RgNC+0LQ= IHjhuqN5 5rig6YGT INC+0LzTr9C3 5Y2x6Zmp X0hE WmltYmFid2U= IEhq INin2YTYrtmE2YE= INC/0YDQvtCz0YPQuw== IGFsY29ob2xpc20= TW9tZW50dW0= 6LSh54yu IHBsYXRlZm9ybWVz IHN1c3U= 4KSw4KWH4KS24KSo IEJpdGU= IOCqruCqueCqv+CqqA== INCw0YPRgdC30YM= INmG25U= IExlaW4= ICIpLAo= IHRlbWU= S0VT U21pbGU= LXZh 4LWB4LSy4LWN INeS15nXmdeY IGhhbm8= IOuqqOynkQ== IGludGltYXRlbHk= SGVhZHM= IENsYXNl IOCwuOCxgOCwjuCwgg== IGdvdmVybm9z INCy0LDQutCw0L3RgQ== 0L3QuNC2 c3TDvGNrZQ== IGVzdHJlbGE= XGFwcGxpY2F0aW9u IG55bA== Lm5pYw== 2KvZgg== ZXN0ZXR5 0LXQvNC+0Lk= X1RFQU0= aWtsZXI= IOCyleCzi+Cyn+Cyvw== X0JSQU5DSA== IGJva2E= 44OJ44Or IGVzaWdlbg== ZXJnaW5n IHRzamlu IGdvZGltbw== 44Gk44G+44KK X0pT IGh6 YW1hbnQ= INGA0LXRh9C4 IGRpc2ty IG11c3U= IGtlcmFt z4TOrs+BzrnOvw== IGlsaWt1d2E= R0s= INC+0LHQtdGB0L/QtdGH0LXQvdC40LU= IFNpZ3Vl 4YOQ4YOS4YOU4YOc4YOi IOW+ruS/oeWFrOS8l+WPt+WkqeWkqeS4reW9qeelqA== IFBhZHM= INC30LDQtNCw0L3QuNGP IG5nYWdhZHVoYW4= LWxoZXM= 0LTTqdOp INCz0YDQsNC80L7Rgg== IEFjdXRl c2NoZWR1bGVk 5piv55yf55qE5LmI IG1vbHRlbg== INiq2LHYutio IG1pc2E= 5pS55Y2V IGNvbXB1dGFkb3Jlcw== 0YDQvtC2 INmD2LHZitmF INCx0LDQudCz0YPRgw== CUNvbW1hbmQ= w4dP IEJvdXJuZW1vdXRo U01BUlQ= KSkvKA== IHNwcmFuZw== X3Rocg== Q2c= IHltdw== IERSRUFN T0RN QkFDS0dST1VORA== IOC4q+C4suC4gQ== INCw0L3QsNC/0YU= L0xpbnV4 0JzQvdC1 Q0xPQ0s= IGdldnVsZA== IGthdWY= IE1mdW1v IGJsYWNrb3V0 INmK2YjYs9mB IOCkuOCkguCksOCkleCljeCkt+Ckow== IOCkquClgOCkj+Ckrg== IHByaW5jZXNh 77yM5a+55LqO LG5vZGU= KGVuYWJsZWQ= IHRzb3RsaGU= 4K614K6w4K6/ 5a6g 4LK+4LKf4LON LkRpc2FibGVk TUlM IGdyaWo= 656p 5raJ5auM INeV15DXmdef LnNwbGl0ZXh0 IExhdmFs IOCqpuCqvuCqlg== LmdlbnJl INi42Kfbgdix IHByYXRpcXVlcg== INC60LXSrw== 4KqV4Kqw4KuA IHdhaXZl bWF0aWs= Vno= IG9ibm94 INmI2LnZhg== IHnDvHpkZW4= 4Kyl 4LiV4Li1 IEtUTQ== dWlzY2U= anc= 4oCZaG9ubmV1cg== IG1oYWl0aA== IGhpZXJmw7xy IEppYW4= 4LGG4LCf4LGN4LCf INC/0LU= IGJhc2VtYW4= 4Kiu4Ki+ dmlsbGE= CXNpemVvZg== Z3JhZg== 6K+B5piO KGVuYWJsZQ== INit2YrYp9iq2Yc= X25j INC10pPQuNGA IGNyYXpl IHRlc3TDqQ== IFJBTkRPTQ== YW5uYWE= 4K6/4K6o IO+3ug== 6LeR6Lev IHBlbnNlbnQ= aGViZXI= IHJlc3RlcmE= IOCqn+CrjeCqtQ== V0FO IGNvbnNpZGVyYWRhcw== 562b aHVr aWR1ZQ== IOW9qeelnuS6iemcuOegtOinow== IHBhbmdhbGFu 4KWI4KSv4KS+ INCy0LvQsNGB0YLRjA== IGFzeW1tZXRyaWM= IGdlc3Rlcw== IHdlaGU= INC805nQvA== IG1hbGlu IOCyqOCyvuCylw== RGlhbGVjdA== 44O844OW44Or w69kZQ== IOCqruCrg+CqpOCrjeCqr+CrgQ== IEh1aw== IG1ldHQ= Qk9UVE9N INGD0YHRkQ== IM64zrXPgc6xz4DOtQ== 0LzQsNGC0YDQuNCy0LDRgtGM dHJpbg== Y29tcGV0aXRpdmU= INKz0LDQuQ== IOu5hOuhrw== T0dHTEU= d292ZW4= 4Z6G4Z+S4Z6T4Z624Z+G xJnFvGN6eQ== IHJlbm92YXI= INGC0LLQtdGA IHpvcmd2dWxkaWc= IHN6w6k= Q2FtcGluZw== IOqzteyLnQ== IMOzcmdhbm8= IGdvdG92bw== KE1vdGlvbg== b2Vr IGluZm9ybWFjaWo= eGRpZ2VzdA== IMO+ZXNzYXJp KFNlcnZsZXQ= IOCkuOCkguCkl+CljeCksOCkuQ== IGR1cmF0YQ== bG9jYXRlZA== IOC0teC0v+C0sA== KysKCg== c2Fi IEV1cmFz INC90YvQvdC10Yg= INmG2K7Ys9iq 2YXYrdmF2K8= 1aHVr9Wh1oA= 0LvQsNC60LDRgg== IHDDpGl2w6Ru IFTDpHRlcg== aW1hZ2Vt LnByZXR0eQ== 4LC/4LC44LGN4LCf IOCwh+CwpOCwsA== IGJ5ZWxh IGhhaWd1c2U= IOWNsOWwvA== IOCkheCkleCljeCktw== QmFuZHM= IGlsZXJp aWZpY2FuY2U= IHJ1cHR1cmE= 6Zy4546L IFBvbHltZXI= LmxheW91dHM= IHVudmVpbGluZw== IEF0bW9zcGhlcmlj 4YOQ4YOl4YOq Y2hhZG8= X0luc3RhbmNl 15XXktec IHByYWN0aWNhbGl0eQ== INiq2YjZgtmB WmQ= 0LfQsNCw0YDQsA== 4LCk4LGG4LCy IFNlaGVucw== IHbDpMOkcg== IOCkruCliOCksuClhw== IG5lZ2Vu IGNyYWZ0eQ== IHRqZXTDq3I= aW5nZXJwcmludA== IHJlYWRlcnNoaXA= INeU15DXl9eo15XXoNeV16o= dWtveQ== U2hp IHVuZXRoaWNhbA== IGZ1ZXNl IFBhcmxpYW1lbnRhcnk= YWNjZW50 IGZyaWE= 4Kao4Ka/4Kac INCx0ZbQu9GM0Yg= 4YCQ4YC94YCx aGF0aWs= IGdld2VuZA== 5aSH5qGI IOCmpuCmvuCmrg== IGFjdGl2YXI= IFBvc3RzZWNvbmRhcnk= LkhpZ2hsaWdodA== IGLDqW7DqXZvbA== Sm9pbmluZw== Y3LDvGI= Lmhn INio2YjZgw== INin2YTYsdiz2YjZhA== L3N0cmV0Y2hy IHNpZ28= IGVyw7ZmZg== IOCml+CngeCmsOCngeCmpOCnjeCmrOCmquCnguCmsOCnjeCmow== IOCwleCwvuCwrg== IHBlcmlm 44CC44Gd44GX44Gm YXRhYXM= IG5lY8mZ LwoKLw== Rm9yY2Vk IERlbmtlbg== IENlbnRyYWxl IGZyYXRlcm4= IFNoaWVsZHM= IHBlcmRpdGE= IGF6w6lydA== INiq2YjYp9mB2YI= LlJlZ2V4 w6RzZXI= CXBheWxvYWQ= IGVsZWN0cm9seXRl IGdzbQ== IGxsYW1hbg== IOC0leC0v+C0n+C1jeC0nw== IGRvam8= IEVyb3Rpc2s= IGFkb3Jv IG9wbG9zc2Vu 0YHQuNCw Q29uc3VtZXM= IGZhb2w= IHNjYXJ2ZXM= IHZlY2lubw== INix2pg= 4KaG4Kac IFPEhQ== IHN1cmdlZA== IOCkquCkueCkv+CksuClhw== LS0tLS0tLS0tLS0tLS0KCg== IHN1Y2VkaWRv ZXhjZWxsZW50 RWFy IOC0pOC0r+C1jeC0r+C0vuC0sQ== IHZpcm91 IFJlbWFpbmluZw== INC+0YLQutCw0LfQsNGC0YzRgdGP IEFsZ3VuYXM= VWRw IGRoaWc= cmV0cm8= w4lz IFhhbg== IEJ1bQ== 0rPTmdGL0YE= 5oSf44GY YmFzZXM= IHBoZA== 44K244Kk44Oz 5Liq5bmz5Y+w 4LCo4LGA X2dlbmVy RWtz IHN1bW1h 5Zuw6Zq+ IEdvacOhcw== IGJhcnRlcg== INGB0Y3RgA== IGJyZXdlcmllcw== IENvcnJpZG9y 1bjVstW21aXWgNWo IG1hbmNoZW4= IE1hcnF1ZXM= a2xpbg== 16LXp9eY dWhhbHRlbg== IHplcnQ= dXR1bQ== IOC0r+C1geC0 INCw0YHRg9GD0LQ= IERvcnNldA== IG5haW5lbg== YWtzdWQ= 5pW05pS5 aXNpYmxl 0YHQsNGA IHVwb3JhYmxqYQ== IGRlcmVqZXM= 1b7VuNaA INC90LXRgdC/ IFpldWc= aWFtb25k zr/PgA== IHJpamXEjQ== IExhcmdv IGJvbm9z 5bm/5aSn 2YjZgdmC IHBvcnRhcg== IEhpZGFsZ28= TWFjaGluZXM= IHRyYW1v 66Gt6rKM YXJza2k= IOihoQ== IEZJVkU= LkNsb2Nr IHZvb3JqYWFy IG9ibW/EjQ== IHN1Z2VzdMO1ZXM= VGVzbGE= ICYp d2Fpbg== IGZhcm1sYW5k TWFyaW5l INmG2KfYsdmI IOKa IE9zdGVu IGJha2th IEluZmVjdA== CXl5 X2JlaGF2aW9y 77yP5LmF5LmF 15DXmdeq 0J3QoA== 4LGH4LC5 5py65Zy6 YW3EsXo= 0LvQsNGA0LTQuNC9 INWu1oA= UmVsaWFibGU= INin2KzZhA== IH0NCg0KDQoNCg== x44= c2hpcG1lbnQ= IOCqrOCrgQ== 5oGi5aSN CWJlc3Q= 4LWD4LSk4LSm IGJhbGxlcg== 0LzQtdGJ IEJham8= w6lpZA== IGZyw61h IGNsaW3DoXRpY28= ZGNj T0o= INCh0LXQvQ== IFVuaXZlcg== IHN1YnN0aXR1aXI= aWVobHQ= Q0hS IEV2cg== IOKAqAoK X1BMVVM= IOu5iA== zrXOtM+Bzr/Pgg== IGVzY29n YWJ1dA== IHZlcnNjaGllZGVuZXI= IGRvbWluZQ== IEJhxZ90 Y2FwaXRhbGl6ZQ== ZW5hbA== IGJlbmFkcg== INir2KfZhNir dXRodWs= IENpdGU= w6RybWVu CWN1c3RvbWVy Lk9yZw== TW9udGU= INit2LPYp9iz IFNDQUxF IHNwcnVuZw== 4KS+4KSo4KWL IEFwaA== INCg0YM= aWtlbGlob29k IHRhbmRlbg== 06nQvdC60Lg= L3Rlc3RpZnk= IO+8nA== IGdlbGFkZW4= IGthbWlk IOCqteCqv+CquOCrjeCqpOCqvuCqsA== IGJyaWNvbA== a3R1cg== IGhsdWI= IFNhbW1sdW5n IGhyZQ== bWFnbg== LXBhbA== IHN1cGVydml2 INCS0YHQtdC8 YXVmbA== IGJ1cm5lcnM= IGFiYmFzdGFuemE= IGvDtm5ueQ== IHNhbXN0YXI= 5pW05Liq aWxobw== IHNldHVwdG9vbHM= Lk1FRElB IEVWVA== IHByemVw X3BjdA== IOCmquCngeCmsOCniw== IG1hbm9y 77yi eHJlZg== IOCuheCupOCuqeCvjQ== IGJpem9ueQ== 7KCE7J2E cGxpbms= INCX0LDQsw== IGNvbmVn INCw0LLRgtC+0LzQvtCx0LjQu9C4 6aqw IHByYW5r INiz2Kw= IFZlcmRpY3Q= X0VOQ09ESU5H IHN0cmlwcGVy IHRoYW5rc2dpdmluZw== YXRsYW4= b3BvbGlz INi42LHZiNmB IGl0YW4= IFJlcHJvZHXDp8Ojbw== INiq2YbZh9mG b3Rocw== IGJyZWF0aHM= 4KSy4KWH4KSV4KWN4KSf4KWN4KSw aXRhbmlh Jz4k INmF2YTYp9mK2YrZhg== IEV1cmVrYQ== IGxpZGk= b3VsYQ== IFBsdXNo INij2YbZhtin IOC0pOC1huC0sOC0nuC1jeC0nuC1huC0nw== IOC0heC0n+C0v+C0uOC1jeC0peC0vuC0qA== INC60L7QvNC/0L7Qt9C4 IGVudHNwcmVjaGVu CXBw IGhqw6RscGE= RElTUElE INin2YTZg9mI2YY= IEVzY29sYXI= IOCyquCzjeCysOCyp+CyvuCyqOCyvw== IOyViuuKlOuLpA== aW5uZXJ1cw== bGlhdQ== 2YXYp9mG2YrYqQ== QXR0b3JuZXk= 0LHQtdC70Yw= 5omr56CB IOC4leC4peC4suC4lA== X25hbWVk SGVhZGxpbmU= LuKAog== YWxpcm8= INC80LXQvdGP0YLRjA== 0YDQvtCy0LDQvdC40LU= ZXRldA== INC/0YDQvtC7 ZXJpZw== IOCyrOCziA== 0LvRg9Cz INGC0YDQsNCz 0L3RltGP ZW5kZXVy X21lcw== L3ZlbmRvcnM= LkxvYWRlcg== dWtzZXN0YQ== INin2K7bjNix IGR5ZA== 2YrYp9ih INeU16nXkdeV16I= IFNwYWFuc2U= INin2YTZiNit2K/YqQ== IHZpZGVvJ3M= w6tycw== IEhpcnNjaA== IHdhc3M= X3J1bnM= SW5zcGly w6Zra2Vy IGx1bWVu 0LXQs9C60LA= 6bK4 IGhpcG90ZWM= 5aW95aSa LURhdmlk R1JFUw== IGl6bGU= R2g= KGN1ZGE= 44CB44Gd44KM 0JrQvtC80LzQtdC90YLQsNGA0LjQuA== INC/0ZbQtNGC0YDQuNC8 IHVwaG9sc3RlcmVk LS0tLS0tLQoK IEFuc2F0eg== INC/0L7QvdCw0LTQvtCx0LjRgtGB0Y8= IHBhcnNlcw== INGI0LDQsg== ZXBlcnM= INek15nXoA== IG90b21hdGlz IHLDqWNvcmQ= IGNsw6F1cw== dWVuemE= 44K444Oj44Oz 77yeCg== IGNyw6lhdGl2aXTDqQ== IGt5ZQ== YW5lbmc= w6HFmWU= IGJvZGFz IOC0huC0rQ== IGJlZW5kZXQ= IE1vcmk= IOafsw== bWFrZXM= IHZlcmdlZXQ= Ki8pCg== 55qE6L2v5Lu2 w6J0cw== IGFsZW5l CW5vZGVz INmC2KjYsQ== IOC0leC1geC0nuC1jeC0ng== IFN1bmRlcmxhbmQ= 4K+N4K6k4K+N4K6k4K+B INC40YfQutC4 IGxkYQ== IGFsbGVnZXM= IGRydWtrZW4= aWNvcnA= INi52LTZgg== LS0tLS0tCgo= LWZldGNo L29wZXJhdG9y IG1hbmNoZXM= Vm9sbGV5 INC/0L7QtNCw0YfQuA== 1ZI= z4fPjg== IER1bW5lemU= INC90LDQs9GA0YPQt9C60Lg= IGFkZ2FuZw== INC90LDQvNCw0LnQuNGI IOq4iOyctQ== 0YrQvw== LWl3ZQ== LnBrZw== amV1 YWfEpw== IFdpbGxrb21tZW4= IGZvc3NpbHM= IGJhcmNoYQ== IHphcmk= PGZvb3Rlcg== IEx2 IEJyaXRhaW4ncw== IGluY3Vs IFRhYmVsbGU= INCU0LDQvQ== IHpkcmF2aWxh LmFib3J0 2YLYp9mE2KfYqg== IM68zrXOuQ== IOGDm+GDneGDm+GDkOGDleGDkOGDmg== IHFx55qE5aSp5aSp5Lit5b2p56Wo 4Kiq4Kiw IE5hdGFsZQ== IG11bHRpcGx5aW5n INin2K7bjA== 0LPRjdC0 INin2YTYrtmK2KfYsQ== IGFib2xpdGlvbg== IOCkieCkruCljeCkruClgOCkpuCkteCkvuCksA== INio2LHZgg== INCw0YLRiw== Q29tdW5l fVxc c2thdA== INGC05nQttGW ZmxhbW1hdGlvbg== J2Fubm9uY2U= X2Nvb3JkaW5hdGU= cmVwb3J0ZWQ= IE1pZGRlbg== IFJ5emVu IG5pcHBsZXM= IFBhaW50ZXI= INWv1aHVvNWh1b7VodaA1bjWgtWp1bXVodW2 IOCkleCkvuCksOCljeCkr+CkleCljeCksOCkruCkruCkvg== 6ZKl IHRlcmNlaXJvcw== SW5zdHJ1bWVudGF0aW9u PXJvb3Q= 4LC+4LCW4LGN4LCv IEZyZWVk UUk= U2V0dA== UGFyZQ== YmVyZ3M= VFJFRQ== V0FSTg== IGRpd2VkZA== IENhbmN1bg== d29uZGVy b2hvbg== IOa3mA== IHVubWl0dGVsYmFy 55qH5a62 cml2 IGNhbG1lcg== IHFpbGFkaQ== PXJlc3BvbnNl IGV4dHJhY2Npw7Nu IGhhcm1vbmll YXZvdXJz SW50cm9kdWNl aWVjaw== IFRm IFR1dHQ= KGNpcGhlcg== SE9ORQ== bGVuZ2U= IGtlbW0= IGzDoXA= IOCkheCkteCkuOCljeCkpeCkvuCkruCkvg== INin2YTYudmG IHVuaXTDqQ== 0L7Qv9Cw0YI= bmRz dW5zdWJzY3JpYmU= z4TOrc+B 5Y+R5Yqo IGJsYWNrYmVycnk= IERyZXNzaW5n YWtvc2hh IDotKQo= IGJlZHJv IG5o4bq5 IE1hc2E= IOaPjw== bHVtYnI= 4Kmx4Kic IHVjaGFndXpp INC90LDQstGW0YLRjA== TmFzY2ltZW50bw== INOZ0LI= IGthd20= IGRpb2M= YXBpdGFs IGluY2lzaW9u z4jOtc65z4I= PFJlcXVlc3Q= IERvaA== IGlub2E= IHRhcmpvYWE= LW5hdGlvbmFs dWN6 IE5lY3Rhcg== U2FuZHJh IFZlbmV0aWFu IEtlbHZpbg== LVN0ZQ== IkFuZA== ZXNzYXI= INqp24HbjNq6 0LrRg9GA0YE= 157XkNeb15g= aW1zaG93 IHNwbGljZQ== IGVudHJhbnQ= aW5oZXJpdHM= INCf0LDQvQ== INGB0Y/QsQ== INCh0LLRj9GC IHByaW1hbA== 0KPRhw== IGZpZGQ= IGFkbWluaXN0cmF0aWU= INC+0LHRj9C30LDQvdC90L7RgdGC0Lg= IOCqluCrhw== IGFuYWxnZXM= IGFiYW5n 7KeA7YS4 b29saW5n 4KSt4KWL IOCktuCljeCksOClgw== INCw0L/RgtC+0L3QvtC8 KCc/ xaF0aW5l IOmbhg== aXphcmVh IOCuquCvhuCuow== IOWNjumDvQ== 0Z/RjNCw INC+0YLRhdC+0LQ= L3Byb2Nlc3M= KGRpY3Rpb25hcnk= 4YOU4YOg4YOe 15XXoteU S2VpdGg= IGRhcmJ1 IGthdWR1 IEhlbmRyaXg= IG9iZXJlbg== IGJhY2hlbG9ycw== 4L2m LW1hc2s= IGN1bm5pbmc= IHRhbGVudG9z IFJhaW0= INCw0pvRiNCw aGxhaGlzb2E= INC/0L7QutGD0L/QutC1 IEFCTw== KCk9Pg== 0KHRgtC+0LjQvNC+0YHRgtGM YmVyZWQ= INin2LPaqg== X2ZsdXg= JnV1bWw= LWRyaXZlcg== Rk9SRA== IOCuruCvh+Cusg== IGluZmFudGlsZXM= IOC3gOC3mg== LkNydWQ= KEhhdmU= INS01bjWgtaE Q1VEQQ== LmZlZWRiYWNr IG1lZXN0ZXI= KGFjY291bnRz IGZvc3RlcnM= IMOubmNlcHV0 IM66z4HOrA== 15nXptef IG1hdXZhaXNlcw== IFBJUg== INm+2KfZhtqG 4LKy4LKo 2YHYsdmC IGVya2VubnQ= IFVJR3JhcGhpY3M= IG1pbmxlbmd0aA== 0YTQuNGG0LjQsNC70Yw= 5q2M5puy IGludGVuc2lkYWRl IGxlZ2FsaXplZA== IOCkueClgeCkqOClgQ== INiq2K3ZiNmE 0LXQuNSl0YjRi9C8 IHBpbXA= dGVjaG5paw== 2YXYsdij2Kk= IFNlcmJpYW4= IHN5bWJvbGl6ZXM= IHTDvHJsw7w= LlN1cHBsaWVy IEJpZGg= w6R0aWd1bmc= c2NodWxk IHJlc2E= 4K+B4K6a4K+N RGVubg== 4LGG4LC44LGN4LCf zpfOow== PD8+KQ== IGxpbHk= KHBkZg== IGthcmF0ZQ== CQkJCQkgICAgICAg ZmFyYmU= cHJ0 IOGDnOGDnQ== LOWcqOe6vw== IGRlc3N1dG9t INiq2KfYsduM2K7bjA== 44CC6YKj5LmI dWxlZXJk 15XXmden15g= IGNvb3Jkb25uw6llcw== IHBlcnRlcw== cmlhaw== 4LGI4LCf4LGN b256YQ== IOCkm+CkpeCkvw== IOCksOCkvuCknOCkuOCljeCkpeCkvuCkqA== IGNoYXR0ZQ== IGJvcGhlbG8= b3JlZW4= 7KCE7J6Q IHpuw6Ft IHNhd2lqaW5pbmc= IEV2ZW50bw== IEthdHpl KHNp QWNoZQ== UHJlc2NyaXB0aW9u 5aWz5LyY CWRlc2NyaWJl 2YHZitix2YjYsw== IEhhbXA= IERpbm9zYXVy YXppZW5kYQ== 0LDTodCw0YDQsA== YW5ndWFyZGlh IG9ibGlnYXRvcg== IOCyuOCyguCyreCytQ== IFNTVA== IGNvbW1lbmNpbmc= IOCmleCnh+Cmhw== IE1hbnVmYWN0dXJlZA== 2YjYudmK IGF0dmlubg== IGV4cGFuZGFibGU= IGRlc2NyaXB0 IERlcHJlY2F0ZWQ= IGVuZGVtaWM= IHZvb3Jsb3BpZw== Qm9sdA== IHRoZXJtb3N0 c2hpdg== IOWOuw== IGJvdXF1ZXRz IOGDl+GDkOGDnOGDkOGDm+GDlOGDk+GDoOGDneGDleGDlA== IHNwcmlua2xlcg== IG1hbmljdXJl IGV0aXF1ZXRhcw== ZmVscw== IG1pbmNlZA== cGVkaWRv IENhbmE= LWV4Y2x1c2l2ZQ== XFZhbGlkYXRpb24= IFBhZ2luZw== IHBlcmZla3Rlbg== dW5na2lua2Fu IOGDm+GDmOGDluGDnOGDmOGDlw== 2K/Zidi62KfZhg== IOyekOuPmeywqA== 25TblNuU IGJsZXNzdXJlcw== INW/1bLVodW01aHWgNWk IGZsYW1i INC50YvQuQ== anVuaw== IG5lZ2F0aXZhcw== ZmVyZW5jZWQ= KFNjZW5l LmRlcA== IHFvcmE= 0JfQsNC8 INC90LDQt9GL IOCmruCmvuCmmw== X1BsYXk= IG13aW5naW5l 0JTQvtC/ INGB0YLQsNGC0YzRjw== IFNsYXllcg== INGC0LDQtA== bGF3cw== b21ldG93bg== cmlhbWFu IHZlcmxhbmd0 INGO0YM= IEplZGVu IOyZlQ== IHZpc2liaWxpdMOp INGE0LjQs9GD0YA= IGJlemE= INmF2YTYp9iq2pM= RHJhaW4= VsO9 T2ZmaWNpYWxz 0q3QvtGD 4LiB4Liy KHRl 55KD IHt9KS4= XENvbnRhaW5lcg== IGxlbW9uYWRl aG9zZQ== IGNsdWljaMOt IGdlb3JnZQ== bG9jYWxz cmV6YQ== IOCkhuCkr+Clhw== 6Iif b3VuY3ljYXN0bGU= IEFhbW1h INeU15nXqteo IGRpcGzDtG0= bGV2YQ== eWRlc3PDpA== V2l0bmVzcw== IGthaWtlbg== X2VuY3J5cHQ= INC60L7QvdGE0LvQuNC60YI= IENhbGR3ZWxs Q29tbWl0dGVk IGRvZydz IMOpdGlvbnM= IFNsb3ZlbmlqaQ== IGRldmVyaWFt IGJpc2Fu IExPV0VS IHZhYXI= Q1RTVFI= INW31oDVu9Wh1bbVuNaC1bQ= IHZpbms= IERpc2NpcGxpbmU= 5bCd z4PPgw== dsOhbnk= CVJ1bg== INGB0YDQvtC0 IHJoZXRvcmljYWw= LnNlY3Rpb25z INin2YTYs9in2K0= IEJyYW0= L1BU IGhhemU= dGlnaHQ= IGxlZ2E= IOC0uOC0guC0uOC0vuC0sOC0v+C0muC1jeC0muC1gQ== IHrDqXJv IGRlY2xhcmF0 4LCy4LGN4LCq 65Ok64+E IGFiYmlh IFJlZ2lz Y2VudGU= X3Vk IHNxdWlk QXJ0w61jdWxv IG1pbnVu SW9z IENvbmNpZXJnZQ== IEFtbw== QVNURQ== KHN2Zw== INGA0L7RgdGB0LjQudGB0LrQvtCz0L4= IGFnaXRhdGlvbg== IFByZXNlbnRlcg== 4LKV4LKw4LON4LKk IO2KueyglQ== IFZlcmk= IHplbGZzdGFuZA== R0FM IEJhdGlzdGE= IGN1bHRpdmFy KGZyb250 IFBvdW5kcw== 4oCZaW15YWth IHRlYXNwb29ucw== IHF1YXJhbnQ= c2lucw== IHBvZHJ1xI1qdQ== aWVmdA== Z3Nt IHNhbWt2w6ZtdA== b2N6ZXM= ZXJuYWw= IGdhcmFudGl0 INeQ1rfXkw== IE1TUlA= 4KSq4KSk 5pig55S7 INW41oLVttWl1oHVodWu IMSRw7Q= INGB0YHRi9C70LrQuA== IGFydGVzYW5hbA== IGJla29tbXN0 IOCqquCrguCqsOCrjeCqow== KHRvaw== INW21aHVrdWh1bE= IHJlcXVlcmlkbw== IEJ1c3M= Q2hhbXBpb24= Q1VU IGtvbnNpZGVy IFN0cmVhbXM= IOCkleCksOCkqOClgA== a3Vq 5q2l6aqk IGVrc3BvcnQ= IE9yaWVudGllcnVuZw== IEFwcGFydGVtZW50 IOCmquCnjeCnsOCmleCmvuCmtg== IGZsYWt5 0YHRhtGW IFNUT1JJRVM= LmVtYmVk IHRlcmE= IHJlYWdpZXJlbg== 0rfQsNC4 IFBhZ28= IHfDpGNoc3Q= U3VqZXQ= IFZldHRlbA== IOCumuCvhuCur+CvjeCupOCuv+CuleCus+CvjQ== IHdoaW5pbmc= IHN0w6Ryaw== IHBvc3RncmVz aXR1a3Nlbg== IHJha2VudA== 4oCZRXM= IEtsw6RnZXI= dm9n 0JzQsA== 15XXodeY16g= IHByb2xldA== INC+0LHQt9C+0YA= YWRtaW5z IOCwmuCwv+CwlQ== LkhPVVI= 55uu44Gn44GZ IOCqsOCqvuCqnOCqleCri+Cqnw== IHNlaGFyaQ== INiq2LHZiQ== 2LDYqg== IHNlbHNr IHF1ZWlqbw== IHTDpGk= S2VzYXJp IHp1aWRlbg== KGNvbXBhcmU= INGB0LrQu9C+0L0= IG56dmltYm8= bHRy IGltcHVsc2Vz IHJlcGFydG8= INW61aHVt9W/1brVodW21bjWgtWp1bXVodW2 X1JFRkVS IG9jY2hp IOC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hg== IERBUks= aWFsbGE= IGFjY29tbW9kYXRlcw== dW1pc3Q= IHBvY3rEhXRrdQ== 0J/RgNCw IHBhdHJpbcO0bmlv INC30LDRgNCw0LHQvtGC0LDRgtGM IOywuOqwgA== 4LSv4LW8 IGNo4buvYQ== INmF2YbYrtmB2LY= 0LTQtdC70ZY= 4LOI4LKo4LON INC/0YDQuNC90Y/Qu9C4 KS5c b3VidA== 0LjRgtC10YA= PXJlcw== b3BsZWZ0 56ys5LqU z4bOtc+BzrU= IHRyYW5zZsOpcg== 4Lii4Liy4Lii4LiZ IHBvc3RjYXJkcw== KlM= INmI2LjZitmB2Kk= IOaYn+epug== IHN1w6c= X3Jlc3RhcnQ= INmG2YXYp9im Y2VhdQ== X0FMSUdOTUVOVA== IGxlYXRo cmzJmQ== LlRlbXA= IGZpbG8= IOGDlOGDnOGDlOGDoOGDkg== INCh0L7QvdC00YvSm9GC0LDQvQ== IHNhecSx 4Ka/4KaJ4Kac INCY0LfRgNCw LmZyZXF1ZW5jeQ== cHJvdmlkZXJuYW1l xKfEp2Fy IHR5cGlzY2g= LlJldHJvZml0 KGxvYWRlcg== IGZhesOq IHRlYXNlZA== L3Nr IExhbmthbg== IHRvbW91 LWJ1cm5pbmc= INS11oDWh9Wh1bbVqw== IGVuaHZlcg== IGNoZWFydA== Z2x5 IHN3ZWV0ZXN0 IOCkp+CkvuCksOCljeCkruCkv+CklQ== IOGAmeGAvA== INin2YTYpdi52YTYp9mG J2F2aXM= IGJ1bWlsaQ== IGNvc3R1bWE= eW51 IGJsaW5kbHk= IH4KCg== IHpkYWo= IOCmpuCnjeCmrOCmvuCmsOCmvg== IGnFn2xldA== IOCkieCkpOCljeCkleClg+Ckt+CljeCknw== c2VsZWN0b3Jz INm+2LHYqg== IFBsYXl0ZWNo KV0pCgo= IHJlbHVjdGFudGx5 INCV0LLRgNC+0L/QtQ== IOaWsOa1qg== IGZldGlzaXNh IHN2b20= IGJsZWk= X0FQQg== INC60L7QvNC/0LXRgg== 0YDQsNGB0Ys= IHRyYW5jaGU= IEhY 4KSC4KSl IExpdGVyYXR1cmE= IG1lbnNlbGlqa2U= zqzOts61z4TOsc65 dWx1a2E= INWG1oDVodW21oQ= IHZhbnRhZ2U= IFF1ZXN0aW9ubmFpcmU= INin2YTYo9ix2K/Zhg== IHZlcnpvcmdk 6KGo546w V2lsdA== LWNvbm5lY3Q= 6auY5riF5Zyo57q/6KeC55yL IGplZG5lag== IHJhZGl4 INGB0YXQtdC80LA= IOCmtuCmqOCmv+CmrOCmvuCmsA== RW1iZWRkaW5n IHN1dXQ= IGRlc2Fmw61v IGRhdm9y 4LiZ4Li14LmI IEFiaWdhaWw= IHBhcnR5aW5n IHNjYXJlcw== 15LXoteo YWN6ZWdv 4Ka+4Kar4Kay 6Z2S6Z2S6I2J5Y6f IOCkleCkv+CkpOCkqOCkvg== IEdsb3VjZXN0ZXI= LnZpZXdtb2RlbA== 2YfbjA== IGdldm9ybQ== INeV15XXlQ== IGllc3DEk2o= 4LeP4LeA4Lea IHVuY2w= IM6czq0= 2YjbjNiy24w= IHRhc3NhYXZvcQ== IOCkhuCkguCklQ== aXRhamk= xJ1p IGbEsXJz d3lkZG8= Z2F2 0JHQtdGA 4Kqw4KuN4Kqn IG1vZWRhcw== IGVycnM= INC10YDQtdC60Yg= INeR16LXp9eR15XXqg== IOWkqeWkqeS4reW9qeelqEFQUA== IFVOVVNFRA== 2LHZhdmK2YY= ICAKICAgIAo= IFphYg== IGV4cHJlc2Fy 0JfQtNGA0LDQstGB0YLQstGD0LnRgtC1 X3Byb2JhYmlsaXR5 5LiB6aaZ5LqU5pyI INGW0YHQutC1 LU1T IOCkheCkquCkoeClh+Cknw== INWh1bXVttW/1aXVsg== IG5hbWFy IM6xzr3PhM65zro= INC80LXRgtC+0LTQvtCy IGVneXB0 L1N0 2KfYs9mJ IFJlYWxpdMOkdA== IFBlcm1hbmVudGU= YWJvcmFkb3I= IH0KCgoKCgo= IGNvY2luYXI= QWFudGFs 5Zo= IGt3YWFk IGV6aW5pbnpp QE1hcHBlcg== aWdlemU= INGB0L/QvtC60L7QudC90L4= 4bq5Z+G6uWJp INGB0L/QtdGG0LjQsNC70YzQvdGL0YU= VXg= IOCkquCkvuCkpOCljeCksA== aGVsdmVz z4TOv868zrE= IGFwcHJlY2lhdGl2ZQ== IG1pc2d1aWRlZA== IGthbnRvcg== LmNhcHRpb24= KHRleA== IOC2uOC3kg== IGhhdmlhbQ== INGI0L7QutC+0Ls= KEVSUg== IGRpYXNwb3Jh LUxpZ2h0 IOCyl+Cyow== IOiyoeW4gw== IHBvbGx1dGVk KFNjcmVlbg== CQoKCg== IHZsb2c= 15nXoNeZ16o= IOCqsuCrh+CqtQ== 5aSp5aSp6YCB IGxpbmdl IMOpcHI= xIF0YQ== INWw1aXVv9Wl1oI= IHZ1ZXN0cm8= INmE2YjYrdip 4LSV4LWH4LSw4LSz X2xpc3Rh X0FTVA== aWxlZ3Q= IEVyaWth IENPTlNVTFQ= IGdhYQ== wq1zZQ== IOyXrOyekA== X3BocA== INuB2YHYqg== INGF0LjQt9C805nRgg== 2YfZhtip IHB1YmxpZWtl IGdyYXNzeQ== IGVtb3RpZXM= dG94 KG1ldHJpYw== IOCwqOCwvuCwsg== dGVzdGVk enp6 INaG1avVttWh1bbVvQ== 2KvYsdip IOCyuOCzgeCysA== IEVpY2g= 7JuM7YGs 0Y/RgNC+0LQ= INCT05nQtNC+0YM= INio2KfZhNmE2Yc= LlBhcmNlbGFibGU= IHdlbHppam4= IFBSSU5D YnVuZ3M= IENDUg== JG51bQ== IHdyYXo= 4LS/4LSv4LS+4LSv4LS/ IGhvbnRl 77yaKA== IGVpZ25lbg== cXVvdGE= IGJhcmFkYWt5 aXRhaQ== IOS6v+WNmg== INin2YTYqNix2Yg= IHVuZGVmZWF0ZWQ= CWN0 0L7Qv9C+0LvRg9GH IOGDkOGDnuGDoA== Y2hpcHM= INGP0YjRjA== IH5+ IGNvYmE= IHNhZ2Vk IGZnZXRz 4Lit4Lil4Lil IGJoaW9z IGxlaWRlcnM= INC40L3RgtC10YDQstGM0Y4= IG9yYWNpw7Nu IE15bg== IG9ibGlnYWRv b3N0YXNpcw== RGlzdHJpdG8= IOCqquCqsOCqv+Cqo+CqvuCqrg== ID09PT09PT09PQ== IHdpbm5hYXI= IG9vcA== IHVrdXk= IOi6qw== IHhtbQ== INep15nXnA== IG3DqXRy INem15nXnNeV150= YXPEsW7EsW4= QU5URVM= INGH0LjSm9Kb0LDQvQ== 5oiw IHJlY2ludG8= 4Kq+4Kq44KuN4Kqf IHdob2xlaGVhcnRlZA== Wml0YXQ= IGF2b2NhdA== IGTDqXNlcnQ= aWV0bw== CVRleHR1cmU= IEJhaGFzYQ== 5Yy65Yir IEp1ZGljaWFyeQ== INC/0LjRgdGM0LzQvg== IEJyw7w= IHZvbGk= LnNjaGVtZQ== IHRvaW11Yg== 0LTRg9Kb INin2YfYr9in2YE= 0YHRgtGA0L7QudGB0YLQstCw IGV4ZWN1dGlvbnM= IFppcg== IGVjaHRlcw== IOS4h+WutuS5kA== R290bw== IE1PTA== IE1hdHRlbw== CWJ1ZmY= PEFic3RyYWN0 INin2LPYqtmF2LHYp9ix IG9zdHZhcg== IG9yZW4= IE9mZmVuc2l2ZQ== X1JFU1VMVFM= IHdhYXJz Ym9sbA== bGljdGlvbg== IG1lbWFrYWk= LmJsdWV0b290aA== IHNveWJlYW4= IHB1cmlmaWVy INCy0L7Smw== aXRpw7A= INGA0L7Qt9Cy0LjRgtC60YM= IGNyZWF0aXZlcw== TEFN IGZyZWV6ZWQ= INeV15DXow== IGRpc2NvbnRpbnVl IEVhdG9u 4LGG4LC44LGN4LCf4LGN YWRlcmll 0Y/QvdGD0YLRjA== ZXZlcnlvbmU= IHN0ZWxkZQ== IOCml+CmrQ== ZW5udQ== IHNwcmVtbA== YWluZm8= 4LON4LKw4LOG IGJlbGVk IGRlZ2VuZXJhdGlvbg== a29wZg== OlN5c3RlbQ== IGthdWE= 1bjWgtW01bjVvg== LnRpbQ== IOC0juC0qOC1jeC0qOC0v+C0teC0sOC1jQ== IHBhZ2luYXM= b3JlZXQ= IGRlcmRlbg== IHTJmXRiaQ== X0VNUA== 4Li44Lib IFNUQUNL IOWFsQ== IOm8juS4sA== IHRhbmtl IM+Dz4fOrc+Dzrc= IE9yZ2FuaXphdGlvbmFs LlByZWRpY2F0ZQ== LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IFNBRw== IEFydGhyaXRpcw== L1lZWVk= IGJlc3Byb2tlbg== X1NUQU5EQVJE IM+Dz4TOv865z4fOtc6vzrE= IGNyYW1wZWQ= IHRvbW8= IHJwdA== INC/0L7QutCw0LfQsNGC0LXQu9C4 IGRhbWFs INC+0pPQsNC9 IOCypOCzhuCyl+Czhg== IGJsaWprYmFhcg== IOCumuCuvuCupA== c3RlZHQ= INC80YPSs9C+ IHJlY3Rvcg== UG9saXRpY3M= 44CK5YWz5LqO w7xsZW4= INC606nQuQ== IGh1bnRz IHZlcnNlaGVu INep15vXnw== IHByb3BvcmNpb25hbA== IE9yZGVt 16LXnNeZ LmNvZGVoYXVz 05nSow== SVZPUw== 06/RgA== 4YCv4YCQ4YC5 IOODig== YW1uYQ== IGfDonRlYXU= IOGDo+GDpOGDoOGDneGDoQ== cmFzemFteQ== IOCkleCli+CkteCkv+CkoQ== IGJldGVpbA== VU5EUw== IEJldG9u IHdpbGRmaXJl IHVuY2Fubnk= IE55ZQ== 4oCZRW4= 4Lit4Lif INis2Yraqtin IHppcmNvbg== IHJpZmZz LlVp IHloZGVu 0YPRgtGC0YPQug== IHlrbg== 5YyZ ZXN0ZXM= 5oOz5Yiw 15vXqteV15E= IHdlZGdlcw== INeR15TXqA== amFsZQ== 4YOd4YOT4YOc4YOU4YOc aWxpYW5v IOCwquCxjeCwsOCwuA== IERhdGFz IHJpbXdl INeR16rXmQ== X2FycmF5cw== IFNJU1Q= 5oiQ6ZW/ 54Ot6L+Z6YeM5Y+q5pyJ57K+5ZOB IG9ncmFuaWM= b2RoYQ== Q2lzY28= INeQ15XXnQ== IHNpcGg= KE1vY2tpdG8= IHJhenZvamE= IER1bWI= INCQ0LPQsNGA IGNvbnRhY3Rl bGHFn2TEsXI= INem15HXog== Q1VT 2LbYsdin2LE= IGJsb2Nz IG5la3U= KHNlcGFyYXRvcg== IHl1Yg== IG1vb25z IOG7jWNo 5LiH5Liq IENldXg= IEJlaXJ1dA== LmVjaG8= IE1pbGxlbm5pYWxz IEFubGVnZXI= IHByemVjaXc= X1BE IGNyZWRz INGA0LXQutC70LDQvNGL IG5hxaFlbQ== w7ZyYQ== bm93cmFw IERVVA== 77yM5ZCm5YiZ 5aSp54S2 IENISVA= 6IiS5pyN ZXd1 IHPDpnJsaWc= 5a+d a2lubw== IFNUT1JBR0U= INC30L7QvQ== IHN1Ym9yZGluYXRl IGRlcm9n 0YDQtdC90LjQtQ== U2FmYXJp ZXN0aW4= Y2VsYWlu w7xuZGV0 IG1hbnRh 4YOd4YOj4YOa IOW9semfs+WFiOmUiw== b3BsZWlkaW5n b25kcm8= UHVibGljaWRhZA== 1aXVr9W/ TE9E IHRzb25h YW50aWs= INCw0LvQs9C+0YDQuNGC IGbDow== IGlvZGluZQ== 05nQvdCx05k= IOCmpuCnh+Cmr+CmvA== IHJlbnRlcg== xLBO IGLDqW7DqWZpY2k= X3JlZnM= IGhhbmR3cml0dGVu dHN4 c3BlZWNo LkZpbmFs TWF0ZXJpYQ== IHRlY25pY28= aHVudA== YXZvdQ== ICciLg== 0L3RltGI0LU= Y2FkZW5h INmB2LPYp9iv b25la2Vkd2U= 4buZbg== Q2FzdGluZw== INio2obbkg== dWFyaXM= 4LKf4LK/ IG7DpG3DpA== 5oiQ5Lqk IFJlbWFya3M= IFNpbm8= IGNoZWdhbQ== IG1hcmtlZGx5 IGJldGVpbGlndA== IHZhcmTEsQ== IGZyYW5jaGVtZW50 IHBlcmlzaA== YW5jw6ll Y2xm IG1lbXBlcm9sZWg= IC8vfg== IG9iamV0aXZh INeQ16rXqA== IHZhY2F0dXJlcw== 7JiI7JW9 05nQt9Cw0YA= IGNlbGx1bGl0ZQ== TmlnZXJpYQ== IFPDpG5nZXI= IEdFVEdMT0JBTA== IHB1ZGk= IERpZmVy 0LrQsNC30YvQstCw0YLRjA== INC80L7RiNC10L0= 4Lia4Liy4LiH IGppcm8= ZGllbnN0ZW4= INi52YTYqg== IGlpbQ== IG5naW54 INCT0LXRgNC80LDQvdC40Y8= IGNvbnNlcnZhw6fDo28= Tm9uZXRoZWxlc3M= IHJlbm92YWNpw7Nu IOyhsOyngQ== 2KbZiQ== IHphxaHEjQ== KGp3dA== IEJsb29keQ== INGB0LM= IEFOR0VMRVM= IHBhcmFuZA== IOCquOCrh+CqtQ== 0Y/QtNC+0Lw= 0LXRgNC/ IHNvc3RpZW5l 4LKV4LK+4LKw4LK/ IGphYsOzbg== ZWxvemU= SUVWRQ== INeV15XXmdeh158= aXNzZWQ= INKb0LjRgNKT0LjQvQ== IEhlcnR6 Y2llcm9u LdGD0LzQuA== INC/0LXRh9C10L3QuA== IOCyhuCyuQ== X3NlcnZlcnM= xKt0aQ== LmZpbmlzaGVk IOC3g+C3jw== QVJP UEJT IGludmVzdHM= IGNvcGk= IHBhdHNp dXR0ZXQ= INCy0L7Qt9C90LjQutCw0Y7Rgg== dW13ZXJ1 Jyk7Ly8= LlNoZQ== INCx0LDSuw== IOCkl+CkvuCkgeCktQ== IHBlcm1pc29z 4YOU4YOR4YOT4YOc4YOU4YOc 0L7QstC10LQ= c2hvZQ== cHJlaXNl LlZBTFVF LmNvbGxpZGVy IHp1Z2Vz INC/0YDQvtCy0L7QtNGP0YI= 4KWN4KSy4KS/4KSu IOGDmOGDrg== IE5vb3I= IEhpc3RvcmljYWxseQ== IGNhdXNhbmRv UXVpZXJlcw== IGxpamY= IHRvdXJub2k= 4oW8 IMOpbGV2w6lz LlBvcGVu IOi2o+i1og== INGD0LzRg9C8 5ZCI5rOV5LmI IHNweWluZw== yZltaXl5yZl0 4KSq4KWC4KSw IOCkrOCkv+Cknw== IHN0cmlwc2xhc2hlcw== IG1hdHVtaXpp IOC0teC0vuC0meC1jeC0mQ== IG51YmU= 4oCZb2w= IG1hc3NpbW8= INGA0LDQt9C+0LHRgNCw0YLRjNGB0Y8= IOCmuOCmq+Cmsg== IFJlZ2nDs24= IHJlZHVjdA== IHRlZGR5 IGJlbGVpZHM= IiwiXA== IG1pY3JvZmliZXI= 4oCM2LTZiNmG2K8= IENoZWVz 5pS55Y+Y IGFzaWFra2E= VmV0 INC00LXRgNC10LLQvg== INCU0LXQuw== IHlm INGH0LvQtdC90L7Qsg== 4oCZw6lsZWN0cmljaXTDqQ== CWxpYg== 4LmB4Lih4LmI IE1JQ1JP 4K614K6k4K+B IFNhbGFtYW5jYQ== YW1lbGE= IEhVTUFO Li4p 0KLQtdC/0LXRgNGM IHJhc2hpbg== 4YOl4YOb IGNvbnZpcnRp IHRyYW5zcGFyZW5jaWE= IG1vxbxsaXdvxZtjaQ== INin2YTZg9in2KrYqA== IG5vaXg= X25zZWM= SGFr INC60L7RgNC4 IHNwcnVjZQ== INCy0LjRiNC1 QVJHQg== b3JudQ== INC505nQutC4 IHByb3ByaWU= INCx0LXQu9Cz0ZY= IE1EUg== dXRobw== INmG2LTYs9iq IOCyuOCyvuCyruCyvuCynOCyv+CylQ== IOCkheCkreCljeCkr+CkvuCkuA== INi02KjYp9io IGNow6hyZQ== IHJlZmFpcmU= IEFwcHJlY2lhdGU= X3Rocm93 UHVu IGNvbG9zc2Fs IG5pdG9uZw== IHNww6ljaWFsaXPDqXM= INeQ15XXoNeY16LXqA== INW01aXWhNWl1bY= IHZlcm1pdHRlbHQ= IEN5dA== IHRlbXBlcmF0dXJlbg== 4Kq/4KqV4Kqy IFJlY3Rvcg== IEJyZXdlcnM= INC/0YDQuNGB0YLQsNCy a2xhZHk= IElCYXNl c2ltdWxhdGlvbg== IFN0YWN5 Q1ND J29t 5LiA57qn54mH 0L7QstC10YI= IGx1a2E= IEFxdWlubw== 7KGw6rG0 Tk9S IFBldGl0aW9u 44Gg44Gj44Gf INix2KfZhQ== z4HOv8+D IHRlcm55YXRh 57u85ZCI6Imy5ZWq InN5bmM= INep16fXnA== IGV4Y2VsZW5jaWE= IFN0YWly IGV4Y2hhbmdlcg== IFBvcmNo IE5vZG8= IOGDm+GDneGDo+GDrA== bmFldGg= UG9wdWxhdGU= IGludGVu IOCknOCkruCljeCkrg== IExvbmRlbg== IG3DvMWI IFpha2Vu IOG7pWd34buN IFBVUkU= 0LbQsNC10YLRgdGP INil2Ks= LnRoaXJk IOyCvOyEsQ== IHdvcnNlbmluZw== dWxhbmQ= INmF2K/Ysdiz2Kk= IG1hZ8Sn IGphcm9q IGF0b2w= 7KCc66Gc YWZhbmE= IOC0teC0v+C0ruC0vuC0qA== IOuNsOydtO2EsOulvA== X0NvbnRleHQ= 4KSo4KS/4KSw4KWN4KQ= IHNvcmdmw6RsdA== YWphaA== IGdlbXN0b25lcw== SUxZ LWRpc2NpcGxpbmFyeQ== IEhvZGc= Wkc= IFtbXQ== IEFsZ3VtYXM= 5ryr55Wr INmI2YTZg9mG2Yc= IG9uZGVybmVtZW4= 5YiG6aG1 IOCqheCql+CqvuCqiQ== INmG2KfYrdmK2Kk= aW1laQ== 5pW055CG IOCkleCkueCkvuCkgQ== PWlz KSI+ IFN0ZWVu IGJ1cnVr LuC0kA== dsOpZA== IG5vdW5z INWw1aHVv9Wv1aHVutWl1b0= IHBlcnBldHJhdG9ycw== CWJvb2s= 2KrYsdmI2YQ= SGlzdG9yaWE= IERlbW9rcmF0 IOCqleCqpg== INin2YTYs9mK2LE= Rm9ybmVjZWRvcg== IOCkm+CkvuCkpOCljeCksOCli+Ckgg== 4KeL4Kef 55Oj IOC0l+C1geC0sA== INin2YTYrdmI2KfYsQ== IHF1b3Rhcw== INCy0YvRgdC+0LrQuNC5 IOC0juC0suC1jeC0suC0vuC0tQ== 77yJ44GM 4LC+4LCq4LGN4LCk4LCC4LCX4LC+ IGVzdGFjaW9uZXM= LDopOwo= IOCuheCuqeCviOCupOCvjeCupOCvgQ== 4LC/4LCh4LGN IHBvZHJpYQ== 77ya44CQ T2NjdXJyZW5jZQ== IGZpYW5jw6k= INCj0LHRgNC4 IG5nZ3VuYWtha2U= X0JBTA== IGVqdXM= INC/0YDQsNGG0Y/Qsw== 2YHZiti2 IOCkuOClguCkpOCljeCksA== 0LDRgtC40YHRjw== IERhbXA= Lm1hbnVhbA== IGh1bWlsaWF0aW9u INGC0LDRgNCw0YQ= IG1hcmluYWRl 5Lq65rCR5pel5oql IGZhdHRh IFBvcHM= IEdFTw== 0ZbRgNCw IOGDmeGDmuGDkOGDoQ== INmK2K/ZhA== 0YbRltC9 IGdhbmdiYW5n IGZyb2g= IOCkpuClgeCkleCkvuCkqA== a29tbXVu IENyaXNw IG1pZWk= 6L66 Umw= dWx1cg== IGLDtnJqYQ== w6RkdA== INeQ15nXoNed bGFyaWdh IHppcGNvZGU= 15TXmdec15Q= IGRpc3BhcnU= IOC4o+C4uOC5iOC4mQ== YXRpbm8= IGJld2lsZGVy IGVtcHJlZ29z X2NvbnZlcnRlcg== d2VpZ2h0ZWQ= IGVnZXN0YXM= LkV4cA== cWh1Yg== LWZpdHRpbmc= IGZ1bGZpbGxz IOCkleCkquCljeCkpA== X2tub3du IOCwnOCxgOCwteCwv+CwpA== YsWRbA== IEF1Z2VubWVyaw== IOCwquCxi+CwuOCxjeCwnw== IGF5YXk= RGlyZWN0aW9uYWw= VmFjYw== IGt1eW8= IOCwleCxiuCwqOCwuOCwvuCwlw== INC40L3QvtC5 IFNvdXRoZWFzdGVybg== Km51bQ== TW9vZA== IGtpd2FuZ28= UmVzaWR1YWw= IG55b2NoYQ== 5b2p5Zyo57q/ IHRyd2E= INC/0YDQtdC00YHRgtCw0LLQuNGC0LXQu9C10Lk= IGNvbmRlbW5hdGlvbg== IFJ1c3Npc2NoZQ== 8J+PvA== bWFyc2hhbGw= IGdpbW5hc2lv IG1hbmF0dQ== IGV3dQ== IHB1cnBvc2VmdWw= IT8KCg== IEp1csOtZA== INij2K/ZiQ== LicvJy4k IG5pbGFuZw== IOCyquCysOCyv+CyuA== IFZpb2xh INmC2YjYp9mG24zZhg== INC30LDRgtGA0LDRgg== aGVyaQ== c3TDpHR0ZQ== IHZvbmU= IG1pY3JvcGhvbmVz 2YrYr9uH IGFhcHA= IE9wY29kZQ== cXXDqg== IOCyh+CypuCzhw== IGthbW8= IGF2acOjbw== VW5sb2NrZWQ= IEFsZ2VtZW5l 4KWH4KSo4KWN4KSf IGVmZml6aWVudA== zrrOrc+C aWFsZWN0 IHlpbWE= KV07DQo= INin2YTZgtin2YbZiNmG2YrYqQ== IHR1ZnQ= T1ND CWN1c3RvbQ== V2FudGVk 4oC8 U29ubw== IG1hZ2thcm9vbg== IGF1c3NpZWh0 6I2j6ICA IGphY2tzb24= INGC0YDRiw== Iil9LAo= IFJoZWlubGFuZA== IEZsaWNr IG5x IGZvcm1hdGl2ZQ== IHBhcmVob25n LkNhbGN1bGF0ZQ== 0L/QsNGB IGxhdmFibw== INWj1bbVuNaC1bQ= KGNvZGVj IHNhw6k= X0xldmVs IHBlcmNoZWQ= IEluY29taW5n IFBDUw== IOGDleGDpOGDmOGDpeGDoOGDneGDkQ== IOCqruCrgeCqtuCrjeCqlQ== IHJlcHJlc3Npb24= INGA0LXRgdGD0YDRgdC+0LI= IOCmpOCmvuCmlQ== IHFhbGx1bmE= 4LmB4Lil4LiZ4LiU4LmM INGH0LXRgQ== IOCwpuCwl+CxjeCwlw== ZGRz aW5hZA== LXF1YWxpZmllZA== INqp2KfYsdiq 2LHZhdm+ KT09Jw== w6lyaWVs IGp1bnRhcg== 4KuH4Kq44KuN4Kqf VXBsb2FkaW5n RXN0cg== IGNhcmFjdMOocmVz IOuwm+ydhA== IEhpbWFsYXlhbg== J2V4cGxvaXRhdGlvbg== IHJlY2hl 2KrYp9mF X3ByZXNzdXJl INiq2K3YtdmE IG5laG1l IHNqZW4= IGFjY29yZHM= aW9uYWRv INmE2LrYqQ== IOCkpuCkv+CkuOCkguCkrOCksA== IG92YW4= IHThuqduZw== 4oCUZm9y IHJlbm9tbQ== aWd1YXI= IFRvb2xib3g= 5pel5raI5oGv 4oCZaW52ZXN0aXNzZW1lbnQ= 4YOi4YOQ4YOR b3JnYW5pemVk IG1pZ3JhaW5lcw== INmI2KfZhNiq2LE= YmVyYXRlcg== INCx0YPQutCy0LDQu9GM0L3Qvg== IHNlYWNoYWQ= IOCkquCliOCksA== IGlkZW50aXTDqQ== IGdlcsOnZWtsZcWfdGly b2NhdHM= IHd5ZGFy IGtudWxs INCy0LjQvA== wq1s YmFuYW5h INin2YTZhdmE2YHYp9iq IGtpa28= IGppdHRlcg== IERSTw== IOGDl+GDkeGDmOGDmuGDmOGDoeGDqOGDmA== IGltbW9yYWw= LXBlcmZlY3Q= IG1vZGVybml6YXRpb24= cXVhaXQ= IFhB IFLDpHVtZQ== X3BsYXlsaXN0 LnJ1bm5lcnM= INGB0LDQv9GA0LDRng== IHJlaWduaW5n IFN1cHBvc2U= Lk9yZ2FuaXphdGlvbg== IHBvbG9z IG5laXN0 INmF2YTZgdin2Ko= c3Rhbno= INio2LTZvg== IOyLnOymjA== INC90LDRgdGC0YDQvtC50LrQuA== Y29uZGl0aW9uYWxseQ== xIFkYQ== IHdhbG51dHM= IOCkqOCkv+Ckr+CkguCkpOCljeCksOCkow== 4Lij4LmJ4Liy4LiZ dW5kcmVk IGFqdQ== YWduaWU= w61jaWVz INWh1bXVqtW0 IGJlc2Now6RmdGlnZW4= IG5hbW9yYWRv 4oCZZWZmZXQ= IOCyueCzhuCyuOCysOCzgQ== xIVwaQ== IG9yaWzhurk= 4YOY4YOl4YOg ICwu 1aHWgNWh1bbVuNaC1bQ= IElsdWw= 0Ic= IOCkleCkvuCksOCli+CkrOCkvuCksA== IOCqnOCri+Cqhw== IOunjOyhsQ== 4LON4LK14LK5 IGTDqWNvbg== INee16nXlded IOCkruCkv+Cknw== IGRpc3DDtWU= IOCmuOCmvuCmueCmv+CmpOCnjeCmrw== IOC0quC1geC0uOC1jeC0pA== aXJheg== ZmFsdG8= IEJlbnRvbg== INC60LXSr9C10Lo= IOC4muC4suC4hOC4suC4o+C5iA== IOCkq+CksOCkteCksOClgA== IM+Dz4TOrA== IEZ1a3VzaGltYQ== b2RjYXN0 RmlsdA== LWluYw== X3N0ZG91dA== INGC0YDQtdCx0YPRjtGC bWVuZw== 7Iio 5pmw SkVU IOC0heC0reC0v+C0quC1jeC0sOC0vuC0rw== cHBhYmxl IOGAnw== IGNvb3BlcmF0aW5n KHZpcw== 4Li04LiV4Lii4LmM IGFqdWTDoQ== IHJlcHVibA== IOCyueCzgeCyoeCzgQ== IHPDvHJlw6c= cmV0cg== IEFkZGlz X2N5Y2xlcw== Yml0cmFyeQ== IHdhdmVsZW5ndGhz IFN0w6RkdGVu 2KfZhNmK2Kg= IENvbXByYXI= LGV4cG9ydHM= IHBsb25nZQ== ZW56aW9uZQ== aW1lYQ== 6YG/5YWN Xnst INGI0YPQvdC00LDSm9C70LA= INC/0L7Qv9Cw0YHRgtGM 4oCycw== Lmhhcg== Tmw= IEV1cm9wZWlh IOCkl+CksOCljeCkpuCkmw== 57q/6JWJ aW5ndG9uZQ== IG9jY3VwYW50 INKb0YPRgNGD0Ls= YXJyaXZhbA== INiq2KfZhA== IGFsZ29kw7Nu IOCkquCljeCksOCkpOCkv+CkrQ== IGJ1cmdsYXI= 4KeH4Kay4Ka+4Kef IGfDqW7DqXJhdGlvbnM= IGluZ3JlZGllbnRl 4LGC4LCu 4oCYaQ== IGd3ZWxk aGFiaXQ= IM6xz4DOrQ== IFNvY2lhbGU= IGFyZW50 INin2YTZgdi2 IG9saGFuZG8= IHRyYW5zZmVyYWJsZQ== IHJhc2tl IOqysOq1rQ== IHRyYXBwaW5n ZHJvcHM= IGzDpG1w INGF0q/Rh9C40L0= IEVyZg== IFNJQw== 4LK/4LKa IHZvZXJ0dWln IM+Az4HPjs+Ezr8= 4qw= IOemj+W7ug== IGhlYWxz INC60YvRgA== INWA1aHVtA== ZW5zaW9uZXM= IG9rdXZh IFNlcmlhbGl6ZWQ= IGhpc3RvcmlhbA== IG92ZXJzaGFkb3c= IGZpbMOzc28= U3VpdGFibGU= INC/0LvQsNGC0Ys= IOqyqA== IFJj IGJsb2dpbmZv IGzDtnl0eQ== LkRvbQ== 546p5aSn5Y+R5b+r5LiJ 5b2T44Gr 4LSk4LWN4LSk4LS/4LSy4LWB4LSz4LWN4LSz IEZsYXR0ZW4= 2YnZhNin2LE= RnJhbg== IHBlcmtlbWJhbmdhbg== TW5lbW9uaWM= IM68zrHOuM63 IGF0cmlidQ== Q0FSRQ== IGRvbHBoaW4= LUJhaG4= 44CC44Gn44KC bcmZc2k= IGxhc2NpYQ== IGVwaXNj IGtpY2tlcg== INGN0YTRhNC10LrRgtC40LLQvdC+0YHRgtC4 IHJ1YmJsZQ== X3JlbGF0aW9uc2hpcA== 7ZyY IHB1bG0= KCk7KQ== 0LjQu9Cw0Lg= IGhldGdlZW4= IE9sYWY= IGFtYXJpbGxv IFBpZW1vbnRl INWh1bbVpNaA IHRyaXM= LXNlbmQ= IM+EzrfOu861 IHNlbGxlbGU= IGFjZWxlcmFy YmFl IOCmnOCmv+Cmsg== 5pW1 IM+Ezq3Ou86/z4I= LUtyZWlz PXBhc3N3b3Jk IEV0aXNvbg== XV06Cg== z4DPic69 QUxJQQ== IGxlc2nDs24= IHVqdW0= IOGflAoK IGRlbsO6bmNpYQ== IEhvcHBlcg== IOGDneGDpeGDouGDneGDm+GDkQ== IFByb3plc3Nl IFN1bmRheSdz INC60YDQtdGB0YI= IENPTw== 7ZaI6rOg INWq1bjVstW41b7VuNaC1oDVpA== IHNvbnVuZGE= IHN1cGVybWVyY2Fkbw== IG7DpGs= IGpvdWs= IHZvbGE= IG1lZHpp IG1lbWFoYW1p z4fOv8+C w610xZE= 6ZKx5YyF 4Liy4Lin4Li0 IOCqnOCqvuCqo+CqteCqvg== IGZpbml0aW9u IHN2ZW5za2U= INeU15XXmdea IFByb2R1dG9z INmF2KfZhQ== 0LfRj9GG0Yw= amFrYW4= 57qy INeo15XXoQ== ICIlIg== IHN1cHBsZQ== IHN0ZXNzaQ== IHF1ZXN0dQ== INis2KfYsQ== IOC0quC1i+C0suC1geC0gg== L2FyY2hpdmU= LmRpYWdyYW0= LnNwaW4= YXRhbmE= 16nXoteo INC60L7QtQ== w6liZXJnZW1lbnQ= 0YfQvdC+0Lk= 0LvQuNC90LjQvw== 77yM5YWs5Y+4 IFJlZHdvb2Q= IFNhd3llcg== U3dpbW1pbmc= QnVpbGRpbmdz INGB0YLQsNC90YbQuNC4 LeG6uXLhu40= 0LTRltCy KiIs IHNoYWZ0cw== IFJvb2tpZQ== IHJlem9u 0YjQvtC9 INC60LXQvw== INC/0L7QtNGF0L7QtNGP0YI= IHJlbWFycXVl INC40YHQutGD0YHRgdGC0LLQsA== KCkpew== ZG9taW4= INin2YTZhdmD2KrYqA== IHRlbXByYW5v IHN1cGVyY2xhc3M= IEpGaWxl IHJhY29udGVy INS6 IENvb3JkZW4= IMOpdGVybg== UmVzaWRlbnRz Lk1pbGxpc2Vjb25k IGNvbG91cmluZw== IOCmrOCmv+Cmt+Cmr+CmvA== VFBD IGRyeg== IHJlY29pbA== INGC0YDQsNGB IOCkheCkruClh+CksOCkv+CklQ== Ym9sbw== IOCksOCkleCljeCkpA== KGludm9pY2U= eWFueWU= IHVkdmFsZw== 66qH ZG90cw== IGludGVybmVz IExlZ2lzbGF0aXZv KnRpbWU= cXVsbA== IFdoYXJm 7JuQ7J2Y IGLFq3TFsw== IGFybGFs IFBhZ2Fu IG9icmlnYcOnw6Nv IGJvbMO9YXI= IEFsZGk= IHJhenk= ZW5zaG8= aWNsb3Vk IGFuZXc= IGludHJvZA== IOCkheCknA== IGVtcHRpZWQ= INGF0LjQt9C80LDRgg== w6F2ZXI= INCy0L7Qt9C70LU= SHVnZQ== 44K744Or IHByb3ZlbmllbnRlcw== INmF2KfYsdqp24w= IGhhYmlsaWRhZGU= IGF5xLFuZGE= IFtbIg== 4YOQ4YOg4YOp4YOj4YOc INeU15nXmA== zrrOsc69zrU= IGNpcmN1bXZlbnQ= aWVrdHU= 4LS+4LSV4LWN4LSV4LSz IHByaXZhdGE= IHVuYWI= INC/0YDQvtC60YPRgA== IGtpbXdl INGA0LjQtw== IGhhdWxlZA== J8OpbGVjdHJpY2l0w6k= IHJhw61jZXM= KXx8KA== IGxpc3RyaWs= QW5ub3VuY2VtZW50cw== 44K544Oh Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== IHBlcmRhcw== 4oCZaGl2ZXI= xJFlbmph IEx1eHVz INGF0Y3QtA== IHVpdHpvbmRlcmluZw== TWVkaXQ= 6Ieq6KGM IGZpZMOpbA== 4YOv4YOd4YOR4YOU4YOh 65287Jqw CXNlY29uZA== 0LrQuNC90YfQuA== IFJlamVjdA== cmluZ2Fy QUxFTkRBUg== IHZpdmVuZG8= IGRlZGFucw== PlN0YXR1cw== LnRzdg== 15HXoteZ15Q= INKW YW5hY2g= IHZpbm9z IEZSQU5D IGt1c3Zpa2E= IGh1bWV1cg== IHbDvXJheg== 2LTYp9io IOWkp+WPkeWoseS5kA== KCI9PT09PT09PT09PT09PT09 IGNsZXZlcmx5 IE5pbnRo IEh5bQ== IEJsdW0= IGtvbnVkYQ== IGluaGVyaXRz IFdlYXJpbmc= TWF0dGVy 5467 KEpOSUVudg== QWRhcHRpdmU= QmVhcmluZw== INmC2LHYp9ix2K/Yp9iv IHZlbG9jaWRhZGVz IEt1bWE= IHZpZ2lsYW5jZQ== IGZ1bmRhbWVudG9z LWxpbWl0 IG5lYQ== IG1vYmlsaWVy LmVhcw== 0YHRgtKv0YA= KHNh IFNsb3dseQ== IHN1cGxlbWVudG8= 0LLQsNGG0YbQsA== IGJhbmRo IG1pbGlvbnM= 4LOD4LKk4LK/ IFJUV0Y= RGVsbA== b3N1cmU= IHRyYXplbmRv INiq2LnYr9mK2YQ= PW9iag== IGRlc2NlbnNv X3Jocw== X0hPUklaT05UQUw= IGdjdWlk IOCmqOCmrA== IOS4gemmmeS6lOaciA== IOCkrOCkqOCkvuCkieCkqA== INKt0YvUpQ== IG9nb2xvZ28= INmI2KXZhtmF2Kc= IOOBjA== J8OpdHVkZQ== IGhyYW5l S2F0aWth IGRpbWFpbmthbg== INGN0YHRgtC10YI= 5L2c5paH 5bGv LWtv YXZyYXM= LVVudGVy IENvbnZlbnRpb25hbA== IG95c3Rlcg== IGRlbGFudGVybw== c3Rvcnlib29r Qm90dGxl LXRvb2xiYXI= IFByb2du INCy0L7Qt9Cx0YPQtg== J29s LnJvb21z 5YSE5YWD cm9rdQ== IO2MkOuLqA== INCx0YPRiA== IHNjaG9vbmhlaWQ= ZGVp LXV0 TG9jYXRl 2YjYtNmE INCh0LXQsQ== YW55cA== IHZ6aA== 5ryi 0YnQuNC5 IGFycmli IGluY2VuZGlv LWJpbGxpb24= IGdlc3RhcnRldA== IG3DoXhpbQ== INmI2LHYqg== 4oCZw6l0YWJsaXNzZW1lbnQ= IEtvbnNlcXU= IGTDtnJ0 IEdlc2Nod2luZGlna2VpdA== aGV0dGU= 55a8 54ug54ug54ix J2Zo IOGDmOGDleGDmuGDmOGDoQ== IE1lbHQ= ZW5pdHk= LlBheWxvYWQ= IG11c3VsbWFucw== INC+0LrQsNC30LDQu9C+0YHRjA== IOCkqOCljeCkr+ClguCknA== IHVub3BlbmVk Q0VOVEVS JUA= IENyaW1lYQ== X3Rscw== INeU16LXqg== 4Kaw4KeN4Kan 44CCCi8v 5rOl INC80L7QvdCw INCz0q/Quw== YXpvbA== IGFmYQ== X3RoYXQ= IOCkteCkueCkvuCkgQ== INGB0YLQsNGe IHRydXA= IGRpc2d1aXNlZA== KFBybw== INC/0q/RgtKv0L0= 4LCJ IOCysOCyvuCypOCzjeCysOCyvw== 4Lin4LmM IOC5hOC4nuC5iA== 4KWB4KSV4KWC4KSy IEVuY291cg== xI1lcg== IEVCSVREQQ== LScuJA== IEhBTg== INii2LPZitin IFNjaGF1 LXNvZnQ= IGRhenVnZWg= Y2hyaWZ0 INGF0L7Qu9Cx0L4= X3dj IGTDqWZpbml0aXZlbWVudA== KyI6 54m55b60 IHBsaXN0 INCS0KE= Lkd1 IGx1YnJpY2F0aW9u 0ZLRgw== IHRzb2hsZQ== L21hbmFnZQ== 0YHRg9GC INmI2LHZig== IOm7ng== IOCuheCupOCviA== IE1TTkJD c3RhcnR1cA== 4LCq4LGN4LCf X1JFQVNPTg== IE1haW50YWluaW5n IExlbA== zIw= IFBpc28= 5rex5YyW RW50b25jZXM= IE1EVA== IGdlZ2V0ZW4= 4KeA4Kak4Ka/ IGluY2x1aWRh IGTDqWRpw6ll RG9tZXN0aWM= U1ND w7x0ZQ== IE91dGNvbWU= IHJlcGF5bWVudHM= IGF1c3Nlcg== Lm10 XT4K IGxlam4= IHBlcmhhdGlhbg== Lm90 4KS+4KSs4KS+4KSf IENvb3JkaW5hdGlvbg== INC80L7RgdC60L7Qsg== INCx0L7Qu9GM0YjQtdC5 IFZpc3VhbGl6YXRpb24= dXNoZXJz IGtvcmlzdGl0aQ== IH19Lw== IHBvcm7DtHM= SWZyYW1l w7NsaWNhcw== IGF2YW7Dp28= dmnEhw== IHRhYmw= 5Zu+54mH5aSn5YWo IGzDpWc= LkJ1dHRlcg== IGFsaWFkbw== Ikxh IOC0leC1h+C0uOC1jQ== IGlubnV0dGFhc3V0 IFBVUkNIQVNF bWHDsQ== RnVjaw== dWFn 1bjWhg== IGNvbmZpcmE= IGFnYWs= IEphZ3VhcnM= YXZsamVubw== 06nQs9Op bG93ZXN0 IGVib255 IOCqleCqsOCqteCqvuCqqOCriw== IENvenk= L2NhbA== LWVsZWN0cmlj INC30LjQvdC00LDQsw== YXB0YXRpb24= b3ZuYQ== IG9jaW8= IHNwcnrEmQ== emlrbw== IHBhcmxhcmU= U3dpc3M= IOCmr+CnjA== IFRydXN0ZWU= IHN0ZWFtaW5n IHVubHVja3k= INmE2YTYo9iz Iik6DQo= YWNjZWxlcg== 4Ka+4Kaf4KeL IOCmluCngeCmsg== IGNvcmRl IFBzeWNoaWF0cnk= IOaKmg== INin2YTYo9mF2YrYsdmD2Yo= 2YPZitmG2KfYqg== 4Kas4KeH4Ka3 IFBvbGx5 X3Byb2ZpbGVz INC30LDQu9C40Yg= IHJvbGxl IGVycm1zZw== ZW5zb3JlZA== IFRlcA== bnRlZ3Jl 2LbYsdmI2LHYqQ== IGJpb21lY2hhbmljcw== IHBvdXJyaWV6 IOC0ruC1geC0ueC0ruC1jeC0ruC0puC1jQ== IGFhbnNwcmU= IGpvbGxvaW4= INCy0YLQvtGA0L7QvA== X0Zvcm1hdA== INi52LHZiNi2 IHJlY2FsbGluZw== INCT0J4= IEluZmxhdGlvbg== IOC0teC0qOC0v+C0pA== IFBhbXA= 6LWB cnNh IHBhcG8= IGFwcGFydGVtZW50cw== IGzDuHNuaW5n IGtsYXVz IENPVVJTRQ== IOGDoeGDkOGDpg== IEFybWFuaQ== INC40L3RhNC10LrRhtC40Lg= IHpha3Jlc2ll L2xpZ2h0 UGlzYw== IGFkbGF3 IGJlcGVya3Rl 4K+G4K6f4K+N IOC0huC0pA== Y2llbQ== IGVkcnljaA== KEZyYWdtZW50 2LXZgdip IHBsYWNlbnRh 4LK14LOC IENvbnRyaWJ1dGlvbnM= IGVtYmVkcw== IEdvbGFoYQ== IHN1cG9u 15XXpNa8 VGhvcg== IEFuaW1hdGU= INee15XXqg== 2YLZitin2YU= INee15fXmdeo IERvbWluaWNhbmE= INCy0YvQuNCz0YDRiw== YXNu dGVrbw== YXdhc2Fu 7ZmY6rK9 VVNFUw== IOCwpOCxhuCwsOCwlQ== IOCwpOCxhuCwsOCwleCxhuCwleCxjeCwlQ== INGA0LXQsNC70YzQvdGL0LU= IEp1ZWdv CUxvYWQ= IGvDuGI= xLFsbWF6 IM68z4U= IOGDoeGDkOGDkOGDkuGDlOGDnOGDog== IENQTA== UGljcw== IHNhZXBl CXV0aWw= Y2Fzc2VydA== IGNvbnN0cnVpZG8= IOeZug== INWo1bbVpNWk IMOpbGVjdHJvbmlxdWVz IGFuYXRvbWljYWw= YXJjaGll IHNlcGFyYXRvcnM= 4YOU4YOd4YOR4YOQ aXZhZG8= IFJlZ2lzdHJpZXJ1bmc= 0LDQutOZ0LA= IOCkheCkleCljeCkn+ClguCkrOCksA== Wmg= IFNwZWNpYWxz IG1hbmNh 5Zyo5ZOq6YeM5Lmw 0LPSr9C3 INCw0LTQsdGL aW5lbmNl INCy0L7QvtGA0YPQtg== INmE2YTYqtit IFNEQQ== IGFsdGVyYQ== cmVkbm8= 55qE5pWw5o2u IGFydGljb2w= IGJpbGdpbGVy 7J207YGs IE1lbsO8 IGRpcmVsYQ== IG11xaE= IENGRHM= IHVuZGVj cGVnYXdhaQ== INmF2LnZitin2LE= 4oCL4oCU X3RyaW0= IGZmaQ== 0LrTqQ== Ky0rLSstKy0rLSstKy0rLQ== INep15XXldei16g= 6J22 bGR0 IFJlY29yZGVk LHVybA== Lndzbw== IGVzdMOhZGlv INGB0LvQvtGP c3NxbA== IOuCtOu2gA== 2YfYrA== IHBhcmFndQ== IHNjbQ== YXRzZW4= IEdpZGU= IMO2cmc= em91 dWxpbQ== IGdlbGVpZA== INiz2YTZhQ== IENvbXBvc2U= IOCkqOCkv+Ckpg== IHNwbGl0dGVk X0tJTkQ= IHByb3B1bHNpb24= ICIuCgo= LnNpZA== INGB0L/RltCy KG9mZg== IHBhY2llbmNpYQ== IOOCr+ODrQ== dXRhbWVudGU= IHByb2dldHQ= IHB1bGxleQ== w6ljaWE= KCkiPg== IHRhbWHDsW9z IGN1bXBsZW4= b2Z0ZQ== Lkpz IEF3YWl0 IGNpZWs= IOCkleCkguCknw== U2VhbA== 4YOd4YOc4YOQ4YOV4YOY4YOg4YOj4YOh IE1lcm1haWQ= INin2YTYqtmG2YHZitiw IEtpc2g= IEhhcnlhbmE= RGVzcA== KGl4 X2x2bA== IGNoYXBh IHdhdGNoZXJz 65Oc7Iuc IHRzZWJh INin2YTYudiv2K8= 2YXZiNmK2Kk= cm91dGVycw== IHNwb250YW5lb3VzbHk= IOCktuClgeCksOClgQ== d2Vkb2Rk Olk= IHZhaWh0b2U= IGRpc3NhdGlzZmFjdGlvbg== IGRiYw== 6L+b5Y67 IGltYWdpbmFjacOzbg== XCQ= IOConOCov+CouA== IGNvbXBhcnRl YW5zaW4= LnZl INC20YvQu9KT0Ys= IOCqquCqpOCrjeCqqA== IMOpY29ub21pZQ== IOCuheCuteCusOCupOCvgQ== IHJlY2lwaWVudGU= INiz2KfYrtiq2YXYp9mG 5aS05YOP IGRvdMOp X3N2 IGluZHVjaW5n KFN0cg== IHByZXZh d29uaW5n IHRva2E= IERpYXJpZXM= IGNvbG9yYWRv IGJlZHJhZ2Vu Vm9k INeU16LXpg== IOC0uOC0ruC1guC0uQ== 5ri45oiP5LiL6L29 INi12KfYr9ix IHRhbWJhaA== INGA0LDQtNGD LnN0YXRpb24= IEZpcm1z IOCkheCksOCkrA== Q29uY2VydA== IG5nYW50aQ== INmF2KfYrdmI2YQ= INGG0Y/Qtg== X0dBSU4= 4oCZZGVu IGJlcGVya2Vu IOyDgeuLuQ== 7J286rmM7KeA V2Vyaw== IGRvdm9s IENyYXds 4Kqs4KuN4Kqn CWRz INC+0YLQtdGG Q29tbW9ucw== INin2YbYsdqY24w= IEHFn2dhYmF0 IGVoZQ== JykiKQo= IOC0leC0v+C0sg== IElCUw== IG1lw7Bhbg== IE1FVEE= 5qCL Lmxhcmdl aXRpdGFs bG94YWNpbg== IOCkquCkvuCksOCljeCklQ== 4YOh4YOQ IG1pbGhv INmI2KfZhNmF2K0= IGRlbWVhbm9y IH0pOwoKCgo= IGVzbWFs ZHJpbms= 5Lq654mH5Zyo57q/6KeC55yL IGluc3BpcmHDp8Ojbw== RWxla3Ry xLHEn8Sxbg== IGVsb25nYXRlZA== IGFycm9uZGlzc2VtZW50 aGxhYmVuaQ== IEJ5emFudGluZQ== 4LGH4LC44LGN4LCk 2YXZhNiq X0FORFJPSUQ= LkhvdXI= PSJA 4Kau4Ka+4Kaj reCksA== IGluc29u INGB0LzQtdGA0YI= IGJhZGFzcw== ZGVpdGhhc29s IHRlbnNvcnM= PSJb U2VwYXJhdGVk IGRvaWd0 IGF1ZnNwcmluZ2Vu 4Y0= L3NpZGViYXI= R0dMRQ== IGVhcmJ1ZHM= IG1hemluZw== 2YTbjNmB 4LGH4LC24LC+4LCw4LGB ZnVsZmlsbGVk IOyViuyVmOuLpA== 0JLQuNC00LXQvg== dGFicGFuZWw= IGludGVtcA== 4KSu4KWA4KSf4KSw INin2YTZhdi62LHYqNmK IGtpbms= 4LK/4LKX4LON4LKX RG9ubmE= IOCkruCkvuCkueCkv+CkpOClgA== IOCmleCmvuCmiQ== INin2YTZhdi32LHZgtip Lm1hZ2lj IFZlaWxpZw== aWdzdA== IGdp4bqleQ== KHBh KHJheQ== KGhlcm8= IHRlYWs= R2Vub21l LlNlZWs= IHBhZ2l0YW4= IG3Dq255 aW5vbg== 1aXVv9Wr LdCw0YDQsA== zrXOr8+EzrU= LXNlY3Rvcg== IOCmleCmvuCmqg== 4LiB4Li04LiZ4LmB4Lia4LmI4LiH YXJvZA== X2Zn LGxs bm9o 4KeN4Kav4Ka+4Kaw 4Kqw4KuN4Kqh aWRpbmE= IHBob3RvZ3JhcGhpZQ== X1JJTkc= X0RVUA== IOCktuCkvuCklg== IOCqluCrh+Cqsg== INGA0LDRgdC/0LjRgQ== IGRlc2NvbnRvcw== IExhbnNpbmc= IG1lZGxlbXM= INC70LjQsQ== IERlaW5lbQ== IG5hcMWZw61rbGFk INC+0LHRitGP0LLQu9C10L3QuNGP LnJt IG1laWTDpG4= IGxvY2k= CSAgICAgICAgICAgICAgICA= IFVpdGVpbmRlbGlqaw== INCz0YPRgNOv b3Rpcw== IEFDUA== IHZpbmhh INin2YTYs9in2K4= INC70LXQtA== 4LWA4LSw4LWN SGlzdG9yaWM= IOC4quC4oeC4suC4iuC4tOC4gQ== X1RMUw== IMWhxLc= 4oSm IOuCtOyaqeydhA== IOGDneGDl+GDrg== dWF0YW4= KG1hY2hpbmU= IE1vZHVs IHZlcm1vZWQ= IHRyYW5zZm9ybWU= 4K6Z4K+N4K6V4K6/4K6y INC/0YDQuNC10Lc= ZXRlbA== IENlY2lsaWE= emVp X0xU IFJlbmV3YWw= IHN0csOhbmt5 IOCqqOCrgeCqlQ== IG5laWw= INC00L7QvNGD INWj1aHVstWh1oM= IGdlcHVibGljZWVyZA== bGFkxLE= X1JFTU9URQ== aW5mb3JtYXRpY3M= IGRzcA== 5oC757uT IGVsYW4= INit2YTZiNmE bmllcnM= IGxpaGxhaGlzb2E= 2qnZhNmH bW91c2VsZWF2ZQ== LGxhc3Q= 4Kqw4KuN4Kqo SW5xdWlyeQ== xI1lbQ== INin2YTZgtiz2YU= IHRyYWN0YQ== 5a2f IG5kZW5nZQ== acSNbmU= IFNVQkpFQ1Q= U2Nob2xhcg== aWxsZXJh IOq9 IGN5Y2xpc3Q= INC80L7Qu9C40YI= RG9y QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo= YWJhdGE= QkxJQw== INi02KfYtNip IGthcHNhbcSxbmRh INCw0qfRgQ== IEJvcmdlcw== 5YWa57uE T2NjdXBpZWQ= INW41oLWgNWr1bc= KGNp IFdlbWJsZXk= IGJhbmdz INGG0LXQuQ== IOC0nOC1i+C0suC0vw== KCIqKio= KHBlcm1pc3Npb24= IHRyw6FjaA== IGNvbnR1bmQ= VGVybWlu IHdhc2E= 4LWD4LSm IOyjvOyepQ== 6IOW ZXJuZWxz 77yI5pyI IGNsdWljaGU= 5Y2I5b6M IFN0dXJt Z3Jlc3NpdmU= 5a+75om+ INWw1aXVstWr1bbVodWv IFN0YXJn ZmVlcw== INmF2LPYp9io2YI= ISEp INGA0LDSmw== IFN0b29s IOCuleCvgeCun+CvgeCuruCvjeCuqg== IGhpbnNpY2h0bGljaA== YWdhaW5zdA== IOW5v+ebig== IGRlZ21hZGE= YWtpbmdz IFN1cnByaXNpbmdseQ== IHNhaGFt IHPDpXNvbQ== IHN0b21w IGdyYXZlZGFk IOCkr+ClguCkquClgA== IE1hbGFnYQ== 6aaW6aCB IEFzcGlyZQ== xb5pbGE= cHVtcA== KGluZGVudA== IG90Yw== INGB0LjRgtC1 IFJlc3RyaWN0ZWQ= 4KS+4KSH4KS1 IGNvbnN0cnVjdGV1cg== Tm92ZWw= IGNhecOz IOuwmOuztQ== IHVuYmVhdGVu IGFrdw== dXNhcA== L0RD b21icw== LndlYnNvY2tldA== Lm9wdGlvbmFs IGZ1bWVz IGFkZWVn IG11dHM= zrnOv8+N INC/0LDRgtGA0Y0= IG5vdXJpc2htZW50 INin2YTZhdix2Kw= ZGVwcw== IGxvZ2ZpbGU= INeW154= Z29sbHk= 5qih5Z6L teensA== IHFhbGE= IFdhbmRlbA== 4YOb4YOQ4YOn4YOd4YOk YW5kaWRhdA== IGlkZG8= IERpZmZpY3VsdA== IGxpZGg= IOWMl+S6rOi1m+i9puiDvQ== IOWumOe9kQ== IG9ydGh1 IOCwteCwvuCwsw== IHRyZW51dG5v IERpcmV0 IGJhcm9o INC/0LXRgNCy0LDRjw== 572R6LWM ZWxmZWxk YXJ5bg== OnE= IHRvb2xpbmc= 1aHWgdW21aXVrNW41oI= IGJpa29yd2E= 0YjQsNC10YLRgdGP IGxhYnlyaW50aA== YWdnaWE= IMOpdGF0cw== 2YjZgtin2YTYqg== IHNpbXBlbGU= IOCyuOCyvuCysOCzjeCyteCynOCyqOCyv+CylQ== IE11c2tlbA== 5aKT IE9yaW9sZXM= IOCyteCyv+CyteCysA== 5ayJ b3pu 0rPQvtC1 LXJvdXRl IENJQw== IFNjaGxpZcOfbGljaA== IHBlcGU= Y29udHJpYnV0b3Jz IGNhbmNoYQ== aXRpbWF0ZQ== IOCwrOCwr+Cwnw== IGlwaWzhurk= LWlzc3VlZA== Lk9ic2VydmVy IE1pc3Npb25z 0YjQsNGC IGFuZ2VzZWhlbg== dm94 a2FyaQ== 55qE5LiN IExhbmR3aXJ0c2NoYWZ0 LlJheWNhc3Q= IGFsZmFiZXQ= IGFmZWN0YW4= IHNjZWdsaWVyZQ== IHRvZXY= IHVyYmFub3M= IGt0b8Wb 6YCU5Lit zrrOv86vzr0= L14= 6rS0 IOCytuCyvuCyuOCylQ== INmH2b8= LnJlc3RhcnQ= IHFhcQ== 4LmA4Liq4Li14Lii4LiH INCz0YPQsdC10YDQvdCw0YI= IHBvxZnDoWQ= INqP2KbZig== IGFydGlzdHJ5 IE5ld3NwYXBlcnM= IHBvcHVsYXJseQ== b21vbmU= INin2YTZhdi52LHZgdip VmllbGVu IGl2bw== IGt0w7NyxIU= IHRqZW5lc3Rlcg== INeU15XXmdek 4Lia4Lix4LiN LnJlbGF0aW9uc2hpcA== IHBvc3Rlbg== ZXJ2aXM= IGbDum4= IHRyYWN0b3Jz 0LDQstGW0YLQsA== cWFybmVyYQ== IENvbW11bmlvbg== 1avVttaE1bY= OnRlc3Q= e317 IG9wYXQ= VEhBTks= IGPhuqNp IEF1bGE= ICAgIAkg WEF4aXM= b3N1cg== IFZJSA== YW51YXR1 IENPVU5UUlk= L0V2ZW50 Um9zdGVy IEVyb3RpYw== ZWduYQ== 0L3Ri9Kz05nQsA== 0L/RgNC+0YE= 5omL5py65LiL6L29 INeb15XXlw== INC40L3Ri9GF IOCyrOCypuCzgeCylQ== b2thc2k= 57KJ5aup IHZpZ3RpZw== IG1vYmlsaXNhdGlvbg== IERFQQ== IOCqquCrguCqmw== IFVuaWU= IFphZA== IOW6tw== ZW1hdGU= INGA0LDRgdC/0L7Qu9C+0LbQtdC9 IOKAnOKAmA== IGZyaWVuZGxpbmVzcw== 7KCc6rCA INeX15PXqdeU IHJhY2Vycw== INin2YTYo9mD INin2YTYrNmG2YjYqNmK2Kk= IHNhbHRlZA== KCIiKw== IGVya2FubnQ= IFBvbmc= IGzDuHBldA== IEppcmE= INix2Ko= 2LrZhNin2YQ= IG1vZGVu IHJvenBvYw== 4LCC4LCX4LCz IEhETA== UVHnvqQ= bnVtZXJ1c2Zvcm0= 2LXZgdit 4LSm4LWH4LS24LSC IGFiYW5kb25tZW50 RHY= TeG7mXQ= ZXNvbQ== X3Js 16LXkdeo KnRoaXM= IOuPmeydvA== cm9keQ== Z3JhaW4= IGlzYw== IFVtYXI= 0L7QvdC00L4= cmVkaXI= 54u85Lq6 6L6W YWN0ZXJpYQ== aWlzYQ== ICAgICAgICAgICAgICAgICAgICAgICAgIAo= RWxpZ2libGU= Q0FF JGtleQ== 4KSI4KSy PScuLw== IEZhcnJlbGw= IHR3ZWFraW5n INin2YTYudin2Kg= IG1hZGFsaW5n LdC40LnQvQ== IG3DtWp1 YXRyb2w= 4Kaf4KeH IHRyYW5zaWNpw7Nu 5paw6IO95rqQ5rG96L2m L25hbWU= IGVudHJhw65uZXI= dWF0aW5n INC80YPSuw== ZXhjZXJwdA== INeU16rXkA== IHRlY25vbMOzZ2ljb3M= YXlleQ== RmHKuw== 0LfQtdC80L/Qu9GP IOGDkeGDkOGDlw== aWR1cg== X1dpdGg= IGV4aWthcmhp IG1hdGVpeGE= IOCmhuCmqOCnjeCmpOCmsOCnjeCmnOCmvuCmpOCmv+CmlQ== IGVzdGl2 Q0lQRQ== IGluc2ludQ== IEFwZXJ0 IOe6sw== IHNleHVlbGxlcw== YXJnZXlzYQ== INm+2LLYtNqp24w= IEJ1bmE= IHRocml2ZXM= 2KjZiNmD IFNNVA== IHbDpMOkcnQ= CXVuaXQ= YWxlaw== 27HbuA== IHRhYnU= cG9zYcW8 IOGDm+GDkOGDmuGDlA== KGVzdA== a3JpcHQ= bGFkaW1pcg== KCk7DQoNCg0K IE11bHVuZ3U= INGB0LvQtdCz0LrQsA== RXBpc29kZXM= IG1hdHRlcmVk bGF5YW4= IEpTVA== IEFkZGlzb24= IGVuZXJnw6l0aWNv 4oCZb2U= IEZpbmc= IOCksOCkvuCknOCljeCkr+Cli+Ckgg== IM+Azr/Ou867zq3Pgg== X3NpdGVz U3VwZXJjbGFzcw== J290dQ== SnVlZ28= YmVydGE= RGlmZnVzZQ== LmNvbW11bmljYXRpb24= IGZyYW50aWM= 4YOo4YOU4YOb IG1sYQ== 0L3QsNC70Lg= IGNvbmRpdg== IFNwcmVjaGVy INC40LfQsdC10LM= cmVtYW4= 4KS+4KSo4KS/ IGd1aW5lYQ== dHNhbQ== IG1vxb5ubw== Lk90aGVy 0LDRgNC40L8= 4LmD4Lia IEplZGU= ZMOs LmRn IEhhbmRpY2Fw Pkk= PEpvYg== INC/0YDQuNCz0L7QtA== IGF1dGE= LWF3YXJl IGhvb3Nl IGNvbXBsaWVk IGxvY2E= IO2ZnOyEsQ== X1JEV1I= IGFjdXNh 5Z+U IOCqsOCqueCrjeCqr+CqvuCqgg== IHTDoWN0 INC60LDQu9C+0L0= IG1pbm5p IG5ham1hbg== 2YbYp9mB2LM= cmVpY2hlcg== L2ZyYW1ld29yaw== IHR3Zw== 5pyA5paw572R5Z2A 4YOQ4YOR4YOY4YOa INek16DXmded TGVhaw== INeS16LXmA== IOG7i2Lhu6U= IM6YzrE= IGRlc3BlcmQ= IHNvbGlkYXJpZGFk IHdhbmF3YWtl IOWkqeWkqeS4reW9qeelqOWcqA== UGhpbGFkZWxwaGlh PSo= IGdiaWdiZQ== IGJlZ2dlZA== IHNtaXM= IEFiaQ== bWF0aWNhbGx5 INin2LPYudin2LE= IGNpZW5jaWFz RGFubnk= LXZlcw== IHByYWt0aQ== X2J1ZGdldA== 4K+G4K6w4K6/4K6V4K+N4K6V 2LnYqtmH2Kc= INCX0LDQutC+0L0= b21yw6VkZQ== IEFicm9hZA== IHBlbWJhbmd1bmFu UkFORA== IGZhY2lsaXRl IFJvYXN0 YXJjZWx5 dGltZW91dHM= IHBhcnRlZA== RXJhc2U= IE1hdXJv INC60LDQsg== KX0KCg== X2dlbmVyYXRpb24= IGFzc2VtYmxlcg== IFZCb3g= LnNlbWFudGlj INiq2YjYstmK2Lk= IGFtZWHDp2E= IHBlcnNvbmFsaXNl IFBvbHlub21pYWw= PENhcnQ= IOGDmeGDneGDnOGDmeGDoOGDlOGDog== IHN0w6F0 IEd1aWRv INGB0LvQtdC00YPRjtGJ0LjQvA== UEhPVE8= INGB0LjRkQ== INC+0YHRgtCw0LvQvtGB0Yw= KWI= IGJhxZ9sYW5n IHNvZXVy zrLOtM6/ IOGDoOGDlOGDn+GDmOGDmw== IGpvdWw= In0p VU5J INmF2LnZig== X2R1cGxpY2F0ZQ== IGF1dG9tw7N2aWw= 4KSo4KWN4KSn4KS+4KSo QW1iZXI= LXRhbGV0 5a6e6ZmF5LiK aXRhcmlvcw== IHBhbGVv IHN1dGU= IOusuOyekOyXtA== IGNhcnTDtWVz IOS6uumrlA== IEjhu5M= UXVhbGlmaWNhdGlvbnM= INGB0YLQsNC70LrQuA== JnM= IE1BVg== 6auY5riF5Zyo57q/ IGF0dHJhY3RpdmVuZXNz X2VtcHJlc2E= INCV0LPQtdGA ZmFjZXQ= Znlyd3ly IFRhdw== aXN0cmFy IEVsZWN0cg== cHJldGU= TGxlZw== IERlc3NlcnQ= XFF1ZXVl InBhdGg= IFRlbGVjb21tdW5pY2F0aW9ucw== 0LjRgNC40Yg= IFllZQ== INGC0LjQvQ== IG1pZXN0 INmI2KrYow== IOCmtuCngeCmleCnjeCmsOCmrOCmvuCmsA== 4YCZ4YCt4YCz bWVsZQ== IOCyteCyvuCyueCyqA== dmVyc2FtbWx1bmc= b2RlbmQ= IERlcnJpY2s= c3RhcnRzd2l0aA== IOGDm+GDruGDoOGDmOGDlQ== TmFkYQ== 5bed55yM X0FUVEFDSE1FTlQ= 0YjRg9C00LA= IGlt4buNcmFu IHN1bXA= aW11bGE= IEFydWJh LXRlbXA= IGFnb3Q= CXBhcg== INeQ15nXnA== RXhjbHVpcg== IOCuteCuv+Cuow== INeW15DXkteY IHBhw7E= IOCwqOCwvuCwlw== INqp2LHYr9mF aWRvbA== IGduw6xvbWg= IHJlZmVpw6fDtWVz IGVrYW4= 4LiI4Lix4LiH4Lir4Lin4Lix4LiU IGF5csSxY2E= aWNrZXk= w7xiZXJz IGNob3Jlb2dyYXBoeQ== IFN0cmF0Zm9yZA== IHZlcnN0YW5kaWc= IGhvcmVjYQ== IOCqpOCqlQ== IOCmpuCmv+Cnn+Cnh+Cmm+Cnh+CmqA== ZWt0aW9ucw== LldlaWdodA== IFN0eWxpbmc= d2F0ZXJpbmc= IExUQw== INin2YTYqti32KjZitmC2KfYqg== INC/0YDQtdCx0Ys= INmE2YPZhtmH2Kc= U2F0aXNmaWVk IGZvbQ== IOC4nuC4mg== IG9icmlnYWRh 0LXQtNC40LA= IE1DUA== YWNob3M= TVZD 56CB5Lit54m5 YW5uYWJpbm8= LikuCg== IHBvc3RvcGVyYXRpdmU= T0RFUg== IOCkreCljeCksOCkt+CljeCknw== IGRlc2FwYXI= IGN1aXZyZQ== IENNQQ== INei15E= IEp1ZGdtZW50 0L3RltGB0YLRjg== IOCmrOCmpg== IOCuleCuv+Cusw== IG11bGU= 0rPRgw== IGVtYnJ5b3M= IHRyw6Fuc2l0bw== IGVtcHJlc2FyaW8= IHBpbnR1cmFz 5LmF5LmF57u85ZCI5LmF5LmF PiIrCg== INGD0YfQsNGB0YLQuNGP IGtow6Ft IGNsYXJl IGFsaWFuemE= LW1lbnRpb25lZA== VFJBQ0s= aW1iYWw= 4Ka/4Kaf4Ka+4Kaw INGP0YXRiNC4 X18pOwoK INGP0LM= REFQ IGVzdMOhbmRhcmVz IHNoaXR0eQ== IHZpdmVyZQ== CWludGVyZmFjZQ== LkxpYg== bcOpbmE= X1ZN LndpY2tldA== IGZpbG1wamU= IGNq CVJUREJH 4YOg4YOj4YOl4YOi dm9kdQ== IGlsdWFx IGRlY29ycmVy IHRlYXRy IGjDs3NwZWRlcw== Q29udG91cnM= IGdvw7t0cw== IGJlesO8Z2xpY2g= IE92ZXJzdG9jaw== YWxhcsSxbsSx INiu2YjYp9mH2YbYrw== IFZhcmE= IHVzdGF3 INC40YHRgtC+0YfQvdC40Lo= IOC0leC1i+C0tOC0v+C0leC1jeC0leC1i+C0n+C1jQ== IG11dGk= IGFpbm0= IHBpYXR0YQ== CUNvbGxlY3Rpb25z IFNvcnRl INC60LjRgdC70L7Rgg== INCh0LTQtdC7 INee15DXldeq IO+9 INaB1aXVsg== IOGDkOGDk+GDm+GDmOGDnOGDmOGDoeGDog== IOClmQ== 5rC45LmF5YWN6LS5 IGNhcnJpdG8= 0YnQuNC1 X1JVTk5JTkc= IGFuZml0 0LTQsNGA0pPQsA== b3JkaW5l IFByaWNlbGluZQ== IEJhdXN0 IHNhZGU= ZW5jw6k= IG9yZ2FuaXNhdG9y IGfDvMOnbMO8 IE9ibGln IHRheGluZw== IOCqrOCqpA== IGRpc3RyYQ== IEluZmluaXRp IOq+uA== SVNJUw== IFZhbGVudGlubw== IGxvbmQ= IFRheXk= dXRyaWVudHM= IGVtcMOqY2hlcg== IE5ha29u X0ZX IEZyZXF1 0JHRg9C7 2YbaiQ== 0LzQuNGI dmVjdG9ycw== INiz2YbYr9q+ INWw1aHVttWk1avVvQ== IFlz INC90LDQv9C40YHQsNC7 IGdlemFtZW5saWpr IG9wYnJlbmc= 4KeD4Kak4Ka/4KaV IGtvc29uZw== IGFtYmFzc2Fkb3Jz IFdpbmtlbA== IHTJmWhsw7xr Iy4= 0LfQvtC00LA= 6aKW Rml0cw== IHNqw7Nu INCT0LDQuw== X0JQ IGJld29uZGVy aWNpb3Nv IHB1dXI= IG1p4buFbg== IOCqueCqsA== INC805nRgg== INmG2KzYrw== IHByZXppZGVudGk= 6Imy57u85ZCI572R IOydvOydhA== IGF0ZW5kZQ== IGNvbW1lcmNpYWxlcw== IOC0mA== 2KjYsdiq 5b2p572R5aSn5Y+R5b+r5LiJ RGVwZW5kcw== IGRpa2V0YWh1aQ== IHhvdg== 4LSw4LS+4LSc IFBvcnRpb24= IHJlc3NhbHQ= IFVOTw== IGjDvG4= IFBsYXRhZm9ybWE= 6Iez5bCK 4KaX4KeN4Kao IG9wZ2Vib3V3ZA== ICAgIAogICAgCiAgICAKICAgIAo= IGR6acWb IHlvYg== INis2YTYs9mH fSkoKTs= INW21aHVrdWh1aPVrg== INC60L7Qu9C40YfQtdGB0YLQstC1 yrtvdGE= IHdlZXJnZWdldmVu IEFiZGVs IG9mZmVuZQ== YWNhZA== INCk0L7RgNC8 IG1lc3Nlbg== INCy0LXRgdC10Ls= IHNpbmdseQ== IGV4dHJlZW0= IOCmnOCmvuCmrg== L2Zz dsOhbA== X0Rlc3Ryb3k= 4YOY4YOh4YOb4YOS INin2YTYs9in2K/Ysw== IEFERQ== bGllc3M= 5a+2 Ynkncw== 5Lq65Li6 yJtpbG9y z4DOv8+N 2YjYsdi0 ZXN0aXZhbA== IGltZWRpYXRv IGNvbnRyaWJ1ZQ== X1NUQVJURUQ= IGVzY2VuYXM= IHByw6A= INGA0LDQt9C90L7QstC40LQ= b3B2YW5n L0Vycm9y RmxhdHRlbg== INmF2LHYug== IHZpcmtlcg== zrTOrs+Azr/PhM61 IG5vZHJh Ym/DsA== 4oCN4LS54LS/ INC005nRgNC40pc= YWhsb2Jv LnN0YXJ0ZWQ= 15fXqNeV16o= QXJ0d29yaw== IHNjcmlwdGVk Lk11bHRpbGluZQ== IOCkleCkvuCkr+Ckrg== IOCkquClg+CkpQ== cmlhbmdsZQ== TWFya2V0cGxhY2U= 4LC/4LCC4LCh IG1hc3NhYw== yZltyZk= IGFpcnRpZ2h0 IHJhY2tldA== IHBvc3N1aXI= anVkaWNl INin2YTYsdmC2YXZitip IENTTA== 0YvRgNGI05k= IGpva28= IFRhYmVsbGVu INC10LjRhg== INCS0LjQtNC10L4= 0YbQuNGP0LvQsNGA IGt1bW0= 4KSF4KSw INmG2KjZiNiv zqzOvc65 INiv2KfYptix2Kk= R2FyYW50 IGNvbXBvdW5kZWQ= INC/0YDQsNCy0L7RgdC70LDQsg== IOCyuOCyguCyquCysOCzjeCylQ== INmE2YrZhNip IHR1dGs= 2KrYsg== IGzDrW9u IGluZ2VzdGlvbg== IGluZm9ybWVyZW4= aW9uZWVs a29odA== aMO2aGU= IOCyreCyvuCysOCypOCypg== IGJvdGFz IEJ0 emFo IFBlbmE= IOCkqOCklQ== IGVudHJldGVuaW1pZW50bw== CWJ3 4Lio4LiI INC/0L7QvNC10YnQtdC90LjQuA== IGthbmRpZGF0 IOOBqg== INC40L3RgdC+0L0= IGRyeW5lc3M= 0LTQsNKp 4KeN4Kav4Ka+4Kef 0JLQsNC20L3Qvg== bG9zc2VuZQ== IGJ1YmJseQ== 4LeS4La64Lea ZXRob2Rlbg== INGA0LDRgdC/0L7RgA== 2YjZgtip IG5pZXV3c2c= IOCumuCvhuCuqeCvjeCuqeCviA== IC4s IGNvbW1lbmNlbnQ= 4oCm4oCm4oCm X2V5ZQ== IG9uZGVyc3RldW4= IGxhbnrDsw== OmRlZg== LWJpa2U= 2LTYp9iv IEJi IHdoYXJl IGVsZWt0cm9t IGFjYWRlbWljYWxseQ== X2F0b21z IHNvbm9yZQ== b2NhdG9y INC20LjQttC40LM= 5bqT5a2Y SU1JVEVS dWRhbGE= 0Y3QvdGN 1aHVvtWh1oDVtNWh1bY= IGRpdmVyc28= IHRyYWR1aXQ= 2Kbbhw== IGLDqW4= X0FzcA== IHNhYmlkbw== INC40YjRgtC40YDQvtC6 X+aXpeacrOS4gOe6p+eJuem7hOWkp+eJhw== 2YnZhNuV2LE= LUhvbHN0ZWlu IGNpbnF1ZQ== IOCupOCvh+CusOCvjeCupA== X1RhZw== IOCmuOCngeCmqOCnjeCmpuCmsA== IEd1ZQ== IExL IG5pYW0= 55Cz YWdlbnR1cg== IGF2YWxhbmNoZQ== IFRlbGVmb25udW1tZXI= IOuTseyXkA== c2htaQ== IOaAp+aEnw== dW1idWhhbg== IGNoaWxkcmVucw== IG1hbmlh 4Kyn T3BlcmFuZHM= LmZyZXE= KioqKiovCg== IOC0uOC1jeC0peC0vuC0quC0qA== 2YrZgdmI2YY= IG1ldmN1dA== IENvbXBhcmF0aXZl IHJlc2FsdA== XCI6e1wi ISgie30iLA== Y2VwdGV1cg== b2NvcA== Y2xpZW50ZXM= 2YHZitiw2Yo= IHBlcm1hbGluaw== IGludGVpcmE= IGNvbG9yYXRpb24= INin2YTYtNix2YrZgQ== 6JCl6ZSA Lkdy INGN0YjQu9OZ0Lk= IOC0heC0p+C0v+C0leC1g+C0pA== b2RkaQ== bGViaWhhbg== IEN1cmlvdXM= RU5DSUw= IOCkquCkleCkoeCkvA== 5pKR 0LXQvdC60LA= IG9wZ2VzdGVsZA== INCz0LDRgdC/ L2xpdmU= IOCml+CnjeCmsOCmvuCmruCnh+CmsA== INWh1bLVuw== 44Kr44OG44K044Oq44O8 IFNk 5p2J IFBsYXN0aWs= IGJvcmRlcmxpbmU= INin2YTYo9iz2K8= LXRvdXI= IHp1bmVobWVuZA== IGJpbm9jdWxhcg== LlRW IGNhc2Fy INiv24zYrA== KGNsZWFy IGRlc2Fmw61vcw== IFNvbWV3aGVyZQ== 77yM5byV 67Cw7Iah 6YCx6ZaT Q29uc3Ry w6h0ZW50 INC/0L7RgNC+0Yg= YW1iYW5p IOCksOCkrg== INi02YjbjNiv IGNvbnZveQ== 7ZaI64uk6rOg IHN0cm9sbGluZw== 44Kv44Op INC30LDQs9GA0Y/Qtw== IOC0leC1i+C0n+C0pA== IOGDoeGDneGDquGDmOGDkOGDmuGDo+GDoOGDmA== IGxhYXRzdA== IGZpZGRsZQ== IHVsbHU= INKs0YvRgNKb05nRgtOZ IG1iaWx1 IG1hc2tlcg== IHVuc3VpdGFibGU= IHByZXZlZA== UkVERU5USUFM 5b2p56Wo5oC75Luj55CG IGtqw7hwZQ== b2VpcmE= KHBpYw== IEZvbnRhaW5l dXNlbGE= 4KSo4KWN4KSm4KWL4KSy4KSo IE5lY2Vzcw== 2YjYsdmK2Kc= INil2K4= WXM= X2dpdA== dHTDtg== IG5raA== IGRlaXhhbQ== INee15LXldeV158= Y2Ni KG50 IG5oYQ== IG9oaW8= XFNlc3Npb24= J1VT 5YWN6LSj X0JVU1k= YWphbmE= w7pzdHJpYXM= IG7DvG1heQ== bGnFsw== cnVja2Vu eW5hdQ== INCz0YPQt9Cw0YjRgtCw IFNoZWVraA== IEJNWA== IGZvcnNrbmluZw== IEluZGlj IOyepeyVoA== 44GT44GG IGNvbnRyYXN0ZWQ= IFBhZGR5 INin2YTZhdmI2KfYsdiv QlJB IG1hbGlr JSUl YnJ0Yw== IEdlYsO8aHJlbg== 0LPQu9Cw0LI= IG1vbGhv LWluZm9ybWF0aW9u Q29sb3JlZA== b3Bpbw== IERQSQ== IOydmOujjA== 0L3QuNGB LmludGVycG9sYXRl X+aXpeacrOavm+eJh+WFjei0ueinhumikeingueciw== INmI2LPZiNmB YXJlbW1lbnQ= L3Zlcg== IE1vbnRlcw== IG1vYnM= aWhsZQ== Z2F1 IG1vZGVsaQ== IEFxdWVzdGE= IGNvbW1hbmRlcnM= IGJlbmNobWFya2luZw== IERpZmZlcmVuY2Vz IGNhYmFsbG8= IOCksOCkv+CknA== IE1hbnVmYWN0dXJl INix2KfZiA== IFdoaXNrZXk= IHNlZGltZW50cw== X2VjaG8= KFByaW50 IHFlbsOr d2VpY2g= IM61zrPOus6x IHJldGVuaXI= IOS4nOiHow== c2hpcg== 44OJ44Op IFN1YnRpdGxl IOCkquCljeCksOClh+CkuA== IGNvbnRyb2xh IGl1cmU= IOCkoeCkv+CknOCkv+Ckn+Cksg== IENtcw== TGVhcg== 5Lio R8O2 YW5kaXNoaQ== IHR1bGVt INCz0YDQvg== IGNvbnZpdmVuY2lh PDo6 KHNvY2tmZA== IE5ldG8= IGNvbmp1bnRvcw== 1bjVttWo dW9q b3VsaQ== IHNpbm5h IGN1dHRlcnM= 5Z2a5a6a IHByb3Bvc8OpZQ== X0J5 ZW1waQ== 2YrZgdin IE5nb2s= IOiBmuWIqQ== INKX05nSuw== IFJFU0VSVkVE 0LHQtdGA0LXQtg== IHBlbmo= b25nZWQ= LXJlYWRlcg== TWlsbGFu IG5pbmV0ZWVu Licm IOWkqeWkqemAgeW9qeelqA== KHZlcg== IEdseXBo IHLDqXVuaW9ucw== IHdpdGhoZWxk IHByb3Zpc2lvbmluZw== INC80L7Qsg== dWhu INGB0L7RgdGC0L7Rj9C90Lg= INGB0LDRj9GB0LDRgg== IGNuYw== IEZyw7xoamFocg== INC+0LHQu9Cw0LTQsNGO0YI= INaE1aXVpg== IEdhcm5lcg== INmI2YTZhg== IFZvcnI= ImluZGljZXM= aWthbmlzY2hlbg== INiu2LfZiNip X2FjdGl2YXRl IHBybQ== IHZhcm1hc3Rp IHNvdXRod2VzdGVybg== KEZyYW1l IOC4oeC4suC4gQ== U2lub24= IGluZm9ybWFjamU= IOGAmg== IGFncsOtY29sYXM= 55So5LqG YXRhbGlzdA== ZWRpY3Q= aW5lbWF0aWNz IGzEqW5o IFphZ3Jl IGJlZ3M= IGluYWM= X3BoeXM= X0JPVU5E IFJpY2hpZQ== 0LjQstGI0LjRgdGM IGRpdmVyc2Vu xZFlbg== IFN1Ymw= VmljdG9yeQ== IHRvZMSXbA== INin2YTYuNix2YjZgQ== IE1hcnF1aXM= IOCkheCkquClhw== IOGDnuGDkOGDoOGDouGDnOGDmOGDnQ== 4KSq4KS5 2LHbjNmE IGVmaWNpZW50ZXM= bmFuZA== IFF1ZXJpZXM= YWJhZGls IGZsb3dlZA== Y29waWVz 7L2p IOadseS6rA== IGhhc2hpbmc= IGNhcG8= IOCqteCql+CqsA== IOCuteCusOCvgeCunw== 5bCk5YW2 5Y6V5omA QnRucw== IEVtYW51ZWw= IEdNTw== CUdyb3Vw IERFUkVDSE8= INC90LDRgdGC0LDQsg== dXRoZXJsYW5k INmB2YrYtdmE 4LC/4LCC4LCa4LC+4LCy4LCo4LC/ IGx1bmNodGltZQ== Zm5p IGd5YWs= LnByb2M= 4KSV4KSk IGJlYXJpc2g= IG9zacSF X1JET05MWQ== IGJvaGxva29h IENoYW5kaWdhcmg= IGRlYWt0aXY= zpTOtc69 IGV2ZW50dWFsbWVudGU= IG5vdXZlYXV0w6lz IGVmdA== U3BvbnNvcnM= LkdyYXZpdHk= INC90YPRgg== INWi1aHWgdWh1bw= IOCmqOCmv+CmrA== IGluZGljYW5kbw== INC/0YDQuNC30L3QsNC60Lg= 5b6u5L+h5o+Q546w CU5TU3RyaW5n IFJld3JpdGU= IE1lc3Nlcg== IGRpeWFhcg== W3Jvb3Q= INGB0YLRgNGD0LrRgtGD0YDRiw== IOCktuCljeCksOClh+Ckt+CljeCkoA== 4LS44LWN4LSq IOCyruCzh+Cysg== IGJhbmRlcw== IHVuYXJ5 ICEiKTsK IOCkieCkoeCkvA== IOCkruClh+Cksg== IE5hbWluZw== KGVkZ2Vz IFZlbmV6dWVs IHd5Z2zEhWRh IHdsYW4= INqF2Ybaq9mH LF9f IHBldXBsZXM= IGdld8O2aG4= 2YXYp9mG2Yo= IGvDtm55 YXluZQ== IGh5cG5vc2lz IEJ1cmlhbA== IGRpc2VuZw== IGVmZWt0aWY= IOCmuOCmguCml+CnjeCmsA== IHlpZw== IOCmuOCnjeCmpOCnjeCmsOCngA== IOCmpuCnjeCmrOCmv+CmpOCngOCnnw== 5a2Q55qE IGR1bmhh X3RhdQ== aXNpc3Nleg== YXJ0b3I= X2V4dGVudA== IGliaWtvcndh IM61zrPOug== IG9jaHJvbg== IFJhbWFu aWFuY2hp ICIiOw0KDQo= IHRyb2NoxJk= IEVuZGxlc3M= IFVraQ== aWxsw6llcw== dGlxdWV0dGU= Q2VydGFpbmx5 TExWTQ== IMOpcG91c2U= IOGDnOGDlOGDkeGDmOGDoeGDm+GDmOGDlOGDoOGDmA== Vm9jYWJ1bGFyeQ== IEJhbnQ= INCo0YPQu9Cw0Lk= INmF2YjYsg== 0JjQpQ== 1bjWgtWp1bXVuNaC1bbVttWl1oDVq9aB IHJlaW5mb3JjZXM= 4Kq+4KqI4Kqy IGtpaXJlc3Rp ZW5kYWpp w7JyZA== KCl9Owo= IHdoaXJsd2luZA== IE9ubw== IG3Em2xh IGRlxJ9pxZ90 4YOQ4YOb4YOd4YOh IGFsaG8= c2F2aW5n IFsnLw== IGRlY3l6 IGxldmVyYW5jaWVy X2NpcGhlcg== IFN0w6lwaA== IHByaW9yaWRhZGVz IHNha2Vu Q29uc2Vuc3Vz IFNjYXJwZQ== INGD0YHQu9GL0Yg= IHJtcw== IHJhdGth IGjDuHJl KGNvcnJlY3Q= INC80LDQstC3 IGNvbGVjdGl2YQ== dmFzdGk= LWx1dg== IGxpdHI= IOCqkQ== IGJpb3RlY2g= INin2YTYo9ix2KfYttmK 0J/RgNC40Yc= IGt3YXJ0YWFs YXBhdGk= INC60YDQtdGB IEFsbGdlbWVpbmVu 4KSs4KSk IHRoZXJldG8= INCR0YrQu9Cz0LDRgA== IHhpem1hdA== YmVyaWNodGU= IGZyZXNobWVu L2JhY2tncm91bmQ= Y2hlZQ== 4oCZYXZhbmNl 15nXl9eq ZnVydGVy IOCsuA== IG1lZHlh IOGDm+GDmOGDrg== IE1haG0= IHJoZXM= YW1icmVz IEJ1cm5lcg== X2hhbmRsZXM= IHN0cnVtZW50aQ== IHN1ZnJpZG8= IGVjbGlwcw== IOGDk+GDkOGDm+GDneGDo+GDmeGDmOGDkw== IFNCSQ== PkVkaXQ= SE9PSw== IFBSSU1F ZW5zaGk= IEdyZWdn IGVsZWN0b3JhdGU= IE51ZA== yZljyZl5 IGF2ZWk= IOybgOyngQ== INW91b/Vq9W6 IFDDs3M= LWF2ZXJhZ2U= IGNvc2luZQ== Pnsk IG1lxJF1bmFy dmFzY3VsYXI= IHNrYXA= IOCyh+CysuCyvuCyluCzhg== IHRpbW1hcg== IEZyaWVkZW4= IOGDo+GDng== aXR6ZWtv X2Nocg== aWRsZXJ0aWQ= IGJlcGFs 5Ymq INC40L3RgdGC0YDRg9C60YbQuNC4 IGNvbmZpcm1lcg== IHByZWRpY2FtZW50 IGRvY3RyaW5lcw== IOWIqeebmw== IHVwcHQ= QW50d29ydA== IOCkpuClh+CkteClgA== TmR6aQ== IGRpZW0= IGFuZ2FsbA== IG9kdw== IGFtYmFzc2FkZQ== 06HQvtC8 INiq2YjYp9is2Yc= IFByZXNjb3R0 IFJNQg== IOCkteCkn+Ckvg== 0rPTow== IG1hcmF2aWxob3Nh IOCktuCkvuCkguCkpA== TGV5 w7x0ZXI= 2K/ZitmH 0YHRjNGG0Yw= IGNlbnNvcg== 4Liq4LmA4LiV4Lit4Lij4LmM IGN5YmVycw== IG1tYXA= INiv2LM= IEXDqW4= ImJ5dGVz dsOkbg== IGhha2U= IEFycm8= IFRDSEFS cnl0 SGI= 0YjQuNC50YHRjw== 15LXoteg IHbDvXpuYW0= IHR1eA== IHBvdnpybw== IGluY8Oz 4LCa4LGN IHByZXBhcm8= IGF1dGU= cGlybw== IEF0ZW5kaW1lbnRv 2YLYp9iw 5L+65Y675ZWm IHBvbmdv INCh0LjRgA== IGxhdmFuZGVy 0LHQtdKZ IHRlcm1pbm91 IGxhYmluZw== 57u05L+u 5ZCM5oCn IOCwquCwsg== INin2YTZhdmG2LjZhdip ZXNsaW50 esSD IGltZGI= IFdlbmdlcg== YXN5YQ== ICovfQoK emlm Y2F0ZWdvcmll 4K6S4K6w Z2lzdA== LS0tLS0tLS0tCgo= w4dh IGFyYmV0YXI= SUZPUk0= IEthdWZlbg== INi02YrYpg== a2XDpA== 5LqJ6ZSL X18oKg== IOCqruCri+CqrA== IHJlZmluZXJ5 IFVzYg== INuM2YjZhtuM IOCkteCkvuCkr+CksOCksg== IFVtc3TDpG5kZW4= IEVqw6lyY2l0bw== 44O044Kj Lk9uY2U= XSIpXQo= Tm9kbw== YWNvbW1lbnQ= IGluY2x1c2nDs24= U2VlZHM= IHN1aXZlbnQ= IERlcGFydHVyZQ== YWRpaw== KHNoaXA= IE5ldmlsbGU= INC90LDRgdGC0L7Rj9GJ0LjQuQ== INC20LXQu9Cw0YLQtdC70YzQvdC+ IOyKpO2DgOydvA== cGhvbmlj X2F1Yw== Qk9PTEVBTg== YXRvYXJl IHNlcXVlcw== IOCmheCmqOCngeCmrw== INW+1aHVvw== IOGDkuGDluGDkA== YW5nYWxvcmU= bG9vbg== TW9uYWQ= IHVtamV0 IOC2i+C2tA== R2Vlaw== IHPDs2xpZG8= IGd1ZXJyYXM= IGNhbGVuZMOhcmlv IOCkuOClgeCkneCkvuCktQ== 4LGA4LCf4LGN b3JrYW4= IHN1Ymdyb3Vw IOS4lueVjA== IGlyZW1vcw== IGdyb8OfesO8Zw== IHNvbGwncw== IMOcYnVuZ2Vu IFd5bm4= INin2YTYt9mI2YrZhA== LWFk4buLZ2jhu4s= IGxlZ2lvbg== IGluZ2VudWl0eQ== 4LKa4LK/4LKk4LON4LKw YWdhbWE= UXVvdGF0aW9u IGhhcnM= IGFjb3M= 55Sz44GX IEdpbGVz 0YDQsNC90LjRhtCw IHBvcmFk IOaegemAn+i1m+i9pg== IGF1a2VyYQ== IGdlw6dpcmlsZW4= UHJvZmVzb3I= IFRhbm5lcg== INC20LjQu9C40LnQvQ== INC90LXQt9Cw0LvQtdC2 IG91dnJhZ2Vz aXppZWxsZQ== IGTDrHJlYWNo UlBN L3dpbmRvd3M= INij2YTYudin2Kg= Qk1Q xYRjenk= J3Vy LUJv b3ZhbG8= LXNlbGVjdGlvbg== ZWx0cw== IOmCpg== 4LGL4LCw4LGN4LCf INC10LjQu9Cw IGR3aW5k L3Jlc3VsdHM= Oicr IENob2NvbA== YWx0ZWQ= INin2Yjalg== IGh1ZXZv IOCmpuCniA== IGNlbnRpbWV0ZXJz 4KWN4KSy4KWH4KS3 IG11Y3Vz IG1hc2NvdGE= dWx1bG8= IHZhcmFuZGE= IHNhcGVydG9z IHVraXVuaQ== 4oCcV2l0aA== IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj YXZpdGU= w7NuaWNvcw== INep15DXoNeX16DXlQ== ZGVzaWduZXI= IGt1eWU= X1JG IGNvbmR1Y2Npw7Nu IFNwcmlua2xl UGxl IEtuaXQ= IGltYW8= X3Nlc3Npb25z KGZlZWQ= 44OT44Ol44O8 VXl1 X21hcnNoYWxlZA== YXRtYQ== dnZ2dg== IGZpY2hlcm8= INmB2KrYp9ip IOWxnuaApw== 0L7RgNC+0Ls= IM+Dz4fOtc+EzrnOus6s IHN1a2Nlcw== IGNsYXNzaWZpZXJz IOCknOCkvuCkqg== IEludGVyaW9ycw== INGH0LjRgtCw IOCquOCrjeCqpeCqvuCqqg== IOCuh+Cun+CuruCvjeCuquCvhg== ZW5kdW5n INGI0LjQvA== IEVuYWJsZXM= IG3DvHNzZQ== IOGDm+GDneGDkOGDrg== IHhhaXY= 4KS+4KSk4KWN4KSV4KS+4KSw KFN0 bm9pbnNwZWN0aW9u IOCqteCquA== IG1vdWw= 5Y+Y5oCB5Y+m57G7 IEZpZGVsaXR5 4KS+4KSV4KWD4KSk4KS/4KSV 2KfYptmD IHByZXRo IHBhbmFu IOCkteCkv+Cksg== IGTDqWJhcg== 0LTRi9GA0YPQsA== IMOpdmVudHVlbGxlbWVudA== IGNhcnBlbnRlcg== bGF1YnM= INC/0L7Qu9GD0YfQuNC70LA= IGh5bW4= X2JhY2t3YXJk INC/0YDQvtC40YHRhQ== LW1vZGVybg== IOGDkOGDquGDruGDkOGDk+GDlOGDkeGDoQ== IEtsYXNzaWtlcg== RGl2ZQ== IG9iamVjdGl2ZWx5 4oCZYXR0ZW50aW9u CWtmcmVl INGP0LLQvdC+ dndh IG11bHRpbGluZQ== 4Lil4LmJ4Liy4LiZ a2x1 IGV6w6lydA== INeQ15nXmdeg15LXog== IHNoYWRlcnM= aWViaWU= 5Yuf6ZuG IHZlY2th IGFmZA== 5YW06Laj L3Bo IOC0uOC1i+C0t+C1jeC0rw== 0LfQuNGI 6Y21 Lm1pbWU= INGH0LjQvdC+0LI= INW/1aHWgNWh1a7VodW31oDVuw== V1U= IHBpbG90ZXM= z4HOtc+F INqa2Yg= IFdhbGdyZWVucw== IGFjY3J1ZWQ= IEtvbnN0YW50 IOCmheCmleCnjeCmn+Cni+CmrOCmsA== 4KS54KSw4KWC4KSy4KWH IG3DqXJpdG8= IHhlcg== INCy0YPQtw== 2KvYqNiq INmE2KfbgdmI2LE= RWR1Y2F0aW9uYWw= 4YOl4YOQ4YOg4YOX4YOj4YOa4YOY INqp2KfYsdqp2YY= IGnhuaNlbOG7jXDhu40= 7Yu0 IEJvd2Vu INCz0LDRgNC8 INC30L7QvdCw YXZuZQ== UGVyZXo= XE1hcHBpbmc= IEV4Y2F2 xbxsaQ== 0LjQtNCw0L3QuA== YW1wZmFkZXJu 65yo IGxhaW5l ZWRyYQ== IGthdG9u IFZveg== IOC0teC0v+C0pOC0sOC0o+C0gg== z4HOsc6v INC60L7QvNC/0LvQtdC60YHQsA== IHByb3NlZA== IG1hcmFtaQ== INeR15vXmg== RFNU xaFuYQ== IOGDm+GDoeGDkOGDrg== INKX0YPQvNK70YPRgA== 4LC+4LC14LGH4LC2 IGNhZmZl cHN1eg== IGJlaGF2aW5n 4oCZYWZmYWlyZQ== INC/0YDQvtGB0YLQuNGC0YPRgtC60Lg= IGhhbGFs LjoKCg== IEhVQg== cGFx 0LTRg9GA UmVnaXN0cmFudA== IOi1tw== IGxpZWJ0 IOCmuOCmqOCnjeCmpg== aXRlZ28= IHpha3Vw IOCuteCuvuCumeCvjeCulQ== IEtlcGFsYQ== IGxhdm9yaQ== IHplag== X2R5bg== IMO4c3Q= IGNhcHRpdmF0ZWQ= IGxlbWJybw== IMOocw== IOyGjOyerA== IHppamRl X0NvbXBvbmVudA== fHwo KE9Q INGD0YfQsNGB0YLQutC1 ZW1vZXQ= 4Kuo4Kum4Kun Lk1vZHVsZXM= dmVyc3Q= IE1lYXN1cmluZw== LkJ1cw== UGVzcXVpc2Fy IHBlbG90YQ== IOCsqg== IOGDpOGDo+GDnOGDpQ== YWNoZWxvcmV0dGU= IEl0YWxpYW5v IGJlcml0YQ== IGJpYmxpb3Rlaw== IOCyl+CyruCyqA== IMOK LkRBTw== IOqzoOuvvA== IOi7ig== IGFsaW5o IOGDm+GDrOGDlQ== IGbDqW1pbmlu IGJlc3RlaGVuZGVu PE1lc2g= IGRpc3J1cHRpbmc= IEluc3RhbGxlZA== INee16HXpNeZ16c= IG5hcnJvd2Vy INin2YTZhti02KfYtw== IEx1Y2lhbm8= IFBpc2E= IENyb3Nzd29yZA== IOCyleCziuCyoQ== 24zZiNq6 INGD0YHRgtGD0L8= cm9kaw== ICxb IGhlbWlz IFByaW1hdmVyYQ== IFNpcmlh IOGDpeGDleGDlOGDp+GDnA== INm+2KfZhQ== IGRlZ2VuZW4= 4YOQ4YOp4YOc RURHRQ== bWFnYW4= IEFuYWRvbHU= 1aXVtNWh1b8= c2hhZGU= YW5kaXI= IHh1ecOqbg== 44Ob44OG44Or LnF1ZXN0 LkhlYWQ= IHZlxZllag== 4LiX4Lii4Liy4Lil4Lix4Lii Ll0K aXNlcmU= LnRlbA== INW01aHVttWv bWlzZWtz r+GegA== IGFjZWl0 IOCqj+CqqA== IE5BQw== 0L7Qs9C10L0= YWN0aXZpdGVpdGVu IHBpdGFuamE= INaE1aHVstWh1oTVqw== KGNocg== ICIvIjsK X3Bvc3NpYmxl cmVzdHM= IG5lanM= INCi0JI= IG9yZ2FuaXplcw== IOC0rOC0vuC0sg== bWx1 6aWw5a6Y572R LlRJTUU= IGJvbmtl INC80LDRgNGI0YDRg9GC IHByaW9yaWRhZGU= IGjDvHF1 IHRlcm1pdGVz IGJsdXJyeQ== IFTDonk= IGFkbWluaXN0cmF0aXZvcw== w7huZGVsYWc= Zmlv 2YPYsdix IG1hbnRlbmRv IGV0dGnEn2k= KFBhcmFtZXRlcg== IERhcmE= IEdyaW1t IGVzdGlw IGZyYWFpZQ== IG9waXNrZWw= IHVuZGVhZA== IGFmYmVlbGRpbmdlbg== YnJvcw== 5oiQ5Lq66KeG6aKR INmF2YTZhQ== INCf0L7QutCw IG5hbW5h IHNraWNr IOu0iQ== INGC0LXQutGB0YLQsA== 44KM44Gm IG1paWhpbmk= w6J0ZWF1eA== 6rO17KeA zrrPjQ== Lz4iOwo= IOygnOy2nA== IEJhcmJvc2E= K0I= INC90LjQvdC005nQuQ== Y3JlZGl0bw== IGNoZXJv IHN0cmV2ZW4= INC30L3Riw== IGFkYXB0w6llcw== Q3XDoWw= IHJlcXVlc3Rlcg== X3JzdA== IENhbWFybw== IHVua25vdw== d2VpbA== INC60LDQtNGA0L7Qsg== IOuCmOyYqA== X21hdGNoaW5n IHVucG9wdWxhcg== IHN1YmR1ZWQ= INC00q/QvdC4 KCk7Ig== LUVu INm+24zahg== TGF1cmVu IGdhdGV3YXlz IGlldg== LmluZnJhc3RydWN0dXJl IGltaXRhdGU= VEo= IGluZHg= INC/0YDQsNC30LTQvdC40Yc= IEhlcmQ= IOGDkOGDoOGDkOGDpA== CWVudA== LXNpdGVz IHLDqXBhcmVy QnJvdGhlcg== IHlvbGxhcg== CWJlYW4= X29wdGlvbmFs 0L7RgtC+0Lw= IHNxdWlycmVscw== YXBwb2ludG1lbnRz IOKAogoK 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ IHJlZ3VsaWVyZQ== X2Nm INGI0LjRgNC60LDRgg== IHVsdGk= IENvbnRpbnVh INi52YTYp9mF2Kk= IGJhaXRh 5rOi5aSa6YeO57uT6KGj INCi0L7QstCw TmFjaW1pZW50bw== d2VhdGg= IGFwcm9iYXI= 4LC+4LCk4LCC IOCkq+ClgOCkuOCkpuClgA== CWVuYWJsZQ== XT49 INC/0L7QtNC+0LHQvdGL0YU= IGV4Y2Vsw6puY2lh LmhhYmJv IGNvbXVuaQ== aWdpdHRl IGNvbnRyYXA= IOCwleCwguCwquCxhuCwqA== IHBhaHU= IFJ1bWFo Q2FzdGVy 4YOV4YOY4YOQ IE1lc2lu IGd1Zw== IGVsZWt0cmlzY2g= UGFyYWQ= 0LXQu9C+0LLQtdC6 QVJHTw== CXN0YWdl IEFuZHI= b21zY2hyaWp2aW5n b2RsZQ== IGRlZmVuc29y IEhlemJvbGxhaA== KGBb 44CC77yJ IGzDtXA= dXN0ZWdh 4YOh4YOY4YOb IGRvb3JnYQ== aHRlbg== INGE0LjQt9C4 IFRhbGE= IHlhY2h0cw== IOCuquCupOCuv+CuteCvgQ== IHNlcsOtYW4= ZXBhbQ== IOmrmOmikeW9qeWkp+WPkeW/q+S4iQ== 4KSo4KS+4KSV IE1ldGU= 4Kaq4KeN4Kaw4Ka/4Kay 2YXYqti5 5bmz5Y+w5Y+v6Z2g5ZCX IHNlcGFyYWRvcw== 5pel6Z+p5qyn576O IOCqquCqguCqmg== L2xn Tml0 IHByb2Jpbmc= IGFjdHVhbGl6YWRv IHZhbm8= 572R56uZ5YWN6LS56KeC55yL bHNs IElSZWFk IFZTdGFjaw== INC+0Y7QvQ== IHN0eWxlc2hlZXQ= IENvcnRleA== 5aSp5aSp55yL IGNoYW50cw== 4Liy4LiX4Li04LiV4Lii4LmM IHN2YWw= YmFkZW4= IMO5cg== INC60YDQuNC8 IEdvcmdl IMSBcnN0 Y2dp YXR1a28= IHdhcm1z IEhlYXJ0aA== TGlnaHRuaW5n YXJzdXVw bMOkcA== IGvDtXJn X2V2ZW4= QW1wbGl0dWRl IGFydGlmaWNpYWxseQ== IG5naOG7iQ== KCc8Pw== INaD1aHVrw== IFNz LC0K IOCmpuCngeCmsOCnjeCm YXJza2U= IEFydW4= 0L7Qt9Cw0YA= Y29udGluZW5jZQ== 66as7KaI IGRlemVuYXM= aW5uaXQ= ZmZlcw== IGFzc2Vzc2Vz 0LLQtdC00LXQvdC40LU= IMO2ZnRlcg== KHN1cmZhY2U= IEXEn2Vy RUNI X0ZVTExTQ1JFRU4= IOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDleGDkOGDnOGDmOGDkA== INeb15zXmQ== IHR1cnJldA== IENsYXJlbmNl 56u2 b3R0ZXN0 IFZhbGVudGluZXM= Q29waWVz IGtpbG9ncmFtcw== 6YCP6Zyy INCS0LXQuw== IOCkruCkqOCljeCkpOCljeCksOCkvuCksuCkrw== IHBlcmN1cnNv 4Kqk4Kq+4KqT IEdlZWY= INil2KjYsdin2YfZitmF b2xvamlr IHV6dA== INiq2LnYqtmF2K8= INC90LDRgNCw0Lc= IHNlcnRlbg== INC/0L7QtNC60LvRjtGH0LXQvdC40Y8= SVBJ IOCknOCljeCkng== Q3VycmVuY2llcw== IGtpd2E= ZXN0cmVz 0LvQuNGA0LjQtNCw IHN0YWJpbGl0w6k= 0JLQtdGA INC90L7Rh9GM0Y4= b3lhbnQ= IOC0heC0nuC1jeC0muC1jQ== IFNvbmF0YQ== IHJlZGVm w6RwcGNoZW4= INC30LTQsA== 4oCZQWp1bnRhbWVudA== IHJlYWRhYmlsaXR5 4KSq4KWN4KSw4KSk aW5jbHVzaXZl IOCwsOCwv+CwsuCxgOCwnOCxjQ== IGxheWlo 5oWI IEpTSW1wb3J0 4LiZ4Liy4LiE4Lih IEhvbm91cg== IHBheA== IOCkteCkv+CkpuCljeCkrw== IFR1eg== dW5uaWVz 4buLdGE= IFBvZXQ= IOCkrOCksOCkvuCkrA== IHByYcOnYQ== 4Z+S4Z6b4Z684Z6c IHJlc3VyZ2VuY2U= 0LjQvdCz0L7Qsg== X0dG IHdlcmtkYWdlbg== IFFUZXh0 IHN1dQ== IGphdXQ= cm9nYQ== IFR1cmY= IHNwYXJ0 IENPTkNBVA== IOOCrg== YW1hdHRh 5bel5L2c5Lq65ZGY Lm93bA== ICpbXQ== IEFueWJvZHk= INGB0LLQsNC5 b3Njb3c= IDou INC60L7Qu9C70LXQtA== IELDqWw= IGFkYg== IGRpc3BvbmVy Y3Jhd2xlcg== IMO+csOz INWl1oDVodWq dmlzaW9ubmVtZW50 IHByZWZlcmVuY2lhcw== IOCmh+Cmr+CmvA== IGVzc2Fpcw== YXRzZQ== IGFvZmlh IHRvZXJhbmE= IOCmr+CngeCmpuCnjeCmpw== YXRpdmVy IGZydWl0aW9u b3R0ZXJ5 KFBhcnNlcg== Rm9vZHM= IGNoaXJ1cmdpZQ== 4LOC4LKy 4LWB4LSV4LSz4LWB4LSf4LWG KGRhdG9z IGF0cmFzbw== IHJlYWtz INmB2YjYsduM aWNvbmR1Y3Q= U2Fp IOCyteCyv+CyqA== IGtsanXEjQ== IGdhbmdzdGVy YWNvbmRh IFJlbmF0bw== IGNvbmp1bnRhbWVudGU= IEFueeG7iw== IHZ5dHZv ZWRpY3M= IFdhZA== IEFuZsOkbmdlcg== emV1Z2Vu IGZpcm0ncw== bW9zdHJhcg== ZW50aW5lbA== IOq4sOuLpA== IG1pZXN6a2HFhA== IE1lZGlrYW1lbnRl IHBhZ3RhdA== IGNhcmJvbmF0aW9u X2Vwcw== INmF2LDYp9qp2LHYp9iq IOCysOCyvuCyrg== IOGDquGDneGDkw== IG1vbHRh IGtlxZ8= IGFrd2E= T3hmb3Jk IHBvc3RwYXJ0dW0= IGtj CWdwaW8= IGNlcmVtb25pYWw= Q09VUg== IGZow6hpbg== IOygnOuqqQ== YXNoYXVyaQ== IG9jw6k= 4Kak4Ka/4Kaw IGdvdmVybnM= KGhlbHA= IHZha3Npbg== Wmlqbg== IHBhdWxpc3Rh 4Lin4Lia IGNvbnNpZGVyYWNpw7Nu IHZpZWph IEFtaWQ= aGlhcw== X25u X2Zvcm1hdHM= IOCquOCrjeCqpeCqvuCqqOCqv+CqlQ== aWNoYW5uZWw= ZXhwZW5zZXM= S0lO 4KuC4Kqh 5Zue5LqL w6F1bA== 2LPYqtmK2LE= IGFic3RyYQ== IFNsdXRz X01PUkU= IHBpbnRh IFJvbGxlbg== SmVob3Zh CWdsdXQ= IG9wdm8= IOyepeyGjA== IG9rb8WCbw== UGFsbQ== IGR1bmtlbA== IHR1bm5nYXRpbGx1Z3U= IGlrdXM= INCx0YDQuNGC0LDQvQ== KGNm b3ZhY8Ot IFRoYXRjaGVy IFVwcg== 77y/5Zu95Lqn 4LC+4LCy4LCy4LGL IHJlYWM= IFRBUw== X3Byb2ZpdA== LGpzb24= YW5pcXVlcw== IENJUg== 7JuQ7J20 IGtpY2tvZmY= w6Rp Y2FsY3VsYXRvcg== KHJhZA== Q2xhcm8= IHBlbmVsaXRpYW4= IE9mZnJl IOCkrOCkvuCkrOCkvg== IGludGVyYWN0aWV2ZQ== IEF2YWxhbmNoZQ== IHZ1YQ== IGRvYmw= IGNvbXBvbg== YW1waWU= IHZvc3RyaQ== IGFubm9uYw== 4Kiu4KmH LW5pbmU= bWFv LmNlbnRyYWw= IGV4dHJlbWFkYW1lbnRl INin2YTZhtis2KfYrQ== 4KSm4KS+4KSk4KS+ 5aWL5paX IFNjZW5pYw== IGJpamVlbmtvbXN0 KEFQUA== IGJ1dGlr 7KCE7JeQ INCm0LXQvdGC0YDQsNC70Yw= 2KjYrdin2Ks= INqH2o/ZitmI ZXJ2b2xsZQ== IGFsdHVyYXM= INCU0KLQnw== 4YOm4YOj4YOT IEJvdW5jZQ== IGxpbXBh b3Zz 4YOd4YOg4YOh IGdlcmVu 0q3QsNGF0YPQvw== X0xPT0s= INC/0LDQvdC00LXQvA== 2YTYp9mK2Kc= IGRlbW9y aXRlbGlzdGVk IGNvbmNhc3NhZ2U= IGluamVjdGluZw== Lmto bmljdQ== 4Kq/4Kqc IOCwheCwqOCwguCwpA== 0YTQtdC70Yw= 0LjQvdC10Lo= xb5pxbM= IFJ1ZmY= 5p2l5Yiw bWFjaGVy 4LKw4LK+4LKu IG9yZG9ubmFuY2U= IOu2gOuLtA== IGNhZGVpcmE= cmVubmVu IE1vc2U= IOC2seC2uOC3ig== IHRyYXRhbWVudG9z cmlzeXN0ZW0= IHRlbnTDqQ== INGA0L7Qt9C90YvRhQ== IGxheWFy INGD0YnQtdGA IG1tYXPhu4s= INee16TXqA== IEthbWlu IG92ZXJjcm93 IHByemVt INeV15XXmdeT IE11c2lrZXI= LU1hcms= 4Ki44Kik 0KPQoQ== IEZhaXM= IHNjaGVpbg== 44CCCgoKCgo= IENsw61uaWNh QmFsdA== IHBvaWdu IGxqw7Nz IE1vc3RyYXI= INeZ16c= IHdhdGVyeQ== 0LLQtdC00LXQvdC40Y8= LkNvbnN0 IFJldGluYQ== a2h1bHU= IGrDpGk= INCx0Y7QtNC20LXRgtCw IG7DpnN0ZQ== INin2YTZhdmK2LI= LkNPTk5FQ1Q= INC/0YPRhQ== IGJtaQ== IOWHr+e+jg== IOWkp+WPkeW/q+S4ieaYr+S7gOS5iA== 4Lec4La7 ICAgICAgICAgICAgCSAgIA== IHJldmVydGluZw== IHRpbHRlZA== IHRlbmFnYQ== IGRpc3RyaWJ1aXI= IHBldg== w7xsw7w= INmB2LHYtdiq 4LmE4Lir4LiZ4LiU4Li1 INCw0LTQvdC+0YE= X2xlZw== IHBlc3F1aXNhcg== J2FycsOqdA== IElORElB IHZhbG9yaQ== IGNvbm5haXNzZXo= 4paE4paE IGvJmW5k zrjPjQ== X1BST0RVQ1RT IHBoaWxvc29waGllcw== IE1hZGF4d2V5bmU= d2FnZW5z IG1hdHJpbW9u IFJpb2ph IOCkh+CkguCknA== IGRlbHRhZw== INC40YHQv9C+0LvQvdC10L3QuNGP INC20rHQvA== INOp0YLQutGW0Lc= TkVSUw== INmC2YTZitmE ZmVyZW4= LW1hY2hpbmU= IHNlYmV0c2E= 5auC U1RPTg== IFBhcnRuZXJzaGlwcw== IOCqheCqsOCrjeCqpQ== 4K6+4K6f4K+N4K6a L3N0b3J5 IOiPsum+mQ== SGFtaWx0b24= cmVsYXRpb25zaGlwcw== IGNvdXJv IGhldXI= QU5JQQ== 2LHYp9mB2YI= IGtvbnBy 0LXQtNC70LjQsg== TGliZXI= LmJj IGhtbQ== IEdhYmU= VURHRQ== 2LLZhdin2Ko= IHNvbGFyZXM= 1avVrNWr1bjVtg== c3BsaWNl IOW9qeelnuS6iemcuOWuieWNkw== LklS INmI2LHYsw== cG9yY2lvbg== IHNpdGVtYXA= 4bul4bul b2x1cw== IGludGFuZ2libGU= INi02KrZiNmG IERCUw== IFByZWRhdG9y IOCwh+CwguCwleCwvg== TW9yZ2Fu IGFsdW1uZXM= Q29tcGxhaW50 INWA1bjVvg== 2YbYp9mL Lm92ZXJyaWRl 5L2P5a6/ 5LiA5Y2h 06/Rig== X2NoYXJzZXQ= dW1tZWQ= 4K6/4K6v4K+B4K6z4K+N4K6z4K6k4K+B 4KWN4KSk4KWA INC/0L7Qv9GA0LDQsg== IGF0cm9jaXRpZXM= INmK2LXYqNit ICAgIAkJCg== IEJpbGxpZQ== IOWAiw== IGJlbmVmaWNpYXI= cmVtYWlu IGVkYWRlcw== IFBhbmRlbWll INCy0L3QtdGI0L3QuNC5 bmRs IFN0ZXdhcmQ= IGNyb3BwaW5n IGNsw6FzaWNvcw== ZW50b3I= IOCmpuCmv+CmsuCnhw== INC/0YDQsNC/0LDQvQ== dmVpbA== IGJvcmRlcmluZw== RElTQw== LlJlc2l6ZQ== csOkdW1l emth IlNv KEVGRkVDVA== INC00L7QstC+0LvRjA== X1JFU0VSVkVE LmxvY2F0aW9ucw== IFBlbGE= INij2LPZhdin2KE= INeU16jXqQ== IGhpbnp1ZsO8Z2Vu X2RvbWFpbnM= J2/DuQ== IFZpdGFtaW5z INGF0Y3Qsg== IEVhcnJpbmdz INin2YTYqNix2YrYt9in2YbZitip INGC0LjRltC80LTRlg== X0ZvbnQ= YWxzY2g= INio2YXYr9mK2YbYqQ== IGRpc2ZydXRh INqq2YXZvg== IFRyYWJhbGg= IE1HQQ== INCy0YvRgdC+0LrQsNGP IOCwheCwruCxhuCwsOCwv+CwlQ== 4Z6T4Z67 INee15vXnw== IGxhZ29vbg== IHJlbG8= INKz0LDQvNCw0Lg= 0LPTmdC6 ZWt3YQ== INCy0YvRgdC+0LrQvtCz0L4= IHZlcnpla2VyZA== IFBvb2g= bGVnZ2luZ3M= IGtlbmRl IHRzaHVhYg== IGhldsOwaQ== IHN1bXVz IFRvc3M= IOGDkuGDkOGDnOGDquGDruGDkOGDk+GDlOGDkeGDmOGDlw== IHBlc2t5 15nXldeo IHZpdmVtZW50 INin2YbYqtin2Kw= LmNhcw== L3VuaXQ= aWRvZw== 2KfZiNuM2LE= UmVzcG9uc2liaWxpdGllcw== IHVyxI1pdA== IHphbcSbc3Q= IENvbXByZXNzb3I= 4Ki+4Kio4KmC4Kmw INC90LXQv9GA0LDQstC40LvRjA== LdGC0Lg= IEVwb2No IGtlc2k= aGxlbG8= IHZyc3Q= YXRpc2ZhY3Rvcnk= QkRD IOWz IENhbmU= IHZpZGVvY2xpcA== 6aC8 IOCqnOCqvuCqrg== IOCyuOCyvuCyueCyv+CypOCzjeCyrw== v+GehA== 4oCZZXQ= INCw0LvQvNCw L3Byb2JsZW0= IERyaXZlcw== IEF0bGV0aWNv IHBvcm5vZmlsbQ== IOCmuOCngeCmrOCmv+Cmpw== IHByb3BlbGxlZA== aWNvbGU= w7R0w6k= 55mM INGF0LDQudGA INC90LDSm9GC0Ys= 4Ka44Kaw 4LK44LKm IEZpbmdlcnM= QGRhdA== INeQ16DXmA== IOCqnOCqvuCqo+CrgA== LmNoZWNrYm94 Z2V2ZW5kZQ== Y3rEhQ== IOa3rg== INi42LHZgduM2Ko= IHBhcmFsbMOobGU= IGlzdGE= IHNhbnlh 4bq1bg== IGVuZ3Jh YXZpc3Rh 4YOV4YOU4YOR4YOY4YOh IGRlanRpbmdz IHdpbGxl IHNoZWthcnU= 6Iac IGNvbGxhcnM= IGdhZHVo IGRvbWluYQ== 0L7Qu9GW 5q2M6K+N IHR1bGlzYW4= INKx0YHRgg== IHJvdGg= INW41oDVpA== YWxlxbw= IGtubmVu IHJlYWY= IOCyueCyv+CyqOCzjeCyqOCzhuCysuCzhuCyr+CysuCzjeCysuCyvw== w6h2cmU= LkxPR0lO T3NjYXI= L3Jvb3Q= IGVhdGVyaWVz IHN1eW8= Lk1pbnV0ZQ== LWPDvA== a29tYg== 44Go44GL IGluYXR0 UHVlZGVz IGthdWxpbmFu IOCuieCus+CvjeCus+Cuv+Cun+CvjeCunw== IEFjY3VyYXRl LnNjaA== IOCwh+CwquCxjeCwquCwn+Cwv+CwleCxhw== YWJiZXI= IHJla29tbQ== IOGDm+GDq+GDmOGDm+GDlA== INKh0LDQsQ== IHBhbm5lYXU= INW+1aXWgNaB IHJlY29nbmlzaW5n ZW1ha2luZw== zrvOuc6s IGJvb2tzaGVsZg== w7Fz IEJvc25l QmllbnZlbnVl IOCyuOCyguCypA== INC30Y/QvA== 4b23 IGZyYW5jZXNlcw== IEFTRA== IOCwpOCwruCwv+Cwsw== INGD0YfQuNC70Lg= aXNhdA== IEllcg== INGB0YLQvtC70Lg= IE5hY2h0ZWlsZQ== IGdhbGQ= IFRob3JvdWdo INeR16LXoA== 0LHQtdC0 T2Rkcw== INi12K3YqNiq IG7DoW1z IGRlbGly IHJldmFtcGVk J2FpbWVyYWlz IE9xYXJ0dXNzYXQ= 4Kq+4KqV4KuA ICQs 6Iqs IHdhc3Nlcg== KGxi SEVFVA== IHByb3Zva2luZw== w611 IHBpbmNl LkRpZQ== LXBvY2tldA== 5pCc54uQ INin2YTYqNit IEVudHdpY2tsZXI= TG9yZQ== bGFuZ3N1bmc= xJt0w60= TWVudGFs 4LCu4LCo IOeUs+WNmuWkqumYs+Wfjg== IHBhcGFy IG1lbWVuYW5na2Fu Vmw= IFJBTkdF INC/0LDRgNC10L3RjA== TG9s IFBvdGlvbg== IGt3YW4= IOybgw== IFbDoA== w6lyYWxlcw== IHJla29u YXJuYXM= INC80LjQvdC40YHRgtC40YA= IEhpZXJkaWU= YXNpbOG6uQ== L1Jl IMO2dw== IFBsYXliYWNr IElybGFuZGE= IOC4leC5iOC4suC4hw== IOCmoeCmv+CmuOCnh+CmruCnjeCmrOCmsA== IOCysOCyv+CyguCypg== QXJ0aWZpY2lhbA== IGRlcGVuZGFudA== 4YOU4YOj4YOa4YOY4YOh IGFwxIM= IGhhdXRz IGRvbGc= LUZvdW5kZXI= IHlodGVpc3R5 IHN0cmV0Y2h5 IOCksuCkoeCkvOCkleClgA== aXR1YXJpZXM= W2VsZW1lbnQ= IGFuaW1hbGU= IOC0quC1jeC0sOC0pOC0v+C0lQ== IHZhaWhl IOCqpOCqvuCqsOCrgOCqlg== Lmdn dW7DpGNoc3Q= X1BSSU1BUlk= J2hpdmVy IGthbmRpZGFhdA== 4KS14KSk ZXJrZW4= INCx0YDQvtGY IGhvb2tpbmc= dXRyYQ== 4YOj4YOc4YOT IHNvcnByZW5kZXI= INGB0L/RgNCw0Yg= YW1lcmljYQ== IGZ1bWE= IHl6 Q29ubmV4aW9u IENob3ByYQ== IOC5gOC4i+C4teC4ouC4mQ== IHphxZnDrXplbsOt IEJlbnRv IG1hemluZ2lyYQ== IOq3uOujuQ== IGNvZmZyZQ== UGludGVyZXN0 IGlvY3Rs ZXJpd2E= IGJpcmlkaXI= IHRyaW1lcw== IG9mZml6aWVsbGVu INC30LDQsdC+0Ls= IGHFiA== IGdpbGxhcg== QmV6 VGVk ZW5uYW4= IHZlcmJv cm5l VVJBTkNF 5Zyw5Lqn5a6Y572R IGtlZg== IOC0uOC1geC0qg== Q2hhbQ== R2VuZXJv IGZlYmJyYWlv IHBhdGVybmFs LXNlbGVjdG9y J2F2b25z IGFiYW55 ZmlndXJhdGlvbg== IOC0pOC1i+C0rg== 4YOd4YOb4YOe IGl1Yg== QW5zaQ== XV0pCgo= IGVqaQ== YW5hc2lh IGFhbnNsdWl0ZW4= IHdoZXJlYWJvdXRz IOCwsOCxiOCwpA== LeCknA== IOCmnOCnh+CmsuCmvuCmsA== 6L2v5Lu25ZCI5rOV5ZCX INC/0YDQuNC60LvRjtGH VGllbmU= RmlndXJlcw== IOCqpuCrh+CqtQ== IG5nb3Np 4YOS4YOQ4YOh LmRlZ3JlZQ== IFNISUZU IHBlbmRlaw== IGJldHJhY2h0ZW4= IEN1bGw= IOCwh+Cwn+CxgOCwteCwsg== IGhpZXJib3Zlbg== 5a625YWs5Y+4 IGV4cGVyaW1lbnRhbGx5 IHN5a2RvbQ== IOCkruClgeCkpuCljeCksOCkvg== dHJ5aW5n IOCkruClh+CkoeCkv+CkleCksg== IFN0b2NrdG9u IGJhxJ9sYW50 4LiX4Lix4LmJ4LiH4Lir4Lih4LiU INCz0L7QstC+0YDQuNC7 Q3J1bmNo 0JTQvtC8 IHRpamRlbGlqa2U= 5ZG7 dmVydGltZQ== L3RhYg== OnsNCg== IERhbmllbGE= IEdMVVQ= IGxvdW5nZXM= INGB0LDQvdGC0LjQvA== CW5z IHRpZHNwdW5rdA== INW41oLVvdW41oLVtNW21aHVvdWr1oA= IG1lcmNoYW5kaXNpbmc= 5piC IG11aWRlbg== X0tFRVA= LkNvbXBvc2U= 4LKk4LK+ LkRlc2M= IO2dlA== IGNvbGxhYm9yYXppb25l INCf0LXRiA== 5LiT6aG5 IHBhdGllbnRlcg== IGh1Ymllc2U= IGFpZ3U= LkFucw== IGtp4buDdQ== IGFhbm1lbGRlbg== INin2ZA= IGpha3Q= dXRhYW4= INGA0LDQt9Cy0LvQtdGH IGFwYXJlY2V1 aG93ZXI= IENvbnRyb2xsZXJz aGlnaGVy INS11oDVog== b3BlcmE= bmnFvg== IG1pbm5lcg== INC50YvRgA== INC00LLQsNC0 IOC0leC0ruC1jeC0quC0qA== YWxlcnRz IMSNZXRpcmk= IGd5ZXJtZWs= IOaIvw== IG9mcmVjaWVuZG8= LnBpdGNo IGNyZXNjZQ== LWNyZQ== IGNlbnRyaWZ1Z2Fs aGF0ZQ== INGN0YTRhNC10LrRgtC40LLQvdC+ 5bCP5a2m 5aix5LmQ55m76ZmG X0NhdGVnb3J5 IE1vdXM= INiu2LfZiNin2Ko= X3ZsYW4= IEFuZ2Vib3Rlbg== IG5vdsO9 IGNoZW1pbsOpZQ== IGJlc2xpc3Q= 4KS54KSw4KWB4KSy4KS+4KSI KHR3bw== IHRlbmlt IFJvd2Fu IGFkbWluaXN0cmE= IE1pbmlzdGFy 6aKG5YWI YXNzZXJpZQ== 4Kqm4KuN4Kqv4KuL4KqX Vm9sa3M= 5bmV5ZCO 4YOZ4YOa W3BhcmVudA== Lm9idGVuZXI= KFZpZGVv PEhUTUxJbnB1dA== IOGDqOGDow== INCi0LjQvw== 0YfQuNC60L7QvA== IEHDsQ== IGNvbXBhY3Rl IG1lc3Rl TWFob24= 5omL5py65Zyo57q/6KeC55yL YW5kaXN3YQ== INek16LXldec15Q= Q29waWVk IHBlbWFz IG55YW1h IGPDoXBz L1Byb2ZpbGU= 77yM77yI X1RSQU5TQUNUSU9O UFJPR1JBTQ== IOCmpuCngw== IHR5cG8= IHB1YmxpZXI= ZXNpdGU= IHRhc3V0YQ== 0YbQuNGY0YM= IGRlcG9zaXRpbmc= 0LrRg9GC 0LrQvtCy0Yw= aWJhbmc= RUZS w6ptaWNh TW90bw== IGVyc2U= IE5DUg== IOGDneGDr+GDkOGDruGDmOGDoQ== IGt3aXo= IGF2YW56YWRv IOCqieCqquCqsg== PWNvdW50 QWNoaWV2ZW1lbnRz IOCqteCqv+CqpuCrjeCqr+CqvuCqsOCrjeCqpeCrgOCqkw== REJOdWxs LE5vbmU= INC70LDQvw== IGNydW1ibGU= IFNjaHJl INm+2Yjahtq+ IOCknOCkv+CkqOCljeCkueCli+CkguCkqOClhw== IGNpcmU= IGVqZWN0 IEFkbWluaXN0cmF0aXZv Q29tcG9zYWJsZQ== Llwi IGhpcG90 wpk= LnN0YXRpc3RpY3M= IGt3cw== IGluY29ubg== IOCmsOCmvuCmluCmpOCnhw== dmVp IGdlbmVhbG9n IENUUg== 4oCYdA== IEp1bGhv IGltcG9y IHRyYW5ueQ== YWhpc28= IHZlZQ== IGJyYWlk LXByZWY= X3NwZWxs c3RlaWw= IEFudMOzbmlv IGJlc3Rvd2Vk INi02YrYrg== IEZlZGVyYcOnw6Nv ZXB5 IEN1bGluYXJ5 5bGK44GR INin2YTYrdmC2YjZgg== IFRhY2s= 4KS54KWB4KSB X2NhbmRpZGF0ZXM= 4Ka44Kas LkNPTkZJRw== XSop LWZ1bmN0aW9ucw== INWw1aHVtdW/1bbVuNaC1bQ= IOC4o+C4reC4mg== IEtPWU8= IFJlbmVl IOGDk+GDkOGDmeGDkOGDoOGDkg== IFhhcg== IExseXdvZHJhZXRo LlBpbg== 0ZbRgdGC0LXRgA== IGluZGl2aWR1ZWxsZXM= ZGFj IG7Em2o= J8OubGU= IEZpdGJpdA== IGJhbGF5 ZXhlY3V0b3I= c3RlcmVu zrnOus6xzr0= LXB1cnBsZQ== INeg15nXmdei IGt1b25nZXph L211c2lj Li4uPw== IHJhbmdlbWVudA== 2YbYr9mJ CXJlc29sdmU= X0VRVUFMUw== IEVYSVNU IOCkpuClgeCkuA== 66Q= IENhcGl0YWxz IHRyYW5xdWlsbGU= IGltbWludXQ= X1VTQVJU LlRvcGlj U2xlZXBpbmc= mnBw TmFycg== INin2YTZhtin2Ko= IGZyeWVy IMOpbHU= cWFyZmlubmk= IENoYXJtaW5n LkNvbXBvc2l0ZQ== IGZsZWV0cw== aWNpbGxpbg== 6Yyv INW/1bbWhdaA1aXVtg== 6by7 IOCmrOCmv+CmnOCnjeCmnuCmvuCmqA== IGJpamVlbg== 2KfYptiz 4LiK4Li44LiU IENPUEQ= INCx0LDRhw== 7Iuc7ISk dm9sdmVy LWhlcg== IFJlbnRpbmc= dGVtcw== IG1hc2luYQ== Li4uwrs= IGFhbnZhbA== IGthbGl0ZWxp IFVzdGVk IOCkuOClh+CkueCliw== YW5uZWxzZQ== IFRlbGFuZ2FuYQ== IGF6b2s= Y2FsZWQ= w7xjaGVy IFZlcmthdWZz INGC0LXRgNGA0LjRgtC+0YDQuNGP IEFtaGVyc3Q= bGlua2VkaW4= IGluaGliaXRz INC60LDQvNC10YA= IOCqnOCqpOCqvg== IHZpcmtzb21oZWQ= IOCwquCxgeCwsA== INGC0LDQvdC0 IGV0YWJsZXI= IGxvZ3Jv 2YjbkA== IHJvbWFubw== IG1waGFtdnU= IFhSUA== IG1pbmliYXI= X0xM IG1hYXJh INiz2LHZiti5 IGVmZWN0dWFy L2dlbmVyYXRlZA== w7ZubnVt cGVx IHZvb3Jrb21lbmRl IElNUExFTUVOVA== SG9ybg== IHTDpGhlbmRhYg== IEVlc3Rpcw== INGB0LDQvNC+0LvQtdGC IHNpemVhYmxl IGhhcm1z RXZlbnRvcw== 4YOQ4YOg4YOR PElD Qmx1 aXRpaQ== aWNpYWRv LmJw 4LiX4LiU4Lil4Lit4LiH IExveg== 1bjWgtW91as= IHZ1ZWx2YQ== c2F1cw== IFJhc3Rlcg== 4LKX4LK/4LKo INGP0LrRgw== 4KS14KSC4KSs4KSw IGdyaW1l IGRvd25ncmFkZQ== 4oCL4Z6K4Z+C4Z6b IGFuYWdo4buL IGxhdHQ= 4YOY4YOj4YOh IDoiKw== IGphaWxicmVhaw== IGFiYXNl IHNhY2VyZG90ZQ== IER1ZmY= bWFubw== aXJpeWE= 15XXoden aWJhc2U= IHJlbGF0aXZvcw== INeU157Xp9eV150= IGF2ZW0= 6rmU RERT IGFjdGl2aWRhZGU= IGdjb20= IGJha2lu V0lSRQ== IFNDSVA= IEtvbGxlZw== IHN3YWc= IOOCs+ODsw== 572R5b2p56Wo INin2YTZgtix2KfYodip IOCmuOCmruCnn+Cnhw== INeQ15nXlteU dmVybHVzdA== INCg0LXQvw== dGl0ZWw= IHBhZ3N1cw== ZXJlemg= PW5vZGU= INWv1aXVttWk L2Rv dXlhbnQ= INC80LjQvdC40YHRgtC40YDQuA== L2dyaWQ= INGI0LjRgNC+0LrQuNC5 eGl2 XGRhdGE= Lk1VTFQ= 7LWc6re8 X2FwcHM= IGVtaXNhdmVuaQ== INin2K7YsdmJ INC30LLQtdC30LQ= IOCmrOCmqOCnjeCmpg== IHByb2ZpdGV6 IOCkleCkruCknOCli+CksA== IOCmpeCmvuCmleCmvuCmsA== IHt9KSwK X2Rpc2Nvbm5lY3Q= IHBlbnNlaQ== INC+0LnQvtGI0YLQvtGA IG1pcm9pcg== IHBob3RvbnM= INGB0LjRgdGC0LXQvNC+0Lk= 0LjQudC8 IG1hbmlmZXN0ZQ== cGxhc3RpYw== INWh1oDVpNW11bjWgtW21oTVuNaC1bQ= IOGDkOGDk+GDkOGDm+GDmOGDkOGDnOGDoQ== IGdyb3V0 L3JhbmRvbQ== IHBo4bqjbg== L3ZpZGVvcw== INin2YTYp9iq2KzYp9mH IOCwheCwpuCxhw== IEd1aWE= 05nSm9C40Ls= IFVtb2ph IGRpY2hhcw== IOCkuOCkv+CkpOCkguCkrOCksA== b3Jnb24= IGdhbmU= 4oCZaGk= LWhhbA== TGVhZGVyc2hpcA== IG1lc3VyZXI= IEdJVkU= IHN5bmVyZ3k= IG95c3RlcnM= INCw0YLRgtGL INC/0YDQtdC00L7RgdGC0LDQstC40YLRjA== bWVzc2U= IGdhdG5hxZ95a2xhcnk= 4KS+4KST4KS14KS+4KSm4KWA LW1hcmtlcg== IE1laHJoZWl0 IHJlY3RpZnk= IEJ1Y2M= IOWkqeWkqeeIseW9qeelqOe9keermQ== INC00L7RgNC+0LPQtQ== IH19LAo= 0JDSmw== IOCkuOCkguCkuOCkvuCksA== X2Rucw== KGZpcmViYXNl IHNhbWFyYmVpZA== RGlzcG9uaWJsZQ== IOmfpuS8rw== 0LfQtdGA 4oCN4KSv4KS+ IOCukuCuqeCvjeCuseCvgQ== IOinow== INC/0YDQvtC20LjQstCw0L3QuNGP w7pkbw== IHJ5ZHlt INCQ0L3QsA== LmNlbnQ= IOCwleCxgOCwsg== IEZpdGNo IHNvc3R1dm8= 6L+U5ZOB IEdhdWxsZQ== IOuMgOyDgeycvOuhnA== INij2YTZhQ== 4Kqw4KuN4Kqv IEFwb3N0bGU= IGNyw6lkaXRz aWtvcmVzaG8= 4KWD4KS34KWN4KSg aWdpcg== INGB0LXQuQ== INio2r7Yp9ix2KrbjA== IHF2b2Q= INC80LjRgNC+0LLQvtC5 2YjYqNmH LSIs IGNvbmVjdGE= IHNpZGQ= 15XXmded LlZhbGlkYXRvcg== RkVC 4KSo4KWN4KSk4KWN4KSw4KSj aWVkaWc= IGR1bmlhbmk= X2NvZGlnbw== ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg INGA0LXQs9C40L7QvdC1 UHJlbHVkZQ== 16TXmdec LkFsdGVy IFBpZWRyYQ== IM61z4DOrQ== IE1hY2ludG9zaA== IFlvdW5nZXI= Qm9kaWVz IHN1c3RlbnRhYmlsaWRhZGU= IE15c3Fs INC30LXRgNC+ X3RyaWFuZ2xl IHRlY2xh INGP0LPQvtC0 b2d5YWthcnRh KFBhY2tldA== KCksCgo= aWxsaWc= IERvbWVu IGjDpG5kZXI= dmVzdGluZw== LmJk IGtvbXBvbg== IHBhbHBhYmxl LmZha2U= QWRyZXM= b3Bj IHBvZ2luZw== IGt1bGxhbsSxbQ== 2YrYrNip INC90LDRh9C40L3QsNGP LnNtdHA= IEJhbGxyb29t IGZvcnRpZmllZA== 4LmA4Lih4LiV4Lij IGzDpW5ndA== IFZpdGFl IGTDtndy dW1iYW5p IEthbGF1 0LvQtdC90L3Ri9C8 IGVsZWl0bw== 15LXmdep15Q= IGRvZWs= dGHEhw== IGV4cGzDrWM= IG1hc3Npdg== 2LXbjNmE2KfYqg== IG5vb2RsZQ== IGJsb2Jz dGVtYQ== IHZpc3Rvcw== IENhc3Blcg== IHJlbGF0aXZhcw== INCv0L0= INC/0LDQu9Cw0YI= 0LzQsNC90LQ= LXN1 X3Zp IExlcm95 IGV4b3JiaXQ= IOGDkuGDkOGDm+GDneGDrA== IE5haHJ1bmc= IEhvcnRvbg== INin2YTYsdij2LM= IM6tzrPOuc69zrU= X01JQw== INio24zZhtuM IEV4cGVjdGF0aW9ucw== QXJ0aWZhY3Rz IGJpb2dyYXBoaWVz IHN3aXJs Q29tcGFzcw== IHBld25v IExpZGw= IHR5cmFubnk= IGFydGk= SHZh LlNP InRpdGxl 4Ka+4Kal4Kau4Ka/4KaV IHN0ZW5lbg== IGludHJhdmVub3Vz IGZyw6VnYQ== J1s= IGFzZXNpbmF0bw== YWRha2Fu IHRhYXJ0 IHNrasO4 INC00LDQvNGD IM67z40= INC+0L/QtdGA0LDRhtC40Lk= ZXJkeWRk IElub2x0cmU= X2lwcw== IOCmm+CmvuCnnA== IGlubmxlZ2c= 77yM546w5Zyo KFN0YWNr IOC0quC1jeC0sOC0leC0nw== IGNhxYJ5 IOWkqeWkqeS4reW9qeelqOWHuuelqA== QVRBUg== YXN1bmE= IFJFQ0VJVkU= R2ln IGdyZXM= IOCmuOCmpA== IHRpZG8= IGZhdmljb24= cW9uZG8= IHBlcnRpbmVudGU= IOCyquCysOCyv+Cyo+CyvuCyrg== KHBvbA== ICo8Lw== IOCyteCzjeCyr+CyteCyuOCzjeCypQ== IEJlc2l0eg== IGZ5cnN0dQ== IH0pLAov IHVwcGzDvXNpbmdhcg== UFNE IOGDm+GDruGDoOGDmOGDk+GDkOGDnA== IGdvdm9yaQ== L3dpbmRvdw== IG9iaXNr IGJyYXVjaHN0 PiINCg== U2VtYW5h IOCuquCuvuCusg== IEZBVk9S aW5mZXI= IOC0ruC1g+C0pOC0pg== 2KfaqduB IG1pc3N0 aG9vZg== IGVudm9sdmVy 0rXQuNGC zrrOv8+F IOe6rA== IGNvbWJhdGluZw== INin2YTYstin2YU= 7Iuc7ZeY 4oCUdGhleQ== Z2VzdGFsdHVuZw== IHF0ZA== 2IzYjA== Y2VwY2nDs24= ZGVhZGxpbmU= IM66zrnOvQ== U2NlbmVz IHNrZXB0aWNpc20= X3BldA== W3NvdXJjZQ== IGJhc2FsdA== INCd0JDQotCe 0L/RgNC10LQ= IHByaW9yaXRpemVk U3Vl 4Lat4LeU4LeA INeW16g= IE9ndW4= INC00YrRgA== IG1hdMOpcmlhcw== IOe9kei1jA== IOCupOCuvuCuleCvjeCulQ== dW1lbnRlbg== INmH2YbYsQ== IOS5kOWkmg== IGTDqXBhc3Nlcg== YnJpdGU= J10pKQ0K IG90ZQ== bMSxeW9y ZGxh bWF4aW1pemU= IHF1ZXJlbmRv X05PVElDRQ== IGZhdm9yZWNlcg== INmF2LPYpA== IExvY2tlZA== TGljZW5jZQ== 4LiE4LmI4Liw IHNlcGFuamFuZw== 6Yar 5LiN5Y2h55qE IHRhaGk= dHJpYw== IOCquOCrgeCqpw== IHByb3RhZ29uaXN0cw== IGZlbWluaW5h RWFzdGVybg== LmFzcGVjdGo= WFhYWFhYWFhYWFhYWFhYWA== IGthxbxkeW0= QnVzdA== IFNjaGlw INC30L7QvdC1 IHZlbGk= ZXNjdQ== IGRpw6k= IENhbXBpbmFz IExFTg== LmV4Y2x1ZGU= 6KW/5ri4 LnVubW9kaWZpYWJsZQ== aXNkaWdpdA== IGFtYXNzZWQ= X2NvbnN0cnVjdA== 6auY44GV ZmlybWFzaQ== INKx0YHRi9C90Ys= IGJlZXA= IENvbXBsZXRpbmc= 2YPZhtiq IOC4peC4lA== L3Rhc2tz cGlja2xl IEllc3U= IEVyd2FydHVuZ2Vu IOCkleCksuCljeCkqg== IGNpdHRhZGluaQ== IFNwb3Rz IM67zrU= aXBwcw== IOG7i2Thu4s= IEhlcmJz IERhdGVuc2No IHNwYXJz IHRhbmFtYW4= IHJvZGk= ZXhwZXJpbWVudGFs INin2YTZhdiw2YM= IGJlw6s= KG1pbGxpc2Vjb25kcw== aW1wbGFudA== IG5lY2Vzc2FyaQ== cGFyZ25l IFN0dWRp INin2YTYo9it2K/Yp9ir IOCkquCksOCljeCkr+Ckn+CkqA== IGdlYmV1cmRl CUND 4Z624Z6b4Z+L 0JHQsNGI0qHQvtGA0YLQvtGB0YLQsNC9 44Oi44OH44Or zp/Oow== PWxvZ2dpbmc= Slc= IHVud2F2ZXJpbmc= IGRvc2E= IMOWxJ8= IOCmquCnjOCmgQ== 5LiN5bCR Y29udHJp IGfDvG5p IEJlbGVkaXllc2k= IOGDkOGDm+GDmOGDoeGDkA== YWlzdGU= IFBhcnRpY2lwYXRl INek15fXkw== U2Nhbm5pbmc= aXNtb2Q= IHNhaWxvcg== dWRsYQ== IE1rb2E= L2Ryb3A= bMOkdWZ0 IGJsb3F1ZXM= 4LK+4LKo4LOB4LK1 INCx0ZbQt9C90LXRgQ== Y2xhc3Nl aXNlc3Q= INeV15HXlA== IGzDoXRoYWly INC60LXQu9C10YI= IFBpY2tpbmc= c2VjYQ== IGFudGl2aXJhbA== IFhC aGlhdg== IOCmquCni+CmuOCnjeCmnw== enlteQ== aMO2aHVuZw== IGzDpMOk IHJhbmRvbW5lc3M= IG9mZml6aWVsbA== INGC0LDRitC80LjQvQ== INin2YTZhdi02KrYsQ== IFRvd25zZW5k Lm5hbWluZw== INC90LDQv9C+0LvQvQ== IHRyYXZhZ2xp 4LC/4LCv4LCw4LGN S3Vw YWtleQ== IEJTT04= UmVzb2x2ZXJz INC/0L7Qu9C40YLQuNC60LA= IGppbnM= IGRhdGFudA== INC40LDQu9Cw0LPQtdC40YI= dWNjaQ== IEbDuHJveWE= IG5vc2E= IGJhcnJpb3M= IOGDm+GDlOGDquGDnOGDmOGDlOGDoA== X2VuZW15 IOCmquCnjeCmsOCnh+Cmrg== aWJpbmk= IOWkp+WPkeW/q+S4iei1sOWKv+Wbvg== Q291cnM= IOC4leC4reC4mQ== 57yT5a2Y zrzOtc+B IEZpZ2h0ZXJz IGNvbWJ1c3TDrXZlbA== IGNvbnNpZ3Vpw7M= IOCwquCxjeCwsOCwr+CwpOCxjeCwqA== INGE0YPQvdC00LDQvNC10L3Rgg== IE1ldG9kbw== IG1lcnM= csOr IGJhaXhvcw== dG9m ZGVzY2VuZGluZw== 6ICB5Lq6 IHBva29q IHN1ZG9rdQ== XSldCg== OlVJVGFibGU= KERF IHJlbGV2ZXI= b3dlcmVk IOaXpeacrOS4gOacrOmBkw== IHRla2k= 44Gh44Gq44G/44Gr KHNjcg== IMW+ZW5zaw== Iixb IEVxdWlwcGVk IGdhbGF5 dWdodWxp IHNhcmNhcw== IHBvbGl0aWtr IOCknOCkv+CkguCkpuCkl+ClgA== IFlvcnViYQ== IHJlZ3VsYWNpw7Nu IEhhdXNlcw== IEV1cA== SG9ld2Vs enlrYQ== dmds LlNPVVRI cGxs IGZpeMOp SUFB IGVuY2xvc2luZw== INin2YTYqNi32YjZhNip aXNzw7Vlcw== 0L7RiNCw0L3QtA== X1BSSVY= IOCkruClh+CkueCkqA== IG9xYWF0cw== 0LjQvNC+0LPQvg== IEhvb2RpZQ== 0J3QsNC30LLQsNC90LjQtQ== LmNhc2g= IG9ibGlnw6k= INin2YTYp9mF2LE= CWxw IOC0j+C0pA== 0L7RgtC10LrQuA== IHZlcmFic2No IGtuaWg= 0q/Qu9Cz06nQvQ== IGhvbm91cnM= CWRm J2FxdWVzdA== IHNhaGlqaQ== INin2YTYqNix2YTZhdin2YY= IGludGVybmV0dQ== yZtu IERJRg== 0LjRgtC10LvRjNC90YvQvNC4 15LXnNeZ16o= IOC2u+C3jw== IGNsYW1wcw== zq3Ovc+Ez4HOvw== Zm9yYWxs X1J1bg== z4bOsc+Dzrc= 5pS+5b+D IOC0pOC1huC0sw== IFN0b3Bz bnTDpA== IGNvbmbDqXJlbmNlcw== INin2YTYpdmG2KzZhNmK2LLZitip IOCmuOCmleCmvuCmsuCnhw== IE1lY2tsZW5idXJn IHp3ZWl0 IHDDqWRhZ29naXF1ZQ== LnBhZw== YWppYg== bW9uYXQ= SU5UUk8= 0YTQuNC60YE= INi52KfYrw== dWdpYXQ= eXRvcmNo 4Kqo4KuN4Kqa IGxhesSxbQ== aXRzdWxv IHBvbG92 ZW5kZWVscw== 2YTZidmC2Yk= X1ZFUlRJQ0FM b3JuYWlz IGludGVyY2VwdGlvbnM= IFBlZHJh QmFydA== 4LmA4Lie4Lil4LiH LnJ2 CXByaXY= CXZlcnRleA== L2pvYnM= 0YfRi9GB0Ys= IGhvbm9yYXJ5 ICIqKio= IOCyteCypOCyv+Cyr+Cyv+CyguCypg== X2VuY29kZWQ= aGlsYW5nYW4= IFdBTEs= CUNTdHJpbmc= INin2YTYqtmH2KfYqA== IENSRURJVA== 6ZuV 5a6i6YKm INW41oDWhNWh1bY= IGNvbWJpbmFkbw== TWVzaGVz d8O8cmRpZ2tlaXRlbg== UmVwcmVzZW50YXRpdmU= dGFuaw== LnByb2JsZW0= X2l0ZXJz 5a+55Yi3 1bXVodW21avVtg== TlNB amRr XSE9Jw== b3Row6lyYXBpZQ== IEFRVQ== 4Keo4Kep INix2qnavtiq25I= KHR1cm4= IOqwgOuKpe2VqeuLiOuLpA== IHRyZWludGE= KGJsb2c= IE5vaQ== IG91dHNvbGU= d8Op CWVuZGlm INGF0LjRgtCw0LnSk9Cw 4YOj4YOg4YOj4YOa4YOY INKz0LDQt9C+0YA= IOCwsOCwvuCwnOCwleCxgOCwrw== IHlhcQ== IG9sZGFs IOCwheCwsuCwvuCwl+Cxhw== IGhhdGVmdWw= Pi88 IHFx5b2p56Wo 4KeD4Kaq ZW1vZGU= 4KSw4KS+4KSu 4Z+h4Z+g IGJlc2NoaWtiYXJl IGJvdGVsbGE= INC40LfQu9C+0LY= 0YLRi9Cz INin2YTZgtiv2YrZhQ== R3Jlbg== IHFvbg== IHByemVkc2nEmWJpb3I= IGJhcnJpYw== J2FuYWx5c2U= xaFvYW50 IGFkbWk= IG5la2E= 4KSV4KWN4KSf U1NS INCR0ZbQtw== INCh0LDQsQ== aWtoYWls IMOHaW4= RUxFTUVOVA== dW5qdW5n IOCyuOCyv+CyrOCzjeCyrA== V2Vsa29t K2w= 15nXkNeq IC0tPgoKCg== IGdi4buNZOG7jQ== X1NZTg== IHBhcmFuZw== IHpkZWN5ZA== INC40LDQu9Cw0YXTmQ== QlE= IHNlw7FhbGFkbw== IOW+ruS/oemHjOeahOWkqeWkqeS4reW9qeelqA== IFBpY25pYw== 4Kav4KeL4KaX4KeN4Kav IGVsZW1lbnR1bQ== cOG7pXRhcmE= QVJUQQ== INCx0LDRgdGC0LA= IHNhbnRp w6hycmE= IGphcmVubGFuZw== IGNpYXM= IOCkqOCkv+CksOCljeCkruCkvuCkpOCkvg== IEFXRVNPTUU= YWZpbGU= INGF0YPQttC1 CVZlcnNpb24= KGNhbmNlbA== IGthdHU= LWhlbHBlcg== CQkJCQkJCSAgIA== VU5P xaFuw60= IENvbW1vZGl0eQ== V2FsbHM= VUJMSVNIRUQ= IGludmVu aW5hcmU= INGB0L/Rg9GC IFRhYmxh LdGA0LDQtw== INC40LDQtA== INin2YTarw== w6lobmE= IGtvcnRpbmdz 4KSC4KSk4KWB 5oC75Luj55CG6IGU57O7 IGxldHRlcmU= IFppZA== IOC0heC0reC0v+C0qOC0rw== bHRyZQ== IENPTkRJVElPTg== IG1hZHU= INCf0LDRgNC4 IOC0uOC0vuC0ruC1jeC0qg== 5Y+45rOV 4KuH4Kqy4KuL IGZ1dGlsZQ== 4K614K6x4K+N4K6x b2dpY2Fs IOCkuOCkruCljeCknQ== IHVsYW4= 5aC1 Q2hldnJvbg== IFBhcmVudGluZw== w7pl PD4oKSk7Cg== ZWRpY2luZQ== 0LjRgNC+0LLQsNC90LA= a21z dmVkb3I= LmluZ3JlZGllbnRz YWRkaWVz IOCmrOCmmeCnjeCml+CmrOCmqOCnjeCmpw== Umlk bGVraWxl IHJvZHphanU= RGQ= IGF1c2Ryw7xja2xpY2g= IOmHjeW6huaXtuaXtuW9qeadgA== TkVH IGNhbGU= IGRpYXI= IHVuc3Vz IEhBUFBZ TG9vcHM= 6LaF56Kw5Zyo57q/ IFRhcm4= XE1haWw= 44OK44Or INGB0YLRgNC+0LM= IOCkheCkqOCkvw== IHdyaW5rbGU= IMWhaXI= KGV4aXQ= IOCmrOCmvuCmgQ== INin2YTYq9in2YbZiNmK2Kk= X2NvaW4= KGRpYw== YW5nYXI= IOaWsOeWhg== IGtva29z 4oCZ66W8 IHRlbnppag== IOW5v+ilvw== 5Zyo57q/6KeC55yL5Lit5paH5a2X5bmV IOGDnOGDkOGDkeGDmOGDrw== IG3DqXRybw== IOCkuOCkruCkr+CkruCkvg== IHB5cm8= IFBhbnRyeQ== IOGDk+GDkOGDoeGDkOGDleGDmg== 5raI6Ziy INGN0L/QvtGF IGhpcMOzdGVzZQ== LlBhaXI= 5oC757uf IOWkp+WPkeW/q+S4ieW8gOWllue7k+aenA== dHJhag== IGNyYXlvbnM= IEVpZXI= c3B1bnQ= INC60L7QvdGG0LXRgA== 15nXmdeR16LXqA== 4LKh4LOB4LKq4LK/ IOWkp+mxvA== IGNodXBl 4K6w4K6u4K+N IGJlbGlydGls INC80LXRgtC+0LTQvtC8 2LfZiNin2YbYqQ== VG9kYQ== IGNhbGllbnRlcw== IOCwteCwguCwn+Cwvw== IEJlcnRyYW5k IGNvbm9jZW1vcw== INC20q/RgNCz0LXQvQ== LkFETUlO RkxU 5b2m IG1hZ2FuZGFuZw== LWFzc2lzdGVk aW1sZXJp YXTDoXM= 0LDQstCw0LnRgtC1 INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsA== 0LjQs9GD0YDQsA== IHVuYXQ= IHZvaWNlbWFpbA== TXVk IOCkrOCkv+CkpA== IHllYQ== 4LWL4LSs IOCmpuCmv+CmqOCnh+CmsA== IOC0qOC0ruC1jeC0ruC1geC0n+C1hg== IHNpeWFz IOmTrQ== LkRlbA== b21lbnR1bQ== IFJhbmE= IENlcmNh TGVpZGVy dWF0YW5nYQ== 0YLQtdGA0LXSrw== IHNpZW50ZW4= IOCqleCrjeCqsOCqv+CqleCrh+Cqnw== 4KeH4Kas4Kay YW1idWxh CXV0aWxz Q2h1Y2s= INC80LDQt9C60YPRgA== 5YK3 dXJnZW50 IGNsYXZpZXI= 0YrRhw== L3ZlY3Rvcg== X3Bpbmc= IOCkreCliw== IGlzYWdvbw== 4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz IGVtcHJlZW5kaW1lbnRv a+G7jXRh IHZveWFudA== KGZm INGC0LDQt9Cw IGpheQ== IGNvbG9yZWN0YWw= IEtsb3Bw IFdXRg== IGdyZWlmZW4= X2RldGVjdG9y 4LKj4LON4LKj4LOB INC60YDRg9C2 OnBvaW50ZXI= zrvPic69 IGZlbWVuaW5h IFNlcmVuaXR5 X3NjaGVk INim2KfYsQ== U0tG aWRm xKdkYQ== IOCqk+CqqOCqsuCqvuCqh+CqqA== IE1pY3Jvc29mdCdz 4LS+4LSq4LS+4LSk4LWN4LSw wq1yZQ== IGVuZ2Fnw6k= UGxvdHM= IGF1eGlsaQ== ICAgICAgICAKICAgICAgICAKICAgICAgICAK aW5pYWk= bG9ja2Vy IOyLuA== INWj1oDVuNaC1bQ= LUVhc3Q= V2FsbHBhcGVy IHN1a2s= LlJVTlRJTUU= 4LmA4LiZ4LmH4LiV4LiX4Lij4Li5 INC60q/Rgg== IMSwcmFu INC/0YDQsNC/ INC80YPQstC+ IHNhYm90YWdl 0JDQnw== IGVyacWf 4LCo4LCy4LGB IFNwb2tlbg== IG1hc3R1cmJhdGlvbg== J2ludMOp UHJvdmluY2lh IOCmueCmpA== 0LvQtdC90L3QsNGP eml5 IGluY29udHJv IOCqsuCrh+CqteCqvuCqruCqvuCqgg== 4LmE4Lih4LmI4Lil4LiU4Liq4Lib4Li14LiU IEN1cnNl IG9jdXBhZG8= b2tvdA== Z2Fsa2Fu 5Zue5p2l KWl0ZW0= IGxvdXN5 ID1b IFNZTUJPTA== IHdhZGQ= L2xvb2s= IGNvaGVzaW9u IGxpamXEjQ== IGNvcHJv INGC0LXQtg== TWF0cmljZXM= INW+1aHVs9Wh1bw= bmVoaW4= IHBhcmNpYWxtZW50ZQ== INC606nSo9Kv0Ls= 4LKo4LK14LKm4LOG4LK54LKy4LK/ IFdvbHZlcmluZQ== RW5yb2xs IEhvcmRl bmVqZQ== YXJpbm5hcg== INC60LvQtdGC0LrQuA== IGF0b2Y= c3RydWN0dXJlcw== IGJlcmVpZGVu 4oCZw6l0cmFuZ2Vy IOCmquCmtuCnjeCmmuCmv+Cmrg== IHN1aHU= 4Z684Z6F 0L3RkQ== INCo0Yw= bGVibg== IEVPYmplY3Q= IOWkqeWkqeS4reW9qeelqOWFrOS8l+WPtw== RW5jaGFudA== W0c= IGRva3Q= 4Kaq4KeN4Kao 0L7QuNC0 4Lin4Lix IHRyb2I= IGVwaGVtZXJhbA== INGA0LXRiNC40LvQsA== zrrPhM63 w7N3a2k= IGJhxJ/EsQ== IOiOsQ== IOCkquCkoeCkvOClhw== 5LiJ6IKW IHdpbGxpYW0= 5a6e5L6L Y3puYQ== w7xl 5aSn5Y+R5b2p56Wo IOCqnOCqruCrgA== IE1hbGQ= 4YCQ4YCa4YC5 Y2hhbGs= IHRhZ2xpbmU= am5h RXhwZWN0YXRpb24= ZWx1YXJhbg== IOW9qeelnuS6iemcuOWmguS9lQ== IHJvZGl0 INCw0LDQvdCw0YbSs9Cw0YPQtdC40YI= IGRlcGFydHVyZXM= Y3JlYXRpdmVjb21tb25z 4LiV4Lil4Liy4LiU IG9wZ2Vsb3N0 LnRodW1i IHJvb3N0ZXI= IOyViuyVhA== IOuLqOqzhA== IGlyZ2VuZHdlbA== d2Vya2luZ3M= YXJnaQ== IGV4dHJhY2VsbHVsYXI= IGzDpGhlcw== IG1qZXN0YQ== IEFCU1RSQUNU 4YOb4YOQ4YOS IHB1cnBvc2VseQ== INWG1oDVoQ== IGVyYnlu YXd3 cHJvdmVtZW50 IG1lcmNhbmM= LWphdmE= IHVsYW5n IG9wbmFtZQ== 15XXntei16g= 0LrQvtC0 IOq5jA== Jl8= IG1mYW5v cGVjdHJhbA== 4YOg4YOd4YOe IE1hdGk= IFJldHJvdXZleg== 4KS44KWC IGh1dnVk dW5ndWE= IOCyuOCyguCylQ== INK705nQvNC005k= IFFSZWN0 0LDRgtC+0YDQvtCy IG5pYmE= IGxlbm5l IOq3uOuMgOuhnA== 0L7Qu9C+0LPQuNGH0LXRgdC60LjRhQ== IHByZW1hdHVyZWx5 IGFwcmVzZW50YcOnw7Vlcw== IG9maWNpbw== X1JB cWFyZmln VmnDsA== IFBlZGlhdHJpY3M= IFJlc2lu IEFuZ2Vow7Zy aW1sZXI= OnBhdGg= X18iLA== aWN0aW0= IGxsZXZhcm9u IEFudGliaQ== INC20LjRgtC10LvQuA== IEVZ 2LLZiNix YWRvcmlhcw== U2VjcmV0YXJ5 IC9cLig= IHBvbGljw61hcw== LW1hbnk= IEx1Z2Fy 0JrQvtC80L8= INin2YTYo9iz2KrYp9iw IGludGVybWVkaWFyeQ== INCT0LDQtw== IExTRA== IGZ1bmdlcmFy IEJ1Y2hhbmFu IGF0dGVudWF0aW9u IGVtaXNzw6Nv INGB0LLQvtGR YWZydWl0 IOWkqeWkqeenjeW9qeelqA== IFrDpGl0 xYRza2k= IEdhbGFjdGlj IHJlZGRpc2g= Vmlj INis2YfZiNiv ICQj 4Kq44Kq+4Kqv 0YDRg9C/0L/QsA== IFJ1ZG9sZg== IG1pbsOk 0LPRltC90ZbSow== IFLDqWdpb24= 0LzQsNC70LDRgA== 6ICD6JmR 5ZOB6LSo IGFpa2Fhbg== KHN0cmlw 4K6/4K6Z4K+N LWFwcG9pbnRlZA== IGtvbnRl LlhQYXRo X2NoZWNrcw== Ij4nLAo= INmF2LTYp9ix2YrYuQ== INec15TXpg== IFBldGVyc2Vu IGJ1bGxpb24= VkVZ INGD0LbQvg== IE1pc2Vy IG1vZ2Fv IHZlc3RpYnVsdW0= 4Kqo4Kqo4KuA IOCyr+Cytg== 5qyi5LmQ X0lW IGTFgnVnbw== IMO2ZGVtZQ== INC+0YDRi9C90LTQsA== YnVkZHk= INmF2LHbjA== IOCkpeCli+CkoeCkvOCkvg== LcSL SVRPUw== IERlY2lzaW9ucw== X212 2pnYpw== dWdhZG9y YW5kYXR1 INek15DXqNep15g= IGNpxJnFvA== IGJ1YmJsaW5n LHBhdGg= INmF2YfZhdin IEhhcmFsZA== b3JpdHk= INC00LDRgtGD 4LiB4Liy4Lij4LmB4LiC4LmI4LiH4LiC4Lix4LiZ IGJsb2tl UmVwbGFjaW5n ZXRs 0J/RgNC+0YE= 0LzQsNGH IOCqteCqvuCqrw== X3Rlc3Rpbmc= aW1hbQ== IGzDpnJlcg== bGFjaw== X0ZC Zm9ybWFs IGhhZ8yDdWE= IEtQSQ== 2YjYs9i5 LmJi IGVldXdlbg== IOCkreCkh+CksOCkueClh+CkleCliw== IFpvbmVk IOCyhuCytg== IHRpa2V0 4LKo4LK/4LK14LK+4LKw W10pewo= IOCkuOCkquCkqOCkvg== CUVkaXRvcg== IGVtcHJlZW5kZWRvcg== w7xuZGVy CXNwcml0ZQ== IOeOlueOlg== WUdPTg== IGF1dG9yaXphZG8= b29wcw== IGthcHA= 6KOC aXRlZXJk IGxsZXZhbmRv IOWPkeihqOS6jg== X2FudA== LnVuc3F1ZWV6ZQ== IEFsYW1lZGE= IGd1YXI= LmNoYWxsZW5nZQ== INGB0YLQsNC90LU= bGlmeQ== RWNvbm9taWM= IHRoaXJkcw== 4KuN4Kqv4Kq+4Kq4 IGRldm9sdWNpw7Nu IGHhuaNh INiq2LnYtw== 4YOb4YOQ4YOh IHR1dHVy IHVuaW1hZ2luYWJsZQ== IFN1YnNpZA== Lmtpbmc= X0RQ U09S IEdyYXU= U2Nv IHRvc3RyaW5n IHRpZWw= Tm9ybWFsaXplcg== LkRpc2FibGU= IGlzY3I= INmK2K/YrtmE IEFwcGxpZXM= 4Kao4KeA4Kak INii2YXZiNiy2LTbjA== L2luYw== 6Iqv IHdpbmdlcg== cG/FiA== IGV4cGxvcmVycw== INmG2KjYp9iq IGVlcmRlcmU= aXRlcmk= IGJlaGFuZGVsbg== IEJOUA== INC+0YLRgdGD0YLRgdGC0LLQuNC4 LXNwaW4= V2hvYQ== INGC0rHRgNCw0ps= KioqKgoK 15XXpNeQ IOCkruCkvuCkhw== IGJlc2x1aXRlbg== IEp1bmlv IE5SRg== R2V6 INC/0YPQtw== IFllbQ== INKb0LjRgdC80Lg= dGFpbmU= IHByZXRh IEluZ2zDqXM= INGN0YTRhNC10LrRgtC40LLQvdC+0YHRgtGM IGVtYmVsbGlzaGVk IHppcHBlZA== IEVlcnN0 INin2YjZhNuM2Yc= IOGDo+GDkOGDm+GDoA== Oyc7Cg== IOCuheCuqg== ZW5zaWNz LXJhbmtpbmc= IGx1dGU= IFNob3BwZXI= IGtvbnRyYcWt IOCmrOCmvuCmh+CmsOCnhw== IHdhZmZsZXM= IHRhbWFra2Vy aXRoaWF1 zr3Ov860zr8= IOCkqOClh+Ckn+CkteCksOCljeCklQ== IGNhc2NhZGluZw== 4YCt4YCQ4YC6 IHRha2lt IGNsYXY= YWNvdHRh IEh1bWJvbGR0 QnA= Tk9USUNF IOCmpuCmvw== IEhvYmJpdA== QXBwcm94aW1hdGVseQ== IFpoZWppYW5n 5Y2P6LCD IHRyYW5zZm9ybWF0aW9uYWw= IHByb2Zlc29yYQ== IGluZGljYW4= IOCqtuCqleCrjeCqrw== IHRlbGFz X25lZWQ= IGTDonk= Lk1hbmFnZWQ= IGx1Y2lk c2ti 4YOT4YOY4YOc4YOQ4YOg4YOU CWxpbmVz IHZpdmlkbHk= 0YLQvtC80LDRgg== INC/0LDRgNCw0Lc= YWplbWVu INmF2LbZhdmI2YY= LlNFTEVDVA== IGtsaXlhbg== INGB0YLQsNC70ZY= YmV0YWw= INGI0L7RhdC+0LnQvQ== ICcqKg== KFRleHR1cmU= IMOubmFpbnRl INin2YTYrdi2 IERhcmN5 X0NU IHdpY2tldA== IGxvdmFibGU= c2Vybw== IGdlcHJvYmVlcmQ= Kzwv IG9yaWdpbmFsbWVudGU= L3Jhdw== IHVsdHJpY2Vz IOycoO2YlQ== d3Jr IGJvbHNpbGxv IOC3g+C3kuC2ug== INin2YTYudin2YTZitip X0RST1A= IGZsaW5n IOODkOODg+OCsA== bsOtb21o IGV6ZWs= Kiki IOCkqOCkv+CkleCliA== UGVkaWRvcw== IHN0YW5ubw== IHZlcnVyc2FjaHQ= QmFzZXM= IEJpb21lZGljYWw= IHZpaW0= IEh1cnJpY2FuZXM= IOWunemprA== IG1lbW9yaXpl IEZyaW5nZQ== IOyXhuydjA== INGA0LDRgdGB0LvQtdC0 IOS5neW3ng== IGjDqXJpdA== IGhhbXBlcg== 64ur L2hpc3Rvcnk= IGdlbGlw W2hyZWY= 4KS+4KSq4KWB4KSw INC/0YDQvtGC0LXRgdGC CWRhbw== IOCkheCkqOClgeCkuOCkqOCljeCkp+CkvuCkqA== bWVzdGVy dm7DrQ== IHRo4bqlcA== 2LHZitmI2YY= ZGVja3VuZw== 77yM5Y20 TGFkaWVz OnJldHVybg== IHF1YWxjdW5v INGB0L7RjtC3 IGJlaWc= w6dhZGFz IG/DrWRv INOo0YTTqQ== INGB0YLRgNGD 4Lio4Lix4Lie4LiX4LmM IGRpYXJpb3M= INC60LDQudGA0LA= Q29udmVydGlibGU= INmK2LPZhdmJ IGxldmVuZGU= IGFwYWdhcg== dW1zeQ== Ow0KDQoNCg0K IOCkpuCkv+Ckj+CkleCkvg== aWVyZXI= IHVzdWY= IGVuZG9nZW5vdXM= X3Nydg== LMK7 IGluZm90 VUJB 2KzZhdin2Ko= dmVsbG91cw== IGZlcnJvdmk= IGV6aW55ZQ== INCw0LPQtdC9 zrnPg868z4w= WW9u 4Ka+4Kah4Ka84Ka+ IHZpdHJl 4Liq4Liy4Lii YWNhZGVtaWM= IOGDq+GDmOGDoOGDmOGDl+GDkOGDkw== IOWkqeWkqeS4reW9qeelqOWkp+elnuaOqOiNkA== w6hzZXM= IHRyaWY= 5aSW5Zu9 SXRv z4TPgc6/z4Y= IHZyZWRl IEFkdmVydGlzbWVudA== LWRldmVs IHZlcnRyb3V3 X2lmYWNl IOCmleCni+CmpQ== IHJlc3BpcmFy INC30LDQvdGP0YLQuNC5 INCf0L7Qu9GM IGRlbGVjdGFibGU= IHNlZXA= VUlTY3JlZW4= w6R1ZGU= 15XXnNeq 6ICB54af5aaH INWw1aHVttWk1aXVvQ== IGtpbmRsYXN0aQ== IGTDqWd1c3Q= IHJhcGlkbw== IGNocm9tYXRvZ3JhcGh5 IHhvb2c= 4LSV4LS+4LSy IFRyYWl0cw== IENhbmFkaWVucw== IGluZMOpcGVuZGFudGU= 77+j77+j aW9yYQ== IHRyYWpldMOzcmlh 0YDQuNC60L4= d2lyZWQ= w6FtaXRl INeU15HXlw== IHPDqWxlY3Rpb25uZXI= IGZpYXM= IHNlYXc= IGlzb3RvcGU= aWRrYQ== 0LXQutC70LDQvNCw X3NhbA== IGFyY2hh L2FjdGl2aXR5 IGFiaWVydGFz zrXPgc6z 4LS/4LSV4LWN4LSV4LSy4LWN IOGDl+GDlOGDkOGDog== IHZhbGVuYw== 0L7QsdGA0LjRgg== IGFuc29uc3Rlbg== KGRt 15DXqNeZ15o= IFNhbXBsaW5n aXNjYXJk IGF6aWVuZGU= IO2WieuPmQ== 4LS/4LSk4LWN4LSv 0LXRgdGC0LjQstCw0LvRjA== IGdhcmdhbnRh INeR16nXnQ== 57W2 INiw2LHbjNi524E= IGtvaGQ= IHJhZHU= b3JlYXI= IG3DoW1l KGNvbnN0YW50cw== IHZhbGlkYXRpb25z KE5P b2xvZ2ljbw== IHN1Ymk= L3NldHRpbmdzZGlhbG9n IHBhcnRhZ8Op IEVybmVzdG8= 0LrRltC80ZY= 4oCZYWx0cm8= U2ludA== IEjDum4= IGludGVyZXNl b2NpbWllbnRv IOC5hOC4rg== LURF X3JlYWRz CW1hc2s= INCx0LvRjtC00LA= IENvdW50cw== c3TDtsOwdQ== 4YOd4YOZ4YOg4YOQ4YOi IERJU0NMQUlNRVI= L0NsYXNz IHNlbno= IHBhZ2th IGtob2xv IHNjcmV3ZHJpdmVy IOed IOC4leC4seC5ieC4hw== Lk9iag== IHDDqXJpcGg= IHN1YnN0aXR1dGlvbnM= IGtha292 zrTPjQ== YXRpc2tl 4YOQ4YOj4YOR X1Ry cm9x IGNvaQ== Qmxhc3Q= YXJ0aWdlbg== IOCkqOClh+CkquCkvuCksuCkleCliw== IFJvYnVzdA== V2VjaGF0 IGZhc3Rl IOCmqOCmv+Cnn+Cmrg== IHN5c3TDqW11 QVZM IteY QXlh cXVhZHI= IHZlcmJpbmRldA== 15vXldec150= em9ueQ== cHJvZHVrdGlvbg== IENvb2tlcg== IHDDpMOkc3TDpA== LWZyYW1ld29yaw== IGJha3Q= aWxsZW50 IGZhc3Rh IEJlcmdl IOyKueyduA== CXJvbGU= L05hdmJhcg== IGVuc2k= 2KfYqNmK2YY= IGhsb2s= IGtvcmlzdGU= INin2YTZiNin2YI= IGRpc2N1cnNvcw== IG9pc2VhdXg= 0L7QstCw0YI= IEdlb2xvZ2ljYWw= X1JFUExZ IFZlbmRvcnM= IERJRkZFUg== X0lORklOSVRZ INC80LDRgdGB0Ys= LnZzdGFjaw== IGZlbGljaXQ= IGFubm90YXRl IENhYmQ= IHBsYXRlbGV0 IG5lYnVs INei15XXkdeT15nXnQ== IGdld2Fubg== INGF0q/RgNGC CWNoaWxkcmVu IHN1c3RhaW5hYmx5 IGFsZXhhbmRyYQ== INin2LnYtg== TWFyc2hhbGw= LUdv 576O5a65 LWZlcg== KHVzZXJpZA== IGN5Y2xvbmU= INiq2YLZhtmK2Kk= IOC0n+C1jeC0tQ== IOygnOuMgOuhnA== IGd5b3Jz IGNydA== 4KS+4KS34KWN4KSf4KWN4KSw4KS/4KSv IGl6dmk= IMOpcG9jYXM= IOunjOuTnOuKlA== IEtyaXNl LmNvZQ== Y2lhbQ== IGtuaWdodHM= RGV0ZXJtaW5l IGtsYXNl Lm1pbmU= IGJlaW5h am9lbg== INi02KfYuQ== IOCuleCuqQ== IOGDk+GDmOGDlg== IGdlemlubmVu 4Kq/4Kqh IHNtYWtlbg== IGdsaXRjaGVz INCw0L3RgtC40LHQuNC+0YI= dXBob3JpYQ== 0LDQvNCx IOCkh+CkmuCljeCkm+Ckvg== IGxlb24= ZmlnaHRlcnM= IG1lbmVoaQ== IGRpc3B1dGFy LkNvbmNhdA== IOCqruCrguCqlQ== IGvDqg== 44GV44KM44Gf LlJP IGF1ZGl0ZWQ= IExhbWlu 4YOQ4YOj4YOg4YOY YmV05L2T6IKy IHLDpWRn IG9kc3RyYW4= INeh15HXmdeR IOCmquCmsOCmv+CmleCmsuCnjeCmqg== aWVrcw== IGl6dmFq 15zXmdeq IGltdQ== 2rPZiA== ZMOtYQ== LVN0ZXA= Q2xvc2Vy INmI2KPZg9ir2LE= IGZpam8= ZmZhYQ== IGJ1cmdlb25pbmc= aW1oc2U= 4K+B4K6u4K6+4K6w4K+N IOCupOCvgeCuow== IFdpa2lww6lkaWE= IHByZWRpY2F0ZXM= IHVuZGVyZXN0aW1hdGVk IG1hdHJpbW9uaWFs Q2hlY2tsaXN0 IHTDoXJz IGVuZG9jcmluZQ== X2Zvcm11bGE= IOC0teC0v+C0leC0uA== 5oKo5aW9 4Kao4KeA4Kak4Ka/ 5a6i5qeY IOCmquCngeCmsuCmv+CmtuCnh+CmsA== IGFkYXB0YWJpbGl0eQ== 0p/QsNK10LDRgNCw IHVwc2V0dGluZw== IHppdg== IEdBTg== cnLDvMWI IGF0cmHDp8O1ZXM= ZXh0cmFjb21tZW50 QnVlbm9z LmV0aGVyZXVt INio2KfZhNiu IGxpbGxh INin2YTYtdmG2KfYudip IGVuaGFuY2Vy INCR0LDRgg== INqv24zYsQ== em9hbHM= IFNUSQ== ICV7 LnF0 PSov IGxhdGloYW4= IOi/kA== Lk1hc2s= IG9rdXQ= IOCksuCkv+CkqA== L19f IGluZHVj eXB0ZXI= INCe0LrRgg== IG1pZHBvaW50 IM+DzrE= CWV2 IGZlaXRl SHVuZw== IEhlbW9z IEV4cGVk INee15DWt9eg IHRhemE= IHdpZmUncw== IGdlc3R1dXJk 5aSE572a INmI2YTYsNmE2YM= IHNjaGxhZmVu IGR1bnlh IFJhdHM= IHZvbGM= IHN1YnJlZGRpdA== IGthyrs= 5bCx5piv6K+0 INi22YTYuQ== LXBh IHZlcmR3aWpuZW4= IOCksOClguCkuA== IHlveW90ZQ== IHVuc2Ny IGxpd2F0 cmRm IEF6yZlyYmF5Y2FuxLFu IGNvbXBsaWNhZGE= X3BhcnRuZXI= IGludGVudGFuZG8= PGRhdGE= 5aSn6aaZ57q/6JWJ Qmo= IEV0ZXJu LUFuZA== 5LiN5YGc INGA0LDQsdC+0YfQtdCz0L4= IMOnaWZ0 INin2YTZhdi52LHZiNmB LWNhdA== IHphcHI= IHJlZmluYW5jaW5n IOCkuOCksOCljeCkteCliw== IHVraA== IHByw6lmw6lyZW5jZQ== dW12YQ== IGRvbm5lcmE= IFNhbHV0 IGxlcm4= 4Kqc4KuB IHJlZHVjaWRv IOGDoeGDkOGDlOGDoOGDl+GDneGDkw== ZXR0aW5ncw== IFN0YXllZA== IOCkieCkuOCkruClh+Ckgg== IOCmruCngeCmuOCmsg== bmlhcw== bG9mZW4= 0JjQsw== QmFzaWNz IHJlYWo= ZWtpbg== dXdzZQ== ZGlhbW9uZA== IFdlcmVsZA== IHRlbGVmb25p IGlraWJhem8= cGVkaWE= IG1lbnVqdQ== IOCqleCrh+Cqn+CqsuCrgOCqlQ== IGRlc2VuaG9z IFNvbWVib2R5 IOC0quC0sOC0vuC0pOC0vw== IEdSTw== IG9udGJyZWtlbg== TXVsdGlwbGljaXR5 ZW56ZWw= IHlsbMOk YXN5bnnFiA== 4YOg4YOZ IOC4ouC4seC4hw== IGt1bnN0ZW5hYXJz IGNyaXRpY2lzZWQ= IE1hY3M= INCy0YvRgtCy0L7RgA== IERlbmlt enpv IGV4YWN0ZQ== IExvdGlvbg== IEppbnBpbmc= ZW1iZWRkaW5n 6rKB IEVtcGZlaGx1bmdlbg== RU5TSVRJVkU= IGhlcmlkYXM= IGVpZ2h0ZWVudGg= 0L3Rj9C10YLRgdGP IOGDlOGDleGDoOGDneGDnuGDmOGDoQ== IERhY8SD INGD0YXRg9C0 YW5mYWF0a2Fu Img= IE1hcmdhcml0YQ== 5Lmw5aSp5aSp5Lit5b2p56Wo 4Kqk4Kq+4Kqc4KuH4Kqk Lnh4 X0NSRUFU J11dOwo= IEF4ZQ== INC40LzQtdGO0YLRgdGP INi12Yo= IOCkqOCkv+CksOCljeCkpuClh+CktuCklQ== IHRvcnRpbGxhcw== 6Iet IGZhbHNhcw== IGZyZXF1ZW50ZW1lbnRl X3ZvaWNl IGh1eg== IElNZXNzYWdl dXRvcmE= INC/0L7Qu9C40YbQuNC4 aXZpZHU= 5ZKM5bmz IEtubw== INCx0L7Qu9C10LfQvdGM IGxpYmVyYXRlZA== 4YOU4YOg4YOU4YOR4YOY 4oCZOw== X2ludmVyc2U= TGluZWNhcA== IFZhaXM= ZGFuZw== LlVOS05PV04= IGh1ZWw= INGB0L/QvtGB0L7QsdC90L7RgdGC0Yw= 4LSV4LSw4LSj ZnNjaA== IOCkmuCli+Cknw== KHBv KFVubWFuYWdlZA== IHTDpHlk IHByb3TDqWluZXM= TmludGVuZG8= INei15XXqdeZ150= INmK2LnYqtmF2K8= IGNvbW11dGVycw== 1LHVvA== IGFib2xpc2hlZA== IGvDpXQ= T3BlcmF0aW9uYWw= INGH0YDQtdC30LLRi9GH0LDQuQ== zrXOr868zrU= IG9mZmVydGVz IGxldmVyYW5jaWVycw== IOCkuOCljeCkteCkvuCkpg== IGludGVuc2lmaWVk IOC4o+C4lg== aG9yZW5kZQ== IC4uLuKApgo= LmRvY3VtZW50cw== IHN1bW1vbnM= INGC0LXRgQ== IOCqnOCqv+CqsuCrjeCqsuCqvg== IGlsaW1pdA== IGVuZ2FnZXI= IGNhbmNlbGxpbmc= INCz0LXQvdC10YDQsNC7 IFdheGE= IHRpeWFu IENpbmNv IOCqteCqvuCqr+CqsA== 44Gu44G/ IElkcg== IEJDTg== YXdhcmFu b250YXM= IG90b8Oxbw== IEtvZGFr INmI2KfZhNmF2KQ= dW5kZXQ= cGh5cg== IOS8mOWunQ== IC9eXA== IG3Do2Vz IHNjYXA= IOCkuOCksOCksg== KFJPT1Q= Y29uZmlkZW5jZQ== IHJpaXBw IG1hbmM= IG5pdHJpYw== 4oCUYWxs CW5vdw== IHBlcmlvZGVu IHThuq1u 0LHQsNGC0Lg= VGVtcGxl Lm51bXB5 IHJlZmxlamE= Z3JhZGVy IHZpZGVvanVlZ29z WUF4aXM= LkFkdg== IGRldG9u IHNjYW50 IGRpYWdub3Npbmc= IEdlbmVz w6FuZG9ub3M= IENhZXNhcnM= IFNvdXRod2VzdGVybg== LmRlc2NyaXBjaW9u IElURVI= aWdzdGU= IGVmaWPDoWNpYQ== Y2hlY2tzdW0= IGNoYW1hZGFz 4Kay4Ka+4Kef 0LjRidCw IHRvcmNpZGE= 44Oe44O8 nuWuoumCpg== X01VVEVY dWxhw6fDtWVz Pj4s IHNhcGF0 IEFuYXZhcg== IGxpZ2VyYW1lbnRl IGVzdHJlbQ== IGFjY29tbW9kYXRlZA== PjwhWw== 57+B LW11cw== QnVzaW5lc3Nlcw== IGt1cGFuZ2E= IEhld2xldHQ= INmF2YLYqg== INGB0LDQvdC40YLQsNGA IGJoZWlkaA== KENv TWFza2Vk LWVrd3U= JHJlcXVlc3Q= X2NvbnRpbnVl VGhyZXNo IHByb2NoYWlucw== 6L+U6ZKx INC40LfQvNC10L3QtdC90LjQtQ== 1bjWgtW21aXVtg== dmVtb3M= SE9SVA== IE91dHJh IHRlc2xpbQ== IOCkmOCksOClh+Cksg== IOCyq+Cysg== xI1r INC/0YDQsNCy0LjRgtC10LvRjNGB0YLQstCw IHJ1bW0= IMO8c25h IGxpdHJv IC8vLy8vLw== 44OG44Os44OT 4YCK4YC34YC6 IGFsbWFs IGh5YnJpZGU= IGF1dG9lc3RpbWE= IENvbXByZXNz IGRlcnNvbQ== IMOpY2h0 IHNhdHRl SVRJTkc= IENlY2ls IFZpcmc= INee16jXkNep J+Cmsg== YXR1dGFrbw== IEZFTQ== IHBvcnR1Zw== X0Fic3RyYWN0 IGVuc2XDsWFy INmF2K7aqduQ eWVl c3BpbGw= IHNraWVy 0KHRgNC10LQ= IGp1c3F1ZQ== UXVvdGVk IENsZWFycw== LlJVTg== YXRlbGxpdGU= 4YGa YXLEsW5kYQ== LkJhbms= IGVzdHJlbm8= IGRlZWdhYW5rYQ== IGF1dG90 LWxpdGU= aXNnZQ== TW92ZXI= IGdhdW5h IGNhcmF2 INCz0LvQsNCy0Ys= INiz2qnbkg== IM67zr/Ouc+Az4zOvQ== INGI0LDSs9GA0LI= 6K645Y+v6K+B U29sdmVk IGJpZGV6 aXNlc3PDpA== IHphcG9zbGVu IGtvbXByb20= IFRlbWVy IOCkhuCkieCknw== IHJldGlybw== Vm9t CVB1YmxpYw== IGd1c2h5 dmVzc2U= dmVudGFz Lm1lZw== INC/0L7QutC+0LvQtdC90LjRjw== IHVjZmlyc3Q= IOe1suilqg== IGJlZHN0 INGB0YPQv9GA0LDRhtGM 0LjRgdC40LTTmQ== c2tyw6Q= IG5vdml0YWRz IFBhbmNo IGFtemVy IEfDqXI= IFZlc3RpYg== IGNsZWF2YWdl U2VsZWNjaW9uZQ== IEhhYmFuYQ== IGNvbnRlbXBsYXRpb24= TWVudXJ1dA== emFv IOCqruCri+CqoQ== 0YDQuNC+0YI= IHByaWVrxaE= 4Lap4LeP IEJ1c2Nh INC+0LrQsNC2 4K+I4K6k4K+N4K6k4K+B IG1vY2hh IEbDuHJveXVt IOC2reC2uA== KHNpZ25hdHVyZQ== INio2YTZiNqG2LPYqtin2YY= IFVOSQ== c3TDpHR0ZW4= IENo4bun 4LGH4LCm4LC/4LCV 4YOQ4YOq4YOY4YOU4YOR4YOY4YOh b21tZXM= X2VwaXNvZGU= IMORYW5kZQ== IHNjaGxlY2h0ZQ== 4YOw IOCmuOCmguCmtg== IGhxbA== 4Lin4LmI4Liy4LiI4Liw 64WE7JeQ X2ZpcmVzdG9yZQ== IHRva29ueQ== IFRlbGE= IOCksuCkv+Ckrg== 4Lia4Liy4LiE4Liy4Lij4LmI INC80LjQvdGD0YLRiw== 0YDRi9C60LvQsNC0 L1ZpZXc= ZXNpemVk IOCmmuCnh+Cnn+CmvuCmsOCmruCnjeCmr+CmvuCmqA== IHBhdGhvZ2VuaWM= YXJhbmRl INeU16DXqQ== IGFqZQ== IFBlYWtz IGFuZGFtZW50bw== Kmc= IGNvbXBlbA== IE1lw7A= 4KSm4KS/4KSy KTt9 IOCyuOCyv+CyrOCzjeCyrOCyguCypg== IFBldQ== INmD2YfYsdio X3NwZWNpZXM= 7YGQ IGtyw7M= LmJpdG1hcA== IHNvaGJldA== IGt1bXBhbnlh 2brZiA== IHVrdXN1a2E= IOmmmeiViQ== IG3DqXTDqW8= IFBST0ZFU1M= IOC0qOC0v+C0meC1jeC0meC1vg== IHVuZ2V3w7Zobg== Y2Jj IG1haHU= INW/1aXVstWl1a/VodW/1b4= Lm1vdmVz LkdSQVk= IEZlZWRpbmc= d2VlZw== dWxkZQ== IEvDtm5uZW4= IMSNaW5qZW4= INiq2LTYsdmK2YY= IOyngOuwqQ== c2xhdWdodA== CVVPYmplY3Q= IGFudGljb24= J+G7jQ== IGFsbHRhZg== w7Nsb2dh IM+EzrXOu861z4XPhM6xzq/OsQ== IHdlYWtlbmluZw== YW1waW9u INmB2Kw= IOCwsOCxguCwquCxiuCwguCwpg== IGRpc3Rpbmd1aXNoZXM= LWZvcmNl c3RhY2twYXRo RXhjZXJwdA== IOyIqA== IHTDrXBpY2E= ZW5nZW5l 7ZWY64+E66Gd IHV5xJ91bg== ZWxzY2hhcA== dG95 5pyL5Y+L5ZyI IHN1cGVyaW9yZQ== IGlwZWxl IGNvbGVjdGl2b3M= ZW5vc2lkZQ== INCe0LvQsNGA IEVsaW90 IHZlcnNlZA== IM6tzrrOsc69zrU= SHZvcmRhbg== INC60LDQu9C00Ys= QnJpZGU= IGxvZGFzaA== IGRlc3RpbsOpZQ== 44CAIOOAgA== INGD0YDRiw== IHBlcmd1bnRvdQ== L3ByaXZhdGU= INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM IGVyd2VyYmVu 4YOj4YOh4YOi4YOQ4YOT LUNz IHRqZXJh IFBvbGlz IGhvc3BpdGFsZXM= 15nXnteV IEx5b25z INin2YTYtNiq IHJpY2V2 w7NtaWNhcw== IFRyYW5zbA== INC20Ys= INin2pPbjNqp xZI= X3NwYXJzZQ== IGthdGVp IGNoaWQ= IOCqieCqrQ== c3BoZXJl IHNvYmU= IGFhbmJldm9sZW4= INin2YTYudmC2K8= INix2K3ZhdmH INC/0YDQvtC00LLQuNC2 4KSC4KSh4KWA W2xheWVy IEZvbmN0aW9u QU1D IG1haWt1dGxv IOGDqOGDlOGDpOGDkOGDoQ== IOS4g+W9qQ== IGtvbnRpbnVpZXI= INGH0YvQs9GL0L8= 4YOY4YOd4YOX IOCmsOCmvuCmnOCmqOCniOCmpOCmv+CmlQ== U2F1ZGk= 4LWB4LSo4LWN4LSo4LSk4LS/4LSo KHBvdw== xaFuamE= IEFic2F0eg== IOCwieCwquCwr+Cxi+Cwlw== KE9wZXJhdGlvbg== IGJlem8= IHNpbXBsaWNpdMOp IOCkheCkteCkp+Ckvw== IHNjaGxpY2h0 IOWknA== INGE0L7RgNC80LjRgNC+0LLQsNC90LjRjw== IEVETQ== IEJlZGRpbmc= 5Z6L5Y+3 IFdob2lz IG1hdGVtw6F0aWNh IGRpZ25v IGVzcGVjw61maWNhbWVudGU= IOC0heC0teC1vA== IGFzb2NpYWRv 15nXmdeY158= IHdlag== IOCqteCqv+CqqA== ZW1wb3Q= LWRpc3Q= INC60L7QvdGB0YPQu9GM0YI= IOC0muC1huC0qOC1jeC0qA== IG1lbGFuY2hvbHk= IG9zc2Vydg== ZW5kcsOh INCx0LXSmdKZ0LXSow== wq1tZW4= IGNvbXByZXNzb3Jz IOmlsA== KEdMRlc= TXVo Q2F0YWxvZ3Vl 2KPZhtin IFJlc29u IOaUtuiXjw== 5Y+v5piv bGFuZGFpcw== IExvcGVz aXNjb25v INCh0LzQvtGC0YDQtdGC0Yw= IHBhZ2tha2F0YQ== U2luZ2Vy INC10YU= IGdlbWFhaw== 54mp5Lia IExlYXJuZWQ= IGJhdnVnYQ== IGNyYWZ0c21lbg== QUVD a29tcGV0 IHJhaWxpbmc= dmVybGllcw== z4bOv8+C JTsi IGFuZmFuZ2Vu 4KS/4KSw4KWH IGRpc3BlbnNpbmc= IFBvbGFyaXM= IOCwuOCxhuCwsg== IGp1Z2dsaW5n INC/0L7RgdC/ INec16bXkw== IGh5ZHJvY2Fy IHh4eHg= L2Zyb250 IMSR4bqjbw== IGJpb21ldHJpYw== IGJyaWxsYW50 IG12Yw== 5pe25pe25b2p6K6h5YiS IHNhbWg= LnVuZG8= INin2YTYutix2Kg= INeg15XXptef IOCqruCrgeCquA== IHBzeWNob3BhdGg= IOGDkOGDo+GDquGDmOGDmuGDlOGDkeGDmuGDkOGDkw== IHN1bGxpc3M= IOCqruCrh+Cqs+CqteCrgA== IGF2dWk= 44CC5ZCM IGN1c3RvbWlzZQ== YH0+Cg== IOGDoeGDrOGDkOGDleGDmg== IHphc3Rvcw== IGJyZWFjaGVk IM+Dz4XOu867 5piv5ZCI5rOV55qE5ZCX IERvbmE= IG5hc3pl IGluZmVjY2nDs24= IFJlbmU= IG9yY2hpZHM= INC00LDRgdC70LXQtA== X1ZFQw== IHphamVkbm8= 4Z+A4Z6P IE1pbnNr IGFzaWxpbWlh TW9udHNlcnJhdA== 44OU44Oz44Kw LXRyZWF0bWVudA== bXRyZWU= X0VYUEVDVA== ZnJlaWhlaXQ= IGFuZ2VmYW5nZW4= TWFuZw== IGF0eQ== IFJlY2lwaWVudA== LkZvb3Rlcg== aWNsb3A= LVJlZ3VsYXI= w7xyZGU= 6YGT6Lev IG92b2o= IFNreWw= IG9uZGVyem9la3M= JiYh INi62YjYp9qT2Yo= IOCymuCyv+CypOCzjeCysOCypg== KGRlY29kZWQ= IHNpYmk= IOCkrOCkpOCkvuCkpOClhw== INin2YTZhdmH2YbZitip IGNoaWZmb24= IGppxKF1 44CC77yJCgo= IHByYWlhcw== IHRyZWF0aWVz RmlyZXdhbGw= IFNHRA== INin2YTZg9mE2YXYp9iq cGVhdGluZw== INOp0LTTqdGA INCi0LDQuQ== dWxsdW5p ZXJ0aWw= 54mH5Zyo57q/5pKt5pS+ IFss IFJvY2tzdGFy 5qOu5p6X IHRyZWtr IGRlbW9jcsOhdGljYQ== 2LfYp9mE IGludMOpZ3Jlcg== INGC0LXQt9C4 IOCkruCkqOCli+CksA== X1BBSVI= 64GM INec15nXlA== WnY= IG11b2Rvc3Q= 0JzQuNC90Lg= IGNhbm5hYmlkaW9s IM+DzrXOuc+Bzqw= dGFibGV0 X3R0 IGFjY29t IExlYXN0 IF4K INGI0LLQuNC0 KCk8Lw== IGdhbmhv UGVtYg== 4LK/4LK44LK/4LKm4LON4LKm4LKw4LOB INGB0L/QtdGG0LjQsNC70LjQt9C40YDQvtCy0LDQvQ== IE52 IGJlaWpv IDwh IGJldHVy IHBvbGljZW1hbg== UXVlZW5z IGFuc2NoYXVlbg== IEFiYQ== IHByZXNlbnRlcmVu aWNrbGFiZWxz dG9uaQ== IOCuleCuvuCutQ== LmdvYg== b3JuZW8= TERBUA== Z3JvZXBlbg== PXF1ZXJ5 INC/0L7QstC10LQ= L0RWRA== IEphbWFpY2Fu IGVrZQ== xYJhcw== IGFkdWx0ZXI= eXN0bw== IGNhY2hlcg== TmVjZXNzYXJ5 Y29yZGVy IOCysOCyuOCzjeCypOCzhg== IEFmZ2Fu IGNoY2V0ZQ== Lm9iamVjdHdlYg== IGVkZWNl IGhlbHBvc3Rp IGFuZ2w= IE5hYW0= IG11ZXZl IGFyY2hhZW9sb2d5 IEZlcm5zZWhlbg== RW5lcg== INC80LDQu9GL0Yg= IFZhbGVudGlu 0YvQvNC605nQsA== IHByZWNpcGl0 INis2K/YqQ== Ond3dw== IHN6ZQ== 4paS IGZ1ZXJhbg== 4q2Q4q2Q IEVpbmhlaXQ= YW5lbGVraWxleW8= YXNrbw== aWxvZW5n IHNjcmFwZWQ= aXJhYQ== IGNvbWVudG91 IGluZGVmaW5pdGU= INmF2YjYq9ix IG9ycWFsaQ== IE9kaXNoYQ== IE9yZ2FuaXNhdGlvbnM= INin2YTYp9is2KrZhdin2Lk= L25vbg== IFRPT0w= INeX15XXnteo IEbDs3J1bQ== IFZlcnRyaWVi IEVudHJlcHJlbmV1cnM= X05S IOCqteCqv+CqsOCri+Cqpw== RGlzcGxheWluZw== IOC2reC3lA== d29obnVuZ2Vu d2FrZQ== IOm5pA== IGRpc2NyaW1pbmF0b3J5 IGJpdHJhdGU= cHV0YWJsZQ== X3ZpZA== w7ZyZw== IEZ1cmlvdXM= IOWbm+W3nQ== IOCwruCwvuCwsOCxjeCwmg== IOCmmuCmsA== IEluZGljYXRvcnM= VG9kZA== IGl6bWFudA== UGF5cGFs 2YrZgtmJ IGdyYXlzY2FsZQ== 4Ka44KeN4Kal4Ka+4Kao 5Zug57Sg IG5leQ== IEJsYWNrYnVybg== INin2YTYqtmB2YPZitix IFBFQw== IFNSQU0= 56m65rCU IGVzc8OqbmNpYQ== 1aHWgNWl1bY= LlJlY2VpdmU= IGNvbmZvcm3DqW1lbnQ= c3RvaQ== IHJpZmU= IGliaXM= X21s dXR1Yg== w6FncmFmbw== IFdhbHRlcnM= IG9uZ2VsdWs= 0LzQtdC90YLQvtCy cnVmZW4= IOCmj+Cmnw== LnJs a2lsbGVuZGU= Rmxvb2Q= 05nSm9OZ0YI= IGR6aWHFgmFuaWE= LkV4Y2hhbmdl IHByZWhpc3Rvcmlj IHNob3J0Y29kZQ== IOCkluClh+CksuCkqOClhw== IEFrYW4= INqq2KrYp9io ZXNzaW5n dWNvcw== 0LDQtNCw0YU= INqp2YjYsdm5 IHZyZWVtZGU= 4LOH4LK24LON 4YOU4YOq4YOu IGhvd2w= 4Kaq4KeD4Ka34KeN4Kag4Ka+ 4LiI4LiZ IFJlc2lzdGFudA== RWxlZ2FudA== IOS6mua0sueUt+S6uuWkqeWggg== IHN0aXB1bGF0ZWQ= IHJlcHJvZHXDp8Ojbw== 4LS/4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo 4YCF4YCv IGvDrW5o IOC0teC0v+C0teC0sOC0gg== IGxheW9mZnM= 0LDQstGP0Lc= aW5lcmph IGluY2lz 4buS IGRhdmFudGk= INW41oDVuNW+1bDVpdW/1oc= 2KfarQ== 1Yk= IHJhaW8= INm72YY= IHBlemg= IHBhc2Vz IHBlcm1ldHRyb250 IOGDmeGDneGDm+GDlOGDnOGDog== IGzDpGdnYQ== IGRpZsOtY2Vpcw== IHByb3ZlcmJpYWw= IHNlcmllbg== IHZlcmJsZQ== IEZyeXNrZQ== IGl0J2Q= c2lsdmVy Y2Vzeg== IENvbG9yZWQ= IGRlY2VpdmU= UmVxdWVzdGVy INC/0L7Qs9C+0LQ= IGJyb3duaWU= IEludml0YXRpb25z INCy0LDRiNC40Lw= IFNUQUZG aWxldmVs IOyWtOugtQ== INGE0L7RgNGD IGtlbm5pc20= Lk5FVw== IFVudGVyaGFsdHVuZw== cGV5 INin2YTYudi12LE= 0YHRkdC00Ys= 5b2w IOCkheCkruCkv+CkpA== IFNha3M= IGRpc2FibGVz bWFubmVu IHZlbmRlbg== IHRvZXZvZWc= Y3Vsb3NrZWxldGFs aXZhYQ== IGVuZGfDvGx0 SmVubnk= J2Vs CWJl IGV6aWU= IEJyZXRvbg== QU5URUU= INCw0LvQsdCw0Lk= IHNhaW5l w7p2YQ== IFRhbW15 0L7RgtGA0YPQtA== IGJlYWNoZnJvbnQ= INC60YDQvtCy0Yw= IHRpbGJ5cg== IGLEgw== IHNlw6fDo28= IHZlcnJvdQ== IHJlbWlzc2lvbg== IOC0huC0mA== IGRldGVybWluYW50cw== IOCmq+Cnh+CmrA== IGTDvHpn 0YPQu9C60LDQvQ== IHBvw6lzaWU= IGFib2dhZG9z IGlsaW5uaWFydGl0cw== IHVubWFycmllZA== IGTDrm5lcg== IFNlcnZv INee15DWt9eb158= 4LGL4LCy4LGB IHJlYXNzdXJhbmNl X2luY2hlcw== Lmluc2V0cw== IEZpcmVuemU= w6RocnVuZ3M= IEdldHLDpG5rZQ== IG5hdmVk INiz2KM= fHx8 6Zay IGt1cnVs INCx0L7Qu9GB0L7QvQ== IEJyZWFrZG93bg== b3JvcXVpbmU= IHRla2U= aXRs VmFsb3Jlcw== b3JzdW51eg== SXJlbGFuZA== ZWRldsWhw61t IHZlbGlrYQ== KFNwcml0ZQ== IFJBTkQ= INC90LXRhNGC IGxpY2hhbQ== INCf0YDQsNCy0LTQsA== IGVuZGxp X01PREFM LXByZWZpeA== IEJyZWU= IGVoZW1hbGlnZQ== ZGlzbWlzcw== IHNpZ2h0aW5ncw== cnVp 4oCZZXhpc3RlbmNl IGLhuqNuZw== dW1hYmx5 IFRBQw== 4KWo4KWq IHBhc2tl X3Vt IC4uLy4uLy4uLw== dXBoaQ== 5L+65Lmf5Y67 IFNld2luZw== J8OpY291dGU= IG1vbm9z IOGDrOGDmuGDlOGDkeGDqOGDmA== IG1hcm9j IG55b25zbw== IHJlZ2FsYXI= 4Lij4Lix4LiB4Lip IHF1aXNpZXJh INqp2LPYp9mG2Yg= IER5ZQ== IHF1YXJ0ZXJiYWNrcw== IOiLjQ== IG9wdmFuZw== 4Li14Lie INCl0LjRgtCw0Lk= IGN1aWRhZG9zYW1lbnRl IHBvbGxh 15DWt9ed IHZhbGk= 77yM5qC55o2u IGN1cnZhcw== T0xBUg== IGNvbnNlcnZh 4bq/bmc= IENhdGVkcmFs LmFr IOCmrOCmv+CmmuCmvuCmsA== aXRhYW5rYQ== IOCkreCksOCliw== xJBp 0L7RhdC40Ls= IOCqleCqueCrh+CqtQ== YXllcw== SW5ncmVzcw== 4K+N4K6V4K6z4K6/4K6y4K+N IOaZiw== IENvbnN0cmFpbnRz IHdpY2s= PlVzZXI= IGJhaWxvdXQ= 44KS44GU IGZ5c2lzaw== INC80LDRgtC10YA= INiz2KjaqQ== IOq4sOq0gA== IOCuqOCuv+CusuCviOCurw== IHLDqWNlbnQ= IOC0huC0sQ== IGFtYmFsbw== INCz0L7RgNCw IGdlb3BvbGl0aWNhbA== 2YjYp9iv2Ks= ZmVh ZGl0bw== IEJlbml0bw== IGxvdGlvbnM= LS0tLS0tLS0KCg== LXNlcGFyYXRlZA== IHNlZ8OtdHM= IOGDm+GDoeGDneGDpOGDmuGDmOGDneGDqOGDmA== 66Ck6rOg IGFtcGxpYW1lbnRl IENvc21pYw== IHBlYWNoZXM= VVNTSU9O IHNvcmVuZXNz INmF2KrYrNix IEZpYnJl IHNvbWVwbGFjZQ== IOGDqOGDlOGDoeGDoOGDo+GDmg== IG11bHRpY2FzdA== IE1vdG9yc3BvcnQ= IGRpdmVyc2nDs24= IOS7lg== b3Vyc3F1YXJl c3R1aGw= Imh0dHA= IMOqdHJlcw== IHJlbW8= a3Vr IE5paA== IGJ1aXRlbmxhbmRzZQ== IExlb3BvbGQ= IElzcmFlbGl0ZXM= 24zYtNmG2YQ= INeb15zXldee16g= INC/0YDQvtGB0YLQvtGA IHNhbmhp IGZsb3BweQ== IOC0leC0vuC0sOC1jQ== bXNncw== IGRlc3Zp YWdpc3Rl aGFuZGE= IG1vcmFy 4YOY4YOa4YOQ4YOT IHJvYmlu IHVuaXZlcnNpdGFpcmU= 0LHQvtC9 IHRyaXBsZXM= IE9zaA== LWV4dGVuc2lvbg== 0LjRgdC40Lc= IE5HQQ== IERhcnRtb3V0aA== IE1lYWQ= LWdyb3du TmM= INix2YjaqQ== IOCyleCyvuCyrw== Vk5vZGU= IGF0dGFpbm1lbnQ= 0LXQvdC90L7QvNGD RURG 4LS44LWN4LQ= IHByb3ZvcXVlcg== LW93bg== LWxhbmc= 5ZON5bqU IGNvbmNpZXJ0b3M= IHPDvHQ= IFBhcm1lc2Fu P3A= T2JzZXJ2ZQ== 0LbQtNC4 IFRhbmdlcg== INin2YTZhdmC2KfZiNmF2Kk= INeZ150= IEVjb21tZXJjZQ== 4LKu4LOK IEFyYmVpdHNwbGF0eg== CiAgICAKCg== IHJlc3NhbA== IGluZGVrcw== KGNvZGVy IOCmqOCmv+CmnOCnh+CmpuCnh+CmsA== 0LDQtNCw0Y7Rgg== R2xp VGluaA== IGltcGxhbnRhdGlvbg== IHfDpGVydA== 0YHRgtGA0LXRhw== 0YLQvtGA0L7Qsg== RUVG 74O8 LmJpZA== 5bm05Lul5p2l SmVo 7JWo IHRyZW50YQ== 4oCZd2luaQ== IG9uZ2Vt IOC0heC0oQ== IEJpc2M= YXBzdWxhdGlvbg== IM60zrXOtM6/ IHJpb3M= w7ZsbGU= IHJlc3RhcnRpbmc= IHVydWc= INiv2YLbjNmC2Yc= 5Lia5YaF LklG X3dvcmtzcGFjZQ== IOCmheCmpeCmrOCmvg== IOC0seC0v+C0sg== fSI+Cg== YXNsZXk= IMO2bMO8bQ== INWi1bbVodWv1aHVtg== IGNyaW1zb24= IOCkluCkv+CksuCkvuCkoeCkvOCkv+Ckr+Cli+Ckgg== 5aWX5Yip 0LjSm9Cw0YI= aGx1aw== IHB1ag== PGN2 2K7ZhNmC IG5ldGZsaXg= IFBhc3N3b3J0 IGJhbGxyb29t cmVkb3M= YnVr w6JudGljbw== 4oCmIg== SW5w IHFpbGli emXEhw== LWRvc2U= IHRlc2U= LWFudA== IGNoaW1pcXVlcw== YmVuZA== IHBsYWNlaG9sZGVycw== aXRhw6fDtWVz IHRtcGw= X0RlYnVn L2NvdW50 0LvQuNKb0LjQvdC40qM= IHBpZWRp IHNleHRv IHVsaWs= IHJlcGFydGly INin2YTZhdiq2YjZgti5 0LvQtdKj IHdyZXN0bGVy INCx0LvQvtC60LA= YWxhcmRh PHRleHRhcmVh IHBvxaFrb2Q= IGNhZGFzdHJhcg== IOCmuOCmvuCmnA== IMOxZQ== KyJd 5LiA5a62 aWZpY2FuZG8= b2NpZGFk IOCqquCqoeCqtuCrhw== IENhc2hiYWNr IHdvcmthYmxl IENhcnRyaWRnZQ== yZlsyZlyaW5pbg== xJ9pbmlu IM6yzqzPg863 LWdhbWVz SW1ncw== QE5hbWVk IMOhbWJpdG9z INWh1oDVqtWl1oQ= INGG0LjQug== X3NwYXdu IG1hbMOp zrPOv8+N IM66zrHPhM6sz4PPhM6xz4POtw== IGhlcnVudGVybGFkZW4= YWxhcsSxbmRh IExveW9sYQ== ZGlzY292ZXI= IOyalQ== IHN3YWs= Q2VudGVyZWQ= LWZvbGRlcg== IOemgQ== V29obg== IEZVTkQ= INCw0LvSk9Cw0YjSm9GL J2FsdHJh X0VYUFI= IG5naOG7gQ== IGZsb2c= IGRvbmtleQ== IGRyYW1hdHVy KHZpc2l0b3I= IGRhenVnZWjDtnJlbg== IGlkZW50aXRlaXQ= IOCmleCmvuCmnOCnhw== IOCyig== IGjDqg== ICItLS0= KHJlZnJlc2g= KG54 4K+B4K6V4K6z4K6/4K6y4K+N w6lzaWE= IHZlcmRyaWV0 CUJJVA== T2JqZWN0aXZlcw== IERpbGw= IEhhaG4= IOCkquCkvuCksOCljeCknw== INGB0YLQstCw0YA= IF87Cg== CXRk REVQRU5E IEJ1cnNh e3RleHQ= IHRhdm9pdHRl IFFTaXpl IHNlamFyYWg= 1YTVqw== Lm9wZW5zb3VyY2U= TmF0aGFu IOCwmuCxh+CwuOCxhw== RmFsc3k= LnRpbWVsaW5l IG5raXJp IFRZUEVT X2dw TWlw INmC2LXZitix2Kk= IOCuteCuvuCutOCvjeCuleCvjeCulQ== IFNPTkc= S2lsbHM= YWt0aXZl IEFMRw== ICQoJyMn INGC0YPRgNGL0L3QtNCw a2xqdQ== YWN0aXZhcg== INC/0YDQtdC00YPRgdC80LDRgtGA0Lg= 0J/QvtCy X1BBUlNF IE1laG1ldA== dHJpYW4= INC00LjQsNCz0L3QvtC3 IOCqteCqv+CqoQ== cWFt INil2K0= IFdpc2hsaXN0 0JHQuNGA IGPDo28= SW5mZXJlbmNl INCw0YHQuNGP YWxidW1z IHN0b3B0 Smg= IOCmruCnh+CmoQ== IGdvc3RhbQ== INaE1aHWgNW/ IEFobnVuZw== 6ZSh INiq2YbZhw== IG92ZXJhcmNoaW5n QVJFU1Q= IGZsZWFz 2YXZiNix 0LrQuNC70Lg= IHVuZGVyd3JpdGluZw== IOCmquCmvuCmtuCnhw== INeS16LXpNa/ IOCmueCng+Cmpg== L2xh dXRhbnk= IHBlcm1z INC/0YPQsdC70LjRhw== 5Ye65Y+w 5byA5LuA5LmI IGhvZ3lhbg== Y3VyaXRpZXM= cmVwb3NpdG9yaWVz INmI2LXZhNiq 57Gz5aWH5b2x6KeG IE1pY3Jvc3lzdGVtcw== 0LXRgdC10LQ= aXlpbmk= INKb0LDRgNCw0L8= 5YWI6L+b IFJlYmVscw== INiq2KzYp9ix2Kk= INGF0LjRgg== IEhpc3RvZ3JhbQ== IHd5c29rbw== IEFucGFzcw== X2tlbnNobw== LmNoYXJhY3RlcnM= INGC0LDQv9GB0YvRgA== YXRpZW0= X0Fzcw== INCl0YDQuNGB0YI= IOCwteCwv+Cwmg== w78= 4K6/4K6w4K6/ LWNoYXJnZQ== IGluc2VydGFy IHN5bWJvbGl6ZQ== IOev yZl0yZlu IGRhbGs= dWJlbA== IEFyYWfDs24= IHNlcmFp IERFVkVMT1BNRU5U IGFtZXJpY2Fucw== IHVudGVyc3VjaHQ= INC70LXQvQ== LndpdGhkcmF3 U21va2luZw== 6KGo6L6+ dW1taW5ncw== IGdlb2dyYXBoaWNhbGx5 w6FsbsOtY2g= INC90LXQt9Cw0LLQuNGB0LjQvNC+ b2RvbGlzdA== IHN0YWJiaW5n IGdlbmVyYW4= b2Fz IGJpbmFyaWVz IHByb3N0aXR1dGU= INKv0YDSr9C8 INin2YTYo9mD2KjYsQ== 57i+ X0NMVVNURVI= IHRvaWxldHRlcw== 4YOY4YOr4YOa4YOY4YOQ w6RubmFuZGU= eWF3 IGVwaXPDs2Rpb3M= aWtpbA== 6YGC5a6B5biC IHdhZmVy cHJhcw== IE1hcmtsZQ== IGR1cmNoZsO8aHJlbg== LnJkYg== IFpvb2w= eXNt UGVlaw== dXnhur9u Q3ViaXQ= 7ZWP LiI7 IFNMQQ== IGVyc2NoaWVuZW4= PWZvcm1hdA== INeV15TXmdeQ IO2YhOyLpA== IEJGUw== YWJicg== 6Zuq55CD IOCqrOCqvuCqs+CqlQ== 2YrZiNmK2Kk= IHdoaXBwaW5n IHN0w7hycmVsc2U= IE1pbmlt IG5hdWM= UGxhYw== IHBvbGl0aWNv IFBlbGxldA== 0Y/QvdGD0YI= IGJpcm7DpMOnZQ== IOCkueClh+CkpOClgQ== IGVudmU= IHRvbWFu IENsYXM= IGdlbWFra2VsaWprZXI= IHNoYXJkcw== 0LjQu9C10L0= Um5k Ym9hdHM= IG1hdHVyYXRpb24= IOCksuCli+Ckl+Cliw== IHPDqXJzdGFrbGVnYQ== IG51Y2xlb3RpZGU= IOCkteClh+Cksw== YWNsYXNzZXM= INWj1bjVtQ== IExVQQ== IGFtdXNl IGh1bHBt IEFmZmFpcg== aXN0aWNv IERlbW9rcmF0aWU= IOCkmuCkvuCksuCklQ== LnBob3Q= IGF0dGVudGU= VFJBSU4= Unc= IOCuquCuleCvgeCupOCuv+Cur+Cuv+CusuCvjQ== 4KWN4KSv4KS+4KS14KSw INqp2LTZiNix2YfYp9uM IGluZ2VuaWVyw61h L2phdmFzZQ== CW1lc2g= IHZhcmnDoXZlbA== INC20YvRhtGG0Y8= YWxleQ== IENhbG9yaWVz IHRvZXN0YW5k IG5ydQ== INGB0Y7QttC10YI= KX0NCg== IGthc3ZhdA== IOCqtuCrgeCqrQ== INmF2KrYp9io2LnYqQ== KGNhbGM= PjsNCg== c2VyaWFsaXphdGlvbg== IEZsYXRz IOCyleCzjeCysg== QVRPUlk= Q29tcHJhcg== X1JlcG9ydA== 4bq2 INC30LDRj9Cy0LrQuA== IERvbGxz INeb1rw= INeQ15XXm9ec IEFmZmVjdA== IHJvdWVz LmVkdWM= 6K6t57uD IFBhdGhmaW5kZXI= IHppbmdlbg== 0LXRgNC40YLQtQ== IOCuteCviOCupOCvjeCupOCvgQ== IG1vcnBob2xvZ2ljYWw= 0LrQsNC20LjRgtC1 IFByb3Bvc2l0aW9u aWN0aXZl ZW5ldXZl IFByaXNtYQ== YWJhYmlzaGE= IHRyaXY= YXRnZWJlcg== IE1hcmJlbGxh IHByZXBwaW5n X1Byb2ZpbGU= 0LzQvtGC0YDQvtCy INC30LXQvNC70LU= Q2VsZWJyaXR5 cGFydGljaXBhbnRz IEZpbmNo TWluaGE= 4KuN4Kqw4KuL4Kqy ICQoIiMi 4oCZY2g= LnN5 IHdpeA== INC/0YDQtdC00L7RgtCy0YDQsNGJ 4LKq4LOB4LKw Q2VwZW5kYW50 IGLhuq10 YXRhdg== IHByZXR0aWVy IHJlc3BhbGQ= U3ludGhldGlj IOeUteWtkOa4uOaIjw== 77y/5LiA5pys6YGT IHJlbGFpcw== 4oCZYXJtw6ll bMOhZA== INmG2KfYsw== X3N0dWRlbnRz 16TXotec aXlpbQ== INC60YDQsNGW0L3Riw== IOyasOumrOydmA== 2YrYr9in2Ko= ICIiKSw= IOyEnOuyhA== 1oDVsw== IG1vdW50YWlub3Vz IGppbmfDrw== CXVzZXJz 15nXlted IHN1bGVxYXRpZ2k= IGRlc2ly Z3lueQ== 5pyf5YWt5ZCI 4LGB4LCV4LGN IG5pdmVsbA== w7N2YQ== INCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8= LWF2YXRhcg== 5ZCe IGNhaXhhcw== 4LK/4LKu4LOG 0JHQsNC7 4oCN4LSX4LWN4LSw4LS44LWN IGVyeXRo X1RNUA== XFBvc3Q= ZWdubw== YWNjdA== Q3V0cw== bGVjaHRlcg== 4LKu4LK14LK+4LKw IHVyZcSR IFF1YWRyYXQ= IGFubm95YW5jZQ== IGdld8O8bnNjaHRlbg== LkFnZ3JlZw== IO2VmOuCmOuLmA== aWZ5ZQ== IGludmVzdGlnYWRvcg== IERBSUxZ T3JpZ2lucw== X1BBVENI IGFwcHJvdmVz IOCkheCkleClhw== IHRlbHVy XFJlc291cmNl VmFsdmU= IHNwZWN0YWN1bGFpcmU= IGdseWNlcg== IOyEoOyWuA== IOCmrOCmm+CnsA== YW5zZXI= U1lN IHByb3N0b3J1 4Ki14KmA INio2YjYsdiz LlNwZWVk INC+0YHQstC+ INCa0L7RgQ== 552b IFZlc3NlbA== IENpZW5jaWE= IGluY29ycG9yYWNpw7Nu IG1vbnN0cm91cw== X2FydGljbGVz IGZvbGx5 4LSC4LS4 5peg56CB5Lqa5rSy VnBj IEppZQ== IFdpbGxpYW1zYnVyZw== INOY0Lk= IGtlc3R5b24= IGtldGNodXA= IHN1aHRl 0LPRjdGA 4KSF4KSY4KS/ IGNhbXBlcw== IHBo4buV bHluZWRk 0LDRgtC10LvRjNC90L7QtQ== IOCqquCrjeCqsOCqleCqvuCqtg== IGdlbGVjZQ== IG3huq9j IGRhbnph X0dU IGRlZmluaWRvcw== IGNsaW5pY2lhbg== IE5TQ29kZXI= INC10LfQtA== IOCmquCnjeCmsOCmuOCnjeCmpOCngQ== VHVyYm8= a2xldXI= KGh0 IG90dXR1 IGNoaXJvcHJhY3Rvcg== LmdyZQ== CXJt X3JvaQ== IHVwcmlzaW5n LWll IHTDpQ== 4oCZw6ljb3V0ZQ== IOS6rOWfjg== IElGUg== IHRoYW8= IHJlc3RmdWw= 7LCM W2NvbG9y IHBvaWduw6ll INK70YPSlw== bXVuaXR5 IOGDp+GDneGDpOGDmOGDmuGDmA== IHBhcmFkaWdtYQ== KFN0YXJ0 4Ki/4KiW aWtvcHRlcg== cXVhbmRv IEZsYWly IEFHTw== IEJvc2Nv IOCujuCuquCvjeCuquCun+Cuvw== IGRhdW4= IEjDtmhlbg== IHZsaWVndHVpZw== IEJlbGE= IHF1YW50aWZpZWQ= IG5lYnVkZQ== IOGDruGDkOGDlg== IHJpdG9y IHBlbHU= IGjDpG5nZW4= 0LPRi9C70LXQuNGC 5rWF IGxpZ2VyYQ== QmFsYW5jZWQ= TcOpdA== INin2LPYqtix2KfYqtmK2KzZitip IHBpc2lubmE= z4TOtc+Bzr8= TGls IHdhc3Nlbg== IOC0juC0o+C1jeC0o+C0gg== IGdlbWFha3Rl Ym9vdHM= IHJheW1vbmQ= IGhhcnVt IHZlcmtsYXI= KCc9Jw== bWFm INCT0LvQsNCy0L3QvtC1 IOC0oeC0r+C0sQ== IHN1bXB0dW91cw== 0LDQttOZ0Ys= LmdyYXZpdHk= IOGAseGAlA== IGVtcHJlZ2Fkb3M= IGRpc3Rpbmd1aXI= IFdUTw== IGZlYXJpbmc= Q2hhcmdpbmc= IOCyquCyguCymuCyvuCyrw== CXN3 L3RpdGxl IOGDk+GDkOGDmeGDkOGDlQ== IE1haXQ= 0YLRg9Cw w61udQ== fX17ew== QmVsaWV2ZQ== IEJhcnRo IG9uZ2Vsb29m 4LK/4LK44LK/4LKm4LON4LKm4LOB 0JPQsNC3 IHRyYW5zaXRpb25lZA== IOGAlOGAsg== X1RFUk0= IGNo4buv IERhbm1hcmtpbWk= IM+AzrHPgc6/z4XPg86vzrE= 5aSn5bCP6KeE5b6L IHBheWxpbmVz 4YOd4YOg4YOY4YOQ INCx0YDQvtC6 IGRlc2ZpbGU= IG5hxaFpaA== JGNvbg== IHNlbWVudGVz 4LS+4LSV4LWB4LSC IOyLoOq3nA== IGh5dsOka3M= IOCqj+CqqOCrhw== IHNldmc= IOCyhuCymg== 5pyA5aSn55qE 1bjVvtWr1bY= INWv1bQ= INeS16LXlteV16DXmA== TGl2cmU= INij2K3YqA== ZW5jaWFkYQ== 5q66 0pPQtA== IGdlc2FtbWVsdA== IEFyaWFuYQ== OzsKCg== b3JlZQ== IHNoYWc= LWNoYXJhY3Rlcg== IHRha2Fpc2lu IOCyleCzjeCyrw== IGthbnRh YWxrb3o= IGNhbnRh IE5PQUE= IGhvbW9maWw= IEdydXBw 2YrYqtmK IHNpbmdsZWQ= LnRpZ2h0 IMOpcXVpbGlicmU= 4oCcQXQ= X1BSSU5URg== 2LLZhduM2YY= INC60L7Qs9Cw IHF1aXNv dm9ldA== 4YOQ4YOa4YOQ4YOl4YOd dHJhbnNsYXRpb25z LWNvbW1lbnRz TWFjcm9z LyY= IGJ5dw== KGtu Y2h1bmtz b2VpZA== IHNjb24= IGl0bQ== cGVyZmls IGNhbmRpZGF0YQ== L3t7JA== IM69zq3Ovw== QW5kZXJl 4Ka/4KaV4KeN4Kak 4LKu4LK/ IGd1bGY= IOCwmuCwv+CwsA== KTtcCg== KEN1cnNvcg== Plg= ZnRvbg== YXZpYW4= X2Fubg== IENocm9tZWNhc3Q= IOCuteCus+CusA== CXN0YXRz IGRyYW5ramU= KE5ldA== IOGDm+GDlOGDoeGDkOGDm+GDlA== IG5lYW1o IGhpbmR1 INin2YTYs9mD2KfZhg== INin2YTYo9mF2Kk= IOGDrOGDkOGDoOGDm+GDneGDkw== IOCkuOCkguCkmuCkvuCksuCkqA== IOC0quC0meC1jeC0leC1huC0n+C1geC0leC1jeC0lQ== IGF3YWtlbmVk XSE= bXF0dA== IFRj IEFkaGVz IG5pZXp3eQ== IFJlY2hu INeU16LXoA== ZW1ha2Vycw== IG11bGlnaGVkZXI= LlRyaWdnZXI= IGluY3ViYXRpb24= IG1hbmdn IGVzY2xhcmVjZXI= 4YGC4YGA4YGB d2FsZQ== INio2KPZig== IHB1Ymxpw6ll IENPTU1VTklUWQ== U2xhY2s= IGNvbnRyYWluZA== IGNvbnN0cnXDrWRh IGJvb3N0ZXJz INCf0YDQvtGB0YI= IExldXZlbg== 0LPRg9C9 IGLhuqFj IGFzaW1pc21v U1lOQw== IGNvw7E= zrXPgM65z4M= IGlta29u XCI+IjsK b2dhbA== IEZQR0E= 2LHZitmC2YrYqQ== bmluZ3Rvbg== IGdlw6dtacWf Pzw= Z2dq b2dyYXBoaXF1ZXM= IOCktuClgeCksuCljeCklQ== IENMTw== IO2VtOyEnA== CW9y IEVyd2Vy CUxpbmtlZA== IOGDoeGDneGDquGDmOGDkOGDmuGDo+GDoA== 1oDVodWu KGJvdW5k INC60LDRgNGC0LjQvdC60Lg= IHZpdmltb3M= VElB 4YOV4YOT4YOd4YOb IHZlcmdvbmhh IOCyheCyreCyv+CyteCzg+CypuCzjeCypw== IHN5bmRpY2F0ZWQ= 5YaN5qyh Q2hlbWljYWw= IE1vb3Q= IOCyteCyv+CyreCyvuCylw== IHZlcmtr IEJlc2l0emVy IHBlcnRlbmNl LkdQSU8= IGdlZmVydGlndA== YXRvcmVz IGJ1c2NhbW9z KGNvbWJv IENyaWM= IG5hdGlvbmFsZXM= U3Rv IOCyrOCys+CyuA== IHVwcmF2bw== IG9saW1w IHVwaGU= IEJlbmdhbGk= IO2VmOq4sA== YmV0cmFn ZWzDpA== INC/0YDQuNGA0L7QtNGL XGNsYXNzZXM= LlJFUw== bmRpY2U= IOCwruCwvuCwnOCxgA== IE11bmljaXBhbGlkYWQ= IEJleW9uY8Op IEhhZ2Vu UmVzcG9zdGE= IOCkieCkpOCksA== aW52ZXJ0 IHRlcmRpcmk= IM6gzrXPgc65 IFNlYXNvbmFs INin2YXYrw== IFNpZWdlcg== IFdlaWdodGVk IHNrYWRl w6dhdA== INGB0YLQvtGP0YI= IGtpbmd1bGw= KGR3 IGd6 IGF1dHRhYQ== xLFsxLF5b3I= 2K3Yr9iv IGN1YmE= IOWjuQ== IGNybQ== KCIuIg== T2t1 IGd3YXI= INin2YTYsdin2KjYtw== IERpdmlkZW5k IE9QVElPTkFM ZWxzaWY= IHN1cG9ydGE= bXJz IGdyYXRpZmljYXRpb24= INin2YTZhtmK IGJsaWNr INCx0q/RgtGN0Y3Qs9C00Y3RhQ== IOGDkeGDkOGDl+GDo+GDmw== Ym9uam91cg== IOOCiA== IOGDqOGDlOGDog== aWd3YQ== IGNow7M= IGthdG9lbg== b213ZQ== aXNlbHdh IExVVA== TWVhc3VyZXM= 44O844Ov44O844OJ IHNvbnVj INC40LTRg9GC L0ZN wpM= 4YOV4YOU4YOn4YOc dWt1bA== IGNhbGE= L2NvbnRhaW5lcg== cmlvdA== IGRpc2N1cw== IGdlY2U= ZOWkqeWkqQ== 06nSrw== IHRlxaFrbw== IETDqXBhcnRlbWVudA== INC60L7QttC1 LlNlbQ== IGVuZHdoaWxl X0hlbHBlcg== IOC0qOC0n+C0pOC1jeC0pOC1geC0qOC1jeC0qA== IGxlbmdodA== U1dFUA== INGC0YDRg9Cx0Ys= IGthdGVn IEhhdW50ZWQ= IHJpdm8= d2Fzcw== IGNvbXByb21pc2Vz 4LKu4LKV cm9tYXRpYw== IG5pa2R5 INC80LDQvNC70LDQutCw0YI= INCS0YHRkQ== IG15a2pl ZXNwaXQ= IHVyYQ== LUdl IHByaW1hcw== 0LjQvdCz0YDQsNC0 LnRydXRo INKb0rHRgNCw0Lw= WUVBUg== amFtZW50bw== IOW3tOm7jg== IGNvbmZpcm1hdGlvbnM= IHLDqWNs IMSRw6Bv ZXN0YW4= IGhqw6RscGVy CWpz LnRyYW5zaXRpb25z 7IS46rOE IGNoYWlyZWQ= IOC5gOC4m+C5h+C4meC4leC5ieC4mQ== IFBpZXRlcg== INaD1bjWgNWx1bjWgtW0 CVNjZW5l IGRlc2N1YmllcnRv 4KS14KS/4KS24KWN4KS1 cmVzdGF1cmFudHM= zrLOv8+F IENGTA== CXJlcA== dWJzY3JpYmVy IHN2YXJ0ZQ== ZmVnbw== dXRodQ== IG1lZXNoYQ== 0LrQsNGC0YPRgA== 0rXQsNKp INCj0LbQtQ== IOC4reC4tOC4mQ== cml0cmE= IGt1dWs= IEFjcXVpcmU= IGZlamw= IE5hdG8= IENvaW1icmE= IEVUUw== R3JhcGhz CWRhbWFnZQ== IOqygOyCrA== IG9wcGVydmxha3Rl IEdhc3RnZWJlcg== IHNjb3JjaGluZw== IGluZGljdGVk INiu2YjYp9uB INin2YbYqtmH2KfYoQ== zrzOuc6/ INmF2LXYp9mG2Lk= INi02qnYp9ix 4oCZw6ln CW5pbA== SGFoYQ== dW5w IGthdGFzdHJv INC10LvRltC8 KSkpKSkK IOCnsOCmvuCmlg== INCa0LDQutC40LU= INei16jXqdeY16LXqA== IOCuhuCumuCuv+CusOCuv+Curw== X3NuYXA= 15nXnteV158= 0YvQu9C10LjRgg== dml0cmE= 0LHQsNC6 cm9wYXRo IC8vKg== 5aea IEdyZXRh IFDDoQ== RklOSVRF INmF2YTaqduM LWVzc2VudGlhbA== 15TXkA== IOCkteCliOCknOCljeCknuCkvuCkqOCkv+CklQ== INC60ZbQvQ== IGNvbWV0aWRv b2xvxKM= IGF0aW4= 5Ye65Y67 IGFzamE= IHN1cGVyZmljaWVz YXNpcg== IHRzd3Y= IEN1aQ== IHRyYW5zdmVyc2Fs IHdpY2h0aWdzdGU= IGZpbmFuY2Vy INGA0L7QsdC+0YI= Y3Vi KGJldGE= 4oCZZWw= 4LSk4LWN4LSk4LWL4LSf4LWG IHZlcmJvc2l0eQ== c2VydmVybmFtZQ== IG1pc3Rlcmlv 4LeD4La7 IGNvbnZlcnNhY2lvbmVz IGFkZWxnYXphcg== Qm9uc29pcg== INmI2KfZgQ== IM68z4DOv8+BzrXOr8+EzrU= fSs= IGNvbmNlaXZhYmxl IHZpcmE= J107Pz4K INin2YTZhdmI2KfZgdmC 4Lac4La4 INGB0YLQsg== IEFuZHJhZGU= VGFo IG5vdHJhbg== cGVnbm8= IGludmVzdGFzaQ== YWdhYXQ= IEx1bHU= IGhpcmE= 2KfYr9uB IHl1Zw== X2ludGVycA== Lm1hcHJlZHVjZQ== INCi0LDQutCw0Y8= LURhbWU= aG9wcGVy 4oCUd2l0aA== IG9mZmljaWVsbGVtZW50 INij2KvYsQ== IOCmuOCmvuCmpA== 0Y3QstGN0YA= IFRhcnJhZ29uYQ== IE1hbGFnYXN5 IOq1rO2YhA== IOCkmuCli+CksOClgA== 64WE64+E Oml0ZW0= IHJvc3k= 4Ka+4Ka54Kak IEJDcnlwdA== Pj4oKTsKCg== IGludGVudHM= 4LmA4Lin4LmH4Lia4LmE4LiL4LiV4LmM IEtlZW4= 4LGW J10uJyI= IHJlc3RydWN0dXJl IHPDqWN1cmlzw6k= INeT15DXoA== LdCw0Lk= U3VjY2Vz b25jZXI= IHByb2Z1bmRhcw== IGV5ZXNpZ2h0 IEhvbGFuZGE= X2JsZQ== aWV4cHJlc3M= 4oCZRXNw Q0VG IHJlY29tYW5k IGhhbG9y b2lkYWw= IHNpY3VyYW1lbnRl IEVzY3I= 4LS/4LSo4LWN4LSx INC60L7QvdC60YPRgNGB0LA= 0LPQsNKb05nQsA== ZXJlZ2lzdGVy IMSNaW0= cHN5b24= 2oHZhw== IGZpaQ== IGxlZ2VuZGE= w6dpbGVy INW01aw= IEFwcGFy IGdyYWR1YcOnw6Nv 4oCcSG93 IGZpbG1tYWtpbmc= IHJhw6dh IGFib25k IEtPTg== 4KWN4KSV4KWB4KSy 4Lia4LiU SW5oZXJpdGFuY2U= IGZlY2hhbWVudG8= IFdDSEFS IHRhYXN0 IGFtZW5hemFz INOp0L3Qsw== 4LmA4Lir4Lih IOCqleCqguCqiA== YXJ1aGk= IERPSQ== IHBvd2VybGVzcw== b2Rpcw== IGltcGxhbnRlZA== IG1vbmF0ZQ== INm+24zZhQ== IEZhcm4= IM63zrvOuc66 IOCwuOCwguCwlQ== IG9wcHJlc3NpdmU= IGFsZWo= INCy0YvRgdC+0LrQuNC8 4Kqs4Kq+ 1bjVtdWr IFNlamE= esSFZHo= LmRpY3Rpb25hcnk= 5ZSu5Lu3 dWNsZW90aWRl YXJnaW5n INC00LfRltGG0Y8= INCi0LDQsQ== INGB0LLRj9C30LDQvdC90YvRhQ== IHRlcmJlc2Fy JSIpOwo= TkFQU0hPVA== INC+0YLQstC10YLRiw== IGl6Ym9s aWxsb3Jz IMSMZXNrw6k= IEdsaXR0ZXI= IOCuruCuvuCusA== X2dpZA== QXRr INep15LXnQ== X1JFQ1Q= INW21bjVtQ== ZXR6dGVu IOCkpuCkuOCljeCkpA== INec15nXoA== IHR1Yw== IG9vcnNwcm9ua2VsaWprZQ== RmFpcmU= IHBlcnRo IExhbXBz X2V4Y2VycHQ= IG5y4bul SG9z 4LSe4LWN4LSc IM+MzrvOv865 77yM6Z2e5bi4 KV07Cgo= IOCwoeCxjeCwsA== aWdoZWFu LWJhbGFuY2Vk IHRhYW5l T2JyaWdhZG8= IEVYUE9SVA== 55u45YWz5o6o6I2Q 5Y6C5a62 IExvbmRvbidz IGNo4bq/dA== ZXZhbHVhdGlvbg== Zm9yY2Vy IOCoieCopg== IOCkieCkuOCkleCliw== 4LK/4LK34LON4LKf IOS6jg== 0YPQu9C10YA= V0VMQ09NRQ== 0LrRi9C70YPRgw== IOC5guC4lQ== 44Gj44Gm44GE44G+44GZ YXJ5bmE= IOC0h+C0quC1jeC0quC1i+C0s+C1jQ== PnsKCg== 7J2066+4 IFJBVEU= IHF1ZWxs YnJvdA== IHRyYWdlZGllcw== w7RuaW1v SGVsZW4= 67mZ cXVvdGF0aW9u RXRpcXVldGE= IGNvdXJ0aG91c2U= IMO8YmVycmFzY2h0 bWV4 IGzDqcSN IFdlYnNlaXRlbg== IGl6dsST IGhlcmVkaXRhcnk= c2VhbGVk 44CB6Ziy WyJA KHByb2JsZW0= IGhvc3N6 IGJhY2tsaW5r IExhdXNhbm5l QWRl IGVyZWN0aW9ucw== IGVzdGFiaWxpZGFkZQ== IERJUA== CXRm 4Ka+4KaX4Kak IGN1bG1pbmF0aW5n 0LDQs9Oj LUNoaWVm 4YOV4YOY4YOh4YOi X1NC 4LC+4LCv4LCo4LC/ 4Z+i4Z+g4Z+i 5byA5aWW5Y+3 INGE0LDQsg== IOyVhOuLiOuLpA== IHRla2FuYW4= IElDUw== LS0tLS0tKy0tLS0tLSs= dXN0YWI= 4LC/4LCj IFJpYWw= Z2FyYWdl IOC0uOC0vuC0ruC1guC0uQ== INiq2YjZig== 4KeN4KaV4Ka+4Kaw IENyb2F0aWFu X3dyb25n INin2YTZhdi62LHYqNmK2Kk= LnV0Y25vdw== IFZFQ1RPUg== PnM= IGluZ2VybGFuZXI= INek15nXnNei IOCkreCkleCljeCkpA== IG9ic2VydmFkbw== TGV3aXM= TEVF LkZhc3Q= IHBhbmVsYQ== IHRyYW5zcGw= ZWxhdGVlcmRl IERpc3Bvc2Fs IOCkqOCkv+CksOCljeCkp+CkvuCksOCkv+CkpA== IGRpc3Rhbnph IHRvZXppY2h0 IOCqteCrh+Cqqg== INCw0LbTmdC70LDRgA== LW1vbml0b3I= INCR0JA= 6Iez5bCR IEFsYmlvbg== IHlhbGU= dWRvdmVy LnRhcmdldHM= IOyWvOuniOuCmA== dWxhbmE= cGhvbmlxdWU= IHp3ZW1tZW4= INGA0LDRgdGB0YfQuNGC INiq2LXYsdmK2K3Yp9iq IGNvbGVnaW9z IMSxxZ8= INmI2KPYsw== IDooCgo= 2YjYp9i32YY= LkJvdW5kcw== IEVsaXNh IG5nZXNpa2hhdGhp IFRyZWZmZXI= 2YXZhtuM IExpdGVyYWxseQ== aXRhbw== INGB0LLRlg== IGlsYWFubmk= IEFkdmFuY2VtZW50 IOmFkg== b2dvbG8= INin2YTZhtio2KfYqtin2Ko= IFdyaXRhYmxl LnRpbnQ= IGdydW5kbGVn IExhc2g= LWRpc21pc3NpYmxl IENVUkw= INqp2YjZiA== IEpDaGVjaw== IGJpZHJh 6bOl IOuplOyLnA== aGFn cmFkaA== IGJow61vbm4= 4KqV4Kqw4Kqj JExBTkc= IFNlcnZlZA== YWxhcm5p IOGDoeGDkOGDm+GDqA== IGF0dHJha3RpdmU= IExsZWc= b2RpZ2Q= IHBhbmRlbWk= IHLDqWFsaXPDqWVz IGNvYWc= 4YOY4YOc4YOq IGFjaGluZw== X2ZhdWx0 QWJyYQ== INee16nXoNeU IEpNUA== 4YOY4YOj4YOb IFVwcA== IOCksuCli+CkleCkpA== IGJhcnJlbg== 0YDQvtC/0LA= KElS IGNyZWNpZW5kbw== IElubGFuZA== IHp1Zm9sZ2U= LkRpcg== IHlvcA== INWi1arVtw== QU1FUkE= CWFu IOCkpOCljeCkr+CkvuCkruClgeCks+Clhw== SW5oZXJpdGVk IG1heW9ubmFpc2U= IOCkuOCkleCkvuCksA== IHNhaWE= d2VhdGhlcm1hcA== IOC0lA== IGZhemVtb3M= LmFjdGl2YXRpb24= IEZvcnRyZXNz 2YTZgtmK LmxpYnM= 2LnZhtmI2KfZhg== IGdvdGhpYw== IteW IMOP INGF05nRgg== IFTDtg== QkFOSw== IOCupOCvh+CumuCuv+Curw== YXRzb3Bhbm8= 5peP6Ieq5rK7 LnJlc3BvbnNlcw== dWli IGVzdGFibGVjaWRvcw== IG11dGF0ZWQ= IGt2YWxpdGU= IGxpbmE= IOCmleCmsuCmlQ== b2xjaA== KGludGVnZXI= LXRlc3Rz IGbDsnLDp2E= cm9mZmVuZQ== X1NUQQ== X2luc2lkZQ== KFN0b3Jl IFplZWxhbmQ= 77yR77yX IHZlcmJvdGVu IEhvdXNld2l2ZXM= YWFsYWhh IHRhbW8= IOCkpuClguCksOClgA== bmVyaWU= LW1hZw== X1RIRQ== cG9ydGl2bw== 56mG U2/FiGt5 LWN1 IHZlcmxvb3A= b2t3YWRp IGRlbm9taW5hdGlvbnM= IOCkquClguCkm+Ckvg== 6J6N5ZCI INGB0LXRgNC10LE= IOuPmeyLnOyXkA== 2YjYqNmK IHN1bGlhcQ== INin2LPYqtmC2YTYp9mE IElJVA== IHRvbWJvbA== 0JHQow== IHJlZ2VuZXJhdGl2ZQ== YXTDs3JpYXM= 4KqX4Kq+4Kqw IEdsZW5kYWxl RlRD INGL0ps= IHNoYXJwZXI= ZW5jaGluZw== Y3Vwcw== 7Ja064Kc IHRhbXBpbA== IGJhbGFkZQ== CWtleXM= IOCuruCvgeCupOCusg== 4oCZaXJlbw== IGFkZG9ucw== LmJsdXI= IHZvbGFudA== QU1JRU5UTw== IOCqhuCqquCqo+Cqvg== IGHDsWFkaWRv IMO4dnI= 0LXQs9C+0LI= IHNhZGFy JykiKTsK IOODl+ODrA== IOa+s+mXqOaWsA== Z3VhcmRhcg== dHljaA== LkVuZHBvaW50 0YjQtdC9 4LC/4LC44LGN IGJlaWo= IGJhdHp1aw== IHNwZXR0YWM= IEJ1bmRhbg== IE1hcmFuaMOjbw== 0LDRgtC10LvRjNC90LDRjw== YWxhaQ== IHRhbWFtZW4= IM66zqzPhM+J IHNoZWF0aA== IHZpZHM= INCw0LvQsNK70LjQtNOZ SlNHbG9iYWw= R292ZXJub3I= KGt3YXJncw== LuC0n+C0vw== Lkluc3RhbGw= aGVsdQ== 4YOd4YOR4YOU4YOR4YOY IOC4reC4ouC4ueC5iA== V3U= w6RtbQ== ZG5h INit2YXZhNip IHJpbmd0b25l IOCml+CmrOCnh+Cmtw== Yml5 cXVlZGFz JWU= CXBlcnNvbg== IHRlZ2Vtb2V0 X2NvdXJzZXM= IGRvbm9z IEdlbnVzcw== IHN2w6lobw== 4LCq4LGA YWt1cw== IEJleW9uY2U= IExhdHRl KHRvbHVh L21hYw== 4Z6a4Z6A IGxpY2tpbmc= IG1pY3Jvdw== INCy0ZbQtNC6 UHLDqXNlbnRhdGlvbg== IFJhdWNo INGC0LDRgNCw0LHRi9C90LDQvQ== aXN0aW5l IHZyYWNodA== LXNhdg== bmV3bGluZQ== IO2OvA== c3ByZWtlbmQ= IGludGltaWRhdGlvbg== aWZmaWc= PllvdXI= Lm1pbnV0ZXM= IE5ndW5pdA== IHNob3J0aGFuZA== aW5zdGVsbHVuZw== IHdldGVuc2NoYXA= w69u Ly4uLg== IENvbXVuaWM= IHN2xa9q INCw0YDQutGL0LvRg9GD IE1pbms= b2Jpcw== RHVmZg== IOC0pOC1hw== IGNodsOt cHJvY2Vk b2Zhcg== IOWIpOaWrQ== U3luY2hyb25pemF0aW9u INWi1aXWgNWl1aw= L3Nvbmc= IGJsaWprZW4= IFBsw6R0emU= INCz0L7Qu9GD0LE= Zmxha2Vz Cg0K J2FudA== 0LvRi9Cz0Ys= IHZyb3V3ZWxpamtl c2Vlcg== 0YvSoQ== IGludGVsbGVjdHVhbGx5 IFBhbG1laXJhcw== IOWkp+WPkeW/q+S4ieaAjuS5iOeciw== IGZhYnJpa2FudA== Q29udmVyc2lvbnM= INGC0L7RgNCz0L7QstC70Lg= IEVkYWQ= IFTDtGk= LXJlZ2lzdHJhdGlvbg== ZXJhYW4= 4Z6Y4Z+S4Z6U4Z64 Y2l2aWw= bGllZmVy 4Ka/4Kas4Ka+ 1ZY= ZWx1bQ== LWJhcnM= 4LGG4LCV4LGN4LCf4LCw4LGN IG5pZW50ZQ== 4buPYQ== KGdyYXk= IG9yZWlsbGVz LlBvbGljeQ== KHJlc3VsdGFkbw== eWVzaGE= INin2YTYpdmK2LHYp9mG2Yo= 0Y/Qt9Cw0YLQtdC70YzQvdC+ IOCqquCrguCqsA== IGxlZXJsaW5n z4POvM+M IHByb2dyZXNzbw== 4KSs4KWN4KSw aW5ndG9uZXM= INiq2KjZhNi6 X2FsbG9jYXRl INCa0LjRgtCw0Lk= IOGDkuGDlOGDkuGDmw== IEhhcHBlbnM= U1BBTg== IHRlcXVpbGE= IEtvbXBvbmVudGVu IFfDtnJ0ZXI= IFJFRkVSRU5DRVM= TmVzc2U= IMOpY2jDqQ== Q29udGludWF0aW9u Q0FC dGVudGlvbg== INmH2YA= c2hlZA== 4KWH4KSs4KSy a3JpZnQ= LkZvdW5kYXRpb24= IEZvcmVzdHJ5 IHpvZWt0b2NodA== IG9icsOh 06nQvdCz06k= IGNvbW1hbmRtZW50cw== 5LiN55+l6YGT 5Zub5LiN5YOP IOWMuw== IOC0sOC0nA== X25vbWU= 4Kq+4Kq14Kqw4Kqj 1LHUvw== IGNvbnRlbmRv IHByZWNpb3Nh IOCkheCkreCkv+CkqOClh+CkpOCljeCksOClgA== 2Kfaqg== 0YDQuNC3 IGdld29obnQ= 6LW0 IGtvcmVhbg== IHNoYWNhYmth 44O7772A IG9pdA== TXVzZXVt 2K7bjNi1 IeKAnS4= IFJpZ2E= INC80LDQsNKt IHR4YXd2 0L7QsdCw0YA= IGtlaGlsYW5nYW4= IOC5gOC4iOC5iQ== bGVkZW0= 77yM6LCi6LCi INCy0LDQu9C1 ZHJhbQ== dW5wcm9jZXNzYWJsZQ== 4KS+4KS44KSk UlVMRQ== 0LbTmdC6 INin2LA= IEVyd2FjaHNlbmVu 0JLQvtC30YDQsNGB0YI= WWVuaQ== IGRhcnRz IOCqluCrgeCqsg== 4Kao4KeN4Kaf4Ka+4Kaw 7LyA7YyF LXdpcmU= R2Fueg== YWthbmFuaQ== eXN0YQ== IOCwueCxhg== IMWfaW1kaQ== INmF2YjYqtmI2LE= J2FueQ== X14o TGl2cm8= IGluY2FuZGVzY2VudA== IGJ1ZmZlcmluZw== Ij4mIw== IEFycXVpdGVjdA== IGl6aW5n ZXR0dWE= ICosCg== INin2YTYrNmG2YjYqA== IGNvbW1lcmNpw6tsZQ== INC/0YDQuNCx0LvQuNC3 INW41oLVtA== INGW0LzRjw== IHNob3cncw== 4KSs4KS+4KSy IGZtYXA= b2NpZXI= IHRyZWJhbG8= INCS0LvQsNC00LjQvA== IOCmquCnjeCmsOCmpOCmv+CmqOCmv+Cmp+Cmvw== IOCqsuCqvuCql+CrgA== IGJsb2NrYWdl LXZ1b3Q= INCg0Ys= IGjDtmvDvA== IHZhc3Rnb2Vk LmZsdXR0ZXI= 7ZWZ7IOd INCt0LvQtdC60YI= IHbDpGhlbWFsdA== 4Ka+4KaJ4Kao INCS0ZbQvQ== zrPPgc6xz4bOrg== 4Lij4Lij4LiT IOS6guWAqw== 0KDQvtGB0YI= IO2DkA== IFdob2V2ZXI= IHRlaG9r PENyZWF0ZQ== 4bq54bq5cuG6uQ== INmD2KfZhtmI2YY= IHRlcnA= IOuLtOuLuQ== 2Y7Yp9mE aW5lbWE= YXPEsW7EsQ== b2ZlbmNl LmlkZWE= b3JuYXI= IGt1cnplbQ== IGFkYXR0 KFRhYg== yZRu IOCkl+CkvuCktQ== 0LfQsNGG0LjRjw== LmApOwo= 5pyf5b+F5Lit IOCyqOCyv+CyteCyvuCyuA== cmVxdWVudA== IGRhd28= 0L7QutGD0YE= INmD24bYsQ== IENlcnRhaW5lcw== IHByb3Zlcg== IOCksOClgA== INiz2YrYp9iz2YrYqQ== Zm9vcnQ= xI1ldG7Emw== QkJveA== IGTDqWNpZA== IOCmq+CmsA== aWZyYQ== U2hvdHM= UmY= IOC0reC0leC1jeC0tw== IFZlcmJhbmQ= QWhtZWQ= IHRpYW0= IEJhc2lsaWNh IG3Duw== R3JlZ29yaWFu IE1hbmR5 IG9yY2hhcmQ= dmVybGV0 IOCupOCunw== IOCmruCnsA== ZHJlc3Nlcg== w69j X3N0cmlw 4LiO4Lir4Lih4Liy4Lii INC/0L7QstC40L0= INGA0LDQt9GA0LDQsdC+0YLQutC4 INmD2KjYp9ix IExhZGU= IFNvdXNh IOS9k+iCsuW9qeelqOWkqeWkqQ== IHBhaW5zdGFraW5n INmC2Yk= Y2xlcmM= am9jaA== IGFhbndpag== z4nPhM61z4E= IHBjbQ== IGFuYWxzZXg= L2N1cGVydGlubw== 16TWvNei16g= aWxhdGU= aGVhdnk= IEFyY2hpdm8= IHNlbXVhbnlh J107Pz4i Y3VwZQ== IHBhcmtlcmVu aWdncw== IGtvc2hlcg== IEV4cGxhaW5lZA== 5pS/5Y2P IGPDrW0= 5o6i57Si IGJldHJpZWJlbg== IElzbGFtaXN0 4oKsxZM= 4LOA4LK44LON IHV1cmluZw== IHRhdXI= CWF1ZGlv 0rPQsNGA0LDQug== ZXJvZW4= IFF1aXRv dG93 4YOQ4YOu4YOU4YOa IGRkaXdlZGQ= 4oCZ4KWk TW1l ZWxpbw== YWZlY2FyZA== IEludGFrZQ== IE9wcG8= IOGAu+GAmeGAlOGAueGAmeGArA== QXJ0ZQ== LlpvbmU= INiq2KzZh9mK2LI= CWRpZmY= INGA0LDRgdGB0LrQsNC30Ys= IOCkquCksOCljeCkpg== IOCyquCziw== Q2FyaQ== 0LDRgtOZ0YPQvw== VUlQ TnA= INCg0LXRgdC/0YPQsdC70LjQutCw0YHRi9C90YvQvQ== IOS6uuawlw== IHRvaWw= IOC0seC0v+C0quC1jeC0quC1i+C1vA== 2YrYs9mJ QWRvcm5tZW50 LWJhbms= IGZyYW5jYQ== IGthbmFu UlNU IGlueW9uZw== INCa0YPQvA== IGRpbGVt IHByZXRyYWluZWQ= IGF0cmFlcg== IGvDvHM= IM6xzr3Osc66zr/Or869 ZmF0YWw= Y2FsbGVl IG5vc2Vz IG9rYW0= IOCmrOCmv+CmruCmvuCmqA== IOGDm+GDneGDm+GDoeGDkOGDruGDo+GDoA== IGTDvMWfw7xuw7w= INin2YTZhNio2YbYp9mG2YrYqQ== 5YWs5Yqh LmRlY2s= bHV2 IERTQw== INCw0YPQsNCw1KXRgdGL0YDQsA== IOGDkuGDkOGDk+GDkA== w61jb2xh IFByb2Zp YW5raWk= YGAuCgo= KGNlcnQ= IOC0leC1geC0rg== INCh0L7Qs9C70LDRgdC90L4= IGVsaWM= UGV0ZQ== IHBsYWF0c2U= INC40LzQv9C+0YDRgg== IOCwuOCwguCwl+CwpOCwvw== IOywqOufiQ== U3R5bA== KF86 IGpvaXNzYQ== 0ZHQuA== 5pyL5YWL INec15TXog== IOGDqeGDleGDlOGDo+GDmg== 0YLRg9C9 1aHVpNaA1bjWgtW0 7J247YSw VVJEQVk= IGB9Cg== X2ZpbA== IHRhaWxvcmluZw== IG1pc3PDpA== INei16bXnteZ IGluZsOpcmlldXI= IHJlY2l0YWw= 0YXQvtC00LfRltGG0Yw= 0L7QtNC10YDQttCw0L3QuNC1 IOCqsuCrh+CqteCqvg== TGluaGE= IGN5c3lsbA== IHRpdHVsYWlyZQ== QmHFnw== IHVuZGVycmF0ZWQ= IE1hZ2RhbGVuYQ== Lkludm9pY2U= IFdlaW5zdGVpbg== 2KfYr9qv24w= IOCkrOCliOCkoOClhw== IEdlbMOkbmRl IHlha3dl IO2ZgA== IG1lbWVudWhp IFZpdmlhbg== INee15zXkNeU INCa0LDQstC60LDQtw== INGG0LjQu9C40L3QtA== dGVybmF0ZQ== IHbDpnJk INCw0LLQsNC30Lg= IEpvYWNoaW0= IGdlbMO2c2NodA== IG11cmFscw== IGFkbWluaXN0cmF0aXZhcw== REVF X3N1cHBsaWVy IGV5ZWxpbmVy IE3DgVM= IGhlY2hhcw== LGNsYXNz 4LC/4LCo4LC+ U2NoZW1hcw== IFl1ZQ== IFZlcsO2ZmZlbnRsaWNodW5n IGNvbmRvbXM= 5Ye65ryU IGJhaXJyb3M= IGJlcmhhcmFw IOCkqOCkv+Ckl+Ckrg== 77ym IE1pZHRvd24= 6riw7J2Y IGNhcnLDqQ== IEpBVg== IGzDsw== IOS5kOS6mg== IFV6YmVraXN0YW4= IFRyaWVy LWFhbg== IHJ1YnJpYw== aXR0b3E= INCS0L7Qt9C80L7Qtg== b3Jhw6fDtWVz IGxldWM= 5pys56eR IOGDrOGDlOGDoOGDoQ== TGFwdG9w IGt1cmlvcw== 0L7Qu9GL IE5vcsOw csO8c3R1bmc= IHJ1bW9yZXM= INC606nRgNGB0LXRgtGD INW91b/VodaB1aXVrA== IHNjZWw= ZXZhbHU= bWV0ZXJz INC90LXQuNGB IEFCT1ZF IER1ZGU= INGC0LXQvtGA0LjRjw== IGdhbGl0ZQ== X1BMQUNF IGd1ZGFoYQ== IGThuqV1 IHRvbm9z 0JHQvg== IEhlcnpvZw== IGxpaWdh IEZPVE8= TWFycmlhZ2U= IG92ZXJsYXlz X3VucmVnaXN0ZXI= 4KuA4KqG IOCkrOClnOClhw== IHBlZ2c= KG91dGZpbGU= IHRlZW0= R2FzdA== INC+0LHRg9GB0LvQvtCy IGRpc2xpa2Vk INeU157XkA== IGJha29t SG91cmx5 IE5pw7Fv L2FwcGxl IE1hbmRlbA== Z3VhcmRpYW4= ICopOwoK ZmVp IG5ha2s= 0YfRi9C80LA= T09M Ij4nCg== LUFscGVz INC806nRgA== IFN0ZWluZXI= 0L7RgtC+0Yc= INeU15vXoNeh16o= INC+0YLQutGA0YvRgg== IHBvc2libGVtZW50ZQ== aXRhbWVudG8= 2YrYsdin2Ys= IGVhcm0= LWNvbW11bml0eQ== IG9uZXI= IOGAnuGArQ== LHBhcmVudA== IHF1aWzDtG1ldHJvcw== 15XXmNeo IGJldHRvcg== IFZhdWdoYW4= IGFkbWluaXN0cmF0aWY= 0LvQuNGG0LA= IHJhZmZpbg== KCIiKSk7Cg== 44CC5L6L5aaC SElC IHNpZWhl J29idGVuaXI= LVNt IEZpbmRpbmdz IEJsYXR0 zrPPic69zrnPgw== X3BsYW5lcw== IHN1cnZleWluZw== LeCmlQ== IFRhbnlh IG9kb250 INek16LXnteZ150= IGxpa2Fy IHBvc3VlcmU= YWt1a2V1bg== 6KeG6K6v IGluY2lkZW5jaWE= IGRpc2N1cnM= IEthdGlrYQ== IG9yaWVudGFy IM64zrXPgQ== b3VnaHRvbg== dml5eQ== L2NhbGVuZGFy IOCuleCviOCupOCvgQ== b25pZXM= IOabtOaWsOaXtumXtA== 5qKm5oOz IHBsdWdnaW5n IFRlbnRv IGlucXVpw6l0 IEhvb3A= 4LiE4Lij4LiH4LiB4Liy4Lij IFJlaW5o dG91dA== IExQQVJBTQ== IOaWsOeUnw== IOCqruCqvuCqsOCrjeCqlQ== IG1vbmFyY2h5 0LXQu9GP0LHQuNC9 IG92ZXJwcmljZWQ= IGFub25pbQ== INCQ0LLRgdGC0YDQsA== w6Rya3VuZw== YXJ5dGk= IExpdnJhaXNvbg== IG7DqXQ= 4Li34LmI YW1hw7Fv IOCkueCkv+CkqOCljeCkpuClgA== cHJpanplbg== ID8+Jg== IGNoaW5vcw== cGVuYQ== ZGdl aWNlbnQ= IGhhZWJh Lk5hdmlnYXRl L3Jlc3VsdA== LT5b PSQoIiM= eXNjeQ== IHN1cGVyaGVyb2Vz IGZlZXN0amU= IHRyYXNmZXI= PEFjdGl2aXR5 IFNpdGg= 1aXVv9aE Y2Fzcw== 4KSk4KWN4KSk4KWA IGNoaWxkaXNo IG3DpHJr IGhpbmRzaWdodA== IOCkrOCljeCksOCkv+Cknw== amc= IOipsw== IFZheg== aW9n QmlsbHM= w7x0dW5n IGluc2NyaXRvcw== IHhhYWw= INGH0LDRgdGC0LXQuQ== LmZpbmFuY2U= OnZpZXc= PGNvbQ== 4KS+4KSx4KWN4KSv4KS+ IOCkheCksOCljeCkleCliw== w6F6cXVleg== 0LDQvdGW X1BBRERJTkc= IGdvb2Z5 IGFzY29s INCa0YDQtdC8 4LSk4LWN4LSk4LS/4LSV IGVzbQ== INC90LDQv9Cw0LQ= IE3DoXk= IG1pc29n IHLDq25k IGFjb250ZWNpbWllbnRvcw== IGdpbmFnYXdh bWlo Plo= fWVsc2VpZg== 0YjQsNC1 IGNvbmZpZGVudGlhbGl0w6k= IOS7iuaXpQ== INC60L3QuNCz0LU= IG1vbmVkYXM= IGxpbW91c2luZQ== IGRlc2Jsbw== IGF2cmViYmU= 6buE6Imy5b2V5YOP RmVybmFuZG8= IEVtaWxpbw== 7J2067KE LkNPREU= IGRpc2Y= IGFpZW50 Sm4= IOCyqOCyvuCyrw== IOCkueClgeCkgeCkpuCkvg== IOivtw== IGNocnV0aA== YXRhag== ZGV4 LeKAiw== 0YHQuNGB INC/0L7Qt9Cy0L7QvdC+0Yc= QUxMRUQ= PScnCg== KCIiKSl7Cg== IG92ZXJ0dWlnZA== IGtvb2I= IHRpbGdqZW5n LsKrCgo= PXRyYWlu ZWxhYXQ= CUlOVA== 0LLQsNC3 Ited IOuwlOudvA== IGJlcm9lbWRl IOCwmuCwv+CwtQ== IGNo4bupYQ== 0YLRltCy LmFsbG93ZWQ= INWC1aHWgNWh1aLVodWy LXZl IGxsYW1hZG9z INC00L7QsdGA0LU= b3RoYQ== X1BSRUM= IGxhc3Nl 77yM5Yqg5by6 IHN1bGlzdXQ= 15bXmdea IGpldHo= IFNhaGli 5LqL6aCF X3Byb2plY3Rpb24= IENhcmVmdWxseQ== IOC0pOC0v+C0sOC1geC0teC0qOC0qOC1jeC0pOC0quC1geC0sOC0gg== IGVpZ2k= b2Rpbw== aXJ0aQ== INmI2YTYs9mI2KfZhNuN aXNlYXU= 5pyf6LWE5paZ IOCyleCzi+CyteCyv+CyoeCzjQ== IGZyYW1rdsOmbWQ= 4YOU4YOm 2LXYsdmB L2Fy IOGDkuGDkOGDkuGDoOGDq+GDlOGDmg== INCy0YvQudGC0Lg= Qk9VTkQ= Q2FydGE= INC20rHQvNGL0YHRgtCw0YA= 4Z+G4Z6U Y3Rv SVVua25vd24= IENsYW1w IHJlYWxpdGF0 INC60LXQvQ== IGF0dGVuemlvbmU= IOygleyLoA== INeU15DXqteo X2hvb2tz IEThu4s= IFRlY25vbG9nw61h IEJlbGxz 4KyZ 1aHVttW/ X2xh CWNvbXA= 0LPTqdOp0L3Rgg== IHZ1b2k= 5piU bGFyZ2VzdA== IHJlYWdlbnQ= IEFkaXJvbmQ= IGZvcnRhbGU= IGhhbGltYmF3YQ== YWN0aQ== IOCkh+CkqOCkruClh+Ckgg== IG1vZGFsaXTDoA== IEh1bmdyeQ== INGB0LDSsw== LnVi IE1VTklD w610w6FzYQ== INC60YDQsNGB0LjQstGL0LU= IGx1YnJpY2FudA== INGB0LvRg9C20LHRgw== INio2LnYttmH2Kc= 4Z6R4Z+F INGB0L7QsdGA0LDRgtGM IGdyYW1vcw== ZXRuYQ== IOCuleCvh+Cun+CvjeCunw== IMOBZ3Vh ZWtlbGU= IOyjvOyEuOyalA== IG9tZ2FuZw== INeR15DXoA== X2Ntb3M= X2xhdGVuY3k= INCy0L7Qt9C80L7QttC90L7RgdGC0LXQuQ== IGF1eHF1ZWxz IFThu5VuZw== 5oOz552A INC+0LHRgdC70YPQttC40LLQsNC90LjQtQ== IGNvbnZvbA== LE8= INiu2YjYsdiv QW5ubw== ICIifQo= IHBmbA== IGx1bXBz IEluc3RhbmNlcw== IENoYWxr X0ZpbmFs IENvbGlzZQ== IEFyem5l VVRJT05T IEJhdmFyaWE= IOGDkOGDoOGDqeGDlOGDlQ== INiq2YXYrw== IGRlZWxuYW1l INin2YTYo9iz2LE= INGC0LXQvNCw0YI= LmZsaWdodA== bWFlbA== IGJlbGllYnRlbg== Kios 5Z+55YW7 IGluc3BpcmE= IEZvcm1hw6fDo28= IGJyZWFkY3J1bWJz IGt1dWx1dQ== IGZhYnJpcXVlcg== X0RM INin2YTZhdit2KfZgdi4 INGC0LjRgg== bGV4aWJsZQ== 54ix55qE IGNvbnRlbXBvcmFpbg== 5oCn6IO9 IOOCs+ODoeODs+ODiA== IEhlbWlzcGhlcmU= 4Z6T4Z62 INeQ16DXqdeZ aGF6aWs= IG51bWVyYWw= SGF1cw== INGC0YvQvdGL KE5VTQ== IGRpbWVudA== 2qvZiA== zqzOu865 X2NhdGVnb3JpYQ== IGZhaXo= INuB2YbYr9mI2LPYqtin2YY= bW90aXY= UFJJVkFURQ== L0RE bWV0aWs= SUtP LXdh ZWZpbGU= 6LKM CXJlc3RvcmU= 0LDRgNGP IFNXRQ== X0lF aWduYXRpb24= INC80LDRgdGB0LA= IFdpZWQ= IOCqieCqquCqsuCqrOCrjeCqpw== L3Bhcg== IFBSSU9S LWHEp8SnYXI= IHNoYWJieQ== IEpBQ0s= emVyZQ== IOaRhA== 5a+55a2Q UGhpbGw= IGJlcmM= IE91ZGU= INGB0L7QstGA0LXQvNC10L3QvdC+0Lk= 4Ka+4Kam4Ka/ IHByZWRuaXNvbmU= IE1lbWU= IE1FTU9SWQ== IFJ1ZG9scGg= 0LDQvNC10YA= 5oSb44GE 4Kew4KeN4Ka2 IEdyYW5kcGE= Jgo= IEt1bGxhbg== IGdyYWM= INC40LzRg9GJ0LXRgdGC0LLQvg== 5ryU5ZGY INin2YTZhdiz2KzYrw== INCw0LfQuNC9 IOCkqOCkvw== IHNlY29z dWZmZXJpbmc= IE1pcmFnZQ== ZXN0YW5kaW5n INC60L7QvdC60YPRgNC10L3Rgg== IFFN INC/0LjQutC40YA= IGFiaWRpbmc= IOCqquCqtg== IHN0cmF0YQ== IG9sZXZh IExlZ3M= IE1vdmltaWVudG8= LlBpYw== IG1lcm8= IGJlc2NocmVpYnQ= IHNvdWxmdWw= X2Zvcm1hdHRlcg== 4K+B4K6z4K+N4K6z4K6k4K6+4K6V dmVkbw== IEZpZA== 5q+r57Gz INW21aHVrdWh1aPVodWw1as= IFJlY2VpdmluZw== X0ludGVyZmFjZQ== SUxvZ2dlcg== IHBvZ28= UHJlw6dv IE9ESQ== IGF2YXRhcnM= 4YOd4YOc4YOo4YOY IFRyYXZhaWw= IGtpbHBhaWw= IGFwZXLDp3U= LUV1cm9wZWFu 2K/Yp9ix2KfZhg== INGD0LTQsNC70LXQvdC40Y8= IOWuieW+vQ== 0L7Qu9GM0LrQuw== RWxsYQ== IGV4Y2VwdG8= J2HDqXJvcG9ydA== IG1haGltb25n dmF0b3Jl Q2xhcw== TGl0aA== IClb INGC0YDQtdCx0L7QstCw0L3QuNGP0Lw= IGVudGVuZGlkbw== IMq7Ycq7b2xl IHByZXN0YWNpw7Nu IFJldmVyZW5k X+S4reaWh+Wtl+W5lQ== YXRpbmk= IEZvcm11bGFy IOCmrOCmv+CmpuCnjeCmr+CmvuCmsg== dWx1bGE= IGNhdmFscnk= IOCmj+CmquCnjeCmsOCmv+Cmsg== INWw1aHVvtWl1aw= IOy6oA== mJE= INeo15LXog== 4LOG4LOV INCx0LjQu9C10YI= IEdvb2RieWU= INC30LDQsdGD0LQ= IGpvbGxh IGVtcMOq X2J1c3k= 0LDRgtGL0L3QsA== YWhpdGFqaQ== IERpZmZlcmVudGlhbA== LnNjaGVtYXM= IGzDtnlk YXZhaWQ= IOS4g+WWnA== xIdpaA== CWF4 IOCkr+CkvuCkguCkmuCljeCkr+Ckvg== IGZhY2E= INC/0L7Rj9Cy0LjQu9GB0Y8= IHN0aWx0ZQ== S0lORw== IGVzcGVyZQ== 0LjRh9C90LjRhQ== IHJvbXBl 0pvQuNC0 IGdhbmdlbg== aW1hZ2VuZXM= QWNjdW11bGF0b3I= IHJlbm92YXRl 5LiA5pys5Yiw ZXRvcw== X2Fib3J0 IM63zrzOtQ== YW1hcQ== IMO+ZWlycmk= INCe0L3Qvg== INCx0L7Qu9GM0YjQuNC90YHRgtCy0LA= IGRpc3RydXN0 IGNoZW1pbnM= IOC0leC1i+C0n+C1jeC0nw== 44Kk44OZ44Oz44OI IOCynOCyrw== CXRp IGt1a2hv ang= IHBvdGVuY2lhcg== IEpld2VsbGVyeQ== 15XXldeQ15o= IGNob29zZXI= IGRsbw== aW55aQ== dHdpZw== IOyJrA== UHVuY2g= X2l0cg== IENsaWZmb3Jk INin2YLYsdij LUFuZ2Vi IEJUTg== IGdyZXZl INiu2YjYr9i0 IG3DrW8= 4KSr4KS+ c3Bk Y2VydGU= IOW4neaZrw== 4KeB4Kef4Ka+4Kaw4Ka/ luCxjeCwrw== INqG2q/ZiNmG2Yc= IGNoYWluZQ== 5aSp5aSp54ix IOC0teC0vuC1vOC0pOC1jeC0pA== bHluaQ== IFRvbGQ= IOGDo+GDluGDoOGDo+GDnOGDleGDlOGDmuGDp+GDneGDpA== ICc/Jw== 2YjZhNmD2YY= KWFkZA== IOCmrOCmsOCnjeCmpOCmruCmvuCmqOCnhw== U2FtdWVs IOyeiOq4sA== O2lm 15LXldeR15Q= IOGDneGDnOGDmuGDkOGDmOGDnA== IHpuYWxlxbrEhw== X3Byb2Nlc3NvcnM= IGluY2FyY2VyYXRlZA== IGTDtm50 IEhvcmU= IENPT0w= 2YLYp9ix IERyYWNv IOOAjQ== IGJpb2xvZ2lxdWU= INWj1bjWgNWu1bjWgtW0 IERPTUFJTg== 1bjWgtWp1bXVuNaC1bbVttWl1oDVuNW+ cHV0YXRl IOGDmOGDoeGDouGDneGDoOGDmA== KGlkZW50aXR5 bGluZW4= cGF5ZXI= IHRoacOqbg== IG1lcmk= IHByb3TDqGdl cHJpw6l0w6k= 5pyA5YeG IEluZGk= INCa0LXQuQ== IGVuY3VlbnRyZQ== RXNl IOCqleCqueCrgA== 4oCZaWRlbnRpdMOp 4oCZxZNpbA== 0JzQvtC90LPQvtC7 ZW51YQ== IHNhdmFpcw== INCh0Lo= IGpvZ2E= IFRhcmdldHM= Q0FURUdPUlk= 16LXldeT TWlsbGlvbg== IGJpamdl INC60LDQttC00YvQvA== IFNvdG8= aG9jaA== IGluc3BlY3Rpbmc= IOic cGxhdHRmb3Jt IHRlbmRpbmc= IHF1YWxpZmllcnM= IGRpYXJpZXM= 2b7ZhNiy INGB0YLRgNC10YHRgQ== IGNvbmNlcm7DqXM= Piku 1bbVtw== IFRoZW9yaWU= IGxhcmd1cmE= IEFTU09DSQ== xLFuY2E= IGRlc3RpbmFkYXM= OjoqOwoK IFR1bGU= LXBhZ2luYXRpb24= INC00ZbRgtC10Lk= 0LvTmdCz05nQvQ== IOCusOCumuCuv+CulQ== IExJTktT IE1vbm9wb2x5 INC805nSk9C70q/QvA== IGxva2VsYQ== IFBlcmhv 4Kqw4KuH4Kqo4KuN4Kqm4KuN4Kqw IGludGVyYWNjacOzbg== INGB0LvRg9C20LE= IGR1dmV0 2LPYqNmC IGFydGllc3Q= 16LXp9eR IE5vdmVtYnJv X1dBS0U= LWludGVyZmFjZQ== IOCuteCvgOCusA== IMOzcmRlbmVz LWNvZGVk IFNoZXBhcmQ= 77yn aXRha2E= UmFr IDopLg== IGRpZWw= JHNtYXJ0eQ== IOCmpuCni+CmlQ== IOGDqeGDkOGDouGDkOGDoA== KGlzc3Vl IGtvZWs= INGB0LzQtdGB0Lg= 5p2D55uK IGZyb3U= IHN1cGxlbWVudG9z IGNyb3Nzcm9hZHM= YXdhYg== CW1vdXNl IGNvcnRpY29zdA== 4Lii4LmJ4Lit4LiZ4Lir4Lil4Lix4LiH IE1lZGljaW5lcw== IHNlcnZlbnQ= IHJ0ZQ== CXNpZGU= IFRyZWZm IHBvd2VycG9pbnQ= VGVuZGVy IHLDqXNpZGVudA== X0lPQ1RM IGzDtXBldA== INC+0L3Ss9C+0YDQvg== YXN0cmVhbQ== INeU15zXnNeV IGFpbw== 4LSq4LWN4LSq4LWG4LSf4LWB4LSk4LWN4LSk4LS/ IGd1cnVz IGxhY3F1ZXI= 77ya57SE INiq2YjYp9mG2YbYrw== INW51aXVttaE aGFzaGVk INeg15XXodek16o= INeZ15fXoQ== dWVzaWE= RGVudA== IHByb2ZvbmTDqW1lbnQ= IEZj IHZlcnRlbGQ= IEJFUw== 6ZuF6buR IGFtYmllbnRhbGVz INGA0LXQt9GD0LvRjNGC0LDRgtCw IOCkquClgeCkog== SW1wb3NzaWJsZQ== cmVnaXN0cmVy L21hbnVhbA== IFZlcmvDpHVmZXI= PkhlbGxv bGV2aXRyYQ== IOS6mue+jg== INCy0LDQutGL0YI= IGluY2VydGlk IHJlc2VydmFkbw== emtp b3dvcmxk Y29taWM= IM+AzrHOrw== dW1pbmVuc2U= IOC3g+C3mg== IG9sYWNhcQ== 4oCcQWxs UEVY c2FuZGJveA== IOCyrOCzh+CylQ== IM68zrXOs86szrvOvw== IM61zq/PhM61 IGVudmVs J1VuaW9u IGFwYXJlY2Vt IFBhY28= X21pc2M= V29ybGR3aWRl IGJlbGFuZ3N0ZWxsaW5n IGhlc3Vt U3Vn IM66zrHPhM6/ IG5vZGE= YWhyZQ== emllbnN3YWFyZA== IENBUFM= Q3VzdG9taXplcg== 4LKV4LON4LKV4LK+4LKX4LK/ b3JuYWw= 4LC+4LCf4LC/ INin2Ybar9uM IHNlcnJl 0LDRgtC40LrQuA== 57eg IHRlcnJlbQ== PVtdDQo= IOCujuCutOCvgeCupA== 5rWp54m5 IGluc3RydWs= IFdFUkU= IENJUA== LkRlcHRo INeg15nXpw== IFJhaGE= IHVuaWZ5 INin2YTZhdiz2KrYq9mF2LE= INC80LDRgdGB0LjQstCw IEl4 IE1lbmdlbg== IHByb2N1cmFt a2FybWE= 4YCc4YCv4YCV4YC6 IHBvbmVtb3M= IGtlYW1hbmFu IOKZpQoK YWl0aGVhbWg= ZHXEn3U= IGJpw6hyZQ== LmNvbm5lY3Rpb25z IG1hc2FuYQ== IFTDvHJrbWVuaXN0YW4= IG1hc3Rlcm1pbmQ= IG5lY2VzYXJpYW1lbnRl bGVhZGVycw== IGludmVzdGlzc2V1cnM= U2VjdA== 5omT5LiA IGtsYXBwdA== IFBQUw== IOC0quC1geC0sg== IEthdGFy IGRvdGE= YWNhbW9sZQ== IHdlaWdodGluZw== 2LHYp9i32Yo= c2ltdWxhdGU= Vk9M 15nXqteZ150= IGxpY2Vuw6dh 44KF IGVyc2V0emVu IGZpemlr IGJlbmRz IENyaXN0aWFu xYLEmQ== IGNuYW1l 55u06YCJ LW90aGVy IGJld2E= IHZpcmtzb21oZWRlcg== c2Nob29scw== 7Z2h 0L7Rh9C60LU= INC/0YDQtdC80YzQtdGA IHByb2Nlc2E= 157Xldef INCc0L7Qu9C+0LQ= IHByb3BoeWw= 4b2w INC60q/QvdKv IHXFn2E= aWZhZGhp IHZlcmh1aXM= IG1vZWlsaWprZQ== YW5kZW1pZQ== IFJ1cA== TGVha3M= INC/0L7RgdGA0LXQtNGB0YLQstC+0Lw= INqp2KfYsdix2Yg= IE1pcmU= b2Npb3M= IGZhyrthdGHKu2l0YQ== 7KCE7ZmU IG1pbmltaXphcg== rOyYgQ== LlNvbWU= UXVhdA== IEJhcnJpbw== PT09PT09PT09PT09Cg== 77yad3d3 Z2V5 IHN0cmVlaw== IGNhcHRpdml0eQ== INCy0LjRgtCw0LzQuNC9 IG51bmc= J3VyZ2VuY2U= INin2YM= IHVkYWw= 5qGR W2NlbGw= IHZyYXRh aWtlemE= X2RlcGVuZGVuY2llcw== bWl6 IFVCUw== INGB0LXRgNC40LDQuw== LXBsYW5l IHBhc3RlZA== ZW1pc2U= IOCmieCnjuCmqg== ICcqLg== PW5pbA== IGNhcmRpZ2Fu IGFsdW1uYWRv IOCkheCkguCkpg== QW5ub25jZQ== IG9wcGVydmxhaw== Pz4+ IERpZG4= X3Vzcg== IGFncmljdWx0b3Jlcw== IHByZW1pZXJlcw== IFJFTlQ= IGNyb2NoZQ== ID8/PwoK 0YDRi9Cz IHNhcmFk IOCkrOCksuCljeCksuClh+CkrA== IGZyZWRyaWtzdGFk IG5vcm1lbg== Q2hhbGxlbmdlcw== CUFycmF5cw== INWh1bfVrdWh1b/VodW21oTVqw== IHZlZ25hbg== INW/1b7VpdWs IHNlcmnFn2Q= IOCuteCuqOCvjeCupOCvgQ== cmF3ZXI= IGhvb3JkZQ== PklE IFN1cHJlbWE= IFBldHJvYnJhcw== IHNhdGU= IOCkueCkvuCkpg== 6I6T IGZpbmFuY2llcmFz IOCkieCkpuCljeCkmA== 0LDQu9GM0L3QsNCz0LA= IGZhY2VuZG8= INCz0L7RgdGD0LTQsNGA0YHRgtCy0LXQvdC90YvRhQ== 0YjRi9C70LDRgA== IFJpY2Fu SWZhY2U= IGluY2k= IOCkqOCkteCkguCkrOCksA== YW11dQ== IOCkmuCkv+CkleCkv+CkpOCljeCkuA== cG9ueQ== 0LDRhdC10LjRgg== IEZpZ3VyZW4= IGNvbXVuaWNh X3ZlcmJvc2U= INCw0L3Qug== cHLDqQ== 0rfQuA== IGFkbWl0aXI= 6Imy6KeG6aKR IHBpbHM= TGVhdGhlcg== 4Kq34KuN4Kqj IGF0cmlidXRv CUxhc3Q= X21vdmllcw== dG9ycmVudA== YXlkaQ== IEx1bWJlcg== IHR1bm5nYXZpZw== IGNvbnRlbXA= IG1hbmlmZXN0YcOnw6Nv IOm7hOmHkQ== IOC0uOC0v+C0qg== IHdhcnRvxZtjaQ== IOCyteCyv+CyoQ== Rk1U bmVpZ2hib3Jz IEROSQ== IEFyY2hpdGVrdHVy IGJlemllaGVu 44K544Oa INCh0J4= dWhpbg== IGNhcnRvbnM= INeS15XXow== IEFsZ29yaXRobXM= VGhhbmg= d2VuZGln bXo= aWxlYmlsaXI= 4KmL4Kiy c2NoZWQ= INGB0YLRgNCw0YLQtdCz0LjRjw== IHByZXRpdW0= PWxpbmU= LUJlcg== IHRpc2s= INKv0LnQu9GH0LjQu9Cz0Y3RjQ== IFJvaHI= 6K+06YGT LmZseQ== 4KWN4KSr4KSk INC70LDRgNCw 0L7Rh9C90YPRjg== IFJvbmc= IMSRZW0= IOCwpOCxjeCwteCwsA== INC80L7QtQ== IExhZ2k= IHpleg== INCx0LDQtg== IEVib255 INCy0LDQvdC90L7QuQ== IGVuZWk= IFNvcmdl INCS0LXRgNGF0L7Qsg== INiq2LHZg9mK2Kg= IHN3ZWF0c2hpcnQ= IE5hbW1pbmVyc29ybHV0aWs= X3Bhbg== INCz0YDQsNC80LDQtNC3 X1BLVA== IOuLiA== IGxhbmd3ZQ== 44CW IOCysuCzi+CylQ== INCy0L3QuNC80LDRgtC10LvRjNC90L4= ZW50c2NoZWlkdW5n b3Jlc3RhdGlvbg== IkFU X2li YW5nZXBpY2tlcg== 5q2J QVZFUg== 44Gf44KK IG1hZHVyYQ== LXPDqw== IHBhc3Np INWt1bjVvdaE1bjVvg== JzonJw== LmxvYW4= IOC4iOC4tQ== LXJlZnJlc2g= X3JlZ2lzdGVyZWQ= IGxpdG9yYWw= Y2VydGFpbnR5 bmHDsGFy IHJlcGV0aXRpb25z IGdhd2E= INCz0LDQvA== IGxva2FhbA== 0LDRiNOZ IHNjZWxlcg== aXTDoXJpYQ== IFRQUw== 2LHYr9in2LE= 2LTYsdmC XV09 VGFwZQ== IHBhcmNlbGFz IFRvYmFnbw== IFR1aGFu IOCuhuCusg== IOCknOCkguCkl+Cksg== IFBTTA== IFZJREE= IGRlZnM= LnN5bnRheA== IHZldHRlZA== IEF3ZQ== INC006/RgdGC aXZvcmU= IHJpbmdhbg== IGN1cnJpY3VsYXI= IGV0YWJsaQ== IG11bmRvcw== IFN0b3Zl IG9udmVydw== 56iL5bqP6ZuG IEZ1cm5hY2U= INmF2KfYtNmI2YU= ZWNpbA== 4LK/4LKX4LK+4LKX4LK/ IGRpbHV0aW9u LVNlcmll LXNvbg== IHB1YmVydHk= 5Yeg5Y2B IOCyheCyteCyleCyvuCytg== 44GX44Gm44GK44KK44G+44GZ a8O2cnBlcg== 5YOV TmlldXdl ZXNzYXM= INC00L7Qu9Cx0L4= IE11bGU= dW50ZXJyaWNodA== IHdpZGVuZWQ= INeU15DXmdep IM6xz4PPhs6x IElzaXM= 4YOQ4YOi4YOd4YOc IGtldGVy LXB1dA== RGllbnN0 INCx0LjQvdCw0YA= IG9wbGVpZGluZ2Vu IGNhcm5lcw== QWJpbGl0aWVz INC90LXQvtCx0YXQvtC00LjQvNGL0YU= IM+Ez4HOrw== INCy0LXQu9C+0YHQuNC/0LXQtA== 4YOQ4YOa4YOZ IHPDqXY= dHLDug== IHBlc2FkYQ== aHVhbmE= aW92 INGN0LrRgdC/0LXRgNC40LzQtdC90YI= IHJlbXBsaQ== WVU= IOqwgOy5mA== IH0pKQ== W0luZGV4 IE50cw== VmlkYQ== 2ZHZig== IFN0YWNleQ== IFJlY2huZXI= IFJldHJpZXZlcg== cmVnaW9uYWw= IHRocm90dA== 4KWL4KSn4KS/4KSk 5qW944GX X2xvY2F0b3I= 4LmA4LiX4Li14LmI4Lii4Lin 0LjRgdC40LTQuNC60Lg= IHBhZ2luYXRl IG50YWJ3bw== 0JTRgNGD0LM= IOCkleCkruCksOClhw== b25uZXM= zrnOus6x IExvamE= 0Y/QvdC1 4Kaw4Ka+4Kac X2Nvbm5lY3Rvcg== IFLDoWRpbw== L2NvbXBpbGVy INiz2LHZhdin24zbgQ== 0LHQt9C40LDRgNCw ZW5na2Fw cG9zdG9z IFVyc3VsYQ== 2LfZhNin2Kg= IOCkpOCkuOClhw== IOCkn+Ckv+CkleCknw== Lm9s IFRhY2g= IEZyZW1vbnQ= 1aHWgNWz IHBhcmNoZQ== IGFyaXNlbg== IEJvbmk= 5pet 0LTQuNGC0LU= IHBsw6Fu IFNvbGFyaXM= IOCkueCkv+CkpA== IEdJVkVO IG5pcmU= CUNsb3Nl IHByb3BhZ2F0ZWQ= INC/0YDQvtGG0LXQtNGD0YA= INGC0YPRgNGD0L8= 44CC5aaC IGF0dGVuZGFudHM= PWF4 IGZyZWVy IFJ1dGhlcmZvcmQ= ZW5kcGhw UUQ= X1NFUVVFTkNF IHByb2NsYW1hdGlvbg== IGjDo25n 2Y7Zgg== INCx0LDRgNGL0YHRi9C90LTQsA== 2YfYp9io2Yo= IOCqheCqnA== 24zZhtqr IOGDm+GDoeGDkuGDkOGDleGDoeGDmA== 15PXqNep 0YXRi9K1 IOCuleCuvuCun+CvjeCunw== IFNQT1JUUw== INiz2KfZgg== IHBhdHJvb24= 4Lie4Li34LmJ4LiZ4LiX4Li14LmI 4LK/4LK14LOB IENhZGFzdHJv INek16rXqA== X3Zr L3dz w6JuaWNvcw== IM6xz4bOv8+Bzqw= IHZlbmFudA== IOWkp+WPkeaji+eJjA== YWJseXR5cGVk LnNjYWxhYmx5dHlwZWQ= LicpKTsK IFplcHBlbGlu 4Lie4Li5 LGV2ZW50 X2JlaA== aW1obmU= IOC0uOC1jeC0teC0qOC1jeC0pOC0gg== dWplc3o= YmVpbg== ICIuIik7Cg== XFNlZWRlcg== aXBoZXJz IFN0ZWNr IOCytuCyv+CyleCzjeCyt+Cyow== IExqdWJsamFuYQ== IFRow7xy IHjDumM= IHRva2VuaXpl ZWxmZGU= aWRobmU= INC/0LDQvNGW0LY= IHF1aXR0w6k= IM61zr7OsQ== a2VsYXM= L3Byb20= IFJhc211c3Nlbg== 77yM5bqU 4bq3bg== UHJlY2lz bGV4aWE= IOC0ruC0seC1jeC0seC1gQ== CWNhcg== KHVzaW5n RU5ESUY= 4oCL4Z6X IE1haW5seQ== IER1bW5lemV1 IHpvbWI= SWxsaW5vaXM= IE1hZGE= IG9iZA== VGVuZ28= IHByb3RlZ2lkbw== IG1pdGlnYXRpbmc= IGFsYmE= c3Rlc3Q= 4oCT4oCT4oCT4oCT ZG9jdW1lbnRhdGlvbg== 2LnYr9in2YU= 4oCM2KrZiNin2YbbjNiv IEFyb24= IOCkmOCli+Ckt+Ckv+CkpA== LmVsYXN0aWM= 2LTYtw== INeU16nXoNeZ150= dW5lZXQ= IE3JmW4= INGB0LDQvNC1 IG9yZ2FuaXNhc2k= IGh1bWJsZWQ= ZW5qYQ== 5Z6D5Zy+ J2hhYml0dWRl IGJpZGRlcnM= IM6gzrHPgc6x IExhZGRlcg== 6Y+I INGB0L/QvtGB0L7QsdC90L7RgdGC0Lg= O2Jhc2U= IHrDoXJvdmXFiA== VMOqbg== IGJsYXN0cw== IHNlcm1vbnM= IGlwcA== INeU16rXng== IHN0cnN0cg== 4LSk4LWN4LS4 IHhhbA== IEZEUA== INWw1aXVt9W/ IGluZmluaXRv b3JpZGU= 2YTYp9mH IGdlc2NobmllZ2VsdA== IMOhbmg= LlBvc2l0aXZl 5Lit5paH5a2X IEZyZXF1ZW50 IHR5bGU= aWxpa29t ZnJhY3Q= S2lsbGVk 57qi6buR5aSn5oiY IHBhcmxlbnQ= INin2YTZhdiv2YbZitip b3Zza3k= IHJlaXNlbg== X2RvY3VtZW50cw== UGlz dW1ibHI= 4LmB4Lif IOCkn+ClguCknw== 25DYr9mI IGVtcGZpZWhsdA== INGB0YDQtdGJ IGNvbmNhdGVuYXRl LmRlcGFydA== IGFuYXRpbg== YXV0cw== 5424 IGRldm90aW9uYWw= 0YjRi9C70YvSmw== UklDVA== IOCml+CmvuCnnA== V29ydGg= INix2YrZhQ== 54yb54OI 2LnZiNiv2Kk= INin2YTYs9mK2LfYsdip IHF1bGw= X0FCT1JU d2Fi IGFsbnlw ZXRyYWNr INC40L3QvtGB0YLRgNCw0L3QvdGL0YU= IG1hc3RlcmNhcmQ= LmFzYw== INiq2KfaqduM2K8= IFF1ZXJv 0LrQtdC5 IG7DrWw= RW1ib3Jh IERpYWdub3Nl LGxlZnQ= INC80YPRgNC00LA= Lm1haW5sb29w INeY16LXkg== IOC0pOC1iuC0tOC0v+C0sg== INC60L7RgNGA0YPQvw== IEVzdGVy IOC2tOC3hA== 0YXQvdGL CWJhcg== IHBhbnRhbG9u 64SI7KeA 5o+S5Lu2 IGZvbGxpY2xlcw== IHN0YWduYW50 4YOo4YOi4YOQ4YOR IFdpbm4= 2KvYp9mE z4HPjM69 cmlzdGE= IGN1c3A= IGJyZXZldA== IHJlY2ViZXJhbQ== IGNvbXB1dGF0aW9ucw== INCf0L7QvNC40LzQvg== IOGDoeGDoOGDo+GDmuGDmOGDkOGDkw== aW1idXJzZW1lbnQ= IHZlcnRyZWtrZW4= IGdydXBh J2FjY2Vzcw== IHNvaXLDqWVz IHNsYWNodG9mZmVycw== IERpdmE= IHdlcmtnZXZlcnM= 2YjYudmK2Kk= IHJpdGVz aXTDrQ== INGC0Y3RgNGL RXNwZWNpYWxseQ== IGhvbGluZXNz IENoYWxldA== IGJlaGFuZGVs CXRpbWVvdXQ= cG94 YW1hbnlh 0LXRgtC10YHRjA== IGLDtnJqYW4= IHNhdGlzZmFjdG9y 55m85biD IEl0b29iaXlh cmVsZWFzZWQ= IHJlZ2FpbmVk IHdpbGxvdw== IHJlY2hhem8= IGZpcmVmaWdodGVy cG9kcw== aHVn IGJlZGllbmluZw== U2hhZGVycw== zrPOtc67zrzOsQ== IHBvaXNvbmVk IEJlc2Nod2VyZGVu IHBhaWtrYQ== IFhMUw== 4Ka+4Kat4Ka+4Kas IEdsZWljaHplaXRpZw== INil2LnZhNin2YU= 4Lav4Lea4LeB X3RvbA== R2VicnVpaw== LWph IHBhcmtlcg== IHNww7Rzb2I= ZW5zYWdlbQ== IExBRA== INCd0LXQtw== ZXJybXNn 2LPZitmC 4KWI4KSu X2hlcmU= IHp1bGtl OlZD PFJlY29yZA== QWVy aGFtdQ== IGNvbmRlbnNlcg== b21lZW4= IG50ZXY= IHNjaMO8dHp0 Q0VB INio2r7Yp9im24w= LnNjaGVkdWxlcnM= IGVsZXZhdGlvbnM= KFJlZw== IFBvbGs= IGFmbw== IMOnZG8= 5aOw6Z+z IGhpcHBvYw== IHJlcHJlc2VudGFt INKz0LjRgdC+0LE= ZXNzYWFu IGZhbWlsaWFyaXpl IHRvbGxlcw== zqzOu865z4PPhM6x X3dzZ2k= X0NMUg== IGV2YWRl INC60LDRgtC10LPQvtGA IEJvYXRz w6fEg28= IFZFUklGWQ== LXRpY2tldA== UGFyaXR5 IOCkl+CkoOCkqA== S3lsZQ== IHLDrWtpc3N0 RkRC UXVlbHM= IGFubm9uY2Vy IFpsYXQ= IERpZGllcg== IHN1YXZlcw== IM68zr/Ovc6x INCf0YDQvtC40LfQstC+0LQ= 5oSP5ZGz552A IHByb2plY3Qncw== INmB2KfYptiv INiv24zYsQ== 0LTQvtGA0Lg= LmlzbmFu IGFtYWxnYQ== IGlkeWxs bm91cw== w6tyaQ== Y2VudHJpYw== INCw0YXQsdCw0YDQsNGC QmF6 IHRlaW11bQ== INGA0YPQutC+0LLQvtC00YHRgtCy0L4= SVBFRFM= IFNsYXY= 0LDRgdGC0LXRgA== IGxhaXNz 0LDQvdGL0Yg= IGNvcGlhcg== IGluY2lzbw== INC90LXQutC+0YLQvtGA0L7QtQ== LW91 CXZpZGVv CUFjY291bnQ= bcSxesSx PkU= 0LDQvNC/ 0YDQtdC80YzQtdGA IGF0cmFw ZXNzaWFu IENvdWdhcg== INin2YTZgdmK INC40LDQt9Cz05nQtdC40q3QtdC40YI= IFNjaMO2bmhlaXQ= LGVycm9y IHJpa2s= 64WB IHh2 INii2LPbjNio IENvbXBhbmhpYQ== bWFhdHNjaGFwcA== IG3DvGg= IGRhZGFz IGTDvMWfw7xr IHBpbGdyaW1z KCc8Lw== Q0hJ INCx0LjQvg== INK70Ys= Q0xFQVI= IGlpbmc= IFRyYWRpdGlvbmFsbHk= IOmy IFJhbmtlZA== IGFkb3B0w6k= 4bqo IGxpc2JvYQ== 2KjZhNin2Lo= IGVuZXJnaWpl IGluY2VudGl2bw== 6LOq5ZWP IGludmk= IOunkOydhA== IFNUREVSUg== IGlyb25pY2FsbHk= cGVyZm9ybWVk IHZlcmxpZXJ0 IERlbGdhZG8= aGVybWU= IFRQVQ== 4LiE4Lij4Lia X1JlY29yZA== T2F1dGg= TWFt IOWvvA== aWRvc2lz INit2LHYp9ix2Kk= IH19Owo= c2VhdQ== IGV4dHJlbWlzdHM= IG1lZXJkZXJoZWlk LXBlcmlvZA== IMOpdGFibGly INGA0L7Rg9C/ IFN0YXRpc3Rpaw== SXNp IFVTRVJT Igov IGdlcHLDvGZ0 IGlzdGlx IFNBTEVT IHJlcGxlbmlzaA== INC30LDQt9C90LDRhw== IE1hw59l KGNsb2Nr 2YjYp9ix2Lk= IFNDUA== INC/0LXRgNC10LrQu9GO0Yc= IFFVSUNL CUNH KCIK IE1NT1JQRw== 4LC14LGN4LCv zrrOuc6x IGJyaWV3 INCd0LXRgdC80L7RgtGA0Y8= aGVhdGVy YW5lZXJz 5aW95LqG KSQv IGNlbnTDrW1ldHJvcw== IG1vZGlmaWVz IGludmVzdGk= INWr1bbVvw== IEF0cw== IFJBVA== IGNvbnRyYXRhZG8= IHBhaXQ= eWVk IOCmquCmvuCmsOCmrOCnh+CmqA== INC90LXQvtC20LjQtNCw0L0= LmludGVyY2VwdG9y IGtpbG9tZXRy IHJldm9sdmU= 0L7QvdC40LTQsA== IEJhYmls 57+M w7puaW9y IGRpYW1hbnQ= X2VzdGlt IM6xz40= IFJhc3Vs IGFycml2ZW50 IENvY2luYQ== IHBlcmNlcGNpw7Nu IHZlcnNjaGVuZW4= LW9jYw== IGJlcmxhbmdzdW5n IGh1bWlkZQ== Ii4v LWluc3RhbmNl YW50ZWw= LnNhbWU= U3Zl dXNpb25zb2Z0 IHByYWN0aWNh IEhhbHR1bmc= IHllcmU= aW5hbmRlcnM= IGxlY3o= 0Y/QsdGA0LU= S2F0ZWdvcmll 0LDQvdC10LU= IHTDs3BpY28= IGxhbG9sYWdp L0lu KElEQw== IEJldHJlaWJlcg== 16TWv9eY IOywuOyEnQ== IFZvcmF1c3NldHp1bmc= w6Rzc2ln L2FkZHJlc3M= X2Rhc2g= ICoqKioqKg== 4oCd5rS75Yqo IGdyYXBwbGU= PmVuZA== IOCopOCpgeCouQ== J8OpY29ub21pZQ== ICJdIik7Cg== IOWMlg== IG3DqG5l IEp1c3F1 4KS14KWN4KS54KS+ 4LCw4LGL4LCc ZXJtaXNzaW9ucw== IHN0ZW5kdXI= 4LWG4LSZ4LWN4LSV4LS/4LW9 X3JlbG9hZA== IOGDmOGDm+GDk+GDlOGDnA== IGFuc2Vv IEdhcmRlbmluZw== IGx1Y2h0aGF2ZW4= 4KSw4KWA4KSo IHNhYmlleA== IEFic2Nobml0dA== IHByaW5zaXA= INC60YPRhdC90Y8= IHJlcGFyYXI= 4Liq4Lit4LiH IM6gzrU= RGlzdHJpYg== 4oSicw== IHZpZW5h IGRhdGg= IG91dHNwb2tlbg== 2YrYrQ== IENQTQ== KHN0YXRlcw== IENvbXBhcmluZw== IGxldmFt KFJvdw== LlBVVA== IGluc2NyaXJl 0L7Qt9C1 RmHDp2E= eWV2 IOCyteCziOCypuCzjeCyrw== 4LCw4LC1 LnNvYXA= Y2x1c3RlcnM= KXk= IG5vbmV4aXN0ZW50 b3Jlaw== KHByb20= IG5lcG90 IFByb2R1Y2Vycw== IEpQTQ== IGFrYWQ= 5b6L5biI zIY= YXN5b251 7ZqM7IKs IERUUw== IHZhY2luYcOnw6Nv 4LmA4Lib4Lit4Lij4LmM QnVuZGxlcw== INGF0LDQvNCz0LA= YW7DqW1lbnQ= X0dBVEU= IEZsw7xzcw== IHZveA== 4YOY4YOa4YOU4YOR4YOY4YOh TGFuYw== IEdvdw== IFlhcm4= IM+Dz4DOr8+Ezrk= INC80LDQsNC9 IGthZmY= w73DpHJsZXI= INC+0YHQvdC+0LLRgw== 2YbZhg== w7xuZMO8cg== IHJoZXVtYXRvaWQ= L3R3aXR0ZXI= QmxhY2tsaXN0 CUtFWQ== IGJhY2E= INCy0L7RgdGC0YDQtdCx IOCmquCnjeCmsOCmpOCmv+CmrOCnh+Cmpg== INCx0LDQu9C60Lg= 5Lit6Imy KEd0aw== RWZmaWNpZW5jeQ== INin2YTYtNmF2KfZhNmK2Kk= IHRlcm3DqXN6ZXQ= INCc0ZbQvdGW 4YCh4YCs4YC4 X25m LkRlbnNl IHByZXZhaWxlZA== IFByZXZpZA== X3Jld2FyZHM= KHBvc3Rz JHRlbXBsYXRl IHNjcsOt IGFuc2FubQ== IEh1bWFuZQ== IE5DQw== IHbDqXTDqXI= 6Imy5oOF572R IE1hcnRpbmk= YWxsZXJnZW5pYw== amVjdGl2ZQ== INWh1oDVpNW11bjWgtW21aHVvtWl1b8= dmVkcmE= IG51Z2dldHM= IOagh+etvg== IGNvZ2Vy IHNvcnU= PXJhbmRvbQ== INCR0YDQuNGC X3JlcHI= xLHDpw== INio2KfZhNmE2LrYqQ== w6FtZW5lcw== VGFz 7ISt VmllbGxlaWNodA== IHBhamFtYXM= SGFsbw== RVRG LHN0YXRl IGJsb3F1ZW8= bGVsc2U= Z2VyZWNobmV0 IGluY2xpbmU= IGLDoW5o IOGDkOGDrA== UFJPRklMRQ== IG9ybmF0ZQ== IGNoYXJpc21h IGpvcmRhbg== 0LvQuNGE IG1hdMOpcmllbHM= INmF2LHYp9is2LnZhw== w7ZzesO2bg== IFJpdHRlcg== INC00YDQvtCx0LjQu9C60LA= IEZpZXI= IGJyZWl0ZQ== IHNrdWxk IOG7ig== YW5pbw== X1JFQUxUWVBF IG5xYQ== IGTDoWw= PkFu U2Fsb24= RG9uYWxkcw== 2LfYudmF2Kk= IHbDqXJpdA== INmH2YXYr9uQ IERvbWFpbnM= INei16jXkQ== INGA0YPRgdGB0LrQvtCz0L4= YmhhZGg= 7Iqk65+9 IOGem+GfhOGegA== IOS4gOS4qg== IFZlcm1pdHQ= ZW1iZXJzaGlw IHdheGluZw== IE9heGFjYQ== 5Lic5pa55b+D57uP IFJlY2Vw IGdhcmFudMOtYXM= J2FjdGl2 IFphdg== IOyerOuvuA== IGNyZWFzZQ== IHlhbnU= IM6xzrnPgw== RWRpdG9yJ3M= INW01avVrNWr1bjVtg== IGNlbnRpbWV0 4oCZZWZmaWNhY2l0w6k= IOaXqemkkA== INmE2KrYsQ== IOCyuOCzjeCyqA== QE1vZHVsZQ== IGZyZW1zdA== IFVyc2FjaGVu 5Lmw5rOV IOC0heC0qOC1jeC0teC1h+C0t+C0ow== IFNob3Rz IOCqj+CqteCriw== IHRhcmlldmVu IGnFn2U= IOCuquCuvuCupOCvgeCulQ== IOCwuOCwguCwl+CxgOCwpA== 6ZOB6Lev IGZhc3ppbg== INi02LHbjNqp IHNtYg== ZGVjcnlwdA== IFNhZGRsZQ== IE1vdGxleQ== INCx0LDSm9GL0LvQsA== dHJ5aw== IM61zr3Otc+BzrM= INGB0L7QsdGB0YLQstC10L3QvdC+0Lk= 4Kas4KeL IGZpbGVy INin2YTYstmF2KfZhNmD 5b2p5b2p56Wo5LiO5L2g5ZCM6KGM ISIp ID8+CgoK IGF2YW56YWRh INGA0LXQutC+0L0= IGZpZMOobGU= VXBsb2Fkcw== IG1pxJk= INC80YPQvdC+0YHQuNCx IFdhaHJzY2hlaW5saWNoa2VpdA== IEFzdHJvbm9teQ== LlNlcmlhbGl6ZXI= 4KS/4KSk4KWN4KSv 5Lit5ZyL 4LiI4Lix4LiB INC+0YDQvdCw0LvQsNGB IGJhbmdpbmc= T05MSU5F IHJlY2E= IOCkreCkj+CkquCkm+Ckvw== TWFza3M= IG5vdnU= INCw0LvRgtGL0L0= IGluZHVzdHJpYXM= 4Kq+4Kq14KuN4Kqv4KuL X3JvbQ== INC60LDQvNC10YDRiw== IEFuZXI= INC80LXQu9GM IE1pbGxl JnA= zrjOu863 IGVzc2VudGllbHM= aWxsZWdhbA== LWNtcHI= J30sDQo= IHRhdHPDpGNo IGTFvg== d2luZHM= IGFtYXA= IGNvbmN1cnJlbmN5 5q2j5paH IENyb2NoZXQ= IG11cmVu VW5oYW5kbGVk IHNvYQ== IEh1YmJhcmQ= INeU16nXmdeo15XXqg== IHN1YWxh Ol0u IEN1cGlk IHNvdWhhaXRlcg== 15LXlQ== U2VtcHJl IOCqnOCqv+CqsuCrjeCqsuCqvuCqqOCqvg== IFdpZG93 INin2YTYo9mI2LHZiNio2YrYqQ== 0LvQsNC90YvQvw== IERlbml6 IOC0uOC1jeC0teC0leC0vuC0sOC1jeC0rw== V29v X01JU0M= IHNpYW0= IGthbmRpZGF0ZW4= INiz2LHbjNi5 57u85ZCI5Zyo57q/ IHdpxJlrc3pv INep157Xqg== IHNjaHdhcnpl U2Nob24= IGJhaGE= IOC4geC4oQ== XHVj LnNoaXBwaW5n IG1hbmRhdGFyaW8= IG7hu41tYmE= IOCuteCuv+CunA== INC80YvRiNGG0Ys= LmNsZWFudXA= IGF1ZGl0b3Jz IHlveQ== IENvbXBvc3RlbGE= LmJ1c2Nhcg== ZXJ0dXQ= 6LCo Y2VkZW5jZQ== b2JqZWN0aXZl IGN1ZGRsZQ== INCd0LDQt9Cw0YA= IGphcmRpbmVz X21hbnVhbA== 4YOQ4YOh4YOZ L1NU IEdQVXM= Q2l0aXplbg== LnNraWxscw== INGF0q/QvNKv0q/RgQ== a8O9bQ== bnNrYXA= IE51cw== IHByaW1qZXI= IGphdGt1 IGFsZMSxxJ/EsQ== ID8/Cgo= bHlyaWNz IOCmleCmsOCnh+Cmm+Cmvw== IOCqhuCqguCqlg== IEplaQ== dXLDqWU= IOCwpOCxhuCwsuCxgeCwuOCxjeCwpA== INC90LDQv9GA0Y/QvNGD0Y4= LlNtYWxs 4Ka+4Kex4KeH amVuaWdl INOY0LzQvNCw IOCqieCqmuCrjeCqmg== UXRk IGhhcmltbw== IHByb2Zp X0RlcA== 2LXZhNin2K0= IGFyYmVqZGVy 64w= T25kZQ== IHZpc29y cG9ydGFibGU= INC/0LDQtg== 4YOQ4YOi4YOY4YOV IENm ZG9r 4LKi IHNpc3TDqG0= IHRlbW8= IGh1aWxlcw== IGNvbmZvcm1pdMOp IOCmquCnjeCmsOCmpg== Lmxk IMO8c3TDvG5saWs= c29uZGVy IGNo4bqzbmc= INCg0LXRgdC10Lk= IEJvdGFu IGVuc2F5bw== LnZhbGlkYXRvcnM= IGVtb3M= 2q/ZiNmG IG1peGVycw== INC80L7RgNCw0LvRjA== LWNvbmRpdGlvbmluZw== b2xpZGF5 IE1lcnNp a3VoYQ== INC60YDQsNGB0L7RgtGL YW5nc3Ryb20= IG5vdmljZXM= xYJlZ28= 4YOd4YOV4YOQ4YOc dXJpb24= IHN0YW5vdw== VVJH 4KS/4KSw4KWL4KSn cmFueQ== INGB0L7QtNCw KGNyZWRlbnRpYWxz INC60LXQu9GW0YE= b21hcA== INi52YTYp9mF2KfYqg== CQkJCQkJCQkJCQkJCQkJCQkJCQk= IG1hdXQ= cmlvbA== INmB2YbYp9mI2LHbjA== INin2YHYsw== R0VORVI= IFByZXNpZGVuY3k= IGJlem9yZ2Vu TWFzaA== IHF1ZXJ5aW5n 4YOj4YOg4YOS 4Lit4Lix4LiZ4LiU4Lix4Lia LkFuaW1hdG9y TWV0ZW9y IGJhbmp1cg== IEt1eQ== IM66zqzOvc6/z4XOvQ== dXNoeQ== IFNldXM= IEJha2Vycw== IExlaWNh INeQ15nXpteY b3hpYQ== IGpvaQ== VUZBQ1RVUg== KW51bGw= 4oCcT25l QmF0bWFu YXJpYWxlcw== Li4uLi4uLi4uLi4u X0xJVEVSQUw= R3A= LnBvc2l0aW9ucw== LlRlY2g= IHNwb250YW5l IGNvbnZhaW5jcmU= Y2FubmVy IHRpbWVzdGVw 2K/ZiNiy IFVnbHk= cmVwbGFjZW1lbnQ= IGVhbQ== xpA= Lkls IOCqneCqoeCqquCrgA== IHF1YW50aXTDoA== INmI2YfZhA== IGVkYXI= IHByZXV2ZXM= IOOAgOOAgOOAgA== 05nQsNC205nQug== cHJvamVr IGVtaXNpb25lcw== IOCkuOCkvuCkhw== IHZlcmFtZW50ZQ== IHZhamFk IOCmpuCnsOCnhw== LnhodG1s 4Ki+4Kih4KmH INOZ0YHQutOZ0YA= IOCqj+CqqOCrgA== X1RPVUNI INKz0LDRgg== IGxpdGVyYWxz IGdhcm5pc2g= IOCuquCvi+CusuCvgA== IOS4iuS8oA== IHLDqWpvdQ== In0seyI= Lm9uZXJyb3I= IGknZA== IHbFr2JlYw== IGJvb2I= INil2YLYp9mF2Kk= IOCkuOClgOCkp+Clhw== Lnpr YWxzZWx0 15XXlNeZ150= LmFuc3dlcnM= U0lO cmlzdG8= IGV1cmVu IFRvb24= IOCqruCrgeCqguCqrOCqiA== IFF1ZWxz Q2xhaXJl IOWFqOawkeW9qeelqA== aXRoaW9s 5rqq5Y6/ TElORVM= X3BhZ28= IEdvbw== 4KS/4KSH 4Z6b4Z+B4Z6B IHRlcnJvcmlzbW8= IGRpc2N1bA== IGNhdXph IFNjaGF0eg== CXBhcnQ= 6Kej57uR6ZO26KGM5Y2h IHRhbWFudXQ= INGP0LrRltC8 IEdPVkVSTg== 0LXQstC40Yc= YWtob25h IG5vdHdlbmRpZ2Vu Y3R1cmU= xbNqxbM= SW1wb3J0YW5jZQ== IGRlbW9jcsOhdGljbw== INGF0L7RgNC+0YjQuNC1 IFRyYWR1 IEJha8Sx aWZpY28= 4oCcVGhlc2U= IE9yZW8= IHZhbGd0 IENyw6lkaXQ= zr7Osc69 IHBlcmd1bnRhcg== 0LTQsNGC0YzRgdGP 1bzVuQ== INC/0LDQstC10LTQsNC8 IFNlbXVh INKa0KA= IOaYn+acnw== IHN1cGVyY29uZHVjdA== L3Jlc3BvbmQ= 4LmC4Lia4LiZ4Lix4Liq IOCwteCxjeCwr+CwvuCwluCxjeCwrw== 2YHYsdip w61nZW5v cmlkZGVu cGhyaW5l IOCml+CngQ== CWNsdXN0ZXI= ZmpvcmQ= IOCyheCyreCyv+CyqA== IGluZHVzdHJpeWE= IEtyaXN0dQ== IFTDvHJlbg== IEpvYW5uZQ== IGNvbWVkaWFucw== IHLDqWFjdGlvbnM= IGNodXA= dW5pbmdkZWs= IFBvbHNrYQ== INmF24zYp9i02Ko= zrrOv8+C IOCqieCqpOCrjeCqpOCqsA== IGNoaWVmcw== IHBoYXJtYWNpc3Rz CXRleHR1cmU= IGFkZWN1YWRvcw== INeZ15XXk9ei15nXnQ== IFJlcXVlc3RlZA== z4fOtc+EzrU= IHBvbm92bm8= IEVpbmtvbW1lbg== IGFjaHRlcmthbnQ= IFNJVA== 4KSC4KSW4KSy4KS+ cGFja2Vy Z2Vmw7xndA== CU1hdA== IOCmqOCmv+CmnOCnsA== IEV4b3RpYw== INin2YTYqNmK2KfZhg== RW5jb3Jl IEdyb8OfZQ== 4Lio4Li24LiB4Lip4Liy IGRlZ2VuZQ== IFBlZ2FzdXM= J10iLA== IExldXRlbg== TUFTVEVS IGFkbW9u X2V4YW0= b3VuZQ== aXJpa2FyZQ== IG1ldGFzdGF0aWM= INmE2KfYqNiv 2KzYp9mG2Kg= ZW5nZWw= emVsbA== IGJsb2tr RWE= X3BpY2tsZQ== IOGDkOGDpuGDnOGDmOGDqOGDnOGDkA== INC/0LDRgtGA0LDQsQ== IE1hdGxhYg== IOCmquCnjeCmsOCmpOCmv+Cmt+CnjeCmoOCmvuCmqA== 0LLQuNGA IHBvcXVpdG8= IGRhdWVyaGFmdA== UGVi 44Gm44KC 5YyX5rW36YGT INC80LDRgdGB0YM= INi12YTYp9ip QE9uZQ== IOCkteClgOCksA== XHVmZg== LeCktQ== IOCqruCqvg== IEthc2lubw== IHVuc3Vi IE9kaW4= INmI2KfYrQ== YW1wdW5r INC/0YDQuNC00YPQvA== bW9zaXM= IHRydWRubw== IFBlbmRpZGlrYW4= INC/0L7Rng== 0L7QvdCw0YA= L3N0YXI= IOCuheCuruCviOCumuCvjeCumuCusOCvjQ== 4KS/4KSV4KS+4KSw4KS/4KSV INCz0YDQuNCy 0rXQsNCw0YDQsNC00YvRgA== z4TPgw== IHNlbGVjaW9uYXI= R2Vmw6RsbHQ= IERFRw== 2ZDZitmG2Y4= INmI2KzZhA== IG9kbw== LWZpZWxkcw== dGVzdGltb25pYWw= IGJhxZ9sYXlhbg== IOGDnOGDow== IHNjYXJjZWx5 IHRla3Vy IHDFmWV2 IMSNw6FzdGk= X2NoZQ== IOCkteCljeCkr+CkvuCkquCklQ== Vlg= ZXJ2YWw= 5Lit5LqG5aSn5aWW 64yA66W8 IGVtb8Onw6Nv IEhvcml6b25z ZWVm IGtpc2U= ZW5hYQ== IENvcGllcg== IGVzY3VjaGE= b3JhYQ== J2Fzc3VyZXI= YmlqZQ== IGRpZ2k= IGFyZWEncw== IHNlbnNpYmlsaWRhZA== X18pOwov IGtlbmRhcmFhbg== VE9PTFM= IFhlcm94 ICIifSwK IFZhbGVuY2lhbmE= INio2KfYsdmK2LM= 4Kaw4Kak IHRlbmRyZQ== IHlhag== bWxhZW4= 0LXRhdC90LjQutCw IEp1bmhv IGFic29sdg== 5Y+R6LSi IGluYXVndXJhdGVk IHBvdXA= IHByZWNpc2F2YQ== IGRvd2FteW5kYQ== ZW5kcg== INin2YTYpdiv INKb0LDQt9GW0YDQs9GW OmlubmVu INC20YPRgNC90LDQu9GW INm+2KfbjNmH IGZvb2RpZQ== INGC0LjQv9C+0LI= 4LK/4LKV4LK+ INmI2LrZitix2Yc= bWV0ZW9y 2YjYo9i02KfYsQ== IOyInOqwhA== IGNvbmp1bmN0 IOCkteCksOCljeCkow== IFRlbXBvcmFs 0YPRhg== INqr2rw= IHN0cmFpZ2h0ZW4= IMOBbmdlbGVz IMOkaG5saWNoZQ== IOC4leC5iOC4sw== bGFzaHQ= z4bOsc69 KHJv IGtvcmVh IEthbw== IOCupOCvhuCusOCuv+CuteCuv+CupOCvjeCupOCvgeCus+CvjeCus+CuvuCusOCvjQ== INmE24zZhtqp IEJvd21hbg== LDw= 5pWm IG5vaXRlcw== INeQ15fXqNeV16o= IGdydXBwZXI= IG1lbHRkb3du IGZ1bmNpb27DoXJpbw== 4bula+G7pQ== 4YCU4YCx4YC3 5Lqa5rSyQVY= X1VQREFURUQ= IExvaA== YWNpc3Q= IE5vdm9tYXRpYw== IEJsb29taW5ndG9u 5Lit5Zu954m56Imy56S+5Lya5Li75LmJ IGF5aQ== emluYQ== INC906nRhQ== IGdlc3VuZGhlaXQ= IGFkYXB0ZQ== YW3DoWw= SGVscGluZw== IEZvcmE= YWhhbXdl IOC4iuC4seC5ieC4mQ== IAoKCgoK X0JST1dTRVI= INC40L3RgtC10YDRjNC10YA= INWh1oDVvtWl1b3Vvw== IGFraXllc2k= INGB0LLQsNGW0YU= 4KS+4KSi4KS8 bHlneW55 aHVuZw== X25hbg== IGNvaG9ydHM= IGFudsOkbmRz amVyZW4= IHNsYWlu IGVuY2Vy 4Kq+4Kqq4KuN4Kqw IGNyaWF0dXJhcw== IOCkoeClh+Ckn+Ckvg== Lmp2bQ== IEJyaWdncw== PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 IOGDq+GDmuGDmOGDlOGDoOGDmA== dW50YXI= Pj4p 4Z6T4Z+S4Z6S INC00L7QsdGA0L7Qsg== INem15XXldeq X3Byb2R1aw== IGZyZWV3YXJl IOC4nuC4o+C4sA== bWlzZWw= cGN0 4LKw4LON4LKc Y29udGVuaWRv IE5EQQ== IGVndGVy IEFydGVtaXM= w6lyZW50 IEtvbXBsZQ== IGZobw== IHJlemVwdA== IM+Az4HOv863zrM= INmI2KfbjA== acSNbmk= aGFuYW5h IHB5bnQ= b3PFpQ== IGZyYW1lYnVmZmVy IOCyleCysOCzhg== IOCmsOCmv+CmquCni+CmsOCnjeCmnw== 4KS44KWB IG1lbXBlcnQ= IENvbnRyYXJ5 IHVkZQ== IGNhcmVmcmVl IGVuZXJqaQ== w6RydGVu IGdlY29tYmluZWVyZA== IE1FTUJFUlM= TmF0aW9uYWxpdHk= IOC4quC4ueC4leC4o+C4muC4suC4hOC4suC4o+C5iOC4sg== c3ByaXRlcw== IHZpZWxtZWhy KFVJbnQ= Iteq ZGVueQ== aXNhcQ== 44Gq44GM IEFsdmlu 15nXm9eq IGdyb3VuZHdvcms= IEZFUg== SUJD TGlnYQ== IERlYWY= IHBvbGljaWVycw== IEVpbnN0aWVn IHNwZWxhcg== IHBhcXVldGVz cmlhbWFuaXRyYQ== IOCmqOCmnA== INC30LTQsNGA 4YOY4YOc4YOd4YOh cGlwZXM= INGC0LXQu9C10Lo= IHF1ZWlyYQ== TUJB IHByb2plY3Rv IEdyZWVucGVhY2U= UFJPTQ== IOCknOCksOCkv+Ckjw== KENvbW1lbnQ= IGxhdG8= 0YPRjtGC0YzRgdGP yZlkyZluaQ== 4KS14KWH4KSv4KSw IGluc3BpcmFkbw== INGH0L7RgNCw IFZpYg== QWxsb3dz IGNvbm9zY2VyZQ== IGRhbmdsaW5n LXZlc20= IHBhbGF1dA== IHBlbWJlcg== dW1tZWw= INis2KfYodiq INC+0YjQvtC90LTQvtC5 Z2FuaQ== IGFuZ3Vpc2g= T2JzZXJ2ZWQ= IOCkruCkv+CktuCljeCksA== IEplZG5haw== 15nXodeZ15XXnw== Z2Nj 5Lic5YyX 4LOL4LKw4LON4LKf4LON 44Gu5ZWG5ZOB bXl6ecWI X0Rv aWZmeQ== IGTDqXBsYWNlbWVudHM= INGC05nRiNC60LjQu9Cw0YLQuA== IGFza2Vy IGNvbmR1Y3Rpb24= IOCkuOCliOCkqA== CQkJCQkJCQkgIA== SGVhdGhlcg== aXlhaw== bGF1Z2g= IEh3 INC/0YDQtdCy0L7RgQ== 5b6q546v QnVjaw== IHdlacOfZW4= bGVucw== IGRlamFyb24= IExhbmRzY2FwaW5n IHN0w6Rya2Vu X0ludGVnZXI= IOC4luC4ueC4gQ== IHR1dHU= INin2YTYo9iz2LHYqQ== IHThu5Fj IGNvbnRpbnVhcsOh INCf0LXQvQ== IGdvcmF1 dWNodGV0 IGJhcmNvcw== IEplbm9zaWRl ZGXFnw== 0LLRi9GP IOC0ieC0r+C0sOC1jQ== 4LK+4LKw4LK/4LKX4LOG IG11aGlpbQ== 1LXVqdWl QUJE INC60L7QvNC/0LDQvdC40Y4= ZW5nd2E= IGRlZ3JhZGVk 0YnQuNGC ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 4YOQ4YOg4YOp4YOU4YOV4YOc IGVuc2Ft YW5jb2Rl ZWFyZW4= IG1vxI0= PicpOw0K INeU15DXpNep16g= IE1hZGFt IGV4dHJhaXQ= bMmZcmluaW4= 0q3QsNGF0YM= INm+2KfYsdin2YY= INC+0YLQutGA0YvRgtC40Y8= Vml0YWxz w6F0aWxlcw== IEV4ZW1wbA== IGFnaWw= INeg15nXlQ== 5Lic5Y6/ IHRlb3Jp IOCqr+Cri+CqnOCqqOCqvg== IGNyZcOz LnZp INix2KfYqA== X2J1bGs= IOC4q+C5ieC4reC4hw== IOCqteCqsOCrjeCqt+CqqOCrgA== Pih7Cg== IDwqPg== IG1pZW4= IOWcqOe3mg== YWRvdQ== IHNlbmR0 L2Zyb20= INij2LLZhdip L3ByZWZlcmVuY2Vz a2FzdGVu IHNwb29m IOC0heC0qOC1geC0teC0pg== LWNvb2tpZQ== IENwdQ== IOC0teC1vA== IEtyaXN0aWFu w6Nu 0YfQuNC90LA= LkV4cHI= IHLDqWdsZW1lbnRhdGlvbg== LUlQ IOGeiuGfguGemw== IOCmleCmsOCmm+Cmvw== IOuMgO2VnOuvvOq1rQ== 0L7QttGD LlB1Ymxpc2g= IEZpbHRlcmluZw== 0YDQuNGB0LjQtNCw xJN0YWhp X21hbmlmZXN0 IHJldGluYWw= IOCkquCksOCkv+CkuOCljeCkpeCkv+CkpA== X3VzaW5n INin2YTYudi42YrZhQ== c3Nk IHBlcnNvbmFsaXphZG9z IOCuieCuseCvgeCuquCvjeCuqg== IOW9qeelnuS6iemcuOaYr+S4jeaYrw== IGJlbGFz 4bmL LkNsYWltcw== IHRyaWdseWNlcg== IGJsb3F1ZWFy INix2LPZiNmF IGluY2FwYWM= IM60z4HPjA== IOCkpOCkv+Ckmg== IEVzdGF0YWw= IEV1bg== INC90LDQvNC70LjSmw== YWNrZXJz IFN1YXJleg== INC/0LjRgtCw ZXRyaWV2ZQ== L25hdmJhcg== I2Vycm9y 5bm/5pKt IG5vc2FsdHJlcw== IGVzcGHDsW9sYXM= 4YOY4YOd4YOR IHNxbQ== IOCkuOCkguCkpuClh+Cktg== IFV0dA== Q29udmVycw== IGFlcm9i xb5uaQ== IHJlZ2lzdHJhdGll b3Nt IEJhbnk= 4KS44KWN4KSl4KS/4KSk4KS/ IFBlY2s= 44G344KT ZWtpc28= 0J/Qmg== QmlubmVu IFRhZQ== 4LC+4LCu4LGB 4LSk4LS/4LSo4LWN INin2YTYr9in2K7ZhNmK VkFD INiz2LLYpw== IFNreWxpbmU= IFJ5ZQ== SG92ZXJlZA== cG9zdGNvZGU= LlNlbnNvcg== IHdpanppZ2luZ2Vu IGluYWN0aXZpdHk= IG9yZGVuYXI= eWRkb2w= IHRlbnRvb25zdGVsbGluZw== IHJ5dA== J0M= 44KK44G+44GX44Gm TuG6v3U= d2VuZW4= IGVzY2FsYXRl IMOkbQ== UHJpcw== IHjDvHN1c2k= IEJlaW4= 4LK54LOK PXNldHRpbmdz LicpOwoK 2bnYsdmI2YQ= IHVuc3RvcHBhYmxl X0RTVA== IG11enpsZQ== INmF2LXZhtmI2LnYp9iq Q2xhcms= IFNhZ2l0dGFyaXVz c29sYXI= IGdld2lqemlnZA== X1NXQVA= IFN0YXRpc3RpYw== ID0p 0YfQuNC70LjRgNC4 IGZyb3pl IOCqheCqpOCrjeCqr+CqvuCqsA== LmJvdW5kaW5n ennFgg== INCx0YvQt9GI05nQsA== IOCkleCksOCkvuCkqOClhw== X3RpdGxlcw== IHRyaWs= Z2lhZA== 4KS+4KSf4KS+ 4oCZw6ljcml0dXJl IEFydHVybw== IElndQ== IGJyZWFrdGhyb3VnaHM= 4YOj4YOQ4YOa4YOj4YOg4YOY IE11c2hyb29t IOC0teC0v+C0qA== IOahgw== aXRjaGll INGB0YLQvtC80LDRgg== 2YjYp9mE2Yg= IGFyZGg= IOCmheCmuOCmruCnsA== INqp2LHYr9uM X0NPTVBBUkU= IEVkaXRhYmxl INCa0LvQuA== IGJlem9jaHQ= KG5vdGVz IFByb2JhYmlsaXR5 IOCkuOCljeCkteCkuOCljeCkpQ== INin2YTYrdmF2K8= IHVuZXF1aXY= L2dyYXBocWw= IExpcHBlbg== IEJhc2Vz IEtuaWU= Y2lkZW50 IHZvZ2Vs IM6jz4XOvQ== IG1vbmV0aXpl IGNoZXJjaA== UmVwb3NpdG9yaW8= b2xldG8= 7JWI7J2E LUNvZGU= INqp2YrYsw== dmFuamE= IG1vZGFsaXR5 RmFpbHM= IHplbnRyYWxl IGZhbmM= IGFwcHVudA== IHZlaGU= IEJhcmNh b2ludGk= b2JvZA== IHB1Ymxpa28= IG5nZW5kbGVsYQ== INC60q/RgNK705nRgg== INin2YTYsdmK2KfYttmK INix2Lk= IHByb3bDoXZlbA== IHRlbWk= IGRhbMWhw61jaA== IGx5b24= IOCysuCzh+Cylg== UnV0 IOCkleCkrOCljeCknA== YmF1ZXI= IGJlc3R1dXJkZXI= IHNla2Vy IGV4cGF0cmk= aXRveQ== Sm9zaHVh IOWFqOawkeW9qeelqOWkqeWkqemAgemSsQ== IFRlcnJpdG9yaWFs IFh1bnRh INmI2KfZhNin2Kw= IOGDrOGDkOGDoOGDm+GDneGDkOGDk+GDkuGDlOGDnOGDoQ== IHRhcGVzdHJ5 cmVmbGVjdGlvbg== IHB1cmVl IEV4dGVuc2l2ZQ== LWFyYXc= J29iamVjdGlm emlnZXI= LHVzZQ== xKt0dQ== LXN0cmVuZ3Ro aXRlYWNo INiq2LXZiNuM IGtvbXVuaWthc2k= IExleGVy IFZlZ2V0YXJpYW4= Wzpd IFNhbmZvcmQ= IE3DvGTDvHJsw7zEnw== IFVwc3RhaXJz eWzDvGw= I2Fl IHByb3N0b3Jh w61vZGg= IE1hbnVhbHM= IENsYXJrc29u YWxpbmk= IFZhcmlhdGlvbg== INGB0L7RgdGC0LDQstCw IHRow7Rp w6FmaWNv INC/0LjRgtCw0L3QvdGP IERlc2Nhcmdhcg== IMOpcmRl VGVuZW1vcw== 1aHVtdWh1a/VodW2 cGFydGlq 4Kq/4Kqv4Kqu IGltZWw= INC/0LXRgNCw0LQ= YWxpc2Nv INin2YTYqtmF2Yg= INmF2YPYqQ== ZW5jaW8= IHRhdWlyYQ== INmB2LHYog== QURG IHJpc3Q= CW5i Z2V2b25kZW4= aWXFvA== IGFib3JkYQ== IOydtOuplOydvA== IEJvbnM= IHN1cGVyc3Q= 5bGx5Yy6 Q29tZWR5 QFRhcmdldA== ZmlsbWVy Tm9zc2E= IHBoZXI= IOCkhuCkqOCljeCkpuCli+CksuCkqA== b2Jqcw== O10v IHVuaWRv INC/0YDQvtC50LTQtdGC INGB0YTQtdGA 1aHVt9Wt1aHWgNWw1aHVtdWr1bY= Y2VsbGU= IHTDpMOkbGzDpA== IHByZXNl IOCyl+Czig== IGluY3Vycw== IOC0qOC1h+C0n+C0vw== IGJyb3duZWQ= b3dlaXQ= LXNtYXJ0 77yI5rC0 IHRlY2lkb3M= IFBvbHl0ZWNobmlj Z2V0ZWlsdA== IFRNUHJv IG5hY2h2b2xs IHbDocWh 7J6Q64+Z 0LPQuNGO RW1vdGlvbg== 4Kmw4Kim4Kiw IGxhaXNp IOCkrOCkqOCljeCkqA== IHJlYmVsbGlvdXM= IEFwcHJlbnRpY2U= IGRhxJ/EsQ== IOCwjuCwpuCxgeCwsA== IGluY2VuZGk= IFBlYWNvY2s= IHBvc2ViZWo= INC+0YHRgtCw0LvRjNC90YvRhQ== IOCwuOCwruCwvuCwteCxh+Cwtg== Q2hpbGU= LmRq cHJldXZlcw== Pj46Og== INC40YDRi9C3 cXVpZXJkYQ== X2J1aWx0aW4= IHByZWNpc8Ojbw== IHZlcmVhZG9yZXM= IGRlbnNlbHk= aG9j X2FsZ28= IGRldmlh IGRlaXM= IHNww6R0ZXN0ZW5z aHVtaWRpdHk= IMWfZXlp IGFudGljbw== 15nXoNeZ15XXqg== LXZhbGlk IGthYmlsYW5n IFNTSQ== TXV0ZWQ= IHdpY2g= IFNXT1Q= IG1vcmFsaQ== TEVycm9y IGNoaW1w INiq2LLZitiv IOCqruCrguCqsw== dHJhdQ== LkV4cGVjdGVk IHNwaWxsaW5n LklOVEVS IGRpc3Bvc2VudA== 0YHTow== IGd1ZGQ= cmFua2luZw== IOWBveeJqQ== IGhhdmk= IOCmrOCmv+CmpuCnh+Cmtg== IG1lcnZlaWxsZXV4 IG1pbGl5b25p Z2ln dm9ybWluZw== IHBzeWNob2xvZ2ll IOCukuCusOCvgeCuteCusOCvjQ== IOCmnOCmvuCmqOCmpOCnhw== INCg0LXRgdC/0YPQsdC70LjQutCw0YHRiw== b3fEmQ== IOCyleCzgeCyrg== 4YOU4YOc4YOi4YOY4YOh IOCuleCvgeCuseCuv+CuquCvjeCuquCuv+Cunw== IHBlbnNhaXM= IMO2aw== IHprdcWhZW4= INi52YTYp9mC2Yc= IOCql+CqguCqrQ== YXdpxIc= 4Ki44Kif IGVqYWN1bGF0aW9u IOCqqOCqvuCqqOCqvg== 6rq8 IGhhbm51 IE1hc2Vy IHZlbmE= INCi0LjQvA== IGtvbw== 5YWa5Lit5aSu IHh3Yg== Lm1pbnVz INC60YPQu9GM IGhp4buDbQ== INC30LDRgdGC0L7RgQ== 2KfYstiv cmFmZg== IHRvaW1pdA== IEluc2VydHM= IOmtlOWFvQ== X2NyeXB0bw== TWFuaXB1bGF0b3I= IOCmmuCmvuCmqg== INC+0YTQvtGA0LzQu9C10L3QuNC1 IGRvb25hYW4= INin2KrYqNin2Lk= IHRocm9t IGl04buN 15nXkNeV16g= 15nXkNa4158= YW50aWE= INGA0LDQt9C80LXRgdGC IGNod2ls IGthdGVyaWg= zrrOtc+C INmF24zYtNmI2K8= INCy0YvQstC10YHRgtC4 IGtuaWU= IGRlc2FncmFk 16DXqteZ Q01Q IHdhbGt3YXk= V2lsc29u IGluZGlw cHJlc2V0 IE1lcmNoYW5kaXNl L2NvcHlsZWZ0 IFRlcmFw IEJ1cnN0 bm92ZXI= b3duaWU= IOeQqg== IHZhbHVhdGlvbnM= IENlbnRyb3M= VGVsYQ== INWv1aXVvQ== V09STEQ= b3B0aW1pemF0aW9u IOmbtw== IGZ1ZWxpbmc= INmB2YjYqtio2KfZhA== IE1hbmFndWE= 0LzQsNGB0Ys= IG1lZnV0YQ== IGlndWFsZGFkZQ== 4K+B4K63 IE9ycg== 5aSa5LmF5Yiw6LSm cmViYmVybw== IE9raW4= IOCysOCzgOCypA== 4YOg4YOQ4YOh IGppbmlz IGVxdWlwcw== VUVS IOCwhuCwqA== LXByw6lz IO2YgQ== X3B3bQ== IERvdXQ= IOCkmuClgeCkqOCljOCkpOClgA== IEtpdGNoZW5z INix2YjYp9uM2Ko= TWFnZQ== IHNub3dmYWxs INC+0LfQvdCw0LrQvtC80LjRgtGM0YHRjw== ZsO8aHJ0ZW4= IGtvbnNlcA== IFJlbGFjaW9uZXM= IEx1eGVtYnVyZw== Z2x1 4Ki14Ki+ KHBvaW50ZXI= LmV2 IEV4eG9u bmllbQ== IHNldWls IFR3aWNl IEl0J2xs LWZpbmFscw== aXRhbGU= ZWN0aW9ucw== 0YLQuNC10Lw= IOC0teC1iOC0uOC1jQ== 0LDRh9C10Lw= IHBzeWNob2xvZ2ljYWxseQ== 2YTbjNin IGVsZWN0cm9waA== 5pys5riv5Y+w IFNjYWxpbmc= 5aSr5aa75oCn55Sf5rS75b2x54mH IGZhYnVs IGhhbnpl a3J1dA== IGFieXNz bWV0cg== TGVr INmE24zZhtuS IHBlbGVh X3JheQ== 15nXmdeg16LXqA== INmF2KfZhNqp w6lyw6llcw== ey8q IE1hbm5oZWlt TElCSU5U d3N6 IOGDkOGDmeGDlOGDlw== RXhwZXJpZW5jZWQ= INii2YbYp9mG 6YeK5pS+ dW5zdHlsZWQ= 6L6o 1aHVpNWh1oA= LlVuaXF1ZQ== IG1lbXVuZ2tpbmthbg== zrvOrc+C IG1ldW5hbmc= IG5lbW9j LXBpY2tlZA== IHByb2JsZW3DoXRpY2E= Lm1vdW50 INiz2YHbjNiv IE1hcmF0aGk= IGdlcHJvZHVjZWVyZA== IHJlZ2o= INin2LPYqti5 IGRvcG9ydQ== IOGDnOGDneGDmw== 44O744O744O744CCCgo= YXBoYWthdGhp IGRlc2Fs Z3XDqQ== LUlt 4LSZ4LWN4LSZ4LSz4LS/4LSy4LWB4LSC INC+0YjQuNCx0LrQsA== z4bPic69 UmFua3M= IOC0reC1gg== IHF1YW5o QWN0dWFsbWVudGU= 16TXmdec15U= UGFzc2U= IHVpdGJyZWlkaW5n IGthbGlkYWQ= 0YPQu9Cw0YI= IOCwsOCwmg== aWJib25z IEFmZmlybQ== LmxvY2FsaXphdGlvbg== IHN0b3B3YXRjaA== IHJlc2l6aW5n IFNjb3BlZA== IEJ1cnQ= L2xvYWRpbmc= INiw2Kc= INis2KjZhA== IOCkuOCkruClgOCkleCljeCkt+Ckvg== T3BlcmFjaW9u IHRyYWRpdGlvbmVsbGU= IGhvdmVyZWQ= IHRldm9yZW4= 4K+A4K6k 4Kq+4KqC4Kqh INC80LDQu9C+0LPQvg== w41D IGNsb24= IHRlw7E= IGJyeXN0 L2NvbW11bml0eQ== INCw0LvQsNGA0LTRi9C9 KkM= IG5nb2t1cA== IERlZmVuc2l2ZQ== Lkp3dA== IOywjQ== IGludGVyZXNzYWRv LlNraWxs IGRvbWluZ29z zq7Pg861zrnPgg== IOCwleCwqOCxjeCwqA== Jzpb JHRtcA== IHJlY29tcGVuc2E= IG1lZWdlbm9tZW4= dWVycmE= IFJlY2lwcm9jaXR5 IFRUTA== IGtvbnRyaWI= IOCupOCusuCviOCurg== PXNpemU= IHp3YW5n RlNN KGNvbnM= YXVo bXZj IE1pbGZvcmQ= bMmZcmluyZk= INin2qnZhg== IGFpcA== IFPDqW7DqWdhbA== IEhpZXJ2b29y IOCmsOCmvuCmnOCmp+CmvuCmqA== IGNhc3RpZw== IHVybcSD IOWNoQ== KERJUw== 4KWH4KSk4KS+ IHV1c2lh RGVwb3Q= IGRvZ2dpbmc= IOCmrOCmv+CmreCmvuCml+Cnh+CmsA== IEJodXRhbg== b3XDqQ== IHR1cnV0 4LKu4LON4LKu4LOG 2KfYr9mK2YXZitip INC40LDRgA== IHTFjQ== IFBUTw== LeCmj+CmsA== X29yZA== QFJldGVudGlvbg== LW1hbmFnZWQ= IFJvc2Fs IMWfYQ== w6R1ZmU= IGFuZXg= 0Y3Rhg== IGRpw71lbg== IGNhZGVuY2U= b2xhcm1lbnRl INmE24zYqg== aW50emE= w6FnaW8= LW1v INmF2LnYp9mF2YTZhw== IFhF IOCktuClguCknw== IGpvaW5kcmU= Z2FudA== IGRpZW5z IEtyYWtlbg== INCw0LTRi9GA0YDQsA== IERhbHk= IOCkpuClg+CktuCljeCkrw== bGHFoQ== IFN6Y3o= IGFuaW1p INGB0L7QtNC10YDQttCw0L3QuNGP 4Lig4Liy4Lip4Liy IFNoaXBtZW50 KCcuJyk= VGVzdGU= IEFsbGVyZ3k= ZWx2ZXM= IM6xz4bOrg== 57uZ5ZCX IENZUA== IGVuZG9yc2VtZW50cw== c3VjYw== IGl6Z3Vi IG11bW15 IGFzc2Vzc29y IiIiIg== 6Lip INCy0L7QtdC90L3Qvg== INiz2KfYptmK INin2YTYqNit2LHZitip 0LjQvNC10L3QvtCy0LDQvdC40LU= ZW50ZXN0 IOCyquCzgeCypOCzjeCysA== INC00YPRiNC1 IE5ha25l IGliYSd0 IGxha291 IERhdmVucG9ydA== IHVuYXR0ZW5kZWQ= IGTDqW1vbnQ= IEVsZW1lbnRvcg== QmFsbHM= Y29sYXJl IHNha2lu IOGDnuGDmOGDoOGDleGDlOGDmuGDkOGDkw== LmJ1ZmY= IERvaXM= IOCkieCkoOCkvg== IG50dWo= IGFwb3N0bGVz INeb15DXnNeU IHByZW5kZQ== 4Kq44Kq+4Kqo IGFuZ2Vib3Q= YXN1bnV0 ZnJhZ3Q= IG1hcmthYW5h INGB0LzQtdGA0YLRjA== 6K6k5Y+v IGVsZXR0cm9u XFA= IG5hcnM= IiIiDQoNCg== RXhpZg== bG9pbg== IFNyaW4= INC/0L7Qu9C+0LbQtdC90LjQuA== ZmZk IGNsacOrbnQ= CW1hbmFnZXI= LnJhcg== b3dlcmluZw== IGxhdGVsYQ== IHBpdHNhYXM= INC80L7Qug== IOC5hOC4q+C4mQ== IEfDtnR0 IHd5a29ueQ== IGhhbGluZGU= ZXhjbHVkZWQ= IHNvYXJlZA== INmI2KjYsdmD2KfYqtmH INiq2LnYqA== IG3DpW5hZGVy IMSR4buP YXNn aXRlZ2E= IG1vZGlmaWNhY2lvbmVz IGJhcmVmb290 IE1hbmlh IE5pZW1hbmQ= 1aHVttWl1oDVqw== IG1pYXN0YQ== LkZMT0FU 4LiU4Li0 IGJhY3TDqXI= bGFnaQ== 15XXldeZ16E= 4Lix4LiZ4LiY4LmM aWRlbnph IOCqteCqv+Cqmg== IG3huqFp IG1vb3R1bW1hYQ== IE3DqWw= INeU15nXqdeo15A= INCw0LLQuNCw IOCmreCmsOCnjeCmpOCmvw== IOGDmOGDnOGDkuGDmuGDmOGDoQ== LCci IHN1Ym1pdHM= IHThu5Nu KHd3dw== IGF1dG8ncw== IHlhbmzEscWf IERpam9u X3Ji IGdlaGV1Z2Vu IEtyYW5raGVpdGVu X0VTQ0FQRQ== IGFiYW5kb25pbmc= IG1lYWRvdw== 4Kq+4KqI4KqV YWhsdWtlbmU= IGRvxJ9hbA== IGJsYW5jb3M= IGxhYXll IHVneWFu IHRydW5rcw== IGV2b2tlcw== IGVuZ2VuaGFyaWE= INC+0LHRhdC+0LQ= INC60L7RgNC/0YPRgdCw IOC0leC1geC0seC0nuC1jeC0ng== IE9yYW5qZQ== IGRlZ3JhZGluZw== INiq2LHZgtmK 2YjYo9mI2LbYrQ== L25z IHBlcHBlcm1pbnQ= QURU IOCmrOCmv+CmnOCnjeCmng== IGRvdm9sam5v 4oCZYWdlbmNl IEF0YWF0cw== IFdzenlzdA== ZXNjaGljaHRl IHR1YW0= IHByw6lmw6lyYWJsZQ== X1RPTw== c2VhcmNoZWQ= 1aHVttWl1azVqw== IOCmsuCmvuCmhw== IHdhdGVyZWQ= INin2YTZg9mG INC90LXQv9C+0LQ= IHNvdWxtYXRl IHJlbGxlbg== IEZha3Rvcg== INWm1aHVttWj IGF6a2Vu IE9la3Jh 4K6/4K63 QmFzcw== VXZz IFBST0NFRA== IEZpbmFuemllcnVuZw== IHJlY2ViZW0= IGh1bWlsZGU= IOCkn+CljeCkteCkv+Ckn+CksA== IEtlbm50bmlzc2U= UE1haWxlcg== IFJlaWZlbg== IG9uZGVyc2NoZWlkZW4= IGt1cGE= IEh1Y2s= INW41oLVt9Wh1aTWgA== IG5qYW5p b3Rybw== IEN1dHM= IGRveHk= IOCuruCvgeCurw== IEt1YmE= IC4uLi4uLi4uLi4uLi4uLi4= a2V6dA== b3JpcXVl IMOnxLFrdMSx YXZhbmF1Z2g= bnlhbWE= IEh1bGxl IHV0aw== a29udGFrdGU= IHNlbWVzdGVycw== INC10LjSv9C60LA= yZlybMmZcg== U09SVA== IGRpdmVyc8Ojbw== IHRyw6FtaXRl INGG0LjQutC7 aWNodGlna2VpdA== IHNjaGVycGU= INK705nQvNC60LDRgA== 2YrYp9iq2Yo= OnU= INin2YTZhdi12KfYr9ix UGxhbnRz IGxvY29tb3RpdmU= IOC0pOC1gOC0sOC1geC0ruC0vuC0qOC0gg== LW5pxYg= IGluZ2V3aWtr S8O1 4LiB4Lij4LiT4LmM eWVubmU= IMOS bWluaW1hbA== IERNVg== IGZlcmFpdA== 6bG85YS/ 4Z6+4Z6Y4Z+S4Z6U4Z64 2bnZhA== IMO6xI1ldA== INKb0LDQsdGD0Ls= IGVtaXNpw7Nu CXRyYW5zYWN0aW9u IHdoaXRlbg== Rk9STUE= 0LTRltCz0ZbQvQ== 4Z6Q4Z+S4Z6E4Z+D4Z6R4Z64 YXRlbmVzcw== IHhwb3M= c3BhcnQ= XVtf INK70L7RgNCw IMOtcg== lOGDoOGDl+GDmOGDkOGDnA== RmlzaGluZw== aXJtb3M= IE5TSW5kZXg= INC00LDQstC70LDRgtOj IHVudGVyZW4= w7Jpcg== IOC4o+C5ieC4suC4mQ== IOCmueCmv+Cmmg== INC80LXQs9Ov0Y/QtA== LlRoZXNl IHNoaW1tZXJpbmc= 0L3Rg9GG0Yw= IGF0dGFxdWVz IOuMgOydkQ== IOCkteCkv+CkquCkleCljeCktw== aXN1bA== 7Zi47YWU LnBn IEJlYWNoZXM= IGpkZQ== INWh1bXVrNW2 IG1vZnV0YQ== 6JWp LWdhcA== 6Kaa TE9HR0VS X1dJTkRPV1M= IElDUA== IGZhbGx1 4YOd4YOc4YOY4YOQ IOCmmuCmsuCmmuCnjeCmmg== IGNsw6FzaWNh 4KmB4Kmx4KiW IHByw61uY2lwZQ== YXRlcm8= KG1ldHJpY3M= IFNlcmdleQ== INmB2KfYsdiz24w= U2hpbQ== 4KS+4KSC4KSV4KSo IFlt YmVyZWljaGU= zrzOrc69zr/OuQ== X0NPT0tJRQ== IHBsYW5lcg== XX0iCg== LmVzcHJlc3Nv IGvDpG5uYQ== X2NvbXBpbGU= X1JTQQ== KScsJw== IHVzYXJl IOCkruCkpOCkpuCkvuCkqA== IFVtbA== IGNvbmV4aW9uZXM= IHp3ZWltYWw= IEN5YW4= IMO9ZcWI IOC5gOC4peC4lw== Kz0n IHNpdmU= KFJldHVybg== IFZlbnRl IC0i IG1hbmVo p5A= LklORk9STUFUSU9O IOGDkuGDkOGDmOGDlg== PFJvdw== 5pS75Ye7 0JrQvtC70LjRh9C10YHRgtCy0L4= IGRlZWI= 4Kqu4KuN4Kqq IHNpaXNraQ== IFBTVg== L2VjbGlwc2U= KGdj IEd1YWRhbHVwZQ== IEhQQw== KGly IHByYWN0aXNpbmc= IHBhbG1h 4Kq+4Kqf4KuA 0YLQuNGO IOCuruCvhg== INec15fXpQ== IOeQqueQqg== RGljaw== IG1vbmllcw== INCf0L7Qu9GM0Lc= INGC0YPRgNCw0YI= VFpJRA== dGV4dHM= IOCkj+Ckqw== INC80LXQsdC+0YjQsNC90LQ= IENFUk4= IGF1c2VpbmFuZGVy INiv2K7Yqtix IGt1bGFu IEhpc3Bhbg== INC90L7Ss9C40Y8= IEJJUw== IGdsw6Ru QW1wbA== aHlyY2h1 IEFzaWFucw== UHVibGlzaGluZw== IOKGkgo= IFRhdHRvb3M= dGhpcXVl U3RlcGhhbmll IGfDvHJyw7zFiA== IMOeZWdhcg== IM66z4XOss6tz4HOvc63z4POtw== IOCwueCxgOCwsOCxi+Cwr+Cwv+CwqOCxjQ== IHBvemE= 4Z6+4Z6Y4Z+S4Z6U b2lubmU= IFZt 0KLQsNC60LjQvA== IOW+kg== IFNoZW5n IG9ic2Vz 0LnRi9C9 572R5Z2A5piv5aSa5bCR 4KWo4KWo RVJJQUw= w7Zm CWNvbW1lbnQ= IEF1c3NhZ2Vu 44OX44Ot44OV44Kj44O844Or LWNvb3JkaW5hdGU= 5YO55qC8 0LHSr9C3 IOeOmw== 7IaM6rCc IE5hdmk= IHNvbGFjZQ== LyI7Cgo= zrvOrs68zrHPhM6x INC60L7Qs9Cw0YLQvg== U1RBTVA= 5Y+z5peX IFTDvHJrZWk= INGB0q/QudC7 6LK8 LURvbGxhcg== J2FwcGFy 5p2l6LaK IGdlcHLDpGd0 IOCmrOCnjeCmr+CmleCnjeCmpOCmvw== IHRlbXBvcmlidXM= aW5yaW4= asOhbA== KHB4 LlNL b250cw== IENsZW9wYXRyYQ== 2KPZhtmH IGJvbGFy IGluZnJhc3RydWt0 INqv2LHZgdiq2YY= Z2V0Yw== INi02KfYsdi5 IOCqn+Crh+CquOCrjeCqnw== IOC4geC4peC5iOC4suC4p+C4p+C5iOC4sg== IElubWlkZGVscw== IGVzaXQ= INCx0LjQt9C00LjQvQ== aWVkcw== INC/0YDQuNGA0L7QtNC1 LXB5dGhvbg== 44O844G344KT 0LjQu9C40Lc= UExJQ0lU IOCmqOCmv+Cmrg== IFZpbQ== IM64z4U= 4LOL4LKo4LK+ INit24zYqw== Lmluc3RhbmNlcw== RGFuYQ== IENvbXBhc3Npb24= Iik7Cgov IGxpZ2dh bWVzYQ== IGVtYW5jaXA= IG9rdWc= IHNpZGVs IGVmZmVjdGlldmU= UGhvdG9ncmFwaHk= IOCkrOClh+CkuA== IG1hbnRlbmVyc2U= IEdoZQ== IGNhdGVn 6JCs5YWD K0E= IHBsYXRlbg== INC/0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC U3ByZWFkc2hlZXQ= aWdvbA== 5Lqn5p2D IHZlcmxvb3I= IEhvZ2U= Q2VudGVycw== IEluZm9ybWU= IOCmquCmvuCmmw== IEJyaW5r IGRpc3NhYnRl aWNlbQ== IH0sCi8= J11dLA== IFJvdHRlbg== 6L+Y5piv5YGH55qE YWRyZXNz L2d0ZXN0 IOGDmOGDnOGDouGDlOGDoOGDlOGDoQ== IG5lamxlcMWhw60= IOCkueCkruCksA== 5Zyo57q/6KeG6aKR57K+5ZOB IE1vdmltZW50bw== X21pY3Jv QWRpY2lvbmFy b2tha2U= Z2l2ZXI= IG5nYWt1bWJp IEtlZg== IGRpc2RhaW4= YXBlbGU= KFN0YWdl IGtvaGFs 0LTRi9GF IHByYWNvdg== IHRyYWRpdGlvbmVsbGVu xJNyxIE= INqp2KfYsdi02YbYpw== IGJha8SxbQ== IGVpeG8= IG1vb250 IHB5c3Q= RGVzcw== INCi0LDQutC+0LU= LmRpc2NvcmQ= IOCkkeCkq+Ckv+CkuA== IHZlcmxvcGVu Rmxvd3M= IEJyb3U= LmNvZGVz 4LiE4Li34LiZ4LiZ4Li14LmJ IGFydGljb2xv IG1ldWJsZQ== INC20LDRgNC40Y8= X2RhdGFmcmFtZQ== IHRyaXN0aXF1ZQ== cm90ZWNobg== IOCwjuCwguCwpOCxiw== IOCknOCkvuCkhw== IOe2sg== INGD0LDSm9GL0YLRgtCw PgoKCgoK IGt3YWI= YXJ0c2Vu IOCwh+CwguCwpuCxgeCwsuCxiw== T2xpdmVy IHpkb2J5 LWNvbXBhbnk= 4YOY4YOq4YOY4YOc4YOd 4KSm4KSy 4oCYSQ== 0LDQutOZ0LDQvQ== IOCkm+ClgQ== 7Iuc7J6l LUluZA== IHNhbWVuZ2VzdGVsZA== IOqxsOumrA== c3RyY2FzZWNtcA== IGxlbWJl IGluYmVncmVwZW4= 6ZSF IGdlcmVraXlvcg== c3TDpGw= aXZpdGlz Q2FwdHVyZWQ= IGZyYWd0ZQ== INeS16LXlteQ15LXmA== zq3Ovc6x aXNzYWE= UHJpbmNlc3M= IOeItQ== 5LiD56CB aXN0dW5n aWpkaW5n IHZlcmxh IHRyZW5jaGVz IOunge2BrA== IMO9ZXRpcg== 0ZbQvdC10LTRlg== IEdhcmRh 54yc5L2g5Zac5qyi IHBhcGlsZA== 0YDQsNC30YPQvA== IHZpamFuYQ== IOCmm+CmvuCnnOCmvg== IG9jb3JyaWRv PEdyaWQ= VU5JQ0FUSU9O IHJ1c2E= 44GK5rCX INin2YXbjNiv2YjYp9ix IGF04bulbWF04bul aW1hbmk= cmVsYXk= INC80LDQsdC70LA= IHBlcmlvZG9udGFs 0L7RgNC6 IEd5bXJhZWc= IHN0d29y IGJpbGo= c2V2ZXJpdHk= IOCwqOCwruCxi+CwpuCxgQ== IHBvcnRyYXlpbmc= IOCkr+Clh+CkpeClhw== 4LKw4LON4LK3 R0x1aW50 LUF1Zg== IOCkpuClh+Ckl+Ckvg== 2ZHYqg== dW10 KENhY2hl 5biW5a2Q IGRlc2Vqb3M= IOCkheCkuOCkvg== INC30LjQvNC+0Lk= 5YWl5L2P IHByb3N0aXR1ZXJ0ZQ== X01C IEJyaXRz IOCkreClguCkruCkvw== 0LDRhdGL0YE= INGW0L3RgtGN0YA= IHZtYXg= IOWkp+WPkeW9qeelqOe9kQ== INCx0LDQudKb IExlZ2lzbGF0aXZh IGV4YW1lbnM= IEPDoWRpeg== INmF2KfZhNmK2Kk= LOS8iuS6ug== X0RJU0M= 0YHQu9C+0LLQuNGP IEVTVEU= zrrPgc65zrI= V29tZW4ncw== IOCqluCqsOCrjeCqmg== 1avVog== IG5lZ2F0aWY= 1oDVtdWh IHB5cGxvdA== 4oCsCgo= 4Ka+4Kaq4KaV IENoYWtyYQ== IGFkZHU= w6FuZWs= b3RpZg== dWVudGk= LXBpbGw= IGthbmphbmk= IE1hbmNoYQ== 5ri45a6i 6ZuZ INWw1bXVuNaC1oA= CWFjdA== IEthZHVuYQ== IHNhxJ9sYXI= X3Zh 7JyI IE5lbW8= IEJvdg== IFRyZXk= IG9zamXEhw== IGtvbmZpZ3Vy INC60LvQsNGB0YHQuA== IEFncmVlbWVudHM= X29jdA== IEtub3Q= aWdoaQ== IOGDmeGDkOGDoOGDmA== 0J3QtdC6 IOCmpuCmv+Cmr+CmvA== bnTDtg== IHdlaA== IHN5bmNpbmc= IEJlem9z 57qi5aeQ 15XXp9eq IGLDvG5kZWxu UGFzbw== 0LDRgdGC0YDQvtGE IGNpcmN1aXRyeQ== c3BlbnQ= IOCmquCmpeCnhw== xINydWw= IE9a Lmxhbmd1YWdlcw== Z2Lhu41u IHRvZXBhc3Npbmdlbg== 4KqF4Kqo4KuH 66mA ZGVwbG95bWVudA== PE9wdGlvbg== LmRlcGVuZGVuY2llcw== 5bi2 IHN1YmRpdmlzaW9ucw== IOS9k+iCsuW9qeelqA== IEVYQUNU IHNlbmRh b2Jvcw== IHJlc3VyZg== INWn1bY= IOCmhuCml+CmuOCnjeCmnw== ZXN0b2Nr 2KfZhNmE IFBlc3NvYXM= KT87Cgo= yJtpbmU= IGRlZ3LDqXM= IHlveGR1cg== IEJpdHRlcg== 0LTRjdGF IOC0muC1huC0seC0v+C0rw== IHNuYWNrYmFy X1RIQU4= IG1pc2NhcnJpYWdl 55qE5aSp5aSp IFRpbWJob25p INC00LfRj9GG0LXQuQ== IOCyrOCzjeCyr+CyvuCygg== Z2F0YQ== IHNlcml1cw== UnE= INin2YTYpdmK2Lc= IGZpc2NhbGl6YcOnw6Nv IGthbmNlbA== IHJlYXNzdXJl 4LKV4LON4LK34LK/4LKj IEdyZWVuc2Jvcm8= IENhbWJpbw== IG3Fq3N1 KGRlY2s= IGTDqXBsYWM= 5oCn55qE IOCkqOCkgg== LUhE ICgqKg== IEdlZ2VuZA== INaB1aHVvg== IE1pc3RyZXNz aGFpcnQ= IMSvdmFpcg== 7Yq466W8 IFBldHQ= w6tzZQ== L0FwcGxpY2F0aW9u IEludml0YXRpb25hbA== IG1hcXVpYWdlbQ== IGVzY29saGFz IHNlZ8O8 ZXRzeQ== INCf0KDQng== 0LDQu9C40Lw= IEpvYXF1aW4= IGhvbW9nZW4= L25hdmlnYXRpb24= IGFwdGx5 INij2LnYsdin2LY= INC+0LHRgNCw0YnQsNGC0YzRgdGP INij2LfZgdin2YQ= IHN0cmVhbWVy INC10LTRiw== IOuCtOugpA== 4LC/4LCC4LCq4LGB IOCkh+CkqOCkleClhw== IEhi IOeah+i9qQ== INC/0YDQsNC00YPQug== 66y87J20 INCx0LDRiNC70LDQvw== IOydtO2VmA== IGNvbXBvcnRlbWVudHM= bG9jYXRvcg== IEx1Z28= INCc0LDQvA== INGN0LrQt9C10LzQv9C70Y8= Z2FhbmQ= bGlzdGFy IOCkrOCkvuCkh+CklQ== IGV4cGly INec157Xlw== IHNlY3VuZGFyaW9z 4KWk4KWkCg== 77yM576O Z2VyZWNodA== IOCuleCutA== IFJvamE= TGluY29sbg== IOaWsOS5kA== LmNpZA== IFRpc3N1ZQ== IG1vc3RyYW1vcw== KHNldHE= IOCmheCmsOCnjeCmnA== INin2YTYqNmE2K/Yp9mG INCy0YvRh9C40YE= SHZvcg== IHB1bml0aXZl IGdhcmFudGluZG8= TWFsYXlzaWE= U2NpZW50aWZpYw== IOCmmOCmo+CnjeCmnw== 5Y+R5biD5pel5pyf IHZlcmxldA== IE1PQ0s= IG1pbHllbg== IG91dmVydGVz IOCmrOCmv+CmtuCnjeCmrOCnh+CmsA== 1LHVhg== IHZ1ZWx0YXM= YWxlbw== INCz0Y3RgtGL0Y8= 4LK14LKw4LK/4LKX4LOG IE1vbnNhbnRv IOGDm+GDo+GDk+GDmw== LiQk TkVUV09SSw== QVVUSE9S IFNEUA== IGhvZXM= IGVkZ2luZw== 0LDQu9C40YfQuNC1 INKb0LDRgNC4 IOCyruCylw== IGZpbGVzaXpl IOCwheCwteCwleCwvuCwtuCwgg== IG3DoXNjYXJhcw== IOCmheCmuOCmruCngOCnn+Cmvg== IHNjaHdlcmU= IGdlbmF1ZQ== IFNlc2FtZQ== IEF1c3phaGx1bmc= 5YWl5Yqb LdC20YvQu9C00YvQvQ== IHRvdXJpc3RpcXVl IEthc2k= 4LiX4Lix4LiZ 6L6y X3BvbHlnb24= IGJlenBpZWN6ZcWE IGlsaXU= Lk1hbGZvcm1lZA== IEFuYWx5c3Rz IHNpc2U= IOCqluCrgeCqtg== 0LvQtdC90L3Rlg== emhp cm9saWd0 Oicn LXdvcnRo Ij5c IEN1bGxlbg== 15nWt9ec IHZvdWxvbnM= YWx1cm9uaWM= cG/EjQ== d2VkZG9s KHJlZGlz c2tyYWZ0 IEh1cnJ5 KGF0b20= YWNoZXQ= ICjCpw== 5YWN6LSj5aOw5piO 0LvRltC80LXRgg== IGVza2E= aW1pdMOp INGH0L7Qu9C+0LI= oeCmvOCnhw== IEN1cnRhaW5z IG1pY2k= INeZ15TXmdeV R2lu IOCmrOCngeCmlQ== INmC2LfYudip L2Jy 0LXQvdGG0LjQuA== IEltcHJvdmVtZW50cw== IOCkquCljeCksOCktuCkv+CkleCljeCkt+Ckow== X3Rvaw== ZGRi IHZhbmlzaA== IGxhZGE= a29o 7ZWp64m07Iqk IG11Y2s= 4YOg4YOT4YOU4YOR4YOQ IGtlbm5lbA== IHbDtWlrcw== IGtpcnVyZw== INqq2YbYr9mI IOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkow== c2t5bGQ= INio2YTYutiq 15XXkdeZ15w= X0lTUg== IE1pc3NpbGU= IOC0quC0v+C0qOC1jeC0qOC0vuC0sg== bcOt IHNvcmE= INC90LDQstC4 INGD0YXQvtC00LA= INCz0L7Qu9C+0LLQtQ== ZWxpZQ== IHJlY29nZQ== IEpCTA== YWFydA== UHJvZHVjZWQ= IGJlc3RlZWQ= IHByZW1pZQ== INGF0YPQstGM IEFNTA== IGpvdWVudA== YWZpbw== aG55YQ== INin2YTYqtmC2YbZitip IGJvb2Rh 0YXQvtC9 IHByb3ZvY2Fkbw== LyoqLyo= IGdlbGl5b3I= VmV1aWxsZXo= IOGDoeGDkOGDlOGDoOGDl+GDnQ== IGt0aA== VVBQT1JU IHJpc2M= IGh5bnJlaQ== IOCkoOClh+CktQ== LXNwZWN0cnVt INC80L7RidC90L7RgdGC0Lg= IGVyZ8Okbnp0 LlNxcnQ= IOmCpuWwvA== VHJhdmVsbGVy Z2FtYmFy ICItIiw= LWxlaW4= IHBvdGVuY2k= IGNhcmRpb3Zhcw== 0p/TmdCw0YLTmdC4 IEN1Yw== IGN5Yw== INOY0Ls= INmF2YbYqti12YE= IG5ha29uZw== IExWUw== LHRtcA== IGHDsWFkacOz a2l0dHk= 4Lij4LmI4Lin4Lih IHBoaWxhbnRocm9waWM= IOCyqOCyv+Cypw== c3Nzcw== IHJlbWFycXVhYmxl IGdoYXI= ZXJ0b3du IOCkmuClh+CkueCksOClhw== IE9TWA== IOCosuCpi+ColQ== IE1pbm5pZQ== 4LiT4Liw4LiX4Li14LmI IFBBTkVM Ozs7Ozs7Ozs7Ozs7Ozs7Ow== INCw0YXRjNGL amVsZQ== IMWfw7Z5bGU= IG1pbnV0cw== c3RpbWU= 77yM5LiA5Liq IHPDvHJk YWxhZA== IGdhc2s= w6ZraQ== IEFuemVpZ2Vu INC/0ZbQutGW0YA= IGltcHJpbWU= IGFjb250ZWNpbWVudG9z IHBvcnRhZGE= 27PbsA== bW9kdXM= IEdlbnJlcw== 77+9JiY= 0LbRi9C8 IMOgdGk= 0LDQu9C70LA= S2luaQ== IER1bmRlZQ== IFRSVVNU w61vbWg= IGNoYXJsYQ== INCy0L7RgNC+0YI= b2tzaWE= 6Zmk5q2k 24zZhtqI IGRpc2NyZXRpb25hcnk= IHZhbGlkYWRl T3ZlcnM= IEFhY2hlbg== IHByaXbDqWVz X1BDTQ== IOGegOGfkuGek+Geu+GehA== ZGlyZWN0b3JpZXM= 4Kay4KeL4KaV INC00LLQuNCz0LDRgtC10LvRjA== RmFuY3k= INmF2qvYsQ== LlZpc2l0 ISgiew== 5bCC6ZaA IGlhcnI= w6F2eQ== 6IOD IHNhbGdh KERpY3Rpb25hcnk= 4Ki/4Kmw4Kim IG1hbHU= IHVuc2V0dGxpbmc= INiu2Kc= KCckew== IHRva3U= INC40LfQstC10YHRgtC90YvRhQ== IE1pbGE= Lycp ICUi 15zXkw== IERGQQ== 5Y+r5LuA5LmI TmVpZ2hib3Vycw== IG1vcm8= IEV1cm92aXNpb24= KCk8PCI= IHLDpMOkaw== 4LCy4LCo IGFsdmU= INCR0LDRgNC+0Lg= Z2VzY2jDpGZ0 YWdyYW5jZQ== IGtpbmdkb21z ICcnKTsKCg== UHJlY28= IGNoaWVmbHk= IOCqtuCqsOCrgA== INCz0LXRgNC+0Lk= IENvbnNlbnN1cw== IOCmleCniA== LmV4ZWN1dA== IGF1dG9ncmFwaA== 2YLYqtmH2Kc= IHRydXN0eQ== IFB1cHBldA== 4YOQ4YOg4YOQ4YOj4YOT KEdlbmVyaWM= IFRvdWpvdXJz aWZpcXVlbWVudA== w6dpc2k= IGNhbWVv 4LSj4LSu4LWG4LSo4LWN4LSo4LWB4LSC 0L7RgdC90LDQsQ== INW21aHVrdWh1bHVpdW81bY= IGJhdGVyYQ== 4LS/4LSv4LWL IGJhc3Nv 0YbQuNGY0LDRgtCw ICc7DQo= IOCmieCmoOCnhw== IHVuZGVycGlu KCl7DQoNCg== INW21b7VodWm IHPDvHN0ZQ== ZsO8Z2JhcmtlaXQ= INGD0YDRgw== TWV0b2Rv IOC2muC2vQ== INC80LjQvdC10YDQsA== IHVrdXNlYmVuemE= ICoKCgo= U1VNTUFSWQ== xJtsYQ== INit2K/bjNir aWxlbQ== 5Lit5a2X IOCyueCyv+CyoQ== UGFzc2luZw== YWRlcsOtYQ== IHd1bmRlcnNjaMO2bmVu T1VUVUJF 7IaM65Oc INGC0LDQsdC70LXRgtC60Lg= b3N0YXI= IEpvYw== INC/0YPQt9GL0YA= IM60z43Pgw== LnNhbQ== 5pGE5b2x IENvcm91dGluZQ== IG3DuHRlcg== L3F1ZXN0aW9u 4KWB4KSP 5b2p5rOo5YaM IM+Azq3Pgc6x LmRlcg== IG92ZXJjYW1l JGo= YXNpYmxl INqp2YjYr9qp ZmVyZW5jaW5n IOCkuOCkleCkvuCksOCkvuCkpOCljeCkruCklQ== 77yM5LiN6L+H LmNvbmRpdGlvbnM= 6KOV IG90ZXY= IEtpbmVjdA== INCz0LDQuQ== IHNrb3Jhag== RVhQRUNURUQ= KHJy IHJlZmVyw6puY2lhcw== IG9sbWFkxLHEn8Sx IGhhbW1vY2s= IM6zz4HOrA== U2VlbXM= 0LrRltGI aWRkYQ== d2lzaGxpc3Q= Lm1udQ== IOCyhuCyuOCzjeCyquCypOCzjeCysOCzhuCyl+Czhg== IGTDqWfDonRz IG1hd2FsYQ== IHLDoXBpZGFz Q29udGVuaWRv IHN1yrs= IOCkq+Ckv+Cknw== INCy0YPSt9GD0LQ= IO2YiA== X2FnZW50cw== IGVzcGFuaA== IE1ldGVybg== QWJp IEhpcm9zaGltYQ== Ik9o 5Y+l6K+d dGVnZW4= INCx0L7Qu9C8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= IHByb3BoZXRpYw== INGB0LjQv9Cw0YI= INmF2YrYsQ== YmVscw== 0LvQuNC2 IGtvbWJpbmllcnQ= QmFrZQ== VURJ INio2LY= IHJlbXBvcnTDqQ== IEZsZXJl IHZha3U= IHNoYXJwZW5pbmc= IOCyteCyv+CynOCyrw== IGVzcGFj IHVicg== IEdhaW5z 5oqk55CG INCy0LDQutGG0LjQvdCw LWlzdGVzcw== IEVwaXM= IHBvdXZhaXM= INeV16nXnA== X2V4dGVuZA== V29ya2Vk IG9iamU= IHBvbW9jxIU= IFN0YXJk YWdvcnk= 5b+r5o23 IHBvc2x1 ICMo aXRlcnM= IEtlaA== 2KLZvg== Q29uZHVjdA== 0LXQvdC40Lw= IGVzcGVjaWZpY2FtZW50ZQ== Lm1vdG9y IHBlbGxlbnRlc3F1ZQ== IOCkl+ClgeCksOClgQ== IOCqreCql+CqteCqvuCqqA== X21pbm9y IGRoYWF3 IG9wdGltaXNlcg== 0LjRh9GM 5raT b3RvbQ== 5YWt56CB INiv2YTahg== IG3Em2xp YW1pcXVlcw== IOCmruCmueCmv+CmsuCmvg== YXRpY29u IHNrcmV2ZXQ= SW50ZXJlc3M= bmnDug== IGNyYW5lcw== W25vdw== IGFkZXY= IO2ZleuztA== LHRvdGFs IENsaW5pY3M= eXNpemU= 4Kya 5rKq IE1hY2JldGg= IHJlbmRlbGtleg== 5bm06ZaT IOyYiOygleydtOuLpA== IOODjg== 0YnRgw== IENvbnN1bWU= IGRpc3Bhcml0aW9u IERlZmVuZGFudA== Ki8pLA== w7xja3M= IOCumuCvgeCuseCvjeCusQ== IHdpbGxz bGljYXI= X2ZpeHR1cmU= KGVmZmVjdA== IOCkpuCli+CkuOCljeCksOCliw== INCz0YDRg9C/0L/Rgw== IGVudHNjaGVpZGV0 CVNjaGVtYQ== INeU16rXoA== IHRhbWF0YQ== X2ludHJv INC00LXQstGD0YjQutGD 2YXYp9uM2LQ= IGFmdWVyYQ== 65o= IOC0reC0vuC0tw== IHRpZW50YWxsZW4= KGZj bmdpbmU= J2ltcG9ydA== INC30LLRg9C6 4YOg4YOr4YOc IHBlcmZvcm1hbnQ= 0JHQuNC3 INis2YjYsQ== UGV0aXQ= 4LiB4Li14Lis4Liy J0w= LUxvdWlz IFBlcnPDtm5saWNoa2VpdA== 4KS+4KSk4KWC4KSo INGC0LrQsNC90LXQuQ== INC90L7RgtCw0YDQuA== IGNoZXd5 4pmhCgo= IHLDog== IENFTlRSQUw= INim2KfZig== IE1BVFJJWA== INGD0LHQsNGB0LPRjNGL IGFyZW5n IGFsZ29yaXRtbw== 5pWZ5bir 5Yi35rWB5rC0 IOCmheCmqOCngeCmrQ== IHR1cm5rZXk= IHBlcmNlcMOnw6Nv 2YTZiti0 0LXRh9C90L7Qs9C+ Vm9j IGvFq3Bvbm8= QnJha2U= IFdpdGhkcmF3YWw= IHVuZGVuaWFibHk= IGdlbm9tZXM= IEF1dG9tYXRlbg== IER1YnJvdg== IGNyZWFu YXZub20= b3BsYXNt IGFubnVlbGxl IOCqleCqv+CqguCqruCqpA== INC/0YDQuNC00LXRgNC2 IO2Gte2VnA== IENvbnZleQ== IOu2gO2DgQ== 5LyB6bmF 15nXmNeV16o= LmNhcGl0YWxpemU= 44CC44CNCg== INKh0LDRgtGL0L0= IGZhcmlu INm+2LHYqtmH 4K+K4K6j4K+N4K6f LVVQ YXZvaWU= QVdB INCy0L7Qu9C9 IHTDpGxs 4LKo4LON4LKv VGVhY2g= IOOCreODow== 4LSq4LWN4LSq4LWL4LW+ LkVkZ2U= IGNpbnR1cg== IGJlcmFkaQ== IFJlbWVkeQ== IExhbnM= INW91a/VvdWl1aw= ZG9k INGC0YPRgNGD IFRhcms= LUNocmlzdGlhbg== xI1pbG8= IOGDqOGDlOGDl+GDkOGDnOGDruGDmw== Y3Vu TWVjaGFuaWNhbA== L21zZw== IEFETQ== VHJhdmVyc2U= IOunoQ== IOCkuOCkueCkreCkvuCkl+ClgA== IGluZGVidGVk IH0KCgovLw== IM61zrnOus+M IOCmrOCmv+CmuOCnjeCmpOCmvuCmsOCmv+CmpA== IGjDpHVmaWdlcg== IOCkleCkvuCkgQ== YW5hbGVz IENhbGE= 0KLQtdC8 IGFzdHJvcGg= INC+0YLRgtGD0YDQsA== 56KN aXlvdA== INCw0YLQvtC8 IGdlc2NoaWNrdA== IOCkuOClh+CkteCkqA== INC505nQvdC4 LlNoYXJl 5pi156ew L3BvcA== 0L7Ss9C4 IOCkteCkv+CktuCkvuCksg== 4Kic4KmH 5pqo QWRtaW5pc3RyYWRvcg== IGRlY29tcHJlc3M= IG9yaeG5ow== INaD1bjWgtWs INin2YTZiNiy2YrYsQ== LnN0dWRlbnRz IFJCQw== INm+2Kfau9mK IyIs bXVzaWs= IHR4dWFz LlZvbGxleQ== IE1pbmlzdHJl cGxhdHRlbg== V2VudA== X3F1b3Rlcw== IHByb3BvcmNpb25hbmRv YXNhbmc= 4Lik4Lio4LiI INWv1aHVptW01bjWgtW0 IGRyxb5hdmE= Y2xhc3NpZmllcg== K3NlbGY= INin2KrYrNin2Yc= IG5hand5 IG1ldGFib2xpdGVz IOC0sOC1gOC0pA== IGdldG9wdA== X1VM INGB0L/QtdGA ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t JywnPScsJw== IENhcHJp INGB0L7QsdC70Y7QtNCw0YLRjA== LXNjaGVtYQ== 44CR44CQ44CC44CRCgo= L05hdg== X3NwZWNz 0LjRgNC1 6JKy U2tpcHBpbmc= Lm9wZW5j b3BhdXNl LCRf KFNpemU= IGtvamlo 4oCN4LSl L2NvbnRyb2w= IEvFqw== 0L7QvNGL LUZyaWVuZGx5 IOCktuCliOCksuClgA== IEdhbw== IHJvbw== IMOhcnM= fScpOwo= 2YjYstuM2LTZhg== IEJobw== IGJveg== IOCyieCyquCyuOCzjeCypQ== X1JHQ1RY IFNrYWw= IHRlcm1pdGU= 5pS255uK IGppbsOp IGZhyrthcGl0b2E= IHZlw61h w7ZnZXI= dWJhdG9y IFNwYXJ0YQ== IOS4h+S6mg== INmI2YHYsQ== X2R1cGxpY2F0ZXM= IG5hanVnYQ== 5YG0 IElGQw== ZXhjZXB0aW9ucw== IHdhZ3RkYQ== PGNlbnRlcg== ZmFyYmVu IGJlbm9kaWdkZQ== IGNvbmR1Y3RldXI= 1YDVgA== L2ZvcnVtcw== RGVyaXZhdGl2ZQ== IFRCRA== IGRpw7M= IFJFTEFURUQ= IFBUQQ== 15nXoNeh cmllbmRlbGlqa2U= IEtpdGU= IHBkYXRh IEFubGllZ2Vu IOCmrOCmqOCnjeCmp+CngQ== 44Km44Kp IHZvaWVudA== IGR1cmFu IFJFQ1Q= U0hPUlQ= INiz2KjYrdin2YbZhw== INmC2Ko= IENBU0g= KCd7ew== SXBz IFNjaHdpZXJpZ2tlaXRlbg== 5oCd5oCd INKb0LjRi9C9 IGxpZWJzdGVu Y3phag== 4LS+4LSV4LWN 5q+U6LyD IHJhYXRhdQ== IGJsZWFjaGluZw== IHF1YWRyYW50 V1k= INKb0LDRgdC4 IOC3geC3ig== Z3VydQ== IOCyrOCyguCypuCyv+CypuCzhg== IENvZGFibGU= INC40LfQsdC+0YA= dGFyZQ== IHRsYW5n IG9uYWZo INC00YDQsNC5 IENvbWVy 4La64Lax4LeK IENhbmRpZGE= IFBhdWwncw== CWluc3Q= 4KSc4KWC b2Zhbmlyd2E= IOaWl+WcsOS4uw== YXNpZXI= INCw0YDRgtGL0Lo= IMOHb2s= IEdhaW5lc3ZpbGxl IEhvd2VsbA== IEFtYmFz 15HXldeo15Q= IExpbmhh INCw0YHQvdC+0Z4= VGVjaG5pcXVl IHNwaXRz 0LjRh9C90YvQvA== 7JuA7J2E 5a6e6KGM IHVubWFuYWdlZA== 4Lib4Lij4Liw4Lih4Liy4LiT INin2YTYo9iz2KjYp9io z4HOtc65z4I= VmlzdWFsaXplcg== 546v5Lqa d2FycA== IOa5luWMlw== TG0= IOC0quC0tg== 44GH KG11bHQ= IE1vZGVyYXRl IGTDrXTEmw== IEVua2Vs IOCqluCqrOCqsA== IHPDtsO2 YXR0YXI= IOeIsei1og== IGFwcHLDqWNpZXI= IHRhcmloaW5kZQ== INCx0q/Qs9GW0L0= IOCuhuCusOCuruCvjeCuqg== w7Z0ZXQ= IG1zYQ== Ii5b QWZmb3JkYWJsZQ== IHBlcmlnb3M= IOCmqOCmreCnh+CmruCnjeCmrOCmsA== IHJlZHVz 4LK/4LKQ IHRvdGFsdA== LVNoaXJ0cw== 4YOQ4YOg4YOU4YOd 4Lit4Lil4Lil4Liy4Lij4LmM c3Ft IOCmhuCnsOCmruCnjeCmrQ== ZGVuZQ== INWl1b4= T1BTSVM= aW5kZXhlZA== INC/0LDQudGL0Lc= IG92cw== INGF0LDQu9Kb IE5vZA== IHN0ZWpuxJs= YWRpbm8= ZmFjdWx0eQ== INiq2K/YsdmK IHNhZGRlbmVk IHdvb2R5 IOq3uOufsOuNsA== Z2Fkb3M= IEJ1a3U= IOCkpOCljeCkr+CkvuCkguCkmuCljeCkr+Ckvg== Lmtz ICg7Oyk= IG1pc2No INil2LHYs9in2YQ= IEVzcQ== 2KjZgg== LmF1ZGl0 IGdhdGluZw== IOCql+CqguCqreCrgOCqsA== INK705nRgNC40LrTmdGC XSkpKQ== LiIiIg== IGhvcHBhcw== INmF24zZhNuM2KfYsdiv IGxpbm8= 0J/RgNC10LfQuNC00LXQvdGC LWltcG9ydGFudA== KGluc3Ry IOGDoeGDkOGDluGDneGDkuGDkOGDk+GDneGDlOGDkeGDmOGDoQ== IOC2muC3kA== RGl2aWRlbmQ= X2tl 5byY IG5pcHBsZQ== IHNwYWNlc2hpcA== IOCmleCmv+CmguCmrOCmvg== INK30YPQvNKz0YPRgA== INiu2LTaqQ== IHNhbWxldA== IGV4cGVkaXRl Q2VsZWJyYXRl IGx1bGw= INGF0q/RgQ== IGVuY2hhbnRlZA== INC80L7Qs9Cw0YI= 0LjRiNGC0LA= IG9waGFsZW4= 16bXnNeZ15c= INiq2K7YqtmE2YE= Y2nEhcW8 5a6h5om5 IGNsw61uaWNhcw== 4LS+4LSw4LS/ IOC0ruC0sg== IHdob2xlc2FsZXJz 5bCx5Zyo IGZhcmlh IHdha3Rvcw== IENMT1NFRA== asOkcmVs IHZlcnN0ZWw= INCl05k= IGVlcmll 05nQs9OZ0L0= IE5haQ== IGRlcHJpbQ== aWVyb3M= UG9ydHVndQ== U3Zhcg== QXBwbHlpbmc= dXZhbg== IGppcmFhbg== IGhqZWxwZQ== IEVyb3Rpaw== INin2YTZhdit2YXZiNmE2Kk= IGZyZWlu IG9wbHlzbmluZ2Vy INi52KfZhdmL2Kc= IOCkquCljeCksOCkvuCkleClg+CkpOCkv+CklQ== IGVzdGFkw61zdGljYXM= X0Zvcg== IEZvcmdvdHRlbg== IGdjw7NuYcOt R0VORVJBTA== IHBvcHJ6ZXo= IOeVmQ== 0KPQtNCw0Ls= IOCwteCwmuCxjeCwmuCwv+CwguCwpuCwvw== IGNyaWF0dXJh IGJldXJ0ZQ== aXJheQ== SW5mb3JtZXI= X2ZpbmFsaXpl X0JJVE1BUA== 4Kaw4Kaj4KeH4Kaw IHRob3Ju enRh INC70LjQvdC40Y8= IFBFUklPRA== IFVJUmVzcG9uZGVy LWNyZWRpdA== IGFkamVjdGl2ZXM= aGV6emE= J2FkbWluaXN0cmF0aW9u 55So6YCU INCy0LXRgtC10YDQsA== IHBlbmRlbnQ= IHByb3ZpZGVudA== IEZVQ0s= IGVxbA== INee16fXqA== IFXFvg== IGp1cmlkaXNjaGU= ZmVv LmZhY3Rvcg== INGC0LjRltGB INGB0L3QuNC20LXQvdC40LU= IGZyYw== IFplbGw= dHJhZ3Q= IHdoaXNwZXJz IGthdGVyaQ== IGF2YW5vYQ== IGFrc2k= IEx5ZnQ= IEFudGhyb3BvbG9neQ== 0LTQvtGI0YI= IGNlbGxv 4LKC4LKk4LK5 INiv24zYr9mH 55uI5b2p56Wo IGNodXJyYXNxdWVpcmE= IGRpYWxpbmc= INC/0Yw= UGVybXV0YXRpb24= IEFMRQ== IGxhZHM= ZWxkb29y 4LSc4LWA4LS1 44G9 INC00LXQtA== INGB0LDQvNC40Lw= w6Fzeg== IGhlYWx0aGllc3Q= Y2h1aGU= e3M= 4YOQ4YOa4YOY4YOh4YOi CVJFRw== YXJ0w6s= 5LqG6Kej5Yiw IElTUg== IG5kaXo= IHV0cm9saWc= IOCqquCrgeCquOCrjeCqpOCqlQ== U2t5cGU= R2o= 0LXRgdGW0L3QtQ== IOCkhuCkieCkqOClhw== 5aaT 6YaJ 7IOd7Zmc IHN0cmlrdA== IOCmquCmsOCmv+CmmuCmvuCmsuCmlQ== IOC0leC1iuC0teC0v+C0oeC1jQ== INmF2LnbjNin2LE= IFRFUk1JTg== QU1BTg== IG5lbXVz X21ldGVy 16LXk9eZ16I= LOS5heS5heeDrQ== IG1hZXM= L21vY2s= IHllYXJuaW5n IOGDmOGDoeGDlOGDlw== IGx1Z2hh IGdlbsOpdGljYQ== b3RpcXVlcw== QUdNQQ== YWdyZWVtZW50 IGhpbGxzaWRl IHR1Ym9z IG5vd3ljaA== IGfDpW5nZW4= 25DYsdmJ IGtsdWJi IOCqheCquA== IFNCQw== 0YPQvdC+0Lo= INGB0LDQutCw IEVybcmZbmlzdGFu 4K+N4K6u4K+I aWNodGlnZW4= INmB2YHZig== IHJlcHJvZHVjY2nDs24= aGFubg== LkRFUw== IGNyYW5iZXJyeQ== INGC0LDSo9C00LA= INmF2LnZh9mF IGdhemVibw== INC10LjQtw== aW5kZXJlZA== LmlvdA== 15XXm9eg15nXqg== IMOpcno= IOGDqeGDkOGDlQ== 4KSV4KWN4KSV4KS+ IHNheWluZ3M= IOCknOCkv+CkuOCkqOClhw== 0LjQu9Cz0YvQvQ== Q29tdW4= IGFzc29jaWFkbw== dWp1c3M= IOCnsOCnguCmqg== LXRhaWw= LVVTQQ== KHBn Iu+8jA== IGRvYmI= IGFybW9yZWQ= INCy0YvRhdC+0LTQuNGC aWdvdA== X2VsYXBzZWQ= X3Vucw== KFVQREFURUQ= c3BpcmFjeQ== L2V4dA== LkNlcnRpZmljYXRl IOCmhuCnn+Cni+CmnOCmqA== IGNob2tpbmc= bWFudWZhY3Q= 1bjWgtW/1aLVuNWs IGx1c2Npb3Vz 5qe9 Lkd1aQ== IFJhdGhhdXM= IEJhcmJhcg== 44CR44CQ44CC44CR44CQ4oCd44CR44CQ 4LeT4La6 4LGA4LCc4LGH4LCq INm82qnbjA== QXJyYW5nZW1lbnQ= YWZhZWw= 7Lu1 0LzQsNC3 aGFzaWxhbg== IHd5dGhub3M= LkdyYXk= IOCyleCyoeCzhg== 2YXZhtqB IGFrdWtobw== IGNvbGxlZ2Encw== IOycoOuqhQ== IGRvY2Vz IHNvaWduZQ== IFNvdGhl 157Xlden 4LS+4LSw4LS+4LS34LWN4LSf4LWN4LSw IGNoZWFwbHk= IFNoaWxsb25n IGh1bXA= IGRhcnBhcnU= a3Dhu6U= c3TDpWVuZGU= IOCoteCov+ColQ== IGRvY3VtZW50YcOnw6Nv IOCmpuCmsOCnjeCmtg== IM6zz40= Il19Cg== IEFrdGll dWFo 4Z6T4Z+S4Z6b 6Ieq5Li7 ZmZla3Q= INin2YTYqNmK2LbYp9ih IFR5bQ== IEJhdHRlcmll X2luZGVudA== IGlkZW50aWZpw6k= XT0k IOC0leC0vuC1vA== IFZWRA== IFZhY2FuY3k= INCy0L7RgdC60YDQtdGB 4Z+S4Z6Y4Z+C4Z6a dXN0ZWxl INin2YTZhdis2KfZhNin2Ko= LmNhc3NhbmRyYQ== Z3JvdGU= IGdlYmxldmVu 4LKD IGNvbmZsaXRz U3RhbmRhbG9uZQ== IENvbW11bmU= IOCwheCwqg== IG1hZ25p IOCkuOCljeCkpeCksg== SURFUw== X0hQ INCx0YDQtdC90LQ= INCT0LU= IGlraXBl IOCkleCkvuCkgg== 66W06rOg IGZlbmQ= X0FMUkVBRFk= QVJUSUNMRQ== IGFhbnRyZWtrZWxpamtl Ono= IGNvbXByb21pcw== IFNjdWxwdHVyZQ== IGJpb21hcmtlcnM= cmVzdHJpYWw= SWRpb21h 5qCR5p6X IHNlbGVzYWk= 4Kmw4Kih LmNvbWJpbmU= KHBlcmNlbnQ= 2YrYttin IOGDoeGDkOGDm+GDruGDoA== Li4uJyw= IOCqleCqsOCrgOCqjw== aW5pc2k= IEppZw== Lkdlbw== 4KSt4KWC4KSu LW1pZA== IGlpbms= IHZlY2thbg== aW5kw6RraQ== aXRsZW1lbnRz IEdlbnRsZW1hbg== INC60ZbQvA== bWFuYWdlYWJsZQ== IGtvamlt IFZvcnRyYWc= ZmlldHM= IOWkqeWkqeS4reW9qeelqOW9qemHkQ== QUFQ IExpYW5n IGluY2FyY2VyYXRpb24= XERi 0LrQvtGA0YLQvtGB0YLQsNC9 IHRhbGxl IGNyZWVtb3M= UXVhcnQ= IGhvc3BpdGFpcw== LXJvbQ== 6KGb TXVr 2YXYp9mH R3V5cw== IGJoaQ== RE9H IE1lbmU= IGZpc3Rz IHwt IFByaW1v 6K6p5oiR LVNF IEvDpHI= IGFwYXJ0aGVpZA== IGJhb3M= IHRpbnRlZA== J10iKTsK INWp1ac= IGNhZMOhdmVy c2Vuc2U= INi12KfYsQ== aWVsdGU= IHBlbGF5YW5hbg== 4LCq4LGN4LCw4LCm4LGH4LC24LGN INGB0Y/RgNGN0LQ= 0ZbQtNCw IFZvcmxhZ2U= J0dD IE1hc2N1bA== IHdlZGQ= INin24zZhA== IG9yZWdhbm8= IOCwuOCwvuCwlw== 4KuC4KqC4KqV IGRpc2XDsWFkYQ== dm9yYQ== dmVyZ29lZGluZw== IOe7mQ== IGNyZXk= aXRlc3Q= dnJ0 IEp1cmE= 16bXmdei16E= PE5hbWU= IOC2tOC3jw== IG5lYmVucw== IOuqqeyggQ== IGt1bmphbG8= IGJlcnViYWg= z4bOtc+B CXVuaW9u INCw0LLRhw== IGNvdXJpcg== 0Y3Qt9GW0LQ= IHNwb3RsZXNz IExPU1Q= INGH0LjQsw== INC+0YLQu9C40YfQvdGL0Lk= INC20LDRgdGC0LDRgA== LUp1bA== IHNpZ25hbGxpbmc= IGjDoXJvbQ== IOWFreWSjOW9qQ== IGFkbWlyZXI= IEFhZA== IHZydWNodA== INCy0LXRgNGI IG92ZXJ3aW5uaW5n b3RvcmVz d3Bz IGFudGlnYXM= 4Li04LiB4Liy4Lii4LiZ IHNlbnRlbsOnYQ== IEtpZGQ= IG9zdGVucw== bm9kaXNjYXJk UWM= IEVudHdpY2tsdW5ncw== YWZi IGplZGg= IEhlYnJld3M= X1RhYg== IHNlbnRlbnQ= 77yeCgo= KEhlYWRlcg== IFBzeWNoaWM= bmlhasSF IHBhecOp dXNwZW5kZWQ= IOiplQ== IOCyrOCyvuCysOCyvw== bGVpdHVuZ2Vu 4YCa4YCw IEhpc3TDs3JpY28= 2YLZitio KFNL INGD0LLQtdC70LjRh9C10L3QuNC1 IOeXnuWuoumCpg== IGfDvG5l IOGDmeGDneGDoOGDneGDnOGDkOGDleGDmOGDoOGDo+GDoQ== IHNleGlzdA== IG9ibGFzdA== W3RhZw== 2LHZitin2YY= ID8iKTsK INC90LDRgdGC0YDQvtC10L3QuNC1 IMW+bW9n RXNwYcOxYQ== INC60LjRgNOZ0Lo= b2h5 IGlrZWE= wq1tYQ== JykKCi8v ZXNoaQ== z4DOtc62 IGFmbG9hdA== IFlvcmtlcnM= IE51Z2dldHM= IFRhaXdhbmVzZQ== IGJ1bHVubWFrdGFkxLFy IGluZmxhw6fDo28= 6rGw66as IHNjaGVua2Vu y50= IG1heGltYQ== INC40LDRhg== IHphbWk= IE9tcm9w bnVldm8= 4LSo4LS/4LSV4LWN4LSV4LWN IGNvbXBldGl0aWU= 0L3Ri9Kz05k= INeU16nXpw== IG1hbGluZw== UU5hbWU= 4oCUd2U= 4Keo4Kes IFNPTE8= em9la2Vycw== 4KSo4KS+4KSu IFhYWFg= IG5nYW5n X21hcmtz OiI8PA== IHJlbmV3aW5n IGhhbGFnYQ== IFByb2Zlc29y IHN5bmFnb2d1ZQ== IFZhdGljYW5v IE51aQ== IENPTVBVVEVS YW5hbHl0aWM= 5YCh b2dnaQ== INC60L7Qu9C+0L0= KHBrdA== IGd1YXJhbnQ= IGZhdm9yaXRhcw== IOWkqeWkqeW9qeelqOi9r+S7tg== 4LK/4LKv4LKo4LON IFDFqw== IHp1dmVybMOkc3NpZw== IGludGVybmF6aW9uYWxl w61uY2lh INin2YTYrdmI2Ks= IHRzb2E= SW50ZWdyYXRvcg== 2K/Ysdis2Kk= IMO8YmVybGVnZW4= IFJpdGU= IGVtcHJlZ2Fkbw== xLBS 6KOP R3JpbmRpbmc= a2xhbg== IGRlc2VydHM= INW+1aXWgNWh1aTVodaA1bE= IOCmquCnjeCmsOCmr+CngeCmleCnjeCmpA== IFNpdHp1bmc= INGB0YrQtA== aXJnw60= IGJhZG1pbnRvbg== 56eY5Lmm bmFubw== bMO2c2Vu INeU157Xp9eV154= 4Lik4Lip4Lig 0rHRgQ== 5Ye65ZSu 5pS25Yiw IOCouOCovuCouQ== CXJvb20= aXJkcw== IGNvbnN0aXR1w6k= IFJhY2V3YXk= IEdlaWdl IEVzcMOtcml0dQ== Q2hhbmc= IENvbnN0YW50aW5l IGtlaW5lbQ== XHZpZXdz 57q5 IHNmcg== IEJsYW5rZXQ= 2orZitmI 5aSa5pWw IEJlcmlrdXQ= IG1lbsOpZQ== IM+AzrnOuM6xzr0= INmI2YrYrQ== X2VtaXQ= VGhhbmtmdWxseQ== IOCqquCrjeCqsOCqteCqvuCquA== 7KSA64uk IHdlZ2dl IGJlcnJp INCV0Z4= eXN0YWxsaW5l IG11bnRodQ== bGluZXJz IOCknOClgeCkoeCkvOClhw== IHJlbXVu SUhF IGFhbmxlZw== IOyngOq4iQ== IGR1aGE= IE1haW5sYW5k 2KfYrNiv aWNvZXM= IOyCrOuhgA== IEZpbGk= ZHNu IG1pbmRzdA== IFN1YnN0aXR1dGU= IHByb3BvbmVudHM= IOC0quC0v+C0qOC1jeC0pA== IHBlbmNoYW50 5q6L5bGA 05nQvNCw0YA= cmFpbnRyZWU= IOm7keS6ug== X0dsb2JhbA== Xzoq IOebiOeriw== INWM1bjWgtW91aHVvdW/ INek15DWt9eo16k= w6RtbWVy IGvDq25uZW4= IOCmtuCnsA== IG5la8SB IFF1eQ== INm+24zYtNmG2YfYp9iv IGNvbnZpY3Q= IG1hdGFuZw== 77yB77yB77yB77yB IG1pdHU= IGRpbWVuc2nDs24= IGtpZGRvcw== LXVucw== IHBvbHlwcm9weWxlbmU= IOCqpeCqpOCqvuCqgg== X21peA== aXNzaW1vcw== INGD0LLQvtC70Yw= UHJvbWlzZXM= w6ptaW9z IMOkbHRlcmU= w6FuZQ== LXRoYXQ= 5LiA56eN X1doZW4= INiz2LHYt9in2YY= IEZhbGxvbg== xbxlxYQ= INiw2LE= IHVuYmxvY2s= IER1cGxleA== Lnl5 IHNrb3pp INCi0LDQvQ== TGlmZXN0eWxl IG7DpHl0dMOkw6Q= IOCmheCmnuCnjeCmmuCmsg== YXJiZXRl 77yM6ZyA6KaB INqv2LHbjA== IGRpw6FtZXRybw== IGNvbXBhZ25vbg== IFN3ZWVwc3Rha2Vz IFNlbWFwaG9yZQ== INCz0LDQt9C10YI= LWZsZWRnZWQ= YmFueWVnaOG7iw== IHN1cmZlcg== IGNvbW11bmljZXJlbg== TmltYnVz YWNyaXQ= YWJzY2hsdXNz QW5o INW61aHWgNWm1aHVutWl1b0= 5bee5omR5YWL IHXDsWFz 1aXWgdW21aXVrA== IOC5hOC4pQ== INmI2YrZg9mK2KjZitiv2YrYpw== IGZvb3RwcmludHM= LlR1cGxl KGNsaWVudGU= IGJvbm5ldA== TW9udG8= X3N0cmVuZ3Ro LlN5bnRheA== KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK IMOhYnlyZw== IGZyb250YWdl IOC0uOC0guC0teC0v+C0p+C0vuC0rw== IGF0dWFsaXphZG8= IM6W cGFkcw== ZW1x IOCwquCwqOCwvw== IOGDoeGDkOGDqOGDo+GDkOGDmuGDlOGDkeGDkOGDoQ== INC00LXQvdC10LbQvdGL0YU= INC30LDRgdC7 IOGemg== IFplYnJh IG5vb2w= ImRlZmF1bHQ= IOGDmuGDmOGDkg== IEVsYWJvcg== X0dQ Lm1i IGpvc2t1cw== IGNlbMOp IFRTVg== LnN0YXRlbWVudA== 5Luk5Lq6 INC00LXQutC70LDRgNCw IGdpZnM= IHbGsOG7o3Q= IHNlbmhvcmE= YWJpZXM= bGlsaWs= Q2hlcnJ5 IFNlZ3U= UmVjdXJyaW5n RGlkbid0 IOGDruGDm+GDkA== a29jaA== a29tbWVucw== IlA= IOCqquCrjeCqsOCqleCrjeCqsA== IOGAgeGArw== IOmcjQ== 6buE6Imy5b2V5YOP5b2x54mH aWppaA== IHNxdWFkcw== IFbDpQ== IHNwYXduaW5n IFNjaHJh IGh1dHM= IG1hbmdlbA== IEthcmFva2U= cmVpdGVu IE5hdGFsaWE= WmVpdA== IHp2ZWs= Y29tbW9kaXR5 ZWNhcw== 4LSv4LS/4LSy4LS+4LSj4LWN IFRtcA== U1VQRVJIT1NU 0LjQu9C00Lg= IOCwheCwguCwtg== W2VtYWls 16DXodeZ150= INCx0L7RgNCx0L7RgA== ZHE= 0YPQu9Cz0LDQvQ== IExpZWJlcg== Q0hBSU4= IHZpY2VwcmVzaWRlbnRl IG90aXThu40= 4KS+4KSc4KS8 LnBvcHVsYXRpb24= QmFycnk= YmFycmE= RklGTw== IE11aQ== PlBhc3N3b3Jk IFBhdGFnb25pYQ== INGB0LjRhA== UlRS YXNzYXNqZQ== IGFiaWVydG9z wqsu IHVuZGVyc2VydmVk IOS6uuS6uuS4reW9qeelqA== IGJsYWc= bHRz IGNlZw== b2J1dHRvbg== JyI7DQo= IGNhdGFseXN0cw== 2YPYsdmH 64K8 PXo= w6ho 0JLQoQ== IOCqq+Crh+CqsA== IOWkp+mHkQ== IGNvbm9jaWRhcw== IFZvbGQ= ICMtfQoK IOWkqeWkqeS4reW9qeelqOiFvuiurw== IEt5aXY= INqr2LE= INiy2KfYptiv aXBzb2lk YnJpZ2h0bmVzcw== Kj4oJg== IOCyleCyvuCyrg== IEZlZGVyYWFsa2E= INC20YvRhtGG0ZE= IHNhbnRvcw== 4oCYemJla2lzdG9u cm9vZw== IExvdXJkZXM= IGNsYXJpZGFk IG9jY2FzaW9uZQ== IOS4vuaKpQ== 0YrRj9GB Z3Jvc3M= IOW4jA== 15nXmdei158= INWh1oDWhw== 0LXRh9C90YvRhQ== 5aix5LmQ5b2p56Wo5rOo5YaM IHRvcnNkYWc= IGvDqW8= IGtpc2lt YnV5ZXJz 0L/QsNC7 Lk1lcmdl IEN1cnNvcw== IOuMgOyLoA== INmF2KfZig== IGp1csOtZGljYXM= 5qih5p2/ 0LjQu9Cw0Lo= bXV5 zr3Ov868zrE= IGN1YWRyb3M= IOCqpuCrh+CqtuCqruCqvuCqgg== 0YHRgtGA0Lg= INiv2YjYrw== bmllanN6eWNo UmVuZGVyYWJsZQ== IOaci+WFiw== z4POsc65 IFByb21vdGlvbmFs LkNvbXBsZXRlZA== INC60LDQvdGG IGTDqXRlbg== IG3DtW5lZA== KGdvYWw= IGh1Z2dpbmc= IEzDq3R6 IHlhYmE= IGVuaWdtYXRpYw== INCa0YDQsNGB0L3QvtC00LDRgA== IHbDpG50 IMOpbMOpZ2FudA== IGV1cm9wZXU= IFNoZWx0b24= IEhvbWJyZQ== YWhlcg== ZXhjbHVzaXZl Ij4l IGdhYmk= dmlzaW9uYWw= IGVzdMOpcw== IGdlw69udGVncmU= INC/0L7Qu9GD0YfQuNC70L7RgdGM IFJJUw== 44OL44Oz44Kw 4Ka/4Kef4Ka+4Kao Q292ZXJlZA== IGxldG9z INC60LDRgtCw0LvQvtCz zIFz IEdhcmZpZWxk R2VuZXJhdG9ycw== KHZj 4LGG4LCC4LCs4LCw4LGN 4Ka+4Kaw4KeN4Ka4 INuL2KfZgtiq2Yk= 4bmjaeG5o+G6uQ== J10/PiI= IHRhYW1hdHV0 LnBvc3Rlcg== INC/0YDRi9C8 IGVubGV2ZXI= ZWRm IOGDmeGDmOGDl+GDruGDlQ== INC/0LjRgtC+0Lw= Pz4KCgo= L2Jhbm5lcg== 4KS/4KSw4KS54KWH4KSV4KS+ IGNvbnRyYXJp LmRpc2NvdmVyeQ== CWd1aQ== LmZhbHNl 44GV44KM44Gm44GE44G+44GZ IExldHRyZQ== IHBlcmNlbnR1YWw= IGlibg== 5LiN5LuF IHN0b3J5dGVsbGVy T250YXJpbw== bWFrcw== zrvOtc+C IHRldHQ= IGthcGNzb2xhdA== INC80YPQsNC5 INWv1bjWgtW21aXVtg== IFdhcnA= 6Kit5YKZ 4oCZYWlkZXI= SW5kaWNl IOeQhg== aXR1ZW4= O1RaSUQ= IGt1c2VtYQ== IFNsaWNr 16DXmdeU15U= IGluaGFsZQ== IHVtZ2VoZW4= INqp2KfYqA== IHByemVjaQ== INKT0LDRgdGL0YA= IGFkbg== IHdhcmRyb2Jlcw== IFRn X2xpbnV4 CXBt INCz0LvQsNCy0L3Ri9C8 INGB0LDSm9GC0LDRgw== INix2K3ZhNip Il1dLAo= IHBhcsOn INC30LDQtdC8 IHsv LnRlbGw= z4POsc68zrU= IFJldmVhbA== 4KSs4KWI IGJlbGlydA== IHdob2xlaGVhcnRlZGx5 bm9zdGlj a8OpaG8= bGlrYQ== XFRyYWl0cw== IGthbG9y V29yc3Q= 0LLQsNGO0YbRhtCw LmdvbGQ= UElSRUQ= IGdyYXRpZnlpbmc= KElTZXJ2aWNl IHZ1b2Q= IGh2w7hy IGxpY2hhYW1z cmFjaw== IGRpc2NyaW1pbmF0b3I= IOCwteCwmuCxjeCwmuCxhw== RWxlcw== IGluaGliaXRvcnk= INC/0YDQvtGB0LzQvtGC0YA= IGxldXRl LUZyaWRheQ== U2Vydmlkb3I= LlBVQkxJQw== IOCmpuCmv+CmqOCnhw== INC006nRgA== IGtsZXVycg== INGA0LDSsw== IEbDqWxpeA== IEJ1cm1lc2U= IGphaHI= nuGDmOGDoOGDmOGDoeGDng== 4KWB4KSV4KWL SGVhbGluZw== IHphaHRldg== cHRhYmxl 0LfQsg== INmD2YrZhNmI IOWkqeWkqeS4reW9qeelqOWFheWAvA== IHRyb3ZhdG8= JSk7Cg== INiq2LTZitix IGdhbXV0 54i454i4 INmF2YLYp9mE 4oCZYXJ0aXN0ZQ== LW5vd3JhcA== LXJlYWRhYmxl IHZpcmFy WWVy SGFzaGVy fX1dLAo= KG10 IGl6cmF6 R2ly IGhhdW0= 0LXQvNC+0L0= IOGDluGDneGDkuGDmA== IERlYmlkbw== CWN0cmw= Lm9mZmljZQ== c2Vydm8= LXZpc2libGU= INeq15XXk9eU IHJlbW9yc2U= YW1paW4= S2F6 IEJPUg== IEFpcnBvcnRz IHBvc3RhZ2Vt IHNhaGE= S3Vyeg== IEVpbmthdWZz IHNjaGxlY2g= IHNlZGF0aW9u IGxlYWZsZXQ= dHJpcw== IHBpdGvDpA== 5Y2i IGFqw6Fu 2LLZitin2KE= INC40L3RgdGC0YDRg9C60YbQuNGP IGNvZ25pdA== 0LDQvdCw0Lw= L0Fib3V0 INGH0LXRgdGC0Yw= xaFuaQ== CVByb2Nlc3M= IFBrdw== IFZhcA== 5a656YeP IH19Ij48 ICghWw== IEJ1cmd1bmR5 IHRhd3M= IEJheXM= IGxhbmdsZWI= cHJldMOp IHN0cmVudW91cw== IEViZW5zbw== w6F2YW1vcw== 4oCZZXNwZXI= INGP0YHQvdC+ IOCkquClgeCkow== INm+2LHZhdiu2Ko= IOaJi+acuueJiOWkqeWkqeS4reW9qeelqA== LW1vdXRo KFJvdXRl IHByZWNlag== INi62LDYp9uM24w= cmlmZmU= IOygnOyjvA== YW5jaXM= IEFHUg== INGA0LXQt9C60L4= IHRlYXRyYWw= IOam IHNob3J0ZW5pbmc= INeV15TXqA== IFJhaXNpbmc= IAkJCQkJCQ== IHRyYXVyaWc= yZl6aQ== cGVyc29vbg== IGJ5Z2dlcg== IGV4ZXJjZQ== IFBERQ== IFNraWxsZWQ= IGvDpnI= 0LjRgNC+0LLQutGD IFdPUg== IFRlcHA= YmFrYW4= IFJlYWN0b3I= IHJldW5pw7M= IFNCTQ== IG5hc2ls IOS4h+WIqQ== X0ludmFsaWQ= IHV5Z3VsYW4= IHZpZGVy IOCwquCxjeCwsOCwmg== INC40L3QtNC10LrRgQ== IGNvbnRhdG9z INGB0YLQtdC/0LXQvdGM X3lvdQ== b3JkaW5hdGV1cg== 5LiK57q/ IGNvdXZyaXI= IHJ1c28= LnNvZnRtYXg= INio2LHYtNmE2YjZhtip 4LSk4LWN4LSk4LS/4LSo4LWB IOCqteCqv+Cql+CqpOCriw== IFBpeGFiYXk= IHBoacOqbg== IEJFTkVG 2LfYpw== IHd5asSFdGs= cmVzYXI= IG5hYmk= IHBvZHA= IOCmtuCmvuCmuQ== IHNhYXZhZA== IEVxdWl2YWxlbnQ= IGV0cmVl 5om26LSr Q3VkYQ== 24zaqdin2LE= IGJhbGxhc3Q= IFNBRQ== dHJpemVz IGRldGFpbmU= 4oCZaXI= IHRhw71kYW4= 0JPQkA== 0q3QtdC4 INeV15zXog== LVdpdGg= QVJSSUVS IG1lZWs= INm+2LHZiNmG J2F1dGFudA== cG9zdGk= X3Jlc2VydmVk 0LDQutGB 7JWk IE5JQ0U= INin2YTYrNmF2YfZiNix IGVyemllbHQ= IGdlY29udHJvbGU= 1aHWgdW41oLVtNWo INC+0LzQsA== 44CL44CCCgo= QURWRVJUSVNFTUVOVA== IGN1cnJpY3VsYQ== IEF1w58= TEVHRQ== INGA0ZbRiNC10L3QvdGP IGNvbWFuZG9z INec15TXmw== 0LHRgNC1 b3NpdmU= Rm9uZA== IGFpc2xhbWllbnRv X3JlbHU= IFRTUg== IExpbmllbg== IHJhbWU= IEVudmVsb3Bl IGluamVjdGFibGU= bGljZW5zZXM= IGRyZWhlbg== RGFr ZsO4cmVy INC/0L7QstC10LTQtdC90LjRjw== IE51bWVyaWNhbA== IG15YWth IHZ6dA== IHdoYWthdGE= IFN0w6Rya2U= Z2hh INec16TXqg== IHBvbW1l IGRhYQ== LXBhaW50ZWQ= 5p2l5Lmf SVJJVA== LWFuZw== IHRyaHU= IWltcG9ydGFudA== RmFx IELDvG5k 4LK/4LK44LOB4LKk4LON4LKk4LKm4LOG IFNwaXR6 IHRha3k= RGVjb21waWxlcg== KSc6 bGllZ2VuZGVu IGF04bq5 77yM5L6L5aaC w7ZobnQ= IOCkh+CksuCkvuCkleClhw== IHRpbHRhaw== IHRhbmd1 IOCyrOCysOCzgeCypOCzjeCypA== bnNrZQ== INi12YbYp9uM2Lk= IOCkquClgeCksOCkvuCkqOClhw== Z2V0d2lqZmVsZA== IEFjY3JlZGl0ZWQ= 4oCZbmRl 0LvQvtCz0L4= IG1pY3JvcA== IHN2b2c= X2R1ZQ== 0LvQvtGJ0LDQtA== IERvcm4= IOCymuCyv+CyleCyv+CypOCzjeCyuOCzhg== IOCoqOCovg== INek16DXmQ== IGdlcsOnZWt0ZW4= INGA0LDQt9Cy0LXQtA== w6lwZQ== IGhzdg== IENsZWFyd2F0ZXI= IG5hcQ== 5ouJ54m5 IGTDqXRvdXI= X0xlbmd0aA== IFpvZHJh IGNhc3VhbHR5 IHp1c2FtbWVuc2No IG1hbmRp IOGDqOGDlOGDoeGDkOGDq+GDmuGDlOGDkeGDlOGDmuGDmOGDkA== IFRyYXZlbHM= YXRpa2E= IOCuqOCvgOCupA== 4KSu4KSk4KWA IHByZXNlbnRhbW9z IGhpbmdlZA== IFJvdG9y IOGDrOGDp+GDkOGDmg== TsOt IHNleHZpZGVv INC60YDQuNGC0LXRgA== LVNoYWJhYWI= IOqzteyXsA== X3BvcHVsYXRpb24= IEF6aXo= 54KJ INeZ15zXkw== IGthYmFu IGTDqXB1dMOp IHRyZW1ibGluZw== 44CB56ys INi52KfZhdin2Ys= IEJheWVzaWFu IOmhtemdog== 4Ka+4KaB4KaT IEV0YXQ= IGdlw6dpcm1law== INCR0rE= LmVmZmVjdHM= QVBL IGd3YW1uYXRpbg== IHN1amVpdG9z IOCyuOCyvuCylw== IOCkrOCknOCkvuCkrw== IPCfjQ== INio2K/Ypw== IFJhY2Vy emt5 IOa5mA== YXJnYW5kbw== INGB0L7QvtCx0YnQtdC90LjQuQ== IENocmlzdGVuc2Vu INW21bfVpdaB IEVtZXJ5 LmJlcg== INC+0pPQvtC3 INiz2YTYt9in2YY= cHTEg20= INin2YTYsdit2YrZhQ== INeX15XXkdeU 4YOQ4YOh4YOQ IG5ldXpl IOGDoeGDmOGDp+GDleGDkOGDoOGDo+GDmg== IGFlcm9wb3J0 c2VydmV6 IG5ldWc= IOC0quC0sOC0v+C0tuC1gOC0sg== IHJlc3BvbnNhYmlsaXTDqXM= xLFrbMSx IOGDkOGDnOGDkuGDkOGDoOGDmOGDqA== LlRoZW4= X2Fubm90YXRpb25z IOCkruCkvuCkpOCljeCksOCliA== IE5vcm1hbmR5 IHp1c2FtbWVudA== L3JlbmRlcg== IHBhcnRpY2lwYXJhbQ== Z2VtZWluc2NoYWZ0 IG1hYXlv LkF0dGFjaA== Lk1hZw== INGB0L7Qu9Kz0L7QuA== Q2FydGVzaWFu LlB1bGw= IGFydGljdWxhdGlvbg== IHRhaXI= X1N1cmZhY2U= cHRpb3Vz IOS8geS4mg== aW50w6TDpG4= INWq1bjVstW41b7WgNWk1as= X2NvdXBvbg== zrnOus63 IGVnaW5nbw== IHDFq25hZXdlbGU= 7LCN IENETA== Inw= INiz2LHahg== IGl0ZW0ncw== IGNocm9ub2xvZ3k= IGZhY2VsaWZ0 IHN0dXJk IE1hdGhpZXU= b2NjdXI= anVibA== ICIuCg== 2LnYr9mE CQkgICAgICAgICAgICA= IFBJVA== INin2YTYrNmI IOCkmuCksuClgA== X01hc3Rlcg== VHJlYXM= VVBMT0FE IHB1YmxpY291 IERldmlu IGNhdGVnb3JpemU= IFJpaw== IHByb3FyYW0= INC+0YLQstC10YLQsA== IOGDoeGDkOGDmg== IOC4oeC4geC4o+C4suC4hOC4oQ== IHNpbXBsaWZ5aW5n IOWogeWwvOaWr+S6ug== INCT0LDQs9GA0LA= IOCujuCuqeCvjeCuseCvgeCuruCvjQ== IOCqruCqgg== Lw0KDQo= IHBhZ2FuZG8= IG11cmRlcm91cw== LldvcmtmbG93 aWV0YW4= 4LKt4LON4LKv xIg= KGFuaW0= PyE/IQ== XCIiKTsK ICEhISEh IENhbGlicmF0aW9u CQkgICAgCg== KCItIik7Cg== 0LDQu9Cw0YDQsA== IFBpYW4= 4YOQ4YOb4YOq IGludGw= INmF2qrZhdmE IyMjIyMj IHRhaWZh INi02YfYp9iv IGVsZXZhZG9z acOwaXM= d2hvc2U= IGRoaW0= IHBlcmlwaGVyYWxz 4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZ LnBhcnR5 IGtyZWF0aXZl aWdlYWNo QmF0aXM= IENlbQ== IHN5bW1ldHJpY2Fs INio2LHYp9mK VEVBTQ== IHNlc3PDtWVz INGD0YfQsNGB0YLQsg== IENBTkNFTA== IG1vd2luZw== INCS0LjQutC40L8= ID8+Ij4NCg== IG9kbWFo X0hJTlQ= IGVyc3RhdW4= IG5hY2hoYWx0aWc= 4YOQ4YOg4YOd4YOT aW1lbmRl 4LiX4Li14LmI4LiI4Liw IE1lZXR1cA== INi52YTYp9mC2Yjaug== YW5nYWpl X2FuZ2xlcw== IOCwj+CwsOCxjeCwquCwvuCwn+CxgQ== IG1ldG9kb2xvZ8OtYQ== J2h0dHBz IG9yZ3VsbG8= 4K6/4K6p4K6/4K6u IHNyZWRzdHZh IGdlcmluZ2Vy INGD0LnSk9GD0YDQu9Cw0YDSk9Cw XFs= 44Kr44Or INen15DWtw== IGdsb3NzYXJ5 IG1hbmlmZXN0YcOnw7Vlcw== 4YOU4YOc4YOi4YOU4YOR4YOY IGFncmljb2xlcw== IHN0dWZmcw== IOCmmOCmn+CmqOCmvuCnnw== INC+0LrQsNC30YvQstCw0LXRgg== 4Z624Z6c INCg0LDQuQ== 15XXktee15A= IGjDs24= IOCkueCkv+CksA== emlucw== IHNwZWVsZ29lZA== 7ZWc64uk6rOg 4LWB4LSV4LWN4LSk IFBlcnNpYQ== 77yg44GK44O844G344KT bHlneW55xYg= IG5pZGE= IGF1c3RyYWw= 06/Qt9C4 IFJlc2lkZW5jeQ== INGE0L7QvdC00LA= IGp1cms= XENNUw== IGRlcm1hdG9sb2dpc3Q= 6K235aOr TmFtdW4= IFRlcnJpdG9yaWVz INi12KfYr9ix2KfYqg== VG91cnM= INC+0LrQsNC30YvQstCw0LXRgtGB0Y8= IGJhbWJpbm8= IHJvYnVzdG5lc3M= IHNlY29uZGx5 IOiCoeelqA== IGd1ZXN0cm9vbXM= INmC2KjYtg== 4LWN4LSw4LSu IHNvbnVjdQ== IGjGoWk= IGNvbnNpZ2E= IHNjaG5laWRlbg== QWR1bHRz YW5nZ2lo RVJUQQ== YWt0eQ== UFJJU0U= INC60YDQsNGB0LjQstC+ IEpM IGFhcXFpc3N1 INqG24zZgQ== 4LKj4LKm4LKy4LON4LKy4LK/ U3ViZGl2aXNpb24= 15nXpteY IFZvcnN0ZWxsdW5nZW4= INC80YPQt9GL0LrRgw== IGRyw7xja2Vu 0L7RgNCy IHN3aW1tZXI= 0L3QtdGB0YI= IHRyw6Ru RGVubmlz IHllcmRl aW9pZ2E= IG3DvHE= IG9uZGVyaGFuZA== IOu2hOychA== IMWha29seQ== 5aSp5aSp5Lit5aWW Y3VhbmRv KFN0b3JhZ2U= dGVyaW9ycw== IGNoaWxscw== IHByb3NzaW1v X3NodWZmbGU= Lk1JTlVURQ== INWh1bzVodW71bbVuNaA1aQ= 7J6Q66as 66O4 0YbQuNC0 IHVydWg= c2plZA== INGE0LjQt9C40YfQtdGB0LrQuNGF aWpha2Fu IHNlZ3VlbQ== TG9ja3M= LWVsbGVz 5r2Y IGZvcmw= I2Fh IEFrYQ== IOC5gOC4geC4reC4o+C5jA== IHp2aXJp INW91avWgNW41oLVtA== IEFuYWx5dGljYWw= aWRybw== 2KfYptmG2Kc= 16DXoteo RXhlcmNpc2Vz LG5w IEFVUw== SU5FVA== 56qB5Ye6 IHByw6lzZW50YW50 IOC0juC0n+C1geC0pOC1jeC0pA== IOC0rOC1hg== INGC0Y/RhQ== IHVyc3Byw7xuZ2xpY2g= cmljaHRlcg== IFByb3ZlcmJz IHN6aw== IFdvcmtlZA== IOyXhuyWtA== IHpiaXI= IGFhbnU= IEVyb3Rpc2tl IGx1Y3R1cw== 0LvQuNC80Lg= Y2hhcHBlcg== IE15c2VsZg== 4oCUZXZlbg== IFNob3d0aW1l 44CP77yI IGltcGVkaXQ= 5Li75L2T LmZpcmViYXNlaW8= INio2LHYr9in2LTYqg== QWNhZA== INin2YTYpdix2YfYp9io YXZpcnVz 4YOU4YOY4YOa IFN0ZWxsYXI= IHNvYnJlbQ== b2ZhbmlyYQ== S29tbWVudGFyZQ== IGNvbXBsZXRhcw== IG91dmVydHM= LnRoZW0= IHJpZ2lkaXR5 IOCmj+CmuOCnh+Cmm+Cnhw== INCw0LTQsNC80L3Ri9Kj IOWkmuS5kA== IElsaGE= INeo16TXldeQ IGPDqW4= KGNhdGVnb3JpZXM= IMO6ZGFq 4Ki/4KiX Y2h0dW5n IGNhb3A= dWxla2U= INio2LHZgtix2KfYsQ== INmI2YLZiNi5 IG11dg== 0L3RltGI IFN0YWZmaW5n IFBhbGF2cmE= IFBBUkFNRVRFUlM= IGdhbGx3Y2g= IEF1dGV1cg== IGZyaXZvbA== IHNldHRpbWFuZQ== IGVuY2xhdmU= IG9zdm9q bGVzenQ= INmI2KfYttit2Kk= 15XXkdeZ IFBSRVNJREVOVA== YW1hbQ== 5qm5 4Liq4Li54LiV4Lij IOCwteCxh+Cwsg== LWNoYXZl IHF14bqjbmc= 5LiI5aSr IFBDUA== RHJvcHM= U3VjdXJzYWw= TU9R INC+0YHQstGW INC60q/RgtOZ0YA= bW91c2VlbnRlcg== IERpdmluZw== bsOhdg== INKX05nRgA== ID09PT0= aXNtZXQ= c3RyYWlnaHQ= INC40LTQsNGA IG1uaWVq zqDOsQ== IOCkhuCksuCliw== KCIuIik7Cg== IGJhbHQ= dmVyc2NobHVzcw== IOCkueCkvuCksuCkpA== aW5zcA== X0hFQURFUlM= INC/0YDQuNGF0L7QtNC40YI= xaFrZWdh dXNzaW9ucw== Qm9va2Vk IGZ1ZGdl YmJj IGdyYXNhcw== INCy0LDSodGL0YLRgtCw IOGDmOGDkuGDmOGDleGDlA== IHRhYmxv IFRJRw== IOCmleCmruCmv+Cmtg== IEFqdXN0 IGRldmFz IGFrdGl2aWVydA== INKz0LDQuw== INi12YbYpw== LW1haWxhZHJlcw== LXJlYWRpbmc= IO2DgOyehQ== IGhhaW5iYXQ= IHBvdMWZ 4KSJ4KSk4KWN4KSk4KSw INqB2YQ= IOCmhuCmqw== INWp1aXVrw== QXV0b21hdGljYWxseQ== INeT15DWt9eo Q2FjaGVz IHB1bHNh IFRPVA== 5pyA5paw6K+E6K66 dW1zdW0= IGJpY2g= ZXRvcA== IOCqhuCqquCqow== bXlw IOCkrOCli+CksuClhw== IFJ1aHI= UGlubmVk 2YrZi9in 5pu+6YGT5Lq6 IOC4i+C4t+C5ieC4rQ== IMO8Y3JldA== INKb0L7Sk9Cw0LzQtNGL0ps= IGV5ZWxhc2hlcw== LVBDUg== INmF2KfYr9ix IGluaWw= IG53YW554buL IHN5cmluZ2U= IEF2ZW50 INiz2YrYp9iz2Kk= IHd5cG9zYcW8 X3d3dw== PmQ= LkVtcA== IHPDsm5yYWljaHRl LmZ1dHVyZQ== 6LaK5p2l6LaK IHRoYWly aXp1bmd1bXph INGB0L7QstGA0LXQvNC10L3QvdGL0LU= IGRpY3RhdG9yc2hpcA== KENoYW5nZQ== IGhpa2Vycw== 4LK+4LKC4LKk4LKw INCx0LjQu9C00q/RgNCz05nQvQ== 4YOb4YOn4YOd4YOk INGY0LDQsg== ZWRlbnQ= IGRpc3Byb3BvcnRpb25hdGVseQ== 4LK+4LKm4LON IG5ld2ZvdW5k 54Ot5LmF5LmF57K+5ZOB IEFjY29yZGlvbg== INiu2KjYsdmK IFdlc2Vu 4oCZZW8= IGNvcnRpY2Fs 6KOF5aSH IFdlaXRlcmJpbGR1bmc= VW5uYW1lZA== IFBhY2g= IGNvbGxhYm9yYXRvcg== S2Fuc2Fz INmI2YXYs9iq IGNvbnNjaWVudGlvdXM= INC80LDSm9C+0LzQvtGC0Lg= INiz2YfZhNip fHJlcXVpcmVk cGxvaXQ= Q2FyZ2E= INCz0LDQt9GA0YvQvQ== X3Rha2U= IHNjaGlsZA== IHRpZGVz L2xvdW5nZQ== INC/0LXRgNCy0L7QvdCw0Yc= aW52YWxpZGF0ZQ== LkNyZWF0b3I= IGRlaWxpZ2U= 4oie cmFtaW4= IFdST05H IOCql+CrjeCqsOCqvuCqrg== INWw1aHVtNW41aY= IGthcmRl IMWbcmVk cGFra2Vu 44CRIeOAkA== IM+AzrHPgc6/z4XPg865zqw= 4KeB4Ka34KeN4Kaf IGJyb29t 4KSc4KWN4KSc IOCqrOCqqOCqvuCqteCqteCqvg== 0L/QtdGA0LDRgtC+0YA= IOCkrOCljeCksuClieCklw== 4KeH4Kaw4KeH UXVhcnR6 ZmVsZGVy CXRlc3Rz INGB0YPRgNCz IGN1cmF0ZQ== VUxTRQ== IHNoaWRh dWl0YXJ5 IOydtOyDgeydmA== IHZlbGw= IG9yZWQ= IGFtYWRv X2hkbA== KHN5bmM= INmG2qnYsdiv 772F IFZhbHVhYmxl IG5o4buNcuG7jQ== IEJyb2tlcmFnZQ== 16HXmNef IOCksOCli+Cksg== IGJvbGV0bw== 44CC44GT44Gu 4Ka54Kao IG1hbGFtYW4= IGVnZW50bGlnZW4= 0q/Qs9Kv 77yM5YWo5Zu9 PGFycg== IGJyb2FkY2FzdGVycw== 44CM44GC IOG7jXfhu40= IHdpanM= aWRlbnRpZnk= IG1hZHVyYXM= IOCkleCksOCljeCkruCkmuCkvuCksA== IHBpdGFuanU= IHBhbGlnaWQ= IEVyZ28= IGJhbmNhZGE= IHNtYXJ0eQ== IGRhbXU= xJNqaQ== ZsO2cmRlcg== ZGlzcG9zZWQ= PFVzdWFyaW8= IOGDkuGDmw== IHPDpGw= LXN0YXJz IGdhcm90bw== QU5HTEVT IOCyquCysOCyv+Cytg== IOC0uOC1jeC0teC0vuC0l+C0pA== IGluZ2V2 Z2xlZA== IGdoYQ== IEd1Zw== Vk9D INm+2YjagQ== IGV0aGljYWxseQ== 15nXmdeY16LXqA== IOGDquGDlOGDnOGDouGDoA== INC+0LHRgA== IOCmpOCmvuCmgeCmpuCnh+CmsA== INCX0LXQu9C10L0= IHN5bXB0b21hdGlj IHBpeg== cGVuZXRy INin2YTZhdiz2LE= bGly 0J/Qng== 5Y2n INeS16LXkg== IOCwuOCwv+CwpuCxjeCwpw== IE1haGpvbmc= YXplbG8= IHLDqWFsaXNhdGV1cg== b2JveWU= eWtlcw== 77yf77yB IGNhcm9z IExJUw== YWxhcsSxbsSxbg== IG96Ymls dGVraWo= INep15nXoNeV15k= IGFic3VyZG8= IG3DvMmZbGw= IGhvcHBlZA== INeU15fXqA== INGP0LnRhtCw IGJ1dHRlcnk= IFdvcnNl IEhBTEY= IHRpYXA= 4Kio4KmN4Ki54Ki+4KiC IGF0dGlyZXI= IGFubGVkbmluZw== YWJpbmc= IENvbnZlcnRlZA== IGZldWdpYXQ= IOC0huC0pOC1jeC0rg== b25lc2E= b2doaQ== INGH0YvQvdCw0Lw= PWNlbnRlcg== IHRjaA== IGJlbcO8 IEVtcGZhbmc= L3NwYW4= IHBpY2NvbGk= ZWNvcw== INC70LXRh9C10L3QuNC4 IGlyZWxhbmQ= QnJlZg== 5rCn YWdleHQ= 5pel44Gr INCv0LrRidC+ IFlvbw== IG9obmVoaW4= 5rCR5Li7 IHdvaG5lbg== INCz0L7RgNC+0LTRgdC60L7QuQ== INC+0LrQtQ== IM61zrLOtM6/ INCf0YDQvtCy IGVwbw== 1bjWgtWi IEJVRg== IOCkieCkqOCkruClh+Ckgg== IGZvdMOzZ3JhZm8= IE3DqWRpY28= IHRpZGVy ZmZpbg== X3Zpc2liaWxpdHk= INmF2LXYt9mB IFRodW5kZXJiaXJk IOCyieCysw== IEJlbGxv IGvDvG5zdA== IGNvbXBldMOqbmNpYXM= INmK2LTYudix INin2YTYqNmI2YQ= 4Liq4Lin4LiZ IGZzY2FuZg== w61kaW9z IOyYiOuwqQ== INqv2LLbjNmG2Yc= TG92ZWQ= IGlnYmVzaQ== INCh0L7RhA== IOCkruClgeCkuOCljeCksuCkv+Ckrg== IteV 8J+SlQ== 15nXnteV150= LmRlbQ== d2FybmE= Y3Jp INiq2LXYqNit J2VmZmV0 IGhhbmRsZWJhcnM= IERpcmV0b3I= ZGl0Y2g= 2qnYsdin IOS8l+mRqw== 2LHYqNmK2YY= IGdlcmVhbA== L29jdGV0 IGNvcm91dGluZQ== IGtpbmRqZQ== LUtleQ== INin2YTYqtmG2YHZitiw2Yo= IG1pZXNpxJk= 44K344Oq44O844K6 4Liy4Lij4Li1 b3JhZG9z IGJyem8= 2YrZhdmK2YY= IHZlcndlcmtpbmc= IOCkreCkrw== Y3JlZQ== IE5hdWdodHk= IElTQw== 4Lix4LiI4LiI 0LXQu9C00LU= IGNoYWxldXJldXg= IHRpZXRv IEdlcsOkdGVu INGA05nRhQ== IGt0b3LDrQ== w4FyZWE= INis2YTZiNqv24zYsduM INCw0YLQsNC6 15HXqNeZ16c= w63FoQ== X1JQQw== IGFiYXo= aGlwc3Rlcg== IGFuc2F0dGU= IGZvcmV0 a29tZm9ydA== IERpc3BvbmlibGU= IEZPUkVJR04= zrTOrA== IHNlbnNpdGl2 Wmo= 4YOQ4YOo4YOQ4YOj4YOa IEFkdmlzZXI= X3NlY3VyZQ== KGFsYnVt IGZvcmNpYmx5 IEFkc2Vuc2U= IEF1dGhlbnRpY2F0ZQ== IOCyteCziOCysA== XV1d 4oiZ IGNvbmZpcm1hw6fDo28= IGhpZXJ6dQ== KFN5bWJvbA== IE5hZGlh IG1hcmtp IOW6lw== 5aSE5YiG IGl0bG9n IHNodWdodWxp 5aix5LmQ5bmz5Y+w5Li7566h RG9ybQ== KCl9LAo= IG3hu7k= INmC2YjZhdmK IGZpbGk= IGdlYmV1cnRlbmlzc2Vu IGNvbnNpZGVyZQ== IGRlc2N1YnJl b21vZA== 2aw= IEVpbmxhZHVuZw== VElO IGdhbmhvcw== Lmd2 IGRpc3RyaWs= TWFzYw== LWZlZWQ= w6dpbGlnaQ== IG5ueW8= INC80q/RiA== IENvbmNlbGxv IOCkrOCkv+CksuCljeCkleClgeCksg== X3Bhcw== 4LOD4LK5 IHdlaWNo YWNvcg== 4YOd4YOR4YOQ4YOW4YOU Y2FyZWVy X3hsaW0= INGF0L7Rh9Cw IHNhbHVkYWJsZXM= IFNvYmFsZA== 4K+N4K6V4K+B IHJ1bmF3YXk= IGNpdmlsaXplZA== QU5USQ== IGhhdHRh 2YjYp9mE24w= w5FB IG1tb2w= YmFuZQ== aW5udQ== IGdsYXVidA== IGPhuqV1 IFdhbm5hbg== INWs1aHVtdW2 INGB0LDQsdCw0ps= YXRhd2Fn IGNvbW1lcmNpYWxpemF0aW9u IGt1ZWxl aGlr INC/0YDQvtGI0LvQvg== IHNldWxlcw== X3RyYWl0 b2J5bA== aWlpaQ== c2hpcnRz LUlW 4KWH4KSw4KWA cG9sYXI= xJ9peg== KGZyaWVuZA== IGNyaXA= IOWkqeWkqeS4reW9qeelqOS4jeiDveS5sA== IGFwcHJlY2lhdGluZw== QG4= IHNlbnNvcmVz 4Ka+4Kae4KeN4Kaa aW5zdGFudGlhdGU= X252 dWxuZXJhYmlsaXR5 xaVhxb4= IHByb3NlY3V0ZQ== w6lpbg== IHNjcmFwYm9vaw== 4oCZaW5ub3ZhdGlvbg== IGZhaWdvZmll IERPQg== dnJpamU= 4LSZ4LWN4LSZ4LS/ 0LjRgtC10LvRjNC90L7QvA== IG1hcnF1ZWU= IGNvbXBsYWlucw== INW21bfVodW21aHVr9W41oLVtA== IHBhcGly XV0NCg== UsOpc3Vtw6k= INio2KfZhNix2YrYp9i2 IOW8tQ== INin2YTYudmF2YrZhA== YWRkb25z IERhbWlhbg== IOC0uOC0qOC1jeC0pA== IG1vdG9yd2F5 4K6w4K6/4K6y4K+N IHVwcHNr IGluZHVzdHJpYWlz IGltcHJlZ24= SGVuY2U= IHdhc20= z4TOrs68zrHPhM6x IHVpbGU= IGVpc2Vy IGhldXR6dXRhZ2U= INGA0YPRgdC40LnTmQ== b2Nhbm5hYmlubw== IOCkluClgeCksuClhw== CQkJICAgICAgICAgICAgICAg IHBva2E= Lnh4eA== IHJlZ2lvbmU= IOCyruCyn+CzjeCynw== IEJveGVy YWRkaXRpb24= IOCmuOCmrOCmmuCnh+Cnn+Cnhw== Q2hlcXVl INGI0L4= VG9wbw== ZGF0YXRhYmxl INC30LjQtA== IHNjaGF1dA== IGjhu6U= IHZlc3o= IGFkaGFydA== INGB0LvQvtCy0L3Qvg== KGF1dGhlbnRpY2F0aW9u IOuFuOuPmQ== IENhbGFicmlh YXbkuI3ljaHlhY3otLnmkq3mlL4= IHdjemXFm25pZWo= IGdyZW5hZGU= IEdCUg== INqv2LPYqg== IGl0aw== IOCkh+CksuClh+CkleCljeCkn+CljeCksA== IHJhZHk= KGV4Y2hhbmdl IGFlcm9keW5hbWlj IGt1bw== YWRlbWlj eWx5 IOa7oeWggg== UHJpdmlsZWdlcw== 0q3QsNC6 5oC75L2T LnNoYWRlcg== IHBhcmVudCdz 0LTQsNGA0LA= IGRuw60= IEZlaWVydA== IGdyYXBoaQ== IGF1Z2U= 77+8 IExpc3A= YXBhdGFsaw== X3Jvb21z IOCmhuCmmg== IEFyYml0cmF0aW9u IGx1eHVyaQ== INC40YDQsA== IEtvbnplbnRy IENSUw== YW1hbGFtYQ== IFByb3Rvbg== QXBwYXJ0ZW1lbnQ= IOCmquCmvuCmuQ== IGFsaXF1ZXQ= IGVrc2lzdGVy 4KeA4Kam IGFsYXBqw6Fu TWVkaWNhdGlvbg== ZG9uYWxk z4HOs86szr0= 4YOU4YOc4YOY4YOa4YOY IGF0cmFr IFN1cHByZXNzYW50 IMOhdWRpbw== IGRpcGVyY2F5YQ== 5YWs572R IG3Em3M= INC/0YDQuNGH0LjQvdCw0Lw= a2lsbGVy INCx0LXQudKX0LjSow== X3Jvcw== IEhhaXRpYW4= LVByb2R1 IOe+juWciw== dG9x IGtvbGVt IGRldGVybWluYcOnw6Nv IGthcnRv INC00L7RgdGC0YPQv9C90Ys= IOCqreCqvuCqsOCqpOCqruCqvuCqgg== INC80YPRgdGD0LvQvNCw0L0= ZXRzaw== INmF2KfZg9mK2YbYqQ== IOCkpOCkgQ== aW11cg== KCk9PSI= IOCwuOCwguCwluCxjeCwrw== IGRldGVjdGFibGU= 4KS/4KSu4KS+4KSX IOyngOuPhA== IGVyaGU= cmV0d2VldGVk IGNvbnN0aXR1aQ== IHR1cmlzdGE= KCIiKTs= ICcpDQo= 0LXRgdGC0ZY= IGNob2NvbGFkZQ== fSE= 4KiV4KmA INGA0LjRgdC60LA= UU9iamVjdA== INis2LHZhQ== IG1lc21lcml6aW5n KS4uLgoK IOC0muC0sOC0v+C0pOC1jeC0sA== 4LmA4LiK4Li14Lii4LiH 0LvQsNGC0YM= LeG7jQ== W109ew== IOCkhuCkiOCkquClgA== IG1ldWJlbHM= IG5vdGlm IGJhc2llcnQ= IEJhbmdvcg== IE7Emw== IOCyheCyqOCzjeCyqA== IHRodcOq IHlhcMSx ZmFseg== IERvY3VtZW50bw== 44CB5Ymv INC/0YDQuNC90LjQvA== 0YLSr9GB0YLRltC6 4LmA4LiC4LmJ4Liy4Liq IFB1cmNoYXNlZA== INGC06nRgNOp0Ls= IENhbXBlcg== INec157XoQ== INi12KfYrQ== IEVMRg== IE1hcmluZXJz IHN0YXJ0bGVk IHJlbGVudGxlc3NseQ== IOeGig== U05T LUV1cm8= 0L3QsNC60Lg= Py4u IENsYXA= Oko= IHZhbGFibGU= PSgt INiw2KfYqtmH IGZhaWxp 0YLQtdGA0LA= INC90LDQv9GA0LDQstC70LXQvdC40LU= 5pys6YeR IFNlY3JldGFyaW8= INOp0LrSr9C7 IOCqheCqreCqv+CqqOCrhw== 0YPQvNC10L3RgtGL IHBhcnRpaw== SW5jbHVz w612aW8= 4LmC4LiK 4LKk4LK/4LKv 2K7ZiNin2YfYrw== IEZpbG1lcw== IFl1c3Vm 44G+44GB IG1lbGhvcmlhcw== IHN0b3JpY28= cmljaG1lbnQ= IGVudHJldA== INis2YXYudmK2Kk= 2YbYr9ix2YrYqQ== LUNsYXVkZQ== IGVsw6Q= 0L/RgNC+0YHRgg== U2xpY2Vz 4Kqq4KqV4Kqh 15vXoNeV158= IM6RzrjOrg== OnN0YXJ0 bWVo IGNyYWNrZXI= 5Zyo57q/57K+5ZOB6KeG6aKR IGfDqm4= INmK2LnYt9mK IFNjaHVsdGVy bGlzdGFz UVJDb2Rl SUZVTA== INC00L7Rh9GM X3NpZ251cA== IFN1bm5p IOGDo+GDrg== Lmh5cGVy IHNvbGlkZXM= IOC0h+C0guC0l+C1jeC0sg== IEJpc2E= IOCysOCyvuCyt+CzjeCyn+CzjeCysOCzgOCyrw== 44K544K/44OD44OV aWNvbnQ= TWlsbGlvbnM= YnVsYXM= eXpkYQ== 44OG44O844Oe 4LSx4LSj xbg= WlU= 4Kq+4Kqo4KuN4Kq4 xLFzxLF5bGE= IGludGVydmp1 77yJLA== R3Jhdw== IGNhdXNhZGE= IGNvbnZleW9ycw== 0YbQuNGP0YLQsA== IHJvdWxhbnQ= IOCwquCwsOCxgeCwlw== IEJvZ2E= KGlucGxhY2U= U0VNQg== IOC4o+C4sOC4muC4mg== IGFzc3VyaW5n YWNoYWVs IHTDoW1vZ2F0 IGVsZWl0b3I= INW61aHVv9Wl1oDVodWm1bTVqw== IHVsaW0= 15XXqNeQ IMW+aXZsamVuamU= aWdpYQ== IEdlcnM= INiq2LXYp9mI24zYsQ== TG9hbnM= INGF0YPRgdGD0YE= 4Kyb aXphY2ph UHVlcnRv 44CB5a6J5YWo IDsKLy8= LmV1bGVy LlZlaGljbGU= IGlzaXQ= IEJyaXRhbm5pY2E= X3BlcmY= IGNvbm5lY3RpdmU= IG5pdG9yaW5hYQ== IE1VTA== IikrIg== ZW1ibw== IFJlY2s= IFJlZGVz IEtvbnRleHQ= aHBw CXJlcGx5 IGdsYXVjb21h aXNzYW5p INmI2LHagduQ 2LXYsdmK Z2FyaA== b3ZhbsO9Y2g= ZGV0ZXJt INCw0pk= IOCwpOCwrw== IH0pDQoNCg== 4LSV4LWN4LSV4LWB4LSo4LWN4LSo IGJhdG9u 0LDSm9OZ0LXQuA== IOGDlOGDoOGDl+GDm+GDkOGDnOGDlOGDl+GDoQ== IyMjIwo= SMOkcg== INCc0LXQvA== LUNPTg== IFJlc3VycmVjdGlvbg== INCa0YA= IGxsZWdhcsOh IEV1cm9wZSdz IE1lbG8= IGNoZXJjaGVudA== IHByYXdh IGNsdXN0ZXJlZA== IOCmuOCmvuCmleCnjeCmtw== IGxvdW5naW5n INWl1oDVr9aA1bbVpdaA1as= INGB0L7RgNGC0LA= KGZsYXQ= IGJsb2NrYWRl INGF06nQs9C2 IOC5geC4mQ== IGtydWlz INmE2YXYsw== 4LSq4LWN4LSq4LWG4LSf4LWB4LSk4LWN4LSk4LS/4LSv IG9keg== IOS5heS5heeDrQ== aGF2YQ== IEZsZXNo IGzhu4U= IGRpbHV0ZQ== IHVuZm9y IEF0dGVtcHRz ZGVjbHR5cGU= YW1iaXNh IGdlZGVlbHQ= IG1hbmdhcw== IGtvamVn IGphdW5lcw== IEpOSQ== 157XoteY IG1hc2N1bGlu cXFhYXQ= IHBsbA== YWxwaGFiZXQ= IOCujuCuqeCvjeCuquCupOCviA== IGdlcmluZ2U= INiz2YjYsduM IEluc3BpcmF0aW9ucw== YXZpZXN0 IHJlbGF0YQ== IG5hY2s= IHRlamlkb3M= IGluZGlrYXRvcg== ZG9w IFNjaHdhbno= b3dhbmk= IHRlcmFzYQ== 2ZHZiQ== IEZNSQ== IGt1c2hv IOC0quC0tA== IOaBkuS4gA== IMW+ZW5l IHNrYg== YWR3eQ== IGFnZW5jaWFz 4K+B4K6V4K+N4K6V4K6z4K+N IGludGVyc2VjdHM= IGVtb3o= IHJveWF1bWU= ICgpLAo= IOaoqg== QkND IGVvZg== OmdyaWQ= 4LKX4LK+4LKX4LK/ 4LS+4LSv4LWN UHJldA== IGluY3Jlw61ibGVz dWx0bw== IG92ZXJsaWpkZW4= KHJlbGF0aXZl IGJicQ== IGFjw7pzdA== OmZpbGU= IE1vcmFu INGC0LDRgNC4 dWVudGVz IHZvcmdlbm9tbWVu IGdlZ2FyYW5kZQ== IHJlZnVyYmlzaG1lbnQ= RmljaGE= 0ZvRgw== IERPSg== X0NJVFk= 0LTTow== INii2LQ= 0LrRg9C90LDQvdC00LA= IGNhbmRv IGl6cXVpZXJkbw== INit24w= IGFwYXJhdA== IGhhbXN0ZXI= IOCqm+Cri+CqoQ== YW1waGV0YW1pbmU= IOCmheCmuOCnjeCmpA== aXRlcmE= IOS6mua0suaXpemfqQ== KEh0bWw= 6K6k6K+G IEludmlzYWxpZ24= IGZhc2lsaXRhcw== 2LfZiNix2Kk= 4YCQ4YCx4YCs4YC3 IOC0leC0peC0vuC0quC0vuC0pOC1jeC0sA== IGxvY2FsaXNhdGlvbg== INGD0LHRgNCw0YLRjA== b21zbml0dA== IOCyruCyvuCyoeCyv+CyleCziuCyguCyoQ== INGI0LDQsNGA0LQ= INC/0YDQuNCx0YvQu9C4 IOyYpOuluA== IGJwbQ== 5YuV55Wr IGx1bmNoZW9u INC60LjRgtC+0LE= LmV4ZXJjaXNl J2VmZmVjdA== IGJlendhYXI= b3Zhbmlh IOCkm+Cli+ClnA== YWN5am5l b2dsaW8= 5YKF IHF1YWtl IHphdGE= IHJlbXVuZXJhdGlvbg== IG9uZGVyem9la2Vycw== X0lNRVRIT0Q= IGRpc2FncmVlbWVudHM= IGhhbmRp SG0= QWNjZXB0YW5jZQ== IGVudHdpY2tlbHRl IG5kaW0= IGRvY3RyaW5h 0YPRgNGL0YE= IOCkreCkvuCkteCkqOCkvg== INC60L7QvNC/0LDQvdC40LXQuQ== IGhvbW9maWxl 0LzRi9C5 IGl6Z2xlZA== cW1s PGls IG5vdmVsbGE= 4LiV4Lit4Lia IHRoaeG7h3U= IGJlaGVyZW4= IM+AzrvOtc+F IGVzaWdlbnpl 4K+K4K6f IGNyb3Q= INmF2LnYqtio2LE= 7Jik6riw aXRpZXJz VGhpcnR5 IHJhbm8= IOC0oeC1jeC0sA== IHJlY29tYmluYW50 X0VTVA== 1aHVttW3 W3Jlc3VsdA== Q2hyaXN0aW5l 5LiN5Y2h5peg56CB INC30LDRh9Cw0YHRgg== INC30LDRhdC+0YI= 1aHVttWk1aHVrw== 4YCQ4YC94YCA4YC6 IGRpYWxvZ3M= X0FJ IOW4gg== bGlzaQ== LWhpZ2hsaWdodA== IHN0dW4= xJFlbmE= IGFkb3B0YXI= IHdhbmVt IGhhbGRl IGJpZ2ludA== IEFkdQ== IHByb2Zlc2pvbmFs IFdvbmRlcnNoYXJl IG11cmRlcmluZw== QVNISU9O IGluc3RhbGFkYQ== IGxhYm9yYXTDs3Jpbw== YWlycG9ydA== KExvZ2dlcg== IGFhbmdldmVu IEJhaGthbg== Y3V0dGE= w7N2aWxlcw== IHBpbGFyZXM= 0YHQtdC90LTRlg== IOC0nOC0v+C0suC1jeC0suC0r+C0v+C0suC1hg== IOyYpOuemA== QURPUkVT IG1vdGl2YXRpZQ== LkVNQUlM JHRlbXA= 5qyn576O5pel6Z+p ZXJtcw== zrvPic+Dzrc= IGhvb2Zkc3RhZA== QcOx IHNwb2tvag== L2FjY291bnRz IGNyYXRlcw== IFZlcnBmbGljaHQ= IGZhbnTDoXN0aWNh IGZyYWNhc28= INin2YTYsdin2KjYudip IHZhY3VuYXM= YnJhdGVz UFJJTUFSWQ== IGNvbmZvcm1z zrrPhQ== INC/0LvQsNC90Ys= YWNk IMSj IHJvaGU= IGNvbnNlcnZpbmc= 2Kjavg== 0YLQuNC70Lg= INit24zYsQ== 4K6/4K6v4K+H IOyYpOulmA== IM+Azr/Pgw== IOCquOCqguCqquCqsOCrjeCqlQ== IOuvvOyjvA== INC60LXQvdOZ OndlYg== IHN1YnRlcnI= cHJvY2Vzc29ycw== dGVuc29yZmxvdw== IGNvbmZpcm1vdQ== SG9yYXM= 1aHVo9Wh1bA= IEZvcm1hdHRpbmc= X3NpbWlsYXJpdHk= KE1vdmll IGFzc2ltaWxhdGlvbg== 6IO95Lmw5ZCX IM+Azr/PhM6t IER1YXJ0ZQ== IGt1cnVsdcWf U1RBTkRBUkQ= IEhFUk8= IGJsaW5kZWQ= LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= CVNv IHNvbmlkb3M= IOyeiOydjA== IEpTUA== IFRjeA== IENhc3RlbG8= IExpbmtpbmc= IGVucXVpcmU= YW1hbm8= RmVldA== V2FsdGVy INiz2YjYoQ== aG9vdGVy IEZhYmlhbg== dW5nZWxl 2YjZhdiq2LE= IOCuj+CuseCvjeCuquCun+CvjeCunw== IGNyZWF0aXZv T0dB IEFwcm8= ZW5kaWRvcw== Y3Jpcw== IEZBUk0= IEdvbGRjbw== LHsK IE7Dsw== IG5hdHVz IM+Az4HPjM6zz4HOsc68zrzOsQ== UGxhbm8= 4Z624Z6Y4Z694Z6Z dGhhd2k= 4KSo4KS/4KSV IOCwqOCwv+CwsOCxjeCwruCwvuCwpA== aGV0c2VuZw== 5o2u5LqG6Kej IGNvbnN0YW1tZW50 ZXfEoQ== IEF0YXJp INqq2Kc= IGfDtnN0ZXJt 5Yqb5bqm w6lyYWxlbWVudA== INGF0LDQu9GL0pvQsNGA0LDQu9GL0ps= INGD0LTQvtCy0L7Qu9GM0YHRgtCy0LjQtdC8 LXRvbw== IEthcnRvZmY= IM6zzr3Pjg== 4oCZYXk= IOCmuOCmleCnjeCmt+Cmrg== IHBvbnU= IHNob3ZlZA== INCz0LXQutGC IGxlZmF0c2hlbmc= IOCuqOCun+CuteCunw== INGB0YLRgNCw0YLQtdCz0LjQuA== QkVD IGludGVyZXNzZXI= IEpNUw== 4KS24KWN4KSw4KWH4KS34KWN4KSg 5LqS5Yqo IFFVRVNUSU9OUw== IG1hcnRz IEFwcHJlY2lhdGlvbg== TGluZWpvaW4= IOuTseyepQ== IE1pbGVhZ2U= IFR1bmE= IGVzY3JldmU= Rml6eg== IHV5YQ== IOCqhuCqguCqpA== 4Kav4Ka84KeH4Kaw IHJlY29yZMOz IG9samU= IHNpdGVyZQ== eW1tZW4= IGRpYXBocmFnbQ== IGV0ZGl5aQ== INeT15XXnNeo ICcpJw== IENhc3NpZHk= 4Ka+4Kao4KeN4Kah dWxhZG9z 77yJCgoK IEJlYXVtb250 0YzRi9GA IHpodg== IERBU0g= 0YvQstCw0LXRgg== IGhvaWQ= IGVudGVydGFpbmVycw== IFRleHRv YWR2aWVz IGtlemVsw6lz IHBhcGlsbA== INi52KjYp9ix2Ko= INin2YTZiNir INCy0LDQttC90YvRhQ== INij2K3Yr9in2Ks= LWJ1ZGdldA== INeY15XXmA== LnNjYWxhcg== INix2LPZhduM IFdheGFhbg== QFw= zrrPjM+D IGxldmk= INC/0L7QutCw0LfQsNGC0LXQu9GM IGJvcQ== 4Z6J4Z+S4Z6H IHBlcmln IGFmd2lqaw== IFBhcm1h ZXRlbQ== IHJlZ2VsZ2V2aW5n 7J2066m0 IGF1c2dlc3Byb2NoZW4= KCcuJyk7Cg== X3dyaXR0ZW4= KHRvZ2dsZQ== IGF1bWVudGFkbw== IGpvcm5haXM= 5bCk54mp INC90LDQvNC+0Y/QvQ== 2YjYr9ix V2hpdA== IGxpdmVsbGk= LlBORw== IElnbml0ZQ== IElJUw== YWplbg== IGxldHRlbg== IHNob3BwZW4= IOCkh+CkpOCkqOClhw== bWFya3Vw IGJzcA== IHByb21lc3Nh IOCyquCzjeCysOCytuCzjeCyqA== IFNhYmFo IENvbcOpcmNpbw== YW1hbnpp IEF1c2JhdQ== LkR0bw== 0YbQuNC9 IG11bHRhag== IGhpc3Rvcmlp IG9yYWxl INi52KfZhNmF2Yo= 0JXQoQ== IGxpZXN0 IGFmem9uZGVy IGNvbXBhY3Rv IOCkrOClgOCkruCkvuCksOClgA== INC+0L/RhtC4 INGB0LrQu9Cw0LTRiw== IHVzYW1vcw== INi12YHYsQ== X0VtYWls IOuwmOuTnOyLnA== 15nXpNeV16k= IOCkl+ClgeCknOCksOCkvuCkpA== IM60zrfOvM+M IFNocmluZQ== LmNsYWlt INGB0LvQvtGC IGFrxIE= INiu2YjYp9mH24zYrw== d2lyaXRzaWR3YQ== dXRpbnV0 IHLDqXRybw== CWl0ZXI= IFRBTEs= INeU15vXqA== emllbXk= INGC0YPRgw== 4Lie4Lij4LmJ4Lit4Lih IFNwYXJyb3c= b3JpdW0= IGthaWtrZQ== INmI2KfYrg== INC30YDQsNCx0ZbRhtGM INC205k= LU1pdA== 4YOh4YOY IHByb2R1a3TDs3c= VUlD IG7DocOg LWdyb3d0aA== IHRyb2xsaW5n bmVxYXJwb3E= X21hcHBlcg== RGVsaW1pdGVk INC40L3RgtC10LvQu9C10LrRgtGD Y2VyaWFz IE5vdXI= 5YWN6LS55peg56CB 2KjYp9i52Kk= CWNlbnRlcg== IFRlZW5hZ2U= IEVudHdpY2tsdW5nZW4= IHRyYW5zdA== dXNjaGU= IGludGVyb3BlcmFiaWxpdHk= IOC5gOC4quC4t+C5ieC4rQ== IERhcGhuZQ== IEZpbmVzdA== IFNpbHZlcmFkbw== TGF1bmRyeQ== IG/Enw== IExpc8Okw6Q= IEhhcmRpbmc= INC30YPRgNCw0LM= IGV4cGxvcmF0b3J5 IHdlZXJzdGFuZA== IG5ld3Nyb29t 4LC+4LCy4LGA4LC14LGB4LCh4LGN IGNvcmlhbmRlcg== IOCyquCzjeCysOCyrg== IEZvcm1lbA== IGNvbXJhZGVz UHJhaXNl 4KeN4Kav4Ka+4Ka4 LWxhdW5jaA== J8Opdm9sdXRpb24= INin2YTZg9i02YE= aXBwYWE= INi32YHZhA== 4Lij4Lix4LmI4LiH4LmA4Lio IFdpbGF5YQ== IGF0ZW50b3M= LnJkZg== ZGVzaWduYXRpb24= X1VTRUQ= W2lw IGNyaXRpY2l6aW5n IGxlZ2l0aW1hdGVseQ== IOWeiw== IHN1Y2N1bGVudA== emVyYW5v 64GE IGd1w6ly INC/0YDQvtGF0L7QtNGP0YI= IENBTExCQUNL IHJlc3NlbWJs IHVuY29udHJvbGxlZA== LWZsb2F0aW5n IEF1Y3Rpb25z IHByZWRpY3RvcnM= IHTDs2M= IOCujuCun+CvgeCupOCvjeCupA== INC80YvQvdC00LDQuQ== IGdsYXR0 YXR1cmJhdGU= IGRpZmZlcmVk IHBhbmVz INC40LzRgNOv0Lc= INin2K/YqA== RklFTERT c2hvY2s= 2KfYudmK IHdyb25nZG9pbmc= 4KSq4KWN4KSw4KSm4KWH4KS2 IGRlZ2VsaWpr IGZ1bmNz INeQ15I= L2xvY2F0aW9u KGdz IG9nbGVk 0Y/Qu9C+ Q2hleg== IGZlZGU= LW91bmNl IHJoeXc= INmE2YLYqA== 0L7RhdC+0LbQuNC1 IHRyenk= IHZlb21h PW8= IGJyb29r IE9DSQ== INiq2KjYr9uM2YTbjA== IOyViOyglQ== IGNyYWNrZG93bg== dHdlZXRz 5Y+q5pyJ57K+5ZOB aXBwYWdl IHZlcnNvcw== d2lqemU= IGtpxZ9pbGVy IGRlb2FyZWNl IHRpbGZyZWQ= INin2YTZhdmG2KfZgdiz IHByb3BlbnNpdHk= ISEpCg== T0xWRQ== INGN0YHQtdC/ 4LK/4LKu4LK+4LKo X3N1Ym1pc3Npb24= IEhvYw== INCy0YvQv9C+0LvQvdC10L3QuNC1 IHNqZWQ= IOCwteCxhuCwguCwlQ== 2LHZiNio2KfYqg== YsOpcw== IOybkO2VmOuKlA== IFN3aXRjaGluZw== IGV4cGVyaW1lbnRlZA== dW9qYQ== SU9EZXZpY2U= INCb0YPRh9GI0LU= IHByenlrxYJhZA== IOuqqOyKteydhA== IOmHjeW6huaXtuaXtuW9qeW9qQ== IFBleXRvbg== IOCkluClh+CkpOClgA== IGNvbmZlY2Npb24= KHNoZWxs INC40LPRgNC+0LLRi9GF INeU15LXldej INC+0LHRidC40Lk= X2xhbmd1YWdlcw== ZW1hc2s= IGhpdHRlcnM= a2FtZXJh IGFjcmVhZ2U= IGBf PERldmljZQ== xI1rb20= IOCypuCzh+CyteCyuOCzjeCypQ== IHBvdHJlYmU= IHNvbnJhc8Sx IGLDpHN0 IGpvcm5hbGlzdGFz dXNzaW5n IGxhYm9yaXM= IFJlY29uc3RydWN0aW9u 4Kq+4Kqj4Kq+ IMSwbnNhbg== IM+HzrHPgc6xzrrPhM63z4HOuc+D L01T YXJjenk= IFBQTw== aWxsdXVubmlpdA== VGl0ZWw= IHVjaGVs IHDDqXRyb2xl INi52KfYrA== IGNhYWZpbWE= 4Kq+4Kqz4KuL INeU157Xqdeq IFZBUklBQkxFUw== xaFvYW50xaFv INW+1aXWgNWh1bA= LWF3YXJlbmVzcw== IHBvc2Vlbg== INC80LjRgdGC IERldXRzY2htYXJr IOCwruCxgOCwoeCwv+Cwr+CwvuCwsuCxiw== 25XYqtmD IGVzdGFkdWFpcw== IHZlcnR1 SW52ZXN0b3I= bW1lcnQ= IHN1cGVydmlzaW5n CVJlY3Q= IjpbXSwNCg== YXJuZXJtaWs= QlVSRw== IE/DuQ== INil2YTZg9iq2LE= ZGRhbmdvcw== IiR7 IFdlaHI= IHByw61wYWRl INCh0L7QvdGL0LzQtdC9 IGludWlhcWF0aWdp IOWMl+S6rOi1m+i9puaKleazqA== INCc0JLQlA== IHPDqXBhcmF0aW9u SW50ZXJlc3RpbmdseQ== INCU0J4= 0LjQvdCw0Lk= c2V0enQ= IHByYXhpcw== INCw0YDQvNC40Lg= Y2Nk 0YDQuNGB0YLQsA== 4LKV4LON4LKk4LK/ IGfDog== IFJlZ2xhbWVudG8= RGV0cm9pdA== IEtlbmRyaWNr IOCmpuCnh+CmluCmvw== 5a6Y572R55m75b2V IGjDvGvDvA== RG9zZQ== dnVyYQ== IFRJbnQ= IEtocg== INCy0LDRgg== LmNyZWF0aW9u INmC2YTZitmE2Kk= IG1nYmFud2U= IGls4buN 0LXQvdC30Lg= YmZk 77yM5Lya IGRpdmVydGVk Y3Jpc3Rv INGB0YLQtdGA b3NwZWxz KF8oJw== LmNoZWNrb3V0 IOyggOuKlA== 57qM IOCqrOCqv+Cqsg== KFNlY3VyaXR5 dXNhbGVtYQ== IOaJjg== IENUUw== IHJlZnJpZ2VyYXRlZA== IOCmmOCnsA== PT8iLA== IHJlZmxlY3Rvcg== Y29udGludW91cw== IGdlcGxhbmQ= 4KSk4KS/4KS54KS+4KS4 IGJhxZ9sYW4= 4Lig4Liy4Lie4Lix4LiZ4LiY4LmM IHByZW9jdXBhZG8= IHVudW0= c3TEgQ== INC00LDSvdCw IERldmU= IE5vdmk= IGdyw6k= 5YWz6IGU YXdlZA== IGVsbGlwdGljYWw= IGtyYXM= INeR15DWt9en15XXntei158= a2Vw 4Kq14KuN4Kqv IGV5ZXdpdG5lc3M= INin2YTYr9ix2KfYs9mK YWJlZQ== INC+0LPRgNCw0L3QuNGH0LXQvdC40Y8= IE9ydGFsYW1h IGVzdGFiZWxlY2U= IOaIkOmDvQ== IHNhcmlsaW5n IHN0cmFwcGVk INmE2KrYuQ== IHF1ZWxjb24= 0J/QvtC3 INWA1aHVtdWh1b3Vv9Wh1bbVqA== KXZhcg== bHRm IH0pOg== INC30L3QsNC5 IEjhuqNp LkhleA== IG9iZG9iw60= cGhhbQ== W21vZHVsZQ== IHpldHRl 5b2p56Wo5aix5LmQ5rOo5YaM IGRlc2Vhbg== IGhhYmlh IHZpc3Nlbg== INCf0LvQsNC9 IHJlc29sdmV1 ImRpc3BsYXk= 4KWN4KSv4KS+4KSV INep16E= ZWxlcmluZGU= 5LiJ56CB b25vbWllcw== IEdFTA== YW5mYW4= bcO8cg== IHZvb3JiZXJlaWQ= IGVtcGlleg== INmK2KzYrw== IM+AzrXPgc6vz4DOv8+F IOCkuOClguCksOCljeCkrw== IENsaXF1ZXo= IOOCrA== bmVpZGVy 5aix5LmQ5bmz5Y+w5byA5oi3 IE9ueQ== IE1hYWFyaQ== IGF1ZnJlZw== IOCqmuCrgeCqlQ== IFRZUE8= d2Vpc3Q= IOCkieCkpuCljeCkpw== 4K+B4K6u4K6+4K6p cm9lcGVu INGB0YHRi9C70LrQsA== IOCuruCun+CvjeCun+CvgeCuruCvjQ== IHZhZHk= IG9uZGVyem9jaHQ= 4Kq/4Kqv4Kqw RW50cmVwcmlzZQ== IGhhc2htYXA= 0pPQvtC90Lg= IFdpbGtpbnNvbg== 44CA5pys L3JpZ2h0 INC/0YDRi9C5 LiJf IGhvcm1vbmE= aGViYg== Um9tYW5z IOCkruClgeCkpuCkvg== IOCkuOCljeCkn+CljeCksA== IGFldA== 44CA5LiJ wrTjg7s= IGtleWVk IGFuaW3DqQ== IFBhdHRp X3NhbXBsaW5n a3g= YXJkaWdl 0LjRgNGD0Y8= IGFyZ2VudGlub3M= IMO6ZA== aHVudGVy IERhbGth 1aHVttW11bjWgtWp IOCkh+CkguCkuOCljeCknw== X0lNQUdFUw== xI1uw71jaA== IHNlcmlm c2hpbQ== Lik6 IEdyaWVjaGVu IHNoZWVu LnRhZ2V4dA== Q2FkYXN0cmFy IGxlZWRhaGF5 INC60LDQvNGB0YvQtw== IFNoZW1hbGU= 4YC74YCW4YCF4YC5 RHJvcGJveA== LmJpbGxpbmc= 0LLQuNC3 IOCkoOCkvuCklQ== IG1lbWJyaQ== b29kdQ== YW55aXNh bHVy INiw24E= IEFmdXJpa2E= IHNleHVlbHM= IHBvZHBpcw== IOCyn+Czhg== IGtlcmFqYWFu YmVyYXM= PXNlc3Npb24= IOC4q+C4meC5ieC4sg== IEJ1bmc= IEp1bWF0 X2RlbnNl INqJ2YTbkA== 0YPRidC40Lk= IOC0ueC1hg== OykK IEpva2U= INeU16HXqg== IOCkleCksOClh+Ckl+ClgA== IOCwquCxjeCwsOCwtQ== 44CB5pel5pys IEF2ZXI= w6R2w6TDpA== UExJ IEZpdmVycg== aWx5ZW4= IOGDp+GDneGDleGDlOGDmuGDk+GDpg== IHZpb2xlbmNlcw== YW1pc2VzdGE= IGhhYmxhZG8= IOCkqOCkv+CksOClgA== IEFTSUM= IOCwteCwvuCwsOCwv+CwleCwvw== YWthyrtp e31c IC0tPg0KDQo= IG1vbGVzdGll IG3DtcO1 5LqL5Yqh 0YLQtdGA0LTRltKj IHlhbGl5 IHJldmVydGVk IGNhcGFjaXRlaXQ= d2Vkc3RyaWpk IHZzZWJ1amU= IOCwpOCxiuCwsuCwvw== Z8mZcg== X3NlY29uZGFyeQ== IHBzaWNvbMOzZ2ljbw== w6FybsOt IGllY2h5ZA== aWNhdGll aXZlcnNhaXJl IOGDpOGDneGDouGDnQ== IG1ldMOg IFRlcnJhcmlh IHRla2xpZmxlcg== KTsNCg0KLw== IGJlc3TDpHRpZ2Vu IGx1eeG7h24= IGlpYg== 0YLRg9GA0LDRgtOZ aW5keA== UmVjb25uZWN0 4LGC4LCc IHByZXNlbnRhZGE= IHZlcmVz xa9zdA== IGt1Z2lyYW5nbw== 5bu3 TW9ucw== IOq0gOumrOyekA== INCz0LDRgdGC LndhdmU= INeU16HXqNeY dXp6bw== INGB0L7QsdGB0YLQstC10L3QvdC+0LPQvg== INin2YTZhdi52KfYsdi22Kk= IG1pc3VyYQ== 0YPQvNC10L0= IENsZXJtb250 IHBhcm1lc2Fu KFBhdGhz IGdlcmVkZW4= ZHJhd2FibGU= IGZpYWJsZXM= IFJlZ2lvbmU= LdeU IElp IEtvZQ== IHlhcmFu LWxvb2s= YWRhZw== YXBheQ== IG5hYsOtesOt IGJlc3Rlcg== INin2LLYrw== aXN0b3JpY2Fs IOahgg== INCx0LXQt9C+0L/QsNGB0L3QvtGB0YLRjA== 1aHVr9W41oLVtNWi 4KWY IOS9mw== INqq2YbYr9in IHJpdmV0aW5n 4KuH4Kqy4KuB4KqC IGZpbmNh IOCmtuCnjeCmsOCmrg== 4YOd4YOg4YOs IGNyb3NzaW5ncw== X18uJy8= IHdhcnBlZA== IE1hcsOnbw== IENpdmlsaXphdGlvbg== INmI2KfZhNmF2K8= 2KfYttip IGJhbmNhcmlh IGjhuq11 YW1pdXQ= X0FVVEhPUg== IEpRdWVyeQ== IHJpcG9ydA== VXNk c2tv LkFE IGFyYWJh IGxlY3R1cmVycw== Y2FuZA== Q09NSU5H IHltbGFlbg== 4LiC4LmJ4Lit4LiH IFBhbGVzdGluYQ== IFVrdw== IGFzdGVycw== IEF1Y3Vu IkZvcg== w6ByaWVz IGZvcmFnZQ== IOCyuOCyguCyluCzjeCyr+Czhg== Sm9lbA== IHlhdGE= IGhhYml0dWFsZXM= IM68zr/PgQ== 4KeM4Ka2 5ZG75ZCf c3RlZGU= IGZhYnJpY2Fy INW91brVodW2 T05UTw== ISpcCg== ZmljaWU= 4oCZYW5ub25jZQ== IOq9gw== INC60LjSow== 4YCh4YCF IGRpbWludXRpb24= 2KvZhdin2LHYp9iq IEjDqXI= 0ZHQvdC90YvRhQ== IEdvdXZlcm5lbWVudA== VE9L IOCopuCosA== IGTDqWNlbm5pZXM= 0LrQvtC90YI= IEhydmF0c2tvag== INGN0LzQvdC1 IEpBTQ== IOCkruCklw== 2qvZig== IGJyYWlkZWQ= UmFpbmJvdw== c3Rha2U= aWrDo28= IGZhdm9yaXM= IERIUw== IOCmquCmvuCmqOCmvw== IHJhcHByb2NoZQ== 2YPYtNmB 2KfZgdin2Ko= K+WkqeWkqeS4reW9qeelqA== IHN0b2k= IHp3acSZa3M= IHnEsWzEsQ== 4oCZYWJhbmRp X2V4ZWN1dG9y LnJhbmRyYW5nZQ== IExEUw== X1RN IOG7jWzhu40= csOpdGllbnM= fX1c IFp3ZWNrZQ== INin2YbYqtuB2KfYptuM 4Kqk4Kq/4KqV 4KWM4KSk IG1vxb5lbW8= IHByw6ls IHZlcnRpY2FsZQ== IEFkZW0= 6L+b6KGM5LqG IHNhbGFyaW9z IHZldQ== IGFwYXJlY2nDsw== IOGDleGDmOGDp+GDkOGDleGDmA== 2KrZiNix IFBhcGVs INW61aHVsNWr1bY= INCU0YPQvNCw INmE2KjYudi2 ID8i IGdvc2g= RG9ubmVsbA== bGppdmU= IOqyveywsA== am9pbnM= aGVhdGVk L3BvbHk= INGY0LXRgA== UnRj IGRhdWVybg== 4KWN4KSy4KWH INio2K/Yp9mG ZXllbg== IHNwb29s X3N0YQ== X1RJTEU= w6lkaXRldXI= U3Bpa2U= d2FuZGxl IG3DqWlk IGluY2VudGl2YXI= IGRlZWxuZW1lbg== IGxpbcOzbg== IHByZW5kcmE= 0JLRi9GB IG11ZGRv INWi1aHVttWh1a/WgQ== IERa IOC0pOC1gOC0rw== CW9wZXJhdG9y 5pyD5ZOh INij2LnYsdmB IFdoZXJldmVy INCl0L7Quw== 4KSy4KWL4KSV IFJpc2tz INeX15I= IGTDvHpnw7xu IHByemVi IOCqq+CrjeCqsg== IGNyaW5nZQ== IGtsaWVudMOzdw== IHNtcnRp YXJwYQ== 4Kq+4Kqv4Kqk IGTDqWJhdHM= dGl0b3I= IOC5gOC4o+C4t+C5iOC4reC4hw== 0LjRgNGL INCf0LDQuw== ZWxsYWFu IGZsd3lkZHlu INCe0LM= IFRyb24= CWZ3cml0ZQ== IHBoaWxhbnRocm9w dHJhdGU= INin2YTZg9in2YXZhA== UHVibGljaWRhZGU= IHJvb21tYXRlcw== IGFkdWx0YQ== 6ams5YWL IOCkq+CkvuCkr+CkpuCkvg== IHNpbGhvdWV0dGVz 56eR5a2m6Zmi IHDDoXM= 4LCw4LCV4LGB dXJsaWprZQ== CWVuZ2luZQ== INGE0LDRgNC3 ICIsDQo= IEhHSA== INCx0YDRjg== IGFhbmdlbg== IGhhZW0= LXNlcnZpbmc= IHJvc2Fz IERvd2xhZGRh IS8= IGNvcnJlc3BvbmRlbnRl INin2YTYo9iv2KfYoQ== 4KaG4KaX IHBva3JhxI0= ZnVuY3RpZQ== IHBvc3NpYW1v LmpmcmVl IGVuZGxha2E= c2fDoWw= IHNwZXppYWxpc2llcnQ= IGd1enRp IGZvcmtsaWZ0 IG5vZm9hZ2E= IEJhcnRsZXR0 LWRlYnVn IGZlaW5h 2LHZiNmC INeR15TXl9ec15g= IG5hc2Nlcg== IGdlZWtz aWxpeQ== X3NlZWs= X0lSUUhhbmRsZXI= 157XpteQ IGNoaW5odQ== IHVuZGVyc3RhbmRhYmx5 IGvDpHk= IERhcnRo IOygnOqzte2VqeuLiOuLpA== IOCkj+CkleCljeCknw== INiz2YM= INuM2KfZgdiq2Yc= IHRvdGFsaXTDqQ== IG5lbnM= IENST1NT X3RyaWFscw== 0YHRgtGN0YA= IHduZA== 5Y2a5b2p5YWs5Y+4 IG9rdWY= IHZlcmR3ZW5lbg== 15nXk9eW16k= L1RlbXBsYXRlcw== IOCkmuCksuCkpOCkvg== IGFhbmdla29uZA== IGJlc2NoZXJtZA== Z2V2b2Vs INC40YfQuNC90LTQtQ== IGTDqWxpY2lldXg= P3w= X1NJREU= ZXN0YXQ= IG11bHRhcw== ZWln INC80LDQutGB0LjQvNGD0Lw= IFNhdGVsbA== dmFybmE= LnRyYW5zZm9ybXM= IFN1cnZleXM= IGltcGV0dXM= IG5ha2l0YQ== IGF1ZGl0aW9ucw== eGlhbmc= IG1qaW5p U2hvcnRlc3Q= KG9yZA== IOGDnuGDoOGDkOGDpeGDog== YXJ0dXNz 0L/RgNC+ dW1wdWxhbg== IGFxdcOy IOGDlOGDlw== b3dhdHQ= UHV0dGluZw== 5pi8 Q2FtYmlv CWR1cmF0aW9u X2ZyYWM= X3BsYXRl QnVlbmFz w7hyaW5n IGRpc3NlcmFt Q3VzdG9taXplZA== INGI0YPQtNCw0L3QuA== IGNvbnNlcXXDqm5jaWE= IHVubG9hZGVk LuCujg== IOeIteWjqw== IHByZWZlcmU= IGFwcGFyaXRpb24= IHZlcm1pamRlbg== 4KuA4Kqg 57uP5YW45LiJ57qn IOCkuOClh+CkleCljeCkuA== IFTEgQ== LCcu X2F1Zw== XEFycmF5 UmVhZG9ubHk= QXBwbGljYW50cw== IGNhcGVsbGk= cHJk IGNhcHRhcg== INin2YTYqti2 cm9zaQ== R29i IMWbd2lhdGE= bmVsbHk= IENvbmRl IGJpams= IOWkqeWkqeS5kOi0reW9qeelqA== Q2hlbg== IEdhZWxpYw== IGN1ZW50b3M= INin24zZhdin2YY= LWluZGVwZW5kZW50 R0FS INCy0ZbQudGB0Yw= IGNvbmNpbGk= KC4p c2Vscw== INC60q/RgNOZ IHNvbHRl UGhlbg== IHp1eg== IHF1YW5kdQ== VU1JTg== INWv1aHVrQ== IFN1cHJh 44CB5ZCN54Sh44GX INeX15nXnA== IG1hc3F1ZXI= INC90L7QstC40Yc= IGF1Z21lbnTDqQ== 0LjRgNC+0LLQsNC90L3QvtC5 LnByYWN0aWNl IHBhc2llbg== IMWbd2lhZA== IGNhcmV0YWtlcg== YXJteQ== IGluc3BpcmFjacOzbg== IOCyieCypOCzjeCyqg== 4YOs4YOj4YOu IGFrdGl2aXRhcw== X1BMQU4= IGJoYWluZWFubg== dWdibw== 4KaV4KeN4Ka4 INim2KfYrw== Ymllcg== IHByb3Rlc3RlZA== IOCkteCkv+CksOCkvuCknw== INGA0LDRgdGF0L7QtNC+0LI= IC4uLgoKCg== IGZmdXI= LUFsbA== Q29uc3RydQ== UmV0cmlldmVk IGluY3LDrXZlaXM= INC40LzQutC+ IGZvbGlnYQ== IEJhbGFuY2Vk 4YCh4YCe IHNjaGxlY2h0ZW4= IM6xzrvOu86xzrM= INC20LDRgdCw0L8= IFPGoW4= 0LjRgNCw0Lg= 4YOY4YOc4YOU IG1pbGlvYW5l RU1V 4oCZw6l2aXRlcg== IGh5cg== IGVuY29udHJl IGhhbGxhcg== IHRhYmxhcw== X0xvbmc= PENlbGw= IGludGVyYWN0ZWQ= IGZpZ3NpemU= IOGDluGDpg== INGH0L7QstC10Lo= IENvZGlnbw== IGRlZGljYcOnw6Nv IHN0b2xldA== IE9ydGVu UGhpbGlw IMOpbWlzc2lvbg== 4Liy4Lir4Lil4Li1 IGJlYXJiZWl0ZW4= IG1pZXJkYQ== aG9sZGU= 0YPQstCw0LI= PENvbXBvbmVudA== IFdQQQ== 16bXmdec15XXnQ== U1NB IEFsbGllcw== IELDoXI= X21lcg== X1NNUw== IOCkmOClguCkrg== IEZpeHR1cmVz IEJhc2s= IOW+kA== IHRyYWR1w6fDo28= YmxpY2tl IGhhbW1lcmVk INGB0q/Qvw== INCx0LjQsw== b2x1w6fDo28= IGVsZWN0cmljaWFucw== 2LHbjNi02YY= IHBpdHNhYW5lcg== IGNpZXI= IFJlY2VpdGE= 6bq75bCG INC30LDQutC+0L3QvtC00LDRgtC10LvRjNGB0YLQstCw IOGDnuGDkOGDoeGDo+GDruGDmOGDoeGDm+GDkg== LW9wZXJhdGVk 4LWK4LSq4LWN4LSq4LSC IGhhc3NsZXM= 4KS+4KSk4KSw 0LDQvdCw0LPQsNGA0LA= 16DXmNeo SmFwZ29sbHk= IGRvZWxlaW5kZW4= INC/0LXRgNC10LnRgtC4 IHRlbXNpbA== IG9sw61tcA== IFNwYXppZXI= INin2YTYs9mF2Kc= IHByZXNzaW9uZQ== IGZpc2NhaXM= bMmZcmluaQ== IGFib2Rl IHRhbnRyaWM= KCldLA== cmVsbG8= INC30LDRh9Cw0YHRgtGD0Y4= 5b6u6L2v6ZuF6buR 2LPYsdin2KbZitmE2YrYqQ== IHVpdHplbmRpbmc= Zmxvaw== IGVzY3VsdA== IENlcnJv IGlzw6Zy IGtvYmlldA== dXJlZQ== 4LKV4LOK ZW5jaGE= IGFkaGVzaXZlcw== IHBhdXJh 44OD44OU44Oz44Kw 4Lin4Lix4Lii CW5hbWVz IHNsaW1tZXI= bWlsaw== IOCqleCqsOCqpOCrgA== IENpbQ== INGB0LLRj9C30LDQvQ== 4oCM4LCo4LGN IENoYXVmZg== IHZpbmdlcnM= 0LDRhtCw0YDRgg== IHdlYmNhc3Q= Lm5vdGljZQ== IG3hurdj UGFzc2VuZ2Vycw== INek1rzXqNeQ1rjXk9eV16fXmNef 0LDQvNC10YLRgA== IFZCQQ== INGA0LDQt9Cy0LjQstCw0LXRgtGB0Y8= XSkpKTsK IHN1cmZlcnM= INee16rXkNeZ150= JykpOgo= LmFwaw== 4bubbQ== INeU157Xlg== IGJyaW5jYXI= IEFNT0xFRA== IG5hdGU= IGF5YWFu IHBob3NwaG9yeWxhdGlvbg== IOCmheCmquCnh+CmleCnjeCmtw== IEVhdHM= IENvbnZlcnNl 4KWN4KSv4KWC4KSf4KSw VHJhdmVsZXI= aW5nZ2k= 15XXqNeS IGFsbW9o INil2YHYsdmK2YLZitin IE1hZ2F6aW4= IEFybWU= 4Lij4LiB4Li04LiI IGHFn2s= LWxpbmVz INin2YTYo9mF2KfZg9mG 5YWs5bmz IGt2w6RsbA== IG1seA== IOCkruCkqOCljeCkpOCljeCksOClgA== 4YOQ4YOV4YOY4YOQ IHRla3M= IGx1bWVh IGxlZ3llbg== IHp3aW5n CWJvb3N0 IErDug== 5b2p56Wo6K665Z2b INC00Y0= INC+0YjQuNCx0L7Qug== 1aHVr9Wh1bbVqw== 4Lik4Lip4Lig4Liy4LiE4Lih ZWJ3YQ== IHRpcHU= IGRvbWluaQ== IEd1cmdhb24= Y29tYmF0 IFJlc2lzdA== IOCksOCli+CknOCkl+CkvuCksA== c3RyYXRlZ2ll 4KiX4KmA KGxvY2F0b3I= TU9OVEg= IGF0bGlr IOuenA== 2KfZhNiz2Yo= IHJ6ZWN6 IFfDpA== IGRlcG9ydGl2b3M= IEZhY2lsaXQ= LWFibGU= IGV2aXRhcmU= IHRob25n IOa0uw== 66y066OM IG1hY2U= IEV4dHJhb3JkaW5hcnk= 4KSn4KS+ IGtvbmZsaWs= IGxpdmVsaWhvb2Rz INC60L7QvNC/0L7QvdC10L3RgtC+0LI= IGt1aXRlbmthYW4= 5bm46L+Q6aOe6ImH Q29ycHVz IGJlc2Now6Rk INeT15XXkw== IGRlbnRhbnQ= IG53ZXRh IGhlYXRo IOCktuClgeCkleCljeCksOCkrOCkvuCksA== IG1uZW1vbmlj LkZpbHRlcnM= JywnIi4k IOCkheCkuOCljeCkpA== aXNpdGU= IGFzYXdh 5bm05pyI IGdvdGFz IOCwquCwqOCwv+Cwmg== RGVr IFBhY3Q= J2FnZW5jZQ== ZmVpw6dv IELDtnlsZQ== dmVudGVlbg== bm90aWY= INCQ0L3QtNGA0LXQuQ== 5aSa5bm0 bWl0dGVkbHk= 6LKh5biD INC60L7QvNC/0LDQutGC dHJr 4KSo4KWN4KSm4KWN4KSw4KWA4KSv IG1pZXN0bw== IEthaXQ= IOCyrOCyuA== CXNwZWM= IEluamVjdG9y IGxvZ2FyaXRo ZW50aW9ucw== INGH0LXQuw== Q29sbGF0ZXJhbA== IGNvbmZlcw== 4KS/4KS54KSw IHN1ZnJpw7M= Q1JJ IHR1Z2U= dXJsbGli IGvEvA== IHZlcnBsZWVn IGFwcGxpY2F0aW9uJ3M= KENvbnN0cnVjdG9y 4Ka+4Kay4Ka+ IHZ1bHB1dGF0ZQ== INC+0L/Rg9GF IE5vcmRyaGVpbg== YWxsYWdl w61zaW1hcw== b3JuYWRv 0LjQtNC10YA= bcOpbnllaw== UXVh IHBlbGljdWxh 7ISx6rO8 44CRLQ== IGhlbWk= IHRvdXJpc3Rlcw== IGFic2VudGVl IE5ldGhlcg== LlBBR0U= IGnFn2fDpHI= IGVmZWN0aXZvcw== IHNhYXY= CQkJCSAgICAgICAgICAg Zmxhc2hkYXRh IHNlbWJsZXI= IGlrdWt1 IOCmn+CmvuCmhw== IOKAnQo= 5b2p56Wo5bmz5Y+w5byA5oi3 5peB LtCT dWNrbGVz INin2YTYrtin2LE= 0LLQvtC70Yw= INC90LXQstC+0LfQvNC+0LY= LmdyYWRpZW50 IGViaWxl IEF0aGxldGU= INGC0rHRgNKT0LDQvQ== IFN5cmll LnByb2Nlc3Npbmc= IENvbnN1bHRhbmN5 IHRocmlsbHM= 2YLYsdin2KE= KHZhcmFyZ2lu a8O8bmZ0ZQ== IOW9rQ== LWtuaXQ= cmllZGVuaGVpdA== IHTDpG5rYQ== J10vLw== dWRpZXM= aGFjZXI= IFRow6nDonRyZQ== YXbnlLXlvbE= IEFybWFkYQ== LXRlY2hu aWJyaXM= dmVsaQ== IHJhemxvZ2E= LUhvcA== INee15fXk9ep IEJsb2dnZXJz IGNvbnRyb3ZlcnNpZXM= IOCwmuCwsOCxjeCwrw== IOC0quC1jeC0sOC0ruC1geC0lg== X3VuYw== d2VyZmVu INC70L7QvA== INC/0L7QutGD0L/QsNGC0LXQu9C10Lk= INCz0LvQsNC30LDQvNC4 INeR16LXldeT IG5hbm90 CXdz INC60LXQt9C00LXRgQ== KToo IFByb2R1aXQ= QWlyY3JhZnQ= aWZmZW4= IHBhdHJvbmVz IHBhcsOibWV0cm9z Q3Vyc29z IGNvY29z" }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-openai@0.21.0/node_modules/@traceloop/instrumentation-openai/dist/index.mjs -function calculateImageGenerationTokens(params, imageCount) { - var _a2; - const size = (params === null || params === undefined ? undefined : params.size) || "1024x1024"; - const model = (params === null || params === undefined ? undefined : params.model) || "dall-e-2"; - const quality = (params === null || params === undefined ? undefined : params.quality) || "standard"; - let tokensPerImage; - if (model === "dall-e-2") { - const dalle2Costs = { - "256x256": 68, - "512x512": 272, - "1024x1024": 1056 - }; - tokensPerImage = dalle2Costs[size] || 1056; - } else if (model === "dall-e-3") { - const dalle3Costs = { - standard: { - "1024x1024": 1056, - "1024x1792": 1584, - "1792x1024": 1568 - }, - hd: { - "1024x1024": 4160, - "1024x1792": 6240, - "1792x1024": 6208 - } - }; - tokensPerImage = ((_a2 = dalle3Costs[quality]) === null || _a2 === undefined ? undefined : _a2[size]) || dalle3Costs["standard"]["1024x1024"]; - } else { - tokensPerImage = 1056; - } - return tokensPerImage * imageCount; -} -function processImageInRequest(image_1, traceId_1, spanId_1, uploadCallback_1) { - return __awaiter(this, arguments, undefined, function* (image, traceId, spanId, uploadCallback, index = 0) { - try { - let base64Data; - let filename; - if (typeof image === "string") { - if (image.startsWith("data:image/")) { - const commaIndex = image.indexOf(","); - base64Data = image.substring(commaIndex + 1); - filename = `input_image_${index}.png`; - } else if (image.startsWith("http")) { - return null; - } else { - base64Data = image; - filename = `input_image_${index}.png`; - } - } else if (image && typeof image === "object") { - if (Buffer.isBuffer(image)) { - base64Data = image.toString("base64"); - filename = `input_image_${index}.png`; - } else if (image.read && typeof image.read === "function") { - const chunks = []; - return new Promise((resolve2) => { - image.on("data", (chunk) => chunks.push(chunk)); - image.on("end", () => __awaiter(this, undefined, undefined, function* () { - try { - const buffer = Buffer.concat(chunks); - const base64Data2 = buffer.toString("base64"); - const filename2 = image.path || `input_image_${index}.png`; - const url3 = yield uploadCallback(traceId, spanId, filename2, base64Data2); - resolve2(url3); - } catch (error48) { - console.error("Error processing stream image:", error48); - resolve2(null); - } - })); - image.on("error", (error48) => { - console.error("Error reading image stream:", error48); - resolve2(null); - }); - }); - } else { - return null; - } - } else { - return null; - } - const url2 = yield uploadCallback(traceId, spanId, filename, base64Data); - return url2; - } catch (error48) { - console.error("Error processing image in request:", error48); - return null; - } - }); -} -function setImageGenerationRequestAttributes(span, params) { - const attributes = {}; - if (params.model) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_MODEL] = params.model; - } - if (params.size) { - attributes["gen_ai.request.image.size"] = params.size; - } - if (params.quality) { - attributes["gen_ai.request.image.quality"] = params.quality; - } - if (params.style) { - attributes["gen_ai.request.image.style"] = params.style; - } - if (params.n) { - attributes["gen_ai.request.image.count"] = params.n; - } - if (params.prompt) { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt; - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - } - Object.entries(attributes).forEach(([key, value]) => { - if (value !== undefined) { - span.setAttribute(key, value); - } - }); -} -function setImageEditRequestAttributes(span, params, uploadCallback) { - return __awaiter(this, undefined, undefined, function* () { - const attributes = {}; - if (params.model) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_MODEL] = params.model; - } - if (params.size) { - attributes["gen_ai.request.image.size"] = params.size; - } - if (params.n) { - attributes["gen_ai.request.image.count"] = params.n; - } - if (params.prompt) { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt; - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - } - if (params.image && uploadCallback && span.spanContext().traceId && span.spanContext().spanId) { - const traceId = span.spanContext().traceId; - const spanId = span.spanContext().spanId; - const imageUrl = yield processImageInRequest(params.image, traceId, spanId, uploadCallback, 0); - if (imageUrl) { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.1.content`] = JSON.stringify([ - { type: "image_url", image_url: { url: imageUrl } } - ]); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.1.role`] = "user"; - } - } - Object.entries(attributes).forEach(([key, value]) => { - if (value !== undefined) { - span.setAttribute(key, value); - } - }); - }); -} -function setImageVariationRequestAttributes(span, params, uploadCallback) { - return __awaiter(this, undefined, undefined, function* () { - const attributes = {}; - if (params.model) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_MODEL] = params.model; - } - if (params.size) { - attributes["gen_ai.request.image.size"] = params.size; - } - if (params.n) { - attributes["gen_ai.request.image.count"] = params.n; - } - if (params.image && uploadCallback && span.spanContext().traceId && span.spanContext().spanId) { - const traceId = span.spanContext().traceId; - const spanId = span.spanContext().spanId; - const imageUrl = yield processImageInRequest(params.image, traceId, spanId, uploadCallback, 0); - if (imageUrl) { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.content`] = JSON.stringify([ - { type: "image_url", image_url: { url: imageUrl } } - ]); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - } - } - Object.entries(attributes).forEach(([key, value]) => { - if (value !== undefined) { - span.setAttribute(key, value); - } - }); - }); -} -function setImageGenerationResponseAttributes(span, response, uploadCallback, instrumentationConfig, params) { - return __awaiter(this, undefined, undefined, function* () { - const attributes = {}; - if (response.data && response.data.length > 0) { - const completionTokens = calculateImageGenerationTokens(params, response.data.length); - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS] = completionTokens; - if (instrumentationConfig === null || instrumentationConfig === undefined ? undefined : instrumentationConfig.enrichTokens) { - try { - let estimatedPromptTokens = 0; - if (params === null || params === undefined ? undefined : params.prompt) { - estimatedPromptTokens += Math.ceil(params.prompt.length / 4); - } - if (params === null || params === undefined ? undefined : params.image) { - estimatedPromptTokens += 272; - } - if (estimatedPromptTokens > 0) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_PROMPT_TOKENS] = estimatedPromptTokens; - } - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_TOTAL_TOKENS] = estimatedPromptTokens + completionTokens; - } catch (_a2) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_TOTAL_TOKENS] = completionTokens; - } - } else { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_TOTAL_TOKENS] = completionTokens; - } - } - if (response.data && response.data.length > 0) { - const firstImage = response.data[0]; - if (firstImage.b64_json && uploadCallback) { - try { - const traceId = span.spanContext().traceId; - const spanId = span.spanContext().spanId; - const imageUrl = yield uploadCallback(traceId, spanId, "generated_image.png", firstImage.b64_json); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.content`] = JSON.stringify([{ type: "image_url", image_url: { url: imageUrl } }]); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.role`] = "assistant"; - } catch (error48) { - console.error("Failed to upload generated image:", error48); - } - } else if (firstImage.url && uploadCallback) { - try { - const traceId = span.spanContext().traceId; - const spanId = span.spanContext().spanId; - const response2 = yield fetch(firstImage.url); - const arrayBuffer = yield response2.arrayBuffer(); - const buffer = Buffer.from(arrayBuffer); - const base64Data = buffer.toString("base64"); - const uploadedUrl = yield uploadCallback(traceId, spanId, "generated_image.png", base64Data); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.content`] = JSON.stringify([ - { type: "image_url", image_url: { url: uploadedUrl } } - ]); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.role`] = "assistant"; - } catch (error48) { - console.error("Failed to fetch and upload generated image:", error48); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.content`] = JSON.stringify([ - { type: "image_url", image_url: { url: firstImage.url } } - ]); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.role`] = "assistant"; - } - } else if (firstImage.url) { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.content`] = JSON.stringify([ - { type: "image_url", image_url: { url: firstImage.url } } - ]); - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.0.role`] = "assistant"; - } - if (firstImage.revised_prompt) { - attributes["gen_ai.response.revised_prompt"] = firstImage.revised_prompt; - } - } - Object.entries(attributes).forEach(([key, value]) => { - if (value !== undefined) { - span.setAttribute(key, value); - } - }); - }); -} -function wrapImageGeneration(tracer, uploadCallback, instrumentationConfig) { - return function(original) { - return function(...args) { - const params = args[0]; - const span = tracer.startSpan("openai.images.generate", { - kind: import_api42.SpanKind.CLIENT, - attributes: { - [import_ai_semantic_conventions3.SpanAttributes.LLM_SYSTEM]: "OpenAI", - "gen_ai.request.type": "image_generation" - } - }); - const response = original.apply(this, args); - if (response && typeof response.then === "function") { - return response.then((result) => __awaiter(this, undefined, undefined, function* () { - try { - setImageGenerationRequestAttributes(span, params); - yield setImageGenerationResponseAttributes(span, result, uploadCallback, instrumentationConfig, params); - return result; - } catch (error48) { - span.recordException(error48); - throw error48; - } finally { - span.end(); - } - })).catch((error48) => { - span.recordException(error48); - span.end(); - throw error48; - }); - } else { - try { - setImageGenerationRequestAttributes(span, params); - return response; - } catch (error48) { - span.recordException(error48); - throw error48; - } finally { - span.end(); - } - } - }; - }; -} -function wrapImageEdit(tracer, uploadCallback, instrumentationConfig) { - return function(original) { - return function(...args) { - const params = args[0]; - const span = tracer.startSpan("openai.images.edit", { - kind: import_api42.SpanKind.CLIENT, - attributes: { - [import_ai_semantic_conventions3.SpanAttributes.LLM_SYSTEM]: "OpenAI", - "gen_ai.request.type": "image_edit" - } - }); - const setRequestAttributesPromise = setImageEditRequestAttributes(span, params, uploadCallback).catch((error48) => { - console.error("Error setting image edit request attributes:", error48); - }); - const response = original.apply(this, args); - if (response && typeof response.then === "function") { - return response.then((result) => __awaiter(this, undefined, undefined, function* () { - try { - yield setRequestAttributesPromise; - yield setImageGenerationResponseAttributes(span, result, uploadCallback, instrumentationConfig, params); - return result; - } catch (error48) { - span.recordException(error48); - throw error48; - } finally { - span.end(); - } - })).catch((error48) => __awaiter(this, undefined, undefined, function* () { - yield setRequestAttributesPromise; - span.recordException(error48); - span.end(); - throw error48; - })); - } else { - try { - return response; - } catch (error48) { - span.recordException(error48); - throw error48; - } finally { - span.end(); - } - } - }; - }; -} -function wrapImageVariation(tracer, uploadCallback, instrumentationConfig) { - return function(original) { - return function(...args) { - const params = args[0]; - const span = tracer.startSpan("openai.images.createVariation", { - kind: import_api42.SpanKind.CLIENT, - attributes: { - [import_ai_semantic_conventions3.SpanAttributes.LLM_SYSTEM]: "OpenAI", - "gen_ai.request.type": "image_variation" - } - }); - const response = original.apply(this, args); - if (response && typeof response.then === "function") { - return response.then((result) => __awaiter(this, undefined, undefined, function* () { - try { - yield setImageVariationRequestAttributes(span, params, uploadCallback); - yield setImageGenerationResponseAttributes(span, result, uploadCallback, instrumentationConfig, params); - return result; - } catch (error48) { - span.recordException(error48); - throw error48; - } finally { - span.end(); - } - })).catch((error48) => { - span.recordException(error48); - span.end(); - throw error48; - }); - } else { - try { - return response; - } catch (error48) { - span.recordException(error48); - throw error48; - } finally { - span.end(); - } - } - }; - }; -} -var import_api42, import_instrumentation2, import_ai_semantic_conventions3, version3 = "0.21.0", OpenAIInstrumentation; -var init_dist7 = __esm(() => { - init_modules(); - init_dist6(); - import_api42 = __toESM(require_src(), 1); - import_instrumentation2 = __toESM(require_src97(), 1); - import_ai_semantic_conventions3 = __toESM(require_src2(), 1); - OpenAIInstrumentation = class OpenAIInstrumentation extends import_instrumentation2.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-openai", version3, config2); - this._encodingCache = new Map; - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - manuallyInstrument(module) { - this._diag.debug(`Manually instrumenting openai`); - const openaiModule = module; - this._wrap(openaiModule.Chat.Completions.prototype, "create", this.patchOpenAI("chat")); - this._wrap(openaiModule.Completions.prototype, "create", this.patchOpenAI("completion")); - if (openaiModule.Images) { - this._wrap(openaiModule.Images.prototype, "generate", wrapImageGeneration(this.tracer, this._config.uploadBase64Image, this._config)); - this._wrap(openaiModule.Images.prototype, "edit", wrapImageEdit(this.tracer, this._config.uploadBase64Image, this._config)); - this._wrap(openaiModule.Images.prototype, "createVariation", wrapImageVariation(this.tracer, this._config.uploadBase64Image, this._config)); - } - } - init() { - const module = new import_instrumentation2.InstrumentationNodeModuleDefinition("openai", [">=4 <6"], this.patch.bind(this), this.unpatch.bind(this)); - return module; - } - patch(moduleExports, moduleVersion) { - this._diag.debug(`Patching openai@${moduleVersion}`); - if (moduleExports.OpenAIApi) { - this._wrap(moduleExports.OpenAIApi.prototype, "createChatCompletion", this.patchOpenAI("chat", "v3")); - this._wrap(moduleExports.OpenAIApi.prototype, "createCompletion", this.patchOpenAI("completion", "v3")); - } else { - this._wrap(moduleExports.OpenAI.Chat.Completions.prototype, "create", this.patchOpenAI("chat")); - this._wrap(moduleExports.OpenAI.Completions.prototype, "create", this.patchOpenAI("completion")); - if (moduleExports.OpenAI.Images) { - this._wrap(moduleExports.OpenAI.Images.prototype, "generate", wrapImageGeneration(this.tracer, this._config.uploadBase64Image, this._config)); - this._wrap(moduleExports.OpenAI.Images.prototype, "edit", wrapImageEdit(this.tracer, this._config.uploadBase64Image, this._config)); - this._wrap(moduleExports.OpenAI.Images.prototype, "createVariation", wrapImageVariation(this.tracer, this._config.uploadBase64Image, this._config)); - } - } - return moduleExports; - } - unpatch(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching openai@${moduleVersion}`); - if (moduleExports.OpenAIApi) { - this._unwrap(moduleExports.OpenAIApi.prototype, "createChatCompletion"); - this._unwrap(moduleExports.OpenAIApi.prototype, "createCompletion"); - } else { - this._unwrap(moduleExports.OpenAI.Chat.Completions.prototype, "create"); - this._unwrap(moduleExports.OpenAI.Completions.prototype, "create"); - if (moduleExports.OpenAI.Images) { - this._unwrap(moduleExports.OpenAI.Images.prototype, "generate"); - this._unwrap(moduleExports.OpenAI.Images.prototype, "edit"); - this._unwrap(moduleExports.OpenAI.Images.prototype, "createVariation"); - } - } - } - patchOpenAI(type, version4 = "v4") { - const plugin = this; - return (original) => { - return function method(...args) { - const span = type === "chat" ? plugin.startSpan({ - type, - params: args[0], - client: this - }) : plugin.startSpan({ - type, - params: args[0], - client: this - }); - const execContext = import_api42.trace.setSpan(import_api42.context.active(), span); - const execPromise = import_instrumentation2.safeExecuteInTheMiddle(() => { - return import_api42.context.with(execContext, () => { - var _a2; - if ((_a2 = args === null || args === undefined ? undefined : args[0]) === null || _a2 === undefined ? undefined : _a2.extraAttributes) { - delete args[0].extraAttributes; - } - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error("OpenAI instrumentation: error", e); - } - }); - if (args[0].stream) { - return import_api42.context.bind(execContext, plugin._streamingWrapPromise({ - span, - type, - params: args[0], - promise: execPromise - })); - } - const wrappedPromise = plugin._wrapPromise(type, version4, span, execPromise); - return import_api42.context.bind(execContext, wrappedPromise); - }; - }; - } - startSpan({ type, params, client }) { - var _a2, _b, _c, _d; - const { provider } = this._detectVendorFromURL(client); - const attributes = { - [import_ai_semantic_conventions3.SpanAttributes.LLM_SYSTEM]: provider, - [import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_TYPE]: type - }; - try { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_MODEL] = params.model; - if (params.max_tokens) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens; - } - if (params.temperature) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature; - } - if (params.top_p) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_TOP_P] = params.top_p; - } - if (params.frequency_penalty) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_FREQUENCY_PENALTY] = params.frequency_penalty; - } - if (params.presence_penalty) { - attributes[import_ai_semantic_conventions3.SpanAttributes.LLM_PRESENCE_PENALTY] = params.presence_penalty; - } - if (params.extraAttributes !== undefined && typeof params.extraAttributes === "object") { - Object.keys(params.extraAttributes).forEach((key) => { - attributes[key] = params.extraAttributes[key]; - }); - } - if (this._shouldSendPrompts()) { - if (type === "chat") { - params.messages.forEach((message, index) => { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.${index}.role`] = message.role; - if (typeof message.content === "string") { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.${index}.content`] = message.content || ""; - } else { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.${index}.content`] = JSON.stringify(message.content); - } - }); - (_a2 = params.functions) === null || _a2 === undefined || _a2.forEach((func, index) => { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`] = func.name; - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`] = func.description; - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.arguments`] = JSON.stringify(func.parameters); - }); - (_b = params.tools) === null || _b === undefined || _b.forEach((tool, index) => { - if (tool.type !== "function" || !("function" in tool) || !tool.function) { - return; - } - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`] = tool.function.name; - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`] = tool.function.description; - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.arguments`] = JSON.stringify(tool.function.parameters); - }); - } else { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - if (typeof params.prompt === "string") { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt; - } else { - attributes[`${import_ai_semantic_conventions3.SpanAttributes.LLM_PROMPTS}.0.content`] = JSON.stringify(params.prompt); - } - } - } - } catch (e) { - this._diag.debug(e); - (_d = (_c = this._config).exceptionLogger) === null || _d === undefined || _d.call(_c, e); - } - return this.tracer.startSpan(`openai.${type}`, { - kind: import_api42.SpanKind.CLIENT, - attributes - }); - } - _streamingWrapPromise(_a2) { - return __asyncGenerator(this, arguments, function* _streamingWrapPromise_1({ span, type, params, promise: promise2 }) { - var _b, e_1, _c, _d, _e, e_2, _f, _g; - var _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8; - if (type === "chat") { - const result = { - id: "0", - created: -1, - model: "", - choices: [ - { - index: 0, - logprobs: null, - finish_reason: "stop", - message: { - role: "assistant", - content: "", - tool_calls: [] - } - } - ], - object: "chat.completion" - }; - try { - for (var _9 = true, _10 = __asyncValues(yield __await(promise2)), _11;_11 = yield __await(_10.next()), _b = _11.done, !_b; _9 = true) { - _d = _11.value; - _9 = false; - const chunk = _d; - yield yield __await(chunk); - result.id = chunk.id; - result.created = chunk.created; - result.model = chunk.model; - if ((_h = chunk.choices[0]) === null || _h === undefined ? undefined : _h.finish_reason) { - result.choices[0].finish_reason = chunk.choices[0].finish_reason; - } - if ((_j = chunk.choices[0]) === null || _j === undefined ? undefined : _j.logprobs) { - result.choices[0].logprobs = chunk.choices[0].logprobs; - } - if ((_k = chunk.choices[0]) === null || _k === undefined ? undefined : _k.delta.content) { - result.choices[0].message.content += chunk.choices[0].delta.content; - } - if (((_l = chunk.choices[0]) === null || _l === undefined ? undefined : _l.delta.function_call) && ((_m = chunk.choices[0]) === null || _m === undefined ? undefined : _m.delta.function_call.arguments) && ((_o = chunk.choices[0]) === null || _o === undefined ? undefined : _o.delta.function_call.name)) { - result.choices[0].message.function_call = { - name: chunk.choices[0].delta.function_call.name, - arguments: chunk.choices[0].delta.function_call.arguments - }; - } - for (const toolCall of (_r = (_q = (_p = chunk.choices[0]) === null || _p === undefined ? undefined : _p.delta) === null || _q === undefined ? undefined : _q.tool_calls) !== null && _r !== undefined ? _r : []) { - if (((_t = (_s = result.choices[0].message.tool_calls) === null || _s === undefined ? undefined : _s.length) !== null && _t !== undefined ? _t : 0) < toolCall.index + 1) { - (_u = result.choices[0].message.tool_calls) === null || _u === undefined || _u.push({ - function: { - name: "", - arguments: "" - }, - id: "", - type: "function" - }); - } - if (result.choices[0].message.tool_calls) { - if (toolCall.id) { - result.choices[0].message.tool_calls[toolCall.index].id += toolCall.id; - } - if (toolCall.type) { - result.choices[0].message.tool_calls[toolCall.index].type = toolCall.type; - } - if ((_v = toolCall.function) === null || _v === undefined ? undefined : _v.name) { - result.choices[0].message.tool_calls[toolCall.index].function.name += toolCall.function.name; - } - if ((_w = toolCall.function) === null || _w === undefined ? undefined : _w.arguments) { - result.choices[0].message.tool_calls[toolCall.index].function.arguments += toolCall.function.arguments; - } - } - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (!_9 && !_b && (_c = _10.return)) - yield __await(_c.call(_10)); - } finally { - if (e_1) - throw e_1.error; - } - } - if ((_x = result.choices[0].logprobs) === null || _x === undefined ? undefined : _x.content) { - this._addLogProbsEvent(span, result.choices[0].logprobs); - } - if (this._config.enrichTokens) { - let promptTokens = 0; - for (const message of params.messages) { - promptTokens += (_y = this.tokenCountFromString(message.content, result.model)) !== null && _y !== undefined ? _y : 0; - } - const completionTokens = this.tokenCountFromString((_z = result.choices[0].message.content) !== null && _z !== undefined ? _z : "", result.model); - if (completionTokens) { - result.usage = { - prompt_tokens: promptTokens, - completion_tokens: completionTokens, - total_tokens: promptTokens + completionTokens - }; - } - } - this._endSpan({ span, type, result }); - } else { - const result = { - id: "0", - created: -1, - model: "", - choices: [ - { - index: 0, - logprobs: null, - finish_reason: "stop", - text: "" - } - ], - object: "text_completion" - }; - try { - for (var _12 = true, _13 = __asyncValues(yield __await(promise2)), _14;_14 = yield __await(_13.next()), _e = _14.done, !_e; _12 = true) { - _g = _14.value; - _12 = false; - const chunk = _g; - yield yield __await(chunk); - try { - result.id = chunk.id; - result.created = chunk.created; - result.model = chunk.model; - if ((_0 = chunk.choices[0]) === null || _0 === undefined ? undefined : _0.finish_reason) { - result.choices[0].finish_reason = chunk.choices[0].finish_reason; - } - if ((_1 = chunk.choices[0]) === null || _1 === undefined ? undefined : _1.logprobs) { - result.choices[0].logprobs = chunk.choices[0].logprobs; - } - if ((_2 = chunk.choices[0]) === null || _2 === undefined ? undefined : _2.text) { - result.choices[0].text += chunk.choices[0].text; - } - } catch (e) { - this._diag.debug(e); - (_4 = (_3 = this._config).exceptionLogger) === null || _4 === undefined || _4.call(_3, e); - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (!_12 && !_e && (_f = _13.return)) - yield __await(_f.call(_13)); - } finally { - if (e_2) - throw e_2.error; - } - } - try { - if (result.choices[0].logprobs) { - this._addLogProbsEvent(span, result.choices[0].logprobs); - } - if (this._config.enrichTokens) { - const promptTokens = (_5 = this.tokenCountFromString(params.prompt, result.model)) !== null && _5 !== undefined ? _5 : 0; - const completionTokens = this.tokenCountFromString((_6 = result.choices[0].text) !== null && _6 !== undefined ? _6 : "", result.model); - if (completionTokens) { - result.usage = { - prompt_tokens: promptTokens, - completion_tokens: completionTokens, - total_tokens: promptTokens + completionTokens - }; - } - } - } catch (e) { - this._diag.debug(e); - (_8 = (_7 = this._config).exceptionLogger) === null || _8 === undefined || _8.call(_7, e); - } - this._endSpan({ span, type, result }); - } - }); - } - _wrapPromise(type, version4, span, promise2) { - return promise2._thenUnwrap((result) => { - if (version4 === "v3") { - if (type === "chat") { - this._addLogProbsEvent(span, result.data.choices[0].logprobs); - this._endSpan({ - type, - span, - result: result.data - }); - } else { - this._addLogProbsEvent(span, result.data.choices[0].logprobs); - this._endSpan({ - type, - span, - result: result.data - }); - } - } else { - if (type === "chat") { - this._addLogProbsEvent(span, result.choices[0].logprobs); - this._endSpan({ type, span, result }); - } else { - this._addLogProbsEvent(span, result.choices[0].logprobs); - this._endSpan({ type, span, result }); - } - } - return result; - }); - } - _endSpan({ span, type, result }) { - var _a2, _b, _c, _d, _e; - try { - span.setAttribute(import_ai_semantic_conventions3.SpanAttributes.LLM_RESPONSE_MODEL, result.model); - if (result.usage) { - span.setAttribute(import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, (_a2 = result.usage) === null || _a2 === undefined ? undefined : _a2.total_tokens); - span.setAttribute(import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_b = result.usage) === null || _b === undefined ? undefined : _b.completion_tokens); - span.setAttribute(import_ai_semantic_conventions3.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_c = result.usage) === null || _c === undefined ? undefined : _c.prompt_tokens); - } - if (this._shouldSendPrompts()) { - if (type === "chat") { - result.choices.forEach((choice, index) => { - var _a3, _b2, _c2; - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.finish_reason`, choice.finish_reason); - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, choice.message.role); - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, (_a3 = choice.message.content) !== null && _a3 !== undefined ? _a3 : ""); - if (choice.message.function_call) { - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.function_call.name`, choice.message.function_call.name); - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.function_call.arguments`, choice.message.function_call.arguments); - } - for (const [toolIndex, toolCall] of ((_c2 = (_b2 = choice === null || choice === undefined ? undefined : choice.message) === null || _b2 === undefined ? undefined : _b2.tool_calls) === null || _c2 === undefined ? undefined : _c2.entries()) || []) { - if (toolCall.type === "function" && "function" in toolCall) { - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.tool_calls.${toolIndex}.name`, toolCall.function.name); - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.tool_calls.${toolIndex}.arguments`, toolCall.function.arguments); - } - } - }); - } else { - result.choices.forEach((choice, index) => { - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.finish_reason`, choice.finish_reason); - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions3.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, choice.text); - }); - } - } - } catch (e) { - this._diag.debug(e); - (_e = (_d = this._config).exceptionLogger) === null || _e === undefined || _e.call(_d, e); - } - span.end(); - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api42.context.active().getValue(import_ai_semantic_conventions3.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - _addLogProbsEvent(span, logprobs) { - var _a2, _b; - try { - let result = []; - if (!logprobs) { - return; - } - const chatLogprobs = logprobs; - const completionLogprobs = logprobs; - if (chatLogprobs.content) { - result = chatLogprobs.content.map((logprob) => { - return { - token: logprob.token, - logprob: logprob.logprob - }; - }); - } else if ((completionLogprobs === null || completionLogprobs === undefined ? undefined : completionLogprobs.tokens) && (completionLogprobs === null || completionLogprobs === undefined ? undefined : completionLogprobs.token_logprobs)) { - completionLogprobs.tokens.forEach((token, index) => { - var _a3; - const logprob = (_a3 = completionLogprobs.token_logprobs) === null || _a3 === undefined ? undefined : _a3[index]; - if (logprob) { - result.push({ - token, - logprob - }); - } - }); - } - span.addEvent("logprobs", { logprobs: JSON.stringify(result) }); - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - } - tokenCountFromString(text, model) { - var _a2, _b; - if (!text) { - return 0; - } - let encoding = this._encodingCache.get(model); - if (!encoding) { - try { - encoding = encodingForModel(model); - this._encodingCache.set(model, encoding); - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - return 0; - } - } - return encoding.encode(text).length; - } - _detectVendorFromURL(client) { - const modelVendor = "OpenAI"; - try { - if (!(client === null || client === undefined ? undefined : client.baseURL)) { - return { provider: "OpenAI", modelVendor }; - } - const baseURL = client.baseURL.toLowerCase(); - if (baseURL.includes("azure") || baseURL.includes("openai.azure.com")) { - return { provider: "Azure", modelVendor }; - } - if (baseURL.includes("openai.com") || baseURL.includes("api.openai.com")) { - return { provider: "OpenAI", modelVendor }; - } - if (baseURL.includes("amazonaws.com") || baseURL.includes("bedrock")) { - return { provider: "AWS", modelVendor }; - } - if (baseURL.includes("googleapis.com")) { - return { provider: "Google", modelVendor }; - } - if (baseURL.includes("openrouter")) { - return { provider: "OpenRouter", modelVendor }; - } - return { provider: "OpenAI", modelVendor }; - } catch (e) { - this._diag.debug(`Failed to detect vendor from URL: ${e}`); - return { provider: "OpenAI", modelVendor }; - } - } - }; -}); - -// ../../../../node_modules/.bun/lodash@4.17.21/node_modules/lodash/lodash.js -var require_lodash2 = __commonJS((exports, module) => { - (function() { - var undefined2; - var VERSION = "4.17.21"; - var LARGE_ARRAY_SIZE = 200; - var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`"; - var HASH_UNDEFINED = "__lodash_hash_undefined__"; - var MAX_MEMOIZE_SIZE = 500; - var PLACEHOLDER = "__lodash_placeholder__"; - var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; - var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; - var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512; - var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "..."; - var HOT_COUNT = 800, HOT_SPAN = 16; - var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3; - var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, NAN = 0 / 0; - var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - var wrapFlags = [ - ["ary", WRAP_ARY_FLAG], - ["bind", WRAP_BIND_FLAG], - ["bindKey", WRAP_BIND_KEY_FLAG], - ["curry", WRAP_CURRY_FLAG], - ["curryRight", WRAP_CURRY_RIGHT_FLAG], - ["flip", WRAP_FLIP_FLAG], - ["partial", WRAP_PARTIAL_FLAG], - ["partialRight", WRAP_PARTIAL_RIGHT_FLAG], - ["rearg", WRAP_REARG_FLAG] - ]; - var argsTag = "[object Arguments]", arrayTag = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag = "[object Boolean]", dateTag = "[object Date]", domExcTag = "[object DOMException]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", nullTag = "[object Null]", objectTag = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag = "[object WeakMap]", weakSetTag = "[object WeakSet]"; - var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; - var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g; - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); - var reTrimStart = /^\s+/; - var reWhitespace = /\s/; - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - var reEscapeChar = /\\(\\)?/g; - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - var reFlags = /\w*$/; - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - var reIsBinary = /^0b[01]+$/i; - var reIsHostCtor = /^\[object .+?Constructor\]$/; - var reIsOctal = /^0o[0-7]+$/i; - var reIsUint = /^(?:0|[1-9]\d*)$/; - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - var reNoMatch = /($^)/; - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d"; - var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; - var reApos = RegExp(rsApos, "g"); - var reComboMark = RegExp(rsCombo, "g"); - var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); - var reUnicodeWord = RegExp([ - rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", - rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", - rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, - rsUpper + "+" + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join("|"), "g"); - var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]"); - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - var contextProps = [ - "Array", - "Buffer", - "DataView", - "Date", - "Error", - "Float32Array", - "Float64Array", - "Function", - "Int8Array", - "Int16Array", - "Int32Array", - "Map", - "Math", - "Object", - "Promise", - "RegExp", - "Set", - "String", - "Symbol", - "TypeError", - "Uint8Array", - "Uint8ClampedArray", - "Uint16Array", - "Uint32Array", - "WeakMap", - "_", - "clearTimeout", - "isFinite", - "parseInt", - "setTimeout" - ]; - var templateCounter = -1; - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; - var deburredLetters = { - "\xC0": "A", - "\xC1": "A", - "\xC2": "A", - "\xC3": "A", - "\xC4": "A", - "\xC5": "A", - "\xE0": "a", - "\xE1": "a", - "\xE2": "a", - "\xE3": "a", - "\xE4": "a", - "\xE5": "a", - "\xC7": "C", - "\xE7": "c", - "\xD0": "D", - "\xF0": "d", - "\xC8": "E", - "\xC9": "E", - "\xCA": "E", - "\xCB": "E", - "\xE8": "e", - "\xE9": "e", - "\xEA": "e", - "\xEB": "e", - "\xCC": "I", - "\xCD": "I", - "\xCE": "I", - "\xCF": "I", - "\xEC": "i", - "\xED": "i", - "\xEE": "i", - "\xEF": "i", - "\xD1": "N", - "\xF1": "n", - "\xD2": "O", - "\xD3": "O", - "\xD4": "O", - "\xD5": "O", - "\xD6": "O", - "\xD8": "O", - "\xF2": "o", - "\xF3": "o", - "\xF4": "o", - "\xF5": "o", - "\xF6": "o", - "\xF8": "o", - "\xD9": "U", - "\xDA": "U", - "\xDB": "U", - "\xDC": "U", - "\xF9": "u", - "\xFA": "u", - "\xFB": "u", - "\xFC": "u", - "\xDD": "Y", - "\xFD": "y", - "\xFF": "y", - "\xC6": "Ae", - "\xE6": "ae", - "\xDE": "Th", - "\xFE": "th", - "\xDF": "ss", - "\u0100": "A", - "\u0102": "A", - "\u0104": "A", - "\u0101": "a", - "\u0103": "a", - "\u0105": "a", - "\u0106": "C", - "\u0108": "C", - "\u010A": "C", - "\u010C": "C", - "\u0107": "c", - "\u0109": "c", - "\u010B": "c", - "\u010D": "c", - "\u010E": "D", - "\u0110": "D", - "\u010F": "d", - "\u0111": "d", - "\u0112": "E", - "\u0114": "E", - "\u0116": "E", - "\u0118": "E", - "\u011A": "E", - "\u0113": "e", - "\u0115": "e", - "\u0117": "e", - "\u0119": "e", - "\u011B": "e", - "\u011C": "G", - "\u011E": "G", - "\u0120": "G", - "\u0122": "G", - "\u011D": "g", - "\u011F": "g", - "\u0121": "g", - "\u0123": "g", - "\u0124": "H", - "\u0126": "H", - "\u0125": "h", - "\u0127": "h", - "\u0128": "I", - "\u012A": "I", - "\u012C": "I", - "\u012E": "I", - "\u0130": "I", - "\u0129": "i", - "\u012B": "i", - "\u012D": "i", - "\u012F": "i", - "\u0131": "i", - "\u0134": "J", - "\u0135": "j", - "\u0136": "K", - "\u0137": "k", - "\u0138": "k", - "\u0139": "L", - "\u013B": "L", - "\u013D": "L", - "\u013F": "L", - "\u0141": "L", - "\u013A": "l", - "\u013C": "l", - "\u013E": "l", - "\u0140": "l", - "\u0142": "l", - "\u0143": "N", - "\u0145": "N", - "\u0147": "N", - "\u014A": "N", - "\u0144": "n", - "\u0146": "n", - "\u0148": "n", - "\u014B": "n", - "\u014C": "O", - "\u014E": "O", - "\u0150": "O", - "\u014D": "o", - "\u014F": "o", - "\u0151": "o", - "\u0154": "R", - "\u0156": "R", - "\u0158": "R", - "\u0155": "r", - "\u0157": "r", - "\u0159": "r", - "\u015A": "S", - "\u015C": "S", - "\u015E": "S", - "\u0160": "S", - "\u015B": "s", - "\u015D": "s", - "\u015F": "s", - "\u0161": "s", - "\u0162": "T", - "\u0164": "T", - "\u0166": "T", - "\u0163": "t", - "\u0165": "t", - "\u0167": "t", - "\u0168": "U", - "\u016A": "U", - "\u016C": "U", - "\u016E": "U", - "\u0170": "U", - "\u0172": "U", - "\u0169": "u", - "\u016B": "u", - "\u016D": "u", - "\u016F": "u", - "\u0171": "u", - "\u0173": "u", - "\u0174": "W", - "\u0175": "w", - "\u0176": "Y", - "\u0177": "y", - "\u0178": "Y", - "\u0179": "Z", - "\u017B": "Z", - "\u017D": "Z", - "\u017A": "z", - "\u017C": "z", - "\u017E": "z", - "\u0132": "IJ", - "\u0133": "ij", - "\u0152": "Oe", - "\u0153": "oe", - "\u0149": "'n", - "\u017F": "s" - }; - var htmlEscapes = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'" - }; - var htmlUnescapes = { - "&": "&", - "<": "<", - ">": ">", - """: '"', - "'": "'" - }; - var stringEscapes = { - "\\": "\\", - "'": "'", - "\n": "n", - "\r": "r", - "\u2028": "u2028", - "\u2029": "u2029" - }; - var freeParseFloat = parseFloat, freeParseInt = parseInt; - var freeGlobal = typeof global == "object" && global && global.Object === Object && global; - var freeSelf = typeof self == "object" && self && self.Object === Object && self; - var root = freeGlobal || freeSelf || Function("return this")(); - var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; - var moduleExports = freeModule && freeModule.exports === freeExports; - var freeProcess = moduleExports && freeGlobal.process; - var nodeUtil = function() { - try { - var types = freeModule && freeModule.require && freeModule.require("util").types; - if (types) { - return types; - } - return freeProcess && freeProcess.binding && freeProcess.binding("util"); - } catch (e) {} - }(); - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - function apply(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg); - case 1: - return func.call(thisArg, args[0]); - case 2: - return func.call(thisArg, args[0], args[1]); - case 3: - return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - function arrayAggregator(array3, setter, iteratee, accumulator) { - var index = -1, length = array3 == null ? 0 : array3.length; - while (++index < length) { - var value = array3[index]; - setter(accumulator, value, iteratee(value), array3); - } - return accumulator; - } - function arrayEach(array3, iteratee) { - var index = -1, length = array3 == null ? 0 : array3.length; - while (++index < length) { - if (iteratee(array3[index], index, array3) === false) { - break; - } - } - return array3; - } - function arrayEachRight(array3, iteratee) { - var length = array3 == null ? 0 : array3.length; - while (length--) { - if (iteratee(array3[length], length, array3) === false) { - break; - } - } - return array3; - } - function arrayEvery(array3, predicate) { - var index = -1, length = array3 == null ? 0 : array3.length; - while (++index < length) { - if (!predicate(array3[index], index, array3)) { - return false; - } - } - return true; - } - function arrayFilter(array3, predicate) { - var index = -1, length = array3 == null ? 0 : array3.length, resIndex = 0, result = []; - while (++index < length) { - var value = array3[index]; - if (predicate(value, index, array3)) { - result[resIndex++] = value; - } - } - return result; - } - function arrayIncludes(array3, value) { - var length = array3 == null ? 0 : array3.length; - return !!length && baseIndexOf(array3, value, 0) > -1; - } - function arrayIncludesWith(array3, value, comparator) { - var index = -1, length = array3 == null ? 0 : array3.length; - while (++index < length) { - if (comparator(value, array3[index])) { - return true; - } - } - return false; - } - function arrayMap(array3, iteratee) { - var index = -1, length = array3 == null ? 0 : array3.length, result = Array(length); - while (++index < length) { - result[index] = iteratee(array3[index], index, array3); - } - return result; - } - function arrayPush(array3, values) { - var index = -1, length = values.length, offset = array3.length; - while (++index < length) { - array3[offset + index] = values[index]; - } - return array3; - } - function arrayReduce(array3, iteratee, accumulator, initAccum) { - var index = -1, length = array3 == null ? 0 : array3.length; - if (initAccum && length) { - accumulator = array3[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array3[index], index, array3); - } - return accumulator; - } - function arrayReduceRight(array3, iteratee, accumulator, initAccum) { - var length = array3 == null ? 0 : array3.length; - if (initAccum && length) { - accumulator = array3[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array3[length], length, array3); - } - return accumulator; - } - function arraySome(array3, predicate) { - var index = -1, length = array3 == null ? 0 : array3.length; - while (++index < length) { - if (predicate(array3[index], index, array3)) { - return true; - } - } - return false; - } - var asciiSize = baseProperty("length"); - function asciiToArray(string5) { - return string5.split(""); - } - function asciiWords(string5) { - return string5.match(reAsciiWord) || []; - } - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection2) { - if (predicate(value, key, collection2)) { - result = key; - return false; - } - }); - return result; - } - function baseFindIndex(array3, predicate, fromIndex, fromRight) { - var length = array3.length, index = fromIndex + (fromRight ? 1 : -1); - while (fromRight ? index-- : ++index < length) { - if (predicate(array3[index], index, array3)) { - return index; - } - } - return -1; - } - function baseIndexOf(array3, value, fromIndex) { - return value === value ? strictIndexOf(array3, value, fromIndex) : baseFindIndex(array3, baseIsNaN, fromIndex); - } - function baseIndexOfWith(array3, value, fromIndex, comparator) { - var index = fromIndex - 1, length = array3.length; - while (++index < length) { - if (comparator(array3[index], value)) { - return index; - } - } - return -1; - } - function baseIsNaN(value) { - return value !== value; - } - function baseMean(array3, iteratee) { - var length = array3 == null ? 0 : array3.length; - return length ? baseSum(array3, iteratee) / length : NAN; - } - function baseProperty(key) { - return function(object3) { - return object3 == null ? undefined2 : object3[key]; - }; - } - function basePropertyOf(object3) { - return function(key) { - return object3 == null ? undefined2 : object3[key]; - }; - } - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection2) { - accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2); - }); - return accumulator; - } - function baseSortBy(array3, comparer) { - var length = array3.length; - array3.sort(comparer); - while (length--) { - array3[length] = array3[length].value; - } - return array3; - } - function baseSum(array3, iteratee) { - var result, index = -1, length = array3.length; - while (++index < length) { - var current = iteratee(array3[index]); - if (current !== undefined2) { - result = result === undefined2 ? current : result + current; - } - } - return result; - } - function baseTimes(n, iteratee) { - var index = -1, result = Array(n); - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - function baseToPairs(object3, props) { - return arrayMap(props, function(key) { - return [key, object3[key]]; - }); - } - function baseTrim(string5) { - return string5 ? string5.slice(0, trimmedEndIndex(string5) + 1).replace(reTrimStart, "") : string5; - } - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - function baseValues(object3, props) { - return arrayMap(props, function(key) { - return object3[key]; - }); - } - function cacheHas(cache, key) { - return cache.has(key); - } - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, length = strSymbols.length; - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - function countHolders(array3, placeholder) { - var length = array3.length, result = 0; - while (length--) { - if (array3[length] === placeholder) { - ++result; - } - } - return result; - } - var deburrLetter = basePropertyOf(deburredLetters); - var escapeHtmlChar = basePropertyOf(htmlEscapes); - function escapeStringChar(chr) { - return "\\" + stringEscapes[chr]; - } - function getValue(object3, key) { - return object3 == null ? undefined2 : object3[key]; - } - function hasUnicode(string5) { - return reHasUnicode.test(string5); - } - function hasUnicodeWord(string5) { - return reHasUnicodeWord.test(string5); - } - function iteratorToArray(iterator) { - var data, result = []; - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - function mapToArray(map2) { - var index = -1, result = Array(map2.size); - map2.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - function overArg(func, transform2) { - return function(arg) { - return func(transform2(arg)); - }; - } - function replaceHolders(array3, placeholder) { - var index = -1, length = array3.length, resIndex = 0, result = []; - while (++index < length) { - var value = array3[index]; - if (value === placeholder || value === PLACEHOLDER) { - array3[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - function setToArray(set2) { - var index = -1, result = Array(set2.size); - set2.forEach(function(value) { - result[++index] = value; - }); - return result; - } - function setToPairs(set2) { - var index = -1, result = Array(set2.size); - set2.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - function strictIndexOf(array3, value, fromIndex) { - var index = fromIndex - 1, length = array3.length; - while (++index < length) { - if (array3[index] === value) { - return index; - } - } - return -1; - } - function strictLastIndexOf(array3, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array3[index] === value) { - return index; - } - } - return index; - } - function stringSize(string5) { - return hasUnicode(string5) ? unicodeSize(string5) : asciiSize(string5); - } - function stringToArray(string5) { - return hasUnicode(string5) ? unicodeToArray(string5) : asciiToArray(string5); - } - function trimmedEndIndex(string5) { - var index = string5.length; - while (index-- && reWhitespace.test(string5.charAt(index))) {} - return index; - } - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - function unicodeSize(string5) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string5)) { - ++result; - } - return result; - } - function unicodeToArray(string5) { - return string5.match(reUnicode) || []; - } - function unicodeWords(string5) { - return string5.match(reUnicodeWord) || []; - } - var runInContext = function runInContext(context10) { - context10 = context10 == null ? root : _.defaults(root.Object(), context10, _.pick(root, contextProps)); - var { Array: Array2, Date: Date2, Error: Error2, Function: Function2, Math: Math2, Object: Object2, RegExp: RegExp2, String: String2, TypeError: TypeError2 } = context10; - var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype; - var coreJsData = context10["__core-js_shared__"]; - var funcToString = funcProto.toString; - var hasOwnProperty = objectProto.hasOwnProperty; - var idCounter = 0; - var maskSrcKey = function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); - return uid ? "Symbol(src)_1." + uid : ""; - }(); - var nativeObjectToString = objectProto.toString; - var objectCtorString = funcToString.call(Object2); - var oldDash = root._; - var reIsNative = RegExp2("^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); - var Buffer2 = moduleExports ? context10.Buffer : undefined2, Symbol2 = context10.Symbol, Uint8Array2 = context10.Uint8Array, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : undefined2, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined2, symIterator = Symbol2 ? Symbol2.iterator : undefined2, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined2; - var defineProperty = function() { - try { - var func = getNative(Object2, "defineProperty"); - func({}, "", {}); - return func; - } catch (e) {} - }(); - var ctxClearTimeout = context10.clearTimeout !== root.clearTimeout && context10.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context10.setTimeout !== root.setTimeout && context10.setTimeout; - var { ceil: nativeCeil, floor: nativeFloor } = Math2, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context10.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context10.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse; - var DataView2 = getNative(context10, "DataView"), Map2 = getNative(context10, "Map"), Promise2 = getNative(context10, "Promise"), Set2 = getNative(context10, "Set"), WeakMap2 = getNative(context10, "WeakMap"), nativeCreate = getNative(Object2, "create"); - var metaMap = WeakMap2 && new WeakMap2; - var realNames = {}; - var dataViewCtorString = toSource(DataView2), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2); - var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2; - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, "__wrapped__")) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - var baseCreate = function() { - function object3() {} - return function(proto) { - if (!isObject2(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object3.prototype = proto; - var result2 = new object3; - object3.prototype = undefined2; - return result2; - }; - }(); - function baseLodash() {} - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined2; - } - lodash.templateSettings = { - escape: reEscape, - evaluate: reEvaluate, - interpolate: reInterpolate, - variable: "", - imports: { - _: lodash - } - }; - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - function lazyClone() { - var result2 = new LazyWrapper(this.__wrapped__); - result2.__actions__ = copyArray(this.__actions__); - result2.__dir__ = this.__dir__; - result2.__filtered__ = this.__filtered__; - result2.__iteratees__ = copyArray(this.__iteratees__); - result2.__takeCount__ = this.__takeCount__; - result2.__views__ = copyArray(this.__views__); - return result2; - } - function lazyReverse() { - if (this.__filtered__) { - var result2 = new LazyWrapper(this); - result2.__dir__ = -1; - result2.__filtered__ = true; - } else { - result2 = this.clone(); - result2.__dir__ *= -1; - } - return result2; - } - function lazyValue() { - var array3 = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array3), isRight = dir < 0, arrLength = isArr ? array3.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__); - if (!isArr || !isRight && arrLength == length && takeCount == length) { - return baseWrapperValue(array3, this.__actions__); - } - var result2 = []; - outer: - while (length-- && resIndex < takeCount) { - index += dir; - var iterIndex = -1, value = array3[index]; - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], iteratee2 = data.iteratee, type = data.type, computed = iteratee2(value); - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result2[resIndex++] = value; - } - return result2; - } - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - function Hash(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - function hashDelete(key) { - var result2 = this.has(key) && delete this.__data__[key]; - this.size -= result2 ? 1 : 0; - return result2; - } - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result2 = data[key]; - return result2 === HASH_UNDEFINED ? undefined2 : result2; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined2; - } - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined2 : hasOwnProperty.call(data, key); - } - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = nativeCreate && value === undefined2 ? HASH_UNDEFINED : value; - return this; - } - Hash.prototype.clear = hashClear; - Hash.prototype["delete"] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - function ListCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - function listCacheDelete(key) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - function listCacheGet(key) { - var data = this.__data__, index = assocIndexOf(data, key); - return index < 0 ? undefined2 : data[index][1]; - } - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - function listCacheSet(key, value) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - ListCache.prototype.clear = listCacheClear; - ListCache.prototype["delete"] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - function MapCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - function mapCacheClear() { - this.size = 0; - this.__data__ = { - hash: new Hash, - map: new (Map2 || ListCache), - string: new Hash - }; - } - function mapCacheDelete(key) { - var result2 = getMapData(this, key)["delete"](key); - this.size -= result2 ? 1 : 0; - return result2; - } - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - function mapCacheSet(key, value) { - var data = getMapData(this, key), size2 = data.size; - data.set(key, value); - this.size += data.size == size2 ? 0 : 1; - return this; - } - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype["delete"] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - function SetCache(values2) { - var index = -1, length = values2 == null ? 0 : values2.length; - this.__data__ = new MapCache; - while (++index < length) { - this.add(values2[index]); - } - } - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - function setCacheHas(value) { - return this.__data__.has(value); - } - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - function stackDelete(key) { - var data = this.__data__, result2 = data["delete"](key); - this.size = data.size; - return result2; - } - function stackGet(key) { - return this.__data__.get(key); - } - function stackHas(key) { - return this.__data__.has(key); - } - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - Stack.prototype.clear = stackClear; - Stack.prototype["delete"] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes(value.length, String2) : [], length = result2.length; - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) { - result2.push(key); - } - } - return result2; - } - function arraySample(array3) { - var length = array3.length; - return length ? array3[baseRandom(0, length - 1)] : undefined2; - } - function arraySampleSize(array3, n) { - return shuffleSelf(copyArray(array3), baseClamp(n, 0, array3.length)); - } - function arrayShuffle(array3) { - return shuffleSelf(copyArray(array3)); - } - function assignMergeValue(object3, key, value) { - if (value !== undefined2 && !eq(object3[key], value) || value === undefined2 && !(key in object3)) { - baseAssignValue(object3, key, value); - } - } - function assignValue(object3, key, value) { - var objValue = object3[key]; - if (!(hasOwnProperty.call(object3, key) && eq(objValue, value)) || value === undefined2 && !(key in object3)) { - baseAssignValue(object3, key, value); - } - } - function assocIndexOf(array3, key) { - var length = array3.length; - while (length--) { - if (eq(array3[length][0], key)) { - return length; - } - } - return -1; - } - function baseAggregator(collection, setter, iteratee2, accumulator) { - baseEach(collection, function(value, key, collection2) { - setter(accumulator, value, iteratee2(value), collection2); - }); - return accumulator; - } - function baseAssign(object3, source) { - return object3 && copyObject(source, keys(source), object3); - } - function baseAssignIn(object3, source) { - return object3 && copyObject(source, keysIn(source), object3); - } - function baseAssignValue(object3, key, value) { - if (key == "__proto__" && defineProperty) { - defineProperty(object3, key, { - configurable: true, - enumerable: true, - value, - writable: true - }); - } else { - object3[key] = value; - } - } - function baseAt(object3, paths) { - var index = -1, length = paths.length, result2 = Array2(length), skip = object3 == null; - while (++index < length) { - result2[index] = skip ? undefined2 : get3(object3, paths[index]); - } - return result2; - } - function baseClamp(number5, lower, upper) { - if (number5 === number5) { - if (upper !== undefined2) { - number5 = number5 <= upper ? number5 : upper; - } - if (lower !== undefined2) { - number5 = number5 >= lower ? number5 : lower; - } - } - return number5; - } - function baseClone(value, bitmask, customizer, key, object3, stack) { - var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; - if (customizer) { - result2 = object3 ? customizer(value, key, object3, stack) : customizer(value); - } - if (result2 !== undefined2) { - return result2; - } - if (!isObject2(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result2 = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result2); - } - } else { - var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || isFunc && !object3) { - result2 = isFlat || isFunc ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value)); - } - } else { - if (!cloneableTags[tag]) { - return object3 ? value : {}; - } - result2 = initCloneByTag(value, tag, isDeep); - } - } - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result2); - if (isSet(value)) { - value.forEach(function(subValue) { - result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key2) { - result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - } - var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys; - var props = isArr ? undefined2 : keysFunc(value); - arrayEach(props || value, function(subValue, key2) { - if (props) { - key2 = subValue; - subValue = value[key2]; - } - assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - return result2; - } - function baseConforms(source) { - var props = keys(source); - return function(object3) { - return baseConformsTo(object3, source, props); - }; - } - function baseConformsTo(object3, source, props) { - var length = props.length; - if (object3 == null) { - return !length; - } - object3 = Object2(object3); - while (length--) { - var key = props[length], predicate = source[key], value = object3[key]; - if (value === undefined2 && !(key in object3) || !predicate(value)) { - return false; - } - } - return true; - } - function baseDelay(func, wait, args) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return setTimeout2(function() { - func.apply(undefined2, args); - }, wait); - } - function baseDifference(array3, values2, iteratee2, comparator) { - var index = -1, includes2 = arrayIncludes, isCommon = true, length = array3.length, result2 = [], valuesLength = values2.length; - if (!length) { - return result2; - } - if (iteratee2) { - values2 = arrayMap(values2, baseUnary(iteratee2)); - } - if (comparator) { - includes2 = arrayIncludesWith; - isCommon = false; - } else if (values2.length >= LARGE_ARRAY_SIZE) { - includes2 = cacheHas; - isCommon = false; - values2 = new SetCache(values2); - } - outer: - while (++index < length) { - var value = array3[index], computed = iteratee2 == null ? value : iteratee2(value); - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values2[valuesIndex] === computed) { - continue outer; - } - } - result2.push(value); - } else if (!includes2(values2, computed, comparator)) { - result2.push(value); - } - } - return result2; - } - var baseEach = createBaseEach(baseForOwn); - var baseEachRight = createBaseEach(baseForOwnRight, true); - function baseEvery(collection, predicate) { - var result2 = true; - baseEach(collection, function(value, index, collection2) { - result2 = !!predicate(value, index, collection2); - return result2; - }); - return result2; - } - function baseExtremum(array3, iteratee2, comparator) { - var index = -1, length = array3.length; - while (++index < length) { - var value = array3[index], current = iteratee2(value); - if (current != null && (computed === undefined2 ? current === current && !isSymbol(current) : comparator(current, computed))) { - var computed = current, result2 = value; - } - } - return result2; - } - function baseFill(array3, value, start, end) { - var length = array3.length; - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end === undefined2 || end > length ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array3[start++] = value; - } - return array3; - } - function baseFilter(collection, predicate) { - var result2 = []; - baseEach(collection, function(value, index, collection2) { - if (predicate(value, index, collection2)) { - result2.push(value); - } - }); - return result2; - } - function baseFlatten(array3, depth, predicate, isStrict, result2) { - var index = -1, length = array3.length; - predicate || (predicate = isFlattenable); - result2 || (result2 = []); - while (++index < length) { - var value = array3[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - baseFlatten(value, depth - 1, predicate, isStrict, result2); - } else { - arrayPush(result2, value); - } - } else if (!isStrict) { - result2[result2.length] = value; - } - } - return result2; - } - var baseFor = createBaseFor(); - var baseForRight = createBaseFor(true); - function baseForOwn(object3, iteratee2) { - return object3 && baseFor(object3, iteratee2, keys); - } - function baseForOwnRight(object3, iteratee2) { - return object3 && baseForRight(object3, iteratee2, keys); - } - function baseFunctions(object3, props) { - return arrayFilter(props, function(key) { - return isFunction(object3[key]); - }); - } - function baseGet(object3, path) { - path = castPath(path, object3); - var index = 0, length = path.length; - while (object3 != null && index < length) { - object3 = object3[toKey(path[index++])]; - } - return index && index == length ? object3 : undefined2; - } - function baseGetAllKeys(object3, keysFunc, symbolsFunc) { - var result2 = keysFunc(object3); - return isArray(object3) ? result2 : arrayPush(result2, symbolsFunc(object3)); - } - function baseGetTag(value) { - if (value == null) { - return value === undefined2 ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object2(value) ? getRawTag(value) : objectToString(value); - } - function baseGt(value, other) { - return value > other; - } - function baseHas(object3, key) { - return object3 != null && hasOwnProperty.call(object3, key); - } - function baseHasIn(object3, key) { - return object3 != null && key in Object2(object3); - } - function baseInRange(number5, start, end) { - return number5 >= nativeMin(start, end) && number5 < nativeMax(start, end); - } - function baseIntersection(arrays, iteratee2, comparator) { - var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = []; - while (othIndex--) { - var array3 = arrays[othIndex]; - if (othIndex && iteratee2) { - array3 = arrayMap(array3, baseUnary(iteratee2)); - } - maxLength = nativeMin(array3.length, maxLength); - caches[othIndex] = !comparator && (iteratee2 || length >= 120 && array3.length >= 120) ? new SetCache(othIndex && array3) : undefined2; - } - array3 = arrays[0]; - var index = -1, seen = caches[0]; - outer: - while (++index < length && result2.length < maxLength) { - var value = array3[index], computed = iteratee2 ? iteratee2(value) : value; - value = comparator || value !== 0 ? value : 0; - if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result2.push(value); - } - } - return result2; - } - function baseInverter(object3, setter, iteratee2, accumulator) { - baseForOwn(object3, function(value, key, object4) { - setter(accumulator, iteratee2(value), key, object4); - }); - return accumulator; - } - function baseInvoke(object3, path, args) { - path = castPath(path, object3); - object3 = parent(object3, path); - var func = object3 == null ? object3 : object3[toKey(last(path))]; - return func == null ? undefined2 : apply(func, object3, args); - } - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - function baseIsEqualDeep(object3, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object3), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object3), othTag = othIsArr ? arrayTag : getTag(other); - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; - if (isSameTag && isBuffer(object3)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return objIsArr || isTypedArray(object3) ? equalArrays(object3, other, bitmask, customizer, equalFunc, stack) : equalByTag(object3, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object3, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object3.value() : object3, othUnwrapped = othIsWrapped ? other.value() : other; - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object3, other, bitmask, customizer, equalFunc, stack); - } - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - function baseIsMatch(object3, source, matchData, customizer) { - var index = matchData.length, length = index, noCustomizer = !customizer; - if (object3 == null) { - return !length; - } - object3 = Object2(object3); - while (index--) { - var data = matchData[index]; - if (noCustomizer && data[2] ? data[1] !== object3[data[0]] : !(data[0] in object3)) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], objValue = object3[key], srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === undefined2 && !(key in object3)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result2 = customizer(objValue, srcValue, key, object3, source, stack); - } - if (!(result2 === undefined2 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) { - return false; - } - } - } - return true; - } - function baseIsNative(value) { - if (!isObject2(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - function baseIsTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - function baseIteratee(value) { - if (typeof value == "function") { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == "object") { - return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); - } - return property(value); - } - function baseKeys(object3) { - if (!isPrototype(object3)) { - return nativeKeys(object3); - } - var result2 = []; - for (var key in Object2(object3)) { - if (hasOwnProperty.call(object3, key) && key != "constructor") { - result2.push(key); - } - } - return result2; - } - function baseKeysIn(object3) { - if (!isObject2(object3)) { - return nativeKeysIn(object3); - } - var isProto = isPrototype(object3), result2 = []; - for (var key in object3) { - if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object3, key)))) { - result2.push(key); - } - } - return result2; - } - function baseLt(value, other) { - return value < other; - } - function baseMap(collection, iteratee2) { - var index = -1, result2 = isArrayLike(collection) ? Array2(collection.length) : []; - baseEach(collection, function(value, key, collection2) { - result2[++index] = iteratee2(value, key, collection2); - }); - return result2; - } - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object3) { - return object3 === source || baseIsMatch(object3, source, matchData); - }; - } - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object3) { - var objValue = get3(object3, path); - return objValue === undefined2 && objValue === srcValue ? hasIn(object3, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - function baseMerge(object3, source, srcIndex, customizer, stack) { - if (object3 === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject2(srcValue)) { - baseMergeDeep(object3, source, key, srcIndex, baseMerge, customizer, stack); - } else { - var newValue = customizer ? customizer(safeGet(object3, key), srcValue, key + "", object3, source, stack) : undefined2; - if (newValue === undefined2) { - newValue = srcValue; - } - assignMergeValue(object3, key, newValue); - } - }, keysIn); - } - function baseMergeDeep(object3, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object3, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); - if (stacked) { - assignMergeValue(object3, key, stacked); - return; - } - var newValue = customizer ? customizer(objValue, srcValue, key + "", object3, source, stack) : undefined2; - var isCommon = newValue === undefined2; - if (isCommon) { - var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } else { - newValue = []; - } - } else if (isPlainObject2(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } else if (!isObject2(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } else { - isCommon = false; - } - } - if (isCommon) { - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack["delete"](srcValue); - } - assignMergeValue(object3, key, newValue); - } - function baseNth(array3, n) { - var length = array3.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array3[n] : undefined2; - } - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee2) { - if (isArray(iteratee2)) { - return function(value) { - return baseGet(value, iteratee2.length === 1 ? iteratee2[0] : iteratee2); - }; - } - return iteratee2; - }); - } else { - iteratees = [identity]; - } - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - var result2 = baseMap(collection, function(value, key, collection2) { - var criteria = arrayMap(iteratees, function(iteratee2) { - return iteratee2(value); - }); - return { criteria, index: ++index, value }; - }); - return baseSortBy(result2, function(object3, other) { - return compareMultiple(object3, other, orders); - }); - } - function basePick(object3, paths) { - return basePickBy(object3, paths, function(value, path) { - return hasIn(object3, path); - }); - } - function basePickBy(object3, paths, predicate) { - var index = -1, length = paths.length, result2 = {}; - while (++index < length) { - var path = paths[index], value = baseGet(object3, path); - if (predicate(value, path)) { - baseSet(result2, castPath(path, object3), value); - } - } - return result2; - } - function basePropertyDeep(path) { - return function(object3) { - return baseGet(object3, path); - }; - } - function basePullAll(array3, values2, iteratee2, comparator) { - var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array3; - if (array3 === values2) { - values2 = copyArray(values2); - } - if (iteratee2) { - seen = arrayMap(array3, baseUnary(iteratee2)); - } - while (++index < length) { - var fromIndex = 0, value = values2[index], computed = iteratee2 ? iteratee2(value) : value; - while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array3) { - splice.call(seen, fromIndex, 1); - } - splice.call(array3, fromIndex, 1); - } - } - return array3; - } - function basePullAt(array3, indexes) { - var length = array3 ? indexes.length : 0, lastIndex = length - 1; - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array3, index, 1); - } else { - baseUnset(array3, index); - } - } - } - return array3; - } - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - function baseRange(start, end, step, fromRight) { - var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result2 = Array2(length); - while (length--) { - result2[fromRight ? length : ++index] = start; - start += step; - } - return result2; - } - function baseRepeat(string5, n) { - var result2 = ""; - if (!string5 || n < 1 || n > MAX_SAFE_INTEGER) { - return result2; - } - do { - if (n % 2) { - result2 += string5; - } - n = nativeFloor(n / 2); - if (n) { - string5 += string5; - } - } while (n); - return result2; - } - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ""); - } - function baseSample(collection) { - return arraySample(values(collection)); - } - function baseSampleSize(collection, n) { - var array3 = values(collection); - return shuffleSelf(array3, baseClamp(n, 0, array3.length)); - } - function baseSet(object3, path, value, customizer) { - if (!isObject2(object3)) { - return object3; - } - path = castPath(path, object3); - var index = -1, length = path.length, lastIndex = length - 1, nested = object3; - while (nested != null && ++index < length) { - var key = toKey(path[index]), newValue = value; - if (key === "__proto__" || key === "constructor" || key === "prototype") { - return object3; - } - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined2; - if (newValue === undefined2) { - newValue = isObject2(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object3; - } - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - var baseSetToString = !defineProperty ? identity : function(func, string5) { - return defineProperty(func, "toString", { - configurable: true, - enumerable: false, - value: constant(string5), - writable: true - }); - }; - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - function baseSlice(array3, start, end) { - var index = -1, length = array3.length; - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : end - start >>> 0; - start >>>= 0; - var result2 = Array2(length); - while (++index < length) { - result2[index] = array3[index + start]; - } - return result2; - } - function baseSome(collection, predicate) { - var result2; - baseEach(collection, function(value, index, collection2) { - result2 = predicate(value, index, collection2); - return !result2; - }); - return !!result2; - } - function baseSortedIndex(array3, value, retHighest) { - var low = 0, high = array3 == null ? low : array3.length; - if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = low + high >>> 1, computed = array3[mid]; - if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array3, value, identity, retHighest); - } - function baseSortedIndexBy(array3, value, iteratee2, retHighest) { - var low = 0, high = array3 == null ? 0 : array3.length; - if (high === 0) { - return 0; - } - value = iteratee2(value); - var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined2; - while (low < high) { - var mid = nativeFloor((low + high) / 2), computed = iteratee2(array3[mid]), othIsDefined = computed !== undefined2, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? computed <= value : computed < value; - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - function baseSortedUniq(array3, iteratee2) { - var index = -1, length = array3.length, resIndex = 0, result2 = []; - while (++index < length) { - var value = array3[index], computed = iteratee2 ? iteratee2(value) : value; - if (!index || !eq(computed, seen)) { - var seen = computed; - result2[resIndex++] = value === 0 ? 0 : value; - } - } - return result2; - } - function baseToNumber(value) { - if (typeof value == "number") { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - function baseToString(value) { - if (typeof value == "string") { - return value; - } - if (isArray(value)) { - return arrayMap(value, baseToString) + ""; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ""; - } - var result2 = value + ""; - return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2; - } - function baseUniq(array3, iteratee2, comparator) { - var index = -1, includes2 = arrayIncludes, length = array3.length, isCommon = true, result2 = [], seen = result2; - if (comparator) { - isCommon = false; - includes2 = arrayIncludesWith; - } else if (length >= LARGE_ARRAY_SIZE) { - var set3 = iteratee2 ? null : createSet(array3); - if (set3) { - return setToArray(set3); - } - isCommon = false; - includes2 = cacheHas; - seen = new SetCache; - } else { - seen = iteratee2 ? [] : result2; - } - outer: - while (++index < length) { - var value = array3[index], computed = iteratee2 ? iteratee2(value) : value; - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee2) { - seen.push(computed); - } - result2.push(value); - } else if (!includes2(seen, computed, comparator)) { - if (seen !== result2) { - seen.push(computed); - } - result2.push(value); - } - } - return result2; - } - function baseUnset(object3, path) { - path = castPath(path, object3); - object3 = parent(object3, path); - return object3 == null || delete object3[toKey(last(path))]; - } - function baseUpdate(object3, path, updater, customizer) { - return baseSet(object3, path, updater(baseGet(object3, path)), customizer); - } - function baseWhile(array3, predicate, isDrop, fromRight) { - var length = array3.length, index = fromRight ? length : -1; - while ((fromRight ? index-- : ++index < length) && predicate(array3[index], index, array3)) {} - return isDrop ? baseSlice(array3, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array3, fromRight ? index + 1 : 0, fromRight ? length : index); - } - function baseWrapperValue(value, actions) { - var result2 = value; - if (result2 instanceof LazyWrapper) { - result2 = result2.value(); - } - return arrayReduce(actions, function(result3, action) { - return action.func.apply(action.thisArg, arrayPush([result3], action.args)); - }, result2); - } - function baseXor(arrays, iteratee2, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, result2 = Array2(length); - while (++index < length) { - var array3 = arrays[index], othIndex = -1; - while (++othIndex < length) { - if (othIndex != index) { - result2[index] = baseDifference(result2[index] || array3, arrays[othIndex], iteratee2, comparator); - } - } - } - return baseUniq(baseFlatten(result2, 1), iteratee2, comparator); - } - function baseZipObject(props, values2, assignFunc) { - var index = -1, length = props.length, valsLength = values2.length, result2 = {}; - while (++index < length) { - var value = index < valsLength ? values2[index] : undefined2; - assignFunc(result2, props[index], value); - } - return result2; - } - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - function castFunction(value) { - return typeof value == "function" ? value : identity; - } - function castPath(value, object3) { - if (isArray(value)) { - return value; - } - return isKey(value, object3) ? [value] : stringToPath(toString(value)); - } - var castRest = baseRest; - function castSlice(array3, start, end) { - var length = array3.length; - end = end === undefined2 ? length : end; - return !start && end >= length ? array3 : baseSlice(array3, start, end); - } - var clearTimeout2 = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, result2 = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - buffer.copy(result2); - return result2; - } - function cloneArrayBuffer(arrayBuffer) { - var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array2(result2).set(new Uint8Array2(arrayBuffer)); - return result2; - } - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - function cloneRegExp(regexp) { - var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result2.lastIndex = regexp.lastIndex; - return result2; - } - function cloneSymbol(symbol2) { - return symbolValueOf ? Object2(symbolValueOf.call(symbol2)) : {}; - } - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined2, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); - var othIsDefined = other !== undefined2, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); - if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) { - return 1; - } - if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) { - return -1; - } - } - return 0; - } - function compareMultiple(object3, other, orders) { - var index = -1, objCriteria = object3.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; - while (++index < length) { - var result2 = compareAscending(objCriteria[index], othCriteria[index]); - if (result2) { - if (index >= ordersLength) { - return result2; - } - var order = orders[index]; - return result2 * (order == "desc" ? -1 : 1); - } - } - return object3.index - other.index; - } - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried; - while (++leftIndex < leftLength) { - result2[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result2[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result2[leftIndex++] = args[argsIndex++]; - } - return result2; - } - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried; - while (++argsIndex < rangeLength) { - result2[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result2[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result2[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result2; - } - function copyArray(source, array3) { - var index = -1, length = source.length; - array3 || (array3 = Array2(length)); - while (++index < length) { - array3[index] = source[index]; - } - return array3; - } - function copyObject(source, props, object3, customizer) { - var isNew = !object3; - object3 || (object3 = {}); - var index = -1, length = props.length; - while (++index < length) { - var key = props[index]; - var newValue = customizer ? customizer(object3[key], source[key], key, object3, source) : undefined2; - if (newValue === undefined2) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object3, key, newValue); - } else { - assignValue(object3, key, newValue); - } - } - return object3; - } - function copySymbols(source, object3) { - return copyObject(source, getSymbols(source), object3); - } - function copySymbolsIn(source, object3) { - return copyObject(source, getSymbolsIn(source), object3); - } - function createAggregator(setter, initializer3) { - return function(collection, iteratee2) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer3 ? initializer3() : {}; - return func(collection, setter, getIteratee(iteratee2, 2), accumulator); - }; - } - function createAssigner(assigner) { - return baseRest(function(object3, sources) { - var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined2, guard = length > 2 ? sources[2] : undefined2; - customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined2; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined2 : customizer; - length = 1; - } - object3 = Object2(object3); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object3, source, index, customizer); - } - } - return object3; - }); - } - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee2) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee2); - } - var length = collection.length, index = fromRight ? length : -1, iterable = Object2(collection); - while (fromRight ? index-- : ++index < length) { - if (iteratee2(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - function createBaseFor(fromRight) { - return function(object3, iteratee2, keysFunc) { - var index = -1, iterable = Object2(object3), props = keysFunc(object3), length = props.length; - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee2(iterable[key], key, iterable) === false) { - break; - } - } - return object3; - }; - } - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - function wrapper() { - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - function createCaseFirst(methodName) { - return function(string5) { - string5 = toString(string5); - var strSymbols = hasUnicode(string5) ? stringToArray(string5) : undefined2; - var chr = strSymbols ? strSymbols[0] : string5.charAt(0); - var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string5.slice(1); - return chr[methodName]() + trailing; - }; - } - function createCompounder(callback) { - return function(string5) { - return arrayReduce(words(deburr(string5).replace(reApos, "")), callback, ""); - }; - } - function createCtor(Ctor) { - return function() { - var args = arguments; - switch (args.length) { - case 0: - return new Ctor; - case 1: - return new Ctor(args[0]); - case 2: - return new Ctor(args[0], args[1]); - case 3: - return new Ctor(args[0], args[1], args[2]); - case 4: - return new Ctor(args[0], args[1], args[2], args[3]); - case 5: - return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args); - return isObject2(result2) ? result2 : thisBinding; - }; - } - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - function wrapper() { - var length = arguments.length, args = Array2(length), index = length, placeholder = getHolder(wrapper); - while (index--) { - args[index] = arguments[index]; - } - var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder); - length -= holders.length; - if (length < arity) { - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined2, args, holders, undefined2, undefined2, arity - length); - } - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object2(collection); - if (!isArrayLike(collection)) { - var iteratee2 = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { - return iteratee2(iterable[key], key, iterable); - }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee2 ? collection[index] : index] : undefined2; - }; - } - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == "wrapper") { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : undefined2; - if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, value = args[0]; - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index2 = 0, result2 = length ? funcs[index2].apply(this, args) : value; - while (++index2 < length) { - result2 = funcs[index2].call(this, result2); - } - return result2; - }; - }); - } - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined2 : createCtor(func); - function wrapper() { - var length = arguments.length, args = Array2(length), index = length; - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary2, arity - length); - } - var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary2 < length) { - args.length = ary2; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - function createInverter(setter, toIteratee) { - return function(object3, iteratee2) { - return baseInverter(object3, setter, toIteratee(iteratee2), {}); - }; - } - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result2; - if (value === undefined2 && other === undefined2) { - return defaultValue; - } - if (value !== undefined2) { - result2 = value; - } - if (other !== undefined2) { - if (result2 === undefined2) { - return other; - } - if (typeof value == "string" || typeof other == "string") { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result2 = operator(value, other); - } - return result2; - }; - } - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee2) { - return apply(iteratee2, thisArg, args); - }); - }); - }); - } - function createPadding(length, chars) { - chars = chars === undefined2 ? " " : baseToString(chars); - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result2 = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length).join("") : result2.slice(0, length); - } - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - function wrapper() { - var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn = this && this !== root && this instanceof wrapper ? Ctor : func; - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != "number" && isIterateeCall(start, end, step)) { - end = step = undefined2; - } - start = toFinite(start); - if (end === undefined2) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined2 ? start < end ? 1 : -1 : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == "string" && typeof other == "string")) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined2, newHoldersRight = isCurry ? undefined2 : holders, newPartials = isCurry ? partials : undefined2, newPartialsRight = isCurry ? undefined2 : partials; - bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG; - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, - bitmask, - thisArg, - newPartials, - newHolders, - newPartialsRight, - newHoldersRight, - argPos, - ary2, - arity - ]; - var result2 = wrapFunc.apply(undefined2, newData); - if (isLaziable(func)) { - setData(result2, newData); - } - result2.placeholder = placeholder; - return setWrapToString(result2, func, bitmask); - } - function createRound(methodName) { - var func = Math2[methodName]; - return function(number5, precision) { - number5 = toNumber(number5); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number5)) { - var pair = (toString(number5) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision)); - pair = (toString(value) + "e").split("e"); - return +(pair[0] + "e" + (+pair[1] - precision)); - } - return func(number5); - }; - } - var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop : function(values2) { - return new Set2(values2); - }; - function createToPairs(keysFunc) { - return function(object3) { - var tag = getTag(object3); - if (tag == mapTag) { - return mapToArray(object3); - } - if (tag == setTag) { - return setToPairs(object3); - } - return baseToPairs(object3, keysFunc(object3)); - }; - } - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined2; - } - ary2 = ary2 === undefined2 ? ary2 : nativeMax(toInteger(ary2), 0); - arity = arity === undefined2 ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, holdersRight = holders; - partials = holders = undefined2; - } - var data = isBindKey ? undefined2 : getData(func); - var newData = [ - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary2, - arity - ]; - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined2 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0); - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result2 = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result2 = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result2 = createPartial(func, bitmask, thisArg, partials); - } else { - result2 = createHybrid.apply(undefined2, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result2, newData), func, bitmask); - } - function customDefaultsAssignIn(objValue, srcValue, key, object3) { - if (objValue === undefined2 || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object3, key)) { - return srcValue; - } - return objValue; - } - function customDefaultsMerge(objValue, srcValue, key, object3, source, stack) { - if (isObject2(objValue) && isObject2(srcValue)) { - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined2, customDefaultsMerge, stack); - stack["delete"](srcValue); - } - return objValue; - } - function customOmitClone(value) { - return isPlainObject2(value) ? undefined2 : value; - } - function equalArrays(array3, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array3.length, othLength = other.length; - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var arrStacked = stack.get(array3); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array3; - } - var index = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache : undefined2; - stack.set(array3, other); - stack.set(other, array3); - while (++index < arrLength) { - var arrValue = array3[index], othValue = other[index]; - if (customizer) { - var compared = isPartial ? customizer(othValue, arrValue, index, other, array3, stack) : customizer(arrValue, othValue, index, array3, other, stack); - } - if (compared !== undefined2) { - if (compared) { - continue; - } - result2 = false; - break; - } - if (seen) { - if (!arraySome(other, function(othValue2, othIndex) { - if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result2 = false; - break; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - result2 = false; - break; - } - } - stack["delete"](array3); - stack["delete"](other); - return result2; - } - function equalByTag(object3, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if (object3.byteLength != other.byteLength || object3.byteOffset != other.byteOffset) { - return false; - } - object3 = object3.buffer; - other = other.buffer; - case arrayBufferTag: - if (object3.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object3), new Uint8Array2(other))) { - return false; - } - return true; - case boolTag: - case dateTag: - case numberTag: - return eq(+object3, +other); - case errorTag: - return object3.name == other.name && object3.message == other.message; - case regexpTag: - case stringTag: - return object3 == other + ""; - case mapTag: - var convert = mapToArray; - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - if (object3.size != other.size && !isPartial) { - return false; - } - var stacked = stack.get(object3); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - stack.set(object3, other); - var result2 = equalArrays(convert(object3), convert(other), bitmask, customizer, equalFunc, stack); - stack["delete"](object3); - return result2; - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object3) == symbolValueOf.call(other); - } - } - return false; - } - function equalObjects(object3, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object3), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var objStacked = stack.get(object3); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object3; - } - var result2 = true; - stack.set(object3, other); - stack.set(other, object3); - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object3[key], othValue = other[key]; - if (customizer) { - var compared = isPartial ? customizer(othValue, objValue, key, other, object3, stack) : customizer(objValue, othValue, key, object3, other, stack); - } - if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { - result2 = false; - break; - } - skipCtor || (skipCtor = key == "constructor"); - } - if (result2 && !skipCtor) { - var objCtor = object3.constructor, othCtor = other.constructor; - if (objCtor != othCtor && (("constructor" in object3) && ("constructor" in other)) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { - result2 = false; - } - } - stack["delete"](object3); - stack["delete"](other); - return result2; - } - function flatRest(func) { - return setToString(overRest(func, undefined2, flatten), func + ""); - } - function getAllKeys(object3) { - return baseGetAllKeys(object3, keys, getSymbols); - } - function getAllKeysIn(object3) { - return baseGetAllKeys(object3, keysIn, getSymbolsIn); - } - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - function getFuncName(func) { - var result2 = func.name + "", array3 = realNames[result2], length = hasOwnProperty.call(realNames, result2) ? array3.length : 0; - while (length--) { - var data = array3[length], otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result2; - } - function getHolder(func) { - var object3 = hasOwnProperty.call(lodash, "placeholder") ? lodash : func; - return object3.placeholder; - } - function getIteratee() { - var result2 = lodash.iteratee || iteratee; - result2 = result2 === iteratee ? baseIteratee : result2; - return arguments.length ? result2(arguments[0], arguments[1]) : result2; - } - function getMapData(map3, key) { - var data = map3.__data__; - return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; - } - function getMatchData(object3) { - var result2 = keys(object3), length = result2.length; - while (length--) { - var key = result2[length], value = object3[key]; - result2[length] = [key, value, isStrictComparable(value)]; - } - return result2; - } - function getNative(object3, key) { - var value = getValue(object3, key); - return baseIsNative(value) ? value : undefined2; - } - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - try { - value[symToStringTag] = undefined2; - var unmasked = true; - } catch (e) {} - var result2 = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result2; - } - var getSymbols = !nativeGetSymbols ? stubArray : function(object3) { - if (object3 == null) { - return []; - } - object3 = Object2(object3); - return arrayFilter(nativeGetSymbols(object3), function(symbol2) { - return propertyIsEnumerable.call(object3, symbol2); - }); - }; - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object3) { - var result2 = []; - while (object3) { - arrayPush(result2, getSymbols(object3)); - object3 = getPrototype(object3); - } - return result2; - }; - var getTag = baseGetTag; - if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2) != setTag || WeakMap2 && getTag(new WeakMap2) != weakMapTag) { - getTag = function(value) { - var result2 = baseGetTag(value), Ctor = result2 == objectTag ? value.constructor : undefined2, ctorString = Ctor ? toSource(Ctor) : ""; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag; - case mapCtorString: - return mapTag; - case promiseCtorString: - return promiseTag; - case setCtorString: - return setTag; - case weakMapCtorString: - return weakMapTag; - } - } - return result2; - }; - } - function getView(start, end, transforms) { - var index = -1, length = transforms.length; - while (++index < length) { - var data = transforms[index], size2 = data.size; - switch (data.type) { - case "drop": - start += size2; - break; - case "dropRight": - end -= size2; - break; - case "take": - end = nativeMin(end, start + size2); - break; - case "takeRight": - start = nativeMax(start, end - size2); - break; - } - } - return { start, end }; - } - function getWrapDetails(source) { - var match2 = source.match(reWrapDetails); - return match2 ? match2[1].split(reSplitDetails) : []; - } - function hasPath(object3, path, hasFunc) { - path = castPath(path, object3); - var index = -1, length = path.length, result2 = false; - while (++index < length) { - var key = toKey(path[index]); - if (!(result2 = object3 != null && hasFunc(object3, key))) { - break; - } - object3 = object3[key]; - } - if (result2 || ++index != length) { - return result2; - } - length = object3 == null ? 0 : object3.length; - return !!length && isLength(length) && isIndex(key, length) && (isArray(object3) || isArguments(object3)); - } - function initCloneArray(array3) { - var length = array3.length, result2 = new array3.constructor(length); - if (length && typeof array3[0] == "string" && hasOwnProperty.call(array3, "index")) { - result2.index = array3.index; - result2.input = array3.input; - } - return result2; - } - function initCloneObject(object3) { - return typeof object3.constructor == "function" && !isPrototype(object3) ? baseCreate(getPrototype(object3)) : {}; - } - function initCloneByTag(object3, tag, isDeep) { - var Ctor = object3.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object3); - case boolTag: - case dateTag: - return new Ctor(+object3); - case dataViewTag: - return cloneDataView(object3, isDeep); - case float32Tag: - case float64Tag: - case int8Tag: - case int16Tag: - case int32Tag: - case uint8Tag: - case uint8ClampedTag: - case uint16Tag: - case uint32Tag: - return cloneTypedArray(object3, isDeep); - case mapTag: - return new Ctor; - case numberTag: - case stringTag: - return new Ctor(object3); - case regexpTag: - return cloneRegExp(object3); - case setTag: - return new Ctor; - case symbolTag: - return cloneSymbol(object3); - } - } - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex]; - details = details.join(length > 2 ? ", " : " "); - return source.replace(reWrapComment, `{ -/* [wrapped with ` + details + `] */ -`); - } - function isFlattenable(value) { - return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); - } - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); - } - function isIterateeCall(value, index, object3) { - if (!isObject2(object3)) { - return false; - } - var type = typeof index; - if (type == "number" ? isArrayLike(object3) && isIndex(index, object3.length) : type == "string" && (index in object3)) { - return eq(object3[index], value); - } - return false; - } - function isKey(value, object3) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object3 != null && value in Object2(object3); - } - function isKeyable(value) { - var type = typeof value; - return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; - } - function isLaziable(func) { - var funcName = getFuncName(func), other = lodash[funcName]; - if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func; - } - var isMaskable = coreJsData ? isFunction : stubFalse; - function isPrototype(value) { - var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto; - return value === proto; - } - function isStrictComparable(value) { - return value === value && !isObject2(value); - } - function matchesStrictComparable(key, srcValue) { - return function(object3) { - if (object3 == null) { - return false; - } - return object3[key] === srcValue && (srcValue !== undefined2 || (key in Object2(object3))); - }; - } - function memoizeCapped(func) { - var result2 = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - var cache = result2.cache; - return result2; - } - function mergeData(data, source) { - var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG; - if (!(isCommon || isCombo)) { - return data; - } - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - value = source[7]; - if (value) { - data[7] = value; - } - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - if (data[9] == null) { - data[9] = source[9]; - } - data[0] = source[0]; - data[1] = newBitmask; - return data; - } - function nativeKeysIn(object3) { - var result2 = []; - if (object3 != null) { - for (var key in Object2(object3)) { - result2.push(key); - } - } - return result2; - } - function objectToString(value) { - return nativeObjectToString.call(value); - } - function overRest(func, start, transform3) { - start = nativeMax(start === undefined2 ? func.length - 1 : start, 0); - return function() { - var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array3 = Array2(length); - while (++index < length) { - array3[index] = args[start + index]; - } - index = -1; - var otherArgs = Array2(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform3(array3); - return apply(func, this, otherArgs); - }; - } - function parent(object3, path) { - return path.length < 2 ? object3 : baseGet(object3, baseSlice(path, 0, -1)); - } - function reorder(array3, indexes) { - var arrLength = array3.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array3); - while (length--) { - var index = indexes[length]; - array3[length] = isIndex(index, arrLength) ? oldArray[index] : undefined2; - } - return array3; - } - function safeGet(object3, key) { - if (key === "constructor" && typeof object3[key] === "function") { - return; - } - if (key == "__proto__") { - return; - } - return object3[key]; - } - var setData = shortOut(baseSetData); - var setTimeout2 = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - var setToString = shortOut(baseSetToString); - function setWrapToString(wrapper, reference, bitmask) { - var source = reference + ""; - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - function shortOut(func) { - var count = 0, lastCalled = 0; - return function() { - var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined2, arguments); - }; - } - function shuffleSelf(array3, size2) { - var index = -1, length = array3.length, lastIndex = length - 1; - size2 = size2 === undefined2 ? length : size2; - while (++index < size2) { - var rand = baseRandom(index, lastIndex), value = array3[rand]; - array3[rand] = array3[index]; - array3[index] = value; - } - array3.length = size2; - return array3; - } - var stringToPath = memoizeCapped(function(string5) { - var result2 = []; - if (string5.charCodeAt(0) === 46) { - result2.push(""); - } - string5.replace(rePropName, function(match2, number5, quote, subString) { - result2.push(quote ? subString.replace(reEscapeChar, "$1") : number5 || match2); - }); - return result2; - }); - function toKey(value) { - if (typeof value == "string" || isSymbol(value)) { - return value; - } - var result2 = value + ""; - return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2; - } - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return func + ""; - } catch (e) {} - } - return ""; - } - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = "_." + pair[0]; - if (bitmask & pair[1] && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result2.__actions__ = copyArray(wrapper.__actions__); - result2.__index__ = wrapper.__index__; - result2.__values__ = wrapper.__values__; - return result2; - } - function chunk(array3, size2, guard) { - if (guard ? isIterateeCall(array3, size2, guard) : size2 === undefined2) { - size2 = 1; - } else { - size2 = nativeMax(toInteger(size2), 0); - } - var length = array3 == null ? 0 : array3.length; - if (!length || size2 < 1) { - return []; - } - var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2)); - while (index < length) { - result2[resIndex++] = baseSlice(array3, index, index += size2); - } - return result2; - } - function compact(array3) { - var index = -1, length = array3 == null ? 0 : array3.length, resIndex = 0, result2 = []; - while (++index < length) { - var value = array3[index]; - if (value) { - result2[resIndex++] = value; - } - } - return result2; - } - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array2(length - 1), array3 = arguments[0], index = length; - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array3) ? copyArray(array3) : [array3], baseFlatten(args, 1)); - } - var difference = baseRest(function(array3, values2) { - return isArrayLikeObject(array3) ? baseDifference(array3, baseFlatten(values2, 1, isArrayLikeObject, true)) : []; - }); - var differenceBy = baseRest(function(array3, values2) { - var iteratee2 = last(values2); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return isArrayLikeObject(array3) ? baseDifference(array3, baseFlatten(values2, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : []; - }); - var differenceWith = baseRest(function(array3, values2) { - var comparator = last(values2); - if (isArrayLikeObject(comparator)) { - comparator = undefined2; - } - return isArrayLikeObject(array3) ? baseDifference(array3, baseFlatten(values2, 1, isArrayLikeObject, true), undefined2, comparator) : []; - }); - function drop(array3, n, guard) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - return baseSlice(array3, n < 0 ? 0 : n, length); - } - function dropRight(array3, n, guard) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array3, 0, n < 0 ? 0 : n); - } - function dropRightWhile(array3, predicate) { - return array3 && array3.length ? baseWhile(array3, getIteratee(predicate, 3), true, true) : []; - } - function dropWhile(array3, predicate) { - return array3 && array3.length ? baseWhile(array3, getIteratee(predicate, 3), true) : []; - } - function fill(array3, value, start, end) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return []; - } - if (start && typeof start != "number" && isIterateeCall(array3, value, start)) { - start = 0; - end = length; - } - return baseFill(array3, value, start, end); - } - function findIndex(array3, predicate, fromIndex) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array3, getIteratee(predicate, 3), index); - } - function findLastIndex(array3, predicate, fromIndex) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined2) { - index = toInteger(fromIndex); - index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return baseFindIndex(array3, getIteratee(predicate, 3), index, true); - } - function flatten(array3) { - var length = array3 == null ? 0 : array3.length; - return length ? baseFlatten(array3, 1) : []; - } - function flattenDeep(array3) { - var length = array3 == null ? 0 : array3.length; - return length ? baseFlatten(array3, INFINITY) : []; - } - function flattenDepth(array3, depth) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return []; - } - depth = depth === undefined2 ? 1 : toInteger(depth); - return baseFlatten(array3, depth); - } - function fromPairs(pairs) { - var index = -1, length = pairs == null ? 0 : pairs.length, result2 = {}; - while (++index < length) { - var pair = pairs[index]; - result2[pair[0]] = pair[1]; - } - return result2; - } - function head(array3) { - return array3 && array3.length ? array3[0] : undefined2; - } - function indexOf(array3, value, fromIndex) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array3, value, index); - } - function initial(array3) { - var length = array3 == null ? 0 : array3.length; - return length ? baseSlice(array3, 0, -1) : []; - } - var intersection2 = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : []; - }); - var intersectionBy = baseRest(function(arrays) { - var iteratee2 = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - if (iteratee2 === last(mapped)) { - iteratee2 = undefined2; - } else { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : []; - }); - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - comparator = typeof comparator == "function" ? comparator : undefined2; - if (comparator) { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : []; - }); - function join6(array3, separator) { - return array3 == null ? "" : nativeJoin.call(array3, separator); - } - function last(array3) { - var length = array3 == null ? 0 : array3.length; - return length ? array3[length - 1] : undefined2; - } - function lastIndexOf(array3, value, fromIndex) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined2) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value ? strictLastIndexOf(array3, value, index) : baseFindIndex(array3, baseIsNaN, index, true); - } - function nth(array3, n) { - return array3 && array3.length ? baseNth(array3, toInteger(n)) : undefined2; - } - var pull = baseRest(pullAll); - function pullAll(array3, values2) { - return array3 && array3.length && values2 && values2.length ? basePullAll(array3, values2) : array3; - } - function pullAllBy(array3, values2, iteratee2) { - return array3 && array3.length && values2 && values2.length ? basePullAll(array3, values2, getIteratee(iteratee2, 2)) : array3; - } - function pullAllWith(array3, values2, comparator) { - return array3 && array3.length && values2 && values2.length ? basePullAll(array3, values2, undefined2, comparator) : array3; - } - var pullAt = flatRest(function(array3, indexes) { - var length = array3 == null ? 0 : array3.length, result2 = baseAt(array3, indexes); - basePullAt(array3, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - return result2; - }); - function remove(array3, predicate) { - var result2 = []; - if (!(array3 && array3.length)) { - return result2; - } - var index = -1, indexes = [], length = array3.length; - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array3[index]; - if (predicate(value, index, array3)) { - result2.push(value); - indexes.push(index); - } - } - basePullAt(array3, indexes); - return result2; - } - function reverse(array3) { - return array3 == null ? array3 : nativeReverse.call(array3); - } - function slice(array3, start, end) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return []; - } - if (end && typeof end != "number" && isIterateeCall(array3, start, end)) { - start = 0; - end = length; - } else { - start = start == null ? 0 : toInteger(start); - end = end === undefined2 ? length : toInteger(end); - } - return baseSlice(array3, start, end); - } - function sortedIndex(array3, value) { - return baseSortedIndex(array3, value); - } - function sortedIndexBy(array3, value, iteratee2) { - return baseSortedIndexBy(array3, value, getIteratee(iteratee2, 2)); - } - function sortedIndexOf(array3, value) { - var length = array3 == null ? 0 : array3.length; - if (length) { - var index = baseSortedIndex(array3, value); - if (index < length && eq(array3[index], value)) { - return index; - } - } - return -1; - } - function sortedLastIndex(array3, value) { - return baseSortedIndex(array3, value, true); - } - function sortedLastIndexBy(array3, value, iteratee2) { - return baseSortedIndexBy(array3, value, getIteratee(iteratee2, 2), true); - } - function sortedLastIndexOf(array3, value) { - var length = array3 == null ? 0 : array3.length; - if (length) { - var index = baseSortedIndex(array3, value, true) - 1; - if (eq(array3[index], value)) { - return index; - } - } - return -1; - } - function sortedUniq(array3) { - return array3 && array3.length ? baseSortedUniq(array3) : []; - } - function sortedUniqBy(array3, iteratee2) { - return array3 && array3.length ? baseSortedUniq(array3, getIteratee(iteratee2, 2)) : []; - } - function tail(array3) { - var length = array3 == null ? 0 : array3.length; - return length ? baseSlice(array3, 1, length) : []; - } - function take(array3, n, guard) { - if (!(array3 && array3.length)) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - return baseSlice(array3, 0, n < 0 ? 0 : n); - } - function takeRight(array3, n, guard) { - var length = array3 == null ? 0 : array3.length; - if (!length) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array3, n < 0 ? 0 : n, length); - } - function takeRightWhile(array3, predicate) { - return array3 && array3.length ? baseWhile(array3, getIteratee(predicate, 3), false, true) : []; - } - function takeWhile(array3, predicate) { - return array3 && array3.length ? baseWhile(array3, getIteratee(predicate, 3)) : []; - } - var union3 = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - var unionBy = baseRest(function(arrays) { - var iteratee2 = last(arrays); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)); - }); - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == "function" ? comparator : undefined2; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator); - }); - function uniq(array3) { - return array3 && array3.length ? baseUniq(array3) : []; - } - function uniqBy(array3, iteratee2) { - return array3 && array3.length ? baseUniq(array3, getIteratee(iteratee2, 2)) : []; - } - function uniqWith(array3, comparator) { - comparator = typeof comparator == "function" ? comparator : undefined2; - return array3 && array3.length ? baseUniq(array3, undefined2, comparator) : []; - } - function unzip(array3) { - if (!(array3 && array3.length)) { - return []; - } - var length = 0; - array3 = arrayFilter(array3, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array3, baseProperty(index)); - }); - } - function unzipWith(array3, iteratee2) { - if (!(array3 && array3.length)) { - return []; - } - var result2 = unzip(array3); - if (iteratee2 == null) { - return result2; - } - return arrayMap(result2, function(group) { - return apply(iteratee2, undefined2, group); - }); - } - var without = baseRest(function(array3, values2) { - return isArrayLikeObject(array3) ? baseDifference(array3, values2) : []; - }); - var xor2 = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - var xorBy = baseRest(function(arrays) { - var iteratee2 = last(arrays); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2)); - }); - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == "function" ? comparator : undefined2; - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined2, comparator); - }); - var zip = baseRest(unzip); - function zipObject(props, values2) { - return baseZipObject(props || [], values2 || [], assignValue); - } - function zipObjectDeep(props, values2) { - return baseZipObject(props || [], values2 || [], baseSet); - } - var zipWith = baseRest(function(arrays) { - var length = arrays.length, iteratee2 = length > 1 ? arrays[length - 1] : undefined2; - iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined2; - return unzipWith(arrays, iteratee2); - }); - function chain(value) { - var result2 = lodash(value); - result2.__chain__ = true; - return result2; - } - function tap(value, interceptor) { - interceptor(value); - return value; - } - function thru(value, interceptor) { - return interceptor(value); - } - var wrapperAt = flatRest(function(paths) { - var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object3) { - return baseAt(object3, paths); - }; - if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - func: thru, - args: [interceptor], - thisArg: undefined2 - }); - return new LodashWrapper(value, this.__chain__).thru(function(array3) { - if (length && !array3.length) { - array3.push(undefined2); - } - return array3; - }); - }); - function wrapperChain() { - return chain(this); - } - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - function wrapperNext() { - if (this.__values__ === undefined2) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, value = done ? undefined2 : this.__values__[this.__index__++]; - return { done, value }; - } - function wrapperToIterator() { - return this; - } - function wrapperPlant(value) { - var result2, parent2 = this; - while (parent2 instanceof baseLodash) { - var clone3 = wrapperClone(parent2); - clone3.__index__ = 0; - clone3.__values__ = undefined2; - if (result2) { - previous.__wrapped__ = clone3; - } else { - result2 = clone3; - } - var previous = clone3; - parent2 = parent2.__wrapped__; - } - previous.__wrapped__ = value; - return result2; - } - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - func: thru, - args: [reverse], - thisArg: undefined2 - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - var countBy = createAggregator(function(result2, value, key) { - if (hasOwnProperty.call(result2, key)) { - ++result2[key]; - } else { - baseAssignValue(result2, key, 1); - } - }); - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined2; - } - return func(collection, getIteratee(predicate, 3)); - } - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - var find = createFind(findIndex); - var findLast = createFind(findLastIndex); - function flatMap(collection, iteratee2) { - return baseFlatten(map2(collection, iteratee2), 1); - } - function flatMapDeep(collection, iteratee2) { - return baseFlatten(map2(collection, iteratee2), INFINITY); - } - function flatMapDepth(collection, iteratee2, depth) { - depth = depth === undefined2 ? 1 : toInteger(depth); - return baseFlatten(map2(collection, iteratee2), depth); - } - function forEach(collection, iteratee2) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee2, 3)); - } - function forEachRight(collection, iteratee2) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee2, 3)); - } - var groupBy = createAggregator(function(result2, value, key) { - if (hasOwnProperty.call(result2, key)) { - result2[key].push(value); - } else { - baseAssignValue(result2, key, [value]); - } - }); - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; - } - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, isFunc = typeof path == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : []; - baseEach(collection, function(value) { - result2[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result2; - }); - var keyBy = createAggregator(function(result2, value, key) { - baseAssignValue(result2, key, value); - }); - function map2(collection, iteratee2) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee2, 3)); - } - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined2 : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - var partition = createAggregator(function(result2, value, key) { - result2[key ? 0 : 1].push(value); - }, function() { - return [[], []]; - }); - function reduce(collection, iteratee2, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; - return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach); - } - function reduceRight(collection, iteratee2, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; - return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight); - } - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - function sampleSize(collection, n, guard) { - if (guard ? isIterateeCall(collection, n, guard) : n === undefined2) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined2; - } - return func(collection, getIteratee(predicate, 3)); - } - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - var now2 = ctxNow || function() { - return root.Date.now(); - }; - function after(n, func) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - function ary(func, n, guard) { - n = guard ? undefined2 : n; - n = func && n == null ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined2, undefined2, undefined2, undefined2, n); - } - function before(n, func) { - var result2; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result2 = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined2; - } - return result2; - }; - } - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - var bindKey = baseRest(function(object3, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object3, partials, holders); - }); - function curry(func, arity, guard) { - arity = guard ? undefined2 : arity; - var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); - result2.placeholder = curry.placeholder; - return result2; - } - function curryRight(func, arity, guard) { - arity = guard ? undefined2 : arity; - var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); - result2.placeholder = curryRight.placeholder; - return result2; - } - function debounce(func, wait, options) { - var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject2(options)) { - leading = !!options.leading; - maxing = "maxWait" in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - function invokeFunc(time3) { - var args = lastArgs, thisArg = lastThis; - lastArgs = lastThis = undefined2; - lastInvokeTime = time3; - result2 = func.apply(thisArg, args); - return result2; - } - function leadingEdge(time3) { - lastInvokeTime = time3; - timerId = setTimeout2(timerExpired, wait); - return leading ? invokeFunc(time3) : result2; - } - function remainingWait(time3) { - var timeSinceLastCall = time3 - lastCallTime, timeSinceLastInvoke = time3 - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; - return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; - } - function shouldInvoke(time3) { - var timeSinceLastCall = time3 - lastCallTime, timeSinceLastInvoke = time3 - lastInvokeTime; - return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; - } - function timerExpired() { - var time3 = now2(); - if (shouldInvoke(time3)) { - return trailingEdge(time3); - } - timerId = setTimeout2(timerExpired, remainingWait(time3)); - } - function trailingEdge(time3) { - timerId = undefined2; - if (trailing && lastArgs) { - return invokeFunc(time3); - } - lastArgs = lastThis = undefined2; - return result2; - } - function cancel() { - if (timerId !== undefined2) { - clearTimeout2(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined2; - } - function flush() { - return timerId === undefined2 ? result2 : trailingEdge(now2()); - } - function debounced() { - var time3 = now2(), isInvoking = shouldInvoke(time3); - lastArgs = arguments; - lastThis = this; - lastCallTime = time3; - if (isInvoking) { - if (timerId === undefined2) { - return leadingEdge(lastCallTime); - } - if (maxing) { - clearTimeout2(timerId); - timerId = setTimeout2(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined2) { - timerId = setTimeout2(timerExpired, wait); - } - return result2; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - function memoize(func, resolver) { - if (typeof func != "function" || resolver != null && typeof resolver != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; - if (cache.has(key)) { - return cache.get(key); - } - var result2 = func.apply(this, args); - memoized.cache = cache.set(key, result2) || cache; - return result2; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - memoize.Cache = MapCache; - function negate(predicate) { - if (typeof predicate != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: - return !predicate.call(this); - case 1: - return !predicate.call(this, args[0]); - case 2: - return !predicate.call(this, args[0], args[1]); - case 3: - return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - function once(func) { - return before(2, func); - } - var overArgs = castRest(function(func, transforms) { - transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, length = nativeMin(args.length, funcsLength); - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - var partial2 = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial2)); - return createWrap(func, WRAP_PARTIAL_FLAG, undefined2, partials, holders); - }); - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders); - }); - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes); - }); - function rest(func, start) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - start = start === undefined2 ? start : toInteger(start); - return baseRest(func, start); - } - function spread(func, start) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - start = start == null ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array3 = args[start], otherArgs = castSlice(args, 0, start); - if (array3) { - arrayPush(otherArgs, array3); - } - return apply(func, this, otherArgs); - }); - } - function throttle(func, wait, options) { - var leading = true, trailing = true; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - if (isObject2(options)) { - leading = "leading" in options ? !!options.leading : leading; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - leading, - maxWait: wait, - trailing - }); - } - function unary(func) { - return ary(func, 1); - } - function wrap(value, wrapper) { - return partial2(castFunction(wrapper), value); - } - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - function clone2(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - function cloneWith(value, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } - function conformsTo(object3, source) { - return source == null || baseConformsTo(object3, source, keys(source)); - } - function eq(value, other) { - return value === other || value !== value && other !== other; - } - var gt = createRelationalOperation(baseGt); - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - var isArguments = baseIsArguments(function() { - return arguments; - }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee"); - }; - var isArray = Array2.isArray; - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - function isBoolean(value) { - return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag; - } - var isBuffer = nativeIsBuffer || stubFalse; - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject2(value); - } - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && (isArray(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - function isEqual(value, other) { - return baseIsEqual(value, other); - } - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - var result2 = customizer ? customizer(value, other) : undefined2; - return result2 === undefined2 ? baseIsEqual(value, other, undefined2, customizer) : !!result2; - } - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject2(value); - } - function isFinite2(value) { - return typeof value == "number" && nativeIsFinite(value); - } - function isFunction(value) { - if (!isObject2(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - function isInteger(value) { - return typeof value == "number" && value == toInteger(value); - } - function isLength(value) { - return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - function isObject2(value) { - var type = typeof value; - return value != null && (type == "object" || type == "function"); - } - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - function isMatch(object3, source) { - return object3 === source || baseIsMatch(object3, source, getMatchData(source)); - } - function isMatchWith(object3, source, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseIsMatch(object3, source, getMatchData(source), customizer); - } - function isNaN2(value) { - return isNumber(value) && value != +value; - } - function isNative(value) { - if (isMaskable(value)) { - throw new Error2(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - function isNull(value) { - return value === null; - } - function isNil(value) { - return value == null; - } - function isNumber(value) { - return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag; - } - function isPlainObject2(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; - } - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - function isString(value) { - return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; - } - function isSymbol(value) { - return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag; - } - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - function isUndefined(value) { - return value === undefined2; - } - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - var lt = createRelationalOperation(baseLt); - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values; - return func(value); - } - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = value < 0 ? -1 : 1; - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - function toInteger(value) { - var result2 = toFinite(value), remainder = result2 % 1; - return result2 === result2 ? remainder ? result2 - remainder : result2 : 0; - } - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - function toNumber(value) { - if (typeof value == "number") { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject2(value)) { - var other = typeof value.valueOf == "function" ? value.valueOf() : value; - value = isObject2(other) ? other + "" : other; - } - if (typeof value != "string") { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; - } - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - function toSafeInteger(value) { - return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0; - } - function toString(value) { - return value == null ? "" : baseToString(value); - } - var assign = createAssigner(function(object3, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object3); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object3, key, source[key]); - } - } - }); - var assignIn = createAssigner(function(object3, source) { - copyObject(source, keysIn(source), object3); - }); - var assignInWith = createAssigner(function(object3, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object3, customizer); - }); - var assignWith = createAssigner(function(object3, source, srcIndex, customizer) { - copyObject(source, keys(source), object3, customizer); - }); - var at = flatRest(baseAt); - function create4(prototype, properties) { - var result2 = baseCreate(prototype); - return properties == null ? result2 : baseAssign(result2, properties); - } - var defaults = baseRest(function(object3, sources) { - object3 = Object2(object3); - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined2; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object3[key]; - if (value === undefined2 || eq(value, objectProto[key]) && !hasOwnProperty.call(object3, key)) { - object3[key] = source[key]; - } - } - } - return object3; - }); - var defaultsDeep = baseRest(function(args) { - args.push(undefined2, customDefaultsMerge); - return apply(mergeWith, undefined2, args); - }); - function findKey(object3, predicate) { - return baseFindKey(object3, getIteratee(predicate, 3), baseForOwn); - } - function findLastKey(object3, predicate) { - return baseFindKey(object3, getIteratee(predicate, 3), baseForOwnRight); - } - function forIn(object3, iteratee2) { - return object3 == null ? object3 : baseFor(object3, getIteratee(iteratee2, 3), keysIn); - } - function forInRight(object3, iteratee2) { - return object3 == null ? object3 : baseForRight(object3, getIteratee(iteratee2, 3), keysIn); - } - function forOwn(object3, iteratee2) { - return object3 && baseForOwn(object3, getIteratee(iteratee2, 3)); - } - function forOwnRight(object3, iteratee2) { - return object3 && baseForOwnRight(object3, getIteratee(iteratee2, 3)); - } - function functions(object3) { - return object3 == null ? [] : baseFunctions(object3, keys(object3)); - } - function functionsIn(object3) { - return object3 == null ? [] : baseFunctions(object3, keysIn(object3)); - } - function get3(object3, path, defaultValue) { - var result2 = object3 == null ? undefined2 : baseGet(object3, path); - return result2 === undefined2 ? defaultValue : result2; - } - function has(object3, path) { - return object3 != null && hasPath(object3, path, baseHas); - } - function hasIn(object3, path) { - return object3 != null && hasPath(object3, path, baseHasIn); - } - var invert = createInverter(function(result2, value, key) { - if (value != null && typeof value.toString != "function") { - value = nativeObjectToString.call(value); - } - result2[value] = key; - }, constant(identity)); - var invertBy = createInverter(function(result2, value, key) { - if (value != null && typeof value.toString != "function") { - value = nativeObjectToString.call(value); - } - if (hasOwnProperty.call(result2, value)) { - result2[value].push(key); - } else { - result2[value] = [key]; - } - }, getIteratee); - var invoke = baseRest(baseInvoke); - function keys(object3) { - return isArrayLike(object3) ? arrayLikeKeys(object3) : baseKeys(object3); - } - function keysIn(object3) { - return isArrayLike(object3) ? arrayLikeKeys(object3, true) : baseKeysIn(object3); - } - function mapKeys(object3, iteratee2) { - var result2 = {}; - iteratee2 = getIteratee(iteratee2, 3); - baseForOwn(object3, function(value, key, object4) { - baseAssignValue(result2, iteratee2(value, key, object4), value); - }); - return result2; - } - function mapValues(object3, iteratee2) { - var result2 = {}; - iteratee2 = getIteratee(iteratee2, 3); - baseForOwn(object3, function(value, key, object4) { - baseAssignValue(result2, key, iteratee2(value, key, object4)); - }); - return result2; - } - var merge2 = createAssigner(function(object3, source, srcIndex) { - baseMerge(object3, source, srcIndex); - }); - var mergeWith = createAssigner(function(object3, source, srcIndex, customizer) { - baseMerge(object3, source, srcIndex, customizer); - }); - var omit2 = flatRest(function(object3, paths) { - var result2 = {}; - if (object3 == null) { - return result2; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object3); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object3, getAllKeysIn(object3), result2); - if (isDeep) { - result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result2, paths[length]); - } - return result2; - }); - function omitBy(object3, predicate) { - return pickBy(object3, negate(getIteratee(predicate))); - } - var pick2 = flatRest(function(object3, paths) { - return object3 == null ? {} : basePick(object3, paths); - }); - function pickBy(object3, predicate) { - if (object3 == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object3), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object3, props, function(value, path) { - return predicate(value, path[0]); - }); - } - function result(object3, path, defaultValue) { - path = castPath(path, object3); - var index = -1, length = path.length; - if (!length) { - length = 1; - object3 = undefined2; - } - while (++index < length) { - var value = object3 == null ? undefined2 : object3[toKey(path[index])]; - if (value === undefined2) { - index = length; - value = defaultValue; - } - object3 = isFunction(value) ? value.call(object3) : value; - } - return object3; - } - function set2(object3, path, value) { - return object3 == null ? object3 : baseSet(object3, path, value); - } - function setWith(object3, path, value, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return object3 == null ? object3 : baseSet(object3, path, value, customizer); - } - var toPairs = createToPairs(keys); - var toPairsIn = createToPairs(keysIn); - function transform2(object3, iteratee2, accumulator) { - var isArr = isArray(object3), isArrLike = isArr || isBuffer(object3) || isTypedArray(object3); - iteratee2 = getIteratee(iteratee2, 4); - if (accumulator == null) { - var Ctor = object3 && object3.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } else if (isObject2(object3)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object3)) : {}; - } else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object3, function(value, index, object4) { - return iteratee2(accumulator, value, index, object4); - }); - return accumulator; - } - function unset(object3, path) { - return object3 == null ? true : baseUnset(object3, path); - } - function update(object3, path, updater) { - return object3 == null ? object3 : baseUpdate(object3, path, castFunction(updater)); - } - function updateWith(object3, path, updater, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return object3 == null ? object3 : baseUpdate(object3, path, castFunction(updater), customizer); - } - function values(object3) { - return object3 == null ? [] : baseValues(object3, keys(object3)); - } - function valuesIn(object3) { - return object3 == null ? [] : baseValues(object3, keysIn(object3)); - } - function clamp(number5, lower, upper) { - if (upper === undefined2) { - upper = lower; - lower = undefined2; - } - if (upper !== undefined2) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined2) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number5), lower, upper); - } - function inRange(number5, start, end) { - start = toFinite(start); - if (end === undefined2) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number5 = toNumber(number5); - return baseInRange(number5, start, end); - } - function random(lower, upper, floating) { - if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined2; - } - if (floating === undefined2) { - if (typeof upper == "boolean") { - floating = upper; - upper = undefined2; - } else if (typeof lower == "boolean") { - floating = lower; - lower = undefined2; - } - } - if (lower === undefined2 && upper === undefined2) { - lower = 0; - upper = 1; - } else { - lower = toFinite(lower); - if (upper === undefined2) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper); - } - return baseRandom(lower, upper); - } - var camelCase = createCompounder(function(result2, word, index) { - word = word.toLowerCase(); - return result2 + (index ? capitalize(word) : word); - }); - function capitalize(string5) { - return upperFirst(toString(string5).toLowerCase()); - } - function deburr(string5) { - string5 = toString(string5); - return string5 && string5.replace(reLatin, deburrLetter).replace(reComboMark, ""); - } - function endsWith(string5, target, position) { - string5 = toString(string5); - target = baseToString(target); - var length = string5.length; - position = position === undefined2 ? length : baseClamp(toInteger(position), 0, length); - var end = position; - position -= target.length; - return position >= 0 && string5.slice(position, end) == target; - } - function escape(string5) { - string5 = toString(string5); - return string5 && reHasUnescapedHtml.test(string5) ? string5.replace(reUnescapedHtml, escapeHtmlChar) : string5; - } - function escapeRegExp(string5) { - string5 = toString(string5); - return string5 && reHasRegExpChar.test(string5) ? string5.replace(reRegExpChar, "\\$&") : string5; - } - var kebabCase = createCompounder(function(result2, word, index) { - return result2 + (index ? "-" : "") + word.toLowerCase(); - }); - var lowerCase = createCompounder(function(result2, word, index) { - return result2 + (index ? " " : "") + word.toLowerCase(); - }); - var lowerFirst = createCaseFirst("toLowerCase"); - function pad(string5, length, chars) { - string5 = toString(string5); - length = toInteger(length); - var strLength = length ? stringSize(string5) : 0; - if (!length || strLength >= length) { - return string5; - } - var mid = (length - strLength) / 2; - return createPadding(nativeFloor(mid), chars) + string5 + createPadding(nativeCeil(mid), chars); - } - function padEnd(string5, length, chars) { - string5 = toString(string5); - length = toInteger(length); - var strLength = length ? stringSize(string5) : 0; - return length && strLength < length ? string5 + createPadding(length - strLength, chars) : string5; - } - function padStart(string5, length, chars) { - string5 = toString(string5); - length = toInteger(length); - var strLength = length ? stringSize(string5) : 0; - return length && strLength < length ? createPadding(length - strLength, chars) + string5 : string5; - } - function parseInt2(string5, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string5).replace(reTrimStart, ""), radix || 0); - } - function repeat(string5, n, guard) { - if (guard ? isIterateeCall(string5, n, guard) : n === undefined2) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string5), n); - } - function replace() { - var args = arguments, string5 = toString(args[0]); - return args.length < 3 ? string5 : string5.replace(args[1], args[2]); - } - var snakeCase = createCompounder(function(result2, word, index) { - return result2 + (index ? "_" : "") + word.toLowerCase(); - }); - function split(string5, separator, limit) { - if (limit && typeof limit != "number" && isIterateeCall(string5, separator, limit)) { - separator = limit = undefined2; - } - limit = limit === undefined2 ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string5 = toString(string5); - if (string5 && (typeof separator == "string" || separator != null && !isRegExp(separator))) { - separator = baseToString(separator); - if (!separator && hasUnicode(string5)) { - return castSlice(stringToArray(string5), 0, limit); - } - } - return string5.split(separator, limit); - } - var startCase = createCompounder(function(result2, word, index) { - return result2 + (index ? " " : "") + upperFirst(word); - }); - function startsWith(string5, target, position) { - string5 = toString(string5); - position = position == null ? 0 : baseClamp(toInteger(position), 0, string5.length); - target = baseToString(target); - return string5.slice(position, position + target.length) == target; - } - function template(string5, options, guard) { - var settings = lodash.templateSettings; - if (guard && isIterateeCall(string5, options, guard)) { - options = undefined2; - } - string5 = toString(string5); - options = assignInWith({}, options, settings, customDefaultsAssignIn); - var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys); - var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; - var reDelimiters = RegExp2((options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$", "g"); - var sourceURL = "//# sourceURL=" + (hasOwnProperty.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + ` -`; - string5.replace(reDelimiters, function(match2, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { - interpolateValue || (interpolateValue = esTemplateValue); - source += string5.slice(index, offset).replace(reUnescapedString, escapeStringChar); - if (escapeValue) { - isEscaping = true; - source += `' + -__e(` + escapeValue + `) + -'`; - } - if (evaluateValue) { - isEvaluating = true; - source += `'; -` + evaluateValue + `; -__p += '`; - } - if (interpolateValue) { - source += `' + -((__t = (` + interpolateValue + `)) == null ? '' : __t) + -'`; - } - index = offset + match2.length; - return match2; - }); - source += `'; -`; - var variable = hasOwnProperty.call(options, "variable") && options.variable; - if (!variable) { - source = `with (obj) { -` + source + ` -} -`; - } else if (reForbiddenIdentifierChars.test(variable)) { - throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT); - } - source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;"); - source = "function(" + (variable || "obj") + `) { -` + (variable ? "" : `obj || (obj = {}); -`) + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? `, __j = Array.prototype.join; -` + `function print() { __p += __j.call(arguments, '') } -` : `; -`) + source + `return __p -}`; - var result2 = attempt(function() { - return Function2(importsKeys, sourceURL + "return " + source).apply(undefined2, importsValues); - }); - result2.source = source; - if (isError(result2)) { - throw result2; - } - return result2; - } - function toLower(value) { - return toString(value).toLowerCase(); - } - function toUpper(value) { - return toString(value).toUpperCase(); - } - function trim(string5, chars, guard) { - string5 = toString(string5); - if (string5 && (guard || chars === undefined2)) { - return baseTrim(string5); - } - if (!string5 || !(chars = baseToString(chars))) { - return string5; - } - var strSymbols = stringToArray(string5), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; - return castSlice(strSymbols, start, end).join(""); - } - function trimEnd(string5, chars, guard) { - string5 = toString(string5); - if (string5 && (guard || chars === undefined2)) { - return string5.slice(0, trimmedEndIndex(string5) + 1); - } - if (!string5 || !(chars = baseToString(chars))) { - return string5; - } - var strSymbols = stringToArray(string5), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; - return castSlice(strSymbols, 0, end).join(""); - } - function trimStart(string5, chars, guard) { - string5 = toString(string5); - if (string5 && (guard || chars === undefined2)) { - return string5.replace(reTrimStart, ""); - } - if (!string5 || !(chars = baseToString(chars))) { - return string5; - } - var strSymbols = stringToArray(string5), start = charsStartIndex(strSymbols, stringToArray(chars)); - return castSlice(strSymbols, start).join(""); - } - function truncate(string5, options) { - var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; - if (isObject2(options)) { - var separator = "separator" in options ? options.separator : separator; - length = "length" in options ? toInteger(options.length) : length; - omission = "omission" in options ? baseToString(options.omission) : omission; - } - string5 = toString(string5); - var strLength = string5.length; - if (hasUnicode(string5)) { - var strSymbols = stringToArray(string5); - strLength = strSymbols.length; - } - if (length >= strLength) { - return string5; - } - var end = length - stringSize(omission); - if (end < 1) { - return omission; - } - var result2 = strSymbols ? castSlice(strSymbols, 0, end).join("") : string5.slice(0, end); - if (separator === undefined2) { - return result2 + omission; - } - if (strSymbols) { - end += result2.length - end; - } - if (isRegExp(separator)) { - if (string5.slice(end).search(separator)) { - var match2, substring = result2; - if (!separator.global) { - separator = RegExp2(separator.source, toString(reFlags.exec(separator)) + "g"); - } - separator.lastIndex = 0; - while (match2 = separator.exec(substring)) { - var newEnd = match2.index; - } - result2 = result2.slice(0, newEnd === undefined2 ? end : newEnd); - } - } else if (string5.indexOf(baseToString(separator), end) != end) { - var index = result2.lastIndexOf(separator); - if (index > -1) { - result2 = result2.slice(0, index); - } - } - return result2 + omission; - } - function unescape2(string5) { - string5 = toString(string5); - return string5 && reHasEscapedHtml.test(string5) ? string5.replace(reEscapedHtml, unescapeHtmlChar) : string5; - } - var upperCase = createCompounder(function(result2, word, index) { - return result2 + (index ? " " : "") + word.toUpperCase(); - }); - var upperFirst = createCaseFirst("toUpperCase"); - function words(string5, pattern, guard) { - string5 = toString(string5); - pattern = guard ? undefined2 : pattern; - if (pattern === undefined2) { - return hasUnicodeWord(string5) ? unicodeWords(string5) : asciiWords(string5); - } - return string5.match(pattern) || []; - } - var attempt = baseRest(function(func, args) { - try { - return apply(func, undefined2, args); - } catch (e) { - return isError(e) ? e : new Error2(e); - } - }); - var bindAll = flatRest(function(object3, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object3, key, bind(object3[key], object3)); - }); - return object3; - }); - function cond(pairs) { - var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee(); - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); - } - function conforms(source) { - return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); - } - function constant(value) { - return function() { - return value; - }; - } - function defaultTo(value, defaultValue) { - return value == null || value !== value ? defaultValue : value; - } - var flow = createFlow(); - var flowRight = createFlow(true); - function identity(value) { - return value; - } - function iteratee(func) { - return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG)); - } - function matches(source) { - return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); - } - function matchesProperty(path, srcValue) { - return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); - } - var method = baseRest(function(path, args) { - return function(object3) { - return baseInvoke(object3, path, args); - }; - }); - var methodOf = baseRest(function(object3, args) { - return function(path) { - return baseInvoke(object3, path, args); - }; - }); - function mixin(object3, source, options) { - var props = keys(source), methodNames = baseFunctions(source, props); - if (options == null && !(isObject2(source) && (methodNames.length || !props.length))) { - options = source; - source = object3; - object3 = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain2 = !(isObject2(options) && ("chain" in options)) || !!options.chain, isFunc = isFunction(object3); - arrayEach(methodNames, function(methodName) { - var func = source[methodName]; - object3[methodName] = func; - if (isFunc) { - object3.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain2 || chainAll) { - var result2 = object3(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__); - actions.push({ func, args: arguments, thisArg: object3 }); - result2.__chain__ = chainAll; - return result2; - } - return func.apply(object3, arrayPush([this.value()], arguments)); - }; - } - }); - return object3; - } - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - function noop() {} - function nthArg(n) { - n = toInteger(n); - return baseRest(function(args) { - return baseNth(args, n); - }); - } - var over = createOver(arrayMap); - var overEvery = createOver(arrayEvery); - var overSome = createOver(arraySome); - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } - function propertyOf(object3) { - return function(path) { - return object3 == null ? undefined2 : baseGet(object3, path); - }; - } - var range = createRange(); - var rangeRight = createRange(true); - function stubArray() { - return []; - } - function stubFalse() { - return false; - } - function stubObject() { - return {}; - } - function stubString() { - return ""; - } - function stubTrue() { - return true; - } - function times(n, iteratee2) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER) { - return []; - } - var index = MAX_ARRAY_LENGTH, length = nativeMin(n, MAX_ARRAY_LENGTH); - iteratee2 = getIteratee(iteratee2); - n -= MAX_ARRAY_LENGTH; - var result2 = baseTimes(length, iteratee2); - while (++index < n) { - iteratee2(index); - } - return result2; - } - function toPath(value) { - if (isArray(value)) { - return arrayMap(value, toKey); - } - return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); - } - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - var add = createMathOperation(function(augend, addend) { - return augend + addend; - }, 0); - var ceil = createRound("ceil"); - var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; - }, 1); - var floor = createRound("floor"); - function max(array3) { - return array3 && array3.length ? baseExtremum(array3, identity, baseGt) : undefined2; - } - function maxBy(array3, iteratee2) { - return array3 && array3.length ? baseExtremum(array3, getIteratee(iteratee2, 2), baseGt) : undefined2; - } - function mean(array3) { - return baseMean(array3, identity); - } - function meanBy(array3, iteratee2) { - return baseMean(array3, getIteratee(iteratee2, 2)); - } - function min(array3) { - return array3 && array3.length ? baseExtremum(array3, identity, baseLt) : undefined2; - } - function minBy(array3, iteratee2) { - return array3 && array3.length ? baseExtremum(array3, getIteratee(iteratee2, 2), baseLt) : undefined2; - } - var multiply = createMathOperation(function(multiplier, multiplicand) { - return multiplier * multiplicand; - }, 1); - var round = createRound("round"); - var subtract = createMathOperation(function(minuend, subtrahend) { - return minuend - subtrahend; - }, 0); - function sum(array3) { - return array3 && array3.length ? baseSum(array3, identity) : 0; - } - function sumBy(array3, iteratee2) { - return array3 && array3.length ? baseSum(array3, getIteratee(iteratee2, 2)) : 0; - } - lodash.after = after; - lodash.ary = ary; - lodash.assign = assign; - lodash.assignIn = assignIn; - lodash.assignInWith = assignInWith; - lodash.assignWith = assignWith; - lodash.at = at; - lodash.before = before; - lodash.bind = bind; - lodash.bindAll = bindAll; - lodash.bindKey = bindKey; - lodash.castArray = castArray; - lodash.chain = chain; - lodash.chunk = chunk; - lodash.compact = compact; - lodash.concat = concat; - lodash.cond = cond; - lodash.conforms = conforms; - lodash.constant = constant; - lodash.countBy = countBy; - lodash.create = create4; - lodash.curry = curry; - lodash.curryRight = curryRight; - lodash.debounce = debounce; - lodash.defaults = defaults; - lodash.defaultsDeep = defaultsDeep; - lodash.defer = defer; - lodash.delay = delay; - lodash.difference = difference; - lodash.differenceBy = differenceBy; - lodash.differenceWith = differenceWith; - lodash.drop = drop; - lodash.dropRight = dropRight; - lodash.dropRightWhile = dropRightWhile; - lodash.dropWhile = dropWhile; - lodash.fill = fill; - lodash.filter = filter; - lodash.flatMap = flatMap; - lodash.flatMapDeep = flatMapDeep; - lodash.flatMapDepth = flatMapDepth; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.flattenDepth = flattenDepth; - lodash.flip = flip; - lodash.flow = flow; - lodash.flowRight = flowRight; - lodash.fromPairs = fromPairs; - lodash.functions = functions; - lodash.functionsIn = functionsIn; - lodash.groupBy = groupBy; - lodash.initial = initial; - lodash.intersection = intersection2; - lodash.intersectionBy = intersectionBy; - lodash.intersectionWith = intersectionWith; - lodash.invert = invert; - lodash.invertBy = invertBy; - lodash.invokeMap = invokeMap; - lodash.iteratee = iteratee; - lodash.keyBy = keyBy; - lodash.keys = keys; - lodash.keysIn = keysIn; - lodash.map = map2; - lodash.mapKeys = mapKeys; - lodash.mapValues = mapValues; - lodash.matches = matches; - lodash.matchesProperty = matchesProperty; - lodash.memoize = memoize; - lodash.merge = merge2; - lodash.mergeWith = mergeWith; - lodash.method = method; - lodash.methodOf = methodOf; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.nthArg = nthArg; - lodash.omit = omit2; - lodash.omitBy = omitBy; - lodash.once = once; - lodash.orderBy = orderBy; - lodash.over = over; - lodash.overArgs = overArgs; - lodash.overEvery = overEvery; - lodash.overSome = overSome; - lodash.partial = partial2; - lodash.partialRight = partialRight; - lodash.partition = partition; - lodash.pick = pick2; - lodash.pickBy = pickBy; - lodash.property = property; - lodash.propertyOf = propertyOf; - lodash.pull = pull; - lodash.pullAll = pullAll; - lodash.pullAllBy = pullAllBy; - lodash.pullAllWith = pullAllWith; - lodash.pullAt = pullAt; - lodash.range = range; - lodash.rangeRight = rangeRight; - lodash.rearg = rearg; - lodash.reject = reject; - lodash.remove = remove; - lodash.rest = rest; - lodash.reverse = reverse; - lodash.sampleSize = sampleSize; - lodash.set = set2; - lodash.setWith = setWith; - lodash.shuffle = shuffle; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.sortedUniq = sortedUniq; - lodash.sortedUniqBy = sortedUniqBy; - lodash.split = split; - lodash.spread = spread; - lodash.tail = tail; - lodash.take = take; - lodash.takeRight = takeRight; - lodash.takeRightWhile = takeRightWhile; - lodash.takeWhile = takeWhile; - lodash.tap = tap; - lodash.throttle = throttle; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.toPairs = toPairs; - lodash.toPairsIn = toPairsIn; - lodash.toPath = toPath; - lodash.toPlainObject = toPlainObject; - lodash.transform = transform2; - lodash.unary = unary; - lodash.union = union3; - lodash.unionBy = unionBy; - lodash.unionWith = unionWith; - lodash.uniq = uniq; - lodash.uniqBy = uniqBy; - lodash.uniqWith = uniqWith; - lodash.unset = unset; - lodash.unzip = unzip; - lodash.unzipWith = unzipWith; - lodash.update = update; - lodash.updateWith = updateWith; - lodash.values = values; - lodash.valuesIn = valuesIn; - lodash.without = without; - lodash.words = words; - lodash.wrap = wrap; - lodash.xor = xor2; - lodash.xorBy = xorBy; - lodash.xorWith = xorWith; - lodash.zip = zip; - lodash.zipObject = zipObject; - lodash.zipObjectDeep = zipObjectDeep; - lodash.zipWith = zipWith; - lodash.entries = toPairs; - lodash.entriesIn = toPairsIn; - lodash.extend = assignIn; - lodash.extendWith = assignInWith; - mixin(lodash, lodash); - lodash.add = add; - lodash.attempt = attempt; - lodash.camelCase = camelCase; - lodash.capitalize = capitalize; - lodash.ceil = ceil; - lodash.clamp = clamp; - lodash.clone = clone2; - lodash.cloneDeep = cloneDeep; - lodash.cloneDeepWith = cloneDeepWith; - lodash.cloneWith = cloneWith; - lodash.conformsTo = conformsTo; - lodash.deburr = deburr; - lodash.defaultTo = defaultTo; - lodash.divide = divide; - lodash.endsWith = endsWith; - lodash.eq = eq; - lodash.escape = escape; - lodash.escapeRegExp = escapeRegExp; - lodash.every = every; - lodash.find = find; - lodash.findIndex = findIndex; - lodash.findKey = findKey; - lodash.findLast = findLast; - lodash.findLastIndex = findLastIndex; - lodash.findLastKey = findLastKey; - lodash.floor = floor; - lodash.forEach = forEach; - lodash.forEachRight = forEachRight; - lodash.forIn = forIn; - lodash.forInRight = forInRight; - lodash.forOwn = forOwn; - lodash.forOwnRight = forOwnRight; - lodash.get = get3; - lodash.gt = gt; - lodash.gte = gte; - lodash.has = has; - lodash.hasIn = hasIn; - lodash.head = head; - lodash.identity = identity; - lodash.includes = includes; - lodash.indexOf = indexOf; - lodash.inRange = inRange; - lodash.invoke = invoke; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isArrayBuffer = isArrayBuffer; - lodash.isArrayLike = isArrayLike; - lodash.isArrayLikeObject = isArrayLikeObject; - lodash.isBoolean = isBoolean; - lodash.isBuffer = isBuffer; - lodash.isDate = isDate; - lodash.isElement = isElement; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isEqualWith = isEqualWith; - lodash.isError = isError; - lodash.isFinite = isFinite2; - lodash.isFunction = isFunction; - lodash.isInteger = isInteger; - lodash.isLength = isLength; - lodash.isMap = isMap; - lodash.isMatch = isMatch; - lodash.isMatchWith = isMatchWith; - lodash.isNaN = isNaN2; - lodash.isNative = isNative; - lodash.isNil = isNil; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject2; - lodash.isObjectLike = isObjectLike; - lodash.isPlainObject = isPlainObject2; - lodash.isRegExp = isRegExp; - lodash.isSafeInteger = isSafeInteger; - lodash.isSet = isSet; - lodash.isString = isString; - lodash.isSymbol = isSymbol; - lodash.isTypedArray = isTypedArray; - lodash.isUndefined = isUndefined; - lodash.isWeakMap = isWeakMap; - lodash.isWeakSet = isWeakSet; - lodash.join = join6; - lodash.kebabCase = kebabCase; - lodash.last = last; - lodash.lastIndexOf = lastIndexOf; - lodash.lowerCase = lowerCase; - lodash.lowerFirst = lowerFirst; - lodash.lt = lt; - lodash.lte = lte; - lodash.max = max; - lodash.maxBy = maxBy; - lodash.mean = mean; - lodash.meanBy = meanBy; - lodash.min = min; - lodash.minBy = minBy; - lodash.stubArray = stubArray; - lodash.stubFalse = stubFalse; - lodash.stubObject = stubObject; - lodash.stubString = stubString; - lodash.stubTrue = stubTrue; - lodash.multiply = multiply; - lodash.nth = nth; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.now = now2; - lodash.pad = pad; - lodash.padEnd = padEnd; - lodash.padStart = padStart; - lodash.parseInt = parseInt2; - lodash.random = random; - lodash.reduce = reduce; - lodash.reduceRight = reduceRight; - lodash.repeat = repeat; - lodash.replace = replace; - lodash.result = result; - lodash.round = round; - lodash.runInContext = runInContext; - lodash.sample = sample; - lodash.size = size; - lodash.snakeCase = snakeCase; - lodash.some = some; - lodash.sortedIndex = sortedIndex; - lodash.sortedIndexBy = sortedIndexBy; - lodash.sortedIndexOf = sortedIndexOf; - lodash.sortedLastIndex = sortedLastIndex; - lodash.sortedLastIndexBy = sortedLastIndexBy; - lodash.sortedLastIndexOf = sortedLastIndexOf; - lodash.startCase = startCase; - lodash.startsWith = startsWith; - lodash.subtract = subtract; - lodash.sum = sum; - lodash.sumBy = sumBy; - lodash.template = template; - lodash.times = times; - lodash.toFinite = toFinite; - lodash.toInteger = toInteger; - lodash.toLength = toLength; - lodash.toLower = toLower; - lodash.toNumber = toNumber; - lodash.toSafeInteger = toSafeInteger; - lodash.toString = toString; - lodash.toUpper = toUpper; - lodash.trim = trim; - lodash.trimEnd = trimEnd; - lodash.trimStart = trimStart; - lodash.truncate = truncate; - lodash.unescape = unescape2; - lodash.uniqueId = uniqueId; - lodash.upperCase = upperCase; - lodash.upperFirst = upperFirst; - lodash.each = forEach; - lodash.eachRight = forEachRight; - lodash.first = head; - mixin(lodash, function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }(), { chain: false }); - lodash.VERSION = VERSION; - arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) { - lodash[methodName].placeholder = lodash; - }); - arrayEach(["drop", "take"], function(methodName, index) { - LazyWrapper.prototype[methodName] = function(n) { - n = n === undefined2 ? 1 : nativeMax(toInteger(n), 0); - var result2 = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone(); - if (result2.__filtered__) { - result2.__takeCount__ = nativeMin(n, result2.__takeCount__); - } else { - result2.__views__.push({ - size: nativeMin(n, MAX_ARRAY_LENGTH), - type: methodName + (result2.__dir__ < 0 ? "Right" : "") - }); - } - return result2; - }; - LazyWrapper.prototype[methodName + "Right"] = function(n) { - return this.reverse()[methodName](n).reverse(); - }; - }); - arrayEach(["filter", "map", "takeWhile"], function(methodName, index) { - var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; - LazyWrapper.prototype[methodName] = function(iteratee2) { - var result2 = this.clone(); - result2.__iteratees__.push({ - iteratee: getIteratee(iteratee2, 3), - type - }); - result2.__filtered__ = result2.__filtered__ || isFilter; - return result2; - }; - }); - arrayEach(["head", "last"], function(methodName, index) { - var takeName = "take" + (index ? "Right" : ""); - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; - }; - }); - arrayEach(["initial", "tail"], function(methodName, index) { - var dropName = "drop" + (index ? "" : "Right"); - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); - }; - }); - LazyWrapper.prototype.compact = function() { - return this.filter(identity); - }; - LazyWrapper.prototype.find = function(predicate) { - return this.filter(predicate).head(); - }; - LazyWrapper.prototype.findLast = function(predicate) { - return this.reverse().find(predicate); - }; - LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { - if (typeof path == "function") { - return new LazyWrapper(this); - } - return this.map(function(value) { - return baseInvoke(value, path, args); - }); - }); - LazyWrapper.prototype.reject = function(predicate) { - return this.filter(negate(getIteratee(predicate))); - }; - LazyWrapper.prototype.slice = function(start, end) { - start = toInteger(start); - var result2 = this; - if (result2.__filtered__ && (start > 0 || end < 0)) { - return new LazyWrapper(result2); - } - if (start < 0) { - result2 = result2.takeRight(-start); - } else if (start) { - result2 = result2.drop(start); - } - if (end !== undefined2) { - end = toInteger(end); - result2 = end < 0 ? result2.dropRight(-end) : result2.take(end - start); - } - return result2; - }; - LazyWrapper.prototype.takeRightWhile = function(predicate) { - return this.reverse().takeWhile(predicate).reverse(); - }; - LazyWrapper.prototype.toArray = function() { - return this.take(MAX_ARRAY_LENGTH); - }; - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName); - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray(value); - var interceptor = function(value2) { - var result3 = lodashFunc.apply(lodash, arrayPush([value2], args)); - return isTaker && chainAll ? result3[0] : result3; - }; - if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) { - isLazy = useLazy = false; - } - var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid; - if (!retUnwrapped && useLazy) { - value = onlyLazy ? value : new LazyWrapper(this); - var result2 = func.apply(value, args); - result2.__actions__.push({ func: thru, args: [interceptor], thisArg: undefined2 }); - return new LodashWrapper(result2, chainAll); - } - if (isUnwrapped && onlyLazy) { - return func.apply(this, args); - } - result2 = this.thru(interceptor); - return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2; - }; - }); - arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) { - var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName); - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value2) { - return func.apply(isArray(value2) ? value2 : [], args); - }); - }; - }); - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = lodashFunc.name + ""; - if (!hasOwnProperty.call(realNames, key)) { - realNames[key] = []; - } - realNames[key].push({ name: methodName, func: lodashFunc }); - } - }); - realNames[createHybrid(undefined2, WRAP_BIND_KEY_FLAG).name] = [{ - name: "wrapper", - func: undefined2 - }]; - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; - lodash.prototype.at = wrapperAt; - lodash.prototype.chain = wrapperChain; - lodash.prototype.commit = wrapperCommit; - lodash.prototype.next = wrapperNext; - lodash.prototype.plant = wrapperPlant; - lodash.prototype.reverse = wrapperReverse; - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - lodash.prototype.first = lodash.prototype.head; - if (symIterator) { - lodash.prototype[symIterator] = wrapperToIterator; - } - return lodash; - }; - var _ = runInContext(); - if (typeof define == "function" && typeof define.amd == "object" && define.amd) { - root._ = _; - define(function() { - return _; - }); - } else if (freeModule) { - (freeModule.exports = _)._ = _; - freeExports._ = _; - } else { - root._ = _; - } - }).call(exports); -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-llamaindex@0.21.0/node_modules/@traceloop/instrumentation-llamaindex/dist/index.mjs -function bindAsyncGenerator(ctx, generator) { - var _a2; - return { - next: import_api43.context.bind(ctx, generator.next.bind(generator)), - return: import_api43.context.bind(ctx, generator.return.bind(generator)), - throw: import_api43.context.bind(ctx, generator.throw.bind(generator)), - [Symbol.asyncIterator]() { - return bindAsyncGenerator(ctx, generator[Symbol.asyncIterator]()); - }, - [Symbol.asyncDispose]: ((_a2 = generator[Symbol.asyncDispose]) === null || _a2 === undefined ? undefined : _a2.bind(generator)) || (() => Promise.resolve()) - }; -} -function generatorWrapper(streamingResult, ctx, fn) { - return __asyncGenerator(this, arguments, function* generatorWrapper_1() { - var _a2, e_1, _b, _c; - try { - for (var _d = true, _e = __asyncValues(bindAsyncGenerator(ctx, streamingResult)), _f;_f = yield __await(_e.next()), _a2 = _f.done, !_a2; _d = true) { - _c = _f.value; - _d = false; - const chunk = _c; - yield yield __await(chunk); - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (!_d && !_a2 && (_b = _e.return)) - yield __await(_b.call(_e)); - } finally { - if (e_1) - throw e_1.error; - } - } - fn(); - }); -} -function llmGeneratorWrapper(streamingResult, ctx, fn) { - return __asyncGenerator(this, arguments, function* llmGeneratorWrapper_1() { - var _a2, e_2, _b, _c; - let message = ""; - try { - for (var _d = true, _e = __asyncValues(bindAsyncGenerator(ctx, streamingResult)), _f;_f = yield __await(_e.next()), _a2 = _f.done, !_a2; _d = true) { - _c = _f.value; - _d = false; - const messageChunk = _c; - if (messageChunk.delta) { - message += messageChunk.delta; - } - if (messageChunk.text) { - message += messageChunk.text; - } - yield yield __await(messageChunk); - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (!_d && !_a2 && (_b = _e.return)) - yield __await(_b.call(_e)); - } finally { - if (e_2) - throw e_2.error; - } - } - fn(message); - }); -} -function genericWrapper(className, methodName, kind, tracer, shouldSendPrompts2) { - return (original) => { - return function method(...args) { - const params = args[0]; - const streaming = params && params.stream; - const name = `${lodash.snakeCase(className)}.${lodash.snakeCase(methodName)}`; - const span = tracer().startSpan(`${name}`, {}, import_api43.context.active()); - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.TRACELOOP_SPAN_KIND, kind); - if (kind === import_ai_semantic_conventions4.TraceloopSpanKindValues.WORKFLOW) { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.TRACELOOP_WORKFLOW_NAME, name); - } - if (shouldSendPrompts2) { - try { - if (args.length === 1 && typeof args[0] === "object" && !(args[0] instanceof Map)) { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.TRACELOOP_ENTITY_INPUT, JSON.stringify({ args: [], kwargs: args[0] })); - } else { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.TRACELOOP_ENTITY_INPUT, JSON.stringify({ - args: args.map((arg) => arg instanceof Map ? Array.from(arg.entries()) : arg), - kwargs: {} - })); - } - } catch (_a2) {} - } - const execContext = import_api43.trace.setSpan(import_api43.context.active(), span); - const execPromise = import_instrumentation3.safeExecuteInTheMiddle(() => { - return import_api43.context.with(execContext, () => { - return original.apply(this, args); - }); - }, () => {}); - const wrappedPromise = execPromise.then((result) => { - return new Promise((resolve2) => { - if (streaming) { - result = generatorWrapper(result, execContext, () => { - span.setStatus({ code: import_api43.SpanStatusCode.OK }); - span.end(); - }); - resolve2(result); - } else { - span.setStatus({ code: import_api43.SpanStatusCode.OK }); - try { - if (shouldSendPrompts2) { - if (result instanceof Map) { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.TRACELOOP_ENTITY_OUTPUT, JSON.stringify(Array.from(result.entries()))); - } else { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.TRACELOOP_ENTITY_OUTPUT, JSON.stringify(result)); - } - } - } finally { - span.end(); - resolve2(result); - } - } - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api43.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - reject(error48); - }); - }); - return import_api43.context.bind(execContext, wrappedPromise); - }; - }; -} - -class CustomLLMInstrumentation { - constructor(config2, diag12, tracer) { - this.config = config2; - this.diag = diag12; - this.tracer = tracer; - } - chatWrapper({ className }) { - const plugin = this; - return (original) => { - return function method(...args) { - var _a2, _b; - const params = args[0]; - const messages = params === null || params === undefined ? undefined : params.messages; - const streaming = params === null || params === undefined ? undefined : params.stream; - const span = plugin.tracer().startSpan(`llamaindex.${lodash.snakeCase(className)}.chat`, { - kind: import_api43.SpanKind.CLIENT - }); - try { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.LLM_SYSTEM, className); - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.LLM_REQUEST_MODEL, this.metadata.model); - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.LLM_REQUEST_TYPE, "chat"); - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.LLM_REQUEST_TOP_P, this.metadata.topP); - if (shouldSendPrompts(plugin.config)) { - for (const messageIdx in messages) { - const content = messages[messageIdx].content; - if (typeof content === "string") { - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_PROMPTS}.${messageIdx}.content`, content); - } else if (content[0].type === "text") { - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_PROMPTS}.${messageIdx}.content`, content[0].text); - } - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_PROMPTS}.${messageIdx}.role`, messages[messageIdx].role); - } - } - } catch (e) { - plugin.diag.warn(e); - (_b = (_a2 = plugin.config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - const execContext = import_api43.trace.setSpan(import_api43.context.active(), span); - const execPromise = import_instrumentation3.safeExecuteInTheMiddle(() => { - return import_api43.context.with(execContext, () => { - return original.apply(this, args); - }); - }, () => {}); - const wrappedPromise = execPromise.then((result) => { - return new Promise((resolve2) => { - if (streaming) { - result = plugin.handleStreamingResponse(result, span, execContext, this.metadata); - } else { - result = plugin.handleResponse(result, span, this.metadata); - } - resolve2(result); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api43.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - reject(error48); - }); - }); - return import_api43.context.bind(execContext, wrappedPromise); - }; - }; - } - handleResponse(result, span, metadata) { - var _a2, _b; - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.LLM_RESPONSE_MODEL, metadata.model); - if (!shouldSendPrompts(this.config)) { - span.setStatus({ code: import_api43.SpanStatusCode.OK }); - span.end(); - return result; - } - try { - if (result.message) { - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_COMPLETIONS}.0.role`, result.message.role); - const content = result.message.content; - if (typeof content === "string") { - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_COMPLETIONS}.0.content`, content); - } else if (content[0].type === "text") { - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_COMPLETIONS}.0.content`, content[0].text); - } - span.setStatus({ code: import_api43.SpanStatusCode.OK }); - } - } catch (e) { - this.diag.warn(e); - (_b = (_a2 = this.config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - span.end(); - return result; - } - handleStreamingResponse(result, span, execContext, metadata) { - span.setAttribute(import_ai_semantic_conventions4.SpanAttributes.LLM_RESPONSE_MODEL, metadata.model); - if (!shouldSendPrompts(this.config)) { - span.setStatus({ code: import_api43.SpanStatusCode.OK }); - span.end(); - return result; - } - return llmGeneratorWrapper(result, execContext, (message) => { - span.setAttribute(`${import_ai_semantic_conventions4.SpanAttributes.LLM_COMPLETIONS}.0.content`, message); - span.setStatus({ code: import_api43.SpanStatusCode.OK }); - span.end(); - }); - } -} -var import_instrumentation3, lodash, import_api43, import_ai_semantic_conventions4, shouldSendPrompts = (config2) => { - const contextShouldSendPrompts = import_api43.context.active().getValue(import_ai_semantic_conventions4.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return !!contextShouldSendPrompts; - } - return config2.traceContent !== undefined ? config2.traceContent : true; -}, version4 = "0.21.0", LlamaIndexInstrumentation; -var init_dist8 = __esm(() => { - init_modules(); - import_instrumentation3 = __toESM(require_src97(), 1); - lodash = __toESM(require_lodash2(), 1); - import_api43 = __toESM(require_src(), 1); - import_ai_semantic_conventions4 = __toESM(require_src2(), 1); - LlamaIndexInstrumentation = class LlamaIndexInstrumentation extends import_instrumentation3.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-llamaindex", version4, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - manuallyInstrument(module) { - this._diag.debug("Manually instrumenting llamaindex"); - this.patch(module); - } - init() { - const llamaindexModule = new import_instrumentation3.InstrumentationNodeModuleDefinition("llamaindex", [">=0.1.0"], this.patch.bind(this), this.unpatch.bind(this)); - const openaiModule = new import_instrumentation3.InstrumentationNodeModuleDefinition("@llamaindex/openai", [">=0.1.0"], this.patchOpenAI.bind(this), this.unpatchOpenAI.bind(this)); - return [llamaindexModule, openaiModule]; - } - isLLM(llm) { - return llm && llm.complete !== undefined && llm.chat !== undefined; - } - isEmbedding(embedding) { - return !!(embedding === null || embedding === undefined ? undefined : embedding.getQueryEmbedding); - } - isSynthesizer(synthesizer) { - return synthesizer && synthesizer.synthesize !== undefined; - } - isRetriever(retriever) { - return retriever && retriever.retrieve !== undefined; - } - patch(moduleExports, moduleVersion) { - this._diag.debug(`Patching llamaindex@${moduleVersion}`); - const customLLMInstrumentation = new CustomLLMInstrumentation(this._config, this._diag, () => this.tracer); - this._wrap(moduleExports.RetrieverQueryEngine.prototype, "query", genericWrapper(moduleExports.RetrieverQueryEngine.name, "query", import_ai_semantic_conventions4.TraceloopSpanKindValues.WORKFLOW, () => this.tracer, shouldSendPrompts(this._config))); - this._wrap(moduleExports.ContextChatEngine.prototype, "chat", genericWrapper(moduleExports.ContextChatEngine.name, "chat", import_ai_semantic_conventions4.TraceloopSpanKindValues.WORKFLOW, () => this.tracer, shouldSendPrompts(this._config))); - for (const key in moduleExports) { - const cls = moduleExports[key]; - if (this.isLLM(cls.prototype)) { - this._wrap(cls.prototype, "chat", customLLMInstrumentation.chatWrapper({ className: cls.name })); - } else if (this.isEmbedding(cls.prototype)) { - this._wrap(cls.prototype, "getQueryEmbedding", genericWrapper(cls.name, "getQueryEmbedding", import_ai_semantic_conventions4.TraceloopSpanKindValues.TASK, () => this.tracer, shouldSendPrompts(this._config))); - } else if (this.isSynthesizer(cls.prototype)) { - this._wrap(cls.prototype, "synthesize", genericWrapper(cls.name, "synthesize", import_ai_semantic_conventions4.TraceloopSpanKindValues.TASK, () => this.tracer, shouldSendPrompts(this._config))); - } else if (this.isRetriever(cls.prototype)) { - this._wrap(cls.prototype, "retrieve", genericWrapper(cls.name, "retrieve", import_ai_semantic_conventions4.TraceloopSpanKindValues.TASK, () => this.tracer, shouldSendPrompts(this._config))); - } - } - return moduleExports; - } - unpatch(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching llamaindex@${moduleVersion}`); - this._unwrap(moduleExports.RetrieverQueryEngine.prototype, "query"); - for (const key in moduleExports) { - const cls = moduleExports[key]; - if (this.isLLM(cls.prototype)) { - this._unwrap(cls.prototype, "complete"); - this._unwrap(cls.prototype, "chat"); - } else if (this.isEmbedding(cls.prototype)) { - this._unwrap(cls.prototype, "getQueryEmbedding"); - } else if (this.isSynthesizer(cls.prototype)) { - this._unwrap(cls.prototype, "synthesize"); - } else if (this.isRetriever(cls.prototype)) { - this._unwrap(cls.prototype, "retrieve"); - } - } - return moduleExports; - } - patchOpenAI(moduleExports, moduleVersion) { - this._diag.debug(`Patching @llamaindex/openai@${moduleVersion}`); - if (moduleExports.OpenAIAgent && moduleExports.OpenAIAgent.prototype) { - this._wrap(moduleExports.OpenAIAgent.prototype, "chat", genericWrapper(moduleExports.OpenAIAgent.name, "agent", import_ai_semantic_conventions4.TraceloopSpanKindValues.AGENT, () => this.tracer, shouldSendPrompts(this._config))); - } - return moduleExports; - } - unpatchOpenAI(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching @llamaindex/openai@${moduleVersion}`); - if (moduleExports.OpenAIAgent && moduleExports.OpenAIAgent.prototype) { - this._unwrap(moduleExports.OpenAIAgent.prototype, "chat"); - } - return moduleExports; - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-vertexai@0.21.0/node_modules/@traceloop/instrumentation-vertexai/dist/index.mjs -var import_api44, import_instrumentation4, import_ai_semantic_conventions5, version5 = "0.21.0", AIPlatformInstrumentation, VertexAIInstrumentation; -var init_dist9 = __esm(() => { - init_modules(); - import_api44 = __toESM(require_src(), 1); - import_instrumentation4 = __toESM(require_src97(), 1); - import_ai_semantic_conventions5 = __toESM(require_src2(), 1); - AIPlatformInstrumentation = class AIPlatformInstrumentation extends import_instrumentation4.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-vertexai", version5, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const aiPlatformModule = new import_instrumentation4.InstrumentationNodeModuleDefinition("@google-cloud/aiplatform", [">=3.10.0"], this.wrap.bind(this), this.unwrap.bind(this)); - return aiPlatformModule; - } - manuallyInstrument(module) { - this._diag.debug(`Manually instrumenting @google-cloud/aiplatform`); - this._wrap(module.PredictionServiceClient.prototype, "predict", this.wrapperMethod()); - } - wrap(module, moduleVersion) { - this._diag.debug(`Patching @google-cloud/aiplatform@${moduleVersion}`); - this._wrap(module.PredictionServiceClient.prototype, "predict", this.wrapperMethod()); - return module; - } - unwrap(module, moduleVersion) { - this._diag.debug(`Unpatching @google-cloud/aiplatform@${moduleVersion}`); - this._unwrap(module.PredictionServiceClient.prototype, "predict"); - } - wrapperMethod() { - const plugin = this; - return (original) => { - return function method(...args) { - const span = plugin._startSpan({ - params: args[0] - }); - const execContext = import_api44.trace.setSpan(import_api44.context.active(), span); - const execPromise = import_instrumentation4.safeExecuteInTheMiddle(() => { - return import_api44.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error("Error in VertexAIPlatform instrumentation", e); - } - }); - const wrappedPromise = plugin._wrapPromise(span, execPromise); - return import_api44.context.bind(execContext, wrappedPromise); - }; - }; - } - _startSpan({ params }) { - var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15; - const attributes = { - [import_ai_semantic_conventions5.SpanAttributes.LLM_SYSTEM]: "Google", - [import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_TYPE]: "completion" - }; - try { - if (params !== undefined) { - if (params.endpoint) { - const model = params.endpoint.split("/").pop(); - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_MODEL] = model; - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_RESPONSE_MODEL] = model; - } - if (params === null || params === undefined ? undefined : params.parameters) { - if ((_b = (_a2 = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _a2 === undefined ? undefined : _a2.fields) === null || _b === undefined ? undefined : _b.maxOutputTokens.numberValue) { - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = (_d = (_c = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _c === undefined ? undefined : _c.fields) === null || _d === undefined ? undefined : _d.maxOutputTokens.numberValue; - } - if ((_f = (_e = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _e === undefined ? undefined : _e.fields) === null || _f === undefined ? undefined : _f.temperature.numberValue) { - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_TEMPERATURE] = (_h = (_g = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _g === undefined ? undefined : _g.fields) === null || _h === undefined ? undefined : _h.temperature.numberValue; - } - if ((_k = (_j = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _j === undefined ? undefined : _j.fields) === null || _k === undefined ? undefined : _k.topP.numberValue) { - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_TOP_P] = (_m = (_l = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _l === undefined ? undefined : _l.fields) === null || _m === undefined ? undefined : _m.topP.numberValue; - } - if ((_p = (_o = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _o === undefined ? undefined : _o.fields) === null || _p === undefined ? undefined : _p.topK.numberValue) { - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_TOP_K] = (_r = (_q = params === null || params === undefined ? undefined : params.parameters.structValue) === null || _q === undefined ? undefined : _q.fields) === null || _r === undefined ? undefined : _r.topK.numberValue; - } - } - if (this._shouldSendPrompts() && params.instances && ((_s = params.instances) === null || _s === undefined ? undefined : _s.length) !== 0) { - if (((_t = params.instances[0].structValue) === null || _t === undefined ? undefined : _t.fields) && "prompt" in params.instances[0].structValue.fields && ((_v = (_u = params.instances[0].structValue) === null || _u === undefined ? undefined : _u.fields) === null || _v === undefined ? undefined : _v.prompt.stringValue)) { - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.0.content`] = (_x = (_w = params.instances[0].structValue) === null || _w === undefined ? undefined : _w.fields) === null || _x === undefined ? undefined : _x.prompt.stringValue; - } else if (params.instances[0].structValue && ((_2 = (_1 = (_0 = (_z = (_y = params.instances[0].structValue.fields) === null || _y === undefined ? undefined : _y.messages.listValue) === null || _z === undefined ? undefined : _z.values) === null || _0 === undefined ? undefined : _0[0].structValue) === null || _1 === undefined ? undefined : _1.fields) === null || _2 === undefined ? undefined : _2.content.stringValue)) { - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.0.role`] = (_8 = (_7 = (_6 = (_5 = (_4 = (_3 = params.instances[0].structValue.fields) === null || _3 === undefined ? undefined : _3.messages.listValue) === null || _4 === undefined ? undefined : _4.values) === null || _5 === undefined ? undefined : _5[0].structValue) === null || _6 === undefined ? undefined : _6.fields) === null || _7 === undefined ? undefined : _7.author.stringValue) !== null && _8 !== undefined ? _8 : "user"; - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.0.content`] = (_13 = (_12 = (_11 = (_10 = (_9 = params.instances[0].structValue.fields) === null || _9 === undefined ? undefined : _9.messages.listValue) === null || _10 === undefined ? undefined : _10.values) === null || _11 === undefined ? undefined : _11[0].structValue) === null || _12 === undefined ? undefined : _12.fields) === null || _13 === undefined ? undefined : _13.content.stringValue; - } - } - } - } catch (e) { - this._diag.debug(e); - (_15 = (_14 = this._config).exceptionLogger) === null || _15 === undefined || _15.call(_14, e); - } - return this.tracer.startSpan(`vertexai.completion`, { - kind: import_api44.SpanKind.CLIENT, - attributes - }); - } - _wrapPromise(span, promise2) { - return promise2.then((result) => { - return new Promise((resolve2) => { - this._endSpan({ - span, - result - }); - resolve2(result); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api44.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - reject(error48); - }); - }); - } - _endSpan({ span, result }) { - var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34; - try { - if (result[0].model) - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_RESPONSE_MODEL, result[0].model); - if (result) { - if (result[0].metadata) { - if (typeof ((_g = (_f = (_e = (_d = (_c = (_b = (_a2 = result[0].metadata) === null || _a2 === undefined ? undefined : _a2.structValue) === null || _b === undefined ? undefined : _b.fields) === null || _c === undefined ? undefined : _c.tokenMetadata.structValue) === null || _d === undefined ? undefined : _d.fields) === null || _e === undefined ? undefined : _e.outputTokenCount.structValue) === null || _f === undefined ? undefined : _f.fields) === null || _g === undefined ? undefined : _g.totalTokens.numberValue) === "number") - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_p = (_o = (_m = (_l = (_k = (_j = (_h = result[0].metadata) === null || _h === undefined ? undefined : _h.structValue) === null || _j === undefined ? undefined : _j.fields) === null || _k === undefined ? undefined : _k.tokenMetadata.structValue) === null || _l === undefined ? undefined : _l.fields) === null || _m === undefined ? undefined : _m.outputTokenCount.structValue) === null || _o === undefined ? undefined : _o.fields) === null || _p === undefined ? undefined : _p.totalTokens.numberValue); - if (typeof ((_w = (_v = (_u = (_t = (_s = (_r = (_q = result[0].metadata) === null || _q === undefined ? undefined : _q.structValue) === null || _r === undefined ? undefined : _r.fields) === null || _s === undefined ? undefined : _s.tokenMetadata.structValue) === null || _t === undefined ? undefined : _t.fields) === null || _u === undefined ? undefined : _u.inputTokenCount.structValue) === null || _v === undefined ? undefined : _v.fields) === null || _w === undefined ? undefined : _w.totalTokens.numberValue) === "number") - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_3 = (_2 = (_1 = (_0 = (_z = (_y = (_x = result[0].metadata) === null || _x === undefined ? undefined : _x.structValue) === null || _y === undefined ? undefined : _y.fields) === null || _z === undefined ? undefined : _z.tokenMetadata.structValue) === null || _0 === undefined ? undefined : _0.fields) === null || _1 === undefined ? undefined : _1.inputTokenCount.structValue) === null || _2 === undefined ? undefined : _2.fields) === null || _3 === undefined ? undefined : _3.totalTokens.numberValue); - if (typeof ((_10 = (_9 = (_8 = (_7 = (_6 = (_5 = (_4 = result[0].metadata) === null || _4 === undefined ? undefined : _4.structValue) === null || _5 === undefined ? undefined : _5.fields) === null || _6 === undefined ? undefined : _6.tokenMetadata.structValue) === null || _7 === undefined ? undefined : _7.fields) === null || _8 === undefined ? undefined : _8.inputTokenCount.structValue) === null || _9 === undefined ? undefined : _9.fields) === null || _10 === undefined ? undefined : _10.totalTokens.numberValue) === "number" && typeof ((_17 = (_16 = (_15 = (_14 = (_13 = (_12 = (_11 = result[0].metadata) === null || _11 === undefined ? undefined : _11.structValue) === null || _12 === undefined ? undefined : _12.fields) === null || _13 === undefined ? undefined : _13.tokenMetadata.structValue) === null || _14 === undefined ? undefined : _14.fields) === null || _15 === undefined ? undefined : _15.outputTokenCount.structValue) === null || _16 === undefined ? undefined : _16.fields) === null || _17 === undefined ? undefined : _17.totalTokens.numberValue) === "number") - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, ((_24 = (_23 = (_22 = (_21 = (_20 = (_19 = (_18 = result[0].metadata) === null || _18 === undefined ? undefined : _18.structValue) === null || _19 === undefined ? undefined : _19.fields) === null || _20 === undefined ? undefined : _20.tokenMetadata.structValue) === null || _21 === undefined ? undefined : _21.fields) === null || _22 === undefined ? undefined : _22.inputTokenCount.structValue) === null || _23 === undefined ? undefined : _23.fields) === null || _24 === undefined ? undefined : _24.totalTokens.numberValue) + ((_31 = (_30 = (_29 = (_28 = (_27 = (_26 = (_25 = result[0].metadata) === null || _25 === undefined ? undefined : _25.structValue) === null || _26 === undefined ? undefined : _26.fields) === null || _27 === undefined ? undefined : _27.tokenMetadata.structValue) === null || _28 === undefined ? undefined : _28.fields) === null || _29 === undefined ? undefined : _29.outputTokenCount.structValue) === null || _30 === undefined ? undefined : _30.fields) === null || _31 === undefined ? undefined : _31.totalTokens.numberValue)); - } - if (this._shouldSendPrompts()) { - (_32 = result[0].predictions) === null || _32 === undefined || _32.forEach((prediction, index) => { - var _a3, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _j2, _k2, _l2, _m2, _o2, _p2, _q2, _r2, _s2, _t2, _u2, _v2; - if (((_a3 = prediction.structValue) === null || _a3 === undefined ? undefined : _a3.fields) && "content" in prediction.structValue.fields && !!((_c2 = (_b2 = prediction.structValue) === null || _b2 === undefined ? undefined : _b2.fields) === null || _c2 === undefined ? undefined : _c2.content.stringValue)) { - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, (_e2 = (_d2 = prediction.structValue) === null || _d2 === undefined ? undefined : _d2.fields) === null || _e2 === undefined ? undefined : _e2.content.stringValue); - } else if (((_f2 = prediction.structValue) === null || _f2 === undefined ? undefined : _f2.fields) && "candidates" in prediction.structValue.fields && !!((_o2 = (_m2 = (_l2 = (_k2 = (_j2 = (_h2 = (_g2 = prediction.structValue) === null || _g2 === undefined ? undefined : _g2.fields) === null || _h2 === undefined ? undefined : _h2.candidates.listValue) === null || _j2 === undefined ? undefined : _j2.values) === null || _k2 === undefined ? undefined : _k2[0]) === null || _l2 === undefined ? undefined : _l2.structValue) === null || _m2 === undefined ? undefined : _m2.fields) === null || _o2 === undefined ? undefined : _o2.content.stringValue)) { - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, (_v2 = (_u2 = (_t2 = (_s2 = (_r2 = (_q2 = (_p2 = prediction.structValue) === null || _p2 === undefined ? undefined : _p2.fields) === null || _q2 === undefined ? undefined : _q2.candidates.listValue) === null || _r2 === undefined ? undefined : _r2.values) === null || _s2 === undefined ? undefined : _s2[0]) === null || _t2 === undefined ? undefined : _t2.structValue) === null || _u2 === undefined ? undefined : _u2.fields) === null || _v2 === undefined ? undefined : _v2.content.stringValue); - } - }); - } - } - } catch (e) { - this._diag.debug(e); - (_34 = (_33 = this._config).exceptionLogger) === null || _34 === undefined || _34.call(_33, e); - } - span.setStatus({ code: import_api44.SpanStatusCode.OK }); - span.end(); - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api44.context.active().getValue(import_ai_semantic_conventions5.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - }; - VertexAIInstrumentation = class VertexAIInstrumentation extends import_instrumentation4.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-vertexai", version5, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const vertexAIModule = new import_instrumentation4.InstrumentationNodeModuleDefinition("@google-cloud/vertexai", [">=1.1.0"], this.wrap.bind(this), this.unwrap.bind(this)); - return vertexAIModule; - } - manuallyInstrument(module) { - this._diag.debug("Manually instrumenting @google-cloud/vertexai"); - this._wrap(module.GenerativeModel.prototype, "generateContentStream", this.wrapperMethod()); - this._wrap(module.GenerativeModel.prototype, "generateContent", this.wrapperMethod()); - } - wrap(module, moduleVersion) { - this._diag.debug(`Patching @google-cloud/vertexai@${moduleVersion}`); - this._wrap(module.GenerativeModel.prototype, "generateContentStream", this.wrapperMethod()); - this._wrap(module.GenerativeModel.prototype, "generateContent", this.wrapperMethod()); - return module; - } - unwrap(module, moduleVersion) { - this._diag.debug(`Unpatching @google-cloud/vertexai@${moduleVersion}`); - this._unwrap(module.GenerativeModel.prototype, "generateContentStream"); - this._unwrap(module.GenerativeModel.prototype, "generateContent"); - } - wrapperMethod() { - const plugin = this; - return (original) => { - return function method(...args) { - const span = plugin._startSpan({ - instance: this, - params: args[0] - }); - const execContext = import_api44.trace.setSpan(import_api44.context.active(), span); - const execPromise = import_instrumentation4.safeExecuteInTheMiddle(() => { - return import_api44.context.with(execContext, () => { - return original.apply(this, args); - }); - }, () => {}); - const wrappedPromise = plugin._wrapPromise(span, execPromise); - return import_api44.context.bind(execContext, wrappedPromise); - }; - }; - } - _startSpan({ instance, params }) { - var _a2, _b; - const attributes = { - [import_ai_semantic_conventions5.SpanAttributes.LLM_SYSTEM]: "Google", - [import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_TYPE]: "completion" - }; - try { - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_MODEL] = instance["model"]; - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_RESPONSE_MODEL] = instance["model"]; - if (instance["generationConfig"]) { - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = instance["generationConfig"].max_output_tokens; - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_TEMPERATURE] = instance["generationConfig"].temperature; - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_REQUEST_TOP_P] = instance["generationConfig"].top_p; - attributes[import_ai_semantic_conventions5.SpanAttributes.LLM_TOP_K] = instance["generationConfig"].top_k; - } - if (this._shouldSendPrompts() && "contents" in params) { - let i = 0; - if (instance["systemInstruction"]) { - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.${i}.role`] = "system"; - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.${i}.content`] = this._formatPartsData(instance["systemInstruction"].parts); - i++; - } - params.contents.forEach((content, j) => { - var _a3; - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.${i + j}.role`] = (_a3 = content.role) !== null && _a3 !== undefined ? _a3 : "user"; - attributes[`${import_ai_semantic_conventions5.SpanAttributes.LLM_PROMPTS}.${i + j}.content`] = this._formatPartsData(content.parts); - }); - } - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - return this.tracer.startSpan(`vertexai.completion`, { - kind: import_api44.SpanKind.CLIENT, - attributes - }); - } - _wrapPromise(span, promise2) { - return promise2.then((result) => __awaiter(this, undefined, undefined, function* () { - yield this._endSpan({ - span, - result - }); - return new Promise((resolve2) => resolve2(result)); - })).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api44.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - reject(error48); - }); - }); - } - _endSpan(_a2) { - return __awaiter(this, arguments, undefined, function* ({ span, result }) { - var _b, _c, _d, _e, _f, _g; - try { - const streamResponse = yield result.response; - if (((_b = streamResponse.usageMetadata) === null || _b === undefined ? undefined : _b.totalTokenCount) !== undefined) - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, streamResponse.usageMetadata.totalTokenCount); - if ((_c = streamResponse.usageMetadata) === null || _c === undefined ? undefined : _c.candidatesTokenCount) - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, streamResponse.usageMetadata.candidatesTokenCount); - if ((_d = streamResponse.usageMetadata) === null || _d === undefined ? undefined : _d.promptTokenCount) - span.setAttribute(import_ai_semantic_conventions5.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, streamResponse.usageMetadata.promptTokenCount); - if (this._shouldSendPrompts()) { - (_e = streamResponse.candidates) === null || _e === undefined || _e.forEach((candidate, index) => { - var _a3; - if (candidate.finishReason) - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.finish_reason`, candidate.finishReason); - if (candidate.content) { - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, (_a3 = candidate.content.role) !== null && _a3 !== undefined ? _a3 : "assistant"); - span.setAttribute(`${import_ai_semantic_conventions5.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, this._formatPartsData(candidate.content.parts)); - } - }); - } - } catch (e) { - this._diag.debug(e); - (_g = (_f = this._config).exceptionLogger) === null || _g === undefined || _g.call(_f, e); - } - span.setStatus({ code: import_api44.SpanStatusCode.OK }); - span.end(); - }); - } - _formatPartsData(parts) { - const result = parts.map((part) => { - if (part.text) - return part.text; - else if (part.fileData) - return part.fileData.fileUri + "-" + part.fileData.mimeType; - else if (part.inlineData) - return part.inlineData.data + "-" + part.inlineData.mimeType; - else - return ""; - }).filter(Boolean); - return result.join(` -`); - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api44.context.active().getValue(import_ai_semantic_conventions5.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-bedrock@0.21.0/node_modules/@traceloop/instrumentation-bedrock/dist/index.mjs -var import_api45, import_instrumentation5, import_ai_semantic_conventions6, version6 = "0.21.0", BedrockInstrumentation; -var init_dist10 = __esm(() => { - init_modules(); - import_api45 = __toESM(require_src(), 1); - import_instrumentation5 = __toESM(require_src97(), 1); - import_ai_semantic_conventions6 = __toESM(require_src2(), 1); - BedrockInstrumentation = class BedrockInstrumentation extends import_instrumentation5.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-bedrock", version6, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const module = new import_instrumentation5.InstrumentationNodeModuleDefinition("@aws-sdk/client-bedrock-runtime", [">=3.499.0"], this.wrap.bind(this), this.unwrap.bind(this)); - return module; - } - manuallyInstrument(module) { - this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime manually`); - this._wrap(module.BedrockRuntimeClient.prototype, "send", this.wrapperMethod()); - } - wrap(module, moduleVersion) { - this._diag.debug(`Patching @aws-sdk/client-bedrock-runtime@${moduleVersion}`); - this._wrap(module.BedrockRuntimeClient.prototype, "send", this.wrapperMethod()); - return module; - } - unwrap(module, moduleVersion) { - this._diag.debug(`Unpatching @aws-sdk/client-bedrock-runtime@${moduleVersion}`); - this._unwrap(module.BedrockRuntimeClient.prototype, "send"); - } - wrapperMethod() { - const plugin = this; - return (original) => { - return function method(...args) { - const span = plugin._startSpan({ - params: args[0] - }); - const execContext = import_api45.trace.setSpan(import_api45.context.active(), span); - const execPromise = import_instrumentation5.safeExecuteInTheMiddle(() => { - return import_api45.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error(`Error in bedrock instrumentation`, e); - } - }); - const wrappedPromise = plugin._wrapPromise(span, execPromise); - return import_api45.context.bind(execContext, wrappedPromise); - }; - }; - } - _wrapPromise(span, promise2) { - return promise2.then((result) => __awaiter(this, undefined, undefined, function* () { - yield this._endSpan({ - span, - result - }); - return new Promise((resolve2) => resolve2(result)); - })).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api45.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - reject(error48); - }); - }); - } - _startSpan({ params }) { - var _a2, _b; - let attributes = {}; - try { - const input = params.input; - const { modelVendor, model } = this._extractVendorAndModel(input.modelId || ""); - attributes = { - [import_ai_semantic_conventions6.SpanAttributes.LLM_SYSTEM]: "AWS", - [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_MODEL]: model, - [import_ai_semantic_conventions6.SpanAttributes.LLM_RESPONSE_MODEL]: input.modelId, - [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TYPE]: import_ai_semantic_conventions6.LLMRequestTypeValues.COMPLETION - }; - if (typeof input.body === "string") { - const requestBody = JSON.parse(input.body); - attributes = Object.assign(Object.assign({}, attributes), this._setRequestAttributes(modelVendor, requestBody)); - } - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - return this.tracer.startSpan(`bedrock.completion`, { - kind: import_api45.SpanKind.CLIENT, - attributes - }); - } - _endSpan(_a2) { - return __awaiter(this, arguments, undefined, function* ({ span, result }) { - var _b, e_1, _c, _d; - var _e, _f, _g; - try { - if ("body" in result) { - const attributes = "attributes" in span ? span["attributes"] : {}; - if (import_ai_semantic_conventions6.SpanAttributes.LLM_SYSTEM in attributes) { - const modelId = attributes[import_ai_semantic_conventions6.SpanAttributes.LLM_RESPONSE_MODEL]; - const { modelVendor, model } = this._extractVendorAndModel(modelId); - span.setAttribute(import_ai_semantic_conventions6.SpanAttributes.LLM_RESPONSE_MODEL, model); - if (!(result.body instanceof Object.getPrototypeOf(Uint8Array))) { - const rawRes = result.body; - let streamedContent = ""; - try { - for (var _h = true, rawRes_1 = __asyncValues(rawRes), rawRes_1_1;rawRes_1_1 = yield rawRes_1.next(), _b = rawRes_1_1.done, !_b; _h = true) { - _d = rawRes_1_1.value; - _h = false; - const value = _d; - const jsonString = new TextDecoder().decode((_e = value.chunk) === null || _e === undefined ? undefined : _e.bytes); - const parsedResponse = JSON.parse(jsonString); - if ("amazon-bedrock-invocationMetrics" in parsedResponse) { - span.setAttribute(import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, parsedResponse["amazon-bedrock-invocationMetrics"]["inputTokenCount"]); - span.setAttribute(import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, parsedResponse["amazon-bedrock-invocationMetrics"]["outputTokenCount"]); - span.setAttribute(import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, parsedResponse["amazon-bedrock-invocationMetrics"]["inputTokenCount"] + parsedResponse["amazon-bedrock-invocationMetrics"]["outputTokenCount"]); - } - let responseAttributes = this._setResponseAttributes(modelVendor, parsedResponse, true); - if (this._shouldSendPrompts()) { - streamedContent += responseAttributes[`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]; - responseAttributes = Object.assign(Object.assign({}, responseAttributes), { [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: streamedContent }); - } - span.setAttributes(responseAttributes); - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (!_h && !_b && (_c = rawRes_1.return)) - yield _c.call(rawRes_1); - } finally { - if (e_1) - throw e_1.error; - } - } - } else if (result.body instanceof Object.getPrototypeOf(Uint8Array)) { - const jsonString = new TextDecoder().decode(result.body); - const parsedResponse = JSON.parse(jsonString); - const responseAttributes = this._setResponseAttributes(modelVendor, parsedResponse); - span.setAttributes(responseAttributes); - } - } - } - } catch (e) { - this._diag.debug(e); - (_g = (_f = this._config).exceptionLogger) === null || _g === undefined || _g.call(_f, e); - } - span.setStatus({ code: import_api45.SpanStatusCode.OK }); - span.end(); - }); - } - _setRequestAttributes(vendor, requestBody) { - switch (vendor) { - case "ai21": { - return Object.assign({ [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TOP_P]: requestBody["topP"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TEMPERATURE]: requestBody["temperature"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody["maxTokens"], [import_ai_semantic_conventions6.SpanAttributes.LLM_PRESENCE_PENALTY]: requestBody["presencePenalty"]["scale"], [import_ai_semantic_conventions6.SpanAttributes.LLM_FREQUENCY_PENALTY]: requestBody["frequencyPenalty"]["scale"] }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.role`]: "user", - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody["prompt"] - } : {}); - } - case "amazon": { - return Object.assign({ [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TOP_P]: requestBody["textGenerationConfig"]["topP"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TEMPERATURE]: requestBody["textGenerationConfig"]["temperature"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody["textGenerationConfig"]["maxTokenCount"] }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.role`]: "user", - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody["inputText"] - } : {}); - } - case "anthropic": { - const baseAttributes = { - [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TOP_P]: requestBody["top_p"], - [import_ai_semantic_conventions6.SpanAttributes.LLM_TOP_K]: requestBody["top_k"], - [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TEMPERATURE]: requestBody["temperature"], - [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody["max_tokens_to_sample"] || requestBody["max_tokens"] - }; - if (!this._shouldSendPrompts()) { - return baseAttributes; - } - if (requestBody["messages"]) { - const promptAttributes = {}; - requestBody["messages"].forEach((message, index) => { - promptAttributes[`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.${index}.role`] = message.role; - promptAttributes[`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.${index}.content`] = typeof message.content === "string" ? message.content : JSON.stringify(message.content); - }); - return Object.assign(Object.assign({}, baseAttributes), promptAttributes); - } - if (requestBody["prompt"]) { - return Object.assign(Object.assign({}, baseAttributes), { [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.role`]: "user", [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody["prompt"].replace(` - -Human:`, "").replace(` - -Assistant:`, "") }); - } - return baseAttributes; - } - case "cohere": { - return Object.assign({ [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TOP_P]: requestBody["p"], [import_ai_semantic_conventions6.SpanAttributes.LLM_TOP_K]: requestBody["k"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TEMPERATURE]: requestBody["temperature"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody["max_tokens"] }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.role`]: "user", - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody["message"] || requestBody["prompt"] - } : {}); - } - case "meta": { - return Object.assign({ [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TOP_P]: requestBody["top_p"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_TEMPERATURE]: requestBody["temperature"], [import_ai_semantic_conventions6.SpanAttributes.LLM_REQUEST_MAX_TOKENS]: requestBody["max_gen_len"] }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.role`]: "user", - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_PROMPTS}.0.content`]: requestBody["prompt"] - } : {}); - } - default: - return {}; - } - } - _setResponseAttributes(vendor, response, isStream = false) { - var _a2, _b, _c, _d; - switch (vendor) { - case "ai21": { - return Object.assign({ [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: response["completions"][0]["finishReason"]["reason"], [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.role`]: "assistant" }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: response["completions"][0]["data"]["text"] - } : {}); - } - case "amazon": { - return Object.assign({ [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: isStream ? response["completionReason"] : response["results"][0]["completionReason"], [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.role`]: "assistant", [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_PROMPT_TOKENS]: response["inputTextTokenCount"], [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: isStream ? response["totalOutputTextTokenCount"] : response["results"][0]["tokenCount"], [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: isStream ? response["inputTextTokenCount"] + response["totalOutputTextTokenCount"] : response["inputTextTokenCount"] + response["results"][0]["tokenCount"] }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: isStream ? response["outputText"] : response["results"][0]["outputText"] - } : {}); - } - case "anthropic": { - const baseAttributes = { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: response["stop_reason"], - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.role`]: "assistant" - }; - if (!this._shouldSendPrompts()) { - return baseAttributes; - } - if (response["content"]) { - const content = Array.isArray(response["content"]) ? response["content"].map((c) => c.text || c).join("") : response["content"]; - return Object.assign(Object.assign({}, baseAttributes), { [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: content }); - } - if (response["completion"]) { - return Object.assign(Object.assign({}, baseAttributes), { [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: response["completion"] }); - } - return baseAttributes; - } - case "cohere": { - const baseAttributes = Object.assign({ [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: (_b = (_a2 = response["generations"]) === null || _a2 === undefined ? undefined : _a2[0]) === null || _b === undefined ? undefined : _b["finish_reason"], [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.role`]: "assistant" }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: (_d = (_c = response["generations"]) === null || _c === undefined ? undefined : _c[0]) === null || _d === undefined ? undefined : _d["text"] - } : {}); - if (response["meta"] && response["meta"]["billed_units"]) { - const billedUnits = response["meta"]["billed_units"]; - return Object.assign(Object.assign({}, baseAttributes), { [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_PROMPT_TOKENS]: billedUnits["input_tokens"], [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: billedUnits["output_tokens"], [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: (billedUnits["input_tokens"] || 0) + (billedUnits["output_tokens"] || 0) }); - } - return baseAttributes; - } - case "meta": { - return Object.assign({ [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`]: response["stop_reason"], [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.role`]: "assistant", [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_PROMPT_TOKENS]: response["prompt_token_count"], [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: response["generation_token_count"], [import_ai_semantic_conventions6.SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: response["prompt_token_count"] + response["generation_token_count"] }, this._shouldSendPrompts() ? { - [`${import_ai_semantic_conventions6.SpanAttributes.LLM_COMPLETIONS}.0.content`]: response["generation"] - } : {}); - } - default: - return {}; - } - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api45.context.active().getValue(import_ai_semantic_conventions6.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - _extractVendorAndModel(modelId) { - if (!modelId) { - return { modelVendor: "", model: "" }; - } - const parts = modelId.split("."); - return { - modelVendor: parts[0] || "", - model: parts[1] || "" - }; - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-cohere@0.21.0/node_modules/@traceloop/instrumentation-cohere/dist/index.mjs -var import_api46, import_instrumentation6, import_ai_semantic_conventions7, version7 = "0.21.0", CohereInstrumentation; -var init_dist11 = __esm(() => { - init_modules(); - import_api46 = __toESM(require_src(), 1); - import_instrumentation6 = __toESM(require_src97(), 1); - import_ai_semantic_conventions7 = __toESM(require_src2(), 1); - CohereInstrumentation = class CohereInstrumentation extends import_instrumentation6.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-cohere", version7, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const module = new import_instrumentation6.InstrumentationNodeModuleDefinition("cohere-ai", [">=7.7.5"], this.wrap.bind(this), this.unwrap.bind(this)); - return module; - } - manuallyInstrument(module) { - this._diag.debug(`Manually patching cohere-ai`); - this.wrap(module); - } - wrap(module, moduleVersion) { - this._diag.debug(`Patching cohere-ai@${moduleVersion}`); - this._wrap(module.CohereClient.prototype, "generate", this.wrapperMethod("completion", false)); - this._wrap(module.CohereClient.prototype, "generateStream", this.wrapperMethod("completion", true)); - this._wrap(module.CohereClient.prototype, "chat", this.wrapperMethod("chat", false)); - this._wrap(module.CohereClient.prototype, "chatStream", this.wrapperMethod("chat", true)); - this._wrap(module.CohereClient.prototype, "rerank", this.wrapperMethod("rerank", false)); - return module; - } - unwrap(module, moduleVersion) { - this._diag.debug(`Unpatching @cohere-ai@${moduleVersion}`); - this._unwrap(module.CohereClient.prototype, "generateStream"); - this._unwrap(module.CohereClient.prototype, "chat"); - this._unwrap(module.CohereClient.prototype, "chatStream"); - this._unwrap(module.CohereClient.prototype, "rerank"); - } - wrapperMethod(type, streaming) { - const plugin = this; - return (original) => { - return function method(...args) { - const span = plugin._startSpan({ - params: args[0], - type - }); - const execContext = import_api46.trace.setSpan(import_api46.context.active(), span); - const execPromise = import_instrumentation6.safeExecuteInTheMiddle(() => { - return import_api46.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error("Error in cohere instrumentation", e); - } - }); - const wrappedPromise = plugin._wrapPromise(type, streaming, span, execPromise); - return import_api46.context.bind(execContext, wrappedPromise); - }; - }; - } - _wrapPromise(type, streaming, span, promise2) { - return promise2.then((result) => __awaiter(this, undefined, undefined, function* () { - const awaitedResult = yield result; - if (type === "completion" && streaming) { - yield this._endSpan({ - type, - span, - streaming, - result: yield awaitedResult - }); - } else if (type === "completion" && !streaming) { - yield this._endSpan({ - type, - span, - streaming, - result: awaitedResult - }); - } else if (type === "chat" && streaming) { - yield this._endSpan({ - type, - span, - streaming, - result: yield awaitedResult - }); - } else if (type === "chat" && !streaming) { - yield this._endSpan({ - type, - span, - streaming, - result: awaitedResult - }); - } else if (type === "rerank" && !streaming) { - yield this._endSpan({ - type, - span, - streaming, - result: awaitedResult - }); - } - return new Promise((resolve2) => resolve2(result)); - })).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api46.SpanStatusCode.ERROR, - message: error48.message - }); - span.recordException(error48); - span.end(); - reject(error48); - }); - }); - } - _startSpan({ params, type }) { - var _a2, _b, _c, _d, _e, _f, _g, _h; - const attributes = { - [import_ai_semantic_conventions7.SpanAttributes.LLM_SYSTEM]: "Cohere", - [import_ai_semantic_conventions7.SpanAttributes.LLM_REQUEST_TYPE]: this._getLlmRequestTypeByMethod(type) - }; - try { - const model = (_a2 = params.model) !== null && _a2 !== undefined ? _a2 : "command"; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_REQUEST_MODEL] = model; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_REQUEST_MODEL] = model; - if (!("query" in params)) { - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_REQUEST_TOP_P] = params.p; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_TOP_K] = params.k; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_FREQUENCY_PENALTY] = params.frequencyPenalty; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_PRESENCE_PENALTY] = params.presencePenalty; - attributes[import_ai_semantic_conventions7.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.maxTokens; - } else { - attributes["topN"] = params["topN"]; - attributes["maxChunksPerDoc"] = params["maxChunksPerDoc"]; - } - if (this._shouldSendPrompts()) { - if (type === "completion" && "prompt" in params) { - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.0.user`] = params.prompt; - } else if (type === "chat" && "message" in params) { - (_b = params.chatHistory) === null || _b === undefined || _b.forEach((msg, index) => { - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.${index}.role`] = msg.role; - if (msg.role !== "TOOL") { - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.${index}.content`] = msg.message; - } - }); - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.${(_d = (_c = params.chatHistory) === null || _c === undefined ? undefined : _c.length) !== null && _d !== undefined ? _d : 0}.role`] = "user"; - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.${(_f = (_e = params.chatHistory) === null || _e === undefined ? undefined : _e.length) !== null && _f !== undefined ? _f : 0}.user`] = params.message; - } else if (type === "rerank" && "query" in params) { - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - attributes[`${import_ai_semantic_conventions7.SpanAttributes.LLM_PROMPTS}.0.user`] = params.query; - params.documents.forEach((doc2, index) => { - attributes[`documents.${index}.index`] = typeof doc2 === "string" ? doc2 : doc2.text; - }); - } - } - } catch (e) { - this._diag.debug(e); - (_h = (_g = this._config).exceptionLogger) === null || _h === undefined || _h.call(_g, e); - } - return this.tracer.startSpan(`cohere.${type}`, { - kind: import_api46.SpanKind.CLIENT, - attributes - }); - } - _endSpan(_a2) { - return __awaiter(this, arguments, undefined, function* ({ type, span, streaming, result }) { - var _b, result_1, result_1_1, _c, result_2, result_2_1; - var _d, e_1, _e, _f, _g, e_2, _h, _j; - if (type === "completion") { - if (streaming) { - try { - for (_b = true, result_1 = __asyncValues(result);result_1_1 = yield result_1.next(), _d = result_1_1.done, !_d; _b = true) { - _f = result_1_1.value; - _b = false; - const message = _f; - if (message.eventType === "stream-end") { - this._setResponseSpanForGenerate(span, message.response); - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (!_b && !_d && (_e = result_1.return)) - yield _e.call(result_1); - } finally { - if (e_1) - throw e_1.error; - } - } - } else if ("generations" in result) { - this._setResponseSpanForGenerate(span, result); - } - } else if (type === "chat") { - if (streaming) { - try { - for (_c = true, result_2 = __asyncValues(result);result_2_1 = yield result_2.next(), _g = result_2_1.done, !_g; _c = true) { - _j = result_2_1.value; - _c = false; - const message = _j; - if (message.eventType === "stream-end") { - this._setResponseSpanForChat(span, message.response); - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (!_c && !_g && (_h = result_2.return)) - yield _h.call(result_2); - } finally { - if (e_2) - throw e_2.error; - } - } - } else if ("text" in result) { - this._setResponseSpanForChat(span, result); - } - } else if (type === "rerank") { - if ("results" in result) { - this._setResponseSpanForRerank(span, result); - } - } - span.setStatus({ code: import_api46.SpanStatusCode.OK }); - span.end(); - }); - } - _setResponseSpanForRerank(span, result) { - var _a2, _b, _c, _d, _e, _f; - try { - if ("meta" in result) { - if (((_b = (_a2 = result.meta) === null || _a2 === undefined ? undefined : _a2.billedUnits) === null || _b === undefined ? undefined : _b.searchUnits) !== undefined) { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, (_d = (_c = result.meta) === null || _c === undefined ? undefined : _c.billedUnits) === null || _d === undefined ? undefined : _d.searchUnits); - } - if (this._shouldSendPrompts()) { - result.results.forEach((each, idx) => { - var _a3; - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.${idx}.relevanceScore`, each.relevanceScore); - if (each.document && ((_a3 = each.document) === null || _a3 === undefined ? undefined : _a3.text)) { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.${idx}.content`, each.document.text); - } - }); - } else { - result.results.forEach((each, idx) => { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.${idx}.content`, each.index); - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.${idx}.relevanceScore`, each.relevanceScore); - }); - } - } - } catch (e) { - this._diag.debug(e); - (_f = (_e = this._config).exceptionLogger) === null || _f === undefined || _f.call(_e, e); - } - } - _setResponseSpanForChat(span, result) { - var _a2, _b, _c, _d, _e, _f, _g, _h; - try { - if ("token_count" in result && typeof result.token_count === "object") { - if (result.token_count && "prompt_tokens" in result.token_count && typeof result.token_count.prompt_tokens === "number") { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_a2 = result.token_count) === null || _a2 === undefined ? undefined : _a2.prompt_tokens); - } - if (result.token_count && "response_tokens" in result.token_count && typeof result.token_count.response_tokens === "number") { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_b = result.token_count) === null || _b === undefined ? undefined : _b.response_tokens); - } - if (result.token_count && "total_tokens" in result.token_count && typeof result.token_count.total_tokens === "number") { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, (_c = result.token_count) === null || _c === undefined ? undefined : _c.total_tokens); - } - } - if (this._shouldSendPrompts()) { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.content`, result.text); - if ((_d = result.searchQueries) === null || _d === undefined ? undefined : _d[0].text) { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.searchQuery`, (_e = result.searchQueries) === null || _e === undefined ? undefined : _e[0].text); - } - if ((_f = result.searchResults) === null || _f === undefined ? undefined : _f.length) { - result.searchResults.forEach((searchResult, index) => { - if (searchResult.searchQuery) { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.searchResult.${index}.text`, searchResult.searchQuery.text); - } - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.searchResult.${index}.connector`, searchResult.connector.id); - }); - } - } - if ("finishReason" in result && typeof result.finishReason === "string") { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.finishReason); - } - } catch (e) { - this._diag.debug(e); - (_h = (_g = this._config).exceptionLogger) === null || _h === undefined || _h.call(_g, e); - } - } - _setResponseSpanForGenerate(span, result) { - var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t; - try { - if (result && "meta" in result) { - if (typeof ((_b = (_a2 = result.meta) === null || _a2 === undefined ? undefined : _a2.billedUnits) === null || _b === undefined ? undefined : _b.inputTokens) === "number") { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_d = (_c = result.meta) === null || _c === undefined ? undefined : _c.billedUnits) === null || _d === undefined ? undefined : _d.inputTokens); - } - if (typeof ((_f = (_e = result.meta) === null || _e === undefined ? undefined : _e.billedUnits) === null || _f === undefined ? undefined : _f.outputTokens) === "number") { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_h = (_g = result.meta) === null || _g === undefined ? undefined : _g.billedUnits) === null || _h === undefined ? undefined : _h.outputTokens); - } - if (typeof ((_k = (_j = result.meta) === null || _j === undefined ? undefined : _j.billedUnits) === null || _k === undefined ? undefined : _k.inputTokens) === "number" && typeof ((_m = (_l = result.meta) === null || _l === undefined ? undefined : _l.billedUnits) === null || _m === undefined ? undefined : _m.outputTokens) === "number") { - span.setAttribute(import_ai_semantic_conventions7.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, ((_p = (_o = result.meta) === null || _o === undefined ? undefined : _o.billedUnits) === null || _p === undefined ? undefined : _p.inputTokens) + ((_r = (_q = result.meta) === null || _q === undefined ? undefined : _q.billedUnits) === null || _r === undefined ? undefined : _r.outputTokens)); - } - } - if (this._shouldSendPrompts() && result.generations) { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.content`, result.generations[0].text); - } - if (result.generations && "finish_reason" in result.generations[0] && typeof result.generations[0].finish_reason === "string") { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.generations[0].finish_reason); - } - if (result.generations && "finishReason" in result.generations[0] && typeof result.generations[0].finishReason === "string") { - span.setAttribute(`${import_ai_semantic_conventions7.SpanAttributes.LLM_COMPLETIONS}.0.finish_reason`, result.generations[0].finishReason); - } - } catch (e) { - this._diag.debug(e); - (_t = (_s = this._config).exceptionLogger) === null || _t === undefined || _t.call(_s, e); - } - } - _getLlmRequestTypeByMethod(type) { - if (type === "chat") - return import_ai_semantic_conventions7.LLMRequestTypeValues.CHAT; - else if (type === "completion") - return import_ai_semantic_conventions7.LLMRequestTypeValues.COMPLETION; - else if (type === "rerank") - return import_ai_semantic_conventions7.LLMRequestTypeValues.RERANK; - else - return import_ai_semantic_conventions7.LLMRequestTypeValues.UNKNOWN; - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api46.context.active().getValue(import_ai_semantic_conventions7.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-pinecone@0.21.0/node_modules/@traceloop/instrumentation-pinecone/dist/index.mjs -var import_api47, import_instrumentation7, import_ai_semantic_conventions8, version8 = "0.21.0", PineconeInstrumentation; -var init_dist12 = __esm(() => { - import_api47 = __toESM(require_src(), 1); - import_instrumentation7 = __toESM(require_src97(), 1); - import_ai_semantic_conventions8 = __toESM(require_src2(), 1); - PineconeInstrumentation = class PineconeInstrumentation extends import_instrumentation7.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-pinecone", version8, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - manuallyInstrument(module) { - this.patch(module); - } - init() { - const module = new import_instrumentation7.InstrumentationNodeModuleDefinition("@pinecone-database/pinecone", [">=2.0.1"], this.patch.bind(this), this.unpatch.bind(this)); - return module; - } - patch(moduleExports, moduleVersion) { - this._diag.debug(`Patching @pinecone-database/pinecone@${moduleVersion}`); - this._wrap(moduleExports.Index.prototype, "query", this.queryWrapper(this.tracer)); - this._wrap(moduleExports.Index.prototype, "upsert", this.genericWrapper("upsert", this.tracer)); - this._wrap(moduleExports.Index.prototype, "deleteAll", this.genericWrapper("delete", this.tracer)); - this._wrap(moduleExports.Index.prototype, "deleteMany", this.genericWrapper("delete", this.tracer)); - this._wrap(moduleExports.Index.prototype, "deleteOne", this.genericWrapper("delete", this.tracer)); - return moduleExports; - } - unpatch(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching @pinecone-database/pinecone@${moduleVersion}`); - this._unwrap(moduleExports.Index.prototype, "query"); - this._unwrap(moduleExports.Index.prototype, "upsert"); - this._unwrap(moduleExports.Index.prototype, "deleteAll"); - this._unwrap(moduleExports.Index.prototype, "deleteMany"); - this._unwrap(moduleExports.Index.prototype, "deleteOne"); - } - genericWrapper(methodName, tracer) { - const plugin = this; - return (original) => { - return function method(...args) { - const span = tracer.startSpan(`pinecone.${methodName}`); - span.setAttribute(import_ai_semantic_conventions8.SpanAttributes.VECTOR_DB_VENDOR, "Pinecone"); - const execContext = import_api47.trace.setSpan(import_api47.context.active(), span); - const execPromise = import_instrumentation7.safeExecuteInTheMiddle(() => { - return import_api47.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (e) => { - plugin._diag.error(`Error in Pinecone instrumentation`, e); - }); - const wrappedPromise = execPromise.then((result) => { - return new Promise((resolve2) => { - span.setStatus({ code: import_api47.SpanStatusCode.OK }); - span.end(); - resolve2(result); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api47.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - reject(error48); - }); - }); - return import_api47.context.bind(execContext, wrappedPromise); - }; - }; - } - queryWrapper(tracer) { - const plugin = this; - return (original) => { - return function method(...args) { - var _a2, _b; - const span = tracer.startSpan(`pinecone.query`); - const execContext = import_api47.trace.setSpan(import_api47.context.active(), span); - try { - const options = args[0]; - span.setAttribute(import_ai_semantic_conventions8.SpanAttributes.VECTOR_DB_VENDOR, "Pinecone"); - const query_request_event = span.addEvent("pinecone.query.request"); - query_request_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_TOP_K, options.topK); - query_request_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_INCLUDE_VALUES, options.includeValues || false); - query_request_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_INCLUDE_METADATA, options.includeMetadata || false); - query_request_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_ID, options.id); - query_request_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_EMBEDDINGS_VECTOR, options.vector); - query_request_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_METADATA_FILTER, JSON.stringify(options.filter ? options.filter : {})); - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - const execPromise = import_instrumentation7.safeExecuteInTheMiddle(() => { - return import_api47.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error(`Error in Pinecone instrumentation`, e); - } - }); - const wrappedPromise = execPromise.then((result) => { - return new Promise((resolve2) => { - var _a3, _b2, _c, _d, _e, _f; - span.setStatus({ code: import_api47.SpanStatusCode.OK }); - try { - const result_obj = result; - const query_result_event = span.addEvent("pinecone.query.result"); - query_result_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_NAMESPACE, result_obj.namespace); - if (((_a3 = result_obj.usage) === null || _a3 === undefined ? undefined : _a3.readUnits) !== undefined) { - query_result_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_READ_UNITS_CONSUMED, (_b2 = result_obj.usage) === null || _b2 === undefined ? undefined : _b2.readUnits); - } - query_result_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_MATCHES_LENGTH, result_obj.matches.length); - for (let i = 0;i < result_obj.matches.length; i++) { - const match2 = result_obj.matches[i]; - const query_result_match_event = span.addEvent(`pinecone.query.result.${i}`); - if (match2.score !== undefined) { - query_result_match_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_SCORE.replace("{i}", i.toString()), match2.score); - } - if (match2.sparseValues !== undefined) { - query_result_match_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_SPARSE_INDICES.replace("{i}", i.toString()), (_c = match2.sparseValues) === null || _c === undefined ? undefined : _c.indices); - query_result_match_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_SPARSE_VALUES.replace("{i}", i.toString()), (_d = match2.sparseValues) === null || _d === undefined ? undefined : _d.values); - } - query_result_match_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_ID.replace("{i}", i.toString()), match2.id); - if (match2.values !== undefined) { - query_result_match_event.setAttribute(import_ai_semantic_conventions8.EventAttributes.VECTOR_DB_QUERY_RESULT_VALUES.replace("{i}", i.toString()), match2.values); - } - if (match2.metadata) { - query_result_match_event.addEvent(`pinecone.query.result.${i}.metadata`, match2.metadata); - } - } - } catch (e) { - this._diag.debug(e); - (_f = (_e = this._config).exceptionLogger) === null || _f === undefined || _f.call(_e, e); - } - span.end(); - resolve2(result); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api47.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - reject(error48); - }); - }); - return import_api47.context.bind(execContext, wrappedPromise); - }; - }; - } - }; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/max.js -var require_max = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _default3 = exports.default = "ffffffff-ffff-ffff-ffff-ffffffffffff"; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/nil.js -var require_nil2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _default3 = exports.default = "00000000-0000-0000-0000-000000000000"; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/regex.js -var require_regex2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _default3 = exports.default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/validate.js -var require_validate2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _regex2 = _interopRequireDefault(require_regex2()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function validate(uuid3) { - return typeof uuid3 === "string" && _regex2.default.test(uuid3); - } - var _default3 = exports.default = validate; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/parse.js -var require_parse4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _validate = _interopRequireDefault(require_validate2()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function parse6(uuid3) { - if (!(0, _validate.default)(uuid3)) { - throw TypeError("Invalid UUID"); - } - let v; - const arr = new Uint8Array(16); - arr[0] = (v = parseInt(uuid3.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 255; - arr[2] = v >>> 8 & 255; - arr[3] = v & 255; - arr[4] = (v = parseInt(uuid3.slice(9, 13), 16)) >>> 8; - arr[5] = v & 255; - arr[6] = (v = parseInt(uuid3.slice(14, 18), 16)) >>> 8; - arr[7] = v & 255; - arr[8] = (v = parseInt(uuid3.slice(19, 23), 16)) >>> 8; - arr[9] = v & 255; - arr[10] = (v = parseInt(uuid3.slice(24, 36), 16)) / 1099511627776 & 255; - arr[11] = v / 4294967296 & 255; - arr[12] = v >>> 24 & 255; - arr[13] = v >>> 16 & 255; - arr[14] = v >>> 8 & 255; - arr[15] = v & 255; - return arr; - } - var _default3 = exports.default = parse6; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/stringify.js -var require_stringify3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - exports.unsafeStringify = unsafeStringify; - var _validate = _interopRequireDefault(require_validate2()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var byteToHex = []; - for (let i = 0;i < 256; ++i) { - byteToHex.push((i + 256).toString(16).slice(1)); - } - function unsafeStringify(arr, offset = 0) { - return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); - } - function stringify(arr, offset = 0) { - const uuid3 = unsafeStringify(arr, offset); - if (!(0, _validate.default)(uuid3)) { - throw TypeError("Stringified UUID is invalid"); - } - return uuid3; - } - var _default3 = exports.default = stringify; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/rng.js -var require_rng2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = rng; - var _nodeCrypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var rnds8Pool = new Uint8Array(256); - var poolPtr = rnds8Pool.length; - function rng() { - if (poolPtr > rnds8Pool.length - 16) { - _nodeCrypto.default.randomFillSync(rnds8Pool); - poolPtr = 0; - } - return rnds8Pool.slice(poolPtr, poolPtr += 16); - } -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v1.js -var require_v12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _rng = _interopRequireDefault(require_rng2()); - var _stringify = require_stringify3(); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var _nodeId; - var _clockseq; - var _lastMSecs = 0; - var _lastNSecs = 0; - function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node; - let clockseq = options.clockseq; - if (!options._v6) { - if (!node) { - node = _nodeId; - } - if (clockseq == null) { - clockseq = _clockseq; - } - } - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || _rng.default)(); - if (node == null) { - node = [seedBytes[0], seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - if (!_nodeId && !options._v6) { - node[0] |= 1; - _nodeId = node; - } - } - if (clockseq == null) { - clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 16383; - if (_clockseq === undefined && !options._v6) { - _clockseq = clockseq; - } - } - } - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4; - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 16383; - } - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - if (nsecs >= 1e4) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - msecs += 12219292800000; - const tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296; - b[i++] = tl >>> 24 & 255; - b[i++] = tl >>> 16 & 255; - b[i++] = tl >>> 8 & 255; - b[i++] = tl & 255; - const tmh = msecs / 4294967296 * 1e4 & 268435455; - b[i++] = tmh >>> 8 & 255; - b[i++] = tmh & 255; - b[i++] = tmh >>> 24 & 15 | 16; - b[i++] = tmh >>> 16 & 255; - b[i++] = clockseq >>> 8 | 128; - b[i++] = clockseq & 255; - for (let n = 0;n < 6; ++n) { - b[i + n] = node[n]; - } - return buf || (0, _stringify.unsafeStringify)(b); - } - var _default3 = exports.default = v1; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v1ToV6.js -var require_v1ToV6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = v1ToV6; - var _parse2 = _interopRequireDefault(require_parse4()); - var _stringify = require_stringify3(); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function v1ToV6(uuid3) { - const v1Bytes = typeof uuid3 === "string" ? (0, _parse2.default)(uuid3) : uuid3; - const v6Bytes = _v1ToV6(v1Bytes); - return typeof uuid3 === "string" ? (0, _stringify.unsafeStringify)(v6Bytes) : v6Bytes; - } - function _v1ToV6(v1Bytes, randomize = false) { - return Uint8Array.of((v1Bytes[6] & 15) << 4 | v1Bytes[7] >> 4 & 15, (v1Bytes[7] & 15) << 4 | (v1Bytes[4] & 240) >> 4, (v1Bytes[4] & 15) << 4 | (v1Bytes[5] & 240) >> 4, (v1Bytes[5] & 15) << 4 | (v1Bytes[0] & 240) >> 4, (v1Bytes[0] & 15) << 4 | (v1Bytes[1] & 240) >> 4, (v1Bytes[1] & 15) << 4 | (v1Bytes[2] & 240) >> 4, 96 | v1Bytes[2] & 15, v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]); - } -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v35.js -var require_v352 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.URL = exports.DNS = undefined; - exports.default = v35; - var _stringify = require_stringify3(); - var _parse2 = _interopRequireDefault(require_parse4()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); - const bytes = []; - for (let i = 0;i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - return bytes; - } - var DNS = exports.DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; - var URL2 = exports.URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; - function v35(name, version9, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - var _namespace; - if (typeof value === "string") { - value = stringToBytes(value); - } - if (typeof namespace === "string") { - namespace = (0, _parse2.default)(namespace); - } - if (((_namespace = namespace) === null || _namespace === undefined ? undefined : _namespace.length) !== 16) { - throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)"); - } - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 15 | version9; - bytes[8] = bytes[8] & 63 | 128; - if (buf) { - offset = offset || 0; - for (let i = 0;i < 16; ++i) { - buf[offset + i] = bytes[i]; - } - return buf; - } - return (0, _stringify.unsafeStringify)(bytes); - } - try { - generateUUID.name = name; - } catch (err) {} - generateUUID.DNS = DNS; - generateUUID.URL = URL2; - return generateUUID; - } -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/md5.js -var require_md52 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _nodeCrypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === "string") { - bytes = Buffer.from(bytes, "utf8"); - } - return _nodeCrypto.default.createHash("md5").update(bytes).digest(); - } - var _default3 = exports.default = md5; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v3.js -var require_v32 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _v = _interopRequireDefault(require_v352()); - var _md = _interopRequireDefault(require_md52()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var v3 = (0, _v.default)("v3", 48, _md.default); - var _default3 = exports.default = v3; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/native.js -var require_native2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _nodeCrypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var _default3 = exports.default = { - randomUUID: _nodeCrypto.default.randomUUID - }; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v4.js -var require_v42 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _native = _interopRequireDefault(require_native2()); - var _rng = _interopRequireDefault(require_rng2()); - var _stringify = require_stringify3(); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function v4(options, buf, offset) { - if (_native.default.randomUUID && !buf && !options) { - return _native.default.randomUUID(); - } - options = options || {}; - const rnds = options.random || (options.rng || _rng.default)(); - rnds[6] = rnds[6] & 15 | 64; - rnds[8] = rnds[8] & 63 | 128; - if (buf) { - offset = offset || 0; - for (let i = 0;i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - return buf; - } - return (0, _stringify.unsafeStringify)(rnds); - } - var _default3 = exports.default = v4; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/sha1.js -var require_sha12 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _nodeCrypto = _interopRequireDefault(__require("crypto")); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === "string") { - bytes = Buffer.from(bytes, "utf8"); - } - return _nodeCrypto.default.createHash("sha1").update(bytes).digest(); - } - var _default3 = exports.default = sha1; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v5.js -var require_v52 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _v = _interopRequireDefault(require_v352()); - var _sha = _interopRequireDefault(require_sha12()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var v5 = (0, _v.default)("v5", 80, _sha.default); - var _default3 = exports.default = v5; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v6.js -var require_v6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = v6; - var _stringify = require_stringify3(); - var _v = _interopRequireDefault(require_v12()); - var _v1ToV = _interopRequireDefault(require_v1ToV6()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function v6(options = {}, buf, offset = 0) { - let bytes = (0, _v.default)({ - ...options, - _v6: true - }, new Uint8Array(16)); - bytes = (0, _v1ToV.default)(bytes); - if (buf) { - for (let i = 0;i < 16; i++) { - buf[offset + i] = bytes[i]; - } - return buf; - } - return (0, _stringify.unsafeStringify)(bytes); - } -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v6ToV1.js -var require_v6ToV1 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = v6ToV1; - var _parse2 = _interopRequireDefault(require_parse4()); - var _stringify = require_stringify3(); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function v6ToV1(uuid3) { - const v6Bytes = typeof uuid3 === "string" ? (0, _parse2.default)(uuid3) : uuid3; - const v1Bytes = _v6ToV1(v6Bytes); - return typeof uuid3 === "string" ? (0, _stringify.unsafeStringify)(v1Bytes) : v1Bytes; - } - function _v6ToV1(v6Bytes) { - return Uint8Array.of((v6Bytes[3] & 15) << 4 | v6Bytes[4] >> 4 & 15, (v6Bytes[4] & 15) << 4 | (v6Bytes[5] & 240) >> 4, (v6Bytes[5] & 15) << 4 | v6Bytes[6] & 15, v6Bytes[7], (v6Bytes[1] & 15) << 4 | (v6Bytes[2] & 240) >> 4, (v6Bytes[2] & 15) << 4 | (v6Bytes[3] & 240) >> 4, 16 | (v6Bytes[0] & 240) >> 4, (v6Bytes[0] & 15) << 4 | (v6Bytes[1] & 240) >> 4, v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]); - } -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/v7.js -var require_v7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _rng = _interopRequireDefault(require_rng2()); - var _stringify = require_stringify3(); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - var _seqLow = null; - var _seqHigh = null; - var _msecs = 0; - function v7(options, buf, offset) { - options = options || {}; - let i = buf && offset || 0; - const b = buf || new Uint8Array(16); - const rnds = options.random || (options.rng || _rng.default)(); - const msecs = options.msecs !== undefined ? options.msecs : Date.now(); - let seq = options.seq !== undefined ? options.seq : null; - let seqHigh = _seqHigh; - let seqLow = _seqLow; - if (msecs > _msecs && options.msecs === undefined) { - _msecs = msecs; - if (seq !== null) { - seqHigh = null; - seqLow = null; - } - } - if (seq !== null) { - if (seq > 2147483647) { - seq = 2147483647; - } - seqHigh = seq >>> 19 & 4095; - seqLow = seq & 524287; - } - if (seqHigh === null || seqLow === null) { - seqHigh = rnds[6] & 127; - seqHigh = seqHigh << 8 | rnds[7]; - seqLow = rnds[8] & 63; - seqLow = seqLow << 8 | rnds[9]; - seqLow = seqLow << 5 | rnds[10] >>> 3; - } - if (msecs + 1e4 > _msecs && seq === null) { - if (++seqLow > 524287) { - seqLow = 0; - if (++seqHigh > 4095) { - seqHigh = 0; - _msecs++; - } - } - } else { - _msecs = msecs; - } - _seqHigh = seqHigh; - _seqLow = seqLow; - b[i++] = _msecs / 1099511627776 & 255; - b[i++] = _msecs / 4294967296 & 255; - b[i++] = _msecs / 16777216 & 255; - b[i++] = _msecs / 65536 & 255; - b[i++] = _msecs / 256 & 255; - b[i++] = _msecs & 255; - b[i++] = seqHigh >>> 4 & 15 | 112; - b[i++] = seqHigh & 255; - b[i++] = seqLow >>> 13 & 63 | 128; - b[i++] = seqLow >>> 5 & 255; - b[i++] = seqLow << 3 & 255 | rnds[10] & 7; - b[i++] = rnds[11]; - b[i++] = rnds[12]; - b[i++] = rnds[13]; - b[i++] = rnds[14]; - b[i++] = rnds[15]; - return buf || (0, _stringify.unsafeStringify)(b); - } - var _default3 = exports.default = v7; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/version.js -var require_version58 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = undefined; - var _validate = _interopRequireDefault(require_validate2()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } - function version9(uuid3) { - if (!(0, _validate.default)(uuid3)) { - throw TypeError("Invalid UUID"); - } - return parseInt(uuid3.slice(14, 15), 16); - } - var _default3 = exports.default = version9; -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/dist/index.js -var require_dist4 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { - value: true - }); - Object.defineProperty(exports, "MAX", { - enumerable: true, - get: function() { - return _max.default; - } - }); - Object.defineProperty(exports, "NIL", { - enumerable: true, - get: function() { - return _nil.default; - } - }); - Object.defineProperty(exports, "parse", { - enumerable: true, - get: function() { - return _parse2.default; - } - }); - Object.defineProperty(exports, "stringify", { - enumerable: true, - get: function() { - return _stringify.default; - } - }); - Object.defineProperty(exports, "v1", { - enumerable: true, - get: function() { - return _v.default; - } - }); - Object.defineProperty(exports, "v1ToV6", { - enumerable: true, - get: function() { - return _v1ToV.default; - } - }); - Object.defineProperty(exports, "v3", { - enumerable: true, - get: function() { - return _v2.default; - } - }); - Object.defineProperty(exports, "v4", { - enumerable: true, - get: function() { - return _v3.default; - } - }); - Object.defineProperty(exports, "v5", { - enumerable: true, - get: function() { - return _v4.default; - } - }); - Object.defineProperty(exports, "v6", { - enumerable: true, - get: function() { - return _v5.default; - } - }); - Object.defineProperty(exports, "v6ToV1", { - enumerable: true, - get: function() { - return _v6ToV.default; - } - }); - Object.defineProperty(exports, "v7", { - enumerable: true, - get: function() { - return _v6.default; - } - }); - Object.defineProperty(exports, "validate", { - enumerable: true, - get: function() { - return _validate.default; - } - }); - Object.defineProperty(exports, "version", { - enumerable: true, - get: function() { - return _version.default; - } - }); - var _max = _interopRequireDefault(require_max()); - var _nil = _interopRequireDefault(require_nil2()); - var _parse2 = _interopRequireDefault(require_parse4()); - var _stringify = _interopRequireDefault(require_stringify3()); - var _v = _interopRequireDefault(require_v12()); - var _v1ToV = _interopRequireDefault(require_v1ToV6()); - var _v2 = _interopRequireDefault(require_v32()); - var _v3 = _interopRequireDefault(require_v42()); - var _v4 = _interopRequireDefault(require_v52()); - var _v5 = _interopRequireDefault(require_v6()); - var _v6ToV = _interopRequireDefault(require_v6ToV1()); - var _v6 = _interopRequireDefault(require_v7()); - var _validate = _interopRequireDefault(require_validate2()); - var _version = _interopRequireDefault(require_version58()); - function _interopRequireDefault(e) { - return e && e.__esModule ? e : { default: e }; - } -}); - -// ../../../../node_modules/.bun/uuid@10.0.0/node_modules/uuid/wrapper.mjs -var import_dist, v1, v1ToV6, v3, v4, v5, v6, v6ToV1, v7, NIL, MAX, version9, validate, stringify, parse6; -var init_wrapper = __esm(() => { - import_dist = __toESM(require_dist4(), 1); - v1 = import_dist.default.v1; - v1ToV6 = import_dist.default.v1ToV6; - v3 = import_dist.default.v3; - v4 = import_dist.default.v4; - v5 = import_dist.default.v5; - v6 = import_dist.default.v6; - v6ToV1 = import_dist.default.v6ToV1; - v7 = import_dist.default.v7; - NIL = import_dist.default.NIL; - MAX = import_dist.default.MAX; - version9 = import_dist.default.version; - validate = import_dist.default.validate; - stringify = import_dist.default.stringify; - parse6 = import_dist.default.parse; -}); - -// ../../../../node_modules/.bun/decamelize@1.2.0/node_modules/decamelize/index.js -var require_decamelize = __commonJS((exports, module) => { - module.exports = function(str, sep) { - if (typeof str !== "string") { - throw new TypeError("Expected a string"); - } - sep = typeof sep === "undefined" ? "_" : sep; - return str.replace(/([a-z\d])([A-Z])/g, "$1" + sep + "$2").replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1" + sep + "$2").toLowerCase(); - }; -}); - -// ../../../../node_modules/.bun/camelcase@6.3.0/node_modules/camelcase/index.js -var require_camelcase = __commonJS((exports, module) => { - var UPPERCASE = /[\p{Lu}]/u; - var LOWERCASE = /[\p{Ll}]/u; - var LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/gu; - var IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u; - var SEPARATORS = /[_.\- ]+/; - var LEADING_SEPARATORS = new RegExp("^" + SEPARATORS.source); - var SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, "gu"); - var NUMBERS_AND_IDENTIFIER = new RegExp("\\d+" + IDENTIFIER.source, "gu"); - var preserveCamelCase = (string5, toLowerCase, toUpperCase) => { - let isLastCharLower = false; - let isLastCharUpper = false; - let isLastLastCharUpper = false; - for (let i = 0;i < string5.length; i++) { - const character = string5[i]; - if (isLastCharLower && UPPERCASE.test(character)) { - string5 = string5.slice(0, i) + "-" + string5.slice(i); - isLastCharLower = false; - isLastLastCharUpper = isLastCharUpper; - isLastCharUpper = true; - i++; - } else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) { - string5 = string5.slice(0, i - 1) + "-" + string5.slice(i - 1); - isLastLastCharUpper = isLastCharUpper; - isLastCharUpper = false; - isLastCharLower = true; - } else { - isLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character; - isLastLastCharUpper = isLastCharUpper; - isLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character; - } - } - return string5; - }; - var preserveConsecutiveUppercase = (input, toLowerCase) => { - LEADING_CAPITAL.lastIndex = 0; - return input.replace(LEADING_CAPITAL, (m1) => toLowerCase(m1)); - }; - var postProcess = (input, toUpperCase) => { - SEPARATORS_AND_IDENTIFIER.lastIndex = 0; - NUMBERS_AND_IDENTIFIER.lastIndex = 0; - return input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier)).replace(NUMBERS_AND_IDENTIFIER, (m) => toUpperCase(m)); - }; - var camelCase = (input, options) => { - if (!(typeof input === "string" || Array.isArray(input))) { - throw new TypeError("Expected the input to be `string | string[]`"); - } - options = { - pascalCase: false, - preserveConsecutiveUppercase: false, - ...options - }; - if (Array.isArray(input)) { - input = input.map((x) => x.trim()).filter((x) => x.length).join("-"); - } else { - input = input.trim(); - } - if (input.length === 0) { - return ""; - } - const toLowerCase = options.locale === false ? (string5) => string5.toLowerCase() : (string5) => string5.toLocaleLowerCase(options.locale); - const toUpperCase = options.locale === false ? (string5) => string5.toUpperCase() : (string5) => string5.toLocaleUpperCase(options.locale); - if (input.length === 1) { - return options.pascalCase ? toUpperCase(input) : toLowerCase(input); - } - const hasUpperCase = input !== toLowerCase(input); - if (hasUpperCase) { - input = preserveCamelCase(input, toLowerCase, toUpperCase); - } - input = input.replace(LEADING_SEPARATORS, ""); - if (options.preserveConsecutiveUppercase) { - input = preserveConsecutiveUppercase(input, toLowerCase); - } else { - input = toLowerCase(input); - } - if (options.pascalCase) { - input = toUpperCase(input.charAt(0)) + input.slice(1); - } - return postProcess(input, toUpperCase); - }; - module.exports = camelCase; - module.exports.default = camelCase; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/load/map_keys.js -function keyToJson(key, map2) { - return map2?.[key] || import_decamelize.default(key); -} -function mapKeys(fields, mapper, map2) { - const mapped = {}; - for (const key in fields) { - if (Object.hasOwn(fields, key)) { - mapped[mapper(key, map2)] = fields[key]; - } - } - return mapped; -} -var import_decamelize, import_camelcase; -var init_map_keys = __esm(() => { - import_decamelize = __toESM(require_decamelize(), 1); - import_camelcase = __toESM(require_camelcase(), 1); -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/load/validation.js -function needsEscaping(obj) { - return "lc" in obj || Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj; -} -function escapeObject(obj) { - return { [LC_ESCAPED_KEY]: obj }; -} -function isSerializableLike(obj) { - return obj !== null && typeof obj === "object" && "lc_serializable" in obj && typeof obj.toJSON === "function"; -} -function escapeIfNeeded(value) { - if (value !== null && typeof value === "object" && !Array.isArray(value)) { - if (isSerializableLike(value)) { - return value; - } - const record3 = value; - if (needsEscaping(record3)) { - return escapeObject(record3); - } - const result = {}; - for (const [key, val] of Object.entries(record3)) { - result[key] = escapeIfNeeded(val); - } - return result; - } - if (Array.isArray(value)) { - return value.map((item) => escapeIfNeeded(item)); - } - return value; -} -var LC_ESCAPED_KEY = "__lc_escaped__"; - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/load/serializable.js -function shallowCopy(obj) { - return Array.isArray(obj) ? [...obj] : { ...obj }; -} -function replaceSecrets(root, secretsMap) { - const result = shallowCopy(root); - for (const [path, secretId] of Object.entries(secretsMap)) { - const [last, ...partsReverse] = path.split(".").reverse(); - let current = result; - for (const part of partsReverse.reverse()) { - if (current[part] === undefined) { - break; - } - current[part] = shallowCopy(current[part]); - current = current[part]; - } - if (current[last] !== undefined) { - current[last] = { - lc: 1, - type: "secret", - id: [secretId] - }; - } - } - return result; -} -function get_lc_unique_name(serializableClass) { - const parentClass = Object.getPrototypeOf(serializableClass); - const lcNameIsSubclassed = typeof serializableClass.lc_name === "function" && (typeof parentClass.lc_name !== "function" || serializableClass.lc_name() !== parentClass.lc_name()); - if (lcNameIsSubclassed) { - return serializableClass.lc_name(); - } else { - return serializableClass.name; - } -} - -class Serializable { - static lc_name() { - return this.name; - } - get lc_id() { - return [ - ...this.lc_namespace, - get_lc_unique_name(this.constructor) - ]; - } - get lc_secrets() { - return; - } - get lc_attributes() { - return; - } - get lc_aliases() { - return; - } - get lc_serializable_keys() { - return; - } - constructor(kwargs, ..._args) { - Object.defineProperty(this, "lc_serializable", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "lc_kwargs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - if (this.lc_serializable_keys !== undefined) { - this.lc_kwargs = Object.fromEntries(Object.entries(kwargs || {}).filter(([key]) => this.lc_serializable_keys?.includes(key))); - } else { - this.lc_kwargs = kwargs ?? {}; - } - } - toJSON() { - if (!this.lc_serializable) { - return this.toJSONNotImplemented(); - } - if (this.lc_kwargs instanceof Serializable || typeof this.lc_kwargs !== "object" || Array.isArray(this.lc_kwargs)) { - return this.toJSONNotImplemented(); - } - const aliases = {}; - const secrets = {}; - const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => { - acc[key] = key in this ? this[key] : this.lc_kwargs[key]; - return acc; - }, {}); - for (let current = Object.getPrototypeOf(this);current; current = Object.getPrototypeOf(current)) { - Object.assign(aliases, Reflect.get(current, "lc_aliases", this)); - Object.assign(secrets, Reflect.get(current, "lc_secrets", this)); - Object.assign(kwargs, Reflect.get(current, "lc_attributes", this)); - } - Object.keys(secrets).forEach((keyPath) => { - let read = this; - let write = kwargs; - const [last, ...partsReverse] = keyPath.split(".").reverse(); - for (const key of partsReverse.reverse()) { - if (!(key in read) || read[key] === undefined) - return; - if (!(key in write) || write[key] === undefined) { - if (typeof read[key] === "object" && read[key] != null) { - write[key] = {}; - } else if (Array.isArray(read[key])) { - write[key] = []; - } - } - read = read[key]; - write = write[key]; - } - if (last in read && read[last] !== undefined) { - write[last] = write[last] || read[last]; - } - }); - const escapedKwargs = {}; - for (const [key, value] of Object.entries(kwargs)) { - escapedKwargs[key] = escapeIfNeeded(value); - } - const kwargsWithSecrets = Object.keys(secrets).length ? replaceSecrets(escapedKwargs, secrets) : escapedKwargs; - const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases); - return { - lc: 1, - type: "constructor", - id: this.lc_id, - kwargs: processedKwargs - }; - } - toJSONNotImplemented() { - return { - lc: 1, - type: "not_implemented", - id: this.lc_id - }; - } -} -var init_serializable = __esm(() => { - init_map_keys(); -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/utils/env.js -function getEnvironmentVariable(name) { - try { - if (typeof process !== "undefined") { - return process.env?.[name]; - } else if (isDeno()) { - return Deno?.env.get(name); - } else { - return; - } - } catch (e) { - return; - } -} -var isDeno = () => typeof Deno !== "undefined"; - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/callbacks/base.js -class BaseCallbackHandlerMethodsClass { -} -var BaseCallbackHandler; -var init_base2 = __esm(() => { - init_wrapper(); - init_serializable(); - BaseCallbackHandler = class BaseCallbackHandler extends BaseCallbackHandlerMethodsClass { - get lc_namespace() { - return ["langchain_core", "callbacks", this.name]; - } - get lc_secrets() { - return; - } - get lc_attributes() { - return; - } - get lc_aliases() { - return; - } - get lc_serializable_keys() { - return; - } - static lc_name() { - return this.name; - } - get lc_id() { - return [ - ...this.lc_namespace, - get_lc_unique_name(this.constructor) - ]; - } - constructor(input) { - super(); - Object.defineProperty(this, "lc_serializable", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "lc_kwargs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "ignoreLLM", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreChain", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreAgent", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreRetriever", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreCustomEvent", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "raiseError", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "awaitHandlers", { - enumerable: true, - configurable: true, - writable: true, - value: getEnvironmentVariable("LANGCHAIN_CALLBACKS_BACKGROUND") === "false" - }); - this.lc_kwargs = input || {}; - if (input) { - this.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM; - this.ignoreChain = input.ignoreChain ?? this.ignoreChain; - this.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent; - this.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever; - this.ignoreCustomEvent = input.ignoreCustomEvent ?? this.ignoreCustomEvent; - this.raiseError = input.raiseError ?? this.raiseError; - this.awaitHandlers = this.raiseError || (input._awaitHandler ?? this.awaitHandlers); - } - } - copy() { - return new this.constructor(this); - } - toJSON() { - return Serializable.prototype.toJSON.call(this); - } - toJSONNotImplemented() { - return Serializable.prototype.toJSONNotImplemented.call(this); - } - static fromMethods(methods) { - - class Handler extends BaseCallbackHandler { - constructor() { - super(); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: v4() - }); - Object.assign(this, methods); - } - } - return new Handler; - } - }; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/callbacks/base.js -var init_base3 = __esm(() => { - init_base2(); -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/load/map_keys.cjs -var require_map_keys = __commonJS((exports) => { - var __importDefault2 = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.keyToJson = keyToJson2; - exports.keyFromJson = keyFromJson; - exports.mapKeys = mapKeys2; - var decamelize_1 = __importDefault2(require_decamelize()); - var camelcase_1 = __importDefault2(require_camelcase()); - function keyToJson2(key, map2) { - return map2?.[key] || (0, decamelize_1.default)(key); - } - function keyFromJson(key, map2) { - return map2?.[key] || (0, camelcase_1.default)(key); - } - function mapKeys2(fields, mapper, map2) { - const mapped = {}; - for (const key in fields) { - if (Object.hasOwn(fields, key)) { - mapped[mapper(key, map2)] = fields[key]; - } - } - return mapped; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/load/validation.cjs -var require_validation = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LC_ESCAPED_KEY = undefined; - exports.needsEscaping = needsEscaping2; - exports.escapeObject = escapeObject2; - exports.isEscapedObject = isEscapedObject; - exports.serializeValue = serializeValue; - exports.serializeLcObject = serializeLcObject; - exports.escapeIfNeeded = escapeIfNeeded2; - exports.unescapeValue = unescapeValue; - exports.LC_ESCAPED_KEY = "__lc_escaped__"; - function needsEscaping2(obj) { - return "lc" in obj || Object.keys(obj).length === 1 && exports.LC_ESCAPED_KEY in obj; - } - function escapeObject2(obj) { - return { [exports.LC_ESCAPED_KEY]: obj }; - } - function isEscapedObject(obj) { - return Object.keys(obj).length === 1 && exports.LC_ESCAPED_KEY in obj; - } - function isSerializableLike2(obj) { - return obj !== null && typeof obj === "object" && "lc_serializable" in obj && typeof obj.toJSON === "function"; - } - function createNotImplemented(obj) { - let id; - if (obj !== null && typeof obj === "object") { - if ("lc_id" in obj && Array.isArray(obj.lc_id)) { - id = obj.lc_id; - } else { - id = [obj.constructor?.name ?? "Object"]; - } - } else { - id = [typeof obj]; - } - return { - lc: 1, - type: "not_implemented", - id - }; - } - function serializeValue(obj) { - if (isSerializableLike2(obj)) { - return serializeLcObject(obj); - } - if (obj !== null && typeof obj === "object" && !Array.isArray(obj)) { - const record3 = obj; - if (needsEscaping2(record3)) { - return escapeObject2(record3); - } - const result = {}; - for (const [key, value] of Object.entries(record3)) { - result[key] = serializeValue(value); - } - return result; - } - if (Array.isArray(obj)) { - return obj.map((item) => serializeValue(item)); - } - if (typeof obj === "string" || typeof obj === "number" || typeof obj === "boolean" || obj === null) { - return obj; - } - return createNotImplemented(obj); - } - function serializeLcObject(obj) { - const secretFields = new Set(Object.keys(obj.lc_secrets ?? {})); - const serialized = { ...obj.toJSON() }; - if (serialized.type === "constructor" && serialized.kwargs) { - const newKwargs = {}; - for (const [key, value] of Object.entries(serialized.kwargs)) { - if (secretFields.has(key)) { - newKwargs[key] = value; - } else { - newKwargs[key] = serializeValue(value); - } - } - serialized.kwargs = newKwargs; - } - return serialized; - } - function escapeIfNeeded2(value) { - if (value !== null && typeof value === "object" && !Array.isArray(value)) { - if (isSerializableLike2(value)) { - return value; - } - const record3 = value; - if (needsEscaping2(record3)) { - return escapeObject2(record3); - } - const result = {}; - for (const [key, val] of Object.entries(record3)) { - result[key] = escapeIfNeeded2(val); - } - return result; - } - if (Array.isArray(value)) { - return value.map((item) => escapeIfNeeded2(item)); - } - return value; - } - function unescapeValue(obj) { - if (obj !== null && typeof obj === "object" && !Array.isArray(obj)) { - const record3 = obj; - if (isEscapedObject(record3)) { - return record3[exports.LC_ESCAPED_KEY]; - } - const result = {}; - for (const [key, value] of Object.entries(record3)) { - result[key] = unescapeValue(value); - } - return result; - } - if (Array.isArray(obj)) { - return obj.map((item) => unescapeValue(item)); - } - return obj; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/load/serializable.cjs -var require_serializable = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Serializable = undefined; - exports.get_lc_unique_name = get_lc_unique_name2; - var map_keys_js_1 = require_map_keys(); - var validation_js_1 = require_validation(); - function shallowCopy2(obj) { - return Array.isArray(obj) ? [...obj] : { ...obj }; - } - function replaceSecrets2(root, secretsMap) { - const result = shallowCopy2(root); - for (const [path, secretId] of Object.entries(secretsMap)) { - const [last, ...partsReverse] = path.split(".").reverse(); - let current = result; - for (const part of partsReverse.reverse()) { - if (current[part] === undefined) { - break; - } - current[part] = shallowCopy2(current[part]); - current = current[part]; - } - if (current[last] !== undefined) { - current[last] = { - lc: 1, - type: "secret", - id: [secretId] - }; - } - } - return result; - } - function get_lc_unique_name2(serializableClass) { - const parentClass = Object.getPrototypeOf(serializableClass); - const lcNameIsSubclassed = typeof serializableClass.lc_name === "function" && (typeof parentClass.lc_name !== "function" || serializableClass.lc_name() !== parentClass.lc_name()); - if (lcNameIsSubclassed) { - return serializableClass.lc_name(); - } else { - return serializableClass.name; - } - } - - class Serializable2 { - static lc_name() { - return this.name; - } - get lc_id() { - return [ - ...this.lc_namespace, - get_lc_unique_name2(this.constructor) - ]; - } - get lc_secrets() { - return; - } - get lc_attributes() { - return; - } - get lc_aliases() { - return; - } - get lc_serializable_keys() { - return; - } - constructor(kwargs, ..._args) { - Object.defineProperty(this, "lc_serializable", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "lc_kwargs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - if (this.lc_serializable_keys !== undefined) { - this.lc_kwargs = Object.fromEntries(Object.entries(kwargs || {}).filter(([key]) => this.lc_serializable_keys?.includes(key))); - } else { - this.lc_kwargs = kwargs ?? {}; - } - } - toJSON() { - if (!this.lc_serializable) { - return this.toJSONNotImplemented(); - } - if (this.lc_kwargs instanceof Serializable2 || typeof this.lc_kwargs !== "object" || Array.isArray(this.lc_kwargs)) { - return this.toJSONNotImplemented(); - } - const aliases = {}; - const secrets = {}; - const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => { - acc[key] = key in this ? this[key] : this.lc_kwargs[key]; - return acc; - }, {}); - for (let current = Object.getPrototypeOf(this);current; current = Object.getPrototypeOf(current)) { - Object.assign(aliases, Reflect.get(current, "lc_aliases", this)); - Object.assign(secrets, Reflect.get(current, "lc_secrets", this)); - Object.assign(kwargs, Reflect.get(current, "lc_attributes", this)); - } - Object.keys(secrets).forEach((keyPath) => { - let read = this; - let write = kwargs; - const [last, ...partsReverse] = keyPath.split(".").reverse(); - for (const key of partsReverse.reverse()) { - if (!(key in read) || read[key] === undefined) - return; - if (!(key in write) || write[key] === undefined) { - if (typeof read[key] === "object" && read[key] != null) { - write[key] = {}; - } else if (Array.isArray(read[key])) { - write[key] = []; - } - } - read = read[key]; - write = write[key]; - } - if (last in read && read[last] !== undefined) { - write[last] = write[last] || read[last]; - } - }); - const escapedKwargs = {}; - for (const [key, value] of Object.entries(kwargs)) { - escapedKwargs[key] = (0, validation_js_1.escapeIfNeeded)(value); - } - const kwargsWithSecrets = Object.keys(secrets).length ? replaceSecrets2(escapedKwargs, secrets) : escapedKwargs; - const processedKwargs = (0, map_keys_js_1.mapKeys)(kwargsWithSecrets, map_keys_js_1.keyToJson, aliases); - return { - lc: 1, - type: "constructor", - id: this.lc_id, - kwargs: processedKwargs - }; - } - toJSONNotImplemented() { - return { - lc: 1, - type: "not_implemented", - id: this.lc_id - }; - } - } - exports.Serializable = Serializable2; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/utils/env.cjs -var require_env = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getEnv = exports.isNode = exports.isDeno = exports.isJsDom = exports.isWebWorker = exports.isBrowser = undefined; - exports.getRuntimeEnvironment = getRuntimeEnvironment; - exports.getRuntimeEnvironmentSync = getRuntimeEnvironmentSync; - exports.getEnvironmentVariable = getEnvironmentVariable2; - var isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined"; - exports.isBrowser = isBrowser; - var isWebWorker = () => typeof globalThis === "object" && globalThis.constructor && globalThis.constructor.name === "DedicatedWorkerGlobalScope"; - exports.isWebWorker = isWebWorker; - var isJsDom = () => typeof window !== "undefined" && window.name === "nodejs" || typeof navigator !== "undefined" && navigator.userAgent.includes("jsdom"); - exports.isJsDom = isJsDom; - var isDeno2 = () => typeof Deno !== "undefined"; - exports.isDeno = isDeno2; - var isNode2 = () => typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined" && !(0, exports.isDeno)(); - exports.isNode = isNode2; - var getEnv = () => { - let env; - if ((0, exports.isBrowser)()) { - env = "browser"; - } else if ((0, exports.isNode)()) { - env = "node"; - } else if ((0, exports.isWebWorker)()) { - env = "webworker"; - } else if ((0, exports.isJsDom)()) { - env = "jsdom"; - } else if ((0, exports.isDeno)()) { - env = "deno"; - } else { - env = "other"; - } - return env; - }; - exports.getEnv = getEnv; - var runtimeEnvironment; - async function getRuntimeEnvironment() { - return getRuntimeEnvironmentSync(); - } - function getRuntimeEnvironmentSync() { - if (runtimeEnvironment === undefined) { - const env = (0, exports.getEnv)(); - runtimeEnvironment = { - library: "langchain-js", - runtime: env - }; - } - return runtimeEnvironment; - } - function getEnvironmentVariable2(name) { - try { - if (typeof process !== "undefined") { - return process.env?.[name]; - } else if ((0, exports.isDeno)()) { - return Deno?.env.get(name); - } else { - return; - } - } catch (e) { - return; - } - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/callbacks/base.cjs -var require_base = __commonJS((exports) => { - var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar2 = exports && exports.__importStar || function() { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function(o2) { - var ar = []; - for (var k in o2) - if (Object.prototype.hasOwnProperty.call(o2, k)) - ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k = ownKeys(mod2), i = 0;i < k.length; i++) - if (k[i] !== "default") - __createBinding2(result, mod2, k[i]); - } - __setModuleDefault(result, mod2); - return result; - }; - }(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isBaseCallbackHandler = exports.BaseCallbackHandler = undefined; - exports.callbackHandlerPrefersStreaming = callbackHandlerPrefersStreaming; - var uuid5 = __importStar2(require_dist4()); - var serializable_js_1 = require_serializable(); - var env_js_1 = require_env(); - - class BaseCallbackHandlerMethodsClass2 { - } - function callbackHandlerPrefersStreaming(x) { - return "lc_prefer_streaming" in x && x.lc_prefer_streaming; - } - - class BaseCallbackHandler2 extends BaseCallbackHandlerMethodsClass2 { - get lc_namespace() { - return ["langchain_core", "callbacks", this.name]; - } - get lc_secrets() { - return; - } - get lc_attributes() { - return; - } - get lc_aliases() { - return; - } - get lc_serializable_keys() { - return; - } - static lc_name() { - return this.name; - } - get lc_id() { - return [ - ...this.lc_namespace, - (0, serializable_js_1.get_lc_unique_name)(this.constructor) - ]; - } - constructor(input) { - super(); - Object.defineProperty(this, "lc_serializable", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "lc_kwargs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "ignoreLLM", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreChain", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreAgent", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreRetriever", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "ignoreCustomEvent", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "raiseError", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "awaitHandlers", { - enumerable: true, - configurable: true, - writable: true, - value: (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_CALLBACKS_BACKGROUND") === "false" - }); - this.lc_kwargs = input || {}; - if (input) { - this.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM; - this.ignoreChain = input.ignoreChain ?? this.ignoreChain; - this.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent; - this.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever; - this.ignoreCustomEvent = input.ignoreCustomEvent ?? this.ignoreCustomEvent; - this.raiseError = input.raiseError ?? this.raiseError; - this.awaitHandlers = this.raiseError || (input._awaitHandler ?? this.awaitHandlers); - } - } - copy() { - return new this.constructor(this); - } - toJSON() { - return serializable_js_1.Serializable.prototype.toJSON.call(this); - } - toJSONNotImplemented() { - return serializable_js_1.Serializable.prototype.toJSONNotImplemented.call(this); - } - static fromMethods(methods) { - - class Handler extends BaseCallbackHandler2 { - constructor() { - super(); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: uuid5.v4() - }); - Object.assign(this, methods); - } - } - return new Handler; - } - } - exports.BaseCallbackHandler = BaseCallbackHandler2; - var isBaseCallbackHandler = (x) => { - const callbackHandler = x; - return callbackHandler !== undefined && typeof callbackHandler.copy === "function" && typeof callbackHandler.name === "string" && typeof callbackHandler.awaitHandlers === "boolean"; - }; - exports.isBaseCallbackHandler = isBaseCallbackHandler; -}); - -// ../../../../node_modules/.bun/ansi-styles@5.2.0/node_modules/ansi-styles/index.js -var require_ansi_styles = __commonJS((exports, module) => { - var ANSI_BACKGROUND_OFFSET = 10; - var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`; - var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`; - function assembleStyles() { - const codes = new Map; - const styles = { - modifier: { - reset: [0, 0], - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - overline: [53, 55], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - blackBright: [90, 39], - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - styles.color.gray = styles.color.blackBright; - styles.bgColor.bgGray = styles.bgColor.bgBlackBright; - styles.color.grey = styles.color.blackBright; - styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\x1B[${style[0]}m`, - close: `\x1B[${style[1]}m` - }; - group[styleName] = styles[styleName]; - codes.set(style[0], style[1]); - } - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - } - Object.defineProperty(styles, "codes", { - value: codes, - enumerable: false - }); - styles.color.close = "\x1B[39m"; - styles.bgColor.close = "\x1B[49m"; - styles.color.ansi256 = wrapAnsi256(); - styles.color.ansi16m = wrapAnsi16m(); - styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); - styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); - Object.defineProperties(styles, { - rgbToAnsi256: { - value: (red, green, blue) => { - if (red === green && green === blue) { - if (red < 8) { - return 16; - } - if (red > 248) { - return 231; - } - return Math.round((red - 8) / 247 * 24) + 232; - } - return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5); - }, - enumerable: false - }, - hexToRgb: { - value: (hex3) => { - const matches = /(?[a-f\d]{6}|[a-f\d]{3})/i.exec(hex3.toString(16)); - if (!matches) { - return [0, 0, 0]; - } - let { colorString } = matches.groups; - if (colorString.length === 3) { - colorString = colorString.split("").map((character) => character + character).join(""); - } - const integer2 = Number.parseInt(colorString, 16); - return [ - integer2 >> 16 & 255, - integer2 >> 8 & 255, - integer2 & 255 - ]; - }, - enumerable: false - }, - hexToAnsi256: { - value: (hex3) => styles.rgbToAnsi256(...styles.hexToRgb(hex3)), - enumerable: false - } - }); - return styles; - } - Object.defineProperty(module, "exports", { - enumerable: true, - get: assembleStyles - }); -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/experimental/otel/constants.cjs -var require_constants13 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AI_SDK_TOOL_OPERATIONS = exports.AI_SDK_LLM_OPERATIONS = exports.GEN_AI_CHOICE = exports.GEN_AI_ASSISTANT_MESSAGE = exports.GEN_AI_USER_MESSAGE = exports.GEN_AI_SYSTEM_MESSAGE = exports.LANGSMITH_TRACEABLE_PARENT_OTEL_SPAN_ID = exports.LANGSMITH_IS_ROOT = exports.LANGSMITH_TRACEABLE = exports.LANGSMITH_REFERENCE_EXAMPLE_ID = exports.LANGSMITH_USAGE_METADATA = exports.LANGSMITH_PARENT_RUN_ID = exports.LANGSMITH_DOTTED_ORDER = exports.LANGSMITH_TRACE_ID = exports.LANGSMITH_RUN_ID = exports.LANGSMITH_REQUEST_HEADERS = exports.LANGSMITH_REQUEST_STREAMING = exports.LANGSMITH_RUNTIME = exports.LANGSMITH_TAGS = exports.LANGSMITH_METADATA = exports.LANGSMITH_NAME = exports.LANGSMITH_RUN_TYPE = exports.LANGSMITH_SESSION_NAME = exports.LANGSMITH_SESSION_ID = exports.GEN_AI_USAGE_OUTPUT_TOKEN_DETAILS = exports.GEN_AI_USAGE_INPUT_TOKEN_DETAILS = exports.GEN_AI_RESPONSE_SYSTEM_FINGERPRINT = exports.GEN_AI_RESPONSE_SERVICE_TIER = exports.GEN_AI_RESPONSE_ID = exports.GEN_AI_SERIALIZED_DOC = exports.GEN_AI_SERIALIZED_SIGNATURE = exports.GEN_AI_SERIALIZED_NAME = exports.GEN_AI_REQUEST_EXTRA_BODY = exports.GEN_AI_REQUEST_EXTRA_QUERY = exports.GENAI_COMPLETION = exports.GENAI_PROMPT = exports.GEN_AI_RESPONSE_FINISH_REASONS = exports.GEN_AI_REQUEST_PRESENCE_PENALTY = exports.GEN_AI_REQUEST_FREQUENCY_PENALTY = exports.GEN_AI_REQUEST_TOP_P = exports.GEN_AI_REQUEST_TEMPERATURE = exports.GEN_AI_REQUEST_MAX_TOKENS = exports.GEN_AI_USAGE_TOTAL_TOKENS = exports.GEN_AI_USAGE_OUTPUT_TOKENS = exports.GEN_AI_USAGE_INPUT_TOKENS = exports.GEN_AI_RESPONSE_MODEL = exports.GEN_AI_REQUEST_MODEL = exports.GEN_AI_SYSTEM = exports.GEN_AI_OPERATION_NAME = undefined; - exports.GEN_AI_OPERATION_NAME = "gen_ai.operation.name"; - exports.GEN_AI_SYSTEM = "gen_ai.system"; - exports.GEN_AI_REQUEST_MODEL = "gen_ai.request.model"; - exports.GEN_AI_RESPONSE_MODEL = "gen_ai.response.model"; - exports.GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens"; - exports.GEN_AI_USAGE_OUTPUT_TOKENS = "gen_ai.usage.output_tokens"; - exports.GEN_AI_USAGE_TOTAL_TOKENS = "gen_ai.usage.total_tokens"; - exports.GEN_AI_REQUEST_MAX_TOKENS = "gen_ai.request.max_tokens"; - exports.GEN_AI_REQUEST_TEMPERATURE = "gen_ai.request.temperature"; - exports.GEN_AI_REQUEST_TOP_P = "gen_ai.request.top_p"; - exports.GEN_AI_REQUEST_FREQUENCY_PENALTY = "gen_ai.request.frequency_penalty"; - exports.GEN_AI_REQUEST_PRESENCE_PENALTY = "gen_ai.request.presence_penalty"; - exports.GEN_AI_RESPONSE_FINISH_REASONS = "gen_ai.response.finish_reasons"; - exports.GENAI_PROMPT = "gen_ai.prompt"; - exports.GENAI_COMPLETION = "gen_ai.completion"; - exports.GEN_AI_REQUEST_EXTRA_QUERY = "gen_ai.request.extra_query"; - exports.GEN_AI_REQUEST_EXTRA_BODY = "gen_ai.request.extra_body"; - exports.GEN_AI_SERIALIZED_NAME = "gen_ai.serialized.name"; - exports.GEN_AI_SERIALIZED_SIGNATURE = "gen_ai.serialized.signature"; - exports.GEN_AI_SERIALIZED_DOC = "gen_ai.serialized.doc"; - exports.GEN_AI_RESPONSE_ID = "gen_ai.response.id"; - exports.GEN_AI_RESPONSE_SERVICE_TIER = "gen_ai.response.service_tier"; - exports.GEN_AI_RESPONSE_SYSTEM_FINGERPRINT = "gen_ai.response.system_fingerprint"; - exports.GEN_AI_USAGE_INPUT_TOKEN_DETAILS = "gen_ai.usage.input_token_details"; - exports.GEN_AI_USAGE_OUTPUT_TOKEN_DETAILS = "gen_ai.usage.output_token_details"; - exports.LANGSMITH_SESSION_ID = "langsmith.trace.session_id"; - exports.LANGSMITH_SESSION_NAME = "langsmith.trace.session_name"; - exports.LANGSMITH_RUN_TYPE = "langsmith.span.kind"; - exports.LANGSMITH_NAME = "langsmith.trace.name"; - exports.LANGSMITH_METADATA = "langsmith.metadata"; - exports.LANGSMITH_TAGS = "langsmith.span.tags"; - exports.LANGSMITH_RUNTIME = "langsmith.span.runtime"; - exports.LANGSMITH_REQUEST_STREAMING = "langsmith.request.streaming"; - exports.LANGSMITH_REQUEST_HEADERS = "langsmith.request.headers"; - exports.LANGSMITH_RUN_ID = "langsmith.span.id"; - exports.LANGSMITH_TRACE_ID = "langsmith.trace.id"; - exports.LANGSMITH_DOTTED_ORDER = "langsmith.span.dotted_order"; - exports.LANGSMITH_PARENT_RUN_ID = "langsmith.span.parent_id"; - exports.LANGSMITH_USAGE_METADATA = "langsmith.usage_metadata"; - exports.LANGSMITH_REFERENCE_EXAMPLE_ID = "langsmith.reference_example_id"; - exports.LANGSMITH_TRACEABLE = "langsmith.traceable"; - exports.LANGSMITH_IS_ROOT = "langsmith.is_root"; - exports.LANGSMITH_TRACEABLE_PARENT_OTEL_SPAN_ID = "langsmith.traceable_parent_otel_span_id"; - exports.GEN_AI_SYSTEM_MESSAGE = "gen_ai.system.message"; - exports.GEN_AI_USER_MESSAGE = "gen_ai.user.message"; - exports.GEN_AI_ASSISTANT_MESSAGE = "gen_ai.assistant.message"; - exports.GEN_AI_CHOICE = "gen_ai.choice"; - exports.AI_SDK_LLM_OPERATIONS = [ - "ai.generateText.doGenerate", - "ai.streamText.doStream", - "ai.generateObject.doGenerate", - "ai.streamObject.doStream" - ]; - exports.AI_SDK_TOOL_OPERATIONS = ["ai.toolCall"]; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/singletons/fetch.cjs -var require_fetch2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._getFetchImplementation = exports._globalFetchImplementationIsNodeFetch = exports.clearFetchImplementation = exports.overrideFetchImplementation = undefined; - var env_js_1 = require_env2(); - var DEFAULT_FETCH_IMPLEMENTATION = (...args) => fetch(...args); - var LANGSMITH_FETCH_IMPLEMENTATION_KEY = Symbol.for("ls:fetch_implementation"); - var overrideFetchImplementation = (fetch2) => { - globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY] = fetch2; - }; - exports.overrideFetchImplementation = overrideFetchImplementation; - var clearFetchImplementation = () => { - delete globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY]; - }; - exports.clearFetchImplementation = clearFetchImplementation; - var _globalFetchImplementationIsNodeFetch = () => { - const fetchImpl = globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY]; - if (!fetchImpl) - return false; - return typeof fetchImpl === "function" && "Headers" in fetchImpl && "Request" in fetchImpl && "Response" in fetchImpl; - }; - exports._globalFetchImplementationIsNodeFetch = _globalFetchImplementationIsNodeFetch; - var _getFetchImplementation = (debug) => { - return async (...args) => { - if (debug || (0, env_js_1.getLangSmithEnvironmentVariable)("DEBUG") === "true") { - const [url2, options] = args; - console.log(`\u2192 ${options?.method || "GET"} ${url2}`); - } - const res = await (globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY] ?? DEFAULT_FETCH_IMPLEMENTATION)(...args); - if (debug || (0, env_js_1.getLangSmithEnvironmentVariable)("DEBUG") === "true") { - console.log(`\u2190 ${res.status} ${res.statusText} ${res.url}`); - } - return res; - }; - }; - exports._getFetchImplementation = _getFetchImplementation; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/project.cjs -var require_project = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getDefaultProjectName = undefined; - var env_js_1 = require_env2(); - var getDefaultProjectName = () => { - return (0, env_js_1.getLangSmithEnvironmentVariable)("PROJECT") ?? (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_SESSION") ?? "default"; - }; - exports.getDefaultProjectName = getDefaultProjectName; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/warn.cjs -var require_warn = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.warnOnce = warnOnce; - var warnedMessages = {}; - function warnOnce(message) { - if (!warnedMessages[message]) { - console.warn(message); - warnedMessages[message] = true; - } - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/_uuid.cjs -var require__uuid = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.assertUuid = assertUuid; - exports.uuid7FromTime = uuid7FromTime; - exports.getUuidVersion = getUuidVersion; - exports.warnIfNotUuidV7 = warnIfNotUuidV7; - var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - var uuid_1 = require_dist4(); - var warn_js_1 = require_warn(); - var UUID7_WARNING_EMITTED = false; - function assertUuid(str, which) { - if (!UUID_REGEX.test(str)) { - const msg = which !== undefined ? `Invalid UUID for ${which}: ${str}` : `Invalid UUID: ${str}`; - throw new Error(msg); - } - return str; - } - function uuid7FromTime(timestamp) { - const msecs = typeof timestamp === "string" ? Date.parse(timestamp) : timestamp; - return (0, uuid_1.v7)({ msecs, seq: 0 }); - } - function getUuidVersion(uuidStr) { - if (!UUID_REGEX.test(uuidStr)) { - return null; - } - const versionChar = uuidStr[14]; - return parseInt(versionChar, 16); - } - function warnIfNotUuidV7(uuidStr, _idType) { - const version10 = getUuidVersion(uuidStr); - if (version10 !== null && version10 !== 7 && !UUID7_WARNING_EMITTED) { - UUID7_WARNING_EMITTED = true; - (0, warn_js_1.warnOnce)(`LangSmith now uses UUID v7 for run and trace identifiers. ` + `This warning appears when passing custom IDs. ` + `Please use: import { uuidv7 } from 'langsmith'; const id = uuidv7(); ` + `Future versions will require UUID v7.`); - } - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/uuid.cjs -var require_uuid = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.uuid7FromTime = undefined; - exports.uuid7 = uuid72; - var uuid_1 = require_dist4(); - var _uuid_js_1 = require__uuid(); - Object.defineProperty(exports, "uuid7FromTime", { enumerable: true, get: function() { - return _uuid_js_1.uuid7FromTime; - } }); - function uuid72() { - return (0, uuid_1.v7)(); - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/index.cjs -var require_dist5 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.__version__ = exports.uuid7FromTime = exports.uuid7 = exports.getDefaultProjectName = exports.overrideFetchImplementation = exports.RunTree = exports.Client = undefined; - var client_js_1 = require_client2(); - Object.defineProperty(exports, "Client", { enumerable: true, get: function() { - return client_js_1.Client; - } }); - var run_trees_js_1 = require_run_trees(); - Object.defineProperty(exports, "RunTree", { enumerable: true, get: function() { - return run_trees_js_1.RunTree; - } }); - var fetch_js_1 = require_fetch2(); - Object.defineProperty(exports, "overrideFetchImplementation", { enumerable: true, get: function() { - return fetch_js_1.overrideFetchImplementation; - } }); - var project_js_1 = require_project(); - Object.defineProperty(exports, "getDefaultProjectName", { enumerable: true, get: function() { - return project_js_1.getDefaultProjectName; - } }); - var uuid_js_1 = require_uuid(); - Object.defineProperty(exports, "uuid7", { enumerable: true, get: function() { - return uuid_js_1.uuid7; - } }); - Object.defineProperty(exports, "uuid7FromTime", { enumerable: true, get: function() { - return uuid_js_1.uuid7FromTime; - } }); - exports.__version__ = "0.3.87"; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/env.cjs -var require_env2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getEnv = exports.isNode = exports.isDeno = exports.isJsDom = exports.isWebWorker = exports.isBrowser = undefined; - exports.getRuntimeEnvironment = getRuntimeEnvironment; - exports.getLangSmithEnvVarsMetadata = getLangSmithEnvVarsMetadata; - exports.getLangSmithEnvironmentVariables = getLangSmithEnvironmentVariables; - exports.getEnvironmentVariable = getEnvironmentVariable2; - exports.getLangSmithEnvironmentVariable = getLangSmithEnvironmentVariable; - exports.setEnvironmentVariable = setEnvironmentVariable; - exports.getShas = getShas; - exports.getOtelEnabled = getOtelEnabled; - var index_js_1 = require_dist5(); - var globalEnv; - var isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined"; - exports.isBrowser = isBrowser; - var isWebWorker = () => typeof globalThis === "object" && globalThis.constructor && globalThis.constructor.name === "DedicatedWorkerGlobalScope"; - exports.isWebWorker = isWebWorker; - var isJsDom = () => typeof window !== "undefined" && window.name === "nodejs" || typeof navigator !== "undefined" && navigator.userAgent.includes("jsdom"); - exports.isJsDom = isJsDom; - var isDeno2 = () => typeof Deno !== "undefined"; - exports.isDeno = isDeno2; - var isNode2 = () => typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined" && !(0, exports.isDeno)(); - exports.isNode = isNode2; - var getEnv = () => { - if (globalEnv) { - return globalEnv; - } - if (typeof Bun !== "undefined") { - globalEnv = "bun"; - } else if ((0, exports.isBrowser)()) { - globalEnv = "browser"; - } else if ((0, exports.isNode)()) { - globalEnv = "node"; - } else if ((0, exports.isWebWorker)()) { - globalEnv = "webworker"; - } else if ((0, exports.isJsDom)()) { - globalEnv = "jsdom"; - } else if ((0, exports.isDeno)()) { - globalEnv = "deno"; - } else { - globalEnv = "other"; - } - return globalEnv; - }; - exports.getEnv = getEnv; - var runtimeEnvironment; - function getRuntimeEnvironment() { - if (runtimeEnvironment === undefined) { - const env = (0, exports.getEnv)(); - const releaseEnv = getShas(); - runtimeEnvironment = { - library: "langsmith", - runtime: env, - sdk: "langsmith-js", - sdk_version: index_js_1.__version__, - ...releaseEnv - }; - } - return runtimeEnvironment; - } - function getLangSmithEnvVarsMetadata() { - const allEnvVars = getLangSmithEnvironmentVariables(); - const envVars = {}; - const excluded = [ - "LANGCHAIN_API_KEY", - "LANGCHAIN_ENDPOINT", - "LANGCHAIN_TRACING_V2", - "LANGCHAIN_PROJECT", - "LANGCHAIN_SESSION", - "LANGSMITH_API_KEY", - "LANGSMITH_ENDPOINT", - "LANGSMITH_TRACING_V2", - "LANGSMITH_PROJECT", - "LANGSMITH_SESSION" - ]; - for (const [key, value] of Object.entries(allEnvVars)) { - if (typeof value === "string" && !excluded.includes(key) && !key.toLowerCase().includes("key") && !key.toLowerCase().includes("secret") && !key.toLowerCase().includes("token")) { - if (key === "LANGCHAIN_REVISION_ID") { - envVars["revision_id"] = value; - } else { - envVars[key] = value; - } - } - } - return envVars; - } - function getLangSmithEnvironmentVariables() { - const envVars = {}; - try { - if (typeof process !== "undefined" && process.env) { - for (const [key, value] of Object.entries(process.env)) { - if ((key.startsWith("LANGCHAIN_") || key.startsWith("LANGSMITH_")) && value != null) { - if ((key.toLowerCase().includes("key") || key.toLowerCase().includes("secret") || key.toLowerCase().includes("token")) && typeof value === "string") { - envVars[key] = value.slice(0, 2) + "*".repeat(value.length - 4) + value.slice(-2); - } else { - envVars[key] = value; - } - } - } - } - } catch (e) {} - return envVars; - } - function getEnvironmentVariable2(name) { - try { - return typeof process !== "undefined" ? process.env?.[name] : undefined; - } catch (e) { - return; - } - } - function getLangSmithEnvironmentVariable(name) { - return getEnvironmentVariable2(`LANGSMITH_${name}`) || getEnvironmentVariable2(`LANGCHAIN_${name}`); - } - function setEnvironmentVariable(name, value) { - if (typeof process !== "undefined") { - process.env[name] = value; - } - } - var cachedCommitSHAs; - function getShas() { - if (cachedCommitSHAs !== undefined) { - return cachedCommitSHAs; - } - const common_release_envs = [ - "VERCEL_GIT_COMMIT_SHA", - "NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA", - "COMMIT_REF", - "RENDER_GIT_COMMIT", - "CI_COMMIT_SHA", - "CIRCLE_SHA1", - "CF_PAGES_COMMIT_SHA", - "REACT_APP_GIT_SHA", - "SOURCE_VERSION", - "GITHUB_SHA", - "TRAVIS_COMMIT", - "GIT_COMMIT", - "BUILD_VCS_NUMBER", - "bamboo_planRepository_revision", - "Build.SourceVersion", - "BITBUCKET_COMMIT", - "DRONE_COMMIT_SHA", - "SEMAPHORE_GIT_SHA", - "BUILDKITE_COMMIT" - ]; - const shas = {}; - for (const env of common_release_envs) { - const envVar = getEnvironmentVariable2(env); - if (envVar !== undefined) { - shas[env] = envVar; - } - } - cachedCommitSHAs = shas; - return shas; - } - function getOtelEnabled() { - return getEnvironmentVariable2("OTEL_ENABLED") === "true" || getLangSmithEnvironmentVariable("OTEL_ENABLED") === "true"; - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/singletons/otel.cjs -var require_otel = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.OTELProviderSingleton = undefined; - exports.getOTELTrace = getOTELTrace; - exports.getOTELContext = getOTELContext; - exports.setOTELInstances = setOTELInstances; - exports.setDefaultOTLPTracerComponents = setDefaultOTLPTracerComponents; - exports.getDefaultOTLPTracerComponents = getDefaultOTLPTracerComponents; - var env_js_1 = require_env2(); - - class MockTracer { - constructor() { - Object.defineProperty(this, "hasWarned", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - } - startActiveSpan(_name, ...args) { - if (!this.hasWarned && (0, env_js_1.getOtelEnabled)()) { - console.warn("You have enabled OTEL export via the `OTEL_ENABLED` or `LANGSMITH_OTEL_ENABLED` environment variable, but have not initialized the required OTEL instances. " + 'Please add:\n```\nimport { initializeOTEL } from "langsmith/experimental/otel/setup";\ninitializeOTEL();\n```\nat the beginning of your code.'); - this.hasWarned = true; - } - let fn; - if (args.length === 1 && typeof args[0] === "function") { - fn = args[0]; - } else if (args.length === 2 && typeof args[1] === "function") { - fn = args[1]; - } else if (args.length === 3 && typeof args[2] === "function") { - fn = args[2]; - } - if (typeof fn === "function") { - return fn(); - } - return; - } - } - - class MockOTELTrace { - constructor() { - Object.defineProperty(this, "mockTracer", { - enumerable: true, - configurable: true, - writable: true, - value: new MockTracer - }); - } - getTracer(_name, _version) { - return this.mockTracer; - } - getActiveSpan() { - return; - } - setSpan(context15, _span) { - return context15; - } - getSpan(_context) { - return; - } - setSpanContext(context15, _spanContext) { - return context15; - } - getTracerProvider() { - return; - } - setGlobalTracerProvider(_tracerProvider) { - return false; - } - } - - class MockOTELContext { - active() { - return {}; - } - with(_context, fn) { - return fn(); - } - } - var OTEL_TRACE_KEY = Symbol.for("ls:otel_trace"); - var OTEL_CONTEXT_KEY = Symbol.for("ls:otel_context"); - var OTEL_GET_DEFAULT_OTLP_TRACER_PROVIDER_KEY = Symbol.for("ls:otel_get_default_otlp_tracer_provider"); - var mockOTELTrace = new MockOTELTrace; - var mockOTELContext = new MockOTELContext; - - class OTELProvider { - getTraceInstance() { - return globalThis[OTEL_TRACE_KEY] ?? mockOTELTrace; - } - getContextInstance() { - return globalThis[OTEL_CONTEXT_KEY] ?? mockOTELContext; - } - initializeGlobalInstances(otel) { - if (globalThis[OTEL_TRACE_KEY] === undefined) { - globalThis[OTEL_TRACE_KEY] = otel.trace; - } - if (globalThis[OTEL_CONTEXT_KEY] === undefined) { - globalThis[OTEL_CONTEXT_KEY] = otel.context; - } - } - setDefaultOTLPTracerComponents(components) { - globalThis[OTEL_GET_DEFAULT_OTLP_TRACER_PROVIDER_KEY] = components; - } - getDefaultOTLPTracerComponents() { - return globalThis[OTEL_GET_DEFAULT_OTLP_TRACER_PROVIDER_KEY] ?? undefined; - } - } - exports.OTELProviderSingleton = new OTELProvider; - function getOTELTrace() { - return exports.OTELProviderSingleton.getTraceInstance(); - } - function getOTELContext() { - return exports.OTELProviderSingleton.getContextInstance(); - } - function setOTELInstances(otel) { - exports.OTELProviderSingleton.initializeGlobalInstances(otel); - } - function setDefaultOTLPTracerComponents(components) { - exports.OTELProviderSingleton.setDefaultOTLPTracerComponents(components); - } - function getDefaultOTLPTracerComponents() { - return exports.OTELProviderSingleton.getDefaultOTLPTracerComponents(); - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/experimental/otel/translator.cjs -var require_translator = __commonJS((exports) => { - var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar2 = exports && exports.__importStar || function() { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function(o2) { - var ar = []; - for (var k in o2) - if (Object.prototype.hasOwnProperty.call(o2, k)) - ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k = ownKeys(mod2), i = 0;i < k.length; i++) - if (k[i] !== "default") - __createBinding2(result, mod2, k[i]); - } - __setModuleDefault(result, mod2); - return result; - }; - }(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LangSmithToOTELTranslator = undefined; - var constants = __importStar2(require_constants13()); - var otel_js_1 = require_otel(); - var WELL_KNOWN_OPERATION_NAMES = { - llm: "chat", - tool: "execute_tool", - retriever: "embeddings", - embedding: "embeddings", - prompt: "chat" - }; - function getOperationName(runType) { - return WELL_KNOWN_OPERATION_NAMES[runType] || runType; - } - - class LangSmithToOTELTranslator { - constructor() { - Object.defineProperty(this, "spans", { - enumerable: true, - configurable: true, - writable: true, - value: new Map - }); - } - exportBatch(operations, otelContextMap) { - for (const op of operations) { - try { - if (!op.run) { - continue; - } - if (op.operation === "post") { - const span = this.createSpanForRun(op, op.run, otelContextMap.get(op.id)); - if (span && !op.run.end_time) { - this.spans.set(op.id, span); - } - } else { - this.updateSpanForRun(op, op.run); - } - } catch (e) { - console.error(`Error processing operation ${op.id}:`, e); - } - } - } - createSpanForRun(op, runInfo, otelContext) { - const activeSpan = otelContext && (0, otel_js_1.getOTELTrace)().getSpan(otelContext); - if (!activeSpan) { - return; - } - try { - return this.finishSpanSetup(activeSpan, runInfo, op); - } catch (e) { - console.error(`Failed to create span for run ${op.id}:`, e); - return; - } - } - finishSpanSetup(span, runInfo, op) { - this.setSpanAttributes(span, runInfo, op); - if (runInfo.error) { - span.setStatus({ code: 2 }); - span.recordException(new Error(runInfo.error)); - } else { - span.setStatus({ code: 1 }); - } - if (runInfo.end_time) { - span.end(new Date(runInfo.end_time)); - } - return span; - } - updateSpanForRun(op, runInfo) { - try { - const span = this.spans.get(op.id); - if (!span) { - console.debug(`No span found for run ${op.id} during update`); - return; - } - this.setSpanAttributes(span, runInfo, op); - if (runInfo.error) { - span.setStatus({ code: 2 }); - span.recordException(new Error(runInfo.error)); - } else { - span.setStatus({ code: 1 }); - } - const endTime = runInfo.end_time; - if (endTime) { - span.end(new Date(endTime)); - this.spans.delete(op.id); - } - } catch (e) { - console.error(`Failed to update span for run ${op.id}:`, e); - } - } - extractModelName(runInfo) { - if (runInfo.extra?.metadata) { - const metadata = runInfo.extra.metadata; - if (metadata.ls_model_name) { - return metadata.ls_model_name; - } - if (metadata.invocation_params) { - const invocationParams = metadata.invocation_params; - if (invocationParams.model) { - return invocationParams.model; - } else if (invocationParams.model_name) { - return invocationParams.model_name; - } - } - } - return; - } - setSpanAttributes(span, runInfo, op) { - if ("run_type" in runInfo && runInfo.run_type) { - span.setAttribute(constants.LANGSMITH_RUN_TYPE, runInfo.run_type); - const operationName = getOperationName(runInfo.run_type || "chain"); - span.setAttribute(constants.GEN_AI_OPERATION_NAME, operationName); - } - if ("name" in runInfo && runInfo.name) { - span.setAttribute(constants.LANGSMITH_NAME, runInfo.name); - } - if ("session_id" in runInfo && runInfo.session_id) { - span.setAttribute(constants.LANGSMITH_SESSION_ID, runInfo.session_id); - } - if ("session_name" in runInfo && runInfo.session_name) { - span.setAttribute(constants.LANGSMITH_SESSION_NAME, runInfo.session_name); - } - this.setGenAiSystem(span, runInfo); - const modelName = this.extractModelName(runInfo); - if (modelName) { - span.setAttribute(constants.GEN_AI_REQUEST_MODEL, modelName); - } - if ("prompt_tokens" in runInfo && typeof runInfo.prompt_tokens === "number") { - span.setAttribute(constants.GEN_AI_USAGE_INPUT_TOKENS, runInfo.prompt_tokens); - } - if ("completion_tokens" in runInfo && typeof runInfo.completion_tokens === "number") { - span.setAttribute(constants.GEN_AI_USAGE_OUTPUT_TOKENS, runInfo.completion_tokens); - } - if ("total_tokens" in runInfo && typeof runInfo.total_tokens === "number") { - span.setAttribute(constants.GEN_AI_USAGE_TOTAL_TOKENS, runInfo.total_tokens); - } - this.setInvocationParameters(span, runInfo); - const metadata = runInfo.extra?.metadata || {}; - for (const [key, value] of Object.entries(metadata)) { - if (value !== null && value !== undefined) { - span.setAttribute(`${constants.LANGSMITH_METADATA}.${key}`, String(value)); - } - } - const tags = runInfo.tags; - if (tags && Array.isArray(tags)) { - span.setAttribute(constants.LANGSMITH_TAGS, tags.join(", ")); - } else if (tags) { - span.setAttribute(constants.LANGSMITH_TAGS, String(tags)); - } - if ("serialized" in runInfo && typeof runInfo.serialized === "object") { - const serialized = runInfo.serialized; - if (serialized.name) { - span.setAttribute(constants.GEN_AI_SERIALIZED_NAME, String(serialized.name)); - } - if (serialized.signature) { - span.setAttribute(constants.GEN_AI_SERIALIZED_SIGNATURE, String(serialized.signature)); - } - if (serialized.doc) { - span.setAttribute(constants.GEN_AI_SERIALIZED_DOC, String(serialized.doc)); - } - } - this.setIOAttributes(span, op); - } - setGenAiSystem(span, runInfo) { - let system = "langchain"; - const modelName = this.extractModelName(runInfo); - if (modelName) { - const modelLower = modelName.toLowerCase(); - if (modelLower.includes("anthropic") || modelLower.startsWith("claude")) { - system = "anthropic"; - } else if (modelLower.includes("bedrock")) { - system = "aws.bedrock"; - } else if (modelLower.includes("azure") && modelLower.includes("openai")) { - system = "az.ai.openai"; - } else if (modelLower.includes("azure") && modelLower.includes("inference")) { - system = "az.ai.inference"; - } else if (modelLower.includes("cohere")) { - system = "cohere"; - } else if (modelLower.includes("deepseek")) { - system = "deepseek"; - } else if (modelLower.includes("gemini")) { - system = "gemini"; - } else if (modelLower.includes("groq")) { - system = "groq"; - } else if (modelLower.includes("watson") || modelLower.includes("ibm")) { - system = "ibm.watsonx.ai"; - } else if (modelLower.includes("mistral")) { - system = "mistral_ai"; - } else if (modelLower.includes("gpt") || modelLower.includes("openai")) { - system = "openai"; - } else if (modelLower.includes("perplexity") || modelLower.includes("sonar")) { - system = "perplexity"; - } else if (modelLower.includes("vertex")) { - system = "vertex_ai"; - } else if (modelLower.includes("xai") || modelLower.includes("grok")) { - system = "xai"; - } - } - span.setAttribute(constants.GEN_AI_SYSTEM, system); - } - setInvocationParameters(span, runInfo) { - if (!runInfo.extra?.metadata?.invocation_params) { - return; - } - const invocationParams = runInfo.extra.metadata.invocation_params; - if (invocationParams.max_tokens !== undefined) { - span.setAttribute(constants.GEN_AI_REQUEST_MAX_TOKENS, invocationParams.max_tokens); - } - if (invocationParams.temperature !== undefined) { - span.setAttribute(constants.GEN_AI_REQUEST_TEMPERATURE, invocationParams.temperature); - } - if (invocationParams.top_p !== undefined) { - span.setAttribute(constants.GEN_AI_REQUEST_TOP_P, invocationParams.top_p); - } - if (invocationParams.frequency_penalty !== undefined) { - span.setAttribute(constants.GEN_AI_REQUEST_FREQUENCY_PENALTY, invocationParams.frequency_penalty); - } - if (invocationParams.presence_penalty !== undefined) { - span.setAttribute(constants.GEN_AI_REQUEST_PRESENCE_PENALTY, invocationParams.presence_penalty); - } - } - setIOAttributes(span, op) { - if (op.run.inputs) { - try { - const inputs = op.run.inputs; - if (typeof inputs === "object" && inputs !== null) { - if (inputs.model && Array.isArray(inputs.messages)) { - span.setAttribute(constants.GEN_AI_REQUEST_MODEL, inputs.model); - } - if (inputs.stream !== undefined) { - span.setAttribute(constants.LANGSMITH_REQUEST_STREAMING, inputs.stream); - } - if (inputs.extra_headers) { - span.setAttribute(constants.LANGSMITH_REQUEST_HEADERS, JSON.stringify(inputs.extra_headers)); - } - if (inputs.extra_query) { - span.setAttribute(constants.GEN_AI_REQUEST_EXTRA_QUERY, JSON.stringify(inputs.extra_query)); - } - if (inputs.extra_body) { - span.setAttribute(constants.GEN_AI_REQUEST_EXTRA_BODY, JSON.stringify(inputs.extra_body)); - } - } - span.setAttribute(constants.GENAI_PROMPT, JSON.stringify(inputs)); - } catch (e) { - console.debug(`Failed to process inputs for run ${op.id}`, e); - } - } - if (op.run.outputs) { - try { - const outputs = op.run.outputs; - const tokenUsage = this.getUnifiedRunTokens(outputs); - if (tokenUsage) { - span.setAttribute(constants.GEN_AI_USAGE_INPUT_TOKENS, tokenUsage[0]); - span.setAttribute(constants.GEN_AI_USAGE_OUTPUT_TOKENS, tokenUsage[1]); - span.setAttribute(constants.GEN_AI_USAGE_TOTAL_TOKENS, tokenUsage[0] + tokenUsage[1]); - } - if (outputs && typeof outputs === "object") { - if (outputs.model) { - span.setAttribute(constants.GEN_AI_RESPONSE_MODEL, String(outputs.model)); - } - if (outputs.id) { - span.setAttribute(constants.GEN_AI_RESPONSE_ID, outputs.id); - } - if (outputs.choices && Array.isArray(outputs.choices)) { - const finishReasons = outputs.choices.map((choice) => choice.finish_reason).filter((reason) => reason).map(String); - if (finishReasons.length > 0) { - span.setAttribute(constants.GEN_AI_RESPONSE_FINISH_REASONS, finishReasons.join(", ")); - } - } - if (outputs.service_tier) { - span.setAttribute(constants.GEN_AI_RESPONSE_SERVICE_TIER, outputs.service_tier); - } - if (outputs.system_fingerprint) { - span.setAttribute(constants.GEN_AI_RESPONSE_SYSTEM_FINGERPRINT, outputs.system_fingerprint); - } - if (outputs.usage_metadata && typeof outputs.usage_metadata === "object") { - const usageMetadata = outputs.usage_metadata; - if (usageMetadata.input_token_details) { - span.setAttribute(constants.GEN_AI_USAGE_INPUT_TOKEN_DETAILS, JSON.stringify(usageMetadata.input_token_details)); - } - if (usageMetadata.output_token_details) { - span.setAttribute(constants.GEN_AI_USAGE_OUTPUT_TOKEN_DETAILS, JSON.stringify(usageMetadata.output_token_details)); - } - } - } - span.setAttribute(constants.GENAI_COMPLETION, JSON.stringify(outputs)); - } catch (e) { - console.debug(`Failed to process outputs for run ${op.id}`, e); - } - } - } - getUnifiedRunTokens(outputs) { - if (!outputs) { - return null; - } - let tokenUsage = this.extractUnifiedRunTokens(outputs.usage_metadata); - if (tokenUsage) { - return tokenUsage; - } - const keys = Object.keys(outputs); - for (const key of keys) { - const haystack = outputs[key]; - if (!haystack || typeof haystack !== "object") { - continue; - } - tokenUsage = this.extractUnifiedRunTokens(haystack.usage_metadata); - if (tokenUsage) { - return tokenUsage; - } - if (haystack.lc === 1 && haystack.kwargs && typeof haystack.kwargs === "object") { - tokenUsage = this.extractUnifiedRunTokens(haystack.kwargs.usage_metadata); - if (tokenUsage) { - return tokenUsage; - } - } - } - const generations = outputs.generations || []; - if (!Array.isArray(generations)) { - return null; - } - const flatGenerations = Array.isArray(generations[0]) ? generations.flat() : generations; - for (const generation of flatGenerations) { - if (typeof generation === "object" && generation.message && typeof generation.message === "object" && generation.message.kwargs && typeof generation.message.kwargs === "object") { - tokenUsage = this.extractUnifiedRunTokens(generation.message.kwargs.usage_metadata); - if (tokenUsage) { - return tokenUsage; - } - } - } - return null; - } - extractUnifiedRunTokens(outputs) { - if (!outputs || typeof outputs !== "object") { - return null; - } - if (typeof outputs.input_tokens !== "number" || typeof outputs.output_tokens !== "number") { - return null; - } - return [outputs.input_tokens, outputs.output_tokens]; - } - } - exports.LangSmithToOTELTranslator = LangSmithToOTELTranslator; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/is-network-error/index.cjs -var require_is_network_error = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = isNetworkError; - var objectToString = Object.prototype.toString; - var isError = (value) => objectToString.call(value) === "[object Error]"; - var errorMessages = new Set([ - "network error", - "Failed to fetch", - "NetworkError when attempting to fetch resource.", - "The Internet connection appears to be offline.", - "Network request failed", - "fetch failed", - "terminated", - " A network error occurred.", - "Network connection lost" - ]); - function isNetworkError(error48) { - const isValid = error48 && isError(error48) && error48.name === "TypeError" && typeof error48.message === "string"; - if (!isValid) { - return false; - } - const { message, stack } = error48; - if (message === "Load failed") { - return stack === undefined || "__sentry_captured__" in error48; - } - if (message.startsWith("error sending request for url")) { - return true; - } - return errorMessages.has(message); - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/p-retry/index.cjs -var require_p_retry = __commonJS((exports) => { - var __importDefault2 = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AbortError = undefined; - exports.default = pRetry; - exports.makeRetriable = makeRetriable; - var index_js_1 = __importDefault2(require_is_network_error()); - function validateRetries(retries) { - if (typeof retries === "number") { - if (retries < 0) { - throw new TypeError("Expected `retries` to be a non-negative number."); - } - if (Number.isNaN(retries)) { - throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN."); - } - } else if (retries !== undefined) { - throw new TypeError("Expected `retries` to be a number or Infinity."); - } - } - function validateNumberOption(name, value, { min = 0, allowInfinity = false } = {}) { - if (value === undefined) { - return; - } - if (typeof value !== "number" || Number.isNaN(value)) { - throw new TypeError(`Expected \`${name}\` to be a number${allowInfinity ? " or Infinity" : ""}.`); - } - if (!allowInfinity && !Number.isFinite(value)) { - throw new TypeError(`Expected \`${name}\` to be a finite number.`); - } - if (value < min) { - throw new TypeError(`Expected \`${name}\` to be \u2265 ${min}.`); - } - } - - class AbortError extends Error { - constructor(message) { - super(); - if (message instanceof Error) { - this.originalError = message; - ({ message } = message); - } else { - this.originalError = new Error(message); - this.originalError.stack = this.stack; - } - this.name = "AbortError"; - this.message = message; - } - } - exports.AbortError = AbortError; - function calculateDelay(retriesConsumed, options) { - const attempt = Math.max(1, retriesConsumed + 1); - const random = options.randomize ? Math.random() + 1 : 1; - let timeout = Math.round(random * options.minTimeout * options.factor ** (attempt - 1)); - timeout = Math.min(timeout, options.maxTimeout); - return timeout; - } - function calculateRemainingTime(start, max) { - if (!Number.isFinite(max)) { - return max; - } - return max - (performance.now() - start); - } - async function onAttemptFailure({ error: error48, attemptNumber, retriesConsumed, startTime, options }) { - const normalizedError = error48 instanceof Error ? error48 : new TypeError(`Non-error was thrown: "${error48}". You should only throw errors.`); - if (normalizedError instanceof AbortError) { - throw normalizedError.originalError; - } - const retriesLeft = Number.isFinite(options.retries) ? Math.max(0, options.retries - retriesConsumed) : options.retries; - const maxRetryTime = options.maxRetryTime ?? Number.POSITIVE_INFINITY; - const context15 = Object.freeze({ - error: normalizedError, - attemptNumber, - retriesLeft, - retriesConsumed - }); - await options.onFailedAttempt(context15); - if (calculateRemainingTime(startTime, maxRetryTime) <= 0) { - throw normalizedError; - } - const consumeRetry = await options.shouldConsumeRetry(context15); - const remainingTime = calculateRemainingTime(startTime, maxRetryTime); - if (remainingTime <= 0 || retriesLeft <= 0) { - throw normalizedError; - } - if (normalizedError instanceof TypeError && !(0, index_js_1.default)(normalizedError)) { - if (consumeRetry) { - throw normalizedError; - } - options.signal?.throwIfAborted(); - return false; - } - if (!await options.shouldRetry(context15)) { - throw normalizedError; - } - if (!consumeRetry) { - options.signal?.throwIfAborted(); - return false; - } - const delayTime = calculateDelay(retriesConsumed, options); - const finalDelay = Math.min(delayTime, remainingTime); - if (finalDelay > 0) { - await new Promise((resolve2, reject) => { - const onAbort = () => { - clearTimeout(timeoutToken); - options.signal?.removeEventListener("abort", onAbort); - reject(options.signal.reason); - }; - const timeoutToken = setTimeout(() => { - options.signal?.removeEventListener("abort", onAbort); - resolve2(); - }, finalDelay); - if (options.unref) { - timeoutToken.unref?.(); - } - options.signal?.addEventListener("abort", onAbort, { once: true }); - }); - } - options.signal?.throwIfAborted(); - return true; - } - async function pRetry(input, options = {}) { - options = { ...options }; - validateRetries(options.retries); - if (Object.hasOwn(options, "forever")) { - throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead."); - } - options.retries ??= 10; - options.factor ??= 2; - options.minTimeout ??= 1000; - options.maxTimeout ??= Number.POSITIVE_INFINITY; - options.maxRetryTime ??= Number.POSITIVE_INFINITY; - options.randomize ??= false; - options.onFailedAttempt ??= () => {}; - options.shouldRetry ??= () => true; - options.shouldConsumeRetry ??= () => true; - validateNumberOption("factor", options.factor, { - min: 0, - allowInfinity: false - }); - validateNumberOption("minTimeout", options.minTimeout, { - min: 0, - allowInfinity: false - }); - validateNumberOption("maxTimeout", options.maxTimeout, { - min: 0, - allowInfinity: true - }); - validateNumberOption("maxRetryTime", options.maxRetryTime, { - min: 0, - allowInfinity: true - }); - if (!(options.factor > 0)) { - options.factor = 1; - } - options.signal?.throwIfAborted(); - let attemptNumber = 0; - let retriesConsumed = 0; - const startTime = performance.now(); - while (Number.isFinite(options.retries) ? retriesConsumed <= options.retries : true) { - attemptNumber++; - try { - options.signal?.throwIfAborted(); - const result = await input(attemptNumber); - options.signal?.throwIfAborted(); - return result; - } catch (error48) { - if (await onAttemptFailure({ - error: error48, - attemptNumber, - retriesConsumed, - startTime, - options - })) { - retriesConsumed++; - } - } - } - throw new Error("Retry attempts exhausted without throwing an error."); - } - function makeRetriable(function_, options) { - return function(...arguments_) { - return pRetry(() => function_.apply(this, arguments_), options); - }; - } -}); - -// ../../../../node_modules/.bun/eventemitter3@4.0.7/node_modules/eventemitter3/index.js -var require_eventemitter3 = __commonJS((exports, module) => { - var has = Object.prototype.hasOwnProperty; - var prefix = "~"; - function Events() {} - if (Object.create) { - Events.prototype = Object.create(null); - if (!new Events().__proto__) - prefix = false; - } - function EE(fn, context15, once) { - this.fn = fn; - this.context = context15; - this.once = once || false; - } - function addListener(emitter, event, fn, context15, once) { - if (typeof fn !== "function") { - throw new TypeError("The listener must be a function"); - } - var listener = new EE(fn, context15 || emitter, once), evt = prefix ? prefix + event : event; - if (!emitter._events[evt]) - emitter._events[evt] = listener, emitter._eventsCount++; - else if (!emitter._events[evt].fn) - emitter._events[evt].push(listener); - else - emitter._events[evt] = [emitter._events[evt], listener]; - return emitter; - } - function clearEvent(emitter, evt) { - if (--emitter._eventsCount === 0) - emitter._events = new Events; - else - delete emitter._events[evt]; - } - function EventEmitter() { - this._events = new Events; - this._eventsCount = 0; - } - EventEmitter.prototype.eventNames = function eventNames() { - var names = [], events, name; - if (this._eventsCount === 0) - return names; - for (name in events = this._events) { - if (has.call(events, name)) - names.push(prefix ? name.slice(1) : name); - } - if (Object.getOwnPropertySymbols) { - return names.concat(Object.getOwnPropertySymbols(events)); - } - return names; - }; - EventEmitter.prototype.listeners = function listeners(event) { - var evt = prefix ? prefix + event : event, handlers = this._events[evt]; - if (!handlers) - return []; - if (handlers.fn) - return [handlers.fn]; - for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) { - ee[i] = handlers[i].fn; - } - return ee; - }; - EventEmitter.prototype.listenerCount = function listenerCount(event) { - var evt = prefix ? prefix + event : event, listeners = this._events[evt]; - if (!listeners) - return 0; - if (listeners.fn) - return 1; - return listeners.length; - }; - EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { - var evt = prefix ? prefix + event : event; - if (!this._events[evt]) - return false; - var listeners = this._events[evt], len = arguments.length, args, i; - if (listeners.fn) { - if (listeners.once) - this.removeListener(event, listeners.fn, undefined, true); - switch (len) { - case 1: - return listeners.fn.call(listeners.context), true; - case 2: - return listeners.fn.call(listeners.context, a1), true; - case 3: - return listeners.fn.call(listeners.context, a1, a2), true; - case 4: - return listeners.fn.call(listeners.context, a1, a2, a3), true; - case 5: - return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; - case 6: - return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; - } - for (i = 1, args = new Array(len - 1);i < len; i++) { - args[i - 1] = arguments[i]; - } - listeners.fn.apply(listeners.context, args); - } else { - var length = listeners.length, j; - for (i = 0;i < length; i++) { - if (listeners[i].once) - this.removeListener(event, listeners[i].fn, undefined, true); - switch (len) { - case 1: - listeners[i].fn.call(listeners[i].context); - break; - case 2: - listeners[i].fn.call(listeners[i].context, a1); - break; - case 3: - listeners[i].fn.call(listeners[i].context, a1, a2); - break; - case 4: - listeners[i].fn.call(listeners[i].context, a1, a2, a3); - break; - default: - if (!args) - for (j = 1, args = new Array(len - 1);j < len; j++) { - args[j - 1] = arguments[j]; - } - listeners[i].fn.apply(listeners[i].context, args); - } - } - } - return true; - }; - EventEmitter.prototype.on = function on(event, fn, context15) { - return addListener(this, event, fn, context15, false); - }; - EventEmitter.prototype.once = function once(event, fn, context15) { - return addListener(this, event, fn, context15, true); - }; - EventEmitter.prototype.removeListener = function removeListener(event, fn, context15, once) { - var evt = prefix ? prefix + event : event; - if (!this._events[evt]) - return this; - if (!fn) { - clearEvent(this, evt); - return this; - } - var listeners = this._events[evt]; - if (listeners.fn) { - if (listeners.fn === fn && (!once || listeners.once) && (!context15 || listeners.context === context15)) { - clearEvent(this, evt); - } - } else { - for (var i = 0, events = [], length = listeners.length;i < length; i++) { - if (listeners[i].fn !== fn || once && !listeners[i].once || context15 && listeners[i].context !== context15) { - events.push(listeners[i]); - } - } - if (events.length) - this._events[evt] = events.length === 1 ? events[0] : events; - else - clearEvent(this, evt); - } - return this; - }; - EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { - var evt; - if (event) { - evt = prefix ? prefix + event : event; - if (this._events[evt]) - clearEvent(this, evt); - } else { - this._events = new Events; - this._eventsCount = 0; - } - return this; - }; - EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - EventEmitter.prototype.addListener = EventEmitter.prototype.on; - EventEmitter.prefixed = prefix; - EventEmitter.EventEmitter = EventEmitter; - if (typeof module !== "undefined") { - module.exports = EventEmitter; - } -}); - -// ../../../../node_modules/.bun/p-finally@1.0.0/node_modules/p-finally/index.js -var require_p_finally = __commonJS((exports, module) => { - module.exports = (promise2, onFinally) => { - onFinally = onFinally || (() => {}); - return promise2.then((val) => new Promise((resolve2) => { - resolve2(onFinally()); - }).then(() => val), (err) => new Promise((resolve2) => { - resolve2(onFinally()); - }).then(() => { - throw err; - })); - }; -}); - -// ../../../../node_modules/.bun/p-timeout@3.2.0/node_modules/p-timeout/index.js -var require_p_timeout = __commonJS((exports, module) => { - var pFinally = require_p_finally(); - - class TimeoutError2 extends Error { - constructor(message) { - super(message); - this.name = "TimeoutError"; - } - } - var pTimeout = (promise2, milliseconds, fallback) => new Promise((resolve2, reject) => { - if (typeof milliseconds !== "number" || milliseconds < 0) { - throw new TypeError("Expected `milliseconds` to be a positive number"); - } - if (milliseconds === Infinity) { - resolve2(promise2); - return; - } - const timer = setTimeout(() => { - if (typeof fallback === "function") { - try { - resolve2(fallback()); - } catch (error48) { - reject(error48); - } - return; - } - const message = typeof fallback === "string" ? fallback : `Promise timed out after ${milliseconds} milliseconds`; - const timeoutError = fallback instanceof Error ? fallback : new TimeoutError2(message); - if (typeof promise2.cancel === "function") { - promise2.cancel(); - } - reject(timeoutError); - }, milliseconds); - pFinally(promise2.then(resolve2, reject), () => { - clearTimeout(timer); - }); - }); - module.exports = pTimeout; - module.exports.default = pTimeout; - module.exports.TimeoutError = TimeoutError2; -}); - -// ../../../../node_modules/.bun/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.js -var require_lower_bound = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - function lowerBound(array3, value, comparator) { - let first = 0; - let count = array3.length; - while (count > 0) { - const step = count / 2 | 0; - let it = first + step; - if (comparator(array3[it], value) <= 0) { - first = ++it; - count -= step + 1; - } else { - count = step; - } - } - return first; - } - exports.default = lowerBound; -}); - -// ../../../../node_modules/.bun/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.js -var require_priority_queue2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - var lower_bound_1 = require_lower_bound(); - - class PriorityQueue { - constructor() { - this._queue = []; - } - enqueue(run, options) { - options = Object.assign({ priority: 0 }, options); - const element = { - priority: options.priority, - run - }; - if (this.size && this._queue[this.size - 1].priority >= options.priority) { - this._queue.push(element); - return; - } - const index = lower_bound_1.default(this._queue, element, (a, b) => b.priority - a.priority); - this._queue.splice(index, 0, element); - } - dequeue() { - const item = this._queue.shift(); - return item === null || item === undefined ? undefined : item.run; - } - filter(options) { - return this._queue.filter((element) => element.priority === options.priority).map((element) => element.run); - } - get size() { - return this._queue.length; - } - } - exports.default = PriorityQueue; -}); - -// ../../../../node_modules/.bun/p-queue@6.6.2/node_modules/p-queue/dist/index.js -var require_dist6 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - var EventEmitter = require_eventemitter3(); - var p_timeout_1 = require_p_timeout(); - var priority_queue_1 = require_priority_queue2(); - var empty = () => {}; - var timeoutError = new p_timeout_1.TimeoutError; - - class PQueue extends EventEmitter { - constructor(options) { - var _a2, _b, _c, _d; - super(); - this._intervalCount = 0; - this._intervalEnd = 0; - this._pendingCount = 0; - this._resolveEmpty = empty; - this._resolveIdle = empty; - options = Object.assign({ carryoverConcurrencyCount: false, intervalCap: Infinity, interval: 0, concurrency: Infinity, autoStart: true, queueClass: priority_queue_1.default }, options); - if (!(typeof options.intervalCap === "number" && options.intervalCap >= 1)) { - throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(_b = (_a2 = options.intervalCap) === null || _a2 === undefined ? undefined : _a2.toString()) !== null && _b !== undefined ? _b : ""}\` (${typeof options.intervalCap})`); - } - if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) { - throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(_d = (_c = options.interval) === null || _c === undefined ? undefined : _c.toString()) !== null && _d !== undefined ? _d : ""}\` (${typeof options.interval})`); - } - this._carryoverConcurrencyCount = options.carryoverConcurrencyCount; - this._isIntervalIgnored = options.intervalCap === Infinity || options.interval === 0; - this._intervalCap = options.intervalCap; - this._interval = options.interval; - this._queue = new options.queueClass; - this._queueClass = options.queueClass; - this.concurrency = options.concurrency; - this._timeout = options.timeout; - this._throwOnTimeout = options.throwOnTimeout === true; - this._isPaused = options.autoStart === false; - } - get _doesIntervalAllowAnother() { - return this._isIntervalIgnored || this._intervalCount < this._intervalCap; - } - get _doesConcurrentAllowAnother() { - return this._pendingCount < this._concurrency; - } - _next() { - this._pendingCount--; - this._tryToStartAnother(); - this.emit("next"); - } - _resolvePromises() { - this._resolveEmpty(); - this._resolveEmpty = empty; - if (this._pendingCount === 0) { - this._resolveIdle(); - this._resolveIdle = empty; - this.emit("idle"); - } - } - _onResumeInterval() { - this._onInterval(); - this._initializeIntervalIfNeeded(); - this._timeoutId = undefined; - } - _isIntervalPaused() { - const now2 = Date.now(); - if (this._intervalId === undefined) { - const delay = this._intervalEnd - now2; - if (delay < 0) { - this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0; - } else { - if (this._timeoutId === undefined) { - this._timeoutId = setTimeout(() => { - this._onResumeInterval(); - }, delay); - } - return true; - } - } - return false; - } - _tryToStartAnother() { - if (this._queue.size === 0) { - if (this._intervalId) { - clearInterval(this._intervalId); - } - this._intervalId = undefined; - this._resolvePromises(); - return false; - } - if (!this._isPaused) { - const canInitializeInterval = !this._isIntervalPaused(); - if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) { - const job = this._queue.dequeue(); - if (!job) { - return false; - } - this.emit("active"); - job(); - if (canInitializeInterval) { - this._initializeIntervalIfNeeded(); - } - return true; - } - } - return false; - } - _initializeIntervalIfNeeded() { - if (this._isIntervalIgnored || this._intervalId !== undefined) { - return; - } - this._intervalId = setInterval(() => { - this._onInterval(); - }, this._interval); - this._intervalEnd = Date.now() + this._interval; - } - _onInterval() { - if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) { - clearInterval(this._intervalId); - this._intervalId = undefined; - } - this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0; - this._processQueue(); - } - _processQueue() { - while (this._tryToStartAnother()) {} - } - get concurrency() { - return this._concurrency; - } - set concurrency(newConcurrency) { - if (!(typeof newConcurrency === "number" && newConcurrency >= 1)) { - throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${newConcurrency}\` (${typeof newConcurrency})`); - } - this._concurrency = newConcurrency; - this._processQueue(); - } - async add(fn, options = {}) { - return new Promise((resolve2, reject) => { - const run = async () => { - this._pendingCount++; - this._intervalCount++; - try { - const operation = this._timeout === undefined && options.timeout === undefined ? fn() : p_timeout_1.default(Promise.resolve(fn()), options.timeout === undefined ? this._timeout : options.timeout, () => { - if (options.throwOnTimeout === undefined ? this._throwOnTimeout : options.throwOnTimeout) { - reject(timeoutError); - } - return; - }); - resolve2(await operation); - } catch (error48) { - reject(error48); - } - this._next(); - }; - this._queue.enqueue(run, options); - this._tryToStartAnother(); - this.emit("add"); - }); - } - async addAll(functions, options) { - return Promise.all(functions.map(async (function_) => this.add(function_, options))); - } - start() { - if (!this._isPaused) { - return this; - } - this._isPaused = false; - this._processQueue(); - return this; - } - pause() { - this._isPaused = true; - } - clear() { - this._queue = new this._queueClass; - } - async onEmpty() { - if (this._queue.size === 0) { - return; - } - return new Promise((resolve2) => { - const existingResolve = this._resolveEmpty; - this._resolveEmpty = () => { - existingResolve(); - resolve2(); - }; - }); - } - async onIdle() { - if (this._pendingCount === 0 && this._queue.size === 0) { - return; - } - return new Promise((resolve2) => { - const existingResolve = this._resolveIdle; - this._resolveIdle = () => { - existingResolve(); - resolve2(); - }; - }); - } - get size() { - return this._queue.size; - } - sizeBy(options) { - return this._queue.filter(options).length; - } - get pending() { - return this._pendingCount; - } - get isPaused() { - return this._isPaused; - } - get timeout() { - return this._timeout; - } - set timeout(milliseconds) { - this._timeout = milliseconds; - } - } - exports.default = PQueue; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/async_caller.cjs -var require_async_caller = __commonJS((exports) => { - var __importDefault2 = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncCaller = undefined; - var index_js_1 = __importDefault2(require_p_retry()); - var p_queue_1 = __importDefault2(require_dist6()); - var STATUS_RETRYABLE = [ - 408, - 425, - 429, - 500, - 502, - 503, - 504 - ]; - - class AsyncCaller { - constructor(params) { - Object.defineProperty(this, "maxConcurrency", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "maxRetries", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "maxQueueSizeBytes", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "queue", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "onFailedResponseHook", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "queueSizeBytes", { - enumerable: true, - configurable: true, - writable: true, - value: 0 - }); - this.maxConcurrency = params.maxConcurrency ?? Infinity; - this.maxRetries = params.maxRetries ?? 6; - this.maxQueueSizeBytes = params.maxQueueSizeBytes; - if ("default" in p_queue_1.default) { - this.queue = new p_queue_1.default.default({ - concurrency: this.maxConcurrency - }); - } else { - this.queue = new p_queue_1.default({ concurrency: this.maxConcurrency }); - } - this.onFailedResponseHook = params?.onFailedResponseHook; - } - call(callable, ...args) { - return this.callWithOptions({}, callable, ...args); - } - callWithOptions(options, callable, ...args) { - const sizeBytes = options.sizeBytes ?? 0; - if (this.maxQueueSizeBytes !== undefined && sizeBytes > 0 && this.queueSizeBytes + sizeBytes > this.maxQueueSizeBytes) { - return Promise.reject(new Error(`Queue size limit (${this.maxQueueSizeBytes} bytes) exceeded. ` + `Current queue size: ${this.queueSizeBytes} bytes, attempted addition: ${sizeBytes} bytes.`)); - } - if (sizeBytes > 0) { - this.queueSizeBytes += sizeBytes; - } - const onFailedResponseHook = this.onFailedResponseHook; - let promise2 = this.queue.add(() => (0, index_js_1.default)(() => callable(...args).catch((error48) => { - if (error48 instanceof Error) { - throw error48; - } else { - throw new Error(error48); - } - }), { - async onFailedAttempt({ error: error48 }) { - if (error48.message.startsWith("Cancel") || error48.message.startsWith("TimeoutError") || error48.name === "TimeoutError" || error48.message.startsWith("AbortError")) { - throw error48; - } - if (error48?.code === "ECONNABORTED") { - throw error48; - } - const response = error48?.response; - if (onFailedResponseHook) { - const handled = await onFailedResponseHook(response); - if (handled) { - return; - } - } - const status = response?.status ?? error48?.status; - if (status) { - if (!STATUS_RETRYABLE.includes(+status)) { - throw error48; - } - } - }, - retries: this.maxRetries, - randomize: true - }), { throwOnTimeout: true }); - if (sizeBytes > 0) { - promise2 = promise2.finally(() => { - this.queueSizeBytes -= sizeBytes; - }); - } - if (options.signal) { - return Promise.race([ - promise2, - new Promise((_, reject) => { - options.signal?.addEventListener("abort", () => { - reject(new Error("AbortError")); - }); - }) - ]); - } - return promise2; - } - } - exports.AsyncCaller = AsyncCaller; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/messages.cjs -var require_messages = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isLangChainMessage = isLangChainMessage; - exports.convertLangChainMessageToExample = convertLangChainMessageToExample; - function isLangChainMessage(message) { - return typeof message?._getType === "function"; - } - function convertLangChainMessageToExample(message) { - const converted = { - type: message._getType(), - data: { content: message.content } - }; - if (message?.additional_kwargs && Object.keys(message.additional_kwargs).length > 0) { - converted.data.additional_kwargs = { ...message.additional_kwargs }; - } - return converted; - } -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/internal/constants.js -var require_constants14 = __commonJS((exports, module) => { - var SEMVER_SPEC_VERSION = "2.0.0"; - var MAX_LENGTH = 256; - var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; - var MAX_SAFE_COMPONENT_LENGTH = 16; - var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6; - var RELEASE_TYPES = [ - "major", - "premajor", - "minor", - "preminor", - "patch", - "prepatch", - "prerelease" - ]; - module.exports = { - MAX_LENGTH, - MAX_SAFE_COMPONENT_LENGTH, - MAX_SAFE_BUILD_LENGTH, - MAX_SAFE_INTEGER, - RELEASE_TYPES, - SEMVER_SPEC_VERSION, - FLAG_INCLUDE_PRERELEASE: 1, - FLAG_LOOSE: 2 - }; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/internal/debug.js -var require_debug = __commonJS((exports, module) => { - var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {}; - module.exports = debug; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/internal/re.js -var require_re = __commonJS((exports, module) => { - var { - MAX_SAFE_COMPONENT_LENGTH, - MAX_SAFE_BUILD_LENGTH, - MAX_LENGTH - } = require_constants14(); - var debug = require_debug(); - exports = module.exports = {}; - var re = exports.re = []; - var safeRe = exports.safeRe = []; - var src = exports.src = []; - var safeSrc = exports.safeSrc = []; - var t = exports.t = {}; - var R = 0; - var LETTERDASHNUMBER = "[a-zA-Z0-9-]"; - var safeRegexReplacements = [ - ["\\s", 1], - ["\\d", MAX_LENGTH], - [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH] - ]; - var makeSafeRegex = (value) => { - for (const [token, max] of safeRegexReplacements) { - value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`); - } - return value; - }; - var createToken = (name, value, isGlobal) => { - const safe = makeSafeRegex(value); - const index = R++; - debug(name, index, value); - t[name] = index; - src[index] = value; - safeSrc[index] = safe; - re[index] = new RegExp(value, isGlobal ? "g" : undefined); - safeRe[index] = new RegExp(safe, isGlobal ? "g" : undefined); - }; - createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*"); - createToken("NUMERICIDENTIFIERLOOSE", "\\d+"); - createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`); - createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})`); - createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})`); - createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`); - createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`); - createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`); - createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`); - createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`); - createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`); - createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`); - createToken("FULL", `^${src[t.FULLPLAIN]}$`); - createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`); - createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`); - createToken("GTLT", "((?:<|>)?=?)"); - createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); - createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); - createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?` + `)?)?`); - createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?` + `)?)?`); - createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`); - createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`); - createToken("COERCEPLAIN", `${"(^|[^\\d])" + "(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`); - createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`); - createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?` + `(?:${src[t.BUILD]})?` + `(?:$|[^\\d])`); - createToken("COERCERTL", src[t.COERCE], true); - createToken("COERCERTLFULL", src[t.COERCEFULL], true); - createToken("LONETILDE", "(?:~>?)"); - createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true); - exports.tildeTrimReplace = "$1~"; - createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); - createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); - createToken("LONECARET", "(?:\\^)"); - createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true); - exports.caretTrimReplace = "$1^"; - createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); - createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); - createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`); - createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`); - createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); - exports.comparatorTrimReplace = "$1$2$3"; - createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAIN]})` + `\\s*$`); - createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAINLOOSE]})` + `\\s*$`); - createToken("STAR", "(<|>)?=?\\s*\\*"); - createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$"); - createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$"); -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/internal/parse-options.js -var require_parse_options = __commonJS((exports, module) => { - var looseOption = Object.freeze({ loose: true }); - var emptyOpts = Object.freeze({}); - var parseOptions = (options) => { - if (!options) { - return emptyOpts; - } - if (typeof options !== "object") { - return looseOption; - } - return options; - }; - module.exports = parseOptions; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/internal/identifiers.js -var require_identifiers = __commonJS((exports, module) => { - var numeric = /^[0-9]+$/; - var compareIdentifiers = (a, b) => { - if (typeof a === "number" && typeof b === "number") { - return a === b ? 0 : a < b ? -1 : 1; - } - const anum = numeric.test(a); - const bnum = numeric.test(b); - if (anum && bnum) { - a = +a; - b = +b; - } - return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1; - }; - var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a); - module.exports = { - compareIdentifiers, - rcompareIdentifiers - }; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/classes/semver.js -var require_semver4 = __commonJS((exports, module) => { - var debug = require_debug(); - var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants14(); - var { safeRe: re, t } = require_re(); - var parseOptions = require_parse_options(); - var { compareIdentifiers } = require_identifiers(); - - class SemVer { - constructor(version10, options) { - options = parseOptions(options); - if (version10 instanceof SemVer) { - if (version10.loose === !!options.loose && version10.includePrerelease === !!options.includePrerelease) { - return version10; - } else { - version10 = version10.version; - } - } else if (typeof version10 !== "string") { - throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version10}".`); - } - if (version10.length > MAX_LENGTH) { - throw new TypeError(`version is longer than ${MAX_LENGTH} characters`); - } - debug("SemVer", version10, options); - this.options = options; - this.loose = !!options.loose; - this.includePrerelease = !!options.includePrerelease; - const m = version10.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]); - if (!m) { - throw new TypeError(`Invalid Version: ${version10}`); - } - this.raw = version10; - this.major = +m[1]; - this.minor = +m[2]; - this.patch = +m[3]; - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError("Invalid major version"); - } - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError("Invalid minor version"); - } - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError("Invalid patch version"); - } - if (!m[4]) { - this.prerelease = []; - } else { - this.prerelease = m[4].split(".").map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id; - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num; - } - } - return id; - }); - } - this.build = m[5] ? m[5].split(".") : []; - this.format(); - } - format() { - this.version = `${this.major}.${this.minor}.${this.patch}`; - if (this.prerelease.length) { - this.version += `-${this.prerelease.join(".")}`; - } - return this.version; - } - toString() { - return this.version; - } - compare(other) { - debug("SemVer.compare", this.version, this.options, other); - if (!(other instanceof SemVer)) { - if (typeof other === "string" && other === this.version) { - return 0; - } - other = new SemVer(other, this.options); - } - if (other.version === this.version) { - return 0; - } - return this.compareMain(other) || this.comparePre(other); - } - compareMain(other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - if (this.major < other.major) { - return -1; - } - if (this.major > other.major) { - return 1; - } - if (this.minor < other.minor) { - return -1; - } - if (this.minor > other.minor) { - return 1; - } - if (this.patch < other.patch) { - return -1; - } - if (this.patch > other.patch) { - return 1; - } - return 0; - } - comparePre(other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - if (this.prerelease.length && !other.prerelease.length) { - return -1; - } else if (!this.prerelease.length && other.prerelease.length) { - return 1; - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0; - } - let i = 0; - do { - const a = this.prerelease[i]; - const b = other.prerelease[i]; - debug("prerelease compare", i, a, b); - if (a === undefined && b === undefined) { - return 0; - } else if (b === undefined) { - return 1; - } else if (a === undefined) { - return -1; - } else if (a === b) { - continue; - } else { - return compareIdentifiers(a, b); - } - } while (++i); - } - compareBuild(other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - let i = 0; - do { - const a = this.build[i]; - const b = other.build[i]; - debug("build compare", i, a, b); - if (a === undefined && b === undefined) { - return 0; - } else if (b === undefined) { - return 1; - } else if (a === undefined) { - return -1; - } else if (a === b) { - continue; - } else { - return compareIdentifiers(a, b); - } - } while (++i); - } - inc(release, identifier, identifierBase) { - if (release.startsWith("pre")) { - if (!identifier && identifierBase === false) { - throw new Error("invalid increment argument: identifier is empty"); - } - if (identifier) { - const match2 = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]); - if (!match2 || match2[1] !== identifier) { - throw new Error(`invalid identifier: ${identifier}`); - } - } - } - switch (release) { - case "premajor": - this.prerelease.length = 0; - this.patch = 0; - this.minor = 0; - this.major++; - this.inc("pre", identifier, identifierBase); - break; - case "preminor": - this.prerelease.length = 0; - this.patch = 0; - this.minor++; - this.inc("pre", identifier, identifierBase); - break; - case "prepatch": - this.prerelease.length = 0; - this.inc("patch", identifier, identifierBase); - this.inc("pre", identifier, identifierBase); - break; - case "prerelease": - if (this.prerelease.length === 0) { - this.inc("patch", identifier, identifierBase); - } - this.inc("pre", identifier, identifierBase); - break; - case "release": - if (this.prerelease.length === 0) { - throw new Error(`version ${this.raw} is not a prerelease`); - } - this.prerelease.length = 0; - break; - case "major": - if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) { - this.major++; - } - this.minor = 0; - this.patch = 0; - this.prerelease = []; - break; - case "minor": - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++; - } - this.patch = 0; - this.prerelease = []; - break; - case "patch": - if (this.prerelease.length === 0) { - this.patch++; - } - this.prerelease = []; - break; - case "pre": { - const base2 = Number(identifierBase) ? 1 : 0; - if (this.prerelease.length === 0) { - this.prerelease = [base2]; - } else { - let i = this.prerelease.length; - while (--i >= 0) { - if (typeof this.prerelease[i] === "number") { - this.prerelease[i]++; - i = -2; - } - } - if (i === -1) { - if (identifier === this.prerelease.join(".") && identifierBase === false) { - throw new Error("invalid increment argument: identifier already exists"); - } - this.prerelease.push(base2); - } - } - if (identifier) { - let prerelease = [identifier, base2]; - if (identifierBase === false) { - prerelease = [identifier]; - } - if (compareIdentifiers(this.prerelease[0], identifier) === 0) { - if (isNaN(this.prerelease[1])) { - this.prerelease = prerelease; - } - } else { - this.prerelease = prerelease; - } - } - break; - } - default: - throw new Error(`invalid increment argument: ${release}`); - } - this.raw = this.format(); - if (this.build.length) { - this.raw += `+${this.build.join(".")}`; - } - return this; - } - } - module.exports = SemVer; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/parse.js -var require_parse5 = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var parse7 = (version10, options, throwErrors = false) => { - if (version10 instanceof SemVer) { - return version10; - } - try { - return new SemVer(version10, options); - } catch (er) { - if (!throwErrors) { - return null; - } - throw er; - } - }; - module.exports = parse7; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/valid.js -var require_valid = __commonJS((exports, module) => { - var parse7 = require_parse5(); - var valid = (version10, options) => { - const v = parse7(version10, options); - return v ? v.version : null; - }; - module.exports = valid; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/clean.js -var require_clean = __commonJS((exports, module) => { - var parse7 = require_parse5(); - var clean = (version10, options) => { - const s2 = parse7(version10.trim().replace(/^[=v]+/, ""), options); - return s2 ? s2.version : null; - }; - module.exports = clean; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/inc.js -var require_inc = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var inc = (version10, release, options, identifier, identifierBase) => { - if (typeof options === "string") { - identifierBase = identifier; - identifier = options; - options = undefined; - } - try { - return new SemVer(version10 instanceof SemVer ? version10.version : version10, options).inc(release, identifier, identifierBase).version; - } catch (er) { - return null; - } - }; - module.exports = inc; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/diff.js -var require_diff = __commonJS((exports, module) => { - var parse7 = require_parse5(); - var diff = (version1, version22) => { - const v12 = parse7(version1, null, true); - const v2 = parse7(version22, null, true); - const comparison = v12.compare(v2); - if (comparison === 0) { - return null; - } - const v1Higher = comparison > 0; - const highVersion = v1Higher ? v12 : v2; - const lowVersion = v1Higher ? v2 : v12; - const highHasPre = !!highVersion.prerelease.length; - const lowHasPre = !!lowVersion.prerelease.length; - if (lowHasPre && !highHasPre) { - if (!lowVersion.patch && !lowVersion.minor) { - return "major"; - } - if (lowVersion.compareMain(highVersion) === 0) { - if (lowVersion.minor && !lowVersion.patch) { - return "minor"; - } - return "patch"; - } - } - const prefix = highHasPre ? "pre" : ""; - if (v12.major !== v2.major) { - return prefix + "major"; - } - if (v12.minor !== v2.minor) { - return prefix + "minor"; - } - if (v12.patch !== v2.patch) { - return prefix + "patch"; - } - return "prerelease"; - }; - module.exports = diff; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/major.js -var require_major = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var major = (a, loose) => new SemVer(a, loose).major; - module.exports = major; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/minor.js -var require_minor = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var minor = (a, loose) => new SemVer(a, loose).minor; - module.exports = minor; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/patch.js -var require_patch = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var patch = (a, loose) => new SemVer(a, loose).patch; - module.exports = patch; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/prerelease.js -var require_prerelease = __commonJS((exports, module) => { - var parse7 = require_parse5(); - var prerelease = (version10, options) => { - const parsed = parse7(version10, options); - return parsed && parsed.prerelease.length ? parsed.prerelease : null; - }; - module.exports = prerelease; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/compare.js -var require_compare = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)); - module.exports = compare; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/rcompare.js -var require_rcompare = __commonJS((exports, module) => { - var compare = require_compare(); - var rcompare = (a, b, loose) => compare(b, a, loose); - module.exports = rcompare; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/compare-loose.js -var require_compare_loose = __commonJS((exports, module) => { - var compare = require_compare(); - var compareLoose = (a, b) => compare(a, b, true); - module.exports = compareLoose; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/compare-build.js -var require_compare_build = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var compareBuild = (a, b, loose) => { - const versionA = new SemVer(a, loose); - const versionB = new SemVer(b, loose); - return versionA.compare(versionB) || versionA.compareBuild(versionB); - }; - module.exports = compareBuild; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/sort.js -var require_sort = __commonJS((exports, module) => { - var compareBuild = require_compare_build(); - var sort = (list5, loose) => list5.sort((a, b) => compareBuild(a, b, loose)); - module.exports = sort; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/rsort.js -var require_rsort = __commonJS((exports, module) => { - var compareBuild = require_compare_build(); - var rsort = (list5, loose) => list5.sort((a, b) => compareBuild(b, a, loose)); - module.exports = rsort; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/gt.js -var require_gt = __commonJS((exports, module) => { - var compare = require_compare(); - var gt = (a, b, loose) => compare(a, b, loose) > 0; - module.exports = gt; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/lt.js -var require_lt = __commonJS((exports, module) => { - var compare = require_compare(); - var lt = (a, b, loose) => compare(a, b, loose) < 0; - module.exports = lt; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/eq.js -var require_eq = __commonJS((exports, module) => { - var compare = require_compare(); - var eq = (a, b, loose) => compare(a, b, loose) === 0; - module.exports = eq; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/neq.js -var require_neq = __commonJS((exports, module) => { - var compare = require_compare(); - var neq = (a, b, loose) => compare(a, b, loose) !== 0; - module.exports = neq; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/gte.js -var require_gte = __commonJS((exports, module) => { - var compare = require_compare(); - var gte = (a, b, loose) => compare(a, b, loose) >= 0; - module.exports = gte; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/lte.js -var require_lte = __commonJS((exports, module) => { - var compare = require_compare(); - var lte = (a, b, loose) => compare(a, b, loose) <= 0; - module.exports = lte; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/cmp.js -var require_cmp = __commonJS((exports, module) => { - var eq = require_eq(); - var neq = require_neq(); - var gt = require_gt(); - var gte = require_gte(); - var lt = require_lt(); - var lte = require_lte(); - var cmp = (a, op, b, loose) => { - switch (op) { - case "===": - if (typeof a === "object") { - a = a.version; - } - if (typeof b === "object") { - b = b.version; - } - return a === b; - case "!==": - if (typeof a === "object") { - a = a.version; - } - if (typeof b === "object") { - b = b.version; - } - return a !== b; - case "": - case "=": - case "==": - return eq(a, b, loose); - case "!=": - return neq(a, b, loose); - case ">": - return gt(a, b, loose); - case ">=": - return gte(a, b, loose); - case "<": - return lt(a, b, loose); - case "<=": - return lte(a, b, loose); - default: - throw new TypeError(`Invalid operator: ${op}`); - } - }; - module.exports = cmp; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/coerce.js -var require_coerce = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var parse7 = require_parse5(); - var { safeRe: re, t } = require_re(); - var coerce = (version10, options) => { - if (version10 instanceof SemVer) { - return version10; - } - if (typeof version10 === "number") { - version10 = String(version10); - } - if (typeof version10 !== "string") { - return null; - } - options = options || {}; - let match2 = null; - if (!options.rtl) { - match2 = version10.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]); - } else { - const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]; - let next; - while ((next = coerceRtlRegex.exec(version10)) && (!match2 || match2.index + match2[0].length !== version10.length)) { - if (!match2 || next.index + next[0].length !== match2.index + match2[0].length) { - match2 = next; - } - coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length; - } - coerceRtlRegex.lastIndex = -1; - } - if (match2 === null) { - return null; - } - const major = match2[2]; - const minor = match2[3] || "0"; - const patch = match2[4] || "0"; - const prerelease = options.includePrerelease && match2[5] ? `-${match2[5]}` : ""; - const build = options.includePrerelease && match2[6] ? `+${match2[6]}` : ""; - return parse7(`${major}.${minor}.${patch}${prerelease}${build}`, options); - }; - module.exports = coerce; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/internal/lrucache.js -var require_lrucache = __commonJS((exports, module) => { - class LRUCache { - constructor() { - this.max = 1000; - this.map = new Map; - } - get(key) { - const value = this.map.get(key); - if (value === undefined) { - return; - } else { - this.map.delete(key); - this.map.set(key, value); - return value; - } - } - delete(key) { - return this.map.delete(key); - } - set(key, value) { - const deleted = this.delete(key); - if (!deleted && value !== undefined) { - if (this.map.size >= this.max) { - const firstKey = this.map.keys().next().value; - this.delete(firstKey); - } - this.map.set(key, value); - } - return this; - } - } - module.exports = LRUCache; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/classes/range.js -var require_range = __commonJS((exports, module) => { - var SPACE_CHARACTERS = /\s+/g; - - class Range { - constructor(range, options) { - options = parseOptions(options); - if (range instanceof Range) { - if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) { - return range; - } else { - return new Range(range.raw, options); - } - } - if (range instanceof Comparator) { - this.raw = range.value; - this.set = [[range]]; - this.formatted = undefined; - return this; - } - this.options = options; - this.loose = !!options.loose; - this.includePrerelease = !!options.includePrerelease; - this.raw = range.trim().replace(SPACE_CHARACTERS, " "); - this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length); - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${this.raw}`); - } - if (this.set.length > 1) { - const first = this.set[0]; - this.set = this.set.filter((c) => !isNullSet(c[0])); - if (this.set.length === 0) { - this.set = [first]; - } else if (this.set.length > 1) { - for (const c of this.set) { - if (c.length === 1 && isAny(c[0])) { - this.set = [c]; - break; - } - } - } - } - this.formatted = undefined; - } - get range() { - if (this.formatted === undefined) { - this.formatted = ""; - for (let i = 0;i < this.set.length; i++) { - if (i > 0) { - this.formatted += "||"; - } - const comps = this.set[i]; - for (let k = 0;k < comps.length; k++) { - if (k > 0) { - this.formatted += " "; - } - this.formatted += comps[k].toString().trim(); - } - } - } - return this.formatted; - } - format() { - return this.range; - } - toString() { - return this.range; - } - parseRange(range) { - const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE); - const memoKey = memoOpts + ":" + range; - const cached2 = cache.get(memoKey); - if (cached2) { - return cached2; - } - const loose = this.options.loose; - const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]; - range = range.replace(hr, hyphenReplace(this.options.includePrerelease)); - debug("hyphen replace", range); - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace); - debug("comparator trim", range); - range = range.replace(re[t.TILDETRIM], tildeTrimReplace); - debug("tilde trim", range); - range = range.replace(re[t.CARETTRIM], caretTrimReplace); - debug("caret trim", range); - let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)); - if (loose) { - rangeList = rangeList.filter((comp) => { - debug("loose invalid filter", comp, this.options); - return !!comp.match(re[t.COMPARATORLOOSE]); - }); - } - debug("range list", rangeList); - const rangeMap = new Map; - const comparators = rangeList.map((comp) => new Comparator(comp, this.options)); - for (const comp of comparators) { - if (isNullSet(comp)) { - return [comp]; - } - rangeMap.set(comp.value, comp); - } - if (rangeMap.size > 1 && rangeMap.has("")) { - rangeMap.delete(""); - } - const result = [...rangeMap.values()]; - cache.set(memoKey, result); - return result; - } - intersects(range, options) { - if (!(range instanceof Range)) { - throw new TypeError("a Range is required"); - } - return this.set.some((thisComparators) => { - return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => { - return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects(rangeComparator, options); - }); - }); - }); - }); - } - test(version10) { - if (!version10) { - return false; - } - if (typeof version10 === "string") { - try { - version10 = new SemVer(version10, this.options); - } catch (er) { - return false; - } - } - for (let i = 0;i < this.set.length; i++) { - if (testSet(this.set[i], version10, this.options)) { - return true; - } - } - return false; - } - } - module.exports = Range; - var LRU = require_lrucache(); - var cache = new LRU; - var parseOptions = require_parse_options(); - var Comparator = require_comparator(); - var debug = require_debug(); - var SemVer = require_semver4(); - var { - safeRe: re, - t, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace - } = require_re(); - var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants14(); - var isNullSet = (c) => c.value === "<0.0.0-0"; - var isAny = (c) => c.value === ""; - var isSatisfiable = (comparators, options) => { - let result = true; - const remainingComparators = comparators.slice(); - let testComparator = remainingComparators.pop(); - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator.intersects(otherComparator, options); - }); - testComparator = remainingComparators.pop(); - } - return result; - }; - var parseComparator = (comp, options) => { - comp = comp.replace(re[t.BUILD], ""); - debug("comp", comp, options); - comp = replaceCarets(comp, options); - debug("caret", comp); - comp = replaceTildes(comp, options); - debug("tildes", comp); - comp = replaceXRanges(comp, options); - debug("xrange", comp); - comp = replaceStars(comp, options); - debug("stars", comp); - return comp; - }; - var isX = (id) => !id || id.toLowerCase() === "x" || id === "*"; - var replaceTildes = (comp, options) => { - return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" "); - }; - var replaceTilde = (comp, options) => { - const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; - return comp.replace(r, (_, M, m, p, pr) => { - debug("tilde", comp, _, M, m, p, pr); - let ret; - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; - } else if (isX(p)) { - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; - } else if (pr) { - debug("replaceTilde pr", pr); - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; - } - debug("tilde return", ret); - return ret; - }); - }; - var replaceCarets = (comp, options) => { - return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" "); - }; - var replaceCaret = (comp, options) => { - debug("caret", comp, options); - const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]; - const z2 = options.includePrerelease ? "-0" : ""; - return comp.replace(r, (_, M, m, p, pr) => { - debug("caret", comp, _, M, m, p, pr); - let ret; - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = `>=${M}.0.0${z2} <${+M + 1}.0.0-0`; - } else if (isX(p)) { - if (M === "0") { - ret = `>=${M}.${m}.0${z2} <${M}.${+m + 1}.0-0`; - } else { - ret = `>=${M}.${m}.0${z2} <${+M + 1}.0.0-0`; - } - } else if (pr) { - debug("replaceCaret pr", pr); - if (M === "0") { - if (m === "0") { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; - } else { - ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; - } - } else { - ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; - } - } else { - debug("no pr"); - if (M === "0") { - if (m === "0") { - ret = `>=${M}.${m}.${p}${z2} <${M}.${m}.${+p + 1}-0`; - } else { - ret = `>=${M}.${m}.${p}${z2} <${M}.${+m + 1}.0-0`; - } - } else { - ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; - } - } - debug("caret return", ret); - return ret; - }); - }; - var replaceXRanges = (comp, options) => { - debug("replaceXRanges", comp, options); - return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" "); - }; - var replaceXRange = (comp, options) => { - comp = comp.trim(); - const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug("xRange", comp, ret, gtlt, M, m, p, pr); - const xM = isX(M); - const xm = xM || isX(m); - const xp = xm || isX(p); - const anyX = xp; - if (gtlt === "=" && anyX) { - gtlt = ""; - } - pr = options.includePrerelease ? "-0" : ""; - if (xM) { - if (gtlt === ">" || gtlt === "<") { - ret = "<0.0.0-0"; - } else { - ret = "*"; - } - } else if (gtlt && anyX) { - if (xm) { - m = 0; - } - p = 0; - if (gtlt === ">") { - gtlt = ">="; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else { - m = +m + 1; - p = 0; - } - } else if (gtlt === "<=") { - gtlt = "<"; - if (xm) { - M = +M + 1; - } else { - m = +m + 1; - } - } - if (gtlt === "<") { - pr = "-0"; - } - ret = `${gtlt + M}.${m}.${p}${pr}`; - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; - } else if (xp) { - ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; - } - debug("xRange return", ret); - return ret; - }); - }; - var replaceStars = (comp, options) => { - debug("replaceStars", comp, options); - return comp.trim().replace(re[t.STAR], ""); - }; - var replaceGTE0 = (comp, options) => { - debug("replaceGTE0", comp, options); - return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], ""); - }; - var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { - if (isX(fM)) { - from = ""; - } else if (isX(fm)) { - from = `>=${fM}.0.0${incPr ? "-0" : ""}`; - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`; - } else if (fpr) { - from = `>=${from}`; - } else { - from = `>=${from}${incPr ? "-0" : ""}`; - } - if (isX(tM)) { - to = ""; - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0`; - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0`; - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}`; - } else if (incPr) { - to = `<${tM}.${tm}.${+tp + 1}-0`; - } else { - to = `<=${to}`; - } - return `${from} ${to}`.trim(); - }; - var testSet = (set2, version10, options) => { - for (let i = 0;i < set2.length; i++) { - if (!set2[i].test(version10)) { - return false; - } - } - if (version10.prerelease.length && !options.includePrerelease) { - for (let i = 0;i < set2.length; i++) { - debug(set2[i].semver); - if (set2[i].semver === Comparator.ANY) { - continue; - } - if (set2[i].semver.prerelease.length > 0) { - const allowed = set2[i].semver; - if (allowed.major === version10.major && allowed.minor === version10.minor && allowed.patch === version10.patch) { - return true; - } - } - } - return false; - } - return true; - }; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/classes/comparator.js -var require_comparator = __commonJS((exports, module) => { - var ANY = Symbol("SemVer ANY"); - - class Comparator { - static get ANY() { - return ANY; - } - constructor(comp, options) { - options = parseOptions(options); - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp; - } else { - comp = comp.value; - } - } - comp = comp.trim().split(/\s+/).join(" "); - debug("comparator", comp, options); - this.options = options; - this.loose = !!options.loose; - this.parse(comp); - if (this.semver === ANY) { - this.value = ""; - } else { - this.value = this.operator + this.semver.version; - } - debug("comp", this); - } - parse(comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]; - const m = comp.match(r); - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`); - } - this.operator = m[1] !== undefined ? m[1] : ""; - if (this.operator === "=") { - this.operator = ""; - } - if (!m[2]) { - this.semver = ANY; - } else { - this.semver = new SemVer(m[2], this.options.loose); - } - } - toString() { - return this.value; - } - test(version10) { - debug("Comparator.test", version10, this.options.loose); - if (this.semver === ANY || version10 === ANY) { - return true; - } - if (typeof version10 === "string") { - try { - version10 = new SemVer(version10, this.options); - } catch (er) { - return false; - } - } - return cmp(version10, this.operator, this.semver, this.options); - } - intersects(comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError("a Comparator is required"); - } - if (this.operator === "") { - if (this.value === "") { - return true; - } - return new Range(comp.value, options).test(this.value); - } else if (comp.operator === "") { - if (comp.value === "") { - return true; - } - return new Range(this.value, options).test(comp.semver); - } - options = parseOptions(options); - if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) { - return false; - } - if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) { - return false; - } - if (this.operator.startsWith(">") && comp.operator.startsWith(">")) { - return true; - } - if (this.operator.startsWith("<") && comp.operator.startsWith("<")) { - return true; - } - if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) { - return true; - } - if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) { - return true; - } - if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) { - return true; - } - return false; - } - } - module.exports = Comparator; - var parseOptions = require_parse_options(); - var { safeRe: re, t } = require_re(); - var cmp = require_cmp(); - var debug = require_debug(); - var SemVer = require_semver4(); - var Range = require_range(); -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/functions/satisfies.js -var require_satisfies = __commonJS((exports, module) => { - var Range = require_range(); - var satisfies = (version10, range, options) => { - try { - range = new Range(range, options); - } catch (er) { - return false; - } - return range.test(version10); - }; - module.exports = satisfies; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/to-comparators.js -var require_to_comparators = __commonJS((exports, module) => { - var Range = require_range(); - var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" ")); - module.exports = toComparators; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js -var require_max_satisfying = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var Range = require_range(); - var maxSatisfying = (versions2, range, options) => { - let max = null; - let maxSV = null; - let rangeObj = null; - try { - rangeObj = new Range(range, options); - } catch (er) { - return null; - } - versions2.forEach((v) => { - if (rangeObj.test(v)) { - if (!max || maxSV.compare(v) === -1) { - max = v; - maxSV = new SemVer(max, options); - } - } - }); - return max; - }; - module.exports = maxSatisfying; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js -var require_min_satisfying = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var Range = require_range(); - var minSatisfying = (versions2, range, options) => { - let min = null; - let minSV = null; - let rangeObj = null; - try { - rangeObj = new Range(range, options); - } catch (er) { - return null; - } - versions2.forEach((v) => { - if (rangeObj.test(v)) { - if (!min || minSV.compare(v) === 1) { - min = v; - minSV = new SemVer(min, options); - } - } - }); - return min; - }; - module.exports = minSatisfying; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/min-version.js -var require_min_version = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var Range = require_range(); - var gt = require_gt(); - var minVersion = (range, loose) => { - range = new Range(range, loose); - let minver = new SemVer("0.0.0"); - if (range.test(minver)) { - return minver; - } - minver = new SemVer("0.0.0-0"); - if (range.test(minver)) { - return minver; - } - minver = null; - for (let i = 0;i < range.set.length; ++i) { - const comparators = range.set[i]; - let setMin = null; - comparators.forEach((comparator) => { - const compver = new SemVer(comparator.semver.version); - switch (comparator.operator) { - case ">": - if (compver.prerelease.length === 0) { - compver.patch++; - } else { - compver.prerelease.push(0); - } - compver.raw = compver.format(); - case "": - case ">=": - if (!setMin || gt(compver, setMin)) { - setMin = compver; - } - break; - case "<": - case "<=": - break; - default: - throw new Error(`Unexpected operation: ${comparator.operator}`); - } - }); - if (setMin && (!minver || gt(minver, setMin))) { - minver = setMin; - } - } - if (minver && range.test(minver)) { - return minver; - } - return null; - }; - module.exports = minVersion; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/valid.js -var require_valid2 = __commonJS((exports, module) => { - var Range = require_range(); - var validRange = (range, options) => { - try { - return new Range(range, options).range || "*"; - } catch (er) { - return null; - } - }; - module.exports = validRange; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/outside.js -var require_outside = __commonJS((exports, module) => { - var SemVer = require_semver4(); - var Comparator = require_comparator(); - var { ANY } = Comparator; - var Range = require_range(); - var satisfies = require_satisfies(); - var gt = require_gt(); - var lt = require_lt(); - var lte = require_lte(); - var gte = require_gte(); - var outside = (version10, range, hilo, options) => { - version10 = new SemVer(version10, options); - range = new Range(range, options); - let gtfn, ltefn, ltfn, comp, ecomp; - switch (hilo) { - case ">": - gtfn = gt; - ltefn = lte; - ltfn = lt; - comp = ">"; - ecomp = ">="; - break; - case "<": - gtfn = lt; - ltefn = gte; - ltfn = gt; - comp = "<"; - ecomp = "<="; - break; - default: - throw new TypeError('Must provide a hilo val of "<" or ">"'); - } - if (satisfies(version10, range, options)) { - return false; - } - for (let i = 0;i < range.set.length; ++i) { - const comparators = range.set[i]; - let high = null; - let low = null; - comparators.forEach((comparator) => { - if (comparator.semver === ANY) { - comparator = new Comparator(">=0.0.0"); - } - high = high || comparator; - low = low || comparator; - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator; - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator; - } - }); - if (high.operator === comp || high.operator === ecomp) { - return false; - } - if ((!low.operator || low.operator === comp) && ltefn(version10, low.semver)) { - return false; - } else if (low.operator === ecomp && ltfn(version10, low.semver)) { - return false; - } - } - return true; - }; - module.exports = outside; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/gtr.js -var require_gtr = __commonJS((exports, module) => { - var outside = require_outside(); - var gtr = (version10, range, options) => outside(version10, range, ">", options); - module.exports = gtr; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/ltr.js -var require_ltr = __commonJS((exports, module) => { - var outside = require_outside(); - var ltr = (version10, range, options) => outside(version10, range, "<", options); - module.exports = ltr; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/intersects.js -var require_intersects = __commonJS((exports, module) => { - var Range = require_range(); - var intersects = (r1, r2, options) => { - r1 = new Range(r1, options); - r2 = new Range(r2, options); - return r1.intersects(r2, options); - }; - module.exports = intersects; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/simplify.js -var require_simplify = __commonJS((exports, module) => { - var satisfies = require_satisfies(); - var compare = require_compare(); - module.exports = (versions2, range, options) => { - const set2 = []; - let first = null; - let prev = null; - const v = versions2.sort((a, b) => compare(a, b, options)); - for (const version10 of v) { - const included = satisfies(version10, range, options); - if (included) { - prev = version10; - if (!first) { - first = version10; - } - } else { - if (prev) { - set2.push([first, prev]); - } - prev = null; - first = null; - } - } - if (first) { - set2.push([first, null]); - } - const ranges = []; - for (const [min, max] of set2) { - if (min === max) { - ranges.push(min); - } else if (!max && min === v[0]) { - ranges.push("*"); - } else if (!max) { - ranges.push(`>=${min}`); - } else if (min === v[0]) { - ranges.push(`<=${max}`); - } else { - ranges.push(`${min} - ${max}`); - } - } - const simplified = ranges.join(" || "); - const original = typeof range.raw === "string" ? range.raw : String(range); - return simplified.length < original.length ? simplified : range; - }; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/ranges/subset.js -var require_subset = __commonJS((exports, module) => { - var Range = require_range(); - var Comparator = require_comparator(); - var { ANY } = Comparator; - var satisfies = require_satisfies(); - var compare = require_compare(); - var subset = (sub, dom, options = {}) => { - if (sub === dom) { - return true; - } - sub = new Range(sub, options); - dom = new Range(dom, options); - let sawNonNull = false; - OUTER: - for (const simpleSub of sub.set) { - for (const simpleDom of dom.set) { - const isSub = simpleSubset(simpleSub, simpleDom, options); - sawNonNull = sawNonNull || isSub !== null; - if (isSub) { - continue OUTER; - } - } - if (sawNonNull) { - return false; - } - } - return true; - }; - var minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")]; - var minimumVersion = [new Comparator(">=0.0.0")]; - var simpleSubset = (sub, dom, options) => { - if (sub === dom) { - return true; - } - if (sub.length === 1 && sub[0].semver === ANY) { - if (dom.length === 1 && dom[0].semver === ANY) { - return true; - } else if (options.includePrerelease) { - sub = minimumVersionWithPreRelease; - } else { - sub = minimumVersion; - } - } - if (dom.length === 1 && dom[0].semver === ANY) { - if (options.includePrerelease) { - return true; - } else { - dom = minimumVersion; - } - } - const eqSet = new Set; - let gt, lt; - for (const c of sub) { - if (c.operator === ">" || c.operator === ">=") { - gt = higherGT(gt, c, options); - } else if (c.operator === "<" || c.operator === "<=") { - lt = lowerLT(lt, c, options); - } else { - eqSet.add(c.semver); - } - } - if (eqSet.size > 1) { - return null; - } - let gtltComp; - if (gt && lt) { - gtltComp = compare(gt.semver, lt.semver, options); - if (gtltComp > 0) { - return null; - } else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<=")) { - return null; - } - } - for (const eq of eqSet) { - if (gt && !satisfies(eq, String(gt), options)) { - return null; - } - if (lt && !satisfies(eq, String(lt), options)) { - return null; - } - for (const c of dom) { - if (!satisfies(eq, String(c), options)) { - return false; - } - } - return true; - } - let higher, lower; - let hasDomLT, hasDomGT; - let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false; - let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false; - if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) { - needDomLTPre = false; - } - for (const c of dom) { - hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">="; - hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<="; - if (gt) { - if (needDomGTPre) { - if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) { - needDomGTPre = false; - } - } - if (c.operator === ">" || c.operator === ">=") { - higher = higherGT(gt, c, options); - if (higher === c && higher !== gt) { - return false; - } - } else if (gt.operator === ">=" && !satisfies(gt.semver, String(c), options)) { - return false; - } - } - if (lt) { - if (needDomLTPre) { - if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) { - needDomLTPre = false; - } - } - if (c.operator === "<" || c.operator === "<=") { - lower = lowerLT(lt, c, options); - if (lower === c && lower !== lt) { - return false; - } - } else if (lt.operator === "<=" && !satisfies(lt.semver, String(c), options)) { - return false; - } - } - if (!c.operator && (lt || gt) && gtltComp !== 0) { - return false; - } - } - if (gt && hasDomLT && !lt && gtltComp !== 0) { - return false; - } - if (lt && hasDomGT && !gt && gtltComp !== 0) { - return false; - } - if (needDomGTPre || needDomLTPre) { - return false; - } - return true; - }; - var higherGT = (a, b, options) => { - if (!a) { - return b; - } - const comp = compare(a.semver, b.semver, options); - return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a; - }; - var lowerLT = (a, b, options) => { - if (!a) { - return b; - } - const comp = compare(a.semver, b.semver, options); - return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a; - }; - module.exports = subset; -}); - -// ../../../../node_modules/.bun/semver@7.7.3/node_modules/semver/index.js -var require_semver5 = __commonJS((exports, module) => { - var internalRe = require_re(); - var constants = require_constants14(); - var SemVer = require_semver4(); - var identifiers = require_identifiers(); - var parse7 = require_parse5(); - var valid = require_valid(); - var clean = require_clean(); - var inc = require_inc(); - var diff = require_diff(); - var major = require_major(); - var minor = require_minor(); - var patch = require_patch(); - var prerelease = require_prerelease(); - var compare = require_compare(); - var rcompare = require_rcompare(); - var compareLoose = require_compare_loose(); - var compareBuild = require_compare_build(); - var sort = require_sort(); - var rsort = require_rsort(); - var gt = require_gt(); - var lt = require_lt(); - var eq = require_eq(); - var neq = require_neq(); - var gte = require_gte(); - var lte = require_lte(); - var cmp = require_cmp(); - var coerce = require_coerce(); - var Comparator = require_comparator(); - var Range = require_range(); - var satisfies = require_satisfies(); - var toComparators = require_to_comparators(); - var maxSatisfying = require_max_satisfying(); - var minSatisfying = require_min_satisfying(); - var minVersion = require_min_version(); - var validRange = require_valid2(); - var outside = require_outside(); - var gtr = require_gtr(); - var ltr = require_ltr(); - var intersects = require_intersects(); - var simplifyRange = require_simplify(); - var subset = require_subset(); - module.exports = { - parse: parse7, - valid, - clean, - inc, - diff, - major, - minor, - patch, - prerelease, - compare, - rcompare, - compareLoose, - compareBuild, - sort, - rsort, - gt, - lt, - eq, - neq, - gte, - lte, - cmp, - coerce, - Comparator, - Range, - satisfies, - toComparators, - maxSatisfying, - minSatisfying, - minVersion, - validRange, - outside, - gtr, - ltr, - intersects, - simplifyRange, - subset, - SemVer, - re: internalRe.re, - src: internalRe.src, - tokens: internalRe.t, - SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, - RELEASE_TYPES: constants.RELEASE_TYPES, - compareIdentifiers: identifiers.compareIdentifiers, - rcompareIdentifiers: identifiers.rcompareIdentifiers - }; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/prompts.cjs -var require_prompts = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isVersionGreaterOrEqual = isVersionGreaterOrEqual; - exports.parsePromptIdentifier = parsePromptIdentifier; - var semver_1 = require_semver5(); - function isVersionGreaterOrEqual(current_version, target_version) { - const current = (0, semver_1.parse)(current_version); - const target = (0, semver_1.parse)(target_version); - if (!current || !target) { - throw new Error("Invalid version format."); - } - return current.compare(target) >= 0; - } - function parsePromptIdentifier(identifier) { - if (!identifier || identifier.split("/").length > 2 || identifier.startsWith("/") || identifier.endsWith("/") || identifier.split(":").length > 2) { - throw new Error(`Invalid identifier format: ${identifier}`); - } - const [ownerNamePart, commitPart] = identifier.split(":"); - const commit = commitPart || "latest"; - if (ownerNamePart.includes("/")) { - const [owner, name] = ownerNamePart.split("/", 2); - if (!owner || !name) { - throw new Error(`Invalid identifier format: ${identifier}`); - } - return [owner, name, commit]; - } else { - if (!ownerNamePart) { - throw new Error(`Invalid identifier format: ${identifier}`); - } - return ["-", ownerNamePart, commit]; - } - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/error.cjs -var require_error3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConflictingEndpointsError = exports.LangSmithConflictError = undefined; - exports.printErrorStackTrace = printErrorStackTrace; - exports.raiseForStatus = raiseForStatus; - exports.isConflictingEndpointsError = isConflictingEndpointsError; - function getErrorStackTrace(e) { - if (typeof e !== "object" || e == null) - return; - if (!("stack" in e) || typeof e.stack !== "string") - return; - let stack = e.stack; - const prevLine = `${e}`; - if (stack.startsWith(prevLine)) { - stack = stack.slice(prevLine.length); - } - if (stack.startsWith(` -`)) { - stack = stack.slice(1); - } - return stack; - } - function printErrorStackTrace(e) { - const stack = getErrorStackTrace(e); - if (stack == null) - return; - console.error(stack); - } - - class LangSmithConflictError extends Error { - constructor(message) { - super(message); - Object.defineProperty(this, "status", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.name = "LangSmithConflictError"; - this.status = 409; - } - } - exports.LangSmithConflictError = LangSmithConflictError; - async function raiseForStatus(response, context15, consumeOnSuccess) { - let errorBody; - if (response.ok) { - if (consumeOnSuccess) { - errorBody = await response.text(); - } - return; - } - if (response.status === 403) { - try { - const errorData = await response.json(); - const errorCode = errorData?.error; - if (errorCode === "org_scoped_key_requires_workspace") { - errorBody = "This API key is org-scoped and requires workspace specification. " + "Please provide 'workspaceId' parameter, " + "or set LANGSMITH_WORKSPACE_ID environment variable."; - } - } catch (e) { - const errorWithStatus = new Error(`${response.status} ${response.statusText}`); - errorWithStatus.status = response?.status; - throw errorWithStatus; - } - } - if (errorBody === undefined) { - try { - errorBody = await response.text(); - } catch (e) { - errorBody = ""; - } - } - const fullMessage = `Failed to ${context15}. Received status [${response.status}]: ${response.statusText}. Message: ${errorBody}`; - if (response.status === 409) { - throw new LangSmithConflictError(fullMessage); - } - const err = new Error(fullMessage); - err.status = response.status; - throw err; - } - var ERR_CONFLICTING_ENDPOINTS = "ERR_CONFLICTING_ENDPOINTS"; - - class ConflictingEndpointsError extends Error { - constructor() { - super("You cannot provide both LANGSMITH_ENDPOINT / LANGCHAIN_ENDPOINT " + "and LANGSMITH_RUNS_ENDPOINTS."); - Object.defineProperty(this, "code", { - enumerable: true, - configurable: true, - writable: true, - value: ERR_CONFLICTING_ENDPOINTS - }); - this.name = "ConflictingEndpointsError"; - } - } - exports.ConflictingEndpointsError = ConflictingEndpointsError; - function isConflictingEndpointsError(err) { - return typeof err === "object" && err !== null && err.code === ERR_CONFLICTING_ENDPOINTS; - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/fast-safe-stringify/index.cjs -var require_fast_safe_stringify = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.serialize = serialize2; - var env_js_1 = require_env2(); - var LIMIT_REPLACE_NODE = "[...]"; - var CIRCULAR_REPLACE_NODE = { result: "[Circular]" }; - var arr = []; - var replacerStack = []; - var encoder2 = new TextEncoder; - function defaultOptions() { - return { - depthLimit: Number.MAX_SAFE_INTEGER, - edgesLimit: Number.MAX_SAFE_INTEGER - }; - } - function encodeString(str) { - return encoder2.encode(str); - } - function serializeWellKnownTypes(val) { - if (val && typeof val === "object" && val !== null) { - if (val instanceof Map) { - return Object.fromEntries(val); - } else if (val instanceof Set) { - return Array.from(val); - } else if (val instanceof Date) { - return val.toISOString(); - } else if (val instanceof RegExp) { - return val.toString(); - } else if (val instanceof Error) { - return { - name: val.name, - message: val.message - }; - } - } else if (typeof val === "bigint") { - return val.toString(); - } - return val; - } - function createDefaultReplacer(userReplacer) { - return function(key, val) { - if (userReplacer) { - const userResult = userReplacer.call(this, key, val); - if (userResult !== undefined) { - return userResult; - } - } - return serializeWellKnownTypes(val); - }; - } - function serialize2(obj, errorContext, replacer, spacer2, options) { - try { - const str = JSON.stringify(obj, createDefaultReplacer(replacer), spacer2); - return encodeString(str); - } catch (e) { - if (!e.message?.includes("Converting circular structure to JSON")) { - console.warn(`[WARNING]: LangSmith received unserializable value.${errorContext ? ` -Context: ${errorContext}` : ""}`); - return encodeString("[Unserializable]"); - } - (0, env_js_1.getLangSmithEnvironmentVariable)("SUPPRESS_CIRCULAR_JSON_WARNINGS") !== "true" && console.warn(`[WARNING]: LangSmith received circular JSON. This will decrease tracer performance. ${errorContext ? ` -Context: ${errorContext}` : ""}`); - if (typeof options === "undefined") { - options = defaultOptions(); - } - decirc(obj, "", 0, [], undefined, 0, options); - let res; - try { - if (replacerStack.length === 0) { - res = JSON.stringify(obj, replacer, spacer2); - } else { - res = JSON.stringify(obj, replaceGetterValues(replacer), spacer2); - } - } catch (_) { - return encodeString("[unable to serialize, circular reference is too complex to analyze]"); - } finally { - while (arr.length !== 0) { - const part = arr.pop(); - if (part.length === 4) { - Object.defineProperty(part[0], part[1], part[3]); - } else { - part[0][part[1]] = part[2]; - } - } - } - return encodeString(res); - } - } - function setReplace(replace, val, k, parent) { - var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k); - if (propertyDescriptor.get !== undefined) { - if (propertyDescriptor.configurable) { - Object.defineProperty(parent, k, { value: replace }); - arr.push([parent, k, val, propertyDescriptor]); - } else { - replacerStack.push([val, k, replace]); - } - } else { - parent[k] = replace; - arr.push([parent, k, val]); - } - } - function decirc(val, k, edgeIndex, stack, parent, depth, options) { - depth += 1; - var i; - if (typeof val === "object" && val !== null) { - for (i = 0;i < stack.length; i++) { - if (stack[i] === val) { - setReplace(CIRCULAR_REPLACE_NODE, val, k, parent); - return; - } - } - if (typeof options.depthLimit !== "undefined" && depth > options.depthLimit) { - setReplace(LIMIT_REPLACE_NODE, val, k, parent); - return; - } - if (typeof options.edgesLimit !== "undefined" && edgeIndex + 1 > options.edgesLimit) { - setReplace(LIMIT_REPLACE_NODE, val, k, parent); - return; - } - stack.push(val); - if (Array.isArray(val)) { - for (i = 0;i < val.length; i++) { - decirc(val[i], i, i, stack, val, depth, options); - } - } else { - val = serializeWellKnownTypes(val); - var keys = Object.keys(val); - for (i = 0;i < keys.length; i++) { - var key = keys[i]; - decirc(val[key], key, i, stack, val, depth, options); - } - } - stack.pop(); - } - } - function replaceGetterValues(replacer) { - replacer = typeof replacer !== "undefined" ? replacer : function(k, v) { - return v; - }; - return function(key, val) { - if (replacerStack.length > 0) { - for (var i = 0;i < replacerStack.length; i++) { - var part = replacerStack[i]; - if (part[1] === key && part[0] === val) { - val = part[2]; - replacerStack.splice(i, 1); - break; - } - } - } - return replacer.call(this, key, val); - }; - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/client.cjs -var require_client2 = __commonJS((exports) => { - var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar2 = exports && exports.__importStar || function() { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function(o2) { - var ar = []; - for (var k in o2) - if (Object.prototype.hasOwnProperty.call(o2, k)) - ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function(mod2) { - if (mod2 && mod2.__esModule) - return mod2; - var result = {}; - if (mod2 != null) { - for (var k = ownKeys(mod2), i = 0;i < k.length; i++) - if (k[i] !== "default") - __createBinding2(result, mod2, k[i]); - } - __setModuleDefault(result, mod2); - return result; - }; - }(); - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Client = exports.AutoBatchQueue = exports.DEFAULT_MAX_SIZE_BYTES = exports.DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES = undefined; - exports.mergeRuntimeEnvIntoRun = mergeRuntimeEnvIntoRun; - var uuid5 = __importStar2(require_dist4()); - var translator_js_1 = require_translator(); - var otel_js_1 = require_otel(); - var async_caller_js_1 = require_async_caller(); - var messages_js_1 = require_messages(); - var env_js_1 = require_env2(); - var index_js_1 = require_dist5(); - var _uuid_js_1 = require__uuid(); - var warn_js_1 = require_warn(); - var prompts_js_1 = require_prompts(); - var error_js_1 = require_error3(); - var fetch_js_1 = require_fetch2(); - var index_js_2 = require_fast_safe_stringify(); - function mergeRuntimeEnvIntoRun(run, cachedEnvVars, omitTracedRuntimeInfo) { - if (omitTracedRuntimeInfo) { - return run; - } - const runtimeEnv = (0, env_js_1.getRuntimeEnvironment)(); - const envVars = cachedEnvVars ?? (0, env_js_1.getLangSmithEnvVarsMetadata)(); - const extra = run.extra ?? {}; - const metadata = extra.metadata; - run.extra = { - ...extra, - runtime: { - ...runtimeEnv, - ...extra?.runtime - }, - metadata: { - ...envVars, - ...envVars.revision_id || "revision_id" in run && run.revision_id ? { - revision_id: ("revision_id" in run ? run.revision_id : undefined) ?? envVars.revision_id - } : {}, - ...metadata - } - }; - return run; - } - var getTracingSamplingRate = (configRate) => { - const samplingRateStr = configRate?.toString() ?? (0, env_js_1.getLangSmithEnvironmentVariable)("TRACING_SAMPLING_RATE"); - if (samplingRateStr === undefined) { - return; - } - const samplingRate = parseFloat(samplingRateStr); - if (samplingRate < 0 || samplingRate > 1) { - throw new Error(`LANGSMITH_TRACING_SAMPLING_RATE must be between 0 and 1 if set. Got: ${samplingRate}`); - } - return samplingRate; - }; - var isLocalhost = (url2) => { - const strippedUrl = url2.replace("http://", "").replace("https://", ""); - const hostname3 = strippedUrl.split("/")[0].split(":")[0]; - return hostname3 === "localhost" || hostname3 === "127.0.0.1" || hostname3 === "::1"; - }; - async function toArray(iterable) { - const result = []; - for await (const item of iterable) { - result.push(item); - } - return result; - } - function trimQuotes(str) { - if (str === undefined) { - return; - } - return str.trim().replace(/^"(.*)"$/, "$1").replace(/^'(.*)'$/, "$1"); - } - var handle429 = async (response) => { - if (response?.status === 429) { - const retryAfter = parseInt(response.headers.get("retry-after") ?? "10", 10) * 1000; - if (retryAfter > 0) { - await new Promise((resolve2) => setTimeout(resolve2, retryAfter)); - return true; - } - } - return false; - }; - function _formatFeedbackScore(score) { - if (typeof score === "number") { - return Number(score.toFixed(4)); - } - return score; - } - exports.DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES = 24 * 1024 * 1024; - exports.DEFAULT_MAX_SIZE_BYTES = 1024 * 1024 * 1024; - var SERVER_INFO_REQUEST_TIMEOUT_MS = 1e4; - var DEFAULT_BATCH_SIZE_LIMIT = 100; - var DEFAULT_API_URL = "https://api.smith.langchain.com"; - - class AutoBatchQueue { - constructor(maxSizeBytes) { - Object.defineProperty(this, "items", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "sizeBytes", { - enumerable: true, - configurable: true, - writable: true, - value: 0 - }); - Object.defineProperty(this, "maxSizeBytes", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.maxSizeBytes = maxSizeBytes ?? exports.DEFAULT_MAX_SIZE_BYTES; - } - peek() { - return this.items[0]; - } - push(item) { - let itemPromiseResolve; - const itemPromise = new Promise((resolve2) => { - itemPromiseResolve = resolve2; - }); - const size = (0, index_js_2.serialize)(item.item, `Serializing run with id: ${item.item.id}`).length; - if (this.sizeBytes + size > this.maxSizeBytes && this.items.length > 0) { - console.warn(`AutoBatchQueue size limit (${this.maxSizeBytes} bytes) exceeded. Dropping run with id: ${item.item.id}. ` + `Current queue size: ${this.sizeBytes} bytes, attempted addition: ${size} bytes.`); - itemPromiseResolve(); - return itemPromise; - } - this.items.push({ - action: item.action, - payload: item.item, - otelContext: item.otelContext, - apiKey: item.apiKey, - apiUrl: item.apiUrl, - itemPromiseResolve, - itemPromise, - size - }); - this.sizeBytes += size; - return itemPromise; - } - pop({ upToSizeBytes, upToSize }) { - if (upToSizeBytes < 1) { - throw new Error("Number of bytes to pop off may not be less than 1."); - } - const popped = []; - let poppedSizeBytes = 0; - while (poppedSizeBytes + (this.peek()?.size ?? 0) < upToSizeBytes && this.items.length > 0 && popped.length < upToSize) { - const item = this.items.shift(); - if (item) { - popped.push(item); - poppedSizeBytes += item.size; - this.sizeBytes -= item.size; - } - } - if (popped.length === 0 && this.items.length > 0) { - const item = this.items.shift(); - popped.push(item); - poppedSizeBytes += item.size; - this.sizeBytes -= item.size; - } - return [ - popped.map((it) => ({ - action: it.action, - item: it.payload, - otelContext: it.otelContext, - apiKey: it.apiKey, - apiUrl: it.apiUrl, - size: it.size - })), - () => popped.forEach((it) => it.itemPromiseResolve()) - ]; - } - } - exports.AutoBatchQueue = AutoBatchQueue; - - class Client { - get _fetch() { - return this.fetchImplementation || (0, fetch_js_1._getFetchImplementation)(this.debug); - } - constructor(config2 = {}) { - Object.defineProperty(this, "apiKey", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "apiUrl", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "webUrl", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "workspaceId", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "caller", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "batchIngestCaller", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "timeout_ms", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "_tenantId", { - enumerable: true, - configurable: true, - writable: true, - value: null - }); - Object.defineProperty(this, "hideInputs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "hideOutputs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "omitTracedRuntimeInfo", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "tracingSampleRate", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "filteredPostUuids", { - enumerable: true, - configurable: true, - writable: true, - value: new Set - }); - Object.defineProperty(this, "autoBatchTracing", { - enumerable: true, - configurable: true, - writable: true, - value: true - }); - Object.defineProperty(this, "autoBatchQueue", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "autoBatchTimeout", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "autoBatchAggregationDelayMs", { - enumerable: true, - configurable: true, - writable: true, - value: 250 - }); - Object.defineProperty(this, "batchSizeBytesLimit", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "batchSizeLimit", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "fetchOptions", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "settings", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "blockOnRootRunFinalization", { - enumerable: true, - configurable: true, - writable: true, - value: (0, env_js_1.getEnvironmentVariable)("LANGSMITH_TRACING_BACKGROUND") === "false" - }); - Object.defineProperty(this, "traceBatchConcurrency", { - enumerable: true, - configurable: true, - writable: true, - value: 5 - }); - Object.defineProperty(this, "_serverInfo", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "_getServerInfoPromise", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "manualFlushMode", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "langSmithToOTELTranslator", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "fetchImplementation", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "cachedLSEnvVarsForMetadata", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "multipartStreamingDisabled", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - Object.defineProperty(this, "debug", { - enumerable: true, - configurable: true, - writable: true, - value: (0, env_js_1.getEnvironmentVariable)("LANGSMITH_DEBUG") === "true" - }); - const defaultConfig = Client.getDefaultClientConfig(); - this.tracingSampleRate = getTracingSamplingRate(config2.tracingSamplingRate); - this.apiUrl = trimQuotes(config2.apiUrl ?? defaultConfig.apiUrl) ?? ""; - if (this.apiUrl.endsWith("/")) { - this.apiUrl = this.apiUrl.slice(0, -1); - } - this.apiKey = trimQuotes(config2.apiKey ?? defaultConfig.apiKey); - this.webUrl = trimQuotes(config2.webUrl ?? defaultConfig.webUrl); - if (this.webUrl?.endsWith("/")) { - this.webUrl = this.webUrl.slice(0, -1); - } - this.workspaceId = trimQuotes(config2.workspaceId ?? (0, env_js_1.getLangSmithEnvironmentVariable)("WORKSPACE_ID")); - this.timeout_ms = config2.timeout_ms ?? 90000; - this.caller = new async_caller_js_1.AsyncCaller({ - ...config2.callerOptions ?? {}, - maxRetries: 4, - debug: config2.debug ?? this.debug - }); - this.traceBatchConcurrency = config2.traceBatchConcurrency ?? this.traceBatchConcurrency; - if (this.traceBatchConcurrency < 1) { - throw new Error("Trace batch concurrency must be positive."); - } - this.debug = config2.debug ?? this.debug; - this.fetchImplementation = config2.fetchImplementation; - const maxMemory = config2.maxIngestMemoryBytes ?? exports.DEFAULT_MAX_SIZE_BYTES; - this.batchIngestCaller = new async_caller_js_1.AsyncCaller({ - maxRetries: 4, - maxConcurrency: this.traceBatchConcurrency, - maxQueueSizeBytes: maxMemory, - ...config2.callerOptions ?? {}, - onFailedResponseHook: handle429, - debug: config2.debug ?? this.debug - }); - this.hideInputs = config2.hideInputs ?? config2.anonymizer ?? defaultConfig.hideInputs; - this.hideOutputs = config2.hideOutputs ?? config2.anonymizer ?? defaultConfig.hideOutputs; - this.omitTracedRuntimeInfo = config2.omitTracedRuntimeInfo ?? false; - this.autoBatchTracing = config2.autoBatchTracing ?? this.autoBatchTracing; - this.autoBatchQueue = new AutoBatchQueue(maxMemory); - this.blockOnRootRunFinalization = config2.blockOnRootRunFinalization ?? this.blockOnRootRunFinalization; - this.batchSizeBytesLimit = config2.batchSizeBytesLimit; - this.batchSizeLimit = config2.batchSizeLimit; - this.fetchOptions = config2.fetchOptions || {}; - this.manualFlushMode = config2.manualFlushMode ?? this.manualFlushMode; - if ((0, env_js_1.getOtelEnabled)()) { - this.langSmithToOTELTranslator = new translator_js_1.LangSmithToOTELTranslator; - } - this.cachedLSEnvVarsForMetadata = (0, env_js_1.getLangSmithEnvVarsMetadata)(); - } - static getDefaultClientConfig() { - const apiKey = (0, env_js_1.getLangSmithEnvironmentVariable)("API_KEY"); - const apiUrl = (0, env_js_1.getLangSmithEnvironmentVariable)("ENDPOINT") ?? DEFAULT_API_URL; - const hideInputs = (0, env_js_1.getLangSmithEnvironmentVariable)("HIDE_INPUTS") === "true"; - const hideOutputs = (0, env_js_1.getLangSmithEnvironmentVariable)("HIDE_OUTPUTS") === "true"; - return { - apiUrl, - apiKey, - webUrl: undefined, - hideInputs, - hideOutputs - }; - } - getHostUrl() { - if (this.webUrl) { - return this.webUrl; - } else if (isLocalhost(this.apiUrl)) { - this.webUrl = "http://localhost:3000"; - return this.webUrl; - } else if (this.apiUrl.endsWith("/api/v1")) { - this.webUrl = this.apiUrl.replace("/api/v1", ""); - return this.webUrl; - } else if (this.apiUrl.includes("/api") && !this.apiUrl.split(".", 1)[0].endsWith("api")) { - this.webUrl = this.apiUrl.replace("/api", ""); - return this.webUrl; - } else if (this.apiUrl.split(".", 1)[0].includes("dev")) { - this.webUrl = "https://dev.smith.langchain.com"; - return this.webUrl; - } else if (this.apiUrl.split(".", 1)[0].includes("eu")) { - this.webUrl = "https://eu.smith.langchain.com"; - return this.webUrl; - } else if (this.apiUrl.split(".", 1)[0].includes("beta")) { - this.webUrl = "https://beta.smith.langchain.com"; - return this.webUrl; - } else { - this.webUrl = "https://smith.langchain.com"; - return this.webUrl; - } - } - get headers() { - const headers = { - "User-Agent": `langsmith-js/${index_js_1.__version__}` - }; - if (this.apiKey) { - headers["x-api-key"] = `${this.apiKey}`; - } - if (this.workspaceId) { - headers["x-tenant-id"] = this.workspaceId; - } - return headers; - } - _getPlatformEndpointPath(path) { - const needsV1Prefix = this.apiUrl.slice(-3) !== "/v1" && this.apiUrl.slice(-4) !== "/v1/"; - return needsV1Prefix ? `/v1/platform/${path}` : `/platform/${path}`; - } - async processInputs(inputs) { - if (this.hideInputs === false) { - return inputs; - } - if (this.hideInputs === true) { - return {}; - } - if (typeof this.hideInputs === "function") { - return this.hideInputs(inputs); - } - return inputs; - } - async processOutputs(outputs) { - if (this.hideOutputs === false) { - return outputs; - } - if (this.hideOutputs === true) { - return {}; - } - if (typeof this.hideOutputs === "function") { - return this.hideOutputs(outputs); - } - return outputs; - } - async prepareRunCreateOrUpdateInputs(run) { - const runParams = { ...run }; - if (runParams.inputs !== undefined) { - runParams.inputs = await this.processInputs(runParams.inputs); - } - if (runParams.outputs !== undefined) { - runParams.outputs = await this.processOutputs(runParams.outputs); - } - return runParams; - } - async _getResponse(path, queryParams) { - const paramsString = queryParams?.toString() ?? ""; - const url2 = `${this.apiUrl}${path}?${paramsString}`; - const response = await this.caller.call(async () => { - const res = await this._fetch(url2, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, `fetch ${path}`); - return res; - }); - return response; - } - async _get(path, queryParams) { - const response = await this._getResponse(path, queryParams); - return response.json(); - } - async* _getPaginated(path, queryParams = new URLSearchParams, transform2) { - let offset = Number(queryParams.get("offset")) || 0; - const limit = Number(queryParams.get("limit")) || 100; - while (true) { - queryParams.set("offset", String(offset)); - queryParams.set("limit", String(limit)); - const url2 = `${this.apiUrl}${path}?${queryParams}`; - const response = await this.caller.call(async () => { - const res = await this._fetch(url2, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, `fetch ${path}`); - return res; - }); - const items = transform2 ? transform2(await response.json()) : await response.json(); - if (items.length === 0) { - break; - } - yield items; - if (items.length < limit) { - break; - } - offset += items.length; - } - } - async* _getCursorPaginatedList(path, body = null, requestMethod = "POST", dataKey = "runs") { - const bodyParams = body ? { ...body } : {}; - while (true) { - const body2 = JSON.stringify(bodyParams); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}${path}`, { - method: requestMethod, - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: body2 - }); - await (0, error_js_1.raiseForStatus)(res, `fetch ${path}`); - return res; - }); - const responseBody = await response.json(); - if (!responseBody) { - break; - } - if (!responseBody[dataKey]) { - break; - } - yield responseBody[dataKey]; - const cursors = responseBody.cursors; - if (!cursors) { - break; - } - if (!cursors.next) { - break; - } - bodyParams.cursor = cursors.next; - } - } - _shouldSample() { - if (this.tracingSampleRate === undefined) { - return true; - } - return Math.random() < this.tracingSampleRate; - } - _filterForSampling(runs, patch = false) { - if (this.tracingSampleRate === undefined) { - return runs; - } - if (patch) { - const sampled = []; - for (const run of runs) { - if (!this.filteredPostUuids.has(run.trace_id)) { - sampled.push(run); - } else if (run.id === run.trace_id) { - this.filteredPostUuids.delete(run.trace_id); - } - } - return sampled; - } else { - const sampled = []; - for (const run of runs) { - const traceId = run.trace_id ?? run.id; - if (this.filteredPostUuids.has(traceId)) { - continue; - } - if (run.id === traceId) { - if (this._shouldSample()) { - sampled.push(run); - } else { - this.filteredPostUuids.add(traceId); - } - } else { - sampled.push(run); - } - } - return sampled; - } - } - async _getBatchSizeLimitBytes() { - const serverInfo = await this._ensureServerInfo(); - return this.batchSizeBytesLimit ?? serverInfo.batch_ingest_config?.size_limit_bytes ?? exports.DEFAULT_UNCOMPRESSED_BATCH_SIZE_LIMIT_BYTES; - } - async _getBatchSizeLimit() { - const serverInfo = await this._ensureServerInfo(); - return this.batchSizeLimit ?? serverInfo.batch_ingest_config?.size_limit ?? DEFAULT_BATCH_SIZE_LIMIT; - } - async _getDatasetExamplesMultiPartSupport() { - const serverInfo = await this._ensureServerInfo(); - return serverInfo.instance_flags?.dataset_examples_multipart_enabled ?? false; - } - drainAutoBatchQueue({ batchSizeLimitBytes, batchSizeLimit }) { - const promises = []; - while (this.autoBatchQueue.items.length > 0) { - const [batch, done] = this.autoBatchQueue.pop({ - upToSizeBytes: batchSizeLimitBytes, - upToSize: batchSizeLimit - }); - if (!batch.length) { - done(); - break; - } - const batchesByDestination = batch.reduce((acc, item) => { - const apiUrl = item.apiUrl ?? this.apiUrl; - const apiKey = item.apiKey ?? this.apiKey; - const isDefault = item.apiKey === this.apiKey && item.apiUrl === this.apiUrl; - const batchKey = isDefault ? "default" : `${apiUrl}|${apiKey}`; - if (!acc[batchKey]) { - acc[batchKey] = []; - } - acc[batchKey].push(item); - return acc; - }, {}); - const batchPromises = []; - for (const [batchKey, batch2] of Object.entries(batchesByDestination)) { - const batchPromise = this._processBatch(batch2, { - apiUrl: batchKey === "default" ? undefined : batchKey.split("|")[0], - apiKey: batchKey === "default" ? undefined : batchKey.split("|")[1] - }); - batchPromises.push(batchPromise); - } - const allBatchesPromise = Promise.all(batchPromises).finally(done); - promises.push(allBatchesPromise); - } - return Promise.all(promises); - } - async _processBatch(batch, options) { - if (!batch.length) { - return; - } - const batchSizeBytes = batch.reduce((sum, item) => sum + (item.size ?? 0), 0); - try { - if (this.langSmithToOTELTranslator !== undefined) { - this._sendBatchToOTELTranslator(batch); - } else { - const ingestParams = { - runCreates: batch.filter((item) => item.action === "create").map((item) => item.item), - runUpdates: batch.filter((item) => item.action === "update").map((item) => item.item) - }; - const serverInfo = await this._ensureServerInfo(); - if (serverInfo?.batch_ingest_config?.use_multipart_endpoint) { - const useGzip = serverInfo?.instance_flags?.gzip_body_enabled; - await this.multipartIngestRuns(ingestParams, { - ...options, - useGzip, - sizeBytes: batchSizeBytes - }); - } else { - await this.batchIngestRuns(ingestParams, { - ...options, - sizeBytes: batchSizeBytes - }); - } - } - } catch (e) { - console.error("Error exporting batch:", e); - } - } - _sendBatchToOTELTranslator(batch) { - if (this.langSmithToOTELTranslator !== undefined) { - const otelContextMap = new Map; - const operations = []; - for (const item of batch) { - if (item.item.id && item.otelContext) { - otelContextMap.set(item.item.id, item.otelContext); - if (item.action === "create") { - operations.push({ - operation: "post", - id: item.item.id, - trace_id: item.item.trace_id ?? item.item.id, - run: item.item - }); - } else { - operations.push({ - operation: "patch", - id: item.item.id, - trace_id: item.item.trace_id ?? item.item.id, - run: item.item - }); - } - } - } - this.langSmithToOTELTranslator.exportBatch(operations, otelContextMap); - } - } - async processRunOperation(item) { - clearTimeout(this.autoBatchTimeout); - this.autoBatchTimeout = undefined; - item.item = mergeRuntimeEnvIntoRun(item.item, this.cachedLSEnvVarsForMetadata, this.omitTracedRuntimeInfo); - const itemPromise = this.autoBatchQueue.push(item); - if (this.manualFlushMode) { - return itemPromise; - } - const sizeLimitBytes = await this._getBatchSizeLimitBytes(); - const sizeLimit = await this._getBatchSizeLimit(); - if (this.autoBatchQueue.sizeBytes > sizeLimitBytes || this.autoBatchQueue.items.length > sizeLimit) { - this.drainAutoBatchQueue({ - batchSizeLimitBytes: sizeLimitBytes, - batchSizeLimit: sizeLimit - }); - } - if (this.autoBatchQueue.items.length > 0) { - this.autoBatchTimeout = setTimeout(() => { - this.autoBatchTimeout = undefined; - this.drainAutoBatchQueue({ - batchSizeLimitBytes: sizeLimitBytes, - batchSizeLimit: sizeLimit - }); - }, this.autoBatchAggregationDelayMs); - } - return itemPromise; - } - async _getServerInfo() { - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/info`, { - method: "GET", - headers: { Accept: "application/json" }, - signal: AbortSignal.timeout(SERVER_INFO_REQUEST_TIMEOUT_MS), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "get server info"); - return res; - }); - const json3 = await response.json(); - if (this.debug) { - console.log(` -=== LangSmith Server Configuration === -` + JSON.stringify(json3, null, 2) + ` -`); - } - return json3; - } - async _ensureServerInfo() { - if (this._getServerInfoPromise === undefined) { - this._getServerInfoPromise = (async () => { - if (this._serverInfo === undefined) { - try { - this._serverInfo = await this._getServerInfo(); - } catch (e) { - console.warn(`[LANGSMITH]: Failed to fetch info on supported operations. Falling back to batch operations and default limits. Info: ${e.status ?? "Unspecified status code"} ${e.message}`); - } - } - return this._serverInfo ?? {}; - })(); - } - return this._getServerInfoPromise.then((serverInfo) => { - if (this._serverInfo === undefined) { - this._getServerInfoPromise = undefined; - } - return serverInfo; - }); - } - async _getSettings() { - if (!this.settings) { - this.settings = this._get("/settings"); - } - return await this.settings; - } - async flush() { - const sizeLimitBytes = await this._getBatchSizeLimitBytes(); - const sizeLimit = await this._getBatchSizeLimit(); - await this.drainAutoBatchQueue({ - batchSizeLimitBytes: sizeLimitBytes, - batchSizeLimit: sizeLimit - }); - } - _cloneCurrentOTELContext() { - const otel_trace = (0, otel_js_1.getOTELTrace)(); - const otel_context = (0, otel_js_1.getOTELContext)(); - if (this.langSmithToOTELTranslator !== undefined) { - const currentSpan = otel_trace.getActiveSpan(); - if (currentSpan) { - return otel_trace.setSpan(otel_context.active(), currentSpan); - } - } - return; - } - async createRun(run, options) { - if (!this._filterForSampling([run]).length) { - return; - } - const headers = { - ...this.headers, - "Content-Type": "application/json" - }; - const session_name = run.project_name; - delete run.project_name; - const runCreate = await this.prepareRunCreateOrUpdateInputs({ - session_name, - ...run, - start_time: run.start_time ?? Date.now() - }); - if (this.autoBatchTracing && runCreate.trace_id !== undefined && runCreate.dotted_order !== undefined) { - const otelContext = this._cloneCurrentOTELContext(); - this.processRunOperation({ - action: "create", - item: runCreate, - otelContext, - apiKey: options?.apiKey, - apiUrl: options?.apiUrl - }).catch(console.error); - return; - } - const mergedRunCreateParam = mergeRuntimeEnvIntoRun(runCreate, this.cachedLSEnvVarsForMetadata, this.omitTracedRuntimeInfo); - if (options?.apiKey !== undefined) { - headers["x-api-key"] = options.apiKey; - } - if (options?.workspaceId !== undefined) { - headers["x-tenant-id"] = options.workspaceId; - } - const body = (0, index_js_2.serialize)(mergedRunCreateParam, `Creating run with id: ${mergedRunCreateParam.id}`); - await this.caller.call(async () => { - const res = await this._fetch(`${options?.apiUrl ?? this.apiUrl}/runs`, { - method: "POST", - headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "create run", true); - return res; - }); - } - async batchIngestRuns({ runCreates, runUpdates }, options) { - if (runCreates === undefined && runUpdates === undefined) { - return; - } - let preparedCreateParams = await Promise.all(runCreates?.map((create4) => this.prepareRunCreateOrUpdateInputs(create4)) ?? []); - let preparedUpdateParams = await Promise.all(runUpdates?.map((update) => this.prepareRunCreateOrUpdateInputs(update)) ?? []); - if (preparedCreateParams.length > 0 && preparedUpdateParams.length > 0) { - const createById = preparedCreateParams.reduce((params, run) => { - if (!run.id) { - return params; - } - params[run.id] = run; - return params; - }, {}); - const standaloneUpdates = []; - for (const updateParam of preparedUpdateParams) { - if (updateParam.id !== undefined && createById[updateParam.id]) { - createById[updateParam.id] = { - ...createById[updateParam.id], - ...updateParam - }; - } else { - standaloneUpdates.push(updateParam); - } - } - preparedCreateParams = Object.values(createById); - preparedUpdateParams = standaloneUpdates; - } - const rawBatch = { - post: preparedCreateParams, - patch: preparedUpdateParams - }; - if (!rawBatch.post.length && !rawBatch.patch.length) { - return; - } - const batchChunks = { - post: [], - patch: [] - }; - for (const k of ["post", "patch"]) { - const key = k; - const batchItems = rawBatch[key].reverse(); - let batchItem = batchItems.pop(); - while (batchItem !== undefined) { - batchChunks[key].push(batchItem); - batchItem = batchItems.pop(); - } - } - if (batchChunks.post.length > 0 || batchChunks.patch.length > 0) { - const runIds = batchChunks.post.map((item) => item.id).concat(batchChunks.patch.map((item) => item.id)).join(","); - await this._postBatchIngestRuns((0, index_js_2.serialize)(batchChunks, `Ingesting runs with ids: ${runIds}`), options); - } - } - async _postBatchIngestRuns(body, options) { - const headers = { - ...this.headers, - "Content-Type": "application/json", - Accept: "application/json" - }; - if (options?.apiKey !== undefined) { - headers["x-api-key"] = options.apiKey; - } - await this.batchIngestCaller.callWithOptions({ sizeBytes: options?.sizeBytes }, async () => { - const res = await this._fetch(`${options?.apiUrl ?? this.apiUrl}/runs/batch`, { - method: "POST", - headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "batch create run", true); - return res; - }); - } - async multipartIngestRuns({ runCreates, runUpdates }, options) { - if (runCreates === undefined && runUpdates === undefined) { - return; - } - const allAttachments = {}; - let preparedCreateParams = []; - for (const create4 of runCreates ?? []) { - const preparedCreate = await this.prepareRunCreateOrUpdateInputs(create4); - if (preparedCreate.id !== undefined && preparedCreate.attachments !== undefined) { - allAttachments[preparedCreate.id] = preparedCreate.attachments; - } - delete preparedCreate.attachments; - preparedCreateParams.push(preparedCreate); - } - let preparedUpdateParams = []; - for (const update of runUpdates ?? []) { - preparedUpdateParams.push(await this.prepareRunCreateOrUpdateInputs(update)); - } - const invalidRunCreate = preparedCreateParams.find((runCreate) => { - return runCreate.trace_id === undefined || runCreate.dotted_order === undefined; - }); - if (invalidRunCreate !== undefined) { - throw new Error(`Multipart ingest requires "trace_id" and "dotted_order" to be set when creating a run`); - } - const invalidRunUpdate = preparedUpdateParams.find((runUpdate) => { - return runUpdate.trace_id === undefined || runUpdate.dotted_order === undefined; - }); - if (invalidRunUpdate !== undefined) { - throw new Error(`Multipart ingest requires "trace_id" and "dotted_order" to be set when updating a run`); - } - if (preparedCreateParams.length > 0 && preparedUpdateParams.length > 0) { - const createById = preparedCreateParams.reduce((params, run) => { - if (!run.id) { - return params; - } - params[run.id] = run; - return params; - }, {}); - const standaloneUpdates = []; - for (const updateParam of preparedUpdateParams) { - if (updateParam.id !== undefined && createById[updateParam.id]) { - createById[updateParam.id] = { - ...createById[updateParam.id], - ...updateParam - }; - } else { - standaloneUpdates.push(updateParam); - } - } - preparedCreateParams = Object.values(createById); - preparedUpdateParams = standaloneUpdates; - } - if (preparedCreateParams.length === 0 && preparedUpdateParams.length === 0) { - return; - } - const accumulatedContext = []; - const accumulatedParts = []; - for (const [method, payloads] of [ - ["post", preparedCreateParams], - ["patch", preparedUpdateParams] - ]) { - for (const originalPayload of payloads) { - const { inputs, outputs, events, extra, error: error48, serialized, attachments, ...payload } = originalPayload; - const fields = { inputs, outputs, events, extra, error: error48, serialized }; - const stringifiedPayload = (0, index_js_2.serialize)(payload, `Serializing for multipart ingestion of run with id: ${payload.id}`); - accumulatedParts.push({ - name: `${method}.${payload.id}`, - payload: new Blob([stringifiedPayload], { - type: `application/json; length=${stringifiedPayload.length}` - }) - }); - for (const [key, value] of Object.entries(fields)) { - if (value === undefined) { - continue; - } - const stringifiedValue = (0, index_js_2.serialize)(value, `Serializing ${key} for multipart ingestion of run with id: ${payload.id}`); - accumulatedParts.push({ - name: `${method}.${payload.id}.${key}`, - payload: new Blob([stringifiedValue], { - type: `application/json; length=${stringifiedValue.length}` - }) - }); - } - if (payload.id !== undefined) { - const attachments2 = allAttachments[payload.id]; - if (attachments2) { - delete allAttachments[payload.id]; - for (const [name, attachment] of Object.entries(attachments2)) { - let contentType; - let content; - if (Array.isArray(attachment)) { - [contentType, content] = attachment; - } else { - contentType = attachment.mimeType; - content = attachment.data; - } - if (name.includes(".")) { - console.warn(`Skipping attachment '${name}' for run ${payload.id}: Invalid attachment name. ` + `Attachment names must not contain periods ('.'). Please rename the attachment and try again.`); - continue; - } - accumulatedParts.push({ - name: `attachment.${payload.id}.${name}`, - payload: new Blob([content], { - type: `${contentType}; length=${content.byteLength}` - }) - }); - } - } - } - accumulatedContext.push(`trace=${payload.trace_id},id=${payload.id}`); - } - } - await this._sendMultipartRequest(accumulatedParts, accumulatedContext.join("; "), options); - } - async _createNodeFetchBody(parts, boundary) { - const chunks = []; - for (const part of parts) { - chunks.push(new Blob([`--${boundary}\r -`])); - chunks.push(new Blob([ - `Content-Disposition: form-data; name="${part.name}"\r -`, - `Content-Type: ${part.payload.type}\r -\r -` - ])); - chunks.push(part.payload); - chunks.push(new Blob([`\r -`])); - } - chunks.push(new Blob([`--${boundary}--\r -`])); - const body = new Blob(chunks); - const arrayBuffer = await body.arrayBuffer(); - return arrayBuffer; - } - async _createMultipartStream(parts, boundary) { - const encoder2 = new TextEncoder; - const stream3 = new ReadableStream({ - async start(controller) { - const writeChunk = async (chunk) => { - if (typeof chunk === "string") { - controller.enqueue(encoder2.encode(chunk)); - } else { - controller.enqueue(chunk); - } - }; - for (const part of parts) { - await writeChunk(`--${boundary}\r -`); - await writeChunk(`Content-Disposition: form-data; name="${part.name}"\r -`); - await writeChunk(`Content-Type: ${part.payload.type}\r -\r -`); - const payloadStream = part.payload.stream(); - const reader = payloadStream.getReader(); - try { - let result; - while (!(result = await reader.read()).done) { - controller.enqueue(result.value); - } - } finally { - reader.releaseLock(); - } - await writeChunk(`\r -`); - } - await writeChunk(`--${boundary}--\r -`); - controller.close(); - } - }); - return stream3; - } - async _sendMultipartRequest(parts, context15, options) { - const boundary = "----LangSmithFormBoundary" + Math.random().toString(36).slice(2); - const isNodeFetch = (0, fetch_js_1._globalFetchImplementationIsNodeFetch)(); - const buildBuffered = () => this._createNodeFetchBody(parts, boundary); - const buildStream = () => this._createMultipartStream(parts, boundary); - const sendWithRetry = async (bodyFactory) => { - return this.batchIngestCaller.callWithOptions({ sizeBytes: options?.sizeBytes }, async () => { - const body = await bodyFactory(); - const headers = { - ...this.headers, - "Content-Type": `multipart/form-data; boundary=${boundary}` - }; - if (options?.apiKey !== undefined) { - headers["x-api-key"] = options.apiKey; - } - let transformedBody = body; - if (options?.useGzip && typeof body === "object" && "pipeThrough" in body) { - transformedBody = body.pipeThrough(new CompressionStream("gzip")); - headers["Content-Encoding"] = "gzip"; - } - const response = await this._fetch(`${options?.apiUrl ?? this.apiUrl}/runs/multipart`, { - method: "POST", - headers, - body: transformedBody, - duplex: "half", - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(response, `Failed to send multipart request`, true); - return response; - }); - }; - try { - let res; - let streamedAttempt = false; - if (!isNodeFetch && !this.multipartStreamingDisabled && (0, env_js_1.getEnv)() !== "bun") { - streamedAttempt = true; - res = await sendWithRetry(buildStream); - } else { - res = await sendWithRetry(buildBuffered); - } - if ((!this.multipartStreamingDisabled || streamedAttempt) && res.status === 422 && (options?.apiUrl ?? this.apiUrl) !== DEFAULT_API_URL) { - console.warn(`Streaming multipart upload to ${options?.apiUrl ?? this.apiUrl}/runs/multipart failed. ` + `This usually means the host does not support chunked uploads. ` + `Retrying with a buffered upload for operation "${context15}".`); - this.multipartStreamingDisabled = true; - res = await sendWithRetry(buildBuffered); - } - } catch (e) { - console.warn(`${e.message.trim()} - -Context: ${context15}`); - } - } - async updateRun(runId, run, options) { - (0, _uuid_js_1.assertUuid)(runId); - if (run.inputs) { - run.inputs = await this.processInputs(run.inputs); - } - if (run.outputs) { - run.outputs = await this.processOutputs(run.outputs); - } - const data = { ...run, id: runId }; - if (!this._filterForSampling([data], true).length) { - return; - } - if (this.autoBatchTracing && data.trace_id !== undefined && data.dotted_order !== undefined) { - const otelContext = this._cloneCurrentOTELContext(); - if (run.end_time !== undefined && data.parent_run_id === undefined && this.blockOnRootRunFinalization && !this.manualFlushMode) { - await this.processRunOperation({ - action: "update", - item: data, - otelContext, - apiKey: options?.apiKey, - apiUrl: options?.apiUrl - }).catch(console.error); - return; - } else { - this.processRunOperation({ - action: "update", - item: data, - otelContext, - apiKey: options?.apiKey, - apiUrl: options?.apiUrl - }).catch(console.error); - } - return; - } - const headers = { - ...this.headers, - "Content-Type": "application/json" - }; - if (options?.apiKey !== undefined) { - headers["x-api-key"] = options.apiKey; - } - if (options?.workspaceId !== undefined) { - headers["x-tenant-id"] = options.workspaceId; - } - const body = (0, index_js_2.serialize)(run, `Serializing payload to update run with id: ${runId}`); - await this.caller.call(async () => { - const res = await this._fetch(`${options?.apiUrl ?? this.apiUrl}/runs/${runId}`, { - method: "PATCH", - headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update run", true); - return res; - }); - } - async readRun(runId, { loadChildRuns } = { loadChildRuns: false }) { - (0, _uuid_js_1.assertUuid)(runId); - let run = await this._get(`/runs/${runId}`); - if (loadChildRuns) { - run = await this._loadChildRuns(run); - } - return run; - } - async getRunUrl({ runId, run, projectOpts }) { - if (run !== undefined) { - let sessionId; - if (run.session_id) { - sessionId = run.session_id; - } else if (projectOpts?.projectName) { - sessionId = (await this.readProject({ projectName: projectOpts?.projectName })).id; - } else if (projectOpts?.projectId) { - sessionId = projectOpts?.projectId; - } else { - const project2 = await this.readProject({ - projectName: (0, env_js_1.getLangSmithEnvironmentVariable)("PROJECT") || "default" - }); - sessionId = project2.id; - } - const tenantId = await this._getTenantId(); - return `${this.getHostUrl()}/o/${tenantId}/projects/p/${sessionId}/r/${run.id}?poll=true`; - } else if (runId !== undefined) { - const run_ = await this.readRun(runId); - if (!run_.app_path) { - throw new Error(`Run ${runId} has no app_path`); - } - const baseUrl = this.getHostUrl(); - return `${baseUrl}${run_.app_path}`; - } else { - throw new Error("Must provide either runId or run"); - } - } - async _loadChildRuns(run) { - const childRuns = await toArray(this.listRuns({ - isRoot: false, - projectId: run.session_id, - traceId: run.trace_id - })); - const treemap = {}; - const runs = {}; - childRuns.sort((a, b) => (a?.dotted_order ?? "").localeCompare(b?.dotted_order ?? "")); - for (const childRun of childRuns) { - if (childRun.parent_run_id === null || childRun.parent_run_id === undefined) { - throw new Error(`Child run ${childRun.id} has no parent`); - } - if (childRun.dotted_order?.startsWith(run.dotted_order ?? "") && childRun.id !== run.id) { - if (!(childRun.parent_run_id in treemap)) { - treemap[childRun.parent_run_id] = []; - } - treemap[childRun.parent_run_id].push(childRun); - runs[childRun.id] = childRun; - } - } - run.child_runs = treemap[run.id] || []; - for (const runId in treemap) { - if (runId !== run.id) { - runs[runId].child_runs = treemap[runId]; - } - } - return run; - } - async* listRuns(props) { - const { projectId, projectName, parentRunId, traceId, referenceExampleId, startTime, executionOrder, isRoot, runType, error: error48, id, query, filter, traceFilter, treeFilter, limit, select, order } = props; - let projectIds = []; - if (projectId) { - projectIds = Array.isArray(projectId) ? projectId : [projectId]; - } - if (projectName) { - const projectNames = Array.isArray(projectName) ? projectName : [projectName]; - const projectIds_ = await Promise.all(projectNames.map((name) => this.readProject({ projectName: name }).then((project2) => project2.id))); - projectIds.push(...projectIds_); - } - const default_select = [ - "app_path", - "completion_cost", - "completion_tokens", - "dotted_order", - "end_time", - "error", - "events", - "extra", - "feedback_stats", - "first_token_time", - "id", - "inputs", - "name", - "outputs", - "parent_run_id", - "parent_run_ids", - "prompt_cost", - "prompt_tokens", - "reference_example_id", - "run_type", - "session_id", - "start_time", - "status", - "tags", - "total_cost", - "total_tokens", - "trace_id" - ]; - const body = { - session: projectIds.length ? projectIds : null, - run_type: runType, - reference_example: referenceExampleId, - query, - filter, - trace_filter: traceFilter, - tree_filter: treeFilter, - execution_order: executionOrder, - parent_run: parentRunId, - start_time: startTime ? startTime.toISOString() : null, - error: error48, - id, - limit, - trace: traceId, - select: select ? select : default_select, - is_root: isRoot, - order - }; - if (body.select.includes("child_run_ids")) { - (0, warn_js_1.warnOnce)("Deprecated: 'child_run_ids' in the listRuns select parameter is deprecated and will be removed in a future version."); - } - let runsYielded = 0; - for await (const runs of this._getCursorPaginatedList("/runs/query", body)) { - if (limit) { - if (runsYielded >= limit) { - break; - } - if (runs.length + runsYielded > limit) { - const newRuns = runs.slice(0, limit - runsYielded); - yield* newRuns; - break; - } - runsYielded += runs.length; - yield* runs; - } else { - yield* runs; - } - } - } - async* listGroupRuns(props) { - const { projectId, projectName, groupBy, filter, startTime, endTime, limit, offset } = props; - const sessionId = projectId || (await this.readProject({ projectName })).id; - const baseBody = { - session_id: sessionId, - group_by: groupBy, - filter, - start_time: startTime ? startTime.toISOString() : null, - end_time: endTime ? endTime.toISOString() : null, - limit: Number(limit) || 100 - }; - let currentOffset = Number(offset) || 0; - const path = "/runs/group"; - const url2 = `${this.apiUrl}${path}`; - while (true) { - const currentBody = { - ...baseBody, - offset: currentOffset - }; - const filteredPayload = Object.fromEntries(Object.entries(currentBody).filter(([_, value]) => value !== undefined)); - const body = JSON.stringify(filteredPayload); - const response = await this.caller.call(async () => { - const res = await this._fetch(url2, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, `Failed to fetch ${path}`); - return res; - }); - const items = await response.json(); - const { groups, total } = items; - if (groups.length === 0) { - break; - } - for (const thread3 of groups) { - yield thread3; - } - currentOffset += groups.length; - if (currentOffset >= total) { - break; - } - } - } - async getRunStats({ id, trace: trace13, parentRun, runType, projectNames, projectIds, referenceExampleIds, startTime, endTime, error: error48, query, filter, traceFilter, treeFilter, isRoot, dataSourceType }) { - let projectIds_ = projectIds || []; - if (projectNames) { - projectIds_ = [ - ...projectIds || [], - ...await Promise.all(projectNames.map((name) => this.readProject({ projectName: name }).then((project2) => project2.id))) - ]; - } - const payload = { - id, - trace: trace13, - parent_run: parentRun, - run_type: runType, - session: projectIds_, - reference_example: referenceExampleIds, - start_time: startTime, - end_time: endTime, - error: error48, - query, - filter, - trace_filter: traceFilter, - tree_filter: treeFilter, - is_root: isRoot, - data_source_type: dataSourceType - }; - const filteredPayload = Object.fromEntries(Object.entries(payload).filter(([_, value]) => value !== undefined)); - const body = JSON.stringify(filteredPayload); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/runs/stats`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "get run stats"); - return res; - }); - const result = await response.json(); - return result; - } - async shareRun(runId, { shareId } = {}) { - const data = { - run_id: runId, - share_token: shareId || uuid5.v4() - }; - (0, _uuid_js_1.assertUuid)(runId); - const body = JSON.stringify(data); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/runs/${runId}/share`, { - method: "PUT", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "share run"); - return res; - }); - const result = await response.json(); - if (result === null || !("share_token" in result)) { - throw new Error("Invalid response from server"); - } - return `${this.getHostUrl()}/public/${result["share_token"]}/r`; - } - async unshareRun(runId) { - (0, _uuid_js_1.assertUuid)(runId); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/runs/${runId}/share`, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "unshare run", true); - return res; - }); - } - async readRunSharedLink(runId) { - (0, _uuid_js_1.assertUuid)(runId); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/runs/${runId}/share`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "read run shared link"); - return res; - }); - const result = await response.json(); - if (result === null || !("share_token" in result)) { - return; - } - return `${this.getHostUrl()}/public/${result["share_token"]}/r`; - } - async listSharedRuns(shareToken, { runIds } = {}) { - const queryParams = new URLSearchParams({ - share_token: shareToken - }); - if (runIds !== undefined) { - for (const runId of runIds) { - queryParams.append("id", runId); - } - } - (0, _uuid_js_1.assertUuid)(shareToken); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/public/${shareToken}/runs${queryParams}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "list shared runs"); - return res; - }); - const runs = await response.json(); - return runs; - } - async readDatasetSharedSchema(datasetId, datasetName) { - if (!datasetId && !datasetName) { - throw new Error("Either datasetId or datasetName must be given"); - } - if (!datasetId) { - const dataset = await this.readDataset({ datasetName }); - datasetId = dataset.id; - } - (0, _uuid_js_1.assertUuid)(datasetId); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${datasetId}/share`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "read dataset shared schema"); - return res; - }); - const shareSchema = await response.json(); - shareSchema.url = `${this.getHostUrl()}/public/${shareSchema.share_token}/d`; - return shareSchema; - } - async shareDataset(datasetId, datasetName) { - if (!datasetId && !datasetName) { - throw new Error("Either datasetId or datasetName must be given"); - } - if (!datasetId) { - const dataset = await this.readDataset({ datasetName }); - datasetId = dataset.id; - } - const data = { - dataset_id: datasetId - }; - (0, _uuid_js_1.assertUuid)(datasetId); - const body = JSON.stringify(data); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${datasetId}/share`, { - method: "PUT", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "share dataset"); - return res; - }); - const shareSchema = await response.json(); - shareSchema.url = `${this.getHostUrl()}/public/${shareSchema.share_token}/d`; - return shareSchema; - } - async unshareDataset(datasetId) { - (0, _uuid_js_1.assertUuid)(datasetId); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${datasetId}/share`, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "unshare dataset", true); - return res; - }); - } - async readSharedDataset(shareToken) { - (0, _uuid_js_1.assertUuid)(shareToken); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/public/${shareToken}/datasets`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "read shared dataset"); - return res; - }); - const dataset = await response.json(); - return dataset; - } - async listSharedExamples(shareToken, options) { - const params = {}; - if (options?.exampleIds) { - params.id = options.exampleIds; - } - const urlParams = new URLSearchParams; - Object.entries(params).forEach(([key, value]) => { - if (Array.isArray(value)) { - value.forEach((v) => urlParams.append(key, v)); - } else { - urlParams.append(key, value); - } - }); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/public/${shareToken}/examples?${urlParams.toString()}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "list shared examples"); - return res; - }); - const result = await response.json(); - if (!response.ok) { - if ("detail" in result) { - throw new Error(`Failed to list shared examples. -Status: ${response.status} -Message: ${Array.isArray(result.detail) ? result.detail.join(` -`) : "Unspecified error"}`); - } - throw new Error(`Failed to list shared examples: ${response.status} ${response.statusText}`); - } - return result.map((example) => ({ - ...example, - _hostUrl: this.getHostUrl() - })); - } - async createProject({ projectName, description = null, metadata = null, upsert = false, projectExtra = null, referenceDatasetId = null }) { - const upsert_ = upsert ? `?upsert=true` : ""; - const endpoint = `${this.apiUrl}/sessions${upsert_}`; - const extra = projectExtra || {}; - if (metadata) { - extra["metadata"] = metadata; - } - const body = { - name: projectName, - extra, - description - }; - if (referenceDatasetId !== null) { - body["reference_dataset_id"] = referenceDatasetId; - } - const serializedBody = JSON.stringify(body); - const response = await this.caller.call(async () => { - const res = await this._fetch(endpoint, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: serializedBody - }); - await (0, error_js_1.raiseForStatus)(res, "create project"); - return res; - }); - const result = await response.json(); - return result; - } - async updateProject(projectId, { name = null, description = null, metadata = null, projectExtra = null, endTime = null }) { - const endpoint = `${this.apiUrl}/sessions/${projectId}`; - let extra = projectExtra; - if (metadata) { - extra = { ...extra || {}, metadata }; - } - const body = JSON.stringify({ - name, - extra, - description, - end_time: endTime ? new Date(endTime).toISOString() : null - }); - const response = await this.caller.call(async () => { - const res = await this._fetch(endpoint, { - method: "PATCH", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update project"); - return res; - }); - const result = await response.json(); - return result; - } - async hasProject({ projectId, projectName }) { - let path = "/sessions"; - const params = new URLSearchParams; - if (projectId !== undefined && projectName !== undefined) { - throw new Error("Must provide either projectName or projectId, not both"); - } else if (projectId !== undefined) { - (0, _uuid_js_1.assertUuid)(projectId); - path += `/${projectId}`; - } else if (projectName !== undefined) { - params.append("name", projectName); - } else { - throw new Error("Must provide projectName or projectId"); - } - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}${path}?${params}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "has project"); - return res; - }); - try { - const result = await response.json(); - if (!response.ok) { - return false; - } - if (Array.isArray(result)) { - return result.length > 0; - } - return true; - } catch (e) { - return false; - } - } - async readProject({ projectId, projectName, includeStats }) { - let path = "/sessions"; - const params = new URLSearchParams; - if (projectId !== undefined && projectName !== undefined) { - throw new Error("Must provide either projectName or projectId, not both"); - } else if (projectId !== undefined) { - (0, _uuid_js_1.assertUuid)(projectId); - path += `/${projectId}`; - } else if (projectName !== undefined) { - params.append("name", projectName); - } else { - throw new Error("Must provide projectName or projectId"); - } - if (includeStats !== undefined) { - params.append("include_stats", includeStats.toString()); - } - const response = await this._get(path, params); - let result; - if (Array.isArray(response)) { - if (response.length === 0) { - throw new Error(`Project[id=${projectId}, name=${projectName}] not found`); - } - result = response[0]; - } else { - result = response; - } - return result; - } - async getProjectUrl({ projectId, projectName }) { - if (projectId === undefined && projectName === undefined) { - throw new Error("Must provide either projectName or projectId"); - } - const project2 = await this.readProject({ projectId, projectName }); - const tenantId = await this._getTenantId(); - return `${this.getHostUrl()}/o/${tenantId}/projects/p/${project2.id}`; - } - async getDatasetUrl({ datasetId, datasetName }) { - if (datasetId === undefined && datasetName === undefined) { - throw new Error("Must provide either datasetName or datasetId"); - } - const dataset = await this.readDataset({ datasetId, datasetName }); - const tenantId = await this._getTenantId(); - return `${this.getHostUrl()}/o/${tenantId}/datasets/${dataset.id}`; - } - async _getTenantId() { - if (this._tenantId !== null) { - return this._tenantId; - } - const queryParams = new URLSearchParams({ limit: "1" }); - for await (const projects of this._getPaginated("/sessions", queryParams)) { - this._tenantId = projects[0].tenant_id; - return projects[0].tenant_id; - } - throw new Error("No projects found to resolve tenant."); - } - async* listProjects({ projectIds, name, nameContains, referenceDatasetId, referenceDatasetName, includeStats, datasetVersion, referenceFree, metadata } = {}) { - const params = new URLSearchParams; - if (projectIds !== undefined) { - for (const projectId of projectIds) { - params.append("id", projectId); - } - } - if (name !== undefined) { - params.append("name", name); - } - if (nameContains !== undefined) { - params.append("name_contains", nameContains); - } - if (referenceDatasetId !== undefined) { - params.append("reference_dataset", referenceDatasetId); - } else if (referenceDatasetName !== undefined) { - const dataset = await this.readDataset({ - datasetName: referenceDatasetName - }); - params.append("reference_dataset", dataset.id); - } - if (includeStats !== undefined) { - params.append("include_stats", includeStats.toString()); - } - if (datasetVersion !== undefined) { - params.append("dataset_version", datasetVersion); - } - if (referenceFree !== undefined) { - params.append("reference_free", referenceFree.toString()); - } - if (metadata !== undefined) { - params.append("metadata", JSON.stringify(metadata)); - } - for await (const projects of this._getPaginated("/sessions", params)) { - yield* projects; - } - } - async deleteProject({ projectId, projectName }) { - let projectId_; - if (projectId === undefined && projectName === undefined) { - throw new Error("Must provide projectName or projectId"); - } else if (projectId !== undefined && projectName !== undefined) { - throw new Error("Must provide either projectName or projectId, not both"); - } else if (projectId === undefined) { - projectId_ = (await this.readProject({ projectName })).id; - } else { - projectId_ = projectId; - } - (0, _uuid_js_1.assertUuid)(projectId_); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/sessions/${projectId_}`, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, `delete session ${projectId_} (${projectName})`, true); - return res; - }); - } - async uploadCsv({ csvFile, fileName, inputKeys, outputKeys, description, dataType, name }) { - const url2 = `${this.apiUrl}/datasets/upload`; - const formData = new FormData; - formData.append("file", csvFile, fileName); - inputKeys.forEach((key) => { - formData.append("input_keys", key); - }); - outputKeys.forEach((key) => { - formData.append("output_keys", key); - }); - if (description) { - formData.append("description", description); - } - if (dataType) { - formData.append("data_type", dataType); - } - if (name) { - formData.append("name", name); - } - const response = await this.caller.call(async () => { - const res = await this._fetch(url2, { - method: "POST", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: formData - }); - await (0, error_js_1.raiseForStatus)(res, "upload CSV"); - return res; - }); - const result = await response.json(); - return result; - } - async createDataset(name, { description, dataType, inputsSchema, outputsSchema, metadata } = {}) { - const body = { - name, - description, - extra: metadata ? { metadata } : undefined - }; - if (dataType) { - body.data_type = dataType; - } - if (inputsSchema) { - body.inputs_schema_definition = inputsSchema; - } - if (outputsSchema) { - body.outputs_schema_definition = outputsSchema; - } - const serializedBody = JSON.stringify(body); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: serializedBody - }); - await (0, error_js_1.raiseForStatus)(res, "create dataset"); - return res; - }); - const result = await response.json(); - return result; - } - async readDataset({ datasetId, datasetName }) { - let path = "/datasets"; - const params = new URLSearchParams({ limit: "1" }); - if (datasetId && datasetName) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId) { - (0, _uuid_js_1.assertUuid)(datasetId); - path += `/${datasetId}`; - } else if (datasetName) { - params.append("name", datasetName); - } else { - throw new Error("Must provide datasetName or datasetId"); - } - const response = await this._get(path, params); - let result; - if (Array.isArray(response)) { - if (response.length === 0) { - throw new Error(`Dataset[id=${datasetId}, name=${datasetName}] not found`); - } - result = response[0]; - } else { - result = response; - } - return result; - } - async hasDataset({ datasetId, datasetName }) { - try { - await this.readDataset({ datasetId, datasetName }); - return true; - } catch (e) { - if (e instanceof Error && e.message.toLocaleLowerCase().includes("not found")) { - return false; - } - throw e; - } - } - async diffDatasetVersions({ datasetId, datasetName, fromVersion, toVersion }) { - let datasetId_ = datasetId; - if (datasetId_ === undefined && datasetName === undefined) { - throw new Error("Must provide either datasetName or datasetId"); - } else if (datasetId_ !== undefined && datasetName !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId_ === undefined) { - const dataset = await this.readDataset({ datasetName }); - datasetId_ = dataset.id; - } - const urlParams = new URLSearchParams({ - from_version: typeof fromVersion === "string" ? fromVersion : fromVersion.toISOString(), - to_version: typeof toVersion === "string" ? toVersion : toVersion.toISOString() - }); - const response = await this._get(`/datasets/${datasetId_}/versions/diff`, urlParams); - return response; - } - async readDatasetOpenaiFinetuning({ datasetId, datasetName }) { - const path = "/datasets"; - if (datasetId !== undefined) {} else if (datasetName !== undefined) { - datasetId = (await this.readDataset({ datasetName })).id; - } else { - throw new Error("Must provide either datasetName or datasetId"); - } - const response = await this._getResponse(`${path}/${datasetId}/openai_ft`); - const datasetText = await response.text(); - const dataset = datasetText.trim().split(` -`).map((line) => JSON.parse(line)); - return dataset; - } - async* listDatasets({ limit = 100, offset = 0, datasetIds, datasetName, datasetNameContains, metadata } = {}) { - const path = "/datasets"; - const params = new URLSearchParams({ - limit: limit.toString(), - offset: offset.toString() - }); - if (datasetIds !== undefined) { - for (const id_ of datasetIds) { - params.append("id", id_); - } - } - if (datasetName !== undefined) { - params.append("name", datasetName); - } - if (datasetNameContains !== undefined) { - params.append("name_contains", datasetNameContains); - } - if (metadata !== undefined) { - params.append("metadata", JSON.stringify(metadata)); - } - for await (const datasets of this._getPaginated(path, params)) { - yield* datasets; - } - } - async updateDataset(props) { - const { datasetId, datasetName, ...update } = props; - if (!datasetId && !datasetName) { - throw new Error("Must provide either datasetName or datasetId"); - } - const _datasetId = datasetId ?? (await this.readDataset({ datasetName })).id; - (0, _uuid_js_1.assertUuid)(_datasetId); - const body = JSON.stringify(update); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${_datasetId}`, { - method: "PATCH", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update dataset"); - return res; - }); - return await response.json(); - } - async updateDatasetTag(props) { - const { datasetId, datasetName, asOf, tag } = props; - if (!datasetId && !datasetName) { - throw new Error("Must provide either datasetName or datasetId"); - } - const _datasetId = datasetId ?? (await this.readDataset({ datasetName })).id; - (0, _uuid_js_1.assertUuid)(_datasetId); - const body = JSON.stringify({ - as_of: typeof asOf === "string" ? asOf : asOf.toISOString(), - tag - }); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${_datasetId}/tags`, { - method: "PUT", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update dataset tags", true); - return res; - }); - } - async deleteDataset({ datasetId, datasetName }) { - let path = "/datasets"; - let datasetId_ = datasetId; - if (datasetId !== undefined && datasetName !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetName !== undefined) { - const dataset = await this.readDataset({ datasetName }); - datasetId_ = dataset.id; - } - if (datasetId_ !== undefined) { - (0, _uuid_js_1.assertUuid)(datasetId_); - path += `/${datasetId_}`; - } else { - throw new Error("Must provide datasetName or datasetId"); - } - await this.caller.call(async () => { - const res = await this._fetch(this.apiUrl + path, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, `delete ${path}`, true); - return res; - }); - } - async indexDataset({ datasetId, datasetName, tag }) { - let datasetId_ = datasetId; - if (!datasetId_ && !datasetName) { - throw new Error("Must provide either datasetName or datasetId"); - } else if (datasetId_ && datasetName) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (!datasetId_) { - const dataset = await this.readDataset({ datasetName }); - datasetId_ = dataset.id; - } - (0, _uuid_js_1.assertUuid)(datasetId_); - const data = { - tag - }; - const body = JSON.stringify(data); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${datasetId_}/index`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "index dataset"); - return res; - }); - await response.json(); - } - async similarExamples(inputs, datasetId, limit, { filter } = {}) { - const data = { - limit, - inputs - }; - if (filter !== undefined) { - data["filter"] = filter; - } - (0, _uuid_js_1.assertUuid)(datasetId); - const body = JSON.stringify(data); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${datasetId}/search`, { - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - method: "POST", - body - }); - await (0, error_js_1.raiseForStatus)(res, "fetch similar examples"); - return res; - }); - const result = await response.json(); - return result["examples"]; - } - async createExample(inputsOrUpdate, outputs, options) { - if (isExampleCreate(inputsOrUpdate)) { - if (outputs !== undefined || options !== undefined) { - throw new Error("Cannot provide outputs or options when using ExampleCreate object"); - } - } - let datasetId_ = outputs ? options?.datasetId : inputsOrUpdate.dataset_id; - const datasetName_ = outputs ? options?.datasetName : inputsOrUpdate.dataset_name; - if (datasetId_ === undefined && datasetName_ === undefined) { - throw new Error("Must provide either datasetName or datasetId"); - } else if (datasetId_ !== undefined && datasetName_ !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId_ === undefined) { - const dataset = await this.readDataset({ datasetName: datasetName_ }); - datasetId_ = dataset.id; - } - const createdAt_ = (outputs ? options?.createdAt : inputsOrUpdate.created_at) || new Date; - let data; - if (!isExampleCreate(inputsOrUpdate)) { - data = { - inputs: inputsOrUpdate, - outputs, - created_at: createdAt_?.toISOString(), - id: options?.exampleId, - metadata: options?.metadata, - split: options?.split, - source_run_id: options?.sourceRunId, - use_source_run_io: options?.useSourceRunIO, - use_source_run_attachments: options?.useSourceRunAttachments, - attachments: options?.attachments - }; - } else { - data = inputsOrUpdate; - } - const response = await this._uploadExamplesMultipart(datasetId_, [data]); - const example = await this.readExample(response.example_ids?.[0] ?? uuid5.v4()); - return example; - } - async createExamples(propsOrUploads) { - if (Array.isArray(propsOrUploads)) { - if (propsOrUploads.length === 0) { - return []; - } - const uploads = propsOrUploads; - let datasetId_2 = uploads[0].dataset_id; - const datasetName_2 = uploads[0].dataset_name; - if (datasetId_2 === undefined && datasetName_2 === undefined) { - throw new Error("Must provide either datasetName or datasetId"); - } else if (datasetId_2 !== undefined && datasetName_2 !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId_2 === undefined) { - const dataset = await this.readDataset({ datasetName: datasetName_2 }); - datasetId_2 = dataset.id; - } - const response2 = await this._uploadExamplesMultipart(datasetId_2, uploads); - const examples2 = await Promise.all(response2.example_ids.map((id) => this.readExample(id))); - return examples2; - } - const { inputs, outputs, metadata, splits, sourceRunIds, useSourceRunIOs, useSourceRunAttachments, attachments, exampleIds, datasetId, datasetName } = propsOrUploads; - if (inputs === undefined) { - throw new Error("Must provide inputs when using legacy parameters"); - } - let datasetId_ = datasetId; - const datasetName_ = datasetName; - if (datasetId_ === undefined && datasetName_ === undefined) { - throw new Error("Must provide either datasetName or datasetId"); - } else if (datasetId_ !== undefined && datasetName_ !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId_ === undefined) { - const dataset = await this.readDataset({ datasetName: datasetName_ }); - datasetId_ = dataset.id; - } - const formattedExamples = inputs.map((input, idx) => { - return { - dataset_id: datasetId_, - inputs: input, - outputs: outputs?.[idx], - metadata: metadata?.[idx], - split: splits?.[idx], - id: exampleIds?.[idx], - attachments: attachments?.[idx], - source_run_id: sourceRunIds?.[idx], - use_source_run_io: useSourceRunIOs?.[idx], - use_source_run_attachments: useSourceRunAttachments?.[idx] - }; - }); - const response = await this._uploadExamplesMultipart(datasetId_, formattedExamples); - const examples = await Promise.all(response.example_ids.map((id) => this.readExample(id))); - return examples; - } - async createLLMExample(input, generation, options) { - return this.createExample({ input }, { output: generation }, options); - } - async createChatExample(input, generations, options) { - const finalInput = input.map((message) => { - if ((0, messages_js_1.isLangChainMessage)(message)) { - return (0, messages_js_1.convertLangChainMessageToExample)(message); - } - return message; - }); - const finalOutput = (0, messages_js_1.isLangChainMessage)(generations) ? (0, messages_js_1.convertLangChainMessageToExample)(generations) : generations; - return this.createExample({ input: finalInput }, { output: finalOutput }, options); - } - async readExample(exampleId) { - (0, _uuid_js_1.assertUuid)(exampleId); - const path = `/examples/${exampleId}`; - const rawExample = await this._get(path); - const { attachment_urls, ...rest } = rawExample; - const example = rest; - if (attachment_urls) { - example.attachments = Object.entries(attachment_urls).reduce((acc, [key, value]) => { - acc[key.slice("attachment.".length)] = { - presigned_url: value.presigned_url, - mime_type: value.mime_type - }; - return acc; - }, {}); - } - return example; - } - async* listExamples({ datasetId, datasetName, exampleIds, asOf, splits, inlineS3Urls, metadata, limit, offset, filter, includeAttachments } = {}) { - let datasetId_; - if (datasetId !== undefined && datasetName !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId !== undefined) { - datasetId_ = datasetId; - } else if (datasetName !== undefined) { - const dataset = await this.readDataset({ datasetName }); - datasetId_ = dataset.id; - } else { - throw new Error("Must provide a datasetName or datasetId"); - } - const params = new URLSearchParams({ dataset: datasetId_ }); - const dataset_version = asOf ? typeof asOf === "string" ? asOf : asOf?.toISOString() : undefined; - if (dataset_version) { - params.append("as_of", dataset_version); - } - const inlineS3Urls_ = inlineS3Urls ?? true; - params.append("inline_s3_urls", inlineS3Urls_.toString()); - if (exampleIds !== undefined) { - for (const id_ of exampleIds) { - params.append("id", id_); - } - } - if (splits !== undefined) { - for (const split of splits) { - params.append("splits", split); - } - } - if (metadata !== undefined) { - const serializedMetadata = JSON.stringify(metadata); - params.append("metadata", serializedMetadata); - } - if (limit !== undefined) { - params.append("limit", limit.toString()); - } - if (offset !== undefined) { - params.append("offset", offset.toString()); - } - if (filter !== undefined) { - params.append("filter", filter); - } - if (includeAttachments === true) { - ["attachment_urls", "outputs", "metadata"].forEach((field) => params.append("select", field)); - } - let i = 0; - for await (const rawExamples of this._getPaginated("/examples", params)) { - for (const rawExample of rawExamples) { - const { attachment_urls, ...rest } = rawExample; - const example = rest; - if (attachment_urls) { - example.attachments = Object.entries(attachment_urls).reduce((acc, [key, value]) => { - acc[key.slice("attachment.".length)] = { - presigned_url: value.presigned_url, - mime_type: value.mime_type || undefined - }; - return acc; - }, {}); - } - yield example; - i++; - } - if (limit !== undefined && i >= limit) { - break; - } - } - } - async deleteExample(exampleId) { - (0, _uuid_js_1.assertUuid)(exampleId); - const path = `/examples/${exampleId}`; - await this.caller.call(async () => { - const res = await this._fetch(this.apiUrl + path, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, `delete ${path}`, true); - return res; - }); - } - async deleteExamples(exampleIds, options) { - exampleIds.forEach((id) => (0, _uuid_js_1.assertUuid)(id)); - if (options?.hardDelete) { - const path = this._getPlatformEndpointPath("datasets/examples/delete"); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}${path}`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - body: JSON.stringify({ - example_ids: exampleIds, - hard_delete: true - }), - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "hard delete examples", true); - return res; - }); - } else { - const params = new URLSearchParams; - exampleIds.forEach((id) => params.append("example_ids", id)); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/examples?${params.toString()}`, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "delete examples", true); - return res; - }); - } - } - async updateExample(exampleIdOrUpdate, update) { - let exampleId; - if (update) { - exampleId = exampleIdOrUpdate; - } else { - exampleId = exampleIdOrUpdate.id; - } - (0, _uuid_js_1.assertUuid)(exampleId); - let updateToUse; - if (update) { - updateToUse = { id: exampleId, ...update }; - } else { - updateToUse = exampleIdOrUpdate; - } - let datasetId; - if (updateToUse.dataset_id !== undefined) { - datasetId = updateToUse.dataset_id; - } else { - const example = await this.readExample(exampleId); - datasetId = example.dataset_id; - } - return this._updateExamplesMultipart(datasetId, [updateToUse]); - } - async updateExamples(update) { - let datasetId; - if (update[0].dataset_id === undefined) { - const example = await this.readExample(update[0].id); - datasetId = example.dataset_id; - } else { - datasetId = update[0].dataset_id; - } - return this._updateExamplesMultipart(datasetId, update); - } - async readDatasetVersion({ datasetId, datasetName, asOf, tag }) { - let resolvedDatasetId; - if (!datasetId) { - const dataset = await this.readDataset({ datasetName }); - resolvedDatasetId = dataset.id; - } else { - resolvedDatasetId = datasetId; - } - (0, _uuid_js_1.assertUuid)(resolvedDatasetId); - if (asOf && tag || !asOf && !tag) { - throw new Error("Exactly one of asOf and tag must be specified."); - } - const params = new URLSearchParams; - if (asOf !== undefined) { - params.append("as_of", typeof asOf === "string" ? asOf : asOf.toISOString()); - } - if (tag !== undefined) { - params.append("tag", tag); - } - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${resolvedDatasetId}/version?${params.toString()}`, { - method: "GET", - headers: { ...this.headers }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "read dataset version"); - return res; - }); - return await response.json(); - } - async listDatasetSplits({ datasetId, datasetName, asOf }) { - let datasetId_; - if (datasetId === undefined && datasetName === undefined) { - throw new Error("Must provide dataset name or ID"); - } else if (datasetId !== undefined && datasetName !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId === undefined) { - const dataset = await this.readDataset({ datasetName }); - datasetId_ = dataset.id; - } else { - datasetId_ = datasetId; - } - (0, _uuid_js_1.assertUuid)(datasetId_); - const params = new URLSearchParams; - const dataset_version = asOf ? typeof asOf === "string" ? asOf : asOf?.toISOString() : undefined; - if (dataset_version) { - params.append("as_of", dataset_version); - } - const response = await this._get(`/datasets/${datasetId_}/splits`, params); - return response; - } - async updateDatasetSplits({ datasetId, datasetName, splitName, exampleIds, remove = false }) { - let datasetId_; - if (datasetId === undefined && datasetName === undefined) { - throw new Error("Must provide dataset name or ID"); - } else if (datasetId !== undefined && datasetName !== undefined) { - throw new Error("Must provide either datasetName or datasetId, not both"); - } else if (datasetId === undefined) { - const dataset = await this.readDataset({ datasetName }); - datasetId_ = dataset.id; - } else { - datasetId_ = datasetId; - } - (0, _uuid_js_1.assertUuid)(datasetId_); - const data = { - split_name: splitName, - examples: exampleIds.map((id) => { - (0, _uuid_js_1.assertUuid)(id); - return id; - }), - remove - }; - const body = JSON.stringify(data); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/${datasetId_}/splits`, { - method: "PUT", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update dataset splits", true); - return res; - }); - } - async evaluateRun(run, evaluator, { sourceInfo, loadChildRuns, referenceExample } = { loadChildRuns: false }) { - (0, warn_js_1.warnOnce)("This method is deprecated and will be removed in future LangSmith versions, use `evaluate` from `langsmith/evaluation` instead."); - let run_; - if (typeof run === "string") { - run_ = await this.readRun(run, { loadChildRuns }); - } else if (typeof run === "object" && "id" in run) { - run_ = run; - } else { - throw new Error(`Invalid run type: ${typeof run}`); - } - if (run_.reference_example_id !== null && run_.reference_example_id !== undefined) { - referenceExample = await this.readExample(run_.reference_example_id); - } - const feedbackResult = await evaluator.evaluateRun(run_, referenceExample); - const [_, feedbacks] = await this._logEvaluationFeedback(feedbackResult, run_, sourceInfo); - return feedbacks[0]; - } - async createFeedback(runId, key, { score, value, correction, comment, sourceInfo, feedbackSourceType = "api", sourceRunId, feedbackId, feedbackConfig, projectId, comparativeExperimentId }) { - if (!runId && !projectId) { - throw new Error("One of runId or projectId must be provided"); - } - if (runId && projectId) { - throw new Error("Only one of runId or projectId can be provided"); - } - const feedback_source = { - type: feedbackSourceType ?? "api", - metadata: sourceInfo ?? {} - }; - if (sourceRunId !== undefined && feedback_source?.metadata !== undefined && !feedback_source.metadata["__run"]) { - feedback_source.metadata["__run"] = { run_id: sourceRunId }; - } - if (feedback_source?.metadata !== undefined && feedback_source.metadata["__run"]?.run_id !== undefined) { - (0, _uuid_js_1.assertUuid)(feedback_source.metadata["__run"].run_id); - } - const feedback = { - id: feedbackId ?? uuid5.v4(), - run_id: runId, - key, - score: _formatFeedbackScore(score), - value, - correction, - comment, - feedback_source, - comparative_experiment_id: comparativeExperimentId, - feedbackConfig, - session_id: projectId - }; - const body = JSON.stringify(feedback); - const url2 = `${this.apiUrl}/feedback`; - await this.caller.call(async () => { - const res = await this._fetch(url2, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "create feedback", true); - return res; - }); - return feedback; - } - async updateFeedback(feedbackId, { score, value, correction, comment }) { - const feedbackUpdate = {}; - if (score !== undefined && score !== null) { - feedbackUpdate["score"] = _formatFeedbackScore(score); - } - if (value !== undefined && value !== null) { - feedbackUpdate["value"] = value; - } - if (correction !== undefined && correction !== null) { - feedbackUpdate["correction"] = correction; - } - if (comment !== undefined && comment !== null) { - feedbackUpdate["comment"] = comment; - } - (0, _uuid_js_1.assertUuid)(feedbackId); - const body = JSON.stringify(feedbackUpdate); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/feedback/${feedbackId}`, { - method: "PATCH", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update feedback", true); - return res; - }); - } - async readFeedback(feedbackId) { - (0, _uuid_js_1.assertUuid)(feedbackId); - const path = `/feedback/${feedbackId}`; - const response = await this._get(path); - return response; - } - async deleteFeedback(feedbackId) { - (0, _uuid_js_1.assertUuid)(feedbackId); - const path = `/feedback/${feedbackId}`; - await this.caller.call(async () => { - const res = await this._fetch(this.apiUrl + path, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, `delete ${path}`, true); - return res; - }); - } - async* listFeedback({ runIds, feedbackKeys, feedbackSourceTypes } = {}) { - const queryParams = new URLSearchParams; - if (runIds) { - for (const runId of runIds) { - (0, _uuid_js_1.assertUuid)(runId); - queryParams.append("run", runId); - } - } - if (feedbackKeys) { - for (const key of feedbackKeys) { - queryParams.append("key", key); - } - } - if (feedbackSourceTypes) { - for (const type of feedbackSourceTypes) { - queryParams.append("source", type); - } - } - for await (const feedbacks of this._getPaginated("/feedback", queryParams)) { - yield* feedbacks; - } - } - async createPresignedFeedbackToken(runId, feedbackKey, { expiration, feedbackConfig } = {}) { - const body = { - run_id: runId, - feedback_key: feedbackKey, - feedback_config: feedbackConfig - }; - if (expiration) { - if (typeof expiration === "string") { - body["expires_at"] = expiration; - } else if (expiration?.hours || expiration?.minutes || expiration?.days) { - body["expires_in"] = expiration; - } - } else { - body["expires_in"] = { - hours: 3 - }; - } - const serializedBody = JSON.stringify(body); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/feedback/tokens`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: serializedBody - }); - await (0, error_js_1.raiseForStatus)(res, "create presigned feedback token"); - return res; - }); - return await response.json(); - } - async createComparativeExperiment({ name, experimentIds, referenceDatasetId, createdAt, description, metadata, id }) { - if (experimentIds.length === 0) { - throw new Error("At least one experiment is required"); - } - if (!referenceDatasetId) { - referenceDatasetId = (await this.readProject({ - projectId: experimentIds[0] - })).reference_dataset_id; - } - if (!referenceDatasetId == null) { - throw new Error("A reference dataset is required"); - } - const body = { - id, - name, - experiment_ids: experimentIds, - reference_dataset_id: referenceDatasetId, - description, - created_at: (createdAt ?? new Date)?.toISOString(), - extra: {} - }; - if (metadata) - body.extra["metadata"] = metadata; - const serializedBody = JSON.stringify(body); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/datasets/comparative`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: serializedBody - }); - await (0, error_js_1.raiseForStatus)(res, "create comparative experiment"); - return res; - }); - return response.json(); - } - async* listPresignedFeedbackTokens(runId) { - (0, _uuid_js_1.assertUuid)(runId); - const params = new URLSearchParams({ run_id: runId }); - for await (const tokens of this._getPaginated("/feedback/tokens", params)) { - yield* tokens; - } - } - _selectEvalResults(results) { - let results_; - if ("results" in results) { - results_ = results.results; - } else if (Array.isArray(results)) { - results_ = results; - } else { - results_ = [results]; - } - return results_; - } - async _logEvaluationFeedback(evaluatorResponse, run, sourceInfo) { - const evalResults = this._selectEvalResults(evaluatorResponse); - const feedbacks = []; - for (const res of evalResults) { - let sourceInfo_ = sourceInfo || {}; - if (res.evaluatorInfo) { - sourceInfo_ = { ...res.evaluatorInfo, ...sourceInfo_ }; - } - let runId_ = null; - if (res.targetRunId) { - runId_ = res.targetRunId; - } else if (run) { - runId_ = run.id; - } - feedbacks.push(await this.createFeedback(runId_, res.key, { - score: res.score, - value: res.value, - comment: res.comment, - correction: res.correction, - sourceInfo: sourceInfo_, - sourceRunId: res.sourceRunId, - feedbackConfig: res.feedbackConfig, - feedbackSourceType: "model" - })); - } - return [evalResults, feedbacks]; - } - async logEvaluationFeedback(evaluatorResponse, run, sourceInfo) { - const [results] = await this._logEvaluationFeedback(evaluatorResponse, run, sourceInfo); - return results; - } - async* listAnnotationQueues(options = {}) { - const { queueIds, name, nameContains, limit } = options; - const params = new URLSearchParams; - if (queueIds) { - queueIds.forEach((id, i) => { - (0, _uuid_js_1.assertUuid)(id, `queueIds[${i}]`); - params.append("ids", id); - }); - } - if (name) - params.append("name", name); - if (nameContains) - params.append("name_contains", nameContains); - params.append("limit", (limit !== undefined ? Math.min(limit, 100) : 100).toString()); - let count = 0; - for await (const queues of this._getPaginated("/annotation-queues", params)) { - yield* queues; - count++; - if (limit !== undefined && count >= limit) - break; - } - } - async createAnnotationQueue(options) { - const { name, description, queueId, rubricInstructions } = options; - const body = { - name, - description, - id: queueId || uuid5.v4(), - rubric_instructions: rubricInstructions - }; - const serializedBody = JSON.stringify(Object.fromEntries(Object.entries(body).filter(([_, v]) => v !== undefined))); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: serializedBody - }); - await (0, error_js_1.raiseForStatus)(res, "create annotation queue"); - return res; - }); - return response.json(); - } - async readAnnotationQueue(queueId) { - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "read annotation queue"); - return res; - }); - return response.json(); - } - async updateAnnotationQueue(queueId, options) { - const { name, description, rubricInstructions } = options; - const body = JSON.stringify({ - name, - description, - rubric_instructions: rubricInstructions - }); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}`, { - method: "PATCH", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update annotation queue", true); - return res; - }); - } - async deleteAnnotationQueue(queueId) { - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}`, { - method: "DELETE", - headers: { ...this.headers, Accept: "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "delete annotation queue", true); - return res; - }); - } - async addRunsToAnnotationQueue(queueId, runIds) { - const body = JSON.stringify(runIds.map((id, i) => (0, _uuid_js_1.assertUuid)(id, `runIds[${i}]`).toString())); - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}/runs`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "add runs to annotation queue", true); - return res; - }); - } - async getRunFromAnnotationQueue(queueId, index) { - const baseUrl = `/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}/run`; - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}${baseUrl}/${index}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "get run from annotation queue"); - return res; - }); - return response.json(); - } - async deleteRunFromAnnotationQueue(queueId, queueRunId) { - await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}/runs/${(0, _uuid_js_1.assertUuid)(queueRunId, "queueRunId")}`, { - method: "DELETE", - headers: { ...this.headers, Accept: "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "delete run from annotation queue", true); - return res; - }); - } - async getSizeFromAnnotationQueue(queueId) { - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, "queueId")}/size`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "get size from annotation queue"); - return res; - }); - return response.json(); - } - async _currentTenantIsOwner(owner) { - const settings = await this._getSettings(); - return owner == "-" || settings.tenant_handle === owner; - } - async _ownerConflictError(action, owner) { - const settings = await this._getSettings(); - return new Error(`Cannot ${action} for another tenant. - - Current tenant: ${settings.tenant_handle} - - Requested tenant: ${owner}`); - } - async _getLatestCommitHash(promptOwnerAndName) { - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/commits/${promptOwnerAndName}/?limit=${1}&offset=${0}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "get latest commit hash"); - return res; - }); - const json3 = await response.json(); - if (json3.commits.length === 0) { - return; - } - return json3.commits[0].commit_hash; - } - async _likeOrUnlikePrompt(promptIdentifier, like) { - const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - const body = JSON.stringify({ like }); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/likes/${owner}/${promptName}`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, `${like ? "like" : "unlike"} prompt`); - return res; - }); - return response.json(); - } - async _getPromptUrl(promptIdentifier) { - const [owner, promptName, commitHash] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - if (!await this._currentTenantIsOwner(owner)) { - if (commitHash !== "latest") { - return `${this.getHostUrl()}/hub/${owner}/${promptName}/${commitHash.substring(0, 8)}`; - } else { - return `${this.getHostUrl()}/hub/${owner}/${promptName}`; - } - } else { - const settings = await this._getSettings(); - if (commitHash !== "latest") { - return `${this.getHostUrl()}/prompts/${promptName}/${commitHash.substring(0, 8)}?organizationId=${settings.id}`; - } else { - return `${this.getHostUrl()}/prompts/${promptName}?organizationId=${settings.id}`; - } - } - } - async promptExists(promptIdentifier) { - const prompt = await this.getPrompt(promptIdentifier); - return !!prompt; - } - async likePrompt(promptIdentifier) { - return this._likeOrUnlikePrompt(promptIdentifier, true); - } - async unlikePrompt(promptIdentifier) { - return this._likeOrUnlikePrompt(promptIdentifier, false); - } - async* listCommits(promptOwnerAndName) { - for await (const commits of this._getPaginated(`/commits/${promptOwnerAndName}/`, new URLSearchParams, (res) => res.commits)) { - yield* commits; - } - } - async* listPrompts(options) { - const params = new URLSearchParams; - params.append("sort_field", options?.sortField ?? "updated_at"); - params.append("sort_direction", "desc"); - params.append("is_archived", (!!options?.isArchived).toString()); - if (options?.isPublic !== undefined) { - params.append("is_public", options.isPublic.toString()); - } - if (options?.query) { - params.append("query", options.query); - } - for await (const prompts of this._getPaginated("/repos", params, (res) => res.repos)) { - yield* prompts; - } - } - async getPrompt(promptIdentifier) { - const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/repos/${owner}/${promptName}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - if (res?.status === 404) { - return null; - } - await (0, error_js_1.raiseForStatus)(res, "get prompt"); - return res; - }); - const result = await response?.json(); - if (result?.repo) { - return result.repo; - } else { - return null; - } - } - async createPrompt(promptIdentifier, options) { - const settings = await this._getSettings(); - if (options?.isPublic && !settings.tenant_handle) { - throw new Error(`Cannot create a public prompt without first - - creating a LangChain Hub handle. - You can add a handle by creating a public prompt at: - - https://smith.langchain.com/prompts`); - } - const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - if (!await this._currentTenantIsOwner(owner)) { - throw await this._ownerConflictError("create a prompt", owner); - } - const data = { - repo_handle: promptName, - ...options?.description && { description: options.description }, - ...options?.readme && { readme: options.readme }, - ...options?.tags && { tags: options.tags }, - is_public: !!options?.isPublic - }; - const body = JSON.stringify(data); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/repos/`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "create prompt"); - return res; - }); - const { repo } = await response.json(); - return repo; - } - async createCommit(promptIdentifier, object3, options) { - if (!await this.promptExists(promptIdentifier)) { - throw new Error("Prompt does not exist, you must create it first."); - } - const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - const resolvedParentCommitHash = options?.parentCommitHash === "latest" || !options?.parentCommitHash ? await this._getLatestCommitHash(`${owner}/${promptName}`) : options?.parentCommitHash; - const payload = { - manifest: JSON.parse(JSON.stringify(object3)), - parent_commit: resolvedParentCommitHash - }; - const body = JSON.stringify(payload); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/commits/${owner}/${promptName}`, { - method: "POST", - headers: { ...this.headers, "Content-Type": "application/json" }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "create commit"); - return res; - }); - const result = await response.json(); - return this._getPromptUrl(`${owner}/${promptName}${result.commit_hash ? `:${result.commit_hash}` : ""}`); - } - async updateExamplesMultipart(datasetId, updates = []) { - return this._updateExamplesMultipart(datasetId, updates); - } - async _updateExamplesMultipart(datasetId, updates = []) { - if (!await this._getDatasetExamplesMultiPartSupport()) { - throw new Error("Your LangSmith deployment does not allow using the multipart examples endpoint, please upgrade your deployment to the latest version."); - } - const formData = new FormData; - for (const example of updates) { - const exampleId = example.id; - const exampleBody = { - ...example.metadata && { metadata: example.metadata }, - ...example.split && { split: example.split } - }; - const stringifiedExample = (0, index_js_2.serialize)(exampleBody, `Serializing body for example with id: ${exampleId}`); - const exampleBlob = new Blob([stringifiedExample], { - type: "application/json" - }); - formData.append(exampleId, exampleBlob); - if (example.inputs) { - const stringifiedInputs = (0, index_js_2.serialize)(example.inputs, `Serializing inputs for example with id: ${exampleId}`); - const inputsBlob = new Blob([stringifiedInputs], { - type: "application/json" - }); - formData.append(`${exampleId}.inputs`, inputsBlob); - } - if (example.outputs) { - const stringifiedOutputs = (0, index_js_2.serialize)(example.outputs, `Serializing outputs whle updating example with id: ${exampleId}`); - const outputsBlob = new Blob([stringifiedOutputs], { - type: "application/json" - }); - formData.append(`${exampleId}.outputs`, outputsBlob); - } - if (example.attachments) { - for (const [name, attachment] of Object.entries(example.attachments)) { - let mimeType; - let data; - if (Array.isArray(attachment)) { - [mimeType, data] = attachment; - } else { - mimeType = attachment.mimeType; - data = attachment.data; - } - const attachmentBlob = new Blob([data], { - type: `${mimeType}; length=${data.byteLength}` - }); - formData.append(`${exampleId}.attachment.${name}`, attachmentBlob); - } - } - if (example.attachments_operations) { - const stringifiedAttachmentsOperations = (0, index_js_2.serialize)(example.attachments_operations, `Serializing attachments while updating example with id: ${exampleId}`); - const attachmentsOperationsBlob = new Blob([stringifiedAttachmentsOperations], { - type: "application/json" - }); - formData.append(`${exampleId}.attachments_operations`, attachmentsOperationsBlob); - } - } - const datasetIdToUse = datasetId ?? updates[0]?.dataset_id; - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}${this._getPlatformEndpointPath(`datasets/${datasetIdToUse}/examples`)}`, { - method: "PATCH", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: formData - }); - await (0, error_js_1.raiseForStatus)(res, "update examples"); - return res; - }); - return response.json(); - } - async uploadExamplesMultipart(datasetId, uploads = []) { - return this._uploadExamplesMultipart(datasetId, uploads); - } - async _uploadExamplesMultipart(datasetId, uploads = []) { - if (!await this._getDatasetExamplesMultiPartSupport()) { - throw new Error("Your LangSmith deployment does not allow using the multipart examples endpoint, please upgrade your deployment to the latest version."); - } - const formData = new FormData; - for (const example of uploads) { - const exampleId = (example.id ?? uuid5.v4()).toString(); - const exampleBody = { - created_at: example.created_at, - ...example.metadata && { metadata: example.metadata }, - ...example.split && { split: example.split }, - ...example.source_run_id && { source_run_id: example.source_run_id }, - ...example.use_source_run_io && { - use_source_run_io: example.use_source_run_io - }, - ...example.use_source_run_attachments && { - use_source_run_attachments: example.use_source_run_attachments - } - }; - const stringifiedExample = (0, index_js_2.serialize)(exampleBody, `Serializing body for uploaded example with id: ${exampleId}`); - const exampleBlob = new Blob([stringifiedExample], { - type: "application/json" - }); - formData.append(exampleId, exampleBlob); - if (example.inputs) { - const stringifiedInputs = (0, index_js_2.serialize)(example.inputs, `Serializing inputs for uploaded example with id: ${exampleId}`); - const inputsBlob = new Blob([stringifiedInputs], { - type: "application/json" - }); - formData.append(`${exampleId}.inputs`, inputsBlob); - } - if (example.outputs) { - const stringifiedOutputs = (0, index_js_2.serialize)(example.outputs, `Serializing outputs for uploaded example with id: ${exampleId}`); - const outputsBlob = new Blob([stringifiedOutputs], { - type: "application/json" - }); - formData.append(`${exampleId}.outputs`, outputsBlob); - } - if (example.attachments) { - for (const [name, attachment] of Object.entries(example.attachments)) { - let mimeType; - let data; - if (Array.isArray(attachment)) { - [mimeType, data] = attachment; - } else { - mimeType = attachment.mimeType; - data = attachment.data; - } - const attachmentBlob = new Blob([data], { - type: `${mimeType}; length=${data.byteLength}` - }); - formData.append(`${exampleId}.attachment.${name}`, attachmentBlob); - } - } - } - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}${this._getPlatformEndpointPath(`datasets/${datasetId}/examples`)}`, { - method: "POST", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body: formData - }); - await (0, error_js_1.raiseForStatus)(res, "upload examples"); - return res; - }); - return response.json(); - } - async updatePrompt(promptIdentifier, options) { - if (!await this.promptExists(promptIdentifier)) { - throw new Error("Prompt does not exist, you must create it first."); - } - const [owner, promptName] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - if (!await this._currentTenantIsOwner(owner)) { - throw await this._ownerConflictError("update a prompt", owner); - } - const payload = {}; - if (options?.description !== undefined) - payload.description = options.description; - if (options?.readme !== undefined) - payload.readme = options.readme; - if (options?.tags !== undefined) - payload.tags = options.tags; - if (options?.isPublic !== undefined) - payload.is_public = options.isPublic; - if (options?.isArchived !== undefined) - payload.is_archived = options.isArchived; - if (Object.keys(payload).length === 0) { - throw new Error("No valid update options provided"); - } - const body = JSON.stringify(payload); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/repos/${owner}/${promptName}`, { - method: "PATCH", - headers: { - ...this.headers, - "Content-Type": "application/json" - }, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions, - body - }); - await (0, error_js_1.raiseForStatus)(res, "update prompt"); - return res; - }); - return response.json(); - } - async deletePrompt(promptIdentifier) { - if (!await this.promptExists(promptIdentifier)) { - throw new Error("Prompt does not exist, you must create it first."); - } - const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - if (!await this._currentTenantIsOwner(owner)) { - throw await this._ownerConflictError("delete a prompt", owner); - } - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/repos/${owner}/${promptName}`, { - method: "DELETE", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "delete prompt"); - return res; - }); - return response.json(); - } - async pullPromptCommit(promptIdentifier, options) { - const [owner, promptName, commitHash] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier); - const response = await this.caller.call(async () => { - const res = await this._fetch(`${this.apiUrl}/commits/${owner}/${promptName}/${commitHash}${options?.includeModel ? "?include_model=true" : ""}`, { - method: "GET", - headers: this.headers, - signal: AbortSignal.timeout(this.timeout_ms), - ...this.fetchOptions - }); - await (0, error_js_1.raiseForStatus)(res, "pull prompt commit"); - return res; - }); - const result = await response.json(); - return { - owner, - repo: promptName, - commit_hash: result.commit_hash, - manifest: result.manifest, - examples: result.examples - }; - } - async _pullPrompt(promptIdentifier, options) { - const promptObject = await this.pullPromptCommit(promptIdentifier, { - includeModel: options?.includeModel - }); - const prompt = JSON.stringify(promptObject.manifest); - return prompt; - } - async pushPrompt(promptIdentifier, options) { - if (await this.promptExists(promptIdentifier)) { - if (options && Object.keys(options).some((key) => key !== "object")) { - await this.updatePrompt(promptIdentifier, { - description: options?.description, - readme: options?.readme, - tags: options?.tags, - isPublic: options?.isPublic - }); - } - } else { - await this.createPrompt(promptIdentifier, { - description: options?.description, - readme: options?.readme, - tags: options?.tags, - isPublic: options?.isPublic - }); - } - if (!options?.object) { - return await this._getPromptUrl(promptIdentifier); - } - const url2 = await this.createCommit(promptIdentifier, options?.object, { - parentCommitHash: options?.parentCommitHash - }); - return url2; - } - async clonePublicDataset(tokenOrUrl, options = {}) { - const { sourceApiUrl = this.apiUrl, datasetName } = options; - const [parsedApiUrl, tokenUuid] = this.parseTokenOrUrl(tokenOrUrl, sourceApiUrl); - const sourceClient = new Client({ - apiUrl: parsedApiUrl, - apiKey: "placeholder" - }); - const ds = await sourceClient.readSharedDataset(tokenUuid); - const finalDatasetName = datasetName || ds.name; - try { - if (await this.hasDataset({ datasetId: finalDatasetName })) { - console.log(`Dataset ${finalDatasetName} already exists in your tenant. Skipping.`); - return; - } - } catch (_) {} - const examples = await sourceClient.listSharedExamples(tokenUuid); - const dataset = await this.createDataset(finalDatasetName, { - description: ds.description, - dataType: ds.data_type || "kv", - inputsSchema: ds.inputs_schema_definition ?? undefined, - outputsSchema: ds.outputs_schema_definition ?? undefined - }); - try { - await this.createExamples({ - inputs: examples.map((e) => e.inputs), - outputs: examples.flatMap((e) => e.outputs ? [e.outputs] : []), - datasetId: dataset.id - }); - } catch (e) { - console.error(`An error occurred while creating dataset ${finalDatasetName}. ` + "You should delete it manually."); - throw e; - } - } - parseTokenOrUrl(urlOrToken, apiUrl, numParts = 2, kind = "dataset") { - try { - (0, _uuid_js_1.assertUuid)(urlOrToken); - return [apiUrl, urlOrToken]; - } catch (_) {} - try { - const parsedUrl = new URL(urlOrToken); - const pathParts = parsedUrl.pathname.split("/").filter((part) => part !== ""); - if (pathParts.length >= numParts) { - const tokenUuid = pathParts[pathParts.length - numParts]; - return [apiUrl, tokenUuid]; - } else { - throw new Error(`Invalid public ${kind} URL: ${urlOrToken}`); - } - } catch (error48) { - throw new Error(`Invalid public ${kind} URL or token: ${urlOrToken}`); - } - } - async awaitPendingTraceBatches() { - if (this.manualFlushMode) { - console.warn("[WARNING]: When tracing in manual flush mode, you must call `await client.flush()` manually to submit trace batches."); - return Promise.resolve(); - } - await Promise.all([ - ...this.autoBatchQueue.items.map(({ itemPromise }) => itemPromise), - this.batchIngestCaller.queue.onIdle() - ]); - if (this.langSmithToOTELTranslator !== undefined) { - await (0, otel_js_1.getDefaultOTLPTracerComponents)()?.DEFAULT_LANGSMITH_SPAN_PROCESSOR?.forceFlush(); - } - } - } - exports.Client = Client; - function isExampleCreate(input) { - return "dataset_id" in input || "dataset_name" in input; - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/env.cjs -var require_env3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isTracingEnabled = undefined; - var env_js_1 = require_env2(); - var isTracingEnabled = (tracingEnabled) => { - if (tracingEnabled !== undefined) { - return tracingEnabled; - } - const envVars = ["TRACING_V2", "TRACING"]; - return !!envVars.find((envVar) => (0, env_js_1.getLangSmithEnvironmentVariable)(envVar) === "true"); - }; - exports.isTracingEnabled = isTracingEnabled; -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/singletons/constants.cjs -var require_constants15 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports._REPLICA_TRACE_ROOTS_KEY = exports._LC_CONTEXT_VARIABLES_KEY = undefined; - exports._LC_CONTEXT_VARIABLES_KEY = Symbol.for("lc:context_variables"); - exports._REPLICA_TRACE_ROOTS_KEY = Symbol.for("langsmith:replica_trace_roots"); -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/utils/context_vars.cjs -var require_context_vars = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getContextVar = getContextVar; - exports.setContextVar = setContextVar; - var constants_js_1 = require_constants15(); - function getContextVar(runTree, key) { - if (constants_js_1._LC_CONTEXT_VARIABLES_KEY in runTree) { - const contextVars = runTree[constants_js_1._LC_CONTEXT_VARIABLES_KEY]; - return contextVars[key]; - } - return; - } - function setContextVar(runTree, key, value) { - const contextVars = constants_js_1._LC_CONTEXT_VARIABLES_KEY in runTree ? runTree[constants_js_1._LC_CONTEXT_VARIABLES_KEY] : {}; - contextVars[key] = value; - runTree[constants_js_1._LC_CONTEXT_VARIABLES_KEY] = contextVars; - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/run_trees.cjs -var require_run_trees = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RunTree = undefined; - exports.convertToDottedOrderFormat = convertToDottedOrderFormat; - exports.isRunTree = isRunTree; - exports.isRunnableConfigLike = isRunnableConfigLike; - var client_js_1 = require_client2(); - var env_js_1 = require_env3(); - var error_js_1 = require_error3(); - var constants_js_1 = require_constants15(); - var context_vars_js_1 = require_context_vars(); - var env_js_2 = require_env2(); - var project_js_1 = require_project(); - var env_js_3 = require_env2(); - var warn_js_1 = require_warn(); - var _uuid_js_1 = require__uuid(); - var uuid_1 = require_dist4(); - var TIMESTAMP_LENGTH = 36; - var UUID_NAMESPACE_DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; - function getReplicaKey(replica) { - const sortedKeys = Object.keys(replica).sort(); - const keyData = sortedKeys.map((key) => `${key}:${replica[key] ?? ""}`).join("|"); - return (0, uuid_1.v5)(keyData, UUID_NAMESPACE_DNS); - } - function stripNonAlphanumeric(input) { - return input.replace(/[-:.]/g, ""); - } - function getMicrosecondPrecisionDatestring(epoch, executionOrder = 1) { - const paddedOrder = executionOrder.toFixed(0).slice(0, 3).padStart(3, "0"); - return `${new Date(epoch).toISOString().slice(0, -1)}${paddedOrder}Z`; - } - function convertToDottedOrderFormat(epoch, runId, executionOrder = 1) { - const microsecondPrecisionDatestring = getMicrosecondPrecisionDatestring(epoch, executionOrder); - return { - dottedOrder: stripNonAlphanumeric(microsecondPrecisionDatestring) + runId, - microsecondPrecisionDatestring - }; - } - - class Baggage { - constructor(metadata, tags, project_name, replicas) { - Object.defineProperty(this, "metadata", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "tags", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "project_name", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "replicas", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.metadata = metadata; - this.tags = tags; - this.project_name = project_name; - this.replicas = replicas; - } - static fromHeader(value) { - const items = value.split(","); - let metadata = {}; - let tags = []; - let project_name; - let replicas; - for (const item of items) { - const [key, uriValue] = item.split("="); - const value2 = decodeURIComponent(uriValue); - if (key === "langsmith-metadata") { - metadata = JSON.parse(value2); - } else if (key === "langsmith-tags") { - tags = value2.split(","); - } else if (key === "langsmith-project") { - project_name = value2; - } else if (key === "langsmith-replicas") { - replicas = JSON.parse(value2); - } - } - return new Baggage(metadata, tags, project_name, replicas); - } - toHeader() { - const items = []; - if (this.metadata && Object.keys(this.metadata).length > 0) { - items.push(`langsmith-metadata=${encodeURIComponent(JSON.stringify(this.metadata))}`); - } - if (this.tags && this.tags.length > 0) { - items.push(`langsmith-tags=${encodeURIComponent(this.tags.join(","))}`); - } - if (this.project_name) { - items.push(`langsmith-project=${encodeURIComponent(this.project_name)}`); - } - return items.join(","); - } - } - - class RunTree { - constructor(originalConfig) { - Object.defineProperty(this, "id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "run_type", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "project_name", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "parent_run", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "parent_run_id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "child_runs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "start_time", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "end_time", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "extra", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "tags", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "error", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "serialized", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "inputs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "outputs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "reference_example_id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "client", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "events", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "trace_id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "dotted_order", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "tracingEnabled", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "execution_order", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "child_execution_order", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "attachments", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "replicas", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "distributedParentId", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "_serialized_start_time", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - if (isRunTree(originalConfig)) { - Object.assign(this, { ...originalConfig }); - return; - } - const defaultConfig = RunTree.getDefaultConfig(); - const { metadata, ...config2 } = originalConfig; - const client = config2.client ?? RunTree.getSharedClient(); - const dedupedMetadata = { - ...metadata, - ...config2?.extra?.metadata - }; - config2.extra = { ...config2.extra, metadata: dedupedMetadata }; - if ("id" in config2 && config2.id == null) { - delete config2.id; - } - Object.assign(this, { ...defaultConfig, ...config2, client }); - this.execution_order ??= 1; - this.child_execution_order ??= 1; - if (!this.dotted_order) { - this._serialized_start_time = getMicrosecondPrecisionDatestring(this.start_time, this.execution_order); - } - if (!this.id) { - this.id = (0, _uuid_js_1.uuid7FromTime)(this._serialized_start_time ?? this.start_time); - } - if (!this.trace_id) { - if (this.parent_run) { - this.trace_id = this.parent_run.trace_id ?? this.id; - } else { - this.trace_id = this.id; - } - } - this.replicas = _ensureWriteReplicas(this.replicas); - if (!this.dotted_order) { - const { dottedOrder } = convertToDottedOrderFormat(this.start_time, this.id, this.execution_order); - if (this.parent_run) { - this.dotted_order = this.parent_run.dotted_order + "." + dottedOrder; - } else { - this.dotted_order = dottedOrder; - } - } - } - set metadata(metadata) { - this.extra = { - ...this.extra, - metadata: { - ...this.extra?.metadata, - ...metadata - } - }; - } - get metadata() { - return this.extra?.metadata; - } - static getDefaultConfig() { - const start_time = Date.now(); - return { - run_type: "chain", - project_name: (0, project_js_1.getDefaultProjectName)(), - child_runs: [], - api_url: (0, env_js_2.getEnvironmentVariable)("LANGCHAIN_ENDPOINT") ?? "http://localhost:1984", - api_key: (0, env_js_2.getEnvironmentVariable)("LANGCHAIN_API_KEY"), - caller_options: {}, - start_time, - serialized: {}, - inputs: {}, - extra: {} - }; - } - static getSharedClient() { - if (!RunTree.sharedClient) { - RunTree.sharedClient = new client_js_1.Client; - } - return RunTree.sharedClient; - } - createChild(config2) { - const child_execution_order = this.child_execution_order + 1; - const inheritedReplicas = this.replicas?.map((replica) => { - const { reroot, ...rest } = replica; - return rest; - }); - const childReplicas = config2.replicas ?? inheritedReplicas; - const child = new RunTree({ - ...config2, - parent_run: this, - project_name: this.project_name, - replicas: childReplicas, - client: this.client, - tracingEnabled: this.tracingEnabled, - execution_order: child_execution_order, - child_execution_order - }); - if (constants_js_1._LC_CONTEXT_VARIABLES_KEY in this) { - child[constants_js_1._LC_CONTEXT_VARIABLES_KEY] = this[constants_js_1._LC_CONTEXT_VARIABLES_KEY]; - } - const LC_CHILD = Symbol.for("lc:child_config"); - const presentConfig = config2.extra?.[LC_CHILD] ?? this.extra[LC_CHILD]; - if (isRunnableConfigLike(presentConfig)) { - const newConfig = { ...presentConfig }; - const callbacks = isCallbackManagerLike(newConfig.callbacks) ? newConfig.callbacks.copy?.() : undefined; - if (callbacks) { - Object.assign(callbacks, { _parentRunId: child.id }); - callbacks.handlers?.find(isLangChainTracerLike)?.updateFromRunTree?.(child); - newConfig.callbacks = callbacks; - } - child.extra[LC_CHILD] = newConfig; - } - const visited = new Set; - let current = this; - while (current != null && !visited.has(current.id)) { - visited.add(current.id); - current.child_execution_order = Math.max(current.child_execution_order, child_execution_order); - current = current.parent_run; - } - this.child_runs.push(child); - return child; - } - async end(outputs, error48, endTime = Date.now(), metadata) { - this.outputs = this.outputs ?? outputs; - this.error = this.error ?? error48; - this.end_time = this.end_time ?? endTime; - if (metadata && Object.keys(metadata).length > 0) { - this.extra = this.extra ? { ...this.extra, metadata: { ...this.extra.metadata, ...metadata } } : { metadata }; - } - } - _convertToCreate(run, runtimeEnv, excludeChildRuns = true) { - const runExtra = run.extra ?? {}; - if (runExtra?.runtime?.library === undefined) { - if (!runExtra.runtime) { - runExtra.runtime = {}; - } - if (runtimeEnv) { - for (const [k, v] of Object.entries(runtimeEnv)) { - if (!runExtra.runtime[k]) { - runExtra.runtime[k] = v; - } - } - } - } - let child_runs; - let parent_run_id; - if (!excludeChildRuns) { - child_runs = run.child_runs.map((child_run) => this._convertToCreate(child_run, runtimeEnv, excludeChildRuns)); - parent_run_id = undefined; - } else { - parent_run_id = run.parent_run?.id ?? run.parent_run_id; - child_runs = []; - } - return { - id: run.id, - name: run.name, - start_time: run._serialized_start_time ?? run.start_time, - end_time: run.end_time, - run_type: run.run_type, - reference_example_id: run.reference_example_id, - extra: runExtra, - serialized: run.serialized, - error: run.error, - inputs: run.inputs, - outputs: run.outputs, - session_name: run.project_name, - child_runs, - parent_run_id, - trace_id: run.trace_id, - dotted_order: run.dotted_order, - tags: run.tags, - attachments: run.attachments, - events: run.events - }; - } - _sliceParentId(parentId, run) { - if (run.dotted_order) { - const segs = run.dotted_order.split("."); - let startIdx = null; - for (let idx = 0;idx < segs.length; idx++) { - const segId = segs[idx].slice(-TIMESTAMP_LENGTH); - if (segId === parentId) { - startIdx = idx; - break; - } - } - if (startIdx !== null) { - const trimmedSegs = segs.slice(startIdx + 1); - run.dotted_order = trimmedSegs.join("."); - if (trimmedSegs.length > 0) { - run.trace_id = trimmedSegs[0].slice(-TIMESTAMP_LENGTH); - } else { - run.trace_id = run.id; - } - } - } - if (run.parent_run_id === parentId) { - run.parent_run_id = undefined; - } - } - _setReplicaTraceRoot(replicaKey, traceRootId) { - const replicaTraceRoots = (0, context_vars_js_1.getContextVar)(this, constants_js_1._REPLICA_TRACE_ROOTS_KEY) ?? {}; - replicaTraceRoots[replicaKey] = traceRootId; - (0, context_vars_js_1.setContextVar)(this, constants_js_1._REPLICA_TRACE_ROOTS_KEY, replicaTraceRoots); - for (const child of this.child_runs) { - child._setReplicaTraceRoot(replicaKey, traceRootId); - } - } - _remapForProject(params) { - const { projectName, runtimeEnv, excludeChildRuns = true, reroot = false, distributedParentId, apiUrl, apiKey, workspaceId } = params; - const baseRun = this._convertToCreate(this, runtimeEnv, excludeChildRuns); - if (projectName === this.project_name) { - return { - ...baseRun, - session_name: projectName - }; - } - if (reroot) { - if (distributedParentId) { - this._sliceParentId(distributedParentId, baseRun); - } else { - baseRun.parent_run_id = undefined; - if (baseRun.dotted_order) { - const segs = baseRun.dotted_order.split("."); - if (segs.length > 0) { - baseRun.dotted_order = segs[segs.length - 1]; - baseRun.trace_id = baseRun.id; - } - } - } - const replicaKey = getReplicaKey({ - projectName, - apiUrl, - apiKey, - workspaceId - }); - this._setReplicaTraceRoot(replicaKey, baseRun.id); - } - let ancestorRerootedTraceId; - if (!reroot) { - const replicaTraceRoots = (0, context_vars_js_1.getContextVar)(this, constants_js_1._REPLICA_TRACE_ROOTS_KEY) ?? {}; - const replicaKey = getReplicaKey({ - projectName, - apiUrl, - apiKey, - workspaceId - }); - ancestorRerootedTraceId = replicaTraceRoots[replicaKey]; - if (ancestorRerootedTraceId) { - baseRun.trace_id = ancestorRerootedTraceId; - if (baseRun.dotted_order) { - const segs = baseRun.dotted_order.split("."); - let rootIdx = null; - for (let idx = 0;idx < segs.length; idx++) { - const segId = segs[idx].slice(-TIMESTAMP_LENGTH); - if (segId === ancestorRerootedTraceId) { - rootIdx = idx; - break; - } - } - if (rootIdx !== null) { - const trimmedSegs = segs.slice(rootIdx); - baseRun.dotted_order = trimmedSegs.join("."); - } - } - } - } - const oldId = baseRun.id; - const newId = (0, uuid_1.v5)(`${oldId}:${projectName}`, UUID_NAMESPACE_DNS); - let newTraceId; - if (baseRun.trace_id) { - newTraceId = (0, uuid_1.v5)(`${baseRun.trace_id}:${projectName}`, UUID_NAMESPACE_DNS); - } else { - newTraceId = newId; - } - let newParentId; - if (baseRun.parent_run_id) { - newParentId = (0, uuid_1.v5)(`${baseRun.parent_run_id}:${projectName}`, UUID_NAMESPACE_DNS); - } - let newDottedOrder; - if (baseRun.dotted_order) { - const segs = baseRun.dotted_order.split("."); - const remappedSegs = segs.map((seg) => { - const segId = seg.slice(-TIMESTAMP_LENGTH); - const remappedId = (0, uuid_1.v5)(`${segId}:${projectName}`, UUID_NAMESPACE_DNS); - return seg.slice(0, -TIMESTAMP_LENGTH) + remappedId; - }); - newDottedOrder = remappedSegs.join("."); - } - return { - ...baseRun, - id: newId, - trace_id: newTraceId, - parent_run_id: newParentId, - dotted_order: newDottedOrder, - session_name: projectName - }; - } - async postRun(excludeChildRuns = true) { - try { - const runtimeEnv = (0, env_js_2.getRuntimeEnvironment)(); - if (this.replicas && this.replicas.length > 0) { - for (const { projectName, apiKey, apiUrl, workspaceId, reroot } of this.replicas) { - const runCreate = this._remapForProject({ - projectName: projectName ?? this.project_name, - runtimeEnv, - excludeChildRuns: true, - reroot, - distributedParentId: this.distributedParentId, - apiUrl, - apiKey, - workspaceId - }); - await this.client.createRun(runCreate, { - apiKey, - apiUrl, - workspaceId - }); - } - } else { - const runCreate = this._convertToCreate(this, runtimeEnv, excludeChildRuns); - await this.client.createRun(runCreate); - } - if (!excludeChildRuns) { - (0, warn_js_1.warnOnce)("Posting with excludeChildRuns=false is deprecated and will be removed in a future version."); - for (const childRun of this.child_runs) { - await childRun.postRun(false); - } - } - } catch (error48) { - console.error(`Error in postRun for run ${this.id}:`, error48); - } - } - async patchRun(options) { - if (this.replicas && this.replicas.length > 0) { - for (const { projectName, apiKey, apiUrl, workspaceId, updates, reroot } of this.replicas) { - const runData = this._remapForProject({ - projectName: projectName ?? this.project_name, - runtimeEnv: undefined, - excludeChildRuns: true, - reroot, - distributedParentId: this.distributedParentId, - apiUrl, - apiKey, - workspaceId - }); - const updatePayload = { - id: runData.id, - name: runData.name, - run_type: runData.run_type, - start_time: runData.start_time, - outputs: runData.outputs, - error: runData.error, - parent_run_id: runData.parent_run_id, - session_name: runData.session_name, - reference_example_id: runData.reference_example_id, - end_time: runData.end_time, - dotted_order: runData.dotted_order, - trace_id: runData.trace_id, - events: runData.events, - tags: runData.tags, - extra: runData.extra, - attachments: this.attachments, - ...updates - }; - if (!options?.excludeInputs) { - updatePayload.inputs = runData.inputs; - } - await this.client.updateRun(runData.id, updatePayload, { - apiKey, - apiUrl, - workspaceId - }); - } - } else { - try { - const runUpdate = { - name: this.name, - run_type: this.run_type, - start_time: this._serialized_start_time ?? this.start_time, - end_time: this.end_time, - error: this.error, - outputs: this.outputs, - parent_run_id: this.parent_run?.id ?? this.parent_run_id, - reference_example_id: this.reference_example_id, - extra: this.extra, - events: this.events, - dotted_order: this.dotted_order, - trace_id: this.trace_id, - tags: this.tags, - attachments: this.attachments, - session_name: this.project_name - }; - if (!options?.excludeInputs) { - runUpdate.inputs = this.inputs; - } - await this.client.updateRun(this.id, runUpdate); - } catch (error48) { - console.error(`Error in patchRun for run ${this.id}`, error48); - } - } - } - toJSON() { - return this._convertToCreate(this, undefined, false); - } - addEvent(event) { - if (!this.events) { - this.events = []; - } - if (typeof event === "string") { - this.events.push({ - name: "event", - time: new Date().toISOString(), - message: event - }); - } else { - this.events.push({ - ...event, - time: event.time ?? new Date().toISOString() - }); - } - } - static fromRunnableConfig(parentConfig, props) { - const callbackManager = parentConfig?.callbacks; - let parentRun; - let projectName; - let client; - let tracingEnabled = (0, env_js_1.isTracingEnabled)(); - if (callbackManager) { - const parentRunId = callbackManager?.getParentRunId?.() ?? ""; - const langChainTracer = callbackManager?.handlers?.find((handler) => handler?.name == "langchain_tracer"); - parentRun = langChainTracer?.getRun?.(parentRunId); - projectName = langChainTracer?.projectName; - client = langChainTracer?.client; - tracingEnabled = tracingEnabled || !!langChainTracer; - } - if (!parentRun) { - return new RunTree({ - ...props, - client, - tracingEnabled, - project_name: projectName - }); - } - const parentRunTree = new RunTree({ - name: parentRun.name, - id: parentRun.id, - trace_id: parentRun.trace_id, - dotted_order: parentRun.dotted_order, - client, - tracingEnabled, - project_name: projectName, - tags: [ - ...new Set((parentRun?.tags ?? []).concat(parentConfig?.tags ?? [])) - ], - extra: { - metadata: { - ...parentRun?.extra?.metadata, - ...parentConfig?.metadata - } - } - }); - return parentRunTree.createChild(props); - } - static fromDottedOrder(dottedOrder) { - return this.fromHeaders({ "langsmith-trace": dottedOrder }); - } - static fromHeaders(headers, inheritArgs) { - const rawHeaders = "get" in headers && typeof headers.get === "function" ? { - "langsmith-trace": headers.get("langsmith-trace"), - baggage: headers.get("baggage") - } : headers; - const headerTrace = rawHeaders["langsmith-trace"]; - if (!headerTrace || typeof headerTrace !== "string") - return; - const parentDottedOrder = headerTrace.trim(); - const parsedDottedOrder = parentDottedOrder.split(".").map((part) => { - const [strTime, uuid5] = part.split("Z"); - return { strTime, time: Date.parse(strTime + "Z"), uuid: uuid5 }; - }); - const traceId = parsedDottedOrder[0].uuid; - const config2 = { - ...inheritArgs, - name: inheritArgs?.["name"] ?? "parent", - run_type: inheritArgs?.["run_type"] ?? "chain", - start_time: inheritArgs?.["start_time"] ?? Date.now(), - id: parsedDottedOrder.at(-1)?.uuid, - trace_id: traceId, - dotted_order: parentDottedOrder - }; - if (rawHeaders["baggage"] && typeof rawHeaders["baggage"] === "string") { - const baggage = Baggage.fromHeader(rawHeaders["baggage"]); - config2.metadata = baggage.metadata; - config2.tags = baggage.tags; - config2.project_name = baggage.project_name; - config2.replicas = baggage.replicas; - } - const runTree = new RunTree(config2); - runTree.distributedParentId = runTree.id; - return runTree; - } - toHeaders(headers) { - const result = { - "langsmith-trace": this.dotted_order, - baggage: new Baggage(this.extra?.metadata, this.tags, this.project_name, this.replicas).toHeader() - }; - if (headers) { - for (const [key, value] of Object.entries(result)) { - headers.set(key, value); - } - } - return result; - } - } - exports.RunTree = RunTree; - Object.defineProperty(RunTree, "sharedClient", { - enumerable: true, - configurable: true, - writable: true, - value: null - }); - function isRunTree(x) { - return x != null && typeof x.createChild === "function" && typeof x.postRun === "function"; - } - function isLangChainTracerLike(x) { - return typeof x === "object" && x != null && typeof x.name === "string" && x.name === "langchain_tracer"; - } - function containsLangChainTracerLike(x) { - return Array.isArray(x) && x.some((callback) => isLangChainTracerLike(callback)); - } - function isCallbackManagerLike(x) { - return typeof x === "object" && x != null && Array.isArray(x.handlers); - } - function isRunnableConfigLike(x) { - const callbacks = x?.callbacks; - return x != null && typeof callbacks === "object" && (containsLangChainTracerLike(callbacks?.handlers) || containsLangChainTracerLike(callbacks)); - } - function _getWriteReplicasFromEnv() { - const envVar = (0, env_js_2.getEnvironmentVariable)("LANGSMITH_RUNS_ENDPOINTS"); - if (!envVar) - return []; - try { - const parsed = JSON.parse(envVar); - if (Array.isArray(parsed)) { - const replicas = []; - for (const item of parsed) { - if (typeof item !== "object" || item === null) { - console.warn(`Invalid item type in LANGSMITH_RUNS_ENDPOINTS: ` + `expected object, got ${typeof item}`); - continue; - } - if (typeof item.api_url !== "string") { - console.warn(`Invalid api_url type in LANGSMITH_RUNS_ENDPOINTS: ` + `expected string, got ${typeof item.api_url}`); - continue; - } - if (typeof item.api_key !== "string") { - console.warn(`Invalid api_key type in LANGSMITH_RUNS_ENDPOINTS: ` + `expected string, got ${typeof item.api_key}`); - continue; - } - replicas.push({ - apiUrl: item.api_url.replace(/\/$/, ""), - apiKey: item.api_key - }); - } - return replicas; - } else if (typeof parsed === "object" && parsed !== null) { - _checkEndpointEnvUnset(parsed); - const replicas = []; - for (const [url2, key] of Object.entries(parsed)) { - const cleanUrl = url2.replace(/\/$/, ""); - if (typeof key === "string") { - replicas.push({ - apiUrl: cleanUrl, - apiKey: key - }); - } else { - console.warn(`Invalid value type in LANGSMITH_RUNS_ENDPOINTS for URL ${url2}: ` + `expected string, got ${typeof key}`); - continue; - } - } - return replicas; - } else { - console.warn("Invalid LANGSMITH_RUNS_ENDPOINTS \u2013 must be valid JSON array of " + `objects with api_url and api_key properties, or object mapping url->apiKey, got ${typeof parsed}`); - return []; - } - } catch (e) { - if ((0, error_js_1.isConflictingEndpointsError)(e)) { - throw e; - } - console.warn("Invalid LANGSMITH_RUNS_ENDPOINTS \u2013 must be valid JSON array of " + "objects with api_url and api_key properties, or object mapping url->apiKey"); - return []; - } - } - function _ensureWriteReplicas(replicas) { - if (replicas) { - return replicas.map((replica) => { - if (Array.isArray(replica)) { - return { - projectName: replica[0], - updates: replica[1] - }; - } - return replica; - }); - } - return _getWriteReplicasFromEnv(); - } - function _checkEndpointEnvUnset(parsed) { - if (Object.keys(parsed).length > 0 && (0, env_js_3.getLangSmithEnvironmentVariable)("ENDPOINT")) { - throw new error_js_1.ConflictingEndpointsError; - } - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/tracers/base.cjs -var require_base2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseTracer = undefined; - exports.isBaseTracer = isBaseTracer; - var run_trees_1 = require_run_trees(); - var base_js_1 = require_base(); - var env_js_1 = require_env(); - var convertRunTreeToRun = (runTree) => { - if (!runTree) { - return; - } - runTree.events = runTree.events ?? []; - runTree.child_runs = runTree.child_runs ?? []; - return runTree; - }; - function convertRunToRunTree(run, parentRun) { - if (!run) { - return; - } - return new run_trees_1.RunTree({ - ...run, - start_time: run._serialized_start_time ?? run.start_time, - parent_run: convertRunToRunTree(parentRun), - child_runs: run.child_runs.map((r) => convertRunToRunTree(r)).filter((r) => r !== undefined), - extra: { - ...run.extra, - runtime: (0, env_js_1.getRuntimeEnvironmentSync)() - }, - tracingEnabled: false - }); - } - function _coerceToDict(value, defaultKey) { - return value && !Array.isArray(value) && typeof value === "object" ? value : { [defaultKey]: value }; - } - function isBaseTracer(x) { - return typeof x._addRunToRunMap === "function"; - } - - class BaseTracer extends base_js_1.BaseCallbackHandler { - constructor(_fields) { - super(...arguments); - Object.defineProperty(this, "runMap", { - enumerable: true, - configurable: true, - writable: true, - value: new Map - }); - Object.defineProperty(this, "runTreeMap", { - enumerable: true, - configurable: true, - writable: true, - value: new Map - }); - Object.defineProperty(this, "usesRunTreeMap", { - enumerable: true, - configurable: true, - writable: true, - value: false - }); - } - copy() { - return this; - } - getRunById(runId) { - if (runId === undefined) { - return; - } - return this.usesRunTreeMap ? convertRunTreeToRun(this.runTreeMap.get(runId)) : this.runMap.get(runId); - } - stringifyError(error48) { - if (error48 instanceof Error) { - return error48.message + (error48?.stack ? ` - -${error48.stack}` : ""); - } - if (typeof error48 === "string") { - return error48; - } - return `${error48}`; - } - _addChildRun(parentRun, childRun) { - parentRun.child_runs.push(childRun); - } - _addRunToRunMap(run) { - const { dottedOrder: currentDottedOrder, microsecondPrecisionDatestring } = (0, run_trees_1.convertToDottedOrderFormat)(new Date(run.start_time).getTime(), run.id, run.execution_order); - const storedRun = { ...run }; - const parentRun = this.getRunById(storedRun.parent_run_id); - if (storedRun.parent_run_id !== undefined) { - if (parentRun) { - this._addChildRun(parentRun, storedRun); - parentRun.child_execution_order = Math.max(parentRun.child_execution_order, storedRun.child_execution_order); - storedRun.trace_id = parentRun.trace_id; - if (parentRun.dotted_order !== undefined) { - storedRun.dotted_order = [ - parentRun.dotted_order, - currentDottedOrder - ].join("."); - storedRun._serialized_start_time = microsecondPrecisionDatestring; - } else {} - } else {} - } else { - storedRun.trace_id = storedRun.id; - storedRun.dotted_order = currentDottedOrder; - storedRun._serialized_start_time = microsecondPrecisionDatestring; - } - if (this.usesRunTreeMap) { - const runTree = convertRunToRunTree(storedRun, parentRun); - if (runTree !== undefined) { - this.runTreeMap.set(storedRun.id, runTree); - } - } else { - this.runMap.set(storedRun.id, storedRun); - } - return storedRun; - } - async _endTrace(run) { - const parentRun = run.parent_run_id !== undefined && this.getRunById(run.parent_run_id); - if (parentRun) { - parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order); - } else { - await this.persistRun(run); - } - await this.onRunUpdate?.(run); - if (this.usesRunTreeMap) { - this.runTreeMap.delete(run.id); - } else { - this.runMap.delete(run.id); - } - } - _getExecutionOrder(parentRunId) { - const parentRun = parentRunId !== undefined && this.getRunById(parentRunId); - if (!parentRun) { - return 1; - } - return parentRun.child_execution_order + 1; - } - _createRunForLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) { - const execution_order = this._getExecutionOrder(parentRunId); - const start_time = Date.now(); - const finalExtraParams = metadata ? { ...extraParams, metadata } : extraParams; - const run = { - id: runId, - name: name ?? llm.id[llm.id.length - 1], - parent_run_id: parentRunId, - start_time, - serialized: llm, - events: [ - { - name: "start", - time: new Date(start_time).toISOString() - } - ], - inputs: { prompts }, - execution_order, - child_runs: [], - child_execution_order: execution_order, - run_type: "llm", - extra: finalExtraParams ?? {}, - tags: tags || [] - }; - return this._addRunToRunMap(run); - } - async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) { - const run = this.getRunById(runId) ?? this._createRunForLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name); - await this.onRunCreate?.(run); - await this.onLLMStart?.(run); - return run; - } - _createRunForChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) { - const execution_order = this._getExecutionOrder(parentRunId); - const start_time = Date.now(); - const finalExtraParams = metadata ? { ...extraParams, metadata } : extraParams; - const run = { - id: runId, - name: name ?? llm.id[llm.id.length - 1], - parent_run_id: parentRunId, - start_time, - serialized: llm, - events: [ - { - name: "start", - time: new Date(start_time).toISOString() - } - ], - inputs: { messages }, - execution_order, - child_runs: [], - child_execution_order: execution_order, - run_type: "llm", - extra: finalExtraParams ?? {}, - tags: tags || [] - }; - return this._addRunToRunMap(run); - } - async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) { - const run = this.getRunById(runId) ?? this._createRunForChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name); - await this.onRunCreate?.(run); - await this.onLLMStart?.(run); - return run; - } - async handleLLMEnd(output, runId, _parentRunId, _tags, extraParams) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "llm") { - throw new Error("No LLM run to end."); - } - run.end_time = Date.now(); - run.outputs = output; - run.events.push({ - name: "end", - time: new Date(run.end_time).toISOString() - }); - run.extra = { ...run.extra, ...extraParams }; - await this.onLLMEnd?.(run); - await this._endTrace(run); - return run; - } - async handleLLMError(error48, runId, _parentRunId, _tags, extraParams) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "llm") { - throw new Error("No LLM run to end."); - } - run.end_time = Date.now(); - run.error = this.stringifyError(error48); - run.events.push({ - name: "error", - time: new Date(run.end_time).toISOString() - }); - run.extra = { ...run.extra, ...extraParams }; - await this.onLLMError?.(run); - await this._endTrace(run); - return run; - } - _createRunForChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) { - const execution_order = this._getExecutionOrder(parentRunId); - const start_time = Date.now(); - const run = { - id: runId, - name: name ?? chain.id[chain.id.length - 1], - parent_run_id: parentRunId, - start_time, - serialized: chain, - events: [ - { - name: "start", - time: new Date(start_time).toISOString() - } - ], - inputs, - execution_order, - child_execution_order: execution_order, - run_type: runType ?? "chain", - child_runs: [], - extra: metadata ? { metadata } : {}, - tags: tags || [] - }; - return this._addRunToRunMap(run); - } - async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) { - const run = this.getRunById(runId) ?? this._createRunForChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name); - await this.onRunCreate?.(run); - await this.onChainStart?.(run); - return run; - } - async handleChainEnd(outputs, runId, _parentRunId, _tags, kwargs) { - const run = this.getRunById(runId); - if (!run) { - throw new Error("No chain run to end."); - } - run.end_time = Date.now(); - run.outputs = _coerceToDict(outputs, "output"); - run.events.push({ - name: "end", - time: new Date(run.end_time).toISOString() - }); - if (kwargs?.inputs !== undefined) { - run.inputs = _coerceToDict(kwargs.inputs, "input"); - } - await this.onChainEnd?.(run); - await this._endTrace(run); - return run; - } - async handleChainError(error48, runId, _parentRunId, _tags, kwargs) { - const run = this.getRunById(runId); - if (!run) { - throw new Error("No chain run to end."); - } - run.end_time = Date.now(); - run.error = this.stringifyError(error48); - run.events.push({ - name: "error", - time: new Date(run.end_time).toISOString() - }); - if (kwargs?.inputs !== undefined) { - run.inputs = _coerceToDict(kwargs.inputs, "input"); - } - await this.onChainError?.(run); - await this._endTrace(run); - return run; - } - _createRunForToolStart(tool, input, runId, parentRunId, tags, metadata, name) { - const execution_order = this._getExecutionOrder(parentRunId); - const start_time = Date.now(); - const run = { - id: runId, - name: name ?? tool.id[tool.id.length - 1], - parent_run_id: parentRunId, - start_time, - serialized: tool, - events: [ - { - name: "start", - time: new Date(start_time).toISOString() - } - ], - inputs: { input }, - execution_order, - child_execution_order: execution_order, - run_type: "tool", - child_runs: [], - extra: metadata ? { metadata } : {}, - tags: tags || [] - }; - return this._addRunToRunMap(run); - } - async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) { - const run = this.getRunById(runId) ?? this._createRunForToolStart(tool, input, runId, parentRunId, tags, metadata, name); - await this.onRunCreate?.(run); - await this.onToolStart?.(run); - return run; - } - async handleToolEnd(output, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "tool") { - throw new Error("No tool run to end"); - } - run.end_time = Date.now(); - run.outputs = { output }; - run.events.push({ - name: "end", - time: new Date(run.end_time).toISOString() - }); - await this.onToolEnd?.(run); - await this._endTrace(run); - return run; - } - async handleToolError(error48, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "tool") { - throw new Error("No tool run to end"); - } - run.end_time = Date.now(); - run.error = this.stringifyError(error48); - run.events.push({ - name: "error", - time: new Date(run.end_time).toISOString() - }); - await this.onToolError?.(run); - await this._endTrace(run); - return run; - } - async handleAgentAction(action, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "chain") { - return; - } - const agentRun = run; - agentRun.actions = agentRun.actions || []; - agentRun.actions.push(action); - agentRun.events.push({ - name: "agent_action", - time: new Date().toISOString(), - kwargs: { action } - }); - await this.onAgentAction?.(run); - } - async handleAgentEnd(action, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "chain") { - return; - } - run.events.push({ - name: "agent_end", - time: new Date().toISOString(), - kwargs: { action } - }); - await this.onAgentEnd?.(run); - } - _createRunForRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) { - const execution_order = this._getExecutionOrder(parentRunId); - const start_time = Date.now(); - const run = { - id: runId, - name: name ?? retriever.id[retriever.id.length - 1], - parent_run_id: parentRunId, - start_time, - serialized: retriever, - events: [ - { - name: "start", - time: new Date(start_time).toISOString() - } - ], - inputs: { query }, - execution_order, - child_execution_order: execution_order, - run_type: "retriever", - child_runs: [], - extra: metadata ? { metadata } : {}, - tags: tags || [] - }; - return this._addRunToRunMap(run); - } - async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) { - const run = this.getRunById(runId) ?? this._createRunForRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name); - await this.onRunCreate?.(run); - await this.onRetrieverStart?.(run); - return run; - } - async handleRetrieverEnd(documents, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "retriever") { - throw new Error("No retriever run to end"); - } - run.end_time = Date.now(); - run.outputs = { documents }; - run.events.push({ - name: "end", - time: new Date(run.end_time).toISOString() - }); - await this.onRetrieverEnd?.(run); - await this._endTrace(run); - return run; - } - async handleRetrieverError(error48, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "retriever") { - throw new Error("No retriever run to end"); - } - run.end_time = Date.now(); - run.error = this.stringifyError(error48); - run.events.push({ - name: "error", - time: new Date(run.end_time).toISOString() - }); - await this.onRetrieverError?.(run); - await this._endTrace(run); - return run; - } - async handleText(text, runId) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "chain") { - return; - } - run.events.push({ - name: "text", - time: new Date().toISOString(), - kwargs: { text } - }); - await this.onText?.(run); - } - async handleLLMNewToken(token, idx, runId, _parentRunId, _tags, fields) { - const run = this.getRunById(runId); - if (!run || run?.run_type !== "llm") { - throw new Error(`Invalid "runId" provided to "handleLLMNewToken" callback.`); - } - run.events.push({ - name: "new_token", - time: new Date().toISOString(), - kwargs: { token, idx, chunk: fields?.chunk } - }); - await this.onLLMNewToken?.(run, token, { chunk: fields?.chunk }); - return run; - } - } - exports.BaseTracer = BaseTracer; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/tracers/console.cjs -var require_console = __commonJS((exports) => { - var __importDefault2 = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ConsoleCallbackHandler = undefined; - var ansi_styles_1 = __importDefault2(require_ansi_styles()); - var base_js_1 = require_base2(); - function wrap(style, text) { - return `${style.open}${text}${style.close}`; - } - function tryJsonStringify(obj, fallback) { - try { - return JSON.stringify(obj, null, 2); - } catch (err) { - return fallback; - } - } - function formatKVMapItem(value) { - if (typeof value === "string") { - return value.trim(); - } - if (value === null || value === undefined) { - return value; - } - return tryJsonStringify(value, value.toString()); - } - function elapsed(run) { - if (!run.end_time) - return ""; - const elapsed2 = run.end_time - run.start_time; - if (elapsed2 < 1000) { - return `${elapsed2}ms`; - } - return `${(elapsed2 / 1000).toFixed(2)}s`; - } - var { color } = ansi_styles_1.default; - - class ConsoleCallbackHandler extends base_js_1.BaseTracer { - constructor() { - super(...arguments); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: "console_callback_handler" - }); - } - persistRun(_run) { - return Promise.resolve(); - } - getParents(run) { - const parents = []; - let currentRun = run; - while (currentRun.parent_run_id) { - const parent = this.runMap.get(currentRun.parent_run_id); - if (parent) { - parents.push(parent); - currentRun = parent; - } else { - break; - } - } - return parents; - } - getBreadcrumbs(run) { - const parents = this.getParents(run).reverse(); - const string5 = [...parents, run].map((parent, i, arr) => { - const name = `${parent.execution_order}:${parent.run_type}:${parent.name}`; - return i === arr.length - 1 ? wrap(ansi_styles_1.default.bold, name) : name; - }).join(" > "); - return wrap(color.grey, string5); - } - onChainStart(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.green, "[chain/start]")} [${crumbs}] Entering Chain run with input: ${tryJsonStringify(run.inputs, "[inputs]")}`); - } - onChainEnd(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.cyan, "[chain/end]")} [${crumbs}] [${elapsed(run)}] Exiting Chain run with output: ${tryJsonStringify(run.outputs, "[outputs]")}`); - } - onChainError(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.red, "[chain/error]")} [${crumbs}] [${elapsed(run)}] Chain run errored with error: ${tryJsonStringify(run.error, "[error]")}`); - } - onLLMStart(run) { - const crumbs = this.getBreadcrumbs(run); - const inputs = "prompts" in run.inputs ? { prompts: run.inputs.prompts.map((p) => p.trim()) } : run.inputs; - console.log(`${wrap(color.green, "[llm/start]")} [${crumbs}] Entering LLM run with input: ${tryJsonStringify(inputs, "[inputs]")}`); - } - onLLMEnd(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.cyan, "[llm/end]")} [${crumbs}] [${elapsed(run)}] Exiting LLM run with output: ${tryJsonStringify(run.outputs, "[response]")}`); - } - onLLMError(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.red, "[llm/error]")} [${crumbs}] [${elapsed(run)}] LLM run errored with error: ${tryJsonStringify(run.error, "[error]")}`); - } - onToolStart(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.green, "[tool/start]")} [${crumbs}] Entering Tool run with input: "${formatKVMapItem(run.inputs.input)}"`); - } - onToolEnd(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.cyan, "[tool/end]")} [${crumbs}] [${elapsed(run)}] Exiting Tool run with output: "${formatKVMapItem(run.outputs?.output)}"`); - } - onToolError(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.red, "[tool/error]")} [${crumbs}] [${elapsed(run)}] Tool run errored with error: ${tryJsonStringify(run.error, "[error]")}`); - } - onRetrieverStart(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.green, "[retriever/start]")} [${crumbs}] Entering Retriever run with input: ${tryJsonStringify(run.inputs, "[inputs]")}`); - } - onRetrieverEnd(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.cyan, "[retriever/end]")} [${crumbs}] [${elapsed(run)}] Exiting Retriever run with output: ${tryJsonStringify(run.outputs, "[outputs]")}`); - } - onRetrieverError(run) { - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.red, "[retriever/error]")} [${crumbs}] [${elapsed(run)}] Retriever run errored with error: ${tryJsonStringify(run.error, "[error]")}`); - } - onAgentAction(run) { - const agentRun = run; - const crumbs = this.getBreadcrumbs(run); - console.log(`${wrap(color.blue, "[agent/action]")} [${crumbs}] Agent selected action: ${tryJsonStringify(agentRun.actions[agentRun.actions.length - 1], "[action]")}`); - } - } - exports.ConsoleCallbackHandler = ConsoleCallbackHandler; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/errors/index.cjs -var require_errors = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.addLangChainErrorFields = addLangChainErrorFields; - function addLangChainErrorFields(error48, lc_error_code) { - error48.lc_error_code = lc_error_code; - error48.message = `${error48.message} - -Troubleshooting URL: https://js.langchain.com/docs/troubleshooting/errors/${lc_error_code}/ -`; - return error48; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/tools/utils.cjs -var require_utils53 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ToolInputParsingException = undefined; - exports._isToolCall = _isToolCall; - exports._configHasToolCallId = _configHasToolCallId; - function _isToolCall(toolCall) { - return !!(toolCall && typeof toolCall === "object" && ("type" in toolCall) && toolCall.type === "tool_call"); - } - function _configHasToolCallId(config2) { - return !!(config2 && typeof config2 === "object" && ("toolCall" in config2) && config2.toolCall != null && typeof config2.toolCall === "object" && ("id" in config2.toolCall) && typeof config2.toolCall.id === "string"); - } - - class ToolInputParsingException extends Error { - constructor(message, output) { - super(message); - Object.defineProperty(this, "output", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.output = output; - } - } - exports.ToolInputParsingException = ToolInputParsingException; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/utils/json.cjs -var require_json7 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.parseJsonMarkdown = parseJsonMarkdown; - exports.parsePartialJson = parsePartialJson; - function parseJsonMarkdown(s2, parser = parsePartialJson) { - s2 = s2.trim(); - const firstFenceIndex = s2.indexOf("```"); - if (firstFenceIndex === -1) { - return parser(s2); - } - let contentAfterFence = s2.substring(firstFenceIndex + 3); - if (contentAfterFence.startsWith(`json -`)) { - contentAfterFence = contentAfterFence.substring(5); - } else if (contentAfterFence.startsWith("json")) { - contentAfterFence = contentAfterFence.substring(4); - } else if (contentAfterFence.startsWith(` -`)) { - contentAfterFence = contentAfterFence.substring(1); - } - const closingFenceIndex = contentAfterFence.indexOf("```"); - let finalContent = contentAfterFence; - if (closingFenceIndex !== -1) { - finalContent = contentAfterFence.substring(0, closingFenceIndex); - } - return parser(finalContent.trim()); - } - function parsePartialJson(s2) { - if (typeof s2 === "undefined") { - return null; - } - try { - return JSON.parse(s2); - } catch (error48) {} - let new_s = ""; - const stack = []; - let isInsideString = false; - let escaped = false; - for (let char of s2) { - if (isInsideString) { - if (char === '"' && !escaped) { - isInsideString = false; - } else if (char === ` -` && !escaped) { - char = "\\n"; - } else if (char === "\\") { - escaped = !escaped; - } else { - escaped = false; - } - } else { - if (char === '"') { - isInsideString = true; - escaped = false; - } else if (char === "{") { - stack.push("}"); - } else if (char === "[") { - stack.push("]"); - } else if (char === "}" || char === "]") { - if (stack && stack[stack.length - 1] === char) { - stack.pop(); - } else { - return null; - } - } - } - new_s += char; - } - if (isInsideString) { - new_s += '"'; - } - for (let i = stack.length - 1;i >= 0; i -= 1) { - new_s += stack[i]; - } - try { - return JSON.parse(new_s); - } catch (error48) { - return null; - } - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/content_blocks.cjs -var require_content_blocks = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isDataContentBlock = isDataContentBlock; - exports.isURLContentBlock = isURLContentBlock; - exports.isBase64ContentBlock = isBase64ContentBlock; - exports.isPlainTextContentBlock = isPlainTextContentBlock; - exports.isIDContentBlock = isIDContentBlock; - exports.convertToOpenAIImageBlock = convertToOpenAIImageBlock; - exports.parseMimeType = parseMimeType; - exports.parseBase64DataUrl = parseBase64DataUrl; - exports.convertToProviderContentBlock = convertToProviderContentBlock; - function isDataContentBlock(content_block) { - return typeof content_block === "object" && content_block !== null && "type" in content_block && typeof content_block.type === "string" && "source_type" in content_block && (content_block.source_type === "url" || content_block.source_type === "base64" || content_block.source_type === "text" || content_block.source_type === "id"); - } - function isURLContentBlock(content_block) { - return isDataContentBlock(content_block) && content_block.source_type === "url" && "url" in content_block && typeof content_block.url === "string"; - } - function isBase64ContentBlock(content_block) { - return isDataContentBlock(content_block) && content_block.source_type === "base64" && "data" in content_block && typeof content_block.data === "string"; - } - function isPlainTextContentBlock(content_block) { - return isDataContentBlock(content_block) && content_block.source_type === "text" && "text" in content_block && typeof content_block.text === "string"; - } - function isIDContentBlock(content_block) { - return isDataContentBlock(content_block) && content_block.source_type === "id" && "id" in content_block && typeof content_block.id === "string"; - } - function convertToOpenAIImageBlock(content_block) { - if (isDataContentBlock(content_block)) { - if (content_block.source_type === "url") { - return { - type: "image_url", - image_url: { - url: content_block.url - } - }; - } - if (content_block.source_type === "base64") { - if (!content_block.mime_type) { - throw new Error("mime_type key is required for base64 data."); - } - const mime_type = content_block.mime_type; - return { - type: "image_url", - image_url: { - url: `data:${mime_type};base64,${content_block.data}` - } - }; - } - } - throw new Error("Unsupported source type. Only 'url' and 'base64' are supported."); - } - function parseMimeType(mime_type) { - const parts = mime_type.split(";")[0].split("/"); - if (parts.length !== 2) { - throw new Error(`Invalid mime type: "${mime_type}" - does not match type/subtype format.`); - } - const type = parts[0].trim(); - const subtype = parts[1].trim(); - if (type === "" || subtype === "") { - throw new Error(`Invalid mime type: "${mime_type}" - type or subtype is empty.`); - } - const parameters = {}; - for (const parameterKvp of mime_type.split(";").slice(1)) { - const parameterParts = parameterKvp.split("="); - if (parameterParts.length !== 2) { - throw new Error(`Invalid parameter syntax in mime type: "${mime_type}".`); - } - const key = parameterParts[0].trim(); - const value = parameterParts[1].trim(); - if (key === "") { - throw new Error(`Invalid parameter syntax in mime type: "${mime_type}".`); - } - parameters[key] = value; - } - return { - type, - subtype, - parameters - }; - } - function parseBase64DataUrl({ dataUrl: data_url, asTypedArray = false }) { - const formatMatch = data_url.match(/^data:(\w+\/\w+);base64,([A-Za-z0-9+/]+=*)$/); - let mime_type; - if (formatMatch) { - mime_type = formatMatch[1].toLowerCase(); - const data = asTypedArray ? Uint8Array.from(atob(formatMatch[2]), (c) => c.charCodeAt(0)) : formatMatch[2]; - return { - mime_type, - data - }; - } - return; - } - function convertToProviderContentBlock(block, converter) { - if (block.type === "text") { - if (!converter.fromStandardTextBlock) { - throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardTextBlock\` method.`); - } - return converter.fromStandardTextBlock(block); - } - if (block.type === "image") { - if (!converter.fromStandardImageBlock) { - throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardImageBlock\` method.`); - } - return converter.fromStandardImageBlock(block); - } - if (block.type === "audio") { - if (!converter.fromStandardAudioBlock) { - throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardAudioBlock\` method.`); - } - return converter.fromStandardAudioBlock(block); - } - if (block.type === "file") { - if (!converter.fromStandardFileBlock) { - throw new Error(`Converter for ${converter.providerName} does not implement \`fromStandardFileBlock\` method.`); - } - return converter.fromStandardFileBlock(block); - } - throw new Error(`Unable to convert content block type '${block.type}' to provider-specific format: not recognized.`); - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/base.cjs -var require_base3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BaseMessageChunk = exports.BaseMessage = undefined; - exports.mergeContent = mergeContent; - exports._mergeStatus = _mergeStatus; - exports.isOpenAIToolCallArray = isOpenAIToolCallArray; - exports._mergeDicts = _mergeDicts; - exports._mergeLists = _mergeLists; - exports._mergeObj = _mergeObj; - exports._isMessageFieldWithRole = _isMessageFieldWithRole; - exports.isBaseMessage = isBaseMessage; - exports.isBaseMessageChunk = isBaseMessageChunk; - var serializable_js_1 = require_serializable(); - var content_blocks_js_1 = require_content_blocks(); - function mergeContent(firstContent, secondContent) { - if (typeof firstContent === "string") { - if (firstContent === "") { - return secondContent; - } - if (typeof secondContent === "string") { - return firstContent + secondContent; - } else if (Array.isArray(secondContent) && secondContent.some((c) => (0, content_blocks_js_1.isDataContentBlock)(c))) { - return [ - { - type: "text", - source_type: "text", - text: firstContent - }, - ...secondContent - ]; - } else { - return [{ type: "text", text: firstContent }, ...secondContent]; - } - } else if (Array.isArray(secondContent)) { - return _mergeLists(firstContent, secondContent) ?? [ - ...firstContent, - ...secondContent - ]; - } else { - if (secondContent === "") { - return firstContent; - } else if (Array.isArray(firstContent) && firstContent.some((c) => (0, content_blocks_js_1.isDataContentBlock)(c))) { - return [ - ...firstContent, - { - type: "file", - source_type: "text", - text: secondContent - } - ]; - } else { - return [...firstContent, { type: "text", text: secondContent }]; - } - } - } - function _mergeStatus(left, right) { - if (left === "error" || right === "error") { - return "error"; - } - return "success"; - } - function stringifyWithDepthLimit(obj, depthLimit) { - function helper(obj2, currentDepth) { - if (typeof obj2 !== "object" || obj2 === null || obj2 === undefined) { - return obj2; - } - if (currentDepth >= depthLimit) { - if (Array.isArray(obj2)) { - return "[Array]"; - } - return "[Object]"; - } - if (Array.isArray(obj2)) { - return obj2.map((item) => helper(item, currentDepth + 1)); - } - const result = {}; - for (const key of Object.keys(obj2)) { - result[key] = helper(obj2[key], currentDepth + 1); - } - return result; - } - return JSON.stringify(helper(obj, 0), null, 2); - } - - class BaseMessage extends serializable_js_1.Serializable { - get lc_aliases() { - return { - additional_kwargs: "additional_kwargs", - response_metadata: "response_metadata" - }; - } - get text() { - if (typeof this.content === "string") { - return this.content; - } - if (!Array.isArray(this.content)) - return ""; - return this.content.map((c) => { - if (typeof c === "string") - return c; - if (c.type === "text") - return c.text; - return ""; - }).join(""); - } - getType() { - return this._getType(); - } - constructor(fields, kwargs) { - if (typeof fields === "string") { - fields = { - content: fields, - additional_kwargs: kwargs, - response_metadata: {} - }; - } - if (!fields.additional_kwargs) { - fields.additional_kwargs = {}; - } - if (!fields.response_metadata) { - fields.response_metadata = {}; - } - super(fields); - Object.defineProperty(this, "lc_namespace", { - enumerable: true, - configurable: true, - writable: true, - value: ["langchain_core", "messages"] - }); - Object.defineProperty(this, "lc_serializable", { - enumerable: true, - configurable: true, - writable: true, - value: true - }); - Object.defineProperty(this, "content", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "additional_kwargs", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "response_metadata", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.name = fields.name; - this.content = fields.content; - this.additional_kwargs = fields.additional_kwargs; - this.response_metadata = fields.response_metadata; - this.id = fields.id; - } - toDict() { - return { - type: this._getType(), - data: this.toJSON().kwargs - }; - } - static lc_name() { - return "BaseMessage"; - } - get _printableFields() { - return { - id: this.id, - content: this.content, - name: this.name, - additional_kwargs: this.additional_kwargs, - response_metadata: this.response_metadata - }; - } - _updateId(value) { - this.id = value; - this.lc_kwargs.id = value; - } - get [Symbol.toStringTag]() { - return this.constructor.lc_name(); - } - [Symbol.for("nodejs.util.inspect.custom")](depth) { - if (depth === null) { - return this; - } - const printable = stringifyWithDepthLimit(this._printableFields, Math.max(4, depth)); - return `${this.constructor.lc_name()} ${printable}`; - } - } - exports.BaseMessage = BaseMessage; - function isOpenAIToolCallArray(value) { - return Array.isArray(value) && value.every((v) => typeof v.index === "number"); - } - function _mergeDicts(left, right) { - const merged = { ...left }; - for (const [key, value] of Object.entries(right)) { - if (merged[key] == null) { - merged[key] = value; - } else if (value == null) { - continue; - } else if (typeof merged[key] !== typeof value || Array.isArray(merged[key]) !== Array.isArray(value)) { - throw new Error(`field[${key}] already exists in the message chunk, but with a different type.`); - } else if (typeof merged[key] === "string") { - if (key === "type") { - continue; - } else if (["id", "name", "output_version", "model_provider"].includes(key)) { - merged[key] = value; - } else { - merged[key] += value; - } - } else if (typeof merged[key] === "object" && !Array.isArray(merged[key])) { - merged[key] = _mergeDicts(merged[key], value); - } else if (Array.isArray(merged[key])) { - merged[key] = _mergeLists(merged[key], value); - } else if (merged[key] === value) { - continue; - } else { - console.warn(`field[${key}] already exists in this message chunk and value has unsupported type.`); - } - } - return merged; - } - function _mergeLists(left, right) { - if (left === undefined && right === undefined) { - return; - } else if (left === undefined || right === undefined) { - return left || right; - } else { - const merged = [...left]; - for (const item of right) { - if (typeof item === "object" && item !== null && "index" in item && typeof item.index === "number") { - const toMerge = merged.findIndex((leftItem) => { - const isObject2 = typeof leftItem === "object"; - const indiciesMatch = "index" in leftItem && leftItem.index === item.index; - const idsMatch = "id" in leftItem && "id" in item && leftItem?.id === item?.id; - const eitherItemMissingID = !("id" in leftItem) || !leftItem?.id || !("id" in item) || !item?.id; - return isObject2 && indiciesMatch && (idsMatch || eitherItemMissingID); - }); - if (toMerge !== -1 && typeof merged[toMerge] === "object" && merged[toMerge] !== null) { - merged[toMerge] = _mergeDicts(merged[toMerge], item); - } else { - merged.push(item); - } - } else if (typeof item === "object" && item !== null && "text" in item && item.text === "") { - continue; - } else { - merged.push(item); - } - } - return merged; - } - } - function _mergeObj(left, right) { - if (!left && !right) { - throw new Error("Cannot merge two undefined objects."); - } - if (!left || !right) { - return left || right; - } else if (typeof left !== typeof right) { - throw new Error(`Cannot merge objects of different types. -Left ${typeof left} -Right ${typeof right}`); - } else if (typeof left === "string" && typeof right === "string") { - return left + right; - } else if (Array.isArray(left) && Array.isArray(right)) { - return _mergeLists(left, right); - } else if (typeof left === "object" && typeof right === "object") { - return _mergeDicts(left, right); - } else if (left === right) { - return left; - } else { - throw new Error(`Can not merge objects of different types. -Left ${left} -Right ${right}`); - } - } - - class BaseMessageChunk extends BaseMessage { - } - exports.BaseMessageChunk = BaseMessageChunk; - function _isMessageFieldWithRole(x) { - return typeof x.role === "string"; - } - function isBaseMessage(messageLike) { - return typeof messageLike?._getType === "function"; - } - function isBaseMessageChunk(messageLike) { - return isBaseMessage(messageLike) && typeof messageLike.concat === "function"; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/tool.cjs -var require_tool = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ToolMessageChunk = exports.ToolMessage = undefined; - exports.isDirectToolOutput = isDirectToolOutput; - exports.defaultToolCallParser = defaultToolCallParser; - exports.isToolMessage = isToolMessage; - exports.isToolMessageChunk = isToolMessageChunk; - var base_js_1 = require_base3(); - function isDirectToolOutput(x) { - return x != null && typeof x === "object" && "lc_direct_tool_output" in x && x.lc_direct_tool_output === true; - } - - class ToolMessage extends base_js_1.BaseMessage { - static lc_name() { - return "ToolMessage"; - } - get lc_aliases() { - return { tool_call_id: "tool_call_id" }; - } - constructor(fields, tool_call_id, name) { - if (typeof fields === "string") { - fields = { content: fields, name, tool_call_id }; - } - super(fields); - Object.defineProperty(this, "lc_direct_tool_output", { - enumerable: true, - configurable: true, - writable: true, - value: true - }); - Object.defineProperty(this, "status", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "tool_call_id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "metadata", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "artifact", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.tool_call_id = fields.tool_call_id; - this.artifact = fields.artifact; - this.status = fields.status; - this.metadata = fields.metadata; - } - _getType() { - return "tool"; - } - static isInstance(message) { - return message._getType() === "tool"; - } - get _printableFields() { - return { - ...super._printableFields, - tool_call_id: this.tool_call_id, - artifact: this.artifact - }; - } - } - exports.ToolMessage = ToolMessage; - - class ToolMessageChunk extends base_js_1.BaseMessageChunk { - constructor(fields) { - super(fields); - Object.defineProperty(this, "tool_call_id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "status", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "artifact", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.tool_call_id = fields.tool_call_id; - this.artifact = fields.artifact; - this.status = fields.status; - } - static lc_name() { - return "ToolMessageChunk"; - } - _getType() { - return "tool"; - } - concat(chunk) { - return new ToolMessageChunk({ - content: (0, base_js_1.mergeContent)(this.content, chunk.content), - additional_kwargs: (0, base_js_1._mergeDicts)(this.additional_kwargs, chunk.additional_kwargs), - response_metadata: (0, base_js_1._mergeDicts)(this.response_metadata, chunk.response_metadata), - artifact: (0, base_js_1._mergeObj)(this.artifact, chunk.artifact), - tool_call_id: this.tool_call_id, - id: this.id ?? chunk.id, - status: (0, base_js_1._mergeStatus)(this.status, chunk.status) - }); - } - get _printableFields() { - return { - ...super._printableFields, - tool_call_id: this.tool_call_id, - artifact: this.artifact - }; - } - } - exports.ToolMessageChunk = ToolMessageChunk; - function defaultToolCallParser(rawToolCalls) { - const toolCalls = []; - const invalidToolCalls = []; - for (const toolCall of rawToolCalls) { - if (!toolCall.function) { - continue; - } else { - const functionName = toolCall.function.name; - try { - const functionArgs = JSON.parse(toolCall.function.arguments); - const parsed = { - name: functionName || "", - args: functionArgs || {}, - id: toolCall.id - }; - toolCalls.push(parsed); - } catch (error48) { - invalidToolCalls.push({ - name: functionName, - args: toolCall.function.arguments, - id: toolCall.id, - error: "Malformed args." - }); - } - } - } - return [toolCalls, invalidToolCalls]; - } - function isToolMessage(x) { - return x._getType() === "tool"; - } - function isToolMessageChunk(x) { - return x._getType() === "tool"; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/ai.cjs -var require_ai = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AIMessageChunk = exports.AIMessage = undefined; - exports.isAIMessage = isAIMessage; - exports.isAIMessageChunk = isAIMessageChunk; - var json_js_1 = require_json7(); - var base_js_1 = require_base3(); - var tool_js_1 = require_tool(); - - class AIMessage extends base_js_1.BaseMessage { - get lc_aliases() { - return { - ...super.lc_aliases, - tool_calls: "tool_calls", - invalid_tool_calls: "invalid_tool_calls" - }; - } - constructor(fields, kwargs) { - let initParams; - if (typeof fields === "string") { - initParams = { - content: fields, - tool_calls: [], - invalid_tool_calls: [], - additional_kwargs: kwargs ?? {} - }; - } else { - initParams = fields; - const rawToolCalls = initParams.additional_kwargs?.tool_calls; - const toolCalls = initParams.tool_calls; - if (!(rawToolCalls == null) && rawToolCalls.length > 0 && (toolCalls === undefined || toolCalls.length === 0)) { - console.warn([ - "New LangChain packages are available that more efficiently handle", - `tool calling. - -Please upgrade your packages to versions that set`, - "message tool calls. e.g., `yarn add @langchain/anthropic`,", - "yarn add @langchain/openai`, etc." - ].join(" ")); - } - try { - if (!(rawToolCalls == null) && toolCalls === undefined) { - const [toolCalls2, invalidToolCalls] = (0, tool_js_1.defaultToolCallParser)(rawToolCalls); - initParams.tool_calls = toolCalls2 ?? []; - initParams.invalid_tool_calls = invalidToolCalls ?? []; - } else { - initParams.tool_calls = initParams.tool_calls ?? []; - initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? []; - } - } catch (e) { - initParams.tool_calls = []; - initParams.invalid_tool_calls = []; - } - } - super(initParams); - Object.defineProperty(this, "tool_calls", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "invalid_tool_calls", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "usage_metadata", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - if (typeof initParams !== "string") { - this.tool_calls = initParams.tool_calls ?? this.tool_calls; - this.invalid_tool_calls = initParams.invalid_tool_calls ?? this.invalid_tool_calls; - } - this.usage_metadata = initParams.usage_metadata; - } - static lc_name() { - return "AIMessage"; - } - _getType() { - return "ai"; - } - get _printableFields() { - return { - ...super._printableFields, - tool_calls: this.tool_calls, - invalid_tool_calls: this.invalid_tool_calls, - usage_metadata: this.usage_metadata - }; - } - } - exports.AIMessage = AIMessage; - function isAIMessage(x) { - return x._getType() === "ai"; - } - function isAIMessageChunk(x) { - return x._getType() === "ai"; - } - - class AIMessageChunk extends base_js_1.BaseMessageChunk { - constructor(fields) { - let initParams; - if (typeof fields === "string") { - initParams = { - content: fields, - tool_calls: [], - invalid_tool_calls: [], - tool_call_chunks: [] - }; - } else if (fields.tool_call_chunks === undefined || fields.tool_call_chunks.length === 0) { - initParams = { - ...fields, - tool_calls: fields.tool_calls ?? [], - invalid_tool_calls: [], - tool_call_chunks: [], - usage_metadata: fields.usage_metadata !== undefined ? fields.usage_metadata : undefined - }; - } else { - const toolCallChunks = fields.tool_call_chunks ?? []; - const groupedToolCallChunks = toolCallChunks.reduce((acc, chunk) => { - const matchedChunkIndex = acc.findIndex(([match2]) => { - if ("id" in chunk && chunk.id && "index" in chunk && chunk.index !== undefined) { - return chunk.id === match2.id && chunk.index === match2.index; - } - if ("id" in chunk && chunk.id) { - return chunk.id === match2.id; - } - if ("index" in chunk && chunk.index !== undefined) { - return chunk.index === match2.index; - } - return false; - }); - if (matchedChunkIndex !== -1) { - acc[matchedChunkIndex].push(chunk); - } else { - acc.push([chunk]); - } - return acc; - }, []); - const toolCalls = []; - const invalidToolCalls = []; - for (const chunks of groupedToolCallChunks) { - let parsedArgs = {}; - const name = chunks[0]?.name ?? ""; - const joinedArgs = chunks.map((c) => c.args || "").join(""); - const argsStr = joinedArgs.length ? joinedArgs : "{}"; - const id = chunks[0]?.id; - try { - parsedArgs = (0, json_js_1.parsePartialJson)(argsStr); - if (!id || parsedArgs === null || typeof parsedArgs !== "object" || Array.isArray(parsedArgs)) { - throw new Error("Malformed tool call chunk args."); - } - toolCalls.push({ - name, - args: parsedArgs, - id, - type: "tool_call" - }); - } catch (e) { - invalidToolCalls.push({ - name, - args: argsStr, - id, - error: "Malformed args.", - type: "invalid_tool_call" - }); - } - } - initParams = { - ...fields, - tool_calls: toolCalls, - invalid_tool_calls: invalidToolCalls, - usage_metadata: fields.usage_metadata !== undefined ? fields.usage_metadata : undefined - }; - } - super(initParams); - Object.defineProperty(this, "tool_calls", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "invalid_tool_calls", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "tool_call_chunks", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "usage_metadata", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.tool_call_chunks = initParams.tool_call_chunks ?? this.tool_call_chunks; - this.tool_calls = initParams.tool_calls ?? this.tool_calls; - this.invalid_tool_calls = initParams.invalid_tool_calls ?? this.invalid_tool_calls; - this.usage_metadata = initParams.usage_metadata; - } - get lc_aliases() { - return { - ...super.lc_aliases, - tool_calls: "tool_calls", - invalid_tool_calls: "invalid_tool_calls", - tool_call_chunks: "tool_call_chunks" - }; - } - static lc_name() { - return "AIMessageChunk"; - } - _getType() { - return "ai"; - } - get _printableFields() { - return { - ...super._printableFields, - tool_calls: this.tool_calls, - tool_call_chunks: this.tool_call_chunks, - invalid_tool_calls: this.invalid_tool_calls, - usage_metadata: this.usage_metadata - }; - } - concat(chunk) { - const combinedFields = { - content: (0, base_js_1.mergeContent)(this.content, chunk.content), - additional_kwargs: (0, base_js_1._mergeDicts)(this.additional_kwargs, chunk.additional_kwargs), - response_metadata: (0, base_js_1._mergeDicts)(this.response_metadata, chunk.response_metadata), - tool_call_chunks: [], - id: this.id ?? chunk.id - }; - if (this.tool_call_chunks !== undefined || chunk.tool_call_chunks !== undefined) { - const rawToolCalls = (0, base_js_1._mergeLists)(this.tool_call_chunks, chunk.tool_call_chunks); - if (rawToolCalls !== undefined && rawToolCalls.length > 0) { - combinedFields.tool_call_chunks = rawToolCalls; - } - } - if (this.usage_metadata !== undefined || chunk.usage_metadata !== undefined) { - const inputTokenDetails = { - ...(this.usage_metadata?.input_token_details?.audio !== undefined || chunk.usage_metadata?.input_token_details?.audio !== undefined) && { - audio: (this.usage_metadata?.input_token_details?.audio ?? 0) + (chunk.usage_metadata?.input_token_details?.audio ?? 0) - }, - ...(this.usage_metadata?.input_token_details?.cache_read !== undefined || chunk.usage_metadata?.input_token_details?.cache_read !== undefined) && { - cache_read: (this.usage_metadata?.input_token_details?.cache_read ?? 0) + (chunk.usage_metadata?.input_token_details?.cache_read ?? 0) - }, - ...(this.usage_metadata?.input_token_details?.cache_creation !== undefined || chunk.usage_metadata?.input_token_details?.cache_creation !== undefined) && { - cache_creation: (this.usage_metadata?.input_token_details?.cache_creation ?? 0) + (chunk.usage_metadata?.input_token_details?.cache_creation ?? 0) - } - }; - const outputTokenDetails = { - ...(this.usage_metadata?.output_token_details?.audio !== undefined || chunk.usage_metadata?.output_token_details?.audio !== undefined) && { - audio: (this.usage_metadata?.output_token_details?.audio ?? 0) + (chunk.usage_metadata?.output_token_details?.audio ?? 0) - }, - ...(this.usage_metadata?.output_token_details?.reasoning !== undefined || chunk.usage_metadata?.output_token_details?.reasoning !== undefined) && { - reasoning: (this.usage_metadata?.output_token_details?.reasoning ?? 0) + (chunk.usage_metadata?.output_token_details?.reasoning ?? 0) - } - }; - const left = this.usage_metadata ?? { - input_tokens: 0, - output_tokens: 0, - total_tokens: 0 - }; - const right = chunk.usage_metadata ?? { - input_tokens: 0, - output_tokens: 0, - total_tokens: 0 - }; - const usage_metadata = { - input_tokens: left.input_tokens + right.input_tokens, - output_tokens: left.output_tokens + right.output_tokens, - total_tokens: left.total_tokens + right.total_tokens, - ...Object.keys(inputTokenDetails).length > 0 && { - input_token_details: inputTokenDetails - }, - ...Object.keys(outputTokenDetails).length > 0 && { - output_token_details: outputTokenDetails - } - }; - combinedFields.usage_metadata = usage_metadata; - } - return new AIMessageChunk(combinedFields); - } - } - exports.AIMessageChunk = AIMessageChunk; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/chat.cjs -var require_chat = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ChatMessageChunk = exports.ChatMessage = undefined; - exports.isChatMessage = isChatMessage; - exports.isChatMessageChunk = isChatMessageChunk; - var base_js_1 = require_base3(); - - class ChatMessage extends base_js_1.BaseMessage { - static lc_name() { - return "ChatMessage"; - } - static _chatMessageClass() { - return ChatMessage; - } - constructor(fields, role) { - if (typeof fields === "string") { - fields = { content: fields, role }; - } - super(fields); - Object.defineProperty(this, "role", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.role = fields.role; - } - _getType() { - return "generic"; - } - static isInstance(message) { - return message._getType() === "generic"; - } - get _printableFields() { - return { - ...super._printableFields, - role: this.role - }; - } - } - exports.ChatMessage = ChatMessage; - - class ChatMessageChunk extends base_js_1.BaseMessageChunk { - static lc_name() { - return "ChatMessageChunk"; - } - constructor(fields, role) { - if (typeof fields === "string") { - fields = { content: fields, role }; - } - super(fields); - Object.defineProperty(this, "role", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.role = fields.role; - } - _getType() { - return "generic"; - } - concat(chunk) { - return new ChatMessageChunk({ - content: (0, base_js_1.mergeContent)(this.content, chunk.content), - additional_kwargs: (0, base_js_1._mergeDicts)(this.additional_kwargs, chunk.additional_kwargs), - response_metadata: (0, base_js_1._mergeDicts)(this.response_metadata, chunk.response_metadata), - role: this.role, - id: this.id ?? chunk.id - }); - } - get _printableFields() { - return { - ...super._printableFields, - role: this.role - }; - } - } - exports.ChatMessageChunk = ChatMessageChunk; - function isChatMessage(x) { - return x._getType() === "generic"; - } - function isChatMessageChunk(x) { - return x._getType() === "generic"; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/function.cjs -var require_function = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.FunctionMessageChunk = exports.FunctionMessage = undefined; - exports.isFunctionMessage = isFunctionMessage; - exports.isFunctionMessageChunk = isFunctionMessageChunk; - var base_js_1 = require_base3(); - - class FunctionMessage extends base_js_1.BaseMessage { - static lc_name() { - return "FunctionMessage"; - } - constructor(fields, name) { - if (typeof fields === "string") { - fields = { content: fields, name }; - } - super(fields); - } - _getType() { - return "function"; - } - } - exports.FunctionMessage = FunctionMessage; - - class FunctionMessageChunk extends base_js_1.BaseMessageChunk { - static lc_name() { - return "FunctionMessageChunk"; - } - _getType() { - return "function"; - } - concat(chunk) { - return new FunctionMessageChunk({ - content: (0, base_js_1.mergeContent)(this.content, chunk.content), - additional_kwargs: (0, base_js_1._mergeDicts)(this.additional_kwargs, chunk.additional_kwargs), - response_metadata: (0, base_js_1._mergeDicts)(this.response_metadata, chunk.response_metadata), - name: this.name ?? "", - id: this.id ?? chunk.id - }); - } - } - exports.FunctionMessageChunk = FunctionMessageChunk; - function isFunctionMessage(x) { - return x._getType() === "function"; - } - function isFunctionMessageChunk(x) { - return x._getType() === "function"; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/human.cjs -var require_human = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.HumanMessageChunk = exports.HumanMessage = undefined; - exports.isHumanMessage = isHumanMessage; - exports.isHumanMessageChunk = isHumanMessageChunk; - var base_js_1 = require_base3(); - - class HumanMessage extends base_js_1.BaseMessage { - static lc_name() { - return "HumanMessage"; - } - _getType() { - return "human"; - } - constructor(fields, kwargs) { - super(fields, kwargs); - } - } - exports.HumanMessage = HumanMessage; - - class HumanMessageChunk extends base_js_1.BaseMessageChunk { - static lc_name() { - return "HumanMessageChunk"; - } - _getType() { - return "human"; - } - constructor(fields, kwargs) { - super(fields, kwargs); - } - concat(chunk) { - return new HumanMessageChunk({ - content: (0, base_js_1.mergeContent)(this.content, chunk.content), - additional_kwargs: (0, base_js_1._mergeDicts)(this.additional_kwargs, chunk.additional_kwargs), - response_metadata: (0, base_js_1._mergeDicts)(this.response_metadata, chunk.response_metadata), - id: this.id ?? chunk.id - }); - } - } - exports.HumanMessageChunk = HumanMessageChunk; - function isHumanMessage(x) { - return x.getType() === "human"; - } - function isHumanMessageChunk(x) { - return x.getType() === "human"; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/modifier.cjs -var require_modifier = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.RemoveMessage = undefined; - var base_js_1 = require_base3(); - - class RemoveMessage extends base_js_1.BaseMessage { - constructor(fields) { - super({ - ...fields, - content: "" - }); - Object.defineProperty(this, "id", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.id = fields.id; - } - _getType() { - return "remove"; - } - get _printableFields() { - return { - ...super._printableFields, - id: this.id - }; - } - } - exports.RemoveMessage = RemoveMessage; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/system.cjs -var require_system = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.SystemMessageChunk = exports.SystemMessage = undefined; - exports.isSystemMessage = isSystemMessage; - exports.isSystemMessageChunk = isSystemMessageChunk; - var base_js_1 = require_base3(); - - class SystemMessage extends base_js_1.BaseMessage { - static lc_name() { - return "SystemMessage"; - } - _getType() { - return "system"; - } - constructor(fields, kwargs) { - super(fields, kwargs); - } - } - exports.SystemMessage = SystemMessage; - - class SystemMessageChunk extends base_js_1.BaseMessageChunk { - static lc_name() { - return "SystemMessageChunk"; - } - _getType() { - return "system"; - } - constructor(fields, kwargs) { - super(fields, kwargs); - } - concat(chunk) { - return new SystemMessageChunk({ - content: (0, base_js_1.mergeContent)(this.content, chunk.content), - additional_kwargs: (0, base_js_1._mergeDicts)(this.additional_kwargs, chunk.additional_kwargs), - response_metadata: (0, base_js_1._mergeDicts)(this.response_metadata, chunk.response_metadata), - id: this.id ?? chunk.id - }); - } - } - exports.SystemMessageChunk = SystemMessageChunk; - function isSystemMessage(x) { - return x._getType() === "system"; - } - function isSystemMessageChunk(x) { - return x._getType() === "system"; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/messages/utils.cjs -var require_utils54 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.coerceMessageLikeToMessage = coerceMessageLikeToMessage; - exports.getBufferString = getBufferString; - exports.mapStoredMessageToChatMessage = mapStoredMessageToChatMessage; - exports.mapStoredMessagesToChatMessages = mapStoredMessagesToChatMessages; - exports.mapChatMessagesToStoredMessages = mapChatMessagesToStoredMessages; - exports.convertToChunk = convertToChunk; - var index_js_1 = require_errors(); - var utils_js_1 = require_utils53(); - var ai_js_1 = require_ai(); - var base_js_1 = require_base3(); - var chat_js_1 = require_chat(); - var function_js_1 = require_function(); - var human_js_1 = require_human(); - var modifier_js_1 = require_modifier(); - var system_js_1 = require_system(); - var tool_js_1 = require_tool(); - function _coerceToolCall(toolCall) { - if ((0, utils_js_1._isToolCall)(toolCall)) { - return toolCall; - } else if (typeof toolCall.id === "string" && toolCall.type === "function" && typeof toolCall.function === "object" && toolCall.function !== null && "arguments" in toolCall.function && typeof toolCall.function.arguments === "string" && "name" in toolCall.function && typeof toolCall.function.name === "string") { - return { - id: toolCall.id, - args: JSON.parse(toolCall.function.arguments), - name: toolCall.function.name, - type: "tool_call" - }; - } else { - return toolCall; - } - } - function isSerializedConstructor(x) { - return typeof x === "object" && x != null && x.lc === 1 && Array.isArray(x.id) && x.kwargs != null && typeof x.kwargs === "object"; - } - function _constructMessageFromParams(params) { - let type; - let rest; - if (isSerializedConstructor(params)) { - const className = params.id.at(-1); - if (className === "HumanMessage" || className === "HumanMessageChunk") { - type = "user"; - } else if (className === "AIMessage" || className === "AIMessageChunk") { - type = "assistant"; - } else if (className === "SystemMessage" || className === "SystemMessageChunk") { - type = "system"; - } else if (className === "FunctionMessage" || className === "FunctionMessageChunk") { - type = "function"; - } else if (className === "ToolMessage" || className === "ToolMessageChunk") { - type = "tool"; - } else { - type = "unknown"; - } - rest = params.kwargs; - } else { - const { type: extractedType, ...otherParams } = params; - type = extractedType; - rest = otherParams; - } - if (type === "human" || type === "user") { - return new human_js_1.HumanMessage(rest); - } else if (type === "ai" || type === "assistant") { - const { tool_calls: rawToolCalls, ...other } = rest; - if (!Array.isArray(rawToolCalls)) { - return new ai_js_1.AIMessage(rest); - } - const tool_calls = rawToolCalls.map(_coerceToolCall); - return new ai_js_1.AIMessage({ ...other, tool_calls }); - } else if (type === "system") { - return new system_js_1.SystemMessage(rest); - } else if (type === "developer") { - return new system_js_1.SystemMessage({ - ...rest, - additional_kwargs: { - ...rest.additional_kwargs, - __openai_role__: "developer" - } - }); - } else if (type === "tool" && "tool_call_id" in rest) { - return new tool_js_1.ToolMessage({ - ...rest, - content: rest.content, - tool_call_id: rest.tool_call_id, - name: rest.name - }); - } else if (type === "remove" && "id" in rest && typeof rest.id === "string") { - return new modifier_js_1.RemoveMessage({ ...rest, id: rest.id }); - } else { - const error48 = (0, index_js_1.addLangChainErrorFields)(new Error(`Unable to coerce message from array: only human, AI, system, developer, or tool message coercion is currently supported. - -Received: ${JSON.stringify(params, null, 2)}`), "MESSAGE_COERCION_FAILURE"); - throw error48; - } - } - function coerceMessageLikeToMessage(messageLike) { - if (typeof messageLike === "string") { - return new human_js_1.HumanMessage(messageLike); - } else if ((0, base_js_1.isBaseMessage)(messageLike)) { - return messageLike; - } - if (Array.isArray(messageLike)) { - const [type, content] = messageLike; - return _constructMessageFromParams({ type, content }); - } else if ((0, base_js_1._isMessageFieldWithRole)(messageLike)) { - const { role: type, ...rest } = messageLike; - return _constructMessageFromParams({ ...rest, type }); - } else { - return _constructMessageFromParams(messageLike); - } - } - function getBufferString(messages, humanPrefix = "Human", aiPrefix = "AI") { - const string_messages = []; - for (const m of messages) { - let role; - if (m._getType() === "human") { - role = humanPrefix; - } else if (m._getType() === "ai") { - role = aiPrefix; - } else if (m._getType() === "system") { - role = "System"; - } else if (m._getType() === "function") { - role = "Function"; - } else if (m._getType() === "tool") { - role = "Tool"; - } else if (m._getType() === "generic") { - role = m.role; - } else { - throw new Error(`Got unsupported message type: ${m._getType()}`); - } - const nameStr = m.name ? `${m.name}, ` : ""; - const readableContent = typeof m.content === "string" ? m.content : JSON.stringify(m.content, null, 2); - string_messages.push(`${role}: ${nameStr}${readableContent}`); - } - return string_messages.join(` -`); - } - function mapV1MessageToStoredMessage(message) { - if (message.data !== undefined) { - return message; - } else { - const v1Message = message; - return { - type: v1Message.type, - data: { - content: v1Message.text, - role: v1Message.role, - name: undefined, - tool_call_id: undefined - } - }; - } - } - function mapStoredMessageToChatMessage(message) { - const storedMessage = mapV1MessageToStoredMessage(message); - switch (storedMessage.type) { - case "human": - return new human_js_1.HumanMessage(storedMessage.data); - case "ai": - return new ai_js_1.AIMessage(storedMessage.data); - case "system": - return new system_js_1.SystemMessage(storedMessage.data); - case "function": - if (storedMessage.data.name === undefined) { - throw new Error("Name must be defined for function messages"); - } - return new function_js_1.FunctionMessage(storedMessage.data); - case "tool": - if (storedMessage.data.tool_call_id === undefined) { - throw new Error("Tool call ID must be defined for tool messages"); - } - return new tool_js_1.ToolMessage(storedMessage.data); - case "generic": { - if (storedMessage.data.role === undefined) { - throw new Error("Role must be defined for chat messages"); - } - return new chat_js_1.ChatMessage(storedMessage.data); - } - default: - throw new Error(`Got unexpected type: ${storedMessage.type}`); - } - } - function mapStoredMessagesToChatMessages(messages) { - return messages.map(mapStoredMessageToChatMessage); - } - function mapChatMessagesToStoredMessages(messages) { - return messages.map((message) => message.toDict()); - } - function convertToChunk(message) { - const type = message._getType(); - if (type === "human") { - return new human_js_1.HumanMessageChunk({ ...message }); - } else if (type === "ai") { - let aiChunkFields = { - ...message - }; - if ("tool_calls" in aiChunkFields) { - aiChunkFields = { - ...aiChunkFields, - tool_call_chunks: aiChunkFields.tool_calls?.map((tc) => ({ - ...tc, - type: "tool_call_chunk", - index: undefined, - args: JSON.stringify(tc.args) - })) - }; - } - return new ai_js_1.AIMessageChunk({ ...aiChunkFields }); - } else if (type === "system") { - return new system_js_1.SystemMessageChunk({ ...message }); - } else if (type === "function") { - return new function_js_1.FunctionMessageChunk({ ...message }); - } else if (chat_js_1.ChatMessage.isInstance(message)) { - return new chat_js_1.ChatMessageChunk({ ...message }); - } else { - throw new Error("Unknown message type."); - } - } -}); - -// ../../../../node_modules/.bun/langsmith@0.3.87+966709f559724cab/node_modules/langsmith/dist/singletons/traceable.cjs -var require_traceable = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ROOT = exports.AsyncLocalStorageProviderSingleton = undefined; - exports.getCurrentRunTree = getCurrentRunTree; - exports.withRunTree = withRunTree; - exports.isTraceableFunction = isTraceableFunction; - - class MockAsyncLocalStorage { - getStore() { - return; - } - run(_, callback) { - return callback(); - } - } - var TRACING_ALS_KEY = Symbol.for("ls:tracing_async_local_storage"); - var mockAsyncLocalStorage = new MockAsyncLocalStorage; - - class AsyncLocalStorageProvider { - getInstance() { - return globalThis[TRACING_ALS_KEY] ?? mockAsyncLocalStorage; - } - initializeGlobalInstance(instance) { - if (globalThis[TRACING_ALS_KEY] === undefined) { - globalThis[TRACING_ALS_KEY] = instance; - } - } - } - exports.AsyncLocalStorageProviderSingleton = new AsyncLocalStorageProvider; - function getCurrentRunTree(permitAbsentRunTree = false) { - const runTree = exports.AsyncLocalStorageProviderSingleton.getInstance().getStore(); - if (!permitAbsentRunTree && runTree === undefined) { - throw new Error(`Could not get the current run tree. - -Please make sure you are calling this method within a traceable function and that tracing is enabled.`); - } - return runTree; - } - function withRunTree(runTree, fn) { - const storage = exports.AsyncLocalStorageProviderSingleton.getInstance(); - return new Promise((resolve2, reject) => { - storage.run(runTree, () => void Promise.resolve(fn()).then(resolve2).catch(reject)); - }); - } - exports.ROOT = Symbol.for("langsmith:traceable:root"); - function isTraceableFunction(x) { - return typeof x === "function" && "langsmith:traceable" in x; - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/singletons/tracer.cjs -var require_tracer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.setDefaultLangChainClientSingleton = exports.getDefaultLangChainClientSingleton = undefined; - var langsmith_1 = require_dist5(); - var env_js_1 = require_env(); - var client; - var getDefaultLangChainClientSingleton = () => { - if (client === undefined) { - const clientParams = (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_CALLBACKS_BACKGROUND") === "false" ? { - blockOnRootRunFinalization: true - } : {}; - client = new langsmith_1.Client(clientParams); - } - return client; - }; - exports.getDefaultLangChainClientSingleton = getDefaultLangChainClientSingleton; - var setDefaultLangChainClientSingleton = (newClient) => { - client = newClient; - }; - exports.setDefaultLangChainClientSingleton = setDefaultLangChainClientSingleton; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/tracers/tracer_langchain.cjs -var require_tracer_langchain = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.LangChainTracer = undefined; - var langsmith_1 = require_dist5(); - var run_trees_1 = require_run_trees(); - var traceable_1 = require_traceable(); - var base_js_1 = require_base2(); - var tracer_js_1 = require_tracer(); - - class LangChainTracer extends base_js_1.BaseTracer { - constructor(fields = {}) { - super(fields); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: "langchain_tracer" - }); - Object.defineProperty(this, "projectName", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "exampleId", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "client", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "replicas", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - Object.defineProperty(this, "usesRunTreeMap", { - enumerable: true, - configurable: true, - writable: true, - value: true - }); - const { exampleId, projectName, client, replicas } = fields; - this.projectName = projectName ?? (0, langsmith_1.getDefaultProjectName)(); - this.replicas = replicas; - this.exampleId = exampleId; - this.client = client ?? (0, tracer_js_1.getDefaultLangChainClientSingleton)(); - const traceableTree = LangChainTracer.getTraceableRunTree(); - if (traceableTree) { - this.updateFromRunTree(traceableTree); - } - } - async persistRun(_run) {} - async onRunCreate(run) { - const runTree = this.getRunTreeWithTracingConfig(run.id); - await runTree?.postRun(); - } - async onRunUpdate(run) { - const runTree = this.getRunTreeWithTracingConfig(run.id); - await runTree?.patchRun(); - } - getRun(id) { - return this.runTreeMap.get(id); - } - updateFromRunTree(runTree) { - this.runTreeMap.set(runTree.id, runTree); - let rootRun = runTree; - const visited = new Set; - while (rootRun.parent_run) { - if (visited.has(rootRun.id)) - break; - visited.add(rootRun.id); - if (!rootRun.parent_run) - break; - rootRun = rootRun.parent_run; - } - visited.clear(); - const queue = [rootRun]; - while (queue.length > 0) { - const current = queue.shift(); - if (!current || visited.has(current.id)) - continue; - visited.add(current.id); - this.runTreeMap.set(current.id, current); - if (current.child_runs) { - queue.push(...current.child_runs); - } - } - this.client = runTree.client ?? this.client; - this.replicas = runTree.replicas ?? this.replicas; - this.projectName = runTree.project_name ?? this.projectName; - this.exampleId = runTree.reference_example_id ?? this.exampleId; - } - getRunTreeWithTracingConfig(id) { - const runTree = this.runTreeMap.get(id); - if (!runTree) - return; - return new run_trees_1.RunTree({ - ...runTree, - client: this.client, - project_name: this.projectName, - replicas: this.replicas, - reference_example_id: this.exampleId, - tracingEnabled: true - }); - } - static getTraceableRunTree() { - try { - return traceable_1.getCurrentRunTree(true); - } catch { - return; - } - } - } - exports.LangChainTracer = LangChainTracer; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/singletons/async_local_storage/globals.cjs -var require_globals = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getGlobalAsyncLocalStorageInstance = exports.setGlobalAsyncLocalStorageInstance = exports._CONTEXT_VARIABLES_KEY = exports.TRACING_ALS_KEY = undefined; - exports.TRACING_ALS_KEY = Symbol.for("ls:tracing_async_local_storage"); - exports._CONTEXT_VARIABLES_KEY = Symbol.for("lc:context_variables"); - var setGlobalAsyncLocalStorageInstance = (instance) => { - globalThis[exports.TRACING_ALS_KEY] = instance; - }; - exports.setGlobalAsyncLocalStorageInstance = setGlobalAsyncLocalStorageInstance; - var getGlobalAsyncLocalStorageInstance = () => { - return globalThis[exports.TRACING_ALS_KEY]; - }; - exports.getGlobalAsyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/singletons/callbacks.cjs -var require_callbacks = __commonJS((exports) => { - var __importDefault2 = exports && exports.__importDefault || function(mod2) { - return mod2 && mod2.__esModule ? mod2 : { default: mod2 }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getQueue = getQueue; - exports.consumeCallback = consumeCallback; - exports.awaitAllCallbacks = awaitAllCallbacks; - var p_queue_1 = __importDefault2(require_dist6()); - var globals_js_1 = require_globals(); - var tracer_js_1 = require_tracer(); - var queue; - function createQueue() { - const PQueue = "default" in p_queue_1.default ? p_queue_1.default.default : p_queue_1.default; - return new PQueue({ - autoStart: true, - concurrency: 1 - }); - } - function getQueue() { - if (typeof queue === "undefined") { - queue = createQueue(); - } - return queue; - } - async function consumeCallback(promiseFn, wait) { - if (wait === true) { - const asyncLocalStorageInstance = (0, globals_js_1.getGlobalAsyncLocalStorageInstance)(); - if (asyncLocalStorageInstance !== undefined) { - await asyncLocalStorageInstance.run(undefined, async () => promiseFn()); - } else { - await promiseFn(); - } - } else { - queue = getQueue(); - queue.add(async () => { - const asyncLocalStorageInstance = (0, globals_js_1.getGlobalAsyncLocalStorageInstance)(); - if (asyncLocalStorageInstance !== undefined) { - await asyncLocalStorageInstance.run(undefined, async () => promiseFn()); - } else { - await promiseFn(); - } - }); - } - } - async function awaitAllCallbacks() { - const defaultClient = (0, tracer_js_1.getDefaultLangChainClientSingleton)(); - await Promise.allSettled([ - typeof queue !== "undefined" ? queue.onIdle() : Promise.resolve(), - defaultClient.awaitPendingTraceBatches() - ]); - } -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/callbacks/promises.cjs -var require_promises = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.consumeCallback = exports.awaitAllCallbacks = undefined; - var callbacks_js_1 = require_callbacks(); - Object.defineProperty(exports, "awaitAllCallbacks", { enumerable: true, get: function() { - return callbacks_js_1.awaitAllCallbacks; - } }); - Object.defineProperty(exports, "consumeCallback", { enumerable: true, get: function() { - return callbacks_js_1.consumeCallback; - } }); -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/utils/callbacks.cjs -var require_callbacks2 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isTracingEnabled = undefined; - var env_js_1 = require_env(); - var isTracingEnabled = (tracingEnabled) => { - if (tracingEnabled !== undefined) { - return tracingEnabled; - } - const envVars = [ - "LANGSMITH_TRACING_V2", - "LANGCHAIN_TRACING_V2", - "LANGSMITH_TRACING", - "LANGCHAIN_TRACING" - ]; - return !!envVars.find((envVar) => (0, env_js_1.getEnvironmentVariable)(envVar) === "true"); - }; - exports.isTracingEnabled = isTracingEnabled; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/singletons/async_local_storage/context.cjs -var require_context3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.registerConfigureHook = exports._getConfigureHooks = undefined; - exports.setContextVariable = setContextVariable; - exports.getContextVariable = getContextVariable; - var run_trees_1 = require_run_trees(); - var globals_js_1 = require_globals(); - function setContextVariable(name, value) { - const asyncLocalStorageInstance = (0, globals_js_1.getGlobalAsyncLocalStorageInstance)(); - if (asyncLocalStorageInstance === undefined) { - throw new Error(`Internal error: Global shared async local storage instance has not been initialized.`); - } - const runTree = asyncLocalStorageInstance.getStore(); - const contextVars = { ...runTree?.[globals_js_1._CONTEXT_VARIABLES_KEY] }; - contextVars[name] = value; - let newValue = {}; - if ((0, run_trees_1.isRunTree)(runTree)) { - newValue = new run_trees_1.RunTree(runTree); - } - newValue[globals_js_1._CONTEXT_VARIABLES_KEY] = contextVars; - asyncLocalStorageInstance.enterWith(newValue); - } - function getContextVariable(name) { - const asyncLocalStorageInstance = (0, globals_js_1.getGlobalAsyncLocalStorageInstance)(); - if (asyncLocalStorageInstance === undefined) { - return; - } - const runTree = asyncLocalStorageInstance.getStore(); - return runTree?.[globals_js_1._CONTEXT_VARIABLES_KEY]?.[name]; - } - var LC_CONFIGURE_HOOKS_KEY = Symbol("lc:configure_hooks"); - var _getConfigureHooks = () => getContextVariable(LC_CONFIGURE_HOOKS_KEY) || []; - exports._getConfigureHooks = _getConfigureHooks; - var registerConfigureHook = (config2) => { - if (config2.envVar && !config2.handlerClass) { - throw new Error("If envVar is set, handlerClass must also be set to a non-None value."); - } - setContextVariable(LC_CONFIGURE_HOOKS_KEY, [...(0, exports._getConfigureHooks)(), config2]); - }; - exports.registerConfigureHook = registerConfigureHook; -}); - -// ../../../../node_modules/.bun/@langchain+core@0.3.80+966709f559724cab/node_modules/@langchain/core/dist/callbacks/manager.cjs -var require_manager = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TraceGroup = exports.CallbackManager = exports.CallbackManagerForToolRun = exports.CallbackManagerForChainRun = exports.CallbackManagerForLLMRun = exports.CallbackManagerForRetrieverRun = exports.BaseRunManager = exports.BaseCallbackManager = undefined; - exports.parseCallbackConfigArg = parseCallbackConfigArg; - exports.ensureHandler = ensureHandler; - exports.traceAsGroup = traceAsGroup; - var uuid_1 = require_dist4(); - var base_js_1 = require_base(); - var console_js_1 = require_console(); - var utils_js_1 = require_utils54(); - var env_js_1 = require_env(); - var tracer_langchain_js_1 = require_tracer_langchain(); - var promises_js_1 = require_promises(); - var callbacks_js_1 = require_callbacks2(); - var base_js_2 = require_base2(); - var context_js_1 = require_context3(); - function parseCallbackConfigArg(arg) { - if (!arg) { - return {}; - } else if (Array.isArray(arg) || "name" in arg) { - return { callbacks: arg }; - } else { - return arg; - } - } - - class BaseCallbackManager { - setHandler(handler) { - return this.setHandlers([handler]); - } - } - exports.BaseCallbackManager = BaseCallbackManager; - - class BaseRunManager { - constructor(runId, handlers, inheritableHandlers, tags, inheritableTags, metadata, inheritableMetadata, _parentRunId) { - Object.defineProperty(this, "runId", { - enumerable: true, - configurable: true, - writable: true, - value: runId - }); - Object.defineProperty(this, "handlers", { - enumerable: true, - configurable: true, - writable: true, - value: handlers - }); - Object.defineProperty(this, "inheritableHandlers", { - enumerable: true, - configurable: true, - writable: true, - value: inheritableHandlers - }); - Object.defineProperty(this, "tags", { - enumerable: true, - configurable: true, - writable: true, - value: tags - }); - Object.defineProperty(this, "inheritableTags", { - enumerable: true, - configurable: true, - writable: true, - value: inheritableTags - }); - Object.defineProperty(this, "metadata", { - enumerable: true, - configurable: true, - writable: true, - value: metadata - }); - Object.defineProperty(this, "inheritableMetadata", { - enumerable: true, - configurable: true, - writable: true, - value: inheritableMetadata - }); - Object.defineProperty(this, "_parentRunId", { - enumerable: true, - configurable: true, - writable: true, - value: _parentRunId - }); - } - get parentRunId() { - return this._parentRunId; - } - async handleText(text) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - try { - await handler.handleText?.(text, this.runId, this._parentRunId, this.tags); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleText: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers))); - } - async handleCustomEvent(eventName, data, _runId, _tags, _metadata) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - try { - await handler.handleCustomEvent?.(eventName, data, this.runId, this.tags, this.metadata); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleCustomEvent: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers))); - } - } - exports.BaseRunManager = BaseRunManager; - - class CallbackManagerForRetrieverRun extends BaseRunManager { - getChild(tag) { - const manager = new CallbackManager(this.runId); - manager.setHandlers(this.inheritableHandlers); - manager.addTags(this.inheritableTags); - manager.addMetadata(this.inheritableMetadata); - if (tag) { - manager.addTags([tag], false); - } - return manager; - } - async handleRetrieverEnd(documents) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreRetriever) { - try { - await handler.handleRetrieverEnd?.(documents, this.runId, this._parentRunId, this.tags); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleRetriever`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - async handleRetrieverError(err) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreRetriever) { - try { - await handler.handleRetrieverError?.(err, this.runId, this._parentRunId, this.tags); - } catch (error48) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleRetrieverError: ${error48}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - } - exports.CallbackManagerForRetrieverRun = CallbackManagerForRetrieverRun; - - class CallbackManagerForLLMRun extends BaseRunManager { - async handleLLMNewToken(token, idx, _runId, _parentRunId, _tags, fields) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreLLM) { - try { - await handler.handleLLMNewToken?.(token, idx ?? { prompt: 0, completion: 0 }, this.runId, this._parentRunId, this.tags, fields); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleLLMNewToken: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - async handleLLMError(err, _runId, _parentRunId, _tags, extraParams) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreLLM) { - try { - await handler.handleLLMError?.(err, this.runId, this._parentRunId, this.tags, extraParams); - } catch (err2) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleLLMError: ${err2}`); - if (handler.raiseError) { - throw err2; - } - } - } - }, handler.awaitHandlers))); - } - async handleLLMEnd(output, _runId, _parentRunId, _tags, extraParams) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreLLM) { - try { - await handler.handleLLMEnd?.(output, this.runId, this._parentRunId, this.tags, extraParams); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleLLMEnd: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - } - exports.CallbackManagerForLLMRun = CallbackManagerForLLMRun; - - class CallbackManagerForChainRun extends BaseRunManager { - getChild(tag) { - const manager = new CallbackManager(this.runId); - manager.setHandlers(this.inheritableHandlers); - manager.addTags(this.inheritableTags); - manager.addMetadata(this.inheritableMetadata); - if (tag) { - manager.addTags([tag], false); - } - return manager; - } - async handleChainError(err, _runId, _parentRunId, _tags, kwargs) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreChain) { - try { - await handler.handleChainError?.(err, this.runId, this._parentRunId, this.tags, kwargs); - } catch (err2) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleChainError: ${err2}`); - if (handler.raiseError) { - throw err2; - } - } - } - }, handler.awaitHandlers))); - } - async handleChainEnd(output, _runId, _parentRunId, _tags, kwargs) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreChain) { - try { - await handler.handleChainEnd?.(output, this.runId, this._parentRunId, this.tags, kwargs); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleChainEnd: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - async handleAgentAction(action) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreAgent) { - try { - await handler.handleAgentAction?.(action, this.runId, this._parentRunId, this.tags); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleAgentAction: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - async handleAgentEnd(action) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreAgent) { - try { - await handler.handleAgentEnd?.(action, this.runId, this._parentRunId, this.tags); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleAgentEnd: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - } - exports.CallbackManagerForChainRun = CallbackManagerForChainRun; - - class CallbackManagerForToolRun extends BaseRunManager { - getChild(tag) { - const manager = new CallbackManager(this.runId); - manager.setHandlers(this.inheritableHandlers); - manager.addTags(this.inheritableTags); - manager.addMetadata(this.inheritableMetadata); - if (tag) { - manager.addTags([tag], false); - } - return manager; - } - async handleToolError(err) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreAgent) { - try { - await handler.handleToolError?.(err, this.runId, this._parentRunId, this.tags); - } catch (err2) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleToolError: ${err2}`); - if (handler.raiseError) { - throw err2; - } - } - } - }, handler.awaitHandlers))); - } - async handleToolEnd(output) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreAgent) { - try { - await handler.handleToolEnd?.(output, this.runId, this._parentRunId, this.tags); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleToolEnd: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - } - exports.CallbackManagerForToolRun = CallbackManagerForToolRun; - - class CallbackManager extends BaseCallbackManager { - constructor(parentRunId, options) { - super(); - Object.defineProperty(this, "handlers", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "inheritableHandlers", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "tags", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "inheritableTags", { - enumerable: true, - configurable: true, - writable: true, - value: [] - }); - Object.defineProperty(this, "metadata", { - enumerable: true, - configurable: true, - writable: true, - value: {} - }); - Object.defineProperty(this, "inheritableMetadata", { - enumerable: true, - configurable: true, - writable: true, - value: {} - }); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: "callback_manager" - }); - Object.defineProperty(this, "_parentRunId", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - this.handlers = options?.handlers ?? this.handlers; - this.inheritableHandlers = options?.inheritableHandlers ?? this.inheritableHandlers; - this.tags = options?.tags ?? this.tags; - this.inheritableTags = options?.inheritableTags ?? this.inheritableTags; - this.metadata = options?.metadata ?? this.metadata; - this.inheritableMetadata = options?.inheritableMetadata ?? this.inheritableMetadata; - this._parentRunId = parentRunId; - } - getParentRunId() { - return this._parentRunId; - } - async handleLLMStart(llm, prompts, runId = undefined, _parentRunId = undefined, extraParams = undefined, _tags = undefined, _metadata = undefined, runName = undefined) { - return Promise.all(prompts.map(async (prompt, idx) => { - const runId_ = idx === 0 && runId ? runId : (0, uuid_1.v4)(); - await Promise.all(this.handlers.map((handler) => { - if (handler.ignoreLLM) { - return; - } - if ((0, base_js_2.isBaseTracer)(handler)) { - handler._createRunForLLMStart(llm, [prompt], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName); - } - return (0, promises_js_1.consumeCallback)(async () => { - try { - await handler.handleLLMStart?.(llm, [prompt], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleLLMStart: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers); - })); - return new CallbackManagerForLLMRun(runId_, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); - })); - } - async handleChatModelStart(llm, messages, runId = undefined, _parentRunId = undefined, extraParams = undefined, _tags = undefined, _metadata = undefined, runName = undefined) { - return Promise.all(messages.map(async (messageGroup, idx) => { - const runId_ = idx === 0 && runId ? runId : (0, uuid_1.v4)(); - await Promise.all(this.handlers.map((handler) => { - if (handler.ignoreLLM) { - return; - } - if ((0, base_js_2.isBaseTracer)(handler)) { - handler._createRunForChatModelStart(llm, [messageGroup], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName); - } - return (0, promises_js_1.consumeCallback)(async () => { - try { - if (handler.handleChatModelStart) { - await handler.handleChatModelStart?.(llm, [messageGroup], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName); - } else if (handler.handleLLMStart) { - const messageString = (0, utils_js_1.getBufferString)(messageGroup); - await handler.handleLLMStart?.(llm, [messageString], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName); - } - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleLLMStart: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers); - })); - return new CallbackManagerForLLMRun(runId_, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); - })); - } - async handleChainStart(chain, inputs, runId = (0, uuid_1.v4)(), runType = undefined, _tags = undefined, _metadata = undefined, runName = undefined) { - await Promise.all(this.handlers.map((handler) => { - if (handler.ignoreChain) { - return; - } - if ((0, base_js_2.isBaseTracer)(handler)) { - handler._createRunForChainStart(chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName); - } - return (0, promises_js_1.consumeCallback)(async () => { - try { - await handler.handleChainStart?.(chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleChainStart: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers); - })); - return new CallbackManagerForChainRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); - } - async handleToolStart(tool, input, runId = (0, uuid_1.v4)(), _parentRunId = undefined, _tags = undefined, _metadata = undefined, runName = undefined) { - await Promise.all(this.handlers.map((handler) => { - if (handler.ignoreAgent) { - return; - } - if ((0, base_js_2.isBaseTracer)(handler)) { - handler._createRunForToolStart(tool, input, runId, this._parentRunId, this.tags, this.metadata, runName); - } - return (0, promises_js_1.consumeCallback)(async () => { - try { - await handler.handleToolStart?.(tool, input, runId, this._parentRunId, this.tags, this.metadata, runName); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleToolStart: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers); - })); - return new CallbackManagerForToolRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); - } - async handleRetrieverStart(retriever, query, runId = (0, uuid_1.v4)(), _parentRunId = undefined, _tags = undefined, _metadata = undefined, runName = undefined) { - await Promise.all(this.handlers.map((handler) => { - if (handler.ignoreRetriever) { - return; - } - if ((0, base_js_2.isBaseTracer)(handler)) { - handler._createRunForRetrieverStart(retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName); - } - return (0, promises_js_1.consumeCallback)(async () => { - try { - await handler.handleRetrieverStart?.(retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleRetrieverStart: ${err}`); - if (handler.raiseError) { - throw err; - } - } - }, handler.awaitHandlers); - })); - return new CallbackManagerForRetrieverRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); - } - async handleCustomEvent(eventName, data, runId, _tags, _metadata) { - await Promise.all(this.handlers.map((handler) => (0, promises_js_1.consumeCallback)(async () => { - if (!handler.ignoreCustomEvent) { - try { - await handler.handleCustomEvent?.(eventName, data, runId, this.tags, this.metadata); - } catch (err) { - const logFunction = handler.raiseError ? console.error : console.warn; - logFunction(`Error in handler ${handler.constructor.name}, handleCustomEvent: ${err}`); - if (handler.raiseError) { - throw err; - } - } - } - }, handler.awaitHandlers))); - } - addHandler(handler, inherit = true) { - this.handlers.push(handler); - if (inherit) { - this.inheritableHandlers.push(handler); - } - } - removeHandler(handler) { - this.handlers = this.handlers.filter((_handler) => _handler !== handler); - this.inheritableHandlers = this.inheritableHandlers.filter((_handler) => _handler !== handler); - } - setHandlers(handlers, inherit = true) { - this.handlers = []; - this.inheritableHandlers = []; - for (const handler of handlers) { - this.addHandler(handler, inherit); - } - } - addTags(tags, inherit = true) { - this.removeTags(tags); - this.tags.push(...tags); - if (inherit) { - this.inheritableTags.push(...tags); - } - } - removeTags(tags) { - this.tags = this.tags.filter((tag) => !tags.includes(tag)); - this.inheritableTags = this.inheritableTags.filter((tag) => !tags.includes(tag)); - } - addMetadata(metadata, inherit = true) { - this.metadata = { ...this.metadata, ...metadata }; - if (inherit) { - this.inheritableMetadata = { ...this.inheritableMetadata, ...metadata }; - } - } - removeMetadata(metadata) { - for (const key of Object.keys(metadata)) { - delete this.metadata[key]; - delete this.inheritableMetadata[key]; - } - } - copy(additionalHandlers = [], inherit = true) { - const manager = new CallbackManager(this._parentRunId); - for (const handler of this.handlers) { - const inheritable = this.inheritableHandlers.includes(handler); - manager.addHandler(handler, inheritable); - } - for (const tag of this.tags) { - const inheritable = this.inheritableTags.includes(tag); - manager.addTags([tag], inheritable); - } - for (const key of Object.keys(this.metadata)) { - const inheritable = Object.keys(this.inheritableMetadata).includes(key); - manager.addMetadata({ [key]: this.metadata[key] }, inheritable); - } - for (const handler of additionalHandlers) { - if (manager.handlers.filter((h) => h.name === "console_callback_handler").some((h) => h.name === handler.name)) { - continue; - } - manager.addHandler(handler, inherit); - } - return manager; - } - static fromHandlers(handlers) { - - class Handler extends base_js_1.BaseCallbackHandler { - constructor() { - super(); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: (0, uuid_1.v4)() - }); - Object.assign(this, handlers); - } - } - const manager = new this; - manager.addHandler(new Handler); - return manager; - } - static configure(inheritableHandlers, localHandlers, inheritableTags, localTags, inheritableMetadata, localMetadata, options) { - return this._configureSync(inheritableHandlers, localHandlers, inheritableTags, localTags, inheritableMetadata, localMetadata, options); - } - static _configureSync(inheritableHandlers, localHandlers, inheritableTags, localTags, inheritableMetadata, localMetadata, options) { - let callbackManager; - if (inheritableHandlers || localHandlers) { - if (Array.isArray(inheritableHandlers) || !inheritableHandlers) { - callbackManager = new CallbackManager; - callbackManager.setHandlers(inheritableHandlers?.map(ensureHandler) ?? [], true); - } else { - callbackManager = inheritableHandlers; - } - callbackManager = callbackManager.copy(Array.isArray(localHandlers) ? localHandlers.map(ensureHandler) : localHandlers?.handlers, false); - } - const verboseEnabled = (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_VERBOSE") === "true" || options?.verbose; - const tracingV2Enabled = tracer_langchain_js_1.LangChainTracer.getTraceableRunTree()?.tracingEnabled || (0, callbacks_js_1.isTracingEnabled)(); - const tracingEnabled = tracingV2Enabled || ((0, env_js_1.getEnvironmentVariable)("LANGCHAIN_TRACING") ?? false); - if (verboseEnabled || tracingEnabled) { - if (!callbackManager) { - callbackManager = new CallbackManager; - } - if (verboseEnabled && !callbackManager.handlers.some((handler) => handler.name === console_js_1.ConsoleCallbackHandler.prototype.name)) { - const consoleHandler = new console_js_1.ConsoleCallbackHandler; - callbackManager.addHandler(consoleHandler, true); - } - if (tracingEnabled && !callbackManager.handlers.some((handler) => handler.name === "langchain_tracer")) { - if (tracingV2Enabled) { - const tracerV2 = new tracer_langchain_js_1.LangChainTracer; - callbackManager.addHandler(tracerV2, true); - } - } - if (tracingV2Enabled) { - const implicitRunTree = tracer_langchain_js_1.LangChainTracer.getTraceableRunTree(); - if (implicitRunTree && callbackManager._parentRunId === undefined) { - callbackManager._parentRunId = implicitRunTree.id; - const tracerV2 = callbackManager.handlers.find((handler) => handler.name === "langchain_tracer"); - tracerV2?.updateFromRunTree(implicitRunTree); - } - } - } - for (const { contextVar, inheritable = true, handlerClass, envVar } of (0, context_js_1._getConfigureHooks)()) { - const createIfNotInContext = envVar && (0, env_js_1.getEnvironmentVariable)(envVar) === "true" && handlerClass; - let handler; - const contextVarValue = contextVar !== undefined ? (0, context_js_1.getContextVariable)(contextVar) : undefined; - if (contextVarValue && (0, base_js_1.isBaseCallbackHandler)(contextVarValue)) { - handler = contextVarValue; - } else if (createIfNotInContext) { - handler = new handlerClass({}); - } - if (handler !== undefined) { - if (!callbackManager) { - callbackManager = new CallbackManager; - } - if (!callbackManager.handlers.some((h) => h.name === handler.name)) { - callbackManager.addHandler(handler, inheritable); - } - } - } - if (inheritableTags || localTags) { - if (callbackManager) { - callbackManager.addTags(inheritableTags ?? []); - callbackManager.addTags(localTags ?? [], false); - } - } - if (inheritableMetadata || localMetadata) { - if (callbackManager) { - callbackManager.addMetadata(inheritableMetadata ?? {}); - callbackManager.addMetadata(localMetadata ?? {}, false); - } - } - return callbackManager; - } - } - exports.CallbackManager = CallbackManager; - function ensureHandler(handler) { - if ("name" in handler) { - return handler; - } - return base_js_1.BaseCallbackHandler.fromMethods(handler); - } - - class TraceGroup { - constructor(groupName, options) { - Object.defineProperty(this, "groupName", { - enumerable: true, - configurable: true, - writable: true, - value: groupName - }); - Object.defineProperty(this, "options", { - enumerable: true, - configurable: true, - writable: true, - value: options - }); - Object.defineProperty(this, "runManager", { - enumerable: true, - configurable: true, - writable: true, - value: undefined - }); - } - async getTraceGroupCallbackManager(group_name, inputs, options) { - const cb = new tracer_langchain_js_1.LangChainTracer(options); - const cm = await CallbackManager.configure([cb]); - const runManager = await cm?.handleChainStart({ - lc: 1, - type: "not_implemented", - id: ["langchain", "callbacks", "groups", group_name] - }, inputs ?? {}); - if (!runManager) { - throw new Error("Failed to create run group callback manager."); - } - return runManager; - } - async start(inputs) { - if (!this.runManager) { - this.runManager = await this.getTraceGroupCallbackManager(this.groupName, inputs, this.options); - } - return this.runManager.getChild(); - } - async error(err) { - if (this.runManager) { - await this.runManager.handleChainError(err); - this.runManager = undefined; - } - } - async end(output) { - if (this.runManager) { - await this.runManager.handleChainEnd(output ?? {}); - this.runManager = undefined; - } - } - } - exports.TraceGroup = TraceGroup; - function _coerceToDict(value, defaultKey) { - return value && !Array.isArray(value) && typeof value === "object" ? value : { [defaultKey]: value }; - } - async function traceAsGroup(groupOptions, enclosedCode, ...args) { - const traceGroup = new TraceGroup(groupOptions.name, groupOptions); - const callbackManager = await traceGroup.start({ ...args }); - try { - const result = await enclosedCode(callbackManager, ...args); - await traceGroup.end(_coerceToDict(result, "output")); - return result; - } catch (err) { - await traceGroup.error(err); - throw err; - } - } -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-langchain@0.21.0+67db94f95eee5b20/node_modules/@traceloop/instrumentation-langchain/dist/index.mjs -var import_api48, import_instrumentation8, import_ai_semantic_conventions9, TraceloopCallbackHandler, version10 = "0.21.0", LangChainInstrumentation; -var init_dist13 = __esm(() => { - init_modules(); - init_base3(); - import_api48 = __toESM(require_src(), 1); - import_instrumentation8 = __toESM(require_src97(), 1); - import_ai_semantic_conventions9 = __toESM(require_src2(), 1); - TraceloopCallbackHandler = class TraceloopCallbackHandler extends BaseCallbackHandler { - constructor(tracer, traceContent = true) { - super(); - this.name = "traceloop_callback_handler"; - this.spans = new Map; - this.tracer = tracer; - this.traceContent = traceContent; - } - handleChatModelStart(llm, messages, runId, _parentRunId, _extraParams, _tags, _metadata, _runName) { - return __awaiter(this, undefined, undefined, function* () { - var _a2; - const className = ((_a2 = llm.id) === null || _a2 === undefined ? undefined : _a2[llm.id.length - 1]) || "unknown"; - const vendor = this.detectVendor(llm); - const spanBaseName = this.convertClassNameToSpanName(className); - const span = this.tracer.startSpan(spanBaseName, { - kind: import_api48.SpanKind.CLIENT - }); - const flatMessages = messages.flat(); - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_SYSTEM]: vendor, - [import_ai_semantic_conventions9.SpanAttributes.LLM_REQUEST_TYPE]: "chat" - }); - if (this.traceContent && flatMessages.length > 0) { - flatMessages.forEach((message, idx) => { - const role = this.mapMessageTypeToRole(message._getType()); - span.setAttributes({ - [`${import_ai_semantic_conventions9.SpanAttributes.LLM_PROMPTS}.${idx}.role`]: role, - [`${import_ai_semantic_conventions9.SpanAttributes.LLM_PROMPTS}.${idx}.content`]: typeof message.content === "string" ? message.content : JSON.stringify(message.content) - }); - }); - } - this.spans.set(runId, { span, runId }); - }); - } - handleLLMStart(llm, prompts, runId, _parentRunId, _extraParams, _tags, _metadata, _runName) { - return __awaiter(this, undefined, undefined, function* () { - var _a2; - const className = ((_a2 = llm.id) === null || _a2 === undefined ? undefined : _a2[llm.id.length - 1]) || "unknown"; - const vendor = this.detectVendor(llm); - const spanBaseName = this.convertClassNameToSpanName(className); - const span = this.tracer.startSpan(spanBaseName, { - kind: import_api48.SpanKind.CLIENT - }); - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_SYSTEM]: vendor, - [import_ai_semantic_conventions9.SpanAttributes.LLM_REQUEST_TYPE]: "completion" - }); - if (this.traceContent && prompts.length > 0) { - prompts.forEach((prompt, idx) => { - span.setAttributes({ - [`${import_ai_semantic_conventions9.SpanAttributes.LLM_PROMPTS}.${idx}.role`]: "user", - [`${import_ai_semantic_conventions9.SpanAttributes.LLM_PROMPTS}.${idx}.content`]: prompt - }); - }); - } - this.spans.set(runId, { span, runId }); - }); - } - handleLLMEnd(output, runId, _parentRunId, _tags, _extraParams) { - return __awaiter(this, undefined, undefined, function* () { - var _a2, _b; - const spanData = this.spans.get(runId); - if (!spanData) - return; - const { span } = spanData; - if (this.traceContent && output.generations && output.generations.length > 0) { - output.generations.forEach((generation, idx) => { - if (generation && generation.length > 0) { - span.setAttributes({ - [`${import_ai_semantic_conventions9.SpanAttributes.LLM_COMPLETIONS}.${idx}.role`]: "assistant", - [`${import_ai_semantic_conventions9.SpanAttributes.LLM_COMPLETIONS}.${idx}.content`]: generation[0].text - }); - } - }); - } - const modelName = this.extractModelNameFromResponse(output); - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_REQUEST_MODEL]: modelName || "unknown", - [import_ai_semantic_conventions9.SpanAttributes.LLM_RESPONSE_MODEL]: modelName || "unknown" - }); - if ((_a2 = output.llmOutput) === null || _a2 === undefined ? undefined : _a2.usage) { - const usage = output.llmOutput.usage; - if (usage.input_tokens) { - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_USAGE_PROMPT_TOKENS]: usage.input_tokens - }); - } - if (usage.output_tokens) { - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: usage.output_tokens - }); - } - const totalTokens = (usage.input_tokens || 0) + (usage.output_tokens || 0); - if (totalTokens > 0) { - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: totalTokens - }); - } - } - if ((_b = output.llmOutput) === null || _b === undefined ? undefined : _b.tokenUsage) { - const usage = output.llmOutput.tokenUsage; - if (usage.promptTokens) { - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_USAGE_PROMPT_TOKENS]: usage.promptTokens - }); - } - if (usage.completionTokens) { - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS]: usage.completionTokens - }); - } - if (usage.totalTokens) { - span.setAttributes({ - [import_ai_semantic_conventions9.SpanAttributes.LLM_USAGE_TOTAL_TOKENS]: usage.totalTokens - }); - } - } - span.setStatus({ code: import_api48.SpanStatusCode.OK }); - span.end(); - this.spans.delete(runId); - }); - } - handleChatModelEnd(output, runId, _parentRunId, _tags, _extraParams) { - return __awaiter(this, undefined, undefined, function* () { - return this.handleLLMEnd(output, runId, _parentRunId, _tags, _extraParams); - }); - } - handleLLMError(err, runId, _parentRunId, _tags, _extraParams) { - return __awaiter(this, undefined, undefined, function* () { - const spanData = this.spans.get(runId); - if (!spanData) - return; - const { span } = spanData; - span.recordException(err); - span.setStatus({ code: import_api48.SpanStatusCode.ERROR, message: err.message }); - span.end(); - this.spans.delete(runId); - }); - } - handleChainStart(chain, inputs, runId, _parentRunId, _tags, metadata, runType, runName) { - return __awaiter(this, undefined, undefined, function* () { - var _a2; - const chainName = ((_a2 = chain.id) === null || _a2 === undefined ? undefined : _a2[chain.id.length - 1]) || "unknown"; - const spanName = `${chainName}.workflow`; - const span = this.tracer.startSpan(spanName, { - kind: import_api48.SpanKind.CLIENT - }); - span.setAttributes({ - "traceloop.span.kind": "workflow", - "traceloop.workflow.name": runName || chainName - }); - if (this.traceContent) { - span.setAttributes({ - "traceloop.entity.input": JSON.stringify(inputs) - }); - } - this.spans.set(runId, { span, runId }); - }); - } - handleChainEnd(outputs, runId, _parentRunId, _tags, _kwargs) { - return __awaiter(this, undefined, undefined, function* () { - const spanData = this.spans.get(runId); - if (!spanData) - return; - const { span } = spanData; - if (this.traceContent) { - span.setAttributes({ - "traceloop.entity.output": JSON.stringify(outputs) - }); - } - span.setStatus({ code: import_api48.SpanStatusCode.OK }); - span.end(); - this.spans.delete(runId); - }); - } - handleChainError(err, runId, _parentRunId, _tags, _kwargs) { - return __awaiter(this, undefined, undefined, function* () { - const spanData = this.spans.get(runId); - if (!spanData) - return; - const { span } = spanData; - span.recordException(err); - span.setStatus({ code: import_api48.SpanStatusCode.ERROR, message: err.message }); - span.end(); - this.spans.delete(runId); - }); - } - handleToolStart(tool, input, runId, _parentRunId, _tags, _metadata, _runName) { - return __awaiter(this, undefined, undefined, function* () { - var _a2; - const toolName = ((_a2 = tool.id) === null || _a2 === undefined ? undefined : _a2[tool.id.length - 1]) || "unknown"; - const spanName = `${toolName}.task`; - const span = this.tracer.startSpan(spanName, { - kind: import_api48.SpanKind.CLIENT - }); - span.setAttributes({ - "traceloop.span.kind": "task", - "traceloop.entity.name": toolName - }); - if (this.traceContent) { - span.setAttributes({ - "traceloop.entity.input": JSON.stringify({ args: [input] }) - }); - } - this.spans.set(runId, { span, runId }); - }); - } - handleToolEnd(output, runId, _parentRunId, _tags) { - return __awaiter(this, undefined, undefined, function* () { - const spanData = this.spans.get(runId); - if (!spanData) - return; - const { span } = spanData; - if (this.traceContent) { - span.setAttributes({ - "traceloop.entity.output": JSON.stringify(output) - }); - } - span.setStatus({ code: import_api48.SpanStatusCode.OK }); - span.end(); - this.spans.delete(runId); - }); - } - handleToolError(err, runId, _parentRunId, _tags) { - return __awaiter(this, undefined, undefined, function* () { - const spanData = this.spans.get(runId); - if (!spanData) - return; - const { span } = spanData; - span.recordException(err); - span.setStatus({ code: import_api48.SpanStatusCode.ERROR, message: err.message }); - span.end(); - this.spans.delete(runId); - }); - } - extractModelNameFromResponse(output) { - if (output.llmOutput) { - const modelName = output.llmOutput.model_name || output.llmOutput.model_id || output.llmOutput.model; - if (modelName && typeof modelName === "string") { - return modelName; - } - } - return null; - } - convertClassNameToSpanName(className) { - return className.replace(/([A-Z])/g, (match2, char, index) => { - return index === 0 ? char.toLowerCase() : `.${char.toLowerCase()}`; - }); - } - detectVendor(llm) { - var _a2; - const className = ((_a2 = llm.id) === null || _a2 === undefined ? undefined : _a2[llm.id.length - 1]) || ""; - if (!className) { - return "Langchain"; - } - if (["AzureChatOpenAI", "AzureOpenAI", "AzureOpenAIEmbeddings"].includes(className) || className.toLowerCase().includes("azure")) { - return "Azure"; - } - if (["ChatOpenAI", "OpenAI", "OpenAIEmbeddings"].includes(className) || className.toLowerCase().includes("openai")) { - return "openai"; - } - if (["ChatBedrock", "BedrockEmbeddings", "Bedrock", "BedrockChat"].includes(className) || className.toLowerCase().includes("bedrock") || className.toLowerCase().includes("aws")) { - return "AWS"; - } - if (["ChatAnthropic", "AnthropicLLM"].includes(className) || className.toLowerCase().includes("anthropic")) { - return "Anthropic"; - } - if ([ - "ChatVertexAI", - "VertexAI", - "VertexAIEmbeddings", - "ChatGoogleGenerativeAI", - "GoogleGenerativeAI", - "GooglePaLM", - "ChatGooglePaLM" - ].includes(className) || className.toLowerCase().includes("vertex") || className.toLowerCase().includes("google") || className.toLowerCase().includes("palm") || className.toLowerCase().includes("gemini")) { - return "Google"; - } - if (["ChatCohere", "CohereEmbeddings", "Cohere"].includes(className) || className.toLowerCase().includes("cohere")) { - return "Cohere"; - } - if ([ - "HuggingFacePipeline", - "HuggingFaceTextGenInference", - "HuggingFaceEmbeddings", - "ChatHuggingFace" - ].includes(className) || className.toLowerCase().includes("huggingface")) { - return "HuggingFace"; - } - if (["ChatOllama", "OllamaEmbeddings", "Ollama"].includes(className) || className.toLowerCase().includes("ollama")) { - return "Ollama"; - } - if (["Together", "ChatTogether"].includes(className) || className.toLowerCase().includes("together")) { - return "TogetherAI"; - } - if (["Replicate", "ChatReplicate"].includes(className) || className.toLowerCase().includes("replicate")) { - return "Replicate"; - } - return "Langchain"; - } - mapMessageTypeToRole(messageType) { - switch (messageType) { - case "human": - return "user"; - case "ai": - return "assistant"; - case "system": - return "system"; - case "function": - return "tool"; - default: - return messageType; - } - } - }; - LangChainInstrumentation = class LangChainInstrumentation extends import_instrumentation8.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-langchain", version10, config2); - this.instrumentCallbackManagerDirectly(); - } - manuallyInstrument({ callbackManagerModule }) { - if (callbackManagerModule) { - this._diag.debug("Manually instrumenting @langchain/core/callbacks/manager"); - this.patchCallbackManager(callbackManagerModule.CallbackManager); - } - } - init() { - return []; - } - instrumentCallbackManagerDirectly() { - try { - const callbackManagerModule = require_manager(); - if (callbackManagerModule === null || callbackManagerModule === undefined ? undefined : callbackManagerModule.CallbackManager) { - this.patchCallbackManager(callbackManagerModule.CallbackManager); - } - } catch (error48) { - this._diag.debug("Error instrumenting callback manager:", error48); - } - } - patchCallbackManager(CallbackManager) { - const callbackManagerAny = CallbackManager; - if (callbackManagerAny._configureSync && !callbackManagerAny._traceloopPatched) { - const originalConfigureSync = callbackManagerAny._configureSync; - const self2 = this; - callbackManagerAny._configureSync = function(inheritableHandlers, localHandlers, inheritableTags, localTags, inheritableMetadata, localMetadata) { - const callbackHandler = new TraceloopCallbackHandler(self2.tracer, self2._shouldSendPrompts()); - const updatedInheritableHandlers = inheritableHandlers && Array.isArray(inheritableHandlers) ? [...inheritableHandlers, callbackHandler] : [callbackHandler]; - return originalConfigureSync.call(this, updatedInheritableHandlers, localHandlers, inheritableTags, localTags, inheritableMetadata, localMetadata); - }; - callbackManagerAny._traceloopPatched = true; - } - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api48.context.active().getValue(import_ai_semantic_conventions9.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return !!contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-chromadb@0.21.0/node_modules/@traceloop/instrumentation-chromadb/dist/src/index.mjs -var import_instrumentation9, version11 = "0.21.0", ChromaDBInstrumentation; -var init_src = __esm(() => { - import_instrumentation9 = __toESM(require_src97(), 1); - ChromaDBInstrumentation = class ChromaDBInstrumentation extends import_instrumentation9.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-chromadb", version11, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const module = new import_instrumentation9.InstrumentationNodeModuleDefinition("chromadb", ["^1.8.1"], this.wrap.bind(this), this.unwrap.bind(this)); - return module; - } - manuallyInstrument(module) {} - wrap(module) { - return module; - } - unwrap(module) { - return module; - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-qdrant@0.21.0/node_modules/@traceloop/instrumentation-qdrant/dist/src/index.mjs -var import_api49, import_instrumentation10, import_ai_semantic_conventions10, version12 = "0.21.0", UPSERT = "upsert", DELETE = "delete", RETRIEVE = "retrieve", SEARCH = "search", QdrantInstrumentation; -var init_src2 = __esm(() => { - import_api49 = __toESM(require_src(), 1); - import_instrumentation10 = __toESM(require_src97(), 1); - import_ai_semantic_conventions10 = __toESM(require_src2(), 1); - QdrantInstrumentation = class QdrantInstrumentation extends import_instrumentation10.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-qdrant", version12, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const module = new import_instrumentation10.InstrumentationNodeModuleDefinition("@qdrant/js-client-rest", ["^1.9"], this.wrap.bind(this), this.unwrap.bind(this)); - return module; - } - manuallyInstrument(module) { - this._diag.debug(`Manually patching Qdrant`); - this.wrap(module); - } - wrap(module) { - this._wrap(module.QdrantClient.prototype, UPSERT, this.wrapperMethod()); - this._wrap(module.QdrantClient.prototype, RETRIEVE, this.wrapperMethod()); - this._wrap(module.QdrantClient.prototype, SEARCH, this.wrapperMethod()); - this._wrap(module.QdrantClient.prototype, DELETE, this.wrapperMethod()); - return module; - } - unwrap(module) { - this._unwrap(module.QdrantClient.prototype, UPSERT); - this._unwrap(module.QdrantClient.prototype, RETRIEVE); - this._unwrap(module.QdrantClient.prototype, SEARCH); - this._unwrap(module.QdrantClient.prototype, DELETE); - return module; - } - wrapperMethod() { - const plugin = this; - return (original) => { - return function method(...args) { - const span = plugin._startSpan({ - collectionName: args[0], - params: args.length > 1 ? args[1] : {}, - methodName: original.name - }); - const execContext = import_api49.trace.setSpan(import_api49.context.active(), span); - const execPromise = import_instrumentation10.safeExecuteInTheMiddle(() => { - return import_api49.context.with(execContext, () => { - return original.apply(this, args); - }); - }, (e) => { - if (e) { - plugin._diag.error(`Error in Qdrant instrumentation`, e); - } - }); - const wrappedPromise = execPromise.then((result) => { - return new Promise((resolve2) => { - plugin._endSpan({ methodName: original.name, span, result }); - resolve2(result); - }); - }).catch((error48) => { - return new Promise((_, reject) => { - span.setStatus({ - code: import_api49.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - reject(error48); - }); - }); - return import_api49.context.bind(execContext, wrappedPromise); - }; - }; - } - _startSpan({ collectionName, params, methodName }) { - var _a2, _b; - const spanName = `qdrant.${methodName}`; - const span = this.tracer.startSpan(spanName, { - kind: import_api49.SpanKind.CLIENT - }); - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_VENDOR, "Qdrant"); - try { - if (this._config.traceContent) { - switch (methodName) { - case UPSERT: - this._setUpsertAttributes(span, collectionName, params); - break; - case DELETE: - this._setDeleteAttributes(span, collectionName, params); - break; - case RETRIEVE: - this._setRetrieveAttributes(span, collectionName, params); - break; - case SEARCH: - this._setSearchAttributes(span, collectionName, params); - break; - default: - break; - } - } - } catch (e) { - this._diag.warn(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - return span; - } - _endSpan({ methodName, span, result }) { - var _a2, _b; - try { - switch (methodName) { - case SEARCH: - this._setSearchResultAttributes(span, result); - break; - default: - break; - } - span.setStatus({ code: import_api49.SpanStatusCode.OK }); - span.end(); - } catch (e) { - this._diag.debug(e); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, e); - } - } - _setUpsertAttributes(span, collectionName, params) { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_TABLE_NAME, collectionName); - if ("batch" in params) { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_ADD_COUNT, params.batch.ids.length); - } else { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_ADD_COUNT, params.points.length); - } - } - _setDeleteAttributes(span, collectionName, params) { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_TABLE_NAME, collectionName); - if ("filter" in params) { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_DELETE_SELECTOR, JSON.stringify(params.filter)); - } else { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_DELETE_SELECTOR, JSON.stringify(params.points)); - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_DELETE_COUNT, params.points.length); - } - } - _setRetrieveAttributes(span, collectionName, params) { - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_TABLE_NAME, collectionName); - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_GET_SELECTOR, JSON.stringify(params.ids)); - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_GET_COUNT, params.ids.length); - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_GET_INCLUDE_METADATA, !!params.with_payload); - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_GET_INCLUDE_VALUES, !!params.with_vector); - } - _setSearchAttributes(span, collectionName, params) { - var _a2; - span.setAttribute(import_ai_semantic_conventions10.SpanAttributes.VECTOR_DB_TABLE_NAME, collectionName); - const query_request_event = span.addEvent("qdrant.search.request"); - query_request_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_TOP_K, params.limit); - query_request_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_INCLUDE_VALUES, !!params.with_vector); - query_request_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_INCLUDE_METADATA, !!params.with_payload); - query_request_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_EMBEDDINGS_VECTOR, JSON.stringify(params.vector)); - query_request_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_METADATA_FILTER, JSON.stringify((_a2 = params.filter) !== null && _a2 !== undefined ? _a2 : {})); - } - _setSearchResultAttributes(span, result) { - const qdrant_result_event = span.addEvent("qdrant.search.result"); - qdrant_result_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_RESULT_MATCHES_LENGTH, result.length); - for (let i = 0;i < result.length; i++) { - const match2 = result[i]; - const search_result_match_event = qdrant_result_event.addEvent(`qdrant.search.result.${i}`); - search_result_match_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_RESULT_SCORE.replace("{i}", i.toString()), match2.score); - search_result_match_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_RESULT_ID.replace("{i}", i.toString()), match2.id); - search_result_match_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_RESULT_VALUES.replace("{i}", i.toString()), JSON.stringify(match2.vector)); - search_result_match_event.setAttribute(import_ai_semantic_conventions10.EventAttributes.VECTOR_DB_QUERY_RESULT_METADATA.replace("{i}", i.toString()), JSON.stringify(match2.payload)); - } - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-together@0.21.0/node_modules/@traceloop/instrumentation-together/dist/index.mjs -var import_api50, import_instrumentation11, import_ai_semantic_conventions11, version13 = "0.21.0", TogetherInstrumentation; -var init_dist14 = __esm(() => { - init_modules(); - import_api50 = __toESM(require_src(), 1); - import_instrumentation11 = __toESM(require_src97(), 1); - import_ai_semantic_conventions11 = __toESM(require_src2(), 1); - TogetherInstrumentation = class TogetherInstrumentation extends import_instrumentation11.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-together-ai", version13, Object.assign({ enrichTokens: true }, config2)); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - manuallyInstrument(module) { - this._diag.debug(`Manually instrumenting togetherai`); - this._wrap(module.Chat.Completions.prototype, "create", this.patchTogether("chat")); - this._wrap(module.Completions.prototype, "create", this.patchTogether("completion")); - } - init() { - const module = new import_instrumentation11.InstrumentationNodeModuleDefinition("together-ai", [">=0.13.0"], this.patch.bind(this), this.unpatch.bind(this)); - return module; - } - patch(moduleExports, moduleVersion) { - this._diag.debug(`Patching togetherai@${moduleVersion}`); - this._wrap(moduleExports.Together.Chat.Completions.prototype, "create", this.patchTogether("chat")); - this._wrap(moduleExports.Together.Completions.prototype, "create", this.patchTogether("completion")); - return moduleExports; - } - unpatch(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching togetherai@${moduleVersion}`); - this._unwrap(moduleExports.Together.Chat.Completions.prototype, "create"); - this._unwrap(moduleExports.Together.Completions.prototype, "create"); - } - patchTogether(type) { - const plugin = this; - return (original) => { - return function method(...args) { - const span = type === "chat" ? plugin.startSpan({ - type, - params: args[0] - }) : plugin.startSpan({ - type, - params: args[0] - }); - const execContext = import_api50.trace.setSpan(import_api50.context.active(), span); - const execPromise = import_instrumentation11.safeExecuteInTheMiddle(() => { - return import_api50.context.with(execContext, () => { - var _a2; - if ((_a2 = args === null || args === undefined ? undefined : args[0]) === null || _a2 === undefined ? undefined : _a2.extraAttributes) { - delete args[0].extraAttributes; - } - return original.apply(this, args); - }); - }, (e) => { - if (e) { - console.error(`Error in ${type} instrumentation:`, e); - plugin._diag.error("Together instrumentation: error", e); - } - }); - if (args[0].stream) { - return import_api50.context.bind(execContext, plugin._streamingWrapPromise({ - span, - type, - params: args[0], - promise: execPromise - })); - } - const wrappedPromise = plugin._wrapPromise(type, span, execPromise); - return import_api50.context.bind(execContext, wrappedPromise); - }; - }; - } - startSpan({ type, params }) { - var _a2, _b, _c, _d; - const attributes = { - [import_ai_semantic_conventions11.SpanAttributes.LLM_SYSTEM]: "TogetherAI", - [import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_TYPE]: type - }; - try { - attributes[import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_MODEL] = params.model; - if (params.max_tokens) { - attributes[import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_MAX_TOKENS] = params.max_tokens; - } - if (params.temperature) { - attributes[import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_TEMPERATURE] = params.temperature; - } - if (params.top_p) { - attributes[import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_TOP_P] = params.top_p; - } - if (params.frequency_penalty) { - attributes[import_ai_semantic_conventions11.SpanAttributes.LLM_FREQUENCY_PENALTY] = params.frequency_penalty; - } - if (params.presence_penalty) { - attributes[import_ai_semantic_conventions11.SpanAttributes.LLM_PRESENCE_PENALTY] = params.presence_penalty; - } - if (params.extraAttributes !== undefined && typeof params.extraAttributes === "object") { - Object.keys(params.extraAttributes).forEach((key) => { - attributes[key] = params.extraAttributes[key]; - }); - } - if (this._shouldSendPrompts()) { - if (type === "chat") { - params.messages.forEach((message, index) => { - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_PROMPTS}.${index}.role`] = message.role; - if (typeof message.content === "string") { - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_PROMPTS}.${index}.content`] = message.content || ""; - } else { - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_PROMPTS}.${index}.content`] = JSON.stringify(message.content); - } - }); - (_a2 = params.tools) === null || _a2 === undefined || _a2.forEach((func, index) => { - var _a3, _b2, _c2; - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`] = (_a3 = func.function) === null || _a3 === undefined ? undefined : _a3.name; - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`] = (_b2 = func.function) === null || _b2 === undefined ? undefined : _b2.description; - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.arguments`] = JSON.stringify((_c2 = func.function) === null || _c2 === undefined ? undefined : _c2.parameters); - }); - (_b = params.tools) === null || _b === undefined || _b.forEach((tool, index) => { - if (!tool.function) { - return; - } - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`] = tool.function.name; - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`] = tool.function.description; - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.arguments`] = JSON.stringify(tool.function.parameters); - }); - } else { - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_PROMPTS}.0.role`] = "user"; - if (typeof params.prompt === "string") { - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_PROMPTS}.0.content`] = params.prompt; - } else { - attributes[`${import_ai_semantic_conventions11.SpanAttributes.LLM_PROMPTS}.0.content`] = JSON.stringify(params.prompt); - } - } - } - } catch (e) { - console.error("Error setting span attributes:", e); - this._diag.debug(e); - (_d = (_c = this._config).exceptionLogger) === null || _d === undefined || _d.call(_c, e); - } - return this.tracer.startSpan(`together.${type}`, { - kind: import_api50.SpanKind.CLIENT, - attributes - }); - } - _streamingWrapPromise(_a2) { - return __asyncGenerator(this, arguments, function* _streamingWrapPromise_1({ span, type, params, promise: promise2 }) { - var _b, e_1, _c, _d, _e, e_2, _f, _g; - var _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1; - if (type === "chat") { - const result = { - id: "0", - created: -1, - model: "", - choices: [ - { - index: 0, - logprobs: null, - finish_reason: "stop", - message: { - role: "assistant", - content: "", - tool_calls: [] - } - } - ], - object: "chat.completion" - }; - const stream3 = yield __await(promise2); - try { - for (var _2 = true, stream_1 = __asyncValues(stream3), stream_1_1;stream_1_1 = yield __await(stream_1.next()), _b = stream_1_1.done, !_b; _2 = true) { - _d = stream_1_1.value; - _2 = false; - const chunk = _d; - yield yield __await(chunk); - result.id = chunk.id; - result.created = chunk.created; - result.model = chunk.model; - if ((_h = chunk.choices[0]) === null || _h === undefined ? undefined : _h.finish_reason) { - result.choices[0].finish_reason = chunk.choices[0].finish_reason; - } - if (result.choices[0].message && ((_j = chunk.choices[0]) === null || _j === undefined ? undefined : _j.delta.content)) { - result.choices[0].message.content += chunk.choices[0].delta.content; - } - if (result.choices[0].message && ((_k = chunk.choices[0]) === null || _k === undefined ? undefined : _k.delta.function_call) && ((_l = chunk.choices[0]) === null || _l === undefined ? undefined : _l.delta.function_call.arguments) && ((_m = chunk.choices[0]) === null || _m === undefined ? undefined : _m.delta.function_call.name)) { - result.choices[0].message.function_call = { - name: chunk.choices[0].delta.function_call.name, - arguments: chunk.choices[0].delta.function_call.arguments - }; - } - for (const toolCall of (_q = (_p = (_o = chunk.choices[0]) === null || _o === undefined ? undefined : _o.delta) === null || _p === undefined ? undefined : _p.tool_calls) !== null && _q !== undefined ? _q : []) { - if (result.choices[0].message && ((_t = (_s = (_r = result.choices[0].message) === null || _r === undefined ? undefined : _r.tool_calls) === null || _s === undefined ? undefined : _s.length) !== null && _t !== undefined ? _t : 0) < toolCall.index + 1) { - (_u = result.choices[0].message.tool_calls) === null || _u === undefined || _u.push({ - function: { - name: "", - arguments: "" - }, - id: "", - type: "function", - index: toolCall.index - }); - } - if (result.choices[0].message && result.choices[0].message.tool_calls) { - if (toolCall.id) { - result.choices[0].message.tool_calls[toolCall.index].id += toolCall.id; - } - if (result.choices[0].message && toolCall.type) { - result.choices[0].message.tool_calls[toolCall.index].type += toolCall.type; - } - if (result.choices[0].message && ((_v = toolCall.function) === null || _v === undefined ? undefined : _v.name)) { - result.choices[0].message.tool_calls[toolCall.index].function.name += toolCall.function.name; - } - if (result.choices[0].message && ((_w = toolCall.function) === null || _w === undefined ? undefined : _w.arguments)) { - result.choices[0].message.tool_calls[toolCall.index].function.arguments += toolCall.function.arguments; - } - } - } - if (chunk.usage) { - result.usage = chunk.usage; - } - } - } catch (e_1_1) { - e_1 = { error: e_1_1 }; - } finally { - try { - if (!_2 && !_b && (_c = stream_1.return)) - yield __await(_c.call(stream_1)); - } finally { - if (e_1) - throw e_1.error; - } - } - this._endSpan({ span, type, result }); - } else { - const result = { - id: "0", - created: -1, - model: "", - choices: [ - { - finish_reason: "stop", - text: "" - } - ], - object: "text.completion", - usage: { - prompt_tokens: 0, - completion_tokens: 0, - total_tokens: 0 - } - }; - try { - for (var _3 = true, _4 = __asyncValues(yield __await(promise2)), _5;_5 = yield __await(_4.next()), _e = _5.done, !_e; _3 = true) { - _g = _5.value; - _3 = false; - const chunk = _g; - yield yield __await(chunk); - try { - result.id = chunk.id; - result.created = chunk.created; - result.model = chunk.model; - if ((_x = chunk.choices[0]) === null || _x === undefined ? undefined : _x.finish_reason) { - result.choices[0].finish_reason = chunk.choices[0].finish_reason; - } - if ((_y = chunk.choices[0]) === null || _y === undefined ? undefined : _y.logprobs) { - result.choices[0].logprobs = chunk.choices[0].logprobs; - } - if ((_z = chunk.choices[0]) === null || _z === undefined ? undefined : _z.text) { - result.choices[0].text += chunk.choices[0].text; - } - if (chunk.usage) { - result.usage = chunk.usage; - } - } catch (e) { - console.error("Error processing chunk:", e); - this._diag.debug(e); - (_1 = (_0 = this._config).exceptionLogger) === null || _1 === undefined || _1.call(_0, e); - } - } - } catch (e_2_1) { - e_2 = { error: e_2_1 }; - } finally { - try { - if (!_3 && !_e && (_f = _4.return)) - yield __await(_f.call(_4)); - } finally { - if (e_2) - throw e_2.error; - } - } - this._endSpan({ span, type, result }); - } - }); - } - _wrapPromise(type, span, promise2) { - return promise2._thenUnwrap((result) => { - if (type === "chat") { - this._endSpan({ - type, - span, - result - }); - } else { - this._endSpan({ - type, - span, - result - }); - } - return result; - }); - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api50.context.active().getValue(import_ai_semantic_conventions11.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - _endSpan({ span, type, result }) { - var _a2, _b, _c, _d, _e; - try { - span.setAttribute(import_ai_semantic_conventions11.SpanAttributes.LLM_RESPONSE_MODEL, result.model); - if (result.usage) { - span.setAttribute(import_ai_semantic_conventions11.SpanAttributes.LLM_USAGE_TOTAL_TOKENS, (_a2 = result.usage) === null || _a2 === undefined ? undefined : _a2.total_tokens); - span.setAttribute(import_ai_semantic_conventions11.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, (_b = result.usage) === null || _b === undefined ? undefined : _b.completion_tokens); - span.setAttribute(import_ai_semantic_conventions11.SpanAttributes.LLM_USAGE_PROMPT_TOKENS, (_c = result.usage) === null || _c === undefined ? undefined : _c.prompt_tokens); - } - if (this._shouldSendPrompts()) { - if (type === "chat") { - result.choices.forEach((choice, index) => { - var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.finish_reason`, (_a3 = choice.finish_reason) !== null && _a3 !== undefined ? _a3 : ""); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, (_c2 = (_b2 = choice.message) === null || _b2 === undefined ? undefined : _b2.role) !== null && _c2 !== undefined ? _c2 : ""); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, (_e2 = (_d2 = choice.message) === null || _d2 === undefined ? undefined : _d2.content) !== null && _e2 !== undefined ? _e2 : ""); - if ((_f = choice.message) === null || _f === undefined ? undefined : _f.function_call) { - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.function_call.name`, (_j = (_h = (_g = choice.message) === null || _g === undefined ? undefined : _g.function_call) === null || _h === undefined ? undefined : _h.name) !== null && _j !== undefined ? _j : ""); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.function_call.arguments`, (_m = (_l = (_k = choice.message) === null || _k === undefined ? undefined : _k.function_call) === null || _l === undefined ? undefined : _l.arguments) !== null && _m !== undefined ? _m : ""); - } else if ((_p = (_o = choice.message) === null || _o === undefined ? undefined : _o.tool_calls) === null || _p === undefined ? undefined : _p[0]) { - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.function_call.name`, (_q = choice.message.tool_calls[0].function.name) !== null && _q !== undefined ? _q : ""); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.function_call.arguments`, (_r = choice.message.tool_calls[0].function.arguments) !== null && _r !== undefined ? _r : ""); - } - if ((_s = choice === null || choice === undefined ? undefined : choice.message) === null || _s === undefined ? undefined : _s.tool_calls) { - for (const [toolIndex, toolCall] of choice.message.tool_calls.entries()) { - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.tool_calls.${toolIndex}.name`, toolCall.function.name); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.tool_calls.${toolIndex}.arguments`, toolCall.function.arguments); - } - } - }); - } else { - result.choices.forEach((choice, index) => { - var _a3, _b2; - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.finish_reason`, (_a3 = choice.finish_reason) !== null && _a3 !== undefined ? _a3 : ""); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.role`, "assistant"); - span.setAttribute(`${import_ai_semantic_conventions11.SpanAttributes.LLM_COMPLETIONS}.${index}.content`, (_b2 = choice.text) !== null && _b2 !== undefined ? _b2 : ""); - }); - } - } - } catch (e) { - console.error("Error ending span:", e); - this._diag.debug(e); - (_e = (_d = this._config).exceptionLogger) === null || _e === undefined || _e.call(_d, e); - } - span.end(); - } - }; -}); - -// ../../../../node_modules/.bun/@traceloop+instrumentation-mcp@0.21.0/node_modules/@traceloop/instrumentation-mcp/dist/index.mjs -var import_api51, import_instrumentation12, import_ai_semantic_conventions12, version14 = "0.21.0", SESSION_CONTEXT_SYMBOL, SESSION_SPAN_SYMBOL, McpInstrumentation; -var init_dist15 = __esm(() => { - import_api51 = __toESM(require_src(), 1); - import_instrumentation12 = __toESM(require_src97(), 1); - import_ai_semantic_conventions12 = __toESM(require_src2(), 1); - SESSION_CONTEXT_SYMBOL = Symbol("mcp-session-context"); - SESSION_SPAN_SYMBOL = Symbol("mcp-session-span"); - McpInstrumentation = class McpInstrumentation extends import_instrumentation12.InstrumentationBase { - constructor(config2 = {}) { - super("@traceloop/instrumentation-mcp", version14, config2); - } - setConfig(config2 = {}) { - super.setConfig(config2); - } - init() { - const clientModule = new import_instrumentation12.InstrumentationNodeModuleDefinition("@modelcontextprotocol/sdk/client", [">=1.0.0"], this.patchClient.bind(this), this.unpatchClient.bind(this)); - const clientIndexModule = new import_instrumentation12.InstrumentationNodeModuleDefinition("@modelcontextprotocol/sdk/client/index.js", [">=1.0.0"], this.patchClient.bind(this), this.unpatchClient.bind(this)); - const serverModule = new import_instrumentation12.InstrumentationNodeModuleDefinition("@modelcontextprotocol/sdk/server", [">=1.0.0"], this.patchServer.bind(this), this.unpatchServer.bind(this)); - const serverIndexModule = new import_instrumentation12.InstrumentationNodeModuleDefinition("@modelcontextprotocol/sdk/server/index.js", [">=1.0.0"], this.patchServer.bind(this), this.unpatchServer.bind(this)); - return [clientModule, clientIndexModule, serverModule, serverIndexModule]; - } - manuallyInstrument(module) { - this._diag.debug("Manually instrumenting MCP SDK"); - if (module.Client) { - this._diag.debug("Wrapping MCP Client methods"); - this._wrap(module.Client.prototype, "connect", this._wrapConnect.bind(this)); - this._wrap(module.Client.prototype, "request", this._wrapRequest.bind(this, "client")); - this._wrap(module.Client.prototype, "close", this._wrapClose.bind(this)); - } - if (module.Server) { - this._diag.debug("Wrapping MCP Server methods"); - this._wrap(module.Server.prototype, "request", this._wrapRequest.bind(this, "server")); - } - if (!module.Client && !module.Server) { - this._diag.warn("manuallyInstrument called but no Client or Server found in provided module"); - } - } - patchClient(moduleExports, moduleVersion) { - this._diag.debug(`Patching @modelcontextprotocol/sdk/client@${moduleVersion}`); - if (moduleExports.Client) { - this._diag.debug("Patching MCP Client"); - this._wrap(moduleExports.Client.prototype, "connect", this._wrapConnect.bind(this)); - this._wrap(moduleExports.Client.prototype, "request", this._wrapRequest.bind(this, "client")); - this._wrap(moduleExports.Client.prototype, "close", this._wrapClose.bind(this)); - } - return moduleExports; - } - unpatchClient(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching @modelcontextprotocol/sdk/client@${moduleVersion}`); - if (moduleExports.Client) { - this._unwrap(moduleExports.Client.prototype, "connect"); - this._unwrap(moduleExports.Client.prototype, "request"); - this._unwrap(moduleExports.Client.prototype, "close"); - } - } - patchServer(moduleExports, moduleVersion) { - this._diag.debug(`Patching @modelcontextprotocol/sdk/server@${moduleVersion}`); - if (moduleExports.Server) { - this._diag.debug("Patching MCP Server"); - this._wrap(moduleExports.Server.prototype, "request", this._wrapRequest.bind(this, "server")); - } - return moduleExports; - } - unpatchServer(moduleExports, moduleVersion) { - this._diag.debug(`Unpatching @modelcontextprotocol/sdk/server@${moduleVersion}`); - if (moduleExports.Server) { - this._unwrap(moduleExports.Server.prototype, "request"); - } - } - _wrapConnect(original) { - const plugin = this; - return function(...args) { - const span = plugin.tracer.startSpan("mcp.client.session", { - kind: import_api51.SpanKind.CLIENT - }); - span.setAttribute(import_ai_semantic_conventions12.SpanAttributes.TRACELOOP_SPAN_KIND, "session"); - span.setAttribute(import_ai_semantic_conventions12.SpanAttributes.TRACELOOP_ENTITY_NAME, "mcp.client.session"); - const sessionContext = import_api51.trace.setSpan(import_api51.context.active(), span); - this[SESSION_CONTEXT_SYMBOL] = sessionContext; - this[SESSION_SPAN_SYMBOL] = span; - try { - const result = original.apply(this, args); - if (result && typeof result.then === "function") { - return result.then((value) => { - span.setStatus({ code: import_api51.SpanStatusCode.OK }); - return value; - }).catch((error48) => { - span.recordException(error48); - span.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - delete this[SESSION_CONTEXT_SYMBOL]; - delete this[SESSION_SPAN_SYMBOL]; - throw error48; - }); - } - span.setStatus({ code: import_api51.SpanStatusCode.OK }); - return result; - } catch (error48) { - const err = error48; - span.recordException(err); - span.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: (err === null || err === undefined ? undefined : err.message) || String(error48) - }); - span.end(); - delete this[SESSION_CONTEXT_SYMBOL]; - delete this[SESSION_SPAN_SYMBOL]; - throw error48; - } - }; - } - _wrapRequest(side, original) { - const plugin = this; - return function(...args) { - var _a2, _b; - const request = args[0]; - if (!request || !request.method) { - return original.apply(this, args); - } - const method = request.method; - const params = request.params; - let spanName; - if (method === "tools/call") { - const toolName = (params === null || params === undefined ? undefined : params.name) || "unknown"; - spanName = `${toolName}.tool`; - } else { - spanName = `${method}.mcp`; - } - const sessionContext = this[SESSION_CONTEXT_SYMBOL]; - const parentContext = sessionContext || import_api51.context.active(); - const span = plugin.tracer.startSpan(spanName, { - kind: side === "client" ? import_api51.SpanKind.CLIENT : import_api51.SpanKind.SERVER - }, parentContext); - if (method === "tools/call") { - const toolName = (params === null || params === undefined ? undefined : params.name) || "unknown"; - span.setAttribute(import_ai_semantic_conventions12.SpanAttributes.TRACELOOP_SPAN_KIND, "tool"); - span.setAttribute(import_ai_semantic_conventions12.SpanAttributes.TRACELOOP_ENTITY_NAME, toolName); - } - if (plugin._shouldSendPrompts()) { - try { - const cleanInput = plugin._extractCleanInput(method, params); - if (cleanInput && Object.keys(cleanInput).length > 0) { - span.setAttribute(import_ai_semantic_conventions12.SpanAttributes.TRACELOOP_ENTITY_INPUT, JSON.stringify(cleanInput)); - } - } catch (error48) { - plugin._diag.debug("Error extracting input:", error48); - (_b = (_a2 = plugin._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, error48); - } - } - const execContext = import_api51.trace.setSpan(import_api51.context.active(), span); - return import_api51.context.with(execContext, () => { - try { - const result = original.apply(this, args); - if (result && typeof result.then === "function") { - return result.then((value) => { - plugin._handleResult(span, method, value); - return value; - }).catch((error48) => { - span.recordException(error48); - span.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: error48.message - }); - span.end(); - throw error48; - }); - } - plugin._handleResult(span, method, result); - return result; - } catch (error48) { - const err = error48; - span.recordException(err); - span.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: (err === null || err === undefined ? undefined : err.message) || String(error48) - }); - span.end(); - throw error48; - } - }); - }; - } - _wrapClose(original) { - return function(...args) { - const sessionSpan = this[SESSION_SPAN_SYMBOL]; - try { - const result = original.apply(this, args); - if (result && typeof result.then === "function") { - return result.then((value) => { - if (sessionSpan) { - sessionSpan.setStatus({ code: import_api51.SpanStatusCode.OK }); - sessionSpan.end(); - delete this[SESSION_CONTEXT_SYMBOL]; - delete this[SESSION_SPAN_SYMBOL]; - } - return value; - }).catch((error48) => { - if (sessionSpan) { - sessionSpan.recordException(error48); - sessionSpan.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: error48.message - }); - sessionSpan.end(); - delete this[SESSION_CONTEXT_SYMBOL]; - delete this[SESSION_SPAN_SYMBOL]; - } - throw error48; - }); - } - if (sessionSpan) { - sessionSpan.setStatus({ code: import_api51.SpanStatusCode.OK }); - sessionSpan.end(); - delete this[SESSION_CONTEXT_SYMBOL]; - delete this[SESSION_SPAN_SYMBOL]; - } - return result; - } catch (error48) { - if (sessionSpan) { - const err = error48; - sessionSpan.recordException(err); - sessionSpan.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: (err === null || err === undefined ? undefined : err.message) || String(error48) - }); - sessionSpan.end(); - delete this[SESSION_CONTEXT_SYMBOL]; - delete this[SESSION_SPAN_SYMBOL]; - } - throw error48; - } - }; - } - _handleResult(span, method, result) { - var _a2, _b, _c, _d; - try { - if (this._shouldSendPrompts()) { - const cleanOutput = this._extractCleanOutput(method, result); - if (cleanOutput && Object.keys(cleanOutput).length > 0) { - span.setAttribute(import_ai_semantic_conventions12.SpanAttributes.TRACELOOP_ENTITY_OUTPUT, JSON.stringify(cleanOutput)); - } - } - if (result && typeof result === "object") { - const mcpResult = result; - if (mcpResult === null || mcpResult === undefined ? undefined : mcpResult.isError) { - const errorMessage = ((_b = (_a2 = mcpResult.content) === null || _a2 === undefined ? undefined : _a2[0]) === null || _b === undefined ? undefined : _b.text) || "Unknown error"; - span.setStatus({ - code: import_api51.SpanStatusCode.ERROR, - message: errorMessage - }); - } else { - span.setStatus({ code: import_api51.SpanStatusCode.OK }); - } - } else { - span.setStatus({ code: import_api51.SpanStatusCode.OK }); - } - } catch (error48) { - this._diag.debug("Error handling result:", error48); - (_d = (_c = this._config).exceptionLogger) === null || _d === undefined || _d.call(_c, error48); - } finally { - span.end(); - } - } - _extractCleanInput(method, params) { - var _a2, _b; - if (!params) { - return {}; - } - try { - if (method === "tools/call" && typeof params === "object" && params !== null) { - const result = {}; - const toolParams = params; - if (toolParams.name) { - result.tool_name = toolParams.name; - } - if (toolParams.arguments) { - result.arguments = toolParams.arguments; - } - return result; - } else if (method === "tools/list") { - return {}; - } else if (method === "resources/read") { - if (typeof params === "object" && params !== null && "uri" in params) { - return { - uri: params.uri - }; - } - return {}; - } else if (method === "resources/list") { - return {}; - } else if (method === "prompts/get") { - if (typeof params === "object" && params !== null) { - return { - name: "name" in params ? params.name : undefined, - arguments: "arguments" in params ? params.arguments : undefined - }; - } - return {}; - } else if (method === "prompts/list") { - return {}; - } else { - if (typeof params === "object" && params !== null) { - const cleanParams = {}; - for (const [key, value] of Object.entries(params)) { - if (!key.startsWith("_")) { - try { - JSON.stringify(value); - cleanParams[key] = value; - } catch (_c) { - cleanParams[key] = typeof value; - } - } - } - return cleanParams; - } - return { params: String(params) }; - } - } catch (error48) { - this._diag.debug("Error extracting clean input:", error48); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, error48); - return {}; - } - } - _extractCleanOutput(method, result) { - var _a2, _b; - if (!result) { - return {}; - } - try { - if (typeof result !== "object") { - return { result: String(result) }; - } - const mcpResult = result; - if (method === "tools/call") { - const output = {}; - if (mcpResult.content && Array.isArray(mcpResult.content) && mcpResult.content.length > 0) { - const contentItem = mcpResult.content[0]; - if (contentItem.text !== undefined) { - output.result = contentItem.text; - } else if (contentItem.type) { - output.result = contentItem; - } - } - if (mcpResult.isError !== undefined) { - output.is_error = mcpResult.isError; - } - return output; - } else if (method === "tools/list") { - const output = { tools: [] }; - if (mcpResult.tools && Array.isArray(mcpResult.tools)) { - output.tools = mcpResult.tools.map((tool) => ({ - name: tool.name, - description: tool.description - })); - } - return output; - } else if (method === "resources/read") { - const output = {}; - if (mcpResult.contents && Array.isArray(mcpResult.contents)) { - output.contents = mcpResult.contents.map((content) => { - var _a3; - return { - uri: content.uri, - mimeType: content.mimeType, - text: (_a3 = content.text) === null || _a3 === undefined ? undefined : _a3.substring(0, 1000) - }; - }); - } - return output; - } else if (method === "resources/list") { - const output = { resources: [] }; - if (mcpResult.resources && Array.isArray(mcpResult.resources)) { - output.resources = mcpResult.resources.map((resource) => ({ - uri: resource.uri, - name: resource.name, - description: resource.description - })); - } - return output; - } else if (method === "prompts/get") { - const output = {}; - if (mcpResult.messages && Array.isArray(mcpResult.messages)) { - output.messages = mcpResult.messages.map((message) => ({ - role: message.role, - content: typeof message.content === "string" ? message.content : JSON.stringify(message.content) - })); - } - return output; - } else if (method === "prompts/list") { - const output = { prompts: [] }; - if (mcpResult.prompts && Array.isArray(mcpResult.prompts)) { - output.prompts = mcpResult.prompts.map((prompt) => ({ - name: prompt.name, - description: prompt.description - })); - } - return output; - } else { - const cleanResult = {}; - for (const [key, value] of Object.entries(result)) { - if (!key.startsWith("_")) { - try { - JSON.stringify(value); - cleanResult[key] = value; - } catch (_c) { - cleanResult[key] = typeof value; - } - } - } - return cleanResult; - } - } catch (error48) { - this._diag.debug("Error extracting clean output:", error48); - (_b = (_a2 = this._config).exceptionLogger) === null || _b === undefined || _b.call(_a2, error48); - return {}; - } - } - _shouldSendPrompts() { - const contextShouldSendPrompts = import_api51.context.active().getValue(import_ai_semantic_conventions12.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined && contextShouldSendPrompts !== null) { - return Boolean(contextShouldSendPrompts); - } - return this._config.traceContent !== undefined ? this._config.traceContent : true; - } - }; -}); - -// ../../../../node_modules/.bun/cross-fetch@4.1.0/node_modules/cross-fetch/dist/node-ponyfill.js -var require_node_ponyfill = __commonJS((exports, module) => { - var nodeFetch = __require("node-fetch"); - var realFetch = nodeFetch.default || nodeFetch; - var fetch2 = function(url2, options) { - if (/^\/\//.test(url2)) { - url2 = "https:" + url2; - } - return realFetch.call(this, url2, options); - }; - fetch2.ponyfill = true; - module.exports = exports = fetch2; - exports.fetch = fetch2; - exports.Headers = nodeFetch.Headers; - exports.Request = nodeFetch.Request; - exports.Response = nodeFetch.Response; - exports.default = fetch2; -}); - -// ../../../../node_modules/.bun/fetch-retry@6.0.0/node_modules/fetch-retry/index.js -var require_fetch_retry = __commonJS((exports, module) => { - module.exports = function(fetch2, defaults) { - defaults = defaults || {}; - if (typeof fetch2 !== "function") { - throw new ArgumentError("fetch must be a function"); - } - if (typeof defaults !== "object") { - throw new ArgumentError("defaults must be an object"); - } - if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) { - throw new ArgumentError("retries must be a positive integer"); - } - if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== "function") { - throw new ArgumentError("retryDelay must be a positive integer or a function returning a positive integer"); - } - if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== "function") { - throw new ArgumentError("retryOn property expects an array or function"); - } - var baseDefaults = { - retries: 3, - retryDelay: 1000, - retryOn: [] - }; - defaults = Object.assign(baseDefaults, defaults); - return function fetchRetry(input, init2) { - var retries = defaults.retries; - var retryDelay = defaults.retryDelay; - var retryOn = defaults.retryOn; - if (init2 && init2.retries !== undefined) { - if (isPositiveInteger(init2.retries)) { - retries = init2.retries; - } else { - throw new ArgumentError("retries must be a positive integer"); - } - } - if (init2 && init2.retryDelay !== undefined) { - if (isPositiveInteger(init2.retryDelay) || typeof init2.retryDelay === "function") { - retryDelay = init2.retryDelay; - } else { - throw new ArgumentError("retryDelay must be a positive integer or a function returning a positive integer"); - } - } - if (init2 && init2.retryOn) { - if (Array.isArray(init2.retryOn) || typeof init2.retryOn === "function") { - retryOn = init2.retryOn; - } else { - throw new ArgumentError("retryOn property expects an array or function"); - } - } - return new Promise(function(resolve2, reject) { - var wrappedFetch = function(attempt) { - var _input = typeof Request !== "undefined" && input instanceof Request ? input.clone() : input; - fetch2(_input, init2).then(function(response) { - if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) { - resolve2(response); - } else if (typeof retryOn === "function") { - try { - return Promise.resolve(retryOn(attempt, null, response)).then(function(retryOnResponse) { - if (retryOnResponse) { - retry(attempt, null, response); - } else { - resolve2(response); - } - }).catch(reject); - } catch (error48) { - reject(error48); - } - } else { - if (attempt < retries) { - retry(attempt, null, response); - } else { - resolve2(response); - } - } - }).catch(function(error48) { - if (typeof retryOn === "function") { - try { - Promise.resolve(retryOn(attempt, error48, null)).then(function(retryOnResponse) { - if (retryOnResponse) { - retry(attempt, error48, null); - } else { - reject(error48); - } - }).catch(function(error49) { - reject(error49); - }); - } catch (error49) { - reject(error49); - } - } else if (attempt < retries) { - retry(attempt, error48, null); - } else { - reject(error48); - } - }); - }; - function retry(attempt, error48, response) { - var delay = typeof retryDelay === "function" ? retryDelay(attempt, error48, response) : retryDelay; - setTimeout(function() { - wrappedFetch(++attempt); - }, delay); - } - wrappedFetch(0); - }); - }; - }; - function isPositiveInteger(value) { - return Number.isInteger(value) && value >= 0; - } - function ArgumentError(message) { - this.name = "ArgumentError"; - this.message = message; - } -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/lib.js -var require_lib = __commonJS((exports, module) => { - var ArrayProto = Array.prototype; - var ObjProto = Object.prototype; - var escapeMap = { - "&": "&", - '"': """, - "'": "'", - "<": "<", - ">": ">", - "\\": "\" - }; - var escapeRegex3 = /[&"'<>\\]/g; - var _exports = module.exports = {}; - function hasOwnProp(obj, k) { - return ObjProto.hasOwnProperty.call(obj, k); - } - _exports.hasOwnProp = hasOwnProp; - function lookupEscape(ch) { - return escapeMap[ch]; - } - function _prettifyError(path, withInternals, err) { - if (!err.Update) { - err = new _exports.TemplateError(err); - } - err.Update(path); - if (!withInternals) { - var old = err; - err = new Error(old.message); - err.name = old.name; - } - return err; - } - _exports._prettifyError = _prettifyError; - function TemplateError(message, lineno, colno) { - var err; - var cause; - if (message instanceof Error) { - cause = message; - message = cause.name + ": " + cause.message; - } - if (Object.setPrototypeOf) { - err = new Error(message); - Object.setPrototypeOf(err, TemplateError.prototype); - } else { - err = this; - Object.defineProperty(err, "message", { - enumerable: false, - writable: true, - value: message - }); - } - Object.defineProperty(err, "name", { - value: "Template render error" - }); - if (Error.captureStackTrace) { - Error.captureStackTrace(err, this.constructor); - } - var getStack; - if (cause) { - var stackDescriptor = Object.getOwnPropertyDescriptor(cause, "stack"); - getStack = stackDescriptor && (stackDescriptor.get || function() { - return stackDescriptor.value; - }); - if (!getStack) { - getStack = function getStack() { - return cause.stack; - }; - } - } else { - var stack = new Error(message).stack; - getStack = function getStack() { - return stack; - }; - } - Object.defineProperty(err, "stack", { - get: function get() { - return getStack.call(err); - } - }); - Object.defineProperty(err, "cause", { - value: cause - }); - err.lineno = lineno; - err.colno = colno; - err.firstUpdate = true; - err.Update = function Update(path) { - var msg = "(" + (path || "unknown path") + ")"; - if (this.firstUpdate) { - if (this.lineno && this.colno) { - msg += " [Line " + this.lineno + ", Column " + this.colno + "]"; - } else if (this.lineno) { - msg += " [Line " + this.lineno + "]"; - } - } - msg += ` - `; - if (this.firstUpdate) { - msg += " "; - } - this.message = msg + (this.message || ""); - this.firstUpdate = false; - return this; - }; - return err; - } - if (Object.setPrototypeOf) { - Object.setPrototypeOf(TemplateError.prototype, Error.prototype); - } else { - TemplateError.prototype = Object.create(Error.prototype, { - constructor: { - value: TemplateError - } - }); - } - _exports.TemplateError = TemplateError; - function escape(val) { - return val.replace(escapeRegex3, lookupEscape); - } - _exports.escape = escape; - function isFunction(obj) { - return ObjProto.toString.call(obj) === "[object Function]"; - } - _exports.isFunction = isFunction; - function isArray(obj) { - return ObjProto.toString.call(obj) === "[object Array]"; - } - _exports.isArray = isArray; - function isString(obj) { - return ObjProto.toString.call(obj) === "[object String]"; - } - _exports.isString = isString; - function isObject2(obj) { - return ObjProto.toString.call(obj) === "[object Object]"; - } - _exports.isObject = isObject2; - function _prepareAttributeParts(attr) { - if (!attr) { - return []; - } - if (typeof attr === "string") { - return attr.split("."); - } - return [attr]; - } - function getAttrGetter(attribute) { - var parts = _prepareAttributeParts(attribute); - return function attrGetter(item) { - var _item = item; - for (var i = 0;i < parts.length; i++) { - var part = parts[i]; - if (hasOwnProp(_item, part)) { - _item = _item[part]; - } else { - return; - } - } - return _item; - }; - } - _exports.getAttrGetter = getAttrGetter; - function groupBy(obj, val, throwOnUndefined) { - var result = {}; - var iterator = isFunction(val) ? val : getAttrGetter(val); - for (var i = 0;i < obj.length; i++) { - var value = obj[i]; - var key = iterator(value, i); - if (key === undefined && throwOnUndefined === true) { - throw new TypeError('groupby: attribute "' + val + '" resolved to undefined'); - } - (result[key] || (result[key] = [])).push(value); - } - return result; - } - _exports.groupBy = groupBy; - function toArray(obj) { - return Array.prototype.slice.call(obj); - } - _exports.toArray = toArray; - function without(array3) { - var result = []; - if (!array3) { - return result; - } - var length = array3.length; - var contains = toArray(arguments).slice(1); - var index = -1; - while (++index < length) { - if (indexOf(contains, array3[index]) === -1) { - result.push(array3[index]); - } - } - return result; - } - _exports.without = without; - function repeat(char_, n) { - var str = ""; - for (var i = 0;i < n; i++) { - str += char_; - } - return str; - } - _exports.repeat = repeat; - function each(obj, func, context19) { - if (obj == null) { - return; - } - if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) { - obj.forEach(func, context19); - } else if (obj.length === +obj.length) { - for (var i = 0, l = obj.length;i < l; i++) { - func.call(context19, obj[i], i, obj); - } - } - } - _exports.each = each; - function map2(obj, func) { - var results = []; - if (obj == null) { - return results; - } - if (ArrayProto.map && obj.map === ArrayProto.map) { - return obj.map(func); - } - for (var i = 0;i < obj.length; i++) { - results[results.length] = func(obj[i], i); - } - if (obj.length === +obj.length) { - results.length = obj.length; - } - return results; - } - _exports.map = map2; - function asyncIter(arr, iter, cb) { - var i = -1; - function next() { - i++; - if (i < arr.length) { - iter(arr[i], i, next, cb); - } else { - cb(); - } - } - next(); - } - _exports.asyncIter = asyncIter; - function asyncFor(obj, iter, cb) { - var keys = keys_(obj || {}); - var len = keys.length; - var i = -1; - function next() { - i++; - var k = keys[i]; - if (i < len) { - iter(k, obj[k], i, len, next); - } else { - cb(); - } - } - next(); - } - _exports.asyncFor = asyncFor; - function indexOf(arr, searchElement, fromIndex) { - return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex); - } - _exports.indexOf = indexOf; - function keys_(obj) { - var arr = []; - for (var k in obj) { - if (hasOwnProp(obj, k)) { - arr.push(k); - } - } - return arr; - } - _exports.keys = keys_; - function _entries(obj) { - return keys_(obj).map(function(k) { - return [k, obj[k]]; - }); - } - _exports._entries = _entries; - function _values(obj) { - return keys_(obj).map(function(k) { - return obj[k]; - }); - } - _exports._values = _values; - function extend2(obj1, obj2) { - obj1 = obj1 || {}; - keys_(obj2).forEach(function(k) { - obj1[k] = obj2[k]; - }); - return obj1; - } - _exports._assign = _exports.extend = extend2; - function inOperator(key, val) { - if (isArray(val) || isString(val)) { - return val.indexOf(key) !== -1; - } else if (isObject2(val)) { - return key in val; - } - throw new Error('Cannot use "in" operator to search for "' + key + '" in unexpected types.'); - } - _exports.inOperator = inOperator; -}); - -// ../../../../node_modules/.bun/asap@2.0.6/node_modules/asap/raw.js -var require_raw = __commonJS((exports, module) => { - var domain2; - var hasSetImmediate = typeof setImmediate === "function"; - module.exports = rawAsap; - function rawAsap(task) { - if (!queue.length) { - requestFlush(); - flushing = true; - } - queue[queue.length] = task; - } - var queue = []; - var flushing = false; - var index = 0; - var capacity = 1024; - function flush() { - while (index < queue.length) { - var currentIndex = index; - index = index + 1; - queue[currentIndex].call(); - if (index > capacity) { - for (var scan = 0, newLength = queue.length - index;scan < newLength; scan++) { - queue[scan] = queue[scan + index]; - } - queue.length -= index; - index = 0; - } - } - queue.length = 0; - index = 0; - flushing = false; - } - rawAsap.requestFlush = requestFlush; - function requestFlush() { - var parentDomain = process.domain; - if (parentDomain) { - if (!domain2) { - domain2 = __require("domain"); - } - domain2.active = process.domain = null; - } - if (flushing && hasSetImmediate) { - setImmediate(flush); - } else { - process.nextTick(flush); - } - if (parentDomain) { - domain2.active = process.domain = parentDomain; - } - } -}); - -// ../../../../node_modules/.bun/asap@2.0.6/node_modules/asap/asap.js -var require_asap = __commonJS((exports, module) => { - var rawAsap = require_raw(); - var freeTasks = []; - module.exports = asap; - function asap(task) { - var rawTask; - if (freeTasks.length) { - rawTask = freeTasks.pop(); - } else { - rawTask = new RawTask; - } - rawTask.task = task; - rawTask.domain = process.domain; - rawAsap(rawTask); - } - function RawTask() { - this.task = null; - this.domain = null; - } - RawTask.prototype.call = function() { - if (this.domain) { - this.domain.enter(); - } - var threw = true; - try { - this.task.call(); - threw = false; - if (this.domain) { - this.domain.exit(); - } - } finally { - if (threw) { - rawAsap.requestFlush(); - } - this.task = null; - this.domain = null; - freeTasks.push(this); - } - }; -}); - -// ../../../../node_modules/.bun/a-sync-waterfall@1.0.1/node_modules/a-sync-waterfall/index.js -var require_a_sync_waterfall = __commonJS((exports, module) => { - (function(globals) { - var executeSync = function() { - var args = Array.prototype.slice.call(arguments); - if (typeof args[0] === "function") { - args[0].apply(null, args.splice(1)); - } - }; - var executeAsync = function(fn) { - if (typeof setImmediate === "function") { - setImmediate(fn); - } else if (typeof process !== "undefined" && process.nextTick) { - process.nextTick(fn); - } else { - setTimeout(fn, 0); - } - }; - var makeIterator = function(tasks) { - var makeCallback = function(index) { - var fn = function() { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function() { - return index < tasks.length - 1 ? makeCallback(index + 1) : null; - }; - return fn; - }; - return makeCallback(0); - }; - var _isArray = Array.isArray || function(maybeArray) { - return Object.prototype.toString.call(maybeArray) === "[object Array]"; - }; - var waterfall = function(tasks, callback, forceAsync) { - var nextTick = forceAsync ? executeAsync : executeSync; - callback = callback || function() {}; - if (!_isArray(tasks)) { - var err = new Error("First argument to waterfall must be an array of functions"); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function(iterator) { - return function(err2) { - if (err2) { - callback.apply(null, arguments); - callback = function() {}; - } else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } else { - args.push(callback); - } - nextTick(function() { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(makeIterator(tasks))(); - }; - if (typeof define !== "undefined" && define.amd) { - define([], function() { - return waterfall; - }); - } else if (typeof module !== "undefined" && module.exports) { - module.exports = waterfall; - } else { - globals.waterfall = waterfall; - } - })(exports); -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/lexer.js -var require_lexer = __commonJS((exports, module) => { - var lib = require_lib(); - var whitespaceChars = ` - \r\xA0`; - var delimChars = "()[]{}%*-+~/#,:|.<>=!"; - var intChars = "0123456789"; - var BLOCK_START = "{%"; - var BLOCK_END = "%}"; - var VARIABLE_START = "{{"; - var VARIABLE_END = "}}"; - var COMMENT_START = "{#"; - var COMMENT_END = "#}"; - var TOKEN_STRING = "string"; - var TOKEN_WHITESPACE = "whitespace"; - var TOKEN_DATA = "data"; - var TOKEN_BLOCK_START = "block-start"; - var TOKEN_BLOCK_END = "block-end"; - var TOKEN_VARIABLE_START = "variable-start"; - var TOKEN_VARIABLE_END = "variable-end"; - var TOKEN_COMMENT = "comment"; - var TOKEN_LEFT_PAREN = "left-paren"; - var TOKEN_RIGHT_PAREN = "right-paren"; - var TOKEN_LEFT_BRACKET = "left-bracket"; - var TOKEN_RIGHT_BRACKET = "right-bracket"; - var TOKEN_LEFT_CURLY = "left-curly"; - var TOKEN_RIGHT_CURLY = "right-curly"; - var TOKEN_OPERATOR = "operator"; - var TOKEN_COMMA = "comma"; - var TOKEN_COLON = "colon"; - var TOKEN_TILDE = "tilde"; - var TOKEN_PIPE = "pipe"; - var TOKEN_INT = "int"; - var TOKEN_FLOAT = "float"; - var TOKEN_BOOLEAN = "boolean"; - var TOKEN_NONE = "none"; - var TOKEN_SYMBOL = "symbol"; - var TOKEN_SPECIAL = "special"; - var TOKEN_REGEX = "regex"; - function token(type, value, lineno, colno) { - return { - type, - value, - lineno, - colno - }; - } - var Tokenizer = /* @__PURE__ */ function() { - function Tokenizer2(str, opts) { - this.str = str; - this.index = 0; - this.len = str.length; - this.lineno = 0; - this.colno = 0; - this.in_code = false; - opts = opts || {}; - var tags = opts.tags || {}; - this.tags = { - BLOCK_START: tags.blockStart || BLOCK_START, - BLOCK_END: tags.blockEnd || BLOCK_END, - VARIABLE_START: tags.variableStart || VARIABLE_START, - VARIABLE_END: tags.variableEnd || VARIABLE_END, - COMMENT_START: tags.commentStart || COMMENT_START, - COMMENT_END: tags.commentEnd || COMMENT_END - }; - this.trimBlocks = !!opts.trimBlocks; - this.lstripBlocks = !!opts.lstripBlocks; - } - var _proto = Tokenizer2.prototype; - _proto.nextToken = function nextToken() { - var lineno = this.lineno; - var colno = this.colno; - var tok; - if (this.in_code) { - var cur = this.current(); - if (this.isFinished()) { - return null; - } else if (cur === '"' || cur === "'") { - return token(TOKEN_STRING, this._parseString(cur), lineno, colno); - } else if (tok = this._extract(whitespaceChars)) { - return token(TOKEN_WHITESPACE, tok, lineno, colno); - } else if ((tok = this._extractString(this.tags.BLOCK_END)) || (tok = this._extractString("-" + this.tags.BLOCK_END))) { - this.in_code = false; - if (this.trimBlocks) { - cur = this.current(); - if (cur === ` -`) { - this.forward(); - } else if (cur === "\r") { - this.forward(); - cur = this.current(); - if (cur === ` -`) { - this.forward(); - } else { - this.back(); - } - } - } - return token(TOKEN_BLOCK_END, tok, lineno, colno); - } else if ((tok = this._extractString(this.tags.VARIABLE_END)) || (tok = this._extractString("-" + this.tags.VARIABLE_END))) { - this.in_code = false; - return token(TOKEN_VARIABLE_END, tok, lineno, colno); - } else if (cur === "r" && this.str.charAt(this.index + 1) === "/") { - this.forwardN(2); - var regexBody = ""; - while (!this.isFinished()) { - if (this.current() === "/" && this.previous() !== "\\") { - this.forward(); - break; - } else { - regexBody += this.current(); - this.forward(); - } - } - var POSSIBLE_FLAGS = ["g", "i", "m", "y"]; - var regexFlags = ""; - while (!this.isFinished()) { - var isCurrentAFlag = POSSIBLE_FLAGS.indexOf(this.current()) !== -1; - if (isCurrentAFlag) { - regexFlags += this.current(); - this.forward(); - } else { - break; - } - } - return token(TOKEN_REGEX, { - body: regexBody, - flags: regexFlags - }, lineno, colno); - } else if (delimChars.indexOf(cur) !== -1) { - this.forward(); - var complexOps = ["==", "===", "!=", "!==", "<=", ">=", "//", "**"]; - var curComplex = cur + this.current(); - var type; - if (lib.indexOf(complexOps, curComplex) !== -1) { - this.forward(); - cur = curComplex; - if (lib.indexOf(complexOps, curComplex + this.current()) !== -1) { - cur = curComplex + this.current(); - this.forward(); - } - } - switch (cur) { - case "(": - type = TOKEN_LEFT_PAREN; - break; - case ")": - type = TOKEN_RIGHT_PAREN; - break; - case "[": - type = TOKEN_LEFT_BRACKET; - break; - case "]": - type = TOKEN_RIGHT_BRACKET; - break; - case "{": - type = TOKEN_LEFT_CURLY; - break; - case "}": - type = TOKEN_RIGHT_CURLY; - break; - case ",": - type = TOKEN_COMMA; - break; - case ":": - type = TOKEN_COLON; - break; - case "~": - type = TOKEN_TILDE; - break; - case "|": - type = TOKEN_PIPE; - break; - default: - type = TOKEN_OPERATOR; - } - return token(type, cur, lineno, colno); - } else { - tok = this._extractUntil(whitespaceChars + delimChars); - if (tok.match(/^[-+]?[0-9]+$/)) { - if (this.current() === ".") { - this.forward(); - var dec = this._extract(intChars); - return token(TOKEN_FLOAT, tok + "." + dec, lineno, colno); - } else { - return token(TOKEN_INT, tok, lineno, colno); - } - } else if (tok.match(/^(true|false)$/)) { - return token(TOKEN_BOOLEAN, tok, lineno, colno); - } else if (tok === "none") { - return token(TOKEN_NONE, tok, lineno, colno); - } else if (tok === "null") { - return token(TOKEN_NONE, tok, lineno, colno); - } else if (tok) { - return token(TOKEN_SYMBOL, tok, lineno, colno); - } else { - throw new Error("Unexpected value while parsing: " + tok); - } - } - } else { - var beginChars = this.tags.BLOCK_START.charAt(0) + this.tags.VARIABLE_START.charAt(0) + this.tags.COMMENT_START.charAt(0) + this.tags.COMMENT_END.charAt(0); - if (this.isFinished()) { - return null; - } else if ((tok = this._extractString(this.tags.BLOCK_START + "-")) || (tok = this._extractString(this.tags.BLOCK_START))) { - this.in_code = true; - return token(TOKEN_BLOCK_START, tok, lineno, colno); - } else if ((tok = this._extractString(this.tags.VARIABLE_START + "-")) || (tok = this._extractString(this.tags.VARIABLE_START))) { - this.in_code = true; - return token(TOKEN_VARIABLE_START, tok, lineno, colno); - } else { - tok = ""; - var data; - var inComment = false; - if (this._matches(this.tags.COMMENT_START)) { - inComment = true; - tok = this._extractString(this.tags.COMMENT_START); - } - while ((data = this._extractUntil(beginChars)) !== null) { - tok += data; - if ((this._matches(this.tags.BLOCK_START) || this._matches(this.tags.VARIABLE_START) || this._matches(this.tags.COMMENT_START)) && !inComment) { - if (this.lstripBlocks && this._matches(this.tags.BLOCK_START) && this.colno > 0 && this.colno <= tok.length) { - var lastLine = tok.slice(-this.colno); - if (/^\s+$/.test(lastLine)) { - tok = tok.slice(0, -this.colno); - if (!tok.length) { - return this.nextToken(); - } - } - } - break; - } else if (this._matches(this.tags.COMMENT_END)) { - if (!inComment) { - throw new Error("unexpected end of comment"); - } - tok += this._extractString(this.tags.COMMENT_END); - break; - } else { - tok += this.current(); - this.forward(); - } - } - if (data === null && inComment) { - throw new Error("expected end of comment, got end of file"); - } - return token(inComment ? TOKEN_COMMENT : TOKEN_DATA, tok, lineno, colno); - } - } - }; - _proto._parseString = function _parseString(delimiter) { - this.forward(); - var str = ""; - while (!this.isFinished() && this.current() !== delimiter) { - var cur = this.current(); - if (cur === "\\") { - this.forward(); - switch (this.current()) { - case "n": - str += ` -`; - break; - case "t": - str += "\t"; - break; - case "r": - str += "\r"; - break; - default: - str += this.current(); - } - this.forward(); - } else { - str += cur; - this.forward(); - } - } - this.forward(); - return str; - }; - _proto._matches = function _matches(str) { - if (this.index + str.length > this.len) { - return null; - } - var m = this.str.slice(this.index, this.index + str.length); - return m === str; - }; - _proto._extractString = function _extractString(str) { - if (this._matches(str)) { - this.forwardN(str.length); - return str; - } - return null; - }; - _proto._extractUntil = function _extractUntil(charString) { - return this._extractMatching(true, charString || ""); - }; - _proto._extract = function _extract(charString) { - return this._extractMatching(false, charString); - }; - _proto._extractMatching = function _extractMatching(breakOnMatch, charString) { - if (this.isFinished()) { - return null; - } - var first = charString.indexOf(this.current()); - if (breakOnMatch && first === -1 || !breakOnMatch && first !== -1) { - var t = this.current(); - this.forward(); - var idx = charString.indexOf(this.current()); - while ((breakOnMatch && idx === -1 || !breakOnMatch && idx !== -1) && !this.isFinished()) { - t += this.current(); - this.forward(); - idx = charString.indexOf(this.current()); - } - return t; - } - return ""; - }; - _proto._extractRegex = function _extractRegex(regex) { - var matches = this.currentStr().match(regex); - if (!matches) { - return null; - } - this.forwardN(matches[0].length); - return matches; - }; - _proto.isFinished = function isFinished() { - return this.index >= this.len; - }; - _proto.forwardN = function forwardN(n) { - for (var i = 0;i < n; i++) { - this.forward(); - } - }; - _proto.forward = function forward() { - this.index++; - if (this.previous() === ` -`) { - this.lineno++; - this.colno = 0; - } else { - this.colno++; - } - }; - _proto.backN = function backN(n) { - for (var i = 0;i < n; i++) { - this.back(); - } - }; - _proto.back = function back() { - this.index--; - if (this.current() === ` -`) { - this.lineno--; - var idx = this.src.lastIndexOf(` -`, this.index - 1); - if (idx === -1) { - this.colno = this.index; - } else { - this.colno = this.index - idx; - } - } else { - this.colno--; - } - }; - _proto.current = function current() { - if (!this.isFinished()) { - return this.str.charAt(this.index); - } - return ""; - }; - _proto.currentStr = function currentStr() { - if (!this.isFinished()) { - return this.str.substr(this.index); - } - return ""; - }; - _proto.previous = function previous() { - return this.str.charAt(this.index - 1); - }; - return Tokenizer2; - }(); - module.exports = { - lex: function lex(src, opts) { - return new Tokenizer(src, opts); - }, - TOKEN_STRING, - TOKEN_WHITESPACE, - TOKEN_DATA, - TOKEN_BLOCK_START, - TOKEN_BLOCK_END, - TOKEN_VARIABLE_START, - TOKEN_VARIABLE_END, - TOKEN_COMMENT, - TOKEN_LEFT_PAREN, - TOKEN_RIGHT_PAREN, - TOKEN_LEFT_BRACKET, - TOKEN_RIGHT_BRACKET, - TOKEN_LEFT_CURLY, - TOKEN_RIGHT_CURLY, - TOKEN_OPERATOR, - TOKEN_COMMA, - TOKEN_COLON, - TOKEN_TILDE, - TOKEN_PIPE, - TOKEN_INT, - TOKEN_FLOAT, - TOKEN_BOOLEAN, - TOKEN_NONE, - TOKEN_SYMBOL, - TOKEN_SPECIAL, - TOKEN_REGEX - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/object.js -var require_object2 = __commonJS((exports, module) => { - function _defineProperties(target, props) { - for (var i = 0;i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); - } - } - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { writable: false }); - return Constructor; - } - function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); - } - function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) - return input; - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") - return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - return (hint === "string" ? String : Number)(input); - } - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var EventEmitter = __require("events"); - var lib = require_lib(); - function parentWrap(parent, prop) { - if (typeof parent !== "function" || typeof prop !== "function") { - return prop; - } - return function wrap() { - var tmp = this.parent; - this.parent = parent; - var res = prop.apply(this, arguments); - this.parent = tmp; - return res; - }; - } - function extendClass(cls, name, props) { - props = props || {}; - lib.keys(props).forEach(function(k) { - props[k] = parentWrap(cls.prototype[k], props[k]); - }); - var subclass = /* @__PURE__ */ function(_cls) { - _inheritsLoose(subclass2, _cls); - function subclass2() { - return _cls.apply(this, arguments) || this; - } - _createClass(subclass2, [{ - key: "typename", - get: function get() { - return name; - } - }]); - return subclass2; - }(cls); - lib._assign(subclass.prototype, props); - return subclass; - } - var Obj = /* @__PURE__ */ function() { - function Obj2() { - this.init.apply(this, arguments); - } - var _proto = Obj2.prototype; - _proto.init = function init() {}; - Obj2.extend = function extend(name, props) { - if (typeof name === "object") { - props = name; - name = "anonymous"; - } - return extendClass(this, name, props); - }; - _createClass(Obj2, [{ - key: "typename", - get: function get() { - return this.constructor.name; - } - }]); - return Obj2; - }(); - var EmitterObj = /* @__PURE__ */ function(_EventEmitter) { - _inheritsLoose(EmitterObj2, _EventEmitter); - function EmitterObj2() { - var _this2; - var _this; - _this = _EventEmitter.call(this) || this; - (_this2 = _this).init.apply(_this2, arguments); - return _this; - } - var _proto2 = EmitterObj2.prototype; - _proto2.init = function init() {}; - EmitterObj2.extend = function extend(name, props) { - if (typeof name === "object") { - props = name; - name = "anonymous"; - } - return extendClass(this, name, props); - }; - _createClass(EmitterObj2, [{ - key: "typename", - get: function get() { - return this.constructor.name; - } - }]); - return EmitterObj2; - }(EventEmitter); - module.exports = { - Obj, - EmitterObj - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/nodes.js -var require_nodes = __commonJS((exports, module) => { - function _defineProperties(target, props) { - for (var i = 0;i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); - } - } - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { writable: false }); - return Constructor; - } - function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); - } - function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) - return input; - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") - return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - return (hint === "string" ? String : Number)(input); - } - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var _require = require_object2(); - var Obj = _require.Obj; - function traverseAndCheck(obj, type, results) { - if (obj instanceof type) { - results.push(obj); - } - if (obj instanceof Node3) { - obj.findAll(type, results); - } - } - var Node3 = /* @__PURE__ */ function(_Obj) { - _inheritsLoose(Node4, _Obj); - function Node4() { - return _Obj.apply(this, arguments) || this; - } - var _proto = Node4.prototype; - _proto.init = function init(lineno, colno) { - var _arguments = arguments, _this = this; - for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2;_key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - this.lineno = lineno; - this.colno = colno; - this.fields.forEach(function(field, i) { - var val = _arguments[i + 2]; - if (val === undefined) { - val = null; - } - _this[field] = val; - }); - }; - _proto.findAll = function findAll(type, results) { - var _this2 = this; - results = results || []; - if (this instanceof NodeList) { - this.children.forEach(function(child) { - return traverseAndCheck(child, type, results); - }); - } else { - this.fields.forEach(function(field) { - return traverseAndCheck(_this2[field], type, results); - }); - } - return results; - }; - _proto.iterFields = function iterFields(func) { - var _this3 = this; - this.fields.forEach(function(field) { - func(_this3[field], field); - }); - }; - return Node4; - }(Obj); - var Value = /* @__PURE__ */ function(_Node3) { - _inheritsLoose(Value2, _Node3); - function Value2() { - return _Node3.apply(this, arguments) || this; - } - _createClass(Value2, [{ - key: "typename", - get: function get() { - return "Value"; - } - }, { - key: "fields", - get: function get() { - return ["value"]; - } - }]); - return Value2; - }(Node3); - var NodeList = /* @__PURE__ */ function(_Node22) { - _inheritsLoose(NodeList2, _Node22); - function NodeList2() { - return _Node22.apply(this, arguments) || this; - } - var _proto2 = NodeList2.prototype; - _proto2.init = function init(lineno, colno, nodes) { - _Node22.prototype.init.call(this, lineno, colno, nodes || []); - }; - _proto2.addChild = function addChild(node) { - this.children.push(node); - }; - _createClass(NodeList2, [{ - key: "typename", - get: function get() { - return "NodeList"; - } - }, { - key: "fields", - get: function get() { - return ["children"]; - } - }]); - return NodeList2; - }(Node3); - var Root = NodeList.extend("Root"); - var Literal = Value.extend("Literal"); - var _Symbol = Value.extend("Symbol"); - var Group = NodeList.extend("Group"); - var ArrayNode = NodeList.extend("Array"); - var Pair = Node3.extend("Pair", { - fields: ["key", "value"] - }); - var Dict = NodeList.extend("Dict"); - var LookupVal = Node3.extend("LookupVal", { - fields: ["target", "val"] - }); - var If = Node3.extend("If", { - fields: ["cond", "body", "else_"] - }); - var IfAsync = If.extend("IfAsync"); - var InlineIf = Node3.extend("InlineIf", { - fields: ["cond", "body", "else_"] - }); - var For = Node3.extend("For", { - fields: ["arr", "name", "body", "else_"] - }); - var AsyncEach = For.extend("AsyncEach"); - var AsyncAll = For.extend("AsyncAll"); - var Macro = Node3.extend("Macro", { - fields: ["name", "args", "body"] - }); - var Caller = Macro.extend("Caller"); - var Import = Node3.extend("Import", { - fields: ["template", "target", "withContext"] - }); - var FromImport = /* @__PURE__ */ function(_Node3) { - _inheritsLoose(FromImport2, _Node3); - function FromImport2() { - return _Node3.apply(this, arguments) || this; - } - var _proto3 = FromImport2.prototype; - _proto3.init = function init(lineno, colno, template, names, withContext) { - _Node3.prototype.init.call(this, lineno, colno, template, names || new NodeList, withContext); - }; - _createClass(FromImport2, [{ - key: "typename", - get: function get() { - return "FromImport"; - } - }, { - key: "fields", - get: function get() { - return ["template", "names", "withContext"]; - } - }]); - return FromImport2; - }(Node3); - var FunCall = Node3.extend("FunCall", { - fields: ["name", "args"] - }); - var Filter = FunCall.extend("Filter"); - var FilterAsync = Filter.extend("FilterAsync", { - fields: ["name", "args", "symbol"] - }); - var KeywordArgs = Dict.extend("KeywordArgs"); - var Block = Node3.extend("Block", { - fields: ["name", "body"] - }); - var Super = Node3.extend("Super", { - fields: ["blockName", "symbol"] - }); - var TemplateRef = Node3.extend("TemplateRef", { - fields: ["template"] - }); - var Extends = TemplateRef.extend("Extends"); - var Include = Node3.extend("Include", { - fields: ["template", "ignoreMissing"] - }); - var Set2 = Node3.extend("Set", { - fields: ["targets", "value"] - }); - var Switch = Node3.extend("Switch", { - fields: ["expr", "cases", "default"] - }); - var Case = Node3.extend("Case", { - fields: ["cond", "body"] - }); - var Output = NodeList.extend("Output"); - var Capture = Node3.extend("Capture", { - fields: ["body"] - }); - var TemplateData = Literal.extend("TemplateData"); - var UnaryOp = Node3.extend("UnaryOp", { - fields: ["target"] - }); - var BinOp = Node3.extend("BinOp", { - fields: ["left", "right"] - }); - var In = BinOp.extend("In"); - var Is = BinOp.extend("Is"); - var Or = BinOp.extend("Or"); - var And = BinOp.extend("And"); - var Not = UnaryOp.extend("Not"); - var Add = BinOp.extend("Add"); - var Concat = BinOp.extend("Concat"); - var Sub = BinOp.extend("Sub"); - var Mul = BinOp.extend("Mul"); - var Div = BinOp.extend("Div"); - var FloorDiv = BinOp.extend("FloorDiv"); - var Mod = BinOp.extend("Mod"); - var Pow = BinOp.extend("Pow"); - var Neg = UnaryOp.extend("Neg"); - var Pos = UnaryOp.extend("Pos"); - var Compare = Node3.extend("Compare", { - fields: ["expr", "ops"] - }); - var CompareOperand = Node3.extend("CompareOperand", { - fields: ["expr", "type"] - }); - var CallExtension = Node3.extend("CallExtension", { - init: function init(ext, prop, args, contentArgs) { - this.parent(); - this.extName = ext.__name || ext; - this.prop = prop; - this.args = args || new NodeList; - this.contentArgs = contentArgs || []; - this.autoescape = ext.autoescape; - }, - fields: ["extName", "prop", "args", "contentArgs"] - }); - var CallExtensionAsync = CallExtension.extend("CallExtensionAsync"); - function print(str, indent, inline) { - var lines = str.split(` -`); - lines.forEach(function(line, i) { - if (line && (inline && i > 0 || !inline)) { - process.stdout.write(" ".repeat(indent)); - } - var nl = i === lines.length - 1 ? "" : ` -`; - process.stdout.write("" + line + nl); - }); - } - function printNodes(node, indent) { - indent = indent || 0; - print(node.typename + ": ", indent); - if (node instanceof NodeList) { - print(` -`); - node.children.forEach(function(n) { - printNodes(n, indent + 2); - }); - } else if (node instanceof CallExtension) { - print(node.extName + "." + node.prop + ` -`); - if (node.args) { - printNodes(node.args, indent + 2); - } - if (node.contentArgs) { - node.contentArgs.forEach(function(n) { - printNodes(n, indent + 2); - }); - } - } else { - var nodes = []; - var props = null; - node.iterFields(function(val, fieldName) { - if (val instanceof Node3) { - nodes.push([fieldName, val]); - } else { - props = props || {}; - props[fieldName] = val; - } - }); - if (props) { - print(JSON.stringify(props, null, 2) + ` -`, null, true); - } else { - print(` -`); - } - nodes.forEach(function(_ref) { - var fieldName = _ref[0], n = _ref[1]; - print("[" + fieldName + "] =>", indent + 2); - printNodes(n, indent + 4); - }); - } - } - module.exports = { - Node: Node3, - Root, - NodeList, - Value, - Literal, - Symbol: _Symbol, - Group, - Array: ArrayNode, - Pair, - Dict, - Output, - Capture, - TemplateData, - If, - IfAsync, - InlineIf, - For, - AsyncEach, - AsyncAll, - Macro, - Caller, - Import, - FromImport, - FunCall, - Filter, - FilterAsync, - KeywordArgs, - Block, - Super, - Extends, - Include, - Set: Set2, - Switch, - Case, - LookupVal, - BinOp, - In, - Is, - Or, - And, - Not, - Add, - Concat, - Sub, - Mul, - Div, - FloorDiv, - Mod, - Pow, - Neg, - Pos, - Compare, - CompareOperand, - CallExtension, - CallExtensionAsync, - printNodes - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/parser.js -var require_parser = __commonJS((exports, module) => { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var lexer = require_lexer(); - var nodes = require_nodes(); - var Obj = require_object2().Obj; - var lib = require_lib(); - var Parser = /* @__PURE__ */ function(_Obj) { - _inheritsLoose(Parser2, _Obj); - function Parser2() { - return _Obj.apply(this, arguments) || this; - } - var _proto = Parser2.prototype; - _proto.init = function init(tokens) { - this.tokens = tokens; - this.peeked = null; - this.breakOnBlocks = null; - this.dropLeadingWhitespace = false; - this.extensions = []; - }; - _proto.nextToken = function nextToken(withWhitespace) { - var tok; - if (this.peeked) { - if (!withWhitespace && this.peeked.type === lexer.TOKEN_WHITESPACE) { - this.peeked = null; - } else { - tok = this.peeked; - this.peeked = null; - return tok; - } - } - tok = this.tokens.nextToken(); - if (!withWhitespace) { - while (tok && tok.type === lexer.TOKEN_WHITESPACE) { - tok = this.tokens.nextToken(); - } - } - return tok; - }; - _proto.peekToken = function peekToken() { - this.peeked = this.peeked || this.nextToken(); - return this.peeked; - }; - _proto.pushToken = function pushToken(tok) { - if (this.peeked) { - throw new Error("pushToken: can only push one token on between reads"); - } - this.peeked = tok; - }; - _proto.error = function error(msg, lineno, colno) { - if (lineno === undefined || colno === undefined) { - var tok = this.peekToken() || {}; - lineno = tok.lineno; - colno = tok.colno; - } - if (lineno !== undefined) { - lineno += 1; - } - if (colno !== undefined) { - colno += 1; - } - return new lib.TemplateError(msg, lineno, colno); - }; - _proto.fail = function fail(msg, lineno, colno) { - throw this.error(msg, lineno, colno); - }; - _proto.skip = function skip(type) { - var tok = this.nextToken(); - if (!tok || tok.type !== type) { - this.pushToken(tok); - return false; - } - return true; - }; - _proto.expect = function expect(type) { - var tok = this.nextToken(); - if (tok.type !== type) { - this.fail("expected " + type + ", got " + tok.type, tok.lineno, tok.colno); - } - return tok; - }; - _proto.skipValue = function skipValue(type, val) { - var tok = this.nextToken(); - if (!tok || tok.type !== type || tok.value !== val) { - this.pushToken(tok); - return false; - } - return true; - }; - _proto.skipSymbol = function skipSymbol(val) { - return this.skipValue(lexer.TOKEN_SYMBOL, val); - }; - _proto.advanceAfterBlockEnd = function advanceAfterBlockEnd(name) { - var tok; - if (!name) { - tok = this.peekToken(); - if (!tok) { - this.fail("unexpected end of file"); - } - if (tok.type !== lexer.TOKEN_SYMBOL) { - this.fail("advanceAfterBlockEnd: expected symbol token or " + "explicit name to be passed"); - } - name = this.nextToken().value; - } - tok = this.nextToken(); - if (tok && tok.type === lexer.TOKEN_BLOCK_END) { - if (tok.value.charAt(0) === "-") { - this.dropLeadingWhitespace = true; - } - } else { - this.fail("expected block end in " + name + " statement"); - } - return tok; - }; - _proto.advanceAfterVariableEnd = function advanceAfterVariableEnd() { - var tok = this.nextToken(); - if (tok && tok.type === lexer.TOKEN_VARIABLE_END) { - this.dropLeadingWhitespace = tok.value.charAt(tok.value.length - this.tokens.tags.VARIABLE_END.length - 1) === "-"; - } else { - this.pushToken(tok); - this.fail("expected variable end"); - } - }; - _proto.parseFor = function parseFor() { - var forTok = this.peekToken(); - var node; - var endBlock; - if (this.skipSymbol("for")) { - node = new nodes.For(forTok.lineno, forTok.colno); - endBlock = "endfor"; - } else if (this.skipSymbol("asyncEach")) { - node = new nodes.AsyncEach(forTok.lineno, forTok.colno); - endBlock = "endeach"; - } else if (this.skipSymbol("asyncAll")) { - node = new nodes.AsyncAll(forTok.lineno, forTok.colno); - endBlock = "endall"; - } else { - this.fail("parseFor: expected for{Async}", forTok.lineno, forTok.colno); - } - node.name = this.parsePrimary(); - if (!(node.name instanceof nodes.Symbol)) { - this.fail("parseFor: variable name expected for loop"); - } - var type = this.peekToken().type; - if (type === lexer.TOKEN_COMMA) { - var key = node.name; - node.name = new nodes.Array(key.lineno, key.colno); - node.name.addChild(key); - while (this.skip(lexer.TOKEN_COMMA)) { - var prim = this.parsePrimary(); - node.name.addChild(prim); - } - } - if (!this.skipSymbol("in")) { - this.fail('parseFor: expected "in" keyword for loop', forTok.lineno, forTok.colno); - } - node.arr = this.parseExpression(); - this.advanceAfterBlockEnd(forTok.value); - node.body = this.parseUntilBlocks(endBlock, "else"); - if (this.skipSymbol("else")) { - this.advanceAfterBlockEnd("else"); - node.else_ = this.parseUntilBlocks(endBlock); - } - this.advanceAfterBlockEnd(); - return node; - }; - _proto.parseMacro = function parseMacro() { - var macroTok = this.peekToken(); - if (!this.skipSymbol("macro")) { - this.fail("expected macro"); - } - var name = this.parsePrimary(true); - var args = this.parseSignature(); - var node = new nodes.Macro(macroTok.lineno, macroTok.colno, name, args); - this.advanceAfterBlockEnd(macroTok.value); - node.body = this.parseUntilBlocks("endmacro"); - this.advanceAfterBlockEnd(); - return node; - }; - _proto.parseCall = function parseCall() { - var callTok = this.peekToken(); - if (!this.skipSymbol("call")) { - this.fail("expected call"); - } - var callerArgs = this.parseSignature(true) || new nodes.NodeList; - var macroCall = this.parsePrimary(); - this.advanceAfterBlockEnd(callTok.value); - var body = this.parseUntilBlocks("endcall"); - this.advanceAfterBlockEnd(); - var callerName = new nodes.Symbol(callTok.lineno, callTok.colno, "caller"); - var callerNode = new nodes.Caller(callTok.lineno, callTok.colno, callerName, callerArgs, body); - var args = macroCall.args.children; - if (!(args[args.length - 1] instanceof nodes.KeywordArgs)) { - args.push(new nodes.KeywordArgs); - } - var kwargs = args[args.length - 1]; - kwargs.addChild(new nodes.Pair(callTok.lineno, callTok.colno, callerName, callerNode)); - return new nodes.Output(callTok.lineno, callTok.colno, [macroCall]); - }; - _proto.parseWithContext = function parseWithContext() { - var tok = this.peekToken(); - var withContext = null; - if (this.skipSymbol("with")) { - withContext = true; - } else if (this.skipSymbol("without")) { - withContext = false; - } - if (withContext !== null) { - if (!this.skipSymbol("context")) { - this.fail("parseFrom: expected context after with/without", tok.lineno, tok.colno); - } - } - return withContext; - }; - _proto.parseImport = function parseImport() { - var importTok = this.peekToken(); - if (!this.skipSymbol("import")) { - this.fail("parseImport: expected import", importTok.lineno, importTok.colno); - } - var template = this.parseExpression(); - if (!this.skipSymbol("as")) { - this.fail('parseImport: expected "as" keyword', importTok.lineno, importTok.colno); - } - var target = this.parseExpression(); - var withContext = this.parseWithContext(); - var node = new nodes.Import(importTok.lineno, importTok.colno, template, target, withContext); - this.advanceAfterBlockEnd(importTok.value); - return node; - }; - _proto.parseFrom = function parseFrom() { - var fromTok = this.peekToken(); - if (!this.skipSymbol("from")) { - this.fail("parseFrom: expected from"); - } - var template = this.parseExpression(); - if (!this.skipSymbol("import")) { - this.fail("parseFrom: expected import", fromTok.lineno, fromTok.colno); - } - var names = new nodes.NodeList; - var withContext; - while (true) { - var nextTok = this.peekToken(); - if (nextTok.type === lexer.TOKEN_BLOCK_END) { - if (!names.children.length) { - this.fail("parseFrom: Expected at least one import name", fromTok.lineno, fromTok.colno); - } - if (nextTok.value.charAt(0) === "-") { - this.dropLeadingWhitespace = true; - } - this.nextToken(); - break; - } - if (names.children.length > 0 && !this.skip(lexer.TOKEN_COMMA)) { - this.fail("parseFrom: expected comma", fromTok.lineno, fromTok.colno); - } - var name = this.parsePrimary(); - if (name.value.charAt(0) === "_") { - this.fail("parseFrom: names starting with an underscore cannot be imported", name.lineno, name.colno); - } - if (this.skipSymbol("as")) { - var alias = this.parsePrimary(); - names.addChild(new nodes.Pair(name.lineno, name.colno, name, alias)); - } else { - names.addChild(name); - } - withContext = this.parseWithContext(); - } - return new nodes.FromImport(fromTok.lineno, fromTok.colno, template, names, withContext); - }; - _proto.parseBlock = function parseBlock() { - var tag = this.peekToken(); - if (!this.skipSymbol("block")) { - this.fail("parseBlock: expected block", tag.lineno, tag.colno); - } - var node = new nodes.Block(tag.lineno, tag.colno); - node.name = this.parsePrimary(); - if (!(node.name instanceof nodes.Symbol)) { - this.fail("parseBlock: variable name expected", tag.lineno, tag.colno); - } - this.advanceAfterBlockEnd(tag.value); - node.body = this.parseUntilBlocks("endblock"); - this.skipSymbol("endblock"); - this.skipSymbol(node.name.value); - var tok = this.peekToken(); - if (!tok) { - this.fail("parseBlock: expected endblock, got end of file"); - } - this.advanceAfterBlockEnd(tok.value); - return node; - }; - _proto.parseExtends = function parseExtends() { - var tagName = "extends"; - var tag = this.peekToken(); - if (!this.skipSymbol(tagName)) { - this.fail("parseTemplateRef: expected " + tagName); - } - var node = new nodes.Extends(tag.lineno, tag.colno); - node.template = this.parseExpression(); - this.advanceAfterBlockEnd(tag.value); - return node; - }; - _proto.parseInclude = function parseInclude() { - var tagName = "include"; - var tag = this.peekToken(); - if (!this.skipSymbol(tagName)) { - this.fail("parseInclude: expected " + tagName); - } - var node = new nodes.Include(tag.lineno, tag.colno); - node.template = this.parseExpression(); - if (this.skipSymbol("ignore") && this.skipSymbol("missing")) { - node.ignoreMissing = true; - } - this.advanceAfterBlockEnd(tag.value); - return node; - }; - _proto.parseIf = function parseIf() { - var tag = this.peekToken(); - var node; - if (this.skipSymbol("if") || this.skipSymbol("elif") || this.skipSymbol("elseif")) { - node = new nodes.If(tag.lineno, tag.colno); - } else if (this.skipSymbol("ifAsync")) { - node = new nodes.IfAsync(tag.lineno, tag.colno); - } else { - this.fail("parseIf: expected if, elif, or elseif", tag.lineno, tag.colno); - } - node.cond = this.parseExpression(); - this.advanceAfterBlockEnd(tag.value); - node.body = this.parseUntilBlocks("elif", "elseif", "else", "endif"); - var tok = this.peekToken(); - switch (tok && tok.value) { - case "elseif": - case "elif": - node.else_ = this.parseIf(); - break; - case "else": - this.advanceAfterBlockEnd(); - node.else_ = this.parseUntilBlocks("endif"); - this.advanceAfterBlockEnd(); - break; - case "endif": - node.else_ = null; - this.advanceAfterBlockEnd(); - break; - default: - this.fail("parseIf: expected elif, else, or endif, got end of file"); - } - return node; - }; - _proto.parseSet = function parseSet() { - var tag = this.peekToken(); - if (!this.skipSymbol("set")) { - this.fail("parseSet: expected set", tag.lineno, tag.colno); - } - var node = new nodes.Set(tag.lineno, tag.colno, []); - var target; - while (target = this.parsePrimary()) { - node.targets.push(target); - if (!this.skip(lexer.TOKEN_COMMA)) { - break; - } - } - if (!this.skipValue(lexer.TOKEN_OPERATOR, "=")) { - if (!this.skip(lexer.TOKEN_BLOCK_END)) { - this.fail("parseSet: expected = or block end in set tag", tag.lineno, tag.colno); - } else { - node.body = new nodes.Capture(tag.lineno, tag.colno, this.parseUntilBlocks("endset")); - node.value = null; - this.advanceAfterBlockEnd(); - } - } else { - node.value = this.parseExpression(); - this.advanceAfterBlockEnd(tag.value); - } - return node; - }; - _proto.parseSwitch = function parseSwitch() { - var switchStart = "switch"; - var switchEnd = "endswitch"; - var caseStart = "case"; - var caseDefault = "default"; - var tag = this.peekToken(); - if (!this.skipSymbol(switchStart) && !this.skipSymbol(caseStart) && !this.skipSymbol(caseDefault)) { - this.fail('parseSwitch: expected "switch," "case" or "default"', tag.lineno, tag.colno); - } - var expr = this.parseExpression(); - this.advanceAfterBlockEnd(switchStart); - this.parseUntilBlocks(caseStart, caseDefault, switchEnd); - var tok = this.peekToken(); - var cases = []; - var defaultCase; - do { - this.skipSymbol(caseStart); - var cond = this.parseExpression(); - this.advanceAfterBlockEnd(switchStart); - var body = this.parseUntilBlocks(caseStart, caseDefault, switchEnd); - cases.push(new nodes.Case(tok.line, tok.col, cond, body)); - tok = this.peekToken(); - } while (tok && tok.value === caseStart); - switch (tok.value) { - case caseDefault: - this.advanceAfterBlockEnd(); - defaultCase = this.parseUntilBlocks(switchEnd); - this.advanceAfterBlockEnd(); - break; - case switchEnd: - this.advanceAfterBlockEnd(); - break; - default: - this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.'); - } - return new nodes.Switch(tag.lineno, tag.colno, expr, cases, defaultCase); - }; - _proto.parseStatement = function parseStatement() { - var tok = this.peekToken(); - var node; - if (tok.type !== lexer.TOKEN_SYMBOL) { - this.fail("tag name expected", tok.lineno, tok.colno); - } - if (this.breakOnBlocks && lib.indexOf(this.breakOnBlocks, tok.value) !== -1) { - return null; - } - switch (tok.value) { - case "raw": - return this.parseRaw(); - case "verbatim": - return this.parseRaw("verbatim"); - case "if": - case "ifAsync": - return this.parseIf(); - case "for": - case "asyncEach": - case "asyncAll": - return this.parseFor(); - case "block": - return this.parseBlock(); - case "extends": - return this.parseExtends(); - case "include": - return this.parseInclude(); - case "set": - return this.parseSet(); - case "macro": - return this.parseMacro(); - case "call": - return this.parseCall(); - case "import": - return this.parseImport(); - case "from": - return this.parseFrom(); - case "filter": - return this.parseFilterStatement(); - case "switch": - return this.parseSwitch(); - default: - if (this.extensions.length) { - for (var i = 0;i < this.extensions.length; i++) { - var ext = this.extensions[i]; - if (lib.indexOf(ext.tags || [], tok.value) !== -1) { - return ext.parse(this, nodes, lexer); - } - } - } - this.fail("unknown block tag: " + tok.value, tok.lineno, tok.colno); - } - return node; - }; - _proto.parseRaw = function parseRaw(tagName) { - tagName = tagName || "raw"; - var endTagName = "end" + tagName; - var rawBlockRegex = new RegExp("([\\s\\S]*?){%\\s*(" + tagName + "|" + endTagName + ")\\s*(?=%})%}"); - var rawLevel = 1; - var str = ""; - var matches = null; - var begun = this.advanceAfterBlockEnd(); - while ((matches = this.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) { - var all = matches[0]; - var pre = matches[1]; - var blockName = matches[2]; - if (blockName === tagName) { - rawLevel += 1; - } else if (blockName === endTagName) { - rawLevel -= 1; - } - if (rawLevel === 0) { - str += pre; - this.tokens.backN(all.length - pre.length); - } else { - str += all; - } - } - return new nodes.Output(begun.lineno, begun.colno, [new nodes.TemplateData(begun.lineno, begun.colno, str)]); - }; - _proto.parsePostfix = function parsePostfix(node) { - var lookup; - var tok = this.peekToken(); - while (tok) { - if (tok.type === lexer.TOKEN_LEFT_PAREN) { - node = new nodes.FunCall(tok.lineno, tok.colno, node, this.parseSignature()); - } else if (tok.type === lexer.TOKEN_LEFT_BRACKET) { - lookup = this.parseAggregate(); - if (lookup.children.length > 1) { - this.fail("invalid index"); - } - node = new nodes.LookupVal(tok.lineno, tok.colno, node, lookup.children[0]); - } else if (tok.type === lexer.TOKEN_OPERATOR && tok.value === ".") { - this.nextToken(); - var val = this.nextToken(); - if (val.type !== lexer.TOKEN_SYMBOL) { - this.fail("expected name as lookup value, got " + val.value, val.lineno, val.colno); - } - lookup = new nodes.Literal(val.lineno, val.colno, val.value); - node = new nodes.LookupVal(tok.lineno, tok.colno, node, lookup); - } else { - break; - } - tok = this.peekToken(); - } - return node; - }; - _proto.parseExpression = function parseExpression() { - var node = this.parseInlineIf(); - return node; - }; - _proto.parseInlineIf = function parseInlineIf() { - var node = this.parseOr(); - if (this.skipSymbol("if")) { - var condNode = this.parseOr(); - var bodyNode = node; - node = new nodes.InlineIf(node.lineno, node.colno); - node.body = bodyNode; - node.cond = condNode; - if (this.skipSymbol("else")) { - node.else_ = this.parseOr(); - } else { - node.else_ = null; - } - } - return node; - }; - _proto.parseOr = function parseOr() { - var node = this.parseAnd(); - while (this.skipSymbol("or")) { - var node2 = this.parseAnd(); - node = new nodes.Or(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseAnd = function parseAnd() { - var node = this.parseNot(); - while (this.skipSymbol("and")) { - var node2 = this.parseNot(); - node = new nodes.And(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseNot = function parseNot() { - var tok = this.peekToken(); - if (this.skipSymbol("not")) { - return new nodes.Not(tok.lineno, tok.colno, this.parseNot()); - } - return this.parseIn(); - }; - _proto.parseIn = function parseIn() { - var node = this.parseIs(); - while (true) { - var tok = this.nextToken(); - if (!tok) { - break; - } - var invert = tok.type === lexer.TOKEN_SYMBOL && tok.value === "not"; - if (!invert) { - this.pushToken(tok); - } - if (this.skipSymbol("in")) { - var node2 = this.parseIs(); - node = new nodes.In(node.lineno, node.colno, node, node2); - if (invert) { - node = new nodes.Not(node.lineno, node.colno, node); - } - } else { - if (invert) { - this.pushToken(tok); - } - break; - } - } - return node; - }; - _proto.parseIs = function parseIs() { - var node = this.parseCompare(); - if (this.skipSymbol("is")) { - var not = this.skipSymbol("not"); - var node2 = this.parseCompare(); - node = new nodes.Is(node.lineno, node.colno, node, node2); - if (not) { - node = new nodes.Not(node.lineno, node.colno, node); - } - } - return node; - }; - _proto.parseCompare = function parseCompare() { - var compareOps = ["==", "===", "!=", "!==", "<", ">", "<=", ">="]; - var expr = this.parseConcat(); - var ops = []; - while (true) { - var tok = this.nextToken(); - if (!tok) { - break; - } else if (compareOps.indexOf(tok.value) !== -1) { - ops.push(new nodes.CompareOperand(tok.lineno, tok.colno, this.parseConcat(), tok.value)); - } else { - this.pushToken(tok); - break; - } - } - if (ops.length) { - return new nodes.Compare(ops[0].lineno, ops[0].colno, expr, ops); - } else { - return expr; - } - }; - _proto.parseConcat = function parseConcat() { - var node = this.parseAdd(); - while (this.skipValue(lexer.TOKEN_TILDE, "~")) { - var node2 = this.parseAdd(); - node = new nodes.Concat(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseAdd = function parseAdd() { - var node = this.parseSub(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "+")) { - var node2 = this.parseSub(); - node = new nodes.Add(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseSub = function parseSub() { - var node = this.parseMul(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "-")) { - var node2 = this.parseMul(); - node = new nodes.Sub(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseMul = function parseMul() { - var node = this.parseDiv(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "*")) { - var node2 = this.parseDiv(); - node = new nodes.Mul(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseDiv = function parseDiv() { - var node = this.parseFloorDiv(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "/")) { - var node2 = this.parseFloorDiv(); - node = new nodes.Div(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseFloorDiv = function parseFloorDiv() { - var node = this.parseMod(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "//")) { - var node2 = this.parseMod(); - node = new nodes.FloorDiv(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseMod = function parseMod() { - var node = this.parsePow(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "%")) { - var node2 = this.parsePow(); - node = new nodes.Mod(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parsePow = function parsePow() { - var node = this.parseUnary(); - while (this.skipValue(lexer.TOKEN_OPERATOR, "**")) { - var node2 = this.parseUnary(); - node = new nodes.Pow(node.lineno, node.colno, node, node2); - } - return node; - }; - _proto.parseUnary = function parseUnary(noFilters) { - var tok = this.peekToken(); - var node; - if (this.skipValue(lexer.TOKEN_OPERATOR, "-")) { - node = new nodes.Neg(tok.lineno, tok.colno, this.parseUnary(true)); - } else if (this.skipValue(lexer.TOKEN_OPERATOR, "+")) { - node = new nodes.Pos(tok.lineno, tok.colno, this.parseUnary(true)); - } else { - node = this.parsePrimary(); - } - if (!noFilters) { - node = this.parseFilter(node); - } - return node; - }; - _proto.parsePrimary = function parsePrimary(noPostfix) { - var tok = this.nextToken(); - var val; - var node = null; - if (!tok) { - this.fail("expected expression, got end of file"); - } else if (tok.type === lexer.TOKEN_STRING) { - val = tok.value; - } else if (tok.type === lexer.TOKEN_INT) { - val = parseInt(tok.value, 10); - } else if (tok.type === lexer.TOKEN_FLOAT) { - val = parseFloat(tok.value); - } else if (tok.type === lexer.TOKEN_BOOLEAN) { - if (tok.value === "true") { - val = true; - } else if (tok.value === "false") { - val = false; - } else { - this.fail("invalid boolean: " + tok.value, tok.lineno, tok.colno); - } - } else if (tok.type === lexer.TOKEN_NONE) { - val = null; - } else if (tok.type === lexer.TOKEN_REGEX) { - val = new RegExp(tok.value.body, tok.value.flags); - } - if (val !== undefined) { - node = new nodes.Literal(tok.lineno, tok.colno, val); - } else if (tok.type === lexer.TOKEN_SYMBOL) { - node = new nodes.Symbol(tok.lineno, tok.colno, tok.value); - } else { - this.pushToken(tok); - node = this.parseAggregate(); - } - if (!noPostfix) { - node = this.parsePostfix(node); - } - if (node) { - return node; - } else { - throw this.error("unexpected token: " + tok.value, tok.lineno, tok.colno); - } - }; - _proto.parseFilterName = function parseFilterName() { - var tok = this.expect(lexer.TOKEN_SYMBOL); - var name = tok.value; - while (this.skipValue(lexer.TOKEN_OPERATOR, ".")) { - name += "." + this.expect(lexer.TOKEN_SYMBOL).value; - } - return new nodes.Symbol(tok.lineno, tok.colno, name); - }; - _proto.parseFilterArgs = function parseFilterArgs(node) { - if (this.peekToken().type === lexer.TOKEN_LEFT_PAREN) { - var call = this.parsePostfix(node); - return call.args.children; - } - return []; - }; - _proto.parseFilter = function parseFilter(node) { - while (this.skip(lexer.TOKEN_PIPE)) { - var name = this.parseFilterName(); - node = new nodes.Filter(name.lineno, name.colno, name, new nodes.NodeList(name.lineno, name.colno, [node].concat(this.parseFilterArgs(node)))); - } - return node; - }; - _proto.parseFilterStatement = function parseFilterStatement() { - var filterTok = this.peekToken(); - if (!this.skipSymbol("filter")) { - this.fail("parseFilterStatement: expected filter"); - } - var name = this.parseFilterName(); - var args = this.parseFilterArgs(name); - this.advanceAfterBlockEnd(filterTok.value); - var body = new nodes.Capture(name.lineno, name.colno, this.parseUntilBlocks("endfilter")); - this.advanceAfterBlockEnd(); - var node = new nodes.Filter(name.lineno, name.colno, name, new nodes.NodeList(name.lineno, name.colno, [body].concat(args))); - return new nodes.Output(name.lineno, name.colno, [node]); - }; - _proto.parseAggregate = function parseAggregate() { - var tok = this.nextToken(); - var node; - switch (tok.type) { - case lexer.TOKEN_LEFT_PAREN: - node = new nodes.Group(tok.lineno, tok.colno); - break; - case lexer.TOKEN_LEFT_BRACKET: - node = new nodes.Array(tok.lineno, tok.colno); - break; - case lexer.TOKEN_LEFT_CURLY: - node = new nodes.Dict(tok.lineno, tok.colno); - break; - default: - return null; - } - while (true) { - var type = this.peekToken().type; - if (type === lexer.TOKEN_RIGHT_PAREN || type === lexer.TOKEN_RIGHT_BRACKET || type === lexer.TOKEN_RIGHT_CURLY) { - this.nextToken(); - break; - } - if (node.children.length > 0) { - if (!this.skip(lexer.TOKEN_COMMA)) { - this.fail("parseAggregate: expected comma after expression", tok.lineno, tok.colno); - } - } - if (node instanceof nodes.Dict) { - var key = this.parsePrimary(); - if (!this.skip(lexer.TOKEN_COLON)) { - this.fail("parseAggregate: expected colon after dict key", tok.lineno, tok.colno); - } - var value = this.parseExpression(); - node.addChild(new nodes.Pair(key.lineno, key.colno, key, value)); - } else { - var expr = this.parseExpression(); - node.addChild(expr); - } - } - return node; - }; - _proto.parseSignature = function parseSignature(tolerant, noParens) { - var tok = this.peekToken(); - if (!noParens && tok.type !== lexer.TOKEN_LEFT_PAREN) { - if (tolerant) { - return null; - } else { - this.fail("expected arguments", tok.lineno, tok.colno); - } - } - if (tok.type === lexer.TOKEN_LEFT_PAREN) { - tok = this.nextToken(); - } - var args = new nodes.NodeList(tok.lineno, tok.colno); - var kwargs = new nodes.KeywordArgs(tok.lineno, tok.colno); - var checkComma = false; - while (true) { - tok = this.peekToken(); - if (!noParens && tok.type === lexer.TOKEN_RIGHT_PAREN) { - this.nextToken(); - break; - } else if (noParens && tok.type === lexer.TOKEN_BLOCK_END) { - break; - } - if (checkComma && !this.skip(lexer.TOKEN_COMMA)) { - this.fail("parseSignature: expected comma after expression", tok.lineno, tok.colno); - } else { - var arg = this.parseExpression(); - if (this.skipValue(lexer.TOKEN_OPERATOR, "=")) { - kwargs.addChild(new nodes.Pair(arg.lineno, arg.colno, arg, this.parseExpression())); - } else { - args.addChild(arg); - } - } - checkComma = true; - } - if (kwargs.children.length) { - args.addChild(kwargs); - } - return args; - }; - _proto.parseUntilBlocks = function parseUntilBlocks() { - var prev = this.breakOnBlocks; - for (var _len = arguments.length, blockNames = new Array(_len), _key = 0;_key < _len; _key++) { - blockNames[_key] = arguments[_key]; - } - this.breakOnBlocks = blockNames; - var ret = this.parse(); - this.breakOnBlocks = prev; - return ret; - }; - _proto.parseNodes = function parseNodes() { - var tok; - var buf = []; - while (tok = this.nextToken()) { - if (tok.type === lexer.TOKEN_DATA) { - var data = tok.value; - var nextToken = this.peekToken(); - var nextVal = nextToken && nextToken.value; - if (this.dropLeadingWhitespace) { - data = data.replace(/^\s*/, ""); - this.dropLeadingWhitespace = false; - } - if (nextToken && (nextToken.type === lexer.TOKEN_BLOCK_START && nextVal.charAt(nextVal.length - 1) === "-" || nextToken.type === lexer.TOKEN_VARIABLE_START && nextVal.charAt(this.tokens.tags.VARIABLE_START.length) === "-" || nextToken.type === lexer.TOKEN_COMMENT && nextVal.charAt(this.tokens.tags.COMMENT_START.length) === "-")) { - data = data.replace(/\s*$/, ""); - } - buf.push(new nodes.Output(tok.lineno, tok.colno, [new nodes.TemplateData(tok.lineno, tok.colno, data)])); - } else if (tok.type === lexer.TOKEN_BLOCK_START) { - this.dropLeadingWhitespace = false; - var n = this.parseStatement(); - if (!n) { - break; - } - buf.push(n); - } else if (tok.type === lexer.TOKEN_VARIABLE_START) { - var e = this.parseExpression(); - this.dropLeadingWhitespace = false; - this.advanceAfterVariableEnd(); - buf.push(new nodes.Output(tok.lineno, tok.colno, [e])); - } else if (tok.type === lexer.TOKEN_COMMENT) { - this.dropLeadingWhitespace = tok.value.charAt(tok.value.length - this.tokens.tags.COMMENT_END.length - 1) === "-"; - } else { - this.fail("Unexpected token at top-level: " + tok.type, tok.lineno, tok.colno); - } - } - return buf; - }; - _proto.parse = function parse() { - return new nodes.NodeList(0, 0, this.parseNodes()); - }; - _proto.parseAsRoot = function parseAsRoot() { - return new nodes.Root(0, 0, this.parseNodes()); - }; - return Parser2; - }(Obj); - module.exports = { - parse: function parse(src, extensions, opts) { - var p = new Parser(lexer.lex(src, opts)); - if (extensions !== undefined) { - p.extensions = extensions; - } - return p.parseAsRoot(); - }, - Parser - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/transformer.js -var require_transformer = __commonJS((exports, module) => { - var nodes = require_nodes(); - var lib = require_lib(); - var sym = 0; - function gensym() { - return "hole_" + sym++; - } - function mapCOW(arr, func) { - var res = null; - for (var i = 0;i < arr.length; i++) { - var item = func(arr[i]); - if (item !== arr[i]) { - if (!res) { - res = arr.slice(); - } - res[i] = item; - } - } - return res || arr; - } - function walk(ast, func, depthFirst) { - if (!(ast instanceof nodes.Node)) { - return ast; - } - if (!depthFirst) { - var astT = func(ast); - if (astT && astT !== ast) { - return astT; - } - } - if (ast instanceof nodes.NodeList) { - var children = mapCOW(ast.children, function(node) { - return walk(node, func, depthFirst); - }); - if (children !== ast.children) { - ast = new nodes[ast.typename](ast.lineno, ast.colno, children); - } - } else if (ast instanceof nodes.CallExtension) { - var args = walk(ast.args, func, depthFirst); - var contentArgs = mapCOW(ast.contentArgs, function(node) { - return walk(node, func, depthFirst); - }); - if (args !== ast.args || contentArgs !== ast.contentArgs) { - ast = new nodes[ast.typename](ast.extName, ast.prop, args, contentArgs); - } - } else { - var props = ast.fields.map(function(field) { - return ast[field]; - }); - var propsT = mapCOW(props, function(prop) { - return walk(prop, func, depthFirst); - }); - if (propsT !== props) { - ast = new nodes[ast.typename](ast.lineno, ast.colno); - propsT.forEach(function(prop, i) { - ast[ast.fields[i]] = prop; - }); - } - } - return depthFirst ? func(ast) || ast : ast; - } - function depthWalk(ast, func) { - return walk(ast, func, true); - } - function _liftFilters(node, asyncFilters, prop) { - var children = []; - var walked = depthWalk(prop ? node[prop] : node, function(descNode) { - var symbol2; - if (descNode instanceof nodes.Block) { - return descNode; - } else if (descNode instanceof nodes.Filter && lib.indexOf(asyncFilters, descNode.name.value) !== -1 || descNode instanceof nodes.CallExtensionAsync) { - symbol2 = new nodes.Symbol(descNode.lineno, descNode.colno, gensym()); - children.push(new nodes.FilterAsync(descNode.lineno, descNode.colno, descNode.name, descNode.args, symbol2)); - } - return symbol2; - }); - if (prop) { - node[prop] = walked; - } else { - node = walked; - } - if (children.length) { - children.push(node); - return new nodes.NodeList(node.lineno, node.colno, children); - } else { - return node; - } - } - function liftFilters(ast, asyncFilters) { - return depthWalk(ast, function(node) { - if (node instanceof nodes.Output) { - return _liftFilters(node, asyncFilters); - } else if (node instanceof nodes.Set) { - return _liftFilters(node, asyncFilters, "value"); - } else if (node instanceof nodes.For) { - return _liftFilters(node, asyncFilters, "arr"); - } else if (node instanceof nodes.If) { - return _liftFilters(node, asyncFilters, "cond"); - } else if (node instanceof nodes.CallExtension) { - return _liftFilters(node, asyncFilters, "args"); - } else { - return; - } - }); - } - function liftSuper(ast) { - return walk(ast, function(blockNode) { - if (!(blockNode instanceof nodes.Block)) { - return; - } - var hasSuper = false; - var symbol2 = gensym(); - blockNode.body = walk(blockNode.body, function(node) { - if (node instanceof nodes.FunCall && node.name.value === "super") { - hasSuper = true; - return new nodes.Symbol(node.lineno, node.colno, symbol2); - } - }); - if (hasSuper) { - blockNode.body.children.unshift(new nodes.Super(0, 0, blockNode.name, new nodes.Symbol(0, 0, symbol2))); - } - }); - } - function convertStatements(ast) { - return depthWalk(ast, function(node) { - if (!(node instanceof nodes.If) && !(node instanceof nodes.For)) { - return; - } - var async = false; - walk(node, function(child) { - if (child instanceof nodes.FilterAsync || child instanceof nodes.IfAsync || child instanceof nodes.AsyncEach || child instanceof nodes.AsyncAll || child instanceof nodes.CallExtensionAsync) { - async = true; - return child; - } - return; - }); - if (async) { - if (node instanceof nodes.If) { - return new nodes.IfAsync(node.lineno, node.colno, node.cond, node.body, node.else_); - } else if (node instanceof nodes.For && !(node instanceof nodes.AsyncAll)) { - return new nodes.AsyncEach(node.lineno, node.colno, node.arr, node.name, node.body, node.else_); - } - } - return; - }); - } - function cps(ast, asyncFilters) { - return convertStatements(liftSuper(liftFilters(ast, asyncFilters))); - } - function transform2(ast, asyncFilters) { - return cps(ast, asyncFilters || []); - } - module.exports = { - transform: transform2 - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/runtime.js -var require_runtime = __commonJS((exports, module) => { - var lib = require_lib(); - var arrayFrom = Array.from; - var supportsIterators = typeof Symbol === "function" && Symbol.iterator && typeof arrayFrom === "function"; - var Frame = /* @__PURE__ */ function() { - function Frame2(parent, isolateWrites) { - this.variables = Object.create(null); - this.parent = parent; - this.topLevel = false; - this.isolateWrites = isolateWrites; - } - var _proto = Frame2.prototype; - _proto.set = function set(name, val, resolveUp) { - var parts = name.split("."); - var obj = this.variables; - var frame = this; - if (resolveUp) { - if (frame = this.resolve(parts[0], true)) { - frame.set(name, val); - return; - } - } - for (var i = 0;i < parts.length - 1; i++) { - var id = parts[i]; - if (!obj[id]) { - obj[id] = {}; - } - obj = obj[id]; - } - obj[parts[parts.length - 1]] = val; - }; - _proto.get = function get(name) { - var val = this.variables[name]; - if (val !== undefined) { - return val; - } - return null; - }; - _proto.lookup = function lookup(name) { - var p = this.parent; - var val = this.variables[name]; - if (val !== undefined) { - return val; - } - return p && p.lookup(name); - }; - _proto.resolve = function resolve(name, forWrite) { - var p = forWrite && this.isolateWrites ? undefined : this.parent; - var val = this.variables[name]; - if (val !== undefined) { - return this; - } - return p && p.resolve(name); - }; - _proto.push = function push(isolateWrites) { - return new Frame2(this, isolateWrites); - }; - _proto.pop = function pop() { - return this.parent; - }; - return Frame2; - }(); - function makeMacro(argNames, kwargNames, func) { - return function macro() { - for (var _len = arguments.length, macroArgs = new Array(_len), _key = 0;_key < _len; _key++) { - macroArgs[_key] = arguments[_key]; - } - var argCount = numArgs(macroArgs); - var args; - var kwargs = getKeywordArgs(macroArgs); - if (argCount > argNames.length) { - args = macroArgs.slice(0, argNames.length); - macroArgs.slice(args.length, argCount).forEach(function(val, i2) { - if (i2 < kwargNames.length) { - kwargs[kwargNames[i2]] = val; - } - }); - args.push(kwargs); - } else if (argCount < argNames.length) { - args = macroArgs.slice(0, argCount); - for (var i = argCount;i < argNames.length; i++) { - var arg = argNames[i]; - args.push(kwargs[arg]); - delete kwargs[arg]; - } - args.push(kwargs); - } else { - args = macroArgs; - } - return func.apply(this, args); - }; - } - function makeKeywordArgs(obj) { - obj.__keywords = true; - return obj; - } - function isKeywordArgs(obj) { - return obj && Object.prototype.hasOwnProperty.call(obj, "__keywords"); - } - function getKeywordArgs(args) { - var len = args.length; - if (len) { - var lastArg = args[len - 1]; - if (isKeywordArgs(lastArg)) { - return lastArg; - } - } - return {}; - } - function numArgs(args) { - var len = args.length; - if (len === 0) { - return 0; - } - var lastArg = args[len - 1]; - if (isKeywordArgs(lastArg)) { - return len - 1; - } else { - return len; - } - } - function SafeString(val) { - if (typeof val !== "string") { - return val; - } - this.val = val; - this.length = val.length; - } - SafeString.prototype = Object.create(String.prototype, { - length: { - writable: true, - configurable: true, - value: 0 - } - }); - SafeString.prototype.valueOf = function valueOf() { - return this.val; - }; - SafeString.prototype.toString = function toString() { - return this.val; - }; - function copySafeness(dest, target) { - if (dest instanceof SafeString) { - return new SafeString(target); - } - return target.toString(); - } - function markSafe(val) { - var type = typeof val; - if (type === "string") { - return new SafeString(val); - } else if (type !== "function") { - return val; - } else { - return function wrapSafe(args) { - var ret = val.apply(this, arguments); - if (typeof ret === "string") { - return new SafeString(ret); - } - return ret; - }; - } - } - function suppressValue(val, autoescape) { - val = val !== undefined && val !== null ? val : ""; - if (autoescape && !(val instanceof SafeString)) { - val = lib.escape(val.toString()); - } - return val; - } - function ensureDefined(val, lineno, colno) { - if (val === null || val === undefined) { - throw new lib.TemplateError("attempted to output null or undefined value", lineno + 1, colno + 1); - } - return val; - } - function memberLookup(obj, val) { - if (obj === undefined || obj === null) { - return; - } - if (typeof obj[val] === "function") { - return function() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;_key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - return obj[val].apply(obj, args); - }; - } - return obj[val]; - } - function callWrap(obj, name, context19, args) { - if (!obj) { - throw new Error("Unable to call `" + name + "`, which is undefined or falsey"); - } else if (typeof obj !== "function") { - throw new Error("Unable to call `" + name + "`, which is not a function"); - } - return obj.apply(context19, args); - } - function contextOrFrameLookup(context19, frame, name) { - var val = frame.lookup(name); - return val !== undefined ? val : context19.lookup(name); - } - function handleError(error48, lineno, colno) { - if (error48.lineno) { - return error48; - } else { - return new lib.TemplateError(error48, lineno, colno); - } - } - function asyncEach(arr, dimen, iter, cb) { - if (lib.isArray(arr)) { - var len = arr.length; - lib.asyncIter(arr, function iterCallback(item, i, next) { - switch (dimen) { - case 1: - iter(item, i, len, next); - break; - case 2: - iter(item[0], item[1], i, len, next); - break; - case 3: - iter(item[0], item[1], item[2], i, len, next); - break; - default: - item.push(i, len, next); - iter.apply(this, item); - } - }, cb); - } else { - lib.asyncFor(arr, function iterCallback(key, val, i, len2, next) { - iter(key, val, i, len2, next); - }, cb); - } - } - function asyncAll(arr, dimen, func, cb) { - var finished = 0; - var len; - var outputArr; - function done(i2, output) { - finished++; - outputArr[i2] = output; - if (finished === len) { - cb(null, outputArr.join("")); - } - } - if (lib.isArray(arr)) { - len = arr.length; - outputArr = new Array(len); - if (len === 0) { - cb(null, ""); - } else { - for (var i = 0;i < arr.length; i++) { - var item = arr[i]; - switch (dimen) { - case 1: - func(item, i, len, done); - break; - case 2: - func(item[0], item[1], i, len, done); - break; - case 3: - func(item[0], item[1], item[2], i, len, done); - break; - default: - item.push(i, len, done); - func.apply(this, item); - } - } - } - } else { - var keys = lib.keys(arr || {}); - len = keys.length; - outputArr = new Array(len); - if (len === 0) { - cb(null, ""); - } else { - for (var _i = 0;_i < keys.length; _i++) { - var k = keys[_i]; - func(k, arr[k], _i, len, done); - } - } - } - } - function fromIterator(arr) { - if (typeof arr !== "object" || arr === null || lib.isArray(arr)) { - return arr; - } else if (supportsIterators && Symbol.iterator in arr) { - return arrayFrom(arr); - } else { - return arr; - } - } - module.exports = { - Frame, - makeMacro, - makeKeywordArgs, - numArgs, - suppressValue, - ensureDefined, - memberLookup, - contextOrFrameLookup, - callWrap, - handleError, - isArray: lib.isArray, - keys: lib.keys, - SafeString, - copySafeness, - markSafe, - asyncEach, - asyncAll, - inOperator: lib.inOperator, - fromIterator - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/compiler.js -var require_compiler = __commonJS((exports, module) => { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var parser = require_parser(); - var transformer = require_transformer(); - var nodes = require_nodes(); - var _require = require_lib(); - var TemplateError = _require.TemplateError; - var _require2 = require_runtime(); - var Frame = _require2.Frame; - var _require3 = require_object2(); - var Obj = _require3.Obj; - var compareOps = { - "==": "==", - "===": "===", - "!=": "!=", - "!==": "!==", - "<": "<", - ">": ">", - "<=": "<=", - ">=": ">=" - }; - var Compiler = /* @__PURE__ */ function(_Obj) { - _inheritsLoose(Compiler2, _Obj); - function Compiler2() { - return _Obj.apply(this, arguments) || this; - } - var _proto = Compiler2.prototype; - _proto.init = function init(templateName, throwOnUndefined) { - this.templateName = templateName; - this.codebuf = []; - this.lastId = 0; - this.buffer = null; - this.bufferStack = []; - this._scopeClosers = ""; - this.inBlock = false; - this.throwOnUndefined = throwOnUndefined; - }; - _proto.fail = function fail(msg, lineno, colno) { - if (lineno !== undefined) { - lineno += 1; - } - if (colno !== undefined) { - colno += 1; - } - throw new TemplateError(msg, lineno, colno); - }; - _proto._pushBuffer = function _pushBuffer() { - var id = this._tmpid(); - this.bufferStack.push(this.buffer); - this.buffer = id; - this._emit("var " + this.buffer + ' = "";'); - return id; - }; - _proto._popBuffer = function _popBuffer() { - this.buffer = this.bufferStack.pop(); - }; - _proto._emit = function _emit(code) { - this.codebuf.push(code); - }; - _proto._emitLine = function _emitLine(code) { - this._emit(code + ` -`); - }; - _proto._emitLines = function _emitLines() { - var _this = this; - for (var _len = arguments.length, lines = new Array(_len), _key = 0;_key < _len; _key++) { - lines[_key] = arguments[_key]; - } - lines.forEach(function(line) { - return _this._emitLine(line); - }); - }; - _proto._emitFuncBegin = function _emitFuncBegin(node, name) { - this.buffer = "output"; - this._scopeClosers = ""; - this._emitLine("function " + name + "(env, context, frame, runtime, cb) {"); - this._emitLine("var lineno = " + node.lineno + ";"); - this._emitLine("var colno = " + node.colno + ";"); - this._emitLine("var " + this.buffer + ' = "";'); - this._emitLine("try {"); - }; - _proto._emitFuncEnd = function _emitFuncEnd(noReturn) { - if (!noReturn) { - this._emitLine("cb(null, " + this.buffer + ");"); - } - this._closeScopeLevels(); - this._emitLine("} catch (e) {"); - this._emitLine(" cb(runtime.handleError(e, lineno, colno));"); - this._emitLine("}"); - this._emitLine("}"); - this.buffer = null; - }; - _proto._addScopeLevel = function _addScopeLevel() { - this._scopeClosers += "})"; - }; - _proto._closeScopeLevels = function _closeScopeLevels() { - this._emitLine(this._scopeClosers + ";"); - this._scopeClosers = ""; - }; - _proto._withScopedSyntax = function _withScopedSyntax(func) { - var _scopeClosers = this._scopeClosers; - this._scopeClosers = ""; - func.call(this); - this._closeScopeLevels(); - this._scopeClosers = _scopeClosers; - }; - _proto._makeCallback = function _makeCallback(res) { - var err = this._tmpid(); - return "function(" + err + (res ? "," + res : "") + `) { -` + "if(" + err + ") { cb(" + err + "); return; }"; - }; - _proto._tmpid = function _tmpid() { - this.lastId++; - return "t_" + this.lastId; - }; - _proto._templateName = function _templateName() { - return this.templateName == null ? "undefined" : JSON.stringify(this.templateName); - }; - _proto._compileChildren = function _compileChildren(node, frame) { - var _this2 = this; - node.children.forEach(function(child) { - _this2.compile(child, frame); - }); - }; - _proto._compileAggregate = function _compileAggregate(node, frame, startChar, endChar) { - var _this3 = this; - if (startChar) { - this._emit(startChar); - } - node.children.forEach(function(child, i) { - if (i > 0) { - _this3._emit(","); - } - _this3.compile(child, frame); - }); - if (endChar) { - this._emit(endChar); - } - }; - _proto._compileExpression = function _compileExpression(node, frame) { - this.assertType(node, nodes.Literal, nodes.Symbol, nodes.Group, nodes.Array, nodes.Dict, nodes.FunCall, nodes.Caller, nodes.Filter, nodes.LookupVal, nodes.Compare, nodes.InlineIf, nodes.In, nodes.Is, nodes.And, nodes.Or, nodes.Not, nodes.Add, nodes.Concat, nodes.Sub, nodes.Mul, nodes.Div, nodes.FloorDiv, nodes.Mod, nodes.Pow, nodes.Neg, nodes.Pos, nodes.Compare, nodes.NodeList); - this.compile(node, frame); - }; - _proto.assertType = function assertType(node) { - for (var _len2 = arguments.length, types = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1;_key2 < _len2; _key2++) { - types[_key2 - 1] = arguments[_key2]; - } - if (!types.some(function(t) { - return node instanceof t; - })) { - this.fail("assertType: invalid type: " + node.typename, node.lineno, node.colno); - } - }; - _proto.compileCallExtension = function compileCallExtension(node, frame, async) { - var _this4 = this; - var args = node.args; - var contentArgs = node.contentArgs; - var autoescape = typeof node.autoescape === "boolean" ? node.autoescape : true; - if (!async) { - this._emit(this.buffer + " += runtime.suppressValue("); - } - this._emit('env.getExtension("' + node.extName + '")["' + node.prop + '"]('); - this._emit("context"); - if (args || contentArgs) { - this._emit(","); - } - if (args) { - if (!(args instanceof nodes.NodeList)) { - this.fail("compileCallExtension: arguments must be a NodeList, " + "use `parser.parseSignature`"); - } - args.children.forEach(function(arg, i) { - _this4._compileExpression(arg, frame); - if (i !== args.children.length - 1 || contentArgs.length) { - _this4._emit(","); - } - }); - } - if (contentArgs.length) { - contentArgs.forEach(function(arg, i) { - if (i > 0) { - _this4._emit(","); - } - if (arg) { - _this4._emitLine("function(cb) {"); - _this4._emitLine("if(!cb) { cb = function(err) { if(err) { throw err; }}}"); - var id = _this4._pushBuffer(); - _this4._withScopedSyntax(function() { - _this4.compile(arg, frame); - _this4._emitLine("cb(null, " + id + ");"); - }); - _this4._popBuffer(); - _this4._emitLine("return " + id + ";"); - _this4._emitLine("}"); - } else { - _this4._emit("null"); - } - }); - } - if (async) { - var res = this._tmpid(); - this._emitLine(", " + this._makeCallback(res)); - this._emitLine(this.buffer + " += runtime.suppressValue(" + res + ", " + autoescape + " && env.opts.autoescape);"); - this._addScopeLevel(); - } else { - this._emit(")"); - this._emit(", " + autoescape + ` && env.opts.autoescape); -`); - } - }; - _proto.compileCallExtensionAsync = function compileCallExtensionAsync(node, frame) { - this.compileCallExtension(node, frame, true); - }; - _proto.compileNodeList = function compileNodeList(node, frame) { - this._compileChildren(node, frame); - }; - _proto.compileLiteral = function compileLiteral(node) { - if (typeof node.value === "string") { - var val = node.value.replace(/\\/g, "\\\\"); - val = val.replace(/"/g, "\\\""); - val = val.replace(/\n/g, "\\n"); - val = val.replace(/\r/g, "\\r"); - val = val.replace(/\t/g, "\\t"); - val = val.replace(/\u2028/g, "\\u2028"); - this._emit('"' + val + '"'); - } else if (node.value === null) { - this._emit("null"); - } else { - this._emit(node.value.toString()); - } - }; - _proto.compileSymbol = function compileSymbol(node, frame) { - var name = node.value; - var v = frame.lookup(name); - if (v) { - this._emit(v); - } else { - this._emit("runtime.contextOrFrameLookup(" + 'context, frame, "' + name + '")'); - } - }; - _proto.compileGroup = function compileGroup(node, frame) { - this._compileAggregate(node, frame, "(", ")"); - }; - _proto.compileArray = function compileArray(node, frame) { - this._compileAggregate(node, frame, "[", "]"); - }; - _proto.compileDict = function compileDict(node, frame) { - this._compileAggregate(node, frame, "{", "}"); - }; - _proto.compilePair = function compilePair(node, frame) { - var key = node.key; - var val = node.value; - if (key instanceof nodes.Symbol) { - key = new nodes.Literal(key.lineno, key.colno, key.value); - } else if (!(key instanceof nodes.Literal && typeof key.value === "string")) { - this.fail("compilePair: Dict keys must be strings or names", key.lineno, key.colno); - } - this.compile(key, frame); - this._emit(": "); - this._compileExpression(val, frame); - }; - _proto.compileInlineIf = function compileInlineIf(node, frame) { - this._emit("("); - this.compile(node.cond, frame); - this._emit("?"); - this.compile(node.body, frame); - this._emit(":"); - if (node.else_ !== null) { - this.compile(node.else_, frame); - } else { - this._emit('""'); - } - this._emit(")"); - }; - _proto.compileIn = function compileIn(node, frame) { - this._emit("runtime.inOperator("); - this.compile(node.left, frame); - this._emit(","); - this.compile(node.right, frame); - this._emit(")"); - }; - _proto.compileIs = function compileIs(node, frame) { - var right = node.right.name ? node.right.name.value : node.right.value; - this._emit('env.getTest("' + right + '").call(context, '); - this.compile(node.left, frame); - if (node.right.args) { - this._emit(","); - this.compile(node.right.args, frame); - } - this._emit(") === true"); - }; - _proto._binOpEmitter = function _binOpEmitter(node, frame, str) { - this.compile(node.left, frame); - this._emit(str); - this.compile(node.right, frame); - }; - _proto.compileOr = function compileOr(node, frame) { - return this._binOpEmitter(node, frame, " || "); - }; - _proto.compileAnd = function compileAnd(node, frame) { - return this._binOpEmitter(node, frame, " && "); - }; - _proto.compileAdd = function compileAdd(node, frame) { - return this._binOpEmitter(node, frame, " + "); - }; - _proto.compileConcat = function compileConcat(node, frame) { - return this._binOpEmitter(node, frame, ' + "" + '); - }; - _proto.compileSub = function compileSub(node, frame) { - return this._binOpEmitter(node, frame, " - "); - }; - _proto.compileMul = function compileMul(node, frame) { - return this._binOpEmitter(node, frame, " * "); - }; - _proto.compileDiv = function compileDiv(node, frame) { - return this._binOpEmitter(node, frame, " / "); - }; - _proto.compileMod = function compileMod(node, frame) { - return this._binOpEmitter(node, frame, " % "); - }; - _proto.compileNot = function compileNot(node, frame) { - this._emit("!"); - this.compile(node.target, frame); - }; - _proto.compileFloorDiv = function compileFloorDiv(node, frame) { - this._emit("Math.floor("); - this.compile(node.left, frame); - this._emit(" / "); - this.compile(node.right, frame); - this._emit(")"); - }; - _proto.compilePow = function compilePow(node, frame) { - this._emit("Math.pow("); - this.compile(node.left, frame); - this._emit(", "); - this.compile(node.right, frame); - this._emit(")"); - }; - _proto.compileNeg = function compileNeg(node, frame) { - this._emit("-"); - this.compile(node.target, frame); - }; - _proto.compilePos = function compilePos(node, frame) { - this._emit("+"); - this.compile(node.target, frame); - }; - _proto.compileCompare = function compileCompare(node, frame) { - var _this5 = this; - this.compile(node.expr, frame); - node.ops.forEach(function(op) { - _this5._emit(" " + compareOps[op.type] + " "); - _this5.compile(op.expr, frame); - }); - }; - _proto.compileLookupVal = function compileLookupVal(node, frame) { - this._emit("runtime.memberLookup(("); - this._compileExpression(node.target, frame); - this._emit("),"); - this._compileExpression(node.val, frame); - this._emit(")"); - }; - _proto._getNodeName = function _getNodeName(node) { - switch (node.typename) { - case "Symbol": - return node.value; - case "FunCall": - return "the return value of (" + this._getNodeName(node.name) + ")"; - case "LookupVal": - return this._getNodeName(node.target) + '["' + this._getNodeName(node.val) + '"]'; - case "Literal": - return node.value.toString(); - default: - return "--expression--"; - } - }; - _proto.compileFunCall = function compileFunCall(node, frame) { - this._emit("(lineno = " + node.lineno + ", colno = " + node.colno + ", "); - this._emit("runtime.callWrap("); - this._compileExpression(node.name, frame); - this._emit(', "' + this._getNodeName(node.name).replace(/"/g, "\\\"") + '", context, '); - this._compileAggregate(node.args, frame, "[", "])"); - this._emit(")"); - }; - _proto.compileFilter = function compileFilter(node, frame) { - var name = node.name; - this.assertType(name, nodes.Symbol); - this._emit('env.getFilter("' + name.value + '").call(context, '); - this._compileAggregate(node.args, frame); - this._emit(")"); - }; - _proto.compileFilterAsync = function compileFilterAsync(node, frame) { - var name = node.name; - var symbol2 = node.symbol.value; - this.assertType(name, nodes.Symbol); - frame.set(symbol2, symbol2); - this._emit('env.getFilter("' + name.value + '").call(context, '); - this._compileAggregate(node.args, frame); - this._emitLine(", " + this._makeCallback(symbol2)); - this._addScopeLevel(); - }; - _proto.compileKeywordArgs = function compileKeywordArgs(node, frame) { - this._emit("runtime.makeKeywordArgs("); - this.compileDict(node, frame); - this._emit(")"); - }; - _proto.compileSet = function compileSet(node, frame) { - var _this6 = this; - var ids = []; - node.targets.forEach(function(target) { - var name = target.value; - var id = frame.lookup(name); - if (id === null || id === undefined) { - id = _this6._tmpid(); - _this6._emitLine("var " + id + ";"); - } - ids.push(id); - }); - if (node.value) { - this._emit(ids.join(" = ") + " = "); - this._compileExpression(node.value, frame); - this._emitLine(";"); - } else { - this._emit(ids.join(" = ") + " = "); - this.compile(node.body, frame); - this._emitLine(";"); - } - node.targets.forEach(function(target, i) { - var id = ids[i]; - var name = target.value; - _this6._emitLine('frame.set("' + name + '", ' + id + ", true);"); - _this6._emitLine("if(frame.topLevel) {"); - _this6._emitLine('context.setVariable("' + name + '", ' + id + ");"); - _this6._emitLine("}"); - if (name.charAt(0) !== "_") { - _this6._emitLine("if(frame.topLevel) {"); - _this6._emitLine('context.addExport("' + name + '", ' + id + ");"); - _this6._emitLine("}"); - } - }); - }; - _proto.compileSwitch = function compileSwitch(node, frame) { - var _this7 = this; - this._emit("switch ("); - this.compile(node.expr, frame); - this._emit(") {"); - node.cases.forEach(function(c, i) { - _this7._emit("case "); - _this7.compile(c.cond, frame); - _this7._emit(": "); - _this7.compile(c.body, frame); - if (c.body.children.length) { - _this7._emitLine("break;"); - } - }); - if (node.default) { - this._emit("default:"); - this.compile(node.default, frame); - } - this._emit("}"); - }; - _proto.compileIf = function compileIf(node, frame, async) { - var _this8 = this; - this._emit("if("); - this._compileExpression(node.cond, frame); - this._emitLine(") {"); - this._withScopedSyntax(function() { - _this8.compile(node.body, frame); - if (async) { - _this8._emit("cb()"); - } - }); - if (node.else_) { - this._emitLine(`} -else {`); - this._withScopedSyntax(function() { - _this8.compile(node.else_, frame); - if (async) { - _this8._emit("cb()"); - } - }); - } else if (async) { - this._emitLine(`} -else {`); - this._emit("cb()"); - } - this._emitLine("}"); - }; - _proto.compileIfAsync = function compileIfAsync(node, frame) { - this._emit("(function(cb) {"); - this.compileIf(node, frame, true); - this._emit("})(" + this._makeCallback()); - this._addScopeLevel(); - }; - _proto._emitLoopBindings = function _emitLoopBindings(node, arr, i, len) { - var _this9 = this; - var bindings = [{ - name: "index", - val: i + " + 1" - }, { - name: "index0", - val: i - }, { - name: "revindex", - val: len + " - " + i - }, { - name: "revindex0", - val: len + " - " + i + " - 1" - }, { - name: "first", - val: i + " === 0" - }, { - name: "last", - val: i + " === " + len + " - 1" - }, { - name: "length", - val: len - }]; - bindings.forEach(function(b) { - _this9._emitLine('frame.set("loop.' + b.name + '", ' + b.val + ");"); - }); - }; - _proto.compileFor = function compileFor(node, frame) { - var _this10 = this; - var i = this._tmpid(); - var len = this._tmpid(); - var arr = this._tmpid(); - frame = frame.push(); - this._emitLine("frame = frame.push();"); - this._emit("var " + arr + " = "); - this._compileExpression(node.arr, frame); - this._emitLine(";"); - this._emit("if(" + arr + ") {"); - this._emitLine(arr + " = runtime.fromIterator(" + arr + ");"); - if (node.name instanceof nodes.Array) { - this._emitLine("var " + i + ";"); - this._emitLine("if(runtime.isArray(" + arr + ")) {"); - this._emitLine("var " + len + " = " + arr + ".length;"); - this._emitLine("for(" + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); - node.name.children.forEach(function(child, u) { - var tid = _this10._tmpid(); - _this10._emitLine("var " + tid + " = " + arr + "[" + i + "][" + u + "];"); - _this10._emitLine('frame.set("' + child + '", ' + arr + "[" + i + "][" + u + "]);"); - frame.set(node.name.children[u].value, tid); - }); - this._emitLoopBindings(node, arr, i, len); - this._withScopedSyntax(function() { - _this10.compile(node.body, frame); - }); - this._emitLine("}"); - this._emitLine("} else {"); - var _node$name$children = node.name.children, key = _node$name$children[0], val = _node$name$children[1]; - var k = this._tmpid(); - var v = this._tmpid(); - frame.set(key.value, k); - frame.set(val.value, v); - this._emitLine(i + " = -1;"); - this._emitLine("var " + len + " = runtime.keys(" + arr + ").length;"); - this._emitLine("for(var " + k + " in " + arr + ") {"); - this._emitLine(i + "++;"); - this._emitLine("var " + v + " = " + arr + "[" + k + "];"); - this._emitLine('frame.set("' + key.value + '", ' + k + ");"); - this._emitLine('frame.set("' + val.value + '", ' + v + ");"); - this._emitLoopBindings(node, arr, i, len); - this._withScopedSyntax(function() { - _this10.compile(node.body, frame); - }); - this._emitLine("}"); - this._emitLine("}"); - } else { - var _v = this._tmpid(); - frame.set(node.name.value, _v); - this._emitLine("var " + len + " = " + arr + ".length;"); - this._emitLine("for(var " + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); - this._emitLine("var " + _v + " = " + arr + "[" + i + "];"); - this._emitLine('frame.set("' + node.name.value + '", ' + _v + ");"); - this._emitLoopBindings(node, arr, i, len); - this._withScopedSyntax(function() { - _this10.compile(node.body, frame); - }); - this._emitLine("}"); - } - this._emitLine("}"); - if (node.else_) { - this._emitLine("if (!" + len + ") {"); - this.compile(node.else_, frame); - this._emitLine("}"); - } - this._emitLine("frame = frame.pop();"); - }; - _proto._compileAsyncLoop = function _compileAsyncLoop(node, frame, parallel) { - var _this11 = this; - var i = this._tmpid(); - var len = this._tmpid(); - var arr = this._tmpid(); - var asyncMethod = parallel ? "asyncAll" : "asyncEach"; - frame = frame.push(); - this._emitLine("frame = frame.push();"); - this._emit("var " + arr + " = runtime.fromIterator("); - this._compileExpression(node.arr, frame); - this._emitLine(");"); - if (node.name instanceof nodes.Array) { - var arrayLen = node.name.children.length; - this._emit("runtime." + asyncMethod + "(" + arr + ", " + arrayLen + ", function("); - node.name.children.forEach(function(name) { - _this11._emit(name.value + ","); - }); - this._emit(i + "," + len + ",next) {"); - node.name.children.forEach(function(name) { - var id2 = name.value; - frame.set(id2, id2); - _this11._emitLine('frame.set("' + id2 + '", ' + id2 + ");"); - }); - } else { - var id = node.name.value; - this._emitLine("runtime." + asyncMethod + "(" + arr + ", 1, function(" + id + ", " + i + ", " + len + ",next) {"); - this._emitLine('frame.set("' + id + '", ' + id + ");"); - frame.set(id, id); - } - this._emitLoopBindings(node, arr, i, len); - this._withScopedSyntax(function() { - var buf; - if (parallel) { - buf = _this11._pushBuffer(); - } - _this11.compile(node.body, frame); - _this11._emitLine("next(" + i + (buf ? "," + buf : "") + ");"); - if (parallel) { - _this11._popBuffer(); - } - }); - var output = this._tmpid(); - this._emitLine("}, " + this._makeCallback(output)); - this._addScopeLevel(); - if (parallel) { - this._emitLine(this.buffer + " += " + output + ";"); - } - if (node.else_) { - this._emitLine("if (!" + arr + ".length) {"); - this.compile(node.else_, frame); - this._emitLine("}"); - } - this._emitLine("frame = frame.pop();"); - }; - _proto.compileAsyncEach = function compileAsyncEach(node, frame) { - this._compileAsyncLoop(node, frame); - }; - _proto.compileAsyncAll = function compileAsyncAll(node, frame) { - this._compileAsyncLoop(node, frame, true); - }; - _proto._compileMacro = function _compileMacro(node, frame) { - var _this12 = this; - var args = []; - var kwargs = null; - var funcId = "macro_" + this._tmpid(); - var keepFrame = frame !== undefined; - node.args.children.forEach(function(arg, i) { - if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) { - kwargs = arg; - } else { - _this12.assertType(arg, nodes.Symbol); - args.push(arg); - } - }); - var realNames = [].concat(args.map(function(n) { - return "l_" + n.value; - }), ["kwargs"]); - var argNames = args.map(function(n) { - return '"' + n.value + '"'; - }); - var kwargNames = (kwargs && kwargs.children || []).map(function(n) { - return '"' + n.key.value + '"'; - }); - var currFrame; - if (keepFrame) { - currFrame = frame.push(true); - } else { - currFrame = new Frame; - } - this._emitLines("var " + funcId + " = runtime.makeMacro(", "[" + argNames.join(", ") + "], ", "[" + kwargNames.join(", ") + "], ", "function (" + realNames.join(", ") + ") {", "var callerFrame = frame;", "frame = " + (keepFrame ? "frame.push(true);" : "new runtime.Frame();"), "kwargs = kwargs || {};", 'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {', 'frame.set("caller", kwargs.caller); }'); - args.forEach(function(arg) { - _this12._emitLine('frame.set("' + arg.value + '", l_' + arg.value + ");"); - currFrame.set(arg.value, "l_" + arg.value); - }); - if (kwargs) { - kwargs.children.forEach(function(pair) { - var name = pair.key.value; - _this12._emit('frame.set("' + name + '", '); - _this12._emit('Object.prototype.hasOwnProperty.call(kwargs, "' + name + '")'); - _this12._emit(' ? kwargs["' + name + '"] : '); - _this12._compileExpression(pair.value, currFrame); - _this12._emit(");"); - }); - } - var bufferId = this._pushBuffer(); - this._withScopedSyntax(function() { - _this12.compile(node.body, currFrame); - }); - this._emitLine("frame = " + (keepFrame ? "frame.pop();" : "callerFrame;")); - this._emitLine("return new runtime.SafeString(" + bufferId + ");"); - this._emitLine("});"); - this._popBuffer(); - return funcId; - }; - _proto.compileMacro = function compileMacro(node, frame) { - var funcId = this._compileMacro(node); - var name = node.name.value; - frame.set(name, funcId); - if (frame.parent) { - this._emitLine('frame.set("' + name + '", ' + funcId + ");"); - } else { - if (node.name.value.charAt(0) !== "_") { - this._emitLine('context.addExport("' + name + '");'); - } - this._emitLine('context.setVariable("' + name + '", ' + funcId + ");"); - } - }; - _proto.compileCaller = function compileCaller(node, frame) { - this._emit("(function (){"); - var funcId = this._compileMacro(node, frame); - this._emit("return " + funcId + ";})()"); - }; - _proto._compileGetTemplate = function _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) { - var parentTemplateId = this._tmpid(); - var parentName = this._templateName(); - var cb = this._makeCallback(parentTemplateId); - var eagerCompileArg = eagerCompile ? "true" : "false"; - var ignoreMissingArg = ignoreMissing ? "true" : "false"; - this._emit("env.getTemplate("); - this._compileExpression(node.template, frame); - this._emitLine(", " + eagerCompileArg + ", " + parentName + ", " + ignoreMissingArg + ", " + cb); - return parentTemplateId; - }; - _proto.compileImport = function compileImport(node, frame) { - var target = node.target.value; - var id = this._compileGetTemplate(node, frame, false, false); - this._addScopeLevel(); - this._emitLine(id + ".getExported(" + (node.withContext ? "context.getVariables(), frame, " : "") + this._makeCallback(id)); - this._addScopeLevel(); - frame.set(target, id); - if (frame.parent) { - this._emitLine('frame.set("' + target + '", ' + id + ");"); - } else { - this._emitLine('context.setVariable("' + target + '", ' + id + ");"); - } - }; - _proto.compileFromImport = function compileFromImport(node, frame) { - var _this13 = this; - var importedId = this._compileGetTemplate(node, frame, false, false); - this._addScopeLevel(); - this._emitLine(importedId + ".getExported(" + (node.withContext ? "context.getVariables(), frame, " : "") + this._makeCallback(importedId)); - this._addScopeLevel(); - node.names.children.forEach(function(nameNode) { - var name; - var alias; - var id = _this13._tmpid(); - if (nameNode instanceof nodes.Pair) { - name = nameNode.key.value; - alias = nameNode.value.value; - } else { - name = nameNode.value; - alias = name; - } - _this13._emitLine("if(Object.prototype.hasOwnProperty.call(" + importedId + ', "' + name + '")) {'); - _this13._emitLine("var " + id + " = " + importedId + "." + name + ";"); - _this13._emitLine("} else {"); - _this13._emitLine(`cb(new Error("cannot import '` + name + `'")); return;`); - _this13._emitLine("}"); - frame.set(alias, id); - if (frame.parent) { - _this13._emitLine('frame.set("' + alias + '", ' + id + ");"); - } else { - _this13._emitLine('context.setVariable("' + alias + '", ' + id + ");"); - } - }); - }; - _proto.compileBlock = function compileBlock(node) { - var id = this._tmpid(); - if (!this.inBlock) { - this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '); - } - this._emit('context.getBlock("' + node.name.value + '")'); - if (!this.inBlock) { - this._emit(")"); - } - this._emitLine("(env, context, frame, runtime, " + this._makeCallback(id)); - this._emitLine(this.buffer + " += " + id + ";"); - this._addScopeLevel(); - }; - _proto.compileSuper = function compileSuper(node, frame) { - var name = node.blockName.value; - var id = node.symbol.value; - var cb = this._makeCallback(id); - this._emitLine('context.getSuper(env, "' + name + '", b_' + name + ", frame, runtime, " + cb); - this._emitLine(id + " = runtime.markSafe(" + id + ");"); - this._addScopeLevel(); - frame.set(id, id); - }; - _proto.compileExtends = function compileExtends(node, frame) { - var k = this._tmpid(); - var parentTemplateId = this._compileGetTemplate(node, frame, true, false); - this._emitLine("parentTemplate = " + parentTemplateId); - this._emitLine("for(var " + k + " in parentTemplate.blocks) {"); - this._emitLine("context.addBlock(" + k + ", parentTemplate.blocks[" + k + "]);"); - this._emitLine("}"); - this._addScopeLevel(); - }; - _proto.compileInclude = function compileInclude(node, frame) { - this._emitLine("var tasks = [];"); - this._emitLine("tasks.push("); - this._emitLine("function(callback) {"); - var id = this._compileGetTemplate(node, frame, false, node.ignoreMissing); - this._emitLine("callback(null," + id + ");});"); - this._emitLine("});"); - var id2 = this._tmpid(); - this._emitLine("tasks.push("); - this._emitLine("function(template, callback){"); - this._emitLine("template.render(context.getVariables(), frame, " + this._makeCallback(id2)); - this._emitLine("callback(null," + id2 + ");});"); - this._emitLine("});"); - this._emitLine("tasks.push("); - this._emitLine("function(result, callback){"); - this._emitLine(this.buffer + " += result;"); - this._emitLine("callback(null);"); - this._emitLine("});"); - this._emitLine("env.waterfall(tasks, function(){"); - this._addScopeLevel(); - }; - _proto.compileTemplateData = function compileTemplateData(node, frame) { - this.compileLiteral(node, frame); - }; - _proto.compileCapture = function compileCapture(node, frame) { - var _this14 = this; - var buffer = this.buffer; - this.buffer = "output"; - this._emitLine("(function() {"); - this._emitLine('var output = "";'); - this._withScopedSyntax(function() { - _this14.compile(node.body, frame); - }); - this._emitLine("return output;"); - this._emitLine("})()"); - this.buffer = buffer; - }; - _proto.compileOutput = function compileOutput(node, frame) { - var _this15 = this; - var children = node.children; - children.forEach(function(child) { - if (child instanceof nodes.TemplateData) { - if (child.value) { - _this15._emit(_this15.buffer + " += "); - _this15.compileLiteral(child, frame); - _this15._emitLine(";"); - } - } else { - _this15._emit(_this15.buffer + " += runtime.suppressValue("); - if (_this15.throwOnUndefined) { - _this15._emit("runtime.ensureDefined("); - } - _this15.compile(child, frame); - if (_this15.throwOnUndefined) { - _this15._emit("," + node.lineno + "," + node.colno + ")"); - } - _this15._emit(`, env.opts.autoescape); -`); - } - }); - }; - _proto.compileRoot = function compileRoot(node, frame) { - var _this16 = this; - if (frame) { - this.fail("compileRoot: root node can't have frame"); - } - frame = new Frame; - this._emitFuncBegin(node, "root"); - this._emitLine("var parentTemplate = null;"); - this._compileChildren(node, frame); - this._emitLine("if(parentTemplate) {"); - this._emitLine("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"); - this._emitLine("} else {"); - this._emitLine("cb(null, " + this.buffer + ");"); - this._emitLine("}"); - this._emitFuncEnd(true); - this.inBlock = true; - var blockNames = []; - var blocks = node.findAll(nodes.Block); - blocks.forEach(function(block, i) { - var name = block.name.value; - if (blockNames.indexOf(name) !== -1) { - throw new Error('Block "' + name + '" defined more than once.'); - } - blockNames.push(name); - _this16._emitFuncBegin(block, "b_" + name); - var tmpFrame = new Frame; - _this16._emitLine("var frame = frame.push(true);"); - _this16.compile(block.body, tmpFrame); - _this16._emitFuncEnd(); - }); - this._emitLine("return {"); - blocks.forEach(function(block, i) { - var blockName = "b_" + block.name.value; - _this16._emitLine(blockName + ": " + blockName + ","); - }); - this._emitLine(`root: root -};`); - }; - _proto.compile = function compile(node, frame) { - var _compile = this["compile" + node.typename]; - if (_compile) { - _compile.call(this, node, frame); - } else { - this.fail("compile: Cannot compile node: " + node.typename, node.lineno, node.colno); - } - }; - _proto.getCode = function getCode() { - return this.codebuf.join(""); - }; - return Compiler2; - }(Obj); - module.exports = { - compile: function compile(src, asyncFilters, extensions, name, opts) { - if (opts === undefined) { - opts = {}; - } - var c = new Compiler(name, opts.throwOnUndefined); - var preprocessors = (extensions || []).map(function(ext) { - return ext.preprocess; - }).filter(function(f) { - return !!f; - }); - var processedSrc = preprocessors.reduce(function(s2, processor) { - return processor(s2); - }, src); - c.compile(transformer.transform(parser.parse(processedSrc, extensions, opts), asyncFilters, name)); - return c.getCode(); - }, - Compiler - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/filters.js -var require_filters = __commonJS((exports, module) => { - var lib = require_lib(); - var r = require_runtime(); - var _exports = module.exports = {}; - function normalize(value, defaultValue) { - if (value === null || value === undefined || value === false) { - return defaultValue; - } - return value; - } - _exports.abs = Math.abs; - function isNaN2(num) { - return num !== num; - } - function batch(arr, linecount, fillWith) { - var i; - var res = []; - var tmp = []; - for (i = 0;i < arr.length; i++) { - if (i % linecount === 0 && tmp.length) { - res.push(tmp); - tmp = []; - } - tmp.push(arr[i]); - } - if (tmp.length) { - if (fillWith) { - for (i = tmp.length;i < linecount; i++) { - tmp.push(fillWith); - } - } - res.push(tmp); - } - return res; - } - _exports.batch = batch; - function capitalize(str) { - str = normalize(str, ""); - var ret = str.toLowerCase(); - return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1)); - } - _exports.capitalize = capitalize; - function center(str, width) { - str = normalize(str, ""); - width = width || 80; - if (str.length >= width) { - return str; - } - var spaces = width - str.length; - var pre = lib.repeat(" ", spaces / 2 - spaces % 2); - var post = lib.repeat(" ", spaces / 2); - return r.copySafeness(str, pre + str + post); - } - _exports.center = center; - function default_(val, def, bool) { - if (bool) { - return val || def; - } else { - return val !== undefined ? val : def; - } - } - _exports["default"] = default_; - function dictsort(val, caseSensitive, by) { - if (!lib.isObject(val)) { - throw new lib.TemplateError("dictsort filter: val must be an object"); - } - var array3 = []; - for (var k in val) { - array3.push([k, val[k]]); - } - var si; - if (by === undefined || by === "key") { - si = 0; - } else if (by === "value") { - si = 1; - } else { - throw new lib.TemplateError("dictsort filter: You can only sort by either key or value"); - } - array3.sort(function(t1, t2) { - var a = t1[si]; - var b = t2[si]; - if (!caseSensitive) { - if (lib.isString(a)) { - a = a.toUpperCase(); - } - if (lib.isString(b)) { - b = b.toUpperCase(); - } - } - return a > b ? 1 : a === b ? 0 : -1; - }); - return array3; - } - _exports.dictsort = dictsort; - function dump(obj, spaces) { - return JSON.stringify(obj, null, spaces); - } - _exports.dump = dump; - function escape(str) { - if (str instanceof r.SafeString) { - return str; - } - str = str === null || str === undefined ? "" : str; - return r.markSafe(lib.escape(str.toString())); - } - _exports.escape = escape; - function safe(str) { - if (str instanceof r.SafeString) { - return str; - } - str = str === null || str === undefined ? "" : str; - return r.markSafe(str.toString()); - } - _exports.safe = safe; - function first(arr) { - return arr[0]; - } - _exports.first = first; - function forceescape(str) { - str = str === null || str === undefined ? "" : str; - return r.markSafe(lib.escape(str.toString())); - } - _exports.forceescape = forceescape; - function groupby(arr, attr) { - return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined); - } - _exports.groupby = groupby; - function indent(str, width, indentfirst) { - str = normalize(str, ""); - if (str === "") { - return ""; - } - width = width || 4; - var lines = str.split(` -`); - var sp = lib.repeat(" ", width); - var res = lines.map(function(l, i) { - return i === 0 && !indentfirst ? l : "" + sp + l; - }).join(` -`); - return r.copySafeness(str, res); - } - _exports.indent = indent; - function join6(arr, del, attr) { - del = del || ""; - if (attr) { - arr = lib.map(arr, function(v) { - return v[attr]; - }); - } - return arr.join(del); - } - _exports.join = join6; - function last(arr) { - return arr[arr.length - 1]; - } - _exports.last = last; - function lengthFilter(val) { - var value = normalize(val, ""); - if (value !== undefined) { - if (typeof Map === "function" && value instanceof Map || typeof Set === "function" && value instanceof Set) { - return value.size; - } - if (lib.isObject(value) && !(value instanceof r.SafeString)) { - return lib.keys(value).length; - } - return value.length; - } - return 0; - } - _exports.length = lengthFilter; - function list5(val) { - if (lib.isString(val)) { - return val.split(""); - } else if (lib.isObject(val)) { - return lib._entries(val || {}).map(function(_ref) { - var key = _ref[0], value = _ref[1]; - return { - key, - value - }; - }); - } else if (lib.isArray(val)) { - return val; - } else { - throw new lib.TemplateError("list filter: type not iterable"); - } - } - _exports.list = list5; - function lower(str) { - str = normalize(str, ""); - return str.toLowerCase(); - } - _exports.lower = lower; - function nl2br(str) { - if (str === null || str === undefined) { - return ""; - } - return r.copySafeness(str, str.replace(/\r\n|\n/g, `
-`)); - } - _exports.nl2br = nl2br; - function random(arr) { - return arr[Math.floor(Math.random() * arr.length)]; - } - _exports.random = random; - function getSelectOrReject(expectedTestResult) { - function filter(arr, testName, secondArg) { - if (testName === undefined) { - testName = "truthy"; - } - var context19 = this; - var test = context19.env.getTest(testName); - return lib.toArray(arr).filter(function examineTestResult(item) { - return test.call(context19, item, secondArg) === expectedTestResult; - }); - } - return filter; - } - _exports.reject = getSelectOrReject(false); - function rejectattr(arr, attr) { - return arr.filter(function(item) { - return !item[attr]; - }); - } - _exports.rejectattr = rejectattr; - _exports.select = getSelectOrReject(true); - function selectattr(arr, attr) { - return arr.filter(function(item) { - return !!item[attr]; - }); - } - _exports.selectattr = selectattr; - function replace(str, old, new_, maxCount) { - var originalStr = str; - if (old instanceof RegExp) { - return str.replace(old, new_); - } - if (typeof maxCount === "undefined") { - maxCount = -1; - } - var res = ""; - if (typeof old === "number") { - old = "" + old; - } else if (typeof old !== "string") { - return str; - } - if (typeof str === "number") { - str = "" + str; - } - if (typeof str !== "string" && !(str instanceof r.SafeString)) { - return str; - } - if (old === "") { - res = new_ + str.split("").join(new_) + new_; - return r.copySafeness(str, res); - } - var nextIndex = str.indexOf(old); - if (maxCount === 0 || nextIndex === -1) { - return str; - } - var pos = 0; - var count = 0; - while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) { - res += str.substring(pos, nextIndex) + new_; - pos = nextIndex + old.length; - count++; - nextIndex = str.indexOf(old, pos); - } - if (pos < str.length) { - res += str.substring(pos); - } - return r.copySafeness(originalStr, res); - } - _exports.replace = replace; - function reverse(val) { - var arr; - if (lib.isString(val)) { - arr = list5(val); - } else { - arr = lib.map(val, function(v) { - return v; - }); - } - arr.reverse(); - if (lib.isString(val)) { - return r.copySafeness(val, arr.join("")); - } - return arr; - } - _exports.reverse = reverse; - function round(val, precision, method) { - precision = precision || 0; - var factor = Math.pow(10, precision); - var rounder; - if (method === "ceil") { - rounder = Math.ceil; - } else if (method === "floor") { - rounder = Math.floor; - } else { - rounder = Math.round; - } - return rounder(val * factor) / factor; - } - _exports.round = round; - function slice(arr, slices, fillWith) { - var sliceLength = Math.floor(arr.length / slices); - var extra = arr.length % slices; - var res = []; - var offset = 0; - for (var i = 0;i < slices; i++) { - var start = offset + i * sliceLength; - if (i < extra) { - offset++; - } - var end = offset + (i + 1) * sliceLength; - var currSlice = arr.slice(start, end); - if (fillWith && i >= extra) { - currSlice.push(fillWith); - } - res.push(currSlice); - } - return res; - } - _exports.slice = slice; - function sum(arr, attr, start) { - if (start === undefined) { - start = 0; - } - if (attr) { - arr = lib.map(arr, function(v) { - return v[attr]; - }); - } - return start + arr.reduce(function(a, b) { - return a + b; - }, 0); - } - _exports.sum = sum; - _exports.sort = r.makeMacro(["value", "reverse", "case_sensitive", "attribute"], [], function sortFilter(arr, reversed, caseSens, attr) { - var _this = this; - var array3 = lib.map(arr, function(v) { - return v; - }); - var getAttribute = lib.getAttrGetter(attr); - array3.sort(function(a, b) { - var x = attr ? getAttribute(a) : a; - var y = attr ? getAttribute(b) : b; - if (_this.env.opts.throwOnUndefined && attr && (x === undefined || y === undefined)) { - throw new TypeError('sort: attribute "' + attr + '" resolved to undefined'); - } - if (!caseSens && lib.isString(x) && lib.isString(y)) { - x = x.toLowerCase(); - y = y.toLowerCase(); - } - if (x < y) { - return reversed ? 1 : -1; - } else if (x > y) { - return reversed ? -1 : 1; - } else { - return 0; - } - }); - return array3; - }); - function string5(obj) { - return r.copySafeness(obj, obj); - } - _exports.string = string5; - function striptags(input, preserveLinebreaks) { - input = normalize(input, ""); - var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>|/gi; - var trimmedInput = trim(input.replace(tags, "")); - var res = ""; - if (preserveLinebreaks) { - res = trimmedInput.replace(/^ +| +$/gm, "").replace(/ +/g, " ").replace(/(\r\n)/g, ` -`).replace(/\n\n\n+/g, ` - -`); - } else { - res = trimmedInput.replace(/\s+/gi, " "); - } - return r.copySafeness(input, res); - } - _exports.striptags = striptags; - function title(str) { - str = normalize(str, ""); - var words = str.split(" ").map(function(word) { - return capitalize(word); - }); - return r.copySafeness(str, words.join(" ")); - } - _exports.title = title; - function trim(str) { - return r.copySafeness(str, str.replace(/^\s*|\s*$/g, "")); - } - _exports.trim = trim; - function truncate(input, length, killwords, end) { - var orig = input; - input = normalize(input, ""); - length = length || 255; - if (input.length <= length) { - return input; - } - if (killwords) { - input = input.substring(0, length); - } else { - var idx = input.lastIndexOf(" ", length); - if (idx === -1) { - idx = length; - } - input = input.substring(0, idx); - } - input += end !== undefined && end !== null ? end : "..."; - return r.copySafeness(orig, input); - } - _exports.truncate = truncate; - function upper(str) { - str = normalize(str, ""); - return str.toUpperCase(); - } - _exports.upper = upper; - function urlencode(obj) { - var enc = encodeURIComponent; - if (lib.isString(obj)) { - return enc(obj); - } else { - var keyvals = lib.isArray(obj) ? obj : lib._entries(obj); - return keyvals.map(function(_ref2) { - var k = _ref2[0], v = _ref2[1]; - return enc(k) + "=" + enc(v); - }).join("&"); - } - } - _exports.urlencode = urlencode; - var puncRe = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/; - var emailRe = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i; - var httpHttpsRe = /^https?:\/\/.*$/; - var wwwRe = /^www\./; - var tldRe = /\.(?:org|net|com)(?:\:|\/|$)/; - function urlize(str, length, nofollow) { - if (isNaN2(length)) { - length = Infinity; - } - var noFollowAttr = nofollow === true ? ' rel="nofollow"' : ""; - var words = str.split(/(\s+)/).filter(function(word) { - return word && word.length; - }).map(function(word) { - var matches = word.match(puncRe); - var possibleUrl = matches ? matches[1] : word; - var shortUrl = possibleUrl.substr(0, length); - if (httpHttpsRe.test(possibleUrl)) { - return '" + shortUrl + ""; - } - if (wwwRe.test(possibleUrl)) { - return '" + shortUrl + ""; - } - if (emailRe.test(possibleUrl)) { - return '' + possibleUrl + ""; - } - if (tldRe.test(possibleUrl)) { - return '" + shortUrl + ""; - } - return word; - }); - return words.join(""); - } - _exports.urlize = urlize; - function wordcount(str) { - str = normalize(str, ""); - var words = str ? str.match(/\w+/g) : null; - return words ? words.length : null; - } - _exports.wordcount = wordcount; - function float(val, def) { - var res = parseFloat(val); - return isNaN2(res) ? def : res; - } - _exports.float = float; - var intFilter = r.makeMacro(["value", "default", "base"], [], function doInt(value, defaultValue, base2) { - if (base2 === undefined) { - base2 = 10; - } - var res = parseInt(value, base2); - return isNaN2(res) ? defaultValue : res; - }); - _exports.int = intFilter; - _exports.d = _exports.default; - _exports.e = _exports.escape; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/loader.js -var require_loader = __commonJS((exports, module) => { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var path = __require("path"); - var _require = require_object2(); - var EmitterObj = _require.EmitterObj; - module.exports = /* @__PURE__ */ function(_EmitterObj) { - _inheritsLoose(Loader, _EmitterObj); - function Loader() { - return _EmitterObj.apply(this, arguments) || this; - } - var _proto = Loader.prototype; - _proto.resolve = function resolve(from, to) { - return path.resolve(path.dirname(from), to); - }; - _proto.isRelative = function isRelative(filename) { - return filename.indexOf("./") === 0 || filename.indexOf("../") === 0; - }; - return Loader; - }(EmitterObj); -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/precompiled-loader.js -var require_precompiled_loader = __commonJS((exports, module) => { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var Loader = require_loader(); - var PrecompiledLoader = /* @__PURE__ */ function(_Loader) { - _inheritsLoose(PrecompiledLoader2, _Loader); - function PrecompiledLoader2(compiledTemplates) { - var _this; - _this = _Loader.call(this) || this; - _this.precompiled = compiledTemplates || {}; - return _this; - } - var _proto = PrecompiledLoader2.prototype; - _proto.getSource = function getSource(name) { - if (this.precompiled[name]) { - return { - src: { - type: "code", - obj: this.precompiled[name] - }, - path: name - }; - } - return null; - }; - return PrecompiledLoader2; - }(Loader); - module.exports = { - PrecompiledLoader - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/node-loaders.js -var require_node_loaders = __commonJS((exports, module) => { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var fs = __require("fs"); - var path = __require("path"); - var Loader = require_loader(); - var _require = require_precompiled_loader(); - var PrecompiledLoader = _require.PrecompiledLoader; - var chokidar; - var FileSystemLoader = /* @__PURE__ */ function(_Loader) { - _inheritsLoose(FileSystemLoader2, _Loader); - function FileSystemLoader2(searchPaths, opts) { - var _this; - _this = _Loader.call(this) || this; - if (typeof opts === "boolean") { - console.log("[nunjucks] Warning: you passed a boolean as the second " + "argument to FileSystemLoader, but it now takes an options " + "object. See http://mozilla.github.io/nunjucks/api.html#filesystemloader"); - } - opts = opts || {}; - _this.pathsToNames = {}; - _this.noCache = !!opts.noCache; - if (searchPaths) { - searchPaths = Array.isArray(searchPaths) ? searchPaths : [searchPaths]; - _this.searchPaths = searchPaths.map(path.normalize); - } else { - _this.searchPaths = ["."]; - } - if (opts.watch) { - try { - chokidar = (()=>{throw new Error("Cannot require module "+"chokidar");})(); - } catch (e) { - throw new Error("watch requires chokidar to be installed"); - } - var paths = _this.searchPaths.filter(fs.existsSync); - var watcher = chokidar.watch(paths); - watcher.on("all", function(event, fullname) { - fullname = path.resolve(fullname); - if (event === "change" && fullname in _this.pathsToNames) { - _this.emit("update", _this.pathsToNames[fullname], fullname); - } - }); - watcher.on("error", function(error48) { - console.log("Watcher error: " + error48); - }); - } - return _this; - } - var _proto = FileSystemLoader2.prototype; - _proto.getSource = function getSource(name) { - var fullpath = null; - var paths = this.searchPaths; - for (var i = 0;i < paths.length; i++) { - var basePath = path.resolve(paths[i]); - var p = path.resolve(paths[i], name); - if (p.indexOf(basePath) === 0 && fs.existsSync(p)) { - fullpath = p; - break; - } - } - if (!fullpath) { - return null; - } - this.pathsToNames[fullpath] = name; - var source = { - src: fs.readFileSync(fullpath, "utf-8"), - path: fullpath, - noCache: this.noCache - }; - this.emit("load", name, source); - return source; - }; - return FileSystemLoader2; - }(Loader); - var NodeResolveLoader = /* @__PURE__ */ function(_Loader2) { - _inheritsLoose(NodeResolveLoader2, _Loader2); - function NodeResolveLoader2(opts) { - var _this2; - _this2 = _Loader2.call(this) || this; - opts = opts || {}; - _this2.pathsToNames = {}; - _this2.noCache = !!opts.noCache; - if (opts.watch) { - try { - chokidar = (()=>{throw new Error("Cannot require module "+"chokidar");})(); - } catch (e) { - throw new Error("watch requires chokidar to be installed"); - } - _this2.watcher = chokidar.watch(); - _this2.watcher.on("change", function(fullname) { - _this2.emit("update", _this2.pathsToNames[fullname], fullname); - }); - _this2.watcher.on("error", function(error48) { - console.log("Watcher error: " + error48); - }); - _this2.on("load", function(name, source) { - _this2.watcher.add(source.path); - }); - } - return _this2; - } - var _proto2 = NodeResolveLoader2.prototype; - _proto2.getSource = function getSource(name) { - if (/^\.?\.?(\/|\\)/.test(name)) { - return null; - } - if (/^[A-Z]:/.test(name)) { - return null; - } - var fullpath; - try { - fullpath = __require.resolve(name); - } catch (e) { - return null; - } - this.pathsToNames[fullpath] = name; - var source = { - src: fs.readFileSync(fullpath, "utf-8"), - path: fullpath, - noCache: this.noCache - }; - this.emit("load", name, source); - return source; - }; - return NodeResolveLoader2; - }(Loader); - module.exports = { - FileSystemLoader, - PrecompiledLoader, - NodeResolveLoader - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/tests.js -var require_tests = __commonJS((exports) => { - var SafeString = require_runtime().SafeString; - function callable(value) { - return typeof value === "function"; - } - exports.callable = callable; - function defined(value) { - return value !== undefined; - } - exports.defined = defined; - function divisibleby(one, two) { - return one % two === 0; - } - exports.divisibleby = divisibleby; - function escaped(value) { - return value instanceof SafeString; - } - exports.escaped = escaped; - function equalto(one, two) { - return one === two; - } - exports.equalto = equalto; - exports.eq = exports.equalto; - exports.sameas = exports.equalto; - function even(value) { - return value % 2 === 0; - } - exports.even = even; - function falsy(value) { - return !value; - } - exports.falsy = falsy; - function ge(one, two) { - return one >= two; - } - exports.ge = ge; - function greaterthan(one, two) { - return one > two; - } - exports.greaterthan = greaterthan; - exports.gt = exports.greaterthan; - function le(one, two) { - return one <= two; - } - exports.le = le; - function lessthan(one, two) { - return one < two; - } - exports.lessthan = lessthan; - exports.lt = exports.lessthan; - function lower(value) { - return value.toLowerCase() === value; - } - exports.lower = lower; - function ne(one, two) { - return one !== two; - } - exports.ne = ne; - function nullTest(value) { - return value === null; - } - exports.null = nullTest; - function number5(value) { - return typeof value === "number"; - } - exports.number = number5; - function odd(value) { - return value % 2 === 1; - } - exports.odd = odd; - function string5(value) { - return typeof value === "string"; - } - exports.string = string5; - function truthy(value) { - return !!value; - } - exports.truthy = truthy; - function undefinedTest(value) { - return value === undefined; - } - exports.undefined = undefinedTest; - function upper(value) { - return value.toUpperCase() === value; - } - exports.upper = upper; - function iterable(value) { - if (typeof Symbol !== "undefined") { - return !!value[Symbol.iterator]; - } else { - return Array.isArray(value) || typeof value === "string"; - } - } - exports.iterable = iterable; - function mapping(value) { - var bool = value !== null && value !== undefined && typeof value === "object" && !Array.isArray(value); - if (Set) { - return bool && !(value instanceof Set); - } else { - return bool; - } - } - exports.mapping = mapping; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/globals.js -var require_globals2 = __commonJS((exports, module) => { - function _cycler(items) { - var index = -1; - return { - current: null, - reset: function reset() { - index = -1; - this.current = null; - }, - next: function next() { - index++; - if (index >= items.length) { - index = 0; - } - this.current = items[index]; - return this.current; - } - }; - } - function _joiner(sep) { - sep = sep || ","; - var first = true; - return function() { - var val = first ? "" : sep; - first = false; - return val; - }; - } - function globals() { - return { - range: function range(start, stop, step) { - if (typeof stop === "undefined") { - stop = start; - start = 0; - step = 1; - } else if (!step) { - step = 1; - } - var arr = []; - if (step > 0) { - for (var i = start;i < stop; i += step) { - arr.push(i); - } - } else { - for (var _i = start;_i > stop; _i += step) { - arr.push(_i); - } - } - return arr; - }, - cycler: function cycler() { - return _cycler(Array.prototype.slice.call(arguments)); - }, - joiner: function joiner(sep) { - return _joiner(sep); - } - }; - } - module.exports = globals; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/express-app.js -var require_express_app = __commonJS((exports, module) => { - var path = __require("path"); - module.exports = function express(env, app) { - function NunjucksView(name, opts) { - this.name = name; - this.path = name; - this.defaultEngine = opts.defaultEngine; - this.ext = path.extname(name); - if (!this.ext && !this.defaultEngine) { - throw new Error("No default engine was specified and no extension was provided."); - } - if (!this.ext) { - this.name += this.ext = (this.defaultEngine[0] !== "." ? "." : "") + this.defaultEngine; - } - } - NunjucksView.prototype.render = function render(opts, cb) { - env.render(this.name, opts, cb); - }; - app.set("view", NunjucksView); - app.set("nunjucksEnv", env); - return env; - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/environment.js -var require_environment5 = __commonJS((exports, module) => { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - var asap = require_asap(); - var _waterfall = require_a_sync_waterfall(); - var lib = require_lib(); - var compiler = require_compiler(); - var filters = require_filters(); - var _require = require_node_loaders(); - var FileSystemLoader = _require.FileSystemLoader; - var WebLoader = _require.WebLoader; - var PrecompiledLoader = _require.PrecompiledLoader; - var tests = require_tests(); - var globals = require_globals2(); - var _require2 = require_object2(); - var Obj = _require2.Obj; - var EmitterObj = _require2.EmitterObj; - var globalRuntime = require_runtime(); - var handleError = globalRuntime.handleError; - var Frame = globalRuntime.Frame; - var expressApp = require_express_app(); - function callbackAsap(cb, err, res) { - asap(function() { - cb(err, res); - }); - } - var noopTmplSrc = { - type: "code", - obj: { - root: function root(env, context19, frame, runtime, cb) { - try { - cb(null, ""); - } catch (e) { - cb(handleError(e, null, null)); - } - } - } - }; - var Environment = /* @__PURE__ */ function(_EmitterObj) { - _inheritsLoose(Environment2, _EmitterObj); - function Environment2() { - return _EmitterObj.apply(this, arguments) || this; - } - var _proto = Environment2.prototype; - _proto.init = function init(loaders, opts) { - var _this = this; - opts = this.opts = opts || {}; - this.opts.dev = !!opts.dev; - this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true; - this.opts.throwOnUndefined = !!opts.throwOnUndefined; - this.opts.trimBlocks = !!opts.trimBlocks; - this.opts.lstripBlocks = !!opts.lstripBlocks; - this.loaders = []; - if (!loaders) { - if (FileSystemLoader) { - this.loaders = [new FileSystemLoader("views")]; - } else if (WebLoader) { - this.loaders = [new WebLoader("/views")]; - } - } else { - this.loaders = lib.isArray(loaders) ? loaders : [loaders]; - } - if (typeof window !== "undefined" && window.nunjucksPrecompiled) { - this.loaders.unshift(new PrecompiledLoader(window.nunjucksPrecompiled)); - } - this._initLoaders(); - this.globals = globals(); - this.filters = {}; - this.tests = {}; - this.asyncFilters = []; - this.extensions = {}; - this.extensionsList = []; - lib._entries(filters).forEach(function(_ref) { - var name = _ref[0], filter = _ref[1]; - return _this.addFilter(name, filter); - }); - lib._entries(tests).forEach(function(_ref2) { - var name = _ref2[0], test = _ref2[1]; - return _this.addTest(name, test); - }); - }; - _proto._initLoaders = function _initLoaders() { - var _this2 = this; - this.loaders.forEach(function(loader) { - loader.cache = {}; - if (typeof loader.on === "function") { - loader.on("update", function(name, fullname) { - loader.cache[name] = null; - _this2.emit("update", name, fullname, loader); - }); - loader.on("load", function(name, source) { - _this2.emit("load", name, source, loader); - }); - } - }); - }; - _proto.invalidateCache = function invalidateCache() { - this.loaders.forEach(function(loader) { - loader.cache = {}; - }); - }; - _proto.addExtension = function addExtension(name, extension) { - extension.__name = name; - this.extensions[name] = extension; - this.extensionsList.push(extension); - return this; - }; - _proto.removeExtension = function removeExtension(name) { - var extension = this.getExtension(name); - if (!extension) { - return; - } - this.extensionsList = lib.without(this.extensionsList, extension); - delete this.extensions[name]; - }; - _proto.getExtension = function getExtension(name) { - return this.extensions[name]; - }; - _proto.hasExtension = function hasExtension(name) { - return !!this.extensions[name]; - }; - _proto.addGlobal = function addGlobal(name, value) { - this.globals[name] = value; - return this; - }; - _proto.getGlobal = function getGlobal(name) { - if (typeof this.globals[name] === "undefined") { - throw new Error("global not found: " + name); - } - return this.globals[name]; - }; - _proto.addFilter = function addFilter(name, func, async) { - var wrapped = func; - if (async) { - this.asyncFilters.push(name); - } - this.filters[name] = wrapped; - return this; - }; - _proto.getFilter = function getFilter(name) { - if (!this.filters[name]) { - throw new Error("filter not found: " + name); - } - return this.filters[name]; - }; - _proto.addTest = function addTest(name, func) { - this.tests[name] = func; - return this; - }; - _proto.getTest = function getTest(name) { - if (!this.tests[name]) { - throw new Error("test not found: " + name); - } - return this.tests[name]; - }; - _proto.resolveTemplate = function resolveTemplate(loader, parentName, filename) { - var isRelative = loader.isRelative && parentName ? loader.isRelative(filename) : false; - return isRelative && loader.resolve ? loader.resolve(parentName, filename) : filename; - }; - _proto.getTemplate = function getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) { - var _this3 = this; - var that = this; - var tmpl = null; - if (name && name.raw) { - name = name.raw; - } - if (lib.isFunction(parentName)) { - cb = parentName; - parentName = null; - eagerCompile = eagerCompile || false; - } - if (lib.isFunction(eagerCompile)) { - cb = eagerCompile; - eagerCompile = false; - } - if (name instanceof Template) { - tmpl = name; - } else if (typeof name !== "string") { - throw new Error("template names must be a string: " + name); - } else { - for (var i = 0;i < this.loaders.length; i++) { - var loader = this.loaders[i]; - tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)]; - if (tmpl) { - break; - } - } - } - if (tmpl) { - if (eagerCompile) { - tmpl.compile(); - } - if (cb) { - cb(null, tmpl); - return; - } else { - return tmpl; - } - } - var syncResult; - var createTemplate = function createTemplate(err, info) { - if (!info && !err && !ignoreMissing) { - err = new Error("template not found: " + name); - } - if (err) { - if (cb) { - cb(err); - return; - } else { - throw err; - } - } - var newTmpl; - if (!info) { - newTmpl = new Template(noopTmplSrc, _this3, "", eagerCompile); - } else { - newTmpl = new Template(info.src, _this3, info.path, eagerCompile); - if (!info.noCache) { - info.loader.cache[name] = newTmpl; - } - } - if (cb) { - cb(null, newTmpl); - } else { - syncResult = newTmpl; - } - }; - lib.asyncIter(this.loaders, function(loader2, i2, next, done) { - function handle(err, src) { - if (err) { - done(err); - } else if (src) { - src.loader = loader2; - done(null, src); - } else { - next(); - } - } - name = that.resolveTemplate(loader2, parentName, name); - if (loader2.async) { - loader2.getSource(name, handle); - } else { - handle(null, loader2.getSource(name)); - } - }, createTemplate); - return syncResult; - }; - _proto.express = function express(app) { - return expressApp(this, app); - }; - _proto.render = function render(name, ctx, cb) { - if (lib.isFunction(ctx)) { - cb = ctx; - ctx = null; - } - var syncResult = null; - this.getTemplate(name, function(err, tmpl) { - if (err && cb) { - callbackAsap(cb, err); - } else if (err) { - throw err; - } else { - syncResult = tmpl.render(ctx, cb); - } - }); - return syncResult; - }; - _proto.renderString = function renderString(src, ctx, opts, cb) { - if (lib.isFunction(opts)) { - cb = opts; - opts = {}; - } - opts = opts || {}; - var tmpl = new Template(src, this, opts.path); - return tmpl.render(ctx, cb); - }; - _proto.waterfall = function waterfall(tasks, callback, forceAsync) { - return _waterfall(tasks, callback, forceAsync); - }; - return Environment2; - }(EmitterObj); - var Context2 = /* @__PURE__ */ function(_Obj) { - _inheritsLoose(Context3, _Obj); - function Context3() { - return _Obj.apply(this, arguments) || this; - } - var _proto2 = Context3.prototype; - _proto2.init = function init(ctx, blocks, env) { - var _this4 = this; - this.env = env || new Environment; - this.ctx = lib.extend({}, ctx); - this.blocks = {}; - this.exported = []; - lib.keys(blocks).forEach(function(name) { - _this4.addBlock(name, blocks[name]); - }); - }; - _proto2.lookup = function lookup(name) { - if (name in this.env.globals && !(name in this.ctx)) { - return this.env.globals[name]; - } else { - return this.ctx[name]; - } - }; - _proto2.setVariable = function setVariable(name, val) { - this.ctx[name] = val; - }; - _proto2.getVariables = function getVariables() { - return this.ctx; - }; - _proto2.addBlock = function addBlock(name, block) { - this.blocks[name] = this.blocks[name] || []; - this.blocks[name].push(block); - return this; - }; - _proto2.getBlock = function getBlock(name) { - if (!this.blocks[name]) { - throw new Error('unknown block "' + name + '"'); - } - return this.blocks[name][0]; - }; - _proto2.getSuper = function getSuper(env, name, block, frame, runtime, cb) { - var idx = lib.indexOf(this.blocks[name] || [], block); - var blk = this.blocks[name][idx + 1]; - var context19 = this; - if (idx === -1 || !blk) { - throw new Error('no super block available for "' + name + '"'); - } - blk(env, context19, frame, runtime, cb); - }; - _proto2.addExport = function addExport(name) { - this.exported.push(name); - }; - _proto2.getExported = function getExported() { - var _this5 = this; - var exported = {}; - this.exported.forEach(function(name) { - exported[name] = _this5.ctx[name]; - }); - return exported; - }; - return Context3; - }(Obj); - var Template = /* @__PURE__ */ function(_Obj2) { - _inheritsLoose(Template2, _Obj2); - function Template2() { - return _Obj2.apply(this, arguments) || this; - } - var _proto3 = Template2.prototype; - _proto3.init = function init(src, env, path, eagerCompile) { - this.env = env || new Environment; - if (lib.isObject(src)) { - switch (src.type) { - case "code": - this.tmplProps = src.obj; - break; - case "string": - this.tmplStr = src.obj; - break; - default: - throw new Error("Unexpected template object type " + src.type + "; expected 'code', or 'string'"); - } - } else if (lib.isString(src)) { - this.tmplStr = src; - } else { - throw new Error("src must be a string or an object describing the source"); - } - this.path = path; - if (eagerCompile) { - try { - this._compile(); - } catch (err) { - throw lib._prettifyError(this.path, this.env.opts.dev, err); - } - } else { - this.compiled = false; - } - }; - _proto3.render = function render(ctx, parentFrame, cb) { - var _this6 = this; - if (typeof ctx === "function") { - cb = ctx; - ctx = {}; - } else if (typeof parentFrame === "function") { - cb = parentFrame; - parentFrame = null; - } - var forceAsync = !parentFrame; - try { - this.compile(); - } catch (e) { - var err = lib._prettifyError(this.path, this.env.opts.dev, e); - if (cb) { - return callbackAsap(cb, err); - } else { - throw err; - } - } - var context19 = new Context2(ctx || {}, this.blocks, this.env); - var frame = parentFrame ? parentFrame.push(true) : new Frame; - frame.topLevel = true; - var syncResult = null; - var didError = false; - this.rootRenderFunc(this.env, context19, frame, globalRuntime, function(err2, res) { - if (didError && cb && typeof res !== "undefined") { - return; - } - if (err2) { - err2 = lib._prettifyError(_this6.path, _this6.env.opts.dev, err2); - didError = true; - } - if (cb) { - if (forceAsync) { - callbackAsap(cb, err2, res); - } else { - cb(err2, res); - } - } else { - if (err2) { - throw err2; - } - syncResult = res; - } - }); - return syncResult; - }; - _proto3.getExported = function getExported(ctx, parentFrame, cb) { - if (typeof ctx === "function") { - cb = ctx; - ctx = {}; - } - if (typeof parentFrame === "function") { - cb = parentFrame; - parentFrame = null; - } - try { - this.compile(); - } catch (e) { - if (cb) { - return cb(e); - } else { - throw e; - } - } - var frame = parentFrame ? parentFrame.push() : new Frame; - frame.topLevel = true; - var context19 = new Context2(ctx || {}, this.blocks, this.env); - this.rootRenderFunc(this.env, context19, frame, globalRuntime, function(err) { - if (err) { - cb(err, null); - } else { - cb(null, context19.getExported()); - } - }); - }; - _proto3.compile = function compile() { - if (!this.compiled) { - this._compile(); - } - }; - _proto3._compile = function _compile() { - var props; - if (this.tmplProps) { - props = this.tmplProps; - } else { - var source = compiler.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts); - var func = new Function(source); - props = func(); - } - this.blocks = this._getBlocks(props); - this.rootRenderFunc = props.root; - this.compiled = true; - }; - _proto3._getBlocks = function _getBlocks(props) { - var blocks = {}; - lib.keys(props).forEach(function(k) { - if (k.slice(0, 2) === "b_") { - blocks[k.slice(2)] = props[k]; - } - }); - return blocks; - }; - return Template2; - }(Obj); - module.exports = { - Environment, - Template - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/precompile-global.js -var require_precompile_global = __commonJS((exports, module) => { - function precompileGlobal(templates, opts) { - var out = ""; - opts = opts || {}; - for (var i = 0;i < templates.length; i++) { - var name = JSON.stringify(templates[i].name); - var template = templates[i].template; - out += "(function() {" + "(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})" + "[" + name + `] = (function() { -` + template + ` -})(); -`; - if (opts.asFunction) { - out += "return function(ctx, cb) { return nunjucks.render(" + name + `, ctx, cb); } -`; - } - out += `})(); -`; - } - return out; - } - module.exports = precompileGlobal; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/precompile.js -var require_precompile = __commonJS((exports, module) => { - var fs = __require("fs"); - var path = __require("path"); - var _require = require_lib(); - var _prettifyError = _require._prettifyError; - var compiler = require_compiler(); - var _require2 = require_environment5(); - var Environment = _require2.Environment; - var precompileGlobal = require_precompile_global(); - function match2(filename, patterns) { - if (!Array.isArray(patterns)) { - return false; - } - return patterns.some(function(pattern) { - return filename.match(pattern); - }); - } - function precompileString(str, opts) { - opts = opts || {}; - opts.isString = true; - var env = opts.env || new Environment([]); - var wrapper = opts.wrapper || precompileGlobal; - if (!opts.name) { - throw new Error('the "name" option is required when compiling a string'); - } - return wrapper([_precompile(str, opts.name, env)], opts); - } - function precompile(input, opts) { - opts = opts || {}; - var env = opts.env || new Environment([]); - var wrapper = opts.wrapper || precompileGlobal; - if (opts.isString) { - return precompileString(input, opts); - } - var pathStats = fs.existsSync(input) && fs.statSync(input); - var precompiled = []; - var templates = []; - function addTemplates(dir) { - fs.readdirSync(dir).forEach(function(file2) { - var filepath = path.join(dir, file2); - var subpath = filepath.substr(path.join(input, "/").length); - var stat = fs.statSync(filepath); - if (stat && stat.isDirectory()) { - subpath += "/"; - if (!match2(subpath, opts.exclude)) { - addTemplates(filepath); - } - } else if (match2(subpath, opts.include)) { - templates.push(filepath); - } - }); - } - if (pathStats.isFile()) { - precompiled.push(_precompile(fs.readFileSync(input, "utf-8"), opts.name || input, env)); - } else if (pathStats.isDirectory()) { - addTemplates(input); - for (var i = 0;i < templates.length; i++) { - var name = templates[i].replace(path.join(input, "/"), ""); - try { - precompiled.push(_precompile(fs.readFileSync(templates[i], "utf-8"), name, env)); - } catch (e) { - if (opts.force) { - console.error(e); - } else { - throw e; - } - } - } - } - return wrapper(precompiled, opts); - } - function _precompile(str, name, env) { - env = env || new Environment([]); - var asyncFilters = env.asyncFilters; - var extensions = env.extensionsList; - var template; - name = name.replace(/\\/g, "/"); - try { - template = compiler.compile(str, asyncFilters, extensions, name, env.opts); - } catch (err) { - throw _prettifyError(name, false, err); - } - return { - name, - template - }; - } - module.exports = { - precompile, - precompileString - }; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/src/jinja-compat.js -var require_jinja_compat = __commonJS((exports, module) => { - function installCompat() { - var runtime = this.runtime; - var lib = this.lib; - var Compiler = this.compiler.Compiler; - var Parser = this.parser.Parser; - var nodes = this.nodes; - var lexer = this.lexer; - var orig_contextOrFrameLookup = runtime.contextOrFrameLookup; - var orig_memberLookup = runtime.memberLookup; - var orig_Compiler_assertType; - var orig_Parser_parseAggregate; - if (Compiler) { - orig_Compiler_assertType = Compiler.prototype.assertType; - } - if (Parser) { - orig_Parser_parseAggregate = Parser.prototype.parseAggregate; - } - function uninstall() { - runtime.contextOrFrameLookup = orig_contextOrFrameLookup; - runtime.memberLookup = orig_memberLookup; - if (Compiler) { - Compiler.prototype.assertType = orig_Compiler_assertType; - } - if (Parser) { - Parser.prototype.parseAggregate = orig_Parser_parseAggregate; - } - } - runtime.contextOrFrameLookup = function contextOrFrameLookup(context19, frame, key) { - var val = orig_contextOrFrameLookup.apply(this, arguments); - if (val !== undefined) { - return val; - } - switch (key) { - case "True": - return true; - case "False": - return false; - case "None": - return null; - default: - return; - } - }; - function getTokensState(tokens) { - return { - index: tokens.index, - lineno: tokens.lineno, - colno: tokens.colno - }; - } - if (process.env.BUILD_TYPE !== "SLIM" && nodes && Compiler && Parser) { - var Slice = nodes.Node.extend("Slice", { - fields: ["start", "stop", "step"], - init: function init(lineno, colno, start, stop, step) { - start = start || new nodes.Literal(lineno, colno, null); - stop = stop || new nodes.Literal(lineno, colno, null); - step = step || new nodes.Literal(lineno, colno, 1); - this.parent(lineno, colno, start, stop, step); - } - }); - Compiler.prototype.assertType = function assertType(node) { - if (node instanceof Slice) { - return; - } - orig_Compiler_assertType.apply(this, arguments); - }; - Compiler.prototype.compileSlice = function compileSlice(node, frame) { - this._emit("("); - this._compileExpression(node.start, frame); - this._emit("),("); - this._compileExpression(node.stop, frame); - this._emit("),("); - this._compileExpression(node.step, frame); - this._emit(")"); - }; - Parser.prototype.parseAggregate = function parseAggregate() { - var _this = this; - var origState = getTokensState(this.tokens); - origState.colno--; - origState.index--; - try { - return orig_Parser_parseAggregate.apply(this); - } catch (e) { - var errState = getTokensState(this.tokens); - var rethrow = function rethrow() { - lib._assign(_this.tokens, errState); - return e; - }; - lib._assign(this.tokens, origState); - this.peeked = false; - var tok = this.peekToken(); - if (tok.type !== lexer.TOKEN_LEFT_BRACKET) { - throw rethrow(); - } else { - this.nextToken(); - } - var node = new Slice(tok.lineno, tok.colno); - var isSlice = false; - for (var i = 0;i <= node.fields.length; i++) { - if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) { - break; - } - if (i === node.fields.length) { - if (isSlice) { - this.fail("parseSlice: too many slice components", tok.lineno, tok.colno); - } else { - break; - } - } - if (this.skip(lexer.TOKEN_COLON)) { - isSlice = true; - } else { - var field = node.fields[i]; - node[field] = this.parseExpression(); - isSlice = this.skip(lexer.TOKEN_COLON) || isSlice; - } - } - if (!isSlice) { - throw rethrow(); - } - return new nodes.Array(tok.lineno, tok.colno, [node]); - } - }; - } - function sliceLookup(obj, start, stop, step) { - obj = obj || []; - if (start === null) { - start = step < 0 ? obj.length - 1 : 0; - } - if (stop === null) { - stop = step < 0 ? -1 : obj.length; - } else if (stop < 0) { - stop += obj.length; - } - if (start < 0) { - start += obj.length; - } - var results = []; - for (var i = start;; i += step) { - if (i < 0 || i > obj.length) { - break; - } - if (step > 0 && i >= stop) { - break; - } - if (step < 0 && i <= stop) { - break; - } - results.push(runtime.memberLookup(obj, i)); - } - return results; - } - function hasOwnProp(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); - } - var ARRAY_MEMBERS = { - pop: function pop(index) { - if (index === undefined) { - return this.pop(); - } - if (index >= this.length || index < 0) { - throw new Error("KeyError"); - } - return this.splice(index, 1); - }, - append: function append(element) { - return this.push(element); - }, - remove: function remove(element) { - for (var i = 0;i < this.length; i++) { - if (this[i] === element) { - return this.splice(i, 1); - } - } - throw new Error("ValueError"); - }, - count: function count(element) { - var count = 0; - for (var i = 0;i < this.length; i++) { - if (this[i] === element) { - count++; - } - } - return count; - }, - index: function index(element) { - var i; - if ((i = this.indexOf(element)) === -1) { - throw new Error("ValueError"); - } - return i; - }, - find: function find(element) { - return this.indexOf(element); - }, - insert: function insert(index, elem) { - return this.splice(index, 0, elem); - } - }; - var OBJECT_MEMBERS = { - items: function items() { - return lib._entries(this); - }, - values: function values() { - return lib._values(this); - }, - keys: function keys() { - return lib.keys(this); - }, - get: function get(key, def) { - var output = this[key]; - if (output === undefined) { - output = def; - } - return output; - }, - has_key: function has_key(key) { - return hasOwnProp(this, key); - }, - pop: function pop(key, def) { - var output = this[key]; - if (output === undefined && def !== undefined) { - output = def; - } else if (output === undefined) { - throw new Error("KeyError"); - } else { - delete this[key]; - } - return output; - }, - popitem: function popitem() { - var keys = lib.keys(this); - if (!keys.length) { - throw new Error("KeyError"); - } - var k = keys[0]; - var val = this[k]; - delete this[k]; - return [k, val]; - }, - setdefault: function setdefault(key, def) { - if (def === undefined) { - def = null; - } - if (!(key in this)) { - this[key] = def; - } - return this[key]; - }, - update: function update(kwargs) { - lib._assign(this, kwargs); - return null; - } - }; - OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items; - OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values; - OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys; - runtime.memberLookup = function memberLookup(obj, val, autoescape) { - if (arguments.length === 4) { - return sliceLookup.apply(this, arguments); - } - obj = obj || {}; - if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) { - return ARRAY_MEMBERS[val].bind(obj); - } - if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) { - return OBJECT_MEMBERS[val].bind(obj); - } - return orig_memberLookup.apply(this, arguments); - }; - return uninstall; - } - module.exports = installCompat; -}); - -// ../../../../node_modules/.bun/nunjucks@3.2.4/node_modules/nunjucks/index.js -var require_nunjucks = __commonJS((exports, module) => { - var lib = require_lib(); - var _require = require_environment5(); - var Environment = _require.Environment; - var Template = _require.Template; - var Loader = require_loader(); - var loaders = require_node_loaders(); - var precompile = require_precompile(); - var compiler = require_compiler(); - var parser = require_parser(); - var lexer = require_lexer(); - var runtime = require_runtime(); - var nodes = require_nodes(); - var installJinjaCompat = require_jinja_compat(); - var e; - function configure(templatesPath, opts) { - opts = opts || {}; - if (lib.isObject(templatesPath)) { - opts = templatesPath; - templatesPath = null; - } - var TemplateLoader; - if (loaders.FileSystemLoader) { - TemplateLoader = new loaders.FileSystemLoader(templatesPath, { - watch: opts.watch, - noCache: opts.noCache - }); - } else if (loaders.WebLoader) { - TemplateLoader = new loaders.WebLoader(templatesPath, { - useCache: opts.web && opts.web.useCache, - async: opts.web && opts.web.async - }); - } - e = new Environment(TemplateLoader, opts); - if (opts && opts.express) { - e.express(opts.express); - } - return e; - } - module.exports = { - Environment, - Template, - Loader, - FileSystemLoader: loaders.FileSystemLoader, - NodeResolveLoader: loaders.NodeResolveLoader, - PrecompiledLoader: loaders.PrecompiledLoader, - WebLoader: loaders.WebLoader, - compiler, - parser, - lexer, - runtime, - lib, - nodes, - installJinjaCompat, - configure, - reset: function reset() { - e = undefined; - }, - compile: function compile(src, env, path, eagerCompile) { - if (!e) { - configure(); - } - return new Template(src, env, path, eagerCompile); - }, - render: function render(name, ctx, cb) { - if (!e) { - configure(); - } - return e.render(name, ctx, cb); - }, - renderString: function renderString(src, ctx, cb) { - if (!e) { - configure(); - } - return e.renderString(src, ctx, cb); - }, - precompile: precompile ? precompile.precompile : undefined, - precompileString: precompile ? precompile.precompileString : undefined - }; -}); - -// ../../../../node_modules/.bun/@traceloop+node-server-sdk@0.21.1/node_modules/@traceloop/node-server-sdk/dist/index.mjs -class BaseAnnotation { - constructor(client, flow) { - this.client = client; - this.flow = flow; - } - async create(options) { - return await this.client.post(`/v2/annotation-tasks/${options.annotationTask}/annotations`, { - entity_instance_id: options.entity.id, - tags: options.tags, - source: "sdk", - flow: this.flow, - actor: { - type: "service", - id: this.client.appName - } - }); - } -} -function snakeToCamel(str) { - return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()); -} -function transformResponseKeys(obj) { - if (obj === null || obj === undefined) { - return obj; - } - if (Array.isArray(obj)) { - return obj.map(transformResponseKeys); - } - if (typeof obj === "object" && obj.constructor === Object) { - const transformed = {}; - for (const [key, value] of Object.entries(obj)) { - const camelKey = snakeToCamel(key); - transformed[camelKey] = transformResponseKeys(value); - } - return transformed; - } - return obj; -} -function transformApiResponse(data) { - return transformResponseKeys(data); -} - -class BaseDatasetEntity { - constructor(client) { - this.client = client; - } - async handleResponse(response) { - if (!response.ok) { - let errorMessage = `HTTP ${response.status}: ${response.statusText}`; - try { - const errorData = await response.json(); - if (errorData.error) { - errorMessage = errorData.error; - } - } catch (_a2) {} - throw new Error(errorMessage); - } - const contentType = response.headers.get("content-type"); - if (contentType && contentType.includes("application/json")) { - const rawData = await response.json(); - return transformApiResponse(rawData); - } - const textContent = await response.text(); - return { - contentType: contentType || "text/plain", - body: textContent - }; - } - validateDatasetId(id) { - if (!id || typeof id !== "string" || id.trim().length === 0) { - throw new Error("Dataset ID is required and must be a non-empty string"); - } - } - validateDatasetSlug(slug) { - if (!slug || typeof slug !== "string" || slug.trim().length === 0) { - throw new Error("Dataset slug is required and must be a non-empty string"); - } - } - validateDatasetName(name) { - if (!name || typeof name !== "string" || name.trim().length === 0) { - throw new Error("Dataset name is required and must be a non-empty string"); - } - } -} - -class Experiment { - constructor(client) { - this.client = client; - this.evaluator = new Evaluator(client); - this.datasets = new Datasets(client); - } - generateExperimentSlug() { - const timestamp = Date.now().toString(36); - const random = Math.random().toString(36).substring(2, 7); - return `exp-${timestamp}${random}`.substring(0, 15); - } - async handleResponse(response) { - if (!response.ok) { - let errorMessage = `HTTP ${response.status}: ${response.statusText}`; - try { - const errorData = await response.json(); - if (errorData.error) { - errorMessage = errorData.error; - } - } catch (_a2) {} - throw new Error(errorMessage); - } - const contentType = (response.headers.get("content-type") || "").toLowerCase(); - if (contentType.includes("text/csv") || contentType.includes("application/x-ndjson")) { - return await response.text(); - } else { - const rawData = await response.json(); - return transformApiResponse(rawData); - } - } - async run(task, options = {}) { - const { datasetSlug, datasetVersion, evaluators = [], waitForResults = true } = options; - let { experimentSlug } = options; - if (!experimentSlug) { - experimentSlug = this.client.experimentSlug || this.generateExperimentSlug(); - } - this.validateRunOptions(task, options); - try { - const evaluatorSlugs = evaluators.map((evaluator) => typeof evaluator === "string" ? evaluator : evaluator.name); - const experimentResponse = await this.initializeExperiment({ - slug: experimentSlug, - datasetSlug, - datasetVersion, - evaluatorSlugs - }); - const rows = await this.getDatasetRows(datasetSlug, datasetVersion); - const taskResults = []; - const taskErrors = []; - const evaluationResults = []; - for (const row of rows) { - const taskOutput = await task(row); - const taskResponse = { - input: row, - output: taskOutput, - metadata: { - rowId: row.id, - timestamp: Date.now() - }, - timestamp: Date.now() - }; - taskResults.push(taskResponse); - const response = await this.createTask(experimentSlug, experimentResponse.run.id, row, taskOutput); - const taskId = response.id; - if (evaluators.length > 0) { - for (const evaluator of evaluators) { - const singleEvaluationResult = await this.evaluator.runExperimentEvaluator({ - experimentId: experimentResponse.experiment.id, - experimentRunId: experimentResponse.run.id, - taskId, - evaluator, - taskResult: taskOutput, - waitForResults, - timeout: 120000 - }); - evaluationResults.push(...singleEvaluationResult); - } - } - } - const evalResults = evaluationResults.map((evaluation) => evaluation.result); - return { - taskResults, - errors: taskErrors, - experimentId: experimentResponse.experiment.id, - runId: experimentResponse.run.id, - evaluations: evalResults - }; - } catch (error48) { - throw new Error(`Experiment execution failed: ${error48 instanceof Error ? error48.message : "Unknown error"}`); - } - } - async createTask(experimentSlug, experimentRunId, taskInput, taskOutput) { - const body = { - input: taskInput, - output: taskOutput - }; - const response = await this.client.post(`/v2/experiments/${experimentSlug}/runs/${experimentRunId}/task`, body); - if (!response.ok) { - throw new Error(`Failed to create task for experiment '${experimentSlug}'`); - } - const data = await this.handleResponse(response); - return { - id: data.id - }; - } - async initializeExperiment(request) { - if (request.aux) { - request.experimentRunMetadata = Object.assign(Object.assign({}, request.experimentRunMetadata), { aux: request.aux }); - } - if (request.relatedRef) { - request.experimentRunMetadata = Object.assign(Object.assign({}, request.experimentRunMetadata), { related_ref: request.relatedRef }); - } - const payload = { - slug: request.slug, - dataset_slug: request.datasetSlug, - dataset_version: request.datasetVersion, - evaluator_slugs: request.evaluatorSlugs, - experiment_metadata: request.experimentMetadata, - experiment_run_metadata: request.experimentRunMetadata - }; - const response = await this.client.put("/v2/experiments/initialize", payload); - const data = await this.handleResponse(response); - return data; - } - parseJsonlToRows(jsonlData) { - const rows = []; - const lines = jsonlData.trim().split(` -`); - for (let i = 1;i < lines.length; i++) { - const line = lines[i].trim(); - if (line) { - try { - const rowData = JSON.parse(line); - rows.push(rowData); - } catch (_a2) { - continue; - } - } - } - return rows; - } - async getDatasetRows(datasetSlug, datasetVersion) { - if (!datasetSlug) { - throw new Error("Dataset slug is required for experiment execution"); - } - const dataset = await this.datasets.getVersionAsJsonl(datasetSlug, datasetVersion || ""); - const rows = this.parseJsonlToRows(dataset); - return rows; - } - validateRunOptions(task, options) { - if (!task || typeof task !== "function") { - throw new Error("Task function is required and must be a function"); - } - if (options.evaluators) { - options.evaluators.forEach((evaluator, index) => { - if (typeof evaluator === "string") { - if (!evaluator.trim()) { - throw new Error(`Evaluator at index ${index} cannot be an empty string`); - } - } else { - if (!evaluator || typeof evaluator !== "object") { - throw new Error(`Evaluator at index ${index} must be a string or object with name and version`); - } - if (!evaluator.name || typeof evaluator.name !== "string" || !evaluator.name.trim()) { - throw new Error(`Evaluator at index ${index} must have a valid non-empty name`); - } - if (!evaluator.version || typeof evaluator.version !== "string" || !evaluator.version.trim()) { - throw new Error(`Evaluator at index ${index} must have a valid non-empty version`); - } - } - }); - } - } -} - -class TraceloopClient { - constructor(options) { - this.version = version15; - this.apiKey = options.apiKey; - this.appName = options.appName; - this.baseUrl = options.baseUrl || process.env.TRACELOOP_BASE_URL || "https://api.traceloop.com"; - this.experimentSlug = options.experimentSlug; - this.userFeedback = new UserFeedback(this); - this.datasets = new Datasets(this); - this.experiment = new Experiment(this); - this.evaluator = new Evaluator(this); - } - async post(path, body) { - return await fetch(`${this.baseUrl}${path}`, { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${this.apiKey}`, - "X-Traceloop-SDK-Version": this.version - }, - body: JSON.stringify(body) - }); - } - async get(path) { - return await fetch(`${this.baseUrl}${path}`, { - method: "GET", - headers: { - Authorization: `Bearer ${this.apiKey}`, - "X-Traceloop-SDK-Version": this.version - } - }); - } - async put(path, body) { - return await fetch(`${this.baseUrl}${path}`, { - method: "PUT", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${this.apiKey}`, - "X-Traceloop-SDK-Version": this.version - }, - body: JSON.stringify(body) - }); - } - async delete(path) { - return await fetch(`${this.baseUrl}${path}`, { - method: "DELETE", - headers: { - Authorization: `Bearer ${this.apiKey}`, - "X-Traceloop-SDK-Version": this.version - } - }); - } -} -function parseKeyPairsIntoRecord(keyPairs) { - const result = {}; - if (!keyPairs) - return result; - keyPairs.split(",").forEach((pair) => { - const [key, value] = pair.split("="); - if (key && value) { - result[key.trim()] = value.trim(); - } - }); - return result; -} - -class ImageUploader { - constructor(baseUrl, apiKey) { - this.baseUrl = baseUrl; - this.apiKey = apiKey; - } - async uploadBase64Image(traceId, spanId, imageName, base64ImageData) { - try { - const imageUrl = await this.getImageUrl(traceId, spanId, imageName); - await this.uploadImageData(imageUrl, base64ImageData); - return imageUrl; - } catch (error48) { - console.error("Failed to upload image:", error48); - throw error48; - } - } - async getImageUrl(traceId, spanId, imageName) { - const response = await fetch(`${this.baseUrl}/v2/traces/${traceId}/spans/${spanId}/images`, { - method: "POST", - headers: { - Authorization: `Bearer ${this.apiKey}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ - image_name: imageName - }) - }); - if (!response.ok) { - throw new Error(`Failed to get image URL: ${response.status} ${response.statusText}`); - } - const result = await response.json(); - return result.url; - } - async uploadImageData(url2, base64ImageData) { - const payload = { - image_data: base64ImageData - }; - const response = await fetch(url2, { - method: "POST", - headers: { - Authorization: `Bearer ${this.apiKey}`, - "Content-Type": "application/json" - }, - body: JSON.stringify(payload) - }); - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to upload image data: ${response.status} ${response.statusText}. ${errorText}`); - } - } -} -function createResource(attributes) { - const resourcesModule = require_src56(); - if (resourcesModule.resourceFromAttributes) { - return resourcesModule.resourceFromAttributes(attributes); - } - return new resourcesModule.Resource(attributes); -} -var Papa, import_sdk_node, import_api52, import_exporter_trace_otlp_proto, import_opentelemetry_cloud_trace_exporter, import_semantic_conventions, import_ai_semantic_conventions13, import_sdk_trace_node, import_cross_fetch, import_fetch_retry, import_nunjucks, SEVERITY, TraceloopError, InitializationError, version15 = "0.21.1", UserFeedback, Row, Column, Dataset, Datasets, Evaluator, validateConfiguration = (options) => { - const { apiKey, traceloopSyncEnabled, traceloopSyncMaxRetries, traceloopSyncPollingInterval, traceloopSyncDevPollingInterval } = options; - if (apiKey && typeof apiKey !== "string") { - throw new InitializationError('"apiKey" must be a string'); - } - if (traceloopSyncEnabled) { - if (typeof traceloopSyncMaxRetries !== "number" || traceloopSyncMaxRetries <= 0) { - throw new InitializationError('"traceloopSyncMaxRetries" must be an integer greater than 0.'); - } - if (typeof traceloopSyncPollingInterval !== "number" || traceloopSyncPollingInterval <= 0) { - throw new InitializationError('"traceloopSyncPollingInterval" must be an integer greater than 0.'); - } - if (typeof traceloopSyncDevPollingInterval !== "number" || traceloopSyncDevPollingInterval <= 0) { - throw new InitializationError('"traceloopSyncDevPollingInterval" must be an integer greater than 0.'); - } - } -}, WORKFLOW_NAME_KEY, ENTITY_NAME_KEY, AGENT_NAME_KEY, ASSOCATION_PROPERTIES_KEY, AI_GENERATE_TEXT = "ai.generateText", AI_GENERATE_TEXT_DO_GENERATE = "ai.generateText.doGenerate", AI_GENERATE_OBJECT_DO_GENERATE = "ai.generateObject.doGenerate", AI_STREAM_TEXT_DO_STREAM = "ai.streamText.doStream", HANDLED_SPAN_NAMES, TOOL_SPAN_NAME = "ai.toolCall", AI_RESPONSE_TEXT = "ai.response.text", AI_RESPONSE_OBJECT = "ai.response.object", AI_RESPONSE_TOOL_CALLS = "ai.response.toolCalls", AI_PROMPT_MESSAGES = "ai.prompt.messages", AI_PROMPT = "ai.prompt", AI_USAGE_PROMPT_TOKENS = "ai.usage.promptTokens", AI_USAGE_COMPLETION_TOKENS = "ai.usage.completionTokens", AI_MODEL_PROVIDER = "ai.model.provider", AI_PROMPT_TOOLS = "ai.prompt.tools", AI_TELEMETRY_METADATA_PREFIX = "ai.telemetry.metadata.", TYPE_TEXT = "text", TYPE_TOOL_CALL = "tool_call", ROLE_ASSISTANT = "assistant", ROLE_USER = "user", VENDOR_MAPPING, transformResponseText = (attributes) => { - if (AI_RESPONSE_TEXT in attributes) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.content`] = attributes[AI_RESPONSE_TEXT]; - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.role`] = ROLE_ASSISTANT; - const outputMessage = { - role: ROLE_ASSISTANT, - parts: [ - { - type: TYPE_TEXT, - content: attributes[AI_RESPONSE_TEXT] - } - ] - }; - attributes[import_ai_semantic_conventions13.SpanAttributes.LLM_OUTPUT_MESSAGES] = JSON.stringify([ - outputMessage - ]); - delete attributes[AI_RESPONSE_TEXT]; - } -}, transformResponseObject = (attributes) => { - if (AI_RESPONSE_OBJECT in attributes) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.content`] = attributes[AI_RESPONSE_OBJECT]; - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.role`] = ROLE_ASSISTANT; - const outputMessage = { - role: ROLE_ASSISTANT, - parts: [ - { - type: TYPE_TEXT, - content: attributes[AI_RESPONSE_OBJECT] - } - ] - }; - attributes[import_ai_semantic_conventions13.SpanAttributes.LLM_OUTPUT_MESSAGES] = JSON.stringify([ - outputMessage - ]); - delete attributes[AI_RESPONSE_OBJECT]; - } -}, transformResponseToolCalls = (attributes) => { - if (AI_RESPONSE_TOOL_CALLS in attributes) { - try { - const toolCalls = JSON.parse(attributes[AI_RESPONSE_TOOL_CALLS]); - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.role`] = ROLE_ASSISTANT; - const toolCallParts = []; - toolCalls.forEach((toolCall, index) => { - if (toolCall.toolCallType === "function") { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.tool_calls.${index}.name`] = toolCall.toolName; - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_COMPLETIONS}.0.tool_calls.${index}.arguments`] = toolCall.args; - toolCallParts.push({ - type: TYPE_TOOL_CALL, - tool_call: { - name: toolCall.toolName, - arguments: toolCall.args - } - }); - } - }); - if (toolCallParts.length > 0) { - const outputMessage = { - role: ROLE_ASSISTANT, - parts: toolCallParts - }; - attributes[import_ai_semantic_conventions13.SpanAttributes.LLM_OUTPUT_MESSAGES] = JSON.stringify([ - outputMessage - ]); - } - delete attributes[AI_RESPONSE_TOOL_CALLS]; - } catch (_a2) {} - } -}, processMessageContent = (content) => { - if (Array.isArray(content)) { - const textItems = content.filter((item) => item && typeof item === "object" && item.type === TYPE_TEXT && item.text); - if (textItems.length > 0) { - const joinedText = textItems.map((item) => item.text).join(" "); - return joinedText; - } else { - return JSON.stringify(content); - } - } - if (content && typeof content === "object") { - if (content.type === TYPE_TEXT && content.text) { - return content.text; - } - return JSON.stringify(content); - } - if (typeof content === "string") { - try { - const parsed = JSON.parse(content); - if (Array.isArray(parsed)) { - const allTextItems = parsed.every((item) => item && typeof item === "object" && item.type === TYPE_TEXT && item.text); - if (allTextItems && parsed.length > 0) { - return parsed.map((item) => item.text).join(" "); - } else { - return content; - } - } - } catch (_a2) {} - return content; - } - return String(content); -}, transformTools = (attributes) => { - if (AI_PROMPT_TOOLS in attributes) { - try { - const tools = attributes[AI_PROMPT_TOOLS]; - if (Array.isArray(tools)) { - tools.forEach((toolItem, index) => { - let tool = toolItem; - if (typeof toolItem === "string") { - try { - tool = JSON.parse(toolItem); - } catch (_a2) { - return; - } - } - if (tool && typeof tool === "object") { - if (tool.name) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.name`] = tool.name; - } - if (tool.description) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.description`] = tool.description; - } - if (tool.parameters) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_REQUEST_FUNCTIONS}.${index}.parameters`] = typeof tool.parameters === "string" ? tool.parameters : JSON.stringify(tool.parameters); - } - } - }); - } - delete attributes[AI_PROMPT_TOOLS]; - } catch (_a2) {} - } -}, transformPrompts = (attributes) => { - if (AI_PROMPT_MESSAGES in attributes) { - try { - let jsonString = attributes[AI_PROMPT_MESSAGES]; - try { - JSON.parse(jsonString); - } catch (_a2) { - jsonString = jsonString.replace(/\\'/g, "'"); - jsonString = jsonString.replace(/\\\\\\\\/g, "\\\\"); - } - const messages = JSON.parse(jsonString); - const inputMessages = []; - messages.forEach((msg, index) => { - const processedContent = processMessageContent(msg.content); - const contentKey = `${import_ai_semantic_conventions13.SpanAttributes.LLM_PROMPTS}.${index}.content`; - attributes[contentKey] = processedContent; - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_PROMPTS}.${index}.role`] = msg.role; - inputMessages.push({ - role: msg.role, - parts: [ - { - type: TYPE_TEXT, - content: processedContent - } - ] - }); - }); - if (inputMessages.length > 0) { - attributes[import_ai_semantic_conventions13.SpanAttributes.LLM_INPUT_MESSAGES] = JSON.stringify(inputMessages); - } - delete attributes[AI_PROMPT_MESSAGES]; - } catch (_b) {} - } - if (AI_PROMPT in attributes) { - try { - const promptData = JSON.parse(attributes[AI_PROMPT]); - if (promptData.prompt && typeof promptData.prompt === "string") { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_PROMPTS}.0.content`] = promptData.prompt; - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_PROMPTS}.0.role`] = ROLE_USER; - const inputMessage = { - role: ROLE_USER, - parts: [ - { - type: TYPE_TEXT, - content: promptData.prompt - } - ] - }; - attributes[import_ai_semantic_conventions13.SpanAttributes.LLM_INPUT_MESSAGES] = JSON.stringify([ - inputMessage - ]); - delete attributes[AI_PROMPT]; - } - } catch (_c) {} - } -}, transformPromptTokens = (attributes) => { - if (AI_USAGE_PROMPT_TOKENS in attributes) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_USAGE_PROMPT_TOKENS}`] = attributes[AI_USAGE_PROMPT_TOKENS]; - delete attributes[AI_USAGE_PROMPT_TOKENS]; - } -}, transformCompletionTokens = (attributes) => { - if (AI_USAGE_COMPLETION_TOKENS in attributes) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS}`] = attributes[AI_USAGE_COMPLETION_TOKENS]; - delete attributes[AI_USAGE_COMPLETION_TOKENS]; - } -}, calculateTotalTokens = (attributes) => { - const promptTokens = attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_USAGE_PROMPT_TOKENS}`]; - const completionTokens = attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_USAGE_COMPLETION_TOKENS}`]; - if (promptTokens && completionTokens) { - attributes[`${import_ai_semantic_conventions13.SpanAttributes.LLM_USAGE_TOTAL_TOKENS}`] = Number(promptTokens) + Number(completionTokens); - } -}, transformVendor = (attributes) => { - if (AI_MODEL_PROVIDER in attributes) { - const vendor = attributes[AI_MODEL_PROVIDER]; - let mappedVendor = null; - if (typeof vendor === "string" && vendor.length > 0) { - for (const prefix of Object.keys(VENDOR_MAPPING)) { - if (vendor.startsWith(prefix)) { - mappedVendor = VENDOR_MAPPING[prefix]; - break; - } - } - } - attributes[import_ai_semantic_conventions13.SpanAttributes.LLM_SYSTEM] = mappedVendor || vendor; - delete attributes[AI_MODEL_PROVIDER]; - } -}, transformTelemetryMetadata = (attributes, spanName) => { - const keysToDelete = []; - let agentName = null; - for (const [key, value] of Object.entries(attributes)) { - if (key.startsWith(AI_TELEMETRY_METADATA_PREFIX)) { - const metadataKey = key.substring(AI_TELEMETRY_METADATA_PREFIX.length); - keysToDelete.push(key); - if (metadataKey && value != null) { - const stringValue = typeof value === "string" ? value : String(value); - if (metadataKey === "agent") { - agentName = stringValue; - } - attributes[`${import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.${metadataKey}`] = stringValue; - } - } - } - if (agentName) { - attributes[import_ai_semantic_conventions13.SpanAttributes.GEN_AI_AGENT_NAME] = agentName; - if (spanName === HANDLED_SPAN_NAMES[AI_GENERATE_TEXT]) { - attributes[import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_SPAN_KIND] = import_ai_semantic_conventions13.TraceloopSpanKindValues.AGENT; - attributes[import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ENTITY_NAME] = agentName; - } - } - keysToDelete.forEach((key) => { - delete attributes[key]; - }); -}, transformLLMSpans = (attributes, spanName) => { - transformResponseText(attributes); - transformResponseObject(attributes); - transformResponseToolCalls(attributes); - transformPrompts(attributes); - transformTools(attributes); - transformPromptTokens(attributes); - transformCompletionTokens(attributes); - calculateTotalTokens(attributes); - transformVendor(attributes); - transformTelemetryMetadata(attributes, spanName); -}, transformToolCalls = (span) => { - if (span.attributes["ai.toolCall.args"] && span.attributes["ai.toolCall.result"]) { - span.attributes[import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ENTITY_INPUT] = span.attributes["ai.toolCall.args"]; - delete span.attributes["ai.toolCall.args"]; - span.attributes[import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ENTITY_OUTPUT] = span.attributes["ai.toolCall.result"]; - delete span.attributes["ai.toolCall.result"]; - span.attributes[import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_SPAN_KIND] = import_ai_semantic_conventions13.TraceloopSpanKindValues.TOOL; - const toolName = span.attributes["ai.toolCall.name"]; - if (toolName) { - span.attributes[import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ENTITY_NAME] = toolName; - } - } -}, shouldHandleSpan = (span) => { - var _a2; - return ((_a2 = span.instrumentationScope) === null || _a2 === undefined ? undefined : _a2.name) === "ai"; -}, transformAiSdkSpanNames = (span) => { - if (span.name === TOOL_SPAN_NAME) { - span.updateName(`${span.attributes["ai.toolCall.name"]}.tool`); - } - if (span.name in HANDLED_SPAN_NAMES) { - span.updateName(HANDLED_SPAN_NAMES[span.name]); - } -}, transformAiSdkSpanAttributes = (span) => { - if (!shouldHandleSpan(span)) { - return; - } - transformLLMSpans(span.attributes, span.name); - transformToolCalls(span); -}, ALL_INSTRUMENTATION_LIBRARIES = "all", traceAgentNames, TRACE_AGENT_NAME_TTL, cleanupExpiredTraceAgentNames = () => { - const now2 = Date.now(); - for (const [traceId, entry] of traceAgentNames.entries()) { - if (now2 - entry.timestamp > TRACE_AGENT_NAME_TTL) { - traceAgentNames.delete(traceId); - } - } -}, isRootSpan = (span) => { - const parentContext = span.parentSpanContext; - return !parentContext || !parentContext.spanId || parentContext.spanId === "0000000000000000"; -}, createSpanProcessor = (options) => { - var _a2; - const url2 = `${options.baseUrl || process.env.TRACELOOP_BASE_URL || "https://api.traceloop.com"}/v1/traces`; - const headers = options.headers || (process.env.TRACELOOP_HEADERS ? parseKeyPairsIntoRecord(process.env.TRACELOOP_HEADERS) : { Authorization: `Bearer ${options.apiKey}` }); - const traceExporter = (_a2 = options.exporter) !== null && _a2 !== undefined ? _a2 : new import_exporter_trace_otlp_proto.OTLPTraceExporter({ - url: url2, - headers - }); - const spanProcessor = options.disableBatch ? new import_sdk_trace_node.SimpleSpanProcessor(traceExporter) : new import_sdk_trace_node.BatchSpanProcessor(traceExporter); - const originalOnEnd = spanProcessor.onEnd.bind(spanProcessor); - spanProcessor.onStart = onSpanStart; - if (options.allowedInstrumentationLibraries === ALL_INSTRUMENTATION_LIBRARIES) { - spanProcessor.onEnd = onSpanEnd(originalOnEnd); - } else { - const instrumentationLibraries = [...traceloopInstrumentationLibraries]; - if (options.allowedInstrumentationLibraries) { - instrumentationLibraries.push(...options.allowedInstrumentationLibraries); - } - spanProcessor.onEnd = onSpanEnd(originalOnEnd, instrumentationLibraries); - } - return spanProcessor; -}, traceloopInstrumentationLibraries, onSpanStart = (span) => { - const workflowName = import_api52.context.active().getValue(WORKFLOW_NAME_KEY); - if (workflowName) { - span.setAttribute(import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_WORKFLOW_NAME, workflowName); - } - const entityName = import_api52.context.active().getValue(ENTITY_NAME_KEY); - if (entityName) { - span.setAttribute(import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ENTITY_PATH, entityName); - } - const agentName = import_api52.context.active().getValue(AGENT_NAME_KEY); - if (agentName) { - span.setAttribute(import_ai_semantic_conventions13.SpanAttributes.GEN_AI_AGENT_NAME, agentName); - } - const associationProperties = import_api52.context.active().getValue(ASSOCATION_PROPERTIES_KEY); - if (associationProperties) { - for (const [key, value] of Object.entries(associationProperties)) { - span.setAttribute(`${import_ai_semantic_conventions13.SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.${key}`, value); - } - } - transformAiSdkSpanNames(span); -}, ensureSpanCompatibility = (span) => { - const spanAny = span; - if (spanAny.instrumentationLibrary) { - return span; - } - if (spanAny.instrumentationScope) { - return new Proxy(span, { - get(target, prop) { - if (prop === "instrumentationLibrary") { - return target.instrumentationScope; - } - return target[prop]; - } - }); - } - return new Proxy(span, { - get(target, prop) { - if (prop === "instrumentationLibrary" || prop === "instrumentationScope") { - return { - name: "unknown", - version: undefined, - schemaUrl: undefined - }; - } - return target[prop]; - } - }); -}, onSpanEnd = (originalOnEnd, instrumentationLibraries) => { - return (span) => { - var _a2, _b; - if (instrumentationLibraries && !instrumentationLibraries.includes(((_a2 = span.instrumentationScope) === null || _a2 === undefined ? undefined : _a2.name) || ((_b = span.instrumentationLibrary) === null || _b === undefined ? undefined : _b.name))) { - return; - } - transformAiSdkSpanAttributes(span); - const traceId = span.spanContext().traceId; - const agentName = span.attributes[import_ai_semantic_conventions13.SpanAttributes.GEN_AI_AGENT_NAME]; - if (agentName && typeof agentName === "string") { - traceAgentNames.set(traceId, { - agentName, - timestamp: Date.now() - }); - } else if (!agentName && traceAgentNames.has(traceId)) { - span.attributes[import_ai_semantic_conventions13.SpanAttributes.GEN_AI_AGENT_NAME] = traceAgentNames.get(traceId).agentName; - } - if (isRootSpan(span) && traceAgentNames.has(traceId)) { - traceAgentNames.delete(traceId); - } - if (Math.random() < 0.01) { - cleanupExpiredTraceAgentNames(); - } - const compatibleSpan = ensureSpanCompatibility(span); - originalOnEnd(compatibleSpan); - }; -}, _sdk, _spanProcessor, openAIInstrumentation, anthropicInstrumentation, cohereInstrumentation, vertexaiInstrumentation, aiplatformInstrumentation, bedrockInstrumentation, langchainInstrumentation, llamaIndexInstrumentation, pineconeInstrumentation, chromadbInstrumentation, qdrantInstrumentation, togetherInstrumentation, mcpInstrumentation, instrumentations, initInstrumentations = (apiKey, baseUrl) => { - const exceptionLogger = (e) => { - console.debug("[Traceloop] Instrumentation exception:", e.message); - }; - const enrichTokens = (process.env.TRACELOOP_ENRICH_TOKENS || "true").toLowerCase() === "true"; - let uploadBase64ImageCallback; - if (apiKey && baseUrl) { - const imageUploader = new ImageUploader(baseUrl, apiKey); - uploadBase64ImageCallback = imageUploader.uploadBase64Image.bind(imageUploader); - } - if (openAIInstrumentation) { - openAIInstrumentation.setConfig({ - enrichTokens, - exceptionLogger, - uploadBase64Image: uploadBase64ImageCallback - }); - } else { - openAIInstrumentation = new OpenAIInstrumentation({ - enrichTokens, - exceptionLogger, - uploadBase64Image: uploadBase64ImageCallback - }); - instrumentations.push(openAIInstrumentation); - } - if (!anthropicInstrumentation) { - anthropicInstrumentation = new AnthropicInstrumentation({ - exceptionLogger - }); - instrumentations.push(anthropicInstrumentation); - } - cohereInstrumentation = new CohereInstrumentation({ exceptionLogger }); - instrumentations.push(cohereInstrumentation); - vertexaiInstrumentation = new VertexAIInstrumentation({ - exceptionLogger - }); - instrumentations.push(vertexaiInstrumentation); - aiplatformInstrumentation = new AIPlatformInstrumentation({ - exceptionLogger - }); - instrumentations.push(aiplatformInstrumentation); - bedrockInstrumentation = new BedrockInstrumentation({ exceptionLogger }); - instrumentations.push(bedrockInstrumentation); - pineconeInstrumentation = new PineconeInstrumentation({ exceptionLogger }); - instrumentations.push(pineconeInstrumentation); - langchainInstrumentation = new LangChainInstrumentation({ exceptionLogger }); - instrumentations.push(langchainInstrumentation); - llamaIndexInstrumentation = new LlamaIndexInstrumentation({ - exceptionLogger - }); - instrumentations.push(llamaIndexInstrumentation); - chromadbInstrumentation = new ChromaDBInstrumentation({ exceptionLogger }); - instrumentations.push(chromadbInstrumentation); - qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger }); - instrumentations.push(qdrantInstrumentation); - togetherInstrumentation = new TogetherInstrumentation({ exceptionLogger }); - instrumentations.push(togetherInstrumentation); - mcpInstrumentation = new McpInstrumentation({ exceptionLogger }); - instrumentations.push(mcpInstrumentation); -}, manuallyInitInstrumentations = (instrumentModules, apiKey, baseUrl) => { - const exceptionLogger = (e) => { - console.debug("[Traceloop] Instrumentation exception:", e.message); - }; - const enrichTokens = (process.env.TRACELOOP_ENRICH_TOKENS || "true").toLowerCase() === "true"; - let uploadBase64ImageCallback; - if (apiKey && baseUrl) { - const imageUploader = new ImageUploader(baseUrl, apiKey); - uploadBase64ImageCallback = imageUploader.uploadBase64Image.bind(imageUploader); - } - instrumentations.length = 0; - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.openAI) { - openAIInstrumentation = new OpenAIInstrumentation({ - enrichTokens, - exceptionLogger, - uploadBase64Image: uploadBase64ImageCallback - }); - instrumentations.push(openAIInstrumentation); - openAIInstrumentation.manuallyInstrument(instrumentModules.openAI); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.anthropic) { - anthropicInstrumentation = new AnthropicInstrumentation({ - exceptionLogger - }); - instrumentations.push(anthropicInstrumentation); - anthropicInstrumentation.manuallyInstrument(instrumentModules.anthropic); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.cohere) { - cohereInstrumentation = new CohereInstrumentation({ exceptionLogger }); - instrumentations.push(cohereInstrumentation); - cohereInstrumentation.manuallyInstrument(instrumentModules.cohere); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.google_vertexai) { - vertexaiInstrumentation = new VertexAIInstrumentation({ - exceptionLogger - }); - instrumentations.push(vertexaiInstrumentation); - vertexaiInstrumentation.manuallyInstrument(instrumentModules.google_vertexai); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.google_aiplatform) { - aiplatformInstrumentation = new AIPlatformInstrumentation({ - exceptionLogger - }); - instrumentations.push(aiplatformInstrumentation); - aiplatformInstrumentation.manuallyInstrument(instrumentModules.google_aiplatform); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.bedrock) { - bedrockInstrumentation = new BedrockInstrumentation({ exceptionLogger }); - instrumentations.push(bedrockInstrumentation); - bedrockInstrumentation.manuallyInstrument(instrumentModules.bedrock); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.pinecone) { - const instrumentation = new PineconeInstrumentation({ exceptionLogger }); - instrumentations.push(instrumentation); - instrumentation.manuallyInstrument(instrumentModules.pinecone); - } - langchainInstrumentation = new LangChainInstrumentation({ - exceptionLogger - }); - instrumentations.push(langchainInstrumentation); - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.llamaIndex) { - llamaIndexInstrumentation = new LlamaIndexInstrumentation({ - exceptionLogger - }); - instrumentations.push(llamaIndexInstrumentation); - llamaIndexInstrumentation.manuallyInstrument(instrumentModules.llamaIndex); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.chromadb) { - chromadbInstrumentation = new ChromaDBInstrumentation({ exceptionLogger }); - instrumentations.push(chromadbInstrumentation); - chromadbInstrumentation.manuallyInstrument(instrumentModules.chromadb); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.qdrant) { - qdrantInstrumentation = new QdrantInstrumentation({ exceptionLogger }); - instrumentations.push(qdrantInstrumentation); - qdrantInstrumentation.manuallyInstrument(instrumentModules.qdrant); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.together) { - togetherInstrumentation = new TogetherInstrumentation({ exceptionLogger }); - instrumentations.push(togetherInstrumentation); - togetherInstrumentation.manuallyInstrument(instrumentModules.together); - } - if (instrumentModules === null || instrumentModules === undefined ? undefined : instrumentModules.mcp) { - mcpInstrumentation = new McpInstrumentation({ exceptionLogger }); - instrumentations.push(mcpInstrumentation); - mcpInstrumentation.manuallyInstrument(instrumentModules.mcp); - } -}, startTracing = (options) => { - var _a2; - const apiKey = options.apiKey || process.env.TRACELOOP_API_KEY; - const baseUrl = options.baseUrl || process.env.TRACELOOP_BASE_URL || "https://api.traceloop.com"; - if (Object.keys(options.instrumentModules || {}).length > 0) { - manuallyInitInstrumentations(options.instrumentModules, apiKey, baseUrl); - } else { - initInstrumentations(apiKey, baseUrl); - } - if (!shouldSendTraces()) { - openAIInstrumentation === null || openAIInstrumentation === undefined || openAIInstrumentation.setConfig({ - traceContent: false - }); - llamaIndexInstrumentation === null || llamaIndexInstrumentation === undefined || llamaIndexInstrumentation.setConfig({ - traceContent: false - }); - vertexaiInstrumentation === null || vertexaiInstrumentation === undefined || vertexaiInstrumentation.setConfig({ - traceContent: false - }); - aiplatformInstrumentation === null || aiplatformInstrumentation === undefined || aiplatformInstrumentation.setConfig({ - traceContent: false - }); - bedrockInstrumentation === null || bedrockInstrumentation === undefined || bedrockInstrumentation.setConfig({ - traceContent: false - }); - cohereInstrumentation === null || cohereInstrumentation === undefined || cohereInstrumentation.setConfig({ - traceContent: false - }); - chromadbInstrumentation === null || chromadbInstrumentation === undefined || chromadbInstrumentation.setConfig({ - traceContent: false - }); - togetherInstrumentation === null || togetherInstrumentation === undefined || togetherInstrumentation.setConfig({ - traceContent: false - }); - } - const headers = options.headers || (process.env.TRACELOOP_HEADERS ? parseKeyPairsIntoRecord(process.env.TRACELOOP_HEADERS) : { Authorization: `Bearer ${options.apiKey}` }); - const traceExporter = (_a2 = options.exporter) !== null && _a2 !== undefined ? _a2 : options.gcpProjectId ? new import_opentelemetry_cloud_trace_exporter.TraceExporter({ projectId: options.gcpProjectId }) : new import_exporter_trace_otlp_proto.OTLPTraceExporter({ - url: `${baseUrl}/v1/traces`, - headers - }); - _spanProcessor = createSpanProcessor({ - apiKey: options.apiKey, - baseUrl: options.baseUrl, - disableBatch: options.disableBatch, - exporter: traceExporter, - headers, - allowedInstrumentationLibraries: ALL_INSTRUMENTATION_LIBRARIES - }); - const spanProcessors2 = [_spanProcessor]; - if (options.processor) { - spanProcessors2.push(options.processor); - } - const resource = createResource({ - [import_semantic_conventions.ATTR_SERVICE_NAME]: options.appName || process.env.npm_package_name || "unknown_service" - }); - _sdk = new import_sdk_node.NodeSDK({ - resource, - spanProcessors: spanProcessors2, - contextManager: options.contextManager, - textMapPropagator: options.propagator, - traceExporter, - instrumentations - }); - _sdk.start(); -}, shouldSendTraces = () => { - if (!_configuration) { - import_api52.diag.warn("Traceloop not initialized"); - return false; - } - const contextShouldSendPrompts = import_api52.context.active().getValue(import_ai_semantic_conventions13.CONTEXT_KEY_ALLOW_TRACE_CONTENT); - if (contextShouldSendPrompts !== undefined) { - return contextShouldSendPrompts; - } - if (_configuration.traceContent === false || (process.env.TRACELOOP_TRACE_CONTENT || "true").toLowerCase() === "false") { - return false; - } - return true; -}, fetchRetry, fetchPrompts = async (options) => { - const { apiKey, baseUrl, traceloopSyncMaxRetries } = options; - const response = await fetchRetry(`${baseUrl}/v1/traceloop/prompts`, { - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${apiKey}`, - "X-Traceloop-SDK-Version": "0.0.30" - }, - retries: traceloopSyncMaxRetries, - retryOn: function(attempt, error48, response2) { - if (attempt >= traceloopSyncMaxRetries) - return false; - if ((response2 === null || response2 === undefined ? undefined : response2.status) && response2.status >= 500) { - return true; - } - return false; - }, - retryDelay: function(attempt) { - return Math.pow(2, attempt) * 1000; - } - }); - return await response.json(); -}, _prompts, _initialized = false, _initializedPromise, populateRegistry = (prompts) => { - prompts === null || prompts === undefined || prompts.forEach((prompt) => { - _prompts[prompt.key] = prompt; - }); -}, initializeRegistry = (options) => { - const { baseUrl, traceloopSyncEnabled, traceloopSyncPollingInterval, traceloopSyncDevPollingInterval } = options; - if (!traceloopSyncEnabled || !(baseUrl === null || baseUrl === undefined ? undefined : baseUrl.includes("traceloop"))) - return; - let pollingInterval = traceloopSyncPollingInterval; - _initializedPromise = fetchPrompts(options).then(({ prompts, environment }) => { - if (environment === "dev") { - pollingInterval = traceloopSyncDevPollingInterval; - } - populateRegistry(prompts); - _initialized = true; - setInterval(async () => { - try { - const { prompts: prompts2 } = await fetchPrompts(options); - populateRegistry(prompts2); - } catch (err) { - import_api52.diag.error("Failed to fetch prompt data", err); - } - }, pollingInterval * 1000).unref(); - return true; - }).catch((e) => { - throw new InitializationError("Failed to fetch prompt data to initialize Traceloop SDK", e); - }); -}, _configuration, _client, initialize = (options = {}) => { - if (_configuration) { - return; - } - if (!options.baseUrl) { - options.baseUrl = process.env.TRACELOOP_BASE_URL || "https://api.traceloop.com"; - } - if (!options.apiKey) { - options.apiKey = process.env.TRACELOOP_API_KEY; - } - if (!options.appName) { - options.appName = process.env.npm_package_name; - } - if (!options.experimentSlug) { - options.experimentSlug = process.env.TRACELOOP_EXP_SLUG; - } - if (options.traceloopSyncEnabled === undefined) { - if (process.env.TRACELOOP_SYNC_ENABLED !== undefined) { - options.traceloopSyncEnabled = ["1", "true"].includes(process.env.TRACELOOP_SYNC_ENABLED.toLowerCase()); - } else { - options.traceloopSyncEnabled = true; - } - } - if (options.traceloopSyncEnabled) { - if (!options.traceloopSyncMaxRetries) { - options.traceloopSyncMaxRetries = Number(process.env.TRACELOOP_SYNC_MAX_RETRIES) || 3; - } - if (!options.traceloopSyncPollingInterval) { - options.traceloopSyncPollingInterval = Number(process.env.TRACELOOP_SYNC_POLLING_INTERVAL) || 60; - } - if (!options.traceloopSyncDevPollingInterval) { - options.traceloopSyncDevPollingInterval = Number(process.env.TRACELOOP_SYNC_DEV_POLLING_INTERVAL) || 5; - } - } - validateConfiguration(options); - _configuration = Object.freeze(options); - if (!options.silenceInitializationMessage) { - console.log(`Traceloop exporting traces to ${_configuration.exporter ? "a custom exporter" : _configuration.baseUrl}`); - } - if (options.tracingEnabled === undefined || options.tracingEnabled) { - if (options.logLevel) { - import_api52.diag.setLogger(new import_api52.DiagConsoleLogger, logLevelToOtelLogLevel(options.logLevel)); - } - startTracing(_configuration); - } - initializeRegistry(_configuration); - if (options.apiKey) { - _client = new TraceloopClient({ - apiKey: options.apiKey, - baseUrl: options.baseUrl, - appName: options.appName, - experimentSlug: options.experimentSlug - }); - return _client; - } - return; -}, logLevelToOtelLogLevel = (logLevel) => { - switch (logLevel) { - case "debug": - return import_api52.DiagLogLevel.DEBUG; - case "info": - return import_api52.DiagLogLevel.INFO; - case "warn": - return import_api52.DiagLogLevel.WARN; - case "error": - return import_api52.DiagLogLevel.ERROR; - } -}, env; -var init_dist16 = __esm(() => { - init_dist5(); - init_dist7(); - init_dist8(); - init_dist9(); - init_dist10(); - init_dist11(); - init_dist12(); - init_dist13(); - init_src(); - init_src2(); - init_dist14(); - init_dist15(); - Papa = __toESM(require_papaparse(), 1); - import_sdk_node = __toESM(require_src114(), 1); - import_api52 = __toESM(require_src(), 1); - import_exporter_trace_otlp_proto = __toESM(require_src108(), 1); - import_opentelemetry_cloud_trace_exporter = __toESM(require_src118(), 1); - import_semantic_conventions = __toESM(require_src3(), 1); - import_ai_semantic_conventions13 = __toESM(require_src2(), 1); - import_sdk_trace_node = __toESM(require_src73(), 1); - import_cross_fetch = __toESM(require_node_ponyfill(), 1); - import_fetch_retry = __toESM(require_fetch_retry(), 1); - import_nunjucks = __toESM(require_nunjucks(), 1); - SEVERITY = { - Warning: "Warning", - Error: "Error", - Critical: "Critical" - }; - TraceloopError = class TraceloopError extends Error { - constructor(message, severity = SEVERITY.Error) { - super(message); - this.severity = severity; - } - }; - InitializationError = class InitializationError extends TraceloopError { - constructor(message, cause) { - super(message !== null && message !== undefined ? message : "Failed to initialize Traceloop SDK", SEVERITY.Critical); - this.underlyingCause = cause; - } - }; - UserFeedback = class UserFeedback extends BaseAnnotation { - constructor(client) { - super(client, "user_feedback"); - } - async create(options) { - return await super.create(options); - } - }; - Row = class Row extends BaseDatasetEntity { - constructor(client, data) { - super(client); - this._deleted = false; - this._data = data; - } - get id() { - return this._data.id; - } - get datasetId() { - return this._data.datasetId; - } - get datasetSlug() { - return this._data.datasetSlug; - } - get data() { - return Object.assign({}, this._data.data); - } - get createdAt() { - return this._data.createdAt; - } - get updatedAt() { - return this._data.updatedAt; - } - get deleted() { - return this._deleted; - } - getValue(columnName) { - const value = this._data.data[columnName]; - return value !== undefined ? value : null; - } - hasColumn(columnName) { - return columnName in this._data.data; - } - getColumns() { - return Object.keys(this._data.data); - } - async update(options) { - if (this._deleted) { - throw new Error("Cannot update a deleted row"); - } - if (!options.data || typeof options.data !== "object") { - throw new Error("Update data must be a valid object"); - } - const updatedData = Object.assign(Object.assign({}, this._data.data), options.data); - const response = await this.client.put(`/v2/datasets/${this.datasetSlug}/rows/${this.id}`, { - Values: updatedData - }); - const result = await this.handleResponse(response); - if (result && result.id) { - this._data = result; - } - } - async partialUpdate(updates) { - if (this._deleted) { - throw new Error("Cannot update a deleted row"); - } - if (!updates || typeof updates !== "object") { - throw new Error("Updates must be a valid object"); - } - const response = await this.client.put(`/v2/datasets/${this.datasetSlug}/rows/${this.id}`, { - Values: updates - }); - const result = await this.handleResponse(response); - if (result && result.id) { - this._data = result; - } - } - async delete() { - if (this._deleted) { - throw new Error("Row is already deleted"); - } - const response = await this.client.delete(`/v2/datasets/${this.datasetSlug}/rows/${this.id}`); - await this.handleResponse(response); - this._deleted = true; - } - toJSON() { - return Object.assign({}, this._data.data); - } - toCSVRow(columns, delimiter = ",") { - const columnsToUse = columns || this.getColumns(); - const values = columnsToUse.map((column) => { - const value = this._data.data[column]; - if (value === null || value === undefined) { - return ""; - } - const stringValue = String(value); - if (stringValue.includes(delimiter) || stringValue.includes('"') || stringValue.includes(` -`)) { - return `"${stringValue.replace(/"/g, '""')}"`; - } - return stringValue; - }); - return values.join(delimiter); - } - validate(columnValidators) { - const errors3 = []; - if (columnValidators) { - Object.keys(columnValidators).forEach((columnName) => { - const validator2 = columnValidators[columnName]; - const value = this._data.data[columnName]; - if (!validator2(value)) { - errors3.push(`Invalid value for column '${columnName}': ${value}`); - } - }); - } - return { - valid: errors3.length === 0, - errors: errors3 - }; - } - clone() { - const clonedData = Object.assign(Object.assign({}, this._data), { data: Object.assign({}, this._data.data) }); - return new Row(this.client, clonedData); - } - }; - Column = class Column extends BaseDatasetEntity { - constructor(client, data) { - super(client); - this._deleted = false; - this._data = data; - } - get slug() { - return this._data.slug; - } - get name() { - return this._data.name; - } - get type() { - return this._data.type; - } - get required() { - return this._data.required || false; - } - get description() { - return this._data.description; - } - get datasetId() { - return this._data.datasetId; - } - get datasetSlug() { - return this._data.datasetSlug; - } - get createdAt() { - return this._data.createdAt; - } - get updatedAt() { - return this._data.updatedAt; - } - get deleted() { - return this._deleted; - } - async update(options) { - if (this._deleted) { - throw new Error("Cannot update a deleted column"); - } - if (options.name && typeof options.name !== "string") { - throw new Error("Column name must be a string"); - } - if (options.type && !["string", "number", "boolean"].includes(options.type)) { - throw new Error("Column type must be one of: string, number, boolean"); - } - const response = await this.client.put(`/v2/datasets/${this.datasetSlug}/columns/${this.slug}`, options); - const data = await this.handleResponse(response); - if (data.columns && data.columns[this.slug]) { - const columnData = data.columns[this.slug]; - this._data = Object.assign(Object.assign({}, this._data), { name: columnData.name || this._data.name, type: columnData.type || this._data.type, description: columnData.description || this._data.description, updatedAt: data.updatedAt || this._data.updatedAt }); - } - } - async delete() { - if (this._deleted) { - throw new Error("Column is already deleted"); - } - const response = await this.client.delete(`/v2/datasets/${this.datasetSlug}/columns/${this.slug}`); - await this.handleResponse(response); - this._deleted = true; - } - validateValue(value) { - if (this.required && (value === null || value === undefined)) { - return false; - } - if (value === null || value === undefined) { - return true; - } - switch (this.type) { - case "string": - return typeof value === "string"; - case "number": - return typeof value === "number" && !isNaN(value) && isFinite(value); - case "boolean": - return typeof value === "boolean"; - default: - return false; - } - } - convertValue(value) { - if (value === null || value === undefined) { - return null; - } - switch (this.type) { - case "string": - return String(value); - case "number": { - const numValue = Number(value); - return isNaN(numValue) ? null : numValue; - } - case "boolean": - if (typeof value === "boolean") - return value; - if (typeof value === "string") { - const lower = value.toLowerCase(); - if (lower === "true" || lower === "1") - return true; - if (lower === "false" || lower === "0") - return false; - } - return Boolean(value); - default: - return value; - } - } - }; - Dataset = class Dataset extends BaseDatasetEntity { - constructor(client, data) { - super(client); - this._deleted = false; - this._data = data; - } - get id() { - return this._data.id; - } - get slug() { - return this._data.slug; - } - get name() { - return this._data.name; - } - get description() { - return this._data.description; - } - get version() { - return this._data.version; - } - get published() { - return this._data.published || false; - } - get createdAt() { - return this._data.createdAt || ""; - } - get updatedAt() { - return this._data.updatedAt || ""; - } - get deleted() { - return this._deleted; - } - async update(options) { - if (this._deleted) { - throw new Error("Cannot update a deleted dataset"); - } - if (options.name) { - this.validateDatasetName(options.name); - } - const response = await this.client.put(`/v2/datasets/${this.slug}`, options); - await this.handleResponse(response); - } - async delete() { - if (this._deleted) { - throw new Error("Dataset is already deleted"); - } - const response = await this.client.delete(`/v2/datasets/${this.slug}`); - await this.handleResponse(response); - this._deleted = true; - } - async publish(options = {}) { - if (this._deleted) { - throw new Error("Cannot publish a deleted dataset"); - } - const response = await this.client.post(`/v2/datasets/${this.slug}/publish`, options); - const data = await this.handleResponse(response); - this._data = data; - } - async addColumn(columns) { - if (this._deleted) { - throw new Error("Cannot add columns to a deleted dataset"); - } - if (!Array.isArray(columns) || columns.length === 0) { - throw new Error("Columns must be a non-empty array"); - } - const results = []; - for (const column of columns) { - if (!column.name || typeof column.name !== "string") { - throw new Error("Column name is required and must be a string"); - } - const response = await this.client.post(`/v2/datasets/${this.slug}/columns`, column); - const data = await this.handleResponse(response); - if (!data || !data.slug) { - throw new Error("Failed to create column: Invalid API response"); - } - const columnResponse = { - slug: data.slug, - datasetId: this._data.id, - datasetSlug: this.slug, - name: data.name, - type: data.type, - required: data.required, - description: data.description, - createdAt: data.createdAt, - updatedAt: data.updatedAt - }; - results.push(new Column(this.client, columnResponse)); - } - return results; - } - async getColumns() { - if (this._deleted) { - throw new Error("Cannot get columns from a deleted dataset"); - } - if (!this._data.columns) { - return []; - } - const columns = []; - for (const [columnSlug, columnData] of Object.entries(this._data.columns)) { - const col = columnData; - const columnResponse = { - slug: columnSlug, - datasetId: this._data.id, - datasetSlug: this.slug, - name: col.name, - type: col.type, - required: col.required === true, - description: col.description, - createdAt: this._data.createdAt || this.createdAt, - updatedAt: this._data.updatedAt || this.updatedAt - }; - columns.push(new Column(this.client, columnResponse)); - } - return columns; - } - async addRow(rowData) { - if (this._deleted) { - throw new Error("Cannot add row to a deleted dataset"); - } - if (!rowData || typeof rowData !== "object") { - throw new Error("Row data must be a valid object"); - } - const rows = await this.addRows([rowData]); - if (rows.length === 0) { - throw new Error("Failed to add row"); - } - return rows[0]; - } - async addRows(rows) { - if (this._deleted) { - throw new Error("Cannot add rows to a deleted dataset"); - } - if (!Array.isArray(rows)) { - throw new Error("Rows must be an array"); - } - const columns = await this.getColumns(); - const columnMap = new Map; - columns.forEach((col) => { - columnMap.set(col.name, col.slug); - }); - const transformedRows = rows.map((row) => { - const transformedRow = {}; - Object.keys(row).forEach((columnName) => { - const columnSlug = columnMap.get(columnName); - if (columnSlug) { - transformedRow[columnSlug] = row[columnName]; - } - }); - return transformedRow; - }); - const payload = { - Rows: transformedRows - }; - const response = await this.client.post(`/v2/datasets/${this.slug}/rows`, payload); - const result = await this.handleResponse(response); - if (result.rows) { - return result.rows.map((row) => { - const rowResponse = { - id: row.id, - datasetId: this._data.id, - datasetSlug: this.slug, - data: this.transformValuesBackToNames(row.values, columnMap), - createdAt: row.created_at, - updatedAt: row.updated_at - }; - return new Row(this.client, rowResponse); - }); - } - return []; - } - transformValuesBackToNames(values, columnMap) { - const result = {}; - const reverseMap = new Map; - columnMap.forEach((slug, name) => { - reverseMap.set(slug, name); - }); - Object.keys(values).forEach((columnSlug) => { - const columnName = reverseMap.get(columnSlug); - if (columnName) { - result[columnName] = values[columnSlug]; - } - }); - return result; - } - async getRows(limit = 100, offset = 0) { - if (this._deleted) { - throw new Error("Cannot get rows from a deleted dataset"); - } - const response = await this.client.get(`/v2/datasets/${this.slug}/rows?limit=${limit}&offset=${offset}`); - const data = await this.handleResponse(response); - const rows = data.rows || []; - return rows.map((row) => { - const rowResponse = { - id: row.id, - datasetId: this._data.id, - datasetSlug: this.slug, - data: row.values || row.data || {}, - createdAt: row.created_at, - updatedAt: row.updated_at - }; - return new Row(this.client, rowResponse); - }); - } - async fromCSV(csvContent, options = {}) { - if (this._deleted) { - throw new Error("Cannot import CSV to a deleted dataset"); - } - const { hasHeader = true, delimiter = "," } = options; - if (!csvContent || typeof csvContent !== "string") { - throw new Error("CSV content must be a valid string"); - } - const rows = this.parseCSV(csvContent, delimiter, hasHeader); - if (rows.length === 0) { - throw new Error("No data found in CSV"); - } - const batchSize = 100; - for (let i = 0;i < rows.length; i += batchSize) { - const batch = rows.slice(i, i + batchSize); - await this.addRows(batch); - } - } - async getVersions() { - if (this._deleted) { - throw new Error("Cannot get versions of a deleted dataset"); - } - const response = await this.client.get(`/v2/datasets/${this.slug}/versions`); - return await this.handleResponse(response); - } - async getVersion(version16) { - if (this._deleted) { - throw new Error("Cannot get version of a deleted dataset"); - } - const versionsData = await this.getVersions(); - return versionsData.versions.find((v) => v.version === version16) || null; - } - parseCSV(csvContent, delimiter, hasHeader) { - const parseResult = Papa.parse(csvContent, { - delimiter, - header: hasHeader, - skipEmptyLines: true, - transformHeader: (header) => header.trim(), - transform: (value) => this.parseValue(value.trim()) - }); - if (parseResult.errors.length > 0) { - throw new Error(`CSV parsing failed: ${parseResult.errors[0].message}`); - } - return parseResult.data; - } - parseValue(value) { - if (value === "" || value.toLowerCase() === "null") { - return null; - } - if (value.toLowerCase() === "true") { - return true; - } - if (value.toLowerCase() === "false") { - return false; - } - const numValue = Number(value); - if (!isNaN(numValue) && isFinite(numValue)) { - return numValue; - } - return value; - } - }; - Datasets = class Datasets extends BaseDatasetEntity { - constructor(client) { - super(client); - } - async create(options) { - this.validateDatasetName(options.name); - const response = await this.client.post("/v2/datasets", options); - const data = await this.handleResponse(response); - return new Dataset(this.client, data); - } - async get(slug) { - this.validateDatasetSlug(slug); - const response = await this.client.get(`/v2/datasets/${slug}`); - const data = await this.handleResponse(response); - return new Dataset(this.client, data); - } - async list() { - const response = await this.client.get(`/v2/datasets`); - const data = await this.handleResponse(response); - if (!data || !data.datasets) { - return { - datasets: [], - total: 0 - }; - } - const datasets = data.datasets.map((datasetData) => new Dataset(this.client, datasetData)); - return Object.assign(Object.assign({}, data), { datasets }); - } - async delete(slug) { - this.validateDatasetSlug(slug); - const response = await this.client.delete(`/v2/datasets/${slug}`); - await this.handleResponse(response); - } - async getVersionCSV(slug, version16) { - this.validateDatasetSlug(slug); - if (!version16 || typeof version16 !== "string") { - throw new Error("Version must be a non-empty string"); - } - const response = await this.client.get(`/v2/datasets/${slug}/versions/${version16}`); - const csvData = await this.handleResponse(response); - if (typeof csvData !== "string") { - throw new Error("Expected CSV data as string from API"); - } - return csvData; - } - async getVersionAsJsonl(slug, version16) { - if (!version16 || version16 === "") { - throw new Error("Version is required"); - } - const url2 = `/v2/datasets/${slug}/versions/${version16}/jsonl`; - const response = await this.client.get(url2); - if (!response.ok) { - throw new Error(`Failed to fetch JSONL data: ${response.status} ${response.statusText}`); - } - const contentType = response.headers.get("content-type"); - if (contentType && contentType.includes("application/json")) { - const jsonData = await response.json(); - if (jsonData.error) { - throw new Error(jsonData.error); - } - if (Array.isArray(jsonData)) { - return jsonData.map((item) => JSON.stringify(item)).join(` -`); - } - return JSON.stringify(jsonData); - } - return await response.text(); - } - }; - Evaluator = class Evaluator extends BaseDatasetEntity { - constructor(client) { - super(client); - } - async runExperimentEvaluator(options) { - const { experimentId, experimentRunId, taskId, taskResult, evaluator, waitForResults = true } = options; - this.validateEvaluatorOptions(options); - const triggerResponse = await this.triggerExperimentEvaluator({ - experimentId, - experimentRunId, - taskId, - evaluator, - taskResult - }); - if (!waitForResults) { - return [ - { - executionId: triggerResponse.executionId, - result: { status: "running", startedAt: new Date().toISOString() } - } - ]; - } - return this.waitForResult(triggerResponse.executionId, triggerResponse.streamUrl); - } - async triggerExperimentEvaluator(request) { - const { experimentId, experimentRunId, taskId, evaluator, taskResult } = request; - if (!experimentId || !taskResult) { - throw new Error("experimentId, evaluator, and taskResult are required"); - } - const evaluatorName = typeof evaluator === "string" ? evaluator : evaluator.name; - const evaluatorVersion = typeof evaluator === "string" ? undefined : evaluator.version; - if (!evaluatorName) { - throw new Error("evaluator name is required"); - } - const inputSchemaMapping = this.createInputSchemaMapping(taskResult); - const payload = { - experiment_id: experimentId, - experiment_run_id: experimentRunId, - evaluator_version: evaluatorVersion, - task_id: taskId, - input_schema_mapping: inputSchemaMapping - }; - const response = await this.client.post(`/v2/evaluators/slug/${evaluatorName}/execute`, payload); - const data = await this.handleResponse(response); - return { - executionId: data.executionId, - streamUrl: data.streamUrl - }; - } - async waitForResult(executionId, streamUrl) { - if (!executionId || !streamUrl) { - throw new Error("Execution ID and stream URL are required"); - } - const fullStreamUrl = `${this.client["baseUrl"]}/v2${streamUrl}`; - try { - const response = await fetch(fullStreamUrl, { - headers: { - Authorization: `Bearer ${this.client["apiKey"]}`, - Accept: "application/json", - "Cache-Control": "no-cache" - } - }); - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to get results: ${response.status}, body: ${errorText}`); - } - const responseText = await response.text(); - const responseData = JSON.parse(responseText); - if (responseData.execution_id && responseData.execution_id !== executionId) { - throw new Error(`Execution ID mismatch: ${responseData.execution_id} !== ${executionId}`); - } - const executionResponse = { - executionId: responseData.execution_id, - result: responseData.result - }; - return [executionResponse]; - } catch (error48) { - throw new Error(`Failed to wait for result: ${error48 instanceof Error ? error48.message : "Unknown error"}`); - } - } - validateEvaluatorOptions(options) { - const { experimentId, evaluator, taskResult } = options; - if (!experimentId || typeof experimentId !== "string" || experimentId.trim().length === 0) { - throw new Error("Experiment ID is required and must be a non-empty string"); - } - if (!evaluator) { - throw new Error("At least one evaluator must be specified"); - } - if (!taskResult) { - throw new Error("At least one task result must be provided"); - } - if (typeof evaluator === "string") { - if (!evaluator.trim()) { - throw new Error("Evaluator name cannot be empty"); - } - } else { - if (!evaluator.name || typeof evaluator.name !== "string" || !evaluator.name.trim()) { - throw new Error("Evaluator must have a valid name"); - } - } - if (!taskResult || typeof taskResult !== "object") { - throw new Error(`Task result must be a valid object`); - } - } - createInputSchemaMapping(input) { - const mapping = {}; - for (const [key, value] of Object.entries(input)) { - mapping[key] = { source: String(value) }; - } - return mapping; - } - }; - WORKFLOW_NAME_KEY = import_api52.createContextKey("workflow_name"); - ENTITY_NAME_KEY = import_api52.createContextKey("entity_name"); - AGENT_NAME_KEY = import_api52.createContextKey("agent_name"); - ASSOCATION_PROPERTIES_KEY = import_api52.createContextKey("association_properties"); - HANDLED_SPAN_NAMES = { - [AI_GENERATE_TEXT]: "run.ai", - [AI_GENERATE_TEXT_DO_GENERATE]: "text.generate", - [AI_GENERATE_OBJECT_DO_GENERATE]: "object.generate", - [AI_STREAM_TEXT_DO_STREAM]: "text.stream" - }; - VENDOR_MAPPING = { - openai: "OpenAI", - "azure-openai": "Azure", - anthropic: "Anthropic", - cohere: "Cohere", - mistral: "MistralAI", - groq: "Groq", - replicate: "Replicate", - together: "TogetherAI", - fireworks: "Fireworks", - deepseek: "DeepSeek", - perplexity: "Perplexity", - "amazon-bedrock": "AWS", - bedrock: "AWS", - google: "Google", - vertex: "Google", - ollama: "Ollama", - huggingface: "HuggingFace", - openrouter: "OpenRouter" - }; - traceAgentNames = new Map; - TRACE_AGENT_NAME_TTL = 5 * 60 * 1000; - traceloopInstrumentationLibraries = [ - "ai", - "@traceloop/node-server-sdk", - "@traceloop/instrumentation-openai", - "@traceloop/instrumentation-langchain", - "@traceloop/instrumentation-chroma", - "@traceloop/instrumentation-anthropic", - "@traceloop/instrumentation-llamaindex", - "@traceloop/instrumentation-vertexai", - "@traceloop/instrumentation-bedrock", - "@traceloop/instrumentation-cohere", - "@traceloop/instrumentation-pinecone", - "@traceloop/instrumentation-qdrant", - "@traceloop/instrumentation-together", - "@traceloop/instrumentation-mcp" - ]; - instrumentations = []; - fetchRetry = import_fetch_retry.default(import_cross_fetch.default); - _prompts = {}; - env = new import_nunjucks.Environment(null, { - throwOnUndefined: true - }); -}); - -// ../../../../packages/runtime/dist/logger/console.js -function hexToAnsi(hex3) { - const r = parseInt(hex3.slice(1, 3), 16); - const g = parseInt(hex3.slice(3, 5), 16); - const b = parseInt(hex3.slice(5, 7), 16); - return `\x1B[38;2;${r};${g};${b}m`; -} -function shouldUseColors() { - if (process.env.NO_COLOR) { - return false; - } - if (process.env.TERM === "dumb") { - return false; - } - if (!process.stdout || typeof process.stdout.isTTY === "undefined") { - return false; - } - if (process.stdout && typeof process.stdout.isTTY !== "undefined" && !process.stdout.isTTY) { - return false; - } - return true; -} -function getLogColors(scheme) { - if (scheme === "light") { - return { - trace: { - level: hexToAnsi("#008B8B") + BOLD, - message: hexToAnsi("#4B4B4B") - }, - debug: { - level: hexToAnsi("#0000CD") + BOLD, - message: hexToAnsi("#006400") - }, - info: { - level: hexToAnsi("#FF8C00") + BOLD, - message: hexToAnsi("#0066CC") + BOLD - }, - warn: { - level: hexToAnsi("#9400D3") + BOLD, - message: hexToAnsi("#8B008B") - }, - error: { - level: hexToAnsi("#DC143C") + BOLD, - message: hexToAnsi("#8B0000") + BOLD - } - }; - } - return { - trace: { - level: hexToAnsi("#00FFFF") + BOLD, - message: hexToAnsi("#A0A0A0") - }, - debug: { - level: hexToAnsi("#5C9CFF") + BOLD, - message: hexToAnsi("#90EE90") - }, - info: { - level: hexToAnsi("#FFD700") + BOLD, - message: hexToAnsi("#FFFFFF") + BOLD - }, - warn: { - level: hexToAnsi("#FF00FF") + BOLD, - message: hexToAnsi("#FF00FF") - }, - error: { - level: hexToAnsi("#FF4444") + BOLD, - message: hexToAnsi("#FF4444") - } - }; -} -function detectColorScheme() { - const scheme = process.env.COLOR_SCHEME?.toLowerCase(); - if (scheme === "light" || scheme === "dark") { - return scheme; - } - if (process.env.CI) { - return "light"; - } - return "dark"; -} - -class ConsoleLogger { - context; - formatContext; - logLevel; - colors; - detectedTraceLoopLog; - useColors; - constructor(context20 = {}, formatContext = true, logLevel = "info") { - this.context = context20; - this.formatContext = formatContext; - this.logLevel = logLevel; - this.useColors = shouldUseColors(); - this.colors = this.useColors ? getLogColors(detectColorScheme()) : {}; - } - shouldLog(level) { - switch (this.logLevel) { - case "trace": - return true; - case "debug": - return level === "debug" || level === "info" || level === "warn" || level === "error"; - case "info": - return level === "info" || level === "warn" || level === "error"; - case "warn": - return level === "warn" || level === "error"; - case "error": - return level === "error"; - } - return false; - } - trace(message, ...args) { - if (!this.shouldLog("trace")) { - return; - } - try { - const colors = this.useColors ? this.colors.trace : NOCOLORS; - const formattedMessage = formatMessage(this.formatContext, this.context, message, args); - __originalConsole.debug(`${colors.level}[TRACE]${RESET} ${colors.message}${formattedMessage}${RESET}`); - } catch (err) { - const colors = this.colors.trace; - __originalConsole.debug(`${colors.level}[TRACE]${RESET} ${message}`, ...args); - __originalConsole.error("Error formatting log message:", err); - } - } - debug(message, ...args) { - if (!this.shouldLog("debug")) { - return; - } - try { - const colors = this.useColors ? this.colors.debug : NOCOLORS; - const formattedMessage = formatMessage(this.formatContext, this.context, message, args); - __originalConsole.debug(`${colors.level}[DEBUG]${RESET} ${colors.message}${formattedMessage}${RESET}`); - } catch (err) { - const colors = this.colors.debug; - __originalConsole.debug(`${colors.level}[DEBUG]${RESET} ${message}`, ...args); - __originalConsole.error("Error formatting log message:", err); - } - } - info(message, ...args) { - if (!this.shouldLog("info")) { - return; - } - if (!this.detectedTraceLoopLog && typeof message === "string" && message.includes("Traceloop exporting traces to")) { - this.detectedTraceLoopLog = true; - if (this.shouldLog("debug")) { - this.debug(message, ...args); - } - return; - } - try { - const colors = this.useColors ? this.colors.info : NOCOLORS; - const formattedMessage = formatMessage(this.formatContext, this.context, message, args); - __originalConsole.info(`${colors.level}[INFO]${RESET} ${colors.message}${formattedMessage}${RESET}`); - } catch (err) { - const colors = this.colors.info; - __originalConsole.info(`${colors.level}[INFO]${RESET} ${message}`, ...args); - __originalConsole.error("Error formatting log message:", err); - } - } - warn(message, ...args) { - if (!this.shouldLog("warn")) { - return; - } - try { - const colors = this.useColors ? this.colors.warn : NOCOLORS; - const formattedMessage = formatMessage(this.formatContext, this.context, message, args); - __originalConsole.warn(`${colors.level}[WARN]${RESET} ${colors.message}${formattedMessage}${RESET}`); - } catch (err) { - const colors = this.colors.warn; - __originalConsole.warn(`${colors.level}[WARN]${RESET} ${message}`, ...args); - __originalConsole.error("Error formatting log message:", err); - } - } - error(message, ...args) { - if (!this.shouldLog("error")) { - return; - } - try { - const colors = this.useColors ? this.colors.error : NOCOLORS; - const formattedMessage = formatMessage(this.formatContext, this.context, message, args); - __originalConsole.error(`${colors.level}[ERROR]${RESET} ${colors.message}${formattedMessage}${RESET}`); - } catch (err) { - const colors = this.colors.error; - __originalConsole.error(`${colors.level}[ERROR]${RESET} ${message}`, ...args); - __originalConsole.error("Error formatting log message:", err); - } - } - fatal(message, ...args) { - this.error(message, ...args); - process.exit(1); - } - child(opts) { - return new ConsoleLogger({ - ...this.context, - ...opts - }, this.formatContext, this.logLevel); - } -} -var BOLD = "\x1B[1m", RESET = "\x1B[0m", NOCOLORS; -var init_console = __esm(() => { - init_logger(); - init_util4(); - NOCOLORS = Object.freeze({ level: "", reset: "", message: "" }); -}); - -// ../../../../packages/runtime/dist/otel/logger.js -import { format } from "util"; - -class OtelLogger { - delegate; - context; - logger; - logLevel; - constructor(useConsole, delegate, context20, logLevel) { - this.delegate = delegate; - this.context = context20; - this.logLevel = logLevel ?? "info"; - this.logger = useConsole ? new ConsoleLogger(context20, false, this.logLevel) : undefined; - } - formatMessage(message) { - if (typeof message === "string") { - return message; - } - try { - return safeStringify(message); - } catch { - return String(message); - } - } - getAttributes() { - return this.context; - } - emit(severityNumber, severityText, body) { - const attributes = this.getAttributes(); - try { - this.delegate.emit({ - severityNumber, - severityText, - body, - attributes - }); - } catch (error48) { - this.logger?.error("Failed to emit log to OTLP instance:", error48); - } - } - shouldLog(level) { - switch (this.logLevel) { - case "trace": - return true; - case "debug": - return level === LogsAPI.SeverityNumber.DEBUG || level == LogsAPI.SeverityNumber.INFO || level == LogsAPI.SeverityNumber.WARN || level == LogsAPI.SeverityNumber.ERROR; - case "info": - return level == LogsAPI.SeverityNumber.INFO || level == LogsAPI.SeverityNumber.WARN || level == LogsAPI.SeverityNumber.ERROR; - case "warn": - return level == LogsAPI.SeverityNumber.WARN || level == LogsAPI.SeverityNumber.ERROR; - case "error": - return level == LogsAPI.SeverityNumber.ERROR; - } - return false; - } - trace(message, ...args) { - if (!this.shouldLog(LogsAPI.SeverityNumber.TRACE)) { - return; - } - this.logger?.trace(message, ...args); - let body; - try { - body = format(this.formatMessage(message), ...args); - } catch { - body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(" ")}`; - } - this.emit(LogsAPI.SeverityNumber.TRACE, "TRACE", body); - } - debug(message, ...args) { - if (!this.shouldLog(LogsAPI.SeverityNumber.DEBUG)) { - return; - } - this.logger?.debug(message, ...args); - let body; - try { - body = format(this.formatMessage(message), ...args); - } catch { - body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(" ")}`; - } - this.emit(LogsAPI.SeverityNumber.DEBUG, "DEBUG", body); - } - info(message, ...args) { - if (!this.shouldLog(LogsAPI.SeverityNumber.INFO)) { - return; - } - this.logger?.info(message, ...args); - let body; - try { - body = format(this.formatMessage(message), ...args); - } catch { - body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(" ")}`; - } - this.emit(LogsAPI.SeverityNumber.INFO, "INFO", body); - } - warn(message, ...args) { - if (!this.shouldLog(LogsAPI.SeverityNumber.WARN)) { - return; - } - this.logger?.warn(message, ...args); - let body; - try { - body = format(this.formatMessage(message), ...args); - } catch { - body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(" ")}`; - } - this.emit(LogsAPI.SeverityNumber.WARN, "WARN", body); - } - error(message, ...args) { - if (!this.shouldLog(LogsAPI.SeverityNumber.ERROR)) { - return; - } - this.logger?.error(message, ...args); - let body; - try { - body = format(this.formatMessage(message), ...args); - } catch { - body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(" ")}`; - } - this.emit(LogsAPI.SeverityNumber.ERROR, "ERROR", body); - } - fatal(message, ...args) { - this.error(message, ...args); - process.exit(1); - } - child(opts) { - return new OtelLogger(!!this.logger, this.delegate, { - ...this.context ?? {}, - ...opts - }, this.logLevel); - } -} -function createLogger(useConsole, context20, logLevel) { - const delegate = LogsAPI.logs.getLogger("default", undefined, { - scopeAttributes: context20 - }); - return new OtelLogger(useConsole, delegate, context20, logLevel); -} -function patchConsole(enabled, attributes, logLevel) { - if (!enabled) { - return; - } - const _patch = { ...__originalConsole }; - const delegate = createLogger(true, attributes, logLevel); - _patch.log = (...args) => { - delegate.info(args[0], ...args.slice(1)); - }; - _patch.error = (...args) => { - delegate.error(args[0], ...args.slice(1)); - }; - _patch.warn = (...args) => { - delegate.warn(args[0], ...args.slice(1)); - }; - _patch.debug = (...args) => { - delegate.debug(args[0], ...args.slice(1)); - }; - _patch.info = (...args) => { - delegate.info(args[0], ...args.slice(1)); - }; - _patch.dir = (...args) => { - let msg = ""; - if (args.length === 1) { - msg = format(args[0]); - } else if (args.length >= 2) { - msg = format(args[0], args[1]); - } else { - msg = safeStringify(args); - } - delegate.debug(msg); - }; - _patch.dirxml = (...args) => { - delegate.debug("dirxml:", ...args); - }; - _patch.table = (...args) => { - delegate.debug("table:", ...args); - }; - _patch.trace = (...args) => { - delegate.debug(args[0], ...args.slice(1)); - }; - _patch.group = (...args) => { - delegate.debug("group:", ...args); - }; - _patch.groupCollapsed = (...args) => { - delegate.debug("groupCollapsed:", ...args); - }; - _patch.groupEnd = () => { - delegate.debug("groupEnd"); - }; - _patch.clear = () => {}; - _patch.count = (...args) => { - delegate.debug("count:", ...args); - }; - _patch.countReset = (...args) => { - delegate.debug("countReset:", ...args); - }; - _patch.assert = (condition, ...args) => { - if (!condition) { - delegate.error("assertion failed:", ...args); - } - }; - _patch.time = (...args) => { - delegate.debug("time:", ...args); - }; - _patch.timeLog = (...args) => { - delegate.debug("timeLog:", ...args); - }; - _patch.timeEnd = (...args) => { - delegate.debug("timeEnd:", ...args); - }; - _patch.profile = (...args) => { - delegate.debug("profile:", ...args); - }; - _patch.profileEnd = (...args) => { - delegate.debug("profileEnd:", ...args); - }; - console = globalThis.console = _patch; -} -var LogsAPI, ORIGINAL_CONSOLE_KEY, existingOriginal, __originalConsole; -var init_logger = __esm(() => { - init_dist(); - init_console(); - LogsAPI = __toESM(require_src6(), 1); - ORIGINAL_CONSOLE_KEY = Symbol.for("agentuity.originalConsole"); - existingOriginal = globalThis[ORIGINAL_CONSOLE_KEY]; - __originalConsole = existingOriginal ?? Object.create(console); - if (!existingOriginal) { - globalThis[ORIGINAL_CONSOLE_KEY] = __originalConsole; - } -}); - -// ../../../../packages/runtime/dist/otel/console.js -class ConsoleLogRecordExporter { - dumpRecords = false; - constructor(dumpRecords) { - this.dumpRecords = dumpRecords; - } - export(logs2, resultCallback) { - for (const log of logs2) { - if (this.dumpRecords) { - __originalConsole.log("[LOG]", { - body: log.body, - severityNumber: log.severityNumber, - severityText: log.severityText, - timestamp: log.hrTime, - attributes: log.attributes, - resource: log.resource.attributes - }); - } else { - const severity = log.severityNumber ? import_api_logs.SeverityNumber[log.severityNumber] : "INFO"; - const msg = `[${severity}] ${log.body}`; - switch (log.severityNumber) { - case import_api_logs.SeverityNumber.DEBUG: - __originalConsole.debug(msg); - break; - case import_api_logs.SeverityNumber.INFO: - __originalConsole.info(msg); - break; - case import_api_logs.SeverityNumber.WARN: - __originalConsole.warn(msg); - break; - case import_api_logs.SeverityNumber.ERROR: - __originalConsole.error(msg); - break; - default: - __originalConsole.log(msg); - break; - } - } - } - resultCallback({ code: import_core27.ExportResultCode.SUCCESS }); - } - shutdown() { - return Promise.resolve(); - } -} - -class DebugSpanExporter { - export(spans, resultCallback) { - for (const span of spans) { - __originalConsole.log("[SPAN]", { - name: span.name, - traceId: span.spanContext().traceId, - spanId: span.spanContext().spanId, - duration: span.duration, - status: span.status, - attributes: span.attributes - }); - } - resultCallback({ code: import_core27.ExportResultCode.SUCCESS }); - } - shutdown() { - return Promise.resolve(); - } -} -var import_api_logs, import_core27; -var init_console2 = __esm(() => { - init_logger(); - import_api_logs = __toESM(require_src6(), 1); - import_core27 = __toESM(require_src4(), 1); -}); - -// ../../../../packages/runtime/dist/otel/fetch.js -function instrumentFetch() { - const patch = async (input, init2) => { - const url2 = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url; - const method = init2?.method || (typeof input !== "string" && !(input instanceof URL) ? input.method || "GET" : "GET"); - const activeSpan = import_api53.trace.getActiveSpan(); - if (!activeSpan) { - return __originalFetch(input, init2); - } - const currentContext = import_api53.context.active(); - const _url2 = new URL(url2); - const childSpan = import_api53.trace.getTracer("fetch").startSpan(`HTTP ${method}`, { - attributes: { - "http.url": url2, - "http.path": _url2.pathname, - "http.method": method, - host: _url2.host - } - }, currentContext); - try { - const carrier = {}; - const newContext = import_api53.trace.setSpan(currentContext, childSpan); - import_api53.propagation.inject(newContext, carrier); - const baseHeaders = typeof input !== "string" && !(input instanceof URL) && input instanceof Request ? input.headers : undefined; - const headers = new Headers(baseHeaders ?? init2?.headers ?? {}); - for (const [key, value] of Object.entries(carrier)) { - headers.set(key, value); - } - const newInit = { - ...init2, - headers - }; - const response = await __originalFetch(input, newInit); - childSpan.setAttributes({ - "http.status_code": response.status, - "http.user_agent": response.headers.get("user-agent") || "" - }); - if (!response.ok) { - childSpan.setStatus({ code: import_api53.SpanStatusCode.ERROR }); - } else { - childSpan.setStatus({ code: import_api53.SpanStatusCode.OK }); - } - return response; - } catch (error48) { - childSpan.recordException(error48); - childSpan.setStatus({ code: import_api53.SpanStatusCode.ERROR }); - throw error48; - } finally { - childSpan.end(); - } - }; - globalThis.fetch = patch; -} -var import_api53, __originalFetch; -var init_fetch = __esm(() => { - import_api53 = __toESM(require_src(), 1); - __originalFetch = fetch; -}); - -// ../../../../packages/runtime/dist/otel/exporters/jsonl-log-exporter.js -import { existsSync as existsSync5, appendFileSync, mkdirSync as mkdirSync3 } from "fs"; -import { join as join6 } from "path"; -import { randomUUID as randomUUID4 } from "crypto"; - -class JSONLLogExporter { - currentFile = null; - basePath; - filePrefix; - constructor(basePath) { - this.basePath = basePath; - this.filePrefix = "otel-log"; - this.ensureDirectory(); - } - ensureDirectory() { - if (!existsSync5(this.basePath)) { - mkdirSync3(this.basePath, { recursive: true }); - } - } - getOrCreateFile() { - if (this.currentFile && existsSync5(this.currentFile)) { - return this.currentFile; - } - this.currentFile = join6(this.basePath, `${this.filePrefix}-${Date.now()}.${randomUUID4()}.jsonl`); - return this.currentFile; - } - export(logs2, resultCallback) { - try { - if (logs2.length === 0) { - resultCallback({ code: import_core28.ExportResultCode.SUCCESS }); - return; - } - const file2 = this.getOrCreateFile(); - const lines = []; - for (const log of logs2) { - const record3 = { - timestamp: log.hrTime, - observedTimestamp: log.hrTimeObserved, - severityNumber: log.severityNumber, - severityText: log.severityText, - body: log.body, - attributes: log.attributes, - resource: log.resource.attributes, - instrumentationScope: log.instrumentationScope, - spanContext: log.spanContext - }; - lines.push(JSON.stringify(record3)); - } - const payload = `${lines.join(` -`)} -`; - try { - appendFileSync(file2, payload, "utf-8"); - } catch (err) { - const code = err.code; - if (code === "ENOENT") { - this.currentFile = null; - const newFile = this.getOrCreateFile(); - appendFileSync(newFile, payload, "utf-8"); - } else { - throw err; - } - } - resultCallback({ code: import_core28.ExportResultCode.SUCCESS }); - } catch (error48) { - resultCallback({ - code: import_core28.ExportResultCode.FAILED, - error: error48 instanceof Error ? error48 : new Error(String(error48)) - }); - } - } - async shutdown() { - this.currentFile = null; - } - async forceFlush() {} -} -var import_core28; -var init_jsonl_log_exporter = __esm(() => { - import_core28 = __toESM(require_src4(), 1); -}); - -// ../../../../packages/runtime/dist/otel/exporters/jsonl-trace-exporter.js -import { existsSync as existsSync6, appendFileSync as appendFileSync2, mkdirSync as mkdirSync4 } from "fs"; -import { join as join7 } from "path"; -import { randomUUID as randomUUID5 } from "crypto"; - -class JSONLTraceExporter { - currentFile = null; - basePath; - filePrefix; - constructor(basePath) { - this.basePath = basePath; - this.filePrefix = "otel-trace"; - this.ensureDirectory(); - } - ensureDirectory() { - if (!existsSync6(this.basePath)) { - mkdirSync4(this.basePath, { recursive: true }); - } - } - getOrCreateFile() { - if (this.currentFile && existsSync6(this.currentFile)) { - return this.currentFile; - } - this.currentFile = join7(this.basePath, `${this.filePrefix}-${Date.now()}.${randomUUID5()}.jsonl`); - return this.currentFile; - } - export(spans, resultCallback) { - try { - if (spans.length === 0) { - resultCallback({ code: import_core29.ExportResultCode.SUCCESS }); - return; - } - const file2 = this.getOrCreateFile(); - const lines = []; - for (const span of spans) { - const record3 = { - traceId: span.spanContext().traceId, - spanId: span.spanContext().spanId, - traceState: span.spanContext().traceState?.serialize(), - name: span.name, - kind: span.kind, - startTime: span.startTime, - endTime: span.endTime, - attributes: span.attributes, - status: span.status, - events: span.events, - links: span.links, - resource: span.resource.attributes, - droppedAttributesCount: span.droppedAttributesCount, - droppedEventsCount: span.droppedEventsCount, - droppedLinksCount: span.droppedLinksCount, - duration: span.duration, - ended: span.ended - }; - lines.push(JSON.stringify(record3)); - } - const payload = `${lines.join(` -`)} -`; - try { - appendFileSync2(file2, payload, "utf-8"); - } catch (err) { - const code = err.code; - if (code === "ENOENT") { - this.currentFile = null; - const newFile = this.getOrCreateFile(); - appendFileSync2(newFile, payload, "utf-8"); - } else { - throw err; - } - } - resultCallback({ code: import_core29.ExportResultCode.SUCCESS }); - } catch (error48) { - resultCallback({ - code: import_core29.ExportResultCode.FAILED, - error: error48 instanceof Error ? error48 : new Error(String(error48)) - }); - } - } - async shutdown() { - this.currentFile = null; - } - async forceFlush() {} -} -var import_core29; -var init_jsonl_trace_exporter = __esm(() => { - import_core29 = __toESM(require_src4(), 1); -}); - -// ../../../../packages/runtime/dist/otel/exporters/jsonl-metric-exporter.js -import { existsSync as existsSync7, appendFileSync as appendFileSync3, mkdirSync as mkdirSync5 } from "fs"; -import { join as join8 } from "path"; -import { randomUUID as randomUUID6 } from "crypto"; - -class JSONLMetricExporter { - currentFile = null; - basePath; - filePrefix; - constructor(basePath) { - this.basePath = basePath; - this.filePrefix = "otel-metric"; - this.ensureDirectory(); - } - ensureDirectory() { - if (!existsSync7(this.basePath)) { - mkdirSync5(this.basePath, { recursive: true }); - } - } - getOrCreateFile() { - if (this.currentFile && existsSync7(this.currentFile)) { - return this.currentFile; - } - this.currentFile = join8(this.basePath, `${this.filePrefix}-${Date.now()}.${randomUUID6()}.jsonl`); - return this.currentFile; - } - export(metrics, resultCallback) { - try { - const file2 = this.getOrCreateFile(); - const record3 = { - resource: metrics.resource.attributes, - scopeMetrics: metrics.scopeMetrics.map((sm) => ({ - scope: sm.scope, - metrics: sm.metrics.map((m) => ({ - descriptor: m.descriptor, - dataPointType: m.dataPointType, - dataPoints: m.dataPoints, - aggregationTemporality: m.aggregationTemporality - })) - })) - }; - const line = JSON.stringify(record3) + ` -`; - try { - appendFileSync3(file2, line, "utf-8"); - } catch (err) { - const code = err.code; - if (code === "ENOENT") { - this.currentFile = null; - const newFile = this.getOrCreateFile(); - appendFileSync3(newFile, line, "utf-8"); - } else { - throw err; - } - } - resultCallback({ code: import_core30.ExportResultCode.SUCCESS }); - } catch (error48) { - resultCallback({ - code: import_core30.ExportResultCode.FAILED, - error: error48 instanceof Error ? error48 : new Error(String(error48)) - }); - } - } - async shutdown() { - this.currentFile = null; - } - async forceFlush() {} - selectAggregationTemporality(_instrumentType) { - return AggregationTemporality.CUMULATIVE; - } -} -var import_core30; -var init_jsonl_metric_exporter = __esm(() => { - init_esm2(); - import_core30 = __toESM(require_src4(), 1); -}); - -// ../../../../packages/runtime/dist/otel/exporters/index.js -var init_exporters = __esm(() => { - init_jsonl_log_exporter(); - init_jsonl_trace_exporter(); - init_jsonl_metric_exporter(); -}); - -// ../../../../packages/runtime/dist/otel/otel.js -function registerOtel(config2) { - const { url: url2, name, version: version16, bearerToken, environment = "development", orgId, projectId, deploymentId, devmode = false, logLevel = "warn", jsonlBasePath = undefined } = config2; - let headers; - if (bearerToken) { - headers = {}; - headers.Authorization = `Bearer ${bearerToken}`; - } - const useConsoleExporters = process.env.AGENTUITY_DEBUG_OTEL_CONSOLE === "true"; - const resource = createResource2(config2); - const loggerProvider = createAgentuityLoggerProvider({ - url: url2, - headers, - resource, - logLevel, - jsonlBasePath, - useConsoleExporters - }); - const attrs = { - "@agentuity/orgId": orgId ?? "unknown", - "@agentuity/projectId": projectId ?? "unknown", - "@agentuity/deploymentId": deploymentId ?? "unknown", - "@agentuity/env": environment, - "@agentuity/devmode": devmode, - "@agentuity/language": "javascript" - }; - const logger = createLogger(!!url2, attrs, logLevel); - if (!useConsoleExporters) { - patchConsole(!!url2, attrs, logLevel); - } - const traceExporter = jsonlBasePath ? new JSONLTraceExporter(jsonlBasePath) : url2 ? new import_exporter_trace_otlp_http.OTLPTraceExporter({ - url: `${url2}/v1/traces`, - headers, - keepAlive: true, - compression: import_otlp_exporter_base.CompressionAlgorithm.GZIP - }) : undefined; - const metricExporter = jsonlBasePath ? new JSONLMetricExporter(jsonlBasePath) : url2 ? new import_exporter_metrics_otlp_http.OTLPMetricExporter({ - url: `${url2}/v1/metrics`, - headers, - keepAlive: true, - compression: import_otlp_exporter_base.CompressionAlgorithm.GZIP - }) : undefined; - const spanProcessors2 = []; - if (traceExporter) { - spanProcessors2.push(new BatchSpanProcessor(traceExporter)); - } - if (useConsoleExporters) { - spanProcessors2.push(new SimpleSpanProcessor(new DebugSpanExporter)); - } - const sdkMetricReader = metricExporter ? new PeriodicExportingMetricReader({ - exporter: metricExporter, - exportTimeoutMillis: devmode ? devmodeExportInterval : productionExportInterval, - exportIntervalMillis: devmode ? devmodeExportInterval : productionExportInterval - }) : undefined; - const hostMetricReader = metricExporter ? new PeriodicExportingMetricReader({ - exporter: metricExporter, - exportTimeoutMillis: devmode ? devmodeExportInterval : productionExportInterval, - exportIntervalMillis: devmode ? devmodeExportInterval : productionExportInterval - }) : undefined; - const meterProvider = hostMetricReader ? new MeterProvider({ - resource, - readers: [hostMetricReader] - }) : undefined; - if (meterProvider) { - import_api54.metrics.setGlobalMeterProvider(meterProvider); - } - const hostMetrics = meterProvider ? new import_host_metrics.HostMetrics({ meterProvider }) : undefined; - let running2 = false; - let instrumentationSDK; - if (url2 || useConsoleExporters) { - const propagator = new import_core31.CompositePropagator({ - propagators: [new import_core31.W3CTraceContextPropagator, new import_core31.W3CBaggagePropagator] - }); - import_api54.propagation.setGlobalPropagator(propagator); - instrumentFetch(); - const allSpanProcessors = [...spanProcessors2, ...config2.spanProcessors || []]; - instrumentationSDK = new import_sdk_node2.NodeSDK({ - logRecordProcessor: loggerProvider.processor, - metricReader: sdkMetricReader, - instrumentations: [import_auto_instrumentations_node.getNodeAutoInstrumentations()], - resource, - textMapPropagator: propagator, - spanProcessors: allSpanProcessors - }); - instrumentationSDK.start(); - hostMetrics?.start(); - try { - const projectName = config2.projectId || ""; - const orgId2 = config2.orgId || ""; - const appName2 = `${orgId2}:${projectName}`; - const traceloopHeaders = {}; - if (bearerToken) { - traceloopHeaders.Authorization = `Bearer ${bearerToken}`; - } - initialize({ - appName: appName2, - baseUrl: url2, - headers: traceloopHeaders, - disableBatch: devmode, - propagator, - silenceInitializationMessage: true, - traceloopSyncEnabled: false, - tracingEnabled: false - }); - logger.debug(`Telemetry initialized with app_name: ${appName2}`); - logger.debug("Telemetry configured successfully"); - logger.debug("Sending telemetry data to %s", url2); - } catch (error48) { - logger.warn("Telemetry not available, skipping automatic instrumentation", { - error: error48 instanceof Error ? error48.message : String(error48) - }); - } - running2 = true; - } - const tracer = import_api54.default.trace.getTracer(name, version16); - const meter = import_api54.metrics.getMeter(name, version16); - const shutdown = async () => { - if (running2) { - running2 = false; - logger.debug("shutting down OpenTelemetry"); - await loggerProvider.provider.forceFlush().catch((e) => logger.warn("error in forceFlush of otel provider. %s", e)); - await loggerProvider.exporter?.shutdown().catch((e) => !devmode && logger.warn("error in shutdown of otel exporter. %s", e)); - await instrumentationSDK?.shutdown().catch((e) => !devmode && logger.warn("error in shutdown of otel instrumentation. %s", e)); - logger.debug("shut down OpenTelemetry"); - } - }; - if (url2 && isAuthenticated()) { - logger.info("connected to Agentuity Agent Cloud"); - } - return { tracer, meter, logger, shutdown }; -} -var import_api54, LogsAPI2, import_auto_instrumentations_node, import_core31, import_exporter_logs_otlp_http, import_exporter_metrics_otlp_http, import_exporter_trace_otlp_http, import_host_metrics, import_otlp_exporter_base, import_resources2, import_sdk_logs, import_sdk_node2, import_semantic_conventions2, devmodeExportInterval = 1000, productionExportInterval = 1e4, createResource2 = (config2) => { - const { name, version: version16, orgId, projectId, deploymentId, environment, devmode, cliVersion } = config2; - const sdkVersion = getSDKVersion(); - return import_resources2.resourceFromAttributes({ - [import_semantic_conventions2.ATTR_SERVICE_NAME]: name, - [import_semantic_conventions2.ATTR_SERVICE_VERSION]: version16, - "@agentuity/orgId": orgId ?? "unknown", - "@agentuity/projectId": projectId ?? "unknown", - "@agentuity/deploymentId": deploymentId ?? "unknown", - "@agentuity/env": environment, - "@agentuity/devmode": devmode, - "@agentuity/sdkVersion": sdkVersion ?? "unknown", - "@agentuity/cliVersion": cliVersion ?? "unknown" - }); -}, createAgentuityLoggerProvider = ({ url: url2, headers, resource, jsonlBasePath, useConsoleExporters }) => { - let processor; - let exporter; - if (useConsoleExporters) { - processor = new import_sdk_logs.SimpleLogRecordProcessor(new ConsoleLogRecordExporter(true)); - } else if (jsonlBasePath) { - exporter = new JSONLLogExporter(jsonlBasePath); - processor = new import_sdk_logs.BatchLogRecordProcessor(exporter); - } else if (url2) { - const otlpExporter = new import_exporter_logs_otlp_http.OTLPLogExporter({ - url: `${url2}/v1/logs`, - headers, - compression: import_otlp_exporter_base.CompressionAlgorithm.GZIP, - timeoutMillis: 1e4 - }); - exporter = otlpExporter; - processor = new import_sdk_logs.BatchLogRecordProcessor(otlpExporter); - } else { - processor = new import_sdk_logs.SimpleLogRecordProcessor(new ConsoleLogRecordExporter(false)); - } - const provider = new import_sdk_logs.LoggerProvider({ - resource, - processors: [processor] - }); - LogsAPI2.logs.setGlobalLoggerProvider(provider); - return { - processor, - provider, - exporter - }; -}; -var init_otel = __esm(() => { - init_esm(); - init_esm2(); - init_dist16(); - init_console2(); - init_fetch(); - init_logger(); - init__config(); - init_exporters(); - import_api54 = __toESM(require_src(), 1); - LogsAPI2 = __toESM(require_src6(), 1); - import_auto_instrumentations_node = __toESM(require_src62(), 1); - import_core31 = __toESM(require_src4(), 1); - import_exporter_logs_otlp_http = __toESM(require_src66(), 1); - import_exporter_metrics_otlp_http = __toESM(require_src67(), 1); - import_exporter_trace_otlp_http = __toESM(require_src68(), 1); - import_host_metrics = __toESM(require_src69(), 1); - import_otlp_exporter_base = __toESM(require_src63(), 1); - import_resources2 = __toESM(require_src5(), 1); - import_sdk_logs = __toESM(require_src70(), 1); - import_sdk_node2 = __toESM(require_src88(), 1); - import_semantic_conventions2 = __toESM(require_src3(), 1); -}); - -// ../../../../packages/runtime/dist/otel/config.js -function register(registerConfig) { - const region2 = process.env.AGENTUITY_REGION ?? "usc"; - const serviceUrls = getServiceUrls(region2); - const url2 = serviceUrls.otel; - const bearerToken = process.env.AGENTUITY_OTLP_BEARER_TOKEN ?? process.env.AGENTUITY_SDK_KEY; - const config2 = { - spanProcessors: registerConfig.processors, - name: getAppName(), - version: getAppVersion(), - cliVersion: getCLIVersion(), - devmode: isDevMode(), - orgId: getOrganizationId(), - projectId: getProjectId(), - deploymentId: getDeploymentId(), - environment: getEnvironment(), - logLevel: registerConfig.logLevel, - jsonlBasePath: process.env.AGENTUITY_CLOUD_EXPORT_DIR, - bearerToken, - url: url2 - }; - return registerOtel(config2); -} -var init_config = __esm(() => { - init_dist3(); - init__config(); - init_otel(); -}); - -// ../../../../packages/runtime/dist/_process-protection.js -function enableProcessExitProtection() { - if (protectionEnabled) { - return; - } - protectionEnabled = true; - globalThis.AGENTUITY_PROCESS_EXIT = originalExit; - process.exit = function(code) { - throw new ProcessExitAttemptError({ code }); - }; -} -var existingOriginalExit, originalExit, protectionEnabled = false, ProcessExitAttemptError; -var init__process_protection = __esm(() => { - init_dist(); - existingOriginalExit = globalThis.__AGENTUITY_ORIGINAL_PROCESS_EXIT__; - originalExit = existingOriginalExit ?? process.exit.bind(process); - if (!existingOriginalExit) { - globalThis.__AGENTUITY_ORIGINAL_PROCESS_EXIT__ = originalExit; - } - ProcessExitAttemptError = StructuredError("ProcessExitAttemptError", "Calling process.exit() is not allowed in agent code. The server must remain running to handle requests.")(); -}); - -// ../../../../packages/frontend/dist/beacon-script.js -var BEACON_SCRIPT = ""; - -// ../../../../packages/frontend/dist/index.js -var init_dist17 = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/mime.js -var init_mime = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/middleware/serve-static/path.js -var init_path = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/middleware/serve-static/index.js -var ENCODINGS, ENCODINGS_ORDERED_KEYS; -var init_serve_static = __esm(() => { - init_compress(); - init_mime(); - init_path(); - ENCODINGS = { - br: ".br", - zstd: ".zst", - gzip: ".gz" - }; - ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/adapter/bun/serve-static.js -var init_serve_static2 = __esm(() => { - init_serve_static(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/client/fetch-result-please.js -var init_fetch_result_please = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/client/utils.js -var init_utils3 = __esm(() => { - init_fetch_result_please(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/concurrent.js -var init_concurrent = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/utils/handler.js -var init_handler = __esm(() => { - init_constants2(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/ssg/utils.js -var init_utils4 = __esm(() => { - init_router(); - init_handler(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/ssg/middleware.js -var X_HONO_DISABLE_SSG_HEADER_KEY = "x-hono-disable-ssg", SSG_DISABLED_RESPONSE; -var init_middleware2 = __esm(() => { - init_utils4(); - SSG_DISABLED_RESPONSE = (() => { - try { - return new Response("SSG is disabled", { - status: 404, - headers: { [X_HONO_DISABLE_SSG_HEADER_KEY]: "true" } - }); - } catch { - return null; - } - })(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/ssg/ssg.js -var init_ssg = __esm(() => { - init_utils3(); - init_concurrent(); - init_mime(); - init_middleware2(); - init_utils4(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/ssg/index.js -var init_ssg2 = __esm(() => { - init_middleware2(); - init_ssg(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/adapter/bun/ssg.js -var write; -var init_ssg3 = __esm(() => { - init_ssg2(); - ({ write } = Bun); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/helper/websocket/index.js -var WSContext = class { - #init; - constructor(init2) { - this.#init = init2; - this.raw = init2.raw; - this.url = init2.url ? new URL(init2.url) : null; - this.protocol = init2.protocol ?? null; - } - send(source, options) { - this.#init.send(source, options ?? {}); - } - raw; - binaryType = "arraybuffer"; - get readyState() { - return this.#init.readyState; - } - url; - protocol; - close(code, reason) { - this.#init.close(code, reason); - } -}, createWSMessageEvent = (source) => { - return new MessageEvent("message", { - data: source - }); -}, defineWebSocketHelper = (handler) => { - return (...args) => { - if (typeof args[0] === "function") { - const [createEvents, options] = args; - return async function upgradeWebSocket(c, next) { - const events = await createEvents(c); - const result = await handler(c, events, options); - if (result) { - return result; - } - await next(); - }; - } else { - const [c, events, options] = args; - return (async () => { - const upgraded = await handler(c, events, options); - if (!upgraded) { - throw new Error("Failed to upgrade WebSocket"); - } - return upgraded; - })(); - } - }; -}; -var init_websocket = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/adapter/bun/server.js -var getBunServer = (c) => ("server" in c.env) ? c.env.server : c.env; -var init_server2 = () => {}; - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/adapter/bun/websocket.js -var createWSContext = (ws) => { - return new WSContext({ - send: (source, options) => { - ws.send(source, options?.compress); - }, - raw: ws, - readyState: ws.readyState, - url: ws.data.url, - protocol: ws.data.protocol, - close(code, reason) { - ws.close(code, reason); - } - }); -}, upgradeWebSocket, websocket; -var init_websocket2 = __esm(() => { - init_websocket(); - init_server2(); - upgradeWebSocket = defineWebSocketHelper((c, events) => { - const server = getBunServer(c); - if (!server) { - throw new TypeError("env has to include the 2nd argument of fetch."); - } - const upgradeResult = server.upgrade(c.req.raw, { - data: { - events, - url: new URL(c.req.url), - protocol: c.req.url - } - }); - if (upgradeResult) { - return new Response(null); - } - return; - }); - websocket = { - open(ws) { - const websocketListeners = ws.data.events; - if (websocketListeners.onOpen) { - websocketListeners.onOpen(new Event("open"), createWSContext(ws)); - } - }, - close(ws, code, reason) { - const websocketListeners = ws.data.events; - if (websocketListeners.onClose) { - websocketListeners.onClose(new CloseEvent("close", { - code, - reason - }), createWSContext(ws)); - } - }, - message(ws, message) { - const websocketListeners = ws.data.events; - if (websocketListeners.onMessage) { - const normalizedReceiveData = typeof message === "string" ? message : message.buffer; - websocketListeners.onMessage(createWSMessageEvent(normalizedReceiveData), createWSContext(ws)); - } - } - }; -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/adapter/bun/conninfo.js -var init_conninfo = __esm(() => { - init_server2(); -}); - -// ../../../../node_modules/.bun/hono@4.11.3/node_modules/hono/dist/adapter/bun/index.js -var init_bun = __esm(() => { - init_serve_static2(); - init_ssg3(); - init_websocket2(); - init_conninfo(); -}); - -// ../../../../packages/runtime/dist/handlers/websocket.js -function websocket2(handler) { - const wsHandler = upgradeWebSocket((c) => { - let openHandler; - let messageHandler; - let closeHandler; - let initialized = false; - const asyncLocalStorage = getAgentAsyncLocalStorage(); - const capturedContext = asyncLocalStorage.getStore(); - const wsConnection = { - onOpen: (h) => { - openHandler = h; - }, - onMessage: (h) => { - messageHandler = h; - }, - onClose: (h) => { - closeHandler = h; - }, - send: (_data) => {} - }; - const runHandler = () => { - if (capturedContext) { - asyncLocalStorage.run(capturedContext, () => handler(c, wsConnection)); - } else { - handler(c, wsConnection); - } - initialized = true; - }; - runHandler(); - return { - onOpen: async (event, ws) => { - try { - wsConnection.send = (data) => ws.send(data); - if (openHandler) { - const h = openHandler; - if (capturedContext) { - await asyncLocalStorage.run(capturedContext, () => h(event)); - } else { - await h(event); - } - } - } catch (err) { - c.var.logger?.error("WebSocket onOpen error:", err); - throw err; - } - }, - onMessage: async (event, ws) => { - try { - if (!initialized) { - wsConnection.send = (data) => ws.send(data); - runHandler(); - } - if (messageHandler) { - const h = messageHandler; - if (capturedContext) { - await asyncLocalStorage.run(capturedContext, () => h(event)); - } else { - await h(event); - } - } - } catch (err) { - c.var.logger?.error("WebSocket onMessage error:", err); - throw err; - } - }, - onClose: async (event, _ws) => { - try { - if (closeHandler) { - const h = closeHandler; - if (capturedContext) { - await asyncLocalStorage.run(capturedContext, () => h(event)); - } else { - await h(event); - } - } - } catch (err) { - c.var.logger?.error("WebSocket onClose error:", err); - } - } - }; - }); - const middleware = (c, next) => wsHandler(c, next); - return middleware; -} -var init_websocket3 = __esm(() => { - init_bun(); - init__context(); -}); - -// ../../../../packages/runtime/dist/workbench.js -import { timingSafeEqual as timingSafeEqual2 } from "crypto"; -var createWorkbenchExecutionMetadataMiddleware = () => { - return async (ctx, next) => { - const started = performance.now(); - await next(); - const thread3 = ctx.var.thread; - if (!thread3) { - return; - } - const executionCtx = ctx.var.workbenchExecution; - if (!executionCtx) { - return; - } - const { agentId, input, result } = executionCtx; - const agentMessagesKey = `messages_${agentId}`; - const maxMessages = 50; - const tokens = ctx.res.headers.get(TOKENS_HEADER) ?? undefined; - const duration3 = ctx.res.headers.get(DURATION_HEADER) ?? `${((performance.now() - started) / 1000).toFixed(1)}s`; - const sessionId = ctx.var.sessionId; - await thread3.state.push(agentMessagesKey, { - type: "input", - data: input, - sessionId, - timestamp: Date.now() - }, maxMessages); - if (result !== undefined && result !== null) { - await thread3.state.push(agentMessagesKey, { - type: "output", - data: result, - sessionId, - tokens, - duration: duration3, - timestamp: Date.now() - }, maxMessages); - } - try { - const threadProvider = getThreadProvider(); - await threadProvider.save(thread3); - } catch { - ctx.var.logger?.warn("Failed to save thread state"); - } - }; -}, createWorkbenchExecutionRoute = () => { - const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}` : undefined; - return async (ctx) => { - if (authHeader) { - try { - const authValue = ctx.req.header("Authorization"); - if (!authValue || !timingSafeEqual2(Buffer.from(authValue, "utf-8"), Buffer.from(authHeader, "utf-8"))) { - return ctx.text("Unauthorized", { status: 401 }); - } - } catch { - return ctx.text("Unauthorized", { status: 401 }); - } - } - const contentType = ctx.req.header("Content-Type"); - if (!contentType || !contentType.includes("application/json")) { - return ctx.json({ error: "Content-Type must be application/json" }, { status: 400 }); - } - try { - let agentId; - let input; - try { - const requestData = await ctx.req.json(); - agentId = requestData.agentId; - input = requestData.input; - } catch (_error) { - return ctx.json({ error: "Invalid JSON in request body" }, { status: 400 }); - } - const agentMeta = getAgentMetadataByAgentId(agentId); - if (!agentMeta) { - if (!hasMetadata()) { - return ctx.json({ error: "Metadata file not found" }, { status: 500 }); - } - return ctx.text("Agent not found", { status: 404 }); - } - const allAgents = getAgents(); - const agentName = agentMeta.name; - const agentObj = allAgents.get(agentName); - if (!agentObj || !agentName) { - return ctx.text("Agent not found", { status: 404 }); - } - const _ctx = privateContext(ctx); - if (agentObj.metadata?.id) { - _ctx.var.agentIds.add(agentObj.metadata.id); - } - if (agentObj.metadata?.agentId) { - _ctx.var.agentIds.add(agentObj.metadata.agentId); - } - let result; - if (agentObj.inputSchema) { - result = await agentObj.handler(input); - } else { - result = await agentObj.handler(); - } - ctx.set("workbenchExecution", { agentId, input, result }); - return ctx.json({ success: true, data: result ?? null }); - } catch (error48) { - const err = error48 instanceof Error ? error48 : new Error(String(error48)); - return ctx.json({ - success: false, - error: { - message: err.message, - stack: err.stack, - code: "code" in err && typeof err.code === "string" ? err.code : "EXECUTION_ERROR", - cause: err.cause - } - }); - } - }; -}, createWorkbenchClearStateRoute = () => { - const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}` : undefined; - return async (ctx) => { - if (authHeader) { - try { - const authValue = ctx.req.header("Authorization"); - if (!authValue || !timingSafeEqual2(Buffer.from(authValue, "utf-8"), Buffer.from(authHeader, "utf-8"))) { - return ctx.text("Unauthorized", { status: 401 }); - } - } catch { - return ctx.text("Unauthorized", { status: 401 }); - } - } - const agentId = ctx.req.query("agentId"); - if (!agentId) { - return ctx.json({ error: "agentId query parameter is required" }, { status: 400 }); - } - if (!ctx.var.thread) { - return ctx.json({ error: "Thread not available" }, { status: 404 }); - } - const allKeys = await ctx.var.thread.state.keys(); - const agentPrefix = `${agentId}_`; - const messagesKey = `messages_${agentId}`; - for (const key of allKeys) { - if (key === messagesKey || key.startsWith(agentPrefix)) { - await ctx.var.thread.state.delete(key); - } - } - try { - const threadProvider = getThreadProvider(); - await threadProvider.save(ctx.var.thread); - } catch { - return ctx.json({ error: "Failed to save thread state" }, { status: 500 }); - } - return ctx.json({ success: true, message: `State cleared for agent ${agentId}` }); - }; -}, createWorkbenchStateRoute = () => { - const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}` : undefined; - return async (ctx) => { - if (authHeader) { - try { - const authValue = ctx.req.header("Authorization"); - if (!authValue || !timingSafeEqual2(Buffer.from(authValue, "utf-8"), Buffer.from(authHeader, "utf-8"))) { - return ctx.text("Unauthorized", { status: 401 }); - } - } catch { - return ctx.text("Unauthorized", { status: 401 }); - } - } - const agentId = ctx.req.query("agentId"); - if (!agentId) { - return ctx.json({ error: "agentId query parameter is required" }, { status: 400 }); - } - if (!ctx.var.thread) { - return ctx.json({ error: "Thread not available" }, { status: 404 }); - } - const agentMessagesKey = `messages_${agentId}`; - const messages = await ctx.var.thread.state.get(agentMessagesKey); - return ctx.json({ - threadId: ctx.var.thread.id, - agentId, - messages: Array.isArray(messages) ? messages : [] - }); - }; -}, createWorkbenchRouter = () => { - try { - if (typeof AGENTUITY_WORKBENCH_CONFIG_INLINE !== "undefined") { - const encoded = AGENTUITY_WORKBENCH_CONFIG_INLINE; - const json3 = Buffer.from(encoded, "base64").toString("utf-8"); - const config2 = JSON.parse(json3); - if (config2.headers?.["Authorization"]) { - const authHeader = config2.headers["Authorization"]; - if (authHeader.startsWith("Bearer ")) { - const apiKey = authHeader.slice("Bearer ".length); - process.env.AGENTUITY_WORKBENCH_APIKEY = apiKey; - } - } - } - } catch {} - const router = createRouter(); - router.use("/_agentuity/workbench/*", createAgentMiddleware("")); - router.get("/_agentuity/workbench/ws", websocket2(createWorkbenchWebsocketHandler())); - router.get("/_agentuity/workbench/metadata.json", createWorkbenchMetadataRoute()); - router.get("/_agentuity/workbench/sample", createWorkbenchSampleRoute()); - router.get("/_agentuity/workbench/state", createWorkbenchStateRoute()); - router.delete("/_agentuity/workbench/state", createWorkbenchClearStateRoute()); - router.post("/_agentuity/workbench/execute", createWorkbenchExecutionMetadataMiddleware(), createWorkbenchExecutionRoute()); - return router; -}, createWorkbenchSampleRoute = () => { - const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}` : undefined; - return async (ctx) => { - if (authHeader) { - try { - const authValue = ctx.req.header("Authorization"); - if (!authValue || !timingSafeEqual2(Buffer.from(authValue, "utf-8"), Buffer.from(authHeader, "utf-8"))) { - return ctx.text("Unauthorized", { status: 401 }); - } - } catch { - return ctx.text("Unauthorized", { status: 401 }); - } - } - try { - const agentId = ctx.req.query("agentId"); - if (!agentId) { - return ctx.json({ error: "Missing agentId query parameter" }, { status: 400 }); - } - const agentMeta = getAgentMetadataByAgentId(agentId); - if (!agentMeta) { - if (!hasMetadata()) { - return ctx.json({ error: "Metadata file not found" }, { status: 500 }); - } - return ctx.text("Agent not found", { status: 404 }); - } - const allAgents = getAgents(); - const agentObj = allAgents.get(agentMeta.name); - if (!agentObj) { - return ctx.text("Agent not found", { status: 404 }); - } - if (!agentObj.inputSchema) { - return ctx.json({ error: "Agent has no input schema" }, { status: 400 }); - } - const jsonSchema = toJSONSchema3(agentObj.inputSchema); - const sdkKey = process.env.AGENTUITY_SDK_KEY; - const gatewayUrl = process.env.AGENTUITY_AIGATEWAY_URL || process.env.AGENTUITY_TRANSPORT_URL || (sdkKey ? "https://agentuity.ai" : ""); - if (!sdkKey || !gatewayUrl) { - return ctx.json({ - error: "AGENTUITY_SDK_KEY and gateway URL must be configured", - message: "Set AGENTUITY_SDK_KEY and either AGENTUITY_AIGATEWAY_URL, AGENTUITY_TRANSPORT_URL, or use https://agentuity.ai" - }, { status: 500 }); - } - const prompt = `Generate a realistic sample data object that matches this JSON schema. Return only valid JSON, no markdown code blocks or explanations. - -JSON Schema: -${JSON.stringify(jsonSchema, null, 2)} - -Return a JSON object that matches this schema with realistic values.`; - const gatewayEndpoint = `${gatewayUrl}/gateway/groq/openai/v1/chat/completions`; - const groqResponse = await fetch(gatewayEndpoint, { - method: "POST", - headers: { - Authorization: `Bearer ${sdkKey}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ - model: "llama-3.3-70b-versatile", - messages: [ - { - role: "user", - content: prompt - } - ] - }) - }); - if (!groqResponse.ok) { - const errorText = await groqResponse.text(); - return ctx.json({ - error: "Groq API request failed", - message: `Status ${groqResponse.status}: ${errorText}` - }, { status: 500 }); - } - const groqData = await groqResponse.json(); - const text = groqData.choices?.[0]?.message?.content; - if (!text) { - return ctx.json({ error: "Invalid response from Groq API", response: groqData }, { status: 500 }); - } - let sample; - try { - const cleanedText = text.trim().replace(/^```json\s*|\s*```$/g, "").replace(/^```\s*|\s*```$/g, ""); - sample = JSON.parse(cleanedText); - } catch (parseError) { - return ctx.json({ - error: "Failed to parse generated JSON", - message: parseError instanceof Error ? parseError.message : String(parseError), - generatedText: text - }, { status: 500 }); - } - return ctx.json(sample); - } catch (error48) { - return ctx.json({ - error: "Internal server error", - message: error48 instanceof Error ? error48.message : String(error48) - }, { status: 500 }); - } - }; -}, createWorkbenchMetadataRoute = () => { - const authHeader = process.env.AGENTUITY_WORKBENCH_APIKEY ? `Bearer ${process.env.AGENTUITY_WORKBENCH_APIKEY}` : undefined; - return async (ctx) => { - if (authHeader) { - try { - const authValue = ctx.req.header("Authorization"); - if (!authValue || !timingSafeEqual2(Buffer.from(authValue, "utf-8"), Buffer.from(authHeader, "utf-8"))) { - return ctx.text("Unauthorized", { status: 401 }); - } - } catch { - return ctx.text("Unauthorized", { status: 401 }); - } - } - const metadata = loadBuildMetadata(); - if (!metadata) { - return ctx.json({ error: "Metadata file not found. Run build to generate metadata." }, { status: 500 }); - } - try { - await ensureAgentsImported(); - const agents2 = getAgents(); - const agentsByName = new Map; - for (const [name, agent2] of agents2) { - agentsByName.set(name, agent2); - } - const schemas3 = { agents: {} }; - for (const agent2 of metadata.agents || []) { - const runtimeAgent = agentsByName.get(agent2.name); - schemas3.agents[agent2.id] = { - schema: { - input: agent2.schema?.input ? { - code: agent2.schema.input, - json: runtimeAgent?.inputSchema ? toJSONSchema3(runtimeAgent.inputSchema) : undefined - } : undefined, - output: agent2.schema?.output ? { - code: agent2.schema.output, - json: runtimeAgent?.outputSchema ? toJSONSchema3(runtimeAgent.outputSchema) : undefined - } : undefined - }, - metadata: { - id: agent2.id, - agentId: agent2.agentId, - name: agent2.name, - description: agent2.description, - filename: agent2.filename, - version: agent2.version - } - }; - } - return ctx.json(schemas3); - } catch (error48) { - return ctx.json({ - error: "Failed to read metadata file", - message: error48 instanceof Error ? error48.message : String(error48) - }, { status: 500 }); - } - }; -}, workbenchWebSockets, createWorkbenchWebsocketHandler = () => { - return (_c, ws) => { - ws.onOpen(() => { - workbenchWebSockets.add(ws); - ws.send("alive"); - }); - ws.onMessage((event) => { - const message = event.data; - if (message === "restarting" || message === "alive") { - for (const clientWs of workbenchWebSockets) { - if (clientWs !== ws) { - try { - clientWs.send(message); - } catch (_error) { - workbenchWebSockets.delete(clientWs); - } - } - } - } - }); - ws.onClose(() => { - workbenchWebSockets.delete(ws); - }); - }; -}; -var init_workbench = __esm(() => { - init_dist3(); - init_agent2(); - init_router5(); - init_websocket3(); - init__server(); - init__services(); - init__metadata(); - init__tokens(); - workbenchWebSockets = new Set; -}); - -// ../../../../packages/runtime/dist/bun-s3-patch.js -function isAgentuityStorageEndpoint(raw2) { - let host = raw2.trim(); - if (!host) - return false; - try { - const url2 = new URL(host.includes("://") ? host : `https://${host}`); - host = url2.hostname; - } catch {} - return host === "storage.dev" || host.endsWith(".storage.dev"); -} -function injectVirtualHostedStyle(options) { - if (!options || typeof options.virtualHostedStyle === "undefined") { - return { ...options, virtualHostedStyle: true }; - } - return options; -} -function patchBunS3ForStorageDev() { - const bun = globalThis.Bun; - if (!bun?.s3 || !bun.S3Client?.prototype?.file) { - return; - } - const endpointEnv = process.env.S3_ENDPOINT ?? process.env.AWS_ENDPOINT; - if (!endpointEnv) { - return; - } - if (!isAgentuityStorageEndpoint(endpointEnv)) { - return; - } - const S3ClientProto = bun.S3Client.prototype; - if (S3ClientProto[PATCHED_SYMBOL]) { - return; - } - const originalFile = S3ClientProto.file; - S3ClientProto.file = function patchedFile(path, options) { - return originalFile.call(this, path, injectVirtualHostedStyle(options)); - }; - if (S3ClientProto.presign) { - const originalPresign = S3ClientProto.presign; - S3ClientProto.presign = function patchedPresign(path, options) { - return originalPresign.call(this, path, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.write) { - const originalWrite = S3ClientProto.write; - S3ClientProto.write = function patchedWrite(path, data, options) { - return originalWrite.call(this, path, data, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.delete) { - const originalDelete = S3ClientProto.delete; - S3ClientProto.delete = function patchedDelete(path, options) { - return originalDelete.call(this, path, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.exists) { - const originalExists = S3ClientProto.exists; - S3ClientProto.exists = function patchedExists(path, options) { - return originalExists.call(this, path, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.stat) { - const originalStat = S3ClientProto.stat; - S3ClientProto.stat = function patchedStat(path, options) { - return originalStat.call(this, path, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.size) { - const originalSize = S3ClientProto.size; - S3ClientProto.size = function patchedSize(path, options) { - return originalSize.call(this, path, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.unlink) { - const originalUnlink = S3ClientProto.unlink; - S3ClientProto.unlink = function patchedUnlink(path, options) { - return originalUnlink.call(this, path, injectVirtualHostedStyle(options)); - }; - } - if (S3ClientProto.list) { - const originalList = S3ClientProto.list; - S3ClientProto.list = function patchedList(input, options) { - return originalList.call(this, input, injectVirtualHostedStyle(options)); - }; - } - S3ClientProto[PATCHED_SYMBOL] = true; -} -var PATCHED_SYMBOL; -var init_bun_s3_patch = __esm(() => { - PATCHED_SYMBOL = Symbol.for("agentuity.s3.patched"); -}); - -// ../../../../packages/runtime/dist/index.js -var init_dist18 = __esm(() => { - init_agent2(); - init_app(); - init_middleware(); - init_config(); - init__services(); - init__process_protection(); - init_dist17(); - init_router5(); - init_workbench(); - init__server(); - init__waituntil(); - init__metadata(); - init__services(); - init_dist3(); - init_bun_s3_patch(); -}); - -// app.ts -var exports_app2 = {}; -__export(exports_app2, { - default: () => app_default -}); -var app, app_default; -var init_app2 = __esm(async () => { - init_dist18(); - app = await createApp(); - console.log(`[NextJS-App] Agentuity server started: ${app.server.url}`); - app_default = app; -}); - -// src/agent/echo/agent.ts -var echoAgent, agent_default; -var init_agent3 = __esm(() => { - init_dist18(); - init_dist2(); - echoAgent = createAgent("echo", { - description: "Echoes back the input message with a timestamp", - schema: { - input: s.object({ - message: s.string() - }), - output: s.object({ - echo: s.string(), - timestamp: s.string() - }) - }, - handler: async (ctx, input) => { - ctx.logger.info("Echo agent received message", { message: input.message }); - return { - echo: input.message, - timestamp: new Date().toISOString() - }; - } - }); - agent_default = echoAgent; -}); - -// src/generated/registry.ts -var exports_registry = {}; -__export(exports_registry, { - AgentDefinitions: () => AgentDefinitions -}); -var AgentDefinitions; -var init_registry = __esm(() => { - init_agent3(); - AgentDefinitions = { - echo: agent_default - }; -}); - -// src/api/index.ts -var exports_api = {}; -__export(exports_api, { - default: () => api_default -}); -var router, api_default; -var init_api4 = __esm(() => { - init_dist18(); - init_agent3(); - router = createRouter(); - router.get("/health", (c) => { - return c.json({ status: "ok", timestamp: new Date().toISOString() }); - }); - router.post("/echo", agent_default.validator(), async (c) => { - const input = c.req.valid("json"); - const result = await agent_default.run(input); - return c.json(result); - }); - api_default = router; -}); - -// src/generated/app.ts -init_dist18(); -init_bun(); - -// src/generated/webanalytics.ts -init_dist18(); -function registerAnalyticsRoutes(app) { - app.get("/_agentuity/webanalytics/session.js", createWebSessionMiddleware(), async (c) => { - const threadId = c.get("_webThreadId") || ""; - const sessionData = JSON.stringify({ threadId }); - const sessionScript = `window.__AGENTUITY_SESSION__=${sessionData};`; - return new Response(sessionScript, { - headers: { - "Content-Type": "application/javascript; charset=utf-8", - "Cache-Control": "no-store, no-cache, must-revalidate" - } - }); - }); - app.get("/_agentuity/webanalytics/analytics.js", async (c) => { - return new Response(BEACON_SCRIPT, { - headers: { - "Content-Type": "application/javascript; charset=utf-8", - "Cache-Control": "public, max-age=3600" - } - }); - }); -} - -// src/generated/app.ts -var getEnv = (key) => process.env[key]; -var isDevelopment = () => getEnv("NODE" + "_" + "ENV") !== "production"; -if (isDevelopment()) { - await bootstrapRuntimeEnv({ projectDir: import.meta.dir + "/../.." }); -} -loadBuildMetadata(); -patchBunS3ForStorageDev(); -var serverUrl = `http://127.0.0.1:${process.env.PORT || "3500"}`; -var otel = register({ processors: getSpanProcessors(), logLevel: process.env.AGENTUITY_LOG_LEVEL || "info" }); -var app2 = createRouter(); -setGlobalRouter(app2); -app2.use("*", createCompressionMiddleware()); -app2.use("*", createBaseMiddleware({ - logger: otel.logger, - tracer: otel.tracer, - meter: otel.meter -})); -app2.use("/_agentuity/workbench/*", createCorsMiddleware()); -app2.use("/api/*", createCorsMiddleware()); -app2.use("/_agentuity/workbench/*", createOtelMiddleware()); -app2.use("/api/*", createOtelMiddleware()); -app2.use("/api/*", createAgentMiddleware("")); -await init_app2().then(() => exports_app2); -await Promise.resolve().then(() => (init_registry(), exports_registry)); -var appState = getAppState(); -var appConfig = getAppConfig(); -createServices(otel.logger, appConfig, serverUrl); -setGlobalLogger(otel.logger); -setGlobalTracer(otel.tracer); -var threadProvider = getThreadProvider(); -var sessionProvider = getSessionProvider(); -await threadProvider.initialize(appState); -await sessionProvider.initialize(appState); -if (!isDevelopment()) { - const healthHandler = (c) => { - return c.text("OK", 200, { "Content-Type": "text/plain; charset=utf-8" }); - }; - const idleHandler = (c) => { - const server = globalThis.__AGENTUITY_SERVER__; - if (!server) - return c.text("NO", 200, { "Content-Type": "text/plain; charset=utf-8" }); - if (hasWaitUntilPending()) - return c.text("NO", 200, { "Content-Type": "text/plain; charset=utf-8" }); - if (server.pendingRequests > 1) - return c.text("NO", 200, { "Content-Type": "text/plain; charset=utf-8" }); - if (server.pendingWebSockets > 0) - return c.text("NO", 200, { "Content-Type": "text/plain; charset=utf-8" }); - return c.text("OK", 200, { "Content-Type": "text/plain; charset=utf-8" }); - }; - app2.get("/_agentuity/health", healthHandler); - app2.get("/_health", healthHandler); - app2.get("/_agentuity/idle", idleHandler); - app2.get("/_idle", idleHandler); -} -if (isDevelopment()) { - app2.get("/_agentuity/ready", async (c) => { - const vitePort = process.env.VITE_PORT; - if (!vitePort) { - return c.text("OK", 200, { "Content-Type": "text/plain; charset=utf-8" }); - } - try { - const viteUrl = `http://127.0.0.1:${vitePort}/@vite/client`; - const res = await fetch(viteUrl, { - signal: AbortSignal.timeout(5000), - method: "HEAD" - }); - if (res.ok) { - return c.text("OK", 200, { "Content-Type": "text/plain; charset=utf-8" }); - } - return c.text("VITE_NOT_READY", 503, { "Content-Type": "text/plain; charset=utf-8" }); - } catch (err) { - otel.logger.debug("Vite readiness check failed: %s", err instanceof Error ? err.message : String(err)); - return c.text("VITE_NOT_READY", 503, { "Content-Type": "text/plain; charset=utf-8" }); - } - }); -} -registerAnalyticsRoutes(app2); -if (isDevelopment() && process.env.VITE_PORT) { - const VITE_ASSET_PORT = parseInt(process.env.VITE_PORT, 10); - const proxyToVite = async (c) => { - const viteUrl = `http://127.0.0.1:${VITE_ASSET_PORT}${c.req.path}`; - try { - otel.logger.debug(`[Proxy] ${c.req.method} ${c.req.path} -> Vite:${VITE_ASSET_PORT}`); - const res = await fetch(viteUrl, { signal: AbortSignal.timeout(1e4) }); - otel.logger.debug(`[Proxy] ${c.req.path} -> ${res.status} (${res.headers.get("content-type")})`); - return new Response(res.body, { - status: res.status, - headers: res.headers - }); - } catch (err) { - if (err instanceof Error && err.name === "TimeoutError") { - otel.logger.error(`Vite proxy timeout: ${c.req.path}`); - return c.text("Vite asset server timeout", 504); - } - otel.logger.error(`Failed to proxy to Vite: ${c.req.path} - ${err instanceof Error ? err.message : String(err)}`); - return c.text("Vite asset server error", 500); - } - }; - app2.get("/@vite/*", proxyToVite); - app2.get("/@react-refresh", proxyToVite); - app2.get("/src/web/*", proxyToVite); - app2.get("/src/*", proxyToVite); - app2.get("/.agentuity/workbench-src/*", proxyToVite); - app2.get("/node_modules/*", proxyToVite); - app2.get("/@*", proxyToVite); - app2.get("/@fs/*", proxyToVite); - app2.get("/@id/*", proxyToVite); - app2.get("/*.js", proxyToVite); - app2.get("/*.jsx", proxyToVite); - app2.get("/*.ts", proxyToVite); - app2.get("/*.tsx", proxyToVite); - app2.get("/*.css", proxyToVite); -} -var { default: router_0 } = await Promise.resolve().then(() => (init_api4(), exports_api)); -app2.route("/api", router_0); -var hasWorkbenchConfig = true; -var hasWorkbench = isDevelopment() && hasWorkbenchConfig; -if (hasWorkbench) { - const workbenchRouter = createWorkbenchRouter(); - app2.route("/", workbenchRouter); -} -if (hasWorkbench) { - if (isDevelopment()) { - const workbenchSrcDir = import.meta.dir + "/workbench-src"; - const workbenchIndexPath = import.meta.dir + "/workbench-src/index.html"; - app2.get("/workbench", async (c) => { - const html = await Bun.file(workbenchIndexPath).text(); - const withVite = html.replace('src="./main.tsx"', `src="/@fs${workbenchSrcDir}/main.tsx"`).replace('href="./styles.css"', `href="/@fs${workbenchSrcDir}/styles.css"`); - return c.html(withVite); - }); - } else {} -} -await runAgentSetups(appState); -if (typeof Bun !== "undefined") { - enableProcessExitProtection(); - const port = parseInt(process.env.PORT || "3500", 10); - const server = Bun.serve({ - fetch: (req, server2) => { - server2.timeout(req, getAppConfig()?.requestTimeout ?? 0); - return app2.fetch(req, server2); - }, - websocket, - port, - hostname: "127.0.0.1", - development: isDevelopment() - }); - globalThis.__AGENTUITY_SERVER__ = server; - otel.logger.info(`Server listening on http://127.0.0.1:${port}`); - if (isDevelopment() && process.env.VITE_PORT) { - otel.logger.debug(`Proxying Vite assets from port ${process.env.VITE_PORT}`); - } -} - -//# debugId=9BA9F46ABADF94F464756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kaXN0L2pzb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kaXN0L2Vycm9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZGlzdC9zZXJ2aWNlcy9leGNlcHRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kaXN0L3NlcnZpY2VzL191dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZGlzdC9zZXJ2aWNlcy9rZXl2YWx1ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2NvcmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvcGFyc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9yZWdleGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvY2hlY2tzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvZG9jLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvdmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9zY2hlbWFzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvYXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9hei5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2JlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvYmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9jYS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2NzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvZGEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2VuLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvZW8uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ZhLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvZmkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9mci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ZyLUNBLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvaGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9odS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2h5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvaWQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9pcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2l0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvamEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9rYS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ttLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMva2guanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9rby5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2x0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvbWsuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9tcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL25sLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvbm8uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9vdGEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9wcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL3BsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvcHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9ydS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL3NsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvc3YuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy90YS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL3RoLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvdHIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy91ay5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL3VhLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvdXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy91ei5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL3ZpLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvemgtQ04uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy96aC1UVy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL3lvLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2xvY2FsZXMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9yZWdpc3RyaWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvYXBpLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvdG8tanNvbi1zY2hlbWEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvanNvbi1zY2hlbWEtZ2VuZXJhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9jaGVja3MuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9pc28uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9lcnJvcnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9wYXJzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi96b2RANC4zLjUvbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL3NjaGVtYXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9jb21wYXQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9mcm9tLWpzb24tc2NoZW1hLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvY29lcmNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3pvZEA0LjMuNS9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvZXh0ZXJuYWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vem9kQDQuMy41L25vZGVfbW9kdWxlcy96b2QvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kaXN0L3NlcnZpY2VzL3Nlc3Npb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kaXN0L3NlcnZpY2VzL3N0cmVhbS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2Rpc3Qvc2VydmljZXMvdmVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZGlzdC9zZXJ2aWNlcy9ldmFscnVuLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZGlzdC9zdHJpbmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2dsb2JhbFRoaXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9pbnRlcm5hbC9zZW12ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2ludGVybmFsL2dsb2JhbC11dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvZGlhZy9Db21wb25lbnRMb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2RpYWcvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2RpYWcvaW50ZXJuYWwvbG9nTGV2ZWxMb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2FwaS9kaWFnLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9iYWdnYWdlL2ludGVybmFsL2JhZ2dhZ2UtaW1wbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvYmFnZ2FnZS9pbnRlcm5hbC9zeW1ib2wuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2JhZ2dhZ2UvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2NvbnRleHQvY29udGV4dC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvZGlhZy9jb25zb2xlTG9nZ2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9tZXRyaWNzL05vb3BNZXRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvbWV0cmljcy9NZXRyaWMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3Byb3BhZ2F0aW9uL1RleHRNYXBQcm9wYWdhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9jb250ZXh0L05vb3BDb250ZXh0TWFuYWdlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvYXBpL2NvbnRleHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3RyYWNlL3RyYWNlX2ZsYWdzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy90cmFjZS9pbnZhbGlkLXNwYW4tY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy90cmFjZS9Ob25SZWNvcmRpbmdTcGFuLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy90cmFjZS9jb250ZXh0LXV0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy90cmFjZS9zcGFuY29udGV4dC11dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvdHJhY2UvTm9vcFRyYWNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvdHJhY2UvUHJveHlUcmFjZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3RyYWNlL05vb3BUcmFjZXJQcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvdHJhY2UvUHJveHlUcmFjZXJQcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvdHJhY2UvU2FtcGxpbmdSZXN1bHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3RyYWNlL3NwYW5fa2luZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvdHJhY2Uvc3RhdHVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy90cmFjZS9pbnRlcm5hbC90cmFjZXN0YXRlLXZhbGlkYXRvcnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3RyYWNlL2ludGVybmFsL3RyYWNlc3RhdGUtaW1wbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvdHJhY2UvaW50ZXJuYWwvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2NvbnRleHQtYXBpLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9kaWFnLWFwaS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvbWV0cmljcy9Ob29wTWV0ZXJQcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvYXBpL21ldHJpY3MuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL21ldHJpY3MtYXBpLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9wcm9wYWdhdGlvbi9Ob29wVGV4dE1hcFByb3BhZ2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2JhZ2dhZ2UvY29udGV4dC1oZWxwZXJzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy9hcGkvcHJvcGFnYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL3Byb3BhZ2F0aW9uLWFwaS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS9idWlsZC9zcmMvYXBpL3RyYWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpL2J1aWxkL3NyYy90cmFjZS1hcGkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGkvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvdXRpbHMvdXJsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvdXRpbHMvY29va2llLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvaGVscGVyL2Nvb2tpZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L2h0dHAtZXhjZXB0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvdXRpbHMvYnVmZmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvdmFsaWRhdG9yL3ZhbGlkYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L3ZhbGlkYXRvci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3QvX2NvbmZpZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvYXBpLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9hcGlrZXkvY3JlYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9hcGlrZXkvZGVsZXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9hcGlrZXkvZ2V0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9hcGlrZXkvbGlzdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvYXBpa2V5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9vcmcvdXRpbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvb3JnL2xpc3QuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL29yZy9yZXNvdXJjZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL29yZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvcHJvamVjdC9hZ2VudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvcHJvamVjdC9jcmVhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3Byb2plY3QvZGVsZXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9wcm9qZWN0L2RlcGxveS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvcHJvamVjdC9kZXBsb3ltZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9wcm9qZWN0L2Vudi1kZWxldGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3Byb2plY3QvZ2V0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9wcm9qZWN0L2Vudi11cGRhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3Byb2plY3QvZXhpc3RzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9wcm9qZWN0L2xpc3QuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3Byb2plY3QvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3JlZ2lvbi9saXN0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9yZWdpb24vcmVzb3VyY2VzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9yZWdpb24vY3JlYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9yZWdpb24vZGVsZXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9yZWdpb24vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3NhbmRib3gvdXRpbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvc2FuZGJveC9jcmVhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3NhbmRib3gvZmlsZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3NhbmRib3gvZXhlY3V0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvc2FuZGJveC9nZXQuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3NhbmRib3gvbGlzdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvc2FuZGJveC9kZXN0cm95LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2NvbmZpZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9hcGkvc2FuZGJveC9ydW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3NhbmRib3gvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2VydmVyL2Rpc3QvYXBpL3VzZXIvd2hvYW1pLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS91c2VyL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L2FwaS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9zZXJ2ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2NoZW1hL2Rpc3QvYmFzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC91dGlscy9udWxsYWJsZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC91dGlscy9vcHRpb25hbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9wcmltaXRpdmVzL3N0cmluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9wcmltaXRpdmVzL251bWJlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9wcmltaXRpdmVzL2Jvb2xlYW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2NoZW1hL2Rpc3QvcHJpbWl0aXZlcy9udWxsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L3ByaW1pdGl2ZXMvdW5kZWZpbmVkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L3ByaW1pdGl2ZXMvdW5rbm93bi5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9wcmltaXRpdmVzL2FueS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9jb21wbGV4L29iamVjdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9jb21wbGV4L2FycmF5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L2NvbXBsZXgvcmVjb3JkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L3V0aWxzL2xpdGVyYWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2NoZW1hL2Rpc3QvdXRpbHMvdW5pb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2NoZW1hL2Rpc3QvanNvbi1zY2hlbWEuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc2NoZW1hL2Rpc3QvY29lcmNlL3N0cmluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zY2hlbWEvZGlzdC9jb2VyY2UvbnVtYmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L2NvZXJjZS9ib29sZWFuLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L2NvZXJjZS9kYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NjaGVtYS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NlcnZlci9kaXN0L3NjaGVtYS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9ydW50aW1lLWJvb3RzdHJhcC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zZXJ2ZXIvZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvc2FuZGJveC9odHRwLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9zZXJ2aWNlcy9zYW5kYm94L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9zZXJ2aWNlcy9zZXNzaW9uL2NvbXBvc2l0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3QvbG9nZ2VyL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L2xvZ2dlci9pbnRlcm5hbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvc2Vzc2lvbi9odHRwLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9zZXJ2aWNlcy9zZXNzaW9uL2pzb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L3NlcnZpY2VzL3Nlc3Npb24vbG9jYWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L3NlcnZpY2VzL3Nlc3Npb24vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L3NlcnZpY2VzL2V2YWxydW4vaHR0cC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvZXZhbHJ1bi9sb2NhbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvZXZhbHJ1bi9qc29uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9zZXJ2aWNlcy9ldmFscnVuL2NvbXBvc2l0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvZXZhbHJ1bi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3QvX2V2ZW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2FpLXNlbWFudGljLWNvbnZlbnRpb25zQDAuMjEuMC9ub2RlX21vZHVsZXMvQHRyYWNlbG9vcC9haS1zZW1hbnRpYy1jb252ZW50aW9ucy9kaXN0L3NyYy9TZW1hbnRpY0F0dHJpYnV0ZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHRyYWNlbG9vcCthaS1zZW1hbnRpYy1jb252ZW50aW9uc0AwLjIxLjAvbm9kZV9tb2R1bGVzL0B0cmFjZWxvb3AvYWktc2VtYW50aWMtY29udmVudGlvbnMvZGlzdC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L190b2tlbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L19zZXJ2ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L2FwcC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2Vzc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvbG9jYWwvX2RiLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9zZXJ2aWNlcy90aHJlYWQvbG9jYWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L290ZWwvaHR0cC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvbG9jYWwvX3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9jb21wb3NlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvcmVxdWVzdC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC91dGlscy9ib2R5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvcmVxdWVzdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L3V0aWxzL2h0bWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9jb250ZXh0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3Qvcm91dGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvdXRpbHMvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvaG9uby1iYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3Qvcm91dGVyL3JlZy1leHAtcm91dGVyL21hdGNoZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9yb3V0ZXIvcmVnLWV4cC1yb3V0ZXIvbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L3JvdXRlci9yZWctZXhwLXJvdXRlci90cmllLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3Qvcm91dGVyL3JlZy1leHAtcm91dGVyL3JvdXRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L3JvdXRlci9yZWctZXhwLXJvdXRlci9wcmVwYXJlZC1yb3V0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9yb3V0ZXIvcmVnLWV4cC1yb3V0ZXIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9yb3V0ZXIvc21hcnQtcm91dGVyL3JvdXRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L3JvdXRlci9zbWFydC1yb3V0ZXIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9yb3V0ZXIvdHJpZS1yb3V0ZXIvbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L3JvdXRlci90cmllLXJvdXRlci9yb3V0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9yb3V0ZXIvdHJpZS1yb3V0ZXIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9ob25vLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L191dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9yb3V0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L3NlcnZpY2VzL2xvY2FsL19yb3V0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L3NlcnZpY2VzL2xvY2FsL2tleXZhbHVlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9zZXJ2aWNlcy9sb2NhbC9zdHJlYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L3NlcnZpY2VzL2xvY2FsL3ZlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvc2VydmljZXMvbG9jYWwvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L19zZXJ2aWNlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3QvX2NvbnRleHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L192YWxpZGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9fbWV0YWRhdGEuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L2FnZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9jb3JzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvaGVscGVyL2ZhY3RvcnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9taWRkbGV3YXJlL2NvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC91dGlscy9jb21wcmVzcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L21pZGRsZXdhcmUvY29tcHJlc3MvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy90cmFjZS9zdXBwcmVzcy10cmFjaW5nLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvYmFnZ2FnZS9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9iYWdnYWdlL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvYmFnZ2FnZS9wcm9wYWdhdGlvbi9XM0NCYWdnYWdlUHJvcGFnYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2NvbW1vbi9hbmNob3JlZC1jbG9jay5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2NvbW1vbi9hdHRyaWJ1dGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvY29tbW9uL2xvZ2dpbmctZXJyb3ItaGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2NvbW1vbi9nbG9iYWwtZXJyb3ItaGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9jb21tb24vZ2xvYmFsVGhpcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2VtYW50aWMtY29udmVudGlvbnNAMS4zOC4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy9idWlsZC9zcmMvaW50ZXJuYWwvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2VtYW50aWMtY29udmVudGlvbnNAMS4zOC4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy9idWlsZC9zcmMvdHJhY2UvU2VtYW50aWNBdHRyaWJ1dGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3NlbWFudGljLWNvbnZlbnRpb25zQDEuMzguMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYnVpbGQvc3JjL3RyYWNlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3NlbWFudGljLWNvbnZlbnRpb25zQDEuMzguMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYnVpbGQvc3JjL3Jlc291cmNlL1NlbWFudGljUmVzb3VyY2VBdHRyaWJ1dGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3NlbWFudGljLWNvbnZlbnRpb25zQDEuMzguMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYnVpbGQvc3JjL3Jlc291cmNlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3NlbWFudGljLWNvbnZlbnRpb25zQDEuMzguMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYnVpbGQvc3JjL3N0YWJsZV9hdHRyaWJ1dGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3NlbWFudGljLWNvbnZlbnRpb25zQDEuMzguMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYnVpbGQvc3JjL3N0YWJsZV9tZXRyaWNzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3NlbWFudGljLWNvbnZlbnRpb25zQDEuMzguMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYnVpbGQvc3JjL3N0YWJsZV9ldmVudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2VtYW50aWMtY29udmVudGlvbnNAMS4zOC4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9zZGstaW5mby5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2NvbW1vbi90aW1lLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvY29tbW9uL3RpbWVyLXV0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9FeHBvcnRSZXN1bHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wcm9wYWdhdGlvbi9jb21wb3NpdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9pbnRlcm5hbC92YWxpZGF0b3JzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdHJhY2UvVHJhY2VTdGF0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3RyYWNlL1czQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy90cmFjZS9ycGMtbWV0YWRhdGEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9sb2Rhc2gubWVyZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9tZXJnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL3RpbWVvdXQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy91cmwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9wcm9taXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdXRpbHMvY2FsbGJhY2suanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvaW50ZXJuYWwvZXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L2hlbHBlci9zdHJlYW1pbmcvc3RyZWFtLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvaGVscGVyL3N0cmVhbWluZy9zc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9oZWxwZXIvc3RyZWFtaW5nL3RleHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9oZWxwZXIvc3RyZWFtaW5nL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9oYW5kbGVycy9zc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L193YWl0dW50aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L21pZGRsZXdhcmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGVmYXVsdC1zZXJ2aWNlLW5hbWUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvUmVzb3VyY2VJbXBsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdC1yZXNvdXJjZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL0VudkRldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9leGVjQXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQtZGFyd2luLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9wbGF0Zm9ybS9ub2RlL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkLWxpbnV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9wbGF0Zm9ybS9ub2RlL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkLWJzZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC13aW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQtdW5zdXBwb3J0ZWQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvSG9zdERldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9wbGF0Zm9ybS9ub2RlL09TRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvUHJvY2Vzc0RldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9wbGF0Zm9ybS9ub2RlL1NlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9Ob29wRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL2VzbS9leHBvcnQvQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9lc20vcGxhdGZvcm0vbm9kZS9leHBvcnQvQmF0Y2hTcGFuUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL2VzbS9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL2VzbS9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9lc20vZXhwb3J0L1NpbXBsZVNwYW5Qcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaS1sb2dzQDAuMjA3LjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS1sb2dzL2J1aWxkL3NyYy90eXBlcy9Mb2dSZWNvcmQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDcuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL05vb3BMb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDcuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL05vb3BMb2dnZXJQcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwNy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvUHJveHlMb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDcuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL1Byb3h5TG9nZ2VyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDcuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZ2xvYmFsVGhpcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwNy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwNy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDcuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL2ludGVybmFsL2dsb2JhbC11dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwNy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvYXBpL2xvZ3MuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDcuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdHJhY2Uvc3VwcHJlc3MtdHJhY2luZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2JhZ2dhZ2UvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvYmFnZ2FnZS91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2JhZ2dhZ2UvcHJvcGFnYXRpb24vVzNDQmFnZ2FnZVByb3BhZ2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9jb21tb24vYW5jaG9yZWQtY2xvY2suanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9jb21tb24vYXR0cmlidXRlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2NvbW1vbi9sb2dnaW5nLWVycm9yLWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9jb21tb24vZ2xvYmFsLWVycm9yLWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2Vudmlyb25tZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9nbG9iYWxUaGlzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9wZXJmb3JtYW5jZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9zZGstaW5mby5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2NvbW1vbi90aW1lLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvY29tbW9uL3RpbWVyLXV0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9FeHBvcnRSZXN1bHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wcm9wYWdhdGlvbi9jb21wb3NpdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9pbnRlcm5hbC92YWxpZGF0b3JzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdHJhY2UvVHJhY2VTdGF0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3RyYWNlL1czQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy90cmFjZS9ycGMtbWV0YWRhdGEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9sb2Rhc2gubWVyZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9tZXJnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL3RpbWVvdXQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy91cmwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9wcm9taXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdXRpbHMvY2FsbGJhY2suanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvaW50ZXJuYWwvZXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL2F1dG9Mb2FkZXJVdGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL2F1dG9Mb2FkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9zZW12ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9zaGltbWVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9kZWJ1Z0A0LjQuMy9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9kZWJ1Z0A0LjQuMy9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaGFzLWZsYWdANC4wLjAvbm9kZV9tb2R1bGVzL2hhcy1mbGFnL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3N1cHBvcnRzLWNvbG9yQDguMS4xL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9kZWJ1Z0A0LjQuMy9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZGVidWdANC40LjMvbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9tb2R1bGUtZGV0YWlscy1mcm9tLXBhdGhAMS4wLjQvbm9kZV9tb2R1bGVzL21vZHVsZS1kZXRhaWxzLWZyb20tcGF0aC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9yZXF1aXJlLWluLXRoZS1taWRkbGVAOC4wLjEvbm9kZV9tb2R1bGVzL3JlcXVpcmUtaW4tdGhlLW1pZGRsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvTW9kdWxlTmFtZVRyaWUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL1JlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9pbXBvcnQtaW4tdGhlLW1pZGRsZUAyLjAuMS9ub2RlX21vZHVsZXMvaW1wb3J0LWluLXRoZS1taWRkbGUvbGliL3JlZ2lzdGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2ltcG9ydC1pbi10aGUtbWlkZGxlQDIuMC4xL25vZGVfbW9kdWxlcy9pbXBvcnQtaW4tdGhlLW1pZGRsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL25vcm1hbGl6ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9zZW1jb252U3RhYmlsaXR5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWFtcXBsaWJAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hbXFwbGliL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hbXFwbGliQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYW1xcGxpYi9idWlsZC9zcmMvc2VtY29udi1vYnNvbGV0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYW1xcGxpYkAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWFtcXBsaWIvYnVpbGQvc3JjL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hbXFwbGliQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYW1xcGxpYi9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWFtcXBsaWJAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hbXFwbGliL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hbXFwbGliQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYW1xcGxpYi9idWlsZC9zcmMvYW1xcGxpYi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYW1xcGxpYkAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWFtcXBsaWIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3MtbGFtYmRhQDAuNTkuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLWxhbWJkYS9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLWxhbWJkYUAwLjU5LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1sYW1iZGEvYnVpbGQvc3JjL3NlbWNvbnYtb2Jzb2xldGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWF3cy1sYW1iZGFAMC41OS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3MtbGFtYmRhL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3MtbGFtYmRhQDAuNTkuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLWxhbWJkYS9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3MtbGFtYmRhQDAuNTkuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLWxhbWJkYS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWF3cy1zZGtAMC42My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrL2J1aWxkL3NyYy9lbnVtcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWF3cy1zZGtAMC42My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrL2J1aWxkL3NyYy9zZXJ2aWNlcy9NZXNzYWdlQXR0cmlidXRlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL3Nxcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL2JlZHJvY2stcnVudGltZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL2R5bmFtb2RiLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvc2VydmljZXMvc2VjcmV0c21hbmFnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWF3cy1zZGtAMC42My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrL2J1aWxkL3NyYy9zZW1jb252LW9ic29sZXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvc2VydmljZXMvc25zLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvc2VydmljZXMvc3RlcGZ1bmN0aW9ucy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL2xhbWJkYS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL3MzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvc2VydmljZXMva2luZXNpcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL1NlcnZpY2VzRXh0ZW5zaW9ucy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3NlcnZpY2VzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYXdzLXNka0AwLjYzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1zZGsvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvcHJvcHdyYXAuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWF3cy1zZGtAMC42My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrL2J1aWxkL3NyYy9hd3Mtc2RrLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrQDAuNjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkay9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWJ1bnlhbkAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWJ1bnlhbi9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYnVueWFuQDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYnVueWFuL2J1aWxkL3NyYy9PcGVuVGVsZW1ldHJ5QnVueWFuU3RyZWFtLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1idW55YW5AMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1idW55YW4vYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tYnVueWFuQDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYnVueWFuL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tY2Fzc2FuZHJhLWRyaXZlckAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWNhc3NhbmRyYS1kcml2ZXIvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWNhc3NhbmRyYS1kcml2ZXJAMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jYXNzYW5kcmEtZHJpdmVyL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1jYXNzYW5kcmEtZHJpdmVyQDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY2Fzc2FuZHJhLWRyaXZlci9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1jYXNzYW5kcmEtZHJpdmVyQDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY2Fzc2FuZHJhLWRyaXZlci9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWNvbm5lY3RAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jb25uZWN0L2J1aWxkL3NyYy9lbnVtcy9BdHRyaWJ1dGVOYW1lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tY29ubmVjdEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWNvbm5lY3QvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWNvbm5lY3RAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jb25uZWN0L2J1aWxkL3NyYy9pbnRlcm5hbC10eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tY29ubmVjdEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWNvbm5lY3QvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1jb25uZWN0QDAuNTEuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY29ubmVjdC9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1jb25uZWN0QDAuNTEuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY29ubmVjdC9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWN1Y3VtYmVyQDAuMjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY3VjdW1iZXIvYnVpbGQvc3JjL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1jdWN1bWJlckAwLjIzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWN1Y3VtYmVyL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1jdWN1bWJlckAwLjIzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWN1Y3VtYmVyL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWN1Y3VtYmVyQDAuMjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY3VjdW1iZXIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1kYXRhbG9hZGVyQDAuMjUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZGF0YWxvYWRlci9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZGF0YWxvYWRlckAwLjI1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRhdGFsb2FkZXIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZGF0YWxvYWRlckAwLjI1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRhdGFsb2FkZXIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1kbnNAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1kbnMvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1kbnNAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1kbnMvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1kbnNAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1kbnMvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWRuc0AwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRucy9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1kbnNAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1kbnMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1leHByZXNzQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZXhwcmVzcy9idWlsZC9zcmMvZW51bXMvRXhwcmVzc0xheWVyVHlwZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZXhwcmVzc0AwLjU2LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWV4cHJlc3MvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1leHByZXNzQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZXhwcmVzcy9idWlsZC9zcmMvaW50ZXJuYWwtdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWV4cHJlc3NAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1leHByZXNzL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZXhwcmVzc0AwLjU2LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWV4cHJlc3MvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWV4cHJlc3NAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1leHByZXNzL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWV4cHJlc3NAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1leHByZXNzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZmFzdGlmeUAwLjUyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZhc3RpZnkvYnVpbGQvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZmFzdGlmeUAwLjUyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZhc3RpZnkvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5QDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZmFzdGlmeS9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWZhc3RpZnlAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5L2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5QDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZmFzdGlmeS9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5QDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZmFzdGlmeS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWZzQDAuMjcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZnMvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWZzQDAuMjcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZnMvYnVpbGQvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZnNAMC4yNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcy9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWZzQDAuMjcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZnMvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZnNAMC4yNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdlbmVyaWMtcG9vbEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdlbmVyaWMtcG9vbC9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZ2VuZXJpYy1wb29sQDAuNTEuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZ2VuZXJpYy1wb29sL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdlbmVyaWMtcG9vbEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdlbmVyaWMtcG9vbC9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdyYXBocWxAMC41NS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsL2J1aWxkL3NyYy9lbnVtLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncmFwaHFsQDAuNTUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZ3JhcGhxbC9idWlsZC9zcmMvZW51bXMvQXR0cmlidXRlTmFtZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdyYXBocWxAMC41NS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsL2J1aWxkL3NyYy9zeW1ib2xzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncmFwaHFsQDAuNTUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZ3JhcGhxbC9idWlsZC9zcmMvaW50ZXJuYWwtdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdyYXBocWxAMC41NS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZ3JhcGhxbEAwLjU1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdyYXBocWwvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdyYXBocWxAMC41NS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWdyYXBocWxAMC41NS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZ3JwY0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncnBjL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdycGMvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdycGMvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdycGMvYnVpbGQvc3JjL3NlcnZlclV0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdycGMvYnVpbGQvc3JjL2NsaWVudFV0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdycGMvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZVZhbHVlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZ3JwY0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncnBjL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWdycGMvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tZ3JwY0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncnBjL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taGFwaUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWhhcGkvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWhhcGlAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1oYXBpL2J1aWxkL3NyYy9pbnRlcm5hbC10eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taGFwaUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWhhcGkvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWhhcGlAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1oYXBpL2J1aWxkL3NyYy9lbnVtcy9BdHRyaWJ1dGVOYW1lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taGFwaUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWhhcGkvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1oYXBpQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taGFwaS9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1oYXBpQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taGFwaS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWh0dHBAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cC9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2ZvcndhcmRlZC1wYXJzZUAyLjEuMi9ub2RlX21vZHVsZXMvZm9yd2FyZGVkLXBhcnNlL2xpYi9lcnJvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9mb3J3YXJkZWQtcGFyc2VAMi4xLjIvbm9kZV9tb2R1bGVzL2ZvcndhcmRlZC1wYXJzZS9saWIvYXNjaWkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZm9yd2FyZGVkLXBhcnNlQDIuMS4yL25vZGVfbW9kdWxlcy9mb3J3YXJkZWQtcGFyc2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWh0dHBAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cC9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWh0dHBAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cC9idWlsZC9zcmMvaHR0cC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taW9yZWRpc0AwLjU1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWlvcmVkaXMvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWlvcmVkaXNAMC41NS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1pb3JlZGlzL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZWRpcy1jb21tb25AMC4zOC4yL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZWRpcy1jb21tb24vYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1pb3JlZGlzQDAuNTUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taW9yZWRpcy9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taW9yZWRpc0AwLjU1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWlvcmVkaXMvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24taW9yZWRpc0AwLjU1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWlvcmVkaXMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rYWZrYWpzQDAuMTcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta2Fma2Fqcy9idWlsZC9zcmMvaW50ZXJuYWwtdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWthZmthanNAMC4xNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rYWZrYWpzL2J1aWxkL3NyYy9wcm9wYWdhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rYWZrYWpzQDAuMTcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta2Fma2Fqcy9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24ta2Fma2Fqc0AwLjE3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWthZmthanMvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWthZmthanNAMC4xNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rYWZrYWpzL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWthZmthanNAMC4xNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rYWZrYWpzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24ta25leEAwLjUyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWtuZXgvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWtuZXhAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4L2J1aWxkL3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWtuZXhAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4L2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rbmV4QDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta25leC9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWtuZXhAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4L2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLWtuZXhAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4L2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24ta29hQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta29hL2J1aWxkL3NyYy90eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24ta29hQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta29hL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rb2FAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rb2EvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rb2FAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rb2EvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rb2FAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rb2EvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1rb2FAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rb2EvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24ta29hQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta29hL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbHJ1LW1lbW9pemVyQDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbHJ1LW1lbW9pemVyL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1scnUtbWVtb2l6ZXJAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1scnUtbWVtb2l6ZXIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbHJ1LW1lbW9pemVyQDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbHJ1LW1lbW9pemVyL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbWVtY2FjaGVkQDAuNTEuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbWVtY2FjaGVkL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWRAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWQvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWRAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWQvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1lbWNhY2hlZEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1lbWNhY2hlZC9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWRAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWQvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb2RiQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjYwLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2ludGVybmFsLXR5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb2RiQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjYwLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29kYkAwLjYwLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvZGIvYnVpbGQvc3JjL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb2RiQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYi9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvb3NlQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29vc2UvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW1vbmdvb3NlQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29vc2UvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb29zZUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvb3NlL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1tb25nb29zZUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvb3NlL2J1aWxkL3NyYy9tb25nb29zZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbW9uZ29vc2VAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tb25nb29zZS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW15c3FsMkAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW15c3FsMi9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzcWwtY29tbW9uQDAuNDEuMis0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zcWwtY29tbW9uL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbXlzcWwyQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbXlzcWwyL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbXlzcWwyQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbXlzcWwyL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1teXNxbDJAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1teXNxbDIvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbXlzcWwyQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbXlzcWwyL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbXlzcWxAMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1teXNxbC9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbXlzcWxAMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1teXNxbC9idWlsZC9zcmMvQXR0cmlidXRlTmFtZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW15c3FsQDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbXlzcWwvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1teXNxbEAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW15c3FsL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1teXNxbEAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW15c3FsL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW15c3FsQDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbXlzcWwvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1uZXN0anMtY29yZUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1uZXN0anMtY29yZUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1uZXN0anMtY29yZUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlL2J1aWxkL3NyYy9lbnVtcy9BdHRyaWJ1dGVOYW1lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbmVzdGpzLWNvcmVAMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1uZXN0anMtY29yZS9idWlsZC9zcmMvZW51bXMvTmVzdFR5cGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbmVzdGpzLWNvcmUvYnVpbGQvc3JjL2VudW1zL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1uZXN0anMtY29yZUAwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbmVzdGpzLWNvcmUvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1uZXRAMC41MS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1uZXQvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5ldEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5ldC9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5ldEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5ldC9idWlsZC9zcmMvaW50ZXJuYWwtdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5ldEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5ldC9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5ldEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5ldC9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tbmV0QDAuNTEuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbmV0L2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW5ldEAwLjUxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5ldC9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW9wZW5haUAwLjUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tb3BlbmFpL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1vcGVuYWlAMC41LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9wZW5haS9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tb3BlbmFpQDAuNS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1vcGVuYWkvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1vcGVuYWlAMC41LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9wZW5haS9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1vcGVuYWlAMC41LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9wZW5haS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW9yYWNsZWRiQDAuMzMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tb3JhY2xlZGIvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW9yYWNsZWRiQDAuMzMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tb3JhY2xlZGIvYnVpbGQvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tb3JhY2xlZGJAMC4zMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1vcmFjbGVkYi9idWlsZC9zcmMvT3JhY2xlVGVsZW1ldHJ5VHJhY2VIYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1vcmFjbGVkYkAwLjMzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9yYWNsZWRiL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1vcmFjbGVkYkAwLjMzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9yYWNsZWRiL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLW9yYWNsZWRiQDAuMzMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tb3JhY2xlZGIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1wZ0AwLjYwLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXBnL2J1aWxkL3NyYy9pbnRlcm5hbC10eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcGdAMC42MC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1wZy9idWlsZC9zcmMvZW51bXMvQXR0cmlidXRlTmFtZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBnQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGcvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBnQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGcvYnVpbGQvc3JjL2VudW1zL1NwYW5OYW1lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcGdAMC42MC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1wZy9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBnQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGcvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBnQDAuNjAuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGcvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcGdAMC42MC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1wZy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBpbm9AMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1waW5vL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1waW5vQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGluby9idWlsZC9zcmMvbG9nLXNlbmRpbmctdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBpbm9AMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1waW5vL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXBpbm9AMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1waW5vL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVkaXNAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZWRpcy9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVkaXNAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZWRpcy9idWlsZC9zcmMvdjItdjMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlZGlzQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXMvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlZGlzQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXMvYnVpbGQvc3JjL3YyLXYzL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVkaXNAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZWRpcy9idWlsZC9zcmMvdjQtdjUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlZGlzQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXMvYnVpbGQvc3JjL3Y0LXY1L2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVkaXNAMC41Ni4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZWRpcy9idWlsZC9zcmMvcmVkaXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlZGlzQDAuNTYuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1yZXN0aWZ5QDAuNTMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVzdGlmeS9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlc3RpZnlAMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZXN0aWZ5L2J1aWxkL3NyYy9lbnVtcy9BdHRyaWJ1dGVOYW1lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVzdGlmeUAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJlc3RpZnkvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlc3RpZnlAMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZXN0aWZ5L2J1aWxkL3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJlc3RpZnlAMC41My4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZXN0aWZ5L2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVzdGlmeUAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJlc3RpZnkvYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcmVzdGlmeUAwLjUzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJlc3RpZnkvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1yb3V0ZXJAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yb3V0ZXIvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJvdXRlckAwLjUyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJvdXRlci9idWlsZC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1yb3V0ZXJAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yb3V0ZXIvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1yb3V0ZXJAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yb3V0ZXIvYnVpbGQvc3JjL2VudW1zL0F0dHJpYnV0ZU5hbWVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1yb3V0ZXJAMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yb3V0ZXIvYnVpbGQvc3JjL2VudW1zL0xheWVyVHlwZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcm91dGVyQDAuNTIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcm91dGVyL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJvdXRlckAwLjUyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJvdXRlci9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZUAwLjIxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZS9idWlsZC9zcmMvbWV0cmljcy9iYXNlQ29sbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGVAMC4yMS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGUvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZUAwLjIxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZS9idWlsZC9zcmMvbWV0cmljcy9ldmVudExvb3BVdGlsaXphdGlvbkNvbGxlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tcnVudGltZS1ub2RlQDAuMjEuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcnVudGltZS1ub2RlL2J1aWxkL3NyYy9tZXRyaWNzL2V2ZW50TG9vcERlbGF5Q29sbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGVAMC4yMS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGUvYnVpbGQvc3JjL21ldHJpY3MvZ2NDb2xsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZUAwLjIxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZS9idWlsZC9zcmMvbWV0cmljcy9oZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZUAwLjIxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZS9idWlsZC9zcmMvbWV0cmljcy9ldmVudExvb3BUaW1lQ29sbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGVAMC4yMS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGUvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZUAwLjIxLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZS9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGVAMC4yMS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ydW50aW1lLW5vZGUvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW9AMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW8vYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXNvY2tldC5pb0AwLjU0LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXNvY2tldC5pby9idWlsZC9zcmMvc2VtY29udi1vYnNvbGV0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tc29ja2V0LmlvQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tc29ja2V0LmlvL2J1aWxkL3NyYy9BdHRyaWJ1dGVOYW1lcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tc29ja2V0LmlvQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tc29ja2V0LmlvL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW9AMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW8vYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW9AMC41NC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW8vYnVpbGQvc3JjL3NvY2tldC5pby5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tc29ja2V0LmlvQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tc29ja2V0LmlvL2J1aWxkL3NyYy90eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tc29ja2V0LmlvQDAuNTQuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tc29ja2V0LmlvL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tdGVkaW91c0AwLjI2LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXRlZGlvdXMvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXRlZGlvdXNAMC4yNi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi10ZWRpb3VzL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tdGVkaW91c0AwLjI2LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXRlZGlvdXMvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXRlZGlvdXNAMC4yNi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi10ZWRpb3VzL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXRlZGlvdXNAMC4yNi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi10ZWRpb3VzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tdW5kaWNpQDAuMTguMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdW5kaWNpL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbi11bmRpY2lAMC4xOC4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi11bmRpY2kvYnVpbGQvc3JjL3VuZGljaS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24tdW5kaWNpQDAuMTguMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdW5kaWNpL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb24td2luc3RvbkAwLjUyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXdpbnN0b24vYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXdpbnN0b25AMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi13aW5zdG9uL2J1aWxkL3NyYy9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uLXdpbnN0b25AMC41Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi13aW5zdG9uL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1hbGliYWJhLWNsb3VkQDAuMzEuMTErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItYWxpYmFiYS1jbG91ZC9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1hbGliYWJhLWNsb3VkQDAuMzEuMTErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItYWxpYmFiYS1jbG91ZC9idWlsZC9zcmMvZGV0ZWN0b3JzL0FsaWJhYmFDbG91ZEVjc0RldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWFsaWJhYmEtY2xvdWRAMC4zMS4xMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1hbGliYWJhLWNsb3VkL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYWxpYmFiYS1jbG91ZEAwLjMxLjExKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWFsaWJhYmEtY2xvdWQvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWF3c0AyLjkuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1hd3MvYnVpbGQvc3JjL3NlbWNvbnYuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXdzQDIuOS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF3cy9idWlsZC9zcmMvZGV0ZWN0b3JzL0F3c0JlYW5zdGFsa0RldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWF3c0AyLjkuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1hd3MvYnVpbGQvc3JjL2RldGVjdG9ycy9Bd3NFYzJEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1hd3NAMi45LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItYXdzL2J1aWxkL3NyYy9kZXRlY3RvcnMvQXdzRWNzRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXdzQDIuOS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF3cy9idWlsZC9zcmMvZGV0ZWN0b3JzL0F3c0Vrc0RldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWF3c0AyLjkuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1hd3MvYnVpbGQvc3JjL2RldGVjdG9ycy9Bd3NMYW1iZGFEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1hd3NAMi45LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItYXdzL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXdzQDIuOS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF3cy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItY29udGFpbmVyQDAuNy4xMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1jb250YWluZXIvYnVpbGQvc3JjL2RldGVjdG9ycy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1jb250YWluZXJAMC43LjExKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWNvbnRhaW5lci9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1jb250YWluZXJAMC43LjExKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWNvbnRhaW5lci9idWlsZC9zcmMvZGV0ZWN0b3JzL0NvbnRhaW5lckRldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWNvbnRhaW5lckAwLjcuMTErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItY29udGFpbmVyL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItY29udGFpbmVyQDAuNy4xMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1jb250YWluZXIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWdjcEAwLjQyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItZ2NwL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZGVmYXVsdC1zZXJ2aWNlLW5hbWUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9SZXNvdXJjZUltcGwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0LXJlc291cmNlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvRW52RGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2V4ZWNBc3luYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC1kYXJ3aW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQtbGludXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQtYnNkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9wbGF0Zm9ybS9ub2RlL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkLXdpbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC11bnN1cHBvcnRlZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9Ib3N0RGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvT1NEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9Qcm9jZXNzRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvU2VydmljZUluc3RhbmNlSWREZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL05vb3BEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZXh0ZW5kQDMuMC4yL25vZGVfbW9kdWxlcy9leHRlbmQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaXMtc3RyZWFtQDIuMC4xL25vZGVfbW9kdWxlcy9pcy1zdHJlYW0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ2F4aW9zQDYuNy4xL25vZGVfbW9kdWxlcy9nYXhpb3MvYnVpbGQvc3JjL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ2F4aW9zQDYuNy4xL25vZGVfbW9kdWxlcy9nYXhpb3MvYnVpbGQvc3JjL2NvbW1vbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nYXhpb3NANi43LjEvbm9kZV9tb2R1bGVzL2dheGlvcy9idWlsZC9zcmMvcmV0cnkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEA5LjAuMS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JuZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDkuMC4xL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvcmVnZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEA5LjAuMS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3ZhbGlkYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9zdHJpbmdpZnkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEA5LjAuMS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3YxLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9wYXJzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDkuMC4xL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjM1LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9tZDUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEA5LjAuMS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3YzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9uYXRpdmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEA5LjAuMS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3Y0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9zaGExLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92NS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDkuMC4xL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbmlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAOS4wLjEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nYXhpb3NANi43LjEvbm9kZV9tb2R1bGVzL2dheGlvcy9idWlsZC9zcmMvaW50ZXJjZXB0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vYWdlbnQtYmFzZUA3LjEuNC9ub2RlX21vZHVsZXMvYWdlbnQtYmFzZS9kaXN0L2hlbHBlcnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vYWdlbnQtYmFzZUA3LjEuNC9ub2RlX21vZHVsZXMvYWdlbnQtYmFzZS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2h0dHBzLXByb3h5LWFnZW50QDcuMC42L25vZGVfbW9kdWxlcy9odHRwcy1wcm94eS1hZ2VudC9kaXN0L3BhcnNlLXByb3h5LXJlc3BvbnNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2h0dHBzLXByb3h5LWFnZW50QDcuMC42L25vZGVfbW9kdWxlcy9odHRwcy1wcm94eS1hZ2VudC9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dheGlvc0A2LjcuMS9ub2RlX21vZHVsZXMvZ2F4aW9zL2J1aWxkL3NyYy9nYXhpb3MuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ2F4aW9zQDYuNy4xL25vZGVfbW9kdWxlcy9nYXhpb3MvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2JpZ251bWJlci5qc0A5LjMuMS9ub2RlX21vZHVsZXMvYmlnbnVtYmVyLmpzL2JpZ251bWJlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9qc29uLWJpZ2ludEAxLjAuMC9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9qc29uLWJpZ2ludEAxLjAuMC9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2pzb24tYmlnaW50QDEuMC4wL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nY3AtbWV0YWRhdGFANi4xLjEvbm9kZV9tb2R1bGVzL2djcC1tZXRhZGF0YS9idWlsZC9zcmMvZ2NwLXJlc2lkZW5jeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtbG9nZ2luZy11dGlsc0AwLjAuMi9ub2RlX21vZHVsZXMvZ29vZ2xlLWxvZ2dpbmctdXRpbHMvYnVpbGQvc3JjL2NvbG91cnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWxvZ2dpbmctdXRpbHNAMC4wLjIvbm9kZV9tb2R1bGVzL2dvb2dsZS1sb2dnaW5nLXV0aWxzL2J1aWxkL3NyYy9sb2dnaW5nLXV0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1sb2dnaW5nLXV0aWxzQDAuMC4yL25vZGVfbW9kdWxlcy9nb29nbGUtbG9nZ2luZy11dGlscy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ2NwLW1ldGFkYXRhQDYuMS4xL25vZGVfbW9kdWxlcy9nY3AtbWV0YWRhdGEvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWdjcEAwLjQyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItZ2NwL2J1aWxkL3NyYy9kZXRlY3RvcnMvZmFhcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1nY3BAMC40Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWdjcC9idWlsZC9zcmMvZGV0ZWN0b3JzL2djZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1nY3BAMC40Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWdjcC9idWlsZC9zcmMvZGV0ZWN0b3JzL2dhZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1nY3BAMC40Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWdjcC9idWlsZC9zcmMvZGV0ZWN0b3JzL2drZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1nY3BAMC40Mi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWdjcC9idWlsZC9zcmMvZGV0ZWN0b3JzL0djcERldGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWdjcEAwLjQyLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItZ2NwL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItZ2NwQDAuNDIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1nY3AvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWF6dXJlQDAuMTUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1henVyZS9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXp1cmVAMC4xNS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF6dXJlL2J1aWxkL3NyYy9zZW1jb252LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlLWRldGVjdG9yLWF6dXJlQDAuMTUuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1henVyZS9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXp1cmVAMC4xNS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF6dXJlL2J1aWxkL3NyYy9kZXRlY3RvcnMvQXp1cmVBcHBTZXJ2aWNlRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXp1cmVAMC4xNS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF6dXJlL2J1aWxkL3NyYy9kZXRlY3RvcnMvQXp1cmVGdW5jdGlvbnNEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZS1kZXRlY3Rvci1henVyZUAwLjE1LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItYXp1cmUvYnVpbGQvc3JjL2RldGVjdG9ycy9BenVyZVZtRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXp1cmVAMC4xNS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF6dXJlL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2UtZGV0ZWN0b3ItYXp1cmVAMC4xNS4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlLWRldGVjdG9yLWF6dXJlL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthdXRvLWluc3RydW1lbnRhdGlvbnMtbm9kZUAwLjY2LjArZDExNjAxOTkyNjNlZjRkMi9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXV0by1pbnN0cnVtZW50YXRpb25zLW5vZGUvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2F1dG8taW5zdHJ1bWVudGF0aW9ucy1ub2RlQDAuNjYuMCtkMTE2MDE5OTI2M2VmNGQyL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hdXRvLWluc3RydW1lbnRhdGlvbnMtbm9kZS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9PVExQRXhwb3J0ZXJCYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL3NoYXJlZC1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9sZWdhY3ktbm9kZS1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvYm91bmRlZC1xdWV1ZS1leHBvcnQtcHJvbWlzZS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvbG9nZ2luZy1yZXNwb25zZS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvb3RscC1leHBvcnQtZGVsZWdhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9vdGxwLW5ldHdvcmstZXhwb3J0LWRlbGVnYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByb3RvYnVmanMrYXNwcm9taXNlQDEuMS4yL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9hc3Byb21pc2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByb3RvYnVmanMrYmFzZTY0QDEuMS4yL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9iYXNlNjQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByb3RvYnVmanMrZXZlbnRlbWl0dGVyQDEuMS4wL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByb3RvYnVmanMrZmxvYXRAMS4wLjIvbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Zsb2F0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bwcm90b2J1ZmpzK2lucXVpcmVAMS4xLjAvbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2lucXVpcmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByb3RvYnVmanMrdXRmOEAxLjEuMC9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvdXRmOC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJvdG9idWZqcytwb29sQDEuMS4wL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9wb29sL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3V0aWwvbG9uZ2JpdHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9taW5pbWFsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy93cml0ZXJfYnVmZmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9yZWFkZXJfYnVmZmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JwYy9zZXJ2aWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JwYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9yb290cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9pbmRleC1taW5pbWFsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9nZW5lcmF0ZWQvcm9vdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvY29tbW9uL2hleC10by1iaW5hcnkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL2NvbW1vbi91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvY29tbW9uL2ludGVybmFsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9sb2dzL2ludGVybmFsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9sb2dzL3Byb3RvYnVmL2xvZ3MuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL2xvZ3MvcHJvdG9idWYvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9leHBvcnQvTWV0cmljRGF0YS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvRHJvcC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9IaXN0b2dyYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvZXhwb25lbnRpYWwtaGlzdG9ncmFtL0J1Y2tldHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvZXhwb25lbnRpYWwtaGlzdG9ncmFtL21hcHBpbmcvaWVlZTc1NC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vdXRpbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy90eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy9FeHBvbmVudE1hcHBpbmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvZXhwb25lbnRpYWwtaGlzdG9ncmFtL21hcHBpbmcvTG9nYXJpdGhtTWFwcGluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy9nZXRNYXBwaW5nLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL0V4cG9uZW50aWFsSGlzdG9ncmFtLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL0xhc3RWYWx1ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9TdW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvQWdncmVnYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvQWdncmVnYXRpb25PcHRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9BZ2dyZWdhdGlvblNlbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9leHBvcnQvTWV0cmljUmVhZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9leHBvcnQvUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9Jbk1lbW9yeU1ldHJpY0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9leHBvcnQvQ29uc29sZU1ldHJpY0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy92aWV3L1ZpZXdSZWdpc3RyeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvSW5zdHJ1bWVudERlc2NyaXB0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL0luc3RydW1lbnRzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9NZXRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvTWV0cmljU3RvcmFnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvSGFzaE1hcC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvRGVsdGFNZXRyaWNQcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL1RlbXBvcmFsTWV0cmljUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9Bc3luY01ldHJpY1N0b3JhZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvUmVnaXN0cmF0aW9uQ29uZmxpY3RzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9NZXRyaWNTdG9yYWdlUmVnaXN0cnkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL011bHRpV3JpdGFibGVNZXRyaWNTdG9yYWdlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9PYnNlcnZhYmxlUmVzdWx0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9PYnNlcnZhYmxlUmVnaXN0cnkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL1N5bmNNZXRyaWNTdG9yYWdlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy92aWV3L0F0dHJpYnV0ZXNQcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL01ldGVyU2hhcmVkU3RhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL01ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvTWV0cmljQ29sbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy92aWV3L1ByZWRpY2F0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdmlldy9JbnN0cnVtZW50U2VsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvTWV0ZXJTZWxlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdmlldy9WaWV3LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9NZXRlclByb3ZpZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9pbnRlcm5hbC10eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9pbnRlcm5hbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9wcm90b2J1Zi9tZXRyaWNzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9tZXRyaWNzL3Byb3RvYnVmL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy90cmFjZS9pbnRlcm5hbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvdHJhY2UvcHJvdG9idWYvdHJhY2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL3RyYWNlL3Byb3RvYnVmL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9sb2dzL2pzb24vbG9ncy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbG9ncy9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9tZXRyaWNzL2pzb24vbWV0cmljcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy90cmFjZS9qc29uL3RyYWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy90cmFjZS9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL290bHAtaHR0cC1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9vdGxwLW5vZGUtaHR0cC1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvaXMtZXhwb3J0LXJldHJ5YWJsZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy90cmFuc3BvcnQvaHR0cC10cmFuc3BvcnQtdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy90cmFuc3BvcnQvaHR0cC1leHBvcnRlci10cmFuc3BvcnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9yZXRyeWluZy10cmFuc3BvcnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9vdGxwLWh0dHAtZXhwb3J0LWRlbGVnYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9zaGFyZWQtZW52LWNvbmZpZ3VyYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL290bHAtbm9kZS1odHRwLWVudi1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9jb252ZXJ0LWxlZ2FjeS1ub2RlLWh0dHAtb3B0aW9ucy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL2luZGV4LW5vZGUtaHR0cC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtaHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL09UTFBMb2dFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtaHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHAvYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHAvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHAvYnVpbGQvc3JjL09UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHBAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cC9idWlsZC9zcmMvT1RMUE1ldHJpY0V4cG9ydGVyQmFzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL09UTFBNZXRyaWNFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHAvYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHAvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cEAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cC9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9PVExQVHJhY2VFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci10cmFjZS1vdGxwLWh0dHBAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWh0dHAvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci10cmFjZS1vdGxwLWh0dHBAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWh0dHAvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2hvc3QtbWV0cmljc0AwLjM2LjIrNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaG9zdC1tZXRyaWNzL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2hvc3QtbWV0cmljc0AwLjM2LjIrNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaG9zdC1tZXRyaWNzL2J1aWxkL3NyYy9CYXNlTWV0cmljcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStob3N0LW1ldHJpY3NAMC4zNi4yKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2hvc3QtbWV0cmljcy9idWlsZC9zcmMvZW51bS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStob3N0LW1ldHJpY3NAMC4zNi4yKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2hvc3QtbWV0cmljcy9idWlsZC9zcmMvc3RhdHMvY29tbW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3N5c3RlbWluZm9ybWF0aW9uQDUuMjMuOC9ub2RlX21vZHVsZXMvc3lzdGVtaW5mb3JtYXRpb24vbGliL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc3lzdGVtaW5mb3JtYXRpb25ANS4yMy44L25vZGVfbW9kdWxlcy9zeXN0ZW1pbmZvcm1hdGlvbi9saWIvbmV0d29yay5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStob3N0LW1ldHJpY3NAMC4zNi4yKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2hvc3QtbWV0cmljcy9idWlsZC9zcmMvc3RhdHMvc2kuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraG9zdC1tZXRyaWNzQDAuMzYuMis0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9ob3N0LW1ldHJpY3MvYnVpbGQvc3JjL21ldHJpYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStob3N0LW1ldHJpY3NAMC4zNi4yKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2hvc3QtbWV0cmljcy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvTG9nUmVjb3JkSW1wbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9Mb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvY29uZmlnLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2V4cG9ydC9Ob29wTG9nUmVjb3JkUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL011bHRpTG9nUmVjb3JkUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2ludGVybmFsL0xvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvTG9nZ2VyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvZXhwb3J0L0NvbnNvbGVMb2dSZWNvcmRFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9leHBvcnQvU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2V4cG9ydC9Jbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2V4cG9ydC9CYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9leHBvcnQvQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vZXhwb3J0L0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL2V4cG9ydC9NZXRyaWNEYXRhLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vYWdncmVnYXRvci90eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vYWdncmVnYXRvci9Ecm9wLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9hZ2dyZWdhdG9yL0hpc3RvZ3JhbS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vQnVja2V0cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy9pZWVlNzU0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL0V4cG9uZW50TWFwcGluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy9Mb2dhcml0aG1NYXBwaW5nLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL2dldE1hcHBpbmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL2FnZ3JlZ2F0b3IvRXhwb25lbnRpYWxIaXN0b2dyYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL2FnZ3JlZ2F0b3IvTGFzdFZhbHVlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9hZ2dyZWdhdG9yL1N1bS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vYWdncmVnYXRvci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vdmlldy9BZ2dyZWdhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vdmlldy9BZ2dyZWdhdGlvbk9wdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vZXhwb3J0L0FnZ3JlZ2F0aW9uU2VsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL2V4cG9ydC9NZXRyaWNSZWFkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL2V4cG9ydC9QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vdmlldy9WaWV3UmVnaXN0cnkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL0luc3RydW1lbnREZXNjcmlwdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9JbnN0cnVtZW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vTWV0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL3N0YXRlL01ldHJpY1N0b3JhZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL3N0YXRlL0hhc2hNYXAuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL3N0YXRlL0RlbHRhTWV0cmljUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9zdGF0ZS9UZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vc3RhdGUvQXN5bmNNZXRyaWNTdG9yYWdlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS92aWV3L1JlZ2lzdHJhdGlvbkNvbmZsaWN0cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vc3RhdGUvTWV0cmljU3RvcmFnZVJlZ2lzdHJ5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9zdGF0ZS9NdWx0aVdyaXRhYmxlTWV0cmljU3RvcmFnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vT2JzZXJ2YWJsZVJlc3VsdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vc3RhdGUvT2JzZXJ2YWJsZVJlZ2lzdHJ5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9zdGF0ZS9TeW5jTWV0cmljU3RvcmFnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vdmlldy9BdHRyaWJ1dGVzUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9zdGF0ZS9NZXRlclNoYXJlZFN0YXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS9zdGF0ZS9NZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL3N0YXRlL01ldHJpY0NvbGxlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vdmlldy9QcmVkaWNhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL3ZpZXcvSW5zdHJ1bWVudFNlbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL2VzbS92aWV3L01ldGVyU2VsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4zLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvZXNtL3ZpZXcvVmlldy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vTWV0ZXJQcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9lc20vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb250ZXh0LWFzeW5jLWhvb2tzL2J1aWxkL3NyYy9BYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvbnRleHQtYXN5bmMtaG9va3MvYnVpbGQvc3JjL0FzeW5jSG9va3NDb250ZXh0TWFuYWdlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvbnRleHQtYXN5bmMtaG9va3MvYnVpbGQvc3JjL0FzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb250ZXh0LWFzeW5jLWhvb2tzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvZW51bXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL1NwYW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL1NhbXBsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL3NhbXBsZXIvQWx3YXlzT2ZmU2FtcGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvc2FtcGxlci9BbHdheXNPblNhbXBsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL3NhbXBsZXIvUGFyZW50QmFzZWRTYW1wbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9zYW1wbGVyL1RyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvY29uZmlnLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy91dGlsaXR5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9leHBvcnQvQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9leHBvcnQvQmF0Y2hTcGFuUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL1JhbmRvbUlkR2VuZXJhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvVHJhY2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9NdWx0aVNwYW5Qcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL0Jhc2ljVHJhY2VyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL2V4cG9ydC9Db25zb2xlU3BhbkV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9leHBvcnQvSW5NZW1vcnlTcGFuRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL2V4cG9ydC9TaW1wbGVTcGFuUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9leHBvcnQvTm9vcFNwYW5Qcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1ub2RlQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlL2J1aWxkL3NyYy9Ob2RlVHJhY2VyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLW5vZGVAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGUvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvbG9nZ2luZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvZXJyb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL21ldGFkYXRhLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jYWxsLWNyZWRlbnRpYWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy90bHMtaGVscGVycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvdXJpLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvcmVzb2x2ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL2NoYW5uZWwtY3JlZGVudGlhbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL2xvYWQtYmFsYW5jZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3NlcnZpY2UtY29uZmlnLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jb25uZWN0aXZpdHktc3RhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3BpY2tlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvYmFja29mZi10aW1lb3V0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9sb2FkLWJhbGFuY2VyLWNoaWxkLWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3Jlc29sdmluZy1sb2FkLWJhbGFuY2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jaGFubmVsLW9wdGlvbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3N1YmNoYW5uZWwtYWRkcmVzcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AanMtc2RzbCtvcmRlcmVkLW1hcEA0LjQuMi9ub2RlX21vZHVsZXMvQGpzLXNkc2wvb3JkZXJlZC1tYXAvZGlzdC9janMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL2FkbWluLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jYWxsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jYWxsLWludGVyZmFjZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvY2xpZW50LWludGVyY2VwdG9ycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvY2xpZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9tYWtlLWNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sb2Rhc2guY2FtZWxjYXNlQDQuMy4wL25vZGVfbW9kdWxlcy9sb2Rhc2guY2FtZWxjYXNlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bwcm90b2J1ZmpzK2NvZGVnZW5AMi4wLjQvbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2NvZGVnZW4vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByb3RvYnVmanMrZmV0Y2hAMS4xLjAvbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2ZldGNoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bwcm90b2J1ZmpzK3BhdGhAMS4xLjIvbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3BhdGgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvbmFtZXNwYWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL21hcGZpZWxkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL21ldGhvZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9zZXJ2aWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL21lc3NhZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvZGVjb2Rlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy92ZXJpZmllci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9jb252ZXJ0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JhcHBlcnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdHlwZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9yb290LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvZmllbGQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvb25lb2YuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvb2JqZWN0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Byb3RvYnVmanNANy41LjQvbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2VudW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvZW5jb2Rlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9pbmRleC1saWdodC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy90b2tlbml6ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9wYXJzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcm90b2J1ZmpzQDcuNS40L25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy9jb21tb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJvdG9idWZqc0A3LjUuNC9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9leHQvZGVzY3JpcHRvci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytwcm90by1sb2FkZXJAMC44LjAvbm9kZV9tb2R1bGVzL0BncnBjL3Byb3RvLWxvYWRlci9idWlsZC9zcmMvdXRpbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sb25nQDUuMy4yL25vZGVfbW9kdWxlcy9sb25nL3VtZC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytwcm90by1sb2FkZXJAMC44LjAvbm9kZV9tb2R1bGVzL0BncnBjL3Byb3RvLWxvYWRlci9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL2NoYW5uZWx6LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jYWxsLW51bWJlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvY29tcHJlc3Npb24tYWxnb3JpdGhtcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvZmlsdGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jb21wcmVzc2lvbi1maWx0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL2NvbnRyb2wtcGxhbmUtc3RhdHVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9kZWFkbGluZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvZmlsdGVyLXN0YWNrLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9zaW5nbGUtc3ViY2hhbm5lbC1jaGFubmVsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9zdWJjaGFubmVsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9lbnZpcm9ubWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvcmVzb2x2ZXItZG5zLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9odHRwX3Byb3h5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9zdHJlYW0tZGVjb2Rlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvc3ViY2hhbm5lbC1jYWxsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy90cmFuc3BvcnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3N1YmNoYW5uZWwtcG9vbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvbG9hZC1iYWxhbmNpbmctY2FsbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvcmVzb2x2aW5nLWNhbGwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3JldHJ5aW5nLWNhbGwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3N1YmNoYW5uZWwtaW50ZXJmYWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9pbnRlcm5hbC1jaGFubmVsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jaGFubmVsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9zZXJ2ZXItY2FsbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvc2VydmVyLWNyZWRlbnRpYWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9kdXJhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvb3JjYS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvc2VydmVyLWludGVyY2VwdG9ycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvc2VydmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9zdGF0dXMtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvbG9hZC1iYWxhbmNlci1waWNrLWZpcnN0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9jZXJ0aWZpY2F0ZS1wcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvZXhwZXJpbWVudGFsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9yZXNvbHZlci11ZHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdycGMrZ3JwYy1qc0AxLjE0LjMvbm9kZV9tb2R1bGVzL0BncnBjL2dycGMtanMvYnVpbGQvc3JjL3Jlc29sdmVyLWlwLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9sb2FkLWJhbGFuY2VyLXJvdW5kLXJvYmluLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9sb2FkLWJhbGFuY2VyLW91dGxpZXItZGV0ZWN0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BncnBjK2dycGMtanNAMS4xNC4zL25vZGVfbW9kdWxlcy9AZ3JwYy9ncnBjLWpzL2J1aWxkL3NyYy9wcmlvcml0eS1xdWV1ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvbG9hZC1iYWxhbmNlci13ZWlnaHRlZC1yb3VuZC1yb2Jpbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ3JwYytncnBjLWpzQDEuMTQuMy9ub2RlX21vZHVsZXMvQGdycGMvZ3JwYy1qcy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY3JlYXRlLXNlcnZpY2UtY2xpZW50LWNvbnN0cnVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL2dycGMtZXhwb3J0ZXItdHJhbnNwb3J0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL2NvbmZpZ3VyYXRpb24vb3RscC1ncnBjLWNvbmZpZ3VyYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9vdGxwLWdycGMtZW52LWNvbmZpZ3VyYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9jb252ZXJ0LWxlZ2FjeS1vdGxwLWdycGMtb3B0aW9ucy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWdycGMtZXhwb3J0ZXItYmFzZUAwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZ3JwYy1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9vdGxwLWdycGMtZXhwb3J0LWRlbGVnYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWdycGMvYnVpbGQvc3JjL09UTFBMb2dFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtZ3JwY0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1ncnBjL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtcHJvdG9AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvT1RMUExvZ0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90by9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtcHJvdG9AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90by9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLWdycGNAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtZ3JwYy9idWlsZC9zcmMvT1RMUE1ldHJpY0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1ncnBjQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWdycGMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90by9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9PVExQTWV0cmljRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90by9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1wcm9tZXRoZXVzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItcHJvbWV0aGV1cy9idWlsZC9zcmMvUHJvbWV0aGV1c1NlcmlhbGl6ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItcHJvbWV0aGV1c0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXByb21ldGhldXMvYnVpbGQvc3JjL1Byb21ldGhldXNFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1wcm9tZXRoZXVzQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItcHJvbWV0aGV1cy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvT1RMUFRyYWNlRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG9AMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLXByb3RvL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci10cmFjZS1vdGxwLWdycGNAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWdycGMvYnVpbGQvc3JjL09UTFBUcmFjZUV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXRyYWNlLW90bHAtZ3JwY0AwLjIwNy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtZ3JwYy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItemlwa2luQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXppcGtpbi9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItemlwa2luQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXppcGtpbi9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItemlwa2luQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXppcGtpbi9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItemlwa2luQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXppcGtpbi9idWlsZC9zcmMvdHJhbnNmb3JtLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3ppcGtpbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci16aXBraW5AMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItemlwa2luL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWIzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Byb3BhZ2F0b3ItYjMvYnVpbGQvc3JjL2NvbW1vbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWIzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Byb3BhZ2F0b3ItYjMvYnVpbGQvc3JjL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWIzQDIuMi4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Byb3BhZ2F0b3ItYjMvYnVpbGQvc3JjL0IzTXVsdGlQcm9wYWdhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Byb3BhZ2F0b3ItYjNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1iMy9idWlsZC9zcmMvQjNTaW5nbGVQcm9wYWdhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Byb3BhZ2F0b3ItYjNAMi4yLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1iMy9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1iM0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWIzL2J1aWxkL3NyYy9CM1Byb3BhZ2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1iM0AyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWIzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWphZWdlckAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWphZWdlci9idWlsZC9zcmMvSmFlZ2VyUHJvcGFnYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWphZWdlckAyLjIuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWphZWdlci9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW5vZGVAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbm9kZS9idWlsZC9zcmMvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW5vZGVAMC4yMDcuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbm9kZS9idWlsZC9zcmMvc2RrLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1ub2RlQDAuMjA3LjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW5vZGUvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3BhcGFwYXJzZUA1LjUuMy9ub2RlX21vZHVsZXMvcGFwYXBhcnNlL3BhcGFwYXJzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3RyYWNlL3N1cHByZXNzLXRyYWNpbmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9iYWdnYWdlL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2JhZ2dhZ2UvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9iYWdnYWdlL3Byb3BhZ2F0aW9uL1czQ0JhZ2dhZ2VQcm9wYWdhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvY29tbW9uL2FuY2hvcmVkLWNsb2NrLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvY29tbW9uL2F0dHJpYnV0ZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9jb21tb24vbG9nZ2luZy1lcnJvci1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvY29tbW9uL2dsb2JhbC1lcnJvci1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9lbnZpcm9ubWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZ2xvYmFsVGhpcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvcGVyZm9ybWFuY2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvc2RrLWluZm8uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL3RpbWVyLXV0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9jb21tb24vdGltZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL0V4cG9ydFJlc3VsdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3Byb3BhZ2F0aW9uL2NvbXBvc2l0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2ludGVybmFsL3ZhbGlkYXRvcnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy90cmFjZS9UcmFjZVN0YXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdHJhY2UvVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3RyYWNlL3JwYy1tZXRhZGF0YS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL2xvZGFzaC5tZXJnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL21lcmdlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvcmVAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29yZS9idWlsZC9zcmMvdXRpbHMvdGltZW91dC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL3VybC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL3Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy91dGlscy9jYWxsYmFjay5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL3V0aWxzL2NvbmZpZ3VyYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29yZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb3JlL2J1aWxkL3NyYy9pbnRlcm5hbC9leHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStjb3JlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2NvcmUvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2FwaS1sb2dzQDAuMjAzLjAvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2FwaS1sb2dzL2J1aWxkL3NyYy90eXBlcy9Mb2dSZWNvcmQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDMuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL05vb3BMb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDMuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL05vb3BMb2dnZXJQcm92aWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwMy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvUHJveHlMb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDMuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL1Byb3h5TG9nZ2VyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDMuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZ2xvYmFsVGhpcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwMy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwMy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDMuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL2ludGVybmFsL2dsb2JhbC11dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeSthcGktbG9nc0AwLjIwMy4wL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9hcGktbG9ncy9idWlsZC9zcmMvYXBpL2xvZ3MuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrYXBpLWxvZ3NAMC4yMDMuMC9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3MvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZGVmYXVsdC1zZXJ2aWNlLW5hbWUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9SZXNvdXJjZUltcGwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0LXJlc291cmNlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvRW52RGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvc2VtY29udi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2V4ZWNBc3luYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC1kYXJ3aW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQtbGludXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvbWFjaGluZS1pZC9nZXRNYWNoaW5lSWQtYnNkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Jlc291cmNlc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMvYnVpbGQvc3JjL2RldGVjdG9ycy9wbGF0Zm9ybS9ub2RlL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkLXdpbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC11bnN1cHBvcnRlZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9tYWNoaW5lLWlkL2dldE1hY2hpbmVJZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9Ib3N0RGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvT1NEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9Qcm9jZXNzRGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL3BsYXRmb3JtL25vZGUvU2VydmljZUluc3RhbmNlSWREZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvZGV0ZWN0b3JzL05vb3BEZXRlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStyZXNvdXJjZXNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzL2J1aWxkL3NyYy9kZXRlY3RvcnMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcmVzb3VyY2VzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Jlc291cmNlcy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvTG9nUmVjb3JkSW1wbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9Mb2dnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvY29uZmlnLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2V4cG9ydC9Ob29wTG9nUmVjb3JkUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL011bHRpTG9nUmVjb3JkUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2ludGVybmFsL0xvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvTG9nZ2VyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvZXhwb3J0L0NvbnNvbGVMb2dSZWNvcmRFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9leHBvcnQvU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2V4cG9ydC9Jbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1sb2dzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MvYnVpbGQvc3JjL2V4cG9ydC9CYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9leHBvcnQvQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLWxvZ3NAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbG9ncy9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbG9nc0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvZXhwb3J0L0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9NZXRyaWNEYXRhLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci90eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9Ecm9wLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL0hpc3RvZ3JhbS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vQnVja2V0cy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy9pZWVlNzU0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL0V4cG9uZW50TWFwcGluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9leHBvbmVudGlhbC1oaXN0b2dyYW0vbWFwcGluZy9Mb2dhcml0aG1NYXBwaW5nLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL2dldE1hcHBpbmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvRXhwb25lbnRpYWxIaXN0b2dyYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2FnZ3JlZ2F0b3IvTGFzdFZhbHVlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9hZ2dyZWdhdG9yL1N1bS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvYWdncmVnYXRvci9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdmlldy9BZ2dyZWdhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdmlldy9BZ2dyZWdhdGlvbk9wdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvZXhwb3J0L0FnZ3JlZ2F0aW9uU2VsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9NZXRyaWNSZWFkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvZXhwb3J0L0luTWVtb3J5TWV0cmljRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2V4cG9ydC9Db25zb2xlTWV0cmljRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvVmlld1JlZ2lzdHJ5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9JbnN0cnVtZW50RGVzY3JpcHRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvSW5zdHJ1bWVudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL01ldGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9NZXRyaWNTdG9yYWdlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9IYXNoTWFwLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9EZWx0YU1ldHJpY1Byb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL0FzeW5jTWV0cmljU3RvcmFnZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdmlldy9SZWdpc3RyYXRpb25Db25mbGljdHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL01ldHJpY1N0b3JhZ2VSZWdpc3RyeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvTXVsdGlXcml0YWJsZU1ldHJpY1N0b3JhZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL09ic2VydmFibGVSZXN1bHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3N0YXRlL09ic2VydmFibGVSZWdpc3RyeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvU3luY01ldHJpY1N0b3JhZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvQXR0cmlidXRlc1Byb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvTWV0ZXJTaGFyZWRTdGF0ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvc3RhdGUvTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy9zdGF0ZS9NZXRyaWNDb2xsZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL3ZpZXcvUHJlZGljYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy92aWV3L0luc3RydW1lbnRTZWxlY3Rvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbWV0cmljc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcy9idWlsZC9zcmMvdmlldy9NZXRlclNlbGVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1tZXRyaWNzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzL2J1aWxkL3NyYy92aWV3L1ZpZXcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL01ldGVyUHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLW1ldHJpY3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29udGV4dC1hc3luYy1ob29rcy9idWlsZC9zcmMvQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb250ZXh0LWFzeW5jLWhvb2tzL2J1aWxkL3NyYy9Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9jb250ZXh0LWFzeW5jLWhvb2tzL2J1aWxkL3NyYy9Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvY29udGV4dC1hc3luYy1ob29rcy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL2VudW1zLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9TcGFuLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9TYW1wbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9zYW1wbGVyL0Fsd2F5c09mZlNhbXBsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL3NhbXBsZXIvQWx3YXlzT25TYW1wbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9zYW1wbGVyL1BhcmVudEJhc2VkU2FtcGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvc2FtcGxlci9UcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL2NvbmZpZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvdXRpbGl0eS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvZXhwb3J0L0JhdGNoU3BhblByb2Nlc3NvckJhc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvZXhwb3J0L0JhdGNoU3BhblByb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9SYW5kb21JZEdlbmVyYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrc2RrLXRyYWNlLWJhc2VAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UvYnVpbGQvc3JjL1RyYWNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvTXVsdGlTcGFuUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9CYXNpY1RyYWNlclByb3ZpZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9leHBvcnQvQ29uc29sZVNwYW5FeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvZXhwb3J0L0luTWVtb3J5U3BhbkV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9leHBvcnQvU2ltcGxlU3BhblByb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2UtYmFzZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZS9idWlsZC9zcmMvZXhwb3J0L05vb3BTcGFuUHJvY2Vzc29yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1iYXNlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstdHJhY2Utbm9kZUAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9zZGstdHJhY2Utbm9kZS9idWlsZC9zcmMvTm9kZVRyYWNlclByb3ZpZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay10cmFjZS1ub2RlQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL2F1dG9Mb2FkZXJVdGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL2F1dG9Mb2FkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9zZW12ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9zaGltbWVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Jlc29sdmVAMS4yMi4xMS9ub2RlX21vZHVsZXMvcmVzb2x2ZS9saWIvaG9tZWRpci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9yZXNvbHZlQDEuMjIuMTEvbm9kZV9tb2R1bGVzL3Jlc29sdmUvbGliL2NhbGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wYXRoLXBhcnNlQDEuMC43L25vZGVfbW9kdWxlcy9wYXRoLXBhcnNlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Jlc29sdmVAMS4yMi4xMS9ub2RlX21vZHVsZXMvcmVzb2x2ZS9saWIvbm9kZS1tb2R1bGVzLXBhdGhzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Jlc29sdmVAMS4yMi4xMS9ub2RlX21vZHVsZXMvcmVzb2x2ZS9saWIvbm9ybWFsaXplLW9wdGlvbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZnVuY3Rpb24tYmluZEAxLjEuMi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9mdW5jdGlvbi1iaW5kQDEuMS4yL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hhc293bkAyLjAuMi9ub2RlX21vZHVsZXMvaGFzb3duL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2lzLWNvcmUtbW9kdWxlQDIuMTYuMS9ub2RlX21vZHVsZXMvaXMtY29yZS1tb2R1bGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcmVzb2x2ZUAxLjIyLjExL25vZGVfbW9kdWxlcy9yZXNvbHZlL2xpYi9hc3luYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9yZXNvbHZlQDEuMjIuMTEvbm9kZV9tb2R1bGVzL3Jlc29sdmUvbGliL2NvcmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcmVzb2x2ZUAxLjIyLjExL25vZGVfbW9kdWxlcy9yZXNvbHZlL2xpYi9pcy1jb3JlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3Jlc29sdmVAMS4yMi4xMS9ub2RlX21vZHVsZXMvcmVzb2x2ZS9saWIvc3luYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9yZXNvbHZlQDEuMjIuMTEvbm9kZV9tb2R1bGVzL3Jlc29sdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcmVxdWlyZS1pbi10aGUtbWlkZGxlQDcuNS4yL25vZGVfbW9kdWxlcy9yZXF1aXJlLWluLXRoZS1taWRkbGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL01vZHVsZU5hbWVUcmllLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9SZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaW1wb3J0LWluLXRoZS1taWRkbGVAMS4xNS4wL25vZGVfbW9kdWxlcy9pbXBvcnQtaW4tdGhlLW1pZGRsZS9saWIvcmVnaXN0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaW1wb3J0LWluLXRoZS1taWRkbGVAMS4xNS4wL25vZGVfbW9kdWxlcy9pbXBvcnQtaW4tdGhlLW1pZGRsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbnN0cnVtZW50YXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL25vcm1hbGl6ZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStpbnN0cnVtZW50YXRpb25AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24vYnVpbGQvc3JjL2luc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvaW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkraW5zdHJ1bWVudGF0aW9uQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uL2J1aWxkL3NyYy9zZW1jb252U3RhYmlsaXR5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2luc3RydW1lbnRhdGlvbkAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9PVExQRXhwb3J0ZXJCYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvdHlwZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL3NoYXJlZC1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9sZWdhY3ktbm9kZS1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvYm91bmRlZC1xdWV1ZS1leHBvcnQtcHJvbWlzZS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvbG9nZ2luZy1yZXNwb25zZS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvb3RscC1leHBvcnQtZGVsZWdhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9vdGxwLW5ldHdvcmstZXhwb3J0LWRlbGVnYXRlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL2dlbmVyYXRlZC9yb290LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9jb21tb24vaGV4LXRvLWJpbmFyeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvY29tbW9uL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9jb21tb24vaW50ZXJuYWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL2xvZ3MvaW50ZXJuYWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL2xvZ3MvcHJvdG9idWYvbG9ncy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbG9ncy9wcm90b2J1Zi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9pbnRlcm5hbC10eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9pbnRlcm5hbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9wcm90b2J1Zi9tZXRyaWNzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9tZXRyaWNzL3Byb3RvYnVmL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy90cmFjZS9pbnRlcm5hbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvdHJhY2UvcHJvdG9idWYvdHJhY2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC10cmFuc2Zvcm1lckAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXIvYnVpbGQvc3JjL3RyYWNlL3Byb3RvYnVmL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9sb2dzL2pzb24vbG9ncy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbG9ncy9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9tZXRyaWNzL2pzb24vbWV0cmljcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLXRyYW5zZm9ybWVyQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lci9idWlsZC9zcmMvbWV0cmljcy9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy90cmFjZS9qc29uL3RyYWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy90cmFjZS9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtdHJhbnNmb3JtZXJAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtaHR0cEAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvaXMtZXhwb3J0LXJldHJ5YWJsZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3RyYW5zcG9ydC9odHRwLXRyYW5zcG9ydC11dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3RyYW5zcG9ydC9odHRwLWV4cG9ydGVyLXRyYW5zcG9ydC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3JldHJ5aW5nLXRyYW5zcG9ydC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL290bHAtaHR0cC1leHBvcnQtZGVsZWdhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL3NoYXJlZC1lbnYtY29uZmlndXJhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL290bHAtaHR0cC1jb25maWd1cmF0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9vdGxwLWh0dHAtZW52LWNvbmZpZ3VyYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL2NvbnZlcnQtbGVnYWN5LW5vZGUtaHR0cC1vcHRpb25zLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvaW5kZXgtbm9kZS1odHRwLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHAvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvT1RMUExvZ0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHAvYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtaHR0cC9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtaHR0cC9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY3JlYXRlLXNlcnZpY2UtY2xpZW50LWNvbnN0cnVjdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL2dycGMtZXhwb3J0ZXItdHJhbnNwb3J0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvY29uZmlndXJhdGlvbi9vdGxwLWdycGMtY29uZmlndXJhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWdycGMtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZ3JwYy1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL290bHAtZ3JwYy1lbnYtY29uZmlndXJhdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStvdGxwLWdycGMtZXhwb3J0ZXItYmFzZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L290bHAtZ3JwYy1leHBvcnRlci1iYXNlL2J1aWxkL3NyYy9jb25maWd1cmF0aW9uL2NvbnZlcnQtbGVnYWN5LW90bHAtZ3JwYy1vcHRpb25zLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K290bHAtZ3JwYy1leHBvcnRlci1iYXNlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2UvYnVpbGQvc3JjL290bHAtZ3JwYy1leHBvcnQtZGVsZWdhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZS9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbG9ncy1vdGxwLWdycGNAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtZ3JwYy9idWlsZC9zcmMvT1RMUExvZ0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1ncnBjQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWdycGMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90by9idWlsZC9zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtcHJvdG9AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvT1RMUExvZ0V4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90by9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1sb2dzLW90bHAtcHJvdG9AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1wcm90by9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cC9idWlsZC9zcmMvT1RMUE1ldHJpY0V4cG9ydGVyT3B0aW9ucy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cEAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwL2J1aWxkL3NyYy9PVExQTWV0cmljRXhwb3J0ZXJCYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHAvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cC9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9PVExQTWV0cmljRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cC9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cEAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cEAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1tZXRyaWNzLW90bHAtZ3JwY0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1ncnBjL2J1aWxkL3NyYy9PVExQTWV0cmljRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLWdycGNAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtZ3JwYy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvL2J1aWxkL3NyYy92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90by9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9PVExQTWV0cmljRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1wcm90by9idWlsZC9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1wcm9tZXRoZXVzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItcHJvbWV0aGV1cy9idWlsZC9zcmMvUHJvbWV0aGV1c1NlcmlhbGl6ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItcHJvbWV0aGV1c0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXByb21ldGhldXMvYnVpbGQvc3JjL1Byb21ldGhldXNFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci1wcm9tZXRoZXVzQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItcHJvbWV0aGV1cy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvT1RMUFRyYWNlRXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b0AwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8vYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG9AMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLXByb3RvL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci10cmFjZS1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWh0dHAvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL09UTFBUcmFjZUV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cEAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cC9idWlsZC9zcmMvcGxhdGZvcm0vbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci10cmFjZS1vdGxwLWh0dHBAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWh0dHAvYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cEAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cC9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItdHJhY2Utb3RscC1ncnBjQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1ncnBjL2J1aWxkL3NyYy9PVExQVHJhY2VFeHBvcnRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci10cmFjZS1vdGxwLWdycGNAMC4yMDMuMCs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWdycGMvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3BsYXRmb3JtL25vZGUvdXRpbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci16aXBraW5AMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItemlwa2luL2J1aWxkL3NyYy9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K2V4cG9ydGVyLXppcGtpbkAyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9leHBvcnRlci16aXBraW4vYnVpbGQvc3JjL3RyYW5zZm9ybS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci16aXBraW5AMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItemlwa2luL2J1aWxkL3NyYy91dGlscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStleHBvcnRlci16aXBraW5AMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItemlwa2luL2J1aWxkL3NyYy96aXBraW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrZXhwb3J0ZXItemlwa2luQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXppcGtpbi9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1iM0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWIzL2J1aWxkL3NyYy9jb21tb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1iM0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWIzL2J1aWxkL3NyYy9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1iM0AyLjAuMSs0NjA3NzNlZjhmZjFlMDdjL25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWIzL2J1aWxkL3NyYy9CM011bHRpUHJvcGFnYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWIzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Byb3BhZ2F0b3ItYjMvYnVpbGQvc3JjL0IzU2luZ2xlUHJvcGFnYXRvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStwcm9wYWdhdG9yLWIzQDIuMC4xKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Byb3BhZ2F0b3ItYjMvYnVpbGQvc3JjL3R5cGVzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Byb3BhZ2F0b3ItYjNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1iMy9idWlsZC9zcmMvQjNQcm9wYWdhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Byb3BhZ2F0b3ItYjNAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1iMy9idWlsZC9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1qYWVnZXJAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1qYWVnZXIvYnVpbGQvc3JjL0phZWdlclByb3BhZ2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9wZW50ZWxlbWV0cnkrcHJvcGFnYXRvci1qYWVnZXJAMi4wLjErNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1qYWVnZXIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1ub2RlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW5vZGUvYnVpbGQvc3JjL3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcGVudGVsZW1ldHJ5K3Nkay1ub2RlQDAuMjAzLjArNDYwNzczZWY4ZmYxZTA3Yy9ub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvc2RrLW5vZGUvYnVpbGQvc3JjL3Nkay5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9Ab3BlbnRlbGVtZXRyeStzZGstbm9kZUAwLjIwMy4wKzQ2MDc3M2VmOGZmMWUwN2Mvbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5L3Nkay1ub2RlL2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ29vZ2xlLWNsb3VkK29wZW50ZWxlbWV0cnktY2xvdWQtdHJhY2UtZXhwb3J0ZXJAMy4wLjArYjA2OTEzNWM2N2Y4MGIxZS9ub2RlX21vZHVsZXMvQGdvb2dsZS1jbG91ZC9vcGVudGVsZW1ldHJ5LWNsb3VkLXRyYWNlLWV4cG9ydGVyL2J1aWxkL3NyYy9leHRlcm5hbC10eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9iYXNlNjQtanNAMS41LjEvbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvY3J5cHRvL2Jyb3dzZXIvY3J5cHRvLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9jcnlwdG8vbm9kZS9jcnlwdG8uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2NyeXB0by9jcnlwdG8uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL29wdGlvbnMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL3RyYW5zcG9ydGVycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zYWZlLWJ1ZmZlckA1LjIuMS9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZWNkc2Etc2lnLWZvcm1hdHRlckAxLjAuMTEvbm9kZV9tb2R1bGVzL2VjZHNhLXNpZy1mb3JtYXR0ZXIvc3JjL3BhcmFtLWJ5dGVzLWZvci1hbGcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZWNkc2Etc2lnLWZvcm1hdHRlckAxLjAuMTEvbm9kZV9tb2R1bGVzL2VjZHNhLXNpZy1mb3JtYXR0ZXIvc3JjL2VjZHNhLXNpZy1mb3JtYXR0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL3V0aWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvYXV0aGNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9sb2dpbnRpY2tldC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9vYXV0aDJjbGllbnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvY29tcHV0ZWNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9pZHRva2VuY2xpZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2VudkRldGVjdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9qd3NANC4wLjEvbm9kZV9tb2R1bGVzL2p3cy9saWIvZGF0YS1zdHJlYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vYnVmZmVyLWVxdWFsLWNvbnN0YW50LXRpbWVAMS4wLjEvbm9kZV9tb2R1bGVzL2J1ZmZlci1lcXVhbC1jb25zdGFudC10aW1lL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2p3YUAyLjAuMS9ub2RlX21vZHVsZXMvandhL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2p3c0A0LjAuMS9ub2RlX21vZHVsZXMvandzL2xpYi90b3N0cmluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9qd3NANC4wLjEvbm9kZV9tb2R1bGVzL2p3cy9saWIvc2lnbi1zdHJlYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vandzQDQuMC4xL25vZGVfbW9kdWxlcy9qd3MvbGliL3ZlcmlmeS1zdHJlYW0uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vandzQDQuMC4xL25vZGVfbW9kdWxlcy9qd3MvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ3Rva2VuQDcuMS4wL25vZGVfbW9kdWxlcy9ndG9rZW4vYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2p3dGFjY2Vzcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9qd3RjbGllbnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvcmVmcmVzaGNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9pbXBlcnNvbmF0ZWQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvb2F1dGgyY29tbW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL3N0c2NyZWRlbnRpYWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2Jhc2VleHRlcm5hbGNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9maWxlc3ViamVjdHRva2Vuc3VwcGxpZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvdXJsc3ViamVjdHRva2Vuc3VwcGxpZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvaWRlbnRpdHlwb29sY2xpZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2F3c3JlcXVlc3RzaWduZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvZGVmYXVsdGF3c3NlY3VyaXR5Y3JlZGVudGlhbHNzdXBwbGllci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9hd3NjbGllbnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZ29vZ2xlLWF1dGgtbGlicmFyeUA5LjE1LjEvbm9kZV9tb2R1bGVzL2dvb2dsZS1hdXRoLWxpYnJhcnkvYnVpbGQvc3JjL2F1dGgvZXhlY3V0YWJsZS1yZXNwb25zZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9wbHVnZ2FibGUtYXV0aC1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL3BsdWdnYWJsZS1hdXRoLWNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9leHRlcm5hbGNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9leHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9nb29nbGVhdXRoLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL2lhbS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9nb29nbGUtYXV0aC1saWJyYXJ5QDkuMTUuMS9ub2RlX21vZHVsZXMvZ29vZ2xlLWF1dGgtbGlicmFyeS9idWlsZC9zcmMvYXV0aC9kb3duc2NvcGVkY2xpZW50LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9hdXRoL3Bhc3N0aHJvdWdoLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2dvb2dsZS1hdXRoLWxpYnJhcnlAOS4xNS4xL25vZGVfbW9kdWxlcy9nb29nbGUtYXV0aC1saWJyYXJ5L2J1aWxkL3NyYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ29vZ2xlLWNsb3VkK29wZW50ZWxlbWV0cnktY2xvdWQtdHJhY2UtZXhwb3J0ZXJAMy4wLjArYjA2OTEzNWM2N2Y4MGIxZS9ub2RlX21vZHVsZXMvQGdvb2dsZS1jbG91ZC9vcGVudGVsZW1ldHJ5LWNsb3VkLXRyYWNlLWV4cG9ydGVyL2J1aWxkL3NyYy90eXBlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ29vZ2xlLWNsb3VkK29wZW50ZWxlbWV0cnktcmVzb3VyY2UtdXRpbEAzLjAuMCs1MDM2MTYyYTc0ZTI3MDU0L25vZGVfbW9kdWxlcy9AZ29vZ2xlLWNsb3VkL29wZW50ZWxlbWV0cnktcmVzb3VyY2UtdXRpbC9idWlsZC9zcmMvZGV0ZWN0b3IvZmFhcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ29vZ2xlLWNsb3VkK29wZW50ZWxlbWV0cnktcmVzb3VyY2UtdXRpbEAzLjAuMCs1MDM2MTYyYTc0ZTI3MDU0L25vZGVfbW9kdWxlcy9AZ29vZ2xlLWNsb3VkL29wZW50ZWxlbWV0cnktcmVzb3VyY2UtdXRpbC9idWlsZC9zcmMvZGV0ZWN0b3IvZ2NlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bnb29nbGUtY2xvdWQrb3BlbnRlbGVtZXRyeS1yZXNvdXJjZS11dGlsQDMuMC4wKzUwMzYxNjJhNzRlMjcwNTQvbm9kZV9tb2R1bGVzL0Bnb29nbGUtY2xvdWQvb3BlbnRlbGVtZXRyeS1yZXNvdXJjZS11dGlsL2J1aWxkL3NyYy9kZXRlY3Rvci9nYWUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdvb2dsZS1jbG91ZCtvcGVudGVsZW1ldHJ5LXJlc291cmNlLXV0aWxAMy4wLjArNTAzNjE2MmE3NGUyNzA1NC9ub2RlX21vZHVsZXMvQGdvb2dsZS1jbG91ZC9vcGVudGVsZW1ldHJ5LXJlc291cmNlLXV0aWwvYnVpbGQvc3JjL2RldGVjdG9yL2drZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AZ29vZ2xlLWNsb3VkK29wZW50ZWxlbWV0cnktcmVzb3VyY2UtdXRpbEAzLjAuMCs1MDM2MTYyYTc0ZTI3MDU0L25vZGVfbW9kdWxlcy9AZ29vZ2xlLWNsb3VkL29wZW50ZWxlbWV0cnktcmVzb3VyY2UtdXRpbC9idWlsZC9zcmMvZGV0ZWN0b3IvZGV0ZWN0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdvb2dsZS1jbG91ZCtvcGVudGVsZW1ldHJ5LXJlc291cmNlLXV0aWxAMy4wLjArNTAzNjE2MmE3NGUyNzA1NC9ub2RlX21vZHVsZXMvQGdvb2dsZS1jbG91ZC9vcGVudGVsZW1ldHJ5LXJlc291cmNlLXV0aWwvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bnb29nbGUtY2xvdWQrb3BlbnRlbGVtZXRyeS1jbG91ZC10cmFjZS1leHBvcnRlckAzLjAuMCtiMDY5MTM1YzY3ZjgwYjFlL25vZGVfbW9kdWxlcy9AZ29vZ2xlLWNsb3VkL29wZW50ZWxlbWV0cnktY2xvdWQtdHJhY2UtZXhwb3J0ZXIvYnVpbGQvc3JjL3ZlcnNpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGdvb2dsZS1jbG91ZCtvcGVudGVsZW1ldHJ5LWNsb3VkLXRyYWNlLWV4cG9ydGVyQDMuMC4wK2IwNjkxMzVjNjdmODBiMWUvbm9kZV9tb2R1bGVzL0Bnb29nbGUtY2xvdWQvb3BlbnRlbGVtZXRyeS1jbG91ZC10cmFjZS1leHBvcnRlci9idWlsZC9zcmMvdHJhbnNmb3JtLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bnb29nbGUtY2xvdWQrb3BlbnRlbGVtZXRyeS1jbG91ZC10cmFjZS1leHBvcnRlckAzLjAuMCtiMDY5MTM1YzY3ZjgwYjFlL25vZGVfbW9kdWxlcy9AZ29vZ2xlLWNsb3VkL29wZW50ZWxlbWV0cnktY2xvdWQtdHJhY2UtZXhwb3J0ZXIvYnVpbGQvc3JjL3RyYWNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0Bnb29nbGUtY2xvdWQrb3BlbnRlbGVtZXRyeS1jbG91ZC10cmFjZS1leHBvcnRlckAzLjAuMCtiMDY5MTM1YzY3ZjgwYjFlL25vZGVfbW9kdWxlcy9AZ29vZ2xlLWNsb3VkL29wZW50ZWxlbWV0cnktY2xvdWQtdHJhY2UtZXhwb3J0ZXIvYnVpbGQvc3JjL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi90c2xpYkAyLjguMS9ub2RlX21vZHVsZXMvdHNsaWIvbW9kdWxlcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1hbnRocm9waWNAMC4yMS4wL25vZGVfbW9kdWxlcy9AdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1hbnRocm9waWMvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vanMtdGlrdG9rZW5AMS4wLjIxL25vZGVfbW9kdWxlcy9qcy10aWt0b2tlbi9kaXN0L2NodW5rLVZMMk9RQ1dOLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2pzLXRpa3Rva2VuQDEuMC4yMS9ub2RlX21vZHVsZXMvanMtdGlrdG9rZW4vZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1vcGVuYWlAMC4yMS4wL25vZGVfbW9kdWxlcy9AdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1vcGVuYWkvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9sb2Rhc2guanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHRyYWNlbG9vcCtpbnN0cnVtZW50YXRpb24tbGxhbWFpbmRleEAwLjIxLjAvbm9kZV9tb2R1bGVzL0B0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWxsYW1haW5kZXgvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHRyYWNlbG9vcCtpbnN0cnVtZW50YXRpb24tdmVydGV4YWlAMC4yMS4wL25vZGVfbW9kdWxlcy9AdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi12ZXJ0ZXhhaS9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1iZWRyb2NrQDAuMjEuMC9ub2RlX21vZHVsZXMvQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tYmVkcm9jay9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1jb2hlcmVAMC4yMS4wL25vZGVfbW9kdWxlcy9AdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1jb2hlcmUvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHRyYWNlbG9vcCtpbnN0cnVtZW50YXRpb24tcGluZWNvbmVAMC4yMS4wL25vZGVfbW9kdWxlcy9AdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1waW5lY29uZS9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L21heC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L25pbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JlZ2V4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdmFsaWRhdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9wYXJzZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3N0cmluZ2lmeS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JuZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3YxLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjFUb1Y2LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjM1LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvbWQ1LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9uYXRpdmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92NC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3NoYTEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92NS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi91dWlkQDEwLjAuMC9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3Y2LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjZUb1YxLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvdjcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3V1aWRAMTAuMC4wL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vdXVpZEAxMC4wLjAvbm9kZV9tb2R1bGVzL3V1aWQvd3JhcHBlci5tanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZGVjYW1lbGl6ZUAxLjIuMC9ub2RlX21vZHVsZXMvZGVjYW1lbGl6ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9jYW1lbGNhc2VANi4zLjAvbm9kZV9tb2R1bGVzL2NhbWVsY2FzZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L2xvYWQvbWFwX2tleXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9sb2FkL3ZhbGlkYXRpb24uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9sb2FkL3NlcmlhbGl6YWJsZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3V0aWxzL2Vudi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L2NhbGxiYWNrcy9iYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2NhbGxiYWNrcy9iYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbG9hZC9tYXBfa2V5cy5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9sb2FkL3ZhbGlkYXRpb24uY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbG9hZC9zZXJpYWxpemFibGUuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvdXRpbHMvZW52LmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L2NhbGxiYWNrcy9iYXNlLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9hbnNpLXN0eWxlc0A1LjIuMC9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC9leHBlcmltZW50YWwvb3RlbC9jb25zdGFudHMuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3Qvc2luZ2xldG9ucy9mZXRjaC5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC91dGlscy9wcm9qZWN0LmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L3V0aWxzL3dhcm4uY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3QvdXRpbHMvX3V1aWQuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3QvdXVpZC5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC91dGlscy9lbnYuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3Qvc2luZ2xldG9ucy9vdGVsLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L2V4cGVyaW1lbnRhbC9vdGVsL3RyYW5zbGF0b3IuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3QvdXRpbHMvaXMtbmV0d29yay1lcnJvci9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC91dGlscy9wLXJldHJ5L2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ldmVudGVtaXR0ZXIzQDQuMC43L25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3AtZmluYWxseUAxLjAuMC9ub2RlX21vZHVsZXMvcC1maW5hbGx5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3AtdGltZW91dEAzLjIuMC9ub2RlX21vZHVsZXMvcC10aW1lb3V0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3AtcXVldWVANi42LjIvbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9sb3dlci1ib3VuZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wLXF1ZXVlQDYuNi4yL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvcHJpb3JpdHktcXVldWUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcC1xdWV1ZUA2LjYuMi9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3QvdXRpbHMvYXN5bmNfY2FsbGVyLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L3V0aWxzL21lc3NhZ2VzLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvZGVidWcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcGFyc2Utb3B0aW9ucy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9pZGVudGlmaWVycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9jbGFzc2VzL3NlbXZlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcGFyc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3ZhbGlkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jbGVhbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvaW5jLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9kaWZmLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9tYWpvci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbWlub3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3BhdGNoLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wcmVyZWxlYXNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9yY29tcGFyZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1sb29zZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1idWlsZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvc29ydC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcnNvcnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZXEuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL25lcS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZ3RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9sdGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NtcC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29lcmNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2xydWNhY2hlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvcmFuZ2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9jb21wYXJhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL3RvLWNvbXBhcmF0b3JzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9tYXgtc2F0aXNmeWluZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXNhdGlzZnlpbmcuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL21pbi12ZXJzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy92YWxpZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvb3V0c2lkZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9zZW12ZXJANy43LjMvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvZ3RyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9sdHIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL2ludGVyc2VjdHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL3NpbXBsaWZ5LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3NlbXZlckA3LjcuMy9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9zdWJzZXQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vc2VtdmVyQDcuNy4zL25vZGVfbW9kdWxlcy9zZW12ZXIvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC91dGlscy9wcm9tcHRzLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L3V0aWxzL2Vycm9yLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L3V0aWxzL2Zhc3Qtc2FmZS1zdHJpbmdpZnkvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3QvY2xpZW50LmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L2Vudi5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC9zaW5nbGV0b25zL2NvbnN0YW50cy5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbGFuZ3NtaXRoQDAuMy44Nys5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9sYW5nc21pdGgvZGlzdC91dGlscy9jb250ZXh0X3ZhcnMuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2xhbmdzbWl0aEAwLjMuODcrOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvbGFuZ3NtaXRoL2Rpc3QvcnVuX3RyZWVzLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3RyYWNlcnMvYmFzZS5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC90cmFjZXJzL2NvbnNvbGUuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvZXJyb3JzL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3Rvb2xzL3V0aWxzLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3V0aWxzL2pzb24uY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbWVzc2FnZXMvY29udGVudF9ibG9ja3MuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbWVzc2FnZXMvYmFzZS5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9tZXNzYWdlcy90b29sLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L21lc3NhZ2VzL2FpLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L21lc3NhZ2VzL2NoYXQuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbWVzc2FnZXMvZnVuY3Rpb24uY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbWVzc2FnZXMvaHVtYW4uY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbWVzc2FnZXMvbW9kaWZpZXIuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvbWVzc2FnZXMvc3lzdGVtLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L21lc3NhZ2VzL3V0aWxzLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9sYW5nc21pdGhAMC4zLjg3Kzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL2xhbmdzbWl0aC9kaXN0L3NpbmdsZXRvbnMvdHJhY2VhYmxlLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3NpbmdsZXRvbnMvdHJhY2VyLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3RyYWNlcnMvdHJhY2VyX2xhbmdjaGFpbi5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9zaW5nbGV0b25zL2FzeW5jX2xvY2FsX3N0b3JhZ2UvZ2xvYmFscy5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9zaW5nbGV0b25zL2NhbGxiYWNrcy5janMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQGxhbmdjaGFpbitjb3JlQDAuMy44MCs5NjY3MDlmNTU5NzI0Y2FiL25vZGVfbW9kdWxlcy9AbGFuZ2NoYWluL2NvcmUvZGlzdC9jYWxsYmFja3MvcHJvbWlzZXMuY2pzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BsYW5nY2hhaW4rY29yZUAwLjMuODArOTY2NzA5ZjU1OTcyNGNhYi9ub2RlX21vZHVsZXMvQGxhbmdjaGFpbi9jb3JlL2Rpc3QvdXRpbHMvY2FsbGJhY2tzLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L3NpbmdsZXRvbnMvYXN5bmNfbG9jYWxfc3RvcmFnZS9jb250ZXh0LmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AbGFuZ2NoYWluK2NvcmVAMC4zLjgwKzk2NjcwOWY1NTk3MjRjYWIvbm9kZV9tb2R1bGVzL0BsYW5nY2hhaW4vY29yZS9kaXN0L2NhbGxiYWNrcy9tYW5hZ2VyLmNqcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1sYW5nY2hhaW5AMC4yMS4wKzY3ZGI5NGY5NWVlZTViMjAvbm9kZV9tb2R1bGVzL0B0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWxhbmdjaGFpbi9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1jaHJvbWFkYkAwLjIxLjAvbm9kZV9tb2R1bGVzL0B0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWNocm9tYWRiL2Rpc3Qvc3JjL2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AdHJhY2Vsb29wK2luc3RydW1lbnRhdGlvbi1xZHJhbnRAMC4yMS4wL25vZGVfbW9kdWxlcy9AdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1xZHJhbnQvZGlzdC9zcmMvaW5kZXgubWpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0B0cmFjZWxvb3AraW5zdHJ1bWVudGF0aW9uLXRvZ2V0aGVyQDAuMjEuMC9ub2RlX21vZHVsZXMvQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tdG9nZXRoZXIvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHRyYWNlbG9vcCtpbnN0cnVtZW50YXRpb24tbWNwQDAuMjEuMC9ub2RlX21vZHVsZXMvQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tbWNwL2Rpc3QvaW5kZXgubWpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2Nyb3NzLWZldGNoQDQuMS4wL25vZGVfbW9kdWxlcy9jcm9zcy1mZXRjaC9kaXN0L25vZGUtcG9ueWZpbGwuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vZmV0Y2gtcmV0cnlANi4wLjAvbm9kZV9tb2R1bGVzL2ZldGNoLXJldHJ5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL251bmp1Y2tzQDMuMi40L25vZGVfbW9kdWxlcy9udW5qdWNrcy9zcmMvbGliLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2FzYXBAMi4wLjYvbm9kZV9tb2R1bGVzL2FzYXAvcmF3LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2FzYXBAMi4wLjYvbm9kZV9tb2R1bGVzL2FzYXAvYXNhcC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9hLXN5bmMtd2F0ZXJmYWxsQDEuMC4xL25vZGVfbW9kdWxlcy9hLXN5bmMtd2F0ZXJmYWxsL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL251bmp1Y2tzQDMuMi40L25vZGVfbW9kdWxlcy9udW5qdWNrcy9zcmMvbGV4ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbnVuanVja3NAMy4yLjQvbm9kZV9tb2R1bGVzL251bmp1Y2tzL3NyYy9vYmplY3QuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbnVuanVja3NAMy4yLjQvbm9kZV9tb2R1bGVzL251bmp1Y2tzL3NyYy9ub2Rlcy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL3BhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL3RyYW5zZm9ybWVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL251bmp1Y2tzQDMuMi40L25vZGVfbW9kdWxlcy9udW5qdWNrcy9zcmMvcnVudGltZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL2NvbXBpbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL251bmp1Y2tzQDMuMi40L25vZGVfbW9kdWxlcy9udW5qdWNrcy9zcmMvZmlsdGVycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL2xvYWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL3ByZWNvbXBpbGVkLWxvYWRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL25vZGUtbG9hZGVycy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL3Rlc3RzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL251bmp1Y2tzQDMuMi40L25vZGVfbW9kdWxlcy9udW5qdWNrcy9zcmMvZ2xvYmFscy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL2V4cHJlc3MtYXBwLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL251bmp1Y2tzQDMuMi40L25vZGVfbW9kdWxlcy9udW5qdWNrcy9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbnVuanVja3NAMy4yLjQvbm9kZV9tb2R1bGVzL251bmp1Y2tzL3NyYy9wcmVjb21waWxlLWdsb2JhbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9udW5qdWNrc0AzLjIuNC9ub2RlX21vZHVsZXMvbnVuanVja3Mvc3JjL3ByZWNvbXBpbGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbnVuanVja3NAMy4yLjQvbm9kZV9tb2R1bGVzL251bmp1Y2tzL3NyYy9qaW5qYS1jb21wYXQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vbnVuanVja3NAMy4yLjQvbm9kZV9tb2R1bGVzL251bmp1Y2tzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0B0cmFjZWxvb3Arbm9kZS1zZXJ2ZXItc2RrQDAuMjEuMS9ub2RlX21vZHVsZXMvQHRyYWNlbG9vcC9ub2RlLXNlcnZlci1zZGsvZGlzdC9pbmRleC5tanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L2xvZ2dlci9jb25zb2xlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9vdGVsL2xvZ2dlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3Qvb3RlbC9jb25zb2xlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9vdGVsL2ZldGNoLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9vdGVsL2V4cG9ydGVycy9qc29ubC1sb2ctZXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L290ZWwvZXhwb3J0ZXJzL2pzb25sLXRyYWNlLWV4cG9ydGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9vdGVsL2V4cG9ydGVycy9qc29ubC1tZXRyaWMtZXhwb3J0ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L290ZWwvZXhwb3J0ZXJzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9vdGVsL290ZWwuanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L290ZWwvY29uZmlnLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC9fcHJvY2Vzcy1wcm90ZWN0aW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zyb250ZW5kL2Rpc3QvYmVhY29uLXNjcmlwdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L21pZGRsZXdhcmUvc2VydmUtc3RhdGljL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvYWRhcHRlci9idW4vc2VydmUtc3RhdGljLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvY2xpZW50L3V0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvdXRpbHMvaGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L2hlbHBlci9zc2cvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9oZWxwZXIvc3NnL21pZGRsZXdhcmUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9oZWxwZXIvc3NnL3NzZy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9ob25vQDQuMTEuMy9ub2RlX21vZHVsZXMvaG9uby9kaXN0L2hlbHBlci9zc2cvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9hZGFwdGVyL2J1bi9zc2cuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9oZWxwZXIvd2Vic29ja2V0L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvYWRhcHRlci9idW4vc2VydmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvYWRhcHRlci9idW4vd2Vic29ja2V0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL2hvbm9ANC4xMS4zL25vZGVfbW9kdWxlcy9ob25vL2Rpc3QvYWRhcHRlci9idW4vY29ubmluZm8uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vaG9ub0A0LjExLjMvbm9kZV9tb2R1bGVzL2hvbm8vZGlzdC9hZGFwdGVyL2J1bi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3QvaGFuZGxlcnMvd2Vic29ja2V0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3J1bnRpbWUvZGlzdC93b3JrYmVuY2guanMiLCAiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcnVudGltZS9kaXN0L2J1bi1zMy1wYXRjaC5qcyIsICIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ydW50aW1lL2Rpc3QvaW5kZXguanMiLCAiLi4vYXBwLnRzIiwgIi4uL3NyYy9hZ2VudC9lY2hvL2FnZW50LnRzIiwgIi4uL3NyYy9nZW5lcmF0ZWQvcmVnaXN0cnkudHMiLCAiLi4vc3JjL2FwaS9pbmRleC50cyIsICIuLi9zcmMvZ2VuZXJhdGVkL2FwcC50cyIsICIuLi9zcmMvZ2VuZXJhdGVkL3dlYmFuYWx5dGljcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIFNhZmVseSBzdHJpbmdpZnkgYW4gb2JqZWN0IHRvIEpTT04sIGhhbmRsaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkob2JqLCBzcGFjZSkge1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpO1xuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKF9rZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aXNpdGVkLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2UpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi5qcy5tYXAiLAogICAgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8vIE5PVEU6IHRoZXNlIGlkZWFzIGFyZSBib3Jyb3dlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9FZmZlY3QtVFMvZWZmZWN0XG5pbXBvcnQgeyBzYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9qc29uJztcbi8vIENvbmRpdGlvbmFsbHkgaW1wb3J0IHV0aWwgZm9yIE5vZGUuanMgZW52aXJvbm1lbnRzIG9ubHlcbmxldCB1dGlsO1xuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zPy5ub2RlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gRHluYW1pYyBpbXBvcnQgZm9yIE5vZGUuanMgdXRpbCBtb2R1bGVcbiAgICAgICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgaXQncyBvbmx5IGV4ZWN1dGVkIGluIE5vZGUuanMvQnVuIGVudmlyb25tZW50c1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICB1dGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJyk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGltcG9ydCBlcnJvcnMgaW4gYnJvd3NlciBlbnZpcm9ubWVudHNcbiAgICB9XG59XG5jb25zdCBfYXJnc1N5bSA9IFN5bWJvbCgnQEBSaWNoRXJyb3I6cGxhaW5BcmdzJyk7XG5jb25zdCBfY2F1c2VTeW0gPSBTeW1ib2woJ0BAUmljaEVycm9yOmNhdXNlJyk7XG5jb25zdCBfbWV0YVN5bSA9IFN5bWJvbCgnQEBSaWNoRXJyb3I6bWV0YScpOyAvLyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAobm9uLWVudW1lcmFibGUpXG5jb25zdCBfc3RydWN0dXJlZFN5bSA9IFN5bWJvbC5mb3IoJ0BAU3RydWN0dXJlZEVycm9yJyk7XG5jb25zdCBzcGFjZXIgPSAnICAnO1xuZXhwb3J0IGNsYXNzIFJpY2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICAvLyBwcml2YXRlIHNsb3RzIChub24tZW51bWVyYWJsZSlcbiAgICBbX2FyZ3NTeW1dO1xuICAgIFtfY2F1c2VTeW1dO1xuICAgIFtfbWV0YVN5bV07XG4gICAgY29uc3RydWN0b3IoYXJncykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYXJncz8ubWVzc2FnZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNhdXNlID0gKGFyZ3M/LmNhdXNlID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIC8vIElmIHBsYXRmb3JtIHN1cHBvcnRzIGVycm9yIGNhdXNlIG9wdGlvbiwgcGFzcyBpdCB0byBFcnJvciBjb25zdHJ1Y3RvclxuICAgICAgICAvLyAoTm9kZSAxNisgLyBtb2Rlcm4gZW5naW5lcylcbiAgICAgICAgaWYgKGNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb3JyZWN0IHByb3RvdHlwZSBjaGFpbiB3aGVuIHRyYW5zcGlsZWQgdG8gb2xkZXIgSlNcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgLy8gY2FwdHVyZSBhIGNsZWFuIHN0YWNrIChvbWl0IHRoaXMgY29uc3RydWN0b3IpXG4gICAgICAgIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIG5ldy50YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZmFsbGJhY2s6IGVuc3VyZSBzdGFjayBleGlzdHNcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBjb3B5IGFsbCBmaWVsZHMgZXhjZXB0IGNhdXNlIGFuZCBtZXNzYWdlICh3ZSBrZWVwIHRoZW0gc2VwYXJhdGUpXG4gICAgICAgICAgICBjb25zdCB7IGNhdXNlOiBfYywgbWVzc2FnZTogX20sIC4uLnJlc3QgfSA9IGFyZ3M7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcmVzdCk7XG4gICAgICAgICAgICAgICAgdGhpc1tfYXJnc1N5bV0gPSByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzW19jYXVzZVN5bV0gPSBjYXVzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoaWRlIGludGVybmFsIHN5bWJvbHMgYW5kIG1ldGEgKHJlZGVmaW5lIG5vbi1lbnVtZXJhYmxlKVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgX2FyZ3NTeW0sIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzW19hcmdzU3ltXSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgX2NhdXNlU3ltLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpc1tfY2F1c2VTeW1dLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBfbWV0YVN5bSwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXNbX21ldGFTeW1dID8/IHt9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBSZXR1cm4gdGhlIHN0b3JlZCBwbGFpbiBhcmdzIChpZiBhbnkpICovXG4gICAgZ2V0IHBsYWluQXJncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbX2FyZ3NTeW1dO1xuICAgIH1cbiAgICAvKiogUmV0dXJuIHRoZSBjYXVzZSAoaWYgYW55KSAqL1xuICAgIGdldCBjYXVzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbX2NhdXNlU3ltXTtcbiAgICB9XG4gICAgLyoqIFByZXR0eSwgcmVjdXJzaXZlIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZm9sbG93cyBjYXVzZSBjaGFpbikuICovXG4gICAgcHJldHR5UHJpbnQoc3BhY2UgPSAyKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBsZXQgY3VyID0gdGhpcztcbiAgICAgICAgbGV0IGRlcHRoID0gMDtcbiAgICAgICAgd2hpbGUgKGN1ciAmJiBjdXIgaW5zdGFuY2VvZiBFcnJvciAmJiAhdmlzaXRlZC5oYXMoY3VyKSkge1xuICAgICAgICAgICAgY29uc3QgY3VyQW55ID0gY3VyO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQoY3VyKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGAke2N1ci5uYW1lfSR7Y3VyQW55Ll90YWcgJiYgY3VyQW55Ll90YWcgIT09IGN1ci5uYW1lID8gYCAoJHtTdHJpbmcoY3VyQW55Ll90YWcpfSlgIDogJyd9JHtkZXB0aCA9PT0gMCA/ICcnIDogJyBbY2F1c2VdJ31gO1xuICAgICAgICAgICAgY29uc3QgbXNnID0gY3VyLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiBjdXIubWVzc2FnZSAhPT0gJycgPyBgOiAke2N1ci5tZXNzYWdlfWAgOiAnJztcbiAgICAgICAgICAgIGxpbmVzLnB1c2goaGVhZGVyICsgbXNnKTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgc3RhY2sgaWYgcHJlc2VudCAobGltaXQgdG8gZmlyc3QgbGluZSBvZiBzdGFjayBoZWFkZXIgZm9yIGJyZXZpdHkpXG4gICAgICAgICAgICBpZiAoY3VyLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaChzcGFjZXIgKyAnc3RhY2sgdHJhY2U6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tMaW5lcyA9IFN0cmluZyhjdXIuc3RhY2spLnNwbGl0KCdcXG4nKS5zbGljZSgxKTsgLy8gZHJvcCBmaXJzdCBsaW5lIChpdCdzIG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmRlbnQgc3RhY2tcbiAgICAgICAgICAgICAgICAgICAgbGV0IHMgPSBzdGFja0xpbmVzLm1hcCgocykgPT4gc3BhY2VyICsgc3BhY2VyICsgcy50cmltKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc1tzLmxlbmd0aCAtIDFdLmluY2x1ZGVzKCdwcm9jZXNzVGlja3NBbmRSZWplY3Rpb25zJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCguLi5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHBsYWluIGFyZ3MgYXMgZm9ybWF0dGVkIG91dHB1dCAoaWYgYW55KVxuICAgICAgICAgICAgaWYgKGN1ckFueVtfYXJnc1N5bV0pIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJnc1N0cjtcbiAgICAgICAgICAgICAgICBpZiAodXRpbD8uZm9ybWF0V2l0aE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1N0ciA9IHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGg6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0hpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93UHJveHk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4QXJyYXlMZW5ndGg6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3RyaW5nTGVuZ3RoOiA4MCAtIHNwYWNlci5sZW5ndGggKiAyLFxuICAgICAgICAgICAgICAgICAgICB9LCBjdXJBbnlbX2FyZ3NTeW1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBicm93c2VyIGVudmlyb25tZW50c1xuICAgICAgICAgICAgICAgICAgICBhcmdzU3RyID0gc2FmZVN0cmluZ2lmeShjdXJBbnlbX2FyZ3NTeW1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJnc1N0ciA9IGFyZ3NTdHIucmVwbGFjZSgvXnsvLCAnJykucmVwbGFjZSgvfSQvLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbmxpbmVzID0gYXJnc1N0clxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgobCkgPT4gc3BhY2VyICsgc3BhY2VyICsgbCArICdcXG4nKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaChzcGFjZXIgKyAnY29udGV4dDpcXG4nICsganNvbmxpbmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGluY2x1ZGUgY2F1c2Ugc3VtbWFyeSBpZiBub24tRXJyb3IgKGNvdWxkIGJlIG9iamVjdClcbiAgICAgICAgICAgIGNvbnN0IGMgPSBjdXIuY2F1c2UgPz8gY3VyQW55W19jYXVzZVN5bV07XG4gICAgICAgICAgICBpZiAoYyAmJiAhKGMgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKHNwYWNlciArICdjYXVzZTogJyArIHNhZmVTdHJpbmdpZnkoYywgc3BhY2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1ciA9IGMgaW5zdGFuY2VvZiBFcnJvciA/IGMgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBkZXB0aCArPSAxO1xuICAgICAgICAgICAgaWYgKGN1cilcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCctLSBjYXVzZWQgYnkgLS0nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGFzIG1lcmdlZDogYXJncywgcHVibGljIGVudW1lcmFibGUgcHJvcHMsIHBsdXMgd2VsbC1rbm93biBmaWVsZHNcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgICAgIC8vIGluY2x1ZGUgYXJncyBmaXJzdCAobm9uLWVudW1lcmFibGUgb3JpZ2luYWwgdmFsdWVzKVxuICAgICAgICBpZiAodGhpc1tfYXJnc1N5bV0pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3V0cHV0LCB0aGlzW19hcmdzU3ltXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29weSBlbnVtZXJhYmxlIG93biBwcm9wc1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcykpIHtcbiAgICAgICAgICAgIC8vIHNraXAgaW50ZXJuYWwgc3ltYm9scyAodGhleSBhcmUgbm9uLWVudW1lcmFibGUgYW55d2F5KVxuICAgICAgICAgICAgb3V0cHV0W2tdID0gdGhpc1trXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYW5vbmljYWwgZmllbGRzXG4gICAgICAgIG91dHB1dC5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBvdXRwdXQubWVzc2FnZSA9IHRoaXMubWVzc2FnZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhY2sgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG91dHB1dC5zdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgICAgIGlmICh0aGlzLmNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQuY2F1c2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuY2F1c2UubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5jYXVzZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBzdGFjazogdGhpcy5jYXVzZS5zdGFjayxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LmNhdXNlID0gdGhpcy5jYXVzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgLy8gZGVmYXVsdCB0byBwcmV0dHkgcHJpbnQgd2l0aCBzbWFsbCBpbmRlbnRcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldHR5UHJpbnQoMik7XG4gICAgfVxuICAgIFt1dGlsPy5pbnNwZWN0Py5jdXN0b20gfHwgU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0oX2RlcHRoLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV0dHlQcmludCgpOyAvLyBvciBzb21lIGNvbmNpc2Ugc3RyaW5nL0pTT05cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gU3RydWN0dXJlZEVycm9yKHRhZywgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKCkge1xuICAgICAgICAvLyBjcmVhdGUgYSB1bmlxdWUgc3ltYm9sIGZvciB0aGlzIHRhZydzIGFyZ3Mgc3RvcmFnZSBzbyBkaWZmZXJlbnQgZmFjdG9yaWVzIGRvbid0IGNsYXNoXG4gICAgICAgIGNvbnN0IHRhZ0FyZ3NTeW0gPSBTeW1ib2wuZm9yKGBAU3RydWN0dXJlZEVycm9yOnRhZzoke3RhZ31gKTtcbiAgICAgICAgY2xhc3MgVGFnZ2VkIGV4dGVuZHMgUmljaEVycm9yIHtcbiAgICAgICAgICAgIC8vIHJ1bnRpbWUgcmVhZG9ubHkgcHJvcGVydHkgZm9yIHRhZ1xuICAgICAgICAgICAgX3RhZyA9IHRhZztcbiAgICAgICAgICAgIHN0YXRpYyBkZWZhdWx0TWVzc2FnZSA9IGRlZmF1bHRNZXNzYWdlO1xuICAgICAgICAgICAgY29uc3RydWN0b3IoYXJncykge1xuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBgX3RhZ2AgaXNuJ3QgY29waWVkIGZyb20gYXJncyBhY2NpZGVudGFsbHlcbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlQXJncyA9IGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgID8gKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgX3RhZzogX2Rpc2NhcmQsIC4uLnJlc3QgfSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdDtcbiAgICAgICAgICAgICAgICAgICAgfSkoKVxuICAgICAgICAgICAgICAgICAgICA6IGFyZ3M7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgZGVmYXVsdCBtZXNzYWdlIGlmIG5vIG1lc3NhZ2UgcHJvdmlkZWRcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbEFyZ3MgPSBzYWZlQXJncyAmJiB0eXBlb2Ygc2FmZUFyZ3MgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgID8geyAuLi5zYWZlQXJncywgbWVzc2FnZTogc2FmZUFyZ3MubWVzc2FnZSA/PyBkZWZhdWx0TWVzc2FnZSB9XG4gICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBtZXNzYWdlOiBkZWZhdWx0TWVzc2FnZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNhZmVBcmdzO1xuICAgICAgICAgICAgICAgIHN1cGVyKGZpbmFsQXJncyk7XG4gICAgICAgICAgICAgICAgLy8gbmFtZSB0aGUgY2xhc3MgZm9yIG5pY2VyIHN0YWNrc1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmFtZScsIHsgdmFsdWU6IHRhZywgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IHRhZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBTdHJ1Y3R1cmVkRXJyb3Igd2l0aCBicmFuZCBzeW1ib2xcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgX3N0cnVjdHVyZWRTeW0sIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdGFnIGFyZ3Mgc3ltYm9sIHRvIGhpZGUgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBmYWN0b3J5IChub24tZW51bWVyYWJsZSlcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgdGFnQXJnc1N5bSwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2FmZUFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgcHJvdG90eXBlIG5hbWUgKHdvcmtzIGluIG1hbnkgZW5naW5lcylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUYWdnZWQsICduYW1lJywgeyB2YWx1ZTogU3RyaW5nKHRhZykgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgVGFnZ2VkLm5hbWUgPSB0YWc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRhZ2dlZDtcbiAgICB9XG4gICAgY29uc3QgYmFzZUNsYXNzID0gY3JlYXRlRXJyb3JDbGFzcygpO1xuICAgIC8vIFVzZSBhIFByb3h5IHRvIGludGVyY2VwdCBjYWxscyBhbmQgcmV0dXJuIHNoYXBlZCBjbGFzc2VzXG4gICAgY29uc3QgY2FsbGFibGUgPSBuZXcgUHJveHkoYmFzZUNsYXNzLCB7XG4gICAgICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJnLCBfYXJncykge1xuICAgICAgICAgICAgLy8gV2hlbiBjYWxsZWQgYXMgYSBmdW5jdGlvbiAoZm9yIGdlbmVyaWMgdHlwZSBhcHBsaWNhdGlvbiksIHJldHVybiBhIG5ldyBjbGFzc1xuICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gVHlwZVNjcmlwdCBzZWVzOiBTdHJ1Y3R1cmVkRXJyb3IoXCJUYWdcIik8U2hhcGU+KClcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFcnJvckNsYXNzKCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNhbGxhYmxlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIHBhc3NlZCBpcyBhbiBpbnN0YW5jZSBvZiBhIFN0cnVjdHVyZWRPYmplY3RcbiAqXG4gKiBAcGFyYW0gZXJyIHRoZSBlcnJvciBvYmplY3RcbiAqIEByZXR1cm5zIHRydWUgaWYgZXJyIGlzIGEgU3RydWN0dXJlZEVycm9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IFVwZ3JhZGVSZXF1aXJlZCA9IFN0cnVjdHVyZWRFcnJvcihcIlVwZ3JhZGVSZXF1aXJlZFwiLCBcIlVwZ3JhZGUgcmVxdWlyZWQgdG8gYWNjZXNzIHRoaXMgZmVhdHVyZVwiKVxuICogdHJ5IHtcbiAqICAgdGhyb3cgVXBncmFkZVJlcXVpcmVkKCk7XG4gKiB9IGNhdGNoIChleCkge1xuICogICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3IoZXgpKSB7XG4gKiAgICAgY29uc29sZS5sb2coZXguX3RhZyk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RydWN0dXJlZEVycm9yKGVycikge1xuICAgIHJldHVybiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgZXJyICE9PSBudWxsICYmXG4gICAgICAgIChfc3RydWN0dXJlZFN5bSBpbiBlcnIgfHwgZXJyIGluc3RhbmNlb2YgUmljaEVycm9yKSAmJlxuICAgICAgICB0eXBlb2YgZXJyLl90YWcgPT09ICdzdHJpbmcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgU3RydWN0dXJlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3InO1xuZXhwb3J0IGNvbnN0IFNlcnZpY2VFeGNlcHRpb24gPSBTdHJ1Y3R1cmVkRXJyb3IoJ1NlcnZpY2VFeGNlcHRpb24nKSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhjZXB0aW9uLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4uL2pzb24nO1xuaW1wb3J0IHsgU2VydmljZUV4Y2VwdGlvbiB9IGZyb20gJy4vZXhjZXB0aW9uJztcbmV4cG9ydCBjb25zdCBidWlsZFVybCA9IChiYXNlLCBwYXRoLCBzdWJwYXRoLCBxdWVyeSkgPT4ge1xuICAgIHBhdGggPSBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IHBhdGggOiBgLyR7cGF0aH1gO1xuICAgIGxldCB1cmwgPSBiYXNlLnJlcGxhY2UoL1xcLyQvLCAnJykgKyBwYXRoO1xuICAgIGlmIChzdWJwYXRoKSB7XG4gICAgICAgIHN1YnBhdGggPSBzdWJwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IHN1YnBhdGggOiBgLyR7c3VicGF0aH1gO1xuICAgICAgICB1cmwgKz0gc3VicGF0aDtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIHVybCArPSBgPyR7cXVlcnkudG9TdHJpbmcoKX1gO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b1NlcnZpY2VFeGNlcHRpb24obWV0aG9kLCB1cmwsIHJlc3BvbnNlKSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtc2Vzc2lvbi1pZCcpO1xuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZUV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VuYXV0aG9yaXplZCcsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlRXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTm90IEZvdW5kJyxcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICB9XG4gICAgY29uc3QgY3QgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgaWYgKGN0Py5pbmNsdWRlcygnanNvbicpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZUV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHBheWxvYWQuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXlsb2FkLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VFeGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBwYXlsb2FkLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZUV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLyoqIGRvbid0IHdvcnJ5ICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlRXhjZXB0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGJvZHksXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqL1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFNlcnZpY2VFeGNlcHRpb24oe1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgfSk7XG59XG5jb25zdCBiaW5hcnlDb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuY29uc3QgdGV4dENvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW4nO1xuY29uc3QganNvbkNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvUGF5bG9hZChkYXRhKSB7XG4gICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbJycsIHRleHRDb250ZW50VHlwZV07XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIGRhdGEpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGlmICgoZGF0YS5jaGFyQXQoMCkgPT09ICd7JyAmJiBkYXRhLmNoYXJBdChkYXRhLmxlbmd0aCAtIDEpID09PSAnfScpIHx8XG4gICAgICAgICAgICAgICAgKGRhdGEuY2hhckF0KDApID09PSAnWycgJiYgZGF0YS5jaGFyQXQoZGF0YS5sZW5ndGggLSAxKSA9PT0gJ10nKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZGF0YSwganNvbkNvbnRlbnRUeXBlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2RhdGEsIHRleHRDb250ZW50VHlwZV07XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgLy8gVXNlIEpTT04gdG8gcHJlc2VydmUgdHlwZSBvbiByb3VuZC10cmlwXG4gICAgICAgICAgICByZXR1cm4gW0pTT04uc3RyaW5naWZ5KGRhdGEpLCBqc29uQ29udGVudFR5cGVdO1xuICAgICAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtkYXRhLCBiaW5hcnlDb250ZW50VHlwZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2RhdGEuYnVmZmVyLCBiaW5hcnlDb250ZW50VHlwZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtkYXRhLCBiaW5hcnlDb250ZW50VHlwZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9QYXlsb2FkKGF3YWl0IGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b1BheWxvYWQoZGF0YSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbc2FmZVN0cmluZ2lmeShkYXRhKSwganNvbkNvbnRlbnRUeXBlXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWycnLCB0ZXh0Q29udGVudFR5cGVdO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZyb21SZXNwb25zZShyZXNwb25zZSkge1xuICAgIGNvbnN0IHJhd0NvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpID8/ICcnO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmF3Q29udGVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIWNvbnRlbnRUeXBlIHx8IGNvbnRlbnRUeXBlLmluY2x1ZGVzKCdqc29uJykpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZXNwb25zZS5qc29uKCkpO1xuICAgIH1cbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgndGV4dC8nKSkge1xuICAgICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgSlNPTiBmaXJzdCAoc29tZSBlbnZpcm9ubWVudHMgZGVmYXVsdCB0byB0ZXh0L3BsYWluKVxuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBpZiAodGV4dC50cmltKCkuc3RhcnRzV2l0aCgneycpIHx8IHRleHQudHJpbSgpLnN0YXJ0c1dpdGgoJ1snKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBOb3QgSlNPTiwgcmV0dXJuIGFzIHRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV91dGlsLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgYnVpbGRVcmwsIHRvU2VydmljZUV4Y2VwdGlvbiwgdG9QYXlsb2FkIH0gZnJvbSAnLi9fdXRpbCc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5jb25zdCBLZXlWYWx1ZUludmFsaWRUVExFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignS2V5VmFsdWVJbnZhbGlkVFRMRXJyb3InKTtcbmV4cG9ydCBjbGFzcyBLZXlWYWx1ZVN0b3JhZ2VTZXJ2aWNlIHtcbiAgICAjYWRhcHRlcjtcbiAgICAjYmFzZVVybDtcbiAgICBjb25zdHJ1Y3RvcihiYXNlVXJsLCBhZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgICAgICB0aGlzLiNiYXNlVXJsID0gYmFzZVVybDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0KG5hbWUsIGtleSkge1xuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVybCh0aGlzLiNiYXNlVXJsLCBgL2t2LzIwMjUtMDMtMTcvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9YCk7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoMTBfMDAwKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS5rZXl2YWx1ZS5nZXQnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXMuZGF0YSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogcmVzLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSA/PyAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgICAgICAgICBleGlzdHM6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGV4aXN0czogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0dFVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgc2V0KG5hbWUsIGtleSwgdmFsdWUsIHBhcmFtcykge1xuICAgICAgICBsZXQgdHRsc3RyID0gJyc7XG4gICAgICAgIGlmIChwYXJhbXM/LnR0bCkge1xuICAgICAgICAgICAgaWYgKHBhcmFtcy50dGwgPCA2MCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBLZXlWYWx1ZUludmFsaWRUVExFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0dGwgZm9yIGtleXZhbHVlIHNldCBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHMsIGdvdCAke3BhcmFtcy50dGx9YCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR0bHN0ciA9IGAvJHtwYXJhbXMudHRsfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgYC9rdi8yMDI1LTAzLTE3LyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfS8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfSR7dHRsc3RyfWApO1xuICAgICAgICBjb25zdCBbYm9keSwgY29udGVudFR5cGVdID0gYXdhaXQgdG9QYXlsb2FkKHZhbHVlKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHBhcmFtcz8uY29udGVudFR5cGUgfHwgY29udGVudFR5cGUsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LmtleXZhbHVlLnNldCcsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHR0bDogdHRsc3RyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGF3YWl0IHRvU2VydmljZUV4Y2VwdGlvbignUFVUJywgdXJsLCByZXMucmVzcG9uc2UpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGUobmFtZSwga2V5KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsIGAva3YvMjAyNS0wMy0xNy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX0vJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX1gKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LmtleXZhbHVlLmRlbGV0ZScsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgYXdhaXQgdG9TZXJ2aWNlRXhjZXB0aW9uKCdERUxFVEUnLCB1cmwsIHJlcy5yZXNwb25zZSk7XG4gICAgfVxuICAgIGFzeW5jIGdldFN0YXRzKG5hbWUpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgYC9rdi8yMDI1LTAzLTE3L3N0YXRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfWApO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDEwXzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuI2FkYXB0ZXIuaW52b2tlKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIHRlbGVtZXRyeToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZ2VudHVpdHkua2V5dmFsdWUuZ2V0U3RhdHMnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgbmFtZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0dFVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QWxsU3RhdHMoKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsICcva3YvMjAyNS0wMy0xNy9zdGF0cycpO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDEwXzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuI2FkYXB0ZXIuaW52b2tlKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIHRlbGVtZXRyeToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZ2VudHVpdHkua2V5dmFsdWUuZ2V0QWxsU3RhdHMnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0dFVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0TmFtZXNwYWNlcygpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCB0aGlzLmdldEFsbFN0YXRzKCk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzdGF0cyk7XG4gICAgfVxuICAgIGFzeW5jIHNlYXJjaChuYW1lLCBrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsIGAva3YvMjAyNS0wMy0xNy9zZWFyY2gvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleXdvcmQpfWApO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDMwXzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuI2FkYXB0ZXIuaW52b2tlKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIHRlbGVtZXRyeToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZ2VudHVpdHkua2V5dmFsdWUuc2VhcmNoJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IG5hbWUsIGtleXdvcmQgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgYXdhaXQgdG9TZXJ2aWNlRXhjZXB0aW9uKCdHRVQnLCB1cmwsIHJlcy5yZXNwb25zZSk7XG4gICAgfVxuICAgIGFzeW5jIGdldEtleXMobmFtZSkge1xuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVybCh0aGlzLiNiYXNlVXJsLCBgL2t2LzIwMjUtMDMtMTcva2V5cy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LmtleXZhbHVlLmdldEtleXMnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgbmFtZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0dFVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlTmFtZXNwYWNlKG5hbWUpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgYC9rdi8yMDI1LTAzLTE3LyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfWApO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDMwXzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuI2FkYXB0ZXIuaW52b2tlKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIHRlbGVtZXRyeToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZ2VudHVpdHkua2V5dmFsdWUuZGVsZXRlTmFtZXNwYWNlJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IG5hbWUgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgYXdhaXQgdG9TZXJ2aWNlRXhjZXB0aW9uKCdERUxFVEUnLCB1cmwsIHJlcy5yZXNwb25zZSk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZU5hbWVzcGFjZShuYW1lKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsIGAva3YvMjAyNS0wMy0xNy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgxMF8wMDApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS5rZXl2YWx1ZS5jcmVhdGVOYW1lc3BhY2UnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgbmFtZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ1BPU1QnLCB1cmwsIHJlcy5yZXNwb25zZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5dmFsdWUuanMubWFwIiwKICAgICIvKiogQSBzcGVjaWFsIGNvbnN0YW50IHdpdGggdHlwZSBgbmV2ZXJgICovXG5leHBvcnQgY29uc3QgTkVWRVIgPSBPYmplY3QuZnJlZXplKHtcbiAgICBzdGF0dXM6IFwiYWJvcnRlZFwiLFxufSk7XG5leHBvcnQgLypAX19OT19TSURFX0VGRkVDVFNfXyovIGZ1bmN0aW9uICRjb25zdHJ1Y3RvcihuYW1lLCBpbml0aWFsaXplciwgcGFyYW1zKSB7XG4gICAgZnVuY3Rpb24gaW5pdChpbnN0LCBkZWYpIHtcbiAgICAgICAgaWYgKCFpbnN0Ll96b2QpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcIl96b2RcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZixcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyOiBfLFxuICAgICAgICAgICAgICAgICAgICB0cmFpdHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3QuX3pvZC50cmFpdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zdC5fem9kLnRyYWl0cy5hZGQobmFtZSk7XG4gICAgICAgIGluaXRpYWxpemVyKGluc3QsIGRlZik7XG4gICAgICAgIC8vIHN1cHBvcnQgcHJvdG90eXBlIG1vZGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgcHJvdG8gPSBfLnByb3RvdHlwZTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3RvKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBrID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGlmICghKGsgaW4gaW5zdCkpIHtcbiAgICAgICAgICAgICAgICBpbnN0W2tdID0gcHJvdG9ba10uYmluZChpbnN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBkb2Vzbid0IHdvcmsgaWYgUGFyZW50IGhhcyBhIGNvbnN0cnVjdG9yIHdpdGggYXJndW1lbnRzXG4gICAgY29uc3QgUGFyZW50ID0gcGFyYW1zPy5QYXJlbnQgPz8gT2JqZWN0O1xuICAgIGNsYXNzIERlZmluaXRpb24gZXh0ZW5kcyBQYXJlbnQge1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRGVmaW5pdGlvbiwgXCJuYW1lXCIsIHsgdmFsdWU6IG5hbWUgfSk7XG4gICAgZnVuY3Rpb24gXyhkZWYpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnN0ID0gcGFyYW1zPy5QYXJlbnQgPyBuZXcgRGVmaW5pdGlvbigpIDogdGhpcztcbiAgICAgICAgaW5pdChpbnN0LCBkZWYpO1xuICAgICAgICAoX2EgPSBpbnN0Ll96b2QpLmRlZmVycmVkID8/IChfYS5kZWZlcnJlZCA9IFtdKTtcbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBpbnN0Ll96b2QuZGVmZXJyZWQpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCBcImluaXRcIiwgeyB2YWx1ZTogaW5pdCB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXywgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgICAgIHZhbHVlOiAoaW5zdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcmFtcz8uUGFyZW50ICYmIGluc3QgaW5zdGFuY2VvZiBwYXJhbXMuUGFyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGluc3Q/Ll96b2Q/LnRyYWl0cz8uaGFzKG5hbWUpO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KTtcbiAgICByZXR1cm4gXztcbn1cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgIFVUSUxJVElFUyAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IGNvbnN0ICRicmFuZCA9IFN5bWJvbChcInpvZF9icmFuZFwiKTtcbmV4cG9ydCBjbGFzcyAkWm9kQXN5bmNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoYEVuY291bnRlcmVkIFByb21pc2UgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlLiBVc2UgLnBhcnNlQXN5bmMoKSBpbnN0ZWFkLmApO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyAkWm9kRW5jb2RlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgRW5jb3VudGVyZWQgdW5pZGlyZWN0aW9uYWwgdHJhbnNmb3JtIGR1cmluZyBlbmNvZGU6ICR7bmFtZX1gKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJab2RFbmNvZGVFcnJvclwiO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBnbG9iYWxDb25maWcgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBjb25maWcobmV3Q29uZmlnKSB7XG4gICAgaWYgKG5ld0NvbmZpZylcbiAgICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxDb25maWcsIG5ld0NvbmZpZyk7XG4gICAgcmV0dXJuIGdsb2JhbENvbmZpZztcbn1cbiIsCiAgICAiLy8gZnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXF1YWwodmFsKSB7XG4gICAgcmV0dXJuIHZhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb3RFcXVhbCh2YWwpIHtcbiAgICByZXR1cm4gdmFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydElzKF9hcmcpIHsgfVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5ldmVyKF94KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB2YWx1ZSBpbiBleGhhdXN0aXZlIGNoZWNrXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydChfKSB7IH1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtVmFsdWVzKGVudHJpZXMpIHtcbiAgICBjb25zdCBudW1lcmljVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhlbnRyaWVzKS5maWx0ZXIoKHYpID0+IHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QuZW50cmllcyhlbnRyaWVzKVxuICAgICAgICAuZmlsdGVyKChbaywgX10pID0+IG51bWVyaWNWYWx1ZXMuaW5kZXhPZigraykgPT09IC0xKVxuICAgICAgICAubWFwKChbXywgdl0pID0+IHYpO1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gam9pblZhbHVlcyhhcnJheSwgc2VwYXJhdG9yID0gXCJ8XCIpIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKCh2YWwpID0+IHN0cmluZ2lmeVByaW1pdGl2ZSh2YWwpKS5qb2luKHNlcGFyYXRvcik7XG59XG5leHBvcnQgZnVuY3Rpb24ganNvblN0cmluZ2lmeVJlcGxhY2VyKF8sIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlZChnZXR0ZXIpIHtcbiAgICBjb25zdCBzZXQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICBpZiAoIXNldCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0dGVyKCk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidmFsdWVcIiwgeyB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYWNoZWQgdmFsdWUgYWxyZWFkeSBzZXRcIik7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudWxsaXNoKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xlYW5SZWdleChzb3VyY2UpIHtcbiAgICBjb25zdCBzdGFydCA9IHNvdXJjZS5zdGFydHNXaXRoKFwiXlwiKSA/IDEgOiAwO1xuICAgIGNvbnN0IGVuZCA9IHNvdXJjZS5lbmRzV2l0aChcIiRcIikgPyBzb3VyY2UubGVuZ3RoIC0gMSA6IHNvdXJjZS5sZW5ndGg7XG4gICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgZW5kKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdFNhZmVSZW1haW5kZXIodmFsLCBzdGVwKSB7XG4gICAgY29uc3QgdmFsRGVjQ291bnQgPSAodmFsLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC50b1N0cmluZygpO1xuICAgIGxldCBzdGVwRGVjQ291bnQgPSAoc3RlcFN0cmluZy5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGlmIChzdGVwRGVjQ291bnQgPT09IDAgJiYgL1xcZD9lLVxcZD8vLnRlc3Qoc3RlcFN0cmluZykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGVwU3RyaW5nLm1hdGNoKC9cXGQ/ZS0oXFxkPykvKTtcbiAgICAgICAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICAgICAgICAgIHN0ZXBEZWNDb3VudCA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGVjQ291bnQgPSB2YWxEZWNDb3VudCA+IHN0ZXBEZWNDb3VudCA/IHZhbERlY0NvdW50IDogc3RlcERlY0NvdW50O1xuICAgIGNvbnN0IHZhbEludCA9IE51bWJlci5wYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBOdW1iZXIucGFyc2VJbnQoc3RlcC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgcmV0dXJuICh2YWxJbnQgJSBzdGVwSW50KSAvIDEwICoqIGRlY0NvdW50O1xufVxuY29uc3QgRVZBTFVBVElORyA9IFN5bWJvbChcImV2YWx1YXRpbmdcIik7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTGF6eShvYmplY3QsIGtleSwgZ2V0dGVyKSB7XG4gICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEVWQUxVQVRJTkcpIHtcbiAgICAgICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQsIHJldHVybiB1bmRlZmluZWQgdG8gYnJlYWsgdGhlIGN5Y2xlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBFVkFMVUFUSU5HO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0dGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgICAvLyBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIG9iamVjdFtrZXldID0gdjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdENsb25lKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Qcm9wKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGVmcyguLi5kZWZzKSB7XG4gICAgY29uc3QgbWVyZ2VkRGVzY3JpcHRvcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZGVmKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWREZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIG1lcmdlZERlc2NyaXB0b3JzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZURlZihzY2hlbWEpIHtcbiAgICByZXR1cm4gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEF0UGF0aChvYmosIHBhdGgpIHtcbiAgICBpZiAoIXBhdGgpXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIHBhdGgucmVkdWNlKChhY2MsIGtleSkgPT4gYWNjPy5ba2V5XSwgb2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlQWxsT2JqZWN0KHByb21pc2VzT2JqKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb21pc2VzT2JqKTtcbiAgICBjb25zdCBwcm9taXNlcyA9IGtleXMubWFwKChrZXkpID0+IHByb21pc2VzT2JqW2tleV0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZE9iaiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc29sdmVkT2JqW2tleXNbaV1dID0gcmVzdWx0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRPYmo7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aCA9IDEwKSB7XG4gICAgY29uc3QgY2hhcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBzdHIgKz0gY2hhcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZXNjKHN0cikge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdHIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNsdWdpZnkoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAucmVwbGFjZSgvW15cXHdcXHMtXS9nLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXSsvZywgXCItXCIpXG4gICAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xufVxuZXhwb3J0IGNvbnN0IGNhcHR1cmVTdGFja1RyYWNlID0gKFwiY2FwdHVyZVN0YWNrVHJhY2VcIiBpbiBFcnJvciA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlIDogKC4uLl9hcmdzKSA9PiB7IH0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgZGF0YSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkYXRhKTtcbn1cbmV4cG9ydCBjb25zdCBhbGxvd3NFdmFsID0gY2FjaGVkKCgpID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgbmF2aWdhdG9yPy51c2VyQWdlbnQ/LmluY2x1ZGVzKFwiQ2xvdWRmbGFyZVwiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IEYgPSBGdW5jdGlvbjtcbiAgICAgICAgbmV3IEYoXCJcIik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSk7XG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gICAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIG1vZGlmaWVkIGNvbnN0cnVjdG9yXG4gICAgY29uc3QgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gICAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiBjdG9yICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIG1vZGlmaWVkIHByb3RvdHlwZVxuICAgIGNvbnN0IHByb3QgPSBjdG9yLnByb3RvdHlwZTtcbiAgICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gY3RvciBkb2Vzbid0IGhhdmUgc3RhdGljIGBpc1Byb3RvdHlwZU9mYFxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdCwgXCJpc1Byb3RvdHlwZU9mXCIpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dDbG9uZShvKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QobykpXG4gICAgICAgIHJldHVybiB7IC4uLm8gfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvKSlcbiAgICAgICAgcmV0dXJuIFsuLi5vXTtcbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1LZXlzKGRhdGEpIHtcbiAgICBsZXQga2V5Q291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICBrZXlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlDb3VudDtcbn1cbmV4cG9ydCBjb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihkYXRhKSA/IFwibmFuXCIgOiBcIm51bWJlclwiO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImJpZ2ludFwiO1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzeW1ib2xcIjtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmIHR5cGVvZiBkYXRhLnRoZW4gPT09IFwiZnVuY3Rpb25cIiAmJiBkYXRhLmNhdGNoICYmIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcm9taXNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWFwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodHlwZW9mIEZpbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5S2V5VHlwZXMgPSBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN5bWJvbFwiXSk7XG5leHBvcnQgY29uc3QgcHJpbWl0aXZlVHlwZXMgPSBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJpZ2ludFwiLCBcImJvb2xlYW5cIiwgXCJzeW1ib2xcIiwgXCJ1bmRlZmluZWRcIl0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuLy8gem9kLXNwZWNpZmljIHV0aWxzXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoaW5zdCwgZGVmLCBwYXJhbXMpIHtcbiAgICBjb25zdCBjbCA9IG5ldyBpbnN0Ll96b2QuY29uc3RyKGRlZiA/PyBpbnN0Ll96b2QuZGVmKTtcbiAgICBpZiAoIWRlZiB8fCBwYXJhbXM/LnBhcmVudClcbiAgICAgICAgY2wuX3pvZC5wYXJlbnQgPSBpbnN0O1xuICAgIHJldHVybiBjbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXJhbXMoX3BhcmFtcykge1xuICAgIGNvbnN0IHBhcmFtcyA9IF9wYXJhbXM7XG4gICAgaWYgKCFwYXJhbXMpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6ICgpID0+IHBhcmFtcyB9O1xuICAgIGlmIChwYXJhbXM/Lm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGFyYW1zPy5lcnJvciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNwZWNpZnkgYm90aCBgbWVzc2FnZWAgYW5kIGBlcnJvcmAgcGFyYW1zXCIpO1xuICAgICAgICBwYXJhbXMuZXJyb3IgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB9XG4gICAgZGVsZXRlIHBhcmFtcy5tZXNzYWdlO1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLmVycm9yID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4geyAuLi5wYXJhbXMsIGVycm9yOiAoKSA9PiBwYXJhbXMuZXJyb3IgfTtcbiAgICByZXR1cm4gcGFyYW1zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zcGFyZW50UHJveHkoZ2V0dGVyKSB7XG4gICAgbGV0IHRhcmdldDtcbiAgICByZXR1cm4gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgIGdldChfLCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldChfLCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFzKF8sIHByb3ApIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbGV0ZVByb3BlcnR5KF8sIHByb3ApIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3duS2V5cyhfKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF8sIHByb3ApIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmluZVByb3BlcnR5KF8sIHByb3AsIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlQcmltaXRpdmUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKVxuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKSArIFwiblwiO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbEtleXMoc2hhcGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2hhcGUpLmZpbHRlcigoaykgPT4ge1xuICAgICAgICByZXR1cm4gc2hhcGVba10uX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiICYmIHNoYXBlW2tdLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgTlVNQkVSX0ZPUk1BVF9SQU5HRVMgPSB7XG4gICAgc2FmZWludDogW051bWJlci5NSU5fU0FGRV9JTlRFR0VSLCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0sXG4gICAgaW50MzI6IFstMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0N10sXG4gICAgdWludDMyOiBbMCwgNDI5NDk2NzI5NV0sXG4gICAgZmxvYXQzMjogWy0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgsIDMuNDAyODIzNDY2Mzg1Mjg4NmUzOF0sXG4gICAgZmxvYXQ2NDogWy1OdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFXSxcbn07XG5leHBvcnQgY29uc3QgQklHSU5UX0ZPUk1BVF9SQU5HRVMgPSB7XG4gICAgaW50NjQ6IFsvKiBAX19QVVJFX18qLyBCaWdJbnQoXCItOTIyMzM3MjAzNjg1NDc3NTgwOFwiKSwgLyogQF9fUFVSRV9fKi8gQmlnSW50KFwiOTIyMzM3MjAzNjg1NDc3NTgwN1wiKV0sXG4gICAgdWludDY0OiBbLyogQF9fUFVSRV9fKi8gQmlnSW50KDApLCAvKiBAX19QVVJFX18qLyBCaWdJbnQoXCIxODQ0Njc0NDA3MzcwOTU1MTYxNVwiKV0sXG59O1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2soc2NoZW1hLCBtYXNrKSB7XG4gICAgY29uc3QgY3VyckRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBjaGVja3MgPSBjdXJyRGVmLmNoZWNrcztcbiAgICBjb25zdCBoYXNDaGVja3MgPSBjaGVja3MgJiYgY2hlY2tzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoZWNrcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIucGljaygpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1hc2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gY3VyckRlZi5zaGFwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiBcIiR7a2V5fVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbWFza1trZXldKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gY3VyckRlZi5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIG5ld1NoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gbmV3U2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrczogW10sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbWl0KHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGN1cnJEZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgY2hlY2tzID0gY3VyckRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLm9taXQoKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NoYXBlID0geyAuLi5zY2hlbWEuX3pvZC5kZWYuc2hhcGUgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1hc2spIHtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gY3VyckRlZi5zaGFwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiBcIiR7a2V5fVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbWFza1trZXldKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3U2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBuZXdTaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHNjaGVtYSwgc2hhcGUpIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3Qoc2hhcGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdFwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tzID0gc2NoZW1hLl96b2QuZGVmLmNoZWNrcztcbiAgICBjb25zdCBoYXNDaGVja3MgPSBjaGVja3MgJiYgY2hlY2tzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoZWNrcykge1xuICAgICAgICAvLyBPbmx5IHRocm93IGlmIG5ldyBzaGFwZSBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHNoYXBlXG4gICAgICAgIC8vIFVzZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgdG8gY2hlY2sga2V5IGV4aXN0ZW5jZSB3aXRob3V0IGFjY2Vzc2luZyB2YWx1ZXNcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTaGFwZSA9IHNjaGVtYS5fem9kLmRlZi5zaGFwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2hhcGUpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4aXN0aW5nU2hhcGUsIGtleSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBvdmVyd3JpdGUga2V5cyBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzLiBVc2UgYC5zYWZlRXh0ZW5kKClgIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3QgX3NoYXBlID0geyAuLi5zY2hlbWEuX3pvZC5kZWYuc2hhcGUsIC4uLnNoYXBlIH07XG4gICAgICAgICAgICBhc3NpZ25Qcm9wKHRoaXMsIFwic2hhcGVcIiwgX3NoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gX3NoYXBlO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gc2FmZUV4dGVuZChzY2hlbWEsIHNoYXBlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHNoYXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIHNhZmVFeHRlbmQ6IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zaGFwZSA9IHsgLi4uc2NoZW1hLl96b2QuZGVmLnNoYXBlLCAuLi5zaGFwZSB9O1xuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIF9zaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIF9zaGFwZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBfc2hhcGUgPSB7IC4uLmEuX3pvZC5kZWYuc2hhcGUsIC4uLmIuX3pvZC5kZWYuc2hhcGUgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBjYXRjaGFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBiLl96b2QuZGVmLmNhdGNoYWxsO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLCAvLyBkZWxldGUgZXhpc3RpbmcgY2hlY2tzXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKGEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbChDbGFzcywgc2NoZW1hLCBtYXNrKSB7XG4gICAgY29uc3QgY3VyckRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBjaGVja3MgPSBjdXJyRGVmLmNoZWNrcztcbiAgICBjb25zdCBoYXNDaGVja3MgPSBjaGVja3MgJiYgY2hlY2tzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoZWNrcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHsgLi4ub2xkU2hhcGUgfTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gb2xkU2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAob2xkU2hhcGVba2V5XSEuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IENsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9sZFNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2xkU2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKG9sZFNoYXBlW2tleV0hLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSBDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgQ2xhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRTaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBzaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQoQ2xhc3MsIHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHsgLi4ub2xkU2hhcGUgfTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBvdmVyd3JpdGUgd2l0aCBub24tb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9sZFNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSB3aXRoIG5vbi1vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gbmV3IENsYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIHNoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbi8vIGludmFsaWRfdHlwZSB8IHRvb19iaWcgfCB0b29fc21hbGwgfCBpbnZhbGlkX2Zvcm1hdCB8IG5vdF9tdWx0aXBsZV9vZiB8IHVucmVjb2duaXplZF9rZXlzIHwgaW52YWxpZF91bmlvbiB8IGludmFsaWRfa2V5IHwgaW52YWxpZF9lbGVtZW50IHwgaW52YWxpZF92YWx1ZSB8IGN1c3RvbVxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0ZWQoeCwgc3RhcnRJbmRleCA9IDApIHtcbiAgICBpZiAoeC5hYm9ydGVkID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IHguaXNzdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh4Lmlzc3Vlc1tpXT8uY29udGludWUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhJc3N1ZXMocGF0aCwgaXNzdWVzKSB7XG4gICAgcmV0dXJuIGlzc3Vlcy5tYXAoKGlzcykgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IGlzcykucGF0aCA/PyAoX2EucGF0aCA9IFtdKTtcbiAgICAgICAgaXNzLnBhdGgudW5zaGlmdChwYXRoKTtcbiAgICAgICAgcmV0dXJuIGlzcztcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZT8ubWVzc2FnZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb25maWcpIHtcbiAgICBjb25zdCBmdWxsID0geyAuLi5pc3MsIHBhdGg6IGlzcy5wYXRoID8/IFtdIH07XG4gICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgaWYgKCFpc3MubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdW53cmFwTWVzc2FnZShpc3MuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oaXNzKSkgPz9cbiAgICAgICAgICAgIHVud3JhcE1lc3NhZ2UoY3R4Py5lcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGNvbmZpZy5jdXN0b21FcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGNvbmZpZy5sb2NhbGVFcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgZnVsbC5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG4gICAgLy8gZGVsZXRlIChmdWxsIGFzIGFueSkuZGVmO1xuICAgIGRlbGV0ZSBmdWxsLmluc3Q7XG4gICAgZGVsZXRlIGZ1bGwuY29udGludWU7XG4gICAgaWYgKCFjdHg/LnJlcG9ydElucHV0KSB7XG4gICAgICAgIGRlbGV0ZSBmdWxsLmlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gZnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaXphYmxlT3JpZ2luKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgU2V0KVxuICAgICAgICByZXR1cm4gXCJzZXRcIjtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBNYXApXG4gICAgICAgIHJldHVybiBcIm1hcFwiO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlKVxuICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExlbmd0aGFibGVPcmlnaW4oaW5wdXQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpXG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlZFR5cGUoZGF0YSkge1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgZGF0YTtcbiAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOiB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGEpID8gXCJuYW5cIiA6IFwibnVtYmVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IGRhdGE7XG4gICAgICAgICAgICBpZiAob2JqICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopICE9PSBPYmplY3QucHJvdG90eXBlICYmIFwiY29uc3RydWN0b3JcIiBpbiBvYmogJiYgb2JqLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzc3VlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbaXNzLCBpbnB1dCwgaW5zdF0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgaXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc3MsXG4gICAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5pc3MgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkVudW0ob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iailcbiAgICAgICAgLmZpbHRlcigoW2ssIF9dKSA9PiB7XG4gICAgICAgIC8vIHJldHVybiB0cnVlIGlmIE5hTiwgbWVhbmluZyBpdCdzIG5vdCBhIG51bWJlciwgdGh1cyBhIHN0cmluZyBrZXlcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoaywgMTApKTtcbiAgICB9KVxuICAgICAgICAubWFwKChlbCkgPT4gZWxbMV0pO1xufVxuLy8gQ29kZWMgdXRpbGl0eSBmdW5jdGlvbnNcbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0KSB7XG4gICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0Jhc2U2NChieXRlcykge1xuICAgIGxldCBiaW5hcnlTdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYmluYXJ5U3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYnRvYShiaW5hcnlTdHJpbmcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NHVybFRvVWludDhBcnJheShiYXNlNjR1cmwpIHtcbiAgICBjb25zdCBiYXNlNjQgPSBiYXNlNjR1cmwucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XG4gICAgY29uc3QgcGFkZGluZyA9IFwiPVwiLnJlcGVhdCgoNCAtIChiYXNlNjQubGVuZ3RoICUgNCkpICUgNCk7XG4gICAgcmV0dXJuIGJhc2U2NFRvVWludDhBcnJheShiYXNlNjQgKyBwYWRkaW5nKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9CYXNlNjR1cmwoYnl0ZXMpIHtcbiAgICByZXR1cm4gdWludDhBcnJheVRvQmFzZTY0KGJ5dGVzKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIikucmVwbGFjZSgvPS9nLCBcIlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb1VpbnQ4QXJyYXkoaGV4KSB7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgvXjB4LywgXCJcIik7XG4gICAgaWYgKGNsZWFuSGV4Lmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nIGxlbmd0aFwiKTtcbiAgICB9XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShjbGVhbkhleC5sZW5ndGggLyAyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsZWFuSGV4Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGJ5dGVzW2kgLyAyXSA9IE51bWJlci5wYXJzZUludChjbGVhbkhleC5zbGljZShpLCBpICsgMiksIDE2KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0hleChieXRlcykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgICAgICAubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLy8gaW5zdGFuY2VvZlxuZXhwb3J0IGNsYXNzIENsYXNzIHtcbiAgICBjb25zdHJ1Y3RvciguLi5fYXJncykgeyB9XG59XG4iLAogICAgImltcG9ydCB7ICRjb25zdHJ1Y3RvciB9IGZyb20gXCIuL2NvcmUuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuY29uc3QgaW5pdGlhbGl6ZXIgPSAoaW5zdCwgZGVmKSA9PiB7XG4gICAgaW5zdC5uYW1lID0gXCIkWm9kRXJyb3JcIjtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJfem9kXCIsIHtcbiAgICAgICAgdmFsdWU6IGluc3QuX3pvZCxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiaXNzdWVzXCIsIHtcbiAgICAgICAgdmFsdWU6IGRlZixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgaW5zdC5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoZGVmLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwidG9TdHJpbmdcIiwge1xuICAgICAgICB2YWx1ZTogKCkgPT4gaW5zdC5tZXNzYWdlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3QgJFpvZEVycm9yID0gJGNvbnN0cnVjdG9yKFwiJFpvZEVycm9yXCIsIGluaXRpYWxpemVyKTtcbmV4cG9ydCBjb25zdCAkWm9kUmVhbEVycm9yID0gJGNvbnN0cnVjdG9yKFwiJFpvZEVycm9yXCIsIGluaXRpYWxpemVyLCB7IFBhcmVudDogRXJyb3IgfSk7XG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgIGNvbnN0IGZvcm1FcnJvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHN1YiBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgaWYgKHN1Yi5wYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSA9IGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSB8fCBbXTtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXS5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1FcnJvcnMucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgZm9ybUVycm9ycywgZmllbGRFcnJvcnMgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFcnJvcihlcnJvciwgbWFwcGVyID0gKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKSB7XG4gICAgY29uc3QgZmllbGRFcnJvcnMgPSB7IF9lcnJvcnM6IFtdIH07XG4gICAgY29uc3QgcHJvY2Vzc0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIgJiYgaXNzdWUuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlzc3VlLmVycm9ycy5tYXAoKGlzc3VlcykgPT4gcHJvY2Vzc0Vycm9yKHsgaXNzdWVzIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9rZXlcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX2VsZW1lbnRcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gaXNzdWUucGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVybWluYWwgPSBpID09PSBpc3N1ZS5wYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXS5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnJbZWxdO1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwcm9jZXNzRXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBmaWVsZEVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmVlaWZ5RXJyb3IoZXJyb3IsIG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgZXJyb3JzOiBbXSB9O1xuICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvciwgcGF0aCA9IFtdKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIgJiYgaXNzdWUuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHJlZ3VsYXIgdW5pb24gZXJyb3JcbiAgICAgICAgICAgICAgICBpc3N1ZS5lcnJvcnMubWFwKChpc3N1ZXMpID0+IHByb2Nlc3NFcnJvcih7IGlzc3VlcyB9LCBpc3N1ZS5wYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfa2V5XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoeyBpc3N1ZXM6IGlzc3VlLmlzc3VlcyB9LCBpc3N1ZS5wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9lbGVtZW50XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoeyBpc3N1ZXM6IGlzc3VlLmlzc3VlcyB9LCBpc3N1ZS5wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdO1xuICAgICAgICAgICAgICAgIGlmIChmdWxscGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGN1cnIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgZnVsbHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZnVsbHBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gZnVsbHBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5wcm9wZXJ0aWVzID8/IChjdXJyLnByb3BlcnRpZXMgPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBjdXJyLnByb3BlcnRpZXMpW2VsXSA/PyAoX2FbZWxdID0geyBlcnJvcnM6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIucHJvcGVydGllc1tlbF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyLml0ZW1zID8/IChjdXJyLml0ZW1zID0gW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9iID0gY3Vyci5pdGVtcylbZWxdID8/IChfYltlbF0gPSB7IGVycm9yczogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5pdGVtc1tlbF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm1pbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyLmVycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByb2Nlc3NFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBGb3JtYXQgYSBab2RFcnJvciBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBpbiB0aGUgZm9sbG93aW5nIGZvcm0uXG4gKlxuICogRnJvbVxuICpcbiAqIGBgYHRzXG4gKiBab2RFcnJvciB7XG4gKiAgIGlzc3VlczogW1xuICogICAgIHtcbiAqICAgICAgIGV4cGVjdGVkOiAnc3RyaW5nJyxcbiAqICAgICAgIGNvZGU6ICdpbnZhbGlkX3R5cGUnLFxuICogICAgICAgcGF0aDogWyAndXNlcm5hbWUnIF0sXG4gKiAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgc3RyaW5nJ1xuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgZXhwZWN0ZWQ6ICdudW1iZXInLFxuICogICAgICAgY29kZTogJ2ludmFsaWRfdHlwZScsXG4gKiAgICAgICBwYXRoOiBbICdmYXZvcml0ZU51bWJlcnMnLCAxIF0sXG4gKiAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgbnVtYmVyJ1xuICogICAgIH1cbiAqICAgXTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIHRvXG4gKlxuICogYGBgXG4gKiB1c2VybmFtZVxuICogICDinJYgRXhwZWN0ZWQgbnVtYmVyLCByZWNlaXZlZCBzdHJpbmcgYXQgXCJ1c2VybmFtZVxuICogZmF2b3JpdGVOdW1iZXJzWzBdXG4gKiAgIOKcliBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCBudW1iZXJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Eb3RQYXRoKF9wYXRoKSB7XG4gICAgY29uc3Qgc2VncyA9IFtdO1xuICAgIGNvbnN0IHBhdGggPSBfcGF0aC5tYXAoKHNlZykgPT4gKHR5cGVvZiBzZWcgPT09IFwib2JqZWN0XCIgPyBzZWcua2V5IDogc2VnKSk7XG4gICAgZm9yIChjb25zdCBzZWcgb2YgcGF0aCkge1xuICAgICAgICBpZiAodHlwZW9mIHNlZyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHNlZ3MucHVzaChgWyR7c2VnfV1gKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNlZyA9PT0gXCJzeW1ib2xcIilcbiAgICAgICAgICAgIHNlZ3MucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKHNlZykpfV1gKTtcbiAgICAgICAgZWxzZSBpZiAoL1teXFx3JF0vLnRlc3Qoc2VnKSlcbiAgICAgICAgICAgIHNlZ3MucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoc2VnKX1dYCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNlZ3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHNlZ3MucHVzaChcIi5cIik7XG4gICAgICAgICAgICBzZWdzLnB1c2goc2VnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2Vncy5qb2luKFwiXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByZXR0aWZ5RXJyb3IoZXJyb3IpIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIC8vIHNvcnQgYnkgcGF0aCBsZW5ndGhcbiAgICBjb25zdCBpc3N1ZXMgPSBbLi4uZXJyb3IuaXNzdWVzXS5zb3J0KChhLCBiKSA9PiAoYS5wYXRoID8/IFtdKS5sZW5ndGggLSAoYi5wYXRoID8/IFtdKS5sZW5ndGgpO1xuICAgIC8vIFByb2Nlc3MgZWFjaCBpc3N1ZVxuICAgIGZvciAoY29uc3QgaXNzdWUgb2YgaXNzdWVzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYOKcliAke2lzc3VlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGlmIChpc3N1ZS5wYXRoPy5sZW5ndGgpXG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAgIOKGkiBhdCAke3RvRG90UGF0aChpc3N1ZS5wYXRoKX1gKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBNYXAgdG8gZm9ybWF0dGVkIHN0cmluZ1xuICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuL2NvcmUuanNcIjtcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IGNvbnN0IF9wYXJzZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCwgX3BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyBPYmplY3QuYXNzaWduKF9jdHgsIHsgYXN5bmM6IGZhbHNlIH0pIDogeyBhc3luYzogZmFsc2UgfTtcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBlID0gbmV3IChfcGFyYW1zPy5FcnIgPz8gX0VycikocmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpO1xuICAgICAgICB1dGlsLmNhcHR1cmVTdGFja1RyYWNlKGUsIF9wYXJhbXM/LmNhbGxlZSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG59O1xuZXhwb3J0IGNvbnN0IHBhcnNlID0gLyogQF9fUFVSRV9fKi8gX3BhcnNlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfcGFyc2VBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwgeyBhc3luYzogdHJ1ZSB9KSA6IHsgYXN5bmM6IHRydWUgfTtcbiAgICBsZXQgcmVzdWx0ID0gc2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBlID0gbmV3IChwYXJhbXM/LkVyciA/PyBfRXJyKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSk7XG4gICAgICAgIHV0aWwuY2FwdHVyZVN0YWNrVHJhY2UoZSwgcGFyYW1zPy5jYWxsZWUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCBwYXJzZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX3BhcnNlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlUGFyc2UgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBhc3luYzogZmFsc2UgfSA6IHsgYXN5bmM6IGZhbHNlIH07XG4gICAgY29uc3QgcmVzdWx0ID0gc2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0Lmlzc3Vlcy5sZW5ndGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBuZXcgKF9FcnIgPz8gZXJyb3JzLiRab2RFcnJvcikocmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpLFxuICAgICAgICB9XG4gICAgICAgIDogeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZVBhcnNlID0gLyogQF9fUFVSRV9fKi8gX3NhZmVQYXJzZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVQYXJzZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwgeyBhc3luYzogdHJ1ZSB9KSA6IHsgYXN5bmM6IHRydWUgfTtcbiAgICBsZXQgcmVzdWx0ID0gc2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQuaXNzdWVzLmxlbmd0aFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyBfRXJyKHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICAgICAgfVxuICAgICAgICA6IHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LnZhbHVlIH07XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX3NhZmVQYXJzZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZW5jb2RlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwgeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9KSA6IHsgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCIgfTtcbiAgICByZXR1cm4gX3BhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGVuY29kZSA9IC8qIEBfX1BVUkVfXyovIF9lbmNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9kZWNvZGUgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICByZXR1cm4gX3BhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xufTtcbmV4cG9ydCBjb25zdCBkZWNvZGUgPSAvKiBAX19QVVJFX18qLyBfZGVjb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZW5jb2RlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8gT2JqZWN0LmFzc2lnbihfY3R4LCB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0pIDogeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9O1xuICAgIHJldHVybiBfcGFyc2VBc3luYyhfRXJyKShzY2hlbWEsIHZhbHVlLCBjdHgpO1xufTtcbmV4cG9ydCBjb25zdCBlbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9lbmNvZGVBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX2RlY29kZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgcmV0dXJuIF9wYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xufTtcbmV4cG9ydCBjb25zdCBkZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9kZWNvZGVBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVFbmNvZGUgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8gT2JqZWN0LmFzc2lnbihfY3R4LCB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0pIDogeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9O1xuICAgIHJldHVybiBfc2FmZVBhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVFbmNvZGUgPSAvKiBAX19QVVJFX18qLyBfc2FmZUVuY29kZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVEZWNvZGUgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICByZXR1cm4gX3NhZmVQYXJzZShfRXJyKShzY2hlbWEsIHZhbHVlLCBfY3R4KTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZSA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRGVjb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZUVuY29kZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwgeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9KSA6IHsgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCIgfTtcbiAgICByZXR1cm4gX3NhZmVQYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVFbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRW5jb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlRGVjb2RlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICByZXR1cm4gX3NhZmVQYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xufTtcbmV4cG9ydCBjb25zdCBzYWZlRGVjb2RlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfc2FmZURlY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgY3VpZCA9IC9eW2NDXVteXFxzLV17OCx9JC87XG5leHBvcnQgY29uc3QgY3VpZDIgPSAvXlswLTlhLXpdKyQvO1xuZXhwb3J0IGNvbnN0IHVsaWQgPSAvXlswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjZ9JC87XG5leHBvcnQgY29uc3QgeGlkID0gL15bMC05YS12QS1WXXsyMH0kLztcbmV4cG9ydCBjb25zdCBrc3VpZCA9IC9eW0EtWmEtejAtOV17Mjd9JC87XG5leHBvcnQgY29uc3QgbmFub2lkID0gL15bYS16QS1aMC05Xy1dezIxfSQvO1xuLyoqIElTTyA4NjAxLTEgZHVyYXRpb24gcmVnZXguIERvZXMgbm90IHN1cHBvcnQgdGhlIDg2MDEtMiBleHRlbnNpb25zIGxpa2UgbmVnYXRpdmUgZHVyYXRpb25zIG9yIGZyYWN0aW9uYWwvbmVnYXRpdmUgY29tcG9uZW50cy4gKi9cbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IC9eUCg/OihcXGQrVyl8KD8hLipXKSg/PVxcZHxUXFxkKShcXGQrWSk/KFxcZCtNKT8oXFxkK0QpPyhUKD89XFxkKShcXGQrSCk/KFxcZCtNKT8oXFxkKyhbLixdXFxkKyk/Uyk/KT8pJC87XG4vKiogSW1wbGVtZW50cyBJU08gODYwMS0yIGV4dGVuc2lvbnMgbGlrZSBleHBsaWNpdCArLSBwcmVmaXhlcywgbWl4aW5nIHdlZWtzIHdpdGggb3RoZXIgdW5pdHMsIGFuZCBmcmFjdGlvbmFsL25lZ2F0aXZlIGNvbXBvbmVudHMuICovXG5leHBvcnQgY29uc3QgZXh0ZW5kZWREdXJhdGlvbiA9IC9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xcZCtZKXwoPzpbLStdP1xcZCtbLixdXFxkK1kkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/Oig/OlstK10/XFxkK1cpfCg/OlstK10/XFxkK1suLF1cXGQrVyQpKT8oPzooPzpbLStdP1xcZCtEKXwoPzpbLStdP1xcZCtbLixdXFxkK0QkKSk/KD86VCg/PVtcXGQrLV0pKD86KD86Wy0rXT9cXGQrSCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtIJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzpbLStdP1xcZCsoPzpbLixdXFxkKyk/Uyk/KT8/JC87XG4vKiogQSByZWdleCBmb3IgYW55IFVVSUQtbGlrZSBpZGVudGlmaWVyOiA4LTQtNC00LTEyIGhleCBwYXR0ZXJuICovXG5leHBvcnQgY29uc3QgZ3VpZCA9IC9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSkkLztcbi8qKiBSZXR1cm5zIGEgcmVnZXggZm9yIHZhbGlkYXRpbmcgYW4gUkZDIDk1NjIvNDEyMiBVVUlELlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIE9wdGlvbmFsbHkgc3BlY2lmeSBhIHZlcnNpb24gMS04LiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCwgYWxsIHZlcnNpb25zIGFyZSBzdXBwb3J0ZWQuICovXG5leHBvcnQgY29uc3QgdXVpZCA9ICh2ZXJzaW9uKSA9PiB7XG4gICAgaWYgKCF2ZXJzaW9uKVxuICAgICAgICByZXR1cm4gL14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7dmVyc2lvbn1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk7XG59O1xuZXhwb3J0IGNvbnN0IHV1aWQ0ID0gLypAX19QVVJFX18qLyB1dWlkKDQpO1xuZXhwb3J0IGNvbnN0IHV1aWQ2ID0gLypAX19QVVJFX18qLyB1dWlkKDYpO1xuZXhwb3J0IGNvbnN0IHV1aWQ3ID0gLypAX19QVVJFX18qLyB1dWlkKDcpO1xuLyoqIFByYWN0aWNhbCBlbWFpbCB2YWxpZGF0aW9uICovXG5leHBvcnQgY29uc3QgZW1haWwgPSAvXig/IVxcLikoPyEuKlxcLlxcLikoW0EtWmEtejAtOV8nK1xcLVxcLl0qKVtBLVphLXowLTlfKy1dQChbQS1aYS16MC05XVtBLVphLXowLTlcXC1dKlxcLikrW0EtWmEtel17Mix9JC87XG4vKiogRXF1aXZhbGVudCB0byB0aGUgSFRNTDUgaW5wdXRbdHlwZT1lbWFpbF0gdmFsaWRhdGlvbiBpbXBsZW1lbnRlZCBieSBicm93c2Vycy4gU291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvZW1haWwgKi9cbmV4cG9ydCBjb25zdCBodG1sNUVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLyoqIFRoZSBjbGFzc2ljIGVtYWlscmVnZXguY29tIHJlZ2V4IGZvciBSRkMgNTMyMi1jb21wbGlhbnQgZW1haWxzICovXG5leHBvcnQgY29uc3QgcmZjNTMyMkVtYWlsID0gL14oKFtePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4vKiogQSBsb29zZSByZWdleCB0aGF0IGFsbG93cyBVbmljb2RlIGNoYXJhY3RlcnMsIGVuZm9yY2VzIGxlbmd0aCBsaW1pdHMsIGFuZCB0aGF0J3MgYWJvdXQgaXQuICovXG5leHBvcnQgY29uc3QgdW5pY29kZUVtYWlsID0gL15bXlxcc0BcIl17MSw2NH1AW15cXHNAXXsxLDI1NX0kL3U7XG5leHBvcnQgY29uc3QgaWRuRW1haWwgPSB1bmljb2RlRW1haWw7XG5leHBvcnQgY29uc3QgYnJvd3NlckVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamkgPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xuZXhwb3J0IGZ1bmN0aW9uIGVtb2ppKCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKF9lbW9qaSwgXCJ1XCIpO1xufVxuZXhwb3J0IGNvbnN0IGlwdjQgPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuZXhwb3J0IGNvbnN0IGlwdjYgPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvO1xuZXhwb3J0IGNvbnN0IG1hYyA9IChkZWxpbWl0ZXIpID0+IHtcbiAgICBjb25zdCBlc2NhcGVkRGVsaW0gPSB1dGlsLmVzY2FwZVJlZ2V4KGRlbGltaXRlciA/PyBcIjpcIik7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7ZXNjYXBlZERlbGltfSl7NX1bMC05QS1GXXsyfSR8Xig/OlswLTlhLWZdezJ9JHtlc2NhcGVkRGVsaW19KXs1fVswLTlhLWZdezJ9JGApO1xufTtcbmV4cG9ydCBjb25zdCBjaWRydjQgPSAvXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLztcbmV4cG9ydCBjb25zdCBjaWRydjYgPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXw6OnwoWzAtOWEtZkEtRl17MSw0fSk/OjooWzAtOWEtZkEtRl17MSw0fTo/KXswLDZ9KVxcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC87XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODYwMzkyL2RldGVybWluZS1pZi1zdHJpbmctaXMtaW4tYmFzZTY0LXVzaW5nLWphdmFzY3JpcHRcbmV4cG9ydCBjb25zdCBiYXNlNjQgPSAvXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLztcbmV4cG9ydCBjb25zdCBiYXNlNjR1cmwgPSAvXltBLVphLXowLTlfLV0qJC87XG4vLyBiYXNlZCBvbiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDYxNzkvcmVndWxhci1leHByZXNzaW9uLXRvLW1hdGNoLWRucy1ob3N0bmFtZS1vci1pcC1hZGRyZXNzXG4vLyBleHBvcnQgY29uc3QgaG9zdG5hbWU6IFJlZ0V4cCA9IC9eKFthLXpBLVowLTktXStcXC4pKlthLXpBLVowLTktXSskLztcbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IC9eKD89LnsxLDI1M31cXC4/JClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlxcLj8kLztcbmV4cG9ydCBjb25zdCBkb21haW4gPSAvXihbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cXC4pK1thLXpBLVpdezIsfSQvO1xuLy8gaHR0cHM6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy92YWxpZGF0ZS1waG9uZS1udW1iZXIjcjQtMyAocmVnZXggc2FucyBzcGFjZXMpXG4vLyBFLjE2NDogbGVhZGluZyBkaWdpdCBtdXN0IGJlIDEtOTsgdG90YWwgZGlnaXRzIChleGNsdWRpbmcgJysnKSBiZXR3ZWVuIDctMTVcbmV4cG9ydCBjb25zdCBlMTY0ID0gL15cXCtbMS05XVxcZHs2LDE0fSQvO1xuLy8gY29uc3QgZGF0ZVNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVNvdXJjZSA9IGAoPzooPzpcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuZXhwb3J0IGNvbnN0IGRhdGUgPSAvKkBfX1BVUkVfXyovIG5ldyBSZWdFeHAoYF4ke2RhdGVTb3VyY2V9JGApO1xuZnVuY3Rpb24gdGltZVNvdXJjZShhcmdzKSB7XG4gICAgY29uc3QgaGhtbSA9IGAoPzpbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkYDtcbiAgICBjb25zdCByZWdleCA9IHR5cGVvZiBhcmdzLnByZWNpc2lvbiA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IGFyZ3MucHJlY2lzaW9uID09PSAtMVxuICAgICAgICAgICAgPyBgJHtoaG1tfWBcbiAgICAgICAgICAgIDogYXJncy5wcmVjaXNpb24gPT09IDBcbiAgICAgICAgICAgICAgICA/IGAke2hobW19OlswLTVdXFxcXGRgXG4gICAgICAgICAgICAgICAgOiBgJHtoaG1tfTpbMC01XVxcXFxkXFxcXC5cXFxcZHske2FyZ3MucHJlY2lzaW9ufX1gXG4gICAgICAgIDogYCR7aGhtbX0oPzo6WzAtNV1cXFxcZCg/OlxcXFwuXFxcXGQrKT8pP2A7XG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRpbWUoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lU291cmNlKGFyZ3MpfSRgKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE0MzIzMVxuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKGFyZ3MpIHtcbiAgICBjb25zdCB0aW1lID0gdGltZVNvdXJjZSh7IHByZWNpc2lvbjogYXJncy5wcmVjaXNpb24gfSk7XG4gICAgY29uc3Qgb3B0cyA9IFtcIlpcIl07XG4gICAgaWYgKGFyZ3MubG9jYWwpXG4gICAgICAgIG9wdHMucHVzaChcIlwiKTtcbiAgICAvLyBpZiAoYXJncy5vZmZzZXQpIG9wdHMucHVzaChgKFsrLV1cXFxcZHsyfTpcXFxcZHsyfSlgKTtcbiAgICBpZiAoYXJncy5vZmZzZXQpXG4gICAgICAgIG9wdHMucHVzaChgKFsrLV0oPzpbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkKWApO1xuICAgIGNvbnN0IHRpbWVSZWdleCA9IGAke3RpbWV9KD86JHtvcHRzLmpvaW4oXCJ8XCIpfSlgO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtkYXRlU291cmNlfVQoPzoke3RpbWVSZWdleH0pJGApO1xufVxuZXhwb3J0IGNvbnN0IHN0cmluZyA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCByZWdleCA9IHBhcmFtcyA/IGBbXFxcXHNcXFxcU117JHtwYXJhbXM/Lm1pbmltdW0gPz8gMH0sJHtwYXJhbXM/Lm1heGltdW0gPz8gXCJcIn19YCA6IGBbXFxcXHNcXFxcU10qYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufTtcbmV4cG9ydCBjb25zdCBiaWdpbnQgPSAvXi0/XFxkK24/JC87XG5leHBvcnQgY29uc3QgaW50ZWdlciA9IC9eLT9cXGQrJC87XG5leHBvcnQgY29uc3QgbnVtYmVyID0gL14tP1xcZCsoPzpcXC5cXGQrKT8kLztcbmV4cG9ydCBjb25zdCBib29sZWFuID0gL14oPzp0cnVlfGZhbHNlKSQvaTtcbmNvbnN0IF9udWxsID0gL15udWxsJC9pO1xuZXhwb3J0IHsgX251bGwgYXMgbnVsbCB9O1xuY29uc3QgX3VuZGVmaW5lZCA9IC9edW5kZWZpbmVkJC9pO1xuZXhwb3J0IHsgX3VuZGVmaW5lZCBhcyB1bmRlZmluZWQgfTtcbi8vIHJlZ2V4IGZvciBzdHJpbmcgd2l0aCBubyB1cHBlcmNhc2UgbGV0dGVyc1xuZXhwb3J0IGNvbnN0IGxvd2VyY2FzZSA9IC9eW15BLVpdKiQvO1xuLy8gcmVnZXggZm9yIHN0cmluZyB3aXRoIG5vIGxvd2VyY2FzZSBsZXR0ZXJzXG5leHBvcnQgY29uc3QgdXBwZXJjYXNlID0gL15bXmEtel0qJC87XG4vLyByZWdleCBmb3IgaGV4YWRlY2ltYWwgc3RyaW5ncyAoYW55IGxlbmd0aClcbmV4cG9ydCBjb25zdCBoZXggPSAvXlswLTlhLWZBLUZdKiQvO1xuLy8gSGFzaCByZWdleGVzIGZvciBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhbmQgZW5jb2RpbmdzXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGJhc2U2NCByZWdleCB3aXRoIGV4YWN0IGxlbmd0aCBhbmQgcGFkZGluZ1xuZnVuY3Rpb24gZml4ZWRCYXNlNjQoYm9keUxlbmd0aCwgcGFkZGluZykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2JvZHlMZW5ndGh9fSR7cGFkZGluZ30kYCk7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGJhc2U2NHVybCByZWdleCB3aXRoIGV4YWN0IGxlbmd0aCAobm8gcGFkZGluZylcbmZ1bmN0aW9uIGZpeGVkQmFzZTY0dXJsKGxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2xlbmd0aH19JGApO1xufVxuLy8gTUQ1ICgxNiBieXRlcyk6IGJhc2U2NCA9IDI0IGNoYXJzIHRvdGFsICgyMiArIFwiPT1cIilcbmV4cG9ydCBjb25zdCBtZDVfaGV4ID0gL15bMC05YS1mQS1GXXszMn0kLztcbmV4cG9ydCBjb25zdCBtZDVfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCgyMiwgXCI9PVwiKTtcbmV4cG9ydCBjb25zdCBtZDVfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCgyMik7XG4vLyBTSEExICgyMCBieXRlcyk6IGJhc2U2NCA9IDI4IGNoYXJzIHRvdGFsICgyNyArIFwiPVwiKVxuZXhwb3J0IGNvbnN0IHNoYTFfaGV4ID0gL15bMC05YS1mQS1GXXs0MH0kLztcbmV4cG9ydCBjb25zdCBzaGExX2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoMjcsIFwiPVwiKTtcbmV4cG9ydCBjb25zdCBzaGExX2Jhc2U2NHVybCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjR1cmwoMjcpO1xuLy8gU0hBMjU2ICgzMiBieXRlcyk6IGJhc2U2NCA9IDQ0IGNoYXJzIHRvdGFsICg0MyArIFwiPVwiKVxuZXhwb3J0IGNvbnN0IHNoYTI1Nl9oZXggPSAvXlswLTlhLWZBLUZdezY0fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTI1Nl9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDQzLCBcIj1cIik7XG5leHBvcnQgY29uc3Qgc2hhMjU2X2Jhc2U2NHVybCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjR1cmwoNDMpO1xuLy8gU0hBMzg0ICg0OCBieXRlcyk6IGJhc2U2NCA9IDY0IGNoYXJzIHRvdGFsIChubyBwYWRkaW5nKVxuZXhwb3J0IGNvbnN0IHNoYTM4NF9oZXggPSAvXlswLTlhLWZBLUZdezk2fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTM4NF9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDY0LCBcIlwiKTtcbmV4cG9ydCBjb25zdCBzaGEzODRfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg2NCk7XG4vLyBTSEE1MTIgKDY0IGJ5dGVzKTogYmFzZTY0ID0gODggY2hhcnMgdG90YWwgKDg2ICsgXCI9PVwiKVxuZXhwb3J0IGNvbnN0IHNoYTUxMl9oZXggPSAvXlswLTlhLWZBLUZdezEyOH0kLztcbmV4cG9ydCBjb25zdCBzaGE1MTJfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCg4NiwgXCI9PVwiKTtcbmV4cG9ydCBjb25zdCBzaGE1MTJfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg4Nik7XG4iLAogICAgIi8vIGltcG9ydCB7ICRab2RUeXBlIH0gZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgKiBhcyByZWdleGVzIGZyb20gXCIuL3JlZ2V4ZXMuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVjayA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpbnN0Ll96b2QgPz8gKGluc3QuX3pvZCA9IHt9KTtcbiAgICBpbnN0Ll96b2QuZGVmID0gZGVmO1xuICAgIChfYSA9IGluc3QuX3pvZCkub25hdHRhY2ggPz8gKF9hLm9uYXR0YWNoID0gW10pO1xufSk7XG5jb25zdCBudW1lcmljT3JpZ2luTWFwID0ge1xuICAgIG51bWJlcjogXCJudW1iZXJcIixcbiAgICBiaWdpbnQ6IFwiYmlnaW50XCIsXG4gICAgb2JqZWN0OiBcImRhdGVcIixcbn07XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTGVzc1RoYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTGVzc1RoYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3Qgb3JpZ2luID0gbnVtZXJpY09yaWdpbk1hcFt0eXBlb2YgZGVmLnZhbHVlXTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBjb25zdCBjdXJyID0gKGRlZi5pbmNsdXNpdmUgPyBiYWcubWF4aW11bSA6IGJhZy5leGNsdXNpdmVNYXhpbXVtKSA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGlmIChkZWYudmFsdWUgPCBjdXJyKSB7XG4gICAgICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSlcbiAgICAgICAgICAgICAgICBiYWcubWF4aW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiYWcuZXhjbHVzaXZlTWF4aW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuaW5jbHVzaXZlID8gcGF5bG9hZC52YWx1ZSA8PSBkZWYudmFsdWUgOiBwYXlsb2FkLnZhbHVlIDwgZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IHR5cGVvZiBkZWYudmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWYudmFsdWUuZ2V0VGltZSgpIDogZGVmLnZhbHVlLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGRlZi5pbmNsdXNpdmUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tHcmVhdGVyVGhhbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tHcmVhdGVyVGhhblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBvcmlnaW4gPSBudW1lcmljT3JpZ2luTWFwW3R5cGVvZiBkZWYudmFsdWVdO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGNvbnN0IGN1cnIgPSAoZGVmLmluY2x1c2l2ZSA/IGJhZy5taW5pbXVtIDogYmFnLmV4Y2x1c2l2ZU1pbmltdW0pID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgaWYgKGRlZi52YWx1ZSA+IGN1cnIpIHtcbiAgICAgICAgICAgIGlmIChkZWYuaW5jbHVzaXZlKVxuICAgICAgICAgICAgICAgIGJhZy5taW5pbXVtID0gZGVmLnZhbHVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGJhZy5leGNsdXNpdmVNaW5pbXVtID0gZGVmLnZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGRlZi5pbmNsdXNpdmUgPyBwYXlsb2FkLnZhbHVlID49IGRlZi52YWx1ZSA6IHBheWxvYWQudmFsdWUgPiBkZWYudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICBtaW5pbXVtOiB0eXBlb2YgZGVmLnZhbHVlID09PSBcIm9iamVjdFwiID8gZGVmLnZhbHVlLmdldFRpbWUoKSA6IGRlZi52YWx1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBkZWYuaW5jbHVzaXZlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTXVsdGlwbGVPZiA9IFxuLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja011bHRpcGxlT2ZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBpbnN0Ll96b2QuYmFnKS5tdWx0aXBsZU9mID8/IChfYS5tdWx0aXBsZU9mID0gZGVmLnZhbHVlKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgIT09IHR5cGVvZiBkZWYudmFsdWUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbWl4IG51bWJlciBhbmQgYmlnaW50IGluIG11bHRpcGxlX29mIGNoZWNrLlwiKTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHR5cGVvZiBwYXlsb2FkLnZhbHVlID09PSBcImJpZ2ludFwiXG4gICAgICAgICAgICA/IHBheWxvYWQudmFsdWUgJSBkZWYudmFsdWUgPT09IEJpZ0ludCgwKVxuICAgICAgICAgICAgOiB1dGlsLmZsb2F0U2FmZVJlbWFpbmRlcihwYXlsb2FkLnZhbHVlLCBkZWYudmFsdWUpID09PSAwO1xuICAgICAgICBpZiAoaXNNdWx0aXBsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHR5cGVvZiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgY29kZTogXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICAgICAgICAgIGRpdmlzb3I6IGRlZi52YWx1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTnVtYmVyRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja051bWJlckZvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xuICAgIGRlZi5mb3JtYXQgPSBkZWYuZm9ybWF0IHx8IFwiZmxvYXQ2NFwiO1xuICAgIGNvbnN0IGlzSW50ID0gZGVmLmZvcm1hdD8uaW5jbHVkZXMoXCJpbnRcIik7XG4gICAgY29uc3Qgb3JpZ2luID0gaXNJbnQgPyBcImludFwiIDogXCJudW1iZXJcIjtcbiAgICBjb25zdCBbbWluaW11bSwgbWF4aW11bV0gPSB1dGlsLk5VTUJFUl9GT1JNQVRfUkFOR0VTW2RlZi5mb3JtYXRdO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5mb3JtYXQgPSBkZWYuZm9ybWF0O1xuICAgICAgICBiYWcubWluaW11bSA9IG1pbmltdW07XG4gICAgICAgIGJhZy5tYXhpbXVtID0gbWF4aW11bTtcbiAgICAgICAgaWYgKGlzSW50KVxuICAgICAgICAgICAgYmFnLnBhdHRlcm4gPSByZWdleGVzLmludGVnZXI7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoaXNJbnQpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpbnZhbGlkX2Zvcm1hdCBpc3N1ZVxuICAgICAgICAgICAgICAgIC8vIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIC8vICAgZXhwZWN0ZWQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgLy8gICBmb3JtYXQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgLy8gICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgLy8gICBpbnB1dCxcbiAgICAgICAgICAgICAgICAvLyAgIGluc3QsXG4gICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgLy8gaW52YWxpZF90eXBlIGlzc3VlXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZGVmLmZvcm1hdCxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gbm90X211bHRpcGxlX29mIGlzc3VlXG4gICAgICAgICAgICAgICAgLy8gcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgLy8gICBjb2RlOiBcIm5vdF9tdWx0aXBsZV9vZlwiLFxuICAgICAgICAgICAgICAgIC8vICAgb3JpZ2luOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgIC8vICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgLy8gICBpbnN0LFxuICAgICAgICAgICAgICAgIC8vICAgZGl2aXNvcjogMSxcbiAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b29fYmlnXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRvb19zbWFsbFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCA8IG1pbmltdW0pIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgICAgIG1pbmltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPiBtYXhpbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgbWF4aW11bSxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0JpZ0ludEZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tCaWdJbnRGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7IC8vIG5vIGZvcm1hdCBjaGVja3NcbiAgICBjb25zdCBbbWluaW11bSwgbWF4aW11bV0gPSB1dGlsLkJJR0lOVF9GT1JNQVRfUkFOR0VTW2RlZi5mb3JtYXRdO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5mb3JtYXQgPSBkZWYuZm9ybWF0O1xuICAgICAgICBiYWcubWluaW11bSA9IG1pbmltdW07XG4gICAgICAgIGJhZy5tYXhpbXVtID0gbWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmIChpbnB1dCA8IG1pbmltdW0pIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJiaWdpbnRcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgICAgIG1pbmltdW06IG1pbmltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPiBtYXhpbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgbWF4aW11bSxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01heFNpemUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWF4U2l6ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLnNpemUgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyID0gKGluc3QuX3pvZC5iYWcubWF4aW11bSA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBpZiAoZGVmLm1heGltdW0gPCBjdXJyKVxuICAgICAgICAgICAgaW5zdC5fem9kLmJhZy5tYXhpbXVtID0gZGVmLm1heGltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gaW5wdXQuc2l6ZTtcbiAgICAgICAgaWYgKHNpemUgPD0gZGVmLm1heGltdW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB1dGlsLmdldFNpemFibGVPcmlnaW4oaW5wdXQpLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICBtYXhpbXVtOiBkZWYubWF4aW11bSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWluU2l6ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNaW5TaXplXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwuc2l6ZSAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnIgPSAoaW5zdC5fem9kLmJhZy5taW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGlmIChkZWYubWluaW11bSA+IGN1cnIpXG4gICAgICAgICAgICBpbnN0Ll96b2QuYmFnLm1pbmltdW0gPSBkZWYubWluaW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNpemUgPSBpbnB1dC5zaXplO1xuICAgICAgICBpZiAoc2l6ZSA+PSBkZWYubWluaW11bSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHV0aWwuZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCksXG4gICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgbWluaW11bTogZGVmLm1pbmltdW0sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1NpemVFcXVhbHMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrU2l6ZUVxdWFsc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLnNpemUgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcubWluaW11bSA9IGRlZi5zaXplO1xuICAgICAgICBiYWcubWF4aW11bSA9IGRlZi5zaXplO1xuICAgICAgICBiYWcuc2l6ZSA9IGRlZi5zaXplO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGlucHV0LnNpemU7XG4gICAgICAgIGlmIChzaXplID09PSBkZWYuc2l6ZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdG9vQmlnID0gc2l6ZSA+IGRlZi5zaXplO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogdXRpbC5nZXRTaXphYmxlT3JpZ2luKGlucHV0KSxcbiAgICAgICAgICAgIC4uLih0b29CaWcgPyB7IGNvZGU6IFwidG9vX2JpZ1wiLCBtYXhpbXVtOiBkZWYuc2l6ZSB9IDogeyBjb2RlOiBcInRvb19zbWFsbFwiLCBtaW5pbXVtOiBkZWYuc2l6ZSB9KSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNYXhMZW5ndGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWF4TGVuZ3RoXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5tYXhpbXVtIDwgY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWF4aW11bSA9IGRlZi5tYXhpbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDw9IGRlZi5tYXhpbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW4gPSB1dGlsLmdldExlbmd0aGFibGVPcmlnaW4oaW5wdXQpO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heGltdW0sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pbkxlbmd0aCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNaW5MZW5ndGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyID0gKGluc3QuX3pvZC5iYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBpZiAoZGVmLm1pbmltdW0gPiBjdXJyKVxuICAgICAgICAgICAgaW5zdC5fem9kLmJhZy5taW5pbXVtID0gZGVmLm1pbmltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPj0gZGVmLm1pbmltdW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IHV0aWwuZ2V0TGVuZ3RoYWJsZU9yaWdpbihpbnB1dCk7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5pbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tMZW5ndGhFcXVhbHMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTGVuZ3RoRXF1YWxzXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgYmFnLm1pbmltdW0gPSBkZWYubGVuZ3RoO1xuICAgICAgICBiYWcubWF4aW11bSA9IGRlZi5sZW5ndGg7XG4gICAgICAgIGJhZy5sZW5ndGggPSBkZWYubGVuZ3RoO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID09PSBkZWYubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW4gPSB1dGlsLmdldExlbmd0aGFibGVPcmlnaW4oaW5wdXQpO1xuICAgICAgICBjb25zdCB0b29CaWcgPSBsZW5ndGggPiBkZWYubGVuZ3RoO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIC4uLih0b29CaWcgPyB7IGNvZGU6IFwidG9vX2JpZ1wiLCBtYXhpbXVtOiBkZWYubGVuZ3RoIH0gOiB7IGNvZGU6IFwidG9vX3NtYWxsXCIsIG1pbmltdW06IGRlZi5sZW5ndGggfSksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1N0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5mb3JtYXQgPSBkZWYuZm9ybWF0O1xuICAgICAgICBpZiAoZGVmLnBhdHRlcm4pIHtcbiAgICAgICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgICAgIGJhZy5wYXR0ZXJucy5hZGQoZGVmLnBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRlZi5wYXR0ZXJuKVxuICAgICAgICAoX2EgPSBpbnN0Ll96b2QpLmNoZWNrID8/IChfYS5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBkZWYucGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaWYgKGRlZi5wYXR0ZXJuLnRlc3QocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgLi4uKGRlZi5wYXR0ZXJuID8geyBwYXR0ZXJuOiBkZWYucGF0dGVybi50b1N0cmluZygpIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICBlbHNlXG4gICAgICAgIChfYiA9IGluc3QuX3pvZCkuY2hlY2sgPz8gKF9iLmNoZWNrID0gKCkgPT4geyB9KTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1JlZ2V4ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1JlZ2V4XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2tTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGRlZi5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChkZWYucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJyZWdleFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBwYXR0ZXJuOiBkZWYucGF0dGVybi50b1N0cmluZygpLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTG93ZXJDYXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xvd2VyQ2FzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5sb3dlcmNhc2UpO1xuICAgICRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tVcHBlckNhc2UgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrVXBwZXJDYXNlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnVwcGVyY2FzZSk7XG4gICAgJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0luY2x1ZGVzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0luY2x1ZGVzXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IGVzY2FwZWRSZWdleCA9IHV0aWwuZXNjYXBlUmVnZXgoZGVmLmluY2x1ZGVzKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCh0eXBlb2YgZGVmLnBvc2l0aW9uID09PSBcIm51bWJlclwiID8gYF4ueyR7ZGVmLnBvc2l0aW9ufX0ke2VzY2FwZWRSZWdleH1gIDogZXNjYXBlZFJlZ2V4KTtcbiAgICBkZWYucGF0dGVybiA9IHBhdHRlcm47XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgYmFnLnBhdHRlcm5zID8/IChiYWcucGF0dGVybnMgPSBuZXcgU2V0KCkpO1xuICAgICAgICBiYWcucGF0dGVybnMuYWRkKHBhdHRlcm4pO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlLmluY2x1ZGVzKGRlZi5pbmNsdWRlcywgZGVmLnBvc2l0aW9uKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiaW5jbHVkZXNcIixcbiAgICAgICAgICAgIGluY2x1ZGVzOiBkZWYuaW5jbHVkZXMsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1N0YXJ0c1dpdGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrU3RhcnRzV2l0aFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgXiR7dXRpbC5lc2NhcGVSZWdleChkZWYucHJlZml4KX0uKmApO1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHBhdHRlcm4pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZS5zdGFydHNXaXRoKGRlZi5wcmVmaXgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJzdGFydHNfd2l0aFwiLFxuICAgICAgICAgICAgcHJlZml4OiBkZWYucHJlZml4LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tFbmRzV2l0aCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tFbmRzV2l0aFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgLioke3V0aWwuZXNjYXBlUmVnZXgoZGVmLnN1ZmZpeCl9JGApO1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHBhdHRlcm4pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZS5lbmRzV2l0aChkZWYuc3VmZml4KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZW5kc193aXRoXCIsXG4gICAgICAgICAgICBzdWZmaXg6IGRlZi5zdWZmaXgsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vICAgICRab2RDaGVja1Byb3BlcnR5ICAgIC8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gaGFuZGxlQ2hlY2tQcm9wZXJ0eVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMocHJvcGVydHksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgJFpvZENoZWNrUHJvcGVydHkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrUHJvcGVydHlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLnNjaGVtYS5fem9kLnJ1bih7XG4gICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZVtkZWYucHJvcGVydHldLFxuICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgfSwge30pO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZUNoZWNrUHJvcGVydHlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBkZWYucHJvcGVydHkpKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVDaGVja1Byb3BlcnR5UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgZGVmLnByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNaW1lVHlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNaW1lVHlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBtaW1lU2V0ID0gbmV3IFNldChkZWYubWltZSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgaW5zdC5fem9kLmJhZy5taW1lID0gZGVmLm1pbWU7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKG1pbWVTZXQuaGFzKHBheWxvYWQudmFsdWUudHlwZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IGRlZi5taW1lLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUudHlwZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja092ZXJ3cml0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tPdmVyd3JpdGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi50eChwYXlsb2FkLnZhbHVlKTtcbiAgICB9O1xufSk7XG4iLAogICAgImV4cG9ydCBjbGFzcyBEb2Mge1xuICAgIGNvbnN0cnVjdG9yKGFyZ3MgPSBbXSkge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICBpZiAodGhpcylcbiAgICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuICAgIGluZGVudGVkKGZuKSB7XG4gICAgICAgIHRoaXMuaW5kZW50ICs9IDE7XG4gICAgICAgIGZuKHRoaXMpO1xuICAgICAgICB0aGlzLmluZGVudCAtPSAxO1xuICAgIH1cbiAgICB3cml0ZShhcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgYXJnKHRoaXMsIHsgZXhlY3V0aW9uOiBcInN5bmNcIiB9KTtcbiAgICAgICAgICAgIGFyZyh0aGlzLCB7IGV4ZWN1dGlvbjogXCJhc3luY1wiIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhcmc7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKS5maWx0ZXIoKHgpID0+IHgpO1xuICAgICAgICBjb25zdCBtaW5JbmRlbnQgPSBNYXRoLm1pbiguLi5saW5lcy5tYXAoKHgpID0+IHgubGVuZ3RoIC0geC50cmltU3RhcnQoKS5sZW5ndGgpKTtcbiAgICAgICAgY29uc3QgZGVkZW50ZWQgPSBsaW5lcy5tYXAoKHgpID0+IHguc2xpY2UobWluSW5kZW50KSkubWFwKCh4KSA9PiBcIiBcIi5yZXBlYXQodGhpcy5pbmRlbnQgKiAyKSArIHgpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZGVkZW50ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudC5wdXNoKGxpbmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIGNvbnN0IEYgPSBGdW5jdGlvbjtcbiAgICAgICAgY29uc3QgYXJncyA9IHRoaXM/LmFyZ3M7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzPy5jb250ZW50ID8/IFtgYF07XG4gICAgICAgIGNvbnN0IGxpbmVzID0gWy4uLmNvbnRlbnQubWFwKCh4KSA9PiBgICAke3h9YCldO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGKC4uLmFyZ3MsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgIH1cbn1cbiIsCiAgICAiZXhwb3J0IGNvbnN0IHZlcnNpb24gPSB7XG4gICAgbWFqb3I6IDQsXG4gICAgbWlub3I6IDMsXG4gICAgcGF0Y2g6IDUsXG59O1xuIiwKICAgICJpbXBvcnQgKiBhcyBjaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuL2NvcmUuanNcIjtcbmltcG9ydCB7IERvYyB9IGZyb20gXCIuL2RvYy5qc1wiO1xuaW1wb3J0IHsgcGFyc2UsIHBhcnNlQXN5bmMsIHNhZmVQYXJzZSwgc2FmZVBhcnNlQXN5bmMgfSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuaW1wb3J0ICogYXMgcmVnZXhlcyBmcm9tIFwiLi9yZWdleGVzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tIFwiLi92ZXJzaW9ucy5qc1wiO1xuZXhwb3J0IGNvbnN0ICRab2RUeXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUeXBlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaW5zdCA/PyAoaW5zdCA9IHt9KTtcbiAgICBpbnN0Ll96b2QuZGVmID0gZGVmOyAvLyBzZXQgX2RlZiBwcm9wZXJ0eVxuICAgIGluc3QuX3pvZC5iYWcgPSBpbnN0Ll96b2QuYmFnIHx8IHt9OyAvLyBpbml0aWFsaXplIF9iYWcgb2JqZWN0XG4gICAgaW5zdC5fem9kLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIGNvbnN0IGNoZWNrcyA9IFsuLi4oaW5zdC5fem9kLmRlZi5jaGVja3MgPz8gW10pXTtcbiAgICAvLyBpZiBpbnN0IGlzIGl0c2VsZiBhIGNoZWNrcy4kWm9kQ2hlY2ssIHJ1biBpdCBhcyBhIGNoZWNrXG4gICAgaWYgKGluc3QuX3pvZC50cmFpdHMuaGFzKFwiJFpvZENoZWNrXCIpKSB7XG4gICAgICAgIGNoZWNrcy51bnNoaWZ0KGluc3QpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNoIG9mIGNoZWNrcykge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGNoLl96b2Qub25hdHRhY2gpIHtcbiAgICAgICAgICAgIGZuKGluc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjaGVja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGRlZmVycmVkIGluaXRpYWxpemVyXG4gICAgICAgIC8vIGluc3QuX3pvZC5wYXJzZSBpcyBub3QgeWV0IGRlZmluZWRcbiAgICAgICAgKF9hID0gaW5zdC5fem9kKS5kZWZlcnJlZCA/PyAoX2EuZGVmZXJyZWQgPSBbXSk7XG4gICAgICAgIGluc3QuX3pvZC5kZWZlcnJlZD8ucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBpbnN0Ll96b2QucnVuID0gaW5zdC5fem9kLnBhcnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJ1bkNoZWNrcyA9IChwYXlsb2FkLCBjaGVja3MsIGN0eCkgPT4ge1xuICAgICAgICAgICAgbGV0IGlzQWJvcnRlZCA9IHV0aWwuYWJvcnRlZChwYXlsb2FkKTtcbiAgICAgICAgICAgIGxldCBhc3luY1Jlc3VsdDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2ggb2YgY2hlY2tzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoLl96b2QuZGVmLndoZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkUnVuID0gY2guX3pvZC5kZWYud2hlbihwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRSdW4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyTGVuID0gcGF5bG9hZC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IF8gPSBjaC5fem9kLmNoZWNrKHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIGlmIChfIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBjdHg/LmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXN5bmNSZXN1bHQgfHwgXyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNSZXN1bHQgPSAoYXN5bmNSZXN1bHQgPz8gUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgXztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMZW4gPSBwYXlsb2FkLmlzc3Vlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dExlbiA9PT0gY3VyckxlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWJvcnRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Fib3J0ZWQgPSB1dGlsLmFib3J0ZWQocGF5bG9hZCwgY3Vyckxlbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dExlbiA9IHBheWxvYWQuaXNzdWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMZW4gPT09IGN1cnJMZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fib3J0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0Fib3J0ZWQgPSB1dGlsLmFib3J0ZWQocGF5bG9hZCwgY3Vyckxlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFzeW5jUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jUmVzdWx0LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoYW5kbGVDYW5hcnlSZXN1bHQgPSAoY2FuYXJ5LCBwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIC8vIGFib3J0IGlmIHRoZSBjYW5hcnkgaXMgYWJvcnRlZFxuICAgICAgICAgICAgaWYgKHV0aWwuYWJvcnRlZChjYW5hcnkpKSB7XG4gICAgICAgICAgICAgICAgY2FuYXJ5LmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW5hcnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBydW4gY2hlY2tzIGZpcnN0LCB0aGVuXG4gICAgICAgICAgICBjb25zdCBjaGVja1Jlc3VsdCA9IHJ1bkNoZWNrcyhwYXlsb2FkLCBjaGVja3MsIGN0eCk7XG4gICAgICAgICAgICBpZiAoY2hlY2tSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5hc3luYyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0LnRoZW4oKGNoZWNrUmVzdWx0KSA9PiBpbnN0Ll96b2QucGFyc2UoY2hlY2tSZXN1bHQsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3QuX3pvZC5wYXJzZShjaGVja1Jlc3VsdCwgY3R4KTtcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdC5fem9kLnJ1biA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmIChjdHguc2tpcENoZWNrcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Ll96b2QucGFyc2UocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBydW4gY2FuYXJ5XG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbCBwYXNzIChubyBjaGVja3MpXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuYXJ5ID0gaW5zdC5fem9kLnBhcnNlKHsgdmFsdWU6IHBheWxvYWQudmFsdWUsIGlzc3VlczogW10gfSwgeyAuLi5jdHgsIHNraXBDaGVja3M6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmFyeSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmFyeS50aGVuKChjYW5hcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDYW5hcnlSZXN1bHQoY2FuYXJ5LCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhbmFyeVJlc3VsdChjYW5hcnksIHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmb3J3YXJkXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBpbnN0Ll96b2QucGFyc2UocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5hc3luYyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHJ1bkNoZWNrcyhyZXN1bHQsIGNoZWNrcywgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVuQ2hlY2tzKHJlc3VsdCwgY2hlY2tzLCBjdHgpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBMYXp5IGluaXRpYWxpemUgfnN0YW5kYXJkIHRvIGF2b2lkIGNyZWF0aW5nIG9iamVjdHMgZm9yIGV2ZXJ5IHNjaGVtYVxuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0LCBcIn5zdGFuZGFyZFwiLCAoKSA9PiAoe1xuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBzYWZlUGFyc2UoaW5zdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiByLnN1Y2Nlc3MgPyB7IHZhbHVlOiByLmRhdGEgfSA6IHsgaXNzdWVzOiByLmVycm9yPy5pc3N1ZXMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNhZmVQYXJzZUFzeW5jKGluc3QsIHZhbHVlKS50aGVuKChyKSA9PiAoci5zdWNjZXNzID8geyB2YWx1ZTogci5kYXRhIH0gOiB7IGlzc3Vlczogci5lcnJvcj8uaXNzdWVzIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmVuZG9yOiBcInpvZFwiLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pKTtcbn0pO1xuZXhwb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgJFpvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBbLi4uKGluc3Q/Ll96b2QuYmFnPy5wYXR0ZXJucyA/PyBbXSldLnBvcCgpID8/IHJlZ2V4ZXMuc3RyaW5nKGluc3QuX3pvZC5iYWcpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfKSA9PiB7XG4gICAgICAgIGlmIChkZWYuY29lcmNlKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gU3RyaW5nKHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3RyaW5nRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBjaGVjayBpbml0aWFsaXphdGlvbiBtdXN0IGNvbWUgZmlyc3RcbiAgICBjaGVja3MuJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RHVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RHVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmd1aWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGlmIChkZWYudmVyc2lvbikge1xuICAgICAgICBjb25zdCB2ZXJzaW9uTWFwID0ge1xuICAgICAgICAgICAgdjE6IDEsXG4gICAgICAgICAgICB2MjogMixcbiAgICAgICAgICAgIHYzOiAzLFxuICAgICAgICAgICAgdjQ6IDQsXG4gICAgICAgICAgICB2NTogNSxcbiAgICAgICAgICAgIHY2OiA2LFxuICAgICAgICAgICAgdjc6IDcsXG4gICAgICAgICAgICB2ODogOCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdiA9IHZlcnNpb25NYXBbZGVmLnZlcnNpb25dO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogXCIke2RlZi52ZXJzaW9ufVwiYCk7XG4gICAgICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudXVpZCh2KSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy51dWlkKCkpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEVtYWlsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFbWFpbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lbWFpbCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUcmltIHdoaXRlc3BhY2UgZnJvbSBpbnB1dFxuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHBheWxvYWQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0cmltbWVkKTtcbiAgICAgICAgICAgIGlmIChkZWYuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgICAgICBkZWYuaG9zdG5hbWUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZi5ob3N0bmFtZS50ZXN0KHVybC5ob3N0bmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkludmFsaWQgaG9zdG5hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IGRlZi5ob3N0bmFtZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZi5wcm90b2NvbCkge1xuICAgICAgICAgICAgICAgIGRlZi5wcm90b2NvbC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGlmICghZGVmLnByb3RvY29sLnRlc3QodXJsLnByb3RvY29sLmVuZHNXaXRoKFwiOlwiKSA/IHVybC5wcm90b2NvbC5zbGljZSgwLCAtMSkgOiB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnZhbGlkIHByb3RvY29sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBkZWYucHJvdG9jb2wuc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNldCB0aGUgb3V0cHV0IHZhbHVlIGJhc2VkIG9uIG5vcm1hbGl6ZSBmbGFnXG4gICAgICAgICAgICBpZiAoZGVmLm5vcm1hbGl6ZSkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBub3JtYWxpemVkIFVSTFxuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBpbnB1dCAodHJpbW1lZClcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gdHJpbW1lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEVtb2ppID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFbW9qaVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lbW9qaSgpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROYW5vSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE5hbm9JRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5uYW5vaWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY3VpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ1VJRDIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENVSUQyXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmN1aWQyKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVTElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVTElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnVsaWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFhJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kWElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnhpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kS1NVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEtTVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmtzdWlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EYXRlVGltZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRGF0ZVRpbWVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZGF0ZXRpbWUoZGVmKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVNPRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5kYXRlKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09UaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09UaW1lXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnRpbWUoZGVmKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVNPRHVyYXRpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElTT0R1cmF0aW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmR1cmF0aW9uKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJUHY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJUHY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmlwdjQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5iYWcuZm9ybWF0ID0gYGlwdjRgO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElQdjYgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElQdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuaXB2Nik7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgaXB2NmA7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIG5ldyBVUkwoYGh0dHA6Ly9bJHtwYXlsb2FkLnZhbHVlfV1gKTtcbiAgICAgICAgICAgIC8vIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE1BQyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTUFDXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLm1hYyhkZWYuZGVsaW1pdGVyKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgbWFjYDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDSURSdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENJRFJ2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5jaWRydjQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENJRFJ2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ0lEUnY2XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmNpZHJ2Nik7IC8vIG5vdCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBwYXlsb2FkLnZhbHVlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICBjb25zdCBbYWRkcmVzcywgcHJlZml4XSA9IHBhcnRzO1xuICAgICAgICAgICAgaWYgKCFwcmVmaXgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXhOdW0gPSBOdW1iZXIocHJlZml4KTtcbiAgICAgICAgICAgIGlmIChgJHtwcmVmaXhOdW19YCAhPT0gcHJlZml4KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHByZWZpeE51bSA8IDAgfHwgcHJlZml4TnVtID4gMTI4KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IFVSTChgaHR0cDovL1ske2FkZHJlc3N9XWApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiY2lkcnY2XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kQmFzZTY0ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEJhc2U2NChkYXRhKSB7XG4gICAgaWYgKGRhdGEgPT09IFwiXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChkYXRhLmxlbmd0aCAlIDQgIT09IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF0b2IoZGF0YSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgJFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmFzZTY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmJhc2U2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5jb250ZW50RW5jb2RpbmcgPSBcImJhc2U2NFwiO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChpc1ZhbGlkQmFzZTY0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJiYXNlNjRcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBab2RCYXNlNjQgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQmFzZTY0VVJMKGRhdGEpIHtcbiAgICBpZiAoIXJlZ2V4ZXMuYmFzZTY0dXJsLnRlc3QoZGF0YSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBiYXNlNjQgPSBkYXRhLnJlcGxhY2UoL1stX10vZywgKGMpID0+IChjID09PSBcIi1cIiA/IFwiK1wiIDogXCIvXCIpKTtcbiAgICBjb25zdCBwYWRkZWQgPSBiYXNlNjQucGFkRW5kKE1hdGguY2VpbChiYXNlNjQubGVuZ3RoIC8gNCkgKiA0LCBcIj1cIik7XG4gICAgcmV0dXJuIGlzVmFsaWRCYXNlNjQocGFkZGVkKTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kQmFzZTY0VVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCYXNlNjRVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuYmFzZTY0dXJsKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmNvbnRlbnRFbmNvZGluZyA9IFwiYmFzZTY0dXJsXCI7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRCYXNlNjRVUkwocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRTE2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRTE2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lMTY0KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kSldUICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEpXVCh0b2tlbiwgYWxnb3JpdGhtID0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2Vuc1BhcnRzID0gdG9rZW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAodG9rZW5zUGFydHMubGVuZ3RoICE9PSAzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBbaGVhZGVyXSA9IHRva2Vuc1BhcnRzO1xuICAgICAgICBpZiAoIWhlYWRlcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBwYXJzZWRIZWFkZXIgPSBKU09OLnBhcnNlKGF0b2IoaGVhZGVyKSk7XG4gICAgICAgIGlmIChcInR5cFwiIGluIHBhcnNlZEhlYWRlciAmJiBwYXJzZWRIZWFkZXI/LnR5cCAhPT0gXCJKV1RcIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFwYXJzZWRIZWFkZXIuYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxnb3JpdGhtICYmICghKFwiYWxnXCIgaW4gcGFyc2VkSGVhZGVyKSB8fCBwYXJzZWRIZWFkZXIuYWxnICE9PSBhbGdvcml0aG0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RKV1QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEpXVFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRKV1QocGF5bG9hZC52YWx1ZSwgZGVmLmFsZykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImp3dFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuZm4ocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVtYmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdW1iZXJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IGluc3QuX3pvZC5iYWcucGF0dGVybiA/PyByZWdleGVzLm51bWJlcjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IE51bWJlcihwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNOYU4oaW5wdXQpICYmIE51bWJlci5pc0Zpbml0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkID0gdHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICA/IE51bWJlci5pc05hTihpbnB1dClcbiAgICAgICAgICAgICAgICA/IFwiTmFOXCJcbiAgICAgICAgICAgICAgICA6ICFOdW1iZXIuaXNGaW5pdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gXCJJbmZpbml0eVwiXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJudW1iZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAuLi4ocmVjZWl2ZWQgPyB7IHJlY2VpdmVkIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVtYmVyRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjaGVja3MuJFpvZENoZWNrTnVtYmVyRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEJvb2xlYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJvb2xlYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IHJlZ2V4ZXMuYm9vbGVhbjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IEJvb2xlYW4ocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RCaWdJbnQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJpZ0ludFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy5iaWdpbnQ7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBCaWdJbnQocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQmlnSW50Rm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCaWdJbnRGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNoZWNrcy4kWm9kQ2hlY2tCaWdJbnRGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpOyAvLyBubyBmb3JtYXQgY2hlY2tzXG59KTtcbmV4cG9ydCBjb25zdCAkWm9kU3ltYm9sID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTeW1ib2xcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3ltYm9sXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJzeW1ib2xcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVuZGVmaW5lZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5kZWZpbmVkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLnVuZGVmaW5lZDtcbiAgICBpbnN0Ll96b2QudmFsdWVzID0gbmV3IFNldChbdW5kZWZpbmVkXSk7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIGluc3QuX3pvZC5vcHRvdXQgPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROdWxsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdWxsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLm51bGw7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IG5ldyBTZXQoW251bGxdKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm51bGxcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEFueSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQW55XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQpID0+IHBheWxvYWQ7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVW5rbm93biA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5rbm93blwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkKSA9PiBwYXlsb2FkO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5ldmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROZXZlclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmV2ZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFZvaWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFZvaWRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJ2b2lkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2REYXRlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2REYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ldyBEYXRlKHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgaXNEYXRlID0gaW5wdXQgaW5zdGFuY2VvZiBEYXRlO1xuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IGlzRGF0ZSAmJiAhTnVtYmVyLmlzTmFOKGlucHV0LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc1ZhbGlkRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImRhdGVcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIC4uLihpc0RhdGUgPyB7IHJlY2VpdmVkOiBcIkludmFsaWQgRGF0ZVwiIH0gOiB7fSksXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBmaW5hbCwgaW5kZXgpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoaW5kZXgsIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICB9XG4gICAgZmluYWwudmFsdWVbaW5kZXhdID0gcmVzdWx0LnZhbHVlO1xufVxuZXhwb3J0IGNvbnN0ICRab2RBcnJheSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQXJyYXlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBBcnJheShpbnB1dC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaW5wdXRbaV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuZWxlbWVudC5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7IC8vaGFuZGxlQXJyYXlSZXN1bHRzQXN5bmMocGFyc2VSZXN1bHRzLCBmaW5hbCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlSZXN1bHQocmVzdWx0LCBmaW5hbCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbE91dCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBGb3Igb3B0aW9uYWwtb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXNcbiAgICAgICAgaWYgKGlzT3B0aW9uYWxPdXQgJiYgIShrZXkgaW4gaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoa2V5IGluIGlucHV0KSB7XG4gICAgICAgICAgICBmaW5hbC52YWx1ZVtrZXldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbC52YWx1ZVtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlZihkZWYpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGVmLnNoYXBlKTtcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgICBpZiAoIWRlZi5zaGFwZT8uW2tdPy5fem9kPy50cmFpdHM/LmhhcyhcIiRab2RUeXBlXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgXCIke2t9XCI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9rZXlzID0gdXRpbC5vcHRpb25hbEtleXMoZGVmLnNoYXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIGtleXMsXG4gICAgICAgIGtleVNldDogbmV3IFNldChrZXlzKSxcbiAgICAgICAgbnVtS2V5czoga2V5cy5sZW5ndGgsXG4gICAgICAgIG9wdGlvbmFsS2V5czogbmV3IFNldChva2V5cyksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUNhdGNoYWxsKHByb21zLCBpbnB1dCwgcGF5bG9hZCwgY3R4LCBkZWYsIGluc3QpIHtcbiAgICBjb25zdCB1bnJlY29nbml6ZWQgPSBbXTtcbiAgICAvLyBpdGVyYXRlIG92ZXIgaW5wdXQga2V5c1xuICAgIGNvbnN0IGtleVNldCA9IGRlZi5rZXlTZXQ7XG4gICAgY29uc3QgX2NhdGNoYWxsID0gZGVmLmNhdGNoYWxsLl96b2Q7XG4gICAgY29uc3QgdCA9IF9jYXRjaGFsbC5kZWYudHlwZTtcbiAgICBjb25zdCBpc09wdGlvbmFsT3V0ID0gX2NhdGNoYWxsLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgIGlmIChrZXlTZXQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHQgPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgdW5yZWNvZ25pemVkLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBfY2F0Y2hhbGwucnVuKHsgdmFsdWU6IGlucHV0W2tleV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBwcm9tcy5wdXNoKHIudGhlbigocikgPT4gaGFuZGxlUHJvcGVydHlSZXN1bHQociwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbE91dCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVByb3BlcnR5UmVzdWx0KHIsIHBheWxvYWQsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxPdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh1bnJlY29nbml6ZWQubGVuZ3RoKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgICAgICAgICAga2V5czogdW5yZWNvZ25pemVkLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFwcm9tcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0ICRab2RPYmplY3QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE9iamVjdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gcmVxdWlyZXMgY2FzdCBiZWNhdXNlIHRlY2huaWNhbGx5ICRab2RPYmplY3QgZG9lc24ndCBleHRlbmRcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gY29uc3Qgc2ggPSBkZWYuc2hhcGU7XG4gICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVmLCBcInNoYXBlXCIpO1xuICAgIGlmICghZGVzYz8uZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNoID0gZGVmLnNoYXBlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLCBcInNoYXBlXCIsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NoID0geyAuLi5zaCB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWYsIFwic2hhcGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3U2gsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1NoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IF9ub3JtYWxpemVkID0gdXRpbC5jYWNoZWQoKCkgPT4gbm9ybWFsaXplRGVmKGRlZikpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgICAgICBjb25zdCBwcm9wVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNoYXBlW2tleV0uX3pvZDtcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWVzW2tleV0gPz8gKHByb3BWYWx1ZXNba2V5XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIGZpZWxkLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trZXldLmFkZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcFZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBpc09iamVjdCA9IHV0aWwuaXNPYmplY3Q7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgdmFsdWUgPz8gKHZhbHVlID0gX25vcm1hbGl6ZWQudmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB2YWx1ZS5zaGFwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWUua2V5cykge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbE91dCA9IGVsLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgICAgICAgICBjb25zdCByID0gZWwuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChyLnRoZW4oKHIpID0+IGhhbmRsZVByb3BlcnR5UmVzdWx0KHIsIHBheWxvYWQsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxPdXQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsT3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhdGNoYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbXMubGVuZ3RoID8gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDYXRjaGFsbChwcm9tcywgaW5wdXQsIHBheWxvYWQsIGN0eCwgX25vcm1hbGl6ZWQudmFsdWUsIGluc3QpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kT2JqZWN0SklUID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RPYmplY3RKSVRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIHJlcXVpcmVzIGNhc3QgYmVjYXVzZSB0ZWNobmljYWxseSAkWm9kT2JqZWN0IGRvZXNuJ3QgZXh0ZW5kXG4gICAgJFpvZE9iamVjdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3Qgc3VwZXJQYXJzZSA9IGluc3QuX3pvZC5wYXJzZTtcbiAgICBjb25zdCBfbm9ybWFsaXplZCA9IHV0aWwuY2FjaGVkKCgpID0+IG5vcm1hbGl6ZURlZihkZWYpKTtcbiAgICBjb25zdCBnZW5lcmF0ZUZhc3RwYXNzID0gKHNoYXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRvYyA9IG5ldyBEb2MoW1wic2hhcGVcIiwgXCJwYXlsb2FkXCIsIFwiY3R4XCJdKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IF9ub3JtYWxpemVkLnZhbHVlO1xuICAgICAgICBjb25zdCBwYXJzZVN0ciA9IChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGsgPSB1dGlsLmVzYyhrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGBzaGFwZVske2t9XS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFske2t9XSwgaXNzdWVzOiBbXSB9LCBjdHgpYDtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jLndyaXRlKGBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7YCk7XG4gICAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsaXplZC5rZXlzKSB7XG4gICAgICAgICAgICBpZHNba2V5XSA9IGBrZXlfJHtjb3VudGVyKyt9YDtcbiAgICAgICAgfVxuICAgICAgICAvLyBBOiBwcmVzZXJ2ZSBrZXkgb3JkZXIge1xuICAgICAgICBkb2Mud3JpdGUoYGNvbnN0IG5ld1Jlc3VsdCA9IHt9O2ApO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBub3JtYWxpemVkLmtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2tleV07XG4gICAgICAgICAgICBjb25zdCBrID0gdXRpbC5lc2Moa2V5KTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCBpc09wdGlvbmFsT3V0ID0gc2NoZW1hPy5fem9kPy5vcHRvdXQgPT09IFwib3B0aW9uYWxcIjtcbiAgICAgICAgICAgIGRvYy53cml0ZShgY29uc3QgJHtpZH0gPSAke3BhcnNlU3RyKGtleSl9O2ApO1xuICAgICAgICAgICAgaWYgKGlzT3B0aW9uYWxPdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3Igb3B0aW9uYWwtb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXNcbiAgICAgICAgICAgICAgICBkb2Mud3JpdGUoYFxuICAgICAgICBpZiAoJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICgke2t9IGluIGlucHV0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IHBheWxvYWQuaXNzdWVzLmNvbmNhdCgke2lkfS5pc3N1ZXMubWFwKGlzcyA9PiAoe1xuICAgICAgICAgICAgICAuLi5pc3MsXG4gICAgICAgICAgICAgIHBhdGg6IGlzcy5wYXRoID8gWyR7a30sIC4uLmlzcy5wYXRoXSA6IFske2t9XVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtpZH0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGlmICgke2lkfS5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcGF5bG9hZC5pc3N1ZXMgPSBwYXlsb2FkLmlzc3Vlcy5jb25jYXQoJHtpZH0uaXNzdWVzLm1hcChpc3MgPT4gKHtcbiAgICAgICAgICAgIC4uLmlzcyxcbiAgICAgICAgICAgIHBhdGg6IGlzcy5wYXRoID8gWyR7a30sIC4uLmlzcy5wYXRoXSA6IFske2t9XVxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtpZH0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb2Mud3JpdGUoYHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7YCk7XG4gICAgICAgIGRvYy53cml0ZShgcmV0dXJuIHBheWxvYWQ7YCk7XG4gICAgICAgIGNvbnN0IGZuID0gZG9jLmNvbXBpbGUoKTtcbiAgICAgICAgcmV0dXJuIChwYXlsb2FkLCBjdHgpID0+IGZuKHNoYXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgIH07XG4gICAgbGV0IGZhc3RwYXNzO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gdXRpbC5pc09iamVjdDtcbiAgICBjb25zdCBqaXQgPSAhY29yZS5nbG9iYWxDb25maWcuaml0bGVzcztcbiAgICBjb25zdCBhbGxvd3NFdmFsID0gdXRpbC5hbGxvd3NFdmFsO1xuICAgIGNvbnN0IGZhc3RFbmFibGVkID0gaml0ICYmIGFsbG93c0V2YWwudmFsdWU7IC8vICYmICFkZWYuY2F0Y2hhbGw7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgdmFsdWUgPz8gKHZhbHVlID0gX25vcm1hbGl6ZWQudmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqaXQgJiYgZmFzdEVuYWJsZWQgJiYgY3R4Py5hc3luYyA9PT0gZmFsc2UgJiYgY3R4LmppdGxlc3MgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGFsd2F5cyBzeW5jaHJvbm91c1xuICAgICAgICAgICAgaWYgKCFmYXN0cGFzcylcbiAgICAgICAgICAgICAgICBmYXN0cGFzcyA9IGdlbmVyYXRlRmFzdHBhc3MoZGVmLnNoYXBlKTtcbiAgICAgICAgICAgIHBheWxvYWQgPSBmYXN0cGFzcyhwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKCFjYXRjaGFsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDYXRjaGFsbChbXSwgaW5wdXQsIHBheWxvYWQsIGN0eCwgdmFsdWUsIGluc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlclBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIGZpbmFsLCBpbnN0LCBjdHgpIHtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZmluYWwudmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gZmluYWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgbm9uYWJvcnRlZCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiAhdXRpbC5hYm9ydGVkKHIpKTtcbiAgICBpZiAobm9uYWJvcnRlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmluYWwudmFsdWUgPSBub25hYm9ydGVkWzBdLnZhbHVlO1xuICAgICAgICByZXR1cm4gbm9uYWJvcnRlZFswXTtcbiAgICB9XG4gICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICBpbnN0LFxuICAgICAgICBlcnJvcnM6IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLm9wdGlvbnMuc29tZSgobykgPT4gby5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYub3B0aW9ucy5zb21lKChvKSA9PiBvLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGlmIChkZWYub3B0aW9ucy5ldmVyeSgobykgPT4gby5fem9kLnZhbHVlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KGRlZi5vcHRpb25zLmZsYXRNYXAoKG9wdGlvbikgPT4gQXJyYXkuZnJvbShvcHRpb24uX3pvZC52YWx1ZXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInBhdHRlcm5cIiwgKCkgPT4ge1xuICAgICAgICBpZiAoZGVmLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8uX3pvZC5wYXR0ZXJuKSkge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybnMgPSBkZWYub3B0aW9ucy5tYXAoKG8pID0+IG8uX3pvZC5wYXR0ZXJuKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7cGF0dGVybnMubWFwKChwKSA9PiB1dGlsLmNsZWFuUmVnZXgocC5zb3VyY2UpKS5qb2luKFwifFwiKX0pJGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgY29uc3Qgc2luZ2xlID0gZGVmLm9wdGlvbnMubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVmLm9wdGlvbnNbMF0uX3pvZC5ydW47XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoc2luZ2xlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3QocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBkZWYub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXN5bmMpXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUV4Y2x1c2l2ZVVuaW9uUmVzdWx0cyhyZXN1bHRzLCBmaW5hbCwgaW5zdCwgY3R4KSB7XG4gICAgY29uc3Qgc3VjY2Vzc2VzID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuaXNzdWVzLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKHN1Y2Nlc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmluYWwudmFsdWUgPSBzdWNjZXNzZXNbMF0udmFsdWU7XG4gICAgICAgIHJldHVybiBmaW5hbDtcbiAgICB9XG4gICAgaWYgKHN1Y2Nlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gTm8gbWF0Y2hlcyAtIHNhbWUgYXMgcmVndWxhciB1bmlvblxuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGlucHV0OiBmaW5hbC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBlcnJvcnM6IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBNdWx0aXBsZSBtYXRjaGVzIC0gZXhjbHVzaXZlIHVuaW9uIGZhaWx1cmVcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogZmluYWwudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFhvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kWG9yXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGRlZi5pbmNsdXNpdmUgPSBmYWxzZTtcbiAgICBjb25zdCBzaW5nbGUgPSBkZWYub3B0aW9ucy5sZW5ndGggPT09IDE7XG4gICAgY29uc3QgZmlyc3QgPSBkZWYub3B0aW9uc1swXS5fem9kLnJ1bjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdChwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhc3luYyA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb24uX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBhc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFzeW5jKVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4Y2x1c2l2ZVVuaW9uUmVzdWx0cyhyZXN1bHRzLCBwYXlsb2FkLCBpbnN0LCBjdHgpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0cykudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4Y2x1c2l2ZVVuaW9uUmVzdWx0cyhyZXN1bHRzLCBwYXlsb2FkLCBpbnN0LCBjdHgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiA9IFxuLypAX19QVVJFX18qL1xuY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYuaW5jbHVzaXZlID0gZmFsc2U7XG4gICAgJFpvZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBfc3VwZXIgPSBpbnN0Ll96b2QucGFyc2U7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcFZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBkZWYub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcHYgPSBvcHRpb24uX3pvZC5wcm9wVmFsdWVzO1xuICAgICAgICAgICAgaWYgKCFwdiB8fCBPYmplY3Qua2V5cyhwdikubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCBcIiR7ZGVmLm9wdGlvbnMuaW5kZXhPZihvcHRpb24pfVwiYCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwdikpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BWYWx1ZXNba10pXG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZXNba10gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWwgb2Ygdikge1xuICAgICAgICAgICAgICAgICAgICBwcm9wVmFsdWVzW2tdLmFkZCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcFZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBkaXNjID0gdXRpbC5jYWNoZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gZGVmLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBvIG9mIG9wdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG8uX3pvZC5wcm9wVmFsdWVzPy5bZGVmLmRpc2NyaW1pbmF0b3JdO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzLnNpemUgPT09IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4IFwiJHtkZWYub3B0aW9ucy5pbmRleE9mKG8pfVwiYCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcC5oYXModikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgZGlzY3JpbWluYXRvciB2YWx1ZSBcIiR7U3RyaW5nKHYpfVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hcC5zZXQodiwgbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHQgPSBkaXNjLnZhbHVlLmdldChpbnB1dD8uW2RlZi5kaXNjcmltaW5hdG9yXSk7XG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLnVuaW9uRmFsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBubyBtYXRjaGluZyBkaXNjcmltaW5hdG9yXG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgICAgbm90ZTogXCJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yXCIsXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yOiBkZWYuZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgcGF0aDogW2RlZi5kaXNjcmltaW5hdG9yXSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEludGVyc2VjdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSW50ZXJzZWN0aW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBkZWYubGVmdC5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dCwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICBjb25zdCByaWdodCA9IGRlZi5yaWdodC5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dCwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICBjb25zdCBhc3luYyA9IGxlZnQgaW5zdGFuY2VvZiBQcm9taXNlIHx8IHJpZ2h0IGluc3RhbmNlb2YgUHJvbWlzZTtcbiAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2xlZnQsIHJpZ2h0XSkudGhlbigoW2xlZnQsIHJpZ2h0XSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnNlY3Rpb25SZXN1bHRzKHBheWxvYWQsIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnNlY3Rpb25SZXN1bHRzKHBheWxvYWQsIGxlZnQsIHJpZ2h0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhhLCBiKSB7XG4gICAgLy8gY29uc3QgYVR5cGUgPSBwYXJzZS50KGEpO1xuICAgIC8vIGNvbnN0IGJUeXBlID0gcGFyc2UudChiKTtcbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUgJiYgK2EgPT09ICtiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGlmICh1dGlsLmlzUGxhaW5PYmplY3QoYSkgJiYgdXRpbC5pc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgICAgIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSBPYmplY3Qua2V5cyhhKS5maWx0ZXIoKGtleSkgPT4gYktleXMuaW5kZXhPZihrZXkpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IG5ld09iaiA9IHsgLi4uYSwgLi4uYiB9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFyZWRLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRWYWx1ZSA9IG1lcmdlVmFsdWVzKGFba2V5XSwgYltrZXldKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlRXJyb3JQYXRoOiBba2V5LCAuLi5zaGFyZWRWYWx1ZS5tZXJnZUVycm9yUGF0aF0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld09ialtrZXldID0gc2hhcmVkVmFsdWUuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3T2JqIH07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBtZXJnZUVycm9yUGF0aDogW10gfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gYVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBpdGVtQiA9IGJbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhpdGVtQSwgaXRlbUIpO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VFcnJvclBhdGg6IFtpbmRleCwgLi4uc2hhcmVkVmFsdWUubWVyZ2VFcnJvclBhdGhdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdBcnJheS5wdXNoKHNoYXJlZFZhbHVlLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdBcnJheSB9O1xuICAgIH1cbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIG1lcmdlRXJyb3JQYXRoOiBbXSB9O1xufVxuZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0aW9uUmVzdWx0cyhyZXN1bHQsIGxlZnQsIHJpZ2h0KSB7XG4gICAgLy8gVHJhY2sgd2hpY2ggc2lkZShzKSByZXBvcnQgZWFjaCBrZXkgYXMgdW5yZWNvZ25pemVkXG4gICAgY29uc3QgdW5yZWNLZXlzID0gbmV3IE1hcCgpO1xuICAgIGxldCB1bnJlY0lzc3VlO1xuICAgIGZvciAoY29uc3QgaXNzIG9mIGxlZnQuaXNzdWVzKSB7XG4gICAgICAgIGlmIChpc3MuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKSB7XG4gICAgICAgICAgICB1bnJlY0lzc3VlID8/ICh1bnJlY0lzc3VlID0gaXNzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBpc3Mua2V5cykge1xuICAgICAgICAgICAgICAgIGlmICghdW5yZWNLZXlzLmhhcyhrKSlcbiAgICAgICAgICAgICAgICAgICAgdW5yZWNLZXlzLnNldChrLCB7fSk7XG4gICAgICAgICAgICAgICAgdW5yZWNLZXlzLmdldChrKS5sID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5pc3N1ZXMucHVzaChpc3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXNzIG9mIHJpZ2h0Lmlzc3Vlcykge1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwidW5yZWNvZ25pemVkX2tleXNcIikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGlzcy5rZXlzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bnJlY0tleXMuaGFzKGspKVxuICAgICAgICAgICAgICAgICAgICB1bnJlY0tleXMuc2V0KGssIHt9KTtcbiAgICAgICAgICAgICAgICB1bnJlY0tleXMuZ2V0KGspLnIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0Lmlzc3Vlcy5wdXNoKGlzcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVwb3J0IG9ubHkga2V5cyB1bnJlY29nbml6ZWQgYnkgQk9USCBzaWRlc1xuICAgIGNvbnN0IGJvdGhLZXlzID0gWy4uLnVucmVjS2V5c10uZmlsdGVyKChbLCBmXSkgPT4gZi5sICYmIGYucikubWFwKChba10pID0+IGspO1xuICAgIGlmIChib3RoS2V5cy5sZW5ndGggJiYgdW5yZWNJc3N1ZSkge1xuICAgICAgICByZXN1bHQuaXNzdWVzLnB1c2goeyAuLi51bnJlY0lzc3VlLCBrZXlzOiBib3RoS2V5cyB9KTtcbiAgICB9XG4gICAgaWYgKHV0aWwuYWJvcnRlZChyZXN1bHQpKVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlVmFsdWVzKGxlZnQudmFsdWUsIHJpZ2h0LnZhbHVlKTtcbiAgICBpZiAoIW1lcmdlZC52YWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiBgICsgYCR7SlNPTi5zdHJpbmdpZnkobWVyZ2VkLm1lcmdlRXJyb3JQYXRoKX1gKTtcbiAgICB9XG4gICAgcmVzdWx0LnZhbHVlID0gbWVyZ2VkLmRhdGE7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kVHVwbGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFR1cGxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgaXRlbXMgPSBkZWYuaXRlbXM7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwidHVwbGVcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0gW107XG4gICAgICAgIGNvbnN0IHByb21zID0gW107XG4gICAgICAgIGNvbnN0IHJldmVyc2VkSW5kZXggPSBbLi4uaXRlbXNdLnJldmVyc2UoKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uX3pvZC5vcHRpbiAhPT0gXCJvcHRpb25hbFwiKTtcbiAgICAgICAgY29uc3Qgb3B0U3RhcnQgPSByZXZlcnNlZEluZGV4ID09PSAtMSA/IDAgOiBpdGVtcy5sZW5ndGggLSByZXZlcnNlZEluZGV4O1xuICAgICAgICBpZiAoIWRlZi5yZXN0KSB7XG4gICAgICAgICAgICBjb25zdCB0b29CaWcgPSBpbnB1dC5sZW5ndGggPiBpdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGlucHV0Lmxlbmd0aCA8IG9wdFN0YXJ0IC0gMTtcbiAgICAgICAgICAgIGlmICh0b29CaWcgfHwgdG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uKHRvb0JpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGNvZGU6IFwidG9vX2JpZ1wiLCBtYXhpbXVtOiBpdGVtcy5sZW5ndGgsIGluY2x1c2l2ZTogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgY29kZTogXCJ0b29fc21hbGxcIiwgbWluaW11bTogaXRlbXMubGVuZ3RoIH0pLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAtMTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gb3B0U3RhcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlbS5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGlucHV0W2ldLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5yZXN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXN0ID0gaW5wdXQuc2xpY2UoaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgcmVzdCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYucmVzdC5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbCxcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gaGFuZGxlVHVwbGVSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVHVwbGVSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlVHVwbGVSZXN1bHQocmVzdWx0LCBmaW5hbCwgaW5kZXgpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoaW5kZXgsIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICB9XG4gICAgZmluYWwudmFsdWVbaW5kZXhdID0gcmVzdWx0LnZhbHVlO1xufVxuZXhwb3J0IGNvbnN0ICRab2RSZWNvcmQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFJlY29yZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIXV0aWwuaXNQbGFpbk9iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInJlY29yZFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGVmLmtleVR5cGUuX3pvZC52YWx1ZXM7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkS2V5cy5hZGQodHlwZW9mIGtleSA9PT0gXCJudW1iZXJcIiA/IGtleS50b1N0cmluZygpIDoga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLnZhbHVlVHlwZS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFtrZXldLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB1bnJlY29nbml6ZWQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB1bnJlY29nbml6ZWQgPSB1bnJlY29nbml6ZWQgPz8gW107XG4gICAgICAgICAgICAgICAgICAgIHVucmVjb2duaXplZC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVucmVjb2duaXplZCAmJiB1bnJlY29nbml6ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICBrZXlzOiB1bnJlY29nbml6ZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IGtleVJlc3VsdCA9IGRlZi5rZXlUeXBlLl96b2QucnVuKHsgdmFsdWU6IGtleSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHlcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE51bWVyaWMgc3RyaW5nIGZhbGxiYWNrOiBpZiBrZXkgZmFpbGVkIHdpdGggXCJleHBlY3RlZCBudW1iZXJcIiwgcmV0cnkgd2l0aCBOdW1iZXIoa2V5KVxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrTnVtZXJpY0tleSA9IHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhlcy5udW1iZXIudGVzdChrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgIGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGtleVJlc3VsdC5pc3N1ZXMuc29tZSgoaXNzKSA9PiBpc3MuY29kZSA9PT0gXCJpbnZhbGlkX3R5cGVcIiAmJiBpc3MuZXhwZWN0ZWQgPT09IFwibnVtYmVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja051bWVyaWNLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7IHZhbHVlOiBOdW1iZXIoa2V5KSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeVJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlSZXN1bHQgPSByZXRyeVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5UmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZi5tb2RlID09PSBcImxvb3NlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhc3MgdGhyb3VnaCB1bmNoYW5nZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVba2V5XSA9IGlucHV0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IFwic3RyaWN0XCIgYmVoYXZpb3I6IGVycm9yIG9uIGludmFsaWQga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfa2V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcInJlY29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlczoga2V5UmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVba2V5UmVzdWx0LnZhbHVlXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVba2V5UmVzdWx0LnZhbHVlXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpID0+IHBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTWFwID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RNYXBcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCEoaW5wdXQgaW5zdGFuY2VvZiBNYXApKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJtYXBcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21zID0gW107XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGlucHV0KSB7XG4gICAgICAgICAgICBjb25zdCBrZXlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7IHZhbHVlOiBrZXksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlUmVzdWx0ID0gZGVmLnZhbHVlVHlwZS5fem9kLnJ1bih7IHZhbHVlOiB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKGtleVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgfHwgdmFsdWVSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChQcm9taXNlLmFsbChba2V5UmVzdWx0LCB2YWx1ZVJlc3VsdF0pLnRoZW4oKFtrZXlSZXN1bHQsIHZhbHVlUmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVNYXBSZXN1bHQoa2V5UmVzdWx0LCB2YWx1ZVJlc3VsdCwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaW5zdCwgY3R4KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVNYXBSZXN1bHQoa2V5UmVzdWx0LCB2YWx1ZVJlc3VsdCwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaW5zdCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpID0+IHBheWxvYWQpO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVNYXBSZXN1bHQoa2V5UmVzdWx0LCB2YWx1ZVJlc3VsdCwgZmluYWwsIGtleSwgaW5wdXQsIGluc3QsIGN0eCkge1xuICAgIGlmIChrZXlSZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBpZiAodXRpbC5wcm9wZXJ0eUtleVR5cGVzLmhhcyh0eXBlb2Yga2V5KSkge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCBrZXlSZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2tleVwiLFxuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJtYXBcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGlzc3Vlczoga2V5UmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWVSZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBpZiAodXRpbC5wcm9wZXJ0eUtleVR5cGVzLmhhcyh0eXBlb2Yga2V5KSkge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCB2YWx1ZVJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2VsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIGlzc3VlczogdmFsdWVSZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlLnNldChrZXlSZXN1bHQudmFsdWUsIHZhbHVlUmVzdWx0LnZhbHVlKTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kU2V0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTZXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCEoaW5wdXQgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInNldFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21zID0gW107XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLnZhbHVlVHlwZS5fem9kLnJ1bih7IHZhbHVlOiBpdGVtLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBoYW5kbGVTZXRSZXN1bHQocmVzdWx0LCBwYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpID0+IHBheWxvYWQpO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVTZXRSZXN1bHQocmVzdWx0LCBmaW5hbCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi5yZXN1bHQuaXNzdWVzKTtcbiAgICB9XG4gICAgZmluYWwudmFsdWUuYWRkKHJlc3VsdC52YWx1ZSk7XG59XG5leHBvcnQgY29uc3QgJFpvZEVudW0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEVudW1cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCB2YWx1ZXMgPSB1dGlsLmdldEVudW1WYWx1ZXMoZGVmLmVudHJpZXMpO1xuICAgIGNvbnN0IHZhbHVlc1NldCA9IG5ldyBTZXQodmFsdWVzKTtcbiAgICBpbnN0Ll96b2QudmFsdWVzID0gdmFsdWVzU2V0O1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gbmV3IFJlZ0V4cChgXigke3ZhbHVlc1xuICAgICAgICAuZmlsdGVyKChrKSA9PiB1dGlsLnByb3BlcnR5S2V5VHlwZXMuaGFzKHR5cGVvZiBrKSlcbiAgICAgICAgLm1hcCgobykgPT4gKHR5cGVvZiBvID09PSBcInN0cmluZ1wiID8gdXRpbC5lc2NhcGVSZWdleChvKSA6IG8udG9TdHJpbmcoKSkpXG4gICAgICAgIC5qb2luKFwifFwiKX0pJGApO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlc1NldC5oYXMoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RMaXRlcmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaWYgKGRlZi52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbGl0ZXJhbCBzY2hlbWEgd2l0aCBubyB2YWxpZCB2YWx1ZXNcIik7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBTZXQoZGVmLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IHZhbHVlcztcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oJHtkZWYudmFsdWVzXG4gICAgICAgIC5tYXAoKG8pID0+ICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIiA/IHV0aWwuZXNjYXBlUmVnZXgobykgOiBvID8gdXRpbC5lc2NhcGVSZWdleChvLnRvU3RyaW5nKCkpIDogU3RyaW5nKG8pKSlcbiAgICAgICAgLmpvaW4oXCJ8XCIpfSkkYCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWVzLmhhcyhpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IGRlZi52YWx1ZXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEZpbGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEZpbGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRmlsZSlcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImZpbGVcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFRyYW5zZm9ybSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVHJhbnNmb3JtXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kRW5jb2RlRXJyb3IoaW5zdC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfb3V0ID0gZGVmLnRyYW5zZm9ybShwYXlsb2FkLnZhbHVlLCBwYXlsb2FkKTtcbiAgICAgICAgaWYgKGN0eC5hc3luYykge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gX291dCBpbnN0YW5jZW9mIFByb21pc2UgPyBfb3V0IDogUHJvbWlzZS5yZXNvbHZlKF9vdXQpO1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC50aGVuKChvdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9vdXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBfb3V0O1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVPcHRpb25hbFJlc3VsdChyZXN1bHQsIGlucHV0KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoICYmIGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNzdWVzOiBbXSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGNvbnN0ICRab2RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kT3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLm9wdG91dCA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzID8gbmV3IFNldChbLi4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcywgdW5kZWZpbmVkXSkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IGRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO1xuICAgICAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBSZWdFeHAoYF4oJHt1dGlsLmNsZWFuUmVnZXgocGF0dGVybi5zb3VyY2UpfSk/JGApIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHIpID0+IGhhbmRsZU9wdGlvbmFsUmVzdWx0KHIsIHBheWxvYWQudmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVPcHRpb25hbFJlc3VsdChyZXN1bHQsIHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFeGFjdE9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFeGFjdE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBDYWxsIHBhcmVudCBpbml0IC0gaW5oZXJpdHMgb3B0aW4vb3B0b3V0ID0gXCJvcHRpb25hbFwiXG4gICAgJFpvZE9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICAvLyBPdmVycmlkZSB2YWx1ZXMvcGF0dGVybiB0byBOT1QgYWRkIHVuZGVmaW5lZFxuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybik7XG4gICAgLy8gT3ZlcnJpZGUgcGFyc2UgdG8ganVzdCBkZWxlZ2F0ZSAobm8gdW5kZWZpbmVkIGhhbmRsaW5nKVxuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bGxhYmxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdWxsYWJsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInBhdHRlcm5cIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47XG4gICAgICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IFJlZ0V4cChgXigke3V0aWwuY2xlYW5SZWdleChwYXR0ZXJuLnNvdXJjZSl9fG51bGwpJGApIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMgPyBuZXcgU2V0KFsuLi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLCBudWxsXSkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYWxsb3cgbnVsbCB0byBwYXNzIHRocm91Z2hcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZERlZmF1bHQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZERlZmF1bHRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICAvLyBpbnN0Ll96b2QucWluID0gXCJ0cnVlXCI7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYXBwbHkgZGVmYXVsdHMgZm9yIHVuZGVmaW5lZCBpbnB1dFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogJFpvZERlZmF1bHQgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBpbW1lZGlhdGVseSBpbiBmb3J3YXJkIGRpcmVjdGlvbi5cbiAgICAgICAgICAgICAqIEl0IGRvZXNuJ3QgcGFzcyB0aGUgZGVmYXVsdCB2YWx1ZSBpbnRvIHRoZSB2YWxpZGF0b3IgKFwicHJlZmF1bHRcIikuIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIHBhc3MgdGhlIGRlZmF1bHQgdmFsdWUgdGhyb3VnaCB2YWxpZGF0aW9uLiBUaGUgdmFsaWRpdHkgb2YgdGhlIGRlZmF1bHQgaXMgZW5mb3JjZWQgYnkgVHlwZVNjcmlwdCBzdGF0aWNhbGx5LiBPdGhlcndpc2UsIGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGUgZGVmYXVsdCBpcyB2YWxpZC4gSW4gdGhlIGNhc2Ugb2YgcGlwZXMgd2l0aCBkaXZlcmdlbnQgaW4vb3V0IHR5cGVzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGRlZmF1bHQgb24gdGhlIGBpbmAgc2NoZW1hIG9mIHlvdXIgWm9kUGlwZSB0byBzZXQgYSBcInByZWZhdWx0XCIgZm9yIHRoZSBwaXBlLiAgICovXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbjogY29udGludWUgd2l0aCBkZWZhdWx0IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVEZWZhdWx0UmVzdWx0KHJlc3VsdCwgZGVmKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZURlZmF1bHRSZXN1bHQocmVzdWx0LCBkZWYpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZURlZmF1bHRSZXN1bHQocGF5bG9hZCwgZGVmKSB7XG4gICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG59XG5leHBvcnQgY29uc3QgJFpvZFByZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RQcmVmYXVsdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vcHRpbiA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yd2FyZCBkaXJlY3Rpb24gKGRlY29kZSk6IGFwcGx5IHByZWZhdWx0IGZvciB1bmRlZmluZWQgaW5wdXRcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5vbk9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROb25PcHRpb25hbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgdiA9IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7XG4gICAgICAgIHJldHVybiB2ID8gbmV3IFNldChbLi4udl0uZmlsdGVyKCh4KSA9PiB4ICE9PSB1bmRlZmluZWQpKSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChyZXN1bHQsIGluc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlTm9uT3B0aW9uYWxSZXN1bHQocmVzdWx0LCBpbnN0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChwYXlsb2FkLCBpbnN0KSB7XG4gICAgaWYgKCFwYXlsb2FkLmlzc3Vlcy5sZW5ndGggJiYgcGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kU3VjY2VzcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3VjY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEVuY29kZUVycm9yKFwiWm9kU3VjY2Vzc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSByZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSByZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDYXRjaCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2F0Y2hcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhcHBseSBjYXRjaCBsb2dpY1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROYU4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE5hTlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzTmFOKHBheWxvYWQudmFsdWUpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5hblwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kUGlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUGlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW4uX3pvZC5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLm91dC5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnByb3BWYWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBkZWYub3V0Ll96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmlnaHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJpZ2h0LnRoZW4oKHJpZ2h0KSA9PiBoYW5kbGVQaXBlUmVzdWx0KHJpZ2h0LCBkZWYuaW4sIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVBpcGVSZXN1bHQocmlnaHQsIGRlZi5pbiwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZWZ0ID0gZGVmLmluLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGxlZnQudGhlbigobGVmdCkgPT4gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBkZWYub3V0LCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBkZWYub3V0LCBjdHgpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVBpcGVSZXN1bHQobGVmdCwgbmV4dCwgY3R4KSB7XG4gICAgaWYgKGxlZnQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBwcmV2ZW50IGZ1cnRoZXIgY2hlY2tzXG4gICAgICAgIGxlZnQuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5fem9kLnJ1bih7IHZhbHVlOiBsZWZ0LnZhbHVlLCBpc3N1ZXM6IGxlZnQuaXNzdWVzIH0sIGN0eCk7XG59XG5leHBvcnQgY29uc3QgJFpvZENvZGVjID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDb2RlY1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW4uX3pvZC5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLm91dC5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnByb3BWYWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY3R4LmRpcmVjdGlvbiB8fCBcImZvcndhcmRcIjtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBkZWYuaW4uX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LnRoZW4oKGxlZnQpID0+IGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRlZi5vdXQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyaWdodCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudGhlbigocmlnaHQpID0+IGhhbmRsZUNvZGVjQVJlc3VsdChyaWdodCwgZGVmLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDb2RlY0FSZXN1bHQocmlnaHQsIGRlZiwgY3R4KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUNvZGVjQVJlc3VsdChyZXN1bHQsIGRlZiwgY3R4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHByZXZlbnQgZnVydGhlciBjaGVja3NcbiAgICAgICAgcmVzdWx0LmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBjdHguZGlyZWN0aW9uIHx8IFwiZm9yd2FyZFwiO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gZGVmLnRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSkgPT4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHZhbHVlLCBkZWYub3V0LCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHRyYW5zZm9ybWVkLCBkZWYub3V0LCBjdHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBkZWYucmV2ZXJzZVRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSkgPT4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHZhbHVlLCBkZWYuaW4sIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDb2RlY1R4UmVzdWx0KHJlc3VsdCwgdHJhbnNmb3JtZWQsIGRlZi5pbiwgY3R4KTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVDb2RlY1R4UmVzdWx0KGxlZnQsIHZhbHVlLCBuZXh0U2NoZW1hLCBjdHgpIHtcbiAgICAvLyBDaGVjayBpZiB0cmFuc2Zvcm0gYWRkZWQgYW55IGlzc3Vlc1xuICAgIGlmIChsZWZ0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgbGVmdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0U2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogbGVmdC5pc3N1ZXMgfSwgY3R4KTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kUmVhZG9ubHkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFJlYWRvbmx5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5wcm9wVmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oaGFuZGxlUmVhZG9ubHlSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVSZWFkb25seVJlc3VsdChyZXN1bHQpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVJlYWRvbmx5UmVzdWx0KHBheWxvYWQpIHtcbiAgICBwYXlsb2FkLnZhbHVlID0gT2JqZWN0LmZyZWV6ZShwYXlsb2FkLnZhbHVlKTtcbiAgICByZXR1cm4gcGF5bG9hZDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kVGVtcGxhdGVMaXRlcmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUZW1wbGF0ZUxpdGVyYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCByZWdleFBhcnRzID0gW107XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRlZi5wYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiYgcGFydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaXMgWm9kIHNjaGVtYVxuICAgICAgICAgICAgaWYgKCFwYXJ0Ll96b2QucGF0dGVybikge1xuICAgICAgICAgICAgICAgIC8vIGlmICghc291cmNlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLnBhcnQuX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwYXJ0Ll96b2QucGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCA/IHBhcnQuX3pvZC5wYXR0ZXJuLnNvdXJjZSA6IHBhcnQuX3pvZC5wYXR0ZXJuO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtwYXJ0Ll96b2QudHJhaXRzfWApO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBzb3VyY2Uuc3RhcnRzV2l0aChcIl5cIikgPyAxIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHNvdXJjZS5lbmRzV2l0aChcIiRcIikgPyBzb3VyY2UubGVuZ3RoIC0gMSA6IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICByZWdleFBhcnRzLnB1c2goc291cmNlLnNsaWNlKHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJ0ID09PSBudWxsIHx8IHV0aWwucHJpbWl0aXZlVHlwZXMuaGFzKHR5cGVvZiBwYXJ0KSkge1xuICAgICAgICAgICAgcmVnZXhQYXJ0cy5wdXNoKHV0aWwuZXNjYXBlUmVnZXgoYCR7cGFydH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke3BhcnR9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeJHtyZWdleFBhcnRzLmpvaW4oXCJcIil9JGApO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBpbnN0Ll96b2QucGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgICAgICBpZiAoIWluc3QuX3pvZC5wYXR0ZXJuLnRlc3QocGF5bG9hZC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogZGVmLmZvcm1hdCA/PyBcInRlbXBsYXRlX2xpdGVyYWxcIixcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBpbnN0Ll96b2QucGF0dGVybi5zb3VyY2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRnVuY3Rpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEZ1bmN0aW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fZGVmID0gZGVmO1xuICAgIGluc3QuX3pvZC5kZWYgPSBkZWY7XG4gICAgaW5zdC5pbXBsZW1lbnQgPSAoZnVuYykgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IGluc3QuX2RlZi5pbnB1dCA/IHBhcnNlKGluc3QuX2RlZi5pbnB1dCwgYXJncykgOiBhcmdzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5hcHBseShmdW5jLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgIGlmIChpbnN0Ll9kZWYub3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlKGluc3QuX2RlZi5vdXRwdXQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG4gICAgaW5zdC5pbXBsZW1lbnRBc3luYyA9IChmdW5jKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBpbnN0Ll9kZWYuaW5wdXQgPyBhd2FpdCBwYXJzZUFzeW5jKGluc3QuX2RlZi5pbnB1dCwgYXJncykgOiBhcmdzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUmVmbGVjdC5hcHBseShmdW5jLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgIGlmIChpbnN0Ll9kZWYub3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHBhcnNlQXN5bmMoaW5zdC5fZGVmLm91dHB1dCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIG91dHB1dCBpcyBhIHByb21pc2UgdHlwZSB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHVzZSBhc3luYyBpbXBsZW1lbnRhdGlvblxuICAgICAgICBjb25zdCBoYXNQcm9taXNlT3V0cHV0ID0gaW5zdC5fZGVmLm91dHB1dCAmJiBpbnN0Ll9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGUgPT09IFwicHJvbWlzZVwiO1xuICAgICAgICBpZiAoaGFzUHJvbWlzZU91dHB1dCkge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGluc3QuaW1wbGVtZW50QXN5bmMocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gaW5zdC5pbXBsZW1lbnQocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbiAgICBpbnN0LmlucHV0ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgRiA9IGluc3QuY29uc3RydWN0b3I7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICBpbnB1dDogbmV3ICRab2RUdXBsZSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3Q6IGFyZ3NbMV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgb3V0cHV0OiBpbnN0Ll9kZWYub3V0cHV0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgIGlucHV0OiBhcmdzWzBdLFxuICAgICAgICAgICAgb3V0cHV0OiBpbnN0Ll9kZWYub3V0cHV0LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGluc3Qub3V0cHV0ID0gKG91dHB1dCkgPT4ge1xuICAgICAgICBjb25zdCBGID0gaW5zdC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBGKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgIGlucHV0OiBpbnN0Ll9kZWYuaW5wdXQsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGluc3Q7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kUHJvbWlzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUHJvbWlzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYXlsb2FkLnZhbHVlKS50aGVuKChpbm5lcikgPT4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bih7IHZhbHVlOiBpbm5lciwgaXNzdWVzOiBbXSB9LCBjdHgpKTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZExhenkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZExhenlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICAvLyBsZXQgX2lubmVyVHlwZSE6IGFueTtcbiAgICAvLyB1dGlsLmRlZmluZUxhenkoZGVmLCBcImdldHRlclwiLCAoKSA9PiB7XG4gICAgLy8gICBpZiAoIV9pbm5lclR5cGUpIHtcbiAgICAvLyAgICAgX2lubmVyVHlwZSA9IGRlZi5nZXR0ZXIoKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiAoKSA9PiBfaW5uZXJUeXBlO1xuICAgIC8vIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwiaW5uZXJUeXBlXCIsICgpID0+IGRlZi5nZXR0ZXIoKSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiBpbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluID8/IHVuZGVmaW5lZCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gaW5zdC5fem9kLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0ID8/IHVuZGVmaW5lZCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGluc3QuX3pvZC5pbm5lclR5cGU7XG4gICAgICAgIHJldHVybiBpbm5lci5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNoZWNrcy4kWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgXykgPT4ge1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgciA9IGRlZi5mbihpbnB1dCk7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHIudGhlbigocikgPT4gaGFuZGxlUmVmaW5lUmVzdWx0KHIsIHBheWxvYWQsIGlucHV0LCBpbnN0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUmVmaW5lUmVzdWx0KHIsIHBheWxvYWQsIGlucHV0LCBpbnN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVJlZmluZVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGlucHV0LCBpbnN0KSB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgX2lzcyA9IHtcbiAgICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsIC8vIGluY29ycG9yYXRlcyBwYXJhbXMuZXJyb3IgaW50byBpc3N1ZSByZXBvcnRpbmdcbiAgICAgICAgICAgIHBhdGg6IFsuLi4oaW5zdC5fem9kLmRlZi5wYXRoID8/IFtdKV0sIC8vIGluY29ycG9yYXRlcyBwYXJhbXMuZXJyb3IgaW50byBpc3N1ZSByZXBvcnRpbmdcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhaW5zdC5fem9kLmRlZi5hYm9ydCxcbiAgICAgICAgICAgIC8vIHBhcmFtczogaW5zdC5fem9kLmRlZi5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbnN0Ll96b2QuZGVmLnBhcmFtcylcbiAgICAgICAgICAgIF9pc3MucGFyYW1zID0gaW5zdC5fem9kLmRlZi5wYXJhbXM7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzKSk7XG4gICAgfVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcItit2LHZgVwiLCB2ZXJiOiBcItij2YYg2YrYrdmI2YpcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwi2KjYp9mK2KpcIiwgdmVyYjogXCLYo9mGINmK2K3ZiNmKXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLYudmG2LXYsVwiLCB2ZXJiOiBcItij2YYg2YrYrdmI2YpcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCLYudmG2LXYsVwiLCB2ZXJiOiBcItij2YYg2YrYrdmI2YpcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcItmF2K/YrtmEXCIsXG4gICAgICAgIGVtYWlsOiBcItio2LHZitivINil2YTZg9iq2LHZiNmG2YpcIixcbiAgICAgICAgdXJsOiBcItix2KfYqNi3XCIsXG4gICAgICAgIGVtb2ppOiBcItil2YrZhdmI2KzZilwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCLYqtin2LHZitiuINmI2YjZgtiqINio2YXYudmK2KfYsSBJU09cIixcbiAgICAgICAgZGF0ZTogXCLYqtin2LHZitiuINio2YXYudmK2KfYsSBJU09cIixcbiAgICAgICAgdGltZTogXCLZiNmC2Kog2KjZhdi52YrYp9ixIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCLZhdiv2Kkg2KjZhdi52YrYp9ixIElTT1wiLFxuICAgICAgICBpcHY0OiBcIti52YbZiNin2YYgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcIti52YbZiNin2YYgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwi2YXYr9mJINi52YbYp9mI2YrZhiDYqNi12YrYutipIElQdjRcIixcbiAgICAgICAgY2lkcnY2OiBcItmF2K/ZiSDYudmG2KfZiNmK2YYg2KjYtdmK2LrYqSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCLZhtmO2LUg2KjYqtix2YXZitiyIGJhc2U2NC1lbmNvZGVkXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCLZhtmO2LUg2KjYqtix2YXZitiyIGJhc2U2NHVybC1lbmNvZGVkXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcItmG2Y7YtSDYudmE2Ykg2YfZitim2KkgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcItix2YLZhSDZh9in2KrZgSDYqNmF2LnZitin2LEgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItmF2K/YrtmEXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDZhdiv2K7ZhNin2Kog2LrZitixINmF2YLYqNmI2YTYqTog2YrZgdiq2LHYtiDYpdiv2K7Yp9mEIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH3YjCDZiNmE2YPZhiDYqtmFINil2K/Yrtin2YQgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNmF2K/YrtmE2KfYqiDYutmK2LEg2YXZgtio2YjZhNipOiDZitmB2KrYsdi2INil2K/Yrtin2YQgJHtleHBlY3RlZH3YjCDZiNmE2YPZhiDYqtmFINil2K/Yrtin2YQgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDZhdiv2K7ZhNin2Kog2LrZitixINmF2YLYqNmI2YTYqTog2YrZgdiq2LHYtiDYpdiv2K7Yp9mEICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg2KfYrtiq2YrYp9ixINi62YrYsSDZhdmC2KjZiNmEOiDZitiq2YjZgti5INin2YbYqtmC2KfYoSDYo9it2K8g2YfYsNmHINin2YTYrtmK2KfYsdin2Ko6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAg2KPZg9io2LEg2YXZhiDYp9mE2YTYp9iy2YU6INmK2YHYqtix2LYg2KPZhiDYqtmD2YjZhiAke2lzc3VlLm9yaWdpbiA/PyBcItin2YTZgtmK2YXYqVwifSAke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLYudmG2LXYsVwifWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDYo9mD2KjYsSDZhdmGINin2YTZhNin2LLZhTog2YrZgdiq2LHYtiDYo9mGINiq2YPZiNmGICR7aXNzdWUub3JpZ2luID8/IFwi2KfZhNmC2YrZhdipXCJ9ICR7YWRqfSAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNij2LXYutixINmF2YYg2KfZhNmE2KfYstmFOiDZitmB2KrYsdi2INmE2YAgJHtpc3N1ZS5vcmlnaW59INij2YYg2YrZg9mI2YYgJHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2KPYtdi62LEg2YXZhiDYp9mE2YTYp9iy2YU6INmK2YHYqtix2LYg2YTZgCAke2lzc3VlLm9yaWdpbn0g2KPZhiDZitmD2YjZhiAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDZhtmO2LUg2LrZitixINmF2YLYqNmI2YQ6INmK2KzYqCDYo9mGINmK2KjYr9ijINio2YAgXCIke2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2YbZjti1INi62YrYsSDZhdmC2KjZiNmEOiDZitis2Kgg2KPZhiDZitmG2KrZh9mKINio2YAgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2YbZjti1INi62YrYsSDZhdmC2KjZiNmEOiDZitis2Kgg2KPZhiDZitiq2LbZhdmR2Y7ZhiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNmG2Y7YtSDYutmK2LEg2YXZgtio2YjZhDog2YrYrNioINij2YYg2YrYt9in2KjZgiDYp9mE2YbZhdi3ICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9INi62YrYsSDZhdmC2KjZiNmEYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNix2YLZhSDYutmK2LEg2YXZgtio2YjZhDog2YrYrNioINij2YYg2YrZg9mI2YYg2YXZhiDZhdi22KfYudmB2KfYqiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2YXYudix2YEke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi2KfYqlwiIDogXCJcIn0g2LrYsdmK2Kgke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi2KlcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcItiMIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDZhdi52LHZgSDYutmK2LEg2YXZgtio2YjZhCDZgdmKICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcItmF2K/YrtmEINi62YrYsSDZhdmC2KjZiNmEXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDZhdiv2K7ZhCDYutmK2LEg2YXZgtio2YjZhCDZgdmKICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcItmF2K/YrtmEINi62YrYsSDZhdmC2KjZiNmEXCI7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcInNpbXZvbFwiLCB2ZXJiOiBcIm9sbWFsxLFkxLFyXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJheXRcIiwgdmVyYjogXCJvbG1hbMSxZMSxclwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiZWxlbWVudFwiLCB2ZXJiOiBcIm9sbWFsxLFkxLFyXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiZWxlbWVudFwiLCB2ZXJiOiBcIm9sbWFsxLFkxLFyXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJpbnB1dFwiLFxuICAgICAgICBlbWFpbDogXCJlbWFpbCBhZGRyZXNzXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIGRhdGV0aW1lXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIGRhdGVcIixcbiAgICAgICAgdGltZTogXCJJU08gdGltZVwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gZHVyYXRpb25cIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGFkZHJlc3NcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGFkZHJlc3NcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgcmFuZ2VcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgcmFuZ2VcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1lbmNvZGVkIHN0cmluZ1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gc3RyaW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgbnVtYmVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJpbnB1dFwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgWWFubMSxxZ8gZMmZecmZcjogZ8O2emzJmW5pbMmZbiBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBkYXhpbCBvbGFuICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBZYW5sxLHFnyBkyZl5yZlyOiBnw7Z6bMmZbmlsyZluICR7ZXhwZWN0ZWR9LCBkYXhpbCBvbGFuICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgWWFubMSxxZ8gZMmZecmZcjogZ8O2emzJmW5pbMmZbiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFlhbmzEscWfIHNlw6dpbTogYcWfYcSfxLFkYWvEsWxhcmRhbiBiaXJpIG9sbWFsxLFkxLFyOiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw4dveCBiw7Z5w7xrOiBnw7Z6bMmZbmlsyZluICR7aXNzdWUub3JpZ2luID8/IFwiZMmZecmZclwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgw4dveCBiw7Z5w7xrOiBnw7Z6bMmZbmlsyZluICR7aXNzdWUub3JpZ2luID8/IFwiZMmZecmZclwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDDh294IGtpw6dpazogZ8O2emzJmW5pbMmZbiAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYMOHb3gga2nDp2lrOiBnw7Z6bMmZbmlsyZluICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFlhbmzEscWfIG3JmXRuOiBcIiR7X2lzc3VlLnByZWZpeH1cIiBpbMmZIGJhxZ9sYW1hbMSxZMSxcmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgWWFubMSxxZ8gbcmZdG46IFwiJHtfaXNzdWUuc3VmZml4fVwiIGlsyZkgYml0bcmZbGlkaXJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgWWFubMSxxZ8gbcmZdG46IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIgZGF4aWwgb2xtYWzEsWTEsXJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgWWFubMSxxZ8gbcmZdG46ICR7X2lzc3VlLnBhdHRlcm59IMWfYWJsb251bmEgdXnEn3VuIG9sbWFsxLFkxLFyYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFlhbmzEscWfICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFlhbmzEscWfIMmZZMmZZDogJHtpc3N1ZS5kaXZpc29yfSBpbMmZIGLDtmzDvG7JmSBiaWzJmW4gb2xtYWzEsWTEsXJgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUYW7EsW5tYXlhbiBhw6dhciR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJsYXJcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBkYXhpbGluZMmZIHlhbmzEscWfIGHDp2FyYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiWWFubMSxxZ8gZMmZecmZclwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGRheGlsaW5kyZkgeWFubMSxxZ8gZMmZecmZcmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgWWFubMSxxZ8gZMmZecmZcmA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmZ1bmN0aW9uIGdldEJlbGFydXNpYW5QbHVyYWwoY291bnQsIG9uZSwgZmV3LCBtYW55KSB7XG4gICAgY29uc3QgYWJzQ291bnQgPSBNYXRoLmFicyhjb3VudCk7XG4gICAgY29uc3QgbGFzdERpZ2l0ID0gYWJzQ291bnQgJSAxMDtcbiAgICBjb25zdCBsYXN0VHdvRGlnaXRzID0gYWJzQ291bnQgJSAxMDA7XG4gICAgaWYgKGxhc3RUd29EaWdpdHMgPj0gMTEgJiYgbGFzdFR3b0RpZ2l0cyA8PSAxOSkge1xuICAgICAgICByZXR1cm4gbWFueTtcbiAgICB9XG4gICAgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gb25lO1xuICAgIH1cbiAgICBpZiAobGFzdERpZ2l0ID49IDIgJiYgbGFzdERpZ2l0IDw9IDQpIHtcbiAgICAgICAgcmV0dXJuIGZldztcbiAgICB9XG4gICAgcmV0dXJuIG1hbnk7XG59XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwi0YHRltC80LLQsNC7XCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcItGB0ZbQvNCy0LDQu9GLXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLRgdGW0LzQstCw0LvQsNGeXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCLQvNC10YbRjFwiLFxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCLRjdC70LXQvNC10L3RglwiLFxuICAgICAgICAgICAgICAgIGZldzogXCLRjdC70LXQvNC10L3RgtGLXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLRjdC70LXQvNC10L3RgtCw0Z5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcItC80LXRhtGMXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCLRjdC70LXQvNC10L3RglwiLFxuICAgICAgICAgICAgICAgIGZldzogXCLRjdC70LXQvNC10L3RgtGLXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLRjdC70LXQvNC10L3RgtCw0Z5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcItC80LXRhtGMXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwi0LHQsNC50YJcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwi0LHQsNC50YLRi1wiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwi0LHQsNC50YLQsNGeXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCLQvNC10YbRjFwiLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcItGD0LLQvtC0XCIsXG4gICAgICAgIGVtYWlsOiBcImVtYWlsINCw0LTRgNCw0YFcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCLRjdC80L7QtNC30ZZcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPINC00LDRgtCwINGWINGH0LDRgVwiLFxuICAgICAgICBkYXRlOiBcIklTTyDQtNCw0YLQsFwiLFxuICAgICAgICB0aW1lOiBcIklTTyDRh9Cw0YFcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPINC/0YDQsNGG0Y/Qs9C70LDRgdGG0YxcIixcbiAgICAgICAgaXB2NDogXCJJUHY0INCw0LTRgNCw0YFcIixcbiAgICAgICAgaXB2NjogXCJJUHY2INCw0LTRgNCw0YFcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQg0LTRi9GP0L/QsNC30L7QvVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiDQtNGL0Y/Qv9Cw0LfQvtC9XCIsXG4gICAgICAgIGJhc2U2NDogXCLRgNCw0LTQvtC6INGDINGE0LDRgNC80LDRhtC1IGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwi0YDQsNC00L7QuiDRgyDRhNCw0YDQvNCw0YbQtSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiDRgNCw0LTQvtC6XCIsXG4gICAgICAgIGUxNjQ6IFwi0L3Rg9C80LDRgCBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi0YPQstC+0LRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCLQu9GW0LpcIixcbiAgICAgICAgYXJyYXk6IFwi0LzQsNGB0ZbRnlwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndGP0L/RgNCw0LLRltC70YzQvdGLINGe0LLQvtC0OiDRh9Cw0LrQsNGe0YHRjyBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCDQsNGC0YDRi9C80LDQvdCwICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndGP0L/RgNCw0LLRltC70YzQvdGLINGe0LLQvtC0OiDRh9Cw0LrQsNGe0YHRjyAke2V4cGVjdGVkfSwg0LDRgtGA0YvQvNCw0L3QsCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0Y/Qv9GA0LDQstGW0LvRjNC90Ysg0Z7QstC+0LQ6INGH0LDQutCw0LvQsNGB0Y8gJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndGP0L/RgNCw0LLRltC70YzQvdGLINCy0LDRgNGL0Y/QvdGCOiDRh9Cw0LrQsNGe0YHRjyDQsNC00LfRltC9INC3ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE51bWJlcihpc3N1ZS5tYXhpbXVtKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pdCA9IGdldEJlbGFydXNpYW5QbHVyYWwobWF4VmFsdWUsIHNpemluZy51bml0Lm9uZSwgc2l6aW5nLnVuaXQuZmV3LCBzaXppbmcudW5pdC5tYW55KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQl9Cw0L3QsNC00YLQsCDQstGP0LvRltC60ZY6INGH0LDQutCw0LvQsNGB0Y8sINGI0YLQviAke2lzc3VlLm9yaWdpbiA/PyBcItC30L3QsNGH0Y3QvdC90LVcIn0g0L/QsNCy0ZbQvdC90LAgJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7dW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNCX0LDQvdCw0LTRgtCwINCy0Y/Qu9GW0LrRljog0YfQsNC60LDQu9Cw0YHRjywg0YjRgtC+ICR7aXNzdWUub3JpZ2luID8/IFwi0LfQvdCw0YfRjdC90L3QtVwifSDQv9Cw0LLRltC90L3QsCDQsdGL0YbRjCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IE51bWJlcihpc3N1ZS5taW5pbXVtKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pdCA9IGdldEJlbGFydXNpYW5QbHVyYWwobWluVmFsdWUsIHNpemluZy51bml0Lm9uZSwgc2l6aW5nLnVuaXQuZmV3LCBzaXppbmcudW5pdC5tYW55KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQl9Cw0L3QsNC00YLQsCDQvNCw0LvRizog0YfQsNC60LDQu9Cw0YHRjywg0YjRgtC+ICR7aXNzdWUub3JpZ2lufSDQv9Cw0LLRltC90L3QsCAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHt1bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg0JfQsNC90LDQtNGC0LAg0LzQsNC70Ys6INGH0LDQutCw0LvQsNGB0Y8sINGI0YLQviAke2lzc3VlLm9yaWdpbn0g0L/QsNCy0ZbQvdC90LAg0LHRi9GG0YwgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndGP0L/RgNCw0LLRltC70YzQvdGLINGA0LDQtNC+0Lo6INC/0LDQstGW0L3QtdC9INC/0LDRh9GL0L3QsNGG0YbQsCDQtyBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDRgNCw0LTQvtC6OiDQv9Cw0LLRltC90LXQvSDQt9Cw0LrQsNC90YfQstCw0YbRhtCwINC90LAgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDRgNCw0LTQvtC6OiDQv9Cw0LLRltC90LXQvSDQt9C80Y/RiNGH0LDRhtGMIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDRgNCw0LTQvtC6OiDQv9Cw0LLRltC90LXQvSDQsNC00L/QsNCy0Y/QtNCw0YbRjCDRiNCw0LHQu9C+0L3RgyAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndGP0L/RgNCw0LLRltC70YzQvdGLICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0Y/Qv9GA0LDQstGW0LvRjNC90Ysg0LvRltC6OiDQv9Cw0LLRltC90LXQvSDQsdGL0YbRjCDQutGA0LDRgtC90YvQvCAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdGA0LDRgdC/0LDQt9C90LDQvdGLICR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLQutC70Y7Rh9GLXCIgOiBcItC60LvRjtGHXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0Y/Qv9GA0LDQstGW0LvRjNC90Ysg0LrQu9GO0Ycg0YMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi0J3Rj9C/0YDQsNCy0ZbQu9GM0L3RiyDRntCy0L7QtFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg0J3Rj9C/0YDQsNCy0ZbQu9GM0L3QsNC1INC30L3QsNGH0Y3QvdC90LUg0Z4gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndGP0L/RgNCw0LLRltC70YzQvdGLINGe0LLQvtC0YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwi0YHQuNC80LLQvtC70LBcIiwgdmVyYjogXCLQtNCwINGB0YrQtNGK0YDQttCwXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcItCx0LDQudGC0LBcIiwgdmVyYjogXCLQtNCwINGB0YrQtNGK0YDQttCwXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLQtdC70LXQvNC10L3RgtCwXCIsIHZlcmI6IFwi0LTQsCDRgdGK0LTRitGA0LbQsFwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcItC10LvQtdC80LXQvdGC0LBcIiwgdmVyYjogXCLQtNCwINGB0YrQtNGK0YDQttCwXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCLQstGF0L7QtFwiLFxuICAgICAgICBlbWFpbDogXCLQuNC80LXQudC7INCw0LTRgNC10YFcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCLQtdC80L7QtNC20LhcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPINCy0YDQtdC80LVcIixcbiAgICAgICAgZGF0ZTogXCJJU08g0LTQsNGC0LBcIixcbiAgICAgICAgdGltZTogXCJJU08g0LLRgNC10LzQtVwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08g0L/RgNC+0LTRitC70LbQuNGC0LXQu9C90L7RgdGCXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCDQsNC00YDQtdGBXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiDQsNC00YDQtdGBXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0INC00LjQsNC/0LDQt9C+0L1cIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYg0LTQuNCw0L/QsNC30L7QvVwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LdC60L7QtNC40YDQsNC9INC90LjQt1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLdC60L7QtNC40YDQsNC9INC90LjQt1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OINC90LjQt1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0INC90L7QvNC10YBcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItCy0YXQvtC0XCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwi0YfQuNGB0LvQvlwiLFxuICAgICAgICBhcnJheTogXCLQvNCw0YHQuNCyXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstCw0LvQuNC00LXQvSDQstGF0L7QtDog0L7Rh9Cw0LrQstCw0L0gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwg0L/QvtC70YPRh9C10L0gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstCw0LvQuNC00LXQvSDQstGF0L7QtDog0L7Rh9Cw0LrQstCw0L0gJHtleHBlY3RlZH0sINC/0L7Qu9GD0YfQtdC9ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQu9C40LTQtdC9INCy0YXQvtC0OiDQvtGH0LDQutCy0LDQvSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstCw0LvQuNC00L3QsCDQvtC/0YbQuNGPOiDQvtGH0LDQutCy0LDQvdC+INC10LTQvdC+INC+0YIgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCi0LLRitGA0LTQtSDQs9C+0LvRj9C80L46INC+0YfQsNC60LLQsCDRgdC1ICR7aXNzdWUub3JpZ2luID8/IFwi0YHRgtC+0LnQvdC+0YHRglwifSDQtNCwINGB0YrQtNGK0YDQttCwICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwi0LXQu9C10LzQtdC90YLQsFwifWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQotCy0YrRgNC00LUg0LPQvtC70Y/QvNC+OiDQvtGH0LDQutCy0LAg0YHQtSAke2lzc3VlLm9yaWdpbiA/PyBcItGB0YLQvtC50L3QvtGB0YJcIn0g0LTQsCDQsdGK0LTQtSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCi0LLRitGA0LTQtSDQvNCw0LvQutC+OiDQvtGH0LDQutCy0LAg0YHQtSAke2lzc3VlLm9yaWdpbn0g0LTQsCDRgdGK0LTRitGA0LbQsCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNCi0LLRitGA0LTQtSDQvNCw0LvQutC+OiDQvtGH0LDQutCy0LAg0YHQtSAke2lzc3VlLm9yaWdpbn0g0LTQsCDQsdGK0LTQtSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQu9C40LTQtdC9INC90LjQtzog0YLRgNGP0LHQstCwINC00LAg0LfQsNC/0L7Rh9Cy0LAg0YEgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQsNC70LjQtNC10L0g0L3QuNC3OiDRgtGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQstCwINGBIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstCw0LvQuNC00LXQvSDQvdC40Lc6INGC0YDRj9Cx0LLQsCDQtNCwINCy0LrQu9GO0YfQstCwIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQu9C40LTQtdC9INC90LjQtzog0YLRgNGP0LHQstCwINC00LAg0YHRitCy0L/QsNC00LAg0YEgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIGxldCBpbnZhbGlkX2FkaiA9IFwi0J3QtdCy0LDQu9C40LTQtdC9XCI7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW1vamlcIilcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9hZGogPSBcItCd0LXQstCw0LvQuNC00L3QvlwiO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImRhdGV0aW1lXCIpXG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRfYWRqID0gXCLQndC10LLQsNC70LjQtNC90L5cIjtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRfYWRqID0gXCLQndC10LLQsNC70LjQtNC90LBcIjtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJ0aW1lXCIpXG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRfYWRqID0gXCLQndC10LLQsNC70LjQtNC90L5cIjtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJkdXJhdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkX2FkaiA9IFwi0J3QtdCy0LDQu9C40LTQvdCwXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2ludmFsaWRfYWRqfSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQsNC70LjQtNC90L4g0YfQuNGB0LvQvjog0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0LrRgNCw0YLQvdC+INC90LAgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXRgNCw0LfQv9C+0LfQvdCw0YIke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi0LhcIiA6IFwiXCJ9INC60LvRjtGHJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcItC+0LLQtVwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQu9C40LTQtdC9INC60LvRjtGHINCyICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcItCd0LXQstCw0LvQuNC00LXQvSDQstGF0L7QtFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQu9C40LTQvdCwINGB0YLQvtC50L3QvtGB0YIg0LIgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQsNC70LjQtNC10L0g0LLRhdC+0LRgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJjYXLDoGN0ZXJzXCIsIHZlcmI6IFwiY29udGVuaXJcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwiYnl0ZXNcIiwgdmVyYjogXCJjb250ZW5pclwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiZWxlbWVudHNcIiwgdmVyYjogXCJjb250ZW5pclwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImVsZW1lbnRzXCIsIHZlcmI6IFwiY29udGVuaXJcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImVudHJhZGFcIixcbiAgICAgICAgZW1haWw6IFwiYWRyZcOnYSBlbGVjdHLDsm5pY2FcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRhIGkgaG9yYSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRhIElTT1wiLFxuICAgICAgICB0aW1lOiBcImhvcmEgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmFkYSBJU09cIixcbiAgICAgICAgaXB2NDogXCJhZHJlw6dhIElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhZHJlw6dhIElQdjZcIixcbiAgICAgICAgY2lkcnY0OiBcInJhbmcgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwicmFuZyBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJjYWRlbmEgY29kaWZpY2FkYSBlbiBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImNhZGVuYSBjb2RpZmljYWRhIGVuIGJhc2U2NHVybFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJjYWRlbmEgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIm7Dum1lcm8gRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImVudHJhZGFcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRpcHVzIGludsOgbGlkOiBzJ2VzcGVyYXZhIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIHMnaGEgcmVidXQgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFRpcHVzIGludsOgbGlkOiBzJ2VzcGVyYXZhICR7ZXhwZWN0ZWR9LCBzJ2hhIHJlYnV0ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVmFsb3IgaW52w6BsaWQ6IHMnZXNwZXJhdmEgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPcGNpw7MgaW52w6BsaWRhOiBzJ2VzcGVyYXZhIHVuYSBkZSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwiIG8gXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJjb20gYSBtw6B4aW1cIiA6IFwibWVueXMgZGVcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE1hc3NhIGdyYW46IHMnZXNwZXJhdmEgcXVlICR7aXNzdWUub3JpZ2luID8/IFwiZWwgdmFsb3JcIn0gY29udGluZ3XDqXMgJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudHNcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgTWFzc2EgZ3Jhbjogcydlc3BlcmF2YSBxdWUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJlbCB2YWxvclwifSBmb3MgJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcImNvbSBhIG3DrW5pbVwiIDogXCJtw6lzIGRlXCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE1hc3NhIHBldGl0OiBzJ2VzcGVyYXZhIHF1ZSAke2lzc3VlLm9yaWdpbn0gY29udGluZ3XDqXMgJHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgTWFzc2EgcGV0aXQ6IHMnZXNwZXJhdmEgcXVlICR7aXNzdWUub3JpZ2lufSBmb3MgJHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGb3JtYXQgaW52w6BsaWQ6IGhhIGRlIGNvbWVuw6dhciBhbWIgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGb3JtYXQgaW52w6BsaWQ6IGhhIGQnYWNhYmFyIGFtYiBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGb3JtYXQgaW52w6BsaWQ6IGhhIGQnaW5jbG91cmUgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGb3JtYXQgaW52w6BsaWQ6IGhhIGRlIGNvaW5jaWRpciBhbWIgZWwgcGF0csOzICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEZvcm1hdCBpbnbDoGxpZCBwZXIgYSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOw7ptZXJvIGludsOgbGlkOiBoYSBkZSBzZXIgbcO6bHRpcGxlIGRlICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBDbGF1JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IG5vIHJlY29uZWd1ZGEke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQ2xhdSBpbnbDoGxpZGEgYSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnRyYWRhIGludsOgbGlkYVwiOyAvLyBDb3VsZCBhbHNvIGJlIFwiVGlwdXMgZCd1bmnDsyBpbnbDoGxpZFwiIGJ1dCBcIkVudHJhZGEgaW52w6BsaWRhXCIgaXMgbW9yZSBnZW5lcmFsXG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbGVtZW50IGludsOgbGlkIGEgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyYWRhIGludsOgbGlkYWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcInpuYWvFr1wiLCB2ZXJiOiBcIm3DrXRcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwiYmFqdMWvXCIsIHZlcmI6IFwibcOtdFwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwicHJ2a8WvXCIsIHZlcmI6IFwibcOtdFwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcInBydmvFr1wiLCB2ZXJiOiBcIm3DrXRcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcInJlZ3Vsw6FybsOtIHbDvXJhelwiLFxuICAgICAgICBlbWFpbDogXCJlLW1haWxvdsOhIGFkcmVzYVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcImRhdHVtIGEgxI1hcyB2ZSBmb3Jtw6F0dSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXR1bSB2ZSBmb3Jtw6F0dSBJU09cIixcbiAgICAgICAgdGltZTogXCLEjWFzIHZlIGZvcm3DoXR1IElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJkb2JhIHRydsOhbsOtIElTT1wiLFxuICAgICAgICBpcHY0OiBcIklQdjQgYWRyZXNhXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBhZHJlc2FcIixcbiAgICAgICAgY2lkcnY0OiBcInJvenNhaCBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJyb3pzYWggSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwixZlldMSbemVjIHpha8OzZG92YW7DvSB2ZSBmb3Jtw6F0dSBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIsWZZXTEm3plYyB6YWvDs2RvdmFuw70gdmUgZm9ybcOhdHUgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIsWZZXTEm3plYyB2ZSBmb3Jtw6F0dSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwixI3DrXNsbyBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwidnN0dXBcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCLEjcOtc2xvXCIsXG4gICAgICAgIHN0cmluZzogXCLFmWV0xJt6ZWNcIixcbiAgICAgICAgZnVuY3Rpb246IFwiZnVua2NlXCIsXG4gICAgICAgIGFycmF5OiBcInBvbGVcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0bsO9IHZzdHVwOiBvxI1la8OhdsOhbm8gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgb2JkcsW+ZW5vICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXBsYXRuw70gdnN0dXA6IG/EjWVrw6F2w6FubyAke2V4cGVjdGVkfSwgb2JkcsW+ZW5vICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0bsO9IHZzdHVwOiBvxI1la8OhdsOhbm8gJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXBsYXRuw6EgbW/Fvm5vc3Q6IG/EjWVrw6F2w6FuYSBqZWRuYSB6IGhvZG5vdCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBIb2Rub3RhIGplIHDFmcOtbGnFoSB2ZWxrw6E6ICR7aXNzdWUub3JpZ2luID8/IFwiaG9kbm90YVwifSBtdXPDrSBtw610ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwicHJ2a8WvXCJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBIb2Rub3RhIGplIHDFmcOtbGnFoSB2ZWxrw6E6ICR7aXNzdWUub3JpZ2luID8/IFwiaG9kbm90YVwifSBtdXPDrSBiw710ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSG9kbm90YSBqZSBwxZnDrWxpxaEgbWFsw6E6ICR7aXNzdWUub3JpZ2luID8/IFwiaG9kbm90YVwifSBtdXPDrSBtw610ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwicHJ2a8WvXCJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBIb2Rub3RhIGplIHDFmcOtbGnFoSBtYWzDoTogJHtpc3N1ZS5vcmlnaW4gPz8gXCJob2Rub3RhXCJ9IG11c8OtIGLDvXQgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOZXBsYXRuw70gxZlldMSbemVjOiBtdXPDrSB6YcSNw61uYXQgbmEgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5lcGxhdG7DvSDFmWV0xJt6ZWM6IG11c8OtIGtvbsSNaXQgbmEgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0bsO9IMWZZXTEm3plYzogbXVzw60gb2JzYWhvdmF0IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0bsO9IMWZZXTEm3plYzogbXVzw60gb2Rwb3bDrWRhdCB2em9ydSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXBsYXRuw70gZm9ybcOhdCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXBsYXRuw6kgxI3DrXNsbzogbXVzw60gYsO9dCBuw6Fzb2JrZW0gJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5lem7DoW3DqSBrbMOtxI1lOiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5lcGxhdG7DvSBrbMOtxI0gdiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXBsYXRuw70gdnN0dXBcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5lcGxhdG7DoSBob2Rub3RhIHYgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXBsYXRuw70gdnN0dXBgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJ0ZWduXCIsIHZlcmI6IFwiaGF2ZGVcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwiYnl0ZXNcIiwgdmVyYjogXCJoYXZkZVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiZWxlbWVudGVyXCIsIHZlcmI6IFwiaW5kZWhvbGR0XCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiZWxlbWVudGVyXCIsIHZlcmI6IFwiaW5kZWhvbGR0XCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJpbnB1dFwiLFxuICAgICAgICBlbWFpbDogXCJlLW1haWxhZHJlc3NlXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIGRhdG8tIG9nIGtsb2trZXNsw6Z0XCIsXG4gICAgICAgIGRhdGU6IFwiSVNPLWRhdG9cIixcbiAgICAgICAgdGltZTogXCJJU08ta2xva2tlc2zDpnRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPLXZhcmlnaGVkXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NC1vbXLDpWRlXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Ni1vbXLDpWRlXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0LXNwZWt0cnVtXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2LXNwZWt0cnVtXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQta29kZXQgc3RyZW5nXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwta29kZXQgc3RyZW5nXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04tc3RyZW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQtbnVtbWVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJpbnB1dFwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgc3RyaW5nOiBcInN0cmVuZ1wiLFxuICAgICAgICBudW1iZXI6IFwidGFsXCIsXG4gICAgICAgIGJvb2xlYW46IFwiYm9vbGVhblwiLFxuICAgICAgICBhcnJheTogXCJsaXN0ZVwiLFxuICAgICAgICBvYmplY3Q6IFwib2JqZWt0XCIsXG4gICAgICAgIHNldDogXCJzw6Z0XCIsXG4gICAgICAgIGZpbGU6IFwiZmlsXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWd0IGlucHV0OiBmb3J2ZW50ZWRlIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIGZpayAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZ3QgaW5wdXQ6IGZvcnZlbnRlZGUgJHtleHBlY3RlZH0sIGZpayAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgdsOmcmRpOiBmb3J2ZW50ZWRlICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZ3QgdmFsZzogZm9ydmVudGVkZSBlbiBhZiBmw7hsZ2VuZGUgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5vcmlnaW5dID8/IGlzc3VlLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEZvciBzdG9yOiBmb3J2ZW50ZWRlICR7b3JpZ2luID8/IFwidmFsdWVcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudGVyXCJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEZvciBzdG9yOiBmb3J2ZW50ZWRlICR7b3JpZ2luID8/IFwidmFsdWVcIn0gaGF2ZGUgJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5vcmlnaW5dID8/IGlzc3VlLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIGxpbGxlOiBmb3J2ZW50ZWRlICR7b3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBGb3IgbGlsbGU6IGZvcnZlbnRlZGUgJHtvcmlnaW59IGhhdmRlICR7YWRqfSAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBza2FsIHN0YXJ0ZSBtZWQgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBza2FsIGVuZGUgbWVkIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBza2FsIGluZGVob2xkZSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBza2FsIG1hdGNoZSBtw7huc3RlcmV0ICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZ3QgdGFsOiBza2FsIHbDpnJlIGRlbGVsaWd0IG1lZCAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlVrZW5kdGUgbsO4Z2xlclwiIDogXCJVa2VuZHQgbsO4Z2xlXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgbsO4Z2xlIGkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVWd5bGRpZ3QgaW5wdXQ6IG1hdGNoZXIgaW5nZW4gYWYgZGUgdGlsbGFkdGUgdHlwZXJcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgdsOmcmRpIGkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlndCBpbnB1dGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcIlplaWNoZW5cIiwgdmVyYjogXCJ6dSBoYWJlblwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJCeXRlc1wiLCB2ZXJiOiBcInp1IGhhYmVuXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJFbGVtZW50ZVwiLCB2ZXJiOiBcInp1IGhhYmVuXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiRWxlbWVudGVcIiwgdmVyYjogXCJ6dSBoYWJlblwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiRWluZ2FiZVwiLFxuICAgICAgICBlbWFpbDogXCJFLU1haWwtQWRyZXNzZVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcIkVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTy1EYXR1bSB1bmQgLVVocnplaXRcIixcbiAgICAgICAgZGF0ZTogXCJJU08tRGF0dW1cIixcbiAgICAgICAgdGltZTogXCJJU08tVWhyemVpdFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08tRGF1ZXJcIixcbiAgICAgICAgaXB2NDogXCJJUHY0LUFkcmVzc2VcIixcbiAgICAgICAgaXB2NjogXCJJUHY2LUFkcmVzc2VcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtQmVyZWljaFwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Ni1CZXJlaWNoXCIsXG4gICAgICAgIGJhc2U2NDogXCJCYXNlNjQtY29kaWVydGVyIFN0cmluZ1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiQmFzZTY0LVVSTC1jb2RpZXJ0ZXIgU3RyaW5nXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04tU3RyaW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQtTnVtbWVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJFaW5nYWJlXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwiWmFobFwiLFxuICAgICAgICBhcnJheTogXCJBcnJheVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVbmfDvGx0aWdlIEVpbmdhYmU6IGVyd2FydGV0IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIGVyaGFsdGVuICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmfDvGx0aWdlIEVpbmdhYmU6IGVyd2FydGV0ICR7ZXhwZWN0ZWR9LCBlcmhhbHRlbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVuZ8O8bHRpZ2UgRWluZ2FiZTogZXJ3YXJ0ZXQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmfDvGx0aWdlIE9wdGlvbjogZXJ3YXJ0ZXQgZWluZSB2b24gJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFp1IGdyb8OfOiBlcndhcnRldCwgZGFzcyAke2lzc3VlLm9yaWdpbiA/PyBcIldlcnRcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJFbGVtZW50ZVwifSBoYXRgO1xuICAgICAgICAgICAgICAgIHJldHVybiBgWnUgZ3Jvw586IGVyd2FydGV0LCBkYXNzICR7aXNzdWUub3JpZ2luID8/IFwiV2VydFwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gaXN0YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBadSBrbGVpbjogZXJ3YXJ0ZXQsIGRhc3MgJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSBoYXRgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFp1IGtsZWluOiBlcndhcnRldCwgZGFzcyAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9IGlzdGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVW5nw7xsdGlnZXIgU3RyaW5nOiBtdXNzIG1pdCBcIiR7X2lzc3VlLnByZWZpeH1cIiBiZWdpbm5lbmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVW5nw7xsdGlnZXIgU3RyaW5nOiBtdXNzIG1pdCBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBlbmRlbmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVbmfDvGx0aWdlciBTdHJpbmc6IG11c3MgXCIke19pc3N1ZS5pbmNsdWRlc31cIiBlbnRoYWx0ZW5gO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVW5nw7xsdGlnZXIgU3RyaW5nOiBtdXNzIGRlbSBNdXN0ZXIgJHtfaXNzdWUucGF0dGVybn0gZW50c3ByZWNoZW5gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVW5nw7xsdGlnOiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmfDvGx0aWdlIFphaGw6IG11c3MgZWluIFZpZWxmYWNoZXMgdm9uICR7aXNzdWUuZGl2aXNvcn0gc2VpbmA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJVbmJla2FubnRlIFNjaGzDvHNzZWxcIiA6IFwiVW5iZWthbm50ZXIgU2NobMO8c3NlbFwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmfDvGx0aWdlciBTY2hsw7xzc2VsIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlVuZ8O8bHRpZ2UgRWluZ2FiZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVW5nw7xsdGlnZXIgV2VydCBpbiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVuZ8O8bHRpZ2UgRWluZ2FiZWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImNoYXJhY3RlcnNcIiwgdmVyYjogXCJ0byBoYXZlXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJ5dGVzXCIsIHZlcmI6IFwidG8gaGF2ZVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiaXRlbXNcIiwgdmVyYjogXCJ0byBoYXZlXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiaXRlbXNcIiwgdmVyYjogXCJ0byBoYXZlXCIgfSxcbiAgICAgICAgbWFwOiB7IHVuaXQ6IFwiZW50cmllc1wiLCB2ZXJiOiBcInRvIGhhdmVcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImVtYWlsIGFkZHJlc3NcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGF0ZXRpbWVcIixcbiAgICAgICAgZGF0ZTogXCJJU08gZGF0ZVwiLFxuICAgICAgICB0aW1lOiBcIklTTyB0aW1lXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBkdXJhdGlvblwiLFxuICAgICAgICBpcHY0OiBcIklQdjQgYWRkcmVzc1wiLFxuICAgICAgICBpcHY2OiBcIklQdjYgYWRkcmVzc1wiLFxuICAgICAgICBtYWM6IFwiTUFDIGFkZHJlc3NcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgcmFuZ2VcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgcmFuZ2VcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1lbmNvZGVkIHN0cmluZ1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gc3RyaW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgbnVtYmVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJpbnB1dFwiLFxuICAgIH07XG4gICAgLy8gdHlwZSBuYW1lczogbWlzc2luZyBrZXlzID0gZG8gbm90IHRyYW5zbGF0ZSAodXNlIHJhdyB2YWx1ZSB2aWEgPz8gZmFsbGJhY2spXG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHk6IFwibmFuXCIgLT4gXCJOYU5cIiBmb3IgZGlzcGxheVxuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIC8vIEFsbCBvdGhlciB0eXBlIG5hbWVzIG9taXR0ZWQgLSB0aGV5IGZhbGwgYmFjayB0byByYXcgdmFsdWVzIHZpYSA/PyBvcGVyYXRvclxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCByZWNlaXZlZCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVG9vIGJpZzogZXhwZWN0ZWQgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWx1ZVwifSB0byBoYXZlICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudHNcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVG9vIGJpZzogZXhwZWN0ZWQgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWx1ZVwifSB0byBiZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtpc3N1ZS5vcmlnaW59IHRvIGhhdmUgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUb28gc21hbGw6IGV4cGVjdGVkICR7aXNzdWUub3JpZ2lufSB0byBiZSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHN0cmluZzogbXVzdCBtYXRjaCBwYXR0ZXJuICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVW5yZWNvZ25pemVkIGtleSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIGtleSBpbiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHZhbHVlIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBpbnB1dGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImthcmFrdHJvam5cIiwgdmVyYjogXCJoYXZpXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJhanRvam5cIiwgdmVyYjogXCJoYXZpXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJlbGVtZW50b2puXCIsIHZlcmI6IFwiaGF2aVwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImVsZW1lbnRvam5cIiwgdmVyYjogXCJoYXZpXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJlbmlnb1wiLFxuICAgICAgICBlbWFpbDogXCJyZXRhZHJlc29cIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW/EnWlvXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTy1kYXRvdGVtcG9cIixcbiAgICAgICAgZGF0ZTogXCJJU08tZGF0b1wiLFxuICAgICAgICB0aW1lOiBcIklTTy10ZW1wb1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08tZGHFrXJvXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NC1hZHJlc29cIixcbiAgICAgICAgaXB2NjogXCJJUHY2LWFkcmVzb1wiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NC1yYW5nb1wiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Ni1yYW5nb1wiLFxuICAgICAgICBiYXNlNjQ6IFwiNjQtdW1lIGtvZGl0YSBrYXJha3RyYXJvXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJVUkwtNjQtdW1lIGtvZGl0YSBrYXJha3RyYXJvXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04ta2FyYWt0cmFyb1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0LW5vbWJyb1wiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiZW5pZ29cIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJub21icm9cIixcbiAgICAgICAgYXJyYXk6IFwidGFiZWxvXCIsXG4gICAgICAgIG51bGw6IFwic2VudmFsb3JhXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmFsaWRhIGVuaWdvOiBhdGVuZGnEnWlzIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIHJpY2V2acSdaXMgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmFsaWRhIGVuaWdvOiBhdGVuZGnEnWlzICR7ZXhwZWN0ZWR9LCByaWNldmnEnWlzICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgZW5pZ286IGF0ZW5kacSdaXMgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZhbGlkYSBvcGNpbzogYXRlbmRpxJ1pcyB1bnUgZWwgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRybyBncmFuZGE6IGF0ZW5kacSdaXMga2UgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWxvcm9cIn0gaGF2dSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRvam5cIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVHJvIGdyYW5kYTogYXRlbmRpxJ1pcyBrZSAke2lzc3VlLm9yaWdpbiA/PyBcInZhbG9yb1wifSBoYXZ1ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvIG1hbGdyYW5kYTogYXRlbmRpxJ1pcyBrZSAke2lzc3VlLm9yaWdpbn0gaGF2dSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFRybyBtYWxncmFuZGE6IGF0ZW5kacSdaXMga2UgJHtpc3N1ZS5vcmlnaW59IGVzdHUgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZhbGlkYSBrYXJha3RyYXJvOiBkZXZhcyBrb21lbmNpxJ1pIHBlciBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEga2FyYWt0cmFybzogZGV2YXMgZmluacSdaSBwZXIgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEga2FyYWt0cmFybzogZGV2YXMgaW5rbHV6aXZpIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEga2FyYWt0cmFybzogZGV2YXMga29uZ3J1aSBrdW4gbGEgbW9kZWxvICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmFsaWRhICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmFsaWRhIG5vbWJybzogZGV2YXMgZXN0aSBvYmxvIGRlICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZWtvbmF0YSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJqXCIgOiBcIlwifSDFnWxvc2lsbyR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJqXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZhbGlkYSDFnWxvc2lsbyBlbiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXZhbGlkYSBlbmlnb1wiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgdmFsb3JvIGVuICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgZW5pZ29gO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJjYXJhY3RlcmVzXCIsIHZlcmI6IFwidGVuZXJcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwiYnl0ZXNcIiwgdmVyYjogXCJ0ZW5lclwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiZWxlbWVudG9zXCIsIHZlcmI6IFwidGVuZXJcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCJlbGVtZW50b3NcIiwgdmVyYjogXCJ0ZW5lclwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiZW50cmFkYVwiLFxuICAgICAgICBlbWFpbDogXCJkaXJlY2Npw7NuIGRlIGNvcnJlbyBlbGVjdHLDs25pY29cIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJmZWNoYSB5IGhvcmEgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiZmVjaGEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiaG9yYSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiZHVyYWNpw7NuIElTT1wiLFxuICAgICAgICBpcHY0OiBcImRpcmVjY2nDs24gSVB2NFwiLFxuICAgICAgICBpcHY2OiBcImRpcmVjY2nDs24gSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwicmFuZ28gSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwicmFuZ28gSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwiY2FkZW5hIGNvZGlmaWNhZGEgZW4gYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJVUkwgY29kaWZpY2FkYSBlbiBiYXNlNjRcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiY2FkZW5hIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJuw7ptZXJvIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJlbnRyYWRhXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBzdHJpbmc6IFwidGV4dG9cIixcbiAgICAgICAgbnVtYmVyOiBcIm7Dum1lcm9cIixcbiAgICAgICAgYm9vbGVhbjogXCJib29sZWFub1wiLFxuICAgICAgICBhcnJheTogXCJhcnJlZ2xvXCIsXG4gICAgICAgIG9iamVjdDogXCJvYmpldG9cIixcbiAgICAgICAgc2V0OiBcImNvbmp1bnRvXCIsXG4gICAgICAgIGZpbGU6IFwiYXJjaGl2b1wiLFxuICAgICAgICBkYXRlOiBcImZlY2hhXCIsXG4gICAgICAgIGJpZ2ludDogXCJuw7ptZXJvIGdyYW5kZVwiLFxuICAgICAgICBzeW1ib2w6IFwic8OtbWJvbG9cIixcbiAgICAgICAgdW5kZWZpbmVkOiBcImluZGVmaW5pZG9cIixcbiAgICAgICAgbnVsbDogXCJudWxvXCIsXG4gICAgICAgIGZ1bmN0aW9uOiBcImZ1bmNpw7NuXCIsXG4gICAgICAgIG1hcDogXCJtYXBhXCIsXG4gICAgICAgIHJlY29yZDogXCJyZWdpc3Ryb1wiLFxuICAgICAgICB0dXBsZTogXCJ0dXBsYVwiLFxuICAgICAgICBlbnVtOiBcImVudW1lcmFjacOzblwiLFxuICAgICAgICB1bmlvbjogXCJ1bmnDs25cIixcbiAgICAgICAgbGl0ZXJhbDogXCJsaXRlcmFsXCIsXG4gICAgICAgIHByb21pc2U6IFwicHJvbWVzYVwiLFxuICAgICAgICB2b2lkOiBcInZhY8Otb1wiLFxuICAgICAgICBuZXZlcjogXCJudW5jYVwiLFxuICAgICAgICB1bmtub3duOiBcImRlc2Nvbm9jaWRvXCIsXG4gICAgICAgIGFueTogXCJjdWFscXVpZXJhXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHJhZGEgaW52w6FsaWRhOiBzZSBlc3BlcmFiYSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCByZWNpYmlkbyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRW50cmFkYSBpbnbDoWxpZGE6IHNlIGVzcGVyYWJhICR7ZXhwZWN0ZWR9LCByZWNpYmlkbyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHJhZGEgaW52w6FsaWRhOiBzZSBlc3BlcmFiYSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wY2nDs24gaW52w6FsaWRhOiBzZSBlc3BlcmFiYSB1bmEgZGUgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5vcmlnaW5dID8/IGlzc3VlLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYERlbWFzaWFkbyBncmFuZGU6IHNlIGVzcGVyYWJhIHF1ZSAke29yaWdpbiA/PyBcInZhbG9yXCJ9IHR1dmllcmEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50b3NcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgRGVtYXNpYWRvIGdyYW5kZTogc2UgZXNwZXJhYmEgcXVlICR7b3JpZ2luID8/IFwidmFsb3JcIn0gZnVlcmEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2luO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBEZW1hc2lhZG8gcGVxdWXDsW86IHNlIGVzcGVyYWJhIHF1ZSAke29yaWdpbn0gdHV2aWVyYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYERlbWFzaWFkbyBwZXF1ZcOxbzogc2UgZXNwZXJhYmEgcXVlICR7b3JpZ2lufSBmdWVyYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENhZGVuYSBpbnbDoWxpZGE6IGRlYmUgY29tZW56YXIgY29uIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBDYWRlbmEgaW52w6FsaWRhOiBkZWJlIHRlcm1pbmFyIGVuIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENhZGVuYSBpbnbDoWxpZGE6IGRlYmUgaW5jbHVpciBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENhZGVuYSBpbnbDoWxpZGE6IGRlYmUgY29pbmNpZGlyIGNvbiBlbCBwYXRyw7NuICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEludsOhbGlkbyAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOw7ptZXJvIGludsOhbGlkbzogZGViZSBzZXIgbcO6bHRpcGxvIGRlICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBMbGF2ZSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifSBkZXNjb25vY2lkYSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBMbGF2ZSBpbnbDoWxpZGEgZW4gJHtUeXBlRGljdGlvbmFyeVtpc3N1ZS5vcmlnaW5dID8/IGlzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnRyYWRhIGludsOhbGlkYVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmFsb3IgaW52w6FsaWRvIGVuICR7VHlwZURpY3Rpb25hcnlbaXNzdWUub3JpZ2luXSA/PyBpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyYWRhIGludsOhbGlkYWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcItqp2KfYsdin2qnYqtixXCIsIHZlcmI6IFwi2K/Yp9i02KrZhyDYqNin2LTYr1wiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLYqNin24zYqlwiLCB2ZXJiOiBcItiv2KfYtNiq2Ycg2KjYp9i02K9cIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcItii24zYqtmFXCIsIHZlcmI6IFwi2K/Yp9i02KrZhyDYqNin2LTYr1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcItii24zYqtmFXCIsIHZlcmI6IFwi2K/Yp9i02KrZhyDYqNin2LTYr1wiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi2YjYsdmI2K/bjFwiLFxuICAgICAgICBlbWFpbDogXCLYotiv2LHYsyDYp9uM2YXbjNmEXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwi2KfbjNmF2YjYrNuMXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcItiq2KfYsduM2K4g2Ygg2LLZhdin2YYg2KfbjNiy2YhcIixcbiAgICAgICAgZGF0ZTogXCLYqtin2LHbjNiuINin24zYstmIXCIsXG4gICAgICAgIHRpbWU6IFwi2LLZhdin2YYg2KfbjNiy2YhcIixcbiAgICAgICAgZHVyYXRpb246IFwi2YXYr9iqINiy2YXYp9mGINin24zYstmIXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCDYotiv2LHYs1wiLFxuICAgICAgICBpcHY2OiBcIklQdjYg2KLYr9ix2LNcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQg2K/Yp9mF2YbZh1wiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiDYr9in2YXZhtmHXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5jb2RlZCDYsdi02KrZh1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWVuY29kZWQg2LHYtNiq2YdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiDYsdi02KrZh1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0INi52K/Yr1wiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi2YjYsdmI2K/bjFwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIti52K/Yr1wiLFxuICAgICAgICBhcnJheTogXCLYotix2KfbjNmHXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNmI2LHZiNiv24wg2YbYp9mF2LnYqtio2LE6INmF24zigIzYqNin24zYs9iqIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0g2YXbjOKAjNio2YjYr9iMICR7cmVjZWl2ZWR9INiv2LHbjNin2YHYqiDYtNivYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDZiNix2YjYr9uMINmG2KfZhdi52KrYqNixOiDZhduM4oCM2KjYp9uM2LPYqiAke2V4cGVjdGVkfSDZhduM4oCM2KjZiNiv2IwgJHtyZWNlaXZlZH0g2K/YsduM2KfZgdiqINi02K9gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNmI2LHZiNiv24wg2YbYp9mF2LnYqtio2LE6INmF24zigIzYqNin24zYs9iqICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX0g2YXbjOKAjNio2YjYr2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2q/YstuM2YbZhyDZhtin2YXYudiq2KjYsTog2YXbjOKAjNio2KfbjNiz2Kog24zaqduMINin2LIgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9INmF24zigIzYqNmI2K9gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDYrtuM2YTbjCDYqNiy2LHarzogJHtpc3N1ZS5vcmlnaW4gPz8gXCLZhdmC2K/Yp9ixXCJ9INio2KfbjNivICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwi2LnZhti12LFcIn0g2KjYp9i02K9gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNiu24zZhNuMINio2LLYsdqvOiAke2lzc3VlLm9yaWdpbiA/PyBcItmF2YLYr9in2LFcIn0g2KjYp9uM2K8gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9INio2KfYtNivYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDYrtuM2YTbjCDaqdmI2obaqTogJHtpc3N1ZS5vcmlnaW59INio2KfbjNivICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSDYqNin2LTYr2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2K7bjNmE24wg2qnZiNqG2qk6ICR7aXNzdWUub3JpZ2lufSDYqNin24zYryAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0g2KjYp9i02K9gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LHYtNiq2Ycg2YbYp9mF2LnYqtio2LE6INio2KfbjNivINio2KcgXCIke19pc3N1ZS5wcmVmaXh9XCIg2LTYsdmI2Lkg2LTZiNivYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDYsdi02KrZhyDZhtin2YXYudiq2KjYsTog2KjYp9uM2K8g2KjYpyBcIiR7X2lzc3VlLnN1ZmZpeH1cIiDYqtmF2KfZhSDYtNmI2K9gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LHYtNiq2Ycg2YbYp9mF2LnYqtio2LE6INio2KfbjNivINi02KfZhdmEIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIg2KjYp9i02K9gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LHYtNiq2Ycg2YbYp9mF2LnYqtio2LE6INio2KfbjNivINio2Kcg2KfZhNqv2YjbjCAke19pc3N1ZS5wYXR0ZXJufSDZhdi32KfYqNmC2Kog2K/Yp9i02KrZhyDYqNin2LTYr2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH0g2YbYp9mF2LnYqtio2LFgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2LnYr9ivINmG2KfZhdi52KrYqNixOiDYqNin24zYryDZhdi22LHYqCAke2lzc3VlLmRpdmlzb3J9INio2KfYtNivYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2qnZhNuM2K8ke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi2YfYp9uMXCIgOiBcIlwifSDZhtin2LTZhtin2LM6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2qnZhNuM2K8g2YbYp9i02YbYp9izINiv2LEgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDZiNix2YjYr9uMINmG2KfZhdi52KrYqNixYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNmF2YLYr9in2LEg2YbYp9mF2LnYqtio2LEg2K/YsSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNmI2LHZiNiv24wg2YbYp9mF2LnYqtio2LFgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJtZXJra2nDpFwiLCBzdWJqZWN0OiBcIm1lcmtraWpvbm9uXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcInRhdnVhXCIsIHN1YmplY3Q6IFwidGllZG9zdG9uXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJhbGtpb3RhXCIsIHN1YmplY3Q6IFwibGlzdGFuXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiYWxraW90YVwiLCBzdWJqZWN0OiBcImpvdWtvblwiIH0sXG4gICAgICAgIG51bWJlcjogeyB1bml0OiBcIlwiLCBzdWJqZWN0OiBcImx1dnVuXCIgfSxcbiAgICAgICAgYmlnaW50OiB7IHVuaXQ6IFwiXCIsIHN1YmplY3Q6IFwic3V1cmVuIGtva29uYWlzbHV2dW5cIiB9LFxuICAgICAgICBpbnQ6IHsgdW5pdDogXCJcIiwgc3ViamVjdDogXCJrb2tvbmFpc2x1dnVuXCIgfSxcbiAgICAgICAgZGF0ZTogeyB1bml0OiBcIlwiLCBzdWJqZWN0OiBcInDDpGl2w6Rtw6TDpHLDpG5cIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcInPDpMOkbm7DtmxsaW5lbiBsYXVzZWtlXCIsXG4gICAgICAgIGVtYWlsOiBcInPDpGhrw7Zwb3N0aW9zb2l0ZVwiLFxuICAgICAgICB1cmw6IFwiVVJMLW9zb2l0ZVwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08tYWlrYWxlaW1hXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPLXDDpGl2w6Rtw6TDpHLDpFwiLFxuICAgICAgICB0aW1lOiBcIklTTy1haWthXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTy1rZXN0b1wiLFxuICAgICAgICBpcHY0OiBcIklQdjQtb3NvaXRlXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Ni1vc29pdGVcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtYWx1ZVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Ni1hbHVlXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQta29vZGF0dHUgbWVya2tpam9ub1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWtvb2RhdHR1IG1lcmtraWpvbm9cIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTi1tZXJra2lqb25vXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQtbHVrdVwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwidGVtcGxhYXR0aW1lcmtraWpvbm9cIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiB0eXlwcGk6IG9kb3RldHRpaW4gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgb2xpICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBWaXJoZWVsbGluZW4gdHl5cHBpOiBvZG90ZXR0aWluICR7ZXhwZWN0ZWR9LCBvbGkgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBWaXJoZWVsbGluZW4gc3nDtnRlOiB0w6R5dHl5IG9sbGEgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBWaXJoZWVsbGluZW4gdmFsaW50YTogdMOkeXR5eSBvbGxhIHlrc2kgc2V1cmFhdmlzdGE6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYExpaWFuIHN1dXJpOiAke3NpemluZy5zdWJqZWN0fSB0w6R5dHl5IG9sbGEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgTGlpYW4gc3V1cmk6IGFydm9uIHTDpHl0eXkgb2xsYSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYExpaWFuIHBpZW5pOiAke3NpemluZy5zdWJqZWN0fSB0w6R5dHl5IG9sbGEgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgTGlpYW4gcGllbmk6IGFydm9uIHTDpHl0eXkgb2xsYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiBzecO2dGU6IHTDpHl0eXkgYWxrYWEgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiBzecO2dGU6IHTDpHl0eXkgbG9wcHVhIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiBzecO2dGU6IHTDpHl0eXkgc2lzw6RsdMOkw6QgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiBzecO2dGU6IHTDpHl0eXkgdmFzdGF0YSBzw6TDpG5uw7ZsbGlzdMOkIGxhdXNla2V0dGEgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBWaXJoZWVsbGluZW4gbHVrdTogdMOkeXR5eSBvbGxhIGx1dnVuICR7aXNzdWUuZGl2aXNvcn0gbW9uaWtlcnRhYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlR1bnRlbWF0dG9tYXQgYXZhaW1ldFwiIDogXCJUdW50ZW1hdG9uIGF2YWluXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJWaXJoZWVsbGluZW4gYXZhaW4gdGlldHVlZXNzYVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJWaXJoZWVsbGluZW4gdW5pb25pXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVmlyaGVlbGxpbmVuIGFydm8gam91a29zc2FcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBWaXJoZWVsbGluZW4gc3nDtnRlYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwiY2FyYWN0w6hyZXNcIiwgdmVyYjogXCJhdm9pclwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJvY3RldHNcIiwgdmVyYjogXCJhdm9pclwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiw6lsw6ltZW50c1wiLCB2ZXJiOiBcImF2b2lyXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiw6lsw6ltZW50c1wiLCB2ZXJiOiBcImF2b2lyXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJlbnRyw6llXCIsXG4gICAgICAgIGVtYWlsOiBcImFkcmVzc2UgZS1tYWlsXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiZGF0ZSBldCBoZXVyZSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRlIElTT1wiLFxuICAgICAgICB0aW1lOiBcImhldXJlIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJkdXLDqWUgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWRyZXNzZSBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiYWRyZXNzZSBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJwbGFnZSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJwbGFnZSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJjaGHDrm5lIGVuY29kw6llIGVuIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiY2hhw65uZSBlbmNvZMOpZSBlbiBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiY2hhw65uZSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwibnVtw6lybyBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiZW50csOpZVwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIm5vbWJyZVwiLFxuICAgICAgICBhcnJheTogXCJ0YWJsZWF1XCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHLDqWUgaW52YWxpZGUgOiBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9IGF0dGVuZHUsICR7cmVjZWl2ZWR9IHJlw6d1YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyw6llIGludmFsaWRlIDogJHtleHBlY3RlZH0gYXR0ZW5kdSwgJHtyZWNlaXZlZH0gcmXDp3VgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyw6llIGludmFsaWRlIDogJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfSBhdHRlbmR1YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wdGlvbiBpbnZhbGlkZSA6IHVuZSB2YWxldXIgcGFybWkgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9IGF0dGVuZHVlYDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRyb3AgZ3JhbmQgOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbGV1clwifSBkb2l0ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiw6lsw6ltZW50KHMpXCJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFRyb3AgZ3JhbmQgOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbGV1clwifSBkb2l0IMOqdHJlICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvcCBwZXRpdCA6ICR7aXNzdWUub3JpZ2lufSBkb2l0ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgVHJvcCBwZXRpdCA6ICR7aXNzdWUub3JpZ2lufSBkb2l0IMOqdHJlICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgQ2hhw65uZSBpbnZhbGlkZSA6IGRvaXQgY29tbWVuY2VyIHBhciBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgQ2hhw65uZSBpbnZhbGlkZSA6IGRvaXQgc2UgdGVybWluZXIgcGFyIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENoYcOubmUgaW52YWxpZGUgOiBkb2l0IGluY2x1cmUgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBDaGHDrm5lIGludmFsaWRlIDogZG9pdCBjb3JyZXNwb25kcmUgYXUgbW9kw6hsZSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fSBpbnZhbGlkZWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOb21icmUgaW52YWxpZGUgOiBkb2l0IMOqdHJlIHVuIG11bHRpcGxlIGRlICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBDbMOpJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IG5vbiByZWNvbm51ZSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifSA6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQ2zDqSBpbnZhbGlkZSBkYW5zICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIkVudHLDqWUgaW52YWxpZGVcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFZhbGV1ciBpbnZhbGlkZSBkYW5zICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgRW50csOpZSBpbnZhbGlkZWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImNhcmFjdMOocmVzXCIsIHZlcmI6IFwiYXZvaXJcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwib2N0ZXRzXCIsIHZlcmI6IFwiYXZvaXJcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcIsOpbMOpbWVudHNcIiwgdmVyYjogXCJhdm9pclwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIsOpbMOpbWVudHNcIiwgdmVyYjogXCJhdm9pclwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiZW50csOpZVwiLFxuICAgICAgICBlbWFpbDogXCJhZHJlc3NlIGNvdXJyaWVsXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiZGF0ZS1oZXVyZSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRlIElTT1wiLFxuICAgICAgICB0aW1lOiBcImhldXJlIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJkdXLDqWUgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWRyZXNzZSBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiYWRyZXNzZSBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJwbGFnZSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJwbGFnZSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJjaGHDrm5lIGVuY29kw6llIGVuIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiY2hhw65uZSBlbmNvZMOpZSBlbiBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiY2hhw65uZSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwibnVtw6lybyBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiZW50csOpZVwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRW50csOpZSBpbnZhbGlkZSA6IGF0dGVuZHUgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcmXDp3UgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYEVudHLDqWUgaW52YWxpZGUgOiBhdHRlbmR1ICR7ZXhwZWN0ZWR9LCByZcOndSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHLDqWUgaW52YWxpZGUgOiBhdHRlbmR1ICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgT3B0aW9uIGludmFsaWRlIDogYXR0ZW5kdSBsJ3VuZSBkZXMgdmFsZXVycyBzdWl2YW50ZXMgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIuKJpFwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wIGdyYW5kIDogYXR0ZW5kdSBxdWUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJsYSB2YWxldXJcIn0gYWl0ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wIGdyYW5kIDogYXR0ZW5kdSBxdWUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJsYSB2YWxldXJcIn0gc29pdCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCLiiaVcIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wIHBldGl0IDogYXR0ZW5kdSBxdWUgJHtpc3N1ZS5vcmlnaW59IGFpdCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFRyb3AgcGV0aXQgOiBhdHRlbmR1IHF1ZSAke2lzc3VlLm9yaWdpbn0gc29pdCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgQ2hhw65uZSBpbnZhbGlkZSA6IGRvaXQgY29tbWVuY2VyIHBhciBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENoYcOubmUgaW52YWxpZGUgOiBkb2l0IHNlIHRlcm1pbmVyIHBhciBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBDaGHDrm5lIGludmFsaWRlIDogZG9pdCBpbmNsdXJlIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgQ2hhw65uZSBpbnZhbGlkZSA6IGRvaXQgY29ycmVzcG9uZHJlIGF1IG1vdGlmICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IGludmFsaWRlYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5vbWJyZSBpbnZhbGlkZSA6IGRvaXQgw6p0cmUgdW4gbXVsdGlwbGUgZGUgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENsw6kke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0gbm9uIHJlY29ubnVlJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IDogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBDbMOpIGludmFsaWRlIGRhbnMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiRW50csOpZSBpbnZhbGlkZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmFsZXVyIGludmFsaWRlIGRhbnMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyw6llIGludmFsaWRlYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgLy8gSGVicmV3IGxhYmVscyArIGdyYW1tYXRpY2FsIGdlbmRlclxuICAgIGNvbnN0IFR5cGVOYW1lcyA9IHtcbiAgICAgICAgc3RyaW5nOiB7IGxhYmVsOiBcItee15fXqNeV15bXqlwiLCBnZW5kZXI6IFwiZlwiIH0sXG4gICAgICAgIG51bWJlcjogeyBsYWJlbDogXCLXnteh16TXqFwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGJvb2xlYW46IHsgbGFiZWw6IFwi16LXqNeaINeR15XXnNeZ15DXoNeZXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgYmlnaW50OiB7IGxhYmVsOiBcIkJpZ0ludFwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGRhdGU6IHsgbGFiZWw6IFwi16rXkNeo15nXmlwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGFycmF5OiB7IGxhYmVsOiBcItee16LXqNeaXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgb2JqZWN0OiB7IGxhYmVsOiBcIteQ15XXkdeZ15nXp9eYXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgbnVsbDogeyBsYWJlbDogXCLXoteo15og16jXmdenIChudWxsKVwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIHVuZGVmaW5lZDogeyBsYWJlbDogXCLXoteo15og15zXkCDXnteV15LXk9eoICh1bmRlZmluZWQpXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgc3ltYm9sOiB7IGxhYmVsOiBcIteh15nXnteR15XXnCAoU3ltYm9sKVwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGZ1bmN0aW9uOiB7IGxhYmVsOiBcItek15XXoNen16bXmdeUXCIsIGdlbmRlcjogXCJmXCIgfSxcbiAgICAgICAgbWFwOiB7IGxhYmVsOiBcItee16TXlCAoTWFwKVwiLCBnZW5kZXI6IFwiZlwiIH0sXG4gICAgICAgIHNldDogeyBsYWJlbDogXCLXp9eR15XXpteUIChTZXQpXCIsIGdlbmRlcjogXCJmXCIgfSxcbiAgICAgICAgZmlsZTogeyBsYWJlbDogXCLXp9eV15HXpVwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIHByb21pc2U6IHsgbGFiZWw6IFwiUHJvbWlzZVwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIE5hTjogeyBsYWJlbDogXCJOYU5cIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICB1bmtub3duOiB7IGxhYmVsOiBcItei16jXmiDXnNeQINeZ15PXldeiXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgdmFsdWU6IHsgbGFiZWw6IFwi16LXqNeaXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICB9O1xuICAgIC8vIFNpemluZyB1bml0cyBmb3Igc2l6ZS1yZWxhdGVkIG1lc3NhZ2VzICsgbG9jYWxpemVkIG9yaWdpbiBsYWJlbHNcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCLXqteV15XXmdedXCIsIHNob3J0TGFiZWw6IFwi16fXpteoXCIsIGxvbmdMYWJlbDogXCLXkNeo15XXmlwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLXkdeZ15nXmNeZ151cIiwgc2hvcnRMYWJlbDogXCLXp9eY159cIiwgbG9uZ0xhYmVsOiBcIteS15PXldecXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLXpNeo15nXmNeZ151cIiwgc2hvcnRMYWJlbDogXCLXp9eY159cIiwgbG9uZ0xhYmVsOiBcIteS15PXldecXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwi16TXqNeZ15jXmdedXCIsIHNob3J0TGFiZWw6IFwi16fXmNefXCIsIGxvbmdMYWJlbDogXCLXkteT15XXnFwiIH0sXG4gICAgICAgIG51bWJlcjogeyB1bml0OiBcIlwiLCBzaG9ydExhYmVsOiBcIten15jXn1wiLCBsb25nTGFiZWw6IFwi15LXk9eV15xcIiB9LCAvLyBubyB1bml0XG4gICAgfTtcbiAgICAvLyBIZWxwZXJzIOKAlCBsYWJlbHMsIGFydGljbGVzLCBhbmQgdmVyYnNcbiAgICBjb25zdCB0eXBlRW50cnkgPSAodCkgPT4gKHQgPyBUeXBlTmFtZXNbdF0gOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHR5cGVMYWJlbCA9ICh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGUgPSB0eXBlRW50cnkodCk7XG4gICAgICAgIGlmIChlKVxuICAgICAgICAgICAgcmV0dXJuIGUubGFiZWw7XG4gICAgICAgIC8vIGZhbGxiYWNrOiBzaG93IHJhdyBzdHJpbmcgaWYgdW5rbm93blxuICAgICAgICByZXR1cm4gdCA/PyBUeXBlTmFtZXMudW5rbm93bi5sYWJlbDtcbiAgICB9O1xuICAgIGNvbnN0IHdpdGhEZWZpbml0ZSA9ICh0KSA9PiBg15Qke3R5cGVMYWJlbCh0KX1gO1xuICAgIGNvbnN0IHZlcmJGb3IgPSAodCkgPT4ge1xuICAgICAgICBjb25zdCBlID0gdHlwZUVudHJ5KHQpO1xuICAgICAgICBjb25zdCBnZW5kZXIgPSBlPy5nZW5kZXIgPz8gXCJtXCI7XG4gICAgICAgIHJldHVybiBnZW5kZXIgPT09IFwiZlwiID8gXCLXpteo15nXm9eUINec15TXmdeV16pcIiA6IFwi16bXqNeZ15og15zXlNeZ15XXqlwiO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U2l6aW5nID0gKG9yaWdpbikgPT4ge1xuICAgICAgICBpZiAoIW9yaWdpbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogeyBsYWJlbDogXCLXp9ec15hcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICBlbWFpbDogeyBsYWJlbDogXCLXm9eq15XXkdeqINeQ15nXnteZ15nXnFwiLCBnZW5kZXI6IFwiZlwiIH0sXG4gICAgICAgIHVybDogeyBsYWJlbDogXCLXm9eq15XXkdeqINeo16nXqlwiLCBnZW5kZXI6IFwiZlwiIH0sXG4gICAgICAgIGVtb2ppOiB7IGxhYmVsOiBcIteQ15nXnteV15In15lcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICB1dWlkOiB7IGxhYmVsOiBcIlVVSURcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICBuYW5vaWQ6IHsgbGFiZWw6IFwibmFub2lkXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgZ3VpZDogeyBsYWJlbDogXCJHVUlEXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgY3VpZDogeyBsYWJlbDogXCJjdWlkXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgY3VpZDI6IHsgbGFiZWw6IFwiY3VpZDJcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICB1bGlkOiB7IGxhYmVsOiBcIlVMSURcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICB4aWQ6IHsgbGFiZWw6IFwiWElEXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAga3N1aWQ6IHsgbGFiZWw6IFwiS1NVSURcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICBkYXRldGltZTogeyBsYWJlbDogXCLXqteQ16jXmdeaINeV15bXntefIElTT1wiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGRhdGU6IHsgbGFiZWw6IFwi16rXkNeo15nXmiBJU09cIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICB0aW1lOiB7IGxhYmVsOiBcIteW157XnyBJU09cIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICBkdXJhdGlvbjogeyBsYWJlbDogXCLXntep15og15bXntefIElTT1wiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGlwdjQ6IHsgbGFiZWw6IFwi15vXqteV15HXqiBJUHY0XCIsIGdlbmRlcjogXCJmXCIgfSxcbiAgICAgICAgaXB2NjogeyBsYWJlbDogXCLXm9eq15XXkdeqIElQdjZcIiwgZ2VuZGVyOiBcImZcIiB9LFxuICAgICAgICBjaWRydjQ6IHsgbGFiZWw6IFwi15jXldeV15cgSVB2NFwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGNpZHJ2NjogeyBsYWJlbDogXCLXmNeV15XXlyBJUHY2XCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgYmFzZTY0OiB7IGxhYmVsOiBcItee15fXqNeV15bXqiDXkdeR16HXmdehIDY0XCIsIGdlbmRlcjogXCJmXCIgfSxcbiAgICAgICAgYmFzZTY0dXJsOiB7IGxhYmVsOiBcItee15fXqNeV15bXqiDXkdeR16HXmdehIDY0INec15vXqteV15HXldeqINeo16nXqlwiLCBnZW5kZXI6IFwiZlwiIH0sXG4gICAgICAgIGpzb25fc3RyaW5nOiB7IGxhYmVsOiBcItee15fXqNeV15bXqiBKU09OXCIsIGdlbmRlcjogXCJmXCIgfSxcbiAgICAgICAgZTE2NDogeyBsYWJlbDogXCLXnteh16TXqCBFLjE2NFwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIGp3dDogeyBsYWJlbDogXCJKV1RcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgICAgICBlbmRzX3dpdGg6IHsgbGFiZWw6IFwi16fXnNeYXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgaW5jbHVkZXM6IHsgbGFiZWw6IFwi16fXnNeYXCIsIGdlbmRlcjogXCJtXCIgfSxcbiAgICAgICAgbG93ZXJjYXNlOiB7IGxhYmVsOiBcIten15zXmFwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIHN0YXJ0c193aXRoOiB7IGxhYmVsOiBcIten15zXmFwiLCBnZW5kZXI6IFwibVwiIH0sXG4gICAgICAgIHVwcGVyY2FzZTogeyBsYWJlbDogXCLXp9ec15hcIiwgZ2VuZGVyOiBcIm1cIiB9LFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICAvLyBFeHBlY3RlZCB0eXBlOiBzaG93IHdpdGhvdXQgZGVmaW5pdGUgYXJ0aWNsZSBmb3IgY2xlYXJlciBIZWJyZXdcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZEtleSA9IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbZXhwZWN0ZWRLZXkgPz8gXCJcIl0gPz8gdHlwZUxhYmVsKGV4cGVjdGVkS2V5KTtcbiAgICAgICAgICAgICAgICAvLyBSZWNlaXZlZDogc2hvdyBsb2NhbGl6ZWQgbGFiZWwgaWYga25vd24sIG90aGVyd2lzZSBjb25zdHJ1Y3Rvci9yYXdcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyBUeXBlTmFtZXNbcmVjZWl2ZWRUeXBlXT8ubGFiZWwgPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNen15zXmCDXnNeQINeq16fXmdefOiDXpteo15nXmiDXnNeU15nXldeqIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sINeU16rXp9eR15wgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNen15zXmCDXnNeQINeq16fXmdefOiDXpteo15nXmiDXnNeU15nXldeqICR7ZXhwZWN0ZWR9LCDXlNeq16fXkdecICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNei16jXmiDXnNeQINeq16fXmdefOiDXlNei16jXmiDXl9eZ15nXkSDXnNeU15nXldeqICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBKb2luIHZhbHVlcyB3aXRoIHByb3BlciBIZWJyZXcgZm9ybWF0dGluZ1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gaXNzdWUudmFsdWVzLm1hcCgodikgPT4gdXRpbC5zdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg16LXqNeaINec15Ag16rXp9eZ1586INeU15DXpNep16jXldeZ15XXqiDXlNee16rXkNeZ157XldeqINeU158gJHtzdHJpbmdpZmllZFswXX0g15DXlSAke3N0cmluZ2lmaWVkWzFdfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvciAzKyB2YWx1ZXM6IFwiYVwiLCBcImJcIiDXkNeVIFwiY1wiXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gc3RyaW5naWZpZWRbc3RyaW5naWZpZWQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdFZhbHVlcyA9IHN0cmluZ2lmaWVkLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDXoteo15og15zXkCDXqten15nXnzog15TXkNek16nXqNeV15nXldeqINeU157XqteQ15nXnteV16og15TXnyAke3Jlc3RWYWx1ZXN9INeQ15UgJHtsYXN0VmFsdWV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gd2l0aERlZmluaXRlKGlzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5vcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3Igc3RyaW5ncyAtIG1vcmUgbmF0dXJhbCBIZWJyZXdcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZz8ubG9uZ0xhYmVsID8/IFwi15DXqNeV15pcIn0g157Xk9eZOiAke3N1YmplY3R9INem16jXmdeb15Qg15zXlNeb15nXnCAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmc/LnVuaXQgPz8gXCJcIn0gJHtpc3N1ZS5pbmNsdXNpdmUgPyBcIteQ15Ug16TXl9eV16pcIiA6IFwi15zXm9ecINeU15nXldeq16hcIn1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLm9yaWdpbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBOYXR1cmFsIEhlYnJldyBmb3IgbnVtYmVyc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJpc29uID0gaXNzdWUuaW5jbHVzaXZlID8gYNen15jXnyDXkNeVINep15XXldeUINecLSR7aXNzdWUubWF4aW11bX1gIDogYNen15jXnyDXni0ke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDXkteT15XXnCDXnteT15k6ICR7c3ViamVjdH0g16bXqNeZ15og15zXlNeZ15XXqiAke2NvbXBhcmlzb259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLm9yaWdpbiA9PT0gXCJhcnJheVwiIHx8IGlzc3VlLm9yaWdpbiA9PT0gXCJzZXRcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBOYXR1cmFsIEhlYnJldyBmb3IgYXJyYXlzIGFuZCBzZXRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBpc3N1ZS5vcmlnaW4gPT09IFwic2V0XCIgPyBcItem16jXmdeb15RcIiA6IFwi16bXqNeZ15pcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGFyaXNvbiA9IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtpc3N1ZS5tYXhpbXVtfSAke3NpemluZz8udW5pdCA/PyBcIlwifSDXkNeVINek15fXldeqYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBg16TXl9eV16og154tJHtpc3N1ZS5tYXhpbXVtfSAke3NpemluZz8udW5pdCA/PyBcIlwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg15LXk9eV15wg157Xk9eZOiAke3N1YmplY3R9ICR7dmVyYn0g15zXlNeb15nXnCAke2NvbXBhcmlzb259YC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlID0gdmVyYkZvcihpc3N1ZS5vcmlnaW4gPz8gXCJ2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nPy51bml0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtzaXppbmcubG9uZ0xhYmVsfSDXnteT15k6ICR7c3ViamVjdH0gJHtiZX0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZz8ubG9uZ0xhYmVsID8/IFwi15LXk9eV15xcIn0g157Xk9eZOiAke3N1YmplY3R9ICR7YmV9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gd2l0aERlZmluaXRlKGlzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5vcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3Igc3RyaW5ncyAtIG1vcmUgbmF0dXJhbCBIZWJyZXdcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZz8uc2hvcnRMYWJlbCA/PyBcIten16bXqFwifSDXnteT15k6ICR7c3ViamVjdH0g16bXqNeZ15vXlCDXnNeU15vXmdecICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZz8udW5pdCA/PyBcIlwifSAke2lzc3VlLmluY2x1c2l2ZSA/IFwi15DXlSDXmdeV16rXqFwiIDogXCLXnNek15fXldeqXCJ9YC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5vcmlnaW4gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTmF0dXJhbCBIZWJyZXcgZm9yIG51bWJlcnNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGFyaXNvbiA9IGlzc3VlLmluY2x1c2l2ZSA/IGDXkteT15XXnCDXkNeVINep15XXldeUINecLSR7aXNzdWUubWluaW11bX1gIDogYNeS15PXldecINeeLSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNen15jXnyDXnteT15k6ICR7c3ViamVjdH0g16bXqNeZ15og15zXlNeZ15XXqiAke2NvbXBhcmlzb259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLm9yaWdpbiA9PT0gXCJhcnJheVwiIHx8IGlzc3VlLm9yaWdpbiA9PT0gXCJzZXRcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBOYXR1cmFsIEhlYnJldyBmb3IgYXJyYXlzIGFuZCBzZXRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBpc3N1ZS5vcmlnaW4gPT09IFwic2V0XCIgPyBcItem16jXmdeb15RcIiA6IFwi16bXqNeZ15pcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBzaW5ndWxhciAobWluaW11bSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3VlLm1pbmltdW0gPT09IDEgJiYgaXNzdWUuaW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW5ndWxhclBocmFzZSA9IGlzc3VlLm9yaWdpbiA9PT0gXCJzZXRcIiA/IFwi15zXpNeX15XXqiDXpNeo15nXmCDXkNeX15NcIiA6IFwi15zXpNeX15XXqiDXpNeo15nXmCDXkNeX15NcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBg16fXmNefINee15PXmTogJHtzdWJqZWN0fSAke3ZlcmJ9INec15TXm9eZ15wgJHtzaW5ndWxhclBocmFzZX1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb24gPSBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7aXNzdWUubWluaW11bX0gJHtzaXppbmc/LnVuaXQgPz8gXCJcIn0g15DXlSDXmdeV16rXqGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYNeZ15XXqteoINeeLSR7aXNzdWUubWluaW11bX0gJHtzaXppbmc/LnVuaXQgPz8gXCJcIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNen15jXnyDXnteT15k6ICR7c3ViamVjdH0gJHt2ZXJifSDXnNeU15vXmdecICR7Y29tcGFyaXNvbn1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3QgYmUgPSB2ZXJiRm9yKGlzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmc/LnVuaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZy5zaG9ydExhYmVsfSDXnteT15k6ICR7c3ViamVjdH0gJHtiZX0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZz8uc2hvcnRMYWJlbCA/PyBcIten15jXn1wifSDXnteT15k6ICR7c3ViamVjdH0gJHtiZX0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgLy8gVGhlc2UgYXBwbHkgdG8gc3RyaW5ncyDigJQgdXNlIGZlbWluaW5lIGdyYW1tYXIgKyDXlNezINeU15nXk9eZ16LXlFxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg15TXnteX16jXldeW16og15fXmdeZ15HXqiDXnNeU16rXl9eZ15wg15EgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNeU157Xl9eo15XXlteqINeX15nXmdeR16og15zXlNeh16rXmdeZ150g15EgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg15TXnteX16jXldeW16og15fXmdeZ15HXqiDXnNeb15zXldecIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg15TXnteX16jXldeW16og15fXmdeZ15HXqiDXnNeU16rXkNeZ150g15zXqteR16DXmdeqICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZ2VuZGVyIGFncmVlbWVudCBmb3IgZm9ybWF0c1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdW5FbnRyeSA9IEZvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm91biA9IG5vdW5FbnRyeT8ubGFiZWwgPz8gX2lzc3VlLmZvcm1hdDtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW5kZXIgPSBub3VuRW50cnk/LmdlbmRlciA/PyBcIm1cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGplY3RpdmUgPSBnZW5kZXIgPT09IFwiZlwiID8gXCLXqten15nXoNeUXCIgOiBcIteq16fXmdefXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke25vdW59INec15AgJHthZGplY3RpdmV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNee16HXpNeoINec15Ag16rXp9eZ1586INeX15nXmdeRINec15TXmdeV16og157Xm9ek15zXlCDXqdecICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDXntek16rXlyR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLXldeqXCIgOiBcIlwifSDXnNeQINee15bXldeUJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIteZ151cIiA6IFwi15RcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDXqdeT15Qg15zXkCDXqten15nXnyDXkdeQ15XXkdeZ15nXp9eYYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi16fXnNeYINec15Ag16rXp9eZ159cIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlID0gd2l0aERlZmluaXRlKGlzc3VlLm9yaWdpbiA/PyBcImFycmF5XCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBg16LXqNeaINec15Ag16rXp9eZ158g15Eke3BsYWNlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBg16fXnNeYINec15Ag16rXp9eZ159gO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJrYXJha3RlclwiLCB2ZXJiOiBcImxlZ3llblwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJieXRlXCIsIHZlcmI6IFwibGVneWVuXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJlbGVtXCIsIHZlcmI6IFwibGVneWVuXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiZWxlbVwiLCB2ZXJiOiBcImxlZ3llblwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiYmVtZW5ldFwiLFxuICAgICAgICBlbWFpbDogXCJlbWFpbCBjw61tXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIGlkxZFiw6lseWVnXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIGTDoXR1bVwiLFxuICAgICAgICB0aW1lOiBcIklTTyBpZMWRXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBpZMWRaW50ZXJ2YWxsdW1cIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGPDrW1cIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGPDrW1cIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgdGFydG9tw6FueVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiB0YXJ0b23DoW55XCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQta8OzZG9sdCBzdHJpbmdcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1rw7Nkb2x0IHN0cmluZ1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHN0cmluZ1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IHN6w6FtXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJiZW1lbmV0XCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwic3rDoW1cIixcbiAgICAgICAgYXJyYXk6IFwidMO2bWJcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw4lydsOpbnl0ZWxlbiBiZW1lbmV0OiBhIHbDoXJ0IMOpcnTDqWsgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgYSBrYXBvdHQgw6lydMOpayAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgw4lydsOpbnl0ZWxlbiBiZW1lbmV0OiBhIHbDoXJ0IMOpcnTDqWsgJHtleHBlY3RlZH0sIGEga2Fwb3R0IMOpcnTDqWsgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDDiXJ2w6lueXRlbGVuIGJlbWVuZXQ6IGEgdsOhcnQgw6lydMOpayAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYMOJcnbDqW55dGVsZW4gb3BjacOzOiB2YWxhbWVseWlrIMOpcnTDqWsgdsOhcnQgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFTDumwgbmFneTogJHtpc3N1ZS5vcmlnaW4gPz8gXCLDqXJ0w6lrXCJ9IG3DqXJldGUgdMO6bCBuYWd5ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbVwifWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUw7psIG5hZ3k6IGEgYmVtZW5ldGkgw6lydMOpayAke2lzc3VlLm9yaWdpbiA/PyBcIsOpcnTDqWtcIn0gdMO6bCBuYWd5OiAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFTDumwga2ljc2k6IGEgYmVtZW5ldGkgw6lydMOpayAke2lzc3VlLm9yaWdpbn0gbcOpcmV0ZSB0w7psIGtpY3NpICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgVMO6bCBraWNzaTogYSBiZW1lbmV0aSDDqXJ0w6lrICR7aXNzdWUub3JpZ2lufSB0w7psIGtpY3NpICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw4lydsOpbnl0ZWxlbiBzdHJpbmc6IFwiJHtfaXNzdWUucHJlZml4fVwiIMOpcnTDqWtrZWwga2VsbCBrZXpkxZFkbmllYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDDiXJ2w6lueXRlbGVuIHN0cmluZzogXCIke19pc3N1ZS5zdWZmaXh9XCIgw6lydMOpa2tlbCBrZWxsIHbDqWd6xZFkbmllYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYMOJcnbDqW55dGVsZW4gc3RyaW5nOiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiIMOpcnTDqWtldCBrZWxsIHRhcnRhbG1hem5pYWA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDDiXJ2w6lueXRlbGVuIHN0cmluZzogJHtfaXNzdWUucGF0dGVybn0gbWludMOhbmFrIGtlbGwgbWVnZmVsZWxuaWVgO1xuICAgICAgICAgICAgICAgIHJldHVybiBgw4lydsOpbnl0ZWxlbiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDDiXJ2w6lueXRlbGVuIHN6w6FtOiAke2lzc3VlLmRpdmlzb3J9IHTDtmJic3rDtnLDtnPDqW5layBrZWxsIGxlbm5pZWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYElzbWVyZXRsZW4ga3VsY3Mke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgw4lydsOpbnl0ZWxlbiBrdWxjcyAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLDiXJ2w6lueXRlbGVuIGJlbWVuZXRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYMOJcnbDqW55dGVsZW4gw6lydMOpazogJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDDiXJ2w6lueXRlbGVuIGJlbWVuZXRgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5mdW5jdGlvbiBnZXRBcm1lbmlhblBsdXJhbChjb3VudCwgb25lLCBtYW55KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKGNvdW50KSA9PT0gMSA/IG9uZSA6IG1hbnk7XG59XG5mdW5jdGlvbiB3aXRoRGVmaW5pdGVBcnRpY2xlKHdvcmQpIHtcbiAgICBpZiAoIXdvcmQpXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZvd2VscyA9IFtcItWhXCIsIFwi1aVcIiwgXCLVqFwiLCBcItWrXCIsIFwi1bhcIiwgXCLVuNaCXCIsIFwi1oVcIl07XG4gICAgY29uc3QgbGFzdENoYXIgPSB3b3JkW3dvcmQubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHdvcmQgKyAodm93ZWxzLmluY2x1ZGVzKGxhc3RDaGFyKSA/IFwi1bZcIiA6IFwi1ahcIik7XG59XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwi1bbVt9Wh1bZcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcItW21bfVodW21bbVpdaAXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCLVuNaC1bbVpdW21aHVrFwiLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcItWi1aHVtdWpXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLVotWh1bXVqdWl1oBcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcItW41oLVttWl1bbVodWsXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcItW/1aHWgNaAXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLVv9Wh1oDWgNWl1oBcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcItW41oLVttWl1bbVodWsXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCLVv9Wh1oDWgFwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwi1b/VodaA1oDVpdaAXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCLVuNaC1bbVpdW21aHVrFwiLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcItW01bjWgtW/1oRcIixcbiAgICAgICAgZW1haWw6IFwi1afVrC4g1bDVodW91oHVpVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcItWn1bTVuNW71atcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPINWh1bTVvdWh1anVq9W+INaHINWq1aHVtFwiLFxuICAgICAgICBkYXRlOiBcIklTTyDVodW01b3VodWp1avVvlwiLFxuICAgICAgICB0aW1lOiBcIklTTyDVqtWh1bRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPINW/1ofVuNWy1bjWgtWp1bXVuNaC1bZcIixcbiAgICAgICAgaXB2NDogXCJJUHY0INWw1aHVvdaB1aVcIixcbiAgICAgICAgaXB2NjogXCJJUHY2INWw1aHVvdaB1aVcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQg1bTVq9W71aHVr9Wh1bXWhFwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiDVtNWr1bvVodWv1aHVtdaEXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQg1bHWh9Wh1bnVodaD1bjVviDVv9W41bJcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybCDVsdaH1aHVudWh1oPVuNW+INW/1bjVslwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OINW/1bjVslwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0INWw1aHVtNWh1oBcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItW01bjWgtW/1oRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCLVqdWr1b5cIixcbiAgICAgICAgYXJyYXk6IFwi1abVodW21aPVvtWh1a5cIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg1Y3VrdWh1awg1bTVuNaC1b/WhNWh1aPWgNW41oLVtOKApCDVvdW61aHVvdW+1bjWgtW0INWn1oAgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwg1b3Vv9Wh1oHVvtWl1awg1acgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNWN1a3VodWsINW01bjWgtW/1oTVodWj1oDVuNaC1bTigKQg1b3VutWh1b3VvtW41oLVtCDVp9aAICR7ZXhwZWN0ZWR9LCDVvdW/1aHWgdW+1aXVrCDVpyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNWN1a3VodWsINW01bjWgtW/1oTVodWj1oDVuNaC1bTigKQg1b3VutWh1b3VvtW41oLVtCDVp9aAICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzFdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg1Y3VrdWh1awg1b/VodaA1aLVpdaA1aHVr+KApCDVvdW61aHVvdW+1bjWgtW0INWn1oAg1bDVpdW/1ofVtdWh1azVttWl1oDVq9aBINW01aXVr9Wo1Z0gJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTnVtYmVyKGlzc3VlLm1heGltdW0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gZ2V0QXJtZW5pYW5QbHVyYWwobWF4VmFsdWUsIHNpemluZy51bml0Lm9uZSwgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg1YnVodaD1aHVptWh1bbWgSDVtNWl1a4g1aHWgNWq1aXWhOKApCDVvdW61aHVvdW+1bjWgtW0INWnLCDVuNaAICR7d2l0aERlZmluaXRlQXJ0aWNsZShpc3N1ZS5vcmlnaW4gPz8gXCLVodaA1arVpdaEXCIpfSDVr9W41oLVttWl1bbVoSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHt1bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg1YnVodaD1aHVptWh1bbWgSDVtNWl1a4g1aHWgNWq1aXWhOKApCDVvdW61aHVvdW+1bjWgtW0INWnLCDVuNaAICR7d2l0aERlZmluaXRlQXJ0aWNsZShpc3N1ZS5vcmlnaW4gPz8gXCLVodaA1arVpdaEXCIpfSDVrNWr1bbVqyAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IE51bWJlcihpc3N1ZS5taW5pbXVtKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pdCA9IGdldEFybWVuaWFuUGx1cmFsKG1pblZhbHVlLCBzaXppbmcudW5pdC5vbmUsIHNpemluZy51bml0Lm1hbnkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNWJ1aHWg9Wh1abVodW21oEg1oPVuNaE1oAg1aHWgNWq1aXWhOKApCDVvdW61aHVvdW+1bjWgtW0INWnLCDVuNaAICR7d2l0aERlZmluaXRlQXJ0aWNsZShpc3N1ZS5vcmlnaW4pfSDVr9W41oLVttWl1bbVoSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHt1bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg1YnVodaD1aHVptWh1bbWgSDWg9W41oTWgCDVodaA1arVpdaE4oCkINW91brVodW91b7VuNaC1bQg1acsINW41oAgJHt3aXRoRGVmaW5pdGVBcnRpY2xlKGlzc3VlLm9yaWdpbil9INWs1avVttWrICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg1Y3VrdWh1awg1b/VuNWy4oCkINW61aXVv9aEINWnINW91a/VvdW+1asgXCIke19pc3N1ZS5wcmVmaXh9XCIt1bjVvmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg1Y3VrdWh1awg1b/VuNWy4oCkINW61aXVv9aEINWnINWh1b7VodaA1b/VvtWrIFwiJHtfaXNzdWUuc3VmZml4fVwiLdW41b5gO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg1Y3VrdWh1awg1b/VuNWy4oCkINW61aXVv9aEINWnINW61aHWgNW41oLVttWh1a/VqyBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNWN1a3VodWsINW/1bjVsuKApCDVutWl1b/WhCDVpyDVsNWh1bTVodW61aHVv9Wh1b3VrdWh1bbVqyAke19pc3N1ZS5wYXR0ZXJufSDVsdaH1aHVudWh1oPVq9W2YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYNWN1a3VodWsICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNWN1a3VodWsINWp1avVvuKApCDVutWl1b/WhCDVpyDVotWh1abVtNWh1brVodW/1avVryDVrNWr1bbVqyAke2lzc3VlLmRpdmlzb3J9LdWrYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg1YnVs9Wh1bbVodW51b7VodWuINWi1aHVttWh1azVqyR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLVttWl1oBcIiA6IFwiXCJ9LiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNWN1a3VodWsINWi1aHVttWh1azVqyAke3dpdGhEZWZpbml0ZUFydGljbGUoaXNzdWUub3JpZ2luKX0t1bjWgtW0YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi1Y3VrdWh1awg1bTVuNaC1b/WhNWh1aPWgNW41oLVtFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg1Y3VrdWh1awg1aHWgNWq1aXWhCAke3dpdGhEZWZpbml0ZUFydGljbGUoaXNzdWUub3JpZ2luKX0t1bjWgtW0YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDVjdWt1aHVrCDVtNW41oLVv9aE1aHVo9aA1bjWgtW0YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwia2FyYWt0ZXJcIiwgdmVyYjogXCJtZW1pbGlraVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJieXRlXCIsIHZlcmI6IFwibWVtaWxpa2lcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcIml0ZW1cIiwgdmVyYjogXCJtZW1pbGlraVwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIml0ZW1cIiwgdmVyYjogXCJtZW1pbGlraVwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiaW5wdXRcIixcbiAgICAgICAgZW1haWw6IFwiYWxhbWF0IGVtYWlsXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwidGFuZ2dhbCBkYW4gd2FrdHUgZm9ybWF0IElTT1wiLFxuICAgICAgICBkYXRlOiBcInRhbmdnYWwgZm9ybWF0IElTT1wiLFxuICAgICAgICB0aW1lOiBcImphbSBmb3JtYXQgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmFzaSBmb3JtYXQgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWxhbWF0IElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhbGFtYXQgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwicmVudGFuZyBhbGFtYXQgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwicmVudGFuZyBhbGFtYXQgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwic3RyaW5nIGRlbmdhbiBlbmtvZGUgYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJzdHJpbmcgZGVuZ2FuIGVua29kZSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwic3RyaW5nIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJhbmdrYSBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYElucHV0IHRpZGFrIHZhbGlkOiBkaWhhcmFwa2FuIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIGRpdGVyaW1hICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayB2YWxpZDogZGloYXJhcGthbiAke2V4cGVjdGVkfSwgZGl0ZXJpbWEgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayB2YWxpZDogZGloYXJhcGthbiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFBpbGloYW4gdGlkYWsgdmFsaWQ6IGRpaGFyYXBrYW4gc2FsYWggc2F0dSBkYXJpICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZXJsYWx1IGJlc2FyOiBkaWhhcmFwa2FuICR7aXNzdWUub3JpZ2luID8/IFwidmFsdWVcIn0gbWVtaWxpa2kgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW5cIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVGVybGFsdSBiZXNhcjogZGloYXJhcGthbiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9IG1lbmphZGkgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZXJsYWx1IGtlY2lsOiBkaWhhcmFwa2FuICR7aXNzdWUub3JpZ2lufSBtZW1pbGlraSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFRlcmxhbHUga2VjaWw6IGRpaGFyYXBrYW4gJHtpc3N1ZS5vcmlnaW59IG1lbmphZGkgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBTdHJpbmcgdGlkYWsgdmFsaWQ6IGhhcnVzIGRpbXVsYWkgZGVuZ2FuIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBTdHJpbmcgdGlkYWsgdmFsaWQ6IGhhcnVzIGJlcmFraGlyIGRlbmdhbiBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBTdHJpbmcgdGlkYWsgdmFsaWQ6IGhhcnVzIG1lbnllcnRha2FuIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgU3RyaW5nIHRpZGFrIHZhbGlkOiBoYXJ1cyBzZXN1YWkgcG9sYSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fSB0aWRhayB2YWxpZGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBbmdrYSB0aWRhayB2YWxpZDogaGFydXMga2VsaXBhdGFuIGRhcmkgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEt1bmNpIHRpZGFrIGRpa2VuYWxpICR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBLdW5jaSB0aWRhayB2YWxpZCBkaSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbnB1dCB0aWRhayB2YWxpZFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmlsYWkgdGlkYWsgdmFsaWQgZGkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayB2YWxpZGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcInN0YWZpXCIsIHZlcmI6IFwiYcOwIGhhZmFcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwiYsOmdGlcIiwgdmVyYjogXCJhw7AgaGFmYVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiaGx1dGlcIiwgdmVyYjogXCJhw7AgaGFmYVwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImhsdXRpXCIsIHZlcmI6IFwiYcOwIGhhZmFcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImdpbGRpXCIsXG4gICAgICAgIGVtYWlsOiBcIm5ldGZhbmdcIixcbiAgICAgICAgdXJsOiBcInZlZnNsw7PDsFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGFnc2V0bmluZyBvZyB0w61taVwiLFxuICAgICAgICBkYXRlOiBcIklTTyBkYWdzZXRuaW5nXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHTDrW1pXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyB0w61tYWxlbmdkXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBhZGRyZXNzXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBhZGRyZXNzXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IHJhbmdlXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IHJhbmdlXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5jb2RlZCBzdHJlbmd1clwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWVuY29kZWQgc3RyZW5ndXJcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBzdHJlbmd1clwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IHTDtmx1Z2lsZGlcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImdpbGRpXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibsO6bWVyXCIsXG4gICAgICAgIGFycmF5OiBcImZ5bGtpXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJhbmd0IGdpbGRpOiDDnsO6IHNsw7NzdCBpbm4gJHtyZWNlaXZlZH0gw75hciBzZW0gw6EgYcOwIHZlcmEgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgUmFuZ3QgZ2lsZGk6IMOew7ogc2zDs3N0IGlubiAke3JlY2VpdmVkfSDDvmFyIHNlbSDDoSBhw7AgdmVyYSAke2V4cGVjdGVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJhbmd0IGdpbGRpOiBnZXJ0IHLDocOwIGZ5cmlyICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgw5NnaWx0IHZhbDogbcOhIHZlcmEgZWl0dCBhZiBlZnRpcmZhcmFuZGkgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9mIHN0w7NydDogZ2VydCBlciByw6HDsCBmeXJpciBhw7AgJHtpc3N1ZS5vcmlnaW4gPz8gXCJnaWxkaVwifSBoYWZpICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiaGx1dGlcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgT2Ygc3TDs3J0OiBnZXJ0IGVyIHLDocOwIGZ5cmlyIGHDsCAke2lzc3VlLm9yaWdpbiA/PyBcImdpbGRpXCJ9IHPDqSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9mIGzDrXRpw7A6IGdlcnQgZXIgcsOhw7AgZnlyaXIgYcOwICR7aXNzdWUub3JpZ2lufSBoYWZpICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgT2YgbMOtdGnDsDogZ2VydCBlciByw6HDsCBmeXJpciBhw7AgJHtpc3N1ZS5vcmlnaW59IHPDqSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw5NnaWxkdXIgc3RyZW5ndXI6IHZlcsOwdXIgYcOwIGJ5cmphIMOhIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw5NnaWxkdXIgc3RyZW5ndXI6IHZlcsOwdXIgYcOwIGVuZGEgw6EgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw5NnaWxkdXIgc3RyZW5ndXI6IHZlcsOwdXIgYcOwIGlubmloYWxkYSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYMOTZ2lsZHVyIHN0cmVuZ3VyOiB2ZXLDsHVyIGHDsCBmeWxnamEgbXluc3RyaSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBSYW5ndCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBSw7ZuZyB0YWxhOiB2ZXLDsHVyIGHDsCB2ZXJhIG1hcmdmZWxkaSBhZiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgw5PDvmVra3QgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImlyIGx5a2xhclwiIDogXCJ1ciBseWtpbGxcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgUmFuZ3VyIGx5a2lsbCDDrSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSYW5ndCBnaWxkaVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgUmFuZ3QgZ2lsZGkgw60gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBSYW5ndCBnaWxkaWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImNhcmF0dGVyaVwiLCB2ZXJiOiBcImF2ZXJlXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJ5dGVcIiwgdmVyYjogXCJhdmVyZVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiZWxlbWVudGlcIiwgdmVyYjogXCJhdmVyZVwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImVsZW1lbnRpXCIsIHZlcmI6IFwiYXZlcmVcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImluZGlyaXp6byBlbWFpbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcImRhdGEgZSBvcmEgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiZGF0YSBJU09cIixcbiAgICAgICAgdGltZTogXCJvcmEgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmF0YSBJU09cIixcbiAgICAgICAgaXB2NDogXCJpbmRpcml6em8gSVB2NFwiLFxuICAgICAgICBpcHY2OiBcImluZGlyaXp6byBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJpbnRlcnZhbGxvIElQdjRcIixcbiAgICAgICAgY2lkcnY2OiBcImludGVydmFsbG8gSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwic3RyaW5nYSBjb2RpZmljYXRhIGluIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiVVJMIGNvZGlmaWNhdGEgaW4gYmFzZTY0XCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcInN0cmluZ2EgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIm51bWVybyBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJudW1lcm9cIixcbiAgICAgICAgYXJyYXk6IFwidmV0dG9yZVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCBub24gdmFsaWRvOiBhdHRlc28gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcmljZXZ1dG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYElucHV0IG5vbiB2YWxpZG86IGF0dGVzbyAke2V4cGVjdGVkfSwgcmljZXZ1dG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCBub24gdmFsaWRvOiBhdHRlc28gJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPcHppb25lIG5vbiB2YWxpZGE6IGF0dGVzbyB1bm8gdHJhICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wcG8gZ3JhbmRlOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbG9yZVwifSBkZXZlIGF2ZXJlICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudGlcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVHJvcHBvIGdyYW5kZTogJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWxvcmVcIn0gZGV2ZSBlc3NlcmUgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wcG8gcGljY29sbzogJHtpc3N1ZS5vcmlnaW59IGRldmUgYXZlcmUgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wcG8gcGljY29sbzogJHtpc3N1ZS5vcmlnaW59IGRldmUgZXNzZXJlICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgU3RyaW5nYSBub24gdmFsaWRhOiBkZXZlIGluaXppYXJlIGNvbiBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgU3RyaW5nYSBub24gdmFsaWRhOiBkZXZlIHRlcm1pbmFyZSBjb24gXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgU3RyaW5nYSBub24gdmFsaWRhOiBkZXZlIGluY2x1ZGVyZSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFN0cmluZ2Egbm9uIHZhbGlkYTogZGV2ZSBjb3JyaXNwb25kZXJlIGFsIHBhdHRlcm4gJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOdW1lcm8gbm9uIHZhbGlkbzogZGV2ZSBlc3NlcmUgdW4gbXVsdGlwbG8gZGkgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENoaWF2JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImlcIiA6IFwiZVwifSBub24gcmljb25vc2NpdXQke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiZVwiIDogXCJhXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENoaWF2ZSBub24gdmFsaWRhIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIklucHV0IG5vbiB2YWxpZG9cIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFZhbG9yZSBub24gdmFsaWRvIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgSW5wdXQgbm9uIHZhbGlkb2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcIuaWh+Wtl1wiLCB2ZXJiOiBcIuOBp+OBguOCi1wiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLjg5DjgqTjg4hcIiwgdmVyYjogXCLjgafjgYLjgotcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcIuimgee0oFwiLCB2ZXJiOiBcIuOBp+OBguOCi1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIuimgee0oFwiLCB2ZXJiOiBcIuOBp+OBguOCi1wiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi5YWl5Yqb5YCkXCIsXG4gICAgICAgIGVtYWlsOiBcIuODoeODvOODq+OCouODieODrOOCuVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcIue1teaWh+Wtl1wiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU0/ml6XmmYJcIixcbiAgICAgICAgZGF0ZTogXCJJU0/ml6Xku5hcIixcbiAgICAgICAgdGltZTogXCJJU0/mmYLliLtcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNP5pyf6ZaTXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NOOCouODieODrOOCuVwiLFxuICAgICAgICBpcHY2OiBcIklQdjbjgqLjg4njg6zjgrlcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjTnr4Tlm7JcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjbnr4Tlm7JcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NOOCqOODs+OCs+ODvOODieaWh+Wtl+WIl1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJs44Ko44Oz44Kz44O844OJ5paH5a2X5YiXXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT07mloflrZfliJdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NOeVquWPt1wiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi5YWl5Yqb5YCkXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwi5pWw5YCkXCIsXG4gICAgICAgIGFycmF5OiBcIumFjeWIl1wiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDnhKHlirnjgarlhaXlips6IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH3jgYzmnJ/lvoXjgZXjgozjgb7jgZfjgZ/jgYzjgIEke3JlY2VpdmVkfeOBjOWFpeWKm+OBleOCjOOBvuOBl+OBn2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5Yq544Gq5YWl5YqbOiAke2V4cGVjdGVkfeOBjOacn+W+heOBleOCjOOBvuOBl+OBn+OBjOOAgSR7cmVjZWl2ZWR944GM5YWl5Yqb44GV44KM44G+44GX44GfYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5Yq544Gq5YWl5YqbOiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl944GM5pyf5b6F44GV44KM44G+44GX44GfYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOeEoeWKueOBqumBuOaKnjogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcIuOAgVwiKX3jga7jgYTjgZrjgozjgYvjgafjgYLjgovlv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwi5Lul5LiL44Gn44GC44KLXCIgOiBcIuOCiOOCiuWwj+OBleOBhFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg5aSn44GN44GZ44GO44KL5YCkOiAke2lzc3VlLm9yaWdpbiA/PyBcIuWApFwifeOBryR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSR7c2l6aW5nLnVuaXQgPz8gXCLopoHntKBcIn0ke2Fkan3lv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgICAgIHJldHVybiBg5aSn44GN44GZ44GO44KL5YCkOiAke2lzc3VlLm9yaWdpbiA/PyBcIuWApFwifeOBryR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSR7YWRqfeW/heimgeOBjOOBguOCiuOBvuOBmWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIuS7peS4iuOBp+OBguOCi1wiIDogXCLjgojjgorlpKfjgY3jgYRcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOWwj+OBleOBmeOBjuOCi+WApDogJHtpc3N1ZS5vcmlnaW5944GvJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9JHtzaXppbmcudW5pdH0ke2Fkan3lv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgICAgIHJldHVybiBg5bCP44GV44GZ44GO44KL5YCkOiAke2lzc3VlLm9yaWdpbn3jga8ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0ke2Fkan3lv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOeEoeWKueOBquaWh+Wtl+WIlzogXCIke19pc3N1ZS5wcmVmaXh9XCLjgaflp4vjgb7jgovlv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOeEoeWKueOBquaWh+Wtl+WIlzogXCIke19pc3N1ZS5zdWZmaXh9XCLjgafntYLjgo/jgovlv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5Yq544Gq5paH5a2X5YiXOiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwi44KS5ZCr44KA5b+F6KaB44GM44GC44KK44G+44GZYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOeEoeWKueOBquaWh+Wtl+WIlzog44OR44K/44O844OzJHtfaXNzdWUucGF0dGVybn3jgavkuIDoh7TjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZlgO1xuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5Yq544GqJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5Yq544Gq5pWw5YCkOiAke2lzc3VlLmRpdmlzb3J944Gu5YCN5pWw44Gn44GC44KL5b+F6KaB44GM44GC44KK44G+44GZYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg6KqN6K2Y44GV44KM44Gm44GE44Gq44GE44Kt44O8JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIue+pFwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwi44CBXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufeWGheOBrueEoeWKueOBquOCreODvGA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIueEoeWKueOBquWFpeWKm1wiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW595YaF44Gu54Sh5Yq544Gq5YCkYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDnhKHlirnjgarlhaXliptgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCLhg6Hhg5jhg5vhg5Hhg53hg5rhg51cIiwgdmVyYjogXCLhg6Phg5zhg5Phg5Ag4YOo4YOU4YOY4YOq4YOQ4YOV4YOT4YOU4YOhXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcIuGDkeGDkOGDmOGDouGDmFwiLCB2ZXJiOiBcIuGDo+GDnOGDk+GDkCDhg6jhg5Thg5jhg6rhg5Dhg5Xhg5Phg5Thg6FcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcIuGDlOGDmuGDlOGDm+GDlOGDnOGDouGDmFwiLCB2ZXJiOiBcIuGDo+GDnOGDk+GDkCDhg6jhg5Thg5jhg6rhg5Dhg5Xhg5Phg5Thg6FcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCLhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5hcIiwgdmVyYjogXCLhg6Phg5zhg5Phg5Ag4YOo4YOU4YOY4YOq4YOQ4YOV4YOT4YOU4YOhXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCLhg6jhg5Thg6fhg5Xhg5Dhg5zhg5BcIixcbiAgICAgICAgZW1haWw6IFwi4YOU4YOaLeGDpOGDneGDoeGDouGDmOGDoSDhg5vhg5jhg6Hhg5Dhg5vhg5Dhg6Dhg5fhg5hcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCLhg5Thg5vhg53hg6/hg5hcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwi4YOX4YOQ4YOg4YOY4YOm4YOYLeGDk+GDoOGDnVwiLFxuICAgICAgICBkYXRlOiBcIuGDl+GDkOGDoOGDmOGDpuGDmFwiLFxuICAgICAgICB0aW1lOiBcIuGDk+GDoOGDnVwiLFxuICAgICAgICBkdXJhdGlvbjogXCLhg67hg5Dhg5zhg5Lhg6Dhg6vhg5rhg5jhg5Xhg53hg5Hhg5BcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IOGDm+GDmOGDoeGDkOGDm+GDkOGDoOGDl+GDmFwiLFxuICAgICAgICBpcHY2OiBcIklQdjYg4YOb4YOY4YOh4YOQ4YOb4YOQ4YOg4YOX4YOYXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IOGDk+GDmOGDkOGDnuGDkOGDluGDneGDnOGDmFwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiDhg5Phg5jhg5Dhg57hg5Dhg5bhg53hg5zhg5hcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC3hg5nhg53hg5Phg5jhg6Dhg5Thg5Hhg6Phg5rhg5gg4YOh4YOi4YOg4YOY4YOc4YOS4YOYXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwt4YOZ4YOd4YOT4YOY4YOg4YOU4YOR4YOj4YOa4YOYIOGDoeGDouGDoOGDmOGDnOGDkuGDmFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIOGDoeGDouGDoOGDmOGDnOGDkuGDmFwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IOGDnOGDneGDm+GDlOGDoOGDmFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi4YOo4YOU4YOn4YOV4YOQ4YOc4YOQXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwi4YOg4YOY4YOq4YOu4YOV4YOYXCIsXG4gICAgICAgIHN0cmluZzogXCLhg6Hhg6Lhg6Dhg5jhg5zhg5Lhg5hcIixcbiAgICAgICAgYm9vbGVhbjogXCLhg5Hhg6Phg5rhg5Thg5Dhg5zhg5hcIixcbiAgICAgICAgZnVuY3Rpb246IFwi4YOk4YOj4YOc4YOl4YOq4YOY4YOQXCIsXG4gICAgICAgIGFycmF5OiBcIuGDm+GDkOGDoeGDmOGDleGDmFwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5gg4YOo4YOU4YOn4YOV4YOQ4YOc4YOQOiDhg5vhg53hg6Hhg5Dhg5rhg53hg5Phg5zhg5Thg5rhg5ggaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwg4YOb4YOY4YOm4YOU4YOR4YOj4YOa4YOYICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5gg4YOo4YOU4YOn4YOV4YOQ4YOc4YOQOiDhg5vhg53hg6Hhg5Dhg5rhg53hg5Phg5zhg5Thg5rhg5ggJHtleHBlY3RlZH0sIOGDm+GDmOGDpuGDlOGDkeGDo+GDmuGDmCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg6jhg5Thg6fhg5Xhg5Dhg5zhg5A6IOGDm+GDneGDoeGDkOGDmuGDneGDk+GDnOGDlOGDmuGDmCAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg5Xhg5Dhg6Dhg5jhg5Dhg5zhg6Lhg5g6IOGDm+GDneGDoeGDkOGDmuGDneGDk+GDnOGDlOGDmuGDmOGDkCDhg5Thg6Dhg5ct4YOU4YOg4YOX4YOYICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfS3hg5Phg5Dhg5xgO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4YOW4YOU4YOT4YOb4YOU4YOi4YOQ4YOTIOGDk+GDmOGDk+GDmDog4YOb4YOd4YOh4YOQ4YOa4YOd4YOT4YOc4YOU4YOa4YOYICR7aXNzdWUub3JpZ2luID8/IFwi4YOb4YOc4YOY4YOo4YOV4YOc4YOU4YOa4YOd4YOR4YOQXCJ9ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhg5bhg5Thg5Phg5vhg5Thg6Lhg5Dhg5Mg4YOT4YOY4YOT4YOYOiDhg5vhg53hg6Hhg5Dhg5rhg53hg5Phg5zhg5Thg5rhg5ggJHtpc3N1ZS5vcmlnaW4gPz8gXCLhg5vhg5zhg5jhg6jhg5Xhg5zhg5Thg5rhg53hg5Hhg5BcIn0g4YOY4YOn4YOd4YOhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4YOW4YOU4YOT4YOb4YOU4YOi4YOQ4YOTIOGDnuGDkOGDouGDkOGDoOGDkDog4YOb4YOd4YOh4YOQ4YOa4YOd4YOT4YOc4YOU4YOa4YOYICR7aXNzdWUub3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYOGDluGDlOGDk+GDm+GDlOGDouGDkOGDkyDhg57hg5Dhg6Lhg5Dhg6Dhg5A6IOGDm+GDneGDoeGDkOGDmuGDneGDk+GDnOGDlOGDmuGDmCAke2lzc3VlLm9yaWdpbn0g4YOY4YOn4YOd4YOhICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5gg4YOh4YOi4YOg4YOY4YOc4YOS4YOYOiDhg6Phg5zhg5Phg5Ag4YOY4YOs4YOn4YOU4YOR4YOd4YOT4YOU4YOhIFwiJHtfaXNzdWUucHJlZml4fVwiLeGDmOGDl2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg6Hhg6Lhg6Dhg5jhg5zhg5Lhg5g6IOGDo+GDnOGDk+GDkCDhg5vhg5fhg5Dhg5Xhg6Dhg5Phg5Thg5Hhg53hg5Phg5Thg6EgXCIke19pc3N1ZS5zdWZmaXh9XCIt4YOY4YOXYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg6Hhg6Lhg6Dhg5jhg5zhg5Lhg5g6IOGDo+GDnOGDk+GDkCDhg6jhg5Thg5jhg6rhg5Dhg5Xhg5Phg5Thg6EgXCIke19pc3N1ZS5pbmNsdWRlc31cIi3hg6FgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIOGDoeGDouGDoOGDmOGDnOGDkuGDmDog4YOj4YOc4YOT4YOQIOGDqOGDlOGDlOGDoeGDkOGDkeGDkOGDm+GDlOGDkeGDneGDk+GDlOGDoSDhg6jhg5Dhg5Hhg5rhg53hg5zhg6EgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg6Dhg5jhg6rhg67hg5Xhg5g6IOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6EgJHtpc3N1ZS5kaXZpc29yfS3hg5jhg6Eg4YOv4YOU4YOg4YOQ4YOT4YOYYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg4YOj4YOq4YOc4YOd4YOR4YOYIOGDkuGDkOGDoeGDkOGDpuGDlOGDkSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLhg5Thg5Hhg5hcIiA6IFwi4YOYXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg5Lhg5Dhg6Hhg5Dhg6bhg5Thg5Hhg5ggJHtpc3N1ZS5vcmlnaW59LeGDqOGDmGA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIuGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg6jhg5Thg6fhg5Xhg5Dhg5zhg5BcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDmCDhg5vhg5zhg5jhg6jhg5Xhg5zhg5Thg5rhg53hg5Hhg5AgJHtpc3N1ZS5vcmlnaW59LeGDqOGDmGA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOYIOGDqOGDlOGDp+GDleGDkOGDnOGDkGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcIuGej+GeveGeouGegOGfkuGen+GemlwiLCB2ZXJiOiBcIuGeguGeveGemuGemOGetuGek1wiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLhnpThn4NcIiwgdmVyYjogXCLhnoLhnr3hnprhnpjhnrbhnpNcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcIuGekuGetuGej+Geu1wiLCB2ZXJiOiBcIuGeguGeveGemuGemOGetuGek1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIuGekuGetuGej+Geu1wiLCB2ZXJiOiBcIuGeguGeveGemuGemOGetuGek1wiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6U4Z6J4Z+S4Z6F4Z684Z6bXCIsXG4gICAgICAgIGVtYWlsOiBcIuGeouGetuGen+GemeGeiuGfkuGei+GetuGek+GeouGfiuGeuOGemOGfguGem1wiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcIuGen+GeieGfkuGeieGetuGeouGetuGemuGemOGfkuGemOGejuGfjVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCLhnoDhnrbhnpvhnpThnprhnrfhnoXhn5Lhnobhn4HhnpEg4Z6T4Z634Z6E4Z6Y4Z+J4Z+E4Z6EIElTT1wiLFxuICAgICAgICBkYXRlOiBcIuGegOGetuGem+GelOGemuGet+GeheGfkuGehuGfgeGekSBJU09cIixcbiAgICAgICAgdGltZTogXCLhnpjhn4nhn4ThnoQgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIuGemuGemeGfiOGeluGfgeGemyBJU09cIixcbiAgICAgICAgaXB2NDogXCLhnqLhnrbhnp/hnpnhnorhn5LhnovhnrbhnpMgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcIuGeouGetuGen+GemeGeiuGfkuGei+GetuGekyBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCLhnorhn4LhnpPhnqLhnrbhnp/hnpnhnorhn5LhnovhnrbhnpMgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwi4Z6K4Z+C4Z6T4Z6i4Z624Z6f4Z6Z4Z6K4Z+S4Z6L4Z624Z6TIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcIuGegeGfkuGen+GfguGeouGegOGfkuGen+GemuGeouGfiuGet+GegOGevOGeiiBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIuGegeGfkuGen+GfguGeouGegOGfkuGen+GemuGeouGfiuGet+GegOGevOGeiiBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwi4Z6B4Z+S4Z6f4Z+C4Z6i4Z6A4Z+S4Z6f4Z6aIEpTT05cIixcbiAgICAgICAgZTE2NDogXCLhnpvhn4HhnoEgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIuGekeGet+Gek+GfkuGek+Gek+GfkOGemeGelOGeieGfkuGeheGevOGem1wiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIuGem+GfgeGegVwiLFxuICAgICAgICBhcnJheTogXCLhnqLhnrbhnprhn4EgKEFycmF5KVwiLFxuICAgICAgICBudWxsOiBcIuGeguGfkuGemOGetuGek+Gej+GemOGfkuGem+GfgyAobnVsbClcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6U4Z6J4Z+S4Z6F4Z684Z6b4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z+WIOGej+GfkuGemuGevOGenOGegOGetuGemiBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9IOGelOGfieGeu+Gek+GfkuGej+GfguGekeGekeGeveGem+GelOGetuGekyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6U4Z6J4Z+S4Z6F4Z684Z6b4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z+WIOGej+GfkuGemuGevOGenOGegOGetuGemiAke2V4cGVjdGVkfSDhnpThn4nhnrvhnpPhn5Lhno/hn4LhnpHhnpHhnr3hnpvhnpThnrbhnpMgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnpThnonhn5LhnoXhnrzhnpvhnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhn5Yg4Z6P4Z+S4Z6a4Z684Z6c4Z6A4Z624Z6aICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg4Z6H4Z6Y4Z+S4Z6a4Z6+4Z6f4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z+WIOGej+GfkuGemuGevOGenOGeh+GetuGemOGeveGemeGegOGfkuGek+Geu+GehOGeheGfhuGejuGfhOGemCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4Z6S4Z+G4Z6W4Z+B4Z6A4Z+WIOGej+GfkuGemuGevOGenOGegOGetuGemiAke2lzc3VlLm9yaWdpbiA/PyBcIuGej+GemOGfkuGem+Gfg1wifSAke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLhnpLhnrbhno/hnrtcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg4Z6S4Z+G4Z6W4Z+B4Z6A4Z+WIOGej+GfkuGemuGevOGenOGegOGetuGemiAke2lzc3VlLm9yaWdpbiA/PyBcIuGej+GemOGfkuGem+Gfg1wifSAke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhno/hnrzhnoXhnpbhn4HhnoDhn5Yg4Z6P4Z+S4Z6a4Z684Z6c4Z6A4Z624Z6aICR7aXNzdWUub3JpZ2lufSAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhno/hnrzhnoXhnpbhn4HhnoDhn5Yg4Z6P4Z+S4Z6a4Z684Z6c4Z6A4Z624Z6aICR7aXNzdWUub3JpZ2lufSAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOGegeGfkuGen+GfguGeouGegOGfkuGen+GemuGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGfliDhno/hn5LhnprhnrzhnpzhnoXhnrbhnpThn4vhnpXhn5Lhno/hnr7hnpjhnorhn4ThnpkgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhnoHhn5Lhnp/hn4LhnqLhnoDhn5Lhnp/hnprhnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhn5Yg4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z6J4Z+S4Z6F4Z6U4Z+L4Z6K4Z+E4Z6ZIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOGegeGfkuGen+GfguGeouGegOGfkuGen+GemuGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGfliDhno/hn5LhnprhnrzhnpzhnpjhnrbhnpMgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhnoHhn5Lhnp/hn4LhnqLhnoDhn5Lhnp/hnprhnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhn5Yg4Z6P4Z+S4Z6a4Z684Z6c4Z6P4Z+C4Z6V4Z+S4Z6C4Z684Z6V4Z+S4Z6C4Z6E4Z6T4Z654Z6E4Z6R4Z6Y4Z+S4Z6a4Z6E4Z+L4Z6K4Z+C4Z6b4Z6U4Z624Z6T4Z6A4Z+G4Z6O4Z6P4Z+LICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGfliAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhnpvhn4HhnoHhnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhn5Yg4Z6P4Z+S4Z6a4Z684Z6c4Z6P4Z+C4Z6H4Z624Z6W4Z6g4Z674Z6C4Z674Z6O4Z6T4Z+DICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhnprhnoDhnoPhnr7hnonhnp/hn4ThnpjhnrfhnpPhnp/hn5LhnoLhnrbhnpvhn4vhn5YgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpzhnpPhn4XhnoDhn5LhnpPhnrvhnoQgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpxgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z6T4Z+F4Z6A4Z+S4Z6T4Z674Z6EICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBg4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6cYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCBrbSBmcm9tIFwiLi9rbS5qc1wiO1xuLyoqIEBkZXByZWNhdGVkIFVzZSBga21gIGluc3RlYWQuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGttKCk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwi66y47J6QXCIsIHZlcmI6IFwidG8gaGF2ZVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLrsJTsnbTtirhcIiwgdmVyYjogXCJ0byBoYXZlXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLqsJxcIiwgdmVyYjogXCJ0byBoYXZlXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwi6rCcXCIsIHZlcmI6IFwidG8gaGF2ZVwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi7J6F66ClXCIsXG4gICAgICAgIGVtYWlsOiBcIuydtOuplOydvCDso7zshoxcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCLsnbTrqqjsp4BcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIOuCoOynnOyLnOqwhFwiLFxuICAgICAgICBkYXRlOiBcIklTTyDrgqDsp5xcIixcbiAgICAgICAgdGltZTogXCJJU08g7Iuc6rCEXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyDquLDqsIRcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IOyjvOyGjFwiLFxuICAgICAgICBpcHY2OiBcIklQdjYg7KO87IaMXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IOuylOychFwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiDrspTsnIRcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NCDsnbjsvZTrlKkg66y47J6Q7Je0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwg7J247L2U65SpIOusuOyekOyXtFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIOusuOyekOyXtFwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IOuyiO2YuFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi7J6F66ClXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDsnpjrqrvrkJwg7J6F66ClOiDsmIjsg4Eg7YOA7J6F7J2AIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIOuwm+ydgCDtg4DsnoXsnYAgJHtyZWNlaXZlZH3snoXri4jri6RgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYOyemOuqu+uQnCDsnoXroKU6IOyYiOyDgSDtg4DsnoXsnYAgJHtleHBlY3RlZH0sIOuwm+ydgCDtg4DsnoXsnYAgJHtyZWNlaXZlZH3snoXri4jri6RgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDsnpjrqrvrkJwg7J6F66ClOiDqsJLsnYAgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfSDsnbTslrTslbwg7ZWp64uI64ukYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOyemOuqu+uQnCDsmLXshZg6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCLrmJDripQgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpGA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCLsnbTtlZhcIiA6IFwi66+466eMXCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gYWRqID09PSBcIuuvuOunjFwiID8gXCLsnbTslrTslbwg7ZWp64uI64ukXCIgOiBcIuyXrOyVvCDtlanri4jri6RcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gc2l6aW5nPy51bml0ID8/IFwi7JqU7IaMXCI7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbiA/PyBcIuqwklwifeydtCDrhIjrrLQg7YG964uI64ukOiAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0ke3VuaXR9ICR7YWRqfSR7c3VmZml4fWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbiA/PyBcIuqwklwifeydtCDrhIjrrLQg7YG964uI64ukOiAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHthZGp9JHtzdWZmaXh9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwi7J207IOBXCIgOiBcIuy0iOqzvFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGFkaiA9PT0gXCLsnbTsg4FcIiA/IFwi7J207Ja07JW8IO2VqeuLiOuLpFwiIDogXCLsl6zslbwg7ZWp64uI64ukXCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pdCA9IHNpemluZz8udW5pdCA/PyBcIuyalOyGjFwiO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbiA/PyBcIuqwklwifeydtCDrhIjrrLQg7J6R7Iq164uI64ukOiAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0ke3VuaXR9ICR7YWRqfSR7c3VmZml4fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW4gPz8gXCLqsJJcIn3snbQg64SI66y0IOyekeyKteuLiOuLpDogJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7YWRqfSR7c3VmZml4fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDsnpjrqrvrkJwg66y47J6Q7Je0OiBcIiR7X2lzc3VlLnByZWZpeH1cIijsnLwp66GcIOyLnOyeke2VtOyVvCDtlanri4jri6RgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDsnpjrqrvrkJwg66y47J6Q7Je0OiBcIiR7X2lzc3VlLnN1ZmZpeH1cIijsnLwp66GcIOuBneuCmOyVvCDtlanri4jri6RgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg7J6Y66q765CcIOusuOyekOyXtDogXCIke19pc3N1ZS5pbmNsdWRlc31cIuydhCjrpbwpIO2PrO2VqO2VtOyVvCDtlanri4jri6RgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg7J6Y66q765CcIOusuOyekOyXtDog7KCV6rec7IudICR7X2lzc3VlLnBhdHRlcm59IO2MqO2EtOqzvCDsnbzsuZjtlbTslbwg7ZWp64uI64ukYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOyemOuqu+uQnCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDsnpjrqrvrkJwg7Iir7J6QOiAke2lzc3VlLmRpdmlzb3J97J2YIOuwsOyImOyXrOyVvCDtlanri4jri6RgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDsnbjsi53tlaAg7IiYIOyXhuuKlCDtgqQ6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg7J6Y66q765CcIO2CpDogJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDsnpjrqrvrkJwg7J6F66ClYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOyemOuqu+uQnCDqsJI6ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBg7J6Y66q765CcIOyeheugpWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGNhcGl0YWxpemVGaXJzdENoYXJhY3RlciA9ICh0ZXh0KSA9PiB7XG4gICAgcmV0dXJuIHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpO1xufTtcbmZ1bmN0aW9uIGdldFVuaXRUeXBlRnJvbU51bWJlcihudW1iZXIpIHtcbiAgICBjb25zdCBhYnMgPSBNYXRoLmFicyhudW1iZXIpO1xuICAgIGNvbnN0IGxhc3QgPSBhYnMgJSAxMDtcbiAgICBjb25zdCBsYXN0MiA9IGFicyAlIDEwMDtcbiAgICBpZiAoKGxhc3QyID49IDExICYmIGxhc3QyIDw9IDE5KSB8fCBsYXN0ID09PSAwKVxuICAgICAgICByZXR1cm4gXCJtYW55XCI7XG4gICAgaWYgKGxhc3QgPT09IDEpXG4gICAgICAgIHJldHVybiBcIm9uZVwiO1xuICAgIHJldHVybiBcImZld1wiO1xufVxuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcInNpbWJvbGlzXCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcInNpbWJvbGlhaVwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwic2ltYm9sacWzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjoge1xuICAgICAgICAgICAgICAgIHNtYWxsZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBcInR1cmkgYsWrdGkgbmUgaWxnZXNuxJcga2FpcFwiLFxuICAgICAgICAgICAgICAgICAgICBub3RJbmNsdXNpdmU6IFwidHVyaSBixat0aSB0cnVtcGVzbsSXIGthaXBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJpZ2dlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSBixat0aSBuZSB0cnVtcGVzbsSXIGthaXBcIixcbiAgICAgICAgICAgICAgICAgICAgbm90SW5jbHVzaXZlOiBcInR1cmkgYsWrdGkgaWxnZXNuxJcga2FpcFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcImJhaXRhc1wiLFxuICAgICAgICAgICAgICAgIGZldzogXCJiYWl0YWlcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcImJhaXTFs1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IHtcbiAgICAgICAgICAgICAgICBzbWFsbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogXCJ0dXJpIGLFq3RpIG5lIGRpZGVzbmlzIGthaXBcIixcbiAgICAgICAgICAgICAgICAgICAgbm90SW5jbHVzaXZlOiBcInR1cmkgYsWrdGkgbWHFvmVzbmlzIGthaXBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJpZ2dlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSBixat0aSBuZSBtYcW+ZXNuaXMga2FpcFwiLFxuICAgICAgICAgICAgICAgICAgICBub3RJbmNsdXNpdmU6IFwidHVyaSBixat0aSBkaWRlc25pcyBrYWlwXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcImVsZW1lbnTEhVwiLFxuICAgICAgICAgICAgICAgIGZldzogXCJlbGVtZW50dXNcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcImVsZW1lbnTFs1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IHtcbiAgICAgICAgICAgICAgICBzbWFsbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogXCJ0dXJpIHR1csSXdGkgbmUgZGF1Z2lhdSBrYWlwXCIsXG4gICAgICAgICAgICAgICAgICAgIG5vdEluY2x1c2l2ZTogXCJ0dXJpIHR1csSXdGkgbWHFvmlhdSBrYWlwXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiaWdnZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBcInR1cmkgdHVyxJd0aSBuZSBtYcW+aWF1IGthaXBcIixcbiAgICAgICAgICAgICAgICAgICAgbm90SW5jbHVzaXZlOiBcInR1cmkgdHVyxJd0aSBkYXVnaWF1IGthaXBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcImVsZW1lbnTEhVwiLFxuICAgICAgICAgICAgICAgIGZldzogXCJlbGVtZW50dXNcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcImVsZW1lbnTFs1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IHtcbiAgICAgICAgICAgICAgICBzbWFsbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogXCJ0dXJpIHR1csSXdGkgbmUgZGF1Z2lhdSBrYWlwXCIsXG4gICAgICAgICAgICAgICAgICAgIG5vdEluY2x1c2l2ZTogXCJ0dXJpIHR1csSXdGkgbWHFvmlhdSBrYWlwXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiaWdnZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBcInR1cmkgdHVyxJd0aSBuZSBtYcW+aWF1IGthaXBcIixcbiAgICAgICAgICAgICAgICAgICAgbm90SW5jbHVzaXZlOiBcInR1cmkgdHVyxJd0aSBkYXVnaWF1IGthaXBcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4sIHVuaXRUeXBlLCBpbmNsdXNpdmUsIHRhcmdldFNob3VsZEJlKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVuaXQ6IHJlc3VsdC51bml0W3VuaXRUeXBlXSxcbiAgICAgICAgICAgIHZlcmI6IHJlc3VsdC52ZXJiW3RhcmdldFNob3VsZEJlXVtpbmNsdXNpdmUgPyBcImluY2x1c2l2ZVwiIDogXCJub3RJbmNsdXNpdmVcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIsSvdmVzdGlzXCIsXG4gICAgICAgIGVtYWlsOiBcImVsLiBwYcWhdG8gYWRyZXNhc1wiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImphdXN0dWthc1wiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGF0YSBpciBsYWlrYXNcIixcbiAgICAgICAgZGF0ZTogXCJJU08gZGF0YVwiLFxuICAgICAgICB0aW1lOiBcIklTTyBsYWlrYXNcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIHRydWttxJdcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGFkcmVzYXNcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGFkcmVzYXNcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgdGlua2xvIHByZWZpa3NhcyAoQ0lEUilcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgdGlua2xvIHByZWZpa3NhcyAoQ0lEUilcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NCB1xb5rb2R1b3RhIGVpbHV0xJdcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybCB1xb5rb2R1b3RhIGVpbHV0xJdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBlaWx1dMSXXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgbnVtZXJpc1wiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwixK92ZXN0aXNcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJza2FpxI1pdXNcIixcbiAgICAgICAgYmlnaW50OiBcInN2ZWlrYXNpcyBza2FpxI1pdXNcIixcbiAgICAgICAgc3RyaW5nOiBcImVpbHV0xJdcIixcbiAgICAgICAgYm9vbGVhbjogXCJsb2dpbsSXIHJlaWvFoW3El1wiLFxuICAgICAgICB1bmRlZmluZWQ6IFwibmVhcGlicsSXxb50YSByZWlrxaFtxJdcIixcbiAgICAgICAgZnVuY3Rpb246IFwiZnVua2NpamFcIixcbiAgICAgICAgc3ltYm9sOiBcInNpbWJvbGlzXCIsXG4gICAgICAgIGFycmF5OiBcIm1hc3l2YXNcIixcbiAgICAgICAgb2JqZWN0OiBcIm9iamVrdGFzXCIsXG4gICAgICAgIG51bGw6IFwibnVsaW7ElyByZWlrxaFtxJdcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgR2F1dGFzIHRpcGFzICR7cmVjZWl2ZWR9LCBvIHRpa8SXdGFzaSAtIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYEdhdXRhcyB0aXBhcyAke3JlY2VpdmVkfSwgbyB0aWvEl3Rhc2kgLSAke2V4cGVjdGVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFByaXZhbG8gYsWrdGkgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBQcml2YWxvIGLFq3RpIHZpZW5hcyBpxaEgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9IHBhc2lyaW5raW3Fs2A7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gVHlwZURpY3Rpb25hcnlbaXNzdWUub3JpZ2luXSA/PyBpc3N1ZS5vcmlnaW47XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbiwgZ2V0VW5pdFR5cGVGcm9tTnVtYmVyKE51bWJlcihpc3N1ZS5tYXhpbXVtKSksIGlzc3VlLmluY2x1c2l2ZSA/PyBmYWxzZSwgXCJzbWFsbGVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmc/LnZlcmIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtjYXBpdGFsaXplRmlyc3RDaGFyYWN0ZXIob3JpZ2luID8/IGlzc3VlLm9yaWdpbiA/PyBcInJlaWvFoW3El1wiKX0gJHtzaXppbmcudmVyYn0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50xbNcIn1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwibmUgZGlkZXNuaXMga2FpcFwiIDogXCJtYcW+ZXNuaXMga2FpcFwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjYXBpdGFsaXplRmlyc3RDaGFyYWN0ZXIob3JpZ2luID8/IGlzc3VlLm9yaWdpbiA/PyBcInJlaWvFoW3El1wiKX0gdHVyaSBixat0aSAke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nPy51bml0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5vcmlnaW5dID8/IGlzc3VlLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luLCBnZXRVbml0VHlwZUZyb21OdW1iZXIoTnVtYmVyKGlzc3VlLm1pbmltdW0pKSwgaXNzdWUuaW5jbHVzaXZlID8/IGZhbHNlLCBcImJpZ2dlclwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nPy52ZXJiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y2FwaXRhbGl6ZUZpcnN0Q2hhcmFjdGVyKG9yaWdpbiA/PyBpc3N1ZS5vcmlnaW4gPz8gXCJyZWlrxaFtxJdcIil9ICR7c2l6aW5nLnZlcmJ9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudMWzXCJ9YDtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIm5lIG1hxb5lc25pcyBrYWlwXCIgOiBcImRpZGVzbmlzIGthaXBcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y2FwaXRhbGl6ZUZpcnN0Q2hhcmFjdGVyKG9yaWdpbiA/PyBpc3N1ZS5vcmlnaW4gPz8gXCJyZWlrxaFtxJdcIil9IHR1cmkgYsWrdGkgJHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZz8udW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRWlsdXTElyBwcml2YWxvIHByYXNpZMSXdGkgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFaWx1dMSXIHByaXZhbG8gcGFzaWJhaWd0aSBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFaWx1dMSXIHByaXZhbG8gxK90cmF1a3RpIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRWlsdXTElyBwcml2YWxvIGF0aXRpa3RpICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldGVpc2luZ2FzICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFNrYWnEjWl1cyBwcml2YWxvIGLFq3RpICR7aXNzdWUuZGl2aXNvcn0ga2FydG90aW5pcy5gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZWF0cGHFvmludCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJpXCIgOiBcImFzXCJ9IHJha3Qke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiYWlcIiA6IFwiYXNcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJhc3RhcyBrbGFpZGluZ2FzIHJha3Rhc1wiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJLbGFpZGluZ2EgxK92ZXN0aXNcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2luO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjYXBpdGFsaXplRmlyc3RDaGFyYWN0ZXIob3JpZ2luID8/IGlzc3VlLm9yaWdpbiA/PyBcInJlaWvFoW3El1wiKX0gdHVyaSBrbGFpZGluZ8SFIMSvdmVzdMSvYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiS2xhaWRpbmdhIMSvdmVzdGlzXCI7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcItC30L3QsNGG0LhcIiwgdmVyYjogXCLQtNCwINC40LzQsNCw0YJcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwi0LHQsNGY0YLQuFwiLCB2ZXJiOiBcItC00LAg0LjQvNCw0LDRglwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwi0YHRgtCw0LLQutC4XCIsIHZlcmI6IFwi0LTQsCDQuNC80LDQsNGCXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwi0YHRgtCw0LLQutC4XCIsIHZlcmI6IFwi0LTQsCDQuNC80LDQsNGCXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCLQstC90LXRgVwiLFxuICAgICAgICBlbWFpbDogXCLQsNC00YDQtdGB0LAg0L3QsCDQtS3Qv9C+0YjRgtCwXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwi0LXQvNC+0Z/QuFwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08g0LTQsNGC0YPQvCDQuCDQstGA0LXQvNC1XCIsXG4gICAgICAgIGRhdGU6IFwiSVNPINC00LDRgtGD0LxcIixcbiAgICAgICAgdGltZTogXCJJU08g0LLRgNC10LzQtVwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08g0LLRgNC10LzQtdGC0YDQsNC10ZrQtVwiLFxuICAgICAgICBpcHY0OiBcIklQdjQg0LDQtNGA0LXRgdCwXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiDQsNC00YDQtdGB0LBcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQg0L7Qv9GB0LXQs1wiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiDQvtC/0YHQtdCzXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQt0LXQvdC60L7QtNC40YDQsNC90LAg0L3QuNC30LBcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC3QtdC90LrQvtC00LjRgNCw0L3QsCDQvdC40LfQsFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OINC90LjQt9CwXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQg0LHRgNC+0ZhcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItCy0L3QtdGBXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwi0LHRgNC+0ZhcIixcbiAgICAgICAgYXJyYXk6IFwi0L3QuNC30LBcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0JPRgNC10YjQtdC9INCy0L3QtdGBOiDRgdC1INC+0YfQtdC60YPQstCwIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sINC/0YDQuNC80LXQvdC+ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQk9GA0LXRiNC10L0g0LLQvdC10YE6INGB0LUg0L7Rh9C10LrRg9Cy0LAgJHtleHBlY3RlZH0sINC/0YDQuNC80LXQvdC+ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQk9GA0LXRiNCw0L3QsCDQvtC/0YbQuNGY0LA6INGB0LUg0L7Rh9C10LrRg9Cy0LAg0LXQtNC90LAgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCf0YDQtdC80L3QvtCz0YMg0LPQvtC70LXQvDog0YHQtSDQvtGH0LXQutGD0LLQsCAke2lzc3VlLm9yaWdpbiA/PyBcItCy0YDQtdC00L3QvtGB0YLQsFwifSDQtNCwINC40LzQsCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcItC10LvQtdC80LXQvdGC0LhcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg0J/RgNC10LzQvdC+0LPRgyDQs9C+0LvQtdC8OiDRgdC1INC+0YfQtdC60YPQstCwICR7aXNzdWUub3JpZ2luID8/IFwi0LLRgNC10LTQvdC+0YHRgtCwXCJ9INC00LAg0LHQuNC00LUgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQn9GA0LXQvNC90L7Qs9GDINC80LDQuzog0YHQtSDQvtGH0LXQutGD0LLQsCAke2lzc3VlLm9yaWdpbn0g0LTQsCDQuNC80LAgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQn9GA0LXQvNC90L7Qs9GDINC80LDQuzog0YHQtSDQvtGH0LXQutGD0LLQsCAke2lzc3VlLm9yaWdpbn0g0LTQsCDQsdC40LTQtSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQttC10YfQutCwINC90LjQt9CwOiDQvNC+0YDQsCDQtNCwINC30LDQv9C+0YfQvdGD0LLQsCDRgdC+IFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LDQttC10YfQutCwINC90LjQt9CwOiDQvNC+0YDQsCDQtNCwINC30LDQstGA0YjRg9Cy0LAg0YHQviBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQsNC20LXRh9C60LAg0L3QuNC30LA6INC80L7RgNCwINC00LAg0LLQutC70YPRh9GD0LLQsCBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstCw0LbQtdGH0LrQsCDQvdC40LfQsDog0LzQvtGA0LAg0LTQsCDQvtC00LPQvtCw0YDQsCDQvdCwINC/0LDRgtC10YDQvdC+0YIgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQk9GA0LXRiNC10L0g0LHRgNC+0Zg6INC80L7RgNCwINC00LAg0LHQuNC00LUg0LTQtdC70LjQsiDRgdC+ICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi0J3QtdC/0YDQtdC/0L7Qt9C90LDQtdC90Lgg0LrQu9GD0YfQtdCy0LhcIiA6IFwi0J3QtdC/0YDQtdC/0L7Qt9C90LDQtdC9INC60LvRg9GHXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCT0YDQtdGI0LXQvSDQutC70YPRhyDQstC+ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcItCT0YDQtdGI0LXQvSDQstC90LXRgVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg0JPRgNC10YjQvdCwINCy0YDQtdC00L3QvtGB0YIg0LLQviAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCT0YDQtdGI0LXQvSDQstC90LXRgWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImFrc2FyYVwiLCB2ZXJiOiBcIm1lbXB1bnlhaVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJiYWl0XCIsIHZlcmI6IFwibWVtcHVueWFpXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJlbGVtZW5cIiwgdmVyYjogXCJtZW1wdW55YWlcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCJlbGVtZW5cIiwgdmVyYjogXCJtZW1wdW55YWlcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImFsYW1hdCBlLW1lbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcInRhcmlraCBtYXNhIElTT1wiLFxuICAgICAgICBkYXRlOiBcInRhcmlraCBJU09cIixcbiAgICAgICAgdGltZTogXCJtYXNhIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJ0ZW1wb2ggSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWxhbWF0IElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhbGFtYXQgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwianVsYXQgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwianVsYXQgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwic3RyaW5nIGRpa29ka2FuIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwic3RyaW5nIGRpa29ka2FuIGJhc2U2NHVybFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJzdHJpbmcgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIm5vbWJvciBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJub21ib3JcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW5wdXQgdGlkYWsgc2FoOiBkaWphbmdrYSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBkaXRlcmltYSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgSW5wdXQgdGlkYWsgc2FoOiBkaWphbmdrYSAke2V4cGVjdGVkfSwgZGl0ZXJpbWEgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayBzYWg6IGRpamFuZ2thICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgUGlsaWhhbiB0aWRhayBzYWg6IGRpamFuZ2thIHNhbGFoIHNhdHUgZGFyaXBhZGEgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlcmxhbHUgYmVzYXI6IGRpamFuZ2thICR7aXNzdWUub3JpZ2luID8/IFwibmlsYWlcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW5cIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgVGVybGFsdSBiZXNhcjogZGlqYW5na2EgJHtpc3N1ZS5vcmlnaW4gPz8gXCJuaWxhaVwifSBhZGFsYWggJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZXJsYWx1IGtlY2lsOiBkaWphbmdrYSAke2lzc3VlLm9yaWdpbn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUZXJsYWx1IGtlY2lsOiBkaWphbmdrYSAke2lzc3VlLm9yaWdpbn0gYWRhbGFoICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgU3RyaW5nIHRpZGFrIHNhaDogbWVzdGkgYmVybXVsYSBkZW5nYW4gXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFN0cmluZyB0aWRhayBzYWg6IG1lc3RpIGJlcmFraGlyIGRlbmdhbiBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBTdHJpbmcgdGlkYWsgc2FoOiBtZXN0aSBtZW5nYW5kdW5naSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFN0cmluZyB0aWRhayBzYWg6IG1lc3RpIHNlcGFkYW4gZGVuZ2FuIGNvcmFrICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IHRpZGFrIHNhaGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOb21ib3IgdGlkYWsgc2FoOiBwZXJsdSBnYW5kYWFuICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBLdW5jaSB0aWRhayBkaWtlbmFsaTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBLdW5jaSB0aWRhayBzYWggZGFsYW0gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiSW5wdXQgdGlkYWsgc2FoXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWxhaSB0aWRhayBzYWggZGFsYW0gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayBzYWhgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJ0ZWtlbnNcIiwgdmVyYjogXCJoZWVmdFwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJieXRlc1wiLCB2ZXJiOiBcImhlZWZ0XCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJlbGVtZW50ZW5cIiwgdmVyYjogXCJoZWVmdFwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImVsZW1lbnRlblwiLCB2ZXJiOiBcImhlZWZ0XCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJpbnZvZXJcIixcbiAgICAgICAgZW1haWw6IFwiZW1haWxhZHJlc1wiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYXR1bSBlbiB0aWpkXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIGRhdHVtXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHRpamRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIGR1dXJcIixcbiAgICAgICAgaXB2NDogXCJJUHY0LWFkcmVzXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Ni1hZHJlc1wiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NC1iZXJlaWtcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYtYmVyZWlrXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZ2Vjb2RlZXJkZSB0ZWtzdFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0IFVSTC1nZWNvZGVlcmRlIHRla3N0XCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gc3RyaW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQtbnVtbWVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJpbnZvZXJcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJnZXRhbFwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2UgaW52b2VyOiB2ZXJ3YWNodCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBvbnR2aW5nICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2UgaW52b2VyOiB2ZXJ3YWNodCAke2V4cGVjdGVkfSwgb250dmluZyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9uZ2VsZGlnZSBpbnZvZXI6IHZlcndhY2h0ICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIG9wdGllOiB2ZXJ3YWNodCDDqcOpbiB2YW4gJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb25nTmFtZSA9IGlzc3VlLm9yaWdpbiA9PT0gXCJkYXRlXCIgPyBcImxhYXRcIiA6IGlzc3VlLm9yaWdpbiA9PT0gXCJzdHJpbmdcIiA/IFwibGFuZ1wiIDogXCJncm9vdFwiO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGUgJHtsb25nTmFtZX06IHZlcndhY2h0IGRhdCAke2lzc3VlLm9yaWdpbiA/PyBcIndhYXJkZVwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRlblwifSAke3NpemluZy52ZXJifWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUZSAke2xvbmdOYW1lfTogdmVyd2FjaHQgZGF0ICR7aXNzdWUub3JpZ2luID8/IFwid2FhcmRlXCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSBpc2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG9ydE5hbWUgPSBpc3N1ZS5vcmlnaW4gPT09IFwiZGF0ZVwiID8gXCJ2cm9lZ1wiIDogaXNzdWUub3JpZ2luID09PSBcInN0cmluZ1wiID8gXCJrb3J0XCIgOiBcImtsZWluXCI7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlICR7c2hvcnROYW1lfTogdmVyd2FjaHQgZGF0ICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH0gJHtzaXppbmcudmVyYn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFRlICR7c2hvcnROYW1lfTogdmVyd2FjaHQgZGF0ICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gaXNgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIHRla3N0OiBtb2V0IG1ldCBcIiR7X2lzc3VlLnByZWZpeH1cIiBiZWdpbm5lbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9uZ2VsZGlnZSB0ZWtzdDogbW9ldCBvcCBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBlaW5kaWdlbmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2UgdGVrc3Q6IG1vZXQgXCIke19pc3N1ZS5pbmNsdWRlc31cIiBiZXZhdHRlbmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2UgdGVrc3Q6IG1vZXQgb3ZlcmVlbmtvbWVuIG1ldCBwYXRyb29uICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9uZ2VsZGlnOiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZyBnZXRhbDogbW9ldCBlZW4gdmVlbHZvdWQgdmFuICR7aXNzdWUuZGl2aXNvcn0gemlqbmA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9uYmVrZW5kZSBrZXkke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIGtleSBpbiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJPbmdlbGRpZ2UgaW52b2VyXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2Ugd2FhcmRlIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIGludm9lcmA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcInRlZ25cIiwgdmVyYjogXCLDpSBoYVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJieXRlc1wiLCB2ZXJiOiBcIsOlIGhhXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJlbGVtZW50ZXJcIiwgdmVyYjogXCLDpSBpbm5laG9sZGVcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCJlbGVtZW50ZXJcIiwgdmVyYjogXCLDpSBpbm5laG9sZGVcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImUtcG9zdGFkcmVzc2VcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGF0by0gb2cga2xva2tlc2xldHRcIixcbiAgICAgICAgZGF0ZTogXCJJU08tZGF0b1wiLFxuICAgICAgICB0aW1lOiBcIklTTy1rbG9ra2VzbGV0dFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08tdmFyaWdoZXRcIixcbiAgICAgICAgaXB2NDogXCJJUHY0LW9tcsOlZGVcIixcbiAgICAgICAgaXB2NjogXCJJUHY2LW9tcsOlZGVcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtc3Bla3RlclwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Ni1zcGVrdGVyXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5rb2RldCBzdHJlbmdcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1lbmtvZGV0IHN0cmVuZ1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OLXN0cmVuZ1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0LW51bW1lclwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJ0YWxsXCIsXG4gICAgICAgIGFycmF5OiBcImxpc3RlXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgaW5wdXQ6IGZvcnZlbnRldCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBmaWtrICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIGlucHV0OiBmb3J2ZW50ZXQgJHtleHBlY3RlZH0sIGZpa2sgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHZlcmRpOiBmb3J2ZW50ZXQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHZhbGc6IGZvcnZlbnRldCBlbiBhdiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIHN0b3IodCk6IGZvcnZlbnRldCAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9IHRpbCDDpSBoYSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRlclwifWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBGb3Igc3Rvcih0KTogZm9ydmVudGV0ICR7aXNzdWUub3JpZ2luID8/IFwidmFsdWVcIn0gdGlsIMOlIGhhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIGxpdGUobik6IGZvcnZlbnRldCAke2lzc3VlLm9yaWdpbn0gdGlsIMOlIGhhICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIGxpdGUobik6IGZvcnZlbnRldCAke2lzc3VlLm9yaWdpbn0gdGlsIMOlIGhhICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZyBzdHJlbmc6IG3DpSBzdGFydGUgbWVkIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHN0cmVuZzogbcOlIGVuZGUgbWVkIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBtw6UgaW5uZWhvbGRlIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZyBzdHJlbmc6IG3DpSBtYXRjaGUgbcO4bnN0ZXJldCAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgdGFsbDogbcOlIHbDpnJlIGV0IG11bHRpcGx1bSBhdiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlVramVudGUgbsO4a2xlclwiIDogXCJVa2plbnQgbsO4a2tlbFwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIG7DuGtrZWwgaSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJVZ3lsZGlnIGlucHV0XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHZlcmRpIGkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIGlucHV0YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwiaGFyZlwiLCB2ZXJiOiBcIm9sbWFsxLFkxLFyXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJheXRcIiwgdmVyYjogXCJvbG1hbMSxZMSxclwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwidW5zdXJcIiwgdmVyYjogXCJvbG1hbMSxZMSxclwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcInVuc3VyXCIsIHZlcmI6IFwib2xtYWzEsWTEsXJcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImdpcmVuXCIsXG4gICAgICAgIGVtYWlsOiBcImVwb3N0YWfDomhcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gaGVuZ8OibcSxXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIHRhcmloaVwiLFxuICAgICAgICB0aW1lOiBcIklTTyB6YW1hbsSxXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBtw7xkZGV0aVwiLFxuICAgICAgICBpcHY0OiBcIklQdjQgbmnFn8OibsSxXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBuacWfw6JuxLFcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgbWVuemlsaVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiBtZW56aWxpXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtxZ9pZnJlbGkgbWV0aW5cIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC3Fn2lmcmVsaSBtZXRpblwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIG1ldGluXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgc2F5xLFzxLFcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImdpcmVuXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibnVtYXJhXCIsXG4gICAgICAgIGFycmF5OiBcInNhZlwiLFxuICAgICAgICBudWxsOiBcImdheWJcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRsOic2l0IGdpcmVuOiB1bXVsYW4gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgYWzEsW5hbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRsOic2l0IGdpcmVuOiB1bXVsYW4gJHtleHBlY3RlZH0sIGFsxLFuYW4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGw6JzaXQgZ2lyZW46IHVtdWxhbiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEbDonNpdCB0ZXJjaWg6IG3Du3RlYmVybGVyICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGYXpsYSBiw7x5w7xrOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9LCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRzXCJ9IHNhaGlwIG9sbWFsxLF5ZMSxLmA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBGYXpsYSBiw7x5w7xrOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9LCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gb2xtYWzEsXlkxLEuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGYXpsYSBrw7zDp8O8azogJHtpc3N1ZS5vcmlnaW59LCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH0gc2FoaXAgb2xtYWzEsXlkxLEuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBGYXpsYSBrw7zDp8O8azogJHtpc3N1ZS5vcmlnaW59LCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gb2xtYWzEsXlkxLEuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGw6JzaXQgbWV0aW46IFwiJHtfaXNzdWUucHJlZml4fVwiIGlsZSBiYcWfbGFtYWzEsS5gO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEbDonNpdCBtZXRpbjogXCIke19pc3N1ZS5zdWZmaXh9XCIgaWxlIGJpdG1lbGkuYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEbDonNpdCBtZXRpbjogXCIke19pc3N1ZS5pbmNsdWRlc31cIiBpaHRpdsOiIGV0bWVsaS5gO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRsOic2l0IG1ldGluOiAke19pc3N1ZS5wYXR0ZXJufSBuYWvFn8SxbmEgdXltYWzEsS5gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgRsOic2l0ICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEbDonNpdCBzYXnEsTogJHtpc3N1ZS5kaXZpc29yfSBrYXTEsSBvbG1hbMSxeWTEsS5gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUYW7EsW5tYXlhbiBhbmFodGFyICR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0gacOnaW4gdGFuxLFubWF5YW4gYW5haHRhciB2YXIuYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiR2lyZW4gdGFuxLFuYW1hZMSxLlwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGnDp2luIHRhbsSxbm1heWFuIGvEsXltZXQgdmFyLmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgS8SxeW1ldCB0YW7EsW5hbWFkxLEuYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwi2KrZiNqp2YpcIiwgdmVyYjogXCLZiNmE2LHZilwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLYqNin24zZvNizXCIsIHZlcmI6IFwi2YjZhNix2YpcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcItiq2YjaqdmKXCIsIHZlcmI6IFwi2YjZhNix2YpcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCLYqtmI2qnZilwiLCB2ZXJiOiBcItmI2YTYsdmKXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCLZiNix2YjYr9mKXCIsXG4gICAgICAgIGVtYWlsOiBcItio2LHbjNqa2YbYp9mE24zaqVwiLFxuICAgICAgICB1cmw6IFwi24zZiCDYotixINin2YRcIixcbiAgICAgICAgZW1vamk6IFwi2KfbjNmF2YjYrNmKXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcItmG24zZvNmHINin2Ygg2YjYrtiqXCIsXG4gICAgICAgIGRhdGU6IFwi2YbbkNm82YdcIixcbiAgICAgICAgdGltZTogXCLZiNiu2KpcIixcbiAgICAgICAgZHVyYXRpb246IFwi2YXZiNiv2YdcIixcbiAgICAgICAgaXB2NDogXCLYryBJUHY0INm+2KrZh1wiLFxuICAgICAgICBpcHY2OiBcItivIElQdjYg2b7YqtmHXCIsXG4gICAgICAgIGNpZHJ2NDogXCLYryBJUHY0INiz2KfYrdmHXCIsXG4gICAgICAgIGNpZHJ2NjogXCLYryBJUHY2INiz2KfYrdmHXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5jb2RlZCDZhdiq2YZcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1lbmNvZGVkINmF2KrZhlwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OINmF2KrZhlwiLFxuICAgICAgICBlMTY0OiBcItivIEUuMTY0INi02YXbkNix2YdcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItmI2LHZiNiv2YpcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCLYudiv2K9cIixcbiAgICAgICAgYXJyYXk6IFwi2KfYsduQXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNmG2KfYs9mFINmI2LHZiNiv2Yo6INio2KfbjNivIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0g2YjYp9uMLCDZhdqr2LEgJHtyZWNlaXZlZH0g2KrYsdmE2KfYs9mHINi02YhgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNmG2KfYs9mFINmI2LHZiNiv2Yo6INio2KfbjNivICR7ZXhwZWN0ZWR9INmI2KfbjCwg2YXaq9ixICR7cmVjZWl2ZWR9INiq2LHZhNin2LPZhyDYtNmIYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDZhtin2LPZhSDZiNix2YjYr9mKOiDYqNin24zYryAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9INmI2KfbjGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2YbYp9iz2YUg2KfZhtiq2K7Yp9ioOiDYqNin24zYryDbjNmIINmE2YcgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9INqF2K7ZhyDZiNin24xgO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDaiduM2LEg2YTZiNuMOiAke2lzc3VlLm9yaWdpbiA/PyBcItin2LHYstqa2KpcIn0g2KjYp9uM2K8gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLYudmG2LXYsdmI2YbZh1wifSDZiNmE2LHZimA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2onbjNixINmE2YjbjDogJHtpc3N1ZS5vcmlnaW4gPz8gXCLYp9ix2LLamtiqXCJ9INio2KfbjNivICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSDZiNmKYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDaiduM2LEg2qnZiNqG2YbbjDogJHtpc3N1ZS5vcmlnaW59INio2KfbjNivICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSDZiNmE2LHZimA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2onbjNixINqp2YjahtmG24w6ICR7aXNzdWUub3JpZ2lufSDYqNin24zYryAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0g2YjZimA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDZhtin2LPZhSDZhdiq2YY6INio2KfbjNivINivIFwiJHtfaXNzdWUucHJlZml4fVwiINiz2LHZhyDZvtuM2YQg2LTZimA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2YbYp9iz2YUg2YXYqtmGOiDYqNin24zYryDYryBcIiR7X2lzc3VlLnN1ZmZpeH1cIiDYs9ix2Ycg2b7Yp9uMINiq2Ycg2YjYsdiz2YraltmKYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNmG2KfYs9mFINmF2KrZhjog2KjYp9uM2K8gXCIke19pc3N1ZS5pbmNsdWRlc31cIiDZiNmE2LHZimA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDZhtin2LPZhSDZhdiq2YY6INio2KfbjNivINivICR7X2lzc3VlLnBhdHRlcm59INiz2LHZhyDZhdi32KfYqNmC2Kog2YjZhNix2YpgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9INmG2KfYs9mFINiv24xgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2YbYp9iz2YUg2LnYr9ivOiDYqNin24zYryDYryAke2lzc3VlLmRpdmlzb3J9INmF2LbYsdioINmI2YpgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDZhtin2LPZhSAke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi2qnZhNuM2onZiNmG2YdcIiA6IFwi2qnZhNuM2olcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2YbYp9iz2YUg2qnZhNuM2okg2b7ZhyAke2lzc3VlLm9yaWdpbn0g2qnbkGA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg2YbYp9iz2YXZhyDZiNix2YjYr9mKYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNmG2KfYs9mFINi52YbYtdixINm+2YcgJHtpc3N1ZS5vcmlnaW59INqp25BgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNmG2KfYs9mF2Ycg2YjYsdmI2K/ZimA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcInpuYWvDs3dcIiwgdmVyYjogXCJtaWXEh1wiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJiYWp0w7N3XCIsIHZlcmI6IFwibWllxIdcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcImVsZW1lbnTDs3dcIiwgdmVyYjogXCJtaWXEh1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImVsZW1lbnTDs3dcIiwgdmVyYjogXCJtaWXEh1wiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwid3lyYcW8ZW5pZVwiLFxuICAgICAgICBlbWFpbDogXCJhZHJlcyBlbWFpbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcImRhdGEgaSBnb2R6aW5hIHcgZm9ybWFjaWUgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiZGF0YSB3IGZvcm1hY2llIElTT1wiLFxuICAgICAgICB0aW1lOiBcImdvZHppbmEgdyBmb3JtYWNpZSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiY3phcyB0cndhbmlhIElTT1wiLFxuICAgICAgICBpcHY0OiBcImFkcmVzIElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhZHJlcyBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJ6YWtyZXMgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwiemFrcmVzIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcImNpxIVnIHpuYWvDs3cgemFrb2Rvd2FueSB3IGZvcm1hY2llIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiY2nEhWcgem5ha8OzdyB6YWtvZG93YW55IHcgZm9ybWFjaWUgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcImNpxIVnIHpuYWvDs3cgdyBmb3JtYWNpZSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwibGljemJhIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJ3ZWrFm2NpZVwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcImxpY3piYVwiLFxuICAgICAgICBhcnJheTogXCJ0YWJsaWNhXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZMWCb3dlIGRhbmUgd2VqxZtjaW93ZTogb2N6ZWtpd2FubyBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBvdHJ6eW1hbm8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZMWCb3dlIGRhbmUgd2VqxZtjaW93ZTogb2N6ZWtpd2FubyAke2V4cGVjdGVkfSwgb3RyenltYW5vICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkxYJvd2UgZGFuZSB3ZWrFm2Npb3dlOiBvY3pla2l3YW5vICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkxYJvd2Egb3BjamE6IG9jemVraXdhbm8gamVkbmVqIHogd2FydG/Fm2NpICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFphIGR1xbxhIHdhcnRvxZvEhzogb2N6ZWtpd2FubywgxbxlICR7aXNzdWUub3JpZ2luID8/IFwid2FydG/Fm8SHXCJ9IGLEmWR6aWUgbWllxIcgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50w7N3XCJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBaYnl0IGR1xbwoeS9hL2UpOiBvY3pla2l3YW5vLCDFvGUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ3YXJ0b8WbxIdcIn0gYsSZZHppZSB3eW5vc2nEhyAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFphIG1hxYJhIHdhcnRvxZvEhzogb2N6ZWtpd2FubywgxbxlICR7aXNzdWUub3JpZ2luID8/IFwid2FydG/Fm8SHXCJ9IGLEmWR6aWUgbWllxIcgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50w7N3XCJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBaYnl0IG1hxYIoeS9hL2UpOiBvY3pla2l3YW5vLCDFvGUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ3YXJ0b8WbxIdcIn0gYsSZZHppZSB3eW5vc2nEhyAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZMWCb3d5IGNpxIVnIHpuYWvDs3c6IG11c2kgemFjenluYcSHIHNpxJkgb2QgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZMWCb3d5IGNpxIVnIHpuYWvDs3c6IG11c2kga2/FhGN6ecSHIHNpxJkgbmEgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkxYJvd3kgY2nEhWcgem5ha8OzdzogbXVzaSB6YXdpZXJhxIcgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVwcmF3aWTFgm93eSBjacSFZyB6bmFrw7N3OiBtdXNpIG9kcG93aWFkYcSHIHd6b3Jjb3dpICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZMWCb3coeS9hL2UpICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZMWCb3dhIGxpY3piYTogbXVzaSBiecSHIHdpZWxva3JvdG5vxZtjacSFICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVyb3pwb3puYW5lIGtsdWN6ZSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVwcmF3aWTFgm93eSBrbHVjeiB3ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIk5pZXByYXdpZMWCb3dlIGRhbmUgd2VqxZtjaW93ZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHIHcgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVwcmF3aWTFgm93ZSBkYW5lIHdlasWbY2lvd2VgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCJjYXJhY3RlcmVzXCIsIHZlcmI6IFwidGVyXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJ5dGVzXCIsIHZlcmI6IFwidGVyXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJpdGVuc1wiLCB2ZXJiOiBcInRlclwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIml0ZW5zXCIsIHZlcmI6IFwidGVyXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJwYWRyw6NvXCIsXG4gICAgICAgIGVtYWlsOiBcImVuZGVyZcOnbyBkZSBlLW1haWxcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRhIGUgaG9yYSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRhIElTT1wiLFxuICAgICAgICB0aW1lOiBcImhvcmEgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmHDp8OjbyBJU09cIixcbiAgICAgICAgaXB2NDogXCJlbmRlcmXDp28gSVB2NFwiLFxuICAgICAgICBpcHY2OiBcImVuZGVyZcOnbyBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJmYWl4YSBkZSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJmYWl4YSBkZSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJ0ZXh0byBjb2RpZmljYWRvIGVtIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiVVJMIGNvZGlmaWNhZGEgZW0gYmFzZTY0XCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcInRleHRvIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJuw7ptZXJvIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJlbnRyYWRhXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibsO6bWVyb1wiLFxuICAgICAgICBudWxsOiBcIm51bG9cIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGlwbyBpbnbDoWxpZG86IGVzcGVyYWRvIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIHJlY2ViaWRvICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUaXBvIGludsOhbGlkbzogZXNwZXJhZG8gJHtleHBlY3RlZH0sIHJlY2ViaWRvICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRW50cmFkYSBpbnbDoWxpZGE6IGVzcGVyYWRvICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgT3DDp8OjbyBpbnbDoWxpZGE6IGVzcGVyYWRhIHVtYSBkYXMgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE11aXRvIGdyYW5kZTogZXNwZXJhZG8gcXVlICR7aXNzdWUub3JpZ2luID8/IFwidmFsb3JcIn0gdGl2ZXNzZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRvc1wifWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBNdWl0byBncmFuZGU6IGVzcGVyYWRvIHF1ZSAke2lzc3VlLm9yaWdpbiA/PyBcInZhbG9yXCJ9IGZvc3NlICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTXVpdG8gcGVxdWVubzogZXNwZXJhZG8gcXVlICR7aXNzdWUub3JpZ2lufSB0aXZlc3NlICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgTXVpdG8gcGVxdWVubzogZXNwZXJhZG8gcXVlICR7aXNzdWUub3JpZ2lufSBmb3NzZSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRleHRvIGludsOhbGlkbzogZGV2ZSBjb21lw6dhciBjb20gXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRleHRvIGludsOhbGlkbzogZGV2ZSB0ZXJtaW5hciBjb20gXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGV4dG8gaW52w6FsaWRvOiBkZXZlIGluY2x1aXIgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZXh0byBpbnbDoWxpZG86IGRldmUgY29ycmVzcG9uZGVyIGFvIHBhZHLDo28gJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH0gaW52w6FsaWRvYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE7Dum1lcm8gaW52w6FsaWRvOiBkZXZlIHNlciBtw7psdGlwbG8gZGUgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENoYXZlJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IGRlc2NvbmhlY2lkYSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBDaGF2ZSBpbnbDoWxpZGEgZW0gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiRW50cmFkYSBpbnbDoWxpZGFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFZhbG9yIGludsOhbGlkbyBlbSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENhbXBvIGludsOhbGlkb2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmZ1bmN0aW9uIGdldFJ1c3NpYW5QbHVyYWwoY291bnQsIG9uZSwgZmV3LCBtYW55KSB7XG4gICAgY29uc3QgYWJzQ291bnQgPSBNYXRoLmFicyhjb3VudCk7XG4gICAgY29uc3QgbGFzdERpZ2l0ID0gYWJzQ291bnQgJSAxMDtcbiAgICBjb25zdCBsYXN0VHdvRGlnaXRzID0gYWJzQ291bnQgJSAxMDA7XG4gICAgaWYgKGxhc3RUd29EaWdpdHMgPj0gMTEgJiYgbGFzdFR3b0RpZ2l0cyA8PSAxOSkge1xuICAgICAgICByZXR1cm4gbWFueTtcbiAgICB9XG4gICAgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gb25lO1xuICAgIH1cbiAgICBpZiAobGFzdERpZ2l0ID49IDIgJiYgbGFzdERpZ2l0IDw9IDQpIHtcbiAgICAgICAgcmV0dXJuIGZldztcbiAgICB9XG4gICAgcmV0dXJuIG1hbnk7XG59XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwi0YHQuNC80LLQvtC7XCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcItGB0LjQvNCy0L7Qu9CwXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLRgdC40LzQstC+0LvQvtCyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCLQuNC80LXRgtGMXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwi0LHQsNC50YJcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwi0LHQsNC50YLQsFwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwi0LHQsNC50YJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcItC40LzQtdGC0YxcIixcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwi0Y3Qu9C10LzQtdC90YJcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwi0Y3Qu9C10LzQtdC90YLQsFwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwi0Y3Qu9C10LzQtdC90YLQvtCyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCLQuNC80LXRgtGMXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCLRjdC70LXQvNC10L3RglwiLFxuICAgICAgICAgICAgICAgIGZldzogXCLRjdC70LXQvNC10L3RgtCwXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCLRjdC70LXQvNC10L3RgtC+0LJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcItC40LzQtdGC0YxcIixcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCLQstCy0L7QtFwiLFxuICAgICAgICBlbWFpbDogXCJlbWFpbCDQsNC00YDQtdGBXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwi0Y3QvNC+0LTQt9C4XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyDQtNCw0YLQsCDQuCDQstGA0LXQvNGPXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPINC00LDRgtCwXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPINCy0YDQtdC80Y9cIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPINC00LvQuNGC0LXQu9GM0L3QvtGB0YLRjFwiLFxuICAgICAgICBpcHY0OiBcIklQdjQg0LDQtNGA0LXRgVwiLFxuICAgICAgICBpcHY2OiBcIklQdjYg0LDQtNGA0LXRgVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCDQtNC40LDQv9Cw0LfQvtC9XCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2INC00LjQsNC/0LDQt9C+0L1cIixcbiAgICAgICAgYmFzZTY0OiBcItGB0YLRgNC+0LrQsCDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcItGB0YLRgNC+0LrQsCDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiDRgdGC0YDQvtC60LBcIixcbiAgICAgICAgZTE2NDogXCLQvdC+0LzQtdGAIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCLQstCy0L7QtFwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcItGH0LjRgdC70L5cIixcbiAgICAgICAgYXJyYXk6IFwi0LzQsNGB0YHQuNCyXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdGL0Lkg0LLQstC+0LQ6INC+0LbQuNC00LDQu9C+0YHRjCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCDQv9C+0LvRg9GH0LXQvdC+ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQtdGA0L3Ri9C5INCy0LLQvtC0OiDQvtC20LjQtNCw0LvQvtGB0YwgJHtleHBlY3RlZH0sINC/0L7Qu9GD0YfQtdC90L4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQtdGA0L3Ri9C5INCy0LLQvtC0OiDQvtC20LjQtNCw0LvQvtGB0YwgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQtdGA0L3Ri9C5INCy0LDRgNC40LDQvdGCOiDQvtC20LjQtNCw0LvQvtGB0Ywg0L7QtNC90L4g0LjQtyAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBOdW1iZXIoaXNzdWUubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXQgPSBnZXRSdXNzaWFuUGx1cmFsKG1heFZhbHVlLCBzaXppbmcudW5pdC5vbmUsIHNpemluZy51bml0LmZldywgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0KHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0LUg0LfQvdCw0YfQtdC90LjQtTog0L7QttC40LTQsNC70L7RgdGMLCDRh9GC0L4gJHtpc3N1ZS5vcmlnaW4gPz8gXCLQt9C90LDRh9C10L3QuNC1XCJ9INCx0YPQtNC10YIg0LjQvNC10YLRjCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHt1bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg0KHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0LUg0LfQvdCw0YfQtdC90LjQtTog0L7QttC40LTQsNC70L7RgdGMLCDRh9GC0L4gJHtpc3N1ZS5vcmlnaW4gPz8gXCLQt9C90LDRh9C10L3QuNC1XCJ9INCx0YPQtNC10YIgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVmFsdWUgPSBOdW1iZXIoaXNzdWUubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXQgPSBnZXRSdXNzaWFuUGx1cmFsKG1pblZhbHVlLCBzaXppbmcudW5pdC5vbmUsIHNpemluZy51bml0LmZldywgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0KHQu9C40YjQutC+0Lwg0LzQsNC70LXQvdGM0LrQvtC1INC30L3QsNGH0LXQvdC40LU6INC+0LbQuNC00LDQu9C+0YHRjCwg0YfRgtC+ICR7aXNzdWUub3JpZ2lufSDQsdGD0LTQtdGCINC40LzQtdGC0YwgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7dW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYNCh0LvQuNGI0LrQvtC8INC80LDQu9C10L3RjNC60L7QtSDQt9C90LDRh9C10L3QuNC1OiDQvtC20LjQtNCw0LvQvtGB0YwsINGH0YLQviAke2lzc3VlLm9yaWdpbn0g0LHRg9C00LXRgiAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdCw0Y8g0YHRgtGA0L7QutCwOiDQtNC+0LvQttC90LAg0L3QsNGH0LjQvdCw0YLRjNGB0Y8g0YEgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdCw0Y8g0YHRgtGA0L7QutCwOiDQtNC+0LvQttC90LAg0LfQsNC60LDQvdGH0LjQstCw0YLRjNGB0Y8g0L3QsCBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10LLQtdGA0L3QsNGPINGB0YLRgNC+0LrQsDog0LTQvtC70LbQvdCwINGB0L7QtNC10YDQttCw0YLRjCBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdCw0Y8g0YHRgtGA0L7QutCwOiDQtNC+0LvQttC90LAg0YHQvtC+0YLQstC10YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvdGDICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdGL0LkgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdCy0LXRgNC90L7QtSDRh9C40YHQu9C+OiDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LrRgNCw0YLQvdGL0LwgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXRgNCw0YHQv9C+0LfQvdCw0L3QvSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLRi9C1XCIgOiBcItGL0LlcIn0g0LrQu9GO0Ycke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwi0LhcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdGL0Lkg0LrQu9GO0Ycg0LIgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi0J3QtdCy0LXRgNC90YvQtSDQstGF0L7QtNC90YvQtSDQtNCw0L3QvdGL0LVcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQsiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQstC10YDQvdGL0LUg0LLRhdC+0LTQvdGL0LUg0LTQsNC90L3Ri9C1YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwiem5ha292XCIsIHZlcmI6IFwiaW1ldGlcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwiYmFqdG92XCIsIHZlcmI6IFwiaW1ldGlcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcImVsZW1lbnRvdlwiLCB2ZXJiOiBcImltZXRpXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiZWxlbWVudG92XCIsIHZlcmI6IFwiaW1ldGlcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcInZub3NcIixcbiAgICAgICAgZW1haWw6IFwiZS1wb8WhdG5pIG5hc2xvdlwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYXR1bSBpbiDEjWFzXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIGRhdHVtXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIMSNYXNcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIHRyYWphbmplXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBuYXNsb3ZcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IG5hc2xvdlwiLFxuICAgICAgICBjaWRydjQ6IFwib2JzZWcgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwib2JzZWcgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0IGtvZGlyYW4gbml6XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwga29kaXJhbiBuaXpcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBuaXpcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCDFoXRldmlsa2FcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcInZub3NcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCLFoXRldmlsb1wiLFxuICAgICAgICBhcnJheTogXCJ0YWJlbGFcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZlbiB2bm9zOiBwcmnEjWFrb3Zhbm8gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcHJlamV0byAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZlbiB2bm9zOiBwcmnEjWFrb3Zhbm8gJHtleHBlY3RlZH0sIHByZWpldG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdmVuIHZub3M6IHByacSNYWtvdmFubyAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmVsamF2bmEgbW/Fvm5vc3Q6IHByacSNYWtvdmFubyBlbm8gaXptZWQgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFByZXZlbGlrbzogcHJpxI1ha292YW5vLCBkYSBibyAke2lzc3VlLm9yaWdpbiA/PyBcInZyZWRub3N0XCJ9IGltZWxvICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudG92XCJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFByZXZlbGlrbzogcHJpxI1ha292YW5vLCBkYSBibyAke2lzc3VlLm9yaWdpbiA/PyBcInZyZWRub3N0XCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgUHJlbWFqaG5vOiBwcmnEjWFrb3Zhbm8sIGRhIGJvICR7aXNzdWUub3JpZ2lufSBpbWVsbyAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFByZW1hamhubzogcHJpxI1ha292YW5vLCBkYSBibyAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmVsamF2ZW4gbml6OiBtb3JhIHNlIHphxI1ldGkgeiBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmVsamF2ZW4gbml6OiBtb3JhIHNlIGtvbsSNYXRpIHogXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZlbiBuaXo6IG1vcmEgdnNlYm92YXRpIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZlbiBuaXo6IG1vcmEgdXN0cmV6YXRpIHZ6b3JjdSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdmVuICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmVsamF2bm8gxaF0ZXZpbG86IG1vcmEgYml0aSB2ZcSNa3JhdG5payAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmVwcmVwb3puYW4ke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiaSBrbGp1xI1pXCIgOiBcIiBrbGp1xI1cIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZlbiBrbGp1xI0gdiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXZlbGphdmVuIHZub3NcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmVsamF2bmEgdnJlZG5vc3QgdiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXZlbGphdmVuIHZub3NcIjtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwidGVja2VuXCIsIHZlcmI6IFwiYXR0IGhhXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJ5dGVzXCIsIHZlcmI6IFwiYXR0IGhhXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJvYmpla3RcIiwgdmVyYjogXCJhdHQgaW5uZWjDpWxsYVwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIm9iamVrdFwiLCB2ZXJiOiBcImF0dCBpbm5laMOlbGxhXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJyZWd1bGrDpHJ0IHV0dHJ5Y2tcIixcbiAgICAgICAgZW1haWw6IFwiZS1wb3N0YWRyZXNzXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPLWRhdHVtIG9jaCB0aWRcIixcbiAgICAgICAgZGF0ZTogXCJJU08tZGF0dW1cIixcbiAgICAgICAgdGltZTogXCJJU08tdGlkXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTy12YXJha3RpZ2hldFwiLFxuICAgICAgICBpcHY0OiBcIklQdjQtaW50ZXJ2YWxsXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Ni1pbnRlcnZhbGxcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtc3Bla3RydW1cIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYtc3Bla3RydW1cIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1rb2RhZCBzdHLDpG5nXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwta29kYWQgc3Ryw6RuZ1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OLXN0csOkbmdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NC1udW1tZXJcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIm1hbGwtbGl0ZXJhbFwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcImFudGFsXCIsXG4gICAgICAgIGFycmF5OiBcImxpc3RhXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcgaW5tYXRuaW5nOiBmw7ZydsOkbnRhdCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBmaWNrICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlnIGlubWF0bmluZzogZsO2cnbDpG50YXQgJHtleHBlY3RlZH0sIGZpY2sgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlnIGlubWF0bmluZzogZsO2cnbDpG50YXQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlndCB2YWw6IGbDtnJ2w6RudGFkZSBlbiBhdiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGw7ZyIHN0b3IodCk6IGbDtnJ2w6RudGFkZSAke2lzc3VlLm9yaWdpbiA/PyBcInbDpHJkZXRcIn0gYXR0IGhhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudFwifWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRsO2ciBzdG9yKHQpOiBmw7ZydsOkbnRhdCAke2lzc3VlLm9yaWdpbiA/PyBcInbDpHJkZXRcIn0gYXR0IGhhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRsO2ciBsaXRlKHQpOiBmw7ZydsOkbnRhZGUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2w6RyZGV0XCJ9IGF0dCBoYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYEbDtnIgbGl0ZSh0KTogZsO2cnbDpG50YWRlICR7aXNzdWUub3JpZ2luID8/IFwidsOkcmRldFwifSBhdHQgaGEgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcgc3Ryw6RuZzogbcOlc3RlIGLDtnJqYSBtZWQgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlnIHN0csOkbmc6IG3DpXN0ZSBzbHV0YSBtZWQgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgT2dpbHRpZyBzdHLDpG5nOiBtw6VzdGUgaW5uZWjDpWxsYSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcgc3Ryw6RuZzogbcOlc3RlIG1hdGNoYSBtw7Zuc3RyZXQgXCIke19pc3N1ZS5wYXR0ZXJufVwiYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcodCkgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgT2dpbHRpZ3QgdGFsOiBtw6VzdGUgdmFyYSBlbiBtdWx0aXBlbCBhdiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIk9rw6RuZGEgbnlja2xhclwiIDogXCJPa8OkbmQgbnlja2VsXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcgbnlja2VsIGkgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2w6RyZGV0XCJ9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiT2dpbHRpZyBpbnB1dFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgT2dpbHRpZ3QgdsOkcmRlIGkgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2w6RyZGV0XCJ9YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlnIGlucHV0YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwi4K6O4K604K+B4K6k4K+N4K6k4K+B4K6V4K+N4K6V4K6z4K+NXCIsIHZlcmI6IFwi4K6V4K+K4K6j4K+N4K6f4K6/4K6w4K+B4K6V4K+N4K6VIOCuteCvh+Cuo+CvjeCun+CvgeCuruCvjVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLgrqrgr4jgrp/gr43grp/gr4HgrpXgrrPgr41cIiwgdmVyYjogXCLgrpXgr4rgrqPgr43grp/grr/grrDgr4HgrpXgr43grpUg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLgrongrrHgr4Hgrqrgr43grqrgr4HgrpXgrrPgr41cIiwgdmVyYjogXCLgrpXgr4rgrqPgr43grp/grr/grrDgr4HgrpXgr43grpUg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwi4K6J4K6x4K+B4K6q4K+N4K6q4K+B4K6V4K6z4K+NXCIsIHZlcmI6IFwi4K6V4K+K4K6j4K+N4K6f4K6/4K6w4K+B4K6V4K+N4K6VIOCuteCvh+Cuo+CvjeCun+CvgeCuruCvjVwiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi4K6J4K6z4K+N4K6z4K+A4K6f4K+BXCIsXG4gICAgICAgIGVtYWlsOiBcIuCuruCuv+CuqeCvjeCuqeCunuCvjeCumuCusuCvjSDgrq7gr4HgrpXgrrXgrrDgrr9cIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08g4K6k4K+H4K6k4K6/IOCuqOCvh+CusOCuruCvjVwiLFxuICAgICAgICBkYXRlOiBcIklTTyDgrqTgr4fgrqTgrr9cIixcbiAgICAgICAgdGltZTogXCJJU08g4K6o4K+H4K6w4K6u4K+NXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyDgrpXgrr7grrIg4K6F4K6z4K614K+BXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCDgrq7gr4HgrpXgrrXgrrDgrr9cIixcbiAgICAgICAgaXB2NjogXCJJUHY2IOCuruCvgeCuleCuteCusOCuv1wiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCDgrrXgrrDgrq7gr43grqrgr4FcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYg4K614K6w4K6u4K+N4K6q4K+BXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5jb2RlZCDgrprgrrDgrq7gr41cIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1lbmNvZGVkIOCumuCusOCuruCvjVwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIOCumuCusOCuruCvjVwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IOCujuCuo+CvjVwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCLgro7grqPgr41cIixcbiAgICAgICAgYXJyYXk6IFwi4K6F4K6j4K6/XCIsXG4gICAgICAgIG51bGw6IFwi4K614K+G4K6x4K+B4K6u4K+IXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOCupOCuteCuseCuvuCuqSDgrongrrPgr43grrPgr4Dgrp/gr4E6IOCujuCupOCuv+CusOCvjeCuquCuvuCusOCvjeCuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CupOCvgSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCDgrqrgr4bgrrHgrqrgr43grqrgrp/gr43grp/grqTgr4EgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYOCupOCuteCuseCuvuCuqSDgrongrrPgr43grrPgr4Dgrp/gr4E6IOCujuCupOCuv+CusOCvjeCuquCuvuCusOCvjeCuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CupOCvgSAke2V4cGVjdGVkfSwg4K6q4K+G4K6x4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4K6k4K614K6x4K6+4K6pIOCuieCus+CvjeCus+CvgOCun+CvgTog4K6O4K6k4K6/4K6w4K+N4K6q4K6+4K6w4K+N4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg4K6k4K614K6x4K6+4K6pIOCuteCuv+CusOCvgeCuquCvjeCuquCuruCvjTog4K6O4K6k4K6/4K6w4K+N4K6q4K6+4K6w4K+N4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfSDgrofgrrLgr40g4K6S4K6p4K+N4K6x4K+BYDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4K6u4K6/4K6VIOCuquCvhuCusOCuv+Cur+CupOCvgTog4K6O4K6k4K6/4K6w4K+N4K6q4K6+4K6w4K+N4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BICR7aXNzdWUub3JpZ2luID8/IFwi4K6u4K6k4K6/4K6q4K+N4K6q4K+BXCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwi4K6J4K6x4K+B4K6q4K+N4K6q4K+B4K6V4K6z4K+NXCJ9IOCuhuCulSDgrofgrrDgr4HgrpXgr43grpUg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDgrq7grr/grpUg4K6q4K+G4K6w4K6/4K6v4K6k4K+BOiDgro7grqTgrr/grrDgr43grqrgrr7grrDgr43grpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EgJHtpc3N1ZS5vcmlnaW4gPz8gXCLgrq7grqTgrr/grqrgr43grqrgr4FcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9IOCuhuCulSDgrofgrrDgr4HgrpXgr43grpUg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDgrq7grr/grpXgrprgr40g4K6a4K6/4K6x4K6/4K6v4K6k4K+BOiDgro7grqTgrr/grrDgr43grqrgrr7grrDgr43grpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EgJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSDgrobgrpUg4K6H4K6w4K+B4K6V4K+N4K6VIOCuteCvh+Cuo+CvjeCun+CvgeCuruCvjWA7IC8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg4K6u4K6/4K6V4K6a4K+NIOCumuCuv+CuseCuv+Cur+CupOCvgTog4K6O4K6k4K6/4K6w4K+N4K6q4K6+4K6w4K+N4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0g4K6G4K6VIOCuh+CusOCvgeCuleCvjeCulSDgrrXgr4fgrqPgr43grp/gr4Hgrq7gr41gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOCupOCuteCuseCuvuCuqSDgrprgrrDgrq7gr406IFwiJHtfaXNzdWUucHJlZml4fVwiIOCuh+CusuCvjSDgrqTgr4rgrp/grpngr43grpUg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDgrqTgrrXgrrHgrr7grqkg4K6a4K6w4K6u4K+NOiBcIiR7X2lzc3VlLnN1ZmZpeH1cIiDgrofgrrLgr40g4K6u4K+B4K6f4K6/4K614K6f4K+I4K6vIOCuteCvh+Cuo+CvjeCun+CvgeCuruCvjWA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDgrqTgrrXgrrHgrr7grqkg4K6a4K6w4K6u4K+NOiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiIOCukCDgrongrrPgr43grrPgrp/grpXgr43grpUg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOCupOCuteCuseCuvuCuqSDgrprgrrDgrq7gr406ICR7X2lzc3VlLnBhdHRlcm59IOCuruCvgeCuseCviOCuquCuvuCun+CvjeCun+CvgeCun+CuqeCvjSDgrqrgr4rgrrDgr4Hgrqjgr43grqQg4K614K+H4K6j4K+N4K6f4K+B4K6u4K+NYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOCupOCuteCuseCuvuCuqSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDgrqTgrrXgrrHgrr7grqkg4K6O4K6j4K+NOiAke2lzc3VlLmRpdmlzb3J9IOCuh+CuqeCvjSDgrqrgrrLgrq7grr7grpUg4K6H4K6w4K+B4K6V4K+N4K6VIOCuteCvh+Cuo+CvjeCun+CvgeCuruCvjWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOCuheCun+CviOCur+CuvuCus+CuruCvjSDgrqTgr4bgrrDgrr/grq/grr7grqQg4K614K6/4K6a4K+IJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIuCuleCus+CvjVwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IOCuh+CusuCvjSDgrqTgrrXgrrHgrr7grqkg4K614K6/4K6a4K+IYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi4K6k4K614K6x4K6+4K6pIOCuieCus+CvjeCus+CvgOCun+CvgVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IOCuh+CusuCvjSDgrqTgrrXgrrHgrr7grqkg4K6u4K6k4K6/4K6q4K+N4K6q4K+BYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDgrqTgrrXgrrHgrr7grqkg4K6J4K6z4K+N4K6z4K+A4K6f4K+BYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwi4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijXCIsIHZlcmI6IFwi4LiE4Lin4Lij4Lih4Li1XCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcIuC5hOC4muC4leC5jFwiLCB2ZXJiOiBcIuC4hOC4p+C4o+C4oeC4tVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwi4Lij4Liy4Lii4LiB4Liy4LijXCIsIHZlcmI6IFwi4LiE4Lin4Lij4Lih4Li1XCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwi4Lij4Liy4Lii4LiB4Liy4LijXCIsIHZlcmI6IFwi4LiE4Lin4Lij4Lih4Li1XCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCLguILguYnguK3guKHguLnguKXguJfguLXguYjguJvguYnguK3guJlcIixcbiAgICAgICAgZW1haWw6IFwi4LiX4Li14LmI4Lit4Lii4Li54LmI4Lit4Li14LmA4Lih4LilXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwi4Lit4Li04LmC4Lih4LiI4Li0XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIuC4p+C4seC4meC4l+C4teC5iOC5gOC4p+C4peC4suC5geC4muC4miBJU09cIixcbiAgICAgICAgZGF0ZTogXCLguKfguLHguJnguJfguLXguYjguYHguJrguJogSVNPXCIsXG4gICAgICAgIHRpbWU6IFwi4LmA4Lin4Lil4Liy4LmB4Lia4LiaIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCLguIrguYjguKfguIfguYDguKfguKXguLLguYHguJrguJogSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwi4LiX4Li14LmI4Lit4Lii4Li54LmIIElQdjRcIixcbiAgICAgICAgaXB2NjogXCLguJfguLXguYjguK3guKLguLnguYggSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwi4LiK4LmI4Lin4LiHIElQIOC5geC4muC4miBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCLguIrguYjguKfguIcgSVAg4LmB4Lia4LiaIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcIuC4guC5ieC4reC4hOC4p+C4suC4oeC5geC4muC4miBCYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIuC4guC5ieC4reC4hOC4p+C4suC4oeC5geC4muC4miBCYXNlNjQg4Liq4Liz4Lir4Lij4Lix4LiaIFVSTFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCLguILguYnguK3guITguKfguLLguKHguYHguJrguJogSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIuC5gOC4muC4reC4o+C5jOC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC4o+C4sOC4q+C4p+C5iOC4suC4h+C4m+C4o+C4sOC5gOC4l+C4qCAoRS4xNjQpXCIsXG4gICAgICAgIGp3dDogXCLguYLguJfguYDguITguJkgSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi4LiC4LmJ4Lit4Lih4Li54Lil4LiX4Li14LmI4Lib4LmJ4Lit4LiZXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwi4LiV4Lix4Lin4LmA4Lil4LiCXCIsXG4gICAgICAgIGFycmF5OiBcIuC4reC4suC4o+C5jOC5gOC4o+C4ouC5jCAoQXJyYXkpXCIsXG4gICAgICAgIG51bGw6IFwi4LmE4Lih4LmI4Lih4Li14LiE4LmI4LiyIChudWxsKVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDguJvguKPguLDguYDguKDguJfguILguYnguK3guKHguLnguKXguYTguKHguYjguJbguLnguIHguJXguYnguK3guIc6IOC4hOC4p+C4o+C5gOC4m+C5h+C4mSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9IOC5geC4leC5iOC5hOC4lOC5ieC4o+C4seC4miAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg4Lib4Lij4Liw4LmA4Lig4LiX4LiC4LmJ4Lit4Lih4Li54Lil4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiDguITguKfguKPguYDguJvguYfguJkgJHtleHBlY3RlZH0g4LmB4LiV4LmI4LmE4LiU4LmJ4Lij4Lix4LiaICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4LiE4LmI4Liy4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiDguITguKfguKPguYDguJvguYfguJkgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDguJXguLHguKfguYDguKXguLfguK3guIHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIc6IOC4hOC4p+C4o+C5gOC4m+C5h+C4meC4q+C4meC4tuC5iOC4h+C5g+C4mSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwi4LmE4Lih4LmI4LmA4LiB4Li04LiZXCIgOiBcIuC4meC5ieC4reC4ouC4geC4p+C5iOC4slwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4LmA4LiB4Li04LiZ4LiB4Liz4Lir4LiZ4LiUOiAke2lzc3VlLm9yaWdpbiA/PyBcIuC4hOC5iOC4slwifSDguITguKfguKPguKHguLUke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLguKPguLLguKLguIHguLLguKNcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg4LmA4LiB4Li04LiZ4LiB4Liz4Lir4LiZ4LiUOiAke2lzc3VlLm9yaWdpbiA/PyBcIuC4hOC5iOC4slwifSDguITguKfguKPguKHguLUke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwi4Lit4Lii4LmI4Liy4LiH4LiZ4LmJ4Lit4LiiXCIgOiBcIuC4oeC4suC4geC4geC4p+C5iOC4slwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDguJnguYnguK3guKLguIHguKfguYjguLLguIHguLPguKvguJnguJQ6ICR7aXNzdWUub3JpZ2lufSDguITguKfguKPguKHguLUke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDguJnguYnguK3guKLguIHguKfguYjguLLguIHguLPguKvguJnguJQ6ICR7aXNzdWUub3JpZ2lufSDguITguKfguKPguKHguLUke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOC4o+C4ueC4m+C5geC4muC4muC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hzog4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LiV4LmJ4Lit4LiH4LiC4Li24LmJ4LiZ4LiV4LmJ4LiZ4LiU4LmJ4Lin4LiiIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4Lij4Li54Lib4LmB4Lia4Lia4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiDguILguYnguK3guITguKfguLLguKHguJXguYnguK3guIfguKXguIfguJfguYnguLLguKLguJTguYnguKfguKIgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4Lij4Li54Lib4LmB4Lia4Lia4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiDguILguYnguK3guITguKfguLLguKHguJXguYnguK3guIfguKHguLUgXCIke19pc3N1ZS5pbmNsdWRlc31cIiDguK3guKLguLnguYjguYPguJnguILguYnguK3guITguKfguLLguKFgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4Lij4Li54Lib4LmB4Lia4Lia4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiDguJXguYnguK3guIfguJXguKPguIfguIHguLHguJrguKPguLnguJvguYHguJrguJrguJfguLXguYjguIHguLPguKvguJnguJQgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg4Lij4Li54Lib4LmB4Lia4Lia4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDguJXguLHguKfguYDguKXguILguYTguKHguYjguJbguLnguIHguJXguYnguK3guIc6IOC4leC5ieC4reC4h+C5gOC4m+C5h+C4meC4iOC4s+C4meC4p+C4meC4l+C4teC5iOC4q+C4suC4o+C4lOC5ieC4p+C4oiAke2lzc3VlLmRpdmlzb3J9IOC5hOC4lOC5ieC4peC4h+C4leC4seC4p2A7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOC4nuC4muC4hOC4teC4ouC5jOC4l+C4teC5iOC5hOC4oeC5iOC4o+C4ueC5ieC4iOC4seC4gTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDguITguLXguKLguYzguYTguKHguYjguJbguLnguIHguJXguYnguK3guIfguYPguJkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi4LiC4LmJ4Lit4Lih4Li54Lil4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHOiDguYTguKHguYjguJXguKPguIfguIHguLHguJrguKPguLnguJvguYHguJrguJrguKLguLnguYDguJnguLXguKLguJnguJfguLXguYjguIHguLPguKvguJnguJTguYTguKfguYlcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOC4guC5ieC4reC4oeC4ueC4peC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4h+C5g+C4mSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOC4guC5ieC4reC4oeC4ueC4peC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4h2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImthcmFrdGVyXCIsIHZlcmI6IFwib2xtYWzEsVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJiYXl0XCIsIHZlcmI6IFwib2xtYWzEsVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwiw7bEn2VcIiwgdmVyYjogXCJvbG1hbMSxXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwiw7bEn2VcIiwgdmVyYjogXCJvbG1hbMSxXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJnaXJkaVwiLFxuICAgICAgICBlbWFpbDogXCJlLXBvc3RhIGFkcmVzaVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyB0YXJpaCB2ZSBzYWF0XCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIHRhcmloXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHNhYXRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIHPDvHJlXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBhZHJlc2lcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGFkcmVzaVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBhcmFsxLHEn8SxXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IGFyYWzEscSfxLFcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NCBpbGUgxZ9pZnJlbGVubWnFnyBtZXRpblwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsIGlsZSDFn2lmcmVsZW5tacWfIG1ldGluXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gZGl6ZXNpXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgc2F5xLFzxLFcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIsWeYWJsb24gZGl6ZXNpXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBHZcOnZXJzaXogZGXEn2VyOiBiZWtsZW5lbiBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBhbMSxbmFuICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBHZcOnZXJzaXogZGXEn2VyOiBiZWtsZW5lbiAke2V4cGVjdGVkfSwgYWzEsW5hbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEdlw6dlcnNpeiBkZcSfZXI6IGJla2xlbmVuICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgR2XDp2Vyc2l6IHNlw6dlbmVrOiBhxZ9hxJ/EsWRha2lsZXJkZW4gYmlyaSBvbG1hbMSxOiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw4dvayBiw7x5w7xrOiBiZWtsZW5lbiAke2lzc3VlLm9yaWdpbiA/PyBcImRlxJ9lclwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIsO2xJ9lXCJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYMOHb2sgYsO8ecO8azogYmVrbGVuZW4gJHtpc3N1ZS5vcmlnaW4gPz8gXCJkZcSfZXJcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgw4dvayBrw7zDp8O8azogYmVrbGVuZW4gJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDDh29rIGvDvMOnw7xrOiBiZWtsZW5lbiAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBHZcOnZXJzaXogbWV0aW46IFwiJHtfaXNzdWUucHJlZml4fVwiIGlsZSBiYcWfbGFtYWzEsWA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgR2XDp2Vyc2l6IG1ldGluOiBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBpbGUgYml0bWVsaWA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBHZcOnZXJzaXogbWV0aW46IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIgacOnZXJtZWxpYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEdlw6dlcnNpeiBtZXRpbjogJHtfaXNzdWUucGF0dGVybn0gZGVzZW5pbmUgdXltYWzEsWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBHZcOnZXJzaXogJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgR2XDp2Vyc2l6IHNhecSxOiAke2lzc3VlLmRpdmlzb3J9IGlsZSB0YW0gYsO2bMO8bmViaWxtZWxpYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVGFuxLFubWF5YW4gYW5haHRhciR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJsYXJcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBpw6dpbmRlIGdlw6dlcnNpeiBhbmFodGFyYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiR2XDp2Vyc2l6IGRlxJ9lclwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGnDp2luZGUgZ2XDp2Vyc2l6IGRlxJ9lcmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgR2XDp2Vyc2l6IGRlxJ9lcmA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcItGB0LjQvNCy0L7Qu9GW0LJcIiwgdmVyYjogXCLQvNCw0YLQuNC80LVcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwi0LHQsNC50YLRltCyXCIsIHZlcmI6IFwi0LzQsNGC0LjQvNC1XCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLQtdC70LXQvNC10L3RgtGW0LJcIiwgdmVyYjogXCLQvNCw0YLQuNC80LVcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCLQtdC70LXQvNC10L3RgtGW0LJcIiwgdmVyYjogXCLQvNCw0YLQuNC80LVcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcItCy0YXRltC00L3RliDQtNCw0L3RllwiLFxuICAgICAgICBlbWFpbDogXCLQsNC00YDQtdGB0LAg0LXQu9C10LrRgtGA0L7QvdC90L7RlyDQv9C+0YjRgtC4XCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwi0LXQvNC+0LTQt9GWXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcItC00LDRgtCwINGC0LAg0YfQsNGBIElTT1wiLFxuICAgICAgICBkYXRlOiBcItC00LDRgtCwIElTT1wiLFxuICAgICAgICB0aW1lOiBcItGH0LDRgSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwi0YLRgNC40LLQsNC70ZbRgdGC0YwgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwi0LDQtNGA0LXRgdCwIElQdjRcIixcbiAgICAgICAgaXB2NjogXCLQsNC00YDQtdGB0LAgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwi0LTRltCw0L/QsNC30L7QvSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCLQtNGW0LDQv9Cw0LfQvtC9IElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcItGA0Y/QtNC+0Log0YMg0LrQvtC00YPQstCw0L3QvdGWIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwi0YDRj9C00L7QuiDRgyDQutC+0LTRg9Cy0LDQvdC90ZYgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcItGA0Y/QtNC+0LogSlNPTlwiLFxuICAgICAgICBlMTY0OiBcItC90L7QvNC10YAgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItCy0YXRltC00L3RliDQtNCw0L3RllwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcItGH0LjRgdC70L5cIixcbiAgICAgICAgYXJyYXk6IFwi0LzQsNGB0LjQslwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10L/RgNCw0LLQuNC70YzQvdGWINCy0YXRltC00L3RliDQtNCw0L3Rljog0L7Rh9GW0LrRg9GU0YLRjNGB0Y8gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwg0L7RgtGA0LjQvNCw0L3QviAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3RliDQstGF0ZbQtNC90ZYg0LTQsNC90ZY6INC+0YfRltC60YPRlNGC0YzRgdGPICR7ZXhwZWN0ZWR9LCDQvtGC0YDQuNC80LDQvdC+ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3RliDQstGF0ZbQtNC90ZYg0LTQsNC90ZY6INC+0YfRltC60YPRlNGC0YzRgdGPICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDQvtC/0YbRltGPOiDQvtGH0ZbQutGD0ZTRgtGM0YHRjyDQvtC00L3QtSDQtyAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0JfQsNC90LDQtNGC0L4g0LLQtdC70LjQutC1OiDQvtGH0ZbQutGD0ZTRgtGM0YHRjywg0YnQviAke2lzc3VlLm9yaWdpbiA/PyBcItC30L3QsNGH0LXQvdC90Y9cIn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLQtdC70LXQvNC10L3RgtGW0LJcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg0JfQsNC90LDQtNGC0L4g0LLQtdC70LjQutC1OiDQvtGH0ZbQutGD0ZTRgtGM0YHRjywg0YnQviAke2lzc3VlLm9yaWdpbiA/PyBcItC30L3QsNGH0LXQvdC90Y9cIn0g0LHRg9C00LUgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDQl9Cw0L3QsNC00YLQviDQvNCw0LvQtTog0L7Rh9GW0LrRg9GU0YLRjNGB0Y8sINGJ0L4gJHtpc3N1ZS5vcmlnaW59ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg0JfQsNC90LDQtNGC0L4g0LzQsNC70LU6INC+0YfRltC60YPRlNGC0YzRgdGPLCDRidC+ICR7aXNzdWUub3JpZ2lufSDQsdGD0LTQtSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQv9GA0LDQstC40LvRjNC90LjQuSDRgNGP0LTQvtC6OiDQv9C+0LLQuNC90LXQvSDQv9C+0YfQuNC90LDRgtC40YHRjyDQtyBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5INGA0Y/QtNC+0Lo6INC/0L7QstC40L3QtdC9INC30LDQutGW0L3Rh9GD0LLQsNGC0LjRgdGPINC90LAgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5INGA0Y/QtNC+0Lo6INC/0L7QstC40L3QtdC9INC80ZbRgdGC0LjRgtC4IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5INGA0Y/QtNC+0Lo6INC/0L7QstC40L3QtdC9INCy0ZbQtNC/0L7QstGW0LTQsNGC0Lgg0YjQsNCx0LvQvtC90YMgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg0J3QtdC/0YDQsNCy0LjQu9GM0L3QuNC5ICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQv9GA0LDQstC40LvRjNC90LUg0YfQuNGB0LvQvjog0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0LrRgNCw0YLQvdC40LwgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXRgNC+0LfQv9GW0LfQvdCw0L3QuNC5INC60LvRjtGHJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcItGWXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDQndC10L/RgNCw0LLQuNC70YzQvdC40Lkg0LrQu9GO0Ycg0YMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi0J3QtdC/0YDQsNCy0LjQu9GM0L3RliDQstGF0ZbQtNC90ZYg0LTQsNC90ZZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQv9GA0LDQstC40LvRjNC90LUg0LfQvdCw0YfQtdC90L3RjyDRgyAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCd0LXQv9GA0LDQstC40LvRjNC90ZYg0LLRhdGW0LTQvdGWINC00LDQvdGWYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCB1ayBmcm9tIFwiLi91ay5qc1wiO1xuLyoqIEBkZXByZWNhdGVkIFVzZSBgdWtgIGluc3RlYWQuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHVrKCk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwi2K3YsdmI2YFcIiwgdmVyYjogXCLbgdmI2YbYp1wiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLYqNin2KbZudizXCIsIHZlcmI6IFwi24HZiNmG2KdcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcItii2KbZudmF2LJcIiwgdmVyYjogXCLbgdmI2YbYp1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcItii2KbZudmF2LJcIiwgdmVyYjogXCLbgdmI2YbYp1wiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi2KfZhiDZvtm5XCIsXG4gICAgICAgIGVtYWlsOiBcItin24wg2YXbjNmEINin24zaiNix24zYs1wiLFxuICAgICAgICB1cmw6IFwi24zZiCDYotixINin24zZhFwiLFxuICAgICAgICBlbW9qaTogXCLYp9uM2YXZiNis24xcIixcbiAgICAgICAgdXVpZDogXCLbjNmIINuM2Ygg2KLYptuMINqI24xcIixcbiAgICAgICAgdXVpZHY0OiBcItuM2Ygg24zZiCDYotim24wg2ojbjCDZiNuMIDRcIixcbiAgICAgICAgdXVpZHY2OiBcItuM2Ygg24zZiCDYotim24wg2ojbjCDZiNuMIDZcIixcbiAgICAgICAgbmFub2lkOiBcItmG24zZhtmIINii2KbbjCDaiNuMXCIsXG4gICAgICAgIGd1aWQ6IFwi2KzbjCDbjNmIINii2KbbjCDaiNuMXCIsXG4gICAgICAgIGN1aWQ6IFwi2LPbjCDbjNmIINii2KbbjCDaiNuMXCIsXG4gICAgICAgIGN1aWQyOiBcItiz24wg24zZiCDYotim24wg2ojbjCAyXCIsXG4gICAgICAgIHVsaWQ6IFwi24zZiCDYp9uM2YQg2KLYptuMINqI24xcIixcbiAgICAgICAgeGlkOiBcItin24zaqdizINii2KbbjCDaiNuMXCIsXG4gICAgICAgIGtzdWlkOiBcItqp25Ig2KfbjNizINuM2Ygg2KLYptuMINqI24xcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwi2KLYptuMINin24zYsyDYp9mIINqI24zZuSDZudin2KbZhVwiLFxuICAgICAgICBkYXRlOiBcItii2KbbjCDYp9uM2LMg2KfZiCDYqtin2LHbjNiuXCIsXG4gICAgICAgIHRpbWU6IFwi2KLYptuMINin24zYsyDYp9mIINmI2YLYqlwiLFxuICAgICAgICBkdXJhdGlvbjogXCLYotim24wg2KfbjNizINin2Ygg2YXYr9iqXCIsXG4gICAgICAgIGlwdjQ6IFwi2KLYptuMINm+24wg2YjbjCA0INin24zaiNix24zYs1wiLFxuICAgICAgICBpcHY2OiBcItii2KbbjCDZvtuMINmI24wgNiDYp9uM2ojYsduM2LNcIixcbiAgICAgICAgY2lkcnY0OiBcItii2KbbjCDZvtuMINmI24wgNCDYsduM2YbYrFwiLFxuICAgICAgICBjaWRydjY6IFwi2KLYptuMINm+24wg2YjbjCA2INix24zZhtisXCIsXG4gICAgICAgIGJhc2U2NDogXCLYqNuM2LMgNjQg2KfZhiDaqdmI2ojaiCDYs9m52LHZhtqvXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCLYqNuM2LMgNjQg24zZiCDYotixINin24zZhCDYp9mGINqp2YjaiNqIINiz2bnYsdmG2q9cIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwi2KzbkiDYp9uM2LMg2KfZiCDYp9uM2YYg2LPZudix2Ybar1wiLFxuICAgICAgICBlMTY0OiBcItin24wgMTY0INmG2YXYqNixXCIsXG4gICAgICAgIGp3dDogXCLYrNuSINqI2KjZhNuM2Ygg2bnbjFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcItin2YYg2b7ZuVwiLFxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcItmG2YXYqNixXCIsXG4gICAgICAgIGFycmF5OiBcItii2LHbklwiLFxuICAgICAgICBudWxsOiBcItmG2YRcIixcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpID0+IHtcbiAgICAgICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LrZhNi3INin2YYg2b7ZuTogaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSDZhdiq2YjZgti5INiq2r7Yp9iMICR7cmVjZWl2ZWR9INmF2YjYtdmI2YQg24HZiNinYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDYutmE2Lcg2KfZhiDZvtm5OiAke2V4cGVjdGVkfSDZhdiq2YjZgti5INiq2r7Yp9iMICR7cmVjZWl2ZWR9INmF2YjYtdmI2YQg24HZiNinYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LrZhNi3INin2YYg2b7ZuTogJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfSDZhdiq2YjZgti5INiq2r7Yp2A7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDYutmE2Lcg2KLZvti02YY6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfSDZhduM2rog2LPbkiDYp9uM2qkg2YXYqtmI2YLYuSDYqtq+2KdgO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2KjbgdiqINio2pHYpzogJHtpc3N1ZS5vcmlnaW4gPz8gXCLZiNuM2YTbjNmIXCJ9INqp25IgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLYudmG2KfYtdixXCJ9INuB2YjZhtuSINmF2KrZiNmC2Lkg2KravtuSYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYNio24HYqiDYqNqR2Kc6ICR7aXNzdWUub3JpZ2luID8/IFwi2YjbjNmE24zZiFwifSDaqdinICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSDbgdmI2YbYpyDZhdiq2YjZgti5INiq2r7Yp2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2KjbgdiqINqG2r7ZiNm52Kc6ICR7aXNzdWUub3JpZ2lufSDaqduSICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSDbgdmI2YbbkiDZhdiq2YjZgti5INiq2r7bkmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg2KjbgdiqINqG2r7ZiNm52Kc6ICR7aXNzdWUub3JpZ2lufSDaqdinICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSDbgdmI2YbYpyDZhdiq2YjZgti5INiq2r7Yp2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDYutmE2Lcg2LPZudix2YbarzogXCIke19pc3N1ZS5wcmVmaXh9XCIg2LPbkiDYtNix2YjYuSDbgdmI2YbYpyDahtin24HbjNuSYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LrZhNi3INiz2bnYsdmG2q86IFwiJHtfaXNzdWUuc3VmZml4fVwiINm+2LEg2K7YqtmFINuB2YjZhtinINqG2KfbgduM25JgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg2LrZhNi3INiz2bnYsdmG2q86IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIg2LTYp9mF2YQg24HZiNmG2Kcg2obYp9uB24zbkmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDYutmE2Lcg2LPZudix2Ybarzog2b7bjNm52LHZhiAke19pc3N1ZS5wYXR0ZXJufSDYs9uSINmF24zahiDbgdmI2YbYpyDahtin24HbjNuSYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYNi62YTYtyAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDYutmE2Lcg2YbZhdio2LE6ICR7aXNzdWUuZGl2aXNvcn0g2qnYpyDZhdi22KfYudmBINuB2YjZhtinINqG2KfbgduM25JgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDYutuM2LEg2KrYs9mE24zZhSDYtNiv24Eg2qnbjCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLYslwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwi2IwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSDZhduM2rog2LrZhNi3INqp24xgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLYutmE2Lcg2KfZhiDZvtm5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0g2YXbjNq6INi62YTYtyDZiNuM2YTbjNmIYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDYutmE2Lcg2KfZhiDZvtm5YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwiYmVsZ2lcIiwgdmVyYjogXCJib+KAmGxpc2hpIGtlcmFrXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJheXRcIiwgdmVyYjogXCJib+KAmGxpc2hpIGtlcmFrXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCJlbGVtZW50XCIsIHZlcmI6IFwiYm/igJhsaXNoaSBrZXJha1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcImVsZW1lbnRcIiwgdmVyYjogXCJib+KAmGxpc2hpIGtlcmFrXCIgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJraXJpc2hcIixcbiAgICAgICAgZW1haWw6IFwiZWxla3Ryb24gcG9jaHRhIG1hbnppbGlcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gc2FuYSB2YSB2YXF0aVwiLFxuICAgICAgICBkYXRlOiBcIklTTyBzYW5hXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHZhcXRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIGRhdm9taXlsaWtcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IG1hbnppbFwiLFxuICAgICAgICBpcHY2OiBcIklQdjYgbWFuemlsXCIsXG4gICAgICAgIG1hYzogXCJNQUMgbWFuemlsXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IGRpYXBhem9uXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IGRpYXBhem9uXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQga29kbGFuZ2FuIHNhdHJcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybCBrb2RsYW5nYW4gc2F0clwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHNhdHJcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCByYXFhbVwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwia2lyaXNoXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwicmFxYW1cIixcbiAgICAgICAgYXJyYXk6IFwibWFzc2l2XCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5vdG/igJhn4oCYcmkga2lyaXNoOiBrdXRpbGdhbiBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBxYWJ1bCBxaWxpbmdhbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgTm90b+KAmGfigJhyaSBraXJpc2g6IGt1dGlsZ2FuICR7ZXhwZWN0ZWR9LCBxYWJ1bCBxaWxpbmdhbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5vdG/igJhn4oCYcmkga2lyaXNoOiBrdXRpbGdhbiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5vdG/igJhn4oCYcmkgdmFyaWFudDogcXV5aWRhZ2lsYXJkYW4gYmlyaSBrdXRpbGdhbiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSnVkYSBrYXR0YToga3V0aWxnYW4gJHtpc3N1ZS5vcmlnaW4gPz8gXCJxaXltYXRcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9ICR7c2l6aW5nLnZlcmJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEp1ZGEga2F0dGE6IGt1dGlsZ2FuICR7aXNzdWUub3JpZ2luID8/IFwicWl5bWF0XCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSnVkYSBraWNoaWs6IGt1dGlsZ2FuICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH0gJHtzaXppbmcudmVyYn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYEp1ZGEga2ljaGlrOiBrdXRpbGdhbiAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOb3Rv4oCYZ+KAmHJpIHNhdHI6IFwiJHtfaXNzdWUucHJlZml4fVwiIGJpbGFuIGJvc2hsYW5pc2hpIGtlcmFrYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOb3Rv4oCYZ+KAmHJpIHNhdHI6IFwiJHtfaXNzdWUuc3VmZml4fVwiIGJpbGFuIHR1Z2FzaGkga2VyYWtgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTm90b+KAmGfigJhyaSBzYXRyOiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiIG5pIG/igJh6IGljaGlnYSBvbGlzaGkga2VyYWtgO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTm90b+KAmGfigJhyaSBzYXRyOiAke19pc3N1ZS5wYXR0ZXJufSBzaGFibG9uaWdhIG1vcyBrZWxpc2hpIGtlcmFrYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5vdG/igJhn4oCYcmkgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTm90b+KAmGfigJhyaSByYXFhbTogJHtpc3N1ZS5kaXZpc29yfSBuaW5nIGthcnJhbGlzaSBib+KAmGxpc2hpIGtlcmFrYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTm9tYeKAmWx1bSBrYWxpdCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJsYXJcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBkYWdpIGthbGl0IG5vdG/igJhn4oCYcmlgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOb3Rv4oCYZ+KAmHJpIGtpcmlzaFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGRhIG5vdG/igJhn4oCYcmkgcWl5bWF0YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOb3Rv4oCYZ+KAmHJpIGtpcmlzaGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcImvDvSB04buxXCIsIHZlcmI6IFwiY8OzXCIgfSxcbiAgICAgICAgZmlsZTogeyB1bml0OiBcImJ5dGVcIiwgdmVyYjogXCJjw7NcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcInBo4bqnbiB04butXCIsIHZlcmI6IFwiY8OzXCIgfSxcbiAgICAgICAgc2V0OiB7IHVuaXQ6IFwicGjhuqduIHThu61cIiwgdmVyYjogXCJjw7NcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIsSR4bqndSB2w6BvXCIsXG4gICAgICAgIGVtYWlsOiBcIsSR4buLYSBjaOG7iSBlbWFpbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIm5nw6B5IGdp4budIElTT1wiLFxuICAgICAgICBkYXRlOiBcIm5nw6B5IElTT1wiLFxuICAgICAgICB0aW1lOiBcImdp4budIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJraG/huqNuZyB0aOG7nWkgZ2lhbiBJU09cIixcbiAgICAgICAgaXB2NDogXCLEkeG7i2EgY2jhu4kgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcIsSR4buLYSBjaOG7iSBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJk4bqjaSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJk4bqjaSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJjaHXhu5dpIG3DoyBow7NhIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiY2h14buXaSBtw6MgaMOzYSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiY2h14buXaSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwic+G7kSBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwixJHhuqd1IHbDoG9cIixcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJz4buRXCIsXG4gICAgICAgIGFycmF5OiBcIm3huqNuZ1wiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDEkOG6p3UgdsOgbyBraMO0bmcgaOG7o3AgbOG7hzogbW9uZyDEkeG7o2kgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgbmjhuq1uIMSRxrDhu6NjICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDEkOG6p3UgdsOgbyBraMO0bmcgaOG7o3AgbOG7hzogbW9uZyDEkeG7o2kgJHtleHBlY3RlZH0sIG5o4bqtbiDEkcaw4bujYyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYMSQ4bqndSB2w6BvIGtow7RuZyBo4bujcCBs4buHOiBtb25nIMSR4bujaSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFTDuXkgY2jhu41uIGtow7RuZyBo4bujcCBs4buHOiBtb25nIMSR4bujaSBt4buZdCB0cm9uZyBjw6FjIGdpw6EgdHLhu4sgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFF1w6EgbOG7m246IG1vbmcgxJHhu6NpICR7aXNzdWUub3JpZ2luID8/IFwiZ2nDoSB0cuG7i1wifSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcInBo4bqnbiB04butXCJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFF1w6EgbOG7m246IG1vbmcgxJHhu6NpICR7aXNzdWUub3JpZ2luID8/IFwiZ2nDoSB0cuG7i1wifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFF1w6Egbmjhu486IG1vbmcgxJHhu6NpICR7aXNzdWUub3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYFF1w6Egbmjhu486IG1vbmcgxJHhu6NpICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENodeG7l2kga2jDtG5nIGjhu6NwIGzhu4c6IHBo4bqjaSBi4bqvdCDEkeG6p3UgYuG6sW5nIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBDaHXhu5dpIGtow7RuZyBo4bujcCBs4buHOiBwaOG6o2kga+G6v3QgdGjDumMgYuG6sW5nIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENodeG7l2kga2jDtG5nIGjhu6NwIGzhu4c6IHBo4bqjaSBiYW8gZ+G7k20gXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBDaHXhu5dpIGtow7RuZyBo4bujcCBs4buHOiBwaOG6o2kga2jhu5twIHbhu5tpIG3huqt1ICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IGtow7RuZyBo4bujcCBs4buHYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFPhu5Ega2jDtG5nIGjhu6NwIGzhu4c6IHBo4bqjaSBsw6AgYuG7mWkgc+G7kSBj4bunYSAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgS2jDs2Ega2jDtG5nIMSRxrDhu6NjIG5o4bqtbiBk4bqhbmc6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgS2jDs2Ega2jDtG5nIGjhu6NwIGzhu4cgdHJvbmcgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwixJDhuqd1IHbDoG8ga2jDtG5nIGjhu6NwIGzhu4dcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEdpw6EgdHLhu4sga2jDtG5nIGjhu6NwIGzhu4cgdHJvbmcgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDEkOG6p3UgdsOgbyBraMO0bmcgaOG7o3AgbOG7h2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzogeyB1bml0OiBcIuWtl+esplwiLCB2ZXJiOiBcIuWMheWQq1wiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCLlrZfoioJcIiwgdmVyYjogXCLljIXlkKtcIiB9LFxuICAgICAgICBhcnJheTogeyB1bml0OiBcIumhuVwiLCB2ZXJiOiBcIuWMheWQq1wiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIumhuVwiLCB2ZXJiOiBcIuWMheWQq1wiIH0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwi6L6T5YWlXCIsXG4gICAgICAgIGVtYWlsOiBcIueUteWtkOmCruS7tlwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcIuihqOaDheespuWPt1wiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU0/ml6XmnJ/ml7bpl7RcIixcbiAgICAgICAgZGF0ZTogXCJJU0/ml6XmnJ9cIixcbiAgICAgICAgdGltZTogXCJJU0/ml7bpl7RcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNP5pe26ZW/XCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NOWcsOWdgFwiLFxuICAgICAgICBpcHY2OiBcIklQdjblnLDlnYBcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjTnvZHmrrVcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjbnvZHmrrVcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NOe8lueggeWtl+espuS4slwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJs57yW56CB5a2X56ym5LiyXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT07lrZfnrKbkuLJcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NOWPt+eggVwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi6L6T5YWlXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwi5pWw5a2XXCIsXG4gICAgICAgIGFycmF5OiBcIuaVsOe7hFwiLFxuICAgICAgICBudWxsOiBcIuepuuWAvChudWxsKVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDml6DmlYjovpPlhaXvvJrmnJ/mnJsgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfe+8jOWunumZheaOpeaUtiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg5peg5pWI6L6T5YWl77ya5pyf5pybICR7ZXhwZWN0ZWR977yM5a6e6ZmF5o6l5pS2ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg5peg5pWI6L6T5YWl77ya5pyf5pybICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg5peg5pWI6YCJ6aG577ya5pyf5pyb5Lul5LiL5LmL5LiAICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDmlbDlgLzov4flpKfvvJrmnJ/mnJsgJHtpc3N1ZS5vcmlnaW4gPz8gXCLlgLxcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCLkuKrlhYPntKBcIn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg5pWw5YC86L+H5aSn77ya5pyf5pybICR7aXNzdWUub3JpZ2luID8/IFwi5YC8XCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg5pWw5YC86L+H5bCP77ya5pyf5pybICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYOaVsOWAvOi/h+Wwj++8muacn+acmyAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDml6DmlYjlrZfnrKbkuLLvvJrlv4Xpobvku6UgXCIke19pc3N1ZS5wcmVmaXh9XCIg5byA5aS0YDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDml6DmlYjlrZfnrKbkuLLvvJrlv4Xpobvku6UgXCIke19pc3N1ZS5zdWZmaXh9XCIg57uT5bC+YDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOaXoOaViOWtl+espuS4su+8muW/hemhu+WMheWQqyBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOaXoOaViOWtl+espuS4su+8muW/hemhu+a7oei2s+ato+WImeihqOi+vuW8jyAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDml6DmlYgke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDml6DmlYjmlbDlrZfvvJrlv4XpobvmmK8gJHtpc3N1ZS5kaXZpc29yfSDnmoTlgI3mlbBgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDlh7rnjrDmnKrnn6XnmoTplK4oa2V5KTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0g5Lit55qE6ZSuKGtleSnml6DmlYhgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLml6DmlYjovpPlhaVcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSDkuK3ljIXlkKvml6DmlYjlgLwodmFsdWUpYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGDml6DmlYjovpPlhaVgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKCksXG4gICAgfTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHsgdW5pdDogXCLlrZflhYNcIiwgdmVyYjogXCLmk4HmnIlcIiB9LFxuICAgICAgICBmaWxlOiB7IHVuaXQ6IFwi5L2N5YWD57WEXCIsIHZlcmI6IFwi5pOB5pyJXCIgfSxcbiAgICAgICAgYXJyYXk6IHsgdW5pdDogXCLpoIXnm65cIiwgdmVyYjogXCLmk4HmnIlcIiB9LFxuICAgICAgICBzZXQ6IHsgdW5pdDogXCLpoIXnm65cIiwgdmVyYjogXCLmk4HmnIlcIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIui8uOWFpVwiLFxuICAgICAgICBlbWFpbDogXCLpg7Xku7blnLDlnYBcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08g5pel5pyf5pmC6ZaTXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIOaXpeacn1wiLFxuICAgICAgICB0aW1lOiBcIklTTyDmmYLplpNcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIOacn+mWk1wiLFxuICAgICAgICBpcHY0OiBcIklQdjQg5L2N5Z2AXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiDkvY3lnYBcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQg56+E5ZyNXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IOevhOWcjVwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0IOe3qOeivOWtl+S4slwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsIOe3qOeivOWtl+S4slwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIOWtl+S4slwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IOaVuOWAvFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwi6Ly45YWlXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDnhKHmlYjnmoTovLjlhaXlgLzvvJrpoJDmnJ/ngrogaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfe+8jOS9huaUtuWIsCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5pWI55qE6Ly45YWl5YC877ya6aCQ5pyf54K6ICR7ZXhwZWN0ZWR977yM5L2G5pS25YiwICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5pWI55qE6Ly45YWl5YC877ya6aCQ5pyf54K6ICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5pWI55qE6YG46aCF77ya6aCQ5pyf54K65Lul5LiL5YW25Lit5LmL5LiAICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDmlbjlgLzpgY7lpKfvvJrpoJDmnJ8gJHtpc3N1ZS5vcmlnaW4gPz8gXCLlgLxcIn0g5oeJ54K6ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwi5YCL5YWD57SgXCJ9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYOaVuOWAvOmBjuWkp++8mumgkOacnyAke2lzc3VlLm9yaWdpbiA/PyBcIuWAvFwifSDmh4nngrogJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDmlbjlgLzpgY7lsI/vvJrpoJDmnJ8gJHtpc3N1ZS5vcmlnaW59IOaHieeCuiAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYOaVuOWAvOmBjuWwj++8mumgkOacnyAke2lzc3VlLm9yaWdpbn0g5oeJ54K6ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDnhKHmlYjnmoTlrZfkuLLvvJrlv4XpoIjku6UgXCIke19pc3N1ZS5wcmVmaXh9XCIg6ZaL6aCtYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5pWI55qE5a2X5Liy77ya5b+F6aCI5LulIFwiJHtfaXNzdWUuc3VmZml4fVwiIOe1kOWwvmA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDnhKHmlYjnmoTlrZfkuLLvvJrlv4XpoIjljIXlkKsgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDnhKHmlYjnmoTlrZfkuLLvvJrlv4XpoIjnrKblkIjmoLzlvI8gJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5pWI55qEICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOeEoeaViOeahOaVuOWtl++8muW/hemgiOeCuiAke2lzc3VlLmRpdmlzb3J9IOeahOWAjeaVuGA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYOeEoeazleitmOWIpeeahOmNteWAvCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCLlgJFcIiA6IFwiXCJ977yaJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCLjgIFcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IOS4reacieeEoeaViOeahOmNteWAvGA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIueEoeaViOeahOi8uOWFpeWAvFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IOS4reacieeEoeaViOeahOWAvGA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBg54Sh5pWI55qE6Ly45YWl5YC8YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpLFxuICAgIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKSA9PiB7XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7IHVuaXQ6IFwiw6BtaVwiLCB2ZXJiOiBcIm7DrVwiIH0sXG4gICAgICAgIGZpbGU6IHsgdW5pdDogXCJieXRlc1wiLCB2ZXJiOiBcIm7DrVwiIH0sXG4gICAgICAgIGFycmF5OiB7IHVuaXQ6IFwibmthblwiLCB2ZXJiOiBcIm7DrVwiIH0sXG4gICAgICAgIHNldDogeyB1bml0OiBcIm5rYW5cIiwgdmVyYjogXCJuw61cIiB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIuG6ucyAcuG7jSDDrGLDoXfhu41sw6lcIixcbiAgICAgICAgZW1haWw6IFwiw6Bkw61y4bq5zIFzw6wgw6xt4bq5zIFsw6xcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCLDoGvDs2vDsiBJU09cIixcbiAgICAgICAgZGF0ZTogXCLhu41q4buNzIEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiw6Brw7Nrw7IgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIsOga8Oza8OyIHTDsyBww6kgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiw6Bkw61y4bq5zIFzw6wgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcIsOgZMOtcuG6ucyBc8OsIElQdjZcIixcbiAgICAgICAgY2lkcnY0OiBcIsOgZ2LDqGdiw6ggSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwiw6BnYsOoZ2LDqCBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCLhu43MgHLhu43MgCB0w60gYSBr4buNzIEgbsOtIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwi4buNzIBy4buNzIAgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIuG7jcyAcuG7jcyAIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJu4buNzIFtYsOgIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCLhurnMgHLhu40gw6xiw6F34buNbMOpXCIsXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibuG7jcyBbWLDoFwiLFxuICAgICAgICBhcnJheTogXCJha29w4buNXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYMOMYsOhd+G7jWzDqSBh4bmjw6zhuaNlOiBhIG7DrSBsw6F0aSBmaSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCDDoG3hu43MgCBhIHLDrSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgw4xiw6F34buNbMOpIGHhuaPDrOG5o2U6IGEgbsOtIGzDoXRpIGZpICR7ZXhwZWN0ZWR9LCDDoG3hu43MgCBhIHLDrSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYMOMYsOhd+G7jWzDqSBh4bmjw6zhuaNlOiBhIG7DrSBsw6F0aSBmaSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYMOA4bmjw6B5w6BuIGHhuaPDrOG5o2U6IHlhbiDhu43MgGthbiBsw6FyYSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIGlmIChzaXppbmcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVMOzIHDhu43MgCBqw7k6IGEgbsOtIGzDoXRpIGrhurnMgSBww6kgJHtpc3N1ZS5vcmlnaW4gPz8gXCJpeWVcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUw7MgcOG7jcyAIGrDuTogYSBuw60gbMOhdGkgauG6ucyBICR7YWRqfSR7aXNzdWUubWF4aW11bX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgaWYgKHNpemluZylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBLw6lyw6kganU6IGEgbsOtIGzDoXRpIGrhurnMgSBww6kgJHtpc3N1ZS5vcmlnaW59ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWluaW11bX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgS8OpcsOpIGp1OiBhIG7DrSBsw6F0aSBq4bq5zIEgJHthZGp9JHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBg4buMzIBy4buNzIAgYeG5o8Os4bmjZTogZ2Lhu43MgWThu43MgCBi4bq5zIBy4bq5zIAgcOG6ucyAbMO6IFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhu4zMgHLhu43MgCBh4bmjw6zhuaNlOiBnYuG7jcyBZOG7jcyAIHBhcsOtIHDhurnMgGzDuiBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDhu4zMgHLhu43MgCBh4bmjw6zhuaNlOiBnYuG7jcyBZOG7jcyAIG7DrSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYOG7jMyAcuG7jcyAIGHhuaPDrOG5o2U6IGdi4buNzIFk4buNzIAgYsOhIMOgcOG6ueG6uXLhurkgbXUgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgQeG5o8Os4bmjZTogJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTuG7jcyBbWLDoCBh4bmjw6zhuaNlOiBnYuG7jcyBZOG7jcyAIGrhurnMgSDDqHnDoCBww61ww61uIHRpICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBC4buNdMOsbsOsIMOgw6xt4buNzIA6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQuG7jXTDrG7DrCBh4bmjw6zhuaNlIG7DrW7DuiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLDjGLDoXfhu41sw6kgYeG5o8Os4bmjZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgSXllIGHhuaPDrOG5o2UgbsOtbsO6ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcIsOMYsOhd+G7jWzDqSBh4bmjw6zhuaNlXCI7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKSxcbiAgICB9O1xufVxuIiwKICAgICJleHBvcnQgeyBkZWZhdWx0IGFzIGFyIH0gZnJvbSBcIi4vYXIuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXogfSBmcm9tIFwiLi9hei5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBiZSB9IGZyb20gXCIuL2JlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJnIH0gZnJvbSBcIi4vYmcuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2EgfSBmcm9tIFwiLi9jYS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcyB9IGZyb20gXCIuL2NzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRhIH0gZnJvbSBcIi4vZGEuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGUgfSBmcm9tIFwiLi9kZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbiB9IGZyb20gXCIuL2VuLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVvIH0gZnJvbSBcIi4vZW8uanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXMgfSBmcm9tIFwiLi9lcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmYSB9IGZyb20gXCIuL2ZhLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpIH0gZnJvbSBcIi4vZmkuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZnIgfSBmcm9tIFwiLi9mci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmckNBIH0gZnJvbSBcIi4vZnItQ0EuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGUgfSBmcm9tIFwiLi9oZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBodSB9IGZyb20gXCIuL2h1LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh5IH0gZnJvbSBcIi4vaHkuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaWQgfSBmcm9tIFwiLi9pZC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpcyB9IGZyb20gXCIuL2lzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGl0IH0gZnJvbSBcIi4vaXQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgamEgfSBmcm9tIFwiLi9qYS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrYSB9IGZyb20gXCIuL2thLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtoIH0gZnJvbSBcIi4va2guanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMga20gfSBmcm9tIFwiLi9rbS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrbyB9IGZyb20gXCIuL2tvLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGx0IH0gZnJvbSBcIi4vbHQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWsgfSBmcm9tIFwiLi9tay5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtcyB9IGZyb20gXCIuL21zLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5sIH0gZnJvbSBcIi4vbmwuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbm8gfSBmcm9tIFwiLi9uby5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvdGEgfSBmcm9tIFwiLi9vdGEuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHMgfSBmcm9tIFwiLi9wcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwbCB9IGZyb20gXCIuL3BsLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB0IH0gZnJvbSBcIi4vcHQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcnUgfSBmcm9tIFwiLi9ydS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzbCB9IGZyb20gXCIuL3NsLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN2IH0gZnJvbSBcIi4vc3YuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGEgfSBmcm9tIFwiLi90YS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0aCB9IGZyb20gXCIuL3RoLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyIH0gZnJvbSBcIi4vdHIuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdWEgfSBmcm9tIFwiLi91YS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1ayB9IGZyb20gXCIuL3VrLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVyIH0gZnJvbSBcIi4vdXIuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXogfSBmcm9tIFwiLi91ei5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2aSB9IGZyb20gXCIuL3ZpLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHpoQ04gfSBmcm9tIFwiLi96aC1DTi5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB6aFRXIH0gZnJvbSBcIi4vemgtVFcuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgeW8gfSBmcm9tIFwiLi95by5qc1wiO1xuIiwKICAgICJ2YXIgX2E7XG5leHBvcnQgY29uc3QgJG91dHB1dCA9IFN5bWJvbChcIlpvZE91dHB1dFwiKTtcbmV4cG9ydCBjb25zdCAkaW5wdXQgPSBTeW1ib2woXCJab2RJbnB1dFwiKTtcbmV4cG9ydCBjbGFzcyAkWm9kUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLl9pZG1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgYWRkKHNjaGVtYSwgLi4uX21ldGEpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IF9tZXRhWzBdO1xuICAgICAgICB0aGlzLl9tYXAuc2V0KHNjaGVtYSwgbWV0YSk7XG4gICAgICAgIGlmIChtZXRhICYmIHR5cGVvZiBtZXRhID09PSBcIm9iamVjdFwiICYmIFwiaWRcIiBpbiBtZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pZG1hcC5zZXQobWV0YS5pZCwgc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIHRoaXMuX2lkbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmVtb3ZlKHNjaGVtYSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fbWFwLmdldChzY2hlbWEpO1xuICAgICAgICBpZiAobWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gXCJvYmplY3RcIiAmJiBcImlkXCIgaW4gbWV0YSkge1xuICAgICAgICAgICAgdGhpcy5faWRtYXAuZGVsZXRlKG1ldGEuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21hcC5kZWxldGUoc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldChzY2hlbWEpIHtcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuX21hcC5nZXQoc2NoZW1hKSBhcyBhbnk7XG4gICAgICAgIC8vIGluaGVyaXQgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgcCA9IHNjaGVtYS5fem9kLnBhcmVudDtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIGNvbnN0IHBtID0geyAuLi4odGhpcy5nZXQocCkgPz8ge30pIH07XG4gICAgICAgICAgICBkZWxldGUgcG0uaWQ7IC8vIGRvIG5vdCBpbmhlcml0IGlkXG4gICAgICAgICAgICBjb25zdCBmID0geyAuLi5wbSwgLi4udGhpcy5fbWFwLmdldChzY2hlbWEpIH07XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZikubGVuZ3RoID8gZiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmdldChzY2hlbWEpO1xuICAgIH1cbiAgICBoYXMoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHNjaGVtYSk7XG4gICAgfVxufVxuLy8gcmVnaXN0cmllc1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJ5KCkge1xuICAgIHJldHVybiBuZXcgJFpvZFJlZ2lzdHJ5KCk7XG59XG4oX2EgPSBnbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeSA/PyAoX2EuX196b2RfZ2xvYmFsUmVnaXN0cnkgPSByZWdpc3RyeSgpKTtcbmV4cG9ydCBjb25zdCBnbG9iYWxSZWdpc3RyeSA9IGdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnk7XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWNrcyBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmltcG9ydCAqIGFzIHJlZ2lzdHJpZXMgZnJvbSBcIi4vcmVnaXN0cmllcy5qc1wiO1xuaW1wb3J0ICogYXMgc2NoZW1hcyBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N0cmluZyhDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jb2VyY2VkU3RyaW5nKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZW1haWwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZW1haWxcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ndWlkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImd1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInV1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2NFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXVpZHY2KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInV1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IFwidjZcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3V1aWR2NyhDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1dWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiBcInY3XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91cmwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXJsXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZW1vamkoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZW1vamlcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9uYW5vaWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwibmFub2lkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjdWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZDIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiY3VpZDJcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91bGlkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInVsaWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF94aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwieGlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfa3N1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwia3N1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY2KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYWMoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwibWFjXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2lkcnY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImNpZHJ2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NpZHJ2NihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9iYXNlNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiYmFzZTY0XCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYmFzZTY0dXJsKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2UxNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZTE2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2p3dChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJqd3RcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgVGltZVByZWNpc2lvbiA9IHtcbiAgICBBbnk6IG51bGwsXG4gICAgTWludXRlOiAtMSxcbiAgICBTZWNvbmQ6IDAsXG4gICAgTWlsbGlzZWNvbmQ6IDMsXG4gICAgTWljcm9zZWNvbmQ6IDYsXG59O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvRGF0ZVRpbWUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICBsb2NhbDogZmFsc2UsXG4gICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lzb0RhdGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29UaW1lKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29EdXJhdGlvbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkdXJhdGlvblwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9udW1iZXIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZE51bWJlcihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwic2FmZWludFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmxvYXQzMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiZmxvYXQzMlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmxvYXQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiZmxvYXQ2NFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcImludDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91aW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcInVpbnQzMlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYm9vbGVhbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZEJvb2xlYW4oQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYmlnaW50KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NvZXJjZWRCaWdpbnQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiaW50NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VpbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwidWludDY0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zeW1ib2woQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN5bWJvbFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5kZWZpbmVkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bGwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bGxcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2FueShDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5rbm93bihDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVua25vd25cIixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25ldmVyKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJuZXZlclwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdm9pZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidm9pZFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZERhdGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmFuKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJuYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMZXNzVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImxlc3NfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTGVzc1RoYW4oe1xuICAgICAgICBjaGVjazogXCJsZXNzX3RoYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IFxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5sdGUoKWAgaW5zdGVhZC4gKi9cbl9sdGUgYXMgX21heCwgfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tHcmVhdGVyVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImdyZWF0ZXJfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrR3JlYXRlclRoYW4oe1xuICAgICAgICBjaGVjazogXCJncmVhdGVyX3RoYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IFxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5ndGUoKWAgaW5zdGVhZC4gKi9cbl9ndGUgYXMgX21pbiwgfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3Bvc2l0aXZlKHBhcmFtcykge1xuICAgIHJldHVybiBfZ3QoMCwgcGFyYW1zKTtcbn1cbi8vIG5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2x0KDAsIHBhcmFtcyk7XG59XG4vLyBub25wb3NpdGl2ZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ucG9zaXRpdmUocGFyYW1zKSB7XG4gICAgcmV0dXJuIF9sdGUoMCwgcGFyYW1zKTtcbn1cbi8vIG5vbm5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2d0ZSgwLCBwYXJhbXMpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTXVsdGlwbGVPZih7XG4gICAgICAgIGNoZWNrOiBcIm11bHRpcGxlX29mXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWF4U2l6ZShtYXhpbXVtLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNYXhTaXplKHtcbiAgICAgICAgY2hlY2s6IFwibWF4X3NpemVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWF4aW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21pblNpemUobWluaW11bSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWluU2l6ZSh7XG4gICAgICAgIGNoZWNrOiBcIm1pbl9zaXplXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1pbmltdW0sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zaXplKHNpemUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1NpemVFcXVhbHMoe1xuICAgICAgICBjaGVjazogXCJzaXplX2VxdWFsc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBzaXplLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWF4TGVuZ3RoKG1heGltdW0sIHBhcmFtcykge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNYXhMZW5ndGgoe1xuICAgICAgICBjaGVjazogXCJtYXhfbGVuZ3RoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1heGltdW0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWluTGVuZ3RoKG1pbmltdW0sIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01pbkxlbmd0aCh7XG4gICAgICAgIGNoZWNrOiBcIm1pbl9sZW5ndGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWluaW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2xlbmd0aChsZW5ndGgsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xlbmd0aEVxdWFscyh7XG4gICAgICAgIGNoZWNrOiBcImxlbmd0aF9lcXVhbHNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbGVuZ3RoLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVnZXgocGF0dGVybiwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrUmVnZXgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJyZWdleFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBwYXR0ZXJuLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbG93ZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xvd2VyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcImxvd2VyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXBwZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1VwcGVyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW5jbHVkZXMoaW5jbHVkZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0luY2x1ZGVzKHtcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBmb3JtYXQ6IFwiaW5jbHVkZXNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgaW5jbHVkZXMsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFydHNXaXRoKHByZWZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrU3RhcnRzV2l0aCh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInN0YXJ0c193aXRoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHByZWZpeCxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2VuZHNXaXRoKHN1ZmZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrRW5kc1dpdGgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJlbmRzX3dpdGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgc3VmZml4LFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcHJvcGVydHkocHJvcGVydHksIHNjaGVtYSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrUHJvcGVydHkoe1xuICAgICAgICBjaGVjazogXCJwcm9wZXJ0eVwiLFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWltZSh0eXBlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWltZVR5cGUoe1xuICAgICAgICBjaGVjazogXCJtaW1lX3R5cGVcIixcbiAgICAgICAgbWltZTogdHlwZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9vdmVyd3JpdGUodHgpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tPdmVyd3JpdGUoe1xuICAgICAgICBjaGVjazogXCJvdmVyd3JpdGVcIixcbiAgICAgICAgdHgsXG4gICAgfSk7XG59XG4vLyBub3JtYWxpemVcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZShmb3JtKSB7XG4gICAgcmV0dXJuIF9vdmVyd3JpdGUoKGlucHV0KSA9PiBpbnB1dC5ub3JtYWxpemUoZm9ybSkpO1xufVxuLy8gdHJpbVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdHJpbSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRyaW0oKSk7XG59XG4vLyB0b0xvd2VyQ2FzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdG9Mb3dlckNhc2UoKSB7XG4gICAgcmV0dXJuIF9vdmVyd3JpdGUoKGlucHV0KSA9PiBpbnB1dC50b0xvd2VyQ2FzZSgpKTtcbn1cbi8vIHRvVXBwZXJDYXNlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90b1VwcGVyQ2FzZSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRvVXBwZXJDYXNlKCkpO1xufVxuLy8gc2x1Z2lmeVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2x1Z2lmeSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IHV0aWwuc2x1Z2lmeShpbnB1dCkpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYXJyYXkoQ2xhc3MsIGVsZW1lbnQsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIC8vIGdldCBlbGVtZW50KCkge1xuICAgICAgICAvLyAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAvLyB9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5pb24oQ2xhc3MsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3hvcihDbGFzcywgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Rpc2NyaW1pbmF0ZWRVbmlvbihDbGFzcywgZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludGVyc2VjdGlvbihDbGFzcywgbGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgfSk7XG59XG4vLyBleHBvcnQgZnVuY3Rpb24gX3R1cGxlKFxuLy8gICBDbGFzczogdXRpbC5TY2hlbWFDbGFzczxzY2hlbWFzLiRab2RUdXBsZT4sXG4vLyAgIGl0ZW1zOiBbXSxcbi8vICAgcGFyYW1zPzogc3RyaW5nIHwgJFpvZFR1cGxlUGFyYW1zXG4vLyApOiBzY2hlbWFzLiRab2RUdXBsZTxbXSwgbnVsbD47XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90dXBsZShDbGFzcywgaXRlbXMsIF9wYXJhbXNPclJlc3QsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBoYXNSZXN0ID0gX3BhcmFtc09yUmVzdCBpbnN0YW5jZW9mIHNjaGVtYXMuJFpvZFR5cGU7XG4gICAgY29uc3QgcGFyYW1zID0gaGFzUmVzdCA/IF9wYXJhbXMgOiBfcGFyYW1zT3JSZXN0O1xuICAgIGNvbnN0IHJlc3QgPSBoYXNSZXN0ID8gX3BhcmFtc09yUmVzdCA6IG51bGw7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIHJlc3QsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9yZWNvcmQoQ2xhc3MsIGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21hcChDbGFzcywga2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2V0KENsYXNzLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbnVtKENsYXNzLCB2YWx1ZXMsIHBhcmFtcykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzLm1hcCgodikgPT4gW3YsIHZdKSkgOiB2YWx1ZXM7XG4gICAgLy8gaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgIC8vICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAvLyAgICAgZW50cmllc1t2YWx1ZV0gPSB2YWx1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgT2JqZWN0LmFzc2lnbihlbnRyaWVzLCB2YWx1ZXMpO1xuICAgIC8vIH1cbiAgICAvLyBjb25zdCBlbnRyaWVzOiB1dGlsLkVudW1MaWtlID0ge307XG4gICAgLy8gZm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKSB7XG4gICAgLy8gICBlbnRyaWVzW3ZhbF0gPSB2YWw7XG4gICAgLy8gfVxuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG4vKiogQGRlcHJlY2F0ZWQgVGhpcyBBUEkgaGFzIGJlZW4gbWVyZ2VkIGludG8gYHouZW51bSgpYC4gVXNlIGB6LmVudW0oKWAgaW5zdGVhZC5cbiAqXG4gKiBgYGB0c1xuICogZW51bSBDb2xvcnMgeyByZWQsIGdyZWVuLCBibHVlIH1cbiAqIHouZW51bShDb2xvcnMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfbmF0aXZlRW51bShDbGFzcywgZW50cmllcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGl0ZXJhbChDbGFzcywgdmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImxpdGVyYWxcIixcbiAgICAgICAgdmFsdWVzOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ZpbGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RyYW5zZm9ybShDbGFzcywgZm4pIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtOiBmbixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX29wdGlvbmFsKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9udWxsYWJsZShDbGFzcywgaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVsbGFibGVcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGVmYXVsdChDbGFzcywgaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsdWUoKSA6IHV0aWwuc2hhbGxvd0Nsb25lKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25vcHRpb25hbChDbGFzcywgaW5uZXJUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdWNjZXNzKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NhdGNoKENsYXNzLCBpbm5lclR5cGUsIGNhdGNoVmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjYXRjaFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGNhdGNoVmFsdWU6ICh0eXBlb2YgY2F0Y2hWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2F0Y2hWYWx1ZSA6ICgpID0+IGNhdGNoVmFsdWUpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcGlwZShDbGFzcywgaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dCxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3JlYWRvbmx5KENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJyZWFkb25seVwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90ZW1wbGF0ZUxpdGVyYWwoQ2xhc3MsIHBhcnRzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGF6eShDbGFzcywgZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibGF6eVwiLFxuICAgICAgICBnZXR0ZXIsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9wcm9taXNlKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwcm9taXNlXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2N1c3RvbShDbGFzcywgZm4sIF9wYXJhbXMpIHtcbiAgICBjb25zdCBub3JtID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgbm9ybS5hYm9ydCA/PyAobm9ybS5hYm9ydCA9IHRydWUpOyAvLyBkZWZhdWx0IHRvIGFib3J0OmZhbHNlXG4gICAgY29uc3Qgc2NoZW1hID0gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIGZuOiBmbixcbiAgICAgICAgLi4ubm9ybSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2NoZW1hO1xufVxuLy8gc2FtZSBhcyBfY3VzdG9tIGJ1dCBkZWZhdWx0cyB0byBhYm9ydDpmYWxzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVmaW5lKENsYXNzLCBmbiwgX3BhcmFtcykge1xuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICBmbjogZm4sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY2hlbWE7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdXBlclJlZmluZShmbikge1xuICAgIGNvbnN0IGNoID0gX2NoZWNrKChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHBheWxvYWQuYWRkSXNzdWUgPSAoaXNzdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXNzdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHV0aWwuaXNzdWUoaXNzdWUsIHBheWxvYWQudmFsdWUsIGNoLl96b2QuZGVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgWm9kIDMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZhdGFsKVxuICAgICAgICAgICAgICAgICAgICBfaXNzdWUuY29udGludWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuY29kZSA/PyAoX2lzc3VlLmNvZGUgPSBcImN1c3RvbVwiKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuaW5wdXQgPz8gKF9pc3N1ZS5pbnB1dCA9IHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnN0ID8/IChfaXNzdWUuaW5zdCA9IGNoKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuY29udGludWUgPz8gKF9pc3N1ZS5jb250aW51ZSA9ICFjaC5fem9kLmRlZi5hYm9ydCk7IC8vIGFib3J0IGlzIGFsd2F5cyB1bmRlZmluZWQsIHNvIHRoaXMgaXMgYWx3YXlzIHRydWUuLi5cbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHV0aWwuaXNzdWUoX2lzc3VlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmbihwYXlsb2FkLnZhbHVlLCBwYXlsb2FkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVjayhmbiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7XG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xuICAgIGNoLl96b2QuY2hlY2sgPSBmbjtcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7IGNoZWNrOiBcImRlc2NyaWJlXCIgfSk7XG4gICAgY2guX3pvZC5vbmF0dGFjaCA9IFtcbiAgICAgICAgKGluc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVnaXN0cmllcy5nbG9iYWxSZWdpc3RyeS5nZXQoaW5zdCkgPz8ge307XG4gICAgICAgICAgICByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmFkZChpbnN0LCB7IC4uLmV4aXN0aW5nLCBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGNoLl96b2QuY2hlY2sgPSAoKSA9PiB7IH07IC8vIG5vLW9wIGNoZWNrXG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBtZXRhKG1ldGFkYXRhKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7IGNoZWNrOiBcIm1ldGFcIiB9KTtcbiAgICBjaC5fem9kLm9uYXR0YWNoID0gW1xuICAgICAgICAoaW5zdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmdldChpbnN0KSA/PyB7fTtcbiAgICAgICAgICAgIHJlZ2lzdHJpZXMuZ2xvYmFsUmVnaXN0cnkuYWRkKGluc3QsIHsgLi4uZXhpc3RpbmcsIC4uLm1ldGFkYXRhIH0pO1xuICAgICAgICB9LFxuICAgIF07XG4gICAgY2guX3pvZC5jaGVjayA9ICgpID0+IHsgfTsgLy8gbm8tb3AgY2hlY2tcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdHJpbmdib29sKENsYXNzZXMsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB1dGlsLm5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKTtcbiAgICBsZXQgdHJ1dGh5QXJyYXkgPSBwYXJhbXMudHJ1dGh5ID8/IFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwib25cIiwgXCJ5XCIsIFwiZW5hYmxlZFwiXTtcbiAgICBsZXQgZmFsc3lBcnJheSA9IHBhcmFtcy5mYWxzeSA/PyBbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm9mZlwiLCBcIm5cIiwgXCJkaXNhYmxlZFwiXTtcbiAgICBpZiAocGFyYW1zLmNhc2UgIT09IFwic2Vuc2l0aXZlXCIpIHtcbiAgICAgICAgdHJ1dGh5QXJyYXkgPSB0cnV0aHlBcnJheS5tYXAoKHYpID0+ICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYudG9Mb3dlckNhc2UoKSA6IHYpKTtcbiAgICAgICAgZmFsc3lBcnJheSA9IGZhbHN5QXJyYXkubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2LnRvTG93ZXJDYXNlKCkgOiB2KSk7XG4gICAgfVxuICAgIGNvbnN0IHRydXRoeVNldCA9IG5ldyBTZXQodHJ1dGh5QXJyYXkpO1xuICAgIGNvbnN0IGZhbHN5U2V0ID0gbmV3IFNldChmYWxzeUFycmF5KTtcbiAgICBjb25zdCBfQ29kZWMgPSBDbGFzc2VzLkNvZGVjID8/IHNjaGVtYXMuJFpvZENvZGVjO1xuICAgIGNvbnN0IF9Cb29sZWFuID0gQ2xhc3Nlcy5Cb29sZWFuID8/IHNjaGVtYXMuJFpvZEJvb2xlYW47XG4gICAgY29uc3QgX1N0cmluZyA9IENsYXNzZXMuU3RyaW5nID8/IHNjaGVtYXMuJFpvZFN0cmluZztcbiAgICBjb25zdCBzdHJpbmdTY2hlbWEgPSBuZXcgX1N0cmluZyh7IHR5cGU6IFwic3RyaW5nXCIsIGVycm9yOiBwYXJhbXMuZXJyb3IgfSk7XG4gICAgY29uc3QgYm9vbGVhblNjaGVtYSA9IG5ldyBfQm9vbGVhbih7IHR5cGU6IFwiYm9vbGVhblwiLCBlcnJvcjogcGFyYW1zLmVycm9yIH0pO1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IF9Db2RlYyh7XG4gICAgICAgIHR5cGU6IFwicGlwZVwiLFxuICAgICAgICBpbjogc3RyaW5nU2NoZW1hLFxuICAgICAgICBvdXQ6IGJvb2xlYW5TY2hlbWEsXG4gICAgICAgIHRyYW5zZm9ybTogKChpbnB1dCwgcGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBpbnB1dDtcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY2FzZSAhPT0gXCJzZW5zaXRpdmVcIilcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHRydXRoeVNldC5oYXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZhbHN5U2V0LmhhcyhkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nYm9vbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFsuLi50cnV0aHlTZXQsIC4uLmZhbHN5U2V0XSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluc3Q6IGNvZGVjLFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogKChpbnB1dCwgX3BheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnV0aHlBcnJheVswXSB8fCBcInRydWVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzeUFycmF5WzBdIHx8IFwiZmFsc2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBwYXJhbXMuZXJyb3IsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvZGVjO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nRm9ybWF0KENsYXNzLCBmb3JtYXQsIGZuT3JSZWdleCwgX3BhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgcGFyYW1zID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgY29uc3QgZGVmID0ge1xuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKSxcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIGZuOiB0eXBlb2YgZm5PclJlZ2V4ID09PSBcImZ1bmN0aW9uXCIgPyBmbk9yUmVnZXggOiAodmFsKSA9PiBmbk9yUmVnZXgudGVzdCh2YWwpLFxuICAgICAgICAuLi5wYXJhbXMsXG4gICAgfTtcbiAgICBpZiAoZm5PclJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIGRlZi5wYXR0ZXJuID0gZm5PclJlZ2V4O1xuICAgIH1cbiAgICBjb25zdCBpbnN0ID0gbmV3IENsYXNzKGRlZik7XG4gICAgcmV0dXJuIGluc3Q7XG59XG4iLAogICAgImltcG9ydCB7IGdsb2JhbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cmllcy5qc1wiO1xuLy8gZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnRleHQ8VCBleHRlbmRzIHNjaGVtYXMuJFpvZFR5cGU+KGlucHV0czogSlNPTlNjaGVtYUdlbmVyYXRvclBhcmFtczxUPik6IFRvSlNPTlNjaGVtYUNvbnRleHQ8VD4ge1xuLy8gICByZXR1cm4ge1xuLy8gICAgIHByb2Nlc3NvcjogaW5wdXRzLnByb2Nlc3Nvcixcbi8vICAgICBtZXRhZGF0YVJlZ2lzdHJ5OiBpbnB1dHMubWV0YWRhdGEgPz8gZ2xvYmFsUmVnaXN0cnksXG4vLyAgICAgdGFyZ2V0OiBpbnB1dHMudGFyZ2V0ID8/IFwiZHJhZnQtMjAyMC0xMlwiLFxuLy8gICAgIHVucmVwcmVzZW50YWJsZTogaW5wdXRzLnVucmVwcmVzZW50YWJsZSA/PyBcInRocm93XCIsXG4vLyAgIH07XG4vLyB9XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnRleHQocGFyYW1zKSB7XG4gICAgLy8gTm9ybWFsaXplIHRhcmdldDogY29udmVydCBvbGQgbm9uLWh5cGhlbmF0ZWQgdmVyc2lvbnMgdG8gaHlwaGVuYXRlZCB2ZXJzaW9uc1xuICAgIGxldCB0YXJnZXQgPSBwYXJhbXM/LnRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbiAgICBpZiAodGFyZ2V0ID09PSBcImRyYWZ0LTRcIilcbiAgICAgICAgdGFyZ2V0ID0gXCJkcmFmdC0wNFwiO1xuICAgIGlmICh0YXJnZXQgPT09IFwiZHJhZnQtN1wiKVxuICAgICAgICB0YXJnZXQgPSBcImRyYWZ0LTA3XCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvY2Vzc29yczogcGFyYW1zLnByb2Nlc3NvcnMgPz8ge30sXG4gICAgICAgIG1ldGFkYXRhUmVnaXN0cnk6IHBhcmFtcz8ubWV0YWRhdGEgPz8gZ2xvYmFsUmVnaXN0cnksXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgdW5yZXByZXNlbnRhYmxlOiBwYXJhbXM/LnVucmVwcmVzZW50YWJsZSA/PyBcInRocm93XCIsXG4gICAgICAgIG92ZXJyaWRlOiBwYXJhbXM/Lm92ZXJyaWRlID8/ICgoKSA9PiB7IH0pLFxuICAgICAgICBpbzogcGFyYW1zPy5pbyA/PyBcIm91dHB1dFwiLFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBzZWVuOiBuZXcgTWFwKCksXG4gICAgICAgIGN5Y2xlczogcGFyYW1zPy5jeWNsZXMgPz8gXCJyZWZcIixcbiAgICAgICAgcmV1c2VkOiBwYXJhbXM/LnJldXNlZCA/PyBcImlubGluZVwiLFxuICAgICAgICBleHRlcm5hbDogcGFyYW1zPy5leHRlcm5hbCA/PyB1bmRlZmluZWQsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzKHNjaGVtYSwgY3R4LCBfcGFyYW1zID0geyBwYXRoOiBbXSwgc2NoZW1hUGF0aDogW10gfSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgLy8gY2hlY2sgZm9yIHNjaGVtYSBpbiBzZWVuc1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBpZiAoc2Vlbikge1xuICAgICAgICBzZWVuLmNvdW50Kys7XG4gICAgICAgIC8vIGNoZWNrIGlmIGN5Y2xlXG4gICAgICAgIGNvbnN0IGlzQ3ljbGUgPSBfcGFyYW1zLnNjaGVtYVBhdGguaW5jbHVkZXMoc2NoZW1hKTtcbiAgICAgICAgaWYgKGlzQ3ljbGUpIHtcbiAgICAgICAgICAgIHNlZW4uY3ljbGUgPSBfcGFyYW1zLnBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlZW4uc2NoZW1hO1xuICAgIH1cbiAgICAvLyBpbml0aWFsaXplXG4gICAgY29uc3QgcmVzdWx0ID0geyBzY2hlbWE6IHt9LCBjb3VudDogMSwgY3ljbGU6IHVuZGVmaW5lZCwgcGF0aDogX3BhcmFtcy5wYXRoIH07XG4gICAgY3R4LnNlZW4uc2V0KHNjaGVtYSwgcmVzdWx0KTtcbiAgICAvLyBjdXN0b20gbWV0aG9kIG92ZXJyaWRlcyBkZWZhdWx0IGJlaGF2aW9yXG4gICAgY29uc3Qgb3ZlcnJpZGVTY2hlbWEgPSBzY2hlbWEuX3pvZC50b0pTT05TY2hlbWE/LigpO1xuICAgIGlmIChvdmVycmlkZVNjaGVtYSkge1xuICAgICAgICByZXN1bHQuc2NoZW1hID0gb3ZlcnJpZGVTY2hlbWE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAuLi5fcGFyYW1zLFxuICAgICAgICAgICAgc2NoZW1hUGF0aDogWy4uLl9wYXJhbXMuc2NoZW1hUGF0aCwgc2NoZW1hXSxcbiAgICAgICAgICAgIHBhdGg6IF9wYXJhbXMucGF0aCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5fem9kLnByb2Nlc3NKU09OU2NoZW1hKSB7XG4gICAgICAgICAgICBzY2hlbWEuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYShjdHgsIHJlc3VsdC5zY2hlbWEsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfanNvbiA9IHJlc3VsdC5zY2hlbWE7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBjdHgucHJvY2Vzc29yc1tkZWYudHlwZV07XG4gICAgICAgICAgICBpZiAoIXByb2Nlc3Nvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3RvSlNPTlNjaGVtYV06IE5vbi1yZXByZXNlbnRhYmxlIHR5cGUgZW5jb3VudGVyZWQ6ICR7ZGVmLnR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9jZXNzb3Ioc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNjaGVtYS5fem9kLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgLy8gQWxzbyBzZXQgcmVmIGlmIHByb2Nlc3NvciBkaWRuJ3QgKGZvciBpbmhlcml0YW5jZSlcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnJlZilcbiAgICAgICAgICAgICAgICByZXN1bHQucmVmID0gcGFyZW50O1xuICAgICAgICAgICAgcHJvY2VzcyhwYXJlbnQsIGN0eCwgcGFyYW1zKTtcbiAgICAgICAgICAgIGN0eC5zZWVuLmdldChwYXJlbnQpLmlzUGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBtZXRhZGF0YVxuICAgIGNvbnN0IG1ldGEgPSBjdHgubWV0YWRhdGFSZWdpc3RyeS5nZXQoc2NoZW1hKTtcbiAgICBpZiAobWV0YSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQuc2NoZW1hLCBtZXRhKTtcbiAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIgJiYgaXNUcmFuc2Zvcm1pbmcoc2NoZW1hKSkge1xuICAgICAgICAvLyBleGFtcGxlcy9kZWZhdWx0cyBvbmx5IGFwcGx5IHRvIG91dHB1dCB0eXBlIG9mIHBpcGVcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5zY2hlbWEuZXhhbXBsZXM7XG4gICAgICAgIGRlbGV0ZSByZXN1bHQuc2NoZW1hLmRlZmF1bHQ7XG4gICAgfVxuICAgIC8vIHNldCBwcmVmYXVsdCBhcyBkZWZhdWx0XG4gICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiICYmIHJlc3VsdC5zY2hlbWEuX3ByZWZhdWx0KVxuICAgICAgICAoX2EgPSByZXN1bHQuc2NoZW1hKS5kZWZhdWx0ID8/IChfYS5kZWZhdWx0ID0gcmVzdWx0LnNjaGVtYS5fcHJlZmF1bHQpO1xuICAgIGRlbGV0ZSByZXN1bHQuc2NoZW1hLl9wcmVmYXVsdDtcbiAgICAvLyBwdWxsaW5nIGZyZXNoIGZyb20gY3R4LnNlZW4gaW4gY2FzZSBpdCB3YXMgb3ZlcndyaXR0ZW5cbiAgICBjb25zdCBfcmVzdWx0ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgcmV0dXJuIF9yZXN1bHQuc2NoZW1hO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWZzKGN0eCwgc2NoZW1hXG4vLyBwYXJhbXM6IEVtaXRQYXJhbXNcbikge1xuICAgIC8vIGl0ZXJhdGUgb3ZlciBzZWVuIG1hcDtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBUcmFjayBpZHMgdG8gZGV0ZWN0IGR1cGxpY2F0ZXMgYWNyb3NzIGRpZmZlcmVudCBzY2hlbWFzXG4gICAgY29uc3QgaWRUb1NjaGVtYSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN0eC5zZWVuLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBpZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gaWRUb1NjaGVtYS5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nICE9PSBlbnRyeVswXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHNjaGVtYSBpZCBcIiR7aWR9XCIgZGV0ZWN0ZWQgZHVyaW5nIEpTT04gU2NoZW1hIGNvbnZlcnNpb24uIFR3byBkaWZmZXJlbnQgc2NoZW1hcyBjYW5ub3Qgc2hhcmUgdGhlIHNhbWUgaWQgd2hlbiBjb252ZXJ0ZWQgdG9nZXRoZXIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZFRvU2NoZW1hLnNldChpZCwgZW50cnlbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybnMgYSByZWYgdG8gdGhlIHNjaGVtYVxuICAgIC8vIGRlZklkIHdpbGwgYmUgZW1wdHkgaWYgdGhlIHJlZiBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hIChvciAjKVxuICAgIGNvbnN0IG1ha2VVUkkgPSAoZW50cnkpID0+IHtcbiAgICAgICAgLy8gY29tcGFyaW5nIHRoZSBzZWVuIG9iamVjdHMgYmVjYXVzZSBzb21ldGltZXNcbiAgICAgICAgLy8gbXVsdGlwbGUgc2NoZW1hcyBtYXAgdG8gdGhlIHNhbWUgc2VlbiBvYmplY3QuXG4gICAgICAgIC8vIGUuZy4gbGF6eVxuICAgICAgICAvLyBleHRlcm5hbCBpcyBjb25maWd1cmVkXG4gICAgICAgIGNvbnN0IGRlZnNTZWdtZW50ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIiRkZWZzXCIgOiBcImRlZmluaXRpb25zXCI7XG4gICAgICAgIGlmIChjdHguZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsSWQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7IC8vID8/IFwiX19zaGFyZWRcIjsvLyBgX19zY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBpbiB0aGUgZXh0ZXJuYWwgcmVnaXN0cnlcbiAgICAgICAgICAgIGNvbnN0IHVyaUdlbmVyYXRvciA9IGN0eC5leHRlcm5hbC51cmkgPz8gKChpZCkgPT4gaWQpO1xuICAgICAgICAgICAgaWYgKGV4dGVybmFsSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZWY6IHVyaUdlbmVyYXRvcihleHRlcm5hbElkKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZGQgdG8gX19zaGFyZWRcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZW50cnlbMV0uZGVmSWQgPz8gZW50cnlbMV0uc2NoZW1hLmlkID8/IGBzY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGVudHJ5WzFdLmRlZklkID0gaWQ7IC8vIHNldCBkZWZJZCBzbyBpdCB3aWxsIGJlIHJldXNlZCBpZiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB7IGRlZklkOiBpZCwgcmVmOiBgJHt1cmlHZW5lcmF0b3IoXCJfX3NoYXJlZFwiKX0jLyR7ZGVmc1NlZ21lbnR9LyR7aWR9YCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeVsxXSA9PT0gcm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVmOiBcIiNcIiB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIHNlbGYtY29udGFpbmVkIHNjaGVtYVxuICAgICAgICBjb25zdCB1cmlQcmVmaXggPSBgI2A7XG4gICAgICAgIGNvbnN0IGRlZlVyaVByZWZpeCA9IGAke3VyaVByZWZpeH0vJHtkZWZzU2VnbWVudH0vYDtcbiAgICAgICAgY29uc3QgZGVmSWQgPSBlbnRyeVsxXS5zY2hlbWEuaWQgPz8gYF9fc2NoZW1hJHtjdHguY291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiB7IGRlZklkLCByZWY6IGRlZlVyaVByZWZpeCArIGRlZklkIH07XG4gICAgfTtcbiAgICAvLyBzdG9yZWQgY2FjaGVkIHZlcnNpb24gaW4gYGRlZmAgcHJvcGVydHlcbiAgICAvLyByZW1vdmUgYWxsIHByb3BlcnRpZXMsIHNldCAkcmVmXG4gICAgY29uc3QgZXh0cmFjdFRvRGVmID0gKGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBzY2hlbWEgaXMgYWxyZWFkeSBhIHJlZmVyZW5jZSwgZG8gbm90IGV4dHJhY3QgaXRcbiAgICAgICAgaWYgKGVudHJ5WzFdLnNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICBjb25zdCB7IHJlZiwgZGVmSWQgfSA9IG1ha2VVUkkoZW50cnkpO1xuICAgICAgICBzZWVuLmRlZiA9IHsgLi4uc2Vlbi5zY2hlbWEgfTtcbiAgICAgICAgLy8gZGVmSWQgd29uJ3QgYmUgc2V0IGlmIHRoZSBzY2hlbWEgaXMgYSByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hXG4gICAgICAgIC8vIG9yIGlmIHRoZSBzY2hlbWEgaXMgdGhlIHJvb3Qgc2NoZW1hXG4gICAgICAgIGlmIChkZWZJZClcbiAgICAgICAgICAgIHNlZW4uZGVmSWQgPSBkZWZJZDtcbiAgICAgICAgLy8gd2lwZSBhd2F5IGFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCAkcmVmXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNlZW4uc2NoZW1hO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEuJHJlZiA9IHJlZjtcbiAgICB9O1xuICAgIC8vIHRocm93IG9uIGN5Y2xlc1xuICAgIC8vIGJyZWFrIGN5Y2xlc1xuICAgIGlmIChjdHguY3ljbGVzID09PSBcInRocm93XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZW4gPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIGlmIChzZWVuLmN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWQ6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgYCMvJHtzZWVuLmN5Y2xlPy5qb2luKFwiL1wiKX0vPHJvb3Q+YCArXG4gICAgICAgICAgICAgICAgICAgICdcXG5cXG5TZXQgdGhlIGBjeWNsZXNgIHBhcmFtZXRlciB0byBgXCJyZWZcImAgdG8gcmVzb2x2ZSBjeWNsaWNhbCBzY2hlbWFzIHdpdGggZGVmcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBleHRyYWN0IHNjaGVtYXMgaW50byAkZGVmc1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY3R4LnNlZW4uZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBlbnRyeVsxXTtcbiAgICAgICAgLy8gY29udmVydCByb290IHNjaGVtYSB0byAjICRyZWZcbiAgICAgICAgaWYgKHNjaGVtYSA9PT0gZW50cnlbMF0pIHtcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7IC8vIHRoaXMgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSByb290IHNjaGVtYVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCBzY2hlbWFzIHRoYXQgYXJlIGluIHRoZSBleHRlcm5hbCByZWdpc3RyeVxuICAgICAgICBpZiAoY3R4LmV4dGVybmFsKSB7XG4gICAgICAgICAgICBjb25zdCBleHQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7XG4gICAgICAgICAgICBpZiAoc2NoZW1hICE9PSBlbnRyeVswXSAmJiBleHQpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3Qgc2NoZW1hcyB3aXRoIGBpZGAgbWV0YVxuICAgICAgICBjb25zdCBpZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBicmVhayBjeWNsZXNcbiAgICAgICAgaWYgKHNlZW4uY3ljbGUpIHtcbiAgICAgICAgICAgIC8vIGFueVxuICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3QgcmV1c2VkIHNjaGVtYXNcbiAgICAgICAgaWYgKHNlZW4uY291bnQgPiAxKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnJldXNlZCA9PT0gXCJyZWZcIikge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQ6XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemUoY3R4LCBzY2hlbWEpIHtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBmbGF0dGVuIHJlZnMgLSBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSBwYXJlbnQgc2NoZW1hc1xuICAgIGNvbnN0IGZsYXR0ZW5SZWYgPSAoem9kU2NoZW1hKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoem9kU2NoZW1hKTtcbiAgICAgICAgLy8gYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgaWYgKHNlZW4ucmVmID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzZWVuLmRlZiA/PyBzZWVuLnNjaGVtYTtcbiAgICAgICAgY29uc3QgX2NhY2hlZCA9IHsgLi4uc2NoZW1hIH07XG4gICAgICAgIGNvbnN0IHJlZiA9IHNlZW4ucmVmO1xuICAgICAgICBzZWVuLnJlZiA9IG51bGw7IC8vIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uXG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIGZsYXR0ZW5SZWYocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZlNlZW4gPSBjdHguc2Vlbi5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZlNjaGVtYSA9IHJlZlNlZW4uc2NoZW1hO1xuICAgICAgICAgICAgLy8gbWVyZ2UgcmVmZXJlbmNlZCBzY2hlbWEgaW50byBjdXJyZW50XG4gICAgICAgICAgICBpZiAocmVmU2NoZW1hLiRyZWYgJiYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDdcIiB8fCBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSkge1xuICAgICAgICAgICAgICAgIC8vIG9sZGVyIGRyYWZ0cyBjYW4ndCBjb21iaW5lICRyZWYgd2l0aCBvdGhlciBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgc2NoZW1hLmFsbE9mID0gc2NoZW1hLmFsbE9mID8/IFtdO1xuICAgICAgICAgICAgICAgIHNjaGVtYS5hbGxPZi5wdXNoKHJlZlNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcmVmU2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlc3RvcmUgY2hpbGQncyBvd24gcHJvcGVydGllcyAoY2hpbGQgd2lucylcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBfY2FjaGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUGFyZW50UmVmID0gem9kU2NoZW1hLl96b2QucGFyZW50ID09PSByZWY7XG4gICAgICAgICAgICAvLyBGb3IgcGFyZW50IGNoYWluLCBjaGlsZCBpcyBhIHJlZmluZW1lbnQgLSByZW1vdmUgcGFyZW50LW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKGlzUGFyZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBfY2FjaGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiByZWYgd2FzIGV4dHJhY3RlZCB0byAkZGVmcywgcmVtb3ZlIHByb3BlcnRpZXMgdGhhdCBtYXRjaCB0aGUgZGVmaW5pdGlvblxuICAgICAgICAgICAgaWYgKHJlZlNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcmVmU2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShyZWZTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHBhcmVudCB3YXMgZXh0cmFjdGVkIChoYXMgJHJlZiksIHByb3BhZ2F0ZSAkcmVmIHRvIHRoaXMgc2NoZW1hXG4gICAgICAgIC8vIFRoaXMgaGFuZGxlcyBjYXNlcyBsaWtlOiByZWFkb25seSgpLm1ldGEoe2lkfSkuZGVzY3JpYmUoKVxuICAgICAgICAvLyB3aGVyZSBwcm9jZXNzb3Igc2V0cyByZWYgdG8gaW5uZXJUeXBlIGJ1dCBwYXJlbnQgc2hvdWxkIGJlIHJlZmVyZW5jZWRcbiAgICAgICAgY29uc3QgcGFyZW50ID0gem9kU2NoZW1hLl96b2QucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudCAhPT0gcmVmKSB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgcGFyZW50IGlzIHByb2Nlc3NlZCBmaXJzdCBzbyBpdHMgZGVmIGhhcyBpbmhlcml0ZWQgcHJvcGVydGllc1xuICAgICAgICAgICAgZmxhdHRlblJlZihwYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50U2VlbiA9IGN0eC5zZWVuLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudFNlZW4/LnNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLiRyZWYgPSBwYXJlbnRTZWVuLnNjaGVtYS4kcmVmO1xuICAgICAgICAgICAgICAgIC8vIERlLWR1cGxpY2F0ZSB3aXRoIHBhcmVudCdzIGRlZmluaXRpb25cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U2Vlbi5kZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcIiRyZWZcIiB8fCBrZXkgPT09IFwiYWxsT2ZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcGFyZW50U2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShwYXJlbnRTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleGVjdXRlIG92ZXJyaWRlc1xuICAgICAgICBjdHgub3ZlcnJpZGUoe1xuICAgICAgICAgICAgem9kU2NoZW1hOiB6b2RTY2hlbWEsXG4gICAgICAgICAgICBqc29uU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICBwYXRoOiBzZWVuLnBhdGggPz8gW10sXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4uY3R4LnNlZW4uZW50cmllcygpXS5yZXZlcnNlKCkpIHtcbiAgICAgICAgZmxhdHRlblJlZihlbnRyeVswXSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICByZXN1bHQuJHNjaGVtYSA9IFwiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWFcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgIC8vIE9wZW5BUEkgMy4wIHNjaGVtYSBvYmplY3RzIHNob3VsZCBub3QgaW5jbHVkZSBhICRzY2hlbWEgcHJvcGVydHlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEFyYml0cmFyeSBzdHJpbmcgdmFsdWVzIGFyZSBhbGxvd2VkIGJ1dCB3b24ndCBoYXZlIGEgJHNjaGVtYSBwcm9wZXJ0eSBzZXRcbiAgICB9XG4gICAgaWYgKGN0eC5leHRlcm5hbD8udXJpKSB7XG4gICAgICAgIGNvbnN0IGlkID0gY3R4LmV4dGVybmFsLnJlZ2lzdHJ5LmdldChzY2hlbWEpPy5pZDtcbiAgICAgICAgaWYgKCFpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjaGVtYSBpcyBtaXNzaW5nIGFuIGBpZGAgcHJvcGVydHlcIik7XG4gICAgICAgIHJlc3VsdC4kaWQgPSBjdHguZXh0ZXJuYWwudXJpKGlkKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHJvb3QuZGVmID8/IHJvb3Quc2NoZW1hKTtcbiAgICAvLyBidWlsZCBkZWZzIG9iamVjdFxuICAgIGNvbnN0IGRlZnMgPSBjdHguZXh0ZXJuYWw/LmRlZnMgPz8ge307XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICBpZiAoc2Vlbi5kZWYgJiYgc2Vlbi5kZWZJZCkge1xuICAgICAgICAgICAgZGVmc1tzZWVuLmRlZklkXSA9IHNlZW4uZGVmO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBkZWZpbml0aW9ucyBpbiByZXN1bHRcbiAgICBpZiAoY3R4LmV4dGVybmFsKSB7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGVmcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LiRkZWZzID0gZGVmcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kZWZpbml0aW9ucyA9IGRlZnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBcImZpbmFsaXplc1wiIHRoaXMgc2NoZW1hIGFuZCBlbnN1cmVzIGFsbCBjeWNsZXMgYXJlIHJlbW92ZWRcbiAgICAgICAgLy8gZWFjaCBjYWxsIHRvIGZpbmFsaXplKCkgaXMgZnVuY3Rpb25hbGx5IGluZGVwZW5kZW50XG4gICAgICAgIC8vIHRob3VnaCB0aGUgc2VlbiBtYXAgaXMgc2hhcmVkXG4gICAgICAgIGNvbnN0IGZpbmFsaXplZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaW5hbGl6ZWQsIFwifnN0YW5kYXJkXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hW1wifnN0YW5kYXJkXCJdLFxuICAgICAgICAgICAgICAgIGpzb25TY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZChzY2hlbWEsIFwiaW5wdXRcIiwgY3R4LnByb2Nlc3NvcnMpLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ6IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZChzY2hlbWEsIFwib3V0cHV0XCIsIGN0eC5wcm9jZXNzb3JzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbmFsaXplZDtcbiAgICB9XG4gICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY29udmVydGluZyBzY2hlbWEgdG8gSlNPTi5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNUcmFuc2Zvcm1pbmcoX3NjaGVtYSwgX2N0eCkge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPz8geyBzZWVuOiBuZXcgU2V0KCkgfTtcbiAgICBpZiAoY3R4LnNlZW4uaGFzKF9zY2hlbWEpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY3R4LnNlZW4uYWRkKF9zY2hlbWEpO1xuICAgIGNvbnN0IGRlZiA9IF9zY2hlbWEuX3pvZC5kZWY7XG4gICAgaWYgKGRlZi50eXBlID09PSBcInRyYW5zZm9ybVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5lbGVtZW50LCBjdHgpO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJzZXRcIilcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi52YWx1ZVR5cGUsIGN0eCk7XG4gICAgaWYgKGRlZi50eXBlID09PSBcImxhenlcIilcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5nZXR0ZXIoKSwgY3R4KTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwicHJvbWlzZVwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIgfHxcbiAgICAgICAgZGVmLnR5cGUgPT09IFwibm9ub3B0aW9uYWxcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJudWxsYWJsZVwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcInJlYWRvbmx5XCIgfHxcbiAgICAgICAgZGVmLnR5cGUgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcInByZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5pbm5lclR5cGUsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJpbnRlcnNlY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmxlZnQsIGN0eCkgfHwgaXNUcmFuc2Zvcm1pbmcoZGVmLnJpZ2h0LCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwicmVjb3JkXCIgfHwgZGVmLnR5cGUgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5rZXlUeXBlLCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi52YWx1ZVR5cGUsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJwaXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5pbiwgY3R4KSB8fCBpc1RyYW5zZm9ybWluZyhkZWYub3V0LCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGVmLnNoYXBlKSB7XG4gICAgICAgICAgICBpZiAoaXNUcmFuc2Zvcm1pbmcoZGVmLnNoYXBlW2tleV0sIGN0eCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwidW5pb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBkZWYub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNmb3JtaW5nKG9wdGlvbiwgY3R4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJ0dXBsZVwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkZWYuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpc1RyYW5zZm9ybWluZyhpdGVtLCBjdHgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYucmVzdCAmJiBpc1RyYW5zZm9ybWluZyhkZWYucmVzdCwgY3R4KSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRvSlNPTlNjaGVtYSBtZXRob2QgZm9yIGEgc2NoZW1hIGluc3RhbmNlLlxuICogVGhpcyBlbmNhcHN1bGF0ZXMgdGhlIGxvZ2ljIG9mIGluaXRpYWxpemluZyBjb250ZXh0LCBwcm9jZXNzaW5nLCBleHRyYWN0aW5nIGRlZnMsIGFuZCBmaW5hbGl6aW5nLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kID0gKHNjaGVtYSwgcHJvY2Vzc29ycyA9IHt9KSA9PiAocGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoeyAuLi5wYXJhbXMsIHByb2Nlc3NvcnMgfSk7XG4gICAgcHJvY2VzcyhzY2hlbWEsIGN0eCk7XG4gICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgIHJldHVybiBmaW5hbGl6ZShjdHgsIHNjaGVtYSk7XG59O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZCA9IChzY2hlbWEsIGlvLCBwcm9jZXNzb3JzID0ge30pID0+IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IGxpYnJhcnlPcHRpb25zLCB0YXJnZXQgfSA9IHBhcmFtcyA/PyB7fTtcbiAgICBjb25zdCBjdHggPSBpbml0aWFsaXplQ29udGV4dCh7IC4uLihsaWJyYXJ5T3B0aW9ucyA/PyB7fSksIHRhcmdldCwgaW8sIHByb2Nlc3NvcnMgfSk7XG4gICAgcHJvY2VzcyhzY2hlbWEsIGN0eCk7XG4gICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgIHJldHVybiBmaW5hbGl6ZShjdHgsIHNjaGVtYSk7XG59O1xuIiwKICAgICJpbXBvcnQgeyBleHRyYWN0RGVmcywgZmluYWxpemUsIGluaXRpYWxpemVDb250ZXh0LCBwcm9jZXNzLCB9IGZyb20gXCIuL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBnZXRFbnVtVmFsdWVzIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuY29uc3QgZm9ybWF0TWFwID0ge1xuICAgIGd1aWQ6IFwidXVpZFwiLFxuICAgIHVybDogXCJ1cmlcIixcbiAgICBkYXRldGltZTogXCJkYXRlLXRpbWVcIixcbiAgICBqc29uX3N0cmluZzogXCJqc29uLXN0cmluZ1wiLFxuICAgIHJlZ2V4OiBcIlwiLCAvLyBkbyBub3Qgc2V0XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gU0lNUExFIFRZUEUgUFJPQ0VTU09SUyA9PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGNvbnN0IHN0cmluZ1Byb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgcGF0dGVybnMsIGNvbnRlbnRFbmNvZGluZyB9ID0gc2NoZW1hLl96b2RcbiAgICAgICAgLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluTGVuZ3RoID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWF4TGVuZ3RoID0gbWF4aW11bTtcbiAgICAvLyBjdXN0b20gcGF0dGVybiBvdmVycmlkZXMgZm9ybWF0XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgICBqc29uLmZvcm1hdCA9IGZvcm1hdE1hcFtmb3JtYXRdID8/IGZvcm1hdDtcbiAgICAgICAgaWYgKGpzb24uZm9ybWF0ID09PSBcIlwiKVxuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0OyAvLyBlbXB0eSBmb3JtYXQgaXMgbm90IHZhbGlkXG4gICAgICAgIC8vIEpTT04gU2NoZW1hIGZvcm1hdDogXCJ0aW1lXCIgcmVxdWlyZXMgYSBmdWxsIHRpbWUgd2l0aCBvZmZzZXQgb3IgWlxuICAgICAgICAvLyB6Lmlzby50aW1lKCkgZG9lcyBub3QgaW5jbHVkZSB0aW1lem9uZSBpbmZvcm1hdGlvbiwgc28gZm9ybWF0OiBcInRpbWVcIiBzaG91bGQgbmV2ZXIgYmUgdXNlZFxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50RW5jb2RpbmcpXG4gICAgICAgIGpzb24uY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgIGlmIChwYXR0ZXJucyAmJiBwYXR0ZXJucy5zaXplID4gMCkge1xuICAgICAgICBjb25zdCByZWdleGVzID0gWy4uLnBhdHRlcm5zXTtcbiAgICAgICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAganNvbi5wYXR0ZXJuID0gcmVnZXhlc1swXS5zb3VyY2U7XG4gICAgICAgIGVsc2UgaWYgKHJlZ2V4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAganNvbi5hbGxPZiA9IFtcbiAgICAgICAgICAgICAgICAuLi5yZWdleGVzLm1hcCgocmVnZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLihjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHJlZ2V4LnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudW1iZXJQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSwgZm9ybWF0LCBtdWx0aXBsZU9mLCBleGNsdXNpdmVNYXhpbXVtLCBleGNsdXNpdmVNaW5pbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIgJiYgZm9ybWF0LmluY2x1ZGVzKFwiaW50XCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcImludGVnZXJcIjtcbiAgICBlbHNlXG4gICAgICAgIGpzb24udHlwZSA9IFwibnVtYmVyXCI7XG4gICAgaWYgKHR5cGVvZiBleGNsdXNpdmVNaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgICAgICBqc29uLm1pbmltdW0gPSBleGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICAgICAganNvbi5leGNsdXNpdmVNaW5pbXVtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWluaW11bSA9IGV4Y2x1c2l2ZU1pbmltdW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGpzb24ubWluaW11bSA9IG1pbmltdW07XG4gICAgICAgIGlmICh0eXBlb2YgZXhjbHVzaXZlTWluaW11bSA9PT0gXCJudW1iZXJcIiAmJiBjdHgudGFyZ2V0ICE9PSBcImRyYWZ0LTA0XCIpIHtcbiAgICAgICAgICAgIGlmIChleGNsdXNpdmVNaW5pbXVtID49IG1pbmltdW0pXG4gICAgICAgICAgICAgICAgZGVsZXRlIGpzb24ubWluaW11bTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkZWxldGUganNvbi5leGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICAgICAganNvbi5tYXhpbXVtID0gZXhjbHVzaXZlTWF4aW11bTtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWF4aW11bSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1heGltdW0gPSBleGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBqc29uLm1heGltdW0gPSBtYXhpbXVtO1xuICAgICAgICBpZiAodHlwZW9mIGV4Y2x1c2l2ZU1heGltdW0gPT09IFwibnVtYmVyXCIgJiYgY3R4LnRhcmdldCAhPT0gXCJkcmFmdC0wNFwiKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVzaXZlTWF4aW11bSA8PSBtYXhpbXVtKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLm1heGltdW07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGVsZXRlIGpzb24uZXhjbHVzaXZlTWF4aW11bTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG11bHRpcGxlT2YgPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubXVsdGlwbGVPZiA9IG11bHRpcGxlT2Y7XG59O1xuZXhwb3J0IGNvbnN0IGJvb2xlYW5Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGpzb24udHlwZSA9IFwiYm9vbGVhblwiO1xufTtcbmV4cG9ydCBjb25zdCBiaWdpbnRQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHN5bWJvbFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeW1ib2xzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG51bGxQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBqc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBqc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgICAgICBqc29uLm51bGxhYmxlID0gdHJ1ZTtcbiAgICAgICAganNvbi5lbnVtID0gW251bGxdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi50eXBlID0gXCJudWxsXCI7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB1bmRlZmluZWRQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5kZWZpbmVkIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHZvaWRQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVm9pZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBuZXZlclByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBqc29uLCBfcGFyYW1zKSA9PiB7XG4gICAganNvbi5ub3QgPSB7fTtcbn07XG5leHBvcnQgY29uc3QgYW55UHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgLy8gZW1wdHkgc2NoZW1hIGFjY2VwdHMgYW55dGhpbmdcbn07XG5leHBvcnQgY29uc3QgdW5rbm93blByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIC8vIGVtcHR5IHNjaGVtYSBhY2NlcHRzIGFueXRoaW5nXG59O1xuZXhwb3J0IGNvbnN0IGRhdGVQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0ZSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbnVtUHJvY2Vzc29yID0gKHNjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRFbnVtVmFsdWVzKGRlZi5lbnRyaWVzKTtcbiAgICAvLyBOdW1iZXIgZW51bXMgY2FuIGhhdmUgYm90aCBzdHJpbmcgYW5kIG51bWJlciB2YWx1ZXNcbiAgICBpZiAodmFsdWVzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikpXG4gICAgICAgIGpzb24udHlwZSA9IFwibnVtYmVyXCI7XG4gICAgaWYgKHZhbHVlcy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgIGpzb24uZW51bSA9IHZhbHVlcztcbn07XG5leHBvcnQgY29uc3QgbGl0ZXJhbFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCB2YWxzID0gW107XG4gICAgZm9yIChjb25zdCB2YWwgb2YgZGVmLnZhbHVlcykge1xuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMaXRlcmFsIGB1bmRlZmluZWRgIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgdG8gdmFsc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09IFwiYmlnaW50XCIpIHtcbiAgICAgICAgICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgbGl0ZXJhbHMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFscy5wdXNoKE51bWJlcih2YWwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHMucHVzaCh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2YWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nIChhbiB1bmRlZmluZWQgbGl0ZXJhbCB3YXMgc3RyaXBwZWQpXG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHZhbHNbMF07XG4gICAgICAgIGpzb24udHlwZSA9IHZhbCA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIHZhbDtcbiAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDRcIiB8fCBjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAgICAgIGpzb24uZW51bSA9IFt2YWxdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAganNvbi5jb25zdCA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSlcbiAgICAgICAgICAgIGpzb24udHlwZSA9IFwibnVtYmVyXCI7XG4gICAgICAgIGlmICh2YWxzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgICAgICBpZiAodmFscy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSlcbiAgICAgICAgICAgIGpzb24udHlwZSA9IFwiYm9vbGVhblwiO1xuICAgICAgICBpZiAodmFscy5ldmVyeSgodikgPT4gdiA9PT0gbnVsbCkpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcIm51bGxcIjtcbiAgICAgICAganNvbi5lbnVtID0gdmFscztcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG5hblByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOYU4gY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdGVtcGxhdGVMaXRlcmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGNvbnN0IF9qc29uID0ganNvbjtcbiAgICBjb25zdCBwYXR0ZXJuID0gc2NoZW1hLl96b2QucGF0dGVybjtcbiAgICBpZiAoIXBhdHRlcm4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdHRlcm4gbm90IGZvdW5kIGluIHRlbXBsYXRlIGxpdGVyYWxcIik7XG4gICAgX2pzb24udHlwZSA9IFwic3RyaW5nXCI7XG4gICAgX2pzb24ucGF0dGVybiA9IHBhdHRlcm4uc291cmNlO1xufTtcbmV4cG9ydCBjb25zdCBmaWxlUHJvY2Vzc29yID0gKHNjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGNvbnN0IF9qc29uID0ganNvbjtcbiAgICBjb25zdCBmaWxlID0ge1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiYmluYXJ5XCIsXG4gICAgICAgIGNvbnRlbnRFbmNvZGluZzogXCJiaW5hcnlcIixcbiAgICB9O1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSwgbWltZSB9ID0gc2NoZW1hLl96b2QuYmFnO1xuICAgIGlmIChtaW5pbXVtICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGZpbGUubWluTGVuZ3RoID0gbWluaW11bTtcbiAgICBpZiAobWF4aW11bSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBmaWxlLm1heExlbmd0aCA9IG1heGltdW07XG4gICAgaWYgKG1pbWUpIHtcbiAgICAgICAgaWYgKG1pbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBmaWxlLmNvbnRlbnRNZWRpYVR5cGUgPSBtaW1lWzBdO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF9qc29uLCBmaWxlKTsgLy8gc2hhcmVkIHByb3BzIGF0IHJvb3RcbiAgICAgICAgICAgIF9qc29uLmFueU9mID0gbWltZS5tYXAoKG0pID0+ICh7IGNvbnRlbnRNZWRpYVR5cGU6IG0gfSkpOyAvLyBvbmx5IGNvbnRlbnRNZWRpYVR5cGUgZGlmZmVyc1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKF9qc29uLCBmaWxlKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3NQcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGpzb24udHlwZSA9IFwiYm9vbGVhblwiO1xufTtcbmV4cG9ydCBjb25zdCBjdXN0b21Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3VzdG9tIHR5cGVzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc2Zvcm1zIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG1hcFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYXAgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgc2V0UHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNldCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbi8vID09PT09PT09PT09PT09PT09PT09IENPTVBPU0lURSBUWVBFIFBST0NFU1NPUlMgPT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCBjb25zdCBhcnJheVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgeyBtaW5pbXVtLCBtYXhpbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm1pbkl0ZW1zID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWF4SXRlbXMgPSBtYXhpbXVtO1xuICAgIGpzb24udHlwZSA9IFwiYXJyYXlcIjtcbiAgICBqc29uLml0ZW1zID0gcHJvY2VzcyhkZWYuZWxlbWVudCwgY3R4LCB7IC4uLnBhcmFtcywgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcIml0ZW1zXCJdIH0pO1xufTtcbmV4cG9ydCBjb25zdCBvYmplY3RQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGpzb24udHlwZSA9IFwib2JqZWN0XCI7XG4gICAganNvbi5wcm9wZXJ0aWVzID0ge307XG4gICAgY29uc3Qgc2hhcGUgPSBkZWYuc2hhcGU7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2hhcGUpIHtcbiAgICAgICAganNvbi5wcm9wZXJ0aWVzW2tleV0gPSBwcm9jZXNzKHNoYXBlW2tleV0sIGN0eCwge1xuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcInByb3BlcnRpZXNcIiwga2V5XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlcXVpcmVkIGtleXNcbiAgICBjb25zdCBhbGxLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhzaGFwZSkpO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoWy4uLmFsbEtleXNdLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSBkZWYuc2hhcGVba2V5XS5fem9kO1xuICAgICAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2Lm9wdGluID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdi5vcHRvdXQgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBpZiAocmVxdWlyZWRLZXlzLnNpemUgPiAwKSB7XG4gICAgICAgIGpzb24ucmVxdWlyZWQgPSBBcnJheS5mcm9tKHJlcXVpcmVkS2V5cyk7XG4gICAgfVxuICAgIC8vIGNhdGNoYWxsXG4gICAgaWYgKGRlZi5jYXRjaGFsbD8uX3pvZC5kZWYudHlwZSA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgIC8vIHN0cmljdFxuICAgICAgICBqc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFkZWYuY2F0Y2hhbGwpIHtcbiAgICAgICAgLy8gcmVndWxhclxuICAgICAgICBpZiAoY3R4LmlvID09PSBcIm91dHB1dFwiKVxuICAgICAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZWYuY2F0Y2hhbGwpIHtcbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IHByb2Nlc3MoZGVmLmNhdGNoYWxsLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXSxcbiAgICAgICAgfSk7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB1bmlvblByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIC8vIEV4Y2x1c2l2ZSB1bmlvbnMgKGluY2x1c2l2ZSA9PT0gZmFsc2UpIHVzZSBvbmVPZiAoZXhhY3RseSBvbmUgbWF0Y2gpIGluc3RlYWQgb2YgYW55T2YgKG9uZSBvciBtb3JlIG1hdGNoZXMpXG4gICAgLy8gVGhpcyBpbmNsdWRlcyBib3RoIHoueG9yKCkgYW5kIGRpc2NyaW1pbmF0ZWQgdW5pb25zXG4gICAgY29uc3QgaXNFeGNsdXNpdmUgPSBkZWYuaW5jbHVzaXZlID09PSBmYWxzZTtcbiAgICBjb25zdCBvcHRpb25zID0gZGVmLm9wdGlvbnMubWFwKCh4LCBpKSA9PiBwcm9jZXNzKHgsIGN0eCwge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgaXNFeGNsdXNpdmUgPyBcIm9uZU9mXCIgOiBcImFueU9mXCIsIGldLFxuICAgIH0pKTtcbiAgICBpZiAoaXNFeGNsdXNpdmUpIHtcbiAgICAgICAganNvbi5vbmVPZiA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBqc29uLmFueU9mID0gb3B0aW9ucztcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGludGVyc2VjdGlvblByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IGEgPSBwcm9jZXNzKGRlZi5sZWZ0LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWxsT2ZcIiwgMF0sXG4gICAgfSk7XG4gICAgY29uc3QgYiA9IHByb2Nlc3MoZGVmLnJpZ2h0LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWxsT2ZcIiwgMV0sXG4gICAgfSk7XG4gICAgY29uc3QgaXNTaW1wbGVJbnRlcnNlY3Rpb24gPSAodmFsKSA9PiBcImFsbE9mXCIgaW4gdmFsICYmIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IGFsbE9mID0gW1xuICAgICAgICAuLi4oaXNTaW1wbGVJbnRlcnNlY3Rpb24oYSkgPyBhLmFsbE9mIDogW2FdKSxcbiAgICAgICAgLi4uKGlzU2ltcGxlSW50ZXJzZWN0aW9uKGIpID8gYi5hbGxPZiA6IFtiXSksXG4gICAgXTtcbiAgICBqc29uLmFsbE9mID0gYWxsT2Y7XG59O1xuZXhwb3J0IGNvbnN0IHR1cGxlUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcImFycmF5XCI7XG4gICAgY29uc3QgcHJlZml4UGF0aCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCJwcmVmaXhJdGVtc1wiIDogXCJpdGVtc1wiO1xuICAgIGNvbnN0IHJlc3RQYXRoID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIml0ZW1zXCIgOiBjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIgPyBcIml0ZW1zXCIgOiBcImFkZGl0aW9uYWxJdGVtc1wiO1xuICAgIGNvbnN0IHByZWZpeEl0ZW1zID0gZGVmLml0ZW1zLm1hcCgoeCwgaSkgPT4gcHJvY2Vzcyh4LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIHByZWZpeFBhdGgsIGldLFxuICAgIH0pKTtcbiAgICBjb25zdCByZXN0ID0gZGVmLnJlc3RcbiAgICAgICAgPyBwcm9jZXNzKGRlZi5yZXN0LCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgcmVzdFBhdGgsIC4uLihjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIgPyBbZGVmLml0ZW1zLmxlbmd0aF0gOiBbXSldLFxuICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgIGpzb24ucHJlZml4SXRlbXMgPSBwcmVmaXhJdGVtcztcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uaXRlbXMgPSByZXN0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBqc29uLml0ZW1zID0ge1xuICAgICAgICAgICAgYW55T2Y6IHByZWZpeEl0ZW1zLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAganNvbi5pdGVtcy5hbnlPZi5wdXNoKHJlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGpzb24ubWluSXRlbXMgPSBwcmVmaXhJdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICghcmVzdCkge1xuICAgICAgICAgICAganNvbi5tYXhJdGVtcyA9IHByZWZpeEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5pdGVtcyA9IHByZWZpeEl0ZW1zO1xuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAganNvbi5hZGRpdGlvbmFsSXRlbXMgPSByZXN0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGxlbmd0aFxuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSB9ID0gc2NoZW1hLl96b2QuYmFnO1xuICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5taW5JdGVtcyA9IG1pbmltdW07XG4gICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm1heEl0ZW1zID0gbWF4aW11bTtcbn07XG5leHBvcnQgY29uc3QgcmVjb3JkUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcIm9iamVjdFwiO1xuICAgIC8vIEZvciBsb29zZVJlY29yZCB3aXRoIHJlZ2V4IHBhdHRlcm5zLCB1c2UgcGF0dGVyblByb3BlcnRpZXNcbiAgICAvLyBUaGlzIGNvcnJlY3RseSByZXByZXNlbnRzIFwib25seSB2YWxpZGF0ZSBrZXlzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuXCIgc2VtYW50aWNzXG4gICAgLy8gYW5kIGNvbXBvc2VzIHdlbGwgd2l0aCBhbGxPZiAoaW50ZXJzZWN0aW9ucylcbiAgICBjb25zdCBrZXlUeXBlID0gZGVmLmtleVR5cGU7XG4gICAgY29uc3Qga2V5QmFnID0ga2V5VHlwZS5fem9kLmJhZztcbiAgICBjb25zdCBwYXR0ZXJucyA9IGtleUJhZz8ucGF0dGVybnM7XG4gICAgaWYgKGRlZi5tb2RlID09PSBcImxvb3NlXCIgJiYgcGF0dGVybnMgJiYgcGF0dGVybnMuc2l6ZSA+IDApIHtcbiAgICAgICAgLy8gVXNlIHBhdHRlcm5Qcm9wZXJ0aWVzIGZvciBsb29zZVJlY29yZCB3aXRoIHJlZ2V4IHBhdHRlcm5zXG4gICAgICAgIGNvbnN0IHZhbHVlU2NoZW1hID0gcHJvY2VzcyhkZWYudmFsdWVUeXBlLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwYXR0ZXJuUHJvcGVydGllc1wiLCBcIipcIl0sXG4gICAgICAgIH0pO1xuICAgICAgICBqc29uLnBhdHRlcm5Qcm9wZXJ0aWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgICAgICAganNvbi5wYXR0ZXJuUHJvcGVydGllc1twYXR0ZXJuLnNvdXJjZV0gPSB2YWx1ZVNjaGVtYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRGVmYXVsdCBiZWhhdmlvcjogdXNlIHByb3BlcnR5TmFtZXMgKyBhZGRpdGlvbmFsUHJvcGVydGllc1xuICAgICAgICBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiIHx8IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgICAgICBqc29uLnByb3BlcnR5TmFtZXMgPSBwcm9jZXNzKGRlZi5rZXlUeXBlLCBjdHgsIHtcbiAgICAgICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcInByb3BlcnR5TmFtZXNcIl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBqc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gcHJvY2VzcyhkZWYudmFsdWVUeXBlLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEFkZCByZXF1aXJlZCBmb3Iga2V5cyB3aXRoIGRpc2NyZXRlIHZhbHVlcyAoZW51bSwgbGl0ZXJhbCwgZXRjLilcbiAgICBjb25zdCBrZXlWYWx1ZXMgPSBrZXlUeXBlLl96b2QudmFsdWVzO1xuICAgIGlmIChrZXlWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRLZXlWYWx1ZXMgPSBbLi4ua2V5VmFsdWVzXS5maWx0ZXIoKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTtcbiAgICAgICAgaWYgKHZhbGlkS2V5VmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGpzb24ucmVxdWlyZWQgPSB2YWxpZEtleVZhbHVlcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbnVsbGFibGVQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBpbm5lciA9IHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBpZiAoY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICAgICAganNvbi5udWxsYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBqc29uLmFueU9mID0gW2lubmVyLCB7IHR5cGU6IFwibnVsbFwiIH1dO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgbm9ub3B0aW9uYWxQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbn07XG5leHBvcnQgY29uc3QgZGVmYXVsdFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAganNvbi5kZWZhdWx0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWYuZGVmYXVsdFZhbHVlKSk7XG59O1xuZXhwb3J0IGNvbnN0IHByZWZhdWx0UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIpXG4gICAgICAgIGpzb24uX3ByZWZhdWx0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWYuZGVmYXVsdFZhbHVlKSk7XG59O1xuZXhwb3J0IGNvbnN0IGNhdGNoUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBsZXQgY2F0Y2hWYWx1ZTtcbiAgICB0cnkge1xuICAgICAgICBjYXRjaFZhbHVlID0gZGVmLmNhdGNoVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIGNhdGNoIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG4gICAganNvbi5kZWZhdWx0ID0gY2F0Y2hWYWx1ZTtcbn07XG5leHBvcnQgY29uc3QgcGlwZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBpbm5lclR5cGUgPSBjdHguaW8gPT09IFwiaW5wdXRcIiA/IChkZWYuaW4uX3pvZC5kZWYudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGRlZi5vdXQgOiBkZWYuaW4pIDogZGVmLm91dDtcbiAgICBwcm9jZXNzKGlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGlubmVyVHlwZTtcbn07XG5leHBvcnQgY29uc3QgcmVhZG9ubHlQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xuICAgIGpzb24ucmVhZE9ubHkgPSB0cnVlO1xufTtcbmV4cG9ydCBjb25zdCBwcm9taXNlUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IG9wdGlvbmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IGxhenlQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSBzY2hlbWEuX3pvZC5pbm5lclR5cGU7XG4gICAgcHJvY2Vzcyhpbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBpbm5lclR5cGU7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gQUxMIFBST0NFU1NPUlMgPT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCBjb25zdCBhbGxQcm9jZXNzb3JzID0ge1xuICAgIHN0cmluZzogc3RyaW5nUHJvY2Vzc29yLFxuICAgIG51bWJlcjogbnVtYmVyUHJvY2Vzc29yLFxuICAgIGJvb2xlYW46IGJvb2xlYW5Qcm9jZXNzb3IsXG4gICAgYmlnaW50OiBiaWdpbnRQcm9jZXNzb3IsXG4gICAgc3ltYm9sOiBzeW1ib2xQcm9jZXNzb3IsXG4gICAgbnVsbDogbnVsbFByb2Nlc3NvcixcbiAgICB1bmRlZmluZWQ6IHVuZGVmaW5lZFByb2Nlc3NvcixcbiAgICB2b2lkOiB2b2lkUHJvY2Vzc29yLFxuICAgIG5ldmVyOiBuZXZlclByb2Nlc3NvcixcbiAgICBhbnk6IGFueVByb2Nlc3NvcixcbiAgICB1bmtub3duOiB1bmtub3duUHJvY2Vzc29yLFxuICAgIGRhdGU6IGRhdGVQcm9jZXNzb3IsXG4gICAgZW51bTogZW51bVByb2Nlc3NvcixcbiAgICBsaXRlcmFsOiBsaXRlcmFsUHJvY2Vzc29yLFxuICAgIG5hbjogbmFuUHJvY2Vzc29yLFxuICAgIHRlbXBsYXRlX2xpdGVyYWw6IHRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvcixcbiAgICBmaWxlOiBmaWxlUHJvY2Vzc29yLFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NQcm9jZXNzb3IsXG4gICAgY3VzdG9tOiBjdXN0b21Qcm9jZXNzb3IsXG4gICAgZnVuY3Rpb246IGZ1bmN0aW9uUHJvY2Vzc29yLFxuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtUHJvY2Vzc29yLFxuICAgIG1hcDogbWFwUHJvY2Vzc29yLFxuICAgIHNldDogc2V0UHJvY2Vzc29yLFxuICAgIGFycmF5OiBhcnJheVByb2Nlc3NvcixcbiAgICBvYmplY3Q6IG9iamVjdFByb2Nlc3NvcixcbiAgICB1bmlvbjogdW5pb25Qcm9jZXNzb3IsXG4gICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25Qcm9jZXNzb3IsXG4gICAgdHVwbGU6IHR1cGxlUHJvY2Vzc29yLFxuICAgIHJlY29yZDogcmVjb3JkUHJvY2Vzc29yLFxuICAgIG51bGxhYmxlOiBudWxsYWJsZVByb2Nlc3NvcixcbiAgICBub25vcHRpb25hbDogbm9ub3B0aW9uYWxQcm9jZXNzb3IsXG4gICAgZGVmYXVsdDogZGVmYXVsdFByb2Nlc3NvcixcbiAgICBwcmVmYXVsdDogcHJlZmF1bHRQcm9jZXNzb3IsXG4gICAgY2F0Y2g6IGNhdGNoUHJvY2Vzc29yLFxuICAgIHBpcGU6IHBpcGVQcm9jZXNzb3IsXG4gICAgcmVhZG9ubHk6IHJlYWRvbmx5UHJvY2Vzc29yLFxuICAgIHByb21pc2U6IHByb21pc2VQcm9jZXNzb3IsXG4gICAgb3B0aW9uYWw6IG9wdGlvbmFsUHJvY2Vzc29yLFxuICAgIGxhenk6IGxhenlQcm9jZXNzb3IsXG59O1xuZXhwb3J0IGZ1bmN0aW9uIHRvSlNPTlNjaGVtYShpbnB1dCwgcGFyYW1zKSB7XG4gICAgaWYgKFwiX2lkbWFwXCIgaW4gaW5wdXQpIHtcbiAgICAgICAgLy8gUmVnaXN0cnkgY2FzZVxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IGlucHV0O1xuICAgICAgICBjb25zdCBjdHggPSBpbml0aWFsaXplQ29udGV4dCh7IC4uLnBhcmFtcywgcHJvY2Vzc29yczogYWxsUHJvY2Vzc29ycyB9KTtcbiAgICAgICAgY29uc3QgZGVmcyA9IHt9O1xuICAgICAgICAvLyBGaXJzdCBwYXNzOiBwcm9jZXNzIGFsbCBzY2hlbWFzIHRvIGJ1aWxkIHRoZSBzZWVuIG1hcFxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlZ2lzdHJ5Ll9pZG1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtfLCBzY2hlbWFdID0gZW50cnk7XG4gICAgICAgICAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2hlbWFzID0ge307XG4gICAgICAgIGNvbnN0IGV4dGVybmFsID0ge1xuICAgICAgICAgICAgcmVnaXN0cnksXG4gICAgICAgICAgICB1cmk6IHBhcmFtcz8udXJpLFxuICAgICAgICAgICAgZGVmcyxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjb250ZXh0IHdpdGggZXh0ZXJuYWwgY29uZmlndXJhdGlvblxuICAgICAgICBjdHguZXh0ZXJuYWwgPSBleHRlcm5hbDtcbiAgICAgICAgLy8gU2Vjb25kIHBhc3M6IGVtaXQgZWFjaCBzY2hlbWFcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5faWRtYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCBzY2hlbWFdID0gZW50cnk7XG4gICAgICAgICAgICBleHRyYWN0RGVmcyhjdHgsIHNjaGVtYSk7XG4gICAgICAgICAgICBzY2hlbWFzW2tleV0gPSBmaW5hbGl6ZShjdHgsIHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRlZnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZnNTZWdtZW50ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIiRkZWZzXCIgOiBcImRlZmluaXRpb25zXCI7XG4gICAgICAgICAgICBzY2hlbWFzLl9fc2hhcmVkID0ge1xuICAgICAgICAgICAgICAgIFtkZWZzU2VnbWVudF06IGRlZnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNjaGVtYXMgfTtcbiAgICB9XG4gICAgLy8gU2luZ2xlIHNjaGVtYSBjYXNlXG4gICAgY29uc3QgY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoeyAuLi5wYXJhbXMsIHByb2Nlc3NvcnM6IGFsbFByb2Nlc3NvcnMgfSk7XG4gICAgcHJvY2VzcyhpbnB1dCwgY3R4KTtcbiAgICBleHRyYWN0RGVmcyhjdHgsIGlucHV0KTtcbiAgICByZXR1cm4gZmluYWxpemUoY3R4LCBpbnB1dCk7XG59XG4iLAogICAgImltcG9ydCB7IGFsbFByb2Nlc3NvcnMgfSBmcm9tIFwiLi9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzXCI7XG5pbXBvcnQgeyBleHRyYWN0RGVmcywgZmluYWxpemUsIGluaXRpYWxpemVDb250ZXh0LCBwcm9jZXNzLCB9IGZyb20gXCIuL3RvLWpzb24tc2NoZW1hLmpzXCI7XG4vKipcbiAqIExlZ2FjeSBjbGFzcy1iYXNlZCBpbnRlcmZhY2UgZm9yIEpTT04gU2NoZW1hIGdlbmVyYXRpb24uXG4gKiBUaGlzIGNsYXNzIHdyYXBzIHRoZSBuZXcgZnVuY3Rpb25hbCBpbXBsZW1lbnRhdGlvbiB0byBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgdG9KU09OU2NoZW1hYCBmdW5jdGlvbiBpbnN0ZWFkIGZvciBuZXcgY29kZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gTGVnYWN5IHVzYWdlIChzdGlsbCBzdXBwb3J0ZWQpXG4gKiBjb25zdCBnZW4gPSBuZXcgSlNPTlNjaGVtYUdlbmVyYXRvcih7IHRhcmdldDogXCJkcmFmdC0wN1wiIH0pO1xuICogZ2VuLnByb2Nlc3Moc2NoZW1hKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGdlbi5lbWl0KHNjaGVtYSk7XG4gKlxuICogLy8gUHJlZmVycmVkIG1vZGVybiB1c2FnZVxuICogY29uc3QgcmVzdWx0ID0gdG9KU09OU2NoZW1hKHNjaGVtYSwgeyB0YXJnZXQ6IFwiZHJhZnQtMDdcIiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgSlNPTlNjaGVtYUdlbmVyYXRvciB7XG4gICAgLyoqIEBkZXByZWNhdGVkIEFjY2VzcyB2aWEgY3R4IGluc3RlYWQgKi9cbiAgICBnZXQgbWV0YWRhdGFSZWdpc3RyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4Lm1ldGFkYXRhUmVnaXN0cnk7XG4gICAgfVxuICAgIC8qKiBAZGVwcmVjYXRlZCBBY2Nlc3MgdmlhIGN0eCBpbnN0ZWFkICovXG4gICAgZ2V0IHRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRhcmdldDtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIEFjY2VzcyB2aWEgY3R4IGluc3RlYWQgKi9cbiAgICBnZXQgdW5yZXByZXNlbnRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudW5yZXByZXNlbnRhYmxlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqL1xuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4Lm92ZXJyaWRlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqL1xuICAgIGdldCBpbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LmlvO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqL1xuICAgIGdldCBjb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguY291bnRlcjtcbiAgICB9XG4gICAgc2V0IGNvdW50ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jdHguY291bnRlciA9IHZhbHVlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqL1xuICAgIGdldCBzZWVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguc2VlbjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0YXJnZXQgZm9yIGludGVybmFsIGNvbnRleHRcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRUYXJnZXQgPSBwYXJhbXM/LnRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUYXJnZXQgPT09IFwiZHJhZnQtNFwiKVxuICAgICAgICAgICAgbm9ybWFsaXplZFRhcmdldCA9IFwiZHJhZnQtMDRcIjtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUYXJnZXQgPT09IFwiZHJhZnQtN1wiKVxuICAgICAgICAgICAgbm9ybWFsaXplZFRhcmdldCA9IFwiZHJhZnQtMDdcIjtcbiAgICAgICAgdGhpcy5jdHggPSBpbml0aWFsaXplQ29udGV4dCh7XG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBhbGxQcm9jZXNzb3JzLFxuICAgICAgICAgICAgdGFyZ2V0OiBub3JtYWxpemVkVGFyZ2V0LFxuICAgICAgICAgICAgLi4uKHBhcmFtcz8ubWV0YWRhdGEgJiYgeyBtZXRhZGF0YTogcGFyYW1zLm1ldGFkYXRhIH0pLFxuICAgICAgICAgICAgLi4uKHBhcmFtcz8udW5yZXByZXNlbnRhYmxlICYmIHsgdW5yZXByZXNlbnRhYmxlOiBwYXJhbXMudW5yZXByZXNlbnRhYmxlIH0pLFxuICAgICAgICAgICAgLi4uKHBhcmFtcz8ub3ZlcnJpZGUgJiYgeyBvdmVycmlkZTogcGFyYW1zLm92ZXJyaWRlIH0pLFxuICAgICAgICAgICAgLi4uKHBhcmFtcz8uaW8gJiYgeyBpbzogcGFyYW1zLmlvIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBhIHNjaGVtYSB0byBwcmVwYXJlIGl0IGZvciBKU09OIFNjaGVtYSBnZW5lcmF0aW9uLlxuICAgICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGVtaXQoKS5cbiAgICAgKi9cbiAgICBwcm9jZXNzKHNjaGVtYSwgX3BhcmFtcyA9IHsgcGF0aDogW10sIHNjaGVtYVBhdGg6IFtdIH0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Moc2NoZW1hLCB0aGlzLmN0eCwgX3BhcmFtcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVtaXQgdGhlIGZpbmFsIEpTT04gU2NoZW1hIGFmdGVyIHByb2Nlc3NpbmcuXG4gICAgICogTXVzdCBjYWxsIHByb2Nlc3MoKSBmaXJzdC5cbiAgICAgKi9cbiAgICBlbWl0KHNjaGVtYSwgX3BhcmFtcykge1xuICAgICAgICAvLyBBcHBseSBlbWl0IHBhcmFtcyB0byB0aGUgY29udGV4dFxuICAgICAgICBpZiAoX3BhcmFtcykge1xuICAgICAgICAgICAgaWYgKF9wYXJhbXMuY3ljbGVzKVxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmN5Y2xlcyA9IF9wYXJhbXMuY3ljbGVzO1xuICAgICAgICAgICAgaWYgKF9wYXJhbXMucmV1c2VkKVxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LnJldXNlZCA9IF9wYXJhbXMucmV1c2VkO1xuICAgICAgICAgICAgaWYgKF9wYXJhbXMuZXh0ZXJuYWwpXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguZXh0ZXJuYWwgPSBfcGFyYW1zLmV4dGVybmFsO1xuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3REZWZzKHRoaXMuY3R4LCBzY2hlbWEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5hbGl6ZSh0aGlzLmN0eCwgc2NoZW1hKTtcbiAgICAgICAgLy8gU3RyaXAgfnN0YW5kYXJkIHByb3BlcnR5IHRvIG1hdGNoIG9sZCBpbXBsZW1lbnRhdGlvbidzIHJldHVybiB0eXBlXG4gICAgICAgIGNvbnN0IHsgXCJ+c3RhbmRhcmRcIjogXywgLi4ucGxhaW5SZXN1bHQgfSA9IHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHBsYWluUmVzdWx0O1xuICAgIH1cbn1cbiIsCiAgICAiZXhwb3J0ICogZnJvbSBcIi4vY29yZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZXJzaW9ucy5qc1wiO1xuZXhwb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5leHBvcnQgKiBhcyByZWdleGVzIGZyb20gXCIuL3JlZ2V4ZXMuanNcIjtcbmV4cG9ydCAqIGFzIGxvY2FsZXMgZnJvbSBcIi4uL2xvY2FsZXMvaW5kZXguanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJpZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RvYy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90by1qc29uLXNjaGVtYS5qc1wiO1xuZXhwb3J0IHsgdG9KU09OU2NoZW1hIH0gZnJvbSBcIi4vanNvbi1zY2hlbWEtcHJvY2Vzc29ycy5qc1wiO1xuZXhwb3J0IHsgSlNPTlNjaGVtYUdlbmVyYXRvciB9IGZyb20gXCIuL2pzb24tc2NoZW1hLWdlbmVyYXRvci5qc1wiO1xuZXhwb3J0ICogYXMgSlNPTlNjaGVtYSBmcm9tIFwiLi9qc29uLXNjaGVtYS5qc1wiO1xuIiwKICAgICJleHBvcnQgeyBfbHQgYXMgbHQsIF9sdGUgYXMgbHRlLCBfZ3QgYXMgZ3QsIF9ndGUgYXMgZ3RlLCBfcG9zaXRpdmUgYXMgcG9zaXRpdmUsIF9uZWdhdGl2ZSBhcyBuZWdhdGl2ZSwgX25vbnBvc2l0aXZlIGFzIG5vbnBvc2l0aXZlLCBfbm9ubmVnYXRpdmUgYXMgbm9ubmVnYXRpdmUsIF9tdWx0aXBsZU9mIGFzIG11bHRpcGxlT2YsIF9tYXhTaXplIGFzIG1heFNpemUsIF9taW5TaXplIGFzIG1pblNpemUsIF9zaXplIGFzIHNpemUsIF9tYXhMZW5ndGggYXMgbWF4TGVuZ3RoLCBfbWluTGVuZ3RoIGFzIG1pbkxlbmd0aCwgX2xlbmd0aCBhcyBsZW5ndGgsIF9yZWdleCBhcyByZWdleCwgX2xvd2VyY2FzZSBhcyBsb3dlcmNhc2UsIF91cHBlcmNhc2UgYXMgdXBwZXJjYXNlLCBfaW5jbHVkZXMgYXMgaW5jbHVkZXMsIF9zdGFydHNXaXRoIGFzIHN0YXJ0c1dpdGgsIF9lbmRzV2l0aCBhcyBlbmRzV2l0aCwgX3Byb3BlcnR5IGFzIHByb3BlcnR5LCBfbWltZSBhcyBtaW1lLCBfb3ZlcndyaXRlIGFzIG92ZXJ3cml0ZSwgX25vcm1hbGl6ZSBhcyBub3JtYWxpemUsIF90cmltIGFzIHRyaW0sIF90b0xvd2VyQ2FzZSBhcyB0b0xvd2VyQ2FzZSwgX3RvVXBwZXJDYXNlIGFzIHRvVXBwZXJDYXNlLCBfc2x1Z2lmeSBhcyBzbHVnaWZ5LCB9IGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG4iLAogICAgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHNjaGVtYXMgZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFpvZElTT0RhdGVUaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0RhdGVUaW1lXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09EYXRlVGltZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lzb0RhdGVUaW1lKFpvZElTT0RhdGVUaW1lLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT0RhdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSVNPRGF0ZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvRGF0ZShab2RJU09EYXRlLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT1RpbWUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPVGltZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSVNPVGltZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGltZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvVGltZShab2RJU09UaW1lLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT0R1cmF0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0R1cmF0aW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09EdXJhdGlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZHVyYXRpb24ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lzb0R1cmF0aW9uKFpvZElTT0R1cmF0aW9uLCBwYXJhbXMpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyAkWm9kRXJyb3IgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBpc3N1ZXMpID0+IHtcbiAgICAkWm9kRXJyb3IuaW5pdChpbnN0LCBpc3N1ZXMpO1xuICAgIGluc3QubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpbnN0LCB7XG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgdmFsdWU6IChtYXBwZXIpID0+IGNvcmUuZm9ybWF0RXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBmbGF0dGVuOiB7XG4gICAgICAgICAgICB2YWx1ZTogKG1hcHBlcikgPT4gY29yZS5mbGF0dGVuRXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBhZGRJc3N1ZToge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3QuaXNzdWVzLnB1c2goaXNzdWUpO1xuICAgICAgICAgICAgICAgIGluc3QubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGluc3QuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGFkZElzc3Vlczoge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0Lmlzc3Vlcy5wdXNoKC4uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgaW5zdC5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoaW5zdC5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNFbXB0eToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiaXNFbXB0eVwiLCB7XG4gICAgLy8gICBnZXQoKSB7XG4gICAgLy8gICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgLy8gICB9LFxuICAgIC8vIH0pO1xufTtcbmV4cG9ydCBjb25zdCBab2RFcnJvciA9IGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIpO1xuZXhwb3J0IGNvbnN0IFpvZFJlYWxFcnJvciA9IGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIsIHtcbiAgICBQYXJlbnQ6IEVycm9yLFxufSk7XG4vLyAvKiogQGRlcHJlY2F0ZWQgVXNlIGB6LmNvcmUuJFpvZEVycm9yTWFwQ3R4YCBpbnN0ZWFkLiAqL1xuLy8gZXhwb3J0IHR5cGUgRXJyb3JNYXBDdHggPSBjb3JlLiRab2RFcnJvck1hcEN0eDtcbiIsCiAgICAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgWm9kUmVhbEVycm9yIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5leHBvcnQgY29uc3QgcGFyc2UgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fcGFyc2UoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBwYXJzZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3BhcnNlQXN5bmMoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2UgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fc2FmZVBhcnNlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZVBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fc2FmZVBhcnNlQXN5bmMoWm9kUmVhbEVycm9yKTtcbi8vIENvZGVjIGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGVuY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9lbmNvZGUoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBkZWNvZGUgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fZGVjb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgZW5jb2RlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fZW5jb2RlQXN5bmMoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBkZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9kZWNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVFbmNvZGUgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fc2FmZUVuY29kZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGUgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fc2FmZURlY29kZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVFbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRW5jb2RlQXN5bmMoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlRGVjb2RlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fc2FmZURlY29kZUFzeW5jKFpvZFJlYWxFcnJvcik7XG4iLAogICAgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCB7IHV0aWwgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi4vY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QsIGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZCB9IGZyb20gXCIuLi9jb3JlL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgKiBhcyBjaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyBpc28gZnJvbSBcIi4vaXNvLmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJzZSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuZXhwb3J0IGNvbnN0IFpvZFR5cGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVHlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgT2JqZWN0LmFzc2lnbihpbnN0W1wifnN0YW5kYXJkXCJdLCB7XG4gICAgICAgIGpzb25TY2hlbWE6IHtcbiAgICAgICAgICAgIGlucHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QoaW5zdCwgXCJpbnB1dFwiKSxcbiAgICAgICAgICAgIG91dHB1dDogY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kKGluc3QsIFwib3V0cHV0XCIpLFxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGluc3QudG9KU09OU2NoZW1hID0gY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kKGluc3QsIHt9KTtcbiAgICBpbnN0LmRlZiA9IGRlZjtcbiAgICBpbnN0LnR5cGUgPSBkZWYudHlwZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJfZGVmXCIsIHsgdmFsdWU6IGRlZiB9KTtcbiAgICAvLyBiYXNlIG1ldGhvZHNcbiAgICBpbnN0LmNoZWNrID0gKC4uLmNoZWNrcykgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC5jbG9uZSh1dGlsLm1lcmdlRGVmcyhkZWYsIHtcbiAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgIC4uLihkZWYuY2hlY2tzID8/IFtdKSxcbiAgICAgICAgICAgICAgICAuLi5jaGVja3MubWFwKChjaCkgPT4gdHlwZW9mIGNoID09PSBcImZ1bmN0aW9uXCIgPyB7IF96b2Q6IHsgY2hlY2s6IGNoLCBkZWY6IHsgY2hlY2s6IFwiY3VzdG9tXCIgfSwgb25hdHRhY2g6IFtdIH0gfSA6IGNoKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgaW5zdC53aXRoID0gaW5zdC5jaGVjaztcbiAgICBpbnN0LmNsb25lID0gKGRlZiwgcGFyYW1zKSA9PiBjb3JlLmNsb25lKGluc3QsIGRlZiwgcGFyYW1zKTtcbiAgICBpbnN0LmJyYW5kID0gKCkgPT4gaW5zdDtcbiAgICBpbnN0LnJlZ2lzdGVyID0gKChyZWcsIG1ldGEpID0+IHtcbiAgICAgICAgcmVnLmFkZChpbnN0LCBtZXRhKTtcbiAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfSk7XG4gICAgLy8gcGFyc2luZ1xuICAgIGluc3QucGFyc2UgPSAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5wYXJzZShpbnN0LCBkYXRhLCBwYXJhbXMsIHsgY2FsbGVlOiBpbnN0LnBhcnNlIH0pO1xuICAgIGluc3Quc2FmZVBhcnNlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2Uuc2FmZVBhcnNlKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5wYXJzZUFzeW5jID0gYXN5bmMgKGRhdGEsIHBhcmFtcykgPT4gcGFyc2UucGFyc2VBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMsIHsgY2FsbGVlOiBpbnN0LnBhcnNlQXN5bmMgfSk7XG4gICAgaW5zdC5zYWZlUGFyc2VBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVQYXJzZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5zcGEgPSBpbnN0LnNhZmVQYXJzZUFzeW5jO1xuICAgIC8vIGVuY29kaW5nL2RlY29kaW5nXG4gICAgaW5zdC5lbmNvZGUgPSAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5lbmNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LmRlY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmRlY29kZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QuZW5jb2RlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5lbmNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QuZGVjb2RlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5kZWNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZUVuY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVFbmNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVEZWNvZGUgPSAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlRGVjb2RlKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5zYWZlRW5jb2RlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlRW5jb2RlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVEZWNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVEZWNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIC8vIHJlZmluZW1lbnRzXG4gICAgaW5zdC5yZWZpbmUgPSAoY2hlY2ssIHBhcmFtcykgPT4gaW5zdC5jaGVjayhyZWZpbmUoY2hlY2ssIHBhcmFtcykpO1xuICAgIGluc3Quc3VwZXJSZWZpbmUgPSAocmVmaW5lbWVudCkgPT4gaW5zdC5jaGVjayhzdXBlclJlZmluZShyZWZpbmVtZW50KSk7XG4gICAgaW5zdC5vdmVyd3JpdGUgPSAoZm4pID0+IGluc3QuY2hlY2soY2hlY2tzLm92ZXJ3cml0ZShmbikpO1xuICAgIC8vIHdyYXBwZXJzXG4gICAgaW5zdC5vcHRpb25hbCA9ICgpID0+IG9wdGlvbmFsKGluc3QpO1xuICAgIGluc3QuZXhhY3RPcHRpb25hbCA9ICgpID0+IGV4YWN0T3B0aW9uYWwoaW5zdCk7XG4gICAgaW5zdC5udWxsYWJsZSA9ICgpID0+IG51bGxhYmxlKGluc3QpO1xuICAgIGluc3QubnVsbGlzaCA9ICgpID0+IG9wdGlvbmFsKG51bGxhYmxlKGluc3QpKTtcbiAgICBpbnN0Lm5vbm9wdGlvbmFsID0gKHBhcmFtcykgPT4gbm9ub3B0aW9uYWwoaW5zdCwgcGFyYW1zKTtcbiAgICBpbnN0LmFycmF5ID0gKCkgPT4gYXJyYXkoaW5zdCk7XG4gICAgaW5zdC5vciA9IChhcmcpID0+IHVuaW9uKFtpbnN0LCBhcmddKTtcbiAgICBpbnN0LmFuZCA9IChhcmcpID0+IGludGVyc2VjdGlvbihpbnN0LCBhcmcpO1xuICAgIGluc3QudHJhbnNmb3JtID0gKHR4KSA9PiBwaXBlKGluc3QsIHRyYW5zZm9ybSh0eCkpO1xuICAgIGluc3QuZGVmYXVsdCA9IChkZWYpID0+IF9kZWZhdWx0KGluc3QsIGRlZik7XG4gICAgaW5zdC5wcmVmYXVsdCA9IChkZWYpID0+IHByZWZhdWx0KGluc3QsIGRlZik7XG4gICAgLy8gaW5zdC5jb2FsZXNjZSA9IChkZWYsIHBhcmFtcykgPT4gY29hbGVzY2UoaW5zdCwgZGVmLCBwYXJhbXMpO1xuICAgIGluc3QuY2F0Y2ggPSAocGFyYW1zKSA9PiBfY2F0Y2goaW5zdCwgcGFyYW1zKTtcbiAgICBpbnN0LnBpcGUgPSAodGFyZ2V0KSA9PiBwaXBlKGluc3QsIHRhcmdldCk7XG4gICAgaW5zdC5yZWFkb25seSA9ICgpID0+IHJlYWRvbmx5KGluc3QpO1xuICAgIC8vIG1ldGFcbiAgICBpbnN0LmRlc2NyaWJlID0gKGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsID0gaW5zdC5jbG9uZSgpO1xuICAgICAgICBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmFkZChjbCwgeyBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgcmV0dXJuIGNsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiZGVzY3JpcHRpb25cIiwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5nbG9iYWxSZWdpc3RyeS5nZXQoaW5zdCk/LmRlc2NyaXB0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgaW5zdC5tZXRhID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5nbG9iYWxSZWdpc3RyeS5nZXQoaW5zdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2wgPSBpbnN0LmNsb25lKCk7XG4gICAgICAgIGNvcmUuZ2xvYmFsUmVnaXN0cnkuYWRkKGNsLCBhcmdzWzBdKTtcbiAgICAgICAgcmV0dXJuIGNsO1xuICAgIH07XG4gICAgLy8gaGVscGVyc1xuICAgIGluc3QuaXNPcHRpb25hbCA9ICgpID0+IGluc3Quc2FmZVBhcnNlKHVuZGVmaW5lZCkuc3VjY2VzcztcbiAgICBpbnN0LmlzTnVsbGFibGUgPSAoKSA9PiBpbnN0LnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgIGluc3QuYXBwbHkgPSAoZm4pID0+IGZuKGluc3QpO1xuICAgIHJldHVybiBpbnN0O1xufSk7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX1pvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJfWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zdHJpbmdQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG4gICAgaW5zdC5taW5MZW5ndGggPSBiYWcubWluaW11bSA/PyBudWxsO1xuICAgIGluc3QubWF4TGVuZ3RoID0gYmFnLm1heGltdW0gPz8gbnVsbDtcbiAgICAvLyB2YWxpZGF0aW9uc1xuICAgIGluc3QucmVnZXggPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjaGVja3MucmVnZXgoLi4uYXJncykpO1xuICAgIGluc3QuaW5jbHVkZXMgPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjaGVja3MuaW5jbHVkZXMoLi4uYXJncykpO1xuICAgIGluc3Quc3RhcnRzV2l0aCA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5zdGFydHNXaXRoKC4uLmFyZ3MpKTtcbiAgICBpbnN0LmVuZHNXaXRoID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY2hlY2tzLmVuZHNXaXRoKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm1pbiA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5taW5MZW5ndGgoLi4uYXJncykpO1xuICAgIGluc3QubWF4ID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY2hlY2tzLm1heExlbmd0aCguLi5hcmdzKSk7XG4gICAgaW5zdC5sZW5ndGggPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjaGVja3MubGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm5vbmVtcHR5ID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY2hlY2tzLm1pbkxlbmd0aCgxLCAuLi5hcmdzKSk7XG4gICAgaW5zdC5sb3dlcmNhc2UgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sb3dlcmNhc2UocGFyYW1zKSk7XG4gICAgaW5zdC51cHBlcmNhc2UgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy51cHBlcmNhc2UocGFyYW1zKSk7XG4gICAgLy8gdHJhbnNmb3Jtc1xuICAgIGluc3QudHJpbSA9ICgpID0+IGluc3QuY2hlY2soY2hlY2tzLnRyaW0oKSk7XG4gICAgaW5zdC5ub3JtYWxpemUgPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjaGVja3Mubm9ybWFsaXplKC4uLmFyZ3MpKTtcbiAgICBpbnN0LnRvTG93ZXJDYXNlID0gKCkgPT4gaW5zdC5jaGVjayhjaGVja3MudG9Mb3dlckNhc2UoKSk7XG4gICAgaW5zdC50b1VwcGVyQ2FzZSA9ICgpID0+IGluc3QuY2hlY2soY2hlY2tzLnRvVXBwZXJDYXNlKCkpO1xuICAgIGluc3Quc2x1Z2lmeSA9ICgpID0+IGluc3QuY2hlY2soY2hlY2tzLnNsdWdpZnkoKSk7XG59KTtcbmV4cG9ydCBjb25zdCBab2RTdHJpbmcgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIF9ab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuZW1haWwgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2VtYWlsKFpvZEVtYWlsLCBwYXJhbXMpKTtcbiAgICBpbnN0LnVybCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXJsKFpvZFVSTCwgcGFyYW1zKSk7XG4gICAgaW5zdC5qd3QgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2p3dChab2RKV1QsIHBhcmFtcykpO1xuICAgIGluc3QuZW1vamkgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2Vtb2ppKFpvZEVtb2ppLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd1aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2d1aWQoWm9kR1VJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC51dWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91dWlkKFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91dWlkdjQoWm9kVVVJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC51dWlkdjYgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3V1aWR2Nihab2RVVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LnV1aWR2NyA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXVpZHY3KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QubmFub2lkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9uYW5vaWQoWm9kTmFub0lELCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd1aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2d1aWQoWm9kR1VJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5jdWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9jdWlkKFpvZENVSUQsIHBhcmFtcykpO1xuICAgIGluc3QuY3VpZDIgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2N1aWQyKFpvZENVSUQyLCBwYXJhbXMpKTtcbiAgICBpbnN0LnVsaWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3VsaWQoWm9kVUxJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5iYXNlNjQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2Jhc2U2NChab2RCYXNlNjQsIHBhcmFtcykpO1xuICAgIGluc3QuYmFzZTY0dXJsID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9iYXNlNjR1cmwoWm9kQmFzZTY0VVJMLCBwYXJhbXMpKTtcbiAgICBpbnN0LnhpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5feGlkKFpvZFhJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5rc3VpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fa3N1aWQoWm9kS1NVSUQsIHBhcmFtcykpO1xuICAgIGluc3QuaXB2NCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5faXB2NChab2RJUHY0LCBwYXJhbXMpKTtcbiAgICBpbnN0LmlwdjYgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2lwdjYoWm9kSVB2NiwgcGFyYW1zKSk7XG4gICAgaW5zdC5jaWRydjQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2NpZHJ2NChab2RDSURSdjQsIHBhcmFtcykpO1xuICAgIGluc3QuY2lkcnY2ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9jaWRydjYoWm9kQ0lEUnY2LCBwYXJhbXMpKTtcbiAgICBpbnN0LmUxNjQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2UxNjQoWm9kRTE2NCwgcGFyYW1zKSk7XG4gICAgLy8gaXNvXG4gICAgaW5zdC5kYXRldGltZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soaXNvLmRhdGV0aW1lKHBhcmFtcykpO1xuICAgIGluc3QuZGF0ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soaXNvLmRhdGUocGFyYW1zKSk7XG4gICAgaW5zdC50aW1lID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhpc28udGltZShwYXJhbXMpKTtcbiAgICBpbnN0LmR1cmF0aW9uID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhpc28uZHVyYXRpb24ocGFyYW1zKSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZyhab2RTdHJpbmcsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBfWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0IFpvZEVtYWlsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVtYWlsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEVtYWlsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZW1haWwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2VtYWlsKFpvZEVtYWlsLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEdVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kR1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RHVUlELmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZ3VpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZ3VpZChab2RHVUlELCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVVVJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RVVUlELmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdXVpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXVpZChab2RVVUlELCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXVpZHY0KFpvZFVVSUQsIHBhcmFtcyk7XG59XG4vLyBab2RVVUlEdjZcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjYocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWR2Nihab2RVVUlELCBwYXJhbXMpO1xufVxuLy8gWm9kVVVJRHY3XG5leHBvcnQgZnVuY3Rpb24gdXVpZHY3KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91dWlkdjcoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVUkwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVVJMXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFVSTC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVybChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXJsKFpvZFVSTCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBodHRwVXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91cmwoWm9kVVJMLCB7XG4gICAgICAgIHByb3RvY29sOiAvXmh0dHBzPyQvLFxuICAgICAgICBob3N0bmFtZTogY29yZS5yZWdleGVzLmRvbWFpbixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RFbW9qaSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFbW9qaVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RFbW9qaS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVtb2ppKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9lbW9qaShab2RFbW9qaSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROYW5vSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTmFub0lEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZE5hbm9JRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG5hbm9pZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbmFub2lkKFpvZE5hbm9JRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ1VJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGN1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1aWQoWm9kQ1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDVUlEMiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDVUlEMlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RDVUlEMi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGN1aWQyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jdWlkMihab2RDVUlEMiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVTElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVMSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVUxJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVsaWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VsaWQoWm9kVUxJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RYSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kWElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFhJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHhpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5feGlkKFpvZFhJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RLU1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RLU1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RLU1VJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGtzdWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9rc3VpZChab2RLU1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJUHY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElQdjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RNQUMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTUFDXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZE1BQy5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG1hYyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbWFjKFpvZE1BQywgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJUHY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElQdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2Ni5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjYocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjYoWm9kSVB2NiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDSURSdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ0lEUnY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RDSURSdjQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBjaWRydjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NpZHJ2NChab2RDSURSdjQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ0lEUnY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENJRFJ2NlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQ0lEUnY2LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY2lkcnY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jaWRydjYoWm9kQ0lEUnY2LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCYXNlNjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjQoWm9kQmFzZTY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJhc2U2NFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCYXNlNjRVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0VVJMLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0dXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjR1cmwoWm9kQmFzZTY0VVJMLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEUxNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRTE2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RFMTY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZTE2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZTE2NChab2RFMTY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEpXVCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RKV1RcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSldULmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gand0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9qd3QoWm9kSldULCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ3VzdG9tU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRm9ybWF0KGZvcm1hdCwgZm5PclJlZ2V4LCBfcGFyYW1zID0ge30pIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCBmbk9yUmVnZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lKF9wYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgXCJob3N0bmFtZVwiLCBjb3JlLnJlZ2V4ZXMuaG9zdG5hbWUsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhleChfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIFwiaGV4XCIsIGNvcmUucmVnZXhlcy5oZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2goYWxnLCBwYXJhbXMpIHtcbiAgICBjb25zdCBlbmMgPSBwYXJhbXM/LmVuYyA/PyBcImhleFwiO1xuICAgIGNvbnN0IGZvcm1hdCA9IGAke2FsZ31fJHtlbmN9YDtcbiAgICBjb25zdCByZWdleCA9IGNvcmUucmVnZXhlc1tmb3JtYXRdO1xuICAgIGlmICghcmVnZXgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCByZWdleCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROdW1iZXIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVtYmVyXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROdW1iZXIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5udW1iZXJQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuZ3QgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3QodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QuZ3RlID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5pbnQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGludChwYXJhbXMpKTtcbiAgICBpbnN0LnNhZmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGludChwYXJhbXMpKTtcbiAgICBpbnN0LnBvc2l0aXZlID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3QoMCwgcGFyYW1zKSk7XG4gICAgaW5zdC5ub25uZWdhdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSgwLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5lZ2F0aXZlID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubHQoMCwgcGFyYW1zKSk7XG4gICAgaW5zdC5ub25wb3NpdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0ZSgwLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm11bHRpcGxlT2YgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5zdGVwID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLm11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykpO1xuICAgIC8vIGluc3QuZmluaXRlID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLmZpbml0ZShwYXJhbXMpKTtcbiAgICBpbnN0LmZpbml0ZSA9ICgpID0+IGluc3Q7XG4gICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pblZhbHVlID1cbiAgICAgICAgTWF0aC5tYXgoYmFnLm1pbmltdW0gPz8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLCBiYWcuZXhjbHVzaXZlTWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpID8/IG51bGw7XG4gICAgaW5zdC5tYXhWYWx1ZSA9XG4gICAgICAgIE1hdGgubWluKGJhZy5tYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgYmFnLmV4Y2x1c2l2ZU1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSA/PyBudWxsO1xuICAgIGluc3QuaXNJbnQgPSAoYmFnLmZvcm1hdCA/PyBcIlwiKS5pbmNsdWRlcyhcImludFwiKSB8fCBOdW1iZXIuaXNTYWZlSW50ZWdlcihiYWcubXVsdGlwbGVPZiA/PyAwLjUpO1xuICAgIGluc3QuaXNGaW5pdGUgPSB0cnVlO1xuICAgIGluc3QuZm9ybWF0ID0gYmFnLmZvcm1hdCA/PyBudWxsO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9udW1iZXIoWm9kTnVtYmVyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZE51bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROdW1iZXJGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE51bWJlckZvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faW50KFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9mbG9hdDMyKFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9mbG9hdDY0KFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnQzMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faW50MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQzMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdWludDMyKFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCb29sZWFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEJvb2xlYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEJvb2xlYW4uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5ib29sZWFuUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Jvb2xlYW4oWm9kQm9vbGVhbiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCaWdJbnQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmlnSW50XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5iaWdpbnRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuZ3RlID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd0ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWluID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5sdCA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdCh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5sdGUgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QucG9zaXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndChCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3QubmVnYXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdChCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3Qubm9ucG9zaXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUoQmlnSW50KDApLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5vbm5lZ2F0aXZlID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tdWx0aXBsZU9mID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLm11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykpO1xuICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgaW5zdC5taW5WYWx1ZSA9IGJhZy5taW5pbXVtID8/IG51bGw7XG4gICAgaW5zdC5tYXhWYWx1ZSA9IGJhZy5tYXhpbXVtID8/IG51bGw7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBiaWdpbnQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2JpZ2ludChab2RCaWdJbnQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQmlnSW50Rm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEJpZ0ludEZvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQmlnSW50Rm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG4vLyBpbnQ2NFxuZXhwb3J0IGZ1bmN0aW9uIGludDY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQ2NChab2RCaWdJbnRGb3JtYXQsIHBhcmFtcyk7XG59XG4vLyB1aW50NjRcbmV4cG9ydCBmdW5jdGlvbiB1aW50NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VpbnQ2NChab2RCaWdJbnRGb3JtYXQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kU3ltYm9sID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN5bWJvbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3ltYm9sLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuc3ltYm9sUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHN5bWJvbChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3ltYm9sKFpvZFN5bWJvbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVbmRlZmluZWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVW5kZWZpbmVkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RVbmRlZmluZWQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy51bmRlZmluZWRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5mdW5jdGlvbiBfdW5kZWZpbmVkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91bmRlZmluZWQoWm9kVW5kZWZpbmVkLCBwYXJhbXMpO1xufVxuZXhwb3J0IHsgX3VuZGVmaW5lZCBhcyB1bmRlZmluZWQgfTtcbmV4cG9ydCBjb25zdCBab2ROdWxsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bGxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE51bGwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5udWxsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZnVuY3Rpb24gX251bGwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX251bGwoWm9kTnVsbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCB7IF9udWxsIGFzIG51bGwgfTtcbmV4cG9ydCBjb25zdCBab2RBbnkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQW55XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RBbnkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5hbnlQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYW55KCkge1xuICAgIHJldHVybiBjb3JlLl9hbnkoWm9kQW55KTtcbn1cbmV4cG9ydCBjb25zdCBab2RVbmtub3duID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVua25vd25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFVua25vd24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy51bmtub3duUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVua25vd24oKSB7XG4gICAgcmV0dXJuIGNvcmUuX3Vua25vd24oWm9kVW5rbm93bik7XG59XG5leHBvcnQgY29uc3QgWm9kTmV2ZXIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTmV2ZXJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE5ldmVyLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubmV2ZXJQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbmV2ZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX25ldmVyKFpvZE5ldmVyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFZvaWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVm9pZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVm9pZC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnZvaWRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5mdW5jdGlvbiBfdm9pZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdm9pZChab2RWb2lkLCBwYXJhbXMpO1xufVxuZXhwb3J0IHsgX3ZvaWQgYXMgdm9pZCB9O1xuZXhwb3J0IGNvbnN0IFpvZERhdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRGF0ZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmRhdGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QubWluID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBjb25zdCBjID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pbkRhdGUgPSBjLm1pbmltdW0gPyBuZXcgRGF0ZShjLm1pbmltdW0pIDogbnVsbDtcbiAgICBpbnN0Lm1heERhdGUgPSBjLm1heGltdW0gPyBuZXcgRGF0ZShjLm1heGltdW0pIDogbnVsbDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2RhdGUoWm9kRGF0ZSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RBcnJheSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RBcnJheVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQXJyYXkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5hcnJheVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5lbGVtZW50ID0gZGVmLmVsZW1lbnQ7XG4gICAgaW5zdC5taW4gPSAobWluTGVuZ3RoLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLm1pbkxlbmd0aChtaW5MZW5ndGgsIHBhcmFtcykpO1xuICAgIGluc3Qubm9uZW1wdHkgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5taW5MZW5ndGgoMSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAobWF4TGVuZ3RoLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLm1heExlbmd0aChtYXhMZW5ndGgsIHBhcmFtcykpO1xuICAgIGluc3QubGVuZ3RoID0gKGxlbiwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sZW5ndGgobGVuLCBwYXJhbXMpKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuZWxlbWVudDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5KGVsZW1lbnQsIHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9hcnJheShab2RBcnJheSwgZWxlbWVudCwgcGFyYW1zKTtcbn1cbi8vIC5rZXlvZlxuZXhwb3J0IGZ1bmN0aW9uIGtleW9mKHNjaGVtYSkge1xuICAgIGNvbnN0IHNoYXBlID0gc2NoZW1hLl96b2QuZGVmLnNoYXBlO1xuICAgIHJldHVybiBfZW51bShPYmplY3Qua2V5cyhzaGFwZSkpO1xufVxuZXhwb3J0IGNvbnN0IFpvZE9iamVjdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RPYmplY3RcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE9iamVjdEpJVC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm9iamVjdFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QsIFwic2hhcGVcIiwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVmLnNoYXBlO1xuICAgIH0pO1xuICAgIGluc3Qua2V5b2YgPSAoKSA9PiBfZW51bShPYmplY3Qua2V5cyhpbnN0Ll96b2QuZGVmLnNoYXBlKSk7XG4gICAgaW5zdC5jYXRjaGFsbCA9IChjYXRjaGFsbCkgPT4gaW5zdC5jbG9uZSh7IC4uLmluc3QuX3pvZC5kZWYsIGNhdGNoYWxsOiBjYXRjaGFsbCB9KTtcbiAgICBpbnN0LnBhc3N0aHJvdWdoID0gKCkgPT4gaW5zdC5jbG9uZSh7IC4uLmluc3QuX3pvZC5kZWYsIGNhdGNoYWxsOiB1bmtub3duKCkgfSk7XG4gICAgaW5zdC5sb29zZSA9ICgpID0+IGluc3QuY2xvbmUoeyAuLi5pbnN0Ll96b2QuZGVmLCBjYXRjaGFsbDogdW5rbm93bigpIH0pO1xuICAgIGluc3Quc3RyaWN0ID0gKCkgPT4gaW5zdC5jbG9uZSh7IC4uLmluc3QuX3pvZC5kZWYsIGNhdGNoYWxsOiBuZXZlcigpIH0pO1xuICAgIGluc3Quc3RyaXAgPSAoKSA9PiBpbnN0LmNsb25lKHsgLi4uaW5zdC5fem9kLmRlZiwgY2F0Y2hhbGw6IHVuZGVmaW5lZCB9KTtcbiAgICBpbnN0LmV4dGVuZCA9IChpbmNvbWluZykgPT4ge1xuICAgICAgICByZXR1cm4gdXRpbC5leHRlbmQoaW5zdCwgaW5jb21pbmcpO1xuICAgIH07XG4gICAgaW5zdC5zYWZlRXh0ZW5kID0gKGluY29taW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB1dGlsLnNhZmVFeHRlbmQoaW5zdCwgaW5jb21pbmcpO1xuICAgIH07XG4gICAgaW5zdC5tZXJnZSA9IChvdGhlcikgPT4gdXRpbC5tZXJnZShpbnN0LCBvdGhlcik7XG4gICAgaW5zdC5waWNrID0gKG1hc2spID0+IHV0aWwucGljayhpbnN0LCBtYXNrKTtcbiAgICBpbnN0Lm9taXQgPSAobWFzaykgPT4gdXRpbC5vbWl0KGluc3QsIG1hc2spO1xuICAgIGluc3QucGFydGlhbCA9ICguLi5hcmdzKSA9PiB1dGlsLnBhcnRpYWwoWm9kT3B0aW9uYWwsIGluc3QsIGFyZ3NbMF0pO1xuICAgIGluc3QucmVxdWlyZWQgPSAoLi4uYXJncykgPT4gdXRpbC5yZXF1aXJlZChab2ROb25PcHRpb25hbCwgaW5zdCwgYXJnc1swXSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBvYmplY3Qoc2hhcGUsIHBhcmFtcykge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgc2hhcGU6IHNoYXBlID8/IHt9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3QoZGVmKTtcbn1cbi8vIHN0cmljdE9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIHN0cmljdE9iamVjdChzaGFwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgY2F0Y2hhbGw6IG5ldmVyKCksXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBsb29zZU9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIGxvb3NlT2JqZWN0KHNoYXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBjYXRjaGFsbDogdW5rbm93bigpLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW9uKG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kVW5pb24oe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kWG9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFhvclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFhvci5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuLyoqIENyZWF0ZXMgYW4gZXhjbHVzaXZlIHVuaW9uIChYT1IpIHdoZXJlIGV4YWN0bHkgb25lIG9wdGlvbiBtdXN0IG1hdGNoLlxuICogVW5saWtlIHJlZ3VsYXIgdW5pb25zIHRoYXQgc3VjY2VlZCB3aGVuIGFueSBvcHRpb24gbWF0Y2hlcywgeG9yIGZhaWxzIGlmXG4gKiB6ZXJvIG9yIG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZXMgdGhlIGlucHV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhvcihvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFhvcih7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2REaXNjcmltaW5hdGVkVW5pb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRGlzY3JpbWluYXRlZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2NyaW1pbmF0ZWRVbmlvbihkaXNjcmltaW5hdG9yLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAvLyBjb25zdCBbb3B0aW9ucywgcGFyYW1zXSA9IGFyZ3M7XG4gICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRpc2NyaW1pbmF0b3IsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kSW50ZXJzZWN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEludGVyc2VjdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSW50ZXJzZWN0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuaW50ZXJzZWN0aW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFR1cGxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFR1cGxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUdXBsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnR1cGxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnJlc3QgPSAocmVzdCkgPT4gaW5zdC5jbG9uZSh7XG4gICAgICAgIC4uLmluc3QuX3pvZC5kZWYsXG4gICAgICAgIHJlc3Q6IHJlc3QsXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0dXBsZShpdGVtcywgX3BhcmFtc09yUmVzdCwgX3BhcmFtcykge1xuICAgIGNvbnN0IGhhc1Jlc3QgPSBfcGFyYW1zT3JSZXN0IGluc3RhbmNlb2YgY29yZS4kWm9kVHlwZTtcbiAgICBjb25zdCBwYXJhbXMgPSBoYXNSZXN0ID8gX3BhcmFtcyA6IF9wYXJhbXNPclJlc3Q7XG4gICAgY29uc3QgcmVzdCA9IGhhc1Jlc3QgPyBfcGFyYW1zT3JSZXN0IDogbnVsbDtcbiAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgdHlwZTogXCJ0dXBsZVwiLFxuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHJlc3QsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kUmVjb3JkID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFJlY29yZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUmVjb3JkLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMucmVjb3JkUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmtleVR5cGUgPSBkZWYua2V5VHlwZTtcbiAgICBpbnN0LnZhbHVlVHlwZSA9IGRlZi52YWx1ZVR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiByZWNvcmQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gdHlwZSBhbGtzamYgPSBjb3JlLm91dHB1dDxjb3JlLiRab2RSZWNvcmRLZXk+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxSZWNvcmQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICBjb25zdCBrID0gY29yZS5jbG9uZShrZXlUeXBlKTtcbiAgICBrLl96b2QudmFsdWVzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgdHlwZTogXCJyZWNvcmRcIixcbiAgICAgICAga2V5VHlwZTogayxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbG9vc2VSZWNvcmQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICBtb2RlOiBcImxvb3NlXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTWFwID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE1hcFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTWFwLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubWFwUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmtleVR5cGUgPSBkZWYua2V5VHlwZTtcbiAgICBpbnN0LnZhbHVlVHlwZSA9IGRlZi52YWx1ZVR5cGU7XG4gICAgaW5zdC5taW4gPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW5TaXplKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm5vbmVtcHR5ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW5TaXplKDEsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fbWF4U2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5zaXplID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fc2l6ZSguLi5hcmdzKSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBtYXAoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE1hcCh7XG4gICAgICAgIHR5cGU6IFwibWFwXCIsXG4gICAgICAgIGtleVR5cGU6IGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFNldCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RTZXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFNldC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnNldFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5taW4gPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW5TaXplKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm5vbmVtcHR5ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW5TaXplKDEsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fbWF4U2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5zaXplID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fc2l6ZSguLi5hcmdzKSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBzZXQodmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEVudW0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRW51bVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRW51bS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmVudW1Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuZW51bSA9IGRlZi5lbnRyaWVzO1xuICAgIGluc3Qub3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoZGVmLmVudHJpZXMpO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGRlZi5lbnRyaWVzKSk7XG4gICAgaW5zdC5leHRyYWN0ID0gKHZhbHVlcywgcGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0VudHJpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChrZXlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBuZXdFbnRyaWVzW3ZhbHVlXSA9IGRlZi5lbnRyaWVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleSAke3ZhbHVlfSBub3QgZm91bmQgaW4gZW51bWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgICAgIGVudHJpZXM6IG5ld0VudHJpZXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgaW5zdC5leGNsdWRlID0gKHZhbHVlcywgcGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0VudHJpZXMgPSB7IC4uLmRlZi5lbnRyaWVzIH07XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoa2V5cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0VudHJpZXNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7dmFsdWV9IG5vdCBmb3VuZCBpbiBlbnVtYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIGNoZWNrczogW10sXG4gICAgICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICAgICAgZW50cmllczogbmV3RW50cmllcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gX2VudW0odmFsdWVzLCBwYXJhbXMpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlcy5tYXAoKHYpID0+IFt2LCB2XSkpIDogdmFsdWVzO1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IHsgX2VudW0gYXMgZW51bSB9O1xuLyoqIEBkZXByZWNhdGVkIFRoaXMgQVBJIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGB6LmVudW0oKWAuIFVzZSBgei5lbnVtKClgIGluc3RlYWQuXG4gKlxuICogYGBgdHNcbiAqIGVudW0gQ29sb3JzIHsgcmVkLCBncmVlbiwgYmx1ZSB9XG4gKiB6LmVudW0oQ29sb3JzKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlRW51bShlbnRyaWVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RMaXRlcmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZExpdGVyYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZExpdGVyYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5saXRlcmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnZhbHVlcyA9IG5ldyBTZXQoZGVmLnZhbHVlcyk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmLnZhbHVlc1swXTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGxpdGVyYWwodmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kTGl0ZXJhbCh7XG4gICAgICAgIHR5cGU6IFwibGl0ZXJhbFwiLFxuICAgICAgICB2YWx1ZXM6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEZpbGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRmlsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRmlsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmZpbGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QubWluID0gKHNpemUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW5TaXplKHNpemUsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKHNpemUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9tYXhTaXplKHNpemUsIHBhcmFtcykpO1xuICAgIGluc3QubWltZSA9ICh0eXBlcywgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21pbWUoQXJyYXkuaXNBcnJheSh0eXBlcykgPyB0eXBlcyA6IFt0eXBlc10sIHBhcmFtcykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZmlsZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZmlsZShab2RGaWxlLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFRyYW5zZm9ybSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUcmFuc2Zvcm1cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFRyYW5zZm9ybS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnRyYW5zZm9ybVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKF9jdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RFbmNvZGVFcnJvcihpbnN0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuYWRkSXNzdWUgPSAoaXNzdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXNzdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHV0aWwuaXNzdWUoaXNzdWUsIHBheWxvYWQudmFsdWUsIGRlZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIFpvZCAzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mYXRhbClcbiAgICAgICAgICAgICAgICAgICAgX2lzc3VlLmNvbnRpbnVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmNvZGUgPz8gKF9pc3N1ZS5jb2RlID0gXCJjdXN0b21cIik7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmlucHV0ID8/IChfaXNzdWUuaW5wdXQgPSBwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuaW5zdCA/PyAoX2lzc3VlLmluc3QgPSBpbnN0KTtcbiAgICAgICAgICAgICAgICAvLyBfaXNzdWUuY29udGludWUgPz89IHRydWU7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKF9pc3N1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBkZWYudHJhbnNmb3JtKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgICAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC50aGVuKChvdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG91dHB1dDtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIHJldHVybiBuZXcgWm9kVHJhbnNmb3JtKHtcbiAgICAgICAgdHlwZTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtOiBmbixcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RPcHRpb25hbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kT3B0aW9uYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5vcHRpb25hbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kT3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEV4YWN0T3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRXhhY3RPcHRpb25hbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRXhhY3RPcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZXhhY3RPcHRpb25hbChpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZEV4YWN0T3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE51bGxhYmxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bGxhYmxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROdWxsYWJsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm51bGxhYmxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbnVsbGFibGUoaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIHR5cGU6IFwibnVsbGFibGVcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBudWxsaXNoXG5leHBvcnQgZnVuY3Rpb24gbnVsbGlzaChpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gb3B0aW9uYWwobnVsbGFibGUoaW5uZXJUeXBlKSk7XG59XG5leHBvcnQgY29uc3QgWm9kRGVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2REZWZhdWx0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2REZWZhdWx0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZGVmYXVsdFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbiAgICBpbnN0LnJlbW92ZURlZmF1bHQgPSBpbnN0LnVud3JhcDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIF9kZWZhdWx0KGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgdHlwZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgICAgICBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWx1ZSgpIDogdXRpbC5zaGFsbG93Q2xvbmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RQcmVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RQcmVmYXVsdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUHJlZmF1bHQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5wcmVmYXVsdFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZhdWx0KGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RQcmVmYXVsdCh7XG4gICAgICAgIHR5cGU6IFwicHJlZmF1bHRcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gZGVmYXVsdFZhbHVlKCkgOiB1dGlsLnNoYWxsb3dDbG9uZShkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE5vbk9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5vbk9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROb25PcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm5vbm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbm9ub3B0aW9uYWwoaW5uZXJUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE5vbk9wdGlvbmFsKHtcbiAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RTdWNjZXNzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN1Y2Nlc3NcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFN1Y2Nlc3MuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zdWNjZXNzUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzcyhpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFN1Y2Nlc3Moe1xuICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kQ2F0Y2ggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ2F0Y2hcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZENhdGNoLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuY2F0Y2hQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG4gICAgaW5zdC5yZW1vdmVDYXRjaCA9IGluc3QudW53cmFwO1xufSk7XG5mdW5jdGlvbiBfY2F0Y2goaW5uZXJUeXBlLCBjYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgIHR5cGU6IFwiY2F0Y2hcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGNhdGNoVmFsdWU6ICh0eXBlb2YgY2F0Y2hWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2F0Y2hWYWx1ZSA6ICgpID0+IGNhdGNoVmFsdWUpLFxuICAgIH0pO1xufVxuZXhwb3J0IHsgX2NhdGNoIGFzIGNhdGNoIH07XG5leHBvcnQgY29uc3QgWm9kTmFOID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5hTlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTmFOLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubmFuUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG5hbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbmFuKFpvZE5hTiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RQaXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFBpcGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5waXBlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmluID0gZGVmLmluO1xuICAgIGluc3Qub3V0ID0gZGVmLm91dDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGUoaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IFpvZFBpcGUoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGluXyxcbiAgICAgICAgb3V0OiBvdXQsXG4gICAgICAgIC8vIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kQ29kZWMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ29kZWNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENvZGVjLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGVjKGluXywgb3V0LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZENvZGVjKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dDogb3V0LFxuICAgICAgICB0cmFuc2Zvcm06IHBhcmFtcy5kZWNvZGUsXG4gICAgICAgIHJldmVyc2VUcmFuc2Zvcm06IHBhcmFtcy5lbmNvZGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kUmVhZG9ubHkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUmVhZG9ubHlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFJlYWRvbmx5LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMucmVhZG9ubHlQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiByZWFkb25seShpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgdHlwZTogXCJyZWFkb25seVwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RUZW1wbGF0ZUxpdGVyYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVGVtcGxhdGVMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUZW1wbGF0ZUxpdGVyYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy50ZW1wbGF0ZUxpdGVyYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVMaXRlcmFsKHBhcnRzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFRlbXBsYXRlTGl0ZXJhbCh7XG4gICAgICAgIHR5cGU6IFwidGVtcGxhdGVfbGl0ZXJhbFwiLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RMYXp5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZExhenlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZExhenkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5sYXp5UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuZ2V0dGVyKCk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBsYXp5KGdldHRlcikge1xuICAgIHJldHVybiBuZXcgWm9kTGF6eSh7XG4gICAgICAgIHR5cGU6IFwibGF6eVwiLFxuICAgICAgICBnZXR0ZXI6IGdldHRlcixcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RQcm9taXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFByb21pc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFByb21pc2UuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5wcm9taXNlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZShpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFByb21pc2Uoe1xuICAgICAgICB0eXBlOiBcInByb21pc2VcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRnVuY3Rpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRnVuY3Rpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEZ1bmN0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZnVuY3Rpb25Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX2Z1bmN0aW9uKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIGlucHV0OiBBcnJheS5pc0FycmF5KHBhcmFtcz8uaW5wdXQpID8gdHVwbGUocGFyYW1zPy5pbnB1dCkgOiAocGFyYW1zPy5pbnB1dCA/PyBhcnJheSh1bmtub3duKCkpKSxcbiAgICAgICAgb3V0cHV0OiBwYXJhbXM/Lm91dHB1dCA/PyB1bmtub3duKCksXG4gICAgfSk7XG59XG5leHBvcnQgeyBfZnVuY3Rpb24gYXMgZnVuY3Rpb24gfTtcbmV4cG9ydCBjb25zdCBab2RDdXN0b20gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ3VzdG9tXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RDdXN0b20uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5jdXN0b21Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG4vLyBjdXN0b20gY2hlY2tzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2soZm4pIHtcbiAgICBjb25zdCBjaCA9IG5ldyBjb3JlLiRab2RDaGVjayh7XG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICAvLyAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xuICAgIGNoLl96b2QuY2hlY2sgPSBmbjtcbiAgICByZXR1cm4gY2g7XG59XG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tKGZuLCBfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1c3RvbShab2RDdXN0b20sIGZuID8/ICgoKSA9PiB0cnVlKSwgX3BhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVmaW5lKGZuLCBfcGFyYW1zID0ge30pIHtcbiAgICByZXR1cm4gY29yZS5fcmVmaW5lKFpvZEN1c3RvbSwgZm4sIF9wYXJhbXMpO1xufVxuLy8gc3VwZXJSZWZpbmVcbmV4cG9ydCBmdW5jdGlvbiBzdXBlclJlZmluZShmbikge1xuICAgIHJldHVybiBjb3JlLl9zdXBlclJlZmluZShmbik7XG59XG4vLyBSZS1leHBvcnQgZGVzY3JpYmUgYW5kIG1ldGEgZnJvbSBjb3JlXG5leHBvcnQgY29uc3QgZGVzY3JpYmUgPSBjb3JlLmRlc2NyaWJlO1xuZXhwb3J0IGNvbnN0IG1ldGEgPSBjb3JlLm1ldGE7XG5mdW5jdGlvbiBfaW5zdGFuY2VvZihjbHMsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaW5zdCA9IG5ldyBab2RDdXN0b20oe1xuICAgICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgICBjaGVjazogXCJjdXN0b21cIixcbiAgICAgICAgZm46IChkYXRhKSA9PiBkYXRhIGluc3RhbmNlb2YgY2xzLFxuICAgICAgICBhYm9ydDogdHJ1ZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuYmFnLkNsYXNzID0gY2xzO1xuICAgIC8vIE92ZXJyaWRlIGNoZWNrIHRvIGVtaXQgaW52YWxpZF90eXBlIGluc3RlYWQgb2YgY3VzdG9tXG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKCEocGF5bG9hZC52YWx1ZSBpbnN0YW5jZW9mIGNscykpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGNscy5uYW1lLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogWy4uLihpbnN0Ll96b2QuZGVmLnBhdGggPz8gW10pXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaW5zdDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIGluc3RhbmNlb2YgfTtcbi8vIHN0cmluZ2Jvb2xcbmV4cG9ydCBjb25zdCBzdHJpbmdib29sID0gKC4uLmFyZ3MpID0+IGNvcmUuX3N0cmluZ2Jvb2woe1xuICAgIENvZGVjOiBab2RDb2RlYyxcbiAgICBCb29sZWFuOiBab2RCb29sZWFuLFxuICAgIFN0cmluZzogWm9kU3RyaW5nLFxufSwgLi4uYXJncyk7XG5leHBvcnQgZnVuY3Rpb24ganNvbihwYXJhbXMpIHtcbiAgICBjb25zdCBqc29uU2NoZW1hID0gbGF6eSgoKSA9PiB7XG4gICAgICAgIHJldHVybiB1bmlvbihbc3RyaW5nKHBhcmFtcyksIG51bWJlcigpLCBib29sZWFuKCksIF9udWxsKCksIGFycmF5KGpzb25TY2hlbWEpLCByZWNvcmQoc3RyaW5nKCksIGpzb25TY2hlbWEpXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpzb25TY2hlbWE7XG59XG4vLyBwcmVwcm9jZXNzXG4vLyAvKiogQGRlcHJlY2F0ZWQgVXNlIGB6LnBpcGUoKWAgYW5kIGB6LnRyYW5zZm9ybSgpYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3MoZm4sIHNjaGVtYSkge1xuICAgIHJldHVybiBwaXBlKHRyYW5zZm9ybShmbiksIHNjaGVtYSk7XG59XG4iLAogICAgIi8vIFpvZCAzIGNvbXBhdCBsYXllclxuaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuLyoqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmF3IHN0cmluZyBsaXRlcmFsIGNvZGVzIGluc3RlYWQsIGUuZy4gXCJpbnZhbGlkX3R5cGVcIi4gKi9cbmV4cG9ydCBjb25zdCBab2RJc3N1ZUNvZGUgPSB7XG4gICAgaW52YWxpZF90eXBlOiBcImludmFsaWRfdHlwZVwiLFxuICAgIHRvb19iaWc6IFwidG9vX2JpZ1wiLFxuICAgIHRvb19zbWFsbDogXCJ0b29fc21hbGxcIixcbiAgICBpbnZhbGlkX2Zvcm1hdDogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgIG5vdF9tdWx0aXBsZV9vZjogXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICB1bnJlY29nbml6ZWRfa2V5czogXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgIGludmFsaWRfdW5pb246IFwiaW52YWxpZF91bmlvblwiLFxuICAgIGludmFsaWRfa2V5OiBcImludmFsaWRfa2V5XCIsXG4gICAgaW52YWxpZF9lbGVtZW50OiBcImludmFsaWRfZWxlbWVudFwiLFxuICAgIGludmFsaWRfdmFsdWU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgIGN1c3RvbTogXCJjdXN0b21cIixcbn07XG5leHBvcnQgeyAkYnJhbmQsIGNvbmZpZyB9IGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB6LmNvbmZpZyhwYXJhbXMpYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yTWFwKG1hcCkge1xuICAgIGNvcmUuY29uZmlnKHtcbiAgICAgICAgY3VzdG9tRXJyb3I6IG1hcCxcbiAgICB9KTtcbn1cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYHouY29uZmlnKClgIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JNYXAoKSB7XG4gICAgcmV0dXJuIGNvcmUuY29uZmlnKCkuY3VzdG9tRXJyb3I7XG59XG4vKiogQGRlcHJlY2F0ZWQgRG8gbm90IHVzZS4gU3R1YiBkZWZpbml0aW9uLCBvbmx5IGluY2x1ZGVkIGZvciB6b2QtdG8tanNvbi1zY2hlbWEgY29tcGF0aWJpbGl0eS4gKi9cbmV4cG9ydCB2YXIgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kO1xuKGZ1bmN0aW9uIChab2RGaXJzdFBhcnR5VHlwZUtpbmQpIHtcbn0pKFpvZEZpcnN0UGFydHlUeXBlS2luZCB8fCAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kID0ge30pKTtcbiIsCiAgICAiaW1wb3J0IHsgZ2xvYmFsUmVnaXN0cnkgfSBmcm9tIFwiLi4vY29yZS9yZWdpc3RyaWVzLmpzXCI7XG5pbXBvcnQgKiBhcyBfY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgX2lzbyBmcm9tIFwiLi9pc28uanNcIjtcbmltcG9ydCAqIGFzIF9zY2hlbWFzIGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbi8vIExvY2FsIHogb2JqZWN0IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCAuLi9pbmRleC5qc1xuY29uc3QgeiA9IHtcbiAgICAuLi5fc2NoZW1hcyxcbiAgICAuLi5fY2hlY2tzLFxuICAgIGlzbzogX2lzbyxcbn07XG4vLyBLZXlzIHRoYXQgYXJlIHJlY29nbml6ZWQgYW5kIGhhbmRsZWQgYnkgdGhlIGNvbnZlcnNpb24gbG9naWNcbmNvbnN0IFJFQ09HTklaRURfS0VZUyA9IG5ldyBTZXQoW1xuICAgIC8vIFNjaGVtYSBpZGVudGlmaWNhdGlvblxuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJHJlZlwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgLy8gQ29yZSBzY2hlbWEga2V5d29yZHNcbiAgICBcIiRpZFwiLFxuICAgIFwiaWRcIixcbiAgICBcIiRjb21tZW50XCIsXG4gICAgXCIkYW5jaG9yXCIsXG4gICAgXCIkdm9jYWJ1bGFyeVwiLFxuICAgIFwiJGR5bmFtaWNSZWZcIixcbiAgICBcIiRkeW5hbWljQW5jaG9yXCIsXG4gICAgLy8gVHlwZVxuICAgIFwidHlwZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiY29uc3RcIixcbiAgICAvLyBDb21wb3NpdGlvblxuICAgIFwiYW55T2ZcIixcbiAgICBcIm9uZU9mXCIsXG4gICAgXCJhbGxPZlwiLFxuICAgIFwibm90XCIsXG4gICAgLy8gT2JqZWN0XG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJyZXF1aXJlZFwiLFxuICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgXCJtaW5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJtYXhQcm9wZXJ0aWVzXCIsXG4gICAgLy8gQXJyYXlcbiAgICBcIml0ZW1zXCIsXG4gICAgXCJwcmVmaXhJdGVtc1wiLFxuICAgIFwiYWRkaXRpb25hbEl0ZW1zXCIsXG4gICAgXCJtaW5JdGVtc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgXCJjb250YWluc1wiLFxuICAgIFwibWluQ29udGFpbnNcIixcbiAgICBcIm1heENvbnRhaW5zXCIsXG4gICAgLy8gU3RyaW5nXG4gICAgXCJtaW5MZW5ndGhcIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgLy8gTnVtYmVyXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJleGNsdXNpdmVNaW5pbXVtXCIsXG4gICAgXCJleGNsdXNpdmVNYXhpbXVtXCIsXG4gICAgXCJtdWx0aXBsZU9mXCIsXG4gICAgLy8gQWxyZWFkeSBoYW5kbGVkIG1ldGFkYXRhXG4gICAgXCJkZXNjcmlwdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIC8vIENvbnRlbnRcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudE1lZGlhVHlwZVwiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuICAgIC8vIFVuc3VwcG9ydGVkIChlcnJvci10aHJvd2luZylcbiAgICBcInVuZXZhbHVhdGVkSXRlbXNcIixcbiAgICBcInVuZXZhbHVhdGVkUHJvcGVydGllc1wiLFxuICAgIFwiaWZcIixcbiAgICBcInRoZW5cIixcbiAgICBcImVsc2VcIixcbiAgICBcImRlcGVuZGVudFNjaGVtYXNcIixcbiAgICBcImRlcGVuZGVudFJlcXVpcmVkXCIsXG4gICAgLy8gT3BlbkFQSVxuICAgIFwibnVsbGFibGVcIixcbiAgICBcInJlYWRPbmx5XCIsXG5dKTtcbmZ1bmN0aW9uIGRldGVjdFZlcnNpb24oc2NoZW1hLCBkZWZhdWx0VGFyZ2V0KSB7XG4gICAgY29uc3QgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIH1cbiAgICBpZiAoJHNjaGVtYSA9PT0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIikge1xuICAgICAgICByZXR1cm4gXCJkcmFmdC03XCI7XG4gICAgfVxuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiKSB7XG4gICAgICAgIHJldHVybiBcImRyYWZ0LTRcIjtcbiAgICB9XG4gICAgLy8gVXNlIGRlZmF1bHRUYXJnZXQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGRyYWZ0LTIwMjAtMTJcbiAgICByZXR1cm4gZGVmYXVsdFRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSZWYocmVmLCBjdHgpIHtcbiAgICBpZiAoIXJlZi5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcmVmLnNsaWNlKDEpLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgLy8gSGFuZGxlIHJvb3QgcmVmZXJlbmNlIFwiI1wiXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBjdHgucm9vdFNjaGVtYTtcbiAgICB9XG4gICAgY29uc3QgZGVmc0tleSA9IGN0eC52ZXJzaW9uID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwiJGRlZnNcIiA6IFwiZGVmaW5pdGlvbnNcIjtcbiAgICBpZiAocGF0aFswXSA9PT0gZGVmc0tleSkge1xuICAgICAgICBjb25zdCBrZXkgPSBwYXRoWzFdO1xuICAgICAgICBpZiAoIWtleSB8fCAhY3R4LmRlZnNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3R4LmRlZnNba2V5XTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgLy8gSGFuZGxlIHVuc3VwcG9ydGVkIGZlYXR1cmVzXG4gICAgaWYgKHNjaGVtYS5ub3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IHsgbm90OiB7fSB9IHJlcHJlc2VudHMgbmV2ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubm90ID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHNjaGVtYS5ub3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHoubmV2ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpXCIpO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLnVuZXZhbHVhdGVkSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuaWYgIT09IHVuZGVmaW5lZCB8fCBzY2hlbWEudGhlbiAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5lbHNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5kZXBlbmRlbnRTY2hlbWFzICE9PSB1bmRlZmluZWQgfHwgc2NoZW1hLmRlcGVuZGVudFJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIC8vIEhhbmRsZSAkcmVmXG4gICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgIGNvbnN0IHJlZlBhdGggPSBzY2hlbWEuJHJlZjtcbiAgICAgICAgaWYgKGN0eC5yZWZzLmhhcyhyZWZQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5yZWZzLmdldChyZWZQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LnByb2Nlc3NpbmcuaGFzKHJlZlBhdGgpKSB7XG4gICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgLSB1c2UgbGF6eVxuICAgICAgICAgICAgcmV0dXJuIHoubGF6eSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdHgucmVmcy5oYXMocmVmUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3JlZlBhdGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucmVmcy5nZXQocmVmUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdHgucHJvY2Vzc2luZy5hZGQocmVmUGF0aCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVJlZihyZWZQYXRoLCBjdHgpO1xuICAgICAgICBjb25zdCB6b2RTY2hlbWEgPSBjb252ZXJ0U2NoZW1hKHJlc29sdmVkLCBjdHgpO1xuICAgICAgICBjdHgucmVmcy5zZXQocmVmUGF0aCwgem9kU2NoZW1hKTtcbiAgICAgICAgY3R4LnByb2Nlc3NpbmcuZGVsZXRlKHJlZlBhdGgpO1xuICAgICAgICByZXR1cm4gem9kU2NoZW1hO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgZW51bVxuICAgIGlmIChzY2hlbWEuZW51bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSBzY2hlbWEuZW51bTtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBPcGVuQVBJIDMuMCBudWxsIHJlcHJlc2VudGF0aW9uIHsgdHlwZTogXCJzdHJpbmdcIiwgbnVsbGFibGU6IHRydWUsIGVudW06IFtudWxsXSB9XG4gICAgICAgIGlmIChjdHgudmVyc2lvbiA9PT0gXCJvcGVuYXBpLTMuMFwiICYmXG4gICAgICAgICAgICBzY2hlbWEubnVsbGFibGUgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGVudW1WYWx1ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBlbnVtVmFsdWVzWzBdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gei5udWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudW1WYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gei5uZXZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHoubGl0ZXJhbChlbnVtVmFsdWVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGFyZSBzdHJpbmdzXG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB6LmVudW0oZW51bVZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWl4ZWQgdHlwZXMgLSB1c2UgdW5pb24gb2YgbGl0ZXJhbHNcbiAgICAgICAgY29uc3QgbGl0ZXJhbFNjaGVtYXMgPSBlbnVtVmFsdWVzLm1hcCgodikgPT4gei5saXRlcmFsKHYpKTtcbiAgICAgICAgaWYgKGxpdGVyYWxTY2hlbWFzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbihbbGl0ZXJhbFNjaGVtYXNbMF0sIGxpdGVyYWxTY2hlbWFzWzFdLCAuLi5saXRlcmFsU2NoZW1hcy5zbGljZSgyKV0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgY29uc3RcbiAgICBpZiAoc2NoZW1hLmNvbnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHoubGl0ZXJhbChzY2hlbWEuY29uc3QpO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgdHlwZVxuICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgICAvLyBFeHBhbmQgdHlwZSBhcnJheSBpbnRvIGFueU9mIHVuaW9uXG4gICAgICAgIGNvbnN0IHR5cGVTY2hlbWFzID0gdHlwZS5tYXAoKHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVTY2hlbWEgPSB7IC4uLnNjaGVtYSwgdHlwZTogdCB9O1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRCYXNlU2NoZW1hKHR5cGVTY2hlbWEsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZVNjaGVtYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gei5uZXZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlU2NoZW1hcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbih0eXBlU2NoZW1hcyk7XG4gICAgfVxuICAgIGlmICghdHlwZSkge1xuICAgICAgICAvLyBObyB0eXBlIHNwZWNpZmllZCAtIGVtcHR5IHNjaGVtYSAoYW55KVxuICAgICAgICByZXR1cm4gei5hbnkoKTtcbiAgICB9XG4gICAgbGV0IHpvZFNjaGVtYTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nU2NoZW1hID0gei5zdHJpbmcoKTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGZvcm1hdCB1c2luZyAuY2hlY2soKSB3aXRoIFpvZCBmb3JtYXQgZnVuY3Rpb25zXG4gICAgICAgICAgICBpZiAoc2NoZW1hLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHNjaGVtYS5mb3JtYXQ7XG4gICAgICAgICAgICAgICAgLy8gTWFwIGNvbW1vbiBmb3JtYXRzIHRvIFpvZCBjaGVjayBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcImVtYWlsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouZW1haWwoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ1cmlcIiB8fCBmb3JtYXQgPT09IFwidXJpLXJlZmVyZW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnVybCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcInV1aWRcIiB8fCBmb3JtYXQgPT09IFwiZ3VpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnV1aWQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkYXRlLXRpbWVcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pc28uZGF0ZXRpbWUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLnRpbWUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lmlzby5kdXJhdGlvbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImlwdjRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pcHY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiaXB2NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmlwdjYoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJtYWNcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5tYWMoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJjaWRyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouY2lkcnY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiY2lkci12NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmNpZHJ2NigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImJhc2U2NFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmJhc2U2NCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImJhc2U2NHVybFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmJhc2U2NHVybCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImUxNjRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lMTY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiand0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouand0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiZW1vamlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lbW9qaSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lm5hbm9pZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImN1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jdWlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jdWlkMigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei51bGlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwieGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHoueGlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwia3N1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5rc3VpZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZToganNvbi1zdHJpbmcgZm9ybWF0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IFpvZFxuICAgICAgICAgICAgICAgIC8vIEN1c3RvbSBmb3JtYXRzIGFyZSBpZ25vcmVkIC0ga2VlcCBhcyBwbGFpbiBzdHJpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFwcGx5IGNvbnN0cmFpbnRzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5MZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubWluKHNjaGVtYS5taW5MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4TGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLm1heChzY2hlbWEubWF4TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuICAgICAgICAgICAgICAgIC8vIEpTT04gU2NoZW1hIHBhdHRlcm5zIGFyZSBub3QgaW1wbGljaXRseSBhbmNob3JlZCAobWF0Y2ggYW55d2hlcmUgaW4gc3RyaW5nKVxuICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5yZWdleChuZXcgUmVnRXhwKHNjaGVtYS5wYXR0ZXJuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSBzdHJpbmdTY2hlbWE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6IHtcbiAgICAgICAgICAgIGxldCBudW1iZXJTY2hlbWEgPSB0eXBlID09PSBcImludGVnZXJcIiA/IHoubnVtYmVyKCkuaW50KCkgOiB6Lm51bWJlcigpO1xuICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubWluKHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubWF4KHNjaGVtYS5tYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEuZ3Qoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5taW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmd0KHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubHQoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5tYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmx0KHNjaGVtYS5tYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm11bHRpcGxlT2YgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubXVsdGlwbGVPZihzY2hlbWEubXVsdGlwbGVPZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSBudW1iZXJTY2hlbWE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSB6LmJvb2xlYW4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJudWxsXCI6IHtcbiAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoubnVsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRTZXQgPSBuZXcgU2V0KHNjaGVtYS5yZXF1aXJlZCB8fCBbXSk7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHByb3BlcnRpZXMgLSBtYXJrIG9wdGlvbmFsIG9uZXNcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wWm9kU2NoZW1hID0gY29udmVydFNjaGVtYShwcm9wU2NoZW1hLCBjdHgpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBpbiByZXF1aXJlZCBhcnJheSwgbWFrZSBpdCBvcHRpb25hbFxuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSByZXF1aXJlZFNldC5oYXMoa2V5KSA/IHByb3Bab2RTY2hlbWEgOiBwcm9wWm9kU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcHJvcGVydHlOYW1lc1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5U2NoZW1hID0gY29udmVydFNjaGVtYShzY2hlbWEucHJvcGVydHlOYW1lcywgY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eClcbiAgICAgICAgICAgICAgICAgICAgOiB6LmFueSgpO1xuICAgICAgICAgICAgICAgIC8vIENhc2UgQTogTm8gcHJvcGVydGllcyAocHVyZSByZWNvcmQpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNoYXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgem9kU2NoZW1hID0gei5yZWNvcmQoa2V5U2NoZW1hLCB2YWx1ZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBDYXNlIEI6IFdpdGggcHJvcGVydGllcyAoaW50ZXJzZWN0aW9uIG9mIG9iamVjdCBhbmQgbG9vc2VSZWNvcmQpXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkU2NoZW1hID0gei5sb29zZVJlY29yZChrZXlTY2hlbWEsIHZhbHVlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LmludGVyc2VjdGlvbihvYmplY3RTY2hlbWEsIHJlY29yZFNjaGVtYSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuUHJvcGVydGllczoga2V5cyBtYXRjaGluZyBwYXR0ZXJuIG11c3Qgc2F0aXNmeSBjb3JyZXNwb25kaW5nIHNjaGVtYVxuICAgICAgICAgICAgICAgIC8vIFVzZSBsb29zZSByZWNvcmRzIHNvIG5vbi1tYXRjaGluZyBrZXlzIHBhc3MgdGhyb3VnaFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wcyA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuS2V5cyA9IE9iamVjdC5rZXlzKHBhdHRlcm5Qcm9wcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9vc2VSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5LZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WYWx1ZSA9IGNvbnZlcnRTY2hlbWEocGF0dGVyblByb3BzW3BhdHRlcm5dLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlTY2hlbWEgPSB6LnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAocGF0dGVybikpO1xuICAgICAgICAgICAgICAgICAgICBsb29zZVJlY29yZHMucHVzaCh6Lmxvb3NlUmVjb3JkKGtleVNjaGVtYSwgcGF0dGVyblZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGludGVyc2VjdGlvbjogb2JqZWN0IHNjaGVtYSArIGFsbCBwYXR0ZXJuIHByb3BlcnR5IHJlY29yZHNcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFzVG9JbnRlcnNlY3QgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2hhcGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHBhc3N0aHJvdWdoIHNvIHBhdHRlcm5Qcm9wZXJ0aWVzIGNhbiB2YWxpZGF0ZSBhZGRpdGlvbmFsIGtleXNcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hc1RvSW50ZXJzZWN0LnB1c2goei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY2hlbWFzVG9JbnRlcnNlY3QucHVzaCguLi5sb29zZVJlY29yZHMpO1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHNjaGVtYXNUb0ludGVyc2VjdFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoYWluIGludGVyc2VjdGlvbnM6IChBICYgQikgJiBDICYgRCAuLi5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHouaW50ZXJzZWN0aW9uKHNjaGVtYXNUb0ludGVyc2VjdFswXSwgc2NoZW1hc1RvSW50ZXJzZWN0WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgc2NoZW1hc1RvSW50ZXJzZWN0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gICAgICAgICAgICAvLyBJbiBKU09OIFNjaGVtYSwgYWRkaXRpb25hbFByb3BlcnRpZXMgZGVmYXVsdHMgdG8gdHJ1ZSAoYWxsb3cgYW55IGV4dHJhIHByb3BlcnRpZXMpXG4gICAgICAgICAgICAvLyBJbiBab2QsIG9iamVjdHMgc3RyaXAgdW5rbm93biBrZXlzIGJ5IGRlZmF1bHQsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgZXhwbGljaXRseVxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpY3QgbW9kZSAtIG5vIGV4dHJhIHByb3BlcnRpZXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IG9iamVjdFNjaGVtYS5zdHJpY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHRyYSBwcm9wZXJ0aWVzIG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBzY2hlbWFcbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBvYmplY3RTY2hlbWEuY2F0Y2hhbGwoY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbFByb3BlcnRpZXMgaXMgdHJ1ZSBvciB1bmRlZmluZWQgLSBhbGxvdyBhbnkgZXh0cmEgcHJvcGVydGllcyAocGFzc3Rocm91Z2gpXG4gICAgICAgICAgICAgICAgem9kU2NoZW1hID0gb2JqZWN0U2NoZW1hLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgICAgICAgLy8gVE9ETzogdW5pcXVlSXRlbXMgaXMgbm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgLy8gVE9ETzogY29udGFpbnMvbWluQ29udGFpbnMvbWF4Q29udGFpbnMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB0dXBsZSAocHJlZml4SXRlbXMgb3IgaXRlbXMgYXMgYXJyYXkpXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhJdGVtcyA9IHNjaGVtYS5wcmVmaXhJdGVtcztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgaWYgKHByZWZpeEl0ZW1zICYmIEFycmF5LmlzQXJyYXkocHJlZml4SXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVHVwbGUgd2l0aCBwcmVmaXhJdGVtcyAoZHJhZnQtMjAyMC0xMilcbiAgICAgICAgICAgICAgICBjb25zdCB0dXBsZUl0ZW1zID0gcHJlZml4SXRlbXMubWFwKChpdGVtKSA9PiBjb252ZXJ0U2NoZW1hKGl0ZW0sIGN0eCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBpdGVtcyAmJiB0eXBlb2YgaXRlbXMgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFNjaGVtYShpdGVtcywgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBseSBtaW5JdGVtcy9tYXhJdGVtcyBjb25zdHJhaW50cyB0byB0dXBsZXNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgICAgIC8vIFR1cGxlIHdpdGggaXRlbXMgYXJyYXkgKGRyYWZ0LTcpXG4gICAgICAgICAgICAgICAgY29uc3QgdHVwbGVJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gY29udmVydFNjaGVtYShpdGVtLCBjdHgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDsgLy8gYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSBtZWFucyBubyByZXN0LCBoYW5kbGVkIGJ5IGRlZmF1bHQgdHVwbGUgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBseSBtaW5JdGVtcy9tYXhJdGVtcyBjb25zdHJhaW50cyB0byB0dXBsZXNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVndWxhciBhcnJheVxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb252ZXJ0U2NoZW1hKGl0ZW1zLCBjdHgpO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheVNjaGVtYSA9IHouYXJyYXkoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVNjaGVtYSA9IGFycmF5U2NoZW1hLm1pbihzY2hlbWEubWluSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVNjaGVtYSA9IGFycmF5U2NoZW1hLm1heChzY2hlbWEubWF4SXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBhcnJheVNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vIGl0ZW1zIHNwZWNpZmllZCAtIGFycmF5IG9mIGFueVxuICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHouYXJyYXkoei5hbnkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke3R5cGV9YCk7XG4gICAgfVxuICAgIC8vIEFwcGx5IG1ldGFkYXRhXG4gICAgaWYgKHNjaGVtYS5kZXNjcmlwdGlvbikge1xuICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuZGVzY3JpYmUoc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgem9kU2NoZW1hID0gem9kU2NoZW1hLmRlZmF1bHQoc2NoZW1hLmRlZmF1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gem9kU2NoZW1hO1xufVxuZnVuY3Rpb24gY29udmVydFNjaGVtYShzY2hlbWEsIGN0eCkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gc2NoZW1hID8gei5hbnkoKSA6IHoubmV2ZXIoKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBiYXNlIHNjaGVtYSBmaXJzdCAoaWdub3JpbmcgY29tcG9zaXRpb24ga2V5d29yZHMpXG4gICAgbGV0IGJhc2VTY2hlbWEgPSBjb252ZXJ0QmFzZVNjaGVtYShzY2hlbWEsIGN0eCk7XG4gICAgY29uc3QgaGFzRXhwbGljaXRUeXBlID0gc2NoZW1hLnR5cGUgfHwgc2NoZW1hLmVudW0gIT09IHVuZGVmaW5lZCB8fCBzY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZDtcbiAgICAvLyBQcm9jZXNzIGNvbXBvc2l0aW9uIGtleXdvcmRzIExBU1QgKHRoZXkgY2FuIGFwcGVhciB0b2dldGhlcilcbiAgICAvLyBIYW5kbGUgYW55T2YgLSB3cmFwIGJhc2Ugc2NoZW1hIHdpdGggdW5pb25cbiAgICBpZiAoc2NoZW1hLmFueU9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc2NoZW1hLmFueU9mLm1hcCgocykgPT4gY29udmVydFNjaGVtYShzLCBjdHgpKTtcbiAgICAgICAgY29uc3QgYW55T2ZVbmlvbiA9IHoudW5pb24ob3B0aW9ucyk7XG4gICAgICAgIGJhc2VTY2hlbWEgPSBoYXNFeHBsaWNpdFR5cGUgPyB6LmludGVyc2VjdGlvbihiYXNlU2NoZW1hLCBhbnlPZlVuaW9uKSA6IGFueU9mVW5pb247XG4gICAgfVxuICAgIC8vIEhhbmRsZSBvbmVPZiAtIGV4Y2x1c2l2ZSB1bmlvbiAoZXhhY3RseSBvbmUgbXVzdCBtYXRjaClcbiAgICBpZiAoc2NoZW1hLm9uZU9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLm9uZU9mKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc2NoZW1hLm9uZU9mLm1hcCgocykgPT4gY29udmVydFNjaGVtYShzLCBjdHgpKTtcbiAgICAgICAgY29uc3Qgb25lT2ZVbmlvbiA9IHoueG9yKG9wdGlvbnMpO1xuICAgICAgICBiYXNlU2NoZW1hID0gaGFzRXhwbGljaXRUeXBlID8gei5pbnRlcnNlY3Rpb24oYmFzZVNjaGVtYSwgb25lT2ZVbmlvbikgOiBvbmVPZlVuaW9uO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgYWxsT2YgLSB3cmFwIGJhc2Ugc2NoZW1hIHdpdGggaW50ZXJzZWN0aW9uXG4gICAgaWYgKHNjaGVtYS5hbGxPZiAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5hbGxPZikpIHtcbiAgICAgICAgaWYgKHNjaGVtYS5hbGxPZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGJhc2VTY2hlbWEgPSBoYXNFeHBsaWNpdFR5cGUgPyBiYXNlU2NoZW1hIDogei5hbnkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBoYXNFeHBsaWNpdFR5cGUgPyBiYXNlU2NoZW1hIDogY29udmVydFNjaGVtYShzY2hlbWEuYWxsT2ZbMF0sIGN0eCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydElkeCA9IGhhc0V4cGxpY2l0VHlwZSA/IDAgOiAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SWR4OyBpIDwgc2NoZW1hLmFsbE9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gei5pbnRlcnNlY3Rpb24ocmVzdWx0LCBjb252ZXJ0U2NoZW1hKHNjaGVtYS5hbGxPZltpXSwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYXNlU2NoZW1hID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEhhbmRsZSBudWxsYWJsZSAoT3BlbkFQSSAzLjApXG4gICAgaWYgKHNjaGVtYS5udWxsYWJsZSA9PT0gdHJ1ZSAmJiBjdHgudmVyc2lvbiA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgIGJhc2VTY2hlbWEgPSB6Lm51bGxhYmxlKGJhc2VTY2hlbWEpO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgcmVhZE9ubHlcbiAgICBpZiAoc2NoZW1hLnJlYWRPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgIGJhc2VTY2hlbWEgPSB6LnJlYWRvbmx5KGJhc2VTY2hlbWEpO1xuICAgIH1cbiAgICAvLyBDb2xsZWN0IG1ldGFkYXRhOiBjb3JlIHNjaGVtYSBrZXl3b3JkcyBhbmQgdW5yZWNvZ25pemVkIGtleXNcbiAgICBjb25zdCBleHRyYU1ldGEgPSB7fTtcbiAgICAvLyBDb3JlIHNjaGVtYSBrZXl3b3JkcyB0aGF0IHNob3VsZCBiZSBjYXB0dXJlZCBhcyBtZXRhZGF0YVxuICAgIGNvbnN0IGNvcmVNZXRhZGF0YUtleXMgPSBbXCIkaWRcIiwgXCJpZFwiLCBcIiRjb21tZW50XCIsIFwiJGFuY2hvclwiLCBcIiR2b2NhYnVsYXJ5XCIsIFwiJGR5bmFtaWNSZWZcIiwgXCIkZHluYW1pY0FuY2hvclwiXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb3JlTWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBleHRyYU1ldGFba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbnRlbnQga2V5d29yZHMgLSBzdG9yZSBhcyBtZXRhZGF0YVxuICAgIGNvbnN0IGNvbnRlbnRNZXRhZGF0YUtleXMgPSBbXCJjb250ZW50RW5jb2RpbmdcIiwgXCJjb250ZW50TWVkaWFUeXBlXCIsIFwiY29udGVudFNjaGVtYVwiXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb250ZW50TWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBleHRyYU1ldGFba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVucmVjb2duaXplZCBrZXlzIChjdXN0b20gbWV0YWRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgICAgICBpZiAoIVJFQ09HTklaRURfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgZXh0cmFNZXRhW2tleV0gPSBzY2hlbWFba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZXh0cmFNZXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN0eC5yZWdpc3RyeS5hZGQoYmFzZVNjaGVtYSwgZXh0cmFNZXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VTY2hlbWE7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgSlNPTiBTY2hlbWEgdG8gYSBab2Qgc2NoZW1hLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIHNlbWktZXhwZXJpbWVudGFsLiBJdCdzIGJlaGF2aW9yIGlzIGxpYWJsZSB0byBjaGFuZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUpTT05TY2hlbWEoc2NoZW1hLCBwYXJhbXMpIHtcbiAgICAvLyBIYW5kbGUgYm9vbGVhbiBzY2hlbWFzXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gZGV0ZWN0VmVyc2lvbihzY2hlbWEsIHBhcmFtcz8uZGVmYXVsdFRhcmdldCk7XG4gICAgY29uc3QgZGVmcyA9IChzY2hlbWEuJGRlZnMgfHwgc2NoZW1hLmRlZmluaXRpb25zIHx8IHt9KTtcbiAgICBjb25zdCBjdHggPSB7XG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGRlZnMsXG4gICAgICAgIHJlZnM6IG5ldyBNYXAoKSxcbiAgICAgICAgcHJvY2Vzc2luZzogbmV3IFNldCgpLFxuICAgICAgICByb290U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHJlZ2lzdHJ5OiBwYXJhbXM/LnJlZ2lzdHJ5ID8/IGdsb2JhbFJlZ2lzdHJ5LFxuICAgIH07XG4gICAgcmV0dXJuIGNvbnZlcnRTY2hlbWEoc2NoZW1hLCBjdHgpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBzY2hlbWFzIGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NvZXJjZWRTdHJpbmcoc2NoZW1hcy5ab2RTdHJpbmcsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jb2VyY2VkTnVtYmVyKHNjaGVtYXMuWm9kTnVtYmVyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NvZXJjZWRCb29sZWFuKHNjaGVtYXMuWm9kQm9vbGVhbiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBiaWdpbnQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NvZXJjZWRCaWdpbnQoc2NoZW1hcy5ab2RCaWdJbnQsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGF0ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY29lcmNlZERhdGUoc2NoZW1hcy5ab2REYXRlLCBwYXJhbXMpO1xufVxuIiwKICAgICJleHBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBhdC5qc1wiO1xuLy8gem9kLXNwZWNpZmllZFxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCBlbiBmcm9tIFwiLi4vbG9jYWxlcy9lbi5qc1wiO1xuY29uZmlnKGVuKCkpO1xuZXhwb3J0IHsgZ2xvYmFsUmVnaXN0cnksIHJlZ2lzdHJ5LCBjb25maWcsICRvdXRwdXQsICRpbnB1dCwgJGJyYW5kLCBjbG9uZSwgcmVnZXhlcywgdHJlZWlmeUVycm9yLCBwcmV0dGlmeUVycm9yLCBmb3JtYXRFcnJvciwgZmxhdHRlbkVycm9yLCBUaW1lUHJlY2lzaW9uLCB1dGlsLCBORVZFUiwgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuZXhwb3J0IHsgdG9KU09OU2NoZW1hIH0gZnJvbSBcIi4uL2NvcmUvanNvbi1zY2hlbWEtcHJvY2Vzc29ycy5qc1wiO1xuZXhwb3J0IHsgZnJvbUpTT05TY2hlbWEgfSBmcm9tIFwiLi9mcm9tLWpzb24tc2NoZW1hLmpzXCI7XG5leHBvcnQgKiBhcyBsb2NhbGVzIGZyb20gXCIuLi9sb2NhbGVzL2luZGV4LmpzXCI7XG4vLyBpc29cbi8vIG11c3QgYmUgZXhwb3J0ZWQgZnJvbSB0b3AtbGV2ZWxcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2xpbmhhY2tzL3pvZC9pc3N1ZXMvNDQ5MVxuZXhwb3J0IHsgWm9kSVNPRGF0ZVRpbWUsIFpvZElTT0RhdGUsIFpvZElTT1RpbWUsIFpvZElTT0R1cmF0aW9uIH0gZnJvbSBcIi4vaXNvLmpzXCI7XG5leHBvcnQgKiBhcyBpc28gZnJvbSBcIi4vaXNvLmpzXCI7XG5leHBvcnQgKiBhcyBjb2VyY2UgZnJvbSBcIi4vY29lcmNlLmpzXCI7XG4iLAogICAgImltcG9ydCAqIGFzIHogZnJvbSBcIi4vdjQvY2xhc3NpYy9leHRlcm5hbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdjQvY2xhc3NpYy9leHRlcm5hbC5qc1wiO1xuZXhwb3J0IHsgeiB9O1xuZXhwb3J0IGRlZmF1bHQgejtcbiIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5leHBvcnQgY29uc3QgU2Vzc2lvblN0YXJ0RXZlbnRTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBzZXNzaW9uIGlkJyksXG4gICAgdGhyZWFkSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHRocmVhZCBpZCAob3B0aW9uYWwsIGNhbiBiZSBzZXQgaW4gY29tcGxldGUpJyksXG4gICAgb3JnSWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBvcmdhbml6YXRpb24gaWQnKSxcbiAgICBwcm9qZWN0SWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwcm9qZWN0IGlkJyksXG4gICAgZGVwbG95bWVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBkZXBsb3ltZW50IGlkJyksXG4gICAgcm91dGVJZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHJvdXRlIGlkJyksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBlbnZpcm9ubWVudCAoQUdFTlRVSVRZX0VOVklST05NRU5UKScpLFxuICAgIGRldm1vZGU6IHouYm9vbGVhbigpLmRlc2NyaWJlKCd0cnVlIGlmIHJ1bm5pbmcgaW4gZGV2bW9kZScpLFxuICAgIHVybDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHVybCBmb3IgdGhlIHNlc3Npb24gZXZlbnQnKSxcbiAgICBtZXRob2Q6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBtZXRob2QgZm9yIHRoZSBzZXNzaW9uIGV2ZW50JyksXG4gICAgdHJpZ2dlcjogelxuICAgICAgICAuZW51bShbJ2FnZW50JywgJ2FwaScsICdlbWFpbCcsICdzbXMnLCAnY3JvbicsICdtYW51YWwnLCAnZGlzY29yZCcsICd3ZWJzb2NrZXQnXSlcbiAgICAgICAgLmRlc2NyaWJlKCdob3cgdGhlIHNlc3Npb24gd2FzIHRyaWdnZXJlZCcpLFxuICAgIG1ldGFkYXRhOiB6XG4gICAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgnb3B0aW9uYWwgdW5lbmNyeXB0ZWQga2V5LXZhbHVlIG1ldGFkYXRhJyksXG59KVxuICAgIC5kZXNjcmliZSgnVGhlIGV2ZW50IHRvIHJlY29yZCBhIHNlc3Npb24gc3RhcnRlZCcpO1xuZXhwb3J0IGNvbnN0IFNlc3Npb25Db21wbGV0ZUV2ZW50U2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgc2Vzc2lvbiBpZCcpLFxuICAgIHRocmVhZElkOiB6LnN0cmluZygpLm51bGxhYmxlKCkuZGVzY3JpYmUoJ3RoZSB0aHJlYWQgaWQgKG51bGwgaWYgdGhyZWFkIGhhcyBubyBkYXRhKScpLFxuICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBvcHRpb25hbCBlcnJvciBtZXNzYWdlIGlmIHRoZSBzZXNzaW9uIGZhaWxlZCcpLFxuICAgIGFnZW50SWRzOiB6XG4gICAgICAgIC5hcnJheSh6LnN0cmluZygpKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoJ29wdGlvbmFsIGFycmF5IG9mIGlkcyBmb3IgdGhlIGFnZW50cyB0aGF0IGV4ZWN1dGVkIGZvciB0aGUgc2Vzc2lvbicpLFxuICAgIHN0YXR1c0NvZGU6IHoubnVtYmVyKCkuZGVzY3JpYmUoJ3RoZSBIVFRQIHN0YXR1cyBjb2RlJyksXG4gICAgdXNlckRhdGE6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnb3B0aW9uYWwgSlNPTiBzdHJpbmcgb2Ygc2Vzc2lvbiBzdGF0ZSBkYXRhJyksXG4gICAgbWV0YWRhdGE6IHpcbiAgICAgICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKCdvcHRpb25hbCB1bmVuY3J5cHRlZCBrZXktdmFsdWUgbWV0YWRhdGEnKSxcbn0pXG4gICAgLmRlc2NyaWJlKCdUaGUgZXZlbnQgdG8gcmVjb3JkIGEgc2Vzc2lvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5leHBvcnQgY29uc3QgU2Vzc2lvblN0YXJ0RXZlbnREZWxheWVkU2NoZW1hID0gei5pbnRlcnNlY3Rpb24oU2Vzc2lvblN0YXJ0RXZlbnRTY2hlbWEsIHoub2JqZWN0KHsgdGltZXN0YW1wOiB6Lm51bWJlcigpLmludCgpLmRlc2NyaWJlKCd0aGUgZXZlbnQgdGltZXN0YW1wIGluIGVwb2NoJykgfSkpO1xuZXhwb3J0IGNvbnN0IFNlc3Npb25Db21wbGV0ZUV2ZW50RGVsYXllZFNjaGVtYSA9IHouaW50ZXJzZWN0aW9uKFNlc3Npb25Db21wbGV0ZUV2ZW50U2NoZW1hLCB6Lm9iamVjdCh7IHRpbWVzdGFtcDogei5udW1iZXIoKS5pbnQoKS5kZXNjcmliZSgndGhlIGV2ZW50IHRpbWVzdGFtcCBpbiBlcG9jaCcpIH0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlc3Npb24uanMubWFwIiwKICAgICJpbXBvcnQgeyBzYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi4vanNvbic7XG5pbXBvcnQgeyBidWlsZFVybCwgdG9TZXJ2aWNlRXhjZXB0aW9uIH0gZnJvbSAnLi9fdXRpbCc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG4vLyBVc2UgV2ViIEFQSSBzdHJlYW1zIC0gaW4gTm9kZS5qcy9CdW4sIGltcG9ydCBmcm9tICdzdHJlYW0vd2ViJyB3aGljaCBwcm92aWRlcyBwcm9wZXIgV2ViIEFQSVxuLy8gSW4gYnJvd3NlcnMsIHVzZSBnbG9iYWxUaGlzIGRpcmVjdGx5XG4vLyBDaGVjayBmb3IgTm9kZS5qcy9CdW4gYnkgbG9va2luZyBmb3IgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlXG5jb25zdCBpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHN0cmVhbVdlYiA9IGlzTm9kZSA/IHJlcXVpcmUoJ3N0cmVhbS93ZWInKSA6IGdsb2JhbFRoaXM7XG5jb25zdCBOYXRpdmVXcml0YWJsZVN0cmVhbSA9IHN0cmVhbVdlYi5Xcml0YWJsZVN0cmVhbTtcbmNvbnN0IE5hdGl2ZVJlYWRhYmxlU3RyZWFtID0gc3RyZWFtV2ViLlJlYWRhYmxlU3RyZWFtO1xuY29uc3QgTmF0aXZlQ29tcHJlc3Npb25TdHJlYW0gPSAoc3RyZWFtV2ViLkNvbXByZXNzaW9uU3RyZWFtID8/XG4gICAgZ2xvYmFsVGhpcy5Db21wcmVzc2lvblN0cmVhbSk7XG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5jb25zdCBSZWFkU3RyZWFtRmFpbGVkRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1JlYWRTdHJlYW1GYWlsZWRFcnJvcicpKCk7XG4vKipcbiAqIEEgd3JpdGFibGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIHVzaW5nIGNvbXBvc2l0aW9uIChicm93c2VyLWNvbXBhdGlibGUpXG4gKiBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgZW52aXJvbm1lbnRzIHNpbmNlIG5hdGl2ZSBXcml0YWJsZVN0cmVhbSBjYW4ndCBiZSBwcm9wZXJseSBleHRlbmRlZFxuICovXG5jbGFzcyBTdHJlYW1JbXBsIHtcbiAgICBpZDtcbiAgICB1cmw7XG4gICAgI3dyaXRhYmxlO1xuICAgICNjb21wcmVzc2VkO1xuICAgICNhZGFwdGVyO1xuICAgICNzaW5rO1xuICAgICNjbG9zZWQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihpZCwgdXJsLCBjb21wcmVzc2VkLCBzaW5rLCB3cml0YWJsZSwgYWRhcHRlcikge1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLiNjb21wcmVzc2VkID0gY29tcHJlc3NlZDtcbiAgICAgICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgICAgIHRoaXMuI3NpbmsgPSBzaW5rO1xuICAgICAgICB0aGlzLiN3cml0YWJsZSA9IHdyaXRhYmxlO1xuICAgIH1cbiAgICBnZXQgYnl0ZXNXcml0dGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc2luay50b3RhbDtcbiAgICB9XG4gICAgZ2V0IGNvbXByZXNzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb21wcmVzc2VkO1xuICAgIH1cbiAgICAvLyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2UgcHJvcGVydGllc1xuICAgIGdldCBsb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN3cml0YWJsZS5sb2NrZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGRhdGEgdG8gdGhlIHN0cmVhbVxuICAgICAqL1xuICAgIGFzeW5jIHdyaXRlKGNodW5rKSB7XG4gICAgICAgIGxldCBiaW5hcnlDaHVuaztcbiAgICAgICAgaWYgKGNodW5rIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgYmluYXJ5Q2h1bmsgPSBjaHVuaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBiaW5hcnlDaHVuayA9IGVuY29kZXIuZW5jb2RlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaHVuayBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBiaW5hcnlDaHVuayA9IG5ldyBVaW50OEFycmF5KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdvYmplY3QnICYmIGNodW5rICE9PSBudWxsKSB7XG4gICAgICAgICAgICBiaW5hcnlDaHVuayA9IGVuY29kZXIuZW5jb2RlKHNhZmVTdHJpbmdpZnkoY2h1bmspKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJpbmFyeUNodW5rID0gZW5jb2Rlci5lbmNvZGUoU3RyaW5nKGNodW5rKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVsZWdhdGUgdG8gdGhlIHVuZGVybHlpbmcgc2luaydzIHdyaXRlIG1ldGhvZFxuICAgICAgICBhd2FpdCB0aGlzLiNzaW5rLndyaXRlKGJpbmFyeUNodW5rKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIHN0cmVhbSBncmFjZWZ1bGx5LCBoYW5kbGluZyBhbHJlYWR5IGNsb3NlZCBzdHJlYW1zIHdpdGhvdXQgZXJyb3JcbiAgICAgKi9cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Nsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2Nsb3NlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNzaW5rLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBnZXQgYSBUeXBlRXJyb3IgYWJvdXQgdGhlIHN0cmVhbSBiZWluZyBjbG9zZWQsIGxvY2tlZCwgb3IgZXJyb3JlZCxcbiAgICAgICAgICAgIC8vIHRoYXQgbWVhbnMgcGlwZVRvKCkgb3IgYW5vdGhlciBvcGVyYXRpb24gYWxyZWFkeSBjbG9zZWQgaXQgb3IgaXQncyBpbiB1c2VcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJlxuICAgICAgICAgICAgICAgIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdjbG9zZWQnKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdlcnJvcmVkJykgfHxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnQ2Fubm90IGNsb3NlJykpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgcmV0dXJuIC0gdGhpcyBpcyB0aGUgZGVzaXJlZCBiZWhhdmlvclxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSBzdHJlYW0gaXMgbG9ja2VkLCB0cnkgdG8gY2xvc2UgdGhlIHVuZGVybHlpbmcgd3JpdGVyXG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbG9ja2VkJykpIHtcbiAgICAgICAgICAgICAgICAvLyBCZXN0LWVmZm9ydCBjbG9zdXJlIGZvciBsb2NrZWQgc3RyZWFtc1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlLXRocm93IGFueSBvdGhlciBlcnJvcnNcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFib3J0IHRoZSBzdHJlYW0gd2l0aCBhbiBvcHRpb25hbCByZWFzb25cbiAgICAgKi9cbiAgICBhYm9ydChyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3dyaXRhYmxlLmFib3J0KHJlYXNvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHdyaXRlciBmb3IgdGhlIHVuZGVybHlpbmcgc3RyZWFtXG4gICAgICovXG4gICAgZ2V0V3JpdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jd3JpdGFibGUuZ2V0V3JpdGVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIFJlYWRhYmxlU3RyZWFtIHRoYXQgc3RyZWFtcyBmcm9tIHRoZSBpbnRlcm5hbCBVUkxcbiAgICAgKlxuICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIHdpbGwgYmxvY2sgd2FpdGluZyBmb3IgZGF0YSB1bnRpbCB3cml0ZXMgc3RhcnQgdG8gdGhlIFN0cmVhbS5cbiAgICAgKiBUaGUgcmV0dXJuZWQgUmVhZGFibGVTdHJlYW0gd2lsbCByZW1haW4gb3BlbiB1bnRpbCB0aGUgU3RyZWFtIGlzIGNsb3NlZCBvciBhbiBlcnJvciBvY2N1cnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhIFJlYWRhYmxlU3RyZWFtIHRoYXQgY2FuIGJlIHBhc3NlZCB0byByZXNwb25zZS5zdHJlYW0oKVxuICAgICAqL1xuICAgIGdldFJlYWRlcigpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG4gICAgICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLiNhZGFwdGVyO1xuICAgICAgICBsZXQgYWMgPSBudWxsO1xuICAgICAgICAvLyBVc2UgbmF0aXZlIFJlYWRhYmxlU3RyZWFtIHRvIGF2b2lkIHBvbHlmaWxsIGludGVyZmVyZW5jZVxuICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZVJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgIGFzeW5jIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYy5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlcy5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IFJlYWRTdHJlYW1GYWlsZWRFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byByZWFkIHN0cmVhbTogJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5lcnJvcihuZXcgUmVhZFN0cmVhbUZhaWxlZEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSB3YXMgbnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGl2ZSByZWFkIHRvIGF2b2lkIHJlY3Vyc2l2ZSBwcm9taXNlIGNoYWluc1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoYWMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWMuYWJvcnQocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgYWMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNvbnN0IFN0cmVhbUFQSUVycm9yID0gU3RydWN0dXJlZEVycm9yKCdTdHJlYW1BUElFcnJvcicpKCk7XG4vKipcbiAqIENoZWNrIGlmIGNvbXByZXNzaW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqIENvbXByZXNzaW9uU3RyZWFtIGlzIGF2YWlsYWJsZSBpbjpcbiAqIC0gTm9kZS5qcyAxOCsgKHZpYSBzdHJlYW0vd2ViKVxuICogLSBDaHJvbWUgODArXG4gKiAtIFNhZmFyaSAxNi40K1xuICogLSBGaXJlZm94IDExMytcbiAqL1xuZnVuY3Rpb24gaXNDb21wcmVzc2lvbkF2YWlsYWJsZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIE5hdGl2ZUNvbXByZXNzaW9uU3RyZWFtICE9PSAndW5kZWZpbmVkJyAmJiBOYXRpdmVDb21wcmVzc2lvblN0cmVhbSAhPT0gbnVsbDtcbn1cbi8qKlxuICogU3RhdGUgb2JqZWN0IHRoYXQgaGFuZGxlcyBzdHJlYW1pbmcgdG8gdGhlIGJhY2tlbmQgdXNpbmcgdGhlIGFwcGVuZCBBUEkuXG4gKiBFYWNoIHdyaXRlKCkgY2FsbCBzZW5kcyBkYXRhIGltbWVkaWF0ZWx5IHZpYSBhIHNlcGFyYXRlIEhUVFAgUE9TVCByZXF1ZXN0LFxuICogZW5hYmxpbmcgcmVhbC10aW1lIHN0cmVhbWluZyB3aXRob3V0IGJ1ZmZlcmluZyBpc3N1ZXMuXG4gKi9cbmNsYXNzIFVuZGVybHlpbmdTaW5rU3RhdGUge1xuICAgIGFkYXB0ZXI7XG4gICAgdG90YWwgPSAwO1xuICAgIGNsb3NlZCA9IGZhbHNlO1xuICAgIHVybDtcbiAgICBwcm9wcztcbiAgICBjb21wcmVzc2lvbkVuYWJsZWQgPSBmYWxzZTtcbiAgICB3cml0YWJsZSA9IG51bGw7XG4gICAgY29uc3RydWN0b3IodXJsLCBhZGFwdGVyLCBwcm9wcykge1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgdGhpcy5hZGFwdGVyID0gYWRhcHRlcjtcbiAgICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIH1cbiAgICBhc3luYyBzdGFydCgpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgY29tcHJlc3Npb24gaXMgZW5hYmxlZCBhbmQgYXZhaWxhYmxlXG4gICAgICAgIHRoaXMuY29tcHJlc3Npb25FbmFibGVkID0gISEodGhpcy5wcm9wcz8uY29tcHJlc3MgJiYgaXNDb21wcmVzc2lvbkF2YWlsYWJsZSgpKTtcbiAgICAgICAgLy8gQ3JlYXRlIGEgV3JpdGFibGVTdHJlYW0gdGhhdCB3cmFwcyBvdXIgYXBwZW5kLWJhc2VkIHdyaXRlXG4gICAgICAgIHRoaXMud3JpdGFibGUgPSBuZXcgTmF0aXZlV3JpdGFibGVTdHJlYW0oe1xuICAgICAgICAgICAgd3JpdGU6IGFzeW5jIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMud3JpdGUoY2h1bmspO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFib3J0OiBhc3luYyAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hYm9ydChyZWFzb24pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRhYmxlO1xuICAgIH1cbiAgICBhc3luYyB3cml0ZShjaHVuaykge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBGb3IgYXBwZW5kLWJhc2VkIHN0cmVhbWluZywgd2UgZG9uJ3QgY29tcHJlc3MgaW5kaXZpZHVhbCBjaHVua3NcbiAgICAgICAgLy8gYmVjYXVzZSBlYWNoIHdvdWxkIGJlY29tZSBhIHNlcGFyYXRlIGd6aXAgc3RyZWFtIHRoYXQgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkLlxuICAgICAgICAvLyBJbnN0ZWFkLCBjb21wcmVzc2lvbiBpcyBoYW5kbGVkIHNlcnZlci1zaWRlIGR1cmluZyB0aGUgY29tcGxldGUgcGhhc2UuXG4gICAgICAgIHRoaXMudG90YWwgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAvLyBTZW5kIHRoZSBjaHVuayBpbW1lZGlhdGVseSB2aWEgUE9TVCB0byAvYXBwZW5kIGVuZHBvaW50XG4gICAgICAgIGNvbnN0IGFwcGVuZFVybCA9IGAke3RoaXMudXJsfS9hcHBlbmRgO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDMwXzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5pbnZva2UoYXBwZW5kVXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogY2h1bmssXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmVhbUFQSUVycm9yKHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5yZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEFwcGVuZCByZXF1ZXN0IGZhaWxlZDogJHtyZXMucmVzcG9uc2Uuc3RhdHVzfSAke3Jlcy5yZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAvLyBDYWxsIHRoZSBjb21wbGV0ZSBlbmRwb2ludCB0byBmaW5hbGl6ZSB0aGUgc3RyZWFtXG4gICAgICAgIC8vIFBhc3MgY29tcHJlc3MgZmxhZyB0byByZXF1ZXN0IHNlcnZlci1zaWRlIGNvbXByZXNzaW9uXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlVXJsID0gYCR7dGhpcy51cmx9L2NvbXBsZXRlYDtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCg2MF8wMDApOyAvLyBMb25nZXIgdGltZW91dCBmb3IgY29tcHJlc3Npb25cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5jb21wcmVzc2lvbkVuYWJsZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtQ29tcHJlc3MnXSA9ICdnemlwJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuaW52b2tlKGNvbXBsZXRlVXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmVhbUFQSUVycm9yKHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5yZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYENvbXBsZXRlIHJlcXVlc3QgZmFpbGVkOiAke3Jlcy5yZXNwb25zZS5zdGF0dXN9ICR7cmVzLnJlc3BvbnNlLnN0YXR1c1RleHR9YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGFib3J0KF9yZWFzb24pIHtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAvLyBGb3IgYXBwZW5kLWJhc2VkIHN0cmVhbWluZywgYWJvcnQgaXMgYSBuby1vcCBzaW5jZSBlYWNoIHJlcXVlc3QgaXMgaW5kZXBlbmRlbnRcbiAgICAgICAgLy8gVGhlIHN0cmVhbSB3aWxsIHNpbXBseSBiZSBpbmNvbXBsZXRlIGlmIG5vdCBhbGwgY2h1bmtzIHdlcmUgc2VudFxuICAgIH1cbn1cbmNvbnN0IFN0cmVhbU5hbWVJbnZhbGlkRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1N0cmVhbU5hbWVJbnZhbGlkRXJyb3InLCAnU3RyZWFtIG5hbWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NCBjaGFyYWN0ZXJzJyk7XG5jb25zdCBTdHJlYW1MaW1pdEludmFsaWRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignU3RyZWFtTGltaXRJbnZhbGlkRXJyb3InLCAnU3RyZWFtIGxpbWl0IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwJyk7XG5jb25zdCBTdHJlYW1JRFJlcXVpcmVkRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1N0cmVhbUlEUmVxdWlyZWRFcnJvcicsICdTdHJlYW0gaWQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5leHBvcnQgY2xhc3MgU3RyZWFtU3RvcmFnZVNlcnZpY2Uge1xuICAgICNhZGFwdGVyO1xuICAgICNiYXNlVXJsO1xuICAgIGNvbnN0cnVjdG9yKGJhc2VVcmwsIGFkYXB0ZXIpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgICAgIHRoaXMuI2Jhc2VVcmwgPSBiYXNlVXJsO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGUobmFtZSwgcHJvcHMpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoIDwgMSB8fCBuYW1lLmxlbmd0aCA+IDI1NCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmVhbU5hbWVJbnZhbGlkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLiNiYXNlVXJsO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDEwXzAwMCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXByb3BzPy5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyA/PyB7fTtcbiAgICAgICAgICAgIHByb3BzLmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzPy5tZXRhZGF0YSkge1xuICAgICAgICAgICAgYXR0cmlidXRlc1snbWV0YWRhdGEnXSA9IEpTT04uc3RyaW5naWZ5KHByb3BzLm1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHM/LmNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzWydzdHJlYW0uY29udGVudF90eXBlJ10gPSBwcm9wcy5jb250ZW50VHlwZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIC4uLihwcm9wcz8ubWV0YWRhdGEgJiYgeyBtZXRhZGF0YTogcHJvcHMubWV0YWRhdGEgfSksXG4gICAgICAgICAgICAuLi4ocHJvcHM/LmNvbnRlbnRUeXBlICYmIHsgY29udGVudFR5cGU6IHByb3BzLmNvbnRlbnRUeXBlIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS5zdHJlYW0uY3JlYXRlJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbVVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsIHJlcy5kYXRhLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBuZXcgVW5kZXJseWluZ1NpbmtTdGF0ZShzdHJlYW1VcmwsIHRoaXMuI2FkYXB0ZXIsIHByb3BzKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHNpbmsgKHN0YXJ0IHRoZSBQVVQgcmVxdWVzdCkgYW5kIGdldCB0aGUgd3JpdGFibGUgc3RyZWFtXG4gICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IHNpbmsuc3RhcnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJlYW1JbXBsKHJlcy5kYXRhLmlkLCBzdHJlYW1VcmwsIHNpbmsuY29tcHJlc3Npb25FbmFibGVkLCBzaW5rLCB3cml0YWJsZSwgdGhpcy4jYWRhcHRlcik7XG4gICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGF3YWl0IHRvU2VydmljZUV4Y2VwdGlvbignUE9TVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdChwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBpZiAocGFyYW1zPy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmxpbWl0IDw9IDAgfHwgcGFyYW1zLmxpbWl0ID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdHJlYW1MaW1pdEludmFsaWRFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlc1snbGltaXQnXSA9IFN0cmluZyhwYXJhbXMubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXM/Lm9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzWydvZmZzZXQnXSA9IFN0cmluZyhwYXJhbXMub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zPy5uYW1lKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzWyduYW1lJ10gPSBwYXJhbXMubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zPy5tZXRhZGF0YSkge1xuICAgICAgICAgICAgYXR0cmlidXRlc1snbWV0YWRhdGEnXSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5tZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7fTtcbiAgICAgICAgaWYgKHBhcmFtcz8ubmFtZSkge1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkubmFtZSA9IHBhcmFtcy5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXM/Lm1ldGFkYXRhKSB7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5tZXRhZGF0YSA9IHBhcmFtcy5tZXRhZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zPy5saW1pdCkge1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkubGltaXQgPSBwYXJhbXMubGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcz8ub2Zmc2V0KSB7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5vZmZzZXQgPSBwYXJhbXMub2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoMzBfMDAwKTtcbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgJ2xpc3QnKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LnN0cmVhbS5saXN0JyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZSBmb3Igc2l6ZUJ5dGVzXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHJlcy5kYXRhLnN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEubWVzc2FnZSxcbiAgICAgICAgICAgICAgICBzdHJlYW1zOiByZXMuZGF0YS5zdHJlYW1zLm1hcCgocykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHMubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHVybDogcy51cmwsXG4gICAgICAgICAgICAgICAgICAgIHNpemVCeXRlczogcy5zaXplX2J5dGVzLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB0b3RhbDogcmVzLmRhdGEudG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGF3YWl0IHRvU2VydmljZUV4Y2VwdGlvbignUE9TVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0KGlkKSB7XG4gICAgICAgIGlmICghaWQgfHwgdHlwZW9mIGlkICE9PSAnc3RyaW5nJyB8fCBpZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU3RyZWFtSURSZXF1aXJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVybCh0aGlzLiNiYXNlVXJsLCBpZCwgJ2luZm8nKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIGJvZHk6ICd7fScsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS5zdHJlYW0uZ2V0JyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICdzdHJlYW0uaWQnOiBpZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcy5kYXRhLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IHJlcy5kYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlcy5kYXRhLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIHVybDogcmVzLmRhdGEudXJsLFxuICAgICAgICAgICAgICAgIHNpemVCeXRlczogcmVzLmRhdGEuc2l6ZV9ieXRlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgYXdhaXQgdG9TZXJ2aWNlRXhjZXB0aW9uKCdQT1NUJywgdXJsLCByZXMucmVzcG9uc2UpO1xuICAgIH1cbiAgICBhc3luYyBkb3dubG9hZChpZCkge1xuICAgICAgICBpZiAoIWlkIHx8IHR5cGVvZiBpZCAhPT0gJ3N0cmluZycgfHwgaWQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmVhbUlEUmVxdWlyZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoMzAwXzAwMCk7IC8vIDUgbWludXRlcyBmb3IgZG93bmxvYWRcbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgaWQpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICBiaW5hcnk6IHRydWUsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LnN0cmVhbS5kb3dubG9hZCcsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAnc3RyZWFtLmlkJzogaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzLm9rICYmIHJlcy5yZXNwb25zZS5ib2R5KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLnJlc3BvbnNlLmJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgYXdhaXQgdG9TZXJ2aWNlRXhjZXB0aW9uKCdHRVQnLCB1cmwsIHJlcy5yZXNwb25zZSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZShpZCkge1xuICAgICAgICBpZiAoIWlkIHx8IHR5cGVvZiBpZCAhPT0gJ3N0cmluZycgfHwgaWQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0cmVhbUlEUmVxdWlyZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoMzBfMDAwKTtcbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgaWQpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LnN0cmVhbS5kZWxldGUnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3N0cmVhbS5pZCc6IGlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGF3YWl0IHRvU2VydmljZUV4Y2VwdGlvbignREVMRVRFJywgdXJsLCByZXMucmVzcG9uc2UpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmVhbS5qcy5tYXAiLAogICAgImltcG9ydCB7IGJ1aWxkVXJsLCB0b1NlcnZpY2VFeGNlcHRpb24gfSBmcm9tICcuL191dGlsJztcbmltcG9ydCB7IHNhZmVTdHJpbmdpZnkgfSBmcm9tICcuLi9qc29uJztcbmltcG9ydCB7IFN0cnVjdHVyZWRFcnJvciB9IGZyb20gJy4uL2Vycm9yJztcbmNvbnN0IFZlY3RvclN0b3JhZ2VOYW1lUmVxdWlyZWRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZU5hbWVSZXF1aXJlZEVycm9yJywgJ1ZlY3RvciBzdG9yYWdlIG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlS2V5UmVxdWlyZWRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZUtleVJlcXVpcmVkRXJyb3InLCAnVmVjdG9yIHN0b3JhZ2Uga2V5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuY29uc3QgVmVjdG9yU3RvcmFnZUtleXNFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZUtleXNFcnJvcicsICdWZWN0b3Igc3RvcmFnZSByZXF1aXJlcyBhbGwga2V5cyB0byBiZSBub24tZW1wdHkgc3RyaW5ncycpO1xuY29uc3QgVmVjdG9yU3RvcmFnZVF1ZXJ5RXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1ZlY3RvclN0b3JhZ2VRdWVyeUVycm9yJywgJ1ZlY3RvciBzdG9yYWdlIHF1ZXJ5IHByb3BlcnR5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuY29uc3QgVmVjdG9yU3RvcmFnZUxpbWl0RXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1ZlY3RvclN0b3JhZ2VMaW1pdEVycm9yJywgJ1ZlY3RvciBzdG9yYWdlIGxpbWl0IHByb3BlcnR5IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVyJyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlU2ltaWxhcml0eUVycm9yID0gU3RydWN0dXJlZEVycm9yKCdWZWN0b3JTdG9yYWdlU2ltaWxhcml0eUVycm9yJywgJ1ZlY3RvciBzdG9yYWdlIHNpbWlsYXJpdHkgcHJvcGVydHkgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAuMCBhbmQgMS4wJyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlTWV0YWRhdGFFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZU1ldGFkYXRhRXJyb3InLCAnVmVjdG9yIHN0b3JhZ2UgbWV0YWRhdGEgcHJvcGVydHkgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuY29uc3QgVmVjdG9yU3RvcmFnZURvY3VtZW50UmVxdWlyZWRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZURvY3VtZW50UmVxdWlyZWRFcnJvcicsICdWZWN0b3Igc3RvcmFnZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZG9jdW1lbnQgZm9yIHRoaXMgbWV0aG9kJyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlRG9jdW1lbnRLZXlNaXNzaW5nRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1ZlY3RvclN0b3JhZ2VEb2N1bWVudEtleU1pc3NpbmdFcnJvcicsICdWZWN0b3Igc3RvcmFnZSByZXF1aXJlcyBlYWNoIGRvY3VtZW50IHRvIGhhdmUgYSBub24tZW1wdHkga2V5Jyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlSW52YWxpZEVycm9yID0gU3RydWN0dXJlZEVycm9yKCdWZWN0b3JTdG9yYWdlSW52YWxpZEVycm9yJywgJ1ZlY3RvciBzdG9yYWdlIHJlcXVpcmVzIGVhY2ggZG9jdW1lbnQgdG8gaGF2ZSBlaXRoZXIgZW1iZWRkaW5ncyBvciBkb2N1bWVudCBwcm9wZXJ0eScpO1xuY29uc3QgVmVjdG9yU3RvcmFnZUVtYmVkZGluZ0ludmFsaWRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZUVtYmVkZGluZ0ludmFsaWRFcnJvcicsICdWZWN0b3Igc3RvcmFnZSByZXF1aXJlcyBlYWNoIGVtYmVkZGluZ3MgcHJvcGVydHkgdG8gaGF2ZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBudW1iZXJzJyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlRG9jdW1lbnRJbnZhbGlkRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1ZlY3RvclN0b3JhZ2VEb2N1bWVudEludmFsaWRFcnJvcicsICdWZWN0b3Igc3RvcmFnZSByZXF1aXJlcyBlYWNoIGRvY3VtZW50IHByb3BlcnR5IHRvIGhhdmUgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlJyk7XG5jb25zdCBWZWN0b3JTdG9yYWdlUmVzcG9uc2VFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmVjdG9yU3RvcmFnZVJlc3BvbnNlRXJyb3InKSgpO1xuZXhwb3J0IGNsYXNzIFZlY3RvclN0b3JhZ2VTZXJ2aWNlIHtcbiAgICAjYWRhcHRlcjtcbiAgICAjYmFzZVVybDtcbiAgICBjb25zdHJ1Y3RvcihiYXNlVXJsLCBhZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgICAgICB0aGlzLiNiYXNlVXJsID0gYmFzZVVybDtcbiAgICB9XG4gICAgYXN5bmMgdXBzZXJ0KG5hbWUsIC4uLmRvY3VtZW50cykge1xuICAgICAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VOYW1lUmVxdWlyZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlRG9jdW1lbnRSZXF1aXJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jdW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoIWRvYy5rZXkgfHwgdHlwZW9mIGRvYy5rZXkgIT09ICdzdHJpbmcnIHx8IGRvYy5rZXkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlRG9jdW1lbnRLZXlNaXNzaW5nRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKCdlbWJlZGRpbmdzJyBpbiBkb2MpICYmICEoJ2RvY3VtZW50JyBpbiBkb2MpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VJbnZhbGlkRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZW1iZWRkaW5ncycgaW4gZG9jICYmIGRvYy5lbWJlZGRpbmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRvYy5lbWJlZGRpbmdzKSB8fCBkb2MuZW1iZWRkaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VFbWJlZGRpbmdJbnZhbGlkRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2RvY3VtZW50JyBpbiBkb2MgJiYgZG9jLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2MuZG9jdW1lbnQgIT09ICdzdHJpbmcnIHx8IGRvYy5kb2N1bWVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlRG9jdW1lbnRJbnZhbGlkRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgYC92ZWN0b3IvMjAyNS0wMy0xNy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgICBib2R5OiBzYWZlU3RyaW5naWZ5KGRvY3VtZW50cyksXG4gICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS52ZWN0b3IudXBzZXJ0JyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBTdHJpbmcoZG9jdW1lbnRzLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YS5kYXRhLm1hcCgobywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZG9jdW1lbnRzW2luZGV4XS5rZXksXG4gICAgICAgICAgICAgICAgICAgIGlkOiBvLmlkLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlUmVzcG9uc2VFcnJvcih7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXMucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5kYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ1BVVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0KG5hbWUsIGtleSkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VOYW1lUmVxdWlyZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnIHx8IGtleS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVmVjdG9yU3RvcmFnZUtleVJlcXVpcmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVybCh0aGlzLiNiYXNlVXJsLCBgL3ZlY3Rvci8yMDI1LTAzLTE3LyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfS8ke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfWApO1xuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDEwXzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuI2FkYXB0ZXIuaW52b2tlKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIHRlbGVtZXRyeToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZ2VudHVpdHkudmVjdG9yLmdldCcsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBleGlzdHM6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXMuZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBleGlzdHM6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlUmVzcG9uc2VFcnJvcih7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXMucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5kYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0dFVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0TWFueShuYW1lLCAuLi5rZXlzKSB7XG4gICAgICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVmVjdG9yU3RvcmFnZU5hbWVSZXF1aXJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnIHx8IGtleS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VLZXlzRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoa2V5cy5tYXAoKGtleSkgPT4gdGhpcy5nZXQobmFtZSwga2V5KSkpO1xuICAgICAgICBjb25zdCByZXN1bHRNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5leGlzdHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRNYXAuc2V0KGtleXNbaW5kZXhdLCByZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0TWFwO1xuICAgIH1cbiAgICBhc3luYyBzZWFyY2gobmFtZSwgcGFyYW1zKSB7XG4gICAgICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVmVjdG9yU3RvcmFnZU5hbWVSZXF1aXJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbXMucXVlcnkgfHwgdHlwZW9mIHBhcmFtcy5xdWVyeSAhPT0gJ3N0cmluZycgfHwgcGFyYW1zLnF1ZXJ5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlUXVlcnlFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMubGltaXQgIT09ICdudW1iZXInIHx8IHBhcmFtcy5saW1pdCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VMaW1pdEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5zaW1pbGFyaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLnNpbWlsYXJpdHkgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNpbWlsYXJpdHkgPCAwIHx8XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNpbWlsYXJpdHkgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VTaW1pbGFyaXR5RXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLm1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLm1ldGFkYXRhICE9PSAnb2JqZWN0JyB8fCBwYXJhbXMubWV0YWRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmVjdG9yU3RvcmFnZU1ldGFkYXRhRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVybCh0aGlzLiNiYXNlVXJsLCBgL3ZlY3Rvci8yMDI1LTAzLTE3L3NlYXJjaC8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHF1ZXJ5OiBwYXJhbXMucXVlcnksXG4gICAgICAgIH07XG4gICAgICAgIGlmIChwYXJhbXMubGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5saW1pdCA9IFN0cmluZyhwYXJhbXMubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMuc2ltaWxhcml0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnNpbWlsYXJpdHkgPSBTdHJpbmcocGFyYW1zLnNpbWlsYXJpdHkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuI2FkYXB0ZXIuaW52b2tlKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBib2R5OiBzYWZlU3RyaW5naWZ5KHBhcmFtcyksXG4gICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS52ZWN0b3Iuc2VhcmNoJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YS5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VSZXNwb25zZUVycm9yKHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5yZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEubWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGF3YWl0IHRvU2VydmljZUV4Y2VwdGlvbignUE9TVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlKG5hbWUsIC4uLmtleXMpIHtcbiAgICAgICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlTmFtZVJlcXVpcmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnIHx8IGtleS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VLZXlzRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC50aW1lb3V0KDMwXzAwMCk7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIGxldCBib2R5O1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsIGAvdmVjdG9yLzIwMjUtMDMtMTcvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleXNbMF0pfWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgYC92ZWN0b3IvMjAyNS0wMy0xNy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKTtcbiAgICAgICAgICAgIGJvZHkgPSBzYWZlU3RyaW5naWZ5KHsga2V5cyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgICAuLi4oYm9keSAmJiB7IGJvZHksIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicgfSksXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LnZlY3Rvci5kZWxldGUnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6IFN0cmluZyhrZXlzLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmVhdCBtaXNzaW5nIHZlY3RvcnMgYXMgbm9uLWZhdGFsIGZvciBpZGVtcG90ZW5jeSwgbGlrZSBnZXQoKS9zZWFyY2goKVxuICAgICAgICBpZiAocmVzLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YS5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VSZXNwb25zZUVycm9yKHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5yZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEubWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGF3YWl0IHRvU2VydmljZUV4Y2VwdGlvbignREVMRVRFJywgdXJsLCByZXMucmVzcG9uc2UpO1xuICAgIH1cbiAgICBhc3luYyBleGlzdHMobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VOYW1lUmVxdWlyZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlYXJjaChuYW1lLCB7IHF1ZXJ5OiAnX2V4aXN0c19jaGVja18nLCBsaW1pdDogMSB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNNYXRjaCA9IGVycm9yLm1lc3NhZ2UubWF0Y2goLyhcXGR7M30pLyk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1c01hdGNoICYmIHN0YXR1c01hdGNoWzFdID09PSAnNDA0Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0U3RhdHMobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFZlY3RvclN0b3JhZ2VOYW1lUmVxdWlyZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKHRoaXMuI2Jhc2VVcmwsIGAvdmVjdG9yLzIwMjUtMDMtMTcvc3RhdHMvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9YCk7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoMTBfMDAwKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS52ZWN0b3IuZ2V0U3RhdHMnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdW06IDAsIGNvdW50OiAwIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgYXdhaXQgdG9TZXJ2aWNlRXhjZXB0aW9uKCdHRVQnLCB1cmwsIHJlcy5yZXNwb25zZSk7XG4gICAgfVxuICAgIGFzeW5jIGdldEFsbFN0YXRzKCkge1xuICAgICAgICBjb25zdCB1cmwgPSBidWlsZFVybCh0aGlzLiNiYXNlVXJsLCAnL3ZlY3Rvci8yMDI1LTAzLTE3L3N0YXRzJyk7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IEFib3J0U2lnbmFsLnRpbWVvdXQoMTBfMDAwKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jYWRhcHRlci5pbnZva2UodXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FnZW50dWl0eS52ZWN0b3IuZ2V0QWxsU3RhdHMnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0dFVCcsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0TmFtZXNwYWNlcygpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCB0aGlzLmdldEFsbFN0YXRzKCk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzdGF0cyk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZU5hbWVzcGFjZShuYW1lKSB7XG4gICAgICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVmVjdG9yU3RvcmFnZU5hbWVSZXF1aXJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gYnVpbGRVcmwodGhpcy4jYmFzZVVybCwgYC92ZWN0b3IvMjAyNS0wMy0xNy8ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX1gKTtcbiAgICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwudGltZW91dCgzMF8wMDApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNhZGFwdGVyLmludm9rZSh1cmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB0ZWxlbWV0cnk6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWdlbnR1aXR5LnZlY3Rvci5kZWxldGVOYW1lc3BhY2UnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBWZWN0b3JTdG9yYWdlUmVzcG9uc2VFcnJvcih7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXMucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5kYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24oJ0RFTEVURScsIHVybCwgcmVzLnJlc3BvbnNlKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZWN0b3IuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmV4cG9ydCBjb25zdCBFdmFsUnVuU3RhcnRFdmVudFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGV2YWwgcnVuIGlkJyksXG4gICAgc2Vzc2lvbklkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgc2Vzc2lvbiBpZCcpLFxuICAgIGV2YWxJZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGV2YWx1YXRpb24gcmVjb3JkIGlkIChldmFsaWRfLi4uKScpLFxuICAgIGV2YWxJZGVudGlmaWVyOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgc3RhYmxlIGV2YWwgaWRlbnRpZmllciAoZXZhbF8uLi4pJyksXG4gICAgb3JnSWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBvcmdhbml6YXRpb24gaWQnKSxcbiAgICBwcm9qZWN0SWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwcm9qZWN0IGlkJyksXG4gICAgZGV2bW9kZTogei5ib29sZWFuKCkuZGVzY3JpYmUoJ3RydWUgaWYgcnVubmluZyBpbiBkZXZtb2RlJyksXG4gICAgZGVwbG95bWVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBkZXBsb3ltZW50IGlkJyksXG4gICAgc3BhbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBzcGFuIGlkJyksXG59KVxuICAgIC5kZXNjcmliZSgnVGhlIGV2ZW50IHRvIHJlY29yZCBhbiBldmFsIHJ1biBzdGFydGVkJyk7XG5leHBvcnQgY29uc3QgRXZhbFJ1bkNvbXBsZXRlRXZlbnRTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBldmFsIHJ1biBpZCcpLFxuICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBvcHRpb25hbCBlcnJvciBtZXNzYWdlIGlmIHRoZSBldmFsIHJ1biBmYWlsZWQnKSxcbiAgICByZXN1bHQ6IHouYW55KCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGV2YWwgcnVuIHJlc3VsdCcpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1RoZSBldmVudCB0byByZWNvcmQgYW4gZXZhbCBydW4gY29tcGxldGVkJyk7XG5leHBvcnQgY29uc3QgRXZhbFJ1blN0YXJ0RXZlbnREZWxheWVkU2NoZW1hID0gei5pbnRlcnNlY3Rpb24oRXZhbFJ1blN0YXJ0RXZlbnRTY2hlbWEsIHoub2JqZWN0KHsgdGltZXN0YW1wOiB6Lm51bWJlcigpLmRlc2NyaWJlKCd0aGUgZXZlbnQgdGltZXN0YW1wIGluIGVwb2NoJykgfSkpO1xuZXhwb3J0IGNvbnN0IEV2YWxSdW5Db21wbGV0ZUV2ZW50RGVsYXllZFNjaGVtYSA9IHouaW50ZXJzZWN0aW9uKEV2YWxSdW5Db21wbGV0ZUV2ZW50U2NoZW1hLCB6Lm9iamVjdCh7IHRpbWVzdGFtcDogei5udW1iZXIoKS5kZXNjcmliZSgndGhlIGV2ZW50IHRpbWVzdGFtcCBpbiBlcG9jaCcpIH0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2YWxydW4uanMubWFwIiwKICAgICIvKipcbiAqIFN0cmluZyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgaWRlbnRpZmllciBjb252ZXJzaW9uXG4gKi9cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBjYW1lbENhc2VcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQgKGNhbiBjb250YWluIGRhc2hlcywgdW5kZXJzY29yZXMsIG9yIHNwYWNlcylcbiAqIEByZXR1cm5zIFRoZSBjYW1lbENhc2UgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIChhbHdheXMgYSB2YWxpZCBKUy9UUyBpZGVudGlmaWVyKVxuICogQGV4YW1wbGVcbiAqIHRvQ2FtZWxDYXNlKCdteS1hZ2VudCcpIC8vICdteUFnZW50J1xuICogdG9DYW1lbENhc2UoJ215X2FnZW50JykgLy8gJ215QWdlbnQnXG4gKiB0b0NhbWVsQ2FzZSgnbXkgYWdlbnQnKSAvLyAnbXlBZ2VudCdcbiAqIHRvQ2FtZWxDYXNlKCdteS0tbXVsdGlwbGUtLWRhc2hlcycpIC8vICdteU11bHRpcGxlRGFzaGVzJ1xuICogdG9DYW1lbENhc2UoJzEyMy1hZ2VudCcpIC8vICdfMTIzQWdlbnQnIChwcmVmaXhlZCB0byBtYWtlIHZhbGlkIGlkZW50aWZpZXIpXG4gKiB0b0NhbWVsQ2FzZSgnMTIzJykgLy8gJ18xMjMnIChwcmVmaXhlZCB0byBtYWtlIHZhbGlkIGlkZW50aWZpZXIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZShzdHIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBzdHJcbiAgICAgICAgLnJlcGxhY2UoL1stX1xcc10rKC4pPy9nLCAoXywgY2hhcikgPT4gKGNoYXIgPyBjaGFyLnRvVXBwZXJDYXNlKCkgOiAnJykpXG4gICAgICAgIC5yZXBsYWNlKC9eKC4pLywgKGNoYXIpID0+IGNoYXIudG9Mb3dlckNhc2UoKSk7XG4gICAgLy8gUHJlZml4IHdpdGggdW5kZXJzY29yZSBpZiByZXN1bHQgc3RhcnRzIHdpdGggYSBkaWdpdCAoaW52YWxpZCBKUy9UUyBpZGVudGlmaWVyKVxuICAgIHJldHVybiAvXlxcZC8udGVzdChyZXN1bHQpID8gYF8ke3Jlc3VsdH1gIDogcmVzdWx0O1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIFBhc2NhbENhc2VcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQgKGNhbiBjb250YWluIGRhc2hlcywgdW5kZXJzY29yZXMsIG9yIHNwYWNlcylcbiAqIEByZXR1cm5zIFRoZSBQYXNjYWxDYXNlIHZlcnNpb24gb2YgdGhlIHN0cmluZ1xuICogQGV4YW1wbGVcbiAqIHRvUGFzY2FsQ2FzZSgnbXktYWdlbnQnKSAvLyAnTXlBZ2VudCdcbiAqIHRvUGFzY2FsQ2FzZSgnbXlfYWdlbnQnKSAvLyAnTXlBZ2VudCdcbiAqIHRvUGFzY2FsQ2FzZSgnbXkgYWdlbnQnKSAvLyAnTXlBZ2VudCdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGFzY2FsQ2FzZShzdHIpIHtcbiAgICBjb25zdCBjYW1lbCA9IHRvQ2FtZWxDYXNlKHN0cik7XG4gICAgcmV0dXJuIGNhbWVsLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2FtZWwuc2xpY2UoMSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJpbmcuanMubWFwIiwKICAgICIvLyBlcnJvci50cyBleHBvcnRzXG5leHBvcnQgeyBSaWNoRXJyb3IsIFN0cnVjdHVyZWRFcnJvciwgaXNTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbi8vIGpzb24udHMgZXhwb3J0c1xuZXhwb3J0IHsgc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vanNvbic7XG5leHBvcnQgeyBTZXJ2aWNlRXhjZXB0aW9uIH0gZnJvbSAnLi9zZXJ2aWNlcy9leGNlcHRpb24nO1xuZXhwb3J0IHsgS2V5VmFsdWVTdG9yYWdlU2VydmljZSwgfSBmcm9tICcuL3NlcnZpY2VzL2tleXZhbHVlJztcbmV4cG9ydCB7IFNlc3Npb25TdGFydEV2ZW50U2NoZW1hLCBTZXNzaW9uQ29tcGxldGVFdmVudFNjaGVtYSwgU2Vzc2lvblN0YXJ0RXZlbnREZWxheWVkU2NoZW1hLCBTZXNzaW9uQ29tcGxldGVFdmVudERlbGF5ZWRTY2hlbWEsIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZXNzaW9uJztcbmV4cG9ydCB7IFN0cmVhbVN0b3JhZ2VTZXJ2aWNlLCB9IGZyb20gJy4vc2VydmljZXMvc3RyZWFtJztcbmV4cG9ydCB7IFZlY3RvclN0b3JhZ2VTZXJ2aWNlLCB9IGZyb20gJy4vc2VydmljZXMvdmVjdG9yJztcbmV4cG9ydCB7IEV2YWxSdW5TdGFydEV2ZW50U2NoZW1hLCBFdmFsUnVuQ29tcGxldGVFdmVudFNjaGVtYSwgRXZhbFJ1blN0YXJ0RXZlbnREZWxheWVkU2NoZW1hLCBFdmFsUnVuQ29tcGxldGVFdmVudERlbGF5ZWRTY2hlbWEsIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldmFscnVuJztcbmV4cG9ydCB7IFNhbmRib3hFcnJvciwgfSBmcm9tICcuL3NlcnZpY2VzL3NhbmRib3gnO1xuZXhwb3J0IHsgYnVpbGRVcmwsIHRvU2VydmljZUV4Y2VwdGlvbiwgdG9QYXlsb2FkLCBmcm9tUmVzcG9uc2UgfSBmcm9tICcuL3NlcnZpY2VzL191dGlsJztcbi8vIHN0cmluZy50cyBleHBvcnRzXG5leHBvcnQgeyB0b0NhbWVsQ2FzZSwgdG9QYXNjYWxDYXNlIH0gZnJvbSAnLi9zdHJpbmcnO1xuLy8gd29ya2JlbmNoIGV4cG9ydHNcbmV4cG9ydCB7IFdvcmtiZW5jaENvbmZpZ0Vycm9yLCBXb3JrYmVuY2hOb3RGb3VuZEVycm9yLCBlbmNvZGVXb3JrYmVuY2hDb25maWcsIGRlY29kZVdvcmtiZW5jaENvbmZpZywgZ2V0V29ya2JlbmNoQ29uZmlnLCB9IGZyb20gJy4vd29ya2JlbmNoLWNvbmZpZyc7XG4vLyBDbGllbnQgY29kZSBtb3ZlZCB0byBAYWdlbnR1aXR5L2Zyb250ZW5kIGZvciBiZXR0ZXIgYnVuZGxlciBjb21wYXRpYmlsaXR5XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2dsb2JhbFRoaXMgPSB2b2lkIDA7XG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGluc1xuZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JyA/IGdsb2JhbFRoaXMgOiBnbG9iYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWxUaGlzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZ2xvYmFsVGhpc1wiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL25vZGVcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuVkVSU0lPTiA9ICcxLjkuMCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0NvbXBhdGlibGUgPSBleHBvcnRzLl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrID0gdm9pZCAwO1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4uL3ZlcnNpb25cIik7XG5jb25zdCByZSA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gdG8gdGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm92aWRlZCBvd25WZXJzaW9uLlxuICpcbiAqIFRoZSByZXR1cm5lZCBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzZW1hbnRpY3M6XG4gKiAtIEV4YWN0IG1hdGNoIGlzIGFsd2F5cyBjb21wYXRpYmxlXG4gKiAtIE1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICogICAgLSAxLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAyLnggcGFja2FnZVxuICogICAgLSAyLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAxLnggcGFja2FnZVxuICogLSBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQVBJIG1vZHVsZSByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgZ2xvYmFsIEFQSSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGlzIEFQSVxuICogICAgLSAxLjMgcGFja2FnZSBtYXkgdXNlIDEuNCBnbG9iYWwgYmVjYXVzZSB0aGUgbGF0ZXIgZ2xvYmFsIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgMS4zIGV4cGVjdHNcbiAqICAgIC0gMS40IHBhY2thZ2UgbWF5IE5PVCB1c2UgMS4zIGdsb2JhbCBiZWNhdXNlIGl0IG1heSB0cnkgdG8gY2FsbCBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZXhpc3Qgb24gMS4zXG4gKiAtIElmIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDAsIHRoZSBtaW5vciB2ZXJzaW9uIGlzIHRyZWF0ZWQgYXMgdGhlIG1ham9yIGFuZCB0aGUgcGF0Y2ggaXMgdHJlYXRlZCBhcyB0aGUgbWlub3JcbiAqIC0gUGF0Y2ggYW5kIGJ1aWxkIHRhZyBkaWZmZXJlbmNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXQgdGhpcyB0aW1lXG4gKlxuICogQHBhcmFtIG93blZlcnNpb24gdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0XG4gKi9cbmZ1bmN0aW9uIF9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrKG93blZlcnNpb24pIHtcbiAgICBjb25zdCBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIGNvbnN0IHJlamVjdGVkVmVyc2lvbnMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgbXlWZXJzaW9uTWF0Y2ggPSBvd25WZXJzaW9uLm1hdGNoKHJlKTtcbiAgICBpZiAoIW15VmVyc2lvbk1hdGNoKSB7XG4gICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgcmV0dXJuIG5vb3BcbiAgICAgICAgcmV0dXJuICgpID0+IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2xvYmFsVmVyc2lvbk1hdGNoID0gZ2xvYmFsVmVyc2lvbi5tYXRjaChyZSk7XG4gICAgICAgIGlmICghZ2xvYmFsVmVyc2lvbk1hdGNoKSB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgcGFyc2Ugb3RoZXIgdmVyc2lvblxuICAgICAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyBub29wXG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnbG9iYWxWZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICAgICAgbWFqb3I6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbMV0sXG4gICAgICAgICAgICBtaW5vcjogK2dsb2JhbFZlcnNpb25NYXRjaFsyXSxcbiAgICAgICAgICAgIHBhdGNoOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICAgICAgcHJlcmVsZWFzZTogZ2xvYmFsVmVyc2lvbk1hdGNoWzRdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBpZiBnbG9iYWxWZXJzaW9uIGhhcyBhIHByZXJlbGVhc2UgdGFnLCB2ZXJzaW9ucyBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICAgICAgaWYgKGdsb2JhbFZlcnNpb25QYXJzZWQucHJlcmVsZWFzZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWpvciB2ZXJzaW9ucyBtdXN0IG1hdGNoXG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yICE9PSBnbG9iYWxWZXJzaW9uUGFyc2VkLm1ham9yKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JlamVjdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5tYWpvciA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWlub3IgJiZcbiAgICAgICAgICAgICAgICBvd25WZXJzaW9uUGFyc2VkLnBhdGNoIDw9IGdsb2JhbFZlcnNpb25QYXJzZWQucGF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2FjY2VwdChnbG9iYWxWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1pbm9yIDw9IGdsb2JhbFZlcnNpb25QYXJzZWQubWlub3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgIH07XG59XG5leHBvcnRzLl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2s7XG4vKipcbiAqIFRlc3QgYW4gQVBJIHZlcnNpb24gdG8gc2VlIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIEFQSS5cbiAqXG4gKiAtIEV4YWN0IG1hdGNoIGlzIGFsd2F5cyBjb21wYXRpYmxlXG4gKiAtIE1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICogICAgLSAxLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAyLnggcGFja2FnZVxuICogICAgLSAyLnggcGFja2FnZSBjYW5ub3QgdXNlIGdsb2JhbCAxLnggcGFja2FnZVxuICogLSBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQVBJIG1vZHVsZSByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgZ2xvYmFsIEFQSSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGlzIEFQSVxuICogICAgLSAxLjMgcGFja2FnZSBtYXkgdXNlIDEuNCBnbG9iYWwgYmVjYXVzZSB0aGUgbGF0ZXIgZ2xvYmFsIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgMS4zIGV4cGVjdHNcbiAqICAgIC0gMS40IHBhY2thZ2UgbWF5IE5PVCB1c2UgMS4zIGdsb2JhbCBiZWNhdXNlIGl0IG1heSB0cnkgdG8gY2FsbCBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZXhpc3Qgb24gMS4zXG4gKiAtIElmIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDAsIHRoZSBtaW5vciB2ZXJzaW9uIGlzIHRyZWF0ZWQgYXMgdGhlIG1ham9yIGFuZCB0aGUgcGF0Y2ggaXMgdHJlYXRlZCBhcyB0aGUgbWlub3JcbiAqIC0gUGF0Y2ggYW5kIGJ1aWxkIHRhZyBkaWZmZXJlbmNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXQgdGhpcyB0aW1lXG4gKlxuICogQHBhcmFtIHZlcnNpb24gdmVyc2lvbiBvZiB0aGUgQVBJIHJlcXVlc3RpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGdsb2JhbCBBUElcbiAqL1xuZXhwb3J0cy5pc0NvbXBhdGlibGUgPSBfbWFrZUNvbXBhdGliaWxpdHlDaGVjayh2ZXJzaW9uXzEuVkVSU0lPTik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW12ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVucmVnaXN0ZXJHbG9iYWwgPSBleHBvcnRzLmdldEdsb2JhbCA9IGV4cG9ydHMucmVnaXN0ZXJHbG9iYWwgPSB2b2lkIDA7XG5jb25zdCBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtXCIpO1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4uL3ZlcnNpb25cIik7XG5jb25zdCBzZW12ZXJfMSA9IHJlcXVpcmUoXCIuL3NlbXZlclwiKTtcbmNvbnN0IG1ham9yID0gdmVyc2lvbl8xLlZFUlNJT04uc3BsaXQoJy4nKVswXTtcbmNvbnN0IEdMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVkgPSBTeW1ib2wuZm9yKGBvcGVudGVsZW1ldHJ5LmpzLmFwaS4ke21ham9yfWApO1xuY29uc3QgX2dsb2JhbCA9IHBsYXRmb3JtXzEuX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSA9IGZhbHNlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGFwaSA9IChfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge1xuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uXzEuVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6ICR7dHlwZX1gKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gdmVyc2lvbl8xLlZFUlNJT04pIHtcbiAgICAgICAgLy8gQWxsIHJlZ2lzdGVyZWQgQVBJcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHZlcnNpb24gZXhhY3RseVxuICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYEBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdiR7YXBpLnZlcnNpb259IGZvciAke3R5cGV9IGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdiR7dmVyc2lvbl8xLlZFUlNJT059YCk7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKGBAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yICR7dHlwZX0gdiR7dmVyc2lvbl8xLlZFUlNJT059LmApO1xuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0cy5yZWdpc3Rlckdsb2JhbCA9IHJlZ2lzdGVyR2xvYmFsO1xuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGdsb2JhbFZlcnNpb24gPSAoX2EgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmVyc2lvbjtcbiAgICBpZiAoIWdsb2JhbFZlcnNpb24gfHwgISgwLCBzZW12ZXJfMS5pc0NvbXBhdGlibGUpKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIChfYiA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlt0eXBlXTtcbn1cbmV4cG9ydHMuZ2V0R2xvYmFsID0gZ2V0R2xvYmFsO1xuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhgQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciAke3R5cGV9IHYke3ZlcnNpb25fMS5WRVJTSU9OfS5gKTtcbiAgICBjb25zdCBhcGkgPSBfZ2xvYmFsW0dMT0JBTF9PUEVOVEVMRU1FVFJZX0FQSV9LRVldO1xuICAgIGlmIChhcGkpIHtcbiAgICAgICAgZGVsZXRlIGFwaVt0eXBlXTtcbiAgICB9XG59XG5leHBvcnRzLnVucmVnaXN0ZXJHbG9iYWwgPSB1bnJlZ2lzdGVyR2xvYmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaWFnQ29tcG9uZW50TG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgZ2xvYmFsX3V0aWxzXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvZ2xvYmFsLXV0aWxzXCIpO1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xuY2xhc3MgRGlhZ0NvbXBvbmVudExvZ2dlciB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy5fbmFtZXNwYWNlID0gcHJvcHMubmFtZXNwYWNlIHx8ICdEaWFnQ29tcG9uZW50TG9nZ2VyJztcbiAgICB9XG4gICAgZGVidWcoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9XG4gICAgZXJyb3IoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2Vycm9yJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9XG4gICAgaW5mbyguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnaW5mbycsIHRoaXMuX25hbWVzcGFjZSwgYXJncyk7XG4gICAgfVxuICAgIHdhcm4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH1cbiAgICB2ZXJib3NlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGxvZ1Byb3h5KCd2ZXJib3NlJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9XG59XG5leHBvcnRzLkRpYWdDb21wb25lbnRMb2dnZXIgPSBEaWFnQ29tcG9uZW50TG9nZ2VyO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIGNvbnN0IGxvZ2dlciA9ICgwLCBnbG9iYWxfdXRpbHNfMS5nZXRHbG9iYWwpKCdkaWFnJyk7XG4gICAgLy8gc2hvcnRjdXQgaWYgbG9nZ2VyIG5vdCBzZXRcbiAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFyZ3MudW5zaGlmdChuYW1lc3BhY2UpO1xuICAgIHJldHVybiBsb2dnZXJbZnVuY05hbWVdKC4uLmFyZ3MpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29tcG9uZW50TG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaWFnTG9nTGV2ZWwgPSB2b2lkIDA7XG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBpbnRlcm5hbCBsb2dnaW5nIGxldmVscyBmb3IgdGhlIGRpYWdub3N0aWMgbG9nZ2VyLCB0aGUgbnVtZXJpYyB2YWx1ZXNcbiAqIG9mIHRoZSBsZXZlbHMgYXJlIGRlZmluZWQgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIHZhbHVlcyBmcm9tIHRoZSBpbml0aWFsIExvZ0xldmVsIHRvIGF2b2lkXG4gKiBjb21wYXRpYmlsaXR5L21pZ3JhdGlvbiBpc3N1ZXMgZm9yIGFueSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFzc3VtZSB0aGUgbnVtZXJpYyBvcmRlcmluZy5cbiAqL1xudmFyIERpYWdMb2dMZXZlbDtcbihmdW5jdGlvbiAoRGlhZ0xvZ0xldmVsKSB7XG4gICAgLyoqIERpYWdub3N0aWMgTG9nZ2luZyBsZXZlbCBzZXR0aW5nIHRvIGRpc2FibGUgYWxsIGxvZ2dpbmcgKGV4Y2VwdCBhbmQgZm9yY2VkIGxvZ3MpICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGFuIGVycm9yIHNjZW5hcmlvICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkVSUk9SXCJdID0gMzBdID0gXCJFUlJPUlwiO1xuICAgIC8qKiBJZGVudGlmaWVzIGEgd2FybmluZyBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJXQVJOXCJdID0gNTBdID0gXCJXQVJOXCI7XG4gICAgLyoqIEdlbmVyYWwgaW5mb3JtYXRpb25hbCBsb2cgbWVzc2FnZSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJJTkZPXCJdID0gNjBdID0gXCJJTkZPXCI7XG4gICAgLyoqIEdlbmVyYWwgZGVidWcgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiREVCVUdcIl0gPSA3MF0gPSBcIkRFQlVHXCI7XG4gICAgLyoqXG4gICAgICogRGV0YWlsZWQgdHJhY2UgbGV2ZWwgbG9nZ2luZyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCwgc2hvdWxkIG9ubHkgYmUgc2V0XG4gICAgICogaW4gYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAgICAgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiVkVSQk9TRVwiXSA9IDgwXSA9IFwiVkVSQk9TRVwiO1xuICAgIC8qKiBVc2VkIHRvIHNldCB0aGUgbG9nZ2luZyBsZXZlbCB0byBpbmNsdWRlIGFsbCBsb2dnaW5nICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkFMTFwiXSA9IDk5OTldID0gXCJBTExcIjtcbn0pKERpYWdMb2dMZXZlbCA9IGV4cG9ydHMuRGlhZ0xvZ0xldmVsIHx8IChleHBvcnRzLkRpYWdMb2dMZXZlbCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcihtYXhMZXZlbCwgbG9nZ2VyKSB7XG4gICAgaWYgKG1heExldmVsIDwgdHlwZXNfMS5EaWFnTG9nTGV2ZWwuTk9ORSkge1xuICAgICAgICBtYXhMZXZlbCA9IHR5cGVzXzEuRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gdHlwZXNfMS5EaWFnTG9nTGV2ZWwuQUxMKSB7XG4gICAgICAgIG1heExldmVsID0gdHlwZXNfMS5EaWFnTG9nTGV2ZWwuQUxMO1xuICAgIH1cbiAgICAvLyBJbiBjYXNlIHRoZSBsb2dnZXIgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICBsb2dnZXIgPSBsb2dnZXIgfHwge307XG4gICAgZnVuY3Rpb24gX2ZpbHRlckZ1bmMoZnVuY05hbWUsIHRoZUxldmVsKSB7XG4gICAgICAgIGNvbnN0IHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgdHlwZXNfMS5EaWFnTG9nTGV2ZWwuRVJST1IpLFxuICAgICAgICB3YXJuOiBfZmlsdGVyRnVuYygnd2FybicsIHR5cGVzXzEuRGlhZ0xvZ0xldmVsLldBUk4pLFxuICAgICAgICBpbmZvOiBfZmlsdGVyRnVuYygnaW5mbycsIHR5cGVzXzEuRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgdHlwZXNfMS5EaWFnTG9nTGV2ZWwuREVCVUcpLFxuICAgICAgICB2ZXJib3NlOiBfZmlsdGVyRnVuYygndmVyYm9zZScsIHR5cGVzXzEuRGlhZ0xvZ0xldmVsLlZFUkJPU0UpLFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ0xldmVsTG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EaWFnQVBJID0gdm9pZCAwO1xuY29uc3QgQ29tcG9uZW50TG9nZ2VyXzEgPSByZXF1aXJlKFwiLi4vZGlhZy9Db21wb25lbnRMb2dnZXJcIik7XG5jb25zdCBsb2dMZXZlbExvZ2dlcl8xID0gcmVxdWlyZShcIi4uL2RpYWcvaW50ZXJuYWwvbG9nTGV2ZWxMb2dnZXJcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL2RpYWcvdHlwZXNcIik7XG5jb25zdCBnbG9iYWxfdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC9nbG9iYWwtdXRpbHNcIik7XG5jb25zdCBBUElfTkFNRSA9ICdkaWFnJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBpbnRlcm5hbFxuICogZGlhZ25vc3RpYyBBUElcbiAqL1xuY2xhc3MgRGlhZ0FQSSB7XG4gICAgLyoqXG4gICAgICogUHJpdmF0ZSBpbnRlcm5hbCBjb25zdHJ1Y3RvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGZ1bmN0aW9uIF9sb2dQcm94eShmdW5jTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gKDAsIGdsb2JhbF91dGlsc18xLmdldEdsb2JhbCkoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0oLi4uYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzaW5nIHNlbGYgbG9jYWwgdmFyaWFibGUgZm9yIG1pbmlmaWNhdGlvbiBwdXJwb3NlcyBhcyAndGhpcycgY2Fubm90IGJlIG1pbmlmaWVkXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAvLyBEaWFnQVBJIHNwZWNpZmljIGZ1bmN0aW9uc1xuICAgICAgICBjb25zdCBzZXRMb2dnZXIgPSAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IHR5cGVzXzEuRGlhZ0xvZ0xldmVsLklORk8gfSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAobG9nZ2VyID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAvLyBMb2dnaW5nIHRvIHRoZSBjb25zb2xlIG1pZ2h0IGJyZWFrIHRoZSB1c2VyIGFwcGxpY2F0aW9uLlxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBsb2cgdG8gc2VsZi4gSWYgYSBsb2dnZXIgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBpdCB3aWxsIHJlY2VpdmUgdGhlIGxvZy5cbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2xkTG9nZ2VyID0gKDAsIGdsb2JhbF91dGlsc18xLmdldEdsb2JhbCkoJ2RpYWcnKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvZ2dlciA9ICgwLCBsb2dMZXZlbExvZ2dlcl8xLmNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcikoKF9iID0gb3B0aW9uc09yTG9nTGV2ZWwubG9nTGV2ZWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHR5cGVzXzEuRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gKF9jID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICc8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+JztcbiAgICAgICAgICAgICAgICBvbGRMb2dnZXIud2FybihgQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tICR7c3RhY2t9YCk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oYEN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSAke3N0YWNrfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICgwLCBnbG9iYWxfdXRpbHNfMS5yZWdpc3Rlckdsb2JhbCkoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gKCkgPT4ge1xuICAgICAgICAgICAgKDAsIGdsb2JhbF91dGlsc18xLnVucmVnaXN0ZXJHbG9iYWwpKEFQSV9OQU1FLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnRMb2dnZXJfMS5EaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgc3RhdGljIGluc3RhbmNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBEaWFnQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cbn1cbmV4cG9ydHMuRGlhZ0FQSSA9IERpYWdBUEk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaWFnLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYWdnYWdlSW1wbCA9IHZvaWQgMDtcbmNsYXNzIEJhZ2dhZ2VJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihlbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuX2VudHJpZXMgPSBlbnRyaWVzID8gbmV3IE1hcChlbnRyaWVzKSA6IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgZ2V0RW50cnkoa2V5KSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5fZW50cmllcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZW50cnkpO1xuICAgIH1cbiAgICBnZXRBbGxFbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9lbnRyaWVzLmVudHJpZXMoKSkubWFwKChbaywgdl0pID0+IFtrLCB2XSk7XG4gICAgfVxuICAgIHNldEVudHJ5KGtleSwgZW50cnkpIHtcbiAgICAgICAgY29uc3QgbmV3QmFnZ2FnZSA9IG5ldyBCYWdnYWdlSW1wbCh0aGlzLl9lbnRyaWVzKTtcbiAgICAgICAgbmV3QmFnZ2FnZS5fZW50cmllcy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICAgIHJldHVybiBuZXdCYWdnYWdlO1xuICAgIH1cbiAgICByZW1vdmVFbnRyeShrZXkpIHtcbiAgICAgICAgY29uc3QgbmV3QmFnZ2FnZSA9IG5ldyBCYWdnYWdlSW1wbCh0aGlzLl9lbnRyaWVzKTtcbiAgICAgICAgbmV3QmFnZ2FnZS5fZW50cmllcy5kZWxldGUoa2V5KTtcbiAgICAgICAgcmV0dXJuIG5ld0JhZ2dhZ2U7XG4gICAgfVxuICAgIHJlbW92ZUVudHJpZXMoLi4ua2V5cykge1xuICAgICAgICBjb25zdCBuZXdCYWdnYWdlID0gbmV3IEJhZ2dhZ2VJbXBsKHRoaXMuX2VudHJpZXMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBuZXdCYWdnYWdlLl9lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdCYWdnYWdlO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCYWdnYWdlSW1wbCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFnZ2FnZUltcGwgPSBCYWdnYWdlSW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhZ2dhZ2UtaW1wbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmFnZ2FnZUVudHJ5TWV0YWRhdGFTeW1ib2wgPSB2b2lkIDA7XG4vKipcbiAqIFN5bWJvbCB1c2VkIHRvIG1ha2UgQmFnZ2FnZUVudHJ5TWV0YWRhdGEgYW4gb3BhcXVlIHR5cGVcbiAqL1xuZXhwb3J0cy5iYWdnYWdlRW50cnlNZXRhZGF0YVN5bWJvbCA9IFN5bWJvbCgnQmFnZ2FnZUVudHJ5TWV0YWRhdGEnKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN5bWJvbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nID0gZXhwb3J0cy5jcmVhdGVCYWdnYWdlID0gdm9pZCAwO1xuY29uc3QgZGlhZ18xID0gcmVxdWlyZShcIi4uL2FwaS9kaWFnXCIpO1xuY29uc3QgYmFnZ2FnZV9pbXBsXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9iYWdnYWdlLWltcGxcIik7XG5jb25zdCBzeW1ib2xfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL3N5bWJvbFwiKTtcbmNvbnN0IGRpYWcgPSBkaWFnXzEuRGlhZ0FQSS5pbnN0YW5jZSgpO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgQmFnZ2FnZSB3aXRoIG9wdGlvbmFsIGVudHJpZXNcbiAqXG4gKiBAcGFyYW0gZW50cmllcyBBbiBhcnJheSBvZiBiYWdnYWdlIGVudHJpZXMgdGhlIG5ldyBiYWdnYWdlIHNob3VsZCBjb250YWluXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhZ2dhZ2UoZW50cmllcyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBiYWdnYWdlX2ltcGxfMS5CYWdnYWdlSW1wbChuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSk7XG59XG5leHBvcnRzLmNyZWF0ZUJhZ2dhZ2UgPSBjcmVhdGVCYWdnYWdlO1xuLyoqXG4gKiBDcmVhdGUgYSBzZXJpYWxpemFibGUgQmFnZ2FnZUVudHJ5TWV0YWRhdGEgb2JqZWN0IGZyb20gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciBzdHJpbmcgbWV0YWRhdGEuIEZvcm1hdCBpcyBjdXJyZW50bHkgbm90IGRlZmluZWQgYnkgdGhlIHNwZWMgYW5kIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcuXG4gKlxuICovXG5mdW5jdGlvbiBiYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmcoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRpYWcuZXJyb3IoYENhbm5vdCBjcmVhdGUgYmFnZ2FnZSBtZXRhZGF0YSBmcm9tIHVua25vd24gdHlwZTogJHt0eXBlb2Ygc3RyfWApO1xuICAgICAgICBzdHIgPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX19UWVBFX186IHN5bWJvbF8xLmJhZ2dhZ2VFbnRyeU1ldGFkYXRhU3ltYm9sLFxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nID0gYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJPT1RfQ09OVEVYVCA9IGV4cG9ydHMuY3JlYXRlQ29udGV4dEtleSA9IHZvaWQgMDtcbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbmV4cG9ydHMuY3JlYXRlQ29udGV4dEtleSA9IGNyZWF0ZUNvbnRleHRLZXk7XG5jbGFzcyBCYXNlQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgbmV3IGNvbnRleHQgd2hpY2ggaW5oZXJpdHMgdmFsdWVzIGZyb20gYW4gb3B0aW9uYWwgcGFyZW50IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Q29udGV4dCBhIGNvbnRleHQgZnJvbSB3aGljaCB0byBpbmhlcml0IHZhbHVlc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudENvbnRleHQpIHtcbiAgICAgICAgLy8gZm9yIG1pbmlmaWNhdGlvblxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IChrZXkpID0+IHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpO1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuZGVsZXRlVmFsdWUgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqIFRoZSByb290IGNvbnRleHQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXJlbnQgY29udGV4dCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb250ZXh0ICovXG5leHBvcnRzLlJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGlhZ0NvbnNvbGVMb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBjb25zb2xlTWFwID0gW1xuICAgIHsgbjogJ2Vycm9yJywgYzogJ2Vycm9yJyB9LFxuICAgIHsgbjogJ3dhcm4nLCBjOiAnd2FybicgfSxcbiAgICB7IG46ICdpbmZvJywgYzogJ2luZm8nIH0sXG4gICAgeyBuOiAnZGVidWcnLCBjOiAnZGVidWcnIH0sXG4gICAgeyBuOiAndmVyYm9zZScsIGM6ICd0cmFjZScgfSxcbl07XG4vKipcbiAqIEEgc2ltcGxlIEltbXV0YWJsZSBDb25zb2xlIGJhc2VkIGRpYWdub3N0aWMgbG9nZ2VyIHdoaWNoIHdpbGwgb3V0cHV0IGFueSBtZXNzYWdlcyB0byB0aGUgQ29uc29sZS5cbiAqIElmIHlvdSB3YW50IHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgbG9nZ2luZyB0byBhIHNwZWNpZmljIGxldmVsIG9yIGxvd2VyIHVzZSB0aGVcbiAqIHtAbGluayBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXJ9XG4gKi9cbmNsYXNzIERpYWdDb25zb2xlTG9nZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZnVuY3Rpb24gX2NvbnNvbGVGdW5jKGZ1bmNOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc29sZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTb21lIGVudmlyb25tZW50cyBvbmx5IGV4cG9zZSB0aGUgY29uc29sZSB3aGVuIHRoZSBGMTIgZGV2ZWxvcGVyIGNvbnNvbGUgaXMgb3BlblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICBsZXQgdGhlRnVuYyA9IGNvbnNvbGVbZnVuY05hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhbGwgZW52aXJvbm1lbnRzIHN1cHBvcnQgYWxsIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZUZ1bmMgPSBjb25zb2xlLmxvZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBPbmUgbGFzdCBmaW5hbCBjaGVja1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnNvbGVNYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXNbY29uc29sZU1hcFtpXS5uXSA9IF9jb25zb2xlRnVuYyhjb25zb2xlTWFwW2ldLmMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5EaWFnQ29uc29sZUxvZ2dlciA9IERpYWdDb25zb2xlTG9nZ2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZUxvZ2dlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlTm9vcE1ldGVyID0gZXhwb3J0cy5OT09QX09CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSX01FVFJJQyA9IGV4cG9ydHMuTk9PUF9PQlNFUlZBQkxFX0dBVUdFX01FVFJJQyA9IGV4cG9ydHMuTk9PUF9PQlNFUlZBQkxFX0NPVU5URVJfTUVUUklDID0gZXhwb3J0cy5OT09QX1VQX0RPV05fQ09VTlRFUl9NRVRSSUMgPSBleHBvcnRzLk5PT1BfSElTVE9HUkFNX01FVFJJQyA9IGV4cG9ydHMuTk9PUF9HQVVHRV9NRVRSSUMgPSBleHBvcnRzLk5PT1BfQ09VTlRFUl9NRVRSSUMgPSBleHBvcnRzLk5PT1BfTUVURVIgPSBleHBvcnRzLk5vb3BPYnNlcnZhYmxlVXBEb3duQ291bnRlck1ldHJpYyA9IGV4cG9ydHMuTm9vcE9ic2VydmFibGVHYXVnZU1ldHJpYyA9IGV4cG9ydHMuTm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljID0gZXhwb3J0cy5Ob29wT2JzZXJ2YWJsZU1ldHJpYyA9IGV4cG9ydHMuTm9vcEhpc3RvZ3JhbU1ldHJpYyA9IGV4cG9ydHMuTm9vcEdhdWdlTWV0cmljID0gZXhwb3J0cy5Ob29wVXBEb3duQ291bnRlck1ldHJpYyA9IGV4cG9ydHMuTm9vcENvdW50ZXJNZXRyaWMgPSBleHBvcnRzLk5vb3BNZXRyaWMgPSBleHBvcnRzLk5vb3BNZXRlciA9IHZvaWQgMDtcbi8qKlxuICogTm9vcE1ldGVyIGlzIGEgbm9vcCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIE1ldGVyfSBpbnRlcmZhY2UuIEl0IHJldXNlc1xuICogY29uc3RhbnQgTm9vcE1ldHJpY3MgZm9yIGFsbCBvZiBpdHMgbWV0aG9kcy5cbiAqL1xuY2xhc3MgTm9vcE1ldGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIC8qKlxuICAgICAqIEBzZWUge0BsaW5rIE1ldGVyLmNyZWF0ZUdhdWdlfVxuICAgICAqL1xuICAgIGNyZWF0ZUdhdWdlKF9uYW1lLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5OT09QX0dBVUdFX01FVFJJQztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHNlZSB7QGxpbmsgTWV0ZXIuY3JlYXRlSGlzdG9ncmFtfVxuICAgICAqL1xuICAgIGNyZWF0ZUhpc3RvZ3JhbShfbmFtZSwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuTk9PUF9ISVNUT0dSQU1fTUVUUklDO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5jcmVhdGVDb3VudGVyfVxuICAgICAqL1xuICAgIGNyZWF0ZUNvdW50ZXIoX25hbWUsIF9vcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLk5PT1BfQ09VTlRFUl9NRVRSSUM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzZWUge0BsaW5rIE1ldGVyLmNyZWF0ZVVwRG93bkNvdW50ZXJ9XG4gICAgICovXG4gICAgY3JlYXRlVXBEb3duQ291bnRlcihfbmFtZSwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuTk9PUF9VUF9ET1dOX0NPVU5URVJfTUVUUklDO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2V9XG4gICAgICovXG4gICAgY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKF9uYW1lLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5OT09QX09CU0VSVkFCTEVfR0FVR0VfTUVUUklDO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5jcmVhdGVPYnNlcnZhYmxlQ291bnRlcn1cbiAgICAgKi9cbiAgICBjcmVhdGVPYnNlcnZhYmxlQ291bnRlcihfbmFtZSwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuTk9PUF9PQlNFUlZBQkxFX0NPVU5URVJfTUVUUklDO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5jcmVhdGVPYnNlcnZhYmxlVXBEb3duQ291bnRlcn1cbiAgICAgKi9cbiAgICBjcmVhdGVPYnNlcnZhYmxlVXBEb3duQ291bnRlcihfbmFtZSwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuTk9PUF9PQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUl9NRVRSSUM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzZWUge0BsaW5rIE1ldGVyLmFkZEJhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrfVxuICAgICAqL1xuICAgIGFkZEJhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrKF9jYWxsYmFjaywgX29ic2VydmFibGVzKSB7IH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5yZW1vdmVCYXRjaE9ic2VydmFibGVDYWxsYmFja31cbiAgICAgKi9cbiAgICByZW1vdmVCYXRjaE9ic2VydmFibGVDYWxsYmFjayhfY2FsbGJhY2spIHsgfVxufVxuZXhwb3J0cy5Ob29wTWV0ZXIgPSBOb29wTWV0ZXI7XG5jbGFzcyBOb29wTWV0cmljIHtcbn1cbmV4cG9ydHMuTm9vcE1ldHJpYyA9IE5vb3BNZXRyaWM7XG5jbGFzcyBOb29wQ291bnRlck1ldHJpYyBleHRlbmRzIE5vb3BNZXRyaWMge1xuICAgIGFkZChfdmFsdWUsIF9hdHRyaWJ1dGVzKSB7IH1cbn1cbmV4cG9ydHMuTm9vcENvdW50ZXJNZXRyaWMgPSBOb29wQ291bnRlck1ldHJpYztcbmNsYXNzIE5vb3BVcERvd25Db3VudGVyTWV0cmljIGV4dGVuZHMgTm9vcE1ldHJpYyB7XG4gICAgYWRkKF92YWx1ZSwgX2F0dHJpYnV0ZXMpIHsgfVxufVxuZXhwb3J0cy5Ob29wVXBEb3duQ291bnRlck1ldHJpYyA9IE5vb3BVcERvd25Db3VudGVyTWV0cmljO1xuY2xhc3MgTm9vcEdhdWdlTWV0cmljIGV4dGVuZHMgTm9vcE1ldHJpYyB7XG4gICAgcmVjb3JkKF92YWx1ZSwgX2F0dHJpYnV0ZXMpIHsgfVxufVxuZXhwb3J0cy5Ob29wR2F1Z2VNZXRyaWMgPSBOb29wR2F1Z2VNZXRyaWM7XG5jbGFzcyBOb29wSGlzdG9ncmFtTWV0cmljIGV4dGVuZHMgTm9vcE1ldHJpYyB7XG4gICAgcmVjb3JkKF92YWx1ZSwgX2F0dHJpYnV0ZXMpIHsgfVxufVxuZXhwb3J0cy5Ob29wSGlzdG9ncmFtTWV0cmljID0gTm9vcEhpc3RvZ3JhbU1ldHJpYztcbmNsYXNzIE5vb3BPYnNlcnZhYmxlTWV0cmljIHtcbiAgICBhZGRDYWxsYmFjayhfY2FsbGJhY2spIHsgfVxuICAgIHJlbW92ZUNhbGxiYWNrKF9jYWxsYmFjaykgeyB9XG59XG5leHBvcnRzLk5vb3BPYnNlcnZhYmxlTWV0cmljID0gTm9vcE9ic2VydmFibGVNZXRyaWM7XG5jbGFzcyBOb29wT2JzZXJ2YWJsZUNvdW50ZXJNZXRyaWMgZXh0ZW5kcyBOb29wT2JzZXJ2YWJsZU1ldHJpYyB7XG59XG5leHBvcnRzLk5vb3BPYnNlcnZhYmxlQ291bnRlck1ldHJpYyA9IE5vb3BPYnNlcnZhYmxlQ291bnRlck1ldHJpYztcbmNsYXNzIE5vb3BPYnNlcnZhYmxlR2F1Z2VNZXRyaWMgZXh0ZW5kcyBOb29wT2JzZXJ2YWJsZU1ldHJpYyB7XG59XG5leHBvcnRzLk5vb3BPYnNlcnZhYmxlR2F1Z2VNZXRyaWMgPSBOb29wT2JzZXJ2YWJsZUdhdWdlTWV0cmljO1xuY2xhc3MgTm9vcE9ic2VydmFibGVVcERvd25Db3VudGVyTWV0cmljIGV4dGVuZHMgTm9vcE9ic2VydmFibGVNZXRyaWMge1xufVxuZXhwb3J0cy5Ob29wT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJNZXRyaWMgPSBOb29wT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJNZXRyaWM7XG5leHBvcnRzLk5PT1BfTUVURVIgPSBuZXcgTm9vcE1ldGVyKCk7XG4vLyBTeW5jaHJvbm91cyBpbnN0cnVtZW50c1xuZXhwb3J0cy5OT09QX0NPVU5URVJfTUVUUklDID0gbmV3IE5vb3BDb3VudGVyTWV0cmljKCk7XG5leHBvcnRzLk5PT1BfR0FVR0VfTUVUUklDID0gbmV3IE5vb3BHYXVnZU1ldHJpYygpO1xuZXhwb3J0cy5OT09QX0hJU1RPR1JBTV9NRVRSSUMgPSBuZXcgTm9vcEhpc3RvZ3JhbU1ldHJpYygpO1xuZXhwb3J0cy5OT09QX1VQX0RPV05fQ09VTlRFUl9NRVRSSUMgPSBuZXcgTm9vcFVwRG93bkNvdW50ZXJNZXRyaWMoKTtcbi8vIEFzeW5jaHJvbm91cyBpbnN0cnVtZW50c1xuZXhwb3J0cy5OT09QX09CU0VSVkFCTEVfQ09VTlRFUl9NRVRSSUMgPSBuZXcgTm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljKCk7XG5leHBvcnRzLk5PT1BfT0JTRVJWQUJMRV9HQVVHRV9NRVRSSUMgPSBuZXcgTm9vcE9ic2VydmFibGVHYXVnZU1ldHJpYygpO1xuZXhwb3J0cy5OT09QX09CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSX01FVFJJQyA9IG5ldyBOb29wT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJNZXRyaWMoKTtcbi8qKlxuICogQ3JlYXRlIGEgbm8tb3AgTWV0ZXJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9vcE1ldGVyKCkge1xuICAgIHJldHVybiBleHBvcnRzLk5PT1BfTUVURVI7XG59XG5leHBvcnRzLmNyZWF0ZU5vb3BNZXRlciA9IGNyZWF0ZU5vb3BNZXRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BNZXRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVmFsdWVUeXBlID0gdm9pZCAwO1xuLyoqIFRoZSBUeXBlIG9mIHZhbHVlLiBJdCBkZXNjcmliZXMgaG93IHRoZSBkYXRhIGlzIHJlcG9ydGVkLiAqL1xudmFyIFZhbHVlVHlwZTtcbihmdW5jdGlvbiAoVmFsdWVUeXBlKSB7XG4gICAgVmFsdWVUeXBlW1ZhbHVlVHlwZVtcIklOVFwiXSA9IDBdID0gXCJJTlRcIjtcbiAgICBWYWx1ZVR5cGVbVmFsdWVUeXBlW1wiRE9VQkxFXCJdID0gMV0gPSBcIkRPVUJMRVwiO1xufSkoVmFsdWVUeXBlID0gZXhwb3J0cy5WYWx1ZVR5cGUgfHwgKGV4cG9ydHMuVmFsdWVUeXBlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldHJpYy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdFRleHRNYXBTZXR0ZXIgPSBleHBvcnRzLmRlZmF1bHRUZXh0TWFwR2V0dGVyID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0VGV4dE1hcEdldHRlciA9IHtcbiAgICBnZXQoY2Fycmllciwga2V5KSB7XG4gICAgICAgIGlmIChjYXJyaWVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcnJpZXJba2V5XTtcbiAgICB9LFxuICAgIGtleXMoY2Fycmllcikge1xuICAgICAgICBpZiAoY2FycmllciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNhcnJpZXIpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0VGV4dE1hcFNldHRlciA9IHtcbiAgICBzZXQoY2Fycmllciwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoY2FycmllciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FycmllcltrZXldID0gdmFsdWU7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UZXh0TWFwUHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9vcENvbnRleHRNYW5hZ2VyID0gdm9pZCAwO1xuY29uc3QgY29udGV4dF8xID0gcmVxdWlyZShcIi4vY29udGV4dFwiKTtcbmNsYXNzIE5vb3BDb250ZXh0TWFuYWdlciB7XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gY29udGV4dF8xLlJPT1RfQ09OVEVYVDtcbiAgICB9XG4gICAgd2l0aChfY29udGV4dCwgZm4sIHRoaXNBcmcsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpc0FyZywgLi4uYXJncyk7XG4gICAgfVxuICAgIGJpbmQoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5leHBvcnRzLk5vb3BDb250ZXh0TWFuYWdlciA9IE5vb3BDb250ZXh0TWFuYWdlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BDb250ZXh0TWFuYWdlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29udGV4dEFQSSA9IHZvaWQgMDtcbmNvbnN0IE5vb3BDb250ZXh0TWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL2NvbnRleHQvTm9vcENvbnRleHRNYW5hZ2VyXCIpO1xuY29uc3QgZ2xvYmFsX3V0aWxzXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvZ2xvYmFsLXV0aWxzXCIpO1xuY29uc3QgZGlhZ18xID0gcmVxdWlyZShcIi4vZGlhZ1wiKTtcbmNvbnN0IEFQSV9OQU1FID0gJ2NvbnRleHQnO1xuY29uc3QgTk9PUF9DT05URVhUX01BTkFHRVIgPSBuZXcgTm9vcENvbnRleHRNYW5hZ2VyXzEuTm9vcENvbnRleHRNYW5hZ2VyKCk7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgQ29udGV4dCBBUElcbiAqL1xuY2xhc3MgQ29udGV4dEFQSSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IENvbnRleHRBUEkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgY3VycmVudCBjb250ZXh0IG1hbmFnZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IG1hbmFnZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIoY29udGV4dE1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBnbG9iYWxfdXRpbHNfMS5yZWdpc3Rlckdsb2JhbCkoQVBJX05BTUUsIGNvbnRleHRNYW5hZ2VyLCBkaWFnXzEuRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHRcbiAgICAgKi9cbiAgICBhY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgd2l0aChjb250ZXh0LCBmbiwgdGhpc0FyZywgLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS53aXRoKGNvbnRleHQsIGZuLCB0aGlzQXJnLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmluZCBhIGNvbnRleHQgdG8gYSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiaW5kIHRvIHRoZSBldmVudCBlbWl0dGVyIG9yIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHRhcmdldCBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyIHRvIGJpbmRcbiAgICAgKi9cbiAgICBiaW5kKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKGNvbnRleHQsIHRhcmdldCk7XG4gICAgfVxuICAgIF9nZXRDb250ZXh0TWFuYWdlcigpIHtcbiAgICAgICAgcmV0dXJuICgwLCBnbG9iYWxfdXRpbHNfMS5nZXRHbG9iYWwpKEFQSV9OQU1FKSB8fCBOT09QX0NPTlRFWFRfTUFOQUdFUjtcbiAgICB9XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICAoMCwgZ2xvYmFsX3V0aWxzXzEudW5yZWdpc3Rlckdsb2JhbCkoQVBJX05BTUUsIGRpYWdfMS5EaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29udGV4dEFQSSA9IENvbnRleHRBUEk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250ZXh0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRyYWNlRmxhZ3MgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFRyYWNlRmxhZ3M7XG4oZnVuY3Rpb24gKFRyYWNlRmxhZ3MpIHtcbiAgICAvKiogUmVwcmVzZW50cyBubyBmbGFnIHNldC4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogQml0IHRvIHJlcHJlc2VudCB3aGV0aGVyIHRyYWNlIGlzIHNhbXBsZWQgaW4gdHJhY2UgZmxhZ3MuICovXG4gICAgVHJhY2VGbGFnc1tUcmFjZUZsYWdzW1wiU0FNUExFRFwiXSA9IDFdID0gXCJTQU1QTEVEXCI7XG59KShUcmFjZUZsYWdzID0gZXhwb3J0cy5UcmFjZUZsYWdzIHx8IChleHBvcnRzLlRyYWNlRmxhZ3MgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2VfZmxhZ3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLklOVkFMSURfU1BBTl9DT05URVhUID0gZXhwb3J0cy5JTlZBTElEX1RSQUNFSUQgPSBleHBvcnRzLklOVkFMSURfU1BBTklEID0gdm9pZCAwO1xuY29uc3QgdHJhY2VfZmxhZ3NfMSA9IHJlcXVpcmUoXCIuL3RyYWNlX2ZsYWdzXCIpO1xuZXhwb3J0cy5JTlZBTElEX1NQQU5JRCA9ICcwMDAwMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuSU5WQUxJRF9UUkFDRUlEID0gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogZXhwb3J0cy5JTlZBTElEX1RSQUNFSUQsXG4gICAgc3BhbklkOiBleHBvcnRzLklOVkFMSURfU1BBTklELFxuICAgIHRyYWNlRmxhZ3M6IHRyYWNlX2ZsYWdzXzEuVHJhY2VGbGFncy5OT05FLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludmFsaWQtc3Bhbi1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5vblJlY29yZGluZ1NwYW4gPSB2b2lkIDA7XG5jb25zdCBpbnZhbGlkX3NwYW5fY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9pbnZhbGlkLXNwYW4tY29uc3RhbnRzXCIpO1xuLyoqXG4gKiBUaGUgTm9uUmVjb3JkaW5nU3BhbiBpcyB0aGUgZGVmYXVsdCB7QGxpbmsgU3Bhbn0gdGhhdCBpcyB1c2VkIHdoZW4gbm8gU3BhblxuICogaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlLiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AgaW5jbHVkaW5nIGNvbnRleHRcbiAqIHByb3BhZ2F0aW9uLlxuICovXG5jbGFzcyBOb25SZWNvcmRpbmdTcGFuIHtcbiAgICBjb25zdHJ1Y3Rvcihfc3BhbkNvbnRleHQgPSBpbnZhbGlkX3NwYW5fY29uc3RhbnRzXzEuSU5WQUxJRF9TUEFOX0NPTlRFWFQpIHtcbiAgICAgICAgdGhpcy5fc3BhbkNvbnRleHQgPSBfc3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8vIFJldHVybnMgYSBTcGFuQ29udGV4dC5cbiAgICBzcGFuQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIHNldEF0dHJpYnV0ZShfa2V5LCBfdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgc2V0QXR0cmlidXRlcyhfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBhZGRFdmVudChfbmFtZSwgX2F0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZExpbmsoX2xpbmspIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZExpbmtzKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICBzZXRTdGF0dXMoX3N0YXR1cykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICB1cGRhdGVOYW1lKF9uYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIGVuZChfZW5kVGltZSkgeyB9XG4gICAgLy8gaXNSZWNvcmRpbmcgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIE5vblJlY29yZGluZ1NwYW4uXG4gICAgaXNSZWNvcmRpbmcoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmdcbiAgICByZWNvcmRFeGNlcHRpb24oX2V4Y2VwdGlvbiwgX3RpbWUpIHsgfVxufVxuZXhwb3J0cy5Ob25SZWNvcmRpbmdTcGFuID0gTm9uUmVjb3JkaW5nU3Bhbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vblJlY29yZGluZ1NwYW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNwYW5Db250ZXh0ID0gZXhwb3J0cy5zZXRTcGFuQ29udGV4dCA9IGV4cG9ydHMuZGVsZXRlU3BhbiA9IGV4cG9ydHMuc2V0U3BhbiA9IGV4cG9ydHMuZ2V0QWN0aXZlU3BhbiA9IGV4cG9ydHMuZ2V0U3BhbiA9IHZvaWQgMDtcbmNvbnN0IGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuLi9jb250ZXh0L2NvbnRleHRcIik7XG5jb25zdCBOb25SZWNvcmRpbmdTcGFuXzEgPSByZXF1aXJlKFwiLi9Ob25SZWNvcmRpbmdTcGFuXCIpO1xuY29uc3QgY29udGV4dF8yID0gcmVxdWlyZShcIi4uL2FwaS9jb250ZXh0XCIpO1xuLyoqXG4gKiBzcGFuIGtleVxuICovXG5jb25zdCBTUEFOX0tFWSA9ICgwLCBjb250ZXh0XzEuY3JlYXRlQ29udGV4dEtleSkoJ09wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTicpO1xuLyoqXG4gKiBSZXR1cm4gdGhlIHNwYW4gaWYgb25lIGV4aXN0c1xuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHNwYW4gZnJvbVxuICovXG5mdW5jdGlvbiBnZXRTcGFuKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZShTUEFOX0tFWSkgfHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5nZXRTcGFuID0gZ2V0U3Bhbjtcbi8qKlxuICogR2V0cyB0aGUgc3BhbiBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQsIGlmIG9uZSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gICAgcmV0dXJuIGdldFNwYW4oY29udGV4dF8yLkNvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5leHBvcnRzLmdldEFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuO1xuLyoqXG4gKiBTZXQgdGhlIHNwYW4gb24gYSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byB1c2UgYXMgcGFyZW50XG4gKiBAcGFyYW0gc3BhbiBzcGFuIHRvIHNldCBhY3RpdmVcbiAqL1xuZnVuY3Rpb24gc2V0U3Bhbihjb250ZXh0LCBzcGFuKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoU1BBTl9LRVksIHNwYW4pO1xufVxuZXhwb3J0cy5zZXRTcGFuID0gc2V0U3Bhbjtcbi8qKlxuICogUmVtb3ZlIGN1cnJlbnQgc3BhbiBzdG9yZWQgaW4gdGhlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGRlbGV0ZSBzcGFuIGZyb21cbiAqL1xuZnVuY3Rpb24gZGVsZXRlU3Bhbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoU1BBTl9LRVkpO1xufVxuZXhwb3J0cy5kZWxldGVTcGFuID0gZGVsZXRlU3Bhbjtcbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW5fMS5Ob25SZWNvcmRpbmdTcGFuKHNwYW5Db250ZXh0KSk7XG59XG5leHBvcnRzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4vKipcbiAqIEdldCB0aGUgc3BhbiBjb250ZXh0IG9mIHRoZSBzcGFuIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIGdldCB2YWx1ZXMgZnJvbVxuICovXG5mdW5jdGlvbiBnZXRTcGFuQ29udGV4dChjb250ZXh0KSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBnZXRTcGFuKGNvbnRleHQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3BhbkNvbnRleHQoKTtcbn1cbmV4cG9ydHMuZ2V0U3BhbkNvbnRleHQgPSBnZXRTcGFuQ29udGV4dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHQtdXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMud3JhcFNwYW5Db250ZXh0ID0gZXhwb3J0cy5pc1NwYW5Db250ZXh0VmFsaWQgPSBleHBvcnRzLmlzVmFsaWRTcGFuSWQgPSBleHBvcnRzLmlzVmFsaWRUcmFjZUlkID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGludmFsaWRfc3Bhbl9jb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2ludmFsaWQtc3Bhbi1jb25zdGFudHNcIik7XG5jb25zdCBOb25SZWNvcmRpbmdTcGFuXzEgPSByZXF1aXJlKFwiLi9Ob25SZWNvcmRpbmdTcGFuXCIpO1xuY29uc3QgVkFMSURfVFJBQ0VJRF9SRUdFWCA9IC9eKFswLTlhLWZdezMyfSkkL2k7XG5jb25zdCBWQUxJRF9TUEFOSURfUkVHRVggPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIGlzVmFsaWRUcmFjZUlkKHRyYWNlSWQpIHtcbiAgICByZXR1cm4gVkFMSURfVFJBQ0VJRF9SRUdFWC50ZXN0KHRyYWNlSWQpICYmIHRyYWNlSWQgIT09IGludmFsaWRfc3Bhbl9jb25zdGFudHNfMS5JTlZBTElEX1RSQUNFSUQ7XG59XG5leHBvcnRzLmlzVmFsaWRUcmFjZUlkID0gaXNWYWxpZFRyYWNlSWQ7XG5mdW5jdGlvbiBpc1ZhbGlkU3BhbklkKHNwYW5JZCkge1xuICAgIHJldHVybiBWQUxJRF9TUEFOSURfUkVHRVgudGVzdChzcGFuSWQpICYmIHNwYW5JZCAhPT0gaW52YWxpZF9zcGFuX2NvbnN0YW50c18xLklOVkFMSURfU1BBTklEO1xufVxuZXhwb3J0cy5pc1ZhbGlkU3BhbklkID0gaXNWYWxpZFNwYW5JZDtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHtAbGluayBTcGFuQ29udGV4dH0gaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGlzU3BhbkNvbnRleHRWYWxpZChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAoaXNWYWxpZFRyYWNlSWQoc3BhbkNvbnRleHQudHJhY2VJZCkgJiYgaXNWYWxpZFNwYW5JZChzcGFuQ29udGV4dC5zcGFuSWQpKTtcbn1cbmV4cG9ydHMuaXNTcGFuQ29udGV4dFZhbGlkID0gaXNTcGFuQ29udGV4dFZhbGlkO1xuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3Bhbl8xLk5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpO1xufVxuZXhwb3J0cy53cmFwU3BhbkNvbnRleHQgPSB3cmFwU3BhbkNvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGFuY29udGV4dC11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9vcFRyYWNlciA9IHZvaWQgMDtcbmNvbnN0IGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuLi9hcGkvY29udGV4dFwiKTtcbmNvbnN0IGNvbnRleHRfdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi90cmFjZS9jb250ZXh0LXV0aWxzXCIpO1xuY29uc3QgTm9uUmVjb3JkaW5nU3Bhbl8xID0gcmVxdWlyZShcIi4vTm9uUmVjb3JkaW5nU3BhblwiKTtcbmNvbnN0IHNwYW5jb250ZXh0X3V0aWxzXzEgPSByZXF1aXJlKFwiLi9zcGFuY29udGV4dC11dGlsc1wiKTtcbmNvbnN0IGNvbnRleHRBcGkgPSBjb250ZXh0XzEuQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuLyoqXG4gKiBOby1vcCBpbXBsZW1lbnRhdGlvbnMgb2Yge0BsaW5rIFRyYWNlcn0uXG4gKi9cbmNsYXNzIE5vb3BUcmFjZXIge1xuICAgIC8vIHN0YXJ0U3BhbiBzdGFydHMgYSBub29wIHNwYW4uXG4gICAgc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQgPSBjb250ZXh0QXBpLmFjdGl2ZSgpKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3Bhbl8xLk5vblJlY29yZGluZ1NwYW4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgKDAsIGNvbnRleHRfdXRpbHNfMS5nZXRTcGFuQ29udGV4dCkoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgKDAsIHNwYW5jb250ZXh0X3V0aWxzXzEuaXNTcGFuQ29udGV4dFZhbGlkKShwYXJlbnRGcm9tQ29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3Bhbl8xLk5vblJlY29yZGluZ1NwYW4ocGFyZW50RnJvbUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuXzEuTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0QWN0aXZlU3BhbihuYW1lLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICAgIGxldCBvcHRzO1xuICAgICAgICBsZXQgY3R4O1xuICAgICAgICBsZXQgZm47XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGZuID0gYXJnMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGZuID0gYXJnMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgY3R4ID0gYXJnMztcbiAgICAgICAgICAgIGZuID0gYXJnNDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gY3R4ICE9PSBudWxsICYmIGN0eCAhPT0gdm9pZCAwID8gY3R4IDogY29udGV4dEFwaS5hY3RpdmUoKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICBjb25zdCBjb250ZXh0V2l0aFNwYW5TZXQgPSAoMCwgY29udGV4dF91dGlsc18xLnNldFNwYW4pKHBhcmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICByZXR1cm4gY29udGV4dEFwaS53aXRoKGNvbnRleHRXaXRoU3BhblNldCwgZm4sIHVuZGVmaW5lZCwgc3Bhbik7XG4gICAgfVxufVxuZXhwb3J0cy5Ob29wVHJhY2VyID0gTm9vcFRyYWNlcjtcbmZ1bmN0aW9uIGlzU3BhbkNvbnRleHQoc3BhbkNvbnRleHQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBzcGFuQ29udGV4dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0WydzcGFuSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUlkJ10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiBzcGFuQ29udGV4dFsndHJhY2VGbGFncyddID09PSAnbnVtYmVyJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob29wVHJhY2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm94eVRyYWNlciA9IHZvaWQgMDtcbmNvbnN0IE5vb3BUcmFjZXJfMSA9IHJlcXVpcmUoXCIuL05vb3BUcmFjZXJcIik7XG5jb25zdCBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyXzEuTm9vcFRyYWNlcigpO1xuLyoqXG4gKiBQcm94eSB0cmFjZXIgcHJvdmlkZWQgYnkgdGhlIHByb3h5IHRyYWNlciBwcm92aWRlclxuICovXG5jbGFzcyBQcm94eVRyYWNlciB7XG4gICAgY29uc3RydWN0b3IoX3Byb3ZpZGVyLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3Byb3ZpZGVyID0gX3Byb3ZpZGVyO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBzdGFydFNwYW4obmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH1cbiAgICBzdGFydEFjdGl2ZVNwYW4oX25hbWUsIF9vcHRpb25zLCBfY29udGV4dCwgX2ZuKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSB0cmFjZXIgZnJvbSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSB0cmFjZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIHRyYWNlci5cbiAgICAgKi9cbiAgICBfZ2V0VHJhY2VyKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJveHlUcmFjZXIgPSBQcm94eVRyYWNlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb3h5VHJhY2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob29wVHJhY2VyUHJvdmlkZXIgPSB2b2lkIDA7XG5jb25zdCBOb29wVHJhY2VyXzEgPSByZXF1aXJlKFwiLi9Ob29wVHJhY2VyXCIpO1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIFRyYWNlclByb3ZpZGVyfSB3aGljaCByZXR1cm5zIGFuIGltcG90ZW50XG4gKiBUcmFjZXIgZm9yIGFsbCBjYWxscyB0byBgZ2V0VHJhY2VyYC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBhcmUgbm8tb3AuXG4gKi9cbmNsYXNzIE5vb3BUcmFjZXJQcm92aWRlciB7XG4gICAgZ2V0VHJhY2VyKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wVHJhY2VyXzEuTm9vcFRyYWNlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm9vcFRyYWNlclByb3ZpZGVyID0gTm9vcFRyYWNlclByb3ZpZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9vcFRyYWNlclByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm94eVRyYWNlclByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgUHJveHlUcmFjZXJfMSA9IHJlcXVpcmUoXCIuL1Byb3h5VHJhY2VyXCIpO1xuY29uc3QgTm9vcFRyYWNlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9Ob29wVHJhY2VyUHJvdmlkZXJcIik7XG5jb25zdCBOT09QX1RSQUNFUl9QUk9WSURFUiA9IG5ldyBOb29wVHJhY2VyUHJvdmlkZXJfMS5Ob29wVHJhY2VyUHJvdmlkZXIoKTtcbi8qKlxuICogVHJhY2VyIHByb3ZpZGVyIHdoaWNoIHByb3ZpZGVzIHtAbGluayBQcm94eVRyYWNlcn1zLlxuICpcbiAqIEJlZm9yZSBhIGRlbGVnYXRlIGlzIHNldCwgdHJhY2VycyBwcm92aWRlZCBhcmUgTm9PcC5cbiAqICAgV2hlbiBhIGRlbGVnYXRlIGlzIHNldCwgdHJhY2VzIGFyZSBwcm92aWRlZCBmcm9tIHRoZSBkZWxlZ2F0ZS5cbiAqICAgV2hlbiBhIGRlbGVnYXRlIGlzIHNldCBhZnRlciB0cmFjZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLFxuICogICBhbGwgdHJhY2VycyBhbHJlYWR5IHByb3ZpZGVkIHdpbGwgdXNlIHRoZSBwcm92aWRlZCBkZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuY2xhc3MgUHJveHlUcmFjZXJQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogR2V0IGEge0BsaW5rIFByb3h5VHJhY2VyfVxuICAgICAqL1xuICAgIGdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBuZXcgUHJveHlUcmFjZXJfMS5Qcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfVxuICAgIGdldERlbGVnYXRlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTk9PUF9UUkFDRVJfUFJPVklERVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGVsZWdhdGUgdHJhY2VyIHByb3ZpZGVyXG4gICAgICovXG4gICAgc2V0RGVsZWdhdGUoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnRzLlByb3h5VHJhY2VyUHJvdmlkZXIgPSBQcm94eVRyYWNlclByb3ZpZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJveHlUcmFjZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2FtcGxpbmdEZWNpc2lvbiA9IHZvaWQgMDtcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHRoZSBvbmUgZGVjbGFyZWQgaW4gQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UgaW5zdGVhZC5cbiAqIEEgc2FtcGxpbmcgZGVjaXNpb24gdGhhdCBkZXRlcm1pbmVzIGhvdyBhIHtAbGluayBTcGFufSB3aWxsIGJlIHJlY29yZGVkXG4gKiBhbmQgY29sbGVjdGVkLlxuICovXG52YXIgU2FtcGxpbmdEZWNpc2lvbjtcbihmdW5jdGlvbiAoU2FtcGxpbmdEZWNpc2lvbikge1xuICAgIC8qKlxuICAgICAqIGBTcGFuLmlzUmVjb3JkaW5nKCkgPT09IGZhbHNlYCwgc3BhbiB3aWxsIG5vdCBiZSByZWNvcmRlZCBhbmQgYWxsIGV2ZW50c1xuICAgICAqIGFuZCBhdHRyaWJ1dGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAgICAgKi9cbiAgICBTYW1wbGluZ0RlY2lzaW9uW1NhbXBsaW5nRGVjaXNpb25bXCJOT1RfUkVDT1JEXCJdID0gMF0gPSBcIk5PVF9SRUNPUkRcIjtcbiAgICAvKipcbiAgICAgKiBgU3Bhbi5pc1JlY29yZGluZygpID09PSB0cnVlYCwgYnV0IGBTYW1wbGVkYCBmbGFnIGluIHtAbGluayBUcmFjZUZsYWdzfVxuICAgICAqIE1VU1QgTk9UIGJlIHNldC5cbiAgICAgKi9cbiAgICBTYW1wbGluZ0RlY2lzaW9uW1NhbXBsaW5nRGVjaXNpb25bXCJSRUNPUkRcIl0gPSAxXSA9IFwiUkVDT1JEXCI7XG4gICAgLyoqXG4gICAgICogYFNwYW4uaXNSZWNvcmRpbmcoKSA9PT0gdHJ1ZWAgQU5EIGBTYW1wbGVkYCBmbGFnIGluIHtAbGluayBUcmFjZUZsYWdzfVxuICAgICAqIE1VU1QgYmUgc2V0LlxuICAgICAqL1xuICAgIFNhbXBsaW5nRGVjaXNpb25bU2FtcGxpbmdEZWNpc2lvbltcIlJFQ09SRF9BTkRfU0FNUExFRFwiXSA9IDJdID0gXCJSRUNPUkRfQU5EX1NBTVBMRURcIjtcbn0pKFNhbXBsaW5nRGVjaXNpb24gPSBleHBvcnRzLlNhbXBsaW5nRGVjaXNpb24gfHwgKGV4cG9ydHMuU2FtcGxpbmdEZWNpc2lvbiA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TYW1wbGluZ1Jlc3VsdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFuS2luZCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgU3BhbktpbmQ7XG4oZnVuY3Rpb24gKFNwYW5LaW5kKSB7XG4gICAgLyoqIERlZmF1bHQgdmFsdWUuIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGlzIHVzZWQgaW50ZXJuYWxseS4gKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIklOVEVSTkFMXCJdID0gMF0gPSBcIklOVEVSTkFMXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHNlcnZlci1zaWRlIGhhbmRsaW5nIG9mIGFuIFJQQyBvciBvdGhlclxuICAgICAqIHJlbW90ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiU0VSVkVSXCJdID0gMV0gPSBcIlNFUlZFUlwiO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyB0aGUgY2xpZW50LXNpZGUgd3JhcHBlciBhcm91bmQgYW4gUlBDIG9yXG4gICAgICogb3RoZXIgcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDTElFTlRcIl0gPSAyXSA9IFwiQ0xJRU5UXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIHByb2R1Y2VyIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlBST0RVQ0VSXCJdID0gM10gPSBcIlBST0RVQ0VSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIGNvbnN1bWVyIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSBhXG4gICAgICogYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAgKiByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDT05TVU1FUlwiXSA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkoU3BhbktpbmQgPSBleHBvcnRzLlNwYW5LaW5kIHx8IChleHBvcnRzLlNwYW5LaW5kID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwYW5fa2luZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFuU3RhdHVzQ29kZSA9IHZvaWQgMDtcbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2Ygc3RhdHVzIGNvZGVzLlxuICovXG52YXIgU3BhblN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFNwYW5TdGF0dXNDb2RlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc3RhdHVzLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiVU5TRVRcIl0gPSAwXSA9IFwiVU5TRVRcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBhbiBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgb3JcbiAgICAgKiBPcGVyYXRvciB0byBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJPS1wiXSA9IDFdID0gXCJPS1wiO1xuICAgIC8qKlxuICAgICAqIFRoZSBvcGVyYXRpb24gY29udGFpbnMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgU3BhblN0YXR1c0NvZGVbU3BhblN0YXR1c0NvZGVbXCJFUlJPUlwiXSA9IDJdID0gXCJFUlJPUlwiO1xufSkoU3BhblN0YXR1c0NvZGUgPSBleHBvcnRzLlNwYW5TdGF0dXNDb2RlIHx8IChleHBvcnRzLlNwYW5TdGF0dXNDb2RlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXR1cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVWYWx1ZSA9IGV4cG9ydHMudmFsaWRhdGVLZXkgPSB2b2lkIDA7XG5jb25zdCBWQUxJRF9LRVlfQ0hBUl9SQU5HRSA9ICdbXzAtOWEtei0qL10nO1xuY29uc3QgVkFMSURfS0VZID0gYFthLXpdJHtWQUxJRF9LRVlfQ0hBUl9SQU5HRX17MCwyNTV9YDtcbmNvbnN0IFZBTElEX1ZFTkRPUl9LRVkgPSBgW2EtejAtOV0ke1ZBTElEX0tFWV9DSEFSX1JBTkdFfXswLDI0MH1AW2Etel0ke1ZBTElEX0tFWV9DSEFSX1JBTkdFfXswLDEzfWA7XG5jb25zdCBWQUxJRF9LRVlfUkVHRVggPSBuZXcgUmVnRXhwKGBeKD86JHtWQUxJRF9LRVl9fCR7VkFMSURfVkVORE9SX0tFWX0pJGApO1xuY29uc3QgVkFMSURfVkFMVUVfQkFTRV9SRUdFWCA9IC9eWyAtfl17MCwyNTV9WyEtfl0kLztcbmNvbnN0IElOVkFMSURfVkFMVUVfQ09NTUFfRVFVQUxfUkVHRVggPSAvLHw9Lztcbi8qKlxuICogS2V5IGlzIG9wYXF1ZSBzdHJpbmcgdXAgdG8gMjU2IGNoYXJhY3RlcnMgcHJpbnRhYmxlLiBJdCBNVVNUIGJlZ2luIHdpdGggYVxuICogbG93ZXJjYXNlIGxldHRlciwgYW5kIGNhbiBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlIGxldHRlcnMgYS16LCBkaWdpdHMgMC05LFxuICogdW5kZXJzY29yZXMgXywgZGFzaGVzIC0sIGFzdGVyaXNrcyAqLCBhbmQgZm9yd2FyZCBzbGFzaGVzIC8uXG4gKiBGb3IgbXVsdGktdGVuYW50IHZlbmRvciBzY2VuYXJpb3MsIGFuIGF0IHNpZ24gKEApIGNhbiBiZSB1c2VkIHRvIHByZWZpeCB0aGVcbiAqIHZlbmRvciBuYW1lLiBWZW5kb3JzIFNIT1VMRCBzZXQgdGhlIHRlbmFudCBJRCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBrZXkuXG4gKiBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvI2tleVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtleShrZXkpIHtcbiAgICByZXR1cm4gVkFMSURfS0VZX1JFR0VYLnRlc3Qoa2V5KTtcbn1cbmV4cG9ydHMudmFsaWRhdGVLZXkgPSB2YWxpZGF0ZUtleTtcbi8qKlxuICogVmFsdWUgaXMgb3BhcXVlIHN0cmluZyB1cCB0byAyNTYgY2hhcmFjdGVycyBwcmludGFibGUgQVNDSUkgUkZDMDAyMFxuICogY2hhcmFjdGVycyAoaS5lLiwgdGhlIHJhbmdlIDB4MjAgdG8gMHg3RSkgZXhjZXB0IGNvbW1hICwgYW5kID0uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gKFZBTElEX1ZBTFVFX0JBU0VfUkVHRVgudGVzdCh2YWx1ZSkgJiZcbiAgICAgICAgIUlOVkFMSURfVkFMVUVfQ09NTUFfRVFVQUxfUkVHRVgudGVzdCh2YWx1ZSkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZVZhbHVlID0gdmFsaWRhdGVWYWx1ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNlc3RhdGUtdmFsaWRhdG9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VTdGF0ZUltcGwgPSB2b2lkIDA7XG5jb25zdCB0cmFjZXN0YXRlX3ZhbGlkYXRvcnNfMSA9IHJlcXVpcmUoXCIuL3RyYWNlc3RhdGUtdmFsaWRhdG9yc1wiKTtcbmNvbnN0IE1BWF9UUkFDRV9TVEFURV9JVEVNUyA9IDMyO1xuY29uc3QgTUFYX1RSQUNFX1NUQVRFX0xFTiA9IDUxMjtcbmNvbnN0IExJU1RfTUVNQkVSU19TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBMSVNUX01FTUJFUl9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4vKipcbiAqIFRyYWNlU3RhdGUgbXVzdCBiZSBhIGNsYXNzIGFuZCBub3QgYSBzaW1wbGUgb2JqZWN0IHR5cGUgYmVjYXVzZSBvZiB0aGUgc3BlY1xuICogcmVxdWlyZW1lbnQgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0LyN0cmFjZXN0YXRlLWZpZWxkKS5cbiAqXG4gKiBIZXJlIGlzIHRoZSBsaXN0IG9mIGFsbG93ZWQgbXV0YXRpb25zOlxuICogLSBOZXcga2V5LXZhbHVlIHBhaXIgc2hvdWxkIGJlIGFkZGVkIGludG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuICogLSBUaGUgdmFsdWUgb2YgYW55IGtleSBjYW4gYmUgdXBkYXRlZC4gTW9kaWZpZWQga2V5cyBNVVNUIGJlIG1vdmVkIHRvIHRoZVxuICogYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICovXG5jbGFzcyBUcmFjZVN0YXRlSW1wbCB7XG4gICAgY29uc3RydWN0b3IocmF3VHJhY2VTdGF0ZSkge1xuICAgICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAocmF3VHJhY2VTdGF0ZSlcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlKHJhd1RyYWNlU3RhdGUpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAvLyBUT0RPOiBCZW5jaG1hcmsgdGhlIGRpZmZlcmVudCBhcHByb2FjaGVzKG1hcCB2cyBsaXN0KSBhbmRcbiAgICAgICAgLy8gdXNlIHRoZSBmYXN0ZXIgb25lLlxuICAgICAgICBjb25zdCB0cmFjZVN0YXRlID0gdGhpcy5fY2xvbmUoKTtcbiAgICAgICAgaWYgKHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2VTdGF0ZS5faW50ZXJuYWxTdGF0ZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0cmFjZVN0YXRlO1xuICAgIH1cbiAgICB1bnNldChrZXkpIHtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZSA9IHRoaXMuX2Nsb25lKCk7XG4gICAgICAgIHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUuZGVsZXRlKGtleSk7XG4gICAgICAgIHJldHVybiB0cmFjZVN0YXRlO1xuICAgIH1cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFN0YXRlLmdldChrZXkpO1xuICAgIH1cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXlzKClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFnZywga2V5KSA9PiB7XG4gICAgICAgICAgICBhZ2cucHVzaChrZXkgKyBMSVNUX01FTUJFUl9LRVlfVkFMVUVfU1BMSVRURVIgKyB0aGlzLmdldChrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBhZ2c7XG4gICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmpvaW4oTElTVF9NRU1CRVJTX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIF9wYXJzZShyYXdUcmFjZVN0YXRlKSB7XG4gICAgICAgIGlmIChyYXdUcmFjZVN0YXRlLmxlbmd0aCA+IE1BWF9UUkFDRV9TVEFURV9MRU4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSByYXdUcmFjZVN0YXRlXG4gICAgICAgICAgICAuc3BsaXQoTElTVF9NRU1CRVJTX1NFUEFSQVRPUilcbiAgICAgICAgICAgIC5yZXZlcnNlKCkgLy8gU3RvcmUgaW4gcmV2ZXJzZSBzbyBuZXcga2V5cyAoLnNldCguLi4pKSB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICAucmVkdWNlKChhZ2csIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RNZW1iZXIgPSBwYXJ0LnRyaW0oKTsgLy8gT3B0aW9uYWwgV2hpdGVzcGFjZSAoT1dTKSBoYW5kbGluZ1xuICAgICAgICAgICAgY29uc3QgaSA9IGxpc3RNZW1iZXIuaW5kZXhPZihMSVNUX01FTUJFUl9LRVlfVkFMVUVfU1BMSVRURVIpO1xuICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gbGlzdE1lbWJlci5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxpc3RNZW1iZXIuc2xpY2UoaSArIDEsIHBhcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIHRyYWNlc3RhdGVfdmFsaWRhdG9yc18xLnZhbGlkYXRlS2V5KShrZXkpICYmICgwLCB0cmFjZXN0YXRlX3ZhbGlkYXRvcnNfMS52YWxpZGF0ZVZhbHVlKSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWdnLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIHRvIGFkZCB3YXJuaW5nIGxvZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhZ2c7XG4gICAgICAgIH0sIG5ldyBNYXAoKSk7XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHJldmVyc2UoKSByZXF1aXJlbWVudCwgdHJ1bmMgbXVzdCBiZSBkb25lIGFmdGVyIG1hcCBpcyBjcmVhdGVkXG4gICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlLnNpemUgPiBNQVhfVFJBQ0VfU1RBVEVfSVRFTVMpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBuZXcgTWFwKEFycmF5LmZyb20odGhpcy5faW50ZXJuYWxTdGF0ZS5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKSAvLyBVc2UgcmV2ZXJzZSBzYW1lIGFzIG9yaWdpbmFsIHRyYWNlc3RhdGUgcGFyc2UgY2hhaW5cbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgTUFYX1RSQUNFX1NUQVRFX0lURU1TKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2tleXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2ludGVybmFsU3RhdGUua2V5cygpKS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIF9jbG9uZSgpIHtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZSA9IG5ldyBUcmFjZVN0YXRlSW1wbCgpO1xuICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlID0gbmV3IE1hcCh0aGlzLl9pbnRlcm5hbFN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRyYWNlU3RhdGU7XG4gICAgfVxufVxuZXhwb3J0cy5UcmFjZVN0YXRlSW1wbCA9IFRyYWNlU3RhdGVJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2VzdGF0ZS1pbXBsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgdHJhY2VzdGF0ZV9pbXBsXzEgPSByZXF1aXJlKFwiLi90cmFjZXN0YXRlLWltcGxcIik7XG5mdW5jdGlvbiBjcmVhdGVUcmFjZVN0YXRlKHJhd1RyYWNlU3RhdGUpIHtcbiAgICByZXR1cm4gbmV3IHRyYWNlc3RhdGVfaW1wbF8xLlRyYWNlU3RhdGVJbXBsKHJhd1RyYWNlU3RhdGUpO1xufVxuZXhwb3J0cy5jcmVhdGVUcmFjZVN0YXRlID0gY3JlYXRlVHJhY2VTdGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb250ZXh0ID0gdm9pZCAwO1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuY29uc3QgY29udGV4dF8xID0gcmVxdWlyZShcIi4vYXBpL2NvbnRleHRcIik7XG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbmV4cG9ydHMuY29udGV4dCA9IGNvbnRleHRfMS5Db250ZXh0QVBJLmdldEluc3RhbmNlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250ZXh0LWFwaS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlhZyA9IHZvaWQgMDtcbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbmNvbnN0IGRpYWdfMSA9IHJlcXVpcmUoXCIuL2FwaS9kaWFnXCIpO1xuLyoqXG4gKiBFbnRyeXBvaW50IGZvciBEaWFnIEFQSS5cbiAqIERlZmluZXMgRGlhZ25vc3RpYyBoYW5kbGVyIHVzZWQgZm9yIGludGVybmFsIGRpYWdub3N0aWMgbG9nZ2luZyBvcGVyYXRpb25zLlxuICogVGhlIGRlZmF1bHQgcHJvdmlkZXMgYSBOb29wIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gd2hpY2ggbWF5IGJlIGNoYW5nZWQgdmlhIHRoZVxuICogZGlhZy5zZXRMb2dnZXIobG9nZ2VyOiBEaWFnTG9nZ2VyKSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0cy5kaWFnID0gZGlhZ18xLkRpYWdBUEkuaW5zdGFuY2UoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpYWctYXBpLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT09QX01FVEVSX1BST1ZJREVSID0gZXhwb3J0cy5Ob29wTWV0ZXJQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IE5vb3BNZXRlcl8xID0gcmVxdWlyZShcIi4vTm9vcE1ldGVyXCIpO1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIE1ldGVyUHJvdmlkZXJ9IHdoaWNoIHJldHVybnMgYW4gaW1wb3RlbnQgTWV0ZXJcbiAqIGZvciBhbGwgY2FsbHMgdG8gYGdldE1ldGVyYFxuICovXG5jbGFzcyBOb29wTWV0ZXJQcm92aWRlciB7XG4gICAgZ2V0TWV0ZXIoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gTm9vcE1ldGVyXzEuTk9PUF9NRVRFUjtcbiAgICB9XG59XG5leHBvcnRzLk5vb3BNZXRlclByb3ZpZGVyID0gTm9vcE1ldGVyUHJvdmlkZXI7XG5leHBvcnRzLk5PT1BfTUVURVJfUFJPVklERVIgPSBuZXcgTm9vcE1ldGVyUHJvdmlkZXIoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BNZXRlclByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXRyaWNzQVBJID0gdm9pZCAwO1xuY29uc3QgTm9vcE1ldGVyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi9tZXRyaWNzL05vb3BNZXRlclByb3ZpZGVyXCIpO1xuY29uc3QgZ2xvYmFsX3V0aWxzXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvZ2xvYmFsLXV0aWxzXCIpO1xuY29uc3QgZGlhZ18xID0gcmVxdWlyZShcIi4vZGlhZ1wiKTtcbmNvbnN0IEFQSV9OQU1FID0gJ21ldHJpY3MnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IE1ldHJpY3MgQVBJXG4gKi9cbmNsYXNzIE1ldHJpY3NBUEkge1xuICAgIC8qKiBFbXB0eSBwcml2YXRlIGNvbnN0cnVjdG9yIHByZXZlbnRzIGVuZCB1c2VycyBmcm9tIGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQVBJICovXG4gICAgY29uc3RydWN0b3IoKSB7IH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIE1ldHJpY3MgQVBJICovXG4gICAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBNZXRyaWNzQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZ2xvYmFsIG1ldGVyIHByb3ZpZGVyLlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0ZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlLlxuICAgICAqL1xuICAgIHNldEdsb2JhbE1ldGVyUHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBnbG9iYWxfdXRpbHNfMS5yZWdpc3Rlckdsb2JhbCkoQVBJX05BTUUsIHByb3ZpZGVyLCBkaWFnXzEuRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIG1ldGVyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIGdldE1ldGVyUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiAoMCwgZ2xvYmFsX3V0aWxzXzEuZ2V0R2xvYmFsKShBUElfTkFNRSkgfHwgTm9vcE1ldGVyUHJvdmlkZXJfMS5OT09QX01FVEVSX1BST1ZJREVSO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbWV0ZXIgZnJvbSB0aGUgZ2xvYmFsIG1ldGVyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIGdldE1ldGVyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0ZXJQcm92aWRlcigpLmdldE1ldGVyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKiogUmVtb3ZlIHRoZSBnbG9iYWwgbWV0ZXIgcHJvdmlkZXIgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICAoMCwgZ2xvYmFsX3V0aWxzXzEudW5yZWdpc3Rlckdsb2JhbCkoQVBJX05BTUUsIGRpYWdfMS5EaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWV0cmljc0FQSSA9IE1ldHJpY3NBUEk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRyaWNzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5tZXRyaWNzID0gdm9pZCAwO1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuY29uc3QgbWV0cmljc18xID0gcmVxdWlyZShcIi4vYXBpL21ldHJpY3NcIik7XG4vKiogRW50cnlwb2ludCBmb3IgbWV0cmljcyBBUEkgKi9cbmV4cG9ydHMubWV0cmljcyA9IG1ldHJpY3NfMS5NZXRyaWNzQVBJLmdldEluc3RhbmNlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRyaWNzLWFwaS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9vcFRleHRNYXBQcm9wYWdhdG9yID0gdm9pZCAwO1xuLyoqXG4gKiBOby1vcCBpbXBsZW1lbnRhdGlvbnMgb2Yge0BsaW5rIFRleHRNYXBQcm9wYWdhdG9yfS5cbiAqL1xuY2xhc3MgTm9vcFRleHRNYXBQcm9wYWdhdG9yIHtcbiAgICAvKiogTm9vcCBpbmplY3QgZnVuY3Rpb24gZG9lcyBub3RoaW5nICovXG4gICAgaW5qZWN0KF9jb250ZXh0LCBfY2FycmllcikgeyB9XG4gICAgLyoqIE5vb3AgZXh0cmFjdCBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYW5kIHJldHVybnMgdGhlIGlucHV0IGNvbnRleHQgKi9cbiAgICBleHRyYWN0KGNvbnRleHQsIF9jYXJyaWVyKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59XG5leHBvcnRzLk5vb3BUZXh0TWFwUHJvcGFnYXRvciA9IE5vb3BUZXh0TWFwUHJvcGFnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BUZXh0TWFwUHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVsZXRlQmFnZ2FnZSA9IGV4cG9ydHMuc2V0QmFnZ2FnZSA9IGV4cG9ydHMuZ2V0QWN0aXZlQmFnZ2FnZSA9IGV4cG9ydHMuZ2V0QmFnZ2FnZSA9IHZvaWQgMDtcbmNvbnN0IGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuLi9hcGkvY29udGV4dFwiKTtcbmNvbnN0IGNvbnRleHRfMiA9IHJlcXVpcmUoXCIuLi9jb250ZXh0L2NvbnRleHRcIik7XG4vKipcbiAqIEJhZ2dhZ2Uga2V5XG4gKi9cbmNvbnN0IEJBR0dBR0VfS0VZID0gKDAsIGNvbnRleHRfMi5jcmVhdGVDb250ZXh0S2V5KSgnT3BlblRlbGVtZXRyeSBCYWdnYWdlIEtleScpO1xuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBiYWdnYWdlIGZyb20gdGhlIGdpdmVuIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge0NvbnRleHR9IENvbnRleHQgdGhhdCBtYW5hZ2UgYWxsIGNvbnRleHQgdmFsdWVzXG4gKiBAcmV0dXJucyB7QmFnZ2FnZX0gRXh0cmFjdGVkIGJhZ2dhZ2UgZnJvbSB0aGUgY29udGV4dFxuICovXG5mdW5jdGlvbiBnZXRCYWdnYWdlKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZShCQUdHQUdFX0tFWSkgfHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5nZXRCYWdnYWdlID0gZ2V0QmFnZ2FnZTtcbi8qKlxuICogUmV0cmlldmUgdGhlIGN1cnJlbnQgYmFnZ2FnZSBmcm9tIHRoZSBhY3RpdmUvY3VycmVudCBjb250ZXh0XG4gKlxuICogQHJldHVybnMge0JhZ2dhZ2V9IEV4dHJhY3RlZCBiYWdnYWdlIGZyb20gdGhlIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlQmFnZ2FnZSgpIHtcbiAgICByZXR1cm4gZ2V0QmFnZ2FnZShjb250ZXh0XzEuQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmV4cG9ydHMuZ2V0QWN0aXZlQmFnZ2FnZSA9IGdldEFjdGl2ZUJhZ2dhZ2U7XG4vKipcbiAqIFN0b3JlIGEgYmFnZ2FnZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICpcbiAqIEBwYXJhbSB7Q29udGV4dH0gQ29udGV4dCB0aGF0IG1hbmFnZSBhbGwgY29udGV4dCB2YWx1ZXNcbiAqIEBwYXJhbSB7QmFnZ2FnZX0gYmFnZ2FnZSB0aGF0IHdpbGwgYmUgc2V0IGluIHRoZSBhY3R1YWwgY29udGV4dFxuICovXG5mdW5jdGlvbiBzZXRCYWdnYWdlKGNvbnRleHQsIGJhZ2dhZ2UpIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShCQUdHQUdFX0tFWSwgYmFnZ2FnZSk7XG59XG5leHBvcnRzLnNldEJhZ2dhZ2UgPSBzZXRCYWdnYWdlO1xuLyoqXG4gKiBEZWxldGUgdGhlIGJhZ2dhZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtDb250ZXh0fSBDb250ZXh0IHRoYXQgbWFuYWdlIGFsbCBjb250ZXh0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBkZWxldGVCYWdnYWdlKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5kZWxldGVWYWx1ZShCQUdHQUdFX0tFWSk7XG59XG5leHBvcnRzLmRlbGV0ZUJhZ2dhZ2UgPSBkZWxldGVCYWdnYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udGV4dC1oZWxwZXJzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9wYWdhdGlvbkFQSSA9IHZvaWQgMDtcbmNvbnN0IGdsb2JhbF91dGlsc18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL2dsb2JhbC11dGlsc1wiKTtcbmNvbnN0IE5vb3BUZXh0TWFwUHJvcGFnYXRvcl8xID0gcmVxdWlyZShcIi4uL3Byb3BhZ2F0aW9uL05vb3BUZXh0TWFwUHJvcGFnYXRvclwiKTtcbmNvbnN0IFRleHRNYXBQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi4vcHJvcGFnYXRpb24vVGV4dE1hcFByb3BhZ2F0b3JcIik7XG5jb25zdCBjb250ZXh0X2hlbHBlcnNfMSA9IHJlcXVpcmUoXCIuLi9iYWdnYWdlL2NvbnRleHQtaGVscGVyc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vYmFnZ2FnZS91dGlsc1wiKTtcbmNvbnN0IGRpYWdfMSA9IHJlcXVpcmUoXCIuL2RpYWdcIik7XG5jb25zdCBBUElfTkFNRSA9ICdwcm9wYWdhdGlvbic7XG5jb25zdCBOT09QX1RFWFRfTUFQX1BST1BBR0FUT1IgPSBuZXcgTm9vcFRleHRNYXBQcm9wYWdhdG9yXzEuTm9vcFRleHRNYXBQcm9wYWdhdG9yKCk7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgUHJvcGFnYXRpb24gQVBJXG4gKi9cbmNsYXNzIFByb3BhZ2F0aW9uQVBJIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUJhZ2dhZ2UgPSB1dGlsc18xLmNyZWF0ZUJhZ2dhZ2U7XG4gICAgICAgIHRoaXMuZ2V0QmFnZ2FnZSA9IGNvbnRleHRfaGVscGVyc18xLmdldEJhZ2dhZ2U7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlQmFnZ2FnZSA9IGNvbnRleHRfaGVscGVyc18xLmdldEFjdGl2ZUJhZ2dhZ2U7XG4gICAgICAgIHRoaXMuc2V0QmFnZ2FnZSA9IGNvbnRleHRfaGVscGVyc18xLnNldEJhZ2dhZ2U7XG4gICAgICAgIHRoaXMuZGVsZXRlQmFnZ2FnZSA9IGNvbnRleHRfaGVscGVyc18xLmRlbGV0ZUJhZ2dhZ2U7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgUHJvcGFnYXRvciBBUEkgKi9cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFByb3BhZ2F0aW9uQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgcHJvcGFnYXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHByb3BhZ2F0b3Igd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgc2V0R2xvYmFsUHJvcGFnYXRvcihwcm9wYWdhdG9yKSB7XG4gICAgICAgIHJldHVybiAoMCwgZ2xvYmFsX3V0aWxzXzEucmVnaXN0ZXJHbG9iYWwpKEFQSV9OQU1FLCBwcm9wYWdhdG9yLCBkaWFnXzEuRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5qZWN0IGNvbnRleHQgaW50byBhIGNhcnJpZXIgdG8gYmUgcHJvcGFnYXRlZCBpbnRlci1wcm9jZXNzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGNhcnJ5aW5nIHRyYWNpbmcgZGF0YSB0byBpbmplY3RcbiAgICAgKiBAcGFyYW0gY2FycmllciBjYXJyaWVyIHRvIGluamVjdCBjb250ZXh0IGludG9cbiAgICAgKiBAcGFyYW0gc2V0dGVyIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHZhbHVlcyBvbiB0aGUgY2FycmllclxuICAgICAqL1xuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIgPSBUZXh0TWFwUHJvcGFnYXRvcl8xLmRlZmF1bHRUZXh0TWFwU2V0dGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRHbG9iYWxQcm9wYWdhdG9yKCkuaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4dHJhY3QgY29udGV4dCBmcm9tIGEgY2FycmllclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGljaCB0aGUgbmV3bHkgY3JlYXRlZCBjb250ZXh0IHdpbGwgaW5oZXJpdCBmcm9tXG4gICAgICogQHBhcmFtIGNhcnJpZXIgQ2FycmllciB0byBleHRyYWN0IGNvbnRleHQgZnJvbVxuICAgICAqIEBwYXJhbSBnZXR0ZXIgRnVuY3Rpb24gdXNlZCB0byBleHRyYWN0IGtleXMgZnJvbSBhIGNhcnJpZXJcbiAgICAgKi9cbiAgICBleHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlciA9IFRleHRNYXBQcm9wYWdhdG9yXzEuZGVmYXVsdFRleHRNYXBHZXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEdsb2JhbFByb3BhZ2F0b3IoKS5leHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGxpc3Qgb2YgYWxsIGZpZWxkcyB3aGljaCBtYXkgYmUgdXNlZCBieSB0aGUgcHJvcGFnYXRvci5cbiAgICAgKi9cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRHbG9iYWxQcm9wYWdhdG9yKCkuZmllbGRzKCk7XG4gICAgfVxuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wYWdhdG9yICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgKDAsIGdsb2JhbF91dGlsc18xLnVucmVnaXN0ZXJHbG9iYWwpKEFQSV9OQU1FLCBkaWFnXzEuRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICB9XG4gICAgX2dldEdsb2JhbFByb3BhZ2F0b3IoKSB7XG4gICAgICAgIHJldHVybiAoMCwgZ2xvYmFsX3V0aWxzXzEuZ2V0R2xvYmFsKShBUElfTkFNRSkgfHwgTk9PUF9URVhUX01BUF9QUk9QQUdBVE9SO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJvcGFnYXRpb25BUEkgPSBQcm9wYWdhdGlvbkFQSTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb3BhZ2F0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcm9wYWdhdGlvbiA9IHZvaWQgMDtcbi8vIFNwbGl0IG1vZHVsZS1sZXZlbCB2YXJpYWJsZSBkZWZpbml0aW9uIGludG8gc2VwYXJhdGUgZmlsZXMgdG8gYWxsb3dcbi8vIHRyZWUtc2hha2luZyBvbiBlYWNoIGFwaSBpbnN0YW5jZS5cbmNvbnN0IHByb3BhZ2F0aW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvcHJvcGFnYXRpb25cIik7XG4vKiogRW50cnlwb2ludCBmb3IgcHJvcGFnYXRpb24gQVBJICovXG5leHBvcnRzLnByb3BhZ2F0aW9uID0gcHJvcGFnYXRpb25fMS5Qcm9wYWdhdGlvbkFQSS5nZXRJbnN0YW5jZSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGFnYXRpb24tYXBpLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFjZUFQSSA9IHZvaWQgMDtcbmNvbnN0IGdsb2JhbF91dGlsc18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL2dsb2JhbC11dGlsc1wiKTtcbmNvbnN0IFByb3h5VHJhY2VyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi90cmFjZS9Qcm94eVRyYWNlclByb3ZpZGVyXCIpO1xuY29uc3Qgc3BhbmNvbnRleHRfdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi90cmFjZS9zcGFuY29udGV4dC11dGlsc1wiKTtcbmNvbnN0IGNvbnRleHRfdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi90cmFjZS9jb250ZXh0LXV0aWxzXCIpO1xuY29uc3QgZGlhZ18xID0gcmVxdWlyZShcIi4vZGlhZ1wiKTtcbmNvbnN0IEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG5jbGFzcyBUcmFjZUFQSSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyXzEuUHJveHlUcmFjZXJQcm92aWRlcigpO1xuICAgICAgICB0aGlzLndyYXBTcGFuQ29udGV4dCA9IHNwYW5jb250ZXh0X3V0aWxzXzEud3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IHNwYW5jb250ZXh0X3V0aWxzXzEuaXNTcGFuQ29udGV4dFZhbGlkO1xuICAgICAgICB0aGlzLmRlbGV0ZVNwYW4gPSBjb250ZXh0X3V0aWxzXzEuZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gY29udGV4dF91dGlsc18xLmdldFNwYW47XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IGNvbnRleHRfdXRpbHNfMS5nZXRBY3RpdmVTcGFuO1xuICAgICAgICB0aGlzLmdldFNwYW5Db250ZXh0ID0gY29udGV4dF91dGlsc18xLmdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBjb250ZXh0X3V0aWxzXzEuc2V0U3BhbjtcbiAgICAgICAgdGhpcy5zZXRTcGFuQ29udGV4dCA9IGNvbnRleHRfdXRpbHNfMS5zZXRTcGFuQ29udGV4dDtcbiAgICB9XG4gICAgLyoqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBUcmFjZSBBUEkgKi9cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgZ2xvYmFsIHRyYWNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRyYWNlciBwcm92aWRlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBzZXRHbG9iYWxUcmFjZXJQcm92aWRlcihwcm92aWRlcikge1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gKDAsIGdsb2JhbF91dGlsc18xLnJlZ2lzdGVyR2xvYmFsKShBUElfTkFNRSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgZGlhZ18xLkRpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIHRyYWNlciBwcm92aWRlci5cbiAgICAgKi9cbiAgICBnZXRUcmFjZXJQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuICgwLCBnbG9iYWxfdXRpbHNfMS5nZXRHbG9iYWwpKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdHJhY2VyIGZyb20gdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgZ2V0VHJhY2VyKG5hbWUsIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIobmFtZSwgdmVyc2lvbik7XG4gICAgfVxuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICAoMCwgZ2xvYmFsX3V0aWxzXzEudW5yZWdpc3Rlckdsb2JhbCkoQVBJX05BTUUsIGRpYWdfMS5EaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFByb3h5VHJhY2VyUHJvdmlkZXJfMS5Qcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfVxufVxuZXhwb3J0cy5UcmFjZUFQSSA9IFRyYWNlQVBJO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYWNlID0gdm9pZCAwO1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuY29uc3QgdHJhY2VfMSA9IHJlcXVpcmUoXCIuL2FwaS90cmFjZVwiKTtcbi8qKiBFbnRyeXBvaW50IGZvciB0cmFjZSBBUEkgKi9cbmV4cG9ydHMudHJhY2UgPSB0cmFjZV8xLlRyYWNlQVBJLmdldEluc3RhbmNlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjZS1hcGkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYWNlID0gZXhwb3J0cy5wcm9wYWdhdGlvbiA9IGV4cG9ydHMubWV0cmljcyA9IGV4cG9ydHMuZGlhZyA9IGV4cG9ydHMuY29udGV4dCA9IGV4cG9ydHMuSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSBleHBvcnRzLklOVkFMSURfVFJBQ0VJRCA9IGV4cG9ydHMuSU5WQUxJRF9TUEFOSUQgPSBleHBvcnRzLmlzVmFsaWRTcGFuSWQgPSBleHBvcnRzLmlzVmFsaWRUcmFjZUlkID0gZXhwb3J0cy5pc1NwYW5Db250ZXh0VmFsaWQgPSBleHBvcnRzLmNyZWF0ZVRyYWNlU3RhdGUgPSBleHBvcnRzLlRyYWNlRmxhZ3MgPSBleHBvcnRzLlNwYW5TdGF0dXNDb2RlID0gZXhwb3J0cy5TcGFuS2luZCA9IGV4cG9ydHMuU2FtcGxpbmdEZWNpc2lvbiA9IGV4cG9ydHMuUHJveHlUcmFjZXJQcm92aWRlciA9IGV4cG9ydHMuUHJveHlUcmFjZXIgPSBleHBvcnRzLmRlZmF1bHRUZXh0TWFwU2V0dGVyID0gZXhwb3J0cy5kZWZhdWx0VGV4dE1hcEdldHRlciA9IGV4cG9ydHMuVmFsdWVUeXBlID0gZXhwb3J0cy5jcmVhdGVOb29wTWV0ZXIgPSBleHBvcnRzLkRpYWdMb2dMZXZlbCA9IGV4cG9ydHMuRGlhZ0NvbnNvbGVMb2dnZXIgPSBleHBvcnRzLlJPT1RfQ09OVEVYVCA9IGV4cG9ydHMuY3JlYXRlQ29udGV4dEtleSA9IGV4cG9ydHMuYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nID0gdm9pZCAwO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi9iYWdnYWdlL3V0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLmJhZ2dhZ2VFbnRyeU1ldGFkYXRhRnJvbVN0cmluZzsgfSB9KTtcbi8vIENvbnRleHQgQVBJc1xudmFyIGNvbnRleHRfMSA9IHJlcXVpcmUoXCIuL2NvbnRleHQvY29udGV4dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbnRleHRLZXlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnRleHRfMS5jcmVhdGVDb250ZXh0S2V5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUk9PVF9DT05URVhUXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb250ZXh0XzEuUk9PVF9DT05URVhUOyB9IH0pO1xuLy8gRGlhZyBBUElzXG52YXIgY29uc29sZUxvZ2dlcl8xID0gcmVxdWlyZShcIi4vZGlhZy9jb25zb2xlTG9nZ2VyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGlhZ0NvbnNvbGVMb2dnZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnNvbGVMb2dnZXJfMS5EaWFnQ29uc29sZUxvZ2dlcjsgfSB9KTtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vZGlhZy90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRpYWdMb2dMZXZlbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMS5EaWFnTG9nTGV2ZWw7IH0gfSk7XG4vLyBNZXRyaWNzIEFQSXNcbnZhciBOb29wTWV0ZXJfMSA9IHJlcXVpcmUoXCIuL21ldHJpY3MvTm9vcE1ldGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm9vcE1ldGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOb29wTWV0ZXJfMS5jcmVhdGVOb29wTWV0ZXI7IH0gfSk7XG52YXIgTWV0cmljXzEgPSByZXF1aXJlKFwiLi9tZXRyaWNzL01ldHJpY1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWV0cmljXzEuVmFsdWVUeXBlOyB9IH0pO1xuLy8gUHJvcGFnYXRpb24gQVBJc1xudmFyIFRleHRNYXBQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9wcm9wYWdhdGlvbi9UZXh0TWFwUHJvcGFnYXRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRUZXh0TWFwR2V0dGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBUZXh0TWFwUHJvcGFnYXRvcl8xLmRlZmF1bHRUZXh0TWFwR2V0dGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFRleHRNYXBTZXR0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFRleHRNYXBQcm9wYWdhdG9yXzEuZGVmYXVsdFRleHRNYXBTZXR0ZXI7IH0gfSk7XG52YXIgUHJveHlUcmFjZXJfMSA9IHJlcXVpcmUoXCIuL3RyYWNlL1Byb3h5VHJhY2VyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJveHlUcmFjZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb3h5VHJhY2VyXzEuUHJveHlUcmFjZXI7IH0gfSk7XG52YXIgUHJveHlUcmFjZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vdHJhY2UvUHJveHlUcmFjZXJQcm92aWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb3h5VHJhY2VyUHJvdmlkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb3h5VHJhY2VyUHJvdmlkZXJfMS5Qcm94eVRyYWNlclByb3ZpZGVyOyB9IH0pO1xudmFyIFNhbXBsaW5nUmVzdWx0XzEgPSByZXF1aXJlKFwiLi90cmFjZS9TYW1wbGluZ1Jlc3VsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNhbXBsaW5nRGVjaXNpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNhbXBsaW5nUmVzdWx0XzEuU2FtcGxpbmdEZWNpc2lvbjsgfSB9KTtcbnZhciBzcGFuX2tpbmRfMSA9IHJlcXVpcmUoXCIuL3RyYWNlL3NwYW5fa2luZFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNwYW5LaW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzcGFuX2tpbmRfMS5TcGFuS2luZDsgfSB9KTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuL3RyYWNlL3N0YXR1c1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNwYW5TdGF0dXNDb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdGF0dXNfMS5TcGFuU3RhdHVzQ29kZTsgfSB9KTtcbnZhciB0cmFjZV9mbGFnc18xID0gcmVxdWlyZShcIi4vdHJhY2UvdHJhY2VfZmxhZ3NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUcmFjZUZsYWdzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjZV9mbGFnc18xLlRyYWNlRmxhZ3M7IH0gfSk7XG52YXIgdXRpbHNfMiA9IHJlcXVpcmUoXCIuL3RyYWNlL2ludGVybmFsL3V0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhY2VTdGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMi5jcmVhdGVUcmFjZVN0YXRlOyB9IH0pO1xudmFyIHNwYW5jb250ZXh0X3V0aWxzXzEgPSByZXF1aXJlKFwiLi90cmFjZS9zcGFuY29udGV4dC11dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3BhbkNvbnRleHRWYWxpZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3BhbmNvbnRleHRfdXRpbHNfMS5pc1NwYW5Db250ZXh0VmFsaWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1ZhbGlkVHJhY2VJZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3BhbmNvbnRleHRfdXRpbHNfMS5pc1ZhbGlkVHJhY2VJZDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVmFsaWRTcGFuSWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNwYW5jb250ZXh0X3V0aWxzXzEuaXNWYWxpZFNwYW5JZDsgfSB9KTtcbnZhciBpbnZhbGlkX3NwYW5fY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi90cmFjZS9pbnZhbGlkLXNwYW4tY29uc3RhbnRzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSU5WQUxJRF9TUEFOSURcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludmFsaWRfc3Bhbl9jb25zdGFudHNfMS5JTlZBTElEX1NQQU5JRDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklOVkFMSURfVFJBQ0VJRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW52YWxpZF9zcGFuX2NvbnN0YW50c18xLklOVkFMSURfVFJBQ0VJRDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklOVkFMSURfU1BBTl9DT05URVhUXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnZhbGlkX3NwYW5fY29uc3RhbnRzXzEuSU5WQUxJRF9TUEFOX0NPTlRFWFQ7IH0gfSk7XG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG5jb25zdCBjb250ZXh0X2FwaV8xID0gcmVxdWlyZShcIi4vY29udGV4dC1hcGlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb250ZXh0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb250ZXh0X2FwaV8xLmNvbnRleHQ7IH0gfSk7XG5jb25zdCBkaWFnX2FwaV8xID0gcmVxdWlyZShcIi4vZGlhZy1hcGlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkaWFnX2FwaV8xLmRpYWc7IH0gfSk7XG5jb25zdCBtZXRyaWNzX2FwaV8xID0gcmVxdWlyZShcIi4vbWV0cmljcy1hcGlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXRyaWNzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWNzX2FwaV8xLm1ldHJpY3M7IH0gfSk7XG5jb25zdCBwcm9wYWdhdGlvbl9hcGlfMSA9IHJlcXVpcmUoXCIuL3Byb3BhZ2F0aW9uLWFwaVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb3BhZ2F0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wYWdhdGlvbl9hcGlfMS5wcm9wYWdhdGlvbjsgfSB9KTtcbmNvbnN0IHRyYWNlX2FwaV8xID0gcmVxdWlyZShcIi4vdHJhY2UtYXBpXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYWNlX2FwaV8xLnRyYWNlOyB9IH0pO1xuLy8gRGVmYXVsdCBleHBvcnQuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgY29udGV4dDogY29udGV4dF9hcGlfMS5jb250ZXh0LFxuICAgIGRpYWc6IGRpYWdfYXBpXzEuZGlhZyxcbiAgICBtZXRyaWNzOiBtZXRyaWNzX2FwaV8xLm1ldHJpY3MsXG4gICAgcHJvcGFnYXRpb246IHByb3BhZ2F0aW9uX2FwaV8xLnByb3BhZ2F0aW9uLFxuICAgIHRyYWNlOiB0cmFjZV9hcGlfMS50cmFjZSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8vIHNyYy91dGlscy91cmwudHNcbnZhciBzcGxpdFBhdGggPSAocGF0aCkgPT4ge1xuICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICBpZiAocGF0aHNbMF0gPT09IFwiXCIpIHtcbiAgICBwYXRocy5zaGlmdCgpO1xuICB9XG4gIHJldHVybiBwYXRocztcbn07XG52YXIgc3BsaXRSb3V0aW5nUGF0aCA9IChyb3V0ZVBhdGgpID0+IHtcbiAgY29uc3QgeyBncm91cHMsIHBhdGggfSA9IGV4dHJhY3RHcm91cHNGcm9tUGF0aChyb3V0ZVBhdGgpO1xuICBjb25zdCBwYXRocyA9IHNwbGl0UGF0aChwYXRoKTtcbiAgcmV0dXJuIHJlcGxhY2VHcm91cE1hcmtzKHBhdGhzLCBncm91cHMpO1xufTtcbnZhciBleHRyYWN0R3JvdXBzRnJvbVBhdGggPSAocGF0aCkgPT4ge1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFx7W159XStcXH0vZywgKG1hdGNoLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG1hcmsgPSBgQCR7aW5kZXh9YDtcbiAgICBncm91cHMucHVzaChbbWFyaywgbWF0Y2hdKTtcbiAgICByZXR1cm4gbWFyaztcbiAgfSk7XG4gIHJldHVybiB7IGdyb3VwcywgcGF0aCB9O1xufTtcbnZhciByZXBsYWNlR3JvdXBNYXJrcyA9IChwYXRocywgZ3JvdXBzKSA9PiB7XG4gIGZvciAobGV0IGkgPSBncm91cHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBbbWFya10gPSBncm91cHNbaV07XG4gICAgZm9yIChsZXQgaiA9IHBhdGhzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICBpZiAocGF0aHNbal0uaW5jbHVkZXMobWFyaykpIHtcbiAgICAgICAgcGF0aHNbal0gPSBwYXRoc1tqXS5yZXBsYWNlKG1hcmssIGdyb3Vwc1tpXVsxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aHM7XG59O1xudmFyIHBhdHRlcm5DYWNoZSA9IHt9O1xudmFyIGdldFBhdHRlcm4gPSAobGFiZWwsIG5leHQpID0+IHtcbiAgaWYgKGxhYmVsID09PSBcIipcIikge1xuICAgIHJldHVybiBcIipcIjtcbiAgfVxuICBjb25zdCBtYXRjaCA9IGxhYmVsLm1hdGNoKC9eXFw6KFteXFx7XFx9XSspKD86XFx7KC4rKVxcfSk/JC8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2xhYmVsfSMke25leHR9YDtcbiAgICBpZiAoIXBhdHRlcm5DYWNoZVtjYWNoZUtleV0pIHtcbiAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICBwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldID0gbmV4dCAmJiBuZXh0WzBdICE9PSBcIjpcIiAmJiBuZXh0WzBdICE9PSBcIipcIiA/IFtjYWNoZUtleSwgbWF0Y2hbMV0sIG5ldyBSZWdFeHAoYF4ke21hdGNoWzJdfSg/PS8ke25leHR9KWApXSA6IFtsYWJlbCwgbWF0Y2hbMV0sIG5ldyBSZWdFeHAoYF4ke21hdGNoWzJdfSRgKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldID0gW2xhYmVsLCBtYXRjaFsxXSwgdHJ1ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhciB0cnlEZWNvZGUgPSAoc3RyLCBkZWNvZGVyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZXIoc3RyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oPzolWzAtOUEtRmEtZl17Mn0pKy9nLCAobWF0Y2gpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVyKG1hdGNoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG52YXIgdHJ5RGVjb2RlVVJJID0gKHN0cikgPT4gdHJ5RGVjb2RlKHN0ciwgZGVjb2RlVVJJKTtcbnZhciBnZXRQYXRoID0gKHJlcXVlc3QpID0+IHtcbiAgY29uc3QgdXJsID0gcmVxdWVzdC51cmw7XG4gIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiOlwiKSArIDQpO1xuICBsZXQgaSA9IHN0YXJ0O1xuICBmb3IgKDsgaSA8IHVybC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gdXJsLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNoYXJDb2RlID09PSAzNykge1xuICAgICAgY29uc3QgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiLCBpKTtcbiAgICAgIGNvbnN0IHBhdGggPSB1cmwuc2xpY2Uoc3RhcnQsIHF1ZXJ5SW5kZXggPT09IC0xID8gdm9pZCAwIDogcXVlcnlJbmRleCk7XG4gICAgICByZXR1cm4gdHJ5RGVjb2RlVVJJKHBhdGguaW5jbHVkZXMoXCIlMjVcIikgPyBwYXRoLnJlcGxhY2UoLyUyNS9nLCBcIiUyNTI1XCIpIDogcGF0aCk7XG4gICAgfSBlbHNlIGlmIChjaGFyQ29kZSA9PT0gNjMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdXJsLnNsaWNlKHN0YXJ0LCBpKTtcbn07XG52YXIgZ2V0UXVlcnlTdHJpbmdzID0gKHVybCkgPT4ge1xuICBjb25zdCBxdWVyeUluZGV4ID0gdXJsLmluZGV4T2YoXCI/XCIsIDgpO1xuICByZXR1cm4gcXVlcnlJbmRleCA9PT0gLTEgPyBcIlwiIDogXCI/XCIgKyB1cmwuc2xpY2UocXVlcnlJbmRleCArIDEpO1xufTtcbnZhciBnZXRQYXRoTm9TdHJpY3QgPSAocmVxdWVzdCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBnZXRQYXRoKHJlcXVlc3QpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA+IDEgJiYgcmVzdWx0LmF0KC0xKSA9PT0gXCIvXCIgPyByZXN1bHQuc2xpY2UoMCwgLTEpIDogcmVzdWx0O1xufTtcbnZhciBtZXJnZVBhdGggPSAoYmFzZSwgc3ViLCAuLi5yZXN0KSA9PiB7XG4gIGlmIChyZXN0Lmxlbmd0aCkge1xuICAgIHN1YiA9IG1lcmdlUGF0aChzdWIsIC4uLnJlc3QpO1xuICB9XG4gIHJldHVybiBgJHtiYXNlPy5bMF0gPT09IFwiL1wiID8gXCJcIiA6IFwiL1wifSR7YmFzZX0ke3N1YiA9PT0gXCIvXCIgPyBcIlwiIDogYCR7YmFzZT8uYXQoLTEpID09PSBcIi9cIiA/IFwiXCIgOiBcIi9cIn0ke3N1Yj8uWzBdID09PSBcIi9cIiA/IHN1Yi5zbGljZSgxKSA6IHN1Yn1gfWA7XG59O1xudmFyIGNoZWNrT3B0aW9uYWxQYXJhbWV0ZXIgPSAocGF0aCkgPT4ge1xuICBpZiAocGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgIT09IDYzIHx8ICFwYXRoLmluY2x1ZGVzKFwiOlwiKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgbGV0IGJhc2VQYXRoID0gXCJcIjtcbiAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgIGlmIChzZWdtZW50ICE9PSBcIlwiICYmICEvXFw6Ly50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICBiYXNlUGF0aCArPSBcIi9cIiArIHNlZ21lbnQ7XG4gICAgfSBlbHNlIGlmICgvXFw6Ly50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICBpZiAoL1xcPy8udGVzdChzZWdtZW50KSkge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDAgJiYgYmFzZVBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2goXCIvXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChiYXNlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uYWxTZWdtZW50ID0gc2VnbWVudC5yZXBsYWNlKFwiP1wiLCBcIlwiKTtcbiAgICAgICAgYmFzZVBhdGggKz0gXCIvXCIgKyBvcHRpb25hbFNlZ21lbnQ7XG4gICAgICAgIHJlc3VsdHMucHVzaChiYXNlUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlUGF0aCArPSBcIi9cIiArIHNlZ21lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmluZGV4T2YodikgPT09IGkpO1xufTtcbnZhciBfZGVjb2RlVVJJID0gKHZhbHVlKSA9PiB7XG4gIGlmICghL1slK10vLnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZS5pbmRleE9mKFwiK1wiKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcKy9nLCBcIiBcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLmluZGV4T2YoXCIlXCIpICE9PSAtMSA/IHRyeURlY29kZSh2YWx1ZSwgZGVjb2RlVVJJQ29tcG9uZW50XykgOiB2YWx1ZTtcbn07XG52YXIgX2dldFF1ZXJ5UGFyYW0gPSAodXJsLCBrZXksIG11bHRpcGxlKSA9PiB7XG4gIGxldCBlbmNvZGVkO1xuICBpZiAoIW11bHRpcGxlICYmIGtleSAmJiAhL1slK10vLnRlc3Qoa2V5KSkge1xuICAgIGxldCBrZXlJbmRleDIgPSB1cmwuaW5kZXhPZihcIj9cIiwgOCk7XG4gICAgaWYgKGtleUluZGV4MiA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoa2V5LCBrZXlJbmRleDIgKyAxKSkge1xuICAgICAga2V5SW5kZXgyID0gdXJsLmluZGV4T2YoYCYke2tleX1gLCBrZXlJbmRleDIgKyAxKTtcbiAgICB9XG4gICAgd2hpbGUgKGtleUluZGV4MiAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IHRyYWlsaW5nS2V5Q29kZSA9IHVybC5jaGFyQ29kZUF0KGtleUluZGV4MiArIGtleS5sZW5ndGggKyAxKTtcbiAgICAgIGlmICh0cmFpbGluZ0tleUNvZGUgPT09IDYxKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSBrZXlJbmRleDIgKyBrZXkubGVuZ3RoICsgMjtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB1cmwuaW5kZXhPZihcIiZcIiwgdmFsdWVJbmRleCk7XG4gICAgICAgIHJldHVybiBfZGVjb2RlVVJJKHVybC5zbGljZSh2YWx1ZUluZGV4LCBlbmRJbmRleCA9PT0gLTEgPyB2b2lkIDAgOiBlbmRJbmRleCkpO1xuICAgICAgfSBlbHNlIGlmICh0cmFpbGluZ0tleUNvZGUgPT0gMzggfHwgaXNOYU4odHJhaWxpbmdLZXlDb2RlKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIGtleUluZGV4MiA9IHVybC5pbmRleE9mKGAmJHtrZXl9YCwga2V5SW5kZXgyICsgMSk7XG4gICAgfVxuICAgIGVuY29kZWQgPSAvWyUrXS8udGVzdCh1cmwpO1xuICAgIGlmICghZW5jb2RlZCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzdWx0cyA9IHt9O1xuICBlbmNvZGVkID8/PSAvWyUrXS8udGVzdCh1cmwpO1xuICBsZXQga2V5SW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIiwgOCk7XG4gIHdoaWxlIChrZXlJbmRleCAhPT0gLTEpIHtcbiAgICBjb25zdCBuZXh0S2V5SW5kZXggPSB1cmwuaW5kZXhPZihcIiZcIiwga2V5SW5kZXggKyAxKTtcbiAgICBsZXQgdmFsdWVJbmRleCA9IHVybC5pbmRleE9mKFwiPVwiLCBrZXlJbmRleCk7XG4gICAgaWYgKHZhbHVlSW5kZXggPiBuZXh0S2V5SW5kZXggJiYgbmV4dEtleUluZGV4ICE9PSAtMSkge1xuICAgICAgdmFsdWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBsZXQgbmFtZSA9IHVybC5zbGljZShcbiAgICAgIGtleUluZGV4ICsgMSxcbiAgICAgIHZhbHVlSW5kZXggPT09IC0xID8gbmV4dEtleUluZGV4ID09PSAtMSA/IHZvaWQgMCA6IG5leHRLZXlJbmRleCA6IHZhbHVlSW5kZXhcbiAgICApO1xuICAgIGlmIChlbmNvZGVkKSB7XG4gICAgICBuYW1lID0gX2RlY29kZVVSSShuYW1lKTtcbiAgICB9XG4gICAga2V5SW5kZXggPSBuZXh0S2V5SW5kZXg7XG4gICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHZhbHVlSW5kZXggPT09IC0xKSB7XG4gICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdXJsLnNsaWNlKHZhbHVlSW5kZXggKyAxLCBuZXh0S2V5SW5kZXggPT09IC0xID8gdm9pZCAwIDogbmV4dEtleUluZGV4KTtcbiAgICAgIGlmIChlbmNvZGVkKSB7XG4gICAgICAgIHZhbHVlID0gX2RlY29kZVVSSSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKCEocmVzdWx0c1tuYW1lXSAmJiBBcnJheS5pc0FycmF5KHJlc3VsdHNbbmFtZV0pKSkge1xuICAgICAgICByZXN1bHRzW25hbWVdID0gW107XG4gICAgICB9XG4gICAgICA7XG4gICAgICByZXN1bHRzW25hbWVdLnB1c2godmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzW25hbWVdID8/PSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleSA/IHJlc3VsdHNba2V5XSA6IHJlc3VsdHM7XG59O1xudmFyIGdldFF1ZXJ5UGFyYW0gPSBfZ2V0UXVlcnlQYXJhbTtcbnZhciBnZXRRdWVyeVBhcmFtcyA9ICh1cmwsIGtleSkgPT4ge1xuICByZXR1cm4gX2dldFF1ZXJ5UGFyYW0odXJsLCBrZXksIHRydWUpO1xufTtcbnZhciBkZWNvZGVVUklDb21wb25lbnRfID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuZXhwb3J0IHtcbiAgY2hlY2tPcHRpb25hbFBhcmFtZXRlcixcbiAgZGVjb2RlVVJJQ29tcG9uZW50XyxcbiAgZ2V0UGF0aCxcbiAgZ2V0UGF0aE5vU3RyaWN0LFxuICBnZXRQYXR0ZXJuLFxuICBnZXRRdWVyeVBhcmFtLFxuICBnZXRRdWVyeVBhcmFtcyxcbiAgZ2V0UXVlcnlTdHJpbmdzLFxuICBtZXJnZVBhdGgsXG4gIHNwbGl0UGF0aCxcbiAgc3BsaXRSb3V0aW5nUGF0aCxcbiAgdHJ5RGVjb2RlXG59O1xuIiwKICAgICIvLyBzcmMvdXRpbHMvY29va2llLnRzXG5pbXBvcnQgeyBkZWNvZGVVUklDb21wb25lbnRfLCB0cnlEZWNvZGUgfSBmcm9tIFwiLi91cmwuanNcIjtcbnZhciBhbGdvcml0aG0gPSB7IG5hbWU6IFwiSE1BQ1wiLCBoYXNoOiBcIlNIQS0yNTZcIiB9O1xudmFyIGdldENyeXB0b0tleSA9IGFzeW5jIChzZWNyZXQpID0+IHtcbiAgY29uc3Qgc2VjcmV0QnVmID0gdHlwZW9mIHNlY3JldCA9PT0gXCJzdHJpbmdcIiA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzZWNyZXQpIDogc2VjcmV0O1xuICByZXR1cm4gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXCJyYXdcIiwgc2VjcmV0QnVmLCBhbGdvcml0aG0sIGZhbHNlLCBbXCJzaWduXCIsIFwidmVyaWZ5XCJdKTtcbn07XG52YXIgbWFrZVNpZ25hdHVyZSA9IGFzeW5jICh2YWx1ZSwgc2VjcmV0KSA9PiB7XG4gIGNvbnN0IGtleSA9IGF3YWl0IGdldENyeXB0b0tleShzZWNyZXQpO1xuICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBjcnlwdG8uc3VidGxlLnNpZ24oYWxnb3JpdGhtLm5hbWUsIGtleSwgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSk7XG4gIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSkpO1xufTtcbnZhciB2ZXJpZnlTaWduYXR1cmUgPSBhc3luYyAoYmFzZTY0U2lnbmF0dXJlLCB2YWx1ZSwgc2VjcmV0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlQmluU3RyID0gYXRvYihiYXNlNjRTaWduYXR1cmUpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZUJpblN0ci5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzaWduYXR1cmVCaW5TdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHNpZ25hdHVyZVtpXSA9IHNpZ25hdHVyZUJpblN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgY3J5cHRvLnN1YnRsZS52ZXJpZnkoYWxnb3JpdGhtLCBzZWNyZXQsIHNpZ25hdHVyZSwgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbnZhciB2YWxpZENvb2tpZU5hbWVSZWdFeCA9IC9eW1xcdyEjJCUmJyouXmB8fistXSskLztcbnZhciB2YWxpZENvb2tpZVZhbHVlUmVnRXggPSAvXlsgISMtOjwtW1xcXS1+XSokLztcbnZhciBwYXJzZSA9IChjb29raWUsIG5hbWUpID0+IHtcbiAgaWYgKG5hbWUgJiYgY29va2llLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IHBhaXJzID0gY29va2llLnRyaW0oKS5zcGxpdChcIjtcIik7XG4gIGNvbnN0IHBhcnNlZENvb2tpZSA9IHt9O1xuICBmb3IgKGxldCBwYWlyU3RyIG9mIHBhaXJzKSB7XG4gICAgcGFpclN0ciA9IHBhaXJTdHIudHJpbSgpO1xuICAgIGNvbnN0IHZhbHVlU3RhcnRQb3MgPSBwYWlyU3RyLmluZGV4T2YoXCI9XCIpO1xuICAgIGlmICh2YWx1ZVN0YXJ0UG9zID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGNvb2tpZU5hbWUgPSBwYWlyU3RyLnN1YnN0cmluZygwLCB2YWx1ZVN0YXJ0UG9zKS50cmltKCk7XG4gICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gY29va2llTmFtZSB8fCAhdmFsaWRDb29raWVOYW1lUmVnRXgudGVzdChjb29raWVOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBjb29raWVWYWx1ZSA9IHBhaXJTdHIuc3Vic3RyaW5nKHZhbHVlU3RhcnRQb3MgKyAxKS50cmltKCk7XG4gICAgaWYgKGNvb2tpZVZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgY29va2llVmFsdWUuZW5kc1dpdGgoJ1wiJykpIHtcbiAgICAgIGNvb2tpZVZhbHVlID0gY29va2llVmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgIH1cbiAgICBpZiAodmFsaWRDb29raWVWYWx1ZVJlZ0V4LnRlc3QoY29va2llVmFsdWUpKSB7XG4gICAgICBwYXJzZWRDb29raWVbY29va2llTmFtZV0gPSBjb29raWVWYWx1ZS5pbmRleE9mKFwiJVwiKSAhPT0gLTEgPyB0cnlEZWNvZGUoY29va2llVmFsdWUsIGRlY29kZVVSSUNvbXBvbmVudF8pIDogY29va2llVmFsdWU7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlZENvb2tpZTtcbn07XG52YXIgcGFyc2VTaWduZWQgPSBhc3luYyAoY29va2llLCBzZWNyZXQsIG5hbWUpID0+IHtcbiAgY29uc3QgcGFyc2VkQ29va2llID0ge307XG4gIGNvbnN0IHNlY3JldEtleSA9IGF3YWl0IGdldENyeXB0b0tleShzZWNyZXQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJzZShjb29raWUsIG5hbWUpKSkge1xuICAgIGNvbnN0IHNpZ25hdHVyZVN0YXJ0UG9zID0gdmFsdWUubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChzaWduYXR1cmVTdGFydFBvcyA8IDEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWduZWRWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBzaWduYXR1cmVTdGFydFBvcyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdmFsdWUuc3Vic3RyaW5nKHNpZ25hdHVyZVN0YXJ0UG9zICsgMSk7XG4gICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDQ0IHx8ICFzaWduYXR1cmUuZW5kc1dpdGgoXCI9XCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IHZlcmlmeVNpZ25hdHVyZShzaWduYXR1cmUsIHNpZ25lZFZhbHVlLCBzZWNyZXRLZXkpO1xuICAgIHBhcnNlZENvb2tpZVtrZXldID0gaXNWZXJpZmllZCA/IHNpZ25lZFZhbHVlIDogZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZENvb2tpZTtcbn07XG52YXIgX3NlcmlhbGl6ZSA9IChuYW1lLCB2YWx1ZSwgb3B0ID0ge30pID0+IHtcbiAgbGV0IGNvb2tpZSA9IGAke25hbWV9PSR7dmFsdWV9YDtcbiAgaWYgKG5hbWUuc3RhcnRzV2l0aChcIl9fU2VjdXJlLVwiKSAmJiAhb3B0LnNlY3VyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIl9fU2VjdXJlLSBDb29raWUgbXVzdCBoYXZlIFNlY3VyZSBhdHRyaWJ1dGVzXCIpO1xuICB9XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgoXCJfX0hvc3QtXCIpKSB7XG4gICAgaWYgKCFvcHQuc2VjdXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfX0hvc3QtIENvb2tpZSBtdXN0IGhhdmUgU2VjdXJlIGF0dHJpYnV0ZXNcIik7XG4gICAgfVxuICAgIGlmIChvcHQucGF0aCAhPT0gXCIvXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignX19Ib3N0LSBDb29raWUgbXVzdCBoYXZlIFBhdGggYXR0cmlidXRlcyB3aXRoIFwiL1wiJyk7XG4gICAgfVxuICAgIGlmIChvcHQuZG9tYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfX0hvc3QtIENvb2tpZSBtdXN0IG5vdCBoYXZlIERvbWFpbiBhdHRyaWJ1dGVzXCIpO1xuICAgIH1cbiAgfVxuICBpZiAob3B0ICYmIHR5cGVvZiBvcHQubWF4QWdlID09PSBcIm51bWJlclwiICYmIG9wdC5tYXhBZ2UgPj0gMCkge1xuICAgIGlmIChvcHQubWF4QWdlID4gMzQ1NmU0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ29va2llcyBNYXgtQWdlIFNIT1VMRCBOT1QgYmUgZ3JlYXRlciB0aGFuIDQwMCBkYXlzICgzNDU2MDAwMCBzZWNvbmRzKSBpbiBkdXJhdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29va2llICs9IGA7IE1heC1BZ2U9JHtvcHQubWF4QWdlIHwgMH1gO1xuICB9XG4gIGlmIChvcHQuZG9tYWluICYmIG9wdC5wcmVmaXggIT09IFwiaG9zdFwiKSB7XG4gICAgY29va2llICs9IGA7IERvbWFpbj0ke29wdC5kb21haW59YDtcbiAgfVxuICBpZiAob3B0LnBhdGgpIHtcbiAgICBjb29raWUgKz0gYDsgUGF0aD0ke29wdC5wYXRofWA7XG4gIH1cbiAgaWYgKG9wdC5leHBpcmVzKSB7XG4gICAgaWYgKG9wdC5leHBpcmVzLmdldFRpbWUoKSAtIERhdGUubm93KCkgPiAzNDU2ZTcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDb29raWVzIEV4cGlyZXMgU0hPVUxEIE5PVCBiZSBncmVhdGVyIHRoYW4gNDAwIGRheXMgKDM0NTYwMDAwIHNlY29uZHMpIGluIHRoZSBmdXR1cmUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvb2tpZSArPSBgOyBFeHBpcmVzPSR7b3B0LmV4cGlyZXMudG9VVENTdHJpbmcoKX1gO1xuICB9XG4gIGlmIChvcHQuaHR0cE9ubHkpIHtcbiAgICBjb29raWUgKz0gXCI7IEh0dHBPbmx5XCI7XG4gIH1cbiAgaWYgKG9wdC5zZWN1cmUpIHtcbiAgICBjb29raWUgKz0gXCI7IFNlY3VyZVwiO1xuICB9XG4gIGlmIChvcHQuc2FtZVNpdGUpIHtcbiAgICBjb29raWUgKz0gYDsgU2FtZVNpdGU9JHtvcHQuc2FtZVNpdGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBvcHQuc2FtZVNpdGUuc2xpY2UoMSl9YDtcbiAgfVxuICBpZiAob3B0LnByaW9yaXR5KSB7XG4gICAgY29va2llICs9IGA7IFByaW9yaXR5PSR7b3B0LnByaW9yaXR5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgb3B0LnByaW9yaXR5LnNsaWNlKDEpfWA7XG4gIH1cbiAgaWYgKG9wdC5wYXJ0aXRpb25lZCkge1xuICAgIGlmICghb3B0LnNlY3VyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFydGl0aW9uZWQgQ29va2llIG11c3QgaGF2ZSBTZWN1cmUgYXR0cmlidXRlc1wiKTtcbiAgICB9XG4gICAgY29va2llICs9IFwiOyBQYXJ0aXRpb25lZFwiO1xuICB9XG4gIHJldHVybiBjb29raWU7XG59O1xudmFyIHNlcmlhbGl6ZSA9IChuYW1lLCB2YWx1ZSwgb3B0KSA9PiB7XG4gIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgcmV0dXJuIF9zZXJpYWxpemUobmFtZSwgdmFsdWUsIG9wdCk7XG59O1xudmFyIHNlcmlhbGl6ZVNpZ25lZCA9IGFzeW5jIChuYW1lLCB2YWx1ZSwgc2VjcmV0LCBvcHQgPSB7fSkgPT4ge1xuICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBtYWtlU2lnbmF0dXJlKHZhbHVlLCBzZWNyZXQpO1xuICB2YWx1ZSA9IGAke3ZhbHVlfS4ke3NpZ25hdHVyZX1gO1xuICB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gIHJldHVybiBfc2VyaWFsaXplKG5hbWUsIHZhbHVlLCBvcHQpO1xufTtcbmV4cG9ydCB7XG4gIHBhcnNlLFxuICBwYXJzZVNpZ25lZCxcbiAgc2VyaWFsaXplLFxuICBzZXJpYWxpemVTaWduZWRcbn07XG4iLAogICAgIi8vIHNyYy9oZWxwZXIvY29va2llL2luZGV4LnRzXG5pbXBvcnQgeyBwYXJzZSwgcGFyc2VTaWduZWQsIHNlcmlhbGl6ZSwgc2VyaWFsaXplU2lnbmVkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Nvb2tpZS5qc1wiO1xudmFyIGdldENvb2tpZSA9IChjLCBrZXksIHByZWZpeCkgPT4ge1xuICBjb25zdCBjb29raWUgPSBjLnJlcS5yYXcuaGVhZGVycy5nZXQoXCJDb29raWVcIik7XG4gIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKCFjb29raWUpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBmaW5hbEtleSA9IGtleTtcbiAgICBpZiAocHJlZml4ID09PSBcInNlY3VyZVwiKSB7XG4gICAgICBmaW5hbEtleSA9IFwiX19TZWN1cmUtXCIgKyBrZXk7XG4gICAgfSBlbHNlIGlmIChwcmVmaXggPT09IFwiaG9zdFwiKSB7XG4gICAgICBmaW5hbEtleSA9IFwiX19Ib3N0LVwiICsga2V5O1xuICAgIH1cbiAgICBjb25zdCBvYmoyID0gcGFyc2UoY29va2llLCBmaW5hbEtleSk7XG4gICAgcmV0dXJuIG9iajJbZmluYWxLZXldO1xuICB9XG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IG9iaiA9IHBhcnNlKGNvb2tpZSk7XG4gIHJldHVybiBvYmo7XG59O1xudmFyIGdldFNpZ25lZENvb2tpZSA9IGFzeW5jIChjLCBzZWNyZXQsIGtleSwgcHJlZml4KSA9PiB7XG4gIGNvbnN0IGNvb2tpZSA9IGMucmVxLnJhdy5oZWFkZXJzLmdldChcIkNvb2tpZVwiKTtcbiAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAoIWNvb2tpZSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgbGV0IGZpbmFsS2V5ID0ga2V5O1xuICAgIGlmIChwcmVmaXggPT09IFwic2VjdXJlXCIpIHtcbiAgICAgIGZpbmFsS2V5ID0gXCJfX1NlY3VyZS1cIiArIGtleTtcbiAgICB9IGVsc2UgaWYgKHByZWZpeCA9PT0gXCJob3N0XCIpIHtcbiAgICAgIGZpbmFsS2V5ID0gXCJfX0hvc3QtXCIgKyBrZXk7XG4gICAgfVxuICAgIGNvbnN0IG9iajIgPSBhd2FpdCBwYXJzZVNpZ25lZChjb29raWUsIHNlY3JldCwgZmluYWxLZXkpO1xuICAgIHJldHVybiBvYmoyW2ZpbmFsS2V5XTtcbiAgfVxuICBpZiAoIWNvb2tpZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBvYmogPSBhd2FpdCBwYXJzZVNpZ25lZChjb29raWUsIHNlY3JldCk7XG4gIHJldHVybiBvYmo7XG59O1xudmFyIGdlbmVyYXRlQ29va2llID0gKG5hbWUsIHZhbHVlLCBvcHQpID0+IHtcbiAgbGV0IGNvb2tpZTtcbiAgaWYgKG9wdD8ucHJlZml4ID09PSBcInNlY3VyZVwiKSB7XG4gICAgY29va2llID0gc2VyaWFsaXplKFwiX19TZWN1cmUtXCIgKyBuYW1lLCB2YWx1ZSwgeyBwYXRoOiBcIi9cIiwgLi4ub3B0LCBzZWN1cmU6IHRydWUgfSk7XG4gIH0gZWxzZSBpZiAob3B0Py5wcmVmaXggPT09IFwiaG9zdFwiKSB7XG4gICAgY29va2llID0gc2VyaWFsaXplKFwiX19Ib3N0LVwiICsgbmFtZSwgdmFsdWUsIHtcbiAgICAgIC4uLm9wdCxcbiAgICAgIHBhdGg6IFwiL1wiLFxuICAgICAgc2VjdXJlOiB0cnVlLFxuICAgICAgZG9tYWluOiB2b2lkIDBcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb29raWUgPSBzZXJpYWxpemUobmFtZSwgdmFsdWUsIHsgcGF0aDogXCIvXCIsIC4uLm9wdCB9KTtcbiAgfVxuICByZXR1cm4gY29va2llO1xufTtcbnZhciBzZXRDb29raWUgPSAoYywgbmFtZSwgdmFsdWUsIG9wdCkgPT4ge1xuICBjb25zdCBjb29raWUgPSBnZW5lcmF0ZUNvb2tpZShuYW1lLCB2YWx1ZSwgb3B0KTtcbiAgYy5oZWFkZXIoXCJTZXQtQ29va2llXCIsIGNvb2tpZSwgeyBhcHBlbmQ6IHRydWUgfSk7XG59O1xudmFyIGdlbmVyYXRlU2lnbmVkQ29va2llID0gYXN5bmMgKG5hbWUsIHZhbHVlLCBzZWNyZXQsIG9wdCkgPT4ge1xuICBsZXQgY29va2llO1xuICBpZiAob3B0Py5wcmVmaXggPT09IFwic2VjdXJlXCIpIHtcbiAgICBjb29raWUgPSBhd2FpdCBzZXJpYWxpemVTaWduZWQoXCJfX1NlY3VyZS1cIiArIG5hbWUsIHZhbHVlLCBzZWNyZXQsIHtcbiAgICAgIHBhdGg6IFwiL1wiLFxuICAgICAgLi4ub3B0LFxuICAgICAgc2VjdXJlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob3B0Py5wcmVmaXggPT09IFwiaG9zdFwiKSB7XG4gICAgY29va2llID0gYXdhaXQgc2VyaWFsaXplU2lnbmVkKFwiX19Ib3N0LVwiICsgbmFtZSwgdmFsdWUsIHNlY3JldCwge1xuICAgICAgLi4ub3B0LFxuICAgICAgcGF0aDogXCIvXCIsXG4gICAgICBzZWN1cmU6IHRydWUsXG4gICAgICBkb21haW46IHZvaWQgMFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvb2tpZSA9IGF3YWl0IHNlcmlhbGl6ZVNpZ25lZChuYW1lLCB2YWx1ZSwgc2VjcmV0LCB7IHBhdGg6IFwiL1wiLCAuLi5vcHQgfSk7XG4gIH1cbiAgcmV0dXJuIGNvb2tpZTtcbn07XG52YXIgc2V0U2lnbmVkQ29va2llID0gYXN5bmMgKGMsIG5hbWUsIHZhbHVlLCBzZWNyZXQsIG9wdCkgPT4ge1xuICBjb25zdCBjb29raWUgPSBhd2FpdCBnZW5lcmF0ZVNpZ25lZENvb2tpZShuYW1lLCB2YWx1ZSwgc2VjcmV0LCBvcHQpO1xuICBjLmhlYWRlcihcInNldC1jb29raWVcIiwgY29va2llLCB7IGFwcGVuZDogdHJ1ZSB9KTtcbn07XG52YXIgZGVsZXRlQ29va2llID0gKGMsIG5hbWUsIG9wdCkgPT4ge1xuICBjb25zdCBkZWxldGVkQ29va2llID0gZ2V0Q29va2llKGMsIG5hbWUsIG9wdD8ucHJlZml4KTtcbiAgc2V0Q29va2llKGMsIG5hbWUsIFwiXCIsIHsgLi4ub3B0LCBtYXhBZ2U6IDAgfSk7XG4gIHJldHVybiBkZWxldGVkQ29va2llO1xufTtcbmV4cG9ydCB7XG4gIGRlbGV0ZUNvb2tpZSxcbiAgZ2VuZXJhdGVDb29raWUsXG4gIGdlbmVyYXRlU2lnbmVkQ29va2llLFxuICBnZXRDb29raWUsXG4gIGdldFNpZ25lZENvb2tpZSxcbiAgc2V0Q29va2llLFxuICBzZXRTaWduZWRDb29raWVcbn07XG4iLAogICAgIi8vIHNyYy9odHRwLWV4Y2VwdGlvbi50c1xudmFyIEhUVFBFeGNlcHRpb24gPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgcmVzO1xuICBzdGF0dXM7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBIVFRQRXhjZXB0aW9uYC5cbiAgICogQHBhcmFtIHN0YXR1cyAtIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHRoZSBleGNlcHRpb24uIERlZmF1bHRzIHRvIDUwMC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBleGNlcHRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGF0dXMgPSA1MDAsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zPy5tZXNzYWdlLCB7IGNhdXNlOiBvcHRpb25zPy5jYXVzZSB9KTtcbiAgICB0aGlzLnJlcyA9IG9wdGlvbnM/LnJlcztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhjZXB0aW9uLlxuICAgKiBJZiBhIHJlc3BvbnNlIG9iamVjdCBpcyBub3QgcHJvdmlkZWQsIGEgbmV3IHJlc3BvbnNlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgc3RhdHVzIGNvZGUuXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvYmplY3QuXG4gICAqL1xuICBnZXRSZXNwb25zZSgpIHtcbiAgICBpZiAodGhpcy5yZXMpIHtcbiAgICAgIGNvbnN0IG5ld1Jlc3BvbnNlID0gbmV3IFJlc3BvbnNlKHRoaXMucmVzLmJvZHksIHtcbiAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5yZXMuaGVhZGVyc1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3UmVzcG9uc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5tZXNzYWdlLCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQge1xuICBIVFRQRXhjZXB0aW9uXG59O1xuIiwKICAgICIvLyBzcmMvdXRpbHMvYnVmZmVyLnRzXG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tIFwiLi9jcnlwdG8uanNcIjtcbnZhciBlcXVhbCA9IChhLCBiKSA9PiB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHZhID0gbmV3IERhdGFWaWV3KGEpO1xuICBjb25zdCB2YiA9IG5ldyBEYXRhVmlldyhiKTtcbiAgbGV0IGkgPSB2YS5ieXRlTGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKHZhLmdldFVpbnQ4KGkpICE9PSB2Yi5nZXRVaW50OChpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgdGltaW5nU2FmZUVxdWFsID0gYXN5bmMgKGEsIGIsIGhhc2hGdW5jdGlvbikgPT4ge1xuICBpZiAoIWhhc2hGdW5jdGlvbikge1xuICAgIGhhc2hGdW5jdGlvbiA9IHNoYTI1NjtcbiAgfVxuICBjb25zdCBbc2EsIHNiXSA9IGF3YWl0IFByb21pc2UuYWxsKFtoYXNoRnVuY3Rpb24oYSksIGhhc2hGdW5jdGlvbihiKV0pO1xuICBpZiAoIXNhIHx8ICFzYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gc2EgPT09IHNiICYmIGEgPT09IGI7XG59O1xudmFyIGJ1ZmZlclRvU3RyaW5nID0gKGJ1ZmZlcikgPT4ge1xuICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICBjb25zdCBlbmMgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgICByZXR1cm4gZW5jLmRlY29kZShidWZmZXIpO1xuICB9XG4gIHJldHVybiBidWZmZXI7XG59O1xudmFyIGJ1ZmZlclRvRm9ybURhdGEgPSAoYXJyYXlCdWZmZXIsIGNvbnRlbnRUeXBlKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKGFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgXCJDb250ZW50LVR5cGVcIjogY29udGVudFR5cGVcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzcG9uc2UuZm9ybURhdGEoKTtcbn07XG5leHBvcnQge1xuICBidWZmZXJUb0Zvcm1EYXRhLFxuICBidWZmZXJUb1N0cmluZyxcbiAgZXF1YWwsXG4gIHRpbWluZ1NhZmVFcXVhbFxufTtcbiIsCiAgICAiLy8gc3JjL3ZhbGlkYXRvci92YWxpZGF0b3IudHNcbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gXCIuLi9oZWxwZXIvY29va2llL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBIVFRQRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2h0dHAtZXhjZXB0aW9uLmpzXCI7XG5pbXBvcnQgeyBidWZmZXJUb0Zvcm1EYXRhIH0gZnJvbSBcIi4uL3V0aWxzL2J1ZmZlci5qc1wiO1xudmFyIGpzb25SZWdleCA9IC9eYXBwbGljYXRpb25cXC8oW2Etei1cXC5dK1xcKyk/anNvbig7XFxzKlthLXpBLVowLTlcXC1dK1xcPShbXjtdKykpKiQvO1xudmFyIG11bHRpcGFydFJlZ2V4ID0gL15tdWx0aXBhcnRcXC9mb3JtLWRhdGEoO1xccz9ib3VuZGFyeT1bYS16QS1aMC05J1wiKCkrXyxcXC0uLzo9P10rKT8kLztcbnZhciB1cmxlbmNvZGVkUmVnZXggPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkKDtcXHMqW2EtekEtWjAtOVxcLV0rXFw9KFteO10rKSkqJC87XG52YXIgdmFsaWRhdG9yID0gKHRhcmdldCwgdmFsaWRhdGlvbkZ1bmMpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChjLCBuZXh0KSA9PiB7XG4gICAgbGV0IHZhbHVlID0ge307XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBjLnJlcS5oZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XG4gICAgc3dpdGNoICh0YXJnZXQpIHtcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIGlmICghY29udGVudFR5cGUgfHwgIWpzb25SZWdleC50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBhd2FpdCBjLnJlcS5qc29uKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcIk1hbGZvcm1lZCBKU09OIGluIHJlcXVlc3QgYm9keVwiO1xuICAgICAgICAgIHRocm93IG5ldyBIVFRQRXhjZXB0aW9uKDQwMCwgeyBtZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZvcm1cIjoge1xuICAgICAgICBpZiAoIWNvbnRlbnRUeXBlIHx8ICEobXVsdGlwYXJ0UmVnZXgudGVzdChjb250ZW50VHlwZSkgfHwgdXJsZW5jb2RlZFJlZ2V4LnRlc3QoY29udGVudFR5cGUpKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb3JtRGF0YTtcbiAgICAgICAgaWYgKGMucmVxLmJvZHlDYWNoZS5mb3JtRGF0YSkge1xuICAgICAgICAgIGZvcm1EYXRhID0gYXdhaXQgYy5yZXEuYm9keUNhY2hlLmZvcm1EYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGMucmVxLmFycmF5QnVmZmVyKCk7XG4gICAgICAgICAgICBmb3JtRGF0YSA9IGF3YWl0IGJ1ZmZlclRvRm9ybURhdGEoYXJyYXlCdWZmZXIsIGNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgIGMucmVxLmJvZHlDYWNoZS5mb3JtRGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gXCJNYWxmb3JtZWQgRm9ybURhdGEgcmVxdWVzdC5cIjtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZSBpbnN0YW5jZW9mIEVycm9yID8gYCAke2UubWVzc2FnZX1gIDogYCAke1N0cmluZyhlKX1gO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEhUVFBFeGNlcHRpb24oNDAwLCB7IG1lc3NhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm0gPSB7fTtcbiAgICAgICAgZm9ybURhdGEuZm9yRWFjaCgodmFsdWUyLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5LmVuZHNXaXRoKFwiW11cIikpIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChmb3JtW2tleV0gPz89IFtdKS5wdXNoKHZhbHVlMik7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZvcm1ba2V5XSkpIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGZvcm1ba2V5XS5wdXNoKHZhbHVlMik7XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgaW4gZm9ybSkge1xuICAgICAgICAgICAgZm9ybVtrZXldID0gW2Zvcm1ba2V5XSwgdmFsdWUyXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybVtrZXldID0gdmFsdWUyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gZm9ybTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFwicXVlcnlcIjpcbiAgICAgICAgdmFsdWUgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoYy5yZXEucXVlcmllcygpKS5tYXAoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHYubGVuZ3RoID09PSAxID8gW2ssIHZbMF1dIDogW2ssIHZdO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBhcmFtXCI6XG4gICAgICAgIHZhbHVlID0gYy5yZXEucGFyYW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaGVhZGVyXCI6XG4gICAgICAgIHZhbHVlID0gYy5yZXEuaGVhZGVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNvb2tpZVwiOlxuICAgICAgICB2YWx1ZSA9IGdldENvb2tpZShjKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHZhbGlkYXRpb25GdW5jKHZhbHVlLCBjKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGMucmVxLmFkZFZhbGlkYXRlZERhdGEodGFyZ2V0LCByZXMpO1xuICAgIHJldHVybiBhd2FpdCBuZXh0KCk7XG4gIH07XG59O1xuZXhwb3J0IHtcbiAgdmFsaWRhdG9yXG59O1xuIiwKICAgICIvLyBzcmMvdmFsaWRhdG9yL2luZGV4LnRzXG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi92YWxpZGF0b3IuanNcIjtcbmV4cG9ydCB7XG4gIHZhbGlkYXRvclxufTtcbiIsCiAgICAiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmxldCBhcHBOYW1lO1xubGV0IGFwcFZlcnNpb247XG5sZXQgaW5pdGVkID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBpZiAoaW5pdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZiA9IGpvaW4oaW1wb3J0Lm1ldGEuZGlyLCBpc1Byb2R1Y3Rpb24oKSA/ICdwYWNrYWdlLmpzb24nIDogJy8uLi9wYWNrYWdlLmpzb24nKTtcbiAgICBpZiAoZXhpc3RzU3luYyhmKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZiwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgYXBwTmFtZSA9IHBrZy5uYW1lO1xuICAgICAgICAgICAgYXBwVmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGRlZmF1bHRzIGlmIHBhcnNpbmcgZmFpbHNcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0ZWQgPSB0cnVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBTREsgVmVyc2lvbiB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIHRoaXMgYXBwXG4gKlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTREtWZXJzaW9uKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0xPVURfU0RLX1ZFUlNJT04gPz8gJ3Vua25vd24nO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBBcHAgTmFtZSB0aGF0IHdhcyB1c2VkIHdoZW4gdGhpcyBhcHAgd2FzIGJ1aWx0XG4gKlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBOYW1lKCkge1xuICAgIGluaXQoKTtcbiAgICByZXR1cm4gYXBwTmFtZSA/PyAndW5rbm93bic7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIEFwcCBWZXJzaW9uIHRoYXQgd2FzIHVzZWQgd2hlbiB0aGlzIGFwcCB3YXMgYnVpbHRcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcFZlcnNpb24oKSB7XG4gICAgaW5pdCgpO1xuICAgIHJldHVybiBhcHBWZXJzaW9uID8/ICd1bmtub3duJztcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgT3JnYW5pemF0aW9uIElEIGZvciB0aGlzIGFwcFxuICpcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JnYW5pemF0aW9uSWQoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9DTE9VRF9PUkdfSUQ7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIFByb2plY3QgSUQgZm9yIHRoaXMgYXBwXG4gKlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9qZWN0SWQoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9DTE9VRF9QUk9KRUNUX0lEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBEZXBsb3ltZW50IElEIGZvciB0aGlzIGFwcCB0aGF0IHdhcyBkZXBsb3llZFxuICpcbiAqIEByZXR1cm5zIHN0cmluZyB8IHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwbG95bWVudElkKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0xPVURfREVQTE9ZTUVOVF9JRDtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiBkZXYgbW9kZVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGV2TW9kZSgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NES19ERVZfTU9ERSA9PT0gJ3RydWUnO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHByb2R1Y3Rpb24gbW9kZVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZHVjdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0RW52aXJvbm1lbnQoKSA9PT0gJ3Byb2R1Y3Rpb24nICYmICFpc0Rldk1vZGUoKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgQ0xJIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB3aGVuIHRoaXMgYXBwIHdhcyBidWlsdFxuICpcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q0xJVmVyc2lvbigpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX0NMSV9WRVJTSU9OID8/ICd1bmtub3duJztcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZW52aXJvbm1lbnQgc2V0dGluZyBmb3IgdGhpcyBhcHBcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudmlyb25tZW50KCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfRU5WSVJPTk1FTlQgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJ2RldmVsb3BtZW50Jztcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBBR0VOVFVJVFlfU0RLX0tFWSBpcyBzZXRcbiAqXG4gKiBAcmV0dXJucyBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhlbnRpY2F0ZWQoKSB7XG4gICAgcmV0dXJuICEhcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NES19LRVk7XG59XG4vKipcbiAqIFN5bWJvbCBmb3IgYWNjZXNzaW5nIGludGVybmFsIHJ1bnRpbWUgc3RhdGUuXG4gKiBEZWZpbmVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFHRU5UX1JVTlRJTUUgPSBTeW1ib2woJ0FHRU5UX1JVTlRJTUUnKTtcbi8qKlxuICogU3ltYm9sIGZvciBhY2Nlc3NpbmcgaW50ZXJuYWwgYWdlbnQgZnJvbSBBZ2VudFJ1bm5lci5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgSU5URVJOQUxfQUdFTlQgPSBTeW1ib2woJ0lOVEVSTkFMX0FHRU5UJyk7XG4vKipcbiAqIFN5bWJvbCBmb3IgdHJhY2tpbmcgdGhlIGN1cnJlbnQgZXhlY3V0aW5nIGFnZW50IChmb3IgdGVsZW1ldHJ5KS5cbiAqIE5vdCBleHBvc2VkIG9uIHB1YmxpYyBBZ2VudENvbnRleHQgaW50ZXJmYWNlLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDVVJSRU5UX0FHRU5UID0gU3ltYm9sKCdDVVJSRU5UX0FHRU5UJyk7XG4vKipcbiAqIFN5bWJvbCBmb3IgdHJhY2tpbmcgYWdlbnQgSURzIHRoYXQgaGF2ZSBleGVjdXRlZCBpbiB0aGlzIHNlc3Npb24uXG4gKiBVc2VkIGluIHN0YW5kYWxvbmUgY29udGV4dHMgdG8gdHJhY2sgYWdlbnRzIGZvciBzZXNzaW9uIGV2ZW50cy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQUdFTlRfSURTID0gU3ltYm9sKCdBR0VOVF9JRFMnKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9jb25maWcuanMubWFwIiwKICAgICIvKipcbiAqIEFQSSBDbGllbnQgZm9yIEFnZW50dWl0eSBQbGF0Zm9ybVxuICpcbiAqIEhhbmRsZXMgSFRUUCByZXF1ZXN0cyB0byB0aGUgQVBJIHdpdGggYXV0b21hdGljIGVycm9yIHBhcnNpbmcgYW5kIFVzZXItQWdlbnQgaGVhZGVycy5cbiAqL1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuY29uc3QgWm9kSXNzdWVzU2NoZW1hID0gei5hcnJheSh6Lm9iamVjdCh7XG4gICAgY29kZTogei5zdHJpbmcoKSxcbiAgICBpbnB1dDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBwYXRoOiB6LmFycmF5KHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSksXG4gICAgbWVzc2FnZTogei5zdHJpbmcoKSxcbn0pKTtcbmNvbnN0IHRvSXNzdWVzID0gKGlzc3VlcykgPT4ge1xuICAgIHJldHVybiBpc3N1ZXMubWFwKChpc3N1ZSkgPT4gKHtcbiAgICAgICAgY29kZTogaXNzdWUuY29kZSxcbiAgICAgICAgaW5wdXQ6IGlzc3VlLmlucHV0LFxuICAgICAgICBwYXRoOiBpc3N1ZS5wYXRoLm1hcCgoeCkgPT4gKHR5cGVvZiB4ID09PSAnbnVtYmVyJyA/IHggOiBTdHJpbmcoeCkpKSxcbiAgICAgICAgbWVzc2FnZTogaXNzdWUubWVzc2FnZSxcbiAgICB9KSk7XG59O1xuY29uc3QgQVBJRXJyb3JTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgc3VjY2Vzczogei5ib29sZWFuKCksXG4gICAgY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBlcnJvcjogelxuICAgICAgICAudW5pb24oW1xuICAgICAgICB6LnN0cmluZygpLFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgICAgICBpc3N1ZXM6IFpvZElzc3Vlc1NjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgICB9KSxcbiAgICBdKVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICBkZXRhaWxzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IGNvbnN0IEFQSUVycm9yID0gU3RydWN0dXJlZEVycm9yKCdBUElFcnJvclJlc3BvbnNlJykoKTtcbmV4cG9ydCBjb25zdCBWYWxpZGF0aW9uSW5wdXRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmFsaWRhdGlvbklucHV0RXJyb3InLCAnVGhlcmUgd2FzIGFuIGVycm9yIHZhbGlkYXRpbmcgdGhlIEFQSSBpbnB1dCBkYXRhLicpKCk7XG5leHBvcnQgY29uc3QgVmFsaWRhdGlvbk91dHB1dEVycm9yID0gU3RydWN0dXJlZEVycm9yKCdWYWxpZGF0aW9uT3V0cHV0RXJyb3InLCAnVGhlcmUgd2FzIGFuIHVuZXhwZWN0ZWQgZXJyb3IgdmFsaWRhdGluZyB0aGUgQVBJIHJlc3BvbnNlIGRhdGEuJykoKTtcbmV4cG9ydCBjb25zdCBVcGdyYWRlUmVxdWlyZWRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVXBncmFkZVJlcXVpcmVkRXJyb3InLCAnVXBncmFkZSByZXF1aXJlZCB0byBjb250aW51ZS4gUGxlYXNlIHNlZSBodHRwczovL2FnZW50dWl0eS5kZXYvQ0xJL2luc3RhbGxhdGlvbiB0byBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFNESy4nKSgpO1xuZXhwb3J0IGNvbnN0IE1heFJldHJpZXNFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignTWF4UmV0cmllc0Vycm9yJywgJ01heCBSZXRyaWVzIGF0dGVtcHRlZCBhbmQgY29udGludWVkIGZhaWx1cmVzIGV4aGF1c3RlZC4nKTtcbmV4cG9ydCBjbGFzcyBBUElDbGllbnQge1xuICAgICNiYXNlVXJsO1xuICAgICNhcGlLZXk7XG4gICAgI2NvbmZpZztcbiAgICAjbG9nZ2VyO1xuICAgIGNvbnN0cnVjdG9yKGJhc2VVcmwsIGxvZ2dlciwgYXBpS2V5T3JDb25maWcsIGNvbmZpZykge1xuICAgICAgICB0aGlzLiNiYXNlVXJsID0gYmFzZVVybDtcbiAgICAgICAgdGhpcy4jbG9nZ2VyID0gbG9nZ2VyO1xuICAgICAgICAvLyBEZXRlY3QgaWYgdGhpcmQgcGFyYW1ldGVyIGlzIGFwaUtleSAoc3RyaW5nKSBvciBjb25maWcgKG9iamVjdClcbiAgICAgICAgaWYgKHR5cGVvZiBhcGlLZXlPckNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuI2FwaUtleSA9IGFwaUtleU9yQ29uZmlnO1xuICAgICAgICAgICAgdGhpcy4jY29uZmlnID0gY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jYXBpS2V5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy4jY29uZmlnID0gYXBpS2V5T3JDb25maWc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiNhcGlLZXkgJiYgcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NES19LRVkpIHtcbiAgICAgICAgICAgIHRoaXMuI2FwaUtleSA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9TREtfS0VZO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdFVCByZXF1ZXN0XG4gICAgICovXG4gICAgYXN5bmMgZ2V0KGVuZHBvaW50LCByZXNwb25zZVNjaGVtYSwgc2lnbmFsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0dFVCcsIGVuZHBvaW50LCByZXNwb25zZVNjaGVtYSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHNpZ25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBPU1QgcmVxdWVzdCB3aXRoIG9wdGlvbmFsIGJvZHlcbiAgICAgKi9cbiAgICBhc3luYyBwb3N0KGVuZHBvaW50LCBib2R5LCByZXNwb25zZVNjaGVtYSwgYm9keVNjaGVtYSwgc2lnbmFsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BPU1QnLCBlbmRwb2ludCwgcmVzcG9uc2VTY2hlbWEsIGJvZHksIGJvZHlTY2hlbWEsIHNpZ25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBVVCByZXF1ZXN0IHdpdGggb3B0aW9uYWwgYm9keVxuICAgICAqL1xuICAgIGFzeW5jIHB1dChlbmRwb2ludCwgYm9keSwgcmVzcG9uc2VTY2hlbWEsIGJvZHlTY2hlbWEsIHNpZ25hbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQVVQnLCBlbmRwb2ludCwgcmVzcG9uc2VTY2hlbWEsIGJvZHksIGJvZHlTY2hlbWEsIHNpZ25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERFTEVURSByZXF1ZXN0XG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlKGVuZHBvaW50LCByZXNwb25zZVNjaGVtYSwgc2lnbmFsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIGVuZHBvaW50LCByZXNwb25zZVNjaGVtYSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHNpZ25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBBVENIIHJlcXVlc3Qgd2l0aCBvcHRpb25hbCBib2R5XG4gICAgICovXG4gICAgYXN5bmMgcGF0Y2goZW5kcG9pbnQsIGJvZHksIHJlc3BvbnNlU2NoZW1hLCBib2R5U2NoZW1hLCBzaWduYWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUEFUQ0gnLCBlbmRwb2ludCwgcmVzcG9uc2VTY2hlbWEsIGJvZHksIGJvZHlTY2hlbWEsIHNpZ25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyBHRVQgcmVxdWVzdCB0aGF0IHJldHVybnMgdGhlIFJlc3BvbnNlIG9iamVjdCBkaXJlY3RseS5cbiAgICAgKiBVc2VmdWwgZm9yIHN0cmVhbWluZyByZXNwb25zZXMgd2hlcmUgeW91IG5lZWQgYWNjZXNzIHRvIHRoZSBib2R5IHN0cmVhbS5cbiAgICAgKi9cbiAgICBhc3luYyByYXdHZXQoZW5kcG9pbnQsIHNpZ25hbCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWFrZVJlcXVlc3QoJ0dFVCcsIGVuZHBvaW50LCB1bmRlZmluZWQsIHNpZ25hbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJhdyBQT1NUIHJlcXVlc3QgdGhhdCByZXR1cm5zIHRoZSBSZXNwb25zZSBvYmplY3QgZGlyZWN0bHkuXG4gICAgICogVXNlZnVsIGZvciBiaW5hcnkgdXBsb2FkcyB3aGVyZSB5b3UgbmVlZCB0byBwYXNzIHJhdyBib2R5IGRhdGEuXG4gICAgICovXG4gICAgYXN5bmMgcmF3UG9zdChlbmRwb2ludCwgYm9keSwgY29udGVudFR5cGUsIHNpZ25hbCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbWFrZVJlcXVlc3QoJ1BPU1QnLCBlbmRwb2ludCwgYm9keSwgc2lnbmFsLCBjb250ZW50VHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyaWMgcmVxdWVzdCBtZXRob2QgKHByZWZlciBIVFRQIHZlcmIgbWV0aG9kczogZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZSwgcGF0Y2gpXG4gICAgICovXG4gICAgYXN5bmMgcmVxdWVzdChtZXRob2QsIGVuZHBvaW50LCByZXNwb25zZVNjaGVtYSwgYm9keSwgYm9keVNjaGVtYSwgc2lnbmFsKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIHJlcXVlc3QgYm9keSBpZiBzY2hlbWEgcHJvdmlkZWRcbiAgICAgICAgaWYgKGJvZHkgIT09IHVuZGVmaW5lZCAmJiBib2R5U2NoZW1hKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYm9keVNjaGVtYS5zYWZlUGFyc2UoYm9keSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uSW5wdXRFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogdG9Jc3N1ZXModmFsaWRhdGlvblJlc3VsdC5lcnJvci5pc3N1ZXMpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy4jbWFrZVJlcXVlc3QobWV0aG9kLCBlbmRwb2ludCwgYm9keSwgc2lnbmFsKTtcbiAgICAgICAgLy8gSGFuZGxlIGVtcHR5IHJlc3BvbnNlcyAoMjA0IG9yIHplcm8tbGVuZ3RoIGJvZHkpXG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQgfHwgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykgPT09ICcwJykge1xuICAgICAgICAgICAgZGF0YSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRleHQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGU/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlU2NoZW1hKSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSByZXNwb25zZVxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25PdXRwdXRFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHVybDogZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogdG9Jc3N1ZXModmFsaWRhdGlvblJlc3VsdC5lcnJvci5pc3N1ZXMpLFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNlc3Npb24taWQnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXN5bmMgI21ha2VSZXF1ZXN0KG1ldGhvZCwgZW5kcG9pbnQsIGJvZHksIHNpZ25hbCwgY29udGVudFR5cGUpIHtcbiAgICAgICAgdGhpcy4jbG9nZ2VyLnRyYWNlKCdzZW5kaW5nICVzIHRvICVzJXMnLCBtZXRob2QsIHRoaXMuI2Jhc2VVcmwsIGVuZHBvaW50KTtcbiAgICAgICAgY29uc3QgbWF4UmV0cmllcyA9IHRoaXMuI2NvbmZpZz8ubWF4UmV0cmllcyA/PyAzO1xuICAgICAgICBjb25zdCBiYXNlRGVsYXlNcyA9IHRoaXMuI2NvbmZpZz8ucmV0cnlEZWxheU1zID8/IDEwMDtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy4jYmFzZVVybH0ke2VuZHBvaW50fWA7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGUgPz8gJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9O1xuICAgICAgICAvLyBPbmx5IHNldCBBY2NlcHQgaGVhZGVyIGZvciBKU09OIHJlcXVlc3RzIChub3QgYmluYXJ5IHVwbG9hZHMpXG4gICAgICAgIGlmICghY29udGVudFR5cGUgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgICAgICAgaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI2NvbmZpZz8udXNlckFnZW50KSB7XG4gICAgICAgICAgICBoZWFkZXJzWydVc2VyLUFnZW50J10gPSB0aGlzLiNjb25maWcudXNlckFnZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiNhcGlLZXkpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0aGlzLiNhcGlLZXl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jY29uZmlnPy5oZWFkZXJzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLiNjb25maWcuaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiAoaGVhZGVyc1trZXldID0gdGhpcy4jY29uZmlnLmhlYWRlcnNba2V5XSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhblJldHJ5ID0gIShib2R5IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pOyAvLyB3ZSBjYW5ub3Qgc2FmZWx5IHJldHJ5IGEgUmVhZGFibGVTdHJlYW0gYXMgYm9keVxuICAgICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlICE9PSAnYXBwbGljYXRpb24vanNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCdmZXRjaCByZXR1cm5lZCBhbiBlcnJvciB0cnlpbmcgdG8gYWNjZXNzOiAlcy4gJXMnLCB1cmwsIGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2V4ID0gZXg7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRyeWFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHJldHJ5YWJsZSBuZXR3b3JrIGVycm9yc1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2V4LmNvZGUgPT09ICdDb25uZWN0aW9uUmVmdXNlZCcgfHwgX2V4LmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeWFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9leC5uYW1lID09PSAnVHlwZUVycm9yJyB8fCBleCBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZUVycm9yIGZyb20gZmV0Y2ggdHlwaWNhbGx5IGluZGljYXRlcyBuZXR3b3JrIGlzc3Vlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNTAzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlOiBleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXNlc3Npb24taWQnKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgcmV0cnkgb24gc3BlY2lmaWMgc3RhdHVzIGNvZGVzICg0MDksIDUwMSwgNTAzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5YWJsZVN0YXR1c2VzID0gWzQwOSwgNTAxLCA1MDNdO1xuICAgICAgICAgICAgICAgIGlmIChjYW5SZXRyeSAmJiByZXRyeWFibGVTdGF0dXNlcy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpICYmIGF0dGVtcHQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWxheU1zID0gdGhpcy4jZ2V0UmV0cnlEZWxheShhdHRlbXB0LCBiYXNlRGVsYXlNcyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciA0MDksIGNoZWNrIGZvciByYXRlIGxpbWl0IGhlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYXRlTGltaXREZWxheSA9IHRoaXMuI2dldFJhdGVMaW1pdERlbGF5KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYXRlTGltaXREZWxheSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5TXMgPSByYXRlTGltaXREZWxheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZGVidWcoYEdvdCA0MDkgc2VuZGluZyB0byAke3VybH0gd2l0aCByYXRlIGxpbWl0IGhlYWRlcnMsIHdhaXRpbmcgJHtkZWxheU1zfW1zIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7bWF4UmV0cmllcyArIDF9LCB3aWxsIGRlbGF5ICR7ZGVsYXlNc31tcyksIHNlc3Npb25JZDogJHtzZXNzaW9uSWQgPz8gbnVsbH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlci5kZWJ1ZyhgR290IDQwOSBzZW5kaW5nIHRvICR7dXJsfSwgcmV0cnlpbmcgd2l0aCBiYWNrb2ZmICR7ZGVsYXlNc31tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke21heFJldHJpZXMgKyAxfSwgd2lsbCBkZWxheSAke2RlbGF5TXN9bXMpLCBzZXNzaW9uSWQ6ICR7c2Vzc2lvbklkID8/IG51bGx9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZGVidWcoYEdvdCAke3Jlc3BvbnNlLnN0YXR1c30gc2VuZGluZyB0byAke3VybH0sIHJldHJ5aW5nIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7bWF4UmV0cmllcyArIDF9LCB3aWxsIGRlbGF5ICR7ZGVsYXlNc31tcyksIHNlc3Npb25JZDogJHtzZXNzaW9uSWQgPz8gbnVsbH1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNzbGVlcChkZWxheU1zKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKGBhZnRlciBzbGVlcCBmb3IgJHt1cmx9LCBzZXNzaW9uSWQ6ICR7c2Vzc2lvbklkID8/IG51bGx9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgcmVzcG9uc2VzXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JEYXRhO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGF0dGVtcHQgdG8gcGFyc2UgYXMgSlNPTiBpZiB0aGUgY29udGVudCB0eXBlIGluZGljYXRlcyBKU09OXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSnNvblJlc3BvbnNlID0gY29udGVudFR5cGU/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykgfHwgY29udGVudFR5cGU/LmluY2x1ZGVzKCcranNvbicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNKc29uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEYXRhID0gQVBJRXJyb3JTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShyZXNwb25zZUJvZHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChwYXJzZUV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9nIGF0IGRlYnVnIGxldmVsIHNpbmNlIHRoaXMgaXMgYSBjb250cmFjdCB2aW9sYXRpb24gZnJvbSB0aGUgc2VydmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gcGFyc2UgSlNPTiBlcnJvciByZXNwb25zZSBmcm9tIEFQSTogJXMgKHVybDogJXMsIHNlc3Npb25JZDogJXMpJywgcGFyc2VFeCwgdXJsLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLUpTT04gcmVzcG9uc2UgKGUuZy4sIEhUTUwgZXJyb3IgcGFnZSksIHNraXAgc3RydWN0dXJlZCBlcnJvciBwYXJzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZGVidWcoJ1JlY2VpdmVkIG5vbi1KU09OIGVycm9yIHJlc3BvbnNlIChjb250ZW50LXR5cGU6ICVzKSwgc2tpcHBpbmcgc3RydWN0dXJlZCBlcnJvciBwYXJzaW5nICh1cmw6ICVzLCBzZXNzaW9uSWQ6ICVzKScsIGNvbnRlbnRUeXBlID8/ICd1bmtub3duJywgdXJsLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhbml0aXplIGhlYWRlcnMgdG8gYXZvaWQgbGVha2luZyBBUEkga2V5c1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRIZWFkZXJzID0geyAuLi5oZWFkZXJzIH07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNhbml0aXplZEhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxrID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGsgPT09ICdhdXRob3JpemF0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxrID09PSAneC1hcGkta2V5JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxrLmluY2x1ZGVzKCdzZWNyZXQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxrLmluY2x1ZGVzKCdrZXknKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxrLmluY2x1ZGVzKCd0b2tlbicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVkSGVhZGVyc1trZXldID0gJ1JFREFDVEVEJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZGVidWcoJ0FQSSBFcnJvciBEZXRhaWxzOicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZGVidWcoJyAgVVJMOicsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlci5kZWJ1ZygnICBNZXRob2Q6JywgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCcgIFN0YXR1czonLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZGVidWcoJyAgSGVhZGVyczonLCBKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWRIZWFkZXJzLCBudWxsLCAyKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlci5kZWJ1ZygnICBSZXNwb25zZTonLCByZXNwb25zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgVVBHUkFERV9SRVFVSVJFRCBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JEYXRhPy5jb2RlID09PSAnVVBHUkFERV9SRVFVSVJFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgdmVyc2lvbiBjaGVjayBpZiBjb25maWd1cmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jY29uZmlnPy5za2lwVmVyc2lvbkNoZWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCdTa2lwcGluZyB2ZXJzaW9uIGNoZWNrIChjb25maWd1cmVkIHRvIHNraXApJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWVzdCBpcyBzdGlsbCByZWplY3RlZCwgYnV0IHRocm93IFVwZ3JhZGVSZXF1aXJlZEVycm9yIHNvIGNhbGxlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZGV0ZWN0IGl0IGFuZCBoYW5kbGUgVUkgYmVoYXZpb3IgKGUuZy4sIHN1cHByZXNzIGJhbm5lcikgYmFzZWQgb24gc2tpcCBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVwZ3JhZGVSZXF1aXJlZEVycm9yKHsgc2Vzc2lvbklkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVwZ3JhZGVSZXF1aXJlZEVycm9yKHsgc2Vzc2lvbklkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBab2QgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSB0aGUgQVBJXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3JEYXRhPy5lcnJvciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YT8uZXJyb3I/Lm5hbWUgPT09ICdab2RFcnJvcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yRGF0YS5lcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uT3V0cHV0RXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGVycm9yRGF0YS5lcnJvci5pc3N1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgd2l0aCBtZXNzYWdlIGZyb20gQVBJIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JEYXRhPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0eXBlb2YgZXJyb3JEYXRhLmVycm9yID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yRGF0YS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChlcnJvckRhdGEubWVzc2FnZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBBUEkgZW5jb3VudGVyZWQgYW4gdW5leHBlY3RlZCBlcnJvciBhdHRlbXB0aW5nIHRvIHJlYWNoIHRoZSBzZXJ2aWNlLicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFByb3ZpZGUgc3RhdHVzLWF3YXJlIGZhbGxiYWNrIG1lc3NhZ2VzIHdoZW4gbm8gc3RydWN0dXJlZCBlcnJvciBkYXRhIGlzIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy4jZ2V0U3RhdHVzQXdhcmVFcnJvck1lc3NhZ2UocmVzcG9uc2Uuc3RhdHVzLCBpc0pzb25SZXNwb25zZSA/PyBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCclcyBzdWNjZWVkZWQgd2l0aCBzdGF0dXM6ICVkJywgdXJsLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgcmVzcG9uc2U7IGhhbmRsZSBlbXB0eSBib2RpZXMgKGUuZy4sIDIwNCBObyBDb250ZW50KVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCB8fCByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCdlcnJvciBzZW5kaW5nIHRvICVzOiAlcycsIHVybCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSByZXRyeWFibGUgY29ubmVjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmV0cnlhYmxlID0gdGhpcy4jaXNSZXRyeWFibGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmV0cnlhYmxlICYmIGF0dGVtcHQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlci5kZWJ1ZyhgQ29ubmVjdGlvbiBlcnJvciwgcmV0cnlpbmcgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHttYXhSZXRyaWVzICsgMX0pOmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jc2xlZXAodGhpcy4jZ2V0UmV0cnlEZWxheShhdHRlbXB0LCBiYXNlRGVsYXlNcykpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jbG9nZ2VyLmRlYnVnKCdtYXggcmV0cmllcyB0cnlpbmc6ICVzJywgdXJsKTtcbiAgICAgICAgdGhyb3cgbmV3IE1heFJldHJpZXNFcnJvcigpO1xuICAgIH1cbiAgICAjaXNSZXRyeWFibGVFcnJvcihlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gZXJyb3I7XG4gICAgICAgICAgICAvLyBSZXRyeWFibGUgY29ubmVjdGlvbiBlcnJvcnNcbiAgICAgICAgICAgIHJldHVybiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fFxuICAgICAgICAgICAgICAgIGVyci5jb2RlID09PSAnRVRJTUVET1VUJyB8fFxuICAgICAgICAgICAgICAgIGVyci5jb2RlID09PSAnRUNPTk5SRUZVU0VEJyB8fFxuICAgICAgICAgICAgICAgIGVyci5jb2RlID09PSAnRU5PVEZPVU5EJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAjZ2V0UmV0cnlEZWxheShhdHRlbXB0LCBiYXNlRGVsYXlNcykge1xuICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmIHdpdGggaml0dGVyOiBkZWxheSA9IGJhc2UgKiAyXmF0dGVtcHQgKiAoMC41ICsgcmFuZG9tKDAsIDAuNSkpXG4gICAgICAgIGNvbnN0IGV4cG9uZW50aWFsRGVsYXkgPSBiYXNlRGVsYXlNcyAqIE1hdGgucG93KDIsIGF0dGVtcHQpO1xuICAgICAgICBjb25zdCBqaXR0ZXIgPSAwLjUgKyBNYXRoLnJhbmRvbSgpICogMC41O1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihleHBvbmVudGlhbERlbGF5ICogaml0dGVyKTtcbiAgICB9XG4gICAgI3NsZWVwKG1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgIH1cbiAgICAjZ2V0UmF0ZUxpbWl0RGVsYXkocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIFJldHJ5LUFmdGVyIGhlYWRlciAoc3RhbmRhcmQgSFRUUClcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdSZXRyeS1BZnRlcicpO1xuICAgICAgICBpZiAocmV0cnlBZnRlcikge1xuICAgICAgICAgICAgLy8gQ2FuIGJlIGVpdGhlciBzZWNvbmRzIG9yIEhUVFAgZGF0ZVxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlSW50KHJldHJ5QWZ0ZXIsIDEwKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4oc2Vjb25kcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Vjb25kcyAqIDEwMDA7IC8vIENvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUcnkgcGFyc2luZyBhcyBIVFRQIGRhdGVcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5RGF0ZSA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihyZXRyeURhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5TXMgPSByZXRyeURhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgZGVsYXlNcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgZm9yIFgtUmF0ZUxpbWl0LVJlc2V0IChVbml4IHRpbWVzdGFtcCBpbiBzZWNvbmRzKVxuICAgICAgICBjb25zdCByYXRlTGltaXRSZXNldCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVJhdGVMaW1pdC1SZXNldCcpO1xuICAgICAgICBpZiAocmF0ZUxpbWl0UmVzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0VGltZSA9IHBhcnNlSW50KHJhdGVMaW1pdFJlc2V0LCAxMCk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHJlc2V0VGltZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxheU1zID0gcmVzZXRUaW1lICogMTAwMCAtIERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlbGF5TXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGZvciBYLVJhdGVMaW1pdC1SZXRyeS1BZnRlciAoc2Vjb25kcylcbiAgICAgICAgY29uc3QgcmF0ZUxpbWl0UmV0cnlBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVJhdGVMaW1pdC1SZXRyeS1BZnRlcicpO1xuICAgICAgICBpZiAocmF0ZUxpbWl0UmV0cnlBZnRlcikge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlSW50KHJhdGVMaW1pdFJldHJ5QWZ0ZXIsIDEwKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4oc2Vjb25kcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Vjb25kcyAqIDEwMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgICNnZXRTdGF0dXNBd2FyZUVycm9yTWVzc2FnZShzdGF0dXMsIGlzSnNvblJlc3BvbnNlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgaGVscGZ1bCwgc3RhdHVzLXNwZWNpZmljIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1RoZSBBUEkgcmVxdWVzdCB3YXMgaW52YWxpZCAoSFRUUCA0MDApLiBQbGVhc2UgY2hlY2sgeW91ciByZXF1ZXN0IHBhcmFtZXRlcnMuJztcbiAgICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQXV0aGVudGljYXRpb24gZmFpbGVkIChIVFRQIDQwMSkuIFBsZWFzZSBjaGVjayB5b3VyIGNyZWRlbnRpYWxzIG9yIHRyeSBsb2dnaW5nIGluIGFnYWluLic7XG4gICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0FjY2VzcyBkZW5pZWQgKEhUVFAgNDAzKS4gWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nO1xuICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSnNvblJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgID8gJ1RoZSByZXF1ZXN0ZWQgcmVzb3VyY2Ugd2FzIG5vdCBmb3VuZCAoSFRUUCA0MDQpLidcbiAgICAgICAgICAgICAgICAgICAgOiAnVGhlIEFQSSBlbmRwb2ludCB3YXMgbm90IGZvdW5kIChIVFRQIDQwNCkuIFBsZWFzZSB2ZXJpZnkgeW91ciBBUEkgVVJMIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdC4nO1xuICAgICAgICAgICAgY2FzZSA0MDk6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdBIGNvbmZsaWN0IG9jY3VycmVkIChIVFRQIDQwOSkuIFRoZSByZXNvdXJjZSBtYXkgYWxyZWFkeSBleGlzdCBvciBiZSBpbiB1c2UuJztcbiAgICAgICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgICAgICAgIHJldHVybiAnVG9vIG1hbnkgcmVxdWVzdHMgKEhUVFAgNDI5KS4gUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi4nO1xuICAgICAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdUaGUgQVBJIHNlcnZlciBlbmNvdW50ZXJlZCBhbiBpbnRlcm5hbCBlcnJvciAoSFRUUCA1MDApLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgICAgICBjYXNlIDUwMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1RoZSBBUEkgc2VydmljZSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSAoSFRUUCA1MDIpLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgICAgICBjYXNlIDUwMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1RoZSBBUEkgc2VydmljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUgKEhUVFAgNTAzKS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgICAgICAgICAgY2FzZSA1MDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdUaGUgQVBJIHJlcXVlc3QgdGltZWQgb3V0IChIVFRQIDUwNCkuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUaGUgQVBJIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgZXJyb3IgKEhUVFAgJHtzdGF0dXN9KS5gO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFQSUJhc2VVUkwocmVnaW9uLCBvdmVycmlkZXMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQUdFTlRVSVRZX0FQSV9VUkwpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9BUElfVVJMO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVzPy5hcGlfdXJsKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZXMuYXBpX3VybDtcbiAgICB9XG4gICAgaWYgKHJlZ2lvbiA9PT0gJ2xvY2FsJykge1xuICAgICAgICByZXR1cm4gJ2h0dHBzOi8vYXBpLmFnZW50dWl0eS5pbyc7XG4gICAgfVxuICAgIHJldHVybiAnaHR0cHM6Ly9hcGktdjEuYWdlbnR1aXR5LmNvbSc7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwQmFzZVVSTChyZWdpb24sIG92ZXJyaWRlcykge1xuICAgIGlmIChwcm9jZXNzLmVudi5BR0VOVFVJVFlfQVBQX1VSTCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX0FQUF9VUkw7XG4gICAgfVxuICAgIGlmIChvdmVycmlkZXM/LmFwcF91cmwpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlcy5hcHBfdXJsO1xuICAgIH1cbiAgICBpZiAocmVnaW9uID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9hcHAuYWdlbnR1aXR5LmlvJztcbiAgICB9XG4gICAgcmV0dXJuICdodHRwczovL2FwcC12MS5hZ2VudHVpdHkuY29tJztcbn1cbmV4cG9ydCBjb25zdCBBUElSZXNwb25zZVNjaGVtYSA9IChkYXRhU2NoZW1hKSA9PiB6LmRpc2NyaW1pbmF0ZWRVbmlvbignc3VjY2VzcycsIFtcbiAgICB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBlcnJvciBtZXNzYWdlJyksXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSksXG4gICAgICAgIGRhdGE6IGRhdGFTY2hlbWEsXG4gICAgfSksXG5dKTtcbmV4cG9ydCBjb25zdCBBUElSZXNwb25zZVNjaGVtYU9wdGlvbmFsRGF0YSA9IChkYXRhU2NoZW1hKSA9PiB6LmRpc2NyaW1pbmF0ZWRVbmlvbignc3VjY2VzcycsIFtcbiAgICB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBlcnJvciBtZXNzYWdlJyksXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSksXG4gICAgICAgIGRhdGE6IGRhdGFTY2hlbWEub3B0aW9uYWwoKSxcbiAgICB9KSxcbl0pO1xuZXhwb3J0IGNvbnN0IEFQSVJlc3BvbnNlU2NoZW1hTm9EYXRhID0gKCkgPT4gei5kaXNjcmltaW5hdGVkVW5pb24oJ3N1Y2Nlc3MnLCBbXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgZXJyb3IgbWVzc2FnZScpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgICAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICAgIH0pLFxuXSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IEFQSUtleVJlc3BvbnNlRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgQVBJS2V5Q3JlYXRlUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBBUEkga2V5IGlkJyksXG4gICAgdmFsdWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBBUEkga2V5IHZhbHVlJyksXG59KTtcbmNvbnN0IEFQSUtleUNyZWF0ZUZ1bGxSZXNwb25zZVNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hKEFQSUtleUNyZWF0ZVJlc3BvbnNlU2NoZW1hKTtcbi8qKlxuICogQ3JlYXRlIGEgbmV3IEFQSSBrZXlcbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcGFyYW0gcmVxdWVzdCB0aGUgQVBJIGtleSBjcmVhdGlvbiByZXF1ZXN0XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpa2V5Q3JlYXRlKGNsaWVudCwgcmVxdWVzdCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucG9zdCgnL2NsaS9hcGlrZXknLCByZXF1ZXN0LCBBUElLZXlDcmVhdGVGdWxsUmVzcG9uc2VTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFQSUtleVJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IEFQSUtleVJlc3BvbnNlRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgQVBJS2V5RGVsZXRlUmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYSh6Lm51bWJlcigpLmRlc2NyaWJlKCdudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCcpKTtcbi8qKlxuICogRGVsZXRlIGFuIEFQSSBrZXkgKHNvZnQgZGVsZXRlKVxuICpcbiAqIEBwYXJhbSBjbGllbnRcbiAqIEBwYXJhbSBpZCB0aGUgQVBJIGtleSBpZCB0byBkZWxldGVcbiAqIEByZXR1cm5zIG51bWJlciBvZiByb3dzIGFmZmVjdGVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlrZXlEZWxldGUoY2xpZW50LCBpZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnREVMRVRFJywgYC9jbGkvYXBpa2V5LyR7aWR9YCwgQVBJS2V5RGVsZXRlUmVzcG9uc2VTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFQSUtleVJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxldGUuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IEFQSUtleVJlc3BvbnNlRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgQVBJS2V5RGV0YWlsU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgQVBJIGtleSBpZCcpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBBUEkga2V5IG5hbWUnKSxcbiAgICBvcmdJZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIG9yZ2FuaXphdGlvbiBpZCcpLFxuICAgIHR5cGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBBUEkga2V5IHR5cGUnKSxcbiAgICBleHBpcmVzQXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5udWxsYWJsZSgpLmRlc2NyaWJlKCd0aGUgZXhwaXJhdGlvbiBkYXRlJyksXG4gICAgbGFzdFVzZWRBdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGxhc3QgdXNlZCBkYXRlJyksXG4gICAgY3JlYXRlZEF0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkuZGVzY3JpYmUoJ3RoZSBjcmVhdGlvbiBkYXRlJyksXG4gICAgcHJvamVjdDogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwcm9qZWN0IGlkJyksXG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwcm9qZWN0IG5hbWUnKSxcbiAgICB9KVxuICAgICAgICAubnVsbGFibGUoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoJ3RoZSBhc3NvY2lhdGVkIHByb2plY3QnKSxcbn0pO1xuY29uc3QgQVBJS2V5R2V0UmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShBUElLZXlEZXRhaWxTY2hlbWEpO1xuLyoqXG4gKiBHZXQgYSBzcGVjaWZpYyBBUEkga2V5IGJ5IGlkXG4gKlxuICogQHBhcmFtIGNsaWVudFxuICogQHBhcmFtIGlkIHRoZSBBUEkga2V5IGlkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpa2V5R2V0KGNsaWVudCwgaWQpIHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoJ0dFVCcsIGAvY2xpL2FwaWtleS8ke2lkfWAsIEFQSUtleUdldFJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXNwLmRhdGE7XG4gICAgfVxuICAgIHRocm93IG5ldyBBUElLZXlSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBBUElLZXlSZXNwb25zZUVycm9yIH0gZnJvbSAnLi91dGlsJztcbmV4cG9ydCBjb25zdCBBUElLZXlTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBBUEkga2V5IGlkJyksXG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIEFQSSBrZXkgbmFtZScpLFxuICAgIG9yZ0lkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgb3JnYW5pemF0aW9uIGlkJyksXG4gICAgdHlwZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIEFQSSBrZXkgdHlwZScpLFxuICAgIGV4cGlyZXNBdDogei5zdHJpbmcoKS5kYXRldGltZSgpLm51bGxhYmxlKCkuZGVzY3JpYmUoJ3RoZSBleHBpcmF0aW9uIGRhdGUnKSxcbiAgICBsYXN0VXNlZEF0OiB6LnN0cmluZygpLmRhdGV0aW1lKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgbGFzdCB1c2VkIGRhdGUnKSxcbiAgICBjcmVhdGVkQXQ6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5kZXNjcmliZSgndGhlIGNyZWF0aW9uIGRhdGUnKSxcbiAgICBwcm9qZWN0OiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgaWQnKSxcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgbmFtZScpLFxuICAgIH0pXG4gICAgICAgIC5udWxsYWJsZSgpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgndGhlIGFzc29jaWF0ZWQgcHJvamVjdCcpLFxufSk7XG5leHBvcnQgY29uc3QgQVBJS2V5TGlzdFJlc3BvbnNlQXJyYXkgPSB6LmFycmF5KEFQSUtleVNjaGVtYSk7XG5jb25zdCBBUElLZXlMaXN0UmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShBUElLZXlMaXN0UmVzcG9uc2VBcnJheSk7XG4vKipcbiAqIExpc3QgYWxsIEFQSSBrZXlzXG4gKlxuICogQHBhcmFtIGNsaWVudFxuICogQHBhcmFtIHJlcXVlc3Qgb3B0aW9uYWwgZmlsdGVycyBmb3Igb3JnSWQgYW5kIHByb2plY3RJZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaWtleUxpc3QoY2xpZW50LCByZXF1ZXN0KSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChyZXF1ZXN0Py5vcmdJZCkge1xuICAgICAgICBwYXJhbXMuc2V0KCdvcmdJZCcsIHJlcXVlc3Qub3JnSWQpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdD8ucHJvamVjdElkKSB7XG4gICAgICAgIHBhcmFtcy5zZXQoJ3Byb2plY3RJZCcsIHJlcXVlc3QucHJvamVjdElkKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAvY2xpL2FwaWtleSR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5nZXQoZW5kcG9pbnQsIEFQSUtleUxpc3RSZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQVBJS2V5UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpc3QuanMubWFwIiwKICAgICJleHBvcnQgKiBmcm9tICcuL2NyZWF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGV0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldCc7XG5leHBvcnQgKiBmcm9tICcuL2xpc3QnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuZXhwb3J0IGNvbnN0IE9yZ1Jlc3BvbnNlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ09yZ1Jlc3BvbnNlRXJyb3InKTtcbmV4cG9ydCBjb25zdCBPcmdSZXNvdXJjZVJlc3BvbnNlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ09yZ1Jlc291cmNlUmVzcG9uc2VFcnJvcicpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgT3JnUmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBMaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlID0gei5hcnJheSh6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSB1bmlxdWUgaWQgZm9yIHRoZSBvcmdhbml6YXRpb24nKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgbmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uJyksXG59KSk7XG5jb25zdCBMaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoTGlzdE9yZ2FuaXphdGlvbnNSZXNwb25zZSk7XG4vKipcbiAqIExpc3QgYWxsIG9yZ2FuaXphdGlvbnNcbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdE9yZ2FuaXphdGlvbnMoY2xpZW50KSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5nZXQoJy9jbGkvb3JnYW5pemF0aW9uJywgTGlzdE9yZ2FuaXphdGlvbnNSZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgT3JnUmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpc3QuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IE9yZ1Jlc291cmNlUmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBPcmdTM1Jlc291cmNlID0gei5vYmplY3Qoe1xuICAgIGJ1Y2tldF9uYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgUzMgYnVja2V0IG5hbWUnKSxcbiAgICBhY2Nlc3Nfa2V5OiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIFMzIGFjY2VzcyBrZXknKSxcbiAgICBzZWNyZXRfa2V5OiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIFMzIHNlY3JldCBrZXknKSxcbiAgICByZWdpb246IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgUzMgcmVnaW9uJyksXG4gICAgZW5kcG9pbnQ6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgUzMgZW5kcG9pbnQnKSxcbiAgICBjbG91ZF9yZWdpb246IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBjbG91ZCByZWdpb24gd2hlcmUgdGhpcyByZXNvdXJjZSBpcyBwcm92aXNpb25lZCcpLFxufSk7XG5jb25zdCBPcmdEQlJlc291cmNlID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBkYXRhYmFzZSBuYW1lJyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgZGF0YWJhc2UgdXNlcm5hbWUnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBkYXRhYmFzZSBwYXNzd29yZCcpLFxuICAgIHVybDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBmdWxsIGRhdGFiYXNlIGNvbm5lY3Rpb24gVVJMJyksXG4gICAgY2xvdWRfcmVnaW9uOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgY2xvdWQgcmVnaW9uIHdoZXJlIHRoaXMgcmVzb3VyY2UgaXMgcHJvdmlzaW9uZWQnKSxcbn0pO1xuY29uc3QgT3JnUmVzb3VyY2VMaXN0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gICAgczM6IHouYXJyYXkoT3JnUzNSZXNvdXJjZSksXG4gICAgZGI6IHouYXJyYXkoT3JnREJSZXNvdXJjZSksXG59KTtcbmNvbnN0IE9yZ1Jlc291cmNlTGlzdFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoT3JnUmVzb3VyY2VMaXN0UmVzcG9uc2UpO1xuLyoqXG4gKiBMaXN0IGFsbCByZXNvdXJjZXMgZm9yIHRoZSBhdXRoZW50aWNhdGVkIG9yZ2FuaXphdGlvbiAoYWNyb3NzIGFsbCByZWdpb25zKVxuICogRXh0cmFjdHMgb3JnSWQgZnJvbSBhdXRoZW50aWNhdGlvbiBjb250ZXh0IChBUEkga2V5LCBTREssIG9yIENMSSB0b2tlbilcbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gQ2F0YWx5c3QgQVBJIGNsaWVudCAobXVzdCBiZSBhdXRoZW50aWNhdGVkKVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBmaWx0ZXJzXG4gKiBAcmV0dXJucyBMaXN0IG9mIFMzIGFuZCBEQiByZXNvdXJjZXMgd2l0aCB0aGVpciBjbG91ZCByZWdpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCBhbGwgcmVzb3VyY2VzXG4gKiBjb25zdCBhbGwgPSBhd2FpdCBsaXN0T3JnUmVzb3VyY2VzKGNsaWVudCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCBvbmx5IFMzIGJ1Y2tldHNcbiAqIGNvbnN0IHMzT25seSA9IGF3YWl0IGxpc3RPcmdSZXNvdXJjZXMoY2xpZW50LCB7IHR5cGU6ICdzMycgfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCBvbmx5IERCc1xuICogY29uc3QgZGJzT25seSA9IGF3YWl0IGxpc3RPcmdSZXNvdXJjZXMoY2xpZW50LCB7IHR5cGU6ICdkYicgfSk7XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0T3JnUmVzb3VyY2VzKGNsaWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucz8udHlwZSAmJiBvcHRpb25zLnR5cGUgIT09ICdhbGwnKSB7XG4gICAgICAgIHBhcmFtcy5zZXQoJ3R5cGUnLCBvcHRpb25zLnR5cGUpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeSA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgIGNvbnN0IHVybCA9IGAvcmVzb3VyY2UvMjAyNS0xMS0xNiR7cXVlcnkgPyBgPyR7cXVlcnl9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KCdHRVQnLCB1cmwsIE9yZ1Jlc291cmNlTGlzdFJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXNwLmRhdGE7XG4gICAgfVxuICAgIHRocm93IG5ldyBPcmdSZXNvdXJjZVJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvdXJjZXMuanMubWFwIiwKICAgICJleHBvcnQgKiBmcm9tICcuL2xpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvdXJjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBBZ2VudE5vdEZvdW5kRXJyb3IsIFByb2plY3RSZXNwb25zZUVycm9yIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IEFnZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCdBZ2VudCBJRCAoc2FtZSBhcyBpZGVudGlmaWVyKScpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0FnZW50IG5hbWUnKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlc2NyaWJlKCdBZ2VudCBkZXNjcmlwdGlvbicpLFxuICAgIGlkZW50aWZpZXI6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0FnZW50IGlkZW50aWZpZXInKSxcbiAgICBkZXBsb3ltZW50SWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZXNjcmliZSgnRGVwbG95bWVudCBJRCcpLFxuICAgIGRldm1vZGU6IHouYm9vbGVhbigpLmRlc2NyaWJlKCdXaGV0aGVyIGFnZW50IGlzIGluIGRldmVsb3BtZW50IG1vZGUnKSxcbiAgICBtZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm51bGxhYmxlKCkuZGVzY3JpYmUoJ0FnZW50IG1ldGFkYXRhJyksXG4gICAgY3JlYXRlZEF0OiB6LnN0cmluZygpLmRlc2NyaWJlKCdDcmVhdGlvbiB0aW1lc3RhbXAnKSxcbiAgICB1cGRhdGVkQXQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0xhc3QgdXBkYXRlIHRpbWVzdGFtcCcpLFxuICAgIGV2YWxzOiB6XG4gICAgICAgIC5hcnJheSh6Lm9iamVjdCh7XG4gICAgICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCdFdmFsdWF0aW9uIElEJyksXG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0V2YWx1YXRpb24gbmFtZScpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlc2NyaWJlKCdFdmFsdWF0aW9uIGRlc2NyaXB0aW9uJyksXG4gICAgICAgIGlkZW50aWZpZXI6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZXNjcmliZSgnRXZhbHVhdGlvbiBpZGVudGlmaWVyJyksXG4gICAgICAgIGRldm1vZGU6IHouYm9vbGVhbigpLmRlc2NyaWJlKCdXaGV0aGVyIGV2YWx1YXRpb24gaXMgaW4gZGV2ZWxvcG1lbnQgbW9kZScpLFxuICAgICAgICBjcmVhdGVkQXQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0NyZWF0aW9uIHRpbWVzdGFtcCcpLFxuICAgICAgICB1cGRhdGVkQXQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0xhc3QgdXBkYXRlIHRpbWVzdGFtcCcpLFxuICAgIH0pKVxuICAgICAgICAuZGVzY3JpYmUoJ0Fzc29jaWF0ZWQgZXZhbHVhdGlvbnMnKSxcbn0pO1xuY29uc3QgQWdlbnRMaXN0UmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYSh6LmFycmF5KEFnZW50U2NoZW1hKSk7XG5jb25zdCBBZ2VudEdldFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoei5hcnJheShBZ2VudFNjaGVtYSkpO1xuLyoqXG4gKiBMaXN0IGFnZW50cyBmb3IgYSBwcm9qZWN0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9qZWN0QWdlbnRMaXN0KGNsaWVudCwgcHJvamVjdElkLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnM/LmRlcGxveW1lbnRJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ2RlcGxveW1lbnRJZCcsIG9wdGlvbnMuZGVwbG95bWVudElkKTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gYC9jbGkvYWdlbnQvJHtwcm9qZWN0SWR9JHtxdWVyeVBhcmFtcy50b1N0cmluZygpID8gYD8ke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5nZXQodXJsLCBBZ2VudExpc3RSZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vKipcbiAqIEdldCBhIHNwZWNpZmljIGFnZW50IGJ5IGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2plY3RBZ2VudEdldChjbGllbnQsIHByb2plY3RJZCwgYWdlbnRJZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuZ2V0KGAvY2xpL2FnZW50LyR7cHJvamVjdElkfT9pZGVudGlmaWVyPSR7YWdlbnRJZH1gLCBBZ2VudEdldFJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChyZXNwLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWdlbnROb3RGb3VuZEVycm9yKHsgaWQ6IGFnZW50SWQsIG1lc3NhZ2U6IGBBZ2VudCBub3QgZm91bmQ6ICR7YWdlbnRJZH1gIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwLmRhdGFbMF07XG4gICAgfVxuICAgIHRocm93IG5ldyBQcm9qZWN0UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFnZW50LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBQcm9qZWN0UmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBDcmVhdGVQcm9qZWN0UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm1pbigxKS5kZXNjcmliZSgndGhlIG5hbWUgb2YgdGhlIG5ldyBwcm9qZWN0JyksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDI1NSkubWluKDApLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdCcpLFxuICAgIHRhZ3M6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgndGFncyBmb3IgdGhlIHByb2plY3QnKSxcbiAgICBvcmdJZDogei5zdHJpbmcoKS5tYXgoMjU1KS5taW4oMSkuZGVzY3JpYmUoJ3RoZSBvcmdhbml6YXRpb24gaWQgdG8gY3JlYXRlIHRoZSBwcm9qZWN0IGluJyksXG4gICAgY2xvdWRSZWdpb246IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBjbG91ZCByZWdpb24gdG8gY3JlYXRlIHRoZSBwcm9qZWN0JyksXG4gICAgZG9tYWluczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgY3VzdG9tIGRvbWFpbnMgZm9yIHRoaXMgcHJvamVjdCcpLFxufSk7XG5jb25zdCBDcmVhdGVQcm9qZWN0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSB1bmlxdWUgaWQgZm9yIHRoZSBwcm9qZWN0JyksXG4gICAgc2RrS2V5OiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgU0RLIGtleSBmb3IgdGhlIHByb2plY3QnKSxcbn0pO1xuY29uc3QgQ3JlYXRlUHJvamVjdFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoQ3JlYXRlUHJvamVjdFJlc3BvbnNlKTtcbi8qKlxuICogQ3JlYXRlIGEgbmV3IFByb2plY3RcbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcGFyYW0gYm9keVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2plY3RDcmVhdGUoY2xpZW50LCBib2R5KSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KCdQT1NUJywgJy9jbGkvcHJvamVjdCcsIENyZWF0ZVByb2plY3RSZXNwb25zZVNjaGVtYSwgYm9keSwgQ3JlYXRlUHJvamVjdFJlcXVlc3RTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFByb2plY3RSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBQcm9qZWN0UmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBQcm9qZWN0RGVsZXRlUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHsgaWRzOiB6LmFycmF5KHouc3RyaW5nKCkpIH0pO1xuY29uc3QgUHJvamVjdERlbGV0ZVJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoei5hcnJheSh6LnN0cmluZygpKSk7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlbGV0ZShjbGllbnQsIC4uLmlkcykge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnREVMRVRFJywgJy9jbGkvcHJvamVjdCcsIFByb2plY3REZWxldGVSZXNwb25zZVNjaGVtYSwgeyBpZHMgfSwgUHJvamVjdERlbGV0ZVJlcXVlc3RTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFByb2plY3RSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlID8/ICdmYWlsZWQgdG8gZGVsZXRlIHByb2plY3QnIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVsZXRlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBQcm9qZWN0UmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5leHBvcnQgY29uc3QgUmVzb3VyY2VzID0gei5vYmplY3Qoe1xuICAgIG1lbW9yeTogei5zdHJpbmcoKS5kZWZhdWx0KCc1MDBNaScpLmRlc2NyaWJlKCdUaGUgbWVtb3J5IHJlcXVpcmVtZW50cycpLFxuICAgIGNwdTogei5zdHJpbmcoKS5kZWZhdWx0KCc1MDBtJykuZGVzY3JpYmUoJ1RoZSBDUFUgcmVxdWlyZW1lbnRzJyksXG4gICAgZGlzazogei5zdHJpbmcoKS5kZWZhdWx0KCc1MDBNaScpLmRlc2NyaWJlKCdUaGUgZGlzayByZXF1aXJlbWVudHMnKSxcbn0pO1xuZXhwb3J0IGNvbnN0IE1vZGUgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogelxuICAgICAgICAuZW51bShbJ29uLWRlbWFuZCcsICdwcm92aXNpb25lZCddKVxuICAgICAgICAuZGVmYXVsdCgnb24tZGVtYW5kJylcbiAgICAgICAgLmRlc2NyaWJlKCdvbi1kZW1hbmQgb3IgcHJvdmlzaW9uZWQnKSxcbiAgICBpZGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ2R1cmF0aW9uIGluIHNlY29uZHMgaWYgb24tZGVtYW5kJyksXG59KTtcbmV4cG9ydCBjb25zdCBEZXBsb3ltZW50Q29uZmlnID0gei5vYmplY3Qoe1xuICAgIHJlc291cmNlczogUmVzb3VyY2VzLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSByZXNvdXJjZSByZXF1aXJlbWVudHMgZm9yIHlvdXIgZGVwbG95ZWQgcHJvamVjdCcpLFxuICAgIG1vZGU6IE1vZGUub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHByb3Zpc2lvbmluZyBtb2RlIGZvciB0aGUgcHJvamVjdCcpLFxuICAgIGRlcGVuZGVuY2llczogelxuICAgICAgICAuYXJyYXkoei5zdHJpbmcoKS5kZXNjcmliZSgnQVBUIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsIHByaW9yIHRvIGxhdW5jaGluZyB5b3VyIHByb2plY3QnKSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgZG9tYWluczogei5hcnJheSh6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgY3VzdG9tIGRvbWFpbicpKS5vcHRpb25hbCgpLFxufSk7XG5jb25zdCBCYXNlRmlsZUZpZWxkcyA9IHtcbiAgICBmaWxlbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBmaWxlJyksXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIFNIQTI1NiBjb250ZW50IG9mIHRoZSBmaWxlJyksXG59O1xuY29uc3QgRXZhbFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAuLi5CYXNlRmlsZUZpZWxkcyxcbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHVuaXF1ZSBjYWxjdWxhdGVkIGlkIGZvciB0aGUgZXZhbCcpLFxuICAgIGlkZW50aWZpZXI6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSB1bmlxdWUgaWQgZm9yIGV2YWwgZm9yIHRoZSBwcm9qZWN0IGFjcm9zcyBkZXBsb3ltZW50cycpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBuYW1lIG9mIHRoZSBldmFsJyksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGV2YWwgZGVzY3JpcHRpb24nKSxcbiAgICBhZ2VudElkZW50aWZpZXI6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBpZGVudGlmaWVyIG9mIHRoZSBhZ2VudCcpLFxuICAgIHByb2plY3RJZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgaWQnKSxcbn0pO1xuY29uc3QgQmFzZUFnZW50RmllbGRzID0ge1xuICAgIC4uLkJhc2VGaWxlRmllbGRzLFxuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgdW5pcXVlIGNhbGN1bGF0ZWQgaWQgZm9yIHRoZSBhZ2VudCcpLFxuICAgIGFnZW50SWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSB1bmlxdWUgaWQgZm9yIGFnZW50IGZvciB0aGUgcHJvamVjdCBhY3Jvc3MgZGVwbG95bWVudHMnKSxcbiAgICBwcm9qZWN0SWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwcm9qZWN0IGlkJyksXG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIG5hbWUgb2YgdGhlIGFnZW50JyksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGFnZW50IGRlc2NyaXB0aW9uJyksXG4gICAgZXZhbHM6IHouYXJyYXkoRXZhbFNjaGVtYSkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGV2YWxzIGZvciB0aGUgYWdlbnQnKSxcbiAgICBzY2hlbWE6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIGlucHV0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0pTT04gc2NoZW1hIGZvciBpbnB1dCAoc3RyaW5naWZpZWQgSlNPTiknKSxcbiAgICAgICAgb3V0cHV0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0pTT04gc2NoZW1hIGZvciBvdXRwdXQgKHN0cmluZ2lmaWVkIEpTT04pJyksXG4gICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKCdpbnB1dCBhbmQgb3V0cHV0IEpTT04gc2NoZW1hcyBmb3IgdGhlIGFnZW50JyksXG59O1xuY29uc3QgQWdlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgLi4uQmFzZUFnZW50RmllbGRzLFxufSk7XG5leHBvcnQgY29uc3QgQnVpbGRNZXRhZGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICByb3V0ZXM6IHouYXJyYXkoei5vYmplY3Qoe1xuICAgICAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHVuaXF1ZSBjYWxjdWxhdGVkIGlkIGZvciB0aGUgcm91dGUnKSxcbiAgICAgICAgZmlsZW5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgZmlsZScpLFxuICAgICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcm91dGUgcGF0aCcpLFxuICAgICAgICBtZXRob2Q6IHouZW51bShbJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0Y2gnXSkuZGVzY3JpYmUoJ3RoZSBIVFRQIG1ldGhvZCcpLFxuICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgU0hBMjU2IGNvbnRlbnQgb2YgdGhlIGZpbGUnKSxcbiAgICAgICAgdHlwZTogei5lbnVtKFsnYXBpJywgJ3NtcycsICdlbWFpbCcsICdjcm9uJywgJ3dlYnNvY2tldCcsICdzc2UnLCAnc3RyZWFtJ10pLFxuICAgICAgICBhZ2VudElkczogelxuICAgICAgICAgICAgLmFycmF5KHouc3RyaW5nKCkpXG4gICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgICAgLmRlc2NyaWJlKCd0aGUgYWdlbnQgaWRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvdXRlJyksXG4gICAgICAgIGNvbmZpZzogelxuICAgICAgICAgICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAuZGVzY3JpYmUoJ3R5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbicpLFxuICAgICAgICBzY2hlbWE6IHpcbiAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgaW5wdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnSlNPTiBzY2hlbWEgZm9yIGlucHV0IChzdHJpbmdpZmllZCBKU09OKScpLFxuICAgICAgICAgICAgb3V0cHV0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0pTT04gc2NoZW1hIGZvciBvdXRwdXQgKHN0cmluZ2lmaWVkIEpTT04pJyksXG4gICAgICAgIH0pXG4gICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgICAgLmRlc2NyaWJlKCdpbnB1dCBhbmQgb3V0cHV0IEpTT04gc2NoZW1hcyBmb3IgdGhlIHJvdXRlJyksXG4gICAgfSkpLFxuICAgIGFnZW50czogei5hcnJheShBZ2VudFNjaGVtYSksXG4gICAgYXNzZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICAgICAgZmlsZW5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgZmlsZScpLFxuICAgICAgICBraW5kOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgdHlwZSBvZiBhc3NldCcpLFxuICAgICAgICBjb250ZW50VHlwZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGNvbnRlbnQtdHlwZSBmb3IgdGhlIGZpbGUnKSxcbiAgICAgICAgY29udGVudEVuY29kaW5nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBjb250ZW50LWVuY29kaW5nIGZvciB0aGUgZmlsZScpLFxuICAgICAgICBzaXplOiB6Lm51bWJlcigpLmRlc2NyaWJlKCd0aGUgc2l6ZSBpbiBieXRlcyBmb3IgdGhlIGZpbGUnKSxcbiAgICB9KSksXG4gICAgcHJvamVjdDogei5vYmplY3Qoe1xuICAgICAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgaWQnKSxcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIG5hbWUgb2YgdGhlIHByb2plY3QgKGZyb20gcGFja2FnZS5qc29uKScpLFxuICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IChmcm9tIHBhY2thZ2UuanNvbiknKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHpcbiAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgIC5kZXNjcmliZSgndGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0IChmcm9tIHBhY2thZ2UuanNvbiknKSxcbiAgICAgICAga2V5d29yZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGtleXdvcmRzIGZyb20gcGFja2FnZS5qc29uJyksXG4gICAgICAgIG9yZ0lkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgb3JnYW5pemF0aW9uIGlkIGZvciB0aGUgcHJvamVjdCcpLFxuICAgIH0pLFxuICAgIGRlcGxveW1lbnQ6IHouaW50ZXJzZWN0aW9uKERlcGxveW1lbnRDb25maWcsIHoub2JqZWN0KHtcbiAgICAgICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBkZXBsb3ltZW50IGlkJyksXG4gICAgICAgIGRhdGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBkYXRlIHRoZSBkZXBsb3ltZW50IHdhcyBjcmVhdGVkIGluIFVUQyBmb3JtYXQnKSxcbiAgICAgICAgZ2l0OiB6XG4gICAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHJlcG86IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHJlcG9zaXRvcnkgbmFtZScpLFxuICAgICAgICAgICAgY29tbWl0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBnaXQgY29tbWl0IHNoYScpLFxuICAgICAgICAgICAgbWVzc2FnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgZ2l0IGNvbW1pdCBtZXNzYWdlJyksXG4gICAgICAgICAgICBicmFuY2g6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGdpdCBicmFuY2gnKSxcbiAgICAgICAgICAgIHRhZ3M6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHRhZ3MgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpLFxuICAgICAgICAgICAgcHI6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHB1bGwgcmVxdWVzdCBudW1iZXInKSxcbiAgICAgICAgICAgIHByb3ZpZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBDSSBwcm92aWRlcicpLFxuICAgICAgICAgICAgdHJpZ2dlcjogelxuICAgICAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5kZWZhdWx0KCdjbGknKVxuICAgICAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAgICAgLmRlc2NyaWJlKCd0aGUgdHJpZ2dlciB0aGF0IGNhdXNlZCB0aGUgYnVpbGQnKSxcbiAgICAgICAgICAgIHVybDogelxuICAgICAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgICAgIC51cmwoKVxuICAgICAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAgICAgLmRlc2NyaWJlKCd0aGUgdXJsIHRvIHRoZSBjb21taXQgZm9yIHRoZSBDSSBwcm92aWRlcicpLFxuICAgICAgICAgICAgYnVpbGRVcmw6IHpcbiAgICAgICAgICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgICAgICAgICAudXJsKClcbiAgICAgICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgICAgICAgIC5kZXNjcmliZSgndGhlIHVybCB0byB0aGUgYnVpbGQgZm9yIHRoZSBDSSBwcm92aWRlcicpLFxuICAgICAgICAgICAgZXZlbnQ6IHpcbiAgICAgICAgICAgICAgICAuZW51bShbJ3B1bGxfcmVxdWVzdCcsICdwdXNoJywgJ21hbnVhbCcsICd3b3JrZmxvdyddKVxuICAgICAgICAgICAgICAgIC5kZWZhdWx0KCdtYW51YWwnKVxuICAgICAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAgICAgLmRlc2NyaWJlKCdUaGUgdHlwZSBvZiBHaXQtcmVsYXRlZCBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZGVwbG95bWVudDogcHVsbF9yZXF1ZXN0IChBIHB1bGwgcmVxdWVzdCBvciBtZXJnZSByZXF1ZXN0IHdhcyBvcGVuZWQsIHVwZGF0ZWQsIG9yIG1lcmdlZCksIHB1c2ggKEEgY29tbWl0IHdhcyBwdXNoZWQgZGlyZWN0bHkgdG8gYSBicmFuY2gpLCBtYW51YWwgKEEgZGVwbG95bWVudCB3YXMgdHJpZ2dlcmVkIG1hbnVhbGx5IHZpYSBDTEkgb3IgYSBidXR0b24pLCB3b3JrZmxvdyAoQSBkZXBsb3ltZW50IHdhcyB0cmlnZ2VyZWQgYnkgYW4gYXV0b21hdGVkIHdvcmtmbG93LCBzdWNoIGFzIGEgQ0kgcGlwZWxpbmUpJyksXG4gICAgICAgICAgICBwdWxsX3JlcXVlc3Q6IHpcbiAgICAgICAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBudW1iZXI6IHoubnVtYmVyKCksXG4gICAgICAgICAgICAgICAgdXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAgICAgLmRlc2NyaWJlKCdUaGlzIGlzIG9ubHkgcHJlc2VudCB3aGVuIHRoZSBkZXBsb3ltZW50IHdhcyB0cmlnZ2VyZWQgdmlhIGEgcHVsbCByZXF1ZXN0LicpLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgIC5kZXNjcmliZSgnZ2l0IGNvbW1pdCBpbmZvcm1hdGlvbicpLFxuICAgICAgICBidWlsZDogei5vYmplY3Qoe1xuICAgICAgICAgICAgYnVuOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgdmVyc2lvbiBvZiBidW4gdGhhdCB3YXMgdXNlZCB0byBidWlsZCB0aGUgZGVwbG95bWVudCcpLFxuICAgICAgICAgICAgYWdlbnR1aXR5OiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgdmVyc2lvbiBvZiB0aGUgYWdlbnR1aXR5IHJ1bnRpbWUnKSxcbiAgICAgICAgICAgIGFyY2g6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZScpLFxuICAgICAgICAgICAgcGxhdGZvcm06IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBtYWNoaW5lIG9zIHBsYXRmb3JtJyksXG4gICAgICAgIH0pLFxuICAgIH0pKSxcbn0pO1xuY29uc3QgQ3JlYXRlUHJvamVjdERlcGxveW1lbnQgPSB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSB1bmlxdWUgaWQgZm9yIHRoZSBkZXBsb3ltZW50JyksXG4gICAgb3JnSWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBvcmdhbml6YXRpb24gaWQnKSxcbiAgICBwdWJsaWNLZXk6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwdWJsaWMga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGluZyB0aGUgZGVwbG95bWVudCcpLFxuICAgIGJ1aWxkTG9nc1N0cmVhbVVSTDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKCd0aGUgVVJMIGZvciBzdHJlYW1pbmcgYnVpbGQgbG9ncyAoUFVUIHRvIHdyaXRlLCBHRVQgdG8gcmVhZCknKSxcbn0pO1xuY29uc3QgQ3JlYXRlUHJvamVjdERlcGxveW1lbnRTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShDcmVhdGVQcm9qZWN0RGVwbG95bWVudCk7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9qZWN0IGRlcGxveW1lbnRcbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcGFyYW0gcHJvamVjdElkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlcGxveW1lbnRDcmVhdGUoY2xpZW50LCBwcm9qZWN0SWQsIGRlcGxveW1lbnRDb25maWcpIHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoJ1BPU1QnLCBgL2NsaS9kZXBsb3kvMS9zdGFydC8ke3Byb2plY3RJZH1gLCBDcmVhdGVQcm9qZWN0RGVwbG95bWVudFNjaGVtYSwgZGVwbG95bWVudENvbmZpZyA/PyB7fSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG5jb25zdCBEZXBsb3ltZW50SW5zdHJ1Y3Rpb25zT2JqZWN0ID0gei5vYmplY3Qoe1xuICAgIGRlcGxveW1lbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSB1cmwgZm9yIHVwbG9hZGluZyB0aGUgZW5jcnlwdGVkIGRlcGxveW1lbnQgYXJjaGl2ZScpLFxuICAgIGFzc2V0czogelxuICAgICAgICAucmVjb3JkKHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBhc3NldCBpZCcpLCB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgdXJsIGZvciB0aGUgYXNzZXQgdXBsb2FkJykpXG4gICAgICAgIC5kZXNjcmliZSgndGhlIHVwbG9hZCBtZXRhZGF0YSBmb3IgcHVibGljIGFzc2V0cycpLFxufSk7XG5jb25zdCBEZXBsb3ltZW50SW5zdHJ1Y3Rpb25zU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoRGVwbG95bWVudEluc3RydWN0aW9uc09iamVjdCk7XG4vKipcbiAqIFVwZGF0ZSB0aGUgZGVwbG95bWVudCB3aXRoIHRoZSBidWlsZCBtZXRhZGF0YVxuICpcbiAqIEBwYXJhbSBjbGllbnRcbiAqIEBwYXJhbSBkZXBsb3ltZW50SWRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9qZWN0RGVwbG95bWVudFVwZGF0ZShjbGllbnQsIGRlcGxveW1lbnRJZCwgZGVwbG95bWVudCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnUFVUJywgYC9jbGkvZGVwbG95LzEvc3RhcnQvJHtkZXBsb3ltZW50SWR9YCwgRGVwbG95bWVudEluc3RydWN0aW9uc1NjaGVtYSwgZGVwbG95bWVudCwgQnVpbGRNZXRhZGF0YVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG5jb25zdCBEZXBsb3ltZW50Q29tcGxldGVPYmplY3QgPSB6Lm9iamVjdCh7XG4gICAgc3RyZWFtSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHN0cmVhbSBpZCBmb3Igd2FybXVwIGxvZ3MnKSxcbiAgICBwdWJsaWNVcmxzOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICBsYXRlc3Q6IHouc3RyaW5nKCkudXJsKCkuZGVzY3JpYmUoJ3RoZSBwdWJsaWMgdXJsIGZvciB0aGUgbGF0ZXN0IGRlcGxveW1lbnQnKSxcbiAgICAgICAgZGVwbG95bWVudDogei5zdHJpbmcoKS51cmwoKS5kZXNjcmliZSgndGhlIHB1YmxpYyB1cmwgZm9yIHRoaXMgZGVwbG95bWVudCcpLFxuICAgICAgICBjdXN0b206IHouYXJyYXkoei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGN1c3RvbSBkb21haW4nKSksXG4gICAgfSlcbiAgICAgICAgLmRlc2NyaWJlKCd0aGUgbWFwIG9mIHB1YmxpYyB1cmxzJyksXG59KTtcbmNvbnN0IERlcGxveW1lbnRDb21wbGV0ZU9iamVjdFNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hKERlcGxveW1lbnRDb21wbGV0ZU9iamVjdCk7XG5leHBvcnQgY29uc3QgRGVwbG95bWVudFN0YXRlVmFsdWUgPSB6LmVudW0oW1xuICAgICdwZW5kaW5nJyxcbiAgICAnYnVpbGRpbmcnLFxuICAgICdkZXBsb3lpbmcnLFxuICAgICdmYWlsZWQnLFxuICAgICdjb21wbGV0ZWQnLFxuXSk7XG5jb25zdCBEZXBsb3ltZW50U3RhdHVzT2JqZWN0ID0gei5vYmplY3Qoe1xuICAgIHN0YXRlOiBEZXBsb3ltZW50U3RhdGVWYWx1ZS5kZXNjcmliZSgndGhlIGN1cnJlbnQgZGVwbG95bWVudCBzdGF0ZScpLFxufSk7XG5jb25zdCBEZXBsb3ltZW50U3RhdHVzT2JqZWN0U2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoRGVwbG95bWVudFN0YXR1c09iamVjdCk7XG4vKipcbiAqIENvbXBsZXRlIHRoZSBkZXBsb3ltZW50IG9uY2UgYnVpbGQgaXMgdXBsb2FkZWRcbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcGFyYW0gZGVwbG95bWVudElkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlcGxveW1lbnRDb21wbGV0ZShjbGllbnQsIGRlcGxveW1lbnRJZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnUE9TVCcsIGAvY2xpL2RlcGxveS8xL2NvbXBsZXRlLyR7ZGVwbG95bWVudElkfWAsIERlcGxveW1lbnRDb21wbGV0ZU9iamVjdFNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBwcm92aXNpb25pbmcgc3RhdHVzIG9mIGEgZGVwbG95bWVudFxuICpcbiAqIEBwYXJhbSBjbGllbnRcbiAqIEBwYXJhbSBkZXBsb3ltZW50SWRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9qZWN0RGVwbG95bWVudFN0YXR1cyhjbGllbnQsIGRlcGxveW1lbnRJZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnR0VUJywgYC9jbGkvZGVwbG95LzEvc3RhdHVzLyR7ZGVwbG95bWVudElkfWAsIERlcGxveW1lbnRTdGF0dXNPYmplY3RTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFByb2plY3RSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuY29uc3QgQ2xpZW50RGlhZ25vc3RpY3NFcnJvclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oWydmaWxlJywgJ2dlbmVyYWwnXSksXG4gICAgc2NvcGU6IHouZW51bShbJ3R5cGVzY3JpcHQnLCAnYXN0JywgJ2J1aWxkJywgJ2J1bmRsZXInLCAndmFsaWRhdGlvbicsICdkZXBsb3knXSksXG4gICAgcGF0aDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGxpbmU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBjb2x1bW46IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgIGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuY29uc3QgQ2xpZW50RGlhZ25vc3RpY3NUaW1pbmdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgY29tcGxldGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbn0pO1xuY29uc3QgQ2xpZW50RGlhZ25vc3RpY3NTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgc3VjY2Vzczogei5ib29sZWFuKCksXG4gICAgZXJyb3JzOiB6LmFycmF5KENsaWVudERpYWdub3N0aWNzRXJyb3JTY2hlbWEpLFxuICAgIHdhcm5pbmdzOiB6LmFycmF5KENsaWVudERpYWdub3N0aWNzRXJyb3JTY2hlbWEpLFxuICAgIGRpYWdub3N0aWNzOiB6LmFycmF5KENsaWVudERpYWdub3N0aWNzVGltaW5nU2NoZW1hKSxcbiAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5jb25zdCBEZXBsb3ltZW50RmFpbFBheWxvYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkaWFnbm9zdGljczogQ2xpZW50RGlhZ25vc3RpY3NTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuY29uc3QgRGVwbG95bWVudEZhaWxSZXNwb25zZU9iamVjdCA9IHoub2JqZWN0KHtcbiAgICBzdGF0ZTogei5saXRlcmFsKCdmYWlsZWQnKSxcbn0pO1xuY29uc3QgRGVwbG95bWVudEZhaWxSZXNwb25zZVNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hKERlcGxveW1lbnRGYWlsUmVzcG9uc2VPYmplY3QpO1xuLyoqXG4gKiBSZXBvcnQgYSBkZXBsb3ltZW50IGZhaWx1cmUgZnJvbSB0aGUgY2xpZW50XG4gKlxuICogQHBhcmFtIGNsaWVudFxuICogQHBhcmFtIGRlcGxveW1lbnRJZFxuICogQHBhcmFtIHBheWxvYWQgLSBFcnJvciBtZXNzYWdlIGFuZC9vciBzdHJ1Y3R1cmVkIGRpYWdub3N0aWNzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlcGxveW1lbnRGYWlsKGNsaWVudCwgZGVwbG95bWVudElkLCBwYXlsb2FkKSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KCdQT1NUJywgYC9jbGkvZGVwbG95LzEvZmFpbC8ke2RlcGxveW1lbnRJZH1gLCBEZXBsb3ltZW50RmFpbFJlc3BvbnNlU2NoZW1hLCBwYXlsb2FkLCBEZXBsb3ltZW50RmFpbFBheWxvYWRTY2hlbWEpO1xuICAgIGlmICghcmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBQcm9qZWN0UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSB9KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBsb3kuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hLCBBUElSZXNwb25zZVNjaGVtYU9wdGlvbmFsRGF0YSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBQcm9qZWN0UmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG4vLyBTaW1wbGlmaWVkIG1ldGFkYXRhIHNjaGVtYSBmb3IgdGhlIGNsaWVudFxuY29uc3QgRGVwbG95bWVudE1ldGFkYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGdpdDogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgcmVwbzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBjb21taXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgbWVzc2FnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBicmFuY2g6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgdGFnczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgICBwcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICB0cmlnZ2VyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIHVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBidWlsZFVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBldmVudDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBwdWxsX3JlcXVlc3Q6IHpcbiAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgbnVtYmVyOiB6Lm51bWJlcigpLFxuICAgICAgICAgICAgdXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIH0pXG4gICAgICAgICAgICAub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICBidWlsZDogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgYnVuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIGFnZW50dWl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICBhcmNoOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgIHBsYXRmb3JtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG59KTtcbmNvbnN0IERlcGxveW1lbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtZXNzYWdlOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgICB0YWdzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGFjdGl2ZTogei5ib29sZWFuKCksXG4gICAgY3JlYXRlZEF0OiB6LnN0cmluZygpLFxuICAgIHVwZGF0ZWRBdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gICAgbWV0YWRhdGE6IERlcGxveW1lbnRNZXRhZGF0YVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGN1c3RvbURvbWFpbnM6IHouYXJyYXkoei5zdHJpbmcoKSkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICAgIGNsb3VkUmVnaW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgICByZXNvdXJjZURiOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgICByZXNvdXJjZVN0b3JhZ2U6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICAgIGRlcGxveW1lbnRMb2dzVVJMOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgICBidWlsZExvZ3NVUkw6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxufSk7XG5jb25zdCBEZXBsb3ltZW50TGlzdFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoei5hcnJheShEZXBsb3ltZW50U2NoZW1hKSk7XG5jb25zdCBEZXBsb3ltZW50R2V0UmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShEZXBsb3ltZW50U2NoZW1hKTtcbmNvbnN0IERlcGxveW1lbnRBY3Rpb25SZXNwb25zZVNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hT3B0aW9uYWxEYXRhKHoub2JqZWN0KHsgYWN0aXZlRGVwbG95bWVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkgfSkpO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2plY3REZXBsb3ltZW50TGlzdChjbGllbnQsIHByb2plY3RJZCwgbGltaXQgPSAxMCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuZ2V0KGAvY2xpL3Byb2plY3QvJHtwcm9qZWN0SWR9L2RlcGxveW1lbnRzP2xpbWl0PSR7bGltaXR9YCwgRGVwbG95bWVudExpc3RSZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlcGxveW1lbnRHZXQoY2xpZW50LCBwcm9qZWN0SWQsIGRlcGxveW1lbnRJZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuZ2V0KGAvY2xpL3Byb2plY3QvJHtwcm9qZWN0SWR9L2RlcGxveW1lbnRzLyR7ZGVwbG95bWVudElkfWAsIERlcGxveW1lbnRHZXRSZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlcGxveW1lbnREZWxldGUoY2xpZW50LCBwcm9qZWN0SWQsIGRlcGxveW1lbnRJZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuZGVsZXRlKGAvY2xpL3Byb2plY3QvJHtwcm9qZWN0SWR9L2RlcGxveW1lbnRzLyR7ZGVwbG95bWVudElkfWAsIERlcGxveW1lbnRBY3Rpb25SZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKCFyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFByb2plY3RSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9qZWN0RGVwbG95bWVudFJvbGxiYWNrKGNsaWVudCwgcHJvamVjdElkLCBkZXBsb3ltZW50SWQpIHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnBvc3QoYC9jbGkvcHJvamVjdC8ke3Byb2plY3RJZH0vZGVwbG95bWVudHMvJHtkZXBsb3ltZW50SWR9L3JvbGxiYWNrYCwgdW5kZWZpbmVkLCBEZXBsb3ltZW50QWN0aW9uUmVzcG9uc2VTY2hlbWEpO1xuICAgIGlmICghcmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBQcm9qZWN0UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSB9KTtcbiAgICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdERlcGxveW1lbnRVbmRlcGxveShjbGllbnQsIHByb2plY3RJZCkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucG9zdChgL2NsaS9wcm9qZWN0LyR7cHJvamVjdElkfS9kZXBsb3ltZW50cy91bmRlcGxveWAsIHVuZGVmaW5lZCwgRGVwbG95bWVudEFjdGlvblJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAoIXJlc3Auc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IERlcGxveW1lbnRMb2dTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgYm9keTogei5zdHJpbmcoKSxcbiAgICBzZXZlcml0eTogei5zdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgc3BhbklkOiB6LnN0cmluZygpLFxuICAgIHRyYWNlSWQ6IHouc3RyaW5nKCksXG4gICAgc2VydmljZU5hbWU6IHouc3RyaW5nKCksXG59KTtcbmNvbnN0IERlcGxveW1lbnRMb2dzUmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYSh6LmFycmF5KERlcGxveW1lbnRMb2dTY2hlbWEpKTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9qZWN0RGVwbG95bWVudExvZ3MoY2xpZW50LCBwcm9qZWN0SWQsIGRlcGxveW1lbnRJZCwgbGltaXQgPSAxMDApIHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LmdldChgL2NsaS9wcm9qZWN0LyR7cHJvamVjdElkfS9kZXBsb3ltZW50cy8ke2RlcGxveW1lbnRJZH0vbG9ncz9saW1pdD0ke2xpbWl0fWAsIERlcGxveW1lbnRMb2dzUmVzcG9uc2VTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFByb2plY3RSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwbG95bWVudC5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWFOb0RhdGEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgUHJvamVjdFJlc3BvbnNlRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgX1Byb2plY3RFbnZEZWxldGVSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcHJvamVjdCBpZCcpLFxuICAgIGVudjogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdlbnZpcm9ubWVudCB2YXJpYWJsZSBrZXlzIHRvIGRlbGV0ZScpLFxuICAgIHNlY3JldHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgnc2VjcmV0IGtleXMgdG8gZGVsZXRlJyksXG59KTtcbmNvbnN0IFByb2plY3RFbnZEZWxldGVSZXNwb25zZVNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hTm9EYXRhKCk7XG4vKipcbiAqIERlbGV0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kL29yIHNlY3JldHMgZnJvbSBhIHByb2plY3QuXG4gKiBQcm92aWRlIGFycmF5cyBvZiBrZXlzIHRvIGRlbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2plY3RFbnZEZWxldGUoY2xpZW50LCByZXF1ZXN0KSB7XG4gICAgY29uc3QgeyBpZCwgZW52LCBzZWNyZXRzIH0gPSByZXF1ZXN0O1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnREVMRVRFJywgYC9jbGkvcHJvamVjdC8ke2lkfS9lbnZgLCBQcm9qZWN0RW52RGVsZXRlUmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgICAgZW52LFxuICAgICAgICBzZWNyZXRzLFxuICAgIH0pO1xuICAgIGlmICghcmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBQcm9qZWN0UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSA/PyAnZmFpbGVkIHRvIGRlbGV0ZSBwcm9qZWN0IGVudicgfSk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBvcGVyYXRpb25zIGRvbid0IHJldHVybiBkYXRhLCBzdWNjZXNzIGlzIHN1ZmZpY2llbnRcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudi1kZWxldGUuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFByb2plY3RSZXNwb25zZUVycm9yIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IF9Qcm9qZWN0R2V0UmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgaWQnKSxcbiAgICBtYXNrOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ2lmIHRoZSBzZWNyZXRzIHNob3VsZCBiZSByZXR1cm5lZCBtYXNrZWQnKSxcbiAgICBrZXlzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ2lmIHRoZSBwcm9qZWN0IGtleXMgc2hvdWxkIGJlIHJldHVybmVkJyksXG59KTtcbmNvbnN0IFByb2plY3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBwcm9qZWN0IGlkJyksXG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgbmFtZScpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHByb2plY3QgZGVzY3JpcHRpb24nKSxcbiAgICB0YWdzOiB6LmFycmF5KHouc3RyaW5nKCkpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHByb2plY3QgdGFncycpLFxuICAgIG9yZ0lkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgb3JnYW5pemF0aW9uIGlkJyksXG4gICAgY2xvdWRSZWdpb246IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgY2xvdWQgcmVnaW9uJyksXG4gICAgYXBpX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgU0RLIGFwaSBrZXkgZm9yIHRoZSBwcm9qZWN0JyksXG4gICAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgZW52aXJvbm1lbnQga2V5L3ZhbHVlcycpLFxuICAgIHNlY3JldHM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBzZWNyZXRzIGtleS92YWx1ZXMnKSxcbn0pO1xuY29uc3QgUHJvamVjdEdldFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoUHJvamVjdFNjaGVtYSk7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdEdldChjbGllbnQsIHJlcXVlc3QpIHtcbiAgICBjb25zdCBrZXlzID0gcmVxdWVzdC5rZXlzID8/IHRydWU7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5nZXQoYC9jbGkvcHJvamVjdC8ke3JlcXVlc3QuaWR9P21hc2s9JHtyZXF1ZXN0Lm1hc2sgPz8gdHJ1ZX0maW5jbHVkZVByb2plY3RLZXlzPSR7a2V5c31gLCBQcm9qZWN0R2V0UmVzcG9uc2VTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGtleXMgJiYgcmVzcC5kYXRhLnNlY3JldHM/LkFHRU5UVUlUWV9TREtfS0VZKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnJlc3AuZGF0YSxcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiByZXNwLmRhdGEuc2VjcmV0cy5BR0VOVFVJVFlfU0RLX0tFWSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFByb2plY3RSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBwcm9qZWN0R2V0IH0gZnJvbSAnLi9nZXQnO1xuaW1wb3J0IHsgUHJvamVjdFJlc3BvbnNlRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgX1Byb2plY3RFbnZVcGRhdGVSZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcHJvamVjdCBpZCcpLFxuICAgIGVudjogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgnZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldC91cGRhdGUnKSxcbiAgICBzZWNyZXRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdzZWNyZXRzIHRvIHNldC91cGRhdGUnKSxcbn0pO1xuY29uc3QgUHJvamVjdEVudlVwZGF0ZVJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoelxuICAgIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcHJvamVjdCBpZCcpLFxuICAgIG9yZ0lkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgb3JnYW5pemF0aW9uIGlkJyksXG4gICAgYXBpX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgU0RLIGFwaSBrZXkgZm9yIHRoZSBwcm9qZWN0JyksXG4gICAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgZW52aXJvbm1lbnQga2V5L3ZhbHVlcycpLFxuICAgIHNlY3JldHM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBzZWNyZXRzIGtleS92YWx1ZXMnKSxcbn0pXG4gICAgLm9wdGlvbmFsKCkpO1xuLyoqXG4gKiBVcGRhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZC9vciBzZWNyZXRzIGZvciBhIHByb2plY3QuXG4gKiBUaGlzIHdpbGwgbWVyZ2UgdGhlIHByb3ZpZGVkIGVudi9zZWNyZXRzIHdpdGggZXhpc3RpbmcgdmFsdWVzLlxuICogS2V5cyBzdGFydGluZyB3aXRoICdBR0VOVFVJVFlfJyBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9qZWN0RW52VXBkYXRlKGNsaWVudCwgcmVxdWVzdCkge1xuICAgIGNvbnN0IHsgaWQsIGVudiwgc2VjcmV0cyB9ID0gcmVxdWVzdDtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoJ1BVVCcsIGAvY2xpL3Byb2plY3QvJHtpZH0vZW52YCwgUHJvamVjdEVudlVwZGF0ZVJlc3BvbnNlU2NoZW1hLCB7XG4gICAgICAgIGVudixcbiAgICAgICAgc2VjcmV0cyxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3Auc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgUHJvamVjdFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgPz8gJ2ZhaWxlZCB0byB1cGRhdGUgcHJvamVjdCBlbnYnIH0pO1xuICAgIH1cbiAgICAvLyBGZXRjaCB0aGUgdXBkYXRlZCBwcm9qZWN0IHRvIGVuc3VyZSB3ZSBoYXZlIGNvbXBsZXRlIGRhdGEgaW5jbHVkaW5nIG5hbWVcbiAgICByZXR1cm4gcHJvamVjdEdldChjbGllbnQsIHsgaWQsIG1hc2s6IGZhbHNlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW52LXVwZGF0ZS5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEsIEFQSUVycm9yIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFByb2plY3RSZXNwb25zZUVycm9yIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IF9Qcm9qZWN0RXhpc3RzUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm1pbigxKS5kZXNjcmliZSgndGhlIG5hbWUgb2YgdGhlIG5ldyBwcm9qZWN0JyksXG4gICAgb3JnYW5pemF0aW9uX2lkOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAubWF4KDI1NSlcbiAgICAgICAgLm1pbigxKVxuICAgICAgICAuZGVzY3JpYmUoJ3RoZSBvcmdhbml6YXRpb24gaWQgdG8gY3JlYXRlIHRoZSBwcm9qZWN0IGluJyksXG59KTtcbmNvbnN0IFByb2plY3RFeGlzdHNSZXNwb25zZVNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hKHouYm9vbGVhbigpKTtcbi8qKlxuICogQ2hlY2sgaWYgYSBwcm9qZWN0IGV4aXN0cyBieSBuYW1lIHdpdGhpbiBhbiBvcmdhbml6YXRpb25cbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcGFyYW0gYm9keVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2plY3RFeGlzdHMoY2xpZW50LCBib2R5KSB7XG4gICAgY29uc3QgcXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcXMuc2V0KCdvcmdJZCcsIGJvZHkub3JnYW5pemF0aW9uX2lkKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoJ0dFVCcsIGAvY2xpL3Byb2plY3QvZXhpc3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkubmFtZSl9PyR7cXMudG9TdHJpbmcoKX1gLCBQcm9qZWN0RXhpc3RzUmVzcG9uc2VTY2hlbWEpO1xuICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgIGNvbnN0IF9leCA9IGV4O1xuICAgICAgICBpZiAoX2V4IGluc3RhbmNlb2YgQVBJRXJyb3IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2V4LnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgNDA5OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBQcm9qZWN0UmVzcG9uc2VFcnJvcih7IGNhdXNlOiBleCB9KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGlzdHMuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFByb2plY3RSZXNwb25zZUVycm9yIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IFByb2plY3RMaXN0UmVzcG9uc2UgPSB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHByb2plY3QgaWQnKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcHJvamVjdCBuYW1lJyksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIHByb2plY3QgZGVzY3JpcHRpb24nKSxcbiAgICBvcmdJZDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIG9yZ2FuaXphdGlvbiBpZCB0aGF0IHRoaXMgcHJvamVjdCBpcyByZWdpc3RlcmVkIHdpdGgnKSxcbiAgICBvcmdOYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgb3JnYW5pemF0aW9uIG5hbWUnKSxcbiAgICBjbG91ZFJlZ2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBjbG91ZCByZWdpb24nKSxcbiAgICBsYXRlc3REZXBsb3ltZW50SWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZXNjcmliZSgndGhlIGxhdGVzdCBkZXBsb3ltZW50IGlkJyksXG59KSk7XG5jb25zdCBQcm9qZWN0TGlzdFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoUHJvamVjdExpc3RSZXNwb25zZSk7XG4vKipcbiAqIExpc3QgYWxsIHByb2plY3RzXG4gKlxuICogQHBhcmFtIGNsaWVudFxuICogQHBhcmFtIGhhc0RlcGxveW1lbnQgaWYgdHJ1ZSwgZmlsdGVyIGJ5IHByb2plY3RzIHdpdGggYXQgbGVhc3Qgb25lIGRlcGxveW1lbnRcbiAqIEBwYXJhbSBsaW1pdCBtYXhpbXVtIG51bWJlciBvZiBwcm9qZWN0cyB0byByZXR1cm4gKGRlZmF1bHQ6IDEwMDAsIG1heDogMTAwMDApXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvamVjdExpc3QoY2xpZW50LCBoYXNEZXBsb3ltZW50LCBsaW1pdCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAoaGFzRGVwbG95bWVudCkge1xuICAgICAgICBwYXJhbXMuYXBwZW5kKCdoYXNEZXBsb3ltZW50JywgJ3RydWUnKTtcbiAgICB9XG4gICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyYW1zLmFwcGVuZCgnbGltaXQnLCBsaW1pdC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoJ0dFVCcsIGAvY2xpL3Byb2plY3Qke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gLCBQcm9qZWN0TGlzdFJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXNwLmRhdGE7XG4gICAgfVxuICAgIHRocm93IG5ldyBQcm9qZWN0UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpc3QuanMubWFwIiwKICAgICJleHBvcnQgKiBmcm9tICcuL2FnZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVsZXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwbG95JztcbmV4cG9ydCAqIGZyb20gJy4vZGVwbG95bWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Vudi1kZWxldGUnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnYtdXBkYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vZXhpc3RzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0JztcbmV4cG9ydCAqIGZyb20gJy4vbGlzdCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgUmVnaW9uUmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBMaXN0UmVnaW9uc1Jlc3BvbnNlID0gei5hcnJheSh6Lm9iamVjdCh7XG4gICAgcmVnaW9uOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcmVnaW9uIGlkZW50aWZpZXInKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWdpb24nKSxcbn0pKTtcbmNvbnN0IExpc3RSZWdpb25zUmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShMaXN0UmVnaW9uc1Jlc3BvbnNlKTtcbi8qKlxuICogTGlzdCBhbGwgYXZhaWxhYmxlIGNsb3VkIHJlZ2lvbnNcbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFJlZ2lvbnMoY2xpZW50KSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0KCdHRVQnLCAnL2NsaS9yZWdpb24nLCBMaXN0UmVnaW9uc1Jlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXNwLmRhdGE7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZWdpb25SZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlzdC5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgUmVnaW9uUmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBSZXNvdXJjZUxpc3RSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgICBzMzogei5hcnJheSh6Lm9iamVjdCh7XG4gICAgICAgIGJ1Y2tldF9uYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgUzMgYnVja2V0IG5hbWUnKSxcbiAgICAgICAgYWNjZXNzX2tleTogei5zdHJpbmcoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ3RoZSBTMyBhY2Nlc3Mga2V5JyksXG4gICAgICAgIHNlY3JldF9rZXk6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgUzMgc2VjcmV0IGtleScpLFxuICAgICAgICByZWdpb246IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgUzMgcmVnaW9uJyksXG4gICAgICAgIGVuZHBvaW50OiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIFMzIGVuZHBvaW50JyksXG4gICAgICAgIGNuYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIFMzIENOQU1FJyksXG4gICAgICAgIGVudjogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkuZGVzY3JpYmUoJ2Vudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHJlc291cmNlJyksXG4gICAgfSkpLFxuICAgIGRiOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGRhdGFiYXNlIG5hbWUnKSxcbiAgICAgICAgdXNlcm5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgZGF0YWJhc2UgdXNlcm5hbWUnKSxcbiAgICAgICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCd0aGUgZGF0YWJhc2UgcGFzc3dvcmQnKSxcbiAgICAgICAgdXJsOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKS5kZXNjcmliZSgndGhlIGZ1bGwgZGF0YWJhc2UgY29ubmVjdGlvbiBVUkwnKSxcbiAgICAgICAgZW52OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5kZXNjcmliZSgnZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcmVzb3VyY2UnKSxcbiAgICB9KSksXG4gICAgcmVkaXM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIHVybDogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIFJlZGlzIGNvbm5lY3Rpb24gVVJMJyksXG4gICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG59KTtcbmNvbnN0IFJlc291cmNlTGlzdFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoUmVzb3VyY2VMaXN0UmVzcG9uc2UpO1xuLyoqXG4gKiBMaXN0IGFsbCByZXNvdXJjZXMgZm9yIGEgZ2l2ZW4gb3JnYW5pemF0aW9uIGFuZCByZWdpb25cbiAqXG4gKiBAcGFyYW0gY2xpZW50XG4gKiBAcGFyYW0gb3JnSWRcbiAqIEBwYXJhbSByZWdpb25cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UmVzb3VyY2VzKGNsaWVudCwgb3JnSWQsIHJlZ2lvbikge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnR0VUJywgYC9yZXNvdXJjZS8yMDI1LTAzLTE3LyR7b3JnSWR9LyR7cmVnaW9ufWAsIFJlc291cmNlTGlzdFJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXNwLmRhdGE7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZWdpb25SZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb3VyY2VzLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBSZWdpb25SZXNwb25zZUVycm9yIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IFJlc291cmNlU3BlYyA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oWydkYicsICdzMyddKS5kZXNjcmliZSgndGhlIHJlc291cmNlIHR5cGUnKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ29wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciBkYicpLFxufSk7XG5jb25zdCBDcmVhdGVSZXNvdXJjZXNSZXF1ZXN0ID0gei5vYmplY3Qoe1xuICAgIHJlc291cmNlczogei5hcnJheShSZXNvdXJjZVNwZWMpLmRlc2NyaWJlKCdsaXN0IG9mIHJlc291cmNlcyB0byBjcmVhdGUnKSxcbn0pO1xuY29uc3QgQ3JlYXRlZFJlc291cmNlID0gei5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSByZXNvdXJjZSB0eXBlJyksXG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHJlc291cmNlIG5hbWUnKSxcbiAgICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLmRlc2NyaWJlKCdlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSByZXNvdXJjZScpLFxufSk7XG5jb25zdCBDcmVhdGVSZXNvdXJjZXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgICBjcmVhdGVkOiB6LmFycmF5KENyZWF0ZWRSZXNvdXJjZSksXG59KTtcbmNvbnN0IENyZWF0ZVJlc291cmNlc1Jlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoQ3JlYXRlUmVzb3VyY2VzUmVzcG9uc2UpO1xuLyoqXG4gKiBDcmVhdGUgb25lIG9yIG1vcmUgcmVzb3VyY2VzIChEQiBvciBTMykgZm9yIGFuIG9yZ2FuaXphdGlvbiBpbiBhIHNwZWNpZmljIHJlZ2lvblxuICogUmVxdWlyZXMgQ0xJIGF1dGhlbnRpY2F0aW9uXG4gKlxuICogQHBhcmFtIGNsaWVudCAtIENhdGFseXN0IEFQSSBjbGllbnRcbiAqIEBwYXJhbSBvcmdJZCAtIE9yZ2FuaXphdGlvbiBJRFxuICogQHBhcmFtIHJlZ2lvbiAtIENsb3VkIHJlZ2lvblxuICogQHBhcmFtIHJlc291cmNlcyAtIEFycmF5IG9mIHJlc291cmNlcyB0byBjcmVhdGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMoY2xpZW50LCBvcmdJZCwgcmVnaW9uLCByZXNvdXJjZXMpIHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoJ1BPU1QnLCBgL3Jlc291cmNlLzIwMjUtMTEtMTYvJHtvcmdJZH0vJHtyZWdpb259YCwgQ3JlYXRlUmVzb3VyY2VzUmVzcG9uc2VTY2hlbWEsIHsgcmVzb3VyY2VzIH0sIENyZWF0ZVJlc291cmNlc1JlcXVlc3QpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YS5jcmVhdGVkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUmVnaW9uUmVzcG9uc2VFcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IHJlc3AubWVzc2FnZSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgUmVnaW9uUmVzcG9uc2VFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBEZWxldGVSZXNvdXJjZVNwZWMgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFsnZGInLCAnczMnXSkuZGVzY3JpYmUoJ3RoZSByZXNvdXJjZSB0eXBlJyksXG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHJlc291cmNlIG5hbWUgKGJ1Y2tldF9uYW1lIGZvciBTMywgZGJfbmFtZSBmb3IgREIpJyksXG59KTtcbmNvbnN0IERlbGV0ZVJlc291cmNlc1JlcXVlc3QgPSB6Lm9iamVjdCh7XG4gICAgcmVzb3VyY2VzOiB6LmFycmF5KERlbGV0ZVJlc291cmNlU3BlYykuZGVzY3JpYmUoJ2xpc3Qgb2YgcmVzb3VyY2VzIHRvIGRlbGV0ZScpLFxufSk7XG5jb25zdCBEZWxldGVkUmVzb3VyY2UgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIHJlc291cmNlIHR5cGUnKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgcmVzb3VyY2UgbmFtZScpLFxuICAgIGVudl9rZXlzOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKCdlbnZpcm9ubWVudCB2YXJpYWJsZSBrZXlzIHRvIHJlbW92ZScpLFxufSk7XG5jb25zdCBEZWxldGVSZXNvdXJjZXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgICBkZWxldGVkOiB6LmFycmF5KERlbGV0ZWRSZXNvdXJjZSkuZGVzY3JpYmUoJ2xpc3Qgb2YgZGVsZXRlZCByZXNvdXJjZXMnKSxcbn0pO1xuY29uc3QgRGVsZXRlUmVzb3VyY2VzUmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShEZWxldGVSZXNvdXJjZXNSZXNwb25zZSk7XG4vKipcbiAqIERlbGV0ZSBvbmUgb3IgbW9yZSByZXNvdXJjZXMgKERCIG9yIFMzKSBmb3IgYW4gb3JnYW5pemF0aW9uIGluIGEgc3BlY2lmaWMgcmVnaW9uXG4gKiBSZXF1aXJlcyBDTEkgYXV0aGVudGljYXRpb25cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gQ2F0YWx5c3QgQVBJIGNsaWVudFxuICogQHBhcmFtIG9yZ0lkIC0gT3JnYW5pemF0aW9uIElEXG4gKiBAcGFyYW0gcmVnaW9uIC0gQ2xvdWQgcmVnaW9uXG4gKiBAcGFyYW0gcmVzb3VyY2VzIC0gQXJyYXkgb2YgcmVzb3VyY2VzIHRvIGRlbGV0ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVJlc291cmNlcyhjbGllbnQsIG9yZ0lkLCByZWdpb24sIHJlc291cmNlcykge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVxdWVzdCgnREVMRVRFJywgYC9yZXNvdXJjZS8yMDI1LTExLTE2LyR7b3JnSWR9LyR7cmVnaW9ufWAsIERlbGV0ZVJlc291cmNlc1Jlc3BvbnNlU2NoZW1hLCB7IHJlc291cmNlcyB9LCBEZWxldGVSZXNvdXJjZXNSZXF1ZXN0KTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXNwLmRhdGEuZGVsZXRlZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlZ2lvblJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxldGUuanMubWFwIiwKICAgICJleHBvcnQgKiBmcm9tICcuL2xpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvdXJjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxldGUnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIHNhbmRib3ggQVBJIHJlcXVlc3QgZmFpbHMuXG4gKlxuICogSW5jbHVkZXMgb3B0aW9uYWwgY29udGV4dCBhYm91dCB3aGljaCBzYW5kYm94IG9yIGV4ZWN1dGlvbiBjYXVzZWQgdGhlIGVycm9yLlxuICovXG5leHBvcnQgY29uc3QgU2FuZGJveFJlc3BvbnNlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1NhbmRib3hSZXNwb25zZUVycm9yJykoKTtcbi8qKiBDdXJyZW50IHNhbmRib3ggQVBJIHZlcnNpb24gKi9cbmV4cG9ydCBjb25zdCBBUElfVkVSU0lPTiA9ICcyMDI1LTAzLTE3Jztcbi8qKlxuICogV3JpdGUgYSBjaHVuayB0byBhIHdyaXRhYmxlIHN0cmVhbSBhbmQgd2FpdCBmb3IgaXQgdG8gZHJhaW4gaWYgbmVjZXNzYXJ5LlxuICogUHJvcGVybHkgY2xlYW5zIHVwIGV2ZW50IGxpc3RlbmVycyB0byBhdm9pZCBtZW1vcnkgbGVha3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFuZERyYWluKHdyaXRhYmxlLCBjaHVuaykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBuZWVkc0RyYWluO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmVlZHNEcmFpbiA9ICF3cml0YWJsZS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWRzRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGUucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25EcmFpbik7XG4gICAgICAgICAgICAgICAgd3JpdGFibGUucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25EcmFpbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHdyaXRhYmxlLm9uY2UoJ2RyYWluJywgb25EcmFpbik7XG4gICAgICAgICAgICB3cml0YWJsZS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBBUElSZXNwb25zZVNjaGVtYSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBTYW5kYm94UmVzcG9uc2VFcnJvciwgQVBJX1ZFUlNJT04gfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgU2FuZGJveENyZWF0ZVJlcXVlc3RTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgcmVzb3VyY2VzOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICBtZW1vcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnTWVtb3J5IGxpbWl0IChlLmcuLCBcIjUxMk1pXCIsIFwiMUdpXCIpJyksXG4gICAgICAgIGNwdTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdDUFUgbGltaXQgKGUuZy4sIFwiMC41XCIsIFwiMVwiKScpLFxuICAgICAgICBkaXNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0Rpc2sgc2l6ZSBsaW1pdCAoZS5nLiwgXCIxR2lcIiwgXCIxMEdpXCIpJyksXG4gICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKCdSZXNvdXJjZSBjb25zdHJhaW50cyBmb3IgdGhlIHNhbmRib3gnKSxcbiAgICBlbnY6IHpcbiAgICAgICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gdGhlIHNhbmRib3gnKSxcbiAgICBuZXR3b3JrOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICBlbmFibGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdXaGV0aGVyIG5ldHdvcmsgYWNjZXNzIGlzIGVuYWJsZWQnKSxcbiAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoJ05ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNhbmRib3gnKSxcbiAgICBzdHJlYW06IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIHN0ZG91dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdTdHJlYW0gSUQgZm9yIHN0ZG91dCBvdXRwdXQnKSxcbiAgICAgICAgc3RkZXJyOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1N0cmVhbSBJRCBmb3Igc3RkZXJyIG91dHB1dCcpLFxuICAgICAgICBzdGRpbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdTdHJlYW0gSUQgZm9yIHN0ZGluIGlucHV0JyksXG4gICAgICAgIHRpbWVzdGFtcHM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1doZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIG91dHB1dCcpLFxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgnU3RyZWFtIGNvbmZpZ3VyYXRpb24gZm9yIEkvTyByZWRpcmVjdGlvbicpLFxuICAgIHRpbWVvdXQ6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgIGlkbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnSWRsZSB0aW1lb3V0IGR1cmF0aW9uIChlLmcuLCBcIjVtXCIsIFwiMWhcIiknKSxcbiAgICAgICAgZXhlY3V0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ01heGltdW0gZXhlY3V0aW9uIHRpbWUgKGUuZy4sIFwiMzBtXCIsIFwiMmhcIiknKSxcbiAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoJ1RpbWVvdXQgc2V0dGluZ3MgZm9yIHRoZSBzYW5kYm94JyksXG4gICAgY29tbWFuZDogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgZXhlYzogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZSgnQ29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIGV4ZWN1dGUnKSxcbiAgICAgICAgZmlsZXM6IHpcbiAgICAgICAgICAgIC5hcnJheSh6Lm9iamVjdCh7XG4gICAgICAgICAgICBwYXRoOiB6XG4gICAgICAgICAgICAgICAgLnN0cmluZygpXG4gICAgICAgICAgICAgICAgLmRlc2NyaWJlKCdQYXRoIHRvIHRoZSBmaWxlIHJlbGF0aXZlIHRvIHRoZSBzYW5kYm94IHdvcmtzcGFjZScpLFxuICAgICAgICAgICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZSgnQmFzZTY0LWVuY29kZWQgZmlsZSBjb250ZW50JyksXG4gICAgICAgIH0pKVxuICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgIC5kZXNjcmliZSgnRmlsZXMgdG8gd3JpdGUgYmVmb3JlIGV4ZWN1dGlvbicpLFxuICAgICAgICBtb2RlOiB6XG4gICAgICAgICAgICAuZW51bShbJ29uZXNob3QnLCAnaW50ZXJhY3RpdmUnXSlcbiAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAuZGVzY3JpYmUoJ0V4ZWN1dGlvbiBtb2RlOiBvbmVzaG90IHJ1bnMgb25jZSwgaW50ZXJhY3RpdmUga2VlcHMgcnVubmluZycpLFxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgnSW5pdGlhbCBjb21tYW5kIHRvIHJ1biBpbiB0aGUgc2FuZGJveCcpLFxuICAgIHNuYXBzaG90OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1NuYXBzaG90IElEIHRvIHJlc3RvcmUgdGhlIHNhbmRib3ggZnJvbScpLFxuICAgIGRlcGVuZGVuY2llczogelxuICAgICAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKCdBcHQgcGFja2FnZXMgdG8gaW5zdGFsbCB3aGVuIGNyZWF0aW5nIHRoZSBzYW5kYm94JyksXG4gICAgbWV0YWRhdGE6IHpcbiAgICAgICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKCdPcHRpb25hbCB1c2VyLWRlZmluZWQgbWV0YWRhdGEgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNhbmRib3gnKSxcbn0pXG4gICAgLmRlc2NyaWJlKCdSZXF1ZXN0IGJvZHkgZm9yIGNyZWF0aW5nIGEgbmV3IHNhbmRib3gnKTtcbmNvbnN0IFNhbmRib3hDcmVhdGVEYXRhU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHNhbmRib3hJZDogei5zdHJpbmcoKS5kZXNjcmliZSgnVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjcmVhdGVkIHNhbmRib3gnKSxcbiAgICBzdGF0dXM6IHpcbiAgICAgICAgLmVudW0oWydjcmVhdGluZycsICdpZGxlJywgJ3J1bm5pbmcnLCAndGVybWluYXRlZCcsICdmYWlsZWQnXSlcbiAgICAgICAgLmRlc2NyaWJlKCdDdXJyZW50IHN0YXR1cyBvZiB0aGUgc2FuZGJveCcpLFxuICAgIHN0ZG91dFN0cmVhbUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1N0cmVhbSBJRCBmb3IgcmVhZGluZyBzdGRvdXQnKSxcbiAgICBzdGRvdXRTdHJlYW1Vcmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnVVJMIGZvciBzdHJlYW1pbmcgc3Rkb3V0IG91dHB1dCcpLFxuICAgIHN0ZGVyclN0cmVhbUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1N0cmVhbSBJRCBmb3IgcmVhZGluZyBzdGRlcnInKSxcbiAgICBzdGRlcnJTdHJlYW1Vcmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnVVJMIGZvciBzdHJlYW1pbmcgc3RkZXJyIG91dHB1dCcpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1Jlc3BvbnNlIGRhdGEgZnJvbSBzYW5kYm94IGNyZWF0aW9uJyk7XG5jb25zdCBTYW5kYm94Q3JlYXRlUmVzcG9uc2VTY2hlbWEgPSBBUElSZXNwb25zZVNjaGVtYShTYW5kYm94Q3JlYXRlRGF0YVNjaGVtYSk7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2FuZGJveCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIHRoZSBzYW5kYm94XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBzYW5kYm94IHJlc3BvbnNlIGluY2x1ZGluZyBzYW5kYm94IElEIGFuZCBzdHJlYW0gVVJMc1xuICogQHRocm93cyB7U2FuZGJveFJlc3BvbnNlRXJyb3J9IElmIHRoZSBzYW5kYm94IGNyZWF0aW9uIGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYW5kYm94Q3JlYXRlKGNsaWVudCwgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCB7IG9wdGlvbnMgPSB7fSwgb3JnSWQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBib2R5ID0ge307XG4gICAgaWYgKG9wdGlvbnMucmVzb3VyY2VzKSB7XG4gICAgICAgIGJvZHkucmVzb3VyY2VzID0gb3B0aW9ucy5yZXNvdXJjZXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVudikge1xuICAgICAgICBib2R5LmVudiA9IG9wdGlvbnMuZW52O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5uZXR3b3JrKSB7XG4gICAgICAgIGJvZHkubmV0d29yayA9IG9wdGlvbnMubmV0d29yaztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RyZWFtKSB7XG4gICAgICAgIGJvZHkuc3RyZWFtID0gb3B0aW9ucy5zdHJlYW07XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgICAgYm9keS50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jb21tYW5kKSB7XG4gICAgICAgIGJvZHkuY29tbWFuZCA9IHtcbiAgICAgICAgICAgIGV4ZWM6IG9wdGlvbnMuY29tbWFuZC5leGVjLFxuICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5jb21tYW5kLm1vZGUsXG4gICAgICAgICAgICBmaWxlczogb3B0aW9ucy5jb21tYW5kLmZpbGVzPy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAgICAgICAgcGF0aDogZi5wYXRoLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGYuY29udGVudC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNuYXBzaG90KSB7XG4gICAgICAgIGJvZHkuc25hcHNob3QgPSBvcHRpb25zLnNuYXBzaG90O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5kZXBlbmRlbmNpZXMgJiYgb3B0aW9ucy5kZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBib2R5LmRlcGVuZGVuY2llcyA9IG9wdGlvbnMuZGVwZW5kZW5jaWVzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5tZXRhZGF0YSkge1xuICAgICAgICBib2R5Lm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnb3JnSWQnLCBvcmdJZCk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB1cmwgPSBgL3NhbmRib3gvJHtBUElfVkVSU0lPTn0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucG9zdCh1cmwsIGJvZHksIFNhbmRib3hDcmVhdGVSZXNwb25zZVNjaGVtYSwgU2FuZGJveENyZWF0ZVJlcXVlc3RTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlc3AuZGF0YTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTYW5kYm94UmVzcG9uc2VFcnJvciwgQVBJX1ZFUlNJT04gfSBmcm9tICcuL3V0aWwnO1xuZXhwb3J0IGNvbnN0IEZpbGVUb1dyaXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1BhdGggdG8gdGhlIGZpbGUgcmVsYXRpdmUgdG8gdGhlIHNhbmRib3ggd29ya3NwYWNlJyksXG4gICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZSgnQmFzZTY0LWVuY29kZWQgZmlsZSBjb250ZW50JyksXG59KTtcbmNvbnN0IFdyaXRlRmlsZXNSZXF1ZXN0U2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIGZpbGVzOiB6LmFycmF5KEZpbGVUb1dyaXRlU2NoZW1hKS5kZXNjcmliZSgnQXJyYXkgb2YgZmlsZXMgdG8gd3JpdGUnKSxcbn0pXG4gICAgLmRlc2NyaWJlKCdSZXF1ZXN0IGJvZHkgZm9yIHdyaXRpbmcgZmlsZXMgdG8gYSBzYW5kYm94Jyk7XG5jb25zdCBXcml0ZUZpbGVzRGF0YVNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBmaWxlc1dyaXR0ZW46IHoubnVtYmVyKCkuZGVzY3JpYmUoJ051bWJlciBvZiBmaWxlcyBzdWNjZXNzZnVsbHkgd3JpdHRlbicpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1Jlc3BvbnNlIGRhdGEgZnJvbSB3cml0aW5nIGZpbGVzJyk7XG5jb25zdCBXcml0ZUZpbGVzUmVzcG9uc2VTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbignc3VjY2VzcycsIFtcbiAgICB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBlcnJvciBtZXNzYWdlJyksXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSksXG4gICAgICAgIGRhdGE6IFdyaXRlRmlsZXNEYXRhU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgICAgIGZpbGVzV3JpdHRlbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuXSk7XG4vKipcbiAqIFdyaXRlcyBmaWxlcyB0byBhIHNhbmRib3ggd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSBjbGllbnQgLSBUaGUgQVBJIGNsaWVudCB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBpbmNsdWRpbmcgc2FuZGJveCBJRCBhbmQgZmlsZXMgdG8gd3JpdGVcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgaW5jbHVkaW5nIG51bWJlciBvZiBmaWxlcyB3cml0dGVuXG4gKiBAdGhyb3dzIHtTYW5kYm94UmVzcG9uc2VFcnJvcn0gSWYgdGhlIHdyaXRlIHJlcXVlc3QgZmFpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hXcml0ZUZpbGVzKGNsaWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBzYW5kYm94SWQsIGZpbGVzLCBvcmdJZCwgc2lnbmFsIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgZmlsZXM6IGZpbGVzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICAgIHBhdGg6IGYucGF0aCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGYuY29udGVudC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29yZ0lkJywgb3JnSWQpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdXJsID0gYC9mcy8ke0FQSV9WRVJTSU9OfS8ke3NhbmRib3hJZH0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucG9zdCh1cmwsIGJvZHksIFdyaXRlRmlsZXNSZXNwb25zZVNjaGVtYSwgV3JpdGVGaWxlc1JlcXVlc3RTY2hlbWEsIHNpZ25hbCk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsZXNXcml0dGVuOiByZXNwLmRhdGE/LmZpbGVzV3JpdHRlbiA/PyByZXNwLmZpbGVzV3JpdHRlbiA/PyAwLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UsIHNhbmRib3hJZCB9KTtcbn1cbi8qKlxuICogUmVhZHMgYSBmaWxlIGZyb20gYSBzYW5kYm94IHdvcmtzcGFjZS5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHNhbmRib3ggSUQgYW5kIGZpbGUgcGF0aFxuICogQHJldHVybnMgQSBSZWFkYWJsZVN0cmVhbSBvZiB0aGUgZmlsZSBjb250ZW50c1xuICogQHRocm93cyB7U2FuZGJveFJlc3BvbnNlRXJyb3J9IElmIHRoZSByZWFkIHJlcXVlc3QgZmFpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hSZWFkRmlsZShjbGllbnQsIHBhcmFtcykge1xuICAgIGNvbnN0IHsgc2FuZGJveElkLCBwYXRoLCBvcmdJZCwgc2lnbmFsIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcXVlcnlQYXJhbXMuc2V0KCdwYXRoJywgcGF0aCk7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnb3JnSWQnLCBvcmdJZCk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB1cmwgPSBgL2ZzLyR7QVBJX1ZFUlNJT059LyR7c2FuZGJveElkfT8ke3F1ZXJ5U3RyaW5nfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucmF3R2V0KHVybCwgc2lnbmFsKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gJ1Vua25vd24gZXJyb3InKTtcbiAgICAgICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gcmVhZCBmaWxlOiAke3Jlc3BvbnNlLnN0YXR1c30gJHt0ZXh0fWAsXG4gICAgICAgICAgICBzYW5kYm94SWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdObyByZXNwb25zZSBib2R5JyxcbiAgICAgICAgICAgIHNhbmRib3hJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xufVxuY29uc3QgTWtEaXJSZXF1ZXN0U2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1BhdGggdG8gdGhlIGRpcmVjdG9yeSB0byBjcmVhdGUnKSxcbiAgICByZWN1cnNpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0NyZWF0ZSBwYXJlbnQgZGlyZWN0b3JpZXMgaWYgbmVlZGVkJyksXG59KVxuICAgIC5kZXNjcmliZSgnUmVxdWVzdCBib2R5IGZvciBjcmVhdGluZyBhIGRpcmVjdG9yeScpO1xuY29uc3QgTWtEaXJSZXNwb25zZVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCdzdWNjZXNzJywgW1xuICAgIHoub2JqZWN0KHtcbiAgICAgICAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgICAgICAgbWVzc2FnZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGVycm9yIG1lc3NhZ2UnKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICB9KSxcbl0pO1xuLyoqXG4gKiBDcmVhdGVzIGEgZGlyZWN0b3J5IGluIGEgc2FuZGJveCB3b3Jrc3BhY2UuXG4gKlxuICogQHBhcmFtIGNsaWVudCAtIFRoZSBBUEkgY2xpZW50IHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGluY2x1ZGluZyBzYW5kYm94IElELCBwYXRoLCBhbmQgcmVjdXJzaXZlIGZsYWdcbiAqIEB0aHJvd3Mge1NhbmRib3hSZXNwb25zZUVycm9yfSBJZiB0aGUgbWtkaXIgcmVxdWVzdCBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveE1rRGlyKGNsaWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBzYW5kYm94SWQsIHBhdGgsIHJlY3Vyc2l2ZSwgb3JnSWQsIHNpZ25hbCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJlY3Vyc2l2ZTogcmVjdXJzaXZlID8/IGZhbHNlLFxuICAgIH07XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnb3JnSWQnLCBvcmdJZCk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB1cmwgPSBgL2ZzLyR7QVBJX1ZFUlNJT059L21rZGlyLyR7c2FuZGJveElkfSR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5wb3N0KHVybCwgYm9keSwgTWtEaXJSZXNwb25zZVNjaGVtYSwgTWtEaXJSZXF1ZXN0U2NoZW1hLCBzaWduYWwpO1xuICAgIGlmICghcmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBTYW5kYm94UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSwgc2FuZGJveElkIH0pO1xuICAgIH1cbn1cbmNvbnN0IFJtRGlyUmVxdWVzdFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKCdQYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gcmVtb3ZlJyksXG4gICAgcmVjdXJzaXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdSZW1vdmUgZGlyZWN0b3J5IGFuZCBhbGwgY29udGVudHMnKSxcbn0pXG4gICAgLmRlc2NyaWJlKCdSZXF1ZXN0IGJvZHkgZm9yIHJlbW92aW5nIGEgZGlyZWN0b3J5Jyk7XG5jb25zdCBSbURpclJlc3BvbnNlU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ3N1Y2Nlc3MnLCBbXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgZXJyb3IgbWVzc2FnZScpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgICAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICAgIH0pLFxuXSk7XG4vKipcbiAqIFJlbW92ZXMgYSBkaXJlY3RvcnkgZnJvbSBhIHNhbmRib3ggd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSBjbGllbnQgLSBUaGUgQVBJIGNsaWVudCB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBpbmNsdWRpbmcgc2FuZGJveCBJRCwgcGF0aCwgYW5kIHJlY3Vyc2l2ZSBmbGFnXG4gKiBAdGhyb3dzIHtTYW5kYm94UmVzcG9uc2VFcnJvcn0gSWYgdGhlIHJtZGlyIHJlcXVlc3QgZmFpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hSbURpcihjbGllbnQsIHBhcmFtcykge1xuICAgIGNvbnN0IHsgc2FuZGJveElkLCBwYXRoLCByZWN1cnNpdmUsIG9yZ0lkLCBzaWduYWwgfSA9IHBhcmFtcztcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBwYXRoLFxuICAgICAgICByZWN1cnNpdmU6IHJlY3Vyc2l2ZSA/PyBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29yZ0lkJywgb3JnSWQpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdXJsID0gYC9mcy8ke0FQSV9WRVJTSU9OfS9ybWRpci8ke3NhbmRib3hJZH0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucG9zdCh1cmwsIGJvZHksIFJtRGlyUmVzcG9uc2VTY2hlbWEsIFJtRGlyUmVxdWVzdFNjaGVtYSwgc2lnbmFsKTtcbiAgICBpZiAoIXJlc3Auc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UsIHNhbmRib3hJZCB9KTtcbiAgICB9XG59XG5jb25zdCBSbUZpbGVSZXF1ZXN0U2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1BhdGggdG8gdGhlIGZpbGUgdG8gcmVtb3ZlJyksXG59KVxuICAgIC5kZXNjcmliZSgnUmVxdWVzdCBib2R5IGZvciByZW1vdmluZyBhIGZpbGUnKTtcbmNvbnN0IFJtRmlsZVJlc3BvbnNlU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ3N1Y2Nlc3MnLCBbXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgZXJyb3IgbWVzc2FnZScpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgICAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICAgIH0pLFxuXSk7XG4vKipcbiAqIFJlbW92ZXMgYSBmaWxlIGZyb20gYSBzYW5kYm94IHdvcmtzcGFjZS5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHNhbmRib3ggSUQgYW5kIHBhdGhcbiAqIEB0aHJvd3Mge1NhbmRib3hSZXNwb25zZUVycm9yfSBJZiB0aGUgcm0gcmVxdWVzdCBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveFJtRmlsZShjbGllbnQsIHBhcmFtcykge1xuICAgIGNvbnN0IHsgc2FuZGJveElkLCBwYXRoLCBvcmdJZCwgc2lnbmFsIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgcGF0aCxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29yZ0lkJywgb3JnSWQpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdXJsID0gYC9mcy8ke0FQSV9WRVJTSU9OfS9ybS8ke3NhbmRib3hJZH0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucG9zdCh1cmwsIGJvZHksIFJtRmlsZVJlc3BvbnNlU2NoZW1hLCBSbUZpbGVSZXF1ZXN0U2NoZW1hLCBzaWduYWwpO1xuICAgIGlmICghcmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBTYW5kYm94UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSwgc2FuZGJveElkIH0pO1xuICAgIH1cbn1cbmNvbnN0IEZpbGVJbmZvU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ0ZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgbGlzdGVkIGRpcmVjdG9yeScpLFxuICAgIHNpemU6IHoubnVtYmVyKCkuZGVzY3JpYmUoJ0ZpbGUgc2l6ZSBpbiBieXRlcycpLFxuICAgIGlzRGlyOiB6LmJvb2xlYW4oKS5kZXNjcmliZSgnV2hldGhlciB0aGUgZW50cnkgaXMgYSBkaXJlY3RvcnknKSxcbiAgICBtb2RlOiB6LnN0cmluZygpLmRlc2NyaWJlKCdVbml4IHBlcm1pc3Npb25zIGFzIG9jdGFsIHN0cmluZyAoZS5nLiwgXCIwNjQ0XCIpJyksXG4gICAgbW9kVGltZTogei5zdHJpbmcoKS5kZXNjcmliZSgnTW9kaWZpY2F0aW9uIHRpbWUgaW4gUkZDMzMzOSBmb3JtYXQnKSxcbn0pO1xuY29uc3QgTGlzdEZpbGVzRGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBmaWxlczogei5hcnJheShGaWxlSW5mb1NjaGVtYSkuZGVzY3JpYmUoJ0FycmF5IG9mIGZpbGUgaW5mb3JtYXRpb24nKSxcbn0pO1xuY29uc3QgTGlzdEZpbGVzUmVzcG9uc2VTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbignc3VjY2VzcycsIFtcbiAgICB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gICAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBlcnJvciBtZXNzYWdlJyksXG4gICAgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSksXG4gICAgICAgIGRhdGE6IExpc3RGaWxlc0RhdGFTY2hlbWEsXG4gICAgfSksXG5dKTtcbi8qKlxuICogTGlzdHMgZmlsZXMgaW4gYSBzYW5kYm94IHdvcmtzcGFjZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIGNsaWVudCAtIFRoZSBBUEkgY2xpZW50IHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGluY2x1ZGluZyBzYW5kYm94IElEIGFuZCBvcHRpb25hbCBwYXRoXG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXNcbiAqIEB0aHJvd3Mge1NhbmRib3hSZXNwb25zZUVycm9yfSBJZiB0aGUgbGlzdCByZXF1ZXN0IGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYW5kYm94TGlzdEZpbGVzKGNsaWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBzYW5kYm94SWQsIHBhdGgsIG9yZ0lkLCBzaWduYWwgfSA9IHBhcmFtcztcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ3BhdGgnLCBwYXRoKTtcbiAgICB9XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnb3JnSWQnLCBvcmdJZCk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB1cmwgPSBgL2ZzLyR7QVBJX1ZFUlNJT059L2xpc3QvJHtzYW5kYm94SWR9JHtxdWVyeVN0cmluZyA/IGA/JHtxdWVyeVN0cmluZ31gIDogJyd9YDtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LmdldCh1cmwsIExpc3RGaWxlc1Jlc3BvbnNlU2NoZW1hLCBzaWduYWwpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbGVzOiByZXNwLmRhdGEuZmlsZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBTYW5kYm94UmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IHJlc3AubWVzc2FnZSwgc2FuZGJveElkIH0pO1xufVxuLyoqXG4gKiBEb3dubG9hZHMgZmlsZXMgZnJvbSBhIHNhbmRib3ggYXMgYSBjb21wcmVzc2VkIGFyY2hpdmUuXG4gKlxuICogQHBhcmFtIGNsaWVudCAtIFRoZSBBUEkgY2xpZW50IHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGluY2x1ZGluZyBzYW5kYm94IElELCBwYXRoLCBhbmQgZm9ybWF0XG4gKiBAcmV0dXJucyBBIFJlYWRhYmxlU3RyZWFtIG9mIHRoZSBhcmNoaXZlIGNvbnRlbnRzXG4gKiBAdGhyb3dzIHtTYW5kYm94UmVzcG9uc2VFcnJvcn0gSWYgdGhlIGRvd25sb2FkIHJlcXVlc3QgZmFpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hEb3dubG9hZEFyY2hpdmUoY2xpZW50LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHNhbmRib3hJZCwgcGF0aCwgZm9ybWF0LCBvcmdJZCwgc2lnbmFsIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdwYXRoJywgcGF0aCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdmb3JtYXQnLCBmb3JtYXQpO1xuICAgIH1cbiAgICBpZiAob3JnSWQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdvcmdJZCcsIG9yZ0lkKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgIGNvbnN0IHVybCA9IGAvZnMvJHtBUElfVkVSU0lPTn0vZG93bmxvYWQvJHtzYW5kYm94SWR9JHtxdWVyeVN0cmluZyA/IGA/JHtxdWVyeVN0cmluZ31gIDogJyd9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5yYXdHZXQodXJsLCBzaWduYWwpO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3Ioe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBkb3dubG9hZCBhcmNoaXZlOiAke3Jlc3BvbnNlLnN0YXR1c30gJHt0ZXh0fWAsXG4gICAgICAgICAgICBzYW5kYm94SWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdObyByZXNwb25zZSBib2R5JyxcbiAgICAgICAgICAgIHNhbmRib3hJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xufVxuY29uc3QgVXBsb2FkQXJjaGl2ZVJlc3BvbnNlU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ3N1Y2Nlc3MnLCBbXG4gICAgei5vYmplY3Qoe1xuICAgICAgICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgZXJyb3IgbWVzc2FnZScpLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgICAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICAgIH0pLFxuXSk7XG4vKipcbiAqIFVwbG9hZHMgYSBjb21wcmVzc2VkIGFyY2hpdmUgdG8gYSBzYW5kYm94IGFuZCBleHRyYWN0cyBpdC5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHNhbmRib3ggSUQsIGFyY2hpdmUgZGF0YSwgcGF0aCwgYW5kIG9wdGlvbmFsIGZvcm1hdFxuICogQHRocm93cyB7U2FuZGJveFJlc3BvbnNlRXJyb3J9IElmIHRoZSB1cGxvYWQgcmVxdWVzdCBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveFVwbG9hZEFyY2hpdmUoY2xpZW50LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHNhbmRib3hJZCwgYXJjaGl2ZSwgcGF0aCwgZm9ybWF0LCBvcmdJZCwgc2lnbmFsIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdwYXRoJywgcGF0aCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdmb3JtYXQnLCBmb3JtYXQpO1xuICAgIH1cbiAgICBpZiAob3JnSWQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdvcmdJZCcsIG9yZ0lkKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgIGNvbnN0IHVybCA9IGAvZnMvJHtBUElfVkVSU0lPTn0vdXBsb2FkLyR7c2FuZGJveElkfSR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucmF3UG9zdCh1cmwsIGFyY2hpdmUsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCBzaWduYWwpO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3Ioe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byB1cGxvYWQgYXJjaGl2ZTogJHtyZXNwb25zZS5zdGF0dXN9ICR7dGV4dH1gLFxuICAgICAgICAgICAgc2FuZGJveElkLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBjb25zdCByZXN1bHQgPSBVcGxvYWRBcmNoaXZlUmVzcG9uc2VTY2hlbWEucGFyc2UoYm9keSk7XG4gICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXN1bHQubWVzc2FnZSwgc2FuZGJveElkIH0pO1xuICAgIH1cbn1cbmNvbnN0IFNldEVudlJlcXVlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgZW52OiB6XG4gICAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKS5udWxsYWJsZSgpKVxuICAgICAgICAuZGVzY3JpYmUoJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgKG51bGwgdG8gZGVsZXRlKScpLFxufSk7XG5jb25zdCBTZXRFbnZEYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGVudjogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkuZGVzY3JpYmUoJ0N1cnJlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFmdGVyIHVwZGF0ZScpLFxufSk7XG5jb25zdCBTZXRFbnZSZXNwb25zZVNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCdzdWNjZXNzJywgW1xuICAgIHoub2JqZWN0KHtcbiAgICAgICAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgICAgICAgbWVzc2FnZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIGVycm9yIG1lc3NhZ2UnKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICAgIHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICAgICAgZGF0YTogU2V0RW52RGF0YVNjaGVtYSxcbiAgICB9KSxcbl0pO1xuLyoqXG4gKiBTZXRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBhIHNhbmRib3guIFBhc3MgbnVsbCB0byBkZWxldGUgYSB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHNhbmRib3ggSUQgYW5kIGVudiBrZXkvdmFsdWUgcGFpcnNcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGVudmlyb25tZW50IHZhcmlhYmxlcyBhZnRlciB0aGUgdXBkYXRlXG4gKiBAdGhyb3dzIHtTYW5kYm94UmVzcG9uc2VFcnJvcn0gSWYgdGhlIHJlcXVlc3QgZmFpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hTZXRFbnYoY2xpZW50LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHNhbmRib3hJZCwgZW52LCBvcmdJZCwgc2lnbmFsIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgYm9keSA9IHsgZW52IH07XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnb3JnSWQnLCBvcmdJZCk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB1cmwgPSBgL3NhbmRib3gvZW52LyR7QVBJX1ZFUlNJT059LyR7c2FuZGJveElkfSR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5wYXRjaCh1cmwsIGJvZHksIFNldEVudlJlc3BvbnNlU2NoZW1hLCBTZXRFbnZSZXF1ZXN0U2NoZW1hLCBzaWduYWwpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVudjogcmVzcC5kYXRhLmVudixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlLCBzYW5kYm94SWQgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlcy5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgU2FuZGJveFJlc3BvbnNlRXJyb3IsIEFQSV9WRVJTSU9OIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IEZpbGVUb1dyaXRlU2NoZW1hIH0gZnJvbSAnLi9maWxlcyc7XG5jb25zdCBFeGVjdXRlUmVxdWVzdFNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBjb21tYW5kOiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKCdDb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gZXhlY3V0ZScpLFxuICAgIGZpbGVzOiB6LmFycmF5KEZpbGVUb1dyaXRlU2NoZW1hKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdGaWxlcyB0byB3cml0ZSBiZWZvcmUgZXhlY3V0aW9uJyksXG4gICAgdGltZW91dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdFeGVjdXRpb24gdGltZW91dCAoZS5nLiwgXCIzMHNcIiwgXCI1bVwiKScpLFxuICAgIHN0cmVhbTogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgc3Rkb3V0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1N0cmVhbSBJRCBmb3Igc3Rkb3V0IG91dHB1dCcpLFxuICAgICAgICBzdGRlcnI6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnU3RyZWFtIElEIGZvciBzdGRlcnIgb3V0cHV0JyksXG4gICAgICAgIHRpbWVzdGFtcHM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1doZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIG91dHB1dCcpLFxuICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgnU3RyZWFtIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dCByZWRpcmVjdGlvbicpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1JlcXVlc3QgYm9keSBmb3IgZXhlY3V0aW5nIGEgY29tbWFuZCBpbiBhIHNhbmRib3gnKTtcbmNvbnN0IEV4ZWN1dGVEYXRhU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIGV4ZWN1dGlvbklkOiB6LnN0cmluZygpLmRlc2NyaWJlKCdVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGV4ZWN1dGlvbicpLFxuICAgIHN0YXR1czogelxuICAgICAgICAuZW51bShbJ3F1ZXVlZCcsICdydW5uaW5nJywgJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAndGltZW91dCcsICdjYW5jZWxsZWQnXSlcbiAgICAgICAgLmRlc2NyaWJlKCdDdXJyZW50IHN0YXR1cyBvZiB0aGUgZXhlY3V0aW9uJyksXG4gICAgZXhpdENvZGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnRXhpdCBjb2RlIG9mIHRoZSBleGVjdXRlZCBjb21tYW5kJyksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdFeGVjdXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzJyksXG4gICAgc3Rkb3V0U3RyZWFtVXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1VSTCBmb3Igc3RyZWFtaW5nIHN0ZG91dCBvdXRwdXQnKSxcbiAgICBzdGRlcnJTdHJlYW1Vcmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnVVJMIGZvciBzdHJlYW1pbmcgc3RkZXJyIG91dHB1dCcpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1Jlc3BvbnNlIGRhdGEgZnJvbSBjb21tYW5kIGV4ZWN1dGlvbicpO1xuY29uc3QgRXhlY3V0ZVJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoRXhlY3V0ZURhdGFTY2hlbWEpO1xuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQgaW4gYW4gZXhpc3Rpbmcgc2FuZGJveC5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHNhbmRib3ggSUQgYW5kIGV4ZWN1dGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZXhlY3V0aW9uIHJlc3VsdCBpbmNsdWRpbmcgc3RhdHVzIGFuZCBzdHJlYW0gVVJMc1xuICogQHRocm93cyB7U2FuZGJveFJlc3BvbnNlRXJyb3J9IElmIHRoZSBleGVjdXRpb24gcmVxdWVzdCBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveEV4ZWN1dGUoY2xpZW50LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHNhbmRib3hJZCwgb3B0aW9ucywgb3JnSWQsIHNpZ25hbCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGNvbW1hbmQ6IG9wdGlvbnMuY29tbWFuZCxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zLmZpbGVzKSB7XG4gICAgICAgIGJvZHkuZmlsZXMgPSBvcHRpb25zLmZpbGVzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICAgIHBhdGg6IGYucGF0aCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGYuY29udGVudC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZW91dCkge1xuICAgICAgICBib2R5LnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0cmVhbSkge1xuICAgICAgICBib2R5LnN0cmVhbSA9IG9wdGlvbnMuc3RyZWFtO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3JnSWQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdvcmdJZCcsIG9yZ0lkKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgIGNvbnN0IHVybCA9IGAvc2FuZGJveC8ke0FQSV9WRVJTSU9OfS8ke3NhbmRib3hJZH0vZXhlY3V0ZSR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5wb3N0KHVybCwgYm9keSwgRXhlY3V0ZVJlc3BvbnNlU2NoZW1hLCBFeGVjdXRlUmVxdWVzdFNjaGVtYSwgc2lnbmFsID8/IG9wdGlvbnMuc2lnbmFsKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGVjdXRpb25JZDogcmVzcC5kYXRhLmV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwLmRhdGEuc3RhdHVzLFxuICAgICAgICAgICAgZXhpdENvZGU6IHJlc3AuZGF0YS5leGl0Q29kZSxcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IHJlc3AuZGF0YS5kdXJhdGlvbk1zLFxuICAgICAgICAgICAgc3Rkb3V0U3RyZWFtVXJsOiByZXNwLmRhdGEuc3Rkb3V0U3RyZWFtVXJsLFxuICAgICAgICAgICAgc3RkZXJyU3RyZWFtVXJsOiByZXNwLmRhdGEuc3RkZXJyU3RyZWFtVXJsLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UsIHNhbmRib3hJZCB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4ZWN1dGUuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFNhbmRib3hSZXNwb25zZUVycm9yLCBBUElfVkVSU0lPTiB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBTYW5kYm94UmVzb3VyY2VzU2NoZW1hID0gelxuICAgIC5vYmplY3Qoe1xuICAgIG1lbW9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdNZW1vcnkgbGltaXQgKGUuZy4sIFwiNTEyTWlcIiwgXCIxR2lcIiknKSxcbiAgICBjcHU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnQ1BVIGxpbWl0IGluIG1pbGxpY29yZXMgKGUuZy4sIFwiNTAwbVwiLCBcIjEwMDBtXCIpJyksXG4gICAgZGlzazogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdEaXNrIGxpbWl0IChlLmcuLCBcIjFHaVwiLCBcIjEwR2lcIiknKSxcbn0pXG4gICAgLmRlc2NyaWJlKCdSZXNvdXJjZSBsaW1pdHMgZm9yIHRoZSBzYW5kYm94Jyk7XG5jb25zdCBTYW5kYm94SW5mb0RhdGFTY2hlbWEgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgc2FuZGJveElkOiB6LnN0cmluZygpLmRlc2NyaWJlKCdVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNhbmRib3gnKSxcbiAgICBzdGF0dXM6IHpcbiAgICAgICAgLmVudW0oWydjcmVhdGluZycsICdpZGxlJywgJ3J1bm5pbmcnLCAndGVybWluYXRlZCcsICdmYWlsZWQnXSlcbiAgICAgICAgLmRlc2NyaWJlKCdDdXJyZW50IHN0YXR1cyBvZiB0aGUgc2FuZGJveCcpLFxuICAgIGNyZWF0ZWRBdDogei5zdHJpbmcoKS5kZXNjcmliZSgnSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSBzYW5kYm94IHdhcyBjcmVhdGVkJyksXG4gICAgcmVnaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1JlZ2lvbiB3aGVyZSB0aGUgc2FuZGJveCBpcyBydW5uaW5nJyksXG4gICAgc25hcHNob3RJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdTbmFwc2hvdCBJRCB0aGlzIHNhbmRib3ggd2FzIGNyZWF0ZWQgZnJvbScpLFxuICAgIHNuYXBzaG90VGFnOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1NuYXBzaG90IHRhZyB0aGlzIHNhbmRib3ggd2FzIGNyZWF0ZWQgZnJvbScpLFxuICAgIGV4ZWN1dGlvbnM6IHoubnVtYmVyKCkuZGVzY3JpYmUoJ1RvdGFsIG51bWJlciBvZiBleGVjdXRpb25zIGluIHRoaXMgc2FuZGJveCcpLFxuICAgIHN0ZG91dFN0cmVhbVVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdVUkwgZm9yIHN0cmVhbWluZyBzdGRvdXQgb3V0cHV0JyksXG4gICAgc3RkZXJyU3RyZWFtVXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1VSTCBmb3Igc3RyZWFtaW5nIHN0ZGVyciBvdXRwdXQnKSxcbiAgICBkZXBlbmRlbmNpZXM6IHpcbiAgICAgICAgLmFycmF5KHouc3RyaW5nKCkpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgnQXB0IHBhY2thZ2VzIGluc3RhbGxlZCBpbiB0aGUgc2FuZGJveCcpLFxuICAgIG1ldGFkYXRhOiB6XG4gICAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZSgnVXNlci1kZWZpbmVkIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FuZGJveCcpLFxuICAgIHJlc291cmNlczogU2FuZGJveFJlc291cmNlc1NjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKCdSZXNvdXJjZSBsaW1pdHMgZm9yIHRoaXMgc2FuZGJveCcpLFxufSlcbiAgICAuZGVzY3JpYmUoJ0RldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgc2FuZGJveCcpO1xuY29uc3QgU2FuZGJveEdldFJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoU2FuZGJveEluZm9EYXRhU2NoZW1hKTtcbi8qKlxuICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgc2FuZGJveC5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gVGhlIEFQSSBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHRoZSBzYW5kYm94IElEXG4gKiBAcmV0dXJucyBTYW5kYm94IGluZm9ybWF0aW9uIGluY2x1ZGluZyBzdGF0dXMsIGNyZWF0aW9uIHRpbWUsIGFuZCBleGVjdXRpb24gY291bnRcbiAqIEB0aHJvd3Mge1NhbmRib3hSZXNwb25zZUVycm9yfSBJZiB0aGUgc2FuZGJveCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveEdldChjbGllbnQsIHBhcmFtcykge1xuICAgIGNvbnN0IHsgc2FuZGJveElkLCBvcmdJZCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29yZ0lkJywgb3JnSWQpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdXJsID0gYC9zYW5kYm94LyR7QVBJX1ZFUlNJT059LyR7c2FuZGJveElkfSR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWA7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5nZXQodXJsLCBTYW5kYm94R2V0UmVzcG9uc2VTY2hlbWEpO1xuICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNhbmRib3hJZDogcmVzcC5kYXRhLnNhbmRib3hJZCxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcC5kYXRhLnN0YXR1cyxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogcmVzcC5kYXRhLmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIHJlZ2lvbjogcmVzcC5kYXRhLnJlZ2lvbixcbiAgICAgICAgICAgIHNuYXBzaG90SWQ6IHJlc3AuZGF0YS5zbmFwc2hvdElkLFxuICAgICAgICAgICAgc25hcHNob3RUYWc6IHJlc3AuZGF0YS5zbmFwc2hvdFRhZyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbnM6IHJlc3AuZGF0YS5leGVjdXRpb25zLFxuICAgICAgICAgICAgc3Rkb3V0U3RyZWFtVXJsOiByZXNwLmRhdGEuc3Rkb3V0U3RyZWFtVXJsLFxuICAgICAgICAgICAgc3RkZXJyU3RyZWFtVXJsOiByZXNwLmRhdGEuc3RkZXJyU3RyZWFtVXJsLFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiByZXNwLmRhdGEuZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3AuZGF0YS5tZXRhZGF0YSxcbiAgICAgICAgICAgIHJlc291cmNlczogcmVzcC5kYXRhLnJlc291cmNlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlLCBzYW5kYm94SWQgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQuanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IFNhbmRib3hSZXNwb25zZUVycm9yLCBBUElfVkVSU0lPTiB9IGZyb20gJy4vdXRpbCc7XG5jb25zdCBTYW5kYm94SW5mb1NjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBzYW5kYm94SWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1VuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2FuZGJveCcpLFxuICAgIHN0YXR1czogelxuICAgICAgICAuZW51bShbJ2NyZWF0aW5nJywgJ2lkbGUnLCAncnVubmluZycsICd0ZXJtaW5hdGVkJywgJ2ZhaWxlZCddKVxuICAgICAgICAuZGVzY3JpYmUoJ0N1cnJlbnQgc3RhdHVzIG9mIHRoZSBzYW5kYm94JyksXG4gICAgY3JlYXRlZEF0OiB6LnN0cmluZygpLmRlc2NyaWJlKCdJU08gdGltZXN0YW1wIHdoZW4gdGhlIHNhbmRib3ggd2FzIGNyZWF0ZWQnKSxcbiAgICByZWdpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnUmVnaW9uIHdoZXJlIHRoZSBzYW5kYm94IGlzIHJ1bm5pbmcnKSxcbiAgICBzbmFwc2hvdElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1NuYXBzaG90IElEIHRoaXMgc2FuZGJveCB3YXMgY3JlYXRlZCBmcm9tJyksXG4gICAgc25hcHNob3RUYWc6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnU25hcHNob3QgdGFnIHRoaXMgc2FuZGJveCB3YXMgY3JlYXRlZCBmcm9tJyksXG4gICAgZXhlY3V0aW9uczogei5udW1iZXIoKS5kZXNjcmliZSgnVG90YWwgbnVtYmVyIG9mIGV4ZWN1dGlvbnMgaW4gdGhpcyBzYW5kYm94JyksXG4gICAgc3Rkb3V0U3RyZWFtVXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ1VSTCBmb3Igc3RyZWFtaW5nIHN0ZG91dCBvdXRwdXQnKSxcbiAgICBzdGRlcnJTdHJlYW1Vcmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnVVJMIGZvciBzdHJlYW1pbmcgc3RkZXJyIG91dHB1dCcpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1N1bW1hcnkgaW5mb3JtYXRpb24gYWJvdXQgYSBzYW5kYm94Jyk7XG5jb25zdCBMaXN0U2FuZGJveGVzRGF0YVNjaGVtYSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICBzYW5kYm94ZXM6IHouYXJyYXkoU2FuZGJveEluZm9TY2hlbWEpLmRlc2NyaWJlKCdMaXN0IG9mIHNhbmRib3ggZW50cmllcycpLFxuICAgIHRvdGFsOiB6Lm51bWJlcigpLmRlc2NyaWJlKCdUb3RhbCBudW1iZXIgb2Ygc2FuZGJveGVzIG1hdGNoaW5nIHRoZSBxdWVyeScpLFxufSlcbiAgICAuZGVzY3JpYmUoJ1BhZ2luYXRlZCBsaXN0IG9mIHNhbmRib3hlcycpO1xuY29uc3QgTGlzdFNhbmRib3hlc1Jlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoTGlzdFNhbmRib3hlc0RhdGFTY2hlbWEpO1xuLyoqXG4gKiBMaXN0cyBzYW5kYm94ZXMgd2l0aCBvcHRpb25hbCBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24uXG4gKlxuICogQHBhcmFtIGNsaWVudCAtIFRoZSBBUEkgY2xpZW50IHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgYnkgcHJvamVjdCwgc3RhdHVzLCBhbmQgcGFnaW5hdGlvblxuICogQHJldHVybnMgUGFnaW5hdGVkIGxpc3Qgb2Ygc2FuZGJveGVzIHdpdGggdG90YWwgY291bnRcbiAqIEB0aHJvd3Mge1NhbmRib3hSZXNwb25zZUVycm9yfSBJZiB0aGUgcmVxdWVzdCBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveExpc3QoY2xpZW50LCBwYXJhbXMpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAocGFyYW1zPy5vcmdJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29yZ0lkJywgcGFyYW1zLm9yZ0lkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcz8ucHJvamVjdElkKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldCgncHJvamVjdElkJywgcGFyYW1zLnByb2plY3RJZCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXM/LnNuYXBzaG90SWQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdzbmFwc2hvdElkJywgcGFyYW1zLnNuYXBzaG90SWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zPy5zdGF0dXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdzdGF0dXMnLCBwYXJhbXMuc3RhdHVzKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcz8ubGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgcGFyYW1zLmxpbWl0LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zPy5vZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29mZnNldCcsIHBhcmFtcy5vZmZzZXQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCB1cmwgPSBgL3NhbmRib3gvJHtBUElfVkVSU0lPTn0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuZ2V0KHVybCwgTGlzdFNhbmRib3hlc1Jlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzYW5kYm94ZXM6IHJlc3AuZGF0YS5zYW5kYm94ZXMubWFwKChzKSA9PiAoe1xuICAgICAgICAgICAgICAgIHNhbmRib3hJZDogcy5zYW5kYm94SWQsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzLnN0YXR1cyxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IHMuY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIHJlZ2lvbjogcy5yZWdpb24sXG4gICAgICAgICAgICAgICAgc25hcHNob3RJZDogcy5zbmFwc2hvdElkLFxuICAgICAgICAgICAgICAgIHNuYXBzaG90VGFnOiBzLnNuYXBzaG90VGFnLFxuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbnM6IHMuZXhlY3V0aW9ucyxcbiAgICAgICAgICAgICAgICBzdGRvdXRTdHJlYW1Vcmw6IHMuc3Rkb3V0U3RyZWFtVXJsLFxuICAgICAgICAgICAgICAgIHN0ZGVyclN0cmVhbVVybDogcy5zdGRlcnJTdHJlYW1VcmwsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB0b3RhbDogcmVzcC5kYXRhLnRvdGFsLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saXN0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWFOb0RhdGEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgU2FuZGJveFJlc3BvbnNlRXJyb3IsIEFQSV9WRVJTSU9OIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IERlc3Ryb3lSZXNwb25zZVNjaGVtYSA9IEFQSVJlc3BvbnNlU2NoZW1hTm9EYXRhKCk7XG4vKipcbiAqIERlc3Ryb3lzIGEgc2FuZGJveCBhbmQgcmVsZWFzZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBjbGllbnQgLSBUaGUgQVBJIGNsaWVudCB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBpbmNsdWRpbmcgdGhlIHNhbmRib3ggSUQgdG8gZGVzdHJveVxuICogQHRocm93cyB7U2FuZGJveFJlc3BvbnNlRXJyb3J9IElmIHRoZSBzYW5kYm94IGlzIG5vdCBmb3VuZCBvciBkZXN0cnVjdGlvbiBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveERlc3Ryb3koY2xpZW50LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IHNhbmRib3hJZCwgb3JnSWQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3JnSWQpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdvcmdJZCcsIG9yZ0lkKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVBhcmFtcy50b1N0cmluZygpO1xuICAgIGNvbnN0IHVybCA9IGAvc2FuZGJveC8ke0FQSV9WRVJTSU9OfS8ke3NhbmRib3hJZH0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuZGVsZXRlKHVybCwgRGVzdHJveVJlc3BvbnNlU2NoZW1hKTtcbiAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFNhbmRib3hSZXNwb25zZUVycm9yKHsgbWVzc2FnZTogcmVzcC5tZXNzYWdlLCBzYW5kYm94SWQgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXN0cm95LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBSZXNvbHZlIHRoZSByZWdpb24gZnJvbSB0aGUgcHJvdmlkZWQgdmFsdWUgb3IgQUdFTlRVSVRZX1JFR0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIFRocm93cyBhbiBlcnJvciBpZiBubyByZWdpb24gY2FuIGJlIHJlc29sdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlZ2lvbihyZWdpb24pIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlZ2lvbiA/PyBwcm9jZXNzLmVudi5BR0VOVFVJVFlfUkVHSU9OO1xuICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWdpb24gaXMgcmVxdWlyZWQgYnV0IG5vdCBwcm92aWRlZC4gU2V0IHRoZSBBR0VOVFVJVFlfUkVHSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHBhc3MgcmVnaW9uIGFzIGEgcGFyYW1ldGVyLicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG59XG4vKipcbiAqIEdldCBzZXJ2aWNlIFVSTHMgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBmYWxsYmFjayBkZWZhdWx0cy5cbiAqIFRocm93cyBhbiBlcnJvciBpZiByZWdpb24gY2Fubm90IGJlIHJlc29sdmVkIChuZWl0aGVyIHBhc3NlZCBhcyBwYXJhbWV0ZXIgbm9yIHNldCB2aWEgQUdFTlRVSVRZX1JFR0lPTikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlVXJscyhyZWdpb24pIHtcbiAgICBjb25zdCByZXNvbHZlZFJlZ2lvbiA9IHJlc29sdmVSZWdpb24ocmVnaW9uKTtcbiAgICBjb25zdCB0cmFuc3BvcnRVcmwgPSBwcm9jZXNzLmVudi5BR0VOVFVJVFlfVFJBTlNQT1JUX1VSTCB8fCBidWlsZFJlZ2lvbmFsVVJMKHJlc29sdmVkUmVnaW9uLCAnY2F0YWx5c3QnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXl2YWx1ZTogcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX0tFWVZBTFVFX1VSTCB8fCB0cmFuc3BvcnRVcmwsXG4gICAgICAgIHN0cmVhbTogcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NUUkVBTV9VUkwgfHwgYnVpbGRSZWdpb25hbFVSTChyZXNvbHZlZFJlZ2lvbiwgJ3N0cmVhbXMnKSxcbiAgICAgICAgdmVjdG9yOiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfVkVDVE9SX1VSTCB8fCB0cmFuc3BvcnRVcmwsXG4gICAgICAgIGNhdGFseXN0OiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0FUQUxZU1RfVVJMIHx8IHRyYW5zcG9ydFVybCxcbiAgICAgICAgb3RlbDogcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX09UTFBfVVJMIHx8IGJ1aWxkUmVnaW9uYWxVUkwocmVzb2x2ZWRSZWdpb24sICdvdGVsJyksXG4gICAgICAgIHNhbmRib3g6IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9TQU5EQk9YX1VSTCB8fCB0cmFuc3BvcnRVcmwsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldERvbWFpblN1ZmZpeChyZWdpb24pIHtcbiAgICBpZiAocmVnaW9uID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHJldHVybiAnYWdlbnR1aXR5LmlvJztcbiAgICB9XG4gICAgcmV0dXJuICdhZ2VudHVpdHkuY2xvdWQnO1xufVxuZnVuY3Rpb24gYnVpbGRSZWdpb25hbFVSTChyZWdpb24sIGhvc3RuYW1lKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gZ2V0RG9tYWluU3VmZml4KHJlZ2lvbik7XG4gICAgaWYgKHN1ZmZpeCA9PT0gJ2FnZW50dWl0eS5pbycpIHtcbiAgICAgICAgcmV0dXJuIGBodHRwczovLyR7aG9zdG5hbWV9LiR7c3VmZml4fWA7XG4gICAgfVxuICAgIHJldHVybiBgaHR0cHM6Ly8ke2hvc3RuYW1lfS0ke3JlZ2lvbn0uJHtzdWZmaXh9YDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLAogICAgImltcG9ydCB7IHNhbmRib3hDcmVhdGUgfSBmcm9tICcuL2NyZWF0ZSc7XG5pbXBvcnQgeyBzYW5kYm94RGVzdHJveSB9IGZyb20gJy4vZGVzdHJveSc7XG5pbXBvcnQgeyBzYW5kYm94R2V0IH0gZnJvbSAnLi9nZXQnO1xuaW1wb3J0IHsgU2FuZGJveFJlc3BvbnNlRXJyb3IsIHdyaXRlQW5kRHJhaW4gfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgZ2V0U2VydmljZVVybHMgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuY29uc3QgUE9MTF9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IE1BWF9QT0xMX0FUVEVNUFRTID0gNzIwMDtcbi8qKlxuICogQ3JlYXRlcyBhIHNhbmRib3gsIGV4ZWN1dGVzIGEgY29tbWFuZCwgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uLlxuICpcbiAqIFRoaXMgaXMgYSBoaWdoLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgZnVsbCBsaWZlY3ljbGU6XG4gKiBjcmVhdGluZyBhIHNhbmRib3gsIHN0cmVhbWluZyBJL08sIHBvbGxpbmcgZm9yIGNvbXBsZXRpb24sIGFuZCBjbGVhbnVwLlxuICpcbiAqIEBwYXJhbSBjbGllbnQgLSBUaGUgQVBJIGNsaWVudCB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBpbmNsdWRpbmcgY29tbWFuZCBvcHRpb25zLCBJL08gc3RyZWFtcywgYW5kIHRpbWVvdXQgc2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBydW4gcmVzdWx0IGluY2x1ZGluZyBleGl0IGNvZGUgYW5kIGR1cmF0aW9uXG4gKiBAdGhyb3dzIHtTYW5kYm94UmVzcG9uc2VFcnJvcn0gSWYgc2FuZGJveCBjcmVhdGlvbiBmYWlscywgZXhlY3V0aW9uIHRpbWVzIG91dCwgb3IgaXMgY2FuY2VsbGVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYW5kYm94UnVuKGNsaWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBvcHRpb25zLCBvcmdJZCwgcmVnaW9uLCBhcGlLZXksIHNpZ25hbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBsb2dnZXIgfSA9IHBhcmFtcztcbiAgICBjb25zdCBzdGFydGVkID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgc3RkaW5TdHJlYW1JZDtcbiAgICBsZXQgc3RkaW5TdHJlYW1Vcmw7XG4gICAgLy8gSWYgc3RkaW4gaXMgcHJvdmlkZWQgYW5kIGhhcyBkYXRhLCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0XG4gICAgaWYgKHN0ZGluICYmIHJlZ2lvbiAmJiBhcGlLZXkpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtUmVzdWx0ID0gYXdhaXQgY3JlYXRlU3RkaW5TdHJlYW0ocmVnaW9uLCBhcGlLZXksIG9yZ0lkLCBsb2dnZXIpO1xuICAgICAgICBzdGRpblN0cmVhbUlkID0gc3RyZWFtUmVzdWx0LmlkO1xuICAgICAgICBzdGRpblN0cmVhbVVybCA9IHN0cmVhbVJlc3VsdC51cmw7XG4gICAgICAgIGxvZ2dlcj8uZGVidWcoJ2NyZWF0ZWQgc3RkaW4gc3RyZWFtOiAlcycsIHN0ZGluU3RyZWFtSWQpO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVSZXNwb25zZSA9IGF3YWl0IHNhbmRib3hDcmVhdGUoY2xpZW50LCB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICAgICAgZXhlYzogb3B0aW9ucy5jb21tYW5kLmV4ZWMsXG4gICAgICAgICAgICAgICAgZmlsZXM6IG9wdGlvbnMuY29tbWFuZC5maWxlcyxcbiAgICAgICAgICAgICAgICBtb2RlOiAnb25lc2hvdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyZWFtOiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5zdHJlYW0sXG4gICAgICAgICAgICAgICAgc3RkaW46IHN0ZGluU3RyZWFtSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBvcmdJZCxcbiAgICB9KTtcbiAgICBjb25zdCBzYW5kYm94SWQgPSBjcmVhdGVSZXNwb25zZS5zYW5kYm94SWQ7XG4gICAgY29uc3Qgc3Rkb3V0U3RyZWFtVXJsID0gY3JlYXRlUmVzcG9uc2Uuc3Rkb3V0U3RyZWFtVXJsO1xuICAgIGNvbnN0IHN0ZGVyclN0cmVhbVVybCA9IGNyZWF0ZVJlc3BvbnNlLnN0ZGVyclN0cmVhbVVybDtcbiAgICBsb2dnZXI/LmRlYnVnKCdzYW5kYm94IGNyZWF0ZWQ6ICVzLCBzdGRvdXRVcmw6ICVzLCBzdGRlcnJVcmw6ICVzJywgc2FuZGJveElkLCBzdGRvdXRTdHJlYW1VcmwgPz8gJ25vbmUnLCBzdGRlcnJTdHJlYW1VcmwgPz8gJ25vbmUnKTtcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3Qgc3RyZWFtUHJvbWlzZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgICAvLyBTdGFydCBzdGRpbiBzdHJlYW1pbmcgaWYgd2UgaGF2ZSBzdGRpbiBhbmQgYSBzdHJlYW0gVVJMXG4gICAgICAgIGlmIChzdGRpbiAmJiBzdGRpblN0cmVhbVVybCAmJiBhcGlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZGluUHJvbWlzZSA9IHN0cmVhbVN0ZGluVG9Vcmwoc3RkaW4sIHN0ZGluU3RyZWFtVXJsLCBhcGlLZXksIGFib3J0Q29udHJvbGxlci5zaWduYWwsIGxvZ2dlcik7XG4gICAgICAgICAgICBzdHJlYW1Qcm9taXNlcy5wdXNoKHN0ZGluUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIHRoZSBzYW1lIHN0cmVhbSAoY29tYmluZWQgb3V0cHV0KVxuICAgICAgICBjb25zdCBpc0NvbWJpbmVkT3V0cHV0ID0gc3Rkb3V0U3RyZWFtVXJsICYmIHN0ZGVyclN0cmVhbVVybCAmJiBzdGRvdXRTdHJlYW1VcmwgPT09IHN0ZGVyclN0cmVhbVVybDtcbiAgICAgICAgaWYgKGlzQ29tYmluZWRPdXRwdXQpIHtcbiAgICAgICAgICAgIC8vIFN0cmVhbSBjb21iaW5lZCBvdXRwdXQgdG8gc3Rkb3V0IG9ubHkgdG8gYXZvaWQgZHVwbGljYXRlc1xuICAgICAgICAgICAgaWYgKHN0ZG91dCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlcj8uZGVidWcoJ3VzaW5nIGNvbWJpbmVkIG91dHB1dCBzdHJlYW0gKHN0ZG91dCA9PT0gc3RkZXJyKScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkUHJvbWlzZSA9IHN0cmVhbVVybFRvV3JpdGFibGUoc3Rkb3V0U3RyZWFtVXJsLCBzdGRvdXQsIGFib3J0Q29udHJvbGxlci5zaWduYWwsIGxvZ2dlcik7XG4gICAgICAgICAgICAgICAgc3RyZWFtUHJvbWlzZXMucHVzaChjb21iaW5lZFByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU3RhcnQgc3Rkb3V0IHN0cmVhbWluZ1xuICAgICAgICAgICAgaWYgKHN0ZG91dFN0cmVhbVVybCAmJiBzdGRvdXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGRvdXRQcm9taXNlID0gc3RyZWFtVXJsVG9Xcml0YWJsZShzdGRvdXRTdHJlYW1VcmwsIHN0ZG91dCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCwgbG9nZ2VyKTtcbiAgICAgICAgICAgICAgICBzdHJlYW1Qcm9taXNlcy5wdXNoKHN0ZG91dFByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RhcnQgc3RkZXJyIHN0cmVhbWluZ1xuICAgICAgICAgICAgaWYgKHN0ZGVyclN0cmVhbVVybCAmJiBzdGRlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGRlcnJQcm9taXNlID0gc3RyZWFtVXJsVG9Xcml0YWJsZShzdGRlcnJTdHJlYW1VcmwsIHN0ZGVyciwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCwgbG9nZ2VyKTtcbiAgICAgICAgICAgICAgICBzdHJlYW1Qcm9taXNlcy5wdXNoKHN0ZGVyclByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFBvbGwgZm9yIHNhbmRib3ggY29tcGxldGlvbiBpbiBwYXJhbGxlbCB3aXRoIHN0cmVhbWluZ1xuICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgICBsZXQgZmluYWxTdGF0dXMgPSBudWxsO1xuICAgICAgICB3aGlsZSAoYXR0ZW1wdHMgPCBNQVhfUE9MTF9BVFRFTVBUUykge1xuICAgICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTYW5kYm94UmVzcG9uc2VFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdTYW5kYm94IGV4ZWN1dGlvbiBjYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICAgICBzYW5kYm94SWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBzbGVlcChQT0xMX0lOVEVSVkFMX01TKTtcbiAgICAgICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNhbmRib3hJbmZvID0gYXdhaXQgc2FuZGJveEdldChjbGllbnQsIHsgc2FuZGJveElkLCBvcmdJZCB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEluZm8uc3RhdHVzID09PSAndGVybWluYXRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxTdGF0dXMgPSAndGVybWluYXRlZCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEluZm8uc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgICAgICAgICAgICAgICBmaW5hbFN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHBvbGxpbmcgZXJyb3JzLCBjb250aW51ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNhbmRib3ggY29tcGxldGVkIC0gd2FpdCBmb3Igc3RyZWFtcyB0byBjb21wbGV0ZSBuYXR1cmFsbHkgKEVPRilcbiAgICAgICAgLy8gUHVsc2UgY2xvc2VzIHN0cmVhbXMgd2hlbiB0aGUgc2FuZGJveCB0ZXJtaW5hdGVzLCBzbyBzdHJlYW1zIHNob3VsZCBFT0ZcbiAgICAgICAgLy8gV2UgbXVzdCB3YWl0IGZvciBzdHJlYW1zIHRvIGZ1bGx5IGRyYWluIGJlZm9yZSByZXR1cm5pbmdcbiAgICAgICAgbG9nZ2VyPy5kZWJ1Zygnd2FpdGluZyBmb3Igc3RyZWFtcyB0byBjb21wbGV0ZS4uLicpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoc3RyZWFtUHJvbWlzZXMpO1xuICAgICAgICBsb2dnZXI/LmRlYnVnKCdzdHJlYW1zIGNvbXBsZXRlZCcpO1xuICAgICAgICBpZiAoZmluYWxTdGF0dXMgPT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzYW5kYm94SWQsXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IDAsXG4gICAgICAgICAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2FuZGJveElkLFxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiAxLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSBzdGFydGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgU2FuZGJveFJlc3BvbnNlRXJyb3Ioe1xuICAgICAgICAgICAgbWVzc2FnZTogJ1NhbmRib3ggZXhlY3V0aW9uIHBvbGxpbmcgdGltZWQgb3V0JyxcbiAgICAgICAgICAgIHNhbmRib3hJZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHNhbmRib3hEZXN0cm95KGNsaWVudCwgeyBzYW5kYm94SWQsIG9yZ0lkIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVN0ZGluU3RyZWFtKHJlZ2lvbiwgYXBpS2V5LCBvcmdJZCwgbG9nZ2VyKSB7XG4gICAgY29uc3QgdXJscyA9IGdldFNlcnZpY2VVcmxzKHJlZ2lvbik7XG4gICAgY29uc3Qgc3RyZWFtQmFzZVVybCA9IHVybHMuc3RyZWFtO1xuICAgIC8vIEJ1aWxkIFVSTCB3aXRoIG9yZ0lkIHF1ZXJ5IHBhcmFtIGZvciBDTEkgdG9rZW4gdmFsaWRhdGlvblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcmdJZCkge1xuICAgICAgICBxdWVyeVBhcmFtcy5zZXQoJ29yZ0lkJywgb3JnSWQpO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgdXJsID0gYCR7c3RyZWFtQmFzZVVybH0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gO1xuICAgIGxvZ2dlcj8udHJhY2UoJ2NyZWF0aW5nIHN0ZGluIHN0cmVhbTogJXMnLCB1cmwpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBuYW1lOiBgc2FuZGJveC1zdGRpbi0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgc3RkaW4gc3RyZWFtOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSk7XG4gICAgbG9nZ2VyPy5kZWJ1ZygnY3JlYXRlZCBzdGRpbiBzdHJlYW06ICVzJywgZGF0YS5pZCk7XG4gICAgLy8gSW5jbHVkZSBvcmdJZCBpbiB0aGUgVVJMIGZvciBzdWJzZXF1ZW50IFBVVCByZXF1ZXN0cyAobmVlZGVkIGZvciBDTEkgdG9rZW4gYXV0aClcbiAgICBjb25zdCBwdXRRdWVyeVN0cmluZyA9IG9yZ0lkID8gYD9vcmdJZD0ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9YCA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICB1cmw6IGAke3N0cmVhbUJhc2VVcmx9LyR7ZGF0YS5pZH0ke3B1dFF1ZXJ5U3RyaW5nfWAsXG4gICAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVN0ZGluVG9Vcmwoc3RkaW4sIHVybCwgYXBpS2V5LCBzaWduYWwsIGxvZ2dlcikge1xuICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlcj8uZGVidWcoJ3N0cmVhbWluZyBzdGRpbiB0bzogJXMnLCB1cmwpO1xuICAgICAgICAvLyBDb252ZXJ0IE5vZGUuanMgUmVhZGFibGUgdG8gYSB3ZWIgUmVhZGFibGVTdHJlYW0gZm9yIGZldGNoIGJvZHlcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2ViU3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBzdGRpbi5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNpZ25hbC5hYm9ydGVkICYmICFjb250cm9sbGVyQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RkaW4ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0ZGluLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthcGlLZXl9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiB3ZWJTdHJlYW0sXG4gICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICBkdXBsZXg6ICdoYWxmJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uZGVidWcoJ3N0ZGluIHN0cmVhbSBQVVQgZmFpbGVkOiAlZCcsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXI/LmRlYnVnKCdzdGRpbiBzdHJlYW0gY29tcGxldGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgICAgbG9nZ2VyPy5kZWJ1Zygnc3RkaW4gc3RyZWFtIGFib3J0ZWQgKGV4cGVjdGVkIG9uIGNvbXBsZXRpb24pJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXI/LmRlYnVnKCdzdGRpbiBzdHJlYW0gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVVybFRvV3JpdGFibGUodXJsLCB3cml0YWJsZSwgc2lnbmFsLCBsb2dnZXIpIHtcbiAgICB0cnkge1xuICAgICAgICBsb2dnZXI/LmRlYnVnKCdmZXRjaGluZyBzdHJlYW06ICVzJywgdXJsKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsIH0pO1xuICAgICAgICBsb2dnZXI/LmRlYnVnKCdzdHJlYW0gcmVzcG9uc2Ugc3RhdHVzOiAlZCcsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2sgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uZGVidWcoJ3N0cmVhbSByZXNwb25zZSBub3Qgb2sgb3Igbm8gYm9keScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgIC8vIFJlYWQgdW50aWwgRU9GIC0gUHVsc2Ugd2lsbCBibG9jayB1bnRpbCBkYXRhIGlzIGF2YWlsYWJsZVxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyPy5kZWJ1Zygnc3RyZWFtIEVPRicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyPy5kZWJ1Zygnc3RyZWFtIGNodW5rOiAlZCBieXRlcycsIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVBbmREcmFpbih3cml0YWJsZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uZGVidWcoJ3N0cmVhbSBhYm9ydGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyPy5kZWJ1Zygnc3RyZWFtIGVycm9yOiAlcycsIGVycik7XG4gICAgfVxufVxuZnVuY3Rpb24gc2xlZXAobXMpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJ1bi5qcy5tYXAiLAogICAgImV4cG9ydCB7IHNhbmRib3hDcmVhdGUgfSBmcm9tICcuL2NyZWF0ZSc7XG5leHBvcnQgeyBzYW5kYm94RXhlY3V0ZSB9IGZyb20gJy4vZXhlY3V0ZSc7XG5leHBvcnQgeyBzYW5kYm94R2V0IH0gZnJvbSAnLi9nZXQnO1xuZXhwb3J0IHsgc2FuZGJveExpc3QgfSBmcm9tICcuL2xpc3QnO1xuZXhwb3J0IHsgc2FuZGJveERlc3Ryb3kgfSBmcm9tICcuL2Rlc3Ryb3knO1xuZXhwb3J0IHsgc2FuZGJveFJ1biB9IGZyb20gJy4vcnVuJztcbmV4cG9ydCB7IGV4ZWN1dGlvbkdldCwgZXhlY3V0aW9uTGlzdCB9IGZyb20gJy4vZXhlY3V0aW9uJztcbmV4cG9ydCB7IFNhbmRib3hSZXNwb25zZUVycm9yLCB3cml0ZUFuZERyYWluIH0gZnJvbSAnLi91dGlsJztcbmV4cG9ydCB7IFNhbmRib3hDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgeyBzYW5kYm94V3JpdGVGaWxlcywgc2FuZGJveFJlYWRGaWxlLCBzYW5kYm94TWtEaXIsIHNhbmRib3hSbURpciwgc2FuZGJveFJtRmlsZSwgc2FuZGJveExpc3RGaWxlcywgc2FuZGJveERvd25sb2FkQXJjaGl2ZSwgc2FuZGJveFVwbG9hZEFyY2hpdmUsIHNhbmRib3hTZXRFbnYsIH0gZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgeyBzbmFwc2hvdENyZWF0ZSwgc25hcHNob3RHZXQsIHNuYXBzaG90TGlzdCwgc25hcHNob3REZWxldGUsIHNuYXBzaG90VGFnIH0gZnJvbSAnLi9zbmFwc2hvdCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgVXNlclJlc3BvbnNlRXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgT3JnYW5pemF0aW9uU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKCd0aGUgdW5pcXVlIGlkIGZvciB0aGUgb3JnYW5pemF0aW9uJyksXG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZSgndGhlIG5hbWUgb2YgdGhlIG9yZ2FuaXphdGlvbicpLFxufSk7XG5jb25zdCBXaG9hbWlSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgICBmaXJzdE5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBmaXJzdCBuYW1lIG9mIHRoZSB1c2VyJyksXG4gICAgbGFzdE5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ3RoZSBsYXN0IG5hbWUgb2YgdGhlIHVzZXInKSxcbiAgICBvcmdhbml6YXRpb25zOiB6LmFycmF5KE9yZ2FuaXphdGlvblNjaGVtYSkuZGVzY3JpYmUoJ3RoZSBvcmdhbml6YXRpb25zIHRoZSB1c2VyIGlzIGEgbWVtYmVyIG9mJyksXG59KTtcbmNvbnN0IFdob2FtaVJlc3BvbnNlU2NoZW1hID0gQVBJUmVzcG9uc2VTY2hlbWEoV2hvYW1pUmVzcG9uc2UpO1xuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCB1c2VyIGluZm9ybWF0aW9uXG4gKlxuICogQHBhcmFtIGNsaWVudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdob2FtaShjbGllbnQpIHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LmdldCgnL2NsaS9hdXRoL3VzZXInLCBXaG9hbWlSZXNwb25zZVNjaGVtYSk7XG4gICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gcmVzcC5kYXRhO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVXNlclJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aG9hbWkuanMubWFwIiwKICAgICJleHBvcnQgKiBmcm9tICcuL3dob2FtaSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpa2V5JztcbmV4cG9ydCAqIGZyb20gJy4vZGInO1xuZXhwb3J0ICogZnJvbSAnLi9vcmcnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9qZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc2FuZGJveCc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24nO1xuZXhwb3J0ICogZnJvbSAnLi90aHJlYWQnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgU2VydmljZUV4Y2VwdGlvbiwgdG9TZXJ2aWNlRXhjZXB0aW9uLCBmcm9tUmVzcG9uc2UgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuY29uc3Qgc2Vuc2l0aXZlSGVhZGVycyA9IG5ldyBTZXQoWydhdXRob3JpemF0aW9uJywgJ3gtYXBpLWtleSddKTtcbi8qKlxuICogUmVkYWN0cyB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nIHdoaWxlIGtlZXBpbmcgYSBwcmVmaXggYW5kIHN1ZmZpeCB2aXNpYmxlLlxuICogRW5zdXJlcyB0aGF0IGlmIHRoZSBzdHJpbmcgaXMgdG9vIHNob3J0LCBldmVyeXRoaW5nIGlzIHJlZGFjdGVkLlxuICpcbiAqIEBwYXJhbSBpbnB1dCBUaGUgc3RyaW5nIHRvIHJlZGFjdFxuICogQHBhcmFtIHByZWZpeCBOdW1iZXIgb2YgY2hhcnMgdG8ga2VlcCBhdCB0aGUgc3RhcnRcbiAqIEBwYXJhbSBzdWZmaXggTnVtYmVyIG9mIGNoYXJzIHRvIGtlZXAgYXQgdGhlIGVuZFxuICogQHBhcmFtIG1hc2sgIENoYXJhY3RlciB1c2VkIGZvciByZWRhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdChpbnB1dCwgcHJlZml4ID0gNCwgc3VmZml4ID0gNCwgbWFzayA9ICcqJykge1xuICAgIGlmICghaW5wdXQpXG4gICAgICAgIHJldHVybiAnJztcbiAgICAvLyBJZiByZXZlYWxpbmcgcHJlZml4K3N1ZmZpeCB3b3VsZCBsZWFrIHRvbyBtdWNoLCBmdWxseSBtYXNrXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSBwcmVmaXggKyBzdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIG1hc2sucmVwZWF0KGlucHV0Lmxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gaW5wdXQuc2xpY2UoMCwgcHJlZml4KTtcbiAgICBjb25zdCBlbmQgPSBpbnB1dC5zbGljZSgtc3VmZml4KTtcbiAgICBjb25zdCBoaWRkZW5MZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwcmVmaXggLSBzdWZmaXg7XG4gICAgcmV0dXJuIHN0YXJ0ICsgbWFzay5yZXBlYXQoaGlkZGVuTGVuZ3RoKSArIGVuZDtcbn1cbmNvbnN0IHJlZGFjdEhlYWRlcnMgPSAoa3YpID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoa3YpKSB7XG4gICAgICAgIGNvbnN0IF9rID0gay50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB2ID0ga3Zba107XG4gICAgICAgIGlmIChzZW5zaXRpdmVIZWFkZXJzLmhhcyhfaykpIHtcbiAgICAgICAgICAgIGlmIChfayA9PT0gJ2F1dGhvcml6YXRpb24nICYmIHYuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goYCR7X2t9PUJlYXJlciAke3JlZGFjdCh2LnN1YnN0cmluZyg3KSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChgJHtfa309JHtyZWRhY3Qodil9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChgJHtfa309JHt2fWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnWycgKyB2YWx1ZXMuam9pbignLCcpICsgJ10nO1xufTtcbmNsYXNzIFNlcnZlckZldGNoQWRhcHRlciB7XG4gICAgI2NvbmZpZztcbiAgICAjbG9nZ2VyO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZywgbG9nZ2VyKSB7XG4gICAgICAgIHRoaXMuI2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy4jbG9nZ2VyID0gbG9nZ2VyO1xuICAgIH1cbiAgICBhc3luYyBfaW52b2tlKHVybCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgICAgLi4udGhpcy4jY29uZmlnLmhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuYm9keSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kID8/ICdQT1NUJztcbiAgICAgICAgdGhpcy4jbG9nZ2VyLnRyYWNlKCdzZW5kaW5nICVzIHRvICVzIHdpdGggaGVhZGVyczogJXMnLCBtZXRob2QsIHVybCwgcmVkYWN0SGVhZGVycyhoZWFkZXJzKSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5kdXBsZXggPyB7IGR1cGxleDogb3B0aW9ucy5kdXBsZXggfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICAgIHN3aXRjaCAocmVzLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgICAgIGNhc2UgMjA0OlxuICAgICAgICAgICAgICAgIGNhc2UgMzA0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogcmVzLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmJpbmFyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG9rOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiByZXMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcm9tUmVzcG9uc2UocmVzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogcmVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogcmVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnIgPSBhd2FpdCB0b1NlcnZpY2VFeGNlcHRpb24obWV0aG9kLCB1cmwsIHJlcyk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgYXN5bmMgaW52b2tlKHVybCwgb3B0aW9ucyA9IHsgbWV0aG9kOiAnUE9TVCcgfSkge1xuICAgICAgICBpZiAodGhpcy4jY29uZmlnLm9uQmVmb3JlKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGVyciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2NvbmZpZy5vbkJlZm9yZSh1cmwsIG9wdGlvbnMsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnZva2UodXJsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI2NvbmZpZy5vbkFmdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNjb25maWcub25BZnRlcih1cmwsIG9wdGlvbnMsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4jY29uZmlnLm9uQWZ0ZXIgJiYgZXJyIGluc3RhbmNlb2YgU2VydmljZUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jY29uZmlnLm9uQWZ0ZXIodXJsLCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBuZXcgUmVzcG9uc2UoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnIuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ludm9rZSh1cmwsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYSBTZXJ2ZXIgU2lkZSBGZXRjaCBBZGFwdGVyIHRvIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYWRkIGhlYWRlcnMgYW5kIHRyYWNrIG91dGdvaW5nIHJlcXVlc3RzXG4gKlxuICogQHBhcmFtIGNvbmZpZyB0aGUgc2VydmljZSBjb25maWdcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXJGZXRjaEFkYXB0ZXIoY29uZmlnLCBsb2dnZXIpIHtcbiAgICByZXR1cm4gbmV3IFNlcnZlckZldGNoQWRhcHRlcihjb25maWcsIGxvZ2dlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2ZXIuanMubWFwIiwKICAgICIvKipcbiAqIFN5bWJvbCB1c2VkIHRvIGlkZW50aWZ5IHNjaGVtYSB0eXBlcyBpbiBhIG1pbmlmaWNhdGlvbi1zYWZlIHdheS5cbiAqIFVzZXMgU3ltYm9sLmZvcigpIHRvIGVuc3VyZSB0aGUgc2FtZSBzeW1ib2wgaXMgdXNlZCBhY3Jvc3MgYnVuZGxlZCBtb2R1bGVzLlxuICovXG5leHBvcnQgY29uc3QgU0NIRU1BX0tJTkQgPSBTeW1ib2wuZm9yKCdAYWdlbnR1aXR5L3NjaGVtYS1raW5kJyk7XG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHNjaGVtYSB2YWxpZGF0aW9uIGZhaWxzLlxuICogQ29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHZhbGlkYXRpb24gaXNzdWVzIGluY2x1ZGluZyBmaWVsZCBwYXRocy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgc2NoZW1hLnBhcnNlKGRhdGEpO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSB7XG4gKiAgICAgY29uc29sZS5sb2coZXJyb3IubWVzc2FnZSk7ICAvLyBIdW1hbi1yZWFkYWJsZSBlcnJvclxuICogICAgIGNvbnNvbGUubG9nKGVycm9yLmlzc3Vlcyk7ICAgLy8gRGV0YWlsZWQgaXNzdWVzIGFycmF5XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIC8qKiBBcnJheSBvZiB2YWxpZGF0aW9uIGlzc3VlcyB3aXRoIHBhdGhzIGFuZCBtZXNzYWdlcyAqL1xuICAgIGlzc3VlcztcbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXMpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGlzc3Vlc1xuICAgICAgICAgICAgLm1hcCgoaXNzdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoXG4gICAgICAgICAgICAgICAgPyBgWyR7aXNzdWUucGF0aFxuICAgICAgICAgICAgICAgICAgICAubWFwKChwKSA9PiBcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHR5cGVvZiBwID09PSAnb2JqZWN0JyA/IHAua2V5IDogcClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJy4nKX1dYFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICByZXR1cm4gcGF0aCA/IGAke3BhdGh9OiAke2lzc3VlLm1lc3NhZ2V9YCA6IGlzc3VlLm1lc3NhZ2U7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gICAgICAgIC8vIE1haW50YWluIHByb3BlciBzdGFjayB0cmFjZSBmb3Igd2hlcmUgb3VyIGVycm9yIHdhcyB0aHJvd25cbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZSBhIHZhbGlkYXRpb24gaXNzdWUgd2l0aCBhbiBvcHRpb25hbCBmaWVsZCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSXNzdWUobWVzc2FnZSwgcGF0aCkge1xuICAgIHJldHVybiBwYXRoID8geyBtZXNzYWdlLCBwYXRoIH0gOiB7IG1lc3NhZ2UgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3VjY2Vzc2Z1bCB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3ModmFsdWUpIHtcbiAgICByZXR1cm4geyB2YWx1ZSB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsZWQgdmFsaWRhdGlvbiByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlKGlzc3Vlcykge1xuICAgIHJldHVybiB7IGlzc3VlcyB9O1xufVxuLyoqXG4gKiBDcmVhdGUgcGFyc2UgYW5kIHNhZmVQYXJzZSBtZXRob2RzIGZvciBhIHNjaGVtYS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2VNZXRob2RzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHBhcnNlKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzWyd+c3RhbmRhcmQnXS52YWxpZGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXN5bmMgdmFsaWRhdGlvbiBub3Qgc3VwcG9ydGVkIGluIHBhcnNlKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihyZXN1bHQuaXNzdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHNhZmVQYXJzZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpc1snfnN0YW5kYXJkJ10udmFsaWRhdGUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jIHZhbGlkYXRpb24gbm90IHN1cHBvcnRlZCBpbiBzYWZlUGFyc2UoKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IG5ldyBWYWxpZGF0aW9uRXJyb3IocmVzdWx0Lmlzc3VlcykgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuLyoqXG4gKiBTY2hlbWEgZm9yIG51bGxhYmxlIHZhbHVlcyAoVCB8IG51bGwpLlxuICogQWNjZXB0cyBudWxsIG9yIHRoZSB3cmFwcGVkIHNjaGVtYSdzIHR5cGUuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgd3JhcHBlZCBzY2hlbWEgdHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLm51bGxhYmxlKHMuc3RyaW5nKCkpO1xuICogc2NoZW1hLnBhcnNlKCdoZWxsbycpOyAvLyAnaGVsbG8nXG4gKiBzY2hlbWEucGFyc2UobnVsbCk7IC8vIG51bGxcbiAqIHNjaGVtYS5wYXJzZSgxMjMpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBOdWxsYWJsZVNjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdOdWxsYWJsZVNjaGVtYSc7XG4gICAgc2NoZW1hO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVsnfnN0YW5kYXJkJ10udmFsaWRhdGUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgLy8gVHlwZS1zYWZlIHBhcnNlIG1ldGhvZHMgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICBwYXJzZU1ldGhvZHMgPSBjcmVhdGVQYXJzZU1ldGhvZHMoKTtcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEpIHtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgfVxuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICAvLyBJbXBvcnQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgIGNvbnN0IHsgb3B0aW9uYWwgfSA9IHJlcXVpcmUoJy4vb3B0aW9uYWwuanMnKTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIEFscmVhZHkgbnVsbGFibGVcbiAgICB9XG4gICAgcGFyc2UgPSB0aGlzLnBhcnNlTWV0aG9kcy5wYXJzZTtcbiAgICBzYWZlUGFyc2UgPSB0aGlzLnBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIE1ha2UgYSBzY2hlbWEgbnVsbGFibGUgKFQgfCBudWxsKS5cbiAqXG4gKiBAcGFyYW0gc2NoZW1hIC0gVGhlIHNjaGVtYSB0byBtYWtlIG51bGxhYmxlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZXJTY2hlbWEgPSBzLm9iamVjdCh7XG4gKiAgIG5hbWU6IHMuc3RyaW5nKCksXG4gKiAgIGJpbzogcy5udWxsYWJsZShzLnN0cmluZygpKVxuICogfSk7XG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBudWxsYWJsZShzY2hlbWEpIHtcbiAgICByZXR1cm4gbmV3IE51bGxhYmxlU2NoZW1hKHNjaGVtYSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udWxsYWJsZS5qcy5tYXAiLAogICAgImltcG9ydCB7IHN1Y2Nlc3MsIGNyZWF0ZVBhcnNlTWV0aG9kcywgU0NIRU1BX0tJTkQgfSBmcm9tICcuLi9iYXNlJztcbi8qKlxuICogU2NoZW1hIGZvciBvcHRpb25hbCB2YWx1ZXMgKFQgfCB1bmRlZmluZWQpLlxuICogQWNjZXB0cyB1bmRlZmluZWQgb3IgdGhlIHdyYXBwZWQgc2NoZW1hJ3MgdHlwZS5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB3cmFwcGVkIHNjaGVtYSB0eXBlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjaGVtYSA9IHMub3B0aW9uYWwocy5zdHJpbmcoKSk7XG4gKiBzY2hlbWEucGFyc2UoJ2hlbGxvJyk7IC8vICdoZWxsbydcbiAqIHNjaGVtYS5wYXJzZSh1bmRlZmluZWQpOyAvLyB1bmRlZmluZWRcbiAqIHNjaGVtYS5wYXJzZSgxMjMpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBPcHRpb25hbFNjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdPcHRpb25hbFNjaGVtYSc7XG4gICAgc2NoZW1hO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIC8vIFR5cGUtc2FmZSBwYXJzZSBtZXRob2RzIGZvciB0aGlzIGluc3RhbmNlXG4gICAgcGFyc2VNZXRob2RzID0gY3JlYXRlUGFyc2VNZXRob2RzKCk7XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIH1cbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIEFscmVhZHkgb3B0aW9uYWxcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIC8vIEltcG9ydCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgY29uc3QgeyBudWxsYWJsZSB9ID0gcmVxdWlyZSgnLi9udWxsYWJsZS5qcycpO1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIHBhcnNlID0gdGhpcy5wYXJzZU1ldGhvZHMucGFyc2U7XG4gICAgc2FmZVBhcnNlID0gdGhpcy5wYXJzZU1ldGhvZHMuc2FmZVBhcnNlO1xufVxuLyoqXG4gKiBNYWtlIGEgc2NoZW1hIG9wdGlvbmFsIChUIHwgdW5kZWZpbmVkKS5cbiAqXG4gKiBAcGFyYW0gc2NoZW1hIC0gVGhlIHNjaGVtYSB0byBtYWtlIG9wdGlvbmFsXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZXJTY2hlbWEgPSBzLm9iamVjdCh7XG4gKiAgIG5hbWU6IHMuc3RyaW5nKCksXG4gKiAgIG5pY2tuYW1lOiBzLm9wdGlvbmFsKHMuc3RyaW5nKCkpXG4gKiB9KTtcbiAqIGBgYFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsKHNjaGVtYSkge1xuICAgIHJldHVybiBuZXcgT3B0aW9uYWxTY2hlbWEoc2NoZW1hKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wdGlvbmFsLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlSXNzdWUsIGZhaWx1cmUsIHN1Y2Nlc3MsIGNyZWF0ZVBhcnNlTWV0aG9kcywgU0NIRU1BX0tJTkQgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9uYWwnO1xuaW1wb3J0IHsgbnVsbGFibGUgfSBmcm9tICcuLi91dGlscy9udWxsYWJsZSc7XG5jb25zdCBwYXJzZU1ldGhvZHMgPSBjcmVhdGVQYXJzZU1ldGhvZHMoKTtcbi8qKlxuICogU2NoZW1hIGZvciB2YWxpZGF0aW5nIHN0cmluZyB2YWx1ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjaGVtYSA9IHMuc3RyaW5nKCk7XG4gKiBjb25zdCBuYW1lID0gc2NoZW1hLnBhcnNlKCdKb2huJyk7IC8vIFwiSm9oblwiXG4gKiBzY2hlbWEucGFyc2UoMTIzKTsgLy8gdGhyb3dzIFZhbGlkYXRpb25FcnJvclxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdTY2hlbWEge1xuICAgIFtTQ0hFTUFfS0lORF0gPSAnU3RyaW5nU2NoZW1hJztcbiAgICBkZXNjcmlwdGlvbjtcbiAgICBfbWluO1xuICAgIF9tYXg7XG4gICAgX2VtYWlsO1xuICAgIF91cmw7XG4gICAgJ35zdGFuZGFyZCcgPSB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHZlbmRvcjogJ2FnZW50dWl0eScsXG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBFeHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiB2YWx1ZX1gKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX21pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA8IHRoaXMuX21pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlSXNzdWUoYFN0cmluZyBtdXN0IGJlIGF0IGxlYXN0ICR7dGhpcy5fbWlufSBjaGFyYWN0ZXJzLCBnb3QgJHt2YWx1ZS5sZW5ndGh9YCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5fbWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVJc3N1ZShgU3RyaW5nIG11c3QgYmUgYXQgbW9zdCAke3RoaXMuX21heH0gY2hhcmFjdGVycywgZ290ICR7dmFsdWUubGVuZ3RofWApLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2VtYWlsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmFzaWMgZW1haWwgcmVnZXggLSBtYXRjaGVzIG1vc3QgdmFsaWQgZW1haWxzXG4gICAgICAgICAgICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuICAgICAgICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoYEludmFsaWQgZW1haWwgZm9ybWF0YCldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdXJsKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFVSTCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBJbnZhbGlkIFVSTCBmb3JtYXRgKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBtaW5pbXVtIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHNjaGVtYSA9IHMuc3RyaW5nKCkubWluKDMpO1xuICAgICAqIHNjaGVtYS5wYXJzZSgnaGVsbG8nKTsgLy8gXCJoZWxsb1wiXG4gICAgICogc2NoZW1hLnBhcnNlKCdoaScpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWluKGxlbmd0aCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHRoaXMuX2Nsb25lKCk7XG4gICAgICAgIGNsb25lLl9taW4gPSBsZW5ndGg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IG1heGltdW0gbGVuZ3RoLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgc2NoZW1hID0gcy5zdHJpbmcoKS5tYXgoMTApO1xuICAgICAqIHNjaGVtYS5wYXJzZSgnaGVsbG8nKTsgLy8gXCJoZWxsb1wiXG4gICAgICogc2NoZW1hLnBhcnNlKCdoZWxsbyB3b3JsZCcpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWF4KGxlbmd0aCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHRoaXMuX2Nsb25lKCk7XG4gICAgICAgIGNsb25lLl9tYXggPSBsZW5ndGg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgZW1haWwgZm9ybWF0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgc2NoZW1hID0gcy5zdHJpbmcoKS5lbWFpbCgpO1xuICAgICAqIHNjaGVtYS5wYXJzZSgndXNlckBleGFtcGxlLmNvbScpOyAvLyBcInVzZXJAZXhhbXBsZS5jb21cIlxuICAgICAqIHNjaGVtYS5wYXJzZSgnaW52YWxpZCcpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZW1haWwoKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gdGhpcy5fY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuX2VtYWlsID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBVUkwgZm9ybWF0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgc2NoZW1hID0gcy5zdHJpbmcoKS51cmwoKTtcbiAgICAgKiBzY2hlbWEucGFyc2UoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTsgLy8gXCJodHRwczovL2V4YW1wbGUuY29tXCJcbiAgICAgKiBzY2hlbWEucGFyc2UoJ2ludmFsaWQnKTsgLy8gdGhyb3dzIFZhbGlkYXRpb25FcnJvclxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHVybCgpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSB0aGlzLl9jbG9uZSgpO1xuICAgICAgICBjbG9uZS5fdXJsID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgIH1cbiAgICBfY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFN0cmluZ1NjaGVtYSgpO1xuICAgICAgICBjbG9uZS5kZXNjcmlwdGlvbiA9IHRoaXMuZGVzY3JpcHRpb247XG4gICAgICAgIGNsb25lLl9taW4gPSB0aGlzLl9taW47XG4gICAgICAgIGNsb25lLl9tYXggPSB0aGlzLl9tYXg7XG4gICAgICAgIGNsb25lLl9lbWFpbCA9IHRoaXMuX2VtYWlsO1xuICAgICAgICBjbG9uZS5fdXJsID0gdGhpcy5fdXJsO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuICAgIHBhcnNlID0gcGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyBzY2hlbWEuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG5hbWVTY2hlbWEgPSBzLnN0cmluZygpLmRlc2NyaWJlKCdVc2VyIG5hbWUnKTtcbiAqIGNvbnN0IG5hbWUgPSBuYW1lU2NoZW1hLnBhcnNlKCdKb2huJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZygpIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ1NjaGVtYSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlSXNzdWUsIGZhaWx1cmUsIHN1Y2Nlc3MsIGNyZWF0ZVBhcnNlTWV0aG9kcywgU0NIRU1BX0tJTkQgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9uYWwnO1xuaW1wb3J0IHsgbnVsbGFibGUgfSBmcm9tICcuLi91dGlscy9udWxsYWJsZSc7XG5jb25zdCBwYXJzZU1ldGhvZHMgPSBjcmVhdGVQYXJzZU1ldGhvZHMoKTtcbi8qKlxuICogU2NoZW1hIGZvciB2YWxpZGF0aW5nIG51bWJlciB2YWx1ZXMuXG4gKiBSZWplY3RzIE5hTiB2YWx1ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjaGVtYSA9IHMubnVtYmVyKCk7XG4gKiBjb25zdCBhZ2UgPSBzY2hlbWEucGFyc2UoMzApOyAvLyAzMFxuICogc2NoZW1hLnBhcnNlKCczMCcpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gKiBzY2hlbWEucGFyc2UoTmFOKTsgLy8gdGhyb3dzIFZhbGlkYXRpb25FcnJvclxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBOdW1iZXJTY2hlbWEge1xuICAgIFtTQ0hFTUFfS0lORF0gPSAnTnVtYmVyU2NoZW1hJztcbiAgICBkZXNjcmlwdGlvbjtcbiAgICBfZmluaXRlID0gZmFsc2U7XG4gICAgX21pbjtcbiAgICBfbWF4O1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCBOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBFeHBlY3RlZCBudW1iZXIsIGdvdCAke3R5cGVvZiB2YWx1ZX1gKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2Zpbml0ZSAmJiAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtjcmVhdGVJc3N1ZSgnRXhwZWN0ZWQgZmluaXRlIG51bWJlciAobm90IEluZmluaXR5IG9yIC1JbmZpbml0eSknKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX21pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgdGhpcy5fbWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBFeHBlY3RlZCBudW1iZXIgPj0gJHt0aGlzLl9taW59LCBnb3QgJHt2YWx1ZX1gKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX21heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gdGhpcy5fbWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBFeHBlY3RlZCBudW1iZXIgPD0gJHt0aGlzLl9tYXh9LCBnb3QgJHt2YWx1ZX1gKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3ModmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVxdWlyZSB0aGUgbnVtYmVyIHRvIGJlIGZpbml0ZSAobm90IEluZmluaXR5LCAtSW5maW5pdHksIG9yIE5hTikuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzY2hlbWEgPSBzLm51bWJlcigpLmZpbml0ZSgpO1xuICAgICAqIHNjaGVtYS5wYXJzZSgxMjMpOyAvLyAxMjNcbiAgICAgKiBzY2hlbWEucGFyc2UoSW5maW5pdHkpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gICAgICogc2NoZW1hLnBhcnNlKC1JbmZpbml0eSk7IC8vIHRocm93cyBWYWxpZGF0aW9uRXJyb3JcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmaW5pdGUoKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gdGhpcy5fY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuX2Zpbml0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IG1pbmltdW0gdmFsdWUgKGluY2x1c2l2ZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzY2hlbWEgPSBzLm51bWJlcigpLm1pbigwKTtcbiAgICAgKiBzY2hlbWEucGFyc2UoNSk7IC8vIDVcbiAgICAgKiBzY2hlbWEucGFyc2UoLTEpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWluKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gdGhpcy5fY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuX21pbiA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBtYXhpbXVtIHZhbHVlIChpbmNsdXNpdmUpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgc2NoZW1hID0gcy5udW1iZXIoKS5tYXgoMTAwKTtcbiAgICAgKiBzY2hlbWEucGFyc2UoNTApOyAvLyA1MFxuICAgICAqIHNjaGVtYS5wYXJzZSgxMDEpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWF4KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gdGhpcy5fY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuX21heCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwodGhpcyk7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIF9jbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgTnVtYmVyU2NoZW1hKCk7XG4gICAgICAgIGNsb25lLmRlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbjtcbiAgICAgICAgY2xvbmUuX2Zpbml0ZSA9IHRoaXMuX2Zpbml0ZTtcbiAgICAgICAgY2xvbmUuX21pbiA9IHRoaXMuX21pbjtcbiAgICAgICAgY2xvbmUuX21heCA9IHRoaXMuX21heDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbiAgICBwYXJzZSA9IHBhcnNlTWV0aG9kcy5wYXJzZTtcbiAgICBzYWZlUGFyc2UgPSBwYXJzZU1ldGhvZHMuc2FmZVBhcnNlO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBudW1iZXIgc2NoZW1hLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhZ2VTY2hlbWEgPSBzLm51bWJlcigpLmRlc2NyaWJlKCdVc2VyIGFnZScpO1xuICogY29uc3QgYWdlID0gYWdlU2NoZW1hLnBhcnNlKDMwKTtcbiAqXG4gKiBjb25zdCBmaW5pdGVTY2hlbWEgPSBzLm51bWJlcigpLmZpbml0ZSgpO1xuICogZmluaXRlU2NoZW1hLnBhcnNlKDEyMyk7IC8vIE9LXG4gKiBmaW5pdGVTY2hlbWEucGFyc2UoSW5maW5pdHkpOyAvLyB0aHJvd3NcbiAqXG4gKiBjb25zdCByYW5nZVNjaGVtYSA9IHMubnVtYmVyKCkubWluKDApLm1heCgxMDApO1xuICogcmFuZ2VTY2hlbWEucGFyc2UoNTApOyAvLyBPS1xuICogcmFuZ2VTY2hlbWEucGFyc2UoMTAxKTsgLy8gdGhyb3dzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG51bWJlcigpIHtcbiAgICByZXR1cm4gbmV3IE51bWJlclNjaGVtYSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bnVtYmVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlSXNzdWUsIGZhaWx1cmUsIHN1Y2Nlc3MsIGNyZWF0ZVBhcnNlTWV0aG9kcywgU0NIRU1BX0tJTkQgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9uYWwnO1xuaW1wb3J0IHsgbnVsbGFibGUgfSBmcm9tICcuLi91dGlscy9udWxsYWJsZSc7XG5jb25zdCBwYXJzZU1ldGhvZHMgPSBjcmVhdGVQYXJzZU1ldGhvZHMoKTtcbi8qKlxuICogU2NoZW1hIGZvciB2YWxpZGF0aW5nIGJvb2xlYW4gdmFsdWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLmJvb2xlYW4oKTtcbiAqIGNvbnN0IGFjdGl2ZSA9IHNjaGVtYS5wYXJzZSh0cnVlKTsgLy8gdHJ1ZVxuICogc2NoZW1hLnBhcnNlKCd0cnVlJyk7IC8vIHRocm93cyBWYWxpZGF0aW9uRXJyb3JcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQm9vbGVhblNjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdCb29sZWFuU2NoZW1hJztcbiAgICBkZXNjcmlwdGlvbjtcbiAgICAnfnN0YW5kYXJkJyA9IHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgdmVuZG9yOiAnYWdlbnR1aXR5JyxcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBFeHBlY3RlZCBib29sZWFuLCBnb3QgJHt0eXBlb2YgdmFsdWV9YCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwodGhpcyk7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIHBhcnNlID0gcGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIENyZWF0ZSBhIGJvb2xlYW4gc2NoZW1hLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhY3RpdmVTY2hlbWEgPSBzLmJvb2xlYW4oKS5kZXNjcmliZSgnQWNjb3VudCBzdGF0dXMnKTtcbiAqIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVNjaGVtYS5wYXJzZSh0cnVlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbigpIHtcbiAgICByZXR1cm4gbmV3IEJvb2xlYW5TY2hlbWEoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb2xlYW4uanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVJc3N1ZSwgZmFpbHVyZSwgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbmNvbnN0IHBhcnNlTWV0aG9kcyA9IGNyZWF0ZVBhcnNlTWV0aG9kcygpO1xuLyoqXG4gKiBTY2hlbWEgZm9yIHZhbGlkYXRpbmcgbnVsbCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdWxsU2NoZW1hIHtcbiAgICBbU0NIRU1BX0tJTkRdID0gJ051bGxTY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoYEV4cGVjdGVkIG51bGwsIGdvdCAke3R5cGVvZiB2YWx1ZX1gKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3ModmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25hbCh0aGlzKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBudWxsYWJsZSh0aGlzKTtcbiAgICB9XG4gICAgcGFyc2UgPSBwYXJzZU1ldGhvZHMucGFyc2U7XG4gICAgc2FmZVBhcnNlID0gcGFyc2VNZXRob2RzLnNhZmVQYXJzZTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgbnVsbCBzY2hlbWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBudWxsXygpIHtcbiAgICByZXR1cm4gbmV3IE51bGxTY2hlbWEoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW51bGwuanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVJc3N1ZSwgZmFpbHVyZSwgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbmNvbnN0IHBhcnNlTWV0aG9kcyA9IGNyZWF0ZVBhcnNlTWV0aG9kcygpO1xuLyoqXG4gKiBTY2hlbWEgZm9yIHZhbGlkYXRpbmcgdW5kZWZpbmVkIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuZGVmaW5lZFNjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdVbmRlZmluZWRTY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtjcmVhdGVJc3N1ZShgRXhwZWN0ZWQgdW5kZWZpbmVkLCBnb3QgJHt0eXBlb2YgdmFsdWV9YCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwodGhpcyk7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIHBhcnNlID0gcGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIENyZWF0ZSBhbiB1bmRlZmluZWQgc2NoZW1hLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5kZWZpbmVkXygpIHtcbiAgICByZXR1cm4gbmV3IFVuZGVmaW5lZFNjaGVtYSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5kZWZpbmVkLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbmNvbnN0IHBhcnNlTWV0aG9kcyA9IGNyZWF0ZVBhcnNlTWV0aG9kcygpO1xuLyoqXG4gKiBTY2hlbWEgdGhhdCBhY2NlcHRzIGFueSB2YWx1ZSB3aXRoIHR5cGUtc2FmZSB1bmtub3duLlxuICogUmV0dXJucyB0aGUgdmFsdWUgYXMtaXMgd2l0aG91dCB2YWxpZGF0aW9uLlxuICogVXNlIHRoaXMgd2hlbiB5b3Ugd2FudCB0byBhY2NlcHQgYW55IHZhbHVlIGJ1dCBmb3JjZSB0eXBlIGNoZWNraW5nIGF0IHVzYWdlIHNpdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNjaGVtYSA9IHMudW5rbm93bigpO1xuICogY29uc3QgdmFsdWUgPSBzY2hlbWEucGFyc2UoMTIzKTsgLy8gdW5rbm93blxuICogY29uc3QgdmFsdWUyID0gc2NoZW1hLnBhcnNlKCdoZWxsbycpOyAvLyB1bmtub3duXG4gKiBjb25zdCB2YWx1ZTMgPSBzY2hlbWEucGFyc2UobnVsbCk7IC8vIHVua25vd25cbiAqXG4gKiAvLyBGb3JjZXMgdHlwZSBuYXJyb3dpbmdcbiAqIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gKiAgIGNvbnNvbGUubG9nKHZhbHVlLnRvVXBwZXJDYXNlKCkpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmtub3duU2NoZW1hIHtcbiAgICBbU0NIRU1BX0tJTkRdID0gJ1Vua25vd25TY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiBzdWNjZXNzKHZhbHVlKSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwodGhpcyk7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIHBhcnNlID0gcGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIENyZWF0ZSBhbiB1bmtub3duIHNjaGVtYSB0aGF0IGFjY2VwdHMgYW55IHZhbHVlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLnVua25vd24oKTtcbiAqIGNvbnN0IHZhbHVlID0gc2NoZW1hLnBhcnNlKGFueXRoaW5nKTsgLy8gVHlwZSBpcyB1bmtub3duXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVua25vd24oKSB7XG4gICAgcmV0dXJuIG5ldyBVbmtub3duU2NoZW1hKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmtub3duLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBwYXJzZU1ldGhvZHMgPSBjcmVhdGVQYXJzZU1ldGhvZHMoKTtcbi8qKlxuICogU2NoZW1hIHRoYXQgYWNjZXB0cyBhbnkgdmFsdWUgd2l0aCAnYW55JyB0eXBlLlxuICogUmV0dXJucyB0aGUgdmFsdWUgYXMtaXMgd2l0aG91dCB2YWxpZGF0aW9uIG9yIHR5cGUgc2FmZXR5LlxuICogVXNlIHRoaXMgc3BhcmluZ2x5IC0gcHJlZmVyIHVua25vd24oKSBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLmFueSgpO1xuICogY29uc3QgdmFsdWUgPSBzY2hlbWEucGFyc2UoMTIzKTsgLy8gYW55XG4gKiBjb25zdCB2YWx1ZTIgPSBzY2hlbWEucGFyc2UoJ2hlbGxvJyk7IC8vIGFueVxuICpcbiAqIC8vIE5vIHR5cGUgY2hlY2tpbmcgcmVxdWlyZWRcbiAqIHZhbHVlLnRvVXBwZXJDYXNlKCk7IC8vIE5vIGVycm9yLCBidXQgbWF5IGZhaWwgYXQgcnVudGltZVxuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgQW55U2NoZW1hIHtcbiAgICBbU0NIRU1BX0tJTkRdID0gJ0FueVNjaGVtYSc7XG4gICAgZGVzY3JpcHRpb247XG4gICAgJ35zdGFuZGFyZCcgPSB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHZlbmRvcjogJ2FnZW50dWl0eScsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHN1Y2Nlc3ModmFsdWUpLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB0eXBlczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25hbCh0aGlzKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBudWxsYWJsZSh0aGlzKTtcbiAgICB9XG4gICAgcGFyc2UgPSBwYXJzZU1ldGhvZHMucGFyc2U7XG4gICAgc2FmZVBhcnNlID0gcGFyc2VNZXRob2RzLnNhZmVQYXJzZTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIGFueSBzY2hlbWEgdGhhdCBhY2NlcHRzIGFueSB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2NoZW1hID0gcy5hbnkoKTtcbiAqIGNvbnN0IHZhbHVlID0gc2NoZW1hLnBhcnNlKGFueXRoaW5nKTsgLy8gVHlwZSBpcyBhbnlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYW55KCkge1xuICAgIHJldHVybiBuZXcgQW55U2NoZW1hKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbnkuanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVJc3N1ZSwgZmFpbHVyZSwgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbi8qKlxuICogU2NoZW1hIGZvciB2YWxpZGF0aW5nIG9iamVjdHMgd2l0aCB0eXBlZCBwcm9wZXJ0aWVzLlxuICogVmFsaWRhdGVzIGVhY2ggcHJvcGVydHkgYWNjb3JkaW5nIHRvIGl0cyBzY2hlbWEgYW5kIGNvbGxlY3RzIGFsbCB2YWxpZGF0aW9uIGVycm9ycy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSBvYmplY3Qgc2hhcGUgZGVmaW5pdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2VyU2NoZW1hID0gcy5vYmplY3Qoe1xuICogICBuYW1lOiBzLnN0cmluZygpLFxuICogICBhZ2U6IHMubnVtYmVyKCksXG4gKiAgIGVtYWlsOiBzLnN0cmluZygpXG4gKiB9KTtcbiAqXG4gKiBjb25zdCB1c2VyID0gdXNlclNjaGVtYS5wYXJzZSh7XG4gKiAgIG5hbWU6ICdKb2huJyxcbiAqICAgYWdlOiAzMCxcbiAqICAgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJ1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdFNjaGVtYSB7XG4gICAgc2hhcGU7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdPYmplY3RTY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgIHBhcnNlTWV0aG9kcyA9IGNyZWF0ZVBhcnNlTWV0aG9kcygpO1xuICAgIGNvbnN0cnVjdG9yKHNoYXBlKSB7XG4gICAgICAgIHRoaXMuc2hhcGUgPSBzaGFwZTtcbiAgICB9XG4gICAgJ35zdGFuZGFyZCcgPSB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHZlbmRvcjogJ2FnZW50dWl0eScsXG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtjcmVhdGVJc3N1ZSgnRXhwZWN0ZWQgb2JqZWN0LCBnb3QgbnVsbCcpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoJ0V4cGVjdGVkIG9iamVjdCwgZ290IGFycmF5JyldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBFeHBlY3RlZCBvYmplY3QsIGdvdCAke3R5cGVvZiB2YWx1ZX1gKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zaGFwZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gc2NoZW1hWyd+c3RhbmRhcmQnXS52YWxpZGF0ZShmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHN1cHBvcnQgc3luY2hyb25vdXMgdmFsaWRhdGlvbiBmb3Igbm93XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXN5bmMgdmFsaWRhdGlvbiBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmlzc3Vlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIHZhbGlkYXRpb24uaXNzdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXMucHVzaChjcmVhdGVJc3N1ZShpc3N1ZS5tZXNzYWdlLCBpc3N1ZS5wYXRoID8gW2tleSwgLi4uaXNzdWUucGF0aF0gOiBba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbGlkYXRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaXNzdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHJlc3VsdCk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgb2JqZWN0IHNjaGVtYSB3aXRoIG9ubHkgdGhlIHNwZWNpZmllZCBrZXlzLlxuICAgICAqIFNpbWlsYXIgdG8gVHlwZVNjcmlwdCdzIFBpY2s8VCwgSz4gdXRpbGl0eSB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleXMgLSBBcnJheSBvZiBrZXlzIHRvIHBpY2sgZnJvbSB0aGUgc2NoZW1hXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB1c2VyU2NoZW1hID0gcy5vYmplY3QoeyBuYW1lOiBzLnN0cmluZygpLCBhZ2U6IHMubnVtYmVyKCksIGVtYWlsOiBzLnN0cmluZygpIH0pO1xuICAgICAqIGNvbnN0IG5hbWVPbmx5U2NoZW1hID0gdXNlclNjaGVtYS5waWNrKFsnbmFtZSddKTtcbiAgICAgKiAvLyB7IG5hbWU6IHN0cmluZyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcGljayhrZXlzKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gdGhpcy5zaGFwZSkge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RTY2hlbWEobmV3U2hhcGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgb2JqZWN0IHNjaGVtYSB3aXRob3V0IHRoZSBzcGVjaWZpZWQga2V5cy5cbiAgICAgKiBTaW1pbGFyIHRvIFR5cGVTY3JpcHQncyBPbWl0PFQsIEs+IHV0aWxpdHkgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXlzIC0gQXJyYXkgb2Yga2V5cyB0byBvbWl0IGZyb20gdGhlIHNjaGVtYVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgdXNlclNjaGVtYSA9IHMub2JqZWN0KHsgbmFtZTogcy5zdHJpbmcoKSwgYWdlOiBzLm51bWJlcigpLCBwYXNzd29yZDogcy5zdHJpbmcoKSB9KTtcbiAgICAgKiBjb25zdCBwdWJsaWNVc2VyU2NoZW1hID0gdXNlclNjaGVtYS5vbWl0KFsncGFzc3dvcmQnXSk7XG4gICAgICogLy8geyBuYW1lOiBzdHJpbmc7IGFnZTogbnVtYmVyIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvbWl0KGtleXMpIHtcbiAgICAgICAgY29uc3Qga2V5c1NldCA9IG5ldyBTZXQoa2V5cyk7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNoYXBlKSkge1xuICAgICAgICAgICAgaWYgKCFrZXlzU2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IHNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE9iamVjdFNjaGVtYShuZXdTaGFwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgc2NoZW1hIHdoZXJlIGFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC5cbiAgICAgKiBTaW1pbGFyIHRvIFR5cGVTY3JpcHQncyBQYXJ0aWFsPFQ+IHV0aWxpdHkgdHlwZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHVzZXJTY2hlbWEgPSBzLm9iamVjdCh7IG5hbWU6IHMuc3RyaW5nKCksIGFnZTogcy5udW1iZXIoKSB9KTtcbiAgICAgKiBjb25zdCBwYXJ0aWFsVXNlclNjaGVtYSA9IHVzZXJTY2hlbWEucGFydGlhbCgpO1xuICAgICAqIC8vIHsgbmFtZT86IHN0cmluZzsgYWdlPzogbnVtYmVyIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwYXJ0aWFsKCkge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zaGFwZSkpIHtcbiAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBvcHRpb25hbChzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0U2NoZW1hKG5ld1NoYXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IG9iamVjdCBzY2hlbWEgYnkgZXh0ZW5kaW5nIHRoaXMgc2NoZW1hIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzLlxuICAgICAqIFByb3BlcnRpZXMgaW4gdGhlIGV4dGVuc2lvbiBvdmVycmlkZSBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIHNjaGVtYS5cbiAgICAgKiBTaW1pbGFyIHRvIFR5cGVTY3JpcHQncyBpbnRlcnNlY3Rpb24gdHlwZXMgd2l0aCBvdmVycmlkZSBzZW1hbnRpY3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXh0ZW5zaW9uIC0gT2JqZWN0IHNoYXBlIHRvIGV4dGVuZCB3aXRoXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB1c2VyU2NoZW1hID0gcy5vYmplY3QoeyBuYW1lOiBzLnN0cmluZygpLCBhZ2U6IHMubnVtYmVyKCkgfSk7XG4gICAgICogY29uc3QgYWRtaW5TY2hlbWEgPSB1c2VyU2NoZW1hLmV4dGVuZCh7IHJvbGU6IHMubGl0ZXJhbCgnYWRtaW4nKSwgcGVybWlzc2lvbnM6IHMuYXJyYXkocy5zdHJpbmcoKSkgfSk7XG4gICAgICogLy8geyBuYW1lOiBzdHJpbmc7IGFnZTogbnVtYmVyOyByb2xlOiAnYWRtaW4nOyBwZXJtaXNzaW9uczogc3RyaW5nW10gfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4dGVuZChleHRlbnNpb24pIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7IC4uLnRoaXMuc2hhcGUsIC4uLmV4dGVuc2lvbiB9O1xuICAgICAgICByZXR1cm4gbmV3IE9iamVjdFNjaGVtYShuZXdTaGFwZSk7XG4gICAgfVxuICAgIHBhcnNlID0gdGhpcy5wYXJzZU1ldGhvZHMucGFyc2U7XG4gICAgc2FmZVBhcnNlID0gdGhpcy5wYXJzZU1ldGhvZHMuc2FmZVBhcnNlO1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IHNjaGVtYSB3aXRoIHR5cGVkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHNoYXBlIC0gT2JqZWN0IGRlZmluaW5nIHRoZSBzY2hlbWEgZm9yIGVhY2ggcHJvcGVydHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNlclNjaGVtYSA9IHMub2JqZWN0KHtcbiAqICAgbmFtZTogcy5zdHJpbmcoKS5kZXNjcmliZSgnRnVsbCBuYW1lJyksXG4gKiAgIGFnZTogcy5udW1iZXIoKS5kZXNjcmliZSgnQWdlIGluIHllYXJzJyksXG4gKiAgIGVtYWlsOiBzLm9wdGlvbmFsKHMuc3RyaW5nKCkpXG4gKiB9KTtcbiAqXG4gKiB0eXBlIFVzZXIgPSBzLmluZmVyPHR5cGVvZiB1c2VyU2NoZW1hPjtcbiAqIGNvbnN0IHVzZXIgPSB1c2VyU2NoZW1hLnBhcnNlKGRhdGEpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3Qoc2hhcGUpIHtcbiAgICByZXR1cm4gbmV3IE9iamVjdFNjaGVtYShzaGFwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYmplY3QuanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVJc3N1ZSwgZmFpbHVyZSwgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbi8qKlxuICogU2NoZW1hIGZvciB2YWxpZGF0aW5nIGFycmF5cyB3aXRoIHR5cGVkIGVsZW1lbnRzLlxuICogVmFsaWRhdGVzIGVhY2ggZWxlbWVudCBhbmQgY29sbGVjdHMgYWxsIHZhbGlkYXRpb24gZXJyb3JzIHdpdGggYXJyYXkgaW5kaWNlcyBpbiBwYXRocy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSBzY2hlbWEgdHlwZSBmb3IgYXJyYXkgZWxlbWVudHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdGFnc1NjaGVtYSA9IHMuYXJyYXkocy5zdHJpbmcoKSk7XG4gKiBjb25zdCB0YWdzID0gdGFnc1NjaGVtYS5wYXJzZShbJ3RhZzEnLCAndGFnMiddKTtcbiAqXG4gKiBjb25zdCB1c2Vyc1NjaGVtYSA9IHMuYXJyYXkocy5vYmplY3Qoe1xuICogICBuYW1lOiBzLnN0cmluZygpLFxuICogICBhZ2U6IHMubnVtYmVyKClcbiAqIH0pKTtcbiAqIGBgYFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNsYXNzIEFycmF5U2NoZW1hIHtcbiAgICBpdGVtU2NoZW1hO1xuICAgIFtTQ0hFTUFfS0lORF0gPSAnQXJyYXlTY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgIHBhcnNlTWV0aG9kcyA9IGNyZWF0ZVBhcnNlTWV0aG9kcygpO1xuICAgIGNvbnN0cnVjdG9yKGl0ZW1TY2hlbWEpIHtcbiAgICAgICAgdGhpcy5pdGVtU2NoZW1hID0gaXRlbVNjaGVtYTtcbiAgICB9XG4gICAgJ35zdGFuZGFyZCcgPSB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHZlbmRvcjogJ2FnZW50dWl0eScsXG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtjcmVhdGVJc3N1ZSgnRXhwZWN0ZWQgYXJyYXksIGdvdCBudWxsJyldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoYEV4cGVjdGVkIGFycmF5LCBnb3QgJHt0eXBlb2YgdmFsdWV9YCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMuaXRlbVNjaGVtYVsnfnN0YW5kYXJkJ10udmFsaWRhdGUodmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBzeW5jaHJvbm91cyB2YWxpZGF0aW9uIGZvciBub3dcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3luYyB2YWxpZGF0aW9uIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24uaXNzdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgdmFsaWRhdGlvbi5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlcy5wdXNoKGNyZWF0ZUlzc3VlKGlzc3VlLm1lc3NhZ2UsIGlzc3VlLnBhdGggPyBbaSwgLi4uaXNzdWUucGF0aF0gOiBbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsaWRhdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaXNzdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHJlc3VsdCk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgIH1cbiAgICBwYXJzZSA9IHRoaXMucGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHRoaXMucGFyc2VNZXRob2RzLnNhZmVQYXJzZTtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IHNjaGVtYSB3aXRoIHR5cGVkIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSBpdGVtU2NoZW1hIC0gVGhlIHNjaGVtYSBmb3IgdmFsaWRhdGluZyBlYWNoIGFycmF5IGVsZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3RyaW5nQXJyYXkgPSBzLmFycmF5KHMuc3RyaW5nKCkpO1xuICogY29uc3QgdGFncyA9IHN0cmluZ0FycmF5LnBhcnNlKFsndGFnMScsICd0YWcyJ10pO1xuICpcbiAqIGNvbnN0IHVzZXJBcnJheSA9IHMuYXJyYXkocy5vYmplY3Qoe1xuICogICBuYW1lOiBzLnN0cmluZygpLFxuICogICBhZ2U6IHMubnVtYmVyKClcbiAqIH0pKTtcbiAqIGBgYFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5KGl0ZW1TY2hlbWEpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5U2NoZW1hKGl0ZW1TY2hlbWEpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJyYXkuanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVJc3N1ZSwgZmFpbHVyZSwgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbi8qKlxuICogU2NoZW1hIGZvciB2YWxpZGF0aW5nIHJlY29yZHMgKG9iamVjdHMgd2l0aCBzdHJpbmcga2V5cyBhbmQgdHlwZWQgdmFsdWVzKS5cbiAqIExpa2UgVHlwZVNjcmlwdCdzIFJlY29yZDxzdHJpbmcsIFQ+IHR5cGUuXG4gKlxuICogQHRlbXBsYXRlIEsgLSBUaGUga2V5IHNjaGVtYSAobXVzdCBiZSBzdHJpbmcpXG4gKiBAdGVtcGxhdGUgViAtIFRoZSB2YWx1ZSBzY2hlbWFcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2NoZW1hID0gcy5yZWNvcmQocy5zdHJpbmcoKSwgcy5udW1iZXIoKSk7XG4gKiBzY2hlbWEucGFyc2UoeyBhOiAxLCBiOiAyIH0pOyAvLyB7IGE6IDEsIGI6IDIgfVxuICogc2NoZW1hLnBhcnNlKHsgYTogJ2ludmFsaWQnIH0pOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gKiBgYGBcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBSZWNvcmRTY2hlbWEge1xuICAgIGtleVNjaGVtYTtcbiAgICB2YWx1ZVNjaGVtYTtcbiAgICBbU0NIRU1BX0tJTkRdID0gJ1JlY29yZFNjaGVtYSc7XG4gICAgZGVzY3JpcHRpb247XG4gICAgcmVjb3JkUGFyc2VNZXRob2RzID0gY3JlYXRlUGFyc2VNZXRob2RzKCk7XG4gICAgY29uc3RydWN0b3Ioa2V5U2NoZW1hLCB2YWx1ZVNjaGVtYSkge1xuICAgICAgICB0aGlzLmtleVNjaGVtYSA9IGtleVNjaGVtYTtcbiAgICAgICAgdGhpcy52YWx1ZVNjaGVtYSA9IHZhbHVlU2NoZW1hO1xuICAgIH1cbiAgICAnfnN0YW5kYXJkJyA9IHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgdmVuZG9yOiAnYWdlbnR1aXR5JyxcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKCdFeHBlY3RlZCByZWNvcmQsIGdvdCBudWxsJyldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtjcmVhdGVJc3N1ZSgnRXhwZWN0ZWQgcmVjb3JkLCBnb3QgYXJyYXknKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoYEV4cGVjdGVkIHJlY29yZCwgZ290ICR7dHlwZW9mIHZhbHVlfWApXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBrZXlcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlWYWxpZGF0aW9uID0gdGhpcy5rZXlTY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleVZhbGlkYXRpb24gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXN5bmMgdmFsaWRhdGlvbiBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXlWYWxpZGF0aW9uLmlzc3Vlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGtleVZhbGlkYXRpb24uaXNzdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXMucHVzaChjcmVhdGVJc3N1ZShgSW52YWxpZCBrZXkgXCIke2tleX1cIjogJHtpc3N1ZS5tZXNzYWdlfWAsIFtrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHZhbHVlXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVWYWxpZGF0aW9uID0gdGhpcy52YWx1ZVNjaGVtYVsnfnN0YW5kYXJkJ10udmFsaWRhdGUodmFsKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVWYWxpZGF0aW9uIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jIHZhbGlkYXRpb24gbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWVWYWxpZGF0aW9uLmlzc3Vlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIHZhbHVlVmFsaWRhdGlvbi5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlcy5wdXNoKGNyZWF0ZUlzc3VlKGlzc3VlLm1lc3NhZ2UsIGlzc3VlLnBhdGggPyBba2V5LCAuLi5pc3N1ZS5wYXRoXSA6IFtrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVWYWxpZGF0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlzc3Vlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25hbCh0aGlzKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBudWxsYWJsZSh0aGlzKTtcbiAgICB9XG4gICAgcGFyc2UgPSB0aGlzLnJlY29yZFBhcnNlTWV0aG9kcy5wYXJzZTtcbiAgICBzYWZlUGFyc2UgPSB0aGlzLnJlY29yZFBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIENyZWF0ZSBhIHJlY29yZCBzY2hlbWEgZm9yIG9iamVjdHMgd2l0aCBzdHJpbmcga2V5cyBhbmQgdHlwZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSBrZXlTY2hlbWEgLSBTY2hlbWEgZm9yIGtleXMgKHR5cGljYWxseSBzLnN0cmluZygpKVxuICogQHBhcmFtIHZhbHVlU2NoZW1hIC0gU2NoZW1hIGZvciB2YWx1ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29uZmlnU2NoZW1hID0gcy5yZWNvcmQocy5zdHJpbmcoKSwgcy5udW1iZXIoKSk7XG4gKiBjb25zdCBjb25maWcgPSBjb25maWdTY2hlbWEucGFyc2UoeyB0aW1lb3V0OiAzMCwgcmV0cmllczogMyB9KTtcbiAqXG4gKiBjb25zdCBtZXRhZGF0YVNjaGVtYSA9IHMucmVjb3JkKHMuc3RyaW5nKCksIHMudW5rbm93bigpKTtcbiAqIGNvbnN0IG1ldGFkYXRhID0gbWV0YWRhdGFTY2hlbWEucGFyc2UoeyBhbnk6ICdkYXRhJywgaGVyZTogMTIzIH0pO1xuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkKGtleVNjaGVtYSwgdmFsdWVTY2hlbWEpIHtcbiAgICByZXR1cm4gbmV3IFJlY29yZFNjaGVtYShrZXlTY2hlbWEsIHZhbHVlU2NoZW1hKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlY29yZC5qcy5tYXAiLAogICAgImltcG9ydCB7IGNyZWF0ZUlzc3VlLCBmYWlsdXJlLCBzdWNjZXNzLCBjcmVhdGVQYXJzZU1ldGhvZHMsIFNDSEVNQV9LSU5EIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJy4uL3V0aWxzL29wdGlvbmFsJztcbmltcG9ydCB7IG51bGxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvbnVsbGFibGUnO1xuLyoqXG4gKiBTY2hlbWEgZm9yIHZhbGlkYXRpbmcgZXhhY3QgbGl0ZXJhbCB2YWx1ZXMuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgZXhhY3QgdmFsdWUgdHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhZG1pblNjaGVtYSA9IHMubGl0ZXJhbCgnYWRtaW4nKTtcbiAqIGFkbWluU2NoZW1hLnBhcnNlKCdhZG1pbicpOyAvLyAnYWRtaW4nXG4gKiBhZG1pblNjaGVtYS5wYXJzZSgndXNlcicpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVyYWxTY2hlbWEge1xuICAgIHZhbHVlO1xuICAgIFtTQ0hFTUFfS0lORF0gPSAnTGl0ZXJhbFNjaGVtYSc7XG4gICAgZGVzY3JpcHRpb247XG4gICAgcGFyc2VNZXRob2RzID0gY3JlYXRlUGFyc2VNZXRob2RzKCk7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAnfnN0YW5kYXJkJyA9IHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgdmVuZG9yOiAnYWdlbnR1aXR5JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0ICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVJc3N1ZShgRXhwZWN0ZWQgbGl0ZXJhbCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkoaW5wdXQpfWApLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3ModGhpcy52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgIH1cbiAgICBwYXJzZSA9IHRoaXMucGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHRoaXMucGFyc2VNZXRob2RzLnNhZmVQYXJzZTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc2NoZW1hIGZvciBhbiBleGFjdCBsaXRlcmFsIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBleGFjdCB2YWx1ZSB0byBtYXRjaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhZG1pblJvbGUgPSBzLmxpdGVyYWwoJ2FkbWluJyk7XG4gKiBjb25zdCBtYXhWYWx1ZSA9IHMubGl0ZXJhbCgxMDApO1xuICogY29uc3QgZW5hYmxlZCA9IHMubGl0ZXJhbCh0cnVlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbFNjaGVtYSh2YWx1ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saXRlcmFsLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlSXNzdWUsIGZhaWx1cmUsIGNyZWF0ZVBhcnNlTWV0aG9kcywgU0NIRU1BX0tJTkQgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9uYWwnO1xuaW1wb3J0IHsgbnVsbGFibGUgfSBmcm9tICcuLi91dGlscy9udWxsYWJsZSc7XG4vKipcbiAqIFNjaGVtYSBmb3IgdW5pb24gdHlwZXMgKG9uZSBvZiBtdWx0aXBsZSBwb3NzaWJsZSBzY2hlbWFzKS5cbiAqIFZhbGlkYXRlcyBhZ2FpbnN0IGVhY2ggc2NoZW1hIHVudGlsIG9uZSBzdWNjZWVkcy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEFycmF5IG9mIHNjaGVtYSB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpZFNjaGVtYSA9IHMudW5pb24ocy5zdHJpbmcoKSwgcy5udW1iZXIoKSk7XG4gKiBpZFNjaGVtYS5wYXJzZSgnYWJjMTIzJyk7IC8vICdhYmMxMjMnXG4gKiBpZFNjaGVtYS5wYXJzZSgxMjMpOyAvLyAxMjNcbiAqXG4gKiBjb25zdCByb2xlU2NoZW1hID0gcy51bmlvbihcbiAqICAgcy5saXRlcmFsKCdhZG1pbicpLFxuICogICBzLmxpdGVyYWwoJ3VzZXInKSxcbiAqICAgcy5saXRlcmFsKCdndWVzdCcpXG4gKiApO1xuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgVW5pb25TY2hlbWEge1xuICAgIHNjaGVtYXM7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdVbmlvblNjaGVtYSc7XG4gICAgZGVzY3JpcHRpb247XG4gICAgcGFyc2VNZXRob2RzID0gY3JlYXRlUGFyc2VNZXRob2RzKCk7XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hcykge1xuICAgICAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzO1xuICAgIH1cbiAgICAnfnN0YW5kYXJkJyA9IHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgdmVuZG9yOiAnYWdlbnR1aXR5JyxcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsSXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiB0aGlzLnNjaGVtYXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHN1cHBvcnQgc3luY2hyb25vdXMgdmFsaWRhdGlvbiBmb3Igbm93XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3luYyB2YWxpZGF0aW9uIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNzdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFsbElzc3Vlcy5wdXNoKC4uLnJlc3VsdC5pc3N1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW1xuICAgICAgICAgICAgICAgIGNyZWF0ZUlzc3VlKGBWYWx1ZSBkaWQgbm90IG1hdGNoIGFueSBvZiB0aGUgdW5pb24gdHlwZXMgKCR7YWxsSXNzdWVzLmxlbmd0aH0gdmFsaWRhdGlvbiBlcnJvcnMpYCksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwodGhpcyk7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIHBhcnNlID0gdGhpcy5wYXJzZU1ldGhvZHMucGFyc2U7XG4gICAgc2FmZVBhcnNlID0gdGhpcy5wYXJzZU1ldGhvZHMuc2FmZVBhcnNlO1xufVxuLyoqXG4gKiBDcmVhdGUgYSB1bmlvbiBzY2hlbWEgKG9uZSBvZiBtdWx0aXBsZSBwb3NzaWJsZSB0eXBlcykuXG4gKlxuICogQHBhcmFtIHNjaGVtYXMgLSBWYXJpYWJsZSBudW1iZXIgb2Ygc2NoZW1hcyB0byB1bmlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpZFNjaGVtYSA9IHMudW5pb24ocy5zdHJpbmcoKSwgcy5udW1iZXIoKSk7XG4gKlxuICogY29uc3Qgcm9sZVNjaGVtYSA9IHMudW5pb24oXG4gKiAgIHMubGl0ZXJhbCgnYWRtaW4nKSxcbiAqICAgcy5saXRlcmFsKCd1c2VyJyksXG4gKiAgIHMubGl0ZXJhbCgnZ3Vlc3QnKVxuICogKTtcbiAqIGBgYFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHVuaW9uKC4uLnNjaGVtYXMpIHtcbiAgICByZXR1cm4gbmV3IFVuaW9uU2NoZW1hKHNjaGVtYXMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pb24uanMubWFwIiwKICAgICJpbXBvcnQgeyBTQ0hFTUFfS0lORCB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tICcuL3ByaW1pdGl2ZXMvc3RyaW5nJztcbmltcG9ydCB7IG51bWJlciB9IGZyb20gJy4vcHJpbWl0aXZlcy9udW1iZXInO1xuaW1wb3J0IHsgYm9vbGVhbiB9IGZyb20gJy4vcHJpbWl0aXZlcy9ib29sZWFuJztcbmltcG9ydCB7IG51bGxfIH0gZnJvbSAnLi9wcmltaXRpdmVzL251bGwnO1xuaW1wb3J0IHsgb2JqZWN0IH0gZnJvbSAnLi9jb21wbGV4L29iamVjdCc7XG5pbXBvcnQgeyBhcnJheSB9IGZyb20gJy4vY29tcGxleC9hcnJheSc7XG5pbXBvcnQgeyBsaXRlcmFsIH0gZnJvbSAnLi91dGlscy9saXRlcmFsJztcbmltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4vdXRpbHMvbnVsbGFibGUnO1xuaW1wb3J0IHsgdW5pb24gfSBmcm9tICcuL3V0aWxzL3VuaW9uJztcbi8qKlxuICogQ2hlY2sgc2NoZW1hIHR5cGUgdXNpbmcgYSBtaW5pZmljYXRpb24tc2FmZSBTQ0hFTUFfS0lORCB0YWcuXG4gKiBUaGlzIHdvcmtzIGFjcm9zcyBidW5kbGVkIG1vZHVsZXMgYW5kIGFmdGVyIG1pbmlmaWNhdGlvbiBiZWNhdXNlIGl0IHVzZXNcbiAqIGEgU3ltYm9sLmZvcigpIGJhc2VkIHRhZyByYXRoZXIgdGhhbiBjb25zdHJ1Y3Rvci5uYW1lIHdoaWNoIGdldHMgbWFuZ2xlZC5cbiAqL1xuZnVuY3Rpb24gaXNTY2hlbWFUeXBlKHNjaGVtYSwgdHlwZU5hbWUpIHtcbiAgICByZXR1cm4gc2NoZW1hPy5bU0NIRU1BX0tJTkRdID09PSB0eXBlTmFtZTtcbn1cbi8qKlxuICogQ29udmVydCBhIHNjaGVtYSB0byBKU09OIFNjaGVtYSBmb3JtYXQuXG4gKiBTdXBwb3J0cyBwcmltaXRpdmVzLCBvYmplY3RzLCBhcnJheXMsIHVuaW9ucywgbGl0ZXJhbHMsIG9wdGlvbmFsLCBhbmQgbnVsbGFibGUgdHlwZXMuXG4gKlxuICogQHBhcmFtIHNjaGVtYSAtIFRoZSBzY2hlbWEgdG8gY29udmVydFxuICogQHJldHVybnMgSlNPTiBTY2hlbWEgb2JqZWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZXJTY2hlbWEgPSBzLm9iamVjdCh7XG4gKiAgIG5hbWU6IHMuc3RyaW5nKCkuZGVzY3JpYmUoJ1VzZXIgbmFtZScpLFxuICogICBhZ2U6IHMubnVtYmVyKCkuZGVzY3JpYmUoJ1VzZXIgYWdlJylcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGpzb25TY2hlbWEgPSBzLnRvSlNPTlNjaGVtYSh1c2VyU2NoZW1hKTtcbiAqIC8vIHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHsuLi59LCByZXF1aXJlZDogWy4uLl0gfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pTT05TY2hlbWEoc2NoZW1hKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgLy8gQWRkIGRlc2NyaXB0aW9uIGlmIGF2YWlsYWJsZVxuICAgIGlmIChzY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0gc2NoZW1hLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICAvLyBQcmltaXRpdmUgdHlwZXMgLSB1c2UgY29uc3RydWN0b3IgbmFtZSBjaGVja3MgKHdvcmtzIGFjcm9zcyBidW5kbGVkIG1vZHVsZXMpXG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdTdHJpbmdTY2hlbWEnKSB8fCBpc1NjaGVtYVR5cGUoc2NoZW1hLCAnQ29lcmNlU3RyaW5nU2NoZW1hJykpIHtcbiAgICAgICAgcmVzdWx0LnR5cGUgPSAnc3RyaW5nJztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdOdW1iZXJTY2hlbWEnKSB8fCBpc1NjaGVtYVR5cGUoc2NoZW1hLCAnQ29lcmNlTnVtYmVyU2NoZW1hJykpIHtcbiAgICAgICAgcmVzdWx0LnR5cGUgPSAnbnVtYmVyJztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdCb29sZWFuU2NoZW1hJykgfHwgaXNTY2hlbWFUeXBlKHNjaGVtYSwgJ0NvZXJjZUJvb2xlYW5TY2hlbWEnKSkge1xuICAgICAgICByZXN1bHQudHlwZSA9ICdib29sZWFuJztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdOdWxsU2NoZW1hJykpIHtcbiAgICAgICAgcmVzdWx0LnR5cGUgPSAnbnVsbCc7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChpc1NjaGVtYVR5cGUoc2NoZW1hLCAnVW5kZWZpbmVkU2NoZW1hJykpIHtcbiAgICAgICAgLy8gSlNPTiBTY2hlbWEgZG9lc24ndCBoYXZlIGEgZGlyZWN0IFwidW5kZWZpbmVkXCIgdHlwZVxuICAgICAgICAvLyBXZSBjYW4gcmVwcmVzZW50IGl0IGFzIGFuIGVtcHR5IHNjaGVtYSBvciBvbWl0IHRoZSBmaWVsZFxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8vIExpdGVyYWwgdHlwZXNcbiAgICBpZiAoaXNTY2hlbWFUeXBlKHNjaGVtYSwgJ0xpdGVyYWxTY2hlbWEnKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNjaGVtYS52YWx1ZTtcbiAgICAgICAgcmVzdWx0LmNvbnN0ID0gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHQudHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJlc3VsdC50eXBlID0gJ251bWJlcic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJlc3VsdC50eXBlID0gJ2Jvb2xlYW4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIE9iamVjdCB0eXBlc1xuICAgIGlmIChpc1NjaGVtYVR5cGUoc2NoZW1hLCAnT2JqZWN0U2NoZW1hJykpIHtcbiAgICAgICAgcmVzdWx0LnR5cGUgPSAnb2JqZWN0JztcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBzY2hlbWEuc2hhcGU7XG4gICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzID0ge307XG4gICAgICAgIHJlc3VsdC5yZXF1aXJlZCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkU2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzaGFwZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wcm9wZXJ0aWVzW2tleV0gPSB0b0pTT05TY2hlbWEoZmllbGRTY2hlbWEpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIG5vdCBvcHRpb25hbCwgYWRkIGl0IHRvIHJlcXVpcmVkXG4gICAgICAgICAgICBpZiAoIWlzU2NoZW1hVHlwZShmaWVsZFNjaGVtYSwgJ09wdGlvbmFsU2NoZW1hJykpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucmVxdWlyZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlbW92ZSByZXF1aXJlZCBpZiBlbXB0eVxuICAgICAgICBpZiAocmVzdWx0LnJlcXVpcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHJlc3VsdC5yZXF1aXJlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBBcnJheSB0eXBlc1xuICAgIGlmIChpc1NjaGVtYVR5cGUoc2NoZW1hLCAnQXJyYXlTY2hlbWEnKSkge1xuICAgICAgICByZXN1bHQudHlwZSA9ICdhcnJheSc7XG4gICAgICAgIGNvbnN0IGl0ZW1TY2hlbWEgPSBzY2hlbWEuaXRlbVNjaGVtYTtcbiAgICAgICAgcmVzdWx0Lml0ZW1zID0gdG9KU09OU2NoZW1hKGl0ZW1TY2hlbWEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBPcHRpb25hbCB0eXBlc1xuICAgIGlmIChpc1NjaGVtYVR5cGUoc2NoZW1hLCAnT3B0aW9uYWxTY2hlbWEnKSkge1xuICAgICAgICBjb25zdCBpbm5lclNjaGVtYSA9IHNjaGVtYS5zY2hlbWE7XG4gICAgICAgIGNvbnN0IGlubmVySlNPTiA9IHRvSlNPTlNjaGVtYShpbm5lclNjaGVtYSk7XG4gICAgICAgIC8vIE9wdGlvbmFsIGlzIHR5cGljYWxseSBoYW5kbGVkIGF0IHRoZSBvYmplY3QgbGV2ZWwgdmlhIHJlcXVpcmVkIGFycmF5XG4gICAgICAgIHJldHVybiBpbm5lckpTT047XG4gICAgfVxuICAgIC8vIE51bGxhYmxlIHR5cGVzXG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdOdWxsYWJsZVNjaGVtYScpKSB7XG4gICAgICAgIGNvbnN0IGlubmVyU2NoZW1hID0gc2NoZW1hLnNjaGVtYTtcbiAgICAgICAgY29uc3QgaW5uZXJKU09OID0gdG9KU09OU2NoZW1hKGlubmVyU2NoZW1hKTtcbiAgICAgICAgLy8gTnVsbGFibGUgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGFueU9mIHdpdGggbnVsbFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYW55T2Y6IFtpbm5lckpTT04sIHsgdHlwZTogJ251bGwnIH1dLFxuICAgICAgICAgICAgLi4uKHNjaGVtYS5kZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uOiBzY2hlbWEuZGVzY3JpcHRpb24gfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFVuaW9uIHR5cGVzXG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdVbmlvblNjaGVtYScpKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYXMgPSBzY2hlbWEuc2NoZW1hcztcbiAgICAgICAgcmVzdWx0LmFueU9mID0gc2NoZW1hcy5tYXAoKHNjaGVtYSkgPT4gdG9KU09OU2NoZW1hKHNjaGVtYSkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBSZWNvcmQgdHlwZXMgKG9iamVjdCB3aXRoIHN0cmluZyBrZXlzIGFuZCB0eXBlZCB2YWx1ZXMpXG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdSZWNvcmRTY2hlbWEnKSkge1xuICAgICAgICByZXN1bHQudHlwZSA9ICdvYmplY3QnO1xuICAgICAgICAvLyBSZWNvcmQgc2NoZW1hcyBoYXZlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHZhbHVlU2NoZW1hID0gc2NoZW1hLnZhbHVlU2NoZW1hO1xuICAgICAgICBpZiAodmFsdWVTY2hlbWEpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hZGRpdGlvbmFsUHJvcGVydGllcyA9IHRvSlNPTlNjaGVtYSh2YWx1ZVNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gVW5rbm93bi9BbnkgdHlwZXMgLSBhY2NlcHQgYW55dGhpbmdcbiAgICBpZiAoaXNTY2hlbWFUeXBlKHNjaGVtYSwgJ1Vua25vd25TY2hlbWEnKSB8fCBpc1NjaGVtYVR5cGUoc2NoZW1hLCAnQW55U2NoZW1hJykpIHtcbiAgICAgICAgLy8gUmV0dXJuIGVtcHR5IHNjaGVtYSAoYWNjZXB0cyBhbnkgdmFsdWUgaW4gSlNPTiBTY2hlbWEpXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIENvZXJjZSBkYXRlIC0gcmVwcmVzZW50ZWQgYXMgc3RyaW5nIGluIEpTT04gU2NoZW1hXG4gICAgaWYgKGlzU2NoZW1hVHlwZShzY2hlbWEsICdDb2VyY2VEYXRlU2NoZW1hJykpIHtcbiAgICAgICAgcmVzdWx0LnR5cGUgPSAnc3RyaW5nJztcbiAgICAgICAgcmVzdWx0LmZvcm1hdCA9ICdkYXRlLXRpbWUnO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayBmb3IgdW5rbm93biBzY2hlbWEgdHlwZXNcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgSlNPTiBTY2hlbWEgb2JqZWN0IHRvIGEgc2NoZW1hLlxuICogU3VwcG9ydHMgcm91bmQtdHJpcCBjb252ZXJzaW9uIHdpdGggdG9KU09OU2NoZW1hLlxuICpcbiAqIEBwYXJhbSBqc29uU2NoZW1hIC0gVGhlIEpTT04gU2NoZW1hIG9iamVjdCB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBTY2hlbWEgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QganNvblNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ29iamVjdCcsXG4gKiAgIHByb3BlcnRpZXM6IHtcbiAqICAgICBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gKiAgICAgYWdlOiB7IHR5cGU6ICdudW1iZXInIH1cbiAqICAgfSxcbiAqICAgcmVxdWlyZWQ6IFsnbmFtZScsICdhZ2UnXVxuICogfTtcbiAqXG4gKiBjb25zdCBzY2hlbWEgPSBzLmZyb21KU09OU2NoZW1hKGpzb25TY2hlbWEpO1xuICogY29uc3QgdXNlciA9IHNjaGVtYS5wYXJzZSh7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUpTT05TY2hlbWEoanNvblNjaGVtYSkge1xuICAgIC8vIEhhbmRsZSBjb25zdCAobGl0ZXJhbCB2YWx1ZXMpXG4gICAgaWYgKGpzb25TY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBsaXRlcmFsKGpzb25TY2hlbWEuY29uc3QpO1xuICAgICAgICBpZiAoanNvblNjaGVtYS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBhbnlPZiAodW5pb24gb3IgbnVsbGFibGUpXG4gICAgaWYgKGpzb25TY2hlbWEuYW55T2YgJiYgQXJyYXkuaXNBcnJheShqc29uU2NoZW1hLmFueU9mKSkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbnVsbGFibGUgcGF0dGVybiAoYW55T2Ygd2l0aCBvbmUgc2NoZW1hIGFuZCBvbmUgbnVsbClcbiAgICAgICAgaWYgKGpzb25TY2hlbWEuYW55T2YubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBudWxsSW5kZXggPSBqc29uU2NoZW1hLmFueU9mLmZpbmRJbmRleCgocykgPT4gcy50eXBlID09PSAnbnVsbCcpO1xuICAgICAgICAgICAgaWYgKG51bGxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlckluZGV4ID0gbnVsbEluZGV4ID09PSAwID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJTY2hlbWEgPSBmcm9tSlNPTlNjaGVtYShqc29uU2NoZW1hLmFueU9mW290aGVySW5kZXhdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBudWxsYWJsZShpbm5lclNjaGVtYSk7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSB0cmVhdCBhcyB1bmlvblxuICAgICAgICBjb25zdCBzY2hlbWFzID0ganNvblNjaGVtYS5hbnlPZi5tYXAoKHMpID0+IGZyb21KU09OU2NoZW1hKHMpKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdW5pb24oLi4uc2NoZW1hcyk7XG4gICAgICAgIGlmIChqc29uU2NoZW1hLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzY2hlbWEuZGVzY3JpYmUoanNvblNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG9uZU9mICh1bmlvbilcbiAgICBpZiAoanNvblNjaGVtYS5vbmVPZiAmJiBBcnJheS5pc0FycmF5KGpzb25TY2hlbWEub25lT2YpKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYXMgPSBqc29uU2NoZW1hLm9uZU9mLm1hcCgocykgPT4gZnJvbUpTT05TY2hlbWEocykpO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB1bmlvbiguLi5zY2hlbWFzKTtcbiAgICAgICAgaWYgKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHNjaGVtYS5kZXNjcmliZShqc29uU2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgZW51bSAodW5pb24gb2YgbGl0ZXJhbHMpXG4gICAgaWYgKGpzb25TY2hlbWEuZW51bSAmJiBBcnJheS5pc0FycmF5KGpzb25TY2hlbWEuZW51bSkpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hcyA9IGpzb25TY2hlbWEuZW51bS5tYXAoKHZhbHVlKSA9PiBsaXRlcmFsKHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHVuaW9uKC4uLnNjaGVtYXMpO1xuICAgICAgICBpZiAoanNvblNjaGVtYS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBwcmltaXRpdmUgdHlwZXNcbiAgICBzd2l0Y2ggKGpzb25TY2hlbWEudHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOiB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChqc29uU2NoZW1hLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBjYXNlICdpbnRlZ2VyJzoge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gbnVtYmVyKCk7XG4gICAgICAgICAgICBpZiAoanNvblNjaGVtYS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHNjaGVtYS5kZXNjcmliZShqc29uU2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGJvb2xlYW4oKTtcbiAgICAgICAgICAgIGlmIChqc29uU2NoZW1hLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdudWxsJzoge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gbnVsbF8oKTtcbiAgICAgICAgICAgIGlmIChqc29uU2NoZW1hLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgICAgIGlmICghanNvblNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgdHlwZSBtdXN0IGhhdmUgaXRlbXMgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1TY2hlbWEgPSBmcm9tSlNPTlNjaGVtYShqc29uU2NoZW1hLml0ZW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGFycmF5KGl0ZW1TY2hlbWEpO1xuICAgICAgICAgICAgaWYgKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBzY2hlbWEuZGVzY3JpYmUoanNvblNjaGVtYS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgICAgICAgIGlmICghanNvblNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgb2JqZWN0IHNjaGVtYVxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IG9iamVjdCh7fSk7XG4gICAgICAgICAgICAgICAgaWYgKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmRlc2NyaWJlKGpzb25TY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gbmV3IFNldChqc29uU2NoZW1hLnJlcXVpcmVkIHx8IFtdKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoanNvblNjaGVtYS5wcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZFNjaGVtYSA9IGZyb21KU09OU2NoZW1hKHByb3BTY2hlbWEpO1xuICAgICAgICAgICAgICAgIC8vIElmIGZpZWxkIGlzIG5vdCBpbiByZXF1aXJlZCBhcnJheSwgbWFrZSBpdCBvcHRpb25hbFxuICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZWRGaWVsZHMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSBvcHRpb25hbChmaWVsZFNjaGVtYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSBmaWVsZFNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IG9iamVjdChzaGFwZSk7XG4gICAgICAgICAgICBpZiAoanNvblNjaGVtYS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHNjaGVtYS5kZXNjcmliZShqc29uU2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gSWYgbm8gdHlwZSBpcyBzcGVjaWZpZWQsIHRyeSB0byBpbmZlciBmcm9tIG90aGVyIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChqc29uU2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmVhdCBhcyBvYmplY3RcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJvbUpTT05TY2hlbWEoeyAuLi5qc29uU2NoZW1hLCB0eXBlOiAnb2JqZWN0JyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqc29uU2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJlYXQgYXMgYXJyYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJvbUpTT05TY2hlbWEoeyAuLi5qc29uU2NoZW1hLCB0eXBlOiAnYXJyYXknIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc3RyaW5nIHNjaGVtYSBmb3IgdW5yZWNvZ25pemVkL3VudHlwZWQgSlNPTiBTY2hlbWFcbiAgICAgICAgICAgIC8vIFRoaXMgcHJvdmlkZXMgYSBwZXJtaXNzaXZlIGRlZmF1bHQgYnV0IG1heSBtYXNrIHNjaGVtYSBpc3N1ZXNcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzb24tc2NoZW1hLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc3VjY2VzcywgY3JlYXRlUGFyc2VNZXRob2RzLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICcuLi91dGlscy9vcHRpb25hbCc7XG5pbXBvcnQgeyBudWxsYWJsZSB9IGZyb20gJy4uL3V0aWxzL251bGxhYmxlJztcbmNvbnN0IHBhcnNlTWV0aG9kcyA9IGNyZWF0ZVBhcnNlTWV0aG9kcygpO1xuLyoqXG4gKiBTY2hlbWEgdGhhdCBjb2VyY2VzIGFueSB2YWx1ZSB0byBhIHN0cmluZyB1c2luZyBTdHJpbmcodmFsdWUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLmNvZXJjZS5zdHJpbmcoKTtcbiAqIHNjaGVtYS5wYXJzZSgxMjMpOyAvLyAnMTIzJ1xuICogc2NoZW1hLnBhcnNlKHRydWUpOyAvLyAndHJ1ZSdcbiAqIHNjaGVtYS5wYXJzZShudWxsKTsgLy8gJ251bGwnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvZXJjZVN0cmluZ1NjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdDb2VyY2VTdHJpbmdTY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdG8gc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gc3VjY2VzcyhTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZXM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwodGhpcyk7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gbnVsbGFibGUodGhpcyk7XG4gICAgfVxuICAgIHBhcnNlID0gcGFyc2VNZXRob2RzLnBhcnNlO1xuICAgIHNhZmVQYXJzZSA9IHBhcnNlTWV0aG9kcy5zYWZlUGFyc2U7XG59XG4vKipcbiAqIENyZWF0ZSBhIHNjaGVtYSB0aGF0IGNvZXJjZXMgdmFsdWVzIHRvIHN0cmluZ3MuXG4gKiBVc2VmdWwgZm9yIHBhcnNpbmcgZm9ybSBkYXRhIG9yIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VTdHJpbmcoKSB7XG4gICAgcmV0dXJuIG5ldyBDb2VyY2VTdHJpbmdTY2hlbWEoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZy5qcy5tYXAiLAogICAgImltcG9ydCB7IGNyZWF0ZUlzc3VlLCBmYWlsdXJlLCBzdWNjZXNzLCBjcmVhdGVQYXJzZU1ldGhvZHMsIFNDSEVNQV9LSU5EIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJy4uL3V0aWxzL29wdGlvbmFsJztcbmltcG9ydCB7IG51bGxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvbnVsbGFibGUnO1xuY29uc3QgcGFyc2VNZXRob2RzID0gY3JlYXRlUGFyc2VNZXRob2RzKCk7XG4vKipcbiAqIFNjaGVtYSB0aGF0IGNvZXJjZXMgdmFsdWVzIHRvIG51bWJlcnMgdXNpbmcgTnVtYmVyKHZhbHVlKS5cbiAqIEZhaWxzIGlmIHRoZSByZXN1bHQgaXMgTmFOLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLmNvZXJjZS5udW1iZXIoKTtcbiAqIHNjaGVtYS5wYXJzZSgnMTIzJyk7IC8vIDEyM1xuICogc2NoZW1hLnBhcnNlKHRydWUpOyAvLyAxXG4gKiBzY2hlbWEucGFyc2UoJ2FiYycpOyAvLyB0aHJvd3MgVmFsaWRhdGlvbkVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvZXJjZU51bWJlclNjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdDb2VyY2VOdW1iZXJTY2hlbWEnO1xuICAgIGRlc2NyaXB0aW9uO1xuICAgICd+c3RhbmRhcmQnID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICB2ZW5kb3I6ICdhZ2VudHVpdHknLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBBbHJlYWR5IGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKFtjcmVhdGVJc3N1ZSgnQ2Fubm90IGNvZXJjZSBOYU4gdG8gbnVtYmVyJyldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3ModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ29lcmNlIHRvIG51bWJlclxuICAgICAgICAgICAgY29uc3QgY29lcmNlZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGNvZXJjZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoW2NyZWF0ZUlzc3VlKGBDYW5ub3QgY29lcmNlICR7dHlwZW9mIHZhbHVlfSB0byBudW1iZXJgKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29lcmNlZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgIH1cbiAgICBwYXJzZSA9IHBhcnNlTWV0aG9kcy5wYXJzZTtcbiAgICBzYWZlUGFyc2UgPSBwYXJzZU1ldGhvZHMuc2FmZVBhcnNlO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBzY2hlbWEgdGhhdCBjb2VyY2VzIHZhbHVlcyB0byBudW1iZXJzLlxuICogVXNlZnVsIGZvciBwYXJzaW5nIGZvcm0gZGF0YSBvciBxdWVyeSBwYXJhbWV0ZXJzIHdoZXJlIG51bWJlcnMgY29tZSBhcyBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlTnVtYmVyKCkge1xuICAgIHJldHVybiBuZXcgQ29lcmNlTnVtYmVyU2NoZW1hKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1iZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBzdWNjZXNzLCBjcmVhdGVQYXJzZU1ldGhvZHMsIFNDSEVNQV9LSU5EIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJy4uL3V0aWxzL29wdGlvbmFsJztcbmltcG9ydCB7IG51bGxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvbnVsbGFibGUnO1xuY29uc3QgcGFyc2VNZXRob2RzID0gY3JlYXRlUGFyc2VNZXRob2RzKCk7XG4vKipcbiAqIFNjaGVtYSB0aGF0IGNvZXJjZXMgdmFsdWVzIHRvIGJvb2xlYW5zIHVzaW5nIEJvb2xlYW4odmFsdWUpLlxuICogVXNlcyBKYXZhU2NyaXB0IHRydXRoeS9mYWxzeSBydWxlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2NoZW1hID0gcy5jb2VyY2UuYm9vbGVhbigpO1xuICogc2NoZW1hLnBhcnNlKDEpOyAvLyB0cnVlXG4gKiBzY2hlbWEucGFyc2UoMCk7IC8vIGZhbHNlXG4gKiBzY2hlbWEucGFyc2UoJycpOyAvLyBmYWxzZVxuICogc2NoZW1hLnBhcnNlKCdoZWxsbycpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvZXJjZUJvb2xlYW5TY2hlbWEge1xuICAgIFtTQ0hFTUFfS0lORF0gPSAnQ29lcmNlQm9vbGVhblNjaGVtYSc7XG4gICAgZGVzY3JpcHRpb247XG4gICAgJ35zdGFuZGFyZCcgPSB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHZlbmRvcjogJ2FnZW50dWl0eScsXG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0byBib29sZWFuIHVzaW5nIEphdmFTY3JpcHQgdHJ1dGhpbmVzcyBydWxlc1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoQm9vbGVhbih2YWx1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlczogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25hbCh0aGlzKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBudWxsYWJsZSh0aGlzKTtcbiAgICB9XG4gICAgcGFyc2UgPSBwYXJzZU1ldGhvZHMucGFyc2U7XG4gICAgc2FmZVBhcnNlID0gcGFyc2VNZXRob2RzLnNhZmVQYXJzZTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc2NoZW1hIHRoYXQgY29lcmNlcyB2YWx1ZXMgdG8gYm9vbGVhbnMuXG4gKiBVc2VmdWwgZm9yIHBhcnNpbmcgY2hlY2tib3hlcyBvciBib29sZWFuIGZsYWdzIGZyb20gc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZXJjZUJvb2xlYW4oKSB7XG4gICAgcmV0dXJuIG5ldyBDb2VyY2VCb29sZWFuU2NoZW1hKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib29sZWFuLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlSXNzdWUsIGZhaWx1cmUsIHN1Y2Nlc3MsIGNyZWF0ZVBhcnNlTWV0aG9kcywgU0NIRU1BX0tJTkQgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnLi4vdXRpbHMvb3B0aW9uYWwnO1xuaW1wb3J0IHsgbnVsbGFibGUgfSBmcm9tICcuLi91dGlscy9udWxsYWJsZSc7XG5jb25zdCBwYXJzZU1ldGhvZHMgPSBjcmVhdGVQYXJzZU1ldGhvZHMoKTtcbi8qKlxuICogU2NoZW1hIHRoYXQgY29lcmNlcyB2YWx1ZXMgdG8gRGF0ZSBvYmplY3RzIHVzaW5nIG5ldyBEYXRlKHZhbHVlKS5cbiAqIEZhaWxzIGlmIHRoZSByZXN1bHQgaXMgYW4gaW52YWxpZCBkYXRlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzY2hlbWEgPSBzLmNvZXJjZS5kYXRlKCk7XG4gKiBzY2hlbWEucGFyc2UoJzIwMjUtMDEtMDEnKTsgLy8gRGF0ZSBvYmplY3RcbiAqIHNjaGVtYS5wYXJzZSgxNjA5NDU5MjAwMDAwKTsgLy8gRGF0ZSBmcm9tIHRpbWVzdGFtcFxuICogc2NoZW1hLnBhcnNlKCdpbnZhbGlkJyk7IC8vIHRocm93cyBWYWxpZGF0aW9uRXJyb3JcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29lcmNlRGF0ZVNjaGVtYSB7XG4gICAgW1NDSEVNQV9LSU5EXSA9ICdDb2VyY2VEYXRlU2NoZW1hJztcbiAgICBkZXNjcmlwdGlvbjtcbiAgICAnfnN0YW5kYXJkJyA9IHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgdmVuZG9yOiAnYWdlbnR1aXR5JyxcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gQWxyZWFkeSBhIERhdGVcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoJ0ludmFsaWQgZGF0ZScpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvZXJjZSB0byBEYXRlXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgY29uc3QgY29lcmNlZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc05hTihjb2VyY2VkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShbY3JlYXRlSXNzdWUoYENhbm5vdCBjb2VyY2UgJHt0eXBlb2YgdmFsdWV9IHRvIGRhdGVgKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29lcmNlZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgIH1cbiAgICBwYXJzZSA9IHBhcnNlTWV0aG9kcy5wYXJzZTtcbiAgICBzYWZlUGFyc2UgPSBwYXJzZU1ldGhvZHMuc2FmZVBhcnNlO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBzY2hlbWEgdGhhdCBjb2VyY2VzIHZhbHVlcyB0byBEYXRlIG9iamVjdHMuXG4gKiBVc2VmdWwgZm9yIHBhcnNpbmcgSVNPIGRhdGUgc3RyaW5ncyBvciB0aW1lc3RhbXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlRGF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IENvZXJjZURhdGVTY2hlbWEoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGUuanMubWFwIiwKICAgICJleHBvcnQgeyBjcmVhdGVJc3N1ZSwgc3VjY2VzcywgZmFpbHVyZSwgVmFsaWRhdGlvbkVycm9yLCBTQ0hFTUFfS0lORCB9IGZyb20gJy4vYmFzZSc7XG5leHBvcnQgeyBTdHJpbmdTY2hlbWEsIHN0cmluZyB9IGZyb20gJy4vcHJpbWl0aXZlcy9zdHJpbmcnO1xuZXhwb3J0IHsgTnVtYmVyU2NoZW1hLCBudW1iZXIgfSBmcm9tICcuL3ByaW1pdGl2ZXMvbnVtYmVyJztcbmV4cG9ydCB7IEJvb2xlYW5TY2hlbWEsIGJvb2xlYW4gfSBmcm9tICcuL3ByaW1pdGl2ZXMvYm9vbGVhbic7XG5leHBvcnQgeyBOdWxsU2NoZW1hLCBudWxsXyB9IGZyb20gJy4vcHJpbWl0aXZlcy9udWxsJztcbmV4cG9ydCB7IFVuZGVmaW5lZFNjaGVtYSwgdW5kZWZpbmVkXyB9IGZyb20gJy4vcHJpbWl0aXZlcy91bmRlZmluZWQnO1xuZXhwb3J0IHsgVW5rbm93blNjaGVtYSwgdW5rbm93biB9IGZyb20gJy4vcHJpbWl0aXZlcy91bmtub3duJztcbmV4cG9ydCB7IEFueVNjaGVtYSwgYW55IH0gZnJvbSAnLi9wcmltaXRpdmVzL2FueSc7XG5leHBvcnQgeyBPYmplY3RTY2hlbWEsIG9iamVjdCB9IGZyb20gJy4vY29tcGxleC9vYmplY3QnO1xuZXhwb3J0IHsgQXJyYXlTY2hlbWEsIGFycmF5IH0gZnJvbSAnLi9jb21wbGV4L2FycmF5JztcbmV4cG9ydCB7IFJlY29yZFNjaGVtYSwgcmVjb3JkIH0gZnJvbSAnLi9jb21wbGV4L3JlY29yZCc7XG5leHBvcnQgeyBMaXRlcmFsU2NoZW1hLCBsaXRlcmFsIH0gZnJvbSAnLi91dGlscy9saXRlcmFsJztcbmV4cG9ydCB7IE9wdGlvbmFsU2NoZW1hLCBvcHRpb25hbCB9IGZyb20gJy4vdXRpbHMvb3B0aW9uYWwnO1xuZXhwb3J0IHsgTnVsbGFibGVTY2hlbWEsIG51bGxhYmxlIH0gZnJvbSAnLi91dGlscy9udWxsYWJsZSc7XG5leHBvcnQgeyBVbmlvblNjaGVtYSwgdW5pb24gfSBmcm9tICcuL3V0aWxzL3VuaW9uJztcbmV4cG9ydCB7IHRvSlNPTlNjaGVtYSwgZnJvbUpTT05TY2hlbWEgfSBmcm9tICcuL2pzb24tc2NoZW1hJztcbmV4cG9ydCB7IENvZXJjZVN0cmluZ1NjaGVtYSwgY29lcmNlU3RyaW5nIH0gZnJvbSAnLi9jb2VyY2Uvc3RyaW5nJztcbmV4cG9ydCB7IENvZXJjZU51bWJlclNjaGVtYSwgY29lcmNlTnVtYmVyIH0gZnJvbSAnLi9jb2VyY2UvbnVtYmVyJztcbmV4cG9ydCB7IENvZXJjZUJvb2xlYW5TY2hlbWEsIGNvZXJjZUJvb2xlYW4gfSBmcm9tICcuL2NvZXJjZS9ib29sZWFuJztcbmV4cG9ydCB7IENvZXJjZURhdGVTY2hlbWEsIGNvZXJjZURhdGUgfSBmcm9tICcuL2NvZXJjZS9kYXRlJztcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gJy4vcHJpbWl0aXZlcy9zdHJpbmcnO1xuaW1wb3J0IHsgbnVtYmVyIH0gZnJvbSAnLi9wcmltaXRpdmVzL251bWJlcic7XG5pbXBvcnQgeyBib29sZWFuIH0gZnJvbSAnLi9wcmltaXRpdmVzL2Jvb2xlYW4nO1xuaW1wb3J0IHsgbnVsbF8gfSBmcm9tICcuL3ByaW1pdGl2ZXMvbnVsbCc7XG5pbXBvcnQgeyB1bmRlZmluZWRfIH0gZnJvbSAnLi9wcmltaXRpdmVzL3VuZGVmaW5lZCc7XG5pbXBvcnQgeyB1bmtub3duIH0gZnJvbSAnLi9wcmltaXRpdmVzL3Vua25vd24nO1xuaW1wb3J0IHsgYW55IH0gZnJvbSAnLi9wcmltaXRpdmVzL2FueSc7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tICcuL2NvbXBsZXgvb2JqZWN0JztcbmltcG9ydCB7IGFycmF5IH0gZnJvbSAnLi9jb21wbGV4L2FycmF5JztcbmltcG9ydCB7IHJlY29yZCB9IGZyb20gJy4vY29tcGxleC9yZWNvcmQnO1xuaW1wb3J0IHsgbGl0ZXJhbCB9IGZyb20gJy4vdXRpbHMvbGl0ZXJhbCc7XG5pbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJy4vdXRpbHMvb3B0aW9uYWwnO1xuaW1wb3J0IHsgbnVsbGFibGUgfSBmcm9tICcuL3V0aWxzL251bGxhYmxlJztcbmltcG9ydCB7IHVuaW9uIH0gZnJvbSAnLi91dGlscy91bmlvbic7XG5pbXBvcnQgeyB0b0pTT05TY2hlbWEsIGZyb21KU09OU2NoZW1hIH0gZnJvbSAnLi9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBjb2VyY2VTdHJpbmcgfSBmcm9tICcuL2NvZXJjZS9zdHJpbmcnO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyIH0gZnJvbSAnLi9jb2VyY2UvbnVtYmVyJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW4gfSBmcm9tICcuL2NvZXJjZS9ib29sZWFuJztcbmltcG9ydCB7IGNvZXJjZURhdGUgfSBmcm9tICcuL2NvZXJjZS9kYXRlJztcbi8qKlxuICogQ3JlYXRlIGFuIGVudW0gc2NoZW1hICh1bmlvbiBvZiBsaXRlcmFsIHZhbHVlcykuXG4gKiBTaG9ydGhhbmQgZm9yIGNyZWF0aW5nIGEgdW5pb24gb2YgbGl0ZXJhbHMuXG4gKlxuICogQHBhcmFtIHZhbHVlcyAtIEFycmF5IG9mIGxpdGVyYWwgdmFsdWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvbGVTY2hlbWEgPSBzLmVudW0oWydhZG1pbicsICd1c2VyJywgJ2d1ZXN0J10pO1xuICogY29uc3Qgcm9sZSA9IHJvbGVTY2hlbWEucGFyc2UoJ2FkbWluJyk7IC8vICdhZG1pbidcbiAqXG4gKiAvLyBFcXVpdmFsZW50IHRvOlxuICogcy51bmlvbihzLmxpdGVyYWwoJ2FkbWluJyksIHMubGl0ZXJhbCgndXNlcicpLCBzLmxpdGVyYWwoJ2d1ZXN0JykpXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZW51bVNjaGVtYSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gdW5pb24oLi4udmFsdWVzLm1hcCgodikgPT4gbGl0ZXJhbCh2KSkpO1xufVxuLyoqXG4gKiBNYWluIHNjaGVtYSBidWlsZGVyIG9iamVjdC5cbiAqIFByb3ZpZGVzIGFjY2VzcyB0byBhbGwgc2NoZW1hIHR5cGVzIGFuZCB1dGlsaXRpZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHMgfSBmcm9tICdAYWdlbnR1aXR5L3NjaGVtYSc7XG4gKlxuICogLy8gRGVmaW5lIGEgc2NoZW1hXG4gKiBjb25zdCBVc2VyID0gcy5vYmplY3Qoe1xuICogICBuYW1lOiBzLnN0cmluZygpLFxuICogICBhZ2U6IHMubnVtYmVyKCksXG4gKiAgIHJvbGU6IHMuZW51bShbJ2FkbWluJywgJ3VzZXInXSlcbiAqIH0pO1xuICpcbiAqIC8vIEV4dHJhY3QgdHlwZVxuICogdHlwZSBVc2VyID0gcy5pbmZlcjx0eXBlb2YgVXNlcj47XG4gKlxuICogLy8gUGFyc2UgZGF0YVxuICogY29uc3QgdXNlciA9IFVzZXIucGFyc2UoZGF0YSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHMgPSB7XG4gICAgLyoqIENyZWF0ZSBhIHN0cmluZyBzY2hlbWEgKi9cbiAgICBzdHJpbmcsXG4gICAgLyoqIENyZWF0ZSBhIG51bWJlciBzY2hlbWEgKi9cbiAgICBudW1iZXIsXG4gICAgLyoqIENyZWF0ZSBhIGJvb2xlYW4gc2NoZW1hICovXG4gICAgYm9vbGVhbixcbiAgICAvKiogQ3JlYXRlIGEgbnVsbCBzY2hlbWEgKi9cbiAgICBudWxsOiBudWxsXyxcbiAgICAvKiogQ3JlYXRlIGFuIHVuZGVmaW5lZCBzY2hlbWEgKi9cbiAgICB1bmRlZmluZWQ6IHVuZGVmaW5lZF8sXG4gICAgLyoqIENyZWF0ZSBhbiB1bmtub3duIHNjaGVtYSAoYWNjZXB0cyBhbnkgdmFsdWUpICovXG4gICAgdW5rbm93bixcbiAgICAvKiogQ3JlYXRlIGFuIGFueSBzY2hlbWEgKGFjY2VwdHMgYW55IHZhbHVlKSAqL1xuICAgIGFueSxcbiAgICAvKiogQ3JlYXRlIGFuIG9iamVjdCBzY2hlbWEgd2l0aCB0eXBlZCBwcm9wZXJ0aWVzICovXG4gICAgb2JqZWN0LFxuICAgIC8qKiBDcmVhdGUgYW4gYXJyYXkgc2NoZW1hIHdpdGggdHlwZWQgZWxlbWVudHMgKi9cbiAgICBhcnJheSxcbiAgICAvKiogQ3JlYXRlIGEgcmVjb3JkIHNjaGVtYSAob2JqZWN0IHdpdGggc3RyaW5nIGtleXMgYW5kIHR5cGVkIHZhbHVlcykgKi9cbiAgICByZWNvcmQsXG4gICAgLyoqIENyZWF0ZSBhIGxpdGVyYWwgdmFsdWUgc2NoZW1hICovXG4gICAgbGl0ZXJhbCxcbiAgICAvKiogTWFrZSBhIHNjaGVtYSBvcHRpb25hbCAoVCB8IHVuZGVmaW5lZCkgKi9cbiAgICBvcHRpb25hbCxcbiAgICAvKiogTWFrZSBhIHNjaGVtYSBudWxsYWJsZSAoVCB8IG51bGwpICovXG4gICAgbnVsbGFibGUsXG4gICAgLyoqIENyZWF0ZSBhIHVuaW9uIG9mIHNjaGVtYXMgKi9cbiAgICB1bmlvbixcbiAgICAvKiogQ3JlYXRlIGFuIGVudW0gc2NoZW1hICh1bmlvbiBvZiBsaXRlcmFscykgKi9cbiAgICBlbnVtOiBlbnVtU2NoZW1hLFxuICAgIC8qKiBDb252ZXJ0IHNjaGVtYSB0byBKU09OIFNjaGVtYSBmb3JtYXQgKi9cbiAgICB0b0pTT05TY2hlbWEsXG4gICAgLyoqIENvbnZlcnQgSlNPTiBTY2hlbWEgdG8gc2NoZW1hICovXG4gICAgZnJvbUpTT05TY2hlbWEsXG4gICAgLyoqIENvZXJjaW9uIHNjaGVtYXMgZm9yIHR5cGUgY29udmVyc2lvbiAqL1xuICAgIGNvZXJjZToge1xuICAgICAgICAvKiogQ29lcmNlIHRvIHN0cmluZyB1c2luZyBTdHJpbmcodmFsdWUpICovXG4gICAgICAgIHN0cmluZzogY29lcmNlU3RyaW5nLFxuICAgICAgICAvKiogQ29lcmNlIHRvIG51bWJlciB1c2luZyBOdW1iZXIodmFsdWUpICovXG4gICAgICAgIG51bWJlcjogY29lcmNlTnVtYmVyLFxuICAgICAgICAvKiogQ29lcmNlIHRvIGJvb2xlYW4gdXNpbmcgQm9vbGVhbih2YWx1ZSkgKi9cbiAgICAgICAgYm9vbGVhbjogY29lcmNlQm9vbGVhbixcbiAgICAgICAgLyoqIENvZXJjZSB0byBEYXRlIHVzaW5nIG5ldyBEYXRlKHZhbHVlKSAqL1xuICAgICAgICBkYXRlOiBjb2VyY2VEYXRlLFxuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHRvSlNPTlNjaGVtYSBhcyBhZ2VudHVpdHlUb0pTT05TY2hlbWEgfSBmcm9tICdAYWdlbnR1aXR5L3NjaGVtYSc7XG4vKipcbiAqIENvbnZlcnRzIGEgc2NoZW1hIHRvIEpTT04gU2NoZW1hIGZvcm1hdC5cbiAqIFN1cHBvcnRzIEFnZW50dWl0eSBzY2hlbWFzIChTdGFuZGFyZFNjaGVtYVYxKSBhbmQgWm9kIHNjaGVtYXMuXG4gKiBSZXR1cm5zIGVtcHR5IG9iamVjdCBmb3IgdW5rbm93biBzY2hlbWEgdHlwZXMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgdG9KU09OU2NoZW1hID0gKHNjaGVtYSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gQWdlbnR1aXR5IHNjaGVtYSB2aWEgU3RhbmRhcmRTY2hlbWFWMSB2ZW5kb3JcbiAgICBpZiAoc2NoZW1hPy5bJ35zdGFuZGFyZCddPy52ZW5kb3IgPT09ICdhZ2VudHVpdHknKSB7XG4gICAgICAgIHJldHVybiBhZ2VudHVpdHlUb0pTT05TY2hlbWEoc2NoZW1hKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIFpvZCBzY2hlbWFcbiAgICAvLyBab2QgMyB1c2VzIF9kZWYudHlwZU5hbWUgKGUuZy4sIFwiWm9kT2JqZWN0XCIpXG4gICAgLy8gWm9kIDQgdXNlcyBfZGVmLnR5cGUgKGUuZy4sIFwib2JqZWN0XCIpXG4gICAgaWYgKHNjaGVtYT8uX2RlZj8udHlwZU5hbWUgfHwgc2NoZW1hPy5fZGVmPy50eXBlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gei50b0pTT05TY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVW5rbm93biBzY2hlbWEgdHlwZVxuICAgIHJldHVybiB7fTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlbWEuanMubWFwIiwKICAgICIvKipcbiAqIFJ1bnRpbWUgZW52aXJvbm1lbnQgYm9vdHN0cmFwcGluZyB1dGlsaXR5XG4gKlxuICogU2ltcGxpZmllZCBib290c3RyYXAgdGhhdCBzZXRzIHVwIHNlcnZpY2UgVVJMcyBiYXNlZCBvbiBlbnZpcm9ubWVudC5cbiAqIERvZXMgbm90IGRlcGVuZCBvbiBDTEkgY29uZmlnIGZpbGVzIG9yIC5lbnYgZmlsZSBwYXJzaW5nLlxuICovXG5pbXBvcnQgeyBnZXRTZXJ2aWNlVXJscyB9IGZyb20gJy4vY29uZmlnJztcbi8qKlxuICogQm9vdHN0cmFwIHJ1bnRpbWUgZW52aXJvbm1lbnQgYnkgc2V0dGluZyBzZXJ2aWNlIFVSTHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbjpcbiAqIDEuIFNldHMgQUdFTlRVSVRZX1JFR0lPTj1sb2NhbCBmb3IgbG9jYWwvZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzXG4gKiAyLiBTZXRzIHNlcnZpY2UgVVJMcyBiYXNlZCBvbiBBR0VOVFVJVFlfUkVHSU9OXG4gKiAzLiBQcm9wYWdhdGVzIHByb2ZpbGUgbmFtZSB0byBlbnZpcm9ubWVudFxuICpcbiAqIE5vdGU6IFRoaXMgZG9lcyBOT1QgbG9hZCAuZW52IGZpbGVzLiBVc2UgYSBwcm9wZXIgLmVudiBsb2FkZXJcbiAqIChsaWtlIGRvdGVudikgaW4geW91ciBhcHAudHMgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAqXG4gKiBDYWxsIHRoaXMgQkVGT1JFIGNyZWF0ZUFwcCgpIGluIHlvdXIgYXBwLnRzOlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYm9vdHN0cmFwUnVudGltZUVudiB9IGZyb20gJ0BhZ2VudHVpdHkvc2VydmVyJztcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCB9IGZyb20gJ0BhZ2VudHVpdHkvcnVudGltZSc7XG4gKlxuICogLy8gU2V0IHVwIHNlcnZpY2UgVVJMc1xuICogYm9vdHN0cmFwUnVudGltZUVudigpO1xuICpcbiAqIC8vIE5vdyBjcmVhdGVBcHAoKSB3aWxsIHVzZSB0aGUgY29ycmVjdCBlbnYgdmFyc1xuICogY29uc3QgYXBwID0gYXdhaXQgY3JlYXRlQXBwKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFJ1bnRpbWVFbnYob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcHJvZmlsZSA9IG9wdGlvbnMucHJvZmlsZSB8fCBwcm9jZXNzLmVudi5BR0VOVFVJVFlfUFJPRklMRSB8fCAnbG9jYWwnO1xuICAgIC8vIEZvciBsb2NhbC9kZXZlbG9wbWVudCwgZGVmYXVsdCBBR0VOVFVJVFlfUkVHSU9OIHRvICdsb2NhbCdcbiAgICBpZiAoKHByb2ZpbGUgPT09ICdsb2NhbCcgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpICYmXG4gICAgICAgICFwcm9jZXNzLmVudi5BR0VOVFVJVFlfUkVHSU9OKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9SRUdJT04gPSAnbG9jYWwnO1xuICAgIH1cbiAgICAvLyBQcm9wYWdhdGUgcHJvZmlsZSBuYW1lIGludG8gZW52IGZvciBjb25zaXN0ZW5jeVxuICAgIGlmICghcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1BST0ZJTEUpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1BST0ZJTEUgPSBwcm9maWxlO1xuICAgIH1cbiAgICAvLyBTZXQgc2VydmljZSBVUkxzIGJhc2VkIG9uIHJlZ2lvblxuICAgIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9SRUdJT047XG4gICAgY29uc3Qgc2VydmljZVVybHMgPSBnZXRTZXJ2aWNlVXJscyhyZWdpb24pO1xuICAgIC8vIE9ubHkgc2V0IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQgKGVudiB2YXJzIGZyb20gc2hlbGwvQ0kgdGFrZSBwcmVjZWRlbmNlKVxuICAgIGlmICghcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1RSQU5TUE9SVF9VUkwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1RSQU5TUE9SVF9VUkwgPSBzZXJ2aWNlVXJscy5jYXRhbHlzdDtcbiAgICB9XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVFVJVFlfS0VZVkFMVUVfVVJMKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9LRVlWQUxVRV9VUkwgPSBzZXJ2aWNlVXJscy5rZXl2YWx1ZTtcbiAgICB9XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVFVJVFlfU0FOREJPWF9VUkwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NBTkRCT1hfVVJMID0gc2VydmljZVVybHMuc2FuZGJveDtcbiAgICB9XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVFVJVFlfU1RSRUFNX1VSTCkge1xuICAgICAgICBwcm9jZXNzLmVudi5BR0VOVFVJVFlfU1RSRUFNX1VSTCA9IHNlcnZpY2VVcmxzLnN0cmVhbTtcbiAgICB9XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVFVJVFlfVkVDVE9SX1VSTCkge1xuICAgICAgICBwcm9jZXNzLmVudi5BR0VOVFVJVFlfVkVDVE9SX1VSTCA9IHNlcnZpY2VVcmxzLnZlY3RvcjtcbiAgICB9XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0FUQUxZU1RfVVJMKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9DQVRBTFlTVF9VUkwgPSBzZXJ2aWNlVXJscy5jYXRhbHlzdDtcbiAgICB9XG4gICAgaWYgKCFwcm9jZXNzLmVudi5BR0VOVFVJVFlfT1RMUF9VUkwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX09UTFBfVVJMID0gc2VydmljZVVybHMub3RlbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydW50aW1lLWJvb3RzdHJhcC5qcy5tYXAiLAogICAgIi8vIGFwaSBleHBvcnRzIChmcm9tIGFwaS9pbmRleC50cyB3aGljaCBoYXMgYmFycmVsIGV4cG9ydHMpXG5leHBvcnQgKiBmcm9tICcuL2FwaSc7XG4vLyBjb25maWcudHMgZXhwb3J0c1xuZXhwb3J0IHsgZ2V0U2VydmljZVVybHMsIHJlc29sdmVSZWdpb24gfSBmcm9tICcuL2NvbmZpZyc7XG4vLyBsb2dnZXIudHMgZXhwb3J0c1xuZXhwb3J0IHsgQ29uc29sZUxvZ2dlciwgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuLy8gc2VydmVyLnRzIGV4cG9ydHNcbmV4cG9ydCB7IGNyZWF0ZVNlcnZlckZldGNoQWRhcHRlciB9IGZyb20gJy4vc2VydmVyJztcbi8vIHNjaGVtYS50cyBleHBvcnRzXG5leHBvcnQgeyB0b0pTT05TY2hlbWEgfSBmcm9tICcuL3NjaGVtYSc7XG4vLyBydW50aW1lLWJvb3RzdHJhcC50cyBleHBvcnRzXG5leHBvcnQgeyBib290c3RyYXBSdW50aW1lRW52IH0gZnJvbSAnLi9ydW50aW1lLWJvb3RzdHJhcCc7XG4vLyB6b2QgcmUtZXhwb3J0XG5leHBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmV4cG9ydCB7IGJ1aWxkVXJsLCB0b1NlcnZpY2VFeGNlcHRpb24sIHRvUGF5bG9hZCwgZnJvbVJlc3BvbnNlIH0gZnJvbSAnQGFnZW50dWl0eS9jb3JlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgc2FuZGJveENyZWF0ZSwgc2FuZGJveERlc3Ryb3ksIHNhbmRib3hFeGVjdXRlLCBzYW5kYm94R2V0LCBzYW5kYm94TGlzdCwgc2FuZGJveFJ1biwgc2FuZGJveFdyaXRlRmlsZXMsIHNhbmRib3hSZWFkRmlsZSwgfSBmcm9tICdAYWdlbnR1aXR5L3NlcnZlcic7XG5pbXBvcnQgeyBjb250ZXh0LCBTcGFuS2luZCwgU3BhblN0YXR1c0NvZGUsIHRyYWNlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmNvbnN0IFRSQUNFUl9OQU1FID0gJ2FnZW50dWl0eS5zYW5kYm94JztcbmFzeW5jIGZ1bmN0aW9uIHdpdGhTcGFuKG5hbWUsIGF0dHJpYnV0ZXMsIGZuKSB7XG4gICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFRSQUNFUl9OQU1FKTtcbiAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4obmFtZSwgeyBhdHRyaWJ1dGVzLCBraW5kOiBTcGFuS2luZC5DTElFTlQgfSwgY3VycmVudENvbnRleHQpO1xuICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gdHJhY2Uuc2V0U3BhbihjdXJyZW50Q29udGV4dCwgc3Bhbik7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udGV4dC53aXRoKHNwYW5Db250ZXh0LCBmbik7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZSA9IGVycjtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZSk7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGU/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycikgfSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlU3RyZWFtUmVhZGVyKGlkLCBiYXNlVXJsKSB7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSBpZCA/PyAnJztcbiAgICBjb25zdCB1cmwgPSBzdHJlYW1JZCA/IGAke2Jhc2VVcmx9LyR7c3RyZWFtSWR9YCA6ICcnO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBzdHJlYW1JZCxcbiAgICAgICAgdXJsLFxuICAgICAgICByZWFkb25seTogdHJ1ZSxcbiAgICAgICAgZ2V0UmVhZGVyKCkge1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICAgICAgYXN5bmMgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vayB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlU2FuZGJveEluc3RhbmNlKGNsaWVudCwgc2FuZGJveElkLCBzdGF0dXMsIHN0cmVhbUJhc2VVcmwsIHN0ZG91dFN0cmVhbUlkLCBzdGRlcnJTdHJlYW1JZCkge1xuICAgIGNvbnN0IGludGVybGVhdmVkID0gISEoc3Rkb3V0U3RyZWFtSWQgJiYgc3RkZXJyU3RyZWFtSWQgJiYgc3Rkb3V0U3RyZWFtSWQgPT09IHN0ZGVyclN0cmVhbUlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogc2FuZGJveElkLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHN0ZG91dDogY3JlYXRlU3RyZWFtUmVhZGVyKHN0ZG91dFN0cmVhbUlkLCBzdHJlYW1CYXNlVXJsKSxcbiAgICAgICAgc3RkZXJyOiBjcmVhdGVTdHJlYW1SZWFkZXIoc3RkZXJyU3RyZWFtSWQsIHN0cmVhbUJhc2VVcmwpLFxuICAgICAgICBpbnRlcmxlYXZlZCxcbiAgICAgICAgYXN5bmMgZXhlY3V0ZShvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aFNwYW4oJ2FnZW50dWl0eS5zYW5kYm94LmV4ZWN1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ3NhbmRib3guaWQnOiBzYW5kYm94SWQsXG4gICAgICAgICAgICAgICAgJ3NhbmRib3guY29tbWFuZCc6IG9wdGlvbnMuY29tbWFuZD8uam9pbignICcpID8/ICcnLFxuICAgICAgICAgICAgfSwgKCkgPT4gc2FuZGJveEV4ZWN1dGUoY2xpZW50LCB7IHNhbmRib3hJZCwgb3B0aW9ucywgc2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIHdyaXRlRmlsZXMoZmlsZXMpIHtcbiAgICAgICAgICAgIGF3YWl0IHdpdGhTcGFuKCdhZ2VudHVpdHkuc2FuZGJveC53cml0ZUZpbGVzJywge1xuICAgICAgICAgICAgICAgICdzYW5kYm94LmlkJzogc2FuZGJveElkLFxuICAgICAgICAgICAgICAgICdzYW5kYm94LmZpbGVzLmNvdW50JzogZmlsZXMubGVuZ3RoLFxuICAgICAgICAgICAgfSwgKCkgPT4gc2FuZGJveFdyaXRlRmlsZXMoY2xpZW50LCB7IHNhbmRib3hJZCwgZmlsZXMgfSkpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyByZWFkRmlsZShwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aFNwYW4oJ2FnZW50dWl0eS5zYW5kYm94LnJlYWRGaWxlJywge1xuICAgICAgICAgICAgICAgICdzYW5kYm94LmlkJzogc2FuZGJveElkLFxuICAgICAgICAgICAgICAgICdzYW5kYm94LmZpbGUucGF0aCc6IHBhdGgsXG4gICAgICAgICAgICB9LCAoKSA9PiBzYW5kYm94UmVhZEZpbGUoY2xpZW50LCB7IHNhbmRib3hJZCwgcGF0aCB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBhd2FpdCB3aXRoU3BhbignYWdlbnR1aXR5LnNhbmRib3guZGVzdHJveScsIHsgJ3NhbmRib3guaWQnOiBzYW5kYm94SWQgfSwgKCkgPT4gc2FuZGJveERlc3Ryb3koY2xpZW50LCB7IHNhbmRib3hJZCB9KSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydCBjbGFzcyBIVFRQU2FuZGJveFNlcnZpY2Uge1xuICAgIGNsaWVudDtcbiAgICBzdHJlYW1CYXNlVXJsO1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCwgc3RyZWFtQmFzZVVybCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICAgICAgdGhpcy5zdHJlYW1CYXNlVXJsID0gc3RyZWFtQmFzZVVybDtcbiAgICB9XG4gICAgYXN5bmMgcnVuKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhTcGFuKCdhZ2VudHVpdHkuc2FuZGJveC5ydW4nLCB7XG4gICAgICAgICAgICAnc2FuZGJveC5jb21tYW5kJzogb3B0aW9ucy5jb21tYW5kPy5leGVjPy5qb2luKCcgJykgPz8gJycsXG4gICAgICAgICAgICAnc2FuZGJveC5tb2RlJzogJ29uZXNob3QnLFxuICAgICAgICB9LCAoKSA9PiBzYW5kYm94UnVuKHRoaXMuY2xpZW50LCB7IG9wdGlvbnMgfSkpO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gd2l0aFNwYW4oJ2FnZW50dWl0eS5zYW5kYm94LmNyZWF0ZScsIHtcbiAgICAgICAgICAgICdzYW5kYm94Lm5ldHdvcmsnOiBvcHRpb25zPy5uZXR3b3JrPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICAgICAgJ3NhbmRib3guc25hcHNob3QnOiBvcHRpb25zPy5zbmFwc2hvdCA/PyAnJyxcbiAgICAgICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzYW5kYm94Q3JlYXRlKHRoaXMuY2xpZW50LCB7IG9wdGlvbnMgfSk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlU2FuZGJveEluc3RhbmNlKHRoaXMuY2xpZW50LCByZXNwb25zZS5zYW5kYm94SWQsIHJlc3BvbnNlLnN0YXR1cywgdGhpcy5zdHJlYW1CYXNlVXJsLCByZXNwb25zZS5zdGRvdXRTdHJlYW1JZCwgcmVzcG9uc2Uuc3RkZXJyU3RyZWFtSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0KHNhbmRib3hJZCkge1xuICAgICAgICByZXR1cm4gd2l0aFNwYW4oJ2FnZW50dWl0eS5zYW5kYm94LmdldCcsIHsgJ3NhbmRib3guaWQnOiBzYW5kYm94SWQgfSwgKCkgPT4gc2FuZGJveEdldCh0aGlzLmNsaWVudCwgeyBzYW5kYm94SWQgfSkpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0KHBhcmFtcykge1xuICAgICAgICByZXR1cm4gd2l0aFNwYW4oJ2FnZW50dWl0eS5zYW5kYm94Lmxpc3QnLCB7XG4gICAgICAgICAgICAnc2FuZGJveC5zdGF0dXMnOiBwYXJhbXM/LnN0YXR1cyA/PyAnJyxcbiAgICAgICAgICAgICdzYW5kYm94LmxpbWl0JzogcGFyYW1zPy5saW1pdCA/PyA1MCxcbiAgICAgICAgfSwgKCkgPT4gc2FuZGJveExpc3QodGhpcy5jbGllbnQsIHBhcmFtcykpO1xuICAgIH1cbiAgICBhc3luYyBkZXN0cm95KHNhbmRib3hJZCkge1xuICAgICAgICByZXR1cm4gd2l0aFNwYW4oJ2FnZW50dWl0eS5zYW5kYm94LmRlc3Ryb3knLCB7ICdzYW5kYm94LmlkJzogc2FuZGJveElkIH0sICgpID0+IHNhbmRib3hEZXN0cm95KHRoaXMuY2xpZW50LCB7IHNhbmRib3hJZCB9KSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cC5qcy5tYXAiLAogICAgImV4cG9ydCB7IEhUVFBTYW5kYm94U2VydmljZSB9IGZyb20gJy4vaHR0cCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKlxuICogQSBjb21wb3NpdGUgaW1wbGVtZW50YXRpb24gb2YgU2Vzc2lvbkV2ZW50UHJvdmlkZXIgdGhhdCBmb3J3YXJkcyBldmVudHMgdG8gbXVsdGlwbGUgcHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVTZXNzaW9uRXZlbnRQcm92aWRlciB7XG4gICAgcHJvdmlkZXJzO1xuICAgIGNvbnN0cnVjdG9yKC4uLnByb3ZpZGVycykge1xuICAgICAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gc3RhcnRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgU2Vzc2lvblN0YXJ0RXZlbnRcbiAgICAgKi9cbiAgICBhc3luYyBzdGFydChldmVudCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnByb3ZpZGVycy5tYXAoKHApID0+IHAuc3RhcnQoZXZlbnQpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBzZXNzaW9uIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IFNlc3Npb25Db21wbGV0ZUV2ZW50XG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGUoZXZlbnQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wcm92aWRlcnMubWFwKChwKSA9PiBwLmNvbXBsZXRlKGV2ZW50KSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvc2l0ZS5qcy5tYXAiLAogICAgImltcG9ydCB7IGZvcm1hdFdpdGhPcHRpb25zLCBpbnNwZWN0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IHNhZmVTdHJpbmdpZnkgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29udGV4dFN0cmluZyhjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFN0ciA9IGNvbnRleHQgJiYgT2JqZWN0LmtleXMoY29udGV4dCkubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBPYmplY3QuZW50cmllcyhjb250ZXh0KVxuICAgICAgICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHNhZmVTdHJpbmdpZnkodmFsdWUpIDogdmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fT1bb2JqZWN0IE9iamVjdF1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgcmV0dXJuIGNvbnRleHRTdHI7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cbi8qKlxuICogRm9ybWF0cyBhIGxvZyBtZXNzYWdlIHdpdGggY29udGV4dFxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZm9ybWF0XG4gKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciBmb3JtYXR0aW5nXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIG1lc3NhZ2Ugd2l0aCBjb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShkaXNwbGF5Q29udGV4dCwgY29udGV4dCwgbWVzc2FnZSwgYXJncykge1xuICAgIC8vIEZvcm1hdCB0aGUgY29udGV4dCBzdHJpbmdcbiAgICBjb25zdCBjb250ZXh0U3RyID0gZGlzcGxheUNvbnRleHQgPyBidWlsZENvbnRleHRTdHJpbmcoY29udGV4dCkgOiBudWxsO1xuICAgIC8vIEZvcm1hdCB0aGUgbWVzc2FnZSBiYXNlZCBvbiBpdHMgdHlwZVxuICAgIGxldCBfbWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIF9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdudW1iZXInIHx8IHR5cGVvZiBtZXNzYWdlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX21lc3NhZ2UgPSBTdHJpbmcobWVzc2FnZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHtcbiAgICAgICAgX21lc3NhZ2UgPSAnbnVsbCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBfbWVzc2FnZSA9ICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVXNlIGluc3BlY3QgZm9yIG9iamVjdHMgZm9yIGJldHRlciBmb3JtYXR0aW5nXG4gICAgICAgIF9tZXNzYWdlID0gaW5zcGVjdChtZXNzYWdlLCB7IGRlcHRoOiBudWxsLCBjb2xvcnM6IGZhbHNlIH0pO1xuICAgIH1cbiAgICAvLyBGb3JtYXQgdGhlIG1lc3NhZ2Ugd2l0aCBhcmdzXG4gICAgbGV0IGZvcm1hdHRlZE1lc3NhZ2U7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gT25seSB1c2UgZm9ybWF0IGlmIHdlIGhhdmUgYXJndW1lbnRzXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZE1lc3NhZ2UgPSBmb3JtYXRXaXRoT3B0aW9ucyh7IGRlcHRoOiBudWxsIH0sIF9tZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZE1lc3NhZ2UgPSBfbWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIC8vIElmIGZvcm1hdHRpbmcgZmFpbHMsIHVzZSBhIHNpbXBsZSBjb25jYXRlbmF0aW9uXG4gICAgICAgIGZvcm1hdHRlZE1lc3NhZ2UgPSBgJHtfbWVzc2FnZX0gJHthcmdzXG4gICAgICAgICAgICAubWFwKChhcmcpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnID8gc2FmZVN0cmluZ2lmeShhcmcpIDogU3RyaW5nKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJyAnKX1gO1xuICAgIH1cbiAgICAvLyBDb21iaW5lIG1lc3NhZ2Ugd2l0aCBjb250ZXh0XG4gICAgcmV0dXJuIGAke2Zvcm1hdHRlZE1lc3NhZ2V9JHtjb250ZXh0U3RyID8gYCBbJHtjb250ZXh0U3RyfV1gIDogJyd9YDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBmb3JtYXRNZXNzYWdlIH0gZnJvbSAnLi91dGlsJztcbmNvbnN0IGN5YW4gPSAnXFx4MWJbMTs5Nm0nO1xuY29uc3QgcmVzZXQgPSAnXFx4MWJbMG0nO1xuLyoqXG4gKiBTaW1wbGUgaW50ZXJuYWwgbG9nZ2VyIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gb3RoZXIgU0RLIG1vZHVsZXNcbiAqIFRoaXMgbG9nZ2VyIGlzIG9ubHkgZm9yIFNESyBpbnRlcm5hbCBkaWFnbm9zdGljcyBhbmQgZGVidWdnaW5nXG4gKi9cbmNsYXNzIEludGVybmFsTG9nZ2VyIHtcbiAgICBjb25maWc7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5sb2FkQ29uZmlnKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAqL1xuICAgIGxvYWRDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IGVudkxldmVsID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NES19MT0dfTEVWRUw/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIFZhbGlkYXRlIGxvZyBsZXZlbFxuICAgICAgICBjb25zdCB2YWxpZExldmVscyA9IFsnZGVidWcnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ3NpbGVudCddO1xuICAgICAgICBjb25zdCBsZXZlbCA9IHZhbGlkTGV2ZWxzLmluY2x1ZGVzKGVudkxldmVsKSA/IGVudkxldmVsIDogJ3NpbGVudCc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAnQGFnZW50dWl0eS9zb3VyY2UnOiAnc2RrLWludGVybmFsJyxcbiAgICAgICAgICAgICAgICAnQGFnZW50dWl0eS90aW1lc3RhbXAnOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIGxvZyBsZXZlbCBzaG91bGQgYmUgb3V0cHV0IGJhc2VkIG9uIGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHNob3VsZExvZyhsZXZlbCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcubGV2ZWwgPT09ICdzaWxlbnQnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBsZXZlbFByaW9yaXR5ID0ge1xuICAgICAgICAgICAgZGVidWc6IDAsXG4gICAgICAgICAgICBpbmZvOiAxLFxuICAgICAgICAgICAgd2FybjogMixcbiAgICAgICAgICAgIGVycm9yOiAzLFxuICAgICAgICAgICAgc2lsZW50OiA0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbGV2ZWxQcmlvcml0eVtsZXZlbF0gPj0gbGV2ZWxQcmlvcml0eVt0aGlzLmNvbmZpZy5sZXZlbF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBhIGxvZyBtZXNzYWdlIHdpdGggY29udGV4dFxuICAgICAqL1xuICAgIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gZm9ybWF0TWVzc2FnZShmYWxzZSwgdGhpcy5jb25maWcuY29udGV4dCwgbWVzc2FnZSwgYXJncyk7XG4gICAgICAgIHJldHVybiBgJHtjeWFufVtJTlRFUk5BTF0ke3Jlc2V0fSAke2Zvcm1hdHRlZE1lc3NhZ2V9YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGEgZGVidWcgbWVzc2FnZVxuICAgICAqL1xuICAgIGRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkTG9nKCdkZWJ1ZycpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKHRoaXMuZm9ybWF0TWVzc2FnZShtZXNzYWdlLCAuLi5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGFuIGluZm8gbWVzc2FnZVxuICAgICAqL1xuICAgIGluZm8obWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRMb2coJ2luZm8nKSkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKHRoaXMuZm9ybWF0TWVzc2FnZShtZXNzYWdlLCAuLi5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGEgd2FybmluZyBtZXNzYWdlXG4gICAgICovXG4gICAgd2FybihtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZExvZygnd2FybicpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4odGhpcy5mb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIC4uLmFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgYW4gZXJyb3IgbWVzc2FnZVxuICAgICAqL1xuICAgIGVycm9yKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkTG9nKCdlcnJvcicpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuZm9ybWF0TWVzc2FnZShtZXNzYWdlLCAuLi5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gYXQgcnVudGltZVxuICAgICAqL1xuICAgIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuY29uZmlnLCAuLi5jb25maWcgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGdldENvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5jb25maWcgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgbG9nZ2luZyBpcyBlbmFibGVkXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcubGV2ZWwgIT09ICdzaWxlbnQnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjaGlsZCBsb2dnZXIgd2l0aCBhZGRpdGlvbmFsIGNvbnRleHRcbiAgICAgKi9cbiAgICBjaGlsZChjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTG9nZ2VyID0gbmV3IEludGVybmFsTG9nZ2VyKCk7XG4gICAgICAgIGNoaWxkTG9nZ2VyLnVwZGF0ZUNvbmZpZyh7XG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5jb250ZXh0LFxuICAgICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNoaWxkTG9nZ2VyO1xuICAgIH1cbn1cbi8vIFNpbmdsZXRvbiBpbnN0YW5jZSAtIG5vdCBleHBvcnRlZFxuY29uc3QgaW50ZXJuYWxMb2dnZXIgPSBuZXcgSW50ZXJuYWxMb2dnZXIoKTtcbi8qKlxuICogSW50ZXJuYWwgbG9nZ2VyIGZvciBTREsgdXNlIG9ubHlcbiAqIFRoaXMgaXMgTk9UIGV4cG9ydGVkIGZyb20gdGhlIG1haW4gU0RLIGluZGV4XG4gKi9cbmV4cG9ydCBjb25zdCBpbnRlcm5hbCA9IHtcbiAgICBkZWJ1ZzogKG1lc3NhZ2UsIC4uLmFyZ3MpID0+IGludGVybmFsTG9nZ2VyLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICAgIGluZm86IChtZXNzYWdlLCAuLi5hcmdzKSA9PiBpbnRlcm5hbExvZ2dlci5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICAgIHdhcm46IChtZXNzYWdlLCAuLi5hcmdzKSA9PiBpbnRlcm5hbExvZ2dlci53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICAgIGVycm9yOiAobWVzc2FnZSwgLi4uYXJncykgPT4gaW50ZXJuYWxMb2dnZXIuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gICAgLy8gVXRpbGl0eSBtZXRob2RzXG4gICAgdXBkYXRlQ29uZmlnOiAoY29uZmlnKSA9PiBpbnRlcm5hbExvZ2dlci51cGRhdGVDb25maWcoY29uZmlnKSxcbiAgICBnZXRDb25maWc6ICgpID0+IGludGVybmFsTG9nZ2VyLmdldENvbmZpZygpLFxuICAgIGlzRW5hYmxlZDogKCkgPT4gaW50ZXJuYWxMb2dnZXIuaXNFbmFibGVkKCksXG4gICAgY2hpbGQ6IChjb250ZXh0KSA9PiBpbnRlcm5hbExvZ2dlci5jaGlsZChjb250ZXh0KSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC5qcy5tYXAiLAogICAgImltcG9ydCB7IEFQSVJlc3BvbnNlU2NoZW1hTm9EYXRhIH0gZnJvbSAnQGFnZW50dWl0eS9zZXJ2ZXInO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXJ0RXZlbnREZWxheWVkU2NoZW1hLCBTZXNzaW9uQ29tcGxldGVFdmVudERlbGF5ZWRTY2hlbWEsIFN0cnVjdHVyZWRFcnJvciwgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuaW1wb3J0IHsgaW50ZXJuYWwgfSBmcm9tICcuLi8uLi9sb2dnZXIvaW50ZXJuYWwnO1xuY29uc3QgU2Vzc2lvblJlc3BvbnNlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1Nlc3Npb25SZXNwb25zZUVycm9yJyk7XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZXNzaW9uRXZlbnRQcm92aWRlciB3aGljaCB1c2VzIEhUVFAgZm9yIGRlbGl2ZXJ5LlxuICpcbiAqIFRoaXMgcHJvdmlkZXIgY2hlY2tzIHRoYXQgdGhlIGV2ZW50IGhhcyByZXF1aXJlZCBmaWVsZHMgKG9yZ0lkLCBwcm9qZWN0SWQgZm9yIHN0YXJ0IGV2ZW50cylcbiAqIGJlZm9yZSBzZW5kaW5nIHRvIHRoZSBiYWNrZW5kLiBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmcsIHRoZSBldmVudCBpcyBzaWxlbnRseSBza2lwcGVkLlxuICovXG5leHBvcnQgY2xhc3MgSFRUUFNlc3Npb25FdmVudFByb3ZpZGVyIHtcbiAgICBhcGlDbGllbnQ7XG4gICAgbG9nZ2VyO1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCwgbG9nZ2VyKSB7XG4gICAgICAgIHRoaXMuYXBpQ2xpZW50ID0gY2xpZW50O1xuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBzdGFydCBldmVudCBoYXMgYWxsIHJlcXVpcmVkIGZpZWxkcyBmb3IgSFRUUCBkZWxpdmVyeVxuICAgICAqL1xuICAgIGNhblNlbmRTdGFydEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIC8vIG9yZ0lkIGFuZCBwcm9qZWN0SWQgYXJlIHJlcXVpcmVkIGZvciB0aGUgYmFja2VuZFxuICAgICAgICBpZiAoIWV2ZW50Lm9yZ0lkIHx8ICFldmVudC5wcm9qZWN0SWQpIHtcbiAgICAgICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uLWh0dHBdIHNraXBwaW5nIHN0YXJ0IGV2ZW50IC0gbWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IG9yZ0lkPSVzLCBwcm9qZWN0SWQ9JXMnLCBldmVudC5vcmdJZCA/PyAnbWlzc2luZycsIGV2ZW50LnByb2plY3RJZCA/PyAnbWlzc2luZycpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgc2Vzc2lvbiBzdGFydHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBTZXNzaW9uU3RhcnRFdmVudFxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGV2ZW50KSB7XG4gICAgICAgIC8vIENoZWNrIHJlcXVpcmVkIGZpZWxkcyBiZWZvcmUgc2VuZGluZ1xuICAgICAgICBpZiAoIXRoaXMuY2FuU2VuZFN0YXJ0RXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb24taHR0cF0gc2VuZGluZyBzdGFydCBldmVudDogJXMnLCBldmVudC5pZCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTZW5kaW5nIHNlc3Npb24gc3RhcnQgZXZlbnQ6ICVzJywgZXZlbnQuaWQpO1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5hcGlDbGllbnQucG9zdCgnL3Nlc3Npb24vMjAyNS0wMy0xNycsIHsgLi4uZXZlbnQsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9LCBBUElSZXNwb25zZVNjaGVtYU5vRGF0YSgpLCBTZXNzaW9uU3RhcnRFdmVudERlbGF5ZWRTY2hlbWEpO1xuICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbc2Vzc2lvbi1odHRwXSBzdGFydCBldmVudCBzZW50IHN1Y2Nlc3NmdWxseTogJXMnLCBldmVudC5pZCk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2Vzc2lvbiBzdGFydCBldmVudCBzZW50IHN1Y2Nlc3NmdWxseTogJXMnLCBldmVudC5pZCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWRTZXNzaW9ucy5hZGQoZXZlbnQuaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uLWh0dHBdIHN0YXJ0IGV2ZW50IGZhaWxlZDogJXMgLSAlcycsIGV2ZW50LmlkLCByZXNwLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvblJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYWNrIHNlc3Npb24gSURzIHRoYXQgaGF2ZSBiZWVuIHN0YXJ0ZWQgKHRvIGtub3cgaWYgd2Ugc2hvdWxkIHNlbmQgY29tcGxldGUpXG4gICAgICovXG4gICAgc3RhcnRlZFNlc3Npb25zID0gbmV3IFNldCgpO1xuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBzZXNzaW9uIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IFNlc3Npb25Db21wbGV0ZUV2ZW50XG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGUoZXZlbnQpIHtcbiAgICAgICAgLy8gT25seSBzZW5kIGNvbXBsZXRlIGlmIHdlIHN1Y2Nlc3NmdWxseSBzZW50IGEgc3RhcnQgZXZlbnRcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzZW5kaW5nIG9ycGhhbmVkIGNvbXBsZXRlIGV2ZW50cyB3aGVuIHN0YXJ0IHdhcyBza2lwcGVkXG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkU2Vzc2lvbnMuaGFzKGV2ZW50LmlkKSkge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb24taHR0cF0gc2tpcHBpbmcgY29tcGxldGUgZXZlbnQgLSBubyBtYXRjaGluZyBzdGFydDogJXMnLCBldmVudC5pZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFydGVkU2Vzc2lvbnMuZGVsZXRlKGV2ZW50LmlkKTtcbiAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb24taHR0cF0gc2VuZGluZyBjb21wbGV0ZSBldmVudDogJXMsIHVzZXJEYXRhOiAlcycsIGV2ZW50LmlkLCBldmVudC51c2VyRGF0YSA/IGAke2V2ZW50LnVzZXJEYXRhLmxlbmd0aH0gYnl0ZXNgIDogJ25vbmUnKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NlbmRpbmcgc2Vzc2lvbiBjb21wbGV0ZSBldmVudDogJXMnLCBldmVudC5pZCk7XG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmFwaUNsaWVudC5wdXQoJy9zZXNzaW9uLzIwMjUtMDMtMTcnLCB7IC4uLmV2ZW50LCB0aW1lc3RhbXA6IERhdGUubm93KCkgfSwgQVBJUmVzcG9uc2VTY2hlbWFOb0RhdGEoKSwgU2Vzc2lvbkNvbXBsZXRlRXZlbnREZWxheWVkU2NoZW1hKTtcbiAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb24taHR0cF0gY29tcGxldGUgZXZlbnQgc2VudCBzdWNjZXNzZnVsbHk6ICVzJywgZXZlbnQuaWQpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1Nlc3Npb24gY29tcGxldGUgZXZlbnQgc2VudCBzdWNjZXNzZnVsbHk6ICVzJywgZXZlbnQuaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uLWh0dHBdIGNvbXBsZXRlIGV2ZW50IGZhaWxlZDogJXMgLSAlcycsIGV2ZW50LmlkLCByZXNwLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvblJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiByZXNwLm1lc3NhZ2UgfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cC5qcy5tYXAiLAogICAgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlc3Npb25FdmVudFByb3ZpZGVyIHdoaWNoIHVzZXMgSlNPTiBsb2dzIGZvciBkZWxpdmVyeVxuICovXG5leHBvcnQgY2xhc3MgSlNPTlNlc3Npb25FdmVudFByb3ZpZGVyIHtcbiAgICBkaXJlY3Rvcnk7XG4gICAgY29uc3RydWN0b3IoZGlyZWN0b3J5KSB7XG4gICAgICAgIHRoaXMuZGlyZWN0b3J5ID0gZGlyZWN0b3J5O1xuICAgIH1cbiAgICBtYWtlRmlsZW5hbWUodHlwZSkge1xuICAgICAgICByZXR1cm4gam9pbih0aGlzLmRpcmVjdG9yeSwgYHNlc3Npb24tJHt0eXBlfS4ke0RhdGUubm93KCl9JHtyYW5kb21VVUlEKCl9Lmpzb25gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gc3RhcnRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgU2Vzc2lvblN0YXJ0RXZlbnRcbiAgICAgKi9cbiAgICBhc3luYyBzdGFydChldmVudCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMubWFrZUZpbGVuYW1lKCdzdGFydCcpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyAuLi5ldmVudCwgdGltZXN0YW1wOiBuZXcgRGF0ZSgpIH0pICsgJ1xcbic7XG4gICAgICAgIGF3YWl0IEJ1bi5maWxlKGZpbGVuYW1lKS53cml0ZShwYXlsb2FkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gY29tcGxldGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgU2Vzc2lvbkNvbXBsZXRlRXZlbnRcbiAgICAgKi9cbiAgICBhc3luYyBjb21wbGV0ZShldmVudCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMubWFrZUZpbGVuYW1lKCdjb21wbGV0ZScpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoeyAuLi5ldmVudCwgdGltZXN0YW1wOiBuZXcgRGF0ZSgpIH0pICsgJ1xcbic7XG4gICAgICAgIGF3YWl0IEJ1bi5maWxlKGZpbGVuYW1lKS53cml0ZShwYXlsb2FkKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc29uLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaW50ZXJuYWwgfSBmcm9tICcuLi8uLi9sb2dnZXIvaW50ZXJuYWwnO1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2Vzc2lvbkV2ZW50UHJvdmlkZXIgd2hpY2ggaXMgbm8tb3BcbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsU2Vzc2lvbkV2ZW50UHJvdmlkZXIge1xuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0c1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IFNlc3Npb25TdGFydEV2ZW50XG4gICAgICovXG4gICAgYXN5bmMgc3RhcnQoZXZlbnQpIHtcbiAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb24tbG9jYWxdIHN0YXJ0IGV2ZW50IChuby1vcCk6ICVzJywgZXZlbnQuaWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgc2Vzc2lvbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBTZXNzaW9uQ29tcGxldGVFdmVudFxuICAgICAqL1xuICAgIGFzeW5jIGNvbXBsZXRlKGV2ZW50KSB7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uLWxvY2FsXSBjb21wbGV0ZSBldmVudCAobm8tb3ApOiAlcywgdXNlckRhdGE6ICVzJywgZXZlbnQuaWQsIGV2ZW50LnVzZXJEYXRhID8gYCR7ZXZlbnQudXNlckRhdGEubGVuZ3RofSBieXRlc2AgOiAnbm9uZScpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvY2FsLmpzLm1hcCIsCiAgICAiZXhwb3J0ICogZnJvbSAnLi9jb21wb3NpdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwJztcbmV4cG9ydCAqIGZyb20gJy4vanNvbic7XG5leHBvcnQgKiBmcm9tICcuL2xvY2FsJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQVBJUmVzcG9uc2VTY2hlbWFOb0RhdGEsIFZhbGlkYXRpb25JbnB1dEVycm9yLCBWYWxpZGF0aW9uT3V0cHV0RXJyb3IsIH0gZnJvbSAnQGFnZW50dWl0eS9zZXJ2ZXInO1xuaW1wb3J0IHsgRXZhbFJ1blN0YXJ0RXZlbnREZWxheWVkU2NoZW1hLCBFdmFsUnVuQ29tcGxldGVFdmVudERlbGF5ZWRTY2hlbWEsIFN0cnVjdHVyZWRFcnJvciwgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuaW1wb3J0IHsgaW50ZXJuYWwgfSBmcm9tICcuLi8uLi9sb2dnZXIvaW50ZXJuYWwnO1xuY29uc3QgRXZhbFJ1blJlc3BvbnNlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ0V2YWxSdW5SZXNwb25zZUVycm9yJyk7XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFdmFsUnVuRXZlbnRQcm92aWRlciB3aGljaCB1c2VzIEhUVFAgZm9yIGRlbGl2ZXJ5XG4gKi9cbmV4cG9ydCBjbGFzcyBIVFRQRXZhbFJ1bkV2ZW50UHJvdmlkZXIge1xuICAgIGFwaUNsaWVudDtcbiAgICBsb2dnZXI7XG4gICAgYmFzZVVybDtcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIGxvZ2dlciwgYmFzZVVybCkge1xuICAgICAgICB0aGlzLmFwaUNsaWVudCA9IGNsaWVudDtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBldmFsIHJ1biBzdGFydHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmFsUnVuU3RhcnRFdmVudFxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gJy9ldmFscnVuLzIwMjUtMDMtMTcnO1xuICAgICAgICBjb25zdCBmdWxsVXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZW5kcG9pbnR9YDtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgLi4uZXZlbnQsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9O1xuICAgICAgICAvLyBMb2cgZnVsbCBwYXlsb2FkIHVzaW5nIGludGVybmFsIGxvZ2dlclxuICAgICAgICBpbnRlcm5hbC5pbmZvKCdbRVZBTFJVTiBIVFRQXSA9PT09PT09PT09IFNUQVJUIFBBWUxPQUQgPT09PT09PT09PScpO1xuICAgICAgICBpbnRlcm5hbC5pbmZvKCdbRVZBTFJVTiBIVFRQXSBpZDogJXMnLCBwYXlsb2FkLmlkKTtcbiAgICAgICAgaW50ZXJuYWwuaW5mbygnW0VWQUxSVU4gSFRUUF0gZXZhbElkOiAlcycsIHBheWxvYWQuZXZhbElkKTtcbiAgICAgICAgaW50ZXJuYWwuaW5mbygnW0VWQUxSVU4gSFRUUF0gZXZhbElkZW50aWZpZXI6ICVzJywgcGF5bG9hZC5ldmFsSWRlbnRpZmllcik7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tFVkFMUlVOIEhUVFBdIHNlc3Npb25JZDogJXMnLCBwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tFVkFMUlVOIEhUVFBdIG9yZ0lkOiAlcycsIHBheWxvYWQub3JnSWQpO1xuICAgICAgICBpbnRlcm5hbC5pbmZvKCdbRVZBTFJVTiBIVFRQXSBwcm9qZWN0SWQ6ICVzJywgcGF5bG9hZC5wcm9qZWN0SWQpO1xuICAgICAgICBpbnRlcm5hbC5pbmZvKCdbRVZBTFJVTiBIVFRQXSBkZXZtb2RlOiAlcycsIHBheWxvYWQuZGV2bW9kZSk7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tFVkFMUlVOIEhUVFBdIGRlcGxveW1lbnRJZDogJXMnLCBwYXlsb2FkLmRlcGxveW1lbnRJZCk7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tFVkFMUlVOIEhUVFBdIHNwYW5JZDogJXMnLCBwYXlsb2FkLnNwYW5JZCk7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tFVkFMUlVOIEhUVFBdIFVSTDogUE9TVCAlcycsIGZ1bGxVcmwpO1xuICAgICAgICBpbnRlcm5hbC5pbmZvKCdbRVZBTFJVTiBIVFRQXSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvc3QoZW5kcG9pbnQsIHBheWxvYWQsIEFQSVJlc3BvbnNlU2NoZW1hTm9EYXRhKCksIEV2YWxSdW5TdGFydEV2ZW50RGVsYXllZFNjaGVtYSk7XG4gICAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1tFVkFMUlVOIEhUVFBdIFN0YXJ0IGV2ZW50IHNlbnQgc3VjY2Vzc2Z1bGx5OiAlcycsIGV2ZW50LmlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IHJlc3AubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignW0VWQUxSVU4gSFRUUF0gU3RhcnQgZXZlbnQgZmFpbGVkOiAlcywgZXJyb3I6ICVzJywgZXZlbnQuaWQsIGVycm9yTXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFdmFsUnVuUmVzcG9uc2VFcnJvcih7IG1lc3NhZ2U6IGVycm9yTXNnIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1tFVkFMUlVOIEhUVFBdIFN0YXJ0IGV2ZW50IGV4Y2VwdGlvbjogJXMsIGVycm9yOiAlcycsIGV2ZW50LmlkLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xuICAgICAgICAgICAgLy8gTG9nIHZhbGlkYXRpb24gZXJyb3JzIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKChlcnJvciBpbnN0YW5jZW9mIFZhbGlkYXRpb25JbnB1dEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgVmFsaWRhdGlvbk91dHB1dEVycm9yKSAmJlxuICAgICAgICAgICAgICAgIGVycm9yLmlzc3Vlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1tFVkFMUlVOIEhUVFBdIFZhbGlkYXRpb24gaXNzdWVzOiAlcycsIEpTT04uc3RyaW5naWZ5KGVycm9yLmlzc3VlcywgbnVsbCwgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIGV2YWwgcnVuIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IEV2YWxSdW5Db21wbGV0ZUV2ZW50XG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGUoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSAnL2V2YWxydW4vMjAyNS0wMy0xNyc7XG4gICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtlbmRwb2ludH1gO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnW0VWQUxSVU4gSFRUUF0gU2VuZGluZyBldmFsIHJ1biBjb21wbGV0ZSBldmVudDogJXMnLCBldmVudC5pZCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdbRVZBTFJVTiBIVFRQXSBVUkw6ICVzICVzJywgJ1BVVCcsIGZ1bGxVcmwpO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnW0VWQUxSVU4gSFRUUF0gQmFzZSBVUkw6ICVzJywgdGhpcy5iYXNlVXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmFwaUNsaWVudC5wdXQoZW5kcG9pbnQsIHsgLi4uZXZlbnQsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9LCBBUElSZXNwb25zZVNjaGVtYU5vRGF0YSgpLCBFdmFsUnVuQ29tcGxldGVFdmVudERlbGF5ZWRTY2hlbWEpO1xuICAgICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdbRVZBTFJVTiBIVFRQXSBDb21wbGV0ZSBldmVudCBzZW50IHN1Y2Nlc3NmdWxseTogJXMnLCBldmVudC5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSByZXNwLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1tFVkFMUlVOIEhUVFBdIENvbXBsZXRlIGV2ZW50IGZhaWxlZDogJXMsIGVycm9yOiAlcycsIGV2ZW50LmlkLCBlcnJvck1zZyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXZhbFJ1blJlc3BvbnNlRXJyb3IoeyBtZXNzYWdlOiBlcnJvck1zZyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdbRVZBTFJVTiBIVFRQXSBDb21wbGV0ZSBldmVudCBleGNlcHRpb246ICVzLCBlcnJvcjogJXMnLCBldmVudC5pZCwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cC5qcy5tYXAiLAogICAgIi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEV2YWxSdW5FdmVudFByb3ZpZGVyIHdoaWNoIGp1c3QgbG9ncyBsb2NhbGx5XG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbEV2YWxSdW5FdmVudFByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBjYWxsZWQgd2hlbiB0aGUgZXZhbCBydW4gc3RhcnRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZhbFJ1blN0YXJ0RXZlbnRcbiAgICAgKi9cbiAgICBhc3luYyBzdGFydChldmVudCkge1xuICAgICAgICBjb25zb2xlLmxvZygnRXZhbFJ1biBzdGFydGVkOicsIGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIGV2YWwgcnVuIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IEV2YWxSdW5Db21wbGV0ZUV2ZW50XG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGUoZXZlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0V2YWxSdW4gY29tcGxldGVkOicsIGV2ZW50KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2NhbC5qcy5tYXAiLAogICAgIi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEV2YWxSdW5FdmVudFByb3ZpZGVyIHdoaWNoIHdyaXRlcyB0byBKU09OIGZpbGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBKU09ORXZhbFJ1bkV2ZW50UHJvdmlkZXIge1xuICAgIGV4cG9ydERpcjtcbiAgICBjb25zdHJ1Y3RvcihleHBvcnREaXIpIHtcbiAgICAgICAgdGhpcy5leHBvcnREaXIgPSBleHBvcnREaXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBldmFsIHJ1biBzdGFydHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmFsUnVuU3RhcnRFdmVudFxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB0eXBlOiAnZXZhbHJ1bl9zdGFydCcsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHt0aGlzLmV4cG9ydERpcn0vZXZhbHJ1bi0ke2V2ZW50LmlkfS1zdGFydC5qc29uYDtcbiAgICAgICAgYXdhaXQgQnVuLndyaXRlKGZpbGVuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBldmFsIHJ1biBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmFsUnVuQ29tcGxldGVFdmVudFxuICAgICAqL1xuICAgIGFzeW5jIGNvbXBsZXRlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB0eXBlOiAnZXZhbHJ1bl9jb21wbGV0ZScsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHt0aGlzLmV4cG9ydERpcn0vZXZhbHJ1bi0ke2V2ZW50LmlkfS1jb21wbGV0ZS5qc29uYDtcbiAgICAgICAgYXdhaXQgQnVuLndyaXRlKGZpbGVuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi5qcy5tYXAiLAogICAgIi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEV2YWxSdW5FdmVudFByb3ZpZGVyIHdoaWNoIHdyYXBzIG11bHRpcGxlIHByb3ZpZGVyc1xuICovXG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlRXZhbFJ1bkV2ZW50UHJvdmlkZXIge1xuICAgIHByb3ZpZGVycztcbiAgICBjb25zdHJ1Y3RvciguLi5wcm92aWRlcnMpIHtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMgPSBwcm92aWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBldmFsIHJ1biBzdGFydHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmFsUnVuU3RhcnRFdmVudFxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGV2ZW50KSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLnByb3ZpZGVycy5tYXAoKHByb3ZpZGVyKSA9PiBwcm92aWRlci5zdGFydChldmVudCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIGV2YWwgcnVuIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IEV2YWxSdW5Db21wbGV0ZUV2ZW50XG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGUoZXZlbnQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMucHJvdmlkZXJzLm1hcCgocHJvdmlkZXIpID0+IHByb3ZpZGVyLmNvbXBsZXRlKGV2ZW50KSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvc2l0ZS5qcy5tYXAiLAogICAgImV4cG9ydCB7IEhUVFBFdmFsUnVuRXZlbnRQcm92aWRlciB9IGZyb20gJy4vaHR0cCc7XG5leHBvcnQgeyBMb2NhbEV2YWxSdW5FdmVudFByb3ZpZGVyIH0gZnJvbSAnLi9sb2NhbCc7XG5leHBvcnQgeyBKU09ORXZhbFJ1bkV2ZW50UHJvdmlkZXIgfSBmcm9tICcuL2pzb24nO1xuZXhwb3J0IHsgQ29tcG9zaXRlRXZhbFJ1bkV2ZW50UHJvdmlkZXIgfSBmcm9tICcuL2NvbXBvc2l0ZSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKlxuICogR2xvYmFsIGV2ZW50IGJ1cyBmb3IgVml0ZS1uYXRpdmUgYXJjaGl0ZWN0dXJlXG4gKiBSZXBsYWNlcyB0aGUgQXBwIGNsYXNzIGV2ZW50IHN5c3RlbVxuICovXG5pbXBvcnQgeyBpbnRlcm5hbCB9IGZyb20gJy4vbG9nZ2VyL2ludGVybmFsJztcbmNsYXNzIEdsb2JhbEV2ZW50QnVzIHtcbiAgICBldmVudExpc3RlbmVycyA9IG5ldyBNYXAoKTtcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGNhbGxiYWNrcyA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmICghY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBjYWxsYmFja3MgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNldChldmVudE5hbWUsIGNhbGxiYWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2tzLmFkZChjYWxsYmFjayk7XG4gICAgfVxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50TGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICBpZiAoIWNhbGxiYWNrcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgfVxuICAgIGFzeW5jIGZpcmVFdmVudChldmVudE5hbWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5ldmVudExpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKCFjYWxsYmFja3MgfHwgY2FsbGJhY2tzLnNpemUgPT09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IHJlLXRocm93IC0gZXZlbnQgbGlzdGVuZXIgZXJyb3JzIHNob3VsZCBub3QgY3Jhc2ggdGhlIHNlcnZlclxuICAgICAgICAgICAgICAgIGludGVybmFsLmVycm9yKGBFcnJvciBpbiBldmVudCBsaXN0ZW5lciBmb3IgJyR7ZXZlbnROYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyQWxsTGlzdGVuZXJzKCkge1xuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgfVxufVxuLy8gR2xvYmFsIHNpbmdsZXRvbiBpbnN0YW5jZVxuY29uc3QgZ2xvYmFsRXZlbnRCdXMgPSBuZXcgR2xvYmFsRXZlbnRCdXMoKTtcbi8qKlxuICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGFwcGxpY2F0aW9uIGxpZmVjeWNsZSBldmVudHMuXG4gKlxuICogQXZhaWxhYmxlIGV2ZW50czpcbiAqIC0gYGFnZW50LnN0YXJ0ZWRgIC0gRmlyZWQgd2hlbiBhbiBhZ2VudCBiZWdpbnMgZXhlY3V0aW9uXG4gKiAtIGBhZ2VudC5jb21wbGV0ZWRgIC0gRmlyZWQgd2hlbiBhbiBhZ2VudCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5XG4gKiAtIGBhZ2VudC5lcnJvcmVkYCAtIEZpcmVkIHdoZW4gYW4gYWdlbnQgdGhyb3dzIGFuIGVycm9yXG4gKiAtIGBzZXNzaW9uLnN0YXJ0ZWRgIC0gRmlyZWQgd2hlbiBhIG5ldyBzZXNzaW9uIHN0YXJ0c1xuICogLSBgc2Vzc2lvbi5jb21wbGV0ZWRgIC0gRmlyZWQgd2hlbiBhIHNlc3Npb24gY29tcGxldGVzXG4gKiAtIGB0aHJlYWQuY3JlYXRlZGAgLSBGaXJlZCB3aGVuIGEgdGhyZWFkIGlzIGNyZWF0ZWRcbiAqIC0gYHRocmVhZC5kZXN0cm95ZWRgIC0gRmlyZWQgd2hlbiBhIHRocmVhZCBpcyBkZXN0cm95ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgYWRkRXZlbnRMaXN0ZW5lciB9IGZyb20gJ0BhZ2VudHVpdHkvcnVudGltZSc7XG4gKlxuICogYWRkRXZlbnRMaXN0ZW5lcignYWdlbnQuc3RhcnRlZCcsIChldmVudE5hbWUsIGFnZW50LCBjdHgpID0+IHtcbiAqICAgY29uc29sZS5sb2coYCR7YWdlbnQubWV0YWRhdGEubmFtZX0gc3RhcnRlZCBmb3Igc2Vzc2lvbiAke2N0eC5zZXNzaW9uSWR9YCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgZ2xvYmFsRXZlbnRCdXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgZ2xvYmFsRXZlbnRCdXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogRmlyZSBhIGdsb2JhbCBhcHBsaWNhdGlvbiBldmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZmlyZUV2ZW50IH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbiAqXG4gKiBhd2FpdCBmaXJlRXZlbnQoJ3Nlc3Npb24uc3RhcnRlZCcsIHNlc3Npb24pO1xuICogYXdhaXQgZmlyZUV2ZW50KCdhZ2VudC5jb21wbGV0ZWQnLCBhZ2VudCwgY3R4KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlyZUV2ZW50KGV2ZW50TmFtZSwgLi4uYXJncykge1xuICAgIGF3YWl0IGdsb2JhbEV2ZW50QnVzLmZpcmVFdmVudChldmVudE5hbWUsIC4uLmFyZ3MpO1xufVxuLyoqXG4gKiBDbGVhciBhbGwgZXZlbnQgbGlzdGVuZXJzICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckFsbEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGdsb2JhbEV2ZW50QnVzLmNsZWFyQWxsTGlzdGVuZXJzKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fZXZlbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRyYWNlbG9vcFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzID0gZXhwb3J0cy5MTE1SZXF1ZXN0VHlwZVZhbHVlcyA9IGV4cG9ydHMuRXZlbnRBdHRyaWJ1dGVzID0gZXhwb3J0cy5FdmVudHMgPSBleHBvcnRzLlNwYW5BdHRyaWJ1dGVzID0gdm9pZCAwO1xuZXhwb3J0cy5TcGFuQXR0cmlidXRlcyA9IHtcbiAgICBMTE1fU1lTVEVNOiBcImdlbl9haS5zeXN0ZW1cIixcbiAgICBMTE1fUkVRVUVTVF9NT0RFTDogXCJnZW5fYWkucmVxdWVzdC5tb2RlbFwiLFxuICAgIExMTV9SRVFVRVNUX01BWF9UT0tFTlM6IFwiZ2VuX2FpLnJlcXVlc3QubWF4X3Rva2Vuc1wiLFxuICAgIExMTV9SRVFVRVNUX1RFTVBFUkFUVVJFOiBcImdlbl9haS5yZXF1ZXN0LnRlbXBlcmF0dXJlXCIsXG4gICAgTExNX1JFUVVFU1RfVE9QX1A6IFwiZ2VuX2FpLnJlcXVlc3QudG9wX3BcIixcbiAgICBMTE1fUFJPTVBUUzogXCJnZW5fYWkucHJvbXB0XCIsXG4gICAgTExNX0NPTVBMRVRJT05TOiBcImdlbl9haS5jb21wbGV0aW9uXCIsXG4gICAgTExNX0lOUFVUX01FU1NBR0VTOiBcImdlbl9haS5pbnB1dC5tZXNzYWdlc1wiLFxuICAgIExMTV9PVVRQVVRfTUVTU0FHRVM6IFwiZ2VuX2FpLm91dHB1dC5tZXNzYWdlc1wiLFxuICAgIExMTV9SRVNQT05TRV9NT0RFTDogXCJnZW5fYWkucmVzcG9uc2UubW9kZWxcIixcbiAgICBMTE1fVVNBR0VfUFJPTVBUX1RPS0VOUzogXCJnZW5fYWkudXNhZ2UucHJvbXB0X3Rva2Vuc1wiLFxuICAgIExMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOUzogXCJnZW5fYWkudXNhZ2UuY29tcGxldGlvbl90b2tlbnNcIixcbiAgICBHRU5fQUlfQUdFTlRfTkFNRTogXCJnZW5fYWkuYWdlbnQubmFtZVwiLFxuICAgIC8vIExMTVxuICAgIExMTV9SRVFVRVNUX1RZUEU6IFwibGxtLnJlcXVlc3QudHlwZVwiLFxuICAgIExMTV9VU0FHRV9UT1RBTF9UT0tFTlM6IFwibGxtLnVzYWdlLnRvdGFsX3Rva2Vuc1wiLFxuICAgIExMTV9UT1BfSzogXCJsbG0udG9wX2tcIixcbiAgICBMTE1fRlJFUVVFTkNZX1BFTkFMVFk6IFwibGxtLmZyZXF1ZW5jeV9wZW5hbHR5XCIsXG4gICAgTExNX1BSRVNFTkNFX1BFTkFMVFk6IFwibGxtLnByZXNlbmNlX3BlbmFsdHlcIixcbiAgICBMTE1fQ0hBVF9TVE9QX1NFUVVFTkNFUzogXCJsbG0uY2hhdC5zdG9wX3NlcXVlbmNlc1wiLFxuICAgIExMTV9SRVFVRVNUX0ZVTkNUSU9OUzogXCJsbG0ucmVxdWVzdC5mdW5jdGlvbnNcIixcbiAgICAvLyBWZWN0b3IgREJcbiAgICBWRUNUT1JfREJfVkVORE9SOiBcImRiLnN5c3RlbVwiLFxuICAgIFZFQ1RPUl9EQl9RVUVSWV9UT1BfSzogXCJkYi52ZWN0b3IucXVlcnkudG9wX2tcIixcbiAgICBWRUNUT1JfREJfVEFCTEVfTkFNRTogXCJkYi52ZWN0b3IudGFibGVfbmFtZVwiLFxuICAgIFZFQ1RPUl9EQl9BRERfQ09VTlQ6IFwiZGIudmVjdG9yLmFkZC5jb3VudFwiLFxuICAgIFZFQ1RPUl9EQl9ERUxFVEVfU0VMRUNUT1I6IFwiZGIudmVjdG9yLmRlbGV0ZS5zZWxlY3RvclwiLFxuICAgIFZFQ1RPUl9EQl9ERUxFVEVfQ09VTlQ6IFwiZGIudmVjdG9yLmRlbGV0ZS5jb3VudFwiLFxuICAgIFZFQ1RPUl9EQl9HRVRfU0VMRUNUT1I6IFwiZGIudmVjdG9yLmdldC5zZWxlY3RvclwiLFxuICAgIFZFQ1RPUl9EQl9HRVRfQ09VTlQ6IFwiZGIudmVjdG9yLmdldC5jb3VudFwiLFxuICAgIFZFQ1RPUl9EQl9HRVRfSU5DTFVERV9NRVRBREFUQTogXCJkYi52ZWN0b3IuZ2V0LmluY2x1ZGVfbWV0YWRhdGFcIixcbiAgICBWRUNUT1JfREJfR0VUX0lOQ0xVREVfVkFMVUVTOiBcImRiLnZlY3Rvci5nZXQuaW5jbHVkZV92YWx1ZXNcIixcbiAgICAvLyBMTE0gV29ya2Zsb3dzXG4gICAgVFJBQ0VMT09QX1NQQU5fS0lORDogXCJ0cmFjZWxvb3Auc3Bhbi5raW5kXCIsXG4gICAgVFJBQ0VMT09QX1dPUktGTE9XX05BTUU6IFwidHJhY2Vsb29wLndvcmtmbG93Lm5hbWVcIixcbiAgICBUUkFDRUxPT1BfRU5USVRZX05BTUU6IFwidHJhY2Vsb29wLmVudGl0eS5uYW1lXCIsXG4gICAgVFJBQ0VMT09QX0VOVElUWV9QQVRIOiBcInRyYWNlbG9vcC5lbnRpdHkucGF0aFwiLFxuICAgIFRSQUNFTE9PUF9FTlRJVFlfVkVSU0lPTjogXCJ0cmFjZWxvb3AuZW50aXR5LnZlcnNpb25cIixcbiAgICBUUkFDRUxPT1BfQVNTT0NJQVRJT05fUFJPUEVSVElFUzogXCJ0cmFjZWxvb3AuYXNzb2NpYXRpb24ucHJvcGVydGllc1wiLFxuICAgIFRSQUNFTE9PUF9FTlRJVFlfSU5QVVQ6IFwidHJhY2Vsb29wLmVudGl0eS5pbnB1dFwiLFxuICAgIFRSQUNFTE9PUF9FTlRJVFlfT1VUUFVUOiBcInRyYWNlbG9vcC5lbnRpdHkub3V0cHV0XCIsXG4gICAgLy8gTUNQIChNb2RlbCBDb250ZXh0IFByb3RvY29sKVxuICAgIE1DUF9SRVNQT05TRV9WQUxVRTogXCJtY3AucmVzcG9uc2UudmFsdWVcIixcbiAgICBNQ1BfUkVRVUVTVF9JRDogXCJtY3AucmVxdWVzdC5pZFwiLFxufTtcbmV4cG9ydHMuRXZlbnRzID0ge1xuICAgIERCX1FVRVJZX0VNQkVERElOR1M6IFwiZGIucXVlcnkuZW1iZWRkaW5nc1wiLFxuICAgIERCX1FVRVJZX1JFU1VMVDogXCJkYi5xdWVyeS5yZXN1bHRcIixcbn07XG5leHBvcnRzLkV2ZW50QXR0cmlidXRlcyA9IHtcbiAgICAvLyBRdWVyeSBFbWJlZGRpbmdzXG4gICAgREJfUVVFUllfRU1CRURESU5HU19WRUNUT1I6IFwiZGIucXVlcnkuZW1iZWRkaW5ncy52ZWN0b3JcIixcbiAgICAvLyBRdWVyeSBSZXN1bHQgKGNhbm9uaWNhbCBmb3JtYXQpXG4gICAgREJfUVVFUllfUkVTVUxUX0lEOiBcImRiLnF1ZXJ5LnJlc3VsdC5pZFwiLFxuICAgIERCX1FVRVJZX1JFU1VMVF9TQ09SRTogXCJkYi5xdWVyeS5yZXN1bHQuc2NvcmVcIixcbiAgICBEQl9RVUVSWV9SRVNVTFRfRElTVEFOQ0U6IFwiZGIucXVlcnkucmVzdWx0LmRpc3RhbmNlXCIsXG4gICAgREJfUVVFUllfUkVTVUxUX01FVEFEQVRBOiBcImRiLnF1ZXJ5LnJlc3VsdC5tZXRhZGF0YVwiLFxuICAgIERCX1FVRVJZX1JFU1VMVF9WRUNUT1I6IFwiZGIucXVlcnkucmVzdWx0LnZlY3RvclwiLFxuICAgIERCX1FVRVJZX1JFU1VMVF9ET0NVTUVOVDogXCJkYi5xdWVyeS5yZXN1bHQuZG9jdW1lbnRcIixcbiAgICAvLyBERVBSRUNBVEVEOiBWZWN0b3IgREIgUXVlcnkgUmVxdWVzdFxuICAgIFZFQ1RPUl9EQl9RVUVSWV9UT1BfSzogXCJkYi52ZWN0b3IucXVlcnkudG9wX2tcIixcbiAgICBWRUNUT1JfREJfUVVFUllfSU5DTFVERV9WQUxVRVM6IFwiZGIudmVjdG9yLnF1ZXJ5LmluY2x1ZGVfdmFsdWVzXCIsXG4gICAgVkVDVE9SX0RCX1FVRVJZX0lOQ0xVREVfTUVUQURBVEE6IFwiZGIudmVjdG9yLnF1ZXJ5LmluY2x1ZGVfbWV0YWRhdGFcIixcbiAgICBWRUNUT1JfREJfUVVFUllfSUQ6IFwiZGIudmVjdG9yLnF1ZXJ5LmlkXCIsXG4gICAgVkVDVE9SX0RCX1FVRVJZX0VNQkVERElOR1NfVkVDVE9SOiBcImRiLnZlY3Rvci5xdWVyeS5lbWJlZGRpbmdzLnZlY3RvclwiLFxuICAgIFZFQ1RPUl9EQl9RVUVSWV9NRVRBREFUQV9GSUxURVI6IFwiZGIudmVjdG9yLnF1ZXJ5Lm1ldGFkYXRhX2ZpbHRlclwiLFxuICAgIC8vIERFUFJFQ0FURUQ6IFZlY3RvciBEQiBRdWVyeSBSZXNwb25zZVxuICAgIFZFQ1RPUl9EQl9RVUVSWV9SRVNVTFRfTkFNRVNQQUNFOiBcImRiLnZlY3Rvci5xdWVyeS5yZXN1bHQubmFtZXNwYWNlXCIsXG4gICAgVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9SRUFEX1VOSVRTX0NPTlNVTUVEOiBcImRiLnZlY3Rvci5xdWVyeS5yZXN1bHQucmVhZF91bml0c1wiLFxuICAgIFZFQ1RPUl9EQl9RVUVSWV9SRVNVTFRfTUFUQ0hFU19MRU5HVEg6IFwiZGIudmVjdG9yLnF1ZXJ5LnJlc3VsdC5tYXRjaGVzX2xlbmd0aFwiLFxuICAgIC8vIERFUFJFQ0FURUQ6IFZlY3RvciBEQiBRdWVyeSBSZXNwb25zZSBvZiBlYWNoIHJlc3VsdFxuICAgIFZFQ1RPUl9EQl9RVUVSWV9SRVNVTFRfU0NPUkU6IFwiZGIudmVjdG9yLnF1ZXJ5LnJlc3VsdC57aX0uc2NvcmVcIixcbiAgICBWRUNUT1JfREJfUVVFUllfUkVTVUxUX0lEOiBcImRiLnZlY3Rvci5xdWVyeS5yZXN1bHQue2l9LmlkXCIsXG4gICAgVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9WQUxVRVM6IFwiZGIudmVjdG9yLnF1ZXJ5LnJlc3VsdC57aX0udmFsdWVzXCIsXG4gICAgVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9TUEFSU0VfSU5ESUNFUzogXCJkYi52ZWN0b3IucXVlcnkucmVzdWx0LntpfS5zcGFyc2UuaW5kaWNlc1wiLFxuICAgIFZFQ1RPUl9EQl9RVUVSWV9SRVNVTFRfU1BBUlNFX1ZBTFVFUzogXCJkYi52ZWN0b3IucXVlcnkucmVzdWx0LntpfS5zcGFyc2UudmFsdWVzXCIsXG4gICAgVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9NRVRBREFUQTogXCJkYi52ZWN0b3IucXVlcnkucmVzdWx0LntpfS5tZXRhZGF0YVwiLFxufTtcbnZhciBMTE1SZXF1ZXN0VHlwZVZhbHVlcztcbihmdW5jdGlvbiAoTExNUmVxdWVzdFR5cGVWYWx1ZXMpIHtcbiAgICBMTE1SZXF1ZXN0VHlwZVZhbHVlc1tcIkNPTVBMRVRJT05cIl0gPSBcImNvbXBsZXRpb25cIjtcbiAgICBMTE1SZXF1ZXN0VHlwZVZhbHVlc1tcIkNIQVRcIl0gPSBcImNoYXRcIjtcbiAgICBMTE1SZXF1ZXN0VHlwZVZhbHVlc1tcIlJFUkFOS1wiXSA9IFwicmVyYW5rXCI7XG4gICAgTExNUmVxdWVzdFR5cGVWYWx1ZXNbXCJVTktOT1dOXCJdID0gXCJ1bmtub3duXCI7XG59KShMTE1SZXF1ZXN0VHlwZVZhbHVlcyB8fCAoZXhwb3J0cy5MTE1SZXF1ZXN0VHlwZVZhbHVlcyA9IExMTVJlcXVlc3RUeXBlVmFsdWVzID0ge30pKTtcbnZhciBUcmFjZWxvb3BTcGFuS2luZFZhbHVlcztcbihmdW5jdGlvbiAoVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMpIHtcbiAgICBUcmFjZWxvb3BTcGFuS2luZFZhbHVlc1tcIldPUktGTE9XXCJdID0gXCJ3b3JrZmxvd1wiO1xuICAgIFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzW1wiVEFTS1wiXSA9IFwidGFza1wiO1xuICAgIFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzW1wiQUdFTlRcIl0gPSBcImFnZW50XCI7XG4gICAgVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXNbXCJUT09MXCJdID0gXCJ0b29sXCI7XG4gICAgVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXNbXCJTRVNTSU9OXCJdID0gXCJzZXNzaW9uXCI7XG4gICAgVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXNbXCJVTktOT1dOXCJdID0gXCJ1bmtub3duXCI7XG59KShUcmFjZWxvb3BTcGFuS2luZFZhbHVlcyB8fCAoZXhwb3J0cy5UcmFjZWxvb3BTcGFuS2luZFZhbHVlcyA9IFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlbWFudGljQXR0cmlidXRlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRyYWNlbG9vcFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vU2VtYW50aWNBdHRyaWJ1dGVzXCIpLCBleHBvcnRzKTtcbmV4cG9ydHMuQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCA9ICgwLCBhcGlfMS5jcmVhdGVDb250ZXh0S2V5KShcImFsbG93X3RyYWNlX2NvbnRlbnRcIik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IGluQWdlbnRDb250ZXh0LCBpbkhUVFBDb250ZXh0LCBnZXRIVFRQQ29udGV4dCB9IGZyb20gJy4vX2NvbnRleHQnO1xuaW1wb3J0IHsgU3BhbkF0dHJpYnV0ZXMgfSBmcm9tICdAdHJhY2Vsb29wL2FpLXNlbWFudGljLWNvbnZlbnRpb25zJztcbmV4cG9ydCBjb25zdCBUT0tFTlNfSEVBREVSID0gJ3gtYWdlbnR1aXR5LXRva2Vucyc7XG5leHBvcnQgY29uc3QgRFVSQVRJT05fSEVBREVSID0gJ3gtYWdlbnR1aXR5LWR1cmF0aW9uJztcbi8vIEFJIFNESyBzcGFuIG5hbWVzOiBhaS5nZW5lcmF0ZVRleHQsIGFpLnN0cmVhbVRleHQsIGFpLmdlbmVyYXRlT2JqZWN0LCBhaS5zdHJlYW1PYmplY3QsIGFpLmVtYmVkLCBhaS5lbWJlZE1hbnlcbmNvbnN0IEFJX1NES19TUEFOX1BSRUZJWCA9ICdhaS4nO1xuY29uc3QgQUlfU0RLX01PREVMX05BTUUgPSAnYWkubW9kZWwuaWQnO1xuY29uc3QgQUlfU0RLX1VTQUdFX1BST01QVF9UT0tFTlMgPSAnYWkudXNhZ2UucHJvbXB0VG9rZW5zJztcbmNvbnN0IEFJX1NES19VU0FHRV9DT01QTEVUSU9OX1RPS0VOUyA9ICdhaS51c2FnZS5jb21wbGV0aW9uVG9rZW5zJztcbmNvbnN0IHBhcnNlVG9rZW5IZWFkZXIgPSAodmFsKSA9PiB7XG4gICAgY29uc3Qga3YgPSBuZXcgTWFwKCk7XG4gICAgaWYgKHZhbCkge1xuICAgICAgICAvLyBmb3JtYXQgaXM6IFttb2RlbF06W2NvdW50XSBbbW9kZWw6Y291bnRdXG4gICAgICAgIGNvbnN0IHRvayA9IHZhbC5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRvaykge1xuICAgICAgICAgICAgY29uc3QgW25hbWUsIGNvdW50XSA9IGVudHJ5LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGt2LnNldChuYW1lLCBwYXJzZUludChjb3VudCA/PyAnMCcpID8/IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrdjtcbn07XG5jb25zdCBzZXJpYWxpemVUb2tlbkhlYWRlciA9IChrdikgPT4ge1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2Yga3YpIHtcbiAgICAgICAgbGluZXMucHVzaChgJHtrfToke3Z9YCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcy5qb2luKCcgJyk7XG59O1xuY29uc3QgZ2V0VG9rZW5WYWx1ZSA9ICh2YWwpID0+IHtcbiAgICBpZiAodmFsKSB7XG4gICAgICAgIGNvbnN0IHYgPSB2YWwudmFsdWVPZigpO1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodiwgMTApO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbn07XG5leHBvcnQgY2xhc3MgVG9rZW5TcGFuUHJvY2Vzc29yIHtcbiAgICBvblN0YXJ0KF9zcGFuLCBfY29udGV4dCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uRW5kKHNwYW4pIHtcbiAgICAgICAgaWYgKGluQWdlbnRDb250ZXh0KCkgJiYgaW5IVFRQQ29udGV4dCgpKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBnZXRIVFRQQ29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5MaW5lID0gY3R4LnJlcy5oZWFkZXJzLmdldChUT0tFTlNfSEVBREVSKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCB0b2tlbnMgPSBwYXJzZVRva2VuSGVhZGVyKHRva2VuTGluZSk7XG4gICAgICAgICAgICBsZXQgbXV0YXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gQUkgU0RLIHVzZXMgYWkuKiBzcGFuIG5hbWVzIGJ1dCBkb2Vzbid0IHVzZSB0aGUgc2VtYW50aWMgYXR0cmlidXRlIG5hbWVzXG4gICAgICAgICAgICBpZiAoc3Bhbi5uYW1lLnN0YXJ0c1dpdGgoQUlfU0RLX1NQQU5fUFJFRklYKSAmJiBBSV9TREtfTU9ERUxfTkFNRSBpbiBzcGFuLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IHNwYW4uYXR0cmlidXRlc1tBSV9TREtfTU9ERUxfTkFNRV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWxUb2tlbnMgPSB0b2tlbnMuZ2V0KG1vZGVsKSA/PyAwO1xuICAgICAgICAgICAgICAgIGlmIChBSV9TREtfVVNBR0VfUFJPTVBUX1RPS0VOUyBpbiBzcGFuLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUb2tlbnMgKz0gZ2V0VG9rZW5WYWx1ZShzcGFuLmF0dHJpYnV0ZXNbQUlfU0RLX1VTQUdFX1BST01QVF9UT0tFTlNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFJX1NES19VU0FHRV9DT01QTEVUSU9OX1RPS0VOUyBpbiBzcGFuLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUb2tlbnMgKz0gZ2V0VG9rZW5WYWx1ZShzcGFuLmF0dHJpYnV0ZXNbQUlfU0RLX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0b3RhbFRva2VucyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNldChtb2RlbCwgdG90YWxUb2tlbnMpO1xuICAgICAgICAgICAgICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNIGluIHNwYW4uYXR0cmlidXRlcyAmJlxuICAgICAgICAgICAgICAgIFNwYW5BdHRyaWJ1dGVzLkxMTV9SRVNQT05TRV9NT0RFTCBpbiBzcGFuLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IHNwYW4uYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUxdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsVG9rZW5zID0gdG9rZW5zLmdldChtb2RlbCkgPz8gMDtcbiAgICAgICAgICAgICAgICBpZiAoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1BST01QVF9UT0tFTlMgaW4gc3Bhbi5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zICs9IGdldFRva2VuVmFsdWUoc3Bhbi5hdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9QUk9NUFRfVE9LRU5TXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfQ09NUExFVElPTl9UT0tFTlMgaW4gc3Bhbi5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zICs9IGdldFRva2VuVmFsdWUoc3Bhbi5hdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodG90YWxUb2tlbnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5zZXQobW9kZWwsIHRvdGFsVG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG11dGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBjdHguaGVhZGVyKFRPS0VOU19IRUFERVIsIHNlcmlhbGl6ZVRva2VuSGVhZGVyKHRva2VucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fdG9rZW5zLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBNaW5pbWFsIHNlcnZlciBnbG9iYWxzIGZvciBWaXRlLW5hdGl2ZSBhcmNoaXRlY3R1cmVcbiAqIFRoZSBzZXJ2ZXIgaXMgbWFuYWdlZCBieSBWaXRlIChkZXYpIG9yIEJ1bi5zZXJ2ZSBpbiB0aGUgZ2VuZXJhdGVkIGVudHJ5IGZpbGUgKHByb2QpXG4gKi9cbmltcG9ydCB7IFRva2VuU3BhblByb2Nlc3NvciB9IGZyb20gJy4vX3Rva2Vucyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxubGV0IGdsb2JhbFJvdXRlckluc3RhbmNlID0gbnVsbDtcbmxldCBnbG9iYWxMb2dnZXIgPSBudWxsO1xubGV0IGdsb2JhbFRyYWNlciA9IG51bGw7XG4vLyBJbml0aWFsaXplIHdpdGggYnVpbHQtaW4gc3BhbiBwcm9jZXNzb3JzXG5jb25zdCBzcGFuUHJvY2Vzc29ycyA9IFtuZXcgVG9rZW5TcGFuUHJvY2Vzc29yKCldO1xuLyoqXG4gKiBMaXN0IG9mIEFnZW50Q29udGV4dCBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIHRyaWdnZXIgaGVscGZ1bCBlcnJvciBtZXNzYWdlc1xuICogd2hlbiBhY2Nlc3NlZCBkaXJlY3RseSBvbiBIb25vQ29udGV4dCBpbiByb3V0ZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEFHRU5UX0NPTlRFWFRfUFJPUEVSVElFUyA9IFtcbiAgICAnbG9nZ2VyJyxcbiAgICAndHJhY2VyJyxcbiAgICAnc2Vzc2lvbklkJyxcbiAgICAna3YnLFxuICAgICdzdHJlYW0nLFxuICAgICd2ZWN0b3InLFxuICAgICdzYW5kYm94JyxcbiAgICAnc3RhdGUnLFxuICAgICd0aHJlYWQnLFxuICAgICdzZXNzaW9uJyxcbiAgICAnY29uZmlnJyxcbiAgICAnYXBwJyxcbiAgICAnd2FpdFVudGlsJyxcbl07XG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVyKCkge1xuICAgIHJldHVybiBnbG9iYWxSb3V0ZXJJbnN0YW5jZTtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gc2V0R2xvYmFsUm91dGVyKHJvdXRlcikge1xuICAgIGdsb2JhbFJvdXRlckluc3RhbmNlID0gcm91dGVyO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICogVGhpcyBpcyBhIHNpbmdsZXRvbiBjcmVhdGVkIGR1cmluZyBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcigpIHtcbiAgICByZXR1cm4gZ2xvYmFsTG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpIHtcbiAgICByZXR1cm4gZ2xvYmFsTG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldEdsb2JhbExvZ2dlcihsb2dnZXIpIHtcbiAgICBnbG9iYWxMb2dnZXIgPSBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhY2VyKCkge1xuICAgIHJldHVybiBnbG9iYWxUcmFjZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0R2xvYmFsVHJhY2VyKHRyYWNlcikge1xuICAgIGdsb2JhbFRyYWNlciA9IHRyYWNlcjtcbn1cbi8qKlxuICogQWRkIGEgY3VzdG9tIHNwYW4gcHJvY2Vzc29yIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgb3RlbCBjb25maWd1cmF0aW9uLlxuICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTcGFuUHJvY2Vzc29yKHByb2Nlc3Nvcikge1xuICAgIHNwYW5Qcm9jZXNzb3JzLnB1c2gocHJvY2Vzc29yKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFuUHJvY2Vzc29ycygpIHtcbiAgICByZXR1cm4gc3BhblByb2Nlc3NvcnM7XG59XG4vKipcbiAqIEhlbHBlciB0byBjYXN0IEhvbm9Db250ZXh0IHRvIGluY2x1ZGUgcHJpdmF0ZSB2YXJpYWJsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaXZhdGVDb250ZXh0KGMpIHtcbiAgICByZXR1cm4gYztcbn1cbi8qKlxuICogTm8tb3AgZm9yIFZpdGUtbmF0aXZlIGFyY2hpdGVjdHVyZSAoVml0ZSBtYW5hZ2VzIHNlcnZlciBsaWZlY3ljbGUpXG4gKi9cbmV4cG9ydCBjb25zdCBub3RpZnlSZWFkeSA9ICgpID0+IHtcbiAgICAvLyBOby1vcDogVml0ZSBoYW5kbGVzIHNlcnZlciByZWFkaW5lc3Ncbn07XG4vKipcbiAqIE5vLW9wIGZvciBWaXRlLW5hdGl2ZSBhcmNoaXRlY3R1cmUgKHJldHVybnMgbnVsbClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZlcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9zZXJ2ZXIuanMubWFwIiwKICAgICIvKipcbiAqIEdldCB0aGUgZ2xvYmFsIGFwcCBpbnN0YW5jZSAoc3R1YiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpXG4gKiBSZXR1cm5zIG51bGwgaW4gVml0ZS1uYXRpdmUgYXJjaGl0ZWN0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHAoKSB7XG4gICAgcmV0dXJuIG51bGw7XG59XG4vLyBSZS1leHBvcnQgZXZlbnQgZnVuY3Rpb25zIGZyb20gX2V2ZW50c1xuZXhwb3J0IHsgZmlyZUV2ZW50IH0gZnJvbSAnLi9fZXZlbnRzJztcbmltcG9ydCB7IGFkZEV2ZW50TGlzdGVuZXIgYXMgZ2xvYmFsQWRkRXZlbnRMaXN0ZW5lciwgcmVtb3ZlRXZlbnRMaXN0ZW5lciBhcyBnbG9iYWxSZW1vdmVFdmVudExpc3RlbmVyLCB9IGZyb20gJy4vX2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRMb2dnZXIsIGdldFJvdXRlciB9IGZyb20gJy4vX3NlcnZlcic7XG4vKipcbiAqIENyZWF0ZSBhbiBBZ2VudHVpdHkgYXBwbGljYXRpb24gd2l0aCBsaWZlY3ljbGUgbWFuYWdlbWVudC5cbiAqXG4gKiBJbiBWaXRlLW5hdGl2ZSBhcmNoaXRlY3R1cmU6XG4gKiAtIFRoaXMgb25seSBoYW5kbGVzIHNldHVwL3NodXRkb3duIGxpZmVjeWNsZVxuICogLSBSb3V0ZXIgY3JlYXRpb24gYW5kIG1pZGRsZXdhcmUgYXJlIGhhbmRsZWQgYnkgdGhlIGdlbmVyYXRlZCBlbnRyeSBmaWxlXG4gKiAtIFNlcnZlciBpcyBtYW5hZ2VkIGJ5IFZpdGUgKGRldikgb3IgQnVuLnNlcnZlIChwcm9kKVxuICpcbiAqIEB0ZW1wbGF0ZSBUQXBwU3RhdGUgLSBUeXBlIG9mIGFwcGxpY2F0aW9uIHN0YXRlIGZyb20gc2V0dXAoKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBhcHAudHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCB9IGZyb20gJ0BhZ2VudHVpdHkvcnVudGltZSc7XG4gKlxuICogY29uc3QgYXBwID0gYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgc2V0dXA6IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCBkYiA9IGF3YWl0IGNvbm5lY3REQigpO1xuICogICAgIHJldHVybiB7IGRiIH07XG4gKiAgIH0sXG4gKiAgIHNodXRkb3duOiBhc3luYyAoc3RhdGUpID0+IHtcbiAqICAgICBhd2FpdCBzdGF0ZS5kYi5jbG9zZSgpO1xuICogICB9XG4gKiB9KTtcbiAqXG4gKiAvLyBBY2Nlc3Mgc3RhdGUgaW4gYWdlbnRzIHZpYSBjdHguYXBwLmRiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcChjb25maWcpIHtcbiAgICAvLyBSdW4gc2V0dXAgdG8gZ2V0IGFwcCBzdGF0ZVxuICAgIGNvbnN0IHN0YXRlID0gY29uZmlnPy5zZXR1cCA/IGF3YWl0IGNvbmZpZy5zZXR1cCgpIDoge307XG4gICAgLy8gU3RvcmUgc3RhdGUgYW5kIGNvbmZpZyBnbG9iYWxseSBmb3IgZ2VuZXJhdGVkIGVudHJ5IGZpbGUgdG8gYWNjZXNzXG4gICAgZ2xvYmFsVGhpcy5fX0FHRU5UVUlUWV9BUFBfU1RBVEVfXyA9IHN0YXRlO1xuICAgIGdsb2JhbFRoaXMuX19BR0VOVFVJVFlfQVBQX0NPTkZJR19fID0gY29uZmlnO1xuICAgIC8vIFN0b3JlIHNodXRkb3duIGZ1bmN0aW9uIGZvciBjbGVhbnVwXG4gICAgY29uc3Qgc2h1dGRvd24gPSBjb25maWc/LnNodXRkb3duO1xuICAgIGlmIChzaHV0ZG93bikge1xuICAgICAgICBnbG9iYWxUaGlzLl9fQUdFTlRVSVRZX1NIVVRET1dOX18gPSBzaHV0ZG93bjtcbiAgICB9XG4gICAgLy8gUmV0dXJuIGEgbG9nZ2VyIHByb3h5IHRoYXQgbGF6aWx5IHJlc29sdmVzIHRvIHRoZSBnbG9iYWwgbG9nZ2VyXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBWaXRlIGJ1bmRsaW5nIGlubGluZXMgYW5kIHJlb3JkZXJzIG1vZHVsZSBjb2RlLFxuICAgIC8vIGNhdXNpbmcgYXBwLnRzIHRvIGV4ZWN1dGUgYmVmb3JlIGVudHJ5IGZpbGUgc2V0cyB0aGUgZ2xvYmFsIGxvZ2dlci5cbiAgICAvLyBUaGUgcHJveHkgZW5zdXJlcyBsb2dnZXIgd29ya3MgY29ycmVjdGx5IHdoZW4gYWN0dWFsbHkgdXNlZCAoaW4gaGFuZGxlcnMvY2FsbGJhY2tzKS5cbiAgICBjb25zdCBsb2dnZXIgPSB7XG4gICAgICAgIHRyYWNlOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2wgPSBnZXRMb2dnZXIoKTtcbiAgICAgICAgICAgIGlmIChnbClcbiAgICAgICAgICAgICAgICBnbC50cmFjZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVidWc6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnbCA9IGdldExvZ2dlcigpO1xuICAgICAgICAgICAgaWYgKGdsKVxuICAgICAgICAgICAgICAgIGdsLmRlYnVnKC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgICBpbmZvOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2wgPSBnZXRMb2dnZXIoKTtcbiAgICAgICAgICAgIGlmIChnbClcbiAgICAgICAgICAgICAgICBnbC5pbmZvKC4uLmFyZ3MpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbSU5GT10nLCAuLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2FybjogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdsID0gZ2V0TG9nZ2VyKCk7XG4gICAgICAgICAgICBpZiAoZ2wpXG4gICAgICAgICAgICAgICAgZ2wud2FybiguLi5hcmdzKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tXQVJOXScsIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdsID0gZ2V0TG9nZ2VyKCk7XG4gICAgICAgICAgICBpZiAoZ2wpXG4gICAgICAgICAgICAgICAgZ2wuZXJyb3IoLi4uYXJncyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0VSUk9SXScsIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuICAgICAgICBmYXRhbDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdsID0gZ2V0TG9nZ2VyKCk7XG4gICAgICAgICAgICBpZiAoZ2wpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsLmZhdGFsKC4uLmFyZ3MpO1xuICAgICAgICAgICAgLy8gRmFsbGJhY2s6IGxvZyB0byBjb25zb2xlIGJ1dCBsZXQgdGhlIHJlYWwgbG9nZ2VyIGhhbmRsZSBleGl0XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbRkFUQUxdJywgLi4uYXJncyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhdGFsIGVycm9yJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkOiAoYmluZGluZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdsID0gZ2V0TG9nZ2VyKCk7XG4gICAgICAgICAgICByZXR1cm4gZ2wgPyBnbC5jaGlsZChiaW5kaW5ncykgOiBsb2dnZXI7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICAvLyBDcmVhdGUgc2VydmVyIGluZm8gZnJvbSBlbnZpcm9ubWVudFxuICAgIGNvbnN0IHBvcnQgPSBwcm9jZXNzLmVudi5QT1JUIHx8ICczNTAwJztcbiAgICBjb25zdCBzZXJ2ZXIgPSB7XG4gICAgICAgIHVybDogYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fWAsXG4gICAgfTtcbiAgICAvLyBHZXQgcm91dGVyIGZyb20gZ2xvYmFsIChzZXQgYnkgZW50cnkgZmlsZSBiZWZvcmUgYXBwLnRzIGltcG9ydClcbiAgICAvLyBJbiBkZXYgbW9kZSwgcm91dGVyIG1heSBub3QgYmUgYXZhaWxhYmxlIGR1cmluZyBidW5kbGluZ1xuICAgIGNvbnN0IGdsb2JhbFJvdXRlciA9IGdldFJvdXRlcigpO1xuICAgIGlmICghZ2xvYmFsUm91dGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm91dGVyIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSByb3V0ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgY3JlYXRlQXBwKCkuIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgZHVyaW5nIGJ1bmRsaW5nIG9yIHdoZW4gdGhlIGVudHJ5IGZpbGUgaGFzIG5vdCBwcm9wZXJseSBzZXQgdXAgdGhlIHJvdXRlci4nKTtcbiAgICB9XG4gICAgY29uc3Qgcm91dGVyID0gZ2xvYmFsUm91dGVyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBzaHV0ZG93bixcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBnbG9iYWxBZGRFdmVudExpc3RlbmVyLFxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBnbG9iYWxSZW1vdmVFdmVudExpc3RlbmVyLFxuICAgIH07XG59XG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIGFwcCBzdGF0ZVxuICogVXNlZCBieSBnZW5lcmF0ZWQgZW50cnkgZmlsZSBhbmQgbWlkZGxld2FyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwU3RhdGUoKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuX19BR0VOVFVJVFlfQVBQX1NUQVRFX18gfHwge307XG59XG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIGFwcCBjb25maWdcbiAqIFVzZWQgYnkgZ2VuZXJhdGVkIGVudHJ5IGZpbGUgZm9yIG1pZGRsZXdhcmUgc2V0dXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcENvbmZpZygpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5fX0FHRU5UVUlUWV9BUFBfQ09ORklHX187XG59XG4vKipcbiAqIFNldCB0aGUgZ2xvYmFsIGFwcCBjb25maWcgKGZvciB0ZXN0aW5nIHB1cnBvc2VzKVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcHBDb25maWcoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBnbG9iYWxUaGlzLl9fQUdFTlRVSVRZX0FQUF9DT05GSUdfXztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdsb2JhbFRoaXMuX19BR0VOVFVJVFlfQVBQX0NPTkZJR19fID0gY29uZmlnO1xuICAgIH1cbn1cbi8qKlxuICogUnVuIHRoZSBnbG9iYWwgc2h1dGRvd24gZnVuY3Rpb25cbiAqIENhbGxlZCBieSBnZW5lcmF0ZWQgZW50cnkgZmlsZSBvbiBjbGVhbnVwXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaHV0ZG93bigpIHtcbiAgICBjb25zdCBzaHV0ZG93biA9IGdsb2JhbFRoaXMuX19BR0VOVFVJVFlfU0hVVERPV05fXztcbiAgICBpZiAoc2h1dGRvd24pIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXRBcHBTdGF0ZSgpO1xuICAgICAgICBhd2FpdCBzaHV0ZG93bihzdGF0ZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZ2V0U2lnbmVkQ29va2llLCBzZXRTaWduZWRDb29raWUgfSBmcm9tICdob25vL2Nvb2tpZSc7XG5pbXBvcnQgeyBmaXJlRXZlbnQgfSBmcm9tICcuL2FwcCc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlVXJscyB9IGZyb20gJ0BhZ2VudHVpdHkvc2VydmVyJztcbmltcG9ydCB7IGludGVybmFsIH0gZnJvbSAnLi9sb2dnZXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgdGltaW5nU2FmZUVxdWFsIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuLyoqXG4gKiBQYXJzZSBzZXJpYWxpemVkIHRocmVhZCBkYXRhLCBoYW5kbGluZyBib3RoIG9sZCAoZmxhdCBzdGF0ZSkgYW5kIG5ldyAoeyBzdGF0ZSwgbWV0YWRhdGEgfSkgZm9ybWF0cy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUaHJlYWREYXRhKHJhdykge1xuICAgIGlmICghcmF3KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmICgnc3RhdGUnIGluIHBhcnNlZCB8fCAnbWV0YWRhdGEnIGluIHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZmxhdFN0YXRlSnNvbjogcGFyc2VkLnN0YXRlID8gSlNPTi5zdHJpbmdpZnkocGFyc2VkLnN0YXRlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcGFyc2VkLm1ldGFkYXRhICYmIHR5cGVvZiBwYXJzZWQubWV0YWRhdGEgPT09ICdvYmplY3QnID8gcGFyc2VkLm1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBmbGF0U3RhdGVKc29uOiByYXcgfTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4geyBmbGF0U3RhdGVKc29uOiByYXcgfTtcbiAgICB9XG59XG4vLyBXZWFrTWFwIHRvIHN0b3JlIGV2ZW50IGxpc3RlbmVycyBmb3IgVGhyZWFkIGFuZCBTZXNzaW9uIGluc3RhbmNlc1xuY29uc3QgdGhyZWFkRXZlbnRMaXN0ZW5lcnMgPSBuZXcgV2Vha01hcCgpO1xuY29uc3Qgc2Vzc2lvbkV2ZW50TGlzdGVuZXJzID0gbmV3IFdlYWtNYXAoKTtcbi8vIEhlbHBlciB0byBmaXJlIHRocmVhZCBldmVudCBsaXN0ZW5lcnNcbmFzeW5jIGZ1bmN0aW9uIGZpcmVUaHJlYWRFdmVudCh0aHJlYWQsIGV2ZW50TmFtZSkge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IHRocmVhZEV2ZW50TGlzdGVuZXJzLmdldCh0aHJlYWQpO1xuICAgIGlmICghbGlzdGVuZXJzKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2FsbGJhY2tzID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgIGlmICghY2FsbGJhY2tzIHx8IGNhbGxiYWNrcy5zaXplID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGV2ZW50TmFtZSwgdGhyZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgcmUtdGhyb3cgLSBldmVudCBsaXN0ZW5lciBlcnJvcnMgc2hvdWxkIG5vdCBjcmFzaCB0aGUgc2VydmVyXG4gICAgICAgICAgICBpbnRlcm5hbC5lcnJvcihgRXJyb3IgaW4gdGhyZWFkIGV2ZW50IGxpc3RlbmVyIGZvciAnJHtldmVudE5hbWV9JzpgLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBIZWxwZXIgdG8gZmlyZSBzZXNzaW9uIGV2ZW50IGxpc3RlbmVyc1xuYXN5bmMgZnVuY3Rpb24gZmlyZVNlc3Npb25FdmVudChzZXNzaW9uLCBldmVudE5hbWUpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBzZXNzaW9uRXZlbnRMaXN0ZW5lcnMuZ2V0KHNlc3Npb24pO1xuICAgIGlmICghbGlzdGVuZXJzKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgY2FsbGJhY2tzID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgIGlmICghY2FsbGJhY2tzIHx8IGNhbGxiYWNrcy5zaXplID09PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGV2ZW50TmFtZSwgc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IHJlLXRocm93IC0gZXZlbnQgbGlzdGVuZXIgZXJyb3JzIHNob3VsZCBub3QgY3Jhc2ggdGhlIHNlcnZlclxuICAgICAgICAgICAgaW50ZXJuYWwuZXJyb3IoYEVycm9yIGluIHNlc3Npb24gZXZlbnQgbGlzdGVuZXIgZm9yICcke2V2ZW50TmFtZX0nOmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIEdlbmVyYXRlIHRocmVhZCBvciBzZXNzaW9uIElEXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJZChwcmVmaXgpIHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuICAgIHJldHVybiBgJHtwcmVmaXh9JHtwcmVmaXggPyAnXycgOiAnJ30ke2Fyci50b0hleCgpfWA7XG59XG4vKipcbiAqIFZhbGlkYXRlcyBhIHRocmVhZCBJRCBhZ2FpbnN0IHJ1bnRpbWUgY29uc3RyYWludHM6XG4gKiAtIE11c3Qgc3RhcnQgd2l0aCAndGhyZF8nXG4gKiAtIE11c3QgYmUgYXQgbGVhc3QgMzIgY2hhcmFjdGVycyBsb25nIChpbmNsdWRpbmcgcHJlZml4KVxuICogLSBNdXN0IGJlIGxlc3MgdGhhbiA2NCBjaGFyYWN0ZXJzIGxvbmdcbiAqIC0gTXVzdCBjb250YWluIG9ubHkgW2EtekEtWjAtOV0gYWZ0ZXIgJ3RocmRfJyBwcmVmaXggKG5vIGRhc2hlcyBmb3IgbWF4aW11bSByYW5kb21uZXNzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRocmVhZElkKHRocmVhZElkKSB7XG4gICAgaWYgKCF0aHJlYWRJZC5zdGFydHNXaXRoKCd0aHJkXycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVhZElkLmxlbmd0aCA8IDMyIHx8IHRocmVhZElkLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRUaHJlYWRJZENoYXJhY3RlcnMgPSAvXlthLXpBLVowLTldKyQvO1xuICAgIGlmICghdmFsaWRUaHJlYWRJZENoYXJhY3RlcnMudGVzdCh0aHJlYWRJZC5zdWJzdHJpbmcoNSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIFZhbGlkYXRlcyBhIHRocmVhZCBJRCBhbmQgdGhyb3dzIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzIGZvciBkZWJ1Z2dpbmcuXG4gKiBAcGFyYW0gdGhyZWFkSWQgVGhlIHRocmVhZCBJRCB0byB2YWxpZGF0ZVxuICogQHRocm93cyBFcnJvciB3aXRoIGRldGFpbGVkIG1lc3NhZ2UgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUaHJlYWRJZE9yVGhyb3codGhyZWFkSWQpIHtcbiAgICBpZiAoIXRocmVhZElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdGhlIFRocmVhZElEUHJvdmlkZXIgcmV0dXJuZWQgYW4gZW1wdHkgdGhyZWFkIGlkIGZvciBnZXRUaHJlYWRJZGApO1xuICAgIH1cbiAgICBpZiAoIXRocmVhZElkLnN0YXJ0c1dpdGgoJ3RocmRfJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgVGhyZWFkSURQcm92aWRlciByZXR1cm5lZCBhbiBpbnZhbGlkIHRocmVhZCBpZCAoJHt0aHJlYWRJZH0pIGZvciBnZXRUaHJlYWRJZC4gVGhlIHRocmVhZCBpZCBtdXN0IHN0YXJ0IHdpdGggdGhlIHByZWZpeCAndGhyZF8nLmApO1xuICAgIH1cbiAgICBpZiAodGhyZWFkSWQubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgVGhyZWFkSURQcm92aWRlciByZXR1cm5lZCBhbiBpbnZhbGlkIHRocmVhZCBpZCAoJHt0aHJlYWRJZH0pIGZvciBnZXRUaHJlYWRJZC4gVGhlIHRocmVhZCBpZCBtdXN0IGJlIGxlc3MgdGhhbiA2NCBjaGFyYWN0ZXJzIGxvbmcuYCk7XG4gICAgfVxuICAgIGlmICh0aHJlYWRJZC5sZW5ndGggPCAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRoZSBUaHJlYWRJRFByb3ZpZGVyIHJldHVybmVkIGFuIGludmFsaWQgdGhyZWFkIGlkICgke3RocmVhZElkfSkgZm9yIGdldFRocmVhZElkLiBUaGUgdGhyZWFkIGlkIG11c3QgYmUgYXQgbGVhc3QgMzIgY2hhcmFjdGVycyBsb25nLmApO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZFRocmVhZElkQ2hhcmFjdGVycyA9IC9eW2EtekEtWjAtOV0rJC87XG4gICAgaWYgKCF2YWxpZFRocmVhZElkQ2hhcmFjdGVycy50ZXN0KHRocmVhZElkLnN1YnN0cmluZyg1KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGUgVGhyZWFkSURQcm92aWRlciByZXR1cm5lZCBhbiBpbnZhbGlkIHRocmVhZCBpZCAoJHt0aHJlYWRJZH0pIGZvciBnZXRUaHJlYWRJZC4gVGhlIHRocmVhZCBpZCBtdXN0IGNvbnRhaW4gb25seSBjaGFyYWN0ZXJzIHRoYXQgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBbYS16QS1aMC05XS5gKTtcbiAgICB9XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGNvbm5lY3Rpb24gaXMgc2VjdXJlIChIVFRQUykgYnkgY2hlY2tpbmcgdGhlIHJlcXVlc3QgcHJvdG9jb2xcbiAqIGFuZCB4LWZvcndhcmRlZC1wcm90byBoZWFkZXIgKGZvciByZXZlcnNlIHByb3h5IHNjZW5hcmlvcykuXG4gKiBEZWZhdWx0cyB0byBmYWxzZSAoSFRUUCkgaWYgdW5hYmxlIHRvIGRldGVybWluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VjdXJlQ29ubmVjdGlvbihjdHgpIHtcbiAgICAvLyBDaGVjayB4LWZvcndhcmRlZC1wcm90byBoZWFkZXIgZmlyc3QgKHJldmVyc2UgcHJveHkpXG4gICAgY29uc3QgZm9yd2FyZGVkUHJvdG8gPSBjdHgucmVxLmhlYWRlcigneC1mb3J3YXJkZWQtcHJvdG8nKTtcbiAgICBpZiAoZm9yd2FyZGVkUHJvdG8pIHtcbiAgICAgICAgcmV0dXJuIGZvcndhcmRlZFByb3RvID09PSAnaHR0cHMnO1xuICAgIH1cbiAgICAvLyBDaGVjayB0aGUgcmVxdWVzdCBVUkwgcHJvdG9jb2wgaWYgYXZhaWxhYmxlXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGN0eC5yZXEudXJsKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGN0eC5yZXEudXJsKTtcbiAgICAgICAgICAgIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRcbiAgICB9XG4gICAgLy8gRGVmYXVsdCB0byBIVFRQIChlLmcuLCBmb3IgbG9jYWxob3N0IGRldmVsb3BtZW50KVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogU2lnbnMgYSB0aHJlYWQgSUQgdXNpbmcgSE1BQyBTSEEtMjU2IGFuZCByZXR1cm5zIGl0IGluIHRoZSBmb3JtYXQ6IHRocmVhZElkO3NpZ25hdHVyZVxuICogRm9ybWF0OiB0aHJkX2FiYzEyMztiYXNlNjRzaWduYXR1cmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25UaHJlYWRJZCh0aHJlYWRJZCwgc2VjcmV0KSB7XG4gICAgY29uc3QgaGFzaGVyID0gbmV3IEJ1bi5DcnlwdG9IYXNoZXIoJ3NoYTI1NicsIHNlY3JldCk7XG4gICAgaGFzaGVyLnVwZGF0ZSh0aHJlYWRJZCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlQmFzZTY0ID0gaGFzaGVyLmRpZ2VzdCgnYmFzZTY0Jyk7XG4gICAgcmV0dXJuIGAke3RocmVhZElkfTske3NpZ25hdHVyZUJhc2U2NH1gO1xufVxuLyoqXG4gKiBWZXJpZmllcyBhIHNpZ25lZCB0aHJlYWQgSUQgaGVhZGVyIGFuZCByZXR1cm5zIHRoZSB0aHJlYWQgSUQgaWYgdmFsaWQsIG9yIHVuZGVmaW5lZCBpZiBpbnZhbGlkLlxuICogRXhwZWN0ZWQgZm9ybWF0OiB0aHJkX2FiYzEyMztiYXNlNjRzaWduYXR1cmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVNpZ25lZFRocmVhZElkKHNpZ25lZFZhbHVlLCBzZWNyZXQpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHNpZ25lZFZhbHVlLnNwbGl0KCc7Jyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBbdGhyZWFkSWQsIHByb3ZpZGVkU2lnbmF0dXJlXSA9IHBhcnRzO1xuICAgIC8vIFZhbGlkYXRlIGJvdGggcGFydHMgZXhpc3RcbiAgICBpZiAoIXRocmVhZElkIHx8ICFwcm92aWRlZFNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aHJlYWQgSUQgZm9ybWF0IGJlZm9yZSB2ZXJpZnlpbmcgc2lnbmF0dXJlXG4gICAgaWYgKCFpc1ZhbGlkVGhyZWFkSWQodGhyZWFkSWQpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFJlLXNpZ24gdGhlIHRocmVhZCBJRCBhbmQgY29tcGFyZSBzaWduYXR1cmVzXG4gICAgY29uc3QgZXhwZWN0ZWRTaWduZWQgPSBhd2FpdCBzaWduVGhyZWFkSWQodGhyZWFkSWQsIHNlY3JldCk7XG4gICAgY29uc3QgZXhwZWN0ZWRTaWduYXR1cmUgPSBleHBlY3RlZFNpZ25lZC5zcGxpdCgnOycpWzFdO1xuICAgIC8vIFZhbGlkYXRlIHNpZ25hdHVyZSBleGlzdHNcbiAgICBpZiAoIWV4cGVjdGVkU2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIENvbnN0YW50LXRpbWUgY29tcGFyaXNvbiB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzXG4gICAgLy8gQ2hlY2sgbGVuZ3RocyBtYXRjaCBmaXJzdCAoZmFpbCBmYXN0IGlmIGRpZmZlcmVudCBsZW5ndGhzKVxuICAgIGlmIChwcm92aWRlZFNpZ25hdHVyZS5sZW5ndGggIT09IGV4cGVjdGVkU2lnbmF0dXJlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyBDb252ZXJ0IHRvIEJ1ZmZlcnMgZm9yIGNvbnN0YW50LXRpbWUgY29tcGFyaXNvblxuICAgICAgICBjb25zdCBwcm92aWRlZEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHByb3ZpZGVkU2lnbmF0dXJlLCAnYmFzZTY0Jyk7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkQnVmZmVyID0gQnVmZmVyLmZyb20oZXhwZWN0ZWRTaWduYXR1cmUsICdiYXNlNjQnKTtcbiAgICAgICAgaWYgKHRpbWluZ1NhZmVFcXVhbChwcm92aWRlZEJ1ZmZlciwgZXhwZWN0ZWRCdWZmZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyZWFkSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICAvLyBDb21wYXJpc29uIGZhaWxlZCBvciBidWZmZXIgY29udmVyc2lvbiBlcnJvclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBEZWZhdWx0VGhyZWFkSURQcm92aWRlciB3aWxsIGxvb2sgZm9yIGFuIEhUVFAgaGVhZGVyIGB4LXRocmVhZC1pZGAgZmlyc3QsXG4gKiB0aGVuIGZhbGwgYmFjayB0byBhIHNpZ25lZCBjb29raWUgbmFtZWQgYGF0aWRgLCBhbmQgdXNlIHRoYXQgYXMgdGhlIHRocmVhZCBpZC5cbiAqIElmIG5vdCBmb3VuZCwgZ2VuZXJhdGUgYSBuZXcgb25lLiBWYWxpZGF0ZXMgaW5jb21pbmcgdGhyZWFkIElEcyBhZ2FpbnN0XG4gKiBydW50aW1lIGNvbnN0cmFpbnRzLiBVc2VzIEFHRU5UVUlUWV9TREtfS0VZIGZvciBzaWduaW5nLCBmYWxscyBiYWNrIHRvICdhZ2VudHVpdHknLlxuICovXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRocmVhZElEUHJvdmlkZXIge1xuICAgIGdldFNlY3JldCgpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9TREtfS0VZIHx8ICdhZ2VudHVpdHknO1xuICAgIH1cbiAgICBhc3luYyBnZXRUaHJlYWRJZChfYXBwU3RhdGUsIGN0eCkge1xuICAgICAgICBsZXQgdGhyZWFkSWQ7XG4gICAgICAgIGNvbnN0IHNlY3JldCA9IHRoaXMuZ2V0U2VjcmV0KCk7XG4gICAgICAgIC8vIENoZWNrIHNpZ25lZCBoZWFkZXIgZmlyc3RcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWUgPSBjdHgucmVxLmhlYWRlcigneC10aHJlYWQtaWQnKTtcbiAgICAgICAgaWYgKGhlYWRlclZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJpZmllZFRocmVhZElkID0gYXdhaXQgdmVyaWZ5U2lnbmVkVGhyZWFkSWQoaGVhZGVyVmFsdWUsIHNlY3JldCk7XG4gICAgICAgICAgICBpZiAodmVyaWZpZWRUaHJlYWRJZCkge1xuICAgICAgICAgICAgICAgIHRocmVhZElkID0gdmVyaWZpZWRUaHJlYWRJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gc2lnbmVkIGNvb2tpZVxuICAgICAgICBpZiAoIXRocmVhZElkKSB7XG4gICAgICAgICAgICBjb25zdCBjb29raWVWYWx1ZSA9IGF3YWl0IGdldFNpZ25lZENvb2tpZShjdHgsIHNlY3JldCwgJ2F0aWQnKTtcbiAgICAgICAgICAgIGlmIChjb29raWVWYWx1ZSAmJiB0eXBlb2YgY29va2llVmFsdWUgPT09ICdzdHJpbmcnICYmIGlzVmFsaWRUaHJlYWRJZChjb29raWVWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJlYWRJZCA9IGNvb2tpZVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocmVhZElkID0gdGhyZWFkSWQgfHwgZ2VuZXJhdGVJZCgndGhyZCcpO1xuICAgICAgICBhd2FpdCBzZXRTaWduZWRDb29raWUoY3R4LCAnYXRpZCcsIHRocmVhZElkLCBzZWNyZXQsIHtcbiAgICAgICAgICAgIGh0dHBPbmx5OiB0cnVlLFxuICAgICAgICAgICAgc2VjdXJlOiBpc1NlY3VyZUNvbm5lY3Rpb24oY3R4KSxcbiAgICAgICAgICAgIHNhbWVTaXRlOiAnTGF4JyxcbiAgICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICAgIG1heEFnZTogNjA0ODAwLCAvLyAxIHdlZWsgaW4gc2Vjb25kc1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gU2V0IHNpZ25lZCBoZWFkZXIgaW4gcmVzcG9uc2VcbiAgICAgICAgY29uc3Qgc2lnbmVkSGVhZGVyID0gYXdhaXQgc2lnblRocmVhZElkKHRocmVhZElkLCBzZWNyZXQpO1xuICAgICAgICBjdHguaGVhZGVyKCd4LXRocmVhZC1pZCcsIHNpZ25lZEhlYWRlcik7XG4gICAgICAgIHJldHVybiB0aHJlYWRJZDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGF6eVRocmVhZFN0YXRlIHtcbiAgICAjc3RhdHVzID0gJ2lkbGUnO1xuICAgICNzdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAjcGVuZGluZ09wZXJhdGlvbnMgPSBbXTtcbiAgICAjaW5pdGlhbFN0YXRlSnNvbjtcbiAgICAjcmVzdG9yZUZuO1xuICAgICNsb2FkaW5nUHJvbWlzZSA9IG51bGw7XG4gICAgY29uc3RydWN0b3IocmVzdG9yZUZuKSB7XG4gICAgICAgIHRoaXMuI3Jlc3RvcmVGbiA9IHJlc3RvcmVGbjtcbiAgICB9XG4gICAgZ2V0IGxvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1cyA9PT0gJ2xvYWRlZCc7XG4gICAgfVxuICAgIGdldCBkaXJ0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3N0YXR1cyA9PT0gJ3BlbmRpbmctd3JpdGVzJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3BlbmRpbmdPcGVyYXRpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI3N0YXR1cyA9PT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRKc29uID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuI3N0YXRlKSk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEpzb24gIT09IHRoaXMuI2luaXRpYWxTdGF0ZUpzb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhc3luYyBlbnN1cmVMb2FkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuI2xvYWRpbmdQcm9taXNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNsb2FkaW5nUHJvbWlzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNsb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZG9Mb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsb2FkaW5nUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuI2xvYWRpbmdQcm9taXNlO1xuICAgIH1cbiAgICBhc3luYyBkb0xvYWQoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IGF3YWl0IHRoaXMuI3Jlc3RvcmVGbigpO1xuICAgICAgICAvLyBJbml0aWFsaXplIHN0YXRlIGZyb20gcmVzdG9yZWQgZGF0YVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IG5ldyBNYXAoc3RhdGUpO1xuICAgICAgICB0aGlzLiNpbml0aWFsU3RhdGVKc29uID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuI3N0YXRlKSk7XG4gICAgICAgIC8vIEFwcGx5IGFueSBwZW5kaW5nIG9wZXJhdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBvcCBvZiB0aGlzLiNwZW5kaW5nT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgc3dpdGNoIChvcC5vcCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NsZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jc3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2V0JzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNzdGF0ZS5zZXQob3Aua2V5LCBvcC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNzdGF0ZS5kZWxldGUob3Aua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdwdXNoJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuI3N0YXRlLmdldChvcC5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucHVzaChvcC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgbWF4UmVjb3JkcyBsaW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5tYXhSZWNvcmRzICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcubGVuZ3RoID4gb3AubWF4UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5zcGxpY2UoMCwgZXhpc3RpbmcubGVuZ3RoIC0gb3AubWF4UmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI3N0YXRlLnNldChvcC5rZXksIFtvcC52YWx1ZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXhpc3RpbmcgaXMgbm9uLWFycmF5LCBzaWxlbnRseSBza2lwIChlcnJvciB3b3VsZCBoYXZlIGJlZW4gdGhyb3duIGlmIGxvYWRlZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNwZW5kaW5nT3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLiNzdGF0dXMgPSAnbG9hZGVkJztcbiAgICB9XG4gICAgYXN5bmMgZ2V0KGtleSkge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy4jc3RhdGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLiNzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICAgICAgICB0aGlzLiNzdGF0ZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNwZW5kaW5nT3BlcmF0aW9ucy5wdXNoKHsgb3A6ICdzZXQnLCBrZXksIHZhbHVlIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuI3N0YXR1cyA9PT0gJ2lkbGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdHVzID0gJ3BlbmRpbmctd3JpdGVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBoYXMoa2V5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLiNzdGF0ZS5oYXMoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlKGtleSkge1xuICAgICAgICBpZiAodGhpcy4jc3RhdHVzID09PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgdGhpcy4jc3RhdGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNwZW5kaW5nT3BlcmF0aW9ucy5wdXNoKHsgb3A6ICdkZWxldGUnLCBrZXkgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy4jc3RhdHVzID09PSAnaWRsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXMgPSAncGVuZGluZy13cml0ZXMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGNsZWFyKCkge1xuICAgICAgICBpZiAodGhpcy4jc3RhdHVzID09PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgdGhpcy4jc3RhdGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIENsZWFyIHJlcGxhY2VzIGFsbCBwcmV2aW91cyBwZW5kaW5nIG9wZXJhdGlvbnNcbiAgICAgICAgICAgIHRoaXMuI3BlbmRpbmdPcGVyYXRpb25zID0gW3sgb3A6ICdjbGVhcicgfV07XG4gICAgICAgICAgICBpZiAodGhpcy4jc3RhdHVzID09PSAnaWRsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0dXMgPSAncGVuZGluZy13cml0ZXMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGVudHJpZXMoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI3N0YXRlLmVudHJpZXMoKSk7XG4gICAgfVxuICAgIGFzeW5jIGtleXMoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI3N0YXRlLmtleXMoKSk7XG4gICAgfVxuICAgIGFzeW5jIHZhbHVlcygpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVMb2FkZWQoKTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy4jc3RhdGUudmFsdWVzKCkpO1xuICAgIH1cbiAgICBhc3luYyBzaXplKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy4jc3RhdGUuc2l6ZTtcbiAgICB9XG4gICAgYXN5bmMgcHVzaChrZXksIHZhbHVlLCBtYXhSZWNvcmRzKSB7XG4gICAgICAgIGlmICh0aGlzLiNzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGxvYWRlZCwgcHVzaCB0byBsb2NhbCBhcnJheVxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLiNzdGF0ZS5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIEFwcGx5IG1heFJlY29yZHMgbGltaXRcbiAgICAgICAgICAgICAgICBpZiAobWF4UmVjb3JkcyAhPT0gdW5kZWZpbmVkICYmIGV4aXN0aW5nLmxlbmd0aCA+IG1heFJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmcuc3BsaWNlKDAsIGV4aXN0aW5nLmxlbmd0aCAtIG1heFJlY29yZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNzdGF0ZS5zZXQoa2V5LCBbdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHB1c2ggdG8gbm9uLWFycmF5IHZhbHVlIGF0IGtleSBcIiR7a2V5fVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBRdWV1ZSBwdXNoIG9wZXJhdGlvbiBmb3IgbWVyZ2VcbiAgICAgICAgICAgIGNvbnN0IG9wID0geyBvcDogJ3B1c2gnLCBrZXksIHZhbHVlIH07XG4gICAgICAgICAgICBpZiAobWF4UmVjb3JkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb3AubWF4UmVjb3JkcyA9IG1heFJlY29yZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNwZW5kaW5nT3BlcmF0aW9ucy5wdXNoKG9wKTtcbiAgICAgICAgICAgIGlmICh0aGlzLiNzdGF0dXMgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuI3N0YXR1cyA9ICdwZW5kaW5nLXdyaXRlcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXR1cyBmb3Igc2F2ZSBsb2dpY1xuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFN0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHBlbmRpbmcgb3BlcmF0aW9ucyBmb3IgbWVyZ2UgY29tbWFuZFxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFBlbmRpbmdPcGVyYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuI3BlbmRpbmdPcGVyYXRpb25zXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHNlcmlhbGl6ZWQgc3RhdGUgZm9yIGZ1bGwgc2F2ZS5cbiAgICAgKiBFbnN1cmVzIHN0YXRlIGlzIGxvYWRlZCBiZWZvcmUgc2VyaWFsaXppbmcuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2VyaWFsaXplZFN0YXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuI3N0YXRlKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRGVmYXVsdFRocmVhZCB7XG4gICAgaWQ7XG4gICAgc3RhdGU7XG4gICAgI21ldGFkYXRhID0gbnVsbDtcbiAgICAjbWV0YWRhdGFEaXJ0eSA9IGZhbHNlO1xuICAgICNtZXRhZGF0YUxvYWRQcm9taXNlID0gbnVsbDtcbiAgICBwcm92aWRlcjtcbiAgICAjcmVzdG9yZUZuO1xuICAgICNyZXN0b3JlZE1ldGFkYXRhO1xuICAgIGNvbnN0cnVjdG9yKHByb3ZpZGVyLCBpZCwgcmVzdG9yZUZuLCBpbml0aWFsTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuI3Jlc3RvcmVGbiA9IHJlc3RvcmVGbjtcbiAgICAgICAgdGhpcy4jcmVzdG9yZWRNZXRhZGF0YSA9IGluaXRpYWxNZXRhZGF0YTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBMYXp5VGhyZWFkU3RhdGUocmVzdG9yZUZuKTtcbiAgICB9XG4gICAgYXN5bmMgZW5zdXJlTWV0YWRhdGFMb2FkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNtZXRhZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIGhhdmUgaW5pdGlhbCBtZXRhZGF0YSBmcm9tIHRocmVhZCBjcmVhdGlvbiwgdXNlIGl0XG4gICAgICAgIGlmICh0aGlzLiNyZXN0b3JlZE1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI21ldGFkYXRhID0gdGhpcy4jcmVzdG9yZWRNZXRhZGF0YTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy4jbWV0YWRhdGFMb2FkUHJvbWlzZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jbWV0YWRhdGFMb2FkUHJvbWlzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNtZXRhZGF0YUxvYWRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kb0xvYWRNZXRhZGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jbWV0YWRhdGFMb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuI21ldGFkYXRhTG9hZFByb21pc2U7XG4gICAgfVxuICAgIGFzeW5jIGRvTG9hZE1ldGFkYXRhKCkge1xuICAgICAgICBjb25zdCB7IG1ldGFkYXRhIH0gPSBhd2FpdCB0aGlzLiNyZXN0b3JlRm4oKTtcbiAgICAgICAgdGhpcy4jbWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlTWV0YWRhdGFMb2FkZWQoKTtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy4jbWV0YWRhdGEgfTtcbiAgICB9XG4gICAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy4jbWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy4jbWV0YWRhdGFEaXJ0eSA9IHRydWU7XG4gICAgfVxuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgbGlzdGVuZXJzID0gdGhyZWFkRXZlbnRMaXN0ZW5lcnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIWxpc3RlbmVycykge1xuICAgICAgICAgICAgbGlzdGVuZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhyZWFkRXZlbnRMaXN0ZW5lcnMuc2V0KHRoaXMsIGxpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbGxiYWNrcyA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBjYWxsYmFja3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrcy5hZGQoY2FsbGJhY2spO1xuICAgIH1cbiAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhyZWFkRXZlbnRMaXN0ZW5lcnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIWxpc3RlbmVycylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gbGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICBpZiAoIWNhbGxiYWNrcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgfVxuICAgIGFzeW5jIGZpcmVFdmVudChldmVudE5hbWUpIHtcbiAgICAgICAgYXdhaXQgZmlyZVRocmVhZEV2ZW50KHRoaXMsIGV2ZW50TmFtZSk7XG4gICAgfVxuICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXIuZGVzdHJveSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhyZWFkIGhhcyBhbnkgZGF0YSAoc3RhdGUgb3IgbWV0YWRhdGEpXG4gICAgICovXG4gICAgYXN5bmMgZW1wdHkoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlU2l6ZSA9IGF3YWl0IHRoaXMuc3RhdGUuc2l6ZSgpO1xuICAgICAgICAvLyBDaGVjayBib3RoIGxvYWRlZCBtZXRhZGF0YSBhbmQgaW5pdGlhbCBtZXRhZGF0YSBmcm9tIGNvbnN0cnVjdG9yXG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLiNtZXRhZGF0YSA/PyB0aGlzLiNyZXN0b3JlZE1ldGFkYXRhID8/IHt9O1xuICAgICAgICByZXR1cm4gc3RhdGVTaXplID09PSAwICYmIE9iamVjdC5rZXlzKG1ldGEpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhyZWFkIG5lZWRzIHNhdmluZ1xuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5lZWRzU2F2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZGlydHkgfHwgdGhpcy4jbWV0YWRhdGFEaXJ0eTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzYXZlIG1vZGUgZm9yIHRoaXMgdGhyZWFkXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0U2F2ZU1vZGUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlU3RhdHVzID0gdGhpcy5zdGF0ZS5nZXRTdGF0dXMoKTtcbiAgICAgICAgaWYgKHN0YXRlU3RhdHVzID09PSAnaWRsZScgJiYgIXRoaXMuI21ldGFkYXRhRGlydHkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlU3RhdHVzID09PSAncGVuZGluZy13cml0ZXMnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21lcmdlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGVTdGF0dXMgPT09ICdsb2FkZWQnICYmICh0aGlzLnN0YXRlLmRpcnR5IHx8IHRoaXMuI21ldGFkYXRhRGlydHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Z1bGwnO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgbWV0YWRhdGEgd2FzIGNoYW5nZWQgd2l0aG91dCBsb2FkaW5nIHN0YXRlXG4gICAgICAgIGlmICh0aGlzLiNtZXRhZGF0YURpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gJ21lcmdlJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ25vbmUnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgcGVuZGluZyBvcGVyYXRpb25zIGZvciBtZXJnZSBjb21tYW5kXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0UGVuZGluZ09wZXJhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmdldFBlbmRpbmdPcGVyYXRpb25zKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBtZXRhZGF0YSBmb3Igc2F2aW5nIChyZXR1cm5zIG51bGwgaWYgbm90IGxvYWRlZC9tb2RpZmllZClcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRNZXRhZGF0YUZvclNhdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLiNtZXRhZGF0YURpcnR5ICYmIHRoaXMuI21ldGFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jbWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHNlcmlhbGl6ZWQgc3RhdGUgZm9yIGZ1bGwgc2F2ZS5cbiAgICAgKiBFbnN1cmVzIHN0YXRlIGlzIGxvYWRlZCBiZWZvcmUgc2VyaWFsaXppbmcuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2VyaWFsaXplZFN0YXRlKCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGUuZ2V0U2VyaWFsaXplZFN0YXRlKCk7XG4gICAgICAgIC8vIEFsc28gZW5zdXJlIG1ldGFkYXRhIGlzIGxvYWRlZFxuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy4jbWV0YWRhdGEgPz8gdGhpcy4jcmVzdG9yZWRNZXRhZGF0YSA/PyB7fTtcbiAgICAgICAgY29uc3QgaGFzU3RhdGUgPSBPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgaGFzTWV0YWRhdGEgPSBPYmplY3Qua2V5cyhtZXRhKS5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoIWhhc1N0YXRlICYmICFoYXNNZXRhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgaWYgKGhhc1N0YXRlKSB7XG4gICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc01ldGFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhLm1ldGFkYXRhID0gbWV0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIERlZmF1bHRTZXNzaW9uIHtcbiAgICBpZDtcbiAgICB0aHJlYWQ7XG4gICAgc3RhdGU7XG4gICAgbWV0YWRhdGE7XG4gICAgY29uc3RydWN0b3IodGhyZWFkLCBpZCwgbWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLnRocmVhZCA9IHRocmVhZDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhIHx8IHt9O1xuICAgIH1cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGxpc3RlbmVycyA9IHNlc3Npb25FdmVudExpc3RlbmVycy5nZXQodGhpcyk7XG4gICAgICAgIGlmICghbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBzZXNzaW9uRXZlbnRMaXN0ZW5lcnMuc2V0KHRoaXMsIGxpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbGxiYWNrcyA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBjYWxsYmFja3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrcy5hZGQoY2FsbGJhY2spO1xuICAgIH1cbiAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gc2Vzc2lvbkV2ZW50TGlzdGVuZXJzLmdldCh0aGlzKTtcbiAgICAgICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKCFjYWxsYmFja3MpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhbGxiYWNrcy5kZWxldGUoY2FsbGJhY2spO1xuICAgIH1cbiAgICBhc3luYyBmaXJlRXZlbnQoZXZlbnROYW1lKSB7XG4gICAgICAgIGF3YWl0IGZpcmVTZXNzaW9uRXZlbnQodGhpcywgZXZlbnROYW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIHNlc3Npb24gc3RhdGUgdG8gSlNPTiBzdHJpbmcgZm9yIHBlcnNpc3RlbmNlLlxuICAgICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHN0YXRlIGlzIGVtcHR5IG9yIGV4Y2VlZHMgMU1CIGxpbWl0LlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNlcmlhbGl6ZVVzZXJEYXRhKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSBPYmplY3QuZnJvbUVudHJpZXModGhpcy5zdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgICAgICAgICAgIC8vIENoZWNrIDFNQiBsaW1pdCAoMSwwNDgsNTc2IGJ5dGVzKVxuICAgICAgICAgICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbikubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHNpemVJbkJ5dGVzID4gMTA0ODU3Nikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFNlc3Npb24gJHt0aGlzLmlkfSB1c2VyX2RhdGEgZXhjZWVkcyAxTUIgbGltaXQgKCR7c2l6ZUluQnl0ZXN9IGJ5dGVzKSwgZGF0YSB3aWxsIG5vdCBiZSBwZXJzaXN0ZWRgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNlcmlhbGl6ZSBzZXNzaW9uICR7dGhpcy5pZH0gdXNlcl9kYXRhOmAsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRocmVhZFdlYlNvY2tldENsaWVudCB7XG4gICAgd3MgPSBudWxsO1xuICAgIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICBwZW5kaW5nUmVxdWVzdHMgPSBuZXcgTWFwKCk7XG4gICAgcmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIG1heFJlY29ubmVjdEF0dGVtcHRzO1xuICAgIGFwaUtleTtcbiAgICB3c1VybDtcbiAgICB3c0Nvbm5lY3RpbmcgPSBudWxsO1xuICAgIHJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICBpc0Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgaW5pdGlhbENvbm5lY3RSZXNvbHZlID0gbnVsbDtcbiAgICBpbml0aWFsQ29ubmVjdFJlamVjdCA9IG51bGw7XG4gICAgY29ubmVjdGlvblRpbWVvdXRNcztcbiAgICByZXF1ZXN0VGltZW91dE1zO1xuICAgIHJlY29ubmVjdEJhc2VEZWxheU1zO1xuICAgIHJlY29ubmVjdE1heERlbGF5TXM7XG4gICAgY29uc3RydWN0b3IoYXBpS2V5LCB3c1VybCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgICAgICB0aGlzLndzVXJsID0gd3NVcmw7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblRpbWVvdXRNcyA9IG9wdGlvbnMuY29ubmVjdGlvblRpbWVvdXRNcyA/PyAxMF8wMDA7XG4gICAgICAgIHRoaXMucmVxdWVzdFRpbWVvdXRNcyA9IG9wdGlvbnMucmVxdWVzdFRpbWVvdXRNcyA/PyAxMF8wMDA7XG4gICAgICAgIHRoaXMucmVjb25uZWN0QmFzZURlbGF5TXMgPSBvcHRpb25zLnJlY29ubmVjdEJhc2VEZWxheU1zID8/IDFfMDAwO1xuICAgICAgICB0aGlzLnJlY29ubmVjdE1heERlbGF5TXMgPSBvcHRpb25zLnJlY29ubmVjdE1heERlbGF5TXMgPz8gMzBfMDAwO1xuICAgICAgICB0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzID0gb3B0aW9ucy5tYXhSZWNvbm5lY3RBdHRlbXB0cyA/PyA1O1xuICAgIH1cbiAgICBhc3luYyBjb25uZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGluaXRpYWwgY29ubmVjdCBwcm9taXNlIGNhbGxiYWNrcyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0XG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGNvbm5lY3Rpb24gdGltZW91dFxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWplY3RGbiA9IHRoaXMuaW5pdGlhbENvbm5lY3RSZWplY3QgfHwgcmVqZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZWplY3RGbihuZXcgRXJyb3IoYFdlYlNvY2tldCBjb25uZWN0aW9uIHRpbWVvdXQgKCR7dGhpcy5jb25uZWN0aW9uVGltZW91dE1zfW1zKWApKTtcbiAgICAgICAgICAgIH0sIHRoaXMuY29ubmVjdGlvblRpbWVvdXRNcyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHRoaXMud3NVcmwpO1xuICAgICAgICAgICAgICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBhdXRoZW50aWNhdGlvbiAoZG8gTk9UIGNsZWFyIHRpbWVvdXQgeWV0IC0gd2FpdCBmb3IgYXV0aCByZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cz8uc2VuZChKU09OLnN0cmluZ2lmeSh7IGF1dGhvcml6YXRpb246IHRoaXMuYXBpS2V5IH0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGF1dGggcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnc3VjY2VzcycgaW4gbWVzc2FnZSAmJiAhdGhpcy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3Rpb25UaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvbHZlIGJvdGggdGhlIGN1cnJlbnQgcHJvbWlzZSBhbmQgdGhlIGluaXRpYWwgY29ubmVjdCBwcm9taXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVGbiA9IHRoaXMuaW5pdGlhbENvbm5lY3RSZXNvbHZlIHx8IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsQ29ubmVjdFJlamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVGbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBXZWJTb2NrZXQgYXV0aGVudGljYXRpb24gZmFpbGVkOiAke21lc3NhZ2UuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0Rm4gPSB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0IHx8IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsQ29ubmVjdFJlc29sdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0Rm4oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGFjdGlvbiByZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdpZCcgaW4gbWVzc2FnZSAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMobWVzc2FnZS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nUmVxdWVzdHMuZ2V0KG1lc3NhZ2UuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShtZXNzYWdlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcucmVzb2x2ZShtZXNzYWdlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IgfHwgJ1JlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgcGFyc2UgZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKF9ldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoY29ubmVjdGlvblRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmVqZWN0IGltbWVkaWF0ZWx5IGlmIHdlJ2xsIGF0dGVtcHQgcmVjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA+PSB0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzIHx8IHRoaXMuaXNEaXNwb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlamVjdEZuID0gdGhpcy5pbml0aWFsQ29ubmVjdFJlamVjdCB8fCByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsQ29ubmVjdFJlc29sdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZWplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdEZuKG5ldyBFcnJvcihgV2ViU29ja2V0IGVycm9yYCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3Rpb25UaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aGVudGljYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlamVjdCBhbGwgcGVuZGluZyByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpZCwgcGVuZGluZ10gb2YgdGhpcy5wZW5kaW5nUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcucmVqZWN0KG5ldyBFcnJvcignV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHJlY29ubmVjdGlvbiBpZiBkaXNwb3NlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWplY3QgaW5pdGlhbCBjb25uZWN0IGlmIHN0aWxsIHBlbmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2FzQXV0aGVudGljYXRlZCAmJiB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsQ29ubmVjdFJlamVjdChuZXcgRXJyb3IoJ1dlYlNvY2tldCBjbG9zZWQgYmVmb3JlIGF1dGhlbnRpY2F0aW9uJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHJlY29ubmVjdGlvbiBpZiB3aXRoaW4gcmV0cnkgbGltaXRzIChldmVuIGlmIGF1dGggZGlkbid0IGNvbXBsZXRlKVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgc2VydmVyIHJvbGxvdXRzIHdoZXJlIGNvbm5lY3Rpb24gY2xvc2VzIGJlZm9yZSBhdXRoIGZpbmlzaGVzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzIDwgdGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbih0aGlzLnJlY29ubmVjdEJhc2VEZWxheU1zICogTWF0aC5wb3coMiwgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyksIHRoaXMucmVjb25uZWN0TWF4RGVsYXlNcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBXZWJTb2NrZXQgZGlzY29ubmVjdGVkLCBhdHRlbXB0aW5nIHJlY29ubmVjdGlvbiAke3RoaXMucmVjb25uZWN0QXR0ZW1wdHN9LyR7dGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0c30gaW4gJHtkZWxheX1tc2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgcmVjb25uZWN0aW9uIHdpdGggYmFja29mZiBkZWxheVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgY29ubmVjdGlvbiBwcm9taXNlIGZvciByZWNvbm5lY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndzQ29ubmVjdGluZyA9IHRoaXMuY29ubmVjdCgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjb25uZWN0aW9uIGZhaWxlZCwgcmVzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53c0Nvbm5lY3RpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuZXJyb3IoYFdlYlNvY2tldCBkaXNjb25uZWN0ZWQgYWZ0ZXIgJHt0aGlzLnJlY29ubmVjdEF0dGVtcHRzfSBhdHRlbXB0cywgZ2l2aW5nIHVwYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWplY3QgaW5pdGlhbCBjb25uZWN0IGlmIHN0aWxsIHBlbmRpbmcgKGFsbCBhdHRlbXB0cyBleGhhdXN0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdhc0F1dGhlbnRpY2F0ZWQgJiYgdGhpcy5pbml0aWFsQ29ubmVjdFJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZWplY3QobmV3IEVycm9yKGBXZWJTb2NrZXQgY2xvc2VkIGJlZm9yZSBhdXRoZW50aWNhdGlvbiBhZnRlciAke3RoaXMucmVjb25uZWN0QXR0ZW1wdHN9IGF0dGVtcHRzYCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uVGltZW91dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0Rm4gPSB0aGlzLmluaXRpYWxDb25uZWN0UmVqZWN0IHx8IHJlamVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVzb2x2ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsQ29ubmVjdFJlamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVqZWN0Rm4oZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHJlc3RvcmUodGhyZWFkSWQpIHtcbiAgICAgICAgLy8gV2FpdCBmb3IgY29ubmVjdGlvbi9yZWNvbm5lY3Rpb24gaWYgaW4gcHJvZ3Jlc3NcbiAgICAgICAgaWYgKHRoaXMud3NDb25uZWN0aW5nKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndzQ29ubmVjdGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCB8fCAhdGhpcy53cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJTb2NrZXQgbm90IGNvbm5lY3RlZCBvciBhdXRoZW50aWNhdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5zZXQocmVxdWVzdElkLCB7IHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdyZXN0b3JlJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRocmVhZF9pZDogdGhyZWFkSWQgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuICAgICAgICAgICAgLy8gVGltZW91dCBhZnRlciBjb25maWd1cmVkIGR1cmF0aW9uXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdHMuaGFzKHJlcXVlc3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1JlcXVlc3QgdGltZW91dCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLnJlcXVlc3RUaW1lb3V0TXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2F2ZSh0aHJlYWRJZCwgdXNlckRhdGEsIHRocmVhZE1ldGFkYXRhKSB7XG4gICAgICAgIC8vIFdhaXQgZm9yIGNvbm5lY3Rpb24vcmVjb25uZWN0aW9uIGlmIGluIHByb2dyZXNzXG4gICAgICAgIGlmICh0aGlzLndzQ29ubmVjdGluZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53c0Nvbm5lY3Rpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQgfHwgIXRoaXMud3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViU29ja2V0IG5vdCBjb25uZWN0ZWQgb3IgYXV0aGVudGljYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIDFNQiBsaW1pdFxuICAgICAgICBjb25zdCBzaXplSW5CeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh1c2VyRGF0YSkubGVuZ3RoO1xuICAgICAgICBpZiAoc2l6ZUluQnl0ZXMgPiAxMDQ4NTc2KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaHJlYWQgJHt0aHJlYWRJZH0gdXNlcl9kYXRhIGV4Y2VlZHMgMU1CIGxpbWl0ICgke3NpemVJbkJ5dGVzfSBieXRlcyksIGRhdGEgd2lsbCBub3QgYmUgcGVyc2lzdGVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5zZXQocmVxdWVzdElkLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZTogKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0aHJlYWRfaWQ6IHRocmVhZElkLFxuICAgICAgICAgICAgICAgIHVzZXJfZGF0YTogdXNlckRhdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRocmVhZE1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHRocmVhZE1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5tZXRhZGF0YSA9IHRocmVhZE1ldGFkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NhdmUnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgYWZ0ZXIgY29uZmlndXJlZCBkdXJhdGlvblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1JlcXVlc3RzLmhhcyhyZXF1ZXN0SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdSZXF1ZXN0IHRpbWVvdXQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5yZXF1ZXN0VGltZW91dE1zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZSh0aHJlYWRJZCkge1xuICAgICAgICAvLyBXYWl0IGZvciBjb25uZWN0aW9uL3JlY29ubmVjdGlvbiBpZiBpbiBwcm9ncmVzc1xuICAgICAgICBpZiAodGhpcy53c0Nvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud3NDb25uZWN0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hdXRoZW50aWNhdGVkIHx8ICF0aGlzLndzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYlNvY2tldCBub3QgY29ubmVjdGVkIG9yIGF1dGhlbnRpY2F0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzLnNldChyZXF1ZXN0SWQsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRocmVhZF9pZDogdGhyZWFkSWQgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuICAgICAgICAgICAgLy8gVGltZW91dCBhZnRlciBjb25maWd1cmVkIGR1cmF0aW9uXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdHMuaGFzKHJlcXVlc3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1JlcXVlc3QgdGltZW91dCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLnJlcXVlc3RUaW1lb3V0TXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgbWVyZ2UodGhyZWFkSWQsIG9wZXJhdGlvbnMsIG1ldGFkYXRhKSB7XG4gICAgICAgIC8vIFdhaXQgZm9yIGNvbm5lY3Rpb24vcmVjb25uZWN0aW9uIGlmIGluIHByb2dyZXNzXG4gICAgICAgIGlmICh0aGlzLndzQ29ubmVjdGluZykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53c0Nvbm5lY3Rpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQgfHwgIXRoaXMud3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViU29ja2V0IG5vdCBjb25uZWN0ZWQgb3IgYXV0aGVudGljYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuc2V0KHJlcXVlc3RJZCwge1xuICAgICAgICAgICAgICAgIHJlc29sdmU6ICgpID0+IHJlc29sdmUoKSxcbiAgICAgICAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhyZWFkX2lkOiB0aHJlYWRJZCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YSAmJiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGRhdGEubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdtZXJnZScsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuICAgICAgICAgICAgLy8gVGltZW91dCBhZnRlciBjb25maWd1cmVkIGR1cmF0aW9uXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdHMuaGFzKHJlcXVlc3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1JlcXVlc3QgdGltZW91dCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLnJlcXVlc3RUaW1lb3V0TXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYW51cCgpIHtcbiAgICAgICAgLy8gTWFyayBhcyBkaXNwb3NlZCB0byBwcmV2ZW50IG5ldyByZWNvbm5lY3Rpb24gYXR0ZW1wdHNcbiAgICAgICAgdGhpcy5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHJlY29ubmVjdGlvbiB0aW1lclxuICAgICAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3MpIHtcbiAgICAgICAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMud3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgdGhpcy53c0Nvbm5lY3RpbmcgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxDb25uZWN0UmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdGlhbENvbm5lY3RSZWplY3QgPSBudWxsO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGhyZWFkUHJvdmlkZXIge1xuICAgIGFwcFN0YXRlID0gbnVsbDtcbiAgICB3c0NsaWVudCA9IG51bGw7XG4gICAgd3NDb25uZWN0aW5nID0gbnVsbDtcbiAgICB0aHJlYWRJRFByb3ZpZGVyID0gbnVsbDtcbiAgICBhc3luYyBpbml0aWFsaXplKGFwcFN0YXRlKSB7XG4gICAgICAgIHRoaXMuYXBwU3RhdGUgPSBhcHBTdGF0ZTtcbiAgICAgICAgdGhpcy50aHJlYWRJRFByb3ZpZGVyID0gbmV3IERlZmF1bHRUaHJlYWRJRFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIEluaXRpYWxpemUgV2ViU29ja2V0IGNvbm5lY3Rpb24gZm9yIHRocmVhZCBwZXJzaXN0ZW5jZSAoYXN5bmMsIG5vbi1ibG9ja2luZylcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1NES19LRVk7XG4gICAgICAgIGlmIChhcGlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VVcmxzID0gZ2V0U2VydmljZVVybHMocHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1JFR0lPTiA/PyAndXNjJyk7XG4gICAgICAgICAgICBjb25zdCBjYXRhbHlzdFVybCA9IHNlcnZpY2VVcmxzLmNhdGFseXN0O1xuICAgICAgICAgICAgY29uc3Qgd3NVcmwgPSBuZXcgVVJMKCcvdGhyZWFkL3dzJywgY2F0YWx5c3RVcmwucmVwbGFjZSgvXmh0dHAvLCAnd3MnKSk7XG4gICAgICAgICAgICBpbnRlcm5hbC5kZWJ1ZygnY29ubmVjdGluZyB0byAlcycsIHdzVXJsKTtcbiAgICAgICAgICAgIHRoaXMud3NDbGllbnQgPSBuZXcgVGhyZWFkV2ViU29ja2V0Q2xpZW50KGFwaUtleSwgd3NVcmwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAvLyBDb25uZWN0IGluIGJhY2tncm91bmQsIGRvbid0IGJsb2NrIGluaXRpYWxpemF0aW9uXG4gICAgICAgICAgICB0aGlzLndzQ29ubmVjdGluZyA9IHRoaXMud3NDbGllbnRcbiAgICAgICAgICAgICAgICAuY29ubmVjdCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud3NDb25uZWN0aW5nID0gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5lcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhyZWFkIFdlYlNvY2tldDonLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMud3NDbGllbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMud3NDb25uZWN0aW5nID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldFRocmVhZElEUHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy50aHJlYWRJRFByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIGFzeW5jIHJlc3RvcmUoY3R4KSB7XG4gICAgICAgIGNvbnN0IHRocmVhZElkID0gYXdhaXQgdGhpcy50aHJlYWRJRFByb3ZpZGVyLmdldFRocmVhZElkKHRoaXMuYXBwU3RhdGUsIGN0eCk7XG4gICAgICAgIHZhbGlkYXRlVGhyZWFkSWRPclRocm93KHRocmVhZElkKTtcbiAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gY3JlYXRpbmcgbGF6eSB0aHJlYWQgJXMgKG5vIGVhZ2VyIHJlc3RvcmUpJywgdGhyZWFkSWQpO1xuICAgICAgICAvLyBDcmVhdGUgYSByZXN0b3JlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgbGF6aWx5IHdoZW4gc3RhdGUvbWV0YWRhdGEgaXMgYWNjZXNzZWRcbiAgICAgICAgY29uc3QgcmVzdG9yZUZuID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gbGF6eSBsb2FkaW5nIHN0YXRlIGZvciB0aHJlYWQgJXMnLCB0aHJlYWRJZCk7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbiBpZiBzdGlsbCBjb25uZWN0aW5nXG4gICAgICAgICAgICBpZiAodGhpcy53c0Nvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSB3YWl0aW5nIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMud3NDb25uZWN0aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLndzQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gbm8gV2ViU29ja2V0IGNsaWVudCBhdmFpbGFibGUsIHJldHVybmluZyBlbXB0eSBzdGF0ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlOiBuZXcgTWFwKCksIG1ldGFkYXRhOiB7fSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0b3JlZERhdGEgPSBhd2FpdCB0aGlzLndzQ2xpZW50LnJlc3RvcmUodGhyZWFkSWQpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlZERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gcmVzdG9yZWQgc3RhdGU6ICVkIGJ5dGVzJywgcmVzdG9yZWREYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmxhdFN0YXRlSnNvbiwgbWV0YWRhdGEgfSA9IHBhcnNlVGhyZWFkRGF0YShyZXN0b3JlZERhdGEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZsYXRTdGF0ZUpzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZmxhdFN0YXRlSnNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSBmYWlsZWQgdG8gcGFyc2Ugc3RhdGUgSlNPTicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlLCBtZXRhZGF0YTogbWV0YWRhdGEgfHwge30gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gbm8gZXhpc3Rpbmcgc3RhdGUgZm91bmQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0ZTogbmV3IE1hcCgpLCBtZXRhZGF0YToge30gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSBXZWJTb2NrZXQgcmVzdG9yZSBmYWlsZWQ6ICVzJywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0ZTogbmV3IE1hcCgpLCBtZXRhZGF0YToge30gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGhyZWFkID0gbmV3IERlZmF1bHRUaHJlYWQodGhpcywgdGhyZWFkSWQsIHJlc3RvcmVGbik7XG4gICAgICAgIGF3YWl0IGZpcmVFdmVudCgndGhyZWFkLmNyZWF0ZWQnLCB0aHJlYWQpO1xuICAgICAgICByZXR1cm4gdGhyZWFkO1xuICAgIH1cbiAgICBhc3luYyBzYXZlKHRocmVhZCkge1xuICAgICAgICBpZiAodGhyZWFkIGluc3RhbmNlb2YgRGVmYXVsdFRocmVhZCkge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZU1vZGUgPSB0aHJlYWQuZ2V0U2F2ZU1vZGUoKTtcbiAgICAgICAgICAgIGludGVybmFsLmluZm8oJ1t0aHJlYWRdIERlZmF1bHRUaHJlYWRQcm92aWRlci5zYXZlKCkgLSB0aHJlYWQgJXMsIHNhdmVNb2RlOiAlcywgaGFzV3NDbGllbnQ6ICVzJywgdGhyZWFkLmlkLCBzYXZlTW9kZSwgISF0aGlzLndzQ2xpZW50KTtcbiAgICAgICAgICAgIGlmIChzYXZlTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gc2tpcHBpbmcgc2F2ZSAtIG5vIGNoYW5nZXMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXYWl0IGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbiBpZiBzdGlsbCBjb25uZWN0aW5nXG4gICAgICAgICAgICBpZiAodGhpcy53c0Nvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSB3YWl0aW5nIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMud3NDb25uZWN0aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLndzQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gbm8gV2ViU29ja2V0IGNsaWVudCBhdmFpbGFibGUsIHNraXBwaW5nIHNhdmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzYXZlTW9kZSA9PT0gJ21lcmdlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb25zID0gdGhyZWFkLmdldFBlbmRpbmdPcGVyYXRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhyZWFkLmdldE1ldGFkYXRhRm9yU2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSBzZW5kaW5nIG1lcmdlIGNvbW1hbmQgd2l0aCAlZCBvcGVyYXRpb25zJywgb3BlcmF0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLndzQ2xpZW50Lm1lcmdlKHRocmVhZC5pZCwgb3BlcmF0aW9ucywgbWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSBXZWJTb2NrZXQgbWVyZ2UgY29tcGxldGVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNhdmVNb2RlID09PSAnZnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IHRocmVhZC5nZXRTZXJpYWxpemVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gc2F2aW5nIHRvIFdlYlNvY2tldCwgc2VyaWFsaXplZCBsZW5ndGg6ICVkJywgc2VyaWFsaXplZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRocmVhZC5nZXRNZXRhZGF0YUZvclNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53c0NsaWVudC5zYXZlKHRocmVhZC5pZCwgc2VyaWFsaXplZCwgbWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbdGhyZWFkXSBXZWJTb2NrZXQgc2F2ZSBjb21wbGV0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3RocmVhZF0gV2ViU29ja2V0IHNhdmUvbWVyZ2UgZmFpbGVkOiAlcycsIGVycik7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBhbGxvdyByZXF1ZXN0IHRvIGNvbXBsZXRlIGV2ZW4gaWYgc2F2ZSBmYWlsc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlc3Ryb3kodGhyZWFkKSB7XG4gICAgICAgIGlmICh0aHJlYWQgaW5zdGFuY2VvZiBEZWZhdWx0VGhyZWFkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIFdlYlNvY2tldCBjb25uZWN0aW9uIGlmIHN0aWxsIGNvbm5lY3RpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53c0Nvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53c0Nvbm5lY3Rpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aHJlYWQgZnJvbSByZW1vdGUgc3RvcmFnZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLndzQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLndzQ2xpZW50LmRlbGV0ZSh0aHJlYWQuaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocmVhZCBtaWdodCBub3QgZXhpc3QgaW4gcmVtb3RlIHN0b3JhZ2UgaWYgaXQgd2FzIG5ldmVyIHBlcnNpc3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3JtYWwgZm9yIGVwaGVtZXJhbCB0aHJlYWRzLCBzbyBqdXN0IGxvZyBhdCBkZWJ1ZyBsZXZlbFxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuZGVidWcoYFRocmVhZCAke3RocmVhZC5pZH0gbm90IGZvdW5kIGluIHJlbW90ZSBzdG9yYWdlIChhbHJlYWR5IGRlbGV0ZWQgb3IgbmV2ZXIgcGVyc2lzdGVkKWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCBsb2NhbCBjbGVhbnVwIGV2ZW4gaWYgcmVtb3RlIGRlbGV0ZSBmYWlsc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRocmVhZC5maXJlRXZlbnQoJ2Rlc3Ryb3llZCcpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZpcmVFdmVudCgndGhyZWFkLmRlc3Ryb3llZCcsIHRocmVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aHJlYWRFdmVudExpc3RlbmVycy5kZWxldGUodGhyZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0U2Vzc2lvblByb3ZpZGVyIHtcbiAgICBzZXNzaW9ucyA9IG5ldyBNYXAoKTtcbiAgICBhc3luYyBpbml0aWFsaXplKF9hcHBTdGF0ZSkge1xuICAgICAgICAvLyBObyBpbml0aWFsaXphdGlvbiBuZWVkZWQgZm9yIGluLW1lbW9yeSBwcm92aWRlclxuICAgIH1cbiAgICBhc3luYyByZXN0b3JlKHRocmVhZCwgc2Vzc2lvbklkKSB7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uXSByZXN0b3Jpbmcgc2Vzc2lvbiAlcyBmb3IgdGhyZWFkICVzJywgc2Vzc2lvbklkLCB0aHJlYWQuaWQpO1xuICAgICAgICBsZXQgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgc2Vzc2lvbiA9IG5ldyBEZWZhdWx0U2Vzc2lvbih0aHJlYWQsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25zLnNldChzZXNzaW9uSWQsIHNlc3Npb24pO1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIGNyZWF0ZWQgbmV3IHNlc3Npb24sIGZpcmluZyBzZXNzaW9uLnN0YXJ0ZWQnKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcmVFdmVudCgnc2Vzc2lvbi5zdGFydGVkJywgc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbc2Vzc2lvbl0gZm91bmQgZXhpc3Rpbmcgc2Vzc2lvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH1cbiAgICBhc3luYyBzYXZlKHNlc3Npb24pIHtcbiAgICAgICAgaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBEZWZhdWx0U2Vzc2lvbikge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIERlZmF1bHRTZXNzaW9uUHJvdmlkZXIuc2F2ZSgpIC0gZmlyaW5nIGNvbXBsZXRlZCBldmVudCBmb3Igc2Vzc2lvbiAlcycsIHNlc3Npb24uaWQpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzZXNzaW9uLmZpcmVFdmVudCgnY29tcGxldGVkJyk7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIHNlc3Npb24uZmlyZUV2ZW50IGNvbXBsZXRlZCwgZmlyaW5nIGFwcCBldmVudCcpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZpcmVFdmVudCgnc2Vzc2lvbi5jb21wbGV0ZWQnLCBzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbc2Vzc2lvbl0gc2Vzc2lvbi5jb21wbGV0ZWQgYXBwIGV2ZW50IGZpcmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25zLmRlbGV0ZShzZXNzaW9uLmlkKTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uRXZlbnRMaXN0ZW5lcnMuZGVsZXRlKHNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Vzc2lvbi5qcy5tYXAiLAogICAgImltcG9ydCB7IERhdGFiYXNlIH0gZnJvbSAnYnVuOnNxbGl0ZSc7XG5pbXBvcnQgeyBta2RpclN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xubGV0IGRiSW5zdGFuY2UgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsREIoKSB7XG4gICAgaWYgKGRiSW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIGRiSW5zdGFuY2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0RpciA9IGpvaW4oaG9tZWRpcigpLCAnLmNvbmZpZycsICdhZ2VudHVpdHknKTtcbiAgICBpZiAoIWV4aXN0c1N5bmMoY29uZmlnRGlyKSkge1xuICAgICAgICBta2RpclN5bmMoY29uZmlnRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgZGJQYXRoID0gam9pbihjb25maWdEaXIsICdsb2NhbC5kYicpO1xuICAgIGRiSW5zdGFuY2UgPSBuZXcgRGF0YWJhc2UoZGJQYXRoKTtcbiAgICBpbml0aWFsaXplVGFibGVzKGRiSW5zdGFuY2UpO1xuICAgIGNsZWFudXBPcnBoYW5lZFByb2plY3RzKGRiSW5zdGFuY2UpO1xuICAgIHJldHVybiBkYkluc3RhbmNlO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVRhYmxlcyhkYikge1xuICAgIC8vIEtleVZhbHVlIFN0b3JhZ2UgdGFibGVcbiAgICBkYi5ydW4oYFxuXHRcdENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGt2X3N0b3JhZ2UgKFxuXHRcdFx0cHJvamVjdF9wYXRoIFRFWFQgTk9UIE5VTEwsXG5cdFx0XHRuYW1lIFRFWFQgTk9UIE5VTEwsXG5cdFx0XHRrZXkgVEVYVCBOT1QgTlVMTCxcblx0XHRcdHZhbHVlIEJMT0IgTk9UIE5VTEwsXG5cdFx0XHRjb250ZW50X3R5cGUgVEVYVCBOT1QgTlVMTCBERUZBVUxUICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuXHRcdFx0ZXhwaXJlc19hdCBJTlRFR0VSLFxuXHRcdFx0Y3JlYXRlZF9hdCBJTlRFR0VSIE5PVCBOVUxMLFxuXHRcdFx0dXBkYXRlZF9hdCBJTlRFR0VSIE5PVCBOVUxMLFxuXHRcdFx0UFJJTUFSWSBLRVkgKHByb2plY3RfcGF0aCwgbmFtZSwga2V5KVxuXHRcdClcblx0YCk7XG4gICAgZGIucnVuKGBcblx0XHRDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfa3ZfZXhwaXJlcyBcblx0XHRPTiBrdl9zdG9yYWdlKGV4cGlyZXNfYXQpIFxuXHRcdFdIRVJFIGV4cGlyZXNfYXQgSVMgTk9UIE5VTExcblx0YCk7XG4gICAgLy8gU3RyZWFtIFN0b3JhZ2UgdGFibGVcbiAgICBkYi5ydW4oYFxuXHRcdENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHN0cmVhbV9zdG9yYWdlIChcblx0XHRcdHByb2plY3RfcGF0aCBURVhUIE5PVCBOVUxMLFxuXHRcdFx0aWQgVEVYVCBQUklNQVJZIEtFWSxcblx0XHRcdG5hbWUgVEVYVCBOT1QgTlVMTCxcblx0XHRcdG1ldGFkYXRhIFRFWFQsXG5cdFx0XHRjb250ZW50X3R5cGUgVEVYVCBOT1QgTlVMTCBERUZBVUxUICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuXHRcdFx0ZGF0YSBCTE9CLFxuXHRcdFx0c2l6ZV9ieXRlcyBJTlRFR0VSIE5PVCBOVUxMIERFRkFVTFQgMCxcblx0XHRcdGNyZWF0ZWRfYXQgSU5URUdFUiBOT1QgTlVMTFxuXHRcdClcblx0YCk7XG4gICAgZGIucnVuKGBcblx0XHRDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfc3RyZWFtX25hbWUgXG5cdFx0T04gc3RyZWFtX3N0b3JhZ2UocHJvamVjdF9wYXRoLCBuYW1lKVxuXHRgKTtcbiAgICBkYi5ydW4oYFxuXHRcdENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9zdHJlYW1fbWV0YWRhdGEgXG5cdFx0T04gc3RyZWFtX3N0b3JhZ2UobWV0YWRhdGEpXG5cdGApO1xuICAgIC8vIFZlY3RvciBTdG9yYWdlIHRhYmxlXG4gICAgZGIucnVuKGBcblx0XHRDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB2ZWN0b3Jfc3RvcmFnZSAoXG5cdFx0XHRwcm9qZWN0X3BhdGggVEVYVCBOT1QgTlVMTCxcblx0XHRcdG5hbWUgVEVYVCBOT1QgTlVMTCxcblx0XHRcdGlkIFRFWFQgUFJJTUFSWSBLRVksXG5cdFx0XHRrZXkgVEVYVCBOT1QgTlVMTCxcblx0XHRcdGVtYmVkZGluZyBURVhUIE5PVCBOVUxMLFxuXHRcdFx0ZG9jdW1lbnQgVEVYVCxcblx0XHRcdG1ldGFkYXRhIFRFWFQsXG5cdFx0XHRjcmVhdGVkX2F0IElOVEVHRVIgTk9UIE5VTEwsXG5cdFx0XHR1cGRhdGVkX2F0IElOVEVHRVIgTk9UIE5VTEwsXG5cdFx0XHRVTklRVUUgKHByb2plY3RfcGF0aCwgbmFtZSwga2V5KVxuXHRcdClcblx0YCk7XG4gICAgZGIucnVuKGBcblx0XHRDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfdmVjdG9yX2xvb2t1cCBcblx0XHRPTiB2ZWN0b3Jfc3RvcmFnZShwcm9qZWN0X3BhdGgsIG5hbWUsIGtleSlcblx0YCk7XG4gICAgZGIucnVuKGBcblx0XHRDUkVBVEUgSU5ERVggSUYgTk9UIEVYSVNUUyBpZHhfdmVjdG9yX25hbWUgXG5cdFx0T04gdmVjdG9yX3N0b3JhZ2UocHJvamVjdF9wYXRoLCBuYW1lKVxuXHRgKTtcbn1cbmZ1bmN0aW9uIGNsZWFudXBPcnBoYW5lZFByb2plY3RzKGRiKSB7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHByb2plY3QgcGF0aCB0byBleGNsdWRlIGZyb20gY2xlYW51cFxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0UGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgLy8gUXVlcnkgYWxsIHRhYmxlcyBmb3IgdW5pcXVlIHByb2plY3QgcGF0aHNcbiAgICBjb25zdCBrdlBhdGhzID0gZGIucXVlcnkoJ1NFTEVDVCBESVNUSU5DVCBwcm9qZWN0X3BhdGggRlJPTSBrdl9zdG9yYWdlJykuYWxsKCk7XG4gICAgY29uc3Qgc3RyZWFtUGF0aHMgPSBkYi5xdWVyeSgnU0VMRUNUIERJU1RJTkNUIHByb2plY3RfcGF0aCBGUk9NIHN0cmVhbV9zdG9yYWdlJykuYWxsKCk7XG4gICAgY29uc3QgdmVjdG9yUGF0aHMgPSBkYi5xdWVyeSgnU0VMRUNUIERJU1RJTkNUIHByb2plY3RfcGF0aCBGUk9NIHZlY3Rvcl9zdG9yYWdlJykuYWxsKCk7XG4gICAgLy8gQ29tYmluZSBhbmQgZGVkdXBsaWNhdGUgYWxsIHByb2plY3QgcGF0aHNcbiAgICBjb25zdCBhbGxQYXRocyA9IG5ldyBTZXQoKTtcbiAgICBbLi4ua3ZQYXRocywgLi4uc3RyZWFtUGF0aHMsIC4uLnZlY3RvclBhdGhzXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgYWxsUGF0aHMuYWRkKHJvdy5wcm9qZWN0X3BhdGgpO1xuICAgIH0pO1xuICAgIC8vIENoZWNrIHdoaWNoIHBhdGhzIG5vIGxvbmdlciBleGlzdCBhbmQgYXJlIG5vdCB0aGUgY3VycmVudCBwcm9qZWN0XG4gICAgY29uc3QgcGF0aHNUb0RlbGV0ZSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBhbGxQYXRocykge1xuICAgICAgICBpZiAocGF0aCAhPT0gY3VycmVudFByb2plY3RQYXRoICYmICFleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICAgICAgICBwYXRoc1RvRGVsZXRlLnB1c2gocGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRGVsZXRlIGRhdGEgZm9yIHJlbW92ZWQgcHJvamVjdHNcbiAgICBpZiAocGF0aHNUb0RlbGV0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IHBhdGhzVG9EZWxldGUubWFwKCgpID0+ICc/Jykuam9pbignLCAnKTtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gYWxsIHRhYmxlc1xuICAgICAgICBjb25zdCBkZWxldGVLdiA9IGRiLnByZXBhcmUoYERFTEVURSBGUk9NIGt2X3N0b3JhZ2UgV0hFUkUgcHJvamVjdF9wYXRoIElOICgke3BsYWNlaG9sZGVyc30pYCk7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVN0cmVhbSA9IGRiLnByZXBhcmUoYERFTEVURSBGUk9NIHN0cmVhbV9zdG9yYWdlIFdIRVJFIHByb2plY3RfcGF0aCBJTiAoJHtwbGFjZWhvbGRlcnN9KWApO1xuICAgICAgICBjb25zdCBkZWxldGVWZWN0b3IgPSBkYi5wcmVwYXJlKGBERUxFVEUgRlJPTSB2ZWN0b3Jfc3RvcmFnZSBXSEVSRSBwcm9qZWN0X3BhdGggSU4gKCR7cGxhY2Vob2xkZXJzfSlgKTtcbiAgICAgICAgZGVsZXRlS3YucnVuKC4uLnBhdGhzVG9EZWxldGUpO1xuICAgICAgICBkZWxldGVTdHJlYW0ucnVuKC4uLnBhdGhzVG9EZWxldGUpO1xuICAgICAgICBkZWxldGVWZWN0b3IucnVuKC4uLnBhdGhzVG9EZWxldGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW0xvY2FsREJdIENsZWFuZWQgdXAgZGF0YSBmb3IgJHtwYXRoc1RvRGVsZXRlLmxlbmd0aH0gb3JwaGFuZWQgcHJvamVjdChzKWApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZUxvY2FsREIoKSB7XG4gICAgaWYgKGRiSW5zdGFuY2UpIHtcbiAgICAgICAgZGJJbnN0YW5jZS5jbG9zZSgpO1xuICAgICAgICBkYkluc3RhbmNlID0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fZGIuanMubWFwIiwKICAgICJpbXBvcnQgeyBEZWZhdWx0VGhyZWFkLCBEZWZhdWx0VGhyZWFkSURQcm92aWRlciwgcGFyc2VUaHJlYWREYXRhLCB2YWxpZGF0ZVRocmVhZElkT3JUaHJvdywgfSBmcm9tICcuLi8uLi9zZXNzaW9uJztcbmltcG9ydCB7IGdldExvY2FsREIgfSBmcm9tICcuLi9sb2NhbC9fZGInO1xuLyoqXG4gKiBMb2NhbCB0aHJlYWQgcHJvdmlkZXIgd2l0aCBTUUxpdGUgcGVyc2lzdGVuY2UuXG4gKiBTdG9yZXMgdGhyZWFkIHN0YXRlIGluIGxvY2FsIERCIGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy5cbiAqIFN1aXRhYmxlIGZvciBsb2NhbCBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB3aXRoIHBlcnNpc3RlbmNlIGFjcm9zcyByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsVGhyZWFkUHJvdmlkZXIge1xuICAgIGFwcFN0YXRlID0gbnVsbDtcbiAgICB0aHJlYWRJRFByb3ZpZGVyID0gbmV3IERlZmF1bHRUaHJlYWRJRFByb3ZpZGVyKCk7XG4gICAgZGIgPSBudWxsO1xuICAgIGFzeW5jIGluaXRpYWxpemUoYXBwU3RhdGUpIHtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZSA9IGFwcFN0YXRlO1xuICAgICAgICB0aGlzLmRiID0gZ2V0TG9jYWxEQigpO1xuICAgICAgICAvLyBDcmVhdGUgdGhyZWFkcyB0YWJsZSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHRoaXMuZGIucnVuKGBcblx0XHRcdENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRocmVhZHMgKFxuXHRcdFx0XHRpZCBURVhUIFBSSU1BUlkgS0VZLFxuXHRcdFx0XHRzdGF0ZSBURVhUIE5PVCBOVUxMLFxuXHRcdFx0XHR1cGRhdGVkX2F0IElOVEVHRVIgTk9UIE5VTExcblx0XHRcdClcblx0XHRgKTtcbiAgICB9XG4gICAgc2V0VGhyZWFkSURQcm92aWRlcihwcm92aWRlcikge1xuICAgICAgICB0aGlzLnRocmVhZElEUHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICB9XG4gICAgYXN5bmMgcmVzdG9yZShjdHgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwU3RhdGUgPT09IG51bGwgfHwgdGhpcy5kYiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRocmVhZFByb3ZpZGVyLnJlc3RvcmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCk6IGFwcFN0YXRlL2RiIG5vdCBzZXQ7IGNhbGwgaW5pdGlhbGl6ZShhcHBTdGF0ZSkgZmlyc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aHJlYWRJZCA9IGF3YWl0IHRoaXMudGhyZWFkSURQcm92aWRlci5nZXRUaHJlYWRJZCh0aGlzLmFwcFN0YXRlLCBjdHgpO1xuICAgICAgICB2YWxpZGF0ZVRocmVhZElkT3JUaHJvdyh0aHJlYWRJZCk7XG4gICAgICAgIC8vIENyZWF0ZSBhIHJlc3RvcmUgZnVuY3Rpb24gZm9yIGxhenkgbG9hZGluZ1xuICAgICAgICBjb25zdCByZXN0b3JlRm4gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0ZTogbmV3IE1hcCgpLCBtZXRhZGF0YToge30gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGJcbiAgICAgICAgICAgICAgICAucXVlcnkoJ1NFTEVDVCBzdGF0ZSBGUk9NIHRocmVhZHMgV0hFUkUgaWQgPSA/JylcbiAgICAgICAgICAgICAgICAuZ2V0KHRocmVhZElkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZmxhdFN0YXRlSnNvbiwgbWV0YWRhdGEgfSA9IHBhcnNlVGhyZWFkRGF0YShyb3c/LnN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgaWYgKGZsYXRTdGF0ZUpzb24pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShmbGF0U3RhdGVKc29uKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggZW1wdHkgc3RhdGUgaWYgcGFyc2luZyBmYWlsc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXRlLCBtZXRhZGF0YTogbWV0YWRhdGEgfHwge30gfTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0VGhyZWFkKHRoaXMsIHRocmVhZElkLCByZXN0b3JlRm4pO1xuICAgIH1cbiAgICBhc3luYyBzYXZlKHRocmVhZCkge1xuICAgICAgICBpZiAoIXRoaXMuZGIgfHwgISh0aHJlYWQgaW5zdGFuY2VvZiBEZWZhdWx0VGhyZWFkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlID0gdGhyZWFkLmdldFNhdmVNb2RlKCk7XG4gICAgICAgIGlmIChzYXZlTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHNhdmVNb2RlID09PSAnbWVyZ2UnKSB7XG4gICAgICAgICAgICAvLyBGb3IgbWVyZ2UsIHdlIG5lZWQgdG8gbG9hZCBleGlzdGluZyBzdGF0ZSwgYXBwbHkgb3BlcmF0aW9ucywgdGhlbiBzYXZlXG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25zID0gdGhyZWFkLmdldFBlbmRpbmdPcGVyYXRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRocmVhZC5nZXRNZXRhZGF0YUZvclNhdmUoKTtcbiAgICAgICAgICAgIC8vIExvYWQgZXhpc3Rpbmcgc3RhdGVcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGJcbiAgICAgICAgICAgICAgICAucXVlcnkoJ1NFTEVDVCBzdGF0ZSBGUk9NIHRocmVhZHMgV0hFUkUgaWQgPSA/JylcbiAgICAgICAgICAgICAgICAuZ2V0KHRocmVhZC5pZCk7XG4gICAgICAgICAgICBjb25zdCB7IGZsYXRTdGF0ZUpzb24sIG1ldGFkYXRhOiBleGlzdGluZ01ldGFkYXRhIH0gPSBwYXJzZVRocmVhZERhdGEocm93Py5zdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHt9O1xuICAgICAgICAgICAgaWYgKGZsYXRTdGF0ZUpzb24pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCBKU09OLnBhcnNlKGZsYXRTdGF0ZUpzb24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSB3aXRoIGVtcHR5IHN0YXRlIGlmIHBhcnNpbmcgZmFpbHNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcHBseSBvcGVyYXRpb25zXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NsZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3Aua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtvcC5rZXldID0gb3AudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZVtvcC5rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZVtvcC5rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnB1c2gob3AudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBleGlzdGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBbb3AudmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtvcC5rZXldID0gYXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm9uLWFycmF5LCBzaWxlbnRseSBza2lwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBtYXhSZWNvcmRzIGxpbWl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wLm1heFJlY29yZHMgIT09IHVuZGVmaW5lZCAmJiBhcnIubGVuZ3RoID4gb3AubWF4UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtvcC5rZXldID0gYXJyLnNsaWNlKGFyci5sZW5ndGggLSBvcC5tYXhSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBCdWlsZCBmaW5hbCBkYXRhXG4gICAgICAgICAgICBjb25zdCBmaW5hbE1ldGFkYXRhID0gbWV0YWRhdGEgfHwgZXhpc3RpbmdNZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0YXRlID0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjb25zdCBoYXNNZXRhZGF0YSA9IE9iamVjdC5rZXlzKGZpbmFsTWV0YWRhdGEpLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBsZXQgc3RhdGVKc29uID0gJyc7XG4gICAgICAgICAgICBpZiAoaGFzU3RhdGUgfHwgaGFzTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgaWYgKGhhc1N0YXRlKVxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01ldGFkYXRhKVxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGFkYXRhID0gZmluYWxNZXRhZGF0YTtcbiAgICAgICAgICAgICAgICBzdGF0ZUpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGIucnVuKGBJTlNFUlQgSU5UTyB0aHJlYWRzIChpZCwgc3RhdGUsIHVwZGF0ZWRfYXQpIFZBTFVFUyAoPywgPywgPylcblx0XHRcdFx0IE9OIENPTkZMSUNUKGlkKSBETyBVUERBVEUgU0VUIHN0YXRlID0gPywgdXBkYXRlZF9hdCA9ID9gLCBbdGhyZWFkLmlkLCBzdGF0ZUpzb24sIG5vdywgc3RhdGVKc29uLCBub3ddKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZ1bGwgc2F2ZVxuICAgICAgICAgICAgY29uc3Qgc3RhdGVKc29uID0gYXdhaXQgdGhyZWFkLmdldFNlcmlhbGl6ZWRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5kYi5ydW4oYElOU0VSVCBJTlRPIHRocmVhZHMgKGlkLCBzdGF0ZSwgdXBkYXRlZF9hdCkgVkFMVUVTICg/LCA/LCA/KVxuXHRcdFx0XHQgT04gQ09ORkxJQ1QoaWQpIERPIFVQREFURSBTRVQgc3RhdGUgPSA/LCB1cGRhdGVkX2F0ID0gP2AsIFt0aHJlYWQuaWQsIHN0YXRlSnNvbiwgbm93LCBzdGF0ZUpzb24sIG5vd10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlc3Ryb3kodGhyZWFkKSB7XG4gICAgICAgIGlmICghdGhpcy5kYikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlbGV0ZSB0aHJlYWQgZnJvbSBEQlxuICAgICAgICB0aGlzLmRiLnJ1bignREVMRVRFIEZST00gdGhyZWFkcyBXSEVSRSBpZCA9ID8nLCBbdGhyZWFkLmlkXSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9jYWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBjb250ZXh0LCBwcm9wYWdhdGlvbiB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG4vKipcbiAqIEluamVjdHMgdHJhY2UgY29udGV4dCBpbnRvIHJlc3BvbnNlIGhlYWRlcnMgdXNpbmcgdGhlIE9wZW5UZWxlbWV0cnkgcHJvcGFnYXRpb24gQVBJXG4gKlxuICogQHBhcmFtIGhlYWRlcnMgLSBPcHRpb25hbCBleGlzdGluZyBoZWFkZXJzIHRvIGluY2x1ZGVcbiAqIEByZXR1cm5zIEEgcmVjb3JkIG9mIGhlYWRlcnMgd2l0aCB0cmFjZSBjb250ZXh0IGluamVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RUcmFjZUNvbnRleHRUb0hlYWRlcnMoaGVhZGVycyA9IHt9KSB7XG4gICAgbGV0IF9oZWFkZXJzO1xuICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgICBfaGVhZGVycyA9IHt9O1xuICAgICAgICBoZWFkZXJzLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIF9oZWFkZXJzW2tdID0gdjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBfaGVhZGVycyA9IHsgLi4uaGVhZGVycyB9O1xuICAgIH1cbiAgICAvLyBDcmVhdGUgYSBjYXJyaWVyIG9iamVjdCBmb3IgdGhlIGhlYWRlcnNcbiAgICBjb25zdCBjYXJyaWVyID0geyAuLi5faGVhZGVycyB9O1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBjb250ZXh0XG4gICAgY29uc3QgY3VycmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgIC8vIEluamVjdCB0cmFjZSBjb250ZXh0IGludG8gdGhlIGNhcnJpZXJcbiAgICBwcm9wYWdhdGlvbi5pbmplY3QoY3VycmVudENvbnRleHQsIGNhcnJpZXIpO1xuICAgIHJldHVybiBjYXJyaWVyO1xufVxuLyoqXG4gKiBFeHRyYWN0cyB0cmFjZSBjb250ZXh0IGZyb20gQnVuIFJlcXVlc3QgaGVhZGVyc1xuICpcbiAqIEBwYXJhbSByZXEgLSBUaGUgQnVuIFJlcXVlc3Qgb2JqZWN0XG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCB3aXRoIHRyYWNlIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VHJhY2VDb250ZXh0RnJvbVJlcXVlc3QocmVxKSB7XG4gICAgLy8gQ3JlYXRlIGEgY2FycmllciBvYmplY3QgZnJvbSB0aGUgaGVhZGVyc1xuICAgIGNvbnN0IGNhcnJpZXIgPSB7fTtcbiAgICAvLyBDb252ZXJ0IGhlYWRlcnMgdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBieSB0aGUgcHJvcGFnYXRvclxuICAgIHJlcS5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgY2FycmllcltrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICAvLyBFeHRyYWN0IHRoZSBjb250ZXh0IHVzaW5nIHRoZSBnbG9iYWwgcHJvcGFnYXRvclxuICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgIHJldHVybiBwcm9wYWdhdGlvbi5leHRyYWN0KGFjdGl2ZUNvbnRleHQsIGNhcnJpZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cC5qcy5tYXAiLAogICAgImltcG9ydCB7IFN0cnVjdHVyZWRFcnJvciB9IGZyb20gJ0BhZ2VudHVpdHkvY29yZSc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbi8qKlxuICogTm9ybWFsaXplIGEgcHJvamVjdCBwYXRoIHRvIGFuIGFic29sdXRlIHBhdGggZm9yIGNvbnNpc3RlbnQgREIga2V5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJvamVjdFBhdGgoY3dkID0gcHJvY2Vzcy5jd2QoKSkge1xuICAgIHJldHVybiByZXNvbHZlKGN3ZCk7XG59XG4vKipcbiAqIFNpbXBsZSBjaGFyYWN0ZXItYmFzZWQgZW1iZWRkaW5nIGZvciBsb2NhbCB2ZWN0b3Igc2VhcmNoXG4gKiBOb3QgcHJvZHVjdGlvbi1xdWFsaXR5LCBidXQgZ29vZCBlbm91Z2ggZm9yIGxvY2FsIGRldi90ZXN0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVFbWJlZGRpbmcodGV4dCwgZGltZW5zaW9ucyA9IDEyOCkge1xuICAgIGNvbnN0IHZlYyA9IG5ldyBBcnJheShkaW1lbnNpb25zKS5maWxsKDApO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub3JtYWxpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gbm9ybWFsaXplZC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2ZWNbaSAlIGRpbWVuc2lvbnNdICs9IE1hdGguc2luKGNoYXJDb2RlICogKGkgKyAxKSk7XG4gICAgICAgIHZlY1soaSAqIDIpICUgZGltZW5zaW9uc10gKz0gTWF0aC5jb3MoY2hhckNvZGUpO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgdmVjdG9yXG4gICAgY29uc3QgbWFnbml0dWRlID0gTWF0aC5zcXJ0KHZlYy5yZWR1Y2UoKHN1bSwgdikgPT4gc3VtICsgdiAqIHYsIDApKTtcbiAgICByZXR1cm4gbWFnbml0dWRlID4gMCA/IHZlYy5tYXAoKHYpID0+IHYgLyBtYWduaXR1ZGUpIDogdmVjO1xufVxuY29uc3QgSW52YWxpZFZlY3RvckVycm9yID0gU3RydWN0dXJlZEVycm9yKCdJbnZhbGlkVmVjdG9yRXJyb3InLCAnVmVjdG9ycyBtdXN0IGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uJyk7XG4vKipcbiAqIENhbGN1bGF0ZSBjb3NpbmUgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byB2ZWN0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVTaW1pbGFyaXR5KGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmVjdG9yRXJyb3IoKTtcbiAgICB9XG4gICAgY29uc3QgZG90ID0gYS5yZWR1Y2UoKHN1bSwgYWksIGkpID0+IHN1bSArIGFpICogKGJbaV0gPz8gMCksIDApO1xuICAgIGNvbnN0IG5vcm1BID0gTWF0aC5zcXJ0KGEucmVkdWNlKChzdW0sIGFpKSA9PiBzdW0gKyBhaSAqIGFpLCAwKSk7XG4gICAgY29uc3Qgbm9ybUIgPSBNYXRoLnNxcnQoYi5yZWR1Y2UoKHN1bSwgYmkpID0+IHN1bSArIGJpICogYmksIDApKTtcbiAgICByZXR1cm4gbm9ybUEgPiAwICYmIG5vcm1CID4gMCA/IGRvdCAvIChub3JtQSAqIG5vcm1CKSA6IDA7XG59XG4vKipcbiAqIEdldCBjdXJyZW50IHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV91dGlsLmpzLm1hcCIsCiAgICAiLy8gc3JjL2NvbXBvc2UudHNcbnZhciBjb21wb3NlID0gKG1pZGRsZXdhcmUsIG9uRXJyb3IsIG9uTm90Rm91bmQpID0+IHtcbiAgcmV0dXJuIChjb250ZXh0LCBuZXh0KSA9PiB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgcmV0dXJuIGRpc3BhdGNoKDApO1xuICAgIGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoKGkpIHtcbiAgICAgIGlmIChpIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5leHQoKSBjYWxsZWQgbXVsdGlwbGUgdGltZXNcIik7XG4gICAgICB9XG4gICAgICBpbmRleCA9IGk7XG4gICAgICBsZXQgcmVzO1xuICAgICAgbGV0IGlzRXJyb3IgPSBmYWxzZTtcbiAgICAgIGxldCBoYW5kbGVyO1xuICAgICAgaWYgKG1pZGRsZXdhcmVbaV0pIHtcbiAgICAgICAgaGFuZGxlciA9IG1pZGRsZXdhcmVbaV1bMF1bMF07XG4gICAgICAgIGNvbnRleHQucmVxLnJvdXRlSW5kZXggPSBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlciA9IGkgPT09IG1pZGRsZXdhcmUubGVuZ3RoICYmIG5leHQgfHwgdm9pZCAwO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSBhd2FpdCBoYW5kbGVyKGNvbnRleHQsICgpID0+IGRpc3BhdGNoKGkgKyAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBvbkVycm9yKSB7XG4gICAgICAgICAgICBjb250ZXh0LmVycm9yID0gZXJyO1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgb25FcnJvcihlcnIsIGNvbnRleHQpO1xuICAgICAgICAgICAgaXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZXh0LmZpbmFsaXplZCA9PT0gZmFsc2UgJiYgb25Ob3RGb3VuZCkge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IG9uTm90Rm91bmQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXMgJiYgKGNvbnRleHQuZmluYWxpemVkID09PSBmYWxzZSB8fCBpc0Vycm9yKSkge1xuICAgICAgICBjb250ZXh0LnJlcyA9IHJlcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgfTtcbn07XG5leHBvcnQge1xuICBjb21wb3NlXG59O1xuIiwKICAgICIvLyBzcmMvcmVxdWVzdC9jb25zdGFudHMudHNcbnZhciBHRVRfTUFUQ0hfUkVTVUxUID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpO1xuZXhwb3J0IHtcbiAgR0VUX01BVENIX1JFU1VMVFxufTtcbiIsCiAgICAiLy8gc3JjL3V0aWxzL2JvZHkudHNcbmltcG9ydCB7IEhvbm9SZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3QuanNcIjtcbnZhciBwYXJzZUJvZHkgPSBhc3luYyAocmVxdWVzdCwgb3B0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKSA9PiB7XG4gIGNvbnN0IHsgYWxsID0gZmFsc2UsIGRvdCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdCBpbnN0YW5jZW9mIEhvbm9SZXF1ZXN0ID8gcmVxdWVzdC5yYXcuaGVhZGVycyA6IHJlcXVlc3QuaGVhZGVycztcbiAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgaWYgKGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKSB8fCBjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSkge1xuICAgIHJldHVybiBwYXJzZUZvcm1EYXRhKHJlcXVlc3QsIHsgYWxsLCBkb3QgfSk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcbmFzeW5jIGZ1bmN0aW9uIHBhcnNlRm9ybURhdGEocmVxdWVzdCwgb3B0aW9ucykge1xuICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IHJlcXVlc3QuZm9ybURhdGEoKTtcbiAgaWYgKGZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIGNvbnZlcnRGb3JtRGF0YVRvQm9keURhdGEoZm9ybURhdGEsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRGb3JtRGF0YVRvQm9keURhdGEoZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3QgZm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3JtRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgY29uc3Qgc2hvdWxkUGFyc2VBbGxWYWx1ZXMgPSBvcHRpb25zLmFsbCB8fCBrZXkuZW5kc1dpdGgoXCJbXVwiKTtcbiAgICBpZiAoIXNob3VsZFBhcnNlQWxsVmFsdWVzKSB7XG4gICAgICBmb3JtW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlUGFyc2luZ0FsbFZhbHVlcyhmb3JtLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBpZiAob3B0aW9ucy5kb3QpIHtcbiAgICBPYmplY3QuZW50cmllcyhmb3JtKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZFBhcnNlRG90VmFsdWVzID0ga2V5LmluY2x1ZGVzKFwiLlwiKTtcbiAgICAgIGlmIChzaG91bGRQYXJzZURvdFZhbHVlcykge1xuICAgICAgICBoYW5kbGVQYXJzaW5nTmVzdGVkVmFsdWVzKGZvcm0sIGtleSwgdmFsdWUpO1xuICAgICAgICBkZWxldGUgZm9ybVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBmb3JtO1xufVxudmFyIGhhbmRsZVBhcnNpbmdBbGxWYWx1ZXMgPSAoZm9ybSwga2V5LCB2YWx1ZSkgPT4ge1xuICBpZiAoZm9ybVtrZXldICE9PSB2b2lkIDApIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtW2tleV0pKSB7XG4gICAgICA7XG4gICAgICBmb3JtW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1ba2V5XSA9IFtmb3JtW2tleV0sIHZhbHVlXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFrZXkuZW5kc1dpdGgoXCJbXVwiKSkge1xuICAgICAgZm9ybVtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1ba2V5XSA9IFt2YWx1ZV07XG4gICAgfVxuICB9XG59O1xudmFyIGhhbmRsZVBhcnNpbmdOZXN0ZWRWYWx1ZXMgPSAoZm9ybSwga2V5LCB2YWx1ZSkgPT4ge1xuICBsZXQgbmVzdGVkRm9ybSA9IGZvcm07XG4gIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xuICBrZXlzLmZvckVhY2goKGtleTIsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIG5lc3RlZEZvcm1ba2V5Ml0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFuZXN0ZWRGb3JtW2tleTJdIHx8IHR5cGVvZiBuZXN0ZWRGb3JtW2tleTJdICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobmVzdGVkRm9ybVtrZXkyXSkgfHwgbmVzdGVkRm9ybVtrZXkyXSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgbmVzdGVkRm9ybVtrZXkyXSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgbmVzdGVkRm9ybSA9IG5lc3RlZEZvcm1ba2V5Ml07XG4gICAgfVxuICB9KTtcbn07XG5leHBvcnQge1xuICBwYXJzZUJvZHlcbn07XG4iLAogICAgIi8vIHNyYy9yZXF1ZXN0LnRzXG5pbXBvcnQgeyBIVFRQRXhjZXB0aW9uIH0gZnJvbSBcIi4vaHR0cC1leGNlcHRpb24uanNcIjtcbmltcG9ydCB7IEdFVF9NQVRDSF9SRVNVTFQgfSBmcm9tIFwiLi9yZXF1ZXN0L2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VCb2R5IH0gZnJvbSBcIi4vdXRpbHMvYm9keS5qc1wiO1xuaW1wb3J0IHsgZGVjb2RlVVJJQ29tcG9uZW50XywgZ2V0UXVlcnlQYXJhbSwgZ2V0UXVlcnlQYXJhbXMsIHRyeURlY29kZSB9IGZyb20gXCIuL3V0aWxzL3VybC5qc1wiO1xudmFyIHRyeURlY29kZVVSSUNvbXBvbmVudCA9IChzdHIpID0+IHRyeURlY29kZShzdHIsIGRlY29kZVVSSUNvbXBvbmVudF8pO1xudmFyIEhvbm9SZXF1ZXN0ID0gY2xhc3Mge1xuICAvKipcbiAgICogYC5yYXdgIGNhbiBnZXQgdGhlIHJhdyBSZXF1ZXN0IG9iamVjdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9yZXF1ZXN0I3Jhd31cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogLy8gRm9yIENsb3VkZmxhcmUgV29ya2Vyc1xuICAgKiBhcHAucG9zdCgnLycsIGFzeW5jIChjKSA9PiB7XG4gICAqICAgY29uc3QgbWV0YWRhdGEgPSBjLnJlcS5yYXcuY2Y/Lmhvc3RNZXRhZGF0YT9cbiAgICogICAuLi5cbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICByYXc7XG4gICN2YWxpZGF0ZWREYXRhO1xuICAvLyBTaG9ydCBuYW1lIG9mIHZhbGlkYXRlZERhdGFcbiAgI21hdGNoUmVzdWx0O1xuICByb3V0ZUluZGV4ID0gMDtcbiAgLyoqXG4gICAqIGAucGF0aGAgY2FuIGdldCB0aGUgcGF0aG5hbWUgb2YgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcmVxdWVzdCNwYXRofVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBhcHAuZ2V0KCcvYWJvdXQvbWUnLCAoYykgPT4ge1xuICAgKiAgIGNvbnN0IHBhdGhuYW1lID0gYy5yZXEucGF0aCAvLyBgL2Fib3V0L21lYFxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHBhdGg7XG4gIGJvZHlDYWNoZSA9IHt9O1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBwYXRoID0gXCIvXCIsIG1hdGNoUmVzdWx0ID0gW1tdXSkge1xuICAgIHRoaXMucmF3ID0gcmVxdWVzdDtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuI21hdGNoUmVzdWx0ID0gbWF0Y2hSZXN1bHQ7XG4gICAgdGhpcy4jdmFsaWRhdGVkRGF0YSA9IHt9O1xuICB9XG4gIHBhcmFtKGtleSkge1xuICAgIHJldHVybiBrZXkgPyB0aGlzLiNnZXREZWNvZGVkUGFyYW0oa2V5KSA6IHRoaXMuI2dldEFsbERlY29kZWRQYXJhbXMoKTtcbiAgfVxuICAjZ2V0RGVjb2RlZFBhcmFtKGtleSkge1xuICAgIGNvbnN0IHBhcmFtS2V5ID0gdGhpcy4jbWF0Y2hSZXN1bHRbMF1bdGhpcy5yb3V0ZUluZGV4XVsxXVtrZXldO1xuICAgIGNvbnN0IHBhcmFtID0gdGhpcy4jZ2V0UGFyYW1WYWx1ZShwYXJhbUtleSk7XG4gICAgcmV0dXJuIHBhcmFtICYmIC9cXCUvLnRlc3QocGFyYW0pID8gdHJ5RGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtKSA6IHBhcmFtO1xuICB9XG4gICNnZXRBbGxEZWNvZGVkUGFyYW1zKCkge1xuICAgIGNvbnN0IGRlY29kZWQgPSB7fTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy4jbWF0Y2hSZXN1bHRbMF1bdGhpcy5yb3V0ZUluZGV4XVsxXSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLiNnZXRQYXJhbVZhbHVlKHRoaXMuI21hdGNoUmVzdWx0WzBdW3RoaXMucm91dGVJbmRleF1bMV1ba2V5XSk7XG4gICAgICBpZiAodmFsdWUgIT09IHZvaWQgMCkge1xuICAgICAgICBkZWNvZGVkW2tleV0gPSAvXFwlLy50ZXN0KHZhbHVlKSA/IHRyeURlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZWQ7XG4gIH1cbiAgI2dldFBhcmFtVmFsdWUocGFyYW1LZXkpIHtcbiAgICByZXR1cm4gdGhpcy4jbWF0Y2hSZXN1bHRbMV0gPyB0aGlzLiNtYXRjaFJlc3VsdFsxXVtwYXJhbUtleV0gOiBwYXJhbUtleTtcbiAgfVxuICBxdWVyeShrZXkpIHtcbiAgICByZXR1cm4gZ2V0UXVlcnlQYXJhbSh0aGlzLnVybCwga2V5KTtcbiAgfVxuICBxdWVyaWVzKGtleSkge1xuICAgIHJldHVybiBnZXRRdWVyeVBhcmFtcyh0aGlzLnVybCwga2V5KTtcbiAgfVxuICBoZWFkZXIobmFtZSkge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXcuaGVhZGVycy5nZXQobmFtZSkgPz8gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJEYXRhID0ge307XG4gICAgdGhpcy5yYXcuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBoZWFkZXJEYXRhW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVyRGF0YTtcbiAgfVxuICBhc3luYyBwYXJzZUJvZHkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJvZHlDYWNoZS5wYXJzZWRCb2R5ID8/PSBhd2FpdCBwYXJzZUJvZHkodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgI2NhY2hlZEJvZHkgPSAoa2V5KSA9PiB7XG4gICAgY29uc3QgeyBib2R5Q2FjaGUsIHJhdyB9ID0gdGhpcztcbiAgICBjb25zdCBjYWNoZWRCb2R5ID0gYm9keUNhY2hlW2tleV07XG4gICAgaWYgKGNhY2hlZEJvZHkpIHtcbiAgICAgIHJldHVybiBjYWNoZWRCb2R5O1xuICAgIH1cbiAgICBjb25zdCBhbnlDYWNoZWRLZXkgPSBPYmplY3Qua2V5cyhib2R5Q2FjaGUpWzBdO1xuICAgIGlmIChhbnlDYWNoZWRLZXkpIHtcbiAgICAgIHJldHVybiBib2R5Q2FjaGVbYW55Q2FjaGVkS2V5XS50aGVuKChib2R5KSA9PiB7XG4gICAgICAgIGlmIChhbnlDYWNoZWRLZXkgPT09IFwianNvblwiKSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSlba2V5XSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBib2R5Q2FjaGVba2V5XSA9IHJhd1trZXldKCk7XG4gIH07XG4gIC8qKlxuICAgKiBgLmpzb24oKWAgY2FuIHBhcnNlIFJlcXVlc3QgYm9keSBvZiB0eXBlIGBhcHBsaWNhdGlvbi9qc29uYFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL3JlcXVlc3QjanNvbn1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLnBvc3QoJy9lbnRyeScsIGFzeW5jIChjKSA9PiB7XG4gICAqICAgY29uc3QgYm9keSA9IGF3YWl0IGMucmVxLmpzb24oKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIGpzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlZEJvZHkoXCJ0ZXh0XCIpLnRoZW4oKHRleHQpID0+IEpTT04ucGFyc2UodGV4dCkpO1xuICB9XG4gIC8qKlxuICAgKiBgLnRleHQoKWAgY2FuIHBhcnNlIFJlcXVlc3QgYm9keSBvZiB0eXBlIGB0ZXh0L3BsYWluYFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL3JlcXVlc3QjdGV4dH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLnBvc3QoJy9lbnRyeScsIGFzeW5jIChjKSA9PiB7XG4gICAqICAgY29uc3QgYm9keSA9IGF3YWl0IGMucmVxLnRleHQoKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlZEJvZHkoXCJ0ZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBgLmFycmF5QnVmZmVyKClgIHBhcnNlIFJlcXVlc3QgYm9keSBhcyBhbiBgQXJyYXlCdWZmZXJgXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcmVxdWVzdCNhcnJheWJ1ZmZlcn1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLnBvc3QoJy9lbnRyeScsIGFzeW5jIChjKSA9PiB7XG4gICAqICAgY29uc3QgYm9keSA9IGF3YWl0IGMucmVxLmFycmF5QnVmZmVyKClcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBhcnJheUJ1ZmZlcigpIHtcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVkQm9keShcImFycmF5QnVmZmVyXCIpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIHJlcXVlc3QgYm9keSBhcyBhIGBCbG9iYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLnBvc3QoJy9lbnRyeScsIGFzeW5jIChjKSA9PiB7XG4gICAqICAgY29uc3QgYm9keSA9IGF3YWl0IGMucmVxLmJsb2IoKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcmVxdWVzdCNibG9iXG4gICAqL1xuICBibG9iKCkge1xuICAgIHJldHVybiB0aGlzLiNjYWNoZWRCb2R5KFwiYmxvYlwiKTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIHRoZSByZXF1ZXN0IGJvZHkgYXMgYEZvcm1EYXRhYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLnBvc3QoJy9lbnRyeScsIGFzeW5jIChjKSA9PiB7XG4gICAqICAgY29uc3QgYm9keSA9IGF3YWl0IGMucmVxLmZvcm1EYXRhKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICogQHNlZSBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL3JlcXVlc3QjZm9ybWRhdGFcbiAgICovXG4gIGZvcm1EYXRhKCkge1xuICAgIHJldHVybiB0aGlzLiNjYWNoZWRCb2R5KFwiZm9ybURhdGFcIik7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgdmFsaWRhdGVkIGRhdGEgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9mIHRoZSB2YWxpZGF0aW9uLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSB2YWxpZGF0ZWQgZGF0YSB0byBhZGQuXG4gICAqL1xuICBhZGRWYWxpZGF0ZWREYXRhKHRhcmdldCwgZGF0YSkge1xuICAgIHRoaXMuI3ZhbGlkYXRlZERhdGFbdGFyZ2V0XSA9IGRhdGE7XG4gIH1cbiAgdmFsaWQodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRlZERhdGFbdGFyZ2V0XTtcbiAgfVxuICAvKipcbiAgICogYC51cmwoKWAgY2FuIGdldCB0aGUgcmVxdWVzdCB1cmwgc3RyaW5ncy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9yZXF1ZXN0I3VybH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLmdldCgnL2Fib3V0L21lJywgKGMpID0+IHtcbiAgICogICBjb25zdCB1cmwgPSBjLnJlcS51cmwgLy8gYGh0dHA6Ly9sb2NhbGhvc3Q6ODc4Ny9hYm91dC9tZWBcbiAgICogICAuLi5cbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBnZXQgdXJsKCkge1xuICAgIHJldHVybiB0aGlzLnJhdy51cmw7XG4gIH1cbiAgLyoqXG4gICAqIGAubWV0aG9kKClgIGNhbiBnZXQgdGhlIG1ldGhvZCBuYW1lIG9mIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL3JlcXVlc3QjbWV0aG9kfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBhcHAuZ2V0KCcvYWJvdXQvbWUnLCAoYykgPT4ge1xuICAgKiAgIGNvbnN0IG1ldGhvZCA9IGMucmVxLm1ldGhvZCAvLyBgR0VUYFxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIGdldCBtZXRob2QoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3Lm1ldGhvZDtcbiAgfVxuICBnZXQgW0dFVF9NQVRDSF9SRVNVTFRdKCkge1xuICAgIHJldHVybiB0aGlzLiNtYXRjaFJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogYC5tYXRjaGVkUm91dGVzKClgIGNhbiByZXR1cm4gYSBtYXRjaGVkIHJvdXRlIGluIHRoZSBoYW5kbGVyXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqXG4gICAqIFVzZSBtYXRjaGVkUm91dGVzIGhlbHBlciBkZWZpbmVkIGluIFwiaG9uby9yb3V0ZVwiIGluc3RlYWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcmVxdWVzdCNtYXRjaGVkcm91dGVzfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBhcHAudXNlKCcqJywgYXN5bmMgZnVuY3Rpb24gbG9nZ2VyKGMsIG5leHQpIHtcbiAgICogICBhd2FpdCBuZXh0KClcbiAgICogICBjLnJlcS5tYXRjaGVkUm91dGVzLmZvckVhY2goKHsgaGFuZGxlciwgbWV0aG9kLCBwYXRoIH0sIGkpID0+IHtcbiAgICogICAgIGNvbnN0IG5hbWUgPSBoYW5kbGVyLm5hbWUgfHwgKGhhbmRsZXIubGVuZ3RoIDwgMiA/ICdbaGFuZGxlcl0nIDogJ1ttaWRkbGV3YXJlXScpXG4gICAqICAgICBjb25zb2xlLmxvZyhcbiAgICogICAgICAgbWV0aG9kLFxuICAgKiAgICAgICAnICcsXG4gICAqICAgICAgIHBhdGgsXG4gICAqICAgICAgICcgJy5yZXBlYXQoTWF0aC5tYXgoMTAgLSBwYXRoLmxlbmd0aCwgMCkpLFxuICAgKiAgICAgICBuYW1lLFxuICAgKiAgICAgICBpID09PSBjLnJlcS5yb3V0ZUluZGV4ID8gJzwtIHJlc3BvbmQgZnJvbSBoZXJlJyA6ICcnXG4gICAqICAgICApXG4gICAqICAgfSlcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBnZXQgbWF0Y2hlZFJvdXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy4jbWF0Y2hSZXN1bHRbMF0ubWFwKChbWywgcm91dGVdXSkgPT4gcm91dGUpO1xuICB9XG4gIC8qKlxuICAgKiBgcm91dGVQYXRoKClgIGNhbiByZXRyaWV2ZSB0aGUgcGF0aCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgaGFuZGxlclxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKlxuICAgKiBVc2Ugcm91dGVQYXRoIGhlbHBlciBkZWZpbmVkIGluIFwiaG9uby9yb3V0ZVwiIGluc3RlYWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcmVxdWVzdCNyb3V0ZXBhdGh9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5nZXQoJy9wb3N0cy86aWQnLCAoYykgPT4ge1xuICAgKiAgIHJldHVybiBjLmpzb24oeyBwYXRoOiBjLnJlcS5yb3V0ZVBhdGggfSlcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBnZXQgcm91dGVQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLiNtYXRjaFJlc3VsdFswXS5tYXAoKFtbLCByb3V0ZV1dKSA9PiByb3V0ZSlbdGhpcy5yb3V0ZUluZGV4XS5wYXRoO1xuICB9XG59O1xudmFyIGNsb25lUmF3UmVxdWVzdCA9IGFzeW5jIChyZXEpID0+IHtcbiAgaWYgKCFyZXEucmF3LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIHJlcS5yYXcuY2xvbmUoKTtcbiAgfVxuICBjb25zdCBjYWNoZUtleSA9IE9iamVjdC5rZXlzKHJlcS5ib2R5Q2FjaGUpWzBdO1xuICBpZiAoIWNhY2hlS2V5KSB7XG4gICAgdGhyb3cgbmV3IEhUVFBFeGNlcHRpb24oNTAwLCB7XG4gICAgICBtZXNzYWdlOiBcIkNhbm5vdCBjbG9uZSByZXF1ZXN0OiBib2R5IHdhcyBhbHJlYWR5IGNvbnN1bWVkIGFuZCBub3QgY2FjaGVkLiBQbGVhc2UgdXNlIEhvbm9SZXF1ZXN0IG1ldGhvZHMgKGUuZy4sIHJlcS5qc29uKCksIHJlcS50ZXh0KCkpIGluc3RlYWQgb2YgY29uc3VtaW5nIHJlcS5yYXcgZGlyZWN0bHkuXCJcbiAgICB9KTtcbiAgfVxuICBjb25zdCByZXF1ZXN0SW5pdCA9IHtcbiAgICBib2R5OiBhd2FpdCByZXFbY2FjaGVLZXldKCksXG4gICAgY2FjaGU6IHJlcS5yYXcuY2FjaGUsXG4gICAgY3JlZGVudGlhbHM6IHJlcS5yYXcuY3JlZGVudGlhbHMsXG4gICAgaGVhZGVyczogcmVxLmhlYWRlcigpLFxuICAgIGludGVncml0eTogcmVxLnJhdy5pbnRlZ3JpdHksXG4gICAga2VlcGFsaXZlOiByZXEucmF3LmtlZXBhbGl2ZSxcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgbW9kZTogcmVxLnJhdy5tb2RlLFxuICAgIHJlZGlyZWN0OiByZXEucmF3LnJlZGlyZWN0LFxuICAgIHJlZmVycmVyOiByZXEucmF3LnJlZmVycmVyLFxuICAgIHJlZmVycmVyUG9saWN5OiByZXEucmF3LnJlZmVycmVyUG9saWN5LFxuICAgIHNpZ25hbDogcmVxLnJhdy5zaWduYWxcbiAgfTtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHJlcS51cmwsIHJlcXVlc3RJbml0KTtcbn07XG5leHBvcnQge1xuICBIb25vUmVxdWVzdCxcbiAgY2xvbmVSYXdSZXF1ZXN0XG59O1xuIiwKICAgICIvLyBzcmMvdXRpbHMvaHRtbC50c1xudmFyIEh0bWxFc2NhcGVkQ2FsbGJhY2tQaGFzZSA9IHtcbiAgU3RyaW5naWZ5OiAxLFxuICBCZWZvcmVTdHJlYW06IDIsXG4gIFN0cmVhbTogM1xufTtcbnZhciByYXcgPSAodmFsdWUsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCBlc2NhcGVkU3RyaW5nID0gbmV3IFN0cmluZyh2YWx1ZSk7XG4gIGVzY2FwZWRTdHJpbmcuaXNFc2NhcGVkID0gdHJ1ZTtcbiAgZXNjYXBlZFN0cmluZy5jYWxsYmFja3MgPSBjYWxsYmFja3M7XG4gIHJldHVybiBlc2NhcGVkU3RyaW5nO1xufTtcbnZhciBlc2NhcGVSZSA9IC9bJjw+J1wiXS87XG52YXIgc3RyaW5nQnVmZmVyVG9TdHJpbmcgPSBhc3luYyAoYnVmZmVyLCBjYWxsYmFja3MpID0+IHtcbiAgbGV0IHN0ciA9IFwiXCI7XG4gIGNhbGxiYWNrcyB8fD0gW107XG4gIGNvbnN0IHJlc29sdmVkQnVmZmVyID0gYXdhaXQgUHJvbWlzZS5hbGwoYnVmZmVyKTtcbiAgZm9yIChsZXQgaSA9IHJlc29sdmVkQnVmZmVyLmxlbmd0aCAtIDE7IDsgaS0tKSB7XG4gICAgc3RyICs9IHJlc29sdmVkQnVmZmVyW2ldO1xuICAgIGktLTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsZXQgciA9IHJlc29sdmVkQnVmZmVyW2ldO1xuICAgIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY2FsbGJhY2tzLnB1c2goLi4uci5jYWxsYmFja3MgfHwgW10pO1xuICAgIH1cbiAgICBjb25zdCBpc0VzY2FwZWQgPSByLmlzRXNjYXBlZDtcbiAgICByID0gYXdhaXQgKHR5cGVvZiByID09PSBcIm9iamVjdFwiID8gci50b1N0cmluZygpIDogcik7XG4gICAgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjYWxsYmFja3MucHVzaCguLi5yLmNhbGxiYWNrcyB8fCBbXSk7XG4gICAgfVxuICAgIGlmIChyLmlzRXNjYXBlZCA/PyBpc0VzY2FwZWQpIHtcbiAgICAgIHN0ciArPSByO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidWYgPSBbc3RyXTtcbiAgICAgIGVzY2FwZVRvQnVmZmVyKHIsIGJ1Zik7XG4gICAgICBzdHIgPSBidWZbMF07XG4gICAgfVxuICB9XG4gIHJldHVybiByYXcoc3RyLCBjYWxsYmFja3MpO1xufTtcbnZhciBlc2NhcGVUb0J1ZmZlciA9IChzdHIsIGJ1ZmZlcikgPT4ge1xuICBjb25zdCBtYXRjaCA9IHN0ci5zZWFyY2goZXNjYXBlUmUpO1xuICBpZiAobWF0Y2ggPT09IC0xKSB7XG4gICAgYnVmZmVyWzBdICs9IHN0cjtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVzY2FwZTtcbiAgbGV0IGluZGV4O1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChpbmRleCA9IG1hdGNoOyBpbmRleCA8IHN0ci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBzd2l0Y2ggKHN0ci5jaGFyQ29kZUF0KGluZGV4KSkge1xuICAgICAgY2FzZSAzNDpcbiAgICAgICAgZXNjYXBlID0gXCImcXVvdDtcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM5OlxuICAgICAgICBlc2NhcGUgPSBcIiYjMzk7XCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzODpcbiAgICAgICAgZXNjYXBlID0gXCImYW1wO1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNjA6XG4gICAgICAgIGVzY2FwZSA9IFwiJmx0O1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNjI6XG4gICAgICAgIGVzY2FwZSA9IFwiJmd0O1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBidWZmZXJbMF0gKz0gc3RyLnN1YnN0cmluZyhsYXN0SW5kZXgsIGluZGV4KSArIGVzY2FwZTtcbiAgICBsYXN0SW5kZXggPSBpbmRleCArIDE7XG4gIH1cbiAgYnVmZmVyWzBdICs9IHN0ci5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCk7XG59O1xudmFyIHJlc29sdmVDYWxsYmFja1N5bmMgPSAoc3RyKSA9PiB7XG4gIGNvbnN0IGNhbGxiYWNrcyA9IHN0ci5jYWxsYmFja3M7XG4gIGlmICghY2FsbGJhY2tzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGNvbnN0IGJ1ZmZlciA9IFtzdHJdO1xuICBjb25zdCBjb250ZXh0ID0ge307XG4gIGNhbGxiYWNrcy5mb3JFYWNoKChjKSA9PiBjKHsgcGhhc2U6IEh0bWxFc2NhcGVkQ2FsbGJhY2tQaGFzZS5TdHJpbmdpZnksIGJ1ZmZlciwgY29udGV4dCB9KSk7XG4gIHJldHVybiBidWZmZXJbMF07XG59O1xudmFyIHJlc29sdmVDYWxsYmFjayA9IGFzeW5jIChzdHIsIHBoYXNlLCBwcmVzZXJ2ZUNhbGxiYWNrcywgY29udGV4dCwgYnVmZmVyKSA9PiB7XG4gIGlmICh0eXBlb2Ygc3RyID09PSBcIm9iamVjdFwiICYmICEoc3RyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgIGlmICghKHN0ciBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHN0ciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHN0ciA9IGF3YWl0IHN0cjtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2FsbGJhY2tzID0gc3RyLmNhbGxiYWNrcztcbiAgaWYgKCFjYWxsYmFja3M/Lmxlbmd0aCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyKTtcbiAgfVxuICBpZiAoYnVmZmVyKSB7XG4gICAgYnVmZmVyWzBdICs9IHN0cjtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIgPSBbc3RyXTtcbiAgfVxuICBjb25zdCByZXNTdHIgPSBQcm9taXNlLmFsbChjYWxsYmFja3MubWFwKChjKSA9PiBjKHsgcGhhc2UsIGJ1ZmZlciwgY29udGV4dCB9KSkpLnRoZW4oXG4gICAgKHJlcykgPT4gUHJvbWlzZS5hbGwoXG4gICAgICByZXMuZmlsdGVyKEJvb2xlYW4pLm1hcCgoc3RyMikgPT4gcmVzb2x2ZUNhbGxiYWNrKHN0cjIsIHBoYXNlLCBmYWxzZSwgY29udGV4dCwgYnVmZmVyKSlcbiAgICApLnRoZW4oKCkgPT4gYnVmZmVyWzBdKVxuICApO1xuICBpZiAocHJlc2VydmVDYWxsYmFja3MpIHtcbiAgICByZXR1cm4gcmF3KGF3YWl0IHJlc1N0ciwgY2FsbGJhY2tzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzU3RyO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgSHRtbEVzY2FwZWRDYWxsYmFja1BoYXNlLFxuICBlc2NhcGVUb0J1ZmZlcixcbiAgcmF3LFxuICByZXNvbHZlQ2FsbGJhY2ssXG4gIHJlc29sdmVDYWxsYmFja1N5bmMsXG4gIHN0cmluZ0J1ZmZlclRvU3RyaW5nXG59O1xuIiwKICAgICIvLyBzcmMvY29udGV4dC50c1xuaW1wb3J0IHsgSG9ub1JlcXVlc3QgfSBmcm9tIFwiLi9yZXF1ZXN0LmpzXCI7XG5pbXBvcnQgeyBIdG1sRXNjYXBlZENhbGxiYWNrUGhhc2UsIHJlc29sdmVDYWxsYmFjayB9IGZyb20gXCIuL3V0aWxzL2h0bWwuanNcIjtcbnZhciBURVhUX1BMQUlOID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCI7XG52YXIgc2V0RGVmYXVsdENvbnRlbnRUeXBlID0gKGNvbnRlbnRUeXBlLCBoZWFkZXJzKSA9PiB7XG4gIHJldHVybiB7XG4gICAgXCJDb250ZW50LVR5cGVcIjogY29udGVudFR5cGUsXG4gICAgLi4uaGVhZGVyc1xuICB9O1xufTtcbnZhciBDb250ZXh0ID0gY2xhc3Mge1xuICAjcmF3UmVxdWVzdDtcbiAgI3JlcTtcbiAgLyoqXG4gICAqIGAuZW52YCBjYW4gZ2V0IGJpbmRpbmdzIChlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHNlY3JldHMsIEtWIG5hbWVzcGFjZXMsIEQxIGRhdGFiYXNlLCBSMiBidWNrZXQgZXRjLikgaW4gQ2xvdWRmbGFyZSBXb3JrZXJzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL2NvbnRleHQjZW52fVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiAvLyBFbnZpcm9ubWVudCBvYmplY3QgZm9yIENsb3VkZmxhcmUgV29ya2Vyc1xuICAgKiBhcHAuZ2V0KCcqJywgYXN5bmMgYyA9PiB7XG4gICAqICAgY29uc3QgY291bnRlciA9IGMuZW52LkNPVU5URVJcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBlbnYgPSB7fTtcbiAgI3ZhcjtcbiAgZmluYWxpemVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBgLmVycm9yYCBjYW4gZ2V0IHRoZSBlcnJvciBvYmplY3QgZnJvbSB0aGUgbWlkZGxld2FyZSBpZiB0aGUgSGFuZGxlciB0aHJvd3MgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvY29udGV4dCNlcnJvcn1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLnVzZSgnKicsIGFzeW5jIChjLCBuZXh0KSA9PiB7XG4gICAqICAgYXdhaXQgbmV4dCgpXG4gICAqICAgaWYgKGMuZXJyb3IpIHtcbiAgICogICAgIC8vIGRvIHNvbWV0aGluZy4uLlxuICAgKiAgIH1cbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBlcnJvcjtcbiAgI3N0YXR1cztcbiAgI2V4ZWN1dGlvbkN0eDtcbiAgI3JlcztcbiAgI2xheW91dDtcbiAgI3JlbmRlcmVyO1xuICAjbm90Rm91bmRIYW5kbGVyO1xuICAjcHJlcGFyZWRIZWFkZXJzO1xuICAjbWF0Y2hSZXN1bHQ7XG4gICNwYXRoO1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHJlcSAtIFRoZSBSZXF1ZXN0IG9iamVjdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgY29uc3RydWN0b3IocmVxLCBvcHRpb25zKSB7XG4gICAgdGhpcy4jcmF3UmVxdWVzdCA9IHJlcTtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy4jZXhlY3V0aW9uQ3R4ID0gb3B0aW9ucy5leGVjdXRpb25DdHg7XG4gICAgICB0aGlzLmVudiA9IG9wdGlvbnMuZW52O1xuICAgICAgdGhpcy4jbm90Rm91bmRIYW5kbGVyID0gb3B0aW9ucy5ub3RGb3VuZEhhbmRsZXI7XG4gICAgICB0aGlzLiNwYXRoID0gb3B0aW9ucy5wYXRoO1xuICAgICAgdGhpcy4jbWF0Y2hSZXN1bHQgPSBvcHRpb25zLm1hdGNoUmVzdWx0O1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogYC5yZXFgIGlzIHRoZSBpbnN0YW5jZSBvZiB7QGxpbmsgSG9ub1JlcXVlc3R9LlxuICAgKi9cbiAgZ2V0IHJlcSgpIHtcbiAgICB0aGlzLiNyZXEgPz89IG5ldyBIb25vUmVxdWVzdCh0aGlzLiNyYXdSZXF1ZXN0LCB0aGlzLiNwYXRoLCB0aGlzLiNtYXRjaFJlc3VsdCk7XG4gICAgcmV0dXJuIHRoaXMuI3JlcTtcbiAgfVxuICAvKipcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I2V2ZW50fVxuICAgKiBUaGUgRmV0Y2hFdmVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBjb250ZXh0IGRvZXMgbm90IGhhdmUgYSBGZXRjaEV2ZW50LlxuICAgKi9cbiAgZ2V0IGV2ZW50KCkge1xuICAgIGlmICh0aGlzLiNleGVjdXRpb25DdHggJiYgXCJyZXNwb25kV2l0aFwiIGluIHRoaXMuI2V4ZWN1dGlvbkN0eCkge1xuICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkN0eDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUaGlzIGNvbnRleHQgaGFzIG5vIEZldGNoRXZlbnRcIik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL2NvbnRleHQjZXhlY3V0aW9uY3R4fVxuICAgKiBUaGUgRXhlY3V0aW9uQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBjb250ZXh0IGRvZXMgbm90IGhhdmUgYW4gRXhlY3V0aW9uQ29udGV4dC5cbiAgICovXG4gIGdldCBleGVjdXRpb25DdHgoKSB7XG4gICAgaWYgKHRoaXMuI2V4ZWN1dGlvbkN0eCkge1xuICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkN0eDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUaGlzIGNvbnRleHQgaGFzIG5vIEV4ZWN1dGlvbkNvbnRleHRcIik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL2NvbnRleHQjcmVzfVxuICAgKiBUaGUgUmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgY3VycmVudCByZXF1ZXN0LlxuICAgKi9cbiAgZ2V0IHJlcygpIHtcbiAgICByZXR1cm4gdGhpcy4jcmVzIHx8PSBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgICAgaGVhZGVyczogdGhpcy4jcHJlcGFyZWRIZWFkZXJzID8/PSBuZXcgSGVhZGVycygpXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIFJlc3BvbnNlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIF9yZXMgLSBUaGUgUmVzcG9uc2Ugb2JqZWN0IHRvIHNldC5cbiAgICovXG4gIHNldCByZXMoX3Jlcykge1xuICAgIGlmICh0aGlzLiNyZXMgJiYgX3Jlcykge1xuICAgICAgX3JlcyA9IG5ldyBSZXNwb25zZShfcmVzLmJvZHksIF9yZXMpO1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy4jcmVzLmhlYWRlcnMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChrID09PSBcImNvbnRlbnQtdHlwZVwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGsgPT09IFwic2V0LWNvb2tpZVwiKSB7XG4gICAgICAgICAgY29uc3QgY29va2llcyA9IHRoaXMuI3Jlcy5oZWFkZXJzLmdldFNldENvb2tpZSgpO1xuICAgICAgICAgIF9yZXMuaGVhZGVycy5kZWxldGUoXCJzZXQtY29va2llXCIpO1xuICAgICAgICAgIGZvciAoY29uc3QgY29va2llIG9mIGNvb2tpZXMpIHtcbiAgICAgICAgICAgIF9yZXMuaGVhZGVycy5hcHBlbmQoXCJzZXQtY29va2llXCIsIGNvb2tpZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9yZXMuaGVhZGVycy5zZXQoaywgdik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy4jcmVzID0gX3JlcztcbiAgICB0aGlzLmZpbmFsaXplZCA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIGAucmVuZGVyKClgIGNhbiBjcmVhdGUgYSByZXNwb25zZSB3aXRoaW4gYSBsYXlvdXQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvY29udGV4dCNyZW5kZXItc2V0cmVuZGVyZXJ9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5nZXQoJy8nLCAoYykgPT4ge1xuICAgKiAgIHJldHVybiBjLnJlbmRlcignSGVsbG8hJylcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICByZW5kZXIgPSAoLi4uYXJncykgPT4ge1xuICAgIHRoaXMuI3JlbmRlcmVyID8/PSAoY29udGVudCkgPT4gdGhpcy5odG1sKGNvbnRlbnQpO1xuICAgIHJldHVybiB0aGlzLiNyZW5kZXJlciguLi5hcmdzKTtcbiAgfTtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGxheW91dCBmb3IgdGhlIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0gbGF5b3V0IC0gVGhlIGxheW91dCB0byBzZXQuXG4gICAqIEByZXR1cm5zIFRoZSBsYXlvdXQgZnVuY3Rpb24uXG4gICAqL1xuICBzZXRMYXlvdXQgPSAobGF5b3V0KSA9PiB0aGlzLiNsYXlvdXQgPSBsYXlvdXQ7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGxheW91dCBmb3IgdGhlIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBsYXlvdXQgZnVuY3Rpb24uXG4gICAqL1xuICBnZXRMYXlvdXQgPSAoKSA9PiB0aGlzLiNsYXlvdXQ7XG4gIC8qKlxuICAgKiBgLnNldFJlbmRlcmVyKClgIGNhbiBzZXQgdGhlIGxheW91dCBpbiB0aGUgY3VzdG9tIG1pZGRsZXdhcmUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvY29udGV4dCNyZW5kZXItc2V0cmVuZGVyZXJ9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzeFxuICAgKiBhcHAudXNlKCcqJywgYXN5bmMgKGMsIG5leHQpID0+IHtcbiAgICogICBjLnNldFJlbmRlcmVyKChjb250ZW50KSA9PiB7XG4gICAqICAgICByZXR1cm4gYy5odG1sKFxuICAgKiAgICAgICA8aHRtbD5cbiAgICogICAgICAgICA8Ym9keT5cbiAgICogICAgICAgICAgIDxwPntjb250ZW50fTwvcD5cbiAgICogICAgICAgICA8L2JvZHk+XG4gICAqICAgICAgIDwvaHRtbD5cbiAgICogICAgIClcbiAgICogICB9KVxuICAgKiAgIGF3YWl0IG5leHQoKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHNldFJlbmRlcmVyID0gKHJlbmRlcmVyKSA9PiB7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIGAuaGVhZGVyKClgIGNhbiBzZXQgaGVhZGVycy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I2hlYWRlcn1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLmdldCgnL3dlbGNvbWUnLCAoYykgPT4ge1xuICAgKiAgIC8vIFNldCBoZWFkZXJzXG4gICAqICAgYy5oZWFkZXIoJ1gtTWVzc2FnZScsICdIZWxsbyEnKVxuICAgKiAgIGMuaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAqXG4gICAqICAgcmV0dXJuIGMuYm9keSgnVGhhbmsgeW91IGZvciBjb21pbmcnKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIGhlYWRlciA9IChuYW1lLCB2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgIGlmICh0aGlzLmZpbmFsaXplZCkge1xuICAgICAgdGhpcy4jcmVzID0gbmV3IFJlc3BvbnNlKHRoaXMuI3Jlcy5ib2R5LCB0aGlzLiNyZXMpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy4jcmVzID8gdGhpcy4jcmVzLmhlYWRlcnMgOiB0aGlzLiNwcmVwYXJlZEhlYWRlcnMgPz89IG5ldyBIZWFkZXJzKCk7XG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIGhlYWRlcnMuZGVsZXRlKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYXBwZW5kKSB7XG4gICAgICBoZWFkZXJzLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHN0YXR1cyA9IChzdGF0dXMpID0+IHtcbiAgICB0aGlzLiNzdGF0dXMgPSBzdGF0dXM7XG4gIH07XG4gIC8qKlxuICAgKiBgLnNldCgpYCBjYW4gc2V0IHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGtleS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I3NldC1nZXR9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC51c2UoJyonLCBhc3luYyAoYywgbmV4dCkgPT4ge1xuICAgKiAgIGMuc2V0KCdtZXNzYWdlJywgJ0hvbm8gaXMgaG90ISEnKVxuICAgKiAgIGF3YWl0IG5leHQoKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHNldCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgdGhpcy4jdmFyID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIHRoaXMuI3Zhci5zZXQoa2V5LCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBgLmdldCgpYCBjYW4gdXNlIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGtleS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I3NldC1nZXR9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5nZXQoJy8nLCAoYykgPT4ge1xuICAgKiAgIGNvbnN0IG1lc3NhZ2UgPSBjLmdldCgnbWVzc2FnZScpXG4gICAqICAgcmV0dXJuIGMudGV4dChgVGhlIG1lc3NhZ2UgaXMgXCIke21lc3NhZ2V9XCJgKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIGdldCA9IChrZXkpID0+IHtcbiAgICByZXR1cm4gdGhpcy4jdmFyID8gdGhpcy4jdmFyLmdldChrZXkpIDogdm9pZCAwO1xuICB9O1xuICAvKipcbiAgICogYC52YXJgIGNhbiBhY2Nlc3MgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvY29udGV4dCN2YXJ9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IHJlc3VsdCA9IGMudmFyLmNsaWVudC5vbmVNZXRob2QoKVxuICAgKiBgYGBcbiAgICovXG4gIC8vIGMudmFyLnByb3BOYW1lIGlzIGEgcmVhZC1vbmx5XG4gIGdldCB2YXIoKSB7XG4gICAgaWYgKCF0aGlzLiN2YXIpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh0aGlzLiN2YXIpO1xuICB9XG4gICNuZXdSZXNwb25zZShkYXRhLCBhcmcsIGhlYWRlcnMpIHtcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSB0aGlzLiNyZXMgPyBuZXcgSGVhZGVycyh0aGlzLiNyZXMuaGVhZGVycykgOiB0aGlzLiNwcmVwYXJlZEhlYWRlcnMgPz8gbmV3IEhlYWRlcnMoKTtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJiBcImhlYWRlcnNcIiBpbiBhcmcpIHtcbiAgICAgIGNvbnN0IGFyZ0hlYWRlcnMgPSBhcmcuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMgPyBhcmcuaGVhZGVycyA6IG5ldyBIZWFkZXJzKGFyZy5oZWFkZXJzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGFyZ0hlYWRlcnMpIHtcbiAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBcInNldC1jb29raWVcIikge1xuICAgICAgICAgIHJlc3BvbnNlSGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLnNldChrLCB2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25zZUhlYWRlcnMuZGVsZXRlKGspO1xuICAgICAgICAgIGZvciAoY29uc3QgdjIgb2Ygdikge1xuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLmFwcGVuZChrLCB2Mik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1cyA9IHR5cGVvZiBhcmcgPT09IFwibnVtYmVyXCIgPyBhcmcgOiBhcmc/LnN0YXR1cyA/PyB0aGlzLiNzdGF0dXM7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShkYXRhLCB7IHN0YXR1cywgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9XG4gIG5ld1Jlc3BvbnNlID0gKC4uLmFyZ3MpID0+IHRoaXMuI25ld1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAvKipcbiAgICogYC5ib2R5KClgIGNhbiByZXR1cm4gdGhlIEhUVFAgcmVzcG9uc2UuXG4gICAqIFlvdSBjYW4gc2V0IGhlYWRlcnMgd2l0aCBgLmhlYWRlcigpYCBhbmQgc2V0IEhUVFAgc3RhdHVzIGNvZGUgd2l0aCBgLnN0YXR1c2AuXG4gICAqIFRoaXMgY2FuIGFsc28gYmUgc2V0IGluIGAudGV4dCgpYCwgYC5qc29uKClgIGFuZCBzbyBvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I2JvZHl9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5nZXQoJy93ZWxjb21lJywgKGMpID0+IHtcbiAgICogICAvLyBTZXQgaGVhZGVyc1xuICAgKiAgIGMuaGVhZGVyKCdYLU1lc3NhZ2UnLCAnSGVsbG8hJylcbiAgICogICBjLmhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgKiAgIC8vIFNldCBIVFRQIHN0YXR1cyBjb2RlXG4gICAqICAgYy5zdGF0dXMoMjAxKVxuICAgKlxuICAgKiAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgYm9keVxuICAgKiAgIHJldHVybiBjLmJvZHkoJ1RoYW5rIHlvdSBmb3IgY29taW5nJylcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICBib2R5ID0gKGRhdGEsIGFyZywgaGVhZGVycykgPT4gdGhpcy4jbmV3UmVzcG9uc2UoZGF0YSwgYXJnLCBoZWFkZXJzKTtcbiAgLyoqXG4gICAqIGAudGV4dCgpYCBjYW4gcmVuZGVyIHRleHQgYXMgYENvbnRlbnQtVHlwZTp0ZXh0L3BsYWluYC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I3RleHR9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5nZXQoJy9zYXknLCAoYykgPT4ge1xuICAgKiAgIHJldHVybiBjLnRleHQoJ0hlbGxvIScpXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgdGV4dCA9ICh0ZXh0LCBhcmcsIGhlYWRlcnMpID0+IHtcbiAgICByZXR1cm4gIXRoaXMuI3ByZXBhcmVkSGVhZGVycyAmJiAhdGhpcy4jc3RhdHVzICYmICFhcmcgJiYgIWhlYWRlcnMgJiYgIXRoaXMuZmluYWxpemVkID8gbmV3IFJlc3BvbnNlKHRleHQpIDogdGhpcy4jbmV3UmVzcG9uc2UoXG4gICAgICB0ZXh0LFxuICAgICAgYXJnLFxuICAgICAgc2V0RGVmYXVsdENvbnRlbnRUeXBlKFRFWFRfUExBSU4sIGhlYWRlcnMpXG4gICAgKTtcbiAgfTtcbiAgLyoqXG4gICAqIGAuanNvbigpYCBjYW4gcmVuZGVyIEpTT04gYXMgYENvbnRlbnQtVHlwZTphcHBsaWNhdGlvbi9qc29uYC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I2pzb259XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5nZXQoJy9hcGknLCAoYykgPT4ge1xuICAgKiAgIHJldHVybiBjLmpzb24oeyBtZXNzYWdlOiAnSGVsbG8hJyB9KVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIGpzb24gPSAob2JqZWN0LCBhcmcsIGhlYWRlcnMpID0+IHtcbiAgICByZXR1cm4gdGhpcy4jbmV3UmVzcG9uc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShvYmplY3QpLFxuICAgICAgYXJnLFxuICAgICAgc2V0RGVmYXVsdENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vanNvblwiLCBoZWFkZXJzKVxuICAgICk7XG4gIH07XG4gIGh0bWwgPSAoaHRtbCwgYXJnLCBoZWFkZXJzKSA9PiB7XG4gICAgY29uc3QgcmVzID0gKGh0bWwyKSA9PiB0aGlzLiNuZXdSZXNwb25zZShodG1sMiwgYXJnLCBzZXREZWZhdWx0Q29udGVudFR5cGUoXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIiwgaGVhZGVycykpO1xuICAgIHJldHVybiB0eXBlb2YgaHRtbCA9PT0gXCJvYmplY3RcIiA/IHJlc29sdmVDYWxsYmFjayhodG1sLCBIdG1sRXNjYXBlZENhbGxiYWNrUGhhc2UuU3RyaW5naWZ5LCBmYWxzZSwge30pLnRoZW4ocmVzKSA6IHJlcyhodG1sKTtcbiAgfTtcbiAgLyoqXG4gICAqIGAucmVkaXJlY3QoKWAgY2FuIFJlZGlyZWN0LCBkZWZhdWx0IHN0YXR1cyBjb2RlIGlzIDMwMi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9jb250ZXh0I3JlZGlyZWN0fVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBhcHAuZ2V0KCcvcmVkaXJlY3QnLCAoYykgPT4ge1xuICAgKiAgIHJldHVybiBjLnJlZGlyZWN0KCcvJylcbiAgICogfSlcbiAgICogYXBwLmdldCgnL3JlZGlyZWN0LXBlcm1hbmVudGx5JywgKGMpID0+IHtcbiAgICogICByZXR1cm4gYy5yZWRpcmVjdCgnLycsIDMwMSlcbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICByZWRpcmVjdCA9IChsb2NhdGlvbiwgc3RhdHVzKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb25TdHJpbmcgPSBTdHJpbmcobG9jYXRpb24pO1xuICAgIHRoaXMuaGVhZGVyKFxuICAgICAgXCJMb2NhdGlvblwiLFxuICAgICAgLy8gTXVsdGlieWVzIHNob3VsZCBiZSBlbmNvZGVkXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgICAgIS9bXlxceDAwLVxceEZGXS8udGVzdChsb2NhdGlvblN0cmluZykgPyBsb2NhdGlvblN0cmluZyA6IGVuY29kZVVSSShsb2NhdGlvblN0cmluZylcbiAgICApO1xuICAgIHJldHVybiB0aGlzLm5ld1Jlc3BvbnNlKG51bGwsIHN0YXR1cyA/PyAzMDIpO1xuICB9O1xuICAvKipcbiAgICogYC5ub3RGb3VuZCgpYCBjYW4gcmV0dXJuIHRoZSBOb3QgRm91bmQgUmVzcG9uc2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvY29udGV4dCNub3Rmb3VuZH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogYXBwLmdldCgnL25vdGZvdW5kJywgKGMpID0+IHtcbiAgICogICByZXR1cm4gYy5ub3RGb3VuZCgpXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgbm90Rm91bmQgPSAoKSA9PiB7XG4gICAgdGhpcy4jbm90Rm91bmRIYW5kbGVyID8/PSAoKSA9PiBuZXcgUmVzcG9uc2UoKTtcbiAgICByZXR1cm4gdGhpcy4jbm90Rm91bmRIYW5kbGVyKHRoaXMpO1xuICB9O1xufTtcbmV4cG9ydCB7XG4gIENvbnRleHQsXG4gIFRFWFRfUExBSU5cbn07XG4iLAogICAgIi8vIHNyYy9yb3V0ZXIudHNcbnZhciBNRVRIT0RfTkFNRV9BTEwgPSBcIkFMTFwiO1xudmFyIE1FVEhPRF9OQU1FX0FMTF9MT1dFUkNBU0UgPSBcImFsbFwiO1xudmFyIE1FVEhPRFMgPSBbXCJnZXRcIiwgXCJwb3N0XCIsIFwicHV0XCIsIFwiZGVsZXRlXCIsIFwib3B0aW9uc1wiLCBcInBhdGNoXCJdO1xudmFyIE1FU1NBR0VfTUFUQ0hFUl9JU19BTFJFQURZX0JVSUxUID0gXCJDYW4gbm90IGFkZCBhIHJvdXRlIHNpbmNlIHRoZSBtYXRjaGVyIGlzIGFscmVhZHkgYnVpbHQuXCI7XG52YXIgVW5zdXBwb3J0ZWRQYXRoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbn07XG5leHBvcnQge1xuICBNRVNTQUdFX01BVENIRVJfSVNfQUxSRUFEWV9CVUlMVCxcbiAgTUVUSE9EUyxcbiAgTUVUSE9EX05BTUVfQUxMLFxuICBNRVRIT0RfTkFNRV9BTExfTE9XRVJDQVNFLFxuICBVbnN1cHBvcnRlZFBhdGhFcnJvclxufTtcbiIsCiAgICAiLy8gc3JjL3V0aWxzL2NvbnN0YW50cy50c1xudmFyIENPTVBPU0VEX0hBTkRMRVIgPSBcIl9fQ09NUE9TRURfSEFORExFUlwiO1xuZXhwb3J0IHtcbiAgQ09NUE9TRURfSEFORExFUlxufTtcbiIsCiAgICAiLy8gc3JjL2hvbm8tYmFzZS50c1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gXCIuL2NvbXBvc2UuanNcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQgeyBNRVRIT0RTLCBNRVRIT0RfTkFNRV9BTEwsIE1FVEhPRF9OQU1FX0FMTF9MT1dFUkNBU0UgfSBmcm9tIFwiLi9yb3V0ZXIuanNcIjtcbmltcG9ydCB7IENPTVBPU0VEX0hBTkRMRVIgfSBmcm9tIFwiLi91dGlscy9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGdldFBhdGgsIGdldFBhdGhOb1N0cmljdCwgbWVyZ2VQYXRoIH0gZnJvbSBcIi4vdXRpbHMvdXJsLmpzXCI7XG52YXIgbm90Rm91bmRIYW5kbGVyID0gKGMpID0+IHtcbiAgcmV0dXJuIGMudGV4dChcIjQwNCBOb3QgRm91bmRcIiwgNDA0KTtcbn07XG52YXIgZXJyb3JIYW5kbGVyID0gKGVyciwgYykgPT4ge1xuICBpZiAoXCJnZXRSZXNwb25zZVwiIGluIGVycikge1xuICAgIGNvbnN0IHJlcyA9IGVyci5nZXRSZXNwb25zZSgpO1xuICAgIHJldHVybiBjLm5ld1Jlc3BvbnNlKHJlcy5ib2R5LCByZXMpO1xuICB9XG4gIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgcmV0dXJuIGMudGV4dChcIkludGVybmFsIFNlcnZlciBFcnJvclwiLCA1MDApO1xufTtcbnZhciBIb25vID0gY2xhc3MgX0hvbm8ge1xuICBnZXQ7XG4gIHBvc3Q7XG4gIHB1dDtcbiAgZGVsZXRlO1xuICBvcHRpb25zO1xuICBwYXRjaDtcbiAgYWxsO1xuICBvbjtcbiAgdXNlO1xuICAvKlxuICAgIFRoaXMgY2xhc3MgaXMgbGlrZSBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgZG9lcyBub3QgaGF2ZSBhIHJvdXRlci5cbiAgICBUbyB1c2UgaXQsIGluaGVyaXQgdGhlIGNsYXNzIGFuZCBpbXBsZW1lbnQgcm91dGVyIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgKi9cbiAgcm91dGVyO1xuICBnZXRQYXRoO1xuICAvLyBDYW5ub3QgdXNlIGAjYCBiZWNhdXNlIGl0IHJlcXVpcmVzIHZpc2liaWxpdHkgYXQgSmF2YVNjcmlwdCBydW50aW1lLlxuICBfYmFzZVBhdGggPSBcIi9cIjtcbiAgI3BhdGggPSBcIi9cIjtcbiAgcm91dGVzID0gW107XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGFsbE1ldGhvZHMgPSBbLi4uTUVUSE9EUywgTUVUSE9EX05BTUVfQUxMX0xPV0VSQ0FTRV07XG4gICAgYWxsTWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgIHRoaXNbbWV0aG9kXSA9IChhcmdzMSwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3MxID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgdGhpcy4jcGF0aCA9IGFyZ3MxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuI2FkZFJvdXRlKG1ldGhvZCwgdGhpcy4jcGF0aCwgYXJnczEpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3MuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xuICAgICAgICAgIHRoaXMuI2FkZFJvdXRlKG1ldGhvZCwgdGhpcy4jcGF0aCwgaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vbiA9IChtZXRob2QsIHBhdGgsIC4uLmhhbmRsZXJzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgW3BhdGhdLmZsYXQoKSkge1xuICAgICAgICB0aGlzLiNwYXRoID0gcDtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIFttZXRob2RdLmZsYXQoKSkge1xuICAgICAgICAgIGhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy4jYWRkUm91dGUobS50b1VwcGVyQ2FzZSgpLCB0aGlzLiNwYXRoLCBoYW5kbGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnVzZSA9IChhcmcxLCAuLi5oYW5kbGVycykgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhcmcxID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuI3BhdGggPSBhcmcxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jcGF0aCA9IFwiKlwiO1xuICAgICAgICBoYW5kbGVycy51bnNoaWZ0KGFyZzEpO1xuICAgICAgfVxuICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4ge1xuICAgICAgICB0aGlzLiNhZGRSb3V0ZShNRVRIT0RfTkFNRV9BTEwsIHRoaXMuI3BhdGgsIGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIGNvbnN0IHsgc3RyaWN0LCAuLi5vcHRpb25zV2l0aG91dFN0cmljdCB9ID0gb3B0aW9ucztcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnNXaXRob3V0U3RyaWN0KTtcbiAgICB0aGlzLmdldFBhdGggPSBzdHJpY3QgPz8gdHJ1ZSA/IG9wdGlvbnMuZ2V0UGF0aCA/PyBnZXRQYXRoIDogZ2V0UGF0aE5vU3RyaWN0O1xuICB9XG4gICNjbG9uZSgpIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBfSG9ubyh7XG4gICAgICByb3V0ZXI6IHRoaXMucm91dGVyLFxuICAgICAgZ2V0UGF0aDogdGhpcy5nZXRQYXRoXG4gICAgfSk7XG4gICAgY2xvbmUuZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG4gICAgY2xvbmUuI25vdEZvdW5kSGFuZGxlciA9IHRoaXMuI25vdEZvdW5kSGFuZGxlcjtcbiAgICBjbG9uZS5yb3V0ZXMgPSB0aGlzLnJvdXRlcztcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cbiAgI25vdEZvdW5kSGFuZGxlciA9IG5vdEZvdW5kSGFuZGxlcjtcbiAgLy8gQ2Fubm90IHVzZSBgI2AgYmVjYXVzZSBpdCByZXF1aXJlcyB2aXNpYmlsaXR5IGF0IEphdmFTY3JpcHQgcnVudGltZS5cbiAgZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyO1xuICAvKipcbiAgICogYC5yb3V0ZSgpYCBhbGxvd3MgZ3JvdXBpbmcgb3RoZXIgSG9ubyBpbnN0YW5jZSBpbiByb3V0ZXMuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcm91dGluZyNncm91cGluZ31cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBiYXNlIFBhdGhcbiAgICogQHBhcmFtIHtIb25vfSBhcHAgLSBvdGhlciBIb25vIGluc3RhbmNlXG4gICAqIEByZXR1cm5zIHtIb25vfSByb3V0ZWQgSG9ubyBpbnN0YW5jZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBhcHAgPSBuZXcgSG9ubygpXG4gICAqIGNvbnN0IGFwcDIgPSBuZXcgSG9ubygpXG4gICAqXG4gICAqIGFwcDIuZ2V0KFwiL3VzZXJcIiwgKGMpID0+IGMudGV4dChcInVzZXJcIikpXG4gICAqIGFwcC5yb3V0ZShcIi9hcGlcIiwgYXBwMikgLy8gR0VUIC9hcGkvdXNlclxuICAgKiBgYGBcbiAgICovXG4gIHJvdXRlKHBhdGgsIGFwcCkge1xuICAgIGNvbnN0IHN1YkFwcCA9IHRoaXMuYmFzZVBhdGgocGF0aCk7XG4gICAgYXBwLnJvdXRlcy5tYXAoKHIpID0+IHtcbiAgICAgIGxldCBoYW5kbGVyO1xuICAgICAgaWYgKGFwcC5lcnJvckhhbmRsZXIgPT09IGVycm9ySGFuZGxlcikge1xuICAgICAgICBoYW5kbGVyID0gci5oYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlciA9IGFzeW5jIChjLCBuZXh0KSA9PiAoYXdhaXQgY29tcG9zZShbXSwgYXBwLmVycm9ySGFuZGxlcikoYywgKCkgPT4gci5oYW5kbGVyKGMsIG5leHQpKSkucmVzO1xuICAgICAgICBoYW5kbGVyW0NPTVBPU0VEX0hBTkRMRVJdID0gci5oYW5kbGVyO1xuICAgICAgfVxuICAgICAgc3ViQXBwLiNhZGRSb3V0ZShyLm1ldGhvZCwgci5wYXRoLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogYC5iYXNlUGF0aCgpYCBhbGxvd3MgYmFzZSBwYXRocyB0byBiZSBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvcm91dGluZyNiYXNlLXBhdGh9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gYmFzZSBQYXRoXG4gICAqIEByZXR1cm5zIHtIb25vfSBjaGFuZ2VkIEhvbm8gaW5zdGFuY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogY29uc3QgYXBpID0gbmV3IEhvbm8oKS5iYXNlUGF0aCgnL2FwaScpXG4gICAqIGBgYFxuICAgKi9cbiAgYmFzZVBhdGgocGF0aCkge1xuICAgIGNvbnN0IHN1YkFwcCA9IHRoaXMuI2Nsb25lKCk7XG4gICAgc3ViQXBwLl9iYXNlUGF0aCA9IG1lcmdlUGF0aCh0aGlzLl9iYXNlUGF0aCwgcGF0aCk7XG4gICAgcmV0dXJuIHN1YkFwcDtcbiAgfVxuICAvKipcbiAgICogYC5vbkVycm9yKClgIGhhbmRsZXMgYW4gZXJyb3IgYW5kIHJldHVybnMgYSBjdXN0b21pemVkIFJlc3BvbnNlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL2hvbm8jZXJyb3ItaGFuZGxpbmd9XG4gICAqXG4gICAqIEBwYXJhbSB7RXJyb3JIYW5kbGVyfSBoYW5kbGVyIC0gcmVxdWVzdCBIYW5kbGVyIGZvciBlcnJvclxuICAgKiBAcmV0dXJucyB7SG9ub30gY2hhbmdlZCBIb25vIGluc3RhbmNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGFwcC5vbkVycm9yKChlcnIsIGMpID0+IHtcbiAgICogICBjb25zb2xlLmVycm9yKGAke2Vycn1gKVxuICAgKiAgIHJldHVybiBjLnRleHQoJ0N1c3RvbSBFcnJvciBNZXNzYWdlJywgNTAwKVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIG9uRXJyb3IgPSAoaGFuZGxlcikgPT4ge1xuICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIGAubm90Rm91bmQoKWAgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgYSBOb3QgRm91bmQgUmVzcG9uc2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvaG9ubyNub3QtZm91bmR9XG4gICAqXG4gICAqIEBwYXJhbSB7Tm90Rm91bmRIYW5kbGVyfSBoYW5kbGVyIC0gcmVxdWVzdCBoYW5kbGVyIGZvciBub3QtZm91bmRcbiAgICogQHJldHVybnMge0hvbm99IGNoYW5nZWQgSG9ubyBpbnN0YW5jZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBhcHAubm90Rm91bmQoKGMpID0+IHtcbiAgICogICByZXR1cm4gYy50ZXh0KCdDdXN0b20gNDA0IE1lc3NhZ2UnLCA0MDQpXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgbm90Rm91bmQgPSAoaGFuZGxlcikgPT4ge1xuICAgIHRoaXMuI25vdEZvdW5kSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBgLm1vdW50KClgIGFsbG93cyB5b3UgdG8gbW91bnQgYXBwbGljYXRpb25zIGJ1aWx0IHdpdGggb3RoZXIgZnJhbWV3b3JrcyBpbnRvIHlvdXIgSG9ubyBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9ob25vI21vdW50fVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIGJhc2UgUGF0aFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhcHBsaWNhdGlvbkhhbmRsZXIgLSBvdGhlciBSZXF1ZXN0IEhhbmRsZXJcbiAgICogQHBhcmFtIHtNb3VudE9wdGlvbnN9IFtvcHRpb25zXSAtIG9wdGlvbnMgb2YgYC5tb3VudCgpYFxuICAgKiBAcmV0dXJucyB7SG9ub30gbW91bnRlZCBIb25vIGluc3RhbmNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGltcG9ydCB7IFJvdXRlciBhcyBJdHR5Um91dGVyIH0gZnJvbSAnaXR0eS1yb3V0ZXInXG4gICAqIGltcG9ydCB7IEhvbm8gfSBmcm9tICdob25vJ1xuICAgKiAvLyBDcmVhdGUgaXR0eS1yb3V0ZXIgYXBwbGljYXRpb25cbiAgICogY29uc3QgaXR0eVJvdXRlciA9IEl0dHlSb3V0ZXIoKVxuICAgKiAvLyBHRVQgL2l0dHktcm91dGVyL2hlbGxvXG4gICAqIGl0dHlSb3V0ZXIuZ2V0KCcvaGVsbG8nLCAoKSA9PiBuZXcgUmVzcG9uc2UoJ0hlbGxvIGZyb20gaXR0eS1yb3V0ZXInKSlcbiAgICpcbiAgICogY29uc3QgYXBwID0gbmV3IEhvbm8oKVxuICAgKiBhcHAubW91bnQoJy9pdHR5LXJvdXRlcicsIGl0dHlSb3V0ZXIuaGFuZGxlKVxuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogY29uc3QgYXBwID0gbmV3IEhvbm8oKVxuICAgKiAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIGFub3RoZXIgYXBwbGljYXRpb24gd2l0aG91dCBtb2RpZmljYXRpb24uXG4gICAqIGFwcC5tb3VudCgnL2FwcCcsIGFub3RoZXJBcHAsIHtcbiAgICogICByZXBsYWNlUmVxdWVzdDogKHJlcSkgPT4gcmVxLFxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIG1vdW50KHBhdGgsIGFwcGxpY2F0aW9uSGFuZGxlciwgb3B0aW9ucykge1xuICAgIGxldCByZXBsYWNlUmVxdWVzdDtcbiAgICBsZXQgb3B0aW9uSGFuZGxlcjtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb3B0aW9uSGFuZGxlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25IYW5kbGVyID0gb3B0aW9ucy5vcHRpb25IYW5kbGVyO1xuICAgICAgICBpZiAob3B0aW9ucy5yZXBsYWNlUmVxdWVzdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXBsYWNlUmVxdWVzdCA9IChyZXF1ZXN0KSA9PiByZXF1ZXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VSZXF1ZXN0ID0gb3B0aW9ucy5yZXBsYWNlUmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBnZXRPcHRpb25zID0gb3B0aW9uSGFuZGxlciA/IChjKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zMiA9IG9wdGlvbkhhbmRsZXIoYyk7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvcHRpb25zMikgPyBvcHRpb25zMiA6IFtvcHRpb25zMl07XG4gICAgfSA6IChjKSA9PiB7XG4gICAgICBsZXQgZXhlY3V0aW9uQ29udGV4dCA9IHZvaWQgMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBjLmV4ZWN1dGlvbkN0eDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtjLmVudiwgZXhlY3V0aW9uQ29udGV4dF07XG4gICAgfTtcbiAgICByZXBsYWNlUmVxdWVzdCB8fD0gKCgpID0+IHtcbiAgICAgIGNvbnN0IG1lcmdlZFBhdGggPSBtZXJnZVBhdGgodGhpcy5fYmFzZVBhdGgsIHBhdGgpO1xuICAgICAgY29uc3QgcGF0aFByZWZpeExlbmd0aCA9IG1lcmdlZFBhdGggPT09IFwiL1wiID8gMCA6IG1lcmdlZFBhdGgubGVuZ3RoO1xuICAgICAgcmV0dXJuIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwpO1xuICAgICAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUuc2xpY2UocGF0aFByZWZpeExlbmd0aCkgfHwgXCIvXCI7XG4gICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh1cmwsIHJlcXVlc3QpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoYywgbmV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXBwbGljYXRpb25IYW5kbGVyKHJlcGxhY2VSZXF1ZXN0KGMucmVxLnJhdyksIC4uLmdldE9wdGlvbnMoYykpO1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV4dCgpO1xuICAgIH07XG4gICAgdGhpcy4jYWRkUm91dGUoTUVUSE9EX05BTUVfQUxMLCBtZXJnZVBhdGgocGF0aCwgXCIqXCIpLCBoYW5kbGVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAjYWRkUm91dGUobWV0aG9kLCBwYXRoLCBoYW5kbGVyKSB7XG4gICAgbWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgcGF0aCA9IG1lcmdlUGF0aCh0aGlzLl9iYXNlUGF0aCwgcGF0aCk7XG4gICAgY29uc3QgciA9IHsgYmFzZVBhdGg6IHRoaXMuX2Jhc2VQYXRoLCBwYXRoLCBtZXRob2QsIGhhbmRsZXIgfTtcbiAgICB0aGlzLnJvdXRlci5hZGQobWV0aG9kLCBwYXRoLCBbaGFuZGxlciwgcl0pO1xuICAgIHRoaXMucm91dGVzLnB1c2gocik7XG4gIH1cbiAgI2hhbmRsZUVycm9yKGVyciwgYykge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyKGVyciwgYyk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxuICAjZGlzcGF0Y2gocmVxdWVzdCwgZXhlY3V0aW9uQ3R4LCBlbnYsIG1ldGhvZCkge1xuICAgIGlmIChtZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IG5ldyBSZXNwb25zZShudWxsLCBhd2FpdCB0aGlzLiNkaXNwYXRjaChyZXF1ZXN0LCBleGVjdXRpb25DdHgsIGVudiwgXCJHRVRcIikpKSgpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRQYXRoKHJlcXVlc3QsIHsgZW52IH0pO1xuICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gdGhpcy5yb3V0ZXIubWF0Y2gobWV0aG9kLCBwYXRoKTtcbiAgICBjb25zdCBjID0gbmV3IENvbnRleHQocmVxdWVzdCwge1xuICAgICAgcGF0aCxcbiAgICAgIG1hdGNoUmVzdWx0LFxuICAgICAgZW52LFxuICAgICAgZXhlY3V0aW9uQ3R4LFxuICAgICAgbm90Rm91bmRIYW5kbGVyOiB0aGlzLiNub3RGb3VuZEhhbmRsZXJcbiAgICB9KTtcbiAgICBpZiAobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICBsZXQgcmVzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gbWF0Y2hSZXN1bHRbMF1bMF1bMF1bMF0oYywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGMucmVzID0gYXdhaXQgdGhpcy4jbm90Rm91bmRIYW5kbGVyKGMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gdGhpcy4jaGFuZGxlRXJyb3IoZXJyLCBjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXMgaW5zdGFuY2VvZiBQcm9taXNlID8gcmVzLnRoZW4oXG4gICAgICAgIChyZXNvbHZlZCkgPT4gcmVzb2x2ZWQgfHwgKGMuZmluYWxpemVkID8gYy5yZXMgOiB0aGlzLiNub3RGb3VuZEhhbmRsZXIoYykpXG4gICAgICApLmNhdGNoKChlcnIpID0+IHRoaXMuI2hhbmRsZUVycm9yKGVyciwgYykpIDogcmVzID8/IHRoaXMuI25vdEZvdW5kSGFuZGxlcihjKTtcbiAgICB9XG4gICAgY29uc3QgY29tcG9zZWQgPSBjb21wb3NlKG1hdGNoUmVzdWx0WzBdLCB0aGlzLmVycm9ySGFuZGxlciwgdGhpcy4jbm90Rm91bmRIYW5kbGVyKTtcbiAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCBjb21wb3NlZChjKTtcbiAgICAgICAgaWYgKCFjb250ZXh0LmZpbmFsaXplZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiQ29udGV4dCBpcyBub3QgZmluYWxpemVkLiBEaWQgeW91IGZvcmdldCB0byByZXR1cm4gYSBSZXNwb25zZSBvYmplY3Qgb3IgYGF3YWl0IG5leHQoKWA/XCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LnJlcztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gdGhpcy4jaGFuZGxlRXJyb3IoZXJyLCBjKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG4gIC8qKlxuICAgKiBgLmZldGNoKClgIHdpbGwgYmUgZW50cnkgcG9pbnQgb2YgeW91ciBhcHAuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaG9uby5kZXYvZG9jcy9hcGkvaG9ubyNmZXRjaH1cbiAgICpcbiAgICogQHBhcmFtIHtSZXF1ZXN0fSByZXF1ZXN0IC0gcmVxdWVzdCBPYmplY3Qgb2YgcmVxdWVzdFxuICAgKiBAcGFyYW0ge0Vudn0gRW52IC0gZW52IE9iamVjdFxuICAgKiBAcGFyYW0ge0V4ZWN1dGlvbkNvbnRleHR9IC0gY29udGV4dCBvZiBleGVjdXRpb25cbiAgICogQHJldHVybnMge1Jlc3BvbnNlIHwgUHJvbWlzZTxSZXNwb25zZT59IHJlc3BvbnNlIG9mIHJlcXVlc3RcbiAgICpcbiAgICovXG4gIGZldGNoID0gKHJlcXVlc3QsIC4uLnJlc3QpID0+IHtcbiAgICByZXR1cm4gdGhpcy4jZGlzcGF0Y2gocmVxdWVzdCwgcmVzdFsxXSwgcmVzdFswXSwgcmVxdWVzdC5tZXRob2QpO1xuICB9O1xuICAvKipcbiAgICogYC5yZXF1ZXN0KClgIGlzIGEgdXNlZnVsIG1ldGhvZCBmb3IgdGVzdGluZy5cbiAgICogWW91IGNhbiBwYXNzIGEgVVJMIG9yIHBhdGhuYW1lIHRvIHNlbmQgYSBHRVQgcmVxdWVzdC5cbiAgICogYXBwIHdpbGwgcmV0dXJuIGEgUmVzcG9uc2Ugb2JqZWN0LlxuICAgKiBgYGB0c1xuICAgKiB0ZXN0KCdHRVQgL2hlbGxvIGlzIG9rJywgYXN5bmMgKCkgPT4ge1xuICAgKiAgIGNvbnN0IHJlcyA9IGF3YWl0IGFwcC5yZXF1ZXN0KCcvaGVsbG8nKVxuICAgKiAgIGV4cGVjdChyZXMuc3RhdHVzKS50b0JlKDIwMClcbiAgICogfSlcbiAgICogYGBgXG4gICAqIEBzZWUgaHR0cHM6Ly9ob25vLmRldi9kb2NzL2FwaS9ob25vI3JlcXVlc3RcbiAgICovXG4gIHJlcXVlc3QgPSAoaW5wdXQsIHJlcXVlc3RJbml0LCBFbnYsIGV4ZWN1dGlvbkN0eCkgPT4ge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoKHJlcXVlc3RJbml0ID8gbmV3IFJlcXVlc3QoaW5wdXQsIHJlcXVlc3RJbml0KSA6IGlucHV0LCBFbnYsIGV4ZWN1dGlvbkN0eCk7XG4gICAgfVxuICAgIGlucHV0ID0gaW5wdXQudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChcbiAgICAgIG5ldyBSZXF1ZXN0KFxuICAgICAgICAvXmh0dHBzPzpcXC9cXC8vLnRlc3QoaW5wdXQpID8gaW5wdXQgOiBgaHR0cDovL2xvY2FsaG9zdCR7bWVyZ2VQYXRoKFwiL1wiLCBpbnB1dCl9YCxcbiAgICAgICAgcmVxdWVzdEluaXRcbiAgICAgICksXG4gICAgICBFbnYsXG4gICAgICBleGVjdXRpb25DdHhcbiAgICApO1xuICB9O1xuICAvKipcbiAgICogYC5maXJlKClgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGdsb2JhbCBmZXRjaCBldmVudCBsaXN0ZW5lci5cbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBhZGhlcmUgdG8gdGhlIFNlcnZpY2UgV29ya2VyIEFQSSwgc3VjaCBhcyBub24tRVMgbW9kdWxlIENsb3VkZmxhcmUgV29ya2Vycy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVXNlIGBmaXJlYCBmcm9tIGBob25vL3NlcnZpY2Utd29ya2VyYCBpbnN0ZWFkLlxuICAgKiBgYGB0c1xuICAgKiBpbXBvcnQgeyBIb25vIH0gZnJvbSAnaG9ubydcbiAgICogaW1wb3J0IHsgZmlyZSB9IGZyb20gJ2hvbm8vc2VydmljZS13b3JrZXInXG4gICAqXG4gICAqIGNvbnN0IGFwcCA9IG5ldyBIb25vKClcbiAgICogLy8gLi4uXG4gICAqIGZpcmUoYXBwKVxuICAgKiBgYGBcbiAgICogQHNlZSBodHRwczovL2hvbm8uZGV2L2RvY3MvYXBpL2hvbm8jZmlyZVxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2aWNlX1dvcmtlcl9BUElcbiAgICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuY2xvdWRmbGFyZS5jb20vd29ya2Vycy9yZWZlcmVuY2UvbWlncmF0ZS10by1tb2R1bGUtd29ya2Vycy9cbiAgICovXG4gIGZpcmUgPSAoKSA9PiB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcihcImZldGNoXCIsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucmVzcG9uZFdpdGgodGhpcy4jZGlzcGF0Y2goZXZlbnQucmVxdWVzdCwgZXZlbnQsIHZvaWQgMCwgZXZlbnQucmVxdWVzdC5tZXRob2QpKTtcbiAgICB9KTtcbiAgfTtcbn07XG5leHBvcnQge1xuICBIb25vIGFzIEhvbm9CYXNlXG59O1xuIiwKICAgICIvLyBzcmMvcm91dGVyL3JlZy1leHAtcm91dGVyL21hdGNoZXIudHNcbmltcG9ydCB7IE1FVEhPRF9OQU1FX0FMTCB9IGZyb20gXCIuLi8uLi9yb3V0ZXIuanNcIjtcbnZhciBlbXB0eVBhcmFtID0gW107XG5mdW5jdGlvbiBtYXRjaChtZXRob2QsIHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcnMgPSB0aGlzLmJ1aWxkQWxsTWF0Y2hlcnMoKTtcbiAgY29uc3QgbWF0Y2gyID0gKChtZXRob2QyLCBwYXRoMikgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXIgPSBtYXRjaGVyc1ttZXRob2QyXSB8fCBtYXRjaGVyc1tNRVRIT0RfTkFNRV9BTExdO1xuICAgIGNvbnN0IHN0YXRpY01hdGNoID0gbWF0Y2hlclsyXVtwYXRoMl07XG4gICAgaWYgKHN0YXRpY01hdGNoKSB7XG4gICAgICByZXR1cm4gc3RhdGljTWF0Y2g7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoMyA9IHBhdGgyLm1hdGNoKG1hdGNoZXJbMF0pO1xuICAgIGlmICghbWF0Y2gzKSB7XG4gICAgICByZXR1cm4gW1tdLCBlbXB0eVBhcmFtXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaDMuaW5kZXhPZihcIlwiLCAxKTtcbiAgICByZXR1cm4gW21hdGNoZXJbMV1baW5kZXhdLCBtYXRjaDNdO1xuICB9KTtcbiAgdGhpcy5tYXRjaCA9IG1hdGNoMjtcbiAgcmV0dXJuIG1hdGNoMihtZXRob2QsIHBhdGgpO1xufVxuZXhwb3J0IHtcbiAgZW1wdHlQYXJhbSxcbiAgbWF0Y2hcbn07XG4iLAogICAgIi8vIHNyYy9yb3V0ZXIvcmVnLWV4cC1yb3V0ZXIvbm9kZS50c1xudmFyIExBQkVMX1JFR19FWFBfU1RSID0gXCJbXi9dK1wiO1xudmFyIE9OTFlfV0lMRENBUkRfUkVHX0VYUF9TVFIgPSBcIi4qXCI7XG52YXIgVEFJTF9XSUxEQ0FSRF9SRUdfRVhQX1NUUiA9IFwiKD86fC8uKilcIjtcbnZhciBQQVRIX0VSUk9SID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpO1xudmFyIHJlZ0V4cE1ldGFDaGFycyA9IG5ldyBTZXQoXCIuXFxcXCsqW15dJCgpXCIpO1xuZnVuY3Rpb24gY29tcGFyZUtleShhLCBiKSB7XG4gIGlmIChhLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBiLmxlbmd0aCA9PT0gMSA/IGEgPCBiID8gLTEgOiAxIDogLTE7XG4gIH1cbiAgaWYgKGIubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGEgPT09IE9OTFlfV0lMRENBUkRfUkVHX0VYUF9TVFIgfHwgYSA9PT0gVEFJTF9XSUxEQ0FSRF9SRUdfRVhQX1NUUikge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKGIgPT09IE9OTFlfV0lMRENBUkRfUkVHX0VYUF9TVFIgfHwgYiA9PT0gVEFJTF9XSUxEQ0FSRF9SRUdfRVhQX1NUUikge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoYSA9PT0gTEFCRUxfUkVHX0VYUF9TVFIpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmIChiID09PSBMQUJFTF9SRUdfRVhQX1NUUikge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoID8gYSA8IGIgPyAtMSA6IDEgOiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xufVxudmFyIE5vZGUgPSBjbGFzcyBfTm9kZSB7XG4gICNpbmRleDtcbiAgI3ZhckluZGV4O1xuICAjY2hpbGRyZW4gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaW5zZXJ0KHRva2VucywgaW5kZXgsIHBhcmFtTWFwLCBjb250ZXh0LCBwYXRoRXJyb3JDaGVja09ubHkpIHtcbiAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMuI2luZGV4ICE9PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgUEFUSF9FUlJPUjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXRoRXJyb3JDaGVja09ubHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy4jaW5kZXggPSBpbmRleDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW3Rva2VuLCAuLi5yZXN0VG9rZW5zXSA9IHRva2VucztcbiAgICBjb25zdCBwYXR0ZXJuID0gdG9rZW4gPT09IFwiKlwiID8gcmVzdFRva2Vucy5sZW5ndGggPT09IDAgPyBbXCJcIiwgXCJcIiwgT05MWV9XSUxEQ0FSRF9SRUdfRVhQX1NUUl0gOiBbXCJcIiwgXCJcIiwgTEFCRUxfUkVHX0VYUF9TVFJdIDogdG9rZW4gPT09IFwiLypcIiA/IFtcIlwiLCBcIlwiLCBUQUlMX1dJTERDQVJEX1JFR19FWFBfU1RSXSA6IHRva2VuLm1hdGNoKC9eXFw6KFteXFx7XFx9XSspKD86XFx7KC4rKVxcfSk/JC8pO1xuICAgIGxldCBub2RlO1xuICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGF0dGVyblsxXTtcbiAgICAgIGxldCByZWdleHBTdHIgPSBwYXR0ZXJuWzJdIHx8IExBQkVMX1JFR19FWFBfU1RSO1xuICAgICAgaWYgKG5hbWUgJiYgcGF0dGVyblsyXSkge1xuICAgICAgICBpZiAocmVnZXhwU3RyID09PSBcIi4qXCIpIHtcbiAgICAgICAgICB0aHJvdyBQQVRIX0VSUk9SO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2V4cFN0ciA9IHJlZ2V4cFN0ci5yZXBsYWNlKC9eXFwoKD8hXFw/OikoPz1bXildK1xcKSQpLywgXCIoPzpcIik7XG4gICAgICAgIGlmICgvXFwoKD8hXFw/OikvLnRlc3QocmVnZXhwU3RyKSkge1xuICAgICAgICAgIHRocm93IFBBVEhfRVJST1I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUgPSB0aGlzLiNjaGlsZHJlbltyZWdleHBTdHJdO1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLiNjaGlsZHJlbikuc29tZShcbiAgICAgICAgICAoaykgPT4gayAhPT0gT05MWV9XSUxEQ0FSRF9SRUdfRVhQX1NUUiAmJiBrICE9PSBUQUlMX1dJTERDQVJEX1JFR19FWFBfU1RSXG4gICAgICAgICkpIHtcbiAgICAgICAgICB0aHJvdyBQQVRIX0VSUk9SO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoRXJyb3JDaGVja09ubHkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IHRoaXMuI2NoaWxkcmVuW3JlZ2V4cFN0cl0gPSBuZXcgX05vZGUoKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICBub2RlLiN2YXJJbmRleCA9IGNvbnRleHQudmFySW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFwYXRoRXJyb3JDaGVja09ubHkgJiYgbmFtZSAhPT0gXCJcIikge1xuICAgICAgICBwYXJhbU1hcC5wdXNoKFtuYW1lLCBub2RlLiN2YXJJbmRleF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gdGhpcy4jY2hpbGRyZW5bdG9rZW5dO1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLiNjaGlsZHJlbikuc29tZShcbiAgICAgICAgICAoaykgPT4gay5sZW5ndGggPiAxICYmIGsgIT09IE9OTFlfV0lMRENBUkRfUkVHX0VYUF9TVFIgJiYgayAhPT0gVEFJTF9XSUxEQ0FSRF9SRUdfRVhQX1NUUlxuICAgICAgICApKSB7XG4gICAgICAgICAgdGhyb3cgUEFUSF9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aEVycm9yQ2hlY2tPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSB0aGlzLiNjaGlsZHJlblt0b2tlbl0gPSBuZXcgX05vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbm9kZS5pbnNlcnQocmVzdFRva2VucywgaW5kZXgsIHBhcmFtTWFwLCBjb250ZXh0LCBwYXRoRXJyb3JDaGVja09ubHkpO1xuICB9XG4gIGJ1aWxkUmVnRXhwU3RyKCkge1xuICAgIGNvbnN0IGNoaWxkS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuI2NoaWxkcmVuKS5zb3J0KGNvbXBhcmVLZXkpO1xuICAgIGNvbnN0IHN0ckxpc3QgPSBjaGlsZEtleXMubWFwKChrKSA9PiB7XG4gICAgICBjb25zdCBjID0gdGhpcy4jY2hpbGRyZW5ba107XG4gICAgICByZXR1cm4gKHR5cGVvZiBjLiN2YXJJbmRleCA9PT0gXCJudW1iZXJcIiA/IGAoJHtrfSlAJHtjLiN2YXJJbmRleH1gIDogcmVnRXhwTWV0YUNoYXJzLmhhcyhrKSA/IGBcXFxcJHtrfWAgOiBrKSArIGMuYnVpbGRSZWdFeHBTdHIoKTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHRoaXMuI2luZGV4ID09PSBcIm51bWJlclwiKSB7XG4gICAgICBzdHJMaXN0LnVuc2hpZnQoYCMke3RoaXMuI2luZGV4fWApO1xuICAgIH1cbiAgICBpZiAoc3RyTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAoc3RyTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBzdHJMaXN0WzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCIoPzpcIiArIHN0ckxpc3Quam9pbihcInxcIikgKyBcIilcIjtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIE5vZGUsXG4gIFBBVEhfRVJST1Jcbn07XG4iLAogICAgIi8vIHNyYy9yb3V0ZXIvcmVnLWV4cC1yb3V0ZXIvdHJpZS50c1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUuanNcIjtcbnZhciBUcmllID0gY2xhc3Mge1xuICAjY29udGV4dCA9IHsgdmFySW5kZXg6IDAgfTtcbiAgI3Jvb3QgPSBuZXcgTm9kZSgpO1xuICBpbnNlcnQocGF0aCwgaW5kZXgsIHBhdGhFcnJvckNoZWNrT25seSkge1xuICAgIGNvbnN0IHBhcmFtQXNzb2MgPSBbXTtcbiAgICBjb25zdCBncm91cHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgOyApIHtcbiAgICAgIGxldCByZXBsYWNlZCA9IGZhbHNlO1xuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFx7W159XStcXH0vZywgKG0pID0+IHtcbiAgICAgICAgY29uc3QgbWFyayA9IGBAXFxcXCR7aX1gO1xuICAgICAgICBncm91cHNbaV0gPSBbbWFyaywgbV07XG4gICAgICAgIGkrKztcbiAgICAgICAgcmVwbGFjZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbWFyaztcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXBsYWNlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gcGF0aC5tYXRjaCgvKD86OlteXFwvXSspfCg/OlxcL1xcKiQpfC4vZykgfHwgW107XG4gICAgZm9yIChsZXQgaSA9IGdyb3Vwcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgW21hcmtdID0gZ3JvdXBzW2ldO1xuICAgICAgZm9yIChsZXQgaiA9IHRva2Vucy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICBpZiAodG9rZW5zW2pdLmluZGV4T2YobWFyaykgIT09IC0xKSB7XG4gICAgICAgICAgdG9rZW5zW2pdID0gdG9rZW5zW2pdLnJlcGxhY2UobWFyaywgZ3JvdXBzW2ldWzFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLiNyb290Lmluc2VydCh0b2tlbnMsIGluZGV4LCBwYXJhbUFzc29jLCB0aGlzLiNjb250ZXh0LCBwYXRoRXJyb3JDaGVja09ubHkpO1xuICAgIHJldHVybiBwYXJhbUFzc29jO1xuICB9XG4gIGJ1aWxkUmVnRXhwKCkge1xuICAgIGxldCByZWdleHAgPSB0aGlzLiNyb290LmJ1aWxkUmVnRXhwU3RyKCk7XG4gICAgaWYgKHJlZ2V4cCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFsvXiQvLCBbXSwgW11dO1xuICAgIH1cbiAgICBsZXQgY2FwdHVyZUluZGV4ID0gMDtcbiAgICBjb25zdCBpbmRleFJlcGxhY2VtZW50TWFwID0gW107XG4gICAgY29uc3QgcGFyYW1SZXBsYWNlbWVudE1hcCA9IFtdO1xuICAgIHJlZ2V4cCA9IHJlZ2V4cC5yZXBsYWNlKC8jKFxcZCspfEAoXFxkKyl8XFwuXFwqXFwkL2csIChfLCBoYW5kbGVySW5kZXgsIHBhcmFtSW5kZXgpID0+IHtcbiAgICAgIGlmIChoYW5kbGVySW5kZXggIT09IHZvaWQgMCkge1xuICAgICAgICBpbmRleFJlcGxhY2VtZW50TWFwWysrY2FwdHVyZUluZGV4XSA9IE51bWJlcihoYW5kbGVySW5kZXgpO1xuICAgICAgICByZXR1cm4gXCIkKClcIjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbUluZGV4ICE9PSB2b2lkIDApIHtcbiAgICAgICAgcGFyYW1SZXBsYWNlbWVudE1hcFtOdW1iZXIocGFyYW1JbmRleCldID0gKytjYXB0dXJlSW5kZXg7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtuZXcgUmVnRXhwKGBeJHtyZWdleHB9YCksIGluZGV4UmVwbGFjZW1lbnRNYXAsIHBhcmFtUmVwbGFjZW1lbnRNYXBdO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgVHJpZVxufTtcbiIsCiAgICAiLy8gc3JjL3JvdXRlci9yZWctZXhwLXJvdXRlci9yb3V0ZXIudHNcbmltcG9ydCB7XG4gIE1FU1NBR0VfTUFUQ0hFUl9JU19BTFJFQURZX0JVSUxULFxuICBNRVRIT0RfTkFNRV9BTEwsXG4gIFVuc3VwcG9ydGVkUGF0aEVycm9yXG59IGZyb20gXCIuLi8uLi9yb3V0ZXIuanNcIjtcbmltcG9ydCB7IGNoZWNrT3B0aW9uYWxQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBtYXRjaCwgZW1wdHlQYXJhbSB9IGZyb20gXCIuL21hdGNoZXIuanNcIjtcbmltcG9ydCB7IFBBVEhfRVJST1IgfSBmcm9tIFwiLi9ub2RlLmpzXCI7XG5pbXBvcnQgeyBUcmllIH0gZnJvbSBcIi4vdHJpZS5qc1wiO1xudmFyIG51bGxNYXRjaGVyID0gWy9eJC8sIFtdLCAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKV07XG52YXIgd2lsZGNhcmRSZWdFeHBDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gYnVpbGRXaWxkY2FyZFJlZ0V4cChwYXRoKSB7XG4gIHJldHVybiB3aWxkY2FyZFJlZ0V4cENhY2hlW3BhdGhdID8/PSBuZXcgUmVnRXhwKFxuICAgIHBhdGggPT09IFwiKlwiID8gXCJcIiA6IGBeJHtwYXRoLnJlcGxhY2UoXG4gICAgICAvXFwvXFwqJHwoWy5cXFxcKypbXlxcXSQoKV0pL2csXG4gICAgICAoXywgbWV0YUNoYXIpID0+IG1ldGFDaGFyID8gYFxcXFwke21ldGFDaGFyfWAgOiBcIig/OnwvLiopXCJcbiAgICApfSRgXG4gICk7XG59XG5mdW5jdGlvbiBjbGVhcldpbGRjYXJkUmVnRXhwQ2FjaGUoKSB7XG4gIHdpbGRjYXJkUmVnRXhwQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cbmZ1bmN0aW9uIGJ1aWxkTWF0Y2hlckZyb21QcmVwcm9jZXNzZWRSb3V0ZXMocm91dGVzKSB7XG4gIGNvbnN0IHRyaWUgPSBuZXcgVHJpZSgpO1xuICBjb25zdCBoYW5kbGVyRGF0YSA9IFtdO1xuICBpZiAocm91dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsTWF0Y2hlcjtcbiAgfVxuICBjb25zdCByb3V0ZXNXaXRoU3RhdGljUGF0aEZsYWcgPSByb3V0ZXMubWFwKFxuICAgIChyb3V0ZSkgPT4gWyEvXFwqfFxcLzovLnRlc3Qocm91dGVbMF0pLCAuLi5yb3V0ZV1cbiAgKS5zb3J0KFxuICAgIChbaXNTdGF0aWNBLCBwYXRoQV0sIFtpc1N0YXRpY0IsIHBhdGhCXSkgPT4gaXNTdGF0aWNBID8gMSA6IGlzU3RhdGljQiA/IC0xIDogcGF0aEEubGVuZ3RoIC0gcGF0aEIubGVuZ3RoXG4gICk7XG4gIGNvbnN0IHN0YXRpY01hcCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGxldCBpID0gMCwgaiA9IC0xLCBsZW4gPSByb3V0ZXNXaXRoU3RhdGljUGF0aEZsYWcubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBbcGF0aEVycm9yQ2hlY2tPbmx5LCBwYXRoLCBoYW5kbGVyc10gPSByb3V0ZXNXaXRoU3RhdGljUGF0aEZsYWdbaV07XG4gICAgaWYgKHBhdGhFcnJvckNoZWNrT25seSkge1xuICAgICAgc3RhdGljTWFwW3BhdGhdID0gW2hhbmRsZXJzLm1hcCgoW2hdKSA9PiBbaCwgLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCldKSwgZW1wdHlQYXJhbV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGorKztcbiAgICB9XG4gICAgbGV0IHBhcmFtQXNzb2M7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtQXNzb2MgPSB0cmllLmluc2VydChwYXRoLCBqLCBwYXRoRXJyb3JDaGVja09ubHkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGUgPT09IFBBVEhfRVJST1IgPyBuZXcgVW5zdXBwb3J0ZWRQYXRoRXJyb3IocGF0aCkgOiBlO1xuICAgIH1cbiAgICBpZiAocGF0aEVycm9yQ2hlY2tPbmx5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaGFuZGxlckRhdGFbal0gPSBoYW5kbGVycy5tYXAoKFtoLCBwYXJhbUNvdW50XSkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1JbmRleE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcGFyYW1Db3VudCAtPSAxO1xuICAgICAgZm9yICg7IHBhcmFtQ291bnQgPj0gMDsgcGFyYW1Db3VudC0tKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhcmFtQXNzb2NbcGFyYW1Db3VudF07XG4gICAgICAgIHBhcmFtSW5kZXhNYXBba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtoLCBwYXJhbUluZGV4TWFwXTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBbcmVnZXhwLCBpbmRleFJlcGxhY2VtZW50TWFwLCBwYXJhbVJlcGxhY2VtZW50TWFwXSA9IHRyaWUuYnVpbGRSZWdFeHAoKTtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGhhbmRsZXJEYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbjIgPSBoYW5kbGVyRGF0YVtpXS5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHtcbiAgICAgIGNvbnN0IG1hcCA9IGhhbmRsZXJEYXRhW2ldW2pdPy5bMV07XG4gICAgICBpZiAoIW1hcCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgICAgZm9yIChsZXQgayA9IDAsIGxlbjMgPSBrZXlzLmxlbmd0aDsgayA8IGxlbjM7IGsrKykge1xuICAgICAgICBtYXBba2V5c1trXV0gPSBwYXJhbVJlcGxhY2VtZW50TWFwW21hcFtrZXlzW2tdXV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGhhbmRsZXJNYXAgPSBbXTtcbiAgZm9yIChjb25zdCBpIGluIGluZGV4UmVwbGFjZW1lbnRNYXApIHtcbiAgICBoYW5kbGVyTWFwW2ldID0gaGFuZGxlckRhdGFbaW5kZXhSZXBsYWNlbWVudE1hcFtpXV07XG4gIH1cbiAgcmV0dXJuIFtyZWdleHAsIGhhbmRsZXJNYXAsIHN0YXRpY01hcF07XG59XG5mdW5jdGlvbiBmaW5kTWlkZGxld2FyZShtaWRkbGV3YXJlLCBwYXRoKSB7XG4gIGlmICghbWlkZGxld2FyZSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG1pZGRsZXdhcmUpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpKSB7XG4gICAgaWYgKGJ1aWxkV2lsZGNhcmRSZWdFeHAoaykudGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIFsuLi5taWRkbGV3YXJlW2tdXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZvaWQgMDtcbn1cbnZhciBSZWdFeHBSb3V0ZXIgPSBjbGFzcyB7XG4gIG5hbWUgPSBcIlJlZ0V4cFJvdXRlclwiO1xuICAjbWlkZGxld2FyZTtcbiAgI3JvdXRlcztcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jbWlkZGxld2FyZSA9IHsgW01FVEhPRF9OQU1FX0FMTF06IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpIH07XG4gICAgdGhpcy4jcm91dGVzID0geyBbTUVUSE9EX05BTUVfQUxMXTogLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkgfTtcbiAgfVxuICBhZGQobWV0aG9kLCBwYXRoLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgbWlkZGxld2FyZSA9IHRoaXMuI21pZGRsZXdhcmU7XG4gICAgY29uc3Qgcm91dGVzID0gdGhpcy4jcm91dGVzO1xuICAgIGlmICghbWlkZGxld2FyZSB8fCAhcm91dGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoTUVTU0FHRV9NQVRDSEVSX0lTX0FMUkVBRFlfQlVJTFQpO1xuICAgIH1cbiAgICBpZiAoIW1pZGRsZXdhcmVbbWV0aG9kXSkge1xuICAgICAgO1xuICAgICAgW21pZGRsZXdhcmUsIHJvdXRlc10uZm9yRWFjaCgoaGFuZGxlck1hcCkgPT4ge1xuICAgICAgICBoYW5kbGVyTWFwW21ldGhvZF0gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgT2JqZWN0LmtleXMoaGFuZGxlck1hcFtNRVRIT0RfTkFNRV9BTExdKS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgaGFuZGxlck1hcFttZXRob2RdW3BdID0gWy4uLmhhbmRsZXJNYXBbTUVUSE9EX05BTUVfQUxMXVtwXV07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwYXRoID09PSBcIi8qXCIpIHtcbiAgICAgIHBhdGggPSBcIipcIjtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1Db3VudCA9IChwYXRoLm1hdGNoKC9cXC86L2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgaWYgKC9cXCokLy50ZXN0KHBhdGgpKSB7XG4gICAgICBjb25zdCByZSA9IGJ1aWxkV2lsZGNhcmRSZWdFeHAocGF0aCk7XG4gICAgICBpZiAobWV0aG9kID09PSBNRVRIT0RfTkFNRV9BTEwpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobWlkZGxld2FyZSkuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgICAgIG1pZGRsZXdhcmVbbV1bcGF0aF0gfHw9IGZpbmRNaWRkbGV3YXJlKG1pZGRsZXdhcmVbbV0sIHBhdGgpIHx8IGZpbmRNaWRkbGV3YXJlKG1pZGRsZXdhcmVbTUVUSE9EX05BTUVfQUxMXSwgcGF0aCkgfHwgW107XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWlkZGxld2FyZVttZXRob2RdW3BhdGhdIHx8PSBmaW5kTWlkZGxld2FyZShtaWRkbGV3YXJlW21ldGhvZF0sIHBhdGgpIHx8IGZpbmRNaWRkbGV3YXJlKG1pZGRsZXdhcmVbTUVUSE9EX05BTUVfQUxMXSwgcGF0aCkgfHwgW107XG4gICAgICB9XG4gICAgICBPYmplY3Qua2V5cyhtaWRkbGV3YXJlKS5mb3JFYWNoKChtKSA9PiB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IE1FVEhPRF9OQU1FX0FMTCB8fCBtZXRob2QgPT09IG0pIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhtaWRkbGV3YXJlW21dKS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICByZS50ZXN0KHApICYmIG1pZGRsZXdhcmVbbV1bcF0ucHVzaChbaGFuZGxlciwgcGFyYW1Db3VudF0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHJvdXRlcykuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgICBpZiAobWV0aG9kID09PSBNRVRIT0RfTkFNRV9BTEwgfHwgbWV0aG9kID09PSBtKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocm91dGVzW21dKS5mb3JFYWNoKFxuICAgICAgICAgICAgKHApID0+IHJlLnRlc3QocCkgJiYgcm91dGVzW21dW3BdLnB1c2goW2hhbmRsZXIsIHBhcmFtQ291bnRdKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRocyA9IGNoZWNrT3B0aW9uYWxQYXJhbWV0ZXIocGF0aCkgfHwgW3BhdGhdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXRocy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgcGF0aDIgPSBwYXRoc1tpXTtcbiAgICAgIE9iamVjdC5rZXlzKHJvdXRlcykuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgICBpZiAobWV0aG9kID09PSBNRVRIT0RfTkFNRV9BTEwgfHwgbWV0aG9kID09PSBtKSB7XG4gICAgICAgICAgcm91dGVzW21dW3BhdGgyXSB8fD0gW1xuICAgICAgICAgICAgLi4uZmluZE1pZGRsZXdhcmUobWlkZGxld2FyZVttXSwgcGF0aDIpIHx8IGZpbmRNaWRkbGV3YXJlKG1pZGRsZXdhcmVbTUVUSE9EX05BTUVfQUxMXSwgcGF0aDIpIHx8IFtdXG4gICAgICAgICAgXTtcbiAgICAgICAgICByb3V0ZXNbbV1bcGF0aDJdLnB1c2goW2hhbmRsZXIsIHBhcmFtQ291bnQgLSBsZW4gKyBpICsgMV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgbWF0Y2ggPSBtYXRjaDtcbiAgYnVpbGRBbGxNYXRjaGVycygpIHtcbiAgICBjb25zdCBtYXRjaGVycyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuI3JvdXRlcykuY29uY2F0KE9iamVjdC5rZXlzKHRoaXMuI21pZGRsZXdhcmUpKS5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICAgIG1hdGNoZXJzW21ldGhvZF0gfHw9IHRoaXMuI2J1aWxkTWF0Y2hlcihtZXRob2QpO1xuICAgIH0pO1xuICAgIHRoaXMuI21pZGRsZXdhcmUgPSB0aGlzLiNyb3V0ZXMgPSB2b2lkIDA7XG4gICAgY2xlYXJXaWxkY2FyZFJlZ0V4cENhY2hlKCk7XG4gICAgcmV0dXJuIG1hdGNoZXJzO1xuICB9XG4gICNidWlsZE1hdGNoZXIobWV0aG9kKSB7XG4gICAgY29uc3Qgcm91dGVzID0gW107XG4gICAgbGV0IGhhc093blJvdXRlID0gbWV0aG9kID09PSBNRVRIT0RfTkFNRV9BTEw7XG4gICAgW3RoaXMuI21pZGRsZXdhcmUsIHRoaXMuI3JvdXRlc10uZm9yRWFjaCgocikgPT4ge1xuICAgICAgY29uc3Qgb3duUm91dGUgPSByW21ldGhvZF0gPyBPYmplY3Qua2V5cyhyW21ldGhvZF0pLm1hcCgocGF0aCkgPT4gW3BhdGgsIHJbbWV0aG9kXVtwYXRoXV0pIDogW107XG4gICAgICBpZiAob3duUm91dGUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGhhc093blJvdXRlIHx8PSB0cnVlO1xuICAgICAgICByb3V0ZXMucHVzaCguLi5vd25Sb3V0ZSk7XG4gICAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gTUVUSE9EX05BTUVfQUxMKSB7XG4gICAgICAgIHJvdXRlcy5wdXNoKFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKHJbTUVUSE9EX05BTUVfQUxMXSkubWFwKChwYXRoKSA9PiBbcGF0aCwgcltNRVRIT0RfTkFNRV9BTExdW3BhdGhdXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWhhc093blJvdXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1aWxkTWF0Y2hlckZyb21QcmVwcm9jZXNzZWRSb3V0ZXMocm91dGVzKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQge1xuICBSZWdFeHBSb3V0ZXJcbn07XG4iLAogICAgIi8vIHNyYy9yb3V0ZXIvcmVnLWV4cC1yb3V0ZXIvcHJlcGFyZWQtcm91dGVyLnRzXG5pbXBvcnQgeyBNRVRIT0RfTkFNRV9BTEwgfSBmcm9tIFwiLi4vLi4vcm91dGVyLmpzXCI7XG5pbXBvcnQgeyBtYXRjaCwgZW1wdHlQYXJhbSB9IGZyb20gXCIuL21hdGNoZXIuanNcIjtcbmltcG9ydCB7IFJlZ0V4cFJvdXRlciB9IGZyb20gXCIuL3JvdXRlci5qc1wiO1xudmFyIFByZXBhcmVkUmVnRXhwUm91dGVyID0gY2xhc3Mge1xuICBuYW1lID0gXCJQcmVwYXJlZFJlZ0V4cFJvdXRlclwiO1xuICAjbWF0Y2hlcnM7XG4gICNyZWxvY2F0ZU1hcDtcbiAgY29uc3RydWN0b3IobWF0Y2hlcnMsIHJlbG9jYXRlTWFwKSB7XG4gICAgdGhpcy4jbWF0Y2hlcnMgPSBtYXRjaGVycztcbiAgICB0aGlzLiNyZWxvY2F0ZU1hcCA9IHJlbG9jYXRlTWFwO1xuICB9XG4gICNhZGRXaWxkY2FyZChtZXRob2QsIGhhbmRsZXJEYXRhKSB7XG4gICAgY29uc3QgbWF0Y2hlciA9IHRoaXMuI21hdGNoZXJzW21ldGhvZF07XG4gICAgbWF0Y2hlclsxXS5mb3JFYWNoKChsaXN0KSA9PiBsaXN0ICYmIGxpc3QucHVzaChoYW5kbGVyRGF0YSkpO1xuICAgIE9iamVjdC52YWx1ZXMobWF0Y2hlclsyXSkuZm9yRWFjaCgobGlzdCkgPT4gbGlzdFswXS5wdXNoKGhhbmRsZXJEYXRhKSk7XG4gIH1cbiAgI2FkZFBhdGgobWV0aG9kLCBwYXRoLCBoYW5kbGVyLCBpbmRleGVzLCBtYXApIHtcbiAgICBjb25zdCBtYXRjaGVyID0gdGhpcy4jbWF0Y2hlcnNbbWV0aG9kXTtcbiAgICBpZiAoIW1hcCkge1xuICAgICAgbWF0Y2hlclsyXVtwYXRoXVswXS5wdXNoKFtoYW5kbGVyLCB7fV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleGVzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBtYXRjaGVyWzFdW2luZGV4XS5wdXNoKFtoYW5kbGVyLCBtYXBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICA7XG4gICAgICAgICAgbWF0Y2hlclsyXVtpbmRleCB8fCBwYXRoXVswXS5wdXNoKFtoYW5kbGVyLCBtYXBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGFkZChtZXRob2QsIHBhdGgsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXMuI21hdGNoZXJzW21ldGhvZF0pIHtcbiAgICAgIGNvbnN0IGFsbCA9IHRoaXMuI21hdGNoZXJzW01FVEhPRF9OQU1FX0FMTF07XG4gICAgICBjb25zdCBzdGF0aWNNYXAgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGFsbFsyXSkge1xuICAgICAgICBzdGF0aWNNYXBba2V5XSA9IFthbGxbMl1ba2V5XVswXS5zbGljZSgpLCBlbXB0eVBhcmFtXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuI21hdGNoZXJzW21ldGhvZF0gPSBbXG4gICAgICAgIGFsbFswXSxcbiAgICAgICAgYWxsWzFdLm1hcCgobGlzdCkgPT4gQXJyYXkuaXNBcnJheShsaXN0KSA/IGxpc3Quc2xpY2UoKSA6IDApLFxuICAgICAgICBzdGF0aWNNYXBcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChwYXRoID09PSBcIi8qXCIgfHwgcGF0aCA9PT0gXCIqXCIpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJEYXRhID0gW2hhbmRsZXIsIHt9XTtcbiAgICAgIGlmIChtZXRob2QgPT09IE1FVEhPRF9OQU1FX0FMTCkge1xuICAgICAgICBmb3IgKGNvbnN0IG0gaW4gdGhpcy4jbWF0Y2hlcnMpIHtcbiAgICAgICAgICB0aGlzLiNhZGRXaWxkY2FyZChtLCBoYW5kbGVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2FkZFdpbGRjYXJkKG1ldGhvZCwgaGFuZGxlckRhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gdGhpcy4jcmVsb2NhdGVNYXBbcGF0aF07XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXRofSBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtpbmRleGVzLCBtYXBdIG9mIGRhdGEpIHtcbiAgICAgIGlmIChtZXRob2QgPT09IE1FVEhPRF9OQU1FX0FMTCkge1xuICAgICAgICBmb3IgKGNvbnN0IG0gaW4gdGhpcy4jbWF0Y2hlcnMpIHtcbiAgICAgICAgICB0aGlzLiNhZGRQYXRoKG0sIHBhdGgsIGhhbmRsZXIsIGluZGV4ZXMsIG1hcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2FkZFBhdGgobWV0aG9kLCBwYXRoLCBoYW5kbGVyLCBpbmRleGVzLCBtYXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBidWlsZEFsbE1hdGNoZXJzKCkge1xuICAgIHJldHVybiB0aGlzLiNtYXRjaGVycztcbiAgfVxuICBtYXRjaCA9IG1hdGNoO1xufTtcbnZhciBidWlsZEluaXRQYXJhbXMgPSAoeyBwYXRocyB9KSA9PiB7XG4gIGNvbnN0IFJlZ0V4cFJvdXRlcldpdGhNYXRjaGVyRXhwb3J0ID0gY2xhc3MgZXh0ZW5kcyBSZWdFeHBSb3V0ZXIge1xuICAgIGJ1aWxkQW5kRXhwb3J0QWxsTWF0Y2hlcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZEFsbE1hdGNoZXJzKCk7XG4gICAgfVxuICB9O1xuICBjb25zdCByb3V0ZXIgPSBuZXcgUmVnRXhwUm91dGVyV2l0aE1hdGNoZXJFeHBvcnQoKTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgcm91dGVyLmFkZChNRVRIT0RfTkFNRV9BTEwsIHBhdGgsIHBhdGgpO1xuICB9XG4gIGNvbnN0IG1hdGNoZXJzID0gcm91dGVyLmJ1aWxkQW5kRXhwb3J0QWxsTWF0Y2hlcnMoKTtcbiAgY29uc3QgYWxsID0gbWF0Y2hlcnNbTUVUSE9EX05BTUVfQUxMXTtcbiAgY29uc3QgcmVsb2NhdGVNYXAgPSB7fTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgaWYgKHBhdGggPT09IFwiLypcIiB8fCBwYXRoID09PSBcIipcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFsbFsxXS5mb3JFYWNoKChsaXN0LCBpKSA9PiB7XG4gICAgICBsaXN0LmZvckVhY2goKFtwLCBtYXBdKSA9PiB7XG4gICAgICAgIGlmIChwID09PSBwYXRoKSB7XG4gICAgICAgICAgaWYgKHJlbG9jYXRlTWFwW3BhdGhdKSB7XG4gICAgICAgICAgICByZWxvY2F0ZU1hcFtwYXRoXVswXVsxXSA9IHtcbiAgICAgICAgICAgICAgLi4ucmVsb2NhdGVNYXBbcGF0aF1bMF1bMV0sXG4gICAgICAgICAgICAgIC4uLm1hcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVsb2NhdGVNYXBbcGF0aF0gPSBbW1tdLCBtYXBdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlbG9jYXRlTWFwW3BhdGhdWzBdWzBdLmZpbmRJbmRleCgoaikgPT4gaiA9PT0gaSkgPT09IC0xKSB7XG4gICAgICAgICAgICByZWxvY2F0ZU1hcFtwYXRoXVswXVswXS5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBwYXRoMiBpbiBhbGxbMl0pIHtcbiAgICAgIGFsbFsyXVtwYXRoMl1bMF0uZm9yRWFjaCgoW3BdKSA9PiB7XG4gICAgICAgIGlmIChwID09PSBwYXRoKSB7XG4gICAgICAgICAgcmVsb2NhdGVNYXBbcGF0aF0gfHw9IFtbW11dXTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhdGgyID09PSBwYXRoID8gXCJcIiA6IHBhdGgyO1xuICAgICAgICAgIGlmIChyZWxvY2F0ZU1hcFtwYXRoXVswXVswXS5maW5kSW5kZXgoKHYpID0+IHYgPT09IHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJlbG9jYXRlTWFwW3BhdGhdWzBdWzBdLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhbGxbMV0ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhbGxbMV1baV0gPSBhbGxbMV1baV0gPyBbXSA6IDA7XG4gIH1cbiAgZm9yIChjb25zdCBwYXRoIGluIGFsbFsyXSkge1xuICAgIGFsbFsyXVtwYXRoXVswXSA9IFtdO1xuICB9XG4gIHJldHVybiBbbWF0Y2hlcnMsIHJlbG9jYXRlTWFwXTtcbn07XG52YXIgc2VyaWFsaXplSW5pdFBhcmFtcyA9IChbbWF0Y2hlcnMsIHJlbG9jYXRlTWFwXSkgPT4ge1xuICBjb25zdCBtYXRjaGVyc1N0ciA9IEpTT04uc3RyaW5naWZ5KFxuICAgIG1hdGNoZXJzLFxuICAgIChfLCB2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgPyBgIyMke3ZhbHVlLnRvU3RyaW5nKCl9IyNgIDogdmFsdWVcbiAgKS5yZXBsYWNlKC9cIiMjKC4rPykjI1wiL2csIChfLCBzdHIpID0+IHN0ci5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikpO1xuICBjb25zdCByZWxvY2F0ZU1hcFN0ciA9IEpTT04uc3RyaW5naWZ5KHJlbG9jYXRlTWFwKTtcbiAgcmV0dXJuIGBbJHttYXRjaGVyc1N0cn0sJHtyZWxvY2F0ZU1hcFN0cn1dYDtcbn07XG5leHBvcnQge1xuICBQcmVwYXJlZFJlZ0V4cFJvdXRlcixcbiAgYnVpbGRJbml0UGFyYW1zLFxuICBzZXJpYWxpemVJbml0UGFyYW1zXG59O1xuIiwKICAgICIvLyBzcmMvcm91dGVyL3JlZy1leHAtcm91dGVyL2luZGV4LnRzXG5pbXBvcnQgeyBSZWdFeHBSb3V0ZXIgfSBmcm9tIFwiLi9yb3V0ZXIuanNcIjtcbmltcG9ydCB7IFByZXBhcmVkUmVnRXhwUm91dGVyLCBidWlsZEluaXRQYXJhbXMsIHNlcmlhbGl6ZUluaXRQYXJhbXMgfSBmcm9tIFwiLi9wcmVwYXJlZC1yb3V0ZXIuanNcIjtcbmV4cG9ydCB7XG4gIFByZXBhcmVkUmVnRXhwUm91dGVyLFxuICBSZWdFeHBSb3V0ZXIsXG4gIGJ1aWxkSW5pdFBhcmFtcyxcbiAgc2VyaWFsaXplSW5pdFBhcmFtc1xufTtcbiIsCiAgICAiLy8gc3JjL3JvdXRlci9zbWFydC1yb3V0ZXIvcm91dGVyLnRzXG5pbXBvcnQgeyBNRVNTQUdFX01BVENIRVJfSVNfQUxSRUFEWV9CVUlMVCwgVW5zdXBwb3J0ZWRQYXRoRXJyb3IgfSBmcm9tIFwiLi4vLi4vcm91dGVyLmpzXCI7XG52YXIgU21hcnRSb3V0ZXIgPSBjbGFzcyB7XG4gIG5hbWUgPSBcIlNtYXJ0Um91dGVyXCI7XG4gICNyb3V0ZXJzID0gW107XG4gICNyb3V0ZXMgPSBbXTtcbiAgY29uc3RydWN0b3IoaW5pdCkge1xuICAgIHRoaXMuI3JvdXRlcnMgPSBpbml0LnJvdXRlcnM7XG4gIH1cbiAgYWRkKG1ldGhvZCwgcGF0aCwgaGFuZGxlcikge1xuICAgIGlmICghdGhpcy4jcm91dGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoTUVTU0FHRV9NQVRDSEVSX0lTX0FMUkVBRFlfQlVJTFQpO1xuICAgIH1cbiAgICB0aGlzLiNyb3V0ZXMucHVzaChbbWV0aG9kLCBwYXRoLCBoYW5kbGVyXSk7XG4gIH1cbiAgbWF0Y2gobWV0aG9kLCBwYXRoKSB7XG4gICAgaWYgKCF0aGlzLiNyb3V0ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhdGFsIGVycm9yXCIpO1xuICAgIH1cbiAgICBjb25zdCByb3V0ZXJzID0gdGhpcy4jcm91dGVycztcbiAgICBjb25zdCByb3V0ZXMgPSB0aGlzLiNyb3V0ZXM7XG4gICAgY29uc3QgbGVuID0gcm91dGVycy5sZW5ndGg7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCByZXM7XG4gICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3Qgcm91dGVyID0gcm91dGVyc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGkyID0gMCwgbGVuMiA9IHJvdXRlcy5sZW5ndGg7IGkyIDwgbGVuMjsgaTIrKykge1xuICAgICAgICAgIHJvdXRlci5hZGQoLi4ucm91dGVzW2kyXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gcm91dGVyLm1hdGNoKG1ldGhvZCwgcGF0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgVW5zdXBwb3J0ZWRQYXRoRXJyb3IpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgdGhpcy5tYXRjaCA9IHJvdXRlci5tYXRjaC5iaW5kKHJvdXRlcik7XG4gICAgICB0aGlzLiNyb3V0ZXJzID0gW3JvdXRlcl07XG4gICAgICB0aGlzLiNyb3V0ZXMgPSB2b2lkIDA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGkgPT09IGxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmF0YWwgZXJyb3JcIik7XG4gICAgfVxuICAgIHRoaXMubmFtZSA9IGBTbWFydFJvdXRlciArICR7dGhpcy5hY3RpdmVSb3V0ZXIubmFtZX1gO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgZ2V0IGFjdGl2ZVJvdXRlcigpIHtcbiAgICBpZiAodGhpcy4jcm91dGVzIHx8IHRoaXMuI3JvdXRlcnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhY3RpdmUgcm91dGVyIGhhcyBiZWVuIGRldGVybWluZWQgeWV0LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI3JvdXRlcnNbMF07XG4gIH1cbn07XG5leHBvcnQge1xuICBTbWFydFJvdXRlclxufTtcbiIsCiAgICAiLy8gc3JjL3JvdXRlci9zbWFydC1yb3V0ZXIvaW5kZXgudHNcbmltcG9ydCB7IFNtYXJ0Um91dGVyIH0gZnJvbSBcIi4vcm91dGVyLmpzXCI7XG5leHBvcnQge1xuICBTbWFydFJvdXRlclxufTtcbiIsCiAgICAiLy8gc3JjL3JvdXRlci90cmllLXJvdXRlci9ub2RlLnRzXG5pbXBvcnQgeyBNRVRIT0RfTkFNRV9BTEwgfSBmcm9tIFwiLi4vLi4vcm91dGVyLmpzXCI7XG5pbXBvcnQgeyBnZXRQYXR0ZXJuLCBzcGxpdFBhdGgsIHNwbGl0Um91dGluZ1BhdGggfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXJsLmpzXCI7XG52YXIgZW1wdHlQYXJhbXMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbnZhciBOb2RlID0gY2xhc3MgX05vZGUge1xuICAjbWV0aG9kcztcbiAgI2NoaWxkcmVuO1xuICAjcGF0dGVybnM7XG4gICNvcmRlciA9IDA7XG4gICNwYXJhbXMgPSBlbXB0eVBhcmFtcztcbiAgY29uc3RydWN0b3IobWV0aG9kLCBoYW5kbGVyLCBjaGlsZHJlbikge1xuICAgIHRoaXMuI2NoaWxkcmVuID0gY2hpbGRyZW4gfHwgLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy4jbWV0aG9kcyA9IFtdO1xuICAgIGlmIChtZXRob2QgJiYgaGFuZGxlcikge1xuICAgICAgY29uc3QgbSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgbVttZXRob2RdID0geyBoYW5kbGVyLCBwb3NzaWJsZUtleXM6IFtdLCBzY29yZTogMCB9O1xuICAgICAgdGhpcy4jbWV0aG9kcyA9IFttXTtcbiAgICB9XG4gICAgdGhpcy4jcGF0dGVybnMgPSBbXTtcbiAgfVxuICBpbnNlcnQobWV0aG9kLCBwYXRoLCBoYW5kbGVyKSB7XG4gICAgdGhpcy4jb3JkZXIgPSArK3RoaXMuI29yZGVyO1xuICAgIGxldCBjdXJOb2RlID0gdGhpcztcbiAgICBjb25zdCBwYXJ0cyA9IHNwbGl0Um91dGluZ1BhdGgocGF0aCk7XG4gICAgY29uc3QgcG9zc2libGVLZXlzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwID0gcGFydHNbaV07XG4gICAgICBjb25zdCBuZXh0UCA9IHBhcnRzW2kgKyAxXTtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBnZXRQYXR0ZXJuKHAsIG5leHRQKTtcbiAgICAgIGNvbnN0IGtleSA9IEFycmF5LmlzQXJyYXkocGF0dGVybikgPyBwYXR0ZXJuWzBdIDogcDtcbiAgICAgIGlmIChrZXkgaW4gY3VyTm9kZS4jY2hpbGRyZW4pIHtcbiAgICAgICAgY3VyTm9kZSA9IGN1ck5vZGUuI2NoaWxkcmVuW2tleV07XG4gICAgICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICAgICAgcG9zc2libGVLZXlzLnB1c2gocGF0dGVyblsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjdXJOb2RlLiNjaGlsZHJlbltrZXldID0gbmV3IF9Ob2RlKCk7XG4gICAgICBpZiAocGF0dGVybikge1xuICAgICAgICBjdXJOb2RlLiNwYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICAgICAgICBwb3NzaWJsZUtleXMucHVzaChwYXR0ZXJuWzFdKTtcbiAgICAgIH1cbiAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLiNjaGlsZHJlbltrZXldO1xuICAgIH1cbiAgICBjdXJOb2RlLiNtZXRob2RzLnB1c2goe1xuICAgICAgW21ldGhvZF06IHtcbiAgICAgICAgaGFuZGxlcixcbiAgICAgICAgcG9zc2libGVLZXlzOiBwb3NzaWJsZUtleXMuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmluZGV4T2YodikgPT09IGkpLFxuICAgICAgICBzY29yZTogdGhpcy4jb3JkZXJcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY3VyTm9kZTtcbiAgfVxuICAjZ2V0SGFuZGxlclNldHMobm9kZSwgbWV0aG9kLCBub2RlUGFyYW1zLCBwYXJhbXMpIHtcbiAgICBjb25zdCBoYW5kbGVyU2V0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBub2RlLiNtZXRob2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBtID0gbm9kZS4jbWV0aG9kc1tpXTtcbiAgICAgIGNvbnN0IGhhbmRsZXJTZXQgPSBtW21ldGhvZF0gfHwgbVtNRVRIT0RfTkFNRV9BTExdO1xuICAgICAgY29uc3QgcHJvY2Vzc2VkU2V0ID0ge307XG4gICAgICBpZiAoaGFuZGxlclNldCAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGhhbmRsZXJTZXQucGFyYW1zID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGhhbmRsZXJTZXRzLnB1c2goaGFuZGxlclNldCk7XG4gICAgICAgIGlmIChub2RlUGFyYW1zICE9PSBlbXB0eVBhcmFtcyB8fCBwYXJhbXMgJiYgcGFyYW1zICE9PSBlbXB0eVBhcmFtcykge1xuICAgICAgICAgIGZvciAobGV0IGkyID0gMCwgbGVuMiA9IGhhbmRsZXJTZXQucG9zc2libGVLZXlzLmxlbmd0aDsgaTIgPCBsZW4yOyBpMisrKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBoYW5kbGVyU2V0LnBvc3NpYmxlS2V5c1tpMl07XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBwcm9jZXNzZWRTZXRbaGFuZGxlclNldC5zY29yZV07XG4gICAgICAgICAgICBoYW5kbGVyU2V0LnBhcmFtc1trZXldID0gcGFyYW1zPy5ba2V5XSAmJiAhcHJvY2Vzc2VkID8gcGFyYW1zW2tleV0gOiBub2RlUGFyYW1zW2tleV0gPz8gcGFyYW1zPy5ba2V5XTtcbiAgICAgICAgICAgIHByb2Nlc3NlZFNldFtoYW5kbGVyU2V0LnNjb3JlXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyU2V0cztcbiAgfVxuICBzZWFyY2gobWV0aG9kLCBwYXRoKSB7XG4gICAgY29uc3QgaGFuZGxlclNldHMgPSBbXTtcbiAgICB0aGlzLiNwYXJhbXMgPSBlbXB0eVBhcmFtcztcbiAgICBjb25zdCBjdXJOb2RlID0gdGhpcztcbiAgICBsZXQgY3VyTm9kZXMgPSBbY3VyTm9kZV07XG4gICAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGgocGF0aCk7XG4gICAgY29uc3QgY3VyTm9kZXNRdWV1ZSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgcGFydCA9IHBhcnRzW2ldO1xuICAgICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gbGVuIC0gMTtcbiAgICAgIGNvbnN0IHRlbXBOb2RlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbjIgPSBjdXJOb2Rlcy5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGN1ck5vZGVzW2pdO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG5vZGUuI2NoaWxkcmVuW3BhcnRdO1xuICAgICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgICBuZXh0Tm9kZS4jcGFyYW1zID0gbm9kZS4jcGFyYW1zO1xuICAgICAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS4jY2hpbGRyZW5bXCIqXCJdKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXJTZXRzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy4jZ2V0SGFuZGxlclNldHMobmV4dE5vZGUuI2NoaWxkcmVuW1wiKlwiXSwgbWV0aG9kLCBub2RlLiNwYXJhbXMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyU2V0cy5wdXNoKC4uLnRoaXMuI2dldEhhbmRsZXJTZXRzKG5leHROb2RlLCBtZXRob2QsIG5vZGUuI3BhcmFtcykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wTm9kZXMucHVzaChuZXh0Tm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4zID0gbm9kZS4jcGF0dGVybnMubGVuZ3RoOyBrIDwgbGVuMzsgaysrKSB7XG4gICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5vZGUuI3BhdHRlcm5zW2tdO1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IG5vZGUuI3BhcmFtcyA9PT0gZW1wdHlQYXJhbXMgPyB7fSA6IHsgLi4ubm9kZS4jcGFyYW1zIH07XG4gICAgICAgICAgaWYgKHBhdHRlcm4gPT09IFwiKlwiKSB7XG4gICAgICAgICAgICBjb25zdCBhc3ROb2RlID0gbm9kZS4jY2hpbGRyZW5bXCIqXCJdO1xuICAgICAgICAgICAgaWYgKGFzdE5vZGUpIHtcbiAgICAgICAgICAgICAgaGFuZGxlclNldHMucHVzaCguLi50aGlzLiNnZXRIYW5kbGVyU2V0cyhhc3ROb2RlLCBtZXRob2QsIG5vZGUuI3BhcmFtcykpO1xuICAgICAgICAgICAgICBhc3ROb2RlLiNwYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgICAgIHRlbXBOb2Rlcy5wdXNoKGFzdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFtrZXksIG5hbWUsIG1hdGNoZXJdID0gcGF0dGVybjtcbiAgICAgICAgICBpZiAoIXBhcnQgJiYgIShtYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS4jY2hpbGRyZW5ba2V5XTtcbiAgICAgICAgICBjb25zdCByZXN0UGF0aFN0cmluZyA9IHBhcnRzLnNsaWNlKGkpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgIGlmIChtYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICBjb25zdCBtID0gbWF0Y2hlci5leGVjKHJlc3RQYXRoU3RyaW5nKTtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgIHBhcmFtc1tuYW1lXSA9IG1bMF07XG4gICAgICAgICAgICAgIGhhbmRsZXJTZXRzLnB1c2goLi4udGhpcy4jZ2V0SGFuZGxlclNldHMoY2hpbGQsIG1ldGhvZCwgbm9kZS4jcGFyYW1zLCBwYXJhbXMpKTtcbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoaWxkLiNjaGlsZHJlbikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQuI3BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRDb3VudCA9IG1bMF0ubWF0Y2goL1xcLy8pPy5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDdXJOb2RlcyA9IGN1ck5vZGVzUXVldWVbY29tcG9uZW50Q291bnRdIHx8PSBbXTtcbiAgICAgICAgICAgICAgICB0YXJnZXRDdXJOb2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hdGNoZXIgPT09IHRydWUgfHwgbWF0Y2hlci50ZXN0KHBhcnQpKSB7XG4gICAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBwYXJ0O1xuICAgICAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgICAgICBoYW5kbGVyU2V0cy5wdXNoKC4uLnRoaXMuI2dldEhhbmRsZXJTZXRzKGNoaWxkLCBtZXRob2QsIHBhcmFtcywgbm9kZS4jcGFyYW1zKSk7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC4jY2hpbGRyZW5bXCIqXCJdKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclNldHMucHVzaChcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuI2dldEhhbmRsZXJTZXRzKGNoaWxkLiNjaGlsZHJlbltcIipcIl0sIG1ldGhvZCwgcGFyYW1zLCBub2RlLiNwYXJhbXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGQuI3BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgICAgdGVtcE5vZGVzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3VyTm9kZXMgPSB0ZW1wTm9kZXMuY29uY2F0KGN1ck5vZGVzUXVldWUuc2hpZnQoKSA/PyBbXSk7XG4gICAgfVxuICAgIGlmIChoYW5kbGVyU2V0cy5sZW5ndGggPiAxKSB7XG4gICAgICBoYW5kbGVyU2V0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiBhLnNjb3JlIC0gYi5zY29yZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW2hhbmRsZXJTZXRzLm1hcCgoeyBoYW5kbGVyLCBwYXJhbXMgfSkgPT4gW2hhbmRsZXIsIHBhcmFtc10pXTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIE5vZGVcbn07XG4iLAogICAgIi8vIHNyYy9yb3V0ZXIvdHJpZS1yb3V0ZXIvcm91dGVyLnRzXG5pbXBvcnQgeyBjaGVja09wdGlvbmFsUGFyYW1ldGVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VybC5qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUuanNcIjtcbnZhciBUcmllUm91dGVyID0gY2xhc3Mge1xuICBuYW1lID0gXCJUcmllUm91dGVyXCI7XG4gICNub2RlO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNub2RlID0gbmV3IE5vZGUoKTtcbiAgfVxuICBhZGQobWV0aG9kLCBwYXRoLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGNoZWNrT3B0aW9uYWxQYXJhbWV0ZXIocGF0aCk7XG4gICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZXN1bHRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHRoaXMuI25vZGUuaW5zZXJ0KG1ldGhvZCwgcmVzdWx0c1tpXSwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuI25vZGUuaW5zZXJ0KG1ldGhvZCwgcGF0aCwgaGFuZGxlcik7XG4gIH1cbiAgbWF0Y2gobWV0aG9kLCBwYXRoKSB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGUuc2VhcmNoKG1ldGhvZCwgcGF0aCk7XG4gIH1cbn07XG5leHBvcnQge1xuICBUcmllUm91dGVyXG59O1xuIiwKICAgICIvLyBzcmMvcm91dGVyL3RyaWUtcm91dGVyL2luZGV4LnRzXG5pbXBvcnQgeyBUcmllUm91dGVyIH0gZnJvbSBcIi4vcm91dGVyLmpzXCI7XG5leHBvcnQge1xuICBUcmllUm91dGVyXG59O1xuIiwKICAgICIvLyBzcmMvaG9uby50c1xuaW1wb3J0IHsgSG9ub0Jhc2UgfSBmcm9tIFwiLi9ob25vLWJhc2UuanNcIjtcbmltcG9ydCB7IFJlZ0V4cFJvdXRlciB9IGZyb20gXCIuL3JvdXRlci9yZWctZXhwLXJvdXRlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU21hcnRSb3V0ZXIgfSBmcm9tIFwiLi9yb3V0ZXIvc21hcnQtcm91dGVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBUcmllUm91dGVyIH0gZnJvbSBcIi4vcm91dGVyL3RyaWUtcm91dGVyL2luZGV4LmpzXCI7XG52YXIgSG9ubyA9IGNsYXNzIGV4dGVuZHMgSG9ub0Jhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgSG9ubyBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBIb25vIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5yb3V0ZXIgPSBvcHRpb25zLnJvdXRlciA/PyBuZXcgU21hcnRSb3V0ZXIoe1xuICAgICAgcm91dGVyczogW25ldyBSZWdFeHBSb3V0ZXIoKSwgbmV3IFRyaWVSb3V0ZXIoKV1cbiAgICB9KTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIEhvbm9cbn07XG4iLAogICAgIi8vIHNyYy9pbmRleC50c1xuaW1wb3J0IHsgSG9ubyB9IGZyb20gXCIuL2hvbm8uanNcIjtcbmV4cG9ydCB7XG4gIEhvbm9cbn07XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiByZXR1cm5SZXNwb25zZShjdHgsIHJlc3VsdCkge1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSlcbiAgICAgICAgcmV0dXJuIGN0eC5ib2R5KHJlc3VsdCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlc3BvbnNlKVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGN0eC50ZXh0KHJlc3VsdCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInIHx8IHR5cGVvZiByZXN1bHQgPT09ICdib29sZWFuJylcbiAgICAgICAgcmV0dXJuIGN0eC50ZXh0KFN0cmluZyhyZXN1bHQpKTtcbiAgICByZXR1cm4gY3R4Lmpzb24ocmVzdWx0KTtcbn1cbi8qKlxuICogU0hBMjU2IGhhc2ggb2YgdGhlIGdpdmVuIHZhbHVlc1xuICpcbiAqIEBwYXJhbSB2YWwgb25lIG9yIG1vcmUgc3RyaW5ncyB0byBoYXNoXG4gKiBAcmV0dXJucyBoYXNoIHN0cmluZyBpbiBoZXggZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKC4uLnZhbCkge1xuICAgIGNvbnN0IGhhc2hlciA9IG5ldyBCdW4uQ3J5cHRvSGFzaGVyKCdzaGEyNTYnKTtcbiAgICB2YWwubWFwKCh2YWwpID0+IGhhc2hlci51cGRhdGUodmFsKSk7XG4gICAgcmV0dXJuIGhhc2hlci5kaWdlc3QoKS50b0hleCgpO1xufVxuLyoqXG4gKiBTYWZlbHkgc3RyaW5naWZ5IGFuIG9iamVjdCB0byBKU09OLCBoYW5kbGluZyBjaXJjdWxhciByZWZlcmVuY2VzXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBzdHJpbmdpZnlcbiAqIEByZXR1cm5zIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlU3RyaW5naWZ5KG9iaikge1xuICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgZnVuY3Rpb24gcmVwbGFjZXIoX2tleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBhbHJlYWR5IGluIG91ciBhbmNlc3RvciBjaGFpblxuICAgICAgICAgICAgaWYgKHN0YWNrLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZGQgdG8gc3RhY2sgYmVmb3JlIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgb2JqZWN0XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFtdIDoge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba10gPSByZXBsYWNlcihrLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHN0YWNrIGFmdGVyIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXBsYWNlcignJywgb2JqKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fdXRpbC5qcy5tYXAiLAogICAgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEhvbm8gfSBmcm9tICdob25vJztcbmltcG9ydCB7IHJldHVyblJlc3BvbnNlIH0gZnJvbSAnLi9fdXRpbCc7XG4vKipcbiAqIENyZWF0ZXMgYSBIb25vIHJvdXRlciB3aXRoIGV4dGVuZGVkIG1ldGhvZHMgZm9yIEFnZW50dWl0eS1zcGVjaWZpYyByb3V0aW5nIHBhdHRlcm5zLlxuICpcbiAqIFN0YW5kYXJkIEhUVFAgbWV0aG9kcyAoZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZSwgcGF0Y2gpIGFyZSBhdmFpbGFibGUsIHBsdXMgbWlkZGxld2FyZVxuICogZnVuY3Rpb25zIGZvciBzcGVjaWFsaXplZCBwcm90b2NvbHM6XG4gKlxuICogLSAqKndlYnNvY2tldCgpKiogLSBXZWJTb2NrZXQgY29ubmVjdGlvbnMgKGltcG9ydCB7IHdlYnNvY2tldCB9IGZyb20gJ0BhZ2VudHVpdHkvcnVudGltZScpXG4gKiAtICoqc3NlKCkqKiAtIFNlcnZlci1TZW50IEV2ZW50cyAoaW1wb3J0IHsgc3NlIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJylcbiAqIC0gKipzdHJlYW0oKSoqIC0gU3RyZWFtaW5nIHJlc3BvbnNlcyAoaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJylcbiAqIC0gKipjcm9uKCkqKiAtIFNjaGVkdWxlZCB0YXNrcyAoaW1wb3J0IHsgY3JvbiB9IGZyb20gJ0BhZ2VudHVpdHkvcnVudGltZScpXG4gKlxuICogQHRlbXBsYXRlIEUgLSBFbnZpcm9ubWVudCB0eXBlIChIb25vIEVudilcbiAqIEB0ZW1wbGF0ZSBTIC0gU2NoZW1hIHR5cGUgZm9yIHJvdXRlIGRlZmluaXRpb25zXG4gKlxuICogQHJldHVybnMgRXh0ZW5kZWQgSG9ubyByb3V0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY3JlYXRlUm91dGVyLCB3ZWJzb2NrZXQsIHNzZSwgc3RyZWFtLCBjcm9uIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbiAqXG4gKiBjb25zdCByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoKTtcbiAqXG4gKiAvLyBTdGFuZGFyZCBIVFRQIHJvdXRlc1xuICogcm91dGVyLmdldCgnL2hlbGxvJywgKGMpID0+IGMudGV4dCgnSGVsbG8hJykpO1xuICogcm91dGVyLnBvc3QoJy9kYXRhJywgYXN5bmMgKGMpID0+IHtcbiAqICAgY29uc3QgYm9keSA9IGF3YWl0IGMucmVxLmpzb24oKTtcbiAqICAgcmV0dXJuIGMuanNvbih7IHJlY2VpdmVkOiBib2R5IH0pO1xuICogfSk7XG4gKlxuICogLy8gV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAqIHJvdXRlci5nZXQoJy93cycsIHdlYnNvY2tldCgoYywgd3MpID0+IHtcbiAqICAgd3Mub25NZXNzYWdlKChldmVudCkgPT4ge1xuICogICAgIHdzLnNlbmQoJ0VjaG86ICcgKyBldmVudC5kYXRhKTtcbiAqICAgfSk7XG4gKiB9KSk7XG4gKlxuICogLy8gU2VydmVyLVNlbnQgRXZlbnRzXG4gKiByb3V0ZXIuZ2V0KCcvZXZlbnRzJywgc3NlKChjLCBzdHJlYW0pID0+IHtcbiAqICAgc3RyZWFtLndyaXRlU1NFKHsgZGF0YTogJ0hlbGxvJywgZXZlbnQ6ICdtZXNzYWdlJyB9KTtcbiAqIH0pKTtcbiAqXG4gKiAvLyBTdHJlYW1pbmcgcmVzcG9uc2VcbiAqIHJvdXRlci5wb3N0KCcvc3RyZWFtJywgc3RyZWFtKChjKSA9PiB7XG4gKiAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICogICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAqICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSgnZGF0YVxcbicpO1xuICogICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICogICAgIH1cbiAqICAgfSk7XG4gKiB9KSk7XG4gKlxuICogLy8gQ3JvbiBqb2JcbiAqIHJvdXRlci5wb3N0KCcvZGFpbHknLCBjcm9uKCcwIDAgKiAqIConLCAoYykgPT4ge1xuICogICByZXR1cm4geyBzdGF0dXM6ICdjb21wbGV0ZScgfTtcbiAqIH0pKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUm91dGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlciA9IG5ldyBIb25vKCk7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSBuby11bnVzZWQtdmFyaWFibGVcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludDpuby1hbnlcbiAgICBjb25zdCBfcm91dGVyID0gcm91dGVyO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIFsnZ2V0JywgJ3B1dCcsICdwb3N0JywgJ2RlbGV0ZScsICdvcHRpb25zJywgJ3BhdGNoJ10pIHtcbiAgICAgICAgY29uc3QgX29yaWdpbmFsSW52b2tlciA9IF9yb3V0ZXJbbWV0aG9kXS5iaW5kKHJvdXRlcik7XG4gICAgICAgIF9yb3V0ZXJbbWV0aG9kXSA9IChwYXRoLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAvLyBQYXNzIHRocm91Z2ggdG8gb3JpZ2luYWwgSG9ubyAtIGl0IGhhbmRsZXMgYWxsIHRoZSBjb21wbGV4IHR5cGUgaW5mZXJlbmNlXG4gICAgICAgICAgICAvLyBXZSdsbCBvbmx5IHdyYXAgdGhlIGZpbmFsIGhhbmRsZXIgdG8gYWRkIG91ciByZXNwb25zZSBoYW5kbGluZ1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5hbEludm9rZXIocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGZ1bmN0aW9uIGluIGFyZ3MgLSB0aGF0J3MgdGhlIGhhbmRsZXIgKGV2ZXJ5dGhpbmcgZWxzZSBpcyBtaWRkbGV3YXJlKVxuICAgICAgICAgICAgbGV0IGhhbmRsZXJJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChoYW5kbGVySW5kZXggPj0gMCAmJiB0eXBlb2YgYXJnc1toYW5kbGVySW5kZXhdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlckluZGV4LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFuZGxlckluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIE5vIGhhbmRsZXIgZm91bmQsIHBhc3MgdGhyb3VnaCBhcy1pc1xuICAgICAgICAgICAgICAgIHJldHVybiBfb3JpZ2luYWxJbnZva2VyKHBhdGgsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGFyZ3NbaGFuZGxlckluZGV4XTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgbWlkZGxld2FyZSAoMiBwYXJhbXM6IGMsIG5leHQpIHZzIGhhbmRsZXIgKDEgcGFyYW06IGMpXG4gICAgICAgICAgICBpZiAoaGFuZGxlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG1pZGRsZXdhcmUtb25seSwgcGFzcyB0aHJvdWdoXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5hbEludm9rZXIocGF0aCwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXcmFwIHRoZSBoYW5kbGVyIHRvIGFkZCBvdXIgcmVzcG9uc2UgY29udmVyc2lvblxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IGFzeW5jIChjKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGhhbmRsZXIoYyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAvLyBJZiBoYW5kbGVyIHJldHVybnMgYSBSZXNwb25zZSwgcmV0dXJuIGl0IHVuY2hhbmdlZFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuUmVzcG9uc2UoYywgcmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBoYW5kbGVyIHdpdGggb3VyIHdyYXBwZXJcbiAgICAgICAgICAgIGNvbnN0IG5ld0FyZ3MgPSBbLi4uYXJnc107XG4gICAgICAgICAgICBuZXdBcmdzW2hhbmRsZXJJbmRleF0gPSB3cmFwcGVyO1xuICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5hbEludm9rZXIocGF0aCwgLi4ubmV3QXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIERlcHJlY2F0ZWQgc3R1YnMgdGhhdCB0aHJvdyBlcnJvcnMgd2l0aCBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zXG4gICAgX3JvdXRlci53ZWJzb2NrZXQgPSAocGF0aCwgLi4uX2FyZ3MpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByb3V0ZXIud2Vic29ja2V0KCkgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIGJlZW4gcmVtb3ZlZC5cXG5cXG5gICtcbiAgICAgICAgICAgIGBNaWdyYXRpb246IFVzZSB0aGUgd2Vic29ja2V0IG1pZGRsZXdhcmUgaW5zdGVhZDpcXG5cXG5gICtcbiAgICAgICAgICAgIGAgIGltcG9ydCB7IGNyZWF0ZVJvdXRlciwgd2Vic29ja2V0IH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcXG5cXG5gICtcbiAgICAgICAgICAgIGAgIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcigpO1xcblxcbmAgK1xuICAgICAgICAgICAgYCAgLy8gQmVmb3JlIChkZXByZWNhdGVkKTpcXG5gICtcbiAgICAgICAgICAgIGAgIC8vIHJvdXRlci53ZWJzb2NrZXQoJyR7cGF0aH0nLCAoYykgPT4gKHdzKSA9PiB7IC4uLiB9KTtcXG5cXG5gICtcbiAgICAgICAgICAgIGAgIC8vIEFmdGVyOlxcbmAgK1xuICAgICAgICAgICAgYCAgcm91dGVyLmdldCgnJHtwYXRofScsIHdlYnNvY2tldCgoYywgd3MpID0+IHtcXG5gICtcbiAgICAgICAgICAgIGAgICAgd3Mub25NZXNzYWdlKChldmVudCkgPT4ge1xcbmAgK1xuICAgICAgICAgICAgYCAgICAgIHdzLnNlbmQoJ0VjaG86ICcgKyBldmVudC5kYXRhKTtcXG5gICtcbiAgICAgICAgICAgIGAgICAgfSk7XFxuYCArXG4gICAgICAgICAgICBgICB9KSk7YCk7XG4gICAgfTtcbiAgICBfcm91dGVyLnNzZSA9IChwYXRoLCAuLi5fYXJncykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvdXRlci5zc2UoKSBpcyBkZXByZWNhdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgYE1pZ3JhdGlvbjogVXNlIHRoZSBzc2UgbWlkZGxld2FyZSBpbnN0ZWFkOlxcblxcbmAgK1xuICAgICAgICAgICAgYCAgaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBzc2UgfSBmcm9tICdAYWdlbnR1aXR5L3J1bnRpbWUnO1xcblxcbmAgK1xuICAgICAgICAgICAgYCAgY29uc3Qgcm91dGVyID0gY3JlYXRlUm91dGVyKCk7XFxuXFxuYCArXG4gICAgICAgICAgICBgICAvLyBCZWZvcmUgKGRlcHJlY2F0ZWQpOlxcbmAgK1xuICAgICAgICAgICAgYCAgLy8gcm91dGVyLnNzZSgnJHtwYXRofScsIChjKSA9PiBhc3luYyAoc3RyZWFtKSA9PiB7IC4uLiB9KTtcXG5cXG5gICtcbiAgICAgICAgICAgIGAgIC8vIEFmdGVyOlxcbmAgK1xuICAgICAgICAgICAgYCAgcm91dGVyLmdldCgnJHtwYXRofScsIHNzZSgoYywgc3RyZWFtKSA9PiB7XFxuYCArXG4gICAgICAgICAgICBgICAgIHN0cmVhbS53cml0ZVNTRSh7IGRhdGE6ICdIZWxsbycsIGV2ZW50OiAnbWVzc2FnZScgfSk7XFxuYCArXG4gICAgICAgICAgICBgICB9KSk7YCk7XG4gICAgfTtcbiAgICBfcm91dGVyLnN0cmVhbSA9IChwYXRoLCAuLi5fYXJncykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvdXRlci5zdHJlYW0oKSBpcyBkZXByZWNhdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgYE1pZ3JhdGlvbjogVXNlIHRoZSBzdHJlYW0gbWlkZGxld2FyZSBpbnN0ZWFkOlxcblxcbmAgK1xuICAgICAgICAgICAgYCAgaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBzdHJlYW0gfSBmcm9tICdAYWdlbnR1aXR5L3J1bnRpbWUnO1xcblxcbmAgK1xuICAgICAgICAgICAgYCAgY29uc3Qgcm91dGVyID0gY3JlYXRlUm91dGVyKCk7XFxuXFxuYCArXG4gICAgICAgICAgICBgICAvLyBCZWZvcmUgKGRlcHJlY2F0ZWQpOlxcbmAgK1xuICAgICAgICAgICAgYCAgLy8gcm91dGVyLnN0cmVhbSgnJHtwYXRofScsIChjKSA9PiBuZXcgUmVhZGFibGVTdHJlYW0oeyAuLi4gfSkpO1xcblxcbmAgK1xuICAgICAgICAgICAgYCAgLy8gQWZ0ZXI6XFxuYCArXG4gICAgICAgICAgICBgICByb3V0ZXIucG9zdCgnJHtwYXRofScsIHN0cmVhbSgoYykgPT4ge1xcbmAgK1xuICAgICAgICAgICAgYCAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcXG5gICtcbiAgICAgICAgICAgIGAgICAgICBzdGFydChjb250cm9sbGVyKSB7XFxuYCArXG4gICAgICAgICAgICBgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoJ2RhdGFcXFxcbicpO1xcbmAgK1xuICAgICAgICAgICAgYCAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xcbmAgK1xuICAgICAgICAgICAgYCAgICAgIH1cXG5gICtcbiAgICAgICAgICAgIGAgICAgfSk7XFxuYCArXG4gICAgICAgICAgICBgICB9KSk7YCk7XG4gICAgfTtcbiAgICBfcm91dGVyLmNyb24gPSAoc2NoZWR1bGUsIC4uLl9hcmdzKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcm91dGVyLmNyb24oKSBpcyBkZXByZWNhdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgYE1pZ3JhdGlvbjogVXNlIHRoZSBjcm9uIG1pZGRsZXdhcmUgaW5zdGVhZDpcXG5cXG5gICtcbiAgICAgICAgICAgIGAgIGltcG9ydCB7IGNyZWF0ZVJvdXRlciwgY3JvbiB9IGZyb20gJ0BhZ2VudHVpdHkvcnVudGltZSc7XFxuXFxuYCArXG4gICAgICAgICAgICBgICBjb25zdCByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoKTtcXG5cXG5gICtcbiAgICAgICAgICAgIGAgIC8vIEJlZm9yZSAoZGVwcmVjYXRlZCk6XFxuYCArXG4gICAgICAgICAgICBgICAvLyByb3V0ZXIuY3JvbignJHtzY2hlZHVsZX0nLCAoYykgPT4geyAuLi4gfSk7XFxuXFxuYCArXG4gICAgICAgICAgICBgICAvLyBBZnRlcjpcXG5gICtcbiAgICAgICAgICAgIGAgIHJvdXRlci5wb3N0KCcveW91ci1jcm9uLXBhdGgnLCBjcm9uKCcke3NjaGVkdWxlfScsIChjKSA9PiB7XFxuYCArXG4gICAgICAgICAgICBgICAgIHJldHVybiB7IHN0YXR1czogJ2NvbXBsZXRlJyB9O1xcbmAgK1xuICAgICAgICAgICAgYCAgfSkpO2ApO1xuICAgIH07XG4gICAgcmV0dXJuIHJvdXRlcjtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBjcmVhdGVSb3V0ZXIgfSBmcm9tICcuLi8uLi9yb3V0ZXInO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2NhbFN0b3JhZ2VSb3V0ZXIoZGIsIHByb2plY3RQYXRoKSB7XG4gICAgY29uc3Qgcm91dGVyID0gY3JlYXRlUm91dGVyKCk7XG4gICAgLy8gc28gd2UgY2FuIGRldGVjdCBpZiB3ZSdyZSBydW5uaW5nIGluIGxvY2FsIG1vZGUgZWFzaWx5XG4gICAgcm91dGVyLmdldCgnL19hZ2VudHVpdHkvbG9jYWwvaGVhbHRoJywgKGMpID0+IGMudGV4dCgnT0snKSk7XG4gICAgLy8gU2VydmUgc3RyZWFtczogR0VUIC9fYWdlbnR1aXR5L2xvY2FsL3N0cmVhbS86aWRcbiAgICByb3V0ZXIuZ2V0KCcvX2FnZW50dWl0eS9sb2NhbC9zdHJlYW0vOmlkJywgYXN5bmMgKGMpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBjLnJlcS5wYXJhbSgnaWQnKTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgZGF0YSwgY29udGVudF90eXBlIFxuXHRcdFx0RlJPTSBzdHJlYW1fc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIGlkID0gP1xuXHRcdGApO1xuICAgICAgICBjb25zdCByb3cgPSBxdWVyeS5nZXQocHJvamVjdFBhdGgsIGlkKTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBjLm5vdEZvdW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3cuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGMuanNvbih7IGVycm9yOiAnU3RyZWFtIG5vdCBmaW5hbGl6ZWQnIH0sIDQwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGMuYm9keShuZXcgVWludDhBcnJheShyb3cuZGF0YSksIDIwMCwge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHJvdy5jb250ZW50X3R5cGUsXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByb3V0ZXI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fcm91dGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgbm93IH0gZnJvbSAnLi9fdXRpbCc7XG5leHBvcnQgY2xhc3MgTG9jYWxLZXlWYWx1ZVN0b3JhZ2Uge1xuICAgICNkYjtcbiAgICAjcHJvamVjdFBhdGg7XG4gICAgY29uc3RydWN0b3IoZGIsIHByb2plY3RQYXRoKSB7XG4gICAgICAgIHRoaXMuI2RiID0gZGI7XG4gICAgICAgIHRoaXMuI3Byb2plY3RQYXRoID0gcHJvamVjdFBhdGg7XG4gICAgfVxuICAgIGFzeW5jIGdldChuYW1lLCBrZXkpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLiNkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgdmFsdWUsIGNvbnRlbnRfdHlwZSwgZXhwaXJlc19hdCBcblx0XHRcdEZST00ga3Zfc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIG5hbWUgPSA/IEFORCBrZXkgPSA/XG5cdFx0YCk7XG4gICAgICAgIGNvbnN0IHJvdyA9IHF1ZXJ5LmdldCh0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSwga2V5KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGV4aXN0czogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBleHBpcmF0aW9uXG4gICAgICAgIGlmIChyb3cuZXhwaXJlc19hdCAmJiByb3cuZXhwaXJlc19hdCA8IG5vdygpKSB7XG4gICAgICAgICAgICAvLyBEZWxldGUgZXhwaXJlZCByb3dcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlKG5hbWUsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4geyBleGlzdHM6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVzZXJpYWxpemUgYmFzZWQgb24gY29udGVudCB0eXBlXG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBpZiAocm93LmNvbnRlbnRfdHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSByb3cudmFsdWUudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gSWYgSlNPTiBwYXJzZSBmYWlscywgcmV0dXJuIHRoZSByYXcgYnVmZmVyIGFzIFVpbnQ4QXJyYXlcbiAgICAgICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocm93LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyb3cuY29udGVudF90eXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgICAgICAgIGRhdGEgPSByb3cudmFsdWUudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocm93LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiByb3cuY29udGVudF90eXBlLFxuICAgICAgICAgICAgZXhpc3RzOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBzZXQobmFtZSwga2V5LCB2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIFRUTFxuICAgICAgICBpZiAocGFyYW1zPy50dGwgJiYgcGFyYW1zLnR0bCA8IDYwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHR0bCBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHMsIGdvdCAke3BhcmFtcy50dGx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2VyaWFsaXplIHZhbHVlXG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGxldCBjb250ZW50VHlwZSA9IHBhcmFtcz8uY29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbSh2YWx1ZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtcz8uY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9ICd0ZXh0L3BsYWluJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBVc2UgSlNPTiBmb3IgbnVtYmVycywgYm9vbGVhbnMsIGFuZCBvYmplY3RzIHRvIHByZXNlcnZlIHR5cGUgb24gcm91bmQtdHJpcFxuICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpLCAndXRmLTgnKTtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgZm9yIG90aGVyIHR5cGVzXG4gICAgICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShTdHJpbmcodmFsdWUpLCAndXRmLTgnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYWxjdWxhdGUgZXhwaXJhdGlvblxuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBwYXJhbXM/LnR0bCA/IG5vdygpICsgcGFyYW1zLnR0bCAqIDEwMDAgOiBudWxsO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgICAgICAgLy8gVVBTRVJUXG4gICAgICAgIGNvbnN0IHN0bXQgPSB0aGlzLiNkYi5wcmVwYXJlKGBcblx0XHRcdElOU0VSVCBJTlRPIGt2X3N0b3JhZ2UgKHByb2plY3RfcGF0aCwgbmFtZSwga2V5LCB2YWx1ZSwgY29udGVudF90eXBlLCBleHBpcmVzX2F0LCBjcmVhdGVkX2F0LCB1cGRhdGVkX2F0KVxuXHRcdFx0VkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KVxuXHRcdFx0T04gQ09ORkxJQ1QocHJvamVjdF9wYXRoLCBuYW1lLCBrZXkpIFxuXHRcdFx0RE8gVVBEQVRFIFNFVCBcblx0XHRcdFx0dmFsdWUgPSBleGNsdWRlZC52YWx1ZSxcblx0XHRcdFx0Y29udGVudF90eXBlID0gZXhjbHVkZWQuY29udGVudF90eXBlLFxuXHRcdFx0XHRleHBpcmVzX2F0ID0gZXhjbHVkZWQuZXhwaXJlc19hdCxcblx0XHRcdFx0dXBkYXRlZF9hdCA9IGV4Y2x1ZGVkLnVwZGF0ZWRfYXRcblx0XHRgKTtcbiAgICAgICAgc3RtdC5ydW4odGhpcy4jcHJvamVjdFBhdGgsIG5hbWUsIGtleSwgYnVmZmVyLCBjb250ZW50VHlwZSwgZXhwaXJlc0F0LCB0aW1lc3RhbXAsIHRpbWVzdGFtcCk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZShuYW1lLCBrZXkpIHtcbiAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMuI2RiLnByZXBhcmUoYFxuXHRcdFx0REVMRVRFIEZST00ga3Zfc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIG5hbWUgPSA/IEFORCBrZXkgPSA/XG5cdFx0YCk7XG4gICAgICAgIHN0bXQucnVuKHRoaXMuI3Byb2plY3RQYXRoLCBuYW1lLCBrZXkpO1xuICAgIH1cbiAgICBhc3luYyBnZXRTdGF0cyhfbmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFN0YXRzIG5vdCBpbXBsZW1lbnRlZCBmb3IgbG9jYWwgc3RvcmFnZScpO1xuICAgIH1cbiAgICBhc3luYyBnZXRBbGxTdGF0cygpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRBbGxTdGF0cyBub3QgaW1wbGVtZW50ZWQgZm9yIGxvY2FsIHN0b3JhZ2UnKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0TmFtZXNwYWNlcygpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXROYW1lc3BhY2VzIG5vdCBpbXBsZW1lbnRlZCBmb3IgbG9jYWwgc3RvcmFnZScpO1xuICAgIH1cbiAgICBhc3luYyBzZWFyY2goX25hbWUsIF9rZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2VhcmNoIG5vdCBpbXBsZW1lbnRlZCBmb3IgbG9jYWwgc3RvcmFnZScpO1xuICAgIH1cbiAgICBhc3luYyBnZXRLZXlzKF9uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0S2V5cyBub3QgaW1wbGVtZW50ZWQgZm9yIGxvY2FsIHN0b3JhZ2UnKTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlTmFtZXNwYWNlKF9uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGVsZXRlTmFtZXNwYWNlIG5vdCBpbXBsZW1lbnRlZCBmb3IgbG9jYWwgc3RvcmFnZScpO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVOYW1lc3BhY2UoX25hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVOYW1lc3BhY2Ugbm90IGltcGxlbWVudGVkIGZvciBsb2NhbCBzdG9yYWdlJyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5dmFsdWUuanMubWFwIiwKICAgICJpbXBvcnQgeyBub3cgfSBmcm9tICcuL191dGlsJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IG1rZGlyU3luYywgZXhpc3RzU3luYywgdW5saW5rU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgb3BlblN5bmMsIHdyaXRlU3luYywgY2xvc2VTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmV4cG9ydCBjbGFzcyBMb2NhbFN0cmVhbVN0b3JhZ2Uge1xuICAgICNkYjtcbiAgICAjcHJvamVjdFBhdGg7XG4gICAgI3NlcnZlclVybDtcbiAgICAjdGVtcERpcjtcbiAgICBjb25zdHJ1Y3RvcihkYiwgcHJvamVjdFBhdGgsIHNlcnZlclVybCkge1xuICAgICAgICB0aGlzLiNkYiA9IGRiO1xuICAgICAgICB0aGlzLiNwcm9qZWN0UGF0aCA9IHByb2plY3RQYXRoO1xuICAgICAgICB0aGlzLiNzZXJ2ZXJVcmwgPSBzZXJ2ZXJVcmw7XG4gICAgICAgIC8vIENyZWF0ZSB0ZW1wIGRpcmVjdG9yeSBmb3Igc3RyZWFtIGJ1ZmZlcmluZ1xuICAgICAgICB0aGlzLiN0ZW1wRGlyID0gam9pbihob21lZGlyKCksICcuY29uZmlnJywgJ2FnZW50dWl0eScsICdzdHJlYW1zJyk7XG4gICAgICAgIGlmICghZXhpc3RzU3luYyh0aGlzLiN0ZW1wRGlyKSkge1xuICAgICAgICAgICAgbWtkaXJTeW5jKHRoaXMuI3RlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZShuYW1lLCBwcm9wcykge1xuICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5sZW5ndGggPCAxIHx8IG5hbWUubGVuZ3RoID4gMjU0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbSBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTQgY2hhcmFjdGVycycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBwcm9wcz8ubWV0YWRhdGEgPyBKU09OLnN0cmluZ2lmeShwcm9wcy5tZXRhZGF0YSkgOiBudWxsO1xuICAgICAgICAvLyBJbnNlcnQgc3RyZWFtIHJlY29yZCB3aXRoIE5VTEwgZGF0YVxuICAgICAgICBjb25zdCBzdG10ID0gdGhpcy4jZGIucHJlcGFyZShgXG5cdFx0XHRJTlNFUlQgSU5UTyBzdHJlYW1fc3RvcmFnZSAoXG5cdFx0XHRcdHByb2plY3RfcGF0aCwgaWQsIG5hbWUsIG1ldGFkYXRhLCBjb250ZW50X3R5cGUsIGNyZWF0ZWRfYXRcblx0XHRcdClcblx0XHRcdFZBTFVFUyAoPywgPywgPywgPywgPywgPylcblx0XHRgKTtcbiAgICAgICAgc3RtdC5ydW4odGhpcy4jcHJvamVjdFBhdGgsIGlkLCBuYW1lLCBtZXRhZGF0YSwgcHJvcHM/LmNvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCB0aW1lc3RhbXApO1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLiNzZXJ2ZXJVcmx9L19hZ2VudHVpdHkvbG9jYWwvc3RyZWFtLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbFN0cmVhbShpZCwgdXJsLCB0aGlzLiNkYiwgdGhpcy4jcHJvamVjdFBhdGgsIHRoaXMuI3RlbXBEaXIsIHByb3BzPy5jb21wcmVzcyA/PyBmYWxzZSk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3QocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXM/LmxpbWl0ICYmIChwYXJhbXMubGltaXQgPD0gMCB8fCBwYXJhbXMubGltaXQgPiAxMDAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaW1pdCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBxdWVyeSA9IGBcblx0XHRcdFNFTEVDVCBpZCwgbmFtZSwgbWV0YWRhdGEsIHNpemVfYnl0ZXMgXG5cdFx0XHRGUk9NIHN0cmVhbV9zdG9yYWdlIFxuXHRcdFx0V0hFUkUgcHJvamVjdF9wYXRoID0gP1xuXHRcdGA7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gW3RoaXMuI3Byb2plY3RQYXRoXTtcbiAgICAgICAgLy8gQWRkIGZpbHRlcnNcbiAgICAgICAgaWYgKHBhcmFtcz8ubmFtZSkge1xuICAgICAgICAgICAgcXVlcnkgKz0gYCBBTkQgbmFtZSA9ID9gO1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMucHVzaChwYXJhbXMubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcz8ubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIC8vIFNpbXBsZSBKU09OIG1hdGNoaW5nIC0gY2hlY2sgaWYgbWV0YWRhdGEgY29udGFpbnMgYWxsIGtleS12YWx1ZSBwYWlyc1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLm1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ICs9IGAgQU5EIG1ldGFkYXRhIExJS0UgP2A7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMucHVzaChgJVwiJHtrZXl9XCI6XCIke3ZhbHVlfVwiJWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0b3RhbCBjb3VudFxuICAgICAgICBjb25zdCBjb3VudFF1ZXJ5ID0gdGhpcy4jZGIucXVlcnkocXVlcnkucmVwbGFjZSgnU0VMRUNUIGlkLCBuYW1lLCBtZXRhZGF0YSwgc2l6ZV9ieXRlcycsICdTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQnKSk7XG4gICAgICAgIGNvbnN0IHsgY291bnQgfSA9IGNvdW50UXVlcnkuZ2V0KC4uLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgLy8gQWRkIHBhZ2luYXRpb25cbiAgICAgICAgcXVlcnkgKz0gYCBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0NgO1xuICAgICAgICBpZiAocGFyYW1zPy5saW1pdCkge1xuICAgICAgICAgICAgcXVlcnkgKz0gYCBMSU1JVCAke3BhcmFtcy5saW1pdH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXM/Lm9mZnNldCkge1xuICAgICAgICAgICAgcXVlcnkgKz0gYCBPRkZTRVQgJHtwYXJhbXMub2Zmc2V0fWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMuI2RiLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHN0bXQuYWxsKC4uLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtcyA9IHJvd3MubWFwKChyb3cpID0+ICh7XG4gICAgICAgICAgICBpZDogcm93LmlkLFxuICAgICAgICAgICAgbmFtZTogcm93Lm5hbWUsXG4gICAgICAgICAgICBtZXRhZGF0YTogcm93Lm1ldGFkYXRhID8gSlNPTi5wYXJzZShyb3cubWV0YWRhdGEpIDoge30sXG4gICAgICAgICAgICB1cmw6IGAke3RoaXMuI3NlcnZlclVybH0vX2FnZW50dWl0eS9sb2NhbC9zdHJlYW0vJHtyb3cuaWR9YCxcbiAgICAgICAgICAgIHNpemVCeXRlczogcm93LnNpemVfYnl0ZXMsXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBzdHJlYW1zLFxuICAgICAgICAgICAgdG90YWw6IGNvdW50LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBnZXQoaWQpIHtcbiAgICAgICAgaWYgKCFpZD8udHJpbSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbSBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0bXQgPSB0aGlzLiNkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgaWQsIG5hbWUsIG1ldGFkYXRhLCBzaXplX2J5dGVzXG5cdFx0XHRGUk9NIHN0cmVhbV9zdG9yYWdlXG5cdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBpZCA9ID9cblx0XHRgKTtcbiAgICAgICAgY29uc3Qgcm93ID0gc3RtdC5nZXQodGhpcy4jcHJvamVjdFBhdGgsIGlkKTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyZWFtIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHJvdy5tZXRhZGF0YSA/IEpTT04ucGFyc2Uocm93Lm1ldGFkYXRhKSA6IHt9O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLiNzZXJ2ZXJVcmx9L19hZ2VudHVpdHkvbG9jYWwvc3RyZWFtLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICBuYW1lOiByb3cubmFtZSxcbiAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgc2l6ZUJ5dGVzOiByb3cuc2l6ZV9ieXRlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgZG93bmxvYWQoaWQpIHtcbiAgICAgICAgaWYgKCFpZD8udHJpbSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbSBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0bXQgPSB0aGlzLiNkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgZGF0YSBGUk9NIHN0cmVhbV9zdG9yYWdlXG5cdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBpZCA9ID9cblx0XHRgKTtcbiAgICAgICAgY29uc3Qgcm93ID0gc3RtdC5nZXQodGhpcy4jcHJvamVjdFBhdGgsIGlkKTtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXJvdy5kYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmVhbSBub3QgZm91bmQgb3IgZW1wdHk6ICR7aWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29udmVydCBCdWZmZXIgdG8gUmVhZGFibGVTdHJlYW1cbiAgICAgICAgY29uc3QgYnVmZmVyID0gcm93LmRhdGE7XG4gICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICAgICAgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWZmZXIpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlKGlkKSB7XG4gICAgICAgIGlmICghaWQ/LnRyaW0oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW0gaWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG10ID0gdGhpcy4jZGIucHJlcGFyZShgXG5cdFx0XHRERUxFVEUgRlJPTSBzdHJlYW1fc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIGlkID0gP1xuXHRcdGApO1xuICAgICAgICBzdG10LnJ1bih0aGlzLiNwcm9qZWN0UGF0aCwgaWQpO1xuICAgIH1cbn1cbmNsYXNzIExvY2FsU3RyZWFtIGV4dGVuZHMgV3JpdGFibGVTdHJlYW0ge1xuICAgIGlkO1xuICAgIHVybDtcbiAgICAjZGI7XG4gICAgI3Byb2plY3RQYXRoO1xuICAgICNjb21wcmVzc2VkO1xuICAgICN0ZW1wRmlsZVBhdGg7XG4gICAgI2ZpbGVIYW5kbGUgPSBudWxsO1xuICAgICNieXRlc1dyaXR0ZW4gPSAwO1xuICAgICNjbG9zZWQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihpZCwgdXJsLCBkYiwgcHJvamVjdFBhdGgsIHRlbXBEaXIsIGNvbXByZXNzZWQpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgd3JpdGU6IGFzeW5jIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuI3dyaXRlVG9GaWxlKGNodW5rKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuI3BlcnNpc3QoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLiNkYiA9IGRiO1xuICAgICAgICB0aGlzLiNwcm9qZWN0UGF0aCA9IHByb2plY3RQYXRoO1xuICAgICAgICB0aGlzLiNjb21wcmVzc2VkID0gY29tcHJlc3NlZDtcbiAgICAgICAgdGhpcy4jdGVtcEZpbGVQYXRoID0gam9pbih0ZW1wRGlyLCBgJHtpZH0udG1wYCk7XG4gICAgICAgIC8vIE9wZW4gZmlsZSBmb3Igd3JpdGluZ1xuICAgICAgICB0aGlzLiNmaWxlSGFuZGxlID0gb3BlblN5bmModGhpcy4jdGVtcEZpbGVQYXRoLCAndycpO1xuICAgIH1cbiAgICBnZXQgYnl0ZXNXcml0dGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYnl0ZXNXcml0dGVuO1xuICAgIH1cbiAgICBnZXQgY29tcHJlc3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbXByZXNzZWQ7XG4gICAgfVxuICAgIGFzeW5jIHdyaXRlKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzLiNjbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtIGlzIGNsb3NlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBiaW5hcnk7XG4gICAgICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgIGJpbmFyeSA9IGNodW5rO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJpbmFyeSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2h1bmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgYmluYXJ5ID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGJpbmFyeSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShjaHVuaykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYmluYXJ5ID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFN0cmluZyhjaHVuaykpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI3dyaXRlVG9GaWxlKGJpbmFyeSk7XG4gICAgfVxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy4jY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgLy8gQ2xvc2UgZmlsZSBoYW5kbGUgaWYgb3BlblxuICAgICAgICBpZiAodGhpcy4jZmlsZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xvc2VTeW5jKHRoaXMuI2ZpbGVIYW5kbGUpO1xuICAgICAgICAgICAgdGhpcy4jZmlsZUhhbmRsZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jcGVyc2lzdCgpO1xuICAgIH1cbiAgICBnZXRSZWFkZXIoKSB7XG4gICAgICAgIGNvbnN0IGRiID0gdGhpcy4jZGI7XG4gICAgICAgIGNvbnN0IHByb2plY3RQYXRoID0gdGhpcy4jcHJvamVjdFBhdGg7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5pZDtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBkYi5xdWVyeShgXG5cdFx0XHRcdFx0U0VMRUNUIGRhdGEgRlJPTSBzdHJlYW1fc3RvcmFnZSBcblx0XHRcdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBpZCA9ID9cblx0XHRcdFx0YCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gcXVlcnkuZ2V0KHByb2plY3RQYXRoLCBpZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyb3cgfHwgIXJvdy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IEVycm9yKCdTdHJlYW0gbm90IGZvdW5kIG9yIG5vdCBmaW5hbGl6ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHJvdy5kYXRhKSk7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jICN3cml0ZVRvRmlsZShjaHVuaykge1xuICAgICAgICBpZiAodGhpcy4jZmlsZUhhbmRsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGhhbmRsZSBpcyBjbG9zZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cml0dGVuID0gd3JpdGVTeW5jKHRoaXMuI2ZpbGVIYW5kbGUsIGNodW5rKTtcbiAgICAgICAgdGhpcy4jYnl0ZXNXcml0dGVuICs9IHdyaXR0ZW47XG4gICAgfVxuICAgIGFzeW5jICNwZXJzaXN0KCkge1xuICAgICAgICAvLyBSZWFkIGJ1ZmZlcmVkIGZpbGVcbiAgICAgICAgbGV0IGRhdGEgPSByZWFkRmlsZVN5bmModGhpcy4jdGVtcEZpbGVQYXRoKTtcbiAgICAgICAgLy8gT3B0aW9uYWw6IEFwcGx5IGNvbXByZXNzaW9uIGlmIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuI2NvbXByZXNzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3ppcFN5bmMgfSA9IGF3YWl0IGltcG9ydCgnbm9kZTp6bGliJyk7XG4gICAgICAgICAgICBkYXRhID0gZ3ppcFN5bmMoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIERCIHdpdGggZmluYWxpemVkIGRhdGFcbiAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMuI2RiLnByZXBhcmUoYFxuXHRcdFx0VVBEQVRFIHN0cmVhbV9zdG9yYWdlIFxuXHRcdFx0U0VUIGRhdGEgPSA/LCBzaXplX2J5dGVzID0gPyBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIGlkID0gP1xuXHRcdGApO1xuICAgICAgICBzdG10LnJ1bihkYXRhLCB0aGlzLiNieXRlc1dyaXR0ZW4sIHRoaXMuI3Byb2plY3RQYXRoLCB0aGlzLmlkKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1bmxpbmtTeW5jKHRoaXMuI3RlbXBGaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJlYW0uanMubWFwIiwKICAgICJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgc2ltcGxlRW1iZWRkaW5nLCBjb3NpbmVTaW1pbGFyaXR5LCBub3cgfSBmcm9tICcuL191dGlsJztcbmV4cG9ydCBjbGFzcyBMb2NhbFZlY3RvclN0b3JhZ2Uge1xuICAgICNkYjtcbiAgICAjcHJvamVjdFBhdGg7XG4gICAgY29uc3RydWN0b3IoZGIsIHByb2plY3RQYXRoKSB7XG4gICAgICAgIHRoaXMuI2RiID0gZGI7XG4gICAgICAgIHRoaXMuI3Byb2plY3RQYXRoID0gcHJvamVjdFBhdGg7XG4gICAgfVxuICAgIGFzeW5jIHVwc2VydChuYW1lLCAuLi5kb2N1bWVudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lPy50cmltKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIHN0b3JhZ2UgbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBkb2N1bWVudCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMuI2RiLnByZXBhcmUoYFxuXHRcdFx0SU5TRVJUIElOVE8gdmVjdG9yX3N0b3JhZ2UgKFxuXHRcdFx0XHRwcm9qZWN0X3BhdGgsIG5hbWUsIGlkLCBrZXksIGVtYmVkZGluZywgZG9jdW1lbnQsIG1ldGFkYXRhLCBjcmVhdGVkX2F0LCB1cGRhdGVkX2F0XG5cdFx0XHQpXG5cdFx0XHRWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8pXG5cdFx0XHRPTiBDT05GTElDVChwcm9qZWN0X3BhdGgsIG5hbWUsIGtleSkgXG5cdFx0XHRETyBVUERBVEUgU0VUIFxuXHRcdFx0XHRlbWJlZGRpbmcgPSBleGNsdWRlZC5lbWJlZGRpbmcsXG5cdFx0XHRcdGRvY3VtZW50ID0gZXhjbHVkZWQuZG9jdW1lbnQsXG5cdFx0XHRcdG1ldGFkYXRhID0gZXhjbHVkZWQubWV0YWRhdGEsXG5cdFx0XHRcdHVwZGF0ZWRfYXQgPSBleGNsdWRlZC51cGRhdGVkX2F0XG5cdFx0YCk7XG4gICAgICAgIGZvciAoY29uc3QgZG9jIG9mIGRvY3VtZW50cykge1xuICAgICAgICAgICAgaWYgKCFkb2Mua2V5Py50cmltKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VhY2ggZG9jdW1lbnQgbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGtleScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgb3IgdXNlIHByb3ZpZGVkIGVtYmVkZGluZ3NcbiAgICAgICAgICAgIGxldCBlbWJlZGRpbmc7XG4gICAgICAgICAgICBpZiAoJ2VtYmVkZGluZ3MnIGluIGRvYyAmJiBkb2MuZW1iZWRkaW5ncykge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkb2MuZW1iZWRkaW5ncykgfHwgZG9jLmVtYmVkZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRW1iZWRkaW5ncyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVtYmVkZGluZyA9IGRvYy5lbWJlZGRpbmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoJ2RvY3VtZW50JyBpbiBkb2MgJiYgZG9jLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2MuZG9jdW1lbnQ/LnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvY3VtZW50IHRleHQgbXVzdCBiZSBub24tZW1wdHknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW1iZWRkaW5nID0gc2ltcGxlRW1iZWRkaW5nKGRvYy5kb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VhY2ggZG9jdW1lbnQgbXVzdCBoYXZlIGVpdGhlciBlbWJlZGRpbmdzIG9yIGRvY3VtZW50IHRleHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRpbmdKc29uID0gSlNPTi5zdHJpbmdpZnkoZW1iZWRkaW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VGV4dCA9ICdkb2N1bWVudCcgaW4gZG9jID8gZG9jLmRvY3VtZW50IDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gZG9jLm1ldGFkYXRhID8gSlNPTi5zdHJpbmdpZnkoZG9jLm1ldGFkYXRhKSA6IG51bGw7XG4gICAgICAgICAgICBzdG10LnJ1bih0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSwgaWQsIGRvYy5rZXksIGVtYmVkZGluZ0pzb24sIGRvY3VtZW50VGV4dCA/PyBudWxsLCBtZXRhZGF0YSA/PyBudWxsLCB0aW1lc3RhbXAsIHRpbWVzdGFtcCk7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLiNkYlxuICAgICAgICAgICAgICAgIC5wcmVwYXJlKCdTRUxFQ1QgaWQgRlJPTSB2ZWN0b3Jfc3RvcmFnZSBXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBuYW1lID0gPyBBTkQga2V5ID0gPycpXG4gICAgICAgICAgICAgICAgLmdldCh0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSwgZG9jLmtleSk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxJZCA9IHJvdz8uaWQgPz8gaWQ7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goeyBrZXk6IGRvYy5rZXksIGlkOiBhY3R1YWxJZCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgYXN5bmMgZ2V0KG5hbWUsIGtleSkge1xuICAgICAgICBpZiAoIW5hbWU/LnRyaW0oKSB8fCAha2V5Py50cmltKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIHN0b3JhZ2UgbmFtZSBhbmQga2V5IGFyZSByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jZGIucXVlcnkoYFxuXHRcdFx0U0VMRUNUIGlkLCBrZXksIGVtYmVkZGluZywgZG9jdW1lbnQsIG1ldGFkYXRhIFxuXHRcdFx0RlJPTSB2ZWN0b3Jfc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIG5hbWUgPSA/IEFORCBrZXkgPSA/XG5cdFx0YCk7XG4gICAgICAgIGNvbnN0IHJvdyA9IHF1ZXJ5LmdldCh0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSwga2V5KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGV4aXN0czogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICAgICAga2V5OiByb3cua2V5LFxuICAgICAgICAgICAgICAgIGVtYmVkZGluZ3M6IEpTT04ucGFyc2Uocm93LmVtYmVkZGluZyksXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQ6IHJvdy5kb2N1bWVudCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJvdy5tZXRhZGF0YSA/IEpTT04ucGFyc2Uocm93Lm1ldGFkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzaW1pbGFyaXR5OiAxLjAsIC8vIFBlcmZlY3QgbWF0Y2ggZm9yIGRpcmVjdCBnZXRcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGdldE1hbnkobmFtZSwgLi4ua2V5cykge1xuICAgICAgICBpZiAoIW5hbWU/LnRyaW0oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWZWN0b3Igc3RvcmFnZSBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChrZXlzLm1hcChhc3luYyAoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldChuYW1lLCBrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHsga2V5LCByZXN1bHQgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgeyBrZXksIHJlc3VsdCB9IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgICBhc3luYyBzZWFyY2gobmFtZSwgcGFyYW1zKSB7XG4gICAgICAgIGlmICghbmFtZT8udHJpbSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlY3RvciBzdG9yYWdlIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmFtcy5xdWVyeT8udHJpbSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmV0Y2ggYWxsIHZlY3RvcnMgZm9yIHRoaXMgbmFtZVxuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuI2RiLnF1ZXJ5KGBcblx0XHRcdFNFTEVDVCBpZCwga2V5LCBlbWJlZGRpbmcsIG1ldGFkYXRhIFxuXHRcdFx0RlJPTSB2ZWN0b3Jfc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID8gQU5EIG5hbWUgPSA/XG5cdFx0YCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBxdWVyeS5hbGwodGhpcy4jcHJvamVjdFBhdGgsIG5hbWUpO1xuICAgICAgICAvLyBJZiBubyB2ZWN0b3JzIGV4aXN0LCByZXR1cm4gZW1wdHkgcmVzdWx0c1xuICAgICAgICBjb25zdCByb3cgPSByb3dzWzBdO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIERldGVjdCBkaW1lbnNpb25hbGl0eSBmcm9tIGZpcnN0IHN0b3JlZCB2ZWN0b3JcbiAgICAgICAgY29uc3QgZmlyc3RFbWJlZGRpbmcgPSBKU09OLnBhcnNlKHJvdy5lbWJlZGRpbmcpO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gZmlyc3RFbWJlZGRpbmcubGVuZ3RoO1xuICAgICAgICAvLyBHZW5lcmF0ZSBxdWVyeSBlbWJlZGRpbmcgd2l0aCBtYXRjaGluZyBkaW1lbnNpb25zXG4gICAgICAgIGNvbnN0IHF1ZXJ5RW1iZWRkaW5nID0gc2ltcGxlRW1iZWRkaW5nKHBhcmFtcy5xdWVyeSwgZGltZW5zaW9ucyk7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBzaW1pbGFyaXRpZXNcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRpbmcgPSBKU09OLnBhcnNlKHJvdy5lbWJlZGRpbmcpO1xuICAgICAgICAgICAgY29uc3Qgc2ltaWxhcml0eSA9IGNvc2luZVNpbWlsYXJpdHkocXVlcnlFbWJlZGRpbmcsIGVtYmVkZGluZyk7XG4gICAgICAgICAgICAvLyBBcHBseSBzaW1pbGFyaXR5IHRocmVzaG9sZFxuICAgICAgICAgICAgaWYgKHBhcmFtcy5zaW1pbGFyaXR5ICE9PSB1bmRlZmluZWQgJiYgc2ltaWxhcml0eSA8IHBhcmFtcy5zaW1pbGFyaXR5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcHBseSBtZXRhZGF0YSBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChwYXJhbXMubWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dNZXRhZGF0YSA9IHJvdy5tZXRhZGF0YSA/IEpTT04ucGFyc2Uocm93Lm1ldGFkYXRhKSA6IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMubWV0YWRhdGEpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHJvd01ldGFkYXRhW2tleV0gPT09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogcm93LmlkLFxuICAgICAgICAgICAgICAgIGtleTogcm93LmtleSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogcm93Lm1ldGFkYXRhID8gSlNPTi5wYXJzZShyb3cubWV0YWRhdGEpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNpbWlsYXJpdHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0IGJ5IHNpbWlsYXJpdHkgZGVzY2VuZGluZ1xuICAgICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IGIuc2ltaWxhcml0eSAtIGEuc2ltaWxhcml0eSk7XG4gICAgICAgIC8vIEFwcGx5IGxpbWl0XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcGFyYW1zLmxpbWl0IHx8IDEwO1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5zbGljZSgwLCBsaW1pdCk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZShuYW1lLCAuLi5rZXlzKSB7XG4gICAgICAgIGlmICghbmFtZT8udHJpbSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlY3RvciBzdG9yYWdlIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IGtleXMubWFwKCgpID0+ICc/Jykuam9pbignLCAnKTtcbiAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMuI2RiLnByZXBhcmUoYFxuXHRcdFx0REVMRVRFIEZST00gdmVjdG9yX3N0b3JhZ2UgXG5cdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBuYW1lID0gPyBBTkQga2V5IElOICgke3BsYWNlaG9sZGVyc30pXG5cdFx0YCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0bXQucnVuKHRoaXMuI3Byb2plY3RQYXRoLCBuYW1lLCAuLi5rZXlzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jaGFuZ2VzO1xuICAgIH1cbiAgICBhc3luYyBleGlzdHMobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWU/LnRyaW0oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWZWN0b3Igc3RvcmFnZSBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLiNkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgXG5cdFx0XHRGUk9NIHZlY3Rvcl9zdG9yYWdlIFxuXHRcdFx0V0hFUkUgcHJvamVjdF9wYXRoID0gPyBBTkQgbmFtZSA9ID9cblx0XHRgKTtcbiAgICAgICAgY29uc3QgeyBjb3VudCB9ID0gcXVlcnkuZ2V0KHRoaXMuI3Byb2plY3RQYXRoLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIGNvdW50ID4gMDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0U3RhdHMobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWU/LnRyaW0oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWZWN0b3Igc3RvcmFnZSBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY291bnRRdWVyeSA9IHRoaXMuI2RiLnF1ZXJ5KGBcblx0XHRcdFNFTEVDVCBDT1VOVCgqKSBhcyBjb3VudCxcblx0XHRcdE1JTihjcmVhdGVkX2F0KSBhcyBjcmVhdGVkX2F0LCBNQVgodXBkYXRlZF9hdCkgYXMgbGFzdF91c2VkXG5cdFx0XHRGUk9NIHZlY3Rvcl9zdG9yYWdlIFxuXHRcdFx0V0hFUkUgcHJvamVjdF9wYXRoID0gPyBBTkQgbmFtZSA9ID9cblx0XHRgKTtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBjb3VudFF1ZXJ5LmdldCh0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSk7XG4gICAgICAgIGlmIChzdGF0cy5jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VtOiAwLCBjb3VudDogMCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhbXBsZVF1ZXJ5ID0gdGhpcy4jZGIucXVlcnkoYFxuXHRcdFx0U0VMRUNUIGtleSwgZW1iZWRkaW5nLCBkb2N1bWVudCwgbWV0YWRhdGEsIGNyZWF0ZWRfYXQsIHVwZGF0ZWRfYXRcblx0XHRcdEZST00gdmVjdG9yX3N0b3JhZ2UgXG5cdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBuYW1lID0gP1xuXHRcdFx0TElNSVQgMjBcblx0XHRgKTtcbiAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHNhbXBsZVF1ZXJ5LmFsbCh0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgbGV0IHRvdGFsU3VtID0gMDtcbiAgICAgICAgY29uc3Qgc2FtcGxlZFJlc3VsdHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBzYW1wbGUgb2Ygc2FtcGxlcykge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkaW5nQnl0ZXMgPSBlbmNvZGVyLmVuY29kZShzYW1wbGUuZW1iZWRkaW5nKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudEJ5dGVzID0gc2FtcGxlLmRvY3VtZW50ID8gZW5jb2Rlci5lbmNvZGUoc2FtcGxlLmRvY3VtZW50KS5sZW5ndGggOiAwO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGVtYmVkZGluZ0J5dGVzICsgZG9jdW1lbnRCeXRlcztcbiAgICAgICAgICAgIHRvdGFsU3VtICs9IHNpemU7XG4gICAgICAgICAgICBzYW1wbGVkUmVzdWx0c1tzYW1wbGUua2V5XSA9IHtcbiAgICAgICAgICAgICAgICBlbWJlZGRpbmc6IEpTT04ucGFyc2Uoc2FtcGxlLmVtYmVkZGluZyksXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQ6IHNhbXBsZS5kb2N1bWVudCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogc2FtcGxlLm1ldGFkYXRhID8gSlNPTi5wYXJzZShzYW1wbGUubWV0YWRhdGEpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZpcnN0VXNlZDogc2FtcGxlLmNyZWF0ZWRfYXQsXG4gICAgICAgICAgICAgICAgbGFzdFVzZWQ6IHNhbXBsZS51cGRhdGVkX2F0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFc3RpbWF0ZSB0b3RhbCBzaXplIGJhc2VkIG9uIHNhbXBsZWQgYXZlcmFnZSBpZiB3ZSBoYXZlIG1vcmUgcmVjb3JkcyB0aGFuIHNhbXBsZXNcbiAgICAgICAgY29uc3QgZXN0aW1hdGVkU3VtID0gc3RhdHMuY291bnQgPD0gc2FtcGxlcy5sZW5ndGhcbiAgICAgICAgICAgID8gdG90YWxTdW1cbiAgICAgICAgICAgIDogTWF0aC5yb3VuZCgodG90YWxTdW0gLyBzYW1wbGVzLmxlbmd0aCkgKiBzdGF0cy5jb3VudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdW06IGVzdGltYXRlZFN1bSxcbiAgICAgICAgICAgIGNvdW50OiBzdGF0cy5jb3VudCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogc3RhdHMuY3JlYXRlZF9hdCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBsYXN0VXNlZDogc3RhdHMubGFzdF91c2VkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNhbXBsZWRSZXN1bHRzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBnZXRBbGxTdGF0cygpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLiNkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgbmFtZSwgZW1iZWRkaW5nLCBkb2N1bWVudFxuXHRcdFx0RlJPTSB2ZWN0b3Jfc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID9cblx0XHRgKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHF1ZXJ5LmFsbCh0aGlzLiNwcm9qZWN0UGF0aCk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlU3RhdHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkZGluZ0J5dGVzID0gZW5jb2Rlci5lbmNvZGUocm93LmVtYmVkZGluZykubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRCeXRlcyA9IHJvdy5kb2N1bWVudCA/IGVuY29kZXIuZW5jb2RlKHJvdy5kb2N1bWVudCkubGVuZ3RoIDogMDtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBlbWJlZGRpbmdCeXRlcyArIGRvY3VtZW50Qnl0ZXM7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IG5hbWVzcGFjZVN0YXRzLmdldChyb3cubmFtZSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5zdW0gKz0gc2l6ZTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5jb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlU3RhdHMuc2V0KHJvdy5uYW1lLCB7IHN1bTogc2l6ZSwgY291bnQ6IDEgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IHRpbWVzdGFtcHMgaW4gYSBzZXBhcmF0ZSBxdWVyeVxuICAgICAgICBjb25zdCB0aW1lc3RhbXBRdWVyeSA9IHRoaXMuI2RiLnF1ZXJ5KGBcblx0XHRcdFNFTEVDVCBuYW1lLCBNSU4oY3JlYXRlZF9hdCkgYXMgY3JlYXRlZF9hdCwgTUFYKHVwZGF0ZWRfYXQpIGFzIGxhc3RfdXNlZFxuXHRcdFx0RlJPTSB2ZWN0b3Jfc3RvcmFnZSBcblx0XHRcdFdIRVJFIHByb2plY3RfcGF0aCA9ID9cblx0XHRcdEdST1VQIEJZIG5hbWVcblx0XHRgKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRpbWVzdGFtcFF1ZXJ5LmFsbCh0aGlzLiNwcm9qZWN0UGF0aCk7XG4gICAgICAgIGZvciAoY29uc3QgdHMgb2YgdGltZXN0YW1wcykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBuYW1lc3BhY2VTdGF0cy5nZXQodHMubmFtZSk7XG4gICAgICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICAgICAgICBzdGF0cy5jcmVhdGVkQXQgPSB0cy5jcmVhdGVkX2F0IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzdGF0cy5sYXN0VXNlZCA9IHRzLmxhc3RfdXNlZCB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzdGF0c10gb2YgbmFtZXNwYWNlU3RhdHMpIHtcbiAgICAgICAgICAgIHJlc3VsdHNbbmFtZV0gPSBzdGF0cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgYXN5bmMgZ2V0TmFtZXNwYWNlcygpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLiNkYi5xdWVyeShgXG5cdFx0XHRTRUxFQ1QgRElTVElOQ1QgbmFtZSBcblx0XHRcdEZST00gdmVjdG9yX3N0b3JhZ2UgXG5cdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/XG5cdFx0YCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBxdWVyeS5hbGwodGhpcy4jcHJvamVjdFBhdGgpO1xuICAgICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gcm93Lm5hbWUpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGVOYW1lc3BhY2UobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWU/LnRyaW0oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWZWN0b3Igc3RvcmFnZSBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RtdCA9IHRoaXMuI2RiLnByZXBhcmUoYFxuXHRcdFx0REVMRVRFIEZST00gdmVjdG9yX3N0b3JhZ2UgXG5cdFx0XHRXSEVSRSBwcm9qZWN0X3BhdGggPSA/IEFORCBuYW1lID0gP1xuXHRcdGApO1xuICAgICAgICBzdG10LnJ1bih0aGlzLiNwcm9qZWN0UGF0aCwgbmFtZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVjdG9yLmpzLm1hcCIsCiAgICAiZXhwb3J0IHsgZ2V0TG9jYWxEQiwgY2xvc2VMb2NhbERCIH0gZnJvbSAnLi9fZGInO1xuZXhwb3J0IHsgbm9ybWFsaXplUHJvamVjdFBhdGgsIHNpbXBsZUVtYmVkZGluZywgY29zaW5lU2ltaWxhcml0eSB9IGZyb20gJy4vX3V0aWwnO1xuZXhwb3J0IHsgY3JlYXRlTG9jYWxTdG9yYWdlUm91dGVyIH0gZnJvbSAnLi9fcm91dGVyJztcbmV4cG9ydCB7IExvY2FsS2V5VmFsdWVTdG9yYWdlIH0gZnJvbSAnLi9rZXl2YWx1ZSc7XG5leHBvcnQgeyBMb2NhbFN0cmVhbVN0b3JhZ2UgfSBmcm9tICcuL3N0cmVhbSc7XG5leHBvcnQgeyBMb2NhbFZlY3RvclN0b3JhZ2UgfSBmcm9tICcuL3ZlY3Rvcic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IGNvbnRleHQsIFNwYW5LaW5kLCBTcGFuU3RhdHVzQ29kZSwgdHJhY2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgS2V5VmFsdWVTdG9yYWdlU2VydmljZSwgU3RyZWFtU3RvcmFnZVNlcnZpY2UsIFZlY3RvclN0b3JhZ2VTZXJ2aWNlLCBTdHJ1Y3R1cmVkRXJyb3IsIH0gZnJvbSAnQGFnZW50dWl0eS9jb3JlJztcbmltcG9ydCB7IEFQSUNsaWVudCwgY3JlYXRlU2VydmVyRmV0Y2hBZGFwdGVyLCBnZXRTZXJ2aWNlVXJscyB9IGZyb20gJ0BhZ2VudHVpdHkvc2VydmVyJztcbmltcG9ydCB7IEhUVFBTYW5kYm94U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2FuZGJveCc7XG5pbXBvcnQgeyBDb21wb3NpdGVTZXNzaW9uRXZlbnRQcm92aWRlciwgTG9jYWxTZXNzaW9uRXZlbnRQcm92aWRlciwgSlNPTlNlc3Npb25FdmVudFByb3ZpZGVyLCBIVFRQU2Vzc2lvbkV2ZW50UHJvdmlkZXIsIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZXNzaW9uJztcbmltcG9ydCB7IENvbXBvc2l0ZUV2YWxSdW5FdmVudFByb3ZpZGVyLCBMb2NhbEV2YWxSdW5FdmVudFByb3ZpZGVyLCBKU09ORXZhbFJ1bkV2ZW50UHJvdmlkZXIsIEhUVFBFdmFsUnVuRXZlbnRQcm92aWRlciwgfSBmcm9tICcuL3NlcnZpY2VzL2V2YWxydW4nO1xuaW1wb3J0IHsgTG9jYWxUaHJlYWRQcm92aWRlciB9IGZyb20gJy4vc2VydmljZXMvdGhyZWFkL2xvY2FsJztcbmltcG9ydCB7IGluamVjdFRyYWNlQ29udGV4dFRvSGVhZGVycyB9IGZyb20gJy4vb3RlbC9odHRwJztcbmltcG9ydCB7IGdldFRyYWNlciB9IGZyb20gJy4vX3NlcnZlcic7XG5pbXBvcnQgeyBwb3B1bGF0ZUFnZW50c1JlZ2lzdHJ5IH0gZnJvbSAnLi9hZ2VudC5qcyc7XG5pbXBvcnQgeyBnZXRTREtWZXJzaW9uLCBpc0F1dGhlbnRpY2F0ZWQsIGlzUHJvZHVjdGlvbiB9IGZyb20gJy4vX2NvbmZpZyc7XG5pbXBvcnQgeyBEZWZhdWx0U2Vzc2lvblByb3ZpZGVyLCBEZWZhdWx0VGhyZWFkUHJvdmlkZXIsIH0gZnJvbSAnLi9zZXNzaW9uJztcbmltcG9ydCB7IExvY2FsS2V5VmFsdWVTdG9yYWdlLCBMb2NhbFN0cmVhbVN0b3JhZ2UsIExvY2FsVmVjdG9yU3RvcmFnZSwgZ2V0TG9jYWxEQiwgbm9ybWFsaXplUHJvamVjdFBhdGgsIGNyZWF0ZUxvY2FsU3RvcmFnZVJvdXRlciwgfSBmcm9tICcuL3NlcnZpY2VzL2xvY2FsJztcbmNvbnN0IHVzZXJBZ2VudCA9IGBBZ2VudHVpdHkgU0RLLyR7Z2V0U0RLVmVyc2lvbigpfWA7XG4vLyBMYXp5IGdldHRlcnMgLSB0aGVzZSBtdXN0IGJlIGZ1bmN0aW9ucyB0byByZWFkIGVudiB2YXJzIEFGVEVSIGJvb3RzdHJhcFJ1bnRpbWVFbnYoKSBydW5zXG5jb25zdCBnZXRTZGtLZXkgPSAoKSA9PiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfU0RLX0tFWTtcbmNvbnN0IGdldEJlYXJlcktleSA9ICgpID0+IGBCZWFyZXIgJHtnZXRTZGtLZXkoKX1gO1xuY29uc3QgZ2V0UmVnaW9uID0gKCkgPT4gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1JFR0lPTiA/PyAndXNjJztcbmNvbnN0IGdldExhenlTZXJ2aWNlVXJscyA9ICgpID0+IGdldFNlcnZpY2VVcmxzKGdldFJlZ2lvbigpKTtcbmNvbnN0IGdldEt2QmFzZVVybCA9ICgpID0+IGdldExhenlTZXJ2aWNlVXJscygpLmtleXZhbHVlO1xuY29uc3QgZ2V0U3RyZWFtQmFzZVVybCA9ICgpID0+IGdldExhenlTZXJ2aWNlVXJscygpLnN0cmVhbTtcbmNvbnN0IGdldFZlY3RvckJhc2VVcmwgPSAoKSA9PiBnZXRMYXp5U2VydmljZVVybHMoKS52ZWN0b3I7XG5jb25zdCBnZXRDYXRhbHlzdEJhc2VVcmwgPSAoKSA9PiBnZXRMYXp5U2VydmljZVVybHMoKS5jYXRhbHlzdDtcbmxldCBhZGFwdGVyO1xuY29uc3QgY3JlYXRlRmV0Y2hBZGFwdGVyID0gKGxvZ2dlcikgPT4gY3JlYXRlU2VydmVyRmV0Y2hBZGFwdGVyKHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGdldEJlYXJlcktleSgpLFxuICAgICAgICAnVXNlci1BZ2VudCc6IHVzZXJBZ2VudCxcbiAgICB9LFxuICAgIG9uQmVmb3JlOiBhc3luYyAodXJsLCBvcHRpb25zLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ2JlZm9yZSByZXF1ZXN0OiAlcyB3aXRoIG9wdGlvbnM6ICVzJywgdXJsLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnRlbGVtZXRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMsIC4uLmluamVjdFRyYWNlQ29udGV4dFRvSGVhZGVycygpIH07XG4gICAgICAgIGNvbnN0IHRyYWNlciA9IGdldFRyYWNlcigpID8/IHRyYWNlLmdldFRyYWNlcignYWdlbnR1aXR5Jyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4ob3B0aW9ucy50ZWxlbWV0cnkubmFtZSwgeyBhdHRyaWJ1dGVzOiBvcHRpb25zLnRlbGVtZXRyeS5hdHRyaWJ1dGVzLCBraW5kOiBTcGFuS2luZC5DTElFTlQgfSwgY3VycmVudENvbnRleHQpO1xuICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IHRyYWNlLnNldFNwYW4oY3VycmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgY29udGV4dC53aXRoKHNwYW5Db250ZXh0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcnI7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlKTtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGU/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycikgfSk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvbkFmdGVyOiBhc3luYyAodXJsLCBvcHRpb25zLCByZXN1bHQsIGVycikgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ2FmdGVyIHJlcXVlc3Q6ICVzICglZCkgPT4gJXMnLCB1cmwsIHJlc3VsdC5yZXNwb25zZS5zdGF0dXMsIGVycik7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGFuID0gdHJhY2UuZ2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnRlbGVtZXRyeT8ubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnYWdlbnR1aXR5LmtleXZhbHVlLmdldCc6IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KCdtaXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5yZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBzcGFuPy5hZGRFdmVudCgnaGl0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnYWdlbnR1aXR5LnN0cmVhbS5jcmVhdGUnOiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtLmlkJzogcmVzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmVhbS51cmwnOiBgJHtnZXRTdHJlYW1CYXNlVXJsKCl9LyR7cmVzLmlkfWAsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FnZW50dWl0eS5zdHJlYW0ubGlzdCc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiBzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtLmNvdW50JzogcmVzcG9uc2Uuc3RyZWFtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtLnRvdGFsJzogcmVzcG9uc2UudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FnZW50dWl0eS52ZWN0b3IudXBzZXJ0Jzoge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd2ZWN0b3IuY291bnQnOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnYWdlbnR1aXR5LnZlY3Rvci5zZWFyY2gnOiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlY3Rvci5yZXN1bHRzJzogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2FnZW50dWl0eS52ZWN0b3IuZ2V0Jzoge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoJ21pc3MnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LnJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KCdoaXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufSwgbG9nZ2VyKTtcbmxldCBrdjtcbmxldCBzdHJlYW07XG5sZXQgdmVjdG9yO1xubGV0IHNhbmRib3g7XG5sZXQgc2Vzc2lvbjtcbmxldCB0aHJlYWQ7XG5sZXQgc2Vzc2lvbkV2ZW50O1xubGV0IGV2YWxSdW5FdmVudDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5sZXQgbG9jYWxSb3V0ZXIgPSBudWxsO1xuY29uc3QgU2VydmVyVXJsTWlzc2luZ0Vycm9yID0gU3RydWN0dXJlZEVycm9yKCdTZXJ2ZXJVcmxNaXNzaW5nRXJyb3InLCAnc2VydmVyVXJsIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgbG9jYWwgc2VydmljZXMnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmljZXMobG9nZ2VyLCBjb25maWcsIHNlcnZlclVybCkge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZWQgPSBpc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICBjb25zdCB1c2VMb2NhbCA9IGNvbmZpZz8uc2VydmljZXM/LnVzZUxvY2FsID8/IGZhbHNlO1xuICAgIGFkYXB0ZXIgPSBjcmVhdGVGZXRjaEFkYXB0ZXIobG9nZ2VyKTtcbiAgICAvLyBVc2UgbG9jYWwgc2VydmljZXMgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQgT1IgaWYgbm90IGF1dGhlbnRpY2F0ZWRcbiAgICBjb25zdCBzaG91bGRVc2VMb2NhbCA9IHVzZUxvY2FsIHx8ICFhdXRoZW50aWNhdGVkIHx8IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9GT1JDRV9MT0NBTF9TRVJWSUNFUyA9PT0gJ3RydWUnO1xuICAgIGlmIChzaG91bGRVc2VMb2NhbCkge1xuICAgICAgICBjb25zdCBkYiA9IGdldExvY2FsREIoKTtcbiAgICAgICAgY29uc3QgcHJvamVjdFBhdGggPSBub3JtYWxpemVQcm9qZWN0UGF0aCgpO1xuICAgICAgICBpZiAoIXNlcnZlclVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZlclVybE1pc3NpbmdFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKCdVc2luZyBsb2NhbCBzZXJ2aWNlcyAoZGV2ZWxvcG1lbnQgb25seSknKTtcbiAgICAgICAga3YgPSBjb25maWc/LnNlcnZpY2VzPy5rZXl2YWx1ZSB8fCBuZXcgTG9jYWxLZXlWYWx1ZVN0b3JhZ2UoZGIsIHByb2plY3RQYXRoKTtcbiAgICAgICAgc3RyZWFtID0gY29uZmlnPy5zZXJ2aWNlcz8uc3RyZWFtIHx8IG5ldyBMb2NhbFN0cmVhbVN0b3JhZ2UoZGIsIHByb2plY3RQYXRoLCBzZXJ2ZXJVcmwpO1xuICAgICAgICB2ZWN0b3IgPSBjb25maWc/LnNlcnZpY2VzPy52ZWN0b3IgfHwgbmV3IExvY2FsVmVjdG9yU3RvcmFnZShkYiwgcHJvamVjdFBhdGgpO1xuICAgICAgICBzZXNzaW9uID0gY29uZmlnPy5zZXJ2aWNlcz8uc2Vzc2lvbiB8fCBuZXcgRGVmYXVsdFNlc3Npb25Qcm92aWRlcigpO1xuICAgICAgICB0aHJlYWQgPSBjb25maWc/LnNlcnZpY2VzPy50aHJlYWQgfHwgbmV3IExvY2FsVGhyZWFkUHJvdmlkZXIoKTtcbiAgICAgICAgc2Vzc2lvbkV2ZW50ID0gY29uZmlnPy5zZXJ2aWNlcz8uc2Vzc2lvbkV2ZW50XG4gICAgICAgICAgICA/IG5ldyBDb21wb3NpdGVTZXNzaW9uRXZlbnRQcm92aWRlcihuZXcgTG9jYWxTZXNzaW9uRXZlbnRQcm92aWRlcigpLCBjb25maWcuc2VydmljZXMuc2Vzc2lvbkV2ZW50KVxuICAgICAgICAgICAgOiBuZXcgTG9jYWxTZXNzaW9uRXZlbnRQcm92aWRlcigpO1xuICAgICAgICBldmFsUnVuRXZlbnQgPSBjb25maWc/LnNlcnZpY2VzPy5ldmFsUnVuRXZlbnRcbiAgICAgICAgICAgID8gbmV3IENvbXBvc2l0ZUV2YWxSdW5FdmVudFByb3ZpZGVyKG5ldyBMb2NhbEV2YWxSdW5FdmVudFByb3ZpZGVyKCksIGNvbmZpZy5zZXJ2aWNlcy5ldmFsUnVuRXZlbnQpXG4gICAgICAgICAgICA6IG5ldyBMb2NhbEV2YWxSdW5FdmVudFByb3ZpZGVyKCk7XG4gICAgICAgIGxvY2FsUm91dGVyID0gY3JlYXRlTG9jYWxTdG9yYWdlUm91dGVyKGRiLCBwcm9qZWN0UGF0aCk7XG4gICAgICAgIHJldHVybiB7IGxvY2FsUm91dGVyIH07XG4gICAgfVxuICAgIC8vIFJlc2V0IGxvY2FsIHJvdXRlciBpZiBub3QgdXNpbmcgbG9jYWwgc2VydmljZXNcbiAgICBsb2NhbFJvdXRlciA9IG51bGw7XG4gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgKHNpbmNlICFhdXRoZW50aWNhdGVkIHdvdWxkIHRyaWdnZXIgbG9jYWwgc2VydmljZXMgYWJvdmUpXG4gICAgY29uc3QgY2F0YWx5c3RVcmwgPSBnZXRDYXRhbHlzdEJhc2VVcmwoKTtcbiAgICBjb25zdCBzdHJlYW1CYXNlVXJsID0gZ2V0U3RyZWFtQmFzZVVybCgpO1xuICAgIGt2ID0gY29uZmlnPy5zZXJ2aWNlcz8ua2V5dmFsdWUgfHwgbmV3IEtleVZhbHVlU3RvcmFnZVNlcnZpY2UoZ2V0S3ZCYXNlVXJsKCksIGFkYXB0ZXIpO1xuICAgIHN0cmVhbSA9IGNvbmZpZz8uc2VydmljZXM/LnN0cmVhbSB8fCBuZXcgU3RyZWFtU3RvcmFnZVNlcnZpY2Uoc3RyZWFtQmFzZVVybCwgYWRhcHRlcik7XG4gICAgdmVjdG9yID0gY29uZmlnPy5zZXJ2aWNlcz8udmVjdG9yIHx8IG5ldyBWZWN0b3JTdG9yYWdlU2VydmljZShnZXRWZWN0b3JCYXNlVXJsKCksIGFkYXB0ZXIpO1xuICAgIHNhbmRib3ggPSBuZXcgSFRUUFNhbmRib3hTZXJ2aWNlKG5ldyBBUElDbGllbnQoY2F0YWx5c3RVcmwsIGxvZ2dlciksIHN0cmVhbUJhc2VVcmwpO1xuICAgIHNlc3Npb24gPSBjb25maWc/LnNlcnZpY2VzPy5zZXNzaW9uIHx8IG5ldyBEZWZhdWx0U2Vzc2lvblByb3ZpZGVyKCk7XG4gICAgdGhyZWFkID0gY29uZmlnPy5zZXJ2aWNlcz8udGhyZWFkIHx8IG5ldyBEZWZhdWx0VGhyZWFkUHJvdmlkZXIoKTtcbiAgICAvLyBGSVhNRTogdGhpcyBpcyB0dXJuZWQgb2ZmIGZvciBub3cgZm9yIHByb2R1Y3Rpb24gdW50aWwgd2UgaGF2ZSB0aGUgbmV3IGNoYW5nZXMgZGVwbG95ZWRcbiAgICBzZXNzaW9uRXZlbnQgPVxuICAgICAgICBpc1Byb2R1Y3Rpb24oKSAmJiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0xPVURfRVhQT1JUX0RJUlxuICAgICAgICAgICAgPyBuZXcgSlNPTlNlc3Npb25FdmVudFByb3ZpZGVyKHByb2Nlc3MuZW52LkFHRU5UVUlUWV9DTE9VRF9FWFBPUlRfRElSKVxuICAgICAgICAgICAgOiBuZXcgSFRUUFNlc3Npb25FdmVudFByb3ZpZGVyKG5ldyBBUElDbGllbnQoY2F0YWx5c3RVcmwsIGxvZ2dlciksIGxvZ2dlcik7XG4gICAgaWYgKGNvbmZpZz8uc2VydmljZXM/LnNlc3Npb25FdmVudCkge1xuICAgICAgICBzZXNzaW9uRXZlbnQgPSBuZXcgQ29tcG9zaXRlU2Vzc2lvbkV2ZW50UHJvdmlkZXIoc2Vzc2lvbkV2ZW50LCBjb25maWcuc2VydmljZXMuc2Vzc2lvbkV2ZW50KTtcbiAgICB9XG4gICAgLy8gRklYTUU6IHRoaXMgaXMgdHVybmVkIG9mZiBmb3Igbm93IGZvciBwcm9kdWN0aW9uIHVudGlsIHdlIGhhdmUgdGhlIG5ldyBjaGFuZ2VzIGRlcGxveWVkXG4gICAgbG9nZ2VyLmRlYnVnKCdbU0VSVklDRVNdIEluaXRpYWxpemluZyBldmFsIHJ1biBwcm92aWRlciAtIHJlZ2lvbjogJXMsIGNhdGFseXN0QmFzZVVybDogJXMsIGlzUHJvZHVjdGlvbjogJXMnLCBnZXRSZWdpb24oKSwgY2F0YWx5c3RVcmwsIGlzUHJvZHVjdGlvbigpKTtcbiAgICBldmFsUnVuRXZlbnQgPVxuICAgICAgICBpc1Byb2R1Y3Rpb24oKSAmJiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0xPVURfRVhQT1JUX0RJUlxuICAgICAgICAgICAgPyBuZXcgSlNPTkV2YWxSdW5FdmVudFByb3ZpZGVyKHByb2Nlc3MuZW52LkFHRU5UVUlUWV9DTE9VRF9FWFBPUlRfRElSKVxuICAgICAgICAgICAgOiBuZXcgSFRUUEV2YWxSdW5FdmVudFByb3ZpZGVyKG5ldyBBUElDbGllbnQoY2F0YWx5c3RVcmwsIGxvZ2dlciksIGxvZ2dlciwgY2F0YWx5c3RVcmwpO1xuICAgIGlmIChjb25maWc/LnNlcnZpY2VzPy5ldmFsUnVuRXZlbnQpIHtcbiAgICAgICAgZXZhbFJ1bkV2ZW50ID0gbmV3IENvbXBvc2l0ZUV2YWxSdW5FdmVudFByb3ZpZGVyKGV2YWxSdW5FdmVudCwgY29uZmlnLnNlcnZpY2VzLmV2YWxSdW5FdmVudCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJlYWRQcm92aWRlcigpIHtcbiAgICByZXR1cm4gdGhyZWFkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlc3Npb25Qcm92aWRlcigpIHtcbiAgICByZXR1cm4gc2Vzc2lvbjtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxSb3V0ZXIoKSB7XG4gICAgcmV0dXJuIGxvY2FsUm91dGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlc3Npb25FdmVudFByb3ZpZGVyKCkge1xuICAgIHJldHVybiBzZXNzaW9uRXZlbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZhbFJ1bkV2ZW50UHJvdmlkZXIoKSB7XG4gICAgcmV0dXJuIGV2YWxSdW5FdmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlcygpIHtcbiAgICByZXR1cm4geyBrdiwgc3RyZWFtLCB2ZWN0b3IsIHNhbmRib3ggfTtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTZXJ2aWNlcyhvLCBpbmNsdWRlQWdlbnRzID0gZmFsc2UpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgJ2t2Jywge1xuICAgICAgICBnZXQ6ICgpID0+IGt2LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgJ3N0cmVhbScsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiBzdHJlYW0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCAndmVjdG9yJywge1xuICAgICAgICBnZXQ6ICgpID0+IHZlY3RvcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICdzYW5kYm94Jywge1xuICAgICAgICBnZXQ6ICgpID0+IHNhbmRib3gsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIC8vIEFsc28gcmVnaXN0ZXIgYWdlbnQgcmVnaXN0cnkgaWYgcmVxdWVzdGVkXG4gICAgaWYgKGluY2x1ZGVBZ2VudHMpIHtcbiAgICAgICAgLy8gQ2FjaGUgdGhlIHBvcHVsYXRlZCByZWdpc3RyeSB0byBhdm9pZCByZS1jcmVhdGluZyBvbiBldmVyeSBhY2Nlc3NcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IGNhY2hlZFJlZ2lzdHJ5O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgJ2FnZW50Jywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFU00tZnJpZW5kbHk6IHBvcHVsYXRlQWdlbnRzUmVnaXN0cnkgaXMgaW1wb3J0ZWQgc3RhdGljYWxseVxuICAgICAgICAgICAgICAgICAgICBjYWNoZWRSZWdpc3RyeSA9IHBvcHVsYXRlQWdlbnRzUmVnaXN0cnkobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRSZWdpc3RyeTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9zZXJ2aWNlcy5qcy5tYXAiLAogICAgImltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnbm9kZTphc3luY19ob29rcyc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IsIH0gZnJvbSAnQGFnZW50dWl0eS9jb3JlJztcbmltcG9ydCB7IEFHRU5UX1JVTlRJTUUsIENVUlJFTlRfQUdFTlQgfSBmcm9tICcuL19jb25maWcnO1xuaW1wb3J0IHsgcmVnaXN0ZXJTZXJ2aWNlcyB9IGZyb20gJy4vX3NlcnZpY2VzJztcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0QWdlbnRDb250ZXh0IHtcbiAgICBhZ2VudDtcbiAgICBsb2dnZXI7XG4gICAgc2Vzc2lvbklkO1xuICAgIHRyYWNlcjtcbiAgICBrdjtcbiAgICBzdHJlYW07XG4gICAgdmVjdG9yO1xuICAgIHNhbmRib3g7XG4gICAgc3RhdGU7XG4gICAgc2Vzc2lvbjtcbiAgICB0aHJlYWQ7XG4gICAgY29uZmlnO1xuICAgIGFwcDtcbiAgICBjdXJyZW50O1xuICAgIFtBR0VOVF9SVU5USU1FXTtcbiAgICBoYW5kbGVyO1xuICAgIC8qKlxuICAgICAqIEZhbGxiYWNrIGF1dGggdmFsdWUgZm9yIG5vbi1IVFRQIGNvbnRleHRzIChzdGFuZGFsb25lLCB0ZXN0cywgZXRjLilcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBfaW5pdGlhbEF1dGg7XG4gICAgLyoqXG4gICAgICogQXV0aGVudGljYXRpb24gY29udGV4dCAtIGxhemlseSByZWFkcyBmcm9tIEhUVFAgY29udGV4dCBpZiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGEgZ2V0dGVyIHRoYXQgcHJlZmVycyB0aGUgY3VycmVudCBIVFRQIGNvbnRleHQncyBgYy52YXIuYXV0aGAsXG4gICAgICogYWxsb3dpbmcgYXV0aCBtaWRkbGV3YXJlIHRoYXQgcnVucyBhZnRlciB0aGUgYWdlbnQgbWlkZGxld2FyZSB0byBzdGlsbFxuICAgICAqIHByb3BhZ2F0ZSBhdXRoIHRvIGFnZW50cy5cbiAgICAgKi9cbiAgICBnZXQgYXV0aCgpIHtcbiAgICAgICAgLy8gUHJlZmVyIEhUVFAgY29udGV4dCB2YXIuYXV0aCBpZiBhdmFpbGFibGUgKGFsbG93cyBsYXRlLWJpbmRpbmcgZnJvbSByb3V0ZSBtaWRkbGV3YXJlKVxuICAgICAgICBpZiAoaW5IVFRQQ29udGV4dCgpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgY29uc3QgaHR0cEN0eCA9IGh0dHBBc3luY0xvY2FsU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgICAgICAgICAgICAgIGlmIChodHRwQ3R4Py52YXIgJiYgJ2F1dGgnIGluIGh0dHBDdHgudmFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodHRwQ3R4LnZhci5hdXRoID8/IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIElmIEhUVFAgY29udGV4dCBub3QgYXZhaWxhYmxlLCBmYWxsIHRocm91Z2hcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGYWxsYmFjazogd2hhdGV2ZXIgd2FzIHBhc3NlZCBpbiBhdCBjcmVhdGlvbiB0aW1lIChmb3Igc3RhbmRhbG9uZS90ZXN0IGNvbnRleHRzKVxuICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbEF1dGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBhdXRoIGZvciBub24tSFRUUCBjb250ZXh0cyAoc3RhbmRhbG9uZSwgdGVzdHMpLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNldCBhdXRoKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxBdXRoID0gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5hZ2VudCA9IGFyZ3MuYWdlbnQ7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gYXJncy5sb2dnZXI7XG4gICAgICAgIHRoaXMuc2Vzc2lvbklkID0gYXJncy5zZXNzaW9uSWQ7XG4gICAgICAgIHRoaXMudHJhY2VyID0gYXJncy50cmFjZXI7XG4gICAgICAgIHRoaXMudGhyZWFkID0gYXJncy50aHJlYWQ7XG4gICAgICAgIHRoaXMuc2Vzc2lvbiA9IGFyZ3Muc2Vzc2lvbjtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcmdzLmNvbmZpZztcbiAgICAgICAgdGhpcy5hcHAgPSBhcmdzLmFwcDtcbiAgICAgICAgdGhpcy5faW5pdGlhbEF1dGggPSBhcmdzLmF1dGggPz8gbnVsbDtcbiAgICAgICAgdGhpc1tBR0VOVF9SVU5USU1FXSA9IGFyZ3MucnVudGltZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gYXJncy5oYW5kbGVyO1xuICAgICAgICByZWdpc3RlclNlcnZpY2VzKHRoaXMsIGZhbHNlKTsgLy8gYWdlbnRzIGFscmVhZHkgcG9wdWxhdGVkIHZpYSBhcmdzLmFnZW50XG4gICAgfVxuICAgIHdhaXRVbnRpbChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmhhbmRsZXIud2FpdFVudGlsKGNhbGxiYWNrKTtcbiAgICB9XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgYWdlbnRBc3luY0xvY2FsU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZSgpO1xuY29uc3QgaHR0cEFzeW5jTG9jYWxTdG9yYWdlID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlKCk7XG5leHBvcnQgY29uc3QgaW5BZ2VudENvbnRleHQgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFnZW50QXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICByZXR1cm4gISFjb250ZXh0O1xufTtcbmV4cG9ydCBjb25zdCBpbkhUVFBDb250ZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBodHRwQXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICByZXR1cm4gISFjb250ZXh0O1xufTtcbmNvbnN0IEFnZW50Q29udGV4dE5vdEF2YWlsYWJsZUVycm9yID0gU3RydWN0dXJlZEVycm9yKCdBZ2VudENvbnRleHROb3RBdmFpbGFibGVFcnJvcicsICdBZ2VudENvbnRleHQgaXMgbm90IGF2YWlsYWJsZScpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjb25zdCBnZXRBZ2VudENvbnRleHQgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFnZW50QXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFnZW50Q29udGV4dE5vdEF2YWlsYWJsZUVycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xufTtcbmNvbnN0IEhUVFBDb250ZXh0Tm90QXZhaWxhYmxlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ0hUVFBDb250ZXh0Tm90QXZhaWxhYmxlRXJyb3InLCAnSFRUUENvbnRleHQgaXMgbm90IGF2YWlsYWJsZScpO1xuZXhwb3J0IGNvbnN0IGdldEhUVFBDb250ZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBodHRwQXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEhUVFBDb250ZXh0Tm90QXZhaWxhYmxlRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG59O1xuZXhwb3J0IGNvbnN0IGdldEFnZW50QXN5bmNMb2NhbFN0b3JhZ2UgPSAoKSA9PiBhZ2VudEFzeW5jTG9jYWxTdG9yYWdlO1xuZXhwb3J0IGNvbnN0IGdldEhUVFBBc3luY0xvY2FsU3RvcmFnZSA9ICgpID0+IGh0dHBBc3luY0xvY2FsU3RvcmFnZTtcbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGV4ZWN1dGluZyBhZ2VudCdzIG1ldGFkYXRhIChmb3IgaW50ZXJuYWwgdGVsZW1ldHJ5IHVzZSBvbmx5KS5cbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBpbiBhbiBhZ2VudCBjb250ZXh0IG9yIG5vIGFnZW50IGlzIGV4ZWN1dGluZy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEFnZW50TWV0YWRhdGEgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFnZW50QXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICBpZiAoIWNvbnRleHQpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gQWNjZXNzIGludGVybmFsIHN5bWJvbCBwcm9wZXJ0eVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIGNvbnRleHRbQ1VSUkVOVF9BR0VOVF0/Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBjb25zdCBzZXR1cFJlcXVlc3RBZ2VudENvbnRleHQgPSAoY3R4T2JqZWN0LCBhcmdzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gbmV3IFJlcXVlc3RBZ2VudENvbnRleHQoYXJncyk7XG4gICAgLy8gTm90ZTogQWxsIEhvbm8gY29udGV4dCB2YXJpYWJsZXMgYXJlIHNldCB2aWEgYy5zZXQoKSBpbiBfc2VydmVyLnRzIG1pZGRsZXdhcmUuXG4gICAgLy8gUmVxdWVzdEFnZW50Q29udGV4dCBpcyBvbmx5IHVzZWQgd2l0aGluIGFnZW50cyB2aWEgQXN5bmNMb2NhbFN0b3JhZ2UuXG4gICAgLy8gTm8gcHJvcGVydGllcyBuZWVkIHRvIGJlIGNvcGllZCBiZXR3ZWVuIHRoZW0uXG4gICAgLy8gUHJvdmlkZSBleGVjdXRpb25DdHgud2FpdFVudGlsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQ2xvdWRmbGFyZSBXb3JrZXJzIEFQSVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHhPYmplY3QsICdleGVjdXRpb25DdHgnLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2FpdFVudGlsOiAocHJvbWlzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLmhhbmRsZXIud2FpdFVudGlsKHByb21pc2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFzc1Rocm91Z2hPbkV4Y2VwdGlvbjogKCkgPT4geyB9LFxuICAgICAgICAgICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gYWdlbnRBc3luY0xvY2FsU3RvcmFnZS5ydW4oY3R4LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5leHQoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3QgcnVuSW5IVFRQQ29udGV4dCA9IGFzeW5jIChjdHgsIG5leHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiBodHRwQXN5bmNMb2NhbFN0b3JhZ2UucnVuKGN0eCwgbmV4dCk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2NvbnRleHQuanMubWFwIiwKICAgICIvKipcbiAqIFZhbGlkYXRlcyBhIHZhbHVlIGFnYWluc3QgYSBTdGFuZGFyZFNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gc2NoZW1hIC0gVGhlIFN0YW5kYXJkU2NoZW1hIHRvIHZhbGlkYXRlIGFnYWluc3RcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgVmFsaWRhdGlvblJlc3VsdCB3aXRoIHN1Y2Nlc3MvZmFpbHVyZSBhbmQgZGF0YS9pc3N1ZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHZhbHVlKTtcbiAgICBpZiAoJ2lzc3VlcycgaW4gcmVzdWx0ICYmIHJlc3VsdC5pc3N1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGlzc3VlczogQXJyYXkuZnJvbShyZXN1bHQuaXNzdWVzKSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbn1cbi8qKlxuICogRm9ybWF0IHZhbGlkYXRpb24gaXNzdWVzIGludG8gYSByZWFkYWJsZSBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBpc3N1ZXMgLSBBcnJheSBvZiB2YWxpZGF0aW9uIGlzc3Vlc1xuICogQHJldHVybnMgRm9ybWF0dGVkIGVycm9yIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZhbGlkYXRpb25Jc3N1ZXMoaXNzdWVzKSB7XG4gICAgcmV0dXJuIGlzc3Vlc1xuICAgICAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gaXNzdWUucGF0aD8ubWFwKChwKSA9PiAodHlwZW9mIHAgPT09ICdvYmplY3QnID8gcC5rZXkgOiBwKSkuam9pbignLicpIHx8ICcnO1xuICAgICAgICByZXR1cm4gcGF0aCA/IGAke3BhdGh9OiAke2lzc3VlLm1lc3NhZ2V9YCA6IGlzc3VlLm1lc3NhZ2U7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fdmFsaWRhdGlvbi5qcy5tYXAiLAogICAgIi8qKlxuICogQnVpbGQgbWV0YWRhdGEgdXRpbGl0aWVzXG4gKiBQcm92aWRlcyBjYWNoZWQgYWNjZXNzIHRvIGFnZW50dWl0eS5tZXRhZGF0YS5qc29uXG4gKi9cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBpbnRlcm5hbCB9IGZyb20gJy4vbG9nZ2VyL2ludGVybmFsJztcbi8vIENhY2hlZCBtZXRhZGF0YSAtIG51bGwgbWVhbnMgbm90IHlldCBsb2FkZWQsIHVuZGVmaW5lZCBtZWFucyBmaWxlIG5vdCBmb3VuZFxubGV0IF9tZXRhZGF0YUNhY2hlID0gbnVsbDtcbi8qKlxuICogR2V0IHRoZSBwYXRoIHRvIGFnZW50dWl0eS5tZXRhZGF0YS5qc29uXG4gKlxuICogQ2hlY2tzIG11bHRpcGxlIGxvY2F0aW9ucyB0byBzdXBwb3J0IGJvdGggZGV2IGFuZCBwcm9kdWN0aW9uOlxuICogLSBQcm9kdWN0aW9uOiBjd2QgaXMgLmFnZW50dWl0eS8sIGZpbGUgaXMgYXQgY3dkL2FnZW50dWl0eS5tZXRhZGF0YS5qc29uXG4gKiAtIERldjogY3dkIGlzIHByb2plY3Qgcm9vdCwgZmlsZSBpcyBhdCBjd2QvLmFnZW50dWl0eS9hZ2VudHVpdHkubWV0YWRhdGEuanNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YWRhdGFQYXRoKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5BR0VOVFVJVFlfUFJPSkVDVF9ESVIpIHtcbiAgICAgICAgLy8gRGV2IHBhdGg6IHJ1bm5pbmcgZnJvbSBwcm9qZWN0IHJvb3Qgd2l0aCBlbnYgZmxhZyB0byBhIGRpZmZlcmVudCBwYXRoIHVzaW5nIC0tZGlyXG4gICAgICAgIGNvbnN0IGRldlBhdGggPSBqb2luKHByb2Nlc3MuZW52LkFHRU5UVUlUWV9QUk9KRUNUX0RJUiwgJy5hZ2VudHVpdHknLCAnYWdlbnR1aXR5Lm1ldGFkYXRhLmpzb24nKTtcbiAgICAgICAgaWYgKGV4aXN0c1N5bmMoZGV2UGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXZQYXRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFByb2R1Y3Rpb24gcGF0aDogcnVubmluZyBmcm9tIC5hZ2VudHVpdHkvIGRpcmVjdG9yeVxuICAgIGNvbnN0IHByb2R1Y3Rpb25QYXRoID0gam9pbihwcm9jZXNzLmN3ZCgpLCAnYWdlbnR1aXR5Lm1ldGFkYXRhLmpzb24nKTtcbiAgICBpZiAoZXhpc3RzU3luYyhwcm9kdWN0aW9uUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHByb2R1Y3Rpb25QYXRoO1xuICAgIH1cbiAgICAvLyBEZXYgcGF0aDogcnVubmluZyBmcm9tIHByb2plY3Qgcm9vdFxuICAgIGNvbnN0IGRldlBhdGggPSBqb2luKHByb2Nlc3MuY3dkKCksICcuYWdlbnR1aXR5JywgJ2FnZW50dWl0eS5tZXRhZGF0YS5qc29uJyk7XG4gICAgaWYgKGV4aXN0c1N5bmMoZGV2UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGRldlBhdGg7XG4gICAgfVxuICAgIC8vIERlZmF1bHQgdG8gcHJvZHVjdGlvbiBwYXRoICh3aWxsIGZhaWwgZ3JhY2VmdWxseSBpbiBsb2FkQnVpbGRNZXRhZGF0YSlcbiAgICByZXR1cm4gcHJvZHVjdGlvblBhdGg7XG59XG4vKipcbiAqIExvYWQgYW5kIGNhY2hlIHRoZSBidWlsZCBtZXRhZGF0YSBmcm9tIGFnZW50dWl0eS5tZXRhZGF0YS5qc29uXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGNhbid0IGJlIHBhcnNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEJ1aWxkTWV0YWRhdGEoKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCB2YWx1ZSBpZiBhbHJlYWR5IGxvYWRlZFxuICAgIGlmIChfbWV0YWRhdGFDYWNoZSAhPT0gbnVsbCkge1xuICAgICAgICBpbnRlcm5hbC5pbmZvKCdbbWV0YWRhdGFdIGxvYWRCdWlsZE1ldGFkYXRhOiByZXR1cm5pbmcgY2FjaGVkIHZhbHVlIChleGlzdHM6ICVzKScsIF9tZXRhZGF0YUNhY2hlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gX21ldGFkYXRhQ2FjaGU7XG4gICAgfVxuICAgIGNvbnN0IG1ldGFkYXRhUGF0aCA9IGdldE1ldGFkYXRhUGF0aCgpO1xuICAgIGludGVybmFsLmluZm8oJ1ttZXRhZGF0YV0gbG9hZEJ1aWxkTWV0YWRhdGE6IGNoZWNraW5nIHBhdGggJXMnLCBtZXRhZGF0YVBhdGgpO1xuICAgIGludGVybmFsLmluZm8oJ1ttZXRhZGF0YV0gbG9hZEJ1aWxkTWV0YWRhdGE6IGN3ZD0lcycsIHByb2Nlc3MuY3dkKCkpO1xuICAgIGlmICghZXhpc3RzU3luYyhtZXRhZGF0YVBhdGgpKSB7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1ttZXRhZGF0YV0gYWdlbnR1aXR5Lm1ldGFkYXRhLmpzb24gbm90IGZvdW5kIGF0ICVzJywgbWV0YWRhdGFQYXRoKTtcbiAgICAgICAgX21ldGFkYXRhQ2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1ttZXRhZGF0YV0gbG9hZEJ1aWxkTWV0YWRhdGE6IGZpbGUgZXhpc3RzLCByZWFkaW5nLi4uJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMobWV0YWRhdGFQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICBfbWV0YWRhdGFDYWNoZSA9IG1ldGFkYXRhO1xuICAgICAgICAvLyBMb2cgYWdlbnQgYW5kIGV2YWwgY291bnRzXG4gICAgICAgIGxldCB0b3RhbEV2YWxzID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBhZ2VudCBvZiBtZXRhZGF0YS5hZ2VudHMgPz8gW10pIHtcbiAgICAgICAgICAgIHRvdGFsRXZhbHMgKz0gYWdlbnQuZXZhbHM/Lmxlbmd0aCA/PyAwO1xuICAgICAgICB9XG4gICAgICAgIGludGVybmFsLmluZm8oJ1ttZXRhZGF0YV0gbG9hZGVkIGFnZW50dWl0eS5tZXRhZGF0YS5qc29uOiAlZCBhZ2VudHMsICVkIHJvdXRlcywgJWQgdG90YWwgZXZhbHMnLCBtZXRhZGF0YS5hZ2VudHM/Lmxlbmd0aCA/PyAwLCBtZXRhZGF0YS5yb3V0ZXM/Lmxlbmd0aCA/PyAwLCB0b3RhbEV2YWxzKTtcbiAgICAgICAgLy8gTG9nIGFnZW50IG5hbWVzIGFuZCB0aGVpciBldmFsIGNvdW50c1xuICAgICAgICBmb3IgKGNvbnN0IGFnZW50IG9mIG1ldGFkYXRhLmFnZW50cyA/PyBbXSkge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW21ldGFkYXRhXSAgIGFnZW50OiAlcyAoZXZhbHM6ICVkKScsIGFnZW50Lm5hbWUsIGFnZW50LmV2YWxzPy5sZW5ndGggPz8gMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGludGVybmFsLmluZm8oJ1ttZXRhZGF0YV0gZmFpbGVkIHRvIGxvYWQgYWdlbnR1aXR5Lm1ldGFkYXRhLmpzb246ICVzJywgZXJyKTtcbiAgICAgICAgX21ldGFkYXRhQ2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLy8gQWdlbnQgbG9va3VwIGNhY2hlIC0gYnVpbHQgbGF6aWx5IGZyb20gbWV0YWRhdGFcbmxldCBfYWdlbnRzQnlOYW1lID0gbnVsbDtcbmxldCBfYWdlbnRzQnlBZ2VudElkID0gbnVsbDtcbi8vIEV2YWwgbG9va3VwIGNhY2hlIC0gbmVzdGVkIG1hcDogYWdlbnROYW1lIC0+IGV2YWxOYW1lIC0+IGV2YWxNZXRhZGF0YVxubGV0IF9ldmFsc0J5QWdlbnROYW1lID0gbnVsbDtcbmxldCBfZXZhbHNCeUFnZW50SWQgPSBudWxsO1xuLy8gVHJhY2sgaWYgd2UndmUgYWxyZWFkeSBhdHRlbXB0ZWQgYSByZWxvYWQgZm9yIGVtcHR5IGV2YWwgbWFwXG5sZXQgX2V2YWxSZWxvYWRBdHRlbXB0ZWQgPSBmYWxzZTtcbi8vIFRyYWNrIGlmIHdlJ3ZlIGFscmVhZHkgYXR0ZW1wdGVkIGEgcmVsb2FkIGZvciBlbXB0eSBhZ2VudCBtYXBcbmxldCBfYWdlbnRSZWxvYWRBdHRlbXB0ZWQgPSBmYWxzZTtcbi8qKlxuICogQnVpbGQgYWdlbnQgbG9va3VwIG1hcHMgZnJvbSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBlbnN1cmVBZ2VudE1hcHMoKSB7XG4gICAgaWYgKF9hZ2VudHNCeU5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgaW50ZXJuYWwuaW5mbyhgW21ldGFkYXRhXSBlbnN1cmVBZ2VudE1hcHM6IGFscmVhZHkgaW5pdGlhbGl6ZWQsIHNraXBwaW5nYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW50ZXJuYWwuaW5mbyhgW21ldGFkYXRhXSBlbnN1cmVBZ2VudE1hcHM6IGluaXRpYWxpemluZyBhZ2VudCBhbmQgZXZhbCBtYXBzYCk7XG4gICAgX2FnZW50c0J5TmFtZSA9IG5ldyBNYXAoKTtcbiAgICBfYWdlbnRzQnlBZ2VudElkID0gbmV3IE1hcCgpO1xuICAgIF9ldmFsc0J5QWdlbnROYW1lID0gbmV3IE1hcCgpO1xuICAgIF9ldmFsc0J5QWdlbnRJZCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGxvYWRCdWlsZE1ldGFkYXRhKCk7XG4gICAgaWYgKCFtZXRhZGF0YT8uYWdlbnRzKSB7XG4gICAgICAgIGludGVybmFsLmluZm8oYFttZXRhZGF0YV0gZW5zdXJlQWdlbnRNYXBzOiBubyBtZXRhZGF0YSBvciBubyBhZ2VudHMgZm91bmRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnRlcm5hbC5pbmZvKGBbbWV0YWRhdGFdIGVuc3VyZUFnZW50TWFwczogcHJvY2Vzc2luZyAke21ldGFkYXRhLmFnZW50cy5sZW5ndGh9IGFnZW50c2ApO1xuICAgIGZvciAoY29uc3QgYWdlbnQgb2YgbWV0YWRhdGEuYWdlbnRzKSB7XG4gICAgICAgIGlmIChhZ2VudC5uYW1lKSB7XG4gICAgICAgICAgICBfYWdlbnRzQnlOYW1lLnNldChhZ2VudC5uYW1lLCBhZ2VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFnZW50LmFnZW50SWQpIHtcbiAgICAgICAgICAgIF9hZ2VudHNCeUFnZW50SWQuc2V0KGFnZW50LmFnZW50SWQsIGFnZW50KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBCdWlsZCBldmFsIGxvb2t1cCBtYXBzXG4gICAgICAgIGlmIChhZ2VudC5ldmFscyAmJiBhZ2VudC5ldmFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBldmFsc0J5TmFtZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZhbE1ldGEgb2YgYWdlbnQuZXZhbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZhbE1ldGEubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBldmFsc0J5TmFtZS5zZXQoZXZhbE1ldGEubmFtZSwgZXZhbE1ldGEpO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbbWV0YWRhdGFdIEluZGV4ZWQgZXZhbDogYWdlbnQ9JyR7YWdlbnQubmFtZX0nIGV2YWw9JyR7ZXZhbE1ldGEubmFtZX0nIGlkZW50aWZpZXI9JyR7ZXZhbE1ldGEuaWRlbnRpZmllcn0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFnZW50Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBfZXZhbHNCeUFnZW50TmFtZS5zZXQoYWdlbnQubmFtZSwgZXZhbHNCeU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFnZW50LmFnZW50SWQpIHtcbiAgICAgICAgICAgICAgICBfZXZhbHNCeUFnZW50SWQuc2V0KGFnZW50LmFnZW50SWQsIGV2YWxzQnlOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGludGVybmFsLmluZm8oYFttZXRhZGF0YV0gQWdlbnQgJyR7YWdlbnQubmFtZX0nIGhhcyBubyBldmFsc2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGludGVybmFsLmluZm8oYFttZXRhZGF0YV0gRXZhbCBtYXBzIGJ1aWx0OiAke19ldmFsc0J5QWdlbnROYW1lPy5zaXplID8/IDB9IGFnZW50cyB3aXRoIGV2YWxzYCk7XG59XG4vKipcbiAqIExvb2sgdXAgYWdlbnQgbWV0YWRhdGEgYnkgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdlbnRNZXRhZGF0YUJ5TmFtZShhZ2VudE5hbWUpIHtcbiAgICBlbnN1cmVBZ2VudE1hcHMoKTtcbiAgICAvLyBJZiBhZ2VudCBtYXAgaXMgZW1wdHksIHRoZSBjYWNoZSBtYXkgaGF2ZSBiZWVuIGJ1aWx0IGJlZm9yZSBtZXRhZGF0YSB3YXMgcmVhZHlcbiAgICAvLyBUcnkgY2xlYXJpbmcgYW5kIHJlbG9hZGluZyBvbmNlIChvbmx5IGF0dGVtcHQgb25jZSB0byBhdm9pZCByZXBlYXRlZCByZWxvYWRzKVxuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgcmVsb2FkIGxvZ2ljIGluIGdldEV2YWxNZXRhZGF0YVxuICAgIGlmIChfYWdlbnRzQnlOYW1lPy5zaXplID09PSAwICYmICFfYWdlbnRSZWxvYWRBdHRlbXB0ZWQpIHtcbiAgICAgICAgX2FnZW50UmVsb2FkQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgaW50ZXJuYWwuaW5mbyhgW21ldGFkYXRhXSBnZXRBZ2VudE1ldGFkYXRhQnlOYW1lOiBhZ2VudCBtYXAgaXMgZW1wdHksIGF0dGVtcHRpbmcgY2FjaGUgY2xlYXIgYW5kIHJlbG9hZGApO1xuICAgICAgICBjbGVhck1ldGFkYXRhQ2FjaGUoKTtcbiAgICAgICAgZW5zdXJlQWdlbnRNYXBzKCk7XG4gICAgICAgIGludGVybmFsLmluZm8oYFttZXRhZGF0YV0gZ2V0QWdlbnRNZXRhZGF0YUJ5TmFtZTogYWZ0ZXIgcmVsb2FkLCBhZ2VudCBtYXAgc2l6ZTogJHtfYWdlbnRzQnlOYW1lPy5zaXplID8/IDB9YCk7XG4gICAgfVxuICAgIHJldHVybiBfYWdlbnRzQnlOYW1lPy5nZXQoYWdlbnROYW1lKTtcbn1cbi8qKlxuICogTG9vayB1cCBhZ2VudCBtZXRhZGF0YSBieSBhZ2VudElkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2VudE1ldGFkYXRhQnlBZ2VudElkKGFnZW50SWQpIHtcbiAgICBlbnN1cmVBZ2VudE1hcHMoKTtcbiAgICByZXR1cm4gX2FnZW50c0J5QWdlbnRJZD8uZ2V0KGFnZW50SWQpO1xufVxuLyoqXG4gKiBMb29rIHVwIGV2YWwgbWV0YWRhdGEgYnkgYWdlbnQgbmFtZSBhbmQgZXZhbCBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmFsTWV0YWRhdGEoYWdlbnROYW1lLCBldmFsTmFtZSkge1xuICAgIGVuc3VyZUFnZW50TWFwcygpO1xuICAgIC8vIElmIGV2YWwgbWFwIGlzIGVtcHR5LCB0aGUgY2FjaGUgbWF5IGhhdmUgYmVlbiBidWlsdCBiZWZvcmUgbWV0YWRhdGEgd2FzIHJlYWR5XG4gICAgLy8gVHJ5IGNsZWFyaW5nIGFuZCByZWxvYWRpbmcgb25jZSAob25seSBhdHRlbXB0IG9uY2UgdG8gYXZvaWQgcmVwZWF0ZWQgcmVsb2FkcylcbiAgICBpZiAoX2V2YWxzQnlBZ2VudE5hbWU/LnNpemUgPT09IDAgJiYgIV9ldmFsUmVsb2FkQXR0ZW1wdGVkKSB7XG4gICAgICAgIF9ldmFsUmVsb2FkQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgaW50ZXJuYWwuaW5mbyhgW21ldGFkYXRhXSBnZXRFdmFsTWV0YWRhdGE6IGV2YWwgbWFwIGlzIGVtcHR5LCBhdHRlbXB0aW5nIGNhY2hlIGNsZWFyIGFuZCByZWxvYWRgKTtcbiAgICAgICAgY2xlYXJNZXRhZGF0YUNhY2hlKCk7XG4gICAgICAgIGVuc3VyZUFnZW50TWFwcygpO1xuICAgICAgICBpbnRlcm5hbC5pbmZvKGBbbWV0YWRhdGFdIGdldEV2YWxNZXRhZGF0YTogYWZ0ZXIgcmVsb2FkLCBldmFsIG1hcCBzaXplOiAke19ldmFsc0J5QWdlbnROYW1lPy5zaXplID8/IDB9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFnZW50RXZhbHMgPSBfZXZhbHNCeUFnZW50TmFtZT8uZ2V0KGFnZW50TmFtZSk7XG4gICAgaW50ZXJuYWwuaW5mbyhgW21ldGFkYXRhXSBnZXRFdmFsTWV0YWRhdGEoJyR7YWdlbnROYW1lfScsICcke2V2YWxOYW1lfScpOiBhZ2VudEV2YWxzPSR7YWdlbnRFdmFscyA/IGBNYXAoJHthZ2VudEV2YWxzLnNpemV9KWAgOiAndW5kZWZpbmVkJ31gKTtcbiAgICBpZiAoYWdlbnRFdmFscykge1xuICAgICAgICBpbnRlcm5hbC5pbmZvKGBbbWV0YWRhdGFdIEF2YWlsYWJsZSBldmFscyBmb3IgYWdlbnQgJyR7YWdlbnROYW1lfSc6IFske1suLi5hZ2VudEV2YWxzLmtleXMoKV0uam9pbignLCAnKX1dYCk7XG4gICAgfVxuICAgIGlmICghYWdlbnRFdmFscykge1xuICAgICAgICBpbnRlcm5hbC5pbmZvKGBbbWV0YWRhdGFdIEF2YWlsYWJsZSBhZ2VudHMgaW4gZXZhbCBtYXA6IFske1suLi4oX2V2YWxzQnlBZ2VudE5hbWU/LmtleXMoKSA/PyBbXSldLmpvaW4oJywgJyl9XWApO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhZ2VudEV2YWxzPy5nZXQoZXZhbE5hbWUpO1xuICAgIGludGVybmFsLmluZm8oYFttZXRhZGF0YV0gZ2V0RXZhbE1ldGFkYXRhIHJlc3VsdDogJHtyZXN1bHQgPyBgZm91bmQgaWRlbnRpZmllcj0ke3Jlc3VsdC5pZGVudGlmaWVyfWAgOiAnbm90IGZvdW5kJ31gKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBMb29rIHVwIGV2YWwgbWV0YWRhdGEgYnkgYWdlbnRJZCBhbmQgZXZhbCBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmFsTWV0YWRhdGFCeUFnZW50SWQoYWdlbnRJZCwgZXZhbE5hbWUpIHtcbiAgICBlbnN1cmVBZ2VudE1hcHMoKTtcbiAgICByZXR1cm4gX2V2YWxzQnlBZ2VudElkPy5nZXQoYWdlbnRJZCk/LmdldChldmFsTmFtZSk7XG59XG4vKipcbiAqIENoZWNrIGlmIG1ldGFkYXRhIGZpbGUgZXhpc3RzICh1c2VzIGNhY2hlKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIGxvYWRCdWlsZE1ldGFkYXRhKCkgIT09IHVuZGVmaW5lZDtcbn1cbi8vIFRyYWNrIGlmIGFnZW50cyBoYXZlIGJlZW4gaW1wb3J0ZWRcbmxldCBfYWdlbnRzSW1wb3J0ZWQgPSBmYWxzZTtcbi8qKlxuICogSW1wb3J0IGFsbCBhZ2VudHMgZnJvbSBtZXRhZGF0YSBmaWxlbmFtZXMgdG8gZW5zdXJlIHRoZXkncmUgcmVnaXN0ZXJlZC5cbiAqIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgcnVudGltZSBzY2hlbWFzIGFyZSBhdmFpbGFibGUgZm9yIEpTT04gc2NoZW1hIGdlbmVyYXRpb24uXG4gKiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMgLSB3aWxsIG9ubHkgaW1wb3J0IG9uY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVBZ2VudHNJbXBvcnRlZCgpIHtcbiAgICBpZiAoX2FnZW50c0ltcG9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWV0YWRhdGEgPSBsb2FkQnVpbGRNZXRhZGF0YSgpO1xuICAgIGlmICghbWV0YWRhdGE/LmFnZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIF9hZ2VudHNJbXBvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW50ZXJuYWwuaW5mbygnW21ldGFkYXRhXSBlbnN1cmVBZ2VudHNJbXBvcnRlZDogaW1wb3J0aW5nICVkIGFnZW50cycsIG1ldGFkYXRhLmFnZW50cy5sZW5ndGgpO1xuICAgIGZvciAoY29uc3QgYWdlbnQgb2YgbWV0YWRhdGEuYWdlbnRzKSB7XG4gICAgICAgIGlmICghYWdlbnQuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHJlbGF0aXZlIGZpbGVuYW1lIHRvIGFic29sdXRlIHBhdGggZnJvbSBjd2RcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgYWdlbnQuZmlsZW5hbWUpO1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW21ldGFkYXRhXSBpbXBvcnRpbmcgYWdlbnQ6ICVzIGZyb20gJXMnLCBhZ2VudC5uYW1lLCBhYnNvbHV0ZVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgaW1wb3J0KGFic29sdXRlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW21ldGFkYXRhXSBmYWlsZWQgdG8gaW1wb3J0IGFnZW50ICVzOiAlcycsIGFnZW50Lm5hbWUsIGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2FnZW50c0ltcG9ydGVkID0gdHJ1ZTtcbn1cbi8qKlxuICogQ2xlYXIgdGhlIG1ldGFkYXRhIGNhY2hlICh1c2VmdWwgZm9yIHRlc3Rpbmcgb3IgaG90IHJlbG9hZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTWV0YWRhdGFDYWNoZSgpIHtcbiAgICBpbnRlcm5hbC5pbmZvKCdbbWV0YWRhdGFdIGNsZWFyTWV0YWRhdGFDYWNoZTogY2xlYXJpbmcgYWxsIGNhY2hlcycpO1xuICAgIF9tZXRhZGF0YUNhY2hlID0gbnVsbDtcbiAgICBfYWdlbnRzQnlOYW1lID0gbnVsbDtcbiAgICBfYWdlbnRzQnlBZ2VudElkID0gbnVsbDtcbiAgICBfZXZhbHNCeUFnZW50TmFtZSA9IG51bGw7XG4gICAgX2V2YWxzQnlBZ2VudElkID0gbnVsbDtcbiAgICAvLyBOb3RlOiBfZXZhbFJlbG9hZEF0dGVtcHRlZCBpcyBpbnRlbnRpb25hbGx5IE5PVCByZXNldCBoZXJlXG4gICAgLy8gdG8gcHJldmVudCBpbmZpbml0ZSByZWxvYWQgbG9vcHMgaW4gZ2V0RXZhbE1ldGFkYXRhXG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fbWV0YWRhdGEuanMubWFwIiwKICAgICIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IsIHRvQ2FtZWxDYXNlLCB9IGZyb20gJ0BhZ2VudHVpdHkvY29yZSc7XG5pbXBvcnQgeyBjb250ZXh0LCBTcGFuU3RhdHVzQ29kZSwgdHJhY2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSAnaG9uby92YWxpZGF0b3InO1xuaW1wb3J0IHsgQUdFTlRfUlVOVElNRSwgSU5URVJOQUxfQUdFTlQsIENVUlJFTlRfQUdFTlQsIEFHRU5UX0lEUyB9IGZyb20gJy4vX2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRBZ2VudENvbnRleHQsIGluSFRUUENvbnRleHQsIGdldEhUVFBDb250ZXh0LCBzZXR1cFJlcXVlc3RBZ2VudENvbnRleHQsIGdldEFnZW50QXN5bmNMb2NhbFN0b3JhZ2UsIH0gZnJvbSAnLi9fY29udGV4dCc7XG5pbXBvcnQgeyBpbnRlcm5hbCB9IGZyb20gJy4vbG9nZ2VyL2ludGVybmFsJztcbmltcG9ydCB7IGZpcmVFdmVudCB9IGZyb20gJy4vX2V2ZW50cyc7XG5pbXBvcnQgeyBwcml2YXRlQ29udGV4dCB9IGZyb20gJy4vX3NlcnZlcic7XG5pbXBvcnQgeyBnZW5lcmF0ZUlkIH0gZnJvbSAnLi9zZXNzaW9uJztcbmltcG9ydCB7IGdldEV2YWxSdW5FdmVudFByb3ZpZGVyIH0gZnJvbSAnLi9fc2VydmljZXMnO1xuaW1wb3J0ICogYXMgcnVudGltZUNvbmZpZyBmcm9tICcuL19jb25maWcnO1xuaW1wb3J0IHsgdmFsaWRhdGVTY2hlbWEsIGZvcm1hdFZhbGlkYXRpb25Jc3N1ZXMgfSBmcm9tICcuL192YWxpZGF0aW9uJztcbmltcG9ydCB7IGdldEFnZW50TWV0YWRhdGFCeU5hbWUsIGdldEV2YWxNZXRhZGF0YSB9IGZyb20gJy4vX21ldGFkYXRhJztcbi8vIFdpbGwgYmUgcG9wdWxhdGVkIGF0IHJ1bnRpbWUgd2l0aCBzdHJvbmdseSB0eXBlZCBhZ2VudHNcbmNvbnN0IGFnZW50cyA9IG5ldyBNYXAoKTtcbi8vIFdlYWtNYXAgdG8gc3RvcmUgZXZlbnQgbGlzdGVuZXJzIGZvciBlYWNoIGFnZW50IGluc3RhbmNlICh0cnVseSBwcml2YXRlKVxuY29uc3QgYWdlbnRFdmVudExpc3RlbmVycyA9IG5ldyBXZWFrTWFwKCk7XG4vLyBNYXAgdG8gc3RvcmUgYWdlbnQgY29uZmlncyByZXR1cm5lZCBmcm9tIHNldHVwIChrZXllZCBieSBhZ2VudCBuYW1lKVxuY29uc3QgYWdlbnRDb25maWdzID0gbmV3IE1hcCgpO1xuLyoqXG4gKiBHZXQgdGhlIGdsb2JhbCBydW50aW1lIHN0YXRlIChmb3IgcHJvZHVjdGlvbiB1c2UpLlxuICogSW4gdGVzdHMsIHVzZSBUZXN0QWdlbnRDb250ZXh0IHdoaWNoIGhhcyBpc29sYXRlZCBydW50aW1lIHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsUnVudGltZVN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFnZW50cyxcbiAgICAgICAgYWdlbnRDb25maWdzLFxuICAgICAgICBhZ2VudEV2ZW50TGlzdGVuZXJzLFxuICAgIH07XG59XG4vKipcbiAqIEdldCB0aGUgcnVudGltZSBzdGF0ZSBmcm9tIGFuIEFnZW50Q29udGV4dC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdlbnRSdW50aW1lKGN0eCkge1xuICAgIHJldHVybiBjdHhbQUdFTlRfUlVOVElNRV07XG59XG5hc3luYyBmdW5jdGlvbiBmaXJlQWdlbnRFdmVudChydW50aW1lLCBhZ2VudCwgZXZlbnROYW1lLCBjb250ZXh0LCBkYXRhKSB7XG4gICAgLy8gRmlyZSBhZ2VudC1sZXZlbCBsaXN0ZW5lcnNcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBydW50aW1lLmFnZW50RXZlbnRMaXN0ZW5lcnMuZ2V0KGFnZW50KTtcbiAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrcyAmJiBjYWxsYmFja3Muc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2Vycm9yZWQnICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGV2ZW50TmFtZSwgYWdlbnQsIGNvbnRleHQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50TmFtZSA9PT0gJ3N0YXJ0ZWQnIHx8IGV2ZW50TmFtZSA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGV2ZW50TmFtZSwgYWdlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IHJlLXRocm93IC0gZXZlbnQgbGlzdGVuZXIgZXJyb3JzIHNob3VsZCBub3QgY3Jhc2ggdGhlIHNlcnZlclxuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5lcnJvcihgRXJyb3IgaW4gYWdlbnQgZXZlbnQgbGlzdGVuZXIgZm9yICcke2V2ZW50TmFtZX0nOmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRmlyZSBnbG9iYWwgYXBwLWxldmVsIGV2ZW50c1xuICAgIGlmIChldmVudE5hbWUgPT09ICdlcnJvcmVkJyAmJiBkYXRhKSB7XG4gICAgICAgIGF3YWl0IGZpcmVFdmVudCgnYWdlbnQuZXJyb3JlZCcsIGFnZW50LCBjb250ZXh0LCBkYXRhKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXZlbnROYW1lID09PSAnc3RhcnRlZCcpIHtcbiAgICAgICAgYXdhaXQgZmlyZUV2ZW50KCdhZ2VudC5zdGFydGVkJywgYWdlbnQsIGNvbnRleHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudE5hbWUgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgIGF3YWl0IGZpcmVFdmVudCgnYWdlbnQuY29tcGxldGVkJywgYWdlbnQsIGNvbnRleHQpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCByZWdpc3RlckFnZW50ID0gKG5hbWUsIGFnZW50KSA9PiB7XG4gICAgYWdlbnRzLnNldChuYW1lLCBhZ2VudCk7XG59O1xuZXhwb3J0IGNvbnN0IHNldEFnZW50Q29uZmlnID0gKG5hbWUsIGNvbmZpZykgPT4ge1xuICAgIGFnZW50Q29uZmlncy5zZXQobmFtZSwgY29uZmlnKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0QWdlbnRDb25maWcgPSAobmFtZSkgPT4ge1xuICAgIHJldHVybiBhZ2VudENvbmZpZ3MuZ2V0KG5hbWUpO1xufTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvciA9IFN0cnVjdHVyZWRFcnJvcignVmFsaWRhdGlvbkVycm9yJykoKTtcbi8vIEltcGxlbWVudGF0aW9uXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWdlbnQobmFtZSwgY29uZmlnKSB7XG4gICAgY29uc3QgaW5wdXRTY2hlbWEgPSBjb25maWcuc2NoZW1hPy5pbnB1dDtcbiAgICBjb25zdCBvdXRwdXRTY2hlbWEgPSBjb25maWcuc2NoZW1hPy5vdXRwdXQ7XG4gICAgLy8gSW5pdGlhbGl6ZSBldmFscyBhcnJheSBiZWZvcmUgaGFuZGxlciBzbyBpdCBjYW4gYmUgY2FwdHVyZWQgaW4gY2xvc3VyZVxuICAgIC8vIEV2YWxzIHNob3VsZCBvbmx5IGJlIGFkZGVkIHZpYSBhZ2VudC5jcmVhdGVFdmFsKCkgYWZ0ZXIgYWdlbnQgY3JlYXRpb25cbiAgICBjb25zdCBldmFsc0FycmF5ID0gW107XG4gICAgY29uc3QgaGFuZGxlciA9IGFzeW5jIChpbnB1dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVkSW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpbnB1dFNjaGVtYSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRSZXN1bHQgPSBhd2FpdCBpbnB1dFNjaGVtYVsnfnN0YW5kYXJkJ10udmFsaWRhdGUoaW5wdXQpO1xuICAgICAgICAgICAgaWYgKGlucHV0UmVzdWx0Lmlzc3Vlcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGlucHV0UmVzdWx0Lmlzc3VlcyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYElucHV0IHZhbGlkYXRpb24gZmFpbGVkOiAke2lucHV0UmVzdWx0Lmlzc3Vlcy5tYXAoKGkpID0+IGkubWVzc2FnZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdGVkSW5wdXQgPSBpbnB1dFJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZ2VudEN0eCA9IGdldEFnZW50Q29udGV4dCgpO1xuICAgICAgICAvLyBTdG9yZSBjdXJyZW50IGFnZW50IGZvciB0ZWxlbWV0cnkgKHVzaW5nIFN5bWJvbCB0byBrZWVwIGl0IGludGVybmFsKVxuICAgICAgICBhZ2VudEN0eFtDVVJSRU5UX0FHRU5UXSA9IGFnZW50O1xuICAgICAgICAvLyBFeHBvc2UgY3VycmVudCBhZ2VudCBtZXRhZGF0YSBvbiB0aGUgY29udGV4dFxuICAgICAgICBhZ2VudEN0eC5jdXJyZW50ID0gYWdlbnQubWV0YWRhdGE7XG4gICAgICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgICAgICAgJ0BhZ2VudHVpdHkvYWdlbnRJZCc6IGFnZW50Lm1ldGFkYXRhLmlkLFxuICAgICAgICAgICAgJ0BhZ2VudHVpdHkvYWdlbnRJbnN0YW5jZUlkJzogYWdlbnQubWV0YWRhdGEuYWdlbnRJZCxcbiAgICAgICAgICAgICdAYWdlbnR1aXR5L2FnZW50RGVzY3JpcHRpb24nOiBhZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICdAYWdlbnR1aXR5L2FnZW50TmFtZSc6IGFnZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAnQGFnZW50dWl0eS90aHJlYWRJZCc6IGFnZW50Q3R4LnRocmVhZC5pZCxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gU2V0IGFnZW50IGF0dHJpYnV0ZXMgb24gdGhlIGN1cnJlbnQgYWN0aXZlIHNwYW5cbiAgICAgICAgY29uc3QgYWN0aXZlU3BhbiA9IHRyYWNlLmdldEFjdGl2ZVNwYW4oKTtcbiAgICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgICAgIGFjdGl2ZVNwYW4uc2V0QXR0cmlidXRlcyhhdHRycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluSFRUUENvbnRleHQoKSkge1xuICAgICAgICAgICAgY29uc3QgaG9ub0N0eCA9IHByaXZhdGVDb250ZXh0KGdldEhUVFBDb250ZXh0KCkpO1xuICAgICAgICAgICAgaWYgKGhvbm9DdHgudmFyLmFnZW50SWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFnZW50Lm1ldGFkYXRhLmlkKVxuICAgICAgICAgICAgICAgICAgICBob25vQ3R4LnZhci5hZ2VudElkcy5hZGQoYWdlbnQubWV0YWRhdGEuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChhZ2VudC5tZXRhZGF0YS5hZ2VudElkKVxuICAgICAgICAgICAgICAgICAgICBob25vQ3R4LnZhci5hZ2VudElkcy5hZGQoYWdlbnQubWV0YWRhdGEuYWdlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBGb3Igc3RhbmRhbG9uZSBjb250ZXh0cywgY2hlY2sgZm9yIEFHRU5UX0lEUyBzeW1ib2xcbiAgICAgICAgICAgIGNvbnN0IGFnZW50SWRzID0gYWdlbnRDdHhbQUdFTlRfSURTXTtcbiAgICAgICAgICAgIGlmIChhZ2VudElkcykge1xuICAgICAgICAgICAgICAgIGlmIChhZ2VudC5tZXRhZGF0YS5pZClcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZHMuYWRkKGFnZW50Lm1ldGFkYXRhLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoYWdlbnQubWV0YWRhdGEuYWdlbnRJZClcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZHMuYWRkKGFnZW50Lm1ldGFkYXRhLmFnZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFnZW50Q3R4LmxvZ2dlciA9IGFnZW50Q3R4LmxvZ2dlci5jaGlsZChhdHRycyk7XG4gICAgICAgIC8vIEdldCB0aGUgYWdlbnQgaW5zdGFuY2UgZnJvbSB0aGUgcnVudGltZSBzdGF0ZSB0byBmaXJlIGV2ZW50c1xuICAgICAgICBjb25zdCBydW50aW1lID0gZ2V0QWdlbnRSdW50aW1lKGFnZW50Q3R4KTtcbiAgICAgICAgLy8gRmlyZSAnc3RhcnRlZCcgZXZlbnRcbiAgICAgICAgYXdhaXQgZmlyZUFnZW50RXZlbnQocnVudGltZSwgYWdlbnQsICdzdGFydGVkJywgYWdlbnRDdHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV3JhcCBhZ2VudCBleGVjdXRpb24gd2l0aCBzcGFuIHRyYWNraW5nIGlmIHRyYWNlciBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFnZW50Q3R4LnRyYWNlciAmJiBpbkhUVFBDb250ZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9ub0N0eCA9IGdldEhUVFBDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydW5XaXRoU3BhbihhZ2VudEN0eC50cmFjZXIsIGFnZW50LCBob25vQ3R4LCBhc3luYyAoKSA9PiBpbnB1dFNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBhd2FpdCBjb25maWcuaGFuZGxlcihhZ2VudEN0eCwgdmFsaWRhdGVkSW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGF3YWl0IGNvbmZpZy5oYW5kbGVyKGFnZW50Q3R4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRTY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYXdhaXQgY29uZmlnLmhhbmRsZXIoYWdlbnRDdHgsIHZhbGlkYXRlZElucHV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhd2FpdCBjb25maWcuaGFuZGxlcihhZ2VudEN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGxldCB2YWxpZGF0ZWRPdXRwdXQgPSByZXN1bHQ7XG4gICAgICAgICAgICAvLyBTa2lwIG91dHB1dCB2YWxpZGF0aW9uIGZvciBzdHJlYW1pbmcgYWdlbnRzICh0aGV5IHJldHVybiBSZWFkYWJsZVN0cmVhbSlcbiAgICAgICAgICAgIGlmIChvdXRwdXRTY2hlbWEgJiYgIWNvbmZpZy5zY2hlbWE/LnN0cmVhbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dFJlc3VsdCA9IGF3YWl0IG91dHB1dFNjaGVtYVsnfnN0YW5kYXJkJ10udmFsaWRhdGUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0UmVzdWx0Lmlzc3Vlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlczogb3V0cHV0UmVzdWx0Lmlzc3VlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBPdXRwdXQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7b3V0cHV0UmVzdWx0Lmlzc3Vlcy5tYXAoKGkpID0+IGkubWVzc2FnZSkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVkT3V0cHV0ID0gb3V0cHV0UmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RvcmUgdmFsaWRhdGVkIGlucHV0L291dHB1dCBpbiBjb250ZXh0IHN0YXRlIGZvciBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgICAgIGFnZW50Q3R4LnN0YXRlLnNldCgnX2V2YWxJbnB1dCcsIHZhbGlkYXRlZElucHV0KTtcbiAgICAgICAgICAgIGFnZW50Q3R4LnN0YXRlLnNldCgnX2V2YWxPdXRwdXQnLCB2YWxpZGF0ZWRPdXRwdXQpO1xuICAgICAgICAgICAgLy8gRmlyZSAnY29tcGxldGVkJyBldmVudCAtIGV2YWxzIHdpbGwgcnVuIHZpYSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgYXdhaXQgZmlyZUFnZW50RXZlbnQocnVudGltZSwgYWdlbnQsICdjb21wbGV0ZWQnLCBhZ2VudEN0eCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkT3V0cHV0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gRmlyZSAnZXJyb3JlZCcgZXZlbnRcbiAgICAgICAgICAgIGF3YWl0IGZpcmVBZ2VudEV2ZW50KHJ1bnRpbWUsIGFnZW50LCAnZXJyb3JlZCcsIGFnZW50Q3R4LCBlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gQ3JlYXRlIGNyZWF0ZUV2YWwgbWV0aG9kIHRoYXQgaW5mZXJzIHR5cGVzIGZyb20gYWdlbnQgYW5kIGF1dG9tYXRpY2FsbHkgYWRkcyB0byBhZ2VudFxuICAgIGNvbnN0IGNyZWF0ZUV2YWwgPSAoKGV2YWxOYW1lT3JDb25maWcsIGV2YWxDb25maWcpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIHByZXNldCBldmFsIGNvbmZpZyAoc2luZ2xlIGFyZ3VtZW50IHdpdGggbmFtZSBwcm9wZXJ0eSlcbiAgICAgICAgaWYgKHR5cGVvZiBldmFsTmFtZU9yQ29uZmlnICE9PSAnc3RyaW5nJyAmJiAnbmFtZScgaW4gZXZhbE5hbWVPckNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgcHJlc2V0Q29uZmlnID0gZXZhbE5hbWVPckNvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IGV2YWxOYW1lID0gcHJlc2V0Q29uZmlnLm5hbWU7XG4gICAgICAgICAgICBpbnRlcm5hbC5kZWJ1ZyhgY3JlYXRlRXZhbCBjYWxsZWQgZm9yIGFnZW50IFwiJHtuYW1lIHx8ICd1bmtub3duJ31cIjogcmVnaXN0ZXJpbmcgcHJlc2V0IGV2YWwgXCIke2V2YWxOYW1lfVwiYCk7XG4gICAgICAgICAgICBjb25zdCBldmFsVHlwZSA9IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBldmFsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZXZhbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcmVzZXRDb25maWcuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBwcmVzZXRDb25maWcuaGFuZGxlcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBldmFsVHlwZS5pbnB1dFNjaGVtYSA9IGlucHV0U2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG91dHB1dFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGV2YWxUeXBlLm91dHB1dFNjaGVtYSA9IG91dHB1dFNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2YWxzQXJyYXkucHVzaChldmFsVHlwZSk7XG4gICAgICAgICAgICBpbnRlcm5hbC5kZWJ1ZyhgQWRkZWQgcHJlc2V0IGV2YWwgXCIke2V2YWxOYW1lfVwiIHRvIGFnZW50IFwiJHtuYW1lIHx8ICd1bmtub3duJ31cIi4gVG90YWwgZXZhbHM6ICR7ZXZhbHNBcnJheS5sZW5ndGh9YCk7XG4gICAgICAgICAgICByZXR1cm4gZXZhbFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIGN1c3RvbSBldmFsIGNvbmZpZyAobmFtZSArIGNvbmZpZylcbiAgICAgICAgaWYgKHR5cGVvZiBldmFsTmFtZU9yQ29uZmlnICE9PSAnc3RyaW5nJyB8fCAhZXZhbENvbmZpZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50czogZXhwZWN0ZWQgKG5hbWU6IHN0cmluZywgY29uZmlnKSBvciAoY29uZmlnOiBQcmVzZXRFdmFsQ29uZmlnKScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2YWxOYW1lID0gZXZhbE5hbWVPckNvbmZpZztcbiAgICAgICAgLy8gVHJhY2UgbG9nIHRvIHZlcmlmeSBldmFscyBmaWxlIGlzIGltcG9ydGVkXG4gICAgICAgIGludGVybmFsLmRlYnVnKGBjcmVhdGVFdmFsIGNhbGxlZCBmb3IgYWdlbnQgXCIke25hbWUgfHwgJ3Vua25vd24nfVwiOiByZWdpc3RlcmluZyBldmFsIFwiJHtldmFsTmFtZX1cImApO1xuICAgICAgICAvLyBVc2UgYnVpbGQtdGltZSBpbmplY3RlZCBtZXRhZGF0YSBpZiBhdmFpbGFibGUgKHNhbWUgcGF0dGVybiBhcyBhZ2VudHMpXG4gICAgICAgIGNvbnN0IGV2YWxNZXRhZGF0YSA9IGV2YWxDb25maWcubWV0YWRhdGEgfHwge307XG4gICAgICAgIC8vIEJ1aWxkIGV2YWwgbWV0YWRhdGEgLSBtZXJnZSBpbmplY3RlZCBtZXRhZGF0YSB3aXRoIGRlZmF1bHRzXG4gICAgICAgIGNvbnN0IGV2YWxUeXBlID0ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgYnVpbGQtdGltZSBpbmplY3RlZCBtZXRhZGF0YSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsYmFjayB0byBlbXB0eS91bmRlZmluZWRcbiAgICAgICAgICAgICAgICBpZDogZXZhbE1ldGFkYXRhLmlkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBldmFsTWV0YWRhdGEuaWRlbnRpZmllciB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZXZhbE1ldGFkYXRhLnZlcnNpb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBldmFsTWV0YWRhdGEuZmlsZW5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgbmFtZTogZXZhbE5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGV2YWxDb25maWcuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFuZGxlcjogZXZhbENvbmZpZy5oYW5kbGVyLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5wdXRTY2hlbWEpIHtcbiAgICAgICAgICAgIGV2YWxUeXBlLmlucHV0U2NoZW1hID0gaW5wdXRTY2hlbWE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dHB1dFNjaGVtYSkge1xuICAgICAgICAgICAgZXZhbFR5cGUub3V0cHV0U2NoZW1hID0gb3V0cHV0U2NoZW1hO1xuICAgICAgICB9XG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgYWRkIGV2YWwgdG8gYWdlbnQncyBldmFscyBhcnJheVxuICAgICAgICBldmFsc0FycmF5LnB1c2goZXZhbFR5cGUpO1xuICAgICAgICBpbnRlcm5hbC5kZWJ1ZyhgQWRkZWQgZXZhbCBcIiR7ZXZhbE5hbWV9XCIgdG8gYWdlbnQgXCIke25hbWUgfHwgJ3Vua25vd24nfVwiLiBUb3RhbCBldmFsczogJHtldmFsc0FycmF5Lmxlbmd0aH1gKTtcbiAgICAgICAgcmV0dXJuIGV2YWxUeXBlO1xuICAgIH0pO1xuICAgIC8vIEJ1aWxkIG1ldGFkYXRhIC0gbWVyZ2UgdXNlci1wcm92aWRlZCBtZXRhZGF0YSB3aXRoIGRlZmF1bHRzXG4gICAgLy8gVGhlIGJ1aWxkIHBsdWdpbiBpbmplY3RzIG1ldGFkYXRhIHZpYSBjb25maWcubWV0YWRhdGEgZHVyaW5nIEFTVCB0cmFuc2Zvcm1hdGlvblxuICAgIGxldCBtZXRhZGF0YSA9IHtcbiAgICAgICAgLy8gRGVmYXVsdHMgKHVzZWQgd2hlbiBydW5uaW5nIHdpdGhvdXQgYnVpbGQsIGUuZy4sIGRldiBtb2RlKVxuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogY29uZmlnLmRlc2NyaXB0aW9uLFxuICAgICAgICBpZDogJycsXG4gICAgICAgIGFnZW50SWQ6ICcnLFxuICAgICAgICBmaWxlbmFtZTogJycsXG4gICAgICAgIHZlcnNpb246ICcnLFxuICAgICAgICBpbnB1dFNjaGVtYUNvZGU6ICcnLFxuICAgICAgICBvdXRwdXRTY2hlbWFDb2RlOiAnJyxcbiAgICAgICAgLy8gTWVyZ2UgaW4gYnVpbGQtdGltZSBpbmplY3RlZCBtZXRhZGF0YSAob3ZlcnJpZGVzIGRlZmF1bHRzKVxuICAgICAgICAuLi5jb25maWcubWV0YWRhdGEsXG4gICAgfTtcbiAgICAvLyBJZiBpZC9hZ2VudElkIGFyZSBlbXB0eSwgdHJ5IHRvIGxvYWQgZnJvbSBhZ2VudHVpdHkubWV0YWRhdGEuanNvblxuICAgIGlmICghbWV0YWRhdGEuaWQgfHwgIW1ldGFkYXRhLmFnZW50SWQpIHtcbiAgICAgICAgY29uc3QgZmlsZU1ldGFkYXRhID0gZ2V0QWdlbnRNZXRhZGF0YUJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKGZpbGVNZXRhZGF0YSkge1xuICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW2FnZW50XSBsb2FkZWQgbWV0YWRhdGEgZm9yIFwiJXNcIiBmcm9tIGZpbGU6IGlkPSVzLCBhZ2VudElkPSVzJywgbmFtZSwgZmlsZU1ldGFkYXRhLmlkLCBmaWxlTWV0YWRhdGEuYWdlbnRJZCk7XG4gICAgICAgICAgICBtZXRhZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBpZDogZmlsZU1ldGFkYXRhLmlkIHx8IG1ldGFkYXRhLmlkLFxuICAgICAgICAgICAgICAgIGFnZW50SWQ6IGZpbGVNZXRhZGF0YS5hZ2VudElkIHx8IG1ldGFkYXRhLmFnZW50SWQsXG4gICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVNZXRhZGF0YS5maWxlbmFtZSB8fCBtZXRhZGF0YS5maWxlbmFtZSxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBmaWxlTWV0YWRhdGEudmVyc2lvbiB8fCBtZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBFcnJvciBpZiBhZ2VudCBoYXMgbm8gbWV0YWRhdGEgSURzIGluIHByb2R1Y3Rpb24gLSB0aGlzIGNhdXNlcyBhZ2VudF9pZHMgdG8gYmUgZW1wdHkgaW4gc2Vzc2lvbnNcbiAgICAvLyB3aGljaCBhZmZlY3RzIGFuYWx5dGljcywgYmlsbGluZyBhdHRyaWJ1dGlvbiwgYW5kIHNlc3Npb24gZmlsdGVyaW5nXG4gICAgLy8gT25seSBlbmZvcmNlIGluIHByb2R1Y3Rpb24gKHdoZW4gQUdFTlRVSVRZX0NMT1VEX1BST0pFQ1RfSUQgaXMgc2V0KSB0byBhbGxvdyBkZXYvdGVzdCB3aXRob3V0IG1ldGFkYXRhXG4gICAgaWYgKCFtZXRhZGF0YS5pZCAmJiAhbWV0YWRhdGEuYWdlbnRJZCAmJiBydW50aW1lQ29uZmlnLmdldFByb2plY3RJZCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQWdlbnQgXCIke25hbWV9XCIgaGFzIG5vIG1ldGFkYXRhIElEcyAoaWQgYW5kIGFnZW50SWQgYXJlIGVtcHR5KS4gYCArXG4gICAgICAgICAgICBgVGhpcyB3aWxsIHJlc3VsdCBpbiBlbXB0eSBhZ2VudF9pZHMgaW4gc2Vzc2lvbiBldmVudHMuIGAgK1xuICAgICAgICAgICAgYEVuc3VyZSBhZ2VudHVpdHkubWV0YWRhdGEuanNvbiBleGlzdHMgaW4gdGhlIHJ1bnRpbWUgZGlyZWN0b3J5IGAgK1xuICAgICAgICAgICAgYChjaGVja2VkOiAke3Byb2Nlc3MuY3dkKCl9L2FnZW50dWl0eS5tZXRhZGF0YS5qc29uIGFuZCAke3Byb2Nlc3MuY3dkKCl9Ly5hZ2VudHVpdHkvYWdlbnR1aXR5Lm1ldGFkYXRhLmpzb24pLiBgICtcbiAgICAgICAgICAgIGBSdW4gJ2FnZW50dWl0eSBidWlsZCcgdG8gZ2VuZXJhdGUgdGhlIG1ldGFkYXRhIGZpbGUuYCk7XG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0ge1xuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgZXZhbHM6IGV2YWxzQXJyYXksXG4gICAgICAgIGNyZWF0ZUV2YWwsXG4gICAgICAgIHNldHVwOiBjb25maWcuc2V0dXAsXG4gICAgICAgIHNodXRkb3duOiBjb25maWcuc2h1dGRvd24sXG4gICAgfTtcbiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgbWV0aG9kc1xuICAgIGFnZW50LmFkZEV2ZW50TGlzdGVuZXIgPSAoZXZlbnROYW1lLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBhZ2VudEZvckxpc3RlbmVycyA9IGFnZW50O1xuICAgICAgICBjb25zdCBjYWxsYmFja0Zvckxpc3RlbmVycyA9IGNhbGxiYWNrO1xuICAgICAgICBsZXQgbGlzdGVuZXJzID0gYWdlbnRFdmVudExpc3RlbmVycy5nZXQoYWdlbnRGb3JMaXN0ZW5lcnMpO1xuICAgICAgICBpZiAoIWxpc3RlbmVycykge1xuICAgICAgICAgICAgbGlzdGVuZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgYWdlbnRFdmVudExpc3RlbmVycy5zZXQoYWdlbnRGb3JMaXN0ZW5lcnMsIGxpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbGxiYWNrcyA9IGxpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBjYWxsYmFja3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrcy5hZGQoY2FsbGJhY2tGb3JMaXN0ZW5lcnMpO1xuICAgIH07XG4gICAgLy8gQXV0b21hdGljYWxseSBhZGQgZXZlbnQgbGlzdGVuZXIgZm9yICdjb21wbGV0ZWQnIGV2ZW50IHRvIHJ1biBldmFsc1xuICAgIGFnZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBsZXRlZCcsIGFzeW5jIChfZXZlbnQsIF9hZ2VudCwgY3R4KSA9PiB7XG4gICAgICAgIC8vIFVzZSB0aGUgYWdlbnQgaW5zdGFuY2UgcGFzc2VkIHRvIGV2ZW50IGxpc3RlbmVyIHRvIGFjY2VzcyBpdHMgZXZhbHMgYXJyYXlcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIGdldCBldmFscyB0aGF0IHdlcmUgYWRkZWQgdmlhIGFnZW50LmNyZWF0ZUV2YWwoKSBhZnRlciBhZ2VudCBjcmVhdGlvblxuICAgICAgICBjb25zdCBhZ2VudEV2YWxzID0gX2FnZW50Py5ldmFscyB8fCBldmFsc0FycmF5O1xuICAgICAgICBpbnRlcm5hbC5kZWJ1ZyhgQ2hlY2tpbmcgZXZhbHM6IGFnZW50PSR7X2FnZW50Lm1ldGFkYXRhPy5uYW1lfSwgZXZhbHNBcnJheS5sZW5ndGg9JHtldmFsc0FycmF5Py5sZW5ndGggfHwgMH0sIGFnZW50LmV2YWxzLmxlbmd0aD0ke19hZ2VudD8uZXZhbHM/Lmxlbmd0aCB8fCAwfWApO1xuICAgICAgICBpZiAoYWdlbnRFdmFscyAmJiBhZ2VudEV2YWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGludGVybmFsLmluZm8oYEV4ZWN1dGluZyAke2FnZW50RXZhbHMubGVuZ3RofSBldmFsKHMpIGFmdGVyIGFnZW50IHJ1bmApO1xuICAgICAgICAgICAgLy8gR2V0IHZhbGlkYXRlZCBpbnB1dC9vdXRwdXQgZnJvbSBjb250ZXh0IHN0YXRlXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRJbnB1dCA9IGN0eC5zdGF0ZS5nZXQoJ19ldmFsSW5wdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZE91dHB1dCA9IGN0eC5zdGF0ZS5nZXQoJ19ldmFsT3V0cHV0Jyk7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGFnZW50UnVuU3BhbklkIHN5bmNocm9ub3VzbHkgYmVmb3JlIHdhaXRVbnRpbCAod2hpY2ggbWF5IHJ1biBvdXRzaWRlIEFzeW5jTG9jYWxTdG9yYWdlKVxuICAgICAgICAgICAgbGV0IGFnZW50UnVuU3BhbklkO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBodHRwQ3R4ID0gZ2V0SFRUUENvbnRleHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfaHR0cEN0eCA9IHByaXZhdGVDb250ZXh0KGh0dHBDdHgpO1xuICAgICAgICAgICAgICAgIGFnZW50UnVuU3BhbklkID0gX2h0dHBDdHgudmFyLmFnZW50UnVuU3BhbklkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIEhUVFAgY29udGV4dCBtYXkgbm90IGJlIGF2YWlsYWJsZSwgc3BhbklkIHdpbGwgYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFeGVjdXRlIGVhY2ggZXZhbCB1c2luZyB3YWl0VW50aWwgdG8gYXZvaWQgYmxvY2tpbmcgdGhlIHJlc3BvbnNlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2YWxJdGVtIG9mIGFnZW50RXZhbHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmFsTmFtZSA9IGV2YWxJdGVtLm1ldGFkYXRhLm5hbWUgfHwgJ3VubmFtZWQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZW50TmFtZSA9IF9hZ2VudD8ubWV0YWRhdGE/Lm5hbWUgfHwgbmFtZTtcbiAgICAgICAgICAgICAgICBjdHgud2FpdFVudGlsKChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oYFtFVkFMUlVOXSBTdGFydGluZyBldmFsIHJ1biB0cmFja2luZyBmb3IgJyR7ZXZhbE5hbWV9J2ApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmFsUnVuSWQgPSBnZW5lcmF0ZUlkKCdldmFscnVuJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgZXZhbCBtZXRhZGF0YSBmcm9tIGFnZW50dWl0eS5tZXRhZGF0YS5qc29uIGJ5IGFnZW50IG5hbWUgYW5kIGV2YWwgbmFtZVxuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbRVZBTFJVTl0gTG9va2luZyB1cCBldmFsIG1ldGFkYXRhOiBhZ2VudE5hbWU9JyR7YWdlbnROYW1lfScsIGV2YWxOYW1lPScke2V2YWxOYW1lfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZhbE1ldGEgPSBnZXRFdmFsTWV0YWRhdGEoYWdlbnROYW1lLCBldmFsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oYFtFVkFMUlVOXSBFdmFsIG1ldGFkYXRhIGxvb2t1cCByZXN1bHQ6YCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ6ICEhZXZhbE1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBldmFsTWV0YT8uaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBldmFsTWV0YT8uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogZXZhbE1ldGE/LmZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZhbElkID0gZGVwbG95bWVudC1zcGVjaWZpYyBJRCAoZXZhbGlkXy4uLiksIGV2YWxJZGVudGlmaWVyID0gc3RhYmxlIChldmFsXy4uLilcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZhbElkID0gZXZhbE1ldGE/LmlkIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmFsSWRlbnRpZmllciA9IGV2YWxNZXRhPy5pZGVudGlmaWVyIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbRVZBTFJVTl0gUmVzb2x2ZWQgZXZhbElkPScke2V2YWxJZH0nLCBldmFsSWRlbnRpZmllcj0nJHtldmFsSWRlbnRpZmllcn0nYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIExvZyBldmFsIG1ldGFkYXRhIHVzaW5nIHN0cnVjdHVyZWQgbG9nZ2luZyBhbmQgdHJhY2luZ1xuICAgICAgICAgICAgICAgICAgICBjdHgubG9nZ2VyLmRlYnVnKCdTdGFydGluZyBldmFsIHJ1biB3aXRoIG1ldGFkYXRhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZ2VudE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsUnVuSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsTWV0YUZyb21GaWxlOiAhIWV2YWxNZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE1ldGFkYXRhOiBldmFsSXRlbS5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBldmFsIG1ldGFkYXRhIHRvIHRoZSBhY3RpdmUgc3BhbiBmb3Igb2JzZXJ2YWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVTcGFuID0gY3R4LnRyYWNlciA/IHRyYWNlLmdldEFjdGl2ZVNwYW4oKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWwubmFtZSc6IGV2YWxOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsLmlkJzogZXZhbElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsLnJ1bklkJzogZXZhbFJ1bklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsLmRlc2NyaXB0aW9uJzogZXZhbE1ldGE/LmRlc2NyaXB0aW9uIHx8IGV2YWxJdGVtLm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsLmZpbGVuYW1lJzogZXZhbE1ldGE/LmZpbGVuYW1lIHx8IGV2YWxJdGVtLm1ldGFkYXRhLmZpbGVuYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JnSWQgPSBydW50aW1lQ29uZmlnLmdldE9yZ2FuaXphdGlvbklkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2plY3RJZCA9IHJ1bnRpbWVDb25maWcuZ2V0UHJvamVjdElkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldk1vZGUgPSBydW50aW1lQ29uZmlnLmlzRGV2TW9kZSgpID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmFsUnVuRXZlbnRQcm92aWRlciA9IGdldEV2YWxSdW5FdmVudFByb3ZpZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgc2VuZCBldmVudHMgaWYgd2UgaGF2ZSByZXF1aXJlZCBjb250ZXh0IChkZXZtb2RlIGZsYWcgd2lsbCBiZSBzZXQgYmFzZWQgb24gZGV2TW9kZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2VuZEV2YWxSdW5FdmVudHMgPSBvcmdJZCAmJiBwcm9qZWN0SWQgJiYgZXZhbElkICE9PSAnJyAmJiBldmFsSWRlbnRpZmllciAhPT0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oYFtFVkFMUlVOXSBDaGVja2luZyBjb25kaXRpb25zIGZvciBldmFsICcke2V2YWxOYW1lfSc6YCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JnSWQ6IG9yZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsSWQ6IGV2YWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxJZGVudGlmaWVyOiBldmFsSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldk1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFdmFsUnVuRXZlbnRQcm92aWRlcjogISFldmFsUnVuRXZlbnRQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNlbmRFdmFsUnVuRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRTZW5kRXZhbFJ1bkV2ZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhc29ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcmdJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLnB1c2goJ21pc3Npbmcgb3JnSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvamVjdElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMucHVzaCgnbWlzc2luZyBwcm9qZWN0SWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZhbElkIHx8IGV2YWxJZCA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5wdXNoKCdlbXB0eSBldmFsSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZhbElkZW50aWZpZXIgfHwgZXZhbElkZW50aWZpZXIgPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMucHVzaCgnZW1wdHkgZXZhbElkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oYFtFVkFMUlVOXSBTa2lwcGluZyBldmFsIHJ1biBldmVudHMgZm9yICcke2V2YWxOYW1lfSc6ICR7cmVhc29ucy5qb2luKCcsICcpfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5kZWJ1ZyhgRXhlY3V0aW5nIGV2YWw6ICR7ZXZhbE5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIGV2YWwgcnVuIHN0YXJ0IGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2VuZEV2YWxSdW5FdmVudHMgJiYgZXZhbFJ1bkV2ZW50UHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbRVZBTFJVTl0gU2VuZGluZyBzdGFydCBldmVudCBmb3IgZXZhbCAnJHtldmFsTmFtZX0nIChpZDogJHtldmFsUnVuSWR9LCBldmFsSWQ6ICR7ZXZhbElkfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXBsb3ltZW50SWQgPSBydW50aW1lQ29uZmlnLmdldERlcGxveW1lbnRJZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgY2FwdHVyZWQgYWdlbnRSdW5TcGFuSWQgKG1heSBiZSB1bmRlZmluZWQgaWYgSFRUUCBjb250ZXh0IHVuYXZhaWxhYmxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFnZW50UnVuU3BhbklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC53YXJuKGBbRVZBTFJVTl0gYWdlbnRSdW5TcGFuSWQgbm90IGF2YWlsYWJsZSBmb3IgZXZhbCAnJHtldmFsTmFtZX0nIChpZDogJHtldmFsUnVuSWR9KS4gVGhpcyBtYXkgb2NjdXIgaWYgd2FpdFVudGlsIHJ1bnMgb3V0c2lkZSBBc3luY0xvY2FsU3RvcmFnZSBjb250ZXh0LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZhbFJ1bklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBjdHguc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbElkOiBldmFsSWQsIC8vIGRlcGxveW1lbnQtc3BlY2lmaWMgSUQgKGV2YWxpZF8uLi4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsSWRlbnRpZmllcjogZXZhbElkZW50aWZpZXIsIC8vIHN0YWJsZSBpZGVudGlmaWVyIChldmFsXy4uLilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ0lkOiBvcmdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2bW9kZTogQm9vbGVhbihkZXZNb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnRJZDogZGVwbG95bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JZDogYWdlbnRSdW5TcGFuSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmRlYnVnKCdbRVZBTFJVTl0gU3RhcnQgZXZlbnQgcGF5bG9hZDogJXMnLCBKU09OLnN0cmluZ2lmeShzdGFydEV2ZW50LCBudWxsLCAyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2YWxSdW5FdmVudFByb3ZpZGVyLnN0YXJ0KHN0YXJ0RXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbRVZBTFJVTl0gU3RhcnQgZXZlbnQgc2VudCBzdWNjZXNzZnVsbHkgZm9yIGV2YWwgJyR7ZXZhbE5hbWV9JyAoaWQ6ICR7ZXZhbFJ1bklkfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmVycm9yKGBbRVZBTFJVTl0gRXJyb3Igc2VuZGluZyBldmFsIHJ1biBzdGFydCBldmVudCBmb3IgJyR7ZXZhbE5hbWV9JyAoaWQ6ICR7ZXZhbFJ1bklkfSlgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHRocm93IC0gY29udGludWUgd2l0aCBldmFsIGV4ZWN1dGlvbiBldmVuIGlmIHN0YXJ0IGV2ZW50IGZhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hvdWxkU2VuZEV2YWxSdW5FdmVudHMgJiYgIWV2YWxSdW5FdmVudFByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwud2FybihgW0VWQUxSVU5dIENvbmRpdGlvbnMgbWV0IGJ1dCBubyBldmFsUnVuRXZlbnRQcm92aWRlciBhdmFpbGFibGUgZm9yICcke2V2YWxOYW1lfSdgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmRlYnVnKGBbRVZBTFJVTl0gTm90IHNlbmRpbmcgc3RhcnQgZXZlbnQgZm9yICcke2V2YWxOYW1lfSc6IHNob3VsZFNlbmRFdmFsUnVuRXZlbnRzPSR7c2hvdWxkU2VuZEV2YWxSdW5FdmVudHN9LCBoYXNQcm92aWRlcj0keyEhZXZhbFJ1bkV2ZW50UHJvdmlkZXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBldmFsIGlucHV0IGlmIHNjaGVtYSBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmFsVmFsaWRhdGVkSW5wdXQgPSB2YWxpZGF0ZWRJbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmFsSXRlbS5pbnB1dFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2YWxJbnB1dFJlc3VsdCA9IGF3YWl0IGV2YWxJdGVtLmlucHV0U2NoZW1hWyd+c3RhbmRhcmQnXS52YWxpZGF0ZSh2YWxpZGF0ZWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2YWxJbnB1dFJlc3VsdC5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGV2YWxJbnB1dFJlc3VsdC5pc3N1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRXZhbCBpbnB1dCB2YWxpZGF0aW9uIGZhaWxlZDogJHtldmFsSW5wdXRSZXN1bHQuaXNzdWVzLm1hcCgoaSkgPT4gaS5tZXNzYWdlKS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsVmFsaWRhdGVkSW5wdXQgPSBldmFsSW5wdXRSZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBldmFsIG91dHB1dCBpZiBzY2hlbWEgZXhpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXZhbFZhbGlkYXRlZE91dHB1dCA9IHZhbGlkYXRlZE91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmFsSXRlbS5vdXRwdXRTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBldmFsT3V0cHV0UmVzdWx0ID0gYXdhaXQgZXZhbEl0ZW0ub3V0cHV0U2NoZW1hWyd+c3RhbmRhcmQnXS52YWxpZGF0ZSh2YWxpZGF0ZWRPdXRwdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmFsT3V0cHV0UmVzdWx0Lmlzc3Vlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogZXZhbE91dHB1dFJlc3VsdC5pc3N1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRXZhbCBvdXRwdXQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZXZhbE91dHB1dFJlc3VsdC5pc3N1ZXMubWFwKChpKSA9PiBpLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxWYWxpZGF0ZWRPdXRwdXQgPSBldmFsT3V0cHV0UmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIEV2YWxDb250ZXh0IChqdXN0IGFuIGFsaWFzIGZvciBBZ2VudENvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBldmFsQ29udGV4dCA9IGN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGV2YWwgaGFuZGxlciBjb25kaXRpb25hbGx5IGJhc2VkIG9uIGFnZW50IHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhbmRsZXJSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEgJiYgb3V0cHV0U2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm90aCBpbnB1dCBhbmQgb3V0cHV0IGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gYXdhaXQgZXZhbEl0ZW0uaGFuZGxlcihldmFsQ29udGV4dCwgZXZhbFZhbGlkYXRlZElucHV0LCBldmFsVmFsaWRhdGVkT3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0U2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBpbnB1dCBkZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGF3YWl0IGV2YWxJdGVtLmhhbmRsZXIoZXZhbENvbnRleHQsIGV2YWxWYWxpZGF0ZWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRwdXRTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG91dHB1dCBkZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGF3YWl0IGV2YWxJdGVtLmhhbmRsZXIoZXZhbENvbnRleHQsIGV2YWxWYWxpZGF0ZWRPdXRwdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVpdGhlciBkZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGF3YWl0IGV2YWxJdGVtLmhhbmRsZXIoZXZhbENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHJlc3VsdCB3aXRoIHN1Y2Nlc3MgZm9yIGNhdGFseXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5oYW5kbGVyUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZyB0aGUgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnNjb3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBFdmFsICcke2V2YWxOYW1lfScgcGFzczogJHtyZXN1bHQucGFzc2VkfSwgc2NvcmU6ICR7cmVzdWx0LnNjb3JlfWAsIHJlc3VsdC5tZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBFdmFsICcke2V2YWxOYW1lfScgcGFzczogJHtyZXN1bHQucGFzc2VkfWAsIHJlc3VsdC5tZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIGV2YWwgcnVuIGNvbXBsZXRlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2VuZEV2YWxSdW5FdmVudHMgJiYgZXZhbFJ1bkV2ZW50UHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbRVZBTFJVTl0gU2VuZGluZyBjb21wbGV0ZSBldmVudCBmb3IgZXZhbCAnJHtldmFsTmFtZX0nIChpZDogJHtldmFsUnVuSWR9KWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2YWxSdW5FdmVudFByb3ZpZGVyLmNvbXBsZXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBldmFsUnVuSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKGBbRVZBTFJVTl0gQ29tcGxldGUgZXZlbnQgc2VudCBzdWNjZXNzZnVsbHkgZm9yIGV2YWwgJyR7ZXZhbE5hbWV9JyAoaWQ6ICR7ZXZhbFJ1bklkfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmVycm9yKGBbRVZBTFJVTl0gRXJyb3Igc2VuZGluZyBldmFsIHJ1biBjb21wbGV0ZSBldmVudCBmb3IgJyR7ZXZhbE5hbWV9JyAoaWQ6ICR7ZXZhbFJ1bklkfSlgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuZGVidWcoYEV2YWwgJyR7ZXZhbE5hbWV9JyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5lcnJvcihgRXJyb3IgZXhlY3V0aW5nIGV2YWwgJyR7ZXZhbE5hbWV9J2AsIHsgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIGV2YWwgcnVuIGNvbXBsZXRlIGV2ZW50IHdpdGggZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTZW5kRXZhbFJ1bkV2ZW50cyAmJiBldmFsUnVuRXZlbnRQcm92aWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oYFtFVkFMUlVOXSBTZW5kaW5nIGNvbXBsZXRlIGV2ZW50IChlcnJvcikgZm9yIGV2YWwgJyR7ZXZhbE5hbWV9JyAoaWQ6ICR7ZXZhbFJ1bklkfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmFsUnVuRXZlbnRQcm92aWRlci5jb21wbGV0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZhbFJ1bklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbyhgW0VWQUxSVU5dIENvbXBsZXRlIGV2ZW50IChlcnJvcikgc2VudCBzdWNjZXNzZnVsbHkgZm9yIGV2YWwgJyR7ZXZhbE5hbWV9JyAoaWQ6ICR7ZXZhbFJ1bklkfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV2ZW50RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuZXJyb3IoYFtFVkFMUlVOXSBFcnJvciBzZW5kaW5nIGV2YWwgcnVuIGNvbXBsZXRlIGV2ZW50IChlcnJvcikgZm9yICcke2V2YWxOYW1lfScgKGlkOiAke2V2YWxSdW5JZH0pYCwgeyBlcnJvcjogZXZlbnRFcnJvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGFnZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPSAoZXZlbnROYW1lLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBhZ2VudEZvckxpc3RlbmVycyA9IGFnZW50O1xuICAgICAgICBjb25zdCBjYWxsYmFja0Zvckxpc3RlbmVycyA9IGNhbGxiYWNrO1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBhZ2VudEV2ZW50TGlzdGVuZXJzLmdldChhZ2VudEZvckxpc3RlbmVycyk7XG4gICAgICAgIGlmICghbGlzdGVuZXJzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSBsaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmICghY2FsbGJhY2tzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrRm9yTGlzdGVuZXJzKTtcbiAgICB9O1xuICAgIGlmIChpbnB1dFNjaGVtYSkge1xuICAgICAgICBhZ2VudC5pbnB1dFNjaGVtYSA9IGlucHV0U2NoZW1hO1xuICAgIH1cbiAgICBpZiAob3V0cHV0U2NoZW1hKSB7XG4gICAgICAgIGFnZW50Lm91dHB1dFNjaGVtYSA9IG91dHB1dFNjaGVtYTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5zY2hlbWE/LnN0cmVhbSkge1xuICAgICAgICBhZ2VudC5zdHJlYW0gPSBjb25maWcuc2NoZW1hLnN0cmVhbTtcbiAgICB9XG4gICAgLy8gQWRkIHZhbGlkYXRvciBtZXRob2Qgd2l0aCBvdmVybG9hZHNcbiAgICBhZ2VudC52YWxpZGF0b3IgPSAoKG92ZXJyaWRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUlucHV0U2NoZW1hID0gb3ZlcnJpZGU/LmlucHV0ID8/IGlucHV0U2NoZW1hO1xuICAgICAgICAvLyBPbmx5IHVzZSBhZ2VudCdzIG91dHB1dCBzY2hlbWEgaWYgbm8gb3ZlcnJpZGUgd2FzIHByb3ZpZGVkIGF0IGFsbC5cbiAgICAgICAgLy8gSWYgb3ZlcnJpZGUgaXMgcHJvdmlkZWQgKGV2ZW4gd2l0aCBqdXN0IGlucHV0KSwgZG9uJ3QgYXV0by1hcHBseSBhZ2VudCdzIG91dHB1dCBzY2hlbWFcbiAgICAgICAgLy8gdW5sZXNzIHRoZSBvdmVycmlkZSBleHBsaWNpdGx5IGluY2x1ZGVzIG91dHB1dC5cbiAgICAgICAgY29uc3QgZWZmZWN0aXZlT3V0cHV0U2NoZW1hID0gb3ZlcnJpZGUgPyBvdmVycmlkZS5vdXRwdXQgOiBvdXRwdXRTY2hlbWE7XG4gICAgICAgIC8vIEhlbHBlciB0byBidWlsZCB0aGUgc3RhbmRhcmQgSG9ubyBpbnB1dCB2YWxpZGF0b3Igc28gdHlwZXMgZmxvd1xuICAgICAgICBjb25zdCBidWlsZElucHV0VmFsaWRhdG9yID0gKHNjaGVtYSkgPT4gdmFsaWRhdG9yKCdqc29uJywgYXN5bmMgKHZhbHVlLCBjKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5qc29uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAnVmFsaWRhdGlvbiBmYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0VmFsaWRhdGlvbklzc3VlcyhyZXN1bHQuaXNzdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogcmVzdWx0Lmlzc3VlcyxcbiAgICAgICAgICAgICAgICAgICAgfSwgNDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgbm8gb3V0cHV0IHNjaGVtYSwgcHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3I6IHB1cmUgaW5wdXQgdmFsaWRhdGlvblxuICAgICAgICBpZiAoIWVmZmVjdGl2ZU91dHB1dFNjaGVtYSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkSW5wdXRWYWxpZGF0b3IoZWZmZWN0aXZlSW5wdXRTY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE91dHB1dCB2YWxpZGF0aW9uIG1pZGRsZXdhcmUgKHJ1bnMgYWZ0ZXIgaGFuZGxlcilcbiAgICAgICAgY29uc3Qgb3V0cHV0VmFsaWRhdG9yID0gYXN5bmMgKGMsIG5leHQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IG5leHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGMucmVzO1xuICAgICAgICAgICAgaWYgKCFyZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gU2tpcCBvdXRwdXQgdmFsaWRhdGlvbiBmb3Igc3RyZWFtaW5nIGFnZW50c1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5zY2hlbWE/LnN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE9ubHkgdmFsaWRhdGUgSlNPTiByZXNwb25zZXNcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA/PyAnJztcbiAgICAgICAgICAgIGlmICghY29udGVudFR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xvbmUgc28gd2UgZG9uJ3QgY29uc3VtZSB0aGUgYm9keSB0aGF0IHdpbGwgYmUgc2VudFxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlQm9keTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVkID0gcmVzLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgY2xvbmVkLmpzb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRWYWxpZGF0aW9uRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ091dHB1dFZhbGlkYXRpb25FcnJvcicpKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE91dHB1dFZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdPdXRwdXQgdmFsaWRhdGlvbiBmYWlsZWQ6IHJlc3BvbnNlIGlzIG5vdCB2YWxpZCBKU09OJyxcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlU2NoZW1hKGVmZmVjdGl2ZU91dHB1dFNjaGVtYSwgcmVzcG9uc2VCb2R5KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRWYWxpZGF0aW9uRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ091dHB1dFZhbGlkYXRpb25FcnJvcicpKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE91dHB1dFZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBPdXRwdXQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7Zm9ybWF0VmFsaWRhdGlvbklzc3VlcyhyZXN1bHQuaXNzdWVzKX1gLFxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5pc3N1ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZXBsYWNlIHJlc3BvbnNlIHdpdGggdmFsaWRhdGVkL3Nhbml0aXplZCBKU09OXG4gICAgICAgICAgICBjLnJlcyA9IG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShyZXN1bHQuZGF0YSksIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBpbnB1dCBzY2hlbWEsIHdlIG9ubHkgZG8gb3V0cHV0IHZhbGlkYXRpb25cbiAgICAgICAgaWYgKCFlZmZlY3RpdmVJbnB1dFNjaGVtYSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dFZhbGlkYXRvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb21wb3NlOiBpbnB1dCB2YWxpZGF0b3Ig4oaSIG91dHB1dCB2YWxpZGF0b3JcbiAgICAgICAgY29uc3QgaW5wdXRNaWRkbGV3YXJlID0gYnVpbGRJbnB1dFZhbGlkYXRvcihlZmZlY3RpdmVJbnB1dFNjaGVtYSk7XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkID0gYXN5bmMgKGMsIG5leHQpID0+IHtcbiAgICAgICAgICAgIC8vIFJ1biB0aGUgdmFsaWRhdG9yIGZpcnN0OyBpdHMgbmV4dCgpIHJ1bnMgdGhlIG91dHB1dCB2YWxpZGF0b3IsXG4gICAgICAgICAgICAvLyB3aG9zZSBuZXh0KCkgcnVucyB0aGUgYWN0dWFsIGhhbmRsZXIocylcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGlucHV0TWlkZGxld2FyZShjLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgb3V0cHV0VmFsaWRhdG9yKGMsIG5leHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiBpbnB1dE1pZGRsZXdhcmUgcmV0dXJuZWQgZWFybHkgKHZhbGlkYXRpb24gZmFpbGVkKSwgcmV0dXJuIHRoYXQgcmVzcG9uc2VcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjb21wb3NlZDtcbiAgICB9KTtcbiAgICAvLyBSZWdpc3RlciB0aGUgYWdlbnQgZm9yIHJ1bnRpbWUgdXNlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG1ldGFkYXRhIG1pZ2h0IGJlIGluY29tcGxldGUgdW50aWwgYnVpbGQgcGx1Z2luIGluamVjdHMgSW50ZXJuYWxBZ2VudE1ldGFkYXRhXG4gICAgYWdlbnRzLnNldChuYW1lLCBhZ2VudCk7XG4gICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gQWdlbnRSdW5uZXJcbiAgICBjb25zdCBydW5uZXIgPSB7XG4gICAgICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICAgICAgdmFsaWRhdG9yOiBhZ2VudC52YWxpZGF0b3IsXG4gICAgICAgIGlucHV0U2NoZW1hOiBpbnB1dFNjaGVtYSxcbiAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWEsXG4gICAgICAgIHN0cmVhbTogY29uZmlnLnNjaGVtYT8uc3RyZWFtIHx8IGZhbHNlLFxuICAgICAgICBjcmVhdGVFdmFsLFxuICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBhZ2VudC5hZGRFdmVudExpc3RlbmVyLFxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBhZ2VudC5yZW1vdmVFdmVudExpc3RlbmVyLFxuICAgICAgICBydW46IGlucHV0U2NoZW1hXG4gICAgICAgICAgICA/IGFzeW5jIChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBhZ2VudC5oYW5kbGVyKGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBhZ2VudC5oYW5kbGVyKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICBbSU5URVJOQUxfQUdFTlRdOiBhZ2VudCwgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIGludGVybmFsIGFnZW50IGZvciB0ZXN0aW5nXG4gICAgfTtcbiAgICByZXR1cm4gcnVubmVyO1xufVxuY29uc3QgcnVuV2l0aFNwYW4gPSBhc3luYyAodHJhY2VyLCBhZ2VudCwgY3R4LCBoYW5kbGVyKSA9PiB7XG4gICAgY29uc3QgY3VycmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKCdhZ2VudC5ydW4nLCB7fSwgY3VycmVudENvbnRleHQpO1xuICAgIC8vIFNldCBhZ2VudCBhdHRyaWJ1dGVzIG9uIHRoZSBzcGFuIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW9uXG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgJ0BhZ2VudHVpdHkvYWdlbnRJZCc6IGFnZW50Lm1ldGFkYXRhLmlkLFxuICAgICAgICAnQGFnZW50dWl0eS9hZ2VudEluc3RhbmNlSWQnOiBhZ2VudC5tZXRhZGF0YS5hZ2VudElkLFxuICAgICAgICAnQGFnZW50dWl0eS9hZ2VudERlc2NyaXB0aW9uJzogYWdlbnQubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICdAYWdlbnR1aXR5L2FnZW50TmFtZSc6IGFnZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICdAYWdlbnR1aXR5L3RocmVhZElkJzogY3R4LnZhci50aHJlYWQuaWQsXG4gICAgfSk7XG4gICAgY29uc3Qgc3BhbklkID0gc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZDtcbiAgICAvLyBTdG9yZSBzcGFuIElEIGluIFByaXZhdGVWYXJpYWJsZXNcbiAgICBjb25zdCBfY3R4ID0gcHJpdmF0ZUNvbnRleHQoY3R4KTtcbiAgICBfY3R4LnNldCgnYWdlbnRSdW5TcGFuSWQnLCBzcGFuSWQpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gdHJhY2Uuc2V0U3BhbihjdXJyZW50Q29udGV4dCwgc3Bhbik7XG4gICAgICAgIHJldHVybiBhd2FpdCBjb250ZXh0LndpdGgoc3BhbkNvbnRleHQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxufTtcbmNvbnN0IGNyZWF0ZUFnZW50UnVubmVyID0gKGFnZW50LCBjdHgpID0+IHtcbiAgICBjb25zdCB0cmFjZXIgPSBjdHgudmFyLnRyYWNlcjtcbiAgICBpZiAoYWdlbnQuaW5wdXRTY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiBhZ2VudC5tZXRhZGF0YSxcbiAgICAgICAgICAgIHJ1bjogYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bldpdGhTcGFuKHRyYWNlciwgYWdlbnQsIGN0eCwgYXN5bmMgKCkgPT4gYXdhaXQgYWdlbnQuaGFuZGxlcihpbnB1dCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXRhZGF0YTogYWdlbnQubWV0YWRhdGEsXG4gICAgICAgICAgICBydW46IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuV2l0aFNwYW4odHJhY2VyLCBhZ2VudCwgY3R4LCBhc3luYyAoKSA9PiBhd2FpdCBhZ2VudC5oYW5kbGVyKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59O1xuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgYWdlbnRzIG9iamVjdCB3aXRoIGFsbCByZWdpc3RlcmVkIGFnZW50c1xuICogS2V5cyBhcmUgY29udmVydGVkIHRvIGNhbWVsQ2FzZSB0byBtYXRjaCB0aGUgZ2VuZXJhdGVkIFR5cGVTY3JpcHQgdHlwZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHBvcHVsYXRlQWdlbnRzUmVnaXN0cnkgPSAoY3R4KSA9PiB7XG4gICAgY29uc3QgYWdlbnRzT2JqID0ge307XG4gICAgLy8gVHJhY2sgb3duZXJzaGlwIG9mIGNhbWVsQ2FzZSBrZXlzIHRvIGRldGVjdCBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IHJhdyBuYW1lc1xuICAgIGNvbnN0IG93bmVyc2hpcE1hcCA9IG5ldyBNYXAoKTtcbiAgICAvLyBCdWlsZCBmbGF0IHJlZ2lzdHJ5IG9mIGFnZW50c1xuICAgIGZvciAoY29uc3QgW25hbWUsIGFnZW50Rm5dIG9mIGFnZW50cykge1xuICAgICAgICBjb25zdCBydW5uZXIgPSBjcmVhdGVBZ2VudFJ1bm5lcihhZ2VudEZuLCBjdHgpO1xuICAgICAgICBjb25zdCBrZXkgPSB0b0NhbWVsQ2FzZShuYW1lKTtcbiAgICAgICAgLy8gVmFsaWRhdGUga2V5IGlzIG5vbi1lbXB0eVxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgaW50ZXJuYWwud2FybihgQWdlbnQgbmFtZSBcIiR7bmFtZX1cIiBjb252ZXJ0cyB0byBlbXB0eSBjYW1lbENhc2Uga2V5LiBTa2lwcGluZy5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIERldGVjdCBjb2xsaXNpb24gb24ga2V5IC0gY2hlY2sgb3duZXJzaGlwXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nT3duZXIgPSBvd25lcnNoaXBNYXAuZ2V0KGtleSk7XG4gICAgICAgIGlmIChleGlzdGluZ093bmVyICYmIGV4aXN0aW5nT3duZXIgIT09IG5hbWUpIHtcbiAgICAgICAgICAgIGludGVybmFsLmVycm9yKGBBZ2VudCByZWdpc3RyeSBjb2xsaXNpb246IFwiJHtuYW1lfVwiIGNvbmZsaWN0cyB3aXRoIFwiJHtleGlzdGluZ093bmVyfVwiIChib3RoIG1hcCB0byBjYW1lbENhc2Uga2V5IFwiJHtrZXl9XCIpYCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFnZW50IHJlZ2lzdHJ5IGNvbGxpc2lvbiBkZXRlY3RlZCBmb3Iga2V5IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBhZ2VudHNPYmpba2V5XSA9IHJ1bm5lcjtcbiAgICAgICAgLy8gUmVjb3JkIG93bmVyc2hpcFxuICAgICAgICBvd25lcnNoaXBNYXAuc2V0KGtleSwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBhZ2VudHNPYmo7XG59O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFnZW50TWlkZGxld2FyZSA9IChhZ2VudE5hbWUpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICAvLyBQb3B1bGF0ZSBhZ2VudHMgb2JqZWN0IHdpdGggc3Ryb25nbHktdHlwZWQga2V5c1xuICAgICAgICBjb25zdCBhZ2VudHNPYmogPSBwb3B1bGF0ZUFnZW50c1JlZ2lzdHJ5KGN0eCk7XG4gICAgICAgIC8vIFRyYWNrIGFnZW50IElEIGZvciBzZXNzaW9uIHRlbGVtZXRyeVxuICAgICAgICBpZiAoYWdlbnROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2VudEtleSA9IHRvQ2FtZWxDYXNlKGFnZW50TmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhZ2VudCA9IGFnZW50c09ialthZ2VudEtleV07XG4gICAgICAgICAgICBjb25zdCBfY3R4ID0gcHJpdmF0ZUNvbnRleHQoY3R4KTtcbiAgICAgICAgICAgIC8vIHdlIGFkZCBib3RoIHNvIHRoYXQgeW91IGNhbiBxdWVyeSBieSBlaXRoZXJcbiAgICAgICAgICAgIGlmIChhZ2VudD8ubWV0YWRhdGE/LmlkKSB7XG4gICAgICAgICAgICAgICAgX2N0eC52YXIuYWdlbnRJZHMuYWRkKGFnZW50Lm1ldGFkYXRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZ2VudD8ubWV0YWRhdGE/LmFnZW50SWQpIHtcbiAgICAgICAgICAgICAgICBfY3R4LnZhci5hZ2VudElkcy5hZGQoYWdlbnQubWV0YWRhdGEuYWdlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3R4LnZhci5zZXNzaW9uSWQ7XG4gICAgICAgIGNvbnN0IHRocmVhZCA9IGN0eC52YXIudGhyZWFkO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gY3R4LnZhci5zZXNzaW9uO1xuICAgICAgICBjb25zdCBjb25maWcgPSBhZ2VudE5hbWUgPyBnZXRBZ2VudENvbmZpZyhhZ2VudE5hbWUpIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBhcHAgPSBjdHgudmFyLmFwcDtcbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIGFnZW50OiBhZ2VudHNPYmosXG4gICAgICAgICAgICBsb2dnZXI6IGN0eC52YXIubG9nZ2VyLFxuICAgICAgICAgICAgdHJhY2VyOiBjdHgudmFyLnRyYWNlcixcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHNlc3Npb24sXG4gICAgICAgICAgICB0aHJlYWQsXG4gICAgICAgICAgICBoYW5kbGVyOiBjdHgudmFyLndhaXRVbnRpbEhhbmRsZXIsXG4gICAgICAgICAgICBjb25maWc6IGNvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgIGFwcDogYXBwIHx8IHt9LFxuICAgICAgICAgICAgcnVudGltZTogZ2V0R2xvYmFsUnVudGltZVN0YXRlKCksXG4gICAgICAgICAgICBhdXRoOiBjdHgudmFyLmF1dGggPz8gbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNldHVwUmVxdWVzdEFnZW50Q29udGV4dChjdHgsIGFyZ3MsIG5leHQpO1xuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IGdldEFnZW50cyA9ICgpID0+IGFnZW50cztcbmV4cG9ydCBjb25zdCBydW5BZ2VudFNldHVwcyA9IGFzeW5jIChhcHBTdGF0ZSkgPT4ge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGFnZW50XSBvZiBhZ2VudHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChhZ2VudC5zZXR1cCkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgYWdlbnQuc2V0dXAoYXBwU3RhdGUpO1xuICAgICAgICAgICAgc2V0QWdlbnRDb25maWcobmFtZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBOb3RlOiBTZXJ2ZXIgcmVhZGluZXNzIGlzIG1hbmFnZWQgYnkgVml0ZSAoZGV2KSBvciBCdW4uc2VydmUgKHByb2QpXG59O1xuZXhwb3J0IGNvbnN0IHJ1bkFnZW50U2h1dGRvd25zID0gYXN5bmMgKGFwcFN0YXRlKSA9PiB7XG4gICAgY29uc3QgcnVudGltZSA9IGdldEdsb2JhbFJ1bnRpbWVTdGF0ZSgpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIGFnZW50XSBvZiBydW50aW1lLmFnZW50cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGFnZW50LnNodXRkb3duKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBydW50aW1lLmFnZW50Q29uZmlncy5nZXQobmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBhZ2VudC5zaHV0ZG93bihhcHBTdGF0ZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKipcbiAqIFJ1biBhbiBhZ2VudCB3aXRoaW4gYSBzcGVjaWZpYyBBZ2VudENvbnRleHQuXG4gKiBTZXRzIHVwIEFzeW5jTG9jYWxTdG9yYWdlIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQgYW5kIGV4ZWN1dGVzIHRoZSBhZ2VudC5cbiAqXG4gKiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gdGVzdCBhZ2VudHMgaW4gdW5pdCB0ZXN0cy4gSXQgYXV0b21hdGljYWxseTpcbiAqIC0gUmVnaXN0ZXJzIHRoZSBhZ2VudCBpbiB0aGUgcnVudGltZSBzdGF0ZSBzbyBldmVudCBsaXN0ZW5lcnMgZmlyZVxuICogLSBTZXRzIHVwIEFzeW5jTG9jYWxTdG9yYWdlIHNvIGdldEFnZW50Q29udGV4dCgpIHdvcmtzIGluc2lkZSB0aGUgYWdlbnRcbiAqIC0gSGFuZGxlcyBib3RoIGFnZW50cyB3aXRoIGlucHV0IGFuZCBhZ2VudHMgd2l0aG91dCBpbnB1dFxuICpcbiAqICoqVXNlIGNhc2VzOioqXG4gKiAtIFVuaXQgdGVzdGluZyBhZ2VudHMgd2l0aCBUZXN0QWdlbnRDb250ZXh0XG4gKiAtIFJ1bm5pbmcgYWdlbnRzIG91dHNpZGUgSFRUUCByZXF1ZXN0IGZsb3dcbiAqIC0gQ3VzdG9tIGFnZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudHNcbiAqIC0gVGVzdGluZyBldmVudCBsaXN0ZW5lcnMgYW5kIGV2YWx1YXRpb25zXG4gKlxuICogQHRlbXBsYXRlIFRJbnB1dCAtIFR5cGUgb2YgdGhlIGlucHV0IHBhcmFtZXRlclxuICogQHRlbXBsYXRlIFRPdXRwdXQgLSBUeXBlIG9mIHRoZSByZXR1cm4gdmFsdWVcbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIEFnZW50Q29udGV4dCB0byB1c2UgKHR5cGljYWxseSBUZXN0QWdlbnRDb250ZXh0IGluIHRlc3RzKVxuICogQHBhcmFtIGFnZW50IC0gVGhlIEFnZW50UnVubmVyIHRvIGV4ZWN1dGUgKHJldHVybmVkIGZyb20gY3JlYXRlQWdlbnQpXG4gKiBAcGFyYW0gaW5wdXQgLSBJbnB1dCBkYXRhIChyZXF1aXJlZCBpZiBhZ2VudCBoYXMgaW5wdXQgc2NoZW1hLCBvbWl0IG90aGVyd2lzZSlcbiAqXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgYWdlbnQncyBvdXRwdXRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgcnVuSW5BZ2VudENvbnRleHQsIFRlc3RBZ2VudENvbnRleHQgfSBmcm9tICdAYWdlbnR1aXR5L3J1bnRpbWUvdGVzdCc7XG4gKlxuICogdGVzdCgnZ3JlZXRpbmcgYWdlbnQnLCBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IGN0eCA9IG5ldyBUZXN0QWdlbnRDb250ZXh0KCk7XG4gKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkluQWdlbnRDb250ZXh0KGN0eCwgZ3JlZXRpbmdBZ2VudCwge1xuICogICAgIG5hbWU6ICdBbGljZScsXG4gKiAgICAgYWdlOiAzMFxuICogICB9KTtcbiAqICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnSGVsbG8sIEFsaWNlISBZb3UgYXJlIDMwIHllYXJzIG9sZC4nKTtcbiAqIH0pO1xuICpcbiAqIHRlc3QoJ25vLWlucHV0IGFnZW50JywgYXN5bmMgKCkgPT4ge1xuICogICBjb25zdCBjdHggPSBuZXcgVGVzdEFnZW50Q29udGV4dCgpO1xuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5JbkFnZW50Q29udGV4dChjdHgsIHN0YXR1c0FnZW50KTtcbiAqICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHN0YXR1czogJ29rJyB9KTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5JbkFnZW50Q29udGV4dChjdHgsIGFnZW50LCBpbnB1dCkge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBnZXRBZ2VudEFzeW5jTG9jYWxTdG9yYWdlKCk7XG4gICAgLy8gUmVnaXN0ZXIgYWdlbnQgaW4gcnVudGltZSBzdGF0ZSBzbyBldmVudHMgZmlyZSAobG9va3VwIGJ5IG1ldGFkYXRhLm5hbWUpXG4gICAgY29uc3QgYWdlbnROYW1lID0gYWdlbnQubWV0YWRhdGEubmFtZTtcbiAgICBjb25zdCBydW50aW1lID0gZ2V0QWdlbnRSdW50aW1lKGN0eCk7XG4gICAgLy8gR2V0IGludGVybmFsIGFnZW50IGZyb20gcnVubmVyIChzdG9yZWQgdmlhIHN5bWJvbCkgb3IgZ2xvYmFsIHJlZ2lzdHJ5XG4gICAgY29uc3QgaW50ZXJuYWxBZ2VudCA9IGFnZW50W0lOVEVSTkFMX0FHRU5UXSB8fCBhZ2VudHMuZ2V0KGFnZW50TmFtZSk7XG4gICAgaWYgKGludGVybmFsQWdlbnQgJiYgYWdlbnROYW1lKSB7XG4gICAgICAgIHJ1bnRpbWUuYWdlbnRzLnNldChhZ2VudE5hbWUsIGludGVybmFsQWdlbnQpO1xuICAgICAgICAvLyBDb3B5IGV2ZW50IGxpc3RlbmVycyBmcm9tIGdsb2JhbCB0byBjb250ZXh0IHJ1bnRpbWVcbiAgICAgICAgY29uc3QgZ2xvYmFsTGlzdGVuZXJzID0gYWdlbnRFdmVudExpc3RlbmVycy5nZXQoaW50ZXJuYWxBZ2VudCk7XG4gICAgICAgIGlmIChnbG9iYWxMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHJ1bnRpbWUuYWdlbnRFdmVudExpc3RlbmVycy5zZXQoaW50ZXJuYWxBZ2VudCwgZ2xvYmFsTGlzdGVuZXJzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RvcmFnZS5ydW4oY3R4LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYWdlbnQucnVuKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBhZ2VudC5ydW4oKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWdlbnQuanMubWFwIiwKICAgICIvKipcbiAqIENPUlMgdHJ1c3RlZCBvcmlnaW4gaGVscGVycyBmb3Igc2FtZS1vcmlnaW4gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBQcm92aWRlcyB0aGUgc2FtZSB0cnVzdGVkLW9yaWdpbiBsb2dpYyBhcyBAYWdlbnR1aXR5L2F1dGgsXG4gKiBhbGxvd2luZyBDT1JTIHRvIGJlIHJlc3RyaWN0ZWQgdG8gcGxhdGZvcm0tdHJ1c3RlZCBkb21haW5zLlxuICovXG4vKipcbiAqIFNhZmVseSBleHRyYWN0IG9yaWdpbiBmcm9tIGEgVVJMIHN0cmluZy5cbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBVUkwgaXMgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gc2FmZU9yaWdpbih1cmwpIHtcbiAgICBpZiAoIXVybClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmwpLm9yaWdpbjtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8qKlxuICogUGFyc2UgYW4gb3JpZ2luLWxpa2UgdmFsdWUgKFVSTCBvciBiYXJlIGRvbWFpbikgaW50byBhIG5vcm1hbGl6ZWQgb3JpZ2luLlxuICpcbiAqIC0gRnVsbCBVUkxzIChodHRwOi8vLi4uIG9yIGh0dHBzOi8vLi4uKSBhcmUgcGFyc2VkIGFzLWlzXG4gKiAtIEJhcmUgZG9tYWlucyAoZXhhbXBsZS5jb20pIGFyZSB0cmVhdGVkIGFzIGh0dHBzOi8vXG4gKiAtIEludmFsaWQgdmFsdWVzIHJldHVybiB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VPcmlnaW5MaWtlKHZhbHVlKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gSWYgaXQgbG9va3MgbGlrZSBhIFVSTCAoaGFzIGEgc2NoZW1lKSwgcGFyc2UgZGlyZWN0bHlcbiAgICBpZiAoL15bYS16QS1aXVthLXpBLVowLTkrLi1dKjpcXC9cXC8vLnRlc3QodHJpbW1lZCkpIHtcbiAgICAgICAgcmV0dXJuIHNhZmVPcmlnaW4odHJpbW1lZCk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgdHJlYXQgYXMgaG9zdFs6cG9ydF0gYW5kIGFzc3VtZSBodHRwc1xuICAgIHJldHVybiBzYWZlT3JpZ2luKGBodHRwczovLyR7dHJpbW1lZH1gKTtcbn1cbi8qKlxuICogQnVpbGQgdGhlIHN0YXRpYyB0cnVzdGVkIG9yaWdpbnMgc2V0IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIFJlYWRzIGZyb206XG4gKiAtIEFHRU5UVUlUWV9CQVNFX1VSTCAtIFRoZSBiYXNlIFVSTCBmb3IgdGhlIGRlcGxveW1lbnRcbiAqIC0gQUdFTlRVSVRZX0NMT1VEX0RPTUFJTlMgLSBQbGF0Zm9ybS1zZXQgZG9tYWlucyAoY29tbWEtc2VwYXJhdGVkKVxuICogLSBBVVRIX1RSVVNURURfRE9NQUlOUyAtIERldmVsb3Blci1zZXQgYWRkaXRpb25hbCBkb21haW5zIChjb21tYS1zZXBhcmF0ZWQpXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRW52VHJ1c3RlZE9yaWdpbnMoKSB7XG4gICAgY29uc3QgYWdlbnR1aXR5VVJMID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX0JBU0VfVVJMO1xuICAgIGNvbnN0IGNsb3VkRG9tYWlucyA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9DTE9VRF9ET01BSU5TO1xuICAgIGNvbnN0IGRldlRydXN0ZWREb21haW5zID0gcHJvY2Vzcy5lbnYuQVVUSF9UUlVTVEVEX0RPTUFJTlM7XG4gICAgY29uc3Qgb3JpZ2lucyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBhZ2VudHVpdHlPcmlnaW4gPSBzYWZlT3JpZ2luKGFnZW50dWl0eVVSTCk7XG4gICAgaWYgKGFnZW50dWl0eU9yaWdpbilcbiAgICAgICAgb3JpZ2lucy5hZGQoYWdlbnR1aXR5T3JpZ2luKTtcbiAgICAvLyBQbGF0Zm9ybS1zZXQgY2xvdWQgZG9tYWlucyAoZGVwbG95bWVudCwgcHJvamVjdCwgUFIsIGN1c3RvbSBkb21haW5zLCB0dW5uZWxzKVxuICAgIGlmIChjbG91ZERvbWFpbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByYXcgb2YgY2xvdWREb21haW5zLnNwbGl0KCcsJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHBhcnNlT3JpZ2luTGlrZShyYXcpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbilcbiAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChvcmlnaW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERldmVsb3Blci1zZXQgYWRkaXRpb25hbCB0cnVzdGVkIGRvbWFpbnNcbiAgICBpZiAoZGV2VHJ1c3RlZERvbWFpbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCByYXcgb2YgZGV2VHJ1c3RlZERvbWFpbnMuc3BsaXQoJywnKSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gcGFyc2VPcmlnaW5MaWtlKHJhdyk7XG4gICAgICAgICAgICBpZiAob3JpZ2luKVxuICAgICAgICAgICAgICAgIG9yaWdpbnMuYWRkKG9yaWdpbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbnM7XG59XG4vKipcbiAqIENyZWF0ZSBhIEhvbm8gQ09SUyBvcmlnaW4gY2FsbGJhY2sgdGhhdCBvbmx5IGFsbG93cyB0cnVzdGVkIG9yaWdpbnMuXG4gKlxuICogVHJ1c3RlZCBvcmlnaW5zIGFyZSBkZXJpdmVkIGZyb206XG4gKiAtIEFHRU5UVUlUWV9CQVNFX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogLSBBR0VOVFVJVFlfQ0xPVURfRE9NQUlOUyBlbnZpcm9ubWVudCB2YXJpYWJsZSAoY29tbWEtc2VwYXJhdGVkKVxuICogLSBBVVRIX1RSVVNURURfRE9NQUlOUyBlbnZpcm9ubWVudCB2YXJpYWJsZSAoY29tbWEtc2VwYXJhdGVkKVxuICogLSBUaGUgc2FtZS1vcmlnaW4gb2YgdGhlIGluY29taW5nIHJlcXVlc3QgVVJMXG4gKiAtIEFueSBhZGRpdGlvbmFsIG9yaWdpbnMgc3BlY2lmaWVkIGluIGFsbG93ZWRPcmlnaW5zIG9wdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIGNyZWF0ZVRydXN0ZWRDb3JzT3JpZ2luIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBjb3JzOiB7XG4gKiAgICAgb3JpZ2luOiBjcmVhdGVUcnVzdGVkQ29yc09yaWdpbih7XG4gKiAgICAgICBhbGxvd2VkT3JpZ2luczogWydodHRwczovL2FkbWluLm15YXBwLmNvbSddLFxuICogICAgIH0pLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRydXN0ZWRDb3JzT3JpZ2luKG9wdGlvbnMpIHtcbiAgICAvLyBCdWlsZCBzdGF0aWMgb3JpZ2lucyBmcm9tIGVudiB2YXJzIGF0IGNyZWF0aW9uIHRpbWVcbiAgICBjb25zdCBiYXNlT3JpZ2lucyA9IGJ1aWxkRW52VHJ1c3RlZE9yaWdpbnMoKTtcbiAgICAvLyBBZGQgYW55IGV4dHJhIG9yaWdpbnMgZnJvbSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnM/LmFsbG93ZWRPcmlnaW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmF3IG9mIG9wdGlvbnMuYWxsb3dlZE9yaWdpbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHBhcnNlT3JpZ2luTGlrZShyYXcpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbilcbiAgICAgICAgICAgICAgICBiYXNlT3JpZ2lucy5hZGQob3JpZ2luKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKG9yaWdpbiwgYykgPT4ge1xuICAgICAgICAvLyBCdWlsZCBhbGxvd2VkIHNldCBwZXItcmVxdWVzdCB0byBpbmNsdWRlIHNhbWUtb3JpZ2luIG9mIHRoZSBzZXJ2ZXJcbiAgICAgICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoYmFzZU9yaWdpbnMpO1xuICAgICAgICBjb25zdCByZXF1ZXN0T3JpZ2luID0gc2FmZU9yaWdpbihjLnJlcS51cmwpO1xuICAgICAgICBpZiAocmVxdWVzdE9yaWdpbilcbiAgICAgICAgICAgIGFsbG93ZWQuYWRkKHJlcXVlc3RPcmlnaW4pO1xuICAgICAgICAvLyBPbmx5IGVjaG8gYmFjayBpZiB0cnVzdGVkOyBvdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZCAobm8gQ09SUyBoZWFkZXIpXG4gICAgICAgIHJldHVybiBhbGxvd2VkLmhhcyhvcmlnaW4pID8gb3JpZ2luIDogdW5kZWZpbmVkO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3JzLmpzLm1hcCIsCiAgICAiLy8gc3JjL2hlbHBlci9mYWN0b3J5L2luZGV4LnRzXG5pbXBvcnQgeyBIb25vIH0gZnJvbSBcIi4uLy4uL2hvbm8uanNcIjtcbnZhciBGYWN0b3J5ID0gY2xhc3Mge1xuICBpbml0QXBwO1xuICAjZGVmYXVsdEFwcE9wdGlvbnM7XG4gIGNvbnN0cnVjdG9yKGluaXQpIHtcbiAgICB0aGlzLmluaXRBcHAgPSBpbml0Py5pbml0QXBwO1xuICAgIHRoaXMuI2RlZmF1bHRBcHBPcHRpb25zID0gaW5pdD8uZGVmYXVsdEFwcE9wdGlvbnM7XG4gIH1cbiAgY3JlYXRlQXBwID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBhcHAgPSBuZXcgSG9ubyhcbiAgICAgIG9wdGlvbnMgJiYgdGhpcy4jZGVmYXVsdEFwcE9wdGlvbnMgPyB7IC4uLnRoaXMuI2RlZmF1bHRBcHBPcHRpb25zLCAuLi5vcHRpb25zIH0gOiBvcHRpb25zID8/IHRoaXMuI2RlZmF1bHRBcHBPcHRpb25zXG4gICAgKTtcbiAgICBpZiAodGhpcy5pbml0QXBwKSB7XG4gICAgICB0aGlzLmluaXRBcHAoYXBwKTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcDtcbiAgfTtcbiAgY3JlYXRlTWlkZGxld2FyZSA9IChtaWRkbGV3YXJlKSA9PiBtaWRkbGV3YXJlO1xuICBjcmVhdGVIYW5kbGVycyA9ICguLi5oYW5kbGVycykgPT4ge1xuICAgIHJldHVybiBoYW5kbGVycy5maWx0ZXIoKGhhbmRsZXIpID0+IGhhbmRsZXIgIT09IHZvaWQgMCk7XG4gIH07XG59O1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAoaW5pdCkgPT4gbmV3IEZhY3RvcnkoaW5pdCk7XG52YXIgY3JlYXRlTWlkZGxld2FyZSA9IChtaWRkbGV3YXJlKSA9PiBtaWRkbGV3YXJlO1xuZXhwb3J0IHtcbiAgRmFjdG9yeSxcbiAgY3JlYXRlRmFjdG9yeSxcbiAgY3JlYXRlTWlkZGxld2FyZVxufTtcbiIsCiAgICAiLy8gc3JjL21pZGRsZXdhcmUvY29ycy9pbmRleC50c1xudmFyIGNvcnMgPSAob3B0aW9ucykgPT4ge1xuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBvcmlnaW46IFwiKlwiLFxuICAgIGFsbG93TWV0aG9kczogW1wiR0VUXCIsIFwiSEVBRFwiLCBcIlBVVFwiLCBcIlBPU1RcIiwgXCJERUxFVEVcIiwgXCJQQVRDSFwiXSxcbiAgICBhbGxvd0hlYWRlcnM6IFtdLFxuICAgIGV4cG9zZUhlYWRlcnM6IFtdXG4gIH07XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgLi4uZGVmYXVsdHMsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBmaW5kQWxsb3dPcmlnaW4gPSAoKG9wdHNPcmlnaW4pID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHNPcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChvcHRzT3JpZ2luID09PSBcIipcIikge1xuICAgICAgICByZXR1cm4gKCkgPT4gb3B0c09yaWdpbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luKSA9PiBvcHRzT3JpZ2luID09PSBvcmlnaW4gPyBvcmlnaW4gOiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHNPcmlnaW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIG9wdHNPcmlnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAob3JpZ2luKSA9PiBvcHRzT3JpZ2luLmluY2x1ZGVzKG9yaWdpbikgPyBvcmlnaW4gOiBudWxsO1xuICAgIH1cbiAgfSkob3B0cy5vcmlnaW4pO1xuICBjb25zdCBmaW5kQWxsb3dNZXRob2RzID0gKChvcHRzQWxsb3dNZXRob2RzKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRzQWxsb3dNZXRob2RzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBvcHRzQWxsb3dNZXRob2RzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRzQWxsb3dNZXRob2RzKSkge1xuICAgICAgcmV0dXJuICgpID0+IG9wdHNBbGxvd01ldGhvZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoKSA9PiBbXTtcbiAgICB9XG4gIH0pKG9wdHMuYWxsb3dNZXRob2RzKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGNvcnMyKGMsIG5leHQpIHtcbiAgICBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgYy5yZXMuaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGFsbG93T3JpZ2luID0gYXdhaXQgZmluZEFsbG93T3JpZ2luKGMucmVxLmhlYWRlcihcIm9yaWdpblwiKSB8fCBcIlwiLCBjKTtcbiAgICBpZiAoYWxsb3dPcmlnaW4pIHtcbiAgICAgIHNldChcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLCBhbGxvd09yaWdpbik7XG4gICAgfVxuICAgIGlmIChvcHRzLmNyZWRlbnRpYWxzKSB7XG4gICAgICBzZXQoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc1wiLCBcInRydWVcIik7XG4gICAgfVxuICAgIGlmIChvcHRzLmV4cG9zZUhlYWRlcnM/Lmxlbmd0aCkge1xuICAgICAgc2V0KFwiQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNcIiwgb3B0cy5leHBvc2VIZWFkZXJzLmpvaW4oXCIsXCIpKTtcbiAgICB9XG4gICAgaWYgKGMucmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHtcbiAgICAgIGlmIChvcHRzLm9yaWdpbiAhPT0gXCIqXCIpIHtcbiAgICAgICAgc2V0KFwiVmFyeVwiLCBcIk9yaWdpblwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLm1heEFnZSAhPSBudWxsKSB7XG4gICAgICAgIHNldChcIkFjY2Vzcy1Db250cm9sLU1heC1BZ2VcIiwgb3B0cy5tYXhBZ2UudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxvd01ldGhvZHMgPSBhd2FpdCBmaW5kQWxsb3dNZXRob2RzKGMucmVxLmhlYWRlcihcIm9yaWdpblwiKSB8fCBcIlwiLCBjKTtcbiAgICAgIGlmIChhbGxvd01ldGhvZHMubGVuZ3RoKSB7XG4gICAgICAgIHNldChcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIiwgYWxsb3dNZXRob2RzLmpvaW4oXCIsXCIpKTtcbiAgICAgIH1cbiAgICAgIGxldCBoZWFkZXJzID0gb3B0cy5hbGxvd0hlYWRlcnM7XG4gICAgICBpZiAoIWhlYWRlcnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IGMucmVxLmhlYWRlcihcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVyc1wiKTtcbiAgICAgICAgaWYgKHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICAgICAgaGVhZGVycyA9IHJlcXVlc3RIZWFkZXJzLnNwbGl0KC9cXHMqLFxccyovKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGhlYWRlcnM/Lmxlbmd0aCkge1xuICAgICAgICBzZXQoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsIGhlYWRlcnMuam9pbihcIixcIikpO1xuICAgICAgICBjLnJlcy5oZWFkZXJzLmFwcGVuZChcIlZhcnlcIiwgXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNcIik7XG4gICAgICB9XG4gICAgICBjLnJlcy5oZWFkZXJzLmRlbGV0ZShcIkNvbnRlbnQtTGVuZ3RoXCIpO1xuICAgICAgYy5yZXMuaGVhZGVycy5kZWxldGUoXCJDb250ZW50LVR5cGVcIik7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgaGVhZGVyczogYy5yZXMuaGVhZGVycyxcbiAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIHN0YXR1c1RleHQ6IFwiTm8gQ29udGVudFwiXG4gICAgICB9KTtcbiAgICB9XG4gICAgYXdhaXQgbmV4dCgpO1xuICAgIGlmIChvcHRzLm9yaWdpbiAhPT0gXCIqXCIpIHtcbiAgICAgIGMuaGVhZGVyKFwiVmFyeVwiLCBcIk9yaWdpblwiLCB7IGFwcGVuZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG59O1xuZXhwb3J0IHtcbiAgY29yc1xufTtcbiIsCiAgICAiLy8gc3JjL3V0aWxzL2NvbXByZXNzLnRzXG52YXIgQ09NUFJFU1NJQkxFX0NPTlRFTlRfVFlQRV9SRUdFWCA9IC9eXFxzKig/OnRleHRcXC8oPyFldmVudC1zdHJlYW0oPzpbO1xcc118JCkpW147XFxzXSt8YXBwbGljYXRpb25cXC8oPzpqYXZhc2NyaXB0fGpzb258eG1sfHhtbC1kdGR8ZWNtYXNjcmlwdHxkYXJ0fHBvc3RzY3JpcHR8cnRmfHRhcnx0b21sfHZuZFxcLmRhcnR8dm5kXFwubXMtZm9udG9iamVjdHx2bmRcXC5tcy1vcGVudHlwZXx3YXNtfHgtaHR0cGQtcGhwfHgtamF2YXNjcmlwdHx4LW5zLXByb3h5LWF1dG9jb25maWd8eC1zaHx4LXRhcnx4LXZpcnR1YWxib3gtaGRkfHgtdmlydHVhbGJveC1vdmF8eC12aXJ0dWFsYm94LW92Znx4LXZpcnR1YWxib3gtdmJveHx4LXZpcnR1YWxib3gtdmRpfHgtdmlydHVhbGJveC12aGR8eC12aXJ0dWFsYm94LXZtZGt8eC13d3ctZm9ybS11cmxlbmNvZGVkKXxmb250XFwvKD86b3RmfHR0Zil8aW1hZ2VcXC8oPzpibXB8dm5kXFwuYWRvYmVcXC5waG90b3Nob3B8dm5kXFwubWljcm9zb2Z0XFwuaWNvbnx2bmRcXC5tcy1kZHN8eC1pY29ufHgtbXMtYm1wKXxtZXNzYWdlXFwvcmZjODIyfG1vZGVsXFwvZ2x0Zi1iaW5hcnl8eC1zaGFkZXJcXC94LWZyYWdtZW50fHgtc2hhZGVyXFwveC12ZXJ0ZXh8W147XFxzXSs/XFwrKD86anNvbnx0ZXh0fHhtbHx5YW1sKSkoPzpbO1xcc118JCkvaTtcbmV4cG9ydCB7XG4gIENPTVBSRVNTSUJMRV9DT05URU5UX1RZUEVfUkVHRVhcbn07XG4iLAogICAgIi8vIHNyYy9taWRkbGV3YXJlL2NvbXByZXNzL2luZGV4LnRzXG5pbXBvcnQgeyBDT01QUkVTU0lCTEVfQ09OVEVOVF9UWVBFX1JFR0VYIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbXByZXNzLmpzXCI7XG52YXIgRU5DT0RJTkdfVFlQRVMgPSBbXCJnemlwXCIsIFwiZGVmbGF0ZVwiXTtcbnZhciBjYWNoZUNvbnRyb2xOb1RyYW5zZm9ybVJlZ0V4cCA9IC8oPzpefCwpXFxzKj9uby10cmFuc2Zvcm1cXHMqPyg/Oix8JCkvaTtcbnZhciBjb21wcmVzcyA9IChvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHRocmVzaG9sZCA9IG9wdGlvbnM/LnRocmVzaG9sZCA/PyAxMDI0O1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY29tcHJlc3MyKGN0eCwgbmV4dCkge1xuICAgIGF3YWl0IG5leHQoKTtcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY3R4LnJlcy5oZWFkZXJzLmdldChcIkNvbnRlbnQtTGVuZ3RoXCIpO1xuICAgIGlmIChjdHgucmVzLmhlYWRlcnMuaGFzKFwiQ29udGVudC1FbmNvZGluZ1wiKSB8fCAvLyBhbHJlYWR5IGVuY29kZWRcbiAgICBjdHgucmVzLmhlYWRlcnMuaGFzKFwiVHJhbnNmZXItRW5jb2RpbmdcIikgfHwgLy8gYWxyZWFkeSBlbmNvZGVkIG9yIGNodW5rZWRcbiAgICBjdHgucmVxLm1ldGhvZCA9PT0gXCJIRUFEXCIgfHwgLy8gSEVBRCByZXF1ZXN0XG4gICAgY29udGVudExlbmd0aCAmJiBOdW1iZXIoY29udGVudExlbmd0aCkgPCB0aHJlc2hvbGQgfHwgLy8gY29udGVudC1sZW5ndGggYmVsb3cgdGhyZXNob2xkXG4gICAgIXNob3VsZENvbXByZXNzKGN0eC5yZXMpIHx8IC8vIG5vdCBjb21wcmVzc2libGUgdHlwZVxuICAgICFzaG91bGRUcmFuc2Zvcm0oY3R4LnJlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWNjZXB0ZWQgPSBjdHgucmVxLmhlYWRlcihcIkFjY2VwdC1FbmNvZGluZ1wiKTtcbiAgICBjb25zdCBlbmNvZGluZyA9IG9wdGlvbnM/LmVuY29kaW5nID8/IEVOQ09ESU5HX1RZUEVTLmZpbmQoKGVuY29kaW5nMikgPT4gYWNjZXB0ZWQ/LmluY2x1ZGVzKGVuY29kaW5nMikpO1xuICAgIGlmICghZW5jb2RpbmcgfHwgIWN0eC5yZXMuYm9keSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgQ29tcHJlc3Npb25TdHJlYW0oZW5jb2RpbmcpO1xuICAgIGN0eC5yZXMgPSBuZXcgUmVzcG9uc2UoY3R4LnJlcy5ib2R5LnBpcGVUaHJvdWdoKHN0cmVhbSksIGN0eC5yZXMpO1xuICAgIGN0eC5yZXMuaGVhZGVycy5kZWxldGUoXCJDb250ZW50LUxlbmd0aFwiKTtcbiAgICBjdHgucmVzLmhlYWRlcnMuc2V0KFwiQ29udGVudC1FbmNvZGluZ1wiLCBlbmNvZGluZyk7XG4gIH07XG59O1xudmFyIHNob3VsZENvbXByZXNzID0gKHJlcykgPT4ge1xuICBjb25zdCB0eXBlID0gcmVzLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICByZXR1cm4gdHlwZSAmJiBDT01QUkVTU0lCTEVfQ09OVEVOVF9UWVBFX1JFR0VYLnRlc3QodHlwZSk7XG59O1xudmFyIHNob3VsZFRyYW5zZm9ybSA9IChyZXMpID0+IHtcbiAgY29uc3QgY2FjaGVDb250cm9sID0gcmVzLmhlYWRlcnMuZ2V0KFwiQ2FjaGUtQ29udHJvbFwiKTtcbiAgcmV0dXJuICFjYWNoZUNvbnRyb2wgfHwgIWNhY2hlQ29udHJvbE5vVHJhbnNmb3JtUmVnRXhwLnRlc3QoY2FjaGVDb250cm9sKTtcbn07XG5leHBvcnQge1xuICBjb21wcmVzc1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1RyYWNpbmdTdXBwcmVzc2VkID0gZXhwb3J0cy51bnN1cHByZXNzVHJhY2luZyA9IGV4cG9ydHMuc3VwcHJlc3NUcmFjaW5nID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgU1VQUFJFU1NfVFJBQ0lOR19LRVkgPSAoMCwgYXBpXzEuY3JlYXRlQ29udGV4dEtleSkoJ09wZW5UZWxlbWV0cnkgU0RLIENvbnRleHQgS2V5IFNVUFBSRVNTX1RSQUNJTkcnKTtcbmZ1bmN0aW9uIHN1cHByZXNzVHJhY2luZyhjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoU1VQUFJFU1NfVFJBQ0lOR19LRVksIHRydWUpO1xufVxuZXhwb3J0cy5zdXBwcmVzc1RyYWNpbmcgPSBzdXBwcmVzc1RyYWNpbmc7XG5mdW5jdGlvbiB1bnN1cHByZXNzVHJhY2luZyhjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoU1VQUFJFU1NfVFJBQ0lOR19LRVkpO1xufVxuZXhwb3J0cy51bnN1cHByZXNzVHJhY2luZyA9IHVuc3VwcHJlc3NUcmFjaW5nO1xuZnVuY3Rpb24gaXNUcmFjaW5nU3VwcHJlc3NlZChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoU1VQUFJFU1NfVFJBQ0lOR19LRVkpID09PSB0cnVlO1xufVxuZXhwb3J0cy5pc1RyYWNpbmdTdXBwcmVzc2VkID0gaXNUcmFjaW5nU3VwcHJlc3NlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1cHByZXNzLXRyYWNpbmcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJBR0dBR0VfTUFYX1RPVEFMX0xFTkdUSCA9IGV4cG9ydHMuQkFHR0FHRV9NQVhfUEVSX05BTUVfVkFMVUVfUEFJUlMgPSBleHBvcnRzLkJBR0dBR0VfTUFYX05BTUVfVkFMVUVfUEFJUlMgPSBleHBvcnRzLkJBR0dBR0VfSEVBREVSID0gZXhwb3J0cy5CQUdHQUdFX0lURU1TX1NFUEFSQVRPUiA9IGV4cG9ydHMuQkFHR0FHRV9QUk9QRVJUSUVTX1NFUEFSQVRPUiA9IGV4cG9ydHMuQkFHR0FHRV9LRVlfUEFJUl9TRVBBUkFUT1IgPSB2b2lkIDA7XG5leHBvcnRzLkJBR0dBR0VfS0VZX1BBSVJfU0VQQVJBVE9SID0gJz0nO1xuZXhwb3J0cy5CQUdHQUdFX1BST1BFUlRJRVNfU0VQQVJBVE9SID0gJzsnO1xuZXhwb3J0cy5CQUdHQUdFX0lURU1TX1NFUEFSQVRPUiA9ICcsJztcbi8vIE5hbWUgb2YgdGhlIGh0dHAgaGVhZGVyIHVzZWQgdG8gcHJvcGFnYXRlIHRoZSBiYWdnYWdlXG5leHBvcnRzLkJBR0dBR0VfSEVBREVSID0gJ2JhZ2dhZ2UnO1xuLy8gTWF4aW11bSBudW1iZXIgb2YgbmFtZS12YWx1ZSBwYWlycyBhbGxvd2VkIGJ5IHczYyBzcGVjXG5leHBvcnRzLkJBR0dBR0VfTUFYX05BTUVfVkFMVUVfUEFJUlMgPSAxODA7XG4vLyBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBwZXIgYSBzaW5nbGUgbmFtZS12YWx1ZSBwYWlyIGFsbG93ZWQgYnkgdzNjIHNwZWNcbmV4cG9ydHMuQkFHR0FHRV9NQVhfUEVSX05BTUVfVkFMVUVfUEFJUlMgPSA0MDk2O1xuLy8gTWF4aW11bSB0b3RhbCBsZW5ndGggb2YgYWxsIG5hbWUtdmFsdWUgcGFpcnMgYWxsb3dlZCBieSB3M2Mgc3BlY1xuZXhwb3J0cy5CQUdHQUdFX01BWF9UT1RBTF9MRU5HVEggPSA4MTkyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkID0gZXhwb3J0cy5wYXJzZVBhaXJLZXlWYWx1ZSA9IGV4cG9ydHMuZ2V0S2V5UGFpcnMgPSBleHBvcnRzLnNlcmlhbGl6ZUtleVBhaXJzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuZnVuY3Rpb24gc2VyaWFsaXplS2V5UGFpcnMoa2V5UGFpcnMpIHtcbiAgICByZXR1cm4ga2V5UGFpcnMucmVkdWNlKChoVmFsdWUsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBgJHtoVmFsdWV9JHtoVmFsdWUgIT09ICcnID8gY29uc3RhbnRzXzEuQkFHR0FHRV9JVEVNU19TRVBBUkFUT1IgOiAnJ30ke2N1cnJlbnR9YDtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IGNvbnN0YW50c18xLkJBR0dBR0VfTUFYX1RPVEFMX0xFTkdUSCA/IGhWYWx1ZSA6IHZhbHVlO1xuICAgIH0sICcnKTtcbn1cbmV4cG9ydHMuc2VyaWFsaXplS2V5UGFpcnMgPSBzZXJpYWxpemVLZXlQYWlycztcbmZ1bmN0aW9uIGdldEtleVBhaXJzKGJhZ2dhZ2UpIHtcbiAgICByZXR1cm4gYmFnZ2FnZS5nZXRBbGxFbnRyaWVzKCkubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgbGV0IGVudHJ5ID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlLnZhbHVlKX1gO1xuICAgICAgICAvLyBpbmNsdWRlIG9wYXF1ZSBtZXRhZGF0YSBpZiBwcm92aWRlZFxuICAgICAgICAvLyBOT1RFOiB3ZSBpbnRlbnRpb25hbGx5IGRvbid0IFVSSS1lbmNvZGUgdGhlIG1ldGFkYXRhIC0gdGhhdCByZXNwb25zaWJpbGl0eSBmYWxscyBvbiB0aGUgbWV0YWRhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgICAgaWYgKHZhbHVlLm1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudHJ5ICs9IGNvbnN0YW50c18xLkJBR0dBR0VfUFJPUEVSVElFU19TRVBBUkFUT1IgKyB2YWx1ZS5tZXRhZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0S2V5UGFpcnMgPSBnZXRLZXlQYWlycztcbmZ1bmN0aW9uIHBhcnNlUGFpcktleVZhbHVlKGVudHJ5KSB7XG4gICAgaWYgKCFlbnRyeSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG1ldGFkYXRhU2VwYXJhdG9ySW5kZXggPSBlbnRyeS5pbmRleE9mKGNvbnN0YW50c18xLkJBR0dBR0VfUFJPUEVSVElFU19TRVBBUkFUT1IpO1xuICAgIGNvbnN0IGtleVBhaXJQYXJ0ID0gbWV0YWRhdGFTZXBhcmF0b3JJbmRleCA9PT0gLTFcbiAgICAgICAgPyBlbnRyeVxuICAgICAgICA6IGVudHJ5LnN1YnN0cmluZygwLCBtZXRhZGF0YVNlcGFyYXRvckluZGV4KTtcbiAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IGtleVBhaXJQYXJ0LmluZGV4T2YoY29uc3RhbnRzXzEuQkFHR0FHRV9LRVlfUEFJUl9TRVBBUkFUT1IpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcmF3S2V5ID0ga2V5UGFpclBhcnQuc3Vic3RyaW5nKDAsIHNlcGFyYXRvckluZGV4KS50cmltKCk7XG4gICAgY29uc3QgcmF3VmFsdWUgPSBrZXlQYWlyUGFydC5zdWJzdHJpbmcoc2VwYXJhdG9ySW5kZXggKyAxKS50cmltKCk7XG4gICAgaWYgKCFyYXdLZXkgfHwgIXJhd1ZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IGtleTtcbiAgICBsZXQgdmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgICAga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHJhd0tleSk7XG4gICAgICAgIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHJhd1ZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBtZXRhZGF0YTtcbiAgICBpZiAobWV0YWRhdGFTZXBhcmF0b3JJbmRleCAhPT0gLTEgJiZcbiAgICAgICAgbWV0YWRhdGFTZXBhcmF0b3JJbmRleCA8IGVudHJ5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFTdHJpbmcgPSBlbnRyeS5zdWJzdHJpbmcobWV0YWRhdGFTZXBhcmF0b3JJbmRleCArIDEpO1xuICAgICAgICBtZXRhZGF0YSA9ICgwLCBhcGlfMS5iYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmcpKG1ldGFkYXRhU3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHsga2V5LCB2YWx1ZSwgbWV0YWRhdGEgfTtcbn1cbmV4cG9ydHMucGFyc2VQYWlyS2V5VmFsdWUgPSBwYXJzZVBhaXJLZXlWYWx1ZTtcbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgc2VyaWFsaXplZCBpbiB0aGUgYmFnZ2FnZSBIVFRQIEZvcm1hdCAod2l0aG91dCBtZXRhZGF0YSk6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2JhZ2dhZ2UvYmxvYi9tYXN0ZXIvYmFnZ2FnZS9IVFRQX0hFQURFUl9GT1JNQVQubWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VLZXlQYWlyc0ludG9SZWNvcmQodmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhbHVlLnNwbGl0KGNvbnN0YW50c18xLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SKS5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleVBhaXIgPSBwYXJzZVBhaXJLZXlWYWx1ZShlbnRyeSk7XG4gICAgICAgICAgICBpZiAoa2V5UGFpciAhPT0gdW5kZWZpbmVkICYmIGtleVBhaXIudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXlQYWlyLmtleV0gPSBrZXlQYWlyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQgPSBwYXJzZUtleVBhaXJzSW50b1JlY29yZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5XM0NCYWdnYWdlUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHN1cHByZXNzX3RyYWNpbmdfMSA9IHJlcXVpcmUoXCIuLi8uLi90cmFjZS9zdXBwcmVzcy10cmFjaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbi8qKlxuICogUHJvcGFnYXRlcyB7QGxpbmsgQmFnZ2FnZX0gdGhyb3VnaCBDb250ZXh0IGZvcm1hdCBwcm9wYWdhdGlvbi5cbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFnZ2FnZSBzcGVjaWZpY2F0aW9uOlxuICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2JhZ2dhZ2UvXG4gKi9cbmNsYXNzIFczQ0JhZ2dhZ2VQcm9wYWdhdG9yIHtcbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2UgPSBhcGlfMS5wcm9wYWdhdGlvbi5nZXRCYWdnYWdlKGNvbnRleHQpO1xuICAgICAgICBpZiAoIWJhZ2dhZ2UgfHwgKDAsIHN1cHByZXNzX3RyYWNpbmdfMS5pc1RyYWNpbmdTdXBwcmVzc2VkKShjb250ZXh0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qga2V5UGFpcnMgPSAoMCwgdXRpbHNfMS5nZXRLZXlQYWlycykoYmFnZ2FnZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHBhaXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwYWlyLmxlbmd0aCA8PSBjb25zdGFudHNfMS5CQUdHQUdFX01BWF9QRVJfTkFNRV9WQUxVRV9QQUlSUztcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5zbGljZSgwLCBjb25zdGFudHNfMS5CQUdHQUdFX01BWF9OQU1FX1ZBTFVFX1BBSVJTKTtcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWUgPSAoMCwgdXRpbHNfMS5zZXJpYWxpemVLZXlQYWlycykoa2V5UGFpcnMpO1xuICAgICAgICBpZiAoaGVhZGVyVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBjb25zdGFudHNfMS5CQUdHQUdFX0hFQURFUiwgaGVhZGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0dGVyLmdldChjYXJyaWVyLCBjb25zdGFudHNfMS5CQUdHQUdFX0hFQURFUik7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VTdHJpbmcgPSBBcnJheS5pc0FycmF5KGhlYWRlclZhbHVlKVxuICAgICAgICAgICAgPyBoZWFkZXJWYWx1ZS5qb2luKGNvbnN0YW50c18xLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SKVxuICAgICAgICAgICAgOiBoZWFkZXJWYWx1ZTtcbiAgICAgICAgaWYgKCFiYWdnYWdlU3RyaW5nKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2UgPSB7fTtcbiAgICAgICAgaWYgKGJhZ2dhZ2VTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IGJhZ2dhZ2VTdHJpbmcuc3BsaXQoY29uc3RhbnRzXzEuQkFHR0FHRV9JVEVNU19TRVBBUkFUT1IpO1xuICAgICAgICBwYWlycy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleVBhaXIgPSAoMCwgdXRpbHNfMS5wYXJzZVBhaXJLZXlWYWx1ZSkoZW50cnkpO1xuICAgICAgICAgICAgaWYgKGtleVBhaXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYWdnYWdlRW50cnkgPSB7IHZhbHVlOiBrZXlQYWlyLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgaWYgKGtleVBhaXIubWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFnZ2FnZUVudHJ5Lm1ldGFkYXRhID0ga2V5UGFpci5tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmFnZ2FnZVtrZXlQYWlyLmtleV0gPSBiYWdnYWdlRW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoT2JqZWN0LmVudHJpZXMoYmFnZ2FnZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpXzEucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShjb250ZXh0LCBhcGlfMS5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKGJhZ2dhZ2UpKTtcbiAgICB9XG4gICAgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW2NvbnN0YW50c18xLkJBR0dBR0VfSEVBREVSXTtcbiAgICB9XG59XG5leHBvcnRzLlczQ0JhZ2dhZ2VQcm9wYWdhdG9yID0gVzNDQmFnZ2FnZVByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XM0NCYWdnYWdlUHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5jaG9yZWRDbG9jayA9IHZvaWQgMDtcbi8qKlxuICogQSB1dGlsaXR5IGZvciByZXR1cm5pbmcgd2FsbCB0aW1lcyBhbmNob3JlZCB0byBhIGdpdmVuIHBvaW50IGluIHRpbWUuIFdhbGwgdGltZSBtZWFzdXJlbWVudHMgd2lsbFxuICogbm90IGJlIHRha2VuIGZyb20gdGhlIHN5c3RlbSwgYnV0IGluc3RlYWQgYXJlIGNvbXB1dGVkIGJ5IGFkZGluZyBhIG1vbm90b25pYyBjbG9jayB0aW1lXG4gKiB0byB0aGUgYW5jaG9yIHBvaW50LlxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIHN5c3RlbSB0aW1lIGNhbiBjaGFuZ2UgYW5kIHJlc3VsdCBpbiB1bmV4cGVjdGVkIHNpdHVhdGlvbnMgbGlrZVxuICogc3BhbnMgZW5kaW5nIGJlZm9yZSB0aGV5IGFyZSBzdGFydGVkLiBDcmVhdGluZyBhbiBhbmNob3JlZCBjbG9jayBmb3IgZWFjaCBsb2NhbCByb290IHNwYW5cbiAqIGVuc3VyZXMgdGhhdCBzcGFuIHRpbWluZ3MgYW5kIGR1cmF0aW9ucyBhcmUgYWNjdXJhdGUgd2hpbGUgcHJldmVudGluZyBzcGFuIHRpbWVzIGZyb20gZHJpZnRpbmdcbiAqIHRvbyBmYXIgZnJvbSB0aGUgc3lzdGVtIGNsb2NrLlxuICpcbiAqIE9ubHkgY3JlYXRpbmcgYW4gYW5jaG9yZWQgY2xvY2sgb25jZSBwZXIgbG9jYWwgdHJhY2UgZW5zdXJlcyBzcGFuIHRpbWVzIGFyZSBjb3JyZWN0IHJlbGF0aXZlXG4gKiB0byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgYSBjaGlsZCBzcGFuIHdpbGwgbmV2ZXIgaGF2ZSBhIHN0YXJ0IHRpbWUgYmVmb3JlIGl0cyBwYXJlbnQgZXZlblxuICogaWYgdGhlIHN5c3RlbSBjbG9jayBpcyBjb3JyZWN0ZWQgZHVyaW5nIHRoZSBsb2NhbCB0cmFjZS5cbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IHRoZSBPVGVsIEphdmEgYW5jaG9yZWQgY2xvY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWphdmEvYmxvYi9tYWluL3Nkay90cmFjZS9zcmMvbWFpbi9qYXZhL2lvL29wZW50ZWxlbWV0cnkvc2RrL3RyYWNlL0FuY2hvcmVkQ2xvY2suamF2YVxuICovXG5jbGFzcyBBbmNob3JlZENsb2NrIHtcbiAgICBfbW9ub3RvbmljQ2xvY2s7XG4gICAgX2Vwb2NoTWlsbGlzO1xuICAgIF9wZXJmb3JtYW5jZU1pbGxpcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgQW5jaG9yZWRDbG9jayBhbmNob3JlZCB0byB0aGUgY3VycmVudCB0aW1lIHJldHVybmVkIGJ5IHN5c3RlbUNsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN5c3RlbUNsb2NrIHNob3VsZCBiZSBhIGNsb2NrIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEgMTk3MCBzdWNoIGFzIERhdGVcbiAgICAgKiBAcGFyYW0gbW9ub3RvbmljQ2xvY2sgc2hvdWxkIGJlIGEgY2xvY2sgdGhhdCBjb3VudHMgbWlsbGlzZWNvbmRzIG1vbm90b25pY2FsbHkgc3VjaCBhcyB3aW5kb3cucGVyZm9ybWFuY2Ugb3IgcGVyZl9ob29rcy5wZXJmb3JtYW5jZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHN5c3RlbUNsb2NrLCBtb25vdG9uaWNDbG9jaykge1xuICAgICAgICB0aGlzLl9tb25vdG9uaWNDbG9jayA9IG1vbm90b25pY0Nsb2NrO1xuICAgICAgICB0aGlzLl9lcG9jaE1pbGxpcyA9IHN5c3RlbUNsb2NrLm5vdygpO1xuICAgICAgICB0aGlzLl9wZXJmb3JtYW5jZU1pbGxpcyA9IG1vbm90b25pY0Nsb2NrLm5vdygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgYnkgYWRkaW5nIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZVxuICAgICAqIEFuY2hvcmVkQ2xvY2sgd2FzIGNyZWF0ZWQgdG8gdGhlIGNyZWF0aW9uIGVwb2NoIHRpbWVcbiAgICAgKi9cbiAgICBub3coKSB7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fbW9ub3RvbmljQ2xvY2subm93KCkgLSB0aGlzLl9wZXJmb3JtYW5jZU1pbGxpcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vwb2NoTWlsbGlzICsgZGVsdGE7XG4gICAgfVxufVxuZXhwb3J0cy5BbmNob3JlZENsb2NrID0gQW5jaG9yZWRDbG9jaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuY2hvcmVkLWNsb2NrLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0F0dHJpYnV0ZVZhbHVlID0gZXhwb3J0cy5pc0F0dHJpYnV0ZUtleSA9IGV4cG9ydHMuc2FuaXRpemVBdHRyaWJ1dGVzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZnVuY3Rpb24gc2FuaXRpemVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBvdXQgPSB7fTtcbiAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMgIT09ICdvYmplY3QnIHx8IGF0dHJpYnV0ZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZXMsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBdHRyaWJ1dGVLZXkoa2V5KSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgICBpZiAoIWlzQXR0cmlidXRlVmFsdWUodmFsKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBzZXQgZm9yIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBvdXRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydHMuc2FuaXRpemVBdHRyaWJ1dGVzID0gc2FuaXRpemVBdHRyaWJ1dGVzO1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVLZXkoa2V5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSAhPT0gJyc7XG59XG5leHBvcnRzLmlzQXR0cmlidXRlS2V5ID0gaXNBdHRyaWJ1dGVLZXk7XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZVZhbHVlKHZhbCkge1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICByZXR1cm4gaXNIb21vZ2VuZW91c0F0dHJpYnV0ZVZhbHVlQXJyYXkodmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzVmFsaWRQcmltaXRpdmVBdHRyaWJ1dGVWYWx1ZVR5cGUodHlwZW9mIHZhbCk7XG59XG5leHBvcnRzLmlzQXR0cmlidXRlVmFsdWUgPSBpc0F0dHJpYnV0ZVZhbHVlO1xuZnVuY3Rpb24gaXNIb21vZ2VuZW91c0F0dHJpYnV0ZVZhbHVlQXJyYXkoYXJyKSB7XG4gICAgbGV0IHR5cGU7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycikge1xuICAgICAgICAvLyBudWxsL3VuZGVmaW5lZCBlbGVtZW50cyBhcmUgYWxsb3dlZFxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gdHlwZW9mIGVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZFByaW1pdGl2ZUF0dHJpYnV0ZVZhbHVlVHlwZShlbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gZWxlbWVudFR5cGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbiBpbnZhbGlkIHByaW1pdGl2ZVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc1ZhbGlkUHJpbWl0aXZlQXR0cmlidXRlVmFsdWVUeXBlKHZhbFR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbFR5cGUpIHtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXR0cmlidXRlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2luZ0Vycm9ySGFuZGxlciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbG9ncyBhbiBlcnJvciB1c2luZyB0aGUgcHJvdmlkZWQgbG9nZ2VyLCBvciBhXG4gKiBjb25zb2xlIGxvZ2dlciBpZiBvbmUgd2FzIG5vdCBwcm92aWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9nZ2luZ0Vycm9ySGFuZGxlcigpIHtcbiAgICByZXR1cm4gKGV4KSA9PiB7XG4gICAgICAgIGFwaV8xLmRpYWcuZXJyb3Ioc3RyaW5naWZ5RXhjZXB0aW9uKGV4KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMubG9nZ2luZ0Vycm9ySGFuZGxlciA9IGxvZ2dpbmdFcnJvckhhbmRsZXI7XG4vKipcbiAqIENvbnZlcnRzIGFuIGV4Y2VwdGlvbiBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0ge0V4Y2VwdGlvbn0gZXhcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5RXhjZXB0aW9uKGV4KSB7XG4gICAgaWYgKHR5cGVvZiBleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGV4O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZsYXR0ZW5FeGNlcHRpb24oZXgpKTtcbiAgICB9XG59XG4vKipcbiAqIEZsYXR0ZW5zIGFuIGV4Y2VwdGlvbiBpbnRvIGtleS12YWx1ZSBwYWlycyBieSB0cmF2ZXJzaW5nIHRoZSBwcm90b3R5cGUgY2hhaW5cbiAqIGFuZCBjb2VyY2luZyB2YWx1ZXMgdG8gc3RyaW5ncy4gRHVwbGljYXRlIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW47XG4gKiB0aGUgZmlyc3QgaW5zZXJ0IHdpbnMuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5FeGNlcHRpb24oZXgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBsZXQgY3VycmVudCA9IGV4O1xuICAgIHdoaWxlIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHRbcHJvcGVydHlOYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN1cnJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eU5hbWVdID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dnaW5nLWVycm9yLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2JhbEVycm9ySGFuZGxlciA9IGV4cG9ydHMuc2V0R2xvYmFsRXJyb3JIYW5kbGVyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2luZ19lcnJvcl9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9sb2dnaW5nLWVycm9yLWhhbmRsZXJcIik7XG4vKiogVGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyIGRlbGVnYXRlICovXG5sZXQgZGVsZWdhdGVIYW5kbGVyID0gKDAsIGxvZ2dpbmdfZXJyb3JfaGFuZGxlcl8xLmxvZ2dpbmdFcnJvckhhbmRsZXIpKCk7XG4vKipcbiAqIFNldCB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXJcbiAqIEBwYXJhbSB7RXJyb3JIYW5kbGVyfSBoYW5kbGVyXG4gKi9cbmZ1bmN0aW9uIHNldEdsb2JhbEVycm9ySGFuZGxlcihoYW5kbGVyKSB7XG4gICAgZGVsZWdhdGVIYW5kbGVyID0gaGFuZGxlcjtcbn1cbmV4cG9ydHMuc2V0R2xvYmFsRXJyb3JIYW5kbGVyID0gc2V0R2xvYmFsRXJyb3JIYW5kbGVyO1xuLyoqXG4gKiBSZXR1cm4gdGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyXG4gKiBAcGFyYW0ge0V4Y2VwdGlvbn0gZXhcbiAqL1xuZnVuY3Rpb24gZ2xvYmFsRXJyb3JIYW5kbGVyKGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgZGVsZWdhdGVIYW5kbGVyKGV4KTtcbiAgICB9XG4gICAgY2F0Y2ggeyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbn1cbmV4cG9ydHMuZ2xvYmFsRXJyb3JIYW5kbGVyID0gZ2xvYmFsRXJyb3JIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsLWVycm9yLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFN0cmluZ0xpc3RGcm9tRW52ID0gZXhwb3J0cy5nZXRCb29sZWFuRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGV4cG9ydHMuZ2V0TnVtYmVyRnJvbUVudiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuLyoqXG4gKiBSZXRyaWV2ZXMgYSBudW1iZXIgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIC0gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHksIHVuc2V0LCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UsIG9yIGlzIG5vdCBhIG51bWJlci5cbiAqIC0gUmV0dXJucyBhIG51bWJlciBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gVGhlIG51bWJlciB2YWx1ZSBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TnVtYmVyRnJvbUVudihrZXkpIHtcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltrZXldO1xuICAgIGlmIChyYXcgPT0gbnVsbCB8fCByYXcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihyYXcpO1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbmtub3duIHZhbHVlICR7KDAsIHV0aWxfMS5pbnNwZWN0KShyYXcpfSBmb3IgJHtrZXl9LCBleHBlY3RlZCBhIG51bWJlciwgdXNpbmcgZGVmYXVsdHNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0cy5nZXROdW1iZXJGcm9tRW52ID0gZ2V0TnVtYmVyRnJvbUVudjtcbi8qKlxuICogUmV0cmlldmVzIGEgc3RyaW5nIGZyb20gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiAtIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGVtcHR5LCB1bnNldCwgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBzdHJpbmcgdmFsdWUgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldFN0cmluZ0Zyb21FbnYoa2V5KSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICBpZiAocmF3ID09IG51bGwgfHwgcmF3LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHJhdztcbn1cbmV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGdldFN0cmluZ0Zyb21FbnY7XG4vKipcbiAqIFJldHJpZXZlcyBhIGJvb2xlYW4gdmFsdWUgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIC0gVHJpbXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgaWdub3JlcyBjYXNpbmcuXG4gKiAtIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHksIHVuc2V0LCBvciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuXG4gKiAtIFJldHVybnMgYGZhbHNlYCBmb3Igc3RyaW5ncyB0aGF0IGNhbm5vdCBiZSBtYXBwZWQgdG8gYSBib29sZWFuLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUaGUgYm9vbGVhbiB2YWx1ZSBvciBgZmFsc2VgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCBlbXB0eSwgdW5zZXQsIG9yIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Qm9vbGVhbkZyb21FbnYoa2V5KSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZba2V5XT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHJhdyA9PSBudWxsIHx8IHJhdyA9PT0gJycpIHtcbiAgICAgICAgLy8gTk9URTogZmFsbGluZyBiYWNrIHRvIGBmYWxzZWAgaW5zdGVhZCBvZiBgdW5kZWZpbmVkYCBhcyByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgLy8gSWYgeW91IGhhdmUgYSB1c2UtY2FzZSB0aGF0IHJlcXVpcmVzIGB1bmRlZmluZWRgLCBjb25zaWRlciB1c2luZyBgZ2V0U3RyaW5nRnJvbUVudigpYCBhbmQgYXBwbHlpbmcgdGhlIG5lY2Vzc2FyeVxuICAgICAgICAvLyBub3JtYWxpemF0aW9ucyBpbiB0aGUgY29uc3VtaW5nIGNvZGUuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHJhdyA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYXcgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbmtub3duIHZhbHVlICR7KDAsIHV0aWxfMS5pbnNwZWN0KShyYXcpfSBmb3IgJHtrZXl9LCBleHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJywgZmFsbGluZyBiYWNrIHRvICdmYWxzZScgKGRlZmF1bHQpYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmdldEJvb2xlYW5Gcm9tRW52ID0gZ2V0Qm9vbGVhbkZyb21FbnY7XG4vKipcbiAqIFJldHJpZXZlcyBhIGxpc3Qgb2Ygc3RyaW5ncyBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogLSBVc2VzICcsJyBhcyB0aGUgZGVsaW1pdGVyLlxuICogLSBUcmltcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gZWFjaCBlbnRyeS5cbiAqIC0gRXhjbHVkZXMgZW1wdHkgZW50cmllcy5cbiAqIC0gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHkgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLlxuICogLSBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIGFsbCBlbnRyaWVzIGFyZSBlbXB0eSBvciB3aGl0ZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IC0gVGhlIGxpc3Qgb2Ygc3RyaW5ncyBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RyaW5nTGlzdEZyb21FbnYoa2V5KSB7XG4gICAgcmV0dXJuIGdldFN0cmluZ0Zyb21FbnYoa2V5KVxuICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKHMgPT4gcyAhPT0gJycpO1xufVxuZXhwb3J0cy5nZXRTdHJpbmdMaXN0RnJvbUVudiA9IGdldFN0cmluZ0xpc3RGcm9tRW52O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW52aXJvbm1lbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdm9pZCAwO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ2xvYmFsVGhpcyBkaXJlY3RseSBpbnN0ZWFkLlxuICovXG5leHBvcnRzLl9nbG9iYWxUaGlzID0gZ2xvYmFsVGhpcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbFRoaXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuVkVSU0lPTiA9ICcyLjMuMCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVDb25zdE1hcCA9IHZvaWQgMDtcbi8qKlxuICogQ3JlYXRlcyBhIGNvbnN0IG1hcCBmcm9tIHRoZSBnaXZlbiB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZXMgLSBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gYmUgdXNlZCBhcyBrZXlzIGFuZCB2YWx1ZXMgaW4gdGhlIG1hcC5cbiAqIEByZXR1cm5zIEEgcG9wdWxhdGVkIHZlcnNpb24gb2YgdGhlIG1hcCB3aXRoIHRoZSB2YWx1ZXMgYW5kIGtleXMgZGVyaXZlZCBmcm9tIHRoZSB2YWx1ZXMuXG4gKi9cbi8qI19fTk9fU0lERV9FRkZFQ1RTX18qL1xuZnVuY3Rpb24gY3JlYXRlQ29uc3RNYXAodmFsdWVzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGxldCByZXMgPSB7fTtcbiAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGxwID0gMDsgbHAgPCBsZW47IGxwKyspIHtcbiAgICAgICAgY29uc3QgdmFsID0gdmFsdWVzW2xwXTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgcmVzW1N0cmluZyh2YWwpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvWy0uXS9nLCAnXycpXSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5jcmVhdGVDb25zdE1hcCA9IGNyZWF0ZUNvbnN0TWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX0NBUlJJRVJfSUNDID0gZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9DQVJSSUVSX01OQyA9IGV4cG9ydHMuU0VNQVRUUlNfTkVUX0hPU1RfQ0FSUklFUl9NQ0MgPSBleHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX0NBUlJJRVJfTkFNRSA9IGV4cG9ydHMuU0VNQVRUUlNfTkVUX0hPU1RfQ09OTkVDVElPTl9TVUJUWVBFID0gZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9DT05ORUNUSU9OX1RZUEUgPSBleHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX05BTUUgPSBleHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX1BPUlQgPSBleHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX0lQID0gZXhwb3J0cy5TRU1BVFRSU19ORVRfUEVFUl9OQU1FID0gZXhwb3J0cy5TRU1BVFRSU19ORVRfUEVFUl9QT1JUID0gZXhwb3J0cy5TRU1BVFRSU19ORVRfUEVFUl9JUCA9IGV4cG9ydHMuU0VNQVRUUlNfTkVUX1RSQU5TUE9SVCA9IGV4cG9ydHMuU0VNQVRUUlNfRkFBU19JTlZPS0VEX1JFR0lPTiA9IGV4cG9ydHMuU0VNQVRUUlNfRkFBU19JTlZPS0VEX1BST1ZJREVSID0gZXhwb3J0cy5TRU1BVFRSU19GQUFTX0lOVk9LRURfTkFNRSA9IGV4cG9ydHMuU0VNQVRUUlNfRkFBU19DT0xEU1RBUlQgPSBleHBvcnRzLlNFTUFUVFJTX0ZBQVNfQ1JPTiA9IGV4cG9ydHMuU0VNQVRUUlNfRkFBU19USU1FID0gZXhwb3J0cy5TRU1BVFRSU19GQUFTX0RPQ1VNRU5UX05BTUUgPSBleHBvcnRzLlNFTUFUVFJTX0ZBQVNfRE9DVU1FTlRfVElNRSA9IGV4cG9ydHMuU0VNQVRUUlNfRkFBU19ET0NVTUVOVF9PUEVSQVRJT04gPSBleHBvcnRzLlNFTUFUVFJTX0ZBQVNfRE9DVU1FTlRfQ09MTEVDVElPTiA9IGV4cG9ydHMuU0VNQVRUUlNfRkFBU19FWEVDVVRJT04gPSBleHBvcnRzLlNFTUFUVFJTX0ZBQVNfVFJJR0dFUiA9IGV4cG9ydHMuU0VNQVRUUlNfRVhDRVBUSU9OX0VTQ0FQRUQgPSBleHBvcnRzLlNFTUFUVFJTX0VYQ0VQVElPTl9TVEFDS1RSQUNFID0gZXhwb3J0cy5TRU1BVFRSU19FWENFUFRJT05fTUVTU0FHRSA9IGV4cG9ydHMuU0VNQVRUUlNfRVhDRVBUSU9OX1RZUEUgPSBleHBvcnRzLlNFTUFUVFJTX0RCX1NRTF9UQUJMRSA9IGV4cG9ydHMuU0VNQVRUUlNfREJfTU9OR09EQl9DT0xMRUNUSU9OID0gZXhwb3J0cy5TRU1BVFRSU19EQl9SRURJU19EQVRBQkFTRV9JTkRFWCA9IGV4cG9ydHMuU0VNQVRUUlNfREJfSEJBU0VfTkFNRVNQQUNFID0gZXhwb3J0cy5TRU1BVFRSU19EQl9DQVNTQU5EUkFfQ09PUkRJTkFUT1JfREMgPSBleHBvcnRzLlNFTUFUVFJTX0RCX0NBU1NBTkRSQV9DT09SRElOQVRPUl9JRCA9IGV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX1NQRUNVTEFUSVZFX0VYRUNVVElPTl9DT1VOVCA9IGV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX0lERU1QT1RFTkNFID0gZXhwb3J0cy5TRU1BVFRSU19EQl9DQVNTQU5EUkFfVEFCTEUgPSBleHBvcnRzLlNFTUFUVFJTX0RCX0NBU1NBTkRSQV9DT05TSVNURU5DWV9MRVZFTCA9IGV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX1BBR0VfU0laRSA9IGV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX0tFWVNQQUNFID0gZXhwb3J0cy5TRU1BVFRSU19EQl9NU1NRTF9JTlNUQU5DRV9OQU1FID0gZXhwb3J0cy5TRU1BVFRSU19EQl9PUEVSQVRJT04gPSBleHBvcnRzLlNFTUFUVFJTX0RCX1NUQVRFTUVOVCA9IGV4cG9ydHMuU0VNQVRUUlNfREJfTkFNRSA9IGV4cG9ydHMuU0VNQVRUUlNfREJfSkRCQ19EUklWRVJfQ0xBU1NOQU1FID0gZXhwb3J0cy5TRU1BVFRSU19EQl9VU0VSID0gZXhwb3J0cy5TRU1BVFRSU19EQl9DT05ORUNUSU9OX1NUUklORyA9IGV4cG9ydHMuU0VNQVRUUlNfREJfU1lTVEVNID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfTEFNQkRBX0lOVk9LRURfQVJOID0gdm9pZCAwO1xuZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfREVTVElOQVRJT05fS0lORCA9IGV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX0RFU1RJTkFUSU9OID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfU1lTVEVNID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWF9VUERBVEVTID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfQVRUUklCVVRFX0RFRklOSVRJT05TID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfU0NBTk5FRF9DT1VOVCA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0NPVU5UID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfVE9UQUxfU0VHTUVOVFMgPSBleHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9TRUdNRU5UID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfU0NBTl9GT1JXQVJEID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfVEFCTEVfQ09VTlQgPSBleHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9FWENMVVNJVkVfU1RBUlRfVEFCTEUgPSBleHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9MT0NBTF9TRUNPTkRBUllfSU5ERVhFUyA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0dMT0JBTF9TRUNPTkRBUllfSU5ERVhFUyA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX1NFTEVDVCA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0lOREVYX05BTUUgPSBleHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9BVFRSSUJVVEVTX1RPX0dFVCA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0xJTUlUID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfUFJPSkVDVElPTiA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0NPTlNJU1RFTlRfUkVBRCA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1dSSVRFX0NBUEFDSVRZID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfUkVBRF9DQVBBQ0lUWSA9IGV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0lURU1fQ09MTEVDVElPTl9NRVRSSUNTID0gZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfQ09OU1VNRURfQ0FQQUNJVFkgPSBleHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9UQUJMRV9OQU1FUyA9IGV4cG9ydHMuU0VNQVRUUlNfSFRUUF9DTElFTlRfSVAgPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfUk9VVEUgPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfU0VSVkVSX05BTUUgPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEID0gZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIID0gZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEID0gZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEggPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfVVNFUl9BR0VOVCA9IGV4cG9ydHMuU0VNQVRUUlNfSFRUUF9GTEFWT1IgPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfU1RBVFVTX0NPREUgPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfU0NIRU1FID0gZXhwb3J0cy5TRU1BVFRSU19IVFRQX0hPU1QgPSBleHBvcnRzLlNFTUFUVFJTX0hUVFBfVEFSR0VUID0gZXhwb3J0cy5TRU1BVFRSU19IVFRQX1VSTCA9IGV4cG9ydHMuU0VNQVRUUlNfSFRUUF9NRVRIT0QgPSBleHBvcnRzLlNFTUFUVFJTX0NPREVfTElORU5PID0gZXhwb3J0cy5TRU1BVFRSU19DT0RFX0ZJTEVQQVRIID0gZXhwb3J0cy5TRU1BVFRSU19DT0RFX05BTUVTUEFDRSA9IGV4cG9ydHMuU0VNQVRUUlNfQ09ERV9GVU5DVElPTiA9IGV4cG9ydHMuU0VNQVRUUlNfVEhSRUFEX05BTUUgPSBleHBvcnRzLlNFTUFUVFJTX1RIUkVBRF9JRCA9IGV4cG9ydHMuU0VNQVRUUlNfRU5EVVNFUl9TQ09QRSA9IGV4cG9ydHMuU0VNQVRUUlNfRU5EVVNFUl9ST0xFID0gZXhwb3J0cy5TRU1BVFRSU19FTkRVU0VSX0lEID0gZXhwb3J0cy5TRU1BVFRSU19QRUVSX1NFUlZJQ0UgPSB2b2lkIDA7XG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0ZJTEVNQUtFUiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfREVSQlkgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0ZJUkVCSVJEID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19BREFCQVMgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0NBQ0hFID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19FREIgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0ZJUlNUU1FMID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19JTkdSRVMgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0hBTkFEQiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfTUFYREIgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX1BST0dSRVNTID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19IU1FMREIgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0NMT1VEU0NBUEUgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0hJVkUgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX1JFRFNISUZUID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19QT1NUR1JFU1FMID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19EQjIgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX09SQUNMRSA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfTVlTUUwgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX01TU1FMID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19PVEhFUl9TUUwgPSBleHBvcnRzLlNlbWFudGljQXR0cmlidXRlcyA9IGV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHRV9VTkNPTVBSRVNTRURfU0laRSA9IGV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHRV9DT01QUkVTU0VEX1NJWkUgPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0VfSUQgPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0VfVFlQRSA9IGV4cG9ydHMuU0VNQVRUUlNfUlBDX0pTT05SUENfRVJST1JfTUVTU0FHRSA9IGV4cG9ydHMuU0VNQVRUUlNfUlBDX0pTT05SUENfRVJST1JfQ09ERSA9IGV4cG9ydHMuU0VNQVRUUlNfUlBDX0pTT05SUENfUkVRVUVTVF9JRCA9IGV4cG9ydHMuU0VNQVRUUlNfUlBDX0pTT05SUENfVkVSU0lPTiA9IGV4cG9ydHMuU0VNQVRUUlNfUlBDX0dSUENfU1RBVFVTX0NPREUgPSBleHBvcnRzLlNFTUFUVFJTX1JQQ19NRVRIT0QgPSBleHBvcnRzLlNFTUFUVFJTX1JQQ19TRVJWSUNFID0gZXhwb3J0cy5TRU1BVFRSU19SUENfU1lTVEVNID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfVE9NQlNUT05FID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfUEFSVElUSU9OID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfQ0xJRU5UX0lEID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfQ09OU1VNRVJfR1JPVVAgPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19LQUZLQV9NRVNTQUdFX0tFWSA9IGV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX1JBQkJJVE1RX1JPVVRJTkdfS0VZID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfQ09OU1VNRVJfSUQgPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19PUEVSQVRJT04gPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfQ09NUFJFU1NFRF9TSVpFX0JZVEVTID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfTUVTU0FHRV9QQVlMT0FEX1NJWkVfQllURVMgPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19DT05WRVJTQVRJT05fSUQgPSBleHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19NRVNTQUdFX0lEID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfVVJMID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfUFJPVE9DT0xfVkVSU0lPTiA9IGV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX1BST1RPQ09MID0gZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfVEVNUF9ERVNUSU5BVElPTiA9IHZvaWQgMDtcbmV4cG9ydHMuRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19BTElCQUJBX0NMT1VEID0gZXhwb3J0cy5GYWFzRG9jdW1lbnRPcGVyYXRpb25WYWx1ZXMgPSBleHBvcnRzLkZBQVNET0NVTUVOVE9QRVJBVElPTlZBTFVFU19ERUxFVEUgPSBleHBvcnRzLkZBQVNET0NVTUVOVE9QRVJBVElPTlZBTFVFU19FRElUID0gZXhwb3J0cy5GQUFTRE9DVU1FTlRPUEVSQVRJT05WQUxVRVNfSU5TRVJUID0gZXhwb3J0cy5GYWFzVHJpZ2dlclZhbHVlcyA9IGV4cG9ydHMuRkFBU1RSSUdHRVJWQUxVRVNfT1RIRVIgPSBleHBvcnRzLkZBQVNUUklHR0VSVkFMVUVTX1RJTUVSID0gZXhwb3J0cy5GQUFTVFJJR0dFUlZBTFVFU19QVUJTVUIgPSBleHBvcnRzLkZBQVNUUklHR0VSVkFMVUVTX0hUVFAgPSBleHBvcnRzLkZBQVNUUklHR0VSVkFMVUVTX0RBVEFTT1VSQ0UgPSBleHBvcnRzLkRiQ2Fzc2FuZHJhQ29uc2lzdGVuY3lMZXZlbFZhbHVlcyA9IGV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX1NFUklBTCA9IGV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1NFUklBTCA9IGV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0FOWSA9IGV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX09ORSA9IGV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1RIUkVFID0gZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfVFdPID0gZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfT05FID0gZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfUVVPUlVNID0gZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfUVVPUlVNID0gZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfRUFDSF9RVU9SVU0gPSBleHBvcnRzLkRCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19BTEwgPSBleHBvcnRzLkRiU3lzdGVtVmFsdWVzID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19DT0NLUk9BQ0hEQiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfTUVNQ0FDSEVEID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19FTEFTVElDU0VBUkNIID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19HRU9ERSA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfTkVPNEogPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0RZTkFNT0RCID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19DT1NNT1NEQiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09VQ0hEQiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09VQ0hCQVNFID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19SRURJUyA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfTU9OR09EQiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfSEJBU0UgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0NBU1NBTkRSQSA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09MREZVU0lPTiA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfSDIgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX1ZFUlRJQ0EgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX1RFUkFEQVRBID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19TWUJBU0UgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX1NRTElURSA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfUE9JTlRCQVNFID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19QRVJWQVNJVkUgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX05FVEVaWkEgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX01BUklBREIgPSBleHBvcnRzLkRCU1lTVEVNVkFMVUVTX0lOVEVSQkFTRSA9IGV4cG9ydHMuREJTWVNURU1WQUxVRVNfSU5TVEFOVERCID0gZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19JTkZPUk1JWCA9IHZvaWQgMDtcbmV4cG9ydHMuTUVTU0FHSU5HT1BFUkFUSU9OVkFMVUVTX1JFQ0VJVkUgPSBleHBvcnRzLk1lc3NhZ2luZ0Rlc3RpbmF0aW9uS2luZFZhbHVlcyA9IGV4cG9ydHMuTUVTU0FHSU5HREVTVElOQVRJT05LSU5EVkFMVUVTX1RPUElDID0gZXhwb3J0cy5NRVNTQUdJTkdERVNUSU5BVElPTktJTkRWQUxVRVNfUVVFVUUgPSBleHBvcnRzLkh0dHBGbGF2b3JWYWx1ZXMgPSBleHBvcnRzLkhUVFBGTEFWT1JWQUxVRVNfUVVJQyA9IGV4cG9ydHMuSFRUUEZMQVZPUlZBTFVFU19TUERZID0gZXhwb3J0cy5IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMl8wID0gZXhwb3J0cy5IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMV8xID0gZXhwb3J0cy5IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMV8wID0gZXhwb3J0cy5OZXRIb3N0Q29ubmVjdGlvblN1YnR5cGVWYWx1ZXMgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19MVEVfQ0EgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19OUk5TQSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX05SID0gZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSVdMQU4gPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19URF9TQ0RNQSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0dTTSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTUEFQID0gZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRUhSUEQgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19MVEUgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19FVkRPX0IgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19JREVOID0gZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNQQSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTVVBBID0gZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNEUEEgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19DRE1BMjAwMF8xWFJUVCA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fQSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fMCA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0NETUEgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19VTVRTID0gZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRURHRSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0dQUlMgPSBleHBvcnRzLk5ldEhvc3RDb25uZWN0aW9uVHlwZVZhbHVlcyA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1VOS05PV04gPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19VTkFWQUlMQUJMRSA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX0NFTEwgPSBleHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSVJFRCA9IGV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1dJRkkgPSBleHBvcnRzLk5ldFRyYW5zcG9ydFZhbHVlcyA9IGV4cG9ydHMuTkVUVFJBTlNQT1JUVkFMVUVTX09USEVSID0gZXhwb3J0cy5ORVRUUkFOU1BPUlRWQUxVRVNfSU5QUk9DID0gZXhwb3J0cy5ORVRUUkFOU1BPUlRWQUxVRVNfUElQRSA9IGV4cG9ydHMuTkVUVFJBTlNQT1JUVkFMVUVTX1VOSVggPSBleHBvcnRzLk5FVFRSQU5TUE9SVFZBTFVFU19JUCA9IGV4cG9ydHMuTkVUVFJBTlNQT1JUVkFMVUVTX0lQX1VEUCA9IGV4cG9ydHMuTkVUVFJBTlNQT1JUVkFMVUVTX0lQX1RDUCA9IGV4cG9ydHMuRmFhc0ludm9rZWRQcm92aWRlclZhbHVlcyA9IGV4cG9ydHMuRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19HQ1AgPSBleHBvcnRzLkZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQVpVUkUgPSBleHBvcnRzLkZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQVdTID0gdm9pZCAwO1xuZXhwb3J0cy5NZXNzYWdlVHlwZVZhbHVlcyA9IGV4cG9ydHMuTUVTU0FHRVRZUEVWQUxVRVNfUkVDRUlWRUQgPSBleHBvcnRzLk1FU1NBR0VUWVBFVkFMVUVTX1NFTlQgPSBleHBvcnRzLlJwY0dycGNTdGF0dXNDb2RlVmFsdWVzID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTkFVVEhFTlRJQ0FURUQgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0RBVEFfTE9TUyA9IGV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5BVkFJTEFCTEUgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0lOVEVSTkFMID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTklNUExFTUVOVEVEID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19PVVRfT0ZfUkFOR0UgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0FCT1JURUQgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0ZBSUxFRF9QUkVDT05ESVRJT04gPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1JFU09VUkNFX0VYSEFVU1RFRCA9IGV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfUEVSTUlTU0lPTl9ERU5JRUQgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0FMUkVBRFlfRVhJU1RTID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19OT1RfRk9VTkQgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0RFQURMSU5FX0VYQ0VFREVEID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlZBTElEX0FSR1VNRU5UID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTktOT1dOID0gZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19DQU5DRUxMRUQgPSBleHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX09LID0gZXhwb3J0cy5NZXNzYWdpbmdPcGVyYXRpb25WYWx1ZXMgPSBleHBvcnRzLk1FU1NBR0lOR09QRVJBVElPTlZBTFVFU19QUk9DRVNTID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC91dGlsc1wiKTtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRE8gTk9UIEVESVQsIHRoaXMgaXMgYW4gQXV0by1nZW5lcmF0ZWQgZmlsZSBmcm9tIHNjcmlwdHMvc2VtY29udi90ZW1wbGF0ZXMvL3RlbXBsYXRlcy9TZW1hbnRpY0F0dHJpYnV0ZXMudHMuajJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25zdGFudCB2YWx1ZXMgZm9yIFNlbWFudGljQXR0cmlidXRlc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX0FXU19MQU1CREFfSU5WT0tFRF9BUk4gPSAnYXdzLmxhbWJkYS5pbnZva2VkX2Fybic7XG5jb25zdCBUTVBfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG5jb25zdCBUTVBfREJfQ09OTkVDVElPTl9TVFJJTkcgPSAnZGIuY29ubmVjdGlvbl9zdHJpbmcnO1xuY29uc3QgVE1QX0RCX1VTRVIgPSAnZGIudXNlcic7XG5jb25zdCBUTVBfREJfSkRCQ19EUklWRVJfQ0xBU1NOQU1FID0gJ2RiLmpkYmMuZHJpdmVyX2NsYXNzbmFtZSc7XG5jb25zdCBUTVBfREJfTkFNRSA9ICdkYi5uYW1lJztcbmNvbnN0IFRNUF9EQl9TVEFURU1FTlQgPSAnZGIuc3RhdGVtZW50JztcbmNvbnN0IFRNUF9EQl9PUEVSQVRJT04gPSAnZGIub3BlcmF0aW9uJztcbmNvbnN0IFRNUF9EQl9NU1NRTF9JTlNUQU5DRV9OQU1FID0gJ2RiLm1zc3FsLmluc3RhbmNlX25hbWUnO1xuY29uc3QgVE1QX0RCX0NBU1NBTkRSQV9LRVlTUEFDRSA9ICdkYi5jYXNzYW5kcmEua2V5c3BhY2UnO1xuY29uc3QgVE1QX0RCX0NBU1NBTkRSQV9QQUdFX1NJWkUgPSAnZGIuY2Fzc2FuZHJhLnBhZ2Vfc2l6ZSc7XG5jb25zdCBUTVBfREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMID0gJ2RiLmNhc3NhbmRyYS5jb25zaXN0ZW5jeV9sZXZlbCc7XG5jb25zdCBUTVBfREJfQ0FTU0FORFJBX1RBQkxFID0gJ2RiLmNhc3NhbmRyYS50YWJsZSc7XG5jb25zdCBUTVBfREJfQ0FTU0FORFJBX0lERU1QT1RFTkNFID0gJ2RiLmNhc3NhbmRyYS5pZGVtcG90ZW5jZSc7XG5jb25zdCBUTVBfREJfQ0FTU0FORFJBX1NQRUNVTEFUSVZFX0VYRUNVVElPTl9DT1VOVCA9ICdkYi5jYXNzYW5kcmEuc3BlY3VsYXRpdmVfZXhlY3V0aW9uX2NvdW50JztcbmNvbnN0IFRNUF9EQl9DQVNTQU5EUkFfQ09PUkRJTkFUT1JfSUQgPSAnZGIuY2Fzc2FuZHJhLmNvb3JkaW5hdG9yLmlkJztcbmNvbnN0IFRNUF9EQl9DQVNTQU5EUkFfQ09PUkRJTkFUT1JfREMgPSAnZGIuY2Fzc2FuZHJhLmNvb3JkaW5hdG9yLmRjJztcbmNvbnN0IFRNUF9EQl9IQkFTRV9OQU1FU1BBQ0UgPSAnZGIuaGJhc2UubmFtZXNwYWNlJztcbmNvbnN0IFRNUF9EQl9SRURJU19EQVRBQkFTRV9JTkRFWCA9ICdkYi5yZWRpcy5kYXRhYmFzZV9pbmRleCc7XG5jb25zdCBUTVBfREJfTU9OR09EQl9DT0xMRUNUSU9OID0gJ2RiLm1vbmdvZGIuY29sbGVjdGlvbic7XG5jb25zdCBUTVBfREJfU1FMX1RBQkxFID0gJ2RiLnNxbC50YWJsZSc7XG5jb25zdCBUTVBfRVhDRVBUSU9OX1RZUEUgPSAnZXhjZXB0aW9uLnR5cGUnO1xuY29uc3QgVE1QX0VYQ0VQVElPTl9NRVNTQUdFID0gJ2V4Y2VwdGlvbi5tZXNzYWdlJztcbmNvbnN0IFRNUF9FWENFUFRJT05fU1RBQ0tUUkFDRSA9ICdleGNlcHRpb24uc3RhY2t0cmFjZSc7XG5jb25zdCBUTVBfRVhDRVBUSU9OX0VTQ0FQRUQgPSAnZXhjZXB0aW9uLmVzY2FwZWQnO1xuY29uc3QgVE1QX0ZBQVNfVFJJR0dFUiA9ICdmYWFzLnRyaWdnZXInO1xuY29uc3QgVE1QX0ZBQVNfRVhFQ1VUSU9OID0gJ2ZhYXMuZXhlY3V0aW9uJztcbmNvbnN0IFRNUF9GQUFTX0RPQ1VNRU5UX0NPTExFQ1RJT04gPSAnZmFhcy5kb2N1bWVudC5jb2xsZWN0aW9uJztcbmNvbnN0IFRNUF9GQUFTX0RPQ1VNRU5UX09QRVJBVElPTiA9ICdmYWFzLmRvY3VtZW50Lm9wZXJhdGlvbic7XG5jb25zdCBUTVBfRkFBU19ET0NVTUVOVF9USU1FID0gJ2ZhYXMuZG9jdW1lbnQudGltZSc7XG5jb25zdCBUTVBfRkFBU19ET0NVTUVOVF9OQU1FID0gJ2ZhYXMuZG9jdW1lbnQubmFtZSc7XG5jb25zdCBUTVBfRkFBU19USU1FID0gJ2ZhYXMudGltZSc7XG5jb25zdCBUTVBfRkFBU19DUk9OID0gJ2ZhYXMuY3Jvbic7XG5jb25zdCBUTVBfRkFBU19DT0xEU1RBUlQgPSAnZmFhcy5jb2xkc3RhcnQnO1xuY29uc3QgVE1QX0ZBQVNfSU5WT0tFRF9OQU1FID0gJ2ZhYXMuaW52b2tlZF9uYW1lJztcbmNvbnN0IFRNUF9GQUFTX0lOVk9LRURfUFJPVklERVIgPSAnZmFhcy5pbnZva2VkX3Byb3ZpZGVyJztcbmNvbnN0IFRNUF9GQUFTX0lOVk9LRURfUkVHSU9OID0gJ2ZhYXMuaW52b2tlZF9yZWdpb24nO1xuY29uc3QgVE1QX05FVF9UUkFOU1BPUlQgPSAnbmV0LnRyYW5zcG9ydCc7XG5jb25zdCBUTVBfTkVUX1BFRVJfSVAgPSAnbmV0LnBlZXIuaXAnO1xuY29uc3QgVE1QX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG5jb25zdCBUTVBfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbmNvbnN0IFRNUF9ORVRfSE9TVF9JUCA9ICduZXQuaG9zdC5pcCc7XG5jb25zdCBUTVBfTkVUX0hPU1RfUE9SVCA9ICduZXQuaG9zdC5wb3J0JztcbmNvbnN0IFRNUF9ORVRfSE9TVF9OQU1FID0gJ25ldC5ob3N0Lm5hbWUnO1xuY29uc3QgVE1QX05FVF9IT1NUX0NPTk5FQ1RJT05fVFlQRSA9ICduZXQuaG9zdC5jb25uZWN0aW9uLnR5cGUnO1xuY29uc3QgVE1QX05FVF9IT1NUX0NPTk5FQ1RJT05fU1VCVFlQRSA9ICduZXQuaG9zdC5jb25uZWN0aW9uLnN1YnR5cGUnO1xuY29uc3QgVE1QX05FVF9IT1NUX0NBUlJJRVJfTkFNRSA9ICduZXQuaG9zdC5jYXJyaWVyLm5hbWUnO1xuY29uc3QgVE1QX05FVF9IT1NUX0NBUlJJRVJfTUNDID0gJ25ldC5ob3N0LmNhcnJpZXIubWNjJztcbmNvbnN0IFRNUF9ORVRfSE9TVF9DQVJSSUVSX01OQyA9ICduZXQuaG9zdC5jYXJyaWVyLm1uYyc7XG5jb25zdCBUTVBfTkVUX0hPU1RfQ0FSUklFUl9JQ0MgPSAnbmV0Lmhvc3QuY2Fycmllci5pY2MnO1xuY29uc3QgVE1QX1BFRVJfU0VSVklDRSA9ICdwZWVyLnNlcnZpY2UnO1xuY29uc3QgVE1QX0VORFVTRVJfSUQgPSAnZW5kdXNlci5pZCc7XG5jb25zdCBUTVBfRU5EVVNFUl9ST0xFID0gJ2VuZHVzZXIucm9sZSc7XG5jb25zdCBUTVBfRU5EVVNFUl9TQ09QRSA9ICdlbmR1c2VyLnNjb3BlJztcbmNvbnN0IFRNUF9USFJFQURfSUQgPSAndGhyZWFkLmlkJztcbmNvbnN0IFRNUF9USFJFQURfTkFNRSA9ICd0aHJlYWQubmFtZSc7XG5jb25zdCBUTVBfQ09ERV9GVU5DVElPTiA9ICdjb2RlLmZ1bmN0aW9uJztcbmNvbnN0IFRNUF9DT0RFX05BTUVTUEFDRSA9ICdjb2RlLm5hbWVzcGFjZSc7XG5jb25zdCBUTVBfQ09ERV9GSUxFUEFUSCA9ICdjb2RlLmZpbGVwYXRoJztcbmNvbnN0IFRNUF9DT0RFX0xJTkVOTyA9ICdjb2RlLmxpbmVubyc7XG5jb25zdCBUTVBfSFRUUF9NRVRIT0QgPSAnaHR0cC5tZXRob2QnO1xuY29uc3QgVE1QX0hUVFBfVVJMID0gJ2h0dHAudXJsJztcbmNvbnN0IFRNUF9IVFRQX1RBUkdFVCA9ICdodHRwLnRhcmdldCc7XG5jb25zdCBUTVBfSFRUUF9IT1NUID0gJ2h0dHAuaG9zdCc7XG5jb25zdCBUTVBfSFRUUF9TQ0hFTUUgPSAnaHR0cC5zY2hlbWUnO1xuY29uc3QgVE1QX0hUVFBfU1RBVFVTX0NPREUgPSAnaHR0cC5zdGF0dXNfY29kZSc7XG5jb25zdCBUTVBfSFRUUF9GTEFWT1IgPSAnaHR0cC5mbGF2b3InO1xuY29uc3QgVE1QX0hUVFBfVVNFUl9BR0VOVCA9ICdodHRwLnVzZXJfYWdlbnQnO1xuY29uc3QgVE1QX0hUVFBfUkVRVUVTVF9DT05URU5UX0xFTkdUSCA9ICdodHRwLnJlcXVlc3RfY29udGVudF9sZW5ndGgnO1xuY29uc3QgVE1QX0hUVFBfUkVRVUVTVF9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQgPSAnaHR0cC5yZXF1ZXN0X2NvbnRlbnRfbGVuZ3RoX3VuY29tcHJlc3NlZCc7XG5jb25zdCBUTVBfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSCA9ICdodHRwLnJlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoJztcbmNvbnN0IFRNUF9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCA9ICdodHRwLnJlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX3VuY29tcHJlc3NlZCc7XG5jb25zdCBUTVBfSFRUUF9TRVJWRVJfTkFNRSA9ICdodHRwLnNlcnZlcl9uYW1lJztcbmNvbnN0IFRNUF9IVFRQX1JPVVRFID0gJ2h0dHAucm91dGUnO1xuY29uc3QgVE1QX0hUVFBfQ0xJRU5UX0lQID0gJ2h0dHAuY2xpZW50X2lwJztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfVEFCTEVfTkFNRVMgPSAnYXdzLmR5bmFtb2RiLnRhYmxlX25hbWVzJztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfQ09OU1VNRURfQ0FQQUNJVFkgPSAnYXdzLmR5bmFtb2RiLmNvbnN1bWVkX2NhcGFjaXR5JztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfSVRFTV9DT0xMRUNUSU9OX01FVFJJQ1MgPSAnYXdzLmR5bmFtb2RiLml0ZW1fY29sbGVjdGlvbl9tZXRyaWNzJztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfUkVBRF9DQVBBQ0lUWSA9ICdhd3MuZHluYW1vZGIucHJvdmlzaW9uZWRfcmVhZF9jYXBhY2l0eSc7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1dSSVRFX0NBUEFDSVRZID0gJ2F3cy5keW5hbW9kYi5wcm92aXNpb25lZF93cml0ZV9jYXBhY2l0eSc7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX0NPTlNJU1RFTlRfUkVBRCA9ICdhd3MuZHluYW1vZGIuY29uc2lzdGVudF9yZWFkJztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfUFJPSkVDVElPTiA9ICdhd3MuZHluYW1vZGIucHJvamVjdGlvbic7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX0xJTUlUID0gJ2F3cy5keW5hbW9kYi5saW1pdCc7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX0FUVFJJQlVURVNfVE9fR0VUID0gJ2F3cy5keW5hbW9kYi5hdHRyaWJ1dGVzX3RvX2dldCc7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX0lOREVYX05BTUUgPSAnYXdzLmR5bmFtb2RiLmluZGV4X25hbWUnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9TRUxFQ1QgPSAnYXdzLmR5bmFtb2RiLnNlbGVjdCc7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX0dMT0JBTF9TRUNPTkRBUllfSU5ERVhFUyA9ICdhd3MuZHluYW1vZGIuZ2xvYmFsX3NlY29uZGFyeV9pbmRleGVzJztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfTE9DQUxfU0VDT05EQVJZX0lOREVYRVMgPSAnYXdzLmR5bmFtb2RiLmxvY2FsX3NlY29uZGFyeV9pbmRleGVzJztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfRVhDTFVTSVZFX1NUQVJUX1RBQkxFID0gJ2F3cy5keW5hbW9kYi5leGNsdXNpdmVfc3RhcnRfdGFibGUnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9UQUJMRV9DT1VOVCA9ICdhd3MuZHluYW1vZGIudGFibGVfY291bnQnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9TQ0FOX0ZPUldBUkQgPSAnYXdzLmR5bmFtb2RiLnNjYW5fZm9yd2FyZCc7XG5jb25zdCBUTVBfQVdTX0RZTkFNT0RCX1NFR01FTlQgPSAnYXdzLmR5bmFtb2RiLnNlZ21lbnQnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9UT1RBTF9TRUdNRU5UUyA9ICdhd3MuZHluYW1vZGIudG90YWxfc2VnbWVudHMnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9DT1VOVCA9ICdhd3MuZHluYW1vZGIuY291bnQnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9TQ0FOTkVEX0NPVU5UID0gJ2F3cy5keW5hbW9kYi5zY2FubmVkX2NvdW50JztcbmNvbnN0IFRNUF9BV1NfRFlOQU1PREJfQVRUUklCVVRFX0RFRklOSVRJT05TID0gJ2F3cy5keW5hbW9kYi5hdHRyaWJ1dGVfZGVmaW5pdGlvbnMnO1xuY29uc3QgVE1QX0FXU19EWU5BTU9EQl9HTE9CQUxfU0VDT05EQVJZX0lOREVYX1VQREFURVMgPSAnYXdzLmR5bmFtb2RiLmdsb2JhbF9zZWNvbmRhcnlfaW5kZXhfdXBkYXRlcyc7XG5jb25zdCBUTVBfTUVTU0FHSU5HX1NZU1RFTSA9ICdtZXNzYWdpbmcuc3lzdGVtJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdfREVTVElOQVRJT04gPSAnbWVzc2FnaW5nLmRlc3RpbmF0aW9uJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdfREVTVElOQVRJT05fS0lORCA9ICdtZXNzYWdpbmcuZGVzdGluYXRpb25fa2luZCc7XG5jb25zdCBUTVBfTUVTU0FHSU5HX1RFTVBfREVTVElOQVRJT04gPSAnbWVzc2FnaW5nLnRlbXBfZGVzdGluYXRpb24nO1xuY29uc3QgVE1QX01FU1NBR0lOR19QUk9UT0NPTCA9ICdtZXNzYWdpbmcucHJvdG9jb2wnO1xuY29uc3QgVE1QX01FU1NBR0lOR19QUk9UT0NPTF9WRVJTSU9OID0gJ21lc3NhZ2luZy5wcm90b2NvbF92ZXJzaW9uJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdfVVJMID0gJ21lc3NhZ2luZy51cmwnO1xuY29uc3QgVE1QX01FU1NBR0lOR19NRVNTQUdFX0lEID0gJ21lc3NhZ2luZy5tZXNzYWdlX2lkJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdfQ09OVkVSU0FUSU9OX0lEID0gJ21lc3NhZ2luZy5jb252ZXJzYXRpb25faWQnO1xuY29uc3QgVE1QX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfU0laRV9CWVRFUyA9ICdtZXNzYWdpbmcubWVzc2FnZV9wYXlsb2FkX3NpemVfYnl0ZXMnO1xuY29uc3QgVE1QX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfQ09NUFJFU1NFRF9TSVpFX0JZVEVTID0gJ21lc3NhZ2luZy5tZXNzYWdlX3BheWxvYWRfY29tcHJlc3NlZF9zaXplX2J5dGVzJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdfT1BFUkFUSU9OID0gJ21lc3NhZ2luZy5vcGVyYXRpb24nO1xuY29uc3QgVE1QX01FU1NBR0lOR19DT05TVU1FUl9JRCA9ICdtZXNzYWdpbmcuY29uc3VtZXJfaWQnO1xuY29uc3QgVE1QX01FU1NBR0lOR19SQUJCSVRNUV9ST1VUSU5HX0tFWSA9ICdtZXNzYWdpbmcucmFiYml0bXEucm91dGluZ19rZXknO1xuY29uc3QgVE1QX01FU1NBR0lOR19LQUZLQV9NRVNTQUdFX0tFWSA9ICdtZXNzYWdpbmcua2Fma2EubWVzc2FnZV9rZXknO1xuY29uc3QgVE1QX01FU1NBR0lOR19LQUZLQV9DT05TVU1FUl9HUk9VUCA9ICdtZXNzYWdpbmcua2Fma2EuY29uc3VtZXJfZ3JvdXAnO1xuY29uc3QgVE1QX01FU1NBR0lOR19LQUZLQV9DTElFTlRfSUQgPSAnbWVzc2FnaW5nLmthZmthLmNsaWVudF9pZCc7XG5jb25zdCBUTVBfTUVTU0FHSU5HX0tBRktBX1BBUlRJVElPTiA9ICdtZXNzYWdpbmcua2Fma2EucGFydGl0aW9uJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdfS0FGS0FfVE9NQlNUT05FID0gJ21lc3NhZ2luZy5rYWZrYS50b21ic3RvbmUnO1xuY29uc3QgVE1QX1JQQ19TWVNURU0gPSAncnBjLnN5c3RlbSc7XG5jb25zdCBUTVBfUlBDX1NFUlZJQ0UgPSAncnBjLnNlcnZpY2UnO1xuY29uc3QgVE1QX1JQQ19NRVRIT0QgPSAncnBjLm1ldGhvZCc7XG5jb25zdCBUTVBfUlBDX0dSUENfU1RBVFVTX0NPREUgPSAncnBjLmdycGMuc3RhdHVzX2NvZGUnO1xuY29uc3QgVE1QX1JQQ19KU09OUlBDX1ZFUlNJT04gPSAncnBjLmpzb25ycGMudmVyc2lvbic7XG5jb25zdCBUTVBfUlBDX0pTT05SUENfUkVRVUVTVF9JRCA9ICdycGMuanNvbnJwYy5yZXF1ZXN0X2lkJztcbmNvbnN0IFRNUF9SUENfSlNPTlJQQ19FUlJPUl9DT0RFID0gJ3JwYy5qc29ucnBjLmVycm9yX2NvZGUnO1xuY29uc3QgVE1QX1JQQ19KU09OUlBDX0VSUk9SX01FU1NBR0UgPSAncnBjLmpzb25ycGMuZXJyb3JfbWVzc2FnZSc7XG5jb25zdCBUTVBfTUVTU0FHRV9UWVBFID0gJ21lc3NhZ2UudHlwZSc7XG5jb25zdCBUTVBfTUVTU0FHRV9JRCA9ICdtZXNzYWdlLmlkJztcbmNvbnN0IFRNUF9NRVNTQUdFX0NPTVBSRVNTRURfU0laRSA9ICdtZXNzYWdlLmNvbXByZXNzZWRfc2l6ZSc7XG5jb25zdCBUTVBfTUVTU0FHRV9VTkNPTVBSRVNTRURfU0laRSA9ICdtZXNzYWdlLnVuY29tcHJlc3NlZF9zaXplJztcbi8qKlxuICogVGhlIGZ1bGwgaW52b2tlZCBBUk4gYXMgcHJvdmlkZWQgb24gdGhlIGBDb250ZXh0YCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIChgTGFtYmRhLVJ1bnRpbWUtSW52b2tlZC1GdW5jdGlvbi1Bcm5gIGhlYWRlciBvbiB0aGUgYC9ydW50aW1lL2ludm9jYXRpb24vbmV4dGAgYXBwbGljYWJsZSkuXG4gKlxuICogTm90ZTogVGhpcyBtYXkgYmUgZGlmZmVyZW50IGZyb20gYGZhYXMuaWRgIGlmIGFuIGFsaWFzIGlzIGludm9sdmVkLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19MQU1CREFfSU5WT0tFRF9BUk4gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfTEFNQkRBX0lOVk9LRURfQVJOID0gVE1QX0FXU19MQU1CREFfSU5WT0tFRF9BUk47XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RCX1NZU1RFTSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0RCX1NZU1RFTSA9IFRNUF9EQl9TWVNURU07XG4vKipcbiAqIFRoZSBjb25uZWN0aW9uIHN0cmluZyB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLiBJdCBpcyByZWNvbW1lbmRlZCB0byByZW1vdmUgZW1iZWRkZWQgY3JlZGVudGlhbHMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkcgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19EQl9DT05ORUNUSU9OX1NUUklORyA9IFRNUF9EQl9DT05ORUNUSU9OX1NUUklORztcbi8qKlxuICogVXNlcm5hbWUgZm9yIGFjY2Vzc2luZyB0aGUgZGF0YWJhc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfVVNFUiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0RCX1VTRVIgPSBUTVBfREJfVVNFUjtcbi8qKlxuICogVGhlIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSBbSmF2YSBEYXRhYmFzZSBDb25uZWN0aXZpdHkgKEpEQkMpXShodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvOC9kb2NzL3RlY2hub3Rlcy9ndWlkZXMvamRiYy8pIGRyaXZlciB1c2VkIHRvIGNvbm5lY3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfSkRCQ19EUklWRVJfQ0xBU1NOQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfSkRCQ19EUklWRVJfQ0xBU1NOQU1FID0gVE1QX0RCX0pEQkNfRFJJVkVSX0NMQVNTTkFNRTtcbi8qKlxuICogSWYgbm8gW3RlY2gtc3BlY2lmaWMgYXR0cmlidXRlXSgjY2FsbC1sZXZlbC1hdHRyaWJ1dGVzLWZvci1zcGVjaWZpYy10ZWNobm9sb2dpZXMpIGlzIGRlZmluZWQsIHRoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gcmVwb3J0IHRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBiZWluZyBhY2Nlc3NlZC4gRm9yIGNvbW1hbmRzIHRoYXQgc3dpdGNoIHRoZSBkYXRhYmFzZSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSB0YXJnZXQgZGF0YWJhc2UgKGV2ZW4gaWYgdGhlIGNvbW1hbmQgZmFpbHMpLlxuICpcbiAqIE5vdGU6IEluIHNvbWUgU1FMIGRhdGFiYXNlcywgdGhlIGRhdGFiYXNlIG5hbWUgdG8gYmUgdXNlZCBpcyBjYWxsZWQgJiMzNDtzY2hlbWEgbmFtZSYjMzQ7LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RCX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19EQl9OQU1FID0gVE1QX0RCX05BTUU7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogTm90ZTogVGhlIHZhbHVlIG1heSBiZSBzYW5pdGl6ZWQgdG8gZXhjbHVkZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfU1RBVEVNRU5UIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfU1RBVEVNRU5UID0gVE1QX0RCX1NUQVRFTUVOVDtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiBiZWluZyBleGVjdXRlZCwgZS5nLiB0aGUgW01vbmdvREIgY29tbWFuZCBuYW1lXShodHRwczovL2RvY3MubW9uZ29kYi5jb20vbWFudWFsL3JlZmVyZW5jZS9jb21tYW5kLyNkYXRhYmFzZS1vcGVyYXRpb25zKSBzdWNoIGFzIGBmaW5kQW5kTW9kaWZ5YCwgb3IgdGhlIFNRTCBrZXl3b3JkLlxuICpcbiAqIE5vdGU6IFdoZW4gc2V0dGluZyB0aGlzIHRvIGFuIFNRTCBrZXl3b3JkLCBpdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXR0ZW1wdCBhbnkgY2xpZW50LXNpZGUgcGFyc2luZyBvZiBgZGIuc3RhdGVtZW50YCBqdXN0IHRvIGdldCB0aGlzIHByb3BlcnR5LCBidXQgaXQgc2hvdWxkIGJlIHNldCBpZiB0aGUgb3BlcmF0aW9uIG5hbWUgaXMgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkgYmVpbmcgaW5zdHJ1bWVudGVkLiBJZiB0aGUgU1FMIHN0YXRlbWVudCBoYXMgYW4gYW1iaWd1b3VzIG9wZXJhdGlvbiwgb3IgcGVyZm9ybXMgbW9yZSB0aGFuIG9uZSBvcGVyYXRpb24sIHRoaXMgdmFsdWUgbWF5IGJlIG9taXR0ZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfT1BFUkFUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfT1BFUkFUSU9OID0gVE1QX0RCX09QRVJBVElPTjtcbi8qKlxuICogVGhlIE1pY3Jvc29mdCBTUUwgU2VydmVyIFtpbnN0YW5jZSBuYW1lXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9zcWwvY29ubmVjdC9qZGJjL2J1aWxkaW5nLXRoZS1jb25uZWN0aW9uLXVybD92aWV3PXNxbC1zZXJ2ZXItdmVyMTUpIGNvbm5lY3RpbmcgdG8uIFRoaXMgbmFtZSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgcG9ydCBvZiBhIG5hbWVkIGluc3RhbmNlLlxuICpcbiAqIE5vdGU6IElmIHNldHRpbmcgYSBgZGIubXNzcWwuaW5zdGFuY2VfbmFtZWAsIGBuZXQucGVlci5wb3J0YCBpcyBubyBsb25nZXIgcmVxdWlyZWQgKGJ1dCBzdGlsbCByZWNvbW1lbmRlZCBpZiBub24tc3RhbmRhcmQpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RCX01TU1FMX0lOU1RBTkNFX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19EQl9NU1NRTF9JTlNUQU5DRV9OQU1FID0gVE1QX0RCX01TU1FMX0lOU1RBTkNFX05BTUU7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBrZXlzcGFjZSBiZWluZyBhY2Nlc3NlZC4gVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIGBkYi5uYW1lYCBhdHRyaWJ1dGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0RCX0NBU1NBTkRSQV9LRVlTUEFDRSA9IFRNUF9EQl9DQVNTQU5EUkFfS0VZU1BBQ0U7XG4vKipcbiAqIFRoZSBmZXRjaCBzaXplIHVzZWQgZm9yIHBhZ2luZywgaS5lLiBob3cgbWFueSByb3dzIHdpbGwgYmUgcmV0dXJuZWQgYXQgb25jZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9EQl9DQVNTQU5EUkFfUEFHRV9TSVpFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX1BBR0VfU0laRSA9IFRNUF9EQl9DQVNTQU5EUkFfUEFHRV9TSVpFO1xuLyoqXG4gKiBUaGUgY29uc2lzdGVuY3kgbGV2ZWwgb2YgdGhlIHF1ZXJ5LiBCYXNlZCBvbiBjb25zaXN0ZW5jeSB2YWx1ZXMgZnJvbSBbQ1FMXShodHRwczovL2RvY3MuZGF0YXN0YXguY29tL2VuL2Nhc3NhbmRyYS1vc3MvMy4wL2Nhc3NhbmRyYS9kbWwvZG1sQ29uZmlnQ29uc2lzdGVuY3kuaHRtbCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMID0gVE1QX0RCX0NBU1NBTkRSQV9DT05TSVNURU5DWV9MRVZFTDtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHByaW1hcnkgdGFibGUgdGhhdCB0aGUgb3BlcmF0aW9uIGlzIGFjdGluZyB1cG9uLCBpbmNsdWRpbmcgdGhlIHNjaGVtYSBuYW1lIChpZiBhcHBsaWNhYmxlKS5cbiAqXG4gKiBOb3RlOiBUaGlzIG1pcnJvcnMgdGhlIGRiLnNxbC50YWJsZSBhdHRyaWJ1dGUgYnV0IHJlZmVyZW5jZXMgY2Fzc2FuZHJhIHJhdGhlciB0aGFuIHNxbC4gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGF0dGVtcHQgYW55IGNsaWVudC1zaWRlIHBhcnNpbmcgb2YgYGRiLnN0YXRlbWVudGAganVzdCB0byBnZXQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0IHNob3VsZCBiZSBzZXQgaWYgaXQgaXMgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkgYmVpbmcgaW5zdHJ1bWVudGVkLiBJZiB0aGUgb3BlcmF0aW9uIGlzIGFjdGluZyB1cG9uIGFuIGFub255bW91cyB0YWJsZSwgb3IgbW9yZSB0aGFuIG9uZSB0YWJsZSwgdGhpcyB2YWx1ZSBNVVNUIE5PVCBiZSBzZXQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfQ0FTU0FORFJBX1RBQkxFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX1RBQkxFID0gVE1QX0RCX0NBU1NBTkRSQV9UQUJMRTtcbi8qKlxuICogV2hldGhlciBvciBub3QgdGhlIHF1ZXJ5IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfQ0FTU0FORFJBX0lERU1QT1RFTkNFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX0lERU1QT1RFTkNFID0gVE1QX0RCX0NBU1NBTkRSQV9JREVNUE9URU5DRTtcbi8qKlxuICogVGhlIG51bWJlciBvZiB0aW1lcyBhIHF1ZXJ5IHdhcyBzcGVjdWxhdGl2ZWx5IGV4ZWN1dGVkLiBOb3Qgc2V0IG9yIGAwYCBpZiB0aGUgcXVlcnkgd2FzIG5vdCBleGVjdXRlZCBzcGVjdWxhdGl2ZWx5LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RCX0NBU1NBTkRSQV9TUEVDVUxBVElWRV9FWEVDVVRJT05fQ09VTlQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19EQl9DQVNTQU5EUkFfU1BFQ1VMQVRJVkVfRVhFQ1VUSU9OX0NPVU5UID0gVE1QX0RCX0NBU1NBTkRSQV9TUEVDVUxBVElWRV9FWEVDVVRJT05fQ09VTlQ7XG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgY29vcmRpbmF0aW5nIG5vZGUgZm9yIGEgcXVlcnkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfQ0FTU0FORFJBX0NPT1JESU5BVE9SX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfQ0FTU0FORFJBX0NPT1JESU5BVE9SX0lEID0gVE1QX0RCX0NBU1NBTkRSQV9DT09SRElOQVRPUl9JRDtcbi8qKlxuICogVGhlIGRhdGEgY2VudGVyIG9mIHRoZSBjb29yZGluYXRpbmcgbm9kZSBmb3IgYSBxdWVyeS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9EQl9DQVNTQU5EUkFfQ09PUkRJTkFUT1JfREMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19EQl9DQVNTQU5EUkFfQ09PUkRJTkFUT1JfREMgPSBUTVBfREJfQ0FTU0FORFJBX0NPT1JESU5BVE9SX0RDO1xuLyoqXG4gKiBUaGUgW0hCYXNlIG5hbWVzcGFjZV0oaHR0cHM6Ly9oYmFzZS5hcGFjaGUub3JnL2Jvb2suaHRtbCNfbmFtZXNwYWNlKSBiZWluZyBhY2Nlc3NlZC4gVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIGBkYi5uYW1lYCBhdHRyaWJ1dGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0RCX0hCQVNFX05BTUVTUEFDRSA9IFRNUF9EQl9IQkFTRV9OQU1FU1BBQ0U7XG4vKipcbiAqIFRoZSBpbmRleCBvZiB0aGUgZGF0YWJhc2UgYmVpbmcgYWNjZXNzZWQgYXMgdXNlZCBpbiB0aGUgW2BTRUxFQ1RgIGNvbW1hbmRdKGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2VsZWN0KSwgcHJvdmlkZWQgYXMgYW4gaW50ZWdlci4gVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBnZW5lcmljIGBkYi5uYW1lYCBhdHRyaWJ1dGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfUkVESVNfREFUQUJBU0VfSU5ERVggaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19EQl9SRURJU19EQVRBQkFTRV9JTkRFWCA9IFRNUF9EQl9SRURJU19EQVRBQkFTRV9JTkRFWDtcbi8qKlxuICogVGhlIGNvbGxlY3Rpb24gYmVpbmcgYWNjZXNzZWQgd2l0aGluIHRoZSBkYXRhYmFzZSBzdGF0ZWQgaW4gYGRiLm5hbWVgLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RCX01PTkdPREJfQ09MTEVDVElPTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0RCX01PTkdPREJfQ09MTEVDVElPTiA9IFRNUF9EQl9NT05HT0RCX0NPTExFQ1RJT047XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwcmltYXJ5IHRhYmxlIHRoYXQgdGhlIG9wZXJhdGlvbiBpcyBhY3RpbmcgdXBvbiwgaW5jbHVkaW5nIHRoZSBzY2hlbWEgbmFtZSAoaWYgYXBwbGljYWJsZSkuXG4gKlxuICogTm90ZTogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGF0dGVtcHQgYW55IGNsaWVudC1zaWRlIHBhcnNpbmcgb2YgYGRiLnN0YXRlbWVudGAganVzdCB0byBnZXQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0IHNob3VsZCBiZSBzZXQgaWYgaXQgaXMgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkgYmVpbmcgaW5zdHJ1bWVudGVkLiBJZiB0aGUgb3BlcmF0aW9uIGlzIGFjdGluZyB1cG9uIGFuIGFub255bW91cyB0YWJsZSwgb3IgbW9yZSB0aGFuIG9uZSB0YWJsZSwgdGhpcyB2YWx1ZSBNVVNUIE5PVCBiZSBzZXQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREJfU1FMX1RBQkxFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfREJfU1FMX1RBQkxFID0gVE1QX0RCX1NRTF9UQUJMRTtcbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIGV4Y2VwdGlvbiAoaXRzIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lLCBpZiBhcHBsaWNhYmxlKS4gVGhlIGR5bmFtaWMgdHlwZSBvZiB0aGUgZXhjZXB0aW9uIHNob3VsZCBiZSBwcmVmZXJyZWQgb3ZlciB0aGUgc3RhdGljIHR5cGUgaW4gbGFuZ3VhZ2VzIHRoYXQgc3VwcG9ydCBpdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9FWENFUFRJT05fVFlQRS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19FWENFUFRJT05fVFlQRSA9IFRNUF9FWENFUFRJT05fVFlQRTtcbi8qKlxuICogVGhlIGV4Y2VwdGlvbiBtZXNzYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0VYQ0VQVElPTl9NRVNTQUdFLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0VYQ0VQVElPTl9NRVNTQUdFID0gVE1QX0VYQ0VQVElPTl9NRVNTQUdFO1xuLyoqXG4gKiBBIHN0YWNrdHJhY2UgYXMgYSBzdHJpbmcgaW4gdGhlIG5hdHVyYWwgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBsYW5ndWFnZSBydW50aW1lLiBUaGUgcmVwcmVzZW50YXRpb24gaXMgdG8gYmUgZGV0ZXJtaW5lZCBhbmQgZG9jdW1lbnRlZCBieSBlYWNoIGxhbmd1YWdlIFNJRy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9FWENFUFRJT05fU1RBQ0tUUkFDRS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19FWENFUFRJT05fU1RBQ0tUUkFDRSA9IFRNUF9FWENFUFRJT05fU1RBQ0tUUkFDRTtcbi8qKlxuKiBTSE9VTEQgYmUgc2V0IHRvIHRydWUgaWYgdGhlIGV4Y2VwdGlvbiBldmVudCBpcyByZWNvcmRlZCBhdCBhIHBvaW50IHdoZXJlIGl0IGlzIGtub3duIHRoYXQgdGhlIGV4Y2VwdGlvbiBpcyBlc2NhcGluZyB0aGUgc2NvcGUgb2YgdGhlIHNwYW4uXG4qXG4qIE5vdGU6IEFuIGV4Y2VwdGlvbiBpcyBjb25zaWRlcmVkIHRvIGhhdmUgZXNjYXBlZCAob3IgbGVmdCkgdGhlIHNjb3BlIG9mIGEgc3BhbixcbmlmIHRoYXQgc3BhbiBpcyBlbmRlZCB3aGlsZSB0aGUgZXhjZXB0aW9uIGlzIHN0aWxsIGxvZ2ljYWxseSAmIzM0O2luIGZsaWdodCYjMzQ7LlxuVGhpcyBtYXkgYmUgYWN0dWFsbHkgJiMzNDtpbiBmbGlnaHQmIzM0OyBpbiBzb21lIGxhbmd1YWdlcyAoZS5nLiBpZiB0aGUgZXhjZXB0aW9uXG5pcyBwYXNzZWQgdG8gYSBDb250ZXh0IG1hbmFnZXImIzM5O3MgYF9fZXhpdF9fYCBtZXRob2QgaW4gUHl0aG9uKSBidXQgd2lsbFxudXN1YWxseSBiZSBjYXVnaHQgYXQgdGhlIHBvaW50IG9mIHJlY29yZGluZyB0aGUgZXhjZXB0aW9uIGluIG1vc3QgbGFuZ3VhZ2VzLlxuXG5JdCBpcyB1c3VhbGx5IG5vdCBwb3NzaWJsZSB0byBkZXRlcm1pbmUgYXQgdGhlIHBvaW50IHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd25cbndoZXRoZXIgaXQgd2lsbCBlc2NhcGUgdGhlIHNjb3BlIG9mIGEgc3Bhbi5cbkhvd2V2ZXIsIGl0IGlzIHRyaXZpYWwgdG8ga25vdyB0aGF0IGFuIGV4Y2VwdGlvblxud2lsbCBlc2NhcGUsIGlmIG9uZSBjaGVja3MgZm9yIGFuIGFjdGl2ZSBleGNlcHRpb24ganVzdCBiZWZvcmUgZW5kaW5nIHRoZSBzcGFuLFxuYXMgZG9uZSBpbiB0aGUgW2V4YW1wbGUgYWJvdmVdKCNleGNlcHRpb24tZW5kLWV4YW1wbGUpLlxuXG5JdCBmb2xsb3dzIHRoYXQgYW4gZXhjZXB0aW9uIG1heSBzdGlsbCBlc2NhcGUgdGhlIHNjb3BlIG9mIHRoZSBzcGFuXG5ldmVuIGlmIHRoZSBgZXhjZXB0aW9uLmVzY2FwZWRgIGF0dHJpYnV0ZSB3YXMgbm90IHNldCBvciBzZXQgdG8gZmFsc2UsXG5zaW5jZSB0aGUgZXZlbnQgbWlnaHQgaGF2ZSBiZWVuIHJlY29yZGVkIGF0IGEgdGltZSB3aGVyZSBpdCB3YXMgbm90XG5jbGVhciB3aGV0aGVyIHRoZSBleGNlcHRpb24gd2lsbCBlc2NhcGUuXG4qXG4qIEBkZXByZWNhdGVkIFVzZSBBVFRSX0VYQ0VQVElPTl9FU0NBUEVELlxuKi9cbmV4cG9ydHMuU0VNQVRUUlNfRVhDRVBUSU9OX0VTQ0FQRUQgPSBUTVBfRVhDRVBUSU9OX0VTQ0FQRUQ7XG4vKipcbiAqIFR5cGUgb2YgdGhlIHRyaWdnZXIgb24gd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfVFJJR0dFUiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0ZBQVNfVFJJR0dFUiA9IFRNUF9GQUFTX1RSSUdHRVI7XG4vKipcbiAqIFRoZSBleGVjdXRpb24gSUQgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfSU5WT0NBVElPTl9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0ZBQVNfRVhFQ1VUSU9OID0gVE1QX0ZBQVNfRVhFQ1VUSU9OO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc291cmNlIG9uIHdoaWNoIHRoZSB0cmlnZ2VyaW5nIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBGb3IgZXhhbXBsZSwgaW4gQ2xvdWQgU3RvcmFnZSBvciBTMyBjb3JyZXNwb25kcyB0byB0aGUgYnVja2V0IG5hbWUsIGFuZCBpbiBDb3Ntb3MgREIgdG8gdGhlIGRhdGFiYXNlIG5hbWUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRkFBU19ET0NVTUVOVF9DT0xMRUNUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRkFBU19ET0NVTUVOVF9DT0xMRUNUSU9OID0gVE1QX0ZBQVNfRE9DVU1FTlRfQ09MTEVDVElPTjtcbi8qKlxuICogRGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkIG9uIHRoZSBkYXRhLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfRE9DVU1FTlRfT1BFUkFUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRkFBU19ET0NVTUVOVF9PUEVSQVRJT04gPSBUTVBfRkFBU19ET0NVTUVOVF9PUEVSQVRJT047XG4vKipcbiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHRpbWUgd2hlbiB0aGUgZGF0YSB3YXMgYWNjZXNzZWQgaW4gdGhlIFtJU08gODYwMV0oaHR0cHM6Ly93d3cuaXNvLm9yZy9pc28tODYwMS1kYXRlLWFuZC10aW1lLWZvcm1hdC5odG1sKSBmb3JtYXQgZXhwcmVzc2VkIGluIFtVVENdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9GQUFTX0RPQ1VNRU5UX1RJTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19GQUFTX0RPQ1VNRU5UX1RJTUUgPSBUTVBfRkFBU19ET0NVTUVOVF9USU1FO1xuLyoqXG4gKiBUaGUgZG9jdW1lbnQgbmFtZS90YWJsZSBzdWJqZWN0ZWQgdG8gdGhlIG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsIGluIENsb3VkIFN0b3JhZ2Ugb3IgUzMgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGFuZCBpbiBDb3Ntb3MgREIgdGhlIHRhYmxlIG5hbWUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRkFBU19ET0NVTUVOVF9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRkFBU19ET0NVTUVOVF9OQU1FID0gVE1QX0ZBQVNfRE9DVU1FTlRfTkFNRTtcbi8qKlxuICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gaW52b2NhdGlvbiB0aW1lIGluIHRoZSBbSVNPIDg2MDFdKGh0dHBzOi8vd3d3Lmlzby5vcmcvaXNvLTg2MDEtZGF0ZS1hbmQtdGltZS1mb3JtYXQuaHRtbCkgZm9ybWF0IGV4cHJlc3NlZCBpbiBbVVRDXShodHRwczovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRkFBU19USU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRkFBU19USU1FID0gVE1QX0ZBQVNfVElNRTtcbi8qKlxuICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2NoZWR1bGUgcGVyaW9kIGFzIFtDcm9uIEV4cHJlc3Npb25dKGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2NkL0UxMjA1OF8wMS9kb2MvZG9jLjEwMTQvZTEyMDMwL2Nyb25fZXhwcmVzc2lvbnMuaHRtKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9GQUFTX0NST04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19GQUFTX0NST04gPSBUTVBfRkFBU19DUk9OO1xuLyoqXG4gKiBBIGJvb2xlYW4gdGhhdCBpcyB0cnVlIGlmIHRoZSBzZXJ2ZXJsZXNzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciB0aGUgZmlyc3QgdGltZSAoYWthIGNvbGQtc3RhcnQpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfQ09MRFNUQVJUIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRkFBU19DT0xEU1RBUlQgPSBUTVBfRkFBU19DT0xEU1RBUlQ7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIE5vdGU6IFNIT1VMRCBiZSBlcXVhbCB0byB0aGUgYGZhYXMubmFtZWAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfSU5WT0tFRF9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRkFBU19JTlZPS0VEX05BTUUgPSBUTVBfRkFBU19JTlZPS0VEX05BTUU7XG4vKipcbiAqIFRoZSBjbG91ZCBwcm92aWRlciBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBOb3RlOiBTSE9VTEQgYmUgZXF1YWwgdG8gdGhlIGBjbG91ZC5wcm92aWRlcmAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfSU5WT0tFRF9QUk9WSURFUiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0ZBQVNfSU5WT0tFRF9QUk9WSURFUiA9IFRNUF9GQUFTX0lOVk9LRURfUFJPVklERVI7XG4vKipcbiAqIFRoZSBjbG91ZCByZWdpb24gb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKlxuICogTm90ZTogU0hPVUxEIGJlIGVxdWFsIHRvIHRoZSBgY2xvdWQucmVnaW9uYCByZXNvdXJjZSBhdHRyaWJ1dGUgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRkFBU19JTlZPS0VEX1JFR0lPTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0ZBQVNfSU5WT0tFRF9SRUdJT04gPSBUTVBfRkFBU19JTlZPS0VEX1JFR0lPTjtcbi8qKlxuICogVHJhbnNwb3J0IHByb3RvY29sIHVzZWQuIFNlZSBub3RlIGJlbG93LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVF9UUkFOU1BPUlQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfVFJBTlNQT1JUID0gVE1QX05FVF9UUkFOU1BPUlQ7XG4vKipcbiAqIFJlbW90ZSBhZGRyZXNzIG9mIHRoZSBwZWVyIChkb3R0ZWQgZGVjaW1hbCBmb3IgSVB2NCBvciBbUkZDNTk1Ml0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU5NTIpIGZvciBJUHY2KS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9ORVRfUEVFUl9JUCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX05FVF9QRUVSX0lQID0gVE1QX05FVF9QRUVSX0lQO1xuLyoqXG4gKiBSZW1vdGUgcG9ydCBudW1iZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTkVUX1BFRVJfUE9SVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX05FVF9QRUVSX1BPUlQgPSBUTVBfTkVUX1BFRVJfUE9SVDtcbi8qKlxuICogUmVtb3RlIGhvc3RuYW1lIG9yIHNpbWlsYXIsIHNlZSBub3RlIGJlbG93LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVF9QRUVSX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfUEVFUl9OQU1FID0gVE1QX05FVF9QRUVSX05BTUU7XG4vKipcbiAqIExpa2UgYG5ldC5wZWVyLmlwYCBidXQgZm9yIHRoZSBob3N0IElQLiBVc2VmdWwgaW4gY2FzZSBvZiBhIG11bHRpLUlQIGhvc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTkVUX0hPU1RfSVAgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9JUCA9IFRNUF9ORVRfSE9TVF9JUDtcbi8qKlxuICogTGlrZSBgbmV0LnBlZXIucG9ydGAgYnV0IGZvciB0aGUgaG9zdCBwb3J0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVF9IT1NUX1BPUlQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9QT1JUID0gVE1QX05FVF9IT1NUX1BPUlQ7XG4vKipcbiAqIExvY2FsIGhvc3RuYW1lIG9yIHNpbWlsYXIsIHNlZSBub3RlIGJlbG93LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVF9IT1NUX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9OQU1FID0gVE1QX05FVF9IT1NUX05BTUU7XG4vKipcbiAqIFRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIHR5cGUgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIGhvc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTkVUV09SS19DT05ORUNUSU9OX1RZUEUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9DT05ORUNUSU9OX1RZUEUgPSBUTVBfTkVUX0hPU1RfQ09OTkVDVElPTl9UWVBFO1xuLyoqXG4gKiBUaGlzIGRlc2NyaWJlcyBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb25uZWN0aW9uLnR5cGUuIEl0IG1heSBiZSB0aGUgdHlwZSBvZiBjZWxsIHRlY2hub2xvZ3kgY29ubmVjdGlvbiwgYnV0IGl0IGNvdWxkIGJlIHVzZWQgZm9yIGRlc2NyaWJpbmcgZGV0YWlscyBhYm91dCBhIHdpZmkgY29ubmVjdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9ORVRXT1JLX0NPTk5FQ1RJT05fU1VCVFlQRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX0NPTk5FQ1RJT05fU1VCVFlQRSA9IFRNUF9ORVRfSE9TVF9DT05ORUNUSU9OX1NVQlRZUEU7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtb2JpbGUgY2Fycmllci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9ORVRXT1JLX0NBUlJJRVJfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX0NBUlJJRVJfTkFNRSA9IFRNUF9ORVRfSE9TVF9DQVJSSUVSX05BTUU7XG4vKipcbiAqIFRoZSBtb2JpbGUgY2FycmllciBjb3VudHJ5IGNvZGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTkVUV09SS19DQVJSSUVSX01DQyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX05FVF9IT1NUX0NBUlJJRVJfTUNDID0gVE1QX05FVF9IT1NUX0NBUlJJRVJfTUNDO1xuLyoqXG4gKiBUaGUgbW9iaWxlIGNhcnJpZXIgbmV0d29yayBjb2RlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVFdPUktfQ0FSUklFUl9NTkMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9DQVJSSUVSX01OQyA9IFRNUF9ORVRfSE9TVF9DQVJSSUVSX01OQztcbi8qKlxuICogVGhlIElTTyAzMTY2LTEgYWxwaGEtMiAyLWNoYXJhY3RlciBjb3VudHJ5IGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2JpbGUgY2FycmllciBuZXR3b3JrLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVFdPUktfQ0FSUklFUl9JQ0MgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19ORVRfSE9TVF9DQVJSSUVSX0lDQyA9IFRNUF9ORVRfSE9TVF9DQVJSSUVSX0lDQztcbi8qKlxuICogVGhlIFtgc2VydmljZS5uYW1lYF0oLi4vLi4vcmVzb3VyY2Uvc2VtYW50aWNfY29udmVudGlvbnMvUkVBRE1FLm1kI3NlcnZpY2UpIG9mIHRoZSByZW1vdGUgc2VydmljZS4gU0hPVUxEIGJlIGVxdWFsIHRvIHRoZSBhY3R1YWwgYHNlcnZpY2UubmFtZWAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSByZW1vdGUgc2VydmljZSBpZiBhbnkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUEVFUl9TRVJWSUNFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfUEVFUl9TRVJWSUNFID0gVE1QX1BFRVJfU0VSVklDRTtcbi8qKlxuICogVXNlcm5hbWUgb3IgY2xpZW50X2lkIGV4dHJhY3RlZCBmcm9tIHRoZSBhY2Nlc3MgdG9rZW4gb3IgW0F1dGhvcml6YXRpb25dKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjM1I3NlY3Rpb24tNC4yKSBoZWFkZXIgaW4gdGhlIGluYm91bmQgcmVxdWVzdCBmcm9tIG91dHNpZGUgdGhlIHN5c3RlbS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9FTkRVU0VSX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRU5EVVNFUl9JRCA9IFRNUF9FTkRVU0VSX0lEO1xuLyoqXG4gKiBBY3R1YWwvYXNzdW1lZCByb2xlIHRoZSBjbGllbnQgaXMgbWFraW5nIHRoZSByZXF1ZXN0IHVuZGVyIGV4dHJhY3RlZCBmcm9tIHRva2VuIG9yIGFwcGxpY2F0aW9uIHNlY3VyaXR5IGNvbnRleHQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRU5EVVNFUl9ST0xFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfRU5EVVNFUl9ST0xFID0gVE1QX0VORFVTRVJfUk9MRTtcbi8qKlxuICogU2NvcGVzIG9yIGdyYW50ZWQgYXV0aG9yaXRpZXMgdGhlIGNsaWVudCBjdXJyZW50bHkgcG9zc2Vzc2VzIGV4dHJhY3RlZCBmcm9tIHRva2VuIG9yIGFwcGxpY2F0aW9uIHNlY3VyaXR5IGNvbnRleHQuIFRoZSB2YWx1ZSB3b3VsZCBjb21lIGZyb20gdGhlIHNjb3BlIGFzc29jaWF0ZWQgd2l0aCBhbiBbT0F1dGggMi4wIEFjY2VzcyBUb2tlbl0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDkjc2VjdGlvbi0zLjMpIG9yIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpbiBhIFtTQU1MIDIuMCBBc3NlcnRpb25dKGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3NlY3VyaXR5L3NhbWwvUG9zdDIuMC9zc3RjLXNhbWwtdGVjaC1vdmVydmlldy0yLjAuaHRtbCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRU5EVVNFUl9TQ09QRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0VORFVTRVJfU0NPUEUgPSBUTVBfRU5EVVNFUl9TQ09QRTtcbi8qKlxuICogQ3VycmVudCAmIzM0O21hbmFnZWQmIzM0OyB0aHJlYWQgSUQgKGFzIG9wcG9zZWQgdG8gT1MgdGhyZWFkIElEKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9USFJFQURfSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19USFJFQURfSUQgPSBUTVBfVEhSRUFEX0lEO1xuLyoqXG4gKiBDdXJyZW50IHRocmVhZCBuYW1lLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1RIUkVBRF9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfVEhSRUFEX05BTUUgPSBUTVBfVEhSRUFEX05BTUU7XG4vKipcbiAqIFRoZSBtZXRob2Qgb3IgZnVuY3Rpb24gbmFtZSwgb3IgZXF1aXZhbGVudCAodXN1YWxseSByaWdodG1vc3QgcGFydCBvZiB0aGUgY29kZSB1bml0JiMzOTtzIG5hbWUpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0NPREVfRlVOQ1RJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19DT0RFX0ZVTkNUSU9OID0gVE1QX0NPREVfRlVOQ1RJT047XG4vKipcbiAqIFRoZSAmIzM0O25hbWVzcGFjZSYjMzQ7IHdpdGhpbiB3aGljaCBgY29kZS5mdW5jdGlvbmAgaXMgZGVmaW5lZC4gVXN1YWxseSB0aGUgcXVhbGlmaWVkIGNsYXNzIG9yIG1vZHVsZSBuYW1lLCBzdWNoIHRoYXQgYGNvZGUubmFtZXNwYWNlYCArIHNvbWUgc2VwYXJhdG9yICsgYGNvZGUuZnVuY3Rpb25gIGZvcm0gYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvZGUgdW5pdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9DT0RFX05BTUVTUEFDRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0NPREVfTkFNRVNQQUNFID0gVE1QX0NPREVfTkFNRVNQQUNFO1xuLyoqXG4gKiBUaGUgc291cmNlIGNvZGUgZmlsZSBuYW1lIHRoYXQgaWRlbnRpZmllcyB0aGUgY29kZSB1bml0IGFzIHVuaXF1ZWx5IGFzIHBvc3NpYmxlIChwcmVmZXJhYmx5IGFuIGFic29sdXRlIGZpbGUgcGF0aCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQ09ERV9GSUxFUEFUSCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0NPREVfRklMRVBBVEggPSBUTVBfQ09ERV9GSUxFUEFUSDtcbi8qKlxuICogVGhlIGxpbmUgbnVtYmVyIGluIGBjb2RlLmZpbGVwYXRoYCBiZXN0IHJlcHJlc2VudGluZyB0aGUgb3BlcmF0aW9uLiBJdCBTSE9VTEQgcG9pbnQgd2l0aGluIHRoZSBjb2RlIHVuaXQgbmFtZWQgaW4gYGNvZGUuZnVuY3Rpb25gLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0NPREVfTElORU5PIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQ09ERV9MSU5FTk8gPSBUTVBfQ09ERV9MSU5FTk87XG4vKipcbiAqIEhUVFAgcmVxdWVzdCBtZXRob2QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSFRUUF9NRVRIT0QgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX01FVEhPRCA9IFRNUF9IVFRQX01FVEhPRDtcbi8qKlxuICogRnVsbCBIVFRQIHJlcXVlc3QgVVJMIGluIHRoZSBmb3JtIGBzY2hlbWU6Ly9ob3N0Wzpwb3J0XS9wYXRoP3F1ZXJ5WyNmcmFnbWVudF1gLiBVc3VhbGx5IHRoZSBmcmFnbWVudCBpcyBub3QgdHJhbnNtaXR0ZWQgb3ZlciBIVFRQLCBidXQgaWYgaXQgaXMga25vd24sIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBuZXZlcnRoZWxlc3MuXG4gKlxuICogTm90ZTogYGh0dHAudXJsYCBNVVNUIE5PVCBjb250YWluIGNyZWRlbnRpYWxzIHBhc3NlZCB2aWEgVVJMIGluIGZvcm0gb2YgYGh0dHBzOi8vdXNlcm5hbWU6cGFzc3dvcmRAd3d3LmV4YW1wbGUuY29tL2AuIEluIHN1Y2ggY2FzZSB0aGUgYXR0cmlidXRlJiMzOTtzIHZhbHVlIHNob3VsZCBiZSBgaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IVFRQX1VSTCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0hUVFBfVVJMID0gVE1QX0hUVFBfVVJMO1xuLyoqXG4gKiBUaGUgZnVsbCByZXF1ZXN0IHRhcmdldCBhcyBwYXNzZWQgaW4gYSBIVFRQIHJlcXVlc3QgbGluZSBvciBlcXVpdmFsZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0hUVFBfVEFSR0VUIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfSFRUUF9UQVJHRVQgPSBUTVBfSFRUUF9UQVJHRVQ7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgW0hUVFAgaG9zdCBoZWFkZXJdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tNS40KS4gQW4gZW1wdHkgSG9zdCBoZWFkZXIgc2hvdWxkIGFsc28gYmUgcmVwb3J0ZWQsIHNlZSBub3RlLlxuICpcbiAqIE5vdGU6IFdoZW4gdGhlIGhlYWRlciBpcyBwcmVzZW50IGJ1dCBlbXB0eSB0aGUgYXR0cmlidXRlIFNIT1VMRCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy4gTm90ZSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBzaXR1YXRpb24gdGhhdCBpcyBleHBlY3RlZCBpbiBjZXJ0YWluIGNhc2VzLCBhY2NvcmRpbmcgdGhlIGFmb3JlbWVudGlvbmVkIFtzZWN0aW9uIG9mIFJGQyA3MjMwXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTUuNCkuIFdoZW4gdGhlIGhlYWRlciBpcyBub3Qgc2V0IHRoZSBhdHRyaWJ1dGUgTVVTVCBOT1QgYmUgc2V0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0hUVFBfSE9TVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0hUVFBfSE9TVCA9IFRNUF9IVFRQX0hPU1Q7XG4vKipcbiAqIFRoZSBVUkkgc2NoZW1lIGlkZW50aWZ5aW5nIHRoZSB1c2VkIHByb3RvY29sLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0hUVFBfU0NIRU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfSFRUUF9TQ0hFTUUgPSBUTVBfSFRUUF9TQ0hFTUU7XG4vKipcbiAqIFtIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0hUVFBfU1RBVFVTX0NPREUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX1NUQVRVU19DT0RFID0gVE1QX0hUVFBfU1RBVFVTX0NPREU7XG4vKipcbiAqIEtpbmQgb2YgSFRUUCBwcm90b2NvbCB1c2VkLlxuICpcbiAqIE5vdGU6IElmIGBuZXQudHJhbnNwb3J0YCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBjYW4gYmUgYXNzdW1lZCB0byBiZSBgSVAuVENQYCBleGNlcHQgaWYgYGh0dHAuZmxhdm9yYCBpcyBgUVVJQ2AsIGluIHdoaWNoIGNhc2UgYElQLlVEUGAgaXMgYXNzdW1lZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IVFRQX0ZMQVZPUiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0hUVFBfRkxBVk9SID0gVE1QX0hUVFBfRkxBVk9SO1xuLyoqXG4gKiBWYWx1ZSBvZiB0aGUgW0hUVFAgVXNlci1BZ2VudF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi01LjUuMykgaGVhZGVyIHNlbnQgYnkgdGhlIGNsaWVudC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IVFRQX1VTRVJfQUdFTlQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX1VTRVJfQUdFTlQgPSBUTVBfSFRUUF9VU0VSX0FHRU5UO1xuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBwYXlsb2FkIGJvZHkgaW4gYnl0ZXMuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBleGNsdWRpbmcgaGVhZGVycyBhbmQgaXMgb2Z0ZW4sIGJ1dCBub3QgYWx3YXlzLCBwcmVzZW50IGFzIHRoZSBbQ29udGVudC1MZW5ndGhdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjIpIGhlYWRlci4gRm9yIHJlcXVlc3RzIHVzaW5nIHRyYW5zcG9ydCBlbmNvZGluZywgdGhpcyBzaG91bGQgYmUgdGhlIGNvbXByZXNzZWQgc2l6ZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEggaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEggPSBUTVBfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RIO1xuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIHJlcXVlc3QgcGF5bG9hZCBib2R5IGFmdGVyIHRyYW5zcG9ydCBkZWNvZGluZy4gTm90IHNldCBpZiB0cmFuc3BvcnQgZW5jb2Rpbmcgbm90IHVzZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0hUVFBfUkVRVUVTVF9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQgPSBUTVBfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRDtcbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIHBheWxvYWQgYm9keSBpbiBieXRlcy4gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGV4Y2x1ZGluZyBoZWFkZXJzIGFuZCBpcyBvZnRlbiwgYnV0IG5vdCBhbHdheXMsIHByZXNlbnQgYXMgdGhlIFtDb250ZW50LUxlbmd0aF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMikgaGVhZGVyLiBGb3IgcmVxdWVzdHMgdXNpbmcgdHJhbnNwb3J0IGVuY29kaW5nLCB0aGlzIHNob3VsZCBiZSB0aGUgY29tcHJlc3NlZCBzaXplLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEggaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIID0gVE1QX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEg7XG4vKipcbiAqIFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgcmVzcG9uc2UgcGF5bG9hZCBib2R5IGFmdGVyIHRyYW5zcG9ydCBkZWNvZGluZy4gTm90IHNldCBpZiB0cmFuc3BvcnQgZW5jb2Rpbmcgbm90IHVzZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCA9IFRNUF9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRDtcbi8qKlxuICogVGhlIHByaW1hcnkgc2VydmVyIG5hbWUgb2YgdGhlIG1hdGNoZWQgdmlydHVhbCBob3N0LiBUaGlzIHNob3VsZCBiZSBvYnRhaW5lZCB2aWEgY29uZmlndXJhdGlvbi4gSWYgbm8gc3VjaCBjb25maWd1cmF0aW9uIGNhbiBiZSBvYnRhaW5lZCwgdGhpcyBhdHRyaWJ1dGUgTVVTVCBOT1QgYmUgc2V0ICggYG5ldC5ob3N0Lm5hbWVgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQpLlxuICpcbiAqIE5vdGU6IGBodHRwLnVybGAgaXMgdXN1YWxseSBub3QgcmVhZGlseSBhdmFpbGFibGUgb24gdGhlIHNlcnZlciBzaWRlIGJ1dCB3b3VsZCBoYXZlIHRvIGJlIGFzc2VtYmxlZCBpbiBhIGN1bWJlcnNvbWUgYW5kIHNvbWV0aW1lcyBsb3NzeSBwcm9jZXNzIGZyb20gb3RoZXIgaW5mb3JtYXRpb24gKHNlZSBlLmcuIG9wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktcHl0aG9uL3B1bGwvMTQ4KS4gSXQgaXMgdGh1cyBwcmVmZXJyZWQgdG8gc3VwcGx5IHRoZSByYXcgZGF0YSB0aGF0IGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IVFRQX1NFUlZFUl9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfSFRUUF9TRVJWRVJfTkFNRSA9IFRNUF9IVFRQX1NFUlZFUl9OQU1FO1xuLyoqXG4gKiBUaGUgbWF0Y2hlZCByb3V0ZSAocGF0aCB0ZW1wbGF0ZSkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSFRUUF9ST1VURS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19IVFRQX1JPVVRFID0gVE1QX0hUVFBfUk9VVEU7XG4vKipcbiogVGhlIElQIGFkZHJlc3Mgb2YgdGhlIG9yaWdpbmFsIGNsaWVudCBiZWhpbmQgYWxsIHByb3hpZXMsIGlmIGtub3duIChlLmcuIGZyb20gW1gtRm9yd2FyZGVkLUZvcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1gtRm9yd2FyZGVkLUZvcikpLlxuKlxuKiBOb3RlOiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBgbmV0LnBlZXIuaXBgLCB3aGljaCB3b3VsZFxuaWRlbnRpZnkgdGhlIG5ldHdvcmstbGV2ZWwgcGVlciwgd2hpY2ggbWF5IGJlIGEgcHJveHkuXG5cblRoaXMgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQgd2hlbiBhIHNvdXJjZSBvZiBpbmZvcm1hdGlvbiBkaWZmZXJlbnRcbmZyb20gdGhlIG9uZSB1c2VkIGZvciBgbmV0LnBlZXIuaXBgLCBpcyBhdmFpbGFibGUgZXZlbiBpZiB0aGF0IG90aGVyXG5zb3VyY2UganVzdCBjb25maXJtcyB0aGUgc2FtZSB2YWx1ZSBhcyBgbmV0LnBlZXIuaXBgLlxuUmF0aW9uYWxlOiBGb3IgYG5ldC5wZWVyLmlwYCwgb25lIHR5cGljYWxseSBkb2VzIG5vdCBrbm93IGlmIGl0XG5jb21lcyBmcm9tIGEgcHJveHksIHJldmVyc2UgcHJveHksIG9yIHRoZSBhY3R1YWwgY2xpZW50LiBTZXR0aW5nXG5gaHR0cC5jbGllbnRfaXBgIHdoZW4gaXQmIzM5O3MgdGhlIHNhbWUgYXMgYG5ldC5wZWVyLmlwYCBtZWFucyB0aGF0XG5vbmUgaXMgYXQgbGVhc3Qgc29tZXdoYXQgY29uZmlkZW50IHRoYXQgdGhlIGFkZHJlc3MgaXMgbm90IHRoYXQgb2ZcbnRoZSBjbG9zZXN0IHByb3h5LlxuKlxuKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IVFRQX0NMSUVOVF9JUCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuKi9cbmV4cG9ydHMuU0VNQVRUUlNfSFRUUF9DTElFTlRfSVAgPSBUTVBfSFRUUF9DTElFTlRfSVA7XG4vKipcbiAqIFRoZSBrZXlzIGluIHRoZSBgUmVxdWVzdEl0ZW1zYCBvYmplY3QgZmllbGQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX1RBQkxFX05BTUVTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX1RBQkxFX05BTUVTID0gVE1QX0FXU19EWU5BTU9EQl9UQUJMRV9OQU1FUztcbi8qKlxuICogVGhlIEpTT04tc2VyaWFsaXplZCB2YWx1ZSBvZiBlYWNoIGl0ZW0gaW4gdGhlIGBDb25zdW1lZENhcGFjaXR5YCByZXNwb25zZSBmaWVsZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfQ09OU1VNRURfQ0FQQUNJVFkgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfQ09OU1VNRURfQ0FQQUNJVFkgPSBUTVBfQVdTX0RZTkFNT0RCX0NPTlNVTUVEX0NBUEFDSVRZO1xuLyoqXG4gKiBUaGUgSlNPTi1zZXJpYWxpemVkIHZhbHVlIG9mIHRoZSBgSXRlbUNvbGxlY3Rpb25NZXRyaWNzYCByZXNwb25zZSBmaWVsZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfSVRFTV9DT0xMRUNUSU9OX01FVFJJQ1MgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfSVRFTV9DT0xMRUNUSU9OX01FVFJJQ1MgPSBUTVBfQVdTX0RZTkFNT0RCX0lURU1fQ09MTEVDVElPTl9NRVRSSUNTO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBQcm92aXNpb25lZFRocm91Z2hwdXQuUmVhZENhcGFjaXR5VW5pdHNgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19EWU5BTU9EQl9QUk9WSVNJT05FRF9SRUFEX0NBUEFDSVRZIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1JFQURfQ0FQQUNJVFkgPSBUTVBfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1JFQURfQ0FQQUNJVFk7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYFByb3Zpc2lvbmVkVGhyb3VnaHB1dC5Xcml0ZUNhcGFjaXR5VW5pdHNgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19EWU5BTU9EQl9QUk9WSVNJT05FRF9XUklURV9DQVBBQ0lUWSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9QUk9WSVNJT05FRF9XUklURV9DQVBBQ0lUWSA9IFRNUF9BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfV1JJVEVfQ0FQQUNJVFk7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYENvbnNpc3RlbnRSZWFkYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfQ09OU0lTVEVOVF9SRUFEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0NPTlNJU1RFTlRfUkVBRCA9IFRNUF9BV1NfRFlOQU1PREJfQ09OU0lTVEVOVF9SRUFEO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBQcm9qZWN0aW9uRXhwcmVzc2lvbmAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX1BST0pFQ1RJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfUFJPSkVDVElPTiA9IFRNUF9BV1NfRFlOQU1PREJfUFJPSkVDVElPTjtcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgTGltaXRgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19EWU5BTU9EQl9MSU1JVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9MSU1JVCA9IFRNUF9BV1NfRFlOQU1PREJfTElNSVQ7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYEF0dHJpYnV0ZXNUb0dldGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX0FUVFJJQlVURVNfVE9fR0VUIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0FUVFJJQlVURVNfVE9fR0VUID0gVE1QX0FXU19EWU5BTU9EQl9BVFRSSUJVVEVTX1RPX0dFVDtcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgSW5kZXhOYW1lYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfSU5ERVhfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9JTkRFWF9OQU1FID0gVE1QX0FXU19EWU5BTU9EQl9JTkRFWF9OQU1FO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBTZWxlY3RgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19EWU5BTU9EQl9TRUxFQ1QgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfU0VMRUNUID0gVE1QX0FXU19EWU5BTU9EQl9TRUxFQ1Q7XG4vKipcbiAqIFRoZSBKU09OLXNlcmlhbGl6ZWQgdmFsdWUgb2YgZWFjaCBpdGVtIG9mIHRoZSBgR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc2AgcmVxdWVzdCBmaWVsZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWEVTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0dMT0JBTF9TRUNPTkRBUllfSU5ERVhFUyA9IFRNUF9BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWEVTO1xuLyoqXG4gKiBUaGUgSlNPTi1zZXJpYWxpemVkIHZhbHVlIG9mIGVhY2ggaXRlbSBvZiB0aGUgYExvY2FsU2Vjb25kYXJ5SW5kZXhlc2AgcmVxdWVzdCBmaWVsZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfTE9DQUxfU0VDT05EQVJZX0lOREVYRVMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfTE9DQUxfU0VDT05EQVJZX0lOREVYRVMgPSBUTVBfQVdTX0RZTkFNT0RCX0xPQ0FMX1NFQ09OREFSWV9JTkRFWEVTO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBFeGNsdXNpdmVTdGFydFRhYmxlTmFtZWAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX0VYQ0xVU0lWRV9TVEFSVF9UQUJMRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9FWENMVVNJVkVfU1RBUlRfVEFCTEUgPSBUTVBfQVdTX0RZTkFNT0RCX0VYQ0xVU0lWRV9TVEFSVF9UQUJMRTtcbi8qKlxuICogVGhlIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGBUYWJsZU5hbWVzYCByZXNwb25zZSBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX1RBQkxFX0NPVU5UIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX1RBQkxFX0NPVU5UID0gVE1QX0FXU19EWU5BTU9EQl9UQUJMRV9DT1VOVDtcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgU2NhbkluZGV4Rm9yd2FyZGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX1NDQU5fRk9SV0FSRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9TQ0FOX0ZPUldBUkQgPSBUTVBfQVdTX0RZTkFNT0RCX1NDQU5fRk9SV0FSRDtcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgU2VnbWVudGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX1NFR01FTlQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfU0VHTUVOVCA9IFRNUF9BV1NfRFlOQU1PREJfU0VHTUVOVDtcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgVG90YWxTZWdtZW50c2AgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0RZTkFNT0RCX1RPVEFMX1NFR01FTlRTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX1RPVEFMX1NFR01FTlRTID0gVE1QX0FXU19EWU5BTU9EQl9UT1RBTF9TRUdNRU5UUztcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgQ291bnRgIHJlc3BvbnNlIHBhcmFtZXRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfQ09VTlQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfQ09VTlQgPSBUTVBfQVdTX0RZTkFNT0RCX0NPVU5UO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBTY2FubmVkQ291bnRgIHJlc3BvbnNlIHBhcmFtZXRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfU0NBTk5FRF9DT1VOVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX0FXU19EWU5BTU9EQl9TQ0FOTkVEX0NPVU5UID0gVE1QX0FXU19EWU5BTU9EQl9TQ0FOTkVEX0NPVU5UO1xuLyoqXG4gKiBUaGUgSlNPTi1zZXJpYWxpemVkIHZhbHVlIG9mIGVhY2ggaXRlbSBpbiB0aGUgYEF0dHJpYnV0ZURlZmluaXRpb25zYCByZXF1ZXN0IGZpZWxkLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19EWU5BTU9EQl9BVFRSSUJVVEVfREVGSU5JVElPTlMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19BV1NfRFlOQU1PREJfQVRUUklCVVRFX0RFRklOSVRJT05TID0gVE1QX0FXU19EWU5BTU9EQl9BVFRSSUJVVEVfREVGSU5JVElPTlM7XG4vKipcbiAqIFRoZSBKU09OLXNlcmlhbGl6ZWQgdmFsdWUgb2YgZWFjaCBpdGVtIGluIHRoZSB0aGUgYEdsb2JhbFNlY29uZGFyeUluZGV4VXBkYXRlc2AgcmVxdWVzdCBmaWVsZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWF9VUERBVEVTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfQVdTX0RZTkFNT0RCX0dMT0JBTF9TRUNPTkRBUllfSU5ERVhfVVBEQVRFUyA9IFRNUF9BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWF9VUERBVEVTO1xuLyoqXG4gKiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgbWVzc2FnaW5nIHN5c3RlbS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfU1lTVEVNIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX1NZU1RFTSA9IFRNUF9NRVNTQUdJTkdfU1lTVEVNO1xuLyoqXG4gKiBUaGUgbWVzc2FnZSBkZXN0aW5hdGlvbiBuYW1lLiBUaGlzIG1pZ2h0IGJlIGVxdWFsIHRvIHRoZSBzcGFuIG5hbWUgYnV0IGlzIHJlcXVpcmVkIG5ldmVydGhlbGVzcy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19ERVNUSU5BVElPTiA9IFRNUF9NRVNTQUdJTkdfREVTVElOQVRJT047XG4vKipcbiAqIFRoZSBraW5kIG9mIG1lc3NhZ2UgZGVzdGluYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiBzZW1jb252IHYxLjIwLjAuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkQgPSBUTVBfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkQ7XG4vKipcbiAqIEEgYm9vbGVhbiB0aGF0IGlzIHRydWUgaWYgdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24gaXMgdGVtcG9yYXJ5LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9URU1QT1JBUlkgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfVEVNUF9ERVNUSU5BVElPTiA9IFRNUF9NRVNTQUdJTkdfVEVNUF9ERVNUSU5BVElPTjtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHRyYW5zcG9ydCBwcm90b2NvbC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9ORVRXT1JLX1BST1RPQ09MX05BTUUuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX1BST1RPQ09MID0gVE1QX01FU1NBR0lOR19QUk9UT0NPTDtcbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHRyYW5zcG9ydCBwcm90b2NvbC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9ORVRXT1JLX1BST1RPQ09MX1ZFUlNJT04uXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX1BST1RPQ09MX1ZFUlNJT04gPSBUTVBfTUVTU0FHSU5HX1BST1RPQ09MX1ZFUlNJT047XG4vKipcbiAqIENvbm5lY3Rpb24gc3RyaW5nLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gc2VtY29udiB2MS4xNy4wLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19VUkwgPSBUTVBfTUVTU0FHSU5HX1VSTDtcbi8qKlxuICogQSB2YWx1ZSB1c2VkIGJ5IHRoZSBtZXNzYWdpbmcgc3lzdGVtIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBtZXNzYWdlLCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfTUVTU0FHRV9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19NRVNTQUdFX0lEID0gVE1QX01FU1NBR0lOR19NRVNTQUdFX0lEO1xuLyoqXG4gKiBUaGUgW2NvbnZlcnNhdGlvbiBJRF0oI2NvbnZlcnNhdGlvbnMpIGlkZW50aWZ5aW5nIHRoZSBjb252ZXJzYXRpb24gdG8gd2hpY2ggdGhlIG1lc3NhZ2UgYmVsb25ncywgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuIFNvbWV0aW1lcyBjYWxsZWQgJiMzNDtDb3JyZWxhdGlvbiBJRCYjMzQ7LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX01FU1NBR0lOR19NRVNTQUdFX0NPTlZFUlNBVElPTl9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19DT05WRVJTQVRJT05fSUQgPSBUTVBfTUVTU0FHSU5HX0NPTlZFUlNBVElPTl9JRDtcbi8qKlxuICogVGhlICh1bmNvbXByZXNzZWQpIHNpemUgb2YgdGhlIG1lc3NhZ2UgcGF5bG9hZCBpbiBieXRlcy4gQWxzbyB1c2UgdGhpcyBhdHRyaWJ1dGUgaWYgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRoZSBjb21wcmVzc2VkIG9yIHVuY29tcHJlc3NlZCBwYXlsb2FkIHNpemUgaXMgcmVwb3J0ZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHSU5HX01FU1NBR0VfQk9EWV9TSVpFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX01FU1NBR0VfUEFZTE9BRF9TSVpFX0JZVEVTID0gVE1QX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfU0laRV9CWVRFUztcbi8qKlxuICogVGhlIGNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgbWVzc2FnZSBwYXlsb2FkIGluIGJ5dGVzLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gc2VtY29udiB2MS4yMi4wLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfQ09NUFJFU1NFRF9TSVpFX0JZVEVTID0gVE1QX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfQ09NUFJFU1NFRF9TSVpFX0JZVEVTO1xuLyoqXG4gKiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUga2luZCBvZiBtZXNzYWdlIGNvbnN1bXB0aW9uIGFzIGRlZmluZWQgaW4gdGhlIFtPcGVyYXRpb24gbmFtZXNdKCNvcGVyYXRpb24tbmFtZXMpIHNlY3Rpb24gYWJvdmUuIElmIHRoZSBvcGVyYXRpb24gaXMgJiMzNDtzZW5kJiMzNDssIHRoaXMgYXR0cmlidXRlIE1VU1QgTk9UIGJlIHNldCwgc2luY2UgdGhlIG9wZXJhdGlvbiBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgc3BhbiBraW5kIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX09QRVJBVElPTiA9IFRNUF9NRVNTQUdJTkdfT1BFUkFUSU9OO1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnN1bWVyIHJlY2VpdmluZyBhIG1lc3NhZ2UuIEZvciBLYWZrYSwgc2V0IGl0IHRvIGB7bWVzc2FnaW5nLmthZmthLmNvbnN1bWVyX2dyb3VwfSAtIHttZXNzYWdpbmcua2Fma2EuY2xpZW50X2lkfWAsIGlmIGJvdGggYXJlIHByZXNlbnQsIG9yIG9ubHkgYG1lc3NhZ2luZy5rYWZrYS5jb25zdW1lcl9ncm91cGAuIEZvciBicm9rZXJzLCBzdWNoIGFzIFJhYmJpdE1RIGFuZCBBcnRlbWlzLCBzZXQgaXQgdG8gdGhlIGBjbGllbnRfaWRgIG9mIHRoZSBjbGllbnQgY29uc3VtaW5nIHRoZSBtZXNzYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gc2VtY29udiB2MS4yMS4wLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0lOR19DT05TVU1FUl9JRCA9IFRNUF9NRVNTQUdJTkdfQ09OU1VNRVJfSUQ7XG4vKipcbiAqIFJhYmJpdE1RIG1lc3NhZ2Ugcm91dGluZyBrZXkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHSU5HX1JBQkJJVE1RX0RFU1RJTkFUSU9OX1JPVVRJTkdfS0VZIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX1JBQkJJVE1RX1JPVVRJTkdfS0VZID0gVE1QX01FU1NBR0lOR19SQUJCSVRNUV9ST1VUSU5HX0tFWTtcbi8qKlxuICogTWVzc2FnZSBrZXlzIGluIEthZmthIGFyZSB1c2VkIGZvciBncm91cGluZyBhbGlrZSBtZXNzYWdlcyB0byBlbnN1cmUgdGhleSYjMzk7cmUgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIHBhcnRpdGlvbi4gVGhleSBkaWZmZXIgZnJvbSBgbWVzc2FnaW5nLm1lc3NhZ2VfaWRgIGluIHRoYXQgdGhleSYjMzk7cmUgbm90IHVuaXF1ZS4gSWYgdGhlIGtleSBpcyBgbnVsbGAsIHRoZSBhdHRyaWJ1dGUgTVVTVCBOT1QgYmUgc2V0LlxuICpcbiAqIE5vdGU6IElmIHRoZSBrZXkgdHlwZSBpcyBub3Qgc3RyaW5nLCBpdCYjMzk7cyBzdHJpbmcgcmVwcmVzZW50YXRpb24gaGFzIHRvIGJlIHN1cHBsaWVkIGZvciB0aGUgYXR0cmlidXRlLiBJZiB0aGUga2V5IGhhcyBubyB1bmFtYmlndW91cywgY2Fub25pY2FsIHN0cmluZyBmb3JtLCBkb24mIzM5O3QgaW5jbHVkZSBpdHMgdmFsdWUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHSU5HX0tBRktBX01FU1NBR0VfS0VZIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX0tBRktBX01FU1NBR0VfS0VZID0gVE1QX01FU1NBR0lOR19LQUZLQV9NRVNTQUdFX0tFWTtcbi8qKlxuICogTmFtZSBvZiB0aGUgS2Fma2EgQ29uc3VtZXIgR3JvdXAgdGhhdCBpcyBoYW5kbGluZyB0aGUgbWVzc2FnZS4gT25seSBhcHBsaWVzIHRvIGNvbnN1bWVycywgbm90IHByb2R1Y2Vycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfS0FGS0FfQ09OU1VNRVJfR1JPVVAgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfQ09OU1VNRVJfR1JPVVAgPSBUTVBfTUVTU0FHSU5HX0tBRktBX0NPTlNVTUVSX0dST1VQO1xuLyoqXG4gKiBDbGllbnQgSWQgZm9yIHRoZSBDb25zdW1lciBvciBQcm9kdWNlciB0aGF0IGlzIGhhbmRsaW5nIHRoZSBtZXNzYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX01FU1NBR0lOR19DTElFTlRfSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfQ0xJRU5UX0lEID0gVE1QX01FU1NBR0lOR19LQUZLQV9DTElFTlRfSUQ7XG4vKipcbiAqIFBhcnRpdGlvbiB0aGUgbWVzc2FnZSBpcyBzZW50IHRvLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX01FU1NBR0lOR19LQUZLQV9ERVNUSU5BVElPTl9QQVJUSVRJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdJTkdfS0FGS0FfUEFSVElUSU9OID0gVE1QX01FU1NBR0lOR19LQUZLQV9QQVJUSVRJT047XG4vKipcbiAqIEEgYm9vbGVhbiB0aGF0IGlzIHRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgYSB0b21ic3RvbmUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHSU5HX0tBRktBX01FU1NBR0VfVE9NQlNUT05FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHSU5HX0tBRktBX1RPTUJTVE9ORSA9IFRNUF9NRVNTQUdJTkdfS0FGS0FfVE9NQlNUT05FO1xuLyoqXG4gKiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgcmVtb3Rpbmcgc3lzdGVtLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1JQQ19TWVNURU0gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19SUENfU1lTVEVNID0gVE1QX1JQQ19TWVNURU07XG4vKipcbiAqIFRoZSBmdWxsIChsb2dpY2FsKSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGJlaW5nIGNhbGxlZCwgaW5jbHVkaW5nIGl0cyBwYWNrYWdlIG5hbWUsIGlmIGFwcGxpY2FibGUuXG4gKlxuICogTm90ZTogVGhpcyBpcyB0aGUgbG9naWNhbCBuYW1lIG9mIHRoZSBzZXJ2aWNlIGZyb20gdGhlIFJQQyBpbnRlcmZhY2UgcGVyc3BlY3RpdmUsIHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiBhbnkgaW1wbGVtZW50aW5nIGNsYXNzLiBUaGUgYGNvZGUubmFtZXNwYWNlYCBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gc3RvcmUgdGhlIGxhdHRlciAoZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5hbWUsIGl0IG1heSBpbmNsdWRlIGEgY2xhc3MgbmFtZTsgZS5nLiwgY2xhc3Mgd2l0aCBtZXRob2QgYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBjYWxsIG9uIHRoZSBzZXJ2ZXIgc2lkZSwgUlBDIGNsaWVudCBzdHViIGNsYXNzIG9uIHRoZSBjbGllbnQgc2lkZSkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUlBDX1NFUlZJQ0UgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19SUENfU0VSVklDRSA9IFRNUF9SUENfU0VSVklDRTtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIChsb2dpY2FsKSBtZXRob2QgYmVpbmcgY2FsbGVkLCBtdXN0IGJlIGVxdWFsIHRvIHRoZSAkbWV0aG9kIHBhcnQgaW4gdGhlIHNwYW4gbmFtZS5cbiAqXG4gKiBOb3RlOiBUaGlzIGlzIHRoZSBsb2dpY2FsIG5hbWUgb2YgdGhlIG1ldGhvZCBmcm9tIHRoZSBSUEMgaW50ZXJmYWNlIHBlcnNwZWN0aXZlLCB3aGljaCBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgYW55IGltcGxlbWVudGluZyBtZXRob2QvZnVuY3Rpb24uIFRoZSBgY29kZS5mdW5jdGlvbmAgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIHN0b3JlIHRoZSBsYXR0ZXIgKGUuZy4sIG1ldGhvZCBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGNhbGwgb24gdGhlIHNlcnZlciBzaWRlLCBSUEMgY2xpZW50IHN0dWIgbWV0aG9kIG9uIHRoZSBjbGllbnQgc2lkZSkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUlBDX01FVEhPRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX1JQQ19NRVRIT0QgPSBUTVBfUlBDX01FVEhPRDtcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUlBDX0dSUENfU1RBVFVTX0NPREUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19SUENfR1JQQ19TVEFUVVNfQ09ERSA9IFRNUF9SUENfR1JQQ19TVEFUVVNfQ09ERTtcbi8qKlxuICogUHJvdG9jb2wgdmVyc2lvbiBhcyBpbiBganNvbnJwY2AgcHJvcGVydHkgb2YgcmVxdWVzdC9yZXNwb25zZS4gU2luY2UgSlNPTi1SUEMgMS4wIGRvZXMgbm90IHNwZWNpZnkgdGhpcywgdGhlIHZhbHVlIGNhbiBiZSBvbWl0dGVkLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1JQQ19KU09OUlBDX1ZFUlNJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19SUENfSlNPTlJQQ19WRVJTSU9OID0gVE1QX1JQQ19KU09OUlBDX1ZFUlNJT047XG4vKipcbiAqIGBpZGAgcHJvcGVydHkgb2YgcmVxdWVzdCBvciByZXNwb25zZS4gU2luY2UgcHJvdG9jb2wgYWxsb3dzIGlkIHRvIGJlIGludCwgc3RyaW5nLCBgbnVsbGAgb3IgbWlzc2luZyAoZm9yIG5vdGlmaWNhdGlvbnMpLCB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBjYXN0IHRvIHN0cmluZyBmb3Igc2ltcGxpY2l0eS4gVXNlIGVtcHR5IHN0cmluZyBpbiBjYXNlIG9mIGBudWxsYCB2YWx1ZS4gT21pdCBlbnRpcmVseSBpZiB0aGlzIGlzIGEgbm90aWZpY2F0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1JQQ19KU09OUlBDX1JFUVVFU1RfSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19SUENfSlNPTlJQQ19SRVFVRVNUX0lEID0gVE1QX1JQQ19KU09OUlBDX1JFUVVFU1RfSUQ7XG4vKipcbiAqIGBlcnJvci5jb2RlYCBwcm9wZXJ0eSBvZiByZXNwb25zZSBpZiBpdCBpcyBhbiBlcnJvciByZXNwb25zZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9SUENfSlNPTlJQQ19FUlJPUl9DT0RFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfUlBDX0pTT05SUENfRVJST1JfQ09ERSA9IFRNUF9SUENfSlNPTlJQQ19FUlJPUl9DT0RFO1xuLyoqXG4gKiBgZXJyb3IubWVzc2FnZWAgcHJvcGVydHkgb2YgcmVzcG9uc2UgaWYgaXQgaXMgYW4gZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUlBDX0pTT05SUENfRVJST1JfTUVTU0FHRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX1JQQ19KU09OUlBDX0VSUk9SX01FU1NBR0UgPSBUTVBfUlBDX0pTT05SUENfRVJST1JfTUVTU0FHRTtcbi8qKlxuICogV2hldGhlciB0aGlzIGlzIGEgcmVjZWl2ZWQgb3Igc2VudCBtZXNzYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX01FU1NBR0VfVFlQRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0VfVFlQRSA9IFRNUF9NRVNTQUdFX1RZUEU7XG4vKipcbiAqIE1VU1QgYmUgY2FsY3VsYXRlZCBhcyB0d28gZGlmZmVyZW50IGNvdW50ZXJzIHN0YXJ0aW5nIGZyb20gYDFgIG9uZSBmb3Igc2VudCBtZXNzYWdlcyBhbmQgb25lIGZvciByZWNlaXZlZCBtZXNzYWdlLlxuICpcbiAqIE5vdGU6IFRoaXMgd2F5IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSB2YWx1ZXMgd2lsbCBiZSBjb25zaXN0ZW50IGJldHdlZW4gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdFX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNQVRUUlNfTUVTU0FHRV9JRCA9IFRNUF9NRVNTQUdFX0lEO1xuLyoqXG4gKiBDb21wcmVzc2VkIHNpemUgb2YgdGhlIG1lc3NhZ2UgaW4gYnl0ZXMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHRV9DT01QUkVTU0VEX1NJWkUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1BVFRSU19NRVNTQUdFX0NPTVBSRVNTRURfU0laRSA9IFRNUF9NRVNTQUdFX0NPTVBSRVNTRURfU0laRTtcbi8qKlxuICogVW5jb21wcmVzc2VkIHNpemUgb2YgdGhlIG1lc3NhZ2UgaW4gYnl0ZXMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHRV9VTkNPTVBSRVNTRURfU0laRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTUFUVFJTX01FU1NBR0VfVU5DT01QUkVTU0VEX1NJWkUgPSBUTVBfTUVTU0FHRV9VTkNPTVBSRVNTRURfU0laRTtcbi8qKlxuICogQ3JlYXRlIGV4cG9ydGVkIFZhbHVlIE1hcCBmb3IgU2VtYW50aWNBdHRyaWJ1dGVzIHZhbHVlc1xuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBTRU1BVFRSU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIFNlbWFudGljQXR0cmlidXRlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvblxuICovXG5leHBvcnRzLlNlbWFudGljQXR0cmlidXRlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9BV1NfTEFNQkRBX0lOVk9LRURfQVJOLFxuICAgIFRNUF9EQl9TWVNURU0sXG4gICAgVE1QX0RCX0NPTk5FQ1RJT05fU1RSSU5HLFxuICAgIFRNUF9EQl9VU0VSLFxuICAgIFRNUF9EQl9KREJDX0RSSVZFUl9DTEFTU05BTUUsXG4gICAgVE1QX0RCX05BTUUsXG4gICAgVE1QX0RCX1NUQVRFTUVOVCxcbiAgICBUTVBfREJfT1BFUkFUSU9OLFxuICAgIFRNUF9EQl9NU1NRTF9JTlNUQU5DRV9OQU1FLFxuICAgIFRNUF9EQl9DQVNTQU5EUkFfS0VZU1BBQ0UsXG4gICAgVE1QX0RCX0NBU1NBTkRSQV9QQUdFX1NJWkUsXG4gICAgVE1QX0RCX0NBU1NBTkRSQV9DT05TSVNURU5DWV9MRVZFTCxcbiAgICBUTVBfREJfQ0FTU0FORFJBX1RBQkxFLFxuICAgIFRNUF9EQl9DQVNTQU5EUkFfSURFTVBPVEVOQ0UsXG4gICAgVE1QX0RCX0NBU1NBTkRSQV9TUEVDVUxBVElWRV9FWEVDVVRJT05fQ09VTlQsXG4gICAgVE1QX0RCX0NBU1NBTkRSQV9DT09SRElOQVRPUl9JRCxcbiAgICBUTVBfREJfQ0FTU0FORFJBX0NPT1JESU5BVE9SX0RDLFxuICAgIFRNUF9EQl9IQkFTRV9OQU1FU1BBQ0UsXG4gICAgVE1QX0RCX1JFRElTX0RBVEFCQVNFX0lOREVYLFxuICAgIFRNUF9EQl9NT05HT0RCX0NPTExFQ1RJT04sXG4gICAgVE1QX0RCX1NRTF9UQUJMRSxcbiAgICBUTVBfRVhDRVBUSU9OX1RZUEUsXG4gICAgVE1QX0VYQ0VQVElPTl9NRVNTQUdFLFxuICAgIFRNUF9FWENFUFRJT05fU1RBQ0tUUkFDRSxcbiAgICBUTVBfRVhDRVBUSU9OX0VTQ0FQRUQsXG4gICAgVE1QX0ZBQVNfVFJJR0dFUixcbiAgICBUTVBfRkFBU19FWEVDVVRJT04sXG4gICAgVE1QX0ZBQVNfRE9DVU1FTlRfQ09MTEVDVElPTixcbiAgICBUTVBfRkFBU19ET0NVTUVOVF9PUEVSQVRJT04sXG4gICAgVE1QX0ZBQVNfRE9DVU1FTlRfVElNRSxcbiAgICBUTVBfRkFBU19ET0NVTUVOVF9OQU1FLFxuICAgIFRNUF9GQUFTX1RJTUUsXG4gICAgVE1QX0ZBQVNfQ1JPTixcbiAgICBUTVBfRkFBU19DT0xEU1RBUlQsXG4gICAgVE1QX0ZBQVNfSU5WT0tFRF9OQU1FLFxuICAgIFRNUF9GQUFTX0lOVk9LRURfUFJPVklERVIsXG4gICAgVE1QX0ZBQVNfSU5WT0tFRF9SRUdJT04sXG4gICAgVE1QX05FVF9UUkFOU1BPUlQsXG4gICAgVE1QX05FVF9QRUVSX0lQLFxuICAgIFRNUF9ORVRfUEVFUl9QT1JULFxuICAgIFRNUF9ORVRfUEVFUl9OQU1FLFxuICAgIFRNUF9ORVRfSE9TVF9JUCxcbiAgICBUTVBfTkVUX0hPU1RfUE9SVCxcbiAgICBUTVBfTkVUX0hPU1RfTkFNRSxcbiAgICBUTVBfTkVUX0hPU1RfQ09OTkVDVElPTl9UWVBFLFxuICAgIFRNUF9ORVRfSE9TVF9DT05ORUNUSU9OX1NVQlRZUEUsXG4gICAgVE1QX05FVF9IT1NUX0NBUlJJRVJfTkFNRSxcbiAgICBUTVBfTkVUX0hPU1RfQ0FSUklFUl9NQ0MsXG4gICAgVE1QX05FVF9IT1NUX0NBUlJJRVJfTU5DLFxuICAgIFRNUF9ORVRfSE9TVF9DQVJSSUVSX0lDQyxcbiAgICBUTVBfUEVFUl9TRVJWSUNFLFxuICAgIFRNUF9FTkRVU0VSX0lELFxuICAgIFRNUF9FTkRVU0VSX1JPTEUsXG4gICAgVE1QX0VORFVTRVJfU0NPUEUsXG4gICAgVE1QX1RIUkVBRF9JRCxcbiAgICBUTVBfVEhSRUFEX05BTUUsXG4gICAgVE1QX0NPREVfRlVOQ1RJT04sXG4gICAgVE1QX0NPREVfTkFNRVNQQUNFLFxuICAgIFRNUF9DT0RFX0ZJTEVQQVRILFxuICAgIFRNUF9DT0RFX0xJTkVOTyxcbiAgICBUTVBfSFRUUF9NRVRIT0QsXG4gICAgVE1QX0hUVFBfVVJMLFxuICAgIFRNUF9IVFRQX1RBUkdFVCxcbiAgICBUTVBfSFRUUF9IT1NULFxuICAgIFRNUF9IVFRQX1NDSEVNRSxcbiAgICBUTVBfSFRUUF9TVEFUVVNfQ09ERSxcbiAgICBUTVBfSFRUUF9GTEFWT1IsXG4gICAgVE1QX0hUVFBfVVNFUl9BR0VOVCxcbiAgICBUTVBfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RILFxuICAgIFRNUF9IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VELFxuICAgIFRNUF9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RILFxuICAgIFRNUF9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCxcbiAgICBUTVBfSFRUUF9TRVJWRVJfTkFNRSxcbiAgICBUTVBfSFRUUF9ST1VURSxcbiAgICBUTVBfSFRUUF9DTElFTlRfSVAsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9UQUJMRV9OQU1FUyxcbiAgICBUTVBfQVdTX0RZTkFNT0RCX0NPTlNVTUVEX0NBUEFDSVRZLFxuICAgIFRNUF9BV1NfRFlOQU1PREJfSVRFTV9DT0xMRUNUSU9OX01FVFJJQ1MsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9QUk9WSVNJT05FRF9SRUFEX0NBUEFDSVRZLFxuICAgIFRNUF9BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfV1JJVEVfQ0FQQUNJVFksXG4gICAgVE1QX0FXU19EWU5BTU9EQl9DT05TSVNURU5UX1JFQUQsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9QUk9KRUNUSU9OLFxuICAgIFRNUF9BV1NfRFlOQU1PREJfTElNSVQsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9BVFRSSUJVVEVTX1RPX0dFVCxcbiAgICBUTVBfQVdTX0RZTkFNT0RCX0lOREVYX05BTUUsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9TRUxFQ1QsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9HTE9CQUxfU0VDT05EQVJZX0lOREVYRVMsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9MT0NBTF9TRUNPTkRBUllfSU5ERVhFUyxcbiAgICBUTVBfQVdTX0RZTkFNT0RCX0VYQ0xVU0lWRV9TVEFSVF9UQUJMRSxcbiAgICBUTVBfQVdTX0RZTkFNT0RCX1RBQkxFX0NPVU5ULFxuICAgIFRNUF9BV1NfRFlOQU1PREJfU0NBTl9GT1JXQVJELFxuICAgIFRNUF9BV1NfRFlOQU1PREJfU0VHTUVOVCxcbiAgICBUTVBfQVdTX0RZTkFNT0RCX1RPVEFMX1NFR01FTlRTLFxuICAgIFRNUF9BV1NfRFlOQU1PREJfQ09VTlQsXG4gICAgVE1QX0FXU19EWU5BTU9EQl9TQ0FOTkVEX0NPVU5ULFxuICAgIFRNUF9BV1NfRFlOQU1PREJfQVRUUklCVVRFX0RFRklOSVRJT05TLFxuICAgIFRNUF9BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWF9VUERBVEVTLFxuICAgIFRNUF9NRVNTQUdJTkdfU1lTVEVNLFxuICAgIFRNUF9NRVNTQUdJTkdfREVTVElOQVRJT04sXG4gICAgVE1QX01FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5ELFxuICAgIFRNUF9NRVNTQUdJTkdfVEVNUF9ERVNUSU5BVElPTixcbiAgICBUTVBfTUVTU0FHSU5HX1BST1RPQ09MLFxuICAgIFRNUF9NRVNTQUdJTkdfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBUTVBfTUVTU0FHSU5HX1VSTCxcbiAgICBUTVBfTUVTU0FHSU5HX01FU1NBR0VfSUQsXG4gICAgVE1QX01FU1NBR0lOR19DT05WRVJTQVRJT05fSUQsXG4gICAgVE1QX01FU1NBR0lOR19NRVNTQUdFX1BBWUxPQURfU0laRV9CWVRFUyxcbiAgICBUTVBfTUVTU0FHSU5HX01FU1NBR0VfUEFZTE9BRF9DT01QUkVTU0VEX1NJWkVfQllURVMsXG4gICAgVE1QX01FU1NBR0lOR19PUEVSQVRJT04sXG4gICAgVE1QX01FU1NBR0lOR19DT05TVU1FUl9JRCxcbiAgICBUTVBfTUVTU0FHSU5HX1JBQkJJVE1RX1JPVVRJTkdfS0VZLFxuICAgIFRNUF9NRVNTQUdJTkdfS0FGS0FfTUVTU0FHRV9LRVksXG4gICAgVE1QX01FU1NBR0lOR19LQUZLQV9DT05TVU1FUl9HUk9VUCxcbiAgICBUTVBfTUVTU0FHSU5HX0tBRktBX0NMSUVOVF9JRCxcbiAgICBUTVBfTUVTU0FHSU5HX0tBRktBX1BBUlRJVElPTixcbiAgICBUTVBfTUVTU0FHSU5HX0tBRktBX1RPTUJTVE9ORSxcbiAgICBUTVBfUlBDX1NZU1RFTSxcbiAgICBUTVBfUlBDX1NFUlZJQ0UsXG4gICAgVE1QX1JQQ19NRVRIT0QsXG4gICAgVE1QX1JQQ19HUlBDX1NUQVRVU19DT0RFLFxuICAgIFRNUF9SUENfSlNPTlJQQ19WRVJTSU9OLFxuICAgIFRNUF9SUENfSlNPTlJQQ19SRVFVRVNUX0lELFxuICAgIFRNUF9SUENfSlNPTlJQQ19FUlJPUl9DT0RFLFxuICAgIFRNUF9SUENfSlNPTlJQQ19FUlJPUl9NRVNTQUdFLFxuICAgIFRNUF9NRVNTQUdFX1RZUEUsXG4gICAgVE1QX01FU1NBR0VfSUQsXG4gICAgVE1QX01FU1NBR0VfQ09NUFJFU1NFRF9TSVpFLFxuICAgIFRNUF9NRVNTQUdFX1VOQ09NUFJFU1NFRF9TSVpFLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIERiU3lzdGVtVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19PVEhFUl9TUUwgPSAnb3RoZXJfc3FsJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19NU1NRTCA9ICdtc3NxbCc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfTVlTUUwgPSAnbXlzcWwnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX09SQUNMRSA9ICdvcmFjbGUnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0RCMiA9ICdkYjInO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1BPU1RHUkVTUUwgPSAncG9zdGdyZXNxbCc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfUkVEU0hJRlQgPSAncmVkc2hpZnQnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0hJVkUgPSAnaGl2ZSc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfQ0xPVURTQ0FQRSA9ICdjbG91ZHNjYXBlJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19IU1FMREIgPSAnaHNxbGRiJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19QUk9HUkVTUyA9ICdwcm9ncmVzcyc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfTUFYREIgPSAnbWF4ZGInO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0hBTkFEQiA9ICdoYW5hZGInO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0lOR1JFUyA9ICdpbmdyZXMnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0ZJUlNUU1FMID0gJ2ZpcnN0c3FsJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19FREIgPSAnZWRiJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19DQUNIRSA9ICdjYWNoZSc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfQURBQkFTID0gJ2FkYWJhcyc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfRklSRUJJUkQgPSAnZmlyZWJpcmQnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0RFUkJZID0gJ2RlcmJ5JztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19GSUxFTUFLRVIgPSAnZmlsZW1ha2VyJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19JTkZPUk1JWCA9ICdpbmZvcm1peCc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfSU5TVEFOVERCID0gJ2luc3RhbnRkYic7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfSU5URVJCQVNFID0gJ2ludGVyYmFzZSc7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfTUFSSUFEQiA9ICdtYXJpYWRiJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19ORVRFWlpBID0gJ25ldGV6emEnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1BFUlZBU0lWRSA9ICdwZXJ2YXNpdmUnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1BPSU5UQkFTRSA9ICdwb2ludGJhc2UnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1NRTElURSA9ICdzcWxpdGUnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1NZQkFTRSA9ICdzeWJhc2UnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1RFUkFEQVRBID0gJ3RlcmFkYXRhJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19WRVJUSUNBID0gJ3ZlcnRpY2EnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0gyID0gJ2gyJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19DT0xERlVTSU9OID0gJ2NvbGRmdXNpb24nO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0NBU1NBTkRSQSA9ICdjYXNzYW5kcmEnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0hCQVNFID0gJ2hiYXNlJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19NT05HT0RCID0gJ21vbmdvZGInO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX1JFRElTID0gJ3JlZGlzJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19DT1VDSEJBU0UgPSAnY291Y2hiYXNlJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19DT1VDSERCID0gJ2NvdWNoZGInO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0NPU01PU0RCID0gJ2Nvc21vc2RiJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19EWU5BTU9EQiA9ICdkeW5hbW9kYic7XG5jb25zdCBUTVBfREJTWVNURU1WQUxVRVNfTkVPNEogPSAnbmVvNGonO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0dFT0RFID0gJ2dlb2RlJztcbmNvbnN0IFRNUF9EQlNZU1RFTVZBTFVFU19FTEFTVElDU0VBUkNIID0gJ2VsYXN0aWNzZWFyY2gnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX01FTUNBQ0hFRCA9ICdtZW1jYWNoZWQnO1xuY29uc3QgVE1QX0RCU1lTVEVNVkFMVUVTX0NPQ0tST0FDSERCID0gJ2NvY2tyb2FjaGRiJztcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9PVEhFUl9TUUwgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19PVEhFUl9TUUwgPSBUTVBfREJTWVNURU1WQUxVRVNfT1RIRVJfU1FMO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX01TU1FMIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfTVNTUUwgPSBUTVBfREJTWVNURU1WQUxVRVNfTVNTUUw7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfTVlTUUwgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19NWVNRTCA9IFRNUF9EQlNZU1RFTVZBTFVFU19NWVNRTDtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9PUkFDTEUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19PUkFDTEUgPSBUTVBfREJTWVNURU1WQUxVRVNfT1JBQ0xFO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0RCMiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0RCMiA9IFRNUF9EQlNZU1RFTVZBTFVFU19EQjI7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfUE9TVEdSRVNRTCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX1BPU1RHUkVTUUwgPSBUTVBfREJTWVNURU1WQUxVRVNfUE9TVEdSRVNRTDtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9SRURTSElGVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX1JFRFNISUZUID0gVE1QX0RCU1lTVEVNVkFMVUVTX1JFRFNISUZUO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0hJVkUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19ISVZFID0gVE1QX0RCU1lTVEVNVkFMVUVTX0hJVkU7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfQ0xPVURTQ0FQRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0NMT1VEU0NBUEUgPSBUTVBfREJTWVNURU1WQUxVRVNfQ0xPVURTQ0FQRTtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9IU1FMREIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19IU1FMREIgPSBUTVBfREJTWVNURU1WQUxVRVNfSFNRTERCO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX1BST0dSRVNTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfUFJPR1JFU1MgPSBUTVBfREJTWVNURU1WQUxVRVNfUFJPR1JFU1M7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfTUFYREIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19NQVhEQiA9IFRNUF9EQlNZU1RFTVZBTFVFU19NQVhEQjtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9IQU5BREIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19IQU5BREIgPSBUTVBfREJTWVNURU1WQUxVRVNfSEFOQURCO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0lOR1JFUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0lOR1JFUyA9IFRNUF9EQlNZU1RFTVZBTFVFU19JTkdSRVM7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfRklSU1RTUUwgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19GSVJTVFNRTCA9IFRNUF9EQlNZU1RFTVZBTFVFU19GSVJTVFNRTDtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9FREIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19FREIgPSBUTVBfREJTWVNURU1WQUxVRVNfRURCO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0NBQ0hFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ0FDSEUgPSBUTVBfREJTWVNURU1WQUxVRVNfQ0FDSEU7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfQURBQkFTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQURBQkFTID0gVE1QX0RCU1lTVEVNVkFMVUVTX0FEQUJBUztcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9GSVJFQklSRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0ZJUkVCSVJEID0gVE1QX0RCU1lTVEVNVkFMVUVTX0ZJUkVCSVJEO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0RFUkJZIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfREVSQlkgPSBUTVBfREJTWVNURU1WQUxVRVNfREVSQlk7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfRklMRU1BS0VSIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfRklMRU1BS0VSID0gVE1QX0RCU1lTVEVNVkFMVUVTX0ZJTEVNQUtFUjtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9JTkZPUk1JWCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0lORk9STUlYID0gVE1QX0RCU1lTVEVNVkFMVUVTX0lORk9STUlYO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0lOU1RBTlREQiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0lOU1RBTlREQiA9IFRNUF9EQlNZU1RFTVZBTFVFU19JTlNUQU5UREI7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfSU5URVJCQVNFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfSU5URVJCQVNFID0gVE1QX0RCU1lTVEVNVkFMVUVTX0lOVEVSQkFTRTtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9NQVJJQURCIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfTUFSSUFEQiA9IFRNUF9EQlNZU1RFTVZBTFVFU19NQVJJQURCO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX05FVEVaWkEgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19ORVRFWlpBID0gVE1QX0RCU1lTVEVNVkFMVUVTX05FVEVaWkE7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfUEVSVkFTSVZFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfUEVSVkFTSVZFID0gVE1QX0RCU1lTVEVNVkFMVUVTX1BFUlZBU0lWRTtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9QT0lOVEJBU0UgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19QT0lOVEJBU0UgPSBUTVBfREJTWVNURU1WQUxVRVNfUE9JTlRCQVNFO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX1NRTElURSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX1NRTElURSA9IFRNUF9EQlNZU1RFTVZBTFVFU19TUUxJVEU7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfU1lCQVNFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfU1lCQVNFID0gVE1QX0RCU1lTVEVNVkFMVUVTX1NZQkFTRTtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9URVJBREFUQSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX1RFUkFEQVRBID0gVE1QX0RCU1lTVEVNVkFMVUVTX1RFUkFEQVRBO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX1ZFUlRJQ0EgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19WRVJUSUNBID0gVE1QX0RCU1lTVEVNVkFMVUVTX1ZFUlRJQ0E7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfSDIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19IMiA9IFRNUF9EQlNZU1RFTVZBTFVFU19IMjtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9DT0xERlVTSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09MREZVU0lPTiA9IFRNUF9EQlNZU1RFTVZBTFVFU19DT0xERlVTSU9OO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0NBU1NBTkRSQSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0NBU1NBTkRSQSA9IFRNUF9EQlNZU1RFTVZBTFVFU19DQVNTQU5EUkE7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfSEJBU0UgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19IQkFTRSA9IFRNUF9EQlNZU1RFTVZBTFVFU19IQkFTRTtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9NT05HT0RCIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfTU9OR09EQiA9IFRNUF9EQlNZU1RFTVZBTFVFU19NT05HT0RCO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX1JFRElTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfUkVESVMgPSBUTVBfREJTWVNURU1WQUxVRVNfUkVESVM7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfQ09VQ0hCQVNFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09VQ0hCQVNFID0gVE1QX0RCU1lTVEVNVkFMVUVTX0NPVUNIQkFTRTtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9DT1VDSERCIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09VQ0hEQiA9IFRNUF9EQlNZU1RFTVZBTFVFU19DT1VDSERCO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0NPU01PU0RCIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09TTU9TREIgPSBUTVBfREJTWVNURU1WQUxVRVNfQ09TTU9TREI7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfRFlOQU1PREIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19EWU5BTU9EQiA9IFRNUF9EQlNZU1RFTVZBTFVFU19EWU5BTU9EQjtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9ORU80SiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX05FTzRKID0gVE1QX0RCU1lTVEVNVkFMVUVTX05FTzRKO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0dFT0RFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfR0VPREUgPSBUTVBfREJTWVNURU1WQUxVRVNfR0VPREU7XG4vKipcbiAqIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSAoREJNUykgcHJvZHVjdCBiZWluZyB1c2VkLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9TWVNURU1fVkFMVUVfRUxBU1RJQ1NFQVJDSCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCU1lTVEVNVkFMVUVTX0VMQVNUSUNTRUFSQ0ggPSBUTVBfREJTWVNURU1WQUxVRVNfRUxBU1RJQ1NFQVJDSDtcbi8qKlxuICogQW4gaWRlbnRpZmllciBmb3IgdGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGJlaW5nIHVzZWQuIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX1NZU1RFTV9WQUxVRV9NRU1DQUNIRUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQlNZU1RFTVZBTFVFU19NRU1DQUNIRUQgPSBUTVBfREJTWVNURU1WQUxVRVNfTUVNQ0FDSEVEO1xuLyoqXG4gKiBBbiBpZGVudGlmaWVyIGZvciB0aGUgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gKERCTVMpIHByb2R1Y3QgYmVpbmcgdXNlZC4gU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygd2VsbC1rbm93biBpZGVudGlmaWVycy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfU1lTVEVNX1ZBTFVFX0NPQ0tST0FDSERCIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJTWVNURU1WQUxVRVNfQ09DS1JPQUNIREIgPSBUTVBfREJTWVNURU1WQUxVRVNfQ09DS1JPQUNIREI7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBEYlN5c3RlbVZhbHVlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgREJTWVNURU1WQUxVRVNfWFhYWFggY29uc3RhbnRzIHJhdGhlciB0aGFuIHRoZSBEYlN5c3RlbVZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5EYlN5c3RlbVZhbHVlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19PVEhFUl9TUUwsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX01TU1FMLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19NWVNRTCxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfT1JBQ0xFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19EQjIsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX1BPU1RHUkVTUUwsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX1JFRFNISUZULFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19ISVZFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19DTE9VRFNDQVBFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19IU1FMREIsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX1BST0dSRVNTLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19NQVhEQixcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfSEFOQURCLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19JTkdSRVMsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX0ZJUlNUU1FMLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19FREIsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX0NBQ0hFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19BREFCQVMsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX0ZJUkVCSVJELFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19ERVJCWSxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfRklMRU1BS0VSLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19JTkZPUk1JWCxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfSU5TVEFOVERCLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19JTlRFUkJBU0UsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX01BUklBREIsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX05FVEVaWkEsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX1BFUlZBU0lWRSxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfUE9JTlRCQVNFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19TUUxJVEUsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX1NZQkFTRSxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfVEVSQURBVEEsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX1ZFUlRJQ0EsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX0gyLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19DT0xERlVTSU9OLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19DQVNTQU5EUkEsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX0hCQVNFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19NT05HT0RCLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19SRURJUyxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfQ09VQ0hCQVNFLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19DT1VDSERCLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19DT1NNT1NEQixcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfRFlOQU1PREIsXG4gICAgVE1QX0RCU1lTVEVNVkFMVUVTX05FTzRKLFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19HRU9ERSxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfRUxBU1RJQ1NFQVJDSCxcbiAgICBUTVBfREJTWVNURU1WQUxVRVNfTUVNQ0FDSEVELFxuICAgIFRNUF9EQlNZU1RFTVZBTFVFU19DT0NLUk9BQ0hEQixcbl0pO1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnQgdmFsdWVzIGZvciBEYkNhc3NhbmRyYUNvbnNpc3RlbmN5TGV2ZWxWYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogVGhlIGNvbnNpc3RlbmN5IGxldmVsIG9mIHRoZSBxdWVyeS4gQmFzZWQgb24gY29uc2lzdGVuY3kgdmFsdWVzIGZyb20gW0NRTF0oaHR0cHM6Ly9kb2NzLmRhdGFzdGF4LmNvbS9lbi9jYXNzYW5kcmEtb3NzLzMuMC9jYXNzYW5kcmEvZG1sL2RtbENvbmZpZ0NvbnNpc3RlbmN5Lmh0bWwpLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfQUxMID0gJ2FsbCc7XG5jb25zdCBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0VBQ0hfUVVPUlVNID0gJ2VhY2hfcXVvcnVtJztcbmNvbnN0IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfUVVPUlVNID0gJ3F1b3J1bSc7XG5jb25zdCBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX1FVT1JVTSA9ICdsb2NhbF9xdW9ydW0nO1xuY29uc3QgVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19PTkUgPSAnb25lJztcbmNvbnN0IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfVFdPID0gJ3R3byc7XG5jb25zdCBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1RIUkVFID0gJ3RocmVlJztcbmNvbnN0IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfT05FID0gJ2xvY2FsX29uZSc7XG5jb25zdCBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0FOWSA9ICdhbnknO1xuY29uc3QgVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19TRVJJQUwgPSAnc2VyaWFsJztcbmNvbnN0IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfU0VSSUFMID0gJ2xvY2FsX3NlcmlhbCc7XG4vKipcbiAqIFRoZSBjb25zaXN0ZW5jeSBsZXZlbCBvZiB0aGUgcXVlcnkuIEJhc2VkIG9uIGNvbnNpc3RlbmN5IHZhbHVlcyBmcm9tIFtDUUxdKGh0dHBzOi8vZG9jcy5kYXRhc3RheC5jb20vZW4vY2Fzc2FuZHJhLW9zcy8zLjAvY2Fzc2FuZHJhL2RtbC9kbWxDb25maWdDb25zaXN0ZW5jeS5odG1sKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMX1ZBTFVFX0FMTCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19BTEwgPSBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0FMTDtcbi8qKlxuICogVGhlIGNvbnNpc3RlbmN5IGxldmVsIG9mIHRoZSBxdWVyeS4gQmFzZWQgb24gY29uc2lzdGVuY3kgdmFsdWVzIGZyb20gW0NRTF0oaHR0cHM6Ly9kb2NzLmRhdGFzdGF4LmNvbS9lbi9jYXNzYW5kcmEtb3NzLzMuMC9jYXNzYW5kcmEvZG1sL2RtbENvbmZpZ0NvbnNpc3RlbmN5Lmh0bWwpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9DQVNTQU5EUkFfQ09OU0lTVEVOQ1lfTEVWRUxfVkFMVUVfRUFDSF9RVU9SVU0gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfRUFDSF9RVU9SVU0gPSBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0VBQ0hfUVVPUlVNO1xuLyoqXG4gKiBUaGUgY29uc2lzdGVuY3kgbGV2ZWwgb2YgdGhlIHF1ZXJ5LiBCYXNlZCBvbiBjb25zaXN0ZW5jeSB2YWx1ZXMgZnJvbSBbQ1FMXShodHRwczovL2RvY3MuZGF0YXN0YXguY29tL2VuL2Nhc3NhbmRyYS1vc3MvMy4wL2Nhc3NhbmRyYS9kbWwvZG1sQ29uZmlnQ29uc2lzdGVuY3kuaHRtbCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX0NBU1NBTkRSQV9DT05TSVNURU5DWV9MRVZFTF9WQUxVRV9RVU9SVU0gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfUVVPUlVNID0gVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19RVU9SVU07XG4vKipcbiAqIFRoZSBjb25zaXN0ZW5jeSBsZXZlbCBvZiB0aGUgcXVlcnkuIEJhc2VkIG9uIGNvbnNpc3RlbmN5IHZhbHVlcyBmcm9tIFtDUUxdKGh0dHBzOi8vZG9jcy5kYXRhc3RheC5jb20vZW4vY2Fzc2FuZHJhLW9zcy8zLjAvY2Fzc2FuZHJhL2RtbC9kbWxDb25maWdDb25zaXN0ZW5jeS5odG1sKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMX1ZBTFVFX0xPQ0FMX1FVT1JVTSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19MT0NBTF9RVU9SVU0gPSBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX1FVT1JVTTtcbi8qKlxuICogVGhlIGNvbnNpc3RlbmN5IGxldmVsIG9mIHRoZSBxdWVyeS4gQmFzZWQgb24gY29uc2lzdGVuY3kgdmFsdWVzIGZyb20gW0NRTF0oaHR0cHM6Ly9kb2NzLmRhdGFzdGF4LmNvbS9lbi9jYXNzYW5kcmEtb3NzLzMuMC9jYXNzYW5kcmEvZG1sL2RtbENvbmZpZ0NvbnNpc3RlbmN5Lmh0bWwpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9DQVNTQU5EUkFfQ09OU0lTVEVOQ1lfTEVWRUxfVkFMVUVfT05FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX09ORSA9IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfT05FO1xuLyoqXG4gKiBUaGUgY29uc2lzdGVuY3kgbGV2ZWwgb2YgdGhlIHF1ZXJ5LiBCYXNlZCBvbiBjb25zaXN0ZW5jeSB2YWx1ZXMgZnJvbSBbQ1FMXShodHRwczovL2RvY3MuZGF0YXN0YXguY29tL2VuL2Nhc3NhbmRyYS1vc3MvMy4wL2Nhc3NhbmRyYS9kbWwvZG1sQ29uZmlnQ29uc2lzdGVuY3kuaHRtbCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX0NBU1NBTkRSQV9DT05TSVNURU5DWV9MRVZFTF9WQUxVRV9UV08gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfVFdPID0gVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19UV087XG4vKipcbiAqIFRoZSBjb25zaXN0ZW5jeSBsZXZlbCBvZiB0aGUgcXVlcnkuIEJhc2VkIG9uIGNvbnNpc3RlbmN5IHZhbHVlcyBmcm9tIFtDUUxdKGh0dHBzOi8vZG9jcy5kYXRhc3RheC5jb20vZW4vY2Fzc2FuZHJhLW9zcy8zLjAvY2Fzc2FuZHJhL2RtbC9kbWxDb25maWdDb25zaXN0ZW5jeS5odG1sKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMX1ZBTFVFX1RIUkVFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1RIUkVFID0gVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19USFJFRTtcbi8qKlxuICogVGhlIGNvbnNpc3RlbmN5IGxldmVsIG9mIHRoZSBxdWVyeS4gQmFzZWQgb24gY29uc2lzdGVuY3kgdmFsdWVzIGZyb20gW0NRTF0oaHR0cHM6Ly9kb2NzLmRhdGFzdGF4LmNvbS9lbi9jYXNzYW5kcmEtb3NzLzMuMC9jYXNzYW5kcmEvZG1sL2RtbENvbmZpZ0NvbnNpc3RlbmN5Lmh0bWwpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9DQVNTQU5EUkFfQ09OU0lTVEVOQ1lfTEVWRUxfVkFMVUVfTE9DQUxfT05FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX09ORSA9IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfT05FO1xuLyoqXG4gKiBUaGUgY29uc2lzdGVuY3kgbGV2ZWwgb2YgdGhlIHF1ZXJ5LiBCYXNlZCBvbiBjb25zaXN0ZW5jeSB2YWx1ZXMgZnJvbSBbQ1FMXShodHRwczovL2RvY3MuZGF0YXN0YXguY29tL2VuL2Nhc3NhbmRyYS1vc3MvMy4wL2Nhc3NhbmRyYS9kbWwvZG1sQ29uZmlnQ29uc2lzdGVuY3kuaHRtbCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERCX0NBU1NBTkRSQV9DT05TSVNURU5DWV9MRVZFTF9WQUxVRV9BTlkgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfQU5ZID0gVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19BTlk7XG4vKipcbiAqIFRoZSBjb25zaXN0ZW5jeSBsZXZlbCBvZiB0aGUgcXVlcnkuIEJhc2VkIG9uIGNvbnNpc3RlbmN5IHZhbHVlcyBmcm9tIFtDUUxdKGh0dHBzOi8vZG9jcy5kYXRhc3RheC5jb20vZW4vY2Fzc2FuZHJhLW9zcy8zLjAvY2Fzc2FuZHJhL2RtbC9kbWxDb25maWdDb25zaXN0ZW5jeS5odG1sKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMX1ZBTFVFX1NFUklBTCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkRCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19TRVJJQUwgPSBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1NFUklBTDtcbi8qKlxuICogVGhlIGNvbnNpc3RlbmN5IGxldmVsIG9mIHRoZSBxdWVyeS4gQmFzZWQgb24gY29uc2lzdGVuY3kgdmFsdWVzIGZyb20gW0NRTF0oaHR0cHM6Ly9kb2NzLmRhdGFzdGF4LmNvbS9lbi9jYXNzYW5kcmEtb3NzLzMuMC9jYXNzYW5kcmEvZG1sL2RtbENvbmZpZ0NvbnNpc3RlbmN5Lmh0bWwpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBEQl9DQVNTQU5EUkFfQ09OU0lTVEVOQ1lfTEVWRUxfVkFMVUVfTE9DQUxfU0VSSUFMIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX1NFUklBTCA9IFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfU0VSSUFMO1xuLyoqXG4gKiBUaGUgY29uc3RhbnQgbWFwIG9mIHZhbHVlcyBmb3IgRGJDYXNzYW5kcmFDb25zaXN0ZW5jeUxldmVsVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBEQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfWFhYWFggY29uc3RhbnRzIHJhdGhlciB0aGFuIHRoZSBEYkNhc3NhbmRyYUNvbnNpc3RlbmN5TGV2ZWxWYWx1ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb24uXG4gKi9cbmV4cG9ydHMuRGJDYXNzYW5kcmFDb25zaXN0ZW5jeUxldmVsVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19BTEwsXG4gICAgVE1QX0RCQ0FTU0FORFJBQ09OU0lTVEVOQ1lMRVZFTFZBTFVFU19FQUNIX1FVT1JVTSxcbiAgICBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1FVT1JVTSxcbiAgICBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX0xPQ0FMX1FVT1JVTSxcbiAgICBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX09ORSxcbiAgICBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1RXTyxcbiAgICBUTVBfREJDQVNTQU5EUkFDT05TSVNURU5DWUxFVkVMVkFMVUVTX1RIUkVFLFxuICAgIFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfT05FLFxuICAgIFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfQU5ZLFxuICAgIFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfU0VSSUFMLFxuICAgIFRNUF9EQkNBU1NBTkRSQUNPTlNJU1RFTkNZTEVWRUxWQUxVRVNfTE9DQUxfU0VSSUFMLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIEZhYXNUcmlnZ2VyVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFR5cGUgb2YgdGhlIHRyaWdnZXIgb24gd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9GQUFTVFJJR0dFUlZBTFVFU19EQVRBU09VUkNFID0gJ2RhdGFzb3VyY2UnO1xuY29uc3QgVE1QX0ZBQVNUUklHR0VSVkFMVUVTX0hUVFAgPSAnaHR0cCc7XG5jb25zdCBUTVBfRkFBU1RSSUdHRVJWQUxVRVNfUFVCU1VCID0gJ3B1YnN1Yic7XG5jb25zdCBUTVBfRkFBU1RSSUdHRVJWQUxVRVNfVElNRVIgPSAndGltZXInO1xuY29uc3QgVE1QX0ZBQVNUUklHR0VSVkFMVUVTX09USEVSID0gJ290aGVyJztcbi8qKlxuICogVHlwZSBvZiB0aGUgdHJpZ2dlciBvbiB3aGljaCB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEZBQVNfVFJJR0dFUl9WQUxVRV9EQVRBU09VUkNFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU1RSSUdHRVJWQUxVRVNfREFUQVNPVVJDRSA9IFRNUF9GQUFTVFJJR0dFUlZBTFVFU19EQVRBU09VUkNFO1xuLyoqXG4gKiBUeXBlIG9mIHRoZSB0cmlnZ2VyIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgRkFBU19UUklHR0VSX1ZBTFVFX0hUVFAgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5GQUFTVFJJR0dFUlZBTFVFU19IVFRQID0gVE1QX0ZBQVNUUklHR0VSVkFMVUVTX0hUVFA7XG4vKipcbiAqIFR5cGUgb2YgdGhlIHRyaWdnZXIgb24gd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBGQUFTX1RSSUdHRVJfVkFMVUVfUFVCU1VCIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU1RSSUdHRVJWQUxVRVNfUFVCU1VCID0gVE1QX0ZBQVNUUklHR0VSVkFMVUVTX1BVQlNVQjtcbi8qKlxuICogVHlwZSBvZiB0aGUgdHJpZ2dlciBvbiB3aGljaCB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEZBQVNfVFJJR0dFUl9WQUxVRV9USU1FUiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkZBQVNUUklHR0VSVkFMVUVTX1RJTUVSID0gVE1QX0ZBQVNUUklHR0VSVkFMVUVTX1RJTUVSO1xuLyoqXG4gKiBUeXBlIG9mIHRoZSB0cmlnZ2VyIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgRkFBU19UUklHR0VSX1ZBTFVFX09USEVSIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU1RSSUdHRVJWQUxVRVNfT1RIRVIgPSBUTVBfRkFBU1RSSUdHRVJWQUxVRVNfT1RIRVI7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBGYWFzVHJpZ2dlclZhbHVlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgRkFBU1RSSUdHRVJWQUxVRVNfWFhYWFggY29uc3RhbnRzIHJhdGhlciB0aGFuIHRoZSBGYWFzVHJpZ2dlclZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5GYWFzVHJpZ2dlclZhbHVlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9GQUFTVFJJR0dFUlZBTFVFU19EQVRBU09VUkNFLFxuICAgIFRNUF9GQUFTVFJJR0dFUlZBTFVFU19IVFRQLFxuICAgIFRNUF9GQUFTVFJJR0dFUlZBTFVFU19QVUJTVUIsXG4gICAgVE1QX0ZBQVNUUklHR0VSVkFMVUVTX1RJTUVSLFxuICAgIFRNUF9GQUFTVFJJR0dFUlZBTFVFU19PVEhFUixcbl0pO1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnQgdmFsdWVzIGZvciBGYWFzRG9jdW1lbnRPcGVyYXRpb25WYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogRGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkIG9uIHRoZSBkYXRhLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9GQUFTRE9DVU1FTlRPUEVSQVRJT05WQUxVRVNfSU5TRVJUID0gJ2luc2VydCc7XG5jb25zdCBUTVBfRkFBU0RPQ1VNRU5UT1BFUkFUSU9OVkFMVUVTX0VESVQgPSAnZWRpdCc7XG5jb25zdCBUTVBfRkFBU0RPQ1VNRU5UT1BFUkFUSU9OVkFMVUVTX0RFTEVURSA9ICdkZWxldGUnO1xuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IHdhcyBwZXJmb3JtZWQgb24gdGhlIGRhdGEuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEZBQVNfRE9DVU1FTlRfT1BFUkFUSU9OX1ZBTFVFX0lOU0VSVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkZBQVNET0NVTUVOVE9QRVJBVElPTlZBTFVFU19JTlNFUlQgPSBUTVBfRkFBU0RPQ1VNRU5UT1BFUkFUSU9OVkFMVUVTX0lOU0VSVDtcbi8qKlxuICogRGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkIG9uIHRoZSBkYXRhLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBGQUFTX0RPQ1VNRU5UX09QRVJBVElPTl9WQUxVRV9FRElUIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU0RPQ1VNRU5UT1BFUkFUSU9OVkFMVUVTX0VESVQgPSBUTVBfRkFBU0RPQ1VNRU5UT1BFUkFUSU9OVkFMVUVTX0VESVQ7XG4vKipcbiAqIERlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZCBvbiB0aGUgZGF0YS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgRkFBU19ET0NVTUVOVF9PUEVSQVRJT05fVkFMVUVfREVMRVRFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU0RPQ1VNRU5UT1BFUkFUSU9OVkFMVUVTX0RFTEVURSA9IFRNUF9GQUFTRE9DVU1FTlRPUEVSQVRJT05WQUxVRVNfREVMRVRFO1xuLyoqXG4gKiBUaGUgY29uc3RhbnQgbWFwIG9mIHZhbHVlcyBmb3IgRmFhc0RvY3VtZW50T3BlcmF0aW9uVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBGQUFTRE9DVU1FTlRPUEVSQVRJT05WQUxVRVNfWFhYWFggY29uc3RhbnRzIHJhdGhlciB0aGFuIHRoZSBGYWFzRG9jdW1lbnRPcGVyYXRpb25WYWx1ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb24uXG4gKi9cbmV4cG9ydHMuRmFhc0RvY3VtZW50T3BlcmF0aW9uVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX0ZBQVNET0NVTUVOVE9QRVJBVElPTlZBTFVFU19JTlNFUlQsXG4gICAgVE1QX0ZBQVNET0NVTUVOVE9QRVJBVElPTlZBTFVFU19FRElULFxuICAgIFRNUF9GQUFTRE9DVU1FTlRPUEVSQVRJT05WQUxVRVNfREVMRVRFLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIEZhYXNJbnZva2VkUHJvdmlkZXJWYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogVGhlIGNsb3VkIHByb3ZpZGVyIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIE5vdGU6IFNIT1VMRCBiZSBlcXVhbCB0byB0aGUgYGNsb3VkLnByb3ZpZGVyYCByZXNvdXJjZSBhdHRyaWJ1dGUgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQUxJQkFCQV9DTE9VRCA9ICdhbGliYWJhX2Nsb3VkJztcbmNvbnN0IFRNUF9GQUFTSU5WT0tFRFBST1ZJREVSVkFMVUVTX0FXUyA9ICdhd3MnO1xuY29uc3QgVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQVpVUkUgPSAnYXp1cmUnO1xuY29uc3QgVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfR0NQID0gJ2djcCc7XG4vKipcbiAqIFRoZSBjbG91ZCBwcm92aWRlciBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBOb3RlOiBTSE9VTEQgYmUgZXF1YWwgdG8gdGhlIGBjbG91ZC5wcm92aWRlcmAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBGQUFTX0lOVk9LRURfUFJPVklERVJfVkFMVUVfQUxJQkFCQV9DTE9VRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQUxJQkFCQV9DTE9VRCA9IFRNUF9GQUFTSU5WT0tFRFBST1ZJREVSVkFMVUVTX0FMSUJBQkFfQ0xPVUQ7XG4vKipcbiAqIFRoZSBjbG91ZCBwcm92aWRlciBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBOb3RlOiBTSE9VTEQgYmUgZXF1YWwgdG8gdGhlIGBjbG91ZC5wcm92aWRlcmAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBGQUFTX0lOVk9LRURfUFJPVklERVJfVkFMVUVfQVdTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19BV1MgPSBUTVBfRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19BV1M7XG4vKipcbiAqIFRoZSBjbG91ZCBwcm92aWRlciBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBOb3RlOiBTSE9VTEQgYmUgZXF1YWwgdG8gdGhlIGBjbG91ZC5wcm92aWRlcmAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBGQUFTX0lOVk9LRURfUFJPVklERVJfVkFMVUVfQVpVUkUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5GQUFTSU5WT0tFRFBST1ZJREVSVkFMVUVTX0FaVVJFID0gVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQVpVUkU7XG4vKipcbiAqIFRoZSBjbG91ZCBwcm92aWRlciBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBOb3RlOiBTSE9VTEQgYmUgZXF1YWwgdG8gdGhlIGBjbG91ZC5wcm92aWRlcmAgcmVzb3VyY2UgYXR0cmlidXRlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBGQUFTX0lOVk9LRURfUFJPVklERVJfVkFMVUVfR0NQIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19HQ1AgPSBUTVBfRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19HQ1A7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBGYWFzSW52b2tlZFByb3ZpZGVyVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBGQUFTSU5WT0tFRFBST1ZJREVSVkFMVUVTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgRmFhc0ludm9rZWRQcm92aWRlclZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5GYWFzSW52b2tlZFByb3ZpZGVyVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQUxJQkFCQV9DTE9VRCxcbiAgICBUTVBfRkFBU0lOVk9LRURQUk9WSURFUlZBTFVFU19BV1MsXG4gICAgVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfQVpVUkUsXG4gICAgVE1QX0ZBQVNJTlZPS0VEUFJPVklERVJWQUxVRVNfR0NQLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIE5ldFRyYW5zcG9ydFZhbHVlcyBlbnVtIGRlZmluaXRpb25cbiAqXG4gKiBUcmFuc3BvcnQgcHJvdG9jb2wgdXNlZC4gU2VlIG5vdGUgYmVsb3cuXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX05FVFRSQU5TUE9SVFZBTFVFU19JUF9UQ1AgPSAnaXBfdGNwJztcbmNvbnN0IFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfSVBfVURQID0gJ2lwX3VkcCc7XG5jb25zdCBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX0lQID0gJ2lwJztcbmNvbnN0IFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfVU5JWCA9ICd1bml4JztcbmNvbnN0IFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfUElQRSA9ICdwaXBlJztcbmNvbnN0IFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfSU5QUk9DID0gJ2lucHJvYyc7XG5jb25zdCBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX09USEVSID0gJ290aGVyJztcbi8qKlxuICogVHJhbnNwb3J0IHByb3RvY29sIHVzZWQuIFNlZSBub3RlIGJlbG93LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBORVRfVFJBTlNQT1JUX1ZBTFVFX0lQX1RDUCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVFRSQU5TUE9SVFZBTFVFU19JUF9UQ1AgPSBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX0lQX1RDUDtcbi8qKlxuICogVHJhbnNwb3J0IHByb3RvY29sIHVzZWQuIFNlZSBub3RlIGJlbG93LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBORVRfVFJBTlNQT1JUX1ZBTFVFX0lQX1VEUCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVFRSQU5TUE9SVFZBTFVFU19JUF9VRFAgPSBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX0lQX1VEUDtcbi8qKlxuICogVHJhbnNwb3J0IHByb3RvY29sIHVzZWQuIFNlZSBub3RlIGJlbG93LlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gdjEuMjEuMC5cbiAqL1xuZXhwb3J0cy5ORVRUUkFOU1BPUlRWQUxVRVNfSVAgPSBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX0lQO1xuLyoqXG4gKiBUcmFuc3BvcnQgcHJvdG9jb2wgdXNlZC4gU2VlIG5vdGUgYmVsb3cuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiB2MS4yMS4wLlxuICovXG5leHBvcnRzLk5FVFRSQU5TUE9SVFZBTFVFU19VTklYID0gVE1QX05FVFRSQU5TUE9SVFZBTFVFU19VTklYO1xuLyoqXG4gKiBUcmFuc3BvcnQgcHJvdG9jb2wgdXNlZC4gU2VlIG5vdGUgYmVsb3cuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVF9UUkFOU1BPUlRfVkFMVUVfUElQRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVFRSQU5TUE9SVFZBTFVFU19QSVBFID0gVE1QX05FVFRSQU5TUE9SVFZBTFVFU19QSVBFO1xuLyoqXG4gKiBUcmFuc3BvcnQgcHJvdG9jb2wgdXNlZC4gU2VlIG5vdGUgYmVsb3cuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVF9UUkFOU1BPUlRfVkFMVUVfSU5QUk9DIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUVFJBTlNQT1JUVkFMVUVTX0lOUFJPQyA9IFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfSU5QUk9DO1xuLyoqXG4gKiBUcmFuc3BvcnQgcHJvdG9jb2wgdXNlZC4gU2VlIG5vdGUgYmVsb3cuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVF9UUkFOU1BPUlRfVkFMVUVfT1RIRVIgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRUUkFOU1BPUlRWQUxVRVNfT1RIRVIgPSBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX09USEVSO1xuLyoqXG4gKiBUaGUgY29uc3RhbnQgbWFwIG9mIHZhbHVlcyBmb3IgTmV0VHJhbnNwb3J0VmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBORVRUUkFOU1BPUlRWQUxVRVNfWFhYWFggY29uc3RhbnRzIHJhdGhlciB0aGFuIHRoZSBOZXRUcmFuc3BvcnRWYWx1ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb24uXG4gKi9cbmV4cG9ydHMuTmV0VHJhbnNwb3J0VmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX05FVFRSQU5TUE9SVFZBTFVFU19JUF9UQ1AsXG4gICAgVE1QX05FVFRSQU5TUE9SVFZBTFVFU19JUF9VRFAsXG4gICAgVE1QX05FVFRSQU5TUE9SVFZBTFVFU19JUCxcbiAgICBUTVBfTkVUVFJBTlNQT1JUVkFMVUVTX1VOSVgsXG4gICAgVE1QX05FVFRSQU5TUE9SVFZBTFVFU19QSVBFLFxuICAgIFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfSU5QUk9DLFxuICAgIFRNUF9ORVRUUkFOU1BPUlRWQUxVRVNfT1RIRVIsXG5dKTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgTmV0SG9zdENvbm5lY3Rpb25UeXBlVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIHR5cGUgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIGhvc3QuXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSUZJID0gJ3dpZmknO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSVJFRCA9ICd3aXJlZCc7XG5jb25zdCBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX0NFTEwgPSAnY2VsbCc7XG5jb25zdCBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1VOQVZBSUxBQkxFID0gJ3VuYXZhaWxhYmxlJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlRZUEVWQUxVRVNfVU5LTk9XTiA9ICd1bmtub3duJztcbi8qKlxuICogVGhlIGludGVybmV0IGNvbm5lY3Rpb24gdHlwZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBieSB0aGUgaG9zdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgTkVUV09SS19DT05ORUNUSU9OX1RZUEVfVkFMVUVfV0lGSSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSUZJID0gVE1QX05FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSUZJO1xuLyoqXG4gKiBUaGUgaW50ZXJuZXQgY29ubmVjdGlvbiB0eXBlIGN1cnJlbnRseSBiZWluZyB1c2VkIGJ5IHRoZSBob3N0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBORVRXT1JLX0NPTk5FQ1RJT05fVFlQRV9WQUxVRV9XSVJFRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSVJFRCA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlRZUEVWQUxVRVNfV0lSRUQ7XG4vKipcbiAqIFRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIHR5cGUgY3VycmVudGx5IGJlaW5nIHVzZWQgYnkgdGhlIGhvc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9UWVBFX1ZBTFVFX0NFTEwgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlRZUEVWQUxVRVNfQ0VMTCA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlRZUEVWQUxVRVNfQ0VMTDtcbi8qKlxuICogVGhlIGludGVybmV0IGNvbm5lY3Rpb24gdHlwZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBieSB0aGUgaG9zdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgTkVUV09SS19DT05ORUNUSU9OX1RZUEVfVkFMVUVfVU5BVkFJTEFCTEUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlRZUEVWQUxVRVNfVU5BVkFJTEFCTEUgPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1VOQVZBSUxBQkxFO1xuLyoqXG4gKiBUaGUgaW50ZXJuZXQgY29ubmVjdGlvbiB0eXBlIGN1cnJlbnRseSBiZWluZyB1c2VkIGJ5IHRoZSBob3N0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBORVRXT1JLX0NPTk5FQ1RJT05fVFlQRV9WQUxVRV9VTktOT1dOIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1VOS05PV04gPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1VOS05PV047XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBOZXRIb3N0Q29ubmVjdGlvblR5cGVWYWx1ZXMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIE5FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIE5ldEhvc3RDb25uZWN0aW9uVHlwZVZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5OZXRIb3N0Q29ubmVjdGlvblR5cGVWYWx1ZXMgPSBcbi8qI19fUFVSRV9fKi8gKDAsIHV0aWxzXzEuY3JlYXRlQ29uc3RNYXApKFtcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1dJRkksXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19XSVJFRCxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX0NFTEwsXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OVFlQRVZBTFVFU19VTkFWQUlMQUJMRSxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05UWVBFVkFMVUVTX1VOS05PV04sXG5dKTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgTmV0SG9zdENvbm5lY3Rpb25TdWJ0eXBlVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFRoaXMgZGVzY3JpYmVzIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIGNvbm5lY3Rpb24udHlwZS4gSXQgbWF5IGJlIHRoZSB0eXBlIG9mIGNlbGwgdGVjaG5vbG9neSBjb25uZWN0aW9uLCBidXQgaXQgY291bGQgYmUgdXNlZCBmb3IgZGVzY3JpYmluZyBkZXRhaWxzIGFib3V0IGEgd2lmaSBjb25uZWN0aW9uLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfR1BSUyA9ICdncHJzJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRURHRSA9ICdlZGdlJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfVU1UUyA9ICd1bXRzJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfQ0RNQSA9ICdjZG1hJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRVZET18wID0gJ2V2ZG9fMCc7XG5jb25zdCBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fQSA9ICdldmRvX2EnO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19DRE1BMjAwMF8xWFJUVCA9ICdjZG1hMjAwMF8xeHJ0dCc7XG5jb25zdCBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTRFBBID0gJ2hzZHBhJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNVUEEgPSAnaHN1cGEnO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19IU1BBID0gJ2hzcGEnO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19JREVOID0gJ2lkZW4nO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19FVkRPX0IgPSAnZXZkb19iJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfTFRFID0gJ2x0ZSc7XG5jb25zdCBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VIUlBEID0gJ2VocnBkJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNQQVAgPSAnaHNwYXAnO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19HU00gPSAnZ3NtJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfVERfU0NETUEgPSAndGRfc2NkbWEnO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19JV0xBTiA9ICdpd2xhbic7XG5jb25zdCBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX05SID0gJ25yJztcbmNvbnN0IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfTlJOU0EgPSAnbnJuc2EnO1xuY29uc3QgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19MVEVfQ0EgPSAnbHRlX2NhJztcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0dQUlMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfR1BSUyA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfR1BSUztcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0VER0UgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRURHRSA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRURHRTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX1VNVFMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfVU1UUyA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfVU1UUztcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0NETUEgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfQ0RNQSA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfQ0RNQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0VWRE9fMCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19FVkRPXzAgPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fMDtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0VWRE9fQSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19FVkRPX0EgPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0NETUEyMDAwXzFYUlRUIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0NETUEyMDAwXzFYUlRUID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19DRE1BMjAwMF8xWFJUVDtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0hTRFBBIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTRFBBID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19IU0RQQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0hTVVBBIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTVVBBID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19IU1VQQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0hTUEEgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNQQSA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNQQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0lERU4gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSURFTiA9IFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSURFTjtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0VWRE9fQiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19FVkRPX0IgPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fQjtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0xURSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19MVEUgPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0xURTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0VIUlBEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VIUlBEID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19FSFJQRDtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0hTUEFQIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTUEFQID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19IU1BBUDtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0dTTSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19HU00gPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0dTTTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX1REX1NDRE1BIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX1REX1NDRE1BID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19URF9TQ0RNQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0lXTEFOIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0lXTEFOID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19JV0xBTjtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX05SIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX05SID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19OUjtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX05STlNBIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX05STlNBID0gVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19OUk5TQTtcbi8qKlxuICogVGhpcyBkZXNjcmliZXMgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY29ubmVjdGlvbi50eXBlLiBJdCBtYXkgYmUgdGhlIHR5cGUgb2YgY2VsbCB0ZWNobm9sb2d5IGNvbm5lY3Rpb24sIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvciBkZXNjcmliaW5nIGRldGFpbHMgYWJvdXQgYSB3aWZpIGNvbm5lY3Rpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE5FVFdPUktfQ09OTkVDVElPTl9TVUJUWVBFX1ZBTFVFX0xURV9DQSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk5FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19MVEVfQ0EgPSBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0xURV9DQTtcbi8qKlxuICogVGhlIGNvbnN0YW50IG1hcCBvZiB2YWx1ZXMgZm9yIE5ldEhvc3RDb25uZWN0aW9uU3VidHlwZVZhbHVlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgTmV0SG9zdENvbm5lY3Rpb25TdWJ0eXBlVmFsdWVzLlhYWFhYIGZvciBidW5kbGUgbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnRzLk5ldEhvc3RDb25uZWN0aW9uU3VidHlwZVZhbHVlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfR1BSUyxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VER0UsXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19VTVRTLFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfQ0RNQSxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fMCxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0VWRE9fQSxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0NETUEyMDAwXzFYUlRULFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSFNEUEEsXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19IU1VQQSxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0hTUEEsXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19JREVOLFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRVZET19CLFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfTFRFLFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfRUhSUEQsXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19IU1BBUCxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX0dTTSxcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX1REX1NDRE1BLFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfSVdMQU4sXG4gICAgVE1QX05FVEhPU1RDT05ORUNUSU9OU1VCVFlQRVZBTFVFU19OUixcbiAgICBUTVBfTkVUSE9TVENPTk5FQ1RJT05TVUJUWVBFVkFMVUVTX05STlNBLFxuICAgIFRNUF9ORVRIT1NUQ09OTkVDVElPTlNVQlRZUEVWQUxVRVNfTFRFX0NBLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIEh0dHBGbGF2b3JWYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogS2luZCBvZiBIVFRQIHByb3RvY29sIHVzZWQuXG4gKlxuICogTm90ZTogSWYgYG5ldC50cmFuc3BvcnRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGNhbiBiZSBhc3N1bWVkIHRvIGJlIGBJUC5UQ1BgIGV4Y2VwdCBpZiBgaHR0cC5mbGF2b3JgIGlzIGBRVUlDYCwgaW4gd2hpY2ggY2FzZSBgSVAuVURQYCBpcyBhc3N1bWVkLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMV8wID0gJzEuMCc7XG5jb25zdCBUTVBfSFRUUEZMQVZPUlZBTFVFU19IVFRQXzFfMSA9ICcxLjEnO1xuY29uc3QgVE1QX0hUVFBGTEFWT1JWQUxVRVNfSFRUUF8yXzAgPSAnMi4wJztcbmNvbnN0IFRNUF9IVFRQRkxBVk9SVkFMVUVTX1NQRFkgPSAnU1BEWSc7XG5jb25zdCBUTVBfSFRUUEZMQVZPUlZBTFVFU19RVUlDID0gJ1FVSUMnO1xuLyoqXG4gKiBLaW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZC5cbiAqXG4gKiBOb3RlOiBJZiBgbmV0LnRyYW5zcG9ydGAgaXMgbm90IHNwZWNpZmllZCwgaXQgY2FuIGJlIGFzc3VtZWQgdG8gYmUgYElQLlRDUGAgZXhjZXB0IGlmIGBodHRwLmZsYXZvcmAgaXMgYFFVSUNgLCBpbiB3aGljaCBjYXNlIGBJUC5VRFBgIGlzIGFzc3VtZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhUVFBfRkxBVk9SX1ZBTFVFX0hUVFBfMV8wIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuSFRUUEZMQVZPUlZBTFVFU19IVFRQXzFfMCA9IFRNUF9IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMV8wO1xuLyoqXG4gKiBLaW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZC5cbiAqXG4gKiBOb3RlOiBJZiBgbmV0LnRyYW5zcG9ydGAgaXMgbm90IHNwZWNpZmllZCwgaXQgY2FuIGJlIGFzc3VtZWQgdG8gYmUgYElQLlRDUGAgZXhjZXB0IGlmIGBodHRwLmZsYXZvcmAgaXMgYFFVSUNgLCBpbiB3aGljaCBjYXNlIGBJUC5VRFBgIGlzIGFzc3VtZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhUVFBfRkxBVk9SX1ZBTFVFX0hUVFBfMV8xIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuSFRUUEZMQVZPUlZBTFVFU19IVFRQXzFfMSA9IFRNUF9IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMV8xO1xuLyoqXG4gKiBLaW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZC5cbiAqXG4gKiBOb3RlOiBJZiBgbmV0LnRyYW5zcG9ydGAgaXMgbm90IHNwZWNpZmllZCwgaXQgY2FuIGJlIGFzc3VtZWQgdG8gYmUgYElQLlRDUGAgZXhjZXB0IGlmIGBodHRwLmZsYXZvcmAgaXMgYFFVSUNgLCBpbiB3aGljaCBjYXNlIGBJUC5VRFBgIGlzIGFzc3VtZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhUVFBfRkxBVk9SX1ZBTFVFX0hUVFBfMl8wIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuSFRUUEZMQVZPUlZBTFVFU19IVFRQXzJfMCA9IFRNUF9IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMl8wO1xuLyoqXG4gKiBLaW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZC5cbiAqXG4gKiBOb3RlOiBJZiBgbmV0LnRyYW5zcG9ydGAgaXMgbm90IHNwZWNpZmllZCwgaXQgY2FuIGJlIGFzc3VtZWQgdG8gYmUgYElQLlRDUGAgZXhjZXB0IGlmIGBodHRwLmZsYXZvcmAgaXMgYFFVSUNgLCBpbiB3aGljaCBjYXNlIGBJUC5VRFBgIGlzIGFzc3VtZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhUVFBfRkxBVk9SX1ZBTFVFX1NQRFkgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5IVFRQRkxBVk9SVkFMVUVTX1NQRFkgPSBUTVBfSFRUUEZMQVZPUlZBTFVFU19TUERZO1xuLyoqXG4gKiBLaW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZC5cbiAqXG4gKiBOb3RlOiBJZiBgbmV0LnRyYW5zcG9ydGAgaXMgbm90IHNwZWNpZmllZCwgaXQgY2FuIGJlIGFzc3VtZWQgdG8gYmUgYElQLlRDUGAgZXhjZXB0IGlmIGBodHRwLmZsYXZvcmAgaXMgYFFVSUNgLCBpbiB3aGljaCBjYXNlIGBJUC5VRFBgIGlzIGFzc3VtZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhUVFBfRkxBVk9SX1ZBTFVFX1FVSUMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5IVFRQRkxBVk9SVkFMVUVTX1FVSUMgPSBUTVBfSFRUUEZMQVZPUlZBTFVFU19RVUlDO1xuLyoqXG4gKiBUaGUgY29uc3RhbnQgbWFwIG9mIHZhbHVlcyBmb3IgSHR0cEZsYXZvclZhbHVlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgSFRUUEZMQVZPUlZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIEh0dHBGbGF2b3JWYWx1ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb24uXG4gKi9cbmV4cG9ydHMuSHR0cEZsYXZvclZhbHVlcyA9IHtcbiAgICBIVFRQXzFfMDogVE1QX0hUVFBGTEFWT1JWQUxVRVNfSFRUUF8xXzAsXG4gICAgSFRUUF8xXzE6IFRNUF9IVFRQRkxBVk9SVkFMVUVTX0hUVFBfMV8xLFxuICAgIEhUVFBfMl8wOiBUTVBfSFRUUEZMQVZPUlZBTFVFU19IVFRQXzJfMCxcbiAgICBTUERZOiBUTVBfSFRUUEZMQVZPUlZBTFVFU19TUERZLFxuICAgIFFVSUM6IFRNUF9IVFRQRkxBVk9SVkFMVUVTX1FVSUMsXG59O1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnQgdmFsdWVzIGZvciBNZXNzYWdpbmdEZXN0aW5hdGlvbktpbmRWYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogVGhlIGtpbmQgb2YgbWVzc2FnZSBkZXN0aW5hdGlvbi5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8vIFRlbXBvcmFyeSBsb2NhbCBjb25zdGFudHMgdG8gYXNzaWduIHRvIHRoZSBpbmRpdmlkdWFsIGV4cG9ydHMgYW5kIHRoZSBuYW1lc3BhY2VkIHZlcnNpb25cbi8vIFJlcXVpcmVkIHRvIGF2b2lkIHRoZSBuYW1lc3BhY2UgZXhwb3J0cyB1c2luZyB0aGUgdW5taW5pZmlhYmxlIGV4cG9ydCBuYW1lcyBmb3Igc29tZSBwYWNrYWdlIHR5cGVzXG5jb25zdCBUTVBfTUVTU0FHSU5HREVTVElOQVRJT05LSU5EVkFMVUVTX1FVRVVFID0gJ3F1ZXVlJztcbmNvbnN0IFRNUF9NRVNTQUdJTkdERVNUSU5BVElPTktJTkRWQUxVRVNfVE9QSUMgPSAndG9waWMnO1xuLyoqXG4gKiBUaGUga2luZCBvZiBtZXNzYWdlIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gc2VtY29udiB2MS4yMC4wLlxuICovXG5leHBvcnRzLk1FU1NBR0lOR0RFU1RJTkFUSU9OS0lORFZBTFVFU19RVUVVRSA9IFRNUF9NRVNTQUdJTkdERVNUSU5BVElPTktJTkRWQUxVRVNfUVVFVUU7XG4vKipcbiAqIFRoZSBraW5kIG9mIG1lc3NhZ2UgZGVzdGluYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiBzZW1jb252IHYxLjIwLjAuXG4gKi9cbmV4cG9ydHMuTUVTU0FHSU5HREVTVElOQVRJT05LSU5EVkFMVUVTX1RPUElDID0gVE1QX01FU1NBR0lOR0RFU1RJTkFUSU9OS0lORFZBTFVFU19UT1BJQztcbi8qKlxuICogVGhlIGNvbnN0YW50IG1hcCBvZiB2YWx1ZXMgZm9yIE1lc3NhZ2luZ0Rlc3RpbmF0aW9uS2luZFZhbHVlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgTUVTU0FHSU5HREVTVElOQVRJT05LSU5EVkFMVUVTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgTWVzc2FnaW5nRGVzdGluYXRpb25LaW5kVmFsdWVzLlhYWFhYIGZvciBidW5kbGUgbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnRzLk1lc3NhZ2luZ0Rlc3RpbmF0aW9uS2luZFZhbHVlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9NRVNTQUdJTkdERVNUSU5BVElPTktJTkRWQUxVRVNfUVVFVUUsXG4gICAgVE1QX01FU1NBR0lOR0RFU1RJTkFUSU9OS0lORFZBTFVFU19UT1BJQyxcbl0pO1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnQgdmFsdWVzIGZvciBNZXNzYWdpbmdPcGVyYXRpb25WYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGtpbmQgb2YgbWVzc2FnZSBjb25zdW1wdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBbT3BlcmF0aW9uIG5hbWVzXSgjb3BlcmF0aW9uLW5hbWVzKSBzZWN0aW9uIGFib3ZlLiBJZiB0aGUgb3BlcmF0aW9uIGlzICYjMzQ7c2VuZCYjMzQ7LCB0aGlzIGF0dHJpYnV0ZSBNVVNUIE5PVCBiZSBzZXQsIHNpbmNlIHRoZSBvcGVyYXRpb24gY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIHNwYW4ga2luZCBpbiB0aGF0IGNhc2UuXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX01FU1NBR0lOR09QRVJBVElPTlZBTFVFU19SRUNFSVZFID0gJ3JlY2VpdmUnO1xuY29uc3QgVE1QX01FU1NBR0lOR09QRVJBVElPTlZBTFVFU19QUk9DRVNTID0gJ3Byb2Nlc3MnO1xuLyoqXG4gKiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUga2luZCBvZiBtZXNzYWdlIGNvbnN1bXB0aW9uIGFzIGRlZmluZWQgaW4gdGhlIFtPcGVyYXRpb24gbmFtZXNdKCNvcGVyYXRpb24tbmFtZXMpIHNlY3Rpb24gYWJvdmUuIElmIHRoZSBvcGVyYXRpb24gaXMgJiMzNDtzZW5kJiMzNDssIHRoaXMgYXR0cmlidXRlIE1VU1QgTk9UIGJlIHNldCwgc2luY2UgdGhlIG9wZXJhdGlvbiBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgc3BhbiBraW5kIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1JFQ0VJVkUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdJTkdPUEVSQVRJT05WQUxVRVNfUkVDRUlWRSA9IFRNUF9NRVNTQUdJTkdPUEVSQVRJT05WQUxVRVNfUkVDRUlWRTtcbi8qKlxuICogQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGtpbmQgb2YgbWVzc2FnZSBjb25zdW1wdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBbT3BlcmF0aW9uIG5hbWVzXSgjb3BlcmF0aW9uLW5hbWVzKSBzZWN0aW9uIGFib3ZlLiBJZiB0aGUgb3BlcmF0aW9uIGlzICYjMzQ7c2VuZCYjMzQ7LCB0aGlzIGF0dHJpYnV0ZSBNVVNUIE5PVCBiZSBzZXQsIHNpbmNlIHRoZSBvcGVyYXRpb24gY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIHNwYW4ga2luZCBpbiB0aGF0IGNhc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE1FU1NBR0lOR19PUEVSQVRJT05fVFlQRV9WQUxVRV9QUk9DRVNTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTUVTU0FHSU5HT1BFUkFUSU9OVkFMVUVTX1BST0NFU1MgPSBUTVBfTUVTU0FHSU5HT1BFUkFUSU9OVkFMVUVTX1BST0NFU1M7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBNZXNzYWdpbmdPcGVyYXRpb25WYWx1ZXMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIE1FU1NBR0lOR09QRVJBVElPTlZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIE1lc3NhZ2luZ09wZXJhdGlvblZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5NZXNzYWdpbmdPcGVyYXRpb25WYWx1ZXMgPSBcbi8qI19fUFVSRV9fKi8gKDAsIHV0aWxzXzEuY3JlYXRlQ29uc3RNYXApKFtcbiAgICBUTVBfTUVTU0FHSU5HT1BFUkFUSU9OVkFMVUVTX1JFQ0VJVkUsXG4gICAgVE1QX01FU1NBR0lOR09QRVJBVElPTlZBTFVFU19QUk9DRVNTLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIFJwY0dycGNTdGF0dXNDb2RlVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19PSyA9IDA7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfQ0FOQ0VMTEVEID0gMTtcbmNvbnN0IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTktOT1dOID0gMjtcbmNvbnN0IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlZBTElEX0FSR1VNRU5UID0gMztcbmNvbnN0IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19ERUFETElORV9FWENFRURFRCA9IDQ7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfTk9UX0ZPVU5EID0gNTtcbmNvbnN0IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19BTFJFQURZX0VYSVNUUyA9IDY7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfUEVSTUlTU0lPTl9ERU5JRUQgPSA3O1xuY29uc3QgVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1JFU09VUkNFX0VYSEFVU1RFRCA9IDg7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfRkFJTEVEX1BSRUNPTkRJVElPTiA9IDk7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfQUJPUlRFRCA9IDEwO1xuY29uc3QgVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX09VVF9PRl9SQU5HRSA9IDExO1xuY29uc3QgVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1VOSU1QTEVNRU5URUQgPSAxMjtcbmNvbnN0IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlRFUk5BTCA9IDEzO1xuY29uc3QgVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1VOQVZBSUxBQkxFID0gMTQ7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfREFUQV9MT1NTID0gMTU7XG5jb25zdCBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5BVVRIRU5USUNBVEVEID0gMTY7XG4vKipcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBSUENfR1JQQ19TVEFUVVNfQ09ERV9WQUxVRV9PSyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX09LID0gVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX09LO1xuLyoqXG4gKiBUaGUgW251bWVyaWMgc3RhdHVzIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi92MS4zMy4yL2RvYy9zdGF0dXNjb2Rlcy5tZCkgb2YgdGhlIGdSUEMgcmVxdWVzdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfQ0FOQ0VMTEVEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfQ0FOQ0VMTEVEID0gVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0NBTkNFTExFRDtcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX1VOS05PV04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTktOT1dOID0gVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1VOS05PV047XG4vKipcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBSUENfR1JQQ19TVEFUVVNfQ09ERV9WQUxVRV9JTlZBTElEX0FSR1VNRU5UIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfSU5WQUxJRF9BUkdVTUVOVCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlZBTElEX0FSR1VNRU5UO1xuLyoqXG4gKiBUaGUgW251bWVyaWMgc3RhdHVzIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi92MS4zMy4yL2RvYy9zdGF0dXNjb2Rlcy5tZCkgb2YgdGhlIGdSUEMgcmVxdWVzdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfREVBRExJTkVfRVhDRUVERUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19ERUFETElORV9FWENFRURFRCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19ERUFETElORV9FWENFRURFRDtcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX05PVF9GT1VORCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX05PVF9GT1VORCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19OT1RfRk9VTkQ7XG4vKipcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBSUENfR1JQQ19TVEFUVVNfQ09ERV9WQUxVRV9BTFJFQURZX0VYSVNUUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0FMUkVBRFlfRVhJU1RTID0gVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0FMUkVBRFlfRVhJU1RTO1xuLyoqXG4gKiBUaGUgW251bWVyaWMgc3RhdHVzIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi92MS4zMy4yL2RvYy9zdGF0dXNjb2Rlcy5tZCkgb2YgdGhlIGdSUEMgcmVxdWVzdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfUEVSTUlTU0lPTl9ERU5JRUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19QRVJNSVNTSU9OX0RFTklFRCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19QRVJNSVNTSU9OX0RFTklFRDtcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX1JFU09VUkNFX0VYSEFVU1RFRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1JFU09VUkNFX0VYSEFVU1RFRCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19SRVNPVVJDRV9FWEhBVVNURUQ7XG4vKipcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBSUENfR1JQQ19TVEFUVVNfQ09ERV9WQUxVRV9GQUlMRURfUFJFQ09ORElUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfRkFJTEVEX1BSRUNPTkRJVElPTiA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19GQUlMRURfUFJFQ09ORElUSU9OO1xuLyoqXG4gKiBUaGUgW251bWVyaWMgc3RhdHVzIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi92MS4zMy4yL2RvYy9zdGF0dXNjb2Rlcy5tZCkgb2YgdGhlIGdSUEMgcmVxdWVzdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfQUJPUlRFRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0FCT1JURUQgPSBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfQUJPUlRFRDtcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX09VVF9PRl9SQU5HRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlJQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX09VVF9PRl9SQU5HRSA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19PVVRfT0ZfUkFOR0U7XG4vKipcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBSUENfR1JQQ19TVEFUVVNfQ09ERV9WQUxVRV9VTklNUExFTUVOVEVEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5JTVBMRU1FTlRFRCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTklNUExFTUVOVEVEO1xuLyoqXG4gKiBUaGUgW251bWVyaWMgc3RhdHVzIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi92MS4zMy4yL2RvYy9zdGF0dXNjb2Rlcy5tZCkgb2YgdGhlIGdSUEMgcmVxdWVzdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfSU5URVJOQUwgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlRFUk5BTCA9IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlRFUk5BTDtcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX1VOQVZBSUxBQkxFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5BVkFJTEFCTEUgPSBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5BVkFJTEFCTEU7XG4vKipcbiAqIFRoZSBbbnVtZXJpYyBzdGF0dXMgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL3YxLjMzLjIvZG9jL3N0YXR1c2NvZGVzLm1kKSBvZiB0aGUgZ1JQQyByZXF1ZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBSUENfR1JQQ19TVEFUVVNfQ09ERV9WQUxVRV9EQVRBX0xPU1MgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19EQVRBX0xPU1MgPSBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfREFUQV9MT1NTO1xuLyoqXG4gKiBUaGUgW251bWVyaWMgc3RhdHVzIGNvZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi92MS4zMy4yL2RvYy9zdGF0dXNjb2Rlcy5tZCkgb2YgdGhlIGdSUEMgcmVxdWVzdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfVU5BVVRIRU5USUNBVEVEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5BVVRIRU5USUNBVEVEID0gVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX1VOQVVUSEVOVElDQVRFRDtcbi8qKlxuICogVGhlIGNvbnN0YW50IG1hcCBvZiB2YWx1ZXMgZm9yIFJwY0dycGNTdGF0dXNDb2RlVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBSUENHUlBDU1RBVFVTQ09ERVZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIFJwY0dycGNTdGF0dXNDb2RlVmFsdWVzLlhYWFhYIGZvciBidW5kbGUgbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnRzLlJwY0dycGNTdGF0dXNDb2RlVmFsdWVzID0ge1xuICAgIE9LOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfT0ssXG4gICAgQ0FOQ0VMTEVEOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfQ0FOQ0VMTEVELFxuICAgIFVOS05PV046IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTktOT1dOLFxuICAgIElOVkFMSURfQVJHVU1FTlQ6IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19JTlZBTElEX0FSR1VNRU5ULFxuICAgIERFQURMSU5FX0VYQ0VFREVEOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfREVBRExJTkVfRVhDRUVERUQsXG4gICAgTk9UX0ZPVU5EOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfTk9UX0ZPVU5ELFxuICAgIEFMUkVBRFlfRVhJU1RTOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfQUxSRUFEWV9FWElTVFMsXG4gICAgUEVSTUlTU0lPTl9ERU5JRUQ6IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19QRVJNSVNTSU9OX0RFTklFRCxcbiAgICBSRVNPVVJDRV9FWEhBVVNURUQ6IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19SRVNPVVJDRV9FWEhBVVNURUQsXG4gICAgRkFJTEVEX1BSRUNPTkRJVElPTjogVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0ZBSUxFRF9QUkVDT05ESVRJT04sXG4gICAgQUJPUlRFRDogVE1QX1JQQ0dSUENTVEFUVVNDT0RFVkFMVUVTX0FCT1JURUQsXG4gICAgT1VUX09GX1JBTkdFOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfT1VUX09GX1JBTkdFLFxuICAgIFVOSU1QTEVNRU5URUQ6IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTklNUExFTUVOVEVELFxuICAgIElOVEVSTkFMOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfSU5URVJOQUwsXG4gICAgVU5BVkFJTEFCTEU6IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19VTkFWQUlMQUJMRSxcbiAgICBEQVRBX0xPU1M6IFRNUF9SUENHUlBDU1RBVFVTQ09ERVZBTFVFU19EQVRBX0xPU1MsXG4gICAgVU5BVVRIRU5USUNBVEVEOiBUTVBfUlBDR1JQQ1NUQVRVU0NPREVWQUxVRVNfVU5BVVRIRU5USUNBVEVELFxufTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgTWVzc2FnZVR5cGVWYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogV2hldGhlciB0aGlzIGlzIGEgcmVjZWl2ZWQgb3Igc2VudCBtZXNzYWdlLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9NRVNTQUdFVFlQRVZBTFVFU19TRU5UID0gJ1NFTlQnO1xuY29uc3QgVE1QX01FU1NBR0VUWVBFVkFMVUVTX1JFQ0VJVkVEID0gJ1JFQ0VJVkVEJztcbi8qKlxuICogV2hldGhlciB0aGlzIGlzIGEgcmVjZWl2ZWQgb3Igc2VudCBtZXNzYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBNRVNTQUdFX1RZUEVfVkFMVUVfU0VOVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk1FU1NBR0VUWVBFVkFMVUVTX1NFTlQgPSBUTVBfTUVTU0FHRVRZUEVWQUxVRVNfU0VOVDtcbi8qKlxuICogV2hldGhlciB0aGlzIGlzIGEgcmVjZWl2ZWQgb3Igc2VudCBtZXNzYWdlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBNRVNTQUdFX1RZUEVfVkFMVUVfUkVDRUlWRUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdFVFlQRVZBTFVFU19SRUNFSVZFRCA9IFRNUF9NRVNTQUdFVFlQRVZBTFVFU19SRUNFSVZFRDtcbi8qKlxuICogVGhlIGNvbnN0YW50IG1hcCBvZiB2YWx1ZXMgZm9yIE1lc3NhZ2VUeXBlVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBNRVNTQUdFVFlQRVZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIE1lc3NhZ2VUeXBlVmFsdWVzLlhYWFhYIGZvciBidW5kbGUgbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnRzLk1lc3NhZ2VUeXBlVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX01FU1NBR0VUWVBFVkFMVUVTX1NFTlQsXG4gICAgVE1QX01FU1NBR0VUWVBFVkFMVUVTX1JFQ0VJVkVELFxuXSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TZW1hbnRpY0F0dHJpYnV0ZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tXG4gKiBUaGVzZSByZS1leHBvcnRzIGFyZSBvbmx5IG9mIGNvbnN0YW50cywgb25seSBvbmUtbGV2ZWwgZGVlcCBhdCB0aGlzIHBvaW50LFxuICogYW5kIHNob3VsZCBub3QgY2F1c2UgcHJvYmxlbXMgZm9yIHRyZWUtc2hha2Vycy5cbiAqL1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NlbWFudGljQXR0cmlidXRlc1wiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX1NUQVRFRlVMU0VUX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19TVEFURUZVTFNFVF9VSUQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19ERVBMT1lNRU5UX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19ERVBMT1lNRU5UX1VJRCA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX1JFUExJQ0FTRVRfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX1JFUExJQ0FTRVRfVUlEID0gZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfQ09OVEFJTkVSX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19QT0RfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX1BPRF9VSUQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19OQU1FU1BBQ0VfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX05PREVfVUlEID0gZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfTk9ERV9OQU1FID0gZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfQ0xVU1RFUl9OQU1FID0gZXhwb3J0cy5TRU1SRVNBVFRSU19IT1NUX0lNQUdFX1ZFUlNJT04gPSBleHBvcnRzLlNFTVJFU0FUVFJTX0hPU1RfSU1BR0VfSUQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0hPU1RfSU1BR0VfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9BUkNIID0gZXhwb3J0cy5TRU1SRVNBVFRSU19IT1NUX1RZUEUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0hPU1RfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9JRCA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfRkFBU19NQVhfTUVNT1JZID0gZXhwb3J0cy5TRU1SRVNBVFRSU19GQUFTX0lOU1RBTkNFID0gZXhwb3J0cy5TRU1SRVNBVFRSU19GQUFTX1ZFUlNJT04gPSBleHBvcnRzLlNFTVJFU0FUVFJTX0ZBQVNfSUQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0ZBQVNfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfREVWSUNFX01PREVMX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0RFVklDRV9NT0RFTF9JREVOVElGSUVSID0gZXhwb3J0cy5TRU1SRVNBVFRSU19ERVZJQ0VfSUQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0RFUExPWU1FTlRfRU5WSVJPTk1FTlQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0NPTlRBSU5FUl9JTUFHRV9UQUcgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gZXhwb3J0cy5TRU1SRVNBVFRSU19DT05UQUlORVJfUlVOVElNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQ09OVEFJTkVSX0lEID0gZXhwb3J0cy5TRU1SRVNBVFRSU19DT05UQUlORVJfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0xPR19TVFJFQU1fQVJOUyA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0xPR19TVFJFQU1fTkFNRVMgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0FXU19MT0dfR1JPVVBfQVJOUyA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0xPR19HUk9VUF9OQU1FUyA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0VLU19DTFVTVEVSX0FSTiA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0VDU19UQVNLX1JFVklTSU9OID0gZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfRUNTX1RBU0tfRkFNSUxZID0gZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfRUNTX1RBU0tfQVJOID0gZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfRUNTX0xBVU5DSFRZUEUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0FXU19FQ1NfQ0xVU1RFUl9BUk4gPSBleHBvcnRzLlNFTVJFU0FUVFJTX0FXU19FQ1NfQ09OVEFJTkVSX0FSTiA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfQ0xPVURfUExBVEZPUk0gPSBleHBvcnRzLlNFTVJFU0FUVFJTX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FID0gZXhwb3J0cy5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT04gPSBleHBvcnRzLlNFTVJFU0FUVFJTX0NMT1VEX0FDQ09VTlRfSUQgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0NMT1VEX1BST1ZJREVSID0gdm9pZCAwO1xuZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DT01QVVRFX0VOR0lORSA9IGV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9BUFBfU0VSVklDRSA9IGV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9GVU5DVElPTlMgPSBleHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfQUtTID0gZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0FaVVJFX0NPTlRBSU5FUl9JTlNUQU5DRVMgPSBleHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfVk0gPSBleHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VMQVNUSUNfQkVBTlNUQUxLID0gZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19MQU1CREEgPSBleHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VLUyA9IGV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BV1NfRUNTID0gZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FQzIgPSBleHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQUxJQkFCQV9DTE9VRF9GQyA9IGV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BTElCQUJBX0NMT1VEX0VDUyA9IGV4cG9ydHMuQ2xvdWRQcm92aWRlclZhbHVlcyA9IGV4cG9ydHMuQ0xPVURQUk9WSURFUlZBTFVFU19HQ1AgPSBleHBvcnRzLkNMT1VEUFJPVklERVJWQUxVRVNfQVpVUkUgPSBleHBvcnRzLkNMT1VEUFJPVklERVJWQUxVRVNfQVdTID0gZXhwb3J0cy5DTE9VRFBST1ZJREVSVkFMVUVTX0FMSUJBQkFfQ0xPVUQgPSBleHBvcnRzLlNlbWFudGljUmVzb3VyY2VBdHRyaWJ1dGVzID0gZXhwb3J0cy5TRU1SRVNBVFRSU19XRUJFTkdJTkVfREVTQ1JJUFRJT04gPSBleHBvcnRzLlNFTVJFU0FUVFJTX1dFQkVOR0lORV9WRVJTSU9OID0gZXhwb3J0cy5TRU1SRVNBVFRSU19XRUJFTkdJTkVfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfVEVMRU1FVFJZX0FVVE9fVkVSU0lPTiA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfVEVMRU1FVFJZX1NES19WRVJTSU9OID0gZXhwb3J0cy5TRU1SRVNBVFRSU19URUxFTUVUUllfU0RLX0xBTkdVQUdFID0gZXhwb3J0cy5TRU1SRVNBVFRSU19URUxFTUVUUllfU0RLX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX1NFUlZJQ0VfVkVSU0lPTiA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfU0VSVklDRV9JTlNUQU5DRV9JRCA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FU1BBQ0UgPSBleHBvcnRzLlNFTVJFU0FUVFJTX1NFUlZJQ0VfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OID0gZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfT1dORVIgPSBleHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfQ09NTUFORF9BUkdTID0gZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX0NPTU1BTkRfTElORSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfUFJPQ0VTU19DT01NQU5EID0gZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfUFJPQ0VTU19FWEVDVVRBQkxFX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfUElEID0gZXhwb3J0cy5TRU1SRVNBVFRSU19PU19WRVJTSU9OID0gZXhwb3J0cy5TRU1SRVNBVFRSU19PU19OQU1FID0gZXhwb3J0cy5TRU1SRVNBVFRSU19PU19ERVNDUklQVElPTiA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfT1NfVFlQRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX0NST05KT0JfTkFNRSA9IGV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX0NST05KT0JfVUlEID0gZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfSk9CX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19KT0JfVUlEID0gZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfREFFTU9OU0VUX05BTUUgPSBleHBvcnRzLlNFTVJFU0FUVFJTX0s4U19EQUVNT05TRVRfVUlEID0gdm9pZCAwO1xuZXhwb3J0cy5UZWxlbWV0cnlTZGtMYW5ndWFnZVZhbHVlcyA9IGV4cG9ydHMuVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfV0VCSlMgPSBleHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX1JVQlkgPSBleHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX1BZVEhPTiA9IGV4cG9ydHMuVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUEhQID0gZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19OT0RFSlMgPSBleHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0pBVkEgPSBleHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0dPID0gZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19FUkxBTkcgPSBleHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0RPVE5FVCA9IGV4cG9ydHMuVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfQ1BQID0gZXhwb3J0cy5Pc1R5cGVWYWx1ZXMgPSBleHBvcnRzLk9TVFlQRVZBTFVFU19aX09TID0gZXhwb3J0cy5PU1RZUEVWQUxVRVNfU09MQVJJUyA9IGV4cG9ydHMuT1NUWVBFVkFMVUVTX0FJWCA9IGV4cG9ydHMuT1NUWVBFVkFMVUVTX0hQVVggPSBleHBvcnRzLk9TVFlQRVZBTFVFU19EUkFHT05GTFlCU0QgPSBleHBvcnRzLk9TVFlQRVZBTFVFU19PUEVOQlNEID0gZXhwb3J0cy5PU1RZUEVWQUxVRVNfTkVUQlNEID0gZXhwb3J0cy5PU1RZUEVWQUxVRVNfRlJFRUJTRCA9IGV4cG9ydHMuT1NUWVBFVkFMVUVTX0RBUldJTiA9IGV4cG9ydHMuT1NUWVBFVkFMVUVTX0xJTlVYID0gZXhwb3J0cy5PU1RZUEVWQUxVRVNfV0lORE9XUyA9IGV4cG9ydHMuSG9zdEFyY2hWYWx1ZXMgPSBleHBvcnRzLkhPU1RBUkNIVkFMVUVTX1g4NiA9IGV4cG9ydHMuSE9TVEFSQ0hWQUxVRVNfUFBDNjQgPSBleHBvcnRzLkhPU1RBUkNIVkFMVUVTX1BQQzMyID0gZXhwb3J0cy5IT1NUQVJDSFZBTFVFU19JQTY0ID0gZXhwb3J0cy5IT1NUQVJDSFZBTFVFU19BUk02NCA9IGV4cG9ydHMuSE9TVEFSQ0hWQUxVRVNfQVJNMzIgPSBleHBvcnRzLkhPU1RBUkNIVkFMVUVTX0FNRDY0ID0gZXhwb3J0cy5Bd3NFY3NMYXVuY2h0eXBlVmFsdWVzID0gZXhwb3J0cy5BV1NFQ1NMQVVOQ0hUWVBFVkFMVUVTX0ZBUkdBVEUgPSBleHBvcnRzLkFXU0VDU0xBVU5DSFRZUEVWQUxVRVNfRUMyID0gZXhwb3J0cy5DbG91ZFBsYXRmb3JtVmFsdWVzID0gZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9BUFBfRU5HSU5FID0gZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9GVU5DVElPTlMgPSBleHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0tVQkVSTkVURVNfRU5HSU5FID0gZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9SVU4gPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL3V0aWxzXCIpO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBETyBOT1QgRURJVCwgdGhpcyBpcyBhbiBBdXRvLWdlbmVyYXRlZCBmaWxlIGZyb20gc2NyaXB0cy9zZW1jb252L3RlbXBsYXRlcy8vdGVtcGxhdGVzL1NlbWFudGljQXR0cmlidXRlcy50cy5qMlxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbnN0YW50IHZhbHVlcyBmb3IgU2VtYW50aWNSZXNvdXJjZUF0dHJpYnV0ZXNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9DTE9VRF9QUk9WSURFUiA9ICdjbG91ZC5wcm92aWRlcic7XG5jb25zdCBUTVBfQ0xPVURfQUNDT1VOVF9JRCA9ICdjbG91ZC5hY2NvdW50LmlkJztcbmNvbnN0IFRNUF9DTE9VRF9SRUdJT04gPSAnY2xvdWQucmVnaW9uJztcbmNvbnN0IFRNUF9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSA9ICdjbG91ZC5hdmFpbGFiaWxpdHlfem9uZSc7XG5jb25zdCBUTVBfQ0xPVURfUExBVEZPUk0gPSAnY2xvdWQucGxhdGZvcm0nO1xuY29uc3QgVE1QX0FXU19FQ1NfQ09OVEFJTkVSX0FSTiA9ICdhd3MuZWNzLmNvbnRhaW5lci5hcm4nO1xuY29uc3QgVE1QX0FXU19FQ1NfQ0xVU1RFUl9BUk4gPSAnYXdzLmVjcy5jbHVzdGVyLmFybic7XG5jb25zdCBUTVBfQVdTX0VDU19MQVVOQ0hUWVBFID0gJ2F3cy5lY3MubGF1bmNodHlwZSc7XG5jb25zdCBUTVBfQVdTX0VDU19UQVNLX0FSTiA9ICdhd3MuZWNzLnRhc2suYXJuJztcbmNvbnN0IFRNUF9BV1NfRUNTX1RBU0tfRkFNSUxZID0gJ2F3cy5lY3MudGFzay5mYW1pbHknO1xuY29uc3QgVE1QX0FXU19FQ1NfVEFTS19SRVZJU0lPTiA9ICdhd3MuZWNzLnRhc2sucmV2aXNpb24nO1xuY29uc3QgVE1QX0FXU19FS1NfQ0xVU1RFUl9BUk4gPSAnYXdzLmVrcy5jbHVzdGVyLmFybic7XG5jb25zdCBUTVBfQVdTX0xPR19HUk9VUF9OQU1FUyA9ICdhd3MubG9nLmdyb3VwLm5hbWVzJztcbmNvbnN0IFRNUF9BV1NfTE9HX0dST1VQX0FSTlMgPSAnYXdzLmxvZy5ncm91cC5hcm5zJztcbmNvbnN0IFRNUF9BV1NfTE9HX1NUUkVBTV9OQU1FUyA9ICdhd3MubG9nLnN0cmVhbS5uYW1lcyc7XG5jb25zdCBUTVBfQVdTX0xPR19TVFJFQU1fQVJOUyA9ICdhd3MubG9nLnN0cmVhbS5hcm5zJztcbmNvbnN0IFRNUF9DT05UQUlORVJfTkFNRSA9ICdjb250YWluZXIubmFtZSc7XG5jb25zdCBUTVBfQ09OVEFJTkVSX0lEID0gJ2NvbnRhaW5lci5pZCc7XG5jb25zdCBUTVBfQ09OVEFJTkVSX1JVTlRJTUUgPSAnY29udGFpbmVyLnJ1bnRpbWUnO1xuY29uc3QgVE1QX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gJ2NvbnRhaW5lci5pbWFnZS5uYW1lJztcbmNvbnN0IFRNUF9DT05UQUlORVJfSU1BR0VfVEFHID0gJ2NvbnRhaW5lci5pbWFnZS50YWcnO1xuY29uc3QgVE1QX0RFUExPWU1FTlRfRU5WSVJPTk1FTlQgPSAnZGVwbG95bWVudC5lbnZpcm9ubWVudCc7XG5jb25zdCBUTVBfREVWSUNFX0lEID0gJ2RldmljZS5pZCc7XG5jb25zdCBUTVBfREVWSUNFX01PREVMX0lERU5USUZJRVIgPSAnZGV2aWNlLm1vZGVsLmlkZW50aWZpZXInO1xuY29uc3QgVE1QX0RFVklDRV9NT0RFTF9OQU1FID0gJ2RldmljZS5tb2RlbC5uYW1lJztcbmNvbnN0IFRNUF9GQUFTX05BTUUgPSAnZmFhcy5uYW1lJztcbmNvbnN0IFRNUF9GQUFTX0lEID0gJ2ZhYXMuaWQnO1xuY29uc3QgVE1QX0ZBQVNfVkVSU0lPTiA9ICdmYWFzLnZlcnNpb24nO1xuY29uc3QgVE1QX0ZBQVNfSU5TVEFOQ0UgPSAnZmFhcy5pbnN0YW5jZSc7XG5jb25zdCBUTVBfRkFBU19NQVhfTUVNT1JZID0gJ2ZhYXMubWF4X21lbW9yeSc7XG5jb25zdCBUTVBfSE9TVF9JRCA9ICdob3N0LmlkJztcbmNvbnN0IFRNUF9IT1NUX05BTUUgPSAnaG9zdC5uYW1lJztcbmNvbnN0IFRNUF9IT1NUX1RZUEUgPSAnaG9zdC50eXBlJztcbmNvbnN0IFRNUF9IT1NUX0FSQ0ggPSAnaG9zdC5hcmNoJztcbmNvbnN0IFRNUF9IT1NUX0lNQUdFX05BTUUgPSAnaG9zdC5pbWFnZS5uYW1lJztcbmNvbnN0IFRNUF9IT1NUX0lNQUdFX0lEID0gJ2hvc3QuaW1hZ2UuaWQnO1xuY29uc3QgVE1QX0hPU1RfSU1BR0VfVkVSU0lPTiA9ICdob3N0LmltYWdlLnZlcnNpb24nO1xuY29uc3QgVE1QX0s4U19DTFVTVEVSX05BTUUgPSAnazhzLmNsdXN0ZXIubmFtZSc7XG5jb25zdCBUTVBfSzhTX05PREVfTkFNRSA9ICdrOHMubm9kZS5uYW1lJztcbmNvbnN0IFRNUF9LOFNfTk9ERV9VSUQgPSAnazhzLm5vZGUudWlkJztcbmNvbnN0IFRNUF9LOFNfTkFNRVNQQUNFX05BTUUgPSAnazhzLm5hbWVzcGFjZS5uYW1lJztcbmNvbnN0IFRNUF9LOFNfUE9EX1VJRCA9ICdrOHMucG9kLnVpZCc7XG5jb25zdCBUTVBfSzhTX1BPRF9OQU1FID0gJ2s4cy5wb2QubmFtZSc7XG5jb25zdCBUTVBfSzhTX0NPTlRBSU5FUl9OQU1FID0gJ2s4cy5jb250YWluZXIubmFtZSc7XG5jb25zdCBUTVBfSzhTX1JFUExJQ0FTRVRfVUlEID0gJ2s4cy5yZXBsaWNhc2V0LnVpZCc7XG5jb25zdCBUTVBfSzhTX1JFUExJQ0FTRVRfTkFNRSA9ICdrOHMucmVwbGljYXNldC5uYW1lJztcbmNvbnN0IFRNUF9LOFNfREVQTE9ZTUVOVF9VSUQgPSAnazhzLmRlcGxveW1lbnQudWlkJztcbmNvbnN0IFRNUF9LOFNfREVQTE9ZTUVOVF9OQU1FID0gJ2s4cy5kZXBsb3ltZW50Lm5hbWUnO1xuY29uc3QgVE1QX0s4U19TVEFURUZVTFNFVF9VSUQgPSAnazhzLnN0YXRlZnVsc2V0LnVpZCc7XG5jb25zdCBUTVBfSzhTX1NUQVRFRlVMU0VUX05BTUUgPSAnazhzLnN0YXRlZnVsc2V0Lm5hbWUnO1xuY29uc3QgVE1QX0s4U19EQUVNT05TRVRfVUlEID0gJ2s4cy5kYWVtb25zZXQudWlkJztcbmNvbnN0IFRNUF9LOFNfREFFTU9OU0VUX05BTUUgPSAnazhzLmRhZW1vbnNldC5uYW1lJztcbmNvbnN0IFRNUF9LOFNfSk9CX1VJRCA9ICdrOHMuam9iLnVpZCc7XG5jb25zdCBUTVBfSzhTX0pPQl9OQU1FID0gJ2s4cy5qb2IubmFtZSc7XG5jb25zdCBUTVBfSzhTX0NST05KT0JfVUlEID0gJ2s4cy5jcm9uam9iLnVpZCc7XG5jb25zdCBUTVBfSzhTX0NST05KT0JfTkFNRSA9ICdrOHMuY3JvbmpvYi5uYW1lJztcbmNvbnN0IFRNUF9PU19UWVBFID0gJ29zLnR5cGUnO1xuY29uc3QgVE1QX09TX0RFU0NSSVBUSU9OID0gJ29zLmRlc2NyaXB0aW9uJztcbmNvbnN0IFRNUF9PU19OQU1FID0gJ29zLm5hbWUnO1xuY29uc3QgVE1QX09TX1ZFUlNJT04gPSAnb3MudmVyc2lvbic7XG5jb25zdCBUTVBfUFJPQ0VTU19QSUQgPSAncHJvY2Vzcy5waWQnO1xuY29uc3QgVE1QX1BST0NFU1NfRVhFQ1VUQUJMRV9OQU1FID0gJ3Byb2Nlc3MuZXhlY3V0YWJsZS5uYW1lJztcbmNvbnN0IFRNUF9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9ICdwcm9jZXNzLmV4ZWN1dGFibGUucGF0aCc7XG5jb25zdCBUTVBfUFJPQ0VTU19DT01NQU5EID0gJ3Byb2Nlc3MuY29tbWFuZCc7XG5jb25zdCBUTVBfUFJPQ0VTU19DT01NQU5EX0xJTkUgPSAncHJvY2Vzcy5jb21tYW5kX2xpbmUnO1xuY29uc3QgVE1QX1BST0NFU1NfQ09NTUFORF9BUkdTID0gJ3Byb2Nlc3MuY29tbWFuZF9hcmdzJztcbmNvbnN0IFRNUF9QUk9DRVNTX09XTkVSID0gJ3Byb2Nlc3Mub3duZXInO1xuY29uc3QgVE1QX1BST0NFU1NfUlVOVElNRV9OQU1FID0gJ3Byb2Nlc3MucnVudGltZS5uYW1lJztcbmNvbnN0IFRNUF9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiA9ICdwcm9jZXNzLnJ1bnRpbWUudmVyc2lvbic7XG5jb25zdCBUTVBfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OID0gJ3Byb2Nlc3MucnVudGltZS5kZXNjcmlwdGlvbic7XG5jb25zdCBUTVBfU0VSVklDRV9OQU1FID0gJ3NlcnZpY2UubmFtZSc7XG5jb25zdCBUTVBfU0VSVklDRV9OQU1FU1BBQ0UgPSAnc2VydmljZS5uYW1lc3BhY2UnO1xuY29uc3QgVE1QX1NFUlZJQ0VfSU5TVEFOQ0VfSUQgPSAnc2VydmljZS5pbnN0YW5jZS5pZCc7XG5jb25zdCBUTVBfU0VSVklDRV9WRVJTSU9OID0gJ3NlcnZpY2UudmVyc2lvbic7XG5jb25zdCBUTVBfVEVMRU1FVFJZX1NES19OQU1FID0gJ3RlbGVtZXRyeS5zZGsubmFtZSc7XG5jb25zdCBUTVBfVEVMRU1FVFJZX1NES19MQU5HVUFHRSA9ICd0ZWxlbWV0cnkuc2RrLmxhbmd1YWdlJztcbmNvbnN0IFRNUF9URUxFTUVUUllfU0RLX1ZFUlNJT04gPSAndGVsZW1ldHJ5LnNkay52ZXJzaW9uJztcbmNvbnN0IFRNUF9URUxFTUVUUllfQVVUT19WRVJTSU9OID0gJ3RlbGVtZXRyeS5hdXRvLnZlcnNpb24nO1xuY29uc3QgVE1QX1dFQkVOR0lORV9OQU1FID0gJ3dlYmVuZ2luZS5uYW1lJztcbmNvbnN0IFRNUF9XRUJFTkdJTkVfVkVSU0lPTiA9ICd3ZWJlbmdpbmUudmVyc2lvbic7XG5jb25zdCBUTVBfV0VCRU5HSU5FX0RFU0NSSVBUSU9OID0gJ3dlYmVuZ2luZS5kZXNjcmlwdGlvbic7XG4vKipcbiAqIE5hbWUgb2YgdGhlIGNsb3VkIHByb3ZpZGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0NMT1VEX1BST1ZJREVSIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQ0xPVURfUFJPVklERVIgPSBUTVBfQ0xPVURfUFJPVklERVI7XG4vKipcbiAqIFRoZSBjbG91ZCBhY2NvdW50IElEIHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0by5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9DTE9VRF9BQ0NPVU5UX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQ0xPVURfQUNDT1VOVF9JRCA9IFRNUF9DTE9VRF9BQ0NPVU5UX0lEO1xuLyoqXG4gKiBUaGUgZ2VvZ3JhcGhpY2FsIHJlZ2lvbiB0aGUgcmVzb3VyY2UgaXMgcnVubmluZy4gUmVmZXIgdG8geW91ciBwcm92aWRlciYjMzk7cyBkb2NzIHRvIHNlZSB0aGUgYXZhaWxhYmxlIHJlZ2lvbnMsIGZvciBleGFtcGxlIFtBbGliYWJhIENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vd3d3LmFsaWJhYmFjbG91ZC5jb20vaGVscC9kb2MtZGV0YWlsLzQwNjU0Lmh0bSksIFtBV1MgcmVnaW9uc10oaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9hYm91dC1hd3MvZ2xvYmFsLWluZnJhc3RydWN0dXJlL3JlZ2lvbnNfYXovKSwgW0F6dXJlIHJlZ2lvbnNdKGh0dHBzOi8vYXp1cmUubWljcm9zb2Z0LmNvbS9lbi11cy9nbG9iYWwtaW5mcmFzdHJ1Y3R1cmUvZ2VvZ3JhcGhpZXMvKSwgb3IgW0dvb2dsZSBDbG91ZCByZWdpb25zXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYWJvdXQvbG9jYXRpb25zKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9DTE9VRF9SRUdJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT04gPSBUTVBfQ0xPVURfUkVHSU9OO1xuLyoqXG4gKiBDbG91ZCByZWdpb25zIG9mdGVuIGhhdmUgbXVsdGlwbGUsIGlzb2xhdGVkIGxvY2F0aW9ucyBrbm93biBhcyB6b25lcyB0byBpbmNyZWFzZSBhdmFpbGFiaWxpdHkuIEF2YWlsYWJpbGl0eSB6b25lIHJlcHJlc2VudHMgdGhlIHpvbmUgd2hlcmUgdGhlIHJlc291cmNlIGlzIHJ1bm5pbmcuXG4gKlxuICogTm90ZTogQXZhaWxhYmlsaXR5IHpvbmVzIGFyZSBjYWxsZWQgJiMzNDt6b25lcyYjMzQ7IG9uIEFsaWJhYmEgQ2xvdWQgYW5kIEdvb2dsZSBDbG91ZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FID0gVE1QX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FO1xuLyoqXG4gKiBUaGUgY2xvdWQgcGxhdGZvcm0gaW4gdXNlLlxuICpcbiAqIE5vdGU6IFRoZSBwcmVmaXggb2YgdGhlIHNlcnZpY2UgU0hPVUxEIG1hdGNoIHRoZSBvbmUgc3BlY2lmaWVkIGluIGBjbG91ZC5wcm92aWRlcmAuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQ0xPVURfUExBVEZPUk0gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19DTE9VRF9QTEFURk9STSA9IFRNUF9DTE9VRF9QTEFURk9STTtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIGFuIFtFQ1MgY29udGFpbmVyIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9FQ1NfaW5zdGFuY2VzLmh0bWwpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19FQ1NfQ09OVEFJTkVSX0FSTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0FXU19FQ1NfQ09OVEFJTkVSX0FSTiA9IFRNUF9BV1NfRUNTX0NPTlRBSU5FUl9BUk47XG4vKipcbiAqIFRoZSBBUk4gb2YgYW4gW0VDUyBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVycy5odG1sKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRUNTX0NMVVNURVJfQVJOIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0VDU19DTFVTVEVSX0FSTiA9IFRNUF9BV1NfRUNTX0NMVVNURVJfQVJOO1xuLyoqXG4gKiBUaGUgW2xhdW5jaCB0eXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgZm9yIGFuIEVDUyB0YXNrLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19FQ1NfTEFVTkNIVFlQRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0FXU19FQ1NfTEFVTkNIVFlQRSA9IFRNUF9BV1NfRUNTX0xBVU5DSFRZUEU7XG4vKipcbiAqIFRoZSBBUk4gb2YgYW4gW0VDUyB0YXNrIGRlZmluaXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbnMuaHRtbCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0VDU19UQVNLX0FSTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0FXU19FQ1NfVEFTS19BUk4gPSBUTVBfQVdTX0VDU19UQVNLX0FSTjtcbi8qKlxuICogVGhlIHRhc2sgZGVmaW5pdGlvbiBmYW1pbHkgdGhpcyB0YXNrIGRlZmluaXRpb24gaXMgYSBtZW1iZXIgb2YuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQVdTX0VDU19UQVNLX0ZBTUlMWSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0FXU19FQ1NfVEFTS19GQU1JTFkgPSBUTVBfQVdTX0VDU19UQVNLX0ZBTUlMWTtcbi8qKlxuICogVGhlIHJldmlzaW9uIGZvciB0aGlzIHRhc2sgZGVmaW5pdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9BV1NfRUNTX1RBU0tfUkVWSVNJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfRUNTX1RBU0tfUkVWSVNJT04gPSBUTVBfQVdTX0VDU19UQVNLX1JFVklTSU9OO1xuLyoqXG4gKiBUaGUgQVJOIG9mIGFuIEVLUyBjbHVzdGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19FS1NfQ0xVU1RFUl9BUk4gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfRUtTX0NMVVNURVJfQVJOID0gVE1QX0FXU19FS1NfQ0xVU1RFUl9BUk47XG4vKipcbiAqIFRoZSBuYW1lKHMpIG9mIHRoZSBBV1MgbG9nIGdyb3VwKHMpIGFuIGFwcGxpY2F0aW9uIGlzIHdyaXRpbmcgdG8uXG4gKlxuICogTm90ZTogTXVsdGlwbGUgbG9nIGdyb3VwcyBtdXN0IGJlIHN1cHBvcnRlZCBmb3IgY2FzZXMgbGlrZSBtdWx0aS1jb250YWluZXIgYXBwbGljYXRpb25zLCB3aGVyZSBhIHNpbmdsZSBhcHBsaWNhdGlvbiBoYXMgc2lkZWNhciBjb250YWluZXJzLCBhbmQgZWFjaCB3cml0ZSB0byB0aGVpciBvd24gbG9nIGdyb3VwLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19MT0dfR1JPVVBfTkFNRVMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfTE9HX0dST1VQX05BTUVTID0gVE1QX0FXU19MT0dfR1JPVVBfTkFNRVM7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZShzKSAoQVJOKSBvZiB0aGUgQVdTIGxvZyBncm91cChzKS5cbiAqXG4gKiBOb3RlOiBTZWUgdGhlIFtsb2cgZ3JvdXAgQVJOIGZvcm1hdCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9pYW0tYWNjZXNzLWNvbnRyb2wtb3ZlcnZpZXctY3dsLmh0bWwjQ1dMX0FSTl9Gb3JtYXQpLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19MT0dfR1JPVVBfQVJOUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0FXU19MT0dfR1JPVVBfQVJOUyA9IFRNUF9BV1NfTE9HX0dST1VQX0FSTlM7XG4vKipcbiAqIFRoZSBuYW1lKHMpIG9mIHRoZSBBV1MgbG9nIHN0cmVhbShzKSBhbiBhcHBsaWNhdGlvbiBpcyB3cml0aW5nIHRvLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19MT0dfU1RSRUFNX05BTUVTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQVdTX0xPR19TVFJFQU1fTkFNRVMgPSBUTVBfQVdTX0xPR19TVFJFQU1fTkFNRVM7XG4vKipcbiAqIFRoZSBBUk4ocykgb2YgdGhlIEFXUyBsb2cgc3RyZWFtKHMpLlxuICpcbiAqIE5vdGU6IFNlZSB0aGUgW2xvZyBzdHJlYW0gQVJOIGZvcm1hdCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9pYW0tYWNjZXNzLWNvbnRyb2wtb3ZlcnZpZXctY3dsLmh0bWwjQ1dMX0FSTl9Gb3JtYXQpLiBPbmUgbG9nIGdyb3VwIGNhbiBjb250YWluIHNldmVyYWwgbG9nIHN0cmVhbXMsIHNvIHRoZXNlIEFSTnMgbmVjZXNzYXJpbHkgaWRlbnRpZnkgYm90aCBhIGxvZyBncm91cCBhbmQgYSBsb2cgc3RyZWFtLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0FXU19MT0dfU1RSRUFNX0FSTlMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19BV1NfTE9HX1NUUkVBTV9BUk5TID0gVE1QX0FXU19MT0dfU1RSRUFNX0FSTlM7XG4vKipcbiAqIENvbnRhaW5lciBuYW1lLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0NPTlRBSU5FUl9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQ09OVEFJTkVSX05BTUUgPSBUTVBfQ09OVEFJTkVSX05BTUU7XG4vKipcbiAqIENvbnRhaW5lciBJRC4gVXN1YWxseSBhIFVVSUQsIGFzIGZvciBleGFtcGxlIHVzZWQgdG8gW2lkZW50aWZ5IERvY2tlciBjb250YWluZXJzXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL3J1bi8jY29udGFpbmVyLWlkZW50aWZpY2F0aW9uKS4gVGhlIFVVSUQgbWlnaHQgYmUgYWJicmV2aWF0ZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQ09OVEFJTkVSX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQ09OVEFJTkVSX0lEID0gVE1QX0NPTlRBSU5FUl9JRDtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBydW50aW1lIG1hbmFnaW5nIHRoaXMgY29udGFpbmVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0NPTlRBSU5FUl9SVU5USU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQ09OVEFJTkVSX1JVTlRJTUUgPSBUTVBfQ09OVEFJTkVSX1JVTlRJTUU7XG4vKipcbiAqIE5hbWUgb2YgdGhlIGltYWdlIHRoZSBjb250YWluZXIgd2FzIGJ1aWx0IG9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfQ09OVEFJTkVSX0lNQUdFX05BTUUgPSBUTVBfQ09OVEFJTkVSX0lNQUdFX05BTUU7XG4vKipcbiAqIENvbnRhaW5lciBpbWFnZSB0YWcuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfQ09OVEFJTkVSX0lNQUdFX1RBR1MgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19DT05UQUlORVJfSU1BR0VfVEFHID0gVE1QX0NPTlRBSU5FUl9JTUFHRV9UQUc7XG4vKipcbiAqIE5hbWUgb2YgdGhlIFtkZXBsb3ltZW50IGVudmlyb25tZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZXBsb3ltZW50X2Vudmlyb25tZW50KSAoYWthIGRlcGxveW1lbnQgdGllcikuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREVQTE9ZTUVOVF9FTlZJUk9OTUVOVCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0RFUExPWU1FTlRfRU5WSVJPTk1FTlQgPSBUTVBfREVQTE9ZTUVOVF9FTlZJUk9OTUVOVDtcbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgdGhlIGRldmljZS5cbiAqXG4gKiBOb3RlOiBUaGUgZGV2aWNlIGlkZW50aWZpZXIgTVVTVCBvbmx5IGJlIGRlZmluZWQgdXNpbmcgdGhlIHZhbHVlcyBvdXRsaW5lZCBiZWxvdy4gVGhpcyB2YWx1ZSBpcyBub3QgYW4gYWR2ZXJ0aXNpbmcgaWRlbnRpZmllciBhbmQgTVVTVCBOT1QgYmUgdXNlZCBhcyBzdWNoLiBPbiBpT1MgKFN3aWZ0IG9yIE9iamVjdGl2ZS1DKSwgdGhpcyB2YWx1ZSBNVVNUIGJlIGVxdWFsIHRvIHRoZSBbdmVuZG9yIGlkZW50aWZpZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Vpa2l0L3VpZGV2aWNlLzE2MjAwNTktaWRlbnRpZmllcmZvcnZlbmRvcikuIE9uIEFuZHJvaWQgKEphdmEgb3IgS290bGluKSwgdGhpcyB2YWx1ZSBNVVNUIGJlIGVxdWFsIHRvIHRoZSBGaXJlYmFzZSBJbnN0YWxsYXRpb24gSUQgb3IgYSBnbG9iYWxseSB1bmlxdWUgVVVJRCB3aGljaCBpcyBwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zIGluIHlvdXIgYXBwbGljYXRpb24uIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIFtoZXJlXShodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS90cmFpbmluZy9hcnRpY2xlcy91c2VyLWRhdGEtaWRzKSBvbiBiZXN0IHByYWN0aWNlcyBhbmQgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gQ2F1dGlvbiBzaG91bGQgYmUgdGFrZW4gd2hlbiBzdG9yaW5nIHBlcnNvbmFsIGRhdGEgb3IgYW55dGhpbmcgd2hpY2ggY2FuIGlkZW50aWZ5IGEgdXNlci4gR0RQUiBhbmQgZGF0YSBwcm90ZWN0aW9uIGxhd3MgbWF5IGFwcGx5LCBlbnN1cmUgeW91IGRvIHlvdXIgb3duIGR1ZSBkaWxpZ2VuY2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfREVWSUNFX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfREVWSUNFX0lEID0gVE1QX0RFVklDRV9JRDtcbi8qKlxuICogVGhlIG1vZGVsIGlkZW50aWZpZXIgZm9yIHRoZSBkZXZpY2UuXG4gKlxuICogTm90ZTogSXQmIzM5O3MgcmVjb21tZW5kZWQgdGhpcyB2YWx1ZSByZXByZXNlbnRzIGEgbWFjaGluZSByZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBtb2RlbCBpZGVudGlmaWVyIHJhdGhlciB0aGFuIHRoZSBtYXJrZXQgb3IgY29uc3VtZXItZnJpZW5kbHkgbmFtZSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RFVklDRV9NT0RFTF9JREVOVElGSUVSIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfREVWSUNFX01PREVMX0lERU5USUZJRVIgPSBUTVBfREVWSUNFX01PREVMX0lERU5USUZJRVI7XG4vKipcbiAqIFRoZSBtYXJrZXRpbmcgbmFtZSBmb3IgdGhlIGRldmljZSBtb2RlbC5cbiAqXG4gKiBOb3RlOiBJdCYjMzk7cyByZWNvbW1lbmRlZCB0aGlzIHZhbHVlIHJlcHJlc2VudHMgYSBodW1hbiByZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBkZXZpY2UgbW9kZWwgcmF0aGVyIHRoYW4gYSBtYWNoaW5lIHJlYWRhYmxlIGFsdGVybmF0aXZlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0RFVklDRV9NT0RFTF9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfREVWSUNFX01PREVMX05BTUUgPSBUTVBfREVWSUNFX01PREVMX05BTUU7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzaW5nbGUgZnVuY3Rpb24gdGhhdCB0aGlzIHJ1bnRpbWUgaW5zdGFuY2UgZXhlY3V0ZXMuXG4gKlxuICogTm90ZTogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gYXMgY29uZmlndXJlZC9kZXBsb3llZCBvbiB0aGUgRmFhUyBwbGF0Zm9ybSBhbmQgaXMgdXN1YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKHdoaWNoIG1heSBiZSBzdG9yZWQgaW4gdGhlIFtgY29kZS5uYW1lc3BhY2VgL2Bjb2RlLmZ1bmN0aW9uYF0oLi4vLi4vdHJhY2Uvc2VtYW50aWNfY29udmVudGlvbnMvc3Bhbi1nZW5lcmFsLm1kI3NvdXJjZS1jb2RlLWF0dHJpYnV0ZXMpIHNwYW4gYXR0cmlidXRlcykuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfRkFBU19OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfRkFBU19OQU1FID0gVE1QX0ZBQVNfTkFNRTtcbi8qKlxuKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzaW5nbGUgZnVuY3Rpb24gdGhhdCB0aGlzIHJ1bnRpbWUgaW5zdGFuY2UgZXhlY3V0ZXMuXG4qXG4qIE5vdGU6IERlcGVuZGluZyBvbiB0aGUgY2xvdWQgcHJvdmlkZXIsIHVzZTpcblxuKiAqKkFXUyBMYW1iZGE6KiogVGhlIGZ1bmN0aW9uIFtBUk5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9hd3MtYXJucy1hbmQtbmFtZXNwYWNlcy5odG1sKS5cblRha2UgY2FyZSBub3QgdG8gdXNlIHRoZSAmIzM0O2ludm9rZWQgQVJOJiMzNDsgZGlyZWN0bHkgYnV0IHJlcGxhY2UgYW55XG5bYWxpYXMgc3VmZml4XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLWFsaWFzZXMuaHRtbCkgd2l0aCB0aGUgcmVzb2x2ZWQgZnVuY3Rpb24gdmVyc2lvbiwgYXMgdGhlIHNhbWUgcnVudGltZSBpbnN0YW5jZSBtYXkgYmUgaW52b2thYmxlIHdpdGggbXVsdGlwbGVcbmRpZmZlcmVudCBhbGlhc2VzLlxuKiAqKkdDUDoqKiBUaGUgW1VSSSBvZiB0aGUgcmVzb3VyY2VdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9pYW0vZG9jcy9mdWxsLXJlc291cmNlLW5hbWVzKVxuKiAqKkF6dXJlOioqIFRoZSBbRnVsbHkgUXVhbGlmaWVkIFJlc291cmNlIElEXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9yZXNvdXJjZXMvcmVzb3VyY2VzL2dldC1ieS1pZCkuXG5cbk9uIHNvbWUgcHJvdmlkZXJzLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgZnVsbCBJRCBhdCBzdGFydHVwLFxud2hpY2ggaXMgd2h5IHRoaXMgZmllbGQgY2Fubm90IGJlIG1hZGUgcmVxdWlyZWQuIEZvciBleGFtcGxlLCBvbiBBV1MgdGhlIGFjY291bnQgSURcbnBhcnQgb2YgdGhlIEFSTiBpcyBub3QgYXZhaWxhYmxlIHdpdGhvdXQgY2FsbGluZyBhbm90aGVyIEFXUyBBUElcbndoaWNoIG1heSBiZSBkZWVtZWQgdG9vIHNsb3cgZm9yIGEgc2hvcnQtcnVubmluZyBsYW1iZGEgZnVuY3Rpb24uXG5BcyBhbiBhbHRlcm5hdGl2ZSwgY29uc2lkZXIgc2V0dGluZyBgZmFhcy5pZGAgYXMgYSBzcGFuIGF0dHJpYnV0ZSBpbnN0ZWFkLlxuKlxuKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9DTE9VRF9SRVNPVVJDRV9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfRkFBU19JRCA9IFRNUF9GQUFTX0lEO1xuLyoqXG4qIFRoZSBpbW11dGFibGUgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZWQuXG4qXG4qIE5vdGU6IERlcGVuZGluZyBvbiB0aGUgY2xvdWQgcHJvdmlkZXIgYW5kIHBsYXRmb3JtLCB1c2U6XG5cbiogKipBV1MgTGFtYmRhOioqIFRoZSBbZnVuY3Rpb24gdmVyc2lvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvY29uZmlndXJhdGlvbi12ZXJzaW9ucy5odG1sKVxuICAoYW4gaW50ZWdlciByZXByZXNlbnRlZCBhcyBhIGRlY2ltYWwgc3RyaW5nKS5cbiogKipHb29nbGUgQ2xvdWQgUnVuOioqIFRoZSBbcmV2aXNpb25dKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9ydW4vZG9jcy9tYW5hZ2luZy9yZXZpc2lvbnMpXG4gIChpLmUuLCB0aGUgZnVuY3Rpb24gbmFtZSBwbHVzIHRoZSByZXZpc2lvbiBzdWZmaXgpLlxuKiAqKkdvb2dsZSBDbG91ZCBGdW5jdGlvbnM6KiogVGhlIHZhbHVlIG9mIHRoZVxuICBbYEtfUkVWSVNJT05gIGVudmlyb25tZW50IHZhcmlhYmxlXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZnVuY3Rpb25zL2RvY3MvZW52LXZhciNydW50aW1lX2Vudmlyb25tZW50X3ZhcmlhYmxlc19zZXRfYXV0b21hdGljYWxseSkuXG4qICoqQXp1cmUgRnVuY3Rpb25zOioqIE5vdCBhcHBsaWNhYmxlLiBEbyBub3Qgc2V0IHRoaXMgYXR0cmlidXRlLlxuKlxuKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9GQUFTX1ZFUlNJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0ZBQVNfVkVSU0lPTiA9IFRNUF9GQUFTX1ZFUlNJT047XG4vKipcbiAqIFRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgSUQgYXMgYSBzdHJpbmcsIHRoYXQgd2lsbCBiZSBwb3RlbnRpYWxseSByZXVzZWQgZm9yIG90aGVyIGludm9jYXRpb25zIHRvIHRoZSBzYW1lIGZ1bmN0aW9uL2Z1bmN0aW9uIHZlcnNpb24uXG4gKlxuICogTm90ZTogKiAqKkFXUyBMYW1iZGE6KiogVXNlIHRoZSAoZnVsbCkgbG9nIHN0cmVhbSBuYW1lLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfSU5TVEFOQ0UgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19GQUFTX0lOU1RBTkNFID0gVE1QX0ZBQVNfSU5TVEFOQ0U7XG4vKipcbiAqIFRoZSBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZSB0byB0aGUgc2VydmVybGVzcyBmdW5jdGlvbiBpbiBNaUIuXG4gKlxuICogTm90ZTogSXQmIzM5O3MgcmVjb21tZW5kZWQgdG8gc2V0IHRoaXMgYXR0cmlidXRlIHNpbmNlIGUuZy4gdG9vIGxpdHRsZSBtZW1vcnkgY2FuIGVhc2lseSBzdG9wIGEgSmF2YSBBV1MgTGFtYmRhIGZ1bmN0aW9uIGZyb20gd29ya2luZyBjb3JyZWN0bHkuIE9uIEFXUyBMYW1iZGEsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgQVdTX0xBTUJEQV9GVU5DVElPTl9NRU1PUllfU0laRWAgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9GQUFTX01BWF9NRU1PUlkgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19GQUFTX01BWF9NRU1PUlkgPSBUTVBfRkFBU19NQVhfTUVNT1JZO1xuLyoqXG4gKiBVbmlxdWUgaG9zdCBJRC4gRm9yIENsb3VkLCB0aGlzIG11c3QgYmUgdGhlIGluc3RhbmNlX2lkIGFzc2lnbmVkIGJ5IHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IT1NUX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9JRCA9IFRNUF9IT1NUX0lEO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0LiBPbiBVbml4IHN5c3RlbXMsIGl0IG1heSBjb250YWluIHdoYXQgdGhlIGhvc3RuYW1lIGNvbW1hbmQgcmV0dXJucywgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IT1NUX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19IT1NUX05BTUUgPSBUTVBfSE9TVF9OQU1FO1xuLyoqXG4gKiBUeXBlIG9mIGhvc3QuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBtYWNoaW5lIHR5cGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSE9TVF9UWVBFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9UWVBFID0gVE1QX0hPU1RfVFlQRTtcbi8qKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUgdGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSE9TVF9BUkNIIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9BUkNIID0gVE1QX0hPU1RfQVJDSDtcbi8qKlxuICogTmFtZSBvZiB0aGUgVk0gaW1hZ2Ugb3IgT1MgaW5zdGFsbCB0aGUgaG9zdCB3YXMgaW5zdGFudGlhdGVkIGZyb20uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSE9TVF9JTUFHRV9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9JTUFHRV9OQU1FID0gVE1QX0hPU1RfSU1BR0VfTkFNRTtcbi8qKlxuICogVk0gaW1hZ2UgSUQuIEZvciBDbG91ZCwgdGhpcyB2YWx1ZSBpcyBmcm9tIHRoZSBwcm92aWRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9IT1NUX0lNQUdFX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9JTUFHRV9JRCA9IFRNUF9IT1NUX0lNQUdFX0lEO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIFZNIGltYWdlIGFzIGRlZmluZWQgaW4gW1ZlcnNpb24gQXR0cmlidXRlc10oUkVBRE1FLm1kI3ZlcnNpb24tYXR0cmlidXRlcykuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSE9TVF9JTUFHRV9WRVJTSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSE9TVF9JTUFHRV9WRVJTSU9OID0gVE1QX0hPU1RfSU1BR0VfVkVSU0lPTjtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSzhTX0NMVVNURVJfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19DTFVTVEVSX05BTUUgPSBUTVBfSzhTX0NMVVNURVJfTkFNRTtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIE5vZGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSzhTX05PREVfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19OT0RFX05BTUUgPSBUTVBfSzhTX05PREVfTkFNRTtcbi8qKlxuICogVGhlIFVJRCBvZiB0aGUgTm9kZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfTk9ERV9VSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfTk9ERV9VSUQgPSBUTVBfSzhTX05PREVfVUlEO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbmFtZXNwYWNlIHRoYXQgdGhlIHBvZCBpcyBydW5uaW5nIGluLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19OQU1FU1BBQ0VfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19OQU1FU1BBQ0VfTkFNRSA9IFRNUF9LOFNfTkFNRVNQQUNFX05BTUU7XG4vKipcbiAqIFRoZSBVSUQgb2YgdGhlIFBvZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfUE9EX1VJRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19QT0RfVUlEID0gVE1QX0s4U19QT0RfVUlEO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgUG9kLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19QT0RfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19QT0RfTkFNRSA9IFRNUF9LOFNfUE9EX05BTUU7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBDb250YWluZXIgaW4gYSBQb2QgdGVtcGxhdGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSzhTX0NPTlRBSU5FUl9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX0NPTlRBSU5FUl9OQU1FID0gVE1QX0s4U19DT05UQUlORVJfTkFNRTtcbi8qKlxuICogVGhlIFVJRCBvZiB0aGUgUmVwbGljYVNldC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfUkVQTElDQVNFVF9VSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfUkVQTElDQVNFVF9VSUQgPSBUTVBfSzhTX1JFUExJQ0FTRVRfVUlEO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgUmVwbGljYVNldC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfUkVQTElDQVNFVF9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfSzhTX1JFUExJQ0FTRVRfTkFNRSA9IFRNUF9LOFNfUkVQTElDQVNFVF9OQU1FO1xuLyoqXG4gKiBUaGUgVUlEIG9mIHRoZSBEZXBsb3ltZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19ERVBMT1lNRU5UX1VJRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19ERVBMT1lNRU5UX1VJRCA9IFRNUF9LOFNfREVQTE9ZTUVOVF9VSUQ7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBEZXBsb3ltZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19ERVBMT1lNRU5UX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfREVQTE9ZTUVOVF9OQU1FID0gVE1QX0s4U19ERVBMT1lNRU5UX05BTUU7XG4vKipcbiAqIFRoZSBVSUQgb2YgdGhlIFN0YXRlZnVsU2V0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19TVEFURUZVTFNFVF9VSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfU1RBVEVGVUxTRVRfVUlEID0gVE1QX0s4U19TVEFURUZVTFNFVF9VSUQ7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBTdGF0ZWZ1bFNldC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfU1RBVEVGVUxTRVRfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19TVEFURUZVTFNFVF9OQU1FID0gVE1QX0s4U19TVEFURUZVTFNFVF9OQU1FO1xuLyoqXG4gKiBUaGUgVUlEIG9mIHRoZSBEYWVtb25TZXQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSzhTX0RBRU1PTlNFVF9VSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfREFFTU9OU0VUX1VJRCA9IFRNUF9LOFNfREFFTU9OU0VUX1VJRDtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIERhZW1vblNldC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfREFFTU9OU0VUX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfREFFTU9OU0VUX05BTUUgPSBUTVBfSzhTX0RBRU1PTlNFVF9OQU1FO1xuLyoqXG4gKiBUaGUgVUlEIG9mIHRoZSBKb2IuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfSzhTX0pPQl9VSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfSk9CX1VJRCA9IFRNUF9LOFNfSk9CX1VJRDtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIEpvYi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9LOFNfSk9CX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfSk9CX05BTUUgPSBUTVBfSzhTX0pPQl9OQU1FO1xuLyoqXG4gKiBUaGUgVUlEIG9mIHRoZSBDcm9uSm9iLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19DUk9OSk9CX1VJRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX0s4U19DUk9OSk9CX1VJRCA9IFRNUF9LOFNfQ1JPTkpPQl9VSUQ7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBDcm9uSm9iLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0s4U19DUk9OSk9CX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19LOFNfQ1JPTkpPQl9OQU1FID0gVE1QX0s4U19DUk9OSk9CX05BTUU7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfT1NfVFlQRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX09TX1RZUEUgPSBUTVBfT1NfVFlQRTtcbi8qKlxuICogSHVtYW4gcmVhZGFibGUgKG5vdCBpbnRlbmRlZCB0byBiZSBwYXJzZWQpIE9TIHZlcnNpb24gaW5mb3JtYXRpb24sIGxpa2UgZS5nLiByZXBvcnRlZCBieSBgdmVyYCBvciBgbHNiX3JlbGVhc2UgLWFgIGNvbW1hbmRzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX09TX0RFU0NSSVBUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfT1NfREVTQ1JJUFRJT04gPSBUTVBfT1NfREVTQ1JJUFRJT047XG4vKipcbiAqIEh1bWFuIHJlYWRhYmxlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9PU19OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfT1NfTkFNRSA9IFRNUF9PU19OQU1FO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYXMgZGVmaW5lZCBpbiBbVmVyc2lvbiBBdHRyaWJ1dGVzXSguLi8uLi9yZXNvdXJjZS9zZW1hbnRpY19jb252ZW50aW9ucy9SRUFETUUubWQjdmVyc2lvbi1hdHRyaWJ1dGVzKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9PU19WRVJTSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfT1NfVkVSU0lPTiA9IFRNUF9PU19WRVJTSU9OO1xuLyoqXG4gKiBQcm9jZXNzIGlkZW50aWZpZXIgKFBJRCkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUFJPQ0VTU19QSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX1BJRCA9IFRNUF9QUk9DRVNTX1BJRDtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZS4gT24gTGludXggYmFzZWQgc3lzdGVtcywgY2FuIGJlIHNldCB0byB0aGUgYE5hbWVgIGluIGBwcm9jL1twaWRdL3N0YXR1c2AuIE9uIFdpbmRvd3MsIGNhbiBiZSBzZXQgdG8gdGhlIGJhc2UgbmFtZSBvZiBgR2V0UHJvY2Vzc0ltYWdlRmlsZU5hbWVXYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfRVhFQ1VUQUJMRV9OQU1FID0gVE1QX1BST0NFU1NfRVhFQ1VUQUJMRV9OQU1FO1xuLyoqXG4gKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9jZXNzIGV4ZWN1dGFibGUuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHRhcmdldCBvZiBgcHJvYy9bcGlkXS9leGVgLiBPbiBXaW5kb3dzLCBjYW4gYmUgc2V0IHRvIHRoZSByZXN1bHQgb2YgYEdldFByb2Nlc3NJbWFnZUZpbGVOYW1lV2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUFJPQ0VTU19FWEVDVVRBQkxFX1BBVEggaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9IFRNUF9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSDtcbi8qKlxuICogVGhlIGNvbW1hbmQgdXNlZCB0byBsYXVuY2ggdGhlIHByb2Nlc3MgKGkuZS4gdGhlIGNvbW1hbmQgbmFtZSkuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHplcm90aCBzdHJpbmcgaW4gYHByb2MvW3BpZF0vY21kbGluZWAuIE9uIFdpbmRvd3MsIGNhbiBiZSBzZXQgdG8gdGhlIGZpcnN0IHBhcmFtZXRlciBleHRyYWN0ZWQgZnJvbSBgR2V0Q29tbWFuZExpbmVXYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9QUk9DRVNTX0NPTU1BTkQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX0NPTU1BTkQgPSBUTVBfUFJPQ0VTU19DT01NQU5EO1xuLyoqXG4gKiBUaGUgZnVsbCBjb21tYW5kIHVzZWQgdG8gbGF1bmNoIHRoZSBwcm9jZXNzIGFzIGEgc2luZ2xlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZ1bGwgY29tbWFuZC4gT24gV2luZG93cywgY2FuIGJlIHNldCB0byB0aGUgcmVzdWx0IG9mIGBHZXRDb21tYW5kTGluZVdgLiBEbyBub3Qgc2V0IHRoaXMgaWYgeW91IGhhdmUgdG8gYXNzZW1ibGUgaXQganVzdCBmb3IgbW9uaXRvcmluZzsgdXNlIGBwcm9jZXNzLmNvbW1hbmRfYXJnc2AgaW5zdGVhZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9QUk9DRVNTX0NPTU1BTkRfTElORSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfQ09NTUFORF9MSU5FID0gVE1QX1BST0NFU1NfQ09NTUFORF9MSU5FO1xuLyoqXG4gKiBBbGwgdGhlIGNvbW1hbmQgYXJndW1lbnRzIChpbmNsdWRpbmcgdGhlIGNvbW1hbmQvZXhlY3V0YWJsZSBpdHNlbGYpIGFzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLiBPbiBMaW51eC1iYXNlZCBzeXN0ZW1zIChhbmQgc29tZSBvdGhlciBVbml4b2lkIHN5c3RlbXMgc3VwcG9ydGluZyBwcm9jZnMpLCBjYW4gYmUgc2V0IGFjY29yZGluZyB0byB0aGUgbGlzdCBvZiBudWxsLWRlbGltaXRlZCBzdHJpbmdzIGV4dHJhY3RlZCBmcm9tIGBwcm9jL1twaWRdL2NtZGxpbmVgLiBGb3IgbGliYy1iYXNlZCBleGVjdXRhYmxlcywgdGhpcyB3b3VsZCBiZSB0aGUgZnVsbCBhcmd2IHZlY3RvciBwYXNzZWQgdG8gYG1haW5gLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1BST0NFU1NfQ09NTUFORF9BUkdTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfUFJPQ0VTU19DT01NQU5EX0FSR1MgPSBUTVBfUFJPQ0VTU19DT01NQU5EX0FSR1M7XG4vKipcbiAqIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlciB0aGF0IG93bnMgdGhlIHByb2Nlc3MuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUFJPQ0VTU19PV05FUiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfT1dORVIgPSBUTVBfUFJPQ0VTU19PV05FUjtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHJ1bnRpbWUgb2YgdGhpcyBwcm9jZXNzLiBGb3IgY29tcGlsZWQgbmF0aXZlIGJpbmFyaWVzLCB0aGlzIFNIT1VMRCBiZSB0aGUgbmFtZSBvZiB0aGUgY29tcGlsZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19QUk9DRVNTX1JVTlRJTUVfTkFNRSA9IFRNUF9QUk9DRVNTX1JVTlRJTUVfTkFNRTtcbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHJ1bnRpbWUgb2YgdGhpcyBwcm9jZXNzLCBhcyByZXR1cm5lZCBieSB0aGUgcnVudGltZSB3aXRob3V0IG1vZGlmaWNhdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OID0gVE1QX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OO1xuLyoqXG4gKiBBbiBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGFib3V0IHRoZSBydW50aW1lIG9mIHRoZSBwcm9jZXNzLCBmb3IgZXhhbXBsZSBhIHNwZWNpZmljIHZlbmRvciBjdXN0b21pemF0aW9uIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTiA9IFRNUF9QUk9DRVNTX1JVTlRJTUVfREVTQ1JJUFRJT047XG4vKipcbiAqIExvZ2ljYWwgbmFtZSBvZiB0aGUgc2VydmljZS5cbiAqXG4gKiBOb3RlOiBNVVNUIGJlIHRoZSBzYW1lIGZvciBhbGwgaW5zdGFuY2VzIG9mIGhvcml6b250YWxseSBzY2FsZWQgc2VydmljZXMuIElmIHRoZSB2YWx1ZSB3YXMgbm90IHNwZWNpZmllZCwgU0RLcyBNVVNUIGZhbGxiYWNrIHRvIGB1bmtub3duX3NlcnZpY2U6YCBjb25jYXRlbmF0ZWQgd2l0aCBbYHByb2Nlc3MuZXhlY3V0YWJsZS5uYW1lYF0ocHJvY2Vzcy5tZCNwcm9jZXNzKSwgZS5nLiBgdW5rbm93bl9zZXJ2aWNlOmJhc2hgLiBJZiBgcHJvY2Vzcy5leGVjdXRhYmxlLm5hbWVgIGlzIG5vdCBhdmFpbGFibGUsIHRoZSB2YWx1ZSBNVVNUIGJlIHNldCB0byBgdW5rbm93bl9zZXJ2aWNlYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9TRVJWSUNFX05BTUUuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FID0gVE1QX1NFUlZJQ0VfTkFNRTtcbi8qKlxuICogQSBuYW1lc3BhY2UgZm9yIGBzZXJ2aWNlLm5hbWVgLlxuICpcbiAqIE5vdGU6IEEgc3RyaW5nIHZhbHVlIGhhdmluZyBhIG1lYW5pbmcgdGhhdCBoZWxwcyB0byBkaXN0aW5ndWlzaCBhIGdyb3VwIG9mIHNlcnZpY2VzLCBmb3IgZXhhbXBsZSB0aGUgdGVhbSBuYW1lIHRoYXQgb3ducyBhIGdyb3VwIG9mIHNlcnZpY2VzLiBgc2VydmljZS5uYW1lYCBpcyBleHBlY3RlZCB0byBiZSB1bmlxdWUgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS4gSWYgYHNlcnZpY2UubmFtZXNwYWNlYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBSZXNvdXJjZSB0aGVuIGBzZXJ2aWNlLm5hbWVgIGlzIGV4cGVjdGVkIHRvIGJlIHVuaXF1ZSBmb3IgYWxsIHNlcnZpY2VzIHRoYXQgaGF2ZSBubyBleHBsaWNpdCBuYW1lc3BhY2UgZGVmaW5lZCAoc28gdGhlIGVtcHR5L3Vuc3BlY2lmaWVkIG5hbWVzcGFjZSBpcyBzaW1wbHkgb25lIG1vcmUgdmFsaWQgbmFtZXNwYWNlKS4gWmVyby1sZW5ndGggbmFtZXNwYWNlIHN0cmluZyBpcyBhc3N1bWVkIGVxdWFsIHRvIHVuc3BlY2lmaWVkIG5hbWVzcGFjZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9TRVJWSUNFX05BTUVTUEFDRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLlNFTVJFU0FUVFJTX1NFUlZJQ0VfTkFNRVNQQUNFID0gVE1QX1NFUlZJQ0VfTkFNRVNQQUNFO1xuLyoqXG4gKiBUaGUgc3RyaW5nIElEIG9mIHRoZSBzZXJ2aWNlIGluc3RhbmNlLlxuICpcbiAqIE5vdGU6IE1VU1QgYmUgdW5pcXVlIGZvciBlYWNoIGluc3RhbmNlIG9mIHRoZSBzYW1lIGBzZXJ2aWNlLm5hbWVzcGFjZSxzZXJ2aWNlLm5hbWVgIHBhaXIgKGluIG90aGVyIHdvcmRzIGBzZXJ2aWNlLm5hbWVzcGFjZSxzZXJ2aWNlLm5hbWUsc2VydmljZS5pbnN0YW5jZS5pZGAgdHJpcGxldCBNVVNUIGJlIGdsb2JhbGx5IHVuaXF1ZSkuIFRoZSBJRCBoZWxwcyB0byBkaXN0aW5ndWlzaCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc2VydmljZSB0aGF0IGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUgKGUuZy4gaW5zdGFuY2VzIG9mIGEgaG9yaXpvbnRhbGx5IHNjYWxlZCBzZXJ2aWNlKS4gSXQgaXMgcHJlZmVyYWJsZSBmb3IgdGhlIElEIHRvIGJlIHBlcnNpc3RlbnQgYW5kIHN0YXkgdGhlIHNhbWUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgc2VydmljZSBpbnN0YW5jZSwgaG93ZXZlciBpdCBpcyBhY2NlcHRhYmxlIHRoYXQgdGhlIElEIGlzIGVwaGVtZXJhbCBhbmQgY2hhbmdlcyBkdXJpbmcgaW1wb3J0YW50IGxpZmV0aW1lIGV2ZW50cyBmb3IgdGhlIHNlcnZpY2UgKGUuZy4gc2VydmljZSByZXN0YXJ0cykuIElmIHRoZSBzZXJ2aWNlIGhhcyBubyBpbmhlcmVudCB1bmlxdWUgSUQgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXQgaXMgcmVjb21tZW5kZWQgdG8gZ2VuZXJhdGUgYSByYW5kb20gVmVyc2lvbiAxIG9yIFZlcnNpb24gNCBSRkMgNDEyMiBVVUlEIChzZXJ2aWNlcyBhaW1pbmcgZm9yIHJlcHJvZHVjaWJsZSBVVUlEcyBtYXkgYWxzbyB1c2UgVmVyc2lvbiA1LCBzZWUgUkZDIDQxMjIgZm9yIG1vcmUgcmVjb21tZW5kYXRpb25zKS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9TRVJWSUNFX0lOU1RBTkNFX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfU0VSVklDRV9JTlNUQU5DRV9JRCA9IFRNUF9TRVJWSUNFX0lOU1RBTkNFX0lEO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIHNlcnZpY2UgQVBJIG9yIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1NFUlZJQ0VfVkVSU0lPTi5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19TRVJWSUNFX1ZFUlNJT04gPSBUTVBfU0VSVklDRV9WRVJTSU9OO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdGVsZW1ldHJ5IFNESyBhcyBkZWZpbmVkIGFib3ZlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1RFTEVNRVRSWV9TREtfTkFNRS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19URUxFTUVUUllfU0RLX05BTUUgPSBUTVBfVEVMRU1FVFJZX1NES19OQU1FO1xuLyoqXG4gKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHRlbGVtZXRyeSBTREsuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19URUxFTUVUUllfU0RLX0xBTkdVQUdFID0gVE1QX1RFTEVNRVRSWV9TREtfTEFOR1VBR0U7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgdGVsZW1ldHJ5IFNESy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9URUxFTUVUUllfU0RLX1ZFUlNJT04uXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfVEVMRU1FVFJZX1NES19WRVJTSU9OID0gVE1QX1RFTEVNRVRSWV9TREtfVkVSU0lPTjtcbi8qKlxuICogVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBhdXRvIGluc3RydW1lbnRhdGlvbiBhZ2VudCwgaWYgdXNlZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9URUxFTUVUUllfRElTVFJPX1ZFUlNJT04gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5TRU1SRVNBVFRSU19URUxFTUVUUllfQVVUT19WRVJTSU9OID0gVE1QX1RFTEVNRVRSWV9BVVRPX1ZFUlNJT047XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSB3ZWIgZW5naW5lLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1dFQkVOR0lORV9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfV0VCRU5HSU5FX05BTUUgPSBUTVBfV0VCRU5HSU5FX05BTUU7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSB3ZWIgZW5naW5lLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX1dFQkVOR0lORV9WRVJTSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfV0VCRU5HSU5FX1ZFUlNJT04gPSBUTVBfV0VCRU5HSU5FX1ZFUlNJT047XG4vKipcbiAqIEFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHdlYiBlbmdpbmUgKGUuZy4gZGV0YWlsZWQgdmVyc2lvbiBhbmQgZWRpdGlvbiBpbmZvcm1hdGlvbikuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfV0VCRU5HSU5FX0RFU0NSSVBUSU9OIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuU0VNUkVTQVRUUlNfV0VCRU5HSU5FX0RFU0NSSVBUSU9OID0gVE1QX1dFQkVOR0lORV9ERVNDUklQVElPTjtcbi8qKlxuICogQ3JlYXRlIGV4cG9ydGVkIFZhbHVlIE1hcCBmb3IgU2VtYW50aWNSZXNvdXJjZUF0dHJpYnV0ZXMgdmFsdWVzXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIFNFTVJFU0FUVFJTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgU2VtYW50aWNSZXNvdXJjZUF0dHJpYnV0ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb25cbiAqL1xuZXhwb3J0cy5TZW1hbnRpY1Jlc291cmNlQXR0cmlidXRlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9DTE9VRF9QUk9WSURFUixcbiAgICBUTVBfQ0xPVURfQUNDT1VOVF9JRCxcbiAgICBUTVBfQ0xPVURfUkVHSU9OLFxuICAgIFRNUF9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSxcbiAgICBUTVBfQ0xPVURfUExBVEZPUk0sXG4gICAgVE1QX0FXU19FQ1NfQ09OVEFJTkVSX0FSTixcbiAgICBUTVBfQVdTX0VDU19DTFVTVEVSX0FSTixcbiAgICBUTVBfQVdTX0VDU19MQVVOQ0hUWVBFLFxuICAgIFRNUF9BV1NfRUNTX1RBU0tfQVJOLFxuICAgIFRNUF9BV1NfRUNTX1RBU0tfRkFNSUxZLFxuICAgIFRNUF9BV1NfRUNTX1RBU0tfUkVWSVNJT04sXG4gICAgVE1QX0FXU19FS1NfQ0xVU1RFUl9BUk4sXG4gICAgVE1QX0FXU19MT0dfR1JPVVBfTkFNRVMsXG4gICAgVE1QX0FXU19MT0dfR1JPVVBfQVJOUyxcbiAgICBUTVBfQVdTX0xPR19TVFJFQU1fTkFNRVMsXG4gICAgVE1QX0FXU19MT0dfU1RSRUFNX0FSTlMsXG4gICAgVE1QX0NPTlRBSU5FUl9OQU1FLFxuICAgIFRNUF9DT05UQUlORVJfSUQsXG4gICAgVE1QX0NPTlRBSU5FUl9SVU5USU1FLFxuICAgIFRNUF9DT05UQUlORVJfSU1BR0VfTkFNRSxcbiAgICBUTVBfQ09OVEFJTkVSX0lNQUdFX1RBRyxcbiAgICBUTVBfREVQTE9ZTUVOVF9FTlZJUk9OTUVOVCxcbiAgICBUTVBfREVWSUNFX0lELFxuICAgIFRNUF9ERVZJQ0VfTU9ERUxfSURFTlRJRklFUixcbiAgICBUTVBfREVWSUNFX01PREVMX05BTUUsXG4gICAgVE1QX0ZBQVNfTkFNRSxcbiAgICBUTVBfRkFBU19JRCxcbiAgICBUTVBfRkFBU19WRVJTSU9OLFxuICAgIFRNUF9GQUFTX0lOU1RBTkNFLFxuICAgIFRNUF9GQUFTX01BWF9NRU1PUlksXG4gICAgVE1QX0hPU1RfSUQsXG4gICAgVE1QX0hPU1RfTkFNRSxcbiAgICBUTVBfSE9TVF9UWVBFLFxuICAgIFRNUF9IT1NUX0FSQ0gsXG4gICAgVE1QX0hPU1RfSU1BR0VfTkFNRSxcbiAgICBUTVBfSE9TVF9JTUFHRV9JRCxcbiAgICBUTVBfSE9TVF9JTUFHRV9WRVJTSU9OLFxuICAgIFRNUF9LOFNfQ0xVU1RFUl9OQU1FLFxuICAgIFRNUF9LOFNfTk9ERV9OQU1FLFxuICAgIFRNUF9LOFNfTk9ERV9VSUQsXG4gICAgVE1QX0s4U19OQU1FU1BBQ0VfTkFNRSxcbiAgICBUTVBfSzhTX1BPRF9VSUQsXG4gICAgVE1QX0s4U19QT0RfTkFNRSxcbiAgICBUTVBfSzhTX0NPTlRBSU5FUl9OQU1FLFxuICAgIFRNUF9LOFNfUkVQTElDQVNFVF9VSUQsXG4gICAgVE1QX0s4U19SRVBMSUNBU0VUX05BTUUsXG4gICAgVE1QX0s4U19ERVBMT1lNRU5UX1VJRCxcbiAgICBUTVBfSzhTX0RFUExPWU1FTlRfTkFNRSxcbiAgICBUTVBfSzhTX1NUQVRFRlVMU0VUX1VJRCxcbiAgICBUTVBfSzhTX1NUQVRFRlVMU0VUX05BTUUsXG4gICAgVE1QX0s4U19EQUVNT05TRVRfVUlELFxuICAgIFRNUF9LOFNfREFFTU9OU0VUX05BTUUsXG4gICAgVE1QX0s4U19KT0JfVUlELFxuICAgIFRNUF9LOFNfSk9CX05BTUUsXG4gICAgVE1QX0s4U19DUk9OSk9CX1VJRCxcbiAgICBUTVBfSzhTX0NST05KT0JfTkFNRSxcbiAgICBUTVBfT1NfVFlQRSxcbiAgICBUTVBfT1NfREVTQ1JJUFRJT04sXG4gICAgVE1QX09TX05BTUUsXG4gICAgVE1QX09TX1ZFUlNJT04sXG4gICAgVE1QX1BST0NFU1NfUElELFxuICAgIFRNUF9QUk9DRVNTX0VYRUNVVEFCTEVfTkFNRSxcbiAgICBUTVBfUFJPQ0VTU19FWEVDVVRBQkxFX1BBVEgsXG4gICAgVE1QX1BST0NFU1NfQ09NTUFORCxcbiAgICBUTVBfUFJPQ0VTU19DT01NQU5EX0xJTkUsXG4gICAgVE1QX1BST0NFU1NfQ09NTUFORF9BUkdTLFxuICAgIFRNUF9QUk9DRVNTX09XTkVSLFxuICAgIFRNUF9QUk9DRVNTX1JVTlRJTUVfTkFNRSxcbiAgICBUTVBfUFJPQ0VTU19SVU5USU1FX1ZFUlNJT04sXG4gICAgVE1QX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTixcbiAgICBUTVBfU0VSVklDRV9OQU1FLFxuICAgIFRNUF9TRVJWSUNFX05BTUVTUEFDRSxcbiAgICBUTVBfU0VSVklDRV9JTlNUQU5DRV9JRCxcbiAgICBUTVBfU0VSVklDRV9WRVJTSU9OLFxuICAgIFRNUF9URUxFTUVUUllfU0RLX05BTUUsXG4gICAgVE1QX1RFTEVNRVRSWV9TREtfTEFOR1VBR0UsXG4gICAgVE1QX1RFTEVNRVRSWV9TREtfVkVSU0lPTixcbiAgICBUTVBfVEVMRU1FVFJZX0FVVE9fVkVSU0lPTixcbiAgICBUTVBfV0VCRU5HSU5FX05BTUUsXG4gICAgVE1QX1dFQkVOR0lORV9WRVJTSU9OLFxuICAgIFRNUF9XRUJFTkdJTkVfREVTQ1JJUFRJT04sXG5dKTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgQ2xvdWRQcm92aWRlclZhbHVlcyBlbnVtIGRlZmluaXRpb25cbiAqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8vIFRlbXBvcmFyeSBsb2NhbCBjb25zdGFudHMgdG8gYXNzaWduIHRvIHRoZSBpbmRpdmlkdWFsIGV4cG9ydHMgYW5kIHRoZSBuYW1lc3BhY2VkIHZlcnNpb25cbi8vIFJlcXVpcmVkIHRvIGF2b2lkIHRoZSBuYW1lc3BhY2UgZXhwb3J0cyB1c2luZyB0aGUgdW5taW5pZmlhYmxlIGV4cG9ydCBuYW1lcyBmb3Igc29tZSBwYWNrYWdlIHR5cGVzXG5jb25zdCBUTVBfQ0xPVURQUk9WSURFUlZBTFVFU19BTElCQUJBX0NMT1VEID0gJ2FsaWJhYmFfY2xvdWQnO1xuY29uc3QgVE1QX0NMT1VEUFJPVklERVJWQUxVRVNfQVdTID0gJ2F3cyc7XG5jb25zdCBUTVBfQ0xPVURQUk9WSURFUlZBTFVFU19BWlVSRSA9ICdhenVyZSc7XG5jb25zdCBUTVBfQ0xPVURQUk9WSURFUlZBTFVFU19HQ1AgPSAnZ2NwJztcbi8qKlxuICogTmFtZSBvZiB0aGUgY2xvdWQgcHJvdmlkZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIENMT1VEX1BST1ZJREVSX1ZBTFVFX0FMSUJBQkFfQ0xPVUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5DTE9VRFBST1ZJREVSVkFMVUVTX0FMSUJBQkFfQ0xPVUQgPSBUTVBfQ0xPVURQUk9WSURFUlZBTFVFU19BTElCQUJBX0NMT1VEO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUFJPVklERVJfVkFMVUVfQVdTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQ0xPVURQUk9WSURFUlZBTFVFU19BV1MgPSBUTVBfQ0xPVURQUk9WSURFUlZBTFVFU19BV1M7XG4vKipcbiAqIE5hbWUgb2YgdGhlIGNsb3VkIHByb3ZpZGVyLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBDTE9VRF9QUk9WSURFUl9WQUxVRV9BWlVSRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUFJPVklERVJWQUxVRVNfQVpVUkUgPSBUTVBfQ0xPVURQUk9WSURFUlZBTFVFU19BWlVSRTtcbi8qKlxuICogTmFtZSBvZiB0aGUgY2xvdWQgcHJvdmlkZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIENMT1VEX1BST1ZJREVSX1ZBTFVFX0dDUCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUFJPVklERVJWQUxVRVNfR0NQID0gVE1QX0NMT1VEUFJPVklERVJWQUxVRVNfR0NQO1xuLyoqXG4gKiBUaGUgY29uc3RhbnQgbWFwIG9mIHZhbHVlcyBmb3IgQ2xvdWRQcm92aWRlclZhbHVlcy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgQ0xPVURQUk9WSURFUlZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIENsb3VkUHJvdmlkZXJWYWx1ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb24uXG4gKi9cbmV4cG9ydHMuQ2xvdWRQcm92aWRlclZhbHVlcyA9IFxuLyojX19QVVJFX18qLyAoMCwgdXRpbHNfMS5jcmVhdGVDb25zdE1hcCkoW1xuICAgIFRNUF9DTE9VRFBST1ZJREVSVkFMVUVTX0FMSUJBQkFfQ0xPVUQsXG4gICAgVE1QX0NMT1VEUFJPVklERVJWQUxVRVNfQVdTLFxuICAgIFRNUF9DTE9VRFBST1ZJREVSVkFMVUVTX0FaVVJFLFxuICAgIFRNUF9DTE9VRFBST1ZJREVSVkFMVUVTX0dDUCxcbl0pO1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnQgdmFsdWVzIGZvciBDbG91ZFBsYXRmb3JtVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8vIFRlbXBvcmFyeSBsb2NhbCBjb25zdGFudHMgdG8gYXNzaWduIHRvIHRoZSBpbmRpdmlkdWFsIGV4cG9ydHMgYW5kIHRoZSBuYW1lc3BhY2VkIHZlcnNpb25cbi8vIFJlcXVpcmVkIHRvIGF2b2lkIHRoZSBuYW1lc3BhY2UgZXhwb3J0cyB1c2luZyB0aGUgdW5taW5pZmlhYmxlIGV4cG9ydCBuYW1lcyBmb3Igc29tZSBwYWNrYWdlIHR5cGVzXG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BTElCQUJBX0NMT1VEX0VDUyA9ICdhbGliYWJhX2Nsb3VkX2Vjcyc7XG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BTElCQUJBX0NMT1VEX0ZDID0gJ2FsaWJhYmFfY2xvdWRfZmMnO1xuY29uc3QgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VDMiA9ICdhd3NfZWMyJztcbmNvbnN0IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FQ1MgPSAnYXdzX2Vjcyc7XG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BV1NfRUtTID0gJ2F3c19la3MnO1xuY29uc3QgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0xBTUJEQSA9ICdhd3NfbGFtYmRhJztcbmNvbnN0IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FTEFTVElDX0JFQU5TVEFMSyA9ICdhd3NfZWxhc3RpY19iZWFuc3RhbGsnO1xuY29uc3QgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfVk0gPSAnYXp1cmVfdm0nO1xuY29uc3QgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfQ09OVEFJTkVSX0lOU1RBTkNFUyA9ICdhenVyZV9jb250YWluZXJfaW5zdGFuY2VzJztcbmNvbnN0IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FaVVJFX0FLUyA9ICdhenVyZV9ha3MnO1xuY29uc3QgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfRlVOQ1RJT05TID0gJ2F6dXJlX2Z1bmN0aW9ucyc7XG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9BUFBfU0VSVklDRSA9ICdhenVyZV9hcHBfc2VydmljZSc7XG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQ09NUFVURV9FTkdJTkUgPSAnZ2NwX2NvbXB1dGVfZW5naW5lJztcbmNvbnN0IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9SVU4gPSAnZ2NwX2Nsb3VkX3J1bic7XG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfS1VCRVJORVRFU19FTkdJTkUgPSAnZ2NwX2t1YmVybmV0ZXNfZW5naW5lJztcbmNvbnN0IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9GVU5DVElPTlMgPSAnZ2NwX2Nsb3VkX2Z1bmN0aW9ucyc7XG5jb25zdCBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQVBQX0VOR0lORSA9ICdnY3BfYXBwX2VuZ2luZSc7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQUxJQkFCQV9DTE9VRF9FQ1MgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0FMSUJBQkFfQ0xPVURfRUNTID0gVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQUxJQkFCQV9DTE9VRF9FQ1M7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQUxJQkFCQV9DTE9VRF9GQyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQUxJQkFCQV9DTE9VRF9GQyA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FMSUJBQkFfQ0xPVURfRkM7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VDMiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VDMiA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FQzI7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VDUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VDUyA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FQ1M7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VLUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VLUyA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FS1M7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0xBTUJEQSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0xBTUJEQSA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19MQU1CREE7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VMQVNUSUNfQkVBTlNUQUxLIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BV1NfRUxBU1RJQ19CRUFOU1RBTEsgPSBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BV1NfRUxBU1RJQ19CRUFOU1RBTEs7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfVk0gaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0FaVVJFX1ZNID0gVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfVk07XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfQ09OVEFJTkVSX0lOU1RBTkNFUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfQ09OVEFJTkVSX0lOU1RBTkNFUyA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FaVVJFX0NPTlRBSU5FUl9JTlNUQU5DRVM7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfQUtTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9BS1MgPSBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9BS1M7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfRlVOQ1RJT05TIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9GVU5DVElPTlMgPSBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9GVU5DVElPTlM7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfQVBQX1NFUlZJQ0UgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0FaVVJFX0FQUF9TRVJWSUNFID0gVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfQVBQX1NFUlZJQ0U7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0NPTVBVVEVfRU5HSU5FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQ09NUFVURV9FTkdJTkUgPSBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQ09NUFVURV9FTkdJTkU7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0NMT1VEX1JVTiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0NMT1VEX1JVTiA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9SVU47XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0tVQkVSTkVURVNfRU5HSU5FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfS1VCRVJORVRFU19FTkdJTkUgPSBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfS1VCRVJORVRFU19FTkdJTkU7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0NMT1VEX0ZVTkNUSU9OUyBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkNMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0NMT1VEX0ZVTkNUSU9OUyA9IFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9GVU5DVElPTlM7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogTm90ZTogVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSBTSE9VTEQgbWF0Y2ggdGhlIG9uZSBzcGVjaWZpZWQgaW4gYGNsb3VkLnByb3ZpZGVyYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0FQUF9FTkdJTkUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9BUFBfRU5HSU5FID0gVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0FQUF9FTkdJTkU7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBDbG91ZFBsYXRmb3JtVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBDTE9VRFBMQVRGT1JNVkFMVUVTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgQ2xvdWRQbGF0Zm9ybVZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5DbG91ZFBsYXRmb3JtVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQUxJQkFCQV9DTE9VRF9FQ1MsXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQUxJQkFCQV9DTE9VRF9GQyxcbiAgICBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BV1NfRUMyLFxuICAgIFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FQ1MsXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVdTX0VLUyxcbiAgICBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BV1NfTEFNQkRBLFxuICAgIFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FTEFTVElDX0JFQU5TVEFMSyxcbiAgICBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9WTSxcbiAgICBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9DT05UQUlORVJfSU5TVEFOQ0VTLFxuICAgIFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0FaVVJFX0FLUyxcbiAgICBUTVBfQ0xPVURQTEFURk9STVZBTFVFU19BWlVSRV9GVU5DVElPTlMsXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfQVpVUkVfQVBQX1NFUlZJQ0UsXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0NPTVBVVEVfRU5HSU5FLFxuICAgIFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9SVU4sXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0tVQkVSTkVURVNfRU5HSU5FLFxuICAgIFRNUF9DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9DTE9VRF9GVU5DVElPTlMsXG4gICAgVE1QX0NMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0FQUF9FTkdJTkUsXG5dKTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgQXdzRWNzTGF1bmNodHlwZVZhbHVlcyBlbnVtIGRlZmluaXRpb25cbiAqXG4gKiBUaGUgW2xhdW5jaCB0eXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgZm9yIGFuIEVDUyB0YXNrLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLy8gVGVtcG9yYXJ5IGxvY2FsIGNvbnN0YW50cyB0byBhc3NpZ24gdG8gdGhlIGluZGl2aWR1YWwgZXhwb3J0cyBhbmQgdGhlIG5hbWVzcGFjZWQgdmVyc2lvblxuLy8gUmVxdWlyZWQgdG8gYXZvaWQgdGhlIG5hbWVzcGFjZSBleHBvcnRzIHVzaW5nIHRoZSB1bm1pbmlmaWFibGUgZXhwb3J0IG5hbWVzIGZvciBzb21lIHBhY2thZ2UgdHlwZXNcbmNvbnN0IFRNUF9BV1NFQ1NMQVVOQ0hUWVBFVkFMVUVTX0VDMiA9ICdlYzInO1xuY29uc3QgVE1QX0FXU0VDU0xBVU5DSFRZUEVWQUxVRVNfRkFSR0FURSA9ICdmYXJnYXRlJztcbi8qKlxuICogVGhlIFtsYXVuY2ggdHlwZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvbGF1bmNoX3R5cGVzLmh0bWwpIGZvciBhbiBFQ1MgdGFzay5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVdTX0VDU19MQVVOQ0hUWVBFX1ZBTFVFX0VDMiBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkFXU0VDU0xBVU5DSFRZUEVWQUxVRVNfRUMyID0gVE1QX0FXU0VDU0xBVU5DSFRZUEVWQUxVRVNfRUMyO1xuLyoqXG4gKiBUaGUgW2xhdW5jaCB0eXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgZm9yIGFuIEVDUyB0YXNrLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBV1NfRUNTX0xBVU5DSFRZUEVfVkFMVUVfRkFSR0FURSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkFXU0VDU0xBVU5DSFRZUEVWQUxVRVNfRkFSR0FURSA9IFRNUF9BV1NFQ1NMQVVOQ0hUWVBFVkFMVUVTX0ZBUkdBVEU7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBBd3NFY3NMYXVuY2h0eXBlVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBBV1NFQ1NMQVVOQ0hUWVBFVkFMVUVTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgQXdzRWNzTGF1bmNodHlwZVZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5Bd3NFY3NMYXVuY2h0eXBlVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX0FXU0VDU0xBVU5DSFRZUEVWQUxVRVNfRUMyLFxuICAgIFRNUF9BV1NFQ1NMQVVOQ0hUWVBFVkFMVUVTX0ZBUkdBVEUsXG5dKTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgSG9zdEFyY2hWYWx1ZXMgZW51bSBkZWZpbml0aW9uXG4gKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUgdGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX0hPU1RBUkNIVkFMVUVTX0FNRDY0ID0gJ2FtZDY0JztcbmNvbnN0IFRNUF9IT1NUQVJDSFZBTFVFU19BUk0zMiA9ICdhcm0zMic7XG5jb25zdCBUTVBfSE9TVEFSQ0hWQUxVRVNfQVJNNjQgPSAnYXJtNjQnO1xuY29uc3QgVE1QX0hPU1RBUkNIVkFMVUVTX0lBNjQgPSAnaWE2NCc7XG5jb25zdCBUTVBfSE9TVEFSQ0hWQUxVRVNfUFBDMzIgPSAncHBjMzInO1xuY29uc3QgVE1QX0hPU1RBUkNIVkFMVUVTX1BQQzY0ID0gJ3BwYzY0JztcbmNvbnN0IFRNUF9IT1NUQVJDSFZBTFVFU19YODYgPSAneDg2Jztcbi8qKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUgdGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhPU1RfQVJDSF9WQUxVRV9BTUQ2NCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkhPU1RBUkNIVkFMVUVTX0FNRDY0ID0gVE1QX0hPU1RBUkNIVkFMVUVTX0FNRDY0O1xuLyoqXG4gKiBUaGUgQ1BVIGFyY2hpdGVjdHVyZSB0aGUgaG9zdCBzeXN0ZW0gaXMgcnVubmluZyBvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgSE9TVF9BUkNIX1ZBTFVFX0FSTTMyIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuSE9TVEFSQ0hWQUxVRVNfQVJNMzIgPSBUTVBfSE9TVEFSQ0hWQUxVRVNfQVJNMzI7XG4vKipcbiAqIFRoZSBDUFUgYXJjaGl0ZWN0dXJlIHRoZSBob3N0IHN5c3RlbSBpcyBydW5uaW5nIG9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBIT1NUX0FSQ0hfVkFMVUVfQVJNNjQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5IT1NUQVJDSFZBTFVFU19BUk02NCA9IFRNUF9IT1NUQVJDSFZBTFVFU19BUk02NDtcbi8qKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUgdGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhPU1RfQVJDSF9WQUxVRV9JQTY0IGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuSE9TVEFSQ0hWQUxVRVNfSUE2NCA9IFRNUF9IT1NUQVJDSFZBTFVFU19JQTY0O1xuLyoqXG4gKiBUaGUgQ1BVIGFyY2hpdGVjdHVyZSB0aGUgaG9zdCBzeXN0ZW0gaXMgcnVubmluZyBvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgSE9TVF9BUkNIX1ZBTFVFX1BQQzMyIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuSE9TVEFSQ0hWQUxVRVNfUFBDMzIgPSBUTVBfSE9TVEFSQ0hWQUxVRVNfUFBDMzI7XG4vKipcbiAqIFRoZSBDUFUgYXJjaGl0ZWN0dXJlIHRoZSBob3N0IHN5c3RlbSBpcyBydW5uaW5nIG9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBIT1NUX0FSQ0hfVkFMVUVfUFBDNjQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5IT1NUQVJDSFZBTFVFU19QUEM2NCA9IFRNUF9IT1NUQVJDSFZBTFVFU19QUEM2NDtcbi8qKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUgdGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEhPU1RfQVJDSF9WQUxVRV9YODYgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5IT1NUQVJDSFZBTFVFU19YODYgPSBUTVBfSE9TVEFSQ0hWQUxVRVNfWDg2O1xuLyoqXG4gKiBUaGUgY29uc3RhbnQgbWFwIG9mIHZhbHVlcyBmb3IgSG9zdEFyY2hWYWx1ZXMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIEhPU1RBUkNIVkFMVUVTX1hYWFhYIGNvbnN0YW50cyByYXRoZXIgdGhhbiB0aGUgSG9zdEFyY2hWYWx1ZXMuWFhYWFggZm9yIGJ1bmRsZSBtaW5pZmljYXRpb24uXG4gKi9cbmV4cG9ydHMuSG9zdEFyY2hWYWx1ZXMgPSBcbi8qI19fUFVSRV9fKi8gKDAsIHV0aWxzXzEuY3JlYXRlQ29uc3RNYXApKFtcbiAgICBUTVBfSE9TVEFSQ0hWQUxVRVNfQU1ENjQsXG4gICAgVE1QX0hPU1RBUkNIVkFMVUVTX0FSTTMyLFxuICAgIFRNUF9IT1NUQVJDSFZBTFVFU19BUk02NCxcbiAgICBUTVBfSE9TVEFSQ0hWQUxVRVNfSUE2NCxcbiAgICBUTVBfSE9TVEFSQ0hWQUxVRVNfUFBDMzIsXG4gICAgVE1QX0hPU1RBUkNIVkFMVUVTX1BQQzY0LFxuICAgIFRNUF9IT1NUQVJDSFZBTFVFU19YODYsXG5dKTtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50IHZhbHVlcyBmb3IgT3NUeXBlVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xuY29uc3QgVE1QX09TVFlQRVZBTFVFU19XSU5ET1dTID0gJ3dpbmRvd3MnO1xuY29uc3QgVE1QX09TVFlQRVZBTFVFU19MSU5VWCA9ICdsaW51eCc7XG5jb25zdCBUTVBfT1NUWVBFVkFMVUVTX0RBUldJTiA9ICdkYXJ3aW4nO1xuY29uc3QgVE1QX09TVFlQRVZBTFVFU19GUkVFQlNEID0gJ2ZyZWVic2QnO1xuY29uc3QgVE1QX09TVFlQRVZBTFVFU19ORVRCU0QgPSAnbmV0YnNkJztcbmNvbnN0IFRNUF9PU1RZUEVWQUxVRVNfT1BFTkJTRCA9ICdvcGVuYnNkJztcbmNvbnN0IFRNUF9PU1RZUEVWQUxVRVNfRFJBR09ORkxZQlNEID0gJ2RyYWdvbmZseWJzZCc7XG5jb25zdCBUTVBfT1NUWVBFVkFMVUVTX0hQVVggPSAnaHB1eCc7XG5jb25zdCBUTVBfT1NUWVBFVkFMVUVTX0FJWCA9ICdhaXgnO1xuY29uc3QgVE1QX09TVFlQRVZBTFVFU19TT0xBUklTID0gJ3NvbGFyaXMnO1xuY29uc3QgVE1QX09TVFlQRVZBTFVFU19aX09TID0gJ3pfb3MnO1xuLyoqXG4gKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBPU19UWVBFX1ZBTFVFX1dJTkRPV1MgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5PU1RZUEVWQUxVRVNfV0lORE9XUyA9IFRNUF9PU1RZUEVWQUxVRVNfV0lORE9XUztcbi8qKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgT1NfVFlQRV9WQUxVRV9MSU5VWCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk9TVFlQRVZBTFVFU19MSU5VWCA9IFRNUF9PU1RZUEVWQUxVRVNfTElOVVg7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE9TX1RZUEVfVkFMVUVfREFSV0lOIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuT1NUWVBFVkFMVUVTX0RBUldJTiA9IFRNUF9PU1RZUEVWQUxVRVNfREFSV0lOO1xuLyoqXG4gKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBPU19UWVBFX1ZBTFVFX0ZSRUVCU0QgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5PU1RZUEVWQUxVRVNfRlJFRUJTRCA9IFRNUF9PU1RZUEVWQUxVRVNfRlJFRUJTRDtcbi8qKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgT1NfVFlQRV9WQUxVRV9ORVRCU0QgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5PU1RZUEVWQUxVRVNfTkVUQlNEID0gVE1QX09TVFlQRVZBTFVFU19ORVRCU0Q7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE9TX1RZUEVfVkFMVUVfT1BFTkJTRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk9TVFlQRVZBTFVFU19PUEVOQlNEID0gVE1QX09TVFlQRVZBTFVFU19PUEVOQlNEO1xuLyoqXG4gKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBPU19UWVBFX1ZBTFVFX0RSQUdPTkZMWUJTRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLk9TVFlQRVZBTFVFU19EUkFHT05GTFlCU0QgPSBUTVBfT1NUWVBFVkFMVUVTX0RSQUdPTkZMWUJTRDtcbi8qKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgT1NfVFlQRV9WQUxVRV9IUFVYIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuT1NUWVBFVkFMVUVTX0hQVVggPSBUTVBfT1NUWVBFVkFMVUVTX0hQVVg7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE9TX1RZUEVfVkFMVUVfQUlYIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuT1NUWVBFVkFMVUVTX0FJWCA9IFRNUF9PU1RZUEVWQUxVRVNfQUlYO1xuLyoqXG4gKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB0eXBlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBPU19UWVBFX1ZBTFVFX1NPTEFSSVMgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5PU1RZUEVWQUxVRVNfU09MQVJJUyA9IFRNUF9PU1RZUEVWQUxVRVNfU09MQVJJUztcbi8qKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdHlwZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgT1NfVFlQRV9WQUxVRV9aX09TIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuT1NUWVBFVkFMVUVTX1pfT1MgPSBUTVBfT1NUWVBFVkFMVUVTX1pfT1M7XG4vKipcbiAqIFRoZSBjb25zdGFudCBtYXAgb2YgdmFsdWVzIGZvciBPc1R5cGVWYWx1ZXMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIE9TVFlQRVZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIE9zVHlwZVZhbHVlcy5YWFhYWCBmb3IgYnVuZGxlIG1pbmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0cy5Pc1R5cGVWYWx1ZXMgPSBcbi8qI19fUFVSRV9fKi8gKDAsIHV0aWxzXzEuY3JlYXRlQ29uc3RNYXApKFtcbiAgICBUTVBfT1NUWVBFVkFMVUVTX1dJTkRPV1MsXG4gICAgVE1QX09TVFlQRVZBTFVFU19MSU5VWCxcbiAgICBUTVBfT1NUWVBFVkFMVUVTX0RBUldJTixcbiAgICBUTVBfT1NUWVBFVkFMVUVTX0ZSRUVCU0QsXG4gICAgVE1QX09TVFlQRVZBTFVFU19ORVRCU0QsXG4gICAgVE1QX09TVFlQRVZBTFVFU19PUEVOQlNELFxuICAgIFRNUF9PU1RZUEVWQUxVRVNfRFJBR09ORkxZQlNELFxuICAgIFRNUF9PU1RZUEVWQUxVRVNfSFBVWCxcbiAgICBUTVBfT1NUWVBFVkFMVUVTX0FJWCxcbiAgICBUTVBfT1NUWVBFVkFMVUVTX1NPTEFSSVMsXG4gICAgVE1QX09TVFlQRVZBTFVFU19aX09TLFxuXSk7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudCB2YWx1ZXMgZm9yIFRlbGVtZXRyeVNka0xhbmd1YWdlVmFsdWVzIGVudW0gZGVmaW5pdGlvblxuICpcbiAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgdGVsZW1ldHJ5IFNESy5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8vIFRlbXBvcmFyeSBsb2NhbCBjb25zdGFudHMgdG8gYXNzaWduIHRvIHRoZSBpbmRpdmlkdWFsIGV4cG9ydHMgYW5kIHRoZSBuYW1lc3BhY2VkIHZlcnNpb25cbi8vIFJlcXVpcmVkIHRvIGF2b2lkIHRoZSBuYW1lc3BhY2UgZXhwb3J0cyB1c2luZyB0aGUgdW5taW5pZmlhYmxlIGV4cG9ydCBuYW1lcyBmb3Igc29tZSBwYWNrYWdlIHR5cGVzXG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfQ1BQID0gJ2NwcCc7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfRE9UTkVUID0gJ2RvdG5ldCc7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfRVJMQU5HID0gJ2VybGFuZyc7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfR08gPSAnZ28nO1xuY29uc3QgVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0pBVkEgPSAnamF2YSc7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfTk9ERUpTID0gJ25vZGVqcyc7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUEhQID0gJ3BocCc7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUFlUSE9OID0gJ3B5dGhvbic7XG5jb25zdCBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUlVCWSA9ICdydWJ5JztcbmNvbnN0IFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19XRUJKUyA9ICd3ZWJqcyc7XG4vKipcbiAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgdGVsZW1ldHJ5IFNESy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9DUFAuXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfQ1BQID0gVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0NQUDtcbi8qKlxuICogVGhlIGxhbmd1YWdlIG9mIHRoZSB0ZWxlbWV0cnkgU0RLLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBURUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX0RPVE5FVC5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19ET1RORVQgPSBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfRE9UTkVUO1xuLyoqXG4gKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHRlbGVtZXRyeSBTREsuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfRVJMQU5HLlxuICovXG5leHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0VSTEFORyA9IFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19FUkxBTkc7XG4vKipcbiAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgdGVsZW1ldHJ5IFNESy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9HTy5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19HTyA9IFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19HTztcbi8qKlxuICogVGhlIGxhbmd1YWdlIG9mIHRoZSB0ZWxlbWV0cnkgU0RLLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBURUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX0pBVkEuXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfSkFWQSA9IFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19KQVZBO1xuLyoqXG4gKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHRlbGVtZXRyeSBTREsuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfTk9ERUpTLlxuICovXG5leHBvcnRzLlRFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX05PREVKUyA9IFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19OT0RFSlM7XG4vKipcbiAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgdGVsZW1ldHJ5IFNESy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9QSFAuXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUEhQID0gVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX1BIUDtcbi8qKlxuICogVGhlIGxhbmd1YWdlIG9mIHRoZSB0ZWxlbWV0cnkgU0RLLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBURUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX1BZVEhPTi5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19QWVRIT04gPSBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUFlUSE9OO1xuLyoqXG4gKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHRlbGVtZXRyeSBTREsuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfUlVCWS5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19SVUJZID0gVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX1JVQlk7XG4vKipcbiAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgdGVsZW1ldHJ5IFNESy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9XRUJKUy5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19XRUJKUyA9IFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19XRUJKUztcbi8qKlxuICogVGhlIGNvbnN0YW50IG1hcCBvZiB2YWx1ZXMgZm9yIFRlbGVtZXRyeVNka0xhbmd1YWdlVmFsdWVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBURUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19YWFhYWCBjb25zdGFudHMgcmF0aGVyIHRoYW4gdGhlIFRlbGVtZXRyeVNka0xhbmd1YWdlVmFsdWVzLlhYWFhYIGZvciBidW5kbGUgbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnRzLlRlbGVtZXRyeVNka0xhbmd1YWdlVmFsdWVzID0gXG4vKiNfX1BVUkVfXyovICgwLCB1dGlsc18xLmNyZWF0ZUNvbnN0TWFwKShbXG4gICAgVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0NQUCxcbiAgICBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfRE9UTkVULFxuICAgIFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19FUkxBTkcsXG4gICAgVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX0dPLFxuICAgIFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19KQVZBLFxuICAgIFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19OT0RFSlMsXG4gICAgVE1QX1RFTEVNRVRSWVNES0xBTkdVQUdFVkFMVUVTX1BIUCxcbiAgICBUTVBfVEVMRU1FVFJZU0RLTEFOR1VBR0VWQUxVRVNfUFlUSE9OLFxuICAgIFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19SVUJZLFxuICAgIFRNUF9URUxFTUVUUllTREtMQU5HVUFHRVZBTFVFU19XRUJKUyxcbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VtYW50aWNSZXNvdXJjZUF0dHJpYnV0ZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tXG4gKiBUaGVzZSByZS1leHBvcnRzIGFyZSBvbmx5IG9mIGNvbnN0YW50cywgb25seSBvbmUtbGV2ZWwgZGVlcCBhdCB0aGlzIHBvaW50LFxuICogYW5kIHNob3VsZCBub3QgY2F1c2UgcHJvYmxlbXMgZm9yIHRyZWUtc2hha2Vycy5cbiAqL1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1NlbWFudGljUmVzb3VyY2VBdHRyaWJ1dGVzXCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX0VYQ0VQVElPTl9UWVBFID0gZXhwb3J0cy5BVFRSX0VYQ0VQVElPTl9TVEFDS1RSQUNFID0gZXhwb3J0cy5BVFRSX0VYQ0VQVElPTl9NRVNTQUdFID0gZXhwb3J0cy5BVFRSX0VYQ0VQVElPTl9FU0NBUEVEID0gZXhwb3J0cy5FUlJPUl9UWVBFX1ZBTFVFX09USEVSID0gZXhwb3J0cy5BVFRSX0VSUk9SX1RZUEUgPSBleHBvcnRzLkRPVE5FVF9HQ19IRUFQX0dFTkVSQVRJT05fVkFMVUVfUE9IID0gZXhwb3J0cy5ET1RORVRfR0NfSEVBUF9HRU5FUkFUSU9OX1ZBTFVFX0xPSCA9IGV4cG9ydHMuRE9UTkVUX0dDX0hFQVBfR0VORVJBVElPTl9WQUxVRV9HRU4yID0gZXhwb3J0cy5ET1RORVRfR0NfSEVBUF9HRU5FUkFUSU9OX1ZBTFVFX0dFTjEgPSBleHBvcnRzLkRPVE5FVF9HQ19IRUFQX0dFTkVSQVRJT05fVkFMVUVfR0VOMCA9IGV4cG9ydHMuQVRUUl9ET1RORVRfR0NfSEVBUF9HRU5FUkFUSU9OID0gZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9QT1NUR1JFU1FMID0gZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9NWVNRTCA9IGV4cG9ydHMuREJfU1lTVEVNX05BTUVfVkFMVUVfTUlDUk9TT0ZUX1NRTF9TRVJWRVIgPSBleHBvcnRzLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01BUklBREIgPSBleHBvcnRzLkFUVFJfREJfU1lTVEVNX05BTUUgPSBleHBvcnRzLkFUVFJfREJfU1RPUkVEX1BST0NFRFVSRV9OQU1FID0gZXhwb3J0cy5BVFRSX0RCX1JFU1BPTlNFX1NUQVRVU19DT0RFID0gZXhwb3J0cy5BVFRSX0RCX1FVRVJZX1RFWFQgPSBleHBvcnRzLkFUVFJfREJfUVVFUllfU1VNTUFSWSA9IGV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT05fTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT05fQkFUQ0hfU0laRSA9IGV4cG9ydHMuQVRUUl9EQl9OQU1FU1BBQ0UgPSBleHBvcnRzLkFUVFJfREJfQ09MTEVDVElPTl9OQU1FID0gZXhwb3J0cy5BVFRSX0NPREVfU1RBQ0tUUkFDRSA9IGV4cG9ydHMuQVRUUl9DT0RFX0xJTkVfTlVNQkVSID0gZXhwb3J0cy5BVFRSX0NPREVfRlVOQ1RJT05fTkFNRSA9IGV4cG9ydHMuQVRUUl9DT0RFX0ZJTEVfUEFUSCA9IGV4cG9ydHMuQVRUUl9DT0RFX0NPTFVNTl9OVU1CRVIgPSBleHBvcnRzLkFUVFJfQ0xJRU5UX1BPUlQgPSBleHBvcnRzLkFUVFJfQ0xJRU5UX0FERFJFU1MgPSBleHBvcnRzLkFUVFJfQVNQTkVUQ09SRV9VU0VSX0lTX0FVVEhFTlRJQ0FURUQgPSBleHBvcnRzLkFTUE5FVENPUkVfUk9VVElOR19NQVRDSF9TVEFUVVNfVkFMVUVfU1VDQ0VTUyA9IGV4cG9ydHMuQVNQTkVUQ09SRV9ST1VUSU5HX01BVENIX1NUQVRVU19WQUxVRV9GQUlMVVJFID0gZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfUk9VVElOR19NQVRDSF9TVEFUVVMgPSBleHBvcnRzLkFUVFJfQVNQTkVUQ09SRV9ST1VUSU5HX0lTX0ZBTExCQUNLID0gZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfUkVRVUVTVF9JU19VTkhBTkRMRUQgPSBleHBvcnRzLkFTUE5FVENPUkVfUkFURV9MSU1JVElOR19SRVNVTFRfVkFMVUVfUkVRVUVTVF9DQU5DRUxFRCA9IGV4cG9ydHMuQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVF9WQUxVRV9HTE9CQUxfTElNSVRFUiA9IGV4cG9ydHMuQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVF9WQUxVRV9FTkRQT0lOVF9MSU1JVEVSID0gZXhwb3J0cy5BU1BORVRDT1JFX1JBVEVfTElNSVRJTkdfUkVTVUxUX1ZBTFVFX0FDUVVJUkVEID0gZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19SRVNVTFQgPSBleHBvcnRzLkFUVFJfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1BPTElDWSA9IGV4cG9ydHMuQVRUUl9BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0hBTkRMRVJfVFlQRSA9IGV4cG9ydHMuQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUX1ZBTFVFX1VOSEFORExFRCA9IGV4cG9ydHMuQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUX1ZBTFVFX1NLSVBQRUQgPSBleHBvcnRzLkFTUE5FVENPUkVfRElBR05PU1RJQ1NfRVhDRVBUSU9OX1JFU1VMVF9WQUxVRV9IQU5ETEVEID0gZXhwb3J0cy5BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTl9SRVNVTFRfVkFMVUVfQUJPUlRFRCA9IGV4cG9ydHMuQVRUUl9BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTl9SRVNVTFQgPSB2b2lkIDA7XG5leHBvcnRzLk9URUxfU1RBVFVTX0NPREVfVkFMVUVfRVJST1IgPSBleHBvcnRzLkFUVFJfT1RFTF9TVEFUVVNfQ09ERSA9IGV4cG9ydHMuQVRUUl9PVEVMX1NDT1BFX1ZFUlNJT04gPSBleHBvcnRzLkFUVFJfT1RFTF9TQ09QRV9OQU1FID0gZXhwb3J0cy5ORVRXT1JLX1RZUEVfVkFMVUVfSVBWNiA9IGV4cG9ydHMuTkVUV09SS19UWVBFX1ZBTFVFX0lQVjQgPSBleHBvcnRzLkFUVFJfTkVUV09SS19UWVBFID0gZXhwb3J0cy5ORVRXT1JLX1RSQU5TUE9SVF9WQUxVRV9VTklYID0gZXhwb3J0cy5ORVRXT1JLX1RSQU5TUE9SVF9WQUxVRV9VRFAgPSBleHBvcnRzLk5FVFdPUktfVFJBTlNQT1JUX1ZBTFVFX1RDUCA9IGV4cG9ydHMuTkVUV09SS19UUkFOU1BPUlRfVkFMVUVfUVVJQyA9IGV4cG9ydHMuTkVUV09SS19UUkFOU1BPUlRfVkFMVUVfUElQRSA9IGV4cG9ydHMuQVRUUl9ORVRXT1JLX1RSQU5TUE9SVCA9IGV4cG9ydHMuQVRUUl9ORVRXT1JLX1BST1RPQ09MX1ZFUlNJT04gPSBleHBvcnRzLkFUVFJfTkVUV09SS19QUk9UT0NPTF9OQU1FID0gZXhwb3J0cy5BVFRSX05FVFdPUktfUEVFUl9QT1JUID0gZXhwb3J0cy5BVFRSX05FVFdPUktfUEVFUl9BRERSRVNTID0gZXhwb3J0cy5BVFRSX05FVFdPUktfTE9DQUxfUE9SVCA9IGV4cG9ydHMuQVRUUl9ORVRXT1JLX0xPQ0FMX0FERFJFU1MgPSBleHBvcnRzLkpWTV9USFJFQURfU1RBVEVfVkFMVUVfV0FJVElORyA9IGV4cG9ydHMuSlZNX1RIUkVBRF9TVEFURV9WQUxVRV9USU1FRF9XQUlUSU5HID0gZXhwb3J0cy5KVk1fVEhSRUFEX1NUQVRFX1ZBTFVFX1RFUk1JTkFURUQgPSBleHBvcnRzLkpWTV9USFJFQURfU1RBVEVfVkFMVUVfUlVOTkFCTEUgPSBleHBvcnRzLkpWTV9USFJFQURfU1RBVEVfVkFMVUVfTkVXID0gZXhwb3J0cy5KVk1fVEhSRUFEX1NUQVRFX1ZBTFVFX0JMT0NLRUQgPSBleHBvcnRzLkFUVFJfSlZNX1RIUkVBRF9TVEFURSA9IGV4cG9ydHMuQVRUUl9KVk1fVEhSRUFEX0RBRU1PTiA9IGV4cG9ydHMuSlZNX01FTU9SWV9UWVBFX1ZBTFVFX05PTl9IRUFQID0gZXhwb3J0cy5KVk1fTUVNT1JZX1RZUEVfVkFMVUVfSEVBUCA9IGV4cG9ydHMuQVRUUl9KVk1fTUVNT1JZX1RZUEUgPSBleHBvcnRzLkFUVFJfSlZNX01FTU9SWV9QT09MX05BTUUgPSBleHBvcnRzLkFUVFJfSlZNX0dDX05BTUUgPSBleHBvcnRzLkFUVFJfSlZNX0dDX0FDVElPTiA9IGV4cG9ydHMuQVRUUl9IVFRQX1JPVVRFID0gZXhwb3J0cy5BVFRSX0hUVFBfUkVTUE9OU0VfU1RBVFVTX0NPREUgPSBleHBvcnRzLkFUVFJfSFRUUF9SRVNQT05TRV9IRUFERVIgPSBleHBvcnRzLkFUVFJfSFRUUF9SRVFVRVNUX1JFU0VORF9DT1VOVCA9IGV4cG9ydHMuQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EX09SSUdJTkFMID0gZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX1RSQUNFID0gZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX1BVVCA9IGV4cG9ydHMuSFRUUF9SRVFVRVNUX01FVEhPRF9WQUxVRV9QT1NUID0gZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX1BBVENIID0gZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX09QVElPTlMgPSBleHBvcnRzLkhUVFBfUkVRVUVTVF9NRVRIT0RfVkFMVUVfSEVBRCA9IGV4cG9ydHMuSFRUUF9SRVFVRVNUX01FVEhPRF9WQUxVRV9HRVQgPSBleHBvcnRzLkhUVFBfUkVRVUVTVF9NRVRIT0RfVkFMVUVfREVMRVRFID0gZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX0NPTk5FQ1QgPSBleHBvcnRzLkhUVFBfUkVRVUVTVF9NRVRIT0RfVkFMVUVfT1RIRVIgPSBleHBvcnRzLkFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRCA9IGV4cG9ydHMuQVRUUl9IVFRQX1JFUVVFU1RfSEVBREVSID0gdm9pZCAwO1xuZXhwb3J0cy5BVFRSX1VTRVJfQUdFTlRfT1JJR0lOQUwgPSBleHBvcnRzLkFUVFJfVVJMX1NDSEVNRSA9IGV4cG9ydHMuQVRUUl9VUkxfUVVFUlkgPSBleHBvcnRzLkFUVFJfVVJMX1BBVEggPSBleHBvcnRzLkFUVFJfVVJMX0ZVTEwgPSBleHBvcnRzLkFUVFJfVVJMX0ZSQUdNRU5UID0gZXhwb3J0cy5BVFRSX1RFTEVNRVRSWV9TREtfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9URUxFTUVUUllfU0RLX05BTUUgPSBleHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfV0VCSlMgPSBleHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfU1dJRlQgPSBleHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfUlVTVCA9IGV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9SVUJZID0gZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX1BZVEhPTiA9IGV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9QSFAgPSBleHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfTk9ERUpTID0gZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX0pBVkEgPSBleHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfR08gPSBleHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfRVJMQU5HID0gZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX0RPVE5FVCA9IGV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9DUFAgPSBleHBvcnRzLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRSA9IGV4cG9ydHMuU0lHTkFMUl9UUkFOU1BPUlRfVkFMVUVfV0VCX1NPQ0tFVFMgPSBleHBvcnRzLlNJR05BTFJfVFJBTlNQT1JUX1ZBTFVFX1NFUlZFUl9TRU5UX0VWRU5UUyA9IGV4cG9ydHMuU0lHTkFMUl9UUkFOU1BPUlRfVkFMVUVfTE9OR19QT0xMSU5HID0gZXhwb3J0cy5BVFRSX1NJR05BTFJfVFJBTlNQT1JUID0gZXhwb3J0cy5TSUdOQUxSX0NPTk5FQ1RJT05fU1RBVFVTX1ZBTFVFX1RJTUVPVVQgPSBleHBvcnRzLlNJR05BTFJfQ09OTkVDVElPTl9TVEFUVVNfVkFMVUVfTk9STUFMX0NMT1NVUkUgPSBleHBvcnRzLlNJR05BTFJfQ09OTkVDVElPTl9TVEFUVVNfVkFMVUVfQVBQX1NIVVRET1dOID0gZXhwb3J0cy5BVFRSX1NJR05BTFJfQ09OTkVDVElPTl9TVEFUVVMgPSBleHBvcnRzLkFUVFJfU0VSVklDRV9WRVJTSU9OID0gZXhwb3J0cy5BVFRSX1NFUlZJQ0VfTkFNRSA9IGV4cG9ydHMuQVRUUl9TRVJWRVJfUE9SVCA9IGV4cG9ydHMuQVRUUl9TRVJWRVJfQUREUkVTUyA9IGV4cG9ydHMuQVRUUl9PVEVMX1NUQVRVU19ERVNDUklQVElPTiA9IGV4cG9ydHMuT1RFTF9TVEFUVVNfQ09ERV9WQUxVRV9PSyA9IHZvaWQgMDtcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRE8gTk9UIEVESVQsIHRoaXMgaXMgYW4gQXV0by1nZW5lcmF0ZWQgZmlsZSBmcm9tIHNjcmlwdHMvc2VtY29udi90ZW1wbGF0ZXMvcmVnaXN0cnkvc3RhYmxlL2F0dHJpYnV0ZXMudHMuajJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLyoqXG4gKiBBU1AuTkVUIENvcmUgZXhjZXB0aW9uIG1pZGRsZXdhcmUgaGFuZGxpbmcgcmVzdWx0LlxuICpcbiAqIEBleGFtcGxlIGhhbmRsZWRcbiAqIEBleGFtcGxlIHVuaGFuZGxlZFxuICovXG5leHBvcnRzLkFUVFJfQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUID0gJ2FzcG5ldGNvcmUuZGlhZ25vc3RpY3MuZXhjZXB0aW9uLnJlc3VsdCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJhYm9ydGVkXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTl9SRVNVTFR9LlxuICpcbiAqIEV4Y2VwdGlvbiBoYW5kbGluZyBkaWRuJ3QgcnVuIGJlY2F1c2UgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQuXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUX1ZBTFVFX0FCT1JURUQgPSBcImFib3J0ZWRcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcImhhbmRsZWRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0FTUE5FVENPUkVfRElBR05PU1RJQ1NfRVhDRVBUSU9OX1JFU1VMVH0uXG4gKlxuICogRXhjZXB0aW9uIHdhcyBoYW5kbGVkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0cy5BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTl9SRVNVTFRfVkFMVUVfSEFORExFRCA9IFwiaGFuZGxlZFwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwic2tpcHBlZFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUfS5cbiAqXG4gKiBFeGNlcHRpb24gaGFuZGxpbmcgd2FzIHNraXBwZWQgYmVjYXVzZSB0aGUgcmVzcG9uc2UgaGFkIHN0YXJ0ZWQuXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUX1ZBTFVFX1NLSVBQRUQgPSBcInNraXBwZWRcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInVuaGFuZGxlZFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQVNQTkVUQ09SRV9ESUFHTk9TVElDU19FWENFUFRJT05fUkVTVUxUfS5cbiAqXG4gKiBFeGNlcHRpb24gd2FzIG5vdCBoYW5kbGVkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0cy5BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTl9SRVNVTFRfVkFMVUVfVU5IQU5ETEVEID0gXCJ1bmhhbmRsZWRcIjtcbi8qKlxuICogRnVsbCB0eXBlIG5hbWUgb2YgdGhlIFtgSUV4Y2VwdGlvbkhhbmRsZXJgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZG90bmV0L2FwaS9taWNyb3NvZnQuYXNwbmV0Y29yZS5kaWFnbm9zdGljcy5pZXhjZXB0aW9uaGFuZGxlcikgaW1wbGVtZW50YXRpb24gdGhhdCBoYW5kbGVkIHRoZSBleGNlcHRpb24uXG4gKlxuICogQGV4YW1wbGUgQ29udG9zby5NeUhhbmRsZXJcbiAqL1xuZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfRElBR05PU1RJQ1NfSEFORExFUl9UWVBFID0gJ2FzcG5ldGNvcmUuZGlhZ25vc3RpY3MuaGFuZGxlci50eXBlJztcbi8qKlxuICogUmF0ZSBsaW1pdGluZyBwb2xpY3kgbmFtZS5cbiAqXG4gKiBAZXhhbXBsZSBmaXhlZFxuICogQGV4YW1wbGUgc2xpZGluZ1xuICogQGV4YW1wbGUgdG9rZW5cbiAqL1xuZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19QT0xJQ1kgPSAnYXNwbmV0Y29yZS5yYXRlX2xpbWl0aW5nLnBvbGljeSc7XG4vKipcbiAqIFJhdGUtbGltaXRpbmcgcmVzdWx0LCBzaG93cyB3aGV0aGVyIHRoZSBsZWFzZSB3YXMgYWNxdWlyZWQgb3IgY29udGFpbnMgYSByZWplY3Rpb24gcmVhc29uXG4gKlxuICogQGV4YW1wbGUgYWNxdWlyZWRcbiAqIEBleGFtcGxlIHJlcXVlc3RfY2FuY2VsZWRcbiAqL1xuZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19SRVNVTFQgPSAnYXNwbmV0Y29yZS5yYXRlX2xpbWl0aW5nLnJlc3VsdCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJhY3F1aXJlZFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVH0uXG4gKlxuICogTGVhc2Ugd2FzIGFjcXVpcmVkXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVF9WQUxVRV9BQ1FVSVJFRCA9IFwiYWNxdWlyZWRcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcImVuZHBvaW50X2xpbWl0ZXJcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19SRVNVTFR9LlxuICpcbiAqIExlYXNlIHJlcXVlc3Qgd2FzIHJlamVjdGVkIGJ5IHRoZSBlbmRwb2ludCBsaW1pdGVyXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVF9WQUxVRV9FTkRQT0lOVF9MSU1JVEVSID0gXCJlbmRwb2ludF9saW1pdGVyXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJnbG9iYWxfbGltaXRlclwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVH0uXG4gKlxuICogTGVhc2UgcmVxdWVzdCB3YXMgcmVqZWN0ZWQgYnkgdGhlIGdsb2JhbCBsaW1pdGVyXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVF9WQUxVRV9HTE9CQUxfTElNSVRFUiA9IFwiZ2xvYmFsX2xpbWl0ZXJcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInJlcXVlc3RfY2FuY2VsZWRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19SRVNVTFR9LlxuICpcbiAqIExlYXNlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFU1VMVF9WQUxVRV9SRVFVRVNUX0NBTkNFTEVEID0gXCJyZXF1ZXN0X2NhbmNlbGVkXCI7XG4vKipcbiAqIEZsYWcgaW5kaWNhdGluZyBpZiByZXF1ZXN0IHdhcyBoYW5kbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBwaXBlbGluZS5cbiAqXG4gKiBAZXhhbXBsZSB0cnVlXG4gKi9cbmV4cG9ydHMuQVRUUl9BU1BORVRDT1JFX1JFUVVFU1RfSVNfVU5IQU5ETEVEID0gJ2FzcG5ldGNvcmUucmVxdWVzdC5pc191bmhhbmRsZWQnO1xuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1hdGNoZWQgcm91dGUgaXMgYSBmYWxsYmFjayByb3V0ZS5cbiAqXG4gKiBAZXhhbXBsZSB0cnVlXG4gKi9cbmV4cG9ydHMuQVRUUl9BU1BORVRDT1JFX1JPVVRJTkdfSVNfRkFMTEJBQ0sgPSAnYXNwbmV0Y29yZS5yb3V0aW5nLmlzX2ZhbGxiYWNrJztcbi8qKlxuICogTWF0Y2ggcmVzdWx0IC0gc3VjY2VzcyBvciBmYWlsdXJlXG4gKlxuICogQGV4YW1wbGUgc3VjY2Vzc1xuICogQGV4YW1wbGUgZmFpbHVyZVxuICovXG5leHBvcnRzLkFUVFJfQVNQTkVUQ09SRV9ST1VUSU5HX01BVENIX1NUQVRVUyA9ICdhc3BuZXRjb3JlLnJvdXRpbmcubWF0Y2hfc3RhdHVzJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImZhaWx1cmVcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0FTUE5FVENPUkVfUk9VVElOR19NQVRDSF9TVEFUVVN9LlxuICpcbiAqIE1hdGNoIGZhaWxlZFxuICovXG5leHBvcnRzLkFTUE5FVENPUkVfUk9VVElOR19NQVRDSF9TVEFUVVNfVkFMVUVfRkFJTFVSRSA9IFwiZmFpbHVyZVwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwic3VjY2Vzc1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQVNQTkVUQ09SRV9ST1VUSU5HX01BVENIX1NUQVRVU30uXG4gKlxuICogTWF0Y2ggc3VjY2VlZGVkXG4gKi9cbmV4cG9ydHMuQVNQTkVUQ09SRV9ST1VUSU5HX01BVENIX1NUQVRVU19WQUxVRV9TVUNDRVNTID0gXCJzdWNjZXNzXCI7XG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLlxuICpcbiAqIEBleGFtcGxlIHRydWVcbiAqL1xuZXhwb3J0cy5BVFRSX0FTUE5FVENPUkVfVVNFUl9JU19BVVRIRU5USUNBVEVEID0gJ2FzcG5ldGNvcmUudXNlci5pc19hdXRoZW50aWNhdGVkJztcbi8qKlxuICogQ2xpZW50IGFkZHJlc3MgLSBkb21haW4gbmFtZSBpZiBhdmFpbGFibGUgd2l0aG91dCByZXZlcnNlIEROUyBsb29rdXA7IG90aGVyd2lzZSwgSVAgYWRkcmVzcyBvciBVbml4IGRvbWFpbiBzb2NrZXQgbmFtZS5cbiAqXG4gKiBAZXhhbXBsZSBjbGllbnQuZXhhbXBsZS5jb21cbiAqIEBleGFtcGxlIDEwLjEuMi44MFxuICogQGV4YW1wbGUgL3RtcC9teS5zb2NrXG4gKlxuICogQG5vdGUgV2hlbiBvYnNlcnZlZCBmcm9tIHRoZSBzZXJ2ZXIgc2lkZSwgYW5kIHdoZW4gY29tbXVuaWNhdGluZyB0aHJvdWdoIGFuIGludGVybWVkaWFyeSwgYGNsaWVudC5hZGRyZXNzYCAqKlNIT1VMRCoqIHJlcHJlc2VudCB0aGUgY2xpZW50IGFkZHJlc3MgYmVoaW5kIGFueSBpbnRlcm1lZGlhcmllcywgIGZvciBleGFtcGxlIHByb3hpZXMsIGlmIGl0J3MgYXZhaWxhYmxlLlxuICovXG5leHBvcnRzLkFUVFJfQ0xJRU5UX0FERFJFU1MgPSAnY2xpZW50LmFkZHJlc3MnO1xuLyoqXG4gKiBDbGllbnQgcG9ydCBudW1iZXIuXG4gKlxuICogQGV4YW1wbGUgNjUxMjNcbiAqXG4gKiBAbm90ZSBXaGVuIG9ic2VydmVkIGZyb20gdGhlIHNlcnZlciBzaWRlLCBhbmQgd2hlbiBjb21tdW5pY2F0aW5nIHRocm91Z2ggYW4gaW50ZXJtZWRpYXJ5LCBgY2xpZW50LnBvcnRgICoqU0hPVUxEKiogcmVwcmVzZW50IHRoZSBjbGllbnQgcG9ydCBiZWhpbmQgYW55IGludGVybWVkaWFyaWVzLCAgZm9yIGV4YW1wbGUgcHJveGllcywgaWYgaXQncyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTElFTlRfUE9SVCA9ICdjbGllbnQucG9ydCc7XG4vKipcbiAqIFRoZSBjb2x1bW4gbnVtYmVyIGluIGBjb2RlLmZpbGUucGF0aGAgYmVzdCByZXByZXNlbnRpbmcgdGhlIG9wZXJhdGlvbi4gSXQgKipTSE9VTEQqKiBwb2ludCB3aXRoaW4gdGhlIGNvZGUgdW5pdCBuYW1lZCBpbiBgY29kZS5mdW5jdGlvbi5uYW1lYC4gVGhpcyBhdHRyaWJ1dGUgKipNVVNUIE5PVCoqIGJlIHVzZWQgb24gdGhlIFByb2ZpbGUgc2lnbmFsIHNpbmNlIHRoZSBkYXRhIGlzIGFscmVhZHkgY2FwdHVyZWQgaW4gJ21lc3NhZ2UgTGluZScuIFRoaXMgY29uc3RyYWludCBpcyBpbXBvc2VkIHRvIHByZXZlbnQgcmVkdW5kYW5jeSBhbmQgbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkuXG4gKlxuICogQGV4YW1wbGUgMTZcbiAqL1xuZXhwb3J0cy5BVFRSX0NPREVfQ09MVU1OX05VTUJFUiA9ICdjb2RlLmNvbHVtbi5udW1iZXInO1xuLyoqXG4gKiBUaGUgc291cmNlIGNvZGUgZmlsZSBuYW1lIHRoYXQgaWRlbnRpZmllcyB0aGUgY29kZSB1bml0IGFzIHVuaXF1ZWx5IGFzIHBvc3NpYmxlIChwcmVmZXJhYmx5IGFuIGFic29sdXRlIGZpbGUgcGF0aCkuIFRoaXMgYXR0cmlidXRlICoqTVVTVCBOT1QqKiBiZSB1c2VkIG9uIHRoZSBQcm9maWxlIHNpZ25hbCBzaW5jZSB0aGUgZGF0YSBpcyBhbHJlYWR5IGNhcHR1cmVkIGluICdtZXNzYWdlIEZ1bmN0aW9uJy4gVGhpcyBjb25zdHJhaW50IGlzIGltcG9zZWQgdG8gcHJldmVudCByZWR1bmRhbmN5IGFuZCBtYWludGFpbiBkYXRhIGludGVncml0eS5cbiAqXG4gKiBAZXhhbXBsZSBcIi91c3IvbG9jYWwvTXlBcHBsaWNhdGlvbi9jb250ZW50X3Jvb3QvYXBwL2luZGV4LnBocFwiXG4gKi9cbmV4cG9ydHMuQVRUUl9DT0RFX0ZJTEVfUEFUSCA9ICdjb2RlLmZpbGUucGF0aCc7XG4vKipcbiAqIFRoZSBtZXRob2Qgb3IgZnVuY3Rpb24gZnVsbHktcXVhbGlmaWVkIG5hbWUgd2l0aG91dCBhcmd1bWVudHMuIFRoZSB2YWx1ZSBzaG91bGQgZml0IHRoZSBuYXR1cmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsYW5ndWFnZSBydW50aW1lLCB3aGljaCBpcyBhbHNvIGxpa2VseSB0aGUgc2FtZSB1c2VkIHdpdGhpbiBgY29kZS5zdGFja3RyYWNlYCBhdHRyaWJ1dGUgdmFsdWUuIFRoaXMgYXR0cmlidXRlICoqTVVTVCBOT1QqKiBiZSB1c2VkIG9uIHRoZSBQcm9maWxlIHNpZ25hbCBzaW5jZSB0aGUgZGF0YSBpcyBhbHJlYWR5IGNhcHR1cmVkIGluICdtZXNzYWdlIEZ1bmN0aW9uJy4gVGhpcyBjb25zdHJhaW50IGlzIGltcG9zZWQgdG8gcHJldmVudCByZWR1bmRhbmN5IGFuZCBtYWludGFpbiBkYXRhIGludGVncml0eS5cbiAqXG4gKiBAZXhhbXBsZSBjb20uZXhhbXBsZS5NeUh0dHBTZXJ2aWNlLnNlcnZlUmVxdWVzdFxuICogQGV4YW1wbGUgR3V6emxlSHR0cFxcXFxDbGllbnQ6OnRyYW5zZmVyXG4gKiBAZXhhbXBsZSBmb3BlblxuICpcbiAqIEBub3RlIFZhbHVlcyBhbmQgZm9ybWF0IGRlcGVuZHMgb24gZWFjaCBsYW5ndWFnZSBydW50aW1lLCB0aHVzIGl0IGlzIGltcG9zc2libGUgdG8gcHJvdmlkZSBhbiBleGhhdXN0aXZlIGxpc3Qgb2YgZXhhbXBsZXMuXG4gKiBUaGUgdmFsdWVzIGFyZSB1c3VhbGx5IHRoZSBzYW1lIChvciBwcmVmaXhlcyBvZikgdGhlIG9uZXMgZm91bmQgaW4gbmF0aXZlIHN0YWNrIHRyYWNlIHJlcHJlc2VudGF0aW9uIHN0b3JlZCBpblxuICogYGNvZGUuc3RhY2t0cmFjZWAgd2l0aG91dCBpbmZvcm1hdGlvbiBvbiBhcmd1bWVudHMuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAtIEphdmEgbWV0aG9kOiBgY29tLmV4YW1wbGUuTXlIdHRwU2VydmljZS5zZXJ2ZVJlcXVlc3RgXG4gKiAgIC0gSmF2YSBhbm9ueW1vdXMgY2xhc3MgbWV0aG9kOiBgY29tLm15Y29tcGFueS5NYWluJDEubXlNZXRob2RgXG4gKiAgIC0gSmF2YSBsYW1iZGEgbWV0aG9kOiBgY29tLm15Y29tcGFueS5NYWluJCRMYW1iZGEvMHgwMDAwNzQ4YWU0MTQ5YzAwLm15TWV0aG9kYFxuICogICAtIFBIUCBmdW5jdGlvbjogYEd1enpsZUh0dHBcXENsaWVudDo6dHJhbnNmZXJgXG4gKiAgIC0gR28gZnVuY3Rpb246IGBnaXRodWIuY29tL215L3JlcG8vcGtnLmZvby5mdW5jNWBcbiAqICAgLSBFbGl4aXI6IGBPcGVuVGVsZW1ldHJ5LkN0eC5uZXdgXG4gKiAgIC0gRXJsYW5nOiBgb3BlbnRlbGVtZXRyeV9jdHg6bmV3YFxuICogICAtIFJ1c3Q6IGBwbGF5Z3JvdW5kOjpteV9tb2R1bGU6Om15X2Nvb2xfZnVuY2BcbiAqICAgLSBDIGZ1bmN0aW9uOiBgZm9wZW5gXG4gKi9cbmV4cG9ydHMuQVRUUl9DT0RFX0ZVTkNUSU9OX05BTUUgPSAnY29kZS5mdW5jdGlvbi5uYW1lJztcbi8qKlxuICogVGhlIGxpbmUgbnVtYmVyIGluIGBjb2RlLmZpbGUucGF0aGAgYmVzdCByZXByZXNlbnRpbmcgdGhlIG9wZXJhdGlvbi4gSXQgKipTSE9VTEQqKiBwb2ludCB3aXRoaW4gdGhlIGNvZGUgdW5pdCBuYW1lZCBpbiBgY29kZS5mdW5jdGlvbi5uYW1lYC4gVGhpcyBhdHRyaWJ1dGUgKipNVVNUIE5PVCoqIGJlIHVzZWQgb24gdGhlIFByb2ZpbGUgc2lnbmFsIHNpbmNlIHRoZSBkYXRhIGlzIGFscmVhZHkgY2FwdHVyZWQgaW4gJ21lc3NhZ2UgTGluZScuIFRoaXMgY29uc3RyYWludCBpcyBpbXBvc2VkIHRvIHByZXZlbnQgcmVkdW5kYW5jeSBhbmQgbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkuXG4gKlxuICogQGV4YW1wbGUgNDJcbiAqL1xuZXhwb3J0cy5BVFRSX0NPREVfTElORV9OVU1CRVIgPSAnY29kZS5saW5lLm51bWJlcic7XG4vKipcbiAqIEEgc3RhY2t0cmFjZSBhcyBhIHN0cmluZyBpbiB0aGUgbmF0dXJhbCByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGxhbmd1YWdlIHJ1bnRpbWUuIFRoZSByZXByZXNlbnRhdGlvbiBpcyBpZGVudGljYWwgdG8gW2BleGNlcHRpb24uc3RhY2t0cmFjZWBdKC9kb2NzL2V4Y2VwdGlvbnMvZXhjZXB0aW9ucy1zcGFucy5tZCNzdGFja3RyYWNlLXJlcHJlc2VudGF0aW9uKS4gVGhpcyBhdHRyaWJ1dGUgKipNVVNUIE5PVCoqIGJlIHVzZWQgb24gdGhlIFByb2ZpbGUgc2lnbmFsIHNpbmNlIHRoZSBkYXRhIGlzIGFscmVhZHkgY2FwdHVyZWQgaW4gJ21lc3NhZ2UgTG9jYXRpb24nLiBUaGlzIGNvbnN0cmFpbnQgaXMgaW1wb3NlZCB0byBwcmV2ZW50IHJlZHVuZGFuY3kgYW5kIG1haW50YWluIGRhdGEgaW50ZWdyaXR5LlxuICpcbiAqIEBleGFtcGxlIFwiYXQgY29tLmV4YW1wbGUuR2VuZXJhdGVUcmFjZS5tZXRob2RCKEdlbmVyYXRlVHJhY2UuamF2YToxMylcXFxcbiBhdCBjb20uZXhhbXBsZS5HZW5lcmF0ZVRyYWNlLm1ldGhvZEEoR2VuZXJhdGVUcmFjZS5qYXZhOjkpXFxcXG4gYXQgY29tLmV4YW1wbGUuR2VuZXJhdGVUcmFjZS5tYWluKEdlbmVyYXRlVHJhY2UuamF2YTo1KVxcXFxuXCJcbiAqL1xuZXhwb3J0cy5BVFRSX0NPREVfU1RBQ0tUUkFDRSA9ICdjb2RlLnN0YWNrdHJhY2UnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhIGNvbGxlY3Rpb24gKHRhYmxlLCBjb250YWluZXIpIHdpdGhpbiB0aGUgZGF0YWJhc2UuXG4gKlxuICogQGV4YW1wbGUgcHVibGljLnVzZXJzXG4gKiBAZXhhbXBsZSBjdXN0b21lcnNcbiAqXG4gKiBAbm90ZSBJdCBpcyAqKlJFQ09NTUVOREVEKiogdG8gY2FwdHVyZSB0aGUgdmFsdWUgYXMgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gKiB3aXRob3V0IGF0dGVtcHRpbmcgdG8gZG8gYW55IGNhc2Ugbm9ybWFsaXphdGlvbi5cbiAqXG4gKiBUaGUgY29sbGVjdGlvbiBuYW1lICoqU0hPVUxEIE5PVCoqIGJlIGV4dHJhY3RlZCBmcm9tIGBkYi5xdWVyeS50ZXh0YCxcbiAqIHdoZW4gdGhlIGRhdGFiYXNlIHN5c3RlbSBzdXBwb3J0cyBxdWVyeSB0ZXh0IHdpdGggbXVsdGlwbGUgY29sbGVjdGlvbnNcbiAqIGluIG5vbi1iYXRjaCBvcGVyYXRpb25zLlxuICpcbiAqIEZvciBiYXRjaCBvcGVyYXRpb25zLCBpZiB0aGUgaW5kaXZpZHVhbCBvcGVyYXRpb25zIGFyZSBrbm93biB0byBoYXZlIHRoZSBzYW1lXG4gKiBjb2xsZWN0aW9uIG5hbWUgdGhlbiB0aGF0IGNvbGxlY3Rpb24gbmFtZSAqKlNIT1VMRCoqIGJlIHVzZWQuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DT0xMRUNUSU9OX05BTUUgPSAnZGIuY29sbGVjdGlvbi5uYW1lJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlLCBmdWxseSBxdWFsaWZpZWQgd2l0aGluIHRoZSBzZXJ2ZXIgYWRkcmVzcyBhbmQgcG9ydC5cbiAqXG4gKiBAZXhhbXBsZSBjdXN0b21lcnNcbiAqIEBleGFtcGxlIHRlc3QudXNlcnNcbiAqXG4gKiBAbm90ZSBJZiBhIGRhdGFiYXNlIHN5c3RlbSBoYXMgbXVsdGlwbGUgbmFtZXNwYWNlIGNvbXBvbmVudHMsIHRoZXkgKipTSE9VTEQqKiBiZSBjb25jYXRlbmF0ZWQgZnJvbSB0aGUgbW9zdCBnZW5lcmFsIHRvIHRoZSBtb3N0IHNwZWNpZmljIG5hbWVzcGFjZSBjb21wb25lbnQsIHVzaW5nIGB8YCBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBjb21wb25lbnRzLiBBbnkgbWlzc2luZyBjb21wb25lbnRzIChhbmQgdGhlaXIgYXNzb2NpYXRlZCBzZXBhcmF0b3JzKSAqKlNIT1VMRCoqIGJlIG9taXR0ZWQuXG4gKiBTZW1hbnRpYyBjb252ZW50aW9ucyBmb3IgaW5kaXZpZHVhbCBkYXRhYmFzZSBzeXN0ZW1zICoqU0hPVUxEKiogZG9jdW1lbnQgd2hhdCBgZGIubmFtZXNwYWNlYCBtZWFucyBpbiB0aGUgY29udGV4dCBvZiB0aGF0IHN5c3RlbS5cbiAqIEl0IGlzICoqUkVDT01NRU5ERUQqKiB0byBjYXB0dXJlIHRoZSB2YWx1ZSBhcyBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gd2l0aG91dCBhdHRlbXB0aW5nIHRvIGRvIGFueSBjYXNlIG5vcm1hbGl6YXRpb24uXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9OQU1FU1BBQ0UgPSAnZGIubmFtZXNwYWNlJztcbi8qKlxuICogVGhlIG51bWJlciBvZiBxdWVyaWVzIGluY2x1ZGVkIGluIGEgYmF0Y2ggb3BlcmF0aW9uLlxuICpcbiAqIEBleGFtcGxlIDJcbiAqIEBleGFtcGxlIDNcbiAqIEBleGFtcGxlIDRcbiAqXG4gKiBAbm90ZSBPcGVyYXRpb25zIGFyZSBvbmx5IGNvbnNpZGVyZWQgYmF0Y2hlcyB3aGVuIHRoZXkgY29udGFpbiB0d28gb3IgbW9yZSBvcGVyYXRpb25zLCBhbmQgc28gYGRiLm9wZXJhdGlvbi5iYXRjaC5zaXplYCAqKlNIT1VMRCoqIG5ldmVyIGJlIGAxYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTl9CQVRDSF9TSVpFID0gJ2RiLm9wZXJhdGlvbi5iYXRjaC5zaXplJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiBvciBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIGZpbmRBbmRNb2RpZnlcbiAqIEBleGFtcGxlIEhNU0VUXG4gKiBAZXhhbXBsZSBTRUxFQ1RcbiAqXG4gKiBAbm90ZSBJdCBpcyAqKlJFQ09NTUVOREVEKiogdG8gY2FwdHVyZSB0aGUgdmFsdWUgYXMgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gKiB3aXRob3V0IGF0dGVtcHRpbmcgdG8gZG8gYW55IGNhc2Ugbm9ybWFsaXphdGlvbi5cbiAqXG4gKiBUaGUgb3BlcmF0aW9uIG5hbWUgKipTSE9VTEQgTk9UKiogYmUgZXh0cmFjdGVkIGZyb20gYGRiLnF1ZXJ5LnRleHRgLFxuICogd2hlbiB0aGUgZGF0YWJhc2Ugc3lzdGVtIHN1cHBvcnRzIHF1ZXJ5IHRleHQgd2l0aCBtdWx0aXBsZSBvcGVyYXRpb25zXG4gKiBpbiBub24tYmF0Y2ggb3BlcmF0aW9ucy5cbiAqXG4gKiBJZiBzcGFjZXMgY2FuIG9jY3VyIGluIHRoZSBvcGVyYXRpb24gbmFtZSwgbXVsdGlwbGUgY29uc2VjdXRpdmUgc3BhY2VzXG4gKiAqKlNIT1VMRCoqIGJlIG5vcm1hbGl6ZWQgdG8gYSBzaW5nbGUgc3BhY2UuXG4gKlxuICogRm9yIGJhdGNoIG9wZXJhdGlvbnMsIGlmIHRoZSBpbmRpdmlkdWFsIG9wZXJhdGlvbnMgYXJlIGtub3duIHRvIGhhdmUgdGhlIHNhbWUgb3BlcmF0aW9uIG5hbWVcbiAqIHRoZW4gdGhhdCBvcGVyYXRpb24gbmFtZSAqKlNIT1VMRCoqIGJlIHVzZWQgcHJlcGVuZGVkIGJ5IGBCQVRDSCBgLFxuICogb3RoZXJ3aXNlIGBkYi5vcGVyYXRpb24ubmFtZWAgKipTSE9VTEQqKiBiZSBgQkFUQ0hgIG9yIHNvbWUgb3RoZXIgZGF0YWJhc2VcbiAqIHN5c3RlbSBzcGVjaWZpYyB0ZXJtIGlmIG1vcmUgYXBwbGljYWJsZS5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTl9OQU1FID0gJ2RiLm9wZXJhdGlvbi5uYW1lJztcbi8qKlxuICogTG93IGNhcmRpbmFsaXR5IHN1bW1hcnkgb2YgYSBkYXRhYmFzZSBxdWVyeS5cbiAqXG4gKiBAZXhhbXBsZSBTRUxFQ1Qgd3VzZXJfdGFibGVcbiAqIEBleGFtcGxlIElOU0VSVCBzaGlwcGluZ19kZXRhaWxzIFNFTEVDVCBvcmRlcnNcbiAqIEBleGFtcGxlIGdldCB1c2VyIGJ5IGlkXG4gKlxuICogQG5vdGUgVGhlIHF1ZXJ5IHN1bW1hcnkgZGVzY3JpYmVzIGEgY2xhc3Mgb2YgZGF0YWJhc2UgcXVlcmllcyBhbmQgaXMgdXNlZnVsXG4gKiBhcyBhIGdyb3VwaW5nIGtleSwgZXNwZWNpYWxseSB3aGVuIGFuYWx5emluZyB0ZWxlbWV0cnkgZm9yIGRhdGFiYXNlXG4gKiBjYWxscyBpbnZvbHZpbmcgY29tcGxleCBxdWVyaWVzLlxuICpcbiAqIFN1bW1hcnkgbWF5IGJlIGF2YWlsYWJsZSB0byB0aGUgaW5zdHJ1bWVudGF0aW9uIHRocm91Z2hcbiAqIGluc3RydW1lbnRhdGlvbiBob29rcyBvciBvdGhlciBtZWFucy4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSwgaW5zdHJ1bWVudGF0aW9uc1xuICogdGhhdCBzdXBwb3J0IHF1ZXJ5IHBhcnNpbmcgKipTSE9VTEQqKiBnZW5lcmF0ZSBhIHN1bW1hcnkgZm9sbG93aW5nXG4gKiBbR2VuZXJhdGluZyBxdWVyeSBzdW1tYXJ5XSgvZG9jcy9kYXRhYmFzZS9kYXRhYmFzZS1zcGFucy5tZCNnZW5lcmF0aW5nLWEtc3VtbWFyeS1vZi10aGUtcXVlcnkpXG4gKiBzZWN0aW9uLlxuICovXG5leHBvcnRzLkFUVFJfREJfUVVFUllfU1VNTUFSWSA9ICdkYi5xdWVyeS5zdW1tYXJ5Jztcbi8qKlxuICogVGhlIGRhdGFiYXNlIHF1ZXJ5IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIFNFTEVDVCAqIEZST00gd3VzZXJfdGFibGUgd2hlcmUgdXNlcm5hbWUgPSA/XG4gKiBAZXhhbXBsZSBTRVQgbXlrZXkgP1xuICpcbiAqIEBub3RlIEZvciBzYW5pdGl6YXRpb24gc2VlIFtTYW5pdGl6YXRpb24gb2YgYGRiLnF1ZXJ5LnRleHRgXSgvZG9jcy9kYXRhYmFzZS9kYXRhYmFzZS1zcGFucy5tZCNzYW5pdGl6YXRpb24tb2YtZGJxdWVyeXRleHQpLlxuICogRm9yIGJhdGNoIG9wZXJhdGlvbnMsIGlmIHRoZSBpbmRpdmlkdWFsIG9wZXJhdGlvbnMgYXJlIGtub3duIHRvIGhhdmUgdGhlIHNhbWUgcXVlcnkgdGV4dCB0aGVuIHRoYXQgcXVlcnkgdGV4dCAqKlNIT1VMRCoqIGJlIHVzZWQsIG90aGVyd2lzZSBhbGwgb2YgdGhlIGluZGl2aWR1YWwgcXVlcnkgdGV4dHMgKipTSE9VTEQqKiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBzZXBhcmF0b3IgYDsgYCBvciBzb21lIG90aGVyIGRhdGFiYXNlIHN5c3RlbSBzcGVjaWZpYyBzZXBhcmF0b3IgaWYgbW9yZSBhcHBsaWNhYmxlLlxuICogUGFyYW1ldGVyaXplZCBxdWVyeSB0ZXh0ICoqU0hPVUxEIE5PVCoqIGJlIHNhbml0aXplZC4gRXZlbiB0aG91Z2ggcGFyYW1ldGVyaXplZCBxdWVyeSB0ZXh0IGNhbiBwb3RlbnRpYWxseSBoYXZlIHNlbnNpdGl2ZSBkYXRhLCBieSB1c2luZyBhIHBhcmFtZXRlcml6ZWQgcXVlcnkgdGhlIHVzZXIgaXMgZ2l2aW5nIGEgc3Ryb25nIHNpZ25hbCB0aGF0IGFueSBzZW5zaXRpdmUgZGF0YSB3aWxsIGJlIHBhc3NlZCBhcyBwYXJhbWV0ZXIgdmFsdWVzLCBhbmQgdGhlIGJlbmVmaXQgdG8gb2JzZXJ2YWJpbGl0eSBvZiBjYXB0dXJpbmcgdGhlIHN0YXRpYyBwYXJ0IG9mIHRoZSBxdWVyeSB0ZXh0IGJ5IGRlZmF1bHQgb3V0d2VpZ2hzIHRoZSByaXNrLlxuICovXG5leHBvcnRzLkFUVFJfREJfUVVFUllfVEVYVCA9ICdkYi5xdWVyeS50ZXh0Jztcbi8qKlxuICogRGF0YWJhc2UgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuXG4gKlxuICogQGV4YW1wbGUgMTAyXG4gKiBAZXhhbXBsZSBPUkEtMTcwMDJcbiAqIEBleGFtcGxlIDA4UDAxXG4gKiBAZXhhbXBsZSA0MDRcbiAqXG4gKiBAbm90ZSBUaGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRhdGFiYXNlLiBVc3VhbGx5IGl0IHJlcHJlc2VudHMgYW4gZXJyb3IgY29kZSwgYnV0IG1heSBhbHNvIHJlcHJlc2VudCBwYXJ0aWFsIHN1Y2Nlc3MsIHdhcm5pbmcsIG9yIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB2YXJpb3VzIHR5cGVzIG9mIHN1Y2Nlc3NmdWwgb3V0Y29tZXMuXG4gKiBTZW1hbnRpYyBjb252ZW50aW9ucyBmb3IgaW5kaXZpZHVhbCBkYXRhYmFzZSBzeXN0ZW1zICoqU0hPVUxEKiogZG9jdW1lbnQgd2hhdCBgZGIucmVzcG9uc2Uuc3RhdHVzX2NvZGVgIG1lYW5zIGluIHRoZSBjb250ZXh0IG9mIHRoYXQgc3lzdGVtLlxuICovXG5leHBvcnRzLkFUVFJfREJfUkVTUE9OU0VfU1RBVFVTX0NPREUgPSAnZGIucmVzcG9uc2Uuc3RhdHVzX2NvZGUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhIHN0b3JlZCBwcm9jZWR1cmUgd2l0aGluIHRoZSBkYXRhYmFzZS5cbiAqXG4gKiBAZXhhbXBsZSBHZXRDdXN0b21lclxuICpcbiAqIEBub3RlIEl0IGlzICoqUkVDT01NRU5ERUQqKiB0byBjYXB0dXJlIHRoZSB2YWx1ZSBhcyBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb25cbiAqIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBkbyBhbnkgY2FzZSBub3JtYWxpemF0aW9uLlxuICpcbiAqIEZvciBiYXRjaCBvcGVyYXRpb25zLCBpZiB0aGUgaW5kaXZpZHVhbCBvcGVyYXRpb25zIGFyZSBrbm93biB0byBoYXZlIHRoZSBzYW1lXG4gKiBzdG9yZWQgcHJvY2VkdXJlIG5hbWUgdGhlbiB0aGF0IHN0b3JlZCBwcm9jZWR1cmUgbmFtZSAqKlNIT1VMRCoqIGJlIHVzZWQuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TVE9SRURfUFJPQ0VEVVJFX05BTUUgPSAnZGIuc3RvcmVkX3Byb2NlZHVyZS5uYW1lJztcbi8qKlxuICogVGhlIGRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtIChEQk1TKSBwcm9kdWN0IGFzIGlkZW50aWZpZWQgYnkgdGhlIGNsaWVudCBpbnN0cnVtZW50YXRpb24uXG4gKlxuICogQG5vdGUgVGhlIGFjdHVhbCBEQk1TIG1heSBkaWZmZXIgZnJvbSB0aGUgb25lIGlkZW50aWZpZWQgYnkgdGhlIGNsaWVudC4gRm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcgUG9zdGdyZVNRTCBjbGllbnQgbGlicmFyaWVzIHRvIGNvbm5lY3QgdG8gYSBDb2Nrcm9hY2hEQiwgdGhlIGBkYi5zeXN0ZW0ubmFtZWAgaXMgc2V0IHRvIGBwb3N0Z3Jlc3FsYCBiYXNlZCBvbiB0aGUgaW5zdHJ1bWVudGF0aW9uJ3MgYmVzdCBrbm93bGVkZ2UuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TWVNURU1fTkFNRSA9ICdkYi5zeXN0ZW0ubmFtZSc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJtYXJpYWRiXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU1fTkFNRX0uXG4gKlxuICogW01hcmlhREJdKGh0dHBzOi8vbWFyaWFkYi5vcmcvKVxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01BUklBREIgPSBcIm1hcmlhZGJcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIm1pY3Jvc29mdC5zcWxfc2VydmVyXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU1fTkFNRX0uXG4gKlxuICogW01pY3Jvc29mdCBTUUwgU2VydmVyXShodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3NxbC1zZXJ2ZXIpXG4gKi9cbmV4cG9ydHMuREJfU1lTVEVNX05BTUVfVkFMVUVfTUlDUk9TT0ZUX1NRTF9TRVJWRVIgPSBcIm1pY3Jvc29mdC5zcWxfc2VydmVyXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJteXNxbFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfU1lTVEVNX05BTUV9LlxuICpcbiAqIFtNeVNRTF0oaHR0cHM6Ly93d3cubXlzcWwuY29tLylcbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9NWVNRTCA9IFwibXlzcWxcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInBvc3RncmVzcWxcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RCX1NZU1RFTV9OQU1FfS5cbiAqXG4gKiBbUG9zdGdyZVNRTF0oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvKVxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX1BPU1RHUkVTUUwgPSBcInBvc3RncmVzcWxcIjtcbi8qKlxuICogTmFtZSBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgbWFuYWdlZCBoZWFwIGdlbmVyYXRpb24uXG4gKlxuICogQGV4YW1wbGUgZ2VuMFxuICogQGV4YW1wbGUgZ2VuMVxuICogQGV4YW1wbGUgZ2VuMlxuICovXG5leHBvcnRzLkFUVFJfRE9UTkVUX0dDX0hFQVBfR0VORVJBVElPTiA9ICdkb3RuZXQuZ2MuaGVhcC5nZW5lcmF0aW9uJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImdlbjBcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RPVE5FVF9HQ19IRUFQX0dFTkVSQVRJT059LlxuICpcbiAqIEdlbmVyYXRpb24gMFxuICovXG5leHBvcnRzLkRPVE5FVF9HQ19IRUFQX0dFTkVSQVRJT05fVkFMVUVfR0VOMCA9IFwiZ2VuMFwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiZ2VuMVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfRE9UTkVUX0dDX0hFQVBfR0VORVJBVElPTn0uXG4gKlxuICogR2VuZXJhdGlvbiAxXG4gKi9cbmV4cG9ydHMuRE9UTkVUX0dDX0hFQVBfR0VORVJBVElPTl9WQUxVRV9HRU4xID0gXCJnZW4xXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJnZW4yXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9ET1RORVRfR0NfSEVBUF9HRU5FUkFUSU9OfS5cbiAqXG4gKiBHZW5lcmF0aW9uIDJcbiAqL1xuZXhwb3J0cy5ET1RORVRfR0NfSEVBUF9HRU5FUkFUSU9OX1ZBTFVFX0dFTjIgPSBcImdlbjJcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcImxvaFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfRE9UTkVUX0dDX0hFQVBfR0VORVJBVElPTn0uXG4gKlxuICogTGFyZ2UgT2JqZWN0IEhlYXBcbiAqL1xuZXhwb3J0cy5ET1RORVRfR0NfSEVBUF9HRU5FUkFUSU9OX1ZBTFVFX0xPSCA9IFwibG9oXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJwb2hcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RPVE5FVF9HQ19IRUFQX0dFTkVSQVRJT059LlxuICpcbiAqIFBpbm5lZCBPYmplY3QgSGVhcFxuICovXG5leHBvcnRzLkRPVE5FVF9HQ19IRUFQX0dFTkVSQVRJT05fVkFMVUVfUE9IID0gXCJwb2hcIjtcbi8qKlxuICogRGVzY3JpYmVzIGEgY2xhc3Mgb2YgZXJyb3IgdGhlIG9wZXJhdGlvbiBlbmRlZCB3aXRoLlxuICpcbiAqIEBleGFtcGxlIHRpbWVvdXRcbiAqIEBleGFtcGxlIGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uXG4gKiBAZXhhbXBsZSBzZXJ2ZXJfY2VydGlmaWNhdGVfaW52YWxpZFxuICogQGV4YW1wbGUgNTAwXG4gKlxuICogQG5vdGUgVGhlIGBlcnJvci50eXBlYCAqKlNIT1VMRCoqIGJlIHByZWRpY3RhYmxlLCBhbmQgKipTSE9VTEQqKiBoYXZlIGxvdyBjYXJkaW5hbGl0eS5cbiAqXG4gKiBXaGVuIGBlcnJvci50eXBlYCBpcyBzZXQgdG8gYSB0eXBlIChlLmcuLCBhbiBleGNlcHRpb24gdHlwZSksIGl0c1xuICogY2Fub25pY2FsIGNsYXNzIG5hbWUgaWRlbnRpZnlpbmcgdGhlIHR5cGUgd2l0aGluIHRoZSBhcnRpZmFjdCAqKlNIT1VMRCoqIGJlIHVzZWQuXG4gKlxuICogSW5zdHJ1bWVudGF0aW9ucyAqKlNIT1VMRCoqIGRvY3VtZW50IHRoZSBsaXN0IG9mIGVycm9ycyB0aGV5IHJlcG9ydC5cbiAqXG4gKiBUaGUgY2FyZGluYWxpdHkgb2YgYGVycm9yLnR5cGVgIHdpdGhpbiBvbmUgaW5zdHJ1bWVudGF0aW9uIGxpYnJhcnkgKipTSE9VTEQqKiBiZSBsb3cuXG4gKiBUZWxlbWV0cnkgY29uc3VtZXJzIHRoYXQgYWdncmVnYXRlIGRhdGEgZnJvbSBtdWx0aXBsZSBpbnN0cnVtZW50YXRpb24gbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnNcbiAqIHNob3VsZCBiZSBwcmVwYXJlZCBmb3IgYGVycm9yLnR5cGVgIHRvIGhhdmUgaGlnaCBjYXJkaW5hbGl0eSBhdCBxdWVyeSB0aW1lIHdoZW4gbm9cbiAqIGFkZGl0aW9uYWwgZmlsdGVycyBhcmUgYXBwbGllZC5cbiAqXG4gKiBJZiB0aGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBpbnN0cnVtZW50YXRpb25zICoqU0hPVUxEIE5PVCoqIHNldCBgZXJyb3IudHlwZWAuXG4gKlxuICogSWYgYSBzcGVjaWZpYyBkb21haW4gZGVmaW5lcyBpdHMgb3duIHNldCBvZiBlcnJvciBpZGVudGlmaWVycyAoc3VjaCBhcyBIVFRQIG9yIGdSUEMgc3RhdHVzIGNvZGVzKSxcbiAqIGl0J3MgKipSRUNPTU1FTkRFRCoqIHRvOlxuICpcbiAqICAgLSBVc2UgYSBkb21haW4tc3BlY2lmaWMgYXR0cmlidXRlXG4gKiAgIC0gU2V0IGBlcnJvci50eXBlYCB0byBjYXB0dXJlIGFsbCBlcnJvcnMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgZG9tYWluLXNwZWNpZmljIHNldCBvciBub3QuXG4gKi9cbmV4cG9ydHMuQVRUUl9FUlJPUl9UWVBFID0gJ2Vycm9yLnR5cGUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiX09USEVSXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9FUlJPUl9UWVBFfS5cbiAqXG4gKiBBIGZhbGxiYWNrIGVycm9yIHZhbHVlIHRvIGJlIHVzZWQgd2hlbiB0aGUgaW5zdHJ1bWVudGF0aW9uIGRvZXNuJ3QgZGVmaW5lIGEgY3VzdG9tIHZhbHVlLlxuICovXG5leHBvcnRzLkVSUk9SX1RZUEVfVkFMVUVfT1RIRVIgPSBcIl9PVEhFUlwiO1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGVzY2FwaW5nIHRoZSBzY29wZSBvZiB0aGUgc3Bhbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBJdCdzIG5vIGxvbmdlciByZWNvbW1lbmRlZCB0byByZWNvcmQgZXhjZXB0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIGFuZCBkbyBub3QgZXNjYXBlIHRoZSBzY29wZSBvZiBhIHNwYW4uXG4gKi9cbmV4cG9ydHMuQVRUUl9FWENFUFRJT05fRVNDQVBFRCA9ICdleGNlcHRpb24uZXNjYXBlZCc7XG4vKipcbiAqIFRoZSBleGNlcHRpb24gbWVzc2FnZS5cbiAqXG4gKiBAZXhhbXBsZSBEaXZpc2lvbiBieSB6ZXJvXG4gKiBAZXhhbXBsZSBDYW4ndCBjb252ZXJ0ICdpbnQnIG9iamVjdCB0byBzdHIgaW1wbGljaXRseVxuICovXG5leHBvcnRzLkFUVFJfRVhDRVBUSU9OX01FU1NBR0UgPSAnZXhjZXB0aW9uLm1lc3NhZ2UnO1xuLyoqXG4gKiBBIHN0YWNrdHJhY2UgYXMgYSBzdHJpbmcgaW4gdGhlIG5hdHVyYWwgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBsYW5ndWFnZSBydW50aW1lLiBUaGUgcmVwcmVzZW50YXRpb24gaXMgdG8gYmUgZGV0ZXJtaW5lZCBhbmQgZG9jdW1lbnRlZCBieSBlYWNoIGxhbmd1YWdlIFNJRy5cbiAqXG4gKiBAZXhhbXBsZSBcIkV4Y2VwdGlvbiBpbiB0aHJlYWQgXCJtYWluXCIgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb246IFRlc3QgZXhjZXB0aW9uXFxcXG4gYXQgY29tLmV4YW1wbGUuR2VuZXJhdGVUcmFjZS5tZXRob2RCKEdlbmVyYXRlVHJhY2UuamF2YToxMylcXFxcbiBhdCBjb20uZXhhbXBsZS5HZW5lcmF0ZVRyYWNlLm1ldGhvZEEoR2VuZXJhdGVUcmFjZS5qYXZhOjkpXFxcXG4gYXQgY29tLmV4YW1wbGUuR2VuZXJhdGVUcmFjZS5tYWluKEdlbmVyYXRlVHJhY2UuamF2YTo1KVxcXFxuXCJcbiAqL1xuZXhwb3J0cy5BVFRSX0VYQ0VQVElPTl9TVEFDS1RSQUNFID0gJ2V4Y2VwdGlvbi5zdGFja3RyYWNlJztcbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIGV4Y2VwdGlvbiAoaXRzIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lLCBpZiBhcHBsaWNhYmxlKS4gVGhlIGR5bmFtaWMgdHlwZSBvZiB0aGUgZXhjZXB0aW9uIHNob3VsZCBiZSBwcmVmZXJyZWQgb3ZlciB0aGUgc3RhdGljIHR5cGUgaW4gbGFuZ3VhZ2VzIHRoYXQgc3VwcG9ydCBpdC5cbiAqXG4gKiBAZXhhbXBsZSBqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uXG4gKiBAZXhhbXBsZSBPU0Vycm9yXG4gKi9cbmV4cG9ydHMuQVRUUl9FWENFUFRJT05fVFlQRSA9ICdleGNlcHRpb24udHlwZSc7XG4vKipcbiAqIEhUVFAgcmVxdWVzdCBoZWFkZXJzLCBgPGtleT5gIGJlaW5nIHRoZSBub3JtYWxpemVkIEhUVFAgSGVhZGVyIG5hbWUgKGxvd2VyY2FzZSksIHRoZSB2YWx1ZSBiZWluZyB0aGUgaGVhZGVyIHZhbHVlcy5cbiAqXG4gKiBAZXhhbXBsZSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdXG4gKiBAZXhhbXBsZSBbXCIxLjIuMy40XCIsIFwiMS4yLjMuNVwiXVxuICpcbiAqIEBub3RlIEluc3RydW1lbnRhdGlvbnMgKipTSE9VTEQqKiByZXF1aXJlIGFuIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gb2Ygd2hpY2ggaGVhZGVycyBhcmUgdG8gYmUgY2FwdHVyZWQuXG4gKiBJbmNsdWRpbmcgYWxsIHJlcXVlc3QgaGVhZGVycyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIC0gZXhwbGljaXQgY29uZmlndXJhdGlvbiBoZWxwcyBhdm9pZCBsZWFraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGUgYFVzZXItQWdlbnRgIGhlYWRlciBpcyBhbHJlYWR5IGNhcHR1cmVkIGluIHRoZSBgdXNlcl9hZ2VudC5vcmlnaW5hbGAgYXR0cmlidXRlLlxuICogVXNlcnMgKipNQVkqKiBleHBsaWNpdGx5IGNvbmZpZ3VyZSBpbnN0cnVtZW50YXRpb25zIHRvIGNhcHR1cmUgdGhlbSBldmVuIHRob3VnaCBpdCBpcyBub3QgcmVjb21tZW5kZWQuXG4gKlxuICogVGhlIGF0dHJpYnV0ZSB2YWx1ZSAqKk1VU1QqKiBjb25zaXN0IG9mIGVpdGhlciBtdWx0aXBsZSBoZWFkZXIgdmFsdWVzIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAqIG9yIGEgc2luZ2xlLWl0ZW0gYXJyYXkgY29udGFpbmluZyBhIHBvc3NpYmx5IGNvbW1hLWNvbmNhdGVuYXRlZCBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgd2F5XG4gKiB0aGUgSFRUUCBsaWJyYXJ5IHByb3ZpZGVzIGFjY2VzcyB0byBoZWFkZXJzLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgLSBBIGhlYWRlciBgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uYCAqKlNIT1VMRCoqIGJlIHJlY29yZGVkIGFzIHRoZSBgaHR0cC5yZXF1ZXN0LmhlYWRlci5jb250ZW50LXR5cGVgXG4gKiAgICAgYXR0cmlidXRlIHdpdGggdmFsdWUgYFtcImFwcGxpY2F0aW9uL2pzb25cIl1gLlxuICogICAtIEEgaGVhZGVyIGBYLUZvcndhcmRlZC1Gb3I6IDEuMi4zLjQsIDEuMi4zLjVgICoqU0hPVUxEKiogYmUgcmVjb3JkZWQgYXMgdGhlIGBodHRwLnJlcXVlc3QuaGVhZGVyLngtZm9yd2FyZGVkLWZvcmBcbiAqICAgICBhdHRyaWJ1dGUgd2l0aCB2YWx1ZSBgW1wiMS4yLjMuNFwiLCBcIjEuMi4zLjVcIl1gIG9yIGBbXCIxLjIuMy40LCAxLjIuMy41XCJdYCBkZXBlbmRpbmcgb24gdGhlIEhUVFAgbGlicmFyeS5cbiAqL1xuY29uc3QgQVRUUl9IVFRQX1JFUVVFU1RfSEVBREVSID0gKGtleSkgPT4gYGh0dHAucmVxdWVzdC5oZWFkZXIuJHtrZXl9YDtcbmV4cG9ydHMuQVRUUl9IVFRQX1JFUVVFU1RfSEVBREVSID0gQVRUUl9IVFRQX1JFUVVFU1RfSEVBREVSO1xuLyoqXG4gKiBIVFRQIHJlcXVlc3QgbWV0aG9kLlxuICpcbiAqIEBleGFtcGxlIEdFVFxuICogQGV4YW1wbGUgUE9TVFxuICogQGV4YW1wbGUgSEVBRFxuICpcbiAqIEBub3RlIEhUVFAgcmVxdWVzdCBtZXRob2QgdmFsdWUgKipTSE9VTEQqKiBiZSBcImtub3duXCIgdG8gdGhlIGluc3RydW1lbnRhdGlvbi5cbiAqIEJ5IGRlZmF1bHQsIHRoaXMgY29udmVudGlvbiBkZWZpbmVzIFwia25vd25cIiBtZXRob2RzIGFzIHRoZSBvbmVzIGxpc3RlZCBpbiBbUkZDOTExMF0oaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAuaHRtbCNuYW1lLW1ldGhvZHMpLFxuICogdGhlIFBBVENIIG1ldGhvZCBkZWZpbmVkIGluIFtSRkM1Nzg5XShodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTc4OS5odG1sKVxuICogYW5kIHRoZSBRVUVSWSBtZXRob2QgZGVmaW5lZCBpbiBbaHR0cGJpcy1zYWZlLW1ldGhvZC13LWJvZHldKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2RyYWZ0LWlldGYtaHR0cGJpcy1zYWZlLW1ldGhvZC13LWJvZHkvP2luY2x1ZGVfdGV4dD0xKS5cbiAqXG4gKiBJZiB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZCBpcyBub3Qga25vd24gdG8gaW5zdHJ1bWVudGF0aW9uLCBpdCAqKk1VU1QqKiBzZXQgdGhlIGBodHRwLnJlcXVlc3QubWV0aG9kYCBhdHRyaWJ1dGUgdG8gYF9PVEhFUmAuXG4gKlxuICogSWYgdGhlIEhUVFAgaW5zdHJ1bWVudGF0aW9uIGNvdWxkIGVuZCB1cCBjb252ZXJ0aW5nIHZhbGlkIEhUVFAgcmVxdWVzdCBtZXRob2RzIHRvIGBfT1RIRVJgLCB0aGVuIGl0ICoqTVVTVCoqIHByb3ZpZGUgYSB3YXkgdG8gb3ZlcnJpZGVcbiAqIHRoZSBsaXN0IG9mIGtub3duIEhUVFAgbWV0aG9kcy4gSWYgdGhpcyBvdmVycmlkZSBpcyBkb25lIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgKipNVVNUKiogYmUgbmFtZWRcbiAqIE9URUxfSU5TVFJVTUVOVEFUSU9OX0hUVFBfS05PV05fTUVUSE9EUyBhbmQgc3VwcG9ydCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhc2Utc2Vuc2l0aXZlIGtub3duIEhUVFAgbWV0aG9kc1xuICogKHRoaXMgbGlzdCAqKk1VU1QqKiBiZSBhIGZ1bGwgb3ZlcnJpZGUgb2YgdGhlIGRlZmF1bHQga25vd24gbWV0aG9kLCBpdCBpcyBub3QgYSBsaXN0IG9mIGtub3duIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHRzKS5cbiAqXG4gKiBIVFRQIG1ldGhvZCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIGBodHRwLnJlcXVlc3QubWV0aG9kYCBhdHRyaWJ1dGUgdmFsdWUgKipNVVNUKiogbWF0Y2ggYSBrbm93biBIVFRQIG1ldGhvZCBuYW1lIGV4YWN0bHkuXG4gKiBJbnN0cnVtZW50YXRpb25zIGZvciBzcGVjaWZpYyB3ZWIgZnJhbWV3b3JrcyB0aGF0IGNvbnNpZGVyIEhUVFAgbWV0aG9kcyB0byBiZSBjYXNlIGluc2Vuc2l0aXZlLCAqKlNIT1VMRCoqIHBvcHVsYXRlIGEgY2Fub25pY2FsIGVxdWl2YWxlbnQuXG4gKiBUcmFjaW5nIGluc3RydW1lbnRhdGlvbnMgdGhhdCBkbyBzbywgKipNVVNUKiogYWxzbyBzZXQgYGh0dHAucmVxdWVzdC5tZXRob2Rfb3JpZ2luYWxgIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0QgPSAnaHR0cC5yZXF1ZXN0Lm1ldGhvZCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJfT1RIRVJcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0R9LlxuICpcbiAqIEFueSBIVFRQIG1ldGhvZCB0aGF0IHRoZSBpbnN0cnVtZW50YXRpb24gaGFzIG5vIHByaW9yIGtub3dsZWRnZSBvZi5cbiAqL1xuZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX09USEVSID0gXCJfT1RIRVJcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIkNPTk5FQ1RcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0R9LlxuICpcbiAqIENPTk5FQ1QgbWV0aG9kLlxuICovXG5leHBvcnRzLkhUVFBfUkVRVUVTVF9NRVRIT0RfVkFMVUVfQ09OTkVDVCA9IFwiQ09OTkVDVFwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiREVMRVRFXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EfS5cbiAqXG4gKiBERUxFVEUgbWV0aG9kLlxuICovXG5leHBvcnRzLkhUVFBfUkVRVUVTVF9NRVRIT0RfVkFMVUVfREVMRVRFID0gXCJERUxFVEVcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIkdFVFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRH0uXG4gKlxuICogR0VUIG1ldGhvZC5cbiAqL1xuZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX0dFVCA9IFwiR0VUXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJIRUFEXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EfS5cbiAqXG4gKiBIRUFEIG1ldGhvZC5cbiAqL1xuZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX0hFQUQgPSBcIkhFQURcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIk9QVElPTlNcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0R9LlxuICpcbiAqIE9QVElPTlMgbWV0aG9kLlxuICovXG5leHBvcnRzLkhUVFBfUkVRVUVTVF9NRVRIT0RfVkFMVUVfT1BUSU9OUyA9IFwiT1BUSU9OU1wiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiUEFUQ0hcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0R9LlxuICpcbiAqIFBBVENIIG1ldGhvZC5cbiAqL1xuZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX1BBVENIID0gXCJQQVRDSFwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiUE9TVFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRH0uXG4gKlxuICogUE9TVCBtZXRob2QuXG4gKi9cbmV4cG9ydHMuSFRUUF9SRVFVRVNUX01FVEhPRF9WQUxVRV9QT1NUID0gXCJQT1NUXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJQVVRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0R9LlxuICpcbiAqIFBVVCBtZXRob2QuXG4gKi9cbmV4cG9ydHMuSFRUUF9SRVFVRVNUX01FVEhPRF9WQUxVRV9QVVQgPSBcIlBVVFwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiVFJBQ0VcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0R9LlxuICpcbiAqIFRSQUNFIG1ldGhvZC5cbiAqL1xuZXhwb3J0cy5IVFRQX1JFUVVFU1RfTUVUSE9EX1ZBTFVFX1RSQUNFID0gXCJUUkFDRVwiO1xuLyoqXG4gKiBPcmlnaW5hbCBIVFRQIG1ldGhvZCBzZW50IGJ5IHRoZSBjbGllbnQgaW4gdGhlIHJlcXVlc3QgbGluZS5cbiAqXG4gKiBAZXhhbXBsZSBHZVRcbiAqIEBleGFtcGxlIEFDTFxuICogQGV4YW1wbGUgZm9vXG4gKi9cbmV4cG9ydHMuQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EX09SSUdJTkFMID0gJ2h0dHAucmVxdWVzdC5tZXRob2Rfb3JpZ2luYWwnO1xuLyoqXG4gKiBUaGUgb3JkaW5hbCBudW1iZXIgb2YgcmVxdWVzdCByZXNlbmRpbmcgYXR0ZW1wdCAoZm9yIGFueSByZWFzb24sIGluY2x1ZGluZyByZWRpcmVjdHMpLlxuICpcbiAqIEBleGFtcGxlIDNcbiAqXG4gKiBAbm90ZSBUaGUgcmVzZW5kIGNvdW50ICoqU0hPVUxEKiogYmUgdXBkYXRlZCBlYWNoIHRpbWUgYW4gSFRUUCByZXF1ZXN0IGdldHMgcmVzZW50IGJ5IHRoZSBjbGllbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3YXMgdGhlIGNhdXNlIG9mIHRoZSByZXNlbmRpbmcgKGUuZy4gcmVkaXJlY3Rpb24sIGF1dGhvcml6YXRpb24gZmFpbHVyZSwgNTAzIFNlcnZlciBVbmF2YWlsYWJsZSwgbmV0d29yayBpc3N1ZXMsIG9yIGFueSBvdGhlcikuXG4gKi9cbmV4cG9ydHMuQVRUUl9IVFRQX1JFUVVFU1RfUkVTRU5EX0NPVU5UID0gJ2h0dHAucmVxdWVzdC5yZXNlbmRfY291bnQnO1xuLyoqXG4gKiBIVFRQIHJlc3BvbnNlIGhlYWRlcnMsIGA8a2V5PmAgYmVpbmcgdGhlIG5vcm1hbGl6ZWQgSFRUUCBIZWFkZXIgbmFtZSAobG93ZXJjYXNlKSwgdGhlIHZhbHVlIGJlaW5nIHRoZSBoZWFkZXIgdmFsdWVzLlxuICpcbiAqIEBleGFtcGxlIFtcImFwcGxpY2F0aW9uL2pzb25cIl1cbiAqIEBleGFtcGxlIFtcImFiY1wiLCBcImRlZlwiXVxuICpcbiAqIEBub3RlIEluc3RydW1lbnRhdGlvbnMgKipTSE9VTEQqKiByZXF1aXJlIGFuIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gb2Ygd2hpY2ggaGVhZGVycyBhcmUgdG8gYmUgY2FwdHVyZWQuXG4gKiBJbmNsdWRpbmcgYWxsIHJlc3BvbnNlIGhlYWRlcnMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayAtIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gaGVscHMgYXZvaWQgbGVha2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gKlxuICogVXNlcnMgKipNQVkqKiBleHBsaWNpdGx5IGNvbmZpZ3VyZSBpbnN0cnVtZW50YXRpb25zIHRvIGNhcHR1cmUgdGhlbSBldmVuIHRob3VnaCBpdCBpcyBub3QgcmVjb21tZW5kZWQuXG4gKlxuICogVGhlIGF0dHJpYnV0ZSB2YWx1ZSAqKk1VU1QqKiBjb25zaXN0IG9mIGVpdGhlciBtdWx0aXBsZSBoZWFkZXIgdmFsdWVzIGFzIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAqIG9yIGEgc2luZ2xlLWl0ZW0gYXJyYXkgY29udGFpbmluZyBhIHBvc3NpYmx5IGNvbW1hLWNvbmNhdGVuYXRlZCBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgd2F5XG4gKiB0aGUgSFRUUCBsaWJyYXJ5IHByb3ZpZGVzIGFjY2VzcyB0byBoZWFkZXJzLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgLSBBIGhlYWRlciBgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uYCBoZWFkZXIgKipTSE9VTEQqKiBiZSByZWNvcmRlZCBhcyB0aGUgYGh0dHAucmVxdWVzdC5yZXNwb25zZS5jb250ZW50LXR5cGVgXG4gKiAgICAgYXR0cmlidXRlIHdpdGggdmFsdWUgYFtcImFwcGxpY2F0aW9uL2pzb25cIl1gLlxuICogICAtIEEgaGVhZGVyIGBNeS1jdXN0b20taGVhZGVyOiBhYmMsIGRlZmAgaGVhZGVyICoqU0hPVUxEKiogYmUgcmVjb3JkZWQgYXMgdGhlIGBodHRwLnJlc3BvbnNlLmhlYWRlci5teS1jdXN0b20taGVhZGVyYFxuICogICAgIGF0dHJpYnV0ZSB3aXRoIHZhbHVlIGBbXCJhYmNcIiwgXCJkZWZcIl1gIG9yIGBbXCJhYmMsIGRlZlwiXWAgZGVwZW5kaW5nIG9uIHRoZSBIVFRQIGxpYnJhcnkuXG4gKi9cbmNvbnN0IEFUVFJfSFRUUF9SRVNQT05TRV9IRUFERVIgPSAoa2V5KSA9PiBgaHR0cC5yZXNwb25zZS5oZWFkZXIuJHtrZXl9YDtcbmV4cG9ydHMuQVRUUl9IVFRQX1JFU1BPTlNFX0hFQURFUiA9IEFUVFJfSFRUUF9SRVNQT05TRV9IRUFERVI7XG4vKipcbiAqIFtIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYpLlxuICpcbiAqIEBleGFtcGxlIDIwMFxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9SRVNQT05TRV9TVEFUVVNfQ09ERSA9ICdodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlJztcbi8qKlxuICogVGhlIG1hdGNoZWQgcm91dGUgdGVtcGxhdGUgZm9yIHRoZSByZXF1ZXN0LiBUaGlzICoqTVVTVCoqIGJlIGxvdy1jYXJkaW5hbGl0eSBhbmQgaW5jbHVkZSBhbGwgc3RhdGljIHBhdGggc2VnbWVudHMsIHdpdGggZHluYW1pYyBwYXRoIHNlZ21lbnRzIHJlcHJlc2VudGVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICpcbiAqIEBleGFtcGxlIC91c2Vycy86dXNlcklEP1xuICogQGV4YW1wbGUgbXktY29udHJvbGxlci9teS1hY3Rpb24ve2lkP31cbiAqXG4gKiBAbm90ZSAqKk1VU1QgTk9UKiogYmUgcG9wdWxhdGVkIHdoZW4gdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBIVFRQIHNlcnZlciBmcmFtZXdvcmsgYXMgdGhlIHJvdXRlIGF0dHJpYnV0ZSBzaG91bGQgaGF2ZSBsb3ctY2FyZGluYWxpdHkgYW5kIHRoZSBVUkkgcGF0aCBjYW4gTk9UIHN1YnN0aXR1dGUgaXQuXG4gKiAqKlNIT1VMRCoqIGluY2x1ZGUgdGhlIFthcHBsaWNhdGlvbiByb290XSgvZG9jcy9odHRwL2h0dHAtc3BhbnMubWQjaHR0cC1zZXJ2ZXItZGVmaW5pdGlvbnMpIGlmIHRoZXJlIGlzIG9uZS5cbiAqXG4gKiBBIHN0YXRpYyBwYXRoIHNlZ21lbnQgaXMgYSBwYXJ0IG9mIHRoZSByb3V0ZSB0ZW1wbGF0ZSB3aXRoIGEgZml4ZWQsIGxvdy1jYXJkaW5hbGl0eSB2YWx1ZS4gVGhpcyBpbmNsdWRlcyBsaXRlcmFsIHN0cmluZ3MgbGlrZSBgL3VzZXJzL2AgYW5kIHBsYWNlaG9sZGVycyB0aGF0XG4gKiBhcmUgY29uc3RyYWluZWQgdG8gYSBmaW5pdGUsIHByZWRlZmluZWQgc2V0IG9mIHZhbHVlcywgZS5nLiBge2NvbnRyb2xsZXJ9YCBvciBge2FjdGlvbn1gLlxuICpcbiAqIEEgZHluYW1pYyBwYXRoIHNlZ21lbnQgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSB2YWx1ZSB0aGF0IGNhbiBoYXZlIGhpZ2ggY2FyZGluYWxpdHkgYW5kIGlzIG5vdCBjb25zdHJhaW5lZCB0byBhIHByZWRlZmluZWQgbGlzdCBsaWtlIHN0YXRpYyBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEluc3RydW1lbnRhdGlvbnMgKipTSE9VTEQqKiB1c2Ugcm91dGluZyBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgY29ycmVzcG9uZGluZyB3ZWIgZnJhbWV3b3JrLiBUaGV5ICoqU0hPVUxEKiogcGljayB0aGUgbW9zdCBwcmVjaXNlIHNvdXJjZSBvZiByb3V0aW5nIGluZm9ybWF0aW9uIGFuZCAqKk1BWSoqXG4gKiBzdXBwb3J0IGN1c3RvbSByb3V0ZSBmb3JtYXR0aW5nLiBJbnN0cnVtZW50YXRpb25zICoqU0hPVUxEKiogZG9jdW1lbnQgdGhlIGZvcm1hdCBhbmQgdGhlIEFQSSB1c2VkIHRvIG9idGFpbiB0aGUgcm91dGUgc3RyaW5nLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9ST1VURSA9ICdodHRwLnJvdXRlJztcbi8qKlxuICogTmFtZSBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYWN0aW9uLlxuICpcbiAqIEBleGFtcGxlIGVuZCBvZiBtaW5vciBHQ1xuICogQGV4YW1wbGUgZW5kIG9mIG1ham9yIEdDXG4gKlxuICogQG5vdGUgR2FyYmFnZSBjb2xsZWN0b3IgYWN0aW9uIGlzIGdlbmVyYWxseSBvYnRhaW5lZCB2aWEgW0dhcmJhZ2VDb2xsZWN0aW9uTm90aWZpY2F0aW9uSW5mbyNnZXRHY0FjdGlvbigpXShodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qZGsubWFuYWdlbWVudC9jb20vc3VuL21hbmFnZW1lbnQvR2FyYmFnZUNvbGxlY3Rpb25Ob3RpZmljYXRpb25JbmZvLmh0bWwjZ2V0R2NBY3Rpb24oKSkuXG4gKi9cbmV4cG9ydHMuQVRUUl9KVk1fR0NfQUNUSU9OID0gJ2p2bS5nYy5hY3Rpb24nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci5cbiAqXG4gKiBAZXhhbXBsZSBHMSBZb3VuZyBHZW5lcmF0aW9uXG4gKiBAZXhhbXBsZSBHMSBPbGQgR2VuZXJhdGlvblxuICpcbiAqIEBub3RlIEdhcmJhZ2UgY29sbGVjdG9yIG5hbWUgaXMgZ2VuZXJhbGx5IG9idGFpbmVkIHZpYSBbR2FyYmFnZUNvbGxlY3Rpb25Ob3RpZmljYXRpb25JbmZvI2dldEdjTmFtZSgpXShodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qZGsubWFuYWdlbWVudC9jb20vc3VuL21hbmFnZW1lbnQvR2FyYmFnZUNvbGxlY3Rpb25Ob3RpZmljYXRpb25JbmZvLmh0bWwjZ2V0R2NOYW1lKCkpLlxuICovXG5leHBvcnRzLkFUVFJfSlZNX0dDX05BTUUgPSAnanZtLmdjLm5hbWUnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBtZW1vcnkgcG9vbC5cbiAqXG4gKiBAZXhhbXBsZSBHMSBPbGQgR2VuXG4gKiBAZXhhbXBsZSBHMSBFZGVuIHNwYWNlXG4gKiBAZXhhbXBsZSBHMSBTdXJ2aXZvciBTcGFjZVxuICpcbiAqIEBub3RlIFBvb2wgbmFtZXMgYXJlIGdlbmVyYWxseSBvYnRhaW5lZCB2aWEgW01lbW9yeVBvb2xNWEJlYW4jZ2V0TmFtZSgpXShodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLm1hbmFnZW1lbnQvamF2YS9sYW5nL21hbmFnZW1lbnQvTWVtb3J5UG9vbE1YQmVhbi5odG1sI2dldE5hbWUoKSkuXG4gKi9cbmV4cG9ydHMuQVRUUl9KVk1fTUVNT1JZX1BPT0xfTkFNRSA9ICdqdm0ubWVtb3J5LnBvb2wubmFtZSc7XG4vKipcbiAqIFRoZSB0eXBlIG9mIG1lbW9yeS5cbiAqXG4gKiBAZXhhbXBsZSBoZWFwXG4gKiBAZXhhbXBsZSBub25faGVhcFxuICovXG5leHBvcnRzLkFUVFJfSlZNX01FTU9SWV9UWVBFID0gJ2p2bS5tZW1vcnkudHlwZSc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJoZWFwXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9KVk1fTUVNT1JZX1RZUEV9LlxuICpcbiAqIEhlYXAgbWVtb3J5LlxuICovXG5leHBvcnRzLkpWTV9NRU1PUllfVFlQRV9WQUxVRV9IRUFQID0gXCJoZWFwXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJub25faGVhcFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfSlZNX01FTU9SWV9UWVBFfS5cbiAqXG4gKiBOb24taGVhcCBtZW1vcnlcbiAqL1xuZXhwb3J0cy5KVk1fTUVNT1JZX1RZUEVfVkFMVUVfTk9OX0hFQVAgPSBcIm5vbl9oZWFwXCI7XG4vKipcbiAqIFdoZXRoZXIgdGhlIHRocmVhZCBpcyBkYWVtb24gb3Igbm90LlxuICovXG5leHBvcnRzLkFUVFJfSlZNX1RIUkVBRF9EQUVNT04gPSAnanZtLnRocmVhZC5kYWVtb24nO1xuLyoqXG4gKiBTdGF0ZSBvZiB0aGUgdGhyZWFkLlxuICpcbiAqIEBleGFtcGxlIHJ1bm5hYmxlXG4gKiBAZXhhbXBsZSBibG9ja2VkXG4gKi9cbmV4cG9ydHMuQVRUUl9KVk1fVEhSRUFEX1NUQVRFID0gJ2p2bS50aHJlYWQuc3RhdGUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiYmxvY2tlZFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfSlZNX1RIUkVBRF9TVEFURX0uXG4gKlxuICogQSB0aHJlYWQgdGhhdCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGEgbW9uaXRvciBsb2NrIGlzIGluIHRoaXMgc3RhdGUuXG4gKi9cbmV4cG9ydHMuSlZNX1RIUkVBRF9TVEFURV9WQUxVRV9CTE9DS0VEID0gXCJibG9ja2VkXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJuZXdcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0pWTV9USFJFQURfU1RBVEV9LlxuICpcbiAqIEEgdGhyZWFkIHRoYXQgaGFzIG5vdCB5ZXQgc3RhcnRlZCBpcyBpbiB0aGlzIHN0YXRlLlxuICovXG5leHBvcnRzLkpWTV9USFJFQURfU1RBVEVfVkFMVUVfTkVXID0gXCJuZXdcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInJ1bm5hYmxlXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9KVk1fVEhSRUFEX1NUQVRFfS5cbiAqXG4gKiBBIHRocmVhZCBleGVjdXRpbmcgaW4gdGhlIEphdmEgdmlydHVhbCBtYWNoaW5lIGlzIGluIHRoaXMgc3RhdGUuXG4gKi9cbmV4cG9ydHMuSlZNX1RIUkVBRF9TVEFURV9WQUxVRV9SVU5OQUJMRSA9IFwicnVubmFibGVcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInRlcm1pbmF0ZWRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0pWTV9USFJFQURfU1RBVEV9LlxuICpcbiAqIEEgdGhyZWFkIHRoYXQgaGFzIGV4aXRlZCBpcyBpbiB0aGlzIHN0YXRlLlxuICovXG5leHBvcnRzLkpWTV9USFJFQURfU1RBVEVfVkFMVUVfVEVSTUlOQVRFRCA9IFwidGVybWluYXRlZFwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwidGltZWRfd2FpdGluZ1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfSlZNX1RIUkVBRF9TVEFURX0uXG4gKlxuICogQSB0aHJlYWQgdGhhdCBpcyB3YWl0aW5nIGZvciBhbm90aGVyIHRocmVhZCB0byBwZXJmb3JtIGFuIGFjdGlvbiBmb3IgdXAgdG8gYSBzcGVjaWZpZWQgd2FpdGluZyB0aW1lIGlzIGluIHRoaXMgc3RhdGUuXG4gKi9cbmV4cG9ydHMuSlZNX1RIUkVBRF9TVEFURV9WQUxVRV9USU1FRF9XQUlUSU5HID0gXCJ0aW1lZF93YWl0aW5nXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJ3YWl0aW5nXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9KVk1fVEhSRUFEX1NUQVRFfS5cbiAqXG4gKiBBIHRocmVhZCB0aGF0IGlzIHdhaXRpbmcgaW5kZWZpbml0ZWx5IGZvciBhbm90aGVyIHRocmVhZCB0byBwZXJmb3JtIGEgcGFydGljdWxhciBhY3Rpb24gaXMgaW4gdGhpcyBzdGF0ZS5cbiAqL1xuZXhwb3J0cy5KVk1fVEhSRUFEX1NUQVRFX1ZBTFVFX1dBSVRJTkcgPSBcIndhaXRpbmdcIjtcbi8qKlxuICogTG9jYWwgYWRkcmVzcyBvZiB0aGUgbmV0d29yayBjb25uZWN0aW9uIC0gSVAgYWRkcmVzcyBvciBVbml4IGRvbWFpbiBzb2NrZXQgbmFtZS5cbiAqXG4gKiBAZXhhbXBsZSAxMC4xLjIuODBcbiAqIEBleGFtcGxlIC90bXAvbXkuc29ja1xuICovXG5leHBvcnRzLkFUVFJfTkVUV09SS19MT0NBTF9BRERSRVNTID0gJ25ldHdvcmsubG9jYWwuYWRkcmVzcyc7XG4vKipcbiAqIExvY2FsIHBvcnQgbnVtYmVyIG9mIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uXG4gKlxuICogQGV4YW1wbGUgNjUxMjNcbiAqL1xuZXhwb3J0cy5BVFRSX05FVFdPUktfTE9DQUxfUE9SVCA9ICduZXR3b3JrLmxvY2FsLnBvcnQnO1xuLyoqXG4gKiBQZWVyIGFkZHJlc3Mgb2YgdGhlIG5ldHdvcmsgY29ubmVjdGlvbiAtIElQIGFkZHJlc3Mgb3IgVW5peCBkb21haW4gc29ja2V0IG5hbWUuXG4gKlxuICogQGV4YW1wbGUgMTAuMS4yLjgwXG4gKiBAZXhhbXBsZSAvdG1wL215LnNvY2tcbiAqL1xuZXhwb3J0cy5BVFRSX05FVFdPUktfUEVFUl9BRERSRVNTID0gJ25ldHdvcmsucGVlci5hZGRyZXNzJztcbi8qKlxuICogUGVlciBwb3J0IG51bWJlciBvZiB0aGUgbmV0d29yayBjb25uZWN0aW9uLlxuICpcbiAqIEBleGFtcGxlIDY1MTIzXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRXT1JLX1BFRVJfUE9SVCA9ICduZXR3b3JrLnBlZXIucG9ydCc7XG4vKipcbiAqIFtPU0kgYXBwbGljYXRpb24gbGF5ZXJdKGh0dHBzOi8vd2lraXBlZGlhLm9yZy93aWtpL0FwcGxpY2F0aW9uX2xheWVyKSBvciBub24tT1NJIGVxdWl2YWxlbnQuXG4gKlxuICogQGV4YW1wbGUgYW1xcFxuICogQGV4YW1wbGUgaHR0cFxuICogQGV4YW1wbGUgbXF0dFxuICpcbiAqIEBub3RlIFRoZSB2YWx1ZSAqKlNIT1VMRCoqIGJlIG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlLlxuICovXG5leHBvcnRzLkFUVFJfTkVUV09SS19QUk9UT0NPTF9OQU1FID0gJ25ldHdvcmsucHJvdG9jb2wubmFtZSc7XG4vKipcbiAqIFRoZSBhY3R1YWwgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgdXNlZCBmb3IgbmV0d29yayBjb21tdW5pY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlIDEuMVxuICogQGV4YW1wbGUgMlxuICpcbiAqIEBub3RlIElmIHByb3RvY29sIHZlcnNpb24gaXMgc3ViamVjdCB0byBuZWdvdGlhdGlvbiAoZm9yIGV4YW1wbGUgdXNpbmcgW0FMUE5dKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MzAxLmh0bWwpKSwgdGhpcyBhdHRyaWJ1dGUgKipTSE9VTEQqKiBiZSBzZXQgdG8gdGhlIG5lZ290aWF0ZWQgdmVyc2lvbi4gSWYgdGhlIGFjdHVhbCBwcm90b2NvbCB2ZXJzaW9uIGlzIG5vdCBrbm93biwgdGhpcyBhdHRyaWJ1dGUgKipTSE9VTEQgTk9UKiogYmUgc2V0LlxuICovXG5leHBvcnRzLkFUVFJfTkVUV09SS19QUk9UT0NPTF9WRVJTSU9OID0gJ25ldHdvcmsucHJvdG9jb2wudmVyc2lvbic7XG4vKipcbiAqIFtPU0kgdHJhbnNwb3J0IGxheWVyXShodHRwczovL3dpa2lwZWRpYS5vcmcvd2lraS9UcmFuc3BvcnRfbGF5ZXIpIG9yIFtpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gbWV0aG9kXShodHRwczovL3dpa2lwZWRpYS5vcmcvd2lraS9JbnRlci1wcm9jZXNzX2NvbW11bmljYXRpb24pLlxuICpcbiAqIEBleGFtcGxlIHRjcFxuICogQGV4YW1wbGUgdWRwXG4gKlxuICogQG5vdGUgVGhlIHZhbHVlICoqU0hPVUxEKiogYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UuXG4gKlxuICogQ29uc2lkZXIgYWx3YXlzIHNldHRpbmcgdGhlIHRyYW5zcG9ydCB3aGVuIHNldHRpbmcgYSBwb3J0IG51bWJlciwgc2luY2VcbiAqIGEgcG9ydCBudW1iZXIgaXMgYW1iaWd1b3VzIHdpdGhvdXQga25vd2luZyB0aGUgdHJhbnNwb3J0LiBGb3IgZXhhbXBsZVxuICogZGlmZmVyZW50IHByb2Nlc3NlcyBjb3VsZCBiZSBsaXN0ZW5pbmcgb24gVENQIHBvcnQgMTIzNDUgYW5kIFVEUCBwb3J0IDEyMzQ1LlxuICovXG5leHBvcnRzLkFUVFJfTkVUV09SS19UUkFOU1BPUlQgPSAnbmV0d29yay50cmFuc3BvcnQnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwicGlwZVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfTkVUV09SS19UUkFOU1BPUlR9LlxuICpcbiAqIE5hbWVkIG9yIGFub255bW91cyBwaXBlLlxuICovXG5leHBvcnRzLk5FVFdPUktfVFJBTlNQT1JUX1ZBTFVFX1BJUEUgPSBcInBpcGVcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInF1aWNcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX05FVFdPUktfVFJBTlNQT1JUfS5cbiAqXG4gKiBRVUlDXG4gKi9cbmV4cG9ydHMuTkVUV09SS19UUkFOU1BPUlRfVkFMVUVfUVVJQyA9IFwicXVpY1wiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwidGNwXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9ORVRXT1JLX1RSQU5TUE9SVH0uXG4gKlxuICogVENQXG4gKi9cbmV4cG9ydHMuTkVUV09SS19UUkFOU1BPUlRfVkFMVUVfVENQID0gXCJ0Y3BcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInVkcFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfTkVUV09SS19UUkFOU1BPUlR9LlxuICpcbiAqIFVEUFxuICovXG5leHBvcnRzLk5FVFdPUktfVFJBTlNQT1JUX1ZBTFVFX1VEUCA9IFwidWRwXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJ1bml4XCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9ORVRXT1JLX1RSQU5TUE9SVH0uXG4gKlxuICogVW5peCBkb21haW4gc29ja2V0XG4gKi9cbmV4cG9ydHMuTkVUV09SS19UUkFOU1BPUlRfVkFMVUVfVU5JWCA9IFwidW5peFwiO1xuLyoqXG4gKiBbT1NJIG5ldHdvcmsgbGF5ZXJdKGh0dHBzOi8vd2lraXBlZGlhLm9yZy93aWtpL05ldHdvcmtfbGF5ZXIpIG9yIG5vbi1PU0kgZXF1aXZhbGVudC5cbiAqXG4gKiBAZXhhbXBsZSBpcHY0XG4gKiBAZXhhbXBsZSBpcHY2XG4gKlxuICogQG5vdGUgVGhlIHZhbHVlICoqU0hPVUxEKiogYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRXT1JLX1RZUEUgPSAnbmV0d29yay50eXBlJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImlwdjRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX05FVFdPUktfVFlQRX0uXG4gKlxuICogSVB2NFxuICovXG5leHBvcnRzLk5FVFdPUktfVFlQRV9WQUxVRV9JUFY0ID0gXCJpcHY0XCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJpcHY2XCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9ORVRXT1JLX1RZUEV9LlxuICpcbiAqIElQdjZcbiAqL1xuZXhwb3J0cy5ORVRXT1JLX1RZUEVfVkFMVUVfSVBWNiA9IFwiaXB2NlwiO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgaW5zdHJ1bWVudGF0aW9uIHNjb3BlIC0gKGBJbnN0cnVtZW50YXRpb25TY29wZS5OYW1lYCBpbiBPVExQKS5cbiAqXG4gKiBAZXhhbXBsZSBpby5vcGVudGVsZW1ldHJ5LmNvbnRyaWIubW9uZ29kYlxuICovXG5leHBvcnRzLkFUVFJfT1RFTF9TQ09QRV9OQU1FID0gJ290ZWwuc2NvcGUubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbnN0cnVtZW50YXRpb24gc2NvcGUgLSAoYEluc3RydW1lbnRhdGlvblNjb3BlLlZlcnNpb25gIGluIE9UTFApLlxuICpcbiAqIEBleGFtcGxlIDEuMC4wXG4gKi9cbmV4cG9ydHMuQVRUUl9PVEVMX1NDT1BFX1ZFUlNJT04gPSAnb3RlbC5zY29wZS52ZXJzaW9uJztcbi8qKlxuICogTmFtZSBvZiB0aGUgY29kZSwgZWl0aGVyIFwiT0tcIiBvciBcIkVSUk9SXCIuICoqTVVTVCBOT1QqKiBiZSBzZXQgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIFVOU0VULlxuICovXG5leHBvcnRzLkFUVFJfT1RFTF9TVEFUVVNfQ09ERSA9ICdvdGVsLnN0YXR1c19jb2RlJztcbi8qKlxuICogRW51bSB2YWx1ZSBcIkVSUk9SXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9PVEVMX1NUQVRVU19DT0RFfS5cbiAqXG4gKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICovXG5leHBvcnRzLk9URUxfU1RBVFVTX0NPREVfVkFMVUVfRVJST1IgPSBcIkVSUk9SXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJPS1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfT1RFTF9TVEFUVVNfQ09ERX0uXG4gKlxuICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yIE9wZXJhdG9yIHRvIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuZXhwb3J0cy5PVEVMX1NUQVRVU19DT0RFX1ZBTFVFX09LID0gXCJPS1wiO1xuLyoqXG4gKiBEZXNjcmlwdGlvbiBvZiB0aGUgU3RhdHVzIGlmIGl0IGhhcyBhIHZhbHVlLCBvdGhlcndpc2Ugbm90IHNldC5cbiAqXG4gKiBAZXhhbXBsZSByZXNvdXJjZSBub3QgZm91bmRcbiAqL1xuZXhwb3J0cy5BVFRSX09URUxfU1RBVFVTX0RFU0NSSVBUSU9OID0gJ290ZWwuc3RhdHVzX2Rlc2NyaXB0aW9uJztcbi8qKlxuICogU2VydmVyIGRvbWFpbiBuYW1lIGlmIGF2YWlsYWJsZSB3aXRob3V0IHJldmVyc2UgRE5TIGxvb2t1cDsgb3RoZXJ3aXNlLCBJUCBhZGRyZXNzIG9yIFVuaXggZG9tYWluIHNvY2tldCBuYW1lLlxuICpcbiAqIEBleGFtcGxlIGV4YW1wbGUuY29tXG4gKiBAZXhhbXBsZSAxMC4xLjIuODBcbiAqIEBleGFtcGxlIC90bXAvbXkuc29ja1xuICpcbiAqIEBub3RlIFdoZW4gb2JzZXJ2ZWQgZnJvbSB0aGUgY2xpZW50IHNpZGUsIGFuZCB3aGVuIGNvbW11bmljYXRpbmcgdGhyb3VnaCBhbiBpbnRlcm1lZGlhcnksIGBzZXJ2ZXIuYWRkcmVzc2AgKipTSE9VTEQqKiByZXByZXNlbnQgdGhlIHNlcnZlciBhZGRyZXNzIGJlaGluZCBhbnkgaW50ZXJtZWRpYXJpZXMsIGZvciBleGFtcGxlIHByb3hpZXMsIGlmIGl0J3MgYXZhaWxhYmxlLlxuICovXG5leHBvcnRzLkFUVFJfU0VSVkVSX0FERFJFU1MgPSAnc2VydmVyLmFkZHJlc3MnO1xuLyoqXG4gKiBTZXJ2ZXIgcG9ydCBudW1iZXIuXG4gKlxuICogQGV4YW1wbGUgODBcbiAqIEBleGFtcGxlIDgwODBcbiAqIEBleGFtcGxlIDQ0M1xuICpcbiAqIEBub3RlIFdoZW4gb2JzZXJ2ZWQgZnJvbSB0aGUgY2xpZW50IHNpZGUsIGFuZCB3aGVuIGNvbW11bmljYXRpbmcgdGhyb3VnaCBhbiBpbnRlcm1lZGlhcnksIGBzZXJ2ZXIucG9ydGAgKipTSE9VTEQqKiByZXByZXNlbnQgdGhlIHNlcnZlciBwb3J0IGJlaGluZCBhbnkgaW50ZXJtZWRpYXJpZXMsIGZvciBleGFtcGxlIHByb3hpZXMsIGlmIGl0J3MgYXZhaWxhYmxlLlxuICovXG5leHBvcnRzLkFUVFJfU0VSVkVSX1BPUlQgPSAnc2VydmVyLnBvcnQnO1xuLyoqXG4gKiBMb2dpY2FsIG5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gKlxuICogQGV4YW1wbGUgc2hvcHBpbmdjYXJ0XG4gKlxuICogQG5vdGUgKipNVVNUKiogYmUgdGhlIHNhbWUgZm9yIGFsbCBpbnN0YW5jZXMgb2YgaG9yaXpvbnRhbGx5IHNjYWxlZCBzZXJ2aWNlcy4gSWYgdGhlIHZhbHVlIHdhcyBub3Qgc3BlY2lmaWVkLCBTREtzICoqTVVTVCoqIGZhbGxiYWNrIHRvIGB1bmtub3duX3NlcnZpY2U6YCBjb25jYXRlbmF0ZWQgd2l0aCBbYHByb2Nlc3MuZXhlY3V0YWJsZS5uYW1lYF0ocHJvY2Vzcy5tZCksIGUuZy4gYHVua25vd25fc2VydmljZTpiYXNoYC4gSWYgYHByb2Nlc3MuZXhlY3V0YWJsZS5uYW1lYCBpcyBub3QgYXZhaWxhYmxlLCB0aGUgdmFsdWUgKipNVVNUKiogYmUgc2V0IHRvIGB1bmtub3duX3NlcnZpY2VgLlxuICovXG5leHBvcnRzLkFUVFJfU0VSVklDRV9OQU1FID0gJ3NlcnZpY2UubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgc2VydmljZSBBUEkgb3IgaW1wbGVtZW50YXRpb24uIFRoZSBmb3JtYXQgaXMgbm90IGRlZmluZWQgYnkgdGhlc2UgY29udmVudGlvbnMuXG4gKlxuICogQGV4YW1wbGUgMi4wLjBcbiAqIEBleGFtcGxlIGEwMWRiZWY4YVxuICovXG5leHBvcnRzLkFUVFJfU0VSVklDRV9WRVJTSU9OID0gJ3NlcnZpY2UudmVyc2lvbic7XG4vKipcbiAqIFNpZ25hbFIgSFRUUCBjb25uZWN0aW9uIGNsb3N1cmUgc3RhdHVzLlxuICpcbiAqIEBleGFtcGxlIGFwcF9zaHV0ZG93blxuICogQGV4YW1wbGUgdGltZW91dFxuICovXG5leHBvcnRzLkFUVFJfU0lHTkFMUl9DT05ORUNUSU9OX1NUQVRVUyA9ICdzaWduYWxyLmNvbm5lY3Rpb24uc3RhdHVzJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImFwcF9zaHV0ZG93blwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfU0lHTkFMUl9DT05ORUNUSU9OX1NUQVRVU30uXG4gKlxuICogVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWNhdXNlIHRoZSBhcHAgaXMgc2h1dHRpbmcgZG93bi5cbiAqL1xuZXhwb3J0cy5TSUdOQUxSX0NPTk5FQ1RJT05fU1RBVFVTX1ZBTFVFX0FQUF9TSFVURE9XTiA9IFwiYXBwX3NodXRkb3duXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJub3JtYWxfY2xvc3VyZVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfU0lHTkFMUl9DT05ORUNUSU9OX1NUQVRVU30uXG4gKlxuICogVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBub3JtYWxseS5cbiAqL1xuZXhwb3J0cy5TSUdOQUxSX0NPTk5FQ1RJT05fU1RBVFVTX1ZBTFVFX05PUk1BTF9DTE9TVVJFID0gXCJub3JtYWxfY2xvc3VyZVwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwidGltZW91dFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfU0lHTkFMUl9DT05ORUNUSU9OX1NUQVRVU30uXG4gKlxuICogVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBkdWUgdG8gYSB0aW1lb3V0LlxuICovXG5leHBvcnRzLlNJR05BTFJfQ09OTkVDVElPTl9TVEFUVVNfVkFMVUVfVElNRU9VVCA9IFwidGltZW91dFwiO1xuLyoqXG4gKiBbU2lnbmFsUiB0cmFuc3BvcnQgdHlwZV0oaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9hc3BuZXRjb3JlL2Jsb2IvbWFpbi9zcmMvU2lnbmFsUi9kb2NzL3NwZWNzL1RyYW5zcG9ydFByb3RvY29scy5tZClcbiAqXG4gKiBAZXhhbXBsZSB3ZWJfc29ja2V0c1xuICogQGV4YW1wbGUgbG9uZ19wb2xsaW5nXG4gKi9cbmV4cG9ydHMuQVRUUl9TSUdOQUxSX1RSQU5TUE9SVCA9ICdzaWduYWxyLnRyYW5zcG9ydCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJsb25nX3BvbGxpbmdcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX1NJR05BTFJfVFJBTlNQT1JUfS5cbiAqXG4gKiBMb25nUG9sbGluZyBwcm90b2NvbFxuICovXG5leHBvcnRzLlNJR05BTFJfVFJBTlNQT1JUX1ZBTFVFX0xPTkdfUE9MTElORyA9IFwibG9uZ19wb2xsaW5nXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJzZXJ2ZXJfc2VudF9ldmVudHNcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX1NJR05BTFJfVFJBTlNQT1JUfS5cbiAqXG4gKiBTZXJ2ZXJTZW50RXZlbnRzIHByb3RvY29sXG4gKi9cbmV4cG9ydHMuU0lHTkFMUl9UUkFOU1BPUlRfVkFMVUVfU0VSVkVSX1NFTlRfRVZFTlRTID0gXCJzZXJ2ZXJfc2VudF9ldmVudHNcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIndlYl9zb2NrZXRzXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9TSUdOQUxSX1RSQU5TUE9SVH0uXG4gKlxuICogV2ViU29ja2V0cyBwcm90b2NvbFxuICovXG5leHBvcnRzLlNJR05BTFJfVFJBTlNQT1JUX1ZBTFVFX1dFQl9TT0NLRVRTID0gXCJ3ZWJfc29ja2V0c1wiO1xuLyoqXG4gKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHRlbGVtZXRyeSBTREsuXG4gKi9cbmV4cG9ydHMuQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFID0gJ3RlbGVtZXRyeS5zZGsubGFuZ3VhZ2UnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiY3BwXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFfS5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX0NQUCA9IFwiY3BwXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJkb3RuZXRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX1RFTEVNRVRSWV9TREtfTEFOR1VBR0V9LlxuICovXG5leHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfRE9UTkVUID0gXCJkb3RuZXRcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcImVybGFuZ1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRX0uXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9FUkxBTkcgPSBcImVybGFuZ1wiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiZ29cIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX1RFTEVNRVRSWV9TREtfTEFOR1VBR0V9LlxuICovXG5leHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfR08gPSBcImdvXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJqYXZhXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFfS5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX0pBVkEgPSBcImphdmFcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIm5vZGVqc1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRX0uXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9OT0RFSlMgPSBcIm5vZGVqc1wiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwicGhwXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFfS5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX1BIUCA9IFwicGhwXCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJweXRob25cIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX1RFTEVNRVRSWV9TREtfTEFOR1VBR0V9LlxuICovXG5leHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfUFlUSE9OID0gXCJweXRob25cIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcInJ1YnlcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX1RFTEVNRVRSWV9TREtfTEFOR1VBR0V9LlxuICovXG5leHBvcnRzLlRFTEVNRVRSWV9TREtfTEFOR1VBR0VfVkFMVUVfUlVCWSA9IFwicnVieVwiO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwicnVzdFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRX0uXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9SVVNUID0gXCJydXN0XCI7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJzd2lmdFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRX0uXG4gKi9cbmV4cG9ydHMuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9TV0lGVCA9IFwic3dpZnRcIjtcbi8qKlxuICogRW51bSB2YWx1ZSBcIndlYmpzXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFfS5cbiAqL1xuZXhwb3J0cy5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX1dFQkpTID0gXCJ3ZWJqc1wiO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdGVsZW1ldHJ5IFNESyBhcyBkZWZpbmVkIGFib3ZlLlxuICpcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnlcbiAqXG4gKiBAbm90ZSBUaGUgT3BlblRlbGVtZXRyeSBTREsgKipNVVNUKiogc2V0IHRoZSBgdGVsZW1ldHJ5LnNkay5uYW1lYCBhdHRyaWJ1dGUgdG8gYG9wZW50ZWxlbWV0cnlgLlxuICogSWYgYW5vdGhlciBTREssIGxpa2UgYSBmb3JrIG9yIGEgdmVuZG9yLXByb3ZpZGVkIGltcGxlbWVudGF0aW9uLCBpcyB1c2VkLCB0aGlzIFNESyAqKk1VU1QqKiBzZXQgdGhlXG4gKiBgdGVsZW1ldHJ5LnNkay5uYW1lYCBhdHRyaWJ1dGUgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBvciBtb2R1bGUgbmFtZSBvZiB0aGlzIFNESydzIG1haW4gZW50cnkgcG9pbnRcbiAqIG9yIGFub3RoZXIgc3VpdGFibGUgaWRlbnRpZmllciBkZXBlbmRpbmcgb24gdGhlIGxhbmd1YWdlLlxuICogVGhlIGlkZW50aWZpZXIgYG9wZW50ZWxlbWV0cnlgIGlzIHJlc2VydmVkIGFuZCAqKk1VU1QgTk9UKiogYmUgdXNlZCBpbiB0aGlzIGNhc2UuXG4gKiBBbGwgY3VzdG9tIGlkZW50aWZpZXJzICoqU0hPVUxEKiogYmUgc3RhYmxlIGFjcm9zcyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgYW4gaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydHMuQVRUUl9URUxFTUVUUllfU0RLX05BTUUgPSAndGVsZW1ldHJ5LnNkay5uYW1lJztcbi8qKlxuICogVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSB0ZWxlbWV0cnkgU0RLLlxuICpcbiAqIEBleGFtcGxlIDEuMi4zXG4gKi9cbmV4cG9ydHMuQVRUUl9URUxFTUVUUllfU0RLX1ZFUlNJT04gPSAndGVsZW1ldHJ5LnNkay52ZXJzaW9uJztcbi8qKlxuICogVGhlIFtVUkkgZnJhZ21lbnRdKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzOTg2I3NlY3Rpb24tMy41KSBjb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZSBTZW1Db252XG4gKi9cbmV4cG9ydHMuQVRUUl9VUkxfRlJBR01FTlQgPSAndXJsLmZyYWdtZW50Jztcbi8qKlxuICogQWJzb2x1dGUgVVJMIGRlc2NyaWJpbmcgYSBuZXR3b3JrIHJlc291cmNlIGFjY29yZGluZyB0byBbUkZDMzk4Nl0oaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzM5ODYpXG4gKlxuICogQGV4YW1wbGUgaHR0cHM6Ly93d3cuZm9vLmJhci9zZWFyY2g/cT1PcGVuVGVsZW1ldHJ5I1NlbUNvbnZcbiAqIEBleGFtcGxlIC8vbG9jYWxob3N0XG4gKlxuICogQG5vdGUgRm9yIG5ldHdvcmsgY2FsbHMsIFVSTCB1c3VhbGx5IGhhcyBgc2NoZW1lOi8vaG9zdFs6cG9ydF1bcGF0aF1bP3F1ZXJ5XVsjZnJhZ21lbnRdYCBmb3JtYXQsIHdoZXJlIHRoZSBmcmFnbWVudFxuICogaXMgbm90IHRyYW5zbWl0dGVkIG92ZXIgSFRUUCwgYnV0IGlmIGl0IGlzIGtub3duLCBpdCAqKlNIT1VMRCoqIGJlIGluY2x1ZGVkIG5ldmVydGhlbGVzcy5cbiAqXG4gKiBgdXJsLmZ1bGxgICoqTVVTVCBOT1QqKiBjb250YWluIGNyZWRlbnRpYWxzIHBhc3NlZCB2aWEgVVJMIGluIGZvcm0gb2YgYGh0dHBzOi8vdXNlcm5hbWU6cGFzc3dvcmRAd3d3LmV4YW1wbGUuY29tL2AuXG4gKiBJbiBzdWNoIGNhc2UgdXNlcm5hbWUgYW5kIHBhc3N3b3JkICoqU0hPVUxEKiogYmUgcmVkYWN0ZWQgYW5kIGF0dHJpYnV0ZSdzIHZhbHVlICoqU0hPVUxEKiogYmUgYGh0dHBzOi8vUkVEQUNURUQ6UkVEQUNURURAd3d3LmV4YW1wbGUuY29tL2AuXG4gKlxuICogYHVybC5mdWxsYCAqKlNIT1VMRCoqIGNhcHR1cmUgdGhlIGFic29sdXRlIFVSTCB3aGVuIGl0IGlzIGF2YWlsYWJsZSAob3IgY2FuIGJlIHJlY29uc3RydWN0ZWQpLlxuICpcbiAqIFNlbnNpdGl2ZSBjb250ZW50IHByb3ZpZGVkIGluIGB1cmwuZnVsbGAgKipTSE9VTEQqKiBiZSBzY3J1YmJlZCB3aGVuIGluc3RydW1lbnRhdGlvbnMgY2FuIGlkZW50aWZ5IGl0LlxuICpcbiAqXG4gKiBRdWVyeSBzdHJpbmcgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGtleXMgKipTSE9VTEQqKiBiZSByZWRhY3RlZCBieSBkZWZhdWx0IGFuZCByZXBsYWNlZCBieSB0aGVcbiAqIHZhbHVlIGBSRURBQ1RFRGA6XG4gKlxuICogICAtIFtgQVdTQWNjZXNzS2V5SWRgXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9SRVNUQXV0aGVudGljYXRpb24uaHRtbCNSRVNUQXV0aGVudGljYXRpb25RdWVyeVN0cmluZ0F1dGgpXG4gKiAgIC0gW2BTaWduYXR1cmVgXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9SRVNUQXV0aGVudGljYXRpb24uaHRtbCNSRVNUQXV0aGVudGljYXRpb25RdWVyeVN0cmluZ0F1dGgpXG4gKiAgIC0gW2BzaWdgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS1zYXMtb3ZlcnZpZXcjc2FzLXRva2VuKVxuICogICAtIFtgWC1Hb29nLVNpZ25hdHVyZWBdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9zdG9yYWdlL2RvY3MvYWNjZXNzLWNvbnRyb2wvc2lnbmVkLXVybHMpXG4gKlxuICogVGhpcyBsaXN0IGlzIHN1YmplY3QgdG8gY2hhbmdlIG92ZXIgdGltZS5cbiAqXG4gKiBXaGVuIGEgcXVlcnkgc3RyaW5nIHZhbHVlIGlzIHJlZGFjdGVkLCB0aGUgcXVlcnkgc3RyaW5nIGtleSAqKlNIT1VMRCoqIHN0aWxsIGJlIHByZXNlcnZlZCwgZS5nLlxuICogYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3BhdGg/Y29sb3I9Ymx1ZSZzaWc9UkVEQUNURURgLlxuICovXG5leHBvcnRzLkFUVFJfVVJMX0ZVTEwgPSAndXJsLmZ1bGwnO1xuLyoqXG4gKiBUaGUgW1VSSSBwYXRoXShodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzk4NiNzZWN0aW9uLTMuMykgY29tcG9uZW50XG4gKlxuICogQGV4YW1wbGUgL3NlYXJjaFxuICpcbiAqIEBub3RlIFNlbnNpdGl2ZSBjb250ZW50IHByb3ZpZGVkIGluIGB1cmwucGF0aGAgKipTSE9VTEQqKiBiZSBzY3J1YmJlZCB3aGVuIGluc3RydW1lbnRhdGlvbnMgY2FuIGlkZW50aWZ5IGl0LlxuICovXG5leHBvcnRzLkFUVFJfVVJMX1BBVEggPSAndXJsLnBhdGgnO1xuLyoqXG4gKiBUaGUgW1VSSSBxdWVyeV0oaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzM5ODYjc2VjdGlvbi0zLjQpIGNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlIHE9T3BlblRlbGVtZXRyeVxuICpcbiAqIEBub3RlIFNlbnNpdGl2ZSBjb250ZW50IHByb3ZpZGVkIGluIGB1cmwucXVlcnlgICoqU0hPVUxEKiogYmUgc2NydWJiZWQgd2hlbiBpbnN0cnVtZW50YXRpb25zIGNhbiBpZGVudGlmeSBpdC5cbiAqXG4gKlxuICogUXVlcnkgc3RyaW5nIHZhbHVlcyBmb3IgdGhlIGZvbGxvd2luZyBrZXlzICoqU0hPVUxEKiogYmUgcmVkYWN0ZWQgYnkgZGVmYXVsdCBhbmQgcmVwbGFjZWQgYnkgdGhlIHZhbHVlIGBSRURBQ1RFRGA6XG4gKlxuICogICAtIFtgQVdTQWNjZXNzS2V5SWRgXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9SRVNUQXV0aGVudGljYXRpb24uaHRtbCNSRVNUQXV0aGVudGljYXRpb25RdWVyeVN0cmluZ0F1dGgpXG4gKiAgIC0gW2BTaWduYXR1cmVgXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9SRVNUQXV0aGVudGljYXRpb24uaHRtbCNSRVNUQXV0aGVudGljYXRpb25RdWVyeVN0cmluZ0F1dGgpXG4gKiAgIC0gW2BzaWdgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vYXp1cmUvc3RvcmFnZS9jb21tb24vc3RvcmFnZS1zYXMtb3ZlcnZpZXcjc2FzLXRva2VuKVxuICogICAtIFtgWC1Hb29nLVNpZ25hdHVyZWBdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9zdG9yYWdlL2RvY3MvYWNjZXNzLWNvbnRyb2wvc2lnbmVkLXVybHMpXG4gKlxuICogVGhpcyBsaXN0IGlzIHN1YmplY3QgdG8gY2hhbmdlIG92ZXIgdGltZS5cbiAqXG4gKiBXaGVuIGEgcXVlcnkgc3RyaW5nIHZhbHVlIGlzIHJlZGFjdGVkLCB0aGUgcXVlcnkgc3RyaW5nIGtleSAqKlNIT1VMRCoqIHN0aWxsIGJlIHByZXNlcnZlZCwgZS5nLlxuICogYHE9T3BlblRlbGVtZXRyeSZzaWc9UkVEQUNURURgLlxuICovXG5leHBvcnRzLkFUVFJfVVJMX1FVRVJZID0gJ3VybC5xdWVyeSc7XG4vKipcbiAqIFRoZSBbVVJJIHNjaGVtZV0oaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzM5ODYjc2VjdGlvbi0zLjEpIGNvbXBvbmVudCBpZGVudGlmeWluZyB0aGUgdXNlZCBwcm90b2NvbC5cbiAqXG4gKiBAZXhhbXBsZSBodHRwc1xuICogQGV4YW1wbGUgZnRwXG4gKiBAZXhhbXBsZSB0ZWxuZXRcbiAqL1xuZXhwb3J0cy5BVFRSX1VSTF9TQ0hFTUUgPSAndXJsLnNjaGVtZSc7XG4vKipcbiAqIFZhbHVlIG9mIHRoZSBbSFRUUCBVc2VyLUFnZW50XShodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI2ZpZWxkLnVzZXItYWdlbnQpIGhlYWRlciBzZW50IGJ5IHRoZSBjbGllbnQuXG4gKlxuICogQGV4YW1wbGUgQ0VSTi1MaW5lTW9kZS8yLjE1IGxpYnd3dy8yLjE3YjNcbiAqIEBleGFtcGxlIE1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTRfN18xIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xNC4xLjIgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjFcbiAqIEBleGFtcGxlIFlvdXJBcHAvMS4wLjAgZ3JwYy1qYXZhLW9raHR0cC8xLjI3LjJcbiAqL1xuZXhwb3J0cy5BVFRSX1VTRVJfQUdFTlRfT1JJR0lOQUwgPSAndXNlcl9hZ2VudC5vcmlnaW5hbCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFibGVfYXR0cmlidXRlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTUVUUklDX1NJR05BTFJfU0VSVkVSX0FDVElWRV9DT05ORUNUSU9OUyA9IGV4cG9ydHMuTUVUUklDX0tFU1RSRUxfVVBHUkFERURfQ09OTkVDVElPTlMgPSBleHBvcnRzLk1FVFJJQ19LRVNUUkVMX1RMU19IQU5EU0hBS0VfRFVSQVRJT04gPSBleHBvcnRzLk1FVFJJQ19LRVNUUkVMX1JFSkVDVEVEX0NPTk5FQ1RJT05TID0gZXhwb3J0cy5NRVRSSUNfS0VTVFJFTF9RVUVVRURfUkVRVUVTVFMgPSBleHBvcnRzLk1FVFJJQ19LRVNUUkVMX1FVRVVFRF9DT05ORUNUSU9OUyA9IGV4cG9ydHMuTUVUUklDX0tFU1RSRUxfQ09OTkVDVElPTl9EVVJBVElPTiA9IGV4cG9ydHMuTUVUUklDX0tFU1RSRUxfQUNUSVZFX1RMU19IQU5EU0hBS0VTID0gZXhwb3J0cy5NRVRSSUNfS0VTVFJFTF9BQ1RJVkVfQ09OTkVDVElPTlMgPSBleHBvcnRzLk1FVFJJQ19KVk1fVEhSRUFEX0NPVU5UID0gZXhwb3J0cy5NRVRSSUNfSlZNX01FTU9SWV9VU0VEX0FGVEVSX0xBU1RfR0MgPSBleHBvcnRzLk1FVFJJQ19KVk1fTUVNT1JZX1VTRUQgPSBleHBvcnRzLk1FVFJJQ19KVk1fTUVNT1JZX0xJTUlUID0gZXhwb3J0cy5NRVRSSUNfSlZNX01FTU9SWV9DT01NSVRURUQgPSBleHBvcnRzLk1FVFJJQ19KVk1fR0NfRFVSQVRJT04gPSBleHBvcnRzLk1FVFJJQ19KVk1fQ1BVX1RJTUUgPSBleHBvcnRzLk1FVFJJQ19KVk1fQ1BVX1JFQ0VOVF9VVElMSVpBVElPTiA9IGV4cG9ydHMuTUVUUklDX0pWTV9DUFVfQ09VTlQgPSBleHBvcnRzLk1FVFJJQ19KVk1fQ0xBU1NfVU5MT0FERUQgPSBleHBvcnRzLk1FVFJJQ19KVk1fQ0xBU1NfTE9BREVEID0gZXhwb3J0cy5NRVRSSUNfSlZNX0NMQVNTX0NPVU5UID0gZXhwb3J0cy5NRVRSSUNfSFRUUF9TRVJWRVJfUkVRVUVTVF9EVVJBVElPTiA9IGV4cG9ydHMuTUVUUklDX0hUVFBfQ0xJRU5UX1JFUVVFU1RfRFVSQVRJT04gPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfVElNRVJfQ09VTlQgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfVEhSRUFEX1BPT0xfV09SS19JVEVNX0NPVU5UID0gZXhwb3J0cy5NRVRSSUNfRE9UTkVUX1RIUkVBRF9QT09MX1RIUkVBRF9DT1VOVCA9IGV4cG9ydHMuTUVUUklDX0RPVE5FVF9USFJFQURfUE9PTF9RVUVVRV9MRU5HVEggPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfUFJPQ0VTU19NRU1PUllfV09SS0lOR19TRVQgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfUFJPQ0VTU19DUFVfVElNRSA9IGV4cG9ydHMuTUVUUklDX0RPVE5FVF9QUk9DRVNTX0NQVV9DT1VOVCA9IGV4cG9ydHMuTUVUUklDX0RPVE5FVF9NT05JVE9SX0xPQ0tfQ09OVEVOVElPTlMgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfSklUX0NPTVBJTEVEX01FVEhPRFMgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfSklUX0NPTVBJTEVEX0lMX1NJWkUgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfSklUX0NPTVBJTEFUSU9OX1RJTUUgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfR0NfUEFVU0VfVElNRSA9IGV4cG9ydHMuTUVUUklDX0RPVE5FVF9HQ19MQVNUX0NPTExFQ1RJT05fTUVNT1JZX0NPTU1JVFRFRF9TSVpFID0gZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0dDX0xBU1RfQ09MTEVDVElPTl9IRUFQX1NJWkUgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfR0NfTEFTVF9DT0xMRUNUSU9OX0hFQVBfRlJBR01FTlRBVElPTl9TSVpFID0gZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0dDX0hFQVBfVE9UQUxfQUxMT0NBVEVEID0gZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0dDX0NPTExFQ1RJT05TID0gZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0VYQ0VQVElPTlMgPSBleHBvcnRzLk1FVFJJQ19ET1RORVRfQVNTRU1CTFlfQ09VTlQgPSBleHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfT1BFUkFUSU9OX0RVUkFUSU9OID0gZXhwb3J0cy5NRVRSSUNfQVNQTkVUQ09SRV9ST1VUSU5HX01BVENIX0FUVEVNUFRTID0gZXhwb3J0cy5NRVRSSUNfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFUVVFU1RTID0gZXhwb3J0cy5NRVRSSUNfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1JFUVVFU1RfTEVBU0VfRFVSQVRJT04gPSBleHBvcnRzLk1FVFJJQ19BU1BORVRDT1JFX1JBVEVfTElNSVRJTkdfUkVRVUVTVF9USU1FX0lOX1FVRVVFID0gZXhwb3J0cy5NRVRSSUNfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1FVRVVFRF9SRVFVRVNUUyA9IGV4cG9ydHMuTUVUUklDX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19BQ1RJVkVfUkVRVUVTVF9MRUFTRVMgPSBleHBvcnRzLk1FVFJJQ19BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTlMgPSB2b2lkIDA7XG5leHBvcnRzLk1FVFJJQ19TSUdOQUxSX1NFUlZFUl9DT05ORUNUSU9OX0RVUkFUSU9OID0gdm9pZCAwO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBETyBOT1QgRURJVCwgdGhpcyBpcyBhbiBBdXRvLWdlbmVyYXRlZCBmaWxlIGZyb20gc2NyaXB0cy9zZW1jb252L3RlbXBsYXRlcy9yZWdpc3Rlci9zdGFibGUvbWV0cmljcy50cy5qMlxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIE51bWJlciBvZiBleGNlcHRpb25zIGNhdWdodCBieSBleGNlcHRpb24gaGFuZGxpbmcgbWlkZGxld2FyZS5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuRGlhZ25vc3RpY3NgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19BU1BORVRDT1JFX0RJQUdOT1NUSUNTX0VYQ0VQVElPTlMgPSAnYXNwbmV0Y29yZS5kaWFnbm9zdGljcy5leGNlcHRpb25zJztcbi8qKlxuICogTnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIHNlcnZlciB0aGF0IGhvbGQgYSByYXRlIGxpbWl0aW5nIGxlYXNlLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5SYXRlTGltaXRpbmdgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19BU1BORVRDT1JFX1JBVEVfTElNSVRJTkdfQUNUSVZFX1JFUVVFU1RfTEVBU0VTID0gJ2FzcG5ldGNvcmUucmF0ZV9saW1pdGluZy5hY3RpdmVfcmVxdWVzdF9sZWFzZXMnO1xuLyoqXG4gKiBOdW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhcmUgY3VycmVudGx5IHF1ZXVlZCwgd2FpdGluZyB0byBhY3F1aXJlIGEgcmF0ZSBsaW1pdGluZyBsZWFzZS5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuUmF0ZUxpbWl0aW5nYDsgQWRkZWQgaW46IEFTUC5ORVQgQ29yZSA4LjBcbiAqL1xuZXhwb3J0cy5NRVRSSUNfQVNQTkVUQ09SRV9SQVRFX0xJTUlUSU5HX1FVRVVFRF9SRVFVRVNUUyA9ICdhc3BuZXRjb3JlLnJhdGVfbGltaXRpbmcucXVldWVkX3JlcXVlc3RzJztcbi8qKlxuICogVGhlIHRpbWUgdGhlIHJlcXVlc3Qgc3BlbnQgaW4gYSBxdWV1ZSB3YWl0aW5nIHRvIGFjcXVpcmUgYSByYXRlIGxpbWl0aW5nIGxlYXNlLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5SYXRlTGltaXRpbmdgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19BU1BORVRDT1JFX1JBVEVfTElNSVRJTkdfUkVRVUVTVF9USU1FX0lOX1FVRVVFID0gJ2FzcG5ldGNvcmUucmF0ZV9saW1pdGluZy5yZXF1ZXN0LnRpbWVfaW5fcXVldWUnO1xuLyoqXG4gKiBUaGUgZHVyYXRpb24gb2YgcmF0ZSBsaW1pdGluZyBsZWFzZSBoZWxkIGJ5IHJlcXVlc3RzIG9uIHRoZSBzZXJ2ZXIuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYE1pY3Jvc29mdC5Bc3BOZXRDb3JlLlJhdGVMaW1pdGluZ2A7IEFkZGVkIGluOiBBU1AuTkVUIENvcmUgOC4wXG4gKi9cbmV4cG9ydHMuTUVUUklDX0FTUE5FVENPUkVfUkFURV9MSU1JVElOR19SRVFVRVNUX0xFQVNFX0RVUkFUSU9OID0gJ2FzcG5ldGNvcmUucmF0ZV9saW1pdGluZy5yZXF1ZXN0X2xlYXNlLmR1cmF0aW9uJztcbi8qKlxuICogTnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgdHJpZWQgdG8gYWNxdWlyZSBhIHJhdGUgbGltaXRpbmcgbGVhc2UuXG4gKlxuICogQG5vdGUgUmVxdWVzdHMgY291bGQgYmU6XG4gKlxuICogICAtIFJlamVjdGVkIGJ5IGdsb2JhbCBvciBlbmRwb2ludCByYXRlIGxpbWl0aW5nIHBvbGljaWVzXG4gKiAgIC0gQ2FuY2VsZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxlYXNlLlxuICpcbiAqIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5SYXRlTGltaXRpbmdgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19BU1BORVRDT1JFX1JBVEVfTElNSVRJTkdfUkVRVUVTVFMgPSAnYXNwbmV0Y29yZS5yYXRlX2xpbWl0aW5nLnJlcXVlc3RzJztcbi8qKlxuICogTnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgd2VyZSBhdHRlbXB0ZWQgdG8gYmUgbWF0Y2hlZCB0byBhbiBlbmRwb2ludC5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuUm91dGluZ2A7IEFkZGVkIGluOiBBU1AuTkVUIENvcmUgOC4wXG4gKi9cbmV4cG9ydHMuTUVUUklDX0FTUE5FVENPUkVfUk9VVElOR19NQVRDSF9BVFRFTVBUUyA9ICdhc3BuZXRjb3JlLnJvdXRpbmcubWF0Y2hfYXR0ZW1wdHMnO1xuLyoqXG4gKiBEdXJhdGlvbiBvZiBkYXRhYmFzZSBjbGllbnQgb3BlcmF0aW9ucy5cbiAqXG4gKiBAbm90ZSBCYXRjaCBvcGVyYXRpb25zICoqU0hPVUxEKiogYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfT1BFUkFUSU9OX0RVUkFUSU9OID0gJ2RiLmNsaWVudC5vcGVyYXRpb24uZHVyYXRpb24nO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIC5ORVQgYXNzZW1ibGllcyB0aGF0IGFyZSBjdXJyZW50bHkgbG9hZGVkLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BBcHBEb21haW4uQ3VycmVudERvbWFpbi5HZXRBc3NlbWJsaWVzKCkuTGVuZ3RoYF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLmFwcGRvbWFpbi5nZXRhc3NlbWJsaWVzKS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0FTU0VNQkxZX0NPVU5UID0gJ2RvdG5ldC5hc3NlbWJseS5jb3VudCc7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgZXhjZXB0aW9ucyB0aGF0IGhhdmUgYmVlbiB0aHJvd24gaW4gbWFuYWdlZCBjb2RlLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNvdW50aW5nIGNhbGxzIHRvIFtgQXBwRG9tYWluLkN1cnJlbnREb21haW4uRmlyc3RDaGFuY2VFeGNlcHRpb25gXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZG90bmV0L2FwaS9zeXN0ZW0uYXBwZG9tYWluLmZpcnN0Y2hhbmNlZXhjZXB0aW9uKS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0VYQ0VQVElPTlMgPSAnZG90bmV0LmV4Y2VwdGlvbnMnO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGdhcmJhZ2UgY29sbGVjdGlvbnMgdGhhdCBoYXZlIG9jY3VycmVkIHNpbmNlIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHVzZXMgdGhlIFtgR0MuQ29sbGVjdGlvbkNvdW50KGludCBnZW5lcmF0aW9uKWBdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS5nYy5jb2xsZWN0aW9uY291bnQpIEFQSSB0byBjYWxjdWxhdGUgZXhjbHVzaXZlIGNvbGxlY3Rpb25zIHBlciBnZW5lcmF0aW9uLlxuICovXG5leHBvcnRzLk1FVFJJQ19ET1RORVRfR0NfQ09MTEVDVElPTlMgPSAnZG90bmV0LmdjLmNvbGxlY3Rpb25zJztcbi8qKlxuICogVGhlICphcHByb3hpbWF0ZSogbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBvbiB0aGUgbWFuYWdlZCBHQyBoZWFwIHNpbmNlIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLiBUaGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgaW5jbHVkZSBhbnkgbmF0aXZlIGFsbG9jYXRpb25zLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BHQy5HZXRUb3RhbEFsbG9jYXRlZEJ5dGVzKClgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZG90bmV0L2FwaS9zeXN0ZW0uZ2MuZ2V0dG90YWxhbGxvY2F0ZWRieXRlcykuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RPVE5FVF9HQ19IRUFQX1RPVEFMX0FMTE9DQVRFRCA9ICdkb3RuZXQuZ2MuaGVhcC50b3RhbF9hbGxvY2F0ZWQnO1xuLyoqXG4gKiBUaGUgaGVhcCBmcmFnbWVudGF0aW9uLCBhcyBvYnNlcnZlZCBkdXJpbmcgdGhlIGxhdGVzdCBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYFN5c3RlbS5SdW50aW1lYDsgQWRkZWQgaW46IC5ORVQgOS4wLlxuICogVGhpcyBtZXRyaWMgcmVwb3J0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgY2FsbGluZyBbYEdDLkdldEdDTWVtb3J5SW5mbygpLkdlbmVyYXRpb25JbmZvLkZyYWdtZW50YXRpb25BZnRlckJ5dGVzYF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLmdjZ2VuZXJhdGlvbmluZm8uZnJhZ21lbnRhdGlvbmFmdGVyYnl0ZXMpLlxuICovXG5leHBvcnRzLk1FVFJJQ19ET1RORVRfR0NfTEFTVF9DT0xMRUNUSU9OX0hFQVBfRlJBR01FTlRBVElPTl9TSVpFID0gJ2RvdG5ldC5nYy5sYXN0X2NvbGxlY3Rpb24uaGVhcC5mcmFnbWVudGF0aW9uLnNpemUnO1xuLyoqXG4gKiBUaGUgbWFuYWdlZCBHQyBoZWFwIHNpemUgKGluY2x1ZGluZyBmcmFnbWVudGF0aW9uKSwgYXMgb2JzZXJ2ZWQgZHVyaW5nIHRoZSBsYXRlc3QgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BHQy5HZXRHQ01lbW9yeUluZm8oKS5HZW5lcmF0aW9uSW5mby5TaXplQWZ0ZXJCeXRlc2BdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS5nY2dlbmVyYXRpb25pbmZvLnNpemVhZnRlcmJ5dGVzKS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX0dDX0xBU1RfQ09MTEVDVElPTl9IRUFQX1NJWkUgPSAnZG90bmV0LmdjLmxhc3RfY29sbGVjdGlvbi5oZWFwLnNpemUnO1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIGNvbW1pdHRlZCB2aXJ0dWFsIG1lbW9yeSBpbiB1c2UgYnkgdGhlIC5ORVQgR0MsIGFzIG9ic2VydmVkIGR1cmluZyB0aGUgbGF0ZXN0IGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgU3lzdGVtLlJ1bnRpbWVgOyBBZGRlZCBpbjogLk5FVCA5LjAuXG4gKiBUaGlzIG1ldHJpYyByZXBvcnRzIHRoZSBzYW1lIHZhbHVlcyBhcyBjYWxsaW5nIFtgR0MuR2V0R0NNZW1vcnlJbmZvKCkuVG90YWxDb21taXR0ZWRCeXRlc2BdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS5nY21lbW9yeWluZm8udG90YWxjb21taXR0ZWRieXRlcykuIENvbW1pdHRlZCB2aXJ0dWFsIG1lbW9yeSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGhlYXAgc2l6ZSBiZWNhdXNlIGl0IGluY2x1ZGVzIGJvdGggbWVtb3J5IGZvciBzdG9yaW5nIGV4aXN0aW5nIG9iamVjdHMgKHRoZSBoZWFwIHNpemUpIGFuZCBzb21lIGV4dHJhIG1lbW9yeSB0aGF0IGlzIHJlYWR5IHRvIGhhbmRsZSBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cyBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnRzLk1FVFJJQ19ET1RORVRfR0NfTEFTVF9DT0xMRUNUSU9OX01FTU9SWV9DT01NSVRURURfU0laRSA9ICdkb3RuZXQuZ2MubGFzdF9jb2xsZWN0aW9uLm1lbW9yeS5jb21taXR0ZWRfc2l6ZSc7XG4vKipcbiAqIFRoZSB0b3RhbCBhbW91bnQgb2YgdGltZSBwYXVzZWQgaW4gR0Mgc2luY2UgdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYFN5c3RlbS5SdW50aW1lYDsgQWRkZWQgaW46IC5ORVQgOS4wLlxuICogVGhpcyBtZXRyaWMgcmVwb3J0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgY2FsbGluZyBbYEdDLkdldFRvdGFsUGF1c2VEdXJhdGlvbigpYF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLmdjLmdldHRvdGFscGF1c2VkdXJhdGlvbikuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RPVE5FVF9HQ19QQVVTRV9USU1FID0gJ2RvdG5ldC5nYy5wYXVzZS50aW1lJztcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBKSVQgY29tcGlsZXIgaGFzIHNwZW50IGNvbXBpbGluZyBtZXRob2RzIHNpbmNlIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BKaXRJbmZvLkdldENvbXBpbGF0aW9uVGltZSgpYF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLnJ1bnRpbWUuaml0aW5mby5nZXRjb21waWxhdGlvbnRpbWUpLlxuICovXG5leHBvcnRzLk1FVFJJQ19ET1RORVRfSklUX0NPTVBJTEFUSU9OX1RJTUUgPSAnZG90bmV0LmppdC5jb21waWxhdGlvbi50aW1lJztcbi8qKlxuICogQ291bnQgb2YgYnl0ZXMgb2YgaW50ZXJtZWRpYXRlIGxhbmd1YWdlIHRoYXQgaGF2ZSBiZWVuIGNvbXBpbGVkIHNpbmNlIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BKaXRJbmZvLkdldENvbXBpbGVkSUxCeXRlcygpYF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLnJ1bnRpbWUuaml0aW5mby5nZXRjb21waWxlZGlsYnl0ZXMpLlxuICovXG5leHBvcnRzLk1FVFJJQ19ET1RORVRfSklUX0NPTVBJTEVEX0lMX1NJWkUgPSAnZG90bmV0LmppdC5jb21waWxlZF9pbC5zaXplJztcbi8qKlxuICogVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgSklUIGNvbXBpbGVyIChyZSljb21waWxlZCBtZXRob2RzIHNpbmNlIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BKaXRJbmZvLkdldENvbXBpbGVkTWV0aG9kQ291bnQoKWBdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS5ydW50aW1lLmppdGluZm8uZ2V0Y29tcGlsZWRtZXRob2Rjb3VudCkuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RPVE5FVF9KSVRfQ09NUElMRURfTUVUSE9EUyA9ICdkb3RuZXQuaml0LmNvbXBpbGVkX21ldGhvZHMnO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZXJlIHdhcyBjb250ZW50aW9uIHdoZW4gdHJ5aW5nIHRvIGFjcXVpcmUgYSBtb25pdG9yIGxvY2sgc2luY2UgdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYFN5c3RlbS5SdW50aW1lYDsgQWRkZWQgaW46IC5ORVQgOS4wLlxuICogVGhpcyBtZXRyaWMgcmVwb3J0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgY2FsbGluZyBbYE1vbml0b3IuTG9ja0NvbnRlbnRpb25Db3VudGBdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS50aHJlYWRpbmcubW9uaXRvci5sb2NrY29udGVudGlvbmNvdW50KS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX01PTklUT1JfTE9DS19DT05URU5USU9OUyA9ICdkb3RuZXQubW9uaXRvci5sb2NrX2NvbnRlbnRpb25zJztcbi8qKlxuICogVGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGF2YWlsYWJsZSB0byB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgU3lzdGVtLlJ1bnRpbWVgOyBBZGRlZCBpbjogLk5FVCA5LjAuXG4gKiBUaGlzIG1ldHJpYyByZXBvcnRzIHRoZSBzYW1lIHZhbHVlcyBhcyBhY2Nlc3NpbmcgW2BFbnZpcm9ubWVudC5Qcm9jZXNzb3JDb3VudGBdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS5lbnZpcm9ubWVudC5wcm9jZXNzb3Jjb3VudCkuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RPVE5FVF9QUk9DRVNTX0NQVV9DT1VOVCA9ICdkb3RuZXQucHJvY2Vzcy5jcHUuY291bnQnO1xuLyoqXG4gKiBDUFUgdGltZSB1c2VkIGJ5IHRoZSBwcm9jZXNzLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGFjY2Vzc2luZyB0aGUgY29ycmVzcG9uZGluZyBwcm9jZXNzb3IgdGltZSBwcm9wZXJ0aWVzIG9uIFtgU3lzdGVtLkRpYWdub3N0aWNzLlByb2Nlc3NgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZG90bmV0L2FwaS9zeXN0ZW0uZGlhZ25vc3RpY3MucHJvY2VzcykuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RPVE5FVF9QUk9DRVNTX0NQVV9USU1FID0gJ2RvdG5ldC5wcm9jZXNzLmNwdS50aW1lJztcbi8qKlxuICogVGhlIG51bWJlciBvZiBieXRlcyBvZiBwaHlzaWNhbCBtZW1vcnkgbWFwcGVkIHRvIHRoZSBwcm9jZXNzIGNvbnRleHQuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYFN5c3RlbS5SdW50aW1lYDsgQWRkZWQgaW46IC5ORVQgOS4wLlxuICogVGhpcyBtZXRyaWMgcmVwb3J0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgY2FsbGluZyBbYEVudmlyb25tZW50LldvcmtpbmdTZXRgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZG90bmV0L2FwaS9zeXN0ZW0uZW52aXJvbm1lbnQud29ya2luZ3NldCkuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RPVE5FVF9QUk9DRVNTX01FTU9SWV9XT1JLSU5HX1NFVCA9ICdkb3RuZXQucHJvY2Vzcy5tZW1vcnkud29ya2luZ19zZXQnO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHdvcmsgaXRlbXMgdGhhdCBhcmUgY3VycmVudGx5IHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRocmVhZCBwb29sLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BUaHJlYWRQb29sLlBlbmRpbmdXb3JrSXRlbUNvdW50YF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLnRocmVhZGluZy50aHJlYWRwb29sLnBlbmRpbmd3b3JraXRlbWNvdW50KS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX1RIUkVBRF9QT09MX1FVRVVFX0xFTkdUSCA9ICdkb3RuZXQudGhyZWFkX3Bvb2wucXVldWUubGVuZ3RoJztcbi8qKlxuICogVGhlIG51bWJlciBvZiB0aHJlYWQgcG9vbCB0aHJlYWRzIHRoYXQgY3VycmVudGx5IGV4aXN0LlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBTeXN0ZW0uUnVudGltZWA7IEFkZGVkIGluOiAuTkVUIDkuMC5cbiAqIFRoaXMgbWV0cmljIHJlcG9ydHMgdGhlIHNhbWUgdmFsdWVzIGFzIGNhbGxpbmcgW2BUaHJlYWRQb29sLlRocmVhZENvdW50YF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2RvdG5ldC9hcGkvc3lzdGVtLnRocmVhZGluZy50aHJlYWRwb29sLnRocmVhZGNvdW50KS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX1RIUkVBRF9QT09MX1RIUkVBRF9DT1VOVCA9ICdkb3RuZXQudGhyZWFkX3Bvb2wudGhyZWFkLmNvdW50Jztcbi8qKlxuICogVGhlIG51bWJlciBvZiB3b3JrIGl0ZW1zIHRoYXQgdGhlIHRocmVhZCBwb29sIGhhcyBjb21wbGV0ZWQgc2luY2UgdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYFN5c3RlbS5SdW50aW1lYDsgQWRkZWQgaW46IC5ORVQgOS4wLlxuICogVGhpcyBtZXRyaWMgcmVwb3J0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgY2FsbGluZyBbYFRocmVhZFBvb2wuQ29tcGxldGVkV29ya0l0ZW1Db3VudGBdKGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9kb3RuZXQvYXBpL3N5c3RlbS50aHJlYWRpbmcudGhyZWFkcG9vbC5jb21wbGV0ZWR3b3JraXRlbWNvdW50KS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX1RIUkVBRF9QT09MX1dPUktfSVRFTV9DT1VOVCA9ICdkb3RuZXQudGhyZWFkX3Bvb2wud29ya19pdGVtLmNvdW50Jztcbi8qKlxuICogVGhlIG51bWJlciBvZiB0aW1lciBpbnN0YW5jZXMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgU3lzdGVtLlJ1bnRpbWVgOyBBZGRlZCBpbjogLk5FVCA5LjAuXG4gKiBUaGlzIG1ldHJpYyByZXBvcnRzIHRoZSBzYW1lIHZhbHVlcyBhcyBjYWxsaW5nIFtgVGltZXIuQWN0aXZlQ291bnRgXShodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZG90bmV0L2FwaS9zeXN0ZW0udGhyZWFkaW5nLnRpbWVyLmFjdGl2ZWNvdW50KS5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfRE9UTkVUX1RJTUVSX0NPVU5UID0gJ2RvdG5ldC50aW1lci5jb3VudCc7XG4vKipcbiAqIER1cmF0aW9uIG9mIEhUVFAgY2xpZW50IHJlcXVlc3RzLlxuICovXG5leHBvcnRzLk1FVFJJQ19IVFRQX0NMSUVOVF9SRVFVRVNUX0RVUkFUSU9OID0gJ2h0dHAuY2xpZW50LnJlcXVlc3QuZHVyYXRpb24nO1xuLyoqXG4gKiBEdXJhdGlvbiBvZiBIVFRQIHNlcnZlciByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfSFRUUF9TRVJWRVJfUkVRVUVTVF9EVVJBVElPTiA9ICdodHRwLnNlcnZlci5yZXF1ZXN0LmR1cmF0aW9uJztcbi8qKlxuICogTnVtYmVyIG9mIGNsYXNzZXMgY3VycmVudGx5IGxvYWRlZC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfSlZNX0NMQVNTX0NPVU5UID0gJ2p2bS5jbGFzcy5jb3VudCc7XG4vKipcbiAqIE51bWJlciBvZiBjbGFzc2VzIGxvYWRlZCBzaW5jZSBKVk0gc3RhcnQuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0pWTV9DTEFTU19MT0FERUQgPSAnanZtLmNsYXNzLmxvYWRlZCc7XG4vKipcbiAqIE51bWJlciBvZiBjbGFzc2VzIHVubG9hZGVkIHNpbmNlIEpWTSBzdGFydC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfSlZNX0NMQVNTX1VOTE9BREVEID0gJ2p2bS5jbGFzcy51bmxvYWRlZCc7XG4vKipcbiAqIE51bWJlciBvZiBwcm9jZXNzb3JzIGF2YWlsYWJsZSB0byB0aGUgSmF2YSB2aXJ0dWFsIG1hY2hpbmUuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0pWTV9DUFVfQ09VTlQgPSAnanZtLmNwdS5jb3VudCc7XG4vKipcbiAqIFJlY2VudCBDUFUgdXRpbGl6YXRpb24gZm9yIHRoZSBwcm9jZXNzIGFzIHJlcG9ydGVkIGJ5IHRoZSBKVk0uXG4gKlxuICogQG5vdGUgVGhlIHZhbHVlIHJhbmdlIGlzIFswLjAsMS4wXS4gVGhpcyB1dGlsaXphdGlvbiBpcyBub3QgZGVmaW5lZCBhcyBiZWluZyBmb3IgdGhlIHNwZWNpZmljIGludGVydmFsIHNpbmNlIGxhc3QgbWVhc3VyZW1lbnQgKHVubGlrZSBgc3lzdGVtLmNwdS51dGlsaXphdGlvbmApLiBbUmVmZXJlbmNlXShodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xNy9kb2NzL2FwaS9qZGsubWFuYWdlbWVudC9jb20vc3VuL21hbmFnZW1lbnQvT3BlcmF0aW5nU3lzdGVtTVhCZWFuLmh0bWwjZ2V0UHJvY2Vzc0NwdUxvYWQoKSkuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0pWTV9DUFVfUkVDRU5UX1VUSUxJWkFUSU9OID0gJ2p2bS5jcHUucmVjZW50X3V0aWxpemF0aW9uJztcbi8qKlxuICogQ1BVIHRpbWUgdXNlZCBieSB0aGUgcHJvY2VzcyBhcyByZXBvcnRlZCBieSB0aGUgSlZNLlxuICovXG5leHBvcnRzLk1FVFJJQ19KVk1fQ1BVX1RJTUUgPSAnanZtLmNwdS50aW1lJztcbi8qKlxuICogRHVyYXRpb24gb2YgSlZNIGdhcmJhZ2UgY29sbGVjdGlvbiBhY3Rpb25zLlxuICovXG5leHBvcnRzLk1FVFJJQ19KVk1fR0NfRFVSQVRJT04gPSAnanZtLmdjLmR1cmF0aW9uJztcbi8qKlxuICogTWVhc3VyZSBvZiBtZW1vcnkgY29tbWl0dGVkLlxuICovXG5leHBvcnRzLk1FVFJJQ19KVk1fTUVNT1JZX0NPTU1JVFRFRCA9ICdqdm0ubWVtb3J5LmNvbW1pdHRlZCc7XG4vKipcbiAqIE1lYXN1cmUgb2YgbWF4IG9idGFpbmFibGUgbWVtb3J5LlxuICovXG5leHBvcnRzLk1FVFJJQ19KVk1fTUVNT1JZX0xJTUlUID0gJ2p2bS5tZW1vcnkubGltaXQnO1xuLyoqXG4gKiBNZWFzdXJlIG9mIG1lbW9yeSB1c2VkLlxuICovXG5leHBvcnRzLk1FVFJJQ19KVk1fTUVNT1JZX1VTRUQgPSAnanZtLm1lbW9yeS51c2VkJztcbi8qKlxuICogTWVhc3VyZSBvZiBtZW1vcnkgdXNlZCwgYXMgbWVhc3VyZWQgYWZ0ZXIgdGhlIG1vc3QgcmVjZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBldmVudCBvbiB0aGlzIHBvb2wuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0pWTV9NRU1PUllfVVNFRF9BRlRFUl9MQVNUX0dDID0gJ2p2bS5tZW1vcnkudXNlZF9hZnRlcl9sYXN0X2djJztcbi8qKlxuICogTnVtYmVyIG9mIGV4ZWN1dGluZyBwbGF0Zm9ybSB0aHJlYWRzLlxuICovXG5leHBvcnRzLk1FVFJJQ19KVk1fVEhSRUFEX0NPVU5UID0gJ2p2bS50aHJlYWQuY291bnQnO1xuLyoqXG4gKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBvbiB0aGUgc2VydmVyLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5TZXJ2ZXIuS2VzdHJlbGA7IEFkZGVkIGluOiBBU1AuTkVUIENvcmUgOC4wXG4gKi9cbmV4cG9ydHMuTUVUUklDX0tFU1RSRUxfQUNUSVZFX0NPTk5FQ1RJT05TID0gJ2tlc3RyZWwuYWN0aXZlX2Nvbm5lY3Rpb25zJztcbi8qKlxuICogTnVtYmVyIG9mIFRMUyBoYW5kc2hha2VzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBwcm9ncmVzcyBvbiB0aGUgc2VydmVyLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5TZXJ2ZXIuS2VzdHJlbGA7IEFkZGVkIGluOiBBU1AuTkVUIENvcmUgOC4wXG4gKi9cbmV4cG9ydHMuTUVUUklDX0tFU1RSRUxfQUNUSVZFX1RMU19IQU5EU0hBS0VTID0gJ2tlc3RyZWwuYWN0aXZlX3Rsc19oYW5kc2hha2VzJztcbi8qKlxuICogVGhlIGR1cmF0aW9uIG9mIGNvbm5lY3Rpb25zIG9uIHRoZSBzZXJ2ZXIuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYE1pY3Jvc29mdC5Bc3BOZXRDb3JlLlNlcnZlci5LZXN0cmVsYDsgQWRkZWQgaW46IEFTUC5ORVQgQ29yZSA4LjBcbiAqL1xuZXhwb3J0cy5NRVRSSUNfS0VTVFJFTF9DT05ORUNUSU9OX0RVUkFUSU9OID0gJ2tlc3RyZWwuY29ubmVjdGlvbi5kdXJhdGlvbic7XG4vKipcbiAqIE51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgcXVldWVkIGFuZCBhcmUgd2FpdGluZyB0byBzdGFydC5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuU2VydmVyLktlc3RyZWxgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19LRVNUUkVMX1FVRVVFRF9DT05ORUNUSU9OUyA9ICdrZXN0cmVsLnF1ZXVlZF9jb25uZWN0aW9ucyc7XG4vKipcbiAqIE51bWJlciBvZiBIVFRQIHJlcXVlc3RzIG9uIG11bHRpcGxleGVkIGNvbm5lY3Rpb25zIChIVFRQLzIgYW5kIEhUVFAvMykgdGhhdCBhcmUgY3VycmVudGx5IHF1ZXVlZCBhbmQgYXJlIHdhaXRpbmcgdG8gc3RhcnQuXG4gKlxuICogQG5vdGUgTWV0ZXIgbmFtZTogYE1pY3Jvc29mdC5Bc3BOZXRDb3JlLlNlcnZlci5LZXN0cmVsYDsgQWRkZWQgaW46IEFTUC5ORVQgQ29yZSA4LjBcbiAqL1xuZXhwb3J0cy5NRVRSSUNfS0VTVFJFTF9RVUVVRURfUkVRVUVTVFMgPSAna2VzdHJlbC5xdWV1ZWRfcmVxdWVzdHMnO1xuLyoqXG4gKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZlci5cbiAqXG4gKiBAbm90ZSBDb25uZWN0aW9ucyBhcmUgcmVqZWN0ZWQgd2hlbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb3VudCBleGNlZWRzIHRoZSB2YWx1ZSBjb25maWd1cmVkIHdpdGggYE1heENvbmN1cnJlbnRDb25uZWN0aW9uc2AuXG4gKiBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuU2VydmVyLktlc3RyZWxgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19LRVNUUkVMX1JFSkVDVEVEX0NPTk5FQ1RJT05TID0gJ2tlc3RyZWwucmVqZWN0ZWRfY29ubmVjdGlvbnMnO1xuLyoqXG4gKiBUaGUgZHVyYXRpb24gb2YgVExTIGhhbmRzaGFrZXMgb24gdGhlIHNlcnZlci5cbiAqXG4gKiBAbm90ZSBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuU2VydmVyLktlc3RyZWxgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19LRVNUUkVMX1RMU19IQU5EU0hBS0VfRFVSQVRJT04gPSAna2VzdHJlbC50bHNfaGFuZHNoYWtlLmR1cmF0aW9uJztcbi8qKlxuICogTnVtYmVyIG9mIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGN1cnJlbnRseSB1cGdyYWRlZCAoV2ViU29ja2V0cykuIC5cbiAqXG4gKiBAbm90ZSBUaGUgY291bnRlciBvbmx5IHRyYWNrcyBIVFRQLzEuMSBjb25uZWN0aW9ucy5cbiAqXG4gKiBNZXRlciBuYW1lOiBgTWljcm9zb2Z0LkFzcE5ldENvcmUuU2VydmVyLktlc3RyZWxgOyBBZGRlZCBpbjogQVNQLk5FVCBDb3JlIDguMFxuICovXG5leHBvcnRzLk1FVFJJQ19LRVNUUkVMX1VQR1JBREVEX0NPTk5FQ1RJT05TID0gJ2tlc3RyZWwudXBncmFkZWRfY29ubmVjdGlvbnMnO1xuLyoqXG4gKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBvbiB0aGUgc2VydmVyLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5IdHRwLkNvbm5lY3Rpb25zYDsgQWRkZWQgaW46IEFTUC5ORVQgQ29yZSA4LjBcbiAqL1xuZXhwb3J0cy5NRVRSSUNfU0lHTkFMUl9TRVJWRVJfQUNUSVZFX0NPTk5FQ1RJT05TID0gJ3NpZ25hbHIuc2VydmVyLmFjdGl2ZV9jb25uZWN0aW9ucyc7XG4vKipcbiAqIFRoZSBkdXJhdGlvbiBvZiBjb25uZWN0aW9ucyBvbiB0aGUgc2VydmVyLlxuICpcbiAqIEBub3RlIE1ldGVyIG5hbWU6IGBNaWNyb3NvZnQuQXNwTmV0Q29yZS5IdHRwLkNvbm5lY3Rpb25zYDsgQWRkZWQgaW46IEFTUC5ORVQgQ29yZSA4LjBcbiAqL1xuZXhwb3J0cy5NRVRSSUNfU0lHTkFMUl9TRVJWRVJfQ09OTkVDVElPTl9EVVJBVElPTiA9ICdzaWduYWxyLnNlcnZlci5jb25uZWN0aW9uLmR1cmF0aW9uJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YWJsZV9tZXRyaWNzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FVkVOVF9FWENFUFRJT04gPSB2b2lkIDA7XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBETyBOT1QgRURJVCwgdGhpcyBpcyBhbiBBdXRvLWdlbmVyYXRlZCBmaWxlIGZyb20gc2NyaXB0cy9zZW1jb252L3RlbXBsYXRlcy9yZWdpc3RyeS90cy1zdGFibGUvZXZlbnRzLnRzLmoyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFRoaXMgZXZlbnQgZGVzY3JpYmVzIGEgc2luZ2xlIGV4Y2VwdGlvbi5cbiAqL1xuZXhwb3J0cy5FVkVOVF9FWENFUFRJT04gPSAnZXhjZXB0aW9uJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YWJsZV9ldmVudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tXG4gKiBUaGVzZSByZS1leHBvcnRzIGFyZSBvbmx5IG9mIGNvbnN0YW50cywgb25seSB0d28tbGV2ZWxzIGRlZXAsIGFuZFxuICogc2hvdWxkIG5vdCBjYXVzZSBwcm9ibGVtcyBmb3IgdHJlZS1zaGFrZXJzLlxuICovXG4vLyBEZXByZWNhdGVkLiBUaGVzZSBhcmUga2VwdCBhcm91bmQgZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXNcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90cmFjZVwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vcmVzb3VyY2VcIiksIGV4cG9ydHMpO1xuLy8gVXNlIHRoZXNlIGluc3RlYWRcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9zdGFibGVfYXR0cmlidXRlc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vc3RhYmxlX21ldHJpY3NcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3N0YWJsZV9ldmVudHNcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUUgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcnVudGltZSBvZiB0aGlzIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgT3BlbkpESyBSdW50aW1lIEVudmlyb25tZW50XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUUgPSAncHJvY2Vzcy5ydW50aW1lLm5hbWUnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU0RLX0lORk8gPSB2b2lkIDA7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi4vLi4vdmVyc2lvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vc2VtY29udlwiKTtcbi8qKiBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgU0RLIGluIHVzZSAqL1xuZXhwb3J0cy5TREtfSU5GTyA9IHtcbiAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfTkFNRV06ICdvcGVudGVsZW1ldHJ5JyxcbiAgICBbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUVdOiAnbm9kZScsXG4gICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFXTogc2VtYW50aWNfY29udmVudGlvbnNfMS5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX05PREVKUyxcbiAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfVkVSU0lPTl06IHZlcnNpb25fMS5WRVJTSU9OLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNkay1pbmZvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vdHBlcmZvcm1hbmNlID0gZXhwb3J0cy5TREtfSU5GTyA9IGV4cG9ydHMuX2dsb2JhbFRoaXMgPSBleHBvcnRzLmdldFN0cmluZ0xpc3RGcm9tRW52ID0gZXhwb3J0cy5nZXROdW1iZXJGcm9tRW52ID0gZXhwb3J0cy5nZXRCb29sZWFuRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IHZvaWQgMDtcbnZhciBlbnZpcm9ubWVudF8xID0gcmVxdWlyZShcIi4vZW52aXJvbm1lbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTdHJpbmdGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnZpcm9ubWVudF8xLmdldFN0cmluZ0Zyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRCb29sZWFuRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW52aXJvbm1lbnRfMS5nZXRCb29sZWFuRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE51bWJlckZyb21FbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudmlyb25tZW50XzEuZ2V0TnVtYmVyRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFN0cmluZ0xpc3RGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnZpcm9ubWVudF8xLmdldFN0cmluZ0xpc3RGcm9tRW52OyB9IH0pO1xudmFyIGdsb2JhbFRoaXNfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21tb24vZ2xvYmFsVGhpc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9nbG9iYWxUaGlzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnbG9iYWxUaGlzXzEuX2dsb2JhbFRoaXM7IH0gfSk7XG52YXIgc2RrX2luZm9fMSA9IHJlcXVpcmUoXCIuL3Nkay1pbmZvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU0RLX0lORk9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka19pbmZvXzEuU0RLX0lORk87IH0gfSk7XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwZXJmb3JtYW5jZSBkaXJlY3RseS5cbiAqL1xuZXhwb3J0cy5vdHBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTdHJpbmdMaXN0RnJvbUVudiA9IGV4cG9ydHMuZ2V0TnVtYmVyRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGV4cG9ydHMuZ2V0Qm9vbGVhbkZyb21FbnYgPSBleHBvcnRzLm90cGVyZm9ybWFuY2UgPSBleHBvcnRzLl9nbG9iYWxUaGlzID0gZXhwb3J0cy5TREtfSU5GTyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNES19JTkZPXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuU0RLX0lORk87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfZ2xvYmFsVGhpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLl9nbG9iYWxUaGlzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3RwZXJmb3JtYW5jZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLm90cGVyZm9ybWFuY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRCb29sZWFuRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmdldEJvb2xlYW5Gcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmdldFN0cmluZ0Zyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZ2V0TnVtYmVyRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFN0cmluZ0xpc3RGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnY7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYWRkSHJUaW1lcyA9IGV4cG9ydHMuaXNUaW1lSW5wdXQgPSBleHBvcnRzLmlzVGltZUlucHV0SHJUaW1lID0gZXhwb3J0cy5oclRpbWVUb01pY3Jvc2Vjb25kcyA9IGV4cG9ydHMuaHJUaW1lVG9NaWxsaXNlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvTmFub3NlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvVGltZVN0YW1wID0gZXhwb3J0cy5oclRpbWVEdXJhdGlvbiA9IGV4cG9ydHMudGltZUlucHV0VG9IclRpbWUgPSBleHBvcnRzLmhyVGltZSA9IGV4cG9ydHMuZ2V0VGltZU9yaWdpbiA9IGV4cG9ydHMubWlsbGlzVG9IclRpbWUgPSB2b2lkIDA7XG5jb25zdCBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtXCIpO1xuY29uc3QgTkFOT1NFQ09ORF9ESUdJVFMgPSA5O1xuY29uc3QgTkFOT1NFQ09ORF9ESUdJVFNfSU5fTUlMTElTID0gNjtcbmNvbnN0IE1JTExJU0VDT05EU19UT19OQU5PU0VDT05EUyA9IE1hdGgucG93KDEwLCBOQU5PU0VDT05EX0RJR0lUU19JTl9NSUxMSVMpO1xuY29uc3QgU0VDT05EX1RPX05BTk9TRUNPTkRTID0gTWF0aC5wb3coMTAsIE5BTk9TRUNPTkRfRElHSVRTKTtcbi8qKlxuICogQ29udmVydHMgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gZXBvY2ggdG8gSHJUaW1lKFtzZWNvbmRzLCByZW1haW5kZXIgaW4gbmFub3NlY29uZHNdKS5cbiAqIEBwYXJhbSBlcG9jaE1pbGxpc1xuICovXG5mdW5jdGlvbiBtaWxsaXNUb0hyVGltZShlcG9jaE1pbGxpcykge1xuICAgIGNvbnN0IGVwb2NoU2Vjb25kcyA9IGVwb2NoTWlsbGlzIC8gMTAwMDtcbiAgICAvLyBEZWNpbWFscyBvbmx5LlxuICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLnRydW5jKGVwb2NoU2Vjb25kcyk7XG4gICAgLy8gUm91bmQgc3ViLW5hbm9zZWNvbmQgYWNjdXJhY3kgdG8gbmFub3NlY29uZC5cbiAgICBjb25zdCBuYW5vcyA9IE1hdGgucm91bmQoKGVwb2NoTWlsbGlzICUgMTAwMCkgKiBNSUxMSVNFQ09ORFNfVE9fTkFOT1NFQ09ORFMpO1xuICAgIHJldHVybiBbc2Vjb25kcywgbmFub3NdO1xufVxuZXhwb3J0cy5taWxsaXNUb0hyVGltZSA9IG1pbGxpc1RvSHJUaW1lO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHBlcmZvcm1hbmNlLnRpbWVPcmlnaW5gIGRpcmVjdGx5LlxuICovXG5mdW5jdGlvbiBnZXRUaW1lT3JpZ2luKCkge1xuICAgIHJldHVybiBwbGF0Zm9ybV8xLm90cGVyZm9ybWFuY2UudGltZU9yaWdpbjtcbn1cbmV4cG9ydHMuZ2V0VGltZU9yaWdpbiA9IGdldFRpbWVPcmlnaW47XG4vKipcbiAqIFJldHVybnMgYW4gaHJ0aW1lIGNhbGN1bGF0ZWQgdmlhIHBlcmZvcm1hbmNlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSBwZXJmb3JtYW5jZU5vd1xuICovXG5mdW5jdGlvbiBoclRpbWUocGVyZm9ybWFuY2VOb3cpIHtcbiAgICBjb25zdCB0aW1lT3JpZ2luID0gbWlsbGlzVG9IclRpbWUocGxhdGZvcm1fMS5vdHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4pO1xuICAgIGNvbnN0IG5vdyA9IG1pbGxpc1RvSHJUaW1lKHR5cGVvZiBwZXJmb3JtYW5jZU5vdyA9PT0gJ251bWJlcicgPyBwZXJmb3JtYW5jZU5vdyA6IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgcmV0dXJuIGFkZEhyVGltZXModGltZU9yaWdpbiwgbm93KTtcbn1cbmV4cG9ydHMuaHJUaW1lID0gaHJUaW1lO1xuLyoqXG4gKlxuICogQ29udmVydHMgYSBUaW1lSW5wdXQgdG8gYW4gSHJUaW1lLCBkZWZhdWx0cyB0byBfaHJ0aW1lKCkuXG4gKiBAcGFyYW0gdGltZVxuICovXG5mdW5jdGlvbiB0aW1lSW5wdXRUb0hyVGltZSh0aW1lKSB7XG4gICAgLy8gcHJvY2Vzcy5ocnRpbWVcbiAgICBpZiAoaXNUaW1lSW5wdXRIclRpbWUodGltZSkpIHtcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB0aW1lID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBNdXN0IGJlIGEgcGVyZm9ybWFuY2Uubm93KCkgaWYgaXQncyBzbWFsbGVyIHRoYW4gcHJvY2VzcyBzdGFydCB0aW1lLlxuICAgICAgICBpZiAodGltZSA8IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZS50aW1lT3JpZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gaHJUaW1lKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXBvY2ggbWlsbGlzZWNvbmRzIG9yIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW5cbiAgICAgICAgICAgIHJldHVybiBtaWxsaXNUb0hyVGltZSh0aW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gbWlsbGlzVG9IclRpbWUodGltZS5nZXRUaW1lKCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIGlucHV0IHR5cGUnKTtcbiAgICB9XG59XG5leHBvcnRzLnRpbWVJbnB1dFRvSHJUaW1lID0gdGltZUlucHV0VG9IclRpbWU7XG4vKipcbiAqIFJldHVybnMgYSBkdXJhdGlvbiBvZiB0d28gaHJUaW1lLlxuICogQHBhcmFtIHN0YXJ0VGltZVxuICogQHBhcmFtIGVuZFRpbWVcbiAqL1xuZnVuY3Rpb24gaHJUaW1lRHVyYXRpb24oc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG4gICAgbGV0IHNlY29uZHMgPSBlbmRUaW1lWzBdIC0gc3RhcnRUaW1lWzBdO1xuICAgIGxldCBuYW5vcyA9IGVuZFRpbWVbMV0gLSBzdGFydFRpbWVbMV07XG4gICAgLy8gb3ZlcmZsb3dcbiAgICBpZiAobmFub3MgPCAwKSB7XG4gICAgICAgIHNlY29uZHMgLT0gMTtcbiAgICAgICAgLy8gbmVnYXRlXG4gICAgICAgIG5hbm9zICs9IFNFQ09ORF9UT19OQU5PU0VDT05EUztcbiAgICB9XG4gICAgcmV0dXJuIFtzZWNvbmRzLCBuYW5vc107XG59XG5leHBvcnRzLmhyVGltZUR1cmF0aW9uID0gaHJUaW1lRHVyYXRpb247XG4vKipcbiAqIENvbnZlcnQgaHJUaW1lIHRvIHRpbWVzdGFtcCwgZm9yIGV4YW1wbGUgXCIyMDE5LTA1LTE0VDE3OjAwOjAwLjAwMDEyMzQ1NlpcIlxuICogQHBhcmFtIHRpbWVcbiAqL1xuZnVuY3Rpb24gaHJUaW1lVG9UaW1lU3RhbXAodGltZSkge1xuICAgIGNvbnN0IHByZWNpc2lvbiA9IE5BTk9TRUNPTkRfRElHSVRTO1xuICAgIGNvbnN0IHRtcCA9IGAkeycwJy5yZXBlYXQocHJlY2lzaW9uKX0ke3RpbWVbMV19WmA7XG4gICAgY29uc3QgbmFub1N0cmluZyA9IHRtcC5zdWJzdHJpbmcodG1wLmxlbmd0aCAtIHByZWNpc2lvbiAtIDEpO1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lWzBdICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgICByZXR1cm4gZGF0ZS5yZXBsYWNlKCcwMDBaJywgbmFub1N0cmluZyk7XG59XG5leHBvcnRzLmhyVGltZVRvVGltZVN0YW1wID0gaHJUaW1lVG9UaW1lU3RhbXA7XG4vKipcbiAqIENvbnZlcnQgaHJUaW1lIHRvIG5hbm9zZWNvbmRzLlxuICogQHBhcmFtIHRpbWVcbiAqL1xuZnVuY3Rpb24gaHJUaW1lVG9OYW5vc2Vjb25kcyh0aW1lKSB7XG4gICAgcmV0dXJuIHRpbWVbMF0gKiBTRUNPTkRfVE9fTkFOT1NFQ09ORFMgKyB0aW1lWzFdO1xufVxuZXhwb3J0cy5oclRpbWVUb05hbm9zZWNvbmRzID0gaHJUaW1lVG9OYW5vc2Vjb25kcztcbi8qKlxuICogQ29udmVydCBoclRpbWUgdG8gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIHRpbWVcbiAqL1xuZnVuY3Rpb24gaHJUaW1lVG9NaWxsaXNlY29uZHModGltZSkge1xuICAgIHJldHVybiB0aW1lWzBdICogMWUzICsgdGltZVsxXSAvIDFlNjtcbn1cbmV4cG9ydHMuaHJUaW1lVG9NaWxsaXNlY29uZHMgPSBoclRpbWVUb01pbGxpc2Vjb25kcztcbi8qKlxuICogQ29udmVydCBoclRpbWUgdG8gbWljcm9zZWNvbmRzLlxuICogQHBhcmFtIHRpbWVcbiAqL1xuZnVuY3Rpb24gaHJUaW1lVG9NaWNyb3NlY29uZHModGltZSkge1xuICAgIHJldHVybiB0aW1lWzBdICogMWU2ICsgdGltZVsxXSAvIDFlMztcbn1cbmV4cG9ydHMuaHJUaW1lVG9NaWNyb3NlY29uZHMgPSBoclRpbWVUb01pY3Jvc2Vjb25kcztcbi8qKlxuICogY2hlY2sgaWYgdGltZSBpcyBIclRpbWVcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc1RpbWVJbnB1dEhyVGltZSh2YWx1ZSkge1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID09PSAyICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlWzFdID09PSAnbnVtYmVyJyk7XG59XG5leHBvcnRzLmlzVGltZUlucHV0SHJUaW1lID0gaXNUaW1lSW5wdXRIclRpbWU7XG4vKipcbiAqIGNoZWNrIGlmIGlucHV0IHZhbHVlIGlzIGEgY29ycmVjdCB0eXBlcy5UaW1lSW5wdXRcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc1RpbWVJbnB1dCh2YWx1ZSkge1xuICAgIHJldHVybiAoaXNUaW1lSW5wdXRIclRpbWUodmFsdWUpIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKTtcbn1cbmV4cG9ydHMuaXNUaW1lSW5wdXQgPSBpc1RpbWVJbnB1dDtcbi8qKlxuICogR2l2ZW4gMiBIclRpbWUgZm9ybWF0dGVkIHRpbWVzLCByZXR1cm4gdGhlaXIgc3VtIGFzIGFuIEhyVGltZS5cbiAqL1xuZnVuY3Rpb24gYWRkSHJUaW1lcyh0aW1lMSwgdGltZTIpIHtcbiAgICBjb25zdCBvdXQgPSBbdGltZTFbMF0gKyB0aW1lMlswXSwgdGltZTFbMV0gKyB0aW1lMlsxXV07XG4gICAgLy8gTmFub3NlY29uZHNcbiAgICBpZiAob3V0WzFdID49IFNFQ09ORF9UT19OQU5PU0VDT05EUykge1xuICAgICAgICBvdXRbMV0gLT0gU0VDT05EX1RPX05BTk9TRUNPTkRTO1xuICAgICAgICBvdXRbMF0gKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydHMuYWRkSHJUaW1lcyA9IGFkZEhyVGltZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51bnJlZlRpbWVyID0gdm9pZCAwO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgY29weSB0aGlzIGNvZGUgdG8geW91ciBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS5cbiAqIEBwYXJhbSB0aW1lclxuICovXG5mdW5jdGlvbiB1bnJlZlRpbWVyKHRpbWVyKSB7XG4gICAgaWYgKHR5cGVvZiB0aW1lciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGltZXIudW5yZWYoKTtcbiAgICB9XG59XG5leHBvcnRzLnVucmVmVGltZXIgPSB1bnJlZlRpbWVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXItdXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXhwb3J0UmVzdWx0Q29kZSA9IHZvaWQgMDtcbnZhciBFeHBvcnRSZXN1bHRDb2RlO1xuKGZ1bmN0aW9uIChFeHBvcnRSZXN1bHRDb2RlKSB7XG4gICAgRXhwb3J0UmVzdWx0Q29kZVtFeHBvcnRSZXN1bHRDb2RlW1wiU1VDQ0VTU1wiXSA9IDBdID0gXCJTVUNDRVNTXCI7XG4gICAgRXhwb3J0UmVzdWx0Q29kZVtFeHBvcnRSZXN1bHRDb2RlW1wiRkFJTEVEXCJdID0gMV0gPSBcIkZBSUxFRFwiO1xufSkoRXhwb3J0UmVzdWx0Q29kZSA9IGV4cG9ydHMuRXhwb3J0UmVzdWx0Q29kZSB8fCAoZXhwb3J0cy5FeHBvcnRSZXN1bHRDb2RlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9ydFJlc3VsdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tcG9zaXRlUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbi8qKiBDb21iaW5lcyBtdWx0aXBsZSBwcm9wYWdhdG9ycyBpbnRvIGEgc2luZ2xlIHByb3BhZ2F0b3IuICovXG5jbGFzcyBDb21wb3NpdGVQcm9wYWdhdG9yIHtcbiAgICBfcHJvcGFnYXRvcnM7XG4gICAgX2ZpZWxkcztcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBjb21wb3NpdGUgcHJvcGFnYXRvciBmcm9tIGEgbGlzdCBvZiBwcm9wYWdhdG9ycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBbY29uZmlnXSBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgY29tcG9zaXRlIHByb3BhZ2F0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdG9ycyA9IGNvbmZpZy5wcm9wYWdhdG9ycyA/PyBbXTtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuX3Byb3BhZ2F0b3JzXG4gICAgICAgICAgICAvLyBvbGRlciBwcm9wYWdhdG9ycyBtYXkgbm90IGhhdmUgZmllbGRzIGZ1bmN0aW9uLCBudWxsIGNoZWNrIHRvIGJlIHN1cmVcbiAgICAgICAgICAgIC5tYXAocCA9PiAodHlwZW9mIHAuZmllbGRzID09PSAnZnVuY3Rpb24nID8gcC5maWVsZHMoKSA6IFtdKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHgsIHkpID0+IHguY29uY2F0KHkpLCBbXSkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGVhY2ggb2YgdGhlIGNvbmZpZ3VyZWQgcHJvcGFnYXRvcnMgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgY2Fycmllci5cbiAgICAgKiBQcm9wYWdhdG9ycyBhcmUgcnVuIGluIHRoZSBvcmRlciB0aGV5IGFyZSBjb25maWd1cmVkLCBzbyBpZiBtdWx0aXBsZVxuICAgICAqIHByb3BhZ2F0b3JzIHdyaXRlIHRoZSBzYW1lIGNhcnJpZXIga2V5LCB0aGUgcHJvcGFnYXRvciBsYXRlciBpbiB0aGUgbGlzdFxuICAgICAqIHdpbGwgXCJ3aW5cIi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gaW5qZWN0XG4gICAgICogQHBhcmFtIGNhcnJpZXIgQ2FycmllciBpbnRvIHdoaWNoIGNvbnRleHQgd2lsbCBiZSBpbmplY3RlZFxuICAgICAqL1xuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wYWdhdG9yIG9mIHRoaXMuX3Byb3BhZ2F0b3JzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHByb3BhZ2F0b3IuaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBGYWlsZWQgdG8gaW5qZWN0IHdpdGggJHtwcm9wYWdhdG9yLmNvbnN0cnVjdG9yLm5hbWV9LiBFcnI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGVhY2ggb2YgdGhlIGNvbmZpZ3VyZWQgcHJvcGFnYXRvcnMgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgY2Fycmllci5cbiAgICAgKiBQcm9wYWdhdG9ycyBhcmUgcnVuIGluIHRoZSBvcmRlciB0aGV5IGFyZSBjb25maWd1cmVkLCBzbyBpZiBtdWx0aXBsZVxuICAgICAqIHByb3BhZ2F0b3JzIHdyaXRlIHRoZSBzYW1lIGNvbnRleHQga2V5LCB0aGUgcHJvcGFnYXRvciBsYXRlciBpbiB0aGUgbGlzdFxuICAgICAqIHdpbGwgXCJ3aW5cIi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYWRkIHZhbHVlcyB0b1xuICAgICAqIEBwYXJhbSBjYXJyaWVyIENhcnJpZXIgZnJvbSB3aGljaCB0byBleHRyYWN0IGNvbnRleHRcbiAgICAgKi9cbiAgICBleHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGFnYXRvcnMucmVkdWNlKChjdHgsIHByb3BhZ2F0b3IpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0b3IuZXh0cmFjdChjdHgsIGNhcnJpZXIsIGdldHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBGYWlsZWQgdG8gZXh0cmFjdCB3aXRoICR7cHJvcGFnYXRvci5jb25zdHJ1Y3Rvci5uYW1lfS4gRXJyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eDtcbiAgICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgLy8gcmV0dXJuIGEgbmV3IGFycmF5IHNvIG91ciBmaWVsZHMgY2Fubm90IGJlIG1vZGlmaWVkXG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMuc2xpY2UoKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbXBvc2l0ZVByb3BhZ2F0b3IgPSBDb21wb3NpdGVQcm9wYWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcG9zaXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVZhbHVlID0gZXhwb3J0cy52YWxpZGF0ZUtleSA9IHZvaWQgMDtcbmNvbnN0IFZBTElEX0tFWV9DSEFSX1JBTkdFID0gJ1tfMC05YS16LSovXSc7XG5jb25zdCBWQUxJRF9LRVkgPSBgW2Etel0ke1ZBTElEX0tFWV9DSEFSX1JBTkdFfXswLDI1NX1gO1xuY29uc3QgVkFMSURfVkVORE9SX0tFWSA9IGBbYS16MC05XSR7VkFMSURfS0VZX0NIQVJfUkFOR0V9ezAsMjQwfUBbYS16XSR7VkFMSURfS0VZX0NIQVJfUkFOR0V9ezAsMTN9YDtcbmNvbnN0IFZBTElEX0tFWV9SRUdFWCA9IG5ldyBSZWdFeHAoYF4oPzoke1ZBTElEX0tFWX18JHtWQUxJRF9WRU5ET1JfS0VZfSkkYCk7XG5jb25zdCBWQUxJRF9WQUxVRV9CQVNFX1JFR0VYID0gL15bIC1+XXswLDI1NX1bIS1+XSQvO1xuY29uc3QgSU5WQUxJRF9WQUxVRV9DT01NQV9FUVVBTF9SRUdFWCA9IC8sfD0vO1xuLyoqXG4gKiBLZXkgaXMgb3BhcXVlIHN0cmluZyB1cCB0byAyNTYgY2hhcmFjdGVycyBwcmludGFibGUuIEl0IE1VU1QgYmVnaW4gd2l0aCBhXG4gKiBsb3dlcmNhc2UgbGV0dGVyLCBhbmQgY2FuIG9ubHkgY29udGFpbiBsb3dlcmNhc2UgbGV0dGVycyBhLXosIGRpZ2l0cyAwLTksXG4gKiB1bmRlcnNjb3JlcyBfLCBkYXNoZXMgLSwgYXN0ZXJpc2tzICosIGFuZCBmb3J3YXJkIHNsYXNoZXMgLy5cbiAqIEZvciBtdWx0aS10ZW5hbnQgdmVuZG9yIHNjZW5hcmlvcywgYW4gYXQgc2lnbiAoQCkgY2FuIGJlIHVzZWQgdG8gcHJlZml4IHRoZVxuICogdmVuZG9yIG5hbWUuIFZlbmRvcnMgU0hPVUxEIHNldCB0aGUgdGVuYW50IElEIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGtleS5cbiAqIHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvdHJhY2UtY29udGV4dC8ja2V5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlS2V5KGtleSkge1xuICAgIHJldHVybiBWQUxJRF9LRVlfUkVHRVgudGVzdChrZXkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUtleSA9IHZhbGlkYXRlS2V5O1xuLyoqXG4gKiBWYWx1ZSBpcyBvcGFxdWUgc3RyaW5nIHVwIHRvIDI1NiBjaGFyYWN0ZXJzIHByaW50YWJsZSBBU0NJSSBSRkMwMDIwXG4gKiBjaGFyYWN0ZXJzIChpLmUuLCB0aGUgcmFuZ2UgMHgyMCB0byAweDdFKSBleGNlcHQgY29tbWEgLCBhbmQgPS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiAoVkFMSURfVkFMVUVfQkFTRV9SRUdFWC50ZXN0KHZhbHVlKSAmJlxuICAgICAgICAhSU5WQUxJRF9WQUxVRV9DT01NQV9FUVVBTF9SRUdFWC50ZXN0KHZhbHVlKSk7XG59XG5leHBvcnRzLnZhbGlkYXRlVmFsdWUgPSB2YWxpZGF0ZVZhbHVlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdG9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHZhbGlkYXRvcnNfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC92YWxpZGF0b3JzXCIpO1xuY29uc3QgTUFYX1RSQUNFX1NUQVRFX0lURU1TID0gMzI7XG5jb25zdCBNQVhfVFJBQ0VfU1RBVEVfTEVOID0gNTEyO1xuY29uc3QgTElTVF9NRU1CRVJTX1NFUEFSQVRPUiA9ICcsJztcbmNvbnN0IExJU1RfTUVNQkVSX0tFWV9WQUxVRV9TUExJVFRFUiA9ICc9Jztcbi8qKlxuICogVHJhY2VTdGF0ZSBtdXN0IGJlIGEgY2xhc3MgYW5kIG5vdCBhIHNpbXBsZSBvYmplY3QgdHlwZSBiZWNhdXNlIG9mIHRoZSBzcGVjXG4gKiByZXF1aXJlbWVudCAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvI3RyYWNlc3RhdGUtZmllbGQpLlxuICpcbiAqIEhlcmUgaXMgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtdXRhdGlvbnM6XG4gKiAtIE5ldyBrZXktdmFsdWUgcGFpciBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG4gKiAtIFRoZSB2YWx1ZSBvZiBhbnkga2V5IGNhbiBiZSB1cGRhdGVkLiBNb2RpZmllZCBrZXlzIE1VU1QgYmUgbW92ZWQgdG8gdGhlXG4gKiBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gKi9cbmNsYXNzIFRyYWNlU3RhdGUge1xuICAgIF9pbnRlcm5hbFN0YXRlID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHJhd1RyYWNlU3RhdGUpIHtcbiAgICAgICAgaWYgKHJhd1RyYWNlU3RhdGUpXG4gICAgICAgICAgICB0aGlzLl9wYXJzZShyYXdUcmFjZVN0YXRlKTtcbiAgICB9XG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgLy8gVE9ETzogQmVuY2htYXJrIHRoZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyhtYXAgdnMgbGlzdCkgYW5kXG4gICAgICAgIC8vIHVzZSB0aGUgZmFzdGVyIG9uZS5cbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZSA9IHRoaXMuX2Nsb25lKCk7XG4gICAgICAgIGlmICh0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJhY2VTdGF0ZTtcbiAgICB9XG4gICAgdW5zZXQoa2V5KSB7XG4gICAgICAgIGNvbnN0IHRyYWNlU3RhdGUgPSB0aGlzLl9jbG9uZSgpO1xuICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gdHJhY2VTdGF0ZTtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxTdGF0ZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fa2V5cygpXG4gICAgICAgICAgICAucmVkdWNlKChhZ2csIGtleSkgPT4ge1xuICAgICAgICAgICAgYWdnLnB1c2goa2V5ICsgTElTVF9NRU1CRVJfS0VZX1ZBTFVFX1NQTElUVEVSICsgdGhpcy5nZXQoa2V5KSk7XG4gICAgICAgICAgICByZXR1cm4gYWdnO1xuICAgICAgICB9LCBbXSlcbiAgICAgICAgICAgIC5qb2luKExJU1RfTUVNQkVSU19TRVBBUkFUT1IpO1xuICAgIH1cbiAgICBfcGFyc2UocmF3VHJhY2VTdGF0ZSkge1xuICAgICAgICBpZiAocmF3VHJhY2VTdGF0ZS5sZW5ndGggPiBNQVhfVFJBQ0VfU1RBVEVfTEVOKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gcmF3VHJhY2VTdGF0ZVxuICAgICAgICAgICAgLnNwbGl0KExJU1RfTUVNQkVSU19TRVBBUkFUT1IpXG4gICAgICAgICAgICAucmV2ZXJzZSgpIC8vIFN0b3JlIGluIHJldmVyc2Ugc28gbmV3IGtleXMgKC5zZXQoLi4uKSkgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgICAgLnJlZHVjZSgoYWdnLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0TWVtYmVyID0gcGFydC50cmltKCk7IC8vIE9wdGlvbmFsIFdoaXRlc3BhY2UgKE9XUykgaGFuZGxpbmdcbiAgICAgICAgICAgIGNvbnN0IGkgPSBsaXN0TWVtYmVyLmluZGV4T2YoTElTVF9NRU1CRVJfS0VZX1ZBTFVFX1NQTElUVEVSKTtcbiAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGxpc3RNZW1iZXIuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsaXN0TWVtYmVyLnNsaWNlKGkgKyAxLCBwYXJ0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCB2YWxpZGF0b3JzXzEudmFsaWRhdGVLZXkpKGtleSkgJiYgKDAsIHZhbGlkYXRvcnNfMS52YWxpZGF0ZVZhbHVlKSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWdnLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIHRvIGFkZCB3YXJuaW5nIGxvZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhZ2c7XG4gICAgICAgIH0sIG5ldyBNYXAoKSk7XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHJldmVyc2UoKSByZXF1aXJlbWVudCwgdHJ1bmMgbXVzdCBiZSBkb25lIGFmdGVyIG1hcCBpcyBjcmVhdGVkXG4gICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlLnNpemUgPiBNQVhfVFJBQ0VfU1RBVEVfSVRFTVMpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBuZXcgTWFwKEFycmF5LmZyb20odGhpcy5faW50ZXJuYWxTdGF0ZS5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKSAvLyBVc2UgcmV2ZXJzZSBzYW1lIGFzIG9yaWdpbmFsIHRyYWNlc3RhdGUgcGFyc2UgY2hhaW5cbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgTUFYX1RSQUNFX1NUQVRFX0lURU1TKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2tleXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2ludGVybmFsU3RhdGUua2V5cygpKS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIF9jbG9uZSgpIHtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZSA9IG5ldyBUcmFjZVN0YXRlKCk7XG4gICAgICAgIHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUgPSBuZXcgTWFwKHRoaXMuX2ludGVybmFsU3RhdGUpO1xuICAgICAgICByZXR1cm4gdHJhY2VTdGF0ZTtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNlU3RhdGUgPSBUcmFjZVN0YXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJhY2VTdGF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvciA9IGV4cG9ydHMucGFyc2VUcmFjZVBhcmVudCA9IGV4cG9ydHMuVFJBQ0VfU1RBVEVfSEVBREVSID0gZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc3VwcHJlc3NfdHJhY2luZ18xID0gcmVxdWlyZShcIi4vc3VwcHJlc3MtdHJhY2luZ1wiKTtcbmNvbnN0IFRyYWNlU3RhdGVfMSA9IHJlcXVpcmUoXCIuL1RyYWNlU3RhdGVcIik7XG5leHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIgPSAndHJhY2VwYXJlbnQnO1xuZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVIgPSAndHJhY2VzdGF0ZSc7XG5jb25zdCBWRVJTSU9OID0gJzAwJztcbmNvbnN0IFZFUlNJT05fUEFSVCA9ICcoPyFmZilbXFxcXGRhLWZdezJ9JztcbmNvbnN0IFRSQUNFX0lEX1BBUlQgPSAnKD8hWzBdezMyfSlbXFxcXGRhLWZdezMyfSc7XG5jb25zdCBQQVJFTlRfSURfUEFSVCA9ICcoPyFbMF17MTZ9KVtcXFxcZGEtZl17MTZ9JztcbmNvbnN0IEZMQUdTX1BBUlQgPSAnW1xcXFxkYS1mXXsyfSc7XG5jb25zdCBUUkFDRV9QQVJFTlRfUkVHRVggPSBuZXcgUmVnRXhwKGBeXFxcXHM/KCR7VkVSU0lPTl9QQVJUfSktKCR7VFJBQ0VfSURfUEFSVH0pLSgke1BBUkVOVF9JRF9QQVJUfSktKCR7RkxBR1NfUEFSVH0pKC0uKik/XFxcXHM/JGApO1xuLyoqXG4gKiBQYXJzZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgW3RyYWNlcGFyZW50XSBzcGFuIHRhZyBhbmQgY29udmVydHMgaXQgaW50byB7QGxpbmsgU3BhbkNvbnRleHR9XG4gKiBAcGFyYW0gdHJhY2VQYXJlbnQgLSBBIG1ldGEgcHJvcGVydHkgdGhhdCBjb21lcyBmcm9tIHNlcnZlci5cbiAqICAgICBJdCBzaG91bGQgYmUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHNlcnZlciBzaWRlIHRvIGhhdmUgdGhlIHNlcnZlcidzIHJlcXVlc3QgdHJhY2UgSWQsXG4gKiAgICAgYSBwYXJlbnQgc3BhbiBJZCB0aGF0IHdhcyBzZXQgb24gdGhlIHNlcnZlcidzIHJlcXVlc3Qgc3BhbixcbiAqICAgICBhbmQgdGhlIHRyYWNlIGZsYWdzIHRvIGluZGljYXRlIHRoZSBzZXJ2ZXIncyBzYW1wbGluZyBkZWNpc2lvblxuICogICAgICgwMSA9IHNhbXBsZWQsIDAwID0gbm90IHNhbXBsZWQpLlxuICogICAgIGZvciBleGFtcGxlOiAne3ZlcnNpb259LXt0cmFjZUlkfS17c3BhbklkfS17c2FtcGxlRGVjaXNpb259J1xuICogICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvfVxuICovXG5mdW5jdGlvbiBwYXJzZVRyYWNlUGFyZW50KHRyYWNlUGFyZW50KSB7XG4gICAgY29uc3QgbWF0Y2ggPSBUUkFDRV9QQVJFTlRfUkVHRVguZXhlYyh0cmFjZVBhcmVudCk7XG4gICAgaWYgKCFtYXRjaClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgY29tcGF0aWJsZVxuICAgIC8vIHdpdGggZnV0dXJlIHZlcnNpb25zLiBJZiB0aGVyZSBhcmUgbW9yZSBwYXJ0cywgd2Ugb25seSByZWplY3QgaXQgaWYgaXQncyB1c2luZyB2ZXJzaW9uIDAwXG4gICAgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0LyN2ZXJzaW9uaW5nLW9mLXRyYWNlcGFyZW50XG4gICAgaWYgKG1hdGNoWzFdID09PSAnMDAnICYmIG1hdGNoWzVdKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICB0cmFjZUlkOiBtYXRjaFsyXSxcbiAgICAgICAgc3BhbklkOiBtYXRjaFszXSxcbiAgICAgICAgdHJhY2VGbGFnczogcGFyc2VJbnQobWF0Y2hbNF0sIDE2KSxcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJzZVRyYWNlUGFyZW50ID0gcGFyc2VUcmFjZVBhcmVudDtcbi8qKlxuICogUHJvcGFnYXRlcyB7QGxpbmsgU3BhbkNvbnRleHR9IHRocm91Z2ggVHJhY2UgQ29udGV4dCBmb3JtYXQgcHJvcGFnYXRpb24uXG4gKlxuICogQmFzZWQgb24gdGhlIFRyYWNlIENvbnRleHQgc3BlY2lmaWNhdGlvbjpcbiAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0L1xuICovXG5jbGFzcyBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yIHtcbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gYXBpXzEudHJhY2UuZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmICghc3BhbkNvbnRleHQgfHxcbiAgICAgICAgICAgICgwLCBzdXBwcmVzc190cmFjaW5nXzEuaXNUcmFjaW5nU3VwcHJlc3NlZCkoY29udGV4dCkgfHxcbiAgICAgICAgICAgICEoMCwgYXBpXzEuaXNTcGFuQ29udGV4dFZhbGlkKShzcGFuQ29udGV4dCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50ID0gYCR7VkVSU0lPTn0tJHtzcGFuQ29udGV4dC50cmFjZUlkfS0ke3NwYW5Db250ZXh0LnNwYW5JZH0tMCR7TnVtYmVyKHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgfHwgYXBpXzEuVHJhY2VGbGFncy5OT05FKS50b1N0cmluZygxNil9YDtcbiAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBleHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIsIHRyYWNlUGFyZW50KTtcbiAgICAgICAgaWYgKHNwYW5Db250ZXh0LnRyYWNlU3RhdGUpIHtcbiAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVIsIHNwYW5Db250ZXh0LnRyYWNlU3RhdGUuc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50SGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBleHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIpO1xuICAgICAgICBpZiAoIXRyYWNlUGFyZW50SGVhZGVyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50ID0gQXJyYXkuaXNBcnJheSh0cmFjZVBhcmVudEhlYWRlcilcbiAgICAgICAgICAgID8gdHJhY2VQYXJlbnRIZWFkZXJbMF1cbiAgICAgICAgICAgIDogdHJhY2VQYXJlbnRIZWFkZXI7XG4gICAgICAgIGlmICh0eXBlb2YgdHJhY2VQYXJlbnQgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gcGFyc2VUcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIGlmICghc3BhbkNvbnRleHQpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgc3BhbkNvbnRleHQuaXNSZW1vdGUgPSB0cnVlO1xuICAgICAgICBjb25zdCB0cmFjZVN0YXRlSGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUik7XG4gICAgICAgIGlmICh0cmFjZVN0YXRlSGVhZGVyKSB7XG4gICAgICAgICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIGB0cmFjZXN0YXRlYCBoZWFkZXIgaXMgZm91bmQsIHdlIG1lcmdlIHRoZW0gaW50byBhXG4gICAgICAgICAgICAvLyBzaW5nbGUgaGVhZGVyLlxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBBcnJheS5pc0FycmF5KHRyYWNlU3RhdGVIZWFkZXIpXG4gICAgICAgICAgICAgICAgPyB0cmFjZVN0YXRlSGVhZGVyLmpvaW4oJywnKVxuICAgICAgICAgICAgICAgIDogdHJhY2VTdGF0ZUhlYWRlcjtcbiAgICAgICAgICAgIHNwYW5Db250ZXh0LnRyYWNlU3RhdGUgPSBuZXcgVHJhY2VTdGF0ZV8xLlRyYWNlU3RhdGUodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyA/IHN0YXRlIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpXzEudHJhY2Uuc2V0U3BhbkNvbnRleHQoY29udGV4dCwgc3BhbkNvbnRleHQpO1xuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSLCBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUl07XG4gICAgfVxufVxuZXhwb3J0cy5XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yID0gVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJQQ01ldGFkYXRhID0gZXhwb3J0cy5kZWxldGVSUENNZXRhZGF0YSA9IGV4cG9ydHMuc2V0UlBDTWV0YWRhdGEgPSBleHBvcnRzLlJQQ1R5cGUgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBSUENfTUVUQURBVEFfS0VZID0gKDAsIGFwaV8xLmNyZWF0ZUNvbnRleHRLZXkpKCdPcGVuVGVsZW1ldHJ5IFNESyBDb250ZXh0IEtleSBSUENfTUVUQURBVEEnKTtcbnZhciBSUENUeXBlO1xuKGZ1bmN0aW9uIChSUENUeXBlKSB7XG4gICAgUlBDVHlwZVtcIkhUVFBcIl0gPSBcImh0dHBcIjtcbn0pKFJQQ1R5cGUgPSBleHBvcnRzLlJQQ1R5cGUgfHwgKGV4cG9ydHMuUlBDVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBzZXRSUENNZXRhZGF0YShjb250ZXh0LCBtZXRhKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoUlBDX01FVEFEQVRBX0tFWSwgbWV0YSk7XG59XG5leHBvcnRzLnNldFJQQ01ldGFkYXRhID0gc2V0UlBDTWV0YWRhdGE7XG5mdW5jdGlvbiBkZWxldGVSUENNZXRhZGF0YShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoUlBDX01FVEFEQVRBX0tFWSk7XG59XG5leHBvcnRzLmRlbGV0ZVJQQ01ldGFkYXRhID0gZGVsZXRlUlBDTWV0YWRhdGE7XG5mdW5jdGlvbiBnZXRSUENNZXRhZGF0YShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoUlBDX01FVEFEQVRBX0tFWSk7XG59XG5leHBvcnRzLmdldFJQQ01ldGFkYXRhID0gZ2V0UlBDTWV0YWRhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ycGMtbWV0YWRhdGEuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSB2b2lkIDA7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKipcbiAqIGJhc2VkIG9uIGxvZGFzaCBpbiBvcmRlciB0byBzdXBwb3J0IGVzbSBidWlsZHMgd2l0aG91dCBlc01vZHVsZUludGVyb3AuXG4gKiBsb2Rhc2ggaXMgdXNpbmcgTUlUIExpY2Vuc2UuXG4gKiovXG5jb25zdCBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcbmNvbnN0IG51bGxUYWcgPSAnW29iamVjdCBOdWxsXSc7XG5jb25zdCB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcbmNvbnN0IGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbmNvbnN0IGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcbmNvbnN0IG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuY29uc3QgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5jb25zdCBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuY29uc3Qgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5jb25zdCBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPT0gb2JqZWN0VGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcHJvdG8gPSBnZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09PSBvYmplY3RDdG9yU3RyaW5nKTtcbn1cbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gICAgfVxuICAgIHJldHVybiBzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpXG4gICAgICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgICAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gICAgY29uc3QgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICBsZXQgdW5tYXNrZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgICAgIHVubWFza2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICAvLyBzaWxlbmNlXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIGlmICh1bm1hc2tlZCkge1xuICAgICAgICBpZiAoaXNPd24pIHtcbiAgICAgICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZGFzaC5tZXJnZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWVyZ2UgPSB2b2lkIDA7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5jb25zdCBsb2Rhc2hfbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL2xvZGFzaC5tZXJnZVwiKTtcbmNvbnN0IE1BWF9MRVZFTCA9IDIwO1xuLyoqXG4gKiBNZXJnZXMgb2JqZWN0cyB0b2dldGhlclxuICogQHBhcmFtIGFyZ3MgLSBvYmplY3RzIC8gdmFsdWVzIHRvIGJlIG1lcmdlZFxuICovXG5mdW5jdGlvbiBtZXJnZSguLi5hcmdzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGFyZ3Muc2hpZnQoKTtcbiAgICBjb25zdCBvYmplY3RzID0gbmV3IFdlYWtNYXAoKTtcbiAgICB3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IG1lcmdlVHdvT2JqZWN0cyhyZXN1bHQsIGFyZ3Muc2hpZnQoKSwgMCwgb2JqZWN0cyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5mdW5jdGlvbiB0YWtlVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogTWVyZ2VzIHR3byBvYmplY3RzXG4gKiBAcGFyYW0gb25lIC0gZmlyc3Qgb2JqZWN0XG4gKiBAcGFyYW0gdHdvIC0gc2Vjb25kIG9iamVjdFxuICogQHBhcmFtIGxldmVsIC0gY3VycmVudCBkZWVwIGxldmVsXG4gKiBAcGFyYW0gb2JqZWN0cyAtIG9iamVjdHMgaG9sZGVyIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSByZWZlcmVuY2VkIC0gdG8gcHJldmVudFxuICogY3ljbGljIGRlcGVuZGVuY3lcbiAqL1xuZnVuY3Rpb24gbWVyZ2VUd29PYmplY3RzKG9uZSwgdHdvLCBsZXZlbCA9IDAsIG9iamVjdHMpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChsZXZlbCA+IE1BWF9MRVZFTCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXZlbCsrO1xuICAgIGlmIChpc1ByaW1pdGl2ZShvbmUpIHx8IGlzUHJpbWl0aXZlKHR3bykgfHwgaXNGdW5jdGlvbih0d28pKSB7XG4gICAgICAgIHJlc3VsdCA9IHRha2VWYWx1ZSh0d28pO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5KG9uZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gb25lLnNsaWNlKCk7XG4gICAgICAgIGlmIChpc0FycmF5KHR3bykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gdHdvLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRha2VWYWx1ZSh0d29baV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh0d28pKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModHdvKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0ga2V5cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGFrZVZhbHVlKHR3b1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChvbmUpKSB7XG4gICAgICAgIGlmIChpc09iamVjdCh0d28pKSB7XG4gICAgICAgICAgICBpZiAoIXNob3VsZE1lcmdlKG9uZSwgdHdvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0d287XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvbmUpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHR3byk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IGtleXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCB0d29WYWx1ZSA9IHR3b1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChpc1ByaW1pdGl2ZSh0d29WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0d29WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdFtrZXldID0gdGFrZVZhbHVlKHR3b1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdHdvVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iajEgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqMiA9IHR3b1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2FzT2JqZWN0UmVmZXJlbmNlZChvbmUsIGtleSwgb2JqZWN0cykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhc09iamVjdFJlZmVyZW5jZWQodHdvLCBrZXksIG9iamVjdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3Qob2JqMSkgJiYgaXNPYmplY3Qob2JqMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIxID0gb2JqZWN0cy5nZXQob2JqMSkgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyMiA9IG9iamVjdHMuZ2V0KG9iajIpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycjEucHVzaCh7IG9iajogb25lLCBrZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyMi5wdXNoKHsgb2JqOiB0d28sIGtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLnNldChvYmoxLCBhcnIxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLnNldChvYmoyLCBhcnIyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2VUd29PYmplY3RzKHJlc3VsdFtrZXldLCB0d29WYWx1ZSwgbGV2ZWwsIG9iamVjdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gdHdvO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIG9iamVjdCBoYXMgYmVlbiBhbHJlYWR5IHJlZmVyZW5jZVxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gd2FzT2JqZWN0UmVmZXJlbmNlZChvYmosIGtleSwgb2JqZWN0cykge1xuICAgIGNvbnN0IGFyciA9IG9iamVjdHMuZ2V0KG9ialtrZXldKSB8fCBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IGFyci5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IGFycltpXTtcbiAgICAgICAgaWYgKGluZm8ua2V5ID09PSBrZXkgJiYgaW5mby5vYmogPT09IG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gKCFpc1ByaW1pdGl2ZSh2YWx1ZSkgJiZcbiAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICFpc0Z1bmN0aW9uKHZhbHVlKSAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKTtcbn1cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgfHxcbiAgICAgICAgdmFsdWUgPT09IG51bGwpO1xufVxuZnVuY3Rpb24gc2hvdWxkTWVyZ2Uob25lLCB0d28pIHtcbiAgICBpZiAoISgwLCBsb2Rhc2hfbWVyZ2VfMS5pc1BsYWluT2JqZWN0KShvbmUpIHx8ICEoMCwgbG9kYXNoX21lcmdlXzEuaXNQbGFpbk9iamVjdCkodHdvKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNhbGxXaXRoVGltZW91dCA9IGV4cG9ydHMuVGltZW91dEVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBFcnJvciB0aGF0IGlzIHRocm93biBvbiB0aW1lb3V0cy5cbiAqL1xuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIC8vIG1hbnVhbGx5IGFkanVzdCBwcm90b3R5cGUgdG8gcmV0YWluIGBpbnN0YW5jZW9mYCBmdW5jdGlvbmFsaXR5IHdoZW4gdGFyZ2V0aW5nIEVTNSwgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQtd2lraS9ibG9iL21haW4vQnJlYWtpbmctQ2hhbmdlcy5tZCNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFRpbWVvdXRFcnJvci5wcm90b3R5cGUpO1xuICAgIH1cbn1cbmV4cG9ydHMuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuLyoqXG4gKiBBZGRzIGEgdGltZW91dCB0byBhIHByb21pc2UgYW5kIHJlamVjdHMgaWYgdGhlIHNwZWNpZmllZCB0aW1lb3V0IGhhcyBlbGFwc2VkLiBBbHNvIHJlamVjdHMgaWYgdGhlIHNwZWNpZmllZCBwcm9taXNlXG4gKiByZWplY3RzLCBhbmQgcmVzb2x2ZXMgaWYgdGhlIHNwZWNpZmllZCBwcm9taXNlIHJlc29sdmVzLlxuICpcbiAqIDxwPiBOT1RFOiB0aGlzIG9wZXJhdGlvbiB3aWxsIGNvbnRpbnVlIGV2ZW4gYWZ0ZXIgaXQgdGhyb3dzIGEge0BsaW5rIFRpbWVvdXRFcnJvcn0uXG4gKlxuICogQHBhcmFtIHByb21pc2UgcHJvbWlzZSB0byB1c2Ugd2l0aCB0aW1lb3V0LlxuICogQHBhcmFtIHRpbWVvdXQgdGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHJlamVjdGVkLlxuICovXG5mdW5jdGlvbiBjYWxsV2l0aFRpbWVvdXQocHJvbWlzZSwgdGltZW91dCkge1xuICAgIGxldCB0aW1lb3V0SGFuZGxlO1xuICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gdGltZW91dEZ1bmN0aW9uKF9yZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZW91dEhhbmRsZXIoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IFRpbWVvdXRFcnJvcignT3BlcmF0aW9uIHRpbWVkIG91dC4nKSk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3Byb21pc2UsIHRpbWVvdXRQcm9taXNlXSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG59XG5leHBvcnRzLmNhbGxXaXRoVGltZW91dCA9IGNhbGxXaXRoVGltZW91dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNVcmxJZ25vcmVkID0gZXhwb3J0cy51cmxNYXRjaGVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIHVybE1hdGNoZXModXJsLCB1cmxUb01hdGNoKSB7XG4gICAgaWYgKHR5cGVvZiB1cmxUb01hdGNoID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdXJsID09PSB1cmxUb01hdGNoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdXJsLm1hdGNoKHVybFRvTWF0Y2gpO1xuICAgIH1cbn1cbmV4cG9ydHMudXJsTWF0Y2hlcyA9IHVybE1hdGNoZXM7XG4vKipcbiAqIENoZWNrIGlmIHtAcGFyYW0gdXJsfSBzaG91bGQgYmUgaWdub3JlZCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IHtAcGFyYW0gaWdub3JlZFVybHN9XG4gKiBAcGFyYW0gdXJsXG4gKiBAcGFyYW0gaWdub3JlZFVybHNcbiAqL1xuZnVuY3Rpb24gaXNVcmxJZ25vcmVkKHVybCwgaWdub3JlZFVybHMpIHtcbiAgICBpZiAoIWlnbm9yZWRVcmxzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpZ25vcmVVcmwgb2YgaWdub3JlZFVybHMpIHtcbiAgICAgICAgaWYgKHVybE1hdGNoZXModXJsLCBpZ25vcmVVcmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLmlzVXJsSWdub3JlZCA9IGlzVXJsSWdub3JlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVybC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGVmZXJyZWQgPSB2b2lkIDA7XG5jbGFzcyBEZWZlcnJlZCB7XG4gICAgX3Byb21pc2U7XG4gICAgX3Jlc29sdmU7XG4gICAgX3JlamVjdDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICAgIH1cbiAgICByZXNvbHZlKHZhbCkge1xuICAgICAgICB0aGlzLl9yZXNvbHZlKHZhbCk7XG4gICAgfVxuICAgIHJlamVjdChlcnIpIHtcbiAgICAgICAgdGhpcy5fcmVqZWN0KGVycik7XG4gICAgfVxufVxuZXhwb3J0cy5EZWZlcnJlZCA9IERlZmVycmVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvbWlzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmluZE9uY2VGdXR1cmUgPSB2b2lkIDA7XG5jb25zdCBwcm9taXNlXzEgPSByZXF1aXJlKFwiLi9wcm9taXNlXCIpO1xuLyoqXG4gKiBCaW5kIHRoZSBjYWxsYmFjayBhbmQgb25seSBpbnZva2UgdGhlIGNhbGxiYWNrIG9uY2UgcmVnYXJkbGVzcyBob3cgbWFueSB0aW1lcyBgQmluZE9uY2VGdXR1cmUuY2FsbGAgaXMgaW52b2tlZC5cbiAqL1xuY2xhc3MgQmluZE9uY2VGdXR1cmUge1xuICAgIF9pc0NhbGxlZCA9IGZhbHNlO1xuICAgIF9kZWZlcnJlZCA9IG5ldyBwcm9taXNlXzEuRGVmZXJyZWQoKTtcbiAgICBfY2FsbGJhY2s7XG4gICAgX3RoYXQ7XG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIHRoYXQpIHtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5fdGhhdCA9IHRoYXQ7XG4gICAgfVxuICAgIGdldCBpc0NhbGxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2FsbGVkO1xuICAgIH1cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmVycmVkLnByb21pc2U7XG4gICAgfVxuICAgIGNhbGwoLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuX2lzQ2FsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jYWxsYmFjay5jYWxsKHRoaXMuX3RoYXQsIC4uLmFyZ3MpKS50aGVuKHZhbCA9PiB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHZhbCksIGVyciA9PiB0aGlzLl9kZWZlcnJlZC5yZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmZXJyZWQucmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmVycmVkLnByb21pc2U7XG4gICAgfVxufVxuZXhwb3J0cy5CaW5kT25jZUZ1dHVyZSA9IEJpbmRPbmNlRnV0dXJlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FsbGJhY2suanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGlhZ0xvZ0xldmVsRnJvbVN0cmluZyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBsb2dMZXZlbE1hcCA9IHtcbiAgICBBTEw6IGFwaV8xLkRpYWdMb2dMZXZlbC5BTEwsXG4gICAgVkVSQk9TRTogYXBpXzEuRGlhZ0xvZ0xldmVsLlZFUkJPU0UsXG4gICAgREVCVUc6IGFwaV8xLkRpYWdMb2dMZXZlbC5ERUJVRyxcbiAgICBJTkZPOiBhcGlfMS5EaWFnTG9nTGV2ZWwuSU5GTyxcbiAgICBXQVJOOiBhcGlfMS5EaWFnTG9nTGV2ZWwuV0FSTixcbiAgICBFUlJPUjogYXBpXzEuRGlhZ0xvZ0xldmVsLkVSUk9SLFxuICAgIE5PTkU6IGFwaV8xLkRpYWdMb2dMZXZlbC5OT05FLFxufTtcbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBhIHtAbGluayBEaWFnTG9nTGV2ZWx9LCBkZWZhdWx0cyB0byB7QGxpbmsgRGlhZ0xvZ0xldmVsfSBpZiB0aGUgbG9nIGxldmVsIGRvZXMgbm90IGV4aXN0IG9yIHVuZGVmaW5lZCBpZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkLlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRpYWdMb2dMZXZlbEZyb21TdHJpbmcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAvLyBkb24ndCBmYWxsIGJhY2sgdG8gZGVmYXVsdCAtIG5vIHZhbHVlIHNldCBoYXMgZGlmZmVyZW50IHNlbWFudGljcyBmb3Igw7pzIHRoYW4gYW4gaW5jb3JyZWN0IHZhbHVlIChkbyBub3Qgc2V0IHZzLiBmYWxsIGJhY2sgdG8gZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRMb2dMZXZlbCA9IGxvZ0xldmVsTWFwW3ZhbHVlLnRvVXBwZXJDYXNlKCldO1xuICAgIGlmIChyZXNvbHZlZExvZ0xldmVsID09IG51bGwpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbmtub3duIGxvZyBsZXZlbCBcIiR7dmFsdWV9XCIsIGV4cGVjdGVkIG9uZSBvZiAke09iamVjdC5rZXlzKGxvZ0xldmVsTWFwKX0sIHVzaW5nIGRlZmF1bHRgKTtcbiAgICAgICAgcmV0dXJuIGFwaV8xLkRpYWdMb2dMZXZlbC5JTkZPO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWRMb2dMZXZlbDtcbn1cbmV4cG9ydHMuZGlhZ0xvZ0xldmVsRnJvbVN0cmluZyA9IGRpYWdMb2dMZXZlbEZyb21TdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fZXhwb3J0ID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc3VwcHJlc3NfdHJhY2luZ18xID0gcmVxdWlyZShcIi4uL3RyYWNlL3N1cHByZXNzLXRyYWNpbmdcIik7XG4vKipcbiAqIEBpbnRlcm5hbFxuICogU2hhcmVkIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSBFeHBvcnRlcnMgd2hpbGUgZXhwb3J0aW5nIGRhdGEsIGluY2x1ZGluZyBzdXBwcmVzc2lvbiBvZiBUcmFjZXMuXG4gKi9cbmZ1bmN0aW9uIF9leHBvcnQoZXhwb3J0ZXIsIGFyZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgLy8gcHJldmVudCBkb3duc3RyZWFtIGV4cG9ydGVyIGNhbGxzIGZyb20gZ2VuZXJhdGluZyBzcGFuc1xuICAgICAgICBhcGlfMS5jb250ZXh0LndpdGgoKDAsIHN1cHByZXNzX3RyYWNpbmdfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBvcnRlci5leHBvcnQoYXJnLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5fZXhwb3J0ID0gX2V4cG9ydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbnRlcm5hbCA9IGV4cG9ydHMuZGlhZ0xvZ0xldmVsRnJvbVN0cmluZyA9IGV4cG9ydHMuQmluZE9uY2VGdXR1cmUgPSBleHBvcnRzLnVybE1hdGNoZXMgPSBleHBvcnRzLmlzVXJsSWdub3JlZCA9IGV4cG9ydHMuY2FsbFdpdGhUaW1lb3V0ID0gZXhwb3J0cy5UaW1lb3V0RXJyb3IgPSBleHBvcnRzLm1lcmdlID0gZXhwb3J0cy5UcmFjZVN0YXRlID0gZXhwb3J0cy51bnN1cHByZXNzVHJhY2luZyA9IGV4cG9ydHMuc3VwcHJlc3NUcmFjaW5nID0gZXhwb3J0cy5pc1RyYWNpbmdTdXBwcmVzc2VkID0gZXhwb3J0cy5zZXRSUENNZXRhZGF0YSA9IGV4cG9ydHMuZ2V0UlBDTWV0YWRhdGEgPSBleHBvcnRzLmRlbGV0ZVJQQ01ldGFkYXRhID0gZXhwb3J0cy5SUENUeXBlID0gZXhwb3J0cy5wYXJzZVRyYWNlUGFyZW50ID0gZXhwb3J0cy5XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yID0gZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVIgPSBleHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIgPSBleHBvcnRzLkNvbXBvc2l0ZVByb3BhZ2F0b3IgPSBleHBvcnRzLm90cGVyZm9ybWFuY2UgPSBleHBvcnRzLmdldFN0cmluZ0xpc3RGcm9tRW52ID0gZXhwb3J0cy5nZXROdW1iZXJGcm9tRW52ID0gZXhwb3J0cy5nZXRCb29sZWFuRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGV4cG9ydHMuX2dsb2JhbFRoaXMgPSBleHBvcnRzLlNES19JTkZPID0gZXhwb3J0cy5wYXJzZUtleVBhaXJzSW50b1JlY29yZCA9IGV4cG9ydHMuRXhwb3J0UmVzdWx0Q29kZSA9IGV4cG9ydHMudW5yZWZUaW1lciA9IGV4cG9ydHMudGltZUlucHV0VG9IclRpbWUgPSBleHBvcnRzLm1pbGxpc1RvSHJUaW1lID0gZXhwb3J0cy5pc1RpbWVJbnB1dEhyVGltZSA9IGV4cG9ydHMuaXNUaW1lSW5wdXQgPSBleHBvcnRzLmhyVGltZVRvVGltZVN0YW1wID0gZXhwb3J0cy5oclRpbWVUb05hbm9zZWNvbmRzID0gZXhwb3J0cy5oclRpbWVUb01pbGxpc2Vjb25kcyA9IGV4cG9ydHMuaHJUaW1lVG9NaWNyb3NlY29uZHMgPSBleHBvcnRzLmhyVGltZUR1cmF0aW9uID0gZXhwb3J0cy5oclRpbWUgPSBleHBvcnRzLmdldFRpbWVPcmlnaW4gPSBleHBvcnRzLmFkZEhyVGltZXMgPSBleHBvcnRzLmxvZ2dpbmdFcnJvckhhbmRsZXIgPSBleHBvcnRzLnNldEdsb2JhbEVycm9ySGFuZGxlciA9IGV4cG9ydHMuZ2xvYmFsRXJyb3JIYW5kbGVyID0gZXhwb3J0cy5zYW5pdGl6ZUF0dHJpYnV0ZXMgPSBleHBvcnRzLmlzQXR0cmlidXRlVmFsdWUgPSBleHBvcnRzLkFuY2hvcmVkQ2xvY2sgPSBleHBvcnRzLlczQ0JhZ2dhZ2VQcm9wYWdhdG9yID0gdm9pZCAwO1xudmFyIFczQ0JhZ2dhZ2VQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9iYWdnYWdlL3Byb3BhZ2F0aW9uL1czQ0JhZ2dhZ2VQcm9wYWdhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVzNDQmFnZ2FnZVByb3BhZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFczQ0JhZ2dhZ2VQcm9wYWdhdG9yXzEuVzNDQmFnZ2FnZVByb3BhZ2F0b3I7IH0gfSk7XG52YXIgYW5jaG9yZWRfY2xvY2tfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9hbmNob3JlZC1jbG9ja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFuY2hvcmVkQ2xvY2tcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuY2hvcmVkX2Nsb2NrXzEuQW5jaG9yZWRDbG9jazsgfSB9KTtcbnZhciBhdHRyaWJ1dGVzXzEgPSByZXF1aXJlKFwiLi9jb21tb24vYXR0cmlidXRlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQXR0cmlidXRlVmFsdWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF0dHJpYnV0ZXNfMS5pc0F0dHJpYnV0ZVZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2FuaXRpemVBdHRyaWJ1dGVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdHRyaWJ1dGVzXzEuc2FuaXRpemVBdHRyaWJ1dGVzOyB9IH0pO1xudmFyIGdsb2JhbF9lcnJvcl9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9jb21tb24vZ2xvYmFsLWVycm9yLWhhbmRsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnbG9iYWxFcnJvckhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JhbF9lcnJvcl9oYW5kbGVyXzEuZ2xvYmFsRXJyb3JIYW5kbGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0R2xvYmFsRXJyb3JIYW5kbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnbG9iYWxfZXJyb3JfaGFuZGxlcl8xLnNldEdsb2JhbEVycm9ySGFuZGxlcjsgfSB9KTtcbnZhciBsb2dnaW5nX2Vycm9yX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9sb2dnaW5nLWVycm9yLWhhbmRsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2dnaW5nRXJyb3JIYW5kbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dnaW5nX2Vycm9yX2hhbmRsZXJfMS5sb2dnaW5nRXJyb3JIYW5kbGVyOyB9IH0pO1xudmFyIHRpbWVfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi90aW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkSHJUaW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmFkZEhyVGltZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRUaW1lT3JpZ2luXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuZ2V0VGltZU9yaWdpbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhyVGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhyVGltZUR1cmF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaHJUaW1lRHVyYXRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoclRpbWVUb01pY3Jvc2Vjb25kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvTWljcm9zZWNvbmRzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lVG9NaWxsaXNlY29uZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5oclRpbWVUb01pbGxpc2Vjb25kczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhyVGltZVRvTmFub3NlY29uZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5oclRpbWVUb05hbm9zZWNvbmRzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lVG9UaW1lU3RhbXBcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5oclRpbWVUb1RpbWVTdGFtcDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVGltZUlucHV0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaXNUaW1lSW5wdXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1RpbWVJbnB1dEhyVGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmlzVGltZUlucHV0SHJUaW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWlsbGlzVG9IclRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5taWxsaXNUb0hyVGltZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRpbWVJbnB1dFRvSHJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEudGltZUlucHV0VG9IclRpbWU7IH0gfSk7XG52YXIgdGltZXJfdXRpbF8xID0gcmVxdWlyZShcIi4vY29tbW9uL3RpbWVyLXV0aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnJlZlRpbWVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lcl91dGlsXzEudW5yZWZUaW1lcjsgfSB9KTtcbnZhciBFeHBvcnRSZXN1bHRfMSA9IHJlcXVpcmUoXCIuL0V4cG9ydFJlc3VsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV4cG9ydFJlc3VsdENvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEV4cG9ydFJlc3VsdF8xLkV4cG9ydFJlc3VsdENvZGU7IH0gfSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL2JhZ2dhZ2UvdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZUtleVBhaXJzSW50b1JlY29yZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5wYXJzZUtleVBhaXJzSW50b1JlY29yZDsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTREtfSU5GT1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5TREtfSU5GTzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9nbG9iYWxUaGlzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLl9nbG9iYWxUaGlzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5nZXRTdHJpbmdGcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Qm9vbGVhbkZyb21FbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuZ2V0Qm9vbGVhbkZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLmdldE51bWJlckZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTdHJpbmdMaXN0RnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5nZXRTdHJpbmdMaXN0RnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm90cGVyZm9ybWFuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZTsgfSB9KTtcbnZhciBjb21wb3NpdGVfMSA9IHJlcXVpcmUoXCIuL3Byb3BhZ2F0aW9uL2NvbXBvc2l0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbXBvc2l0ZVByb3BhZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbXBvc2l0ZV8xLkNvbXBvc2l0ZVByb3BhZ2F0b3I7IH0gfSk7XG52YXIgVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcl8xID0gcmVxdWlyZShcIi4vdHJhY2UvVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRSQUNFX1BBUkVOVF9IRUFERVJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3JfMS5UUkFDRV9QQVJFTlRfSEVBREVSOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVFJBQ0VfU1RBVEVfSEVBREVSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXzEuVFJBQ0VfU1RBVEVfSEVBREVSOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcl8xLlczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVRyYWNlUGFyZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXzEucGFyc2VUcmFjZVBhcmVudDsgfSB9KTtcbnZhciBycGNfbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL3RyYWNlL3JwYy1tZXRhZGF0YVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJQQ1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19tZXRhZGF0YV8xLlJQQ1R5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxldGVSUENNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuZGVsZXRlUlBDTWV0YWRhdGE7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRSUENNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuZ2V0UlBDTWV0YWRhdGE7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRSUENNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuc2V0UlBDTWV0YWRhdGE7IH0gfSk7XG52YXIgc3VwcHJlc3NfdHJhY2luZ18xID0gcmVxdWlyZShcIi4vdHJhY2Uvc3VwcHJlc3MtdHJhY2luZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVHJhY2luZ1N1cHByZXNzZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1cHByZXNzX3RyYWNpbmdfMS5pc1RyYWNpbmdTdXBwcmVzc2VkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VwcHJlc3NUcmFjaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdXBwcmVzc190cmFjaW5nXzEuc3VwcHJlc3NUcmFjaW5nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdXBwcmVzc1RyYWNpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1cHByZXNzX3RyYWNpbmdfMS51bnN1cHByZXNzVHJhY2luZzsgfSB9KTtcbnZhciBUcmFjZVN0YXRlXzEgPSByZXF1aXJlKFwiLi90cmFjZS9UcmFjZVN0YXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHJhY2VTdGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVHJhY2VTdGF0ZV8xLlRyYWNlU3RhdGU7IH0gfSk7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL21lcmdlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlXzEubWVyZ2U7IH0gfSk7XG52YXIgdGltZW91dF8xID0gcmVxdWlyZShcIi4vdXRpbHMvdGltZW91dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLlRpbWVvdXRFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbGxXaXRoVGltZW91dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLmNhbGxXaXRoVGltZW91dDsgfSB9KTtcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL3VybFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVXJsSWdub3JlZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXJsXzEuaXNVcmxJZ25vcmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXJsTWF0Y2hlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXJsXzEudXJsTWF0Y2hlczsgfSB9KTtcbnZhciBjYWxsYmFja18xID0gcmVxdWlyZShcIi4vdXRpbHMvY2FsbGJhY2tcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5kT25jZUZ1dHVyZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbGJhY2tfMS5CaW5kT25jZUZ1dHVyZTsgfSB9KTtcbnZhciBjb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlscy9jb25maWd1cmF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlhZ0xvZ0xldmVsRnJvbVN0cmluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlndXJhdGlvbl8xLmRpYWdMb2dMZXZlbEZyb21TdHJpbmc7IH0gfSk7XG5jb25zdCBleHBvcnRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvZXhwb3J0ZXJcIik7XG5leHBvcnRzLmludGVybmFsID0ge1xuICAgIF9leHBvcnQ6IGV4cG9ydGVyXzEuX2V4cG9ydCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8vIHNyYy9oZWxwZXIvc3RyZWFtaW5nL3N0cmVhbS50c1xuaW1wb3J0IHsgU3RyZWFtaW5nQXBpIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmVhbS5qc1wiO1xuaW1wb3J0IHsgaXNPbGRCdW5WZXJzaW9uIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBjb250ZXh0U3Rhc2ggPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBzdHJlYW0gPSAoYywgY2IsIG9uRXJyb3IpID0+IHtcbiAgY29uc3QgeyByZWFkYWJsZSwgd3JpdGFibGUgfSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKTtcbiAgY29uc3Qgc3RyZWFtMiA9IG5ldyBTdHJlYW1pbmdBcGkod3JpdGFibGUsIHJlYWRhYmxlKTtcbiAgaWYgKGlzT2xkQnVuVmVyc2lvbigpKSB7XG4gICAgYy5yZXEucmF3LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4ge1xuICAgICAgaWYgKCFzdHJlYW0yLmNsb3NlZCkge1xuICAgICAgICBzdHJlYW0yLmFib3J0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY29udGV4dFN0YXNoLnNldChzdHJlYW0yLnJlc3BvbnNlUmVhZGFibGUsIGMpO1xuICAoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYihzdHJlYW0yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSA9PT0gdm9pZCAwKSB7XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBvbkVycm9yKSB7XG4gICAgICAgIGF3YWl0IG9uRXJyb3IoZSwgc3RyZWFtMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzdHJlYW0yLmNsb3NlKCk7XG4gICAgfVxuICB9KSgpO1xuICByZXR1cm4gYy5uZXdSZXNwb25zZShzdHJlYW0yLnJlc3BvbnNlUmVhZGFibGUpO1xufTtcbmV4cG9ydCB7XG4gIHN0cmVhbVxufTtcbiIsCiAgICAiLy8gc3JjL2hlbHBlci9zdHJlYW1pbmcvc3NlLnRzXG5pbXBvcnQgeyBIdG1sRXNjYXBlZENhbGxiYWNrUGhhc2UsIHJlc29sdmVDYWxsYmFjayB9IGZyb20gXCIuLi8uLi91dGlscy9odG1sLmpzXCI7XG5pbXBvcnQgeyBTdHJlYW1pbmdBcGkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyZWFtLmpzXCI7XG5pbXBvcnQgeyBpc09sZEJ1blZlcnNpb24gfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIFNTRVN0cmVhbWluZ0FwaSA9IGNsYXNzIGV4dGVuZHMgU3RyZWFtaW5nQXBpIHtcbiAgY29uc3RydWN0b3Iod3JpdGFibGUsIHJlYWRhYmxlKSB7XG4gICAgc3VwZXIod3JpdGFibGUsIHJlYWRhYmxlKTtcbiAgfVxuICBhc3luYyB3cml0ZVNTRShtZXNzYWdlKSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc29sdmVDYWxsYmFjayhtZXNzYWdlLmRhdGEsIEh0bWxFc2NhcGVkQ2FsbGJhY2tQaGFzZS5TdHJpbmdpZnksIGZhbHNlLCB7fSk7XG4gICAgY29uc3QgZGF0YUxpbmVzID0gZGF0YS5zcGxpdChcIlxcblwiKS5tYXAoKGxpbmUpID0+IHtcbiAgICAgIHJldHVybiBgZGF0YTogJHtsaW5lfWA7XG4gICAgfSkuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzc2VEYXRhID0gW1xuICAgICAgbWVzc2FnZS5ldmVudCAmJiBgZXZlbnQ6ICR7bWVzc2FnZS5ldmVudH1gLFxuICAgICAgZGF0YUxpbmVzLFxuICAgICAgbWVzc2FnZS5pZCAmJiBgaWQ6ICR7bWVzc2FnZS5pZH1gLFxuICAgICAgbWVzc2FnZS5yZXRyeSAmJiBgcmV0cnk6ICR7bWVzc2FnZS5yZXRyeX1gXG4gICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKSArIFwiXFxuXFxuXCI7XG4gICAgYXdhaXQgdGhpcy53cml0ZShzc2VEYXRhKTtcbiAgfVxufTtcbnZhciBydW4gPSBhc3luYyAoc3RyZWFtLCBjYiwgb25FcnJvcikgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IGNiKHN0cmVhbSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIG9uRXJyb3IpIHtcbiAgICAgIGF3YWl0IG9uRXJyb3IoZSwgc3RyZWFtKTtcbiAgICAgIGF3YWl0IHN0cmVhbS53cml0ZVNTRSh7XG4gICAgICAgIGV2ZW50OiBcImVycm9yXCIsXG4gICAgICAgIGRhdGE6IGUubWVzc2FnZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0cmVhbS5jbG9zZSgpO1xuICB9XG59O1xudmFyIGNvbnRleHRTdGFzaCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIHN0cmVhbVNTRSA9IChjLCBjYiwgb25FcnJvcikgPT4ge1xuICBjb25zdCB7IHJlYWRhYmxlLCB3cml0YWJsZSB9ID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpO1xuICBjb25zdCBzdHJlYW0gPSBuZXcgU1NFU3RyZWFtaW5nQXBpKHdyaXRhYmxlLCByZWFkYWJsZSk7XG4gIGlmIChpc09sZEJ1blZlcnNpb24oKSkge1xuICAgIGMucmVxLnJhdy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICAgIGlmICghc3RyZWFtLmNsb3NlZCkge1xuICAgICAgICBzdHJlYW0uYWJvcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjb250ZXh0U3Rhc2guc2V0KHN0cmVhbS5yZXNwb25zZVJlYWRhYmxlLCBjKTtcbiAgYy5oZWFkZXIoXCJUcmFuc2Zlci1FbmNvZGluZ1wiLCBcImNodW5rZWRcIik7XG4gIGMuaGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9ldmVudC1zdHJlYW1cIik7XG4gIGMuaGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiLCBcIm5vLWNhY2hlXCIpO1xuICBjLmhlYWRlcihcIkNvbm5lY3Rpb25cIiwgXCJrZWVwLWFsaXZlXCIpO1xuICBydW4oc3RyZWFtLCBjYiwgb25FcnJvcik7XG4gIHJldHVybiBjLm5ld1Jlc3BvbnNlKHN0cmVhbS5yZXNwb25zZVJlYWRhYmxlKTtcbn07XG5leHBvcnQge1xuICBTU0VTdHJlYW1pbmdBcGksXG4gIHN0cmVhbVNTRVxufTtcbiIsCiAgICAiLy8gc3JjL2hlbHBlci9zdHJlYW1pbmcvdGV4dC50c1xuaW1wb3J0IHsgVEVYVF9QTEFJTiB9IGZyb20gXCIuLi8uLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xudmFyIHN0cmVhbVRleHQgPSAoYywgY2IsIG9uRXJyb3IpID0+IHtcbiAgYy5oZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgVEVYVF9QTEFJTik7XG4gIGMuaGVhZGVyKFwiWC1Db250ZW50LVR5cGUtT3B0aW9uc1wiLCBcIm5vc25pZmZcIik7XG4gIGMuaGVhZGVyKFwiVHJhbnNmZXItRW5jb2RpbmdcIiwgXCJjaHVua2VkXCIpO1xuICByZXR1cm4gc3RyZWFtKGMsIGNiLCBvbkVycm9yKTtcbn07XG5leHBvcnQge1xuICBzdHJlYW1UZXh0XG59O1xuIiwKICAgICIvLyBzcmMvaGVscGVyL3N0cmVhbWluZy9pbmRleC50c1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSBcIi4vc3RyZWFtLmpzXCI7XG5pbXBvcnQgeyBzdHJlYW1TU0UsIFNTRVN0cmVhbWluZ0FwaSB9IGZyb20gXCIuL3NzZS5qc1wiO1xuaW1wb3J0IHsgc3RyZWFtVGV4dCB9IGZyb20gXCIuL3RleHQuanNcIjtcbmV4cG9ydCB7XG4gIFNTRVN0cmVhbWluZ0FwaSxcbiAgc3RyZWFtLFxuICBzdHJlYW1TU0UsXG4gIHN0cmVhbVRleHRcbn07XG4iLAogICAgImltcG9ydCB7IHN0cmVhbSBhcyBob25vU3RyZWFtIH0gZnJvbSAnaG9uby9zdHJlYW1pbmcnO1xuaW1wb3J0IHsgZ2V0QWdlbnRBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJy4uL19jb250ZXh0Jztcbi8qKlxuICogQ29udGV4dCB2YXJpYWJsZSBrZXkgZm9yIHN0cmVhbSBjb21wbGV0aW9uIHByb21pc2UuXG4gKiBVc2VkIGJ5IG1pZGRsZXdhcmUgdG8gZGVmZXIgc2Vzc2lvbi90aHJlYWQgc2F2aW5nIHVudGlsIHN0cmVhbSBjb21wbGV0ZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNUUkVBTV9ET05FX1BST01JU0VfS0VZID0gJ19zdHJlYW1Eb25lUHJvbWlzZSc7XG4vKipcbiAqIENvbnRleHQgdmFyaWFibGUga2V5IHRvIGluZGljYXRlIHRoaXMgaXMgYSBzdHJlYW1pbmcgcmVzcG9uc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IElTX1NUUkVBTUlOR19SRVNQT05TRV9LRVkgPSAnX2lzU3RyZWFtaW5nUmVzcG9uc2UnO1xuLyoqXG4gKiBGb3JtYXQgYW4gU1NFIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBTU0Ugc3BlY2lmaWNhdGlvbi5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NlcnZlci1zZW50X2V2ZW50cy9Vc2luZ19zZXJ2ZXItc2VudF9ldmVudHNcbiAqL1xuZnVuY3Rpb24gZm9ybWF0U1NFTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgbGV0IHRleHQgPSAnJztcbiAgICBpZiAobWVzc2FnZS5ldmVudCkge1xuICAgICAgICB0ZXh0ICs9IGBldmVudDogJHttZXNzYWdlLmV2ZW50fVxcbmA7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkKSB7XG4gICAgICAgIHRleHQgKz0gYGlkOiAke21lc3NhZ2UuaWR9XFxuYDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlLnJldHJ5ID09PSAnbnVtYmVyJykge1xuICAgICAgICB0ZXh0ICs9IGByZXRyeTogJHttZXNzYWdlLnJldHJ5fVxcbmA7XG4gICAgfVxuICAgIC8vIERhdGEgY2FuIGJlIG11bHRpbGluZSAtIGVhY2ggbGluZSBuZWVkcyBpdHMgb3duIFwiZGF0YTpcIiBwcmVmaXhcbiAgICBjb25zdCBkYXRhTGluZXMgPSBtZXNzYWdlLmRhdGEuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZGF0YUxpbmVzKSB7XG4gICAgICAgIHRleHQgKz0gYGRhdGE6ICR7bGluZX1cXG5gO1xuICAgIH1cbiAgICAvLyBTU0UgbWVzc2FnZXMgYXJlIHRlcm1pbmF0ZWQgYnkgYSBibGFuayBsaW5lXG4gICAgdGV4dCArPSAnXFxuJztcbiAgICByZXR1cm4gdGV4dDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBTU0UgKFNlcnZlci1TZW50IEV2ZW50cykgbWlkZGxld2FyZSBmb3Igc3RyZWFtaW5nIHVwZGF0ZXMgdG8gY2xpZW50cy5cbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgSG9ubydzIHN0cmVhbSgpIGhlbHBlciBpbnN0ZWFkIG9mIHN0cmVhbVNTRSgpIHRvIGVuc3VyZVxuICogY29tcGF0aWJpbGl0eSB3aXRoIGFzeW5jIG9wZXJhdGlvbnMgdGhhdCBjb25zdW1lIFJlYWRhYmxlU3RyZWFtcyBpbnRlcm5hbGx5XG4gKiAobGlrZSBBSSBTREsncyBnZW5lcmF0ZVRleHQvZ2VuZXJhdGVPYmplY3QpLiBUaGUgc3RyZWFtKCkgaGVscGVyIHVzZXMgYSBmaXJlLWFuZC1mb3JnZXRcbiAqIHBhdHRlcm4gdGhhdCBhdm9pZHMgXCJSZWFkYWJsZVN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIHVzZWRcIiBlcnJvcnMuXG4gKlxuICogVXNlIHdpdGggcm91dGVyLmdldCgpIHRvIGNyZWF0ZSBhbiBTU0UgZW5kcG9pbnQ6XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNyZWF0ZVJvdXRlciwgc3NlIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbiAqXG4gKiBjb25zdCByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoKTtcbiAqXG4gKiByb3V0ZXIuZ2V0KCcvZXZlbnRzJywgc3NlKChjLCBzdHJlYW0pID0+IHtcbiAqICAgbGV0IGNvdW50ID0gMDtcbiAqICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gKiAgICAgc3RyZWFtLndyaXRlU1NFKHtcbiAqICAgICAgIGRhdGE6IGBFdmVudCAkeysrY291bnR9YCxcbiAqICAgICAgIGV2ZW50OiAndXBkYXRlJ1xuICogICAgIH0pO1xuICogICAgIGlmIChjb3VudCA+PSAxMCkge1xuICogICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gKiAgICAgICBzdHJlYW0uY2xvc2UoKTtcbiAqICAgICB9XG4gKiAgIH0sIDEwMDApO1xuICpcbiAqICAgc3RyZWFtLm9uQWJvcnQoKCkgPT4ge1xuICogICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICogICB9KTtcbiAqIH0pKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gSGFuZGxlciBmdW5jdGlvbiByZWNlaXZpbmcgY29udGV4dCBhbmQgU1NFIHN0cmVhbVxuICogQHJldHVybnMgSG9ubyBoYW5kbGVyIGZvciBTU0Ugc3RyZWFtaW5nXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2VudHVpdHkvc2RrL2lzc3Vlcy80NzFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNzZShoYW5kbGVyKSB7XG4gICAgcmV0dXJuIChjKSA9PiB7XG4gICAgICAgIGNvbnN0IGFzeW5jTG9jYWxTdG9yYWdlID0gZ2V0QWdlbnRBc3luY0xvY2FsU3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBjYXB0dXJlZENvbnRleHQgPSBhc3luY0xvY2FsU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgICAgICAvLyBUcmFjayBzdHJlYW0gY29tcGxldGlvbiBmb3IgZGVmZXJyZWQgc2Vzc2lvbi90aHJlYWQgc2F2aW5nXG4gICAgICAgIC8vIFRoaXMgcHJvbWlzZSByZXNvbHZlcyB3aGVuIHRoZSBzdHJlYW0gY2xvc2VzIChub3JtYWxseSBvciB2aWEgYWJvcnQpXG4gICAgICAgIGxldCByZXNvbHZlRG9uZTtcbiAgICAgICAgbGV0IHJlamVjdERvbmU7XG4gICAgICAgIGNvbnN0IGRvbmVQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZURvbmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgcmVqZWN0RG9uZSA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFByZXZlbnQgdW5oYW5kbGVkIHJlamVjdGlvbiB3YXJuaW5ncyBpZiBubyBtaWRkbGV3YXJlIGNvbnN1bWVzIGRvbmVQcm9taXNlLlxuICAgICAgICAvLyBUaGUgZXJyb3IgaXMgc3RpbGwgcHJvcGFnYXRlZCB2aWEgdGhlIHJlamVjdGlvbiBmb3IgbWlkZGxld2FyZSB0aGF0IGF3YWl0cyBpdC5cbiAgICAgICAgZG9uZVByb21pc2UuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eSAtIGVycm9yIGlzIGxvZ2dlZCBpbiBydW5JbkNvbnRleHQgY2F0Y2ggYmxvY2tcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElkZW1wb3RlbnQgZnVuY3Rpb24gdG8gbWFyayBzdHJlYW0gYXMgY29tcGxldGVkXG4gICAgICAgIGxldCBpc0RvbmUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbWFya0RvbmUgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RvbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiByZWplY3REb25lKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0RG9uZShlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNvbHZlRG9uZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVEb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIEV4cG9zZSBjb21wbGV0aW9uIHRyYWNraW5nIHRvIG1pZGRsZXdhcmVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgYy5zZXQoU1RSRUFNX0RPTkVfUFJPTUlTRV9LRVksIGRvbmVQcm9taXNlKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgYy5zZXQoSVNfU1RSRUFNSU5HX1JFU1BPTlNFX0tFWSwgdHJ1ZSk7XG4gICAgICAgIC8vIFNldCBTU0Utc3BlY2lmaWMgaGVhZGVyc1xuICAgICAgICBjLmhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvZXZlbnQtc3RyZWFtJyk7XG4gICAgICAgIGMuaGVhZGVyKCdDYWNoZS1Db250cm9sJywgJ25vLWNhY2hlJyk7XG4gICAgICAgIGMuaGVhZGVyKCdDb25uZWN0aW9uJywgJ2tlZXAtYWxpdmUnKTtcbiAgICAgICAgLy8gVXNlIGhvbm9TdHJlYW0gaW5zdGVhZCBvZiBob25vU3RyZWFtU1NFLlxuICAgICAgICAvLyBob25vU3RyZWFtIHVzZXMgYSBmaXJlLWFuZC1mb3JnZXQgYXN5bmMgSUlGRSBwYXR0ZXJuIHRoYXQgcmV0dXJucyB0aGUgUmVzcG9uc2VcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkgd2hpbGUgdGhlIGhhbmRsZXIgcnVucyBpbiB0aGUgYmFja2dyb3VuZC4gVGhpcyBpcyBjcml0aWNhbCBmb3JcbiAgICAgICAgLy8gY29tcGF0aWJpbGl0eSB3aXRoIEFJIFNESydzIGdlbmVyYXRlVGV4dC9nZW5lcmF0ZU9iamVjdCB3aGljaCB1c2UgZmV0Y2goKVxuICAgICAgICAvLyBpbnRlcm5hbGx5LiBXaXRoIGhvbm9TdHJlYW1TU0UsIHRoZSBjYWxsYmFjayBpcyBhd2FpdGVkIGJlZm9yZSByZXR1cm5pbmcsXG4gICAgICAgIC8vIHdoaWNoIGNhdXNlcyBcIlJlYWRhYmxlU3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gdXNlZFwiIGVycm9ycyB3aGVuIGZldGNoXG4gICAgICAgIC8vIHJlc3BvbnNlIHN0cmVhbXMgYXJlIGNvbnN1bWVkIGluIHRoZSBzYW1lIGFzeW5jIGNoYWluLlxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2VudHVpdHkvc2RrL2lzc3Vlcy80NzFcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGhvbm9TdHJlYW0oYywgYXN5bmMgKHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgICAgIC8vIFRyYWNrIGlmIHVzZXIgcmVnaXN0ZXJlZCBhbiBvbkFib3J0IGNhbGxiYWNrXG4gICAgICAgICAgICBsZXQgdXNlckFib3J0Q2FsbGJhY2s7XG4gICAgICAgICAgICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byB3cml0ZSBhbiBTU0UgbWVzc2FnZVxuICAgICAgICAgICAgY29uc3Qgd3JpdGVTU0VJbnRlcm5hbCA9IGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0U1NFTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBzLndyaXRlKGVuY29kZXIuZW5jb2RlKGZvcm1hdHRlZCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRTdHJlYW0gPSB7XG4gICAgICAgICAgICAgICAgd3JpdGU6IGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlU1NFSW50ZXJuYWwoeyBkYXRhOiBTdHJpbmcoZGF0YSkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZVNTRUludGVybmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZVNTRUludGVybmFsKHsgZGF0YTogU3RyaW5nKGRhdGEpIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JpdGVTU0U6IHdyaXRlU1NFSW50ZXJuYWwsXG4gICAgICAgICAgICAgICAgb25BYm9ydDogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJBYm9ydENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIHMub25BYm9ydCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIHN0cmVhbSBhcyBkb25lIG9uIGFib3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5jbG9zZT8uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIHN0cmVhbSBhcyBkb25lIG9uIGNsb3NlXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBBbHdheXMgcmVnaXN0ZXIgaW50ZXJuYWwgYWJvcnQgaGFuZGxlciBpZiB1c2VyIGRvZXNuJ3QgcmVnaXN0ZXIgb25lXG4gICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgdHJhY2sgY29tcGxldGlvbiBldmVuIGlmIHVzZXIgZG9lc24ndCBjYWxsIG9uQWJvcnRcbiAgICAgICAgICAgIHMub25BYm9ydCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF1c2VyQWJvcnRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG1hcmsgZG9uZSBpZiB1c2VyIGRpZG4ndCByZWdpc3RlciB0aGVpciBvd24gaGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAvLyAodGhlaXIgaGFuZGxlciB3cmFwcGVyIGFscmVhZHkgY2FsbHMgbWFya0RvbmUpXG4gICAgICAgICAgICAgICAgICAgIG1hcmtEb25lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBydW5JbkNvbnRleHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlcihjLCB3cmFwcGVkU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya0RvbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBMb2cgZXJyb3IgYnV0IGRvbid0IHJldGhyb3cgLSB3b3VsZCBiZSB1bmhhbmRsZWQgcmVqZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGMudmFyLmxvZ2dlcj8uZXJyb3I/LignU1NFIGhhbmRsZXIgZXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya0RvbmUoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gUnVuIGhhbmRsZXIgd2l0aCBBc3luY0xvY2FsU3RvcmFnZSBjb250ZXh0IHByb3BhZ2F0aW9uLlxuICAgICAgICAgICAgLy8gaG9ub1N0cmVhbSBhbHJlYWR5IHVzZXMgYSBmaXJlLWFuZC1mb3JnZXQgcGF0dGVybiBpbnRlcm5hbGx5LFxuICAgICAgICAgICAgLy8gc28gd2UgY2FuIHNhZmVseSBhd2FpdCBoZXJlIC0gdGhlIHJlc3BvbnNlIGlzIGFscmVhZHkgYmVpbmcgc2VudC5cbiAgICAgICAgICAgIGlmIChjYXB0dXJlZENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhc3luY0xvY2FsU3RvcmFnZS5ydW4oY2FwdHVyZWRDb250ZXh0LCBydW5JbkNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcnVuSW5Db250ZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zc2UuanMubWFwIiwKICAgICJpbXBvcnQgeyBjb250ZXh0LCBTcGFuU3RhdHVzQ29kZSwgdHJhY2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgaW50ZXJuYWwgfSBmcm9tICcuL2xvZ2dlci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xubGV0IHJ1bm5pbmcgPSAwO1xuLyoqXG4gKiByZXR1cm5zIHRydWUgaWYgd2FpdCB1bnRpbCBpcyBwZW5kaW5nXG4gKiBAcmV0dXJucyBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNXYWl0VW50aWxQZW5kaW5nKCkge1xuICAgIGludGVybmFsLmRlYnVnKCdoYXNXYWl0VW50aWxQZW5kaW5nIGNhbGxlZDogJWQnLCBydW5uaW5nKTtcbiAgICByZXR1cm4gcnVubmluZyA+IDA7XG59XG5jb25zdCBXYWl0VW50aWxJbnZhbGlkU3RhdGVFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignV2FpdFVudGlsSW52YWxpZFN0YXRlRXJyb3InLCAnd2FpdFVudGlsIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgd2FpdFVudGlsQWxsIGhhcyBiZWVuIGNhbGxlZCcpO1xuY29uc3QgV2FpdFVudGlsQWxsSW52YWxpZFN0YXRlRXJyb3IgPSBTdHJ1Y3R1cmVkRXJyb3IoJ1dhaXRVbnRpbEFsbEludmFsaWRTdGF0ZUVycm9yJywgJ3dhaXRVbnRpbEFsbCBjYW4gb25seSBiZSBjYWxsZWQgb25jZSBwZXIgaW5zdGFuY2UnKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdhaXRVbnRpbEhhbmRsZXIge1xuICAgIHByb21pc2VzO1xuICAgIHRyYWNlcjtcbiAgICBzdGFydGVkO1xuICAgIGhhc0NhbGxlZFdhaXRVbnRpbEFsbCA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHRyYWNlcikge1xuICAgICAgICB0aGlzLnRyYWNlciA9IHRyYWNlcjtcbiAgICAgICAgdGhpcy5wcm9taXNlcyA9IFtdO1xuICAgIH1cbiAgICB3YWl0VW50aWwocHJvbWlzZSkge1xuICAgICAgICBpZiAodGhpcy5oYXNDYWxsZWRXYWl0VW50aWxBbGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBXYWl0VW50aWxJbnZhbGlkU3RhdGVFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bm5pbmcrKztcbiAgICAgICAgaW50ZXJuYWwuZGVidWcoJ3dhaXQgdW50aWwgY2FsbGVkLCBydW5uaW5nOiAlZCcsIHJ1bm5pbmcpO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgIC8vIFN0YXJ0IGV4ZWN1dGlvbiBpbW1lZGlhdGVseSwgZG9uJ3QgZGVmZXIgaXRcbiAgICAgICAgY29uc3QgZXhlY3V0aW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBEYXRlLm5vdygpOyAvLy8gdGhpcyBmaXJzdCBleGVjdXRpb24gbWFya3MgdGhlIHN0YXJ0IHRpbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oJ3dhaXRVbnRpbCcsIHt9LCBjdXJyZW50Q29udGV4dCk7XG4gICAgICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IHRyYWNlLnNldFNwYW4oY3VycmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5kZWJ1Zygnc3RhcnRpbmcgd2FpdHVudGlsJyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC53aXRoKHNwYW5Db250ZXh0LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IHR5cGVvZiBwcm9taXNlID09PSAnZnVuY3Rpb24nID8gcHJvbWlzZSgpIDogcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmVzb2x2ZShyZXNvbHZlZFByb21pc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGludGVybmFsLmRlYnVnKCdjb21wbGV0ZWQgd2FpdHVudGlsJyk7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGV4KTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SIH0pO1xuICAgICAgICAgICAgICAgIC8vIExvZyB0aGUgZXJyb3IgYnV0IGRvbid0IHJlLXRocm93IC0gYmFja2dyb3VuZCB0YXNrcyBzaG91bGQgbmV2ZXIgY3Jhc2ggdGhlIHNlcnZlclxuICAgICAgICAgICAgICAgIGludGVybmFsLmVycm9yKCdCYWNrZ3JvdW5kIHRhc2sgZXJyb3I6ICVzJywgZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5PVEU6IHdlIG9ubHkgZGVjcmVtZW50IHdoZW4gdGhlIHByb21pc2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheSBpbiB3YWl0VW50aWxBbGxcbiAgICAgICAgfSkoKTtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGV4ZWN1dGluZyBwcm9taXNlIGZvciBjbGVhbnVwIHRyYWNraW5nXG4gICAgICAgIHRoaXMucHJvbWlzZXMucHVzaChleGVjdXRpbmdQcm9taXNlKTtcbiAgICB9XG4gICAgaGFzUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZXMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgYXN5bmMgd2FpdFVudGlsQWxsKGxvZ2dlciwgc2Vzc2lvbklkKSB7XG4gICAgICAgIGludGVybmFsLmRlYnVnKGDwn5SNIHdhaXRVbnRpbEFsbCgpIGNhbGxlZCBmb3Igc2Vzc2lvbiAke3Nlc3Npb25JZH0gKGNvdW50OiAlZClgLCBydW5uaW5nKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2FsbGVkV2FpdFVudGlsQWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgV2FpdFVudGlsQWxsSW52YWxpZFN0YXRlRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc0NhbGxlZFdhaXRVbnRpbEFsbCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnByb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaW50ZXJuYWwuZGVidWcoJ05vIHByb21pc2VzIHRvIHdhaXQgZm9yLCBleGVjdXRpbmcgZXZhbHMgZGlyZWN0bHknKTtcbiAgICAgICAgICAgIC8vIGF3YWl0IHRoaXMuZXhlY3V0ZUV2YWxzRm9yU2Vzc2lvbihsb2dnZXIsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW50ZXJuYWwuZGVidWcoYOKPsyBXYWl0aW5nIGZvciAke3RoaXMucHJvbWlzZXMubGVuZ3RofSBwcm9taXNlcyB0byBjb21wbGV0ZS4uLmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gUHJvbWlzZXMgYXJlIGFscmVhZHkgZXhlY3V0aW5nLCBqdXN0IHdhaXQgZm9yIHRoZW0gdG8gY29tcGxldGVcbiAgICAgICAgICAgIC8vIFVzZSBhbGxTZXR0bGVkIHNvIG9uZSBmYWlsaW5nIHByb21pc2UgZG9lc24ndCBzdG9wIG90aGVyc1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLnByb21pc2VzKTtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRlZDtcbiAgICAgICAgICAgIC8vIExvZyBhbnkgZmFpbHVyZXNcbiAgICAgICAgICAgIGNvbnN0IGZhaWx1cmVzID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc3RhdHVzID09PSAncmVqZWN0ZWQnKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCclZCBiYWNrZ3JvdW5kIHRhc2socykgZmFpbGVkIGR1cmluZyBleGVjdXRpb24nLCBmYWlsdXJlcy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJuYWwuZGVidWcoJ+KchSBBbGwgcHJvbWlzZXMgY29tcGxldGVkLCBtYXJraW5nIHNlc3Npb24gY29tcGxldGVkIChkdXJhdGlvbiAlZG1zKScsIGR1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignZXJyb3Igc2VuZGluZyBzZXNzaW9uIGNvbXBsZXRlZCcsIGV4KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJ1bm5pbmcgLT0gdGhpcy5wcm9taXNlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fd2FpdHVudGlsLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBNaWRkbGV3YXJlIGZhY3RvcmllcyBmb3IgVml0ZS1uYXRpdmUgYXJjaGl0ZWN0dXJlXG4gKiBFeHRyYWN0ZWQgZnJvbSBfc2VydmVyLnRzIHRvIGJlIHVzZWQgYnkgZ2VuZXJhdGVkIGVudHJ5IGZpbGVzXG4gKi9cbmltcG9ydCB7IGNyZWF0ZU1pZGRsZXdhcmUgfSBmcm9tICdob25vL2ZhY3RvcnknO1xuaW1wb3J0IHsgY29ycyB9IGZyb20gJ2hvbm8vY29ycyc7XG5pbXBvcnQgeyBjb21wcmVzcyB9IGZyb20gJ2hvbm8vY29tcHJlc3MnO1xuaW1wb3J0IHsgc2V0U2lnbmVkQ29va2llIH0gZnJvbSAnaG9uby9jb29raWUnO1xuaW1wb3J0IHsgY3JlYXRlVHJ1c3RlZENvcnNPcmlnaW4gfSBmcm9tICcuL2NvcnMnO1xuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnLi9hcHAnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4vc2Vzc2lvbic7XG5pbXBvcnQgeyBydW5JbkhUVFBDb250ZXh0IH0gZnJvbSAnLi9fY29udGV4dCc7XG5pbXBvcnQgeyBEVVJBVElPTl9IRUFERVIsIFRPS0VOU19IRUFERVIgfSBmcm9tICcuL190b2tlbnMnO1xuaW1wb3J0IHsgZXh0cmFjdFRyYWNlQ29udGV4dEZyb21SZXF1ZXN0IH0gZnJvbSAnLi9vdGVsL2h0dHAnO1xuaW1wb3J0IHsgY29udGV4dCwgU3BhbktpbmQsIFNwYW5TdGF0dXNDb2RlLCB0cmFjZSwgcHJvcGFnYXRpb24sIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IFRyYWNlU3RhdGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbmltcG9ydCAqIGFzIHJ1bnRpbWVDb25maWcgZnJvbSAnLi9fY29uZmlnJztcbmltcG9ydCB7IGdldFNlc3Npb25FdmVudFByb3ZpZGVyIH0gZnJvbSAnLi9fc2VydmljZXMnO1xuaW1wb3J0IHsgaW50ZXJuYWwgfSBmcm9tICcuL2xvZ2dlci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBTVFJFQU1fRE9ORV9QUk9NSVNFX0tFWSwgSVNfU1RSRUFNSU5HX1JFU1BPTlNFX0tFWSB9IGZyb20gJy4vaGFuZGxlcnMvc3NlJztcbmNvbnN0IFNFU1NJT05fSEVBREVSID0gJ3gtc2Vzc2lvbi1pZCc7XG5jb25zdCBUSFJFQURfSEVBREVSID0gJ3gtdGhyZWFkLWlkJztcbmNvbnN0IERFUExPWU1FTlRfSEVBREVSID0gJ3gtZGVwbG95bWVudCc7XG4vKipcbiAqIFBhdGhzIHRoYXQgc2hvdWxkIHNraXAgT1RFTCBzZXNzaW9uIHRyYWNraW5nLlxuICogVGhlc2Ugcm91dGVzIGFyZSBzdGlsbCBhY2Nlc3NpYmxlIGJ1dCB3b24ndCBjcmVhdGUgc2Vzc2lvbiBldmVudHMuXG4gKi9cbmNvbnN0IE9URUxfU0VTU0lPTl9TS0lQX1BBVEhTID0gbmV3IFNldChbXG4gICAgJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC93cycsXG4gICAgJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC9zYW1wbGUnLFxuICAgICcvX2FnZW50dWl0eS93b3JrYmVuY2gvc3RhdGUnLFxuICAgICcvX2FnZW50dWl0eS93b3JrYmVuY2gvbWV0YWRhdGEuanNvbicsXG4gICAgJy9fYWdlbnR1aXR5L3dlYmFuYWx5dGljcy9hbmFseXRpY3MuanMnLFxuICAgICcvX2FnZW50dWl0eS93ZWJhbmFseXRpY3Mvc2Vzc2lvbi5qcycsXG5dKTtcbmV4cG9ydCBjb25zdCBBR0VOVF9DT05URVhUX1BST1BFUlRJRVMgPSBbXG4gICAgJ2xvZ2dlcicsXG4gICAgJ3RyYWNlcicsXG4gICAgJ3Nlc3Npb25JZCcsXG4gICAgJ2t2JyxcbiAgICAnc3RyZWFtJyxcbiAgICAndmVjdG9yJyxcbiAgICAnc2FuZGJveCcsXG4gICAgJ3N0YXRlJyxcbiAgICAndGhyZWFkJyxcbiAgICAnc2Vzc2lvbicsXG4gICAgJ2NvbmZpZycsXG4gICAgJ2FwcCcsXG4gICAgJ3dhaXRVbnRpbCcsXG5dO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGluc3RhbGxDb250ZXh0UHJvcGVydHlIZWxwZXJzKGMpIHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIEFHRU5UX0NPTlRFWFRfUFJPUEVSVElFUykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbiByb3V0ZSBoYW5kbGVycywgdXNlIGMudmFyLiR7cHJvcGVydHl9IGluc3RlYWQgb2YgYy4ke3Byb3BlcnR5fS4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcHJvcGVydHkgJyR7cHJvcGVydHl9JyBpcyBhdmFpbGFibGUgb24gQWdlbnRDb250ZXh0IChmb3IgYWdlbnQgaGFuZGxlcnMpIGAgK1xuICAgICAgICAgICAgICAgICAgICBgYnV0IG11c3QgYmUgYWNjZXNzZWQgdmlhIGMudmFyIGluIEhvbm9Db250ZXh0IChyb3V0ZSBoYW5kbGVycykuYCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlIGJhc2UgbWlkZGxld2FyZSB0aGF0IHNldHMgdXAgY29udGV4dCB2YXJpYWJsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2VNaWRkbGV3YXJlKGNvbmZpZykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIGNyZWF0ZU1pZGRsZXdhcmUoYXN5bmMgKGMsIG5leHQpID0+IHtcbiAgICAgICAgYy5zZXQoJ2xvZ2dlcicsIGNvbmZpZy5sb2dnZXIpO1xuICAgICAgICBjLnNldCgndHJhY2VyJywgY29uZmlnLnRyYWNlcik7XG4gICAgICAgIGMuc2V0KCdtZXRlcicsIGNvbmZpZy5tZXRlcik7XG4gICAgICAgIC8vIEltcG9ydCBzZXJ2aWNlcyBkeW5hbWljYWxseSB0byBhdm9pZCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGNvbnN0IHsgZ2V0U2VydmljZXMgfSA9IGF3YWl0IGltcG9ydCgnLi9fc2VydmljZXMnKTtcbiAgICAgICAgY29uc3QgeyBnZXRBcHBTdGF0ZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2FwcCcpO1xuICAgICAgICBjLnNldCgnYXBwJywgZ2V0QXBwU3RhdGUoKSk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzID0gZ2V0U2VydmljZXMoKTtcbiAgICAgICAgYy5zZXQoJ2t2Jywgc2VydmljZXMua3YpO1xuICAgICAgICBjLnNldCgnc3RyZWFtJywgc2VydmljZXMuc3RyZWFtKTtcbiAgICAgICAgYy5zZXQoJ3ZlY3RvcicsIHNlcnZpY2VzLnZlY3Rvcik7XG4gICAgICAgIGMuc2V0KCdzYW5kYm94Jywgc2VydmljZXMuc2FuZGJveCk7XG4gICAgICAgIGluc3RhbGxDb250ZXh0UHJvcGVydHlIZWxwZXJzKGMpO1xuICAgICAgICBjb25zdCBpc1dlYlNvY2tldCA9IGMucmVxLmhlYWRlcigndXBncmFkZScpPy50b0xvd2VyQ2FzZSgpID09PSAnd2Vic29ja2V0JztcbiAgICAgICAgY29uc3Qgc2tpcExvZ2dpbmcgPSBjLnJlcS5wYXRoLnN0YXJ0c1dpdGgoJy9fYWdlbnR1aXR5LycpO1xuICAgICAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGlmICghc2tpcExvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJyVzICVzIHN0YXJ0ZWQnLCBjLnJlcS5tZXRob2QsIGMucmVxLnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJ1bkluSFRUUENvbnRleHQoYywgbmV4dCk7XG4gICAgICAgIGlmICghaXNXZWJTb2NrZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKChlbmRUaW1lIC0gc3RhcnRlZCkgLyAxMDAwKS50b0ZpeGVkKDEpO1xuICAgICAgICAgICAgYy5oZWFkZXIoRFVSQVRJT05fSEVBREVSLCBgJHtkdXJhdGlvbn1zYCk7XG4gICAgICAgICAgICAvLyBTZXQgZGVwbG95bWVudCBoZWFkZXIgZm9yIGFsbCByb3V0ZXNcbiAgICAgICAgICAgIGNvbnN0IGRlcGxveW1lbnRJZCA9IHJ1bnRpbWVDb25maWcuZ2V0RGVwbG95bWVudElkKCk7XG4gICAgICAgICAgICBpZiAoZGVwbG95bWVudElkKSB7XG4gICAgICAgICAgICAgICAgYy5oZWFkZXIoREVQTE9ZTUVOVF9IRUFERVIsIGRlcGxveW1lbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFza2lwTG9nZ2luZyAmJiAhaXNXZWJTb2NrZXQpIHtcbiAgICAgICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJyVzICVzIGNvbXBsZXRlZCAoJWQpIGluICVzbXMnLCBjLnJlcS5tZXRob2QsIGMucmVxLnBhdGgsIGMucmVzLnN0YXR1cywgTnVtYmVyKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCkudG9GaXhlZCgyKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIENPUlMgbWlkZGxld2FyZSB3aXRoIGxhenkgY29uZmlnIHJlc29sdXRpb24uXG4gKlxuICogSGFuZGxlcyBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyAoQ09SUykgaGVhZGVycyBmb3IgQVBJIHJvdXRlcy5cbiAqIENvbmZpZyBpcyByZXNvbHZlZCBhdCByZXF1ZXN0IHRpbWUsIGFsbG93aW5nIGl0IHRvIGJlIHNldCB2aWEgY3JlYXRlQXBwKCkuXG4gKiBTdGF0aWMgb3B0aW9ucyBwYXNzZWQgaGVyZSB0YWtlIHByZWNlZGVuY2Ugb3ZlciBhcHAgY29uZmlnLlxuICpcbiAqIERlZmF1bHQgYmVoYXZpb3I6XG4gKiAtIFJlZmxlY3RzIHRoZSByZXF1ZXN0IG9yaWdpbiAoYWxsb3dzIGFueSBvcmlnaW4pXG4gKiAtIEFsbG93cyBjb21tb24gaGVhZGVyczogQ29udGVudC1UeXBlLCBBdXRob3JpemF0aW9uLCBBY2NlcHQsIE9yaWdpbiwgWC1SZXF1ZXN0ZWQtV2l0aFxuICogLSBBbGxvd3MgYWxsIHN0YW5kYXJkIEhUVFAgbWV0aG9kc1xuICogLSBFbmFibGVzIGNyZWRlbnRpYWxzXG4gKiAtIFNldHMgbWF4LWFnZSB0byA2MDAgc2Vjb25kcyAoMTAgbWludXRlcylcbiAqXG4gKiBAcGFyYW0gc3RhdGljT3B0aW9ucyAtIE9wdGlvbmFsIHN0YXRpYyBDT1JTIG9wdGlvbnMgdGhhdCBvdmVycmlkZSBhcHAgY29uZmlnXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFVzZSB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAqIGFwcC51c2UoJy9hcGkvKicsIGNyZWF0ZUNvcnNNaWRkbGV3YXJlKCkpO1xuICpcbiAqIC8vIE9yIGNvbmZpZ3VyZSB2aWEgY3JlYXRlQXBwXG4gKiBjb25zdCBhcHAgPSBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBjb3JzOiB7XG4gKiAgICAgb3JpZ2luOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gKiAgICAgYWxsb3dIZWFkZXJzOiBbJ0NvbnRlbnQtVHlwZScsICdBdXRob3JpemF0aW9uJywgJ1gtQ3VzdG9tLUhlYWRlciddLFxuICogICAgIG1heEFnZTogMzYwMCxcbiAqICAgfVxuICogfSk7XG4gKlxuICogLy8gT3IgcGFzcyBzdGF0aWMgb3B0aW9ucyBkaXJlY3RseSAob3ZlcnJpZGVzIGFwcCBjb25maWcpXG4gKiBhcHAudXNlKCcvYXBpLyonLCBjcmVhdGVDb3JzTWlkZGxld2FyZSh7XG4gKiAgIG9yaWdpbjogWydodHRwczovL2FwcC5leGFtcGxlLmNvbScsICdodHRwczovL2FkbWluLmV4YW1wbGUuY29tJ10sXG4gKiAgIGNyZWRlbnRpYWxzOiB0cnVlLFxuICogfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb3JzTWlkZGxld2FyZShzdGF0aWNPcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gY3JlYXRlTWlkZGxld2FyZShhc3luYyAoYywgbmV4dCkgPT4ge1xuICAgICAgICAvLyBMYXp5IHJlc29sdmU6IG1lcmdlIGFwcCBjb25maWcgd2l0aCBzdGF0aWMgb3B0aW9uc1xuICAgICAgICBjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKTtcbiAgICAgICAgY29uc3QgYXBwQ29ycyA9IGFwcENvbmZpZz8uY29ycztcbiAgICAgICAgY29uc3QgY29yc09wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5hcHBDb3JzLFxuICAgICAgICAgICAgLi4uc3RhdGljT3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRXh0cmFjdCBBZ2VudHVpdHktc3BlY2lmaWMgb3B0aW9uc1xuICAgICAgICBjb25zdCB7IHNhbWVPcmlnaW4sIGFsbG93ZWRPcmlnaW5zLCAuLi5ob25vQ29yc09wdGlvbnMgfSA9IGNvcnNPcHRpb25zO1xuICAgICAgICAvLyBEZXRlcm1pbmUgb3JpZ2luIGhhbmRsZXIgYmFzZWQgb24gc2FtZU9yaWdpbiBzZXR0aW5nXG4gICAgICAgIGxldCBvcmlnaW5IYW5kbGVyO1xuICAgICAgICBpZiAoc2FtZU9yaWdpbikge1xuICAgICAgICAgICAgLy8gVXNlIHRydXN0ZWQgb3JpZ2lucyAoZW52IHZhcnMgKyBhbGxvd2VkT3JpZ2lucyArIHNhbWUtb3JpZ2luKVxuICAgICAgICAgICAgb3JpZ2luSGFuZGxlciA9IGNyZWF0ZVRydXN0ZWRDb3JzT3JpZ2luKHsgYWxsb3dlZE9yaWdpbnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG9ub0NvcnNPcHRpb25zLm9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBVc2UgZXhwbGljaXRseSBwcm92aWRlZCBvcmlnaW5cbiAgICAgICAgICAgIG9yaWdpbkhhbmRsZXIgPSBob25vQ29yc09wdGlvbnMub3JpZ2luO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRGVmYXVsdDogcmVmbGVjdCBhbnkgb3JpZ2luIChiYWNrd2FyZHMgY29tcGF0aWJsZSlcbiAgICAgICAgICAgIG9yaWdpbkhhbmRsZXIgPSAob3JpZ2luKSA9PiBvcmlnaW47XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVxdWlyZWQgaGVhZGVycyB0aGF0IG11c3QgYWx3YXlzIGJlIGFsbG93ZWQvZXhwb3NlZCBmb3IgcnVudGltZSBmdW5jdGlvbmFsaXR5XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkQWxsb3dIZWFkZXJzID0gW1RIUkVBRF9IRUFERVJdO1xuICAgICAgICBjb25zdCByZXF1aXJlZEV4cG9zZUhlYWRlcnMgPSBbXG4gICAgICAgICAgICBUT0tFTlNfSEVBREVSLFxuICAgICAgICAgICAgRFVSQVRJT05fSEVBREVSLFxuICAgICAgICAgICAgVEhSRUFEX0hFQURFUixcbiAgICAgICAgICAgIFNFU1NJT05fSEVBREVSLFxuICAgICAgICAgICAgREVQTE9ZTUVOVF9IRUFERVIsXG4gICAgICAgIF07XG4gICAgICAgIC8vIERlZmF1bHQgaGVhZGVycyB0byBhbGxvdyAodXNlZCBpZiBub25lIHNwZWNpZmllZClcbiAgICAgICAgY29uc3QgZGVmYXVsdEFsbG93SGVhZGVycyA9IFtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnLFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAgICAgJ0FjY2VwdCcsXG4gICAgICAgICAgICAnT3JpZ2luJyxcbiAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgICAgICAgXTtcbiAgICAgICAgLy8gRGVmYXVsdCBoZWFkZXJzIHRvIGV4cG9zZSAodXNlZCBpZiBub25lIHNwZWNpZmllZClcbiAgICAgICAgY29uc3QgZGVmYXVsdEV4cG9zZUhlYWRlcnMgPSBbJ0NvbnRlbnQtTGVuZ3RoJ107XG4gICAgICAgIGNvbnN0IGNvcnNNaWRkbGV3YXJlID0gY29ycyh7XG4gICAgICAgICAgICAuLi5ob25vQ29yc09wdGlvbnMsXG4gICAgICAgICAgICBvcmlnaW46IG9yaWdpbkhhbmRsZXIsXG4gICAgICAgICAgICAvLyBBbHdheXMgaW5jbHVkZSByZXF1aXJlZCBoZWFkZXJzLCBtZXJnZSB3aXRoIHVzZXItcHJvdmlkZWQgb3IgZGVmYXVsdHNcbiAgICAgICAgICAgIGFsbG93SGVhZGVyczogW1xuICAgICAgICAgICAgICAgIC4uLihob25vQ29yc09wdGlvbnMuYWxsb3dIZWFkZXJzID8/IGRlZmF1bHRBbGxvd0hlYWRlcnMpLFxuICAgICAgICAgICAgICAgIC4uLnJlcXVpcmVkQWxsb3dIZWFkZXJzLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFsbG93TWV0aG9kczogaG9ub0NvcnNPcHRpb25zLmFsbG93TWV0aG9kcyA/PyBbXG4gICAgICAgICAgICAgICAgJ1BPU1QnLFxuICAgICAgICAgICAgICAgICdHRVQnLFxuICAgICAgICAgICAgICAgICdPUFRJT05TJyxcbiAgICAgICAgICAgICAgICAnSEVBRCcsXG4gICAgICAgICAgICAgICAgJ1BVVCcsXG4gICAgICAgICAgICAgICAgJ0RFTEVURScsXG4gICAgICAgICAgICAgICAgJ1BBVENIJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyBBbHdheXMgaW5jbHVkZSByZXF1aXJlZCBoZWFkZXJzLCBtZXJnZSB3aXRoIHVzZXItcHJvdmlkZWQgb3IgZGVmYXVsdHNcbiAgICAgICAgICAgIGV4cG9zZUhlYWRlcnM6IFtcbiAgICAgICAgICAgICAgICAuLi4oaG9ub0NvcnNPcHRpb25zLmV4cG9zZUhlYWRlcnMgPz8gZGVmYXVsdEV4cG9zZUhlYWRlcnMpLFxuICAgICAgICAgICAgICAgIC4uLnJlcXVpcmVkRXhwb3NlSGVhZGVycyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtYXhBZ2U6IGhvbm9Db3JzT3B0aW9ucy5tYXhBZ2UgPz8gNjAwLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IGhvbm9Db3JzT3B0aW9ucy5jcmVkZW50aWFscyA/PyB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvcnNNaWRkbGV3YXJlKGMsIG5leHQpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDcmVhdGUgT3BlblRlbGVtZXRyeSBtaWRkbGV3YXJlIGZvciBzZXNzaW9uL3RocmVhZCB0cmFja2luZ1xuICogVGhpcyBpcyB0aGUgY3JpdGljYWwgbWlkZGxld2FyZSB0aGF0IGNyZWF0ZXMgQWdlbnRDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdGVsTWlkZGxld2FyZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiBjcmVhdGVNaWRkbGV3YXJlKGFzeW5jIChjLCBuZXh0KSA9PiB7XG4gICAgICAgIC8vIFNraXAgc2Vzc2lvbiB0cmFja2luZyBmb3IgcGF0aHMgaW4gdGhlIHNraXAgbGlzdFxuICAgICAgICBpZiAoT1RFTF9TRVNTSU9OX1NLSVBfUEFUSFMuaGFzKGMucmVxLnBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEltcG9ydCBwcm92aWRlcnMgZHluYW1pY2FsbHkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBjb25zdCB7IGdldFRocmVhZFByb3ZpZGVyLCBnZXRTZXNzaW9uUHJvdmlkZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9fc2VydmljZXMnKTtcbiAgICAgICAgY29uc3QgV2FpdFVudGlsSGFuZGxlciA9IChhd2FpdCBpbXBvcnQoJy4vX3dhaXR1bnRpbCcpKS5kZWZhdWx0O1xuICAgICAgICBjb25zdCBleHRyYWN0ZWRDb250ZXh0ID0gZXh0cmFjdFRyYWNlQ29udGV4dEZyb21SZXF1ZXN0KGMucmVxLnJhdyk7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGMucmVxLm1ldGhvZDtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChjLnJlcS51cmwpO1xuICAgICAgICBjb25zdCB0aHJlYWRQcm92aWRlciA9IGdldFRocmVhZFByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IHNlc3Npb25Qcm92aWRlciA9IGdldFNlc3Npb25Qcm92aWRlcigpO1xuICAgICAgICBhd2FpdCBjb250ZXh0LndpdGgoZXh0cmFjdGVkQ29udGV4dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKCdodHRwLXNlcnZlcicpO1xuICAgICAgICAgICAgYXdhaXQgdHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihgSFRUUCAke21ldGhvZH1gLCB7XG4gICAgICAgICAgICAgICAga2luZDogU3BhbktpbmQuU0VSVkVSLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHAubWV0aG9kJzogbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAnaHR0cC5ob3N0JzogdXJsLmhvc3QsXG4gICAgICAgICAgICAgICAgICAgICdodHRwLnVzZXJfYWdlbnQnOiBjLnJlcS5oZWFkZXIoJ3VzZXItYWdlbnQnKSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHAucGF0aCc6IHVybC5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3R4ID0gc3Bhbi5zcGFuQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHNjdHg/LnRyYWNlSWQgPyBgc2Vzc18ke3NjdHgudHJhY2VJZH1gIDogZ2VuZXJhdGVJZCgnc2VzcycpO1xuICAgICAgICAgICAgICAgIGxldCB0cmFjZVN0YXRlID0gc2N0eC50cmFjZVN0YXRlID8/IG5ldyBUcmFjZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdElkID0gcnVudGltZUNvbmZpZy5nZXRQcm9qZWN0SWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmdJZCA9IHJ1bnRpbWVDb25maWcuZ2V0T3JnYW5pemF0aW9uSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBsb3ltZW50SWQgPSBydW50aW1lQ29uZmlnLmdldERlcGxveW1lbnRJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGV2TW9kZSA9IHJ1bnRpbWVDb25maWcuaXNEZXZNb2RlKCk7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIGNvbmZpZzogb3JnSWQ9JXMsIHByb2plY3RJZD0lcywgZGVwbG95bWVudElkPSVzLCBpc0Rldk1vZGU9JXMnLCBvcmdJZCA/PyAnTk9UIFNFVCAoQUdFTlRVSVRZX0NMT1VEX09SR19JRCknLCBwcm9qZWN0SWQgPz8gJ05PVCBTRVQgKEFHRU5UVUlUWV9DTE9VRF9QUk9KRUNUX0lEKScsIGRlcGxveW1lbnRJZCA/PyAnbm9uZScsIGlzRGV2TW9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3RJZClcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VTdGF0ZSA9IHRyYWNlU3RhdGUuc2V0KCdwaWQnLCBwcm9qZWN0SWQpO1xuICAgICAgICAgICAgICAgIGlmIChvcmdJZClcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VTdGF0ZSA9IHRyYWNlU3RhdGUuc2V0KCdvaWQnLCBvcmdJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSlcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VTdGF0ZSA9IHRyYWNlU3RhdGUuc2V0KCdkJywgJzEnKTtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGFjdGl2ZSBjb250ZXh0IHdpdGggdGhlIG5ldyB0cmFjZSBzdGF0ZVxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IFNwYW5Db250ZXh0LnRyYWNlU3RhdGUgaXMgcmVhZG9ubHksIHNvIHdlIHVwZGF0ZSBpdCBieSBzZXR0aW5nIHRoZSBzcGFuIHdpdGggYSBuZXcgY29udGV4dFxuICAgICAgICAgICAgICAgIHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgdHJhY2Uud3JhcFNwYW5Db250ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2N0eCxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VTdGF0ZSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhyZWFkID0gYXdhaXQgdGhyZWFkUHJvdmlkZXIucmVzdG9yZShjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgc2Vzc2lvblByb3ZpZGVyLnJlc3RvcmUodGhyZWFkLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgV2FpdFVudGlsSGFuZGxlcih0cmFjZXIpO1xuICAgICAgICAgICAgICAgIGMuc2V0KCdzZXNzaW9uSWQnLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIGMuc2V0KCd0aHJlYWQnLCB0aHJlYWQpO1xuICAgICAgICAgICAgICAgIGMuc2V0KCdzZXNzaW9uJywgc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBjLnNldCgnd2FpdFVudGlsSGFuZGxlcicsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZW50SWRzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgYy5zZXQoJ2FnZW50SWRzJywgYWdlbnRJZHMpO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgYy5zZXQoJ3RyaWdnZXInLCAnYXBpJyk7XG4gICAgICAgICAgICAgICAgLy8gU2VuZCBzZXNzaW9uIHN0YXJ0IGV2ZW50IChzbyBldmFscnVucyBjYW4gcmVmZXJlbmNlIHRoaXMgc2Vzc2lvbilcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJvdmlkZXIgZGVjaWRlcyB3aGV0aGVyIHRvIHNlbmQgYmFzZWQgb24gYXZhaWxhYmxlIGRhdGEgKG9yZ0lkLCBwcm9qZWN0SWQsIGV0Yy4pXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbkV2ZW50UHJvdmlkZXIgPSBnZXRTZXNzaW9uRXZlbnRQcm92aWRlcigpO1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXZlbnRQcm92aWRlcikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlSWQgPSBjLnZhcj8ucm91dGVJZCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlc3Npb25FdmVudFByb3ZpZGVyLnN0YXJ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZElkOiB0aHJlYWQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnSWQ6IG9yZ0lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdElkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnRJZDogZGVwbG95bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZtb2RlOiBpc0Rldk1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogJ2FwaScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogcnVudGltZUNvbmZpZy5nZXRFbnZpcm9ubWVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYy5yZXEucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IGMucmVxLm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBzZXNzaW9uIHN0YXJ0IGVycm9ycyAtIGRvbid0IGJsb2NrIHJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGYWN0b3Igb3V0IGZpbmFsaXphdGlvbiBsb2dpYyBzbyBpdCBjYW4gcnVuIHN5bmNocm9ub3VzbHkgb3IgZGVmZXJyZWRcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbGl6ZVNlc3Npb24gPSBhc3luYyAoc3RhdHVzQ29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbc2Vzc2lvbl0gc2F2aW5nIHNlc3Npb24gJXMgKHRocmVhZDogJXMpJywgc2Vzc2lvbklkLCB0aHJlYWQuaWQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXNzaW9uUHJvdmlkZXIuc2F2ZShzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIHNlc3Npb24gc2F2ZWQsIG5vdyBzYXZpbmcgdGhyZWFkJyk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRocmVhZFByb3ZpZGVyLnNhdmUodGhyZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIHRocmVhZCBzYXZlZCcpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIHNlc3Npb24gY29tcGxldGUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FdmVudFByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJEYXRhID0gc2Vzc2lvbi5zZXJpYWxpemVVc2VyRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uXSBzZW5kaW5nIHNlc3Npb24gY29tcGxldGUgZXZlbnQsIHVzZXJEYXRhOiAlcycsIHVzZXJEYXRhID8gYCR7dXNlckRhdGEubGVuZ3RofSBieXRlc2AgOiAnbm9uZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWdlbnRJZHNTZXQgPSBjLmdldCgnYWdlbnRJZHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElkcyA9IGFnZW50SWRzU2V0ID8gWy4uLmFnZW50SWRzU2V0XS5maWx0ZXIoQm9vbGVhbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5mbygnW3Nlc3Npb25dIGFnZW50SWRzOiAlbycsIGFnZW50SWRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gYXdhaXQgdGhyZWFkLmVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2Vzc2lvbkV2ZW50UHJvdmlkZXIuY29tcGxldGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRJZDogaXNFbXB0eSA/IG51bGwgOiB0aHJlYWQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUgPz8gYy5yZXM/LnN0YXR1cyA/PyAyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50SWRzOiBhZ2VudElkcz8ubGVuZ3RoID8gYWdlbnRJZHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uXSBzZXNzaW9uIGNvbXBsZXRlIGV2ZW50IHNlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uXSBzZXNzaW9uIGNvbXBsZXRlIGV2ZW50IGZhaWxlZDogJXMnLCBleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHNlc3Npb24gY29tcGxldGUgZXJyb3JzIC0gZG9uJ3QgYmxvY2sgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgc3RyZWFtaW5nIHJlc3BvbnNlIHRoYXQgbmVlZHMgZGVmZXJyZWQgZmluYWxpemF0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbURvbmUgPSBjLmdldChTVFJFQU1fRE9ORV9QUk9NSVNFX0tFWSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gQm9vbGVhbihjLmdldChJU19TVFJFQU1JTkdfUkVTUE9OU0VfS0VZKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0cmVhbWluZyAmJiBzdHJlYW1Eb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlciBzZXNzaW9uL3RocmVhZCBzYXZpbmcgdW50aWwgc3RyZWFtIGNvbXBsZXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRocmVhZCBzdGF0ZSBjaGFuZ2VzIG1hZGUgZHVyaW5nIHN0cmVhbWluZyBhcmUgcGVyc2lzdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbc2Vzc2lvbl0gZGVmZXJyaW5nIHNlc3Npb24vdGhyZWFkIHNhdmUgdW50aWwgc3RyZWFtaW5nIGNvbXBsZXRlcyAoc2Vzc2lvbiAlcyknLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci53YWl0VW50aWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbURvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmluZm8oJ1tzZXNzaW9uXSBzdHJlYW0gY29tcGxldGVkLCBub3cgc2F2aW5nIHNlc3Npb24vdGhyZWFkIChzZXNzaW9uICVzKScsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJlYW0gZW5kZWQgd2l0aCBhbiBlcnJvci9hYm9ydDsgc3RpbGwgdHJ5IHRvIHBlcnNpc3QgdGhlIGxhdGVzdCBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbmZvKCdbc2Vzc2lvbl0gc3RyZWFtIGVuZGVkIHdpdGggZXJyb3IsIHN0aWxsIHNhdmluZyBzdGF0ZTogJXMnLCBleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGZpbmFsaXplU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLXN0cmVhbWluZzogc2F2ZSBzZXNzaW9uL3RocmVhZCBzeW5jaHJvbm91c2x5IChleGlzdGluZyBiZWhhdmlvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGZpbmFsaXplU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGV4Lm1lc3NhZ2UgPz8gU3RyaW5nKGV4KSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGlvbi5pbmplY3QoY29udGV4dC5hY3RpdmUoKSwgaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLmhlYWRlcihrZXksIGhlYWRlcnNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHNjdHg/LnRyYWNlSWQgfHwgc2Vzc2lvbklkLnJlcGxhY2UoL15zZXNzXy8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYy5oZWFkZXIoU0VTU0lPTl9IRUFERVIsIGBzZXNzXyR7dHJhY2VJZH1gKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBjb21wcmVzc2lvbiBtaWRkbGV3YXJlIHdpdGggbGF6eSBjb25maWcgcmVzb2x1dGlvbi5cbiAqXG4gKiBDb21wcmVzc2VzIHJlc3BvbnNlIGJvZGllcyB1c2luZyBnemlwIG9yIGRlZmxhdGUgYmFzZWQgb24gdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuXG4gKiBDb25maWcgaXMgcmVzb2x2ZWQgYXQgcmVxdWVzdCB0aW1lLCBhbGxvd2luZyBpdCB0byBiZSBzZXQgdmlhIGNyZWF0ZUFwcCgpLlxuICpcbiAqIEBwYXJhbSBzdGF0aWNDb25maWcgLSBPcHRpb25hbCBzdGF0aWMgY29uZmlnIHRoYXQgb3ZlcnJpZGVzIGFwcCBjb25maWdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVXNlIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICogYXBwLnVzZSgnKicsIGNyZWF0ZUNvbXByZXNzaW9uTWlkZGxld2FyZSgpKTtcbiAqXG4gKiAvLyBPciBjb25maWd1cmUgdmlhIGNyZWF0ZUFwcFxuICogY29uc3QgYXBwID0gYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgY29tcHJlc3Npb246IHtcbiAqICAgICB0aHJlc2hvbGQ6IDIwNDgsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21wcmVzc2lvbk1pZGRsZXdhcmUoc3RhdGljQ29uZmlnLCBcbi8qKlxuICogT3B0aW9uYWwgY29uZmlnIHJlc29sdmVyIGZvciB0ZXN0aW5nLiBXaGVuIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQgaW5zdGVhZCBvZiBnZXRBcHBDb25maWcoKS5cbiAqIEBpbnRlcm5hbFxuICovXG5jb25maWdSZXNvbHZlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIGNyZWF0ZU1pZGRsZXdhcmUoYXN5bmMgKGMsIG5leHQpID0+IHtcbiAgICAgICAgLy8gTGF6eSByZXNvbHZlOiBtZXJnZSBhcHAgY29uZmlnIHdpdGggc3RhdGljIGNvbmZpZ1xuICAgICAgICBjb25zdCBhcHBDb25maWcgPSBjb25maWdSZXNvbHZlciA/IGNvbmZpZ1Jlc29sdmVyKCkgOiBnZXRBcHBDb25maWcoKTtcbiAgICAgICAgY29uc3QgYXBwQ29tcHJlc3Npb25Db25maWcgPSBhcHBDb25maWc/LmNvbXByZXNzaW9uO1xuICAgICAgICAvLyBDaGVjayBpZiBjb21wcmVzc2lvbiBpcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgICAgIGlmIChhcHBDb21wcmVzc2lvbkNvbmZpZyA9PT0gZmFsc2UgfHwgc3RhdGljQ29uZmlnPy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNZXJnZSBjb25maWdzOiBzdGF0aWMgY29uZmlnIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhcHAgY29uZmlnXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLih0eXBlb2YgYXBwQ29tcHJlc3Npb25Db25maWcgPT09ICdvYmplY3QnID8gYXBwQ29tcHJlc3Npb25Db25maWcgOiB7fSksXG4gICAgICAgICAgICAuLi5zdGF0aWNDb25maWcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgZW5hYmxlZCA9IHRydWUsIHRocmVzaG9sZCA9IDEwMjQsIGZpbHRlciwgaG9ub09wdGlvbnMgfSA9IGNvbmZpZztcbiAgICAgICAgLy8gU2tpcCBpZiBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTa2lwIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3RzXG4gICAgICAgIGNvbnN0IHVwZ3JhZGUgPSBjLnJlcS5oZWFkZXIoJ3VwZ3JhZGUnKTtcbiAgICAgICAgaWYgKHVwZ3JhZGUgJiYgdXBncmFkZS50b0xvd2VyQ2FzZSgpID09PSAnd2Vic29ja2V0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTa2lwIGlmIG5vIEFjY2VwdC1FbmNvZGluZyBoZWFkZXJcbiAgICAgICAgY29uc3QgYWNjZXB0RW5jb2RpbmcgPSBjLnJlcS5oZWFkZXIoJ2FjY2VwdC1lbmNvZGluZycpO1xuICAgICAgICBpZiAoIWFjY2VwdEVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGN1c3RvbSBmaWx0ZXJcbiAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBhbmQgcnVuIHRoZSBIb25vIGNvbXByZXNzIG1pZGRsZXdhcmVcbiAgICAgICAgY29uc3QgY29tcHJlc3NNaWRkbGV3YXJlID0gY29tcHJlc3Moe1xuICAgICAgICAgICAgdGhyZXNob2xkLFxuICAgICAgICAgICAgLi4uaG9ub09wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBjb21wcmVzc01pZGRsZXdhcmUoYywgbmV4dCk7XG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBsaWdodHdlaWdodCB0aHJlYWQgbWlkZGxld2FyZSBmb3Igd2ViIHJvdXRlcyAoYW5hbHl0aWNzKS5cbiAqXG4gKiBTZXRzIHRocmVhZCBjb29raWUgdGhhdCBwZXJzaXN0cyBhY3Jvc3MgcGFnZSB2aWV3cyBmb3IgY2xpZW50LXNpZGUgYW5hbHl0aWNzLlxuICogVGhpcyBtaWRkbGV3YXJlIGRvZXMgTk9UOlxuICogLSBDcmVhdGUgb3IgdHJhY2sgc2Vzc2lvbnMgKG5vIHNlc3Npb24gSUQpXG4gKiAtIFNldCBzZXNzaW9uL3RocmVhZCByZXNwb25zZSBoZWFkZXJzXG4gKiAtIFNlbmQgZXZlbnRzIHRvIENhdGFseXN0IHNlc3Npb25zIHRhYmxlXG4gKlxuICogVGhpcyBpcyBpbnRlbnRpb25hbGx5IHNlcGFyYXRlIGZyb20gY3JlYXRlT3RlbE1pZGRsZXdhcmUgdG8gYXZvaWRcbiAqIHBvbGx1dGluZyB0aGUgc2Vzc2lvbnMgdGFibGUgd2l0aCB3ZWIgYnJvd3NpbmcgYWN0aXZpdHkuXG4gKlxuICogLSBUaHJlYWQgY29va2llIChhdGlkX2EpOiBBbmFseXRpY3MtcmVhZGFibGUgY29weSwgMS13ZWVrIGV4cGlyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViU2Vzc2lvbk1pZGRsZXdhcmUoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gY3JlYXRlTWlkZGxld2FyZShhc3luYyAoYywgbmV4dCkgPT4ge1xuICAgICAgICAvLyBJbXBvcnQgcHJvdmlkZXJzIGR5bmFtaWNhbGx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcHNcbiAgICAgICAgY29uc3QgeyBnZXRUaHJlYWRQcm92aWRlciB9ID0gYXdhaXQgaW1wb3J0KCcuL19zZXJ2aWNlcycpO1xuICAgICAgICBjb25zdCBzZWNyZXQgPSBnZXRTZXNzaW9uU2VjcmV0KCk7XG4gICAgICAgIC8vIFVzZSBUaHJlYWRQcm92aWRlci5yZXN0b3JlKCkgdG8gZ2V0L2NyZWF0ZSB0aHJlYWQgKGhhbmRsZXMgaGVhZGVyLCBjb29raWUsIGdlbmVyYXRpb24pXG4gICAgICAgIGNvbnN0IHRocmVhZFByb3ZpZGVyID0gZ2V0VGhyZWFkUHJvdmlkZXIoKTtcbiAgICAgICAgY29uc3QgdGhyZWFkID0gYXdhaXQgdGhyZWFkUHJvdmlkZXIucmVzdG9yZShjKTtcbiAgICAgICAgLy8gU2V0IHRocmVhZCBjb29raWUgZm9yIGFuYWx5dGljc1xuICAgICAgICAvLyBodHRwT25seTogZmFsc2Ugc28gYmVhY29uIHNjcmlwdCBjYW4gcmVhZCBpdFxuICAgICAgICBjb25zdCBpc1NlY3VyZSA9IGMucmVxLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpO1xuICAgICAgICBhd2FpdCBzZXRTaWduZWRDb29raWUoYywgJ2F0aWRfYScsIHRocmVhZC5pZCwgc2VjcmV0LCB7XG4gICAgICAgICAgICBodHRwT25seTogZmFsc2UsIC8vIFJlYWRhYmxlIGJ5IEphdmFTY3JpcHQgZm9yIGFuYWx5dGljc1xuICAgICAgICAgICAgc2VjdXJlOiBpc1NlY3VyZSxcbiAgICAgICAgICAgIHNhbWVTaXRlOiAnTGF4JyxcbiAgICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICAgIG1heEFnZTogNjA0ODAwLCAvLyAxIHdlZWtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFN0b3JlIGluIGNvbnRleHQgZm9yIGhhbmRsZXIgdG8gYWNjZXNzIGluIHNhbWUgcmVxdWVzdFxuICAgICAgICAvLyAoY29va2llcyBhcmVuJ3QgcmVhZGFibGUgdW50aWwgdGhlIG5leHQgcmVxdWVzdClcbiAgICAgICAgYy5zZXQoJ193ZWJUaHJlYWRJZCcsIHRocmVhZC5pZCk7XG4gICAgICAgIGF3YWl0IG5leHQoKTtcbiAgICB9KTtcbn1cbi8qKlxuICogR2V0IHRoZSBzZWNyZXQgdXNlZCBmb3Igc2lnbmluZyBzZXNzaW9uL3RocmVhZCBjb29raWVzLlxuICogVXNlcyBBR0VOVFVJVFlfU0RLX0tFWSBpZiBhdmFpbGFibGUsIGZhbGxzIGJhY2sgdG8gJ2FnZW50dWl0eScuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXNzaW9uU2VjcmV0KCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfU0RLX0tFWSB8fCAnYWdlbnR1aXR5Jztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pZGRsZXdhcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IHZvaWQgMDtcbi8vIENoZWNrIGlmIHdlIGFyZSBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQgYW5kIGlmIHNvLCB1c2UgdGhlIHByb2Nlc3MuYXJndjAgcHJvcGVydHlcbi8vIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBzZXJ2aWNlIG5hbWVcbmNvbnN0IERFRkFVTFRfU0VSVklDRV9OQU1FID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MuYXJndjAgPT09ICdzdHJpbmcnICYmXG4gICAgcHJvY2Vzcy5hcmd2MC5sZW5ndGggPiAwXG4gICAgPyBgdW5rbm93bl9zZXJ2aWNlOiR7cHJvY2Vzcy5hcmd2MH1gXG4gICAgOiAndW5rbm93bl9zZXJ2aWNlJztcbmZ1bmN0aW9uIGRlZmF1bHRTZXJ2aWNlTmFtZSgpIHtcbiAgICByZXR1cm4gREVGQVVMVF9TRVJWSUNFX05BTUU7XG59XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IGRlZmF1bHRTZXJ2aWNlTmFtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHQtc2VydmljZS1uYW1lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1Byb21pc2VMaWtlID0gdm9pZCAwO1xuY29uc3QgaXNQcm9taXNlTGlrZSA9ICh2YWwpID0+IHtcbiAgICByZXR1cm4gKHZhbCAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicpO1xufTtcbmV4cG9ydHMuaXNQcm9taXNlTGlrZSA9IGlzUHJvbWlzZUxpa2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZXhwb3J0cy5lbXB0eVJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21EZXRlY3RlZFJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgZGVmYXVsdF9zZXJ2aWNlX25hbWVfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHQtc2VydmljZS1uYW1lXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY2xhc3MgUmVzb3VyY2VJbXBsIHtcbiAgICBfcmF3QXR0cmlidXRlcztcbiAgICBfYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyA9IGZhbHNlO1xuICAgIF9zY2hlbWFVcmw7XG4gICAgX21lbW9pemVkQXR0cmlidXRlcztcbiAgICBzdGF0aWMgRnJvbUF0dHJpYnV0ZUxpc3QoYXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgUmVzb3VyY2VJbXBsKHt9LCBvcHRpb25zKTtcbiAgICAgICAgcmVzLl9yYXdBdHRyaWJ1dGVzID0gZ3VhcmRlZFJhd0F0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgICAgIHJlcy5fYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyA9XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmZpbHRlcigoW18sIHZhbF0pID0+ICgwLCB1dGlsc18xLmlzUHJvbWlzZUxpa2UpKHZhbCkpLmxlbmd0aCA+IDA7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIEEgZGljdGlvbmFyeSBvZiBhdHRyaWJ1dGVzIHdpdGggc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IHByb3ZpZGVcbiAgICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IGFzIG51bWJlcnMsIHN0cmluZ3Mgb3IgYm9vbGVhbnNcbiAgICAgKiBUT0RPOiBDb25zaWRlciB0byBhZGQgY2hlY2svdmFsaWRhdGlvbiBvbiBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIHJlc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSByZXNvdXJjZS5hdHRyaWJ1dGVzID8/IHt9O1xuICAgICAgICB0aGlzLl9yYXdBdHRyaWJ1dGVzID0gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykubWFwKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSkge1xuICAgICAgICAgICAgICAgIC8vIHNpZGUtZWZmZWN0XG4gICAgICAgICAgICAgICAgdGhpcy5fYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2ssIHZdO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmF3QXR0cmlidXRlcyA9IGd1YXJkZWRSYXdBdHRyaWJ1dGVzKHRoaXMuX3Jhd0F0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLl9zY2hlbWFVcmwgPSB2YWxpZGF0ZVNjaGVtYVVybChvcHRpb25zPy5zY2hlbWFVcmwpO1xuICAgIH1cbiAgICBnZXQgYXN5bmNBdHRyaWJ1dGVzUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jQXR0cmlidXRlc1BlbmRpbmc7XG4gICAgfVxuICAgIGFzeW5jIHdhaXRGb3JBc3luY0F0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yYXdBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbaywgdl0gPSB0aGlzLl9yYXdBdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgICAgdGhpcy5fcmF3QXR0cmlidXRlc1tpXSA9IFtrLCAoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSA/IGF3YWl0IHYgOiB2XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hc3luY0F0dHJpYnV0ZXNQZW5kaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGdldCBhdHRyaWJ1dGVzKCkge1xuICAgICAgICBpZiAodGhpcy5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdBY2Nlc3NpbmcgcmVzb3VyY2UgYXR0cmlidXRlcyBiZWZvcmUgYXN5bmMgYXR0cmlidXRlcyBzZXR0bGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21lbW9pemVkQXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lbW9pemVkQXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLl9yYXdBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxzXzEuaXNQcm9taXNlTGlrZSkodikpIHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBVbnNldHRsZWQgcmVzb3VyY2UgYXR0cmlidXRlICR7a30gc2tpcHBlZGApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGF0dHJzW2tdID8/PSB2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG9ubHkgbWVtb2l6ZSBvdXRwdXQgaWYgYWxsIGF0dHJpYnV0ZXMgYXJlIHNldHRsZWRcbiAgICAgICAgaWYgKCF0aGlzLl9hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9tZW1vaXplZEF0dHJpYnV0ZXMgPSBhdHRycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0cnM7XG4gICAgfVxuICAgIGdldFJhd0F0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYXdBdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBnZXQgc2NoZW1hVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1hVXJsO1xuICAgIH1cbiAgICBtZXJnZShyZXNvdXJjZSkge1xuICAgICAgICBpZiAocmVzb3VyY2UgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnRcbiAgICAgICAgLy8gU3BlYyBzdGF0ZXMgaW5jb21pbmcgYXR0cmlidXRlcyBvdmVycmlkZSBleGlzdGluZyBhdHRyaWJ1dGVzXG4gICAgICAgIGNvbnN0IG1lcmdlZFNjaGVtYVVybCA9IG1lcmdlU2NoZW1hVXJsKHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlZFNjaGVtYVVybFxuICAgICAgICAgICAgPyB7IHNjaGVtYVVybDogbWVyZ2VkU2NoZW1hVXJsIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gUmVzb3VyY2VJbXBsLkZyb21BdHRyaWJ1dGVMaXN0KFsuLi5yZXNvdXJjZS5nZXRSYXdBdHRyaWJ1dGVzKCksIC4uLnRoaXMuZ2V0UmF3QXR0cmlidXRlcygpXSwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb3VyY2VGcm9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFJlc291cmNlSW1wbC5Gcm9tQXR0cmlidXRlTGlzdChPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnJlc291cmNlRnJvbUF0dHJpYnV0ZXMgPSByZXNvdXJjZUZyb21BdHRyaWJ1dGVzO1xuZnVuY3Rpb24gcmVzb3VyY2VGcm9tRGV0ZWN0ZWRSZXNvdXJjZShkZXRlY3RlZFJlc291cmNlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUltcGwoZGV0ZWN0ZWRSZXNvdXJjZSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnJlc291cmNlRnJvbURldGVjdGVkUmVzb3VyY2UgPSByZXNvdXJjZUZyb21EZXRlY3RlZFJlc291cmNlO1xuZnVuY3Rpb24gZW1wdHlSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2VGcm9tQXR0cmlidXRlcyh7fSk7XG59XG5leHBvcnRzLmVtcHR5UmVzb3VyY2UgPSBlbXB0eVJlc291cmNlO1xuZnVuY3Rpb24gZGVmYXVsdFJlc291cmNlKCkge1xuICAgIHJldHVybiByZXNvdXJjZUZyb21BdHRyaWJ1dGVzKHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdOiAoMCwgZGVmYXVsdF9zZXJ2aWNlX25hbWVfMS5kZWZhdWx0U2VydmljZU5hbWUpKCksXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV06IGNvcmVfMS5TREtfSU5GT1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV0sXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19OQU1FXTogY29yZV8xLlNES19JTkZPW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX05BTUVdLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfVkVSU0lPTl06IGNvcmVfMS5TREtfSU5GT1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19WRVJTSU9OXSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZGVmYXVsdFJlc291cmNlO1xuZnVuY3Rpb24gZ3VhcmRlZFJhd0F0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBrLFxuICAgICAgICAgICAgICAgIHYuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygncHJvbWlzZSByZWplY3Rpb24gZm9yIHJlc291cmNlIGF0dHJpYnV0ZTogJXMgLSAlcycsIGssIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaywgdl07XG4gICAgfSk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYVVybChzY2hlbWFVcmwpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYVVybCA9PT0gJ3N0cmluZycgfHwgc2NoZW1hVXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVVybDtcbiAgICB9XG4gICAgYXBpXzEuZGlhZy53YXJuKCdTY2hlbWEgVVJMIG11c3QgYmUgc3RyaW5nIG9yIHVuZGVmaW5lZCwgZ290ICVzLiBTY2hlbWEgVVJMIHdpbGwgYmUgaWdub3JlZC4nLCBzY2hlbWFVcmwpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBtZXJnZVNjaGVtYVVybChvbGQsIHVwZGF0aW5nKSB7XG4gICAgY29uc3Qgb2xkU2NoZW1hVXJsID0gb2xkPy5zY2hlbWFVcmw7XG4gICAgY29uc3QgdXBkYXRpbmdTY2hlbWFVcmwgPSB1cGRhdGluZz8uc2NoZW1hVXJsO1xuICAgIGNvbnN0IGlzT2xkRW1wdHkgPSBvbGRTY2hlbWFVcmwgPT09IHVuZGVmaW5lZCB8fCBvbGRTY2hlbWFVcmwgPT09ICcnO1xuICAgIGNvbnN0IGlzVXBkYXRpbmdFbXB0eSA9IHVwZGF0aW5nU2NoZW1hVXJsID09PSB1bmRlZmluZWQgfHwgdXBkYXRpbmdTY2hlbWFVcmwgPT09ICcnO1xuICAgIGlmIChpc09sZEVtcHR5KSB7XG4gICAgICAgIHJldHVybiB1cGRhdGluZ1NjaGVtYVVybDtcbiAgICB9XG4gICAgaWYgKGlzVXBkYXRpbmdFbXB0eSkge1xuICAgICAgICByZXR1cm4gb2xkU2NoZW1hVXJsO1xuICAgIH1cbiAgICBpZiAob2xkU2NoZW1hVXJsID09PSB1cGRhdGluZ1NjaGVtYVVybCkge1xuICAgICAgICByZXR1cm4gb2xkU2NoZW1hVXJsO1xuICAgIH1cbiAgICBhcGlfMS5kaWFnLndhcm4oJ1NjaGVtYSBVUkwgbWVyZ2UgY29uZmxpY3Q6IG9sZCByZXNvdXJjZSBoYXMgXCIlc1wiLCB1cGRhdGluZyByZXNvdXJjZSBoYXMgXCIlc1wiLiBSZXN1bHRpbmcgcmVzb3VyY2Ugd2lsbCBoYXZlIHVuZGVmaW5lZCBTY2hlbWEgVVJMLicsIG9sZFNjaGVtYVVybCwgdXBkYXRpbmdTY2hlbWFVcmwpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXNvdXJjZUltcGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRldGVjdFJlc291cmNlcyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFJlc291cmNlSW1wbF8xID0gcmVxdWlyZShcIi4vUmVzb3VyY2VJbXBsXCIpO1xuLyoqXG4gKiBSdW5zIGFsbCByZXNvdXJjZSBkZXRlY3RvcnMgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgbWVyZ2VkIGludG8gYSBzaW5nbGUgUmVzb3VyY2UuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciByZXNvdXJjZSBkZXRlY3Rpb25cbiAqL1xuY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gKGNvbmZpZy5kZXRlY3RvcnMgfHwgW10pLm1hcChkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gKDAsIFJlc291cmNlSW1wbF8xLnJlc291cmNlRnJvbURldGVjdGVkUmVzb3VyY2UpKGQuZGV0ZWN0KGNvbmZpZykpO1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtkLmNvbnN0cnVjdG9yLm5hbWV9IGZvdW5kIHJlc291cmNlLmAsIHJlc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtkLmNvbnN0cnVjdG9yLm5hbWV9IGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIFJlc291cmNlSW1wbF8xLmVtcHR5UmVzb3VyY2UpKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb3VyY2VzLnJlZHVjZSgoYWNjLCByZXNvdXJjZSkgPT4gYWNjLm1lcmdlKHJlc291cmNlKSwgKDAsIFJlc291cmNlSW1wbF8xLmVtcHR5UmVzb3VyY2UpKCkpO1xufTtcbmV4cG9ydHMuZGV0ZWN0UmVzb3VyY2VzID0gZGV0ZWN0UmVzb3VyY2VzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGV0ZWN0LXJlc291cmNlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW52RGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEVudkRldGVjdG9yIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYW5kIGNyZWF0ZSBhIFJlc291cmNlXG4gKiBmcm9tIHRoZSBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKi9cbmNsYXNzIEVudkRldGVjdG9yIHtcbiAgICAvLyBUeXBlLCBhdHRyaWJ1dGUga2V5cywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgc2hvdWxkIG5vdCBleGNlZWQgMjU2IGNoYXJhY3RlcnMuXG4gICAgX01BWF9MRU5HVEggPSAyNTU7XG4gICAgLy8gT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcy5cbiAgICBfQ09NTUFfU0VQQVJBVE9SID0gJywnO1xuICAgIC8vIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBjb250YWlucyBrZXkgdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgIF9MQUJFTF9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4gICAgX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSUyA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBncmVhdGVyIHRoYW4gMCBhbmQgbm90IGV4Y2VlZCAnICtcbiAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICcgY2hhcmFjdGVycy4nO1xuICAgIF9FUlJPUl9NRVNTQUdFX0lOVkFMSURfVkFMVUUgPSAnc2hvdWxkIGJlIGEgQVNDSUkgc3RyaW5nIHdpdGggYSBsZW5ndGggbm90IGV4Y2VlZCAnICtcbiAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICcgY2hhcmFjdGVycy4nO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGF0dHJpYnV0ZXMgZnJvbSB0aGVcbiAgICAgKiBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnQgdmFyaWFibGUuIE5vdGUgdGhpcyBpcyBhbiBhc3luY1xuICAgICAqIGZ1bmN0aW9uIHRvIGNvbmZvcm0gdG8gdGhlIERldGVjdG9yIGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIHJlc291cmNlIGRldGVjdGlvbiBjb25maWdcbiAgICAgKi9cbiAgICBkZXRlY3QoX2NvbmZpZykge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMnKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX1NFUlZJQ0VfTkFNRScpO1xuICAgICAgICBpZiAocmF3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBdHRyaWJ1dGVzID0gdGhpcy5fcGFyc2VSZXNvdXJjZUF0dHJpYnV0ZXMocmF3QXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBwYXJzZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgRW52RGV0ZWN0b3IgZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VydmljZU5hbWUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV0gPSBzZXJ2aWNlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXR0cmlidXRlIG1hcCBmcm9tIHRoZSBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnRcbiAgICAgKiB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUzogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzIGRlc2NyaWJpbmdcbiAgICAgKiB0aGUgc291cmNlIGluIG1vcmUgZGV0YWlsLCBlLmcuIOKAnGtleTE9dmFsMSxrZXkyPXZhbDLigJ0uIERvbWFpbiBuYW1lcyBhbmRcbiAgICAgKiBwYXRocyBhcmUgYWNjZXB0ZWQgYXMgYXR0cmlidXRlIGtleXMuIFZhbHVlcyBtYXkgYmUgcXVvdGVkIG9yIHVucXVvdGVkIGluXG4gICAgICogZ2VuZXJhbC4gSWYgYSB2YWx1ZSBjb250YWlucyB3aGl0ZXNwYWNlLCA9LCBvciBcIiBjaGFyYWN0ZXJzLCBpdCBtdXN0XG4gICAgICogYWx3YXlzIGJlIHF1b3RlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByYXdFbnZBdHRyaWJ1dGVzIFRoZSByZXNvdXJjZSBhdHRyaWJ1dGVzIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3RcbiAgICAgKiBvZiBrZXkvdmFsdWUgcGFpcnMuXG4gICAgICogQHJldHVybnMgVGhlIHNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIF9wYXJzZVJlc291cmNlQXR0cmlidXRlcyhyYXdFbnZBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghcmF3RW52QXR0cmlidXRlcylcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBjb25zdCByYXdBdHRyaWJ1dGVzID0gcmF3RW52QXR0cmlidXRlcy5zcGxpdCh0aGlzLl9DT01NQV9TRVBBUkFUT1IsIC0xKTtcbiAgICAgICAgZm9yIChjb25zdCByYXdBdHRyaWJ1dGUgb2YgcmF3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWVQYWlyID0gcmF3QXR0cmlidXRlLnNwbGl0KHRoaXMuX0xBQkVMX0tFWV9WQUxVRV9TUExJVFRFUiwgLTEpO1xuICAgICAgICAgICAgaWYgKGtleVZhbHVlUGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBrZXlWYWx1ZVBhaXI7XG4gICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgdHJpbW1lZC5cbiAgICAgICAgICAgIGtleSA9IGtleS50cmltKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKS5zcGxpdCgvXlwifFwiJC8pLmpvaW4oJycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkQW5kTm90RW1wdHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0cmlidXRlIGtleSAke3RoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSU31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dHJpYnV0ZSB2YWx1ZSAke3RoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9WQUxVRX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggbm90IGV4Y2VlZCBfTUFYX0xFTkdUSCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ciBUaGUgU3RyaW5nIHRvIGJlIHZhbGlkYXRlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBTdHJpbmcgaXMgdmFsaWQuXG4gICAgICovXG4gICAgX2lzVmFsaWQobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZS5sZW5ndGggPD0gdGhpcy5fTUFYX0xFTkdUSCAmJiB0aGlzLl9pc0JhZ2dhZ2VPY3RldFN0cmluZyhuYW1lKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2JhZ2dhZ2UvI2RlZmluaXRpb25cbiAgICBfaXNCYWdnYWdlT2N0ZXRTdHJpbmcoc3RyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKGNoIDwgMHgyMSB8fCBjaCA9PT0gMHgyYyB8fCBjaCA9PT0gMHgzYiB8fCBjaCA9PT0gMHg1YyB8fCBjaCA+IDB4N2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggZ3JlYXRlciB0aGFuIDAgYW5kIG5vdCBleGNlZWQgX01BWF9MRU5HVEggY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIFN0cmluZyB0byBiZSB2YWxpZGF0ZWQuXG4gICAgICogQHJldHVybnMgV2hldGhlciB0aGUgU3RyaW5nIGlzIHZhbGlkIGFuZCBub3QgZW1wdHkuXG4gICAgICovXG4gICAgX2lzVmFsaWRBbmROb3RFbXB0eShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiAwICYmIHRoaXMuX2lzVmFsaWQoc3RyKTtcbiAgICB9XG59XG5leHBvcnRzLmVudkRldGVjdG9yID0gbmV3IEVudkRldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbnZEZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfTkFNRSA9IGV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfREVTQ1JJUFRJT04gPSBleHBvcnRzLkFUVFJfU0VSVklDRV9OQU1FU1BBQ0UgPSBleHBvcnRzLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRCA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRSA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfREVTQ1JJUFRJT04gPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19PV05FUiA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfTkFNRSA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0NPTU1BTkRfQVJHUyA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0NPTU1BTkQgPSBleHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9PU19UWVBFID0gZXhwb3J0cy5BVFRSX0s4U19QT0RfTkFNRSA9IGV4cG9ydHMuQVRUUl9LOFNfTkFNRVNQQUNFX05BTUUgPSBleHBvcnRzLkFUVFJfSzhTX0RFUExPWU1FTlRfTkFNRSA9IGV4cG9ydHMuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FID0gZXhwb3J0cy5BVFRSX0hPU1RfVFlQRSA9IGV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSBleHBvcnRzLkFUVFJfSE9TVF9JTUFHRV9WRVJTSU9OID0gZXhwb3J0cy5BVFRSX0hPU1RfSU1BR0VfTkFNRSA9IGV4cG9ydHMuQVRUUl9IT1NUX0lNQUdFX0lEID0gZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSBleHBvcnRzLkFUVFJfSE9TVF9BUkNIID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9UQUdTID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9IGV4cG9ydHMuQVRUUl9DTE9VRF9SRUdJT04gPSBleHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSBleHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSBleHBvcnRzLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBjbG91ZCBhY2NvdW50IElEIHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0by5cbiAqXG4gKiBAZXhhbXBsZSAxMTExMTExMTExMTFcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnlcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEID0gJ2Nsb3VkLmFjY291bnQuaWQnO1xuLyoqXG4gKiBDbG91ZCByZWdpb25zIG9mdGVuIGhhdmUgbXVsdGlwbGUsIGlzb2xhdGVkIGxvY2F0aW9ucyBrbm93biBhcyB6b25lcyB0byBpbmNyZWFzZSBhdmFpbGFiaWxpdHkuIEF2YWlsYWJpbGl0eSB6b25lIHJlcHJlc2VudHMgdGhlIHpvbmUgd2hlcmUgdGhlIHJlc291cmNlIGlzIHJ1bm5pbmcuXG4gKlxuICogQGV4YW1wbGUgdXMtZWFzdC0xY1xuICpcbiAqIEBub3RlIEF2YWlsYWJpbGl0eSB6b25lcyBhcmUgY2FsbGVkIFwiem9uZXNcIiBvbiBBbGliYWJhIENsb3VkIGFuZCBHb29nbGUgQ2xvdWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSAnY2xvdWQuYXZhaWxhYmlsaXR5X3pvbmUnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9ICdjbG91ZC5wcm92aWRlcic7XG4vKipcbiAqIFRoZSBnZW9ncmFwaGljYWwgcmVnaW9uIHRoZSByZXNvdXJjZSBpcyBydW5uaW5nLlxuICpcbiAqIEBleGFtcGxlIHVzLWNlbnRyYWwxXG4gKiBAZXhhbXBsZSB1cy1lYXN0LTFcbiAqXG4gKiBAbm90ZSBSZWZlciB0byB5b3VyIHByb3ZpZGVyJ3MgZG9jcyB0byBzZWUgdGhlIGF2YWlsYWJsZSByZWdpb25zLCBmb3IgZXhhbXBsZSBbQWxpYmFiYSBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy5hbGliYWJhY2xvdWQuY29tL2hlbHAvZG9jLWRldGFpbC80MDY1NC5odG0pLCBbQVdTIHJlZ2lvbnNdKGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYWJvdXQtYXdzL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9yZWdpb25zX2F6LyksIFtBenVyZSByZWdpb25zXShodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vZ2xvYmFsLWluZnJhc3RydWN0dXJlL2dlb2dyYXBoaWVzLyksIFtHb29nbGUgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Fib3V0L2xvY2F0aW9ucyksIG9yIFtUZW5jZW50IENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vd3d3LnRlbmNlbnRjbG91ZC5jb20vZG9jdW1lbnQvcHJvZHVjdC8yMTMvNjA5MSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUkVHSU9OID0gJ2Nsb3VkLnJlZ2lvbic7XG4vKipcbiAqIENvbnRhaW5lciBJRC4gVXN1YWxseSBhIFVVSUQsIGFzIGZvciBleGFtcGxlIHVzZWQgdG8gW2lkZW50aWZ5IERvY2tlciBjb250YWluZXJzXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvY29udGFpbmVycy9ydW4vI2NvbnRhaW5lci1pZGVudGlmaWNhdGlvbikuIFRoZSBVVUlEIG1pZ2h0IGJlIGFiYnJldmlhdGVkLlxuICpcbiAqIEBleGFtcGxlIGEzYmY5MGUwMDZiMlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9ICdjb250YWluZXIuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBpbWFnZSB0aGUgY29udGFpbmVyIHdhcyBidWlsdCBvbi5cbiAqXG4gKiBAZXhhbXBsZSBnY3IuaW8vb3BlbnRlbGVtZXRyeS9vcGVyYXRvclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gJ2NvbnRhaW5lci5pbWFnZS5uYW1lJztcbi8qKlxuICogQ29udGFpbmVyIGltYWdlIHRhZ3MuIEFuIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluIFtEb2NrZXIgSW1hZ2UgSW5zcGVjdF0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2FwaS92MS40My8jdGFnL0ltYWdlL29wZXJhdGlvbi9JbWFnZUluc3BlY3QpLiBTaG91bGQgYmUgb25seSB0aGUgYDx0YWc+YCBzZWN0aW9uIG9mIHRoZSBmdWxsIG5hbWUgZm9yIGV4YW1wbGUgZnJvbSBgcmVnaXN0cnkuZXhhbXBsZS5jb20vbXktb3JnL215LWltYWdlOjx0YWc+YC5cbiAqXG4gKiBAZXhhbXBsZSBbXCJ2MS4yNy4xXCIsIFwiMy41LjctMFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9UQUdTID0gJ2NvbnRhaW5lci5pbWFnZS50YWdzJztcbi8qKlxuICogQ29udGFpbmVyIG5hbWUgdXNlZCBieSBjb250YWluZXIgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ09OVEFJTkVSX05BTUUgPSAnY29udGFpbmVyLm5hbWUnO1xuLyoqXG4gKiBUaGUgQ1BVIGFyY2hpdGVjdHVyZSB0aGUgaG9zdCBzeXN0ZW0gaXMgcnVubmluZyBvbi5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0FSQ0ggPSAnaG9zdC5hcmNoJztcbi8qKlxuICogVW5pcXVlIGhvc3QgSUQuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBpbnN0YW5jZV9pZCBhc3NpZ25lZCBieSB0aGUgY2xvdWQgcHJvdmlkZXIuIEZvciBub24tY29udGFpbmVyaXplZCBzeXN0ZW1zLCB0aGlzIHNob3VsZCBiZSB0aGUgYG1hY2hpbmUtaWRgLiBTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgc291cmNlcyB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSBgbWFjaGluZS1pZGAgYmFzZWQgb24gb3BlcmF0aW5nIHN5c3RlbS5cbiAqXG4gKiBAZXhhbXBsZSBmZGJmNzllOGFmOTRjYjdmOWU4ZGYzNjc4OTE4NzA1MlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSAnaG9zdC5pZCc7XG4vKipcbiAqIFZNIGltYWdlIElEIG9yIGhvc3QgT1MgaW1hZ2UgSUQuIEZvciBDbG91ZCwgdGhpcyB2YWx1ZSBpcyBmcm9tIHRoZSBwcm92aWRlci5cbiAqXG4gKiBAZXhhbXBsZSBhbWktMDdiMDZiNDQyOTIxODMxZTVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0lNQUdFX0lEID0gJ2hvc3QuaW1hZ2UuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBWTSBpbWFnZSBvciBPUyBpbnN0YWxsIHRoZSBob3N0IHdhcyBpbnN0YW50aWF0ZWQgZnJvbS5cbiAqXG4gKiBAZXhhbXBsZSBpbmZyYS1hbWktZWtzLXdvcmtlci1ub2RlLTdkNGVjNzgzMTJcbiAqIEBleGFtcGxlIENlbnRPUy04LXg4Nl82NC0xOTA1XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSE9TVF9JTUFHRV9OQU1FID0gJ2hvc3QuaW1hZ2UubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgVk0gaW1hZ2Ugb3IgaG9zdCBPUyBhcyBkZWZpbmVkIGluIFtWZXJzaW9uIEF0dHJpYnV0ZXNdKC9kb2NzL3Jlc291cmNlL1JFQURNRS5tZCN2ZXJzaW9uLWF0dHJpYnV0ZXMpLlxuICpcbiAqIEBleGFtcGxlIDAuMVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSU1BR0VfVkVSU0lPTiA9ICdob3N0LmltYWdlLnZlcnNpb24nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0LiBPbiBVbml4IHN5c3RlbXMsIGl0IG1heSBjb250YWluIHdoYXQgdGhlIGhvc3RuYW1lIGNvbW1hbmQgcmV0dXJucywgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LXRlc3RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSAnaG9zdC5uYW1lJztcbi8qKlxuICogVHlwZSBvZiBob3N0LiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgbWFjaGluZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlIG4xLXN0YW5kYXJkLTFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX1RZUEUgPSAnaG9zdC50eXBlJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gKlxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeS1jbHVzdGVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSzhTX0NMVVNURVJfTkFNRSA9ICdrOHMuY2x1c3Rlci5uYW1lJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIERlcGxveW1lbnQuXG4gKlxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0s4U19ERVBMT1lNRU5UX05BTUUgPSAnazhzLmRlcGxveW1lbnQubmFtZSc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBuYW1lc3BhY2UgdGhhdCB0aGUgcG9kIGlzIHJ1bm5pbmcgaW4uXG4gKlxuICogQGV4YW1wbGUgZGVmYXVsdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0s4U19OQU1FU1BBQ0VfTkFNRSA9ICdrOHMubmFtZXNwYWNlLm5hbWUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgUG9kLlxuICpcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnktcG9kLWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSzhTX1BPRF9OQU1FID0gJ2s4cy5wb2QubmFtZSc7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVFlQRSA9ICdvcy50eXBlJztcbi8qKlxuICogVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFzIGRlZmluZWQgaW4gW1ZlcnNpb24gQXR0cmlidXRlc10oL2RvY3MvcmVzb3VyY2UvUkVBRE1FLm1kI3ZlcnNpb24tYXR0cmlidXRlcykuXG4gKlxuICogQGV4YW1wbGUgMTQuMi4xXG4gKiBAZXhhbXBsZSAxOC4wNC4xXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9ICdvcy52ZXJzaW9uJztcbi8qKlxuICogVGhlIGNvbW1hbmQgdXNlZCB0byBsYXVuY2ggdGhlIHByb2Nlc3MgKGkuZS4gdGhlIGNvbW1hbmQgbmFtZSkuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHplcm90aCBzdHJpbmcgaW4gYHByb2MvW3BpZF0vY21kbGluZWAuIE9uIFdpbmRvd3MsIGNhbiBiZSBzZXQgdG8gdGhlIGZpcnN0IHBhcmFtZXRlciBleHRyYWN0ZWQgZnJvbSBgR2V0Q29tbWFuZExpbmVXYC5cbiAqXG4gKiBAZXhhbXBsZSBjbWQvb3RlbGNvbFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfQ09NTUFORCA9ICdwcm9jZXNzLmNvbW1hbmQnO1xuLyoqXG4gKiBBbGwgdGhlIGNvbW1hbmQgYXJndW1lbnRzIChpbmNsdWRpbmcgdGhlIGNvbW1hbmQvZXhlY3V0YWJsZSBpdHNlbGYpIGFzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLiBPbiBMaW51eC1iYXNlZCBzeXN0ZW1zIChhbmQgc29tZSBvdGhlciBVbml4b2lkIHN5c3RlbXMgc3VwcG9ydGluZyBwcm9jZnMpLCBjYW4gYmUgc2V0IGFjY29yZGluZyB0byB0aGUgbGlzdCBvZiBudWxsLWRlbGltaXRlZCBzdHJpbmdzIGV4dHJhY3RlZCBmcm9tIGBwcm9jL1twaWRdL2NtZGxpbmVgLiBGb3IgbGliYy1iYXNlZCBleGVjdXRhYmxlcywgdGhpcyB3b3VsZCBiZSB0aGUgZnVsbCBhcmd2IHZlY3RvciBwYXNzZWQgdG8gYG1haW5gLlxuICpcbiAqIEBleGFtcGxlIFtcImNtZC9vdGVjb2xcIiwgXCItLWNvbmZpZz1jb25maWcueWFtbFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfQ09NTUFORF9BUkdTID0gJ3Byb2Nlc3MuY29tbWFuZF9hcmdzJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZS4gT24gTGludXggYmFzZWQgc3lzdGVtcywgdGhpcyAqKlNIT1VMRCoqIGJlIHNldCB0byB0aGUgYmFzZSBuYW1lIG9mIHRoZSB0YXJnZXQgb2YgYC9wcm9jL1twaWRdL2V4ZWAuIE9uIFdpbmRvd3MsIHRoaXMgKipTSE9VTEQqKiBiZSBzZXQgdG8gdGhlIGJhc2UgbmFtZSBvZiBgR2V0UHJvY2Vzc0ltYWdlRmlsZU5hbWVXYC5cbiAqXG4gKiBAZXhhbXBsZSBvdGVsY29sXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19FWEVDVVRBQkxFX05BTUUgPSAncHJvY2Vzcy5leGVjdXRhYmxlLm5hbWUnO1xuLyoqXG4gKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9jZXNzIGV4ZWN1dGFibGUuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHRhcmdldCBvZiBgcHJvYy9bcGlkXS9leGVgLiBPbiBXaW5kb3dzLCBjYW4gYmUgc2V0IHRvIHRoZSByZXN1bHQgb2YgYEdldFByb2Nlc3NJbWFnZUZpbGVOYW1lV2AuXG4gKlxuICogQGV4YW1wbGUgL3Vzci9iaW4vY21kL290ZWxjb2xcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9ICdwcm9jZXNzLmV4ZWN1dGFibGUucGF0aCc7XG4vKipcbiAqIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlciB0aGF0IG93bnMgdGhlIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgcm9vdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfT1dORVIgPSAncHJvY2Vzcy5vd25lcic7XG4vKipcbiAqIFByb2Nlc3MgaWRlbnRpZmllciAoUElEKS5cbiAqXG4gKiBAZXhhbXBsZSAxMjM0XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSAncHJvY2Vzcy5waWQnO1xuLyoqXG4gKiBBbiBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGFib3V0IHRoZSBydW50aW1lIG9mIHRoZSBwcm9jZXNzLCBmb3IgZXhhbXBsZSBhIHNwZWNpZmljIHZlbmRvciBjdXN0b21pemF0aW9uIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEBleGFtcGxlIFwiRWNsaXBzZSBPcGVuSjkgRWNsaXBzZSBPcGVuSjkgVk0gb3Blbmo5LTAuMjEuMFwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OID0gJ3Byb2Nlc3MucnVudGltZS5kZXNjcmlwdGlvbic7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBydW50aW1lIG9mIHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiBAZXhhbXBsZSBPcGVuSkRLIFJ1bnRpbWUgRW52aXJvbm1lbnRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRSA9ICdwcm9jZXNzLnJ1bnRpbWUubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBydW50aW1lIG9mIHRoaXMgcHJvY2VzcywgYXMgcmV0dXJuZWQgYnkgdGhlIHJ1bnRpbWUgd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogQGV4YW1wbGUgXCIxNC4wLjJcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OID0gJ3Byb2Nlc3MucnVudGltZS52ZXJzaW9uJztcbi8qKlxuICogVGhlIHN0cmluZyBJRCBvZiB0aGUgc2VydmljZSBpbnN0YW5jZS5cbiAqXG4gKiBAZXhhbXBsZSA2MjdjYzQ5My1mMzEwLTQ3ZGUtOTZiZC03MTQxMGI3ZGVjMDlcbiAqXG4gKiBAbm90ZSAqKk1VU1QqKiBiZSB1bmlxdWUgZm9yIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHNhbWUgYHNlcnZpY2UubmFtZXNwYWNlLHNlcnZpY2UubmFtZWAgcGFpciAoaW4gb3RoZXIgd29yZHNcbiAqIGBzZXJ2aWNlLm5hbWVzcGFjZSxzZXJ2aWNlLm5hbWUsc2VydmljZS5pbnN0YW5jZS5pZGAgdHJpcGxldCAqKk1VU1QqKiBiZSBnbG9iYWxseSB1bmlxdWUpLiBUaGUgSUQgaGVscHMgdG9cbiAqIGRpc3Rpbmd1aXNoIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBzZXJ2aWNlIHRoYXQgZXhpc3QgYXQgdGhlIHNhbWUgdGltZSAoZS5nLiBpbnN0YW5jZXMgb2YgYSBob3Jpem9udGFsbHkgc2NhbGVkXG4gKiBzZXJ2aWNlKS5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgU0RLcywgYXJlIHJlY29tbWVuZGVkIHRvIGdlbmVyYXRlIGEgcmFuZG9tIFZlcnNpb24gMSBvciBWZXJzaW9uIDQgW1JGQ1xuICogNDEyMl0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQxMjIudHh0KSBVVUlELCBidXQgYXJlIGZyZWUgdG8gdXNlIGFuIGluaGVyZW50IHVuaXF1ZSBJRCBhcyB0aGUgc291cmNlIG9mXG4gKiB0aGlzIHZhbHVlIGlmIHN0YWJpbGl0eSBpcyBkZXNpcmFibGUuIEluIHRoYXQgY2FzZSwgdGhlIElEICoqU0hPVUxEKiogYmUgdXNlZCBhcyBzb3VyY2Ugb2YgYSBVVUlEIFZlcnNpb24gNSBhbmRcbiAqICoqU0hPVUxEKiogdXNlIHRoZSBmb2xsb3dpbmcgVVVJRCBhcyB0aGUgbmFtZXNwYWNlOiBgNGQ2MzAwOWEtOGQwZi0xMWVlLWFhZDctNGM3OTZlZDhlMzIwYC5cbiAqXG4gKiBVVUlEcyBhcmUgdHlwaWNhbGx5IHJlY29tbWVuZGVkLCBhcyBvbmx5IGFuIG9wYXF1ZSB2YWx1ZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGlkZW50aWZ5aW5nIGEgc2VydmljZSBpbnN0YW5jZSBpc1xuICogbmVlZGVkLiBTaW1pbGFyIHRvIHdoYXQgY2FuIGJlIHNlZW4gaW4gdGhlIG1hbiBwYWdlIGZvciB0aGVcbiAqIFtgL2V0Yy9tYWNoaW5lLWlkYF0oaHR0cHM6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL2xhdGVzdC9tYWNoaW5lLWlkLmh0bWwpIGZpbGUsIHRoZSB1bmRlcmx5aW5nXG4gKiBkYXRhLCBzdWNoIGFzIHBvZCBuYW1lIGFuZCBuYW1lc3BhY2Ugc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY29uZmlkZW50aWFsLCBiZWluZyB0aGUgdXNlcidzIGNob2ljZSB0byBleHBvc2UgaXRcbiAqIG9yIG5vdCB2aWEgYW5vdGhlciByZXNvdXJjZSBhdHRyaWJ1dGUuXG4gKlxuICogRm9yIGFwcGxpY2F0aW9ucyBydW5uaW5nIGJlaGluZCBhbiBhcHBsaWNhdGlvbiBzZXJ2ZXIgKGxpa2UgdW5pY29ybiksIHdlIGRvIG5vdCByZWNvbW1lbmQgdXNpbmcgb25lIGlkZW50aWZpZXJcbiAqIGZvciBhbGwgcHJvY2Vzc2VzIHBhcnRpY2lwYXRpbmcgaW4gdGhlIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBpdCdzIHJlY29tbWVuZGVkIGVhY2ggZGl2aXNpb24gKGUuZy4gYSB3b3JrZXJcbiAqIHRocmVhZCBpbiB1bmljb3JuKSB0byBoYXZlIGl0cyBvd24gaW5zdGFuY2UuaWQuXG4gKlxuICogSXQncyBub3QgcmVjb21tZW5kZWQgZm9yIGEgQ29sbGVjdG9yIHRvIHNldCBgc2VydmljZS5pbnN0YW5jZS5pZGAgaWYgaXQgY2FuJ3QgdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmUgdGhlXG4gKiBzZXJ2aWNlIGluc3RhbmNlIHRoYXQgaXMgZ2VuZXJhdGluZyB0aGF0IHRlbGVtZXRyeS4gRm9yIGluc3RhbmNlLCBjcmVhdGluZyBhbiBVVUlEIGJhc2VkIG9uIGBwb2QubmFtZWAgd2lsbFxuICogbGlrZWx5IGJlIHdyb25nLCBhcyB0aGUgQ29sbGVjdG9yIG1pZ2h0IG5vdCBrbm93IGZyb20gd2hpY2ggY29udGFpbmVyIHdpdGhpbiB0aGF0IHBvZCB0aGUgdGVsZW1ldHJ5IG9yaWdpbmF0ZWQuXG4gKiBIb3dldmVyLCBDb2xsZWN0b3JzIGNhbiBzZXQgdGhlIGBzZXJ2aWNlLmluc3RhbmNlLmlkYCBpZiB0aGV5IGNhbiB1bmFtYmlndW91c2x5IGRldGVybWluZSB0aGUgc2VydmljZSBpbnN0YW5jZVxuICogZm9yIHRoYXQgdGVsZW1ldHJ5LiBUaGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSBmb3Igc2NyYXBpbmcgcmVjZWl2ZXJzLCBhcyB0aGV5IGtub3cgdGhlIHRhcmdldCBhZGRyZXNzIGFuZFxuICogcG9ydC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9TRVJWSUNFX0lOU1RBTkNFX0lEID0gJ3NlcnZpY2UuaW5zdGFuY2UuaWQnO1xuLyoqXG4gKiBBIG5hbWVzcGFjZSBmb3IgYHNlcnZpY2UubmFtZWAuXG4gKlxuICogQGV4YW1wbGUgU2hvcFxuICpcbiAqIEBub3RlIEEgc3RyaW5nIHZhbHVlIGhhdmluZyBhIG1lYW5pbmcgdGhhdCBoZWxwcyB0byBkaXN0aW5ndWlzaCBhIGdyb3VwIG9mIHNlcnZpY2VzLCBmb3IgZXhhbXBsZSB0aGUgdGVhbSBuYW1lIHRoYXQgb3ducyBhIGdyb3VwIG9mIHNlcnZpY2VzLiBgc2VydmljZS5uYW1lYCBpcyBleHBlY3RlZCB0byBiZSB1bmlxdWUgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS4gSWYgYHNlcnZpY2UubmFtZXNwYWNlYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBSZXNvdXJjZSB0aGVuIGBzZXJ2aWNlLm5hbWVgIGlzIGV4cGVjdGVkIHRvIGJlIHVuaXF1ZSBmb3IgYWxsIHNlcnZpY2VzIHRoYXQgaGF2ZSBubyBleHBsaWNpdCBuYW1lc3BhY2UgZGVmaW5lZCAoc28gdGhlIGVtcHR5L3Vuc3BlY2lmaWVkIG5hbWVzcGFjZSBpcyBzaW1wbHkgb25lIG1vcmUgdmFsaWQgbmFtZXNwYWNlKS4gWmVyby1sZW5ndGggbmFtZXNwYWNlIHN0cmluZyBpcyBhc3N1bWVkIGVxdWFsIHRvIHVuc3BlY2lmaWVkIG5hbWVzcGFjZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9TRVJWSUNFX05BTUVTUEFDRSA9ICdzZXJ2aWNlLm5hbWVzcGFjZSc7XG4vKipcbiAqIEFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHdlYiBlbmdpbmUgKGUuZy4gZGV0YWlsZWQgdmVyc2lvbiBhbmQgZWRpdGlvbiBpbmZvcm1hdGlvbikuXG4gKlxuICogQGV4YW1wbGUgV2lsZEZseSBGdWxsIDIxLjAuMC5GaW5hbCAoV2lsZEZseSBDb3JlIDEzLjAuMS5GaW5hbCkgLSAyLjIuMi5GaW5hbFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1dFQkVOR0lORV9ERVNDUklQVElPTiA9ICd3ZWJlbmdpbmUuZGVzY3JpcHRpb24nO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgd2ViIGVuZ2luZS5cbiAqXG4gKiBAZXhhbXBsZSBXaWxkRmx5XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfV0VCRU5HSU5FX05BTUUgPSAnd2ViZW5naW5lLm5hbWUnO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgd2ViIGVuZ2luZS5cbiAqXG4gKiBAZXhhbXBsZSAyMS4wLjBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfVkVSU0lPTiA9ICd3ZWJlbmdpbmUudmVyc2lvbic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leGVjQXN5bmMgPSB2b2lkIDA7XG5jb25zdCBjaGlsZF9wcm9jZXNzID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7XG5jb25zdCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5leHBvcnRzLmV4ZWNBc3luYyA9IHV0aWwucHJvbWlzaWZ5KGNoaWxkX3Byb2Nlc3MuZXhlYyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjQXN5bmMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IHZvaWQgMDtcbmNvbnN0IGV4ZWNBc3luY18xID0gcmVxdWlyZShcIi4vZXhlY0FzeW5jXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKCdpb3JlZyAtcmQxIC1jIFwiSU9QbGF0Zm9ybUV4cGVydERldmljZVwiJyk7XG4gICAgICAgIGNvbnN0IGlkTGluZSA9IHJlc3VsdC5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC5maW5kKGxpbmUgPT4gbGluZS5pbmNsdWRlcygnSU9QbGF0Zm9ybVVVSUQnKSk7XG4gICAgICAgIGlmICghaWRMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnRzID0gaWRMaW5lLnNwbGl0KCdcIiA9IFwiJyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1sxXS5zbGljZSgwLCAtMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3IgcmVhZGluZyBtYWNoaW5lIGlkOiAke2V9YCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IGdldE1hY2hpbmVJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hY2hpbmVJZC1kYXJ3aW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5hc3luYyBmdW5jdGlvbiBnZXRNYWNoaW5lSWQoKSB7XG4gICAgY29uc3QgcGF0aHMgPSBbJy9ldGMvbWFjaGluZS1pZCcsICcvdmFyL2xpYi9kYnVzL21hY2hpbmUtaWQnXTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZzXzEucHJvbWlzZXMucmVhZEZpbGUocGF0aCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYGVycm9yIHJlYWRpbmcgbWFjaGluZSBpZDogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IGdldE1hY2hpbmVJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hY2hpbmVJZC1saW51eC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGV4ZWNBc3luY18xID0gcmVxdWlyZShcIi4vZXhlY0FzeW5jXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZzXzEucHJvbWlzZXMucmVhZEZpbGUoJy9ldGMvaG9zdGlkJywgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3IgcmVhZGluZyBtYWNoaW5lIGlkOiAke2V9YCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKCdrZW52IC1xIHNtYmlvcy5zeXN0ZW0udXVpZCcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYGVycm9yIHJlYWRpbmcgbWFjaGluZSBpZDogJHtlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSBnZXRNYWNoaW5lSWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRNYWNoaW5lSWQtYnNkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSB2b2lkIDA7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5jb25zdCBleGVjQXN5bmNfMSA9IHJlcXVpcmUoXCIuL2V4ZWNBc3luY1wiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGdldE1hY2hpbmVJZCgpIHtcbiAgICBjb25zdCBhcmdzID0gJ1FVRVJZIEhLRVlfTE9DQUxfTUFDSElORVxcXFxTT0ZUV0FSRVxcXFxNaWNyb3NvZnRcXFxcQ3J5cHRvZ3JhcGh5IC92IE1hY2hpbmVHdWlkJztcbiAgICBsZXQgY29tbWFuZCA9ICcld2luZGlyJVxcXFxTeXN0ZW0zMlxcXFxSRUcuZXhlJztcbiAgICBpZiAocHJvY2Vzcy5hcmNoID09PSAnaWEzMicgJiYgJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInIGluIHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGNvbW1hbmQgPSAnJXdpbmRpciVcXFxcc3lzbmF0aXZlXFxcXGNtZC5leGUgL2MgJyArIGNvbW1hbmQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKGAke2NvbW1hbmR9ICR7YXJnc31gKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSByZXN1bHQuc3Rkb3V0LnNwbGl0KCdSRUdfU1onKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBlcnJvciByZWFkaW5nIG1hY2hpbmUgaWQ6ICR7ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gZ2V0TWFjaGluZUlkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0TWFjaGluZUlkLXdpbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIGFwaV8xLmRpYWcuZGVidWcoJ2NvdWxkIG5vdCByZWFkIG1hY2hpbmUtaWQ6IHVuc3VwcG9ydGVkIHBsYXRmb3JtJyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gZ2V0TWFjaGluZUlkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0TWFjaGluZUlkLXVuc3VwcG9ydGVkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5sZXQgZ2V0TWFjaGluZUlkSW1wbDtcbmFzeW5jIGZ1bmN0aW9uIGdldE1hY2hpbmVJZCgpIHtcbiAgICBpZiAoIWdldE1hY2hpbmVJZEltcGwpIHtcbiAgICAgICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgICAgICAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC1kYXJ3aW4uanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgICAgICAgICAgICBnZXRNYWNoaW5lSWRJbXBsID0gKGF3YWl0IGltcG9ydCgnLi9nZXRNYWNoaW5lSWQtbGludXguanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZyZWVic2QnOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC1ic2QuanMnKSkuZ2V0TWFjaGluZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2luMzInOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC13aW4uanMnKSkuZ2V0TWFjaGluZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBnZXRNYWNoaW5lSWRJbXBsID0gKGF3YWl0IGltcG9ydCgnLi9nZXRNYWNoaW5lSWQtdW5zdXBwb3J0ZWQuanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkSW1wbCgpO1xufVxuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSBnZXRNYWNoaW5lSWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRNYWNoaW5lSWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm9ybWFsaXplVHlwZSA9IGV4cG9ydHMubm9ybWFsaXplQXJjaCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBub3JtYWxpemVBcmNoID0gKG5vZGVBcmNoU3RyaW5nKSA9PiB7XG4gICAgLy8gTWFwcyBmcm9tIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvb3MuaHRtbCNvc2FyY2ggdG8gYXJjaCB2YWx1ZXMgaW4gc3BlYzpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1zcGVjaWZpY2F0aW9uL2Jsb2IvbWFpbi9zcGVjaWZpY2F0aW9uL3Jlc291cmNlL3NlbWFudGljX2NvbnZlbnRpb25zL2hvc3QubWRcbiAgICBzd2l0Y2ggKG5vZGVBcmNoU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgJ2FybSc6XG4gICAgICAgICAgICByZXR1cm4gJ2FybTMyJztcbiAgICAgICAgY2FzZSAncHBjJzpcbiAgICAgICAgICAgIHJldHVybiAncHBjMzInO1xuICAgICAgICBjYXNlICd4NjQnOlxuICAgICAgICAgICAgcmV0dXJuICdhbWQ2NCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbm9kZUFyY2hTdHJpbmc7XG4gICAgfVxufTtcbmV4cG9ydHMubm9ybWFsaXplQXJjaCA9IG5vcm1hbGl6ZUFyY2g7XG5jb25zdCBub3JtYWxpemVUeXBlID0gKG5vZGVQbGF0Zm9ybSkgPT4ge1xuICAgIC8vIE1hcHMgZnJvbSBodHRwczovL25vZGVqcy5vcmcvYXBpL29zLmh0bWwjb3NwbGF0Zm9ybSB0byBhcmNoIHZhbHVlcyBpbiBzcGVjOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vYmxvYi9tYWluL3NwZWNpZmljYXRpb24vcmVzb3VyY2Uvc2VtYW50aWNfY29udmVudGlvbnMvb3MubWRcbiAgICBzd2l0Y2ggKG5vZGVQbGF0Zm9ybSkge1xuICAgICAgICBjYXNlICdzdW5vcyc6XG4gICAgICAgICAgICByZXR1cm4gJ3NvbGFyaXMnO1xuICAgICAgICBjYXNlICd3aW4zMic6XG4gICAgICAgICAgICByZXR1cm4gJ3dpbmRvd3MnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5vZGVQbGF0Zm9ybTtcbiAgICB9XG59O1xuZXhwb3J0cy5ub3JtYWxpemVUeXBlID0gbm9ybWFsaXplVHlwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ob3N0RGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VtY29udlwiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBnZXRNYWNoaW5lSWRfMSA9IHJlcXVpcmUoXCIuL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBIb3N0RGV0ZWN0b3IgZGV0ZWN0cyB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlIGhvc3QgY3VycmVudCBwcm9jZXNzIGlzXG4gKiBydW5uaW5nIG9uLiBDdXJyZW50bHkgb25seSBub24tY2xvdWQtYmFzZWQgYXR0cmlidXRlcyBhcmUgaW5jbHVkZWQuXG4gKi9cbmNsYXNzIEhvc3REZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX05BTUVdOiAoMCwgb3NfMS5ob3N0bmFtZSkoKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0FSQ0hdOiAoMCwgdXRpbHNfMS5ub3JtYWxpemVBcmNoKSgoMCwgb3NfMS5hcmNoKSgpKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0lEXTogKDAsIGdldE1hY2hpbmVJZF8xLmdldE1hY2hpbmVJZCkoKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlcyB9O1xuICAgIH1cbn1cbmV4cG9ydHMuaG9zdERldGVjdG9yID0gbmV3IEhvc3REZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SG9zdERldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vc0RldGVjdG9yID0gdm9pZCAwO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlbWNvbnZcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBPU0RldGVjdG9yIGRldGVjdHMgdGhlIHJlc291cmNlcyByZWxhdGVkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUykgb25cbiAqIHdoaWNoIHRoZSBwcm9jZXNzIHJlcHJlc2VudGVkIGJ5IHRoaXMgcmVzb3VyY2UgaXMgcnVubmluZy5cbiAqL1xuY2xhc3MgT1NEZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9PU19UWVBFXTogKDAsIHV0aWxzXzEubm9ybWFsaXplVHlwZSkoKDAsIG9zXzEucGxhdGZvcm0pKCkpLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX09TX1ZFUlNJT05dOiAoMCwgb3NfMS5yZWxlYXNlKSgpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5vc0RldGVjdG9yID0gbmV3IE9TRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9TRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zZW1jb252XCIpO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG4vKipcbiAqIFByb2Nlc3NEZXRlY3RvciB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSByZXNvdXJjZXMgcmVsYXRlZCBjdXJyZW50IHByb2Nlc3MgcnVubmluZ1xuICogYW5kIGJlaW5nIGluc3RydW1lbnRlZCBmcm9tIHRoZSBOb2RlSlMgUHJvY2VzcyBtb2R1bGUuXG4gKi9cbmNsYXNzIFByb2Nlc3NEZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1BJRF06IHByb2Nlc3MucGlkLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfRVhFQ1VUQUJMRV9OQU1FXTogcHJvY2Vzcy50aXRsZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSF06IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19DT01NQU5EX0FSR1NdOiBbXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5hcmd2WzBdLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3MuZXhlY0FyZ3YsXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTl06IHByb2Nlc3MudmVyc2lvbnMubm9kZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRV06ICdub2RlanMnLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTl06ICdOb2RlLmpzJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfQ09NTUFORF0gPSBwcm9jZXNzLmFyZ3ZbMV07XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gb3MudXNlckluZm8oKTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19PV05FUl0gPSB1c2VySW5mby51c2VybmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3Igb2J0YWluaW5nIHByb2Nlc3Mgb3duZXI6ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5wcm9jZXNzRGV0ZWN0b3IgPSBuZXcgUHJvY2Vzc0RldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9jZXNzRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VtY29udlwiKTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbi8qKlxuICogU2VydmljZUluc3RhbmNlSWREZXRlY3RvciBkZXRlY3RzIHRoZSByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgc2VydmljZSBpbnN0YW5jZSBJRC5cbiAqL1xuY2xhc3MgU2VydmljZUluc3RhbmNlSWREZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRF06ICgwLCBjcnlwdG9fMS5yYW5kb21VVUlEKSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yID0gbmV3IFNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSBleHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IGV4cG9ydHMub3NEZXRlY3RvciA9IGV4cG9ydHMuaG9zdERldGVjdG9yID0gdm9pZCAwO1xudmFyIEhvc3REZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vSG9zdERldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaG9zdERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBIb3N0RGV0ZWN0b3JfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG52YXIgT1NEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vT1NEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9zRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9TRGV0ZWN0b3JfMS5vc0RldGVjdG9yOyB9IH0pO1xudmFyIFByb2Nlc3NEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vUHJvY2Vzc0RldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9jZXNzRGV0ZWN0b3JfMS5wcm9jZXNzRGV0ZWN0b3I7IH0gfSk7XG52YXIgU2VydmljZUluc3RhbmNlSWREZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VydmljZUluc3RhbmNlSWREZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VydmljZUluc3RhbmNlSWREZXRlY3RvciA9IGV4cG9ydHMucHJvY2Vzc0RldGVjdG9yID0gZXhwb3J0cy5vc0RldGVjdG9yID0gZXhwb3J0cy5ob3N0RGV0ZWN0b3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJob3N0RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEub3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb2Nlc3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLnByb2Nlc3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vb3BEZXRlY3RvciA9IGV4cG9ydHMuTm9vcERldGVjdG9yID0gdm9pZCAwO1xuY2xhc3MgTm9vcERldGVjdG9yIHtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLk5vb3BEZXRlY3RvciA9IE5vb3BEZXRlY3RvcjtcbmV4cG9ydHMubm9vcERldGVjdG9yID0gbmV3IE5vb3BEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9vcERldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub29wRGV0ZWN0b3IgPSBleHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSBleHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IGV4cG9ydHMub3NEZXRlY3RvciA9IGV4cG9ydHMuaG9zdERldGVjdG9yID0gZXhwb3J0cy5lbnZEZXRlY3RvciA9IHZvaWQgMDtcbnZhciBFbnZEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vRW52RGV0ZWN0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnZEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRW52RGV0ZWN0b3JfMS5lbnZEZXRlY3RvcjsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJob3N0RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuaG9zdERldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5vc0RldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLnByb2Nlc3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuc2VydmljZUluc3RhbmNlSWREZXRlY3RvcjsgfSB9KTtcbnZhciBOb29wRGV0ZWN0b3JfMSA9IHJlcXVpcmUoXCIuL05vb3BEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vb3BEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcERldGVjdG9yXzEubm9vcERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IGV4cG9ydHMuZW1wdHlSZXNvdXJjZSA9IGV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzID0gZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yID0gZXhwb3J0cy5wcm9jZXNzRGV0ZWN0b3IgPSBleHBvcnRzLm9zRGV0ZWN0b3IgPSBleHBvcnRzLmhvc3REZXRlY3RvciA9IGV4cG9ydHMuZW52RGV0ZWN0b3IgPSBleHBvcnRzLmRldGVjdFJlc291cmNlcyA9IHZvaWQgMDtcbnZhciBkZXRlY3RfcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiLi9kZXRlY3QtcmVzb3VyY2VzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGV0ZWN0UmVzb3VyY2VzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RfcmVzb3VyY2VzXzEuZGV0ZWN0UmVzb3VyY2VzOyB9IH0pO1xudmFyIGRldGVjdG9yc18xID0gcmVxdWlyZShcIi4vZGV0ZWN0b3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW52RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRldGVjdG9yc18xLmVudkRldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaG9zdERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5vc0RldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5wcm9jZXNzRGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xudmFyIFJlc291cmNlSW1wbF8xID0gcmVxdWlyZShcIi4vUmVzb3VyY2VJbXBsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzb3VyY2VGcm9tQXR0cmlidXRlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEucmVzb3VyY2VGcm9tQXR0cmlidXRlczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRSZXNvdXJjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEuZGVmYXVsdFJlc291cmNlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW1wdHlSZXNvdXJjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEuZW1wdHlSZXNvdXJjZTsgfSB9KTtcbnZhciBkZWZhdWx0X3NlcnZpY2VfbmFtZV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdC1zZXJ2aWNlLW5hbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0U2VydmljZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmF1bHRfc2VydmljZV9uYW1lXzEuZGVmYXVsdFNlcnZpY2VOYW1lOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY29udGV4dCwgZGlhZywgVHJhY2VGbGFncyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBCaW5kT25jZUZ1dHVyZSwgRXhwb3J0UmVzdWx0Q29kZSwgZ2V0TnVtYmVyRnJvbUVudiwgZ2xvYmFsRXJyb3JIYW5kbGVyLCBzdXBwcmVzc1RyYWNpbmcsIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvY29yZSc7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgU3BhblByb2Nlc3Nvcn0gdGhhdCBiYXRjaGVzIHNwYW5zIGV4cG9ydGVkIGJ5XG4gKiB0aGUgU0RLIHRoZW4gcHVzaGVzIHRoZW0gdG8gdGhlIGV4cG9ydGVyIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY2xhc3MgQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZSB7XG4gICAgX21heEV4cG9ydEJhdGNoU2l6ZTtcbiAgICBfbWF4UXVldWVTaXplO1xuICAgIF9zY2hlZHVsZWREZWxheU1pbGxpcztcbiAgICBfZXhwb3J0VGltZW91dE1pbGxpcztcbiAgICBfZXhwb3J0ZXI7XG4gICAgX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgX2ZpbmlzaGVkU3BhbnMgPSBbXTtcbiAgICBfdGltZXI7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBfZHJvcHBlZFNwYW5zQ291bnQgPSAwO1xuICAgIGNvbnN0cnVjdG9yKGV4cG9ydGVyLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5fZXhwb3J0ZXIgPSBleHBvcnRlcjtcbiAgICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID1cbiAgICAgICAgICAgIHR5cGVvZiBjb25maWc/Lm1heEV4cG9ydEJhdGNoU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5tYXhFeHBvcnRCYXRjaFNpemVcbiAgICAgICAgICAgICAgICA6IChnZXROdW1iZXJGcm9tRW52KCdPVEVMX0JTUF9NQVhfRVhQT1JUX0JBVENIX1NJWkUnKSA/PyA1MTIpO1xuICAgICAgICB0aGlzLl9tYXhRdWV1ZVNpemUgPVxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZz8ubWF4UXVldWVTaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gY29uZmlnLm1heFF1ZXVlU2l6ZVxuICAgICAgICAgICAgICAgIDogKGdldE51bWJlckZyb21FbnYoJ09URUxfQlNQX01BWF9RVUVVRV9TSVpFJykgPz8gMjA0OCk7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzID1cbiAgICAgICAgICAgIHR5cGVvZiBjb25maWc/LnNjaGVkdWxlZERlbGF5TWlsbGlzID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gY29uZmlnLnNjaGVkdWxlZERlbGF5TWlsbGlzXG4gICAgICAgICAgICAgICAgOiAoZ2V0TnVtYmVyRnJvbUVudignT1RFTF9CU1BfU0NIRURVTEVfREVMQVknKSA/PyA1MDAwKTtcbiAgICAgICAgdGhpcy5fZXhwb3J0VGltZW91dE1pbGxpcyA9XG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnPy5leHBvcnRUaW1lb3V0TWlsbGlzID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gY29uZmlnLmV4cG9ydFRpbWVvdXRNaWxsaXNcbiAgICAgICAgICAgICAgICA6IChnZXROdW1iZXJGcm9tRW52KCdPVEVMX0JTUF9FWFBPUlRfVElNRU9VVCcpID8/IDMwMDAwKTtcbiAgICAgICAgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IEJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA+IHRoaXMuX21heFF1ZXVlU2l6ZSkge1xuICAgICAgICAgICAgZGlhZy53YXJuKCdCYXRjaFNwYW5Qcm9jZXNzb3I6IG1heEV4cG9ydEJhdGNoU2l6ZSBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gbWF4UXVldWVTaXplLCBzZXR0aW5nIG1heEV4cG9ydEJhdGNoU2l6ZSB0byBtYXRjaCBtYXhRdWV1ZVNpemUnKTtcbiAgICAgICAgICAgIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9IHRoaXMuX21heFF1ZXVlU2l6ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgfVxuICAgIC8vIGRvZXMgbm90aGluZy5cbiAgICBvblN0YXJ0KF9zcGFuLCBfcGFyZW50Q29udGV4dCkgeyB9XG4gICAgb25FbmQoc3Bhbikge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VGbGFncyAmIFRyYWNlRmxhZ3MuU0FNUExFRCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hZGRUb0J1ZmZlcihzcGFuKTtcbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH1cbiAgICBfc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25TaHV0ZG93bigpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBBZGQgYSBzcGFuIGluIHRoZSBidWZmZXIuICovXG4gICAgX2FkZFRvQnVmZmVyKHNwYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heFF1ZXVlU2l6ZSkge1xuICAgICAgICAgICAgLy8gbGltaXQgcmVhY2hlZCwgZHJvcCBzcGFuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBkaWFnLmRlYnVnKCdtYXhRdWV1ZVNpemUgcmVhY2hlZCwgZHJvcHBpbmcgc3BhbnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50Kys7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID4gMCkge1xuICAgICAgICAgICAgLy8gc29tZSBzcGFucyB3ZXJlIGRyb3BwZWQsIGxvZyBvbmNlIHdpdGggY291bnQgb2Ygc3BhbnMgZHJvcHBlZFxuICAgICAgICAgICAgZGlhZy53YXJuKGBEcm9wcGVkICR7dGhpcy5fZHJvcHBlZFNwYW5zQ291bnR9IHNwYW5zIGJlY2F1c2UgbWF4UXVldWVTaXplIHJlYWNoZWRgKTtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maW5pc2hlZFNwYW5zLnB1c2goc3Bhbik7XG4gICAgICAgIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGFsbCBzcGFucyB0byB0aGUgZXhwb3J0ZXIgcmVzcGVjdGluZyB0aGUgYmF0Y2ggc2l6ZSBsaW1pdFxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IG9uIGZvcmNlRmx1c2ggb3Igc2h1dGRvd24sXG4gICAgICogZm9yIGFsbCBvdGhlciBjYXNlcyBfZmx1c2ggc2hvdWxkIGJlIHVzZWRcbiAgICAgKiAqL1xuICAgIF9mbHVzaEFsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICAvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIGJhdGNoZXNcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gTWF0aC5jZWlsKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoIC8gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gY291bnQ7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2ZsdXNoT25lQmF0Y2goKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9mbHVzaE9uZUJhdGNoKCkge1xuICAgICAgICB0aGlzLl9jbGVhclRpbWVyKCk7XG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IHdhaXQgYW55bW9yZSBmb3IgZXhwb3J0LCB0aGlzIHdheSB0aGUgbmV4dCBiYXRjaCBjYW4gc3RhcnRcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdUaW1lb3V0JykpO1xuICAgICAgICAgICAgfSwgdGhpcy5fZXhwb3J0VGltZW91dE1pbGxpcyk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGRvd25zdHJlYW0gZXhwb3J0ZXIgY2FsbHMgZnJvbSBnZW5lcmF0aW5nIHNwYW5zXG4gICAgICAgICAgICBjb250ZXh0LndpdGgoc3VwcHJlc3NUcmFjaW5nKGNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGZpbmlzaGVkIHNwYW5zIGJ1ZmZlciBoZXJlIGJlY2F1c2UgdGhlIG5leHQgaW52b2NhdGlvbnMgb2YgdGhlIF9mbHVzaCBtZXRob2RcbiAgICAgICAgICAgICAgICAvLyBjb3VsZCBwYXNzIHRoZSBzYW1lIGZpbmlzaGVkIHNwYW5zIHRvIHRoZSBleHBvcnRlciBpZiB0aGUgYnVmZmVyIGlzIGNsZWFyZWRcbiAgICAgICAgICAgICAgICAvLyBvdXRzaWRlIHRoZSBleGVjdXRpb24gb2YgdGhpcyBjYWxsYmFjay5cbiAgICAgICAgICAgICAgICBsZXQgc3BhbnM7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoIDw9IHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBzcGFucyA9IHRoaXMuX2ZpbmlzaGVkU3BhbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaGVkU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5zID0gdGhpcy5fZmluaXNoZWRTcGFucy5zcGxpY2UoMCwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZG9FeHBvcnQgPSAoKSA9PiB0aGlzLl9leHBvcnRlci5leHBvcnQoc3BhbnMsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY29kZSA9PT0gRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCdCYXRjaFNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxldCBwZW5kaW5nUmVzb3VyY2VzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3BhbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbi5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXNvdXJjZXMgPz89IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1Jlc291cmNlcy5wdXNoKHNwYW4ucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBdm9pZCBzY2hlZHVsaW5nIGEgcHJvbWlzZSB0byBtYWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIGFuZCBlYXNpZXIgdG8gdGVzdFxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVzb3VyY2VzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvRXhwb3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwZW5kaW5nUmVzb3VyY2VzKS50aGVuKGRvRXhwb3J0LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXJyb3JIYW5kbGVyKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbWF5YmVTdGFydFRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5faXNFeHBvcnRpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNFeHBvcnRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hPbmVCYXRjaCgpXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZ2xvYmFsRXJyb3JIYW5kbGVyKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHdlIG9ubHkgd2FpdCBpZiB0aGUgcXVldWUgZG9lc24ndCBoYXZlIGVub3VnaCBlbGVtZW50cyB5ZXRcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiBmbHVzaCgpLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyk7XG4gICAgICAgIC8vIGRlcGVuZGluZyBvbiBydW50aW1lLCB0aGlzIG1heSBiZSBhICdudW1iZXInIG9yIE5vZGVKUy5UaW1lb3V0XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fdGltZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lci51bnJlZigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jbGVhclRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmF0Y2hTcGFuUHJvY2Vzc29yQmFzZS5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBCYXRjaFNwYW5Qcm9jZXNzb3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vZXhwb3J0L0JhdGNoU3BhblByb2Nlc3NvckJhc2UnO1xuZXhwb3J0IGNsYXNzIEJhdGNoU3BhblByb2Nlc3NvciBleHRlbmRzIEJhdGNoU3BhblByb2Nlc3NvckJhc2Uge1xuICAgIG9uU2h1dGRvd24oKSB7IH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhdGNoU3BhblByb2Nlc3Nvci5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5leHBvcnQgeyBCYXRjaFNwYW5Qcm9jZXNzb3IgfSBmcm9tICcuL2V4cG9ydC9CYXRjaFNwYW5Qcm9jZXNzb3InO1xuZXhwb3J0IHsgUmFuZG9tSWRHZW5lcmF0b3IgfSBmcm9tICcuL1JhbmRvbUlkR2VuZXJhdG9yJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmV4cG9ydCB7IEJhdGNoU3BhblByb2Nlc3NvciwgUmFuZG9tSWRHZW5lcmF0b3IgfSBmcm9tICcuL25vZGUnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgVHJhY2VGbGFncyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBpbnRlcm5hbCwgRXhwb3J0UmVzdWx0Q29kZSwgZ2xvYmFsRXJyb3JIYW5kbGVyLCBCaW5kT25jZUZ1dHVyZSwgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBTcGFuUHJvY2Vzc29yfSB0aGF0IGNvbnZlcnRzIHRoZSB7QGxpbmsgU3Bhbn1cbiAqIHRvIHtAbGluayBSZWFkYWJsZVNwYW59IGFuZCBwYXNzZXMgaXQgdG8gdGhlIGNvbmZpZ3VyZWQgZXhwb3J0ZXIuXG4gKlxuICogT25seSBzcGFucyB0aGF0IGFyZSBzYW1wbGVkIGFyZSBjb252ZXJ0ZWQuXG4gKlxuICogTk9URTogVGhpcyB7QGxpbmsgU3BhblByb2Nlc3Nvcn0gZXhwb3J0cyBldmVyeSBlbmRlZCBzcGFuIGluZGl2aWR1YWxseSBpbnN0ZWFkIG9mIGJhdGNoaW5nIHNwYW5zIHRvZ2V0aGVyLCB3aGljaCBjYXVzZXMgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgd2l0aCBtb3N0IGV4cG9ydGVycy4gRm9yIHByb2R1Y3Rpb24gdXNlLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHtAbGluayBCYXRjaFNwYW5Qcm9jZXNzb3J9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW1wbGVTcGFuUHJvY2Vzc29yIHtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBfcGVuZGluZ0V4cG9ydHM7XG4gICAgY29uc3RydWN0b3IoZXhwb3J0ZXIpIHtcbiAgICAgICAgdGhpcy5fZXhwb3J0ZXIgPSBleHBvcnRlcjtcbiAgICAgICAgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IEJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0V4cG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5fcGVuZGluZ0V4cG9ydHMpKTtcbiAgICAgICAgaWYgKHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2gpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblN0YXJ0KF9zcGFuLCBfcGFyZW50Q29udGV4dCkgeyB9XG4gICAgb25FbmQoc3Bhbikge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VGbGFncyAmIFRyYWNlRmxhZ3MuU0FNUExFRCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwZW5kaW5nRXhwb3J0ID0gdGhpcy5fZG9FeHBvcnQoc3BhbikuY2F0Y2goZXJyID0+IGdsb2JhbEVycm9ySGFuZGxlcihlcnIpKTtcbiAgICAgICAgLy8gRW5xdWV1ZSB0aGlzIGV4cG9ydCB0byB0aGUgcGVuZGluZyBsaXN0IHNvIGl0IGNhbiBiZSBmbHVzaGVkIGJ5IHRoZSB1c2VyLlxuICAgICAgICB0aGlzLl9wZW5kaW5nRXhwb3J0cy5hZGQocGVuZGluZ0V4cG9ydCk7XG4gICAgICAgIHZvaWQgcGVuZGluZ0V4cG9ydC5maW5hbGx5KCgpID0+IHRoaXMuX3BlbmRpbmdFeHBvcnRzLmRlbGV0ZShwZW5kaW5nRXhwb3J0KSk7XG4gICAgfVxuICAgIGFzeW5jIF9kb0V4cG9ydChzcGFuKSB7XG4gICAgICAgIGlmIChzcGFuLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSByZXNvdXJjZSBpcyBmdWxseSByZXNvbHZlZCBiZWZvcmUgZXhwb3J0aW5nLlxuICAgICAgICAgICAgYXdhaXQgc3Bhbi5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzPy4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnRlcm5hbC5fZXhwb3J0KHRoaXMuX2V4cG9ydGVyLCBbc3Bhbl0pO1xuICAgICAgICBpZiAocmVzdWx0LmNvZGUgIT09IEV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUykge1xuICAgICAgICAgICAgdGhyb3cgKHJlc3VsdC5lcnJvciA/P1xuICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgU2ltcGxlU3BhblByb2Nlc3Nvcjogc3BhbiBleHBvcnQgZmFpbGVkIChzdGF0dXMgJHtyZXN1bHR9KWApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfVxuICAgIF9zaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2ltcGxlU3BhblByb2Nlc3Nvci5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5leHBvcnQgeyBCYXNpY1RyYWNlclByb3ZpZGVyIH0gZnJvbSAnLi9CYXNpY1RyYWNlclByb3ZpZGVyJztcbmV4cG9ydCB7IEJhdGNoU3BhblByb2Nlc3NvciwgUmFuZG9tSWRHZW5lcmF0b3IgfSBmcm9tICcuL3BsYXRmb3JtJztcbmV4cG9ydCB7IENvbnNvbGVTcGFuRXhwb3J0ZXIgfSBmcm9tICcuL2V4cG9ydC9Db25zb2xlU3BhbkV4cG9ydGVyJztcbmV4cG9ydCB7IEluTWVtb3J5U3BhbkV4cG9ydGVyIH0gZnJvbSAnLi9leHBvcnQvSW5NZW1vcnlTcGFuRXhwb3J0ZXInO1xuZXhwb3J0IHsgU2ltcGxlU3BhblByb2Nlc3NvciB9IGZyb20gJy4vZXhwb3J0L1NpbXBsZVNwYW5Qcm9jZXNzb3InO1xuZXhwb3J0IHsgTm9vcFNwYW5Qcm9jZXNzb3IgfSBmcm9tICcuL2V4cG9ydC9Ob29wU3BhblByb2Nlc3Nvcic7XG5leHBvcnQgeyBBbHdheXNPZmZTYW1wbGVyIH0gZnJvbSAnLi9zYW1wbGVyL0Fsd2F5c09mZlNhbXBsZXInO1xuZXhwb3J0IHsgQWx3YXlzT25TYW1wbGVyIH0gZnJvbSAnLi9zYW1wbGVyL0Fsd2F5c09uU2FtcGxlcic7XG5leHBvcnQgeyBQYXJlbnRCYXNlZFNhbXBsZXIgfSBmcm9tICcuL3NhbXBsZXIvUGFyZW50QmFzZWRTYW1wbGVyJztcbmV4cG9ydCB7IFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciB9IGZyb20gJy4vc2FtcGxlci9UcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXInO1xuZXhwb3J0IHsgU2FtcGxpbmdEZWNpc2lvbiB9IGZyb20gJy4vU2FtcGxlcic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgPSB2b2lkIDA7XG52YXIgU2V2ZXJpdHlOdW1iZXI7XG4oZnVuY3Rpb24gKFNldmVyaXR5TnVtYmVyKSB7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJVTlNQRUNJRklFRFwiXSA9IDBdID0gXCJVTlNQRUNJRklFRFwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiVFJBQ0VcIl0gPSAxXSA9IFwiVFJBQ0VcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIlRSQUNFMlwiXSA9IDJdID0gXCJUUkFDRTJcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIlRSQUNFM1wiXSA9IDNdID0gXCJUUkFDRTNcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIlRSQUNFNFwiXSA9IDRdID0gXCJUUkFDRTRcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkRFQlVHXCJdID0gNV0gPSBcIkRFQlVHXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJERUJVRzJcIl0gPSA2XSA9IFwiREVCVUcyXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJERUJVRzNcIl0gPSA3XSA9IFwiREVCVUczXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJERUJVRzRcIl0gPSA4XSA9IFwiREVCVUc0XCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJJTkZPXCJdID0gOV0gPSBcIklORk9cIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIklORk8yXCJdID0gMTBdID0gXCJJTkZPMlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiSU5GTzNcIl0gPSAxMV0gPSBcIklORk8zXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJJTkZPNFwiXSA9IDEyXSA9IFwiSU5GTzRcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIldBUk5cIl0gPSAxM10gPSBcIldBUk5cIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIldBUk4yXCJdID0gMTRdID0gXCJXQVJOMlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiV0FSTjNcIl0gPSAxNV0gPSBcIldBUk4zXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJXQVJONFwiXSA9IDE2XSA9IFwiV0FSTjRcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkVSUk9SXCJdID0gMTddID0gXCJFUlJPUlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiRVJST1IyXCJdID0gMThdID0gXCJFUlJPUjJcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkVSUk9SM1wiXSA9IDE5XSA9IFwiRVJST1IzXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJFUlJPUjRcIl0gPSAyMF0gPSBcIkVSUk9SNFwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiRkFUQUxcIl0gPSAyMV0gPSBcIkZBVEFMXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJGQVRBTDJcIl0gPSAyMl0gPSBcIkZBVEFMMlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiRkFUQUwzXCJdID0gMjNdID0gXCJGQVRBTDNcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkZBVEFMNFwiXSA9IDI0XSA9IFwiRkFUQUw0XCI7XG59KShTZXZlcml0eU51bWJlciA9IGV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgfHwgKGV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TG9nUmVjb3JkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT09QX0xPR0dFUiA9IGV4cG9ydHMuTm9vcExvZ2dlciA9IHZvaWQgMDtcbmNsYXNzIE5vb3BMb2dnZXIge1xuICAgIGVtaXQoX2xvZ1JlY29yZCkgeyB9XG59XG5leHBvcnRzLk5vb3BMb2dnZXIgPSBOb29wTG9nZ2VyO1xuZXhwb3J0cy5OT09QX0xPR0dFUiA9IG5ldyBOb29wTG9nZ2VyKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob29wTG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT09QX0xPR0dFUl9QUk9WSURFUiA9IGV4cG9ydHMuTm9vcExvZ2dlclByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgTm9vcExvZ2dlcl8xID0gcmVxdWlyZShcIi4vTm9vcExvZ2dlclwiKTtcbmNsYXNzIE5vb3BMb2dnZXJQcm92aWRlciB7XG4gICAgZ2V0TG9nZ2VyKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wTG9nZ2VyXzEuTm9vcExvZ2dlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm9vcExvZ2dlclByb3ZpZGVyID0gTm9vcExvZ2dlclByb3ZpZGVyO1xuZXhwb3J0cy5OT09QX0xPR0dFUl9QUk9WSURFUiA9IG5ldyBOb29wTG9nZ2VyUHJvdmlkZXIoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BMb2dnZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJveHlMb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBOb29wTG9nZ2VyXzEgPSByZXF1aXJlKFwiLi9Ob29wTG9nZ2VyXCIpO1xuY2xhc3MgUHJveHlMb2dnZXIge1xuICAgIGNvbnN0cnVjdG9yKF9wcm92aWRlciwgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wcm92aWRlciA9IF9wcm92aWRlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1pdCBhIGxvZyByZWNvcmQuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgbG9nIGFwcGVuZGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2dSZWNvcmRcbiAgICAgKi9cbiAgICBlbWl0KGxvZ1JlY29yZCkge1xuICAgICAgICB0aGlzLl9nZXRMb2dnZXIoKS5lbWl0KGxvZ1JlY29yZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSBsb2dnZXIgZnJvbSB0aGUgcHJveHkgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSBsb2dnZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIGxvZ2dlci5cbiAgICAgKi9cbiAgICBfZ2V0TG9nZ2VyKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2dnZXIgPSB0aGlzLl9wcm92aWRlci5fZ2V0RGVsZWdhdGVMb2dnZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gTm9vcExvZ2dlcl8xLk5PT1BfTE9HR0VSO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gbG9nZ2VyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgfVxufVxuZXhwb3J0cy5Qcm94eUxvZ2dlciA9IFByb3h5TG9nZ2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJveHlMb2dnZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb3h5TG9nZ2VyUHJvdmlkZXIgPSB2b2lkIDA7XG5jb25zdCBOb29wTG9nZ2VyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL05vb3BMb2dnZXJQcm92aWRlclwiKTtcbmNvbnN0IFByb3h5TG9nZ2VyXzEgPSByZXF1aXJlKFwiLi9Qcm94eUxvZ2dlclwiKTtcbmNsYXNzIFByb3h5TG9nZ2VyUHJvdmlkZXIge1xuICAgIGdldExvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLl9nZXREZWxlZ2F0ZUxvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IFByb3h5TG9nZ2VyXzEuUHJveHlMb2dnZXIodGhpcywgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlbGVnYXRlIGxvZ2dlciBwcm92aWRlci5cbiAgICAgKiBVc2VkIGJ5IHRlc3RzIG9ubHkuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX2dldERlbGVnYXRlKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogTm9vcExvZ2dlclByb3ZpZGVyXzEuTk9PUF9MT0dHRVJfUFJPVklERVI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGVsZWdhdGUgbG9nZ2VyIHByb3ZpZGVyXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX3NldERlbGVnYXRlKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9nZXREZWxlZ2F0ZUxvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0TG9nZ2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJveHlMb2dnZXJQcm92aWRlciA9IFByb3h5TG9nZ2VyUHJvdmlkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm94eUxvZ2dlclByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IHZvaWQgMDtcbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zXG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbFRoaXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdm9pZCAwO1xudmFyIGdsb2JhbFRoaXNfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFRoaXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfZ2xvYmFsVGhpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYmFsVGhpc18xLl9nbG9iYWxUaGlzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdm9pZCAwO1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfZ2xvYmFsVGhpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLl9nbG9iYWxUaGlzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gZXhwb3J0cy5tYWtlR2V0dGVyID0gZXhwb3J0cy5fZ2xvYmFsID0gZXhwb3J0cy5HTE9CQUxfTE9HU19BUElfS0VZID0gdm9pZCAwO1xuY29uc3QgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuLi9wbGF0Zm9ybVwiKTtcbmV4cG9ydHMuR0xPQkFMX0xPR1NfQVBJX0tFWSA9IFN5bWJvbC5mb3IoJ2lvLm9wZW50ZWxlbWV0cnkuanMuYXBpLmxvZ3MnKTtcbmV4cG9ydHMuX2dsb2JhbCA9IHBsYXRmb3JtXzEuX2dsb2JhbFRoaXM7XG4vKipcbiAqIE1ha2UgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIGEgdmVyc2lvbiBpbnRlZ2VyIGFuZCByZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBhbiBBUEkgaWYgdGhlIHZlcnNpb25cbiAqIGlzIGNvbXBhdGlibGUsIG9yIGEgZmFsbGJhY2sgdmVyc2lvbiAodXN1YWxseSBOT09QKSBpZiBpdCBpcyBub3QuXG4gKlxuICogQHBhcmFtIHJlcXVpcmVkVmVyc2lvbiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHJldHVybiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBpbnN0YW5jZSBJbnN0YW5jZSB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgY29tcGF0aWJsZVxuICogQHBhcmFtIGZhbGxiYWNrIEZhbGxiYWNrIGluc3RhbmNlLCB1c3VhbGx5IE5PT1AsIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgbm90IGNvbXBhdGlibGVcbiAqL1xuZnVuY3Rpb24gbWFrZUdldHRlcihyZXF1aXJlZFZlcnNpb24sIGluc3RhbmNlLCBmYWxsYmFjaykge1xuICAgIHJldHVybiAodmVyc2lvbikgPT4gdmVyc2lvbiA9PT0gcmVxdWlyZWRWZXJzaW9uID8gaW5zdGFuY2UgOiBmYWxsYmFjaztcbn1cbmV4cG9ydHMubWFrZUdldHRlciA9IG1ha2VHZXR0ZXI7XG4vKipcbiAqIEEgbnVtYmVyIHdoaWNoIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlXG4gKiBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgQVBJLiBUaGlzIG51bWJlciBpcyB1c2VkIHdoZW4gYW4gQVBJIHBhY2thZ2VcbiAqIGF0dGVtcHRzIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIEFQSSB0byBlbnN1cmUgaXQgaXMgZ2V0dGluZyBhIGNvbXBhdGlibGVcbiAqIHZlcnNpb24uIElmIHRoZSBnbG9iYWwgQVBJIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIEFQSSBwYWNrYWdlXG4gKiBhdHRlbXB0aW5nIHRvIGdldCBpdCwgYSBOT09QIEFQSSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnRzLkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbC11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nc0FQSSA9IHZvaWQgMDtcbmNvbnN0IGdsb2JhbF91dGlsc18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL2dsb2JhbC11dGlsc1wiKTtcbmNvbnN0IE5vb3BMb2dnZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uL05vb3BMb2dnZXJQcm92aWRlclwiKTtcbmNvbnN0IFByb3h5TG9nZ2VyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi9Qcm94eUxvZ2dlclByb3ZpZGVyXCIpO1xuY2xhc3MgTG9nc0FQSSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIgPSBuZXcgUHJveHlMb2dnZXJQcm92aWRlcl8xLlByb3h5TG9nZ2VyUHJvdmlkZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBMb2dzQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cbiAgICBzZXRHbG9iYWxMb2dnZXJQcm92aWRlcihwcm92aWRlcikge1xuICAgICAgICBpZiAoZ2xvYmFsX3V0aWxzXzEuX2dsb2JhbFtnbG9iYWxfdXRpbHNfMS5HTE9CQUxfTE9HU19BUElfS0VZXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9nZ2VyUHJvdmlkZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxfdXRpbHNfMS5fZ2xvYmFsW2dsb2JhbF91dGlsc18xLkdMT0JBTF9MT0dTX0FQSV9LRVldID0gKDAsIGdsb2JhbF91dGlsc18xLm1ha2VHZXR0ZXIpKGdsb2JhbF91dGlsc18xLkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OLCBwcm92aWRlciwgTm9vcExvZ2dlclByb3ZpZGVyXzEuTk9PUF9MT0dHRVJfUFJPVklERVIpO1xuICAgICAgICB0aGlzLl9wcm94eUxvZ2dlclByb3ZpZGVyLl9zZXREZWxlZ2F0ZShwcm92aWRlcik7XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIGxvZ2dlciBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIExvZ2dlclByb3ZpZGVyXG4gICAgICovXG4gICAgZ2V0TG9nZ2VyUHJvdmlkZXIoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoKF9iID0gKF9hID0gZ2xvYmFsX3V0aWxzXzEuX2dsb2JhbFtnbG9iYWxfdXRpbHNfMS5HTE9CQUxfTE9HU19BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZ2xvYmFsX3V0aWxzXzEuX2dsb2JhbCwgZ2xvYmFsX3V0aWxzXzEuQVBJX0JBQ0tXQVJEU19DT01QQVRJQklMSVRZX1ZFUlNJT04pKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0aGlzLl9wcm94eUxvZ2dlclByb3ZpZGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxvZ2dlciBmcm9tIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgTG9nZ2VyXG4gICAgICovXG4gICAgZ2V0TG9nZ2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9nZ2VyUHJvdmlkZXIoKS5nZXRMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCBsb2dnZXIgcHJvdmlkZXIgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBkZWxldGUgZ2xvYmFsX3V0aWxzXzEuX2dsb2JhbFtnbG9iYWxfdXRpbHNfMS5HTE9CQUxfTE9HU19BUElfS0VZXTtcbiAgICAgICAgdGhpcy5fcHJveHlMb2dnZXJQcm92aWRlciA9IG5ldyBQcm94eUxvZ2dlclByb3ZpZGVyXzEuUHJveHlMb2dnZXJQcm92aWRlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuTG9nc0FQSSA9IExvZ3NBUEk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dzID0gZXhwb3J0cy5Qcm94eUxvZ2dlclByb3ZpZGVyID0gZXhwb3J0cy5Qcm94eUxvZ2dlciA9IGV4cG9ydHMuTm9vcExvZ2dlclByb3ZpZGVyID0gZXhwb3J0cy5OT09QX0xPR0dFUl9QUk9WSURFUiA9IGV4cG9ydHMuTm9vcExvZ2dlciA9IGV4cG9ydHMuTk9PUF9MT0dHRVIgPSBleHBvcnRzLlNldmVyaXR5TnVtYmVyID0gdm9pZCAwO1xudmFyIExvZ1JlY29yZF8xID0gcmVxdWlyZShcIi4vdHlwZXMvTG9nUmVjb3JkXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2V2ZXJpdHlOdW1iZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExvZ1JlY29yZF8xLlNldmVyaXR5TnVtYmVyOyB9IH0pO1xudmFyIE5vb3BMb2dnZXJfMSA9IHJlcXVpcmUoXCIuL05vb3BMb2dnZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOT09QX0xPR0dFUlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcExvZ2dlcl8xLk5PT1BfTE9HR0VSOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm9vcExvZ2dlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcExvZ2dlcl8xLk5vb3BMb2dnZXI7IH0gfSk7XG52YXIgTm9vcExvZ2dlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9Ob29wTG9nZ2VyUHJvdmlkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOT09QX0xPR0dFUl9QUk9WSURFUlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcExvZ2dlclByb3ZpZGVyXzEuTk9PUF9MT0dHRVJfUFJPVklERVI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb29wTG9nZ2VyUHJvdmlkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vb3BMb2dnZXJQcm92aWRlcl8xLk5vb3BMb2dnZXJQcm92aWRlcjsgfSB9KTtcbnZhciBQcm94eUxvZ2dlcl8xID0gcmVxdWlyZShcIi4vUHJveHlMb2dnZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm94eUxvZ2dlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJveHlMb2dnZXJfMS5Qcm94eUxvZ2dlcjsgfSB9KTtcbnZhciBQcm94eUxvZ2dlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9Qcm94eUxvZ2dlclByb3ZpZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJveHlMb2dnZXJQcm92aWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJveHlMb2dnZXJQcm92aWRlcl8xLlByb3h5TG9nZ2VyUHJvdmlkZXI7IH0gfSk7XG5jb25zdCBsb2dzXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9nc1wiKTtcbmV4cG9ydHMubG9ncyA9IGxvZ3NfMS5Mb2dzQVBJLmdldEluc3RhbmNlKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNUcmFjaW5nU3VwcHJlc3NlZCA9IGV4cG9ydHMudW5zdXBwcmVzc1RyYWNpbmcgPSBleHBvcnRzLnN1cHByZXNzVHJhY2luZyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFNVUFBSRVNTX1RSQUNJTkdfS0VZID0gKDAsIGFwaV8xLmNyZWF0ZUNvbnRleHRLZXkpKCdPcGVuVGVsZW1ldHJ5IFNESyBDb250ZXh0IEtleSBTVVBQUkVTU19UUkFDSU5HJyk7XG5mdW5jdGlvbiBzdXBwcmVzc1RyYWNpbmcoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKFNVUFBSRVNTX1RSQUNJTkdfS0VZLCB0cnVlKTtcbn1cbmV4cG9ydHMuc3VwcHJlc3NUcmFjaW5nID0gc3VwcHJlc3NUcmFjaW5nO1xuZnVuY3Rpb24gdW5zdXBwcmVzc1RyYWNpbmcoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNVUFBSRVNTX1RSQUNJTkdfS0VZKTtcbn1cbmV4cG9ydHMudW5zdXBwcmVzc1RyYWNpbmcgPSB1bnN1cHByZXNzVHJhY2luZztcbmZ1bmN0aW9uIGlzVHJhY2luZ1N1cHByZXNzZWQoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNVUFBSRVNTX1RSQUNJTkdfS0VZKSA9PT0gdHJ1ZTtcbn1cbmV4cG9ydHMuaXNUcmFjaW5nU3VwcHJlc3NlZCA9IGlzVHJhY2luZ1N1cHByZXNzZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdXBwcmVzcy10cmFjaW5nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CQUdHQUdFX01BWF9UT1RBTF9MRU5HVEggPSBleHBvcnRzLkJBR0dBR0VfTUFYX1BFUl9OQU1FX1ZBTFVFX1BBSVJTID0gZXhwb3J0cy5CQUdHQUdFX01BWF9OQU1FX1ZBTFVFX1BBSVJTID0gZXhwb3J0cy5CQUdHQUdFX0hFQURFUiA9IGV4cG9ydHMuQkFHR0FHRV9JVEVNU19TRVBBUkFUT1IgPSBleHBvcnRzLkJBR0dBR0VfUFJPUEVSVElFU19TRVBBUkFUT1IgPSBleHBvcnRzLkJBR0dBR0VfS0VZX1BBSVJfU0VQQVJBVE9SID0gdm9pZCAwO1xuZXhwb3J0cy5CQUdHQUdFX0tFWV9QQUlSX1NFUEFSQVRPUiA9ICc9JztcbmV4cG9ydHMuQkFHR0FHRV9QUk9QRVJUSUVTX1NFUEFSQVRPUiA9ICc7JztcbmV4cG9ydHMuQkFHR0FHRV9JVEVNU19TRVBBUkFUT1IgPSAnLCc7XG4vLyBOYW1lIG9mIHRoZSBodHRwIGhlYWRlciB1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgYmFnZ2FnZVxuZXhwb3J0cy5CQUdHQUdFX0hFQURFUiA9ICdiYWdnYWdlJztcbi8vIE1heGltdW0gbnVtYmVyIG9mIG5hbWUtdmFsdWUgcGFpcnMgYWxsb3dlZCBieSB3M2Mgc3BlY1xuZXhwb3J0cy5CQUdHQUdFX01BWF9OQU1FX1ZBTFVFX1BBSVJTID0gMTgwO1xuLy8gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgcGVyIGEgc2luZ2xlIG5hbWUtdmFsdWUgcGFpciBhbGxvd2VkIGJ5IHczYyBzcGVjXG5leHBvcnRzLkJBR0dBR0VfTUFYX1BFUl9OQU1FX1ZBTFVFX1BBSVJTID0gNDA5Njtcbi8vIE1heGltdW0gdG90YWwgbGVuZ3RoIG9mIGFsbCBuYW1lLXZhbHVlIHBhaXJzIGFsbG93ZWQgYnkgdzNjIHNwZWNcbmV4cG9ydHMuQkFHR0FHRV9NQVhfVE9UQUxfTEVOR1RIID0gODE5Mjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUtleVBhaXJzSW50b1JlY29yZCA9IGV4cG9ydHMucGFyc2VQYWlyS2V5VmFsdWUgPSBleHBvcnRzLmdldEtleVBhaXJzID0gZXhwb3J0cy5zZXJpYWxpemVLZXlQYWlycyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIHNlcmlhbGl6ZUtleVBhaXJzKGtleVBhaXJzKSB7XG4gICAgcmV0dXJuIGtleVBhaXJzLnJlZHVjZSgoaFZhbHVlLCBjdXJyZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7aFZhbHVlfSR7aFZhbHVlICE9PSAnJyA/IGNvbnN0YW50c18xLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SIDogJyd9JHtjdXJyZW50fWA7XG4gICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiBjb25zdGFudHNfMS5CQUdHQUdFX01BWF9UT1RBTF9MRU5HVEggPyBoVmFsdWUgOiB2YWx1ZTtcbiAgICB9LCAnJyk7XG59XG5leHBvcnRzLnNlcmlhbGl6ZUtleVBhaXJzID0gc2VyaWFsaXplS2V5UGFpcnM7XG5mdW5jdGlvbiBnZXRLZXlQYWlycyhiYWdnYWdlKSB7XG4gICAgcmV0dXJuIGJhZ2dhZ2UuZ2V0QWxsRW50cmllcygpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGxldCBlbnRyeSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZS52YWx1ZSl9YDtcbiAgICAgICAgLy8gaW5jbHVkZSBvcGFxdWUgbWV0YWRhdGEgaWYgcHJvdmlkZWRcbiAgICAgICAgLy8gTk9URTogd2UgaW50ZW50aW9uYWxseSBkb24ndCBVUkktZW5jb2RlIHRoZSBtZXRhZGF0YSAtIHRoYXQgcmVzcG9uc2liaWxpdHkgZmFsbHMgb24gdGhlIG1ldGFkYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGlmICh2YWx1ZS5tZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbnRyeSArPSBjb25zdGFudHNfMS5CQUdHQUdFX1BST1BFUlRJRVNfU0VQQVJBVE9SICsgdmFsdWUubWV0YWRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldEtleVBhaXJzID0gZ2V0S2V5UGFpcnM7XG5mdW5jdGlvbiBwYXJzZVBhaXJLZXlWYWx1ZShlbnRyeSkge1xuICAgIGNvbnN0IHZhbHVlUHJvcHMgPSBlbnRyeS5zcGxpdChjb25zdGFudHNfMS5CQUdHQUdFX1BST1BFUlRJRVNfU0VQQVJBVE9SKTtcbiAgICBpZiAodmFsdWVQcm9wcy5sZW5ndGggPD0gMClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGtleVBhaXJQYXJ0ID0gdmFsdWVQcm9wcy5zaGlmdCgpO1xuICAgIGlmICgha2V5UGFpclBhcnQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IGtleVBhaXJQYXJ0LmluZGV4T2YoY29uc3RhbnRzXzEuQkFHR0FHRV9LRVlfUEFJUl9TRVBBUkFUT1IpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3Qga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleVBhaXJQYXJ0LnN1YnN0cmluZygwLCBzZXBhcmF0b3JJbmRleCkudHJpbSgpKTtcbiAgICBjb25zdCB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlQYWlyUGFydC5zdWJzdHJpbmcoc2VwYXJhdG9ySW5kZXggKyAxKS50cmltKCkpO1xuICAgIGxldCBtZXRhZGF0YTtcbiAgICBpZiAodmFsdWVQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG1ldGFkYXRhID0gKDAsIGFwaV8xLmJhZ2dhZ2VFbnRyeU1ldGFkYXRhRnJvbVN0cmluZykodmFsdWVQcm9wcy5qb2luKGNvbnN0YW50c18xLkJBR0dBR0VfUFJPUEVSVElFU19TRVBBUkFUT1IpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsga2V5LCB2YWx1ZSwgbWV0YWRhdGEgfTtcbn1cbmV4cG9ydHMucGFyc2VQYWlyS2V5VmFsdWUgPSBwYXJzZVBhaXJLZXlWYWx1ZTtcbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgc2VyaWFsaXplZCBpbiB0aGUgYmFnZ2FnZSBIVFRQIEZvcm1hdCAod2l0aG91dCBtZXRhZGF0YSk6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2JhZ2dhZ2UvYmxvYi9tYXN0ZXIvYmFnZ2FnZS9IVFRQX0hFQURFUl9GT1JNQVQubWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VLZXlQYWlyc0ludG9SZWNvcmQodmFsdWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhbHVlLnNwbGl0KGNvbnN0YW50c18xLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SKS5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleVBhaXIgPSBwYXJzZVBhaXJLZXlWYWx1ZShlbnRyeSk7XG4gICAgICAgICAgICBpZiAoa2V5UGFpciAhPT0gdW5kZWZpbmVkICYmIGtleVBhaXIudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXlQYWlyLmtleV0gPSBrZXlQYWlyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQgPSBwYXJzZUtleVBhaXJzSW50b1JlY29yZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5XM0NCYWdnYWdlUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHN1cHByZXNzX3RyYWNpbmdfMSA9IHJlcXVpcmUoXCIuLi8uLi90cmFjZS9zdXBwcmVzcy10cmFjaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbi8qKlxuICogUHJvcGFnYXRlcyB7QGxpbmsgQmFnZ2FnZX0gdGhyb3VnaCBDb250ZXh0IGZvcm1hdCBwcm9wYWdhdGlvbi5cbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFnZ2FnZSBzcGVjaWZpY2F0aW9uOlxuICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2JhZ2dhZ2UvXG4gKi9cbmNsYXNzIFczQ0JhZ2dhZ2VQcm9wYWdhdG9yIHtcbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2UgPSBhcGlfMS5wcm9wYWdhdGlvbi5nZXRCYWdnYWdlKGNvbnRleHQpO1xuICAgICAgICBpZiAoIWJhZ2dhZ2UgfHwgKDAsIHN1cHByZXNzX3RyYWNpbmdfMS5pc1RyYWNpbmdTdXBwcmVzc2VkKShjb250ZXh0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qga2V5UGFpcnMgPSAoMCwgdXRpbHNfMS5nZXRLZXlQYWlycykoYmFnZ2FnZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHBhaXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwYWlyLmxlbmd0aCA8PSBjb25zdGFudHNfMS5CQUdHQUdFX01BWF9QRVJfTkFNRV9WQUxVRV9QQUlSUztcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5zbGljZSgwLCBjb25zdGFudHNfMS5CQUdHQUdFX01BWF9OQU1FX1ZBTFVFX1BBSVJTKTtcbiAgICAgICAgY29uc3QgaGVhZGVyVmFsdWUgPSAoMCwgdXRpbHNfMS5zZXJpYWxpemVLZXlQYWlycykoa2V5UGFpcnMpO1xuICAgICAgICBpZiAoaGVhZGVyVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBjb25zdGFudHNfMS5CQUdHQUdFX0hFQURFUiwgaGVhZGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0dGVyLmdldChjYXJyaWVyLCBjb25zdGFudHNfMS5CQUdHQUdFX0hFQURFUik7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VTdHJpbmcgPSBBcnJheS5pc0FycmF5KGhlYWRlclZhbHVlKVxuICAgICAgICAgICAgPyBoZWFkZXJWYWx1ZS5qb2luKGNvbnN0YW50c18xLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SKVxuICAgICAgICAgICAgOiBoZWFkZXJWYWx1ZTtcbiAgICAgICAgaWYgKCFiYWdnYWdlU3RyaW5nKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2UgPSB7fTtcbiAgICAgICAgaWYgKGJhZ2dhZ2VTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IGJhZ2dhZ2VTdHJpbmcuc3BsaXQoY29uc3RhbnRzXzEuQkFHR0FHRV9JVEVNU19TRVBBUkFUT1IpO1xuICAgICAgICBwYWlycy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleVBhaXIgPSAoMCwgdXRpbHNfMS5wYXJzZVBhaXJLZXlWYWx1ZSkoZW50cnkpO1xuICAgICAgICAgICAgaWYgKGtleVBhaXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYWdnYWdlRW50cnkgPSB7IHZhbHVlOiBrZXlQYWlyLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgaWYgKGtleVBhaXIubWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFnZ2FnZUVudHJ5Lm1ldGFkYXRhID0ga2V5UGFpci5tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmFnZ2FnZVtrZXlQYWlyLmtleV0gPSBiYWdnYWdlRW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoT2JqZWN0LmVudHJpZXMoYmFnZ2FnZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpXzEucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShjb250ZXh0LCBhcGlfMS5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKGJhZ2dhZ2UpKTtcbiAgICB9XG4gICAgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW2NvbnN0YW50c18xLkJBR0dBR0VfSEVBREVSXTtcbiAgICB9XG59XG5leHBvcnRzLlczQ0JhZ2dhZ2VQcm9wYWdhdG9yID0gVzNDQmFnZ2FnZVByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XM0NCYWdnYWdlUHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQW5jaG9yZWRDbG9jayA9IHZvaWQgMDtcbi8qKlxuICogQSB1dGlsaXR5IGZvciByZXR1cm5pbmcgd2FsbCB0aW1lcyBhbmNob3JlZCB0byBhIGdpdmVuIHBvaW50IGluIHRpbWUuIFdhbGwgdGltZSBtZWFzdXJlbWVudHMgd2lsbFxuICogbm90IGJlIHRha2VuIGZyb20gdGhlIHN5c3RlbSwgYnV0IGluc3RlYWQgYXJlIGNvbXB1dGVkIGJ5IGFkZGluZyBhIG1vbm90b25pYyBjbG9jayB0aW1lXG4gKiB0byB0aGUgYW5jaG9yIHBvaW50LlxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIHN5c3RlbSB0aW1lIGNhbiBjaGFuZ2UgYW5kIHJlc3VsdCBpbiB1bmV4cGVjdGVkIHNpdHVhdGlvbnMgbGlrZVxuICogc3BhbnMgZW5kaW5nIGJlZm9yZSB0aGV5IGFyZSBzdGFydGVkLiBDcmVhdGluZyBhbiBhbmNob3JlZCBjbG9jayBmb3IgZWFjaCBsb2NhbCByb290IHNwYW5cbiAqIGVuc3VyZXMgdGhhdCBzcGFuIHRpbWluZ3MgYW5kIGR1cmF0aW9ucyBhcmUgYWNjdXJhdGUgd2hpbGUgcHJldmVudGluZyBzcGFuIHRpbWVzIGZyb20gZHJpZnRpbmdcbiAqIHRvbyBmYXIgZnJvbSB0aGUgc3lzdGVtIGNsb2NrLlxuICpcbiAqIE9ubHkgY3JlYXRpbmcgYW4gYW5jaG9yZWQgY2xvY2sgb25jZSBwZXIgbG9jYWwgdHJhY2UgZW5zdXJlcyBzcGFuIHRpbWVzIGFyZSBjb3JyZWN0IHJlbGF0aXZlXG4gKiB0byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgYSBjaGlsZCBzcGFuIHdpbGwgbmV2ZXIgaGF2ZSBhIHN0YXJ0IHRpbWUgYmVmb3JlIGl0cyBwYXJlbnQgZXZlblxuICogaWYgdGhlIHN5c3RlbSBjbG9jayBpcyBjb3JyZWN0ZWQgZHVyaW5nIHRoZSBsb2NhbCB0cmFjZS5cbiAqXG4gKiBIZWF2aWx5IGluc3BpcmVkIGJ5IHRoZSBPVGVsIEphdmEgYW5jaG9yZWQgY2xvY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWphdmEvYmxvYi9tYWluL3Nkay90cmFjZS9zcmMvbWFpbi9qYXZhL2lvL29wZW50ZWxlbWV0cnkvc2RrL3RyYWNlL0FuY2hvcmVkQ2xvY2suamF2YVxuICovXG5jbGFzcyBBbmNob3JlZENsb2NrIHtcbiAgICBfbW9ub3RvbmljQ2xvY2s7XG4gICAgX2Vwb2NoTWlsbGlzO1xuICAgIF9wZXJmb3JtYW5jZU1pbGxpcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgQW5jaG9yZWRDbG9jayBhbmNob3JlZCB0byB0aGUgY3VycmVudCB0aW1lIHJldHVybmVkIGJ5IHN5c3RlbUNsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN5c3RlbUNsb2NrIHNob3VsZCBiZSBhIGNsb2NrIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEgMTk3MCBzdWNoIGFzIERhdGVcbiAgICAgKiBAcGFyYW0gbW9ub3RvbmljQ2xvY2sgc2hvdWxkIGJlIGEgY2xvY2sgdGhhdCBjb3VudHMgbWlsbGlzZWNvbmRzIG1vbm90b25pY2FsbHkgc3VjaCBhcyB3aW5kb3cucGVyZm9ybWFuY2Ugb3IgcGVyZl9ob29rcy5wZXJmb3JtYW5jZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHN5c3RlbUNsb2NrLCBtb25vdG9uaWNDbG9jaykge1xuICAgICAgICB0aGlzLl9tb25vdG9uaWNDbG9jayA9IG1vbm90b25pY0Nsb2NrO1xuICAgICAgICB0aGlzLl9lcG9jaE1pbGxpcyA9IHN5c3RlbUNsb2NrLm5vdygpO1xuICAgICAgICB0aGlzLl9wZXJmb3JtYW5jZU1pbGxpcyA9IG1vbm90b25pY0Nsb2NrLm5vdygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgYnkgYWRkaW5nIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZVxuICAgICAqIEFuY2hvcmVkQ2xvY2sgd2FzIGNyZWF0ZWQgdG8gdGhlIGNyZWF0aW9uIGVwb2NoIHRpbWVcbiAgICAgKi9cbiAgICBub3coKSB7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fbW9ub3RvbmljQ2xvY2subm93KCkgLSB0aGlzLl9wZXJmb3JtYW5jZU1pbGxpcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vwb2NoTWlsbGlzICsgZGVsdGE7XG4gICAgfVxufVxuZXhwb3J0cy5BbmNob3JlZENsb2NrID0gQW5jaG9yZWRDbG9jaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuY2hvcmVkLWNsb2NrLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0F0dHJpYnV0ZVZhbHVlID0gZXhwb3J0cy5pc0F0dHJpYnV0ZUtleSA9IGV4cG9ydHMuc2FuaXRpemVBdHRyaWJ1dGVzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZnVuY3Rpb24gc2FuaXRpemVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBvdXQgPSB7fTtcbiAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMgIT09ICdvYmplY3QnIHx8IGF0dHJpYnV0ZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZXMsIGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBdHRyaWJ1dGVLZXkoa2V5KSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgICBpZiAoIWlzQXR0cmlidXRlVmFsdWUodmFsKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBzZXQgZm9yIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBvdXRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydHMuc2FuaXRpemVBdHRyaWJ1dGVzID0gc2FuaXRpemVBdHRyaWJ1dGVzO1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVLZXkoa2V5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSAhPT0gJyc7XG59XG5leHBvcnRzLmlzQXR0cmlidXRlS2V5ID0gaXNBdHRyaWJ1dGVLZXk7XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZVZhbHVlKHZhbCkge1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICByZXR1cm4gaXNIb21vZ2VuZW91c0F0dHJpYnV0ZVZhbHVlQXJyYXkodmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzVmFsaWRQcmltaXRpdmVBdHRyaWJ1dGVWYWx1ZVR5cGUodHlwZW9mIHZhbCk7XG59XG5leHBvcnRzLmlzQXR0cmlidXRlVmFsdWUgPSBpc0F0dHJpYnV0ZVZhbHVlO1xuZnVuY3Rpb24gaXNIb21vZ2VuZW91c0F0dHJpYnV0ZVZhbHVlQXJyYXkoYXJyKSB7XG4gICAgbGV0IHR5cGU7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycikge1xuICAgICAgICAvLyBudWxsL3VuZGVmaW5lZCBlbGVtZW50cyBhcmUgYWxsb3dlZFxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gdHlwZW9mIGVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZFByaW1pdGl2ZUF0dHJpYnV0ZVZhbHVlVHlwZShlbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gZWxlbWVudFR5cGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbiBpbnZhbGlkIHByaW1pdGl2ZVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc1ZhbGlkUHJpbWl0aXZlQXR0cmlidXRlVmFsdWVUeXBlKHZhbFR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbFR5cGUpIHtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXR0cmlidXRlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9nZ2luZ0Vycm9ySGFuZGxlciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbG9ncyBhbiBlcnJvciB1c2luZyB0aGUgcHJvdmlkZWQgbG9nZ2VyLCBvciBhXG4gKiBjb25zb2xlIGxvZ2dlciBpZiBvbmUgd2FzIG5vdCBwcm92aWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9nZ2luZ0Vycm9ySGFuZGxlcigpIHtcbiAgICByZXR1cm4gKGV4KSA9PiB7XG4gICAgICAgIGFwaV8xLmRpYWcuZXJyb3Ioc3RyaW5naWZ5RXhjZXB0aW9uKGV4KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMubG9nZ2luZ0Vycm9ySGFuZGxlciA9IGxvZ2dpbmdFcnJvckhhbmRsZXI7XG4vKipcbiAqIENvbnZlcnRzIGFuIGV4Y2VwdGlvbiBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0ge0V4Y2VwdGlvbn0gZXhcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5RXhjZXB0aW9uKGV4KSB7XG4gICAgaWYgKHR5cGVvZiBleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGV4O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZsYXR0ZW5FeGNlcHRpb24oZXgpKTtcbiAgICB9XG59XG4vKipcbiAqIEZsYXR0ZW5zIGFuIGV4Y2VwdGlvbiBpbnRvIGtleS12YWx1ZSBwYWlycyBieSB0cmF2ZXJzaW5nIHRoZSBwcm90b3R5cGUgY2hhaW5cbiAqIGFuZCBjb2VyY2luZyB2YWx1ZXMgdG8gc3RyaW5ncy4gRHVwbGljYXRlIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW47XG4gKiB0aGUgZmlyc3QgaW5zZXJ0IHdpbnMuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5FeGNlcHRpb24oZXgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBsZXQgY3VycmVudCA9IGV4O1xuICAgIHdoaWxlIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHRbcHJvcGVydHlOYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN1cnJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eU5hbWVdID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dnaW5nLWVycm9yLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdsb2JhbEVycm9ySGFuZGxlciA9IGV4cG9ydHMuc2V0R2xvYmFsRXJyb3JIYW5kbGVyID0gdm9pZCAwO1xuY29uc3QgbG9nZ2luZ19lcnJvcl9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9sb2dnaW5nLWVycm9yLWhhbmRsZXJcIik7XG4vKiogVGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyIGRlbGVnYXRlICovXG5sZXQgZGVsZWdhdGVIYW5kbGVyID0gKDAsIGxvZ2dpbmdfZXJyb3JfaGFuZGxlcl8xLmxvZ2dpbmdFcnJvckhhbmRsZXIpKCk7XG4vKipcbiAqIFNldCB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXJcbiAqIEBwYXJhbSB7RXJyb3JIYW5kbGVyfSBoYW5kbGVyXG4gKi9cbmZ1bmN0aW9uIHNldEdsb2JhbEVycm9ySGFuZGxlcihoYW5kbGVyKSB7XG4gICAgZGVsZWdhdGVIYW5kbGVyID0gaGFuZGxlcjtcbn1cbmV4cG9ydHMuc2V0R2xvYmFsRXJyb3JIYW5kbGVyID0gc2V0R2xvYmFsRXJyb3JIYW5kbGVyO1xuLyoqXG4gKiBSZXR1cm4gdGhlIGdsb2JhbCBlcnJvciBoYW5kbGVyXG4gKiBAcGFyYW0ge0V4Y2VwdGlvbn0gZXhcbiAqL1xuZnVuY3Rpb24gZ2xvYmFsRXJyb3JIYW5kbGVyKGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgZGVsZWdhdGVIYW5kbGVyKGV4KTtcbiAgICB9XG4gICAgY2F0Y2ggeyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbn1cbmV4cG9ydHMuZ2xvYmFsRXJyb3JIYW5kbGVyID0gZ2xvYmFsRXJyb3JIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsLWVycm9yLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFN0cmluZ0xpc3RGcm9tRW52ID0gZXhwb3J0cy5nZXRCb29sZWFuRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGV4cG9ydHMuZ2V0TnVtYmVyRnJvbUVudiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuLyoqXG4gKiBSZXRyaWV2ZXMgYSBudW1iZXIgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIC0gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHksIHVuc2V0LCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UsIG9yIGlzIG5vdCBhIG51bWJlci5cbiAqIC0gUmV0dXJucyBhIG51bWJlciBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gVGhlIG51bWJlciB2YWx1ZSBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TnVtYmVyRnJvbUVudihrZXkpIHtcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltrZXldO1xuICAgIGlmIChyYXcgPT0gbnVsbCB8fCByYXcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihyYXcpO1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbmtub3duIHZhbHVlICR7KDAsIHV0aWxfMS5pbnNwZWN0KShyYXcpfSBmb3IgJHtrZXl9LCBleHBlY3RlZCBhIG51bWJlciwgdXNpbmcgZGVmYXVsdHNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0cy5nZXROdW1iZXJGcm9tRW52ID0gZ2V0TnVtYmVyRnJvbUVudjtcbi8qKlxuICogUmV0cmlldmVzIGEgc3RyaW5nIGZyb20gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiAtIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGVtcHR5LCB1bnNldCwgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBzdHJpbmcgdmFsdWUgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldFN0cmluZ0Zyb21FbnYoa2V5KSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICBpZiAocmF3ID09IG51bGwgfHwgcmF3LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHJhdztcbn1cbmV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGdldFN0cmluZ0Zyb21FbnY7XG4vKipcbiAqIFJldHJpZXZlcyBhIGJvb2xlYW4gdmFsdWUgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIC0gVHJpbXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgaWdub3JlcyBjYXNpbmcuXG4gKiAtIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHksIHVuc2V0LCBvciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuXG4gKiAtIFJldHVybnMgYGZhbHNlYCBmb3Igc3RyaW5ncyB0aGF0IGNhbm5vdCBiZSBtYXBwZWQgdG8gYSBib29sZWFuLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUaGUgYm9vbGVhbiB2YWx1ZSBvciBgZmFsc2VgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCBlbXB0eSwgdW5zZXQsIG9yIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Qm9vbGVhbkZyb21FbnYoa2V5KSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZba2V5XT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHJhdyA9PSBudWxsIHx8IHJhdyA9PT0gJycpIHtcbiAgICAgICAgLy8gTk9URTogZmFsbGluZyBiYWNrIHRvIGBmYWxzZWAgaW5zdGVhZCBvZiBgdW5kZWZpbmVkYCBhcyByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgLy8gSWYgeW91IGhhdmUgYSB1c2UtY2FzZSB0aGF0IHJlcXVpcmVzIGB1bmRlZmluZWRgLCBjb25zaWRlciB1c2luZyBgZ2V0U3RyaW5nRnJvbUVudigpYCBhbmQgYXBwbHlpbmcgdGhlIG5lY2Vzc2FyeVxuICAgICAgICAvLyBub3JtYWxpemF0aW9ucyBpbiB0aGUgY29uc3VtaW5nIGNvZGUuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHJhdyA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYXcgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbmtub3duIHZhbHVlICR7KDAsIHV0aWxfMS5pbnNwZWN0KShyYXcpfSBmb3IgJHtrZXl9LCBleHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJywgZmFsbGluZyBiYWNrIHRvICdmYWxzZScgKGRlZmF1bHQpYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmdldEJvb2xlYW5Gcm9tRW52ID0gZ2V0Qm9vbGVhbkZyb21FbnY7XG4vKipcbiAqIFJldHJpZXZlcyBhIGxpc3Qgb2Ygc3RyaW5ncyBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogLSBVc2VzICcsJyBhcyB0aGUgZGVsaW1pdGVyLlxuICogLSBUcmltcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gZWFjaCBlbnRyeS5cbiAqIC0gRXhjbHVkZXMgZW1wdHkgZW50cmllcy5cbiAqIC0gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHkgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLlxuICogLSBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIGFsbCBlbnRyaWVzIGFyZSBlbXB0eSBvciB3aGl0ZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IC0gVGhlIGxpc3Qgb2Ygc3RyaW5ncyBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RyaW5nTGlzdEZyb21FbnYoa2V5KSB7XG4gICAgcmV0dXJuIGdldFN0cmluZ0Zyb21FbnYoa2V5KVxuICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKHMgPT4gcyAhPT0gJycpO1xufVxuZXhwb3J0cy5nZXRTdHJpbmdMaXN0RnJvbUVudiA9IGdldFN0cmluZ0xpc3RGcm9tRW52O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW52aXJvbm1lbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdm9pZCAwO1xuLyoqIG9ubHkgZ2xvYmFscyB0aGF0IGNvbW1vbiB0byBub2RlIGFuZCBicm93c2VycyBhcmUgYWxsb3dlZCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnNcbmV4cG9ydHMuX2dsb2JhbFRoaXMgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2xvYmFsVGhpcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub3RwZXJmb3JtYW5jZSA9IHZvaWQgMDtcbmNvbnN0IHBlcmZfaG9va3NfMSA9IHJlcXVpcmUoXCJwZXJmX2hvb2tzXCIpO1xuZXhwb3J0cy5vdHBlcmZvcm1hbmNlID0gcGVyZl9ob29rc18xLnBlcmZvcm1hbmNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVyZm9ybWFuY2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuVkVSU0lPTiA9ICcyLjIuMCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfUlVOVElNRV9OQU1FID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHJ1bnRpbWUgb2YgdGhpcyBwcm9jZXNzLlxuICpcbiAqIEBleGFtcGxlIE9wZW5KREsgUnVudGltZSBFbnZpcm9ubWVudFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfUlVOVElNRV9OQU1FID0gJ3Byb2Nlc3MucnVudGltZS5uYW1lJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNES19JTkZPID0gdm9pZCAwO1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4uLy4uL3ZlcnNpb25cIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uLy4uL3NlbWNvbnZcIik7XG4vKiogQ29uc3RhbnRzIGRlc2NyaWJpbmcgdGhlIFNESyBpbiB1c2UgKi9cbmV4cG9ydHMuU0RLX0lORk8gPSB7XG4gICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX05BTUVdOiAnb3BlbnRlbGVtZXRyeScsXG4gICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfUlVOVElNRV9OQU1FXTogJ25vZGUnLFxuICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV06IHNlbWFudGljX2NvbnZlbnRpb25zXzEuVEVMRU1FVFJZX1NES19MQU5HVUFHRV9WQUxVRV9OT0RFSlMsXG4gICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX1ZFUlNJT05dOiB2ZXJzaW9uXzEuVkVSU0lPTixcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZGstaW5mby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU0RLX0lORk8gPSBleHBvcnRzLm90cGVyZm9ybWFuY2UgPSBleHBvcnRzLl9nbG9iYWxUaGlzID0gZXhwb3J0cy5nZXRTdHJpbmdMaXN0RnJvbUVudiA9IGV4cG9ydHMuZ2V0TnVtYmVyRnJvbUVudiA9IGV4cG9ydHMuZ2V0Qm9vbGVhbkZyb21FbnYgPSBleHBvcnRzLmdldFN0cmluZ0Zyb21FbnYgPSB2b2lkIDA7XG52YXIgZW52aXJvbm1lbnRfMSA9IHJlcXVpcmUoXCIuL2Vudmlyb25tZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW52aXJvbm1lbnRfMS5nZXRTdHJpbmdGcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Qm9vbGVhbkZyb21FbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudmlyb25tZW50XzEuZ2V0Qm9vbGVhbkZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnZpcm9ubWVudF8xLmdldE51bWJlckZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTdHJpbmdMaXN0RnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW52aXJvbm1lbnRfMS5nZXRTdHJpbmdMaXN0RnJvbUVudjsgfSB9KTtcbnZhciBnbG9iYWxUaGlzXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxUaGlzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX2dsb2JhbFRoaXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JhbFRoaXNfMS5fZ2xvYmFsVGhpczsgfSB9KTtcbnZhciBwZXJmb3JtYW5jZV8xID0gcmVxdWlyZShcIi4vcGVyZm9ybWFuY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvdHBlcmZvcm1hbmNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZV8xLm90cGVyZm9ybWFuY2U7IH0gfSk7XG52YXIgc2RrX2luZm9fMSA9IHJlcXVpcmUoXCIuL3Nkay1pbmZvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU0RLX0lORk9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka19pbmZvXzEuU0RLX0lORk87IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTdHJpbmdMaXN0RnJvbUVudiA9IGV4cG9ydHMuZ2V0TnVtYmVyRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3RyaW5nRnJvbUVudiA9IGV4cG9ydHMuZ2V0Qm9vbGVhbkZyb21FbnYgPSBleHBvcnRzLm90cGVyZm9ybWFuY2UgPSBleHBvcnRzLl9nbG9iYWxUaGlzID0gZXhwb3J0cy5TREtfSU5GTyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNES19JTkZPXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuU0RLX0lORk87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfZ2xvYmFsVGhpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLl9nbG9iYWxUaGlzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3RwZXJmb3JtYW5jZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLm90cGVyZm9ybWFuY2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRCb29sZWFuRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmdldEJvb2xlYW5Gcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmdldFN0cmluZ0Zyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZ2V0TnVtYmVyRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFN0cmluZ0xpc3RGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnY7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYWRkSHJUaW1lcyA9IGV4cG9ydHMuaXNUaW1lSW5wdXQgPSBleHBvcnRzLmlzVGltZUlucHV0SHJUaW1lID0gZXhwb3J0cy5oclRpbWVUb01pY3Jvc2Vjb25kcyA9IGV4cG9ydHMuaHJUaW1lVG9NaWxsaXNlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvTmFub3NlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvVGltZVN0YW1wID0gZXhwb3J0cy5oclRpbWVEdXJhdGlvbiA9IGV4cG9ydHMudGltZUlucHV0VG9IclRpbWUgPSBleHBvcnRzLmhyVGltZSA9IGV4cG9ydHMuZ2V0VGltZU9yaWdpbiA9IGV4cG9ydHMubWlsbGlzVG9IclRpbWUgPSB2b2lkIDA7XG5jb25zdCBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtXCIpO1xuY29uc3QgTkFOT1NFQ09ORF9ESUdJVFMgPSA5O1xuY29uc3QgTkFOT1NFQ09ORF9ESUdJVFNfSU5fTUlMTElTID0gNjtcbmNvbnN0IE1JTExJU0VDT05EU19UT19OQU5PU0VDT05EUyA9IE1hdGgucG93KDEwLCBOQU5PU0VDT05EX0RJR0lUU19JTl9NSUxMSVMpO1xuY29uc3QgU0VDT05EX1RPX05BTk9TRUNPTkRTID0gTWF0aC5wb3coMTAsIE5BTk9TRUNPTkRfRElHSVRTKTtcbi8qKlxuICogQ29udmVydHMgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gZXBvY2ggdG8gSHJUaW1lKFtzZWNvbmRzLCByZW1haW5kZXIgaW4gbmFub3NlY29uZHNdKS5cbiAqIEBwYXJhbSBlcG9jaE1pbGxpc1xuICovXG5mdW5jdGlvbiBtaWxsaXNUb0hyVGltZShlcG9jaE1pbGxpcykge1xuICAgIGNvbnN0IGVwb2NoU2Vjb25kcyA9IGVwb2NoTWlsbGlzIC8gMTAwMDtcbiAgICAvLyBEZWNpbWFscyBvbmx5LlxuICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLnRydW5jKGVwb2NoU2Vjb25kcyk7XG4gICAgLy8gUm91bmQgc3ViLW5hbm9zZWNvbmQgYWNjdXJhY3kgdG8gbmFub3NlY29uZC5cbiAgICBjb25zdCBuYW5vcyA9IE1hdGgucm91bmQoKGVwb2NoTWlsbGlzICUgMTAwMCkgKiBNSUxMSVNFQ09ORFNfVE9fTkFOT1NFQ09ORFMpO1xuICAgIHJldHVybiBbc2Vjb25kcywgbmFub3NdO1xufVxuZXhwb3J0cy5taWxsaXNUb0hyVGltZSA9IG1pbGxpc1RvSHJUaW1lO1xuZnVuY3Rpb24gZ2V0VGltZU9yaWdpbigpIHtcbiAgICBsZXQgdGltZU9yaWdpbiA9IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZS50aW1lT3JpZ2luO1xuICAgIGlmICh0eXBlb2YgdGltZU9yaWdpbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgcGVyZiA9IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZTtcbiAgICAgICAgdGltZU9yaWdpbiA9IHBlcmYudGltaW5nICYmIHBlcmYudGltaW5nLmZldGNoU3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB0aW1lT3JpZ2luO1xufVxuZXhwb3J0cy5nZXRUaW1lT3JpZ2luID0gZ2V0VGltZU9yaWdpbjtcbi8qKlxuICogUmV0dXJucyBhbiBocnRpbWUgY2FsY3VsYXRlZCB2aWEgcGVyZm9ybWFuY2UgY29tcG9uZW50LlxuICogQHBhcmFtIHBlcmZvcm1hbmNlTm93XG4gKi9cbmZ1bmN0aW9uIGhyVGltZShwZXJmb3JtYW5jZU5vdykge1xuICAgIGNvbnN0IHRpbWVPcmlnaW4gPSBtaWxsaXNUb0hyVGltZShnZXRUaW1lT3JpZ2luKCkpO1xuICAgIGNvbnN0IG5vdyA9IG1pbGxpc1RvSHJUaW1lKHR5cGVvZiBwZXJmb3JtYW5jZU5vdyA9PT0gJ251bWJlcicgPyBwZXJmb3JtYW5jZU5vdyA6IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgcmV0dXJuIGFkZEhyVGltZXModGltZU9yaWdpbiwgbm93KTtcbn1cbmV4cG9ydHMuaHJUaW1lID0gaHJUaW1lO1xuLyoqXG4gKlxuICogQ29udmVydHMgYSBUaW1lSW5wdXQgdG8gYW4gSHJUaW1lLCBkZWZhdWx0cyB0byBfaHJ0aW1lKCkuXG4gKiBAcGFyYW0gdGltZVxuICovXG5mdW5jdGlvbiB0aW1lSW5wdXRUb0hyVGltZSh0aW1lKSB7XG4gICAgLy8gcHJvY2Vzcy5ocnRpbWVcbiAgICBpZiAoaXNUaW1lSW5wdXRIclRpbWUodGltZSkpIHtcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB0aW1lID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBNdXN0IGJlIGEgcGVyZm9ybWFuY2Uubm93KCkgaWYgaXQncyBzbWFsbGVyIHRoYW4gcHJvY2VzcyBzdGFydCB0aW1lLlxuICAgICAgICBpZiAodGltZSA8IGdldFRpbWVPcmlnaW4oKSkge1xuICAgICAgICAgICAgcmV0dXJuIGhyVGltZSh0aW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVwb2NoIG1pbGxpc2Vjb25kcyBvciBwZXJmb3JtYW5jZS50aW1lT3JpZ2luXG4gICAgICAgICAgICByZXR1cm4gbWlsbGlzVG9IclRpbWUodGltZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIG1pbGxpc1RvSHJUaW1lKHRpbWUuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBpbnB1dCB0eXBlJyk7XG4gICAgfVxufVxuZXhwb3J0cy50aW1lSW5wdXRUb0hyVGltZSA9IHRpbWVJbnB1dFRvSHJUaW1lO1xuLyoqXG4gKiBSZXR1cm5zIGEgZHVyYXRpb24gb2YgdHdvIGhyVGltZS5cbiAqIEBwYXJhbSBzdGFydFRpbWVcbiAqIEBwYXJhbSBlbmRUaW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZUR1cmF0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIGxldCBzZWNvbmRzID0gZW5kVGltZVswXSAtIHN0YXJ0VGltZVswXTtcbiAgICBsZXQgbmFub3MgPSBlbmRUaW1lWzFdIC0gc3RhcnRUaW1lWzFdO1xuICAgIC8vIG92ZXJmbG93XG4gICAgaWYgKG5hbm9zIDwgMCkge1xuICAgICAgICBzZWNvbmRzIC09IDE7XG4gICAgICAgIC8vIG5lZ2F0ZVxuICAgICAgICBuYW5vcyArPSBTRUNPTkRfVE9fTkFOT1NFQ09ORFM7XG4gICAgfVxuICAgIHJldHVybiBbc2Vjb25kcywgbmFub3NdO1xufVxuZXhwb3J0cy5oclRpbWVEdXJhdGlvbiA9IGhyVGltZUR1cmF0aW9uO1xuLyoqXG4gKiBDb252ZXJ0IGhyVGltZSB0byB0aW1lc3RhbXAsIGZvciBleGFtcGxlIFwiMjAxOS0wNS0xNFQxNzowMDowMC4wMDAxMjM0NTZaXCJcbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvVGltZVN0YW1wKHRpbWUpIHtcbiAgICBjb25zdCBwcmVjaXNpb24gPSBOQU5PU0VDT05EX0RJR0lUUztcbiAgICBjb25zdCB0bXAgPSBgJHsnMCcucmVwZWF0KHByZWNpc2lvbil9JHt0aW1lWzFdfVpgO1xuICAgIGNvbnN0IG5hbm9TdHJpbmcgPSB0bXAuc3Vic3RyaW5nKHRtcC5sZW5ndGggLSBwcmVjaXNpb24gLSAxKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZVswXSAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGRhdGUucmVwbGFjZSgnMDAwWicsIG5hbm9TdHJpbmcpO1xufVxuZXhwb3J0cy5oclRpbWVUb1RpbWVTdGFtcCA9IGhyVGltZVRvVGltZVN0YW1wO1xuLyoqXG4gKiBDb252ZXJ0IGhyVGltZSB0byBuYW5vc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvTmFub3NlY29uZHModGltZSkge1xuICAgIHJldHVybiB0aW1lWzBdICogU0VDT05EX1RPX05BTk9TRUNPTkRTICsgdGltZVsxXTtcbn1cbmV4cG9ydHMuaHJUaW1lVG9OYW5vc2Vjb25kcyA9IGhyVGltZVRvTmFub3NlY29uZHM7XG4vKipcbiAqIENvbnZlcnQgaHJUaW1lIHRvIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvTWlsbGlzZWNvbmRzKHRpbWUpIHtcbiAgICByZXR1cm4gdGltZVswXSAqIDFlMyArIHRpbWVbMV0gLyAxZTY7XG59XG5leHBvcnRzLmhyVGltZVRvTWlsbGlzZWNvbmRzID0gaHJUaW1lVG9NaWxsaXNlY29uZHM7XG4vKipcbiAqIENvbnZlcnQgaHJUaW1lIHRvIG1pY3Jvc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvTWljcm9zZWNvbmRzKHRpbWUpIHtcbiAgICByZXR1cm4gdGltZVswXSAqIDFlNiArIHRpbWVbMV0gLyAxZTM7XG59XG5leHBvcnRzLmhyVGltZVRvTWljcm9zZWNvbmRzID0gaHJUaW1lVG9NaWNyb3NlY29uZHM7XG4vKipcbiAqIGNoZWNrIGlmIHRpbWUgaXMgSHJUaW1lXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNUaW1lSW5wdXRIclRpbWUodmFsdWUpIHtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICB0eXBlb2YgdmFsdWVbMF0gPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZVsxXSA9PT0gJ251bWJlcicpO1xufVxuZXhwb3J0cy5pc1RpbWVJbnB1dEhyVGltZSA9IGlzVGltZUlucHV0SHJUaW1lO1xuLyoqXG4gKiBjaGVjayBpZiBpbnB1dCB2YWx1ZSBpcyBhIGNvcnJlY3QgdHlwZXMuVGltZUlucHV0XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNUaW1lSW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gKGlzVGltZUlucHV0SHJUaW1lKHZhbHVlKSB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSk7XG59XG5leHBvcnRzLmlzVGltZUlucHV0ID0gaXNUaW1lSW5wdXQ7XG4vKipcbiAqIEdpdmVuIDIgSHJUaW1lIGZvcm1hdHRlZCB0aW1lcywgcmV0dXJuIHRoZWlyIHN1bSBhcyBhbiBIclRpbWUuXG4gKi9cbmZ1bmN0aW9uIGFkZEhyVGltZXModGltZTEsIHRpbWUyKSB7XG4gICAgY29uc3Qgb3V0ID0gW3RpbWUxWzBdICsgdGltZTJbMF0sIHRpbWUxWzFdICsgdGltZTJbMV1dO1xuICAgIC8vIE5hbm9zZWNvbmRzXG4gICAgaWYgKG91dFsxXSA+PSBTRUNPTkRfVE9fTkFOT1NFQ09ORFMpIHtcbiAgICAgICAgb3V0WzFdIC09IFNFQ09ORF9UT19OQU5PU0VDT05EUztcbiAgICAgICAgb3V0WzBdICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5leHBvcnRzLmFkZEhyVGltZXMgPSBhZGRIclRpbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudW5yZWZUaW1lciA9IHZvaWQgMDtcbi8qKlxuICogQGRlcHJlY2F0ZWQgcGxlYXNlIGNvcHkgdGhpcyBjb2RlIHRvIHlvdXIgaW1wbGVtZW50YXRpb24gaW5zdGVhZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuXG4gKiBAcGFyYW0gdGltZXJcbiAqL1xuZnVuY3Rpb24gdW5yZWZUaW1lcih0aW1lcikge1xuICAgIGlmICh0eXBlb2YgdGltZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRpbWVyLnVucmVmKCk7XG4gICAgfVxufVxuZXhwb3J0cy51bnJlZlRpbWVyID0gdW5yZWZUaW1lcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4cG9ydFJlc3VsdENvZGUgPSB2b2lkIDA7XG52YXIgRXhwb3J0UmVzdWx0Q29kZTtcbihmdW5jdGlvbiAoRXhwb3J0UmVzdWx0Q29kZSkge1xuICAgIEV4cG9ydFJlc3VsdENvZGVbRXhwb3J0UmVzdWx0Q29kZVtcIlNVQ0NFU1NcIl0gPSAwXSA9IFwiU1VDQ0VTU1wiO1xuICAgIEV4cG9ydFJlc3VsdENvZGVbRXhwb3J0UmVzdWx0Q29kZVtcIkZBSUxFRFwiXSA9IDFdID0gXCJGQUlMRURcIjtcbn0pKEV4cG9ydFJlc3VsdENvZGUgPSBleHBvcnRzLkV4cG9ydFJlc3VsdENvZGUgfHwgKGV4cG9ydHMuRXhwb3J0UmVzdWx0Q29kZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHBvcnRSZXN1bHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbXBvc2l0ZVByb3BhZ2F0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG4vKiogQ29tYmluZXMgbXVsdGlwbGUgcHJvcGFnYXRvcnMgaW50byBhIHNpbmdsZSBwcm9wYWdhdG9yLiAqL1xuY2xhc3MgQ29tcG9zaXRlUHJvcGFnYXRvciB7XG4gICAgX3Byb3BhZ2F0b3JzO1xuICAgIF9maWVsZHM7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgY29tcG9zaXRlIHByb3BhZ2F0b3IgZnJvbSBhIGxpc3Qgb2YgcHJvcGFnYXRvcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gW2NvbmZpZ10gQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGNvbXBvc2l0ZSBwcm9wYWdhdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRvcnMgPSBjb25maWcucHJvcGFnYXRvcnMgPz8gW107XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IEFycmF5LmZyb20obmV3IFNldCh0aGlzLl9wcm9wYWdhdG9yc1xuICAgICAgICAgICAgLy8gb2xkZXIgcHJvcGFnYXRvcnMgbWF5IG5vdCBoYXZlIGZpZWxkcyBmdW5jdGlvbiwgbnVsbCBjaGVjayB0byBiZSBzdXJlXG4gICAgICAgICAgICAubWFwKHAgPT4gKHR5cGVvZiBwLmZpZWxkcyA9PT0gJ2Z1bmN0aW9uJyA/IHAuZmllbGRzKCkgOiBbXSkpXG4gICAgICAgICAgICAucmVkdWNlKCh4LCB5KSA9PiB4LmNvbmNhdCh5KSwgW10pKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biBlYWNoIG9mIHRoZSBjb25maWd1cmVkIHByb3BhZ2F0b3JzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGNhcnJpZXIuXG4gICAgICogUHJvcGFnYXRvcnMgYXJlIHJ1biBpbiB0aGUgb3JkZXIgdGhleSBhcmUgY29uZmlndXJlZCwgc28gaWYgbXVsdGlwbGVcbiAgICAgKiBwcm9wYWdhdG9ycyB3cml0ZSB0aGUgc2FtZSBjYXJyaWVyIGtleSwgdGhlIHByb3BhZ2F0b3IgbGF0ZXIgaW4gdGhlIGxpc3RcbiAgICAgKiB3aWxsIFwid2luXCIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGluamVjdFxuICAgICAqIEBwYXJhbSBjYXJyaWVyIENhcnJpZXIgaW50byB3aGljaCBjb250ZXh0IHdpbGwgYmUgaW5qZWN0ZWRcbiAgICAgKi9cbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGFnYXRvciBvZiB0aGlzLl9wcm9wYWdhdG9ycykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwcm9wYWdhdG9yLmluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgRmFpbGVkIHRvIGluamVjdCB3aXRoICR7cHJvcGFnYXRvci5jb25zdHJ1Y3Rvci5uYW1lfS4gRXJyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biBlYWNoIG9mIHRoZSBjb25maWd1cmVkIHByb3BhZ2F0b3JzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGNhcnJpZXIuXG4gICAgICogUHJvcGFnYXRvcnMgYXJlIHJ1biBpbiB0aGUgb3JkZXIgdGhleSBhcmUgY29uZmlndXJlZCwgc28gaWYgbXVsdGlwbGVcbiAgICAgKiBwcm9wYWdhdG9ycyB3cml0ZSB0aGUgc2FtZSBjb250ZXh0IGtleSwgdGhlIHByb3BhZ2F0b3IgbGF0ZXIgaW4gdGhlIGxpc3RcbiAgICAgKiB3aWxsIFwid2luXCIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGFkZCB2YWx1ZXMgdG9cbiAgICAgKiBAcGFyYW0gY2FycmllciBDYXJyaWVyIGZyb20gd2hpY2ggdG8gZXh0cmFjdCBjb250ZXh0XG4gICAgICovXG4gICAgZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0b3JzLnJlZHVjZSgoY3R4LCBwcm9wYWdhdG9yKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wYWdhdG9yLmV4dHJhY3QoY3R4LCBjYXJyaWVyLCBnZXR0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgRmFpbGVkIHRvIGV4dHJhY3Qgd2l0aCAke3Byb3BhZ2F0b3IuY29uc3RydWN0b3IubmFtZX0uIEVycjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdHg7XG4gICAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIC8vIHJldHVybiBhIG5ldyBhcnJheSBzbyBvdXIgZmllbGRzIGNhbm5vdCBiZSBtb2RpZmllZFxuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzLnNsaWNlKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Db21wb3NpdGVQcm9wYWdhdG9yID0gQ29tcG9zaXRlUHJvcGFnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvc2l0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVWYWx1ZSA9IGV4cG9ydHMudmFsaWRhdGVLZXkgPSB2b2lkIDA7XG5jb25zdCBWQUxJRF9LRVlfQ0hBUl9SQU5HRSA9ICdbXzAtOWEtei0qL10nO1xuY29uc3QgVkFMSURfS0VZID0gYFthLXpdJHtWQUxJRF9LRVlfQ0hBUl9SQU5HRX17MCwyNTV9YDtcbmNvbnN0IFZBTElEX1ZFTkRPUl9LRVkgPSBgW2EtejAtOV0ke1ZBTElEX0tFWV9DSEFSX1JBTkdFfXswLDI0MH1AW2Etel0ke1ZBTElEX0tFWV9DSEFSX1JBTkdFfXswLDEzfWA7XG5jb25zdCBWQUxJRF9LRVlfUkVHRVggPSBuZXcgUmVnRXhwKGBeKD86JHtWQUxJRF9LRVl9fCR7VkFMSURfVkVORE9SX0tFWX0pJGApO1xuY29uc3QgVkFMSURfVkFMVUVfQkFTRV9SRUdFWCA9IC9eWyAtfl17MCwyNTV9WyEtfl0kLztcbmNvbnN0IElOVkFMSURfVkFMVUVfQ09NTUFfRVFVQUxfUkVHRVggPSAvLHw9Lztcbi8qKlxuICogS2V5IGlzIG9wYXF1ZSBzdHJpbmcgdXAgdG8gMjU2IGNoYXJhY3RlcnMgcHJpbnRhYmxlLiBJdCBNVVNUIGJlZ2luIHdpdGggYVxuICogbG93ZXJjYXNlIGxldHRlciwgYW5kIGNhbiBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlIGxldHRlcnMgYS16LCBkaWdpdHMgMC05LFxuICogdW5kZXJzY29yZXMgXywgZGFzaGVzIC0sIGFzdGVyaXNrcyAqLCBhbmQgZm9yd2FyZCBzbGFzaGVzIC8uXG4gKiBGb3IgbXVsdGktdGVuYW50IHZlbmRvciBzY2VuYXJpb3MsIGFuIGF0IHNpZ24gKEApIGNhbiBiZSB1c2VkIHRvIHByZWZpeCB0aGVcbiAqIHZlbmRvciBuYW1lLiBWZW5kb3JzIFNIT1VMRCBzZXQgdGhlIHRlbmFudCBJRCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBrZXkuXG4gKiBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvI2tleVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtleShrZXkpIHtcbiAgICByZXR1cm4gVkFMSURfS0VZX1JFR0VYLnRlc3Qoa2V5KTtcbn1cbmV4cG9ydHMudmFsaWRhdGVLZXkgPSB2YWxpZGF0ZUtleTtcbi8qKlxuICogVmFsdWUgaXMgb3BhcXVlIHN0cmluZyB1cCB0byAyNTYgY2hhcmFjdGVycyBwcmludGFibGUgQVNDSUkgUkZDMDAyMFxuICogY2hhcmFjdGVycyAoaS5lLiwgdGhlIHJhbmdlIDB4MjAgdG8gMHg3RSkgZXhjZXB0IGNvbW1hICwgYW5kID0uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gKFZBTElEX1ZBTFVFX0JBU0VfUkVHRVgudGVzdCh2YWx1ZSkgJiZcbiAgICAgICAgIUlOVkFMSURfVkFMVUVfQ09NTUFfRVFVQUxfUkVHRVgudGVzdCh2YWx1ZSkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZVZhbHVlID0gdmFsaWRhdGVWYWx1ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRyYWNlU3RhdGUgPSB2b2lkIDA7XG5jb25zdCB2YWxpZGF0b3JzXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWwvdmFsaWRhdG9yc1wiKTtcbmNvbnN0IE1BWF9UUkFDRV9TVEFURV9JVEVNUyA9IDMyO1xuY29uc3QgTUFYX1RSQUNFX1NUQVRFX0xFTiA9IDUxMjtcbmNvbnN0IExJU1RfTUVNQkVSU19TRVBBUkFUT1IgPSAnLCc7XG5jb25zdCBMSVNUX01FTUJFUl9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4vKipcbiAqIFRyYWNlU3RhdGUgbXVzdCBiZSBhIGNsYXNzIGFuZCBub3QgYSBzaW1wbGUgb2JqZWN0IHR5cGUgYmVjYXVzZSBvZiB0aGUgc3BlY1xuICogcmVxdWlyZW1lbnQgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0LyN0cmFjZXN0YXRlLWZpZWxkKS5cbiAqXG4gKiBIZXJlIGlzIHRoZSBsaXN0IG9mIGFsbG93ZWQgbXV0YXRpb25zOlxuICogLSBOZXcga2V5LXZhbHVlIHBhaXIgc2hvdWxkIGJlIGFkZGVkIGludG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuICogLSBUaGUgdmFsdWUgb2YgYW55IGtleSBjYW4gYmUgdXBkYXRlZC4gTW9kaWZpZWQga2V5cyBNVVNUIGJlIG1vdmVkIHRvIHRoZVxuICogYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICovXG5jbGFzcyBUcmFjZVN0YXRlIHtcbiAgICBfaW50ZXJuYWxTdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICBjb25zdHJ1Y3RvcihyYXdUcmFjZVN0YXRlKSB7XG4gICAgICAgIGlmIChyYXdUcmFjZVN0YXRlKVxuICAgICAgICAgICAgdGhpcy5fcGFyc2UocmF3VHJhY2VTdGF0ZSk7XG4gICAgfVxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIC8vIFRPRE86IEJlbmNobWFyayB0aGUgZGlmZmVyZW50IGFwcHJvYWNoZXMobWFwIHZzIGxpc3QpIGFuZFxuICAgICAgICAvLyB1c2UgdGhlIGZhc3RlciBvbmUuXG4gICAgICAgIGNvbnN0IHRyYWNlU3RhdGUgPSB0aGlzLl9jbG9uZSgpO1xuICAgICAgICBpZiAodHJhY2VTdGF0ZS5faW50ZXJuYWxTdGF0ZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdHJhY2VTdGF0ZS5faW50ZXJuYWxTdGF0ZS5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRyYWNlU3RhdGU7XG4gICAgfVxuICAgIHVuc2V0KGtleSkge1xuICAgICAgICBjb25zdCB0cmFjZVN0YXRlID0gdGhpcy5fY2xvbmUoKTtcbiAgICAgICAgdHJhY2VTdGF0ZS5faW50ZXJuYWxTdGF0ZS5kZWxldGUoa2V5KTtcbiAgICAgICAgcmV0dXJuIHRyYWNlU3RhdGU7XG4gICAgfVxuICAgIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsU3RhdGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleXMoKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWdnLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGFnZy5wdXNoKGtleSArIExJU1RfTUVNQkVSX0tFWV9WQUxVRV9TUExJVFRFUiArIHRoaXMuZ2V0KGtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIGFnZztcbiAgICAgICAgfSwgW10pXG4gICAgICAgICAgICAuam9pbihMSVNUX01FTUJFUlNfU0VQQVJBVE9SKTtcbiAgICB9XG4gICAgX3BhcnNlKHJhd1RyYWNlU3RhdGUpIHtcbiAgICAgICAgaWYgKHJhd1RyYWNlU3RhdGUubGVuZ3RoID4gTUFYX1RSQUNFX1NUQVRFX0xFTilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IHJhd1RyYWNlU3RhdGVcbiAgICAgICAgICAgIC5zcGxpdChMSVNUX01FTUJFUlNfU0VQQVJBVE9SKVxuICAgICAgICAgICAgLnJldmVyc2UoKSAvLyBTdG9yZSBpbiByZXZlcnNlIHNvIG5ldyBrZXlzICguc2V0KC4uLikpIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFnZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdE1lbWJlciA9IHBhcnQudHJpbSgpOyAvLyBPcHRpb25hbCBXaGl0ZXNwYWNlIChPV1MpIGhhbmRsaW5nXG4gICAgICAgICAgICBjb25zdCBpID0gbGlzdE1lbWJlci5pbmRleE9mKExJU1RfTUVNQkVSX0tFWV9WQUxVRV9TUExJVFRFUik7XG4gICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBsaXN0TWVtYmVyLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGlzdE1lbWJlci5zbGljZShpICsgMSwgcGFydC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgdmFsaWRhdG9yc18xLnZhbGlkYXRlS2V5KShrZXkpICYmICgwLCB2YWxpZGF0b3JzXzEudmFsaWRhdGVWYWx1ZSkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFnZy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciB0byBhZGQgd2FybmluZyBsb2dcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWdnO1xuICAgICAgICB9LCBuZXcgTWFwKCkpO1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHRoZSByZXZlcnNlKCkgcmVxdWlyZW1lbnQsIHRydW5jIG11c3QgYmUgZG9uZSBhZnRlciBtYXAgaXMgY3JlYXRlZFxuICAgICAgICBpZiAodGhpcy5faW50ZXJuYWxTdGF0ZS5zaXplID4gTUFYX1RSQUNFX1NUQVRFX0lURU1TKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gbmV3IE1hcChBcnJheS5mcm9tKHRoaXMuX2ludGVybmFsU3RhdGUuZW50cmllcygpKVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKCkgLy8gVXNlIHJldmVyc2Ugc2FtZSBhcyBvcmlnaW5hbCB0cmFjZXN0YXRlIHBhcnNlIGNoYWluXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIE1BWF9UUkFDRV9TVEFURV9JVEVNUykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9rZXlzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9pbnRlcm5hbFN0YXRlLmtleXMoKSkucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBfY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlU3RhdGUgPSBuZXcgVHJhY2VTdGF0ZSgpO1xuICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlID0gbmV3IE1hcCh0aGlzLl9pbnRlcm5hbFN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRyYWNlU3RhdGU7XG4gICAgfVxufVxuZXhwb3J0cy5UcmFjZVN0YXRlID0gVHJhY2VTdGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYWNlU3RhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IgPSBleHBvcnRzLnBhcnNlVHJhY2VQYXJlbnQgPSBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUiA9IGV4cG9ydHMuVFJBQ0VfUEFSRU5UX0hFQURFUiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHN1cHByZXNzX3RyYWNpbmdfMSA9IHJlcXVpcmUoXCIuL3N1cHByZXNzLXRyYWNpbmdcIik7XG5jb25zdCBUcmFjZVN0YXRlXzEgPSByZXF1aXJlKFwiLi9UcmFjZVN0YXRlXCIpO1xuZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSID0gJ3RyYWNlcGFyZW50JztcbmV4cG9ydHMuVFJBQ0VfU1RBVEVfSEVBREVSID0gJ3RyYWNlc3RhdGUnO1xuY29uc3QgVkVSU0lPTiA9ICcwMCc7XG5jb25zdCBWRVJTSU9OX1BBUlQgPSAnKD8hZmYpW1xcXFxkYS1mXXsyfSc7XG5jb25zdCBUUkFDRV9JRF9QQVJUID0gJyg/IVswXXszMn0pW1xcXFxkYS1mXXszMn0nO1xuY29uc3QgUEFSRU5UX0lEX1BBUlQgPSAnKD8hWzBdezE2fSlbXFxcXGRhLWZdezE2fSc7XG5jb25zdCBGTEFHU19QQVJUID0gJ1tcXFxcZGEtZl17Mn0nO1xuY29uc3QgVFJBQ0VfUEFSRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChgXlxcXFxzPygke1ZFUlNJT05fUEFSVH0pLSgke1RSQUNFX0lEX1BBUlR9KS0oJHtQQVJFTlRfSURfUEFSVH0pLSgke0ZMQUdTX1BBUlR9KSgtLiopP1xcXFxzPyRgKTtcbi8qKlxuICogUGFyc2VzIGluZm9ybWF0aW9uIGZyb20gdGhlIFt0cmFjZXBhcmVudF0gc3BhbiB0YWcgYW5kIGNvbnZlcnRzIGl0IGludG8ge0BsaW5rIFNwYW5Db250ZXh0fVxuICogQHBhcmFtIHRyYWNlUGFyZW50IC0gQSBtZXRhIHByb3BlcnR5IHRoYXQgY29tZXMgZnJvbSBzZXJ2ZXIuXG4gKiAgICAgSXQgc2hvdWxkIGJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBzZXJ2ZXIgc2lkZSB0byBoYXZlIHRoZSBzZXJ2ZXIncyByZXF1ZXN0IHRyYWNlIElkLFxuICogICAgIGEgcGFyZW50IHNwYW4gSWQgdGhhdCB3YXMgc2V0IG9uIHRoZSBzZXJ2ZXIncyByZXF1ZXN0IHNwYW4sXG4gKiAgICAgYW5kIHRoZSB0cmFjZSBmbGFncyB0byBpbmRpY2F0ZSB0aGUgc2VydmVyJ3Mgc2FtcGxpbmcgZGVjaXNpb25cbiAqICAgICAoMDEgPSBzYW1wbGVkLCAwMCA9IG5vdCBzYW1wbGVkKS5cbiAqICAgICBmb3IgZXhhbXBsZTogJ3t2ZXJzaW9ufS17dHJhY2VJZH0te3NwYW5JZH0te3NhbXBsZURlY2lzaW9ufSdcbiAqICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0L31cbiAqL1xuZnVuY3Rpb24gcGFyc2VUcmFjZVBhcmVudCh0cmFjZVBhcmVudCkge1xuICAgIGNvbnN0IG1hdGNoID0gVFJBQ0VfUEFSRU5UX1JFR0VYLmV4ZWModHJhY2VQYXJlbnQpO1xuICAgIGlmICghbWF0Y2gpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGNvbXBhdGlibGVcbiAgICAvLyB3aXRoIGZ1dHVyZSB2ZXJzaW9ucy4gSWYgdGhlcmUgYXJlIG1vcmUgcGFydHMsIHdlIG9ubHkgcmVqZWN0IGl0IGlmIGl0J3MgdXNpbmcgdmVyc2lvbiAwMFxuICAgIC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvdHJhY2UtY29udGV4dC8jdmVyc2lvbmluZy1vZi10cmFjZXBhcmVudFxuICAgIGlmIChtYXRjaFsxXSA9PT0gJzAwJyAmJiBtYXRjaFs1XSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHJhY2VJZDogbWF0Y2hbMl0sXG4gICAgICAgIHNwYW5JZDogbWF0Y2hbM10sXG4gICAgICAgIHRyYWNlRmxhZ3M6IHBhcnNlSW50KG1hdGNoWzRdLCAxNiksXG4gICAgfTtcbn1cbmV4cG9ydHMucGFyc2VUcmFjZVBhcmVudCA9IHBhcnNlVHJhY2VQYXJlbnQ7XG4vKipcbiAqIFByb3BhZ2F0ZXMge0BsaW5rIFNwYW5Db250ZXh0fSB0aHJvdWdoIFRyYWNlIENvbnRleHQgZm9ybWF0IHByb3BhZ2F0aW9uLlxuICpcbiAqIEJhc2VkIG9uIHRoZSBUcmFjZSBDb250ZXh0IHNwZWNpZmljYXRpb246XG4gKiBodHRwczovL3d3dy53My5vcmcvVFIvdHJhY2UtY29udGV4dC9cbiAqL1xuY2xhc3MgVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvciB7XG4gICAgaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcikge1xuICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IGFwaV8xLnRyYWNlLmdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICBpZiAoIXNwYW5Db250ZXh0IHx8XG4gICAgICAgICAgICAoMCwgc3VwcHJlc3NfdHJhY2luZ18xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpIHx8XG4gICAgICAgICAgICAhKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkoc3BhbkNvbnRleHQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB0cmFjZVBhcmVudCA9IGAke1ZFUlNJT059LSR7c3BhbkNvbnRleHQudHJhY2VJZH0tJHtzcGFuQ29udGV4dC5zcGFuSWR9LTAke051bWJlcihzcGFuQ29udGV4dC50cmFjZUZsYWdzIHx8IGFwaV8xLlRyYWNlRmxhZ3MuTk9ORSkudG9TdHJpbmcoMTYpfWA7XG4gICAgICAgIHNldHRlci5zZXQoY2FycmllciwgZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSLCB0cmFjZVBhcmVudCk7XG4gICAgICAgIGlmIChzcGFuQ29udGV4dC50cmFjZVN0YXRlKSB7XG4gICAgICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGV4cG9ydHMuVFJBQ0VfU1RBVEVfSEVBREVSLCBzcGFuQ29udGV4dC50cmFjZVN0YXRlLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICBjb25zdCB0cmFjZVBhcmVudEhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSKTtcbiAgICAgICAgaWYgKCF0cmFjZVBhcmVudEhlYWRlcilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCB0cmFjZVBhcmVudCA9IEFycmF5LmlzQXJyYXkodHJhY2VQYXJlbnRIZWFkZXIpXG4gICAgICAgICAgICA/IHRyYWNlUGFyZW50SGVhZGVyWzBdXG4gICAgICAgICAgICA6IHRyYWNlUGFyZW50SGVhZGVyO1xuICAgICAgICBpZiAodHlwZW9mIHRyYWNlUGFyZW50ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IHBhcnNlVHJhY2VQYXJlbnQodHJhY2VQYXJlbnQpO1xuICAgICAgICBpZiAoIXNwYW5Db250ZXh0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIHNwYW5Db250ZXh0LmlzUmVtb3RlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZUhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVIpO1xuICAgICAgICBpZiAodHJhY2VTdGF0ZUhlYWRlcikge1xuICAgICAgICAgICAgLy8gSWYgbW9yZSB0aGFuIG9uZSBgdHJhY2VzdGF0ZWAgaGVhZGVyIGlzIGZvdW5kLCB3ZSBtZXJnZSB0aGVtIGludG8gYVxuICAgICAgICAgICAgLy8gc2luZ2xlIGhlYWRlci5cbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gQXJyYXkuaXNBcnJheSh0cmFjZVN0YXRlSGVhZGVyKVxuICAgICAgICAgICAgICAgID8gdHJhY2VTdGF0ZUhlYWRlci5qb2luKCcsJylcbiAgICAgICAgICAgICAgICA6IHRyYWNlU3RhdGVIZWFkZXI7XG4gICAgICAgICAgICBzcGFuQ29udGV4dC50cmFjZVN0YXRlID0gbmV3IFRyYWNlU3RhdGVfMS5UcmFjZVN0YXRlKHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycgPyBzdGF0ZSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaV8xLnRyYWNlLnNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KTtcbiAgICB9XG4gICAgZmllbGRzKCkge1xuICAgICAgICByZXR1cm4gW2V4cG9ydHMuVFJBQ0VfUEFSRU5UX0hFQURFUiwgZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVJdO1xuICAgIH1cbn1cbmV4cG9ydHMuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvciA9IFczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSUENNZXRhZGF0YSA9IGV4cG9ydHMuZGVsZXRlUlBDTWV0YWRhdGEgPSBleHBvcnRzLnNldFJQQ01ldGFkYXRhID0gZXhwb3J0cy5SUENUeXBlID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgUlBDX01FVEFEQVRBX0tFWSA9ICgwLCBhcGlfMS5jcmVhdGVDb250ZXh0S2V5KSgnT3BlblRlbGVtZXRyeSBTREsgQ29udGV4dCBLZXkgUlBDX01FVEFEQVRBJyk7XG52YXIgUlBDVHlwZTtcbihmdW5jdGlvbiAoUlBDVHlwZSkge1xuICAgIFJQQ1R5cGVbXCJIVFRQXCJdID0gXCJodHRwXCI7XG59KShSUENUeXBlID0gZXhwb3J0cy5SUENUeXBlIHx8IChleHBvcnRzLlJQQ1R5cGUgPSB7fSkpO1xuZnVuY3Rpb24gc2V0UlBDTWV0YWRhdGEoY29udGV4dCwgbWV0YSkge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKFJQQ19NRVRBREFUQV9LRVksIG1ldGEpO1xufVxuZXhwb3J0cy5zZXRSUENNZXRhZGF0YSA9IHNldFJQQ01ldGFkYXRhO1xuZnVuY3Rpb24gZGVsZXRlUlBDTWV0YWRhdGEoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFJQQ19NRVRBREFUQV9LRVkpO1xufVxuZXhwb3J0cy5kZWxldGVSUENNZXRhZGF0YSA9IGRlbGV0ZVJQQ01ldGFkYXRhO1xuZnVuY3Rpb24gZ2V0UlBDTWV0YWRhdGEoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFJQQ19NRVRBREFUQV9LRVkpO1xufVxuZXhwb3J0cy5nZXRSUENNZXRhZGF0YSA9IGdldFJQQ01ldGFkYXRhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnBjLW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gdm9pZCAwO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyoqXG4gKiBiYXNlZCBvbiBsb2Rhc2ggaW4gb3JkZXIgdG8gc3VwcG9ydCBlc20gYnVpbGRzIHdpdGhvdXQgZXNNb2R1bGVJbnRlcm9wLlxuICogbG9kYXNoIGlzIHVzaW5nIE1JVCBMaWNlbnNlLlxuICoqL1xuY29uc3Qgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5jb25zdCBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nO1xuY29uc3QgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5jb25zdCBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5jb25zdCBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5jb25zdCBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcbmNvbnN0IGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuY29uc3Qgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcbmNvbnN0IHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuY29uc3QgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT09IG9iamVjdFRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHByb3RvID0gZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgICAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PT0gb2JqZWN0Q3RvclN0cmluZyk7XG59XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICAgIH1cbiAgICByZXR1cm4gc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKVxuICAgICAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICAgICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICAgIGNvbnN0IGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLCB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgbGV0IHVubWFza2VkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgICAgICB1bm1hc2tlZCA9IHRydWU7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy8gc2lsZW5jZVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICBpZiAodW5tYXNrZWQpIHtcbiAgICAgICAgaWYgKGlzT3duKSB7XG4gICAgICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2Rhc2gubWVyZ2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlID0gdm9pZCAwO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuY29uc3QgbG9kYXNoX21lcmdlXzEgPSByZXF1aXJlKFwiLi9sb2Rhc2gubWVyZ2VcIik7XG5jb25zdCBNQVhfTEVWRUwgPSAyMDtcbi8qKlxuICogTWVyZ2VzIG9iamVjdHMgdG9nZXRoZXJcbiAqIEBwYXJhbSBhcmdzIC0gb2JqZWN0cyAvIHZhbHVlcyB0byBiZSBtZXJnZWRcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLi4uYXJncykge1xuICAgIGxldCByZXN1bHQgPSBhcmdzLnNoaWZ0KCk7XG4gICAgY29uc3Qgb2JqZWN0cyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgd2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSBtZXJnZVR3b09iamVjdHMocmVzdWx0LCBhcmdzLnNoaWZ0KCksIDAsIG9iamVjdHMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZnVuY3Rpb24gdGFrZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4vKipcbiAqIE1lcmdlcyB0d28gb2JqZWN0c1xuICogQHBhcmFtIG9uZSAtIGZpcnN0IG9iamVjdFxuICogQHBhcmFtIHR3byAtIHNlY29uZCBvYmplY3RcbiAqIEBwYXJhbSBsZXZlbCAtIGN1cnJlbnQgZGVlcCBsZXZlbFxuICogQHBhcmFtIG9iamVjdHMgLSBvYmplY3RzIGhvbGRlciB0aGF0IGhhcyBiZWVuIGFscmVhZHkgcmVmZXJlbmNlZCAtIHRvIHByZXZlbnRcbiAqIGN5Y2xpYyBkZXBlbmRlbmN5XG4gKi9cbmZ1bmN0aW9uIG1lcmdlVHdvT2JqZWN0cyhvbmUsIHR3bywgbGV2ZWwgPSAwLCBvYmplY3RzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAobGV2ZWwgPiBNQVhfTEVWRUwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV2ZWwrKztcbiAgICBpZiAoaXNQcmltaXRpdmUob25lKSB8fCBpc1ByaW1pdGl2ZSh0d28pIHx8IGlzRnVuY3Rpb24odHdvKSkge1xuICAgICAgICByZXN1bHQgPSB0YWtlVmFsdWUodHdvKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheShvbmUpKSB7XG4gICAgICAgIHJlc3VsdCA9IG9uZS5zbGljZSgpO1xuICAgICAgICBpZiAoaXNBcnJheSh0d28pKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IHR3by5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0YWtlVmFsdWUodHdvW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodHdvKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHR3byk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IGtleXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRha2VWYWx1ZSh0d29ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3Qob25lKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QodHdvKSkge1xuICAgICAgICAgICAgaWYgKCFzaG91bGRNZXJnZShvbmUsIHR3bykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHdvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb25lKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0d28pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSBrZXlzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdHdvVmFsdWUgPSB0d29ba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmltaXRpdmUodHdvVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHdvVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHRba2V5XSA9IHRha2VWYWx1ZSh0d29WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHR3b1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmoxID0gcmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iajIgPSB0d29WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdhc09iamVjdFJlZmVyZW5jZWQob25lLCBrZXksIG9iamVjdHMpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXNPYmplY3RSZWZlcmVuY2VkKHR3bywga2V5LCBvYmplY3RzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG9iajEpICYmIGlzT2JqZWN0KG9iajIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyMSA9IG9iamVjdHMuZ2V0KG9iajEpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycjIgPSBvYmplY3RzLmdldChvYmoyKSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIxLnB1c2goeyBvYmo6IG9uZSwga2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycjIucHVzaCh7IG9iajogdHdvLCBrZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5zZXQob2JqMSwgYXJyMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5zZXQob2JqMiwgYXJyMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlVHdvT2JqZWN0cyhyZXN1bHRba2V5XSwgdHdvVmFsdWUsIGxldmVsLCBvYmplY3RzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHR3bztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBGdW5jdGlvbiB0byBjaGVjayBpZiBvYmplY3QgaGFzIGJlZW4gYWxyZWFkeSByZWZlcmVuY2VcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHdhc09iamVjdFJlZmVyZW5jZWQob2JqLCBrZXksIG9iamVjdHMpIHtcbiAgICBjb25zdCBhcnIgPSBvYmplY3RzLmdldChvYmpba2V5XSkgfHwgW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnIubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhcnJbaV07XG4gICAgICAgIGlmIChpbmZvLmtleSA9PT0ga2V5ICYmIGluZm8ub2JqID09PSBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuICghaXNQcmltaXRpdmUodmFsdWUpICYmXG4gICAgICAgICFpc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAhaXNGdW5jdGlvbih2YWx1ZSkgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyk7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgIHZhbHVlID09PSBudWxsKTtcbn1cbmZ1bmN0aW9uIHNob3VsZE1lcmdlKG9uZSwgdHdvKSB7XG4gICAgaWYgKCEoMCwgbG9kYXNoX21lcmdlXzEuaXNQbGFpbk9iamVjdCkob25lKSB8fCAhKDAsIGxvZGFzaF9tZXJnZV8xLmlzUGxhaW5PYmplY3QpKHR3bykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogRXJyb3IgdGhhdCBpcyB0aHJvd24gb24gdGltZW91dHMuXG4gKi9cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICAvLyBtYW51YWxseSBhZGp1c3QgcHJvdG90eXBlIHRvIHJldGFpbiBgaW5zdGFuY2VvZmAgZnVuY3Rpb25hbGl0eSB3aGVuIHRhcmdldGluZyBFUzUsIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUaW1lb3V0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcbi8qKlxuICogQWRkcyBhIHRpbWVvdXQgdG8gYSBwcm9taXNlIGFuZCByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZC4gQWxzbyByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZVxuICogcmVqZWN0cywgYW5kIHJlc29sdmVzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZSByZXNvbHZlcy5cbiAqXG4gKiA8cD4gTk9URTogdGhpcyBvcGVyYXRpb24gd2lsbCBjb250aW51ZSBldmVuIGFmdGVyIGl0IHRocm93cyBhIHtAbGluayBUaW1lb3V0RXJyb3J9LlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIHByb21pc2UgdG8gdXNlIHdpdGggdGltZW91dC5cbiAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAqL1xuZnVuY3Rpb24gY2FsbFdpdGhUaW1lb3V0KHByb21pc2UsIHRpbWVvdXQpIHtcbiAgICBsZXQgdGltZW91dEhhbmRsZTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHRpbWVvdXRGdW5jdGlvbihfcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ09wZXJhdGlvbiB0aW1lZCBvdXQuJykpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHJlYXNvbiA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBjYWxsV2l0aFRpbWVvdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lb3V0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVXJsSWdub3JlZCA9IGV4cG9ydHMudXJsTWF0Y2hlcyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiB1cmxNYXRjaGVzKHVybCwgdXJsVG9NYXRjaCkge1xuICAgIGlmICh0eXBlb2YgdXJsVG9NYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gdXJsVG9NYXRjaDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXVybC5tYXRjaCh1cmxUb01hdGNoKTtcbiAgICB9XG59XG5leHBvcnRzLnVybE1hdGNoZXMgPSB1cmxNYXRjaGVzO1xuLyoqXG4gKiBDaGVjayBpZiB7QHBhcmFtIHVybH0gc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCB7QHBhcmFtIGlnbm9yZWRVcmxzfVxuICogQHBhcmFtIHVybFxuICogQHBhcmFtIGlnbm9yZWRVcmxzXG4gKi9cbmZ1bmN0aW9uIGlzVXJsSWdub3JlZCh1cmwsIGlnbm9yZWRVcmxzKSB7XG4gICAgaWYgKCFpZ25vcmVkVXJscykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWdub3JlVXJsIG9mIGlnbm9yZWRVcmxzKSB7XG4gICAgICAgIGlmICh1cmxNYXRjaGVzKHVybCwgaWdub3JlVXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5pc1VybElnbm9yZWQgPSBpc1VybElnbm9yZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmVycmVkID0gdm9pZCAwO1xuY2xhc3MgRGVmZXJyZWQge1xuICAgIF9wcm9taXNlO1xuICAgIF9yZXNvbHZlO1xuICAgIF9yZWplY3Q7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgICB9XG4gICAgcmVzb2x2ZSh2YWwpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZSh2YWwpO1xuICAgIH1cbiAgICByZWplY3QoZXJyKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdChlcnIpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmZXJyZWQgPSBEZWZlcnJlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21pc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJpbmRPbmNlRnV0dXJlID0gdm9pZCAwO1xuY29uc3QgcHJvbWlzZV8xID0gcmVxdWlyZShcIi4vcHJvbWlzZVwiKTtcbi8qKlxuICogQmluZCB0aGUgY2FsbGJhY2sgYW5kIG9ubHkgaW52b2tlIHRoZSBjYWxsYmFjayBvbmNlIHJlZ2FyZGxlc3MgaG93IG1hbnkgdGltZXMgYEJpbmRPbmNlRnV0dXJlLmNhbGxgIGlzIGludm9rZWQuXG4gKi9cbmNsYXNzIEJpbmRPbmNlRnV0dXJlIHtcbiAgICBfY2FsbGJhY2s7XG4gICAgX3RoYXQ7XG4gICAgX2lzQ2FsbGVkID0gZmFsc2U7XG4gICAgX2RlZmVycmVkID0gbmV3IHByb21pc2VfMS5EZWZlcnJlZCgpO1xuICAgIGNvbnN0cnVjdG9yKF9jYWxsYmFjaywgX3RoYXQpIHtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBfY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3RoYXQgPSBfdGhhdDtcbiAgICB9XG4gICAgZ2V0IGlzQ2FsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDYWxsZWQ7XG4gICAgfVxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgY2FsbCguLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2NhbGxiYWNrLmNhbGwodGhpcy5fdGhhdCwgLi4uYXJncykpLnRoZW4odmFsID0+IHRoaXMuX2RlZmVycmVkLnJlc29sdmUodmFsKSwgZXJyID0+IHRoaXMuX2RlZmVycmVkLnJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWZlcnJlZC5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG59XG5leHBvcnRzLkJpbmRPbmNlRnV0dXJlID0gQmluZE9uY2VGdXR1cmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYWxsYmFjay5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaWFnTG9nTGV2ZWxGcm9tU3RyaW5nID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGxvZ0xldmVsTWFwID0ge1xuICAgIEFMTDogYXBpXzEuRGlhZ0xvZ0xldmVsLkFMTCxcbiAgICBWRVJCT1NFOiBhcGlfMS5EaWFnTG9nTGV2ZWwuVkVSQk9TRSxcbiAgICBERUJVRzogYXBpXzEuRGlhZ0xvZ0xldmVsLkRFQlVHLFxuICAgIElORk86IGFwaV8xLkRpYWdMb2dMZXZlbC5JTkZPLFxuICAgIFdBUk46IGFwaV8xLkRpYWdMb2dMZXZlbC5XQVJOLFxuICAgIEVSUk9SOiBhcGlfMS5EaWFnTG9nTGV2ZWwuRVJST1IsXG4gICAgTk9ORTogYXBpXzEuRGlhZ0xvZ0xldmVsLk5PTkUsXG59O1xuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEge0BsaW5rIERpYWdMb2dMZXZlbH0sIGRlZmF1bHRzIHRvIHtAbGluayBEaWFnTG9nTGV2ZWx9IGlmIHRoZSBsb2cgbGV2ZWwgZG9lcyBub3QgZXhpc3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQuXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGlhZ0xvZ0xldmVsRnJvbVN0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIGRvbid0IGZhbGwgYmFjayB0byBkZWZhdWx0IC0gbm8gdmFsdWUgc2V0IGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciDDunMgdGhhbiBhbiBpbmNvcnJlY3QgdmFsdWUgKGRvIG5vdCBzZXQgdnMuIGZhbGwgYmFjayB0byBkZWZhdWx0KVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZExvZ0xldmVsID0gbG9nTGV2ZWxNYXBbdmFsdWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKHJlc29sdmVkTG9nTGV2ZWwgPT0gbnVsbCkge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVua25vd24gbG9nIGxldmVsIFwiJHt2YWx1ZX1cIiwgZXhwZWN0ZWQgb25lIG9mICR7T2JqZWN0LmtleXMobG9nTGV2ZWxNYXApfSwgdXNpbmcgZGVmYXVsdGApO1xuICAgICAgICByZXR1cm4gYXBpXzEuRGlhZ0xvZ0xldmVsLklORk87XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZExvZ0xldmVsO1xufVxuZXhwb3J0cy5kaWFnTG9nTGV2ZWxGcm9tU3RyaW5nID0gZGlhZ0xvZ0xldmVsRnJvbVN0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZ3VyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9leHBvcnQgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzdXBwcmVzc190cmFjaW5nXzEgPSByZXF1aXJlKFwiLi4vdHJhY2Uvc3VwcHJlc3MtdHJhY2luZ1wiKTtcbi8qKlxuICogQGludGVybmFsXG4gKiBTaGFyZWQgZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IEV4cG9ydGVycyB3aGlsZSBleHBvcnRpbmcgZGF0YSwgaW5jbHVkaW5nIHN1cHByZXNzaW9uIG9mIFRyYWNlcy5cbiAqL1xuZnVuY3Rpb24gX2V4cG9ydChleHBvcnRlciwgYXJnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAvLyBwcmV2ZW50IGRvd25zdHJlYW0gZXhwb3J0ZXIgY2FsbHMgZnJvbSBnZW5lcmF0aW5nIHNwYW5zXG4gICAgICAgIGFwaV8xLmNvbnRleHQud2l0aCgoMCwgc3VwcHJlc3NfdHJhY2luZ18xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksICgpID0+IHtcbiAgICAgICAgICAgIGV4cG9ydGVyLmV4cG9ydChhcmcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLl9leHBvcnQgPSBfZXhwb3J0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVybmFsID0gZXhwb3J0cy5kaWFnTG9nTGV2ZWxGcm9tU3RyaW5nID0gZXhwb3J0cy5CaW5kT25jZUZ1dHVyZSA9IGV4cG9ydHMudXJsTWF0Y2hlcyA9IGV4cG9ydHMuaXNVcmxJZ25vcmVkID0gZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IGV4cG9ydHMubWVyZ2UgPSBleHBvcnRzLlRyYWNlU3RhdGUgPSBleHBvcnRzLnVuc3VwcHJlc3NUcmFjaW5nID0gZXhwb3J0cy5zdXBwcmVzc1RyYWNpbmcgPSBleHBvcnRzLmlzVHJhY2luZ1N1cHByZXNzZWQgPSBleHBvcnRzLnNldFJQQ01ldGFkYXRhID0gZXhwb3J0cy5nZXRSUENNZXRhZGF0YSA9IGV4cG9ydHMuZGVsZXRlUlBDTWV0YWRhdGEgPSBleHBvcnRzLlJQQ1R5cGUgPSBleHBvcnRzLnBhcnNlVHJhY2VQYXJlbnQgPSBleHBvcnRzLlczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IgPSBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUiA9IGV4cG9ydHMuVFJBQ0VfUEFSRU5UX0hFQURFUiA9IGV4cG9ydHMuQ29tcG9zaXRlUHJvcGFnYXRvciA9IGV4cG9ydHMub3RwZXJmb3JtYW5jZSA9IGV4cG9ydHMuZ2V0U3RyaW5nTGlzdEZyb21FbnYgPSBleHBvcnRzLmdldE51bWJlckZyb21FbnYgPSBleHBvcnRzLmdldEJvb2xlYW5Gcm9tRW52ID0gZXhwb3J0cy5nZXRTdHJpbmdGcm9tRW52ID0gZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IGV4cG9ydHMuU0RLX0lORk8gPSBleHBvcnRzLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkID0gZXhwb3J0cy5FeHBvcnRSZXN1bHRDb2RlID0gZXhwb3J0cy51bnJlZlRpbWVyID0gZXhwb3J0cy50aW1lSW5wdXRUb0hyVGltZSA9IGV4cG9ydHMubWlsbGlzVG9IclRpbWUgPSBleHBvcnRzLmlzVGltZUlucHV0SHJUaW1lID0gZXhwb3J0cy5pc1RpbWVJbnB1dCA9IGV4cG9ydHMuaHJUaW1lVG9UaW1lU3RhbXAgPSBleHBvcnRzLmhyVGltZVRvTmFub3NlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvTWlsbGlzZWNvbmRzID0gZXhwb3J0cy5oclRpbWVUb01pY3Jvc2Vjb25kcyA9IGV4cG9ydHMuaHJUaW1lRHVyYXRpb24gPSBleHBvcnRzLmhyVGltZSA9IGV4cG9ydHMuZ2V0VGltZU9yaWdpbiA9IGV4cG9ydHMuYWRkSHJUaW1lcyA9IGV4cG9ydHMubG9nZ2luZ0Vycm9ySGFuZGxlciA9IGV4cG9ydHMuc2V0R2xvYmFsRXJyb3JIYW5kbGVyID0gZXhwb3J0cy5nbG9iYWxFcnJvckhhbmRsZXIgPSBleHBvcnRzLnNhbml0aXplQXR0cmlidXRlcyA9IGV4cG9ydHMuaXNBdHRyaWJ1dGVWYWx1ZSA9IGV4cG9ydHMuQW5jaG9yZWRDbG9jayA9IGV4cG9ydHMuVzNDQmFnZ2FnZVByb3BhZ2F0b3IgPSB2b2lkIDA7XG52YXIgVzNDQmFnZ2FnZVByb3BhZ2F0b3JfMSA9IHJlcXVpcmUoXCIuL2JhZ2dhZ2UvcHJvcGFnYXRpb24vVzNDQmFnZ2FnZVByb3BhZ2F0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJXM0NCYWdnYWdlUHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVzNDQmFnZ2FnZVByb3BhZ2F0b3JfMS5XM0NCYWdnYWdlUHJvcGFnYXRvcjsgfSB9KTtcbnZhciBhbmNob3JlZF9jbG9ja18xID0gcmVxdWlyZShcIi4vY29tbW9uL2FuY2hvcmVkLWNsb2NrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQW5jaG9yZWRDbG9ja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYW5jaG9yZWRfY2xvY2tfMS5BbmNob3JlZENsb2NrOyB9IH0pO1xudmFyIGF0dHJpYnV0ZXNfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9hdHRyaWJ1dGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBdHRyaWJ1dGVWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXR0cmlidXRlc18xLmlzQXR0cmlidXRlVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYW5pdGl6ZUF0dHJpYnV0ZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF0dHJpYnV0ZXNfMS5zYW5pdGl6ZUF0dHJpYnV0ZXM7IH0gfSk7XG52YXIgZ2xvYmFsX2Vycm9yX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9nbG9iYWwtZXJyb3ItaGFuZGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdsb2JhbEVycm9ySGFuZGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYmFsX2Vycm9yX2hhbmRsZXJfMS5nbG9iYWxFcnJvckhhbmRsZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRHbG9iYWxFcnJvckhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JhbF9lcnJvcl9oYW5kbGVyXzEuc2V0R2xvYmFsRXJyb3JIYW5kbGVyOyB9IH0pO1xudmFyIGxvZ2dpbmdfZXJyb3JfaGFuZGxlcl8xID0gcmVxdWlyZShcIi4vY29tbW9uL2xvZ2dpbmctZXJyb3ItaGFuZGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZ2dpbmdFcnJvckhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZ2dpbmdfZXJyb3JfaGFuZGxlcl8xLmxvZ2dpbmdFcnJvckhhbmRsZXI7IH0gfSk7XG52YXIgdGltZV8xID0gcmVxdWlyZShcIi4vY29tbW9uL3RpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRIclRpbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuYWRkSHJUaW1lczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFRpbWVPcmlnaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5nZXRUaW1lT3JpZ2luOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaHJUaW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lRHVyYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5oclRpbWVEdXJhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhyVGltZVRvTWljcm9zZWNvbmRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaHJUaW1lVG9NaWNyb3NlY29uZHM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoclRpbWVUb01pbGxpc2Vjb25kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvTWlsbGlzZWNvbmRzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lVG9OYW5vc2Vjb25kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvTmFub3NlY29uZHM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoclRpbWVUb1RpbWVTdGFtcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvVGltZVN0YW1wOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNUaW1lSW5wdXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5pc1RpbWVJbnB1dDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVGltZUlucHV0SHJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaXNUaW1lSW5wdXRIclRpbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaWxsaXNUb0hyVGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLm1pbGxpc1RvSHJUaW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZUlucHV0VG9IclRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS50aW1lSW5wdXRUb0hyVGltZTsgfSB9KTtcbnZhciB0aW1lcl91dGlsXzEgPSByZXF1aXJlKFwiLi9jb21tb24vdGltZXItdXRpbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVucmVmVGltZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVyX3V0aWxfMS51bnJlZlRpbWVyOyB9IH0pO1xudmFyIEV4cG9ydFJlc3VsdF8xID0gcmVxdWlyZShcIi4vRXhwb3J0UmVzdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRXhwb3J0UmVzdWx0Q29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRXhwb3J0UmVzdWx0XzEuRXhwb3J0UmVzdWx0Q29kZTsgfSB9KTtcbnZhciB1dGlsc18xID0gcmVxdWlyZShcIi4vYmFnZ2FnZS91dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkOyB9IH0pO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNES19JTkZPXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLlNES19JTkZPOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX2dsb2JhbFRoaXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuX2dsb2JhbFRoaXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTdHJpbmdGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLmdldFN0cmluZ0Zyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRCb29sZWFuRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5nZXRCb29sZWFuRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE51bWJlckZyb21FbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuZ2V0TnVtYmVyRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFN0cmluZ0xpc3RGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLmdldFN0cmluZ0xpc3RGcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3RwZXJmb3JtYW5jZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5vdHBlcmZvcm1hbmNlOyB9IH0pO1xudmFyIGNvbXBvc2l0ZV8xID0gcmVxdWlyZShcIi4vcHJvcGFnYXRpb24vY29tcG9zaXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29tcG9zaXRlUHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tcG9zaXRlXzEuQ29tcG9zaXRlUHJvcGFnYXRvcjsgfSB9KTtcbnZhciBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi90cmFjZS9XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVFJBQ0VfUEFSRU5UX0hFQURFUlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcl8xLlRSQUNFX1BBUkVOVF9IRUFERVI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUUkFDRV9TVEFURV9IRUFERVJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3JfMS5UUkFDRV9TVEFURV9IRUFERVI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXzEuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlVHJhY2VQYXJlbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3JfMS5wYXJzZVRyYWNlUGFyZW50OyB9IH0pO1xudmFyIHJwY19tZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vdHJhY2UvcnBjLW1ldGFkYXRhXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUlBDVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuUlBDVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlbGV0ZVJQQ01ldGFkYXRhXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfbWV0YWRhdGFfMS5kZWxldGVSUENNZXRhZGF0YTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFJQQ01ldGFkYXRhXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfbWV0YWRhdGFfMS5nZXRSUENNZXRhZGF0YTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFJQQ01ldGFkYXRhXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBycGNfbWV0YWRhdGFfMS5zZXRSUENNZXRhZGF0YTsgfSB9KTtcbnZhciBzdXBwcmVzc190cmFjaW5nXzEgPSByZXF1aXJlKFwiLi90cmFjZS9zdXBwcmVzcy10cmFjaW5nXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNUcmFjaW5nU3VwcHJlc3NlZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3VwcHJlc3NfdHJhY2luZ18xLmlzVHJhY2luZ1N1cHByZXNzZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdXBwcmVzc1RyYWNpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1cHByZXNzX3RyYWNpbmdfMS5zdXBwcmVzc1RyYWNpbmc7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN1cHByZXNzVHJhY2luZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3VwcHJlc3NfdHJhY2luZ18xLnVuc3VwcHJlc3NUcmFjaW5nOyB9IH0pO1xudmFyIFRyYWNlU3RhdGVfMSA9IHJlcXVpcmUoXCIuL3RyYWNlL1RyYWNlU3RhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUcmFjZVN0YXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBUcmFjZVN0YXRlXzEuVHJhY2VTdGF0ZTsgfSB9KTtcbnZhciBtZXJnZV8xID0gcmVxdWlyZShcIi4vdXRpbHMvbWVyZ2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWVyZ2VfMS5tZXJnZTsgfSB9KTtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKFwiLi91dGlscy90aW1lb3V0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGltZW91dEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0XzEuVGltZW91dEVycm9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FsbFdpdGhUaW1lb3V0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lb3V0XzEuY2FsbFdpdGhUaW1lb3V0OyB9IH0pO1xudmFyIHVybF8xID0gcmVxdWlyZShcIi4vdXRpbHMvdXJsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNVcmxJZ25vcmVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1cmxfMS5pc1VybElnbm9yZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1cmxNYXRjaGVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1cmxfMS51cmxNYXRjaGVzOyB9IH0pO1xudmFyIGNhbGxiYWNrXzEgPSByZXF1aXJlKFwiLi91dGlscy9jYWxsYmFja1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJpbmRPbmNlRnV0dXJlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsYmFja18xLkJpbmRPbmNlRnV0dXJlOyB9IH0pO1xudmFyIGNvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbmZpZ3VyYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnTG9nTGV2ZWxGcm9tU3RyaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWd1cmF0aW9uXzEuZGlhZ0xvZ0xldmVsRnJvbVN0cmluZzsgfSB9KTtcbmNvbnN0IGV4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9leHBvcnRlclwiKTtcbmV4cG9ydHMuaW50ZXJuYWwgPSB7XG4gICAgX2V4cG9ydDogZXhwb3J0ZXJfMS5fZXhwb3J0LFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaXNhYmxlSW5zdHJ1bWVudGF0aW9ucyA9IGV4cG9ydHMuZW5hYmxlSW5zdHJ1bWVudGF0aW9ucyA9IHZvaWQgMDtcbi8qKlxuICogRW5hYmxlIGluc3RydW1lbnRhdGlvbnNcbiAqIEBwYXJhbSBpbnN0cnVtZW50YXRpb25zXG4gKiBAcGFyYW0gdHJhY2VyUHJvdmlkZXJcbiAqIEBwYXJhbSBtZXRlclByb3ZpZGVyXG4gKi9cbmZ1bmN0aW9uIGVuYWJsZUluc3RydW1lbnRhdGlvbnMoaW5zdHJ1bWVudGF0aW9ucywgdHJhY2VyUHJvdmlkZXIsIG1ldGVyUHJvdmlkZXIsIGxvZ2dlclByb3ZpZGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBpbnN0cnVtZW50YXRpb25zLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSBpbnN0cnVtZW50YXRpb25zW2ldO1xuICAgICAgICBpZiAodHJhY2VyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRUcmFjZXJQcm92aWRlcih0cmFjZXJQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRNZXRlclByb3ZpZGVyKG1ldGVyUHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2dnZXJQcm92aWRlciAmJiBpbnN0cnVtZW50YXRpb24uc2V0TG9nZ2VyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRMb2dnZXJQcm92aWRlcihsb2dnZXJQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW5zdHJ1bWVudGF0aW9ucyBoYXZlIGJlZW4gYWxyZWFkeSBlbmFibGVkIGR1cmluZyBjcmVhdGlvblxuICAgICAgICAvLyBzbyBlbmFibGUgb25seSBpZiB1c2VyIHByZXZlbnRlZCB0aGF0IGJ5IHNldHRpbmcgZW5hYmxlZCB0byBmYWxzZVxuICAgICAgICAvLyB0aGlzIGlzIHRvIHByZXZlbnQgZG91YmxlIGVuYWJsaW5nIGJ1dCB3aGVuIGNhbGxpbmcgcmVnaXN0ZXIgYWxsXG4gICAgICAgIC8vIGluc3RydW1lbnRhdGlvbnMgc2hvdWxkIGJlIG5vdyBlbmFibGVkXG4gICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZW5hYmxlSW5zdHJ1bWVudGF0aW9ucyA9IGVuYWJsZUluc3RydW1lbnRhdGlvbnM7XG4vKipcbiAqIERpc2FibGUgaW5zdHJ1bWVudGF0aW9uc1xuICogQHBhcmFtIGluc3RydW1lbnRhdGlvbnNcbiAqL1xuZnVuY3Rpb24gZGlzYWJsZUluc3RydW1lbnRhdGlvbnMoaW5zdHJ1bWVudGF0aW9ucykge1xuICAgIGluc3RydW1lbnRhdGlvbnMuZm9yRWFjaChpbnN0cnVtZW50YXRpb24gPT4gaW5zdHJ1bWVudGF0aW9uLmRpc2FibGUoKSk7XG59XG5leHBvcnRzLmRpc2FibGVJbnN0cnVtZW50YXRpb25zID0gZGlzYWJsZUluc3RydW1lbnRhdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRvTG9hZGVyVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGFwaV9sb2dzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3NcIik7XG5jb25zdCBhdXRvTG9hZGVyVXRpbHNfMSA9IHJlcXVpcmUoXCIuL2F1dG9Mb2FkZXJVdGlsc1wiKTtcbi8qKlxuICogSXQgd2lsbCByZWdpc3RlciBpbnN0cnVtZW50YXRpb25zIGFuZCBwbHVnaW5zXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiByZXR1cm5zIGZ1bmN0aW9uIHRvIHVubG9hZCBpbnN0cnVtZW50YXRpb24gYW5kIHBsdWdpbnMgdGhhdCB3ZXJlXG4gKiAgIHJlZ2lzdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCB0cmFjZXJQcm92aWRlciA9IG9wdGlvbnMudHJhY2VyUHJvdmlkZXIgfHwgYXBpXzEudHJhY2UuZ2V0VHJhY2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBtZXRlclByb3ZpZGVyID0gb3B0aW9ucy5tZXRlclByb3ZpZGVyIHx8IGFwaV8xLm1ldHJpY3MuZ2V0TWV0ZXJQcm92aWRlcigpO1xuICAgIGNvbnN0IGxvZ2dlclByb3ZpZGVyID0gb3B0aW9ucy5sb2dnZXJQcm92aWRlciB8fCBhcGlfbG9nc18xLmxvZ3MuZ2V0TG9nZ2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBpbnN0cnVtZW50YXRpb25zID0gb3B0aW9ucy5pbnN0cnVtZW50YXRpb25zPy5mbGF0KCkgPz8gW107XG4gICAgKDAsIGF1dG9Mb2FkZXJVdGlsc18xLmVuYWJsZUluc3RydW1lbnRhdGlvbnMpKGluc3RydW1lbnRhdGlvbnMsIHRyYWNlclByb3ZpZGVyLCBtZXRlclByb3ZpZGVyLCBsb2dnZXJQcm92aWRlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgKDAsIGF1dG9Mb2FkZXJVdGlsc18xLmRpc2FibGVJbnN0cnVtZW50YXRpb25zKShpbnN0cnVtZW50YXRpb25zKTtcbiAgICB9O1xufVxuZXhwb3J0cy5yZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgPSByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRvTG9hZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zYXRpc2ZpZXMgPSB2b2lkIDA7XG4vLyBUaGlzIGlzIGEgY3VzdG9tIHNlbWFudGljIHZlcnNpb25pbmcgaW1wbGVtZW50YXRpb24gY29tcGF0aWJsZSB3aXRoIHRoZVxuLy8gYHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucz8pYCBmdW5jdGlvbiBmcm9tIHRoZSBgc2VtdmVyYCBucG0gcGFja2FnZTtcbi8vIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBgbG9vc2VgIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbi8vIFRoZSBtb3RpdmF0aW9uIGZvciB0aGUgY3VzdG9tIHNlbXZlciBpbXBsZW1lbnRhdGlvbiBpcyB0aGF0XG4vLyBgc2VtdmVyYCBwYWNrYWdlIGhhcyBzb21lIGluaXRpYWxpemF0aW9uIGRlbGF5IChsb3RzIG9mIFJlZ0V4cCBpbml0IGFuZCBjb21waWxlKVxuLy8gYW5kIHRoaXMgbGVhZHMgdG8gY29sZHN0YXJ0IG92ZXJoZWFkIGZvciB0aGUgT1RFTCBMYW1iZGEgTm9kZS5qcyBsYXllci5cbi8vIEhlbmNlLCB3ZSBoYXZlIGltcGxlbWVudGVkIGxpZ2h0d2VpZ2h0IHZlcnNpb24gb2YgaXQgaW50ZXJuYWxseSB3aXRoIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdGllcy5cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFZFUlNJT05fUkVHRVhQID0gL14oPzp2KT8oPzx2ZXJzaW9uPig/PG1ham9yPjB8WzEtOV1cXGQqKVxcLig/PG1pbm9yPjB8WzEtOV1cXGQqKVxcLig/PHBhdGNoPjB8WzEtOV1cXGQqKSkoPzotKD88cHJlcmVsZWFzZT4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikoPzpcXC4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikpKikpPyg/OlxcKyg/PGJ1aWxkPlswLTlhLXpBLVotXSsoPzpcXC5bMC05YS16QS1aLV0rKSopKT8kLztcbmNvbnN0IFJBTkdFX1JFR0VYUCA9IC9eKD88b3A+PHw+fD18PT18PD18Pj18fnxcXF58fj4pP1xccyooPzp2KT8oPzx2ZXJzaW9uPig/PG1ham9yPnh8WHxcXCp8MHxbMS05XVxcZCopKD86XFwuKD88bWlub3I+eHxYfFxcKnwwfFsxLTldXFxkKikpPyg/OlxcLig/PHBhdGNoPnh8WHxcXCp8MHxbMS05XVxcZCopKT8pKD86LSg/PHByZXJlbGVhc2U+KD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKD86XFwuKD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKSopKT8oPzpcXCsoPzxidWlsZD5bMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG5jb25zdCBvcGVyYXRvclJlc01hcCA9IHtcbiAgICAnPic6IFsxXSxcbiAgICAnPj0nOiBbMCwgMV0sXG4gICAgJz0nOiBbMF0sXG4gICAgJzw9JzogWy0xLCAwXSxcbiAgICAnPCc6IFstMV0sXG4gICAgJyE9JzogWy0xLCAxXSxcbn07XG4vKipcbiAqIENoZWNrcyBnaXZlbiB2ZXJzaW9uIHdoZXRoZXIgaXQgc2F0aXNmaWVzIGdpdmVuIHJhbmdlIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gdmVyc2lvbiB0aGUgW3ZlcnNpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS1zZW12ZXIjdmVyc2lvbnMpIHRvIGJlIGNoZWNrZWRcbiAqIEBwYXJhbSByYW5nZSAgIHRoZSBbcmFuZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS1zZW12ZXIjcmFuZ2VzKSBleHByZXNzaW9uIGZvciB2ZXJzaW9uIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIHRvIGNvbmZpZ3VyZSBzZW12ZXIgc2F0aXNmeSBjaGVja1xuICovXG5mdW5jdGlvbiBzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHJpY3Qgc2VtdmVyIGZvcm1hdCBjaGVja1xuICAgIGlmICghX3ZhbGlkYXRlVmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBJbnZhbGlkIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZiByYW5nZSBpcyBlbXB0eSwgc2F0aXNmeSBjaGVjayBzdWNjZWVkcyByZWdhcmRsZXNzIHdoYXQgdmVyc2lvbiBpc1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENsZWFudXAgcmFuZ2VcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UoLyhbPD49fl5dKylcXHMrL2csICckMScpO1xuICAgIC8vIFBhcnNlIHZlcnNpb25cbiAgICBjb25zdCBwYXJzZWRWZXJzaW9uID0gX3BhcnNlVmVyc2lvbih2ZXJzaW9uKTtcbiAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhbGxQYXJzZWRSYW5nZXMgPSBbXTtcbiAgICAvLyBDaGVjayBnaXZlbiB2ZXJzaW9uIHdoZXRoZXIgaXQgc2F0aXNmaWVzIGdpdmVuIHJhbmdlIGV4cHJlc3Npb25cbiAgICBjb25zdCBjaGVja1Jlc3VsdCA9IF9kb1NhdGlzZmllcyhwYXJzZWRWZXJzaW9uLCByYW5nZSwgYWxsUGFyc2VkUmFuZ2VzLCBvcHRpb25zKTtcbiAgICAvLyBJZiBjaGVjayByZXN1bHQgaXMgT0ssXG4gICAgLy8gZG8gYW5vdGhlciBmaW5hbCBjaGVjayBmb3IgcHJlLXJlbGVhc2UsIGlmIHByZS1yZWxlYXNlIGNoZWNrIGlzIGluY2x1ZGVkIGJ5IG9wdGlvblxuICAgIGlmIChjaGVja1Jlc3VsdCAmJiAhb3B0aW9ucz8uaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgICAgcmV0dXJuIF9kb1ByZWxlYXNlQ2hlY2socGFyc2VkVmVyc2lvbiwgYWxsUGFyc2VkUmFuZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrUmVzdWx0O1xufVxuZXhwb3J0cy5zYXRpc2ZpZXMgPSBzYXRpc2ZpZXM7XG5mdW5jdGlvbiBfdmFsaWRhdGVWZXJzaW9uKHZlcnNpb24pIHtcbiAgICByZXR1cm4gdHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnICYmIFZFUlNJT05fUkVHRVhQLnRlc3QodmVyc2lvbik7XG59XG5mdW5jdGlvbiBfZG9TYXRpc2ZpZXMocGFyc2VkVmVyc2lvbiwgcmFuZ2UsIGFsbFBhcnNlZFJhbmdlcywgb3B0aW9ucykge1xuICAgIGlmIChyYW5nZS5pbmNsdWRlcygnfHwnKSkge1xuICAgICAgICAvLyBBIHZlcnNpb24gbWF0Y2hlcyBhIHJhbmdlIGlmIGFuZCBvbmx5IGlmXG4gICAgICAgIC8vIGV2ZXJ5IGNvbXBhcmF0b3IgaW4gYXQgbGVhc3Qgb25lIG9mIHRoZSB8fC1zZXBhcmF0ZWQgY29tcGFyYXRvciBzZXRzIGlzIHNhdGlzZmllZCBieSB0aGUgdmVyc2lvblxuICAgICAgICBjb25zdCByYW5nZXMgPSByYW5nZS50cmltKCkuc3BsaXQoJ3x8Jyk7XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByYW5nZXMpIHtcbiAgICAgICAgICAgIGlmIChfY2hlY2tSYW5nZShwYXJzZWRWZXJzaW9uLCByLCBhbGxQYXJzZWRSYW5nZXMsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZS5pbmNsdWRlcygnIC0gJykpIHtcbiAgICAgICAgLy8gSHlwaGVuIHJhbmdlczogaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXNlbXZlciNoeXBoZW4tcmFuZ2VzLXh5ei0tLWFiY1xuICAgICAgICByYW5nZSA9IHJlcGxhY2VIeXBoZW4ocmFuZ2UsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHNlcGFyYXRlZCByYW5nZXMgYW5kIGFsbCBuZWVkcyB0byBiZSBzYXRpc2ZpZWQgZm9yIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gcmFuZ2VcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJylcbiAgICAgICAgICAgIC5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGNvbnN0IHIgb2YgcmFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIV9jaGVja1JhbmdlKHBhcnNlZFZlcnNpb24sIHIsIGFsbFBhcnNlZFJhbmdlcywgb3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENoZWNrIGdpdmVuIHBhcnNlZCB2ZXJzaW9uIHdpdGggZ2l2ZW4gcmFuZ2VcbiAgICByZXR1cm4gX2NoZWNrUmFuZ2UocGFyc2VkVmVyc2lvbiwgcmFuZ2UsIGFsbFBhcnNlZFJhbmdlcywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBfY2hlY2tSYW5nZShwYXJzZWRWZXJzaW9uLCByYW5nZSwgYWxsUGFyc2VkUmFuZ2VzLCBvcHRpb25zKSB7XG4gICAgcmFuZ2UgPSBfbm9ybWFsaXplUmFuZ2UocmFuZ2UsIG9wdGlvbnMpO1xuICAgIGlmIChyYW5nZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByYW5nZXMgc2VwYXJhdGVkLCBzYXRpc2Z5IGVhY2ggb2YgdGhlbVxuICAgICAgICByZXR1cm4gX2RvU2F0aXNmaWVzKHBhcnNlZFZlcnNpb24sIHJhbmdlLCBhbGxQYXJzZWRSYW5nZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHBhcnNlIHJhbmdlXG4gICAgICAgIGNvbnN0IHBhcnNlZFJhbmdlID0gX3BhcnNlUmFuZ2UocmFuZ2UpO1xuICAgICAgICBhbGxQYXJzZWRSYW5nZXMucHVzaChwYXJzZWRSYW5nZSk7XG4gICAgICAgIC8vIENoZWNrIHBhcnNlZCB2ZXJzaW9uIGJ5IHBhcnNlZCByYW5nZVxuICAgICAgICByZXR1cm4gX3NhdGlzZmllcyhwYXJzZWRWZXJzaW9uLCBwYXJzZWRSYW5nZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gX3NhdGlzZmllcyhwYXJzZWRWZXJzaW9uLCBwYXJzZWRSYW5nZSkge1xuICAgIC8vIElmIHJhbmdlIGlzIGludmFsaWQsIHNhdGlzZnkgY2hlY2sgZmFpbHMgKG5vIGVycm9yIHRocm93KVxuICAgIGlmIChwYXJzZWRSYW5nZS5pbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgcmFuZ2UgaXMgZW1wdHkgb3Igd2lsZGNhcmQsIHNhdGlzZnkgY2hlY2sgc3VjY2VlZHMgcmVnYXJkbGVzcyB3aGF0IHZlcnNpb24gaXNcbiAgICBpZiAoIXBhcnNlZFJhbmdlLnZlcnNpb24gfHwgX2lzV2lsZGNhcmQocGFyc2VkUmFuZ2UudmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENvbXBhcmUgdmVyc2lvbiBzZWdtZW50IGZpcnN0XG4gICAgbGV0IGNvbXBhcmlzb25SZXN1bHQgPSBfY29tcGFyZVZlcnNpb25TZWdtZW50cyhwYXJzZWRWZXJzaW9uLnZlcnNpb25TZWdtZW50cyB8fCBbXSwgcGFyc2VkUmFuZ2UudmVyc2lvblNlZ21lbnRzIHx8IFtdKTtcbiAgICAvLyBJZiB2ZXJzaW9ucyBzZWdtZW50cyBhcmUgZXF1YWwsIGNvbXBhcmUgYnkgcHJlLXJlbGVhc2Ugc2VnbWVudHNcbiAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PT0gMCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uUHJlcmVsZWFzZVNlZ21lbnRzID0gcGFyc2VkVmVyc2lvbi5wcmVyZWxlYXNlU2VnbWVudHMgfHwgW107XG4gICAgICAgIGNvbnN0IHJhbmdlUHJlcmVsZWFzZVNlZ21lbnRzID0gcGFyc2VkUmFuZ2UucHJlcmVsZWFzZVNlZ21lbnRzIHx8IFtdO1xuICAgICAgICBpZiAoIXZlcnNpb25QcmVyZWxlYXNlU2VnbWVudHMubGVuZ3RoICYmICFyYW5nZVByZXJlbGVhc2VTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF2ZXJzaW9uUHJlcmVsZWFzZVNlZ21lbnRzLmxlbmd0aCAmJlxuICAgICAgICAgICAgcmFuZ2VQcmVyZWxlYXNlU2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9uUHJlcmVsZWFzZVNlZ21lbnRzLmxlbmd0aCAmJlxuICAgICAgICAgICAgIXJhbmdlUHJlcmVsZWFzZVNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tcGFyaXNvblJlc3VsdCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tcGFyaXNvblJlc3VsdCA9IF9jb21wYXJlVmVyc2lvblNlZ21lbnRzKHZlcnNpb25QcmVyZWxlYXNlU2VnbWVudHMsIHJhbmdlUHJlcmVsZWFzZVNlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSZXNvbHZlIGNoZWNrIHJlc3VsdCBhY2NvcmRpbmcgdG8gY29tcGFyaXNvbiBvcGVyYXRvclxuICAgIHJldHVybiBvcGVyYXRvclJlc01hcFtwYXJzZWRSYW5nZS5vcF0/LmluY2x1ZGVzKGNvbXBhcmlzb25SZXN1bHQpO1xufVxuZnVuY3Rpb24gX2RvUHJlbGVhc2VDaGVjayhwYXJzZWRWZXJzaW9uLCBhbGxQYXJzZWRSYW5nZXMpIHtcbiAgICBpZiAocGFyc2VkVmVyc2lvbi5wcmVyZWxlYXNlKSB7XG4gICAgICAgIHJldHVybiBhbGxQYXJzZWRSYW5nZXMuc29tZShyID0+IHIucHJlcmVsZWFzZSAmJiByLnZlcnNpb24gPT09IHBhcnNlZFZlcnNpb24udmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gX25vcm1hbGl6ZVJhbmdlKHJhbmdlLCBvcHRpb25zKSB7XG4gICAgcmFuZ2UgPSByYW5nZS50cmltKCk7XG4gICAgcmFuZ2UgPSByZXBsYWNlQ2FyZXQocmFuZ2UsIG9wdGlvbnMpO1xuICAgIHJhbmdlID0gcmVwbGFjZVRpbGRlKHJhbmdlKTtcbiAgICByYW5nZSA9IHJlcGxhY2VYUmFuZ2UocmFuZ2UsIG9wdGlvbnMpO1xuICAgIHJhbmdlID0gcmFuZ2UudHJpbSgpO1xuICAgIHJldHVybiByYW5nZTtcbn1cbmZ1bmN0aW9uIGlzWChpZCkge1xuICAgIHJldHVybiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKic7XG59XG5mdW5jdGlvbiBfcGFyc2VWZXJzaW9uKHZlcnNpb25TdHJpbmcpIHtcbiAgICBjb25zdCBtYXRjaCA9IHZlcnNpb25TdHJpbmcubWF0Y2goVkVSU0lPTl9SRUdFWFApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgSW52YWxpZCB2ZXJzaW9uOiAke3ZlcnNpb25TdHJpbmd9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb24gPSBtYXRjaC5ncm91cHMudmVyc2lvbjtcbiAgICBjb25zdCBwcmVyZWxlYXNlID0gbWF0Y2guZ3JvdXBzLnByZXJlbGVhc2U7XG4gICAgY29uc3QgYnVpbGQgPSBtYXRjaC5ncm91cHMuYnVpbGQ7XG4gICAgY29uc3QgdmVyc2lvblNlZ21lbnRzID0gdmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHByZXJlbGVhc2VTZWdtZW50cyA9IHByZXJlbGVhc2U/LnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3A6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgdmVyc2lvblNlZ21lbnRzLFxuICAgICAgICB2ZXJzaW9uU2VnbWVudENvdW50OiB2ZXJzaW9uU2VnbWVudHMubGVuZ3RoLFxuICAgICAgICBwcmVyZWxlYXNlLFxuICAgICAgICBwcmVyZWxlYXNlU2VnbWVudHMsXG4gICAgICAgIHByZXJlbGVhc2VTZWdtZW50Q291bnQ6IHByZXJlbGVhc2VTZWdtZW50cyA/IHByZXJlbGVhc2VTZWdtZW50cy5sZW5ndGggOiAwLFxuICAgICAgICBidWlsZCxcbiAgICB9O1xufVxuZnVuY3Rpb24gX3BhcnNlUmFuZ2UocmFuZ2VTdHJpbmcpIHtcbiAgICBpZiAoIXJhbmdlU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSByYW5nZVN0cmluZy5tYXRjaChSQU5HRV9SRUdFWFApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgSW52YWxpZCByYW5nZTogJHtyYW5nZVN0cmluZ31gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBvcCA9IG1hdGNoLmdyb3Vwcy5vcDtcbiAgICBjb25zdCB2ZXJzaW9uID0gbWF0Y2guZ3JvdXBzLnZlcnNpb247XG4gICAgY29uc3QgcHJlcmVsZWFzZSA9IG1hdGNoLmdyb3Vwcy5wcmVyZWxlYXNlO1xuICAgIGNvbnN0IGJ1aWxkID0gbWF0Y2guZ3JvdXBzLmJ1aWxkO1xuICAgIGNvbnN0IHZlcnNpb25TZWdtZW50cyA9IHZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBwcmVyZWxlYXNlU2VnbWVudHMgPSBwcmVyZWxlYXNlPy5zcGxpdCgnLicpO1xuICAgIGlmIChvcCA9PT0gJz09Jykge1xuICAgICAgICBvcCA9ICc9JztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3A6IG9wIHx8ICc9JyxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgdmVyc2lvblNlZ21lbnRzLFxuICAgICAgICB2ZXJzaW9uU2VnbWVudENvdW50OiB2ZXJzaW9uU2VnbWVudHMubGVuZ3RoLFxuICAgICAgICBwcmVyZWxlYXNlLFxuICAgICAgICBwcmVyZWxlYXNlU2VnbWVudHMsXG4gICAgICAgIHByZXJlbGVhc2VTZWdtZW50Q291bnQ6IHByZXJlbGVhc2VTZWdtZW50cyA/IHByZXJlbGVhc2VTZWdtZW50cy5sZW5ndGggOiAwLFxuICAgICAgICBidWlsZCxcbiAgICB9O1xufVxuZnVuY3Rpb24gX2lzV2lsZGNhcmQocykge1xuICAgIHJldHVybiBzID09PSAnKicgfHwgcyA9PT0gJ3gnIHx8IHMgPT09ICdYJztcbn1cbmZ1bmN0aW9uIF9wYXJzZVZlcnNpb25TdHJpbmcodikge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludCh2LCAxMCk7XG4gICAgcmV0dXJuIGlzTmFOKG4pID8gdiA6IG47XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplVmVyc2lvblR5cGUoYSwgYikge1xuICAgIGlmICh0eXBlb2YgYSA9PT0gdHlwZW9mIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFthLCBiXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlcnNpb24gc2VnbWVudHMgY2FuIG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbU3RyaW5nKGEpLCBTdHJpbmcoYildO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jb21wYXJlVmVyc2lvblN0cmluZ3ModjEsIHYyKSB7XG4gICAgaWYgKF9pc1dpbGRjYXJkKHYxKSB8fCBfaXNXaWxkY2FyZCh2MikpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IFtwYXJzZWRWMSwgcGFyc2VkVjJdID0gX25vcm1hbGl6ZVZlcnNpb25UeXBlKF9wYXJzZVZlcnNpb25TdHJpbmcodjEpLCBfcGFyc2VWZXJzaW9uU3RyaW5nKHYyKSk7XG4gICAgaWYgKHBhcnNlZFYxID4gcGFyc2VkVjIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcnNlZFYxIDwgcGFyc2VkVjIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIF9jb21wYXJlVmVyc2lvblNlZ21lbnRzKHYxLCB2Mikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5tYXgodjEubGVuZ3RoLCB2Mi5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzID0gX2NvbXBhcmVWZXJzaW9uU3RyaW5ncyh2MVtpXSB8fCAnMCcsIHYyW2ldIHx8ICcwJyk7XG4gICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlzIGFkYXB0ZWQgZnJvbSBwb3J0aW9ucyBvZiBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL3RyZWUvODY4ZDRiYlxuLy8gTGljZW5zZTpcbi8qXG4gKiBUaGUgSVNDIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIElzYWFjIFouIFNjaGx1ZXRlciBhbmQgQ29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUlxuICogSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAqL1xuY29uc3QgTEVUVEVSREFTSE5VTUJFUiA9ICdbYS16QS1aMC05LV0nO1xuY29uc3QgTlVNRVJJQ0lERU5USUZJRVIgPSAnMHxbMS05XVxcXFxkKic7XG5jb25zdCBOT05OVU1FUklDSURFTlRJRklFUiA9IGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmA7XG5jb25zdCBHVExUID0gJygoPzo8fD4pPz0/KSc7XG5jb25zdCBQUkVSRUxFQVNFSURFTlRJRklFUiA9IGAoPzoke05VTUVSSUNJREVOVElGSUVSfXwke05PTk5VTUVSSUNJREVOVElGSUVSfSlgO1xuY29uc3QgUFJFUkVMRUFTRSA9IGAoPzotKCR7UFJFUkVMRUFTRUlERU5USUZJRVJ9KD86XFxcXC4ke1BSRVJFTEVBU0VJREVOVElGSUVSfSkqKSlgO1xuY29uc3QgQlVJTERJREVOVElGSUVSID0gYCR7TEVUVEVSREFTSE5VTUJFUn0rYDtcbmNvbnN0IEJVSUxEID0gYCg/OlxcXFwrKCR7QlVJTERJREVOVElGSUVSfSg/OlxcXFwuJHtCVUlMRElERU5USUZJRVJ9KSopKWA7XG5jb25zdCBYUkFOR0VJREVOVElGSUVSID0gYCR7TlVNRVJJQ0lERU5USUZJRVJ9fHh8WHxcXFxcKmA7XG5jb25zdCBYUkFOR0VQTEFJTiA9IGBbdj1cXFxcc10qKCR7WFJBTkdFSURFTlRJRklFUn0pYCArXG4gICAgYCg/OlxcXFwuKCR7WFJBTkdFSURFTlRJRklFUn0pYCArXG4gICAgYCg/OlxcXFwuKCR7WFJBTkdFSURFTlRJRklFUn0pYCArXG4gICAgYCg/OiR7UFJFUkVMRUFTRX0pPyR7QlVJTER9P2AgK1xuICAgIGApPyk/YDtcbmNvbnN0IFhSQU5HRSA9IGBeJHtHVExUfVxcXFxzKiR7WFJBTkdFUExBSU59JGA7XG5jb25zdCBYUkFOR0VfUkVHRVhQID0gbmV3IFJlZ0V4cChYUkFOR0UpO1xuY29uc3QgSFlQSEVOUkFOR0UgPSBgXlxcXFxzKigke1hSQU5HRVBMQUlOfSlgICsgYFxcXFxzKy1cXFxccytgICsgYCgke1hSQU5HRVBMQUlOfSlgICsgYFxcXFxzKiRgO1xuY29uc3QgSFlQSEVOUkFOR0VfUkVHRVhQID0gbmV3IFJlZ0V4cChIWVBIRU5SQU5HRSk7XG5jb25zdCBMT05FVElMREUgPSAnKD86fj4/KSc7XG5jb25zdCBUSUxERSA9IGBeJHtMT05FVElMREV9JHtYUkFOR0VQTEFJTn0kYDtcbmNvbnN0IFRJTERFX1JFR0VYUCA9IG5ldyBSZWdFeHAoVElMREUpO1xuY29uc3QgTE9ORUNBUkVUID0gJyg/OlxcXFxeKSc7XG5jb25zdCBDQVJFVCA9IGBeJHtMT05FQ0FSRVR9JHtYUkFOR0VQTEFJTn0kYDtcbmNvbnN0IENBUkVUX1JFR0VYUCA9IG5ldyBSZWdFeHAoQ0FSRVQpO1xuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL2Jsb2IvODY4ZDRiYmUzZDMxOGM1MjU0NGYzOGQ1Zjk5NzdhMTEwM2U5MjRjMi9jbGFzc2VzL3JhbmdlLmpzI0wyODVcbi8vXG4vLyB+LCB+PiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIH4yLCB+Mi54LCB+Mi54LngsIH4+Miwgfj4yLnggfj4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gfjIuMCwgfjIuMC54LCB+PjIuMCwgfj4yLjAueCAtLT4gPj0yLjAuMCA8Mi4xLjAtMFxuLy8gfjEuMiwgfjEuMi54LCB+PjEuMiwgfj4xLjIueCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjEuMi4zLCB+PjEuMi4zIC0tPiA+PTEuMi4zIDwxLjMuMC0wXG4vLyB+MS4yLjAsIH4+MS4yLjAgLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4wLjAuMSAtLT4gPj0wLjAuMSA8MC4xLjAtMFxuZnVuY3Rpb24gcmVwbGFjZVRpbGRlKGNvbXApIHtcbiAgICBjb25zdCByID0gVElMREVfUkVHRVhQO1xuICAgIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgICAgIGxldCByZXQ7XG4gICAgICAgIGlmIChpc1goTSkpIHtcbiAgICAgICAgICAgIHJldCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4wLjAgPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAgICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wIDwke019LiR7K20gKyAxfS4wLTBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByKSB7XG4gICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByfSA8JHtNfS4keyttICsgMX0uMC0wYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIH4xLjIuMyA9PSA+PTEuMi4zIDwxLjMuMC0wXG4gICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfSA8JHtNfS4keyttICsgMX0uMC0wYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xufVxuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL2Jsb2IvODY4ZDRiYmUzZDMxOGM1MjU0NGYzOGQ1Zjk5NzdhMTEwM2U5MjRjMi9jbGFzc2VzL3JhbmdlLmpzI0wzMjlcbi8vXG4vLyBeIC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gXjIsIF4yLngsIF4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjIuMCwgXjIuMC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMS4yLCBeMS4yLnggLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4xLjIuMyAtLT4gPj0xLjIuMyA8Mi4wLjAtMFxuLy8gXjEuMi4wIC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMC4wLjEgLS0+ID49MC4wLjEgPDAuMC4yLTBcbi8vIF4wLjEuMCAtLT4gPj0wLjEuMCA8MC4yLjAtMFxuZnVuY3Rpb24gcmVwbGFjZUNhcmV0KGNvbXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByID0gQ0FSRVRfUkVHRVhQO1xuICAgIGNvbnN0IHogPSBvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJztcbiAgICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgICAgICBsZXQgcmV0O1xuICAgICAgICBpZiAoaXNYKE0pKSB7XG4gICAgICAgICAgICByZXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgICAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgICAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHIpIHtcbiAgICAgICAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJ9IDwke019LiR7bX0uJHsrcCArIDF9LTBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwcn0gPCR7TX0uJHsrbSArIDF9LjAtMGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwcn0gPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfSR7en0gPCR7TX0uJHttfS4keytwICsgMX0tMGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfSR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0gPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9KTtcbn1cbi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXNlbXZlci9ibG9iLzg2OGQ0YmJlM2QzMThjNTI1NDRmMzhkNWY5OTc3YTExMDNlOTI0YzIvY2xhc3Nlcy9yYW5nZS5qcyNMMzkwXG5mdW5jdGlvbiByZXBsYWNlWFJhbmdlKGNvbXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByID0gWFJBTkdFX1JFR0VYUDtcbiAgICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgICAgIGNvbnN0IHhNID0gaXNYKE0pO1xuICAgICAgICBjb25zdCB4bSA9IHhNIHx8IGlzWChtKTtcbiAgICAgICAgY29uc3QgeHAgPSB4bSB8fCBpc1gocCk7XG4gICAgICAgIGNvbnN0IGFueVggPSB4cDtcbiAgICAgICAgaWYgKGd0bHQgPT09ICc9JyAmJiBhbnlYKSB7XG4gICAgICAgICAgICBndGx0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIGZpeCB0aGlzIHRvIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWVcbiAgICAgICAgcHIgPSBvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJztcbiAgICAgICAgaWYgKHhNKSB7XG4gICAgICAgICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgaXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHJldCA9ICc8MC4wLjAtMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBub3RoaW5nIGlzIGZvcmJpZGRlblxuICAgICAgICAgICAgICAgIHJldCA9ICcqJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgICAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgICAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgICAgICAgIGlmICh4bSkge1xuICAgICAgICAgICAgICAgIG0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICBpZiAoZ3RsdCA9PT0gJz4nKSB7XG4gICAgICAgICAgICAgICAgLy8gPjEgPT4gPj0yLjAuMFxuICAgICAgICAgICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICAgICAgICAgIGd0bHQgPSAnPj0nO1xuICAgICAgICAgICAgICAgIGlmICh4bSkge1xuICAgICAgICAgICAgICAgICAgICBNID0gK00gKyAxO1xuICAgICAgICAgICAgICAgICAgICBtID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtID0gK20gKyAxO1xuICAgICAgICAgICAgICAgICAgICBwID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChndGx0ID09PSAnPD0nKSB7XG4gICAgICAgICAgICAgICAgLy8gPD0wLjcueCBpcyBhY3R1YWxseSA8MC44LjAsIHNpbmNlIGFueSAwLjcueCBzaG91bGRcbiAgICAgICAgICAgICAgICAvLyBwYXNzLiAgU2ltaWxhcmx5LCA8PTcueCBpcyBhY3R1YWxseSA8OC4wLjAsIGV0Yy5cbiAgICAgICAgICAgICAgICBndGx0ID0gJzwnO1xuICAgICAgICAgICAgICAgIGlmICh4bSkge1xuICAgICAgICAgICAgICAgICAgICBNID0gK00gKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbSA9ICttICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgICAgICAgICAgcHIgPSAnLTAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0ID0gYCR7Z3RsdCArIE19LiR7bX0uJHtwfSR7cHJ9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4bSkge1xuICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3ByfSA8JHsrTSArIDF9LjAuMC0wYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4cCkge1xuICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3ByfSA8JHtNfS4keyttICsgMX0uMC0wYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xufVxuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL2Jsb2IvODY4ZDRiYmUzZDMxOGM1MjU0NGYzOGQ1Zjk5NzdhMTEwM2U5MjRjMi9jbGFzc2VzL3JhbmdlLmpzI0w0ODhcbi8vXG4vLyAxLjIgLSAzLjQuNSA9PiA+PTEuMi4wIDw9My40LjVcbi8vIDEuMi4zIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTAgQW55IDMuNC54IHdpbGwgZG9cbi8vIDEuMiAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wXG5mdW5jdGlvbiByZXBsYWNlSHlwaGVuKGNvbXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByID0gSFlQSEVOUkFOR0VfUkVHRVhQO1xuICAgIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIGZyb20sIGZNLCBmbSwgZnAsIGZwciwgZmIsIHRvLCB0TSwgdG0sIHRwLCB0cHIpID0+IHtcbiAgICAgICAgaWYgKGlzWChmTSkpIHtcbiAgICAgICAgICAgIGZyb20gPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1goZm0pKSB7XG4gICAgICAgICAgICBmcm9tID0gYD49JHtmTX0uMC4wJHtvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzWChmcCkpIHtcbiAgICAgICAgICAgIGZyb20gPSBgPj0ke2ZNfS4ke2ZtfS4wJHtvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZwcikge1xuICAgICAgICAgICAgZnJvbSA9IGA+PSR7ZnJvbX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZnJvbSA9IGA+PSR7ZnJvbX0ke29wdGlvbnM/LmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzWCh0TSkpIHtcbiAgICAgICAgICAgIHRvID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNYKHRtKSkge1xuICAgICAgICAgICAgdG8gPSBgPCR7K3RNICsgMX0uMC4wLTBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzWCh0cCkpIHtcbiAgICAgICAgICAgIHRvID0gYDwke3RNfS4keyt0bSArIDF9LjAtMGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHByKSB7XG4gICAgICAgICAgICB0byA9IGA8PSR7dE19LiR7dG19LiR7dHB9LSR7dHByfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucz8uaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgICAgICAgIHRvID0gYDwke3RNfS4ke3RtfS4keyt0cCArIDF9LTBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG8gPSBgPD0ke3RvfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2Zyb219ICR7dG99YC50cmltKCk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW12ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1hc3NVbndyYXAgPSBleHBvcnRzLnVud3JhcCA9IGV4cG9ydHMubWFzc1dyYXAgPSBleHBvcnRzLndyYXAgPSB2b2lkIDA7XG4vLyBEZWZhdWx0IHRvIGNvbXBsYWluaW5nIGxvdWRseSB3aGVuIHRoaW5ncyBkb24ndCBnbyBhY2NvcmRpbmcgdG8gcGxhbi5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5sZXQgbG9nZ2VyID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuLy8gU2V0cyBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCwgcHJlc2VydmluZyBpdHMgZW51bWVyYWJpbGl0eS5cbi8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBhbHJlYWR5IHdyaXRhYmxlLlxuZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGVudW1lcmFibGUgPSAhIW9ialtuYW1lXSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBuYW1lKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuY29uc3Qgd3JhcCA9IChub2R1bGUsIG5hbWUsIHdyYXBwZXIpID0+IHtcbiAgICBpZiAoIW5vZHVsZSB8fCAhbm9kdWxlW25hbWVdKSB7XG4gICAgICAgIGxvZ2dlcignbm8gb3JpZ2luYWwgZnVuY3Rpb24gJyArIFN0cmluZyhuYW1lKSArICcgdG8gd3JhcCcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghd3JhcHBlcikge1xuICAgICAgICBsb2dnZXIoJ25vIHdyYXBwZXIgZnVuY3Rpb24nKTtcbiAgICAgICAgbG9nZ2VyKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbCA9IG5vZHVsZVtuYW1lXTtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB3cmFwcGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxvZ2dlcignb3JpZ2luYWwgb2JqZWN0IGFuZCB3cmFwcGVyIG11c3QgYmUgZnVuY3Rpb25zJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBwZXIob3JpZ2luYWwsIG5hbWUpO1xuICAgIGRlZmluZVByb3BlcnR5KHdyYXBwZWQsICdfX29yaWdpbmFsJywgb3JpZ2luYWwpO1xuICAgIGRlZmluZVByb3BlcnR5KHdyYXBwZWQsICdfX3Vud3JhcCcsICgpID0+IHtcbiAgICAgICAgaWYgKG5vZHVsZVtuYW1lXSA9PT0gd3JhcHBlZCkge1xuICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCBvcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCAnX193cmFwcGVkJywgdHJ1ZSk7XG4gICAgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCB3cmFwcGVkKTtcbiAgICByZXR1cm4gd3JhcHBlZDtcbn07XG5leHBvcnRzLndyYXAgPSB3cmFwO1xuY29uc3QgbWFzc1dyYXAgPSAobm9kdWxlcywgbmFtZXMsIHdyYXBwZXIpID0+IHtcbiAgICBpZiAoIW5vZHVsZXMpIHtcbiAgICAgICAgbG9nZ2VyKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgbW9kdWxlcyB0byBwYXRjaCcpO1xuICAgICAgICBsb2dnZXIobmV3IEVycm9yKCkuc3RhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vZHVsZXMpKSB7XG4gICAgICAgIG5vZHVsZXMgPSBbbm9kdWxlc107XG4gICAgfVxuICAgIGlmICghKG5hbWVzICYmIEFycmF5LmlzQXJyYXkobmFtZXMpKSkge1xuICAgICAgICBsb2dnZXIoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBmdW5jdGlvbnMgdG8gd3JhcCBvbiBtb2R1bGVzJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbm9kdWxlcy5mb3JFYWNoKG5vZHVsZSA9PiB7XG4gICAgICAgIG5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICAoMCwgZXhwb3J0cy53cmFwKShub2R1bGUsIG5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5leHBvcnRzLm1hc3NXcmFwID0gbWFzc1dyYXA7XG5jb25zdCB1bndyYXAgPSAobm9kdWxlLCBuYW1lKSA9PiB7XG4gICAgaWYgKCFub2R1bGUgfHwgIW5vZHVsZVtuYW1lXSkge1xuICAgICAgICBsb2dnZXIoJ25vIGZ1bmN0aW9uIHRvIHVud3JhcC4nKTtcbiAgICAgICAgbG9nZ2VyKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB3cmFwcGVkID0gbm9kdWxlW25hbWVdO1xuICAgIGlmICghd3JhcHBlZC5fX3Vud3JhcCkge1xuICAgICAgICBsb2dnZXIoJ25vIG9yaWdpbmFsIHRvIHVud3JhcCB0byAtLSBoYXMgJyArXG4gICAgICAgICAgICBTdHJpbmcobmFtZSkgK1xuICAgICAgICAgICAgJyBhbHJlYWR5IGJlZW4gdW53cmFwcGVkPycpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgd3JhcHBlZC5fX3Vud3JhcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxufTtcbmV4cG9ydHMudW53cmFwID0gdW53cmFwO1xuY29uc3QgbWFzc1Vud3JhcCA9IChub2R1bGVzLCBuYW1lcykgPT4ge1xuICAgIGlmICghbm9kdWxlcykge1xuICAgICAgICBsb2dnZXIoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBtb2R1bGVzIHRvIHBhdGNoJyk7XG4gICAgICAgIGxvZ2dlcihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9kdWxlcykpIHtcbiAgICAgICAgbm9kdWxlcyA9IFtub2R1bGVzXTtcbiAgICB9XG4gICAgaWYgKCEobmFtZXMgJiYgQXJyYXkuaXNBcnJheShuYW1lcykpKSB7XG4gICAgICAgIGxvZ2dlcignbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIGZ1bmN0aW9ucyB0byB1bndyYXAgb24gbW9kdWxlcycpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIG5vZHVsZXMuZm9yRWFjaChub2R1bGUgPT4ge1xuICAgICAgICBuYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgKDAsIGV4cG9ydHMudW53cmFwKShub2R1bGUsIG5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5leHBvcnRzLm1hc3NVbndyYXAgPSBtYXNzVW53cmFwO1xuZnVuY3Rpb24gc2hpbW1lcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sb2dnZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvZ2dlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbG9nZ2VyKFwibmV3IGxvZ2dlciBpc24ndCBhIGZ1bmN0aW9uLCBub3QgcmVwbGFjaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzaGltbWVyO1xuc2hpbW1lci53cmFwID0gZXhwb3J0cy53cmFwO1xuc2hpbW1lci5tYXNzV3JhcCA9IGV4cG9ydHMubWFzc1dyYXA7XG5zaGltbWVyLnVud3JhcCA9IGV4cG9ydHMudW53cmFwO1xuc2hpbW1lci5tYXNzVW53cmFwID0gZXhwb3J0cy5tYXNzVW53cmFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hpbW1lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3QgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBhcGlfbG9nc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaS1sb2dzXCIpO1xuY29uc3Qgc2hpbW1lciA9IHJlcXVpcmUoXCIuL3NoaW1tZXJcIik7XG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgaW50ZXJuYWwgY2xhc3MgZm9yIGluc3RydW1lbnRpbmcgbm9kZSBhbmQgd2ViIHBsdWdpbnNcbiAqL1xuY2xhc3MgSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Qge1xuICAgIGluc3RydW1lbnRhdGlvbk5hbWU7XG4gICAgaW5zdHJ1bWVudGF0aW9uVmVyc2lvbjtcbiAgICBfY29uZmlnID0ge307XG4gICAgX3RyYWNlcjtcbiAgICBfbWV0ZXI7XG4gICAgX2xvZ2dlcjtcbiAgICBfZGlhZztcbiAgICBjb25zdHJ1Y3RvcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25OYW1lID0gaW5zdHJ1bWVudGF0aW9uTmFtZTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uID0gaW5zdHJ1bWVudGF0aW9uVmVyc2lvbjtcbiAgICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZGlhZyA9IGFwaV8xLmRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogaW5zdHJ1bWVudGF0aW9uTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RyYWNlciA9IGFwaV8xLnRyYWNlLmdldFRyYWNlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBhcGlfMS5tZXRyaWNzLmdldE1ldGVyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBhcGlfbG9nc18xLmxvZ3MuZ2V0TG9nZ2VyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgICAgICB0aGlzLl91cGRhdGVNZXRyaWNJbnN0cnVtZW50cygpO1xuICAgIH1cbiAgICAvKiBBcGkgdG8gd3JhcCBpbnN0cnVtZW50ZWQgbWV0aG9kICovXG4gICAgX3dyYXAgPSBzaGltbWVyLndyYXA7XG4gICAgLyogQXBpIHRvIHVud3JhcCBpbnN0cnVtZW50ZWQgbWV0aG9kcyAqL1xuICAgIF91bndyYXAgPSBzaGltbWVyLnVud3JhcDtcbiAgICAvKiBBcGkgdG8gbWFzcyB3cmFwIGluc3RydW1lbnRlZCBtZXRob2QgKi9cbiAgICBfbWFzc1dyYXAgPSBzaGltbWVyLm1hc3NXcmFwO1xuICAgIC8qIEFwaSB0byBtYXNzIHVud3JhcCBpbnN0cnVtZW50ZWQgbWV0aG9kcyAqL1xuICAgIF9tYXNzVW53cmFwID0gc2hpbW1lci5tYXNzVW53cmFwO1xuICAgIC8qIFJldHVybnMgbWV0ZXIgKi9cbiAgICBnZXQgbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBNZXRlclByb3ZpZGVyIHRvIHRoaXMgcGx1Z2luXG4gICAgICogQHBhcmFtIG1ldGVyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBzZXRNZXRlclByb3ZpZGVyKG1ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBtZXRlclByb3ZpZGVyLmdldE1ldGVyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKTtcbiAgICB9XG4gICAgLyogUmV0dXJucyBsb2dnZXIgKi9cbiAgICBnZXQgbG9nZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9nZ2VyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIExvZ2dlclByb3ZpZGVyIHRvIHRoaXMgcGx1Z2luXG4gICAgICogQHBhcmFtIGxvZ2dlclByb3ZpZGVyXG4gICAgICovXG4gICAgc2V0TG9nZ2VyUHJvdmlkZXIobG9nZ2VyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyUHJvdmlkZXIuZ2V0TG9nZ2VyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogR2V0IG1vZHVsZSBkZWZpbml0aW9ucyBkZWZpbmVkIGJ5IHtAbGluayBpbml0fS5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBleHBlcmltZW50YWwgY29tcGlsZS10aW1lIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHtAbGluayBJbnN0cnVtZW50YXRpb25Nb2R1bGVEZWZpbml0aW9ufVxuICAgICAqL1xuICAgIGdldE1vZHVsZURlZmluaXRpb25zKCkge1xuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gdGhpcy5pbml0KCkgPz8gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbml0UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtpbml0UmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdFJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmV3IG1ldHJpYyBpbnN0cnVtZW50cyB3aXRoIHRoZSBjdXJyZW50IE1ldGVyLlxuICAgICAqL1xuICAgIF91cGRhdGVNZXRyaWNJbnN0cnVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBSZXR1cm5zIEluc3RydW1lbnRhdGlvbkNvbmZpZyAqL1xuICAgIGdldENvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBJbnN0cnVtZW50YXRpb25Db25maWcgdG8gdGhpcyBwbHVnaW5cbiAgICAgKiBAcGFyYW0gY29uZmlnXG4gICAgICovXG4gICAgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICAvLyBjb3B5IGNvbmZpZyBmaXJzdCBsZXZlbCBwcm9wZXJ0aWVzIHRvIGVuc3VyZSB0aGV5IGFyZSBpbW11dGFibGUuXG4gICAgICAgIC8vIG5lc3RlZCBwcm9wZXJ0aWVzIGFyZSBub3QgY29waWVkLCB0aHVzIGFyZSBtdXRhYmxlIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgVHJhY2VQcm92aWRlciB0byB0aGlzIHBsdWdpblxuICAgICAqIEBwYXJhbSB0cmFjZXJQcm92aWRlclxuICAgICAqL1xuICAgIHNldFRyYWNlclByb3ZpZGVyKHRyYWNlclByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuX3RyYWNlciA9IHRyYWNlclByb3ZpZGVyLmdldFRyYWNlcih0aGlzLmluc3RydW1lbnRhdGlvbk5hbWUsIHRoaXMuaW5zdHJ1bWVudGF0aW9uVmVyc2lvbik7XG4gICAgfVxuICAgIC8qIFJldHVybnMgdHJhY2VyICovXG4gICAgZ2V0IHRyYWNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBzcGFuIGN1c3RvbWl6YXRpb24gaG9vaywgaWYgY29uZmlndXJlZCwgYW5kIGxvZyBhbnkgZXJyb3JzLlxuICAgICAqIEFueSBzZW1hbnRpY3Mgb2YgdGhlIHRyaWdnZXIgYW5kIGluZm8gYXJlIGRlZmluZWQgYnkgdGhlIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0gaG9va0hhbmRsZXIgVGhlIG9wdGlvbmFsIGhvb2sgaGFuZGxlciB3aGljaCB0aGUgdXNlciBoYXMgY29uZmlndXJlZCB2aWEgaW5zdHJ1bWVudGF0aW9uIGNvbmZpZ1xuICAgICAqIEBwYXJhbSB0cmlnZ2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBmb3IgZXhlY3V0aW5nIHRoZSBob29rIGZvciBsb2dnaW5nIHB1cnBvc2VzXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gd2hpY2ggdGhlIGhvb2sgc2hvdWxkIGJlIGFwcGxpZWRcbiAgICAgKiBAcGFyYW0gaW5mbyBUaGUgaW5mbyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIHRoZSBob29rLCB3aXRoIHVzZWZ1bCBkYXRhIHRoZSBob29rIG1heSB1c2VcbiAgICAgKi9cbiAgICBfcnVuU3BhbkN1c3RvbWl6YXRpb25Ib29rKGhvb2tIYW5kbGVyLCB0cmlnZ2VyTmFtZSwgc3BhbiwgaW5mbykge1xuICAgICAgICBpZiAoIWhvb2tIYW5kbGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGhvb2tIYW5kbGVyKHNwYW4sIGluZm8pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKGBFcnJvciBydW5uaW5nIHNwYW4gY3VzdG9taXphdGlvbiBob29rIGR1ZSB0byBleGNlcHRpb24gaW4gaGFuZGxlcmAsIHsgdHJpZ2dlck5hbWUgfSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbkFic3RyYWN0ID0gSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG4iLAogICAgIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuXHQqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcblx0XHRsZXQgaGFzaCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcblx0fVxuXHRjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuXG5cdC8qKlxuXHQqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXHRcdGxldCBwcmV2VGltZTtcblx0XHRsZXQgZW5hYmxlT3ZlcnJpZGUgPSBudWxsO1xuXHRcdGxldCBuYW1lc3BhY2VzQ2FjaGU7XG5cdFx0bGV0IGVuYWJsZWRDYWNoZTtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBlbmFibGVPdmVycmlkZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXNwYWNlc0NhY2hlICE9PSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0bmFtZXNwYWNlc0NhY2hlID0gY3JlYXRlRGVidWcubmFtZXNwYWNlcztcblx0XHRcdFx0XHRlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5hYmxlZENhY2hlO1xuXHRcdFx0fSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblx0XHRjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcztcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJylcblx0XHRcdC50cmltKClcblx0XHRcdC5yZXBsYWNlKC9cXHMrL2csICcsJylcblx0XHRcdC5zcGxpdCgnLCcpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pO1xuXG5cdFx0Zm9yIChjb25zdCBucyBvZiBzcGxpdCkge1xuXHRcdFx0aWYgKG5zWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChucy5zbGljZSgxKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcmVhdGVEZWJ1Zy5uYW1lcy5wdXNoKG5zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcyBhIG5hbWVzcGFjZSB0ZW1wbGF0ZSwgaG9ub3Jpbmdcblx0ICogYXN0ZXJpc2tzIGFzIHdpbGRjYXJkcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdGVtcGxhdGVcblx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0ICovXG5cdGZ1bmN0aW9uIG1hdGNoZXNUZW1wbGF0ZShzZWFyY2gsIHRlbXBsYXRlKSB7XG5cdFx0bGV0IHNlYXJjaEluZGV4ID0gMDtcblx0XHRsZXQgdGVtcGxhdGVJbmRleCA9IDA7XG5cdFx0bGV0IHN0YXJJbmRleCA9IC0xO1xuXHRcdGxldCBtYXRjaEluZGV4ID0gMDtcblxuXHRcdHdoaWxlIChzZWFyY2hJbmRleCA8IHNlYXJjaC5sZW5ndGgpIHtcblx0XHRcdGlmICh0ZW1wbGF0ZUluZGV4IDwgdGVtcGxhdGUubGVuZ3RoICYmICh0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gc2VhcmNoW3NlYXJjaEluZGV4XSB8fCB0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gJyonKSkge1xuXHRcdFx0XHQvLyBNYXRjaCBjaGFyYWN0ZXIgb3IgcHJvY2VlZCB3aXRoIHdpbGRjYXJkXG5cdFx0XHRcdGlmICh0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gJyonKSB7XG5cdFx0XHRcdFx0c3RhckluZGV4ID0gdGVtcGxhdGVJbmRleDtcblx0XHRcdFx0XHRtYXRjaEluZGV4ID0gc2VhcmNoSW5kZXg7XG5cdFx0XHRcdFx0dGVtcGxhdGVJbmRleCsrOyAvLyBTa2lwIHRoZSAnKidcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZWFyY2hJbmRleCsrO1xuXHRcdFx0XHRcdHRlbXBsYXRlSW5kZXgrKztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChzdGFySW5kZXggIT09IC0xKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmVnYXRlZC1jb25kaXRpb25cblx0XHRcdFx0Ly8gQmFja3RyYWNrIHRvIHRoZSBsYXN0ICcqJyBhbmQgdHJ5IHRvIG1hdGNoIG1vcmUgY2hhcmFjdGVyc1xuXHRcdFx0XHR0ZW1wbGF0ZUluZGV4ID0gc3RhckluZGV4ICsgMTtcblx0XHRcdFx0bWF0Y2hJbmRleCsrO1xuXHRcdFx0XHRzZWFyY2hJbmRleCA9IG1hdGNoSW5kZXg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIE5vIG1hdGNoXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIHRyYWlsaW5nICcqJyBpbiB0ZW1wbGF0ZVxuXHRcdHdoaWxlICh0ZW1wbGF0ZUluZGV4IDwgdGVtcGxhdGUubGVuZ3RoICYmIHRlbXBsYXRlW3RlbXBsYXRlSW5kZXhdID09PSAnKicpIHtcblx0XHRcdHRlbXBsYXRlSW5kZXgrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGVtcGxhdGVJbmRleCA9PT0gdGVtcGxhdGUubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcyxcblx0XHRcdC4uLmNyZWF0ZURlYnVnLnNraXBzLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0Zm9yIChjb25zdCBza2lwIG9mIGNyZWF0ZURlYnVnLnNraXBzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1RlbXBsYXRlKG5hbWUsIHNraXApKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IG5zIG9mIGNyZWF0ZURlYnVnLm5hbWVzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1RlbXBsYXRlKG5hbWUsIG5zKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwKICAgICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IG07XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgKG0gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSkgJiYgcGFyc2VJbnQobVsxXSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKSB8fCBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnREVCVUcnKSA7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuY29uc3Qge2Vudn0gPSBwcm9jZXNzO1xuXG5sZXQgZmxhZ0ZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0ZmxhZ0ZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmbGFnRm9yY2VDb2xvciA9IDE7XG59XG5cbmZ1bmN0aW9uIGVudkZvcmNlQ29sb3IoKSB7XG5cdGlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRcdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4oTnVtYmVyLnBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCB7c3RyZWFtSXNUVFksIHNuaWZmRmxhZ3MgPSB0cnVlfSA9IHt9KSB7XG5cdGNvbnN0IG5vRmxhZ0ZvcmNlQ29sb3IgPSBlbnZGb3JjZUNvbG9yKCk7XG5cdGlmIChub0ZsYWdGb3JjZUNvbG9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRmbGFnRm9yY2VDb2xvciA9IG5vRmxhZ0ZvcmNlQ29sb3I7XG5cdH1cblxuXHRjb25zdCBmb3JjZUNvbG9yID0gc25pZmZGbGFncyA/IGZsYWdGb3JjZUNvbG9yIDogbm9GbGFnRm9yY2VDb2xvcjtcblxuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKHNuaWZmRmxhZ3MpIHtcblx0XHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRcdHJldHVybiAzO1xuXHRcdH1cblxuXHRcdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdFx0cmV0dXJuIDI7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnLCAnRFJPTkUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gTnVtYmVyLnBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzpcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0sIG9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCB7XG5cdFx0c3RyZWFtSXNUVFk6IHN0cmVhbSAmJiBzdHJlYW0uaXNUVFksXG5cdFx0Li4ub3B0aW9uc1xuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbCh7aXNUVFk6IHR0eS5pc2F0dHkoMSl9KSxcblx0c3RkZXJyOiBnZXRTdXBwb3J0TGV2ZWwoe2lzVFRZOiB0dHkuaXNhdHR5KDIpfSlcbn07XG4iLAogICAgIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdFdpdGhPcHRpb25zKClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKC4uLmFyZ3MpIHtcblx0cmV0dXJuIHByb2Nlc3Muc3RkZXJyLndyaXRlKHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoZXhwb3J0cy5pbnNwZWN0T3B0cywgLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIiwKICAgICIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbnZhciBzZXAgPSByZXF1aXJlKCdwYXRoJykuc2VwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbGUpIHtcbiAgdmFyIHNlZ21lbnRzID0gZmlsZS5zcGxpdChzZXApXG4gIHZhciBpbmRleCA9IHNlZ21lbnRzLmxhc3RJbmRleE9mKCdub2RlX21vZHVsZXMnKVxuXG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVyblxuICBpZiAoIXNlZ21lbnRzW2luZGV4ICsgMV0pIHJldHVyblxuXG4gIHZhciBzY29wZWQgPSBzZWdtZW50c1tpbmRleCArIDFdWzBdID09PSAnQCdcbiAgdmFyIG5hbWUgPSBzY29wZWQgPyBzZWdtZW50c1tpbmRleCArIDFdICsgJy8nICsgc2VnbWVudHNbaW5kZXggKyAyXSA6IHNlZ21lbnRzW2luZGV4ICsgMV1cbiAgdmFyIG9mZnNldCA9IHNjb3BlZCA/IDMgOiAyXG5cbiAgdmFyIGJhc2VkaXIgPSAnJ1xuICB2YXIgbGFzdEJhc2VEaXJTZWdtZW50SW5kZXggPSBpbmRleCArIG9mZnNldCAtIDFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGFzdEJhc2VEaXJTZWdtZW50SW5kZXg7IGkrKykge1xuICAgIGlmIChpID09PSBsYXN0QmFzZURpclNlZ21lbnRJbmRleCkge1xuICAgICAgYmFzZWRpciArPSBzZWdtZW50c1tpXVxuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlZGlyICs9IHNlZ21lbnRzW2ldICsgc2VwXG4gICAgfVxuICB9XG5cbiAgdmFyIHBhdGggPSAnJ1xuICB2YXIgbGFzdFNlZ21lbnRJbmRleCA9IHNlZ21lbnRzLmxlbmd0aCAtIDFcbiAgZm9yICh2YXIgaTIgPSBpbmRleCArIG9mZnNldDsgaTIgPD0gbGFzdFNlZ21lbnRJbmRleDsgaTIrKykge1xuICAgIGlmIChpMiA9PT0gbGFzdFNlZ21lbnRJbmRleCkge1xuICAgICAgcGF0aCArPSBzZWdtZW50c1tpMl1cbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCArPSBzZWdtZW50c1tpMl0gKyBzZXBcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgYmFzZWRpcjogYmFzZWRpcixcbiAgICBwYXRoOiBwYXRoXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoJ21vZHVsZScpXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3JlcXVpcmUtaW4tdGhlLW1pZGRsZScpXG5jb25zdCBtb2R1bGVEZXRhaWxzRnJvbVBhdGggPSByZXF1aXJlKCdtb2R1bGUtZGV0YWlscy1mcm9tLXBhdGgnKVxuXG4vLyBVc2luZyB0aGUgZGVmYXVsdCBleHBvcnQgaXMgZGlzY291cmFnZWQsIGJ1dCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuLy8gVXNlIHRoaXMgaW5zdGVhZDpcbi8vICAgIGNvbnN0IHsgSG9vayB9ID0gcmVxdWlyZSgncmVxdWlyZS1pbi10aGUtbWlkZGxlJylcbm1vZHVsZS5leHBvcnRzID0gSG9va1xubW9kdWxlLmV4cG9ydHMuSG9vayA9IEhvb2tcblxubGV0IGJ1aWx0aW5Nb2R1bGVzIC8vIFNldDxzdHJpbmc+XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIG1vZHVsZSBhIFwiY29yZVwiIG1vZHVsZT9cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI2NvcmUtbW9kdWxlc1xuICpcbiAqIEB0eXBlIHsobW9kdWxlTmFtZTogc3RyaW5nKSA9PiBib29sZWFufVxuICovXG5sZXQgaXNDb3JlXG5pZiAoTW9kdWxlLmlzQnVpbHRpbikgeyAvLyBBZGRlZCBpbiBub2RlIHYxOC42LjAsIHYxNi4xNy4wXG4gIGlzQ29yZSA9IE1vZHVsZS5pc0J1aWx0aW5cbn0gZWxzZSBpZiAoTW9kdWxlLmJ1aWx0aW5Nb2R1bGVzKSB7IC8vIEFkZGVkIGluIG5vZGUgdjkuMy4wLCB2OC4xMC4wLCB2Ni4xMy4wXG4gIGlzQ29yZSA9IG1vZHVsZU5hbWUgPT4ge1xuICAgIGlmIChtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoJ25vZGU6JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGJ1aWx0aW5Nb2R1bGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1aWx0aW5Nb2R1bGVzID0gbmV3IFNldChNb2R1bGUuYnVpbHRpbk1vZHVsZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWx0aW5Nb2R1bGVzLmhhcyhtb2R1bGVOYW1lKVxuICB9XG59IGVsc2Uge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1xcJ3JlcXVpcmUtaW4tdGhlLW1pZGRsZVxcJyByZXF1aXJlcyBOb2RlLmpzID49djkuMy4wIG9yID49djguMTAuMCcpXG59XG5cbi8vICdmb28vYmFyLmpzJyBvciAnZm9vL2Jhci9pbmRleC5qcycgPT4gJ2Zvby9iYXInXG5jb25zdCBub3JtYWxpemUgPSAvKFsvXFxcXF1pbmRleCk/KFxcLmpzKT8kL1xuXG4vLyBDYWNoZSBgb25yZXF1aXJlYC1wYXRjaGVkIGV4cG9ydHMgZm9yIG1vZHVsZXMuXG4vL1xuLy8gRXhwb3J0cyBmb3IgYnVpbHQtaW4gKGEuay5hLiBcImNvcmVcIikgbW9kdWxlcyBhcmUgc3RvcmVkIGluIGFuIGludGVybmFsIE1hcC5cbi8vXG4vLyBFeHBvcnRzIGZvciBub24tY29yZSBtb2R1bGVzIGFyZSBzdG9yZWQgb24gYSBwcml2YXRlIGZpZWxkIG9uIHRoZSBgTW9kdWxlYFxuLy8gb2JqZWN0IGluIGByZXF1aXJlLmNhY2hlYC4gVGhpcyBhbGxvd3MgdXNlcnMgdG8gZGVsZXRlIGZyb20gYHJlcXVpcmUuY2FjaGVgXG4vLyB0byB0cmlnZ2VyIGEgcmUtbG9hZCAoYW5kIHJlLXJ1biBvZiB0aGUgaG9vaydzIGBvbnJlcXVpcmVgKSBvZiBhIG1vZHVsZSB0aGVcbi8vIG5leHQgdGltZSBpdCBpcyByZXF1aXJlZC5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvYWxsLmh0bWwjYWxsX21vZHVsZXNfcmVxdWlyZWNhY2hlXG4vL1xuLy8gSW4gc29tZSBzcGVjaWFsIGNhc2VzIC0tIGUuZy4gc29tZSBvdGhlciBgcmVxdWlyZSgpYCBob29rIHN3YXBwaW5nIG91dFxuLy8gYE1vZHVsZS5fY2FjaGVgIGxpa2UgYEBiYWJlbC9yZWdpc3RlcmAgLS0gYSBub24tY29yZSBtb2R1bGUgd29uJ3QgYmUgaW5cbi8vIGByZXF1aXJlLmNhY2hlYC4gSW4gdGhhdCBjYXNlIHRoaXMgZmFsbHMgYmFjayB0byBjYWNoaW5nIG9uIHRoZSBpbnRlcm5hbCBNYXAuXG5jbGFzcyBFeHBvcnRzQ2FjaGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fbG9jYWxDYWNoZSA9IG5ldyBNYXAoKSAvLyA8bW9kdWxlIGZpbGVuYW1lIG9yIGlkPiAtPiA8ZXhwb3J0cz5cbiAgICB0aGlzLl9rUml0bUV4cG9ydHMgPSBTeW1ib2woJ1JpdG1FeHBvcnRzJylcbiAgfVxuXG4gIGhhcyAoZmlsZW5hbWUsIGlzQnVpbHRpbikge1xuICAgIGlmICh0aGlzLl9sb2NhbENhY2hlLmhhcyhmaWxlbmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmICghaXNCdWlsdGluKSB7XG4gICAgICBjb25zdCBtb2QgPSByZXF1aXJlLmNhY2hlW2ZpbGVuYW1lXVxuICAgICAgcmV0dXJuICEhKG1vZCAmJiB0aGlzLl9rUml0bUV4cG9ydHMgaW4gbW9kKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZXQgKGZpbGVuYW1lLCBpc0J1aWx0aW4pIHtcbiAgICBjb25zdCBjYWNoZWRFeHBvcnRzID0gdGhpcy5fbG9jYWxDYWNoZS5nZXQoZmlsZW5hbWUpXG4gICAgaWYgKGNhY2hlZEV4cG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZEV4cG9ydHNcbiAgICB9IGVsc2UgaWYgKCFpc0J1aWx0aW4pIHtcbiAgICAgIGNvbnN0IG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZW5hbWVdXG4gICAgICByZXR1cm4gKG1vZCAmJiBtb2RbdGhpcy5fa1JpdG1FeHBvcnRzXSlcbiAgICB9XG4gIH1cblxuICBzZXQgKGZpbGVuYW1lLCBleHBvcnRzLCBpc0J1aWx0aW4pIHtcbiAgICBpZiAoaXNCdWlsdGluKSB7XG4gICAgICB0aGlzLl9sb2NhbENhY2hlLnNldChmaWxlbmFtZSwgZXhwb3J0cylcbiAgICB9IGVsc2UgaWYgKGZpbGVuYW1lIGluIHJlcXVpcmUuY2FjaGUpIHtcbiAgICAgIHJlcXVpcmUuY2FjaGVbZmlsZW5hbWVdW3RoaXMuX2tSaXRtRXhwb3J0c10gPSBleHBvcnRzXG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdub24tY29yZSBtb2R1bGUgaXMgdW5leHBlY3RlZGx5IG5vdCBpbiByZXF1aXJlLmNhY2hlOiBcIiVzXCInLCBmaWxlbmFtZSlcbiAgICAgIHRoaXMuX2xvY2FsQ2FjaGUuc2V0KGZpbGVuYW1lLCBleHBvcnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBIb29rIChtb2R1bGVzLCBvcHRpb25zLCBvbnJlcXVpcmUpIHtcbiAgaWYgKCh0aGlzIGluc3RhbmNlb2YgSG9vaykgPT09IGZhbHNlKSByZXR1cm4gbmV3IEhvb2sobW9kdWxlcywgb3B0aW9ucywgb25yZXF1aXJlKVxuICBpZiAodHlwZW9mIG1vZHVsZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvbnJlcXVpcmUgPSBtb2R1bGVzXG4gICAgbW9kdWxlcyA9IG51bGxcbiAgICBvcHRpb25zID0gbnVsbFxuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb25yZXF1aXJlID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBudWxsXG4gIH1cblxuICBpZiAodHlwZW9mIE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3I6IEV4cGVjdGVkIE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lIHRvIGJlIGEgZnVuY3Rpb24gKHdhczogJXMpIC0gYWJvcnRpbmchJywgdHlwZW9mIE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lKVxuICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSByZXBvcnQgdGhpcyBlcnJvciBhcyBhbiBpc3N1ZSByZWxhdGVkIHRvIE5vZGUuanMgJXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9yZXF1aXJlLWluLXRoZS1taWRkbGUvaXNzdWVzJywgcHJvY2Vzcy52ZXJzaW9uKVxuICAgIHJldHVyblxuICB9XG5cbiAgdGhpcy5fY2FjaGUgPSBuZXcgRXhwb3J0c0NhY2hlKClcblxuICB0aGlzLl91bmhvb2tlZCA9IGZhbHNlXG4gIHRoaXMuX29yaWdSZXF1aXJlID0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlXG5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgcGF0Y2hpbmcgPSBuZXcgU2V0KClcbiAgY29uc3QgaW50ZXJuYWxzID0gb3B0aW9ucyA/IG9wdGlvbnMuaW50ZXJuYWxzID09PSB0cnVlIDogZmFsc2VcbiAgY29uc3QgaGFzV2hpdGVsaXN0ID0gQXJyYXkuaXNBcnJheShtb2R1bGVzKVxuXG4gIGRlYnVnKCdyZWdpc3RlcmluZyByZXF1aXJlIGhvb2snKVxuXG4gIHRoaXMuX3JlcXVpcmUgPSBNb2R1bGUucHJvdG90eXBlLnJlcXVpcmUgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICBpZiAoc2VsZi5fdW5ob29rZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIGlmIHRoZSBwYXRjaGVkIHJlcXVpcmUgZnVuY3Rpb24gY291bGQgbm90IGJlIHJlbW92ZWQgYmVjYXVzZVxuICAgICAgLy8gc29tZW9uZSBlbHNlIHBhdGNoZWQgaXQgYWZ0ZXIgaXQgd2FzIHBhdGNoZWQgaGVyZSwgd2UganVzdFxuICAgICAgLy8gYWJvcnQgYW5kIHBhc3MgdGhlIHJlcXVlc3Qgb253YXJkcyB0byB0aGUgb3JpZ2luYWwgcmVxdWlyZVxuICAgICAgZGVidWcoJ2lnbm9yaW5nIHJlcXVpcmUgY2FsbCAtIG1vZHVsZSBpcyBzb2Z0LXVuaG9va2VkJylcbiAgICAgIHJldHVybiBzZWxmLl9vcmlnUmVxdWlyZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGNoZWRSZXF1aXJlLmNhbGwodGhpcywgYXJndW1lbnRzLCBmYWxzZSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fb3JpZ0dldEJ1aWx0aW5Nb2R1bGUgPSBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGVcbiAgICB0aGlzLl9nZXRCdWlsdGluTW9kdWxlID0gcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBpZiAoc2VsZi5fdW5ob29rZWQgPT09IHRydWUpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGNoZWQgcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlIGZ1bmN0aW9uIGNvdWxkIG5vdCBiZSByZW1vdmVkIGJlY2F1c2VcbiAgICAgICAgLy8gc29tZW9uZSBlbHNlIHBhdGNoZWQgaXQgYWZ0ZXIgaXQgd2FzIHBhdGNoZWQgaGVyZSwgd2UganVzdCBhYm9ydCBhbmQgcGFzcyB0aGVcbiAgICAgICAgLy8gcmVxdWVzdCBvbndhcmRzIHRvIHRoZSBvcmlnaW5hbCBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGVcbiAgICAgICAgZGVidWcoJ2lnbm9yaW5nIHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSBjYWxsIC0gbW9kdWxlIGlzIHNvZnQtdW5ob29rZWQnKVxuICAgICAgICByZXR1cm4gc2VsZi5fb3JpZ0dldEJ1aWx0aW5Nb2R1bGUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGF0Y2hlZFJlcXVpcmUuY2FsbCh0aGlzLCBhcmd1bWVudHMsIHRydWUpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIHJlcXVpcmUvcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlIGFyZ3VtZW50cyBpbiBgYXJnc2BcbiAgZnVuY3Rpb24gcGF0Y2hlZFJlcXVpcmUgKGFyZ3MsIGNvcmVPbmx5KSB7XG4gICAgY29uc3QgaWQgPSBhcmdzWzBdXG4gICAgY29uc3QgY29yZSA9IGlzQ29yZShpZClcbiAgICBsZXQgZmlsZW5hbWUgLy8gdGhlIHN0cmluZyB1c2VkIGZvciBjYWNoaW5nXG4gICAgaWYgKGNvcmUpIHtcbiAgICAgIGZpbGVuYW1lID0gaWRcbiAgICAgIC8vIElmIHRoaXMgaXMgYSBidWlsdGluIG1vZHVsZSB0aGF0IGNhbiBiZSBpZGVudGlmaWVkIGJvdGggYXMgJ2ZvbycgYW5kXG4gICAgICAvLyAnbm9kZTpmb28nLCB0aGVuIHByZWZlciAnZm9vJyBhcyB0aGUgY2FjaGluZyBrZXkuXG4gICAgICBpZiAoaWQuc3RhcnRzV2l0aCgnbm9kZTonKSkge1xuICAgICAgICBjb25zdCBpZFdpdGhvdXRQcmVmaXggPSBpZC5zbGljZSg1KVxuICAgICAgICBpZiAoaXNDb3JlKGlkV2l0aG91dFByZWZpeCkpIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IGlkV2l0aG91dFByZWZpeFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb3JlT25seSkge1xuICAgICAgLy8gYGNvcmVPbmx5YCBpcyBgdHJ1ZWAgaWYgdGhpcyB3YXMgYSBjYWxsIHRvIGBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGVgLCBpbiB3aGljaCBjYXNlXG4gICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHJldHVybiBhbnl0aGluZyBpZiB0aGUgcmVxdWVzdGVkIGBpZGAgaXNuJ3QgYSBjb3JlIG1vZHVsZS4gRmFsbGluZ1xuICAgICAgLy8gYmFjayB0byBkZWZhdWx0IGJlaGF2aW91ciwgd2hpY2ggYXQgdGhlIHRpbWUgb2YgdGhpcyB3cnRpbmcgaXMgc2ltcGx5IHJldHVybmluZyBgdW5kZWZpbmVkYFxuICAgICAgZGVidWcoJ2NhbGwgdG8gcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlIHdpdGggdW5rbm93biBidWlsdC1pbiBpZCcpXG4gICAgICByZXR1cm4gc2VsZi5fb3JpZ0dldEJ1aWx0aW5Nb2R1bGUuYXBwbHkodGhpcywgYXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsZW5hbWUgPSBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZShpZCwgdGhpcylcbiAgICAgIH0gY2F0Y2ggKHJlc29sdmVFcnIpIHtcbiAgICAgICAgLy8gSWYgc29tZW9uZSAqZWxzZSogbW9ua2V5LXBhdGNoZXMgYmVmb3JlIHRoaXMgbW9ua2V5LXBhdGNoLCB0aGVuIHRoYXRcbiAgICAgICAgLy8gY29kZSBtaWdodCBleHBlY3QgYHJlcXVpcmUoc29tZUlkKWAgdG8gZ2V0IHRocm91Z2ggc28gaXQgY2FuIGJlXG4gICAgICAgIC8vIGhhbmRsZWQsIGV2ZW4gaWYgYHNvbWVJZGAgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgZmlsZW5hbWUuIEluIHRoaXNcbiAgICAgICAgLy8gY2FzZSwgaW5zdGVhZCBvZiB0aHJvd2luZyB3ZSBkZWZlciB0byB0aGUgdW5kZXJseWluZyBgcmVxdWlyZWAuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBBenVyZSBGdW5jdGlvbnMgTm9kZS5qcyB3b3JrZXIgbW9kdWxlIGRvZXMgdGhpcyxcbiAgICAgICAgLy8gd2hlcmUgYEBhenVyZS9mdW5jdGlvbnMtY29yZWAgcmVzb2x2ZXMgdG8gYW4gaW50ZXJuYWwgb2JqZWN0LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYXp1cmUtZnVuY3Rpb25zLW5vZGVqcy13b3JrZXIvYmxvYi92My41LjIvc3JjL3NldHVwQ29yZU1vZHVsZS50cyNMNDYtTDU0XG4gICAgICAgIGRlYnVnKCdNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZShcIiVzXCIpIHRocmV3ICVqLCBjYWxsaW5nIG9yaWdpbmFsIE1vZHVsZS5yZXF1aXJlJywgaWQsIHJlc29sdmVFcnIubWVzc2FnZSlcbiAgICAgICAgcmV0dXJuIHNlbGYuX29yaWdSZXF1aXJlLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1vZHVsZU5hbWUsIGJhc2VkaXJcblxuICAgIGRlYnVnKCdwcm9jZXNzaW5nICVzIG1vZHVsZSByZXF1aXJlKFxcJyVzXFwnKTogJXMnLCBjb3JlID09PSB0cnVlID8gJ2NvcmUnIDogJ25vbi1jb3JlJywgaWQsIGZpbGVuYW1lKVxuXG4gICAgLy8gcmV0dXJuIGtub3duIHBhdGNoZWQgbW9kdWxlcyBpbW1lZGlhdGVseVxuICAgIGlmIChzZWxmLl9jYWNoZS5oYXMoZmlsZW5hbWUsIGNvcmUpID09PSB0cnVlKSB7XG4gICAgICBkZWJ1ZygncmV0dXJuaW5nIGFscmVhZHkgcGF0Y2hlZCBjYWNoZWQgbW9kdWxlOiAlcycsIGZpbGVuYW1lKVxuICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlLmdldChmaWxlbmFtZSwgY29yZSlcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIG1vZHVsZSBoYXMgYSBwYXRjaGVyIGluLXByb2dyZXNzIGFscmVhZHkuXG4gICAgLy8gT3RoZXJ3aXNlLCBtYXJrIHRoaXMgbW9kdWxlIGFzIHBhdGNoaW5nIGluLXByb2dyZXNzLlxuICAgIGNvbnN0IGlzUGF0Y2hpbmcgPSBwYXRjaGluZy5oYXMoZmlsZW5hbWUpXG4gICAgaWYgKGlzUGF0Y2hpbmcgPT09IGZhbHNlKSB7XG4gICAgICBwYXRjaGluZy5hZGQoZmlsZW5hbWUpXG4gICAgfVxuXG4gICAgY29uc3QgZXhwb3J0cyA9IGNvcmVPbmx5XG4gICAgICA/IHNlbGYuX29yaWdHZXRCdWlsdGluTW9kdWxlLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICA6IHNlbGYuX29yaWdSZXF1aXJlLmFwcGx5KHRoaXMsIGFyZ3MpXG5cbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgcGF0Y2hlZCwganVzdCByZXR1cm4gaXQgYXMtaXMuXG4gICAgaWYgKGlzUGF0Y2hpbmcgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnKCdtb2R1bGUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcGF0Y2hlZCBhbHJlYWR5IC0gaWdub3Jpbmc6ICVzJywgZmlsZW5hbWUpXG4gICAgICByZXR1cm4gZXhwb3J0c1xuICAgIH1cblxuICAgIC8vIFRoZSBtb2R1bGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQsXG4gICAgLy8gc28gdGhlIHBhdGNoaW5nIG1hcmsgY2FuIGJlIGNsZWFuZWQgdXAuXG4gICAgcGF0Y2hpbmcuZGVsZXRlKGZpbGVuYW1lKVxuXG4gICAgaWYgKGNvcmUgPT09IHRydWUpIHtcbiAgICAgIGlmIChoYXNXaGl0ZWxpc3QgPT09IHRydWUgJiYgbW9kdWxlcy5pbmNsdWRlcyhmaWxlbmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdpZ25vcmluZyBjb3JlIG1vZHVsZSBub3Qgb24gd2hpdGVsaXN0OiAlcycsIGZpbGVuYW1lKVxuICAgICAgICByZXR1cm4gZXhwb3J0cyAvLyBhYm9ydCBpZiBtb2R1bGUgbmFtZSBpc24ndCBvbiB3aGl0ZWxpc3RcbiAgICAgIH1cbiAgICAgIG1vZHVsZU5hbWUgPSBmaWxlbmFtZVxuICAgIH0gZWxzZSBpZiAoaGFzV2hpdGVsaXN0ID09PSB0cnVlICYmIG1vZHVsZXMuaW5jbHVkZXMoZmlsZW5hbWUpKSB7XG4gICAgICAvLyB3aGl0ZWxpc3QgaW5jbHVkZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgaW5jbHVkaW5nIGV4dGVuc2lvblxuICAgICAgY29uc3QgcGFyc2VkUGF0aCA9IHBhdGgucGFyc2UoZmlsZW5hbWUpXG4gICAgICBtb2R1bGVOYW1lID0gcGFyc2VkUGF0aC5uYW1lXG4gICAgICBiYXNlZGlyID0gcGFyc2VkUGF0aC5kaXJcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhdCA9IG1vZHVsZURldGFpbHNGcm9tUGF0aChmaWxlbmFtZSlcbiAgICAgIGlmIChzdGF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVidWcoJ2NvdWxkIG5vdCBwYXJzZSBmaWxlbmFtZTogJXMnLCBmaWxlbmFtZSlcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMgLy8gYWJvcnQgaWYgZmlsZW5hbWUgY291bGQgbm90IGJlIHBhcnNlZFxuICAgICAgfVxuICAgICAgbW9kdWxlTmFtZSA9IHN0YXQubmFtZVxuICAgICAgYmFzZWRpciA9IHN0YXQuYmFzZWRpclxuXG4gICAgICAvLyBFeDogcmVxdWlyZSgnZm9vL2xpYi8uLi9iYXIuanMnKVxuICAgICAgLy8gbW9kdWxlTmFtZSA9ICdmb28nXG4gICAgICAvLyBmdWxsTW9kdWxlTmFtZSA9ICdmb28vYmFyJ1xuICAgICAgY29uc3QgZnVsbE1vZHVsZU5hbWUgPSByZXNvbHZlTW9kdWxlTmFtZShzdGF0KVxuXG4gICAgICBkZWJ1ZygncmVzb2x2ZWQgZmlsZW5hbWUgdG8gbW9kdWxlOiAlcyAoaWQ6ICVzLCByZXNvbHZlZDogJXMsIGJhc2VkaXI6ICVzKScsIG1vZHVsZU5hbWUsIGlkLCBmdWxsTW9kdWxlTmFtZSwgYmFzZWRpcilcblxuICAgICAgbGV0IG1hdGNoRm91bmQgPSBmYWxzZVxuICAgICAgaWYgKGhhc1doaXRlbGlzdCkge1xuICAgICAgICBpZiAoIWlkLnN0YXJ0c1dpdGgoJy4nKSAmJiBtb2R1bGVzLmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgIC8vIE5vdCBzdGFydGluZyB3aXRoICcuJyBtZWFucyBgaWRgIGlzIGlkZW50aWZ5aW5nIGEgbW9kdWxlIHBhdGgsXG4gICAgICAgICAgLy8gYXMgb3Bwb3NlZCB0byBhIGxvY2FsIGZpbGUgcGF0aC4gKE5vdGU6IEknbSBub3Qgc3VyZSBhYm91dFxuICAgICAgICAgIC8vIGFic29sdXRlIHBhdGhzLCBidXQgdGhvc2UgYXJlIGhhbmRsZWQgYWJvdmUuKVxuICAgICAgICAgIC8vIElmIHRoaXMgYGlkYCBpcyBpbiBgbW9kdWxlc2AsIHRoZW4gdGhpcyBjb3VsZCBiZSBhIG1hdGNoIHRvIGFuXG4gICAgICAgICAgLy8gcGFja2FnZSBcImV4cG9ydHNcIiBlbnRyeSBwb2ludCB0aGF0IHdvdWxkbid0IG90aGVyd2lzZSBtYXRjaCBiZWxvdy5cbiAgICAgICAgICBtb2R1bGVOYW1lID0gaWRcbiAgICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWJvcnQgaWYgbW9kdWxlIG5hbWUgaXNuJ3Qgb24gd2hpdGVsaXN0XG4gICAgICAgIGlmICghbW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSAmJiAhbW9kdWxlcy5pbmNsdWRlcyhmdWxsTW9kdWxlTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gZXhwb3J0c1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZHVsZXMuaW5jbHVkZXMoZnVsbE1vZHVsZU5hbWUpICYmIGZ1bGxNb2R1bGVOYW1lICE9PSBtb2R1bGVOYW1lKSB7XG4gICAgICAgICAgLy8gaWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIGl0IG1lYW5zIHRoYXQgd2UncmUgcmVxdWlyaW5nIGEgd2hpdGVsaXN0ZWQgc3ViLW1vZHVsZVxuICAgICAgICAgIG1vZHVsZU5hbWUgPSBmdWxsTW9kdWxlTmFtZVxuICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFtYXRjaEZvdW5kKSB7XG4gICAgICAgIC8vIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB0aGUgbWFpbiBtb2R1bGUgZmlsZSwgb3IgYSBmaWxlIGluc2lkZSB0aGUgbW9kdWxlXG4gICAgICAgIGxldCByZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSByZXF1aXJlLnJlc29sdmUobW9kdWxlTmFtZSwgeyBwYXRoczogW2Jhc2VkaXJdIH0pXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBkZWJ1ZygnY291bGQgbm90IHJlc29sdmUgbW9kdWxlOiAlcycsIG1vZHVsZU5hbWUpXG4gICAgICAgICAgc2VsZi5fY2FjaGUuc2V0KGZpbGVuYW1lLCBleHBvcnRzLCBjb3JlKVxuICAgICAgICAgIHJldHVybiBleHBvcnRzIC8vIGFib3J0IGlmIG1vZHVsZSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgKGUuZy4gbm8gbWFpbiBpbiBwYWNrYWdlLmpzb24gYW5kIG5vIGluZGV4LmpzIGZpbGUpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzICE9PSBmaWxlbmFtZSkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgYSBtb2R1bGUtaW50ZXJuYWwgZmlsZVxuICAgICAgICAgIGlmIChpbnRlcm5hbHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIHVzZSB0aGUgbW9kdWxlLXJlbGF0aXZlIHBhdGggdG8gdGhlIGZpbGUsIHByZWZpeGVkIGJ5IG9yaWdpbmFsIG1vZHVsZSBuYW1lXG4gICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZSArIHBhdGguc2VwICsgcGF0aC5yZWxhdGl2ZShiYXNlZGlyLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIGRlYnVnKCdwcmVwYXJpbmcgdG8gcHJvY2VzcyByZXF1aXJlIG9mIGludGVybmFsIGZpbGU6ICVzJywgbW9kdWxlTmFtZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWcoJ2lnbm9yaW5nIHJlcXVpcmUgb2Ygbm9uLW1haW4gbW9kdWxlIGZpbGU6ICVzJywgcmVzKVxuICAgICAgICAgICAgc2VsZi5fY2FjaGUuc2V0KGZpbGVuYW1lLCBleHBvcnRzLCBjb3JlKVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMgLy8gYWJvcnQgaWYgbm90IG1haW4gbW9kdWxlIGZpbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgY2FjaGUgZW50cnkgaXMgYXNzaWduZWQgYSB2YWx1ZSBiZWZvcmUgY2FsbGluZ1xuICAgIC8vIG9ucmVxdWlyZSwgaW4gY2FzZSBjYWxsaW5nIG9ucmVxdWlyZSByZXF1aXJlcyB0aGUgc2FtZSBtb2R1bGUuXG4gICAgc2VsZi5fY2FjaGUuc2V0KGZpbGVuYW1lLCBleHBvcnRzLCBjb3JlKVxuICAgIGRlYnVnKCdjYWxsaW5nIHJlcXVpcmUgaG9vazogJXMnLCBtb2R1bGVOYW1lKVxuICAgIGNvbnN0IHBhdGNoZWRFeHBvcnRzID0gb25yZXF1aXJlKGV4cG9ydHMsIG1vZHVsZU5hbWUsIGJhc2VkaXIpXG4gICAgc2VsZi5fY2FjaGUuc2V0KGZpbGVuYW1lLCBwYXRjaGVkRXhwb3J0cywgY29yZSlcblxuICAgIGRlYnVnKCdyZXR1cm5pbmcgbW9kdWxlOiAlcycsIG1vZHVsZU5hbWUpXG4gICAgcmV0dXJuIHBhdGNoZWRFeHBvcnRzXG4gIH1cbn1cblxuSG9vay5wcm90b3R5cGUudW5ob29rID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl91bmhvb2tlZCA9IHRydWVcblxuICBpZiAodGhpcy5fcmVxdWlyZSA9PT0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlKSB7XG4gICAgTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlID0gdGhpcy5fb3JpZ1JlcXVpcmVcbiAgICBkZWJ1ZygncmVxdWlyZSB1bmhvb2sgc3VjY2Vzc2Z1bCcpXG4gIH0gZWxzZSB7XG4gICAgZGVidWcoJ3JlcXVpcmUgdW5ob29rIHVuc3VjY2Vzc2Z1bCcpXG4gIH1cblxuICBpZiAocHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5fZ2V0QnVpbHRpbk1vZHVsZSA9PT0gcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlKSB7XG4gICAgICBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUgPSB0aGlzLl9vcmlnR2V0QnVpbHRpbk1vZHVsZVxuICAgICAgZGVidWcoJ3Byb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSB1bmhvb2sgc3VjY2Vzc2Z1bCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUgdW5ob29rIHVuc3VjY2Vzc2Z1bCcpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2R1bGVOYW1lIChzdGF0KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5zZXAgIT09ICcvJyA/IHN0YXQucGF0aC5zcGxpdChwYXRoLnNlcCkuam9pbignLycpIDogc3RhdC5wYXRoXG4gIHJldHVybiBwYXRoLnBvc2l4LmpvaW4oc3RhdC5uYW1lLCBub3JtYWxpemVkUGF0aCkucmVwbGFjZShub3JtYWxpemUsICcnKVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vZHVsZU5hbWVUcmllID0gZXhwb3J0cy5Nb2R1bGVOYW1lU2VwYXJhdG9yID0gdm9pZCAwO1xuZXhwb3J0cy5Nb2R1bGVOYW1lU2VwYXJhdG9yID0gJy8nO1xuLyoqXG4gKiBOb2RlIGluIGEgYE1vZHVsZU5hbWVUcmllYFxuICovXG5jbGFzcyBNb2R1bGVOYW1lVHJpZU5vZGUge1xuICAgIGhvb2tzID0gW107XG4gICAgY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG59XG4vKipcbiAqIFRyaWUgY29udGFpbmluZyBub2RlcyB0aGF0IHJlcHJlc2VudCBhIHBhcnQgb2YgYSBtb2R1bGUgbmFtZSAoaS5lLiB0aGUgcGFydHMgc2VwYXJhdGVkIGJ5IGZvcndhcmQgc2xhc2gpXG4gKi9cbmNsYXNzIE1vZHVsZU5hbWVUcmllIHtcbiAgICBfdHJpZSA9IG5ldyBNb2R1bGVOYW1lVHJpZU5vZGUoKTtcbiAgICBfY291bnRlciA9IDA7XG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGEgbW9kdWxlIGhvb2sgaW50byB0aGUgdHJpZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtIb29rZWR9IGhvb2sgSG9va1xuICAgICAqL1xuICAgIGluc2VydChob29rKSB7XG4gICAgICAgIGxldCB0cmllTm9kZSA9IHRoaXMuX3RyaWU7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZVBhcnQgb2YgaG9vay5tb2R1bGVOYW1lLnNwbGl0KGV4cG9ydHMuTW9kdWxlTmFtZVNlcGFyYXRvcikpIHtcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IHRyaWVOb2RlLmNoaWxkcmVuLmdldChtb2R1bGVOYW1lUGFydCk7XG4gICAgICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXcgTW9kdWxlTmFtZVRyaWVOb2RlKCk7XG4gICAgICAgICAgICAgICAgdHJpZU5vZGUuY2hpbGRyZW4uc2V0KG1vZHVsZU5hbWVQYXJ0LCBuZXh0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmllTm9kZSA9IG5leHROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRyaWVOb2RlLmhvb2tzLnB1c2goeyBob29rLCBpbnNlcnRlZElkOiB0aGlzLl9jb3VudGVyKysgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgbWF0Y2hpbmcgaG9va3MgaW4gdGhlIHRyaWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIE1vZHVsZSBuYW1lXG4gICAgICogQHBhcmFtIHtib29sZWFufSBtYWludGFpbkluc2VydGlvbk9yZGVyIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSByZXN1bHRzIGluIGluc2VydGlvbiBvcmRlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZnVsbE9ubHkgV2hldGhlciB0byByZXR1cm4gb25seSBmdWxsIG1hdGNoZXNcbiAgICAgKiBAcmV0dXJucyB7SG9va2VkW119IE1hdGNoaW5nIGhvb2tzXG4gICAgICovXG4gICAgc2VhcmNoKG1vZHVsZU5hbWUsIHsgbWFpbnRhaW5JbnNlcnRpb25PcmRlciwgZnVsbE9ubHkgfSA9IHt9KSB7XG4gICAgICAgIGxldCB0cmllTm9kZSA9IHRoaXMuX3RyaWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgbGV0IGZvdW5kRnVsbCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZVBhcnQgb2YgbW9kdWxlTmFtZS5zcGxpdChleHBvcnRzLk1vZHVsZU5hbWVTZXBhcmF0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRyaWVOb2RlLmNoaWxkcmVuLmdldChtb2R1bGVOYW1lUGFydCk7XG4gICAgICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICAgICAgZm91bmRGdWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZ1bGxPbmx5KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLm5leHROb2RlLmhvb2tzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWVOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZ1bGxPbmx5ICYmIGZvdW5kRnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLnRyaWVOb2RlLmhvb2tzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbcmVzdWx0c1swXS5ob29rXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFpbnRhaW5JbnNlcnRpb25PcmRlcikge1xuICAgICAgICAgICAgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBhLmluc2VydGVkSWQgLSBiLmluc2VydGVkSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgoeyBob29rIH0pID0+IGhvb2spO1xuICAgIH1cbn1cbmV4cG9ydHMuTW9kdWxlTmFtZVRyaWUgPSBNb2R1bGVOYW1lVHJpZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1vZHVsZU5hbWVUcmllLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24gPSB2b2lkIDA7XG5jb25zdCByZXF1aXJlX2luX3RoZV9taWRkbGVfMSA9IHJlcXVpcmUoXCJyZXF1aXJlLWluLXRoZS1taWRkbGVcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBNb2R1bGVOYW1lVHJpZV8xID0gcmVxdWlyZShcIi4vTW9kdWxlTmFtZVRyaWVcIik7XG4vKipcbiAqIFdoZXRoZXIgTW9jaGEgaXMgcnVubmluZyBpbiB0aGlzIHByb2Nlc3NcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9BbmRyZWFzUGl6c2EvZGV0ZWN0LW1vY2hhXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzTW9jaGEgPSBbXG4gICAgJ2FmdGVyRWFjaCcsXG4gICAgJ2FmdGVyJyxcbiAgICAnYmVmb3JlRWFjaCcsXG4gICAgJ2JlZm9yZScsXG4gICAgJ2Rlc2NyaWJlJyxcbiAgICAnaXQnLFxuXS5ldmVyeShmbiA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUUzcwNTM6IEVsZW1lbnQgaW1wbGljaXRseSBoYXMgYW4gJ2FueScgdHlwZVxuICAgIHJldHVybiB0eXBlb2YgZ2xvYmFsW2ZuXSA9PT0gJ2Z1bmN0aW9uJztcbn0pO1xuLyoqXG4gKiBTaW5nbGV0b24gY2xhc3MgZm9yIGByZXF1aXJlLWluLXRoZS1taWRkbGVgXG4gKiBBbGxvd3MgaW5zdHJ1bWVudGF0aW9uIHBsdWdpbnMgdG8gcGF0Y2ggbW9kdWxlcyB3aXRoIG9ubHkgYSBzaW5nbGUgYHJlcXVpcmVgIHBhdGNoXG4gKiBXQVJOSU5HOiBCZWNhdXNlIHRoaXMgY2xhc3Mgd2lsbCBjcmVhdGUgaXRzIG93biBgcmVxdWlyZS1pbi10aGUtbWlkZGxlYCAoUklUTSkgaW5zdGFuY2UsXG4gKiB3ZSBzaG91bGQgbWluaW1pemUgdGhlIG51bWJlciBvZiBuZXcgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuXG4gKiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgYEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbmAgKGUuZy4gbXVsdGlwbGUgdmVyc2lvbnMpIGluIGEgc2luZ2xlIHByb2Nlc3NcbiAqIHdpbGwgcmVzdWx0IGluIG11bHRpcGxlIGluc3RhbmNlcyBvZiBSSVRNLCB3aGljaCB3aWxsIGhhdmUgYW4gaW1wYWN0XG4gKiBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgaW5zdHJ1bWVudGF0aW9uIGhvb2tzIGJlaW5nIGFwcGxpZWQuXG4gKi9cbmNsYXNzIFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbiB7XG4gICAgX21vZHVsZU5hbWVUcmllID0gbmV3IE1vZHVsZU5hbWVUcmllXzEuTW9kdWxlTmFtZVRyaWUoKTtcbiAgICBzdGF0aWMgX2luc3RhbmNlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplKCk7XG4gICAgfVxuICAgIF9pbml0aWFsaXplKCkge1xuICAgICAgICBuZXcgcmVxdWlyZV9pbl90aGVfbWlkZGxlXzEuSG9vayhcbiAgICAgICAgLy8gSW50ZXJjZXB0IGFsbCBgcmVxdWlyZWAgY2FsbHM7IHdlIHdpbGwgZmlsdGVyIHRoZSBtYXRjaGluZyBvbmVzIGJlbG93XG4gICAgICAgIG51bGwsIHsgaW50ZXJuYWxzOiB0cnVlIH0sIChleHBvcnRzLCBuYW1lLCBiYXNlZGlyKSA9PiB7XG4gICAgICAgICAgICAvLyBGb3IgaW50ZXJuYWwgZmlsZXMgb24gV2luZG93cywgYG5hbWVgIHdpbGwgdXNlIGJhY2tzbGFzaCBhcyB0aGUgcGF0aCBzZXBhcmF0b3JcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRNb2R1bGVOYW1lID0gbm9ybWFsaXplUGF0aFNlcGFyYXRvcnMobmFtZSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5fbW9kdWxlTmFtZVRyaWUuc2VhcmNoKG5vcm1hbGl6ZWRNb2R1bGVOYW1lLCB7XG4gICAgICAgICAgICAgICAgbWFpbnRhaW5JbnNlcnRpb25PcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAvLyBGb3IgY29yZSBtb2R1bGVzIChlLmcuIGBmc2ApLCBkbyBub3QgbWF0Y2ggb24gc3ViLXBhdGhzIChlLmcuIGBmcy9wcm9taXNlcycpLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgYHJlcXVpcmUtaW4tdGhlLW1pZGRsZWAuXG4gICAgICAgICAgICAgICAgLy8gYGJhc2VkaXJgIGlzIGFsd2F5cyBgdW5kZWZpbmVkYCBmb3IgY29yZSBtb2R1bGVzLlxuICAgICAgICAgICAgICAgIGZ1bGxPbmx5OiBiYXNlZGlyID09PSB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBvblJlcXVpcmUgfSBvZiBtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgZXhwb3J0cyA9IG9uUmVxdWlyZShleHBvcnRzLCBuYW1lLCBiYXNlZGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBob29rIHdpdGggYHJlcXVpcmUtaW4tdGhlLW1pZGRsZWBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIE1vZHVsZSBuYW1lXG4gICAgICogQHBhcmFtIHtPblJlcXVpcmVGbn0gb25SZXF1aXJlIEhvb2sgZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7SG9va2VkfSBSZWdpc3RlcmVkIGhvb2tcbiAgICAgKi9cbiAgICByZWdpc3Rlcihtb2R1bGVOYW1lLCBvblJlcXVpcmUpIHtcbiAgICAgICAgY29uc3QgaG9va2VkID0geyBtb2R1bGVOYW1lLCBvblJlcXVpcmUgfTtcbiAgICAgICAgdGhpcy5fbW9kdWxlTmFtZVRyaWUuaW5zZXJ0KGhvb2tlZCk7XG4gICAgICAgIHJldHVybiBob29rZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbmAgc2luZ2xldG9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7UmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9ufSBTaW5nbGV0b24gb2YgYFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbmBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIC8vIE1vY2hhIHJ1bnMgYWxsIHRlc3Qgc3VpdGVzIGluIHRoZSBzYW1lIHByb2Nlc3NcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0ZXN0IHN1aXRlcyBmcm9tIHNoYXJpbmcgYSBzaW5nbGV0b25cbiAgICAgICAgaWYgKGlzTW9jaGEpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbigpO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2luc3RhbmNlID1cbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID8/IG5ldyBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24oKSk7XG4gICAgfVxufVxuZXhwb3J0cy5SZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24gPSBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b247XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgcGF0aCBzZXBhcmF0b3JzIHRvIGZvcndhcmQgc2xhc2ggaW4gYSBtb2R1bGUgbmFtZSBvciBwYXRoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWVPclBhdGggTW9kdWxlIG5hbWUgb3IgcGF0aFxuICogQHJldHVybnMge3N0cmluZ30gTm9ybWFsaXplZCBtb2R1bGUgbmFtZSBvciBwYXRoXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGhTZXBhcmF0b3JzKG1vZHVsZU5hbWVPclBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5zZXAgIT09IE1vZHVsZU5hbWVUcmllXzEuTW9kdWxlTmFtZVNlcGFyYXRvclxuICAgICAgICA/IG1vZHVsZU5hbWVPclBhdGguc3BsaXQocGF0aC5zZXApLmpvaW4oTW9kdWxlTmFtZVRyaWVfMS5Nb2R1bGVOYW1lU2VwYXJhdG9yKVxuICAgICAgICA6IG1vZHVsZU5hbWVPclBhdGg7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24uanMubWFwIiwKICAgICIvLyBVbmxlc3MgZXhwbGljaXRseSBzdGF0ZWQgb3RoZXJ3aXNlIGFsbCBmaWxlcyBpbiB0aGlzIHJlcG9zaXRvcnkgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG4vL1xuLy8gVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBEYXRhZG9nIChodHRwczovL3d3dy5kYXRhZG9naHEuY29tLykuIENvcHlyaWdodCAyMDIxIERhdGFkb2csIEluYy5cblxuY29uc3QgaW1wb3J0SG9va3MgPSBbXSAvLyBUT0RPIHNob3VsZCB0aGlzIGJlIGEgU2V0P1xuY29uc3Qgc2V0dGVycyA9IG5ldyBXZWFrTWFwKClcbmNvbnN0IGdldHRlcnMgPSBuZXcgV2Vha01hcCgpXG5jb25zdCBzcGVjaWZpZXJzID0gbmV3IE1hcCgpXG5jb25zdCB0b0hvb2sgPSBbXVxuXG5jb25zdCBwcm94eUhhbmRsZXIgPSB7XG4gIHNldCAodGFyZ2V0LCBuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBzZXR0ZXJzLmdldCh0YXJnZXQpW25hbWVdKHZhbHVlKVxuICB9LFxuXG4gIGdldCAodGFyZ2V0LCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09IFN5bWJvbC50b1N0cmluZ1RhZykge1xuICAgICAgcmV0dXJuICdNb2R1bGUnXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0dGVyID0gZ2V0dGVycy5nZXQodGFyZ2V0KVtuYW1lXVxuXG4gICAgaWYgKHR5cGVvZiBnZXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBnZXR0ZXIoKVxuICAgIH1cbiAgfSxcblxuICBkZWZpbmVQcm9wZXJ0eSAodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikge1xuICAgIGlmICgoISgndmFsdWUnIGluIGRlc2NyaXB0b3IpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHZXR0ZXJzL3NldHRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGV4cG9ydHMgcHJvcGVydHkgZGVzY3JpcHRvcnMuJylcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGVycy5nZXQodGFyZ2V0KVtwcm9wZXJ0eV0oZGVzY3JpcHRvci52YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3RlciAobmFtZSwgbmFtZXNwYWNlLCBzZXQsIGdldCwgc3BlY2lmaWVyKSB7XG4gIHNwZWNpZmllcnMuc2V0KG5hbWUsIHNwZWNpZmllcilcbiAgc2V0dGVycy5zZXQobmFtZXNwYWNlLCBzZXQpXG4gIGdldHRlcnMuc2V0KG5hbWVzcGFjZSwgZ2V0KVxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShuYW1lc3BhY2UsIHByb3h5SGFuZGxlcilcbiAgaW1wb3J0SG9va3MuZm9yRWFjaChob29rID0+IGhvb2sobmFtZSwgcHJveHksIHNwZWNpZmllcikpXG4gIHRvSG9vay5wdXNoKFtuYW1lLCBwcm94eSwgc3BlY2lmaWVyXSlcbn1cblxubGV0IGV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzID0gZmFsc2VcblxuZnVuY3Rpb24gZ2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMgKCkge1xuICByZXR1cm4gZXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHNcbn1cblxuZnVuY3Rpb24gc2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMgKHZhbHVlKSB7XG4gIGV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzID0gdmFsdWVcbn1cblxuZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyXG5leHBvcnRzLmltcG9ydEhvb2tzID0gaW1wb3J0SG9va3NcbmV4cG9ydHMuc3BlY2lmaWVycyA9IHNwZWNpZmllcnNcbmV4cG9ydHMudG9Ib29rID0gdG9Ib29rXG5leHBvcnRzLmdldEV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzID0gZ2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHNcbmV4cG9ydHMuc2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMgPSBzZXRFeHBlcmltZW50YWxQYXRjaEludGVybmFsc1xuIiwKICAgICIvLyBVbmxlc3MgZXhwbGljaXRseSBzdGF0ZWQgb3RoZXJ3aXNlIGFsbCBmaWxlcyBpbiB0aGlzIHJlcG9zaXRvcnkgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG4vL1xuLy8gVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBEYXRhZG9nIChodHRwczovL3d3dy5kYXRhZG9naHEuY29tLykuIENvcHlyaWdodCAyMDIxIERhdGFkb2csIEluYy5cblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCdtb2R1bGUtZGV0YWlscy1mcm9tLXBhdGgnKVxuY29uc3QgeyBmaWxlVVJMVG9QYXRoIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG5jb25zdCB7XG4gIGltcG9ydEhvb2tzLFxuICBzcGVjaWZpZXJzLFxuICB0b0hvb2ssXG4gIGdldEV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzXG59ID0gcmVxdWlyZSgnLi9saWIvcmVnaXN0ZXInKVxuXG5mdW5jdGlvbiBhZGRIb29rIChob29rKSB7XG4gIGltcG9ydEhvb2tzLnB1c2goaG9vaylcbiAgdG9Ib29rLmZvckVhY2goKFtuYW1lLCBuYW1lc3BhY2UsIHNwZWNpZmllcl0pID0+IGhvb2sobmFtZSwgbmFtZXNwYWNlLCBzcGVjaWZpZXIpKVxufVxuXG5mdW5jdGlvbiByZW1vdmVIb29rIChob29rKSB7XG4gIGNvbnN0IGluZGV4ID0gaW1wb3J0SG9va3MuaW5kZXhPZihob29rKVxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGltcG9ydEhvb2tzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsSG9va0ZuIChob29rRm4sIG5hbWVzcGFjZSwgbmFtZSwgYmFzZURpcikge1xuICBjb25zdCBuZXdEZWZhdWx0ID0gaG9va0ZuKG5hbWVzcGFjZSwgbmFtZSwgYmFzZURpcilcbiAgaWYgKG5ld0RlZmF1bHQgJiYgbmV3RGVmYXVsdCAhPT0gbmFtZXNwYWNlKSB7XG4gICAgbmFtZXNwYWNlLmRlZmF1bHQgPSBuZXdEZWZhdWx0XG4gIH1cbn1cblxubGV0IHNlbmRNb2R1bGVzVG9Mb2FkZXJcblxuLyoqXG4gKiBFWFBFUklNRU5UQUxcbiAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgaW4gbWlub3IgdmVyc2lvbnMuXG4gKiAqKk5PVEUqKiBUaGlzIGZlYXR1cmUgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHtpbnRlcm5hbHM6IHRydWV9IEhvb2sgb3B0aW9uLlxuICpcbiAqIENyZWF0ZXMgYSBtZXNzYWdlIGNoYW5uZWwgd2l0aCBhIHBvcnQgdGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgaG9va3MgdG8gdGhlXG4gKiBsaXN0IG9mIGV4Y2x1c2l2ZWx5IGluY2x1ZGVkIG1vZHVsZXMuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBvbmx5IHdyYXAgbW9kdWxlcyB0aGF0IGFyZSBIb29rJ2VkLCBob3dldmVyIG1vZHVsZXMgbmVlZFxuICogdG8gYmUgaG9va2VkIGJlZm9yZSB0aGV5IGFyZSBpbXBvcnRlZC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICdtb2R1bGUnXG4gKiBpbXBvcnQgeyBIb29rLCBjcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWwgfSBmcm9tICdpbXBvcnQtaW4tdGhlLW1pZGRsZSdcbiAqXG4gKiBjb25zdCB7IHJlZ2lzdGVyT3B0aW9ucywgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkIH0gPSBjcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWwoKVxuICpcbiAqIHJlZ2lzdGVyKCdpbXBvcnQtaW4tdGhlLW1pZGRsZS9ob29rLm1qcycsIGltcG9ydC5tZXRhLnVybCwgcmVnaXN0ZXJPcHRpb25zKVxuICpcbiAqIEhvb2soWydmcyddLCAoZXhwb3J0ZWQsIG5hbWUsIGJhc2VEaXIpID0+IHtcbiAqICAgLy8gSW5zdHJ1bWVudCB0aGUgZnMgbW9kdWxlXG4gKiB9KVxuICpcbiAqIC8vIEVuc3VyZSB0aGF0IHRoZSBsb2FkZXIgaGFzIGFja25vd2xlZGdlZCBhbGwgdGhlIG1vZHVsZXNcbiAqIC8vIGJlZm9yZSB3ZSBhbGxvdyBleGVjdXRpb24gdG8gY29udGludWVcbiAqIGF3YWl0IHdhaXRGb3JBbGxNZXNzYWdlc0Fja25vd2xlZGdlZCgpXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWRkSG9va01lc3NhZ2VDaGFubmVsICgpIHtcbiAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gIGxldCBwZW5kaW5nQWNrQ291bnQgPSAwXG4gIGxldCByZXNvbHZlRm5cblxuICBzZW5kTW9kdWxlc1RvTG9hZGVyID0gKG1vZHVsZXMpID0+IHtcbiAgICBwZW5kaW5nQWNrQ291bnQrK1xuICAgIHBvcnQxLnBvc3RNZXNzYWdlKG1vZHVsZXMpXG4gIH1cblxuICBwb3J0MS5vbignbWVzc2FnZScsICgpID0+IHtcbiAgICBwZW5kaW5nQWNrQ291bnQtLVxuXG4gICAgaWYgKHJlc29sdmVGbiAmJiBwZW5kaW5nQWNrQ291bnQgPD0gMCkge1xuICAgICAgcmVzb2x2ZUZuKClcbiAgICB9XG4gIH0pLnVucmVmKClcblxuICBmdW5jdGlvbiB3YWl0Rm9yQWxsTWVzc2FnZXNBY2tub3dsZWRnZWQgKCkge1xuICAgIC8vIFRoaXMgdGltZXIgaXMgdG8gcHJldmVudCB0aGUgcHJvY2VzcyBmcm9tIGV4aXRpbmcgd2l0aCBjb2RlIDEzOlxuICAgIC8vIDEzOiBVbnNldHRsZWQgVG9wLUxldmVsIEF3YWl0LlxuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4geyB9LCAxMDAwKVxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgcmVzb2x2ZUZuID0gcmVzb2x2ZVxuICAgIH0pLnRoZW4oKCkgPT4geyBjbGVhckludGVydmFsKHRpbWVyKSB9KVxuXG4gICAgaWYgKHBlbmRpbmdBY2tDb3VudCA9PT0gMCkge1xuICAgICAgcmVzb2x2ZUZuKClcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgY29uc3QgYWRkSG9va01lc3NhZ2VQb3J0ID0gcG9ydDJcbiAgY29uc3QgcmVnaXN0ZXJPcHRpb25zID0geyBkYXRhOiB7IGFkZEhvb2tNZXNzYWdlUG9ydCwgaW5jbHVkZTogW10gfSwgdHJhbnNmZXJMaXN0OiBbYWRkSG9va01lc3NhZ2VQb3J0XSB9XG5cbiAgcmV0dXJuIHsgcmVnaXN0ZXJPcHRpb25zLCBhZGRIb29rTWVzc2FnZVBvcnQsIHdhaXRGb3JBbGxNZXNzYWdlc0Fja25vd2xlZGdlZCB9XG59XG5cbmZ1bmN0aW9uIEhvb2sgKG1vZHVsZXMsIG9wdGlvbnMsIGhvb2tGbikge1xuICBpZiAoKHRoaXMgaW5zdGFuY2VvZiBIb29rKSA9PT0gZmFsc2UpIHJldHVybiBuZXcgSG9vayhtb2R1bGVzLCBvcHRpb25zLCBob29rRm4pXG4gIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGhvb2tGbiA9IG1vZHVsZXNcbiAgICBtb2R1bGVzID0gbnVsbFxuICAgIG9wdGlvbnMgPSBudWxsXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBob29rRm4gPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG51bGxcbiAgfVxuICBjb25zdCBpbnRlcm5hbHMgPSBvcHRpb25zID8gb3B0aW9ucy5pbnRlcm5hbHMgPT09IHRydWUgOiBmYWxzZVxuXG4gIGlmIChzZW5kTW9kdWxlc1RvTG9hZGVyICYmIEFycmF5LmlzQXJyYXkobW9kdWxlcykpIHtcbiAgICBzZW5kTW9kdWxlc1RvTG9hZGVyKG1vZHVsZXMpXG4gIH1cblxuICB0aGlzLl9paXRtSG9vayA9IChuYW1lLCBuYW1lc3BhY2UsIHNwZWNpZmllcikgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gbmFtZVxuICAgIGNvbnN0IGlzQnVpbHRpbiA9IG5hbWUuc3RhcnRzV2l0aCgnbm9kZTonKVxuICAgIGxldCBiYXNlRGlyXG5cbiAgICBpZiAoaXNCdWlsdGluKSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmFtZSA9IGZpbGVVUkxUb1BhdGgobmFtZSlcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IGRldGFpbHMgPSBwYXJzZShuYW1lKVxuICAgICAgaWYgKGRldGFpbHMpIHtcbiAgICAgICAgbmFtZSA9IGRldGFpbHMubmFtZVxuICAgICAgICBiYXNlRGlyID0gZGV0YWlscy5iYXNlZGlyXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZHVsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgIGlmIChtb2R1bGVOYW1lID09PSBzcGVjaWZpZXIpIHtcbiAgICAgICAgICBjYWxsSG9va0ZuKGhvb2tGbiwgbmFtZXNwYWNlLCBuYW1lLCBiYXNlRGlyKVxuICAgICAgICB9IGVsc2UgaWYgKG1vZHVsZU5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICBpZiAoYmFzZURpcikge1xuICAgICAgICAgICAgaWYgKGludGVybmFscykge1xuICAgICAgICAgICAgICBuYW1lID0gbmFtZSArIHBhdGguc2VwICsgcGF0aC5yZWxhdGl2ZShiYXNlRGlyLCBmaWxlVVJMVG9QYXRoKGZpbGVuYW1lKSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghZ2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMoKSAmJiAhYmFzZURpci5lbmRzV2l0aChzcGVjaWZpZXJzLmdldChmaWxlbmFtZSkpKSBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsSG9va0ZuKGhvb2tGbiwgbmFtZXNwYWNlLCBuYW1lLCBiYXNlRGlyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxIb29rRm4oaG9va0ZuLCBuYW1lc3BhY2UsIG5hbWUsIGJhc2VEaXIpXG4gICAgfVxuICB9XG5cbiAgYWRkSG9vayh0aGlzLl9paXRtSG9vaylcbn1cblxuSG9vay5wcm90b3R5cGUudW5ob29rID0gZnVuY3Rpb24gKCkge1xuICByZW1vdmVIb29rKHRoaXMuX2lpdG1Ib29rKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhvb2tcbm1vZHVsZS5leHBvcnRzLkhvb2sgPSBIb29rXG5tb2R1bGUuZXhwb3J0cy5hZGRIb29rID0gYWRkSG9va1xubW9kdWxlLmV4cG9ydHMucmVtb3ZlSG9vayA9IHJlbW92ZUhvb2tcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCA9IGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbFxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzV3JhcHBlZCA9IGV4cG9ydHMuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jID0gZXhwb3J0cy5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlID0gdm9pZCAwO1xuLyoqXG4gKiBmdW5jdGlvbiB0byBleGVjdXRlIHBhdGNoZWQgZnVuY3Rpb24gYW5kIGJlaW5nIGFibGUgdG8gY2F0Y2ggZXJyb3JzXG4gKiBAcGFyYW0gZXhlY3V0ZSAtIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcGFyYW0gb25GaW5pc2ggLSBjYWxsYmFjayB0byBydW4gd2hlbiBleGVjdXRlIGZpbmlzaGVzXG4gKi9cbmZ1bmN0aW9uIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoZXhlY3V0ZSwgb25GaW5pc2gsIHByZXZlbnRUaHJvd2luZ0Vycm9yKSB7XG4gICAgbGV0IGVycm9yO1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZXhlY3V0ZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvciA9IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBvbkZpbmlzaChlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgaWYgKGVycm9yICYmICFwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUgPSBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlO1xuLyoqXG4gKiBBc3luYyBmdW5jdGlvbiB0byBleGVjdXRlIHBhdGNoZWQgZnVuY3Rpb24gYW5kIGJlaW5nIGFibGUgdG8gY2F0Y2ggZXJyb3JzXG4gKiBAcGFyYW0gZXhlY3V0ZSAtIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcGFyYW0gb25GaW5pc2ggLSBjYWxsYmFjayB0byBydW4gd2hlbiBleGVjdXRlIGZpbmlzaGVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGVBc3luYyhleGVjdXRlLCBvbkZpbmlzaCwgcHJldmVudFRocm93aW5nRXJyb3IpIHtcbiAgICBsZXQgZXJyb3I7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBleGVjdXRlKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGVycm9yID0gZTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIG9uRmluaXNoKGVycm9yLCByZXN1bHQpO1xuICAgICAgICBpZiAoZXJyb3IgJiYgIXByZXZlbnRUaHJvd2luZ0Vycm9yKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtZmluYWxseVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbmV4cG9ydHMuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jO1xuLyoqXG4gKiBDaGVja3MgaWYgY2VydGFpbiBmdW5jdGlvbiBoYXMgYmVlbiBhbHJlYWR5IHdyYXBwZWRcbiAqIEBwYXJhbSBmdW5jXG4gKi9cbmZ1bmN0aW9uIGlzV3JhcHBlZChmdW5jKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgZnVuYy5fX29yaWdpbmFsID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiBmdW5jLl9fdW53cmFwID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIGZ1bmMuX193cmFwcGVkID09PSB0cnVlKTtcbn1cbmV4cG9ydHMuaXNXcmFwcGVkID0gaXNXcmFwcGVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbkJhc2UgPSB2b2lkIDA7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IHNlbXZlcl8xID0gcmVxdWlyZShcIi4uLy4uL3NlbXZlclwiKTtcbmNvbnN0IHNoaW1tZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zaGltbWVyXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi4vLi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3QgUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uXzEgPSByZXF1aXJlKFwiLi9SZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b25cIik7XG5jb25zdCBpbXBvcnRfaW5fdGhlX21pZGRsZV8xID0gcmVxdWlyZShcImltcG9ydC1pbi10aGUtbWlkZGxlXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgcmVxdWlyZV9pbl90aGVfbWlkZGxlXzEgPSByZXF1aXJlKFwicmVxdWlyZS1pbi10aGUtbWlkZGxlXCIpO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgY2xhc3MgZm9yIGluc3RydW1lbnRpbmcgbm9kZSBwbHVnaW5zXG4gKi9cbmNsYXNzIEluc3RydW1lbnRhdGlvbkJhc2UgZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25BYnN0cmFjdCB7XG4gICAgX21vZHVsZXM7XG4gICAgX2hvb2tzID0gW107XG4gICAgX3JlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbiA9IFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbl8xLlJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbi5nZXRJbnN0YW5jZSgpO1xuICAgIF9lbmFibGVkID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoaW5zdHJ1bWVudGF0aW9uTmFtZSwgaW5zdHJ1bWVudGF0aW9uVmVyc2lvbiwgY29uZmlnKSB7XG4gICAgICAgIHN1cGVyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24sIGNvbmZpZyk7XG4gICAgICAgIGxldCBtb2R1bGVzID0gdGhpcy5pbml0KCk7XG4gICAgICAgIGlmIChtb2R1bGVzICYmICFBcnJheS5pc0FycmF5KG1vZHVsZXMpKSB7XG4gICAgICAgICAgICBtb2R1bGVzID0gW21vZHVsZXNdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vZHVsZXMgPSBtb2R1bGVzIHx8IFtdO1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3dyYXAgPSAobW9kdWxlRXhwb3J0cywgbmFtZSwgd3JhcHBlcikgPT4ge1xuICAgICAgICBpZiAoKDAsIHV0aWxzXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzW25hbWVdKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXRpbF8xLnR5cGVzLmlzUHJveHkobW9kdWxlRXhwb3J0cykpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgc2hpbW1lcl8xLndyYXApKG1vZHVsZUV4cG9ydHMsIG5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZCA9ICgwLCBzaGltbWVyXzEud3JhcCkoT2JqZWN0LmFzc2lnbih7fSwgbW9kdWxlRXhwb3J0cyksIG5hbWUsIHdyYXBwZXIpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZUV4cG9ydHMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogd3JhcHBlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF91bndyYXAgPSAobW9kdWxlRXhwb3J0cywgbmFtZSkgPT4ge1xuICAgICAgICBpZiAoIXV0aWxfMS50eXBlcy5pc1Byb3h5KG1vZHVsZUV4cG9ydHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHNoaW1tZXJfMS51bndyYXApKG1vZHVsZUV4cG9ydHMsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGVFeHBvcnRzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG1vZHVsZUV4cG9ydHNbbmFtZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX21hc3NXcmFwID0gKG1vZHVsZUV4cG9ydHNBcnJheSwgbmFtZXMsIHdyYXBwZXIpID0+IHtcbiAgICAgICAgaWYgKCFtb2R1bGVFeHBvcnRzQXJyYXkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBtb2R1bGVzIHRvIHBhdGNoJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobW9kdWxlRXhwb3J0c0FycmF5KSkge1xuICAgICAgICAgICAgbW9kdWxlRXhwb3J0c0FycmF5ID0gW21vZHVsZUV4cG9ydHNBcnJheV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEobmFtZXMgJiYgQXJyYXkuaXNBcnJheShuYW1lcykpKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgZnVuY3Rpb25zIHRvIHdyYXAgb24gbW9kdWxlcycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1vZHVsZUV4cG9ydHNBcnJheS5mb3JFYWNoKG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgbmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsIG5hbWUsIHdyYXBwZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgX21hc3NVbndyYXAgPSAobW9kdWxlRXhwb3J0c0FycmF5LCBuYW1lcykgPT4ge1xuICAgICAgICBpZiAoIW1vZHVsZUV4cG9ydHNBcnJheSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIG1vZHVsZXMgdG8gcGF0Y2gnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghQXJyYXkuaXNBcnJheShtb2R1bGVFeHBvcnRzQXJyYXkpKSB7XG4gICAgICAgICAgICBtb2R1bGVFeHBvcnRzQXJyYXkgPSBbbW9kdWxlRXhwb3J0c0FycmF5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShuYW1lcyAmJiBBcnJheS5pc0FycmF5KG5hbWVzKSkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBmdW5jdGlvbnMgdG8gd3JhcCBvbiBtb2R1bGVzJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbW9kdWxlRXhwb3J0c0FycmF5LmZvckVhY2gobW9kdWxlRXhwb3J0cyA9PiB7XG4gICAgICAgICAgICBuYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCBuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIF93YXJuT25QcmVsb2FkZWRNb2R1bGVzKCkge1xuICAgICAgICB0aGlzLl9tb2R1bGVzLmZvckVhY2goKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lIH0gPSBtb2R1bGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlLmNhY2hlW3Jlc29sdmVkTW9kdWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBNb2R1bGUgaXMgYWxyZWFkeSBjYWNoZWQsIHdoaWNoIG1lYW5zIHRoZSBpbnN0cnVtZW50YXRpb24gaG9vayBtaWdodCBub3Qgd29ya1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLndhcm4oYE1vZHVsZSAke25hbWV9IGhhcyBiZWVuIGxvYWRlZCBiZWZvcmUgJHt0aGlzLmluc3RydW1lbnRhdGlvbk5hbWV9IHNvIGl0IG1pZ2h0IG5vdCB3b3JrLCBwbGVhc2UgaW5pdGlhbGl6ZSBpdCBiZWZvcmUgcmVxdWlyaW5nICR7bmFtZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gTW9kdWxlIGlzbid0IGF2YWlsYWJsZSwgd2UgY2FuIHNpbXBseSBza2lwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZXh0cmFjdFBhY2thZ2VWZXJzaW9uKGJhc2VEaXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSAoMCwgZnNfMS5yZWFkRmlsZVN5bmMpKHBhdGguam9pbihiYXNlRGlyLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gSlNPTi5wYXJzZShqc29uKS52ZXJzaW9uO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJyA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdGYWlsZWQgZXh0cmFjdGluZyB2ZXJzaW9uJywgYmFzZURpcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX29uUmVxdWlyZShtb2R1bGUsIGV4cG9ydHMsIG5hbWUsIGJhc2VEaXIpIHtcbiAgICAgICAgaWYgKCFiYXNlRGlyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5wYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIG1vZHVsZS5tb2R1bGVFeHBvcnRzID0gZXhwb3J0cztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdBcHBseWluZyBpbnN0cnVtZW50YXRpb24gcGF0Y2ggZm9yIG5vZGVqcyBjb3JlIG1vZHVsZSBvbiByZXF1aXJlIGhvb2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IG1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5wYXRjaChleHBvcnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5fZXh0cmFjdFBhY2thZ2VWZXJzaW9uKGJhc2VEaXIpO1xuICAgICAgICBtb2R1bGUubW9kdWxlVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIGlmIChtb2R1bGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgLy8gbWFpbiBtb2R1bGVcbiAgICAgICAgICAgIGlmIChpc1N1cHBvcnRlZChtb2R1bGUuc3VwcG9ydGVkVmVyc2lvbnMsIHZlcnNpb24sIG1vZHVsZS5pbmNsdWRlUHJlcmVsZWFzZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5wYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUubW9kdWxlRXhwb3J0cyA9IGV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdBcHBseWluZyBpbnN0cnVtZW50YXRpb24gcGF0Y2ggZm9yIG1vZHVsZSBvbiByZXF1aXJlIGhvb2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBtb2R1bGUubW9kdWxlVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLnBhdGNoKGV4cG9ydHMsIG1vZHVsZS5tb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGludGVybmFsIGZpbGVcbiAgICAgICAgY29uc3QgZmlsZXMgPSBtb2R1bGUuZmlsZXMgPz8gW107XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gcGF0aC5ub3JtYWxpemUobmFtZSk7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZEZpbGVJbnN0cnVtZW50YXRpb25zID0gZmlsZXNcbiAgICAgICAgICAgIC5maWx0ZXIoZiA9PiBmLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKVxuICAgICAgICAgICAgLmZpbHRlcihmID0+IGlzU3VwcG9ydGVkKGYuc3VwcG9ydGVkVmVyc2lvbnMsIHZlcnNpb24sIG1vZHVsZS5pbmNsdWRlUHJlcmVsZWFzZSkpO1xuICAgICAgICByZXR1cm4gc3VwcG9ydGVkRmlsZUluc3RydW1lbnRhdGlvbnMucmVkdWNlKChwYXRjaGVkRXhwb3J0cywgZmlsZSkgPT4ge1xuICAgICAgICAgICAgZmlsZS5tb2R1bGVFeHBvcnRzID0gcGF0Y2hlZEV4cG9ydHM7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ0FwcGx5aW5nIGluc3RydW1lbnRhdGlvbiBwYXRjaCBmb3Igbm9kZWpzIG1vZHVsZSBmaWxlIG9uIHJlcXVpcmUgaG9vaycsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbW9kdWxlLm1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VEaXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggc2lnbmF0dXJlIGlzIG5vdCB0eXBlZCwgc28gd2UgY2FzdCBpdCBhc3N1bWluZyBpdCdzIGNvcnJlY3RcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS5wYXRjaChwYXRjaGVkRXhwb3J0cywgbW9kdWxlLm1vZHVsZVZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhdGNoZWRFeHBvcnRzO1xuICAgICAgICB9LCBleHBvcnRzKTtcbiAgICB9XG4gICAgZW5hYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAvLyBhbHJlYWR5IGhvb2tlZCwganVzdCBjYWxsIHBhdGNoIGFnYWluXG4gICAgICAgIGlmICh0aGlzLl9ob29rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiB0aGlzLl9tb2R1bGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUucGF0Y2ggPT09ICdmdW5jdGlvbicgJiYgbW9kdWxlLm1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnQXBwbHlpbmcgaW5zdHJ1bWVudGF0aW9uIHBhdGNoIGZvciBub2RlanMgbW9kdWxlIG9uIGluc3RydW1lbnRhdGlvbiBlbmFibGVkJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246IG1vZHVsZS5tb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLnBhdGNoKG1vZHVsZS5tb2R1bGVFeHBvcnRzLCBtb2R1bGUubW9kdWxlVmVyc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtb2R1bGUuZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUubW9kdWxlRXhwb3J0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnQXBwbHlpbmcgaW5zdHJ1bWVudGF0aW9uIHBhdGNoIGZvciBub2RlanMgbW9kdWxlIGZpbGUgb24gaW5zdHJ1bWVudGF0aW9uIGVuYWJsZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBtb2R1bGUubW9kdWxlVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnBhdGNoKGZpbGUubW9kdWxlRXhwb3J0cywgbW9kdWxlLm1vZHVsZVZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dhcm5PblByZWxvYWRlZE1vZHVsZXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgdGhpcy5fbW9kdWxlcykge1xuICAgICAgICAgICAgY29uc3QgaG9va0ZuID0gKGV4cG9ydHMsIG5hbWUsIGJhc2VEaXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2VEaXIgJiYgcGF0aC5pc0Fic29sdXRlKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFBhdGggPSBwYXRoLnBhcnNlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGFyc2VkUGF0aC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBiYXNlRGlyID0gcGFyc2VkUGF0aC5kaXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vblJlcXVpcmUobW9kdWxlLCBleHBvcnRzLCBuYW1lLCBiYXNlRGlyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvblJlcXVpcmUgPSAoZXhwb3J0cywgbmFtZSwgYmFzZURpcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vblJlcXVpcmUobW9kdWxlLCBleHBvcnRzLCBuYW1lLCBiYXNlRGlyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBgUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uYCBkb2VzIG5vdCBzdXBwb3J0IGFic29sdXRlIHBhdGhzLlxuICAgICAgICAgICAgLy8gRm9yIGFuIGFic29sdXRlIHBhdGhzLCB3ZSBtdXN0IGNyZWF0ZSBhIHNlcGFyYXRlIGluc3RhbmNlIG9mIHRoZVxuICAgICAgICAgICAgLy8gcmVxdWlyZS1pbi10aGUtbWlkZGxlIGBIb29rYC5cbiAgICAgICAgICAgIGNvbnN0IGhvb2sgPSBwYXRoLmlzQWJzb2x1dGUobW9kdWxlLm5hbWUpXG4gICAgICAgICAgICAgICAgPyBuZXcgcmVxdWlyZV9pbl90aGVfbWlkZGxlXzEuSG9vayhbbW9kdWxlLm5hbWVdLCB7IGludGVybmFsczogdHJ1ZSB9LCBvblJlcXVpcmUpXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9yZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24ucmVnaXN0ZXIobW9kdWxlLm5hbWUsIG9uUmVxdWlyZSk7XG4gICAgICAgICAgICB0aGlzLl9ob29rcy5wdXNoKGhvb2spO1xuICAgICAgICAgICAgY29uc3QgZXNtSG9vayA9IG5ldyBpbXBvcnRfaW5fdGhlX21pZGRsZV8xLkhvb2soW21vZHVsZS5uYW1lXSwgeyBpbnRlcm5hbHM6IGZhbHNlIH0sIGhvb2tGbik7XG4gICAgICAgICAgICB0aGlzLl9ob29rcy5wdXNoKGVzbUhvb2spO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgdGhpcy5fbW9kdWxlcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUudW5wYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2R1bGUubW9kdWxlRXhwb3J0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ1JlbW92aW5nIGluc3RydW1lbnRhdGlvbiBwYXRjaCBmb3Igbm9kZWpzIG1vZHVsZSBvbiBpbnN0cnVtZW50YXRpb24gZGlzYWJsZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IG1vZHVsZS5tb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1vZHVsZS51bnBhdGNoKG1vZHVsZS5tb2R1bGVFeHBvcnRzLCBtb2R1bGUubW9kdWxlVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgbW9kdWxlLmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUubW9kdWxlRXhwb3J0cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdSZW1vdmluZyBpbnN0cnVtZW50YXRpb24gcGF0Y2ggZm9yIG5vZGVqcyBtb2R1bGUgZmlsZSBvbiBpbnN0cnVtZW50YXRpb24gZGlzYWJsZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IG1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbW9kdWxlLm1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmlsZS51bnBhdGNoKGZpbGUubW9kdWxlRXhwb3J0cywgbW9kdWxlLm1vZHVsZVZlcnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH1cbn1cbmV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uQmFzZSA9IEluc3RydW1lbnRhdGlvbkJhc2U7XG5mdW5jdGlvbiBpc1N1cHBvcnRlZChzdXBwb3J0ZWRWZXJzaW9ucywgdmVyc2lvbiwgaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhlIHZlcnNpb24sIGFjY2VwdCB0aGUgd2lsZGNhcmQgY2FzZSBvbmx5XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRWZXJzaW9ucy5pbmNsdWRlcygnKicpO1xuICAgIH1cbiAgICByZXR1cm4gc3VwcG9ydGVkVmVyc2lvbnMuc29tZShzdXBwb3J0ZWRWZXJzaW9uID0+IHtcbiAgICAgICAgcmV0dXJuICgwLCBzZW12ZXJfMS5zYXRpc2ZpZXMpKHZlcnNpb24sIHN1cHBvcnRlZFZlcnNpb24sIHsgaW5jbHVkZVByZXJlbGVhc2UgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vcm1hbGl6ZSA9IHZvaWQgMDtcbnZhciBwYXRoXzEgPSByZXF1aXJlKFwicGF0aFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGF0aF8xLm5vcm1hbGl6ZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vcm1hbGl6ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub3JtYWxpemUgPSBleHBvcnRzLkluc3RydW1lbnRhdGlvbkJhc2UgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5zdHJ1bWVudGF0aW9uQmFzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZTsgfSB9KTtcbnZhciBub3JtYWxpemVfMSA9IHJlcXVpcmUoXCIuL25vcm1hbGl6ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9ybWFsaXplXzEubm9ybWFsaXplOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vcm1hbGl6ZSA9IGV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uQmFzZSA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5zdHJ1bWVudGF0aW9uQmFzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLkluc3RydW1lbnRhdGlvbkJhc2U7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3JtYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5ub3JtYWxpemU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24gPSB2b2lkIDA7XG5jbGFzcyBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiB7XG4gICAgbmFtZTtcbiAgICBzdXBwb3J0ZWRWZXJzaW9ucztcbiAgICBwYXRjaDtcbiAgICB1bnBhdGNoO1xuICAgIGZpbGVzO1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHN1cHBvcnRlZFZlcnNpb25zLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHBhdGNoLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHVucGF0Y2gsIGZpbGVzKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkVmVyc2lvbnMgPSBzdXBwb3J0ZWRWZXJzaW9ucztcbiAgICAgICAgdGhpcy5wYXRjaCA9IHBhdGNoO1xuICAgICAgICB0aGlzLnVucGF0Y2ggPSB1bnBhdGNoO1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXMgfHwgW107XG4gICAgfVxufVxuZXhwb3J0cy5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiA9IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlID0gdm9pZCAwO1xuY29uc3QgaW5kZXhfMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL2luZGV4XCIpO1xuY2xhc3MgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUge1xuICAgIHN1cHBvcnRlZFZlcnNpb25zO1xuICAgIHBhdGNoO1xuICAgIHVucGF0Y2g7XG4gICAgbmFtZTtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBzdXBwb3J0ZWRWZXJzaW9ucywgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwYXRjaCwgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB1bnBhdGNoKSB7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkVmVyc2lvbnMgPSBzdXBwb3J0ZWRWZXJzaW9ucztcbiAgICAgICAgdGhpcy5wYXRjaCA9IHBhdGNoO1xuICAgICAgICB0aGlzLnVucGF0Y2ggPSB1bnBhdGNoO1xuICAgICAgICB0aGlzLm5hbWUgPSAoMCwgaW5kZXhfMS5ub3JtYWxpemUpKG5hbWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUgPSBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZW1jb252U3RhYmlsaXR5RnJvbVN0ciA9IGV4cG9ydHMuU2VtY29udlN0YWJpbGl0eSA9IHZvaWQgMDtcbnZhciBTZW1jb252U3RhYmlsaXR5O1xuKGZ1bmN0aW9uIChTZW1jb252U3RhYmlsaXR5KSB7XG4gICAgLyoqIEVtaXQgb25seSBzdGFibGUgc2VtYW50aWMgY29udmVudGlvbnMuICovXG4gICAgU2VtY29udlN0YWJpbGl0eVtTZW1jb252U3RhYmlsaXR5W1wiU1RBQkxFXCJdID0gMV0gPSBcIlNUQUJMRVwiO1xuICAgIC8qKiBFbWl0IG9ubHkgb2xkIHNlbWFudGljIGNvbnZlbnRpb25zLiAqL1xuICAgIFNlbWNvbnZTdGFiaWxpdHlbU2VtY29udlN0YWJpbGl0eVtcIk9MRFwiXSA9IDJdID0gXCJPTERcIjtcbiAgICAvKiogRW1pdCBib3RoIHN0YWJsZSBhbmQgb2xkIHNlbWFudGljIGNvbnZlbnRpb25zLiAqL1xuICAgIFNlbWNvbnZTdGFiaWxpdHlbU2VtY29udlN0YWJpbGl0eVtcIkRVUExJQ0FURVwiXSA9IDNdID0gXCJEVVBMSUNBVEVcIjtcbn0pKFNlbWNvbnZTdGFiaWxpdHkgPSBleHBvcnRzLlNlbWNvbnZTdGFiaWxpdHkgfHwgKGV4cG9ydHMuU2VtY29udlN0YWJpbGl0eSA9IHt9KSk7XG4vKipcbiAqIERldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgc2VtY29udiBzdGFiaWxpdHkgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UuXG4gKlxuICogVGhpcyB3aWxsIHBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIHZhbHVlcyAob2Z0ZW5cbiAqIGBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTmApIGxvb2tpbmcgZm9yIHRoZSBgJHtuYW1lc3BhY2V9YFxuICogb3IgYCR7bmFtZXNwYWNlfS9kdXBgIHRva2Vucy4gVGhpcyBpcyBhIHBhdHRlcm4gZGVmaW5lZCBieSBhIG51bWJlciBvZlxuICogbm9uLW5vcm1hdGl2ZSBzZW1jb252IGRvY3VtZW50cy5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqIC0gbmFtZXNwYWNlICdodHRwJzogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9ub24tbm9ybWF0aXZlL2h0dHAtbWlncmF0aW9uL1xuICogLSBuYW1lc3BhY2UgJ2RhdGFiYXNlJzogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9ub24tbm9ybWF0aXZlL2RhdGFiYXNlLW1pZ3JhdGlvbi9cbiAqIC0gbmFtZXNwYWNlICdrOHMnOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L25vbi1ub3JtYXRpdmUvazhzLW1pZ3JhdGlvbi9cbiAqXG4gKiBVc2FnZTpcbiAqXG4gKiAgaW1wb3J0IHtTZW1jb252U3RhYmlsaXR5LCBzZW1jb252U3RhYmlsaXR5RnJvbVN0cn0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uJztcbiAqXG4gKiAgZXhwb3J0IGNsYXNzIEZvb0luc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2U8Rm9vSW5zdHJ1bWVudGF0aW9uQ29uZmlnPiB7XG4gKiAgICBwcml2YXRlIF9zZW1jb252U3RhYmlsaXR5OiBTZW1jb252U3RhYmlsaXR5O1xuICogICAgY29uc3RydWN0b3IoY29uZmlnOiBGb29JbnN0cnVtZW50YXRpb25Db25maWcgPSB7fSkge1xuICogICAgICBzdXBlcignQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZvbycsIFZFUlNJT04sIGNvbmZpZyk7XG4gKlxuICogICAgICAvLyBXaGVuIHN1cHBvcnRpbmcgdGhlIE9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOIGVudnZhclxuICogICAgICB0aGlzLl9zZW1jb252U3RhYmlsaXR5ID0gc2VtY29udlN0YWJpbGl0eUZyb21TdHIoXG4gKiAgICAgICAgJ2h0dHAnLFxuICogICAgICAgIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOXG4gKiAgICAgICk7XG4gKlxuICogICAgICAvLyBvciB3aGVuIHN1cHBvcnRpbmcgYSBgc2VtY29udlN0YWJpbGl0eU9wdEluYCBjb25maWcgb3B0aW9uIChlLmcuIGZvclxuICogICAgICAvLyB0aGUgd2ViIHdoZXJlIHRoZXJlIGFyZSBubyBlbnZ2YXJzKS5cbiAqICAgICAgdGhpcy5fc2VtY29udlN0YWJpbGl0eSA9IHNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKFxuICogICAgICAgICdodHRwJyxcbiAqICAgICAgICBjb25maWc/LnNlbWNvbnZTdGFiaWxpdHlPcHRJblxuICogICAgICApO1xuICogICAgfVxuICogIH1cbiAqXG4gKiAgLy8gVGhlbiwgdG8gYXBwbHkgc2VtY29udiwgdXNlIHRoZSBmb2xsb3dpbmcgb3Igc2ltaWxhcjpcbiAqICBpZiAodGhpcy5fc2VtY29udlN0YWJpbGl0eSAmIFNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gKiAgICAvLyAuLi5cbiAqICB9XG4gKiAgaWYgKHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgJiBTZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICogICAgLy8gLi4uXG4gKiAgfVxuICpcbiAqL1xuZnVuY3Rpb24gc2VtY29udlN0YWJpbGl0eUZyb21TdHIobmFtZXNwYWNlLCBzdHIpIHtcbiAgICBsZXQgc2VtY29udlN0YWJpbGl0eSA9IFNlbWNvbnZTdGFiaWxpdHkuT0xEO1xuICAgIC8vIFRoZSBzYW1lIHBhcnNpbmcgb2YgYHN0cmAgYXMgYGdldFN0cmluZ0xpc3RGcm9tRW52YCBmcm9tIHRoZSBjb3JlIHBrZy5cbiAgICBjb25zdCBlbnRyaWVzID0gc3RyXG4gICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAubWFwKHYgPT4gdi50cmltKCkpXG4gICAgICAgIC5maWx0ZXIocyA9PiBzICE9PSAnJyk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzID8/IFtdKSB7XG4gICAgICAgIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpID09PSBuYW1lc3BhY2UgKyAnL2R1cCcpIHtcbiAgICAgICAgICAgIC8vIERVUExJQ0FURSB0YWtlcyBoaWdoZXN0IHByZWNlZGVuY2UuXG4gICAgICAgICAgICBzZW1jb252U3RhYmlsaXR5ID0gU2VtY29udlN0YWJpbGl0eS5EVVBMSUNBVEU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpID09PSBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHNlbWNvbnZTdGFiaWxpdHkgPSBTZW1jb252U3RhYmlsaXR5LlNUQUJMRTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VtY29udlN0YWJpbGl0eTtcbn1cbmV4cG9ydHMuc2VtY29udlN0YWJpbGl0eUZyb21TdHIgPSBzZW1jb252U3RhYmlsaXR5RnJvbVN0cjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnZTdGFiaWxpdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyID0gZXhwb3J0cy5TZW1jb252U3RhYmlsaXR5ID0gZXhwb3J0cy5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlQXN5bmMgPSBleHBvcnRzLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUgPSBleHBvcnRzLmlzV3JhcHBlZCA9IGV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUgPSBleHBvcnRzLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uID0gZXhwb3J0cy5JbnN0cnVtZW50YXRpb25CYXNlID0gZXhwb3J0cy5yZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgPSB2b2lkIDA7XG52YXIgYXV0b0xvYWRlcl8xID0gcmVxdWlyZShcIi4vYXV0b0xvYWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV0b0xvYWRlcl8xLnJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczsgfSB9KTtcbnZhciBpbmRleF8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm0vaW5kZXhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbnN0cnVtZW50YXRpb25CYXNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbmRleF8xLkluc3RydW1lbnRhdGlvbkJhc2U7IH0gfSk7XG52YXIgaW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb247IH0gfSk7XG52YXIgaW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGVfMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGU7IH0gfSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNXcmFwcGVkXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLmlzV3JhcHBlZDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNhZmVFeGVjdXRlSW5UaGVNaWRkbGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxzXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNhZmVFeGVjdXRlSW5UaGVNaWRkbGVBc3luY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlQXN5bmM7IH0gfSk7XG52YXIgc2VtY29udlN0YWJpbGl0eV8xID0gcmVxdWlyZShcIi4vc2VtY29udlN0YWJpbGl0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlbWNvbnZTdGFiaWxpdHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbWNvbnZTdGFiaWxpdHlfMS5TZW1jb252U3RhYmlsaXR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VtY29udlN0YWJpbGl0eUZyb21TdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbWNvbnZTdGFiaWxpdHlfMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfU1lTVEVNID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19PUEVSQVRJT04gPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBwdWJsaXNoXG4gKiBAZXhhbXBsZSBjcmVhdGVcbiAqIEBleGFtcGxlIHByb2Nlc3NcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OID0gJ21lc3NhZ2luZy5vcGVyYXRpb24nO1xuLyoqXG4gKiBUaGUgbWVzc2FnaW5nIHN5c3RlbSBhcyBpZGVudGlmaWVkIGJ5IHRoZSBjbGllbnQgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIEBub3RlIFRoZSBhY3R1YWwgbWVzc2FnaW5nIHN5c3RlbSBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSBrbm93biBieSB0aGUgY2xpZW50LiBGb3IgZXhhbXBsZSwgd2hlbiB1c2luZyBLYWZrYSBjbGllbnQgbGlicmFyaWVzIHRvIGNvbW11bmljYXRlIHdpdGggQXp1cmUgRXZlbnQgSHVicywgdGhlIGBtZXNzYWdpbmcuc3lzdGVtYCBpcyBzZXQgdG8gYGthZmthYCBiYXNlZCBvbiB0aGUgaW5zdHJ1bWVudGF0aW9uJ3MgYmVzdCBrbm93bGVkZ2UuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX1NZU1RFTSA9ICdtZXNzYWdpbmcuc3lzdGVtJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSBleGFtcGxlLmNvbVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9ICduZXQucGVlci5wb3J0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX0NPTlZFUlNBVElPTl9JRCA9IGV4cG9ydHMuT0xEX0FUVFJfTUVTU0FHSU5HX01FU1NBR0VfSUQgPSBleHBvcnRzLk1FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EX1ZBTFVFX1RPUElDID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19VUkwgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX1BST1RPQ09MX1ZFUlNJT04gPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX1BST1RPQ09MID0gZXhwb3J0cy5NRVNTQUdJTkdfT1BFUkFUSU9OX1ZBTFVFX1BST0NFU1MgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX1JBQkJJVE1RX1JPVVRJTkdfS0VZID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTiA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgY29uc3RhbnRzIGZvciB2YWx1ZXMgdGhhdCB3aGVyZSByZXBsYWNlZC9yZW1vdmVkIGZyb21cbiAqIFNlbWFudGljIENvbnZlbnRpb25zIGxvbmcgZW5vdWdoIGFnbyB0aGF0IHRoZXkgZG8gbm90IGhhdmUgYEFUVFJfKmBcbiAqIGNvbnN0YW50cyBpbiB0aGUgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYCBwYWNrYWdlLiBFdmVudHVhbGx5XG4gKiBpdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgaW5zdHJ1bWVudGlvbiB3aWxsIGJlIHVwZGF0ZWQgdG8gZW1pdCB0ZWxlbWV0cnlcbiAqIHVzaW5nIG1vZGVybiBTZW1hbnRpYyBDb252ZW50aW9ucywgZHJvcHBpbmcgdGhlIG5lZWQgZm9yIHRoZSBjb25zdGFudHMgaW5cbiAqIHRoaXMgZmlsZS5cbiAqL1xuLyoqXG4gKiBUaGUgbWVzc2FnZSBkZXN0aW5hdGlvbiBuYW1lLiBUaGlzIG1pZ2h0IGJlIGVxdWFsIHRvIHRoZSBzcGFuIG5hbWUgYnV0IGlzIHJlcXVpcmVkIG5ldmVydGhlbGVzcy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OID0gJ21lc3NhZ2luZy5kZXN0aW5hdGlvbic7XG4vKipcbiAqIFRoZSBraW5kIG9mIG1lc3NhZ2UgZGVzdGluYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiBzZW1jb252IHYxLjIwLjAuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fS0lORCA9ICdtZXNzYWdpbmcuZGVzdGluYXRpb25fa2luZCc7XG4vKipcbiAqIFJhYmJpdE1RIG1lc3NhZ2Ugcm91dGluZyBrZXkuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHSU5HX1JBQkJJVE1RX0RFU1RJTkFUSU9OX1JPVVRJTkdfS0VZIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfUkFCQklUTVFfUk9VVElOR19LRVkgPSAnbWVzc2FnaW5nLnJhYmJpdG1xLnJvdXRpbmdfa2V5Jztcbi8qKlxuICogQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGtpbmQgb2YgbWVzc2FnZSBjb25zdW1wdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBbT3BlcmF0aW9uIG5hbWVzXSgjb3BlcmF0aW9uLW5hbWVzKSBzZWN0aW9uIGFib3ZlLiBJZiB0aGUgb3BlcmF0aW9uIGlzICYjMzQ7c2VuZCYjMzQ7LCB0aGlzIGF0dHJpYnV0ZSBNVVNUIE5PVCBiZSBzZXQsIHNpbmNlIHRoZSBvcGVyYXRpb24gY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIHNwYW4ga2luZCBpbiB0aGF0IGNhc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE1FU1NBR0lOR19PUEVSQVRJT05fVFlQRV9WQUxVRV9QUk9DRVNTIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTUVTU0FHSU5HX09QRVJBVElPTl9WQUxVRV9QUk9DRVNTID0gJ3Byb2Nlc3MnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVFdPUktfUFJPVE9DT0xfTkFNRS5cbiAqL1xuZXhwb3J0cy5BVFRSX01FU1NBR0lOR19QUk9UT0NPTCA9ICdtZXNzYWdpbmcucHJvdG9jb2wnO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX05FVFdPUktfUFJPVE9DT0xfVkVSU0lPTi5cbiAqL1xuZXhwb3J0cy5BVFRSX01FU1NBR0lOR19QUk9UT0NPTF9WRVJTSU9OID0gJ21lc3NhZ2luZy5wcm90b2NvbF92ZXJzaW9uJztcbi8qKlxuICogQ29ubmVjdGlvbiBzdHJpbmcuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiBzZW1jb252IHYxLjE3LjAuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfVVJMID0gJ21lc3NhZ2luZy51cmwnO1xuLyoqXG4gKiBUaGUga2luZCBvZiBtZXNzYWdlIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gc2VtY29udiB2MS4yMC4wLlxuICovXG5leHBvcnRzLk1FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EX1ZBTFVFX1RPUElDID0gJ3RvcGljJztcbi8qKlxuICogQSB2YWx1ZSB1c2VkIGJ5IHRoZSBtZXNzYWdpbmcgc3lzdGVtIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBtZXNzYWdlLCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfTUVTU0FHRV9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICpcbiAqIE5vdGU6IGNoYW5naW5nIHRvIGBBVFRSX01FU1NBR0lOR19NRVNTQUdFX0lEYCBtZWFucyBhIGNoYW5nZSBpbiB2YWx1ZSBmcm9tIGBtZXNzYWdpbmcubWVzc2FnZV9pZGAgdG8gYG1lc3NhZ2luZy5tZXNzYWdlLmlkYC5cbiAqL1xuZXhwb3J0cy5PTERfQVRUUl9NRVNTQUdJTkdfTUVTU0FHRV9JRCA9ICdtZXNzYWdpbmcubWVzc2FnZV9pZCc7XG4vKipcbiAqIFRoZSBbY29udmVyc2F0aW9uIElEXSgjY29udmVyc2F0aW9ucykgaWRlbnRpZnlpbmcgdGhlIGNvbnZlcnNhdGlvbiB0byB3aGljaCB0aGUgbWVzc2FnZSBiZWxvbmdzLCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4gU29tZXRpbWVzIGNhbGxlZCAmIzM0O0NvcnJlbGF0aW9uIElEJiMzNDsuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEFUVFJfTUVTU0FHSU5HX01FU1NBR0VfQ09OVkVSU0FUSU9OX0lEIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfQ09OVkVSU0FUSU9OX0lEID0gJ21lc3NhZ2luZy5jb252ZXJzYXRpb25faWQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi1vYnNvbGV0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0NPTkZJRyA9IGV4cG9ydHMuRW5kT3BlcmF0aW9uID0gdm9pZCAwO1xudmFyIEVuZE9wZXJhdGlvbjtcbihmdW5jdGlvbiAoRW5kT3BlcmF0aW9uKSB7XG4gICAgRW5kT3BlcmF0aW9uW1wiQXV0b0Fja1wiXSA9IFwiYXV0byBhY2tcIjtcbiAgICBFbmRPcGVyYXRpb25bXCJBY2tcIl0gPSBcImFja1wiO1xuICAgIEVuZE9wZXJhdGlvbltcIkFja0FsbFwiXSA9IFwiYWNrQWxsXCI7XG4gICAgRW5kT3BlcmF0aW9uW1wiUmVqZWN0XCJdID0gXCJyZWplY3RcIjtcbiAgICBFbmRPcGVyYXRpb25bXCJOYWNrXCJdID0gXCJuYWNrXCI7XG4gICAgRW5kT3BlcmF0aW9uW1wiTmFja0FsbFwiXSA9IFwibmFja0FsbFwiO1xuICAgIEVuZE9wZXJhdGlvbltcIkNoYW5uZWxDbG9zZWRcIl0gPSBcImNoYW5uZWwgY2xvc2VkXCI7XG4gICAgRW5kT3BlcmF0aW9uW1wiQ2hhbm5lbEVycm9yXCJdID0gXCJjaGFubmVsIGVycm9yXCI7XG4gICAgRW5kT3BlcmF0aW9uW1wiSW5zdHJ1bWVudGF0aW9uVGltZW91dFwiXSA9IFwiaW5zdHJ1bWVudGF0aW9uIHRpbWVvdXRcIjtcbn0pKEVuZE9wZXJhdGlvbiA9IGV4cG9ydHMuRW5kT3BlcmF0aW9uIHx8IChleHBvcnRzLkVuZE9wZXJhdGlvbiA9IHt9KSk7XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0ge1xuICAgIGNvbnN1bWVUaW1lb3V0TXM6IDEwMDAgKiA2MCxcbiAgICB1c2VMaW5rc0ZvckNvbnN1bWU6IGZhbHNlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQ29uZmlybUNoYW5uZWxUcmFjaW5nID0gZXhwb3J0cy51bm1hcmtDb25maXJtQ2hhbm5lbFRyYWNpbmcgPSBleHBvcnRzLm1hcmtDb25maXJtQ2hhbm5lbFRyYWNpbmcgPSBleHBvcnRzLmdldENvbm5lY3Rpb25BdHRyaWJ1dGVzRnJvbVVybCA9IGV4cG9ydHMuZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXNGcm9tU2VydmVyID0gZXhwb3J0cy5ub3JtYWxpemVFeGNoYW5nZSA9IGV4cG9ydHMuQ09OTkVDVElPTl9BVFRSSUJVVEVTID0gZXhwb3J0cy5DSEFOTkVMX0NPTlNVTUVfVElNRU9VVF9USU1FUiA9IGV4cG9ydHMuQ0hBTk5FTF9TUEFOU19OT1RfRU5ERUQgPSBleHBvcnRzLk1FU1NBR0VfU1RPUkVEX1NQQU4gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IHNlbWNvbnZfb2Jzb2xldGVfMSA9IHJlcXVpcmUoXCIuLi9zcmMvc2VtY29udi1vYnNvbGV0ZVwiKTtcbmV4cG9ydHMuTUVTU0FHRV9TVE9SRURfU1BBTiA9IFN5bWJvbCgnb3BlbnRlbGVtZXRyeS5hbXFwbGliLm1lc3NhZ2Uuc3RvcmVkLXNwYW4nKTtcbmV4cG9ydHMuQ0hBTk5FTF9TUEFOU19OT1RfRU5ERUQgPSBTeW1ib2woJ29wZW50ZWxlbWV0cnkuYW1xcGxpYi5jaGFubmVsLnNwYW5zLW5vdC1lbmRlZCcpO1xuZXhwb3J0cy5DSEFOTkVMX0NPTlNVTUVfVElNRU9VVF9USU1FUiA9IFN5bWJvbCgnb3BlbnRlbGVtZXRyeS5hbXFwbGliLmNoYW5uZWwuY29uc3VtZXItdGltZW91dC10aW1lcicpO1xuZXhwb3J0cy5DT05ORUNUSU9OX0FUVFJJQlVURVMgPSBTeW1ib2woJ29wZW50ZWxlbWV0cnkuYW1xcGxpYi5jb25uZWN0aW9uLmF0dHJpYnV0ZXMnKTtcbmNvbnN0IElTX0NPTkZJUk1fQ0hBTk5FTF9DT05URVhUX0tFWSA9ICgwLCBhcGlfMS5jcmVhdGVDb250ZXh0S2V5KSgnb3BlbnRlbGVtZXRyeS5hbXFwbGliLmNoYW5uZWwuaXMtY29uZmlybS1jaGFubmVsJyk7XG5jb25zdCBub3JtYWxpemVFeGNoYW5nZSA9IChleGNoYW5nZU5hbWUpID0+IGV4Y2hhbmdlTmFtZSAhPT0gJycgPyBleGNoYW5nZU5hbWUgOiAnPGRlZmF1bHQ+JztcbmV4cG9ydHMubm9ybWFsaXplRXhjaGFuZ2UgPSBub3JtYWxpemVFeGNoYW5nZTtcbmNvbnN0IGNlbnNvclBhc3N3b3JkID0gKHVybCkgPT4ge1xuICAgIHJldHVybiB1cmwucmVwbGFjZSgvOlteOkAvXSpALywgJzoqKipAJyk7XG59O1xuY29uc3QgZ2V0UG9ydCA9IChwb3J0RnJvbVVybCwgcmVzb2x2ZWRQcm90b2NvbCkgPT4ge1xuICAgIC8vIHdlIGFyZSB1c2luZyB0aGUgcmVzb2x2ZWQgcHJvdG9jb2wgd2hpY2ggaXMgdXBwZXIgY2FzZVxuICAgIC8vIHRoaXMgY29kZSBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgdGhlIGFtcXBsaWIgd2hpY2ggaXMgdXNlZCB0byBzZXQgY29ubmVjdGlvbiBwYXJhbXNcbiAgICByZXR1cm4gcG9ydEZyb21VcmwgfHwgKHJlc29sdmVkUHJvdG9jb2wgPT09ICdBTVFQJyA/IDU2NzIgOiA1NjcxKTtcbn07XG5jb25zdCBnZXRQcm90b2NvbCA9IChwcm90b2NvbEZyb21VcmwpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZFByb3RvY29sID0gcHJvdG9jb2xGcm9tVXJsIHx8ICdhbXFwJztcbiAgICAvLyB0aGUgc3Vic3RyaW5nIHJlbW92ZWQgdGhlICc6JyBwYXJ0IG9mIHRoZSBwcm90b2NvbCAoJ2FtcXA6JyAtPiAnYW1xcCcpXG4gICAgY29uc3Qgbm9FbmRpbmdDb2xvbiA9IHJlc29sdmVkUHJvdG9jb2wuZW5kc1dpdGgoJzonKVxuICAgICAgICA/IHJlc29sdmVkUHJvdG9jb2wuc3Vic3RyaW5nKDAsIHJlc29sdmVkUHJvdG9jb2wubGVuZ3RoIC0gMSlcbiAgICAgICAgOiByZXNvbHZlZFByb3RvY29sO1xuICAgIC8vIHVwcGVyIGNhc2VzIHRvIG1hdGNoIHNwZWNcbiAgICByZXR1cm4gbm9FbmRpbmdDb2xvbi50b1VwcGVyQ2FzZSgpO1xufTtcbmNvbnN0IGdldEhvc3RuYW1lID0gKGhvc3RuYW1lRnJvbVVybCkgPT4ge1xuICAgIC8vIGlmIHVzZXIgc3VwcGxpZXMgZW1wdHkgaG9zdG5hbWUsIGl0IGdldHMgZm9yd2FyZGVkIHRvICduZXQnIHBhY2thZ2Ugd2hpY2ggZGVmYXVsdCBpdCB0byBsb2NhbGhvc3QuXG4gICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0LXYxMi54L2FwaS9uZXQuaHRtbCNuZXRfc29ja2V0X2Nvbm5lY3Rfb3B0aW9uc19jb25uZWN0bGlzdGVuZXJcbiAgICByZXR1cm4gaG9zdG5hbWVGcm9tVXJsIHx8ICdsb2NhbGhvc3QnO1xufTtcbmNvbnN0IGV4dHJhY3RDb25uZWN0aW9uQXR0cmlidXRlT3JMb2cgPSAodXJsLCBhdHRyaWJ1dGVLZXksIGF0dHJpYnV0ZVZhbHVlLCBuYW1lRm9yTG9nKSA9PiB7XG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IFthdHRyaWJ1dGVLZXldOiBhdHRyaWJ1dGVWYWx1ZSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgYW1xcGxpYiBpbnN0cnVtZW50YXRpb246IGNvdWxkIG5vdCBleHRyYWN0IGNvbm5lY3Rpb24gYXR0cmlidXRlICR7bmFtZUZvckxvZ30gZnJvbSB1c2VyIHN1cHBsaWVkIHVybGAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59O1xuY29uc3QgZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXNGcm9tU2VydmVyID0gKGNvbm4pID0+IHtcbiAgICBjb25zdCBwcm9kdWN0ID0gY29ubi5zZXJ2ZXJQcm9wZXJ0aWVzLnByb2R1Y3Q/LnRvTG93ZXJDYXNlPy4oKTtcbiAgICBpZiAocHJvZHVjdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19TWVNURU1dOiBwcm9kdWN0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn07XG5leHBvcnRzLmdldENvbm5lY3Rpb25BdHRyaWJ1dGVzRnJvbVNlcnZlciA9IGdldENvbm5lY3Rpb25BdHRyaWJ1dGVzRnJvbVNlcnZlcjtcbmNvbnN0IGdldENvbm5lY3Rpb25BdHRyaWJ1dGVzRnJvbVVybCA9ICh1cmwpID0+IHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfTUVTU0FHSU5HX1BST1RPQ09MX1ZFUlNJT05dOiAnMC45LjEnLCAvLyB0aGlzIGlzIHRoZSBvbmx5IHByb3RvY29sIHN1cHBvcnRlZCBieSB0aGUgaW5zdHJ1bWVudGVkIGxpYnJhcnlcbiAgICB9O1xuICAgIHVybCA9IHVybCB8fCAnYW1xcDovL2xvY2FsaG9zdCc7XG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RPcHRpb25zID0gdXJsO1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IGdldFByb3RvY29sKGNvbm5lY3RPcHRpb25zPy5wcm90b2NvbCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgICAgLi4uZXh0cmFjdENvbm5lY3Rpb25BdHRyaWJ1dGVPckxvZyh1cmwsIHNlbWNvbnZfb2Jzb2xldGVfMS5BVFRSX01FU1NBR0lOR19QUk9UT0NPTCwgcHJvdG9jb2wsICdwcm90b2NvbCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBnZXRIb3N0bmFtZShjb25uZWN0T3B0aW9ucz8uaG9zdG5hbWUpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgIC4uLmV4dHJhY3RDb25uZWN0aW9uQXR0cmlidXRlT3JMb2codXJsLCBzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FLCBob3N0bmFtZSwgJ2hvc3RuYW1lJyksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwb3J0ID0gZ2V0UG9ydChjb25uZWN0T3B0aW9ucy5wb3J0LCBwcm90b2NvbCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgICAgLi4uZXh0cmFjdENvbm5lY3Rpb25BdHRyaWJ1dGVPckxvZyh1cmwsIHNlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlQsIHBvcnQsICdwb3J0JyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgY2Vuc29yZWRVcmwgPSBjZW5zb3JQYXNzd29yZCh1cmwpO1xuICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfb2Jzb2xldGVfMS5BVFRSX01FU1NBR0lOR19VUkxdID0gY2Vuc29yZWRVcmw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmxQYXJ0cyA9IG5ldyBVUkwoY2Vuc29yZWRVcmwpO1xuICAgICAgICAgICAgY29uc3QgcHJvdG9jb2wgPSBnZXRQcm90b2NvbCh1cmxQYXJ0cy5wcm90b2NvbCk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgICAuLi5leHRyYWN0Q29ubmVjdGlvbkF0dHJpYnV0ZU9yTG9nKGNlbnNvcmVkVXJsLCBzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfUFJPVE9DT0wsIHByb3RvY29sLCAncHJvdG9jb2wnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBnZXRIb3N0bmFtZSh1cmxQYXJ0cy5ob3N0bmFtZSk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgICAuLi5leHRyYWN0Q29ubmVjdGlvbkF0dHJpYnV0ZU9yTG9nKGNlbnNvcmVkVXJsLCBzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FLCBob3N0bmFtZSwgJ2hvc3RuYW1lJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBnZXRQb3J0KHVybFBhcnRzLnBvcnQgPyBwYXJzZUludCh1cmxQYXJ0cy5wb3J0KSA6IHVuZGVmaW5lZCwgcHJvdG9jb2wpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICAgICAgLi4uZXh0cmFjdENvbm5lY3Rpb25BdHRyaWJ1dGVPckxvZyhjZW5zb3JlZFVybCwgc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVCwgcG9ydCwgJ3BvcnQnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ2FtcXBsaWIgaW5zdHJ1bWVudGF0aW9uOiBlcnJvciB3aGlsZSBleHRyYWN0aW5nIGNvbm5lY3Rpb24gZGV0YWlscyBmcm9tIGNvbm5lY3Rpb24gdXJsJywge1xuICAgICAgICAgICAgICAgIGNlbnNvcmVkVXJsLFxuICAgICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xufTtcbmV4cG9ydHMuZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXNGcm9tVXJsID0gZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXNGcm9tVXJsO1xuY29uc3QgbWFya0NvbmZpcm1DaGFubmVsVHJhY2luZyA9IChjb250ZXh0KSA9PiB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoSVNfQ09ORklSTV9DSEFOTkVMX0NPTlRFWFRfS0VZLCB0cnVlKTtcbn07XG5leHBvcnRzLm1hcmtDb25maXJtQ2hhbm5lbFRyYWNpbmcgPSBtYXJrQ29uZmlybUNoYW5uZWxUcmFjaW5nO1xuY29uc3QgdW5tYXJrQ29uZmlybUNoYW5uZWxUcmFjaW5nID0gKGNvbnRleHQpID0+IHtcbiAgICByZXR1cm4gY29udGV4dC5kZWxldGVWYWx1ZShJU19DT05GSVJNX0NIQU5ORUxfQ09OVEVYVF9LRVkpO1xufTtcbmV4cG9ydHMudW5tYXJrQ29uZmlybUNoYW5uZWxUcmFjaW5nID0gdW5tYXJrQ29uZmlybUNoYW5uZWxUcmFjaW5nO1xuY29uc3QgaXNDb25maXJtQ2hhbm5lbFRyYWNpbmcgPSAoY29udGV4dCkgPT4ge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKElTX0NPTkZJUk1fQ0hBTk5FTF9DT05URVhUX0tFWSkgPT09IHRydWU7XG59O1xuZXhwb3J0cy5pc0NvbmZpcm1DaGFubmVsVHJhY2luZyA9IGlzQ29uZmlybUNoYW5uZWxUcmFjaW5nO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjU0LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWFtcXBsaWInO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BbXFwbGliSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IHNlbWNvbnZfb2Jzb2xldGVfMSA9IHJlcXVpcmUoXCIuLi9zcmMvc2VtY29udi1vYnNvbGV0ZVwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IHN1cHBvcnRlZFZlcnNpb25zID0gWyc+PTAuNS41IDwxJ107XG5jbGFzcyBBbXFwbGliSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgeyAuLi50eXBlc18xLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi50eXBlc18xLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxNb2RlbE1vZHVsZUZpbGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ2FtcXBsaWIvbGliL2NoYW5uZWxfbW9kZWwuanMnLCBzdXBwb3J0ZWRWZXJzaW9ucywgdGhpcy5wYXRjaENoYW5uZWxNb2RlbC5iaW5kKHRoaXMpLCB0aGlzLnVucGF0Y2hDaGFubmVsTW9kZWwuYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrTW9kZWxNb2R1bGVGaWxlID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdhbXFwbGliL2xpYi9jYWxsYmFja19tb2RlbC5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCB0aGlzLnBhdGNoQ2hhbm5lbE1vZGVsLmJpbmQodGhpcyksIHRoaXMudW5wYXRjaENoYW5uZWxNb2RlbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3QgY29ubmVjdE1vZHVsZUZpbGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ2FtcXBsaWIvbGliL2Nvbm5lY3QuanMnLCBzdXBwb3J0ZWRWZXJzaW9ucywgdGhpcy5wYXRjaENvbm5lY3QuYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdhbXFwbGliJywgc3VwcG9ydGVkVmVyc2lvbnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbY2hhbm5lbE1vZGVsTW9kdWxlRmlsZSwgY29ubmVjdE1vZHVsZUZpbGUsIGNhbGxiYWNrTW9kZWxNb2R1bGVGaWxlXSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIHBhdGNoQ29ubmVjdChtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZUV4cG9ydHMgPSB0aGlzLnVucGF0Y2hDb25uZWN0KG1vZHVsZUV4cG9ydHMpO1xuICAgICAgICBpZiAoISgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuY29ubmVjdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ2Nvbm5lY3QnLCB0aGlzLmdldENvbm5lY3RQYXRjaC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICB9XG4gICAgdW5wYXRjaENvbm5lY3QobW9kdWxlRXhwb3J0cykge1xuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5jb25uZWN0KSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdjb25uZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHBhdGNoQ2hhbm5lbE1vZGVsKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLnB1Ymxpc2gpKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICdwdWJsaXNoJywgdGhpcy5nZXRQdWJsaXNoUGF0Y2guYmluZCh0aGlzLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLmNvbnN1bWUpKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICdjb25zdW1lJywgdGhpcy5nZXRDb25zdW1lUGF0Y2guYmluZCh0aGlzLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLmFjaykpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5DaGFubmVsLnByb3RvdHlwZSwgJ2FjaycsIHRoaXMuZ2V0QWNrUGF0Y2guYmluZCh0aGlzLCBmYWxzZSwgdHlwZXNfMS5FbmRPcGVyYXRpb24uQWNrKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLm5hY2spKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICduYWNrJywgdGhpcy5nZXRBY2tQYXRjaC5iaW5kKHRoaXMsIHRydWUsIHR5cGVzXzEuRW5kT3BlcmF0aW9uLk5hY2spKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUucmVqZWN0KSkge1xuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAncmVqZWN0JywgdGhpcy5nZXRBY2tQYXRjaC5iaW5kKHRoaXMsIHRydWUsIHR5cGVzXzEuRW5kT3BlcmF0aW9uLlJlamVjdCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5DaGFubmVsLnByb3RvdHlwZS5hY2tBbGwpKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICdhY2tBbGwnLCB0aGlzLmdldEFja0FsbFBhdGNoLmJpbmQodGhpcywgZmFsc2UsIHR5cGVzXzEuRW5kT3BlcmF0aW9uLkFja0FsbCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5DaGFubmVsLnByb3RvdHlwZS5uYWNrQWxsKSkge1xuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAnbmFja0FsbCcsIHRoaXMuZ2V0QWNrQWxsUGF0Y2guYmluZCh0aGlzLCB0cnVlLCB0eXBlc18xLkVuZE9wZXJhdGlvbi5OYWNrQWxsKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLmVtaXQpKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICdlbWl0JywgdGhpcy5nZXRDaGFubmVsRW1pdFBhdGNoLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5Db25maXJtQ2hhbm5lbC5wcm90b3R5cGUucHVibGlzaCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5Db25maXJtQ2hhbm5lbC5wcm90b3R5cGUsICdwdWJsaXNoJywgdGhpcy5nZXRDb25maXJtZWRQdWJsaXNoUGF0Y2guYmluZCh0aGlzLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHVucGF0Y2hDaGFubmVsTW9kZWwobW9kdWxlRXhwb3J0cykge1xuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5DaGFubmVsLnByb3RvdHlwZS5wdWJsaXNoKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICdwdWJsaXNoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUuY29uc3VtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAnY29uc3VtZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLmFjaykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAnYWNrJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUubmFjaykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAnbmFjaycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLnJlamVjdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAncmVqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUuYWNrQWxsKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICdhY2tBbGwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5DaGFubmVsLnByb3RvdHlwZS5uYWNrQWxsKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUsICduYWNrQWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuQ2hhbm5lbC5wcm90b3R5cGUuZW1pdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNoYW5uZWwucHJvdG90eXBlLCAnZW1pdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbmZpcm1DaGFubmVsLnByb3RvdHlwZS5wdWJsaXNoKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ29uZmlybUNoYW5uZWwucHJvdG90eXBlLCAncHVibGlzaCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgIH1cbiAgICBnZXRDb25uZWN0UGF0Y2gob3JpZ2luYWwpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDb25uZWN0KHVybCwgc29ja2V0T3B0aW9ucywgb3BlbkNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCB1cmwsIHNvY2tldE9wdGlvbnMsIGZ1bmN0aW9uIChlcnIsIGNvbm4pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQXR0cmlidXRlcyA9ICgwLCB1dGlsc18xLmdldENvbm5lY3Rpb25BdHRyaWJ1dGVzRnJvbVVybCkodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyQXR0cmlidXRlcyA9ICgwLCB1dGlsc18xLmdldENvbm5lY3Rpb25BdHRyaWJ1dGVzRnJvbVNlcnZlcikoY29ubik7XG4gICAgICAgICAgICAgICAgICAgIGNvbm5bdXRpbHNfMS5DT05ORUNUSU9OX0FUVFJJQlVURVNdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udXJsQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlcnZlckF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wZW5DYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldENoYW5uZWxFbWl0UGF0Y2gob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgICAgIHNlbGYuZW5kQWxsU3BhbnNPbkNoYW5uZWwodGhpcywgdHJ1ZSwgdHlwZXNfMS5FbmRPcGVyYXRpb24uQ2hhbm5lbENsb3NlZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVUaW1lciA9IHRoaXNbdXRpbHNfMS5DSEFOTkVMX0NPTlNVTUVfVElNRU9VVF9USU1FUl07XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoYWN0aXZlVGltZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3V0aWxzXzEuQ0hBTk5FTF9DT05TVU1FX1RJTUVPVVRfVElNRVJdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5lbmRBbGxTcGFuc09uQ2hhbm5lbCh0aGlzLCB0cnVlLCB0eXBlc18xLkVuZE9wZXJhdGlvbi5DaGFubmVsRXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0QWNrQWxsUGF0Y2goaXNSZWplY3RlZCwgZW5kT3BlcmF0aW9uLCBvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFja0FsbChyZXF1ZXVlT3JFbXB0eSkge1xuICAgICAgICAgICAgc2VsZi5lbmRBbGxTcGFuc09uQ2hhbm5lbCh0aGlzLCBpc1JlamVjdGVkLCBlbmRPcGVyYXRpb24sIHJlcXVldWVPckVtcHR5KTtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRBY2tQYXRjaChpc1JlamVjdGVkLCBlbmRPcGVyYXRpb24sIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gYWNrKG1lc3NhZ2UsIGFsbFVwVG9PclJlcXVldWUsIHJlcXVldWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzO1xuICAgICAgICAgICAgLy8gd2UgdXNlIHRoaXMgcGF0Y2ggaW4gcmVqZWN0IGZ1bmN0aW9uIGFzIHdlbGwsIGJ1dCBpdCBoYXMgZGlmZmVyZW50IHNpZ25hdHVyZVxuICAgICAgICAgICAgY29uc3QgcmVxdWV1ZVJlc29sdmVkID0gZW5kT3BlcmF0aW9uID09PSB0eXBlc18xLkVuZE9wZXJhdGlvbi5SZWplY3QgPyBhbGxVcFRvT3JSZXF1ZXVlIDogcmVxdWV1ZTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5zTm90RW5kZWQgPSBjaGFubmVsW3V0aWxzXzEuQ0hBTk5FTF9TUEFOU19OT1RfRU5ERURdID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgbXNnSW5kZXggPSBzcGFuc05vdEVuZGVkLmZpbmRJbmRleChtc2dEZXRhaWxzID0+IG1zZ0RldGFpbHMubXNnID09PSBtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChtc2dJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgbm90IGhhcHBlbiBpbiBoYXBweSBmbG93XG4gICAgICAgICAgICAgICAgLy8gYnV0IHBvc3NpYmxlIGlmIHVzZXIgaXMgY2FsbGluZyB0aGUgYXBpIGZ1bmN0aW9uIGFjayB0d2ljZSB3aXRoIHNhbWUgbWVzc2FnZVxuICAgICAgICAgICAgICAgIHNlbGYuZW5kQ29uc3VtZXJTcGFuKG1lc3NhZ2UsIGlzUmVqZWN0ZWQsIGVuZE9wZXJhdGlvbiwgcmVxdWV1ZVJlc29sdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVuZE9wZXJhdGlvbiAhPT0gdHlwZXNfMS5FbmRPcGVyYXRpb24uUmVqZWN0ICYmIGFsbFVwVG9PclJlcXVldWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBtc2dJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kQ29uc3VtZXJTcGFuKHNwYW5zTm90RW5kZWRbaV0ubXNnLCBpc1JlamVjdGVkLCBlbmRPcGVyYXRpb24sIHJlcXVldWVSZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwYW5zTm90RW5kZWQuc3BsaWNlKDAsIG1zZ0luZGV4ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmVuZENvbnN1bWVyU3BhbihtZXNzYWdlLCBpc1JlamVjdGVkLCBlbmRPcGVyYXRpb24sIHJlcXVldWVSZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgc3BhbnNOb3RFbmRlZC5zcGxpY2UobXNnSW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldENvbnN1bWVQYXRjaChtb2R1bGVWZXJzaW9uLCBvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN1bWUocXVldWUsIG9uTWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFubmVsLCB1dGlsc18xLkNIQU5ORUxfU1BBTlNfTk9UX0VOREVEKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29uc3VtZVRpbWVvdXRNcyB9ID0gc2VsZi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3VtZVRpbWVvdXRNcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tDb25zdW1lVGltZW91dE9uQ2hhbm5lbChjaGFubmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgY29uc3VtZVRpbWVvdXRNcyk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLnVucmVmKCk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbdXRpbHNfMS5DSEFOTkVMX0NPTlNVTUVfVElNRU9VVF9USU1FUl0gPSB0aW1lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hhbm5lbFt1dGlsc18xLkNIQU5ORUxfU1BBTlNfTk9UX0VOREVEXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZE9uTWVzc2FnZSA9IGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICAgICAgICAgICAvLyBtc2cgaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBmb3Igc2lnbmFsaW5nIGNvbnN1bWVyIGNhbmNlbCBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yYWJiaXRtcS5jb20vY29uc3VtZXItY2FuY2VsLmh0bWxcbiAgICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2UsIHdlIGRvIG5vdCBzdGFydCBhIHNwYW4sIGFzIHRoaXMgaXMgbm90IGEgcmVhbCBtZXNzYWdlLlxuICAgICAgICAgICAgICAgIGlmICghbXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbk1lc3NhZ2UuY2FsbCh0aGlzLCBtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbXNnLnByb3BlcnRpZXMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50Q29udGV4dCA9IGFwaV8xLnByb3BhZ2F0aW9uLmV4dHJhY3QoYXBpXzEuUk9PVF9DT05URVhULCBoZWFkZXJzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZSA9IG1zZy5maWVsZHM/LmV4Y2hhbmdlO1xuICAgICAgICAgICAgICAgIGxldCBsaW5rcztcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fY29uZmlnLnVzZUxpbmtzRm9yQ29uc3VtZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRTcGFuQ29udGV4dCA9IHBhcmVudENvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYXBpXzEudHJhY2UuZ2V0U3BhbihwYXJlbnRDb250ZXh0KT8uc3BhbkNvbnRleHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTcGFuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlua3MgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBwYXJlbnRTcGFuQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gc2VsZi50cmFjZXIuc3RhcnRTcGFuKGAke3F1ZXVlfSBwcm9jZXNzYCwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DT05TVU1FUixcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY2hhbm5lbD8uY29ubmVjdGlvbj8uW3V0aWxzXzEuQ09OTkVDVElPTl9BVFRSSUJVVEVTXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05dOiBleGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fS0lORF06IHNlbWNvbnZfb2Jzb2xldGVfMS5NRVNTQUdJTkdfREVTVElOQVRJT05fS0lORF9WQUxVRV9UT1BJQyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfUkFCQklUTVFfUk9VVElOR19LRVldOiBtc2cuZmllbGRzPy5yb3V0aW5nS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05dOiBzZW1jb252X29ic29sZXRlXzEuTUVTU0FHSU5HX09QRVJBVElPTl9WQUxVRV9QUk9DRVNTLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfb2Jzb2xldGVfMS5PTERfQVRUUl9NRVNTQUdJTkdfTUVTU0FHRV9JRF06IG1zZz8ucHJvcGVydGllcy5tZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfTUVTU0FHSU5HX0NPTlZFUlNBVElPTl9JRF06IG1zZz8ucHJvcGVydGllcy5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBsaW5rcyxcbiAgICAgICAgICAgICAgICB9LCBwYXJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvbnN1bWVIb29rIH0gPSBzZWxmLmdldENvbmZpZygpO1xuICAgICAgICAgICAgICAgIGlmIChjb25zdW1lSG9vaykge1xuICAgICAgICAgICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gY29uc3VtZUhvb2soc3BhbiwgeyBtb2R1bGVWZXJzaW9uLCBtc2cgfSksIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdhbXFwbGliIGluc3RydW1lbnRhdGlvbjogY29uc3VtZXJIb29rIGVycm9yJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnM/Lm5vQWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBtZXNzYWdlIG9uIHRoZSBjaGFubmVsIHNvIHdlIGNhbiBjbG9zZSB0aGUgc3BhbiBvbiBhY2tBbGwgZXRjXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbdXRpbHNfMS5DSEFOTkVMX1NQQU5TX05PVF9FTkRFRF0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lT2ZDb25zdW1lOiAoMCwgY29yZV8xLmhyVGltZSkoKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBzcGFuIG9uIHRoZSBtZXNzYWdlLCBzbyB3ZSBjYW4gZW5kIGl0IHdoZW4gdXNlciBjYWxsICdhY2snIG9uIGl0XG4gICAgICAgICAgICAgICAgICAgIG1zZ1t1dGlsc18xLk1FU1NBR0VfU1RPUkVEX1NQQU5dID0gc3BhbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0Q29udGV4dCA9IHBhcmVudENvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJlbnRDb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIDogYXBpXzEuUk9PVF9DT05URVhUO1xuICAgICAgICAgICAgICAgIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKHNldENvbnRleHQsIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9uTWVzc2FnZS5jYWxsKHRoaXMsIG1zZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/Lm5vQWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbENvbnN1bWVFbmRIb29rKHNwYW4sIG1zZywgZmFsc2UsIHR5cGVzXzEuRW5kT3BlcmF0aW9uLkF1dG9BY2spO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhcmd1bWVudHNbMV0gPSBwYXRjaGVkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldENvbmZpcm1lZFB1Ymxpc2hQYXRjaChtb2R1bGVWZXJzaW9uLCBvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbmZpcm1lZFB1Ymxpc2goZXhjaGFuZ2UsIHJvdXRpbmdLZXksIGNvbnRlbnQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IHsgc3BhbiwgbW9kaWZpZWRPcHRpb25zIH0gPSBzZWxmLmNyZWF0ZVB1Ymxpc2hTcGFuKHNlbGYsIGV4Y2hhbmdlLCByb3V0aW5nS2V5LCBjaGFubmVsLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHsgcHVibGlzaEhvb2sgfSA9IHNlbGYuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBpZiAocHVibGlzaEhvb2spIHtcbiAgICAgICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gcHVibGlzaEhvb2soc3Bhbiwge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBleGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgcm91dGluZ0tleSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbW9kaWZpZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBpc0NvbmZpcm1DaGFubmVsOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLCBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ2FtcXBsaWIgaW5zdHJ1bWVudGF0aW9uOiBwdWJsaXNoSG9vayBlcnJvcicsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXRjaGVkT25Db25maXJtID0gZnVuY3Rpb24gKGVyciwgb2spIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz8uY2FsbCh0aGlzLCBlcnIsIG9rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcHVibGlzaENvbmZpcm1Ib29rIH0gPSBzZWxmLmdldENvbmZpZygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHVibGlzaENvbmZpcm1Ib29rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gcHVibGlzaENvbmZpcm1Ib29rKHNwYW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmdLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmlybUNoYW5uZWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUVycm9yOiBlcnIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignYW1xcGxpYiBpbnN0cnVtZW50YXRpb246IHB1Ymxpc2hDb25maXJtSG9vayBlcnJvcicsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIm1lc3NhZ2UgY29uZmlybWF0aW9uIGhhcyBiZWVuIG5hY2snZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgY29uZmlybSBjaGFubmVsIHB1Ymxpc2ggZnVuY3Rpb24gaXMgc3RvcmluZyB0aGUgbWVzc2FnZSBpbiBxdWV1ZSBhbmQgcmVnaXN0ZXJpbmcgdGhlIGNhbGxiYWNrIGZvciBicm9rZXIgY29uZmlybS5cbiAgICAgICAgICAgIC8vIHNwYW4gZW5kcyBpbiB0aGUgcGF0Y2hlZCBjYWxsYmFjay5cbiAgICAgICAgICAgIGNvbnN0IG1hcmtlZENvbnRleHQgPSAoMCwgdXRpbHNfMS5tYXJrQ29uZmlybUNoYW5uZWxUcmFjaW5nKShhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3VtZW50c0NvcHkgPSBbLi4uYXJndW1lbnRzXTtcbiAgICAgICAgICAgIGFyZ3VtZW50c0NvcHlbM10gPSBtb2RpZmllZE9wdGlvbnM7XG4gICAgICAgICAgICBhcmd1bWVudHNDb3B5WzRdID0gYXBpXzEuY29udGV4dC5iaW5kKCgwLCB1dGlsc18xLnVubWFya0NvbmZpcm1DaGFubmVsVHJhY2luZykoYXBpXzEudHJhY2Uuc2V0U3BhbihtYXJrZWRDb250ZXh0LCBzcGFuKSksIHBhdGNoZWRPbkNvbmZpcm0pO1xuICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChtYXJrZWRDb250ZXh0LCBvcmlnaW5hbC5iaW5kKHRoaXMsIC4uLmFyZ3VtZW50c0NvcHkpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0UHVibGlzaFBhdGNoKG1vZHVsZVZlcnNpb24sIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcHVibGlzaChleGNoYW5nZSwgcm91dGluZ0tleSwgY29udGVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzQ29uZmlybUNoYW5uZWxUcmFjaW5nKShhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSkge1xuICAgICAgICAgICAgICAgIC8vIHdvcmsgYWxyZWFkeSBkb25lXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcztcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNwYW4sIG1vZGlmaWVkT3B0aW9ucyB9ID0gc2VsZi5jcmVhdGVQdWJsaXNoU3BhbihzZWxmLCBleGNoYW5nZSwgcm91dGluZ0tleSwgY2hhbm5lbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwdWJsaXNoSG9vayB9ID0gc2VsZi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAocHVibGlzaEhvb2spIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHB1Ymxpc2hIb29rKHNwYW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmdLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbW9kaWZpZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maXJtQ2hhbm5lbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pLCBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignYW1xcGxpYiBpbnN0cnVtZW50YXRpb246IHB1Ymxpc2hIb29rIGVycm9yJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIG5vcm1hbCBjaGFubmVsIHB1Ymxpc2ggZnVuY3Rpb24gaXMgb25seSBzdG9yaW5nIHRoZSBtZXNzYWdlIGluIHF1ZXVlLlxuICAgICAgICAgICAgICAgIC8vIGl0IGRvZXMgbm90IHNlbmQgaXQgYW5kIHdhaXRzIGZvciBhbiBhY2ssIHNvIHRoZSBzcGFuIGR1cmF0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHZlcnkgc2hvcnQuXG4gICAgICAgICAgICAgICAgY29uc3QgYXJndW1lbnRzQ29weSA9IFsuLi5hcmd1bWVudHNdO1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50c0NvcHlbM10gPSBtb2RpZmllZE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXMgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHNDb3B5KTtcbiAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgY3JlYXRlUHVibGlzaFNwYW4oc2VsZiwgZXhjaGFuZ2UsIHJvdXRpbmdLZXksIGNoYW5uZWwsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV4Y2hhbmdlID0gKDAsIHV0aWxzXzEubm9ybWFsaXplRXhjaGFuZ2UpKGV4Y2hhbmdlKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHNlbGYudHJhY2VyLnN0YXJ0U3BhbihgcHVibGlzaCAke25vcm1hbGl6ZWRFeGNoYW5nZX1gLCB7XG4gICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5QUk9EVUNFUixcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAuLi5jaGFubmVsLmNvbm5lY3Rpb25bdXRpbHNfMS5DT05ORUNUSU9OX0FUVFJJQlVURVNdLFxuICAgICAgICAgICAgICAgIFtzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05dOiBleGNoYW5nZSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkRdOiBzZW1jb252X29ic29sZXRlXzEuTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkRfVkFMVUVfVE9QSUMsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfb2Jzb2xldGVfMS5BVFRSX01FU1NBR0lOR19SQUJCSVRNUV9ST1VUSU5HX0tFWV06IHJvdXRpbmdLZXksXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfb2Jzb2xldGVfMS5PTERfQVRUUl9NRVNTQUdJTkdfTUVTU0FHRV9JRF06IG9wdGlvbnM/Lm1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfTUVTU0FHSU5HX0NPTlZFUlNBVElPTl9JRF06IG9wdGlvbnM/LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbW9kaWZpZWRPcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICAgICAgbW9kaWZpZWRPcHRpb25zLmhlYWRlcnMgPSBtb2RpZmllZE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgYXBpXzEucHJvcGFnYXRpb24uaW5qZWN0KGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksIG1vZGlmaWVkT3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgICAgcmV0dXJuIHsgc3BhbiwgbW9kaWZpZWRPcHRpb25zIH07XG4gICAgfVxuICAgIGVuZENvbnN1bWVyU3BhbihtZXNzYWdlLCBpc1JlamVjdGVkLCBvcGVyYXRpb24sIHJlcXVldWUpIHtcbiAgICAgICAgY29uc3Qgc3RvcmVkU3BhbiA9IG1lc3NhZ2VbdXRpbHNfMS5NRVNTQUdFX1NUT1JFRF9TUEFOXTtcbiAgICAgICAgaWYgKCFzdG9yZWRTcGFuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXNSZWplY3RlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0b3JlZFNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcGVyYXRpb24gIT09IHR5cGVzXzEuRW5kT3BlcmF0aW9uLkNoYW5uZWxDbG9zZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uICE9PSB0eXBlc18xLkVuZE9wZXJhdGlvbi5DaGFubmVsRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtvcGVyYXRpb259IGNhbGxlZCBvbiBtZXNzYWdlJHtyZXF1ZXVlID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICcgd2l0aCByZXF1ZXVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXF1ZXVlID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJyB3aXRob3V0IHJlcXVldWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ31gXG4gICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsQ29uc3VtZUVuZEhvb2soc3RvcmVkU3BhbiwgbWVzc2FnZSwgaXNSZWplY3RlZCwgb3BlcmF0aW9uKTtcbiAgICAgICAgc3RvcmVkU3Bhbi5lbmQoKTtcbiAgICAgICAgbWVzc2FnZVt1dGlsc18xLk1FU1NBR0VfU1RPUkVEX1NQQU5dID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRBbGxTcGFuc09uQ2hhbm5lbChjaGFubmVsLCBpc1JlamVjdGVkLCBvcGVyYXRpb24sIHJlcXVldWUpIHtcbiAgICAgICAgY29uc3Qgc3BhbnNOb3RFbmRlZCA9IGNoYW5uZWxbdXRpbHNfMS5DSEFOTkVMX1NQQU5TX05PVF9FTkRFRF0gPz8gW107XG4gICAgICAgIHNwYW5zTm90RW5kZWQuZm9yRWFjaChtc2dEZXRhaWxzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5kQ29uc3VtZXJTcGFuKG1zZ0RldGFpbHMubXNnLCBpc1JlamVjdGVkLCBvcGVyYXRpb24sIHJlcXVldWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2hhbm5lbFt1dGlsc18xLkNIQU5ORUxfU1BBTlNfTk9UX0VOREVEXSA9IFtdO1xuICAgIH1cbiAgICBjYWxsQ29uc3VtZUVuZEhvb2soc3BhbiwgbXNnLCByZWplY3RlZCwgZW5kT3BlcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgY29uc3VtZUVuZEhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghY29uc3VtZUVuZEhvb2spXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBjb25zdW1lRW5kSG9vayhzcGFuLCB7IG1zZywgcmVqZWN0ZWQsIGVuZE9wZXJhdGlvbiB9KSwgZSA9PiB7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ2FtcXBsaWIgaW5zdHJ1bWVudGF0aW9uOiBjb25zdW1lckVuZEhvb2sgZXJyb3InLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICAgIGNoZWNrQ29uc3VtZVRpbWVvdXRPbkNoYW5uZWwoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9ICgwLCBjb3JlXzEuaHJUaW1lKSgpO1xuICAgICAgICBjb25zdCBzcGFuc05vdEVuZGVkID0gY2hhbm5lbFt1dGlsc18xLkNIQU5ORUxfU1BBTlNfTk9UX0VOREVEXSA/PyBbXTtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGNvbnN0IHsgY29uc3VtZVRpbWVvdXRNcyB9ID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYW5zTm90RW5kZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJNZXNzYWdlID0gc3BhbnNOb3RFbmRlZFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVGcm9tQ29uc3VtZSA9ICgwLCBjb3JlXzEuaHJUaW1lRHVyYXRpb24pKGN1cnJNZXNzYWdlLnRpbWVPZkNvbnN1bWUsIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgIGlmICgoMCwgY29yZV8xLmhyVGltZVRvTWlsbGlzZWNvbmRzKSh0aW1lRnJvbUNvbnN1bWUpIDwgY29uc3VtZVRpbWVvdXRNcykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbmRDb25zdW1lclNwYW4oY3Vyck1lc3NhZ2UubXNnLCBudWxsLCB0eXBlc18xLkVuZE9wZXJhdGlvbi5JbnN0cnVtZW50YXRpb25UaW1lb3V0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuc05vdEVuZGVkLnNwbGljZSgwLCBpKTtcbiAgICB9XG59XG5leHBvcnRzLkFtcXBsaWJJbnN0cnVtZW50YXRpb24gPSBBbXFwbGliSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW1xcGxpYi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbmRPcGVyYXRpb24gPSBleHBvcnRzLkRFRkFVTFRfQ09ORklHID0gZXhwb3J0cy5BbXFwbGliSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBhbXFwbGliXzEgPSByZXF1aXJlKFwiLi9hbXFwbGliXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQW1xcGxpYkluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYW1xcGxpYl8xLkFtcXBsaWJJbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiREVGQVVMVF9DT05GSUdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuREVGQVVMVF9DT05GSUc7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFbmRPcGVyYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuRW5kT3BlcmF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFUVFJfRkFBU19OQU1FID0gZXhwb3J0cy5BVFRSX0ZBQVNfQ09MRFNUQVJUID0gZXhwb3J0cy5BVFRSX0NMT1VEX0FDQ09VTlRfSUQgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBUaGUgY2xvdWQgYWNjb3VudCBJRCB0aGUgcmVzb3VyY2UgaXMgYXNzaWduZWQgdG8uXG4gKlxuICogQGV4YW1wbGUgMTExMTExMTExMTExXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCA9ICdjbG91ZC5hY2NvdW50LmlkJztcbi8qKlxuICogQSBib29sZWFuIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgc2VydmVybGVzcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUgKGFrYSBjb2xkLXN0YXJ0KS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9GQUFTX0NPTERTVEFSVCA9ICdmYWFzLmNvbGRzdGFydCc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzaW5nbGUgZnVuY3Rpb24gdGhhdCB0aGlzIHJ1bnRpbWUgaW5zdGFuY2UgZXhlY3V0ZXMuXG4gKlxuICogQGV4YW1wbGUgbXktZnVuY3Rpb25cbiAqIEBleGFtcGxlIG15YXp1cmVmdW5jdGlvbmFwcC9zb21lLWZ1bmN0aW9uLW5hbWVcbiAqXG4gKiBAbm90ZSBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBhcyBjb25maWd1cmVkL2RlcGxveWVkIG9uIHRoZSBGYWFTXG4gKiBwbGF0Zm9ybSBhbmQgaXMgdXN1YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2tcbiAqIGZ1bmN0aW9uICh3aGljaCBtYXkgYmUgc3RvcmVkIGluIHRoZVxuICogW2Bjb2RlLm5hbWVzcGFjZWAvYGNvZGUuZnVuY3Rpb24ubmFtZWBdKC9kb2NzL2dlbmVyYWwvYXR0cmlidXRlcy5tZCNzb3VyY2UtY29kZS1hdHRyaWJ1dGVzKVxuICogc3BhbiBhdHRyaWJ1dGVzKS5cbiAqXG4gKiBGb3Igc29tZSBjbG91ZCBwcm92aWRlcnMsIHRoZSBhYm92ZSBkZWZpbml0aW9uIGlzIGFtYmlndW91cy4gVGhlIGZvbGxvd2luZ1xuICogZGVmaW5pdGlvbiBvZiBmdW5jdGlvbiBuYW1lICoqTVVTVCoqIGJlIHVzZWQgZm9yIHRoaXMgYXR0cmlidXRlXG4gKiAoYW5kIGNvbnNlcXVlbnRseSB0aGUgc3BhbiBuYW1lKSBmb3IgdGhlIGxpc3RlZCBjbG91ZCBwcm92aWRlcnMvcHJvZHVjdHM6XG4gKlxuICogICAtICoqQXp1cmU6KiogIFRoZSBmdWxsIG5hbWUgYDxGVU5DQVBQPi88RlVOQz5gLCBpLmUuLCBmdW5jdGlvbiBhcHAgbmFtZVxuICogICAgIGZvbGxvd2VkIGJ5IGEgZm9yd2FyZCBzbGFzaCBmb2xsb3dlZCBieSB0aGUgZnVuY3Rpb24gbmFtZSAodGhpcyBmb3JtXG4gKiAgICAgY2FuIGFsc28gYmUgc2VlbiBpbiB0aGUgcmVzb3VyY2UgSlNPTiBmb3IgdGhlIGZ1bmN0aW9uKS5cbiAqICAgICBUaGlzIG1lYW5zIHRoYXQgYSBzcGFuIGF0dHJpYnV0ZSAqKk1VU1QqKiBiZSB1c2VkLCBhcyBhbiBBenVyZSBmdW5jdGlvblxuICogICAgIGFwcCBjYW4gaG9zdCBtdWx0aXBsZSBmdW5jdGlvbnMgdGhhdCB3b3VsZCB1c3VhbGx5IHNoYXJlXG4gKiAgICAgYSBUcmFjZXJQcm92aWRlciAoc2VlIGFsc28gdGhlIGBjbG91ZC5yZXNvdXJjZV9pZGAgYXR0cmlidXRlKS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9GQUFTX05BTUUgPSAnZmFhcy5uYW1lJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFUVFJfRkFBU19JRCA9IGV4cG9ydHMuQVRUUl9GQUFTX0VYRUNVVElPTiA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgY29uc3RhbnRzIGZvciB2YWx1ZXMgdGhhdCB3aGVyZSByZXBsYWNlZC9yZW1vdmVkIGZyb21cbiAqIFNlbWFudGljIENvbnZlbnRpb25zIGxvbmcgZW5vdWdoIGFnbyB0aGF0IHRoZXkgZG8gbm90IGhhdmUgYEFUVFJfKmBcbiAqIGNvbnN0YW50cyBpbiB0aGUgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYCBwYWNrYWdlLiBFdmVudHVhbGx5XG4gKiBpdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgaW5zdHJ1bWVudGlvbiB3aWxsIGJlIHVwZGF0ZWQgdG8gZW1pdCB0ZWxlbWV0cnlcbiAqIHVzaW5nIG1vZGVybiBTZW1hbnRpYyBDb252ZW50aW9ucywgZHJvcHBpbmcgdGhlIG5lZWQgZm9yIHRoZSBjb25zdGFudHMgaW5cbiAqIHRoaXMgZmlsZS5cbiAqL1xuLyoqXG4gKiBUaGUgZXhlY3V0aW9uIElEIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGV4ZWN1dGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9GQUFTX0lOVk9DQVRJT05fSUQgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5BVFRSX0ZBQVNfRVhFQ1VUSU9OID0gJ2ZhYXMuZXhlY3V0aW9uJztcbi8qKlxuKiBUaGUgdW5pcXVlIElEIG9mIHRoZSBzaW5nbGUgZnVuY3Rpb24gdGhhdCB0aGlzIHJ1bnRpbWUgaW5zdGFuY2UgZXhlY3V0ZXMuXG4qXG4qIE5vdGU6IERlcGVuZGluZyBvbiB0aGUgY2xvdWQgcHJvdmlkZXIsIHVzZTpcblxuKiAqKkFXUyBMYW1iZGE6KiogVGhlIGZ1bmN0aW9uIFtBUk5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9hd3MtYXJucy1hbmQtbmFtZXNwYWNlcy5odG1sKS5cblRha2UgY2FyZSBub3QgdG8gdXNlIHRoZSAmIzM0O2ludm9rZWQgQVJOJiMzNDsgZGlyZWN0bHkgYnV0IHJlcGxhY2UgYW55XG5bYWxpYXMgc3VmZml4XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLWFsaWFzZXMuaHRtbCkgd2l0aCB0aGUgcmVzb2x2ZWQgZnVuY3Rpb24gdmVyc2lvbiwgYXMgdGhlIHNhbWUgcnVudGltZSBpbnN0YW5jZSBtYXkgYmUgaW52b2thYmxlIHdpdGggbXVsdGlwbGVcbmRpZmZlcmVudCBhbGlhc2VzLlxuKiAqKkdDUDoqKiBUaGUgW1VSSSBvZiB0aGUgcmVzb3VyY2VdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9pYW0vZG9jcy9mdWxsLXJlc291cmNlLW5hbWVzKVxuKiAqKkF6dXJlOioqIFRoZSBbRnVsbHkgUXVhbGlmaWVkIFJlc291cmNlIElEXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9yZXN0L2FwaS9yZXNvdXJjZXMvcmVzb3VyY2VzL2dldC1ieS1pZCkuXG5cbk9uIHNvbWUgcHJvdmlkZXJzLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgZnVsbCBJRCBhdCBzdGFydHVwLFxud2hpY2ggaXMgd2h5IHRoaXMgZmllbGQgY2Fubm90IGJlIG1hZGUgcmVxdWlyZWQuIEZvciBleGFtcGxlLCBvbiBBV1MgdGhlIGFjY291bnQgSURcbnBhcnQgb2YgdGhlIEFSTiBpcyBub3QgYXZhaWxhYmxlIHdpdGhvdXQgY2FsbGluZyBhbm90aGVyIEFXUyBBUElcbndoaWNoIG1heSBiZSBkZWVtZWQgdG9vIHNsb3cgZm9yIGEgc2hvcnQtcnVubmluZyBsYW1iZGEgZnVuY3Rpb24uXG5BcyBhbiBhbHRlcm5hdGl2ZSwgY29uc2lkZXIgc2V0dGluZyBgZmFhcy5pZGAgYXMgYSBzcGFuIGF0dHJpYnV0ZSBpbnN0ZWFkLlxuKlxuKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9DTE9VRF9SRVNPVVJDRV9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuKi9cbmV4cG9ydHMuQVRUUl9GQUFTX0lEID0gJ2ZhYXMuaWQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi1vYnNvbGV0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTkuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLWxhbWJkYSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bd3NMYW1iZGFJbnN0cnVtZW50YXRpb24gPSBleHBvcnRzLkFXU19IQU5ETEVSX1NUUkVBTUlOR19SRVNQT05TRSA9IGV4cG9ydHMuQVdTX0hBTkRMRVJfU1RSRUFNSU5HX1NZTUJPTCA9IGV4cG9ydHMubGFtYmRhTWF4SW5pdEluTWlsbGlzZWNvbmRzID0gdm9pZCAwO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IHNlbWNvbnZfb2Jzb2xldGVfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnYtb2Jzb2xldGVcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBoZWFkZXJHZXR0ZXIgPSB7XG4gICAga2V5cyhjYXJyaWVyKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjYXJyaWVyKTtcbiAgICB9LFxuICAgIGdldChjYXJyaWVyLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGNhcnJpZXJba2V5XTtcbiAgICB9LFxufTtcbmV4cG9ydHMubGFtYmRhTWF4SW5pdEluTWlsbGlzZWNvbmRzID0gMTAwMDA7XG5leHBvcnRzLkFXU19IQU5ETEVSX1NUUkVBTUlOR19TWU1CT0wgPSBTeW1ib2wuZm9yKCdhd3MubGFtYmRhLnJ1bnRpbWUuaGFuZGxlci5zdHJlYW1pbmcnKTtcbmV4cG9ydHMuQVdTX0hBTkRMRVJfU1RSRUFNSU5HX1JFU1BPTlNFID0gJ3Jlc3BvbnNlJztcbmNsYXNzIEF3c0xhbWJkYUluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHRhc2tSb290ID0gcHJvY2Vzcy5lbnYuTEFNQkRBX1RBU0tfUk9PVDtcbiAgICAgICAgY29uc3QgaGFuZGxlckRlZiA9IHRoaXMuZ2V0Q29uZmlnKCkubGFtYmRhSGFuZGxlciA/PyBwcm9jZXNzLmVudi5fSEFORExFUjtcbiAgICAgICAgLy8gX0hBTkRMRVIgYW5kIExBTUJEQV9UQVNLX1JPT1QgYXJlIGFsd2F5cyBkZWZpbmVkIGluIExhbWJkYSBidXQgZ3VhcmQgYmFpbCBvdXQgaWYgaW4gdGhlIGZ1dHVyZSB0aGlzIGNoYW5nZXMuXG4gICAgICAgIGlmICghdGFza1Jvb3QgfHwgIWhhbmRsZXJEZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ1NraXBwaW5nIGxhbWJkYSBpbnN0cnVtZW50YXRpb246IG5vIF9IQU5ETEVSL2xhbWJkYUhhbmRsZXIgb3IgTEFNQkRBX1RBU0tfUk9PVC4nLCB7IHRhc2tSb290LCBoYW5kbGVyRGVmIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBwYXRoLmJhc2VuYW1lKGhhbmRsZXJEZWYpO1xuICAgICAgICBjb25zdCBtb2R1bGVSb290ID0gaGFuZGxlckRlZi5zdWJzdHJpbmcoMCwgaGFuZGxlckRlZi5sZW5ndGggLSBoYW5kbGVyLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IFttb2R1bGUsIGZ1bmN0aW9uTmFtZV0gPSBoYW5kbGVyLnNwbGl0KCcuJywgMik7XG4gICAgICAgIC8vIExhbWJkYSBsb2FkcyB1c2VyIGZ1bmN0aW9uIHVzaW5nIGFuIGFic29sdXRlIHBhdGguXG4gICAgICAgIGxldCBmaWxlbmFtZSA9IHBhdGgucmVzb2x2ZSh0YXNrUm9vdCwgbW9kdWxlUm9vdCwgbW9kdWxlKTtcbiAgICAgICAgaWYgKCFmaWxlbmFtZS5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgICAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSB0byBrbm93IGluIGFkdmFuY2UgaWYgdGhlIHVzZXIgaGFzIGEganMsIG1qcyBvciBjanMgZmlsZS5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIC5qcyBmaWxlIGV4aXN0cyBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhlIG5leHQga25vd24gcG9zc2liaWxpdGllcyAoLm1qcywgLmNqcykuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZzLnN0YXRTeW5jKGAke2ZpbGVuYW1lfS5qc2ApO1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lICs9ICcuanMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmcy5zdGF0U3luYyhgJHtmaWxlbmFtZX0ubWpzYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIC5tanMgKEVTTSlcbiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0gJy5tanMnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZTIpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLnN0YXRTeW5jKGAke2ZpbGVuYW1lfS5janNgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIC5janMgKENvbW1vbkpTKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0gJy5janMnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy53YXJuKCdObyBoYW5kbGVyIGZpbGUgd2FzIGFibGUgdG8gcmVzb2x2ZWQgd2l0aCBvbmUgb2YgdGhlIGtub3duIGV4dGVuc2lvbnMgZm9yIHRoZSBmaWxlJywgZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ0luc3RydW1lbnRpbmcgbGFtYmRhIGhhbmRsZXInLCB7XG4gICAgICAgICAgICB0YXNrUm9vdCxcbiAgICAgICAgICAgIGhhbmRsZXJEZWYsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgbW9kdWxlUm9vdCxcbiAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFtYmRhU3RhcnRUaW1lID0gdGhpcy5nZXRDb25maWcoKS5sYW1iZGFTdGFydFRpbWUgfHxcbiAgICAgICAgICAgIERhdGUubm93KCkgLSBNYXRoLmZsb29yKDEwMDAgKiBwcm9jZXNzLnVwdGltZSgpKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihcbiAgICAgICAgICAgIC8vIE5COiBUaGUgcGF0Y2hpbmcgaW5mcmFzdHJ1Y3R1cmUgc2VlbXMgdG8gbWF0Y2ggbmFtZXMgYmFja3dhcmRzLCB0aGlzIG11c3QgYmUgdGhlIGZpbGVuYW1lLCB3aGlsZVxuICAgICAgICAgICAgLy8gSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUgbXVzdCBiZSB0aGUgbW9kdWxlIG5hbWUuXG4gICAgICAgICAgICBmaWxlbmFtZSwgWycqJ10sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKG1vZHVsZSwgWycqJ10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzW2Z1bmN0aW9uTmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgZnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsIGZ1bmN0aW9uTmFtZSwgdGhpcy5fZ2V0SGFuZGxlcihsYW1iZGFTdGFydFRpbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICAgICAgfSwgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsIGZ1bmN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX2dldEhhbmRsZXIoaGFuZGxlckxvYWRTdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZEhhbmRsZXIgPSB0aGlzLl9nZXRQYXRjaEhhbmRsZXIob3JpZ2luYWwsIGhhbmRsZXJMb2FkU3RhcnRUaW1lKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0cmVhbWluZ0hhbmRsZXIob3JpZ2luYWwpKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RyZWFtaW5nIGhhbmRsZXJzIGhhdmUgc3BlY2lhbCBzeW1ib2xzIHRoYXQgd2UgbmVlZCB0byBjb3B5IG92ZXIgdG8gdGhlIHBhdGNoZWQgaGFuZGxlci5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9yaWdpbmFsKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkSGFuZGxlcltzeW1ib2xdID0gb3JpZ2luYWxbc3ltYm9sXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGF0Y2hlZEhhbmRsZXI7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRQYXRjaEhhbmRsZXIob3JpZ2luYWwsIGxhbWJkYVN0YXJ0VGltZSkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uJyk7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIGxldCByZXF1ZXN0SGFuZGxlZEJlZm9yZSA9IGZhbHNlO1xuICAgICAgICBsZXQgcmVxdWVzdElzQ29sZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgZnVuY3Rpb24gX29uUmVxdWVzdCgpIHtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SGFuZGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIC8vIE5vbi1maXJzdCByZXF1ZXN0cyBjYW5ub3QgYmUgY29sZHN0YXJ0LlxuICAgICAgICAgICAgICAgIHJlcXVlc3RJc0NvbGRTdGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52LkFXU19MQU1CREFfSU5JVElBTElaQVRJT05fVFlQRSA9PT1cbiAgICAgICAgICAgICAgICAgICAgJ3Byb3Zpc2lvbmVkLWNvbmN1cnJlbmN5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBzYW5kYm94IGVudmlyb25tZW50IGlzIGluaXRpYWxpemVkIHdpdGggcHJvdmlzaW9uZWQgY29uY3VycmVuY3ksXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhlIGZpcnN0IHJlcXVlc3RzIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhcyBjb2xkc3RhcnQuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJc0NvbGRTdGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBpcyBwcm9hY3RpdmUgaW5pdGlhbGl6YXRpb24gb3Igbm90OlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2Fhcm9uc3R1eXZlbmJlcmcuY29tL3Bvc3RzL3VuZGVyc3RhbmRpbmctcHJvYWN0aXZlLWluaXRpYWxpemF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3NlZFRpbWVTaW5jZUhhbmRsZXJMb2FkID0gRGF0ZS5ub3coKSAtIGxhbWJkYVN0YXJ0VGltZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvYWN0aXZlSW5pdGlhbGl6YXRpb24gPSBwYXNzZWRUaW1lU2luY2VIYW5kbGVyTG9hZCA+IGV4cG9ydHMubGFtYmRhTWF4SW5pdEluTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBzYW5kYm94IGhhcyBiZWVuIGluaXRpYWxpemVkIHByb2FjdGl2ZWx5IGJlZm9yZSB0aGUgYWN0dWFsIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhlIGZpcnN0IHJlcXVlc3RzIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhcyBjb2xkc3RhcnQuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJc0NvbGRTdGFydCA9ICFwcm9hY3RpdmVJbml0aWFsaXphdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZWRCZWZvcmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc1N0cmVhbWluZ0hhbmRsZXIob3JpZ2luYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFN0cmVhbWluZ0hhbmRsZXIoXG4gICAgICAgICAgICAvLyBUaGUgZXZlbnQgY2FuIGJlIGEgdXNlciB0eXBlLCBpdCB0cnVseSBpcyBhbnkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgZXZlbnQsIHJlc3BvbnNlU3RyZWFtLCBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgX29uUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHBsdWdpbi5fZGV0ZXJtaW5lUGFyZW50KGV2ZW50LCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLl9jcmVhdGVTcGFuRm9yUmVxdWVzdChldmVudCwgY29udGV4dCwgcmVxdWVzdElzQ29sZFN0YXJ0LCBwYXJlbnQpO1xuICAgICAgICAgICAgICAgIHBsdWdpbi5fYXBwbHlSZXF1ZXN0SG9vayhzcGFuLCBldmVudCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKHBhcmVudCwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF5YmVQcm9taXNlID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtldmVudCwgcmVzcG9uc2VTdHJlYW0sIGNvbnRleHRdKSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIHN5bmNocm9ub3VzbHkgYmVmb3JlIHJlc29sdmluZyBwcm9taXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fYXBwbHlSZXNwb25zZUhvb2soc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZW5kU3BhbihzcGFuLCBlcnJvciwgKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwbHVnaW4uX2hhbmRsZVByb21pc2VSZXN1bHQoc3BhbiwgbWF5YmVQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRIYW5kbGVyKFxuICAgICAgICAvLyBUaGUgZXZlbnQgY2FuIGJlIGEgdXNlciB0eXBlLCBpdCB0cnVseSBpcyBhbnkuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGV2ZW50LCBjb250ZXh0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgX29uUmVxdWVzdCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gcGx1Z2luLl9kZXRlcm1pbmVQYXJlbnQoZXZlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHBsdWdpbi5fY3JlYXRlU3BhbkZvclJlcXVlc3QoZXZlbnQsIGNvbnRleHQsIHJlcXVlc3RJc0NvbGRTdGFydCwgcGFyZW50KTtcbiAgICAgICAgICAgIHBsdWdpbi5fYXBwbHlSZXF1ZXN0SG9vayhzcGFuLCBldmVudCwgY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4ocGFyZW50LCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIExhbWJkYSBzZWVtcyB0byBwYXNzIGEgY2FsbGJhY2sgZXZlbiBpZiBoYW5kbGVyIGlzIG9mIFByb21pc2UgZm9ybSwgc28gd2Ugd3JhcCBhbGwgdGhlIHRpbWUgYmVmb3JlIGNhbGxpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgaGFuZGxlciBhbmQgc2VlIGlmIHRoZSByZXN1bHQgaXMgYSBQcm9taXNlIG9yIG5vdC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBjYWxsYmFjayBpcyB1c3VhbGx5IGlnbm9yZWQuIElmXG4gICAgICAgICAgICAgICAgLy8gdGhlIGhhbmRsZXIgaGFwcGVuZWQgdG8gYm90aCBjYWxsIHRoZSBjYWxsYmFjayBhbmQgY29tcGxldGUgYSByZXR1cm5lZCBQcm9taXNlLCB3aGljaGV2ZXIgaGFwcGVucyBmaXJzdCB3aWxsXG4gICAgICAgICAgICAgICAgLy8gd2luIGFuZCB0aGUgbGF0dGVyIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSBwbHVnaW4uX3dyYXBDYWxsYmFjayhjYWxsYmFjaywgc3Bhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF5YmVQcm9taXNlID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtldmVudCwgY29udGV4dCwgd3JhcHBlZENhbGxiYWNrXSksIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gc3luY2hyb25vdXNseSBiZWZvcmUgcmVzb2x2aW5nIGNhbGxiYWNrIC8gcHJvbWlzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fYXBwbHlSZXNwb25zZUhvb2soc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLl9lbmRTcGFuKHNwYW4sIGVycm9yLCAoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5faGFuZGxlUHJvbWlzZVJlc3VsdChzcGFuLCBtYXliZVByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVTcGFuRm9yUmVxdWVzdChldmVudCwgY29udGV4dCwgcmVxdWVzdElzQ29sZFN0YXJ0LCBwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGNvbnRleHQuZnVuY3Rpb25OYW1lO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRTcGFuKG5hbWUsIHtcbiAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLlNFUlZFUixcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfRkFBU19FWEVDVVRJT05dOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfRkFBU19JRF06IGNvbnRleHQuaW52b2tlZEZ1bmN0aW9uQXJuLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEXTogQXdzTGFtYmRhSW5zdHJ1bWVudGF0aW9uLl9leHRyYWN0QWNjb3VudElkKGNvbnRleHQuaW52b2tlZEZ1bmN0aW9uQXJuKSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19DT0xEU1RBUlRdOiByZXF1ZXN0SXNDb2xkU3RhcnQsXG4gICAgICAgICAgICAgICAgLi4uQXdzTGFtYmRhSW5zdHJ1bWVudGF0aW9uLl9leHRyYWN0T3RoZXJFdmVudEZpZWxkcyhldmVudCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBwYXJlbnQpO1xuICAgIH1cbiAgICBfYXBwbHlSZXF1ZXN0SG9vayhzcGFuLCBldmVudCwgY29udGV4dCkge1xuICAgICAgICBjb25zdCB7IHJlcXVlc3RIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAocmVxdWVzdEhvb2spIHtcbiAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiByZXF1ZXN0SG9vayhzcGFuLCB7IGV2ZW50LCBjb250ZXh0IH0pLCBlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignYXdzLWxhbWJkYSBpbnN0cnVtZW50YXRpb246IHJlcXVlc3RIb29rIGVycm9yJywgZSk7XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaGFuZGxlUHJvbWlzZVJlc3VsdChzcGFuLCBtYXliZVByb21pc2UpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZVByb21pc2U/LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXliZVByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlSZXNwb25zZUhvb2soc3BhbiwgbnVsbCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMuX2VuZFNwYW4oc3BhbiwgdW5kZWZpbmVkLCAoKSA9PiByZXNvbHZlKHZhbHVlKSkpO1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5UmVzcG9uc2VIb29rKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX2VuZFNwYW4oc3BhbiwgZXJyLCAoKSA9PiByZWplY3QoZXJyKSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIHN5bmNocm9ub3VzIHJldHVybiB2YWx1ZXMgYnkgZW5kaW5nIHRoZSBzcGFuIGFuZCBhcHBseWluZyByZXNwb25zZSBob29rXG4gICAgICAgIHRoaXMuX2FwcGx5UmVzcG9uc2VIb29rKHNwYW4sIG51bGwsIG1heWJlUHJvbWlzZSk7XG4gICAgICAgIHRoaXMuX2VuZFNwYW4oc3BhbiwgdW5kZWZpbmVkLCAoKSA9PiB7IH0pO1xuICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlO1xuICAgIH1cbiAgICBfZGV0ZXJtaW5lUGFyZW50KGV2ZW50LCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBBd3NMYW1iZGFJbnN0cnVtZW50YXRpb24uX2RldGVybWluZVBhcmVudChldmVudCwgY29udGV4dCwgY29uZmlnLmV2ZW50Q29udGV4dEV4dHJhY3RvciB8fFxuICAgICAgICAgICAgQXdzTGFtYmRhSW5zdHJ1bWVudGF0aW9uLl9kZWZhdWx0RXZlbnRDb250ZXh0RXh0cmFjdG9yKTtcbiAgICB9XG4gICAgX2lzU3RyZWFtaW5nSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiAoaGFuZGxlcltleHBvcnRzLkFXU19IQU5ETEVSX1NUUkVBTUlOR19TWU1CT0xdID09PSBleHBvcnRzLkFXU19IQU5ETEVSX1NUUkVBTUlOR19SRVNQT05TRSk7XG4gICAgfVxuICAgIHNldFRyYWNlclByb3ZpZGVyKHRyYWNlclByb3ZpZGVyKSB7XG4gICAgICAgIHN1cGVyLnNldFRyYWNlclByb3ZpZGVyKHRyYWNlclByb3ZpZGVyKTtcbiAgICAgICAgdGhpcy5fdHJhY2VGb3JjZUZsdXNoZXIgPSB0aGlzLl90cmFjZUZvcmNlRmx1c2godHJhY2VyUHJvdmlkZXIpO1xuICAgIH1cbiAgICBfdHJhY2VGb3JjZUZsdXNoKHRyYWNlclByb3ZpZGVyKSB7XG4gICAgICAgIGlmICghdHJhY2VyUHJvdmlkZXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBsZXQgY3VycmVudFByb3ZpZGVyID0gdHJhY2VyUHJvdmlkZXI7XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFByb3ZpZGVyLmdldERlbGVnYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjdXJyZW50UHJvdmlkZXIgPSBjdXJyZW50UHJvdmlkZXIuZ2V0RGVsZWdhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRQcm92aWRlci5mb3JjZUZsdXNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFByb3ZpZGVyLmZvcmNlRmx1c2guYmluZChjdXJyZW50UHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldE1ldGVyUHJvdmlkZXIobWV0ZXJQcm92aWRlcikge1xuICAgICAgICBzdXBlci5zZXRNZXRlclByb3ZpZGVyKG1ldGVyUHJvdmlkZXIpO1xuICAgICAgICB0aGlzLl9tZXRyaWNGb3JjZUZsdXNoZXIgPSB0aGlzLl9tZXRyaWNGb3JjZUZsdXNoKG1ldGVyUHJvdmlkZXIpO1xuICAgIH1cbiAgICBfbWV0cmljRm9yY2VGbHVzaChtZXRlclByb3ZpZGVyKSB7XG4gICAgICAgIGlmICghbWV0ZXJQcm92aWRlcilcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQcm92aWRlciA9IG1ldGVyUHJvdmlkZXI7XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFByb3ZpZGVyLmZvcmNlRmx1c2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UHJvdmlkZXIuZm9yY2VGbHVzaC5iaW5kKGN1cnJlbnRQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX3dyYXBDYWxsYmFjayhvcmlnaW5hbCwgc3Bhbikge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZENhbGxiYWNrKGVyciwgcmVzKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdleGVjdXRpbmcgd3JhcHBlZCBsb29rdXAgY2FsbGJhY2sgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgIHBsdWdpbi5fYXBwbHlSZXNwb25zZUhvb2soc3BhbiwgZXJyLCByZXMpO1xuICAgICAgICAgICAgcGx1Z2luLl9lbmRTcGFuKHNwYW4sIGVyciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ2V4ZWN1dGluZyBvcmlnaW5hbCBsb29rdXAgY2FsbGJhY2sgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgW2VyciwgcmVzXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2VuZFNwYW4oc3BhbiwgZXJyLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlcnJNZXNzYWdlO1xuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICBlcnJNZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgY29uc3QgZmx1c2hlcnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNlRm9yY2VGbHVzaGVyKSB7XG4gICAgICAgICAgICBmbHVzaGVycy5wdXNoKHRoaXMuX3RyYWNlRm9yY2VGbHVzaGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnU3BhbnMgbWF5IG5vdCBiZSBleHBvcnRlZCBmb3IgdGhlIGxhbWJkYSBmdW5jdGlvbiBiZWNhdXNlIHdlIGFyZSBub3QgZm9yY2UgZmx1c2hpbmcgYmVmb3JlIGNhbGxiYWNrLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNGb3JjZUZsdXNoZXIpIHtcbiAgICAgICAgICAgIGZsdXNoZXJzLnB1c2godGhpcy5fbWV0cmljRm9yY2VGbHVzaGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnTWV0cmljcyBtYXkgbm90IGJlIGV4cG9ydGVkIGZvciB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJlY2F1c2Ugd2UgYXJlIG5vdCBmb3JjZSBmbHVzaGluZyBiZWZvcmUgY2FsbGJhY2suJyk7XG4gICAgICAgIH1cbiAgICAgICAgUHJvbWlzZS5hbGwoZmx1c2hlcnMpLnRoZW4oY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgX2FwcGx5UmVzcG9uc2VIb29rKHNwYW4sIGVyciwgcmVzKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2VIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAocmVzcG9uc2VIb29rKSB7XG4gICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gcmVzcG9uc2VIb29rKHNwYW4sIHsgZXJyLCByZXMgfSksIGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdhd3MtbGFtYmRhIGluc3RydW1lbnRhdGlvbjogcmVzcG9uc2VIb29rIGVycm9yJywgZSk7XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgX2V4dHJhY3RBY2NvdW50SWQoYXJuKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYXJuLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXRpYyBfZGVmYXVsdEV2ZW50Q29udGV4dEV4dHJhY3RvcihldmVudCkge1xuICAgICAgICAvLyBUaGUgZGVmYXVsdCBleHRyYWN0b3IgdHJpZXMgdG8gZ2V0IHNhbXBsZWQgdHJhY2UgaGVhZGVyIGZyb20gSFRUUCBoZWFkZXJzLlxuICAgICAgICBjb25zdCBodHRwSGVhZGVycyA9IGV2ZW50LmhlYWRlcnMgfHwge307XG4gICAgICAgIHJldHVybiBhcGlfMS5wcm9wYWdhdGlvbi5leHRyYWN0KGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIGh0dHBIZWFkZXJzLCBoZWFkZXJHZXR0ZXIpO1xuICAgIH1cbiAgICBzdGF0aWMgX2V4dHJhY3RPdGhlckV2ZW50RmllbGRzKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHt9O1xuICAgICAgICBjb25zdCBmdWxsVXJsID0gdGhpcy5fZXh0cmFjdEZ1bGxVcmwoZXZlbnQpO1xuICAgICAgICBpZiAoZnVsbFVybCkge1xuICAgICAgICAgICAgYW5zd2VyW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9VUkxfRlVMTF0gPSBmdWxsVXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgfVxuICAgIHN0YXRpYyBfZXh0cmFjdEZ1bGxVcmwoZXZlbnQpIHtcbiAgICAgICAgLy8gQVBJIGdhdGV3YXkgZW5jb2RlcyBhIGxvdCBvZiB1cmwgaW5mb3JtYXRpb24gaW4gdmFyaW91cyBwbGFjZXMgdG8gcmVjb21wdXRlIHRoaXNcbiAgICAgICAgaWYgKCFldmVudC5oZWFkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBkZWFsIHdpdGggY2FzZSB2YXJpYXRpb25zIChpbnN0ZWFkIG9mIG1ha2luZyBhIHRvbG93ZXIoKSBjb3B5IG9mIHRoZSBoZWFkZXJzKVxuICAgICAgICBmdW5jdGlvbiBmaW5kQW55KGV2ZW50LCBrZXkxLCBrZXkyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaGVhZGVyc1trZXkxXSA/PyBldmVudC5oZWFkZXJzW2tleTJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvc3QgPSBmaW5kQW55KGV2ZW50LCAnaG9zdCcsICdIb3N0Jyk7XG4gICAgICAgIGNvbnN0IHByb3RvID0gZmluZEFueShldmVudCwgJ3gtZm9yd2FyZGVkLXByb3RvJywgJ1gtRm9yd2FyZGVkLVByb3RvJyk7XG4gICAgICAgIGNvbnN0IHBvcnQgPSBmaW5kQW55KGV2ZW50LCAneC1mb3J3YXJkZWQtcG9ydCcsICdYLUZvcndhcmRlZC1Qb3J0Jyk7XG4gICAgICAgIGlmICghKHByb3RvICYmIGhvc3QgJiYgKGV2ZW50LnBhdGggfHwgZXZlbnQucmF3UGF0aCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbnN3ZXIgPSBwcm90byArICc6Ly8nICsgaG9zdDtcbiAgICAgICAgaWYgKHBvcnQpIHtcbiAgICAgICAgICAgIGFuc3dlciArPSAnOicgKyBwb3J0O1xuICAgICAgICB9XG4gICAgICAgIGFuc3dlciArPSBldmVudC5wYXRoID8/IGV2ZW50LnJhd1BhdGg7XG4gICAgICAgIGlmIChldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIgKz0gZmlyc3QgPyAnPycgOiAnJic7XG4gICAgICAgICAgICAgICAgYW5zd2VyICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgICAgICAgICAgIGFuc3dlciArPSAnPSc7XG4gICAgICAgICAgICAgICAgYW5zd2VyICs9IGVuY29kZVVSSUNvbXBvbmVudChldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnNba2V5XSk7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cbiAgICBzdGF0aWMgX2RldGVybWluZVBhcmVudChldmVudCwgY29udGV4dCwgZXZlbnRDb250ZXh0RXh0cmFjdG9yKSB7XG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZENvbnRleHQgPSAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gZXZlbnRDb250ZXh0RXh0cmFjdG9yKGV2ZW50LCBjb250ZXh0KSwgZSA9PiB7XG4gICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdhd3MtbGFtYmRhIGluc3RydW1lbnRhdGlvbjogZXZlbnRDb250ZXh0RXh0cmFjdG9yIGVycm9yJywgZSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICBpZiAoYXBpXzEudHJhY2UuZ2V0U3BhbihleHRyYWN0ZWRDb250ZXh0KT8uc3BhbkNvbnRleHQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RlZENvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaV8xLlJPT1RfQ09OVEVYVDtcbiAgICB9XG59XG5leHBvcnRzLkF3c0xhbWJkYUluc3RydW1lbnRhdGlvbiA9IEF3c0xhbWJkYUluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubGFtYmRhTWF4SW5pdEluTWlsbGlzZWNvbmRzID0gZXhwb3J0cy5Bd3NMYW1iZGFJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBd3NMYW1iZGFJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkF3c0xhbWJkYUluc3RydW1lbnRhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhbWJkYU1heEluaXRJbk1pbGxpc2Vjb25kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEubGFtYmRhTWF4SW5pdEluTWlsbGlzZWNvbmRzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiQVdTX09QRVJBVElPTlwiXSA9IFwiYXdzLm9wZXJhdGlvblwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiQ0xPVURfUkVHSU9OXCJdID0gXCJjbG91ZC5yZWdpb25cIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkFXU19TRVJWSUNFX0FQSVwiXSA9IFwiYXdzLnNlcnZpY2UuYXBpXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJBV1NfU0VSVklDRV9OQU1FXCJdID0gXCJhd3Muc2VydmljZS5uYW1lXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJBV1NfU0VSVklDRV9JREVOVElGSUVSXCJdID0gXCJhd3Muc2VydmljZS5pZGVudGlmaWVyXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJBV1NfUkVRVUVTVF9JRFwiXSA9IFwiYXdzLnJlcXVlc3QuaWRcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkFXU19SRVFVRVNUX0VYVEVOREVEX0lEXCJdID0gXCJhd3MucmVxdWVzdC5leHRlbmRlZF9pZFwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiQVdTX1NJR05BVFVSRV9WRVJTSU9OXCJdID0gXCJhd3Muc2lnbmF0dXJlLnZlcnNpb25cIjtcbiAgICAvLyBUT0RPOiBBZGQgdGhlc2Ugc2VtYW50aWMgYXR0cmlidXRlcyB0bzpcbiAgICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9wYWNrYWdlcy9vcGVudGVsZW1ldHJ5LXNlbWFudGljLWNvbnZlbnRpb25zL3NyYy90cmFjZS9TZW1hbnRpY0F0dHJpYnV0ZXMudHNcbiAgICAvLyBGb3IgUzMsIHNlZSBzcGVjaWZpY2F0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYmxvYi9tYWluL2RvY3Mvb2JqZWN0LXN0b3Jlcy9zMy5tZFxuICAgIEF0dHJpYnV0ZU5hbWVzW1wiQVdTX1MzX0JVQ0tFVFwiXSA9IFwiYXdzLnMzLmJ1Y2tldFwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiQVdTX0tJTkVTSVNfU1RSRUFNX05BTUVcIl0gPSBcImF3cy5raW5lc2lzLnN0cmVhbS5uYW1lXCI7XG59KShBdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgfHwgKGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW51bXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OX1RZUEUgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTiA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfTUVTU0FHRV9JRCA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRSA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfQkFUQ0hfTUVTU0FHRV9DT1VOVCA9IGV4cG9ydHMuQVRUUl9IVFRQX1NUQVRVU19DT0RFID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1RPS0VOX1RZUEUgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfVE9QX1AgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfVEVNUEVSQVRVUkUgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfU1RPUF9TRVFVRU5DRVMgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfTU9ERUwgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfTUFYX1RPS0VOUyA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfT1BFUkFUSU9OX05BTUUgPSBleHBvcnRzLkFUVFJfRkFBU19JTlZPS0VEX1JFR0lPTiA9IGV4cG9ydHMuQVRUUl9GQUFTX0lOVk9LRURfUFJPVklERVIgPSBleHBvcnRzLkFUVFJfRkFBU19JTlZPS0VEX05BTUUgPSBleHBvcnRzLkFUVFJfREJfU1lTVEVNID0gZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9IGV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT04gPSBleHBvcnRzLkFUVFJfREJfTkFNRSA9IGV4cG9ydHMuQVRUUl9BV1NfU1RFUF9GVU5DVElPTlNfU1RBVEVfTUFDSElORV9BUk4gPSBleHBvcnRzLkFUVFJfQVdTX1NURVBfRlVOQ1RJT05TX0FDVElWSVRZX0FSTiA9IGV4cG9ydHMuQVRUUl9BV1NfU05TX1RPUElDX0FSTiA9IGV4cG9ydHMuQVRUUl9BV1NfU0VDUkVUU01BTkFHRVJfU0VDUkVUX0FSTiA9IGV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfVE9UQUxfU0VHTUVOVFMgPSBleHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1RBQkxFX05BTUVTID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9UQUJMRV9DT1VOVCA9IGV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfU0VMRUNUID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9TRUdNRU5UID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9TQ0FOX0ZPUldBUkQgPSBleHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1NDQU5ORURfQ09VTlQgPSBleHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1dSSVRFX0NBUEFDSVRZID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9QUk9WSVNJT05FRF9SRUFEX0NBUEFDSVRZID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9QUk9KRUNUSU9OID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9MT0NBTF9TRUNPTkRBUllfSU5ERVhFUyA9IGV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfTElNSVQgPSBleHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX0lURU1fQ09MTEVDVElPTl9NRVRSSUNTID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9JTkRFWF9OQU1FID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9HTE9CQUxfU0VDT05EQVJZX0lOREVYX1VQREFURVMgPSBleHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX0dMT0JBTF9TRUNPTkRBUllfSU5ERVhFUyA9IGV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfRVhDTFVTSVZFX1NUQVJUX1RBQkxFID0gZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9DT1VOVCA9IGV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfQ09OU1VNRURfQ0FQQUNJVFkgPSBleHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX0NPTlNJU1RFTlRfUkVBRCA9IGV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfQVRUUklCVVRFX0RFRklOSVRJT05TID0gdm9pZCAwO1xuZXhwb3J0cy5NRVRSSUNfR0VOX0FJX0NMSUVOVF9UT0tFTl9VU0FHRSA9IGV4cG9ydHMuTUVUUklDX0dFTl9BSV9DTElFTlRfT1BFUkFUSU9OX0RVUkFUSU9OID0gZXhwb3J0cy5HRU5fQUlfVE9LRU5fVFlQRV9WQUxVRV9PVVRQVVQgPSBleHBvcnRzLkdFTl9BSV9UT0tFTl9UWVBFX1ZBTFVFX0lOUFVUID0gZXhwb3J0cy5HRU5fQUlfU1lTVEVNX1ZBTFVFX0FXU19CRURST0NLID0gZXhwb3J0cy5HRU5fQUlfT1BFUkFUSU9OX05BTUVfVkFMVUVfQ0hBVCA9IGV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX0RZTkFNT0RCID0gZXhwb3J0cy5BVFRSX1JQQ19TWVNURU0gPSBleHBvcnRzLkFUVFJfUlBDX1NFUlZJQ0UgPSBleHBvcnRzLkFUVFJfUlBDX01FVEhPRCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBKU09OLXNlcmlhbGl6ZWQgdmFsdWUgb2YgZWFjaCBpdGVtIGluIHRoZSBgQXR0cmlidXRlRGVmaW5pdGlvbnNgIHJlcXVlc3QgZmllbGQuXG4gKlxuICogQGV4YW1wbGUgW1wieyBcIkF0dHJpYnV0ZU5hbWVcIjogXCJzdHJpbmdcIiwgXCJBdHRyaWJ1dGVUeXBlXCI6IFwic3RyaW5nXCIgfVwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9BVFRSSUJVVEVfREVGSU5JVElPTlMgPSAnYXdzLmR5bmFtb2RiLmF0dHJpYnV0ZV9kZWZpbml0aW9ucyc7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYENvbnNpc3RlbnRSZWFkYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfQ09OU0lTVEVOVF9SRUFEID0gJ2F3cy5keW5hbW9kYi5jb25zaXN0ZW50X3JlYWQnO1xuLyoqXG4gKiBUaGUgSlNPTi1zZXJpYWxpemVkIHZhbHVlIG9mIGVhY2ggaXRlbSBpbiB0aGUgYENvbnN1bWVkQ2FwYWNpdHlgIHJlc3BvbnNlIGZpZWxkLlxuICpcbiAqIEBleGFtcGxlIFtcInsgXCJDYXBhY2l0eVVuaXRzXCI6IG51bWJlciwgXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXCI6IHsgXCJzdHJpbmdcIiA6IHsgXCJDYXBhY2l0eVVuaXRzXCI6IG51bWJlciwgXCJSZWFkQ2FwYWNpdHlVbml0c1wiOiBudW1iZXIsIFwiV3JpdGVDYXBhY2l0eVVuaXRzXCI6IG51bWJlciB9IH0sIFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXCI6IHsgXCJzdHJpbmdcIiA6IHsgXCJDYXBhY2l0eVVuaXRzXCI6IG51bWJlciwgXCJSZWFkQ2FwYWNpdHlVbml0c1wiOiBudW1iZXIsIFwiV3JpdGVDYXBhY2l0eVVuaXRzXCI6IG51bWJlciB9IH0sIFwiUmVhZENhcGFjaXR5VW5pdHNcIjogbnVtYmVyLCBcIlRhYmxlXCI6IHsgXCJDYXBhY2l0eVVuaXRzXCI6IG51bWJlciwgXCJSZWFkQ2FwYWNpdHlVbml0c1wiOiBudW1iZXIsIFwiV3JpdGVDYXBhY2l0eVVuaXRzXCI6IG51bWJlciB9LCBcIlRhYmxlTmFtZVwiOiBcInN0cmluZ1wiLCBcIldyaXRlQ2FwYWNpdHlVbml0c1wiOiBudW1iZXIgfVwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9DT05TVU1FRF9DQVBBQ0lUWSA9ICdhd3MuZHluYW1vZGIuY29uc3VtZWRfY2FwYWNpdHknO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBDb3VudGAgcmVzcG9uc2UgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIDEwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX0NPVU5UID0gJ2F3cy5keW5hbW9kYi5jb3VudCc7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYEV4Y2x1c2l2ZVN0YXJ0VGFibGVOYW1lYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZXhhbXBsZSBVc2Vyc1xuICogQGV4YW1wbGUgQ2F0c1RhYmxlXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX0VYQ0xVU0lWRV9TVEFSVF9UQUJMRSA9ICdhd3MuZHluYW1vZGIuZXhjbHVzaXZlX3N0YXJ0X3RhYmxlJztcbi8qKlxuICogVGhlIEpTT04tc2VyaWFsaXplZCB2YWx1ZSBvZiBlYWNoIGl0ZW0gb2YgdGhlIGBHbG9iYWxTZWNvbmRhcnlJbmRleGVzYCByZXF1ZXN0IGZpZWxkXG4gKlxuICogQGV4YW1wbGUgW1wieyBcIkluZGV4TmFtZVwiOiBcInN0cmluZ1wiLCBcIktleVNjaGVtYVwiOiBbIHsgXCJBdHRyaWJ1dGVOYW1lXCI6IFwic3RyaW5nXCIsIFwiS2V5VHlwZVwiOiBcInN0cmluZ1wiIH0gXSwgXCJQcm9qZWN0aW9uXCI6IHsgXCJOb25LZXlBdHRyaWJ1dGVzXCI6IFsgXCJzdHJpbmdcIiBdLCBcIlByb2plY3Rpb25UeXBlXCI6IFwic3RyaW5nXCIgfSwgXCJQcm92aXNpb25lZFRocm91Z2hwdXRcIjogeyBcIlJlYWRDYXBhY2l0eVVuaXRzXCI6IG51bWJlciwgXCJXcml0ZUNhcGFjaXR5VW5pdHNcIjogbnVtYmVyIH0gfVwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9HTE9CQUxfU0VDT05EQVJZX0lOREVYRVMgPSAnYXdzLmR5bmFtb2RiLmdsb2JhbF9zZWNvbmRhcnlfaW5kZXhlcyc7XG4vKipcbiAqIFRoZSBKU09OLXNlcmlhbGl6ZWQgdmFsdWUgb2YgZWFjaCBpdGVtIGluIHRoZSBgR2xvYmFsU2Vjb25kYXJ5SW5kZXhVcGRhdGVzYCByZXF1ZXN0IGZpZWxkLlxuICpcbiAqIEBleGFtcGxlIFtcInsgXCJDcmVhdGVcIjogeyBcIkluZGV4TmFtZVwiOiBcInN0cmluZ1wiLCBcIktleVNjaGVtYVwiOiBbIHsgXCJBdHRyaWJ1dGVOYW1lXCI6IFwic3RyaW5nXCIsIFwiS2V5VHlwZVwiOiBcInN0cmluZ1wiIH0gXSwgXCJQcm9qZWN0aW9uXCI6IHsgXCJOb25LZXlBdHRyaWJ1dGVzXCI6IFsgXCJzdHJpbmdcIiBdLCBcIlByb2plY3Rpb25UeXBlXCI6IFwic3RyaW5nXCIgfSwgXCJQcm92aXNpb25lZFRocm91Z2hwdXRcIjogeyBcIlJlYWRDYXBhY2l0eVVuaXRzXCI6IG51bWJlciwgXCJXcml0ZUNhcGFjaXR5VW5pdHNcIjogbnVtYmVyIH0gfVwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9HTE9CQUxfU0VDT05EQVJZX0lOREVYX1VQREFURVMgPSAnYXdzLmR5bmFtb2RiLmdsb2JhbF9zZWNvbmRhcnlfaW5kZXhfdXBkYXRlcyc7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYEluZGV4TmFtZWAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGV4YW1wbGUgbmFtZV90b19ncm91cFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9JTkRFWF9OQU1FID0gJ2F3cy5keW5hbW9kYi5pbmRleF9uYW1lJztcbi8qKlxuICogVGhlIEpTT04tc2VyaWFsaXplZCB2YWx1ZSBvZiB0aGUgYEl0ZW1Db2xsZWN0aW9uTWV0cmljc2AgcmVzcG9uc2UgZmllbGQuXG4gKlxuICogQGV4YW1wbGUgeyBcInN0cmluZ1wiIDogWyB7IFwiSXRlbUNvbGxlY3Rpb25LZXlcIjogeyBcInN0cmluZ1wiIDogeyBcIkJcIjogYmxvYiwgXCJCT09MXCI6IGJvb2xlYW4sIFwiQlNcIjogWyBibG9iIF0sIFwiTFwiOiBbIFwiQXR0cmlidXRlVmFsdWVcIiBdLCBcIk1cIjogeyBcInN0cmluZ1wiIDogXCJBdHRyaWJ1dGVWYWx1ZVwiIH0sIFwiTlwiOiBcInN0cmluZ1wiLCBcIk5TXCI6IFsgXCJzdHJpbmdcIiBdLCBcIk5VTExcIjogYm9vbGVhbiwgXCJTXCI6IFwic3RyaW5nXCIsIFwiU1NcIjogWyBcInN0cmluZ1wiIF0gfSB9LCBcIlNpemVFc3RpbWF0ZVJhbmdlR0JcIjogWyBudW1iZXIgXSB9IF0gfVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9JVEVNX0NPTExFQ1RJT05fTUVUUklDUyA9ICdhd3MuZHluYW1vZGIuaXRlbV9jb2xsZWN0aW9uX21ldHJpY3MnO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBMaW1pdGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGV4YW1wbGUgMTBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfTElNSVQgPSAnYXdzLmR5bmFtb2RiLmxpbWl0Jztcbi8qKlxuICogVGhlIEpTT04tc2VyaWFsaXplZCB2YWx1ZSBvZiBlYWNoIGl0ZW0gb2YgdGhlIGBMb2NhbFNlY29uZGFyeUluZGV4ZXNgIHJlcXVlc3QgZmllbGQuXG4gKlxuICogQGV4YW1wbGUgW1wieyBcIkluZGV4QXJuXCI6IFwic3RyaW5nXCIsIFwiSW5kZXhOYW1lXCI6IFwic3RyaW5nXCIsIFwiSW5kZXhTaXplQnl0ZXNcIjogbnVtYmVyLCBcIkl0ZW1Db3VudFwiOiBudW1iZXIsIFwiS2V5U2NoZW1hXCI6IFsgeyBcIkF0dHJpYnV0ZU5hbWVcIjogXCJzdHJpbmdcIiwgXCJLZXlUeXBlXCI6IFwic3RyaW5nXCIgfSBdLCBcIlByb2plY3Rpb25cIjogeyBcIk5vbktleUF0dHJpYnV0ZXNcIjogWyBcInN0cmluZ1wiIF0sIFwiUHJvamVjdGlvblR5cGVcIjogXCJzdHJpbmdcIiB9IH1cIl1cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfTE9DQUxfU0VDT05EQVJZX0lOREVYRVMgPSAnYXdzLmR5bmFtb2RiLmxvY2FsX3NlY29uZGFyeV9pbmRleGVzJztcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgUHJvamVjdGlvbkV4cHJlc3Npb25gIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIFRpdGxlXG4gKiBAZXhhbXBsZSBUaXRsZSwgUHJpY2UsIENvbG9yXG4gKiBAZXhhbXBsZSBUaXRsZSwgRGVzY3JpcHRpb24sIFJlbGF0ZWRJdGVtcywgUHJvZHVjdFJldmlld3NcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfUFJPSkVDVElPTiA9ICdhd3MuZHluYW1vZGIucHJvamVjdGlvbic7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYFByb3Zpc2lvbmVkVGhyb3VnaHB1dC5SZWFkQ2FwYWNpdHlVbml0c2AgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKlxuICogQGV4YW1wbGUgMS4wXG4gKiBAZXhhbXBsZSAyLjBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfUkVBRF9DQVBBQ0lUWSA9ICdhd3MuZHluYW1vZGIucHJvdmlzaW9uZWRfcmVhZF9jYXBhY2l0eSc7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYFByb3Zpc2lvbmVkVGhyb3VnaHB1dC5Xcml0ZUNhcGFjaXR5VW5pdHNgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIDEuMFxuICogQGV4YW1wbGUgMi4wXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1dSSVRFX0NBUEFDSVRZID0gJ2F3cy5keW5hbW9kYi5wcm92aXNpb25lZF93cml0ZV9jYXBhY2l0eSc7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYFNjYW5uZWRDb3VudGAgcmVzcG9uc2UgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIDUwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1NDQU5ORURfQ09VTlQgPSAnYXdzLmR5bmFtb2RiLnNjYW5uZWRfY291bnQnO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBTY2FuSW5kZXhGb3J3YXJkYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfU0NBTl9GT1JXQVJEID0gJ2F3cy5keW5hbW9kYi5zY2FuX2ZvcndhcmQnO1xuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBTZWdtZW50YCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZXhhbXBsZSAxMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9TRUdNRU5UID0gJ2F3cy5keW5hbW9kYi5zZWdtZW50Jztcbi8qKlxuICogVGhlIHZhbHVlIG9mIHRoZSBgU2VsZWN0YCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqXG4gKiBAZXhhbXBsZSBBTExfQVRUUklCVVRFU1xuICogQGV4YW1wbGUgQ09VTlRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRFlOQU1PREJfU0VMRUNUID0gJ2F3cy5keW5hbW9kYi5zZWxlY3QnO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBgVGFibGVOYW1lc2AgcmVzcG9uc2UgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIDIwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1RBQkxFX0NPVU5UID0gJ2F3cy5keW5hbW9kYi50YWJsZV9jb3VudCc7XG4vKipcbiAqIFRoZSBrZXlzIGluIHRoZSBgUmVxdWVzdEl0ZW1zYCBvYmplY3QgZmllbGQuXG4gKlxuICogQGV4YW1wbGUgW1wiVXNlcnNcIiwgXCJDYXRzXCJdXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0RZTkFNT0RCX1RBQkxFX05BTUVTID0gJ2F3cy5keW5hbW9kYi50YWJsZV9uYW1lcyc7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUgYFRvdGFsU2VnbWVudHNgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIDEwMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19EWU5BTU9EQl9UT1RBTF9TRUdNRU5UUyA9ICdhd3MuZHluYW1vZGIudG90YWxfc2VnbWVudHMnO1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBTZWNyZXQgc3RvcmVkIGluIHRoZSBTZWNyZXRzIE1hbmdnZXJcbiAqXG4gKiBAZXhhbXBsZSBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6c2VjcmV0OlNlY3JldE5hbWUtNlJhbmRvbUNoYXJhY3RlcnNcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfU0VDUkVUU01BTkFHRVJfU0VDUkVUX0FSTiA9ICdhd3Muc2VjcmV0c21hbmFnZXIuc2VjcmV0LmFybic7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBTTlMgVG9waWMuIEFuIEFtYXpvbiBTTlMgW3RvcGljXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtY3JlYXRlLXRvcGljLmh0bWwpIGlzIGEgbG9naWNhbCBhY2Nlc3MgcG9pbnQgdGhhdCBhY3RzIGFzIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuICpcbiAqIEBleGFtcGxlIGFybjphd3M6c25zOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6bXlzdGFjay1teXRvcGljLU5aSjVKU01WR0ZJRVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19TTlNfVE9QSUNfQVJOID0gJ2F3cy5zbnMudG9waWMuYXJuJztcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFN0ZXAgRnVuY3Rpb25zIEFjdGl2aXR5LlxuICpcbiAqIEBleGFtcGxlIGFybjphd3M6c3RhdGVzOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6YWN0aXZpdHk6Z2V0LWdyZWV0aW5nXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX1NURVBfRlVOQ1RJT05TX0FDVElWSVRZX0FSTiA9ICdhd3Muc3RlcF9mdW5jdGlvbnMuYWN0aXZpdHkuYXJuJztcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFN0ZXAgRnVuY3Rpb25zIFN0YXRlIE1hY2hpbmUuXG4gKlxuICogQGV4YW1wbGUgYXJuOmF3czpzdGF0ZXM6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpzdGF0ZU1hY2hpbmU6bXlTdGF0ZU1hY2hpbmU6MVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19TVEVQX0ZVTkNUSU9OU19TVEFURV9NQUNISU5FX0FSTiA9ICdhd3Muc3RlcF9mdW5jdGlvbnMuc3RhdGVfbWFjaGluZS5hcm4nO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLm5hbWVzcGFjZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBjdXN0b21lcnNcbiAqIEBleGFtcGxlIG1haW5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLm5hbWVzcGFjZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9OQU1FID0gJ2RiLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLm9wZXJhdGlvbi5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGZpbmRBbmRNb2RpZnlcbiAqIEBleGFtcGxlIEhNU0VUXG4gKiBAZXhhbXBsZSBTRUxFQ1RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLm9wZXJhdGlvbi5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTiA9ICdkYi5vcGVyYXRpb24nO1xuLyoqXG4gKiBUaGUgZGF0YWJhc2Ugc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIFNFTEVDVCAqIEZST00gd3VzZXJfdGFibGVcbiAqIEBleGFtcGxlIFNFVCBteWtleSBcIld1VmFsdWVcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIucXVlcnkudGV4dGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSAnZGIuc3RhdGVtZW50Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5zeXN0ZW0ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnN5c3RlbS5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9ICdkYi5zeXN0ZW0nO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSBcIm15LWZ1bmN0aW9uXCJcbiAqXG4gKiBAbm90ZSAqKlNIT1VMRCoqIGJlIGVxdWFsIHRvIHRoZSBgZmFhcy5uYW1lYCByZXNvdXJjZSBhdHRyaWJ1dGUgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfRkFBU19JTlZPS0VEX05BTUUgPSAnZmFhcy5pbnZva2VkX25hbWUnO1xuLyoqXG4gKiBUaGUgY2xvdWQgcHJvdmlkZXIgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKlxuICogQG5vdGUgKipTSE9VTEQqKiBiZSBlcXVhbCB0byB0aGUgYGNsb3VkLnByb3ZpZGVyYCByZXNvdXJjZSBhdHRyaWJ1dGUgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfRkFBU19JTlZPS0VEX1BST1ZJREVSID0gJ2ZhYXMuaW52b2tlZF9wcm92aWRlcic7XG4vKipcbiAqIFRoZSBjbG91ZCByZWdpb24gb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uXG4gKlxuICogQGV4YW1wbGUgXCJldS1jZW50cmFsLTFcIlxuICpcbiAqIEBub3RlICoqU0hPVUxEKiogYmUgZXF1YWwgdG8gdGhlIGBjbG91ZC5yZWdpb25gIHJlc291cmNlIGF0dHJpYnV0ZSBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9GQUFTX0lOVk9LRURfUkVHSU9OID0gJ2ZhYXMuaW52b2tlZF9yZWdpb24nO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZC5cbiAqXG4gKiBAbm90ZSBJZiBvbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsdWVzIGFwcGxpZXMsIGJ1dCBzcGVjaWZpYyBzeXN0ZW0gdXNlcyBhIGRpZmZlcmVudCBuYW1lIGl0J3MgKipSRUNPTU1FTkRFRCoqIHRvIGRvY3VtZW50IGl0IGluIHRoZSBzZW1hbnRpYyBjb252ZW50aW9ucyBmb3Igc3BlY2lmaWMgR2VuQUkgc3lzdGVtIGFuZCB1c2Ugc3lzdGVtLXNwZWNpZmljIG5hbWUgaW4gdGhlIGluc3RydW1lbnRhdGlvbi4gSWYgYSBkaWZmZXJlbnQgbmFtZSBpcyBub3QgZG9jdW1lbnRlZCwgaW5zdHJ1bWVudGF0aW9uIGxpYnJhcmllcyAqKlNIT1VMRCoqIHVzZSBhcHBsaWNhYmxlIHByZWRlZmluZWQgdmFsdWUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfR0VOX0FJX09QRVJBVElPTl9OQU1FID0gJ2dlbl9haS5vcGVyYXRpb24ubmFtZSc7XG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0b2tlbnMgdGhlIG1vZGVsIGdlbmVyYXRlcyBmb3IgYSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDEwMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX01BWF9UT0tFTlMgPSAnZ2VuX2FpLnJlcXVlc3QubWF4X3Rva2Vucyc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBHZW5BSSBtb2RlbCBhIHJlcXVlc3QgaXMgYmVpbmcgbWFkZSB0by5cbiAqXG4gKiBAZXhhbXBsZSBcImdwdC00XCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTCA9ICdnZW5fYWkucmVxdWVzdC5tb2RlbCc7XG4vKipcbiAqIExpc3Qgb2Ygc2VxdWVuY2VzIHRoYXQgdGhlIG1vZGVsIHdpbGwgdXNlIHRvIHN0b3AgZ2VuZXJhdGluZyBmdXJ0aGVyIHRva2Vucy5cbiAqXG4gKiBAZXhhbXBsZSBbXCJmb3Jlc3RcIiwgXCJsaXZlZFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTID0gJ2dlbl9haS5yZXF1ZXN0LnN0b3Bfc2VxdWVuY2VzJztcbi8qKlxuICogVGhlIHRlbXBlcmF0dXJlIHNldHRpbmcgZm9yIHRoZSBHZW5BSSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDAuMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFID0gJ2dlbl9haS5yZXF1ZXN0LnRlbXBlcmF0dXJlJztcbi8qKlxuICogVGhlIHRvcF9wIHNhbXBsaW5nIHNldHRpbmcgZm9yIHRoZSBHZW5BSSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDEuMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QID0gJ2dlbl9haS5yZXF1ZXN0LnRvcF9wJztcbi8qKlxuICogQXJyYXkgb2YgcmVhc29ucyB0aGUgbW9kZWwgc3RvcHBlZCBnZW5lcmF0aW5nIHRva2VucywgY29ycmVzcG9uZGluZyB0byBlYWNoIGdlbmVyYXRpb24gcmVjZWl2ZWQuXG4gKlxuICogQGV4YW1wbGUgW1wic3RvcFwiXVxuICogQGV4YW1wbGUgW1wic3RvcFwiLCBcImxlbmd0aFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUyA9ICdnZW5fYWkucmVzcG9uc2UuZmluaXNoX3JlYXNvbnMnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGdlbl9haS5wcm92aWRlci5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZ2VuX2FpLnByb3ZpZGVyLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfR0VOX0FJX1NZU1RFTSA9ICdnZW5fYWkuc3lzdGVtJztcbi8qKlxuICogVGhlIHR5cGUgb2YgdG9rZW4gYmVpbmcgY291bnRlZC5cbiAqXG4gKiBAZXhhbXBsZSBpbnB1dFxuICogQGV4YW1wbGUgb3V0cHV0XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfR0VOX0FJX1RPS0VOX1RZUEUgPSAnZ2VuX2FpLnRva2VuLnR5cGUnO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHRva2VucyB1c2VkIGluIHRoZSBHZW5BSSBpbnB1dCAocHJvbXB0KS5cbiAqXG4gKiBAZXhhbXBsZSAxMDBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TID0gJ2dlbl9haS51c2FnZS5pbnB1dF90b2tlbnMnO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHRva2VucyB1c2VkIGluIHRoZSBHZW5BSSByZXNwb25zZSAoY29tcGxldGlvbikuXG4gKlxuICogQGV4YW1wbGUgMTgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMgPSAnZ2VuX2FpLnVzYWdlLm91dHB1dF90b2tlbnMnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGh0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgMjAwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfU1RBVFVTX0NPREUgPSAnaHR0cC5zdGF0dXNfY29kZSc7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgc2VudCwgcmVjZWl2ZWQsIG9yIHByb2Nlc3NlZCBpbiB0aGUgc2NvcGUgb2YgdGhlIGJhdGNoaW5nIG9wZXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSAwXG4gKiBAZXhhbXBsZSAxXG4gKiBAZXhhbXBsZSAyXG4gKlxuICogQG5vdGUgSW5zdHJ1bWVudGF0aW9ucyAqKlNIT1VMRCBOT1QqKiBzZXQgYG1lc3NhZ2luZy5iYXRjaC5tZXNzYWdlX2NvdW50YCBvbiBzcGFucyB0aGF0IG9wZXJhdGUgd2l0aCBhIHNpbmdsZSBtZXNzYWdlLiBXaGVuIGEgbWVzc2FnaW5nIGNsaWVudCBsaWJyYXJ5IHN1cHBvcnRzIGJvdGggYmF0Y2ggYW5kIHNpbmdsZS1tZXNzYWdlIEFQSSBmb3IgdGhlIHNhbWUgb3BlcmF0aW9uLCBpbnN0cnVtZW50YXRpb25zICoqU0hPVUxEKiogdXNlIGBtZXNzYWdpbmcuYmF0Y2gubWVzc2FnZV9jb3VudGAgZm9yIGJhdGNoaW5nIEFQSXMgYW5kICoqU0hPVUxEIE5PVCoqIHVzZSBpdCBmb3Igc2luZ2xlLW1lc3NhZ2UgQVBJcy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfQkFUQ0hfTUVTU0FHRV9DT1VOVCA9ICdtZXNzYWdpbmcuYmF0Y2gubWVzc2FnZV9jb3VudCc7XG4vKipcbiAqIFRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIG5hbWVcbiAqXG4gKiBAZXhhbXBsZSBNeVF1ZXVlXG4gKiBAZXhhbXBsZSBNeVRvcGljXG4gKlxuICogQG5vdGUgRGVzdGluYXRpb24gbmFtZSAqKlNIT1VMRCoqIHVuaXF1ZWx5IGlkZW50aWZ5IGEgc3BlY2lmaWMgcXVldWUsIHRvcGljIG9yIG90aGVyIGVudGl0eSB3aXRoaW4gdGhlIGJyb2tlci4gSWZcbiAqIHRoZSBicm9rZXIgZG9lc24ndCBoYXZlIHN1Y2ggbm90aW9uLCB0aGUgZGVzdGluYXRpb24gbmFtZSAqKlNIT1VMRCoqIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBicm9rZXIuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX05BTUUgPSAnbWVzc2FnaW5nLmRlc3RpbmF0aW9uLm5hbWUnO1xuLyoqXG4gKiBBIHZhbHVlIHVzZWQgYnkgdGhlIG1lc3NhZ2luZyBzeXN0ZW0gYXMgYW4gaWRlbnRpZmllciBmb3IgdGhlIG1lc3NhZ2UsIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlIFwiNDUyYTdjN2M3YzcwNDhjMmY4ODdmNjE1NzJiMThmYzJcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX01FU1NBR0lOR19NRVNTQUdFX0lEID0gJ21lc3NhZ2luZy5tZXNzYWdlLmlkJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgcHVibGlzaFxuICogQGV4YW1wbGUgY3JlYXRlXG4gKiBAZXhhbXBsZSBwcm9jZXNzXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGVgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTiA9ICdtZXNzYWdpbmcub3BlcmF0aW9uJztcbi8qKlxuICogQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2luZyBvcGVyYXRpb24uXG4gKlxuICogQG5vdGUgSWYgYSBjdXN0b20gdmFsdWUgaXMgdXNlZCwgaXQgKipNVVNUKiogYmUgb2YgbG93IGNhcmRpbmFsaXR5LlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFID0gJ21lc3NhZ2luZy5vcGVyYXRpb24udHlwZSc7XG4vKipcbiAqIFRoZSBtZXNzYWdpbmcgc3lzdGVtIGFzIGlkZW50aWZpZWQgYnkgdGhlIGNsaWVudCBpbnN0cnVtZW50YXRpb24uXG4gKlxuICogQG5vdGUgVGhlIGFjdHVhbCBtZXNzYWdpbmcgc3lzdGVtIG1heSBkaWZmZXIgZnJvbSB0aGUgb25lIGtub3duIGJ5IHRoZSBjbGllbnQuIEZvciBleGFtcGxlLCB3aGVuIHVzaW5nIEthZmthIGNsaWVudCBsaWJyYXJpZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBBenVyZSBFdmVudCBIdWJzLCB0aGUgYG1lc3NhZ2luZy5zeXN0ZW1gIGlzIHNldCB0byBga2Fma2FgIGJhc2VkIG9uIHRoZSBpbnN0cnVtZW50YXRpb24ncyBiZXN0IGtub3dsZWRnZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfU1lTVEVNID0gJ21lc3NhZ2luZy5zeXN0ZW0nO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgKGxvZ2ljYWwpIG1ldGhvZCBiZWluZyBjYWxsZWQsIG11c3QgYmUgZXF1YWwgdG8gdGhlICRtZXRob2QgcGFydCBpbiB0aGUgc3BhbiBuYW1lLlxuICpcbiAqIEBleGFtcGxlIFwiZXhhbXBsZU1ldGhvZFwiXG4gKlxuICogQG5vdGUgVGhpcyBpcyB0aGUgbG9naWNhbCBuYW1lIG9mIHRoZSBtZXRob2QgZnJvbSB0aGUgUlBDIGludGVyZmFjZSBwZXJzcGVjdGl2ZSwgd2hpY2ggY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIGFueSBpbXBsZW1lbnRpbmcgbWV0aG9kL2Z1bmN0aW9uLiBUaGUgYGNvZGUuZnVuY3Rpb24ubmFtZWAgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIHN0b3JlIHRoZSBsYXR0ZXIgKGUuZy4sIG1ldGhvZCBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGNhbGwgb24gdGhlIHNlcnZlciBzaWRlLCBSUEMgY2xpZW50IHN0dWIgbWV0aG9kIG9uIHRoZSBjbGllbnQgc2lkZSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUlBDX01FVEhPRCA9ICdycGMubWV0aG9kJztcbi8qKlxuICogVGhlIGZ1bGwgKGxvZ2ljYWwpIG5hbWUgb2YgdGhlIHNlcnZpY2UgYmVpbmcgY2FsbGVkLCBpbmNsdWRpbmcgaXRzIHBhY2thZ2UgbmFtZSwgaWYgYXBwbGljYWJsZS5cbiAqXG4gKiBAZXhhbXBsZSBcIm15c2VydmljZS5FY2hvU2VydmljZVwiXG4gKlxuICogQG5vdGUgVGhpcyBpcyB0aGUgbG9naWNhbCBuYW1lIG9mIHRoZSBzZXJ2aWNlIGZyb20gdGhlIFJQQyBpbnRlcmZhY2UgcGVyc3BlY3RpdmUsIHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiBhbnkgaW1wbGVtZW50aW5nIGNsYXNzLiBUaGUgYGNvZGUubmFtZXNwYWNlYCBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gc3RvcmUgdGhlIGxhdHRlciAoZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5hbWUsIGl0IG1heSBpbmNsdWRlIGEgY2xhc3MgbmFtZTsgZS5nLiwgY2xhc3Mgd2l0aCBtZXRob2QgYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBjYWxsIG9uIHRoZSBzZXJ2ZXIgc2lkZSwgUlBDIGNsaWVudCBzdHViIGNsYXNzIG9uIHRoZSBjbGllbnQgc2lkZSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUlBDX1NFUlZJQ0UgPSAncnBjLnNlcnZpY2UnO1xuLyoqXG4gKiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgcmVtb3Rpbmcgc3lzdGVtLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB3ZWxsLWtub3duIGlkZW50aWZpZXJzLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1JQQ19TWVNURU0gPSAncnBjLnN5c3RlbSc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJkeW5hbW9kYlwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfU1lTVEVNfS5cbiAqXG4gKiBBbWF6b24gRHluYW1vREJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9EWU5BTU9EQiA9ICdkeW5hbW9kYic7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJjaGF0XCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9HRU5fQUlfT1BFUkFUSU9OX05BTUV9LlxuICpcbiAqIENoYXQgY29tcGxldGlvbiBvcGVyYXRpb24gc3VjaCBhcyBbT3BlbkFJIENoYXQgQVBJXShodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2NoYXQpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5HRU5fQUlfT1BFUkFUSU9OX05BTUVfVkFMVUVfQ0hBVCA9ICdjaGF0Jztcbi8qKlxuICogRW51bSB2YWx1ZSBcImF3cy5iZWRyb2NrXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9HRU5fQUlfU1lTVEVNfS5cbiAqXG4gKiBBV1MgQmVkcm9ja1xuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuR0VOX0FJX1NZU1RFTV9WQUxVRV9BV1NfQkVEUk9DSyA9ICdhd3MuYmVkcm9jayc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJpbnB1dFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfR0VOX0FJX1RPS0VOX1RZUEV9LlxuICpcbiAqIElucHV0IHRva2VucyAocHJvbXB0LCBpbnB1dCwgZXRjLilcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkdFTl9BSV9UT0tFTl9UWVBFX1ZBTFVFX0lOUFVUID0gJ2lucHV0Jztcbi8qKlxuICogRW51bSB2YWx1ZSBcIm91dHB1dFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfR0VOX0FJX1RPS0VOX1RZUEV9LlxuICpcbiAqIE91dHB1dCB0b2tlbnMgKGNvbXBsZXRpb24sIHJlc3BvbnNlLCBldGMuKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuR0VOX0FJX1RPS0VOX1RZUEVfVkFMVUVfT1VUUFVUID0gJ291dHB1dCc7XG4vKipcbiAqIEdlbkFJIG9wZXJhdGlvbiBkdXJhdGlvbi5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0cmljIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0dFTl9BSV9DTElFTlRfT1BFUkFUSU9OX0RVUkFUSU9OID0gJ2dlbl9haS5jbGllbnQub3BlcmF0aW9uLmR1cmF0aW9uJztcbi8qKlxuICogTnVtYmVyIG9mIGlucHV0IGFuZCBvdXRwdXQgdG9rZW5zIHVzZWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19HRU5fQUlfQ0xJRU5UX1RPS0VOX1VTQUdFID0gJ2dlbl9haS5jbGllbnQudG9rZW4udXNhZ2UnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hZGRQcm9wYWdhdGlvbkZpZWxkc1RvQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLmV4dHJhY3RQcm9wYWdhdGlvbkNvbnRleHQgPSBleHBvcnRzLmluamVjdFByb3BhZ2F0aW9uQ29udGV4dCA9IGV4cG9ydHMuY29udGV4dEdldHRlciA9IGV4cG9ydHMuY29udGV4dFNldHRlciA9IGV4cG9ydHMuTUFYX01FU1NBR0VfQVRUUklCVVRFUyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9TUVNEZXZlbG9wZXJHdWlkZS9zcXMtcXVvdGFzLmh0bWxcbmV4cG9ydHMuTUFYX01FU1NBR0VfQVRUUklCVVRFUyA9IDEwO1xuY2xhc3MgQ29udGV4dFNldHRlciB7XG4gICAgc2V0KGNhcnJpZXIsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgY2FycmllcltrZXldID0ge1xuICAgICAgICAgICAgRGF0YVR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgU3RyaW5nVmFsdWU6IHZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuY29udGV4dFNldHRlciA9IG5ldyBDb250ZXh0U2V0dGVyKCk7XG5jbGFzcyBDb250ZXh0R2V0dGVyIHtcbiAgICBrZXlzKGNhcnJpZXIpIHtcbiAgICAgICAgaWYgKGNhcnJpZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjYXJyaWVyKTtcbiAgICB9XG4gICAgZ2V0KGNhcnJpZXIsIGtleSkge1xuICAgICAgICByZXR1cm4gY2Fycmllcj8uW2tleV0/LlN0cmluZ1ZhbHVlIHx8IGNhcnJpZXI/LltrZXldPy5WYWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLmNvbnRleHRHZXR0ZXIgPSBuZXcgQ29udGV4dEdldHRlcigpO1xuY29uc3QgaW5qZWN0UHJvcGFnYXRpb25Db250ZXh0ID0gKGF0dHJpYnV0ZXNNYXApID0+IHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXR0cmlidXRlc01hcCA/PyB7fTtcbiAgICBpZiAoT2JqZWN0LmtleXMoYXR0cmlidXRlcykubGVuZ3RoICsgYXBpXzEucHJvcGFnYXRpb24uZmllbGRzKCkubGVuZ3RoIDw9XG4gICAgICAgIGV4cG9ydHMuTUFYX01FU1NBR0VfQVRUUklCVVRFUykge1xuICAgICAgICBhcGlfMS5wcm9wYWdhdGlvbi5pbmplY3QoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgYXR0cmlidXRlcywgZXhwb3J0cy5jb250ZXh0U2V0dGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignYXdzLXNkayBpbnN0cnVtZW50YXRpb246IGNhbm5vdCBzZXQgY29udGV4dCBwcm9wYWdhdGlvbiBvbiBTUVMvU05TIG1lc3NhZ2UgZHVlIHRvIG1heGltdW0gYW1vdW50IG9mIE1lc3NhZ2VBdHRyaWJ1dGVzJyk7XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xufTtcbmV4cG9ydHMuaW5qZWN0UHJvcGFnYXRpb25Db250ZXh0ID0gaW5qZWN0UHJvcGFnYXRpb25Db250ZXh0O1xuY29uc3QgZXh0cmFjdFByb3BhZ2F0aW9uQ29udGV4dCA9IChtZXNzYWdlLCBzcXNFeHRyYWN0Q29udGV4dFByb3BhZ2F0aW9uRnJvbVBheWxvYWQpID0+IHtcbiAgICBjb25zdCBwcm9wYWdhdGlvbkZpZWxkcyA9IGFwaV8xLnByb3BhZ2F0aW9uLmZpZWxkcygpO1xuICAgIGNvbnN0IGhhc1Byb3BhZ2F0aW9uRmllbGRzID0gT2JqZWN0LmtleXMobWVzc2FnZS5NZXNzYWdlQXR0cmlidXRlcyB8fCBbXSkuc29tZShhdHRyID0+IHByb3BhZ2F0aW9uRmllbGRzLmluY2x1ZGVzKGF0dHIpKTtcbiAgICBpZiAoaGFzUHJvcGFnYXRpb25GaWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2UuTWVzc2FnZUF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNxc0V4dHJhY3RDb250ZXh0UHJvcGFnYXRpb25Gcm9tUGF5bG9hZCAmJiBtZXNzYWdlLkJvZHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuQm9keSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZC5NZXNzYWdlQXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdmYWlsZWQgdG8gcGFyc2UgU1FTIHBheWxvYWQgdG8gZXh0cmFjdCBjb250ZXh0IHByb3BhZ2F0aW9uLCB0cmFjZSBtaWdodCBiZSBpbmNvbXBsZXRlLicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuZXhwb3J0cy5leHRyYWN0UHJvcGFnYXRpb25Db250ZXh0ID0gZXh0cmFjdFByb3BhZ2F0aW9uQ29udGV4dDtcbmNvbnN0IGFkZFByb3BhZ2F0aW9uRmllbGRzVG9BdHRyaWJ1dGVOYW1lcyA9IChtZXNzYWdlQXR0cmlidXRlTmFtZXMgPSBbXSwgcHJvcGFnYXRpb25GaWVsZHMpID0+IHtcbiAgICByZXR1cm4gbWVzc2FnZUF0dHJpYnV0ZU5hbWVzLmxlbmd0aFxuICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChbLi4ubWVzc2FnZUF0dHJpYnV0ZU5hbWVzLCAuLi5wcm9wYWdhdGlvbkZpZWxkc10pKVxuICAgICAgICA6IHByb3BhZ2F0aW9uRmllbGRzO1xufTtcbmV4cG9ydHMuYWRkUHJvcGFnYXRpb25GaWVsZHNUb0F0dHJpYnV0ZU5hbWVzID0gYWRkUHJvcGFnYXRpb25GaWVsZHNUb0F0dHJpYnV0ZU5hbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWVzc2FnZUF0dHJpYnV0ZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3FzU2VydmljZUV4dGVuc2lvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCBNZXNzYWdlQXR0cmlidXRlc18xID0gcmVxdWlyZShcIi4vTWVzc2FnZUF0dHJpYnV0ZXNcIik7XG5jbGFzcyBTcXNTZXJ2aWNlRXh0ZW5zaW9uIHtcbiAgICByZXF1ZXN0UHJlU3Bhbkhvb2socmVxdWVzdCwgX2NvbmZpZykge1xuICAgICAgICBjb25zdCBxdWV1ZVVybCA9IHRoaXMuZXh0cmFjdFF1ZXVlVXJsKHJlcXVlc3QuY29tbWFuZElucHV0KTtcbiAgICAgICAgY29uc3QgcXVldWVOYW1lID0gdGhpcy5leHRyYWN0UXVldWVOYW1lRnJvbVVybChxdWV1ZVVybCk7XG4gICAgICAgIGxldCBzcGFuS2luZCA9IGFwaV8xLlNwYW5LaW5kLkNMSUVOVDtcbiAgICAgICAgbGV0IHNwYW5OYW1lO1xuICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfU1lTVEVNXTogJ2F3c19zcXMnLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9OQU1FXTogcXVldWVOYW1lLFxuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9VUkxfRlVMTF06IHF1ZXVlVXJsLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgaXNJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKHJlcXVlc3QuY29tbWFuZE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1JlY2VpdmVNZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzcGFuS2luZCA9IGFwaV8xLlNwYW5LaW5kLkNPTlNVTUVSO1xuICAgICAgICAgICAgICAgICAgICBzcGFuTmFtZSA9IGAke3F1ZXVlTmFtZX0gcmVjZWl2ZWA7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05fVFlQRV0gPSAncmVjZWl2ZSc7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29tbWFuZElucHV0Lk1lc3NhZ2VBdHRyaWJ1dGVOYW1lcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgTWVzc2FnZUF0dHJpYnV0ZXNfMS5hZGRQcm9wYWdhdGlvbkZpZWxkc1RvQXR0cmlidXRlTmFtZXMpKHJlcXVlc3QuY29tbWFuZElucHV0Lk1lc3NhZ2VBdHRyaWJ1dGVOYW1lcywgYXBpXzEucHJvcGFnYXRpb24uZmllbGRzKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NlbmRNZXNzYWdlJzpcbiAgICAgICAgICAgIGNhc2UgJ1NlbmRNZXNzYWdlQmF0Y2gnOlxuICAgICAgICAgICAgICAgIHNwYW5LaW5kID0gYXBpXzEuU3BhbktpbmQuUFJPRFVDRVI7XG4gICAgICAgICAgICAgICAgc3Bhbk5hbWUgPSBgJHtxdWV1ZU5hbWV9IHNlbmRgO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0luY29taW5nLFxuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzcGFuS2luZCxcbiAgICAgICAgICAgIHNwYW5OYW1lLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXF1ZXN0UG9zdFNwYW5Ib29rID0gKHJlcXVlc3QpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZXF1ZXN0LmNvbW1hbmROYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdTZW5kTWVzc2FnZSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnTWVzc2FnZUF0dHJpYnV0ZXMgPSByZXF1ZXN0LmNvbW1hbmRJbnB1dFsnTWVzc2FnZUF0dHJpYnV0ZXMnXSA/PyB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdNZXNzYWdlQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb21tYW5kSW5wdXRbJ01lc3NhZ2VBdHRyaWJ1dGVzJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBNZXNzYWdlQXR0cmlidXRlc18xLmluamVjdFByb3BhZ2F0aW9uQ29udGV4dCkob3JpZ01lc3NhZ2VBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NlbmRNZXNzYWdlQmF0Y2gnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IHJlcXVlc3QuY29tbWFuZElucHV0Py5FbnRyaWVzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKChtZXNzYWdlUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVBhcmFtcy5NZXNzYWdlQXR0cmlidXRlcyA9ICgwLCBNZXNzYWdlQXR0cmlidXRlc18xLmluamVjdFByb3BhZ2F0aW9uQ29udGV4dCkobWVzc2FnZVBhcmFtcy5NZXNzYWdlQXR0cmlidXRlcyA/PyB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmVzcG9uc2VIb29rID0gKHJlc3BvbnNlLCBzcGFuLCBfdHJhY2VyLCBjb25maWcpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5yZXF1ZXN0LmNvbW1hbmROYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdTZW5kTWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX01FU1NBR0VfSUQsIHJlc3BvbnNlPy5kYXRhPy5NZXNzYWdlSWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU2VuZE1lc3NhZ2VCYXRjaCc6XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogSG93IHNob3VsZCB0aGlzIGJlIGhhbmRsZWQ/XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSZWNlaXZlTWVzc2FnZSc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHJlc3BvbnNlPy5kYXRhPy5NZXNzYWdlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfQkFUQ0hfTUVTU0FHRV9DT1VOVCwgbWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGFnYXRlZENvbnRleHQgPSBhcGlfMS5wcm9wYWdhdGlvbi5leHRyYWN0KGFwaV8xLlJPT1RfQ09OVEVYVCwgKDAsIE1lc3NhZ2VBdHRyaWJ1dGVzXzEuZXh0cmFjdFByb3BhZ2F0aW9uQ29udGV4dCkobWVzc2FnZSwgY29uZmlnLnNxc0V4dHJhY3RDb250ZXh0UHJvcGFnYXRpb25Gcm9tUGF5bG9hZCksIE1lc3NhZ2VBdHRyaWJ1dGVzXzEuY29udGV4dEdldHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gYXBpXzEudHJhY2UuZ2V0U3BhbkNvbnRleHQocHJvcGFnYXRlZENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3BhbkNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uYWRkTGluayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogc3BhbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX01FU1NBR0VfSURdOiBtZXNzYWdlLk1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGV4dHJhY3RRdWV1ZVVybCA9IChjb21tYW5kSW5wdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRJbnB1dD8uUXVldWVVcmw7XG4gICAgfTtcbiAgICBleHRyYWN0UXVldWVOYW1lRnJvbVVybCA9IChxdWV1ZVVybCkgPT4ge1xuICAgICAgICBpZiAoIXF1ZXVlVXJsKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBxdWV1ZVVybC5zcGxpdCgnLycpO1xuICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIH07XG59XG5leHBvcnRzLlNxc1NlcnZpY2VFeHRlbnNpb24gPSBTcXNTZXJ2aWNlRXh0ZW5zaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3FzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJlZHJvY2tSdW50aW1lU2VydmljZUV4dGVuc2lvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY2xhc3MgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uIHtcbiAgICB0b2tlblVzYWdlO1xuICAgIG9wZXJhdGlvbkR1cmF0aW9uO1xuICAgIF9kaWFnID0gYXBpXzEuZGlhZztcbiAgICB1cGRhdGVNZXRyaWNJbnN0cnVtZW50cyhtZXRlcikge1xuICAgICAgICAvLyBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2dlbi1haS9nZW4tYWktbWV0cmljcy8jbWV0cmljLWdlbl9haWNsaWVudHRva2VudXNhZ2VcbiAgICAgICAgdGhpcy50b2tlblVzYWdlID0gbWV0ZXIuY3JlYXRlSGlzdG9ncmFtKHNlbWNvbnZfMS5NRVRSSUNfR0VOX0FJX0NMSUVOVF9UT0tFTl9VU0FHRSwge1xuICAgICAgICAgICAgdW5pdDogJ3t0b2tlbn0nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNZWFzdXJlcyBudW1iZXIgb2YgaW5wdXQgYW5kIG91dHB1dCB0b2tlbnMgdXNlZCcsXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGFwaV8xLlZhbHVlVHlwZS5JTlQsXG4gICAgICAgICAgICBhZHZpY2U6IHtcbiAgICAgICAgICAgICAgICBleHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgMSwgNCwgMTYsIDY0LCAyNTYsIDEwMjQsIDQwOTYsIDE2Mzg0LCA2NTUzNiwgMjYyMTQ0LCAxMDQ4NTc2LCA0MTk0MzA0LFxuICAgICAgICAgICAgICAgICAgICAxNjc3NzIxNiwgNjcxMDg4NjQsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2dlbi1haS9nZW4tYWktbWV0cmljcy8jbWV0cmljLWdlbl9haWNsaWVudG9wZXJhdGlvbmR1cmF0aW9uXG4gICAgICAgIHRoaXMub3BlcmF0aW9uRHVyYXRpb24gPSBtZXRlci5jcmVhdGVIaXN0b2dyYW0oc2VtY29udl8xLk1FVFJJQ19HRU5fQUlfQ0xJRU5UX09QRVJBVElPTl9EVVJBVElPTiwge1xuICAgICAgICAgICAgdW5pdDogJ3MnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5BSSBvcGVyYXRpb24gZHVyYXRpb24nLFxuICAgICAgICAgICAgYWR2aWNlOiB7XG4gICAgICAgICAgICAgICAgZXhwbGljaXRCdWNrZXRCb3VuZGFyaWVzOiBbXG4gICAgICAgICAgICAgICAgICAgIDAuMDEsIDAuMDIsIDAuMDQsIDAuMDgsIDAuMTYsIDAuMzIsIDAuNjQsIDEuMjgsIDIuNTYsIDUuMTIsIDEwLjI0LFxuICAgICAgICAgICAgICAgICAgICAyMC40OCwgNDAuOTYsIDgxLjkyLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdFByZVNwYW5Ib29rKHJlcXVlc3QsIGNvbmZpZywgZGlhZykge1xuICAgICAgICBzd2l0Y2ggKHJlcXVlc3QuY29tbWFuZE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbnZlcnNlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0UHJlU3Bhbkhvb2tDb252ZXJzZShyZXF1ZXN0LCBjb25maWcsIGRpYWcsIGZhbHNlKTtcbiAgICAgICAgICAgIGNhc2UgJ0NvbnZlcnNlU3RyZWFtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0UHJlU3Bhbkhvb2tDb252ZXJzZShyZXF1ZXN0LCBjb25maWcsIGRpYWcsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSAnSW52b2tlTW9kZWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RQcmVTcGFuSG9va0ludm9rZU1vZGVsKHJlcXVlc3QsIGNvbmZpZywgZGlhZywgZmFsc2UpO1xuICAgICAgICAgICAgY2FzZSAnSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RQcmVTcGFuSG9va0ludm9rZU1vZGVsKHJlcXVlc3QsIGNvbmZpZywgZGlhZywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzSW5jb21pbmc6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXF1ZXN0UHJlU3Bhbkhvb2tDb252ZXJzZShyZXF1ZXN0LCBjb25maWcsIGRpYWcsIGlzU3RyZWFtKSB7XG4gICAgICAgIGxldCBzcGFuTmFtZSA9IHNlbWNvbnZfMS5HRU5fQUlfT1BFUkFUSU9OX05BTUVfVkFMVUVfQ0hBVDtcbiAgICAgICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1NZU1RFTV06IHNlbWNvbnZfMS5HRU5fQUlfU1lTVEVNX1ZBTFVFX0FXU19CRURST0NLLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9PUEVSQVRJT05fTkFNRV06IHNlbWNvbnZfMS5HRU5fQUlfT1BFUkFUSU9OX05BTUVfVkFMVUVfQ0hBVCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbW9kZWxJZCA9IHJlcXVlc3QuY29tbWFuZElucHV0Lm1vZGVsSWQ7XG4gICAgICAgIGlmIChtb2RlbElkKSB7XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTF0gPSBtb2RlbElkO1xuICAgICAgICAgICAgaWYgKHNwYW5OYW1lKSB7XG4gICAgICAgICAgICAgICAgc3Bhbk5hbWUgKz0gYCAke21vZGVsSWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZlcmVuY2VDb25maWcgPSByZXF1ZXN0LmNvbW1hbmRJbnB1dC5pbmZlcmVuY2VDb25maWc7XG4gICAgICAgIGlmIChpbmZlcmVuY2VDb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWF4VG9rZW5zLCB0ZW1wZXJhdHVyZSwgdG9wUCwgc3RvcFNlcXVlbmNlcyB9ID0gaW5mZXJlbmNlQ29uZmlnO1xuICAgICAgICAgICAgaWYgKG1heFRva2VucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfTUFYX1RPS0VOU10gPSBtYXhUb2tlbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFXSA9IHRlbXBlcmF0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvcFAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QXSA9IHRvcFA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RvcFNlcXVlbmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfU1RPUF9TRVFVRU5DRVNdID0gc3RvcFNlcXVlbmNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3Bhbk5hbWUsXG4gICAgICAgICAgICBpc0luY29taW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzU3RyZWFtLFxuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlcXVlc3RQcmVTcGFuSG9va0ludm9rZU1vZGVsKHJlcXVlc3QsIGNvbmZpZywgZGlhZywgaXNTdHJlYW0pIHtcbiAgICAgICAgbGV0IHNwYW5OYW1lO1xuICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfU1lTVEVNXTogc2VtY29udl8xLkdFTl9BSV9TWVNURU1fVkFMVUVfQVdTX0JFRFJPQ0ssXG4gICAgICAgICAgICAvLyBhZGQgb3BlcmF0aW9uIG5hbWUgZm9yIEludm9rZU1vZGVsIEFQSVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtb2RlbElkID0gcmVxdWVzdC5jb21tYW5kSW5wdXQ/Lm1vZGVsSWQ7XG4gICAgICAgIGlmIChtb2RlbElkKSB7XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTF0gPSBtb2RlbElkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0LmNvbW1hbmRJbnB1dD8uYm9keSkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBKU09OLnBhcnNlKHJlcXVlc3QuY29tbWFuZElucHV0LmJvZHkpO1xuICAgICAgICAgICAgaWYgKG1vZGVsSWQuaW5jbHVkZXMoJ2FtYXpvbi50aXRhbicpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5LnRleHRHZW5lcmF0aW9uQ29uZmlnPy50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50ZXh0R2VuZXJhdGlvbkNvbmZpZy50ZW1wZXJhdHVyZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5LnRleHRHZW5lcmF0aW9uQ29uZmlnPy50b3BQICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfVE9QX1BdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5LnRleHRHZW5lcmF0aW9uQ29uZmlnLnRvcFA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS50ZXh0R2VuZXJhdGlvbkNvbmZpZz8ubWF4VG9rZW5Db3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX01BWF9UT0tFTlNdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5LnRleHRHZW5lcmF0aW9uQ29uZmlnLm1heFRva2VuQ291bnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS50ZXh0R2VuZXJhdGlvbkNvbmZpZz8uc3RvcFNlcXVlbmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50ZXh0R2VuZXJhdGlvbkNvbmZpZy5zdG9wU2VxdWVuY2VzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsSWQuaW5jbHVkZXMoJ2FtYXpvbi5ub3ZhJykpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkuaW5mZXJlbmNlQ29uZmlnPy50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5pbmZlcmVuY2VDb25maWcudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5pbmZlcmVuY2VDb25maWc/LnRvcF9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfVE9QX1BdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5LmluZmVyZW5jZUNvbmZpZy50b3BfcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5LmluZmVyZW5jZUNvbmZpZz8ubWF4X25ld190b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5pbmZlcmVuY2VDb25maWcubWF4X25ld190b2tlbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5pbmZlcmVuY2VDb25maWc/LnN0b3BTZXF1ZW5jZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9TVE9QX1NFUVVFTkNFU10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkuaW5mZXJlbmNlQ29uZmlnLnN0b3BTZXF1ZW5jZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxJZC5pbmNsdWRlcygnYW50aHJvcGljLmNsYXVkZScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5Lm1heF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5tYXhfdG9rZW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkudGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9URU1QRVJBVFVSRV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS50b3BfcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QXSA9IHJlcXVlc3RCb2R5LnRvcF9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkuc3RvcF9zZXF1ZW5jZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9TVE9QX1NFUVVFTkNFU10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkuc3RvcF9zZXF1ZW5jZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxJZC5pbmNsdWRlcygnbWV0YS5sbGFtYScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5Lm1heF9nZW5fbGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfTUFYX1RPS0VOU10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkubWF4X2dlbl9sZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50ZW1wZXJhdHVyZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5LnRvcF9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfVE9QX1BdID0gcmVxdWVzdEJvZHkudG9wX3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QgZm9yIG1ldGEgbGxhbWEgbW9kZWxzIGRvZXMgbm90IGNvbnRhaW4gc3RvcF9zZXF1ZW5jZXMgZmllbGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsSWQuaW5jbHVkZXMoJ2NvaGVyZS5jb21tYW5kLXInKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5tYXhfdG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfTUFYX1RPS0VOU10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkubWF4X3Rva2VucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5LnRlbXBlcmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfVEVNUEVSQVRVUkVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5LnRlbXBlcmF0dXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkucCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QXSA9IHJlcXVlc3RCb2R5LnA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogV2UgYXBwcm94aW1hdGUgdGhlIHRva2VuIGNvdW50IHNpbmNlIHRoaXMgdmFsdWUgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiB0aGUgYm9keVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gQmVkcm9jayBkb2NzIHRoZXkgdXNlICh0b3RhbF9jaGFycyAvIDYpIHRvIGFwcHJveGltYXRlIHRva2VuIGNvdW50IGZvciBwcmljaW5nLlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlNdID0gTWF0aC5jZWlsKHJlcXVlc3RCb2R5Lm1lc3NhZ2UubGVuZ3RoIC8gNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5zdG9wX3NlcXVlbmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5zdG9wX3NlcXVlbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbElkLmluY2x1ZGVzKCdjb2hlcmUuY29tbWFuZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5Lm1heF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5tYXhfdG9rZW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkudGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9URU1QRVJBVFVSRV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfVE9QX1BdID0gcmVxdWVzdEJvZHkucDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5LnByb21wdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlIGFwcHJveGltYXRlIHRoZSB0b2tlbiBjb3VudCBzaW5jZSB0aGlzIHZhbHVlIGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgaW4gdGhlIGJvZHlcbiAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIEJlZHJvY2sgZG9jcyB0aGV5IHVzZSAodG90YWxfY2hhcnMgLyA2KSB0byBhcHByb3hpbWF0ZSB0b2tlbiBjb3VudCBmb3IgcHJpY2luZy5cbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2svbGF0ZXN0L3VzZXJndWlkZS9tb2RlbC1jdXN0b21pemF0aW9uLXByZXBhcmUuaHRtbFxuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TXSA9IE1hdGguY2VpbChyZXF1ZXN0Qm9keS5wcm9tcHQubGVuZ3RoIC8gNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS5zdG9wX3NlcXVlbmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5zdG9wX3NlcXVlbmNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbElkLmluY2x1ZGVzKCdtaXN0cmFsJykpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkucHJvbXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogV2UgYXBwcm94aW1hdGUgdGhlIHRva2VuIGNvdW50IHNpbmNlIHRoaXMgdmFsdWUgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiB0aGUgYm9keVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gQmVkcm9jayBkb2NzIHRoZXkgdXNlICh0b3RhbF9jaGFycyAvIDYpIHRvIGFwcHJveGltYXRlIHRva2VuIGNvdW50IGZvciBwcmljaW5nLlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlNdID0gTWF0aC5jZWlsKHJlcXVlc3RCb2R5LnByb21wdC5sZW5ndGggLyA2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5Lm1heF90b2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5tYXhfdG9rZW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkudGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9URU1QRVJBVFVSRV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keS50b3BfcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QXSA9IHJlcXVlc3RCb2R5LnRvcF9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHkuc3RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTXSA9IHJlcXVlc3RCb2R5LnN0b3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuTmFtZSxcbiAgICAgICAgICAgIGlzSW5jb21pbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNTdHJlYW0sXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVzcG9uc2VIb29rKHJlc3BvbnNlLCBzcGFuLCB0cmFjZXIsIGNvbmZpZywgc3RhcnRUaW1lKSB7XG4gICAgICAgIGlmICghc3Bhbi5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5yZXF1ZXN0LmNvbW1hbmROYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdDb252ZXJzZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VIb29rQ29udmVyc2UocmVzcG9uc2UsIHNwYW4sIHRyYWNlciwgY29uZmlnLCBzdGFydFRpbWUpO1xuICAgICAgICAgICAgY2FzZSAnQ29udmVyc2VTdHJlYW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlSG9va0NvbnZlcnNlU3RyZWFtKHJlc3BvbnNlLCBzcGFuLCB0cmFjZXIsIGNvbmZpZywgc3RhcnRUaW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ0ludm9rZU1vZGVsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhvb2tJbnZva2VNb2RlbChyZXNwb25zZSwgc3BhbiwgdHJhY2VyLCBjb25maWcpO1xuICAgICAgICAgICAgY2FzZSAnSW52b2tlTW9kZWxXaXRoUmVzcG9uc2VTdHJlYW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlSG9va0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtKHJlc3BvbnNlLCBzcGFuLCB0cmFjZXIsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzcG9uc2VIb29rQ29udmVyc2UocmVzcG9uc2UsIHNwYW4sIHRyYWNlciwgY29uZmlnLCBzdGFydFRpbWUpIHtcbiAgICAgICAgY29uc3QgeyBzdG9wUmVhc29uLCB1c2FnZSB9ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uLnNldFN0b3BSZWFzb24oc3Bhbiwgc3RvcFJlYXNvbik7XG4gICAgICAgIHRoaXMuc2V0VXNhZ2UocmVzcG9uc2UsIHNwYW4sIHVzYWdlLCBzdGFydFRpbWUpO1xuICAgIH1cbiAgICByZXNwb25zZUhvb2tDb252ZXJzZVN0cmVhbShyZXNwb25zZSwgc3BhbiwgdHJhY2VyLCBjb25maWcsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICAgIC8vIFdyYXAgYW5kIHJlcGxhY2UgdGhlIHJlc3BvbnNlIHN0cmVhbSB0byBhbGxvdyBwcm9jZXNzaW5nIGV2ZW50cyB0byB0ZWxlbWV0cnlcbiAgICAgICAgICAgIC8vIGJlZm9yZSB5aWVsZGluZyB0byB0aGUgdXNlci5cbiAgICAgICAgICAgIHN0cmVhbTogdGhpcy53cmFwQ29udmVyc2VTdHJlYW1SZXNwb25zZShyZXNwb25zZSwgcmVzcG9uc2UuZGF0YS5zdHJlYW0sIHNwYW4sIHN0YXJ0VGltZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jICp3cmFwQ29udmVyc2VTdHJlYW1SZXNwb25zZShyZXNwb25zZSwgc3RyZWFtLCBzcGFuLCBzdGFydFRpbWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB1c2FnZTtcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICBCZWRyb2NrUnVudGltZVNlcnZpY2VFeHRlbnNpb24uc2V0U3RvcFJlYXNvbihzcGFuLCBpdGVtLm1lc3NhZ2VTdG9wPy5zdG9wUmVhc29uKTtcbiAgICAgICAgICAgICAgICB1c2FnZSA9IGl0ZW0ubWV0YWRhdGE/LnVzYWdlO1xuICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFVzYWdlKHJlc3BvbnNlLCBzcGFuLCB1c2FnZSwgc3RhcnRUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHNldFN0b3BSZWFzb24oc3Bhbiwgc3RvcFJlYXNvbikge1xuICAgICAgICBpZiAoc3RvcFJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtzdG9wUmVhc29uXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0VXNhZ2UocmVzcG9uc2UsIHNwYW4sIHVzYWdlLCBzdGFydFRpbWUpIHtcbiAgICAgICAgY29uc3Qgc2hhcmVkTWV0cmljQXR0cnMgPSB7XG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1NZU1RFTV06IHNlbWNvbnZfMS5HRU5fQUlfU1lTVEVNX1ZBTFVFX0FXU19CRURST0NLLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9PUEVSQVRJT05fTkFNRV06IHNlbWNvbnZfMS5HRU5fQUlfT1BFUkFUSU9OX05BTUVfVkFMVUVfQ0hBVCxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTF06IHJlc3BvbnNlLnJlcXVlc3QuY29tbWFuZElucHV0Lm1vZGVsSWQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uU2VjcyA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWxsaXNlY29uZHMpKCgwLCBjb3JlXzEuaHJUaW1lRHVyYXRpb24pKHN0YXJ0VGltZSwgKDAsIGNvcmVfMS5oclRpbWUpKCkpKSAvIDEwMDA7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uRHVyYXRpb24ucmVjb3JkKGR1cmF0aW9uU2Vjcywgc2hhcmVkTWV0cmljQXR0cnMpO1xuICAgICAgICBpZiAodXNhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5wdXRUb2tlbnMsIG91dHB1dFRva2VucyB9ID0gdXNhZ2U7XG4gICAgICAgICAgICBpZiAoaW5wdXRUb2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIGlucHV0VG9rZW5zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuVXNhZ2UucmVjb3JkKGlucHV0VG9rZW5zLCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnNoYXJlZE1ldHJpY0F0dHJzLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1RPS0VOX1RZUEVdOiBzZW1jb252XzEuR0VOX0FJX1RPS0VOX1RZUEVfVkFMVUVfSU5QVVQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3V0cHV0VG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUywgb3V0cHV0VG9rZW5zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuVXNhZ2UucmVjb3JkKG91dHB1dFRva2Vucywge1xuICAgICAgICAgICAgICAgICAgICAuLi5zaGFyZWRNZXRyaWNBdHRycyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9UT0tFTl9UWVBFXTogc2VtY29udl8xLkdFTl9BSV9UT0tFTl9UWVBFX1ZBTFVFX09VVFBVVCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNwb25zZUhvb2tJbnZva2VNb2RlbChyZXNwb25zZSwgc3BhbiwgdHJhY2VyLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1vZGVsSWQgPSByZXNwb25zZS5yZXF1ZXN0LmNvbW1hbmRJbnB1dD8ubW9kZWxJZDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LmJvZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY29kZWRSZXNwb25zZUJvZHkgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocmVzcG9uc2UuZGF0YS5ib2R5KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IEpTT04ucGFyc2UoZGVjb2RlZFJlc3BvbnNlQm9keSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE1vZGVsSWQuaW5jbHVkZXMoJ2FtYXpvbi50aXRhbicpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5pbnB1dFRleHRUb2tlbkNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOUywgcmVzcG9uc2VCb2R5LmlucHV0VGV4dFRva2VuQ291bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5LnJlc3VsdHM/LlswXT8udG9rZW5Db3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCByZXNwb25zZUJvZHkucmVzdWx0c1swXS50b2tlbkNvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5yZXN1bHRzPy5bMF0/LmNvbXBsZXRpb25SZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keS5yZXN1bHRzWzBdLmNvbXBsZXRpb25SZWFzb24sXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRNb2RlbElkLmluY2x1ZGVzKCdhbWF6b24ubm92YScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS51c2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUJvZHkudXNhZ2UuaW5wdXRUb2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOUywgcmVzcG9uc2VCb2R5LnVzYWdlLmlucHV0VG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5LnVzYWdlLm91dHB1dFRva2VucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUywgcmVzcG9uc2VCb2R5LnVzYWdlLm91dHB1dFRva2Vucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5zdG9wUmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkuc3RvcFJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudE1vZGVsSWQuaW5jbHVkZXMoJ2FudGhyb3BpYy5jbGF1ZGUnKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUJvZHkudXNhZ2U/LmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHJlc3BvbnNlQm9keS51c2FnZS5pbnB1dF90b2tlbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5LnVzYWdlPy5vdXRwdXRfdG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMsIHJlc3BvbnNlQm9keS51c2FnZS5vdXRwdXRfdG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5zdG9wX3JlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5LnN0b3BfcmVhc29uLFxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50TW9kZWxJZC5pbmNsdWRlcygnbWV0YS5sbGFtYScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5wcm9tcHRfdG9rZW5fY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TLCByZXNwb25zZUJvZHkucHJvbXB0X3Rva2VuX2NvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5nZW5lcmF0aW9uX3Rva2VuX2NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMsIHJlc3BvbnNlQm9keS5nZW5lcmF0aW9uX3Rva2VuX2NvdW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5zdG9wX3JlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5LnN0b3BfcmVhc29uLFxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50TW9kZWxJZC5pbmNsdWRlcygnY29oZXJlLmNvbW1hbmQtcicpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogV2UgYXBwcm94aW1hdGUgdGhlIHRva2VuIGNvdW50IHNpbmNlIHRoaXMgdmFsdWUgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiB0aGUgYm9keVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gQmVkcm9jayBkb2NzIHRoZXkgdXNlICh0b3RhbF9jaGFycyAvIDYpIHRvIGFwcHJveGltYXRlIHRva2VuIGNvdW50IGZvciBwcmljaW5nLlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBNYXRoLmNlaWwocmVzcG9uc2VCb2R5LnRleHQubGVuZ3RoIC8gNikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5LmZpbmlzaF9yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keS5maW5pc2hfcmVhc29uLFxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50TW9kZWxJZC5pbmNsdWRlcygnY29oZXJlLmNvbW1hbmQnKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUJvZHkuZ2VuZXJhdGlvbnM/LlswXT8udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogV2UgYXBwcm94aW1hdGUgdGhlIHRva2VuIGNvdW50IHNpbmNlIHRoaXMgdmFsdWUgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiB0aGUgYm9keVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gQmVkcm9jayBkb2NzIHRoZXkgdXNlICh0b3RhbF9jaGFycyAvIDYpIHRvIGFwcHJveGltYXRlIHRva2VuIGNvdW50IGZvciBwcmljaW5nLlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChyZXNwb25zZUJvZHkuZ2VuZXJhdGlvbnNbMF0udGV4dC5sZW5ndGggLyA2KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUJvZHkuZ2VuZXJhdGlvbnM/LlswXT8uZmluaXNoX3JlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5LmdlbmVyYXRpb25zWzBdLmZpbmlzaF9yZWFzb24sXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRNb2RlbElkLmluY2x1ZGVzKCdtaXN0cmFsJykpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5Lm91dHB1dHM/LlswXT8udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogV2UgYXBwcm94aW1hdGUgdGhlIHRva2VuIGNvdW50IHNpbmNlIHRoaXMgdmFsdWUgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiB0aGUgYm9keVxuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gQmVkcm9jayBkb2NzIHRoZXkgdXNlICh0b3RhbF9jaGFycyAvIDYpIHRvIGFwcHJveGltYXRlIHRva2VuIGNvdW50IGZvciBwcmljaW5nLlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChyZXNwb25zZUJvZHkub3V0cHV0c1swXS50ZXh0Lmxlbmd0aCAvIDYpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQm9keS5vdXRwdXRzPy5bMF0/LnN0b3BfcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUJvZHkub3V0cHV0c1swXS5zdG9wX3JlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlc3BvbnNlSG9va0ludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtKHJlc3BvbnNlLCBzcGFuLCB0cmFjZXIsIGNvbmZpZykge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSByZXNwb25zZS5kYXRhPy5ib2R5O1xuICAgICAgICBjb25zdCBtb2RlbElkID0gcmVzcG9uc2UucmVxdWVzdC5jb21tYW5kSW5wdXQ/Lm1vZGVsSWQ7XG4gICAgICAgIGlmICghc3RyZWFtIHx8ICFtb2RlbElkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5hbCByZXNwb25zZSBib2R5IHdpdGggb3VyIGluc3RydW1lbnRlZCBzdHJlYW0uXG4gICAgICAgIC8vIC0gRGVmZXJzIHNwYW4uZW5kKCkgdW50aWwgdGhlIGVudGlyZSBzdHJlYW0gaXMgY29uc3VtZWRcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGRvd25zdHJlYW0gY29uc3VtZXJzIHN0aWxsIHJlY2VpdmUgdGhlIGZ1bGwgc3RyZWFtIGNvcnJlY3RseSxcbiAgICAgICAgLy8gd2hpbGUgT3BlblRlbGVtZXRyeSBjYW4gcmVjb3JkIHNwYW4gYXR0cmlidXRlcyBmcm9tIHN0cmVhbWVkIGRhdGEuXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYm9keSA9IGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZENodW5rID0gdGhpcy5wYXJzZUNodW5rKGNodW5rPy5jaHVuaz8uYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHRocm91Z2hcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlbElkLmluY2x1ZGVzKCdhbWF6b24udGl0YW4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uLnJlY29yZFRpdGFuQXR0cmlidXRlcyhwYXJzZWRDaHVuaywgc3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxJZC5pbmNsdWRlcygnYW50aHJvcGljLmNsYXVkZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWRyb2NrUnVudGltZVNlcnZpY2VFeHRlbnNpb24ucmVjb3JkQ2xhdWRlQXR0cmlidXRlcyhwYXJzZWRDaHVuaywgc3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxJZC5pbmNsdWRlcygnYW1hem9uLm5vdmEnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uLnJlY29yZE5vdmFBdHRyaWJ1dGVzKHBhcnNlZENodW5rLCBzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlbElkLmluY2x1ZGVzKCdtZXRhLmxsYW1hJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJlZHJvY2tSdW50aW1lU2VydmljZUV4dGVuc2lvbi5yZWNvcmRMbGFtYUF0dHJpYnV0ZXMocGFyc2VkQ2h1bmssIHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsSWQuaW5jbHVkZXMoJ2NvaGVyZS5jb21tYW5kLXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uLnJlY29yZENvaGVyZVJBdHRyaWJ1dGVzKHBhcnNlZENodW5rLCBzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlbElkLmluY2x1ZGVzKCdjb2hlcmUuY29tbWFuZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWRyb2NrUnVudGltZVNlcnZpY2VFeHRlbnNpb24ucmVjb3JkQ29oZXJlQXR0cmlidXRlcyhwYXJzZWRDaHVuaywgc3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxJZC5pbmNsdWRlcygnbWlzdHJhbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWRyb2NrUnVudGltZVNlcnZpY2VFeHRlbnNpb24ucmVjb3JkTWlzdHJhbEF0dHJpYnV0ZXMocGFyc2VkQ2h1bmssIHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSgpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG4gICAgcGFyc2VDaHVuayhieXRlcykge1xuICAgICAgICBpZiAoIWJ5dGVzIHx8ICEoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RyID0gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSBzdHJlYW1lZCBjaHVuaycsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcmVjb3JkTm92YUF0dHJpYnV0ZXMocGFyc2VkQ2h1bmssIHNwYW4pIHtcbiAgICAgICAgaWYgKHBhcnNlZENodW5rLm1ldGFkYXRhPy51c2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VkQ2h1bmsubWV0YWRhdGE/LnVzYWdlLmlucHV0VG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TLCBwYXJzZWRDaHVuay5tZXRhZGF0YS51c2FnZS5pbnB1dFRva2Vucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyc2VkQ2h1bmsubWV0YWRhdGE/LnVzYWdlLm91dHB1dFRva2VucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMsIHBhcnNlZENodW5rLm1ldGFkYXRhLnVzYWdlLm91dHB1dFRva2Vucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZENodW5rLm1lc3NhZ2VTdG9wPy5zdG9wUmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUywgW1xuICAgICAgICAgICAgICAgIHBhcnNlZENodW5rLm1lc3NhZ2VTdG9wLnN0b3BSZWFzb24sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcmVjb3JkQ2xhdWRlQXR0cmlidXRlcyhwYXJzZWRDaHVuaywgc3Bhbikge1xuICAgICAgICBpZiAocGFyc2VkQ2h1bmsubWVzc2FnZT8udXNhZ2U/LmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TLCBwYXJzZWRDaHVuay5tZXNzYWdlLnVzYWdlLmlucHV0X3Rva2Vucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZENodW5rLm1lc3NhZ2U/LnVzYWdlPy5vdXRwdXRfdG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBwYXJzZWRDaHVuay5tZXNzYWdlLnVzYWdlLm91dHB1dF90b2tlbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRDaHVuay5kZWx0YT8uc3RvcF9yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TLCBbXG4gICAgICAgICAgICAgICAgcGFyc2VkQ2h1bmsuZGVsdGEuc3RvcF9yZWFzb24sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcmVjb3JkVGl0YW5BdHRyaWJ1dGVzKHBhcnNlZENodW5rLCBzcGFuKSB7XG4gICAgICAgIGlmIChwYXJzZWRDaHVuay5pbnB1dFRleHRUb2tlbkNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHBhcnNlZENodW5rLmlucHV0VGV4dFRva2VuQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRDaHVuay50b3RhbE91dHB1dFRleHRUb2tlbkNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBwYXJzZWRDaHVuay50b3RhbE91dHB1dFRleHRUb2tlbkNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkQ2h1bmsuY29tcGxldGlvblJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtcbiAgICAgICAgICAgICAgICBwYXJzZWRDaHVuay5jb21wbGV0aW9uUmVhc29uLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHJlY29yZExsYW1hQXR0cmlidXRlcyhwYXJzZWRDaHVuaywgc3Bhbikge1xuICAgICAgICBpZiAocGFyc2VkQ2h1bmsucHJvbXB0X3Rva2VuX2NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHBhcnNlZENodW5rLnByb21wdF90b2tlbl9jb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlZENodW5rLmdlbmVyYXRpb25fdG9rZW5fY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMsIHBhcnNlZENodW5rLmdlbmVyYXRpb25fdG9rZW5fY291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRDaHVuay5zdG9wX3JlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtcbiAgICAgICAgICAgICAgICBwYXJzZWRDaHVuay5zdG9wX3JlYXNvbixcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyByZWNvcmRNaXN0cmFsQXR0cmlidXRlcyhwYXJzZWRDaHVuaywgc3Bhbikge1xuICAgICAgICBpZiAocGFyc2VkQ2h1bmsub3V0cHV0cz8uWzBdPy50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBcbiAgICAgICAgICAgIC8vIE5PVEU6IFdlIGFwcHJveGltYXRlIHRoZSB0b2tlbiBjb3VudCBzaW5jZSB0aGlzIHZhbHVlIGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgaW4gdGhlIGJvZHlcbiAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBCZWRyb2NrIGRvY3MgdGhleSB1c2UgKHRvdGFsX2NoYXJzIC8gNikgdG8gYXBwcm94aW1hdGUgdG9rZW4gY291bnQgZm9yIHByaWNpbmcuXG4gICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICBNYXRoLmNlaWwocGFyc2VkQ2h1bmsub3V0cHV0c1swXS50ZXh0Lmxlbmd0aCAvIDYpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkQ2h1bmsub3V0cHV0cz8uWzBdPy5zdG9wX3JlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtcbiAgICAgICAgICAgICAgICBwYXJzZWRDaHVuay5vdXRwdXRzWzBdLnN0b3BfcmVhc29uLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHJlY29yZENvaGVyZUF0dHJpYnV0ZXMocGFyc2VkQ2h1bmssIHNwYW4pIHtcbiAgICAgICAgaWYgKHBhcnNlZENodW5rLmdlbmVyYXRpb25zPy5bMF0/LnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMsIFxuICAgICAgICAgICAgLy8gTk9URTogV2UgYXBwcm94aW1hdGUgdGhlIHRva2VuIGNvdW50IHNpbmNlIHRoaXMgdmFsdWUgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBpbiB0aGUgYm9keVxuICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIEJlZHJvY2sgZG9jcyB0aGV5IHVzZSAodG90YWxfY2hhcnMgLyA2KSB0byBhcHByb3hpbWF0ZSB0b2tlbiBjb3VudCBmb3IgcHJpY2luZy5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrL2xhdGVzdC91c2VyZ3VpZGUvbW9kZWwtY3VzdG9taXphdGlvbi1wcmVwYXJlLmh0bWxcbiAgICAgICAgICAgIE1hdGguY2VpbChwYXJzZWRDaHVuay5nZW5lcmF0aW9uc1swXS50ZXh0Lmxlbmd0aCAvIDYpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkQ2h1bmsuZ2VuZXJhdGlvbnM/LlswXT8uZmluaXNoX3JlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIFtcbiAgICAgICAgICAgICAgICBwYXJzZWRDaHVuay5nZW5lcmF0aW9uc1swXS5maW5pc2hfcmVhc29uLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHJlY29yZENvaGVyZVJBdHRyaWJ1dGVzKHBhcnNlZENodW5rLCBzcGFuKSB7XG4gICAgICAgIGlmIChwYXJzZWRDaHVuay50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFdlIGFwcHJveGltYXRlIHRoZSB0b2tlbiBjb3VudCBzaW5jZSB0aGlzIHZhbHVlIGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgaW4gdGhlIGJvZHlcbiAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBCZWRyb2NrIGRvY3MgdGhleSB1c2UgKHRvdGFsX2NoYXJzIC8gNikgdG8gYXBwcm94aW1hdGUgdG9rZW4gY291bnQgZm9yIHByaWNpbmcuXG4gICAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay9sYXRlc3QvdXNlcmd1aWRlL21vZGVsLWN1c3RvbWl6YXRpb24tcHJlcGFyZS5odG1sXG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUywgTWF0aC5jZWlsKHBhcnNlZENodW5rLnRleHQubGVuZ3RoIC8gNikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZWRDaHVuay5maW5pc2hfcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUywgW1xuICAgICAgICAgICAgICAgIHBhcnNlZENodW5rLmZpbmlzaF9yZWFzb24sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uID0gQmVkcm9ja1J1bnRpbWVTZXJ2aWNlRXh0ZW5zaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVkcm9jay1ydW50aW1lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkR5bmFtb2RiU2VydmljZUV4dGVuc2lvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNsYXNzIER5bmFtb2RiU2VydmljZUV4dGVuc2lvbiB7XG4gICAgdG9BcnJheSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFt2YWx1ZXNdO1xuICAgIH1cbiAgICByZXF1ZXN0UHJlU3Bhbkhvb2sobm9ybWFsaXplZFJlcXVlc3QsIGNvbmZpZywgZGlhZykge1xuICAgICAgICBjb25zdCBzcGFuS2luZCA9IGFwaV8xLlNwYW5LaW5kLkNMSUVOVDtcbiAgICAgICAgbGV0IHNwYW5OYW1lO1xuICAgICAgICBjb25zdCBpc0luY29taW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmROYW1lO1xuICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9TWVNURU1dOiBzZW1jb252XzEuREJfU1lTVEVNX1ZBTFVFX0RZTkFNT0RCLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX05BTUVdOiBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/LlRhYmxlTmFtZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dOiBvcGVyYXRpb24sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb25maWcuZHluYW1vREJTdGF0ZW1lbnRTZXJpYWxpemVyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFN0YXRlbWVudCA9IGNvbmZpZy5keW5hbW9EQlN0YXRlbWVudFNlcmlhbGl6ZXIob3BlcmF0aW9uLCBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2FuaXRpemVkU3RhdGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9TVEFURU1FTlRdID0gc2FuaXRpemVkU3RhdGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkaWFnLmVycm9yKCdmYWlsZWQgdG8gc2FuaXRpemUgRHluYW1vREIgc3RhdGVtZW50JywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQuUmVxdWVzdEl0ZW1zKSBpcyB1bmRlZmluZWQgd2hlbiBubyB0YWJsZSBuYW1lcyBhcmUgcmV0dXJuZWRcbiAgICAgICAgLy8ga2V5cyBpbiB0aGlzIG9iamVjdCBhcmUgdGhlIHRhYmxlIG5hbWVzXG4gICAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/LlRhYmxlTmFtZSkge1xuICAgICAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBjb21tYW5kcyB3aXRoIG9ubHkgMSB0YWJsZSBuYW1lIChleGFtcGxlOiBDcmVhdGVUYWJsZSkuIEF0dHJpYnV0ZSBpcyBUYWJsZU5hbWUgbm90IGtleXMgb2YgUmVxdWVzdEl0ZW1zXG4gICAgICAgICAgICAvLyBzaW5nbGUgdGFibGUgbmFtZSByZXR1cm5lZCBmb3Igb3BlcmF0aW9ucyBsaWtlIENyZWF0ZVRhYmxlXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfVEFCTEVfTkFNRVNdID0gW1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dC5UYWJsZU5hbWUsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dD8uUmVxdWVzdEl0ZW1zKSB7XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfVEFCTEVfTkFNRVNdID0gT2JqZWN0LmtleXMobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LlJlcXVlc3RJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ0NyZWF0ZVRhYmxlJyB8fCBvcGVyYXRpb24gPT09ICdVcGRhdGVUYWJsZScpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgY2hlY2sgZm9yIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBzaW5jZSBSZWFkQ2FwYWNpdHlVbml0cyBhbmQgV3JpdGVDYXBhY2l0eSB1bml0cyBhcmUgcmVxdWlyZWQgYXR0cmlidXRlc1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dD8uUHJvdmlzaW9uZWRUaHJvdWdocHV0KSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1JFQURfQ0FQQUNJVFldID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LlByb3Zpc2lvbmVkVGhyb3VnaHB1dC5SZWFkQ2FwYWNpdHlVbml0cztcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfV1JJVEVfQ0FQQUNJVFldID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LlByb3Zpc2lvbmVkVGhyb3VnaHB1dC5Xcml0ZUNhcGFjaXR5VW5pdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ0dldEl0ZW0nIHx8XG4gICAgICAgICAgICBvcGVyYXRpb24gPT09ICdTY2FuJyB8fFxuICAgICAgICAgICAgb3BlcmF0aW9uID09PSAnUXVlcnknKSB7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5Db25zaXN0ZW50UmVhZCkge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9DT05TSVNURU5UX1JFQURdID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LkNvbnNpc3RlbnRSZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdRdWVyeScgfHwgb3BlcmF0aW9uID09PSAnU2NhbicpIHtcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/LlByb2plY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX0RZTkFNT0RCX1BST0pFQ1RJT05dID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LlByb2plY3Rpb25FeHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdDcmVhdGVUYWJsZScpIHtcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/Lkdsb2JhbFNlY29uZGFyeUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfR0xPQkFMX1NFQ09OREFSWV9JTkRFWEVTXSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9BcnJheShub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykubWFwKCh4KSA9PiBKU09OLnN0cmluZ2lmeSh4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5Mb2NhbFNlY29uZGFyeUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfTE9DQUxfU0VDT05EQVJZX0lOREVYRVNdID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b0FycmF5KG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dC5Mb2NhbFNlY29uZGFyeUluZGV4ZXMpLm1hcCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdMaXN0VGFibGVzJyB8fFxuICAgICAgICAgICAgb3BlcmF0aW9uID09PSAnUXVlcnknIHx8XG4gICAgICAgICAgICBvcGVyYXRpb24gPT09ICdTY2FuJykge1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dD8uTGltaXQpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfTElNSVRdID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LkxpbWl0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdMaXN0VGFibGVzJykge1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dD8uRXhjbHVzaXZlU3RhcnRUYWJsZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfRVhDTFVTSVZFX1NUQVJUX1RBQkxFXSA9XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dC5FeGNsdXNpdmVTdGFydFRhYmxlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnUXVlcnknKSB7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5TY2FuSW5kZXhGb3J3YXJkKSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX0RZTkFNT0RCX1NDQU5fRk9SV0FSRF0gPVxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQuU2NhbkluZGV4Rm9yd2FyZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/LkluZGV4TmFtZSkge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9JTkRFWF9OQU1FXSA9XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dC5JbmRleE5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfU0VMRUNUXSA9XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dC5TZWxlY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ1NjYW4nKSB7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5TZWdtZW50KSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX0RZTkFNT0RCX1NFR01FTlRdID1cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5TZWdtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dD8uVG90YWxTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9UT1RBTF9TRUdNRU5UU10gPVxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/LlRvdGFsU2VnbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0Py5JbmRleE5hbWUpIHtcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfSU5ERVhfTkFNRV0gPVxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQuSW5kZXhOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dD8uU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX0RZTkFNT0RCX1NFTEVDVF0gPVxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQuU2VsZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdVcGRhdGVUYWJsZScpIHtcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/LkF0dHJpYnV0ZURlZmluaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX0RZTkFNT0RCX0FUVFJJQlVURV9ERUZJTklUSU9OU10gPSB0aGlzLnRvQXJyYXkobm9ybWFsaXplZFJlcXVlc3QuY29tbWFuZElucHV0LkF0dHJpYnV0ZURlZmluaXRpb25zKS5tYXAoKHgpID0+IEpTT04uc3RyaW5naWZ5KHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kSW5wdXQ/Lkdsb2JhbFNlY29uZGFyeUluZGV4VXBkYXRlcykge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9HTE9CQUxfU0VDT05EQVJZX0lOREVYX1VQREFURVNdID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b0FycmF5KG5vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmRJbnB1dC5HbG9iYWxTZWNvbmRhcnlJbmRleFVwZGF0ZXMpLm1hcCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0luY29taW5nLFxuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzcGFuS2luZCxcbiAgICAgICAgICAgIHNwYW5OYW1lLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXNwb25zZUhvb2socmVzcG9uc2UsIHNwYW4sIF90cmFjZXIsIF9jb25maWcpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LkNvbnN1bWVkQ2FwYWNpdHkpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9DT05TVU1FRF9DQVBBQ0lUWSwgdG9BcnJheShyZXNwb25zZS5kYXRhLkNvbnN1bWVkQ2FwYWNpdHkpLm1hcCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uSXRlbUNvbGxlY3Rpb25NZXRyaWNzKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfSVRFTV9DT0xMRUNUSU9OX01FVFJJQ1MsIHRoaXMudG9BcnJheShyZXNwb25zZS5kYXRhLkl0ZW1Db2xsZWN0aW9uTWV0cmljcykubWFwKCh4KSA9PiBKU09OLnN0cmluZ2lmeSh4KSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5UYWJsZU5hbWVzKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9BV1NfRFlOQU1PREJfVEFCTEVfQ09VTlQsIHJlc3BvbnNlLmRhdGE/LlRhYmxlTmFtZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uQ291bnQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9DT1VOVCwgcmVzcG9uc2UuZGF0YT8uQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5TY2FubmVkQ291bnQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0FXU19EWU5BTU9EQl9TQ0FOTkVEX0NPVU5ULCByZXNwb25zZS5kYXRhPy5TY2FubmVkQ291bnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5EeW5hbW9kYlNlcnZpY2VFeHRlbnNpb24gPSBEeW5hbW9kYlNlcnZpY2VFeHRlbnNpb247XG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlcykge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBbdmFsdWVzXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR5bmFtb2RiLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlY3JldHNNYW5hZ2VyU2VydmljZUV4dGVuc2lvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNsYXNzIFNlY3JldHNNYW5hZ2VyU2VydmljZUV4dGVuc2lvbiB7XG4gICAgcmVxdWVzdFByZVNwYW5Ib29rKHJlcXVlc3QsIF9jb25maWcpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0SWQgPSByZXF1ZXN0LmNvbW1hbmRJbnB1dD8uU2VjcmV0SWQ7XG4gICAgICAgIGNvbnN0IHNwYW5LaW5kID0gYXBpXzEuU3BhbktpbmQuQ0xJRU5UO1xuICAgICAgICBsZXQgc3Bhbk5hbWU7XG4gICAgICAgIGNvbnN0IHNwYW5BdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygc2VjcmV0SWQgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBzZWNyZXRJZC5zdGFydHNXaXRoKCdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOicpKSB7XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9BV1NfU0VDUkVUU01BTkFHRVJfU0VDUkVUX0FSTl0gPSBzZWNyZXRJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNJbmNvbWluZzogZmFsc2UsXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHNwYW5LaW5kLFxuICAgICAgICAgICAgc3Bhbk5hbWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlc3BvbnNlSG9vayhyZXNwb25zZSwgc3BhbiwgdHJhY2VyLCBjb25maWcpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0QXJuID0gcmVzcG9uc2UuZGF0YT8uQVJOO1xuICAgICAgICBpZiAoc2VjcmV0QXJuKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9BV1NfU0VDUkVUU01BTkFHRVJfU0VDUkVUX0FSTiwgc2VjcmV0QXJuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU2VjcmV0c01hbmFnZXJTZXJ2aWNlRXh0ZW5zaW9uID0gU2VjcmV0c01hbmFnZXJTZXJ2aWNlRXh0ZW5zaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VjcmV0c21hbmFnZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FU1NBR0lOR19PUEVSQVRJT05fVkFMVUVfUkVDRUlWRSA9IGV4cG9ydHMuTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkRfVkFMVUVfVE9QSUMgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkQgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OID0gZXhwb3J0cy5BVFRSX0ZBQVNfRVhFQ1VUSU9OID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBjb25zdGFudHMgZm9yIHZhbHVlcyB0aGF0IHdoZXJlIHJlcGxhY2VkL3JlbW92ZWQgZnJvbVxuICogU2VtYW50aWMgQ29udmVudGlvbnMgbG9uZyBlbm91Z2ggYWdvIHRoYXQgdGhleSBkbyBub3QgaGF2ZSBgQVRUUl8qYFxuICogY29uc3RhbnRzIGluIHRoZSBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgIHBhY2thZ2UuIEV2ZW50dWFsbHlcbiAqIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBpbnN0cnVtZW50aW9uIHdpbGwgYmUgdXBkYXRlZCB0byBlbWl0IHRlbGVtZXRyeVxuICogdXNpbmcgbW9kZXJuIFNlbWFudGljIENvbnZlbnRpb25zLCBkcm9wcGluZyB0aGUgbmVlZCBmb3IgdGhlIGNvbnN0YW50cyBpblxuICogdGhpcyBmaWxlLlxuICovXG4vKipcbiAqIFRoZSBleGVjdXRpb24gSUQgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gZXhlY3V0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX0ZBQVNfSU5WT0NBVElPTl9JRCBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkFUVFJfRkFBU19FWEVDVVRJT04gPSAnZmFhcy5leGVjdXRpb24nO1xuLyoqXG4gKiBUaGUgbWVzc2FnZSBkZXN0aW5hdGlvbiBuYW1lLiBUaGlzIG1pZ2h0IGJlIGVxdWFsIHRvIHRoZSBzcGFuIG5hbWUgYnV0IGlzIHJlcXVpcmVkIG5ldmVydGhlbGVzcy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRSBpbiBbaW5jdWJhdGluZyBlbnRyeS1wb2ludF0oe0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2Jsb2IvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucy9SRUFETUUubWQjdW5zdGFibGUtc2VtY29udn0pLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OID0gJ21lc3NhZ2luZy5kZXN0aW5hdGlvbic7XG4vKipcbiAqIFRoZSBraW5kIG9mIG1lc3NhZ2UgZGVzdGluYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiBzZW1jb252IHYxLjIwLjAuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fS0lORCA9ICdtZXNzYWdpbmcuZGVzdGluYXRpb25fa2luZCc7XG4vKipcbiAqIFRoZSBraW5kIG9mIG1lc3NhZ2UgZGVzdGluYXRpb24uXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCBpbiBzZW1jb252IHYxLjIwLjAuXG4gKi9cbmV4cG9ydHMuTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkRfVkFMVUVfVE9QSUMgPSAndG9waWMnO1xuLyoqXG4gKiBBIHN0cmluZyBpZGVudGlmeWluZyB0aGUga2luZCBvZiBtZXNzYWdlIGNvbnN1bXB0aW9uIGFzIGRlZmluZWQgaW4gdGhlIFtPcGVyYXRpb24gbmFtZXNdKCNvcGVyYXRpb24tbmFtZXMpIHNlY3Rpb24gYWJvdmUuIElmIHRoZSBvcGVyYXRpb24gaXMgJiMzNDtzZW5kJiMzNDssIHRoaXMgYXR0cmlidXRlIE1VU1QgTk9UIGJlIHNldCwgc2luY2UgdGhlIG9wZXJhdGlvbiBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgc3BhbiBraW5kIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1JFQ0VJVkUgaW4gW2luY3ViYXRpbmcgZW50cnktcG9pbnRdKHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9ibG9iL21haW4vc2VtYW50aWMtY29udmVudGlvbnMvUkVBRE1FLm1kI3Vuc3RhYmxlLXNlbWNvbnZ9KS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdJTkdfT1BFUkFUSU9OX1ZBTFVFX1JFQ0VJVkUgPSAncmVjZWl2ZSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LW9ic29sZXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNuc1NlcnZpY2VFeHRlbnNpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCBzZW1jb252X29ic29sZXRlXzEgPSByZXF1aXJlKFwiLi4vc2VtY29udi1vYnNvbGV0ZVwiKTtcbmNvbnN0IE1lc3NhZ2VBdHRyaWJ1dGVzXzEgPSByZXF1aXJlKFwiLi9NZXNzYWdlQXR0cmlidXRlc1wiKTtcbmNsYXNzIFNuc1NlcnZpY2VFeHRlbnNpb24ge1xuICAgIHJlcXVlc3RQcmVTcGFuSG9vayhyZXF1ZXN0LCBfY29uZmlnKSB7XG4gICAgICAgIGxldCBzcGFuS2luZCA9IGFwaV8xLlNwYW5LaW5kLkNMSUVOVDtcbiAgICAgICAgbGV0IHNwYW5OYW1lID0gYFNOUyAke3JlcXVlc3QuY29tbWFuZE5hbWV9YDtcbiAgICAgICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX1NZU1RFTV06ICdhd3Muc25zJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlcXVlc3QuY29tbWFuZE5hbWUgPT09ICdQdWJsaXNoJykge1xuICAgICAgICAgICAgc3BhbktpbmQgPSBhcGlfMS5TcGFuS2luZC5QUk9EVUNFUjtcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfb2Jzb2xldGVfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EXSA9XG4gICAgICAgICAgICAgICAgc2VtY29udl9vYnNvbGV0ZV8xLk1FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EX1ZBTFVFX1RPUElDO1xuICAgICAgICAgICAgY29uc3QgeyBUb3BpY0FybiwgVGFyZ2V0QXJuLCBQaG9uZU51bWJlciB9ID0gcmVxdWVzdC5jb21tYW5kSW5wdXQ7XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05dID0gdGhpcy5leHRyYWN0RGVzdGluYXRpb25OYW1lKFRvcGljQXJuLCBUYXJnZXRBcm4sIFBob25lTnVtYmVyKTtcbiAgICAgICAgICAgIC8vIFRvRE86IFVzZSBBVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9OQU1FIHdoZW4gaW1wbGVtZW50ZWRcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzWydtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSddID1cbiAgICAgICAgICAgICAgICBUb3BpY0FybiB8fCBUYXJnZXRBcm4gfHwgUGhvbmVOdW1iZXIgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgc3Bhbk5hbWUgPSBgJHtQaG9uZU51bWJlclxuICAgICAgICAgICAgICAgID8gJ3Bob25lX251bWJlcidcbiAgICAgICAgICAgICAgICA6IHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfb2Jzb2xldGVfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl19IHNlbmRgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvcGljQXJuID0gcmVxdWVzdC5jb21tYW5kSW5wdXQ/LlRvcGljQXJuO1xuICAgICAgICBpZiAodG9waWNBcm4pIHtcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0FXU19TTlNfVE9QSUNfQVJOXSA9IHRvcGljQXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0luY29taW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzLFxuICAgICAgICAgICAgc3BhbktpbmQsXG4gICAgICAgICAgICBzcGFuTmFtZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVxdWVzdFBvc3RTcGFuSG9vayhyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmNvbW1hbmROYW1lID09PSAnUHVibGlzaCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdNZXNzYWdlQXR0cmlidXRlcyA9IHJlcXVlc3QuY29tbWFuZElucHV0WydNZXNzYWdlQXR0cmlidXRlcyddID8/IHt9O1xuICAgICAgICAgICAgaWYgKG9yaWdNZXNzYWdlQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuY29tbWFuZElucHV0WydNZXNzYWdlQXR0cmlidXRlcyddID0gKDAsIE1lc3NhZ2VBdHRyaWJ1dGVzXzEuaW5qZWN0UHJvcGFnYXRpb25Db250ZXh0KShvcmlnTWVzc2FnZUF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3BvbnNlSG9vayhyZXNwb25zZSwgc3BhbiwgdHJhY2VyLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgdG9waWNBcm4gPSByZXNwb25zZS5kYXRhPy5Ub3BpY0FybjtcbiAgICAgICAgaWYgKHRvcGljQXJuKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9BV1NfU05TX1RPUElDX0FSTiwgdG9waWNBcm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4dHJhY3REZXN0aW5hdGlvbk5hbWUodG9waWNBcm4sIHRhcmdldEFybiwgcGhvbmVOdW1iZXIpIHtcbiAgICAgICAgaWYgKHRvcGljQXJuIHx8IHRhcmdldEFybikge1xuICAgICAgICAgICAgY29uc3QgYXJuID0gdG9waWNBcm4gPz8gdGFyZ2V0QXJuO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJuLnN1YnN0cmluZyhhcm4ubGFzdEluZGV4T2YoJzonKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGhvbmVOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBwaG9uZU51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlNuc1NlcnZpY2VFeHRlbnNpb24gPSBTbnNTZXJ2aWNlRXh0ZW5zaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN0ZXBGdW5jdGlvbnNTZXJ2aWNlRXh0ZW5zaW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuY2xhc3MgU3RlcEZ1bmN0aW9uc1NlcnZpY2VFeHRlbnNpb24ge1xuICAgIHJlcXVlc3RQcmVTcGFuSG9vayhyZXF1ZXN0LCBfY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUFybiA9IHJlcXVlc3QuY29tbWFuZElucHV0Py5zdGF0ZU1hY2hpbmVBcm47XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5QXJuID0gcmVxdWVzdC5jb21tYW5kSW5wdXQ/LmFjdGl2aXR5QXJuO1xuICAgICAgICBjb25zdCBzcGFuS2luZCA9IGFwaV8xLlNwYW5LaW5kLkNMSUVOVDtcbiAgICAgICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgaWYgKHN0YXRlTWFjaGluZUFybikge1xuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX1NURVBfRlVOQ1RJT05TX1NUQVRFX01BQ0hJTkVfQVJOXSA9XG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lQXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpdml0eUFybikge1xuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfQVdTX1NURVBfRlVOQ1RJT05TX0FDVElWSVRZX0FSTl0gPSBhY3Rpdml0eUFybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNJbmNvbWluZzogZmFsc2UsXG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlcyxcbiAgICAgICAgICAgIHNwYW5LaW5kLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU3RlcEZ1bmN0aW9uc1NlcnZpY2VFeHRlbnNpb24gPSBTdGVwRnVuY3Rpb25zU2VydmljZUV4dGVuc2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0ZXBmdW5jdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTGFtYmRhU2VydmljZUV4dGVuc2lvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IHNlbWNvbnZfb2Jzb2xldGVfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252LW9ic29sZXRlXCIpO1xuY29uc3QgYXBpXzIgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY2xhc3MgTGFtYmRhQ29tbWFuZHMge1xuICAgIHN0YXRpYyBJbnZva2UgPSAnSW52b2tlJztcbn1cbmNsYXNzIExhbWJkYVNlcnZpY2VFeHRlbnNpb24ge1xuICAgIHJlcXVlc3RQcmVTcGFuSG9vayhyZXF1ZXN0LCBfY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZXh0cmFjdEZ1bmN0aW9uTmFtZShyZXF1ZXN0LmNvbW1hbmRJbnB1dCk7XG4gICAgICAgIGxldCBzcGFuQXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBsZXQgc3Bhbk5hbWU7XG4gICAgICAgIHN3aXRjaCAocmVxdWVzdC5jb21tYW5kTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnSW52b2tlJzpcbiAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0ZBQVNfSU5WT0tFRF9OQU1FXTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19JTlZPS0VEX1BST1ZJREVSXTogJ2F3cycsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfRkFBU19JTlZPS0VEX1JFR0lPTl0gPSByZXF1ZXN0LnJlZ2lvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bhbk5hbWUgPSBgJHtmdW5jdGlvbk5hbWV9ICR7TGFtYmRhQ29tbWFuZHMuSW52b2tlfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzSW5jb21pbmc6IGZhbHNlLFxuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzcGFuS2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgc3Bhbk5hbWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlcXVlc3RQb3N0U3Bhbkhvb2sgPSAocmVxdWVzdCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHJlcXVlc3QuY29tbWFuZE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgTGFtYmRhQ29tbWFuZHMuSW52b2tlOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QuY29tbWFuZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbW1hbmRJbnB1dC5DbGllbnRDb250ZXh0ID0gaW5qZWN0TGFtYmRhUHJvcGFnYXRpb25Db250ZXh0KHJlcXVlc3QuY29tbWFuZElucHV0LkNsaWVudENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXNwb25zZUhvb2socmVzcG9uc2UsIHNwYW4sIHRyYWNlciwgY29uZmlnKSB7XG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2UucmVxdWVzdC5jb21tYW5kTmFtZSkge1xuICAgICAgICAgICAgY2FzZSBMYW1iZGFDb21tYW5kcy5JbnZva2U6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252X29ic29sZXRlXzEuQVRUUl9GQUFTX0VYRUNVVElPTiwgcmVzcG9uc2UucmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXh0cmFjdEZ1bmN0aW9uTmFtZSA9IChjb21tYW5kSW5wdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRJbnB1dD8uRnVuY3Rpb25OYW1lO1xuICAgIH07XG59XG5leHBvcnRzLkxhbWJkYVNlcnZpY2VFeHRlbnNpb24gPSBMYW1iZGFTZXJ2aWNlRXh0ZW5zaW9uO1xuY29uc3QgaW5qZWN0TGFtYmRhUHJvcGFnYXRpb25Db250ZXh0ID0gKGNsaWVudENvbnRleHQpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9wYWdhdGVkQ29udGV4dCA9IHt9O1xuICAgICAgICBhcGlfMi5wcm9wYWdhdGlvbi5pbmplY3QoYXBpXzIuY29udGV4dC5hY3RpdmUoKSwgcHJvcGFnYXRlZENvbnRleHQpO1xuICAgICAgICBjb25zdCBwYXJzZWRDbGllbnRDb250ZXh0ID0gY2xpZW50Q29udGV4dFxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGNsaWVudENvbnRleHQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpKVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3QgdXBkYXRlZENsaWVudENvbnRleHQgPSB7XG4gICAgICAgICAgICAuLi5wYXJzZWRDbGllbnRDb250ZXh0LFxuICAgICAgICAgICAgY3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgLi4ucGFyc2VkQ2xpZW50Q29udGV4dC5jdXN0b20sXG4gICAgICAgICAgICAgICAgLi4ucHJvcGFnYXRlZENvbnRleHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlbmNvZGVkQ2xpZW50Q29udGV4dCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRDbGllbnRDb250ZXh0KSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAvLyBUaGUgbGVuZ3RoIG9mIGNsaWVudCBjb250ZXh0IGlzIGNhcHBlZCBhdCAzNTgzIGJ5dGVzIG9mIGJhc2U2NCBlbmNvZGVkIGRhdGFcbiAgICAgICAgLy8gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL0FQSV9JbnZva2UuaHRtbCNBUElfSW52b2tlX1JlcXVlc3RTeW50YXgpXG4gICAgICAgIGlmIChlbmNvZGVkQ2xpZW50Q29udGV4dC5sZW5ndGggPiAzNTgzKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ2xhbWJkYSBpbnN0cnVtZW50YXRpb246IGNhbm5vdCBzZXQgY29udGV4dCBwcm9wYWdhdGlvbiBvbiBsYW1iZGEgaW52b2tlIHBhcmFtZXRlcnMgZHVlIHRvIENsaWVudENvbnRleHQgbGVuZ3RoIGxpbWl0YXRpb25zLicpO1xuICAgICAgICAgICAgcmV0dXJuIGNsaWVudENvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuY29kZWRDbGllbnRDb250ZXh0O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdsYW1iZGEgaW5zdHJ1bWVudGF0aW9uOiBmYWlsZWQgdG8gc2V0IGNvbnRleHQgcHJvcGFnYXRpb24gb24gQ2xpZW50Q29udGV4dCcsIGUpO1xuICAgICAgICByZXR1cm4gY2xpZW50Q29udGV4dDtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFtYmRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlMzU2VydmljZUV4dGVuc2lvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBlbnVtc18xID0gcmVxdWlyZShcIi4uL2VudW1zXCIpO1xuY2xhc3MgUzNTZXJ2aWNlRXh0ZW5zaW9uIHtcbiAgICByZXF1ZXN0UHJlU3Bhbkhvb2socmVxdWVzdCwgX2NvbmZpZykge1xuICAgICAgICBjb25zdCBidWNrZXROYW1lID0gcmVxdWVzdC5jb21tYW5kSW5wdXQ/LkJ1Y2tldDtcbiAgICAgICAgY29uc3Qgc3BhbktpbmQgPSBhcGlfMS5TcGFuS2luZC5DTElFTlQ7XG4gICAgICAgIGNvbnN0IHNwYW5BdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGlmIChidWNrZXROYW1lKSB7XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLkFXU19TM19CVUNLRVRdID0gYnVja2V0TmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0luY29taW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0luY29taW5nLFxuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzcGFuS2luZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlMzU2VydmljZUV4dGVuc2lvbiA9IFMzU2VydmljZUV4dGVuc2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXMzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbmVzaXNTZXJ2aWNlRXh0ZW5zaW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGVudW1zXzEgPSByZXF1aXJlKFwiLi4vZW51bXNcIik7XG5jbGFzcyBLaW5lc2lzU2VydmljZUV4dGVuc2lvbiB7XG4gICAgcmVxdWVzdFByZVNwYW5Ib29rKHJlcXVlc3QsIF9jb25maWcpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtTmFtZSA9IHJlcXVlc3QuY29tbWFuZElucHV0Py5TdHJlYW1OYW1lO1xuICAgICAgICBjb25zdCBzcGFuS2luZCA9IGFwaV8xLlNwYW5LaW5kLkNMSUVOVDtcbiAgICAgICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgaWYgKHN0cmVhbU5hbWUpIHtcbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW2VudW1zXzEuQXR0cmlidXRlTmFtZXMuQVdTX0tJTkVTSVNfU1RSRUFNX05BTUVdID0gc3RyZWFtTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0luY29taW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0luY29taW5nLFxuICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzcGFuS2luZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLktpbmVzaXNTZXJ2aWNlRXh0ZW5zaW9uID0gS2luZXNpc1NlcnZpY2VFeHRlbnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1raW5lc2lzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZpY2VzRXh0ZW5zaW9ucyA9IHZvaWQgMDtcbmNvbnN0IHNxc18xID0gcmVxdWlyZShcIi4vc3FzXCIpO1xuY29uc3QgYmVkcm9ja19ydW50aW1lXzEgPSByZXF1aXJlKFwiLi9iZWRyb2NrLXJ1bnRpbWVcIik7XG5jb25zdCBkeW5hbW9kYl8xID0gcmVxdWlyZShcIi4vZHluYW1vZGJcIik7XG5jb25zdCBzZWNyZXRzbWFuYWdlcl8xID0gcmVxdWlyZShcIi4vc2VjcmV0c21hbmFnZXJcIik7XG5jb25zdCBzbnNfMSA9IHJlcXVpcmUoXCIuL3Nuc1wiKTtcbmNvbnN0IHN0ZXBmdW5jdGlvbnNfMSA9IHJlcXVpcmUoXCIuL3N0ZXBmdW5jdGlvbnNcIik7XG5jb25zdCBsYW1iZGFfMSA9IHJlcXVpcmUoXCIuL2xhbWJkYVwiKTtcbmNvbnN0IHMzXzEgPSByZXF1aXJlKFwiLi9zM1wiKTtcbmNvbnN0IGtpbmVzaXNfMSA9IHJlcXVpcmUoXCIuL2tpbmVzaXNcIik7XG5jbGFzcyBTZXJ2aWNlc0V4dGVuc2lvbnMge1xuICAgIHNlcnZpY2VzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU2VydmljZXMoKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJTZXJ2aWNlcygpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5zZXQoJ1NlY3JldHNNYW5hZ2VyJywgbmV3IHNlY3JldHNtYW5hZ2VyXzEuU2VjcmV0c01hbmFnZXJTZXJ2aWNlRXh0ZW5zaW9uKCkpO1xuICAgICAgICB0aGlzLnNlcnZpY2VzLnNldCgnU0ZOJywgbmV3IHN0ZXBmdW5jdGlvbnNfMS5TdGVwRnVuY3Rpb25zU2VydmljZUV4dGVuc2lvbigpKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5zZXQoJ1NRUycsIG5ldyBzcXNfMS5TcXNTZXJ2aWNlRXh0ZW5zaW9uKCkpO1xuICAgICAgICB0aGlzLnNlcnZpY2VzLnNldCgnU05TJywgbmV3IHNuc18xLlNuc1NlcnZpY2VFeHRlbnNpb24oKSk7XG4gICAgICAgIHRoaXMuc2VydmljZXMuc2V0KCdEeW5hbW9EQicsIG5ldyBkeW5hbW9kYl8xLkR5bmFtb2RiU2VydmljZUV4dGVuc2lvbigpKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5zZXQoJ0xhbWJkYScsIG5ldyBsYW1iZGFfMS5MYW1iZGFTZXJ2aWNlRXh0ZW5zaW9uKCkpO1xuICAgICAgICB0aGlzLnNlcnZpY2VzLnNldCgnUzMnLCBuZXcgczNfMS5TM1NlcnZpY2VFeHRlbnNpb24oKSk7XG4gICAgICAgIHRoaXMuc2VydmljZXMuc2V0KCdLaW5lc2lzJywgbmV3IGtpbmVzaXNfMS5LaW5lc2lzU2VydmljZUV4dGVuc2lvbigpKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5zZXQoJ0JlZHJvY2tSdW50aW1lJywgbmV3IGJlZHJvY2tfcnVudGltZV8xLkJlZHJvY2tSdW50aW1lU2VydmljZUV4dGVuc2lvbigpKTtcbiAgICB9XG4gICAgcmVxdWVzdFByZVNwYW5Ib29rKHJlcXVlc3QsIGNvbmZpZywgZGlhZykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlRXh0ZW5zaW9uID0gdGhpcy5zZXJ2aWNlcy5nZXQocmVxdWVzdC5zZXJ2aWNlTmFtZSk7XG4gICAgICAgIGlmICghc2VydmljZUV4dGVuc2lvbilcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNJbmNvbWluZzogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc2VydmljZUV4dGVuc2lvbi5yZXF1ZXN0UHJlU3Bhbkhvb2socmVxdWVzdCwgY29uZmlnLCBkaWFnKTtcbiAgICB9XG4gICAgcmVxdWVzdFBvc3RTcGFuSG9vayhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFeHRlbnNpb24gPSB0aGlzLnNlcnZpY2VzLmdldChyZXF1ZXN0LnNlcnZpY2VOYW1lKTtcbiAgICAgICAgaWYgKCFzZXJ2aWNlRXh0ZW5zaW9uPy5yZXF1ZXN0UG9zdFNwYW5Ib29rKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gc2VydmljZUV4dGVuc2lvbi5yZXF1ZXN0UG9zdFNwYW5Ib29rKHJlcXVlc3QpO1xuICAgIH1cbiAgICByZXNwb25zZUhvb2socmVzcG9uc2UsIHNwYW4sIHRyYWNlciwgY29uZmlnLCBzdGFydFRpbWUpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUV4dGVuc2lvbiA9IHRoaXMuc2VydmljZXMuZ2V0KHJlc3BvbnNlLnJlcXVlc3Quc2VydmljZU5hbWUpO1xuICAgICAgICByZXR1cm4gc2VydmljZUV4dGVuc2lvbj8ucmVzcG9uc2VIb29rPy4ocmVzcG9uc2UsIHNwYW4sIHRyYWNlciwgY29uZmlnLCBzdGFydFRpbWUpO1xuICAgIH1cbiAgICB1cGRhdGVNZXRyaWNJbnN0cnVtZW50cyhtZXRlcikge1xuICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2VFeHRlbnNpb24gb2YgdGhpcy5zZXJ2aWNlcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgc2VydmljZUV4dGVuc2lvbi51cGRhdGVNZXRyaWNJbnN0cnVtZW50cz8uKG1ldGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU2VydmljZXNFeHRlbnNpb25zID0gU2VydmljZXNFeHRlbnNpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VydmljZXNFeHRlbnNpb25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNlcnZpY2VzRXh0ZW5zaW9ucyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgU2VydmljZXNFeHRlbnNpb25zXzEgPSByZXF1aXJlKFwiLi9TZXJ2aWNlc0V4dGVuc2lvbnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2aWNlc0V4dGVuc2lvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNlcnZpY2VzRXh0ZW5zaW9uc18xLlNlcnZpY2VzRXh0ZW5zaW9uczsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC42My4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYmluZFByb21pc2UgPSBleHBvcnRzLmV4dHJhY3RBdHRyaWJ1dGVzRnJvbU5vcm1hbGl6ZWRSZXF1ZXN0ID0gZXhwb3J0cy5ub3JtYWxpemVWM1JlcXVlc3QgPSBleHBvcnRzLnJlbW92ZVN1ZmZpeEZyb21TdHJpbmdJZkV4aXN0cyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3QgZW51bXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zXCIpO1xuY29uc3QgcmVtb3ZlU3VmZml4RnJvbVN0cmluZ0lmRXhpc3RzID0gKHN0ciwgc3VmZml4VG9SZW1vdmUpID0+IHtcbiAgICBjb25zdCBzdWZmaXhMZW5ndGggPSBzdWZmaXhUb1JlbW92ZS5sZW5ndGg7XG4gICAgcmV0dXJuIHN0cj8uc2xpY2UoLXN1ZmZpeExlbmd0aCkgPT09IHN1ZmZpeFRvUmVtb3ZlXG4gICAgICAgID8gc3RyLnNsaWNlKDAsIHN0ci5sZW5ndGggLSBzdWZmaXhMZW5ndGgpXG4gICAgICAgIDogc3RyO1xufTtcbmV4cG9ydHMucmVtb3ZlU3VmZml4RnJvbVN0cmluZ0lmRXhpc3RzID0gcmVtb3ZlU3VmZml4RnJvbVN0cmluZ0lmRXhpc3RzO1xuY29uc3Qgbm9ybWFsaXplVjNSZXF1ZXN0ID0gKHNlcnZpY2VOYW1lLCBjb21tYW5kTmFtZVdpdGhTdWZmaXgsIGNvbW1hbmRJbnB1dCwgcmVnaW9uKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmljZU5hbWU6IHNlcnZpY2VOYW1lPy5yZXBsYWNlKC9cXHMrL2csICcnKSxcbiAgICAgICAgY29tbWFuZE5hbWU6ICgwLCBleHBvcnRzLnJlbW92ZVN1ZmZpeEZyb21TdHJpbmdJZkV4aXN0cykoY29tbWFuZE5hbWVXaXRoU3VmZml4LCAnQ29tbWFuZCcpLFxuICAgICAgICBjb21tYW5kSW5wdXQsXG4gICAgICAgIHJlZ2lvbixcbiAgICB9O1xufTtcbmV4cG9ydHMubm9ybWFsaXplVjNSZXF1ZXN0ID0gbm9ybWFsaXplVjNSZXF1ZXN0O1xuY29uc3QgZXh0cmFjdEF0dHJpYnV0ZXNGcm9tTm9ybWFsaXplZFJlcXVlc3QgPSAobm9ybWFsaXplZFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBbc2VtY29udl8xLkFUVFJfUlBDX1NZU1RFTV06ICdhd3MtYXBpJyxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19NRVRIT0RdOiBub3JtYWxpemVkUmVxdWVzdC5jb21tYW5kTmFtZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19TRVJWSUNFXTogbm9ybWFsaXplZFJlcXVlc3Quc2VydmljZU5hbWUsXG4gICAgICAgIFtlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLkNMT1VEX1JFR0lPTl06IG5vcm1hbGl6ZWRSZXF1ZXN0LnJlZ2lvbixcbiAgICB9O1xufTtcbmV4cG9ydHMuZXh0cmFjdEF0dHJpYnV0ZXNGcm9tTm9ybWFsaXplZFJlcXVlc3QgPSBleHRyYWN0QXR0cmlidXRlc0Zyb21Ob3JtYWxpemVkUmVxdWVzdDtcbmNvbnN0IGJpbmRQcm9taXNlID0gKHRhcmdldCwgY29udGV4dEZvckNhbGxiYWNrcywgcmViaW5kQ291bnQgPSAxKSA9PiB7XG4gICAgY29uc3Qgb3JpZ1RoZW4gPSB0YXJnZXQudGhlbjtcbiAgICB0YXJnZXQudGhlbiA9IGZ1bmN0aW9uIChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICBjb25zdCBuZXdPbkZ1bGZpbGxlZCA9IGFwaV8xLmNvbnRleHQuYmluZChjb250ZXh0Rm9yQ2FsbGJhY2tzLCBvbkZ1bGZpbGxlZCk7XG4gICAgICAgIGNvbnN0IG5ld09uUmVqZWN0ZWQgPSBhcGlfMS5jb250ZXh0LmJpbmQoY29udGV4dEZvckNhbGxiYWNrcywgb25SZWplY3RlZCk7XG4gICAgICAgIGNvbnN0IHBhdGNoZWRQcm9taXNlID0gb3JpZ1RoZW4uY2FsbCh0aGlzLCBuZXdPbkZ1bGZpbGxlZCwgbmV3T25SZWplY3RlZCk7XG4gICAgICAgIHJldHVybiByZWJpbmRDb3VudCA+IDFcbiAgICAgICAgICAgID8gKDAsIGV4cG9ydHMuYmluZFByb21pc2UpKHBhdGNoZWRQcm9taXNlLCBjb250ZXh0Rm9yQ2FsbGJhY2tzLCByZWJpbmRDb3VudCAtIDEpXG4gICAgICAgICAgICA6IHBhdGNoZWRQcm9taXNlO1xuICAgIH07XG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG5leHBvcnRzLmJpbmRQcm9taXNlID0gYmluZFByb21pc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHJvcHdyYXAgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBibG9jayBpcyBkZXJpdmVkIGZyb20gZXNidWlsZCdzIGJ1bmRsaW5nIHN1cHBvcnQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9ibG9iL3YwLjE0LjQyL2ludGVybmFsL3J1bnRpbWUvcnVudGltZS5nbyNMMjJcbiAqXG4gKiBMaWNlbnNlOlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXZhbiBXYWxsYWNlXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuY29uc3QgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuY29uc3QgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5jb25zdCBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuY29uc3QgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbmNvbnN0IF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgICBpZiAoKGZyb20gJiYgdHlwZW9mIGZyb20gPT09ICdvYmplY3QnKSB8fCB0eXBlb2YgZnJvbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSAmJiBrZXkgIT09IGV4Y2VwdCkge1xuICAgICAgICAgICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gZnJvbVtrZXldLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG87XG59O1xuLyoqXG4gKiBSZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgaXMgYSBjb3B5IG9mIGBvYmpgLCB3aXRoIGl0cyBgc3VicGF0aGAgcHJvcGVydHlcbiAqIHJlcGxhY2VkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgd3JhcHBlcihvcmlnaW5hbClgLlxuICpcbiAqIFRoaXMgaXMgc2ltaWxhciB0byBzaGltbWVyIChpLmUuIGBJbnN0cnVtZW50YXRpb25CYXNlLnByb3RvdHlwZS5fd3JhcGApLlxuICogSG93ZXZlciwgaXQgdXNlcyBhIGRpZmZlcmVudCB0ZWNobmlxdWUgdG8gc3VwcG9ydCB3cmFwcGluZyBwcm9wZXJ0aWVzIHRoYXRcbiAqIGFyZSBvbmx5IGF2YWlsYWJsZSB2aWEgYSBnZXR0ZXIgKGkuZS4gdGhlaXIgcHJvcGVydHkgZGVzY3JpcHRvciBpcyBgLndyaXRhYmxlXG4gKiA9PT0gZmFsc2VgKS5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgIHZhciBvcyA9IHByb3B3cmFwKHJlcXVpcmUoJ29zJyksICdwbGF0Zm9ybScsIChvcmlnKSA9PiB7XG4gKiAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVkUGxhdGZvcm0gKCkge1xuICogICAgICAgIHJldHVybiBvcmlnKCkudG9VcHBlckNhc2UoKVxuICogICAgICB9XG4gKiAgICB9KVxuICogICAgY29uc29sZS5sb2cob3MucGxhdGZvcm0oKSkgLy8gPT4gREFSV0lOXG4gKlxuICogVGhlIHN1YnBhdGggY2FuIGluZGljYXRlIGEgbmVzdGVkIHByb3BlcnR5LiBFYWNoIHByb3BlcnR5IGluIHRoYXQgc3VicGF0aCxcbiAqIGV4Y2VwdCB0aGUgbGFzdCwgbXVzdCBpZGVudGlmeSBhbiAqT2JqZWN0Ki5cbiAqXG4gKiBMaW1pdGF0aW9uczpcbiAqIC0gVGhpcyBkb2Vzbid0IGhhbmRsZSBwb3NzaWJsZSBTeW1ib2wgcHJvcGVydGllcyBvbiB0aGUgY29waWVkIG9iamVjdChzKS5cbiAqIC0gVGhpcyBjYW5ub3Qgd3JhcCBhIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24sIGJlY2F1c2Ugd2UgY2Fubm90IGNyZWF0ZSBhXG4gKiAgIGNvcHkgb2YgdGhlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJwYXRoIC0gVGhlIHByb3BlcnR5IHN1YnBhdGggb24gYG9iamAgdG8gd3JhcC4gVGhpcyBtYXlcbiAqICAgIHBvaW50IHRvIGEgbmVzdGVkIHByb3BlcnR5IGJ5IHVzaW5nIGEgJy4nIHRvIHNlcGFyYXRlIGxldmVscy4gRm9yIGV4YW1wbGU6XG4gKiAgICAgICAgdmFyIGZzID0gd3JhcChmcywgJ3Byb21pc2VzLnN5bmMnLCAob3JpZykgPT4geyAuLi4gfSlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgLSBBIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIGBmdW5jdGlvbiAob3JpZylgLCB3aGVyZVxuICogICAgYG9yaWdgIGlzIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSB2YWx1ZS4gVGhpcyBtdXN0IHN5bmNocm9ub3VzbHkgcmV0dXJuIHRoZVxuICogICAgbmV3IHByb3BlcnR5IHZhbHVlLlxuICogQHJldHVybnMge29iamVjdH0gQSBuZXcgb2JqZWN0IHdpdGggdGhlIHdyYXBwZWQgcHJvcGVydHkuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGlmIHRoZSBzdWJwYXRoIHBvaW50cyB0byBhIG5vbi1leGlzdGVudCBwcm9wZXJ0eSwgb3IgaWZcbiAqICAgIGFueSBidXQgdGhlIGxhc3Qgc3VicGF0aCBwYXJ0IHBvaW50cyB0byBhIG5vbi1PYmplY3QuXG4gKi9cbmNvbnN0IHByb3B3cmFwID0gKG9iaiwgc3VicGF0aCwgd3JhcHBlcikgPT4ge1xuICAgIGNvbnN0IHBhcnRzID0gc3VicGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBbb2JqXTtcbiAgICBsZXQgbmFtZXNwYWNlID0gb2JqO1xuICAgIGxldCBrZXk7XG4gICAgbGV0IHZhbDtcbiAgICAvLyAxLiBUcmF2ZXJzZSB0aGUgc3VicGF0aCBwYXJ0cyB0byBzYW5pdHkgY2hlY2sgYW5kIGdldCByZWZlcmVuY2VzIHRvIHRoZVxuICAgIC8vICAgIE9iamVjdHMgdGhhdCB3ZSB3aWxsIGJlIGNvcHlpbmcuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBrZXkgPSBwYXJ0c1tpXTtcbiAgICAgICAgdmFsID0gbmFtZXNwYWNlW2tleV07XG4gICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBjYW5ub3Qgd3JhcCBcIiR7c3VicGF0aH1cIjogXCI8b2JqPi4ke3BhcnRzXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGkpXG4gICAgICAgICAgICAgICAgLmpvaW4oJy4nKX1cIiBpcyAke3R5cGVvZiB2YWx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaSA8IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGNhbm5vdCB3cmFwIFwiJHtzdWJwYXRofVwiOiBcIjxvYmo+LiR7cGFydHNcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIGkpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcuJyl9XCIgaXMgbm90IGFuIE9iamVjdGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmFtZXNwYWNlID0gdmFsO1xuICAgICAgICAgICAgbmFtZXNwYWNlcy5wdXNoKG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gMi4gTm93IHdvcmsgYmFja3dhcmRzLCB3cmFwcGluZyBlYWNoIG5hbWVzcGFjZSB3aXRoIGEgbmV3IG9iamVjdCB0aGF0IGhhcyBhXG4gICAgLy8gICAgY29weSBvZiBhbGwgdGhlIHByb3BlcnRpZXMsIGV4Y2VwdCB0aGUgb25lIHRoYXQgd2UndmUgd3JhcHBlZC5cbiAgICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAga2V5ID0gcGFydHNbaV07XG4gICAgICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZXNbaV07XG4gICAgICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnID0gbmFtZXNwYWNlW2tleV07XG4gICAgICAgICAgICB2YWwgPSB3cmFwcGVyKG9yaWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gbmFtZXNwYWNlc1tpICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MobmFtZXNwYWNlLCBrZXkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkTmFtZXNwYWNlID0gX19kZWZQcm9wKHt9LCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhZGVzYyB8fCBkZXNjLmVudW1lcmFibGUsXG4gICAgICAgIH0pO1xuICAgICAgICBfX2NvcHlQcm9wcyh3cmFwcGVkTmFtZXNwYWNlLCBuYW1lc3BhY2UsIGtleSk7XG4gICAgICAgIG5hbWVzcGFjZXNbaV0gPSB3cmFwcGVkTmFtZXNwYWNlO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXNwYWNlc1swXTtcbn07XG5leHBvcnRzLnByb3B3cmFwID0gcHJvcHdyYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wd3JhcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bd3NJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBlbnVtc18xID0gcmVxdWlyZShcIi4vZW51bXNcIik7XG5jb25zdCBzZXJ2aWNlc18xID0gcmVxdWlyZShcIi4vc2VydmljZXNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBwcm9wd3JhcF8xID0gcmVxdWlyZShcIi4vcHJvcHdyYXBcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IFYzX0NMSUVOVF9DT05GSUdfS0VZID0gU3ltYm9sKCdvcGVudGVsZW1ldHJ5Lmluc3RydW1lbnRhdGlvbi5hd3Mtc2RrLmNsaWVudC5jb25maWcnKTtcbmNsYXNzIEF3c0luc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIHN0YXRpYyBjb21wb25lbnQgPSAnYXdzLXNkayc7XG4gICAgX3NlbWNvbnZTdGFiaWxpdHk7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2VtY29udlN0YWJpbGl0eSA9ICgwLCBpbnN0cnVtZW50YXRpb25fMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cikoJ2h0dHAnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHYzTWlkZGxld2FyZVN0YWNrRmlsZU9sZFZlcnNpb25zID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdAYXdzLXNkay9taWRkbGV3YXJlLXN0YWNrL2Rpc3QvY2pzL01pZGRsZXdhcmVTdGFjay5qcycsIFsnPj0zLjEuMCA8My4zNS4wJ10sIHRoaXMucGF0Y2hWM0NvbnN0cnVjdFN0YWNrLmJpbmQodGhpcyksIHRoaXMudW5wYXRjaFYzQ29uc3RydWN0U3RhY2suYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnN0IHYzTWlkZGxld2FyZVN0YWNrRmlsZU5ld1ZlcnNpb25zID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdAYXdzLXNkay9taWRkbGV3YXJlLXN0YWNrL2Rpc3QtY2pzL01pZGRsZXdhcmVTdGFjay5qcycsIFsnPj0zLjM1LjAnXSwgdGhpcy5wYXRjaFYzQ29uc3RydWN0U3RhY2suYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoVjNDb25zdHJ1Y3RTdGFjay5iaW5kKHRoaXMpKTtcbiAgICAgICAgLy8gYXMgZm9yIGF3cy1zZGsgdjMuMTMuMSwgY29uc3RydWN0U3RhY2sgaXMgZXhwb3J0ZWQgZnJvbSBAYXdzLXNkay9taWRkbGV3YXJlLXN0YWNrIGFzXG4gICAgICAgIC8vIGdldHRlciBpbnN0ZWFkIG9mIGZ1bmN0aW9uLCB3aGljaCBmYWlscyBzaGltbWVyLlxuICAgICAgICAvLyBzbyB3ZSBhcmUgcGF0Y2hpbmcgdGhlIE1pZGRsZXdhcmVTdGFjay5qcyBmaWxlIGRpcmVjdGx5IHRvIGdldCBhcm91bmQgaXQuXG4gICAgICAgIGNvbnN0IHYzTWlkZGxld2FyZVN0YWNrID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdAYXdzLXNkay9taWRkbGV3YXJlLXN0YWNrJywgWydeMy4xLjAnXSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFt2M01pZGRsZXdhcmVTdGFja0ZpbGVPbGRWZXJzaW9ucywgdjNNaWRkbGV3YXJlU3RhY2tGaWxlTmV3VmVyc2lvbnNdKTtcbiAgICAgICAgLy8gUGF0Y2ggZm9yIEBzbWl0aHkvbWlkZGxld2FyZS1zdGFjayBmb3IgQGF3cy1zZGsvKiBwYWNrYWdlcyB2My4zNjMuMCsuXG4gICAgICAgIC8vIEFzIG9mIEBzbWl0aHkvbWlkZGxld2FyZS1zdGFja0AyLjEuMCBgY29uc3RydWN0U3RhY2tgIGlzIG9ubHkgYXZhaWxhYmxlXG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCBzbyB3ZSBjYW5ub3QgdXNlIGB0aGlzLl93cmFwKClgLlxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgdjNTbWl0aHlNaWRkbGV3YXJlU3RhY2sgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ0BzbWl0aHkvbWlkZGxld2FyZS1zdGFjaycsIFsnPj0yLjAuMCddLCAobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3RXhwb3J0cyA9ICgwLCBwcm9wd3JhcF8xLnByb3B3cmFwKShtb2R1bGVFeHBvcnRzLCAnY29uc3RydWN0U3RhY2snLCAob3JpZykgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuX2RpYWcuZGVidWcoJ3Byb3B3cmFwcGluZyBhd3Mtc2RrIHYzIGNvbnN0cnVjdFN0YWNrJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldFYzQ29uc3RydWN0U3RhY2tQYXRjaChtb2R1bGVWZXJzaW9uLCBvcmlnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0V4cG9ydHM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2M1NtaXRoeUNsaWVudCA9IG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignQGF3cy1zZGsvc21pdGh5LWNsaWVudCcsIFsnXjMuMS4wJ10sIHRoaXMucGF0Y2hWM1NtaXRoeUNsaWVudC5iaW5kKHRoaXMpLCB0aGlzLnVucGF0Y2hWM1NtaXRoeUNsaWVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgLy8gcGF0Y2ggZm9yIG5ldyBAc21pdGh5L3NtaXRoeS1jbGllbnQgZm9yIGF3cy1zZGsgcGFja2FnZXMgdjMuMzYzLjArXG4gICAgICAgIGNvbnN0IHYzTmV3U21pdGh5Q2xpZW50ID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdAc21pdGh5L3NtaXRoeS1jbGllbnQnLCBbJz49MS4wLjMnXSwgdGhpcy5wYXRjaFYzU21pdGh5Q2xpZW50LmJpbmQodGhpcyksIHRoaXMudW5wYXRjaFYzU21pdGh5Q2xpZW50LmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdjNNaWRkbGV3YXJlU3RhY2ssXG4gICAgICAgICAgICB2M1NtaXRoeU1pZGRsZXdhcmVTdGFjayxcbiAgICAgICAgICAgIHYzU21pdGh5Q2xpZW50LFxuICAgICAgICAgICAgdjNOZXdTbWl0aHlDbGllbnQsXG4gICAgICAgIF07XG4gICAgfVxuICAgIHBhdGNoVjNDb25zdHJ1Y3RTdGFjayhtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ2NvbnN0cnVjdFN0YWNrJywgdGhpcy5fZ2V0VjNDb25zdHJ1Y3RTdGFja1BhdGNoLmJpbmQodGhpcywgbW9kdWxlVmVyc2lvbikpO1xuICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICB9XG4gICAgdW5wYXRjaFYzQ29uc3RydWN0U3RhY2sobW9kdWxlRXhwb3J0cykge1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NvbnN0cnVjdFN0YWNrJyk7XG4gICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgIH1cbiAgICBwYXRjaFYzU21pdGh5Q2xpZW50KG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkNsaWVudC5wcm90b3R5cGUsICdzZW5kJywgdGhpcy5fZ2V0VjNTbWl0aHlDbGllbnRTZW5kUGF0Y2guYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgIH1cbiAgICB1bnBhdGNoVjNTbWl0aHlDbGllbnQobW9kdWxlRXhwb3J0cykge1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5DbGllbnQucHJvdG90eXBlLCAnc2VuZCcpO1xuICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICB9XG4gICAgX3N0YXJ0QXdzVjNTcGFuKG5vcm1hbGl6ZWRSZXF1ZXN0LCBtZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBuYW1lID0gbWV0YWRhdGEuc3Bhbk5hbWUgPz9cbiAgICAgICAgICAgIGAke25vcm1hbGl6ZWRSZXF1ZXN0LnNlcnZpY2VOYW1lfS4ke25vcm1hbGl6ZWRSZXF1ZXN0LmNvbW1hbmROYW1lfWA7XG4gICAgICAgIGNvbnN0IG5ld1NwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4obmFtZSwge1xuICAgICAgICAgICAga2luZDogbWV0YWRhdGEuc3BhbktpbmQgPz8gYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIC4uLigwLCB1dGlsc18xLmV4dHJhY3RBdHRyaWJ1dGVzRnJvbU5vcm1hbGl6ZWRSZXF1ZXN0KShub3JtYWxpemVkUmVxdWVzdCksXG4gICAgICAgICAgICAgICAgLi4ubWV0YWRhdGEuc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1NwYW47XG4gICAgfVxuICAgIF9jYWxsVXNlclByZVJlcXVlc3RIb29rKHNwYW4sIHJlcXVlc3QsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgeyBwcmVSZXF1ZXN0SG9vayB9ID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgaWYgKHByZVJlcXVlc3RIb29rKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBtb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHByZVJlcXVlc3RIb29rKHNwYW4sIHJlcXVlc3RJbmZvKSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgJHtBd3NJbnN0cnVtZW50YXRpb24uY29tcG9uZW50fSBpbnN0cnVtZW50YXRpb246IHByZVJlcXVlc3RIb29rIGVycm9yYCwgZSk7XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY2FsbFVzZXJSZXNwb25zZUhvb2soc3BhbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZUhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghcmVzcG9uc2VIb29rKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXNwb25zZUluZm8gPSB7XG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHJlc3BvbnNlSG9vayhzcGFuLCByZXNwb25zZUluZm8pLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgJHtBd3NJbnN0cnVtZW50YXRpb24uY29tcG9uZW50fSBpbnN0cnVtZW50YXRpb246IHJlc3BvbnNlSG9vayBlcnJvcmAsIGUpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG4gICAgX2NhbGxVc2VyRXhjZXB0aW9uUmVzcG9uc2VIb29rKHNwYW4sIHJlcXVlc3QsIGVycikge1xuICAgICAgICBjb25zdCB7IGV4Y2VwdGlvbkhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghZXhjZXB0aW9uSG9vaylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcmVxdWVzdEluZm8gPSB7XG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICB9O1xuICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gZXhjZXB0aW9uSG9vayhzcGFuLCByZXF1ZXN0SW5mbywgZXJyKSwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoYCR7QXdzSW5zdHJ1bWVudGF0aW9uLmNvbXBvbmVudH0gaW5zdHJ1bWVudGF0aW9uOiBleGNlcHRpb25Ib29rIGVycm9yYCwgZSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICBfZ2V0VjNDb25zdHJ1Y3RTdGFja1BhdGNoKG1vZHVsZVZlcnNpb24sIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U3RhY2soLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHNlbGYucGF0Y2hWM01pZGRsZXdhcmVTdGFjayhtb2R1bGVWZXJzaW9uLCBzdGFjayk7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWM1NtaXRoeUNsaWVudFNlbmRQYXRjaChvcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2VuZChjb21tYW5kLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBjb21tYW5kW1YzX0NMSUVOVF9DT05GSUdfS0VZXSA9IHRoaXMuY29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtjb21tYW5kLCAuLi5hcmdzXSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGNoVjNNaWRkbGV3YXJlU3RhY2sobW9kdWxlVmVyc2lvbiwgbWlkZGxld2FyZVN0YWNrVG9QYXRjaCkge1xuICAgICAgICBpZiAoISgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1pZGRsZXdhcmVTdGFja1RvUGF0Y2gucmVzb2x2ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobWlkZGxld2FyZVN0YWNrVG9QYXRjaCwgJ3Jlc29sdmUnLCB0aGlzLl9nZXRWM01pZGRsZXdhcmVTdGFja1Jlc29sdmVQYXRjaC5iaW5kKHRoaXMsIG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAnY2xvbmUnIGFuZCAnY29uY2F0JyBmdW5jdGlvbnMgYXJlIGludGVybmFsbHkgY2FsbGluZyAnY29uc3RydWN0U3RhY2snIHdoaWNoIGlzIGluIHNhbWVcbiAgICAgICAgLy8gbW9kdWxlLCB0aHVzIG5vdCBwYXRjaGVkLCBhbmQgd2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgaXQgc3BlY2lmaWNhbGx5LlxuICAgICAgICB0aGlzLl93cmFwKG1pZGRsZXdhcmVTdGFja1RvUGF0Y2gsICdjbG9uZScsIHRoaXMuX2dldFYzTWlkZGxld2FyZVN0YWNrQ2xvbmVQYXRjaC5iaW5kKHRoaXMsIG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgdGhpcy5fd3JhcChtaWRkbGV3YXJlU3RhY2tUb1BhdGNoLCAnY29uY2F0JywgdGhpcy5fZ2V0VjNNaWRkbGV3YXJlU3RhY2tDbG9uZVBhdGNoLmJpbmQodGhpcywgbW9kdWxlVmVyc2lvbikpO1xuICAgIH1cbiAgICBfZ2V0VjNNaWRkbGV3YXJlU3RhY2tDbG9uZVBhdGNoKG1vZHVsZVZlcnNpb24sIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YWNrID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBzZWxmLnBhdGNoVjNNaWRkbGV3YXJlU3RhY2sobW9kdWxlVmVyc2lvbiwgbmV3U3RhY2spO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1N0YWNrO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjNNaWRkbGV3YXJlU3RhY2tSZXNvbHZlUGF0Y2gobW9kdWxlVmVyc2lvbiwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoX2hhbmRsZXIsIGF3c0V4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdIYW5kbGVyID0gb3JpZ2luYWwuY2FsbCh0aGlzLCBfaGFuZGxlciwgYXdzRXhlY3V0aW9uQ29udGV4dCk7XG4gICAgICAgICAgICBjb25zdCBwYXRjaGVkSGFuZGxlciA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50Q29uZmlnID0gY29tbWFuZFtWM19DTElFTlRfQ09ORklHX0tFWV07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaW9uUHJvbWlzZSA9IGNsaWVudENvbmZpZz8ucmVnaW9uPy4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IGNsaWVudENvbmZpZz8uc2VydmljZUlkID8/XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLnJlbW92ZVN1ZmZpeEZyb21TdHJpbmdJZkV4aXN0cykoXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSAnQVdTJyBhcyBhIGZhbGxiYWNrIHNlcnZpY2VOYW1lIHRvIG1hdGNoIHR5cGUgZGVmaW5pdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gcHJhY3RpY2UsIGBjbGllbnROYW1lYCBzaG91bGQgYWx3YXlzIGJlIHNldC5cbiAgICAgICAgICAgICAgICAgICAgYXdzRXhlY3V0aW9uQ29udGV4dC5jbGllbnROYW1lIHx8ICdBV1MnLCAnQ2xpZW50Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBhd3NFeGVjdXRpb25Db250ZXh0LmNvbW1hbmROYW1lID8/IGNvbW1hbmQuY29uc3RydWN0b3I/Lm5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlcXVlc3QgPSAoMCwgdXRpbHNfMS5ub3JtYWxpemVWM1JlcXVlc3QpKHNlcnZpY2VOYW1lLCBjb21tYW5kTmFtZSwgY29tbWFuZC5pbnB1dCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0TWV0YWRhdGEgPSBzZWxmLnNlcnZpY2VzRXh0ZW5zaW9ucy5yZXF1ZXN0UHJlU3Bhbkhvb2sobm9ybWFsaXplZFJlcXVlc3QsIHNlbGYuZ2V0Q29uZmlnKCksIHNlbGYuX2RpYWcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9ICgwLCBjb3JlXzEuaHJUaW1lKSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBzZWxmLl9zdGFydEF3c1YzU3Bhbihub3JtYWxpemVkUmVxdWVzdCwgcmVxdWVzdE1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0V2l0aFNwYW4gPSBhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmVnaW9uUHJvbWlzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmVkUmVnaW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0LnJlZ2lvbiA9IHJlc29sdmVkUmVnaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoZW51bXNfMS5BdHRyaWJ1dGVOYW1lcy5DTE9VRF9SRUdJT04sIHJlc29sdmVkUmVnaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vdGhpbmcgbXVjaCB3ZSBjYW4gZG8gaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UnbGwganVzdCBjb250aW51ZSB3aXRob3V0IHJlZ2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtBd3NJbnN0cnVtZW50YXRpb24uY29tcG9uZW50fSBpbnN0cnVtZW50YXRpb246IGZhaWxlZCB0byBleHRyYWN0IHJlZ2lvbiBmcm9tIGFzeW5jIGZ1bmN0aW9uYCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsVXNlclByZVJlcXVlc3RIb29rKHNwYW4sIG5vcm1hbGl6ZWRSZXF1ZXN0LCBtb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSBhcGlfMS5jb250ZXh0LndpdGgoYWN0aXZlQ29udGV4dFdpdGhTcGFuLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2aWNlc0V4dGVuc2lvbnMucmVxdWVzdFBvc3RTcGFuSG9vayhub3JtYWxpemVkUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxPcmlnaW5hbEZ1bmN0aW9uKCgpID0+IG9yaWdIYW5kbGVyLmNhbGwodGhpcywgY29tbWFuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlV2l0aFJlc3BvbnNlTG9naWMgPSByZXN1bHRQcm9taXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLm91dHB1dD8uJG1ldGFkYXRhPy5yZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLkFXU19SRVFVRVNUX0lELCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBodHRwU3RhdHVzQ29kZSA9IHJlc3BvbnNlLm91dHB1dD8uJG1ldGFkYXRhPy5odHRwU3RhdHVzQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfSFRUUF9TVEFUVVNfQ09ERSwgaHR0cFN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9zZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFLCBodHRwU3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRSZXF1ZXN0SWQgPSByZXNwb25zZS5vdXRwdXQ/LiRtZXRhZGF0YT8uZXh0ZW5kZWRSZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dGVuZGVkUmVxdWVzdElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGVudW1zXzEuQXR0cmlidXRlTmFtZXMuQVdTX1JFUVVFU1RfRVhURU5ERURfSUQsIGV4dGVuZGVkUmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZS5vdXRwdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG5vcm1hbGl6ZWRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlID0gc2VsZi5zZXJ2aWNlc0V4dGVuc2lvbnMucmVzcG9uc2VIb29rKG5vcm1hbGl6ZWRSZXNwb25zZSwgc3Bhbiwgc2VsZi50cmFjZXIsIHNlbGYuZ2V0Q29uZmlnKCksIHN0YXJ0VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm91dHB1dCA9IG92ZXJyaWRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkUmVzcG9uc2UuZGF0YSA9IG92ZXJyaWRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsVXNlclJlc3BvbnNlSG9vayhzcGFuLCBub3JtYWxpemVkUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdElkID0gZXJyPy5SZXF1ZXN0SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLkFXU19SRVFVRVNUX0lELCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBodHRwU3RhdHVzQ29kZSA9IGVycj8uJG1ldGFkYXRhPy5odHRwU3RhdHVzQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfSFRUUF9TVEFUVVNfQ09ERSwgaHR0cFN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9zZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFLCBodHRwU3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRSZXF1ZXN0SWQgPSBlcnI/LmV4dGVuZGVkUmVxdWVzdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRlbmRlZFJlcXVlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLkFXU19SRVFVRVNUX0VYVEVOREVEX0lELCBleHRlbmRlZFJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbFVzZXJFeGNlcHRpb25SZXNwb25zZUhvb2soc3Bhbiwgbm9ybWFsaXplZFJlcXVlc3QsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0TWV0YWRhdGEuaXNTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VXaXRoUmVzcG9uc2VMb2dpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RNZXRhZGF0YS5pc0luY29taW5nXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIHV0aWxzXzEuYmluZFByb21pc2UpKGhhbmRsZXJQcm9taXNlLCBhY3RpdmVDb250ZXh0V2l0aFNwYW4sIDIpXG4gICAgICAgICAgICAgICAgICAgIDogaGFuZGxlclByb21pc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHBhdGNoZWRIYW5kbGVyO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfY2FsbE9yaWdpbmFsRnVuY3Rpb24ob3JpZ2luYWxGdW5jdGlvbikge1xuICAgICAgICBpZiAodGhpcy5nZXRDb25maWcoKS5zdXBwcmVzc0ludGVybmFsSW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKCgwLCBjb3JlXzEuc3VwcHJlc3NUcmFjaW5nKShhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSwgb3JpZ2luYWxGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF91cGRhdGVNZXRyaWNJbnN0cnVtZW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzRXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc0V4dGVuc2lvbnMgPSBuZXcgc2VydmljZXNfMS5TZXJ2aWNlc0V4dGVuc2lvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlcnZpY2VzRXh0ZW5zaW9ucy51cGRhdGVNZXRyaWNJbnN0cnVtZW50cyh0aGlzLm1ldGVyKTtcbiAgICB9XG59XG5leHBvcnRzLkF3c0luc3RydW1lbnRhdGlvbiA9IEF3c0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF3cy1zZGsuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXdzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBhd3Nfc2RrXzEgPSByZXF1aXJlKFwiLi9hd3Mtc2RrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXdzSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhd3Nfc2RrXzEuQXdzSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjUzLjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWJ1bnlhbic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PcGVuVGVsZW1ldHJ5QnVueWFuU3RyZWFtID0gdm9pZCAwO1xuY29uc3QgYXBpX2xvZ3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGktbG9nc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IERFRkFVTFRfSU5TVFJVTUVOVEFUSU9OX1NDT1BFX05BTUUgPSB2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FO1xuY29uc3QgREVGQVVMVF9JTlNUUlVNRU5UQVRJT05fU0NPUEVfVkVSU0lPTiA9IHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT047XG4vLyBUaGlzIGJsb2NrIGlzIGEgY29weSAobW9kdWxvIGNvZGUgc3R5bGUgYW5kIFR5cGVTY3JpcHQgdHlwZXMpIG9mIHRoZSBCdW55YW5cbi8vIGNvZGUgdGhhdCBkZWZpbmVzIGxvZyBsZXZlbCB2YWx1ZSBhbmQgbmFtZXMuIFRoZXNlIHZhbHVlcyB3b24ndCBldmVyIGNoYW5nZVxuLy8gaW4gYnVueWFuQDEuIFRoaXMgZmlsZSBpcyBwYXJ0IG9mICppbnN0cnVtZW50aW5nKiBCdW55YW4sIHNvIHdlIHdhbnQgdG9cbi8vIGF2b2lkIGEgZGVwZW5kZW5jeSBvbiB0aGUgbGlicmFyeS5cbmNvbnN0IFRSQUNFID0gMTA7XG5jb25zdCBERUJVRyA9IDIwO1xuY29uc3QgSU5GTyA9IDMwO1xuY29uc3QgV0FSTiA9IDQwO1xuY29uc3QgRVJST1IgPSA1MDtcbmNvbnN0IEZBVEFMID0gNjA7XG5jb25zdCBsZXZlbEZyb21OYW1lID0ge1xuICAgIHRyYWNlOiBUUkFDRSxcbiAgICBkZWJ1ZzogREVCVUcsXG4gICAgaW5mbzogSU5GTyxcbiAgICB3YXJuOiBXQVJOLFxuICAgIGVycm9yOiBFUlJPUixcbiAgICBmYXRhbDogRkFUQUwsXG59O1xuY29uc3QgbmFtZUZyb21MZXZlbCA9IHt9O1xuT2JqZWN0LmtleXMobGV2ZWxGcm9tTmFtZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIG5hbWVGcm9tTGV2ZWxbbGV2ZWxGcm9tTmFtZVtuYW1lXV0gPSBuYW1lO1xufSk7XG5jb25zdCBPVEVMX1NFVl9OVU1fRlJPTV9CVU5ZQU5fTEVWRUwgPSB7XG4gICAgW1RSQUNFXTogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5UUkFDRSxcbiAgICBbREVCVUddOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkRFQlVHLFxuICAgIFtJTkZPXTogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPLFxuICAgIFtXQVJOXTogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5XQVJOLFxuICAgIFtFUlJPUl06IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRVJST1IsXG4gICAgW0ZBVEFMXTogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5GQVRBTCxcbn07XG5jb25zdCBFWFRSQV9TRVZfTlVNUyA9IFtcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFMixcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFMyxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFNCxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkRFQlVHMixcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkRFQlVHMyxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkRFQlVHNCxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk8yLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuSU5GTzMsXG4gICAgYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPNCxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLldBUk4yLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuV0FSTjMsXG4gICAgYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5XQVJONCxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SMixcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SMyxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SNCxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkZBVEFMMixcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkZBVEFMMyxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkZBVEFMNCxcbl07XG5mdW5jdGlvbiBzZXZlcml0eU51bWJlckZyb21CdW55YW5MZXZlbChsdmwpIHtcbiAgICAvLyBGYXN0IGNvbW1vbiBjYXNlOiBvbmUgb2YgdGhlIGtub3duIGxldmVsc1xuICAgIGNvbnN0IHNldiA9IE9URUxfU0VWX05VTV9GUk9NX0JVTllBTl9MRVZFTFtsdmxdO1xuICAgIGlmIChzZXYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gc2V2O1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIHNjYWxlIHRoZSBCdW55YW4gbGV2ZWwgcmFuZ2UgLS0gMTAgKFRSQUNFKSB0byA3MCAoRkFUQUwrMTApXG4gICAgLy8gLS0gb250byB0aGUgZXh0cmEgT1RlbCBzZXZlcml0eSBudW1iZXJzIChUUkFDRTIsIFRSQUNFMywgLi4uLCBGQVRBTDQpLlxuICAgIC8vIFZhbHVlcyBiZWxvdyBidW55YW4uVFJBQ0UgbWFwIHRvIFNldmVyaXR5TnVtYmVyLlRSQUNFMiwgd2hpY2ggbWF5IGJlXG4gICAgLy8gY29uc2lkZXJlZCBhIGJpdCB3ZWlyZCwgYnV0IGl0IG1lYW5zIHRoZSB1bm51bWJlcmVkIGxldmVscyBhcmUgYWx3YXlzXG4gICAgLy8ganVzdCBmb3IgZXhhY3RseSB2YWx1ZXMuXG4gICAgY29uc3QgcmVsYXRpdmVMZXZlbFdlaWdodCA9IChsdmwgLSAxMCkgLyAoNzAgLSAxMCk7XG4gICAgY29uc3Qgb3RlbFNldklkeCA9IE1hdGguZmxvb3IocmVsYXRpdmVMZXZlbFdlaWdodCAqIEVYVFJBX1NFVl9OVU1TLmxlbmd0aCk7XG4gICAgY29uc3QgY2FwcGVkT1RlbElkeCA9IE1hdGgubWluKEVYVFJBX1NFVl9OVU1TLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIG90ZWxTZXZJZHgpKTtcbiAgICBjb25zdCBvdGVsU2V2VmFsdWUgPSBFWFRSQV9TRVZfTlVNU1tjYXBwZWRPVGVsSWR4XTtcbiAgICByZXR1cm4gb3RlbFNldlZhbHVlO1xufVxuLyoqXG4gKiBBIEJ1bnlhbiBzdHJlYW0gZm9yIHNlbmRpbmcgbG9nIHJlY29yZHMgdG8gdGhlIE9wZW5UZWxlbWV0cnkgTG9ncyBTREsuXG4gKi9cbmNsYXNzIE9wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW0ge1xuICAgIF9vdGVsTG9nZ2VyO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9vdGVsTG9nZ2VyID0gYXBpX2xvZ3NfMS5sb2dzLmdldExvZ2dlcihERUZBVUxUX0lOU1RSVU1FTlRBVElPTl9TQ09QRV9OQU1FLCBERUZBVUxUX0lOU1RSVU1FTlRBVElPTl9TQ09QRV9WRVJTSU9OKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS90cmVudG0vbm9kZS1idW55YW4jbG9nLXJlY29yZC1maWVsZHNcbiAgICAgKiB0byBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9vdGVsL2xvZ3MvZGF0YS1tb2RlbC9cbiAgICAgKlxuICAgICAqIERldiBOb3RlczpcbiAgICAgKiAtIFdlIGRyb3AgdGhlIEJ1bnlhbiAndicgZmllbGQuIEl0IGlzIG1lYW50IHRvIGluZGljYXRlIHRoZSBmb3JtYXRcbiAgICAgKiAgIG9mIHRoZSBCdW55YW4gbG9nIHJlY29yZC4gRldJVywgaXQgaGFzIGFsd2F5cyBiZWVuIGAwYC5cbiAgICAgKiAtIFRoZSBzdGFuZGFyZCBCdW55YW4gYGhvc3RuYW1lYCBhbmQgYHBpZGAgZmllbGRzIGFyZSByZW1vdmVkIGJlY2F1c2UgdGhleVxuICAgICAqICAgYXJlIHJlZHVuZGFudCB3aXRoIHRoZSBPcGVuVGVsZW1ldHJ5IGBob3N0Lm5hbWVgIGFuZCBgcHJvY2Vzcy5waWRgXG4gICAgICogICBSZXNvdXJjZSBhdHRyaWJ1dGVzLCByZXNwZWN0aXZlbHkuIFRoaXMgY29kZSBjYW5ub3QgY2hhbmdlIHRoZVxuICAgICAqICAgTG9nZ2VyUHJvdmlkZXIncyBgcmVzb3VyY2VgLCBzbyBnZXR0aW5nIHRoZSBPcGVuVGVsZW1ldHJ5IGVxdWl2YWxlbnRzXG4gICAgICogICBkZXBlbmRzIG9uIHRoZSB1c2VyIHVzaW5nIHJlbGV2YW50IE9wZW5UZWxlbWV0cnkgcmVzb3VyY2UgZGV0ZWN0b3JzLlxuICAgICAqICAgXCJleGFtcGxlcy90ZWxlbWV0cnkuanNcIiBzaG93cyB1c2luZyBIb3N0RGV0ZWN0b3IgYW5kIFByb2Nlc3NEZXRlY3RvciBmb3JcbiAgICAgKiAgIHRoaXMuXG4gICAgICogLSBUaGUgQnVueWFuIGBuYW1lYCBmaWVsZCAqY291bGQqIG5hdHVyYWxseSBtYXAgdG8gT3BlblRlbGVtZXRyeSdzXG4gICAgICogICBgc2VydmljZS5uYW1lYCByZXNvdXJjZSBhdHRyaWJ1dGUuIEhvd2V2ZXIsIHRoYXQgaXMgZGViYXRhYmxlLCBhcyBzb21lXG4gICAgICogICB1c2VycyBtaWdodCB1c2UgYG5hbWVgIG1vcmUgbGlrZSBhIGxvZzRqIGxvZ2dlciBuYW1lLlxuICAgICAqIC0gU3RyaXAgdGhlIGB0cmFjZV9pZGAgZXQgYWwgZmllbGRzIHRoYXQgbWF5IGhhdmUgYmVlbiBhZGRlZCBieSB0aGVcbiAgICAgKiAgIHRoZSBfZW1pdCB3cmFwcGVyLlxuICAgICAqL1xuICAgIHdyaXRlKHJlYykge1xuICAgICAgICBjb25zdCB7IHRpbWUsIGxldmVsLCBtc2csIHYsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIGhvc3RuYW1lLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICBwaWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIHRyYWNlX2lkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICBzcGFuX2lkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICB0cmFjZV9mbGFncywgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgLi4uZmllbGRzIH0gPSByZWM7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgdGltZS5nZXRUaW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSB0aW1lLmdldFRpbWUoKTsgLy8gbXNcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkcy50aW1lID0gdGltZTsgLy8gRXhwb3NlIG5vbi1EYXRlIFwidGltZVwiIGZpZWxkIG9uIGF0dHJpYnV0ZXMuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3RlbFJlYyA9IHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgIG9ic2VydmVkVGltZXN0YW1wOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICBzZXZlcml0eU51bWJlcjogc2V2ZXJpdHlOdW1iZXJGcm9tQnVueWFuTGV2ZWwobGV2ZWwpLFxuICAgICAgICAgICAgc2V2ZXJpdHlUZXh0OiBuYW1lRnJvbUxldmVsW2xldmVsXSxcbiAgICAgICAgICAgIGJvZHk6IG1zZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGZpZWxkcyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fb3RlbExvZ2dlci5lbWl0KG90ZWxSZWMpO1xuICAgIH1cbn1cbmV4cG9ydHMuT3BlblRlbGVtZXRyeUJ1bnlhblN0cmVhbSA9IE9wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PcGVuVGVsZW1ldHJ5QnVueWFuU3RyZWFtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CdW55YW5JbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IE9wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW1fMSA9IHJlcXVpcmUoXCIuL09wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW1cIik7XG5jb25zdCBhcGlfbG9nc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaS1sb2dzXCIpO1xuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgZGlzYWJsZUxvZ1NlbmRpbmc6IGZhbHNlLFxuICAgIGRpc2FibGVMb2dDb3JyZWxhdGlvbjogZmFsc2UsXG59O1xuY2xhc3MgQnVueWFuSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdidW55YW4nLCBbJz49MS4wLjAgPDInXSwgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgY29uc3QgTG9nZ2VyID0gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnXG4gICAgICAgICAgICAgICAgICAgID8gbW9kdWxlLmRlZmF1bHQgLy8gRVNNXG4gICAgICAgICAgICAgICAgICAgIDogbW9kdWxlOyAvLyBDb21tb25KU1xuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAoTG9nZ2VyLnByb3RvdHlwZSwgJ19lbWl0JywgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRQYXRjaGVkRW1pdCgpKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBMb2dnZXJUcmFjZWQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBMb2dnZXJUcmFjZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlZCB3aXRoIGBuZXcgTG9nZ2VyKClgXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlZCB3aXRob3V0IGBuZXdgXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0ID0gTG9nZ2VyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gaW5zdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBgX2NoaWxkT3B0aW9uc2AgaXMgZGVmaW5lZCwgdGhpcyBpcyBhIGBMb2dnZXIjY2hpbGQoLi4uKWBcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbC4gV2UgbXVzdCBub3QgYWRkIGFuIE9UZWwgc3RyZWFtIGFnYWluLlxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1sxXSAvKiBfY2hpbGRPcHRpb25zICovID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fYWRkU3RyZWFtKGluc3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE11c3QgdXNlIHRoZSBkZXByZWNhdGVkIGBpbmhlcml0c2AgdG8gc3VwcG9ydCB0aGlzIHN0eWxlOlxuICAgICAgICAgICAgICAgIC8vICAgIGNvbnN0IGxvZyA9IHJlcXVpcmUoJ2J1bnlhbicpKHtuYW1lOiAnZm9vJ30pO1xuICAgICAgICAgICAgICAgIC8vIGkuZS4gY2FsbGluZyB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gd2l0aG91dCBgbmV3YC5cbiAgICAgICAgICAgICAgICAoMCwgdXRpbF8xLmluaGVyaXRzKShMb2dnZXJUcmFjZWQsIExvZ2dlcik7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZEV4cG9ydHMgPSBPYmplY3QuYXNzaWduKExvZ2dlclRyYWNlZCwgTG9nZ2VyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKHBhdGNoZWRFeHBvcnRzLCAnY3JlYXRlTG9nZ2VyJywgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRQYXRjaGVkQ3JlYXRlTG9nZ2VyKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXRjaGVkRXhwb3J0cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmNvbmZpZyB9KTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRFbWl0KCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRFbWl0KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnN0cnVtZW50YXRpb24uaXNFbmFibGVkKCkgfHwgY29uZmlnLmRpc2FibGVMb2dDb3JyZWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgICAgIGlmICghc3Bhbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gc3Bhbi5zcGFuQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICghKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkoc3BhbkNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICByZWNvcmRbJ3RyYWNlX2lkJ10gPSBzcGFuQ29udGV4dC50cmFjZUlkO1xuICAgICAgICAgICAgICAgIHJlY29yZFsnc3Bhbl9pZCddID0gc3BhbkNvbnRleHQuc3BhbklkO1xuICAgICAgICAgICAgICAgIHJlY29yZFsndHJhY2VfZmxhZ3MnXSA9IGAwJHtzcGFuQ29udGV4dC50cmFjZUZsYWdzLnRvU3RyaW5nKDE2KX1gO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fY2FsbEhvb2soc3BhbiwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hlZENyZWF0ZUxvZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkQ3JlYXRlTG9nZ2VyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBvcmlnaW5hbCguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2FkZFN0cmVhbShsb2dnZXIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfYWRkU3RyZWFtKGxvZ2dlcikge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkgfHwgY29uZmlnLmRpc2FibGVMb2dTZW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnQWRkaW5nIE9wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW0gdG8gbG9nZ2VyJyk7XG4gICAgICAgIGxldCBzdHJlYW1MZXZlbCA9IGxvZ2dlci5sZXZlbCgpO1xuICAgICAgICBpZiAoY29uZmlnLmxvZ1NldmVyaXR5KSB7XG4gICAgICAgICAgICBjb25zdCBidW55YW5MZXZlbCA9IGJ1bnlhbkxldmVsRnJvbVNldmVyaXR5KGNvbmZpZy5sb2dTZXZlcml0eSk7XG4gICAgICAgICAgICBzdHJlYW1MZXZlbCA9IGJ1bnlhbkxldmVsIHx8IHN0cmVhbUxldmVsO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5hZGRTdHJlYW0oe1xuICAgICAgICAgICAgdHlwZTogJ3JhdycsXG4gICAgICAgICAgICBzdHJlYW06IG5ldyBPcGVuVGVsZW1ldHJ5QnVueWFuU3RyZWFtXzEuT3BlblRlbGVtZXRyeUJ1bnlhblN0cmVhbSgpLFxuICAgICAgICAgICAgbGV2ZWw6IHN0cmVhbUxldmVsLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2NhbGxIb29rKHNwYW4sIHJlY29yZCkge1xuICAgICAgICBjb25zdCB7IGxvZ0hvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICh0eXBlb2YgbG9nSG9vayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBsb2dIb29rKHNwYW4sIHJlY29yZCksIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcignZXJyb3IgY2FsbGluZyBsb2dIb29rJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5CdW55YW5JbnN0cnVtZW50YXRpb24gPSBCdW55YW5JbnN0cnVtZW50YXRpb247XG5mdW5jdGlvbiBidW55YW5MZXZlbEZyb21TZXZlcml0eShzZXZlcml0eSkge1xuICAgIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkZBVEFMKSB7XG4gICAgICAgIHJldHVybiAnZmF0YWwnO1xuICAgIH1cbiAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SKSB7XG4gICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgIH1cbiAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLldBUk4pIHtcbiAgICAgICAgcmV0dXJuICd3YXJuJztcbiAgICB9XG4gICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPKSB7XG4gICAgICAgIHJldHVybiAnaW5mbyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuREVCVUcpIHtcbiAgICAgICAgcmV0dXJuICdkZWJ1Zyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuVFJBQ0UpIHtcbiAgICAgICAgcmV0dXJuICd0cmFjZSc7XG4gICAgfVxuICAgIHJldHVybjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT3BlblRlbGVtZXRyeUJ1bnlhblN0cmVhbSA9IGV4cG9ydHMuQnVueWFuSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQnVueWFuSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5CdW55YW5JbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgT3BlblRlbGVtZXRyeUJ1bnlhblN0cmVhbV8xID0gcmVxdWlyZShcIi4vT3BlblRlbGVtZXRyeUJ1bnlhblN0cmVhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW1cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9wZW5UZWxlbWV0cnlCdW55YW5TdHJlYW1fMS5PcGVuVGVsZW1ldHJ5QnVueWFuU3RyZWFtOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9DQVNTQU5EUkEgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gZXhwb3J0cy5BVFRSX0RCX1VTRVIgPSBleHBvcnRzLkFUVFJfREJfU1lTVEVNID0gZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9IGV4cG9ydHMuQVRUUl9EQl9OQU1FID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5uYW1lc3BhY2VgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgY3VzdG9tZXJzXG4gKiBAZXhhbXBsZSBtYWluXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5uYW1lc3BhY2VgLlxuICovXG5leHBvcnRzLkFUVFJfREJfTkFNRSA9ICdkYi5uYW1lJztcbi8qKlxuICogVGhlIGRhdGFiYXNlIHN0YXRlbWVudCBiZWluZyBleGVjdXRlZC5cbiAqXG4gKiBAZXhhbXBsZSBTRUxFQ1QgKiBGUk9NIHd1c2VyX3RhYmxlXG4gKiBAZXhhbXBsZSBTRVQgbXlrZXkgXCJXdVZhbHVlXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnF1ZXJ5LnRleHRgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gJ2RiLnN0YXRlbWVudCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIuc3lzdGVtLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5zeXN0ZW0ubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSAnZGIuc3lzdGVtJztcbi8qKlxuICogRGVwcmVjYXRlZCwgbm8gcmVwbGFjZW1lbnQgYXQgdGhpcyB0aW1lLlxuICpcbiAqIEBleGFtcGxlIHJlYWRvbmx5X3VzZXJcbiAqIEBleGFtcGxlIHJlcG9ydGluZ191c2VyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQsIG5vIHJlcGxhY2VtZW50IGF0IHRoaXMgdGltZS5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1VTRVIgPSAnZGIudXNlcic7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJjYXNzYW5kcmFcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RCX1NZU1RFTX0uXG4gKlxuICogQXBhY2hlIENhc3NhbmRyYVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX0NBU1NBTkRSQSA9ICdjYXNzYW5kcmEnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTMuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY2Fzc2FuZHJhLWRyaXZlcic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DYXNzYW5kcmFEcml2ZXJJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBbJz49NC40LjAgPDUnXTtcbmNsYXNzIENhc3NhbmRyYURyaXZlckluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2Nhc3NhbmRyYS1kcml2ZXInLCBzdXBwb3J0ZWRWZXJzaW9ucywgZHJpdmVyTW9kdWxlID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBjb25zdCBDbGllbnQgPSBkcml2ZXJNb2R1bGUuQ2xpZW50LnByb3RvdHlwZTtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShDbGllbnRbJ19leGVjdXRlJ10pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKENsaWVudCwgJ19leGVjdXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoQ2xpZW50LmJhdGNoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChDbGllbnQsICdiYXRjaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKENsaWVudC5zdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKENsaWVudCwgJ3N0cmVhbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChDbGllbnQsICdfZXhlY3V0ZScsIHRoaXMuX2dldFBhdGNoZWRFeGVjdXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5fd3JhcChDbGllbnQsICdiYXRjaCcsIHRoaXMuX2dldFBhdGNoZWRCYXRjaCgpKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAoQ2xpZW50LCAnc3RyZWFtJywgdGhpcy5fZ2V0UGF0Y2hlZFN0cmVhbSgpKTtcbiAgICAgICAgICAgIHJldHVybiBkcml2ZXJNb2R1bGU7XG4gICAgICAgIH0sIGRyaXZlck1vZHVsZSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgY29uc3QgQ2xpZW50ID0gZHJpdmVyTW9kdWxlLkNsaWVudC5wcm90b3R5cGU7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoQ2xpZW50WydfZXhlY3V0ZSddKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChDbGllbnQsICdfZXhlY3V0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKENsaWVudC5iYXRjaCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoQ2xpZW50LCAnYmF0Y2gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShDbGllbnQuc3RyZWFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChDbGllbnQsICdzdHJlYW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdjYXNzYW5kcmEtZHJpdmVyL2xpYi9yZXF1ZXN0LWV4ZWN1dGlvbi5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCBleGVjdXRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShleGVjdXRpb24ucHJvdG90eXBlWydfc2VuZE9uQ29ubmVjdGlvbiddKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoZXhlY3V0aW9uLnByb3RvdHlwZSwgJ19zZW5kT25Db25uZWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAoZXhlY3V0aW9uLnByb3RvdHlwZSwgJ19zZW5kT25Db25uZWN0aW9uJywgdGhpcy5fZ2V0UGF0Y2hlZFNlbmRPbkNvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbjtcbiAgICAgICAgICAgIH0sIGV4ZWN1dGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4ZWN1dGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGV4ZWN1dGlvbi5wcm90b3R5cGUsICdfc2VuZE9uQ29ubmVjdGlvbicpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfZ2V0TWF4UXVlcnlMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZygpLm1heFF1ZXJ5TGVuZ3RoID8/IDY1NTM2O1xuICAgIH1cbiAgICBfc2hvdWxkSW5jbHVkZURiU3RhdGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb25maWcoKS5lbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nID8/IGZhbHNlO1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hlZEV4ZWN1dGUoKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZEV4ZWN1dGUoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBwbHVnaW4uc3RhcnRTcGFuKHsgb3A6ICdleGVjdXRlJywgcXVlcnk6IGFyZ3NbMF0gfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSBhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChleGVjQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbFNwYW4oc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSB3cmFwUHJvbWlzZShzcGFuLCBleGVjUHJvbWlzZSwgKHNwYW4sIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2NhbGxSZXNwb25zZUhvb2soc3BhbiwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC5iaW5kKGV4ZWNDb250ZXh0LCB3cmFwcGVkUHJvbWlzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hlZFNlbmRPbkNvbm5lY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlbmRPbkNvbm5lY3Rpb24oLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSB0aGlzWydfY29ubmVjdGlvbiddO1xuICAgICAgICAgICAgICAgIGlmIChzcGFuICE9PSB1bmRlZmluZWQgJiYgY29ubiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludChjb25uLnBvcnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfTkFNRSwgY29ubi5hZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihwb3J0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVCwgcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRCYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkQmF0Y2goLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pID8gYXJnc1swXSA6IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBwbHVnaW4uc3RhcnRTcGFuKHsgb3A6ICdiYXRjaCcsIHF1ZXJ5OiBjb21iaW5lUXVlcmllcyhxdWVyaWVzKSB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXRjaENvbnRleHQgPSBhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGZ1bmN0aW9uICguLi5jYkFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gY2JBcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsQ2FsbGJhY2suYXBwbHkodGhpcywgY2JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdID0gcGF0Y2hlZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKGJhdGNoQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYmF0Y2hQcm9taXNlID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsU3BhbihzcGFuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkUHJvbWlzZSA9IHdyYXBQcm9taXNlKHNwYW4sIGJhdGNoUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQuYmluZChiYXRjaENvbnRleHQsIHdyYXBwZWRQcm9taXNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRQYXRjaGVkU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRTdHJlYW0oLi4uYXJncykge1xuICAgICAgICAgICAgICAgIC8vIFNpbmNlIHN0cmVhbSBpbnRlcm5hbGx5IHVzZXMgZXhlY3V0ZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgREJfU1RBVEVNRU5UIHR3aWNlXG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHBsdWdpbi5zdGFydFNwYW4oeyBvcDogJ3N0cmVhbScgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzNdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFNwYW4gPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdID0gZW5kU3BhbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFNwYW4oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbM10gPSB3cmFwcGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxTcGFuKHNwYW4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhcnRTcGFuKHsgb3AsIHF1ZXJ5IH0sIGNsaWVudCkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfQ0FTU0FORFJBLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fc2hvdWxkSW5jbHVkZURiU3RhdGVtZW50KCkgJiYgcXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdHJ1bmNhdGVRdWVyeShxdWVyeSwgdGhpcy5fZ2V0TWF4UXVlcnlMZW5ndGgoKSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF0gPSBzdGF0ZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgdXNlciA9IGNsaWVudC5vcHRpb25zPy5jcmVkZW50aWFscz8udXNlcm5hbWU7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1VTRVJdID0gdXNlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xpZW50LmtleXNwYWNlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX05BTUVdID0gY2xpZW50LmtleXNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWNlci5zdGFydFNwYW4oYGNhc3NhbmRyYS1kcml2ZXIuJHtvcH1gLCB7XG4gICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2NhbGxSZXNwb25zZUhvb2soc3BhbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZUhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghcmVzcG9uc2VIb29rKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHJlc3BvbnNlSG9vayhzcGFuLCB7IHJlc3BvbnNlOiByZXNwb25zZSB9KSwgZSA9PiB7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZXJyb3IoJ3Jlc3BvbnNlSG9vayBlcnJvcicsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG59XG5leHBvcnRzLkNhc3NhbmRyYURyaXZlckluc3RydW1lbnRhdGlvbiA9IENhc3NhbmRyYURyaXZlckluc3RydW1lbnRhdGlvbjtcbmZ1bmN0aW9uIGZhaWxTcGFuKHNwYW4sIGVycm9yKSB7XG4gICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICB9KTtcbiAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgc3Bhbi5lbmQoKTtcbn1cbmZ1bmN0aW9uIGNvbWJpbmVRdWVyaWVzKHF1ZXJpZXMpIHtcbiAgICByZXR1cm4gcXVlcmllc1xuICAgICAgICAubWFwKHF1ZXJ5ID0+ICh0eXBlb2YgcXVlcnkgPT09ICdzdHJpbmcnID8gcXVlcnkgOiBxdWVyeS5xdWVyeSkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbn1cbmZ1bmN0aW9uIHdyYXBQcm9taXNlKHNwYW4sIHByb21pc2UsIHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soc3BhbiwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0cnVuY2F0ZVF1ZXJ5KHF1ZXJ5LCBtYXhRdWVyeUxlbmd0aCkge1xuICAgIHJldHVybiBTdHJpbmcocXVlcnkpLnN1YnN0cmluZygwLCBtYXhRdWVyeUxlbmd0aCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNhc3NhbmRyYURyaXZlckluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNhc3NhbmRyYURyaXZlckluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuQ2Fzc2FuZHJhRHJpdmVySW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbm5lY3ROYW1lcyA9IGV4cG9ydHMuQ29ubmVjdFR5cGVzID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHZvaWQgMDtcbnZhciBBdHRyaWJ1dGVOYW1lcztcbihmdW5jdGlvbiAoQXR0cmlidXRlTmFtZXMpIHtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkNPTk5FQ1RfVFlQRVwiXSA9IFwiY29ubmVjdC50eXBlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJDT05ORUNUX05BTUVcIl0gPSBcImNvbm5lY3QubmFtZVwiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbnZhciBDb25uZWN0VHlwZXM7XG4oZnVuY3Rpb24gKENvbm5lY3RUeXBlcykge1xuICAgIENvbm5lY3RUeXBlc1tcIk1JRERMRVdBUkVcIl0gPSBcIm1pZGRsZXdhcmVcIjtcbiAgICBDb25uZWN0VHlwZXNbXCJSRVFVRVNUX0hBTkRMRVJcIl0gPSBcInJlcXVlc3RfaGFuZGxlclwiO1xufSkoQ29ubmVjdFR5cGVzID0gZXhwb3J0cy5Db25uZWN0VHlwZXMgfHwgKGV4cG9ydHMuQ29ubmVjdFR5cGVzID0ge30pKTtcbnZhciBDb25uZWN0TmFtZXM7XG4oZnVuY3Rpb24gKENvbm5lY3ROYW1lcykge1xuICAgIENvbm5lY3ROYW1lc1tcIk1JRERMRVdBUkVcIl0gPSBcIm1pZGRsZXdhcmVcIjtcbiAgICBDb25uZWN0TmFtZXNbXCJSRVFVRVNUX0hBTkRMRVJcIl0gPSBcInJlcXVlc3QgaGFuZGxlclwiO1xufSkoQ29ubmVjdE5hbWVzID0gZXhwb3J0cy5Db25uZWN0TmFtZXMgfHwgKGV4cG9ydHMuQ29ubmVjdE5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41MS4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jb25uZWN0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFkgPSB2b2lkIDA7XG5leHBvcnRzLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFkgPSBTeW1ib2woJ29wZW50ZWxlbWV0cnkuaW5zdHJ1bWVudGF0aW9uLWNvbm5lY3QucmVxdWVzdC1yb3V0ZS1zdGFjaycpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2VuZXJhdGVSb3V0ZSA9IGV4cG9ydHMucmVwbGFjZUN1cnJlbnRTdGFja1JvdXRlID0gZXhwb3J0cy5hZGROZXdTdGFja0xheWVyID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbmNvbnN0IGFkZE5ld1N0YWNrTGF5ZXIgPSAocmVxdWVzdCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlcXVlc3RbaW50ZXJuYWxfdHlwZXNfMS5fTEFZRVJTX1NUT1JFX1BST1BFUlRZXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1ZXN0LCBpbnRlcm5hbF90eXBlc18xLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFksIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdFtpbnRlcm5hbF90eXBlc18xLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFldLnB1c2goJy8nKTtcbiAgICBjb25zdCBzdGFja0xlbmd0aCA9IHJlcXVlc3RbaW50ZXJuYWxfdHlwZXNfMS5fTEFZRVJTX1NUT1JFX1BST1BFUlRZXS5sZW5ndGg7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHN0YWNrTGVuZ3RoID09PSByZXF1ZXN0W2ludGVybmFsX3R5cGVzXzEuX0xBWUVSU19TVE9SRV9QUk9QRVJUWV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXF1ZXN0W2ludGVybmFsX3R5cGVzXzEuX0xBWUVSU19TVE9SRV9QUk9QRVJUWV0ucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0Nvbm5lY3Q6IFRyeWluZyB0byBwb3AgdGhlIHN0YWNrIG11bHRpcGxlIHRpbWUnKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0cy5hZGROZXdTdGFja0xheWVyID0gYWRkTmV3U3RhY2tMYXllcjtcbmNvbnN0IHJlcGxhY2VDdXJyZW50U3RhY2tSb3V0ZSA9IChyZXF1ZXN0LCBuZXdSb3V0ZSkgPT4ge1xuICAgIGlmIChuZXdSb3V0ZSkge1xuICAgICAgICByZXF1ZXN0W2ludGVybmFsX3R5cGVzXzEuX0xBWUVSU19TVE9SRV9QUk9QRVJUWV0uc3BsaWNlKC0xLCAxLCBuZXdSb3V0ZSk7XG4gICAgfVxufTtcbmV4cG9ydHMucmVwbGFjZUN1cnJlbnRTdGFja1JvdXRlID0gcmVwbGFjZUN1cnJlbnRTdGFja1JvdXRlO1xuLy8gZ2VuZXJhdGUgcm91dGUgZnJvbSBleGlzdGluZyBzdGFjayBvbiByZXF1ZXN0IG9iamVjdC5cbi8vIHNwbGFzaCBiZXR3ZWVuIHN0YWNrIGxheWVyIHdpbGwgYmUgZGVkdXBlZFxuLy8gW1wiL2ZpcnN0L1wiLCBcIi9zZWNvbmRcIiwgXCIvdGhpcmQvXCJdID0+IC9maXJzdC9zZWNvbmQvdGhpcmQvXG5jb25zdCBnZW5lcmF0ZVJvdXRlID0gKHJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gcmVxdWVzdFtpbnRlcm5hbF90eXBlc18xLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFldLnJlZHVjZSgoYWNjLCBzdWIpID0+IGFjYy5yZXBsYWNlKC9cXC8rJC8sICcnKSArIHN1Yik7XG59O1xuZXhwb3J0cy5nZW5lcmF0ZVJvdXRlID0gZ2VuZXJhdGVSb3V0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25uZWN0SW5zdHJ1bWVudGF0aW9uID0gZXhwb3J0cy5BTk9OWU1PVVNfTkFNRSA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuQU5PTllNT1VTX05BTUUgPSAnYW5vbnltb3VzJztcbi8qKiBDb25uZWN0IGluc3RydW1lbnRhdGlvbiBmb3IgT3BlblRlbGVtZXRyeSAqL1xuY2xhc3MgQ29ubmVjdEluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2Nvbm5lY3QnLCBbJz49My4wLjAgPDQnXSwgbW9kdWxlRXhwb3J0cyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdGNoQ29uc3RydWN0b3IobW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX3BhdGNoQXBwKHBhdGNoZWRBcHApIHtcbiAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShwYXRjaGVkQXBwLnVzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAocGF0Y2hlZEFwcCwgJ3VzZScsIHRoaXMuX3BhdGNoVXNlLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocGF0Y2hlZEFwcC5oYW5kbGUpKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKHBhdGNoZWRBcHAsICdoYW5kbGUnLCB0aGlzLl9wYXRjaEhhbmRsZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfcGF0Y2hDb25zdHJ1Y3RvcihvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEFwcChhcHApO1xuICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhdGNoTmV4dChuZXh0LCBmaW5pc2hTcGFuKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0RnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXh0LmFwcGx5KHRoaXMsIFtlcnJdKTtcbiAgICAgICAgICAgIGZpbmlzaFNwYW4oKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9zdGFydFNwYW4ocm91dGVOYW1lLCBtaWRkbGVXYXJlKSB7XG4gICAgICAgIGxldCBjb25uZWN0VHlwZTtcbiAgICAgICAgbGV0IGNvbm5lY3ROYW1lO1xuICAgICAgICBsZXQgY29ubmVjdFR5cGVOYW1lO1xuICAgICAgICBpZiAocm91dGVOYW1lKSB7XG4gICAgICAgICAgICBjb25uZWN0VHlwZSA9IEF0dHJpYnV0ZU5hbWVzXzEuQ29ubmVjdFR5cGVzLlJFUVVFU1RfSEFORExFUjtcbiAgICAgICAgICAgIGNvbm5lY3RUeXBlTmFtZSA9IEF0dHJpYnV0ZU5hbWVzXzEuQ29ubmVjdE5hbWVzLlJFUVVFU1RfSEFORExFUjtcbiAgICAgICAgICAgIGNvbm5lY3ROYW1lID0gcm91dGVOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29ubmVjdFR5cGUgPSBBdHRyaWJ1dGVOYW1lc18xLkNvbm5lY3RUeXBlcy5NSURETEVXQVJFO1xuICAgICAgICAgICAgY29ubmVjdFR5cGVOYW1lID0gQXR0cmlidXRlTmFtZXNfMS5Db25uZWN0TmFtZXMuTUlERExFV0FSRTtcbiAgICAgICAgICAgIGNvbm5lY3ROYW1lID0gbWlkZGxlV2FyZS5uYW1lIHx8IGV4cG9ydHMuQU5PTllNT1VTX05BTUU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3Bhbk5hbWUgPSBgJHtjb25uZWN0VHlwZU5hbWV9IC0gJHtjb25uZWN0TmFtZX1gO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV06IHJvdXRlTmFtZS5sZW5ndGggPiAwID8gcm91dGVOYW1lIDogJy8nLFxuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkNPTk5FQ1RfVFlQRV06IGNvbm5lY3RUeXBlLFxuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkNPTk5FQ1RfTkFNRV06IGNvbm5lY3ROYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIF9wYXRjaE1pZGRsZXdhcmUocm91dGVOYW1lLCBtaWRkbGVXYXJlKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGlzRXJyb3JNaWRkbGV3YXJlID0gbWlkZGxlV2FyZS5sZW5ndGggPT09IDQ7XG4gICAgICAgIGZ1bmN0aW9uIHBhdGNoZWRNaWRkbGV3YXJlKCkge1xuICAgICAgICAgICAgaWYgKCFpbnN0cnVtZW50YXRpb24uaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkZGxlV2FyZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW3JlcUFyZ0lkeCwgcmVzQXJnSWR4LCBuZXh0QXJnSWR4XSA9IGlzRXJyb3JNaWRkbGV3YXJlXG4gICAgICAgICAgICAgICAgPyBbMSwgMiwgM11cbiAgICAgICAgICAgICAgICA6IFswLCAxLCAyXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGFyZ3VtZW50c1tyZXFBcmdJZHhdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXJndW1lbnRzW3Jlc0FyZ0lkeF07XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gYXJndW1lbnRzW25leHRBcmdJZHhdO1xuICAgICAgICAgICAgKDAsIHV0aWxzXzEucmVwbGFjZUN1cnJlbnRTdGFja1JvdXRlKShyZXEsIHJvdXRlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBycGNNZXRhZGF0YSA9ICgwLCBjb3JlXzEuZ2V0UlBDTWV0YWRhdGEpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgaWYgKHJvdXRlTmFtZSAmJiBycGNNZXRhZGF0YT8udHlwZSA9PT0gY29yZV8xLlJQQ1R5cGUuSFRUUCkge1xuICAgICAgICAgICAgICAgIHJwY01ldGFkYXRhLnJvdXRlID0gKDAsIHV0aWxzXzEuZ2VuZXJhdGVSb3V0ZSkocmVxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzcGFuTmFtZSA9ICcnO1xuICAgICAgICAgICAgaWYgKHJvdXRlTmFtZSkge1xuICAgICAgICAgICAgICAgIHNwYW5OYW1lID0gYHJlcXVlc3QgaGFuZGxlciAtICR7cm91dGVOYW1lfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGFuTmFtZSA9IGBtaWRkbGV3YXJlIC0gJHttaWRkbGVXYXJlLm5hbWUgfHwgZXhwb3J0cy5BTk9OWU1PVVNfTkFNRX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi5fc3RhcnRTcGFuKHJvdXRlTmFtZSwgbWlkZGxlV2FyZSk7XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2RpYWcuZGVidWcoJ3N0YXJ0IHNwYW4nLCBzcGFuTmFtZSk7XG4gICAgICAgICAgICBsZXQgc3BhbkZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2hTcGFuKCkge1xuICAgICAgICAgICAgICAgIGlmICghc3BhbkZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5GaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5kZWJ1ZyhgZmluaXNoaW5nIHNwYW4gJHtzcGFuLm5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2RpYWcuZGVidWcoYHNwYW4gJHtzcGFuLm5hbWV9IC0gYWxyZWFkeSBmaW5pc2hlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgZmluaXNoU3Bhbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuYWRkTGlzdGVuZXIoJ2Nsb3NlJywgZmluaXNoU3Bhbik7XG4gICAgICAgICAgICBhcmd1bWVudHNbbmV4dEFyZ0lkeF0gPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoTmV4dChuZXh0LCBmaW5pc2hTcGFuKTtcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGVXYXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdGNoZWRNaWRkbGV3YXJlLCAnbGVuZ3RoJywge1xuICAgICAgICAgICAgdmFsdWU6IG1pZGRsZVdhcmUubGVuZ3RoLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhdGNoZWRNaWRkbGV3YXJlO1xuICAgIH1cbiAgICBfcGF0Y2hVc2Uob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBtaWRkbGVXYXJlID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVOYW1lID0gKGFyZ3NbYXJncy5sZW5ndGggLSAyXSB8fCAnJyk7XG4gICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoTWlkZGxld2FyZShyb3V0ZU5hbWUsIG1pZGRsZVdhcmUpO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hIYW5kbGUob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IFtyZXFJZHgsIG91dElkeF0gPSBbMCwgMl07XG4gICAgICAgICAgICBjb25zdCByZXEgPSBhcmd1bWVudHNbcmVxSWR4XTtcbiAgICAgICAgICAgIGNvbnN0IG91dCA9IGFyZ3VtZW50c1tvdXRJZHhdO1xuICAgICAgICAgICAgY29uc3QgY29tcGxldGVTdGFjayA9ICgwLCB1dGlsc18xLmFkZE5ld1N0YWNrTGF5ZXIpKHJlcSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tvdXRJZHhdID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaE91dChvdXQsIGNvbXBsZXRlU3RhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXRjaE91dChvdXQsIGNvbXBsZXRlU3RhY2spIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHRGdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb21wbGV0ZVN0YWNrKCk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvdXQsIHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuQ29ubmVjdEluc3RydW1lbnRhdGlvbiA9IENvbm5lY3RJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbm5lY3RUeXBlcyA9IGV4cG9ydHMuQ29ubmVjdE5hbWVzID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuQU5PTllNT1VTX05BTUUgPSBleHBvcnRzLkNvbm5lY3RJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb25uZWN0SW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5Db25uZWN0SW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQU5PTllNT1VTX05BTUVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkFOT05ZTU9VU19OQU1FOyB9IH0pO1xudmFyIEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF0dHJpYnV0ZU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29ubmVjdE5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBdHRyaWJ1dGVOYW1lc18xLkNvbm5lY3ROYW1lczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbm5lY3RUeXBlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXR0cmlidXRlTmFtZXNfMS5Db25uZWN0VHlwZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB2b2lkIDA7XG52YXIgQXR0cmlidXRlTmFtZXM7XG4oZnVuY3Rpb24gKEF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJGRUFUVVJFX1RBR1NcIl0gPSBcImN1Y3VtYmVyLmZlYXR1cmUudGFnc1wiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiRkVBVFVSRV9MQU5HVUFHRVwiXSA9IFwiY3VjdW1iZXIuZmVhdHVyZS5sYW5ndWFnZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiRkVBVFVSRV9ERVNDUklQVElPTlwiXSA9IFwiY3VjdW1iZXIuZmVhdHVyZS5kZXNjcmlwdGlvblwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiU0NFTkFSSU9fVEFHU1wiXSA9IFwiY3VjdW1iZXIuc2NlbmFyaW8udGFnc1wiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiU0NFTkFSSU9fREVTQ1JJUFRJT05cIl0gPSBcImN1Y3VtYmVyLnNjZW5hcmlvLmRlc2NyaXB0aW9uXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJTVEVQX1RZUEVcIl0gPSBcImN1Y3VtYmVyLnN0ZXAudHlwZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiU1RFUF9TVEFUVVNcIl0gPSBcImN1Y3VtYmVyLnN0ZXAuc3RhdHVzXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJTVEVQX0FSR1NcIl0gPSBcImN1Y3VtYmVyLnN0ZXAuYXJnc1wiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC4yMy4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jdWN1bWJlcic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DdWN1bWJlckluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBob29rcyA9IFsnQmVmb3JlJywgJ0JlZm9yZVN0ZXAnLCAnQWZ0ZXJTdGVwJywgJ0FmdGVyJ107XG5jb25zdCBzdGVwcyA9IFsnR2l2ZW4nLCAnV2hlbicsICdUaGVuJ107XG5jb25zdCBzdXBwb3J0ZWRWZXJzaW9ucyA9IFsnPj04LjAuMCA8MTMnXTtcbmNsYXNzIEN1Y3VtYmVySW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgbW9kdWxlO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ0BjdWN1bWJlci9jdWN1bWJlcicsIHN1cHBvcnRlZFZlcnNpb25zLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlID0gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgICAgICBzdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0c1tzdGVwXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCBzdGVwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsIHN0ZXAsIHRoaXMuX2dldFN0ZXBQYXRjaChzdGVwKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaG9va3MuZm9yRWFjaChob29rID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHNbaG9va10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgaG9vayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCBob29rLCB0aGlzLl9nZXRIb29rUGF0Y2goaG9vaykpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSwgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgWy4uLmhvb2tzLCAuLi5zdGVwc10uZm9yRWFjaChtZXRob2QgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ0BjdWN1bWJlci9jdWN1bWJlci9saWIvcnVudGltZS90ZXN0X2Nhc2VfcnVubmVyLmpzJywgc3VwcG9ydGVkVmVyc2lvbnMsIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZS5ydW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZSwgJ3J1bicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuZGVmYXVsdC5wcm90b3R5cGUsICdydW5TdGVwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ3J1bkF0dGVtcHQnIGluIG1vZHVsZUV4cG9ydHMuZGVmYXVsdC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZSwgJ3J1bkF0dGVtcHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuZGVmYXVsdC5wcm90b3R5cGUsICdydW4nLCB0aGlzLl9nZXRUZXN0Q2FzZVJ1blBhdGNoKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuZGVmYXVsdC5wcm90b3R5cGUsICdydW5TdGVwJywgdGhpcy5fZ2V0VGVzdENhc2VSdW5TdGVwUGF0Y2goKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgncnVuQXR0ZW1wdCcgaW4gbW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLmRlZmF1bHQucHJvdG90eXBlLCAncnVuQXR0ZW1wdCcsIHRoaXMuX2dldFRlc3RDYXNlUnVuQXR0ZW1wdFBhdGNoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZSwgJ3J1bicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZSwgJ3J1blN0ZXAnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCdydW5BdHRlbXB0JyBpbiBtb2R1bGVFeHBvcnRzLmRlZmF1bHQucHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5kZWZhdWx0LnByb3RvdHlwZSwgJ3J1bkF0dGVtcHQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0YXRpYyBtYXBUYWdzKHRhZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRhZ3MubWFwKHRhZyA9PiB0YWcubmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBzZXRTcGFuVG9FcnJvcihzcGFuLCBlcnJvcikge1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gZXJyb3IsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRTcGFuVG9TdGVwU3RhdHVzKHNwYW4sIHN0YXR1cywgY29udGV4dCkge1xuICAgICAgICAvLyBpZiB0aGUgdGVsZW1ldHJ5IGlzIGVuYWJsZWQsIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGRlZmluZWRcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUodHlwZXNfMS5BdHRyaWJ1dGVOYW1lcy5TVEVQX1NUQVRVUywgc3RhdHVzKTtcbiAgICAgICAgaWYgKFtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlLlN0YXR1cy5VTkRFRklORUQsXG4gICAgICAgICAgICB0aGlzLm1vZHVsZS5TdGF0dXMuQU1CSUdVT1VTLFxuICAgICAgICAgICAgdGhpcy5tb2R1bGUuU3RhdHVzLkZBSUxFRCxcbiAgICAgICAgXS5pbmNsdWRlcyhzdGF0dXMpKSB7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihzdGF0dXMpO1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNvbnRleHQgfHwgc3RhdHVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldFRlc3RDYXNlUnVuUGF0Y2goKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdoZXJraW5Eb2N1bWVudCA9IHRoaXNbJ2doZXJraW5Eb2N1bWVudCddO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmVhdHVyZSB9ID0gZ2hlcmtpbkRvY3VtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tsZSA9IHRoaXNbJ3BpY2tsZSddO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjZW5hcmlvID0gZmVhdHVyZS5jaGlsZHJlbi5maW5kKG5vZGUgPT4gbm9kZT8uc2NlbmFyaW8/LmlkID09PSBwaWNrbGUuYXN0Tm9kZUlkc1swXSk/LnNjZW5hcmlvO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihgRmVhdHVyZTogJHtmZWF0dXJlLm5hbWV9LiBTY2VuYXJpbzogJHtwaWNrbGUubmFtZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9DT0RFX0ZJTEVfUEFUSF06IGdoZXJraW5Eb2N1bWVudC51cmksXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0NPREVfTElORV9OVU1CRVJdOiBzY2VuYXJpby5sb2NhdGlvbi5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9DT0RFX0ZVTkNUSU9OX05BTUVdOiBgJHtmZWF0dXJlLm5hbWV9ICR7c2NlbmFyaW8ubmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVzXzEuQXR0cmlidXRlTmFtZXMuRkVBVFVSRV9UQUdTXTogQ3VjdW1iZXJJbnN0cnVtZW50YXRpb24ubWFwVGFncyhmZWF0dXJlLnRhZ3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVzXzEuQXR0cmlidXRlTmFtZXMuRkVBVFVSRV9MQU5HVUFHRV06IGZlYXR1cmUubGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZXNfMS5BdHRyaWJ1dGVOYW1lcy5GRUFUVVJFX0RFU0NSSVBUSU9OXTogZmVhdHVyZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlc18xLkF0dHJpYnV0ZU5hbWVzLlNDRU5BUklPX1RBR1NdOiBDdWN1bWJlckluc3RydW1lbnRhdGlvbi5tYXBUYWdzKHNjZW5hcmlvLnRhZ3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVzXzEuQXR0cmlidXRlTmFtZXMuU0NFTkFSSU9fREVTQ1JJUFRJT05dOiBzY2VuYXJpby5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LCBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uc2V0U3BhblRvU3RlcFN0YXR1cyhzcGFuLCBzdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1Y3VtYmVySW5zdHJ1bWVudGF0aW9uLnNldFNwYW5Ub0Vycm9yKHNwYW4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFRlc3RDYXNlUnVuU3RlcFBhdGNoKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcGlja2xlU3RlcF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihwaWNrbGVTdGVwLnRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZXNfMS5BdHRyaWJ1dGVOYW1lcy5TVEVQX1RZUEVdOiBwaWNrbGVTdGVwLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJ1blN0ZXBSZXN1bHQgPSBhd2FpdCBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0LCBlcnJvciB9ID0gKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ3Jlc3VsdCcgaW4gcnVuU3RlcFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuU3RlcFJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBydW5TdGVwUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNldFNwYW5Ub1N0ZXBTdGF0dXMoc3BhbiwgcmVzdWx0LnN0YXR1cywgcmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VjdW1iZXJJbnN0cnVtZW50YXRpb24uc2V0U3BhblRvRXJyb3Ioc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blN0ZXBSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdWN1bWJlckluc3RydW1lbnRhdGlvbi5zZXRTcGFuVG9FcnJvcihzcGFuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRUZXN0Q2FzZVJ1bkF0dGVtcHRQYXRjaCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2F0dGVtcHRdID0gYXJncztcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydEFjdGl2ZVNwYW4oYEF0dGVtcHQgIyR7YXR0ZW1wdH1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICAgICAgICAgICAgfSwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yc3RSZXN1bHQgPSB0aGlzLmdldFdvcnN0U3RlcFJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNldFNwYW5Ub1N0ZXBTdGF0dXMoc3Bhbiwgd29yc3RSZXN1bHQuc3RhdHVzLCB3b3JzdFJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdWN1bWJlckluc3RydW1lbnRhdGlvbi5zZXRTcGFuVG9FcnJvcihzcGFuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRIb29rUGF0Y2gobmFtZSkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhZ3NPck9wdGlvbnMsIGNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZ3NPck9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9IHRhZ3NPck9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRhZ3NPck9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJhY2VhYmxlQ29kZShhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSdyZSB3cmFwcGluZyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBob29rLFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIHN0YXkgd3JhcHBlZCBpbiBjdWN1bWJlcidzIGludGVybmFsIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgd2UgZGlzYWJsZSB0aGUgaW5zdHJ1bWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmlzRW5hYmxlZCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU/LmNhbGwodGhpcywgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgfSwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvZGU/LmNhbGwodGhpcywgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoPy4oSlNPTi5zdHJpbmdpZnkoc3Bhbi5zcGFuQ29udGV4dCgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VjdW1iZXJJbnN0cnVtZW50YXRpb24uc2V0U3BhblRvRXJyb3Ioc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHRhZ3NPck9wdGlvbnMsIHRyYWNlYWJsZUNvZGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFN0ZXBQYXRjaChuYW1lKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAocGF0dGVybiwgb3B0aW9ucywgY29kZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cmFjZWFibGVDb2RlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSdyZSB3cmFwcGluZyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBob29rLFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIHN0YXkgd3JhcHBlZCBpbiBjdWN1bWJlcidzIGludGVybmFsIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgd2UgZGlzYWJsZSB0aGUgaW5zdHJ1bWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmlzRW5hYmxlZCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU/LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydEFjdGl2ZVNwYW4oYCR7bmFtZX0oJHtwYXR0ZXJuLnRvU3RyaW5nKCl9KWAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgbGFzdCBhcmd1bWVudCBiZWNhdXNlIGl0J3MgYSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYXJncy5zbGljZSgwLCAtMSkucmVkdWNlKChhdHRycywgYXJnLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYCR7dHlwZXNfMS5BdHRyaWJ1dGVOYW1lcy5TVEVQX0FSR1N9WyR7aW5kZXh9XWBdOiBhcmc/LnJhdyBpbnN0YW5jZW9mIEZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoYXJnLnJhdygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB7fSksXG4gICAgICAgICAgICAgICAgICAgIH0sIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBjb2RlPy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoPy4oSlNPTi5zdHJpbmdpZnkoc3Bhbi5zcGFuQ29udGV4dCgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VjdW1iZXJJbnN0cnVtZW50YXRpb24uc2V0U3BhblRvRXJyb3Ioc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGN1Y3VtYmVyIGFza3MgZm9yIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGNvcHkgdGhlIHZhbHVlIGZyb20gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyYWNlYWJsZUNvZGUsICdsZW5ndGgnLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2RlPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgcGF0dGVybiwgb3B0aW9ucywgdHJhY2VhYmxlQ29kZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuQ3VjdW1iZXJJbnN0cnVtZW50YXRpb24gPSBDdWN1bWJlckluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkN1Y3VtYmVySW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ3VjdW1iZXJJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkN1Y3VtYmVySW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF0dHJpYnV0ZU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18xLkF0dHJpYnV0ZU5hbWVzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjI1LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRhdGFsb2FkZXInO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGF0YWxvYWRlckluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ2RhdGFsb2FkZXInO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGV4dHJhY3RNb2R1bGVFeHBvcnRzKG1vZHVsZSkge1xuICAgIHJldHVybiBtb2R1bGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZSdcbiAgICAgICAgPyBtb2R1bGUuZGVmYXVsdCAvLyBFU01cbiAgICAgICAgOiBtb2R1bGU7IC8vIENvbW1vbkpTXG59XG5jbGFzcyBEYXRhbG9hZGVySW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihNT0RVTEVfTkFNRSwgWyc+PTIuMC4wIDwzJ10sIG1vZHVsZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YWxvYWRlciA9IGV4dHJhY3RNb2R1bGVFeHBvcnRzKG1vZHVsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGF0Y2hMb2FkKGRhdGFsb2FkZXIucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRjaExvYWRNYW55KGRhdGFsb2FkZXIucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRjaFByaW1lKGRhdGFsb2FkZXIucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRjaENsZWFyKGRhdGFsb2FkZXIucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRjaENsZWFyQWxsKGRhdGFsb2FkZXIucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UGF0Y2hlZENvbnN0cnVjdG9yKGRhdGFsb2FkZXIpO1xuICAgICAgICAgICAgfSwgbW9kdWxlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhbG9hZGVyID0gZXh0cmFjdE1vZHVsZUV4cG9ydHMobW9kdWxlKTtcbiAgICAgICAgICAgICAgICBbJ2xvYWQnLCAnbG9hZE1hbnknLCAncHJpbWUnLCAnY2xlYXInLCAnY2xlYXJBbGwnXS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShkYXRhbG9hZGVyLnByb3RvdHlwZVttZXRob2RdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGRhdGFsb2FkZXIucHJvdG90eXBlLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc2hvdWxkQ3JlYXRlU3BhbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudFNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBoYXNQYXJlbnRTcGFuIHx8ICFjb25maWcucmVxdWlyZVBhcmVudFNwYW47XG4gICAgfVxuICAgIGdldFNwYW5OYW1lKGRhdGFsb2FkZXIsIG9wZXJhdGlvbikge1xuICAgICAgICBjb25zdCBkYXRhbG9hZGVyTmFtZSA9IGRhdGFsb2FkZXIubmFtZTtcbiAgICAgICAgaWYgKGRhdGFsb2FkZXJOYW1lID09PSB1bmRlZmluZWQgfHwgZGF0YWxvYWRlck5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtNT0RVTEVfTkFNRX0uJHtvcGVyYXRpb259YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7TU9EVUxFX05BTUV9LiR7b3BlcmF0aW9ufSAke2RhdGFsb2FkZXJOYW1lfWA7XG4gICAgfVxuICAgIF93cmFwQmF0Y2hMb2FkRm4oYmF0Y2hMb2FkRm4pIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRCYXRjaExvYWRGbiguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5pc0VuYWJsZWQoKSB8fFxuICAgICAgICAgICAgICAgICFpbnN0cnVtZW50YXRpb24uc2hvdWxkQ3JlYXRlU3BhbnMoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXRjaExvYWRGbi5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihpbnN0cnVtZW50YXRpb24uZ2V0U3Bhbk5hbWUodGhpcywgJ2JhdGNoJyksIHsgbGlua3M6IHRoaXMuX2JhdGNoPy5zcGFuTGlua3MgfSwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihwYXJlbnQsIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhdGNoTG9hZEZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRQYXRjaGVkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgY29uc3QgcHJvdG90eXBlID0gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIFBhdGNoZWREYXRhbG9hZGVyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIC8vIEJhdGNoTG9hZEZuIGlzIHRoZSBmaXJzdCBjb25zdHJ1Y3RvciBhcmd1bWVudFxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZGF0YWxvYWRlci9ibG9iLzc3YzJjZDdjYTk3ZTg3OTUyNDIwMThlYmMyMTJjZTI0ODdlNzI5ZDIvc3JjL2luZGV4LmpzI0w0N1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fdW53cmFwKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcmdzWzBdID0gaW5zdHJ1bWVudGF0aW9uLl93cmFwQmF0Y2hMb2FkRm4oYXJnc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgUGF0Y2hlZERhdGFsb2FkZXIucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICAgICAgICByZXR1cm4gUGF0Y2hlZERhdGFsb2FkZXI7XG4gICAgfVxuICAgIF9wYXRjaExvYWQocHJvdG8pIHtcbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHByb3RvLmxvYWQpKSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAocHJvdG8sICdsb2FkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd3JhcChwcm90bywgJ2xvYWQnLCB0aGlzLl9nZXRQYXRjaGVkTG9hZC5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRMb2FkKG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkTG9hZCguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5zaG91bGRDcmVhdGVTcGFucygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBhcGlfMS5jb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKGluc3RydW1lbnRhdGlvbi5nZXRTcGFuTmFtZSh0aGlzLCAnbG9hZCcpLCB7IGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCB9LCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKHBhcmVudCwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbFxuICAgICAgICAgICAgICAgICAgICAuY2FsbCh0aGlzLCAuLi5hcmdzKVxuICAgICAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2FkZXIgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmIChsb2FkZXIuX2JhdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9hZGVyLl9iYXRjaC5zcGFuTGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci5fYmF0Y2guc3BhbkxpbmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9iYXRjaC5zcGFuTGlua3MucHVzaCh7IGNvbnRleHQ6IHNwYW4uc3BhbkNvbnRleHQoKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hMb2FkTWFueShwcm90bykge1xuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocHJvdG8ubG9hZE1hbnkpKSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAocHJvdG8sICdsb2FkTWFueScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dyYXAocHJvdG8sICdsb2FkTWFueScsIHRoaXMuX2dldFBhdGNoZWRMb2FkTWFueS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRMb2FkTWFueShvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZExvYWRNYW55KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLnNob3VsZENyZWF0ZVNwYW5zKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGFwaV8xLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oaW5zdHJ1bWVudGF0aW9uLmdldFNwYW5OYW1lKHRoaXMsICdsb2FkTWFueScpLCB7IGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCB9LCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKHBhcmVudCwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAubG9hZE1hbnkgbmV2ZXIgcmVqZWN0cywgYXMgZXJyb3JzIGZyb20gaW50ZXJuYWwgLmxvYWRcbiAgICAgICAgICAgICAgICAvLyBjYWxscyBhcmUgY2F1Z2h0IGJ5IGRhdGFsb2FkZXIgbGliXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncykudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hQcmltZShwcm90bykge1xuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocHJvdG8ucHJpbWUpKSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAocHJvdG8sICdwcmltZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dyYXAocHJvdG8sICdwcmltZScsIHRoaXMuX2dldFBhdGNoZWRQcmltZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRQcmltZShvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFByaW1lKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLnNob3VsZENyZWF0ZVNwYW5zKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGFwaV8xLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oaW5zdHJ1bWVudGF0aW9uLmdldFNwYW5OYW1lKHRoaXMsICdwcmltZScpLCB7IGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCB9LCBwYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4ocGFyZW50LCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhdGNoQ2xlYXIocHJvdG8pIHtcbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHByb3RvLmNsZWFyKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKHByb3RvLCAnY2xlYXInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93cmFwKHByb3RvLCAnY2xlYXInLCB0aGlzLl9nZXRQYXRjaGVkQ2xlYXIuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIF9nZXRQYXRjaGVkQ2xlYXIob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDbGVhciguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5zaG91bGRDcmVhdGVTcGFucygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBhcGlfMS5jb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKGluc3RydW1lbnRhdGlvbi5nZXRTcGFuTmFtZSh0aGlzLCAnY2xlYXInKSwgeyBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQgfSwgcGFyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKHBhcmVudCwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXRjaENsZWFyQWxsKHByb3RvKSB7XG4gICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShwcm90by5jbGVhckFsbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChwcm90bywgJ2NsZWFyQWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd3JhcChwcm90bywgJ2NsZWFyQWxsJywgdGhpcy5fZ2V0UGF0Y2hlZENsZWFyQWxsLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hlZENsZWFyQWxsKG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkQ2xlYXJBbGwoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFpbnN0cnVtZW50YXRpb24uc2hvdWxkQ3JlYXRlU3BhbnMoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihpbnN0cnVtZW50YXRpb24uZ2V0U3Bhbk5hbWUodGhpcywgJ2NsZWFyQWxsJyksIHsga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5UIH0sIHBhcmVudCk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihwYXJlbnQsIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuRGF0YWxvYWRlckluc3RydW1lbnRhdGlvbiA9IERhdGFsb2FkZXJJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRhdGFsb2FkZXJJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEYXRhbG9hZGVySW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5EYXRhbG9hZGVySW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIC8vIE5PVCBPTiBPRkZJQ0lBTCBTUEVDXG4gICAgQXR0cmlidXRlTmFtZXNbXCJETlNfRVJST1JfTkFNRVwiXSA9IFwiZG5zLmVycm9yX25hbWVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkROU19FUlJPUl9NRVNTQUdFXCJdID0gXCJkbnMuZXJyb3JfbWVzc2FnZVwiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0lnbm9yZWQgPSBleHBvcnRzLnNhdGlzZmllc1BhdHRlcm4gPSBleHBvcnRzLnNldExvb2t1cEF0dHJpYnV0ZXMgPSBleHBvcnRzLmdldE9wZXJhdGlvbk5hbWUgPSBleHBvcnRzLmdldEZhbWlseUF0dHJpYnV0ZSA9IGV4cG9ydHMuc2V0RXJyb3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vZW51bXMvQXR0cmlidXRlTmFtZXNcIik7XG4vKipcbiAqIFNldCBlcnJvciBhdHRyaWJ1dGVzIG9uIHRoZSBzcGFuIHBhc3NlZCBpbiBwYXJhbXNcbiAqIEBwYXJhbSBlcnIgdGhlIGVycm9yIHRoYXQgd2UgdXNlIGZvciBmaWxsaW5nIHRoZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gc3BhbiB0aGUgc3BhbiB0byBiZSBzZXRcbiAqIEBwYXJhbSBub2RlVmVyc2lvbiB0aGUgbm9kZSB2ZXJzaW9uXG4gKi9cbmNvbnN0IHNldEVycm9yID0gKGVyciwgc3BhbikgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgbmFtZSB9ID0gZXJyO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkROU19FUlJPUl9NRVNTQUdFXTogbWVzc2FnZSxcbiAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRE5TX0VSUk9SX05BTUVdOiBuYW1lLFxuICAgIH07XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgfSk7XG59O1xuZXhwb3J0cy5zZXRFcnJvciA9IHNldEVycm9yO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBmYW1pbHkgYXR0cmlidXRlIG5hbWUgdG8gYmUgc2V0IG9uIHRoZSBzcGFuXG4gKiBAcGFyYW0gZmFtaWx5IGA0YCAoaXB2NCkgb3IgYDZgIChpcHY2KS4gYDBgIG1lYW5zIGJ1Zy5cbiAqIEBwYXJhbSBbaW5kZXhdIGA0YCAoaXB2NCkgb3IgYDZgIChpcHY2KS4gYDBgIG1lYW5zIGJ1Zy5cbiAqL1xuY29uc3QgZ2V0RmFtaWx5QXR0cmlidXRlID0gKGZhbWlseSwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXggPyBgcGVlclske2luZGV4fV0uaXB2JHtmYW1pbHl9YCA6IGBwZWVyLmlwdiR7ZmFtaWx5fWA7XG59O1xuZXhwb3J0cy5nZXRGYW1pbHlBdHRyaWJ1dGUgPSBnZXRGYW1pbHlBdHRyaWJ1dGU7XG4vKipcbiAqIFJldHVybnMgdGhlIHNwYW4gbmFtZVxuICogQHBhcmFtIGZ1bmNOYW1lIGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB3cmFwcGVkIChlLmcgYGxvb2t1cGApXG4gKiBAcGFyYW0gW3NlcnZpY2VdIGUuZyBgaHR0cGBcbiAqL1xuY29uc3QgZ2V0T3BlcmF0aW9uTmFtZSA9IChmdW5jTmFtZSwgc2VydmljZSkgPT4ge1xuICAgIHJldHVybiBzZXJ2aWNlID8gYGRucy4ke3NlcnZpY2V9LyR7ZnVuY05hbWV9YCA6IGBkbnMuJHtmdW5jTmFtZX1gO1xufTtcbmV4cG9ydHMuZ2V0T3BlcmF0aW9uTmFtZSA9IGdldE9wZXJhdGlvbk5hbWU7XG5jb25zdCBzZXRMb29rdXBBdHRyaWJ1dGVzID0gKHNwYW4sIGFkZHJlc3MsIGZhbWlseSkgPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb25zdCBpc09iamVjdCA9IHR5cGVvZiBhZGRyZXNzID09PSAnb2JqZWN0JztcbiAgICBsZXQgYWRkcmVzc2VzID0gYWRkcmVzcztcbiAgICBpZiAoIWlzT2JqZWN0KSB7XG4gICAgICAgIGFkZHJlc3NlcyA9IFt7IGFkZHJlc3MsIGZhbWlseSB9XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIShhZGRyZXNzZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgYWRkcmVzc2VzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MuYWRkcmVzcyxcbiAgICAgICAgICAgICAgICBmYW1pbHk6IGFkZHJlc3MuZmFtaWx5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYWRkcmVzc2VzLmZvckVhY2goKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3QgcGVlckF0dHJGb3JtYXQgPSAoMCwgZXhwb3J0cy5nZXRGYW1pbHlBdHRyaWJ1dGUpKF8uZmFtaWx5LCBpKTtcbiAgICAgICAgYXR0cmlidXRlc1twZWVyQXR0ckZvcm1hdF0gPSBfLmFkZHJlc3M7XG4gICAgfSk7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpO1xufTtcbmV4cG9ydHMuc2V0TG9va3VwQXR0cmlidXRlcyA9IHNldExvb2t1cEF0dHJpYnV0ZXM7XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG9iaiBtYXRjaCBwYXR0ZXJuXG4gKiBAcGFyYW0gY29uc3RhbnQgZS5nIFVSTCBvZiByZXF1ZXN0XG4gKiBAcGFyYW0gb2JqIG9iaiB0byBpbnNwZWN0XG4gKiBAcGFyYW0gcGF0dGVybiBNYXRjaCBwYXR0ZXJuXG4gKi9cbmNvbnN0IHNhdGlzZmllc1BhdHRlcm4gPSAoY29uc3RhbnQsIHBhdHRlcm4pID0+IHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuID09PSBjb25zdGFudDtcbiAgICB9XG4gICAgZWxzZSBpZiAocGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KGNvbnN0YW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4oY29uc3RhbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGF0dGVybiBpcyBpbiB1bnN1cHBvcnRlZCBkYXRhdHlwZScpO1xuICAgIH1cbn07XG5leHBvcnRzLnNhdGlzZmllc1BhdHRlcm4gPSBzYXRpc2ZpZXNQYXR0ZXJuO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBkbnMgcmVxdWVzdCBpcyBpZ25vcmVkIGJ5IGNvbmZpZ3VyYXRpb25cbiAqIEl0IHdpbGwgbm90IHJlLXRocm93IGV4Y2VwdGlvbnMgZnJvbSBgbGlzdGAgcHJvdmlkZWQgYnkgdGhlIGNsaWVudFxuICogQHBhcmFtIGNvbnN0YW50IGUuZyBVUkwgb2YgcmVxdWVzdFxuICogQHBhcmFtIFtsaXN0XSBMaXN0IG9mIGlnbm9yZSBwYXR0ZXJuc1xuICogQHBhcmFtIFtvbkV4Y2VwdGlvbl0gY2FsbGJhY2sgZm9yIGRvaW5nIHNvbWV0aGluZyB3aGVuIGFuIGV4Y2VwdGlvbiBoYXNcbiAqICAgICBvY2N1cnJlZFxuICovXG5jb25zdCBpc0lnbm9yZWQgPSAoY29uc3RhbnQsIGxpc3QsIG9uRXhjZXB0aW9uKSA9PiB7XG4gICAgaWYgKCFsaXN0KSB7XG4gICAgICAgIC8vIE5vIGlnbm9yZWQgdXJscyAtIHRyYWNlIGV2ZXJ5dGhpbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdCA9IFtsaXN0XTtcbiAgICB9XG4gICAgLy8gVHJ5L2NhdGNoIG91dHNpZGUgdGhlIGxvb3AgZm9yIGZhaWxpbmcgZmFzdFxuICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBpZiAoKDAsIGV4cG9ydHMuc2F0aXNmaWVzUGF0dGVybikoY29uc3RhbnQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKG9uRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICBvbkV4Y2VwdGlvbihlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0cy5pc0lnbm9yZWQgPSBpc0lnbm9yZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTEuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZG5zJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRuc0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG4vKipcbiAqIERucyBpbnN0cnVtZW50YXRpb24gZm9yIE9wZW50ZWxlbWV0cnlcbiAqL1xuY2xhc3MgRG5zSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignZG5zJywgWycqJ10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMubG9va3VwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2xvb2t1cCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ2xvb2t1cCcsIHRoaXMuX2dldExvb2t1cCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvbWlzZXMsICdsb29rdXAnLCBcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHRoaXMuX2dldExvb2t1cCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2xvb2t1cCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb21pc2VzLCAnbG9va3VwJyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignZG5zL3Byb21pc2VzJywgWycqJ10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMubG9va3VwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2xvb2t1cCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ2xvb2t1cCcsIHRoaXMuX2dldExvb2t1cCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2xvb2t1cCcpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcGF0Y2hlZCBsb29rdXAgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBfZ2V0TG9va3VwKCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UGF0Y2hMb29rdXBGdW5jdGlvbihvcmlnaW5hbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgc3BhbnMgZm9yIGxvb2t1cCBvcGVyYXRpb25zLCByZXN0b3Jpbmcgc3BhbnMnIGNvbnRleHQgaWYgYXBwbGllZC5cbiAgICAgKi9cbiAgICBfZ2V0UGF0Y2hMb29rdXBGdW5jdGlvbihvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZExvb2t1cChob3N0bmFtZSwgLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSWdub3JlZChob3N0bmFtZSwgcGx1Z2luLmdldENvbmZpZygpLmlnbm9yZUhvc3RuYW1lcywgKGUpID0+IGFwaV8xLmRpYWcuZXJyb3IoJ2NhdWdodCBpZ25vcmVIb3N0bmFtZSBlcnJvcjogJywgZSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtob3N0bmFtZSwgLi4uYXJnc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXJnc0NvdW50ID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCd3cmFwIGxvb2t1cCBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc3RhcnRzIHNwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB1dGlscy5nZXRPcGVyYXRpb25OYW1lKCdsb29rdXAnKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBwbHVnaW4udHJhY2VyLnN0YXJ0U3BhbihuYW1lLCB7XG4gICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gYXJnc1thcmdzQ291bnQgLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJnc0NvdW50IC0gMV0gPSBwbHVnaW4uX3dyYXBMb29rdXBDYWxsYmFjayhvcmlnaW5hbENhbGxiYWNrLCBzcGFuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtob3N0bmFtZSwgLi4uYXJnc10pLCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlscy5zZXRFcnJvcihlcnJvciwgc3Bhbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtcbiAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICAgICAgXSksIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLnNldEVycm9yKGVycm9yLCBzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbHMuc2V0TG9va3VwQXR0cmlidXRlcyhzcGFuLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHV0aWxzLnNldEVycm9yKGUsIHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcmFwIGxvb2t1cCBjYWxsYmFjayBmdW5jdGlvblxuICAgICAqL1xuICAgIF93cmFwTG9va3VwQ2FsbGJhY2sob3JpZ2luYWwsIHNwYW4pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBwZWRMb29rdXBDYWxsYmFjayhlcnIsIGFkZHJlc3MsIGZhbWlseSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnZXhlY3V0aW5nIHdyYXBwZWQgbG9va3VwIGNhbGxiYWNrIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICBpZiAoZXJyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXRpbHMuc2V0RXJyb3IoZXJyLCBzcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWxzLnNldExvb2t1cEF0dHJpYnV0ZXMoc3BhbiwgYWRkcmVzcywgZmFtaWx5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdleGVjdXRpbmcgb3JpZ2luYWwgbG9va3VwIGNhbGxiYWNrIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkRuc0luc3RydW1lbnRhdGlvbiA9IERuc0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRG5zSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRG5zSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5EbnNJbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FeHByZXNzTGF5ZXJUeXBlID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBFeHByZXNzTGF5ZXJUeXBlO1xuKGZ1bmN0aW9uIChFeHByZXNzTGF5ZXJUeXBlKSB7XG4gICAgRXhwcmVzc0xheWVyVHlwZVtcIlJPVVRFUlwiXSA9IFwicm91dGVyXCI7XG4gICAgRXhwcmVzc0xheWVyVHlwZVtcIk1JRERMRVdBUkVcIl0gPSBcIm1pZGRsZXdhcmVcIjtcbiAgICBFeHByZXNzTGF5ZXJUeXBlW1wiUkVRVUVTVF9IQU5ETEVSXCJdID0gXCJyZXF1ZXN0X2hhbmRsZXJcIjtcbn0pKEV4cHJlc3NMYXllclR5cGUgPSBleHBvcnRzLkV4cHJlc3NMYXllclR5cGUgfHwgKGV4cG9ydHMuRXhwcmVzc0xheWVyVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHByZXNzTGF5ZXJUeXBlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBBdHRyaWJ1dGVOYW1lcztcbihmdW5jdGlvbiAoQXR0cmlidXRlTmFtZXMpIHtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkVYUFJFU1NfVFlQRVwiXSA9IFwiZXhwcmVzcy50eXBlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJFWFBSRVNTX05BTUVcIl0gPSBcImV4cHJlc3MubmFtZVwiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fTEFZRVJTX1NUT1JFX1BST1BFUlRZID0gZXhwb3J0cy5rTGF5ZXJQYXRjaGVkID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIHN5bWJvbCBpcyB1c2VkIHRvIG1hcmsgZXhwcmVzcyBsYXllciBhcyBiZWluZyBhbHJlYWR5IGluc3RydW1lbnRlZFxuICogc2luY2UgaXRzIHBvc3NpYmxlIHRvIHVzZSBhIGdpdmVuIGxheWVyIG11bHRpcGxlIHRpbWVzIChleDogbWlkZGxld2FyZXMpXG4gKi9cbmV4cG9ydHMua0xheWVyUGF0Y2hlZCA9IFN5bWJvbCgnZXhwcmVzcy1sYXllci1wYXRjaGVkJyk7XG4vKipcbiAqIFRoaXMgY29uc3QgZGVmaW5lIHdoZXJlIG9uIHRoZSBgcmVxdWVzdGAgb2JqZWN0IHRoZSBJbnN0cnVtZW50YXRpb24gd2lsbCBtb3VudCB0aGVcbiAqIGN1cnJlbnQgc3RhY2sgb2YgZXhwcmVzcyBsYXllci5cbiAqXG4gKiBJdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBleHByZXNzIGRvZXNuJ3Qgc3RvcmUgdGhlIGRpZmZlcmVudCBsYXllcnNcbiAqIChpZTogbWlkZGxld2FyZSwgcm91dGVyIGV0YykgdGhhdCBpdCBjYWxsZWQgdG8gZ2V0IHRvIHRoZSBjdXJyZW50IGxheWVyLlxuICogR2l2ZW4gdGhhdCwgdGhlIG9ubHkgd2F5IHRvIGtub3cgdGhlIHJvdXRlIG9mIGEgZ2l2ZW4gbGF5ZXIgaXMgdG9cbiAqIHN0b3JlIHRoZSBwYXRoIG9mIHdoZXJlIGVhY2ggcHJldmlvdXMgbGF5ZXIgaGFzIGJlZW4gbW91bnRlZC5cbiAqXG4gKiBleDogYm9keVBhcnNlciA+IGF1dGggbWlkZGxld2FyZSA+IC91c2VycyByb3V0ZXIgPiBnZXQgLzppZFxuICogIGluIHRoaXMgY2FzZSB0aGUgc3RhY2sgd291bGQgYmU6IFtcIi91c2Vyc1wiLCBcIi86aWRcIl1cbiAqXG4gKiBleDI6IGJvZHlQYXJzZXIgPiAvYXBpIHJvdXRlciA+IC92MSByb3V0ZXIgPiAvdXNlcnMgcm91dGVyID4gZ2V0IC86aWRcbiAqICBzdGFjazogW1wiL2FwaVwiLCBcIi92MVwiLCBcIi91c2Vyc1wiLCBcIjppZFwiXVxuICpcbiAqL1xuZXhwb3J0cy5fTEFZRVJTX1NUT1JFX1BST1BFUlRZID0gJ19fb3RfbWlkZGxld2FyZXMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEFjdHVhbE1hdGNoZWRSb3V0ZSA9IGV4cG9ydHMuZ2V0Q29uc3RydWN0ZWRSb3V0ZSA9IGV4cG9ydHMuZ2V0TGF5ZXJQYXRoID0gZXhwb3J0cy5hc0Vycm9yQW5kTWVzc2FnZSA9IGV4cG9ydHMuaXNMYXllcklnbm9yZWQgPSBleHBvcnRzLmdldExheWVyTWV0YWRhdGEgPSBleHBvcnRzLmdldFJvdXRlclBhdGggPSBleHBvcnRzLnN0b3JlTGF5ZXJQYXRoID0gdm9pZCAwO1xuY29uc3QgRXhwcmVzc0xheWVyVHlwZV8xID0gcmVxdWlyZShcIi4vZW51bXMvRXhwcmVzc0xheWVyVHlwZVwiKTtcbmNvbnN0IEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbi8qKlxuICogU3RvcmUgbGF5ZXJzIHBhdGggaW4gdGhlIHJlcXVlc3QgdG8gYmUgYWJsZSB0byBjb25zdHJ1Y3Qgcm91dGUgbGF0ZXJcbiAqIEBwYXJhbSByZXF1ZXN0IFRoZSByZXF1ZXN0IHdoZXJlXG4gKiBAcGFyYW0gW3ZhbHVlXSB0aGUgdmFsdWUgdG8gcHVzaCBpbnRvIHRoZSBhcnJheVxuICovXG5jb25zdCBzdG9yZUxheWVyUGF0aCA9IChyZXF1ZXN0LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlcXVlc3RbaW50ZXJuYWxfdHlwZXNfMS5fTEFZRVJTX1NUT1JFX1BST1BFUlRZXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1ZXN0LCBpbnRlcm5hbF90eXBlc18xLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFksIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB7IGlzTGF5ZXJQYXRoU3RvcmVkOiBmYWxzZSB9O1xuICAgIHJlcXVlc3RbaW50ZXJuYWxfdHlwZXNfMS5fTEFZRVJTX1NUT1JFX1BST1BFUlRZXS5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4geyBpc0xheWVyUGF0aFN0b3JlZDogdHJ1ZSB9O1xufTtcbmV4cG9ydHMuc3RvcmVMYXllclBhdGggPSBzdG9yZUxheWVyUGF0aDtcbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoIHRoZSByb3V0ZXIgcGF0aCBmcm9tIGxheWVyIHN0YWNrXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byByZWNvbnN0cnVjdFxuICogQHBhcmFtIGxheWVyIFRoZSBsYXllciB0byByZWNvbnN0cnVjdCBmcm9tXG4gKiBAcmV0dXJucyBUaGUgcmVjb25zdHJ1Y3RlZCBwYXRoXG4gKi9cbmNvbnN0IGdldFJvdXRlclBhdGggPSAocGF0aCwgbGF5ZXIpID0+IHtcbiAgICBjb25zdCBzdGFja0xheWVyID0gbGF5ZXIuaGFuZGxlPy5zdGFjaz8uWzBdO1xuICAgIGlmIChzdGFja0xheWVyPy5yb3V0ZT8ucGF0aCkge1xuICAgICAgICByZXR1cm4gYCR7cGF0aH0ke3N0YWNrTGF5ZXIucm91dGUucGF0aH1gO1xuICAgIH1cbiAgICBpZiAoc3RhY2tMYXllcj8uaGFuZGxlPy5zdGFjaykge1xuICAgICAgICByZXR1cm4gKDAsIGV4cG9ydHMuZ2V0Um91dGVyUGF0aCkocGF0aCwgc3RhY2tMYXllcik7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcbmV4cG9ydHMuZ2V0Um91dGVyUGF0aCA9IGdldFJvdXRlclBhdGg7XG4vKipcbiAqIFBhcnNlIGV4cHJlc3MgbGF5ZXIgY29udGV4dCB0byByZXRyaWV2ZSBhIG5hbWUgYW5kIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0gcm91dGUgVGhlIHJvdXRlIG9mIHRoZSBsYXllclxuICogQHBhcmFtIGxheWVyIEV4cHJlc3MgbGF5ZXJcbiAqIEBwYXJhbSBbbGF5ZXJQYXRoXSBpZiBwcmVzZW50LCB0aGUgcGF0aCBvbiB3aGljaCB0aGUgbGF5ZXIgaGFzIGJlZW4gbW91bnRlZFxuICovXG5jb25zdCBnZXRMYXllck1ldGFkYXRhID0gKHJvdXRlLCBsYXllciwgbGF5ZXJQYXRoKSA9PiB7XG4gICAgaWYgKGxheWVyLm5hbWUgPT09ICdyb3V0ZXInKSB7XG4gICAgICAgIGNvbnN0IG1heWJlUm91dGVyUGF0aCA9ICgwLCBleHBvcnRzLmdldFJvdXRlclBhdGgpKCcnLCBsYXllcik7XG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZFJvdXRlclBhdGggPSBtYXliZVJvdXRlclBhdGhcbiAgICAgICAgICAgID8gbWF5YmVSb3V0ZXJQYXRoXG4gICAgICAgICAgICA6IGxheWVyUGF0aCB8fCByb3V0ZSB8fCAnLyc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRVhQUkVTU19OQU1FXTogZXh0cmFjdGVkUm91dGVyUGF0aCxcbiAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5FWFBSRVNTX1RZUEVdOiBFeHByZXNzTGF5ZXJUeXBlXzEuRXhwcmVzc0xheWVyVHlwZS5ST1VURVIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogYHJvdXRlciAtICR7ZXh0cmFjdGVkUm91dGVyUGF0aH1gLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChsYXllci5uYW1lID09PSAnYm91bmQgZGlzcGF0Y2gnIHx8IGxheWVyLm5hbWUgPT09ICdoYW5kbGUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRVhQUkVTU19OQU1FXTogKHJvdXRlIHx8IGxheWVyUGF0aCkgPz8gJ3JlcXVlc3QgaGFuZGxlcicsXG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRVhQUkVTU19UWVBFXTogRXhwcmVzc0xheWVyVHlwZV8xLkV4cHJlc3NMYXllclR5cGUuUkVRVUVTVF9IQU5ETEVSLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IGByZXF1ZXN0IGhhbmRsZXIke2xheWVyLnBhdGggPyBgIC0gJHtyb3V0ZSB8fCBsYXllclBhdGh9YCA6ICcnfWAsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkVYUFJFU1NfTkFNRV06IGxheWVyLm5hbWUsXG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRVhQUkVTU19UWVBFXTogRXhwcmVzc0xheWVyVHlwZV8xLkV4cHJlc3NMYXllclR5cGUuTUlERExFV0FSRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiBgbWlkZGxld2FyZSAtICR7bGF5ZXIubmFtZX1gLFxuICAgICAgICB9O1xuICAgIH1cbn07XG5leHBvcnRzLmdldExheWVyTWV0YWRhdGEgPSBnZXRMYXllck1ldGFkYXRhO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBvYmogbWF0Y2ggcGF0dGVyblxuICogQHBhcmFtIGNvbnN0YW50IGUuZyBVUkwgb2YgcmVxdWVzdFxuICogQHBhcmFtIG9iaiBvYmogdG8gaW5zcGVjdFxuICogQHBhcmFtIHBhdHRlcm4gTWF0Y2ggcGF0dGVyblxuICovXG5jb25zdCBzYXRpc2ZpZXNQYXR0ZXJuID0gKGNvbnN0YW50LCBwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGF0dGVybiA9PT0gY29uc3RhbnQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChjb25zdGFudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuKGNvbnN0YW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhdHRlcm4gaXMgaW4gdW5zdXBwb3J0ZWQgZGF0YXR5cGUnKTtcbiAgICB9XG59O1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiByZXF1ZXN0IGlzIGlnbm9yZWQgYnkgY29uZmlndXJhdGlvblxuICogSXQgd2lsbCBub3QgcmUtdGhyb3cgZXhjZXB0aW9ucyBmcm9tIGBsaXN0YCBwcm92aWRlZCBieSB0aGUgY2xpZW50XG4gKiBAcGFyYW0gY29uc3RhbnQgZS5nIFVSTCBvZiByZXF1ZXN0XG4gKiBAcGFyYW0gW2xpc3RdIExpc3Qgb2YgaWdub3JlIHBhdHRlcm5zXG4gKiBAcGFyYW0gW29uRXhjZXB0aW9uXSBjYWxsYmFjayBmb3IgZG9pbmcgc29tZXRoaW5nIHdoZW4gYW4gZXhjZXB0aW9uIGhhc1xuICogICAgIG9jY3VycmVkXG4gKi9cbmNvbnN0IGlzTGF5ZXJJZ25vcmVkID0gKG5hbWUsIHR5cGUsIGNvbmZpZykgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZz8uaWdub3JlTGF5ZXJzVHlwZSkgJiZcbiAgICAgICAgY29uZmlnPy5pZ25vcmVMYXllcnNUeXBlPy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnPy5pZ25vcmVMYXllcnMpID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBjb25maWcuaWdub3JlTGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoc2F0aXNmaWVzUGF0dGVybihuYW1lLCBwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGNhdGNoIGJsb2NrKi9cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydHMuaXNMYXllcklnbm9yZWQgPSBpc0xheWVySWdub3JlZDtcbi8qKlxuICogQ29udmVydHMgYSB1c2VyLXByb3ZpZGVkIGVycm9yIHZhbHVlIGludG8gYW4gZXJyb3IgYW5kIGVycm9yIG1lc3NhZ2UgcGFpclxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFVzZXItcHJvdmlkZWQgZXJyb3IgdmFsdWVcbiAqIEByZXR1cm5zIEJvdGggYW4gRXJyb3Igb3Igc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBhbmQgYW4gZXJyb3IgbWVzc2FnZVxuICovXG5jb25zdCBhc0Vycm9yQW5kTWVzc2FnZSA9IChlcnJvcikgPT4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgID8gW2Vycm9yLCBlcnJvci5tZXNzYWdlXVxuICAgIDogW1N0cmluZyhlcnJvciksIFN0cmluZyhlcnJvcildO1xuZXhwb3J0cy5hc0Vycm9yQW5kTWVzc2FnZSA9IGFzRXJyb3JBbmRNZXNzYWdlO1xuLyoqXG4gKiBFeHRyYWN0cyB0aGUgbGF5ZXIgcGF0aCBmcm9tIHRoZSByb3V0ZSBhcmd1bWVudHNcbiAqXG4gKiBAcGFyYW0gYXJncyAtIEFyZ3VtZW50cyBvZiB0aGUgcm91dGVcbiAqIEByZXR1cm5zIFRoZSBsYXllciBwYXRoXG4gKi9cbmNvbnN0IGdldExheWVyUGF0aCA9IChhcmdzKSA9PiB7XG4gICAgY29uc3QgZmlyc3RBcmcgPSBhcmdzWzBdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpcnN0QXJnKSkge1xuICAgICAgICByZXR1cm4gZmlyc3RBcmcubWFwKGFyZyA9PiBleHRyYWN0TGF5ZXJQYXRoU2VnbWVudChhcmcpIHx8ICcnKS5qb2luKCcsJyk7XG4gICAgfVxuICAgIHJldHVybiBleHRyYWN0TGF5ZXJQYXRoU2VnbWVudChmaXJzdEFyZyk7XG59O1xuZXhwb3J0cy5nZXRMYXllclBhdGggPSBnZXRMYXllclBhdGg7XG5jb25zdCBleHRyYWN0TGF5ZXJQYXRoU2VnbWVudCA9IChhcmcpID0+IHtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybjtcbn07XG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3RlZFJvdXRlKHJlcSkge1xuICAgIGNvbnN0IGxheWVyc1N0b3JlID0gQXJyYXkuaXNBcnJheShyZXFbaW50ZXJuYWxfdHlwZXNfMS5fTEFZRVJTX1NUT1JFX1BST1BFUlRZXSlcbiAgICAgICAgPyByZXFbaW50ZXJuYWxfdHlwZXNfMS5fTEFZRVJTX1NUT1JFX1BST1BFUlRZXVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IG1lYW5pbmdmdWxQYXRocyA9IGxheWVyc1N0b3JlLmZpbHRlcihwYXRoID0+IHBhdGggIT09ICcvJyAmJiBwYXRoICE9PSAnLyonKTtcbiAgICBpZiAobWVhbmluZ2Z1bFBhdGhzLmxlbmd0aCA9PT0gMSAmJiBtZWFuaW5nZnVsUGF0aHNbMF0gPT09ICcqJykge1xuICAgICAgICByZXR1cm4gJyonO1xuICAgIH1cbiAgICAvLyBKb2luIHBhcnRzIGFuZCByZW1vdmUgZHVwbGljYXRlIHNsYXNoZXNcbiAgICByZXR1cm4gbWVhbmluZ2Z1bFBhdGhzLmpvaW4oJycpLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKTtcbn1cbmV4cG9ydHMuZ2V0Q29uc3RydWN0ZWRSb3V0ZSA9IGdldENvbnN0cnVjdGVkUm91dGU7XG4vKipcbiAqIEV4dHJhY3RzIHRoZSBhY3R1YWwgbWF0Y2hlZCByb3V0ZSBmcm9tIEV4cHJlc3MgcmVxdWVzdCBmb3IgT3BlblRlbGVtZXRyeSBpbnN0cnVtZW50YXRpb24uXG4gKiBSZXR1cm5zIHRoZSByb3V0ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHRoZSBodHRwLnJvdXRlIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0gcmVxIC0gVGhlIEV4cHJlc3MgcmVxdWVzdCBvYmplY3Qgd2l0aCBsYXllcnMgc3RvcmVcbiAqIEBwYXJhbSBsYXllcnNTdG9yZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG5hbWUgd2hlcmUgbGF5ZXIgcGF0aHMgYXJlIHN0b3JlZFxuICogQHJldHVybnMgVGhlIG1hdGNoZWQgcm91dGUgc3RyaW5nIG9yIHVuZGVmaW5lZCBpZiBubyB2YWxpZCByb3V0ZSBpcyBmb3VuZFxuICovXG5mdW5jdGlvbiBnZXRBY3R1YWxNYXRjaGVkUm91dGUocmVxKSB7XG4gICAgY29uc3QgbGF5ZXJzU3RvcmUgPSBBcnJheS5pc0FycmF5KHJlcVtpbnRlcm5hbF90eXBlc18xLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFldKVxuICAgICAgICA/IHJlcVtpbnRlcm5hbF90eXBlc18xLl9MQVlFUlNfU1RPUkVfUFJPUEVSVFldXG4gICAgICAgIDogW107XG4gICAgLy8gSWYgbm8gbGF5ZXJzIGFyZSBzdG9yZWQsIG5vIHJvdXRlIGNhbiBiZSBkZXRlcm1pbmVkXG4gICAgaWYgKGxheWVyc1N0b3JlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgcm9vdCBwYXRoIGNhc2UgLSBpZiBhbGwgcGF0aHMgYXJlIHJvb3QsIG9ubHkgcmV0dXJuIHJvb3QgaWYgb3JpZ2luYWxVcmwgaXMgYWxzbyByb290XG4gICAgLy8gVGhlIGxheWVyIHN0b3JlIGFsc28gaW5jbHVkZXMgcm9vdCBwYXRocyBpbiBjYXNlIGEgbm9uLWV4aXN0aW5nIHVybCB3YXMgcmVxdWVzdGVkXG4gICAgaWYgKGxheWVyc1N0b3JlLmV2ZXJ5KHBhdGggPT4gcGF0aCA9PT0gJy8nKSkge1xuICAgICAgICByZXR1cm4gcmVxLm9yaWdpbmFsVXJsID09PSAnLycgPyAnLycgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNvbnN0cnVjdGVkUm91dGUgPSBnZXRDb25zdHJ1Y3RlZFJvdXRlKHJlcSk7XG4gICAgaWYgKGNvbnN0cnVjdGVkUm91dGUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gY29uc3RydWN0ZWRSb3V0ZTtcbiAgICB9XG4gICAgLy8gRm9yIFJlZ0V4cCByb3V0ZXMgb3Igcm91dGUgYXJyYXlzLCByZXR1cm4gdGhlIGNvbnN0cnVjdGVkIHJvdXRlXG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSByb3V0ZSBpcyBkZWZpbmVkIHVzaW5nIFJlZ0V4cCBvciBhbiBhcnJheVxuICAgIGlmIChjb25zdHJ1Y3RlZFJvdXRlLmluY2x1ZGVzKCcvJykgJiZcbiAgICAgICAgKGNvbnN0cnVjdGVkUm91dGUuaW5jbHVkZXMoJywnKSB8fFxuICAgICAgICAgICAgY29uc3RydWN0ZWRSb3V0ZS5pbmNsdWRlcygnXFxcXCcpIHx8XG4gICAgICAgICAgICBjb25zdHJ1Y3RlZFJvdXRlLmluY2x1ZGVzKCcqJykgfHxcbiAgICAgICAgICAgIGNvbnN0cnVjdGVkUm91dGUuaW5jbHVkZXMoJ1snKSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdGVkUm91dGU7XG4gICAgfVxuICAgIC8vIEVuc3VyZSByb3V0ZSBzdGFydHMgd2l0aCAnLycgaWYgaXQgZG9lc24ndCBhbHJlYWR5XG4gICAgY29uc3Qgbm9ybWFsaXplZFJvdXRlID0gY29uc3RydWN0ZWRSb3V0ZS5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgPyBjb25zdHJ1Y3RlZFJvdXRlXG4gICAgICAgIDogYC8ke2NvbnN0cnVjdGVkUm91dGV9YDtcbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoaXMgYXBwZWFycyB0byBiZSBhIG1hdGNoZWQgcm91dGVcbiAgICAvLyBBIHJvdXRlIGlzIGNvbnNpZGVyZWQgbWF0Y2hlZCBpZjpcbiAgICAvLyAxLiBXZSBoYXZlIGEgY29uc3RydWN0ZWQgcm91dGVcbiAgICAvLyAyLiBUaGUgb3JpZ2luYWwgVVJMIG1hdGNoZXMgb3Igc3RhcnRzIHdpdGggb3VyIHJvdXRlIHBhdHRlcm5cbiAgICBjb25zdCBpc1ZhbGlkUm91dGUgPSBub3JtYWxpemVkUm91dGUubGVuZ3RoID4gMCAmJlxuICAgICAgICAocmVxLm9yaWdpbmFsVXJsID09PSBub3JtYWxpemVkUm91dGUgfHxcbiAgICAgICAgICAgIHJlcS5vcmlnaW5hbFVybC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRSb3V0ZSkgfHxcbiAgICAgICAgICAgIGlzUm91dGVQYXR0ZXJuKG5vcm1hbGl6ZWRSb3V0ZSkpO1xuICAgIHJldHVybiBpc1ZhbGlkUm91dGUgPyBub3JtYWxpemVkUm91dGUgOiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldEFjdHVhbE1hdGNoZWRSb3V0ZSA9IGdldEFjdHVhbE1hdGNoZWRSb3V0ZTtcbi8qKlxuICogQ2hlY2tzIGlmIGEgcm91dGUgY29udGFpbnMgcGFyYW1ldGVyIHBhdHRlcm5zIChlLmcuLCA6aWQsIDp1c2VySWQpXG4gKiB3aGljaCBhcmUgdmFsaWQgZXZlbiBpZiB0aGV5IGRvbid0IGV4YWN0bHkgbWF0Y2ggdGhlIG9yaWdpbmFsIFVSTFxuICovXG5mdW5jdGlvbiBpc1JvdXRlUGF0dGVybihyb3V0ZSkge1xuICAgIHJldHVybiByb3V0ZS5pbmNsdWRlcygnOicpIHx8IHJvdXRlLmluY2x1ZGVzKCcqJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTYuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZXhwcmVzcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FeHByZXNzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBFeHByZXNzTGF5ZXJUeXBlXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9FeHByZXNzTGF5ZXJUeXBlXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbi8qKiBFeHByZXNzIGluc3RydW1lbnRhdGlvbiBmb3IgT3BlblRlbGVtZXRyeSAqL1xuY2xhc3MgRXhwcmVzc0luc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2V4cHJlc3MnLCBbJz49NC4wLjAgPDYnXSwgbW9kdWxlRXhwb3J0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeHByZXNzV2l0aFJvdXRlclByb3RvdHlwZSA9IHR5cGVvZiBtb2R1bGVFeHBvcnRzPy5Sb3V0ZXI/LnByb3RvdHlwZT8ucm91dGUgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGVyUHJvdG8gPSBpc0V4cHJlc3NXaXRoUm91dGVyUHJvdG90eXBlXG4gICAgICAgICAgICAgICAgICAgID8gbW9kdWxlRXhwb3J0cy5Sb3V0ZXIucHJvdG90eXBlIC8vIEV4cHJlc3MgdjVcbiAgICAgICAgICAgICAgICAgICAgOiBtb2R1bGVFeHBvcnRzLlJvdXRlcjsgLy8gRXhwcmVzcyB2NFxuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGV4cHJlc3MuUm91dGVyLnJvdXRlXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHJvdXRlclByb3RvLnJvdXRlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAocm91dGVyUHJvdG8sICdyb3V0ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKHJvdXRlclByb3RvLCAncm91dGUnLCB0aGlzLl9nZXRSb3V0ZVBhdGNoKCkpO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGV4cHJlc3MuUm91dGVyLnVzZVxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShyb3V0ZXJQcm90by51c2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChyb3V0ZXJQcm90bywgJ3VzZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAocm91dGVyUHJvdG8sICd1c2UnLCB0aGlzLl9nZXRSb3V0ZXJVc2VQYXRjaCgpKTtcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBleHByZXNzLkFwcGxpY2F0aW9uLnVzZVxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmFwcGxpY2F0aW9uLnVzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuYXBwbGljYXRpb24sICd1c2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLmFwcGxpY2F0aW9uLCAndXNlJywgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRBcHBVc2VQYXRjaChpc0V4cHJlc3NXaXRoUm91dGVyUHJvdG90eXBlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeHByZXNzV2l0aFJvdXRlclByb3RvdHlwZSA9IHR5cGVvZiBtb2R1bGVFeHBvcnRzPy5Sb3V0ZXI/LnByb3RvdHlwZT8ucm91dGUgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGVyUHJvdG8gPSBpc0V4cHJlc3NXaXRoUm91dGVyUHJvdG90eXBlXG4gICAgICAgICAgICAgICAgICAgID8gbW9kdWxlRXhwb3J0cy5Sb3V0ZXIucHJvdG90eXBlXG4gICAgICAgICAgICAgICAgICAgIDogbW9kdWxlRXhwb3J0cy5Sb3V0ZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKHJvdXRlclByb3RvLCAncm91dGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAocm91dGVyUHJvdG8sICd1c2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5hcHBsaWNhdGlvbiwgJ3VzZScpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcGF0Y2ggZm9yIFJvdXRlci5yb3V0ZSBmdW5jdGlvblxuICAgICAqL1xuICAgIF9nZXRSb3V0ZVBhdGNoKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm91dGVfdHJhY2UoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9hcHBseVBhdGNoKGxheWVyLCAoMCwgdXRpbHNfMS5nZXRMYXllclBhdGgpKGFyZ3MpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBhdGNoIGZvciBSb3V0ZXIudXNlIGZ1bmN0aW9uXG4gICAgICovXG4gICAgX2dldFJvdXRlclVzZVBhdGNoKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdXNlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3V0ZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fYXBwbHlQYXRjaChsYXllciwgKDAsIHV0aWxzXzEuZ2V0TGF5ZXJQYXRoKShhcmdzKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwYXRjaCBmb3IgQXBwbGljYXRpb24udXNlIGZ1bmN0aW9uXG4gICAgICovXG4gICAgX2dldEFwcFVzZVBhdGNoKGlzRXhwcmVzc1dpdGhSb3V0ZXJQcm90b3R5cGUpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVzZSguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYWNjZXNzIGFwcC5yb3V0ZXIgaW4gZXhwcmVzcyA0Lnggd2UgdHJpZ2dlciBhbiBhc3NlcnRpb24gZXJyb3IuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBleGlzdGVkIGluIHYzLCB3YXMgcmVtb3ZlZCBpbiB2NCBhbmQgdGhlbiByZS1hZGRlZCBpbiB2NS5cbiAgICAgICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBpc0V4cHJlc3NXaXRoUm91dGVyUHJvdG90eXBlXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5yb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9yb3V0ZXI7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAocm91dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gcm91dGVyLnN0YWNrW3JvdXRlci5zdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9hcHBseVBhdGNoKGxheWVyLCAoMCwgdXRpbHNfMS5nZXRMYXllclBhdGgpKGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIFBhdGNoIGVhY2ggZXhwcmVzcyBsYXllciB0byBjcmVhdGUgc3BhbiBhbmQgcHJvcGFnYXRlIGNvbnRleHQgKi9cbiAgICBfYXBwbHlQYXRjaChsYXllciwgbGF5ZXJQYXRoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIC8vIGF2b2lkIHBhdGNoaW5nIG11bHRpcGxlIHRpbWVzIHRoZSBzYW1lIGxheWVyXG4gICAgICAgIGlmIChsYXllcltpbnRlcm5hbF90eXBlc18xLmtMYXllclBhdGNoZWRdID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsYXllcltpbnRlcm5hbF90eXBlc18xLmtMYXllclBhdGNoZWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fd3JhcChsYXllciwgJ2hhbmRsZScsIG9yaWdpbmFsID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE86IGluc3RydW1lbnQgZXJyb3IgaGFuZGxlcnNcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbC5sZW5ndGggPT09IDQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZCA9IGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNMYXllclBhdGhTdG9yZWQgfSA9ICgwLCB1dGlsc18xLnN0b3JlTGF5ZXJQYXRoKShyZXEsIGxheWVyUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uc3RydWN0ZWRSb3V0ZSA9ICgwLCB1dGlsc18xLmdldENvbnN0cnVjdGVkUm91dGUpKHJlcSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsTWF0Y2hlZFJvdXRlID0gKDAsIHV0aWxzXzEuZ2V0QWN0dWFsTWF0Y2hlZFJvdXRlKShyZXEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV06IGFjdHVhbE1hdGNoZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gKDAsIHV0aWxzXzEuZ2V0TGF5ZXJNZXRhZGF0YSkoY29uc3RydWN0ZWRSb3V0ZSwgbGF5ZXIsIGxheWVyUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG1ldGFkYXRhLmF0dHJpYnV0ZXNbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5FWFBSRVNTX1RZUEVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJwY01ldGFkYXRhID0gKDAsIGNvcmVfMS5nZXRSUENNZXRhZGF0YSkoYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJwY01ldGFkYXRhPy50eXBlID09PSBjb3JlXzEuUlBDVHlwZS5IVFRQKSB7XG4gICAgICAgICAgICAgICAgICAgIHJwY01ldGFkYXRhLnJvdXRlID0gYWN0dWFsTWF0Y2hlZFJvdXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgYWdhaW5zdCB0aGUgY29uZmlnIGlmIHRoZSBsYXllciBzaG91bGQgYmUgaWdub3JlZFxuICAgICAgICAgICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc0xheWVySWdub3JlZCkobWV0YWRhdGEubmFtZSwgdHlwZSwgaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRXhwcmVzc0xheWVyVHlwZV8xLkV4cHJlc3NMYXllclR5cGUuTUlERExFV0FSRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxW2ludGVybmFsX3R5cGVzXzEuX0xBWUVSU19TVE9SRV9QUk9QRVJUWV0ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5OYW1lID0gaW5zdHJ1bWVudGF0aW9uLl9nZXRTcGFuTmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHJlcSxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJUeXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICByb3V0ZTogY29uc3RydWN0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICB9LCBtZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBtZXRhZGF0YS5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudENvbnRleHQgPSBhcGlfMS50cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVxdWVzdEhvb2sgfSA9IGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEhvb2spIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHJlcXVlc3RIb29rKHNwYW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHJlcSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyVHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiBjb25zdHJ1Y3RlZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICB9KSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ2V4cHJlc3MgaW5zdHJ1bWVudGF0aW9uOiByZXF1ZXN0IGhvb2sgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3Bhbkhhc0VuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRml4IHJvdXRlciBzcGFucyAoZ2V0Um91dGVyUGF0aCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5KSB0b1xuICAgICAgICAgICAgICAgIC8vIGhhdmUgdXNlZnVsIG5hbWVzIGJlZm9yZSByZW1vdmluZyB0aGlzIGJyYW5jaFxuICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YS5hdHRyaWJ1dGVzW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRVhQUkVTU19UWVBFXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgRXhwcmVzc0xheWVyVHlwZV8xLkV4cHJlc3NMYXllclR5cGUuUk9VVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5IYXNFbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0ID0gcGFyZW50Q29udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbGlzdGVuZXIgZm9yIHJlc3BvbnNlLm9uKCdmaW5pc2gnKVxuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVzcG9uc2VGaW5pc2ggPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGFuSGFzRW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuSGFzRW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gdmVyaWZ5IHdlIGhhdmUgYSBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tJZHggPSBhcmdzLmZpbmRJbmRleChhcmcgPT4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2NhbGxiYWNrSWR4XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4cHJlc3MgY29uc2lkZXJzIGFueXRoaW5nIGJ1dCBhbiBlbXB0eSB2YWx1ZSwgXCJyb3V0ZVwiIG9yIFwicm91dGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhc3NlZCB0byBpdHMgY2FsbGJhY2sgdG8gYmUgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlRXJyb3IgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Vycm9yID0gIVt1bmRlZmluZWQsIG51bGwsICdyb3V0ZScsICdyb3V0ZXInXS5pbmNsdWRlcyhtYXliZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Bhbkhhc0VuZGVkICYmIGlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbZXJyb3IsIG1lc3NhZ2VdID0gKDAsIHV0aWxzXzEuYXNFcnJvckFuZE1lc3NhZ2UpKG1heWJlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5IYXNFbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSGFzRW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5yZXM/LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvblJlc3BvbnNlRmluaXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVxLnJvdXRlICYmIGlzRXJyb3IpICYmIGlzTGF5ZXJQYXRoU3RvcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxW2ludGVybmFsX3R5cGVzXzEuX0xBWUVSU19TVE9SRV9QUk9QRVJUWV0ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbY2FsbGJhY2tJZHhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQuYmluZChwYXJlbnRDb250ZXh0LCBjYWxsYmFjaykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQuYmluZChjdXJyZW50Q29udGV4dCwgb3JpZ2luYWwpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChhbnlFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZXJyb3IsIG1lc3NhZ2VdID0gKDAsIHV0aWxzXzEuYXNFcnJvckFuZE1lc3NhZ2UpKGFueUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBhbnlFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBdCB0aGlzIHBvaW50IGlmIHRoZSBjYWxsYmFjayB3YXNuJ3QgY2FsbGVkLCB0aGF0IG1lYW5zIGVpdGhlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICogbGF5ZXIgaXMgYXN5bmNocm9ub3VzIChzbyBpdCB3aWxsIGNhbGwgdGhlIGNhbGxiYWNrIGxhdGVyIG9uKSBvciB0aGF0XG4gICAgICAgICAgICAgICAgICAgICAqIHRoZSBsYXllciBkaXJlY3RseSBlbmRzIHRoZSBodHRwIHJlc3BvbnNlLCBzbyB3ZSdsbCBob29rIGludG8gdGhlIFwiZmluaXNoXCJcbiAgICAgICAgICAgICAgICAgICAgICogZXZlbnQgdG8gaGFuZGxlIHRoZSBsYXRlciBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGFuSGFzRW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5vbmNlKCdmaW5pc2gnLCBvblJlc3BvbnNlRmluaXNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBgaGFuZGxlYCBpc24ndCBqdXN0IGEgcmVndWxhciBmdW5jdGlvbiBpbiBzb21lIGNhc2VzLiBJdCBhbHNvIGNvbnRhaW5zXG4gICAgICAgICAgICAvLyBzb21lIHByb3BlcnRpZXMgaG9sZGluZyBtZXRhZGF0YSBhbmQgc3RhdGUgc28gd2UgbmVlZCB0byBwcm94eSB0aGVtXG4gICAgICAgICAgICAvLyB0aHJvdWdoIHRocm91Z2ggcGF0Y2hlZCBmdW5jdGlvblxuICAgICAgICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy1jb250cmliL2lzc3Vlcy8xOTUwXG4gICAgICAgICAgICAvLyBBbHNvIHNvbWUgYXBwcy9saWJzIGRvIHRoZWlyIG93biBwYXRjaGluZyBiZWZvcmUgT1RFTCBhbmQgaGF2ZSB0aGVzZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAvLyBpbiB0aGUgcHJvcHRvdHlwZS4gU28gd2UgdXNlIGEgYGZvci4uLmluYCBsb29wIHRvIGdldCBvd24gcHJvcGVydGllcyBhbmQgYWxzb1xuICAgICAgICAgICAgLy8gYW55IGVudW1lcmFibGUgcHJvcCBpbiB0aGUgcHJvdG90eXBlIGNoYWluXG4gICAgICAgICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzLWNvbnRyaWIvaXNzdWVzLzIyNzFcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdGNoZWQsIGtleSwge1xuICAgICAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGF0Y2hlZDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9nZXRTcGFuTmFtZShpbmZvLCBkZWZhdWx0TmFtZSkge1xuICAgICAgICBjb25zdCB7IHNwYW5OYW1lSG9vayB9ID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgaWYgKCEoc3Bhbk5hbWVIb29rIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBzcGFuTmFtZUhvb2soaW5mbywgZGVmYXVsdE5hbWUpID8/IGRlZmF1bHROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ2V4cHJlc3MgaW5zdHJ1bWVudGF0aW9uOiBlcnJvciBjYWxsaW5nIHNwYW4gbmFtZSByZXdyaXRlIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHROYW1lO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5FeHByZXNzSW5zdHJ1bWVudGF0aW9uID0gRXhwcmVzc0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkV4cHJlc3NMYXllclR5cGUgPSBleHBvcnRzLkV4cHJlc3NJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHByZXNzSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5FeHByZXNzSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xudmFyIEV4cHJlc3NMYXllclR5cGVfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0V4cHJlc3NMYXllclR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHByZXNzTGF5ZXJUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBFeHByZXNzTGF5ZXJUeXBlXzEuRXhwcmVzc0xheWVyVHlwZTsgfSB9KTtcbnZhciBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vZW51bXMvQXR0cmlidXRlTmFtZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBdHRyaWJ1dGVOYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lczsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ob29rc05hbWVzVG9XcmFwID0gZXhwb3J0cy5zcGFuUmVxdWVzdFN5bWJvbCA9IHZvaWQgMDtcbmV4cG9ydHMuc3BhblJlcXVlc3RTeW1ib2wgPSBTeW1ib2woJ29wZW50ZWxlbWV0cnkuaW5zdHJ1bWVudGF0aW9uLmZhc3RpZnkucmVxdWVzdF9hY3RpdmVfc3BhbicpO1xuLy8gVGhlIGluc3RydW1lbnRhdGlvbiBjcmVhdGVzIGEgc3BhbiBmb3IgaW52b2NhdGlvbnMgb2YgbGlmZWN5Y2xlIGhvb2sgaGFuZGxlcnNcbi8vIHRoYXQgdGFrZSBgKHJlcXVlc3QsIHJlcGx5LCAuLi5bLCBkb25lXSlgIGFyZ3VtZW50cy4gQ3VycmVudGx5IHRoaXMgaXMgYWxsXG4vLyBsaWZlY3ljbGUgaG9va3MgZXhjZXB0IGBvblJlcXVlc3RBYm9ydGAuXG4vLyBodHRwczovL2Zhc3RpZnkuZGV2L2RvY3MvbGF0ZXN0L1JlZmVyZW5jZS9Ib29rc1xuZXhwb3J0cy5ob29rc05hbWVzVG9XcmFwID0gbmV3IFNldChbXG4gICAgJ29uVGltZW91dCcsXG4gICAgJ29uUmVxdWVzdCcsXG4gICAgJ3ByZVBhcnNpbmcnLFxuICAgICdwcmVWYWxpZGF0aW9uJyxcbiAgICAncHJlU2VyaWFsaXphdGlvbicsXG4gICAgJ3ByZUhhbmRsZXInLFxuICAgICdvblNlbmQnLFxuICAgICdvblJlc3BvbnNlJyxcbiAgICAnb25FcnJvcicsXG5dKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmFzdGlmeU5hbWVzID0gZXhwb3J0cy5GYXN0aWZ5VHlwZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiRkFTVElGWV9OQU1FXCJdID0gXCJmYXN0aWZ5Lm5hbWVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkZBU1RJRllfVFlQRVwiXSA9IFwiZmFzdGlmeS50eXBlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJIT09LX05BTUVcIl0gPSBcImhvb2submFtZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiUExVR0lOX05BTUVcIl0gPSBcInBsdWdpbi5uYW1lXCI7XG59KShBdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgfHwgKGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB7fSkpO1xudmFyIEZhc3RpZnlUeXBlcztcbihmdW5jdGlvbiAoRmFzdGlmeVR5cGVzKSB7XG4gICAgRmFzdGlmeVR5cGVzW1wiTUlERExFV0FSRVwiXSA9IFwibWlkZGxld2FyZVwiO1xuICAgIEZhc3RpZnlUeXBlc1tcIlJFUVVFU1RfSEFORExFUlwiXSA9IFwicmVxdWVzdF9oYW5kbGVyXCI7XG59KShGYXN0aWZ5VHlwZXMgPSBleHBvcnRzLkZhc3RpZnlUeXBlcyB8fCAoZXhwb3J0cy5GYXN0aWZ5VHlwZXMgPSB7fSkpO1xudmFyIEZhc3RpZnlOYW1lcztcbihmdW5jdGlvbiAoRmFzdGlmeU5hbWVzKSB7XG4gICAgRmFzdGlmeU5hbWVzW1wiTUlERExFV0FSRVwiXSA9IFwibWlkZGxld2FyZVwiO1xuICAgIEZhc3RpZnlOYW1lc1tcIlJFUVVFU1RfSEFORExFUlwiXSA9IFwicmVxdWVzdCBoYW5kbGVyXCI7XG59KShGYXN0aWZ5TmFtZXMgPSBleHBvcnRzLkZhc3RpZnlOYW1lcyB8fCAoZXhwb3J0cy5GYXN0aWZ5TmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXR0cmlidXRlTmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGVNYXliZVByb21pc2UgPSBleHBvcnRzLmVuZFNwYW4gPSBleHBvcnRzLnN0YXJ0U3BhbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuLyoqXG4gKiBTdGFydHMgU3BhblxuICogQHBhcmFtIHJlcGx5IC0gcmVwbHkgZnVuY3Rpb25cbiAqIEBwYXJhbSB0cmFjZXIgLSB0cmFjZXJcbiAqIEBwYXJhbSBzcGFuTmFtZSAtIHNwYW4gbmFtZVxuICogQHBhcmFtIHNwYW5BdHRyaWJ1dGVzIC0gc3BhbiBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U3BhbihyZXBseSwgdHJhY2VyLCBzcGFuTmFtZSwgc3BhbkF0dHJpYnV0ZXMgPSB7fSkge1xuICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKHNwYW5OYW1lLCB7IGF0dHJpYnV0ZXM6IHNwYW5BdHRyaWJ1dGVzIH0pO1xuICAgIGNvbnN0IHNwYW5zID0gcmVwbHlbY29uc3RhbnRzXzEuc3BhblJlcXVlc3RTeW1ib2xdIHx8IFtdO1xuICAgIHNwYW5zLnB1c2goc3Bhbik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcGx5LCBjb25zdGFudHNfMS5zcGFuUmVxdWVzdFN5bWJvbCwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogc3BhbnMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHNwYW47XG59XG5leHBvcnRzLnN0YXJ0U3BhbiA9IHN0YXJ0U3Bhbjtcbi8qKlxuICogRW5kcyBzcGFuXG4gKiBAcGFyYW0gcmVwbHkgLSByZXBseSBmdW5jdGlvblxuICogQHBhcmFtIGVyciAtIGVycm9yXG4gKi9cbmZ1bmN0aW9uIGVuZFNwYW4ocmVwbHksIGVycikge1xuICAgIGNvbnN0IHNwYW5zID0gcmVwbHlbY29uc3RhbnRzXzEuc3BhblJlcXVlc3RTeW1ib2xdIHx8IFtdO1xuICAgIC8vIHRoZXJlIGlzIG5vIGFjdGl2ZSBzcGFuLCBvciBpdCBoYXMgYWxyZWFkeSBlbmRlZFxuICAgIGlmICghc3BhbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3BhbnMuZm9yRWFjaChzcGFuID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfSk7XG4gICAgZGVsZXRlIHJlcGx5W2NvbnN0YW50c18xLnNwYW5SZXF1ZXN0U3ltYm9sXTtcbn1cbmV4cG9ydHMuZW5kU3BhbiA9IGVuZFNwYW47XG5mdW5jdGlvbiBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlTWF5YmVQcm9taXNlKGV4ZWN1dGUsIG9uRmluaXNoLCBwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgIGxldCBlcnJvcjtcbiAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGV4ZWN1dGUoKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQudGhlbihyZXMgPT4gb25GaW5pc2godW5kZWZpbmVkLCByZXMpLCBlcnIgPT4gb25GaW5pc2goZXJyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyb3IgPSBlO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgb25GaW5pc2goZXJyb3IsIHJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgIXByZXZlbnRUaHJvd2luZ0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlTWF5YmVQcm9taXNlID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZU1heWJlUHJvbWlzZTtcbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWwpIHtcbiAgICByZXR1cm4gKCh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB2YWwgJiZcbiAgICAgICAgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsLCAndGhlbicpPy52YWx1ZSA9PT1cbiAgICAgICAgICAgICdmdW5jdGlvbicpIHx8XG4gICAgICAgIGZhbHNlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41Mi4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZhc3RpZnlJbnN0cnVtZW50YXRpb24gPSBleHBvcnRzLkFOT05ZTU9VU19OQU1FID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vZW51bXMvQXR0cmlidXRlTmFtZXNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5leHBvcnRzLkFOT05ZTU9VU19OQU1FID0gJ2Fub255bW91cyc7XG4vKipcbiAqIEZhc3RpZnkgaW5zdHJ1bWVudGF0aW9uIGZvciBPcGVuVGVsZW1ldHJ5XG4gKiBAZGVwcmVjYXRlZCBUaGlzIGluc3RydW1lbnRhdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBvZmZpY2lhbCBpbnN0cnVtZW50YXRpb24gcGFja2FnZSBgQGZhc3RpZnkvb3RlbGAsXG4gKiAgICAgICAgICAgICB3aGljaCBpcyBtYWludGFpbmVkIGJ5IHRoZSBmYXN0aWZ5IGF1dGhvcnMuXG4gKi9cbmNsYXNzIEZhc3RpZnlJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdmYXN0aWZ5JywgWyc+PTMuMC4wIDw2J10sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXRjaENvbnN0cnVjdG9yKG1vZHVsZUV4cG9ydHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIF9ob29rT25SZXF1ZXN0KCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gb25SZXF1ZXN0KHJlcXVlc3QsIHJlcGx5LCBkb25lKSB7XG4gICAgICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3dyYXAocmVwbHksICdzZW5kJywgaW5zdHJ1bWVudGF0aW9uLl9wYXRjaFNlbmQoKSk7XG4gICAgICAgICAgICBjb25zdCBhbnlSZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgICAgIGNvbnN0IHJwY01ldGFkYXRhID0gKDAsIGNvcmVfMS5nZXRSUENNZXRhZGF0YSkoYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZU5hbWUgPSBhbnlSZXF1ZXN0LnJvdXRlT3B0aW9uc1xuICAgICAgICAgICAgICAgID8gYW55UmVxdWVzdC5yb3V0ZU9wdGlvbnMudXJsIC8vIHNpbmNlIGZhc3RpZnlANC4xMC4wXG4gICAgICAgICAgICAgICAgOiByZXF1ZXN0LnJvdXRlclBhdGg7XG4gICAgICAgICAgICBpZiAocm91dGVOYW1lICYmIHJwY01ldGFkYXRhPy50eXBlID09PSBjb3JlXzEuUlBDVHlwZS5IVFRQKSB7XG4gICAgICAgICAgICAgICAgcnBjTWV0YWRhdGEucm91dGUgPSByb3V0ZU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF93cmFwSGFuZGxlcihwbHVnaW5OYW1lLCBob29rTmFtZSwgb3JpZ2luYWwsIHN5bmNGdW5jdGlvbldpdGhEb25lKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ1BhdGNoaW5nIGZhc3RpZnkgcm91dGUuaGFuZGxlciBmdW5jdGlvbicpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IG9yaWdpbmFsLm5hbWUgfHwgcGx1Z2luTmFtZSB8fCBleHBvcnRzLkFOT05ZTU9VU19OQU1FO1xuICAgICAgICAgICAgY29uc3Qgc3Bhbk5hbWUgPSBgJHtBdHRyaWJ1dGVOYW1lc18xLkZhc3RpZnlOYW1lcy5NSURETEVXQVJFfSAtICR7bmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgcmVwbHkgPSBhcmdzWzFdO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9ICgwLCB1dGlsc18xLnN0YXJ0U3BhbikocmVwbHksIGluc3RydW1lbnRhdGlvbi50cmFjZXIsIHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRkFTVElGWV9UWVBFXTogQXR0cmlidXRlTmFtZXNfMS5GYXN0aWZ5VHlwZXMuTUlERExFV0FSRSxcbiAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5QTFVHSU5fTkFNRV06IHBsdWdpbk5hbWUsXG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuSE9PS19OQU1FXTogaG9va05hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdEb25lID0gc3luY0Z1bmN0aW9uV2l0aERvbmUgJiZcbiAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAob3JpZ0RvbmUpIHtcbiAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBmdW5jdGlvbiAoLi4uZG9uZUFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3BhbikocmVwbHkpO1xuICAgICAgICAgICAgICAgICAgICBvcmlnRG9uZS5hcHBseSh0aGlzLCBkb25lQXJncyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbHNfMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlTWF5YmVQcm9taXNlKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBhc3luYyBob29rcyBzaG91bGQgZW5kIHRoZSBzcGFuIGFzIHNvb24gYXMgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzeW5jRnVuY3Rpb25XaXRoRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3BhbikocmVwbHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3dyYXBBZGRIb29rKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdQYXRjaGluZyBmYXN0aWZ5IHNlcnZlci5hZGRIb29rIGZ1bmN0aW9uJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVkQWRkSG9vayguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9IHRoaXMucGx1Z2luTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50c18xLmhvb2tzTmFtZXNUb1dyYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3luY0Z1bmN0aW9uV2l0aERvbmUgPSB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuY29uc3RydWN0b3IubmFtZSAhPT0gJ0FzeW5jRnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fd3JhcEhhbmRsZXIocGx1Z2luTmFtZSwgbmFtZSwgaGFuZGxlciwgc3luY0Z1bmN0aW9uV2l0aERvbmUpLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhdGNoQ29uc3RydWN0b3IobW9kdWxlRXhwb3J0cykge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiBmYXN0aWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG1vZHVsZUV4cG9ydHMuZmFzdGlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIGFwcC5hZGRIb29rKCdvblJlcXVlc3QnLCBpbnN0cnVtZW50YXRpb24uX2hvb2tPblJlcXVlc3QoKSk7XG4gICAgICAgICAgICBhcHAuYWRkSG9vaygncHJlSGFuZGxlcicsIGluc3RydW1lbnRhdGlvbi5faG9va1ByZUhhbmRsZXIoKSk7XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3dyYXAoYXBwLCAnYWRkSG9vaycsIGluc3RydW1lbnRhdGlvbi5fd3JhcEFkZEhvb2soKSk7XG4gICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2R1bGVFeHBvcnRzLmVycm9yQ29kZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmFzdGlmeS5lcnJvckNvZGVzID0gbW9kdWxlRXhwb3J0cy5lcnJvckNvZGVzO1xuICAgICAgICB9XG4gICAgICAgIGZhc3RpZnkuZmFzdGlmeSA9IGZhc3RpZnk7XG4gICAgICAgIGZhc3RpZnkuZGVmYXVsdCA9IGZhc3RpZnk7XG4gICAgICAgIHJldHVybiBmYXN0aWZ5O1xuICAgIH1cbiAgICBfcGF0Y2hTZW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdQYXRjaGluZyBmYXN0aWZ5IHJlcGx5LnNlbmQgZnVuY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoU2VuZChvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNlbmQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlRXJyb3IgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVyciAmJiBtYXliZUVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1heWJlRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3BhbikodGhpcywgZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9ob29rUHJlSGFuZGxlcigpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnUGF0Y2hpbmcgZmFzdGlmeSBwcmVIYW5kbGVyIGZ1bmN0aW9uJyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBwcmVIYW5kbGVyKHJlcXVlc3QsIHJlcGx5LCBkb25lKSB7XG4gICAgICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbnlSZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhbnlSZXF1ZXN0LnJvdXRlT3B0aW9ucz8uaGFuZGxlciB8fCBhbnlSZXF1ZXN0LmNvbnRleHQ/LmhhbmRsZXI7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGhhbmRsZXI/Lm5hbWUuc3RhcnRzV2l0aCgnYm91bmQgJylcbiAgICAgICAgICAgICAgICA/IGhhbmRsZXIubmFtZS5zdWJzdHJpbmcoNilcbiAgICAgICAgICAgICAgICA6IGhhbmRsZXI/Lm5hbWU7XG4gICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGAke0F0dHJpYnV0ZU5hbWVzXzEuRmFzdGlmeU5hbWVzLlJFUVVFU1RfSEFORExFUn0gLSAke2hhbmRsZXJOYW1lIHx8IHRoaXMucGx1Z2luTmFtZSB8fCBleHBvcnRzLkFOT05ZTU9VU19OQU1FfWA7XG4gICAgICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5QTFVHSU5fTkFNRV06IHRoaXMucGx1Z2luTmFtZSxcbiAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5GQVNUSUZZX1RZUEVdOiBBdHRyaWJ1dGVOYW1lc18xLkZhc3RpZnlUeXBlcy5SRVFVRVNUX0hBTkRMRVIsXG4gICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JPVVRFXTogYW55UmVxdWVzdC5yb3V0ZU9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgPyBhbnlSZXF1ZXN0LnJvdXRlT3B0aW9ucy51cmwgLy8gc2luY2UgZmFzdGlmeUA0LjEwLjBcbiAgICAgICAgICAgICAgICAgICAgOiByZXF1ZXN0LnJvdXRlclBhdGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5GQVNUSUZZX05BTUVdID0gaGFuZGxlck5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gKDAsIHV0aWxzXzEuc3RhcnRTcGFuKShyZXBseSwgaW5zdHJ1bWVudGF0aW9uLnRyYWNlciwgc3Bhbk5hbWUsIHNwYW5BdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVxdWVzdEhvb2sgfSA9IGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SG9vaykge1xuICAgICAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiByZXF1ZXN0SG9vayhzcGFuLCB7IHJlcXVlc3QgfSksIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9kaWFnLmVycm9yKCdyZXF1ZXN0IGhvb2sgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuRmFzdGlmeUluc3RydW1lbnRhdGlvbiA9IEZhc3RpZnlJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZhc3RpZnlUeXBlcyA9IGV4cG9ydHMuRmFzdGlmeU5hbWVzID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuRmFzdGlmeUluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZhc3RpZnlJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkZhc3RpZnlJbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXR0cmlidXRlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGYXN0aWZ5TmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZU5hbWVzXzEuRmFzdGlmeU5hbWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmFzdGlmeVR5cGVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBdHRyaWJ1dGVOYW1lc18xLkZhc3RpZnlUeXBlczsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC4yNy4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TWU5DX0ZVTkNUSU9OUyA9IGV4cG9ydHMuQ0FMTEJBQ0tfRlVOQ1RJT05TID0gZXhwb3J0cy5QUk9NSVNFX0ZVTkNUSU9OUyA9IHZvaWQgMDtcbmV4cG9ydHMuUFJPTUlTRV9GVU5DVElPTlMgPSBbXG4gICAgJ2FjY2VzcycsXG4gICAgJ2FwcGVuZEZpbGUnLFxuICAgICdjaG1vZCcsXG4gICAgJ2Nob3duJyxcbiAgICAnY29weUZpbGUnLFxuICAgICdjcCcsXG4gICAgJ2xjaG93bicsXG4gICAgJ2xpbmsnLFxuICAgICdsc3RhdCcsXG4gICAgJ2x1dGltZXMnLFxuICAgICdta2RpcicsXG4gICAgJ21rZHRlbXAnLFxuICAgICdvcGVuJyxcbiAgICAnb3BlbmRpcicsXG4gICAgJ3JlYWRkaXInLFxuICAgICdyZWFkRmlsZScsXG4gICAgJ3JlYWRsaW5rJyxcbiAgICAncmVhbHBhdGgnLFxuICAgICdyZW5hbWUnLFxuICAgICdybScsXG4gICAgJ3JtZGlyJyxcbiAgICAnc3RhdCcsXG4gICAgJ3N5bWxpbmsnLFxuICAgICd0cnVuY2F0ZScsXG4gICAgJ3VubGluaycsXG4gICAgJ3V0aW1lcycsXG4gICAgJ3dyaXRlRmlsZScsXG4gICAgLy8gJ2xjaG1vZCcsIC8vIG9ubHkgaW1wbGVtZW50ZWQgb24gbWFjT1Ncbl07XG5leHBvcnRzLkNBTExCQUNLX0ZVTkNUSU9OUyA9IFtcbiAgICAnYWNjZXNzJyxcbiAgICAnYXBwZW5kRmlsZScsXG4gICAgJ2NobW9kJyxcbiAgICAnY2hvd24nLFxuICAgICdjb3B5RmlsZScsXG4gICAgJ2NwJyxcbiAgICAnZXhpc3RzJyxcbiAgICAnbGNob3duJyxcbiAgICAnbGluaycsXG4gICAgJ2xzdGF0JyxcbiAgICAnbHV0aW1lcycsXG4gICAgJ21rZGlyJyxcbiAgICAnbWtkdGVtcCcsXG4gICAgJ29wZW4nLFxuICAgICdvcGVuZGlyJyxcbiAgICAncmVhZGRpcicsXG4gICAgJ3JlYWRGaWxlJyxcbiAgICAncmVhZGxpbmsnLFxuICAgICdyZWFscGF0aCcsXG4gICAgJ3JlYWxwYXRoLm5hdGl2ZScsXG4gICAgJ3JlbmFtZScsXG4gICAgJ3JtJyxcbiAgICAncm1kaXInLFxuICAgICdzdGF0JyxcbiAgICAnc3ltbGluaycsXG4gICAgJ3RydW5jYXRlJyxcbiAgICAndW5saW5rJyxcbiAgICAndXRpbWVzJyxcbiAgICAnd3JpdGVGaWxlJyxcbiAgICAvLyAnY2xvc2UnLCAvLyBmdW5jdGlvbnMgb24gZmlsZSBkZXNjcmlwdG9yXG4gICAgLy8gJ2ZjaG1vZCcsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3JcbiAgICAvLyAnZmNob3duJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmZGF0YXN5bmMnLCAvLyBmdW5jdGlvbnMgb24gZmlsZSBkZXNjcmlwdG9yXG4gICAgLy8gJ2ZzdGF0JywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmc3luYycsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3JcbiAgICAvLyAnZnRydW5jYXRlJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmdXRpbWVzJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdsY2htb2QnLCAvLyBvbmx5IGltcGxlbWVudGVkIG9uIG1hY09TXG4gICAgLy8gJ3JlYWQnLCAvLyBmdW5jdGlvbnMgb24gZmlsZSBkZXNjcmlwdG9yXG4gICAgLy8gJ3JlYWR2JywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICd3cml0ZScsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3JcbiAgICAvLyAnd3JpdGV2JywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuXTtcbmV4cG9ydHMuU1lOQ19GVU5DVElPTlMgPSBbXG4gICAgJ2FjY2Vzc1N5bmMnLFxuICAgICdhcHBlbmRGaWxlU3luYycsXG4gICAgJ2NobW9kU3luYycsXG4gICAgJ2Nob3duU3luYycsXG4gICAgJ2NvcHlGaWxlU3luYycsXG4gICAgJ2NwU3luYycsXG4gICAgJ2V4aXN0c1N5bmMnLFxuICAgICdsY2hvd25TeW5jJyxcbiAgICAnbGlua1N5bmMnLFxuICAgICdsc3RhdFN5bmMnLFxuICAgICdsdXRpbWVzU3luYycsXG4gICAgJ21rZGlyU3luYycsXG4gICAgJ21rZHRlbXBTeW5jJyxcbiAgICAnb3BlbmRpclN5bmMnLFxuICAgICdvcGVuU3luYycsXG4gICAgJ3JlYWRkaXJTeW5jJyxcbiAgICAncmVhZEZpbGVTeW5jJyxcbiAgICAncmVhZGxpbmtTeW5jJyxcbiAgICAncmVhbHBhdGhTeW5jJyxcbiAgICAncmVhbHBhdGhTeW5jLm5hdGl2ZScsXG4gICAgJ3JlbmFtZVN5bmMnLFxuICAgICdybWRpclN5bmMnLFxuICAgICdybVN5bmMnLFxuICAgICdzdGF0U3luYycsXG4gICAgJ3N5bWxpbmtTeW5jJyxcbiAgICAndHJ1bmNhdGVTeW5jJyxcbiAgICAndW5saW5rU3luYycsXG4gICAgJ3V0aW1lc1N5bmMnLFxuICAgICd3cml0ZUZpbGVTeW5jJyxcbiAgICAvLyAnY2xvc2VTeW5jJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmY2htb2RTeW5jJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmY2hvd25TeW5jJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmZGF0YXN5bmNTeW5jJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdmc3RhdFN5bmMnLCAvLyBmdW5jdGlvbnMgb24gZmlsZSBkZXNjcmlwdG9yXG4gICAgLy8gJ2ZzeW5jU3luYycsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3JcbiAgICAvLyAnZnRydW5jYXRlU3luYycsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3JcbiAgICAvLyAnZnV0aW1lc1N5bmMnLCAvLyBmdW5jdGlvbnMgb24gZmlsZSBkZXNjcmlwdG9yXG4gICAgLy8gJ2xjaG1vZFN5bmMnLCAvLyBvbmx5IGltcGxlbWVudGVkIG9uIG1hY09TXG4gICAgLy8gJ3JlYWRTeW5jJywgLy8gZnVuY3Rpb25zIG9uIGZpbGUgZGVzY3JpcHRvclxuICAgIC8vICdyZWFkdlN5bmMnLCAvLyBmdW5jdGlvbnMgb24gZmlsZSBkZXNjcmlwdG9yXG4gICAgLy8gJ3dyaXRlU3luYycsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3JcbiAgICAvLyAnd3JpdGV2U3luYycsIC8vIGZ1bmN0aW9ucyBvbiBmaWxlIGRlc2NyaXB0b3Jcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaW5kZXhGcyA9IGV4cG9ydHMuc3BsaXRUd29MZXZlbHMgPSB2b2lkIDA7XG5mdW5jdGlvbiBzcGxpdFR3b0xldmVscyhmdW5jdGlvbk5hbWUpIHtcbiAgICBjb25zdCBtZW1iZXJQYXJ0cyA9IGZ1bmN0aW9uTmFtZS5zcGxpdCgnLicpO1xuICAgIGlmIChtZW1iZXJQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChtZW1iZXJQYXJ0cy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBtZW1iZXIgZnVuY3Rpb24gbmFtZSAke2Z1bmN0aW9uTmFtZX1gKTtcbiAgICAgICAgcmV0dXJuIG1lbWJlclBhcnRzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtmdW5jdGlvbk5hbWVdO1xuICAgIH1cbn1cbmV4cG9ydHMuc3BsaXRUd29MZXZlbHMgPSBzcGxpdFR3b0xldmVscztcbmZ1bmN0aW9uIGluZGV4RnMoZnMsIG1lbWJlcikge1xuICAgIGlmICghbWVtYmVyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoeyBtZW1iZXIgfSkpO1xuICAgIGNvbnN0IHNwbGl0UmVzdWx0ID0gc3BsaXRUd29MZXZlbHMobWVtYmVyKTtcbiAgICBjb25zdCBbZnVuY3Rpb25OYW1lMSwgZnVuY3Rpb25OYW1lMl0gPSBzcGxpdFJlc3VsdDtcbiAgICBpZiAoZnVuY3Rpb25OYW1lMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2JqZWN0VG9QYXRjaDogZnNbZnVuY3Rpb25OYW1lMV0sXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWVUb1BhdGNoOiBmdW5jdGlvbk5hbWUyLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9iamVjdFRvUGF0Y2g6IGZzLFxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lVG9QYXRjaDogZnVuY3Rpb25OYW1lMSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLmluZGV4RnMgPSBpbmRleEZzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIDItbGV2ZWwgZnVuY3Rpb25zIGxpa2UgYHJlYWxwYXRoLm5hdGl2ZWAgdG8gcmV0YWluIHRoZSAybmQtbGV2ZWxcbiAqIHdoZW4gcGF0Y2hpbmcgdGhlIDFzdC1sZXZlbC5cbiAqL1xuZnVuY3Rpb24gcGF0Y2hlZEZ1bmN0aW9uV2l0aE9yaWdpbmFsUHJvcGVydGllcyhwYXRjaGVkRnVuY3Rpb24sIG9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocGF0Y2hlZEZ1bmN0aW9uLCBvcmlnaW5hbCk7XG59XG5jbGFzcyBGc0luc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2ZzJywgWycqJ10sIChmcykgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZk5hbWUgb2YgY29uc3RhbnRzXzEuU1lOQ19GVU5DVElPTlMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBvYmplY3RUb1BhdGNoLCBmdW5jdGlvbk5hbWVUb1BhdGNoIH0gPSAoMCwgdXRpbHNfMS5pbmRleEZzKShmcywgZk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkob2JqZWN0VG9QYXRjaFtmdW5jdGlvbk5hbWVUb1BhdGNoXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChvYmplY3RUb1BhdGNoLCBmdW5jdGlvbk5hbWVUb1BhdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG9iamVjdFRvUGF0Y2gsIGZ1bmN0aW9uTmFtZVRvUGF0Y2gsIHRoaXMuX3BhdGNoU3luY0Z1bmN0aW9uLmJpbmQodGhpcywgZk5hbWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmTmFtZSBvZiBjb25zdGFudHNfMS5DQUxMQkFDS19GVU5DVElPTlMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBvYmplY3RUb1BhdGNoLCBmdW5jdGlvbk5hbWVUb1BhdGNoIH0gPSAoMCwgdXRpbHNfMS5pbmRleEZzKShmcywgZk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkob2JqZWN0VG9QYXRjaFtmdW5jdGlvbk5hbWVUb1BhdGNoXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChvYmplY3RUb1BhdGNoLCBmdW5jdGlvbk5hbWVUb1BhdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZk5hbWUgPT09ICdleGlzdHMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGluZyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgdGhlIGluY29uc2lzdGVudCBjYiBzdHlsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBleGlzdHNgIGRvZXNuJ3QgaGF2ZSBlcnJvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGJ1dCB0aGUgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG9iamVjdFRvUGF0Y2gsIGZ1bmN0aW9uTmFtZVRvUGF0Y2gsIHRoaXMuX3BhdGNoRXhpc3RzQ2FsbGJhY2tGdW5jdGlvbi5iaW5kKHRoaXMsIGZOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG9iamVjdFRvUGF0Y2gsIGZ1bmN0aW9uTmFtZVRvUGF0Y2gsIHRoaXMuX3BhdGNoQ2FsbGJhY2tGdW5jdGlvbi5iaW5kKHRoaXMsIGZOYW1lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZk5hbWUgb2YgY29uc3RhbnRzXzEuUFJPTUlTRV9GVU5DVElPTlMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKGZzLnByb21pc2VzW2ZOYW1lXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChmcy5wcm9taXNlcywgZk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAoZnMucHJvbWlzZXMsIGZOYW1lLCB0aGlzLl9wYXRjaFByb21pc2VGdW5jdGlvbi5iaW5kKHRoaXMsIGZOYW1lKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmcztcbiAgICAgICAgICAgIH0sIChmcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmTmFtZSBvZiBjb25zdGFudHNfMS5TWU5DX0ZVTkNUSU9OUykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG9iamVjdFRvUGF0Y2gsIGZ1bmN0aW9uTmFtZVRvUGF0Y2ggfSA9ICgwLCB1dGlsc18xLmluZGV4RnMpKGZzLCBmTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShvYmplY3RUb1BhdGNoW2Z1bmN0aW9uTmFtZVRvUGF0Y2hdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG9iamVjdFRvUGF0Y2gsIGZ1bmN0aW9uTmFtZVRvUGF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZk5hbWUgb2YgY29uc3RhbnRzXzEuQ0FMTEJBQ0tfRlVOQ1RJT05TKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgb2JqZWN0VG9QYXRjaCwgZnVuY3Rpb25OYW1lVG9QYXRjaCB9ID0gKDAsIHV0aWxzXzEuaW5kZXhGcykoZnMsIGZOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG9iamVjdFRvUGF0Y2hbZnVuY3Rpb25OYW1lVG9QYXRjaF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAob2JqZWN0VG9QYXRjaCwgZnVuY3Rpb25OYW1lVG9QYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmTmFtZSBvZiBjb25zdGFudHNfMS5QUk9NSVNFX0ZVTkNUSU9OUykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoZnMucHJvbWlzZXNbZk5hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGZzLnByb21pc2VzLCBmTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignZnMvcHJvbWlzZXMnLCBbJyonXSwgKGZzUHJvbWlzZXMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZOYW1lIG9mIGNvbnN0YW50c18xLlBST01JU0VfRlVOQ1RJT05TKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShmc1Byb21pc2VzW2ZOYW1lXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChmc1Byb21pc2VzLCBmTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JhcChmc1Byb21pc2VzLCBmTmFtZSwgdGhpcy5fcGF0Y2hQcm9taXNlRnVuY3Rpb24uYmluZCh0aGlzLCBmTmFtZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZnNQcm9taXNlcztcbiAgICAgICAgICAgIH0sIChmc1Byb21pc2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZzUHJvbWlzZXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZk5hbWUgb2YgY29uc3RhbnRzXzEuUFJPTUlTRV9GVU5DVElPTlMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKGZzUHJvbWlzZXNbZk5hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGZzUHJvbWlzZXMsIGZOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBfcGF0Y2hTeW5jRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICBjb25zdCBwYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlQ29udGV4dCA9IGFwaS5jb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICAgICAgaWYgKCFpbnN0cnVtZW50YXRpb24uX3Nob3VsZFRyYWNlKGFjdGl2ZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbi5fcnVuQ3JlYXRlSG9vayhmdW5jdGlvbk5hbWUsIHtcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFjdGl2ZUNvbnRleHQpLCBvcmlnaW5hbCwgdGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oYGZzICR7ZnVuY3Rpb25OYW1lfWApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBTdXBwcmVzcyB0cmFjaW5nIGZvciBpbnRlcm5hbCBmcyBjYWxsc1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGFwaS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaS50cmFjZS5zZXRTcGFuKGFjdGl2ZUNvbnRleHQsIHNwYW4pKSwgb3JpZ2luYWwsIHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fcnVuRW5kSG9vayhmdW5jdGlvbk5hbWUsIHsgYXJnczogYXJncywgc3BhbiB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fcnVuRW5kSG9vayhmdW5jdGlvbk5hbWUsIHsgYXJnczogYXJncywgc3BhbiwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcGF0Y2hlZEZ1bmN0aW9uV2l0aE9yaWdpbmFsUHJvcGVydGllcyhwYXRjaGVkRnVuY3Rpb24sIG9yaWdpbmFsKTtcbiAgICB9XG4gICAgX3BhdGNoQ2FsbGJhY2tGdW5jdGlvbihmdW5jdGlvbk5hbWUsIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHBhdGNoZWRGdW5jdGlvbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gYXBpLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgICAgICBpZiAoIWluc3RydW1lbnRhdGlvbi5fc2hvdWxkVHJhY2UoYWN0aXZlQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uLl9ydW5DcmVhdGVIb29rKGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYWN0aXZlQ29udGV4dCksIG9yaWdpbmFsLCB0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RJZHggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCBjYiA9IGFyZ3NbbGFzdElkeF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKGBmcyAke2Z1bmN0aW9uTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdG8gdGhlIGNvbnRleHQgYWN0aXZlIGR1cmluZyB0aGUgY2FsbCBpbiB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBhcmdzW2xhc3RJZHhdID0gYXBpLmNvbnRleHQuYmluZChhY3RpdmVDb250ZXh0LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGkuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3J1bkVuZEhvb2soZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3VwcHJlc3MgdHJhY2luZyBmb3IgaW50ZXJuYWwgZnMgY2FsbHNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaS50cmFjZS5zZXRTcGFuKGFjdGl2ZUNvbnRleHQsIHNwYW4pKSwgb3JpZ2luYWwsIHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9ydW5FbmRIb29rKGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gaWYgd2UgYXJlIHByZXR0eSBzdXJlIGl0J3MgZ29pbmcgdG8gdGhyb3dcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBwYXRjaGVkRnVuY3Rpb25XaXRoT3JpZ2luYWxQcm9wZXJ0aWVzKHBhdGNoZWRGdW5jdGlvbiwgb3JpZ2luYWwpO1xuICAgIH1cbiAgICBfcGF0Y2hFeGlzdHNDYWxsYmFja0Z1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgY29uc3QgcGF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSBhcGkuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLl9zaG91bGRUcmFjZShhY3RpdmVDb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uX3J1bkNyZWF0ZUhvb2soZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKCgwLCBjb3JlXzEuc3VwcHJlc3NUcmFjaW5nKShhY3RpdmVDb250ZXh0KSwgb3JpZ2luYWwsIHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdElkeCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gYXJnc1tsYXN0SWR4XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oYGZzICR7ZnVuY3Rpb25OYW1lfWApO1xuICAgICAgICAgICAgICAgIC8vIFJldHVybiB0byB0aGUgY29udGV4dCBhY3RpdmUgZHVyaW5nIHRoZSBjYWxsIGluIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGFyZ3NbbGFzdElkeF0gPSBhcGkuY29udGV4dC5iaW5kKGFjdGl2ZUNvbnRleHQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYGV4aXN0c2AgbmV2ZXIgY2FsbHMgdGhlIGNhbGxiYWNrIHdpdGggYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9ydW5FbmRIb29rKGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdXBwcmVzcyB0cmFjaW5nIGZvciBpbnRlcm5hbCBmcyBjYWxsc1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYXBpLnRyYWNlLnNldFNwYW4oYWN0aXZlQ29udGV4dCwgc3BhbikpLCBvcmlnaW5hbCwgdGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGkuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3J1bkVuZEhvb2soZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmdW5jdGlvbldpdGhPcmlnaW5hbFByb3BlcnRpZXMgPSBwYXRjaGVkRnVuY3Rpb25XaXRoT3JpZ2luYWxQcm9wZXJ0aWVzKHBhdGNoZWRGdW5jdGlvbiwgb3JpZ2luYWwpO1xuICAgICAgICAvLyBgZXhpc3RzYCBoYXMgYSBjdXN0b20gcHJvbWlzaWZ5IGZ1bmN0aW9uIGJlY2F1c2Ugb2YgdGhlIGluY29uc2lzdGVudCBzaWduYXR1cmVcbiAgICAgICAgLy8gcmVwbGljYXRpbmcgdGhhdCBvbiB0aGUgcGF0Y2hlZCBmdW5jdGlvblxuICAgICAgICBjb25zdCBwcm9taXNpZmllZCA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmdW5jdGlvbldpdGhPcmlnaW5hbFByb3BlcnRpZXMocGF0aCwgcmVzb2x2ZSkpO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzaWZpZWQsICduYW1lJywgeyB2YWx1ZTogZnVuY3Rpb25OYW1lIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb25XaXRoT3JpZ2luYWxQcm9wZXJ0aWVzLCB1dGlsXzEucHJvbWlzaWZ5LmN1c3RvbSwge1xuICAgICAgICAgICAgdmFsdWU6IHByb21pc2lmaWVkLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uV2l0aE9yaWdpbmFsUHJvcGVydGllcztcbiAgICB9XG4gICAgX3BhdGNoUHJvbWlzZUZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgY29uc3QgcGF0Y2hlZEZ1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSBhcGkuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLl9zaG91bGRUcmFjZShhY3RpdmVDb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uX3J1bkNyZWF0ZUhvb2soZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKCgwLCBjb3JlXzEuc3VwcHJlc3NUcmFjaW5nKShhY3RpdmVDb250ZXh0KSwgb3JpZ2luYWwsIHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKGBmcyAke2Z1bmN0aW9uTmFtZX1gKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gU3VwcHJlc3MgdHJhY2luZyBmb3IgaW50ZXJuYWwgZnMgY2FsbHNcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBhcGkuY29udGV4dC53aXRoKCgwLCBjb3JlXzEuc3VwcHJlc3NUcmFjaW5nKShhcGkudHJhY2Uuc2V0U3BhbihhY3RpdmVDb250ZXh0LCBzcGFuKSksIG9yaWdpbmFsLCB0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3J1bkVuZEhvb2soZnVuY3Rpb25OYW1lLCB7IGFyZ3M6IGFyZ3MsIHNwYW4gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3J1bkVuZEhvb2soZnVuY3Rpb25OYW1lLCB7IGFyZ3M6IGFyZ3MsIHNwYW4sIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhdGNoZWRGdW5jdGlvbldpdGhPcmlnaW5hbFByb3BlcnRpZXMocGF0Y2hlZEZ1bmN0aW9uLCBvcmlnaW5hbCk7XG4gICAgfVxuICAgIF9ydW5DcmVhdGVIb29rKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjcmVhdGVIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAodHlwZW9mIGNyZWF0ZUhvb2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUhvb2soLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZXJyb3IoJ2NhdWdodCBjcmVhdGVIb29rIGVycm9yJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIF9ydW5FbmRIb29rKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBlbmRIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAodHlwZW9mIGVuZEhvb2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZW5kSG9vayguLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcignY2F1Z2h0IGVuZEhvb2sgZXJyb3InLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfc2hvdWxkVHJhY2UoY29udGV4dCkge1xuICAgICAgICBpZiAoKDAsIGNvcmVfMS5pc1RyYWNpbmdTdXBwcmVzc2VkKShjb250ZXh0KSkge1xuICAgICAgICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBBdm9pZCBjcmVhdGluZyBhZGRpdGlvbmFsIGNvbnRleHRzIGFuZCBzcGFuc1xuICAgICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHRyYWNpbmcgaXMgYmVpbmcgc3VwcHJlc3NlZC5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJlcXVpcmVQYXJlbnRTcGFuIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAocmVxdWlyZVBhcmVudFNwYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBhcGkudHJhY2UuZ2V0U3Bhbihjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRTcGFuID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZXhwb3J0cy5Gc0luc3RydW1lbnRhdGlvbiA9IEZzSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Gc0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZzSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5Gc0luc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41MS4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1nZW5lcmljLXBvb2wnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2VuZXJpY1Bvb2xJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgTU9EVUxFX05BTUUgPSAnZ2VuZXJpYy1wb29sJztcbmNsYXNzIEdlbmVyaWNQb29sSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgLy8gb25seSB1c2VkIGZvciB2MiAtIHYyLjMpXG4gICAgX2lzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKE1PRFVMRV9OQU1FLCBbJz49My4wLjAgPDQnXSwgbW9kdWxlRXhwb3J0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgUG9vbCA9IG1vZHVsZUV4cG9ydHMuUG9vbDtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoUG9vbC5wcm90b3R5cGUuYWNxdWlyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKFBvb2wucHJvdG90eXBlLCAnYWNxdWlyZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKFBvb2wucHJvdG90eXBlLCAnYWNxdWlyZScsIHRoaXMuX2FjcXVpcmVQYXRjaGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSwgbW9kdWxlRXhwb3J0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgUG9vbCA9IG1vZHVsZUV4cG9ydHMuUG9vbDtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoUG9vbC5wcm90b3R5cGUsICdhY3F1aXJlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihNT0RVTEVfTkFNRSwgWyc+PTIuNC4wIDwzJ10sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFBvb2wgPSBtb2R1bGVFeHBvcnRzLlBvb2w7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKFBvb2wucHJvdG90eXBlLmFjcXVpcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChQb29sLnByb3RvdHlwZSwgJ2FjcXVpcmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChQb29sLnByb3RvdHlwZSwgJ2FjcXVpcmUnLCB0aGlzLl9hY3F1aXJlV2l0aENhbGxiYWNrc1BhdGNoZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBQb29sID0gbW9kdWxlRXhwb3J0cy5Qb29sO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChQb29sLnByb3RvdHlwZSwgJ2FjcXVpcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKE1PRFVMRV9OQU1FLCBbJz49Mi4wLjAgPDIuNCddLCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuUG9vbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdQb29sJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ1Bvb2wnLCB0aGlzLl9wb29sV3JhcHBlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBvYmplY3QgaXMgY3JlYXRlZCBvbiB0aGUgZmx5IGV2ZXJ5IHRpbWUsIHdlIG5lZWQgdG8gdXNlXG4gICAgICAgICAgICAgICAgLy8gYSBib29sZWFuIHN3aXRjaCBoZXJlIHRvIGRpc2FibGUgdGhlIGluc3RydW1lbnRhdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIF9hY3F1aXJlUGF0Y2hlcihvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZF9hY3F1aXJlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGFwaS5jb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKCdnZW5lcmljLXBvb2wuYWNxdWlyZScsIHt9LCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0LndpdGgoYXBpLnRyYWNlLnNldFNwYW4ocGFyZW50LCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3MpLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wb29sV3JhcHBlcihvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZF9wb29sKCkge1xuICAgICAgICAgICAgY29uc3QgcG9vbCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3dyYXAocG9vbCwgJ2FjcXVpcmUnLCBpbnN0cnVtZW50YXRpb24uX2FjcXVpcmVXaXRoQ2FsbGJhY2tzUGF0Y2hlci5iaW5kKGluc3RydW1lbnRhdGlvbikpO1xuICAgICAgICAgICAgcmV0dXJuIHBvb2w7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9hY3F1aXJlV2l0aENhbGxiYWNrc1BhdGNoZXIob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBwZWRfYWNxdWlyZShjYiwgcHJpb3JpdHkpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgdXNlZCBmb3IgdjIgLSB2Mi4zXG4gICAgICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uLl9pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgY2IsIHByaW9yaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGFwaS5jb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKCdnZW5lcmljLXBvb2wuYWNxdWlyZScsIHt9LCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0LndpdGgoYXBpLnRyYWNlLnNldFNwYW4ocGFyZW50LCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsLmNhbGwodGhpcywgKGVyciwgY2xpZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBjaGVja2luZyB3aGV0aGVyIGNiIGlzIGEgZnVuY3Rpb24gYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgY29kZSBkb2Vzbid0IGRvIHRoYXQgZWl0aGVyLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcnIsIGNsaWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBwcmlvcml0eSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkdlbmVyaWNQb29sSW5zdHJ1bWVudGF0aW9uID0gR2VuZXJpY1Bvb2xJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdlbmVyaWNQb29sSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2VuZXJpY1Bvb2xJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkdlbmVyaWNQb29sSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNwYW5OYW1lcyA9IGV4cG9ydHMuVG9rZW5LaW5kID0gZXhwb3J0cy5BbGxvd2VkT3BlcmF0aW9uVHlwZXMgPSB2b2lkIDA7XG52YXIgQWxsb3dlZE9wZXJhdGlvblR5cGVzO1xuKGZ1bmN0aW9uIChBbGxvd2VkT3BlcmF0aW9uVHlwZXMpIHtcbiAgICBBbGxvd2VkT3BlcmF0aW9uVHlwZXNbXCJRVUVSWVwiXSA9IFwicXVlcnlcIjtcbiAgICBBbGxvd2VkT3BlcmF0aW9uVHlwZXNbXCJNVVRBVElPTlwiXSA9IFwibXV0YXRpb25cIjtcbiAgICBBbGxvd2VkT3BlcmF0aW9uVHlwZXNbXCJTVUJTQ1JJUFRJT05cIl0gPSBcInN1YnNjcmlwdGlvblwiO1xufSkoQWxsb3dlZE9wZXJhdGlvblR5cGVzID0gZXhwb3J0cy5BbGxvd2VkT3BlcmF0aW9uVHlwZXMgfHwgKGV4cG9ydHMuQWxsb3dlZE9wZXJhdGlvblR5cGVzID0ge30pKTtcbnZhciBUb2tlbktpbmQ7XG4oZnVuY3Rpb24gKFRva2VuS2luZCkge1xuICAgIFRva2VuS2luZFtcIlNPRlwiXSA9IFwiPFNPRj5cIjtcbiAgICBUb2tlbktpbmRbXCJFT0ZcIl0gPSBcIjxFT0Y+XCI7XG4gICAgVG9rZW5LaW5kW1wiQkFOR1wiXSA9IFwiIVwiO1xuICAgIFRva2VuS2luZFtcIkRPTExBUlwiXSA9IFwiJFwiO1xuICAgIFRva2VuS2luZFtcIkFNUFwiXSA9IFwiJlwiO1xuICAgIFRva2VuS2luZFtcIlBBUkVOX0xcIl0gPSBcIihcIjtcbiAgICBUb2tlbktpbmRbXCJQQVJFTl9SXCJdID0gXCIpXCI7XG4gICAgVG9rZW5LaW5kW1wiU1BSRUFEXCJdID0gXCIuLi5cIjtcbiAgICBUb2tlbktpbmRbXCJDT0xPTlwiXSA9IFwiOlwiO1xuICAgIFRva2VuS2luZFtcIkVRVUFMU1wiXSA9IFwiPVwiO1xuICAgIFRva2VuS2luZFtcIkFUXCJdID0gXCJAXCI7XG4gICAgVG9rZW5LaW5kW1wiQlJBQ0tFVF9MXCJdID0gXCJbXCI7XG4gICAgVG9rZW5LaW5kW1wiQlJBQ0tFVF9SXCJdID0gXCJdXCI7XG4gICAgVG9rZW5LaW5kW1wiQlJBQ0VfTFwiXSA9IFwie1wiO1xuICAgIFRva2VuS2luZFtcIlBJUEVcIl0gPSBcInxcIjtcbiAgICBUb2tlbktpbmRbXCJCUkFDRV9SXCJdID0gXCJ9XCI7XG4gICAgVG9rZW5LaW5kW1wiTkFNRVwiXSA9IFwiTmFtZVwiO1xuICAgIFRva2VuS2luZFtcIklOVFwiXSA9IFwiSW50XCI7XG4gICAgVG9rZW5LaW5kW1wiRkxPQVRcIl0gPSBcIkZsb2F0XCI7XG4gICAgVG9rZW5LaW5kW1wiU1RSSU5HXCJdID0gXCJTdHJpbmdcIjtcbiAgICBUb2tlbktpbmRbXCJCTE9DS19TVFJJTkdcIl0gPSBcIkJsb2NrU3RyaW5nXCI7XG4gICAgVG9rZW5LaW5kW1wiQ09NTUVOVFwiXSA9IFwiQ29tbWVudFwiO1xufSkoVG9rZW5LaW5kID0gZXhwb3J0cy5Ub2tlbktpbmQgfHwgKGV4cG9ydHMuVG9rZW5LaW5kID0ge30pKTtcbnZhciBTcGFuTmFtZXM7XG4oZnVuY3Rpb24gKFNwYW5OYW1lcykge1xuICAgIFNwYW5OYW1lc1tcIkVYRUNVVEVcIl0gPSBcImdyYXBocWwuZXhlY3V0ZVwiO1xuICAgIFNwYW5OYW1lc1tcIlBBUlNFXCJdID0gXCJncmFwaHFsLnBhcnNlXCI7XG4gICAgU3Bhbk5hbWVzW1wiUkVTT0xWRVwiXSA9IFwiZ3JhcGhxbC5yZXNvbHZlXCI7XG4gICAgU3Bhbk5hbWVzW1wiVkFMSURBVEVcIl0gPSBcImdyYXBocWwudmFsaWRhdGVcIjtcbiAgICBTcGFuTmFtZXNbXCJTQ0hFTUFfVkFMSURBVEVcIl0gPSBcImdyYXBocWwudmFsaWRhdGVTY2hlbWFcIjtcbiAgICBTcGFuTmFtZXNbXCJTQ0hFTUFfUEFSU0VcIl0gPSBcImdyYXBocWwucGFyc2VTY2hlbWFcIjtcbn0pKFNwYW5OYW1lcyA9IGV4cG9ydHMuU3Bhbk5hbWVzIHx8IChleHBvcnRzLlNwYW5OYW1lcyA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnVtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBBdHRyaWJ1dGVOYW1lcztcbihmdW5jdGlvbiAoQXR0cmlidXRlTmFtZXMpIHtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIlNPVVJDRVwiXSA9IFwiZ3JhcGhxbC5zb3VyY2VcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkZJRUxEX05BTUVcIl0gPSBcImdyYXBocWwuZmllbGQubmFtZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiRklFTERfUEFUSFwiXSA9IFwiZ3JhcGhxbC5maWVsZC5wYXRoXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJGSUVMRF9UWVBFXCJdID0gXCJncmFwaHFsLmZpZWxkLnR5cGVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIk9QRVJBVElPTl9UWVBFXCJdID0gXCJncmFwaHFsLm9wZXJhdGlvbi50eXBlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJPUEVSQVRJT05fTkFNRVwiXSA9IFwiZ3JhcGhxbC5vcGVyYXRpb24ubmFtZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiVkFSSUFCTEVTXCJdID0gXCJncmFwaHFsLnZhcmlhYmxlcy5cIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkVSUk9SX1ZBTElEQVRJT05fTkFNRVwiXSA9IFwiZ3JhcGhxbC52YWxpZGF0aW9uLmVycm9yXCI7XG59KShBdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgfHwgKGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXR0cmlidXRlTmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9URUxfR1JBUEhRTF9EQVRBX1NZTUJPTCA9IGV4cG9ydHMuT1RFTF9QQVRDSEVEX1NZTUJPTCA9IHZvaWQgMDtcbmV4cG9ydHMuT1RFTF9QQVRDSEVEX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ29wZW50ZWxlbWV0cnkucGF0Y2hlZCcpO1xuZXhwb3J0cy5PVEVMX0dSQVBIUUxfREFUQV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdvcGVudGVsZW1ldHJ5LmdyYXBocWxfZGF0YScpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3ltYm9scy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1BFUkFUSU9OX05PVF9TVVBQT1JURUQgPSB2b2lkIDA7XG5jb25zdCBzeW1ib2xzXzEgPSByZXF1aXJlKFwiLi9zeW1ib2xzXCIpO1xuZXhwb3J0cy5PUEVSQVRJT05fTk9UX1NVUFBPUlRFRCA9ICdPcGVyYXRpb24kb3BlcmF0aW9uTmFtZSRub3QnICsgJyBzdXBwb3J0ZWQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndyYXBGaWVsZFJlc29sdmVyID0gZXhwb3J0cy53cmFwRmllbGRzID0gZXhwb3J0cy5nZXRTb3VyY2VGcm9tTG9jYXRpb24gPSBleHBvcnRzLmdldE9wZXJhdGlvbiA9IGV4cG9ydHMuZW5kU3BhbiA9IGV4cG9ydHMuYWRkU3BhblNvdXJjZSA9IGV4cG9ydHMuYWRkSW5wdXRWYXJpYWJsZUF0dHJpYnV0ZXMgPSBleHBvcnRzLmlzUHJvbWlzZSA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBlbnVtXzEgPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuY29uc3Qgc3ltYm9sc18xID0gcmVxdWlyZShcIi4vc3ltYm9sc1wiKTtcbmNvbnN0IE9QRVJBVElPTl9WQUxVRVMgPSBPYmplY3QudmFsdWVzKGVudW1fMS5BbGxvd2VkT3BlcmF0aW9uVHlwZXMpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZ3JhcGhxbC1qcy9ibG9iL21haW4vc3JjL2pzdXRpbHMvaXNQcm9taXNlLnRzXG5jb25zdCBpc1Byb21pc2UgPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlPy50aGVuID09PSAnZnVuY3Rpb24nO1xufTtcbmV4cG9ydHMuaXNQcm9taXNlID0gaXNQcm9taXNlO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZ3JhcGhxbC1qcy9ibG9iL21haW4vc3JjL2pzdXRpbHMvaXNPYmplY3RMaWtlLnRzXG5jb25zdCBpc09iamVjdExpa2UgPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBhZGRJbnB1dFZhcmlhYmxlQXR0cmlidXRlKHNwYW4sIGtleSwgdmFyaWFibGUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YXJpYWJsZSkpIHtcbiAgICAgICAgdmFyaWFibGUuZm9yRWFjaCgodmFsdWUsIGlkeCkgPT4ge1xuICAgICAgICAgICAgYWRkSW5wdXRWYXJpYWJsZUF0dHJpYnV0ZShzcGFuLCBgJHtrZXl9LiR7aWR4fWAsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhcmlhYmxlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlKS5mb3JFYWNoKChbbmVzdGVkS2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGFkZElucHV0VmFyaWFibGVBdHRyaWJ1dGUoc3BhbiwgYCR7a2V5fS4ke25lc3RlZEtleX1gLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7QXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5WQVJJQUJMRVN9JHtTdHJpbmcoa2V5KX1gLCB2YXJpYWJsZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkSW5wdXRWYXJpYWJsZUF0dHJpYnV0ZXMoc3BhbiwgdmFyaWFibGVWYWx1ZXMpIHtcbiAgICBPYmplY3QuZW50cmllcyh2YXJpYWJsZVZhbHVlcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFkZElucHV0VmFyaWFibGVBdHRyaWJ1dGUoc3Bhbiwga2V5LCB2YWx1ZSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmFkZElucHV0VmFyaWFibGVBdHRyaWJ1dGVzID0gYWRkSW5wdXRWYXJpYWJsZUF0dHJpYnV0ZXM7XG5mdW5jdGlvbiBhZGRTcGFuU291cmNlKHNwYW4sIGxvYywgYWxsb3dWYWx1ZXMsIHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBnZXRTb3VyY2VGcm9tTG9jYXRpb24obG9jLCBhbGxvd1ZhbHVlcywgc3RhcnQsIGVuZCk7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5TT1VSQ0UsIHNvdXJjZSk7XG59XG5leHBvcnRzLmFkZFNwYW5Tb3VyY2UgPSBhZGRTcGFuU291cmNlO1xuZnVuY3Rpb24gY3JlYXRlRmllbGRJZk5vdEV4aXN0cyh0cmFjZXIsIGdldENvbmZpZywgY29udGV4dFZhbHVlLCBpbmZvLCBwYXRoKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoY29udGV4dFZhbHVlLCBwYXRoKTtcbiAgICBsZXQgc3BhbkFkZGVkID0gZmFsc2U7XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgICBzcGFuQWRkZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRQYXJlbnRGaWVsZChjb250ZXh0VmFsdWUsIHBhdGgpO1xuICAgICAgICBmaWVsZCA9IHtcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHNwYW46IGNyZWF0ZVJlc29sdmVyU3Bhbih0cmFjZXIsIGdldENvbmZpZywgY29udGV4dFZhbHVlLCBpbmZvLCBwYXRoLCBwYXJlbnQuc3BhbiksXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgYWRkRmllbGQoY29udGV4dFZhbHVlLCBwYXRoLCBmaWVsZCk7XG4gICAgfVxuICAgIHJldHVybiB7IHNwYW5BZGRlZCwgZmllbGQgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyU3Bhbih0cmFjZXIsIGdldENvbmZpZywgY29udGV4dFZhbHVlLCBpbmZvLCBwYXRoLCBwYXJlbnRTcGFuKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRklFTERfTkFNRV06IGluZm8uZmllbGROYW1lLFxuICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5GSUVMRF9QQVRIXTogcGF0aC5qb2luKCcuJyksXG4gICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkZJRUxEX1RZUEVdOiBpbmZvLnJldHVyblR5cGUudG9TdHJpbmcoKSxcbiAgICB9O1xuICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKGAke2VudW1fMS5TcGFuTmFtZXMuUkVTT0xWRX0gJHthdHRyaWJ1dGVzW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuRklFTERfUEFUSF19YCwge1xuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgIH0sIHBhcmVudFNwYW4gPyBhcGkudHJhY2Uuc2V0U3BhbihhcGkuY29udGV4dC5hY3RpdmUoKSwgcGFyZW50U3BhbikgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gY29udGV4dFZhbHVlW3N5bWJvbHNfMS5PVEVMX0dSQVBIUUxfREFUQV9TWU1CT0xdLnNvdXJjZTtcbiAgICBjb25zdCBmaWVsZE5vZGUgPSBpbmZvLmZpZWxkTm9kZXMuZmluZChmaWVsZE5vZGUgPT4gZmllbGROb2RlLmtpbmQgPT09ICdGaWVsZCcpO1xuICAgIGlmIChmaWVsZE5vZGUpIHtcbiAgICAgICAgYWRkU3BhblNvdXJjZShzcGFuLCBkb2N1bWVudC5sb2MsIGdldENvbmZpZygpLmFsbG93VmFsdWVzLCBmaWVsZE5vZGUubG9jPy5zdGFydCwgZmllbGROb2RlLmxvYz8uZW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYW47XG59XG5mdW5jdGlvbiBlbmRTcGFuKHNwYW4sIGVycm9yKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICB9XG4gICAgc3Bhbi5lbmQoKTtcbn1cbmV4cG9ydHMuZW5kU3BhbiA9IGVuZFNwYW47XG5mdW5jdGlvbiBnZXRPcGVyYXRpb24oZG9jdW1lbnQsIG9wZXJhdGlvbk5hbWUpIHtcbiAgICBpZiAoIWRvY3VtZW50IHx8ICFBcnJheS5pc0FycmF5KGRvY3VtZW50LmRlZmluaXRpb25zKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uTmFtZSkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGVmaW5pdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoZGVmaW5pdGlvbiA9PiBPUEVSQVRJT05fVkFMVUVTLmluZGV4T2YoZGVmaW5pdGlvbj8ub3BlcmF0aW9uKSAhPT0gLTEpXG4gICAgICAgICAgICAuZmluZChkZWZpbml0aW9uID0+IG9wZXJhdGlvbk5hbWUgPT09IGRlZmluaXRpb24/Lm5hbWU/LnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5kZWZpbml0aW9ucy5maW5kKGRlZmluaXRpb24gPT4gT1BFUkFUSU9OX1ZBTFVFUy5pbmRleE9mKGRlZmluaXRpb24/Lm9wZXJhdGlvbikgIT09IC0xKTtcbiAgICB9XG59XG5leHBvcnRzLmdldE9wZXJhdGlvbiA9IGdldE9wZXJhdGlvbjtcbmZ1bmN0aW9uIGFkZEZpZWxkKGNvbnRleHRWYWx1ZSwgcGF0aCwgZmllbGQpIHtcbiAgICByZXR1cm4gKGNvbnRleHRWYWx1ZVtzeW1ib2xzXzEuT1RFTF9HUkFQSFFMX0RBVEFfU1lNQk9MXS5maWVsZHNbcGF0aC5qb2luKCcuJyldID1cbiAgICAgICAgZmllbGQpO1xufVxuZnVuY3Rpb24gZ2V0RmllbGQoY29udGV4dFZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIGNvbnRleHRWYWx1ZVtzeW1ib2xzXzEuT1RFTF9HUkFQSFFMX0RBVEFfU1lNQk9MXS5maWVsZHNbcGF0aC5qb2luKCcuJyldO1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50RmllbGQoY29udGV4dFZhbHVlLCBwYXRoKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZpZWxkKGNvbnRleHRWYWx1ZSwgcGF0aC5zbGljZSgwLCBpKSk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGNvbnRleHRWYWx1ZVtzeW1ib2xzXzEuT1RFTF9HUkFQSFFMX0RBVEFfU1lNQk9MXS5zcGFuLFxuICAgIH07XG59XG5mdW5jdGlvbiBwYXRoVG9BcnJheShtZXJnZUl0ZW1zLCBwYXRoKSB7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gW107XG4gICAgbGV0IGN1cnIgPSBwYXRoO1xuICAgIHdoaWxlIChjdXJyKSB7XG4gICAgICAgIGxldCBrZXkgPSBjdXJyLmtleTtcbiAgICAgICAgaWYgKG1lcmdlSXRlbXMgJiYgdHlwZW9mIGtleSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGtleSA9ICcqJztcbiAgICAgICAgfVxuICAgICAgICBmbGF0dGVuZWQucHVzaChTdHJpbmcoa2V5KSk7XG4gICAgICAgIGN1cnIgPSBjdXJyLnByZXY7XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWQucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gcmVwZWF0QnJlYWsoaSkge1xuICAgIHJldHVybiByZXBlYXRDaGFyKCdcXG4nLCBpKTtcbn1cbmZ1bmN0aW9uIHJlcGVhdFNwYWNlKGkpIHtcbiAgICByZXR1cm4gcmVwZWF0Q2hhcignICcsIGkpO1xufVxuZnVuY3Rpb24gcmVwZWF0Q2hhcihjaGFyLCB0bykge1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bzsgaSsrKSB7XG4gICAgICAgIHRleHQgKz0gY2hhcjtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG59XG5jb25zdCBLaW5kc1RvQmVSZW1vdmVkID0gW1xuICAgIGVudW1fMS5Ub2tlbktpbmQuRkxPQVQsXG4gICAgZW51bV8xLlRva2VuS2luZC5TVFJJTkcsXG4gICAgZW51bV8xLlRva2VuS2luZC5JTlQsXG4gICAgZW51bV8xLlRva2VuS2luZC5CTE9DS19TVFJJTkcsXG5dO1xuZnVuY3Rpb24gZ2V0U291cmNlRnJvbUxvY2F0aW9uKGxvYywgYWxsb3dWYWx1ZXMgPSBmYWxzZSwgaW5wdXRTdGFydCwgaW5wdXRFbmQpIHtcbiAgICBsZXQgc291cmNlID0gJyc7XG4gICAgaWYgKGxvYz8uc3RhcnRUb2tlbikge1xuICAgICAgICBjb25zdCBzdGFydCA9IHR5cGVvZiBpbnB1dFN0YXJ0ID09PSAnbnVtYmVyJyA/IGlucHV0U3RhcnQgOiBsb2Muc3RhcnQ7XG4gICAgICAgIGNvbnN0IGVuZCA9IHR5cGVvZiBpbnB1dEVuZCA9PT0gJ251bWJlcicgPyBpbnB1dEVuZCA6IGxvYy5lbmQ7XG4gICAgICAgIGxldCBuZXh0ID0gbG9jLnN0YXJ0VG9rZW4ubmV4dDtcbiAgICAgICAgbGV0IHByZXZpb3VzTGluZSA9IDE7XG4gICAgICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICAgICAgICBpZiAobmV4dC5zdGFydCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmUgPSBuZXh0Py5saW5lO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHQuZW5kID4gZW5kKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmUgPSBuZXh0Py5saW5lO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbmV4dC52YWx1ZSB8fCBuZXh0LmtpbmQ7XG4gICAgICAgICAgICBsZXQgc3BhY2UgPSAnJztcbiAgICAgICAgICAgIGlmICghYWxsb3dWYWx1ZXMgJiYgS2luZHNUb0JlUmVtb3ZlZC5pbmRleE9mKG5leHQua2luZCkgPj0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHZhbHVlID0gcmVwZWF0Q2hhcignKicsIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAnKic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dC5raW5kID09PSBlbnVtXzEuVG9rZW5LaW5kLlNUUklORykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dC5raW5kID09PSBlbnVtXzEuVG9rZW5LaW5kLkVPRikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dC5saW5lID4gcHJldmlvdXNMaW5lKSB7XG4gICAgICAgICAgICAgICAgc291cmNlICs9IHJlcGVhdEJyZWFrKG5leHQubGluZSAtIHByZXZpb3VzTGluZSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNMaW5lID0gbmV4dC5saW5lO1xuICAgICAgICAgICAgICAgIHNwYWNlID0gcmVwZWF0U3BhY2UobmV4dC5jb2x1bW4gLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0LmxpbmUgPT09IG5leHQucHJldj8ubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBzcGFjZSA9IHJlcGVhdFNwYWNlKG5leHQuc3RhcnQgLSAobmV4dC5wcmV2Py5lbmQgfHwgMCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvdXJjZSArPSBzcGFjZSArIHZhbHVlO1xuICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG59XG5leHBvcnRzLmdldFNvdXJjZUZyb21Mb2NhdGlvbiA9IGdldFNvdXJjZUZyb21Mb2NhdGlvbjtcbmZ1bmN0aW9uIHdyYXBGaWVsZHModHlwZSwgdHJhY2VyLCBnZXRDb25maWcpIHtcbiAgICBpZiAoIXR5cGUgfHwgdHlwZVtzeW1ib2xzXzEuT1RFTF9QQVRDSEVEX1NZTUJPTF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSB0eXBlLmdldEZpZWxkcygpO1xuICAgIHR5cGVbc3ltYm9sc18xLk9URUxfUEFUQ0hFRF9TWU1CT0xdID0gdHJ1ZTtcbiAgICBPYmplY3Qua2V5cyhmaWVsZHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNba2V5XTtcbiAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5yZXNvbHZlKSB7XG4gICAgICAgICAgICBmaWVsZC5yZXNvbHZlID0gd3JhcEZpZWxkUmVzb2x2ZXIodHJhY2VyLCBnZXRDb25maWcsIGZpZWxkLnJlc29sdmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjb25zdCB1bndyYXBwZWRUeXBlcyA9IHVud3JhcFR5cGUoZmllbGQudHlwZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHVud3JhcHBlZFR5cGUgb2YgdW53cmFwcGVkVHlwZXMpIHtcbiAgICAgICAgICAgICAgICB3cmFwRmllbGRzKHVud3JhcHBlZFR5cGUsIHRyYWNlciwgZ2V0Q29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy53cmFwRmllbGRzID0gd3JhcEZpZWxkcztcbmZ1bmN0aW9uIHVud3JhcFR5cGUodHlwZSkge1xuICAgIC8vIHVud3JhcCB3cmFwcGluZyB0eXBlcyAobm9uLW51bGxhYmxlIGFuZCBsaXN0IHR5cGVzKVxuICAgIGlmICgnb2ZUeXBlJyBpbiB0eXBlKSB7XG4gICAgICAgIHJldHVybiB1bndyYXBUeXBlKHR5cGUub2ZUeXBlKTtcbiAgICB9XG4gICAgLy8gdW53cmFwIHVuaW9uIHR5cGVzXG4gICAgaWYgKGlzR3JhcGhRTFVuaW9uVHlwZSh0eXBlKSkge1xuICAgICAgICByZXR1cm4gdHlwZS5nZXRUeXBlcygpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gb2JqZWN0IHR5cGVzXG4gICAgaWYgKGlzR3JhcGhRTE9iamVjdFR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIFt0eXBlXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuZnVuY3Rpb24gaXNHcmFwaFFMVW5pb25UeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gJ2dldFR5cGVzJyBpbiB0eXBlICYmIHR5cGVvZiB0eXBlLmdldFR5cGVzID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNHcmFwaFFMT2JqZWN0VHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuICdnZXRGaWVsZHMnIGluIHR5cGUgJiYgdHlwZW9mIHR5cGUuZ2V0RmllbGRzID09PSAnZnVuY3Rpb24nO1xufVxuY29uc3QgaGFuZGxlUmVzb2x2ZVNwYW5FcnJvciA9IChyZXNvbHZlU3BhbiwgZXJyLCBzaG91bGRFbmRTcGFuKSA9PiB7XG4gICAgaWYgKCFzaG91bGRFbmRTcGFuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVzb2x2ZVNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgcmVzb2x2ZVNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogYXBpLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICB9KTtcbiAgICByZXNvbHZlU3Bhbi5lbmQoKTtcbn07XG5jb25zdCBoYW5kbGVSZXNvbHZlU3BhblN1Y2Nlc3MgPSAocmVzb2x2ZVNwYW4sIHNob3VsZEVuZFNwYW4pID0+IHtcbiAgICBpZiAoIXNob3VsZEVuZFNwYW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNvbHZlU3Bhbi5lbmQoKTtcbn07XG5mdW5jdGlvbiB3cmFwRmllbGRSZXNvbHZlcih0cmFjZXIsIGdldENvbmZpZywgZmllbGRSZXNvbHZlciwgaXNEZWZhdWx0UmVzb2x2ZXIgPSBmYWxzZSkge1xuICAgIGlmICh3cmFwcGVkRmllbGRSZXNvbHZlcltzeW1ib2xzXzEuT1RFTF9QQVRDSEVEX1NZTUJPTF0gfHxcbiAgICAgICAgdHlwZW9mIGZpZWxkUmVzb2x2ZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkUmVzb2x2ZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyYXBwZWRGaWVsZFJlc29sdmVyKHNvdXJjZSwgYXJncywgY29udGV4dFZhbHVlLCBpbmZvKSB7XG4gICAgICAgIGlmICghZmllbGRSZXNvbHZlcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICAgICAgLy8gZm9sbG93cyB3aGF0IGdyYXBocWwgaXMgZG9pbmcgdG8gZGVjaWRlIGlmIHRoaXMgaXMgYSB0cml2aWFsIHJlc29sdmVyXG4gICAgICAgIC8vIGZvciB3aGljaCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHJlc29sdmUgc3BhblxuICAgICAgICBpZiAoY29uZmlnLmlnbm9yZVRyaXZpYWxSZXNvbHZlU3BhbnMgJiZcbiAgICAgICAgICAgIGlzRGVmYXVsdFJlc29sdmVyICYmXG4gICAgICAgICAgICAoaXNPYmplY3RMaWtlKHNvdXJjZSkgfHwgdHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gc291cmNlW2luZm8uZmllbGROYW1lXTtcbiAgICAgICAgICAgIC8vIGEgZnVuY3Rpb24gZXhlY3V0aW9uIGlzIG5vdCB0cml2aWFsIGFuZCBzaG91bGQgYmUgcmVjb3JkZXIuXG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSB3aGljaCBpcyBub3QgYSBmdW5jdGlvbiBpcyBqdXN0IGEgdmFsdWUgYW5kIHdlIGRvbid0IHdhbnQgYSBcInJlc29sdmVcIiBzcGFuIGZvciBpdFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZFJlc29sdmVyLmNhbGwodGhpcywgc291cmNlLCBhcmdzLCBjb250ZXh0VmFsdWUsIGluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY29udGV4dFZhbHVlW3N5bWJvbHNfMS5PVEVMX0dSQVBIUUxfREFUQV9TWU1CT0xdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRSZXNvbHZlci5jYWxsKHRoaXMsIHNvdXJjZSwgYXJncywgY29udGV4dFZhbHVlLCBpbmZvKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoID0gcGF0aFRvQXJyYXkoY29uZmlnLm1lcmdlSXRlbXMsIGluZm8gJiYgaW5mby5wYXRoKTtcbiAgICAgICAgY29uc3QgZGVwdGggPSBwYXRoLmZpbHRlcigoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKS5sZW5ndGg7XG4gICAgICAgIGxldCBmaWVsZDtcbiAgICAgICAgbGV0IHNob3VsZEVuZFNwYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbmZpZy5kZXB0aCA+PSAwICYmIGNvbmZpZy5kZXB0aCA8IGRlcHRoKSB7XG4gICAgICAgICAgICBmaWVsZCA9IGdldFBhcmVudEZpZWxkKGNvbnRleHRWYWx1ZSwgcGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdGaWVsZCA9IGNyZWF0ZUZpZWxkSWZOb3RFeGlzdHModHJhY2VyLCBnZXRDb25maWcsIGNvbnRleHRWYWx1ZSwgaW5mbywgcGF0aCk7XG4gICAgICAgICAgICBmaWVsZCA9IG5ld0ZpZWxkLmZpZWxkO1xuICAgICAgICAgICAgc2hvdWxkRW5kU3BhbiA9IG5ld0ZpZWxkLnNwYW5BZGRlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aChhcGkudHJhY2Uuc2V0U3BhbihhcGkuY29udGV4dC5hY3RpdmUoKSwgZmllbGQuc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gZmllbGRSZXNvbHZlci5jYWxsKHRoaXMsIHNvdXJjZSwgYXJncywgY29udGV4dFZhbHVlLCBpbmZvKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGV4cG9ydHMuaXNQcm9taXNlKShyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMudGhlbigocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmVzb2x2ZVNwYW5TdWNjZXNzKGZpZWxkLnNwYW4sIHNob3VsZEVuZFNwYW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlc29sdmVTcGFuRXJyb3IoZmllbGQuc3BhbiwgZXJyLCBzaG91bGRFbmRTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVSZXNvbHZlU3BhblN1Y2Nlc3MoZmllbGQuc3Bhbiwgc2hvdWxkRW5kU3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVJlc29sdmVTcGFuRXJyb3IoZmllbGQuc3BhbiwgZXJyLCBzaG91bGRFbmRTcGFuKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3cmFwcGVkRmllbGRSZXNvbHZlcltzeW1ib2xzXzEuT1RFTF9QQVRDSEVEX1NZTUJPTF0gPSB0cnVlO1xuICAgIHJldHVybiB3cmFwcGVkRmllbGRSZXNvbHZlcjtcbn1cbmV4cG9ydHMud3JhcEZpZWxkUmVzb2x2ZXIgPSB3cmFwRmllbGRSZXNvbHZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41NS4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdyYXBoUUxJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBlbnVtXzEgPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuY29uc3Qgc3ltYm9sc18xID0gcmVxdWlyZShcIi4vc3ltYm9sc1wiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge1xuICAgIG1lcmdlSXRlbXM6IGZhbHNlLFxuICAgIGRlcHRoOiAtMSxcbiAgICBhbGxvd1ZhbHVlczogZmFsc2UsXG4gICAgaWdub3JlUmVzb2x2ZVNwYW5zOiBmYWxzZSxcbn07XG5jb25zdCBzdXBwb3J0ZWRWZXJzaW9ucyA9IFsnPj0xNC4wLjAgPDE3J107XG5jbGFzcyBHcmFwaFFMSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmNvbmZpZyB9KTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdncmFwaHFsJywgc3VwcG9ydGVkVmVyc2lvbnMpO1xuICAgICAgICBtb2R1bGUuZmlsZXMucHVzaCh0aGlzLl9hZGRQYXRjaGluZ0V4ZWN1dGUoKSk7XG4gICAgICAgIG1vZHVsZS5maWxlcy5wdXNoKHRoaXMuX2FkZFBhdGNoaW5nUGFyc2VyKCkpO1xuICAgICAgICBtb2R1bGUuZmlsZXMucHVzaCh0aGlzLl9hZGRQYXRjaGluZ1ZhbGlkYXRlKCkpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBfYWRkUGF0Y2hpbmdFeGVjdXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdncmFwaHFsL2V4ZWN1dGlvbi9leGVjdXRlLmpzJywgc3VwcG9ydGVkVmVyc2lvbnMsIFxuICAgICAgICAvLyBjYW5ub3QgbWFrZSBpdCB3b3JrIHdpdGggYXBwcm9wcmlhdGUgdHlwZSBhcyBleGVjdXRlIGZ1bmN0aW9uIGhhcyAyXG4gICAgICAgIC8vdHlwZXMgYW5kL2Nhbm5vdCBpbXBvcnQgZnVuY3Rpb24gYnV0IG9ubHkgdHlwZXNcbiAgICAgICAgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmV4ZWN1dGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdleGVjdXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdleGVjdXRlJywgdGhpcy5fcGF0Y2hFeGVjdXRlKG1vZHVsZUV4cG9ydHMuZGVmYXVsdEZpZWxkUmVzb2x2ZXIpKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdleGVjdXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkUGF0Y2hpbmdQYXJzZXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ2dyYXBocWwvbGFuZ3VhZ2UvcGFyc2VyLmpzJywgc3VwcG9ydGVkVmVyc2lvbnMsIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wYXJzZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3BhcnNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdwYXJzZScsIHRoaXMuX3BhdGNoUGFyc2UoKSk7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSwgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdwYXJzZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZFBhdGNoaW5nVmFsaWRhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ2dyYXBocWwvdmFsaWRhdGlvbi92YWxpZGF0ZS5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnZhbGlkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAndmFsaWRhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3ZhbGlkYXRlJywgdGhpcy5fcGF0Y2hWYWxpZGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICd2YWxpZGF0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3BhdGNoRXhlY3V0ZShkZWZhdWx0RmllbGRSZXNvbHZlZCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXhlY3V0ZShvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoRXhlY3V0ZSgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvY2Vzc2VkQXJncztcbiAgICAgICAgICAgICAgICAvLyBjYXNlIHdoZW4gYXBvbGxvIHNlcnZlciBpcyB1c2VkIGZvciBleGFtcGxlXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBcmdzID0gaW5zdHJ1bWVudGF0aW9uLl93cmFwRXhlY3V0ZUFyZ3MoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSwgYXJnc1s2XSwgYXJnc1s3XSwgZGVmYXVsdEZpZWxkUmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkQXJncyA9IGluc3RydW1lbnRhdGlvbi5fd3JhcEV4ZWN1dGVBcmdzKGFyZ3Muc2NoZW1hLCBhcmdzLmRvY3VtZW50LCBhcmdzLnJvb3RWYWx1ZSwgYXJncy5jb250ZXh0VmFsdWUsIGFyZ3MudmFyaWFibGVWYWx1ZXMsIGFyZ3Mub3BlcmF0aW9uTmFtZSwgYXJncy5maWVsZFJlc29sdmVyLCBhcmdzLnR5cGVSZXNvbHZlciwgZGVmYXVsdEZpZWxkUmVzb2x2ZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSAoMCwgdXRpbHNfMS5nZXRPcGVyYXRpb24pKHByb2Nlc3NlZEFyZ3MuZG9jdW1lbnQsIHByb2Nlc3NlZEFyZ3Mub3BlcmF0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi5fY3JlYXRlRXhlY3V0ZVNwYW4ob3BlcmF0aW9uLCBwcm9jZXNzZWRBcmdzKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRBcmdzLmNvbnRleHRWYWx1ZVtzeW1ib2xzXzEuT1RFTF9HUkFQSFFMX0RBVEFfU1lNQk9MXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBwcm9jZXNzZWRBcmdzLmRvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByb2Nlc3NlZEFyZ3MuZG9jdW1lbnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBcmdzLmRvY3VtZW50W3N5bWJvbHNfMS5PVEVMX0dSQVBIUUxfREFUQV9TWU1CT0xdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiB7fSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkQXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICB9LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5faGFuZGxlRXhlY3V0aW9uUmVzdWx0KHNwYW4sIGVyciwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfaGFuZGxlRXhlY3V0aW9uUmVzdWx0KHNwYW4sIGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCB8fCBlcnIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsc18xLmVuZFNwYW4pKHNwYW4sIGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzUHJvbWlzZSkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmVzdWx0LnRoZW4ocmVzdWx0RGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcucmVzcG9uc2VIb29rICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLmVuZFNwYW4pKHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVSZXNwb25zZUhvb2soc3BhbiwgcmVzdWx0RGF0YSk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3Bhbikoc3BhbiwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5yZXNwb25zZUhvb2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAoMCwgdXRpbHNfMS5lbmRTcGFuKShzcGFuKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9leGVjdXRlUmVzcG9uc2VIb29rKHNwYW4sIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2V4ZWN1dGVSZXNwb25zZUhvb2soc3BhbiwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2VIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlSG9vaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICByZXNwb25zZUhvb2soc3BhbiwgcmVzdWx0KTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCdFcnJvciBydW5uaW5nIHJlc3BvbnNlIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3Bhbikoc3BhbiwgdW5kZWZpbmVkKTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICAgIF9wYXRjaFBhcnNlKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2Uob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaFBhcnNlKHNvdXJjZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24uX3BhcnNlKHRoaXMsIG9yaWdpbmFsLCBzb3VyY2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhdGNoVmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB2YWxpZGF0ZShvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoVmFsaWRhdGUoc2NoZW1hLCBkb2N1bWVudEFTVCwgcnVsZXMsIG9wdGlvbnMsIHR5cGVJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi5fdmFsaWRhdGUodGhpcywgb3JpZ2luYWwsIHNjaGVtYSwgZG9jdW1lbnRBU1QsIHJ1bGVzLCB0eXBlSW5mbywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGFyc2Uob2JqLCBvcmlnaW5hbCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oZW51bV8xLlNwYW5OYW1lcy5QQVJTRSk7XG4gICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwob2JqLCBzb3VyY2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSAoMCwgdXRpbHNfMS5nZXRPcGVyYXRpb24pKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnVwZGF0ZU5hbWUoZW51bV8xLlNwYW5OYW1lcy5TQ0hFTUFfUEFSU0UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5sb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLmFkZFNwYW5Tb3VyY2UpKHNwYW4sIHJlc3VsdC5sb2MsIGNvbmZpZy5hbGxvd1ZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3Bhbikoc3BhbiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3ZhbGlkYXRlKG9iaiwgb3JpZ2luYWwsIHNjaGVtYSwgZG9jdW1lbnRBU1QsIHJ1bGVzLCB0eXBlSW5mbywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGVudW1fMS5TcGFuTmFtZXMuVkFMSURBVEUsIHt9KTtcbiAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbChvYmosIHNjaGVtYSwgZG9jdW1lbnRBU1QsIHJ1bGVzLCBvcHRpb25zLCB0eXBlSW5mbyk7XG4gICAgICAgICAgICB9LCAoZXJyLCBlcnJvcnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50QVNULmxvYykge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnVwZGF0ZU5hbWUoZW51bV8xLlNwYW5OYW1lcy5TQ0hFTUFfVkFMSURBVEUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5FUlJPUl9WQUxJREFUSU9OX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeShlcnJvcnMpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3Bhbikoc3BhbiwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2NyZWF0ZUV4ZWN1dGVTcGFuKG9wZXJhdGlvbiwgcHJvY2Vzc2VkQXJncykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGVudW1fMS5TcGFuTmFtZXMuRVhFQ1VURSwge30pO1xuICAgICAgICBpZiAob3BlcmF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZXJhdGlvbjogb3BlcmF0aW9uVHlwZSwgbmFtZTogbmFtZU5vZGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuT1BFUkFUSU9OX1RZUEUsIG9wZXJhdGlvblR5cGUpO1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uTmFtZSA9IG5hbWVOb2RlPy52YWx1ZTtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3JlZmVyZW5jZS9zcGVjaWZpY2F0aW9uL3RyYWNlL3NlbWFudGljX2NvbnZlbnRpb25zL2luc3RydW1lbnRhdGlvbi9ncmFwaHFsL1xuICAgICAgICAgICAgLy8gPiBUaGUgc3BhbiBuYW1lIE1VU1QgYmUgb2YgdGhlIGZvcm1hdCA8Z3JhcGhxbC5vcGVyYXRpb24udHlwZT4gPGdyYXBocWwub3BlcmF0aW9uLm5hbWU+IHByb3ZpZGVkIHRoYXQgZ3JhcGhxbC5vcGVyYXRpb24udHlwZSBhbmQgZ3JhcGhxbC5vcGVyYXRpb24ubmFtZSBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgLy8gPiBJZiBncmFwaHFsLm9wZXJhdGlvbi5uYW1lIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBzcGFuIFNIT1VMRCBiZSBuYW1lZCA8Z3JhcGhxbC5vcGVyYXRpb24udHlwZT4uXG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuT1BFUkFUSU9OX05BTUUsIG9wZXJhdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgIHNwYW4udXBkYXRlTmFtZShgJHtvcGVyYXRpb25UeXBlfSAke29wZXJhdGlvbk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGFuLnVwZGF0ZU5hbWUob3BlcmF0aW9uVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgb3BlcmF0aW9uTmFtZSA9ICcgJztcbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWRBcmdzLm9wZXJhdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25OYW1lID0gYCBcIiR7cHJvY2Vzc2VkQXJncy5vcGVyYXRpb25OYW1lfVwiIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcGVyYXRpb25OYW1lID0gaW50ZXJuYWxfdHlwZXNfMS5PUEVSQVRJT05fTk9UX1NVUFBPUlRFRC5yZXBsYWNlKCckb3BlcmF0aW9uTmFtZSQnLCBvcGVyYXRpb25OYW1lKTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuT1BFUkFUSU9OX05BTUUsIG9wZXJhdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzZWRBcmdzLmRvY3VtZW50Py5sb2MpIHtcbiAgICAgICAgICAgICgwLCB1dGlsc18xLmFkZFNwYW5Tb3VyY2UpKHNwYW4sIHByb2Nlc3NlZEFyZ3MuZG9jdW1lbnQubG9jLCBjb25maWcuYWxsb3dWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzZWRBcmdzLnZhcmlhYmxlVmFsdWVzICYmIGNvbmZpZy5hbGxvd1ZhbHVlcykge1xuICAgICAgICAgICAgKDAsIHV0aWxzXzEuYWRkSW5wdXRWYXJpYWJsZUF0dHJpYnV0ZXMpKHNwYW4sIHByb2Nlc3NlZEFyZ3MudmFyaWFibGVWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICBfd3JhcEV4ZWN1dGVBcmdzKHNjaGVtYSwgZG9jdW1lbnQsIHJvb3RWYWx1ZSwgY29udGV4dFZhbHVlLCB2YXJpYWJsZVZhbHVlcywgb3BlcmF0aW9uTmFtZSwgZmllbGRSZXNvbHZlciwgdHlwZVJlc29sdmVyLCBkZWZhdWx0RmllbGRSZXNvbHZlZCkge1xuICAgICAgICBpZiAoIWNvbnRleHRWYWx1ZSkge1xuICAgICAgICAgICAgY29udGV4dFZhbHVlID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHRWYWx1ZVtzeW1ib2xzXzEuT1RFTF9HUkFQSFFMX0RBVEFfU1lNQk9MXSB8fFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWcoKS5pZ25vcmVSZXNvbHZlU3BhbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIHJvb3RWYWx1ZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0VmFsdWUsXG4gICAgICAgICAgICAgICAgdmFyaWFibGVWYWx1ZXMsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBmaWVsZFJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHR5cGVSZXNvbHZlcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNVc2luZ0RlZmF1bHRSZXNvbHZlciA9IGZpZWxkUmVzb2x2ZXIgPT0gbnVsbDtcbiAgICAgICAgLy8gZm9sbG93cyBncmFwaHFsIGltcGxlbWVudGF0aW9uIGhlcmU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsL2dyYXBocWwtanMvYmxvYi8wYjdkYWVkOTgxMTczMTM2MmM3MTkwMGUxMmU1ZWEwZDFlY2M3ZjFmL3NyYy9leGVjdXRpb24vZXhlY3V0ZS50cyNMNDk0XG4gICAgICAgIGNvbnN0IGZpZWxkUmVzb2x2ZXJGb3JFeGVjdXRlID0gZmllbGRSZXNvbHZlciA/PyBkZWZhdWx0RmllbGRSZXNvbHZlZDtcbiAgICAgICAgZmllbGRSZXNvbHZlciA9ICgwLCB1dGlsc18xLndyYXBGaWVsZFJlc29sdmVyKSh0aGlzLnRyYWNlciwgKCkgPT4gdGhpcy5nZXRDb25maWcoKSwgZmllbGRSZXNvbHZlckZvckV4ZWN1dGUsIGlzVXNpbmdEZWZhdWx0UmVzb2x2ZXIpO1xuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICAoMCwgdXRpbHNfMS53cmFwRmllbGRzKShzY2hlbWEuZ2V0UXVlcnlUeXBlKCksIHRoaXMudHJhY2VyLCAoKSA9PiB0aGlzLmdldENvbmZpZygpKTtcbiAgICAgICAgICAgICgwLCB1dGlsc18xLndyYXBGaWVsZHMpKHNjaGVtYS5nZXRNdXRhdGlvblR5cGUoKSwgdGhpcy50cmFjZXIsICgpID0+IHRoaXMuZ2V0Q29uZmlnKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIHJvb3RWYWx1ZSxcbiAgICAgICAgICAgIGNvbnRleHRWYWx1ZSxcbiAgICAgICAgICAgIHZhcmlhYmxlVmFsdWVzLFxuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZSxcbiAgICAgICAgICAgIGZpZWxkUmVzb2x2ZXIsXG4gICAgICAgICAgICB0eXBlUmVzb2x2ZXIsXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5HcmFwaFFMSW5zdHJ1bWVudGF0aW9uID0gR3JhcGhRTEluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR3JhcGhRTEluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdyYXBoUUxJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkdyYXBoUUxJbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfT0sgPSBleHBvcnRzLkFUVFJfUlBDX0dSUENfU1RBVFVTX0NPREUgPSBleHBvcnRzLkFUVFJfUlBDX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9SUENfU0VSVklDRSA9IGV4cG9ydHMuQVRUUl9SUENfTUVUSE9EID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSAobG9naWNhbCkgbWV0aG9kIGJlaW5nIGNhbGxlZCwgbXVzdCBiZSBlcXVhbCB0byB0aGUgJG1ldGhvZCBwYXJ0IGluIHRoZSBzcGFuIG5hbWUuXG4gKlxuICogQGV4YW1wbGUgXCJleGFtcGxlTWV0aG9kXCJcbiAqXG4gKiBAbm90ZSBUaGlzIGlzIHRoZSBsb2dpY2FsIG5hbWUgb2YgdGhlIG1ldGhvZCBmcm9tIHRoZSBSUEMgaW50ZXJmYWNlIHBlcnNwZWN0aXZlLCB3aGljaCBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgYW55IGltcGxlbWVudGluZyBtZXRob2QvZnVuY3Rpb24uIFRoZSBgY29kZS5mdW5jdGlvbi5uYW1lYCBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gc3RvcmUgdGhlIGxhdHRlciAoZS5nLiwgbWV0aG9kIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUsIFJQQyBjbGllbnQgc3R1YiBtZXRob2Qgb24gdGhlIGNsaWVudCBzaWRlKS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9SUENfTUVUSE9EID0gJ3JwYy5tZXRob2QnO1xuLyoqXG4gKiBUaGUgZnVsbCAobG9naWNhbCkgbmFtZSBvZiB0aGUgc2VydmljZSBiZWluZyBjYWxsZWQsIGluY2x1ZGluZyBpdHMgcGFja2FnZSBuYW1lLCBpZiBhcHBsaWNhYmxlLlxuICpcbiAqIEBleGFtcGxlIFwibXlzZXJ2aWNlLkVjaG9TZXJ2aWNlXCJcbiAqXG4gKiBAbm90ZSBUaGlzIGlzIHRoZSBsb2dpY2FsIG5hbWUgb2YgdGhlIHNlcnZpY2UgZnJvbSB0aGUgUlBDIGludGVyZmFjZSBwZXJzcGVjdGl2ZSwgd2hpY2ggY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIGFueSBpbXBsZW1lbnRpbmcgY2xhc3MuIFRoZSBgY29kZS5uYW1lc3BhY2VgIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBzdG9yZSB0aGUgbGF0dGVyIChkZXNwaXRlIHRoZSBhdHRyaWJ1dGUgbmFtZSwgaXQgbWF5IGluY2x1ZGUgYSBjbGFzcyBuYW1lOyBlLmcuLCBjbGFzcyB3aXRoIG1ldGhvZCBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGNhbGwgb24gdGhlIHNlcnZlciBzaWRlLCBSUEMgY2xpZW50IHN0dWIgY2xhc3Mgb24gdGhlIGNsaWVudCBzaWRlKS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9SUENfU0VSVklDRSA9ICdycGMuc2VydmljZSc7XG4vKipcbiAqIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSByZW1vdGluZyBzeXN0ZW0uIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHdlbGwta25vd24gaWRlbnRpZmllcnMuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUlBDX1NZU1RFTSA9ICdycGMuc3lzdGVtJztcbi8qKlxuICogVGhlIFtudW1lcmljIHN0YXR1cyBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvdjEuMzMuMi9kb2Mvc3RhdHVzY29kZXMubWQpIG9mIHRoZSBnUlBDIHJlcXVlc3QuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUlBDX0dSUENfU1RBVFVTX0NPREUgPSAncnBjLmdycGMuc3RhdHVzX2NvZGUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIDAgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9SUENfR1JQQ19TVEFUVVNfQ09ERX0uXG4gKi9cbmV4cG9ydHMuUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfT0sgPSAwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWV0YWRhdGFDYXB0dXJlID0gZXhwb3J0cy5fZXh0cmFjdE1ldGhvZEFuZFNlcnZpY2UgPSBleHBvcnRzLl9tZXRob2RJc0lnbm9yZWQgPSBleHBvcnRzLl9ncnBjU3RhdHVzQ29kZVRvU3BhblN0YXR1cyA9IGV4cG9ydHMuX2dycGNTdGF0dXNDb2RlVG9PcGVuVGVsZW1ldHJ5U3RhdHVzQ29kZSA9IGV4cG9ydHMuVVJJX1JFR0VYID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLy8gZS5nLiwgXCJkbnM6b3RlbC1wcm9kdWN0Y2F0YWxvZ3NlcnZpY2U6ODA4MFwiIG9yIFwib3RlbC1wcm9kdWN0Y2F0YWxvZ3NlcnZpY2U6ODA4MFwiIG9yIFwiMTI3LjAuMC4xOjgwODBcIlxuZXhwb3J0cy5VUklfUkVHRVggPSAvKD86KFtBLVphLXowLTkrLi1dKyk6KD86XFwvXFwvKT8pPyg/PG5hbWU+W0EtWmEtejAtOSsuLV0rKTooPzxwb3J0PlswLTkrLi1dKykkLztcbi8qKlxuICogQ29udmVydCBhIGdycGMgc3RhdHVzIGNvZGUgdG8gYW4gb3BlbnRlbGVtZXRyeSBTcGFuU3RhdHVzIGNvZGUuXG4gKiBAcGFyYW0gc3RhdHVzXG4gKi9cbmNvbnN0IF9ncnBjU3RhdHVzQ29kZVRvT3BlblRlbGVtZXRyeVN0YXR1c0NvZGUgPSAoc3RhdHVzKSA9PiB7XG4gICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYXBpXzEuU3BhblN0YXR1c0NvZGUuVU5TRVQ7XG4gICAgfVxuICAgIHJldHVybiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUjtcbn07XG5leHBvcnRzLl9ncnBjU3RhdHVzQ29kZVRvT3BlblRlbGVtZXRyeVN0YXR1c0NvZGUgPSBfZ3JwY1N0YXR1c0NvZGVUb09wZW5UZWxlbWV0cnlTdGF0dXNDb2RlO1xuY29uc3QgX2dycGNTdGF0dXNDb2RlVG9TcGFuU3RhdHVzID0gKHN0YXR1cykgPT4ge1xuICAgIHJldHVybiB7IGNvZGU6ICgwLCBleHBvcnRzLl9ncnBjU3RhdHVzQ29kZVRvT3BlblRlbGVtZXRyeVN0YXR1c0NvZGUpKHN0YXR1cykgfTtcbn07XG5leHBvcnRzLl9ncnBjU3RhdHVzQ29kZVRvU3BhblN0YXR1cyA9IF9ncnBjU3RhdHVzQ29kZVRvU3BhblN0YXR1cztcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIG1ldGhvZE5hbWUgbWF0Y2hlcyBwYXR0ZXJuXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kXG4gKiBAcGFyYW0gcGF0dGVybiBNYXRjaCBwYXR0ZXJuXG4gKi9cbmNvbnN0IF9zYXRpc2ZpZXNQYXR0ZXJuID0gKG1ldGhvZE5hbWUsIHBhdHRlcm4pID0+IHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRvTG93ZXJDYXNlKCkgPT09IG1ldGhvZE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1ldGhvZE5hbWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gcGF0dGVybihtZXRob2ROYW1lKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcGx1Z2luIGNvbmZpZ3VyYXRpb25cbiAqIGlnbm9yZXMgdGhlIGdpdmVuIG1ldGhvZC5cbiAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBuYW1lIG9mIHRoZSBtZXRob2RcbiAqIEBwYXJhbSBpZ25vcmVkTWV0aG9kcyBhIGxpc3Qgb2YgbWF0Y2hpbmcgcGF0dGVybnNcbiAqIEBwYXJhbSBvbkV4Y2VwdGlvbiBhbiBlcnJvciBoYW5kbGVyIGZvciBtYXRjaGluZyBleGNlcHRpb25zXG4gKi9cbmNvbnN0IF9tZXRob2RJc0lnbm9yZWQgPSAobWV0aG9kTmFtZSwgaWdub3JlZE1ldGhvZHMpID0+IHtcbiAgICBpZiAoIWlnbm9yZWRNZXRob2RzKSB7XG4gICAgICAgIC8vIE5vIGlnbm9yZWQgZ1JQQyBtZXRob2RzXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGlnbm9yZWRNZXRob2RzKSB7XG4gICAgICAgIGlmIChfc2F0aXNmaWVzUGF0dGVybihtZXRob2ROYW1lLCBwYXR0ZXJuKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydHMuX21ldGhvZElzSWdub3JlZCA9IF9tZXRob2RJc0lnbm9yZWQ7XG4vKipcbiAqIFJldHVybiBtZXRob2QgYW5kIHNlcnZpY2UgdmFsdWVzIGdldHRpbmcgZnJvbSBncnBjIG5hbWUvcGF0aFxuICogQHBhcmFtIG5hbWUgdGhlIGdycGMgbmFtZS9wYXRoXG4gKi9cbmNvbnN0IF9leHRyYWN0TWV0aG9kQW5kU2VydmljZSA9IChuYW1lKSA9PiB7XG4gICAgY29uc3Qgc2VydmljZU1ldGhvZCA9IG5hbWUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNlcnZpY2UgPSBzZXJ2aWNlTWV0aG9kLnNoaWZ0KCkgfHwgJyc7XG4gICAgY29uc3QgbWV0aG9kID0gc2VydmljZU1ldGhvZC5qb2luKCcvJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgbWV0aG9kLFxuICAgIH07XG59O1xuZXhwb3J0cy5fZXh0cmFjdE1ldGhvZEFuZFNlcnZpY2UgPSBfZXh0cmFjdE1ldGhvZEFuZFNlcnZpY2U7XG5mdW5jdGlvbiBtZXRhZGF0YUNhcHR1cmUodHlwZSwgbWV0YWRhdGFUb0FkZCkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRNZXRhZGF0YUF0dHJpYnV0ZXMgPSBuZXcgTWFwKG1ldGFkYXRhVG9BZGQubWFwKHZhbHVlID0+IFtcbiAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csICdfJyksXG4gICAgXSkpO1xuICAgIHJldHVybiAoc3BhbiwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbY2FwdHVyZWRNZXRhZGF0YSwgbm9ybWFsaXplZE1ldGFkYXRhLF0gb2Ygbm9ybWFsaXplZE1ldGFkYXRhQXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFWYWx1ZXMgPSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgIC5nZXQoY2FwdHVyZWRNZXRhZGF0YSlcbiAgICAgICAgICAgICAgICAuZmxhdE1hcCh2YWx1ZSA9PiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRvU3RyaW5nKCkgOiBbXSkpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhVmFsdWVzID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGFWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgcnBjLiR7dHlwZX0ubWV0YWRhdGEuJHtub3JtYWxpemVkTWV0YWRhdGF9YDtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGtleSwgbWV0YWRhdGFWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMubWV0YWRhdGFDYXB0dXJlID0gbWV0YWRhdGFDYXB0dXJlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xuZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHtcbiAgICBHUlBDX0VSUk9SX05BTUU6ICdncnBjLmVycm9yX25hbWUnLFxuICAgIEdSUENfRVJST1JfTUVTU0FHRTogJ2dycGMuZXJyb3JfbWVzc2FnZScsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXR0cmlidXRlTmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNob3VsZE5vdFRyYWNlU2VydmVyQ2FsbCA9IGV4cG9ydHMuaGFuZGxlVW50cmFjZWRTZXJ2ZXJGdW5jdGlvbiA9IGV4cG9ydHMuaGFuZGxlU2VydmVyRnVuY3Rpb24gPSBleHBvcnRzLkNBTExfU1BBTl9FTkRFRCA9IHZvaWQgMDtcbi8qKlxuICogU3ltYm9sIHRvIGluY2x1ZGUgb24gZ3JwYyBjYWxsIGlmIGl0IGhhcyBhbHJlYWR5IGVtaXR0ZWQgYW4gZXJyb3IgZXZlbnQuXG4gKiBncnBjIGV2ZW50cyB0aGF0IGVtaXQgJ2Vycm9yJyB3aWxsIGFsc28gZW1pdCAnZmluaXNoJyBhbmQgc28gb25seSB0aGVcbiAqIGVycm9yIGV2ZW50IHNob3VsZCBiZSBwcm9jZXNzZWQuXG4gKi9cbmNvbnN0IG5vZGVfZXZlbnRzXzEgPSByZXF1aXJlKFwibm9kZTpldmVudHNcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vZW51bXMvQXR0cmlidXRlTmFtZXNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuZXhwb3J0cy5DQUxMX1NQQU5fRU5ERUQgPSBTeW1ib2woJ29wZW50ZWxlbWV0cnkgY2FsbCBzcGFuIGVuZGVkJyk7XG4vKipcbiAqIEhhbmRsZSBwYXRjaGluZyBmb3Igc2VydmVyU3RyZWFtIGFuZCBCaWRpIHR5cGUgc2VydmVyIGhhbmRsZXJzXG4gKi9cbmZ1bmN0aW9uIHNlcnZlclN0cmVhbUFuZEJpZGlIYW5kbGVyKHNwYW4sIGNhbGwsIG9yaWdpbmFsKSB7XG4gICAgbGV0IHNwYW5FbmRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGVuZFNwYW4gPSAoKSA9PiB7XG4gICAgICAgIGlmICghc3BhbkVuZGVkKSB7XG4gICAgICAgICAgICBzcGFuRW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIGNhbGwpO1xuICAgIGNhbGwub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgLy8gQGdycGMvanMgZG9lcyBub3QgZXhwb3NlIGEgd2F5IHRvIGNoZWNrIGlmIHRoaXMgY2FsbCBhbHNvIGVtaXR0ZWQgYW4gZXJyb3IsXG4gICAgICAgIC8vIGUuZy4gY2FsbC5zdGF0dXMuY29kZSAhPT0gMFxuICAgICAgICBpZiAoY2FsbFtleHBvcnRzLkNBTExfU1BBTl9FTkRFRF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIFwiZ3JwYyBjYWxsIGhhZCBhbiBlcnJvclwiIGZsYWdcbiAgICAgICAgY2FsbFtleHBvcnRzLkNBTExfU1BBTl9FTkRFRF0gPSB0cnVlO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5VTlNFVCxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX1JQQ19HUlBDX1NUQVRVU19DT0RFLCBzZW1jb252XzEuUlBDX0dSUENfU1RBVFVTX0NPREVfVkFMVUVfT0spO1xuICAgICAgICBlbmRTcGFuKCk7XG4gICAgfSk7XG4gICAgY2FsbC5vbihub2RlX2V2ZW50c18xLmVycm9yTW9uaXRvciwgKGVycikgPT4ge1xuICAgICAgICBpZiAoY2FsbFtleHBvcnRzLkNBTExfU1BBTl9FTkRFRF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdGhlIFwiZ3JwYyBjYWxsIGhhZCBhbiBlcnJvclwiIGZsYWdcbiAgICAgICAgY2FsbFtleHBvcnRzLkNBTExfU1BBTl9FTkRFRF0gPSB0cnVlO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiAoMCwgdXRpbHNfMS5fZ3JwY1N0YXR1c0NvZGVUb09wZW5UZWxlbWV0cnlTdGF0dXNDb2RlKShlcnIuY29kZSksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5HUlBDX0VSUk9SX05BTUVdOiBlcnIubmFtZSxcbiAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkdSUENfRVJST1JfTUVTU0FHRV06IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19HUlBDX1NUQVRVU19DT0RFXTogZXJyLmNvZGUsXG4gICAgICAgIH0pO1xuICAgICAgICBlbmRTcGFuKCk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgdGhpcyBjYWxsL3NpZ25hdHVyZSDigJMgaXQgd2FzIGluaGVyaXRlZCBmcm9tIHZlcnkgb2xkXG4gICAgLy8gY29kZSBhbmQgdGhlIGB0aGlzOiB7fWAgaXMgaGlnaGx5IHN1c3BpY2lvdXMsIGFuZCBsaWtlbHkgaXNuJ3QgZG9pbmdcbiAgICAvLyBhbnl0aGluZyB1c2VmdWwuIFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBwcmVjaXNlIGNhc3Qgd2UgY2FuIGRvIGhlcmUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHt9LCBjYWxsKTtcbn1cbi8qKlxuICogSGFuZGxlIHBhdGNoaW5nIGZvciBjbGllbnRTdHJlYW0gYW5kIHVuYXJ5IHR5cGUgc2VydmVyIGhhbmRsZXJzXG4gKi9cbmZ1bmN0aW9uIGNsaWVudFN0cmVhbUFuZFVuYXJ5SGFuZGxlcihzcGFuLCBjYWxsLCBjYWxsYmFjaywgb3JpZ2luYWwpIHtcbiAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSAoZXJyLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICgwLCB1dGlsc18xLl9ncnBjU3RhdHVzQ29kZVRvT3BlblRlbGVtZXRyeVN0YXR1c0NvZGUpKGVyci5jb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfUlBDX0dSUENfU1RBVFVTX0NPREUsIGVyci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuR1JQQ19FUlJPUl9OQU1FXTogZXJyLm5hbWUsXG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuR1JQQ19FUlJPUl9NRVNTQUdFXTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuVU5TRVQgfSk7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9SUENfR1JQQ19TVEFUVVNfQ09ERSwgc2VtY29udl8xLlJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX09LKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBhcGlfMS5jb250ZXh0LmJpbmQoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgY2FsbCk7XG4gICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgdGhpcyBjYWxsL3NpZ25hdHVyZSDigJMgaXQgd2FzIGluaGVyaXRlZCBmcm9tIHZlcnkgb2xkXG4gICAgLy8gY29kZSBhbmQgdGhlIGB0aGlzOiB7fWAgaXMgaGlnaGx5IHN1c3BpY2lvdXMsIGFuZCBsaWtlbHkgaXNuJ3QgZG9pbmdcbiAgICAvLyBhbnl0aGluZyB1c2VmdWwuIFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBwcmVjaXNlIGNhc3Qgd2UgY2FuIGRvIGhlcmUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHt9LCBjYWxsLCBwYXRjaGVkQ2FsbGJhY2spO1xufVxuLyoqXG4gKiBQYXRjaCBjYWxsYmFjayBvciBFdmVudEVtaXR0ZXIgcHJvdmlkZWQgYnkgYG9yaWdpbmFsRnVuY2AgYW5kIHNldCBhcHByb3ByaWF0ZSBgc3BhbmBcbiAqIHByb3BlcnRpZXMgYmFzZWQgb24gaXRzIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU2VydmVyRnVuY3Rpb24oc3BhbiwgdHlwZSwgb3JpZ2luYWxGdW5jLCBjYWxsLCBjYWxsYmFjaykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICd1bmFyeSc6XG4gICAgICAgIGNhc2UgJ2NsaWVudFN0cmVhbSc6XG4gICAgICAgIGNhc2UgJ2NsaWVudF9zdHJlYW0nOlxuICAgICAgICAgICAgcmV0dXJuIGNsaWVudFN0cmVhbUFuZFVuYXJ5SGFuZGxlcihzcGFuLCBjYWxsLCBjYWxsYmFjaywgb3JpZ2luYWxGdW5jKTtcbiAgICAgICAgY2FzZSAnc2VydmVyU3RyZWFtJzpcbiAgICAgICAgY2FzZSAnc2VydmVyX3N0cmVhbSc6XG4gICAgICAgIGNhc2UgJ2JpZGknOlxuICAgICAgICAgICAgcmV0dXJuIHNlcnZlclN0cmVhbUFuZEJpZGlIYW5kbGVyKHNwYW4sIGNhbGwsIG9yaWdpbmFsRnVuYyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59XG5leHBvcnRzLmhhbmRsZVNlcnZlckZ1bmN0aW9uID0gaGFuZGxlU2VydmVyRnVuY3Rpb247XG4vKipcbiAqIERvZXMgbm90IHBhdGNoIGFueSBjYWxsYmFja3Mgb3IgRXZlbnRFbWl0dGVycyB0byBvbWl0IHRyYWNpbmcgb24gcmVxdWVzdHNcbiAqIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmFjZWQuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVVudHJhY2VkU2VydmVyRnVuY3Rpb24odHlwZSwgb3JpZ2luYWxGdW5jLCBjYWxsLCBjYWxsYmFjaykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICd1bmFyeSc6XG4gICAgICAgIGNhc2UgJ2NsaWVudFN0cmVhbSc6XG4gICAgICAgIGNhc2UgJ2NsaWVudF9zdHJlYW0nOlxuICAgICAgICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgdGhpcyBjYWxsL3NpZ25hdHVyZSDigJMgaXQgd2FzIGluaGVyaXRlZCBmcm9tIHZlcnkgb2xkXG4gICAgICAgICAgICAvLyBjb2RlIGFuZCB0aGUgYHRoaXM6IHt9YCBpcyBoaWdobHkgc3VzcGljaW91cywgYW5kIGxpa2VseSBpc24ndCBkb2luZ1xuICAgICAgICAgICAgLy8gYW55dGhpbmcgdXNlZnVsLiBUaGVyZSBpcyBwcm9iYWJseSBhIG1vcmUgcHJlY2lzZSBjYXN0IHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuYy5jYWxsKHt9LCBjYWxsLCBjYWxsYmFjayk7XG4gICAgICAgIGNhc2UgJ3NlcnZlclN0cmVhbSc6XG4gICAgICAgIGNhc2UgJ3NlcnZlcl9zdHJlYW0nOlxuICAgICAgICBjYXNlICdiaWRpJzpcbiAgICAgICAgICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHRoaXMgY2FsbC9zaWduYXR1cmUg4oCTIGl0IHdhcyBpbmhlcml0ZWQgZnJvbSB2ZXJ5IG9sZFxuICAgICAgICAgICAgLy8gY29kZSBhbmQgdGhlIGB0aGlzOiB7fWAgaXMgaGlnaGx5IHN1c3BpY2lvdXMsIGFuZCBsaWtlbHkgaXNuJ3QgZG9pbmdcbiAgICAgICAgICAgIC8vIGFueXRoaW5nIHVzZWZ1bC4gVGhlcmUgaXMgcHJvYmFibHkgYSBtb3JlIHByZWNpc2UgY2FzdCB3ZSBjYW4gZG8gaGVyZS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmMuY2FsbCh7fSwgY2FsbCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59XG5leHBvcnRzLmhhbmRsZVVudHJhY2VkU2VydmVyRnVuY3Rpb24gPSBoYW5kbGVVbnRyYWNlZFNlcnZlckZ1bmN0aW9uO1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlcnZlciBjYWxsIHNob3VsZCBub3QgYmUgdHJhY2VkLlxuICovXG5mdW5jdGlvbiBzaG91bGROb3RUcmFjZVNlcnZlckNhbGwobWV0aG9kTmFtZSwgaWdub3JlR3JwY01ldGhvZHMpIHtcbiAgICBjb25zdCBwYXJzZWROYW1lID0gbWV0aG9kTmFtZS5zcGxpdCgnLycpO1xuICAgIHJldHVybiAoMCwgdXRpbHNfMS5fbWV0aG9kSXNJZ25vcmVkKShwYXJzZWROYW1lW3BhcnNlZE5hbWUubGVuZ3RoIC0gMV0gfHwgbWV0aG9kTmFtZSwgaWdub3JlR3JwY01ldGhvZHMpO1xufVxuZXhwb3J0cy5zaG91bGROb3RUcmFjZVNlcnZlckNhbGwgPSBzaG91bGROb3RUcmFjZVNlcnZlckNhbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2ZXJVdGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2V0U3BhbkNvbnRleHQgPSBleHBvcnRzLmV4dHJhY3RNZXRhZGF0YU9yU3BsaWNlRGVmYXVsdCA9IGV4cG9ydHMuZXh0cmFjdE1ldGFkYXRhT3JTcGxpY2UgPSBleHBvcnRzLmdldE1ldGFkYXRhSW5kZXggPSBleHBvcnRzLm1ha2VHcnBjQ2xpZW50UmVtb3RlQ2FsbCA9IGV4cG9ydHMucGF0Y2hSZXNwb25zZVN0cmVhbUV2ZW50cyA9IGV4cG9ydHMucGF0Y2hSZXNwb25zZU1ldGFkYXRhRXZlbnQgPSBleHBvcnRzLnBhdGNoZWRDYWxsYmFjayA9IGV4cG9ydHMuZ2V0TWV0aG9kc1RvV3JhcCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG4vKipcbiAqIFBhcnNlIGEgcGFja2FnZSBtZXRob2QgbGlzdCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBtZXRob2RzIHRvIHBhdGNoXG4gKiB3aXRoIGJvdGggcG9zc2libGUgY2FzaW5ncyBlLmcuIFwiVGVzdE1ldGhvZFwiICYgXCJ0ZXN0TWV0aG9kXCJcbiAqL1xuZnVuY3Rpb24gZ2V0TWV0aG9kc1RvV3JhcChjbGllbnQsIG1ldGhvZHMpIHtcbiAgICBjb25zdCBtZXRob2RMaXN0ID0gW107XG4gICAgLy8gRm9yIGEgbWV0aG9kIGRlZmluZWQgaW4gLnByb3RvIGFzIFwiVW5hcnlNZXRob2RcIlxuICAgIE9iamVjdC5lbnRyaWVzKG1ldGhvZHMpLmZvckVhY2goKFtuYW1lLCB7IG9yaWdpbmFsTmFtZSB9XSkgPT4ge1xuICAgICAgICBpZiAoISgwLCB1dGlsc18xLl9tZXRob2RJc0lnbm9yZWQpKG5hbWUsIHRoaXMuZ2V0Q29uZmlnKCkuaWdub3JlR3JwY01ldGhvZHMpKSB7XG4gICAgICAgICAgICBtZXRob2RMaXN0LnB1c2gobmFtZSk7IC8vIGFkZHMgY2FtZWwgY2FzZSBtZXRob2QgbmFtZTogXCJ1bmFyeU1ldGhvZFwiXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxOYW1lICYmXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgICAgIGNsaWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkob3JpZ2luYWxOYW1lKSAmJlxuICAgICAgICAgICAgICAgIG5hbWUgIT09IG9yaWdpbmFsTmFtZSAvLyBkbyBub3QgYWRkIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGFkZHMgb3JpZ2luYWwgbWV0aG9kIG5hbWU6IFwiVW5hcnlNZXRob2RcIixcbiAgICAgICAgICAgICAgICBtZXRob2RMaXN0LnB1c2gob3JpZ2luYWxOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtZXRob2RMaXN0O1xufVxuZXhwb3J0cy5nZXRNZXRob2RzVG9XcmFwID0gZ2V0TWV0aG9kc1RvV3JhcDtcbi8qKlxuICogUGF0Y2hlcyBhIGNhbGxiYWNrIHNvIHRoYXQgdGhlIGN1cnJlbnQgc3BhbiBmb3IgdGhpcyB0cmFjZSBpcyBhbHNvIGVuZGVkXG4gKiB3aGVuIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICovXG5mdW5jdGlvbiBwYXRjaGVkQ2FsbGJhY2soc3BhbiwgY2FsbGJhY2spIHtcbiAgICBjb25zdCB3cmFwcGVkRm4gPSAoZXJyLCByZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoKDAsIHV0aWxzXzEuX2dycGNTdGF0dXNDb2RlVG9TcGFuU3RhdHVzKShlcnIuY29kZSkpO1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX1JQQ19HUlBDX1NUQVRVU19DT0RFLCBlcnIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkdSUENfRVJST1JfTkFNRV06IGVyci5uYW1lLFxuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkdSUENfRVJST1JfTUVTU0FHRV06IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9SUENfR1JQQ19TVEFUVVNfQ09ERSwgc2VtY29udl8xLlJQQ19HUlBDX1NUQVRVU19DT0RFX1ZBTFVFX09LKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlcyk7XG4gICAgfTtcbiAgICByZXR1cm4gYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHdyYXBwZWRGbik7XG59XG5leHBvcnRzLnBhdGNoZWRDYWxsYmFjayA9IHBhdGNoZWRDYWxsYmFjaztcbmZ1bmN0aW9uIHBhdGNoUmVzcG9uc2VNZXRhZGF0YUV2ZW50KHNwYW4sIGNhbGwsIG1ldGFkYXRhQ2FwdHVyZSkge1xuICAgIGNhbGwub24oJ21ldGFkYXRhJywgKHJlc3BvbnNlTWV0YWRhdGEpID0+IHtcbiAgICAgICAgbWV0YWRhdGFDYXB0dXJlLmNsaWVudC5jYXB0dXJlUmVzcG9uc2VNZXRhZGF0YShzcGFuLCByZXNwb25zZU1ldGFkYXRhKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMucGF0Y2hSZXNwb25zZU1ldGFkYXRhRXZlbnQgPSBwYXRjaFJlc3BvbnNlTWV0YWRhdGFFdmVudDtcbmZ1bmN0aW9uIHBhdGNoUmVzcG9uc2VTdHJlYW1FdmVudHMoc3BhbiwgY2FsbCkge1xuICAgIC8vIEJvdGggZXJyb3IgYW5kIHN0YXR1cyBldmVudHMgY2FuIGJlIGVtaXR0ZWRcbiAgICAvLyB0aGUgZmlyc3Qgb25lIGVtaXR0ZWQgc2V0IHNwYW5FbmRlZCB0byB0cnVlXG4gICAgbGV0IHNwYW5FbmRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGVuZFNwYW4gPSAoKSA9PiB7XG4gICAgICAgIGlmICghc3BhbkVuZGVkKSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgc3BhbkVuZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIGNhbGwpO1xuICAgIGNhbGwub24oZXZlbnRzXzEuZXJyb3JNb25pdG9yLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzcGFuRW5kZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiAoMCwgdXRpbHNfMS5fZ3JwY1N0YXR1c0NvZGVUb09wZW5UZWxlbWV0cnlTdGF0dXNDb2RlKShlcnIuY29kZSksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5HUlBDX0VSUk9SX05BTUVdOiBlcnIubmFtZSxcbiAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkdSUENfRVJST1JfTUVTU0FHRV06IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19HUlBDX1NUQVRVU19DT0RFXTogZXJyLmNvZGUsXG4gICAgICAgIH0pO1xuICAgICAgICBlbmRTcGFuKCk7XG4gICAgfSk7XG4gICAgY2FsbC5vbignc3RhdHVzJywgKHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3BhbkVuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoKDAsIHV0aWxzXzEuX2dycGNTdGF0dXNDb2RlVG9TcGFuU3RhdHVzKShzdGF0dXMuY29kZSkpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9SUENfR1JQQ19TVEFUVVNfQ09ERSwgc3RhdHVzLmNvZGUpO1xuICAgICAgICBlbmRTcGFuKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhdGNoUmVzcG9uc2VTdHJlYW1FdmVudHMgPSBwYXRjaFJlc3BvbnNlU3RyZWFtRXZlbnRzO1xuLyoqXG4gKiBFeGVjdXRlIGdycGMgY2xpZW50IGNhbGwuIEFwcGx5IGNvbXBsZXRpb24gc3BhbiBwcm9wZXJ0aWVzIGFuZCBlbmQgdGhlXG4gKiBzcGFuIG9uIGNhbGxiYWNrIG9yIHJlY2VpdmluZyBhbiBlbWl0dGVkIGV2ZW50LlxuICovXG5mdW5jdGlvbiBtYWtlR3JwY0NsaWVudFJlbW90ZUNhbGwobWV0YWRhdGFDYXB0dXJlLCBvcmlnaW5hbCwgYXJncywgbWV0YWRhdGEsIHNlbGYpIHtcbiAgICByZXR1cm4gKHNwYW4pID0+IHtcbiAgICAgICAgLy8gaWYgdW5hcnkgb3IgY2xpZW50U3RyZWFtXG4gICAgICAgIGlmICghb3JpZ2luYWwucmVzcG9uc2VTdHJlYW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrRnVuY0luZGV4ID0gYXJncy5maW5kSW5kZXgoYXJnID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrRnVuY0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbY2FsbGJhY2tGdW5jSW5kZXhdID0gcGF0Y2hlZENhbGxiYWNrKHNwYW4sIGFyZ3NbY2FsbGJhY2tGdW5jSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRTcGFuQ29udGV4dChtZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbGwgPSBvcmlnaW5hbC5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgY2FsbC5vbignbWV0YWRhdGEnLCByZXNwb25zZU1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgIG1ldGFkYXRhQ2FwdHVyZS5jbGllbnQuY2FwdHVyZVJlc3BvbnNlTWV0YWRhdGEoc3BhbiwgcmVzcG9uc2VNZXRhZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiBzZXJ2ZXIgc3RyZWFtIG9yIGJpZGlcbiAgICAgICAgaWYgKG9yaWdpbmFsLnJlc3BvbnNlU3RyZWFtKSB7XG4gICAgICAgICAgICBwYXRjaFJlc3BvbnNlU3RyZWFtRXZlbnRzKHNwYW4sIGNhbGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH07XG59XG5leHBvcnRzLm1ha2VHcnBjQ2xpZW50UmVtb3RlQ2FsbCA9IG1ha2VHcnBjQ2xpZW50UmVtb3RlQ2FsbDtcbmZ1bmN0aW9uIGdldE1ldGFkYXRhSW5kZXgoYXJncykge1xuICAgIC8vIFRoaXMgZmluZHMgYW4gaW5zdGFuY2Ugb2YgTWV0YWRhdGEgYW1vbmcgdGhlIGFyZ3VtZW50cy5cbiAgICAvLyBBIHBvc3NpYmxlIGlzc3VlIHRoYXQgY291bGQgb2NjdXIgaXMgaWYgdGhlICdvcHRpb25zJyBwYXJhbWV0ZXIgZnJvbVxuICAgIC8vIHRoZSB1c2VyIGNvbnRhaW5zIGFuICdfaW50ZXJuYWxfcmVwcicgYXMgd2VsbCBhcyBhICdnZXRNYXAnIGZ1bmN0aW9uLFxuICAgIC8vIGJ1dCB0aGlzIGlzIGFuIGV4dHJlbWVseSByYXJlIGNhc2UuXG4gICAgcmV0dXJuIGFyZ3MuZmluZEluZGV4KChhcmcpID0+IHtcbiAgICAgICAgcmV0dXJuIChhcmcgJiZcbiAgICAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBhcmdbJ2ludGVybmFsUmVwciddICYmIC8vIGNoYW5nZWQgZnJvbSBfaW50ZXJuYWxfcmVwciBpbiBncnBjIC0tPiBAZ3JwYy9ncnBjLWpzIGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMtbm9kZS9ibG9iLzk1Mjg5ZWRjYWYzNjk3OWNjY2YxMjc5N2NjMjczMzVkYThkMDFmMDMvcGFja2FnZXMvZ3JwYy1qcy9zcmMvbWV0YWRhdGEudHMjTDg4XG4gICAgICAgICAgICB0eXBlb2YgYXJnLmdldE1hcCA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG59XG5leHBvcnRzLmdldE1ldGFkYXRhSW5kZXggPSBnZXRNZXRhZGF0YUluZGV4O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBtZXRhZGF0YSBhcmd1bWVudCBmcm9tIHVzZXIgcHJvdmlkZWQgYXJndW1lbnRzIChgYXJnc2ApXG4gKiBJZiBubyBtZXRhZGF0YSBpcyBwcm92aWRlZCBpbiBgYXJnc2A6IGFkZHMgZW1wdHkgbWV0YWRhdGEgdG8gYGFyZ3NgIGFuZCByZXR1cm5zIHRoYXQgZW1wdHkgbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1ldGFkYXRhT3JTcGxpY2UoZ3JwY0xpYiwgYXJncywgc3BsaWNlSW5kZXgpIHtcbiAgICBsZXQgbWV0YWRhdGE7XG4gICAgY29uc3QgbWV0YWRhdGFJbmRleCA9IGdldE1ldGFkYXRhSW5kZXgoYXJncyk7XG4gICAgaWYgKG1ldGFkYXRhSW5kZXggPT09IC0xKSB7XG4gICAgICAgIC8vIENyZWF0ZSBtZXRhZGF0YSBpZiBpdCBkb2VzIG5vdCBleGlzdFxuICAgICAgICBtZXRhZGF0YSA9IG5ldyBncnBjTGliLk1ldGFkYXRhKCk7XG4gICAgICAgIGFyZ3Muc3BsaWNlKHNwbGljZUluZGV4LCAwLCBtZXRhZGF0YSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtZXRhZGF0YSA9IGFyZ3NbbWV0YWRhdGFJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBtZXRhZGF0YTtcbn1cbmV4cG9ydHMuZXh0cmFjdE1ldGFkYXRhT3JTcGxpY2UgPSBleHRyYWN0TWV0YWRhdGFPclNwbGljZTtcbi8qKlxuICogUmV0dXJucyB0aGUgbWV0YWRhdGEgYXJndW1lbnQgZnJvbSB1c2VyIHByb3ZpZGVkIGFyZ3VtZW50cyAoYGFyZ3NgKVxuICogQWRkcyBlbXB0eSBtZXRhZGF0YSB0byBhcmd1bWVudHMgaWYgdGhlIGRlZmF1bHQgaXMgdXNlZC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1ldGFkYXRhT3JTcGxpY2VEZWZhdWx0KGdycGNDbGllbnQsIG9yaWdpbmFsLCBhcmdzKSB7XG4gICAgcmV0dXJuIGV4dHJhY3RNZXRhZGF0YU9yU3BsaWNlKGdycGNDbGllbnQsIGFyZ3MsIG9yaWdpbmFsLnJlcXVlc3RTdHJlYW0gPyAwIDogMSk7XG59XG5leHBvcnRzLmV4dHJhY3RNZXRhZGF0YU9yU3BsaWNlRGVmYXVsdCA9IGV4dHJhY3RNZXRhZGF0YU9yU3BsaWNlRGVmYXVsdDtcbi8qKlxuICogSW5qZWN0IG9wZW50ZWxlbWV0cnkgdHJhY2UgY29udGV4dCBpbnRvIGBtZXRhZGF0YWAgZm9yIHVzZSBieSBhbm90aGVyXG4gKiBncnBjIHJlY2VpdmVyXG4gKiBAcGFyYW0gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gc2V0U3BhbkNvbnRleHQobWV0YWRhdGEpIHtcbiAgICBhcGlfMS5wcm9wYWdhdGlvbi5pbmplY3QoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgbWV0YWRhdGEsIHtcbiAgICAgICAgc2V0OiAobWV0YSwgaywgdikgPT4gbWV0YS5zZXQoaywgdiksXG4gICAgfSk7XG59XG5leHBvcnRzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnRVdGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlVmFsdWVzID0gdm9pZCAwO1xuZXhwb3J0cy5BdHRyaWJ1dGVWYWx1ZXMgPSB7XG4gICAgUlBDX1NZU1RFTTogJ2dycGMnLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZVZhbHVlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5WRVJTSU9OID0gJzAuMjA3LjAnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR3JwY0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3Qgc2VydmVyVXRpbHNfMSA9IHJlcXVpcmUoXCIuL3NlcnZlclV0aWxzXCIpO1xuY29uc3QgY2xpZW50VXRpbHNfMSA9IHJlcXVpcmUoXCIuL2NsaWVudFV0aWxzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3QgQXR0cmlidXRlVmFsdWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVWYWx1ZXNcIik7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY2xhc3MgR3JwY0luc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIF9tZXRhZGF0YUNhcHR1cmU7XG4gICAgX3NlbWNvbnZTdGFiaWxpdHk7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncnBjJywgdmVyc2lvbl8xLlZFUlNJT04sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhQ2FwdHVyZSA9IHRoaXMuX2NyZWF0ZU1ldGFkYXRhQ2FwdHVyZSgpO1xuICAgICAgICB0aGlzLl9zZW1jb252U3RhYmlsaXR5ID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnaHR0cCcsIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignQGdycGMvZ3JwYy1qcycsIFsnXjEuMC4wJ10sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFBhdGNoIFNlcnZlciBtZXRob2RzXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlNlcnZlci5wcm90b3R5cGUsICdyZWdpc3RlcicsIHRoaXMuX3BhdGNoU2VydmVyKCkpO1xuICAgICAgICAgICAgICAgIC8vIFBhdGNoIENsaWVudCBtZXRob2RzXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnbWFrZUdlbmVyaWNDbGllbnRDb25zdHJ1Y3RvcicsIHRoaXMuX3BhdGNoQ2xpZW50KG1vZHVsZUV4cG9ydHMpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdtYWtlQ2xpZW50Q29uc3RydWN0b3InLCB0aGlzLl9wYXRjaENsaWVudChtb2R1bGVFeHBvcnRzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnbG9hZFBhY2thZ2VEZWZpbml0aW9uJywgdGhpcy5fcGF0Y2hMb2FkUGFja2FnZURlZmluaXRpb24obW9kdWxlRXhwb3J0cykpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5DbGllbnQucHJvdG90eXBlLCAnbWFrZVVuYXJ5UmVxdWVzdCcsIHRoaXMuX3BhdGNoQ2xpZW50UmVxdWVzdE1ldGhvZChtb2R1bGVFeHBvcnRzLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5DbGllbnQucHJvdG90eXBlLCAnbWFrZUNsaWVudFN0cmVhbVJlcXVlc3QnLCB0aGlzLl9wYXRjaENsaWVudFJlcXVlc3RNZXRob2QobW9kdWxlRXhwb3J0cywgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2xpZW50LnByb3RvdHlwZSwgJ21ha2VTZXJ2ZXJTdHJlYW1SZXF1ZXN0JywgdGhpcy5fcGF0Y2hDbGllbnRSZXF1ZXN0TWV0aG9kKG1vZHVsZUV4cG9ydHMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2xpZW50LnByb3RvdHlwZSwgJ21ha2VCaWRpU3RyZWFtUmVxdWVzdCcsIHRoaXMuX3BhdGNoQ2xpZW50UmVxdWVzdE1ldGhvZChtb2R1bGVFeHBvcnRzLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuU2VydmVyLnByb3RvdHlwZSwgJ3JlZ2lzdGVyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdtYWtlQ2xpZW50Q29uc3RydWN0b3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ21ha2VHZW5lcmljQ2xpZW50Q29uc3RydWN0b3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2xvYWRQYWNrYWdlRGVmaW5pdGlvbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNsaWVudC5wcm90b3R5cGUsICdtYWtlVW5hcnlSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ2xpZW50LnByb3RvdHlwZSwgJ21ha2VDbGllbnRTdHJlYW1SZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ2xpZW50LnByb3RvdHlwZSwgJ21ha2VTZXJ2ZXJTdHJlYW1SZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQ2xpZW50LnByb3RvdHlwZSwgJ21ha2VCaWRpU3RyZWFtUmVxdWVzdCcpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFDYXB0dXJlID0gdGhpcy5fY3JlYXRlTWV0YWRhdGFDYXB0dXJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhdGNoIGZvciBncnBjLlNlcnZlci5wcm90b3R5cGUucmVnaXN0ZXIoLi4uKSBmdW5jdGlvbi4gUHJvdmlkZXMgYXV0by1pbnN0cnVtZW50YXRpb24gZm9yXG4gICAgICogY2xpZW50X3N0cmVhbSwgc2VydmVyX3N0cmVhbSwgYmlkaSwgdW5hcnkgc2VydmVyIGhhbmRsZXIgY2FsbHMuXG4gICAgICovXG4gICAgX3BhdGNoU2VydmVyKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsUmVnaXN0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2RpYWcuZGVidWcoJ3BhdGNoZWQgZ1JQQyBzZXJ2ZXInKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCBoYW5kbGVyLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplLCB0eXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZWdpc3RlclJlc3VsdCA9IG9yaWdpbmFsUmVnaXN0ZXIuY2FsbCh0aGlzLCBuYW1lLCBoYW5kbGVyLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplLCB0eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyU2V0ID0gdGhpc1snaGFuZGxlcnMnXS5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl93cmFwKGhhbmRsZXJTZXQsICdmdW5jJywgKG9yaWdpbmFsRnVuYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnVuYyhjYWxsLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIHNlcnZlclV0aWxzXzEuc2hvdWxkTm90VHJhY2VTZXJ2ZXJDYWxsKShuYW1lLCBjb25maWcuaWdub3JlR3JwY01ldGhvZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBzZXJ2ZXJVdGlsc18xLmhhbmRsZVVudHJhY2VkU2VydmVyRnVuY3Rpb24pKHR5cGUsIG9yaWdpbmFsRnVuYywgY2FsbCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Bhbk5hbWUgPSBgZ3JwYy4ke25hbWUucmVwbGFjZSgnLycsICcnKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Bhbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuU0VSVkVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5kZWJ1ZyhgcGF0Y2ggZnVuYzogJHtKU09OLnN0cmluZ2lmeShzcGFuT3B0aW9ucyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEucHJvcGFnYXRpb24uZXh0cmFjdChhcGlfMS5ST09UX0NPTlRFWFQsIGNhbGwubWV0YWRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IChjYXJyaWVyLCBrZXkpID0+IGNhcnJpZXIuZ2V0KGtleSkubWFwKFN0cmluZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5czogY2FycmllciA9PiBPYmplY3Qua2V5cyhjYXJyaWVyLmdldE1hcCgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzZXJ2aWNlLCBtZXRob2QgfSA9ICgwLCB1dGlsc18xLl9leHRyYWN0TWV0aG9kQW5kU2VydmljZSkobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0U3BhbihzcGFuTmFtZSwgc3Bhbk9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19TWVNURU1dOiBBdHRyaWJ1dGVWYWx1ZXNfMS5BdHRyaWJ1dGVWYWx1ZXMuUlBDX1NZU1RFTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19NRVRIT0RdOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9SUENfU0VSVklDRV06IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9tZXRhZGF0YUNhcHR1cmUuc2VydmVyLmNhcHR1cmVSZXF1ZXN0TWV0YWRhdGEoc3BhbiwgY2FsbC5tZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl93cmFwKGNhbGwsICdzZW5kTWV0YWRhdGEnLCBvcmlnaW5hbFNlbmRNZXRhZGF0YSA9PiAocmVzcG9uc2VNZXRhZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX21ldGFkYXRhQ2FwdHVyZS5zZXJ2ZXIuY2FwdHVyZVJlc3BvbnNlTWV0YWRhdGEoc3BhbiwgcmVzcG9uc2VNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2VuZE1ldGFkYXRhLmNhbGwoY2FsbCwgcmVzcG9uc2VNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyVXRpbHNfMS5oYW5kbGVTZXJ2ZXJGdW5jdGlvbi5jYWxsKHNlbGYsIHNwYW4sIHR5cGUsIG9yaWdpbmFsRnVuYywgY2FsbCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVnaXN0ZXJSZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBmb3IgZ3JwYy5DbGllbnQubWFrZSpSZXF1ZXN0KC4uLikgZnVuY3Rpb25zLlxuICAgICAqIFByb3ZpZGVzIGF1dG8taW5zdHJ1bWVudGF0aW9uIGZvciBjbGllbnQgcmVxdWVzdHMgd2hlbiB1c2luZyBhIENsaWVudCB3aXRob3V0XG4gICAgICogbWFrZUdlbmVyaWNDbGllbnRDb25zdHJ1Y3Rvci9tYWtlQ2xpZW50Q29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBfcGF0Y2hDbGllbnRSZXF1ZXN0TWV0aG9kKGdycGNMaWIsIGhhc1Jlc3BvbnNlU3RyZWFtKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5kZWJ1ZygncGF0Y2hlZCBtYWtlQ2xpZW50U3RyZWFtUmVxdWVzdCBvbiBncnBjIGNsaWVudCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ha2VDbGllbnRTdHJlYW1SZXF1ZXN0KCkge1xuICAgICAgICAgICAgICAgIC8vIG1ldGhvZCBtdXN0IGFsd2F5cyBiZSBhdCBmaXJzdCBwb3NpdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5hbWUsIHNlcnZpY2UsIG1ldGhvZEF0dHJpYnV0ZVZhbHVlIH0gPSBpbnN0cnVtZW50YXRpb24uX3NwbGl0TWV0aG9kU3RyaW5nKG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gdHJhY2UvaW5qZWN0IGNvbnRleHQgaWYgbWV0aG9kIGlzIGlnbm9yZWRcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuX21ldGhvZElzSWdub3JlZCkobWV0aG9kQXR0cmlidXRlVmFsdWUsIGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKS5pZ25vcmVHcnBjTWV0aG9kcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFsuLi5hcmd1bWVudHNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZWRBcmdzID0gWy4uLmFyZ3VtZW50c107XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSAoMCwgY2xpZW50VXRpbHNfMS5leHRyYWN0TWV0YWRhdGFPclNwbGljZSkoZ3JwY0xpYiwgbW9kaWZpZWRBcmdzLCA0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLmNyZWF0ZUNsaWVudFNwYW4obmFtZSwgbWV0aG9kQXR0cmlidXRlVmFsdWUsIHNlcnZpY2UsIG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uZXh0cmFjdE5ldE1ldGFkYXRhKHRoaXMsIHNwYW4sIGluc3RydW1lbnRhdGlvbi5fc2VtY29udlN0YWJpbGl0eSk7XG4gICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgaXMgb25seSBwcmVzZW50IHdoZW4gdGhlcmUgaXMgbm8gcmVzcG9uc2VTdHJlYW1cbiAgICAgICAgICAgICAgICBpZiAoIWhhc1Jlc3BvbnNlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHBhdGNoZWQgb25lIGlmIGl0IGlzIHRoZXJlLlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgYXJnIGlzIG5vdCBhIGZ1bmN0aW9uIG9uIHRoZSBsYXN0IHBvc2l0aW9uIHRoZW4gdGhlIGNsaWVudCB3aWxsIHRocm93XG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBuZXZlciBjYWxsIHRoZSBjYWxsYmFjayAtPiBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gcGF0Y2hcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEFyZ0luZGV4ID0gbW9kaWZpZWRBcmdzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gbW9kaWZpZWRBcmdzW2xhc3RBcmdJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQXJnc1tsYXN0QXJnSW5kZXhdID0gKDAsIGNsaWVudFV0aWxzXzEucGF0Y2hlZENhbGxiYWNrKShzcGFuLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjbGllbnRVdGlsc18xLnNldFNwYW5Db250ZXh0KShtZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGwgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBbLi4ubW9kaWZpZWRBcmdzXSk7XG4gICAgICAgICAgICAgICAgICAgICgwLCBjbGllbnRVdGlsc18xLnBhdGNoUmVzcG9uc2VNZXRhZGF0YUV2ZW50KShzcGFuLCBjYWxsLCBpbnN0cnVtZW50YXRpb24uX21ldGFkYXRhQ2FwdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byByZXNwb25zZSBzdHJlYW0gZXZlbnRzIHdoZW4gdGhlcmUncyBhIHJlc3BvbnNlIHN0cmVhbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Jlc3BvbnNlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgY2xpZW50VXRpbHNfMS5wYXRjaFJlc3BvbnNlU3RyZWFtRXZlbnRzKShzcGFuLCBjYWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVudHJ5IHBvaW50IGZvciBhcHBseWluZyBjbGllbnQgcGF0Y2hlcyB0byBgZ3JwYy5tYWtlQ2xpZW50Q29uc3RydWN0b3IoLi4uKWAgZXF1aXZhbGVudHNcbiAgICAgKiBAcGFyYW0gdGhpcyBHcnBjSnNQbHVnaW5cbiAgICAgKi9cbiAgICBfcGF0Y2hDbGllbnQoZ3JwY0NsaWVudCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2RpYWcuZGVidWcoJ3BhdGNoaW5nIGNsaWVudCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ha2VDbGllbnRDb25zdHJ1Y3RvcihtZXRob2RzLCBzZXJ2aWNlTmFtZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IG9yaWdpbmFsLmNhbGwodGhpcywgbWV0aG9kcywgc2VydmljZU5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fbWFzc1dyYXAoY2xpZW50LnByb3RvdHlwZSwgY2xpZW50VXRpbHNfMS5nZXRNZXRob2RzVG9XcmFwLmNhbGwoaW5zdHJ1bWVudGF0aW9uLCBjbGllbnQsIG1ldGhvZHMpLCBpbnN0cnVtZW50YXRpb24uX2dldFBhdGNoZWRDbGllbnRNZXRob2RzKGdycGNDbGllbnQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW50cnkgcG9pbnQgZm9yIGNsaWVudCBwYXRjaGluZyBmb3IgZ3JwYy5sb2FkUGFja2FnZURlZmluaXRpb24oLi4uKVxuICAgICAqIEBwYXJhbSB0aGlzIC0gR3JwY0pzUGx1Z2luXG4gICAgICovXG4gICAgX3BhdGNoTG9hZFBhY2thZ2VEZWZpbml0aW9uKGdycGNDbGllbnQpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9kaWFnLmRlYnVnKCdwYXRjaGluZyBsb2FkUGFja2FnZURlZmluaXRpb24nKTtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRMb2FkUGFja2FnZURlZmluaXRpb24ocGFja2FnZURlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmNhbGwodGhpcywgcGFja2FnZURlZik7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9wYXRjaExvYWRlZFBhY2thZ2UoZ3JwY0NsaWVudCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgaW5pdGlhbCBjbGllbnQgY2FsbCBwcm9wZXJ0aWVzIGFuZCBzdGFydCBhIHNwYW4gdG8gdHJhY2UgaXRzIGV4ZWN1dGlvblxuICAgICAqL1xuICAgIF9nZXRQYXRjaGVkQ2xpZW50TWV0aG9kcyhncnBjQ2xpZW50KSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5kZWJ1ZygncGF0Y2ggYWxsIGNsaWVudCBtZXRob2RzJyk7XG4gICAgICAgICAgICBmdW5jdGlvbiBjbGllbnRNZXRob2RUcmFjZSgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gYGdycGMuJHtvcmlnaW5hbC5wYXRoLnJlcGxhY2UoJy8nLCAnJyl9YDtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c107XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBjbGllbnRVdGlsc18xLmV4dHJhY3RNZXRhZGF0YU9yU3BsaWNlRGVmYXVsdC5jYWxsKGluc3RydW1lbnRhdGlvbiwgZ3JwY0NsaWVudCwgb3JpZ2luYWwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VydmljZSwgbWV0aG9kIH0gPSAoMCwgdXRpbHNfMS5fZXh0cmFjdE1ldGhvZEFuZFNlcnZpY2UpKG9yaWdpbmFsLnBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydFNwYW4obmFtZSwgeyBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfUlBDX1NZU1RFTV06ICdncnBjJyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1JQQ19NRVRIT0RdOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9SUENfU0VSVklDRV06IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLmV4dHJhY3ROZXRNZXRhZGF0YSh0aGlzLCBzcGFuLCBpbnN0cnVtZW50YXRpb24uX3NlbWNvbnZTdGFiaWxpdHkpO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fbWV0YWRhdGFDYXB0dXJlLmNsaWVudC5jYXB0dXJlUmVxdWVzdE1ldGFkYXRhKHNwYW4sIG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksICgpID0+ICgwLCBjbGllbnRVdGlsc18xLm1ha2VHcnBjQ2xpZW50UmVtb3RlQ2FsbCkoaW5zdHJ1bWVudGF0aW9uLl9tZXRhZGF0YUNhcHR1cmUsIG9yaWdpbmFsLCBhcmdzLCBtZXRhZGF0YSwgdGhpcykoc3BhbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjbGllbnRNZXRob2RUcmFjZSwgb3JpZ2luYWwpO1xuICAgICAgICAgICAgcmV0dXJuIGNsaWVudE1ldGhvZFRyYWNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfc3BsaXRNZXRob2RTdHJpbmcobWV0aG9kKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogJycsIHNlcnZpY2U6ICcnLCBtZXRob2RBdHRyaWJ1dGVWYWx1ZTogJycgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gYGdycGMuJHttZXRob2QucmVwbGFjZSgnLycsICcnKX1gO1xuICAgICAgICBjb25zdCB7IHNlcnZpY2UsIG1ldGhvZDogbWV0aG9kQXR0cmlidXRlVmFsdWUgfSA9ICgwLCB1dGlsc18xLl9leHRyYWN0TWV0aG9kQW5kU2VydmljZSkobWV0aG9kKTtcbiAgICAgICAgcmV0dXJuIHsgbmFtZSwgc2VydmljZSwgbWV0aG9kQXR0cmlidXRlVmFsdWUgfTtcbiAgICB9XG4gICAgY3JlYXRlQ2xpZW50U3BhbihuYW1lLCBtZXRob2RBdHRyaWJ1dGVWYWx1ZSwgc2VydmljZSwgbWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMudHJhY2VyXG4gICAgICAgICAgICAuc3RhcnRTcGFuKG5hbWUsIHsga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5UIH0pXG4gICAgICAgICAgICAuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfUlBDX1NZU1RFTV06ICdncnBjJyxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9SUENfTUVUSE9EXTogbWV0aG9kQXR0cmlidXRlVmFsdWUsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfUlBDX1NFUlZJQ0VdOiBzZXJ2aWNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhQ2FwdHVyZS5jbGllbnQuY2FwdHVyZVJlcXVlc3RNZXRhZGF0YShzcGFuLCBtZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgfVxuICAgIGV4dHJhY3ROZXRNZXRhZGF0YShjbGllbnQsIHNwYW4sIHNlbWNvbnZTdGFiaWxpdHkpIHtcbiAgICAgICAgLy8gc2V0IG5ldC5wZWVyLiogZnJvbSB0YXJnZXQgKGUuZy4sIFwiZG5zOm90ZWwtcHJvZHVjdGNhdGFsb2dzZXJ2aWNlOjgwODBcIikgYXMgYSBoaW50IHRvIEFQTXNcbiAgICAgICAgY29uc3QgcGFyc2VkVXJpID0gdXRpbHNfMS5VUklfUkVHRVguZXhlYyhjbGllbnQuZ2V0Q2hhbm5lbCgpLmdldFRhcmdldCgpKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBwYXJzZWRVcmk/Lmdyb3Vwcz8ubmFtZTtcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHBhcnNlZFVyaT8uZ3JvdXBzPy5wb3J0ID8/ICcnKTtcbiAgICAgICAgY29uc3Qgb2xkQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogaG9zdG5hbWUsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVF06IHBvcnQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogaG9zdG5hbWUsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXTogcG9ydCxcbiAgICAgICAgfTtcbiAgICAgICAgc3dpdGNoIChzZW1jb252U3RhYmlsaXR5KSB7XG4gICAgICAgICAgICBjYXNlIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFOlxuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyhuZXdBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQ6XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKG9sZEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LkRVUExJQ0FURTpcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoeyAuLi5vbGRBdHRyaWJ1dGVzLCAuLi5uZXdBdHRyaWJ1dGVzIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMob2xkQXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBwYXRjaCAqYWxsKiBmdW5jdGlvbnMgbG9hZGVkIHRocm91Z2ggYSBwcm90byBmaWxlLlxuICAgICAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIGZvciBDbGllbnQgY2xhc3NlcyBhbmQgcGF0Y2hlcyBhbGwgbWV0aG9kcywgcmV2ZXJzaW5nIHRoZVxuICAgICAqIHBhcnNpbmcgZG9uZSBieSBncnBjLmxvYWRQYWNrYWdlRGVmaW5pdGlvblxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMtbm9kZS9ibG9iLzFkMTQyMDNjMzgyNTA5YzNmMzYxMzJiZDAyNDRjOTk3OTJjYjY2MDEvcGFja2FnZXMvZ3JwYy1qcy9zcmMvbWFrZS1jbGllbnQudHMjTDIwMC1MMjE3XG4gICAgICovXG4gICAgX3BhdGNoTG9hZGVkUGFja2FnZShncnBjQ2xpZW50LCByZXN1bHQpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhyZXN1bHQpLmZvckVhY2goc2VydmljZSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlcnZpY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXNzV3JhcChzZXJ2aWNlLnByb3RvdHlwZSwgY2xpZW50VXRpbHNfMS5nZXRNZXRob2RzVG9XcmFwLmNhbGwodGhpcywgc2VydmljZSwgc2VydmljZS5zZXJ2aWNlKSwgdGhpcy5fZ2V0UGF0Y2hlZENsaWVudE1ldGhvZHMuY2FsbCh0aGlzLCBncnBjQ2xpZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc2VydmljZS5mb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gR3JwY09iamVjdFxuICAgICAgICAgICAgICAgIHRoaXMuX3BhdGNoTG9hZGVkUGFja2FnZS5jYWxsKHRoaXMsIGdycGNDbGllbnQsIHNlcnZpY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2NyZWF0ZU1ldGFkYXRhQ2FwdHVyZSgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0TWV0YWRhdGE6ICgwLCB1dGlsc18xLm1ldGFkYXRhQ2FwdHVyZSkoJ3JlcXVlc3QnLCBjb25maWcubWV0YWRhdGFUb1NwYW5BdHRyaWJ1dGVzPy5jbGllbnQ/LnJlcXVlc3RNZXRhZGF0YSA/PyBbXSksXG4gICAgICAgICAgICAgICAgY2FwdHVyZVJlc3BvbnNlTWV0YWRhdGE6ICgwLCB1dGlsc18xLm1ldGFkYXRhQ2FwdHVyZSkoJ3Jlc3BvbnNlJywgY29uZmlnLm1ldGFkYXRhVG9TcGFuQXR0cmlidXRlcz8uY2xpZW50Py5yZXNwb25zZU1ldGFkYXRhID8/IFtdKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJ2ZXI6IHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlUmVxdWVzdE1ldGFkYXRhOiAoMCwgdXRpbHNfMS5tZXRhZGF0YUNhcHR1cmUpKCdyZXF1ZXN0JywgY29uZmlnLm1ldGFkYXRhVG9TcGFuQXR0cmlidXRlcz8uc2VydmVyPy5yZXF1ZXN0TWV0YWRhdGEgPz8gW10pLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVSZXNwb25zZU1ldGFkYXRhOiAoMCwgdXRpbHNfMS5tZXRhZGF0YUNhcHR1cmUpKCdyZXNwb25zZScsIGNvbmZpZy5tZXRhZGF0YVRvU3BhbkF0dHJpYnV0ZXM/LnNlcnZlcj8ucmVzcG9uc2VNZXRhZGF0YSA/PyBbXSksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuR3JwY0luc3RydW1lbnRhdGlvbiA9IEdycGNJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdycGNJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJHcnBjSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5HcnBjSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjU0LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWhhcGknO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGFwaUxpZmVjeWNsZU1ldGhvZE5hbWVzID0gZXhwb3J0cy5IYXBpTGF5ZXJUeXBlID0gZXhwb3J0cy5oYW5kbGVyUGF0Y2hlZCA9IGV4cG9ydHMuSGFwaUNvbXBvbmVudE5hbWUgPSB2b2lkIDA7XG5leHBvcnRzLkhhcGlDb21wb25lbnROYW1lID0gJ0BoYXBpL2hhcGknO1xuLyoqXG4gKiBUaGlzIHN5bWJvbCBpcyB1c2VkIHRvIG1hcmsgYSBIYXBpIHJvdXRlIGhhbmRsZXIgb3Igc2VydmVyIGV4dGVuc2lvbiBoYW5kbGVyIGFzXG4gKiBhbHJlYWR5IHBhdGNoZWQsIHNpbmNlIGl0cyBwb3NzaWJsZSB0byB1c2UgdGhlc2UgaGFuZGxlcnMgbXVsdGlwbGUgdGltZXNcbiAqIGkuZS4gd2hlbiBhbGxvd2luZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBvbmUgcGx1Z2luLCBvciB3aGVuIHJlZ2lzdGVyaW5nIGEgcGx1Z2luXG4gKiBtdWx0aXBsZSB0aW1lcyBvbiBkaWZmZXJlbnQgc2VydmVycy5cbiAqL1xuZXhwb3J0cy5oYW5kbGVyUGF0Y2hlZCA9IFN5bWJvbCgnaGFwaS1oYW5kbGVyLXBhdGNoZWQnKTtcbmV4cG9ydHMuSGFwaUxheWVyVHlwZSA9IHtcbiAgICBST1VURVI6ICdyb3V0ZXInLFxuICAgIFBMVUdJTjogJ3BsdWdpbicsXG4gICAgRVhUOiAnc2VydmVyLmV4dCcsXG59O1xuZXhwb3J0cy5IYXBpTGlmZWN5Y2xlTWV0aG9kTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAnb25QcmVBdXRoJyxcbiAgICAnb25DcmVkZW50aWFscycsXG4gICAgJ29uUG9zdEF1dGgnLFxuICAgICdvblByZUhhbmRsZXInLFxuICAgICdvblBvc3RIYW5kbGVyJyxcbiAgICAnb25QcmVSZXNwb25zZScsXG4gICAgJ29uUmVxdWVzdCcsXG5dKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVybmFsLXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX0hUVFBfTUVUSE9EID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBodHRwLnJlcXVlc3QubWV0aG9kYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIEdFVFxuICogQGV4YW1wbGUgUE9TVFxuICogQGV4YW1wbGUgSEVBRFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgaHR0cC5yZXF1ZXN0Lm1ldGhvZGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9IVFRQX01FVEhPRCA9ICdodHRwLm1ldGhvZCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBBdHRyaWJ1dGVOYW1lcztcbihmdW5jdGlvbiAoQXR0cmlidXRlTmFtZXMpIHtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkhBUElfVFlQRVwiXSA9IFwiaGFwaS50eXBlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJQTFVHSU5fTkFNRVwiXSA9IFwiaGFwaS5wbHVnaW4ubmFtZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiRVhUX1RZUEVcIl0gPSBcInNlcnZlci5leHQudHlwZVwiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRQbHVnaW5Gcm9tSW5wdXQgPSBleHBvcnRzLmdldEV4dE1ldGFkYXRhID0gZXhwb3J0cy5nZXRSb3V0ZU1ldGFkYXRhID0gZXhwb3J0cy5pc1BhdGNoYWJsZUV4dE1ldGhvZCA9IGV4cG9ydHMuaXNEaXJlY3RFeHRJbnB1dCA9IGV4cG9ydHMuaXNMaWZlY3ljbGVFeHRFdmVudE9iaiA9IGV4cG9ydHMuaXNMaWZlY3ljbGVFeHRUeXBlID0gZXhwb3J0cy5nZXRQbHVnaW5OYW1lID0gdm9pZCAwO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBpbnRlcm5hbF90eXBlc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtdHlwZXNcIik7XG5jb25zdCBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vZW51bXMvQXR0cmlidXRlTmFtZXNcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5mdW5jdGlvbiBnZXRQbHVnaW5OYW1lKHBsdWdpbikge1xuICAgIGlmIChwbHVnaW4ubmFtZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLm5hbWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcGx1Z2luLnBrZy5uYW1lO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0UGx1Z2luTmFtZSA9IGdldFBsdWdpbk5hbWU7XG5jb25zdCBpc0xpZmVjeWNsZUV4dFR5cGUgPSAodmFyaWFibGVUb0NoZWNrKSA9PiB7XG4gICAgcmV0dXJuICh0eXBlb2YgdmFyaWFibGVUb0NoZWNrID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBpbnRlcm5hbF90eXBlc18xLkhhcGlMaWZlY3ljbGVNZXRob2ROYW1lcy5oYXModmFyaWFibGVUb0NoZWNrKSk7XG59O1xuZXhwb3J0cy5pc0xpZmVjeWNsZUV4dFR5cGUgPSBpc0xpZmVjeWNsZUV4dFR5cGU7XG5jb25zdCBpc0xpZmVjeWNsZUV4dEV2ZW50T2JqID0gKHZhcmlhYmxlVG9DaGVjaykgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gdmFyaWFibGVUb0NoZWNrPy50eXBlO1xuICAgIHJldHVybiBldmVudCAhPT0gdW5kZWZpbmVkICYmICgwLCBleHBvcnRzLmlzTGlmZWN5Y2xlRXh0VHlwZSkoZXZlbnQpO1xufTtcbmV4cG9ydHMuaXNMaWZlY3ljbGVFeHRFdmVudE9iaiA9IGlzTGlmZWN5Y2xlRXh0RXZlbnRPYmo7XG5jb25zdCBpc0RpcmVjdEV4dElucHV0ID0gKHZhcmlhYmxlVG9DaGVjaykgPT4ge1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YXJpYWJsZVRvQ2hlY2spICYmXG4gICAgICAgIHZhcmlhYmxlVG9DaGVjay5sZW5ndGggPD0gMyAmJlxuICAgICAgICAoMCwgZXhwb3J0cy5pc0xpZmVjeWNsZUV4dFR5cGUpKHZhcmlhYmxlVG9DaGVja1swXSkgJiZcbiAgICAgICAgdHlwZW9mIHZhcmlhYmxlVG9DaGVja1sxXSA9PT0gJ2Z1bmN0aW9uJyk7XG59O1xuZXhwb3J0cy5pc0RpcmVjdEV4dElucHV0ID0gaXNEaXJlY3RFeHRJbnB1dDtcbmNvbnN0IGlzUGF0Y2hhYmxlRXh0TWV0aG9kID0gKHZhcmlhYmxlVG9DaGVjaykgPT4ge1xuICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh2YXJpYWJsZVRvQ2hlY2spO1xufTtcbmV4cG9ydHMuaXNQYXRjaGFibGVFeHRNZXRob2QgPSBpc1BhdGNoYWJsZUV4dE1ldGhvZDtcbmNvbnN0IGdldFJvdXRlTWV0YWRhdGEgPSAocm91dGUsIHNlbWNvbnZTdGFiaWxpdHksIHBsdWdpbk5hbWUpID0+IHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUk9VVEVdOiByb3V0ZS5wYXRoLFxuICAgIH07XG4gICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfTUVUSE9EXSA9IHJvdXRlLm1ldGhvZDtcbiAgICB9XG4gICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBkb2VzICpub3QqIG5vcm1hbGl6ZSB0aGUgbWV0aG9kIG5hbWUgdG8gdXBwZXJjYXNlXG4gICAgICAgIC8vIGFuZCBjb25kaXRpb25hbGx5IGluY2x1ZGUgYGh0dHAucmVxdWVzdC5tZXRob2Qub3JpZ2luYWxgIGFzIGRlc2NyaWJlZFxuICAgICAgICAvLyBhdCBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2h0dHAvaHR0cC1zcGFucy9cbiAgICAgICAgLy8gVGhlc2UgYXR0cmlidXRlcyBhcmUgZm9yIGEgKmhhcGkqIHNwYW4sIGFuZCBub3QgdGhlIHBhcmVudCBIVFRQIHNwYW4sXG4gICAgICAgIC8vIHNvIHRoZSBIVFRQIHNwYW4gZ3VpZGFuY2UgZG9lc24ndCBzdHJpY3RseSBhcHBseS5cbiAgICAgICAgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRF0gPSByb3V0ZS5tZXRob2Q7XG4gICAgfVxuICAgIGxldCBuYW1lO1xuICAgIGlmIChwbHVnaW5OYW1lKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5IQVBJX1RZUEVdID0gaW50ZXJuYWxfdHlwZXNfMS5IYXBpTGF5ZXJUeXBlLlBMVUdJTjtcbiAgICAgICAgYXR0cmlidXRlc1tBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLlBMVUdJTl9OQU1FXSA9IHBsdWdpbk5hbWU7XG4gICAgICAgIG5hbWUgPSBgJHtwbHVnaW5OYW1lfTogcm91dGUgLSAke3JvdXRlLnBhdGh9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5IQVBJX1RZUEVdID0gaW50ZXJuYWxfdHlwZXNfMS5IYXBpTGF5ZXJUeXBlLlJPVVRFUjtcbiAgICAgICAgbmFtZSA9IGByb3V0ZSAtICR7cm91dGUucGF0aH1gO1xuICAgIH1cbiAgICByZXR1cm4geyBhdHRyaWJ1dGVzLCBuYW1lIH07XG59O1xuZXhwb3J0cy5nZXRSb3V0ZU1ldGFkYXRhID0gZ2V0Um91dGVNZXRhZGF0YTtcbmNvbnN0IGdldEV4dE1ldGFkYXRhID0gKGV4dFBvaW50LCBwbHVnaW5OYW1lKSA9PiB7XG4gICAgaWYgKHBsdWdpbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5FWFRfVFlQRV06IGV4dFBvaW50LFxuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkhBUElfVFlQRV06IGludGVybmFsX3R5cGVzXzEuSGFwaUxheWVyVHlwZS5FWFQsXG4gICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuUExVR0lOX05BTUVdOiBwbHVnaW5OYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IGAke3BsdWdpbk5hbWV9OiBleHQgLSAke2V4dFBvaW50fWAsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkVYVF9UWVBFXTogZXh0UG9pbnQsXG4gICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5IQVBJX1RZUEVdOiBpbnRlcm5hbF90eXBlc18xLkhhcGlMYXllclR5cGUuRVhULFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBgZXh0IC0gJHtleHRQb2ludH1gLFxuICAgIH07XG59O1xuZXhwb3J0cy5nZXRFeHRNZXRhZGF0YSA9IGdldEV4dE1ldGFkYXRhO1xuY29uc3QgZ2V0UGx1Z2luRnJvbUlucHV0ID0gKHBsdWdpbk9iaikgPT4ge1xuICAgIGlmICgncGx1Z2luJyBpbiBwbHVnaW5PYmopIHtcbiAgICAgICAgaWYgKCdwbHVnaW4nIGluIHBsdWdpbk9iai5wbHVnaW4pIHtcbiAgICAgICAgICAgIHJldHVybiBwbHVnaW5PYmoucGx1Z2luLnBsdWdpbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGx1Z2luT2JqLnBsdWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIHBsdWdpbk9iajtcbn07XG5leHBvcnRzLmdldFBsdWdpbkZyb21JbnB1dCA9IGdldFBsdWdpbkZyb21JbnB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IYXBpSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgaW50ZXJuYWxfdHlwZXNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsLXR5cGVzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqIEhhcGkgaW5zdHJ1bWVudGF0aW9uIGZvciBPcGVuVGVsZW1ldHJ5ICovXG5jbGFzcyBIYXBpSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgX3NlbWNvbnZTdGFiaWxpdHk7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2VtY29udlN0YWJpbGl0eSA9ICgwLCBpbnN0cnVtZW50YXRpb25fMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cikoJ2h0dHAnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oaW50ZXJuYWxfdHlwZXNfMS5IYXBpQ29tcG9uZW50TmFtZSwgWyc+PTE3LjAuMCA8MjInXSwgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IG1vZHVsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJyA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICAgICAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnNlcnZlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdzZXJ2ZXInLCB0aGlzLl9nZXRTZXJ2ZXJQYXRjaC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5TZXJ2ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnU2VydmVyJywgdGhpcy5fZ2V0U2VydmVyUGF0Y2guYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSwgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IG1vZHVsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJyA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICAgICAgICAgICAgdGhpcy5fbWFzc1Vud3JhcChbbW9kdWxlRXhwb3J0c10sIFsnc2VydmVyJywgJ1NlcnZlciddKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhdGNoZXMgdGhlIEhhcGkuc2VydmVyIGFuZCBIYXBpLlNlcnZlciBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gaW5zdHJ1bWVudFxuICAgICAqIHRoZSBzZXJ2ZXIucm91dGUsIHNlcnZlci5leHQsIGFuZCBzZXJ2ZXIucmVnaXN0ZXIgZnVuY3Rpb25zIHZpYSBjYWxscyB0byB0aGVcbiAgICAgKiBAZnVuY3Rpb24gX2dldFNlcnZlclJvdXRlUGF0Y2gsIEBmdW5jdGlvbiBfZ2V0U2VydmVyRXh0UGF0Y2gsIGFuZFxuICAgICAqIEBmdW5jdGlvbiBfZ2V0U2VydmVyUmVnaXN0ZXJQYXRjaCBmdW5jdGlvbnNcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWwgLSB0aGUgb3JpZ2luYWwgSGFwaSBTZXJ2ZXIgY3JlYXRpb24gZnVuY3Rpb25cbiAgICAgKi9cbiAgICBfZ2V0U2VydmVyUGF0Y2gob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXJ2ZXIob3B0cykge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VydmVyID0gb3JpZ2luYWwuYXBwbHkodGhpcywgW29wdHNdKTtcbiAgICAgICAgICAgIHNlbGYuX3dyYXAobmV3U2VydmVyLCAncm91dGUnLCBvcmlnaW5hbFJvdXRlciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi5fZ2V0U2VydmVyUm91dGVQYXRjaC5iaW5kKGluc3RydW1lbnRhdGlvbikob3JpZ2luYWxSb3V0ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDYXN0aW5nIGFzIGFueSBpcyBuZWNlc3NhcnkgaGVyZSBkdWUgdG8gbXVsdGlwbGUgb3ZlcmxvYWRzIG9uIHRoZSBIYXBpLmV4dFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24sIHdoaWNoIHJlcXVpcmVzIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGRpZmZlcmVudCBwYXJhbWV0ZXJzXG4gICAgICAgICAgICAvLyBhcyBleHRlbnNpb24gaW5wdXRzXG4gICAgICAgICAgICBzZWxmLl93cmFwKG5ld1NlcnZlciwgJ2V4dCcsIG9yaWdpbmFsRXh0SGFuZGxlciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi5fZ2V0U2VydmVyRXh0UGF0Y2guYmluZChpbnN0cnVtZW50YXRpb24pKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFeHRIYW5kbGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2FzdGluZyBhcyBhbnkgaXMgbmVjZXNzYXJ5IGhlcmUgZHVlIHRvIG11bHRpcGxlIG92ZXJsb2FkcyBvbiB0aGUgSGFwaS5TZXJ2ZXIucmVnaXN0ZXJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uLCB3aGljaCByZXF1aXJlcyBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgUGx1Z2luIGlucHV0c1xuICAgICAgICAgICAgc2VsZi5fd3JhcChuZXdTZXJ2ZXIsICdyZWdpc3RlcicsIFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZ2V0U2VydmVyUmVnaXN0ZXJQYXRjaC5iaW5kKGluc3RydW1lbnRhdGlvbikpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NlcnZlcjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF0Y2hlcyB0aGUgcGx1Z2luIHJlZ2lzdGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEhhcGkgU2VydmVyLiBUaGlzIGZ1bmN0aW9uXG4gICAgICogZ29lcyB0aHJvdWdoIGVhY2ggcGx1Z2luIHRoYXQgaXMgYmVpbmcgcmVnaXN0ZXJlZCBhbmQgYWRkcyBpbnN0cnVtZW50YXRpb25cbiAgICAgKiB2aWEgYSBjYWxsIHRvIHRoZSBAZnVuY3Rpb24gX3dyYXBSZWdpc3RlckhhbmRsZXIgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtSZWdpc3RlckZ1bmN0aW9uPFQ+fSBvcmlnaW5hbCAtIHRoZSBvcmlnaW5hbCByZWdpc3RlciBmdW5jdGlvbiB3aGljaFxuICAgICAqIHJlZ2lzdGVycyBlYWNoIHBsdWdpbiBvbiB0aGUgc2VydmVyXG4gICAgICovXG4gICAgX2dldFNlcnZlclJlZ2lzdGVyUGF0Y2gob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlZ2lzdGVyKHBsdWdpbklucHV0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwbHVnaW5JbnB1dCkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbk9iaiBvZiBwbHVnaW5JbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbHVnaW4gPSAoMCwgdXRpbHNfMS5nZXRQbHVnaW5Gcm9tSW5wdXQpKHBsdWdpbk9iaik7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fd3JhcFJlZ2lzdGVySGFuZGxlcihwbHVnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9ICgwLCB1dGlsc18xLmdldFBsdWdpbkZyb21JbnB1dCkocGx1Z2luSW5wdXQpO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fd3JhcFJlZ2lzdGVySGFuZGxlcihwbHVnaW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtwbHVnaW5JbnB1dCwgb3B0aW9uc10pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaGVzIHRoZSBTZXJ2ZXIuZXh0IGZ1bmN0aW9uIHdoaWNoIGFkZHMgZXh0ZW5zaW9uIG1ldGhvZHMgdG8gdGhlIHNwZWNpZmllZFxuICAgICAqIHBvaW50IGFsb25nIHRoZSByZXF1ZXN0IGxpZmVjeWNsZS4gVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHRoZSBmdWxsIHJhbmdlIG9mXG4gICAgICogYWNjZXB0ZWQgaW5wdXQgaW50byB0aGUgc3RhbmRhcmQgSGFwaSBgc2VydmVyLmV4dGAgZnVuY3Rpb24uIEZvciBlYWNoIGV4dGVuc2lvbixcbiAgICAgKiBpdCBhZGRzIGluc3RydW1lbnRhdGlvbiB0byB0aGUgaGFuZGxlciB2aWEgYSBjYWxsIHRvIHRoZSBAZnVuY3Rpb24gX3dyYXBFeHRNZXRob2RzXG4gICAgICogZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIGV4dCBmdW5jdGlvbiB3aGljaCBhZGRzIHRoZSBleHRlbnNpb24gbWV0aG9kIHRvIHRoZSBzZXJ2ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BsdWdpbk5hbWVdIC0gaWYgcHJlc2VudCwgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luIHJlc3BvbnNpYmxlXG4gICAgICogZm9yIGFkZGluZyB0aGlzIHNlcnZlciBleHRlbnNpb24uIEVsc2UsIHNpZ25pZmllcyB0aGF0IHRoZSBleHRlbnNpb24gd2FzIGFkZGVkIGRpcmVjdGx5XG4gICAgICovXG4gICAgX2dldFNlcnZlckV4dFBhdGNoKG9yaWdpbmFsLCBwbHVnaW5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBleHQoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHNMaXN0ID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50c0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmogPSBldmVudHNMaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIHV0aWxzXzEuaXNMaWZlY3ljbGVFeHRUeXBlKShldmVudE9iai50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlmZWN5Y2xlRXZlbnRPYmogPSBldmVudE9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBpbnN0cnVtZW50YXRpb24uX3dyYXBFeHRNZXRob2RzKGxpZmVjeWNsZUV2ZW50T2JqLm1ldGhvZCwgZXZlbnRPYmoudHlwZSwgcGx1Z2luTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaWZlY3ljbGVFdmVudE9iai5tZXRob2QgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzTGlzdFtpXSA9IGxpZmVjeWNsZUV2ZW50T2JqO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCgwLCB1dGlsc18xLmlzRGlyZWN0RXh0SW5wdXQpKGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0SW5wdXQgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGV4dElucHV0WzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBpbnN0cnVtZW50YXRpb24uX3dyYXBFeHRNZXRob2RzKG1ldGhvZCwgZXh0SW5wdXRbMF0sIHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbZXh0SW5wdXRbMF0sIGhhbmRsZXIsIGV4dElucHV0WzJdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoMCwgdXRpbHNfMS5pc0xpZmVjeWNsZUV4dEV2ZW50T2JqKShhcmdzWzBdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpZmVjeWNsZUV2ZW50T2JqID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gaW5zdHJ1bWVudGF0aW9uLl93cmFwRXh0TWV0aG9kcyhsaWZlY3ljbGVFdmVudE9iai5tZXRob2QsIGxpZmVjeWNsZUV2ZW50T2JqLnR5cGUsIHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgICAgIGxpZmVjeWNsZUV2ZW50T2JqLm1ldGhvZCA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgbGlmZWN5Y2xlRXZlbnRPYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaGVzIHRoZSBTZXJ2ZXIucm91dGUgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBlaXRoZXIgb25lIG9yIGFuIGFycmF5XG4gICAgICogb2YgSGFwaS5TZXJ2ZXJSb3V0ZSBvYmplY3RzIGFuZCBhZGRzIGluc3RydW1lbnRhdGlvbiBvbiBlYWNoIHJvdXRlIHZpYSBhIGNhbGwgdG9cbiAgICAgKiB0aGUgQGZ1bmN0aW9uIF93cmFwUm91dGVIYW5kbGVyIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7SGFwaVNlcnZlclJvdXRlSW5wdXRNZXRob2R9IG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIHJvdXRlIGZ1bmN0aW9uIHdoaWNoIGFkZHNcbiAgICAgKiB0aGUgcm91dGUgdG8gdGhlIHNlcnZlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGx1Z2luTmFtZV0gLSBpZiBwcmVzZW50LCByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gcmVzcG9uc2libGVcbiAgICAgKiBmb3IgYWRkaW5nIHRoaXMgc2VydmVyIHJvdXRlLiBFbHNlLCBzaWduaWZpZXMgdGhhdCB0aGUgcm91dGUgd2FzIGFkZGVkIGRpcmVjdGx5XG4gICAgICovXG4gICAgX2dldFNlcnZlclJvdXRlUGF0Y2gob3JpZ2luYWwsIHBsdWdpbk5hbWUpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJvdXRlKHJvdXRlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JvdXRlID0gaW5zdHJ1bWVudGF0aW9uLl93cmFwUm91dGVIYW5kbGVyLmNhbGwoaW5zdHJ1bWVudGF0aW9uLCByb3V0ZVtpXSwgcGx1Z2luTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlW2ldID0gbmV3Um91dGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm91dGUgPSBpbnN0cnVtZW50YXRpb24uX3dyYXBSb3V0ZUhhbmRsZXIuY2FsbChpbnN0cnVtZW50YXRpb24sIHJvdXRlLCBwbHVnaW5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbcm91dGVdKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JhcHMgbmV3bHkgcmVnaXN0ZXJlZCBwbHVnaW5zIHRvIGFkZCBpbnN0cnVtZW50YXRpb24gdG8gdGhlIHBsdWdpbidzIGNsb25lIG9mXG4gICAgICogdGhlIG9yaWdpbmFsIHNlcnZlci4gU3BlY2lmaWNhbGx5LCB3cmFwcyB0aGUgc2VydmVyLnJvdXRlIGFuZCBzZXJ2ZXIuZXh0IGZ1bmN0aW9uc1xuICAgICAqIHZpYSBjYWxscyB0byBAZnVuY3Rpb24gX2dldFNlcnZlclJvdXRlUGF0Y2ggYW5kIEBmdW5jdGlvbiBfZ2V0U2VydmVyRXh0UGF0Y2hcbiAgICAgKiBAcGFyYW0ge0hhcGkuUGx1Z2luPFQ+fSBwbHVnaW4gLSB0aGUgbmV3IHBsdWdpbiB3aGljaCBpcyBiZWluZyBpbnN0cnVtZW50ZWRcbiAgICAgKi9cbiAgICBfd3JhcFJlZ2lzdGVySGFuZGxlcihwbHVnaW4pIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9ICgwLCB1dGlsc18xLmdldFBsdWdpbk5hbWUpKHBsdWdpbik7XG4gICAgICAgIGNvbnN0IG9sZFJlZ2lzdGVyID0gcGx1Z2luLnJlZ2lzdGVyO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgbmV3UmVnaXN0ZXJIYW5kbGVyID0gZnVuY3Rpb24gKHNlcnZlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgc2VsZi5fd3JhcChzZXJ2ZXIsICdyb3V0ZScsIG9yaWdpbmFsID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLl9nZXRTZXJ2ZXJSb3V0ZVBhdGNoLmJpbmQoaW5zdHJ1bWVudGF0aW9uKShvcmlnaW5hbCwgcGx1Z2luTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENhc3RpbmcgYXMgYW55IGlzIG5lY2Vzc2FyeSBoZXJlIGR1ZSB0byBtdWx0aXBsZSBvdmVybG9hZHMgb24gdGhlIEhhcGkuZXh0XG4gICAgICAgICAgICAvLyBmdW5jdGlvbiwgd2hpY2ggcmVxdWlyZXMgc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZGlmZmVyZW50IHBhcmFtZXRlcnNcbiAgICAgICAgICAgIC8vIGFzIGV4dGVuc2lvbiBpbnB1dHNcbiAgICAgICAgICAgIHNlbGYuX3dyYXAoc2VydmVyLCAnZXh0Jywgb3JpZ2luYWxFeHRIYW5kbGVyID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLl9nZXRTZXJ2ZXJFeHRQYXRjaC5iaW5kKGluc3RydW1lbnRhdGlvbikoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV4dEhhbmRsZXIsIHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2xkUmVnaXN0ZXIuY2FsbCh0aGlzLCBzZXJ2ZXIsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBwbHVnaW4ucmVnaXN0ZXIgPSBuZXdSZWdpc3RlckhhbmRsZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyYXBzIHJlcXVlc3QgZXh0ZW5zaW9uIG1ldGhvZHMgdG8gYWRkIGluc3RydW1lbnRhdGlvbiB0byBlYWNoIG5ldyBleHRlbnNpb24gaGFuZGxlci5cbiAgICAgKiBQYXRjaGVzIGVhY2ggaW5kaXZpZHVhbCBleHRlbnNpb24gaW4gb3JkZXIgdG8gY3JlYXRlIHRoZVxuICAgICAqIHNwYW4gYW5kIHByb3BhZ2F0ZSBjb250ZXh0LiBJdCBkb2VzIG5vdCBjcmVhdGUgc3BhbnMgd2hlbiB0aGVyZSBpcyBubyBwYXJlbnQgc3Bhbi5cbiAgICAgKiBAcGFyYW0ge1BhdGNoYWJsZUV4dE1ldGhvZCB8IFBhdGNoYWJsZUV4dE1ldGhvZFtdfSBtZXRob2QgLSB0aGUgcmVxdWVzdCBleHRlbnNpb25cbiAgICAgKiBoYW5kbGVyIHdoaWNoIGlzIGJlaW5nIGluc3RydW1lbnRlZFxuICAgICAqIEBwYXJhbSB7SGFwaS5TZXJ2ZXJSZXF1ZXN0RXh0VHlwZX0gZXh0UG9pbnQgLSB0aGUgcG9pbnQgaW4gdGhlIEhhcGkgcmVxdWVzdCBsaWZlY3ljbGVcbiAgICAgKiB3aGljaCB0aGlzIGV4dGVuc2lvbiB0YXJnZXRzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwbHVnaW5OYW1lXSAtIGlmIHByZXNlbnQsIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiByZXNwb25zaWJsZVxuICAgICAqIGZvciBhZGRpbmcgdGhpcyBzZXJ2ZXIgcm91dGUuIEVsc2UsIHNpZ25pZmllcyB0aGF0IHRoZSByb3V0ZSB3YXMgYWRkZWQgZGlyZWN0bHlcbiAgICAgKi9cbiAgICBfd3JhcEV4dE1ldGhvZHMobWV0aG9kLCBleHRQb2ludCwgcGx1Z2luTmFtZSkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICBpZiAobWV0aG9kIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kW2ldID0gaW5zdHJ1bWVudGF0aW9uLl93cmFwRXh0TWV0aG9kcyhtZXRob2RbaV0sIGV4dFBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKDAsIHV0aWxzXzEuaXNQYXRjaGFibGVFeHRNZXRob2QpKG1ldGhvZCkpIHtcbiAgICAgICAgICAgIGlmIChtZXRob2RbaW50ZXJuYWxfdHlwZXNfMS5oYW5kbGVyUGF0Y2hlZF0gPT09IHRydWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICAgICAgICAgIG1ldGhvZFtpbnRlcm5hbF90eXBlc18xLmhhbmRsZXJQYXRjaGVkXSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBuZXdIYW5kbGVyID0gYXN5bmMgZnVuY3Rpb24gKC4uLnBhcmFtcykge1xuICAgICAgICAgICAgICAgIGlmIChhcGkudHJhY2UuZ2V0U3BhbihhcGkuY29udGV4dC5hY3RpdmUoKSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgbWV0aG9kLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gKDAsIHV0aWxzXzEuZ2V0RXh0TWV0YWRhdGEpKGV4dFBvaW50LCBwbHVnaW5OYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4obWV0YWRhdGEubmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBtZXRhZGF0YS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcGkuY29udGV4dC53aXRoKGFwaS50cmFjZS5zZXRTcGFuKGFwaS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgbWV0aG9kLCB1bmRlZmluZWQsIC4uLnBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gbmV3SGFuZGxlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaGVzIGVhY2ggaW5kaXZpZHVhbCByb3V0ZSBoYW5kbGVyIG1ldGhvZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlXG4gICAgICogc3BhbiBhbmQgcHJvcGFnYXRlIGNvbnRleHQuIEl0IGRvZXMgbm90IGNyZWF0ZSBzcGFucyB3aGVuIHRoZXJlIGlzIG5vIHBhcmVudCBzcGFuLlxuICAgICAqIEBwYXJhbSB7UGF0Y2hhYmxlU2VydmVyUm91dGV9IHJvdXRlIC0gdGhlIHJvdXRlIGhhbmRsZXIgd2hpY2ggaXMgYmVpbmcgaW5zdHJ1bWVudGVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwbHVnaW5OYW1lXSAtIGlmIHByZXNlbnQsIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiByZXNwb25zaWJsZVxuICAgICAqIGZvciBhZGRpbmcgdGhpcyBzZXJ2ZXIgcm91dGUuIEVsc2UsIHNpZ25pZmllcyB0aGF0IHRoZSByb3V0ZSB3YXMgYWRkZWQgZGlyZWN0bHlcbiAgICAgKi9cbiAgICBfd3JhcFJvdXRlSGFuZGxlcihyb3V0ZSwgcGx1Z2luTmFtZSkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICBpZiAocm91dGVbaW50ZXJuYWxfdHlwZXNfMS5oYW5kbGVyUGF0Y2hlZF0gPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgICAgIHJvdXRlW2ludGVybmFsX3R5cGVzXzEuaGFuZGxlclBhdGNoZWRdID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgd3JhcEhhbmRsZXIgPSBvbGRIYW5kbGVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4ucGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFwaS50cmFjZS5nZXRTcGFuKGFwaS5jb250ZXh0LmFjdGl2ZSgpKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBvbGRIYW5kbGVyLmNhbGwodGhpcywgLi4ucGFyYW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcnBjTWV0YWRhdGEgPSAoMCwgY29yZV8xLmdldFJQQ01ldGFkYXRhKShhcGkuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJwY01ldGFkYXRhPy50eXBlID09PSBjb3JlXzEuUlBDVHlwZS5IVFRQKSB7XG4gICAgICAgICAgICAgICAgICAgIHJwY01ldGFkYXRhLnJvdXRlID0gcm91dGUucGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSAoMCwgdXRpbHNfMS5nZXRSb3V0ZU1ldGFkYXRhKShyb3V0ZSwgaW5zdHJ1bWVudGF0aW9uLl9zZW1jb252U3RhYmlsaXR5LCBwbHVnaW5OYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4obWV0YWRhdGEubmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBtZXRhZGF0YS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcGkuY29udGV4dC53aXRoKGFwaS50cmFjZS5zZXRTcGFuKGFwaS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4gb2xkSGFuZGxlci5jYWxsKHRoaXMsIC4uLnBhcmFtcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIHJvdXRlLmhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdXRlLmhhbmRsZXIgPSB3cmFwSGFuZGxlcihyb3V0ZS5oYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygcm91dGUub3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgb2xkT3B0aW9ucyA9IHJvdXRlLm9wdGlvbnM7XG4gICAgICAgICAgICByb3V0ZS5vcHRpb25zID0gZnVuY3Rpb24gKHNlcnZlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvbGRPcHRpb25zKHNlcnZlcik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5oYW5kbGVyID0gd3JhcEhhbmRsZXIob3B0aW9ucy5oYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiByb3V0ZS5vcHRpb25zPy5oYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3V0ZS5vcHRpb25zLmhhbmRsZXIgPSB3cmFwSGFuZGxlcihyb3V0ZS5vcHRpb25zLmhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3V0ZTtcbiAgICB9XG59XG5leHBvcnRzLkhhcGlJbnN0cnVtZW50YXRpb24gPSBIYXBpSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuSGFwaUluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhhcGlJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkhhcGlJbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXR0cmlidXRlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5WRVJTSU9OID0gJzAuMjA3LjAnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSFRUUF9GTEFWT1JfVkFMVUVfSFRUUF8xXzEgPSBleHBvcnRzLk5FVF9UUkFOU1BPUlRfVkFMVUVfSVBfVURQID0gZXhwb3J0cy5ORVRfVFJBTlNQT1JUX1ZBTFVFX0lQX1RDUCA9IGV4cG9ydHMuQVRUUl9ORVRfVFJBTlNQT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9JUCA9IGV4cG9ydHMuQVRUUl9ORVRfSE9TVF9QT1JUID0gZXhwb3J0cy5BVFRSX05FVF9IT1NUX05BTUUgPSBleHBvcnRzLkFUVFJfTkVUX0hPU1RfSVAgPSBleHBvcnRzLkFUVFJfSFRUUF9VU0VSX0FHRU5UID0gZXhwb3J0cy5BVFRSX0hUVFBfVVJMID0gZXhwb3J0cy5BVFRSX0hUVFBfVEFSR0VUID0gZXhwb3J0cy5BVFRSX0hUVFBfU1RBVFVTX0NPREUgPSBleHBvcnRzLkFUVFJfSFRUUF9TRVJWRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9IVFRQX1NDSEVNRSA9IGV4cG9ydHMuQVRUUl9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCA9IGV4cG9ydHMuQVRUUl9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIID0gZXhwb3J0cy5BVFRSX0hUVFBfUkVRVUVTVF9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQgPSBleHBvcnRzLkFUVFJfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RIID0gZXhwb3J0cy5BVFRSX0hUVFBfTUVUSE9EID0gZXhwb3J0cy5BVFRSX0hUVFBfSE9TVCA9IGV4cG9ydHMuQVRUUl9IVFRQX0ZMQVZPUiA9IGV4cG9ydHMuQVRUUl9IVFRQX0NMSUVOVF9JUCA9IGV4cG9ydHMuVVNFUl9BR0VOVF9TWU5USEVUSUNfVFlQRV9WQUxVRV9URVNUID0gZXhwb3J0cy5VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFX1ZBTFVFX0JPVCA9IGV4cG9ydHMuQVRUUl9VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjYXRlZ29yeSBvZiBzeW50aGV0aWMgdHJhZmZpYywgc3VjaCBhcyB0ZXN0cyBvciBib3RzLlxuICpcbiAqIEBub3RlIFRoaXMgYXR0cmlidXRlICoqTUFZKiogYmUgZGVyaXZlZCBmcm9tIHRoZSBjb250ZW50cyBvZiB0aGUgYHVzZXJfYWdlbnQub3JpZ2luYWxgIGF0dHJpYnV0ZS4gQ29tcG9uZW50cyB0aGF0IHBvcHVsYXRlIHRoZSBhdHRyaWJ1dGUgYXJlIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB3aGF0IHRoZXkgY29uc2lkZXIgdG8gYmUgc3ludGhldGljIGJvdCBvciB0ZXN0IHRyYWZmaWMuIFRoaXMgYXR0cmlidXRlIGNhbiBlaXRoZXIgYmUgc2V0IGZvciBzZWxmLWlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLCBvciBvbiB0ZWxlbWV0cnkgZGV0ZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIGFzIGEgcmVzdWx0IG9mIGEgc3ludGhldGljIHJlcXVlc3QuIFRoaXMgYXR0cmlidXRlIGlzIHVzZWZ1bCBmb3IgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBnZW51aW5lIGNsaWVudCB0cmFmZmljIGFuZCBzeW50aGV0aWMgdHJhZmZpYyBnZW5lcmF0ZWQgYnkgYm90cyBvciB0ZXN0cy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFID0gJ3VzZXJfYWdlbnQuc3ludGhldGljLnR5cGUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiYm90XCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFfS5cbiAqL1xuZXhwb3J0cy5VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFX1ZBTFVFX0JPVCA9ICdib3QnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwidGVzdFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfVVNFUl9BR0VOVF9TWU5USEVUSUNfVFlQRX0uXG4gKi9cbmV4cG9ydHMuVVNFUl9BR0VOVF9TWU5USEVUSUNfVFlQRV9WQUxVRV9URVNUID0gJ3Rlc3QnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGNsaWVudC5hZGRyZXNzYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIFwiODMuMTY0LjE2MC4xMDJcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgY2xpZW50LmFkZHJlc3NgLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9DTElFTlRfSVAgPSAnaHR0cC5jbGllbnRfaXAnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYG5ldHdvcmsucHJvdG9jb2wubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYG5ldHdvcmsucHJvdG9jb2wubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9IVFRQX0ZMQVZPUiA9ICdodHRwLmZsYXZvcic7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBvbmUgb2YgYHNlcnZlci5hZGRyZXNzYCwgYGNsaWVudC5hZGRyZXNzYCBvciBgaHR0cC5yZXF1ZXN0LmhlYWRlci5ob3N0YCBpbnN0ZWFkLCBkZXBlbmRpbmcgb24gdGhlIHVzYWdlLlxuICpcbiAqIEBleGFtcGxlIHd3dy5leGFtcGxlLm9yZ1xuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBvbmUgb2YgYHNlcnZlci5hZGRyZXNzYCwgYGNsaWVudC5hZGRyZXNzYCBvciBgaHR0cC5yZXF1ZXN0LmhlYWRlci5ob3N0YCwgZGVwZW5kaW5nIG9uIHRoZSB1c2FnZS5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfSE9TVCA9ICdodHRwLmhvc3QnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGh0dHAucmVxdWVzdC5tZXRob2RgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgR0VUXG4gKiBAZXhhbXBsZSBQT1NUXG4gKiBAZXhhbXBsZSBIRUFEXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBodHRwLnJlcXVlc3QubWV0aG9kYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfTUVUSE9EID0gJ2h0dHAubWV0aG9kJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBodHRwLnJlcXVlc3QuaGVhZGVyLjxrZXk+YCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIDM0OTVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGh0dHAucmVxdWVzdC5oZWFkZXIuPGtleT5gLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RIID0gJ2h0dHAucmVxdWVzdF9jb250ZW50X2xlbmd0aCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgaHR0cC5yZXF1ZXN0LmJvZHkuc2l6ZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSA1NDkzXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBodHRwLnJlcXVlc3QuYm9keS5zaXplYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfUkVRVUVTVF9DT05URU5UX0xFTkdUSF9VTkNPTVBSRVNTRUQgPSAnaHR0cC5yZXF1ZXN0X2NvbnRlbnRfbGVuZ3RoX3VuY29tcHJlc3NlZCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgaHR0cC5yZXNwb25zZS5oZWFkZXIuPGtleT5gIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgMzQ5NVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgaHR0cC5yZXNwb25zZS5oZWFkZXIuPGtleT5gLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9SRVNQT05TRV9DT05URU5UX0xFTkdUSCA9ICdodHRwLnJlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBodHRwLnJlc3BvbnNlLmJvZHkuc2l6ZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSA1NDkzXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2UgYnkgYGh0dHAucmVzcG9uc2UuYm9keS5zaXplYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEID0gJ2h0dHAucmVzcG9uc2VfY29udGVudF9sZW5ndGhfdW5jb21wcmVzc2VkJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGB1cmwuc2NoZW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGh0dHBcbiAqIEBleGFtcGxlIGh0dHBzXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGB1cmwuc2NoZW1lYCBpbnN0ZWFkLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9TQ0hFTUUgPSAnaHR0cC5zY2hlbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5hZGRyZXNzYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGV4YW1wbGUuY29tXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IVFRQX1NFUlZFUl9OQU1FID0gJ2h0dHAuc2VydmVyX25hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGh0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgMjAwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfU1RBVFVTX0NPREUgPSAnaHR0cC5zdGF0dXNfY29kZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgdXJsLnBhdGhgIGFuZCBgdXJsLnF1ZXJ5YCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIC9zZWFyY2g/cT1PcGVuVGVsZW1ldHJ5I1NlbUNvbnZcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgU3BsaXQgdG8gYHVybC5wYXRoYCBhbmQgYHVybC5xdWVyeS5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfVEFSR0VUID0gJ2h0dHAudGFyZ2V0Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGB1cmwuZnVsbGAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBodHRwczovL3d3dy5mb28uYmFyL3NlYXJjaD9xPU9wZW5UZWxlbWV0cnkjU2VtQ29udlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgdXJsLmZ1bGxgLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9VUkwgPSAnaHR0cC51cmwnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHVzZXJfYWdlbnQub3JpZ2luYWxgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgQ0VSTi1MaW5lTW9kZS8yLjE1IGxpYnd3dy8yLjE3YjNcbiAqIEBleGFtcGxlIE1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTRfN18xIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xNC4xLjIgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHVzZXJfYWdlbnQub3JpZ2luYWxgLlxuICovXG5leHBvcnRzLkFUVFJfSFRUUF9VU0VSX0FHRU5UID0gJ2h0dHAudXNlcl9hZ2VudCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgbmV0d29yay5sb2NhbC5hZGRyZXNzYC5cbiAqXG4gKiBAZXhhbXBsZSBcIjE5Mi4xNjguMC4xXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYG5ldHdvcmsubG9jYWwuYWRkcmVzc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfSE9TVF9JUCA9ICduZXQuaG9zdC5pcCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgLlxuICpcbiAqIEBleGFtcGxlIGV4YW1wbGUuY29tXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfSE9TVF9OQU1FID0gJ25ldC5ob3N0Lm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YC5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfSE9TVF9QT1JUID0gJ25ldC5ob3N0LnBvcnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYG5ldHdvcmsucGVlci5hZGRyZXNzYC5cbiAqXG4gKiBAZXhhbXBsZSBcIjEyNy4wLjAuMVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBuZXR3b3JrLnBlZXIuYWRkcmVzc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9JUCA9ICduZXQucGVlci5pcCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgbmV0d29yay50cmFuc3BvcnRgLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgbmV0d29yay50cmFuc3BvcnRgLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1RSQU5TUE9SVCA9ICduZXQudHJhbnNwb3J0Jztcbi8qKlxuICogRW51bSB2YWx1ZSBcImlwX3RjcFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfTkVUX1RSQU5TUE9SVH0uXG4gKi9cbmV4cG9ydHMuTkVUX1RSQU5TUE9SVF9WQUxVRV9JUF9UQ1AgPSAnaXBfdGNwJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImlwX3VkcFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfTkVUX1RSQU5TUE9SVH0uXG4gKi9cbmV4cG9ydHMuTkVUX1RSQU5TUE9SVF9WQUxVRV9JUF9VRFAgPSAnaXBfdWRwJztcbi8qKlxuICogRW51bSB2YWx1ZSBcIjEuMVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfSFRUUF9GTEFWT1J9LlxuICovXG5leHBvcnRzLkhUVFBfRkxBVk9SX1ZBTFVFX0hUVFBfMV8xID0gJzEuMSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHZvaWQgMDtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktc3BlY2lmaWNhdGlvbi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL3RyYWNlL3NlbWFudGljX2NvbnZlbnRpb25zL2h0dHAubWRcbiAqL1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiSFRUUF9FUlJPUl9OQU1FXCJdID0gXCJodHRwLmVycm9yX25hbWVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkhUVFBfRVJST1JfTUVTU0FHRVwiXSA9IFwiaHR0cC5lcnJvcl9tZXNzYWdlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJIVFRQX1NUQVRVU19URVhUXCJdID0gXCJodHRwLnN0YXR1c190ZXh0XCI7XG59KShBdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgfHwgKGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXR0cmlidXRlTmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfUVVFUllfU1RSSU5HU19UT19SRURBQ1QgPSBleHBvcnRzLlNUUl9SRURBQ1RFRCA9IGV4cG9ydHMuU1lOVEhFVElDX0JPVF9OQU1FUyA9IGV4cG9ydHMuU1lOVEhFVElDX1RFU1RfTkFNRVMgPSB2b2lkIDA7XG4vKipcbiAqIE5hbWVzIG9mIHBvc3NpYmxlIHN5bnRoZXRpYyB0ZXN0IHNvdXJjZXMuXG4gKi9cbmV4cG9ydHMuU1lOVEhFVElDX1RFU1RfTkFNRVMgPSBbJ2Fsd2F5c29uJ107XG4vKipcbiAqIE5hbWVzIG9mIHBvc3NpYmxlIHN5bnRoZXRpYyBib3Qgc291cmNlcy5cbiAqL1xuZXhwb3J0cy5TWU5USEVUSUNfQk9UX05BTUVTID0gWydnb29nbGVib3QnLCAnYmluZ2JvdCddO1xuLyoqXG4gKiBSRURBQ1RFRCBzdHJpbmcgdXNlZCB0byByZXBsYWNlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBpbiBVUkxzLlxuICovXG5leHBvcnRzLlNUUl9SRURBQ1RFRCA9ICdSRURBQ1RFRCc7XG4vKipcbiAqIExpc3Qgb2YgVVJMIHF1ZXJ5IGtleXMgdGhhdCBhcmUgY29uc2lkZXJlZCBzZW5zaXRpdmUgYW5kIHdob3NlIHZhbHVlIHNob3VsZCBiZSByZWRhY3RlZC5cbiAqL1xuZXhwb3J0cy5ERUZBVUxUX1FVRVJZX1NUUklOR1NfVE9fUkVEQUNUID0gW1xuICAgICdzaWcnLFxuICAgICdTaWduYXR1cmUnLFxuICAgICdBV1NBY2Nlc3NLZXlJZCcsXG4gICAgJ1gtR29vZy1TaWduYXR1cmUnLFxuXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVybmFsLXR5cGVzLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gYnkgdGhlIHBhcnNlciBvbiB1bmV4cGVjdGVkIGlucHV0LlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgVGhlIHVuZXhwZWN0ZWQgaW5wdXQuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIFBhcnNlRXJyb3IobWVzc2FnZSwgaW5wdXQpIHtcbiAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VFcnJvcik7XG5cbiAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLmlucHV0ID0gaW5wdXQ7XG59XG5cbnV0aWwuaW5oZXJpdHMoUGFyc2VFcnJvciwgRXJyb3IpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlRXJyb3I7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayBpZiBhIGNoYXJhY3RlciBpcyBhIGRlbGltaXRlciBhcyBkZWZpbmVkIGluIHNlY3Rpb24gMy4yLjYgb2YgUkZDIDcyMzAuXG4gKlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBkZWxpbWl0ZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gaXNEZWxpbWl0ZXIoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMHgyMiAgICAgICAgICAgICAgICAvLyAnXCInXG4gICAgfHwgY29kZSA9PT0gMHgyOCAgICAgICAgICAgICAgICAgIC8vICcoJ1xuICAgIHx8IGNvZGUgPT09IDB4MjkgICAgICAgICAgICAgICAgICAvLyAnKSdcbiAgICB8fCBjb2RlID09PSAweDJDICAgICAgICAgICAgICAgICAgLy8gJywnXG4gICAgfHwgY29kZSA9PT0gMHgyRiAgICAgICAgICAgICAgICAgIC8vICcvJ1xuICAgIHx8IGNvZGUgPj0gMHgzQSAmJiBjb2RlIDw9IDB4NDAgICAvLyAnOicsICc7JywgJzwnLCAnPScsICc+JywgJz8nICdAJ1xuICAgIHx8IGNvZGUgPj0gMHg1QiAmJiBjb2RlIDw9IDB4NUQgICAvLyAnWycsICdcXCcsICddJ1xuICAgIHx8IGNvZGUgPT09IDB4N0IgICAgICAgICAgICAgICAgICAvLyAneydcbiAgICB8fCBjb2RlID09PSAweDdEOyAgICAgICAgICAgICAgICAgLy8gJ30nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYWxsb3dlZCBpbiBhIHRva2VuIGFzIGRlZmluZWQgaW4gc2VjdGlvbiAzLjIuNlxuICogb2YgUkZDIDcyMzAuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGUgVGhlIGNvZGUgb2YgdGhlIGNoYXJhY3RlciB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNoYXJhY3RlciBpcyBhbGxvd2VkLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MjEgICAgICAgICAgICAgICAgLy8gJyEnXG4gICAgfHwgY29kZSA+PSAweDIzICYmIGNvZGUgPD0gMHgyNyAgIC8vICcjJywgJyQnLCAnJScsICcmJywgJycnXG4gICAgfHwgY29kZSA9PT0gMHgyQSAgICAgICAgICAgICAgICAgIC8vICcqJ1xuICAgIHx8IGNvZGUgPT09IDB4MkIgICAgICAgICAgICAgICAgICAvLyAnKydcbiAgICB8fCBjb2RlID09PSAweDJEICAgICAgICAgICAgICAgICAgLy8gJy0nXG4gICAgfHwgY29kZSA9PT0gMHgyRSAgICAgICAgICAgICAgICAgIC8vICcuJ1xuICAgIHx8IGNvZGUgPj0gMHgzMCAmJiBjb2RlIDw9IDB4MzkgICAvLyAwLTlcbiAgICB8fCBjb2RlID49IDB4NDEgJiYgY29kZSA8PSAweDVBICAgLy8gQS1aXG4gICAgfHwgY29kZSA+PSAweDVFICYmIGNvZGUgPD0gMHg3QSAgIC8vICdeJywgJ18nLCAnYCcsIGEtelxuICAgIHx8IGNvZGUgPT09IDB4N0MgICAgICAgICAgICAgICAgICAvLyAnfCdcbiAgICB8fCBjb2RlID09PSAweDdFOyAgICAgICAgICAgICAgICAgLy8gJ34nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGBjb2RlYCBpcyBpbiB0aGUgJXgyMC03RSByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBpc1ByaW50KGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPj0gMHgyMCAmJiBjb2RlIDw9IDB4N0U7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYW4gZXh0ZW5kZWQgQVNDSUkgY2hhcmFjdGVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGBjb2RlYCBpcyBpbiB0aGUgJXg4MC1GRiByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBpc0V4dGVuZGVkKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPj0gMHg4MCAmJiBjb2RlIDw9IDB4RkY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0RlbGltaXRlcjogaXNEZWxpbWl0ZXIsXG4gIGlzVG9rZW5DaGFyOiBpc1Rva2VuQ2hhcixcbiAgaXNFeHRlbmRlZDogaXNFeHRlbmRlZCxcbiAgaXNQcmludDogaXNQcmludFxufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxudmFyIFBhcnNlRXJyb3IgPSByZXF1aXJlKCcuL2xpYi9lcnJvcicpO1xudmFyIGFzY2lpID0gcmVxdWlyZSgnLi9saWIvYXNjaWknKTtcblxudmFyIGlzRGVsaW1pdGVyID0gYXNjaWkuaXNEZWxpbWl0ZXI7XG52YXIgaXNUb2tlbkNoYXIgPSBhc2NpaS5pc1Rva2VuQ2hhcjtcbnZhciBpc0V4dGVuZGVkID0gYXNjaWkuaXNFeHRlbmRlZDtcbnZhciBpc1ByaW50ID0gYXNjaWkuaXNQcmludDtcblxuLyoqXG4gKiBVbmVzY2FwZSBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gdW5lc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIG5ldyB1bmVzY2FwZWQgc3RyaW5nLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGFuIHVuZXhwZWN0ZWQgY2hhcmFjdGVyIGlzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXIgVGhlIGhlYWRlciBmaWVsZCB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gb2YgdGhlIHVuZXhwZWN0ZWQgY2hhcmFjdGVyLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1bmV4cGVjdGVkQ2hhcmFjdGVyTWVzc2FnZShoZWFkZXIsIHBvc2l0aW9uKSB7XG4gIHJldHVybiB1dGlsLmZvcm1hdChcbiAgICBcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICclcycgYXQgaW5kZXggJWRcIixcbiAgICBoZWFkZXIuY2hhckF0KHBvc2l0aW9uKSxcbiAgICBwb3NpdGlvblxuICApO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBgRm9yd2FyZGVkYCBoZWFkZXIgZmllbGQgdmFsdWUgaW50byBhbiBhcnJheSBvZiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXIgVGhlIGhlYWRlciBmaWVsZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtPYmplY3RbXX1cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcGFyc2UoaGVhZGVyKSB7XG4gIHZhciBtdXN0VW5lc2NhcGUgPSBmYWxzZTtcbiAgdmFyIGlzRXNjYXBpbmcgPSBmYWxzZTtcbiAgdmFyIGluUXVvdGVzID0gZmFsc2U7XG4gIHZhciBmb3J3YXJkZWQgPSB7fTtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgcGFyYW1ldGVyO1xuICB2YXIgY29kZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlci5sZW5ndGg7IGkrKykge1xuICAgIGNvZGUgPSBoZWFkZXIuY2hhckNvZGVBdChpKTtcblxuICAgIGlmIChwYXJhbWV0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICBpICE9PSAwICYmXG4gICAgICAgIHN0YXJ0ID09PSAtMSAmJlxuICAgICAgICAoY29kZSA9PT0gMHgyMC8qJyAnKi8gfHwgY29kZSA9PT0gMHgwOS8qJ1xcdCcqLylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzVG9rZW5DaGFyKGNvZGUpKSB7XG4gICAgICAgIGlmIChzdGFydCA9PT0gLTEpIHN0YXJ0ID0gaTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgzRC8qJz0nKi8gJiYgc3RhcnQgIT09IC0xKSB7XG4gICAgICAgIHBhcmFtZXRlciA9IGhlYWRlci5zbGljZShzdGFydCwgaSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKHVuZXhwZWN0ZWRDaGFyYWN0ZXJNZXNzYWdlKGhlYWRlciwgaSksIGhlYWRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0VzY2FwaW5nICYmIChjb2RlID09PSAweDA5IHx8IGlzUHJpbnQoY29kZSkgfHwgaXNFeHRlbmRlZChjb2RlKSkpIHtcbiAgICAgICAgaXNFc2NhcGluZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChpc1Rva2VuQ2hhcihjb2RlKSkge1xuICAgICAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKHVuZXhwZWN0ZWRDaGFyYWN0ZXJNZXNzYWdlKGhlYWRlciwgaSksIGhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhcnQgPT09IC0xKSBzdGFydCA9IGk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVsaW1pdGVyKGNvZGUpIHx8IGlzRXh0ZW5kZWQoY29kZSkpIHtcbiAgICAgICAgaWYgKGluUXVvdGVzKSB7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDB4MjIvKidcIicqLykge1xuICAgICAgICAgICAgaW5RdW90ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDVDLyonXFwnKi8pIHtcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpIHN0YXJ0ID0gaTtcbiAgICAgICAgICAgIGlzRXNjYXBpbmcgPSBtdXN0VW5lc2NhcGUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT09IC0xKSB7XG4gICAgICAgICAgICBzdGFydCA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MjIgJiYgaGVhZGVyLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDNEKSB7XG4gICAgICAgICAgaW5RdW90ZXMgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIChjb2RlID09PSAweDJDLyonLCcqL3x8IGNvZGUgPT09IDB4M0IvKic7JyovKSAmJlxuICAgICAgICAgIChzdGFydCAhPT0gLTEgfHwgZW5kICE9PSAtMSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0ICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGVuZCA9PT0gLTEpIGVuZCA9IGk7XG4gICAgICAgICAgICBmb3J3YXJkZWRbcGFyYW1ldGVyXSA9IG11c3RVbmVzY2FwZVxuICAgICAgICAgICAgICA/IGRlY29kZShoZWFkZXIuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICAgICAgICAgIDogaGVhZGVyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3J3YXJkZWRbcGFyYW1ldGVyXSA9ICcnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlID09PSAweDJDKSB7XG4gICAgICAgICAgICBvdXRwdXQucHVzaChmb3J3YXJkZWQpO1xuICAgICAgICAgICAgZm9yd2FyZGVkID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyYW1ldGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHN0YXJ0ID0gZW5kID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IodW5leHBlY3RlZENoYXJhY3Rlck1lc3NhZ2UoaGVhZGVyLCBpKSwgaGVhZGVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDIwIHx8IGNvZGUgPT09IDB4MDkpIHtcbiAgICAgICAgaWYgKGVuZCAhPT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChpblF1b3Rlcykge1xuICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpIHN0YXJ0ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydCAhPT0gLTEpIHtcbiAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKHVuZXhwZWN0ZWRDaGFyYWN0ZXJNZXNzYWdlKGhlYWRlciwgaSksIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKHVuZXhwZWN0ZWRDaGFyYWN0ZXJNZXNzYWdlKGhlYWRlciwgaSksIGhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHBhcmFtZXRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgaW5RdW90ZXMgfHxcbiAgICAoc3RhcnQgPT09IC0xICYmIGVuZCA9PT0gLTEpIHx8XG4gICAgY29kZSA9PT0gMHgyMCB8fFxuICAgIGNvZGUgPT09IDB4MDlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0JywgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChzdGFydCAhPT0gLTEpIHtcbiAgICBpZiAoZW5kID09PSAtMSkgZW5kID0gaTtcbiAgICBmb3J3YXJkZWRbcGFyYW1ldGVyXSA9IG11c3RVbmVzY2FwZVxuICAgICAgPyBkZWNvZGUoaGVhZGVyLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgOiBoZWFkZXIuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH0gZWxzZSB7XG4gICAgZm9yd2FyZGVkW3BhcmFtZXRlcl0gPSAnJztcbiAgfVxuXG4gIG91dHB1dC5wdXNoKGZvcndhcmRlZCk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5oZWFkZXJDYXB0dXJlID0gZXhwb3J0cy5nZXRJbmNvbWluZ1N0YWJsZVJlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSA9IGV4cG9ydHMuZ2V0SW5jb21pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2UgPSBleHBvcnRzLmdldEluY29taW5nUmVxdWVzdEF0dHJpYnV0ZXNPblJlc3BvbnNlID0gZXhwb3J0cy5nZXRJbmNvbWluZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzID0gZXhwb3J0cy5nZXRJbmNvbWluZ1JlcXVlc3RBdHRyaWJ1dGVzID0gZXhwb3J0cy5nZXRSZW1vdGVDbGllbnRBZGRyZXNzID0gZXhwb3J0cy5nZXRPdXRnb2luZ1N0YWJsZVJlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSA9IGV4cG9ydHMuZ2V0T3V0Z29pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2UgPSBleHBvcnRzLmdldE91dGdvaW5nUmVxdWVzdEF0dHJpYnV0ZXNPblJlc3BvbnNlID0gZXhwb3J0cy5zZXRBdHRyaWJ1dGVzRnJvbUh0dHBLaW5kID0gZXhwb3J0cy5nZXRPdXRnb2luZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzID0gZXhwb3J0cy5nZXRPdXRnb2luZ1JlcXVlc3RBdHRyaWJ1dGVzID0gZXhwb3J0cy5leHRyYWN0SG9zdG5hbWVBbmRQb3J0ID0gZXhwb3J0cy5pc1ZhbGlkT3B0aW9uc1R5cGUgPSBleHBvcnRzLmdldFJlcXVlc3RJbmZvID0gZXhwb3J0cy5pc0NvbXByZXNzZWQgPSBleHBvcnRzLnNldFJlc3BvbnNlQ29udGVudExlbmd0aEF0dHJpYnV0ZSA9IGV4cG9ydHMuc2V0UmVxdWVzdENvbnRlbnRMZW5ndGhBdHRyaWJ1dGUgPSBleHBvcnRzLnNldFNwYW5XaXRoRXJyb3IgPSBleHBvcnRzLnNhdGlzZmllc1BhdHRlcm4gPSBleHBvcnRzLnBhcnNlUmVzcG9uc2VTdGF0dXMgPSBleHBvcnRzLmdldEFic29sdXRlVXJsID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuY29uc3QgaW50ZXJuYWxfdHlwZXNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsLXR5cGVzXCIpO1xuY29uc3QgaW50ZXJuYWxfdHlwZXNfMiA9IHJlcXVpcmUoXCIuL2ludGVybmFsLXR5cGVzXCIpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGZvcndhcmRlZFBhcnNlID0gcmVxdWlyZShcImZvcndhcmRlZC1wYXJzZVwiKTtcbi8qKlxuICogR2V0IGFuIGFic29sdXRlIHVybFxuICovXG5jb25zdCBnZXRBYnNvbHV0ZVVybCA9IChyZXF1ZXN0VXJsLCBoZWFkZXJzLCBmYWxsYmFja1Byb3RvY29sID0gJ2h0dHA6JywgcmVkYWN0ZWRRdWVyeVBhcmFtcyA9IEFycmF5LmZyb20oaW50ZXJuYWxfdHlwZXNfMi5ERUZBVUxUX1FVRVJZX1NUUklOR1NfVE9fUkVEQUNUKSkgPT4ge1xuICAgIGNvbnN0IHJlcVVybE9iamVjdCA9IHJlcXVlc3RVcmwgfHwge307XG4gICAgY29uc3QgcHJvdG9jb2wgPSByZXFVcmxPYmplY3QucHJvdG9jb2wgfHwgZmFsbGJhY2tQcm90b2NvbDtcbiAgICBjb25zdCBwb3J0ID0gKHJlcVVybE9iamVjdC5wb3J0IHx8ICcnKS50b1N0cmluZygpO1xuICAgIGxldCBwYXRoID0gcmVxVXJsT2JqZWN0LnBhdGggfHwgJy8nO1xuICAgIGxldCBob3N0ID0gcmVxVXJsT2JqZWN0Lmhvc3QgfHwgcmVxVXJsT2JqZWN0Lmhvc3RuYW1lIHx8IGhlYWRlcnMuaG9zdCB8fCAnbG9jYWxob3N0JztcbiAgICAvLyBpZiB0aGVyZSBpcyBubyBwb3J0IGluIGhvc3QgYW5kIHRoZXJlIGlzIGEgcG9ydFxuICAgIC8vIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaWYgaXQncyBub3QgODAgYW5kIDQ0MyAoZGVmYXVsdCBwb3J0cylcbiAgICBpZiAoaG9zdC5pbmRleE9mKCc6JykgPT09IC0xICYmXG4gICAgICAgIHBvcnQgJiZcbiAgICAgICAgcG9ydCAhPT0gJzgwJyAmJlxuICAgICAgICBwb3J0ICE9PSAnNDQzJykge1xuICAgICAgICBob3N0ICs9IGA6JHtwb3J0fWA7XG4gICAgfVxuICAgIC8vIFJlZGFjdCBzZW5zaXRpdmUgcXVlcnkgcGFyYW1ldGVyc1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgLy9jb25zdCBbcGF0aG5hbWUsIHF1ZXJ5XSA9IHBhdGguc3BsaXQoJz8nLCAyKTtcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKHBhdGgpO1xuICAgICAgICBjb25zdCBwYXRobmFtZSA9IHBhcnNlZFVybC5wYXRobmFtZSB8fCAnJztcbiAgICAgICAgY29uc3QgcXVlcnkgPSBwYXJzZWRVcmwucXVlcnkgfHwgJyc7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgICAgICBjb25zdCBzZW5zaXRpdmVQYXJhbXNUb1JlZGFjdCA9IHJlZGFjdGVkUXVlcnlQYXJhbXMgfHwgW107XG4gICAgICAgIGZvciAoY29uc3Qgc2Vuc2l0aXZlUGFyYW0gb2Ygc2Vuc2l0aXZlUGFyYW1zVG9SZWRhY3QpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hQYXJhbXMuaGFzKHNlbnNpdGl2ZVBhcmFtKSAmJlxuICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5nZXQoc2Vuc2l0aXZlUGFyYW0pICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5zZXQoc2Vuc2l0aXZlUGFyYW0sIGludGVybmFsX3R5cGVzXzIuU1RSX1JFREFDVEVEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWRhY3RlZFF1ZXJ5ID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgICAgIHBhdGggPSBgJHtwYXRobmFtZX0/JHtyZWRhY3RlZFF1ZXJ5fWA7XG4gICAgfVxuICAgIGNvbnN0IGF1dGhQYXJ0ID0gcmVxVXJsT2JqZWN0LmF1dGggPyBgJHtpbnRlcm5hbF90eXBlc18yLlNUUl9SRURBQ1RFRH06JHtpbnRlcm5hbF90eXBlc18yLlNUUl9SRURBQ1RFRH1AYCA6ICcnO1xuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7YXV0aFBhcnR9JHtob3N0fSR7cGF0aH1gO1xufTtcbmV4cG9ydHMuZ2V0QWJzb2x1dGVVcmwgPSBnZXRBYnNvbHV0ZVVybDtcbi8qKlxuICogUGFyc2Ugc3RhdHVzIGNvZGUgZnJvbSBIVFRQIHJlc3BvbnNlLiBbTW9yZSBkZXRhaWxzXShodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1zcGVjaWZpY2F0aW9uL2Jsb2IvbWFzdGVyL3NwZWNpZmljYXRpb24vZGF0YS1odHRwLm1kI3N0YXR1cylcbiAqL1xuY29uc3QgcGFyc2VSZXNwb25zZVN0YXR1cyA9IChraW5kLCBzdGF0dXNDb2RlKSA9PiB7XG4gICAgY29uc3QgdXBwZXJCb3VuZCA9IGtpbmQgPT09IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCA/IDQwMCA6IDUwMDtcbiAgICAvLyAxeHgsIDJ4eCwgM3h4IGFyZSBPSyBvbiBjbGllbnQgYW5kIHNlcnZlclxuICAgIC8vIDR4eCBpcyBPSyBvbiBzZXJ2ZXJcbiAgICBpZiAoc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlID49IDEwMCAmJiBzdGF0dXNDb2RlIDwgdXBwZXJCb3VuZCkge1xuICAgICAgICByZXR1cm4gYXBpXzEuU3BhblN0YXR1c0NvZGUuVU5TRVQ7XG4gICAgfVxuICAgIC8vIEFsbCBvdGhlciBjb2RlcyBhcmUgZXJyb3JcbiAgICByZXR1cm4gYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1I7XG59O1xuZXhwb3J0cy5wYXJzZVJlc3BvbnNlU3RhdHVzID0gcGFyc2VSZXNwb25zZVN0YXR1cztcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gb2JqIG1hdGNoIHBhdHRlcm5cbiAqIEBwYXJhbSBjb25zdGFudCBlLmcgVVJMIG9mIHJlcXVlc3RcbiAqIEBwYXJhbSBwYXR0ZXJuIE1hdGNoIHBhdHRlcm5cbiAqL1xuY29uc3Qgc2F0aXNmaWVzUGF0dGVybiA9IChjb25zdGFudCwgcGF0dGVybikgPT4ge1xuICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gPT09IGNvbnN0YW50O1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoY29uc3RhbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gcGF0dGVybihjb25zdGFudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXR0ZXJuIGlzIGluIHVuc3VwcG9ydGVkIGRhdGF0eXBlJyk7XG4gICAgfVxufTtcbmV4cG9ydHMuc2F0aXNmaWVzUGF0dGVybiA9IHNhdGlzZmllc1BhdHRlcm47XG4vKipcbiAqIFNldHMgdGhlIHNwYW4gd2l0aCB0aGUgZXJyb3IgcGFzc2VkIGluIHBhcmFtc1xuICogQHBhcmFtIHtTcGFufSBzcGFuIHRoZSBzcGFuIHRoYXQgbmVlZCB0byBiZSBzZXRcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIGVycm9yIHRoYXQgd2lsbCBiZSBzZXQgdG8gc3BhblxuICogQHBhcmFtIHtTZW1jb252U3RhYmlsaXR5fSBzZW1jb252U3RhYmlsaXR5IGRldGVybWluZXMgd2hpY2ggc2VtY29udiB2ZXJzaW9uIHRvIHVzZVxuICovXG5jb25zdCBzZXRTcGFuV2l0aEVycm9yID0gKHNwYW4sIGVycm9yLCBzZW1jb252U3RhYmlsaXR5KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkhUVFBfRVJST1JfTkFNRSwgZXJyb3IubmFtZSk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuSFRUUF9FUlJPUl9NRVNTQUdFLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfRVJST1JfVFlQRSwgZXJyb3IubmFtZSk7XG4gICAgfVxuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2UgfSk7XG4gICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xufTtcbmV4cG9ydHMuc2V0U3BhbldpdGhFcnJvciA9IHNldFNwYW5XaXRoRXJyb3I7XG4vKipcbiAqIEFkZHMgYXR0cmlidXRlcyBmb3IgcmVxdWVzdCBjb250ZW50LWxlbmd0aCBhbmQgY29udGVudC1lbmNvZGluZyBIVFRQIGhlYWRlcnNcbiAqIEBwYXJhbSB7IEluY29taW5nTWVzc2FnZSB9IFJlcXVlc3Qgb2JqZWN0IHdob3NlIGhlYWRlcnMgd2lsbCBiZSBhbmFseXplZFxuICogQHBhcmFtIHsgQXR0cmlidXRlcyB9IEF0dHJpYnV0ZXMgb2JqZWN0IHRvIGJlIG1vZGlmaWVkXG4gKi9cbmNvbnN0IHNldFJlcXVlc3RDb250ZW50TGVuZ3RoQXR0cmlidXRlID0gKHJlcXVlc3QsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRDb250ZW50TGVuZ3RoKHJlcXVlc3QuaGVhZGVycyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICgoMCwgZXhwb3J0cy5pc0NvbXByZXNzZWQpKHJlcXVlc3QuaGVhZGVycykpIHtcbiAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhdID0gbGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEXSA9IGxlbmd0aDtcbiAgICB9XG59O1xuZXhwb3J0cy5zZXRSZXF1ZXN0Q29udGVudExlbmd0aEF0dHJpYnV0ZSA9IHNldFJlcXVlc3RDb250ZW50TGVuZ3RoQXR0cmlidXRlO1xuLyoqXG4gKiBBZGRzIGF0dHJpYnV0ZXMgZm9yIHJlc3BvbnNlIGNvbnRlbnQtbGVuZ3RoIGFuZCBjb250ZW50LWVuY29kaW5nIEhUVFAgaGVhZGVyc1xuICogQHBhcmFtIHsgSW5jb21pbmdNZXNzYWdlIH0gUmVzcG9uc2Ugb2JqZWN0IHdob3NlIGhlYWRlcnMgd2lsbCBiZSBhbmFseXplZFxuICogQHBhcmFtIHsgQXR0cmlidXRlcyB9IEF0dHJpYnV0ZXMgb2JqZWN0IHRvIGJlIG1vZGlmaWVkXG4gKlxuICogQGRlcHJlY2F0ZWQgdGhpcyBpcyBmb3IgYW4gb2xkZXIgdmVyc2lvbiBvZiBzZW1jb252LiBJdCBpcyByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB1c2luZyBPVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTlxuICovXG5jb25zdCBzZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhBdHRyaWJ1dGUgPSAocmVzcG9uc2UsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRDb250ZW50TGVuZ3RoKHJlc3BvbnNlLmhlYWRlcnMpO1xuICAgIGlmIChsZW5ndGggPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoKDAsIGV4cG9ydHMuaXNDb21wcmVzc2VkKShyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfUkVTUE9OU0VfQ09OVEVOVF9MRU5HVEhdID0gbGVuZ3RoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRF0gPSBsZW5ndGg7XG4gICAgfVxufTtcbmV4cG9ydHMuc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoQXR0cmlidXRlID0gc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoQXR0cmlidXRlO1xuZnVuY3Rpb24gZ2V0Q29udGVudExlbmd0aChoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aEhlYWRlciA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ107XG4gICAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHBhcnNlSW50KGNvbnRlbnRMZW5ndGhIZWFkZXIsIDEwKTtcbiAgICBpZiAoaXNOYU4oY29udGVudExlbmd0aCkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjb250ZW50TGVuZ3RoO1xufVxuY29uc3QgaXNDb21wcmVzc2VkID0gKGhlYWRlcnMpID0+IHtcbiAgICBjb25zdCBlbmNvZGluZyA9IGhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICByZXR1cm4gISFlbmNvZGluZyAmJiBlbmNvZGluZyAhPT0gJ2lkZW50aXR5Jztcbn07XG5leHBvcnRzLmlzQ29tcHJlc3NlZCA9IGlzQ29tcHJlc3NlZDtcbi8qKlxuICogTWltaWNzIE5vZGUuanMgY29udmVyc2lvbiBvZiBVUkwgc3RyaW5ncyB0byBSZXF1ZXN0T3B0aW9ucyBleHBlY3RlZCBieVxuICogYGh0dHAucmVxdWVzdGAgYW5kIGBodHRwcy5yZXF1ZXN0YCBBUElzLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi8yNTA1ZTIxN2JiYTA1ZmM1ODFiNTcyYzY4NWM1Y2YyODBhMTZjNWEzL2xpYi9pbnRlcm5hbC91cmwuanMjTDE0MTUtTDE0MzdcbiAqXG4gKiBAcGFyYW0gc3RyaW5nVXJsXG4gKiBAdGhyb3dzIFR5cGVFcnJvciBpZiB0aGUgVVJMIGlzIG5vdCB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVXJsVG9IdHRwT3B0aW9ucyhzdHJpbmdVcmwpIHtcbiAgICAvLyBUaGlzIGlzIGhlYXZpbHkgaW5zcGlyZWQgYnkgTm9kZS5qcyBoYW5kbGluZyBvZiB0aGUgc2FtZSBzaXR1YXRpb24sIHRyeWluZ1xuICAgIC8vIHRvIGZvbGxvdyBpdCBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHdoaWxlIGtlZXBpbmcgaW4gbWluZCB0aGF0IHdlIG9ubHlcbiAgICAvLyBkZWFsIHdpdGggc3RyaW5nIFVSTHMsIG5vdCBVUkwgb2JqZWN0cy5cbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwYXRobmFtZSwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBzZWFyY2gsIHByb3RvY29sLCBoYXNoLCBocmVmLCBvcmlnaW4sIGhvc3QsIH0gPSBuZXcgVVJMKHN0cmluZ1VybCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICBob3N0bmFtZTogaG9zdG5hbWUgJiYgaG9zdG5hbWVbMF0gPT09ICdbJyA/IGhvc3RuYW1lLnNsaWNlKDEsIC0xKSA6IGhvc3RuYW1lLFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBwYXRoOiBgJHtwYXRobmFtZSB8fCAnJ30ke3NlYXJjaCB8fCAnJ31gLFxuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICBvcmlnaW46IG9yaWdpbixcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICB9O1xuICAgIGlmIChwb3J0ICE9PSAnJykge1xuICAgICAgICBvcHRpb25zLnBvcnQgPSBOdW1iZXIocG9ydCk7XG4gICAgfVxuICAgIGlmICh1c2VybmFtZSB8fCBwYXNzd29yZCkge1xuICAgICAgICBvcHRpb25zLmF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YDtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG4vKipcbiAqIE1ha2VzIHN1cmUgb3B0aW9ucyBpcyBhbiB1cmwgb2JqZWN0XG4gKiByZXR1cm4gYW4gb2JqZWN0IHdpdGggZGVmYXVsdCB2YWx1ZSBhbmQgcGFyc2VkIG9wdGlvbnNcbiAqIEBwYXJhbSBsb2dnZXIgY29tcG9uZW50IGxvZ2dlclxuICogQHBhcmFtIG9wdGlvbnMgb3JpZ2luYWwgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBbZXh0cmFPcHRpb25zXSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKi9cbmNvbnN0IGdldFJlcXVlc3RJbmZvID0gKGxvZ2dlciwgb3B0aW9ucywgZXh0cmFPcHRpb25zKSA9PiB7XG4gICAgbGV0IHBhdGhuYW1lO1xuICAgIGxldCBvcmlnaW47XG4gICAgbGV0IG9wdGlvbnNQYXJzZWQ7XG4gICAgbGV0IGludmFsaWRVcmwgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRPcHRpb25zID0gc3RyaW5nVXJsVG9IdHRwT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgICAgIG9wdGlvbnNQYXJzZWQgPSBjb252ZXJ0ZWRPcHRpb25zO1xuICAgICAgICAgICAgcGF0aG5hbWUgPSBjb252ZXJ0ZWRPcHRpb25zLnBhdGhuYW1lIHx8ICcvJztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaW52YWxpZFVybCA9IHRydWU7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZSgnVW5hYmxlIHRvIHBhcnNlIFVSTCBwcm92aWRlZCB0byBIVFRQIHJlcXVlc3QsIHVzaW5nIGZhbGxiYWNrIHRvIGRldGVybWluZSBwYXRoLiBPcmlnaW5hbCBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggaG93IHVybC5wYXJzZSgpIGJlaGF2ZWQuXG4gICAgICAgICAgICBvcHRpb25zUGFyc2VkID0ge1xuICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcGF0aG5hbWUgPSBvcHRpb25zUGFyc2VkLnBhdGggfHwgJy8nO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbiA9IGAke29wdGlvbnNQYXJzZWQucHJvdG9jb2wgfHwgJ2h0dHA6J30vLyR7b3B0aW9uc1BhcnNlZC5ob3N0fWA7XG4gICAgICAgIGlmIChleHRyYU9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zUGFyc2VkLCBleHRyYU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiB1cmwuVVJMKSB7XG4gICAgICAgIG9wdGlvbnNQYXJzZWQgPSB7XG4gICAgICAgICAgICBwcm90b2NvbDogb3B0aW9ucy5wcm90b2NvbCxcbiAgICAgICAgICAgIGhvc3RuYW1lOiB0eXBlb2Ygb3B0aW9ucy5ob3N0bmFtZSA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5ob3N0bmFtZS5zdGFydHNXaXRoKCdbJylcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuaG9zdG5hbWUuc2xpY2UoMSwgLTEpXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmhvc3RuYW1lLFxuICAgICAgICAgICAgcGF0aDogYCR7b3B0aW9ucy5wYXRobmFtZSB8fCAnJ30ke29wdGlvbnMuc2VhcmNoIHx8ICcnfWAsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnBvcnQgIT09ICcnKSB7XG4gICAgICAgICAgICBvcHRpb25zUGFyc2VkLnBvcnQgPSBOdW1iZXIob3B0aW9ucy5wb3J0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy51c2VybmFtZSB8fCBvcHRpb25zLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICBvcHRpb25zUGFyc2VkLmF1dGggPSBgJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9YDtcbiAgICAgICAgfVxuICAgICAgICBwYXRobmFtZSA9IG9wdGlvbnMucGF0aG5hbWU7XG4gICAgICAgIG9yaWdpbiA9IG9wdGlvbnMub3JpZ2luO1xuICAgICAgICBpZiAoZXh0cmFPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9uc1BhcnNlZCwgZXh0cmFPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb3B0aW9uc1BhcnNlZCA9IE9iamVjdC5hc3NpZ24oeyBwcm90b2NvbDogb3B0aW9ucy5ob3N0ID8gJ2h0dHA6JyA6IHVuZGVmaW5lZCB9LCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBvcHRpb25zUGFyc2VkLmhvc3QgfHxcbiAgICAgICAgICAgIChvcHRpb25zUGFyc2VkLnBvcnQgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gYCR7b3B0aW9uc1BhcnNlZC5ob3N0bmFtZX0ke29wdGlvbnNQYXJzZWQucG9ydH1gXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zUGFyc2VkLmhvc3RuYW1lKTtcbiAgICAgICAgb3JpZ2luID0gYCR7b3B0aW9uc1BhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonfS8vJHtob3N0bmFtZX1gO1xuICAgICAgICBwYXRobmFtZSA9IG9wdGlvbnMucGF0aG5hbWU7XG4gICAgICAgIGlmICghcGF0aG5hbWUgJiYgb3B0aW9uc1BhcnNlZC5wYXRoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwob3B0aW9uc1BhcnNlZC5wYXRoLCBvcmlnaW4pO1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lIHx8ICcvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBwYXRobmFtZSA9ICcvJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzb21lIHBhY2thZ2VzIHJldHVybiBtZXRob2QgaW4gbG93ZXJjYXNlLi5cbiAgICAvLyBlbnN1cmUgdXBwZXJDYXNlIGZvciBjb25zaXN0ZW5jeVxuICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnNQYXJzZWQubWV0aG9kXG4gICAgICAgID8gb3B0aW9uc1BhcnNlZC5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICA6ICdHRVQnO1xuICAgIHJldHVybiB7IG9yaWdpbiwgcGF0aG5hbWUsIG1ldGhvZCwgb3B0aW9uc1BhcnNlZCwgaW52YWxpZFVybCB9O1xufTtcbmV4cG9ydHMuZ2V0UmVxdWVzdEluZm8gPSBnZXRSZXF1ZXN0SW5mbztcbi8qKlxuICogTWFrZXMgc3VyZSBvcHRpb25zIGlzIG9mIHR5cGUgc3RyaW5nIG9yIG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gKi9cbmNvbnN0IGlzVmFsaWRPcHRpb25zVHlwZSA9IChvcHRpb25zKSA9PiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvcHRpb25zO1xuICAgIHJldHVybiB0eXBlID09PSAnc3RyaW5nJyB8fCAodHlwZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob3B0aW9ucykpO1xufTtcbmV4cG9ydHMuaXNWYWxpZE9wdGlvbnNUeXBlID0gaXNWYWxpZE9wdGlvbnNUeXBlO1xuY29uc3QgZXh0cmFjdEhvc3RuYW1lQW5kUG9ydCA9IChyZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5ob3N0bmFtZSAmJiByZXF1ZXN0T3B0aW9ucy5wb3J0KSB7XG4gICAgICAgIHJldHVybiB7IGhvc3RuYW1lOiByZXF1ZXN0T3B0aW9ucy5ob3N0bmFtZSwgcG9ydDogcmVxdWVzdE9wdGlvbnMucG9ydCB9O1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVzID0gcmVxdWVzdE9wdGlvbnMuaG9zdD8ubWF0Y2goL14oW146LyBdKykoOlxcZHsxLDV9KT8vKSB8fCBudWxsO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gcmVxdWVzdE9wdGlvbnMuaG9zdG5hbWUgfHwgKG1hdGNoZXMgPT09IG51bGwgPyAnbG9jYWxob3N0JyA6IG1hdGNoZXNbMV0pO1xuICAgIGxldCBwb3J0ID0gcmVxdWVzdE9wdGlvbnMucG9ydDtcbiAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1syXSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBsZWFkaW5nIFwiOlwiLiBUaGUgZXh0cmFjdGVkIHBvcnQgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgXCI6ODA4MFwiXG4gICAgICAgICAgICBwb3J0ID0gbWF0Y2hlc1syXS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3J0ID0gcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wgPT09ICdodHRwczonID8gJzQ0MycgOiAnODAnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGhvc3RuYW1lLCBwb3J0IH07XG59O1xuZXhwb3J0cy5leHRyYWN0SG9zdG5hbWVBbmRQb3J0ID0gZXh0cmFjdEhvc3RuYW1lQW5kUG9ydDtcbi8qKlxuICogUmV0dXJucyBvdXRnb2luZyByZXF1ZXN0IGF0dHJpYnV0ZXMgc2NvcGVkIHRvIHRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgcmVxdWVzdFxuICogQHBhcmFtIHtQYXJzZWRSZXF1ZXN0T3B0aW9uc30gcmVxdWVzdE9wdGlvbnMgdGhlIHNhbWUgb3B0aW9ucyB1c2VkIHRvIG1ha2UgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSB7eyBjb21wb25lbnQ6IHN0cmluZywgaG9zdG5hbWU6IHN0cmluZywgaG9va0F0dHJpYnV0ZXM/OiBBdHRyaWJ1dGVzIH19IG9wdGlvbnMgdXNlZCB0byBwYXNzIGRhdGEgbmVlZGVkIHRvIGNyZWF0ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1NlbWNvbnZTdGFiaWxpdHl9IHNlbWNvbnZTdGFiaWxpdHkgZGV0ZXJtaW5lcyB3aGljaCBzZW1jb252IHZlcnNpb24gdG8gdXNlXG4gKi9cbmNvbnN0IGdldE91dGdvaW5nUmVxdWVzdEF0dHJpYnV0ZXMgPSAocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnMsIHNlbWNvbnZTdGFiaWxpdHksIGVuYWJsZVN5bnRoZXRpY1NvdXJjZURldGVjdGlvbikgPT4ge1xuICAgIGNvbnN0IGhvc3RuYW1lID0gb3B0aW9ucy5ob3N0bmFtZTtcbiAgICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0O1xuICAgIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3RPcHRpb25zLm1ldGhvZCA/PyAnR0VUJztcbiAgICBjb25zdCBub3JtYWxpemVkTWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCk7XG4gICAgY29uc3QgaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29uc3QgdXNlckFnZW50ID0gaGVhZGVyc1sndXNlci1hZ2VudCddO1xuICAgIGNvbnN0IHVybEZ1bGwgPSAoMCwgZXhwb3J0cy5nZXRBYnNvbHV0ZVVybCkocmVxdWVzdE9wdGlvbnMsIGhlYWRlcnMsIGAke29wdGlvbnMuY29tcG9uZW50fTpgLCBvcHRpb25zLnJlZGFjdGVkUXVlcnlQYXJhbXMpO1xuICAgIGNvbnN0IG9sZEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9IVFRQX1VSTF06IHVybEZ1bGwsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9IVFRQX01FVEhPRF06IG1ldGhvZCxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0hUVFBfVEFSR0VUXTogcmVxdWVzdE9wdGlvbnMucGF0aCB8fCAnLycsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogaG9zdG5hbWUsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9IVFRQX0hPU1RdOiBoZWFkZXJzLmhvc3QgPz8gYCR7aG9zdG5hbWV9OiR7cG9ydH1gLFxuICAgIH07XG4gICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IHtcbiAgICAgICAgLy8gUmVxdWlyZWQgYXR0cmlidXRlc1xuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0RdOiBub3JtYWxpemVkTWV0aG9kLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogaG9zdG5hbWUsXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX1BPUlRdOiBOdW1iZXIocG9ydCksXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVVJMX0ZVTExdOiB1cmxGdWxsLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VTRVJfQUdFTlRfT1JJR0lOQUxdOiB1c2VyQWdlbnQsXG4gICAgICAgIC8vIGxlYXZpbmcgb3V0IHByb3RvY29sIHZlcnNpb24sIGl0IGlzIG5vdCB5ZXQgbmVnb3RpYXRlZFxuICAgICAgICAvLyBsZWF2aW5nIG91dCBwcm90b2NvbCBuYW1lLCBpdCBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gcHJvdG9jb2wgdmVyc2lvbiBpcyBzZXRcbiAgICAgICAgLy8gcmV0cmllcyBhbmQgcmVkaXJlY3RzIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgLy8gT3B0LWluIGF0dHJpYnV0ZXMgbGVmdCBvZmYgZm9yIG5vd1xuICAgIH07XG4gICAgLy8gY29uZGl0aW9uYWxseSByZXF1aXJlZCBpZiByZXF1ZXN0IG1ldGhvZCByZXF1aXJlZCBjYXNlIG5vcm1hbGl6YXRpb25cbiAgICBpZiAobWV0aG9kICE9PSBub3JtYWxpemVkTWV0aG9kKSB7XG4gICAgICAgIG5ld0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0RfT1JJR0lOQUxdID0gbWV0aG9kO1xuICAgIH1cbiAgICBpZiAoZW5hYmxlU3ludGhldGljU291cmNlRGV0ZWN0aW9uICYmIHVzZXJBZ2VudCkge1xuICAgICAgICBuZXdBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX1VTRVJfQUdFTlRfU1lOVEhFVElDX1RZUEVdID0gZ2V0U3ludGhldGljVHlwZSh1c2VyQWdlbnQpO1xuICAgIH1cbiAgICBpZiAodXNlckFnZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1VTRVJfQUdFTlRdID0gdXNlckFnZW50O1xuICAgIH1cbiAgICBzd2l0Y2ggKHNlbWNvbnZTdGFiaWxpdHkpIHtcbiAgICAgICAgY2FzZSBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRTpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIG9wdGlvbnMuaG9va0F0dHJpYnV0ZXMpO1xuICAgICAgICBjYXNlIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEOlxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob2xkQXR0cmlidXRlcywgb3B0aW9ucy5ob29rQXR0cmlidXRlcyk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9sZEF0dHJpYnV0ZXMsIG5ld0F0dHJpYnV0ZXMsIG9wdGlvbnMuaG9va0F0dHJpYnV0ZXMpO1xufTtcbmV4cG9ydHMuZ2V0T3V0Z29pbmdSZXF1ZXN0QXR0cmlidXRlcyA9IGdldE91dGdvaW5nUmVxdWVzdEF0dHJpYnV0ZXM7XG4vKipcbiAqIFJldHVybnMgb3V0Z29pbmcgcmVxdWVzdCBNZXRyaWMgYXR0cmlidXRlcyBzY29wZWQgdG8gdGhlIHJlcXVlc3QgZGF0YVxuICogQHBhcmFtIHtBdHRyaWJ1dGVzfSBzcGFuQXR0cmlidXRlcyB0aGUgc3BhbiBhdHRyaWJ1dGVzXG4gKi9cbmNvbnN0IGdldE91dGdvaW5nUmVxdWVzdE1ldHJpY0F0dHJpYnV0ZXMgPSAoc3BhbkF0dHJpYnV0ZXMpID0+IHtcbiAgICBjb25zdCBtZXRyaWNBdHRyaWJ1dGVzID0ge307XG4gICAgbWV0cmljQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX01FVEhPRF0gPSBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX01FVEhPRF07XG4gICAgbWV0cmljQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXSA9IHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdO1xuICAgIC8vVE9ETzogaHR0cC51cmwgYXR0cmlidXRlLCBpdCBzaG91bGQgc3Vic3RpdHV0ZSBhbnkgcGFyYW1ldGVycyB0byBhdm9pZCBoaWdoIGNhcmRpbmFsaXR5LlxuICAgIHJldHVybiBtZXRyaWNBdHRyaWJ1dGVzO1xufTtcbmV4cG9ydHMuZ2V0T3V0Z29pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlcyA9IGdldE91dGdvaW5nUmVxdWVzdE1ldHJpY0F0dHJpYnV0ZXM7XG4vKipcbiAqIFJldHVybnMgYXR0cmlidXRlcyByZWxhdGVkIHRvIHRoZSBraW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZFxuICogQHBhcmFtIHtzdHJpbmd9IFtraW5kXSBLaW5kIG9mIEhUVFAgcHJvdG9jb2wgdXNlZDogXCIxLjBcIiwgXCIxLjFcIiwgXCIyXCIsIFwiU1BEWVwiIG9yIFwiUVVJQ1wiLlxuICovXG5jb25zdCBzZXRBdHRyaWJ1dGVzRnJvbUh0dHBLaW5kID0gKGtpbmQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICBpZiAoa2luZCkge1xuICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfRkxBVk9SXSA9IGtpbmQ7XG4gICAgICAgIGlmIChraW5kLnRvVXBwZXJDYXNlKCkgIT09ICdRVUlDJykge1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9ORVRfVFJBTlNQT1JUXSA9IHNlbWNvbnZfMS5ORVRfVFJBTlNQT1JUX1ZBTFVFX0lQX1RDUDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX1RSQU5TUE9SVF0gPSBzZW1jb252XzEuTkVUX1RSQU5TUE9SVF9WQUxVRV9JUF9VRFA7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0cy5zZXRBdHRyaWJ1dGVzRnJvbUh0dHBLaW5kID0gc2V0QXR0cmlidXRlc0Zyb21IdHRwS2luZDtcbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSBvZiBzeW50aGV0aWMgc291cmNlIGJhc2VkIG9uIHRoZSB1c2VyIGFnZW50XG4gKiBAcGFyYW0ge091dGdvaW5nSHR0cEhlYWRlcn0gdXNlckFnZW50IHRoZSB1c2VyIGFnZW50IHN0cmluZ1xuICovXG5jb25zdCBnZXRTeW50aGV0aWNUeXBlID0gKHVzZXJBZ2VudCkgPT4ge1xuICAgIGNvbnN0IHVzZXJBZ2VudFN0cmluZyA9IFN0cmluZyh1c2VyQWdlbnQpLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGludGVybmFsX3R5cGVzXzEuU1lOVEhFVElDX1RFU1RfTkFNRVMpIHtcbiAgICAgICAgaWYgKHVzZXJBZ2VudFN0cmluZy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbWNvbnZfMS5VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFX1ZBTFVFX1RFU1Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGludGVybmFsX3R5cGVzXzEuU1lOVEhFVElDX0JPVF9OQU1FUykge1xuICAgICAgICBpZiAodXNlckFnZW50U3RyaW5nLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VtY29udl8xLlVTRVJfQUdFTlRfU1lOVEhFVElDX1RZUEVfVkFMVUVfQk9UO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbn07XG4vKipcbiAqIFJldHVybnMgb3V0Z29pbmcgcmVxdWVzdCBhdHRyaWJ1dGVzIHNjb3BlZCB0byB0aGUgcmVzcG9uc2UgZGF0YVxuICogQHBhcmFtIHtJbmNvbWluZ01lc3NhZ2V9IHJlc3BvbnNlIHRoZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSB7U2VtY29udlN0YWJpbGl0eX0gc2VtY29udlN0YWJpbGl0eSBkZXRlcm1pbmVzIHdoaWNoIHNlbWNvbnYgdmVyc2lvbiB0byB1c2VcbiAqL1xuY29uc3QgZ2V0T3V0Z29pbmdSZXF1ZXN0QXR0cmlidXRlc09uUmVzcG9uc2UgPSAocmVzcG9uc2UsIHNlbWNvbnZTdGFiaWxpdHkpID0+IHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGh0dHBWZXJzaW9uLCBzb2NrZXQgfSA9IHJlc3BvbnNlO1xuICAgIGNvbnN0IG9sZEF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb25zdCBzdGFibGVBdHRyaWJ1dGVzID0ge307XG4gICAgaWYgKHN0YXR1c0NvZGUgIT0gbnVsbCkge1xuICAgICAgICBzdGFibGVBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFXSA9IHN0YXR1c0NvZGU7XG4gICAgfVxuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgY29uc3QgeyByZW1vdGVBZGRyZXNzLCByZW1vdGVQb3J0IH0gPSBzb2NrZXQ7XG4gICAgICAgIG9sZEF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfSVBdID0gcmVtb3RlQWRkcmVzcztcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXSA9IHJlbW90ZVBvcnQ7XG4gICAgICAgIC8vIFJlY29tbWVuZGVkXG4gICAgICAgIHN0YWJsZUF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUEVFUl9BRERSRVNTXSA9IHJlbW90ZUFkZHJlc3M7XG4gICAgICAgIHN0YWJsZUF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUEVFUl9QT1JUXSA9IHJlbW90ZVBvcnQ7XG4gICAgICAgIHN0YWJsZUF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUFJPVE9DT0xfVkVSU0lPTl0gPSByZXNwb25zZS5odHRwVmVyc2lvbjtcbiAgICB9XG4gICAgKDAsIGV4cG9ydHMuc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoQXR0cmlidXRlKShyZXNwb25zZSwgb2xkQXR0cmlidXRlcyk7XG4gICAgaWYgKHN0YXR1c0NvZGUpIHtcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1NUQVRVU19DT0RFXSA9IHN0YXR1c0NvZGU7XG4gICAgICAgIG9sZEF0dHJpYnV0ZXNbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5IVFRQX1NUQVRVU19URVhUXSA9IChzdGF0dXNNZXNzYWdlIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAoMCwgZXhwb3J0cy5zZXRBdHRyaWJ1dGVzRnJvbUh0dHBLaW5kKShodHRwVmVyc2lvbiwgb2xkQXR0cmlidXRlcyk7XG4gICAgc3dpdGNoIChzZW1jb252U3RhYmlsaXR5KSB7XG4gICAgICAgIGNhc2UgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEU6XG4gICAgICAgICAgICByZXR1cm4gc3RhYmxlQXR0cmlidXRlcztcbiAgICAgICAgY2FzZSBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRDpcbiAgICAgICAgICAgIHJldHVybiBvbGRBdHRyaWJ1dGVzO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvbGRBdHRyaWJ1dGVzLCBzdGFibGVBdHRyaWJ1dGVzKTtcbn07XG5leHBvcnRzLmdldE91dGdvaW5nUmVxdWVzdEF0dHJpYnV0ZXNPblJlc3BvbnNlID0gZ2V0T3V0Z29pbmdSZXF1ZXN0QXR0cmlidXRlc09uUmVzcG9uc2U7XG4vKipcbiAqIFJldHVybnMgb3V0Z29pbmcgcmVxdWVzdCBNZXRyaWMgYXR0cmlidXRlcyBzY29wZWQgdG8gdGhlIHJlc3BvbnNlIGRhdGFcbiAqIEBwYXJhbSB7QXR0cmlidXRlc30gc3BhbkF0dHJpYnV0ZXMgdGhlIHNwYW4gYXR0cmlidXRlc1xuICovXG5jb25zdCBnZXRPdXRnb2luZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSA9IChzcGFuQXR0cmlidXRlcykgPT4ge1xuICAgIGNvbnN0IG1ldHJpY0F0dHJpYnV0ZXMgPSB7fTtcbiAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlRdID0gc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVF07XG4gICAgbWV0cmljQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1NUQVRVU19DT0RFXSA9XG4gICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfU1RBVFVTX0NPREVdO1xuICAgIG1ldHJpY0F0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfSFRUUF9GTEFWT1JdID0gc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfSFRUUF9GTEFWT1JdO1xuICAgIHJldHVybiBtZXRyaWNBdHRyaWJ1dGVzO1xufTtcbmV4cG9ydHMuZ2V0T3V0Z29pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2UgPSBnZXRPdXRnb2luZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZTtcbmNvbnN0IGdldE91dGdvaW5nU3RhYmxlUmVxdWVzdE1ldHJpY0F0dHJpYnV0ZXNPblJlc3BvbnNlID0gKHNwYW5BdHRyaWJ1dGVzKSA9PiB7XG4gICAgY29uc3QgbWV0cmljQXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChzcGFuQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfTkVUV09SS19QUk9UT0NPTF9WRVJTSU9OXSkge1xuICAgICAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9ORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05dID1cbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9ORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05dO1xuICAgIH1cbiAgICBpZiAoc3BhbkF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVTUE9OU0VfU1RBVFVTX0NPREVdKSB7XG4gICAgICAgIG1ldHJpY0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVTUE9OU0VfU1RBVFVTX0NPREVdID1cbiAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFXTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldHJpY0F0dHJpYnV0ZXM7XG59O1xuZXhwb3J0cy5nZXRPdXRnb2luZ1N0YWJsZVJlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSA9IGdldE91dGdvaW5nU3RhYmxlUmVxdWVzdE1ldHJpY0F0dHJpYnV0ZXNPblJlc3BvbnNlO1xuZnVuY3Rpb24gcGFyc2VIb3N0SGVhZGVyKGhvc3RIZWFkZXIsIHByb3RvKSB7XG4gICAgY29uc3QgcGFydHMgPSBob3N0SGVhZGVyLnNwbGl0KCc6Jyk7XG4gICAgLy8gbm8gc2VtaWNvbG9uIGltcGxpZXMgaXB2NCBkb3R0ZWQgc3ludGF4IG9yIGhvc3QgbmFtZSB3aXRob3V0IHBvcnRcbiAgICAvLyB4LngueC54XG4gICAgLy8gZXhhbXBsZS5jb21cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmIChwcm90byA9PT0gJ2h0dHAnKSB7XG4gICAgICAgICAgICByZXR1cm4geyBob3N0OiBwYXJ0c1swXSwgcG9ydDogJzgwJyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90byA9PT0gJ2h0dHBzJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgaG9zdDogcGFydHNbMF0sIHBvcnQ6ICc0NDMnIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgaG9zdDogcGFydHNbMF0gfTtcbiAgICB9XG4gICAgLy8gc2luZ2xlIHNlbWljb2xvbiBpbXBsaWVzIGlwdjQgZG90dGVkIHN5bnRheCBvciBob3N0IG5hbWUgd2l0aCBwb3J0XG4gICAgLy8geC54LngueDp5eXl5XG4gICAgLy8gZXhhbXBsZS5jb206eXl5eVxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3Q6IHBhcnRzWzBdLFxuICAgICAgICAgICAgcG9ydDogcGFydHNbMV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIG1vcmUgdGhhbiAyIHBhcnRzIGltcGxpZXMgaXB2NiBzeW50YXggd2l0aCBtdWx0aXBsZSBjb2xvbnNcbiAgICAvLyBbeDp4Ong6eDp4Ong6eDp4XVxuICAgIC8vIFt4Ong6eDp4Ong6eDp4OnhdOnl5eXlcbiAgICBpZiAocGFydHNbMF0uc3RhcnRzV2l0aCgnWycpKSB7XG4gICAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICBpZiAocHJvdG8gPT09ICdodHRwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGhvc3Q6IGhvc3RIZWFkZXIsIHBvcnQ6ICc4MCcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm90byA9PT0gJ2h0dHBzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGhvc3Q6IGhvc3RIZWFkZXIsIHBvcnQ6ICc0NDMnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gMl0uZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBob3N0OiBwYXJ0cy5zbGljZSgwLCAtMSkuam9pbignOicpLFxuICAgICAgICAgICAgICAgIHBvcnQ6IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiBub3RoaW5nIGFib3ZlIG1hdGNoZXMganVzdCByZXR1cm4gdGhlIGhvc3QgaGVhZGVyXG4gICAgcmV0dXJuIHsgaG9zdDogaG9zdEhlYWRlciB9O1xufVxuLyoqXG4gKiBHZXQgc2VydmVyLmFkZHJlc3MgYW5kIHBvcnQgYWNjb3JkaW5nIHRvIGh0dHAgc2VtY29udiAxLjI3XG4gKiBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYmxvYi9iZjBhMmMxMTM0ZjIwNmYwMzQ0MDhiMjAxZGJlYzM3OTYwZWQ2MGVjL2RvY3MvaHR0cC9odHRwLXNwYW5zLm1kI3NldHRpbmctc2VydmVyYWRkcmVzcy1hbmQtc2VydmVycG9ydC1hdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZlckFkZHJlc3MocmVxdWVzdCwgY29tcG9uZW50KSB7XG4gICAgY29uc3QgZm9yd2FyZGVkSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzWydmb3J3YXJkZWQnXTtcbiAgICBpZiAoZm9yd2FyZGVkSGVhZGVyKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGFyc2VGb3J3YXJkZWRIZWFkZXIoZm9yd2FyZGVkSGVhZGVyKSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5Lmhvc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VIb3N0SGVhZGVyKGVudHJ5Lmhvc3QsIGVudHJ5LnByb3RvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4Rm9yd2FyZGVkSG9zdCA9IHJlcXVlc3QuaGVhZGVyc1sneC1mb3J3YXJkZWQtaG9zdCddO1xuICAgIGlmICh0eXBlb2YgeEZvcndhcmRlZEhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdC5oZWFkZXJzWyd4LWZvcndhcmRlZC1wcm90byddID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSG9zdEhlYWRlcih4Rm9yd2FyZGVkSG9zdCwgcmVxdWVzdC5oZWFkZXJzWyd4LWZvcndhcmRlZC1wcm90byddKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXF1ZXN0LmhlYWRlcnNbJ3gtZm9yd2FyZGVkLXByb3RvJ10pKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VIb3N0SGVhZGVyKHhGb3J3YXJkZWRIb3N0LCByZXF1ZXN0LmhlYWRlcnNbJ3gtZm9yd2FyZGVkLXByb3RvJ11bMF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUhvc3RIZWFkZXIoeEZvcndhcmRlZEhvc3QpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHhGb3J3YXJkZWRIb3N0KSAmJlxuICAgICAgICB0eXBlb2YgeEZvcndhcmRlZEhvc3RbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHhGb3J3YXJkZWRIb3N0WzBdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmhlYWRlcnNbJ3gtZm9yd2FyZGVkLXByb3RvJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VIb3N0SGVhZGVyKHhGb3J3YXJkZWRIb3N0WzBdLCByZXF1ZXN0LmhlYWRlcnNbJ3gtZm9yd2FyZGVkLXByb3RvJ10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcXVlc3QuaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUhvc3RIZWFkZXIoeEZvcndhcmRlZEhvc3RbMF0sIHJlcXVlc3QuaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSG9zdEhlYWRlcih4Rm9yd2FyZGVkSG9zdFswXSk7XG4gICAgfVxuICAgIGNvbnN0IGhvc3QgPSByZXF1ZXN0LmhlYWRlcnNbJ2hvc3QnXTtcbiAgICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnICYmIGhvc3QubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gcGFyc2VIb3N0SGVhZGVyKGhvc3QsIGNvbXBvbmVudCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXQgc2VydmVyLmFkZHJlc3MgYW5kIHBvcnQgYWNjb3JkaW5nIHRvIGh0dHAgc2VtY29udiAxLjI3XG4gKiBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMvYmxvYi9iZjBhMmMxMTM0ZjIwNmYwMzQ0MDhiMjAxZGJlYzM3OTYwZWQ2MGVjL2RvY3MvaHR0cC9odHRwLXNwYW5zLm1kI3NldHRpbmctc2VydmVyYWRkcmVzcy1hbmQtc2VydmVycG9ydC1hdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGdldFJlbW90ZUNsaWVudEFkZHJlc3MocmVxdWVzdCkge1xuICAgIGNvbnN0IGZvcndhcmRlZEhlYWRlciA9IHJlcXVlc3QuaGVhZGVyc1snZm9yd2FyZGVkJ107XG4gICAgaWYgKGZvcndhcmRlZEhlYWRlcikge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlRm9yd2FyZGVkSGVhZGVyKGZvcndhcmRlZEhlYWRlcikpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5mb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlUG9ydEZyb21BZGRyZXNzKGVudHJ5LmZvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeEZvcndhcmRlZEZvciA9IHJlcXVlc3QuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ107XG4gICAgaWYgKHhGb3J3YXJkZWRGb3IpIHtcbiAgICAgICAgbGV0IHhGb3J3YXJkZWRGb3JWYWw7XG4gICAgICAgIGlmICh0eXBlb2YgeEZvcndhcmRlZEZvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHhGb3J3YXJkZWRGb3JWYWwgPSB4Rm9yd2FyZGVkRm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeEZvcndhcmRlZEZvcikpIHtcbiAgICAgICAgICAgIHhGb3J3YXJkZWRGb3JWYWwgPSB4Rm9yd2FyZGVkRm9yWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgeEZvcndhcmRlZEZvclZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHhGb3J3YXJkZWRGb3JWYWwgPSB4Rm9yd2FyZGVkRm9yVmFsLnNwbGl0KCcsJylbMF0udHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbW92ZVBvcnRGcm9tQWRkcmVzcyh4Rm9yd2FyZGVkRm9yVmFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZW1vdGUgPSByZXF1ZXN0LnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICAgIGlmIChyZW1vdGUpIHtcbiAgICAgICAgcmV0dXJuIHJlbW90ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmdldFJlbW90ZUNsaWVudEFkZHJlc3MgPSBnZXRSZW1vdGVDbGllbnRBZGRyZXNzO1xuZnVuY3Rpb24gcmVtb3ZlUG9ydEZyb21BZGRyZXNzKGlucHV0KSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgcmVwbGFjZWQgd2l0aCBTb2NrZXRBZGRyZXNzLnBhcnNlKCkgb25jZSB0aGUgbWluaW11bVxuICAgIC8vIHN1cHBvcnRlZCBOb2RlLmpzIHZlcnNpb24gYWxsb3dzIGl0LlxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaG9zdG5hbWU6IGFkZHJlc3MgfSA9IG5ldyBVUkwoYGh0dHA6Ly8ke2lucHV0fWApO1xuICAgICAgICBpZiAoYWRkcmVzcy5zdGFydHNXaXRoKCdbJykgJiYgYWRkcmVzcy5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkcmVzcy5zbGljZSgxLCAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEluZm9Gcm9tSW5jb21pbmdNZXNzYWdlKGNvbXBvbmVudCwgcmVxdWVzdCwgbG9nZ2VyKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVycy5ob3N0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVSTChyZXF1ZXN0LnVybCA/PyAnLycsIGAke2NvbXBvbmVudH06Ly8ke3JlcXVlc3QuaGVhZGVycy5ob3N0fWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdW5zYWZlUGFyc2VkVXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCA/PyAnLycsIFxuICAgICAgICAgICAgLy8gdXNpbmcgbG9jYWxob3N0IGFzIGEgd29ya2Fyb3VuZCB0byBzdGlsbCB1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBmb3IgcGFyc2luZ1xuICAgICAgICAgICAgYCR7Y29tcG9uZW50fTovL2xvY2FsaG9zdGApO1xuICAgICAgICAgICAgLy8gc2luY2Ugd2UgdXNlIGxvY2FsaG9zdCBhcyBhIHdvcmthcm91bmQsIGVuc3VyZSB3ZSBoaWRlIHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHRvIGF2b2lkXG4gICAgICAgICAgICAvLyBvdXIgd29ya2Fyb3VuZCBsZWFraW5nIHRob3VnaC5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0aG5hbWU6IHVuc2FmZVBhcnNlZFVybC5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICBzZWFyY2g6IHVuc2FmZVBhcnNlZFVybC5zZWFyY2gsXG4gICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IHVzZSB0aGUgcmVzdWx0IG9mIHVuc2FmZVBhcnNlZFVybC50b1N0cmluZyBhcyBpdCdzIHBvdGVudGlhbGx5IHdyb25nLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5zYWZlUGFyc2VkVXJsLnBhdGhuYW1lICsgdW5zYWZlUGFyc2VkVXJsLnNlYXJjaDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAvLyBzb21ldGhpbmcgaXMgd3JvbmcsIHVzZSB1bmRlZmluZWQgLSB0aGlzICpzaG91bGQqIG5ldmVyIGhhcHBlbiwgbG9nZ2luZ1xuICAgICAgICAvLyBmb3IgdHJvdWJsZXNob290aW5nIGluIGNhc2UgaXQgZG9lcyBoYXBwZW4uXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKCdVbmFibGUgdG8gZ2V0IFVSTCBmcm9tIHJlcXVlc3QnLCBlKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn1cbi8qKlxuICogUmV0dXJucyBpbmNvbWluZyByZXF1ZXN0IGF0dHJpYnV0ZXMgc2NvcGVkIHRvIHRoZSByZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7SW5jb21pbmdNZXNzYWdlfSByZXF1ZXN0IHRoZSByZXF1ZXN0IG9iamVjdFxuICogQHBhcmFtIHt7IGNvbXBvbmVudDogc3RyaW5nLCBzZXJ2ZXJOYW1lPzogc3RyaW5nLCBob29rQXR0cmlidXRlcz86IEF0dHJpYnV0ZXMgfX0gb3B0aW9ucyB1c2VkIHRvIHBhc3MgZGF0YSBuZWVkZWQgdG8gY3JlYXRlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7U2VtY29udlN0YWJpbGl0eX0gc2VtY29udlN0YWJpbGl0eSBkZXRlcm1pbmVzIHdoaWNoIHNlbWNvbnYgdmVyc2lvbiB0byB1c2VcbiAqL1xuY29uc3QgZ2V0SW5jb21pbmdSZXF1ZXN0QXR0cmlidXRlcyA9IChyZXF1ZXN0LCBvcHRpb25zLCBsb2dnZXIpID0+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzO1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGhlYWRlcnNbJ3VzZXItYWdlbnQnXTtcbiAgICBjb25zdCBpcHMgPSBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXTtcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHJlcXVlc3QuaHR0cFZlcnNpb247XG4gICAgY29uc3QgaG9zdCA9IGhlYWRlcnMuaG9zdDtcbiAgICBjb25zdCBob3N0bmFtZSA9IGhvc3Q/LnJlcGxhY2UoL14oLiopKDpbMC05XXsxLDV9KS8sICckMScpIHx8ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3QubWV0aG9kO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRNZXRob2QgPSBub3JtYWxpemVNZXRob2QobWV0aG9kKTtcbiAgICBjb25zdCBzZXJ2ZXJBZGRyZXNzID0gZ2V0U2VydmVyQWRkcmVzcyhyZXF1ZXN0LCBvcHRpb25zLmNvbXBvbmVudCk7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG9wdGlvbnMuc2VydmVyTmFtZTtcbiAgICBjb25zdCByZW1vdGVDbGllbnRBZGRyZXNzID0gZ2V0UmVtb3RlQ2xpZW50QWRkcmVzcyhyZXF1ZXN0KTtcbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge1xuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0RdOiBub3JtYWxpemVkTWV0aG9kLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VSTF9TQ0hFTUVdOiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfQUREUkVTU106IHNlcnZlckFkZHJlc3M/Lmhvc3QsXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfTkVUV09SS19QRUVSX0FERFJFU1NdOiByZXF1ZXN0LnNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUEVFUl9QT1JUXTogcmVxdWVzdC5zb2NrZXQucmVtb3RlUG9ydCxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9ORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05dOiByZXF1ZXN0Lmh0dHBWZXJzaW9uLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VTRVJfQUdFTlRfT1JJR0lOQUxdOiB1c2VyQWdlbnQsXG4gICAgfTtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBnZXRJbmZvRnJvbUluY29taW5nTWVzc2FnZShvcHRpb25zLmNvbXBvbmVudCwgcmVxdWVzdCwgbG9nZ2VyKTtcbiAgICBpZiAocGFyc2VkVXJsPy5wYXRobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VSTF9QQVRIXSA9IHBhcnNlZFVybC5wYXRobmFtZTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZFVybC5zZWFyY2gpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgJz8nIGZyb20gVVJMIHNlYXJjaCAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9zZWFyY2gpLlxuICAgICAgICBuZXdBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9VUkxfUVVFUlldID0gcGFyc2VkVXJsLnNlYXJjaC5zbGljZSgxKTtcbiAgICB9XG4gICAgaWYgKHJlbW90ZUNsaWVudEFkZHJlc3MgIT0gbnVsbCkge1xuICAgICAgICBuZXdBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9DTElFTlRfQUREUkVTU10gPSByZW1vdGVDbGllbnRBZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoc2VydmVyQWRkcmVzcz8ucG9ydCAhPSBudWxsKSB7XG4gICAgICAgIG5ld0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXSA9IE51bWJlcihzZXJ2ZXJBZGRyZXNzLnBvcnQpO1xuICAgIH1cbiAgICAvLyBjb25kaXRpb25hbGx5IHJlcXVpcmVkIGlmIHJlcXVlc3QgbWV0aG9kIHJlcXVpcmVkIGNhc2Ugbm9ybWFsaXphdGlvblxuICAgIGlmIChtZXRob2QgIT09IG5vcm1hbGl6ZWRNZXRob2QpIHtcbiAgICAgICAgbmV3QXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRF9PUklHSU5BTF0gPSBtZXRob2Q7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuYWJsZVN5bnRoZXRpY1NvdXJjZURldGVjdGlvbiAmJiB1c2VyQWdlbnQpIHtcbiAgICAgICAgbmV3QXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9VU0VSX0FHRU5UX1NZTlRIRVRJQ19UWVBFXSA9IGdldFN5bnRoZXRpY1R5cGUodXNlckFnZW50KTtcbiAgICB9XG4gICAgY29uc3Qgb2xkQXR0cmlidXRlcyA9IHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0hUVFBfVVJMXTogcGFyc2VkVXJsLnRvU3RyaW5nKCksXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9IVFRQX0hPU1RdOiBob3N0LFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX0hPU1RfTkFNRV06IGhvc3RuYW1lLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfSFRUUF9NRVRIT0RdOiBtZXRob2QsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9IVFRQX1NDSEVNRV06IG9wdGlvbnMuY29tcG9uZW50LFxuICAgIH07XG4gICAgaWYgKHR5cGVvZiBpcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9sZEF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfSFRUUF9DTElFTlRfSVBdID0gaXBzLnNwbGl0KCcsJylbMF07XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2VydmVyTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1NFUlZFUl9OQU1FXSA9IHNlcnZlck5hbWU7XG4gICAgfVxuICAgIGlmIChwYXJzZWRVcmw/LnBhdGhuYW1lKSB7XG4gICAgICAgIG9sZEF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfSFRUUF9UQVJHRVRdID1cbiAgICAgICAgICAgIHBhcnNlZFVybD8ucGF0aG5hbWUgKyBwYXJzZWRVcmw/LnNlYXJjaCB8fCAnLyc7XG4gICAgfVxuICAgIGlmICh1c2VyQWdlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvbGRBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfVVNFUl9BR0VOVF0gPSB1c2VyQWdlbnQ7XG4gICAgfVxuICAgICgwLCBleHBvcnRzLnNldFJlcXVlc3RDb250ZW50TGVuZ3RoQXR0cmlidXRlKShyZXF1ZXN0LCBvbGRBdHRyaWJ1dGVzKTtcbiAgICAoMCwgZXhwb3J0cy5zZXRBdHRyaWJ1dGVzRnJvbUh0dHBLaW5kKShodHRwVmVyc2lvbiwgb2xkQXR0cmlidXRlcyk7XG4gICAgc3dpdGNoIChvcHRpb25zLnNlbWNvbnZTdGFiaWxpdHkpIHtcbiAgICAgICAgY2FzZSBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRTpcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIG9wdGlvbnMuaG9va0F0dHJpYnV0ZXMpO1xuICAgICAgICBjYXNlIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEOlxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob2xkQXR0cmlidXRlcywgb3B0aW9ucy5ob29rQXR0cmlidXRlcyk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9sZEF0dHJpYnV0ZXMsIG5ld0F0dHJpYnV0ZXMsIG9wdGlvbnMuaG9va0F0dHJpYnV0ZXMpO1xufTtcbmV4cG9ydHMuZ2V0SW5jb21pbmdSZXF1ZXN0QXR0cmlidXRlcyA9IGdldEluY29taW5nUmVxdWVzdEF0dHJpYnV0ZXM7XG4vKipcbiAqIFJldHVybnMgaW5jb21pbmcgcmVxdWVzdCBNZXRyaWMgYXR0cmlidXRlcyBzY29wZWQgdG8gdGhlIHJlcXVlc3QgZGF0YVxuICogQHBhcmFtIHtBdHRyaWJ1dGVzfSBzcGFuQXR0cmlidXRlcyB0aGUgc3BhbiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge3sgY29tcG9uZW50OiBzdHJpbmcgfX0gb3B0aW9ucyB1c2VkIHRvIHBhc3MgZGF0YSBuZWVkZWQgdG8gY3JlYXRlIGF0dHJpYnV0ZXNcbiAqL1xuY29uc3QgZ2V0SW5jb21pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlcyA9IChzcGFuQXR0cmlidXRlcykgPT4ge1xuICAgIGNvbnN0IG1ldHJpY0F0dHJpYnV0ZXMgPSB7fTtcbiAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfU0NIRU1FXSA9IHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfU0NIRU1FXTtcbiAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfTUVUSE9EXSA9IHNwYW5BdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0hUVFBfTUVUSE9EXTtcbiAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9IT1NUX05BTUVdID0gc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX0hPU1RfTkFNRV07XG4gICAgbWV0cmljQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX0ZMQVZPUl0gPSBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX0ZMQVZPUl07XG4gICAgLy9UT0RPOiBodHRwLnRhcmdldCBhdHRyaWJ1dGUsIGl0IHNob3VsZCBzdWJzdGl0dXRlIGFueSBwYXJhbWV0ZXJzIHRvIGF2b2lkIGhpZ2ggY2FyZGluYWxpdHkuXG4gICAgcmV0dXJuIG1ldHJpY0F0dHJpYnV0ZXM7XG59O1xuZXhwb3J0cy5nZXRJbmNvbWluZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzID0gZ2V0SW5jb21pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlcztcbi8qKlxuICogUmV0dXJucyBpbmNvbWluZyByZXF1ZXN0IGF0dHJpYnV0ZXMgc2NvcGVkIHRvIHRoZSByZXNwb25zZSBkYXRhXG4gKiBAcGFyYW0geyhTZXJ2ZXJSZXNwb25zZSAmIHsgc29ja2V0OiBTb2NrZXQ7IH0pfSByZXNwb25zZSB0aGUgcmVzcG9uc2Ugb2JqZWN0XG4gKi9cbmNvbnN0IGdldEluY29taW5nUmVxdWVzdEF0dHJpYnV0ZXNPblJlc3BvbnNlID0gKHJlcXVlc3QsIHJlc3BvbnNlLCBzZW1jb252U3RhYmlsaXR5KSA9PiB7XG4gICAgLy8gdGFrZSBzb2NrZXQgZnJvbSB0aGUgcmVxdWVzdCxcbiAgICAvLyBzaW5jZSBpdCBtYXkgYmUgZGV0YWNoZWQgZnJvbSB0aGUgcmVzcG9uc2Ugb2JqZWN0IGluIGtlZXAtYWxpdmUgbW9kZVxuICAgIGNvbnN0IHsgc29ja2V0IH0gPSByZXF1ZXN0O1xuICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgbmV3QXR0cmlidXRlcyA9IHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFXTogc3RhdHVzQ29kZSxcbiAgICB9O1xuICAgIGNvbnN0IHJwY01ldGFkYXRhID0gKDAsIGNvcmVfMS5nZXRSUENNZXRhZGF0YSkoYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgY29uc3Qgb2xkQXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgY29uc3QgeyBsb2NhbEFkZHJlc3MsIGxvY2FsUG9ydCwgcmVtb3RlQWRkcmVzcywgcmVtb3RlUG9ydCB9ID0gc29ja2V0O1xuICAgICAgICBvbGRBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9IT1NUX0lQXSA9IGxvY2FsQWRkcmVzcztcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9ORVRfSE9TVF9QT1JUXSA9IGxvY2FsUG9ydDtcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9JUF0gPSByZW1vdGVBZGRyZXNzO1xuICAgICAgICBvbGRBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlRdID0gcmVtb3RlUG9ydDtcbiAgICB9XG4gICAgb2xkQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1NUQVRVU19DT0RFXSA9IHN0YXR1c0NvZGU7XG4gICAgb2xkQXR0cmlidXRlc1tBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLkhUVFBfU1RBVFVTX1RFWFRdID0gKHN0YXR1c01lc3NhZ2UgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHJwY01ldGFkYXRhPy50eXBlID09PSBjb3JlXzEuUlBDVHlwZS5IVFRQICYmIHJwY01ldGFkYXRhLnJvdXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb2xkQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV0gPSBycGNNZXRhZGF0YS5yb3V0ZTtcbiAgICAgICAgbmV3QXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV0gPSBycGNNZXRhZGF0YS5yb3V0ZTtcbiAgICB9XG4gICAgc3dpdGNoIChzZW1jb252U3RhYmlsaXR5KSB7XG4gICAgICAgIGNhc2UgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEU6XG4gICAgICAgICAgICByZXR1cm4gbmV3QXR0cmlidXRlcztcbiAgICAgICAgY2FzZSBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRDpcbiAgICAgICAgICAgIHJldHVybiBvbGRBdHRyaWJ1dGVzO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvbGRBdHRyaWJ1dGVzLCBuZXdBdHRyaWJ1dGVzKTtcbn07XG5leHBvcnRzLmdldEluY29taW5nUmVxdWVzdEF0dHJpYnV0ZXNPblJlc3BvbnNlID0gZ2V0SW5jb21pbmdSZXF1ZXN0QXR0cmlidXRlc09uUmVzcG9uc2U7XG4vKipcbiAqIFJldHVybnMgaW5jb21pbmcgcmVxdWVzdCBNZXRyaWMgYXR0cmlidXRlcyBzY29wZWQgdG8gdGhlIHJlcXVlc3QgZGF0YVxuICogQHBhcmFtIHtBdHRyaWJ1dGVzfSBzcGFuQXR0cmlidXRlcyB0aGUgc3BhbiBhdHRyaWJ1dGVzXG4gKi9cbmNvbnN0IGdldEluY29taW5nUmVxdWVzdE1ldHJpY0F0dHJpYnV0ZXNPblJlc3BvbnNlID0gKHNwYW5BdHRyaWJ1dGVzKSA9PiB7XG4gICAgY29uc3QgbWV0cmljQXR0cmlidXRlcyA9IHt9O1xuICAgIG1ldHJpY0F0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfSFRUUF9TVEFUVVNfQ09ERV0gPVxuICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1NUQVRVU19DT0RFXTtcbiAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX05FVF9IT1NUX1BPUlRdID0gc3BhbkF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfTkVUX0hPU1RfUE9SVF07XG4gICAgaWYgKHNwYW5BdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JPVVRFXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1ldHJpY0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUk9VVEVdID0gc3BhbkF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUk9VVEVdO1xuICAgIH1cbiAgICByZXR1cm4gbWV0cmljQXR0cmlidXRlcztcbn07XG5leHBvcnRzLmdldEluY29taW5nUmVxdWVzdE1ldHJpY0F0dHJpYnV0ZXNPblJlc3BvbnNlID0gZ2V0SW5jb21pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2U7XG4vKipcbiAqIFJldHVybnMgaW5jb21pbmcgc3RhYmxlIHJlcXVlc3QgTWV0cmljIGF0dHJpYnV0ZXMgc2NvcGVkIHRvIHRoZSByZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7QXR0cmlidXRlc30gc3BhbkF0dHJpYnV0ZXMgdGhlIHNwYW4gYXR0cmlidXRlc1xuICovXG5jb25zdCBnZXRJbmNvbWluZ1N0YWJsZVJlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSA9IChzcGFuQXR0cmlidXRlcykgPT4ge1xuICAgIGNvbnN0IG1ldHJpY0F0dHJpYnV0ZXMgPSB7fTtcbiAgICBpZiAoc3BhbkF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUk9VVEVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWV0cmljQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV0gPSBzcGFuQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV07XG4gICAgfVxuICAgIC8vIHJlcXVpcmVkIGlmIGFuZCBvbmx5IGlmIG9uZSB3YXMgc2VudCwgc2FtZSBhcyBzcGFuIHJlcXVpcmVtZW50XG4gICAgaWYgKHNwYW5BdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFXSkge1xuICAgICAgICBtZXRyaWNBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFXSA9XG4gICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVNQT05TRV9TVEFUVVNfQ09ERV07XG4gICAgfVxuICAgIHJldHVybiBtZXRyaWNBdHRyaWJ1dGVzO1xufTtcbmV4cG9ydHMuZ2V0SW5jb21pbmdTdGFibGVSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2UgPSBnZXRJbmNvbWluZ1N0YWJsZVJlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZTtcbmZ1bmN0aW9uIGhlYWRlckNhcHR1cmUodHlwZSwgaGVhZGVycykge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRIZWFkZXJzID0gbmV3IE1hcCgpO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBoZWFkZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkSGVhZGVyID0gaGVhZGVyc1tpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBub3JtYWxpemVkSGVhZGVycy5zZXQoY2FwdHVyZWRIZWFkZXIsIGNhcHR1cmVkSGVhZGVyLnJlcGxhY2UoLy0vZywgJ18nKSk7XG4gICAgfVxuICAgIHJldHVybiAoc3BhbiwgZ2V0SGVhZGVyKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2FwdHVyZWRIZWFkZXIgb2Ygbm9ybWFsaXplZEhlYWRlcnMua2V5cygpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEhlYWRlcihjYXB0dXJlZEhlYWRlcik7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEhlYWRlciA9IG5vcm1hbGl6ZWRIZWFkZXJzLmdldChjYXB0dXJlZEhlYWRlcik7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgaHR0cC4ke3R5cGV9LmhlYWRlci4ke25vcm1hbGl6ZWRIZWFkZXJ9YDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoa2V5LCBbdmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShrZXksIFt2YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMuaGVhZGVyQ2FwdHVyZSA9IGhlYWRlckNhcHR1cmU7XG5jb25zdCBLTk9XTl9NRVRIT0RTID0gbmV3IFNldChbXG4gICAgLy8gbWV0aG9kcyBmcm9tIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwLmh0bWwjbmFtZS1tZXRob2RzXG4gICAgJ0dFVCcsXG4gICAgJ0hFQUQnLFxuICAgICdQT1NUJyxcbiAgICAnUFVUJyxcbiAgICAnREVMRVRFJyxcbiAgICAnQ09OTkVDVCcsXG4gICAgJ09QVElPTlMnLFxuICAgICdUUkFDRScsXG4gICAgLy8gUEFUQ0ggZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTc4OS5odG1sXG4gICAgJ1BBVENIJyxcbl0pO1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgIGlmIChtZXRob2QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ0dFVCc7XG4gICAgfVxuICAgIGNvbnN0IHVwcGVyID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKEtOT1dOX01FVEhPRFMuaGFzKHVwcGVyKSkge1xuICAgICAgICByZXR1cm4gdXBwZXI7XG4gICAgfVxuICAgIHJldHVybiAnX09USEVSJztcbn1cbmZ1bmN0aW9uIHBhcnNlRm9yd2FyZGVkSGVhZGVyKGhlYWRlcikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmb3J3YXJkZWRQYXJzZShoZWFkZXIpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdHRwSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBgbm9kZTpodHRwYCBhbmQgYG5vZGU6aHR0cHNgIGluc3RydW1lbnRhdGlvbiBmb3IgT3BlblRlbGVtZXRyeVxuICovXG5jbGFzcyBIdHRwSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgLyoqIGtlZXAgdHJhY2sgb24gc3BhbnMgbm90IGVuZGVkICovXG4gICAgX3NwYW5Ob3RFbmRlZCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgX2hlYWRlckNhcHR1cmU7XG4gICAgX3NlbWNvbnZTdGFiaWxpdHkgPSBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRDtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcignQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWh0dHAnLCB2ZXJzaW9uXzEuVkVSU0lPTiwgY29uZmlnKTtcbiAgICAgICAgdGhpcy5faGVhZGVyQ2FwdHVyZSA9IHRoaXMuX2NyZWF0ZUhlYWRlckNhcHR1cmUoKTtcbiAgICAgICAgdGhpcy5fc2VtY29udlN0YWJpbGl0eSA9ICgwLCBpbnN0cnVtZW50YXRpb25fMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cikoJ2h0dHAnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIF91cGRhdGVNZXRyaWNJbnN0cnVtZW50cygpIHtcbiAgICAgICAgdGhpcy5fb2xkSHR0cFNlcnZlckR1cmF0aW9uSGlzdG9ncmFtID0gdGhpcy5tZXRlci5jcmVhdGVIaXN0b2dyYW0oJ2h0dHAuc2VydmVyLmR1cmF0aW9uJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNZWFzdXJlcyB0aGUgZHVyYXRpb24gb2YgaW5ib3VuZCBIVFRQIHJlcXVlc3RzLicsXG4gICAgICAgICAgICB1bml0OiAnbXMnLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBhcGlfMS5WYWx1ZVR5cGUuRE9VQkxFLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb2xkSHR0cENsaWVudER1cmF0aW9uSGlzdG9ncmFtID0gdGhpcy5tZXRlci5jcmVhdGVIaXN0b2dyYW0oJ2h0dHAuY2xpZW50LmR1cmF0aW9uJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNZWFzdXJlcyB0aGUgZHVyYXRpb24gb2Ygb3V0Ym91bmQgSFRUUCByZXF1ZXN0cy4nLFxuICAgICAgICAgICAgdW5pdDogJ21zJyxcbiAgICAgICAgICAgIHZhbHVlVHlwZTogYXBpXzEuVmFsdWVUeXBlLkRPVUJMRSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N0YWJsZUh0dHBTZXJ2ZXJEdXJhdGlvbkhpc3RvZ3JhbSA9IHRoaXMubWV0ZXIuY3JlYXRlSGlzdG9ncmFtKHNlbWFudGljX2NvbnZlbnRpb25zXzEuTUVUUklDX0hUVFBfU0VSVkVSX1JFUVVFU1RfRFVSQVRJT04sIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRHVyYXRpb24gb2YgSFRUUCBzZXJ2ZXIgcmVxdWVzdHMuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgICAgIHZhbHVlVHlwZTogYXBpXzEuVmFsdWVUeXBlLkRPVUJMRSxcbiAgICAgICAgICAgIGFkdmljZToge1xuICAgICAgICAgICAgICAgIGV4cGxpY2l0QnVja2V0Qm91bmRhcmllczogW1xuICAgICAgICAgICAgICAgICAgICAwLjAwNSwgMC4wMSwgMC4wMjUsIDAuMDUsIDAuMDc1LCAwLjEsIDAuMjUsIDAuNSwgMC43NSwgMSwgMi41LCA1LFxuICAgICAgICAgICAgICAgICAgICA3LjUsIDEwLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3RhYmxlSHR0cENsaWVudER1cmF0aW9uSGlzdG9ncmFtID0gdGhpcy5tZXRlci5jcmVhdGVIaXN0b2dyYW0oc2VtYW50aWNfY29udmVudGlvbnNfMS5NRVRSSUNfSFRUUF9DTElFTlRfUkVRVUVTVF9EVVJBVElPTiwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEdXJhdGlvbiBvZiBIVFRQIGNsaWVudCByZXF1ZXN0cy4nLFxuICAgICAgICAgICAgdW5pdDogJ3MnLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBhcGlfMS5WYWx1ZVR5cGUuRE9VQkxFLFxuICAgICAgICAgICAgYWR2aWNlOiB7XG4gICAgICAgICAgICAgICAgZXhwbGljaXRCdWNrZXRCb3VuZGFyaWVzOiBbXG4gICAgICAgICAgICAgICAgICAgIDAuMDA1LCAwLjAxLCAwLjAyNSwgMC4wNSwgMC4wNzUsIDAuMSwgMC4yNSwgMC41LCAwLjc1LCAxLCAyLjUsIDUsXG4gICAgICAgICAgICAgICAgICAgIDcuNSwgMTAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcmVjb3JkU2VydmVyRHVyYXRpb24oZHVyYXRpb25Ncywgb2xkQXR0cmlidXRlcywgc3RhYmxlQXR0cmlidXRlcykge1xuICAgICAgICBpZiAodGhpcy5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAvLyBvbGQgaGlzdG9ncmFtIGlzIGNvdW50ZWQgaW4gTVNcbiAgICAgICAgICAgIHRoaXMuX29sZEh0dHBTZXJ2ZXJEdXJhdGlvbkhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25Ncywgb2xkQXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgLy8gc3RhYmxlIGhpc3RvZ3JhbSBpcyBjb3VudGVkIGluIFNcbiAgICAgICAgICAgIHRoaXMuX3N0YWJsZUh0dHBTZXJ2ZXJEdXJhdGlvbkhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25NcyAvIDEwMDAsIHN0YWJsZUF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9yZWNvcmRDbGllbnREdXJhdGlvbihkdXJhdGlvbk1zLCBvbGRBdHRyaWJ1dGVzLCBzdGFibGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgICAgIC8vIG9sZCBoaXN0b2dyYW0gaXMgY291bnRlZCBpbiBNU1xuICAgICAgICAgICAgdGhpcy5fb2xkSHR0cENsaWVudER1cmF0aW9uSGlzdG9ncmFtLnJlY29yZChkdXJhdGlvbk1zLCBvbGRBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICAvLyBzdGFibGUgaGlzdG9ncmFtIGlzIGNvdW50ZWQgaW4gU1xuICAgICAgICAgICAgdGhpcy5fc3RhYmxlSHR0cENsaWVudER1cmF0aW9uSGlzdG9ncmFtLnJlY29yZChkdXJhdGlvbk1zIC8gMTAwMCwgc3RhYmxlQXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLl9oZWFkZXJDYXB0dXJlID0gdGhpcy5fY3JlYXRlSGVhZGVyQ2FwdHVyZSgpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW3RoaXMuX2dldEh0dHBzSW5zdHJ1bWVudGF0aW9uKCksIHRoaXMuX2dldEh0dHBJbnN0cnVtZW50YXRpb24oKV07XG4gICAgfVxuICAgIF9nZXRIdHRwSW5zdHJ1bWVudGF0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdodHRwJywgWycqJ10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgY29uc3QgaXNFU00gPSBtb2R1bGVFeHBvcnRzW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdldENvbmZpZygpLmRpc2FibGVPdXRnb2luZ1JlcXVlc3RJbnN0cnVtZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkUmVxdWVzdCA9IHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3JlcXVlc3QnLCB0aGlzLl9nZXRQYXRjaE91dGdvaW5nUmVxdWVzdEZ1bmN0aW9uKCdodHRwJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRHZXQgPSB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdnZXQnLCB0aGlzLl9nZXRQYXRjaE91dGdvaW5nR2V0RnVuY3Rpb24ocGF0Y2hlZFJlcXVlc3QpKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNFU00pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVG8gaGFuZGxlIGBpbXBvcnQgaHR0cCBmcm9tICdodHRwJ2AsIHdoaWNoIHJldHVybnMgdGhlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0LCB3ZSBuZWVkIHRvIHNldCBgbW9kdWxlLmRlZmF1bHQuKmAuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUV4cG9ydHMuZGVmYXVsdC5yZXF1ZXN0ID0gcGF0Y2hlZFJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUV4cG9ydHMuZGVmYXVsdC5nZXQgPSBwYXRjaGVkR2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5nZXRDb25maWcoKS5kaXNhYmxlSW5jb21pbmdSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlNlcnZlci5wcm90b3R5cGUsICdlbWl0JywgdGhpcy5fZ2V0UGF0Y2hJbmNvbWluZ1JlcXVlc3RGdW5jdGlvbignaHR0cCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q29uZmlnKCkuZGlzYWJsZU91dGdvaW5nUmVxdWVzdEluc3RydW1lbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnZ2V0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q29uZmlnKCkuZGlzYWJsZUluY29taW5nUmVxdWVzdEluc3RydW1lbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLlNlcnZlci5wcm90b3R5cGUsICdlbWl0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0SHR0cHNJbnN0cnVtZW50YXRpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2h0dHBzJywgWycqJ10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgY29uc3QgaXNFU00gPSBtb2R1bGVFeHBvcnRzW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdldENvbmZpZygpLmRpc2FibGVPdXRnb2luZ1JlcXVlc3RJbnN0cnVtZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkUmVxdWVzdCA9IHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3JlcXVlc3QnLCB0aGlzLl9nZXRQYXRjaEh0dHBzT3V0Z29pbmdSZXF1ZXN0RnVuY3Rpb24oJ2h0dHBzJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRHZXQgPSB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdnZXQnLCB0aGlzLl9nZXRQYXRjaEh0dHBzT3V0Z29pbmdHZXRGdW5jdGlvbihwYXRjaGVkUmVxdWVzdCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0VTTSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUbyBoYW5kbGUgYGltcG9ydCBodHRwcyBmcm9tICdodHRwcydgLCB3aGljaCByZXR1cm5zIHRoZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCwgd2UgbmVlZCB0byBzZXQgYG1vZHVsZS5kZWZhdWx0LipgLlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICBtb2R1bGVFeHBvcnRzLmRlZmF1bHQucmVxdWVzdCA9IHBhdGNoZWRSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICBtb2R1bGVFeHBvcnRzLmRlZmF1bHQuZ2V0ID0gcGF0Y2hlZEdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q29uZmlnKCkuZGlzYWJsZUluY29taW5nUmVxdWVzdEluc3RydW1lbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5TZXJ2ZXIucHJvdG90eXBlLCAnZW1pdCcsIHRoaXMuX2dldFBhdGNoSW5jb21pbmdSZXF1ZXN0RnVuY3Rpb24oJ2h0dHBzJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5nZXRDb25maWcoKS5kaXNhYmxlT3V0Z29pbmdSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdyZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdnZXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5nZXRDb25maWcoKS5kaXNhYmxlSW5jb21pbmdSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuU2VydmVyLnByb3RvdHlwZSwgJ2VtaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgc3BhbnMgZm9yIGluY29taW5nIHJlcXVlc3RzLCByZXN0b3Jpbmcgc3BhbnMnIGNvbnRleHQgaWYgYXBwbGllZC5cbiAgICAgKi9cbiAgICBfZ2V0UGF0Y2hJbmNvbWluZ1JlcXVlc3RGdW5jdGlvbihjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luY29taW5nUmVxdWVzdEZ1bmN0aW9uKGNvbXBvbmVudCwgb3JpZ2luYWwpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHNwYW5zIGZvciBvdXRnb2luZyByZXF1ZXN0cywgc2VuZGluZyBzcGFucycgY29udGV4dCBmb3IgZGlzdHJpYnV0ZWRcbiAgICAgKiB0cmFjaW5nLlxuICAgICAqL1xuICAgIF9nZXRQYXRjaE91dGdvaW5nUmVxdWVzdEZ1bmN0aW9uKGNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0Z29pbmdSZXF1ZXN0RnVuY3Rpb24oY29tcG9uZW50LCBvcmlnaW5hbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRQYXRjaE91dGdvaW5nR2V0RnVuY3Rpb24oY2xpZW50UmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gKF9vcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgLy8gUmUtaW1wbGVtZW50IGh0dHAuZ2V0LiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgKGluc3RlYWQgb2YgdXNpbmdcbiAgICAgICAgICAgIC8vIGdldFBhdGNoT3V0Z29pbmdSZXF1ZXN0RnVuY3Rpb24gdG8gcGF0Y2ggaXQpIGJlY2F1c2Ugd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gc2V0IHRoZSB0cmFjZSBjb250ZXh0IGhlYWRlciBiZWZvcmUgdGhlIHJldHVybmVkIGh0dHAuQ2xpZW50UmVxdWVzdCBpc1xuICAgICAgICAgICAgLy8gZW5kZWQuIFRoZSBOb2RlLmpzIGRvY3Mgc3RhdGUgdGhhdCB0aGUgb25seSBkaWZmZXJlbmNlcyBiZXR3ZWVuXG4gICAgICAgICAgICAvLyByZXF1ZXN0IGFuZCBnZXQgYXJlIHRoYXQgKDEpIGdldCBkZWZhdWx0cyB0byB0aGUgSFRUUCBHRVQgbWV0aG9kIGFuZFxuICAgICAgICAgICAgLy8gKDIpIHRoZSByZXR1cm5lZCByZXF1ZXN0IG9iamVjdCBpcyBlbmRlZCBpbW1lZGlhdGVseS4gVGhlIGZvcm1lciBpc1xuICAgICAgICAgICAgLy8gYWxyZWFkeSB0cnVlIChhdCBsZWFzdCBpbiBzdXBwb3J0ZWQgTm9kZSB2ZXJzaW9ucyB1cCB0byB2MTApLCBzbyB3ZVxuICAgICAgICAgICAgLy8gc2ltcGx5IGZvbGxvdyB0aGUgbGF0dGVyLiBSZWY6XG4gICAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvaHR0cC5odG1sI2h0dHBfaHR0cF9nZXRfb3B0aW9uc19jYWxsYmFja1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvY2xvdWQtdHJhY2Utbm9kZWpzL2Jsb2IvbWFzdGVyL3NyYy9pbnN0cnVtZW50YXRpb25zL2luc3RydW1lbnRhdGlvbi1odHRwLnRzI0wxOThcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBvdXRnb2luZ0dldFJlcXVlc3Qob3B0aW9ucywgLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcSA9IGNsaWVudFJlcXVlc3Qob3B0aW9ucywgLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogUGF0Y2hlcyBIVFRQUyBvdXRnb2luZyByZXF1ZXN0cyAqL1xuICAgIF9nZXRQYXRjaEh0dHBzT3V0Z29pbmdSZXF1ZXN0RnVuY3Rpb24oY29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaHR0cHNPdXRnb2luZ1JlcXVlc3QoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zXG4gICAgICAgICAgICBvcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFrZXMgc3VyZSBvcHRpb25zIHdpbGwgaGF2ZSBkZWZhdWx0IEhUVFBTIHBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50ID09PSAnaHR0cHMnICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPy5jb25zdHJ1Y3Rvcj8ubmFtZSAhPT0gJ1VSTCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3NldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLl9nZXRQYXRjaE91dGdvaW5nUmVxdWVzdEZ1bmN0aW9uKGNvbXBvbmVudCkob3JpZ2luYWwpKG9wdGlvbnMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3NldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucy5wcm90b2NvbCA9IG9wdGlvbnMucHJvdG9jb2wgfHwgJ2h0dHBzOic7XG4gICAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucG9ydCB8fCA0NDM7XG4gICAgfVxuICAgIC8qKiBQYXRjaGVzIEhUVFBTIG91dGdvaW5nIGdldCByZXF1ZXN0cyAqL1xuICAgIF9nZXRQYXRjaEh0dHBzT3V0Z29pbmdHZXRGdW5jdGlvbihjbGllbnRSZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaHR0cHNPdXRnb2luZ1JlcXVlc3QoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zXG4gICAgICAgICAgICBvcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi5fZ2V0UGF0Y2hPdXRnb2luZ0dldEZ1bmN0aW9uKGNsaWVudFJlcXVlc3QpKG9yaWdpbmFsKShvcHRpb25zLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBldmVudCBsaXN0ZW5lcnMgdG8gYSBjbGllbnQgcmVxdWVzdCB0byBlbmQgc3BhbiBhbmQgYWRkIHNwYW4gYXR0cmlidXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBvcmlnaW5hbCByZXF1ZXN0IG9iamVjdC5cbiAgICAgKiBAcGFyYW0gc3BhbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgb3BlcmF0aW9uXG4gICAgICogQHBhcmFtIHN0YXJ0VGltZSByZXByZXNlbnRpbmcgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHJlcXVlc3QgdG8gY2FsY3VsYXRlIGR1cmF0aW9uIGluIE1ldHJpY1xuICAgICAqIEBwYXJhbSBvbGRNZXRyaWNBdHRyaWJ1dGVzIG1ldHJpYyBhdHRyaWJ1dGVzIGZvciBvbGQgc2VtYW50aWMgY29udmVudGlvbnNcbiAgICAgKiBAcGFyYW0gc3RhYmxlTWV0cmljQXR0cmlidXRlcyBtZXRyaWMgYXR0cmlidXRlcyBmb3IgbmV3IHNlbWFudGljIGNvbnZlbnRpb25zXG4gICAgICovXG4gICAgX3RyYWNlQ2xpZW50UmVxdWVzdChyZXF1ZXN0LCBzcGFuLCBzdGFydFRpbWUsIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlnKCkucmVxdWVzdEhvb2spIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxSZXF1ZXN0SG9vayhzcGFuLCByZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcmVxdWVzdCBoYXMgZXJyb3JlZCBvciB0aGUgcmVzcG9uc2UgaGFzIGVuZGVkL2Vycm9yZWQuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgcmVzcG9uc2VGaW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICAvKlxuICAgICAgICAgKiBVc2VyICdyZXNwb25zZScgZXZlbnQgbGlzdGVuZXJzIGNhbiBiZSBhZGRlZCBiZWZvcmUgb3VyIGxpc3RlbmVyLFxuICAgICAgICAgKiBmb3JjZSBvdXIgbGlzdGVuZXIgdG8gYmUgdGhlIGZpcnN0LCBzbyByZXNwb25zZSBlbWl0dGVyIGlzIGJvdW5kXG4gICAgICAgICAqIGJlZm9yZSBhbnkgdXNlciBsaXN0ZW5lcnMgYXJlIGFkZGVkIHRvIGl0LlxuICAgICAgICAgKi9cbiAgICAgICAgcmVxdWVzdC5wcmVwZW5kTGlzdGVuZXIoJ3Jlc3BvbnNlJywgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdvdXRnb2luZ1JlcXVlc3Qgb24gcmVzcG9uc2UoKScpO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QubGlzdGVuZXJDb3VudCgncmVzcG9uc2UnKSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzdW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUF0dHJpYnV0ZXMgPSAoMCwgdXRpbHNfMS5nZXRPdXRnb2luZ1JlcXVlc3RBdHRyaWJ1dGVzT25SZXNwb25zZSkocmVzcG9uc2UsIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkpO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHJlc3BvbnNlQXR0cmlidXRlcyk7XG4gICAgICAgICAgICBvbGRNZXRyaWNBdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbihvbGRNZXRyaWNBdHRyaWJ1dGVzLCAoMCwgdXRpbHNfMS5nZXRPdXRnb2luZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSkocmVzcG9uc2VBdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbihzdGFibGVNZXRyaWNBdHRyaWJ1dGVzLCAoMCwgdXRpbHNfMS5nZXRPdXRnb2luZ1N0YWJsZVJlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzT25SZXNwb25zZSkocmVzcG9uc2VBdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDb25maWcoKS5yZXNwb25zZUhvb2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsUmVzcG9uc2VIb29rKHNwYW4sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hlYWRlckNhcHR1cmUuY2xpZW50LmNhcHR1cmVSZXF1ZXN0SGVhZGVycyhzcGFuLCBoZWFkZXIgPT4gcmVxdWVzdC5nZXRIZWFkZXIoaGVhZGVyKSk7XG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJDYXB0dXJlLmNsaWVudC5jYXB0dXJlUmVzcG9uc2VIZWFkZXJzKHNwYW4sIGhlYWRlciA9PiByZXNwb25zZS5oZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgICAgICAgYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1Zygnb3V0Z29pbmdSZXF1ZXN0IG9uIGVuZCgpJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlRmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNwb25zZUZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBsZXQgc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkICYmICFyZXNwb25zZS5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB7IGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBiZWhhdmVzIHNhbWUgZm9yIG5ldyBhbmQgb2xkIHNlbWNvbnZcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogKDAsIHV0aWxzXzEucGFyc2VSZXNwb25zZVN0YXR1cykoYXBpXzEuU3BhbktpbmQuQ0xJRU5ULCByZXNwb25zZS5zdGF0dXNDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb25maWcoKS5hcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHRoaXMuZ2V0Q29uZmlnKCkuYXBwbHlDdXN0b21BdHRyaWJ1dGVzT25TcGFuKHNwYW4sIHJlcXVlc3QsIHJlc3BvbnNlKSwgKCkgPT4geyB9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VIdHRwU3BhbihzcGFuLCBhcGlfMS5TcGFuS2luZC5DTElFTlQsIHN0YXJ0VGltZSwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsIGVuZEhhbmRsZXIpO1xuICAgICAgICAgICAgcmVzcG9uc2Uub24oZXZlbnRzXzEuZXJyb3JNb25pdG9yLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdvdXRnb2luZ1JlcXVlc3Qgb24gZXJyb3IoKScsIGVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VGaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uT3V0Z29pbmdSZXF1ZXN0RXJyb3Ioc3Bhbiwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcywgc3RhcnRUaW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3Qub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1Zygnb3V0Z29pbmdSZXF1ZXN0IG9uIHJlcXVlc3QgY2xvc2UoKScpO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXNwb25zZUZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzcG9uc2VGaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUh0dHBTcGFuKHNwYW4sIGFwaV8xLlNwYW5LaW5kLkNMSUVOVCwgc3RhcnRUaW1lLCBvbGRNZXRyaWNBdHRyaWJ1dGVzLCBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3Qub24oZXZlbnRzXzEuZXJyb3JNb25pdG9yLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ291dGdvaW5nUmVxdWVzdCBvbiByZXF1ZXN0IGVycm9yKCknLCBlcnJvcik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VGaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fb25PdXRnb2luZ1JlcXVlc3RFcnJvcihzcGFuLCBvbGRNZXRyaWNBdHRyaWJ1dGVzLCBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzLCBzdGFydFRpbWUsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ2h0dHAuQ2xpZW50UmVxdWVzdCByZXR1cm4gcmVxdWVzdCcpO1xuICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG4gICAgX2luY29taW5nUmVxdWVzdEZ1bmN0aW9uKGNvbXBvbmVudCwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGluY29taW5nUmVxdWVzdChldmVudCwgLi4uYXJncykge1xuICAgICAgICAgICAgLy8gT25seSB0cmFjZXMgcmVxdWVzdCBldmVudHNcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gJ3JlcXVlc3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtldmVudCwgLi4uYXJnc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGFyZ3NbMF07XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGFyZ3NbMV07XG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSByZXF1ZXN0Lm1ldGhvZCB8fCAnR0VUJztcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5kZWJ1ZyhgJHtjb21wb25lbnR9IGluc3RydW1lbnRhdGlvbiBpbmNvbWluZ1JlcXVlc3RgKTtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLmlnbm9yZUluY29taW5nUmVxdWVzdEhvb2s/LihyZXF1ZXN0KSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5lcnJvcignY2F1Z2h0IGlnbm9yZUluY29taW5nUmVxdWVzdEhvb2sgZXJyb3I6ICcsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBhcGlfMS5jb250ZXh0LmJpbmQoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgW2V2ZW50LCAuLi5hcmdzXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzO1xuICAgICAgICAgICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSAoMCwgdXRpbHNfMS5nZXRJbmNvbWluZ1JlcXVlc3RBdHRyaWJ1dGVzKShyZXF1ZXN0LCB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICAgICAgICAgICAgc2VydmVyTmFtZTogaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLnNlcnZlck5hbWUsXG4gICAgICAgICAgICAgICAgaG9va0F0dHJpYnV0ZXM6IGluc3RydW1lbnRhdGlvbi5fY2FsbFN0YXJ0U3Bhbkhvb2socmVxdWVzdCwgaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLnN0YXJ0SW5jb21pbmdTcGFuSG9vayksXG4gICAgICAgICAgICAgICAgc2VtY29udlN0YWJpbGl0eTogaW5zdHJ1bWVudGF0aW9uLl9zZW1jb252U3RhYmlsaXR5LFxuICAgICAgICAgICAgICAgIGVuYWJsZVN5bnRoZXRpY1NvdXJjZURldGVjdGlvbjogaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLmVuYWJsZVN5bnRoZXRpY1NvdXJjZURldGVjdGlvbiB8fCBmYWxzZSxcbiAgICAgICAgICAgIH0sIGluc3RydW1lbnRhdGlvbi5fZGlhZyk7XG4gICAgICAgICAgICBjb25zdCBzcGFuT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5TRVJWRVIsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gKDAsIGNvcmVfMS5oclRpbWUpKCk7XG4gICAgICAgICAgICBjb25zdCBvbGRNZXRyaWNBdHRyaWJ1dGVzID0gKDAsIHV0aWxzXzEuZ2V0SW5jb21pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlcykoc3BhbkF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgLy8gcmVxdWVzdCBtZXRob2QgYW5kIHVybC5zY2hlbWUgYXJlIGJvdGggcmVxdWlyZWQgc3BhbiBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBjb25zdCBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRF06IHNwYW5BdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EXSxcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VSTF9TQ0hFTUVdOiBzcGFuQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVVJMX1NDSEVNRV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gcmVjb21tZW5kZWQgaWYgYW5kIG9ubHkgaWYgb25lIHdhcyBzZW50LCBzYW1lIGFzIHNwYW4gcmVjb21tZW5kYXRpb25cbiAgICAgICAgICAgIGlmIChzcGFuQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfTkVUV09SS19QUk9UT0NPTF9WRVJTSU9OXSkge1xuICAgICAgICAgICAgICAgIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUFJPVE9DT0xfVkVSU0lPTl0gPVxuICAgICAgICAgICAgICAgICAgICBzcGFuQXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfTkVUV09SS19QUk9UT0NPTF9WRVJTSU9OXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGFwaV8xLnByb3BhZ2F0aW9uLmV4dHJhY3QoYXBpXzEuUk9PVF9DT05URVhULCBoZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24uX3N0YXJ0SHR0cFNwYW4obWV0aG9kLCBzcGFuT3B0aW9ucywgY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IHJwY01ldGFkYXRhID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGNvcmVfMS5SUENUeXBlLkhUVFAsXG4gICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKCgwLCBjb3JlXzEuc2V0UlBDTWV0YWRhdGEpKGFwaV8xLnRyYWNlLnNldFNwYW4oY3R4LCBzcGFuKSwgcnBjTWV0YWRhdGEpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKS5yZXF1ZXN0SG9vaykge1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2NhbGxSZXF1ZXN0SG9vayhzcGFuLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKS5yZXNwb25zZUhvb2spIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jYWxsUmVzcG9uc2VIb29rKHNwYW4sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9oZWFkZXJDYXB0dXJlLnNlcnZlci5jYXB0dXJlUmVxdWVzdEhlYWRlcnMoc3BhbiwgaGVhZGVyID0+IHJlcXVlc3QuaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAvLyBBZnRlciAnZXJyb3InLCBubyBmdXJ0aGVyIGV2ZW50cyBvdGhlciB0aGFuICdjbG9zZScgc2hvdWxkIGJlIGVtaXR0ZWQuXG4gICAgICAgICAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX29uU2VydmVyUmVzcG9uc2VGaW5pc2gocmVxdWVzdCwgcmVzcG9uc2UsIHNwYW4sIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMsIHN0YXJ0VGltZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oZXZlbnRzXzEuZXJyb3JNb25pdG9yLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9vblNlcnZlclJlc3BvbnNlRXJyb3Ioc3Bhbiwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcywgc3RhcnRUaW1lLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gb3JpZ2luYWwuYXBwbHkodGhpcywgW2V2ZW50LCAuLi5hcmdzXSksIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX29uU2VydmVyUmVzcG9uc2VFcnJvcihzcGFuLCBvbGRNZXRyaWNBdHRyaWJ1dGVzLCBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzLCBzdGFydFRpbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX291dGdvaW5nUmVxdWVzdEZ1bmN0aW9uKGNvbXBvbmVudCwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG91dGdvaW5nUmVxdWVzdChvcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoISgwLCB1dGlsc18xLmlzVmFsaWRPcHRpb25zVHlwZSkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgW29wdGlvbnMsIC4uLmFyZ3NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4dHJhT3B0aW9ucyA9IHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycgfHwgb3B0aW9ucyBpbnN0YW5jZW9mIHVybC5VUkwpXG4gICAgICAgICAgICAgICAgPyBhcmdzLnNoaWZ0KClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHsgbWV0aG9kLCBpbnZhbGlkVXJsLCBvcHRpb25zUGFyc2VkIH0gPSAoMCwgdXRpbHNfMS5nZXRSZXF1ZXN0SW5mbykoaW5zdHJ1bWVudGF0aW9uLl9kaWFnLCBvcHRpb25zLCBleHRyYU9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBpbnN0cnVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAuZ2V0Q29uZmlnKClcbiAgICAgICAgICAgICAgICAuaWdub3JlT3V0Z29pbmdSZXF1ZXN0SG9vaz8uKG9wdGlvbnNQYXJzZWQpLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9kaWFnLmVycm9yKCdjYXVnaHQgaWdub3JlT3V0Z29pbmdSZXF1ZXN0SG9vayBlcnJvcjogJywgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgW29wdGlvbnNQYXJzZWQsIC4uLmFyZ3NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9ICgwLCB1dGlsc18xLmV4dHJhY3RIb3N0bmFtZUFuZFBvcnQpKG9wdGlvbnNQYXJzZWQpO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9ICgwLCB1dGlsc18xLmdldE91dGdvaW5nUmVxdWVzdEF0dHJpYnV0ZXMpKG9wdGlvbnNQYXJzZWQsIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICAgICAgICBob29rQXR0cmlidXRlczogaW5zdHJ1bWVudGF0aW9uLl9jYWxsU3RhcnRTcGFuSG9vayhvcHRpb25zUGFyc2VkLCBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCkuc3RhcnRPdXRnb2luZ1NwYW5Ib29rKSxcbiAgICAgICAgICAgICAgICByZWRhY3RlZFF1ZXJ5UGFyYW1zOiBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCkucmVkYWN0ZWRRdWVyeVBhcmFtcywgLy8gQWRkZWQgY29uZmlnIGZvciBhZGRpbmcgY3VzdG9tIHF1ZXJ5IHN0cmluZ3NcbiAgICAgICAgICAgIH0sIGluc3RydW1lbnRhdGlvbi5fc2VtY29udlN0YWJpbGl0eSwgaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLmVuYWJsZVN5bnRoZXRpY1NvdXJjZURldGVjdGlvbiB8fCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSAoMCwgY29yZV8xLmhyVGltZSkoKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZE1ldHJpY0F0dHJpYnV0ZXMgPSAoMCwgdXRpbHNfMS5nZXRPdXRnb2luZ1JlcXVlc3RNZXRyaWNBdHRyaWJ1dGVzKShhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIC8vIHJlcXVlc3QgbWV0aG9kLCBzZXJ2ZXIgYWRkcmVzcywgYW5kIHNlcnZlciBwb3J0IGFyZSBib3RoIHJlcXVpcmVkIHNwYW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgY29uc3Qgc3RhYmxlTWV0cmljQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0RdOiBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EXSxcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX0FERFJFU1NdLFxuICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX1BPUlRdOiBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfUE9SVF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gcmVxdWlyZWQgaWYgYW5kIG9ubHkgaWYgb25lIHdhcyBzZW50LCBzYW1lIGFzIHNwYW4gcmVxdWlyZW1lbnRcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFU1BPTlNFX1NUQVRVU19DT0RFXSkge1xuICAgICAgICAgICAgICAgIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVTUE9OU0VfU1RBVFVTX0NPREVdID1cbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVNQT05TRV9TVEFUVVNfQ09ERV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZWNvbW1lbmRlZCBpZiBhbmQgb25seSBpZiBvbmUgd2FzIHNlbnQsIHNhbWUgYXMgc3BhbiByZWNvbW1lbmRhdGlvblxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUFJPVE9DT0xfVkVSU0lPTl0pIHtcbiAgICAgICAgICAgICAgICBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9ORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05dID1cbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfTkVUV09SS19QUk9UT0NPTF9WRVJTSU9OXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwYW5PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24uX3N0YXJ0SHR0cFNwYW4obWV0aG9kLCBzcGFuT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gYXBpXzEudHJhY2Uuc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9uc1BhcnNlZC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1BhcnNlZC5oZWFkZXJzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgaGVhZGVycyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgYW4gb2JqZWN0IHRoZVxuICAgICAgICAgICAgICAgIC8vIGNhbGxlciBtaWdodCBoYXZlIGEgcmVmZXJlbmNlIHRvLlxuICAgICAgICAgICAgICAgIG9wdGlvbnNQYXJzZWQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnNQYXJzZWQuaGVhZGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcGlfMS5wcm9wYWdhdGlvbi5pbmplY3QocmVxdWVzdENvbnRleHQsIG9wdGlvbnNQYXJzZWQuaGVhZGVycyk7XG4gICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKHJlcXVlc3RDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBUaGUgcmVzcG9uc2UgY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZCBiZWZvcmUgQ2xpZW50UmVxdWVzdCBpcyBib3VuZCxcbiAgICAgICAgICAgICAgICAgKiB0aHVzIGl0IGlzIG5lZWRlZCB0byBiaW5kIGl0IGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBjYiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGFwaV8xLmNvbnRleHQuYmluZChwYXJlbnRDb250ZXh0LCBjYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZFVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSB1cmwgaXMgaW52YWxpZCwgdGhlcmUncyBubyBwb2ludCBpbiBpbmplY3RpbmcgY29udGV4dCBhcyBpdCB3aWxsIGZhaWwgdmFsaWRhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhc3NpbmcgaW4gd2hhdCB0aGUgdXNlciBwcm92aWRlZCB3aWxsIGdpdmUgdGhlIHVzZXIgYW4gZXJyb3IgdGhhdCBtYXRjaGVzIHdoYXQgdGhleSdkIHNlZSB3aXRob3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaW5zdHJ1bWVudGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtvcHRpb25zLCAuLi5hcmdzXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgW29wdGlvbnNQYXJzZWQsIC4uLmFyZ3NdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX29uT3V0Z29pbmdSZXF1ZXN0RXJyb3Ioc3Bhbiwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcywgc3RhcnRUaW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5kZWJ1ZyhgJHtjb21wb25lbnR9IGluc3RydW1lbnRhdGlvbiBvdXRnb2luZ1JlcXVlc3RgKTtcbiAgICAgICAgICAgICAgICBhcGlfMS5jb250ZXh0LmJpbmQocGFyZW50Q29udGV4dCwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi5fdHJhY2VDbGllbnRSZXF1ZXN0KHJlcXVlc3QsIHNwYW4sIHN0YXJ0VGltZSwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX29uU2VydmVyUmVzcG9uc2VGaW5pc2gocmVxdWVzdCwgcmVzcG9uc2UsIHNwYW4sIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMsIHN0YXJ0VGltZSkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gKDAsIHV0aWxzXzEuZ2V0SW5jb21pbmdSZXF1ZXN0QXR0cmlidXRlc09uUmVzcG9uc2UpKHJlcXVlc3QsIHJlc3BvbnNlLCB0aGlzLl9zZW1jb252U3RhYmlsaXR5KTtcbiAgICAgICAgb2xkTWV0cmljQXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24ob2xkTWV0cmljQXR0cmlidXRlcywgKDAsIHV0aWxzXzEuZ2V0SW5jb21pbmdSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2UpKGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgc3RhYmxlTWV0cmljQXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24oc3RhYmxlTWV0cmljQXR0cmlidXRlcywgKDAsIHV0aWxzXzEuZ2V0SW5jb21pbmdTdGFibGVSZXF1ZXN0TWV0cmljQXR0cmlidXRlc09uUmVzcG9uc2UpKGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgdGhpcy5faGVhZGVyQ2FwdHVyZS5zZXJ2ZXIuY2FwdHVyZVJlc3BvbnNlSGVhZGVycyhzcGFuLCBoZWFkZXIgPT4gcmVzcG9uc2UuZ2V0SGVhZGVyKGhlYWRlcikpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcykuc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6ICgwLCB1dGlsc18xLnBhcnNlUmVzcG9uc2VTdGF0dXMpKGFwaV8xLlNwYW5LaW5kLlNFUlZFUiwgcmVzcG9uc2Uuc3RhdHVzQ29kZSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3V0ZSA9IGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUk9VVEVdO1xuICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgIHNwYW4udXBkYXRlTmFtZShgJHtyZXF1ZXN0Lm1ldGhvZCB8fCAnR0VUJ30gJHtyb3V0ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXRDb25maWcoKS5hcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW4pIHtcbiAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB0aGlzLmdldENvbmZpZygpLmFwcGx5Q3VzdG9tQXR0cmlidXRlc09uU3BhbihzcGFuLCByZXF1ZXN0LCByZXNwb25zZSksICgpID0+IHsgfSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xvc2VIdHRwU3BhbihzcGFuLCBhcGlfMS5TcGFuS2luZC5TRVJWRVIsIHN0YXJ0VGltZSwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcyk7XG4gICAgfVxuICAgIF9vbk91dGdvaW5nUmVxdWVzdEVycm9yKHNwYW4sIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMsIHN0YXJ0VGltZSwgZXJyb3IpIHtcbiAgICAgICAgKDAsIHV0aWxzXzEuc2V0U3BhbldpdGhFcnJvcikoc3BhbiwgZXJyb3IsIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkpO1xuICAgICAgICBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FUlJPUl9UWVBFXSA9IGVycm9yLm5hbWU7XG4gICAgICAgIHRoaXMuX2Nsb3NlSHR0cFNwYW4oc3BhbiwgYXBpXzEuU3BhbktpbmQuQ0xJRU5ULCBzdGFydFRpbWUsIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICBfb25TZXJ2ZXJSZXNwb25zZUVycm9yKHNwYW4sIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMsIHN0YXJ0VGltZSwgZXJyb3IpIHtcbiAgICAgICAgKDAsIHV0aWxzXzEuc2V0U3BhbldpdGhFcnJvcikoc3BhbiwgZXJyb3IsIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkpO1xuICAgICAgICBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FUlJPUl9UWVBFXSA9IGVycm9yLm5hbWU7XG4gICAgICAgIHRoaXMuX2Nsb3NlSHR0cFNwYW4oc3BhbiwgYXBpXzEuU3BhbktpbmQuU0VSVkVSLCBzdGFydFRpbWUsIG9sZE1ldHJpY0F0dHJpYnV0ZXMsIHN0YWJsZU1ldHJpY0F0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICBfc3RhcnRIdHRwU3BhbihuYW1lLCBvcHRpb25zLCBjdHggPSBhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIGEgcGFyZW50IGlzIHJlcXVpcmVkIGJ1dCBub3QgcHJlc2VudCwgd2UgdXNlIGEgYE5vb3BTcGFuYCB0byBzdGlsbFxuICAgICAgICAgKiBwcm9wYWdhdGUgY29udGV4dCB3aXRob3V0IHJlY29yZGluZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJlcXVpcmVQYXJlbnQgPSBvcHRpb25zLmtpbmQgPT09IGFwaV8xLlNwYW5LaW5kLkNMSUVOVFxuICAgICAgICAgICAgPyB0aGlzLmdldENvbmZpZygpLnJlcXVpcmVQYXJlbnRmb3JPdXRnb2luZ1NwYW5zXG4gICAgICAgICAgICA6IHRoaXMuZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudGZvckluY29taW5nU3BhbnM7XG4gICAgICAgIGxldCBzcGFuO1xuICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oY3R4KTtcbiAgICAgICAgaWYgKHJlcXVpcmVQYXJlbnQgPT09IHRydWUgJiZcbiAgICAgICAgICAgICghY3VycmVudFNwYW4gfHwgIWFwaV8xLnRyYWNlLmlzU3BhbkNvbnRleHRWYWxpZChjdXJyZW50U3Bhbi5zcGFuQ29udGV4dCgpKSkpIHtcbiAgICAgICAgICAgIHNwYW4gPSBhcGlfMS50cmFjZS53cmFwU3BhbkNvbnRleHQoYXBpXzEuSU5WQUxJRF9TUEFOX0NPTlRFWFQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlcXVpcmVQYXJlbnQgPT09IHRydWUgJiYgY3VycmVudFNwYW4/LnNwYW5Db250ZXh0KCkuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgIHNwYW4gPSBjdXJyZW50U3BhbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4obmFtZSwgb3B0aW9ucywgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zcGFuTm90RW5kZWQuYWRkKHNwYW4pO1xuICAgICAgICByZXR1cm4gc3BhbjtcbiAgICB9XG4gICAgX2Nsb3NlSHR0cFNwYW4oc3Bhbiwgc3BhbktpbmQsIHN0YXJ0VGltZSwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcykge1xuICAgICAgICBpZiAoIXRoaXMuX3NwYW5Ob3RFbmRlZC5oYXMoc3BhbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB0aGlzLl9zcGFuTm90RW5kZWQuZGVsZXRlKHNwYW4pO1xuICAgICAgICAvLyBSZWNvcmQgbWV0cmljc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWxsaXNlY29uZHMpKCgwLCBjb3JlXzEuaHJUaW1lRHVyYXRpb24pKHN0YXJ0VGltZSwgKDAsIGNvcmVfMS5oclRpbWUpKCkpKTtcbiAgICAgICAgaWYgKHNwYW5LaW5kID09PSBhcGlfMS5TcGFuS2luZC5TRVJWRVIpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY29yZFNlcnZlckR1cmF0aW9uKGR1cmF0aW9uLCBvbGRNZXRyaWNBdHRyaWJ1dGVzLCBzdGFibGVNZXRyaWNBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcGFuS2luZCA9PT0gYXBpXzEuU3BhbktpbmQuQ0xJRU5UKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNvcmRDbGllbnREdXJhdGlvbihkdXJhdGlvbiwgb2xkTWV0cmljQXR0cmlidXRlcywgc3RhYmxlTWV0cmljQXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NhbGxSZXNwb25zZUhvb2soc3BhbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHRoaXMuZ2V0Q29uZmlnKCkucmVzcG9uc2VIb29rKHNwYW4sIHJlc3BvbnNlKSwgKCkgPT4geyB9LCB0cnVlKTtcbiAgICB9XG4gICAgX2NhbGxSZXF1ZXN0SG9vayhzcGFuLCByZXF1ZXN0KSB7XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB0aGlzLmdldENvbmZpZygpLnJlcXVlc3RIb29rKHNwYW4sIHJlcXVlc3QpLCAoKSA9PiB7IH0sIHRydWUpO1xuICAgIH1cbiAgICBfY2FsbFN0YXJ0U3Bhbkhvb2socmVxdWVzdCwgaG9va0Z1bmMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBob29rRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBob29rRnVuYyhyZXF1ZXN0KSwgKCkgPT4geyB9LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY3JlYXRlSGVhZGVyQ2FwdHVyZSgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0SGVhZGVyczogKDAsIHV0aWxzXzEuaGVhZGVyQ2FwdHVyZSkoJ3JlcXVlc3QnLCBjb25maWcuaGVhZGVyc1RvU3BhbkF0dHJpYnV0ZXM/LmNsaWVudD8ucmVxdWVzdEhlYWRlcnMgPz8gW10pLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVSZXNwb25zZUhlYWRlcnM6ICgwLCB1dGlsc18xLmhlYWRlckNhcHR1cmUpKCdyZXNwb25zZScsIGNvbmZpZy5oZWFkZXJzVG9TcGFuQXR0cmlidXRlcz8uY2xpZW50Py5yZXNwb25zZUhlYWRlcnMgPz8gW10pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0SGVhZGVyczogKDAsIHV0aWxzXzEuaGVhZGVyQ2FwdHVyZSkoJ3JlcXVlc3QnLCBjb25maWcuaGVhZGVyc1RvU3BhbkF0dHJpYnV0ZXM/LnNlcnZlcj8ucmVxdWVzdEhlYWRlcnMgPz8gW10pLFxuICAgICAgICAgICAgICAgIGNhcHR1cmVSZXNwb25zZUhlYWRlcnM6ICgwLCB1dGlsc18xLmhlYWRlckNhcHR1cmUpKCdyZXNwb25zZScsIGNvbmZpZy5oZWFkZXJzVG9TcGFuQXR0cmlidXRlcz8uc2VydmVyPy5yZXNwb25zZUhlYWRlcnMgPz8gW10pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkh0dHBJbnN0cnVtZW50YXRpb24gPSBIdHRwSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cEluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBodHRwXzEgPSByZXF1aXJlKFwiLi9odHRwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSHR0cEluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaHR0cF8xLkh0dHBJbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX1JFRElTID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSBleHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gZXhwb3J0cy5BVFRSX0RCX0NPTk5FQ1RJT05fU1RSSU5HID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2AsIGBzZXJ2ZXIucG9ydGAgYXR0cmlidXRlcyBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIFwiU2VydmVyPShsb2NhbGRiKVxcXFx2MTEuMDtJbnRlZ3JhdGVkIFNlY3VyaXR5PXRydWU7XCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBhbmQgYHNlcnZlci5wb3J0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX0NPTk5FQ1RJT05fU1RSSU5HID0gJ2RiLmNvbm5lY3Rpb25fc3RyaW5nJztcbi8qKlxuICogVGhlIGRhdGFiYXNlIHN0YXRlbWVudCBiZWluZyBleGVjdXRlZC5cbiAqXG4gKiBAZXhhbXBsZSBTRUxFQ1QgKiBGUk9NIHd1c2VyX3RhYmxlXG4gKiBAZXhhbXBsZSBTRVQgbXlrZXkgXCJXdVZhbHVlXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnF1ZXJ5LnRleHRgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gJ2RiLnN0YXRlbWVudCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIuc3lzdGVtLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5zeXN0ZW0ubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSAnZGIuc3lzdGVtJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSBleGFtcGxlLmNvbVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9ICduZXQucGVlci5wb3J0Jztcbi8qKlxuICogRW51bSB2YWx1ZSBcInJlZGlzXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU19LlxuICpcbiAqIFJlZGlzXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfUkVESVMgPSAncmVkaXMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW5kU3BhbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGVuZFNwYW4gPSAoc3BhbiwgZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Bhbi5lbmQoKTtcbn07XG5leHBvcnRzLmVuZFNwYW4gPSBlbmRTcGFuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHREYlN0YXRlbWVudFNlcmlhbGl6ZXIgPSB2b2lkIDA7XG4vKipcbiAqIExpc3Qgb2YgcmVnZXhlcyBhbmQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCBmb3IgbWF0Y2hpbmcgY29tbWFuZHMuXG4gKiBGb3IgZXhhbXBsZSwgSFNFVCBzaG91bGQgc2VyaWFsaXplIHdoaWNoIGtleSBhbmQgZmllbGQgaXQncyBvcGVyYXRpbmcgb24sIGJ1dCBub3QgaXRzIHZhbHVlLlxuICogU2V0dGluZyB0aGUgc3Vic2V0IHRvIC0xIHdpbGwgc2VyaWFsaXplIGFsbCBhcmd1bWVudHMuXG4gKiBDb21tYW5kcyB3aXRob3V0IGEgbWF0Y2ggd2lsbCBoYXZlIHRoZWlyIGZpcnN0IGFyZ3VtZW50IHNlcmlhbGl6ZWQuXG4gKlxuICogUmVmZXIgdG8gaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy8gZm9yIHRoZSBmdWxsIGxpc3QuXG4gKi9cbmNvbnN0IHNlcmlhbGl6YXRpb25TdWJzZXRzID0gW1xuICAgIHtcbiAgICAgICAgcmVnZXg6IC9eRUNITy9pLFxuICAgICAgICBhcmdzOiAwLFxuICAgIH0sXG4gICAge1xuICAgICAgICByZWdleDogL14oTFBVU0h8TVNFVHxQRkF8UFVCTElTSHxSUFVTSHxTQUREfFNFVHxTUFVCTElTSHxYQUREfFpBREQpL2ksXG4gICAgICAgIGFyZ3M6IDEsXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHJlZ2V4OiAvXihIU0VUfEhNU0VUfExTRVR8TElOU0VSVCkvaSxcbiAgICAgICAgYXJnczogMixcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmVnZXg6IC9eKEFDTHxCSVR8QltMUlpdfENMSUVOVHxDTFVTVEVSfENPTkZJR3xDT01NQU5EfERFQ1J8REVMfEVWQUx8RVh8RlVOQ1RJT058R0VPfEdFVHxISU5DUnxITUdFVHxIU0NBTnxJTkNSfExbVFJMTV18TUVNT1JZfFBbRUZJU1RVXXxSUE9QfFNbQ0RJTU9SU1VdfFhBQ0t8WFtDREdJTFBSVF18WltDRElMTVBSU10pL2ksXG4gICAgICAgIGFyZ3M6IC0xLFxuICAgIH0sXG5dO1xuLyoqXG4gKiBHaXZlbiB0aGUgcmVkaXMgY29tbWFuZCBuYW1lIGFuZCBhcmd1bWVudHMsIHJldHVybiBhIGNvbWJpbmF0aW9uIG9mIHRoZVxuICogY29tbWFuZCBuYW1lICsgdGhlIGFsbG93ZWQgYXJndW1lbnRzIGFjY29yZGluZyB0byBgc2VyaWFsaXphdGlvblN1YnNldHNgLlxuICogQHBhcmFtIGNtZE5hbWUgVGhlIHJlZGlzIGNvbW1hbmQgbmFtZVxuICogQHBhcmFtIGNtZEFyZ3MgVGhlIHJlZGlzIGNvbW1hbmQgYXJndW1lbnRzXG4gKiBAcmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb21tYW5kIG5hbWUgKyBhcmdzIGFjY29yZGluZyB0byBgc2VyaWFsaXphdGlvblN1YnNldHNgLlxuICovXG5jb25zdCBkZWZhdWx0RGJTdGF0ZW1lbnRTZXJpYWxpemVyID0gKGNtZE5hbWUsIGNtZEFyZ3MpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjbWRBcmdzKSAmJiBjbWRBcmdzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuQXJnc1RvU2VyaWFsaXplID0gc2VyaWFsaXphdGlvblN1YnNldHMuZmluZCgoeyByZWdleCB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChjbWROYW1lKTtcbiAgICAgICAgfSk/LmFyZ3MgPz8gMDtcbiAgICAgICAgY29uc3QgYXJnc1RvU2VyaWFsaXplID0gbkFyZ3NUb1NlcmlhbGl6ZSA+PSAwID8gY21kQXJncy5zbGljZSgwLCBuQXJnc1RvU2VyaWFsaXplKSA6IGNtZEFyZ3M7XG4gICAgICAgIGlmIChjbWRBcmdzLmxlbmd0aCA+IGFyZ3NUb1NlcmlhbGl6ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFyZ3NUb1NlcmlhbGl6ZS5wdXNoKGBbJHtjbWRBcmdzLmxlbmd0aCAtIG5BcmdzVG9TZXJpYWxpemV9IG90aGVyIGFyZ3VtZW50c11gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7Y21kTmFtZX0gJHthcmdzVG9TZXJpYWxpemUuam9pbignICcpfWA7XG4gICAgfVxuICAgIHJldHVybiBjbWROYW1lO1xufTtcbmV4cG9ydHMuZGVmYXVsdERiU3RhdGVtZW50U2VyaWFsaXplciA9IGRlZmF1bHREYlN0YXRlbWVudFNlcmlhbGl6ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTUuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taW9yZWRpcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JT1JlZGlzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8yID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IHJlZGlzX2NvbW1vbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3JlZGlzLWNvbW1vblwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge1xuICAgIHJlcXVpcmVQYXJlbnRTcGFuOiB0cnVlLFxufTtcbmNsYXNzIElPUmVkaXNJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdpb3JlZGlzJywgWyc+PTIuMC4wIDw2J10sIChtb2R1bGUsIG1vZHVsZVZlcnNpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnXG4gICAgICAgICAgICAgICAgICAgID8gbW9kdWxlLmRlZmF1bHQgLy8gRVNNXG4gICAgICAgICAgICAgICAgICAgIDogbW9kdWxlOyAvLyBDb21tb25KU1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnByb3RvdHlwZS5zZW5kQ29tbWFuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnc2VuZENvbW1hbmQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ3NlbmRDb21tYW5kJywgdGhpcy5fcGF0Y2hTZW5kQ29tbWFuZChtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLmNvbm5lY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ2Nvbm5lY3QnLCB0aGlzLl9wYXRjaENvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgIH0sIG1vZHVsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IG1vZHVsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJ1xuICAgICAgICAgICAgICAgICAgICA/IG1vZHVsZS5kZWZhdWx0IC8vIEVTTVxuICAgICAgICAgICAgICAgICAgICA6IG1vZHVsZTsgLy8gQ29tbW9uSlNcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdzZW5kQ29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBzZW5kIGNvbW1hbmQgaW50ZXJuYWwgdG8gdHJhY2UgcmVxdWVzdHNcbiAgICAgKi9cbiAgICBfcGF0Y2hTZW5kQ29tbWFuZChtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFjZVNlbmRDb21tYW5kKG9yaWdpbmFsLCBtb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhdGNoQ29ubmVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlQ29ubmVjdGlvbihvcmlnaW5hbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF90cmFjZVNlbmRDb21tYW5kKG9yaWdpbmFsLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY21kKSB7XG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgdHlwZW9mIGNtZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IGRiU3RhdGVtZW50U2VyaWFsaXplciA9IGNvbmZpZy5kYlN0YXRlbWVudFNlcmlhbGl6ZXIgfHwgcmVkaXNfY29tbW9uXzEuZGVmYXVsdERiU3RhdGVtZW50U2VyaWFsaXplcjtcbiAgICAgICAgICAgIGNvbnN0IGhhc05vUGFyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSkgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb25maWcucmVxdWlyZVBhcmVudFNwYW4gPT09IHRydWUgJiYgaGFzTm9QYXJlbnRTcGFuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oY21kLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfU1lTVEVNXTogc2VtY29udl8xLkRCX1NZU1RFTV9WQUxVRV9SRURJUyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF06IGRiU3RhdGVtZW50U2VyaWFsaXplcihjbWQubmFtZSwgY21kLmFyZ3MpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVxdWVzdEhvb2sgfSA9IGNvbmZpZztcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SG9vaykge1xuICAgICAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMi5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiByZXF1ZXN0SG9vayhzcGFuLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIGNtZE5hbWU6IGNtZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjbWRBcmdzOiBjbWQuYXJncyxcbiAgICAgICAgICAgICAgICB9KSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdpb3JlZGlzIGluc3RydW1lbnRhdGlvbjogcmVxdWVzdCBob29rIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdOiBob3N0LFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogcG9ydCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkddOiBgcmVkaXM6Ly8ke2hvc3R9OiR7cG9ydH1gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1Jlc29sdmUgPSBjbWQucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gICAgICAgICAgICAgICAgY21kLnJlc29sdmUgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMi5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBjb25maWcucmVzcG9uc2VIb29rPy4oc3BhbiwgY21kLm5hbWUsIGNtZC5hcmdzLCByZXN1bHQpLCBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignaW9yZWRpcyBpbnN0cnVtZW50YXRpb246IHJlc3BvbnNlIGhvb2sgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbHNfMS5lbmRTcGFuKShzcGFuLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ1Jlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdSZWplY3QgPSBjbWQucmVqZWN0O1xuICAgICAgICAgICAgICAgIGNtZC5yZWplY3QgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLmVuZFNwYW4pKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdSZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAoMCwgdXRpbHNfMS5lbmRTcGFuKShzcGFuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIF90cmFjZUNvbm5lY3Rpb24ob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc05vUGFyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSkgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudFNwYW4gPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgICBoYXNOb1BhcmVudFNwYW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbignY29ubmVjdCcsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfU1lTVEVNXTogc2VtY29udl8xLkRCX1NZU1RFTV9WQUxVRV9SRURJUyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF06ICdjb25uZWN0JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdOiBob3N0LFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogcG9ydCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkddOiBgcmVkaXM6Ly8ke2hvc3R9OiR7cG9ydH1gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3Bhbikoc3BhbiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLmVuZFNwYW4pKHNwYW4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLklPUmVkaXNJbnN0cnVtZW50YXRpb24gPSBJT1JlZGlzSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JT1JlZGlzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSU9SZWRpc0luc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuSU9SZWRpc0luc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnMsIEFzcGVjdG9cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FVkVOVF9MSVNURU5FUlNfU0VUID0gdm9pZCAwO1xuZXhwb3J0cy5FVkVOVF9MSVNURU5FUlNfU0VUID0gU3ltYm9sKCdvcGVudGVsZW1ldHJ5Lmluc3RydW1lbnRhdGlvbi5rYWZrYWpzLmV2ZW50TGlzdGVuZXJzU2V0Jyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWZmZXJUZXh0TWFwR2V0dGVyID0gdm9pZCAwO1xuLypcbnNhbWUgYXMgb3BlbiB0ZWxlbWV0cnkncyBgZGVmYXVsdFRleHRNYXBHZXR0ZXJgLFxuYnV0IGFsc28gaGFuZGxlIGNhc2Ugd2hlcmUgaGVhZGVyIGlzIGJ1ZmZlcixcbmFkZGluZyB0b1N0cmluZygpIHRvIG1ha2Ugc3VyZSBzdHJpbmcgaXMgcmV0dXJuZWRcbiovXG5leHBvcnRzLmJ1ZmZlclRleHRNYXBHZXR0ZXIgPSB7XG4gICAgZ2V0KGNhcnJpZXIsIGtleSkge1xuICAgICAgICBpZiAoIWNhcnJpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNhcnJpZXIpO1xuICAgICAgICBmb3IgKGNvbnN0IGNhcnJpZXJLZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgaWYgKGNhcnJpZXJLZXkgPT09IGtleSB8fCBjYXJyaWVyS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYXJyaWVyW2NhcnJpZXJLZXldPy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBrZXlzKGNhcnJpZXIpIHtcbiAgICAgICAgcmV0dXJuIGNhcnJpZXIgPyBPYmplY3Qua2V5cyhjYXJyaWVyKSA6IFtdO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTUVUUklDX01FU1NBR0lOR19QUk9DRVNTX0RVUkFUSU9OID0gZXhwb3J0cy5NRVRSSUNfTUVTU0FHSU5HX0NMSUVOVF9TRU5UX01FU1NBR0VTID0gZXhwb3J0cy5NRVRSSUNfTUVTU0FHSU5HX0NMSUVOVF9PUEVSQVRJT05fRFVSQVRJT04gPSBleHBvcnRzLk1FVFJJQ19NRVNTQUdJTkdfQ0xJRU5UX0NPTlNVTUVEX01FU1NBR0VTID0gZXhwb3J0cy5NRVNTQUdJTkdfU1lTVEVNX1ZBTFVFX0tBRktBID0gZXhwb3J0cy5NRVNTQUdJTkdfT1BFUkFUSU9OX1RZUEVfVkFMVUVfU0VORCA9IGV4cG9ydHMuTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1JFQ0VJVkUgPSBleHBvcnRzLk1FU1NBR0lOR19PUEVSQVRJT05fVFlQRV9WQUxVRV9QUk9DRVNTID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19TWVNURU0gPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05fTkFNRSA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfS0FGS0FfT0ZGU0VUID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19LQUZLQV9NRVNTQUdFX1RPTUJTVE9ORSA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfS0FGS0FfTUVTU0FHRV9LRVkgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX1BBUlRJVElPTl9JRCA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRSA9IGV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfQkFUQ0hfTUVTU0FHRV9DT1VOVCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgc2VudCwgcmVjZWl2ZWQsIG9yIHByb2Nlc3NlZCBpbiB0aGUgc2NvcGUgb2YgdGhlIGJhdGNoaW5nIG9wZXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSAwXG4gKiBAZXhhbXBsZSAxXG4gKiBAZXhhbXBsZSAyXG4gKlxuICogQG5vdGUgSW5zdHJ1bWVudGF0aW9ucyAqKlNIT1VMRCBOT1QqKiBzZXQgYG1lc3NhZ2luZy5iYXRjaC5tZXNzYWdlX2NvdW50YCBvbiBzcGFucyB0aGF0IG9wZXJhdGUgd2l0aCBhIHNpbmdsZSBtZXNzYWdlLiBXaGVuIGEgbWVzc2FnaW5nIGNsaWVudCBsaWJyYXJ5IHN1cHBvcnRzIGJvdGggYmF0Y2ggYW5kIHNpbmdsZS1tZXNzYWdlIEFQSSBmb3IgdGhlIHNhbWUgb3BlcmF0aW9uLCBpbnN0cnVtZW50YXRpb25zICoqU0hPVUxEKiogdXNlIGBtZXNzYWdpbmcuYmF0Y2gubWVzc2FnZV9jb3VudGAgZm9yIGJhdGNoaW5nIEFQSXMgYW5kICoqU0hPVUxEIE5PVCoqIHVzZSBpdCBmb3Igc2luZ2xlLW1lc3NhZ2UgQVBJcy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfQkFUQ0hfTUVTU0FHRV9DT1VOVCA9ICdtZXNzYWdpbmcuYmF0Y2gubWVzc2FnZV9jb3VudCc7XG4vKipcbiAqIFRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIG5hbWVcbiAqXG4gKiBAZXhhbXBsZSBNeVF1ZXVlXG4gKiBAZXhhbXBsZSBNeVRvcGljXG4gKlxuICogQG5vdGUgRGVzdGluYXRpb24gbmFtZSAqKlNIT1VMRCoqIHVuaXF1ZWx5IGlkZW50aWZ5IGEgc3BlY2lmaWMgcXVldWUsIHRvcGljIG9yIG90aGVyIGVudGl0eSB3aXRoaW4gdGhlIGJyb2tlci4gSWZcbiAqIHRoZSBicm9rZXIgZG9lc24ndCBoYXZlIHN1Y2ggbm90aW9uLCB0aGUgZGVzdGluYXRpb24gbmFtZSAqKlNIT1VMRCoqIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBicm9rZXIuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX05BTUUgPSAnbWVzc2FnaW5nLmRlc3RpbmF0aW9uLm5hbWUnO1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFydGl0aW9uIG1lc3NhZ2VzIGFyZSBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20sIHVuaXF1ZSB3aXRoaW4gdGhlIGBtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZWAuXG4gKlxuICogQGV4YW1wbGUgXCIxXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fUEFSVElUSU9OX0lEID0gJ21lc3NhZ2luZy5kZXN0aW5hdGlvbi5wYXJ0aXRpb24uaWQnO1xuLyoqXG4gKiBNZXNzYWdlIGtleXMgaW4gS2Fma2EgYXJlIHVzZWQgZm9yIGdyb3VwaW5nIGFsaWtlIG1lc3NhZ2VzIHRvIGVuc3VyZSB0aGV5J3JlIHByb2Nlc3NlZCBvbiB0aGUgc2FtZSBwYXJ0aXRpb24uIFRoZXkgZGlmZmVyIGZyb20gYG1lc3NhZ2luZy5tZXNzYWdlLmlkYCBpbiB0aGF0IHRoZXkncmUgbm90IHVuaXF1ZS4gSWYgdGhlIGtleSBpcyBgbnVsbGAsIHRoZSBhdHRyaWJ1dGUgKipNVVNUIE5PVCoqIGJlIHNldC5cbiAqXG4gKiBAZXhhbXBsZSBcIm15S2V5XCJcbiAqXG4gKiBAbm90ZSBJZiB0aGUga2V5IHR5cGUgaXMgbm90IHN0cmluZywgaXQncyBzdHJpbmcgcmVwcmVzZW50YXRpb24gaGFzIHRvIGJlIHN1cHBsaWVkIGZvciB0aGUgYXR0cmlidXRlLiBJZiB0aGUga2V5IGhhcyBubyB1bmFtYmlndW91cywgY2Fub25pY2FsIHN0cmluZyBmb3JtLCBkb24ndCBpbmNsdWRlIGl0cyB2YWx1ZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfS0FGS0FfTUVTU0FHRV9LRVkgPSAnbWVzc2FnaW5nLmthZmthLm1lc3NhZ2Uua2V5Jztcbi8qKlxuICogQSBib29sZWFuIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgbWVzc2FnZSBpcyBhIHRvbWJzdG9uZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfS0FGS0FfTUVTU0FHRV9UT01CU1RPTkUgPSAnbWVzc2FnaW5nLmthZmthLm1lc3NhZ2UudG9tYnN0b25lJztcbi8qKlxuICogVGhlIG9mZnNldCBvZiBhIHJlY29yZCBpbiB0aGUgY29ycmVzcG9uZGluZyBLYWZrYSBwYXJ0aXRpb24uXG4gKlxuICogQGV4YW1wbGUgNDJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfS0FGS0FfT0ZGU0VUID0gJ21lc3NhZ2luZy5rYWZrYS5vZmZzZXQnO1xuLyoqXG4gKiBUaGUgc3lzdGVtLXNwZWNpZmljIG5hbWUgb2YgdGhlIG1lc3NhZ2luZyBvcGVyYXRpb24uXG4gKlxuICogQGV4YW1wbGUgYWNrXG4gKiBAZXhhbXBsZSBuYWNrXG4gKiBAZXhhbXBsZSBzZW5kXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9OQU1FID0gJ21lc3NhZ2luZy5vcGVyYXRpb24ubmFtZSc7XG4vKipcbiAqIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdpbmcgb3BlcmF0aW9uLlxuICpcbiAqIEBub3RlIElmIGEgY3VzdG9tIHZhbHVlIGlzIHVzZWQsIGl0ICoqTVVTVCoqIGJlIG9mIGxvdyBjYXJkaW5hbGl0eS5cbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05fVFlQRSA9ICdtZXNzYWdpbmcub3BlcmF0aW9uLnR5cGUnO1xuLyoqXG4gKiBUaGUgbWVzc2FnaW5nIHN5c3RlbSBhcyBpZGVudGlmaWVkIGJ5IHRoZSBjbGllbnQgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIEBub3RlIFRoZSBhY3R1YWwgbWVzc2FnaW5nIHN5c3RlbSBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSBrbm93biBieSB0aGUgY2xpZW50LiBGb3IgZXhhbXBsZSwgd2hlbiB1c2luZyBLYWZrYSBjbGllbnQgbGlicmFyaWVzIHRvIGNvbW11bmljYXRlIHdpdGggQXp1cmUgRXZlbnQgSHVicywgdGhlIGBtZXNzYWdpbmcuc3lzdGVtYCBpcyBzZXQgdG8gYGthZmthYCBiYXNlZCBvbiB0aGUgaW5zdHJ1bWVudGF0aW9uJ3MgYmVzdCBrbm93bGVkZ2UuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX1NZU1RFTSA9ICdtZXNzYWdpbmcuc3lzdGVtJztcbi8qKlxuICogRW51bSB2YWx1ZSBcInByb2Nlc3NcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX01FU1NBR0lOR19PUEVSQVRJT05fVFlQRX0uXG4gKi9cbmV4cG9ydHMuTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1BST0NFU1MgPSAncHJvY2Vzcyc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJyZWNlaXZlXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OX1RZUEV9LlxuICovXG5leHBvcnRzLk1FU1NBR0lOR19PUEVSQVRJT05fVFlQRV9WQUxVRV9SRUNFSVZFID0gJ3JlY2VpdmUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwic2VuZFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFfS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdJTkdfT1BFUkFUSU9OX1RZUEVfVkFMVUVfU0VORCA9ICdzZW5kJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImthZmthXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9NRVNTQUdJTkdfU1lTVEVNfS5cbiAqL1xuZXhwb3J0cy5NRVNTQUdJTkdfU1lTVEVNX1ZBTFVFX0tBRktBID0gJ2thZmthJztcbi8qKlxuICogTnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgd2VyZSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBub3RlIFJlY29yZHMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBwdWxsZWQgZnJvbSB0aGUgYnJva2VyIG9yIG51bWJlciBvZiBtZXNzYWdlcyBkaXNwYXRjaGVkIHRvIHRoZSBhcHBsaWNhdGlvbiBpbiBwdXNoLWJhc2VkIHNjZW5hcmlvcy5cbiAqIFRoZSBtZXRyaWMgKipTSE9VTEQqKiBiZSByZXBvcnRlZCBvbmNlIHBlciBtZXNzYWdlIGRlbGl2ZXJ5LiBGb3IgZXhhbXBsZSwgaWYgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIG9wZXJhdGlvbnMgYXJlIGJvdGggaW5zdHJ1bWVudGVkIGZvciBhIHNpbmdsZSBtZXNzYWdlIGRlbGl2ZXJ5LCB0aGlzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbiB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZCBhbmQgbm90IHJlcG9ydGVkIHdoZW4gaXQgaXMgcHJvY2Vzc2VkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfTUVTU0FHSU5HX0NMSUVOVF9DT05TVU1FRF9NRVNTQUdFUyA9ICdtZXNzYWdpbmcuY2xpZW50LmNvbnN1bWVkLm1lc3NhZ2VzJztcbi8qKlxuICogRHVyYXRpb24gb2YgbWVzc2FnaW5nIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgYSBwcm9kdWNlciBvciBjb25zdW1lciBjbGllbnQuXG4gKlxuICogQG5vdGUgVGhpcyBtZXRyaWMgKipTSE9VTEQgTk9UKiogYmUgdXNlZCB0byByZXBvcnQgcHJvY2Vzc2luZyBkdXJhdGlvbiAtIHByb2Nlc3NpbmcgZHVyYXRpb24gaXMgcmVwb3J0ZWQgaW4gYG1lc3NhZ2luZy5wcm9jZXNzLmR1cmF0aW9uYCBtZXRyaWMuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19NRVNTQUdJTkdfQ0xJRU5UX09QRVJBVElPTl9EVVJBVElPTiA9ICdtZXNzYWdpbmcuY2xpZW50Lm9wZXJhdGlvbi5kdXJhdGlvbic7XG4vKipcbiAqIE51bWJlciBvZiBtZXNzYWdlcyBwcm9kdWNlciBhdHRlbXB0ZWQgdG8gc2VuZCB0byB0aGUgYnJva2VyLlxuICpcbiAqIEBub3RlIFRoaXMgbWV0cmljICoqTVVTVCBOT1QqKiBjb3VudCBtZXNzYWdlcyB0aGF0IHdlcmUgY3JlYXRlZCBidXQgaGF2ZW4ndCB5ZXQgYmVlbiBzZW50LlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfTUVTU0FHSU5HX0NMSUVOVF9TRU5UX01FU1NBR0VTID0gJ21lc3NhZ2luZy5jbGllbnQuc2VudC5tZXNzYWdlcyc7XG4vKipcbiAqIER1cmF0aW9uIG9mIHByb2Nlc3Npbmcgb3BlcmF0aW9uLlxuICpcbiAqIEBub3RlIFRoaXMgbWV0cmljICoqTVVTVCoqIGJlIHJlcG9ydGVkIGZvciBvcGVyYXRpb25zIHdpdGggYG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZWAgdGhhdCBtYXRjaGVzIGBwcm9jZXNzYC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0cmljIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuTUVUUklDX01FU1NBR0lOR19QUk9DRVNTX0RVUkFUSU9OID0gJ21lc3NhZ2luZy5wcm9jZXNzLmR1cmF0aW9uJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjE3LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWthZmthanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzLCBBc3BlY3RvXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS2Fma2FKc0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBpbnRlcm5hbF90eXBlc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtdHlwZXNcIik7XG5jb25zdCBwcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9wcm9wYWdhdG9yXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmZ1bmN0aW9uIHByZXBhcmVDb3VudGVyKG1ldGVyLCB2YWx1ZSwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiAoZXJyb3JUeXBlKSA9PiB7XG4gICAgICAgIG1ldGVyLmFkZCh2YWx1ZSwge1xuICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgIC4uLihlcnJvclR5cGUgPyB7IFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfRVJST1JfVFlQRV06IGVycm9yVHlwZSB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZUR1cmF0aW9uSGlzdG9ncmFtKG1ldGVyLCB2YWx1ZSwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiAoZXJyb3JUeXBlKSA9PiB7XG4gICAgICAgIG1ldGVyLnJlY29yZCgoRGF0ZS5ub3coKSAtIHZhbHVlKSAvIDEwMDAsIHtcbiAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAuLi4oZXJyb3JUeXBlID8geyBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VSUk9SX1RZUEVdOiBlcnJvclR5cGUgfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmNvbnN0IEhJU1RPR1JBTV9CVUNLRVRfQk9VTkRBUklFUyA9IFtcbiAgICAwLjAwNSwgMC4wMSwgMC4wMjUsIDAuMDUsIDAuMDc1LCAwLjEsIDAuMjUsIDAuNSwgMC43NSwgMSwgMi41LCA1LCA3LjUsIDEwLFxuXTtcbmNsYXNzIEthZmthSnNJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2NsaWVudER1cmF0aW9uID0gdGhpcy5tZXRlci5jcmVhdGVIaXN0b2dyYW0oc2VtY29udl8xLk1FVFJJQ19NRVNTQUdJTkdfQ0xJRU5UX09QRVJBVElPTl9EVVJBVElPTiwgeyBhZHZpY2U6IHsgZXhwbGljaXRCdWNrZXRCb3VuZGFyaWVzOiBISVNUT0dSQU1fQlVDS0VUX0JPVU5EQVJJRVMgfSB9KTtcbiAgICAgICAgdGhpcy5fc2VudE1lc3NhZ2VzID0gdGhpcy5tZXRlci5jcmVhdGVDb3VudGVyKHNlbWNvbnZfMS5NRVRSSUNfTUVTU0FHSU5HX0NMSUVOVF9TRU5UX01FU1NBR0VTKTtcbiAgICAgICAgdGhpcy5fY29uc3VtZWRNZXNzYWdlcyA9IHRoaXMubWV0ZXIuY3JlYXRlQ291bnRlcihzZW1jb252XzEuTUVUUklDX01FU1NBR0lOR19DTElFTlRfQ09OU1VNRURfTUVTU0FHRVMpO1xuICAgICAgICB0aGlzLl9wcm9jZXNzRHVyYXRpb24gPSB0aGlzLm1ldGVyLmNyZWF0ZUhpc3RvZ3JhbShzZW1jb252XzEuTUVUUklDX01FU1NBR0lOR19QUk9DRVNTX0RVUkFUSU9OLCB7IGFkdmljZTogeyBleHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXM6IEhJU1RPR1JBTV9CVUNLRVRfQk9VTkRBUklFUyB9IH0pO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCB1bnBhdGNoID0gKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5LYWZrYT8ucHJvdG90eXBlLnByb2R1Y2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkthZmthLnByb3RvdHlwZSwgJ3Byb2R1Y2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cz8uS2Fma2E/LnByb3RvdHlwZS5jb25zdW1lcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5LYWZrYS5wcm90b3R5cGUsICdjb25zdW1lcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2thZmthanMnLCBbJz49MC4zLjAgPDMnXSwgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgIHVucGF0Y2gobW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHM/LkthZmthPy5wcm90b3R5cGUsICdwcm9kdWNlcicsIHRoaXMuX2dldFByb2R1Y2VyUGF0Y2goKSk7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHM/LkthZmthPy5wcm90b3R5cGUsICdjb25zdW1lcicsIHRoaXMuX2dldENvbnN1bWVyUGF0Y2goKSk7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSwgdW5wYXRjaCk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIF9nZXRDb25zdW1lclBhdGNoKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29uc3VtZXIoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnN1bWVyID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG5ld0NvbnN1bWVyLnJ1bikpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl91bndyYXAobmV3Q29uc3VtZXIsICdydW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl93cmFwKG5ld0NvbnN1bWVyLCAncnVuJywgaW5zdHJ1bWVudGF0aW9uLl9nZXRDb25zdW1lclJ1blBhdGNoKCkpO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fc2V0S2Fma2FFdmVudExpc3RlbmVycyhuZXdDb25zdW1lcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NvbnN1bWVyO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3NldEthZmthRXZlbnRMaXN0ZW5lcnMoa2Fma2FPYmopIHtcbiAgICAgICAgaWYgKGthZmthT2JqW2ludGVybmFsX3R5cGVzXzEuRVZFTlRfTElTVEVORVJTX1NFVF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIFRoZSBSRVFVRVNUIENvbnN1bWVyIGV2ZW50IHdhcyBhZGRlZCBpbiBrYWZrYWpzQDEuNS4wLlxuICAgICAgICBpZiAoa2Fma2FPYmouZXZlbnRzPy5SRVFVRVNUKSB7XG4gICAgICAgICAgICBrYWZrYU9iai5vbihrYWZrYU9iai5ldmVudHMuUkVRVUVTVCwgdGhpcy5fcmVjb3JkQ2xpZW50RHVyYXRpb25NZXRyaWMuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAga2Fma2FPYmpbaW50ZXJuYWxfdHlwZXNfMS5FVkVOVF9MSVNURU5FUlNfU0VUXSA9IHRydWU7XG4gICAgfVxuICAgIF9yZWNvcmRDbGllbnREdXJhdGlvbk1ldHJpYyhldmVudCkge1xuICAgICAgICBjb25zdCBbYWRkcmVzcywgcG9ydF0gPSBldmVudC5wYXlsb2FkLmJyb2tlci5zcGxpdCgnOicpO1xuICAgICAgICB0aGlzLl9jbGllbnREdXJhdGlvbi5yZWNvcmQoZXZlbnQucGF5bG9hZC5kdXJhdGlvbiAvIDEwMDAsIHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfU1lTVEVNXTogc2VtY29udl8xLk1FU1NBR0lOR19TWVNURU1fVkFMVUVfS0FGS0EsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9OQU1FXTogYCR7ZXZlbnQucGF5bG9hZC5hcGlOYW1lfWAsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogYWRkcmVzcyxcbiAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX1BPUlRdOiBOdW1iZXIucGFyc2VJbnQocG9ydCwgMTApLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2dldFByb2R1Y2VyUGF0Y2goKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb25zdW1lciguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvZHVjZXIgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobmV3UHJvZHVjZXIuc2VuZEJhdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3Vud3JhcChuZXdQcm9kdWNlciwgJ3NlbmRCYXRjaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3dyYXAobmV3UHJvZHVjZXIsICdzZW5kQmF0Y2gnLCBpbnN0cnVtZW50YXRpb24uX2dldFNlbmRCYXRjaFBhdGNoKCkpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShuZXdQcm9kdWNlci5zZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3Vud3JhcChuZXdQcm9kdWNlciwgJ3NlbmQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl93cmFwKG5ld1Byb2R1Y2VyLCAnc2VuZCcsIGluc3RydW1lbnRhdGlvbi5fZ2V0U2VuZFBhdGNoKCkpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShuZXdQcm9kdWNlci50cmFuc2FjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl91bndyYXAobmV3UHJvZHVjZXIsICd0cmFuc2FjdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3dyYXAobmV3UHJvZHVjZXIsICd0cmFuc2FjdGlvbicsIGluc3RydW1lbnRhdGlvbi5fZ2V0UHJvZHVjZXJUcmFuc2FjdGlvblBhdGNoKCkpO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fc2V0S2Fma2FFdmVudExpc3RlbmVycyhuZXdQcm9kdWNlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1Byb2R1Y2VyO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldENvbnN1bWVyUnVuUGF0Y2goKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBydW4oLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZz8uZWFjaE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKGNvbmZpZy5lYWNoTWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fdW53cmFwKGNvbmZpZywgJ2VhY2hNZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl93cmFwKGNvbmZpZywgJ2VhY2hNZXNzYWdlJywgaW5zdHJ1bWVudGF0aW9uLl9nZXRDb25zdW1lckVhY2hNZXNzYWdlUGF0Y2goKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWc/LmVhY2hCYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoY29uZmlnLmVhY2hCYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fdW53cmFwKGNvbmZpZywgJ2VhY2hCYXRjaCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fd3JhcChjb25maWcsICdlYWNoQmF0Y2gnLCBpbnN0cnVtZW50YXRpb24uX2dldENvbnN1bWVyRWFjaEJhdGNoUGF0Y2goKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0Q29uc3VtZXJFYWNoTWVzc2FnZVBhdGNoKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZWFjaE1lc3NhZ2UoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BhZ2F0ZWRDb250ZXh0ID0gYXBpXzEucHJvcGFnYXRpb24uZXh0cmFjdChhcGlfMS5ST09UX0NPTlRFWFQsIHBheWxvYWQubWVzc2FnZS5oZWFkZXJzLCBwcm9wYWdhdG9yXzEuYnVmZmVyVGV4dE1hcEdldHRlcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi5fc3RhcnRDb25zdW1lclNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0b3BpYzogcGF5bG9hZC50b3BpYyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcGF5bG9hZC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25UeXBlOiBzZW1jb252XzEuTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1BST0NFU1MsXG4gICAgICAgICAgICAgICAgICAgIGN0eDogcHJvcGFnYXRlZENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fUEFSVElUSU9OX0lEXTogU3RyaW5nKHBheWxvYWQucGFydGl0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nTWV0cmljcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgcHJlcGFyZUR1cmF0aW9uSGlzdG9ncmFtKGluc3RydW1lbnRhdGlvbi5fcHJvY2Vzc0R1cmF0aW9uLCBEYXRlLm5vdygpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX1NZU1RFTV06IHNlbWNvbnZfMS5NRVNTQUdJTkdfU1lTVEVNX1ZBTFVFX0tBRktBLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05fTkFNRV06ICdwcm9jZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRV06IHBheWxvYWQudG9waWMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX1BBUlRJVElPTl9JRF06IFN0cmluZyhwYXlsb2FkLnBhcnRpdGlvbiksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBwcmVwYXJlQ291bnRlcihpbnN0cnVtZW50YXRpb24uX2NvbnN1bWVkTWVzc2FnZXMsIDEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfU1lTVEVNXTogc2VtY29udl8xLk1FU1NBR0lOR19TWVNURU1fVkFMVUVfS0FGS0EsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9OQU1FXTogJ3Byb2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9OQU1FXTogcGF5bG9hZC50b3BpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fUEFSVElUSU9OX0lEXTogU3RyaW5nKHBheWxvYWQucGFydGl0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBlYWNoTWVzc2FnZVByb21pc2UgPSBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3Bhbihwcm9wYWdhdGVkQ29udGV4dCwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24uX2VuZFNwYW5zT25Qcm9taXNlKFtzcGFuXSwgcGVuZGluZ01ldHJpY3MsIGVhY2hNZXNzYWdlUHJvbWlzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0Q29uc3VtZXJFYWNoQmF0Y2hQYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBlYWNoQmF0Y2goLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi90cmFjZS9zZW1hbnRpY19jb252ZW50aW9ucy9tZXNzYWdpbmcubWQjdG9waWMtd2l0aC1tdWx0aXBsZS1jb25zdW1lcnNcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZpbmdTcGFuID0gaW5zdHJ1bWVudGF0aW9uLl9zdGFydENvbnN1bWVyU3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRvcGljOiBwYXlsb2FkLmJhdGNoLnRvcGljLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6IHNlbWNvbnZfMS5NRVNTQUdJTkdfT1BFUkFUSU9OX1RZUEVfVkFMVUVfUkVDRUlWRSxcbiAgICAgICAgICAgICAgICAgICAgY3R4OiBhcGlfMS5ST09UX0NPTlRFWFQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfQkFUQ0hfTUVTU0FHRV9DT1VOVF06IHBheWxvYWQuYmF0Y2gubWVzc2FnZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9QQVJUSVRJT05fSURdOiBTdHJpbmcocGF5bG9hZC5iYXRjaC5wYXJ0aXRpb24pLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCByZWNlaXZpbmdTcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nTWV0cmljcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXBhcmVDb3VudGVyKGluc3RydW1lbnRhdGlvbi5fY29uc3VtZWRNZXNzYWdlcywgcGF5bG9hZC5iYXRjaC5tZXNzYWdlcy5sZW5ndGgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX1NZU1RFTV06IHNlbWNvbnZfMS5NRVNTQUdJTkdfU1lTVEVNX1ZBTFVFX0tBRktBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OX05BTUVdOiAncHJvY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9OQU1FXTogcGF5bG9hZC5iYXRjaC50b3BpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX1BBUlRJVElPTl9JRF06IFN0cmluZyhwYXlsb2FkLmJhdGNoLnBhcnRpdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5iYXRjaC5tZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGFnYXRlZENvbnRleHQgPSBhcGlfMS5wcm9wYWdhdGlvbi5leHRyYWN0KGFwaV8xLlJPT1RfQ09OVEVYVCwgbWVzc2FnZS5oZWFkZXJzLCBwcm9wYWdhdG9yXzEuYnVmZmVyVGV4dE1hcEdldHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IGFwaV8xLnRyYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFNwYW4ocHJvcGFnYXRlZENvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5zcGFuQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9yaWdTcGFuTGluaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGFuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdTcGFuTGluayA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogc3BhbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5zLnB1c2goaW5zdHJ1bWVudGF0aW9uLl9zdGFydENvbnN1bWVyU3Bhbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9waWM6IHBheWxvYWQuYmF0Y2gudG9waWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25UeXBlOiBzZW1jb252XzEuTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1BST0NFU1MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluazogb3JpZ1NwYW5MaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9QQVJUSVRJT05fSURdOiBTdHJpbmcocGF5bG9hZC5iYXRjaC5wYXJ0aXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTWV0cmljcy5wdXNoKHByZXBhcmVEdXJhdGlvbkhpc3RvZ3JhbShpbnN0cnVtZW50YXRpb24uX3Byb2Nlc3NEdXJhdGlvbiwgc3RhcnRUaW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19TWVNURU1dOiBzZW1jb252XzEuTUVTU0FHSU5HX1NZU1RFTV9WQUxVRV9LQUZLQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9OQU1FXTogJ3Byb2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRV06IHBheWxvYWQuYmF0Y2gudG9waWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9QQVJUSVRJT05fSURdOiBTdHJpbmcocGF5bG9hZC5iYXRjaC5wYXJ0aXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmF0Y2hNZXNzYWdlUHJvbWlzZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBzcGFucy51bnNoaWZ0KHJlY2VpdmluZ1NwYW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLl9lbmRTcGFuc09uUHJvbWlzZShzcGFucywgcGVuZGluZ01ldHJpY3MsIGJhdGNoTWVzc2FnZVByb21pc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFByb2R1Y2VyVHJhbnNhY3Rpb25QYXRjaCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zYWN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvblNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbigndHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvblByb21pc2UgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2VuZCA9IHRyYW5zYWN0aW9uLnNlbmQ7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNlbmQgPSBmdW5jdGlvbiBzZW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCB0cmFuc2FjdGlvblNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZCA9IGluc3RydW1lbnRhdGlvbi5fZ2V0U2VuZFBhdGNoKCkob3JpZ2luYWxTZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2hlZC5hcHBseSh0aGlzLCBhcmdzKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25TcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTZW5kQmF0Y2ggPSB0cmFuc2FjdGlvbi5zZW5kQmF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNlbmRCYXRjaCA9IGZ1bmN0aW9uIHNlbmRCYXRjaCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgdHJhbnNhY3Rpb25TcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWQgPSBpbnN0cnVtZW50YXRpb24uX2dldFNlbmRCYXRjaFBhdGNoKCkob3JpZ2luYWxTZW5kQmF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXRjaGVkLmFwcGx5KHRoaXMsIGFyZ3MpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uU3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbW1pdCA9IHRyYW5zYWN0aW9uLmNvbW1pdDtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0ID0gZnVuY3Rpb24gY29tbWl0KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbkNvbW1pdFByb21pc2UgPSBvcmlnaW5hbENvbW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblNwYW4uc2V0U3RhdHVzKHsgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24uX2VuZFNwYW5zT25Qcm9taXNlKFt0cmFuc2FjdGlvblNwYW5dLCBbXSwgb3JpZ2luQ29tbWl0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQWJvcnQgPSB0cmFuc2FjdGlvbi5hYm9ydDtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYWJvcnQgPSBmdW5jdGlvbiBhYm9ydCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5BYm9ydFByb21pc2UgPSBvcmlnaW5hbEFib3J0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbi5fZW5kU3BhbnNPblByb21pc2UoW3RyYW5zYWN0aW9uU3Bhbl0sIFtdLCBvcmlnaW5BYm9ydFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25TcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRTZW5kQmF0Y2hQYXRjaCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNlbmRCYXRjaCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gYmF0Y2gudG9waWNNZXNzYWdlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaCh0b3BpY01lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b3BpY01lc3NhZ2UubWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5zLnB1c2goaW5zdHJ1bWVudGF0aW9uLl9zdGFydFByb2R1Y2VyU3Bhbih0b3BpY01lc3NhZ2UudG9waWMsIG1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdNZXRyaWNzLnB1c2gocHJlcGFyZUNvdW50ZXIoaW5zdHJ1bWVudGF0aW9uLl9zZW50TWVzc2FnZXMsIDEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX1NZU1RFTV06IHNlbWNvbnZfMS5NRVNTQUdJTkdfU1lTVEVNX1ZBTFVFX0tBRktBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OX05BTUVdOiAnc2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9OQU1FXTogdG9waWNNZXNzYWdlLnRvcGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihtZXNzYWdlLnBhcnRpdGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9QQVJUSVRJT05fSURdOiBTdHJpbmcobWVzc2FnZS5wYXJ0aXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnU2VuZFJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24uX2VuZFNwYW5zT25Qcm9taXNlKHNwYW5zLCBwZW5kaW5nTWV0cmljcywgb3JpZ1NlbmRSZXN1bHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFNlbmRQYXRjaCgpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNlbmQoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbnMgPSByZWNvcmQubWVzc2FnZXMubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGF0aW9uLl9zdGFydFByb2R1Y2VyU3BhbihyZWNvcmQudG9waWMsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdNZXRyaWNzID0gcmVjb3JkLm1lc3NhZ2VzLm1hcChtID0+IHByZXBhcmVDb3VudGVyKGluc3RydW1lbnRhdGlvbi5fc2VudE1lc3NhZ2VzLCAxLCB7XG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfU1lTVEVNXTogc2VtY29udl8xLk1FU1NBR0lOR19TWVNURU1fVkFMVUVfS0FGS0EsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OX05BTUVdOiAnc2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fTkFNRV06IHJlY29yZC50b3BpYyxcbiAgICAgICAgICAgICAgICAgICAgLi4uKG0ucGFydGl0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05fUEFSVElUSU9OX0lEXTogU3RyaW5nKG0ucGFydGl0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnU2VuZFJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50YXRpb24uX2VuZFNwYW5zT25Qcm9taXNlKHNwYW5zLCBwZW5kaW5nTWV0cmljcywgb3JpZ1NlbmRSZXN1bHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2VuZFNwYW5zT25Qcm9taXNlKHNwYW5zLCBwZW5kaW5nTWV0cmljcywgc2VuZFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzZW5kUHJvbWlzZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBwZW5kaW5nTWV0cmljcy5mb3JFYWNoKG0gPT4gbSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBsZXQgZXJyb3JUeXBlID0gc2VtYW50aWNfY29udmVudGlvbnNfMS5FUlJPUl9UWVBFX1ZBTFVFX09USEVSO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWFzb24gPT09ICdzdHJpbmcnIHx8IHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVhc29uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlYXNvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVhc29uLCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVhc29uLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgZXJyb3JUeXBlID0gcmVhc29uLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZW5kaW5nTWV0cmljcy5mb3JFYWNoKG0gPT4gbShlcnJvclR5cGUpKTtcbiAgICAgICAgICAgIHNwYW5zLmZvckVhY2goc3BhbiA9PiB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VSUk9SX1RZUEUsIGVycm9yVHlwZSk7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBzcGFucy5mb3JFYWNoKHNwYW4gPT4gc3Bhbi5lbmQoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc3RhcnRDb25zdW1lclNwYW4oeyB0b3BpYywgbWVzc2FnZSwgb3BlcmF0aW9uVHlwZSwgY3R4LCBsaW5rLCBhdHRyaWJ1dGVzLCB9KSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb25UeXBlID09PSBzZW1jb252XzEuTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFX1ZBTFVFX1JFQ0VJVkVcbiAgICAgICAgICAgID8gJ3BvbGwnIC8vIGZvciBiYXRjaCBwcm9jZXNzaW5nIHNwYW5zXG4gICAgICAgICAgICA6IG9wZXJhdGlvblR5cGU7IC8vIGZvciBpbmRpdmlkdWFsIG1lc3NhZ2UgcHJvY2Vzc2luZyBzcGFuc1xuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGAke29wZXJhdGlvbk5hbWV9ICR7dG9waWN9YCwge1xuICAgICAgICAgICAga2luZDogb3BlcmF0aW9uVHlwZSA9PT0gc2VtY29udl8xLk1FU1NBR0lOR19PUEVSQVRJT05fVFlQRV9WQUxVRV9SRUNFSVZFXG4gICAgICAgICAgICAgICAgPyBhcGlfMS5TcGFuS2luZC5DTElFTlRcbiAgICAgICAgICAgICAgICA6IGFwaV8xLlNwYW5LaW5kLkNPTlNVTUVSLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19TWVNURU1dOiBzZW1jb252XzEuTUVTU0FHSU5HX1NZU1RFTV9WQUxVRV9LQUZLQSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX05BTUVdOiB0b3BpYyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9UWVBFXTogb3BlcmF0aW9uVHlwZSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX09QRVJBVElPTl9OQU1FXTogb3BlcmF0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0tBRktBX01FU1NBR0VfS0VZXTogbWVzc2FnZT8ua2V5XG4gICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKG1lc3NhZ2Uua2V5KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0tBRktBX01FU1NBR0VfVE9NQlNUT05FXTogbWVzc2FnZT8ua2V5ICYmIG1lc3NhZ2UudmFsdWUgPT09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfS0FGS0FfT0ZGU0VUXTogbWVzc2FnZT8ub2Zmc2V0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbmtzOiBsaW5rID8gW2xpbmtdIDogW10sXG4gICAgICAgIH0sIGN0eCk7XG4gICAgICAgIGNvbnN0IHsgY29uc3VtZXJIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAoY29uc3VtZXJIb29rICYmIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBjb25zdW1lckhvb2soc3BhbiwgeyB0b3BpYywgbWVzc2FnZSB9KSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZXJyb3IoJ2NvbnN1bWVySG9vayBlcnJvcicsIGUpO1xuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgfVxuICAgIF9zdGFydFByb2R1Y2VyU3Bhbih0b3BpYywgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGBzZW5kICR7dG9waWN9YCwge1xuICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuUFJPRFVDRVIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19TWVNURU1dOiBzZW1jb252XzEuTUVTU0FHSU5HX1NZU1RFTV9WQUxVRV9LQUZLQSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX05BTUVdOiB0b3BpYyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0tBRktBX01FU1NBR0VfS0VZXTogbWVzc2FnZS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcobWVzc2FnZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfS0FGS0FfTUVTU0FHRV9UT01CU1RPTkVdOiBtZXNzYWdlLmtleSAmJiBtZXNzYWdlLnZhbHVlID09PSBudWxsID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX1BBUlRJVElPTl9JRF06IG1lc3NhZ2UucGFydGl0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcobWVzc2FnZS5wYXJ0aXRpb24pXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OX05BTUVdOiAnc2VuZCcsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05fVFlQRV06IHNlbWNvbnZfMS5NRVNTQUdJTkdfT1BFUkFUSU9OX1RZUEVfVkFMVUVfU0VORCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBtZXNzYWdlLmhlYWRlcnMgPSBtZXNzYWdlLmhlYWRlcnMgPz8ge307XG4gICAgICAgIGFwaV8xLnByb3BhZ2F0aW9uLmluamVjdChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCBtZXNzYWdlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCB7IHByb2R1Y2VySG9vayB9ID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgaWYgKHByb2R1Y2VySG9vaykge1xuICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHByb2R1Y2VySG9vayhzcGFuLCB7IHRvcGljLCBtZXNzYWdlIH0pLCBlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcigncHJvZHVjZXJIb29rIGVycm9yJywgZSk7XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3BhbjtcbiAgICB9XG59XG5leHBvcnRzLkthZmthSnNJbnN0cnVtZW50YXRpb24gPSBLYWZrYUpzSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnMsIEFzcGVjdG9cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LYWZrYUpzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2Fma2FKc0luc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuS2Fma2FKc0luc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41Mi4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNVUFBPUlRFRF9WRVJTSU9OUyA9IGV4cG9ydHMuTU9EVUxFX05BTUUgPSB2b2lkIDA7XG5leHBvcnRzLk1PRFVMRV9OQU1FID0gJ2tuZXgnO1xuZXhwb3J0cy5TVVBQT1JURURfVkVSU0lPTlMgPSBbXG4gICAgLy8gdXNlIFwibGliL2V4ZWN1dGlvblwiIGZvciBydW5uZXIuanMsIFwibGliXCIgZm9yIGNsaWVudC5qcyBhcyBiYXNlcGF0aCwgbGF0ZXN0IHRlc3RlZCAwLjk1LjZcbiAgICAnPj0wLjIyLjAgPDQnLFxuICAgIC8vIHVzZSBcImxpYlwiIGFzIGJhc2VwYXRoXG4gICAgJz49MC4xMC4wIDwwLjE4LjAnLFxuICAgICc+PTAuMTkuMCA8MC4yMi4wJyxcbiAgICAvLyB1c2UgXCJzcmNcIiBhcyBiYXNlcGF0aFxuICAgICc+PTAuMTguMCA8MC4xOS4wJyxcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX1NRTElURSA9IGV4cG9ydHMuQVRUUl9ORVRfVFJBTlNQT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9VU0VSID0gZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSBleHBvcnRzLkFUVFJfREJfU1FMX1RBQkxFID0gZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTiA9IGV4cG9ydHMuQVRUUl9EQl9OQU1FID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5uYW1lc3BhY2VgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgY3VzdG9tZXJzXG4gKiBAZXhhbXBsZSBtYWluXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5uYW1lc3BhY2VgLlxuICovXG5leHBvcnRzLkFUVFJfREJfTkFNRSA9ICdkYi5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5vcGVyYXRpb24ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBmaW5kQW5kTW9kaWZ5XG4gKiBAZXhhbXBsZSBITVNFVFxuICogQGV4YW1wbGUgU0VMRUNUXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5vcGVyYXRpb24ubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT04gPSAnZGIub3BlcmF0aW9uJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5jb2xsZWN0aW9uLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgXCJteXRhYmxlXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLmNvbGxlY3Rpb24ubmFtZWAsIGJ1dCBvbmx5IGlmIG5vdCBleHRyYWN0aW5nIHRoZSB2YWx1ZSBmcm9tIGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NRTF9UQUJMRSA9ICdkYi5zcWwudGFibGUnO1xuLyoqXG4gKiBUaGUgZGF0YWJhc2Ugc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIFNFTEVDVCAqIEZST00gd3VzZXJfdGFibGVcbiAqIEBleGFtcGxlIFNFVCBteWtleSBcIld1VmFsdWVcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIucXVlcnkudGV4dGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSAnZGIuc3RhdGVtZW50Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5zeXN0ZW0ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnN5c3RlbS5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9ICdkYi5zeXN0ZW0nO1xuLyoqXG4gKiBEZXByZWNhdGVkLCBubyByZXBsYWNlbWVudCBhdCB0aGlzIHRpbWUuXG4gKlxuICogQGV4YW1wbGUgcmVhZG9ubHlfdXNlclxuICogQGV4YW1wbGUgcmVwb3J0aW5nX3VzZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCwgbm8gcmVwbGFjZW1lbnQgYXQgdGhpcyB0aW1lLlxuICovXG5leHBvcnRzLkFUVFJfREJfVVNFUiA9ICdkYi51c2VyJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSBleGFtcGxlLmNvbVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9ICduZXQucGVlci5wb3J0Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBuZXR3b3JrLnRyYW5zcG9ydGAuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBuZXR3b3JrLnRyYW5zcG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfVFJBTlNQT1JUID0gJ25ldC50cmFuc3BvcnQnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwic3FsaXRlXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU1fTkFNRX0uXG4gKlxuICogW1NRTGl0ZV0oaHR0cHM6Ly93d3cuc3FsaXRlLm9yZy8pXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9TUUxJVEUgPSAnc3FsaXRlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dHJhY3RUYWJsZU5hbWUgPSBleHBvcnRzLmxpbWl0TGVuZ3RoID0gZXhwb3J0cy5nZXROYW1lID0gZXhwb3J0cy5tYXBTeXN0ZW0gPSBleHBvcnRzLm90ZWxFeGNlcHRpb25Gcm9tS25leEVycm9yID0gZXhwb3J0cy5nZXRGb3JtYXR0ZXIgPSB2b2lkIDA7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IGdldEZvcm1hdHRlciA9IChydW5uZXIpID0+IHtcbiAgICBpZiAocnVubmVyKSB7XG4gICAgICAgIGlmIChydW5uZXIuY2xpZW50KSB7XG4gICAgICAgICAgICBpZiAocnVubmVyLmNsaWVudC5fZm9ybWF0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVubmVyLmNsaWVudC5fZm9ybWF0UXVlcnkuYmluZChydW5uZXIuY2xpZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJ1bm5lci5jbGllbnQuU3FsU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bm5lci5jbGllbnQuU3FsU3RyaW5nLmZvcm1hdC5iaW5kKHJ1bm5lci5jbGllbnQuU3FsU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocnVubmVyLmJ1aWxkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5uZXIuYnVpbGRlci50b1N0cmluZy5iaW5kKHJ1bm5lci5idWlsZGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gJzxub29wIGZvcm1hdHRlcj4nO1xufTtcbmV4cG9ydHMuZ2V0Rm9ybWF0dGVyID0gZ2V0Rm9ybWF0dGVyO1xuZnVuY3Rpb24gb3RlbEV4Y2VwdGlvbkZyb21LbmV4RXJyb3IoZXJyLCBtZXNzYWdlKSB7XG4gICAgaWYgKCEoZXJyICYmIGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgc3RhY2s6IGVyci5zdGFjayxcbiAgICAgICAgbmFtZTogZXJyLm5hbWUsXG4gICAgfTtcbn1cbmV4cG9ydHMub3RlbEV4Y2VwdGlvbkZyb21LbmV4RXJyb3IgPSBvdGVsRXhjZXB0aW9uRnJvbUtuZXhFcnJvcjtcbmNvbnN0IHN5c3RlbU1hcCA9IG5ldyBNYXAoW1xuICAgIFsnc3FsaXRlMycsIHNlbWNvbnZfMS5EQl9TWVNURU1fTkFNRV9WQUxVRV9TUUxJVEVdLFxuICAgIFsncGcnLCBzZW1hbnRpY19jb252ZW50aW9uc18xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX1BPU1RHUkVTUUxdLFxuXSk7XG5jb25zdCBtYXBTeXN0ZW0gPSAoa25leFN5c3RlbSkgPT4ge1xuICAgIHJldHVybiBzeXN0ZW1NYXAuZ2V0KGtuZXhTeXN0ZW0pIHx8IGtuZXhTeXN0ZW07XG59O1xuZXhwb3J0cy5tYXBTeXN0ZW0gPSBtYXBTeXN0ZW07XG5jb25zdCBnZXROYW1lID0gKGRiLCBvcGVyYXRpb24sIHRhYmxlKSA9PiB7XG4gICAgaWYgKG9wZXJhdGlvbikge1xuICAgICAgICBpZiAodGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtvcGVyYXRpb259ICR7ZGJ9LiR7dGFibGV9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7b3BlcmF0aW9ufSAke2RifWA7XG4gICAgfVxuICAgIHJldHVybiBkYjtcbn07XG5leHBvcnRzLmdldE5hbWUgPSBnZXROYW1lO1xuY29uc3QgbGltaXRMZW5ndGggPSAoc3RyLCBtYXhMZW5ndGgpID0+IHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIG1heExlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgMCA8IG1heExlbmd0aCAmJlxuICAgICAgICBtYXhMZW5ndGggPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkgKyAnLi4nO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcbmV4cG9ydHMubGltaXRMZW5ndGggPSBsaW1pdExlbmd0aDtcbmNvbnN0IGV4dHJhY3RUYWJsZU5hbWUgPSAoYnVpbGRlcikgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gYnVpbGRlcj8uX3NpbmdsZT8udGFibGU7XG4gICAgaWYgKHR5cGVvZiB0YWJsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuICgwLCBleHBvcnRzLmV4dHJhY3RUYWJsZU5hbWUpKHRhYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhYmxlO1xufTtcbmV4cG9ydHMuZXh0cmFjdFRhYmxlTmFtZSA9IGV4dHJhY3RUYWJsZU5hbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS25leEluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBjb250ZXh0U3ltYm9sID0gU3ltYm9sKCdvcGVudGVsZW1ldHJ5Lmluc3RydW1lbnRhdGlvbi1rbmV4LmNvbnRleHQnKTtcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge1xuICAgIG1heFF1ZXJ5TGVuZ3RoOiAxMDIyLFxuICAgIHJlcXVpcmVQYXJlbnRTcGFuOiBmYWxzZSxcbn07XG5jbGFzcyBLbmV4SW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgX3NlbWNvbnZTdGFiaWxpdHk7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgICAgICB0aGlzLl9zZW1jb252U3RhYmlsaXR5ID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnZGF0YWJhc2UnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oY29uc3RhbnRzLk1PRFVMRV9OQU1FLCBjb25zdGFudHMuU1VQUE9SVEVEX1ZFUlNJT05TKTtcbiAgICAgICAgbW9kdWxlLmZpbGVzLnB1c2godGhpcy5nZXRDbGllbnROb2RlTW9kdWxlRmlsZUluc3RydW1lbnRhdGlvbignc3JjJyksIHRoaXMuZ2V0Q2xpZW50Tm9kZU1vZHVsZUZpbGVJbnN0cnVtZW50YXRpb24oJ2xpYicpLCB0aGlzLmdldFJ1bm5lck5vZGVNb2R1bGVGaWxlSW5zdHJ1bWVudGF0aW9uKCdzcmMnKSwgdGhpcy5nZXRSdW5uZXJOb2RlTW9kdWxlRmlsZUluc3RydW1lbnRhdGlvbignbGliJyksIHRoaXMuZ2V0UnVubmVyTm9kZU1vZHVsZUZpbGVJbnN0cnVtZW50YXRpb24oJ2xpYi9leGVjdXRpb24nKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIGdldFJ1bm5lck5vZGVNb2R1bGVGaWxlSW5zdHJ1bWVudGF0aW9uKGJhc2VQYXRoKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoYGtuZXgvJHtiYXNlUGF0aH0vcnVubmVyLmpzYCwgY29uc3RhbnRzLlNVUFBPUlRFRF9WRVJTSU9OUywgKFJ1bm5lciwgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVXcmFwcGVkKFJ1bm5lci5wcm90b3R5cGUsICdxdWVyeScsIHRoaXMuY3JlYXRlUXVlcnlXcmFwcGVyKG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgIHJldHVybiBSdW5uZXI7XG4gICAgICAgIH0sIChSdW5uZXIsIG1vZHVsZVZlcnNpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChSdW5uZXIucHJvdG90eXBlLCAncXVlcnknKTtcbiAgICAgICAgICAgIHJldHVybiBSdW5uZXI7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDbGllbnROb2RlTW9kdWxlRmlsZUluc3RydW1lbnRhdGlvbihiYXNlUGF0aCkge1xuICAgICAgICByZXR1cm4gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKGBrbmV4LyR7YmFzZVBhdGh9L2NsaWVudC5qc2AsIGNvbnN0YW50cy5TVVBQT1JURURfVkVSU0lPTlMsIChDbGllbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlV3JhcHBlZChDbGllbnQucHJvdG90eXBlLCAncXVlcnlCdWlsZGVyJywgdGhpcy5zdG9yZUNvbnRleHQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVdyYXBwZWQoQ2xpZW50LnByb3RvdHlwZSwgJ3NjaGVtYUJ1aWxkZXInLCB0aGlzLnN0b3JlQ29udGV4dC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlV3JhcHBlZChDbGllbnQucHJvdG90eXBlLCAncmF3JywgdGhpcy5zdG9yZUNvbnRleHQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICByZXR1cm4gQ2xpZW50O1xuICAgICAgICB9LCAoQ2xpZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAoQ2xpZW50LnByb3RvdHlwZSwgJ3F1ZXJ5QnVpbGRlcicpO1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKENsaWVudC5wcm90b3R5cGUsICdzY2hlbWFCdWlsZGVyJyk7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAoQ2xpZW50LnByb3RvdHlwZSwgJ3JhdycpO1xuICAgICAgICAgICAgcmV0dXJuIENsaWVudDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZVF1ZXJ5V3JhcHBlcihtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwUXVlcnkob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVkX2xvZ2dpbmdfbWV0aG9kKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jbGllbnQuY29uZmlnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdXRpbHMuZXh0cmFjdFRhYmxlTmFtZSh0aGlzLmJ1aWxkZXIpO1xuICAgICAgICAgICAgICAgIC8vIGBtZXRob2RgIGFjdHVhbGx5IHJlZmVycyB0byB0aGUga25leCBBUEkgbWV0aG9kIC0gTm90IGV4YWN0bHkgXCJvcGVyYXRpb25cIlxuICAgICAgICAgICAgICAgIC8vIGluIHRoZSBzcGVjIHNlbnNlLCBidXQgbWF0Y2hlcyBtb3N0IG9mIHRoZSB0aW1lLlxuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHF1ZXJ5Py5tZXRob2Q7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGNvbmZpZz8uY29ubmVjdGlvbj8uZmlsZW5hbWUgfHwgY29uZmlnPy5jb25uZWN0aW9uPy5kYXRhYmFzZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG1heFF1ZXJ5TGVuZ3RoIH0gPSBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2tuZXgudmVyc2lvbic6IG1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBjb25maWc/LmNvbm5lY3Rpb24/LmZpbGVuYW1lID09PSAnOm1lbW9yeTonID8gJ2lucHJvYycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbi5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHV0aWxzLm1hcFN5c3RlbShjb25maWcuY2xpZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9TUUxfVEFCTEVdOiB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dOiBvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfVVNFUl06IGNvbmZpZz8uY29ubmVjdGlvbj8udXNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9OQU1FXTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogY29uZmlnPy5jb25uZWN0aW9uPy5ob3N0LFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlRdOiBjb25maWc/LmNvbm5lY3Rpb24/LnBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX1RSQU5TUE9SVF06IHRyYW5zcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfU1lTVEVNX05BTUVdOiB1dGlscy5tYXBTeXN0ZW0oY29uZmlnLmNsaWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX0NPTExFQ1RJT05fTkFNRV06IHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9PUEVSQVRJT05fTkFNRV06IG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfTkFNRVNQQUNFXTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX0FERFJFU1NdOiBjb25maWc/LmNvbm5lY3Rpb24/Lmhvc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXTogY29uZmlnPy5jb25uZWN0aW9uPy5wb3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1heFF1ZXJ5TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlcnMgYm90aCB1bmRlZmluZWQgYW5kIDBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlUZXh0ID0gdXRpbHMubGltaXRMZW5ndGgocXVlcnk/LnNxbCwgbWF4UXVlcnlMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uLl9zZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1FVRVJZX1RFWFRdID0gcXVlcnlUZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9TVEFURU1FTlRdID0gcXVlcnlUZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbnRleHQgPSB0aGlzLmJ1aWxkZXJbY29udGV4dFN5bWJvbF0gfHwgYXBpLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IGFwaS50cmFjZS5nZXRTcGFuKHBhcmVudENvbnRleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0FjdGl2ZVBhcmVudCA9IHBhcmVudFNwYW4gJiYgYXBpLnRyYWNlLmlzU3BhbkNvbnRleHRWYWxpZChwYXJlbnRTcGFuLnNwYW5Db250ZXh0KCkpO1xuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uX2NvbmZpZy5yZXF1aXJlUGFyZW50U3BhbiAmJiAhaGFzQWN0aXZlUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5iaW5kKHRoaXMpKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3Bhbih1dGlscy5nZXROYW1lKG5hbWUsIG9wZXJhdGlvbiwgdGFibGUpLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSwgcGFyZW50Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGkudHJhY2Uuc2V0U3BhbihhcGkuY29udGV4dC5hY3RpdmUoKSwgc3Bhbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIC53aXRoKHNwYW5Db250ZXh0LCBvcmlnaW5hbCwgdGhpcywgLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8ga25leCBhZGRzIGZ1bGwgcXVlcnkgd2l0aCBhbGwgdGhlIGJpbmRpbmcgdmFsdWVzIHRvIHRoZSBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IHRvIHVuZG8gdGhhdCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB1dGlscy5nZXRGb3JtYXR0ZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxRdWVyeSA9IGZvcm1hdHRlcihxdWVyeS5zcWwsIHF1ZXJ5LmJpbmRpbmdzIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoZnVsbFF1ZXJ5ICsgJyAtICcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhjID0gdXRpbHMub3RlbEV4Y2VwdGlvbkZyb21LbmV4RXJyb3IoZXJyLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXhjKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBhcGkuU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0b3JlQ29udGV4dChvcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZF9sb2dnaW5nX21ldGhvZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gQnVpbGRlciBpcyBhIGN1c3RvbSBwcm9taXNlIHR5cGUgYW5kIHdoZW4gYXdhaXRlZCBpdCBmYWlscyB0byBwcm9wYWdhdGUgY29udGV4dC5cbiAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoZSBwYXJlbnQgY29udGV4dCBhdCB0aGUgbW9tZW50IG9mIGluaXRpYXRpbmcgdGhlIGJ1aWxkZXJcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSdkIGhhdmUgbm90aGluZyB0byBhdHRhY2ggdGhlIHNwYW4gYXMgYSBjaGlsZCBmb3IgaW4gYHF1ZXJ5YC5cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWlsZGVyLCBjb250ZXh0U3ltYm9sLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGFwaS5jb250ZXh0LmFjdGl2ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZW5zdXJlV3JhcHBlZChvYmosIG1ldGhvZE5hbWUsIHdyYXBwZXIpIHtcbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG9ialttZXRob2ROYW1lXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChvYmosIG1ldGhvZE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dyYXAob2JqLCBtZXRob2ROYW1lLCB3cmFwcGVyKTtcbiAgICB9XG59XG5leHBvcnRzLktuZXhJbnN0cnVtZW50YXRpb24gPSBLbmV4SW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LbmV4SW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS25leEluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuS25leEluc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktvYUxheWVyVHlwZSA9IHZvaWQgMDtcbnZhciBLb2FMYXllclR5cGU7XG4oZnVuY3Rpb24gKEtvYUxheWVyVHlwZSkge1xuICAgIEtvYUxheWVyVHlwZVtcIlJPVVRFUlwiXSA9IFwicm91dGVyXCI7XG4gICAgS29hTGF5ZXJUeXBlW1wiTUlERExFV0FSRVwiXSA9IFwibWlkZGxld2FyZVwiO1xufSkoS29hTGF5ZXJUeXBlID0gZXhwb3J0cy5Lb2FMYXllclR5cGUgfHwgKGV4cG9ydHMuS29hTGF5ZXJUeXBlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41Ni4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rb2EnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgQXR0cmlidXRlTmFtZXM7XG4oZnVuY3Rpb24gKEF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJLT0FfVFlQRVwiXSA9IFwia29hLnR5cGVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIktPQV9OQU1FXCJdID0gXCJrb2EubmFtZVwiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzTGF5ZXJJZ25vcmVkID0gZXhwb3J0cy5nZXRNaWRkbGV3YXJlTWV0YWRhdGEgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IGdldE1pZGRsZXdhcmVNZXRhZGF0YSA9IChjb250ZXh0LCBsYXllciwgaXNSb3V0ZXIsIGxheWVyUGF0aCkgPT4ge1xuICAgIGlmIChpc1JvdXRlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLktPQV9OQU1FXTogbGF5ZXJQYXRoPy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLktPQV9UWVBFXTogdHlwZXNfMS5Lb2FMYXllclR5cGUuUk9VVEVSLFxuICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV06IGxheWVyUGF0aD8udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiBjb250ZXh0Ll9tYXRjaGVkUm91dGVOYW1lIHx8IGByb3V0ZXIgLSAke2xheWVyUGF0aH1gLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5LT0FfTkFNRV06IGxheWVyLm5hbWUgPz8gJ21pZGRsZXdhcmUnLFxuICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLktPQV9UWVBFXTogdHlwZXNfMS5Lb2FMYXllclR5cGUuTUlERExFV0FSRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiBgbWlkZGxld2FyZSAtICR7bGF5ZXIubmFtZX1gLFxuICAgICAgICB9O1xuICAgIH1cbn07XG5leHBvcnRzLmdldE1pZGRsZXdhcmVNZXRhZGF0YSA9IGdldE1pZGRsZXdhcmVNZXRhZGF0YTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcmVxdWVzdCBpcyBpZ25vcmVkIGJ5IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBbbGlzdF0gTGlzdCBvZiBpZ25vcmUgcGF0dGVybnNcbiAqIEBwYXJhbSBbb25FeGNlcHRpb25dIGNhbGxiYWNrIGZvciBkb2luZyBzb21ldGhpbmcgd2hlbiBhbiBleGNlcHRpb24gaGFzXG4gKiAgICAgb2NjdXJyZWRcbiAqL1xuY29uc3QgaXNMYXllcklnbm9yZWQgPSAodHlwZSwgY29uZmlnKSA9PiB7XG4gICAgcmV0dXJuICEhKEFycmF5LmlzQXJyYXkoY29uZmlnPy5pZ25vcmVMYXllcnNUeXBlKSAmJlxuICAgICAgICBjb25maWc/Lmlnbm9yZUxheWVyc1R5cGU/LmluY2x1ZGVzKHR5cGUpKTtcbn07XG5leHBvcnRzLmlzTGF5ZXJJZ25vcmVkID0gaXNMYXllcklnbm9yZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5rTGF5ZXJQYXRjaGVkID0gdm9pZCAwO1xuLyoqXG4gKiBUaGlzIHN5bWJvbCBpcyB1c2VkIHRvIG1hcmsgYSBLb2EgbGF5ZXIgYXMgYmVpbmcgYWxyZWFkeSBpbnN0cnVtZW50ZWRcbiAqIHNpbmNlIGl0cyBwb3NzaWJsZSB0byB1c2UgYSBnaXZlbiBsYXllciBtdWx0aXBsZSB0aW1lcyAoZXg6IG1pZGRsZXdhcmVzKVxuICovXG5leHBvcnRzLmtMYXllclBhdGNoZWQgPSBTeW1ib2woJ2tvYS1sYXllci1wYXRjaGVkJyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuS29hSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaW50ZXJuYWxfdHlwZXNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsLXR5cGVzXCIpO1xuLyoqIEtvYSBpbnN0cnVtZW50YXRpb24gZm9yIE9wZW5UZWxlbWV0cnkgKi9cbmNsYXNzIEtvYUluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ2tvYScsIFsnPj0yLjAuMCA8NCddLCAobW9kdWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnXG4gICAgICAgICAgICAgICAgPyBtb2R1bGUuZGVmYXVsdCAvLyBFU01cbiAgICAgICAgICAgICAgICA6IG1vZHVsZTsgLy8gQ29tbW9uSlNcbiAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnByb3RvdHlwZS51c2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAndXNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAndXNlJywgdGhpcy5fZ2V0S29hVXNlUGF0Y2guYmluZCh0aGlzKSk7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgICAgICB9LCAobW9kdWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnXG4gICAgICAgICAgICAgICAgPyBtb2R1bGUuZGVmYXVsdCAvLyBFU01cbiAgICAgICAgICAgICAgICA6IG1vZHVsZTsgLy8gQ29tbW9uSlNcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnByb3RvdHlwZS51c2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAndXNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaGVzIHRoZSBLb2EudXNlIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGluc3RydW1lbnQgZWFjaCBvcmlnaW5hbFxuICAgICAqIG1pZGRsZXdhcmUgbGF5ZXIgd2hpY2ggaXMgaW50cm9kdWNlZFxuICAgICAqIEBwYXJhbSB7S29hTWlkZGxld2FyZX0gbWlkZGxld2FyZSAtIHRoZSBvcmlnaW5hbCBtaWRkbGV3YXJlIGZ1bmN0aW9uXG4gICAgICovXG4gICAgX2dldEtvYVVzZVBhdGNoKG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB1c2UobWlkZGxld2FyZUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBsZXQgcGF0Y2hlZEZ1bmN0aW9uO1xuICAgICAgICAgICAgaWYgKG1pZGRsZXdhcmVGdW5jdGlvbi5yb3V0ZXIpIHtcbiAgICAgICAgICAgICAgICBwYXRjaGVkRnVuY3Rpb24gPSBwbHVnaW4uX3BhdGNoUm91dGVyRGlzcGF0Y2gobWlkZGxld2FyZUZ1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhdGNoZWRGdW5jdGlvbiA9IHBsdWdpbi5fcGF0Y2hMYXllcihtaWRkbGV3YXJlRnVuY3Rpb24sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbcGF0Y2hlZEZ1bmN0aW9uXSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBhdGNoZXMgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgYnkgQGtvYS9yb3V0ZXIuIFRoaXMgZnVuY3Rpb25cbiAgICAgKiBnb2VzIHRocm91Z2ggZWFjaCByb3V0ZWQgbWlkZGxld2FyZSBhbmQgYWRkcyBpbnN0cnVtZW50YXRpb24gdmlhIGEgY2FsbFxuICAgICAqIHRvIHRoZSBAZnVuY3Rpb24gX3BhdGNoTGF5ZXIgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtLb2FNaWRkbGV3YXJlfSBkaXNwYXRjaExheWVyIC0gdGhlIG9yaWdpbmFsIGRpc3BhdGNoIGZ1bmN0aW9uIHdoaWNoIGRpc3BhdGNoZXNcbiAgICAgKiByb3V0ZWQgbWlkZGxld2FyZVxuICAgICAqL1xuICAgIF9wYXRjaFJvdXRlckRpc3BhdGNoKGRpc3BhdGNoTGF5ZXIpIHtcbiAgICAgICAgYXBpLmRpYWcuZGVidWcoJ1BhdGNoaW5nIEBrb2Evcm91dGVyIGRpc3BhdGNoJyk7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9IGRpc3BhdGNoTGF5ZXIucm91dGVyO1xuICAgICAgICBjb25zdCByb3V0ZXNTdGFjayA9IHJvdXRlcj8uc3RhY2sgPz8gW107XG4gICAgICAgIGZvciAoY29uc3QgcGF0aExheWVyIG9mIHJvdXRlc1N0YWNrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gcGF0aExheWVyLnBhdGg7XG4gICAgICAgICAgICAvLyBUeXBlIGNhc3QgbmVlZGVkOiByb3V0ZXIuc3RhY2sgY29tZXMgZnJvbSBAdHlwZXMva29hQDIueCBidXQgd2UgdXNlIEB0eXBlcy9rb2FAMy54XG4gICAgICAgICAgICAvLyBTZWUgaW50ZXJuYWwtdHlwZXMudHMgZm9yIGZ1bGwgZXhwbGFuYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHBhdGhTdGFjayA9IHBhdGhMYXllci5zdGFjaztcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aFN0YWNrLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGVkTWlkZGxld2FyZSA9IHBhdGhTdGFja1tqXTtcbiAgICAgICAgICAgICAgICBwYXRoU3RhY2tbal0gPSB0aGlzLl9wYXRjaExheWVyKHJvdXRlZE1pZGRsZXdhcmUsIHRydWUsIHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXNwYXRjaExheWVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaGVzIGVhY2ggaW5kaXZpZHVhbCBAcGFyYW0gbWlkZGxld2FyZUxheWVyIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGVcbiAgICAgKiBzcGFuIGFuZCBwcm9wYWdhdGUgY29udGV4dC4gSXQgZG9lcyBub3QgY3JlYXRlIHNwYW5zIHdoZW4gdGhlcmUgaXMgbm8gcGFyZW50IHNwYW4uXG4gICAgICogQHBhcmFtIHtLb2FNaWRkbGV3YXJlfSBtaWRkbGV3YXJlTGF5ZXIgLSB0aGUgb3JpZ2luYWwgbWlkZGxld2FyZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUm91dGVyIC0gdHJhY2tzIHdoZXRoZXIgdGhlIG9yaWdpbmFsIG1pZGRsZXdhcmUgZnVuY3Rpb25cbiAgICAgKiB3YXMgZGlzcGF0Y2hlZCBieSB0aGUgcm91dGVyIG9yaWdpbmFsbHlcbiAgICAgKiBAcGFyYW0ge3N0cmluZz99IGxheWVyUGF0aCAtIGlmIHByZXNlbnQsIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGF0YSBmcm9tIHRoZVxuICAgICAqIHJvdXRlciBhYm91dCB0aGUgcm91dGVkIHBhdGggd2hpY2ggdGhlIG1pZGRsZXdhcmUgaXMgYXR0YWNoZWQgdG9cbiAgICAgKi9cbiAgICBfcGF0Y2hMYXllcihtaWRkbGV3YXJlTGF5ZXIsIGlzUm91dGVyLCBsYXllclBhdGgpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJUeXBlID0gaXNSb3V0ZXIgPyB0eXBlc18xLktvYUxheWVyVHlwZS5ST1VURVIgOiB0eXBlc18xLktvYUxheWVyVHlwZS5NSURETEVXQVJFO1xuICAgICAgICAvLyBTa2lwIHBhdGNoaW5nIGxheWVyIGlmIGl0cyBpZ25vcmVkIGluIHRoZSBjb25maWdcbiAgICAgICAgaWYgKG1pZGRsZXdhcmVMYXllcltpbnRlcm5hbF90eXBlc18xLmtMYXllclBhdGNoZWRdID09PSB0cnVlIHx8XG4gICAgICAgICAgICAoMCwgdXRpbHNfMS5pc0xheWVySWdub3JlZCkobGF5ZXJUeXBlLCB0aGlzLmdldENvbmZpZygpKSlcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGV3YXJlTGF5ZXI7XG4gICAgICAgIGlmIChtaWRkbGV3YXJlTGF5ZXIuY29uc3RydWN0b3IubmFtZSA9PT0gJ0dlbmVyYXRvckZ1bmN0aW9uJyB8fFxuICAgICAgICAgICAgbWlkZGxld2FyZUxheWVyLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJykge1xuICAgICAgICAgICAgYXBpLmRpYWcuZGVidWcoJ2lnbm9yaW5nIGdlbmVyYXRvci1iYXNlZCBLb2EgbWlkZGxld2FyZSBsYXllcicpO1xuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmVMYXllcjtcbiAgICAgICAgfVxuICAgICAgICBtaWRkbGV3YXJlTGF5ZXJbaW50ZXJuYWxfdHlwZXNfMS5rTGF5ZXJQYXRjaGVkXSA9IHRydWU7XG4gICAgICAgIGFwaS5kaWFnLmRlYnVnKCdwYXRjaGluZyBLb2EgbWlkZGxld2FyZSBsYXllcicpO1xuICAgICAgICByZXR1cm4gYXN5bmMgKGNvbnRleHQsIG5leHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGFwaS50cmFjZS5nZXRTcGFuKGFwaS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtaWRkbGV3YXJlTGF5ZXIoY29udGV4dCwgbmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9ICgwLCB1dGlsc18xLmdldE1pZGRsZXdhcmVNZXRhZGF0YSkoY29udGV4dCwgbWlkZGxld2FyZUxheWVyLCBpc1JvdXRlciwgbGF5ZXJQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4obWV0YWRhdGEubmFtZSwge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG1ldGFkYXRhLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJwY01ldGFkYXRhID0gKDAsIGNvcmVfMS5nZXRSUENNZXRhZGF0YSkoYXBpLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgaWYgKHJwY01ldGFkYXRhPy50eXBlID09PSBjb3JlXzEuUlBDVHlwZS5IVFRQICYmIGNvbnRleHQuX21hdGNoZWRSb3V0ZSkge1xuICAgICAgICAgICAgICAgIHJwY01ldGFkYXRhLnJvdXRlID0gY29udGV4dC5fbWF0Y2hlZFJvdXRlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHJlcXVlc3RIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RIb29rKSB7XG4gICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHJlcXVlc3RIb29rKHNwYW4sIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgbWlkZGxld2FyZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICBsYXllclR5cGUsXG4gICAgICAgICAgICAgICAgfSksIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpLmRpYWcuZXJyb3IoJ2tvYSBpbnN0cnVtZW50YXRpb246IHJlcXVlc3QgaG9vayBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IGFwaS50cmFjZS5zZXRTcGFuKGFwaS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKG5ld0NvbnRleHQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgbWlkZGxld2FyZUxheWVyKGNvbnRleHQsIG5leHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5Lb2FJbnN0cnVtZW50YXRpb24gPSBLb2FJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktvYUxheWVyVHlwZSA9IGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLktvYUluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktvYUluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuS29hSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xudmFyIEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF0dHJpYnV0ZU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzOyB9IH0pO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktvYUxheWVyVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMS5Lb2FMYXllclR5cGU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTIuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbHJ1LW1lbW9pemVyJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxydU1lbW9pemVySW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY2xhc3MgTHJ1TWVtb2l6ZXJJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdscnUtbWVtb2l6ZXInLCBbJz49MS4zIDwzJ10sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIG1vZHVsZUV4cG9ydHMgaXMgYSBmdW5jdGlvbiB3aGljaCByZWNlaXZlcyBhbiBvcHRpb25zIG9iamVjdCxcbiAgICAgICAgICAgICAgICAvLyBhbmQgcmV0dXJucyBhIFwibWVtb2l6ZXJcIiBmdW5jdGlvbiB1cG9uIGludm9jYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBwYXRjaCB0aGlzIFwibWVtb2l6ZXInc1wiIGludGVybmFsIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgYXN5bmNNZW1vaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgaW52b2tlZCBldmVyeSB0aW1lIHRoZSB1c2VyIHdhbnRzIHRvIGdldCBhIChwb3NzaWJsZSkgbWVtb2l6ZWQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZnVuY3Rpb24gaW4gd2hpY2ggd2UgYmluZCB0aGUgY3VycmVudCBjb250ZXh0IHRvIHRoZSBsYXN0IGFyZ3VtZW50IChjYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ01lbW9pemVyID0gbW9kdWxlRXhwb3J0cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZWRBcmd1bWVudHMgPSBbLi4uYXJndW1lbnRzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhc3QgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnQ2FsbGJhY2sgPSBtb2RpZmllZEFyZ3VtZW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrV2l0aENvbnRleHQgPSB0eXBlb2Ygb3JpZ0NhbGxiYWNrID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcGlfMS5jb250ZXh0LmJpbmQoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgb3JpZ0NhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3JpZ0NhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRBcmd1bWVudHMucHVzaChjYWxsYmFja1dpdGhDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnTWVtb2l6ZXIuYXBwbHkodGhpcywgbW9kaWZpZWRBcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gc3luYyBmdW5jdGlvbiBwcmVzZXJ2ZXMgY29udGV4dCwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZXhwb3J0IGl0XG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGxydS1tZW1vaXplciBwYWNrYWdlIGRvZXNcbiAgICAgICAgICAgICAgICBhc3luY01lbW9pemVyLnN5bmMgPSBtb2R1bGVFeHBvcnRzLnN5bmM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jTWVtb2l6ZXI7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQgLy8gbm8gbmVlZCB0byBkaXNhYmxlIGFzIHRoaXMgaW5zdHJ1bWVudGF0aW9uIGRvZXMgbm90IGNyZWF0ZSBhbnkgc3BhbnNcbiAgICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgfVxufVxuZXhwb3J0cy5McnVNZW1vaXplckluc3RydW1lbnRhdGlvbiA9IExydU1lbW9pemVySW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5McnVNZW1vaXplckluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxydU1lbW9pemVySW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5McnVNZW1vaXplckluc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfTUVNQ0FDSEVEID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSBleHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTiA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIub3BlcmF0aW9uLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgZmluZEFuZE1vZGlmeVxuICogQGV4YW1wbGUgSE1TRVRcbiAqIEBleGFtcGxlIFNFTEVDVFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIub3BlcmF0aW9uLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfT1BFUkFUSU9OID0gJ2RiLm9wZXJhdGlvbic7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQGV4YW1wbGUgU0VMRUNUICogRlJPTSB3dXNlcl90YWJsZVxuICogQGV4YW1wbGUgU0VUIG15a2V5IFwiV3VWYWx1ZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9ICdkYi5zdGF0ZW1lbnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLnN5c3RlbS5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuc3lzdGVtLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJtZW1jYWNoZWRcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RCX1NZU1RFTX0uXG4gKlxuICogTWVtY2FjaGVkXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfTUVNQ0FDSEVEID0gJ21lbWNhY2hlZCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRQZWVyQXR0cmlidXRlcyA9IHZvaWQgMDtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBnZXRQZWVyQXR0cmlidXRlcyA9IChjbGllbnQgLyogTWVtY2FjaGVkLCBidXQgdGhlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGxhY2tpbmcgKi8sIHNlcnZlciwgcXVlcnkpID0+IHtcbiAgICBpZiAoIXNlcnZlcikge1xuICAgICAgICBpZiAoY2xpZW50LnNlcnZlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBzZXJ2ZXIgPSBjbGllbnQuc2VydmVyc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZWR1bmRhbmN5ID0gY2xpZW50LnJlZHVuZGFuY3kgJiYgY2xpZW50LnJlZHVuZGFuY3kgPCBjbGllbnQuc2VydmVycy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVJlZHVuZGFuY3kgPSBxdWVyeS5yZWR1bmRhbmN5RW5hYmxlZDtcbiAgICAgICAgICAgIGlmIChyZWR1bmRhbmN5ICYmIHF1ZXJ5UmVkdW5kYW5jeSkge1xuICAgICAgICAgICAgICAgIHJlZHVuZGFuY3kgPSBjbGllbnQuSGFzaFJpbmcucmFuZ2UocXVlcnkua2V5LCBjbGllbnQucmVkdW5kYW5jeSArIDEsIHRydWUpO1xuICAgICAgICAgICAgICAgIHNlcnZlciA9IHJlZHVuZGFuY3kuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlcnZlciA9IGNsaWVudC5IYXNoUmluZy5nZXQocXVlcnkua2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHNlcnZlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgW2hvc3QsIHBvcnRdID0gc2VydmVyICYmIHNlcnZlci5zcGxpdCgnOicpO1xuICAgICAgICBpZiAoaG9zdCAmJiBwb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBwb3J0TnVtYmVyID0gcGFyc2VJbnQocG9ydCwgMTApO1xuICAgICAgICAgICAgaWYgKCFpc05hTihwb3J0TnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogaG9zdCxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlRdOiBwb3J0TnVtYmVyLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogaG9zdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufTtcbmV4cG9ydHMuZ2V0UGVlckF0dHJpYnV0ZXMgPSBnZXRQZWVyQXR0cmlidXRlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41MS4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tZW1jYWNoZWQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWVtY2FjaGVkSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY2xhc3MgTWVtY2FjaGVkSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgc3RhdGljIENPTVBPTkVOVCA9ICdtZW1jYWNoZWQnO1xuICAgIHN0YXRpYyBDT01NT05fQVRUUklCVVRFUyA9IHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfTUVNQ0FDSEVELFxuICAgIH07XG4gICAgc3RhdGljIERFRkFVTFRfQ09ORklHID0ge1xuICAgICAgICBlbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nOiBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIHtcbiAgICAgICAgICAgIC4uLk1lbWNhY2hlZEluc3RydW1lbnRhdGlvbi5ERUZBVUxUX0NPTkZJRyxcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi5NZW1jYWNoZWRJbnN0cnVtZW50YXRpb24uREVGQVVMVF9DT05GSUcsIC4uLmNvbmZpZyB9KTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignbWVtY2FjaGVkJywgWyc+PTIuMi4wIDwzJ10sIChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVXcmFwcGVkKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnY29tbWFuZCcsIHRoaXMud3JhcENvbW1hbmQuYmluZCh0aGlzLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAvLyBgY29tbWFuZGAgaXMgZG9jdW1lbnRlZCBBUEkgbWlzc2luZyBmcm9tIHRoZSB0eXBlc1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ2NvbW1hbmQnKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICB3cmFwQ29tbWFuZChtb2R1bGVWZXJzaW9uLCBvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHF1ZXJ5Q29tcGlsZXIsIHNlcnZlcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBxdWVyeUNvbXBpbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgbmFtZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyXG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oJ3Vua25vd24gbWVtY2FjaGVkIGNvbW1hbmQnLCB7XG4gICAgICAgICAgICAgICAga2luZDogYXBpLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICdtZW1jYWNoZWQudmVyc2lvbic6IG1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIC4uLk1lbWNhY2hlZEluc3RydW1lbnRhdGlvbi5DT01NT05fQVRUUklCVVRFUyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gYXBpLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gYXBpLnRyYWNlLnNldFNwYW4ocGFyZW50Q29udGV4dCwgc3Bhbik7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aChjb250ZXh0LCBvcmlnaW5hbCwgdGhpcywgaW5zdHJ1bWVudGF0aW9uLndyYXBRdWVyeUNvbXBpbGVyLmNhbGwoaW5zdHJ1bWVudGF0aW9uLCBxdWVyeUNvbXBpbGVyLCB0aGlzLCBzZXJ2ZXIsIHBhcmVudENvbnRleHQsIHNwYW4pLCBzZXJ2ZXIpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB3cmFwUXVlcnlDb21waWxlcihvcmlnaW5hbCwgY2xpZW50LCBzZXJ2ZXIsIGNhbGxiYWNrQ29udGV4dCwgc3Bhbikge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBxdWVyeS5jYWxsYmFjaztcbiAgICAgICAgICAgIHNwYW4udXBkYXRlTmFtZShgbWVtY2FjaGVkICR7cXVlcnkudHlwZX1gKTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgJ2RiLm1lbWNhY2hlZC5rZXknOiBxdWVyeS5rZXksXG4gICAgICAgICAgICAgICAgJ2RiLm1lbWNhY2hlZC5saWZldGltZSc6IHF1ZXJ5LmxpZmV0aW1lLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dOiBxdWVyeS50eXBlLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9TVEFURU1FTlRdOiBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKClcbiAgICAgICAgICAgICAgICAgICAgLmVuaGFuY2VkRGF0YWJhc2VSZXBvcnRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyBxdWVyeS5jb21tYW5kXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIC4uLnV0aWxzLmdldFBlZXJBdHRyaWJ1dGVzKGNsaWVudCwgc2VydmVyLCBxdWVyeSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrID0gYXBpLmNvbnRleHQuYmluZChjYWxsYmFja0NvbnRleHQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbnN1cmVXcmFwcGVkKG9iaiwgbWV0aG9kTmFtZSwgd3JhcHBlcikge1xuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkob2JqW21ldGhvZE5hbWVdKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG9iaiwgbWV0aG9kTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd3JhcChvYmosIG1ldGhvZE5hbWUsIHdyYXBwZXIpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWVtY2FjaGVkSW5zdHJ1bWVudGF0aW9uID0gTWVtY2FjaGVkSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZW1jYWNoZWRJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZW1jYWNoZWRJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLk1lbWNhY2hlZEluc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NRVRSSUNfREJfQ0xJRU5UX0NPTk5FQ1RJT05TX1VTQUdFID0gZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfTU9OR09EQiA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSBleHBvcnRzLkFUVFJfREJfU1lTVEVNID0gZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9IGV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT04gPSBleHBvcnRzLkFUVFJfREJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9NT05HT0RCX0NPTExFQ1RJT04gPSBleHBvcnRzLkFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkcgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5hZGRyZXNzYCwgYHNlcnZlci5wb3J0YCBhdHRyaWJ1dGVzIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgXCJTZXJ2ZXI9KGxvY2FsZGIpXFxcXHYxMS4wO0ludGVncmF0ZWQgU2VjdXJpdHk9dHJ1ZTtcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIGFuZCBgc2VydmVyLnBvcnRgLlxuICovXG5leHBvcnRzLkFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkcgPSAnZGIuY29ubmVjdGlvbl9zdHJpbmcnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLmNvbGxlY3Rpb24ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBcIm15dGFibGVcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuY29sbGVjdGlvbi5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX01PTkdPREJfQ09MTEVDVElPTiA9ICdkYi5tb25nb2RiLmNvbGxlY3Rpb24nO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLm5hbWVzcGFjZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBjdXN0b21lcnNcbiAqIEBleGFtcGxlIG1haW5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLm5hbWVzcGFjZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9OQU1FID0gJ2RiLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLm9wZXJhdGlvbi5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGZpbmRBbmRNb2RpZnlcbiAqIEBleGFtcGxlIEhNU0VUXG4gKiBAZXhhbXBsZSBTRUxFQ1RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLm9wZXJhdGlvbi5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX09QRVJBVElPTiA9ICdkYi5vcGVyYXRpb24nO1xuLyoqXG4gKiBUaGUgZGF0YWJhc2Ugc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIFNFTEVDVCAqIEZST00gd3VzZXJfdGFibGVcbiAqIEBleGFtcGxlIFNFVCBteWtleSBcIld1VmFsdWVcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIucXVlcnkudGV4dGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSAnZGIuc3RhdGVtZW50Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5zeXN0ZW0ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnN5c3RlbS5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9ICdkYi5zeXN0ZW0nO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIGV4YW1wbGUuY29tXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSAnbmV0LnBlZXIubmFtZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLnBvcnRgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5wb3J0YCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgODA4MFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLnBvcnRgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5wb3J0YCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gJ25ldC5wZWVyLnBvcnQnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwibW9uZ29kYlwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfU1lTVEVNfS5cbiAqXG4gKiBNb25nb0RCXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfTU9OR09EQiA9ICdtb25nb2RiJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5jbGllbnQuY29ubmVjdGlvbi5jb3VudGAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0cmljIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLmNsaWVudC5jb25uZWN0aW9uLmNvdW50YC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfREJfQ0xJRU5UX0NPTk5FQ1RJT05TX1VTQUdFID0gJ2RiLmNsaWVudC5jb25uZWN0aW9ucy51c2FnZSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb25nb2RiQ29tbWFuZFR5cGUgPSB2b2lkIDA7XG52YXIgTW9uZ29kYkNvbW1hbmRUeXBlO1xuKGZ1bmN0aW9uIChNb25nb2RiQ29tbWFuZFR5cGUpIHtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJDUkVBVEVfSU5ERVhFU1wiXSA9IFwiY3JlYXRlSW5kZXhlc1wiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIkZJTkRfQU5EX01PRElGWVwiXSA9IFwiZmluZEFuZE1vZGlmeVwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIklTX01BU1RFUlwiXSA9IFwiaXNNYXN0ZXJcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJDT1VOVFwiXSA9IFwiY291bnRcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJBR0dSRUdBVEVcIl0gPSBcImFnZ3JlZ2F0ZVwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIlVOS05PV05cIl0gPSBcInVua25vd25cIjtcbn0pKE1vbmdvZGJDb21tYW5kVHlwZSA9IGV4cG9ydHMuTW9uZ29kYkNvbW1hbmRUeXBlIHx8IChleHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNjAuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbmdvREJJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge1xuICAgIHJlcXVpcmVQYXJlbnRTcGFuOiB0cnVlLFxufTtcbi8qKiBtb25nb2RiIGluc3RydW1lbnRhdGlvbiBwbHVnaW4gZm9yIE9wZW5UZWxlbWV0cnkgKi9cbmNsYXNzIE1vbmdvREJJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfSk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoeyAuLi5ERUZBVUxUX0NPTkZJRywgLi4uY29uZmlnIH0pO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zVXNhZ2UgPSB0aGlzLm1ldGVyLmNyZWF0ZVVwRG93bkNvdW50ZXIoc2VtY29udl8xLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gc3RhdGUgZGVzY3JpYmVkIGJ5IHRoZSBzdGF0ZSBhdHRyaWJ1dGUuJyxcbiAgICAgICAgICAgIHVuaXQ6ICd7Y29ubmVjdGlvbn0nLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgeyB2M1BhdGNoQ29ubmVjdGlvbjogdjNQYXRjaENvbm5lY3Rpb24sIHYzVW5wYXRjaENvbm5lY3Rpb246IHYzVW5wYXRjaENvbm5lY3Rpb24sIH0gPSB0aGlzLl9nZXRWM0Nvbm5lY3Rpb25QYXRjaGVzKCk7XG4gICAgICAgIGNvbnN0IHsgdjRQYXRjaENvbm5lY3QsIHY0VW5wYXRjaENvbm5lY3QgfSA9IHRoaXMuX2dldFY0Q29ubmVjdFBhdGNoZXMoKTtcbiAgICAgICAgY29uc3QgeyB2NFBhdGNoQ29ubmVjdGlvbkNhbGxiYWNrLCB2NFBhdGNoQ29ubmVjdGlvblByb21pc2UsIHY0VW5wYXRjaENvbm5lY3Rpb24sIH0gPSB0aGlzLl9nZXRWNENvbm5lY3Rpb25QYXRjaGVzKCk7XG4gICAgICAgIGNvbnN0IHsgdjRQYXRjaENvbm5lY3Rpb25Qb29sLCB2NFVucGF0Y2hDb25uZWN0aW9uUG9vbCB9ID0gdGhpcy5fZ2V0VjRDb25uZWN0aW9uUG9vbFBhdGNoZXMoKTtcbiAgICAgICAgY29uc3QgeyB2NFBhdGNoU2Vzc2lvbnMsIHY0VW5wYXRjaFNlc3Npb25zIH0gPSB0aGlzLl9nZXRWNFNlc3Npb25zUGF0Y2hlcygpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdtb25nb2RiJywgWyc+PTMuMy4wIDw0J10sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdtb25nb2RiL2xpYi9jb3JlL3dpcmVwcm90b2NvbC9pbmRleC5qcycsIFsnPj0zLjMuMCA8NCddLCB2M1BhdGNoQ29ubmVjdGlvbiwgdjNVbnBhdGNoQ29ubmVjdGlvbiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignbW9uZ29kYicsIFsnPj00LjAuMCA8NyddLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW1xuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvY21hcC9jb25uZWN0aW9uLmpzJywgWyc+PTQuMC4wIDw2LjQnXSwgdjRQYXRjaENvbm5lY3Rpb25DYWxsYmFjaywgdjRVbnBhdGNoQ29ubmVjdGlvbiksXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdtb25nb2RiL2xpYi9jbWFwL2Nvbm5lY3Rpb24uanMnLCBbJz49Ni40LjAgPDcnXSwgdjRQYXRjaENvbm5lY3Rpb25Qcm9taXNlLCB2NFVucGF0Y2hDb25uZWN0aW9uKSxcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ21vbmdvZGIvbGliL2NtYXAvY29ubmVjdGlvbl9wb29sLmpzJywgWyc+PTQuMC4wIDw2LjQnXSwgdjRQYXRjaENvbm5lY3Rpb25Qb29sLCB2NFVucGF0Y2hDb25uZWN0aW9uUG9vbCksXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdtb25nb2RiL2xpYi9jbWFwL2Nvbm5lY3QuanMnLCBbJz49NC4wLjAgPDcnXSwgdjRQYXRjaENvbm5lY3QsIHY0VW5wYXRjaENvbm5lY3QpLFxuICAgICAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnbW9uZ29kYi9saWIvc2Vzc2lvbnMuanMnLCBbJz49NC4wLjAgPDcnXSwgdjRQYXRjaFNlc3Npb25zLCB2NFVucGF0Y2hTZXNzaW9ucyksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX2dldFYzQ29ubmVjdGlvblBhdGNoZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2M1BhdGNoQ29ubmVjdGlvbjogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBpbnNlcnQgb3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuaW5zZXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2luc2VydCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdpbnNlcnQnLCB0aGlzLl9nZXRWM1BhdGNoT3BlcmF0aW9uKCdpbnNlcnQnKSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggcmVtb3ZlIG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnJlbW92ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdyZW1vdmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAncmVtb3ZlJywgdGhpcy5fZ2V0VjNQYXRjaE9wZXJhdGlvbigncmVtb3ZlJykpO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIHVwZGF0ZSBvcGVyYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy51cGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAndXBkYXRlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3VwZGF0ZScsIHRoaXMuX2dldFYzUGF0Y2hPcGVyYXRpb24oJ3VwZGF0ZScpKTtcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBvdGhlciBjb21tYW5kXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuY29tbWFuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdjb21tYW5kJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ2NvbW1hbmQnLCB0aGlzLl9nZXRWM1BhdGNoQ29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICAvLyBwYXRjaCBxdWVyeVxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3F1ZXJ5Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cywgJ3F1ZXJ5JywgdGhpcy5fZ2V0VjNQYXRjaEZpbmQoKSk7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggZ2V0IG1vcmUgb3BlcmF0aW9uIG9uIGN1cnNvclxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmdldE1vcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnZ2V0TW9yZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdnZXRNb3JlJywgdGhpcy5fZ2V0VjNQYXRjaEN1cnNvcigpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2M1VucGF0Y2hDb25uZWN0aW9uOiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2luc2VydCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAncmVtb3ZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICd1cGRhdGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NvbW1hbmQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3F1ZXJ5Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdnZXRNb3JlJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjRTZXNzaW9uc1BhdGNoZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2NFBhdGNoU2Vzc2lvbnM6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuYWNxdWlyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdhY3F1aXJlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5TZXJ2ZXJTZXNzaW9uUG9vbC5wcm90b3R5cGUsICdhY3F1aXJlJywgdGhpcy5fZ2V0VjRBY3F1aXJlQ29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5yZWxlYXNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ3JlbGVhc2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlNlcnZlclNlc3Npb25Qb29sLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB0aGlzLl9nZXRWNFJlbGVhc2VDb21tYW5kKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHY0VW5wYXRjaFNlc3Npb25zOiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5hY3F1aXJlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2FjcXVpcmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMucmVsZWFzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdyZWxlYXNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFY0QWNxdWlyZUNvbW1hbmQoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaEFjcXVpcmUoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgblNlc3Npb25zQmVmb3JlQWNxdWlyZSA9IHRoaXMuc2Vzc2lvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBvcmlnaW5hbC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5TZXNzaW9uc0FmdGVyQWNxdWlyZSA9IHRoaXMuc2Vzc2lvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChuU2Vzc2lvbnNCZWZvcmVBY3F1aXJlID09PSBuU2Vzc2lvbnNBZnRlckFjcXVpcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9ubyBzZXNzaW9uIGluIHRoZSBwb29sLiBhIG5ldyBzZXNzaW9uIHdhcyBjcmVhdGVkIGFuZCB1c2VkXG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fY29ubmVjdGlvbnNVc2FnZS5hZGQoMSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICd1c2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwb29sLm5hbWUnOiBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoblNlc3Npb25zQmVmb3JlQWNxdWlyZSAtIDEgPT09IG5TZXNzaW9uc0FmdGVyQWNxdWlyZSkge1xuICAgICAgICAgICAgICAgICAgICAvL2Egc2Vzc2lvbiB3YXMgYWxyZWFkeSBpbiB0aGUgcG9vbC4gcmVtb3ZlIGl0IGZyb20gdGhlIHBvb2wgYW5kIHVzZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uZWN0aW9uc1VzYWdlLmFkZCgtMSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwb29sLm5hbWUnOiBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uZWN0aW9uc1VzYWdlLmFkZCgxLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ3VzZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvb2wubmFtZSc6IGluc3RydW1lbnRhdGlvbi5fcG9vbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNFJlbGVhc2VDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hSZWxlYXNlKHNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbWRQcm9taXNlID0gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2Nvbm5lY3Rpb25zVXNhZ2UuYWRkKC0xLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAndXNlZCcsXG4gICAgICAgICAgICAgICAgICAgICdwb29sLm5hbWUnOiBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fY29ubmVjdGlvbnNVc2FnZS5hZGQoMSwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgICAgICAncG9vbC5uYW1lJzogaW5zdHJ1bWVudGF0aW9uLl9wb29sTmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY21kUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNENvbm5lY3Rpb25Qb29sUGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0aW9uUG9vbDogKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb29sUHJvdG90eXBlID0gbW9kdWxlRXhwb3J0cy5Db25uZWN0aW9uUG9vbC5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHBvb2xQcm90b3R5cGUuY2hlY2tPdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChwb29sUHJvdG90eXBlLCAnY2hlY2tPdXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChwb29sUHJvdG90eXBlLCAnY2hlY2tPdXQnLCB0aGlzLl9nZXRWNENvbm5lY3Rpb25Qb29sQ2hlY2tPdXQoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdjRVbnBhdGNoQ29ubmVjdGlvblBvb2w6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb25Qb29sLnByb3RvdHlwZSwgJ2NoZWNrT3V0Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0VjRDb25uZWN0UGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0OiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLmNvbm5lY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnY29ubmVjdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjb25uZWN0JywgdGhpcy5fZ2V0VjRDb25uZWN0Q29tbWFuZCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFVucGF0Y2hDb25uZWN0OiAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFRoaXMgcGF0Y2ggd2lsbCBiZWNvbWUgdW5uZWNlc3Nhcnkgb25jZVxuICAgIC8vIGh0dHBzOi8vamlyYS5tb25nb2RiLm9yZy9icm93c2UvTk9ERS01NjM5IGlzIGRvbmUuXG4gICAgX2dldFY0Q29ubmVjdGlvblBvb2xDaGVja091dCgpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDaGVja291dChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNENvbm5lY3RDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZENvbm5lY3Qob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBmcm9tIHY2LjQgYGNvbm5lY3RgIG1ldGhvZCBvbmx5IGFjY2VwdHMgYW4gb3B0aW9ucyBwYXJhbSBhbmQgcmV0dXJucyBhIHByb21pc2VcbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKCkgPT4gaW5zdHJ1bWVudGF0aW9uLnNldFBvb2xOYW1lKG9wdGlvbnMpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaGFuZGxlciBpcyBzZXQgdG8gcGFzcyB0aGUgbGludCBydWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFYXJsaWVyIHZlcnNpb25zIGV4cGVjdHMgYSBjYWxsYmFjayBwYXJhbSBhbmQgcmV0dXJuIHZvaWRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyLCBjb25uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIWNvbm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgY29ubik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNldFBvb2xOYW1lKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIGNvbm4pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBfZ2V0VjRDb25uZWN0aW9uUGF0Y2hlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY0UGF0Y2hDb25uZWN0aW9uQ2FsbGJhY2s6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ29ubmVjdGlvbi5wcm90b3R5cGUsICdjb21tYW5kJywgdGhpcy5fZ2V0VjRQYXRjaENvbW1hbmRDYWxsYmFjaygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2NFBhdGNoQ29ubmVjdGlvblByb21pc2U6IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggaW5zZXJ0IG9wZXJhdGlvblxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLmNvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ29ubmVjdGlvbi5wcm90b3R5cGUsICdjb21tYW5kJywgdGhpcy5fZ2V0VjRQYXRjaENvbW1hbmRQcm9taXNlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHY0VW5wYXRjaENvbm5lY3Rpb246IChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlLCAnY29tbWFuZCcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc3BhbnMgZm9yIGNvbW1vbiBvcGVyYXRpb25zICovXG4gICAgX2dldFYzUGF0Y2hPcGVyYXRpb24ob3BlcmF0aW9uTmFtZSkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgb3BzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMgOiBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAoc2tpcEluc3RydW1lbnRhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0SGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3BzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIG9wcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBvcHMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oYG1vbmdvZGIuJHtvcGVyYXRpb25OYW1lfWAsIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fcG9wdWxhdGVWM0F0dHJpYnV0ZXMoc3BhbiwgbnMsIHNlcnZlciwgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBvcHNbMF0sIG9wZXJhdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGluc3RydW1lbnRhdGlvbi5fcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHdoZW4gb3B0aW9ucyBpcyB0aGUgY2FsbGJhY2sgdG8gc2VuZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgYXJnc1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBvcHMsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBvcHMsIG9wdGlvbnMsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc3BhbnMgZm9yIGNvbW1hbmQgb3BlcmF0aW9uICovXG4gICAgX2dldFYzUGF0Y2hDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgY21kLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMgOiBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAoc2tpcEluc3RydW1lbnRhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0SGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY21kICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGNtZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kVHlwZSA9IE1vbmdvREJJbnN0cnVtZW50YXRpb24uX2dldENvbW1hbmRUeXBlKGNtZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGNvbW1hbmRUeXBlID09PSBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5VTktOT1dOID8gJ2NvbW1hbmQnIDogY29tbWFuZFR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGluc3RydW1lbnRhdGlvbi50cmFjZXIuc3RhcnRTcGFuKGBtb25nb2RiLiR7dHlwZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSBjb21tYW5kVHlwZSA9PT0gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuVU5LTk9XTiA/IHVuZGVmaW5lZCA6IGNvbW1hbmRUeXBlO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fcG9wdWxhdGVWM0F0dHJpYnV0ZXMoc3BhbiwgbnMsIHNlcnZlciwgY21kLCBvcGVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGluc3RydW1lbnRhdGlvbi5fcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHdoZW4gb3B0aW9ucyBpcyB0aGUgY2FsbGJhY2sgdG8gc2VuZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgYXJnc1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIG9wdGlvbnMsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIENyZWF0ZXMgc3BhbnMgZm9yIGNvbW1hbmQgb3BlcmF0aW9uICovXG4gICAgX2dldFY0UGF0Y2hDb21tYW5kQ2FsbGJhY2soKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkVjRTZXJ2ZXJDb21tYW5kKG5zLCBjbWQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraXBJbnN0cnVtZW50YXRpb24gPSBpbnN0cnVtZW50YXRpb24uX2NoZWNrU2tpcEluc3RydW1lbnRhdGlvbihjdXJyZW50U3Bhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0SGFuZGxlciA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRUeXBlID0gT2JqZWN0LmtleXMoY21kKVswXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNtZCAhPT0gJ29iamVjdCcgfHwgY21kLmlzbWFzdGVyIHx8IGNtZC5oZWxsbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBucywgY21kLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzcGFuID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICghc2tpcEluc3RydW1lbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oYG1vbmdvZGIuJHtjb21tYW5kVHlwZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3BvcHVsYXRlVjRBdHRyaWJ1dGVzKHNwYW4sIHRoaXMsIG5zLCBjbWQsIGNvbW1hbmRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZENhbGxiYWNrID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEVuZChzcGFuLCByZXN1bHRIYW5kbGVyLCB0aGlzLmlkLCBjb21tYW5kVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgbnMsIGNtZCwgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRWNFBhdGNoQ29tbWFuZFByb21pc2UoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkVjRTZXJ2ZXJDb21tYW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbnMsIGNtZF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRUeXBlID0gT2JqZWN0LmtleXMoY21kKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY21kICE9PSAnb2JqZWN0JyB8fCBjbWQuaXNtYXN0ZXIgfHwgY21kLmhlbGxvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNwYW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCFza2lwSW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbihgbW9uZ29kYi4ke2NvbW1hbmRUeXBlfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fcG9wdWxhdGVWNEF0dHJpYnV0ZXMoc3BhbiwgdGhpcywgbnMsIGNtZCwgY29tbWFuZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkQ2FsbGJhY2sgPSBpbnN0cnVtZW50YXRpb24uX3BhdGNoRW5kKHNwYW4sIHJlc3VsdEhhbmRsZXIsIHRoaXMuaWQsIGNvbW1hbmRUeXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbigocmVzKSA9PiBwYXRjaGVkQ2FsbGJhY2sobnVsbCwgcmVzKSwgKGVycikgPT4gcGF0Y2hlZENhbGxiYWNrKGVycikpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogQ3JlYXRlcyBzcGFucyBmb3IgZmluZCBvcGVyYXRpb24gKi9cbiAgICBfZ2V0VjNQYXRjaEZpbmQoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkU2VydmVyQ29tbWFuZChzZXJ2ZXIsIG5zLCBjbWQsIGN1cnNvclN0YXRlLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwSW5zdHJ1bWVudGF0aW9uID0gaW5zdHJ1bWVudGF0aW9uLl9jaGVja1NraXBJbnN0cnVtZW50YXRpb24oY3VycmVudFNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhhbmRsZXIgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMgOiBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBpZiAoc2tpcEluc3RydW1lbnRhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0SGFuZGxlciAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY21kICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGNtZCwgY3Vyc29yU3RhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY21kLCBjdXJzb3JTdGF0ZSwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBpbnN0cnVtZW50YXRpb24udHJhY2VyLnN0YXJ0U3BhbignbW9uZ29kYi5maW5kJywge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9wb3B1bGF0ZVYzQXR0cmlidXRlcyhzcGFuLCBucywgc2VydmVyLCBjbWQsICdmaW5kJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZENhbGxiYWNrID0gaW5zdHJ1bWVudGF0aW9uLl9wYXRjaEVuZChzcGFuLCByZXN1bHRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgd2hlbiBvcHRpb25zIGlzIHRoZSBjYWxsYmFjayB0byBzZW5kIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmdzXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGNtZCwgY3Vyc29yU3RhdGUsIHBhdGNoZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjbWQsIGN1cnNvclN0YXRlLCBvcHRpb25zLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBDcmVhdGVzIHNwYW5zIGZvciBmaW5kIG9wZXJhdGlvbiAqL1xuICAgIF9nZXRWM1BhdGNoQ3Vyc29yKCkge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFNlcnZlckNvbW1hbmQoc2VydmVyLCBucywgY3Vyc29yU3RhdGUsIGJhdGNoU2l6ZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2tpcEluc3RydW1lbnRhdGlvbiA9IGluc3RydW1lbnRhdGlvbi5fY2hlY2tTa2lwSW5zdHJ1bWVudGF0aW9uKGN1cnJlbnRTcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIYW5kbGVyID0gdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zIDogY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBJbnN0cnVtZW50YXRpb24gfHwgdHlwZW9mIHJlc3VsdEhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjdXJzb3JTdGF0ZSwgYmF0Y2hTaXplLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHNlcnZlciwgbnMsIGN1cnNvclN0YXRlLCBiYXRjaFNpemUsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oJ21vbmdvZGIuZ2V0TW9yZScsIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fcG9wdWxhdGVWM0F0dHJpYnV0ZXMoc3BhbiwgbnMsIHNlcnZlciwgY3Vyc29yU3RhdGUuY21kLCAnZ2V0TW9yZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRDYWxsYmFjayA9IGluc3RydW1lbnRhdGlvbi5fcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHdoZW4gb3B0aW9ucyBpcyB0aGUgY2FsbGJhY2sgdG8gc2VuZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgYXJnc1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBzZXJ2ZXIsIG5zLCBjdXJzb3JTdGF0ZSwgYmF0Y2hTaXplLCBwYXRjaGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgc2VydmVyLCBucywgY3Vyc29yU3RhdGUsIGJhdGNoU2l6ZSwgb3B0aW9ucywgcGF0Y2hlZENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG1vbmdvZGIgY29tbWFuZCB0eXBlIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY29tbWFuZCBJbnRlcm5hbCBtb25nb2RiIGNvbW1hbmQgb2JqZWN0XG4gICAgICovXG4gICAgc3RhdGljIF9nZXRDb21tYW5kVHlwZShjb21tYW5kKSB7XG4gICAgICAgIGlmIChjb21tYW5kLmNyZWF0ZUluZGV4ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLkNSRUFURV9JTkRFWEVTO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQuZmluZGFuZG1vZGlmeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuRklORF9BTkRfTU9ESUZZO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbW1hbmQuaXNtYXN0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLklTX01BU1RFUjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZS5DT1VOVDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kLmFnZ3JlZ2F0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfdHlwZXNfMS5Nb25nb2RiQ29tbWFuZFR5cGUuQUdHUkVHQVRFO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3R5cGVzXzEuTW9uZ29kYkNvbW1hbmRUeXBlLlVOS05PV047XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUG9wdWxhdGUgc3BhbidzIGF0dHJpYnV0ZXMgYnkgZmV0Y2hpbmcgcmVsYXRlZCBtZXRhZGF0YSBmcm9tIHRoZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHNwYW4gc3BhbiB0byBhZGQgYXR0cmlidXRlcyB0b1xuICAgICAqIEBwYXJhbSBjb25uZWN0aW9uQ3R4IG1vbmdvZGIgaW50ZXJuYWwgY29ubmVjdGlvbiBjb250ZXh0XG4gICAgICogQHBhcmFtIG5zIG1vbmdvZGIgbmFtZXNwYWNlXG4gICAgICogQHBhcmFtIGNvbW1hbmQgbW9uZ29kYiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1hbmRcbiAgICAgKi9cbiAgICBfcG9wdWxhdGVWNEF0dHJpYnV0ZXMoc3BhbiwgY29ubmVjdGlvbkN0eCwgbnMsIGNvbW1hbmQsIG9wZXJhdGlvbikge1xuICAgICAgICBsZXQgaG9zdCwgcG9ydDtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25DdHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RQYXJ0cyA9IHR5cGVvZiBjb25uZWN0aW9uQ3R4LmFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjb25uZWN0aW9uQ3R4LmFkZHJlc3Muc3BsaXQoJzonKVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBpZiAoaG9zdFBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0UGFydHNbMF07XG4gICAgICAgICAgICAgICAgcG9ydCA9IGhvc3RQYXJ0c1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjYXB0dXJlIHBhcmFtZXRlcnMgd2l0aGluIHRoZSBxdWVyeSBhcyB3ZWxsIGlmIGVuaGFuY2VkRGF0YWJhc2VSZXBvcnRpbmcgaXMgZW5hYmxlZC5cbiAgICAgICAgbGV0IGNvbW1hbmRPYmo7XG4gICAgICAgIGlmIChjb21tYW5kPy5kb2N1bWVudHMgJiYgY29tbWFuZC5kb2N1bWVudHNbMF0pIHtcbiAgICAgICAgICAgIGNvbW1hbmRPYmogPSBjb21tYW5kLmRvY3VtZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21tYW5kPy5jdXJzb3JzKSB7XG4gICAgICAgICAgICBjb21tYW5kT2JqID0gY29tbWFuZC5jdXJzb3JzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tbWFuZE9iaiA9IGNvbW1hbmQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWRkQWxsU3BhbkF0dHJpYnV0ZXMoc3BhbiwgbnMuZGIsIG5zLmNvbGxlY3Rpb24sIGhvc3QsIHBvcnQsIGNvbW1hbmRPYmosIG9wZXJhdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBvcHVsYXRlIHNwYW4ncyBhdHRyaWJ1dGVzIGJ5IGZldGNoaW5nIHJlbGF0ZWQgbWV0YWRhdGEgZnJvbSB0aGUgY29udGV4dFxuICAgICAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gYWRkIGF0dHJpYnV0ZXMgdG9cbiAgICAgKiBAcGFyYW0gbnMgbW9uZ29kYiBuYW1lc3BhY2VcbiAgICAgKiBAcGFyYW0gdG9wb2xvZ3kgbW9uZ29kYiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmV0d29yayB0b3BvbG9neVxuICAgICAqIEBwYXJhbSBjb21tYW5kIG1vbmdvZGIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBjb21tYW5kXG4gICAgICovXG4gICAgX3BvcHVsYXRlVjNBdHRyaWJ1dGVzKHNwYW4sIG5zLCB0b3BvbG9neSwgY29tbWFuZCwgb3BlcmF0aW9uKSB7XG4gICAgICAgIC8vIGFkZCBuZXR3b3JrIGF0dHJpYnV0ZXMgdG8gZGV0ZXJtaW5lIHRoZSByZW1vdGUgc2VydmVyXG4gICAgICAgIGxldCBob3N0O1xuICAgICAgICBsZXQgcG9ydDtcbiAgICAgICAgaWYgKHRvcG9sb2d5ICYmIHRvcG9sb2d5LnMpIHtcbiAgICAgICAgICAgIGhvc3QgPSB0b3BvbG9neS5zLm9wdGlvbnM/Lmhvc3QgPz8gdG9wb2xvZ3kucy5ob3N0O1xuICAgICAgICAgICAgcG9ydCA9ICh0b3BvbG9neS5zLm9wdGlvbnM/LnBvcnQgPz8gdG9wb2xvZ3kucy5wb3J0KT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChob3N0ID09IG51bGwgfHwgcG9ydCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHRvcG9sb2d5LmRlc2NyaXB0aW9uPy5hZGRyZXNzO1xuICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NTZWdtZW50cyA9IGFkZHJlc3Muc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICAgICAgaG9zdCA9IGFkZHJlc3NTZWdtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGFkZHJlc3NTZWdtZW50c1sxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIG5hbWVzcGFjZSBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBkYXRhYmFzZSBuYW1lIGFuZCB0aGUgbmFtZSBvZiB0aGVcbiAgICAgICAgLy8gY29sbGVjdGlvbiBvciBpbmRleCwgbGlrZSBzbzogW2RhdGFiYXNlLW5hbWVdLltjb2xsZWN0aW9uLW9yLWluZGV4LW5hbWVdLlxuICAgICAgICAvLyBJdCBjb3VsZCBiZSBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBNb25nb0RCTmFtZXNwYWNlLCBhcyBzdWNoIHdlXG4gICAgICAgIC8vIGFsd2F5cyBjb2VyY2UgdG8gYSBzdHJpbmcgdG8gZXh0cmFjdCBkYiBhbmQgY29sbGVjdGlvbi5cbiAgICAgICAgY29uc3QgW2RiTmFtZSwgZGJDb2xsZWN0aW9uXSA9IG5zLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcbiAgICAgICAgLy8gY2FwdHVyZSBwYXJhbWV0ZXJzIHdpdGhpbiB0aGUgcXVlcnkgYXMgd2VsbCBpZiBlbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nIGlzIGVuYWJsZWQuXG4gICAgICAgIGNvbnN0IGNvbW1hbmRPYmogPSBjb21tYW5kPy5xdWVyeSA/PyBjb21tYW5kPy5xID8/IGNvbW1hbmQ7XG4gICAgICAgIHRoaXMuX2FkZEFsbFNwYW5BdHRyaWJ1dGVzKHNwYW4sIGRiTmFtZSwgZGJDb2xsZWN0aW9uLCBob3N0LCBwb3J0LCBjb21tYW5kT2JqLCBvcGVyYXRpb24pO1xuICAgIH1cbiAgICBfYWRkQWxsU3BhbkF0dHJpYnV0ZXMoc3BhbiwgZGJOYW1lLCBkYkNvbGxlY3Rpb24sIGhvc3QsIHBvcnQsIGNvbW1hbmRPYmosIG9wZXJhdGlvbikge1xuICAgICAgICAvLyBhZGQgZGF0YWJhc2UgcmVsYXRlZCBhdHRyaWJ1dGVzXG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfU1lTVEVNXTogc2VtY29udl8xLkRCX1NZU1RFTV9WQUxVRV9NT05HT0RCLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX05BTUVdOiBkYk5hbWUsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfTU9OR09EQl9DT0xMRUNUSU9OXTogZGJDb2xsZWN0aW9uLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX09QRVJBVElPTl06IG9wZXJhdGlvbixcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklOR106IGBtb25nb2RiOi8vJHtob3N0fToke3BvcnR9LyR7ZGJOYW1lfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaG9zdCAmJiBwb3J0KSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FLCBob3N0KTtcbiAgICAgICAgICAgIGNvbnN0IHBvcnROdW1iZXIgPSBwYXJzZUludChwb3J0LCAxMCk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBvcnROdW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfUE9SVCwgcG9ydE51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb21tYW5kT2JqKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGRiU3RhdGVtZW50U2VyaWFsaXplcjogY29uZmlnRGJTdGF0ZW1lbnRTZXJpYWxpemVyIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBjb25zdCBkYlN0YXRlbWVudFNlcmlhbGl6ZXIgPSB0eXBlb2YgY29uZmlnRGJTdGF0ZW1lbnRTZXJpYWxpemVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGNvbmZpZ0RiU3RhdGVtZW50U2VyaWFsaXplclxuICAgICAgICAgICAgOiB0aGlzLl9kZWZhdWx0RGJTdGF0ZW1lbnRTZXJpYWxpemVyLmJpbmQodGhpcyk7XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IGRiU3RhdGVtZW50U2VyaWFsaXplcihjb21tYW5kT2JqKTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVCwgcXVlcnkpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZXJyb3IoJ0Vycm9yIHJ1bm5pbmcgZGJTdGF0ZW1lbnRTZXJpYWxpemVyIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG4gICAgX2dldERlZmF1bHREYlN0YXRlbWVudFJlcGxhY2VyKCkge1xuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgICAgcmV0dXJuIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gdW5kZWZpbmVkLCBib29sZWFuLCBudW1iZXIsIGJpZ2ludCwgc3RyaW5nLCBzeW1ib2wsIGZ1bmN0aW9uIHx8IG51bGxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8ICF2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJz8nO1xuICAgICAgICAgICAgLy8gb2JqZWN0cyAoaW5jbHVkaW5nIGFycmF5cylcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2RlZmF1bHREYlN0YXRlbWVudFNlcmlhbGl6ZXIoY29tbWFuZE9iaikge1xuICAgICAgICBjb25zdCB7IGVuaGFuY2VkRGF0YWJhc2VSZXBvcnRpbmcgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmIChlbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29tbWFuZE9iaik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbW1hbmRPYmosIHRoaXMuX2dldERlZmF1bHREYlN0YXRlbWVudFJlcGxhY2VyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgcmVzcG9uc2UgaG9vayBpbiBjYXNlIGl0IGlzIGRlZmluZWQuXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gYWRkIHRoZSByZXN1bHRzIHRvLlxuICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIGNvbW1hbmQgcmVzdWx0XG4gICAgICovXG4gICAgX2hhbmRsZUV4ZWN1dGlvblJlc3VsdChzcGFuLCByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZUhvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VIb29rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlSG9vayhzcGFuLCB7IGRhdGE6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCdFcnJvciBydW5uaW5nIHJlc3BvbnNlIGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuZHMgYSBjcmVhdGVkIHNwYW4uXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIGNyZWF0ZWQgc3BhbiB0byBlbmQuXG4gICAgICogQHBhcmFtIHJlc3VsdEhhbmRsZXIgQSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gY29ubmVjdGlvbklkOiBUaGUgY29ubmVjdGlvbiBJRCBvZiB0aGUgQ29tbWFuZCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBfcGF0Y2hFbmQoc3BhbiwgcmVzdWx0SGFuZGxlciwgY29ubmVjdGlvbklkLCBjb21tYW5kVHlwZSkge1xuICAgICAgICAvLyBtb25nb2RiIGlzIHVzaW5nIFwidGlja1wiIHdoZW4gY2FsbGluZyBhIGNhbGxiYWNrLCB0aGlzIHdheSB0aGUgY29udGV4dFxuICAgICAgICAvLyBpbiBmaW5hbCBjYWxsYmFjayAocmVzdWx0SGFuZGxlcikgaXMgbG9zdFxuICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRFbmQoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhcmdzWzBdO1xuICAgICAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBzcGFuPy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5faGFuZGxlRXhlY3V0aW9uUmVzdWx0KHNwYW4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKGFjdGl2ZUNvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFR5cGUgPT09ICdlbmRTZXNzaW9ucycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jb25uZWN0aW9uc1VzYWdlLmFkZCgtMSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwb29sLm5hbWUnOiBpbnN0cnVtZW50YXRpb24uX3Bvb2xOYW1lLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdEhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0UG9vbE5hbWUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBob3N0ID0gb3B0aW9ucy5ob3N0QWRkcmVzcz8uaG9zdDtcbiAgICAgICAgY29uc3QgcG9ydCA9IG9wdGlvbnMuaG9zdEFkZHJlc3M/LnBvcnQ7XG4gICAgICAgIGNvbnN0IGRhdGFiYXNlID0gb3B0aW9ucy5kYk5hbWU7XG4gICAgICAgIGNvbnN0IHBvb2xOYW1lID0gYG1vbmdvZGI6Ly8ke2hvc3R9OiR7cG9ydH0vJHtkYXRhYmFzZX1gO1xuICAgICAgICB0aGlzLl9wb29sTmFtZSA9IHBvb2xOYW1lO1xuICAgIH1cbiAgICBfY2hlY2tTa2lwSW5zdHJ1bWVudGF0aW9uKGN1cnJlbnRTcGFuKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVQYXJlbnRTcGFuID0gdGhpcy5nZXRDb25maWcoKS5yZXF1aXJlUGFyZW50U3BhbjtcbiAgICAgICAgY29uc3QgaGFzTm9QYXJlbnRTcGFuID0gY3VycmVudFNwYW4gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVQYXJlbnRTcGFuID09PSB0cnVlICYmIGhhc05vUGFyZW50U3BhbjtcbiAgICB9XG59XG5leHBvcnRzLk1vbmdvREJJbnN0cnVtZW50YXRpb24gPSBNb25nb0RCSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb25nb2RiQ29tbWFuZFR5cGUgPSB2b2lkIDA7XG52YXIgTW9uZ29kYkNvbW1hbmRUeXBlO1xuKGZ1bmN0aW9uIChNb25nb2RiQ29tbWFuZFR5cGUpIHtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJDUkVBVEVfSU5ERVhFU1wiXSA9IFwiY3JlYXRlSW5kZXhlc1wiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIkZJTkRfQU5EX01PRElGWVwiXSA9IFwiZmluZEFuZE1vZGlmeVwiO1xuICAgIE1vbmdvZGJDb21tYW5kVHlwZVtcIklTX01BU1RFUlwiXSA9IFwiaXNNYXN0ZXJcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJDT1VOVFwiXSA9IFwiY291bnRcIjtcbiAgICBNb25nb2RiQ29tbWFuZFR5cGVbXCJVTktOT1dOXCJdID0gXCJ1bmtub3duXCI7XG59KShNb25nb2RiQ29tbWFuZFR5cGUgPSBleHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSB8fCAoZXhwb3J0cy5Nb25nb2RiQ29tbWFuZFR5cGUgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1vbmdvZGJDb21tYW5kVHlwZSA9IGV4cG9ydHMuTW9uZ29EQkluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1vbmdvREJJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLk1vbmdvREJJbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTW9uZ29kYkNvbW1hbmRUeXBlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18xLk1vbmdvZGJDb21tYW5kVHlwZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9VU0VSID0gZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSBleHBvcnRzLkFUVFJfREJfT1BFUkFUSU9OID0gZXhwb3J0cy5BVFRSX0RCX05BTUUgPSBleHBvcnRzLkFUVFJfREJfTU9OR09EQl9DT0xMRUNUSU9OID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5jb2xsZWN0aW9uLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgXCJteXRhYmxlXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLmNvbGxlY3Rpb24ubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9NT05HT0RCX0NPTExFQ1RJT04gPSAnZGIubW9uZ29kYi5jb2xsZWN0aW9uJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5uYW1lc3BhY2VgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgY3VzdG9tZXJzXG4gKiBAZXhhbXBsZSBtYWluXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5uYW1lc3BhY2VgLlxuICovXG5leHBvcnRzLkFUVFJfREJfTkFNRSA9ICdkYi5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5vcGVyYXRpb24ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBmaW5kQW5kTW9kaWZ5XG4gKiBAZXhhbXBsZSBITVNFVFxuICogQGV4YW1wbGUgU0VMRUNUXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5vcGVyYXRpb24ubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT04gPSAnZGIub3BlcmF0aW9uJztcbi8qKlxuICogVGhlIGRhdGFiYXNlIHN0YXRlbWVudCBiZWluZyBleGVjdXRlZC5cbiAqXG4gKiBAZXhhbXBsZSBTRUxFQ1QgKiBGUk9NIHd1c2VyX3RhYmxlXG4gKiBAZXhhbXBsZSBTRVQgbXlrZXkgXCJXdVZhbHVlXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnF1ZXJ5LnRleHRgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gJ2RiLnN0YXRlbWVudCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIuc3lzdGVtLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5zeXN0ZW0ubmFtZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSAnZGIuc3lzdGVtJztcbi8qKlxuICogRGVwcmVjYXRlZCwgbm8gcmVwbGFjZW1lbnQgYXQgdGhpcyB0aW1lLlxuICpcbiAqIEBleGFtcGxlIHJlYWRvbmx5X3VzZXJcbiAqIEBleGFtcGxlIHJlcG9ydGluZ191c2VyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQsIG5vIHJlcGxhY2VtZW50IGF0IHRoaXMgdGltZS5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1VTRVIgPSAnZGIudXNlcic7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhhbmRsZUNhbGxiYWNrUmVzcG9uc2UgPSBleHBvcnRzLmhhbmRsZVByb21pc2VSZXNwb25zZSA9IGV4cG9ydHMuZ2V0QXR0cmlidXRlc0Zyb21Db2xsZWN0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVzRnJvbUNvbGxlY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9NT05HT0RCX0NPTExFQ1RJT05dOiBjb2xsZWN0aW9uLm5hbWUsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9OQU1FXTogY29sbGVjdGlvbi5jb25uLm5hbWUsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9VU0VSXTogY29sbGVjdGlvbi5jb25uLnVzZXIsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogY29sbGVjdGlvbi5jb25uLmhvc3QsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogY29sbGVjdGlvbi5jb25uLnBvcnQsXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0QXR0cmlidXRlc0Zyb21Db2xsZWN0aW9uID0gZ2V0QXR0cmlidXRlc0Zyb21Db2xsZWN0aW9uO1xuZnVuY3Rpb24gc2V0RXJyb3JTdGF0dXMoc3BhbiwgZXJyb3IgPSB7fSkge1xuICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgJHtlcnJvci5tZXNzYWdlfSAke2Vycm9yLmNvZGUgPyBgXFxuTW9uZ29vc2UgRXJyb3IgQ29kZTogJHtlcnJvci5jb2RlfWAgOiAnJ31gLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gYXBwbHlSZXNwb25zZUhvb2soc3BhbiwgcmVzcG9uc2UsIHJlc3BvbnNlSG9vaywgbW9kdWxlVmVyc2lvbiA9IHVuZGVmaW5lZCkge1xuICAgIGlmICghcmVzcG9uc2VIb29rKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHJlc3BvbnNlSG9vayhzcGFuLCB7IG1vZHVsZVZlcnNpb24sIHJlc3BvbnNlIH0pLCBlID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ21vbmdvb3NlIGluc3RydW1lbnRhdGlvbjogcmVzcG9uc2VIb29rIGVycm9yJywgZSk7XG4gICAgICAgIH1cbiAgICB9LCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVByb21pc2VSZXNwb25zZShleGVjUmVzcG9uc2UsIHNwYW4sIHJlc3BvbnNlSG9vaywgbW9kdWxlVmVyc2lvbiA9IHVuZGVmaW5lZCkge1xuICAgIGlmICghKGV4ZWNSZXNwb25zZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICAgIGFwcGx5UmVzcG9uc2VIb29rKHNwYW4sIGV4ZWNSZXNwb25zZSwgcmVzcG9uc2VIb29rLCBtb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgcmV0dXJuIGV4ZWNSZXNwb25zZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4ZWNSZXNwb25zZVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGFwcGx5UmVzcG9uc2VIb29rKHNwYW4sIHJlc3BvbnNlLCByZXNwb25zZUhvb2ssIG1vZHVsZVZlcnNpb24pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHNldEVycm9yU3RhdHVzKHNwYW4sIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9KVxuICAgICAgICAuZmluYWxseSgoKSA9PiBzcGFuLmVuZCgpKTtcbn1cbmV4cG9ydHMuaGFuZGxlUHJvbWlzZVJlc3BvbnNlID0gaGFuZGxlUHJvbWlzZVJlc3BvbnNlO1xuZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2tSZXNwb25zZShjYWxsYmFjaywgZXhlYywgb3JpZ2luYWxUaGlzLCBzcGFuLCBhcmdzLCByZXNwb25zZUhvb2ssIG1vZHVsZVZlcnNpb24gPSB1bmRlZmluZWQpIHtcbiAgICBsZXQgY2FsbGJhY2tBcmd1bWVudEluZGV4ID0gMDtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY2FsbGJhY2tBcmd1bWVudEluZGV4ID0gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgY2FsbGJhY2tBcmd1bWVudEluZGV4ID0gMjtcbiAgICB9XG4gICAgYXJnc1tjYWxsYmFja0FyZ3VtZW50SW5kZXhdID0gKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgc2V0RXJyb3JTdGF0dXMoc3BhbiwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5UmVzcG9uc2VIb29rKHNwYW4sIHJlc3BvbnNlLCByZXNwb25zZUhvb2ssIG1vZHVsZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHJldHVybiBleGVjLmFwcGx5KG9yaWdpbmFsVGhpcywgYXJncyk7XG59XG5leHBvcnRzLmhhbmRsZUNhbGxiYWNrUmVzcG9uc2UgPSBoYW5kbGVDYWxsYmFja1Jlc3BvbnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjU0LjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1vbmdvb3NlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTW9uZ29vc2VJbnN0cnVtZW50YXRpb24gPSBleHBvcnRzLl9TVE9SRURfUEFSRU5UX1NQQU4gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3QgY29udGV4dENhcHR1cmVGdW5jdGlvbnNDb21tb24gPSBbXG4gICAgJ2RlbGV0ZU9uZScsXG4gICAgJ2RlbGV0ZU1hbnknLFxuICAgICdmaW5kJyxcbiAgICAnZmluZE9uZScsXG4gICAgJ2VzdGltYXRlZERvY3VtZW50Q291bnQnLFxuICAgICdjb3VudERvY3VtZW50cycsXG4gICAgJ2Rpc3RpbmN0JyxcbiAgICAnd2hlcmUnLFxuICAgICckd2hlcmUnLFxuICAgICdmaW5kT25lQW5kVXBkYXRlJyxcbiAgICAnZmluZE9uZUFuZERlbGV0ZScsXG4gICAgJ2ZpbmRPbmVBbmRSZXBsYWNlJyxcbl07XG5jb25zdCBjb250ZXh0Q2FwdHVyZUZ1bmN0aW9uczYgPSBbXG4gICAgJ3JlbW92ZScsXG4gICAgJ2NvdW50JyxcbiAgICAnZmluZE9uZUFuZFJlbW92ZScsXG4gICAgLi4uY29udGV4dENhcHR1cmVGdW5jdGlvbnNDb21tb24sXG5dO1xuY29uc3QgY29udGV4dENhcHR1cmVGdW5jdGlvbnM3ID0gW1xuICAgICdjb3VudCcsXG4gICAgJ2ZpbmRPbmVBbmRSZW1vdmUnLFxuICAgIC4uLmNvbnRleHRDYXB0dXJlRnVuY3Rpb25zQ29tbW9uLFxuXTtcbmNvbnN0IGNvbnRleHRDYXB0dXJlRnVuY3Rpb25zOCA9IFsuLi5jb250ZXh0Q2FwdHVyZUZ1bmN0aW9uc0NvbW1vbl07XG5mdW5jdGlvbiBnZXRDb250ZXh0Q2FwdHVyZUZ1bmN0aW9ucyhtb2R1bGVWZXJzaW9uKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoIW1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRDYXB0dXJlRnVuY3Rpb25zQ29tbW9uO1xuICAgIH1cbiAgICBlbHNlIGlmIChtb2R1bGVWZXJzaW9uLnN0YXJ0c1dpdGgoJzYuJykgfHwgbW9kdWxlVmVyc2lvbi5zdGFydHNXaXRoKCc1LicpKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0Q2FwdHVyZUZ1bmN0aW9uczY7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1vZHVsZVZlcnNpb24uc3RhcnRzV2l0aCgnNy4nKSkge1xuICAgICAgICByZXR1cm4gY29udGV4dENhcHR1cmVGdW5jdGlvbnM3O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRDYXB0dXJlRnVuY3Rpb25zODtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnN0cnVtZW50UmVtb3ZlKG1vZHVsZVZlcnNpb24pIHtcbiAgICByZXR1cm4gKChtb2R1bGVWZXJzaW9uICYmXG4gICAgICAgIChtb2R1bGVWZXJzaW9uLnN0YXJ0c1dpdGgoJzUuJykgfHwgbW9kdWxlVmVyc2lvbi5zdGFydHNXaXRoKCc2LicpKSkgfHxcbiAgICAgICAgZmFsc2UpO1xufVxuLy8gd2hlbiBtb25nb29zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgd2Ugc3RvcmUgdGhlIG9yaWdpbmFsIGNhbGwgY29udGV4dFxuLy8gYW5kIHRoZW4gc2V0IGl0IGFzIHRoZSBwYXJlbnQgZm9yIHRoZSBzcGFucyBjcmVhdGVkIGJ5IFF1ZXJ5L0FnZ3JlZ2F0ZSBleGVjKClcbi8vIGNhbGxzLiB0aGlzIGJ5cGFzcyB0aGUgdW5saW5rZWQgc3BhbnMgaXNzdWUgb24gdGhlbmFibGVzIGF3YWl0IG9wZXJhdGlvbnMuXG5leHBvcnRzLl9TVE9SRURfUEFSRU5UX1NQQU4gPSBTeW1ib2woJ3N0b3JlZC1wYXJlbnQtc3BhbicpO1xuY2xhc3MgTW9uZ29vc2VJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ21vbmdvb3NlJywgWyc+PTUuOS43IDw5J10sIHRoaXMucGF0Y2guYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBwYXRjaChtb2R1bGUsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IG1vZHVsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJ1xuICAgICAgICAgICAgPyBtb2R1bGUuZGVmYXVsdCAvLyBFU01cbiAgICAgICAgICAgIDogbW9kdWxlOyAvLyBDb21tb25KU1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuTW9kZWwucHJvdG90eXBlLCAnc2F2ZScsIHRoaXMucGF0Y2hPbk1vZGVsTWV0aG9kcygnc2F2ZScsIG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgLy8gbW9uZ29vc2UgYXBwbGllcyB0aGlzIGNvZGUgb24gbW9kdWxlIHJlcXVpcmU6XG4gICAgICAgIC8vIE1vZGVsLnByb3RvdHlwZS4kc2F2ZSA9IE1vZGVsLnByb3RvdHlwZS5zYXZlO1xuICAgICAgICAvLyB3aGljaCBjYXB0dXJlcyB0aGUgc2F2ZSBmdW5jdGlvbiBiZWZvcmUgaXQgaXMgcGF0Y2hlZC5cbiAgICAgICAgLy8gc28gd2UgbmVlZCB0byBhcHBseSB0aGUgc2FtZSBsb2dpYyBhZnRlciBpbnN0cnVtZW50aW5nIHRoZSBzYXZlIGZ1bmN0aW9uLlxuICAgICAgICBtb2R1bGVFeHBvcnRzLk1vZGVsLnByb3RvdHlwZS4kc2F2ZSA9IG1vZHVsZUV4cG9ydHMuTW9kZWwucHJvdG90eXBlLnNhdmU7XG4gICAgICAgIGlmIChpbnN0cnVtZW50UmVtb3ZlKG1vZHVsZVZlcnNpb24pKSB7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuTW9kZWwucHJvdG90eXBlLCAncmVtb3ZlJywgdGhpcy5wYXRjaE9uTW9kZWxNZXRob2RzKCdyZW1vdmUnLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlF1ZXJ5LnByb3RvdHlwZSwgJ2V4ZWMnLCB0aGlzLnBhdGNoUXVlcnlFeGVjKG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkFnZ3JlZ2F0ZS5wcm90b3R5cGUsICdleGVjJywgdGhpcy5wYXRjaEFnZ3JlZ2F0ZUV4ZWMobW9kdWxlVmVyc2lvbikpO1xuICAgICAgICBjb25zdCBjb250ZXh0Q2FwdHVyZUZ1bmN0aW9ucyA9IGdldENvbnRleHRDYXB0dXJlRnVuY3Rpb25zKG1vZHVsZVZlcnNpb24pO1xuICAgICAgICBjb250ZXh0Q2FwdHVyZUZ1bmN0aW9ucy5mb3JFYWNoKChmdW5jTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlF1ZXJ5LnByb3RvdHlwZSwgZnVuY05hbWUsIHRoaXMucGF0Y2hBbmRDYXB0dXJlU3BhbkNvbnRleHQoZnVuY05hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5Nb2RlbCwgJ2FnZ3JlZ2F0ZScsIHRoaXMucGF0Y2hNb2RlbEFnZ3JlZ2F0ZSgpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLk1vZGVsLCAnaW5zZXJ0TWFueScsIHRoaXMucGF0Y2hNb2RlbFN0YXRpYygnaW5zZXJ0TWFueScsIG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLk1vZGVsLCAnYnVsa1dyaXRlJywgdGhpcy5wYXRjaE1vZGVsU3RhdGljKCdidWxrV3JpdGUnLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgIH1cbiAgICB1bnBhdGNoKG1vZHVsZSwgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnXG4gICAgICAgICAgICA/IG1vZHVsZS5kZWZhdWx0IC8vIEVTTVxuICAgICAgICAgICAgOiBtb2R1bGU7IC8vIENvbW1vbkpTXG4gICAgICAgIGNvbnN0IGNvbnRleHRDYXB0dXJlRnVuY3Rpb25zID0gZ2V0Q29udGV4dENhcHR1cmVGdW5jdGlvbnMobW9kdWxlVmVyc2lvbik7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLk1vZGVsLnByb3RvdHlwZSwgJ3NhdmUnKTtcbiAgICAgICAgLy8gcmV2ZXJ0IHRoZSBwYXRjaCBmb3IgJHNhdmUgd2hpY2ggd2UgYXBwbGllZCBieSBhbGlhc2luZyBpdCB0byBwYXRjaGVkIGBzYXZlYFxuICAgICAgICBtb2R1bGVFeHBvcnRzLk1vZGVsLnByb3RvdHlwZS4kc2F2ZSA9IG1vZHVsZUV4cG9ydHMuTW9kZWwucHJvdG90eXBlLnNhdmU7XG4gICAgICAgIGlmIChpbnN0cnVtZW50UmVtb3ZlKG1vZHVsZVZlcnNpb24pKSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5Nb2RlbC5wcm90b3R5cGUsICdyZW1vdmUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5RdWVyeS5wcm90b3R5cGUsICdleGVjJyk7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkFnZ3JlZ2F0ZS5wcm90b3R5cGUsICdleGVjJyk7XG4gICAgICAgIGNvbnRleHRDYXB0dXJlRnVuY3Rpb25zLmZvckVhY2goKGZ1bmNOYW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5RdWVyeS5wcm90b3R5cGUsIGZ1bmNOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLk1vZGVsLCAnYWdncmVnYXRlJyk7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLk1vZGVsLCAnaW5zZXJ0TWFueScpO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5Nb2RlbCwgJ2J1bGtXcml0ZScpO1xuICAgIH1cbiAgICBwYXRjaEFnZ3JlZ2F0ZUV4ZWMobW9kdWxlVmVyc2lvbikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbEFnZ3JlZ2F0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWMoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5nZXRDb25maWcoKS5yZXF1aXJlUGFyZW50U3BhbiAmJlxuICAgICAgICAgICAgICAgICAgICBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsQWdncmVnYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSB0aGlzW2V4cG9ydHMuX1NUT1JFRF9QQVJFTlRfU1BBTl07XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGJTdGF0ZW1lbnRTZXJpYWxpemVyIH0gPSBzZWxmLmdldENvbmZpZygpO1xuICAgICAgICAgICAgICAgIGlmIChkYlN0YXRlbWVudFNlcmlhbGl6ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9TVEFURU1FTlRdID0gZGJTdGF0ZW1lbnRTZXJpYWxpemVyKCdhZ2dyZWdhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVQaXBlbGluZTogdGhpcy5fcGlwZWxpbmUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gc2VsZi5fc3RhcnRTcGFuKHRoaXMuX21vZGVsLmNvbGxlY3Rpb24sIHRoaXMuX21vZGVsPy5tb2RlbE5hbWUsICdhZ2dyZWdhdGUnLCBhdHRyaWJ1dGVzLCBwYXJlbnRTcGFuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlUmVzcG9uc2Uoc3Bhbiwgb3JpZ2luYWxBZ2dyZWdhdGUsIHRoaXMsIGFyZ3VtZW50cywgY2FsbGJhY2ssIG1vZHVsZVZlcnNpb24pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0Y2hRdWVyeUV4ZWMobW9kdWxlVmVyc2lvbikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbEV4ZWMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBleGVjKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudFNwYW4gJiZcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IHRoaXNbZXhwb3J0cy5fU1RPUkVEX1BBUkVOVF9TUEFOXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYlN0YXRlbWVudFNlcmlhbGl6ZXIgfSA9IHNlbGYuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRiU3RhdGVtZW50U2VyaWFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF0gPSBkYlN0YXRlbWVudFNlcmlhbGl6ZXIodGhpcy5vcCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLl9jb25kaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlczogdGhpcy5fdXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOiB0aGlzLl9maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gc2VsZi5fc3RhcnRTcGFuKHRoaXMubW9uZ29vc2VDb2xsZWN0aW9uLCB0aGlzLm1vZGVsLm1vZGVsTmFtZSwgdGhpcy5vcCwgYXR0cmlidXRlcywgcGFyZW50U3Bhbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZVJlc3BvbnNlKHNwYW4sIG9yaWdpbmFsRXhlYywgdGhpcywgYXJndW1lbnRzLCBjYWxsYmFjaywgbW9kdWxlVmVyc2lvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwYXRjaE9uTW9kZWxNZXRob2RzKG9wLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsT25Nb2RlbEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudFNwYW4gJiZcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE9uTW9kZWxGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVQYXlsb2FkID0geyBkb2N1bWVudDogdGhpcyB9O1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zICYmICEob3B0aW9ucyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVQYXlsb2FkLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYlN0YXRlbWVudFNlcmlhbGl6ZXIgfSA9IHNlbGYuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRiU3RhdGVtZW50U2VyaWFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF0gPSBkYlN0YXRlbWVudFNlcmlhbGl6ZXIob3AsIHNlcmlhbGl6ZVBheWxvYWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gc2VsZi5fc3RhcnRTcGFuKHRoaXMuY29uc3RydWN0b3IuY29sbGVjdGlvbiwgdGhpcy5jb25zdHJ1Y3Rvci5tb2RlbE5hbWUsIG9wLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZVJlc3BvbnNlKHNwYW4sIG9yaWdpbmFsT25Nb2RlbEZ1bmN0aW9uLCB0aGlzLCBhcmd1bWVudHMsIGNhbGxiYWNrLCBtb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGNoTW9kZWxTdGF0aWMob3AsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkU3RhdGljKGRvY3NPck9wcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5nZXRDb25maWcoKS5yZXF1aXJlUGFyZW50U3BhbiAmJlxuICAgICAgICAgICAgICAgICAgICBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZVBheWxvYWQgPSB7fTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydE1hbnknOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplUGF5bG9hZC5kb2N1bWVudHMgPSBkb2NzT3JPcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnVsa1dyaXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVBheWxvYWQub3BlcmF0aW9ucyA9IGRvY3NPck9wcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplUGF5bG9hZC5kb2N1bWVudCA9IGRvY3NPck9wcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZVBheWxvYWQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRiU3RhdGVtZW50U2VyaWFsaXplciB9ID0gc2VsZi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGJTdGF0ZW1lbnRTZXJpYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfREJfU1RBVEVNRU5UXSA9IGRiU3RhdGVtZW50U2VyaWFsaXplcihvcCwgc2VyaWFsaXplUGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBzZWxmLl9zdGFydFNwYW4odGhpcy5jb2xsZWN0aW9uLCB0aGlzLm1vZGVsTmFtZSwgb3AsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVSZXNwb25zZShzcGFuLCBvcmlnaW5hbCwgdGhpcywgYXJndW1lbnRzLCBjYWxsYmFjaywgbW9kdWxlVmVyc2lvbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyB3ZSB3YW50IHRvIGNhcHR1cmUgdGhlIG90ZWwgc3BhbiBvbiB0aGUgb2JqZWN0IHdoaWNoIGlzIGNhbGxpbmcgZXhlYy5cbiAgICAvLyBpbiB0aGUgc3BlY2lhbCBjYXNlIG9mIGFnZ3JlZ2F0ZSwgd2UgbmVlZCBoYXZlIG5vIGZ1bmN0aW9uIHRvIHBhdGhcbiAgICAvLyBvbiB0aGUgQWdncmVnYXRlIG9iamVjdCB0byBjYXB0dXJlIHRoZSBjb250ZXh0IG9uLCBzbyB3ZSBwYXRjaFxuICAgIC8vIHRoZSBhZ2dyZWdhdGUgb2YgTW9kZWwsIGFuZCBzZXQgdGhlIGNvbnRleHQgb24gdGhlIEFnZ3JlZ2F0ZSBvYmplY3RcbiAgICBwYXRjaE1vZGVsQWdncmVnYXRlKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNhcHR1cmVTcGFuQ29udGV4dCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlID0gc2VsZi5fY2FsbE9yaWdpbmFsRnVuY3Rpb24oKCkgPT4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZSlcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlW2V4cG9ydHMuX1NUT1JFRF9QQVJFTlRfU1BBTl0gPSBjdXJyZW50U3BhbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWdncmVnYXRlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0Y2hBbmRDYXB0dXJlU3BhbkNvbnRleHQoZnVuY05hbWUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjYXB0dXJlU3BhbkNvbnRleHQoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tleHBvcnRzLl9TVE9SRURfUEFSRU5UX1NQQU5dID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FsbE9yaWdpbmFsRnVuY3Rpb24oKCkgPT4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfc3RhcnRTcGFuKGNvbGxlY3Rpb24sIG1vZGVsTmFtZSwgb3BlcmF0aW9uLCBhdHRyaWJ1dGVzLCBwYXJlbnRTcGFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWNlci5zdGFydFNwYW4oYG1vbmdvb3NlLiR7bW9kZWxOYW1lfS4ke29wZXJhdGlvbn1gLCB7XG4gICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAuLi4oMCwgdXRpbHNfMS5nZXRBdHRyaWJ1dGVzRnJvbUNvbGxlY3Rpb24pKGNvbGxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9PUEVSQVRJT05dOiBvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06ICdtb25nb29zZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBwYXJlbnRTcGFuID8gYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBwYXJlbnRTcGFuKSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIF9oYW5kbGVSZXNwb25zZShzcGFuLCBleGVjLCBvcmlnaW5hbFRoaXMsIGFyZ3MsIGNhbGxiYWNrLCBtb2R1bGVWZXJzaW9uID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoY2FsbGJhY2sgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxPcmlnaW5hbEZ1bmN0aW9uKCgpID0+ICgwLCB1dGlsc18xLmhhbmRsZUNhbGxiYWNrUmVzcG9uc2UpKGNhbGxiYWNrLCBleGVjLCBvcmlnaW5hbFRoaXMsIHNwYW4sIGFyZ3MsIHNlbGYuZ2V0Q29uZmlnKCkucmVzcG9uc2VIb29rLCBtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHNlbGYuX2NhbGxPcmlnaW5hbEZ1bmN0aW9uKCgpID0+IGV4ZWMuYXBwbHkob3JpZ2luYWxUaGlzLCBhcmdzKSk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEuaGFuZGxlUHJvbWlzZVJlc3BvbnNlKShyZXNwb25zZSwgc3Bhbiwgc2VsZi5nZXRDb25maWcoKS5yZXNwb25zZUhvb2ssIG1vZHVsZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jYWxsT3JpZ2luYWxGdW5jdGlvbihvcmlnaW5hbEZ1bmN0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmdldENvbmZpZygpLnN1cHByZXNzSW50ZXJuYWxJbnN0cnVtZW50YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCBvcmlnaW5hbEZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLk1vbmdvb3NlSW5zdHJ1bWVudGF0aW9uID0gTW9uZ29vc2VJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb25nb29zZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb25nb29zZUluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbW9uZ29vc2VfMSA9IHJlcXVpcmUoXCIuL21vbmdvb3NlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTW9uZ29vc2VJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1vbmdvb3NlXzEuTW9uZ29vc2VJbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX01ZU1FMID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9VU0VSID0gZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSBleHBvcnRzLkFUVFJfREJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgLCBgc2VydmVyLnBvcnRgIGF0dHJpYnV0ZXMgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBcIlNlcnZlcj0obG9jYWxkYilcXFxcdjExLjA7SW50ZWdyYXRlZCBTZWN1cml0eT10cnVlO1wiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AgYW5kIGBzZXJ2ZXIucG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9ICdkYi5jb25uZWN0aW9uX3N0cmluZyc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIubmFtZXNwYWNlYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGN1c3RvbWVyc1xuICogQGV4YW1wbGUgbWFpblxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIubmFtZXNwYWNlYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX05BTUUgPSAnZGIubmFtZSc7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQGV4YW1wbGUgU0VMRUNUICogRlJPTSB3dXNlcl90YWJsZVxuICogQGV4YW1wbGUgU0VUIG15a2V5IFwiV3VWYWx1ZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9ICdkYi5zdGF0ZW1lbnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLnN5c3RlbS5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuc3lzdGVtLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIG5vIHJlcGxhY2VtZW50IGF0IHRoaXMgdGltZS5cbiAqXG4gKiBAZXhhbXBsZSByZWFkb25seV91c2VyXG4gKiBAZXhhbXBsZSByZXBvcnRpbmdfdXNlclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZW1vdmVkLCBubyByZXBsYWNlbWVudCBhdCB0aGlzIHRpbWUuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9VU0VSID0gJ2RiLnVzZXInO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIGV4YW1wbGUuY29tXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSAnbmV0LnBlZXIubmFtZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLnBvcnRgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5wb3J0YCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgODA4MFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLnBvcnRgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5wb3J0YCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gJ25ldC5wZWVyLnBvcnQnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwibXlzcWxcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RCX1NZU1RFTX0uXG4gKlxuICogTXlTUUxcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NWVNRTCA9ICdteXNxbCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hZGRTcWxDb21tZW50ZXJDb21tZW50ID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSBpcyByZXR1cm5pbmcgZmFsc2UtcG9zaXRpdmVzXG4vLyBpbiBjYXNlcyB3aGVyZSBjb21tZW50IGNoYXJhY3RlcnMgYXBwZWFyIGluIHN0cmluZyBsaXRlcmFsc1xuLy8gKFwiU0VMRUNUICctLSBub3QgYSBjb21tZW50JztcIiB3b3VsZCByZXR1cm4gdHJ1ZSwgYWx0aG91Z2ggaGFzIG5vIGNvbW1lbnQpXG5mdW5jdGlvbiBoYXNWYWxpZFNxbENvbW1lbnQocXVlcnkpIHtcbiAgICBjb25zdCBpbmRleE9wZW5pbmdEYXNoRGFzaENvbW1lbnQgPSBxdWVyeS5pbmRleE9mKCctLScpO1xuICAgIGlmIChpbmRleE9wZW5pbmdEYXNoRGFzaENvbW1lbnQgPj0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhPcGVuaW5nU2xhc2hDb21tZW50ID0gcXVlcnkuaW5kZXhPZignLyonKTtcbiAgICBpZiAoaW5kZXhPcGVuaW5nU2xhc2hDb21tZW50IDwgMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4Q2xvc2luZ1NsYXNoQ29tbWVudCA9IHF1ZXJ5LmluZGV4T2YoJyovJyk7XG4gICAgcmV0dXJuIGluZGV4T3BlbmluZ0Rhc2hEYXNoQ29tbWVudCA8IGluZGV4Q2xvc2luZ1NsYXNoQ29tbWVudDtcbn1cbi8vIHNxbGNvbW1lbnRlciBzcGVjaWZpY2F0aW9uIChodHRwczovL2dvb2dsZS5naXRodWIuaW8vc3FsY29tbWVudGVyL3NwZWMvI3ZhbHVlLXNlcmlhbGl6YXRpb24pXG4vLyBleHBlY3RzIHVzIHRvIFVSTCBlbmNvZGUgYmFzZWQgb24gdGhlIFJGQyAzOTg2IHNwZWMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BlcmNlbnQtZW5jb2RpbmcpLFxuLy8gYnV0IGVuY29kZVVSSUNvbXBvbmVudCBkb2VzIG5vdCBoYW5kbGUgc29tZSBjaGFyYWN0ZXJzIGNvcnJlY3RseSAoISAnICggKSAqKSxcbi8vIHdoaWNoIG1lYW5zIHdlIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhpc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZW5jb2RlVVJJQ29tcG9uZW50XG5mdW5jdGlvbiBmaXhlZEVuY29kZVVSSUNvbXBvbmVudChzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBjID0+IGAlJHtjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9YCk7XG59XG5mdW5jdGlvbiBhZGRTcWxDb21tZW50ZXJDb21tZW50KHNwYW4sIHF1ZXJ5KSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSAhPT0gJ3N0cmluZycgfHwgcXVlcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gICAgLy8gQXMgcGVyIHNxbGNvbW1lbnRlciBzcGVjIHdlIHNoYWxsIG5vdCBhZGQgYSBjb21tZW50IGlmIHRoZXJlIGFscmVhZHkgaXMgYSBjb21tZW50XG4gICAgLy8gaW4gdGhlIHF1ZXJ5XG4gICAgaWYgKGhhc1ZhbGlkU3FsQ29tbWVudChxdWVyeSkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgICBjb25zdCBwcm9wYWdhdG9yID0gbmV3IGNvcmVfMS5XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgIHByb3BhZ2F0b3IuaW5qZWN0KGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuUk9PVF9DT05URVhULCBzcGFuKSwgaGVhZGVycywgYXBpXzEuZGVmYXVsdFRleHRNYXBTZXR0ZXIpO1xuICAgIC8vIHNxbGNvbW1lbnRlciBzcGVjIHJlcXVpcmVzIGtleXMgaW4gdGhlIGNvbW1lbnQgdG8gYmUgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5XG4gICAgY29uc3Qgc29ydGVkS2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvcnQoKTtcbiAgICBpZiAoc29ydGVkS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgICBjb25zdCBjb21tZW50U3RyaW5nID0gc29ydGVkS2V5c1xuICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IGZpeGVkRW5jb2RlVVJJQ29tcG9uZW50KGhlYWRlcnNba2V5XSk7XG4gICAgICAgIHJldHVybiBgJHtrZXl9PScke2VuY29kZWRWYWx1ZX0nYDtcbiAgICB9KVxuICAgICAgICAuam9pbignLCcpO1xuICAgIHJldHVybiBgJHtxdWVyeX0gLyoke2NvbW1lbnRTdHJpbmd9Ki9gO1xufVxuZXhwb3J0cy5hZGRTcWxDb21tZW50ZXJDb21tZW50ID0gYWRkU3FsQ29tbWVudGVyQ29tbWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRDb25uZWN0aW9uUHJvdG90eXBlVG9JbnN0cnVtZW50ID0gZXhwb3J0cy5vbmNlID0gZXhwb3J0cy5nZXRTcGFuTmFtZSA9IGV4cG9ydHMuZ2V0UXVlcnlUZXh0ID0gZXhwb3J0cy5nZXRDb25uZWN0aW9uQXR0cmlidXRlcyA9IHZvaWQgMDtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuLyoqXG4gKiBHZXQgYW4gQXR0cmlidXRlcyBtYXAgZnJvbSBhIG15c3FsIGNvbm5lY3Rpb24gY29uZmlnIG9iamVjdFxuICpcbiAqIEBwYXJhbSBjb25maWcgQ29ubmVjdGlvbkNvbmZpZ1xuICovXG5mdW5jdGlvbiBnZXRDb25uZWN0aW9uQXR0cmlidXRlcyhjb25maWcsIGRiU2VtY29udlN0YWJpbGl0eSwgbmV0U2VtY29udlN0YWJpbGl0eSkge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgZGF0YWJhc2UsIHVzZXIgfSA9IGdldENvbmZpZyhjb25maWcpO1xuICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgaWYgKGRiU2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0RCX0NPTk5FQ1RJT05fU1RSSU5HXSA9IGdldEpEQkNTdHJpbmcoaG9zdCwgcG9ydCwgZGF0YWJhc2UpO1xuICAgICAgICBhdHRyc1tzZW1jb252XzEuQVRUUl9EQl9OQU1FXSA9IGRhdGFiYXNlO1xuICAgICAgICBhdHRyc1tzZW1jb252XzEuQVRUUl9EQl9VU0VSXSA9IHVzZXI7XG4gICAgfVxuICAgIGlmIChkYlNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICBhdHRyc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfTkFNRVNQQUNFXSA9IGRhdGFiYXNlO1xuICAgIH1cbiAgICBjb25zdCBwb3J0TnVtYmVyID0gcGFyc2VJbnQocG9ydCwgMTApO1xuICAgIGlmIChuZXRTZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgYXR0cnNbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfTkFNRV0gPSBob3N0O1xuICAgICAgICBpZiAoIWlzTmFOKHBvcnROdW1iZXIpKSB7XG4gICAgICAgICAgICBhdHRyc1tzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXSA9IHBvcnROdW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5ldFNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICBhdHRyc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX0FERFJFU1NdID0gaG9zdDtcbiAgICAgICAgaWYgKCFpc05hTihwb3J0TnVtYmVyKSkge1xuICAgICAgICAgICAgYXR0cnNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXSA9IHBvcnROdW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF0dHJzO1xufVxuZXhwb3J0cy5nZXRDb25uZWN0aW9uQXR0cmlidXRlcyA9IGdldENvbm5lY3Rpb25BdHRyaWJ1dGVzO1xuZnVuY3Rpb24gZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgZGF0YWJhc2UsIHVzZXIgfSA9IChjb25maWcgJiYgY29uZmlnLmNvbm5lY3Rpb25Db25maWcpIHx8IGNvbmZpZyB8fCB7fTtcbiAgICByZXR1cm4geyBob3N0LCBwb3J0LCBkYXRhYmFzZSwgdXNlciB9O1xufVxuZnVuY3Rpb24gZ2V0SkRCQ1N0cmluZyhob3N0LCBwb3J0LCBkYXRhYmFzZSkge1xuICAgIGxldCBqZGJjU3RyaW5nID0gYGpkYmM6bXlzcWw6Ly8ke2hvc3QgfHwgJ2xvY2FsaG9zdCd9YDtcbiAgICBpZiAodHlwZW9mIHBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGpkYmNTdHJpbmcgKz0gYDoke3BvcnR9YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhYmFzZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgamRiY1N0cmluZyArPSBgLyR7ZGF0YWJhc2V9YDtcbiAgICB9XG4gICAgcmV0dXJuIGpkYmNTdHJpbmc7XG59XG4vKipcbiAqIENvbmp1cmVzIHVwIHRoZSB2YWx1ZSBmb3IgdGhlIGRiLnF1ZXJ5LnRleHQgYXR0cmlidXRlIGJ5IGZvcm1hdHRpbmcgYSBTUUwgcXVlcnkuXG4gKi9cbmZ1bmN0aW9uIGdldFF1ZXJ5VGV4dChxdWVyeSwgZm9ybWF0LCB2YWx1ZXMsIG1hc2tTdGF0ZW1lbnQgPSBmYWxzZSwgbWFza1N0YXRlbWVudEhvb2sgPSBkZWZhdWx0TWFza2luZ0hvb2spIHtcbiAgICBjb25zdCBbcXVlcnlTcWwsIHF1ZXJ5VmFsdWVzXSA9IHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBbcXVlcnksIHZhbHVlc11cbiAgICAgICAgOiBbcXVlcnkuc3FsLCBoYXNWYWx1ZXMocXVlcnkpID8gdmFsdWVzIHx8IHF1ZXJ5LnZhbHVlcyA6IHZhbHVlc107XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKG1hc2tTdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXNrU3RhdGVtZW50SG9vayhxdWVyeVNxbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybWF0ICYmIHF1ZXJ5VmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0KHF1ZXJ5U3FsLCBxdWVyeVZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcXVlcnlTcWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBxdWVyeSBkdWUgdG8gYW4gZXJyb3IgaW4gbWFza2luZyBvciBmb3JtYXR0aW5nJztcbiAgICB9XG59XG5leHBvcnRzLmdldFF1ZXJ5VGV4dCA9IGdldFF1ZXJ5VGV4dDtcbi8qKlxuICogUmVwbGFjZXMgbnVtZXJpYyB2YWx1ZXMgYW5kIHF1b3RlZCBzdHJpbmdzIGluIHRoZSBxdWVyeSB3aXRoIHBsYWNlaG9sZGVycyAoJz8nKS5cbiAqXG4gKiAtIGBcXGJcXGQrXFxiYDogTWF0Y2hlcyB3aG9sZSBudW1iZXJzIChpbnRlZ2VycykgYW5kIHJlcGxhY2VzIHRoZW0gd2l0aCAnPycuXG4gKiAtIGAoW1wiJ10pKD86KD89KFxcXFw/KSlcXDIuKSo/XFwxYDpcbiAqICAgLSBNYXRjaGVzIHF1b3RlZCBzdHJpbmdzIChib3RoIHNpbmdsZSBgJ2AgYW5kIGRvdWJsZSBgXCJgIHF1b3RlcykuXG4gKiAgIC0gVXNlcyBhIGxvb2thaGVhZCBgKD89KFxcXFw/KSlgIHRvIGRldGVjdCBhbiBvcHRpb25hbCBiYWNrc2xhc2ggd2l0aG91dCBjb25zdW1pbmcgaXQgaW1tZWRpYXRlbHkuXG4gKiAgIC0gQ2FwdHVyZXMgdGhlIG9wdGlvbmFsIGJhY2tzbGFzaCBgXFwyYCBhbmQgZW5zdXJlcyBlc2NhcGVkIHF1b3RlcyBpbnNpZGUgdGhlIHN0cmluZyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXG4gKiAgIC0gRW5zdXJlcyB0aGF0IG9ubHkgY29tcGxldGUgcXVvdGVkIHN0cmluZ3MgYXJlIHJlcGxhY2VkIHdpdGggJz8nLlxuICpcbiAqIFRoaXMgcHJldmVudHMgYWNjaWRlbnRhbCByZXBsYWNlbWVudCBvZiBlc2NhcGVkIHF1b3RlcyB3aXRoaW4gc3RyaW5ncyBhbmQgZW5zdXJlcyB0aGF0IHRoZVxuICogcXVlcnkgc3RydWN0dXJlIHJlbWFpbnMgaW50YWN0IHdoaWxlIG1hc2tpbmcgc2Vuc2l0aXZlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRNYXNraW5nSG9vayhxdWVyeSkge1xuICAgIHJldHVybiBxdWVyeVxuICAgICAgICAucmVwbGFjZSgvXFxiXFxkK1xcYi9nLCAnPycpXG4gICAgICAgIC5yZXBsYWNlKC8oW1wiJ10pKD86KD89KFxcXFw/KSlcXDIuKSo/XFwxL2csICc/Jyk7XG59XG5mdW5jdGlvbiBoYXNWYWx1ZXMob2JqKSB7XG4gICAgcmV0dXJuICd2YWx1ZXMnIGluIG9iajtcbn1cbi8qKlxuICogVGhlIHNwYW4gbmFtZSBTSE9VTEQgYmUgc2V0IHRvIGEgbG93IGNhcmRpbmFsaXR5IHZhbHVlXG4gKiByZXByZXNlbnRpbmcgdGhlIHN0YXRlbWVudCBleGVjdXRlZCBvbiB0aGUgZGF0YWJhc2UuXG4gKlxuICogQHJldHVybnMgU1FMIHN0YXRlbWVudCB3aXRob3V0IHZhcmlhYmxlIGFyZ3VtZW50cyBvciBTUUwgdmVyYlxuICovXG5mdW5jdGlvbiBnZXRTcGFuTmFtZShxdWVyeSkge1xuICAgIGNvbnN0IHJhd1F1ZXJ5ID0gdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyA/IHF1ZXJ5LnNxbCA6IHF1ZXJ5O1xuICAgIC8vIEV4dHJhY3QgdGhlIFNRTCB2ZXJiXG4gICAgY29uc3QgZmlyc3RTcGFjZSA9IHJhd1F1ZXJ5Py5pbmRleE9mKCcgJyk7XG4gICAgaWYgKHR5cGVvZiBmaXJzdFNwYWNlID09PSAnbnVtYmVyJyAmJiBmaXJzdFNwYWNlICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmF3UXVlcnk/LnN1YnN0cmluZygwLCBmaXJzdFNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhd1F1ZXJ5O1xufVxuZXhwb3J0cy5nZXRTcGFuTmFtZSA9IGdldFNwYW5OYW1lO1xuY29uc3Qgb25jZSA9IChmbikgPT4ge1xuICAgIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGNhbGxlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH07XG59O1xuZXhwb3J0cy5vbmNlID0gb25jZTtcbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25Qcm90b3R5cGVUb0luc3RydW1lbnQoY29ubmVjdGlvbikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm90b3R5cGUgPSBjb25uZWN0aW9uLnByb3RvdHlwZTtcbiAgICBjb25zdCBiYXNlUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbm5lY3Rpb25Qcm90b3R5cGUpO1xuICAgIC8vIG15c3FsMkAzLjExLjUgaW5jbHVkZWQgYSByZWZhY3RvcmluZywgd2hlcmUgbW9zdCBjb2RlIHdhcyBtb3ZlZCBvdXQgb2YgdGhlIGBDb25uZWN0aW9uYCBjbGFzcyBhbmQgaW50byBhIHNoYXJlZCBiYXNlXG4gICAgLy8gc28gd2UgbmVlZCB0byBpbnN0cnVtZW50IHRoYXQgaW5zdGVhZCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWRvcmFyZXMvbm9kZS1teXNxbDIvcHVsbC8zMDgxXG4gICAgLy8gVGhpcyBjaGVja3MgaWYgdGhlIGZ1bmN0aW9ucyB3ZSdyZSBpbnN0cnVtZW50aW5nIGFyZSB0aGVyZSBvbiB0aGUgYmFzZSAtIHdlIGNhbm5vdCB1c2UgdGhlIHByZXNlbmNlIG9mIGEgYmFzZVxuICAgIC8vIHByb3RvdHlwZSBzaW5jZSBFdmVudEVtaXR0ZXIgaXMgdGhlIGJhc2UgZm9yIG15c3FsMkA8PTMuMTEuNFxuICAgIGlmICh0eXBlb2YgYmFzZVByb3RvdHlwZT8ucXVlcnkgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIGJhc2VQcm90b3R5cGU/LmV4ZWN1dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VQcm90b3R5cGU7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBpbnN0cnVtZW50IHRoZSBjb25uZWN0aW9uIGRpcmVjdGx5LlxuICAgIHJldHVybiBjb25uZWN0aW9uUHJvdG90eXBlO1xufVxuZXhwb3J0cy5nZXRDb25uZWN0aW9uUHJvdG90eXBlVG9JbnN0cnVtZW50ID0gZ2V0Q29ubmVjdGlvblByb3RvdHlwZVRvSW5zdHJ1bWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41NC4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1teXNxbDInO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTXlTUUwySW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBzcWxfY29tbW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc3FsLWNvbW1vblwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzdXBwb3J0ZWRWZXJzaW9ucyA9IFsnPj0xLjQuMiA8NCddO1xuY2xhc3MgTXlTUUwySW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgX25ldFNlbWNvbnZTdGFiaWxpdHk7XG4gICAgX2RiU2VtY29udlN0YWJpbGl0eTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9zZXRTZW1jb252U3RhYmlsaXR5RnJvbUVudigpO1xuICAgIH1cbiAgICAvLyBVc2VkIGZvciB0ZXN0aW5nLlxuICAgIF9zZXRTZW1jb252U3RhYmlsaXR5RnJvbUVudigpIHtcbiAgICAgICAgdGhpcy5fbmV0U2VtY29udlN0YWJpbGl0eSA9ICgwLCBpbnN0cnVtZW50YXRpb25fMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cikoJ2h0dHAnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgICAgIHRoaXMuX2RiU2VtY29udlN0YWJpbGl0eSA9ICgwLCBpbnN0cnVtZW50YXRpb25fMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cikoJ2RhdGFiYXNlJywgcHJvY2Vzcy5lbnYuT1RFTF9TRU1DT05WX1NUQUJJTElUWV9PUFRfSU4pO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBsZXQgZm9ybWF0O1xuICAgICAgICBmdW5jdGlvbiBzZXRGb3JtYXRGdW5jdGlvbihtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm1hdCAmJiBtb2R1bGVFeHBvcnRzLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IG1vZHVsZUV4cG9ydHMuZm9ybWF0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGNoID0gKENvbm5lY3Rpb25Qcm90b3R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShDb25uZWN0aW9uUHJvdG90eXBlLnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChDb25uZWN0aW9uUHJvdG90eXBlLCAncXVlcnknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dyYXAoQ29ubmVjdGlvblByb3RvdHlwZSwgJ3F1ZXJ5JywgdGhpcy5fcGF0Y2hRdWVyeShmb3JtYXQsIGZhbHNlKSk7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoQ29ubmVjdGlvblByb3RvdHlwZS5leGVjdXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChDb25uZWN0aW9uUHJvdG90eXBlLCAnZXhlY3V0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChDb25uZWN0aW9uUHJvdG90eXBlLCAnZXhlY3V0ZScsIHRoaXMuX3BhdGNoUXVlcnkoZm9ybWF0LCB0cnVlKSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVucGF0Y2ggPSAoQ29ubmVjdGlvblByb3RvdHlwZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKENvbm5lY3Rpb25Qcm90b3R5cGUsICdxdWVyeScpO1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKENvbm5lY3Rpb25Qcm90b3R5cGUsICdleGVjdXRlJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ215c3FsMicsIHN1cHBvcnRlZFZlcnNpb25zLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIHNldEZvcm1hdEZ1bmN0aW9uKG1vZHVsZUV4cG9ydHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSwgKCkgPT4geyB9LCBbXG4gICAgICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdteXNxbDIvcHJvbWlzZS5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRGb3JtYXRGdW5jdGlvbihtb2R1bGVFeHBvcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4geyB9KSxcbiAgICAgICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ215c3FsMi9saWIvY29ubmVjdGlvbi5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25uZWN0aW9uUHJvdG90eXBlID0gKDAsIHV0aWxzXzEuZ2V0Q29ubmVjdGlvblByb3RvdHlwZVRvSW5zdHJ1bWVudCkobW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoKENvbm5lY3Rpb25Qcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgICAgICB9LCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25uZWN0aW9uUHJvdG90eXBlID0gKDAsIHV0aWxzXzEuZ2V0Q29ubmVjdGlvblByb3RvdHlwZVRvSW5zdHJ1bWVudCkobW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgICAgIHVucGF0Y2goQ29ubmVjdGlvblByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX3BhdGNoUXVlcnkoZm9ybWF0LCBpc1ByZXBhcmVkKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxRdWVyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGhpc1BsdWdpbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcXVlcnkocXVlcnksIF92YWx1ZXNPckNhbGxiYWNrLCBfY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVzO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF92YWx1ZXNPckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfdmFsdWVzT3JDYWxsYmFjaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtfdmFsdWVzT3JDYWxsYmFja107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbWFza1N0YXRlbWVudCwgbWFza1N0YXRlbWVudEhvb2ssIHJlc3BvbnNlSG9vayB9ID0gdGhpc1BsdWdpbi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gKDAsIHV0aWxzXzEuZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMpKHRoaXMuY29uZmlnLCB0aGlzUGx1Z2luLl9kYlNlbWNvbnZTdGFiaWxpdHksIHRoaXNQbHVnaW4uX25ldFNlbWNvbnZTdGFiaWxpdHkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRiUXVlcnlUZXh0ID0gKDAsIHV0aWxzXzEuZ2V0UXVlcnlUZXh0KShxdWVyeSwgZm9ybWF0LCB2YWx1ZXMsIG1hc2tTdGF0ZW1lbnQsIG1hc2tTdGF0ZW1lbnRIb29rKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1BsdWdpbi5fZGJTZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9TWVNURU1dID0gc2VtY29udl8xLkRCX1NZU1RFTV9WQUxVRV9NWVNRTDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9EQl9TVEFURU1FTlRdID0gZGJRdWVyeVRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzUGx1Z2luLl9kYlNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9TWVNURU1fTkFNRV0gPSBzZW1hbnRpY19jb252ZW50aW9uc18xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX01ZU1FMO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9RVUVSWV9URVhUXSA9IGRiUXVlcnlUZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gdGhpc1BsdWdpbi50cmFjZXIuc3RhcnRTcGFuKCgwLCB1dGlsc18xLmdldFNwYW5OYW1lKShxdWVyeSksIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogYXBpLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUHJlcGFyZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpc1BsdWdpbi5nZXRDb25maWcoKS5hZGRTcWxDb21tZW50ZXJDb21tZW50VG9RdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXSA9IHF1ZXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICgwLCBzcWxfY29tbW9uXzEuYWRkU3FsQ29tbWVudGVyQ29tbWVudCkoc3BhbiwgcXVlcnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKHF1ZXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogKDAsIHNxbF9jb21tb25fMS5hZGRTcWxDb21tZW50ZXJDb21tZW50KShzcGFuLCBxdWVyeS5zcWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlbmRTcGFuID0gKDAsIHV0aWxzXzEub25jZSkoKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlSG9vayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSG9vayhzcGFuLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdHM6IHJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX2RpYWcud2FybignRmFpbGVkIGV4ZWN1dGluZyByZXNwb25zZUhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5Lm9uUmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl93cmFwKHF1ZXJ5LCAnb25SZXN1bHQnLCB0aGlzUGx1Z2luLl9wYXRjaENhbGxiYWNrUXVlcnkoZW5kU3BhbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbWFibGVRdWVyeSA9IG9yaWdpbmFsUXVlcnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYGVuZGAgaW4gbXlzcWwgYmVoYXZlcyBzaW1pbGFybHkgdG8gYHJlc3VsdGAgaW4gbXlzcWwyLlxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1hYmxlUXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTcGFuKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAub25jZSgncmVzdWx0JywgcmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTcGFuKHVuZGVmaW5lZCwgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtYWJsZVF1ZXJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl93cmFwKGFyZ3VtZW50cywgMSwgdGhpc1BsdWdpbi5fcGF0Y2hDYWxsYmFja1F1ZXJ5KGVuZFNwYW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50c1syXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl93cmFwKGFyZ3VtZW50cywgMiwgdGhpc1BsdWdpbi5fcGF0Y2hDYWxsYmFja1F1ZXJ5KGVuZFNwYW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUXVlcnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXRjaENhbGxiYWNrUXVlcnkoZW5kU3Bhbikge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsQ2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCByZXN1bHRzLCBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBlbmRTcGFuKGVyciwgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsQ2FsbGJhY2soLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5NeVNRTDJJbnN0cnVtZW50YXRpb24gPSBNeVNRTDJJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk15U1FMMkluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk15U1FMMkluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuTXlTUUwySW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UgPSBleHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NWVNRTCA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSBleHBvcnRzLkFUVFJfREJfVVNFUiA9IGV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSBleHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gZXhwb3J0cy5BVFRSX0RCX05BTUUgPSBleHBvcnRzLkFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkcgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5hZGRyZXNzYCwgYHNlcnZlci5wb3J0YCBhdHRyaWJ1dGVzIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgXCJTZXJ2ZXI9KGxvY2FsZGIpXFxcXHYxMS4wO0ludGVncmF0ZWQgU2VjdXJpdHk9dHJ1ZTtcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIGFuZCBgc2VydmVyLnBvcnRgLlxuICovXG5leHBvcnRzLkFUVFJfREJfQ09OTkVDVElPTl9TVFJJTkcgPSAnZGIuY29ubmVjdGlvbl9zdHJpbmcnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLm5hbWVzcGFjZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBjdXN0b21lcnNcbiAqIEBleGFtcGxlIG1haW5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLm5hbWVzcGFjZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9OQU1FID0gJ2RiLm5hbWUnO1xuLyoqXG4gKiBUaGUgZGF0YWJhc2Ugc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIFNFTEVDVCAqIEZST00gd3VzZXJfdGFibGVcbiAqIEBleGFtcGxlIFNFVCBteWtleSBcIld1VmFsdWVcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIucXVlcnkudGV4dGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSAnZGIuc3RhdGVtZW50Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5zeXN0ZW0ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnN5c3RlbS5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9ICdkYi5zeXN0ZW0nO1xuLyoqXG4gKiBEZXByZWNhdGVkLCBubyByZXBsYWNlbWVudCBhdCB0aGlzIHRpbWUuXG4gKlxuICogQGV4YW1wbGUgcmVhZG9ubHlfdXNlclxuICogQGV4YW1wbGUgcmVwb3J0aW5nX3VzZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCwgbm8gcmVwbGFjZW1lbnQgYXQgdGhpcyB0aW1lLlxuICovXG5leHBvcnRzLkFUVFJfREJfVVNFUiA9ICdkYi51c2VyJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSBleGFtcGxlLmNvbVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9ICduZXQucGVlci5wb3J0Jztcbi8qKlxuICogRW51bSB2YWx1ZSBcIm15c3FsXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU19LlxuICpcbiAqIE15U1FMXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfTVlTUUwgPSAnbXlzcWwnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLmNsaWVudC5jb25uZWN0aW9uLmNvdW50YCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuY2xpZW50LmNvbm5lY3Rpb24uY291bnRgLlxuICovXG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UgPSAnZGIuY2xpZW50LmNvbm5lY3Rpb25zLnVzYWdlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gTXlzcWwgc3BlY2lmaWMgYXR0cmlidXRlcyBub3QgY292ZXJlZCBieSBzZW1hbnRpYyBjb252ZW50aW9uc1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiTVlTUUxfVkFMVUVTXCJdID0gXCJkYi5teXNxbC52YWx1ZXNcIjtcbn0pKEF0dHJpYnV0ZU5hbWVzID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyB8fCAoZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdHRyaWJ1dGVOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UG9vbE5hbWUgPSBleHBvcnRzLmFycmF5U3RyaW5naWZ5SGVscGVyID0gZXhwb3J0cy5nZXRTcGFuTmFtZSA9IGV4cG9ydHMuZ2V0RGJWYWx1ZXMgPSBleHBvcnRzLmdldERiU3RhdGVtZW50ID0gZXhwb3J0cy5nZXRDb25uZWN0aW9uQXR0cmlidXRlcyA9IHZvaWQgMDtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG4vKipcbiAqIEdldCBhbiBBdHRyaWJ1dGVzIG1hcCBmcm9tIGEgbXlzcWwgY29ubmVjdGlvbiBjb25maWcgb2JqZWN0XG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25uZWN0aW9uQ29uZmlnXG4gKi9cbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25BdHRyaWJ1dGVzKGNvbmZpZykge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgZGF0YWJhc2UsIHVzZXIgfSA9IGdldENvbmZpZyhjb25maWcpO1xuICAgIGNvbnN0IHBvcnROdW1iZXIgPSBwYXJzZUludChwb3J0LCAxMCk7XG4gICAgaWYgKCFpc05hTihwb3J0TnVtYmVyKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdOiBob3N0LFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlRdOiBwb3J0TnVtYmVyLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX0NPTk5FQ1RJT05fU1RSSU5HXTogZ2V0SkRCQ1N0cmluZyhob3N0LCBwb3J0LCBkYXRhYmFzZSksXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfTkFNRV06IGRhdGFiYXNlLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1VTRVJdOiB1c2VyLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfTkFNRV06IGhvc3QsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklOR106IGdldEpEQkNTdHJpbmcoaG9zdCwgcG9ydCwgZGF0YWJhc2UpLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfTkFNRV06IGRhdGFiYXNlLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfVVNFUl06IHVzZXIsXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMgPSBnZXRDb25uZWN0aW9uQXR0cmlidXRlcztcbmZ1bmN0aW9uIGdldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCB7IGhvc3QsIHBvcnQsIGRhdGFiYXNlLCB1c2VyIH0gPSAoY29uZmlnICYmIGNvbmZpZy5jb25uZWN0aW9uQ29uZmlnKSB8fCBjb25maWcgfHwge307XG4gICAgcmV0dXJuIHsgaG9zdCwgcG9ydCwgZGF0YWJhc2UsIHVzZXIgfTtcbn1cbmZ1bmN0aW9uIGdldEpEQkNTdHJpbmcoaG9zdCwgcG9ydCwgZGF0YWJhc2UpIHtcbiAgICBsZXQgamRiY1N0cmluZyA9IGBqZGJjOm15c3FsOi8vJHtob3N0IHx8ICdsb2NhbGhvc3QnfWA7XG4gICAgaWYgKHR5cGVvZiBwb3J0ID09PSAnbnVtYmVyJykge1xuICAgICAgICBqZGJjU3RyaW5nICs9IGA6JHtwb3J0fWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YWJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGpkYmNTdHJpbmcgKz0gYC8ke2RhdGFiYXNlfWA7XG4gICAgfVxuICAgIHJldHVybiBqZGJjU3RyaW5nO1xufVxuLyoqXG4gKiBAcmV0dXJucyB0aGUgZGF0YWJhc2Ugc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLlxuICovXG5mdW5jdGlvbiBnZXREYlN0YXRlbWVudChxdWVyeSkge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5zcWw7XG4gICAgfVxufVxuZXhwb3J0cy5nZXREYlN0YXRlbWVudCA9IGdldERiU3RhdGVtZW50O1xuZnVuY3Rpb24gZ2V0RGJWYWx1ZXMocXVlcnksIHZhbHVlcykge1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhcnJheVN0cmluZ2lmeUhlbHBlcih2YWx1ZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9teXNxbGpzL215c3FsI3BlcmZvcm1pbmctcXVlcmllc1xuICAgICAgICAvLyBUaGUgdmFsdWVzIGFyZ3VtZW50IHdpbGwgb3ZlcnJpZGUgdGhlIHZhbHVlcyBpbiB0aGUgb3B0aW9uIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGFycmF5U3RyaW5naWZ5SGVscGVyKHZhbHVlcyB8fCBxdWVyeS52YWx1ZXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGJWYWx1ZXMgPSBnZXREYlZhbHVlcztcbi8qKlxuICogVGhlIHNwYW4gbmFtZSBTSE9VTEQgYmUgc2V0IHRvIGEgbG93IGNhcmRpbmFsaXR5IHZhbHVlXG4gKiByZXByZXNlbnRpbmcgdGhlIHN0YXRlbWVudCBleGVjdXRlZCBvbiB0aGUgZGF0YWJhc2UuXG4gKlxuICogQHJldHVybnMgU1FMIHN0YXRlbWVudCB3aXRob3V0IHZhcmlhYmxlIGFyZ3VtZW50cyBvciBTUUwgdmVyYlxuICovXG5mdW5jdGlvbiBnZXRTcGFuTmFtZShxdWVyeSkge1xuICAgIGNvbnN0IHJhd1F1ZXJ5ID0gdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyA/IHF1ZXJ5LnNxbCA6IHF1ZXJ5O1xuICAgIC8vIEV4dHJhY3QgdGhlIFNRTCB2ZXJiXG4gICAgY29uc3QgZmlyc3RTcGFjZSA9IHJhd1F1ZXJ5Py5pbmRleE9mKCcgJyk7XG4gICAgaWYgKHR5cGVvZiBmaXJzdFNwYWNlID09PSAnbnVtYmVyJyAmJiBmaXJzdFNwYWNlICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmF3UXVlcnk/LnN1YnN0cmluZygwLCBmaXJzdFNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhd1F1ZXJ5O1xufVxuZXhwb3J0cy5nZXRTcGFuTmFtZSA9IGdldFNwYW5OYW1lO1xuZnVuY3Rpb24gYXJyYXlTdHJpbmdpZnlIZWxwZXIoYXJyKSB7XG4gICAgaWYgKGFycilcbiAgICAgICAgcmV0dXJuIGBbJHthcnIudG9TdHJpbmcoKX1dYDtcbiAgICByZXR1cm4gJyc7XG59XG5leHBvcnRzLmFycmF5U3RyaW5naWZ5SGVscGVyID0gYXJyYXlTdHJpbmdpZnlIZWxwZXI7XG5mdW5jdGlvbiBnZXRQb29sTmFtZShwb29sKSB7XG4gICAgY29uc3QgYyA9IHBvb2wuY29uZmlnLmNvbm5lY3Rpb25Db25maWc7XG4gICAgbGV0IHBvb2xOYW1lID0gJyc7XG4gICAgcG9vbE5hbWUgKz0gYy5ob3N0ID8gYGhvc3Q6ICcke2MuaG9zdH0nLCBgIDogJyc7XG4gICAgcG9vbE5hbWUgKz0gYy5wb3J0ID8gYHBvcnQ6ICR7Yy5wb3J0fSwgYCA6ICcnO1xuICAgIHBvb2xOYW1lICs9IGMuZGF0YWJhc2UgPyBgZGF0YWJhc2U6ICcke2MuZGF0YWJhc2V9JywgYCA6ICcnO1xuICAgIHBvb2xOYW1lICs9IGMudXNlciA/IGB1c2VyOiAnJHtjLnVzZXJ9J2AgOiAnJztcbiAgICBpZiAoIWMudXNlcikge1xuICAgICAgICBwb29sTmFtZSA9IHBvb2xOYW1lLnN1YnN0cmluZygwLCBwb29sTmFtZS5sZW5ndGggLSAyKTsgLy9vbWl0IGxhc3QgY29tbWFcbiAgICB9XG4gICAgcmV0dXJuIHBvb2xOYW1lLnRyaW0oKTtcbn1cbmV4cG9ydHMuZ2V0UG9vbE5hbWUgPSBnZXRQb29sTmFtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41My4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1teXNxbCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NeVNRTEluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vQXR0cmlidXRlTmFtZXNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jbGFzcyBNeVNRTEluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIHN0YXRpYyBDT01NT05fQVRUUklCVVRFUyA9IHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfTVlTUUwsXG4gICAgfTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zVXNhZ2UgPSB0aGlzLm1ldGVyLmNyZWF0ZVVwRG93bkNvdW50ZXIoc2VtY29udl8xLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTlNfVVNBR0UsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gc3RhdGUgZGVzY3JpYmVkIGJ5IHRoZSBzdGF0ZSBhdHRyaWJ1dGUuJyxcbiAgICAgICAgICAgIHVuaXQ6ICd7Y29ubmVjdGlvbn0nLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbignbXlzcWwnLCBbJz49Mi4wLjAgPDMnXSwgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5jcmVhdGVDb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NyZWF0ZUNvbm5lY3Rpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnY3JlYXRlQ29ubmVjdGlvbicsIHRoaXMuX3BhdGNoQ3JlYXRlQ29ubmVjdGlvbigpKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5jcmVhdGVQb29sKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NyZWF0ZVBvb2wnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCAnY3JlYXRlUG9vbCcsIHRoaXMuX3BhdGNoQ3JlYXRlUG9vbCgpKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5jcmVhdGVQb29sQ2x1c3RlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdjcmVhdGVQb29sQ2x1c3RlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjcmVhdGVQb29sQ2x1c3RlcicsIHRoaXMuX3BhdGNoQ3JlYXRlUG9vbENsdXN0ZXIoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NyZWF0ZUNvbm5lY3Rpb24nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NyZWF0ZVBvb2wnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NyZWF0ZVBvb2xDbHVzdGVyJyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgLy8gZ2xvYmFsIGV4cG9ydCBmdW5jdGlvblxuICAgIF9wYXRjaENyZWF0ZUNvbm5lY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxDcmVhdGVDb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aGlzUGx1Z2luID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKF9jb25uZWN0aW9uVXJpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXN1bHQgPSBvcmlnaW5hbENyZWF0ZUNvbm5lY3Rpb24oLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVud3JhcHBlZCBvbiBuZXh0IGNhbGwgYWZ0ZXIgdW5wYXRjaFxuICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3dyYXAob3JpZ2luYWxSZXN1bHQsICdxdWVyeScsIHRoaXNQbHVnaW4uX3BhdGNoUXVlcnkob3JpZ2luYWxSZXN1bHQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxSZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBnbG9iYWwgZXhwb3J0IGZ1bmN0aW9uXG4gICAgX3BhdGNoQ3JlYXRlUG9vbCgpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbENyZWF0ZVBvb2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNQbHVnaW4gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvb2woX2NvbmZpZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvb2wgPSBvcmlnaW5hbENyZWF0ZVBvb2woLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl93cmFwKHBvb2wsICdxdWVyeScsIHRoaXNQbHVnaW4uX3BhdGNoUXVlcnkocG9vbCkpO1xuICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3dyYXAocG9vbCwgJ2dldENvbm5lY3Rpb24nLCB0aGlzUGx1Z2luLl9wYXRjaEdldENvbm5lY3Rpb24ocG9vbCkpO1xuICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3dyYXAocG9vbCwgJ2VuZCcsIHRoaXNQbHVnaW4uX3BhdGNoUG9vbEVuZChwb29sKSk7XG4gICAgICAgICAgICAgICAgdGhpc1BsdWdpbi5fc2V0UG9vbGNhbGxiYWNrcyhwb29sLCB0aGlzUGx1Z2luLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvb2w7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hQb29sRW5kKHBvb2wpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbFBvb2xFbmQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNQbHVnaW4gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGVuZChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5BbGwgPSBwb29sLl9hbGxDb25uZWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgbkZyZWUgPSBwb29sLl9mcmVlQ29ubmVjdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5Vc2VkID0gbkFsbCAtIG5GcmVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvb2xOYW1lID0gKDAsIHV0aWxzXzEuZ2V0UG9vbE5hbWUpKHBvb2wpO1xuICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX2Nvbm5lY3Rpb25zVXNhZ2UuYWRkKC1uVXNlZCwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ3VzZWQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBwb29sTmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl9jb25uZWN0aW9uc1VzYWdlLmFkZCgtbkZyZWUsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcG9vbE5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxQb29sRW5kLmFwcGx5KHBvb2wsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBnbG9iYWwgZXhwb3J0IGZ1bmN0aW9uXG4gICAgX3BhdGNoQ3JlYXRlUG9vbENsdXN0ZXIoKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxDcmVhdGVQb29sQ2x1c3RlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGhpc1BsdWdpbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9vbChfY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlciA9IG9yaWdpbmFsQ3JlYXRlUG9vbENsdXN0ZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVud3JhcHBlZCBvbiBuZXh0IGNhbGwgYWZ0ZXIgdW5wYXRjaFxuICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3dyYXAoY2x1c3RlciwgJ2dldENvbm5lY3Rpb24nLCB0aGlzUGx1Z2luLl9wYXRjaEdldENvbm5lY3Rpb24oY2x1c3RlcikpO1xuICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3dyYXAoY2x1c3RlciwgJ2FkZCcsIHRoaXNQbHVnaW4uX3BhdGNoQWRkKGNsdXN0ZXIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2x1c3RlcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXRjaEFkZChjbHVzdGVyKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxBZGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNQbHVnaW4gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFkZChpZCwgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgLy8gVW53cmFwIGlmIHVucGF0Y2ggaGFzIGJlZW4gY2FsbGVkXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzUGx1Z2luWydfZW5hYmxlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3Vud3JhcChjbHVzdGVyLCAnYWRkJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEFkZC5hcHBseShjbHVzdGVyLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcmlnaW5hbEFkZC5hcHBseShjbHVzdGVyLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gY2x1c3RlclsnX25vZGVzJ107XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IHR5cGVvZiBpZCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ0NMVVNURVI6OicgKyBjbHVzdGVyLl9sYXN0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9vbCA9IG5vZGVzW25vZGVJZF0ucG9vbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1BsdWdpbi5fc2V0UG9vbGNhbGxiYWNrcyhwb29sLCB0aGlzUGx1Z2luLCBpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gbWV0aG9kIG9uIGNsdXN0ZXIgb3IgcG9vbFxuICAgIF9wYXRjaEdldENvbm5lY3Rpb24ocG9vbCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsR2V0Q29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGhpc1BsdWdpbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgICAgICAgICAgLy8gVW53cmFwIGlmIHVucGF0Y2ggaGFzIGJlZW4gY2FsbGVkXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzUGx1Z2luWydfZW5hYmxlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3Vud3JhcChwb29sLCAnZ2V0Q29ubmVjdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxHZXRDb25uZWN0aW9uLmFwcGx5KHBvb2wsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoRm4gPSB0aGlzUGx1Z2luLl9nZXRDb25uZWN0aW9uQ2FsbGJhY2tQYXRjaEZuKGFyZzEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxHZXRDb25uZWN0aW9uLmNhbGwocG9vbCwgcGF0Y2hGbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoRm4gPSB0aGlzUGx1Z2luLl9nZXRDb25uZWN0aW9uQ2FsbGJhY2tQYXRjaEZuKGFyZzIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxHZXRDb25uZWN0aW9uLmNhbGwocG9vbCwgYXJnMSwgcGF0Y2hGbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBhcmczID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoRm4gPSB0aGlzUGx1Z2luLl9nZXRDb25uZWN0aW9uQ2FsbGJhY2tQYXRjaEZuKGFyZzMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxHZXRDb25uZWN0aW9uLmNhbGwocG9vbCwgYXJnMSwgYXJnMiwgcGF0Y2hGbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEdldENvbm5lY3Rpb24uYXBwbHkocG9vbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRDb25uZWN0aW9uQ2FsbGJhY2tQYXRjaEZuKGNiKSB7XG4gICAgICAgIGNvbnN0IHRoaXNQbHVnaW4gPSB0aGlzO1xuICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2FsbGJhY2sgcGFzc2VkIGludG8gYSBxdWVyeVxuICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gdW53cmFwXG4gICAgICAgICAgICAgICAgaWYgKCEoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShjb25uZWN0aW9uLnF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl93cmFwKGNvbm5lY3Rpb24sICdxdWVyeScsIHRoaXNQbHVnaW4uX3BhdGNoUXVlcnkoY29ubmVjdGlvbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhcGlfMS5jb250ZXh0LndpdGgoYWN0aXZlQ29udGV4dCwgY2IsIHRoaXMsIGVyciwgY29ubmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXRjaFF1ZXJ5KGNvbm5lY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbFF1ZXJ5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aGlzUGx1Z2luID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBxdWVyeShxdWVyeSwgX3ZhbHVlc09yQ2FsbGJhY2ssIF9jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1BsdWdpblsnX2VuYWJsZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl91bndyYXAoY29ubmVjdGlvbiwgJ3F1ZXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFF1ZXJ5LmFwcGx5KGNvbm5lY3Rpb24sIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzUGx1Z2luLnRyYWNlci5zdGFydFNwYW4oKDAsIHV0aWxzXzEuZ2V0U3Bhbk5hbWUpKHF1ZXJ5KSwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLk15U1FMSW5zdHJ1bWVudGF0aW9uLkNPTU1PTl9BVFRSSUJVVEVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKDAsIHV0aWxzXzEuZ2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMpKGNvbm5lY3Rpb24uY29uZmlnKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9EQl9TVEFURU1FTlQsICgwLCB1dGlsc18xLmdldERiU3RhdGVtZW50KShxdWVyeSkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzUGx1Z2luLmdldENvbmZpZygpLmVuaGFuY2VkRGF0YWJhc2VSZXBvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3ZhbHVlc09yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfdmFsdWVzT3JDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmd1bWVudHNbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtfdmFsdWVzT3JDYWxsYmFja107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5NWVNRTF9WQUxVRVMsICgwLCB1dGlsc18xLmdldERiVmFsdWVzKShxdWVyeSwgdmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNiSW5kZXggPSBBcnJheS5mcm9tKGFyZ3VtZW50cykuZmluZEluZGV4KGFyZyA9PiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2JJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtYWJsZVF1ZXJ5ID0gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFF1ZXJ5LmFwcGx5KGNvbm5lY3Rpb24sIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhcGlfMS5jb250ZXh0LmJpbmQocGFyZW50Q29udGV4dCwgc3RyZWFtYWJsZVF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbWFibGVRdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIGVyciA9PiBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl93cmFwKGFyZ3VtZW50cywgY2JJbmRleCwgdGhpc1BsdWdpbi5fcGF0Y2hDYWxsYmFja1F1ZXJ5KHNwYW4sIHBhcmVudENvbnRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxRdWVyeS5hcHBseShjb25uZWN0aW9uLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hDYWxsYmFja1F1ZXJ5KHNwYW4sIHBhcmVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbENhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgcmVzdWx0cywgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC53aXRoKHBhcmVudENvbnRleHQsICgpID0+IG9yaWdpbmFsQ2FsbGJhY2soLi4uYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfc2V0UG9vbGNhbGxiYWNrcyhwb29sLCB0aGlzUGx1Z2luLCBpZCkge1xuICAgICAgICAvL1RPRE86OiB1c2Ugc2VtYW50aWMgY29udmVudGlvblxuICAgICAgICBjb25zdCBwb29sTmFtZSA9IGlkIHx8ICgwLCB1dGlsc18xLmdldFBvb2xOYW1lKShwb29sKTtcbiAgICAgICAgcG9vbC5vbignY29ubmVjdGlvbicsIGNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgdGhpc1BsdWdpbi5fY29ubmVjdGlvbnNVc2FnZS5hZGQoMSwge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgbmFtZTogcG9vbE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBvb2wub24oJ2FjcXVpcmUnLCBjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHRoaXNQbHVnaW4uX2Nvbm5lY3Rpb25zVXNhZ2UuYWRkKC0xLCB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiBwb29sTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpc1BsdWdpbi5fY29ubmVjdGlvbnNVc2FnZS5hZGQoMSwge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAndXNlZCcsXG4gICAgICAgICAgICAgICAgbmFtZTogcG9vbE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBvb2wub24oJ3JlbGVhc2UnLCBjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHRoaXNQbHVnaW4uX2Nvbm5lY3Rpb25zVXNhZ2UuYWRkKC0xLCB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICd1c2VkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiBwb29sTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpc1BsdWdpbi5fY29ubmVjdGlvbnNVc2FnZS5hZGQoMSwge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgbmFtZTogcG9vbE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5NeVNRTEluc3RydW1lbnRhdGlvbiA9IE15U1FMSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NeVNRTEluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk15U1FMSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5NeVNRTEluc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41NC4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1uZXN0anMtY29yZSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX0hUVFBfVVJMID0gZXhwb3J0cy5BVFRSX0hUVFBfTUVUSE9EID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBodHRwLnJlcXVlc3QubWV0aG9kYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIEdFVFxuICogQGV4YW1wbGUgUE9TVFxuICogQGV4YW1wbGUgSEVBRFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgaHR0cC5yZXF1ZXN0Lm1ldGhvZGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9IVFRQX01FVEhPRCA9ICdodHRwLm1ldGhvZCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgdXJsLmZ1bGxgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgaHR0cHM6Ly93d3cuZm9vLmJhci9zZWFyY2g/cT1PcGVuVGVsZW1ldHJ5I1NlbUNvbnZcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHVybC5mdWxsYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hUVFBfVVJMID0gJ2h0dHAudXJsJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiVkVSU0lPTlwiXSA9IFwibmVzdGpzLnZlcnNpb25cIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIlRZUEVcIl0gPSBcIm5lc3Rqcy50eXBlXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJNT0RVTEVcIl0gPSBcIm5lc3Rqcy5tb2R1bGVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkNPTlRST0xMRVJcIl0gPSBcIm5lc3Rqcy5jb250cm9sbGVyXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJDQUxMQkFDS1wiXSA9IFwibmVzdGpzLmNhbGxiYWNrXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJQSVBFU1wiXSA9IFwibmVzdGpzLnBpcGVzXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJJTlRFUkNFUFRPUlNcIl0gPSBcIm5lc3Rqcy5pbnRlcmNlcHRvcnNcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkdVQVJEU1wiXSA9IFwibmVzdGpzLmd1YXJkc1wiO1xufSkoQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzIHx8IChleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OZXN0VHlwZSA9IHZvaWQgMDtcbnZhciBOZXN0VHlwZTtcbihmdW5jdGlvbiAoTmVzdFR5cGUpIHtcbiAgICBOZXN0VHlwZVtcIkFQUF9DUkVBVElPTlwiXSA9IFwiYXBwX2NyZWF0aW9uXCI7XG4gICAgTmVzdFR5cGVbXCJSRVFVRVNUX0NPTlRFWFRcIl0gPSBcInJlcXVlc3RfY29udGV4dFwiO1xuICAgIE5lc3RUeXBlW1wiUkVRVUVTVF9IQU5ETEVSXCJdID0gXCJoYW5kbGVyXCI7XG59KShOZXN0VHlwZSA9IGV4cG9ydHMuTmVzdFR5cGUgfHwgKGV4cG9ydHMuTmVzdFR5cGUgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmVzdFR5cGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5lc3RUeXBlID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHZvaWQgMDtcbnZhciBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vQXR0cmlidXRlTmFtZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBdHRyaWJ1dGVOYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lczsgfSB9KTtcbnZhciBOZXN0VHlwZV8xID0gcmVxdWlyZShcIi4vTmVzdFR5cGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOZXN0VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTmVzdFR5cGVfMS5OZXN0VHlwZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OZXN0SW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3QgZW51bXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zXCIpO1xuY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBbJz49NC4wLjAgPDEyJ107XG5jbGFzcyBOZXN0SW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgc3RhdGljIENPTVBPTkVOVCA9ICdAbmVzdGpzL2NvcmUnO1xuICAgIHN0YXRpYyBDT01NT05fQVRUUklCVVRFUyA9IHtcbiAgICAgICAgY29tcG9uZW50OiBOZXN0SW5zdHJ1bWVudGF0aW9uLkNPTVBPTkVOVCxcbiAgICB9O1xuICAgIF9zZW1jb252U3RhYmlsaXR5O1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgPSAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2VtY29udlN0YWJpbGl0eUZyb21TdHIpKCdodHRwJywgcHJvY2Vzcy5lbnYuT1RFTF9TRU1DT05WX1NUQUJJTElUWV9PUFRfSU4pO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oTmVzdEluc3RydW1lbnRhdGlvbi5DT01QT05FTlQsIHN1cHBvcnRlZFZlcnNpb25zKTtcbiAgICAgICAgbW9kdWxlLmZpbGVzLnB1c2godGhpcy5nZXROZXN0RmFjdG9yeUZpbGVJbnN0cnVtZW50YXRpb24oc3VwcG9ydGVkVmVyc2lvbnMpLCB0aGlzLmdldFJvdXRlckV4ZWN1dGlvbkNvbnRleHRGaWxlSW5zdHJ1bWVudGF0aW9uKHN1cHBvcnRlZFZlcnNpb25zKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIGdldE5lc3RGYWN0b3J5RmlsZUluc3RydW1lbnRhdGlvbih2ZXJzaW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdAbmVzdGpzL2NvcmUvbmVzdC1mYWN0b3J5LmpzJywgdmVyc2lvbnMsIChOZXN0RmFjdG9yeVN0YXRpYywgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbnN1cmVXcmFwcGVkKE5lc3RGYWN0b3J5U3RhdGljLk5lc3RGYWN0b3J5U3RhdGljLnByb3RvdHlwZSwgJ2NyZWF0ZScsIGNyZWF0ZVdyYXBOZXN0RmFjdG9yeUNyZWF0ZSh0aGlzLnRyYWNlciwgbW9kdWxlVmVyc2lvbikpO1xuICAgICAgICAgICAgcmV0dXJuIE5lc3RGYWN0b3J5U3RhdGljO1xuICAgICAgICB9LCAoTmVzdEZhY3RvcnlTdGF0aWMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChOZXN0RmFjdG9yeVN0YXRpYy5OZXN0RmFjdG9yeVN0YXRpYy5wcm90b3R5cGUsICdjcmVhdGUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFJvdXRlckV4ZWN1dGlvbkNvbnRleHRGaWxlSW5zdHJ1bWVudGF0aW9uKHZlcnNpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ0BuZXN0anMvY29yZS9yb3V0ZXIvcm91dGVyLWV4ZWN1dGlvbi1jb250ZXh0LmpzJywgdmVyc2lvbnMsIChSb3V0ZXJFeGVjdXRpb25Db250ZXh0LCBtb2R1bGVWZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVdyYXBwZWQoUm91dGVyRXhlY3V0aW9uQ29udGV4dC5Sb3V0ZXJFeGVjdXRpb25Db250ZXh0LnByb3RvdHlwZSwgJ2NyZWF0ZScsIGNyZWF0ZVdyYXBDcmVhdGVIYW5kbGVyKHRoaXMudHJhY2VyLCBtb2R1bGVWZXJzaW9uLCB0aGlzLl9zZW1jb252U3RhYmlsaXR5KSk7XG4gICAgICAgICAgICByZXR1cm4gUm91dGVyRXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgfSwgKFJvdXRlckV4ZWN1dGlvbkNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChSb3V0ZXJFeGVjdXRpb25Db250ZXh0LlJvdXRlckV4ZWN1dGlvbkNvbnRleHQucHJvdG90eXBlLCAnY3JlYXRlJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbnN1cmVXcmFwcGVkKG9iaiwgbWV0aG9kTmFtZSwgd3JhcHBlcikge1xuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkob2JqW21ldGhvZE5hbWVdKSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG9iaiwgbWV0aG9kTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd3JhcChvYmosIG1ldGhvZE5hbWUsIHdyYXBwZXIpO1xuICAgIH1cbn1cbmV4cG9ydHMuTmVzdEluc3RydW1lbnRhdGlvbiA9IE5lc3RJbnN0cnVtZW50YXRpb247XG5mdW5jdGlvbiBjcmVhdGVXcmFwTmVzdEZhY3RvcnlDcmVhdGUodHJhY2VyLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBDcmVhdGUob3JpZ2luYWwpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVdpdGhUcmFjZShuZXN0TW9kdWxlXG4gICAgICAgIC8qIHNlcnZlck9yT3B0aW9ucyAqL1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKCdDcmVhdGUgTmVzdCBBcHAnLCB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5OZXN0SW5zdHJ1bWVudGF0aW9uLkNPTU1PTl9BVFRSSUJVVEVTLFxuICAgICAgICAgICAgICAgICAgICBbZW51bXNfMS5BdHRyaWJ1dGVOYW1lcy5UWVBFXTogZW51bXNfMS5OZXN0VHlwZS5BUFBfQ1JFQVRJT04sXG4gICAgICAgICAgICAgICAgICAgIFtlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLlZFUlNJT05dOiBtb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBbZW51bXNfMS5BdHRyaWJ1dGVOYW1lcy5NT0RVTEVdOiBuZXN0TW9kdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGkudHJhY2Uuc2V0U3BhbihhcGkuY29udGV4dC5hY3RpdmUoKSwgc3Bhbik7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aChzcGFuQ29udGV4dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBhZGRFcnJvcihzcGFuLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdyYXBDcmVhdGVIYW5kbGVyKHRyYWNlciwgbW9kdWxlVmVyc2lvbiwgc2VtY29udlN0YWJpbGl0eSkge1xuICAgIHJldHVybiBmdW5jdGlvbiB3cmFwQ3JlYXRlSGFuZGxlcihvcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlSGFuZGxlcldpdGhUcmFjZShpbnN0YW5jZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGFyZ3VtZW50c1sxXSA9IGNyZWF0ZVdyYXBIYW5kbGVyKHRyYWNlciwgbW9kdWxlVmVyc2lvbiwgY2FsbGJhY2spO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja05hbWUgPSBjYWxsYmFjay5uYW1lO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VOYW1lID0gaW5zdGFuY2UuY29uc3RydWN0b3IgJiYgaW5zdGFuY2UuY29uc3RydWN0b3IubmFtZVxuICAgICAgICAgICAgICAgID8gaW5zdGFuY2UuY29uc3RydWN0b3IubmFtZVxuICAgICAgICAgICAgICAgIDogJ1VubmFtZWRJbnN0YW5jZSc7XG4gICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGNhbGxiYWNrTmFtZVxuICAgICAgICAgICAgICAgID8gYCR7aW5zdGFuY2VOYW1lfS4ke2NhbGxiYWNrTmFtZX1gXG4gICAgICAgICAgICAgICAgOiBpbnN0YW5jZU5hbWU7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uTmVzdEluc3RydW1lbnRhdGlvbi5DT01NT05fQVRUUklCVVRFUyxcbiAgICAgICAgICAgICAgICAgICAgW2VudW1zXzEuQXR0cmlidXRlTmFtZXMuVkVSU0lPTl06IG1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIFtlbnVtc18xLkF0dHJpYnV0ZU5hbWVzLlRZUEVdOiBlbnVtc18xLk5lc3RUeXBlLlJFUVVFU1RfQ09OVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JPVVRFXTogcmVxLnJvdXRlPy5wYXRoIHx8IHJlcS5yb3V0ZU9wdGlvbnM/LnVybCB8fCByZXEucm91dGVyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgW2VudW1zXzEuQXR0cmlidXRlTmFtZXMuQ09OVFJPTExFUl06IGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgW2VudW1zXzEuQXR0cmlidXRlTmFtZXMuQ0FMTEJBQ0tdOiBjYWxsYmFja05hbWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfSFRUUF9NRVRIT0RdID0gcmVxLm1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252XzEuQVRUUl9IVFRQX1VSTF0gPSByZXEub3JpZ2luYWxVcmwgfHwgcmVxLnVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EXSA9IHJlcS5tZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VSTF9GVUxMXSA9IHJlcS5vcmlnaW5hbFVybCB8fCByZXEudXJsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgeyBhdHRyaWJ1dGVzIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gYXBpLnRyYWNlLnNldFNwYW4oYXBpLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKHNwYW5Db250ZXh0LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhZGRFcnJvcihzcGFuLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdyYXBIYW5kbGVyKHRyYWNlciwgbW9kdWxlVmVyc2lvbiwgaGFuZGxlcikge1xuICAgIGNvbnN0IHNwYW5OYW1lID0gaGFuZGxlci5uYW1lIHx8ICdhbm9ueW1vdXMgbmVzdCBoYW5kbGVyJztcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAuLi5OZXN0SW5zdHJ1bWVudGF0aW9uLkNPTU1PTl9BVFRSSUJVVEVTLFxuICAgICAgICAgICAgW2VudW1zXzEuQXR0cmlidXRlTmFtZXMuVkVSU0lPTl06IG1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICBbZW51bXNfMS5BdHRyaWJ1dGVOYW1lcy5UWVBFXTogZW51bXNfMS5OZXN0VHlwZS5SRVFVRVNUX0hBTkRMRVIsXG4gICAgICAgICAgICBbZW51bXNfMS5BdHRyaWJ1dGVOYW1lcy5DQUxMQkFDS106IGhhbmRsZXIubmFtZSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gYXBpLnRyYWNlLnNldFNwYW4oYXBpLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aChzcGFuQ29udGV4dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBhZGRFcnJvcihzcGFuLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKGhhbmRsZXIubmFtZSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod3JhcHBlZEhhbmRsZXIsICduYW1lJywgeyB2YWx1ZTogaGFuZGxlci5uYW1lIH0pO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbWV0YWRhdGEgYW5kIHNldCBvbnRvIHRoZSB3cmFwcGVyIHRvIGVuc3VyZSBvdGhlciBkZWNvcmF0b3JzICggaWU6IE5lc3RKUyBFdmVudFBhdHRlcm4gLyBSb2xlc0d1YXJkIClcbiAgICAvLyB3b24ndCBiZSBhZmZlY3RlZCBieSB0aGUgdXNlIG9mIHRoaXMgaW5zdHJ1bWVudGF0aW9uXG4gICAgUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoaGFuZGxlcikuZm9yRWFjaChtZXRhZGF0YUtleSA9PiB7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIFJlZmxlY3QuZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGhhbmRsZXIpLCB3cmFwcGVkSGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHdyYXBwZWRIYW5kbGVyO1xufVxuY29uc3QgYWRkRXJyb3IgPSAoc3BhbiwgZXJyb3IpID0+IHtcbiAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBhcGkuU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgcmV0dXJuIGVycm9yO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSBleHBvcnRzLk5lc3RJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOZXN0SW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5OZXN0SW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xudmFyIEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkF0dHJpYnV0ZU5hbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5FVF9UUkFOU1BPUlRfVkFMVUVfUElQRSA9IGV4cG9ydHMuTkVUX1RSQU5TUE9SVF9WQUxVRV9JUF9UQ1AgPSBleHBvcnRzLkFUVFJfTkVUX1RSQU5TUE9SVCA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfSVAgPSBleHBvcnRzLkFUVFJfTkVUX0hPU1RfUE9SVCA9IGV4cG9ydHMuQVRUUl9ORVRfSE9TVF9JUCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgbmV0d29yay5sb2NhbC5hZGRyZXNzYC5cbiAqXG4gKiBAZXhhbXBsZSBcIjE5Mi4xNjguMC4xXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYG5ldHdvcmsubG9jYWwuYWRkcmVzc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfSE9TVF9JUCA9ICduZXQuaG9zdC5pcCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLnBvcnRgLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9IT1NUX1BPUlQgPSAnbmV0Lmhvc3QucG9ydCc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgbmV0d29yay5wZWVyLmFkZHJlc3NgLlxuICpcbiAqIEBleGFtcGxlIFwiMTI3LjAuMC4xXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYG5ldHdvcmsucGVlci5hZGRyZXNzYC5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX0lQID0gJ25ldC5wZWVyLmlwJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSBleGFtcGxlLmNvbVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9ICduZXQucGVlci5wb3J0Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBuZXR3b3JrLnRyYW5zcG9ydGAuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBuZXR3b3JrLnRyYW5zcG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfVFJBTlNQT1JUID0gJ25ldC50cmFuc3BvcnQnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiaXBfdGNwXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9ORVRfVFJBTlNQT1JUfS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk5FVF9UUkFOU1BPUlRfVkFMVUVfSVBfVENQID0gJ2lwX3RjcCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJwaXBlXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9ORVRfVFJBTlNQT1JUfS5cbiAqXG4gKiBOYW1lZCBvciBhbm9ueW1vdXMgcGlwZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk5FVF9UUkFOU1BPUlRfVkFMVUVfUElQRSA9ICdwaXBlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRMU0F0dHJpYnV0ZXMgPSB2b2lkIDA7XG4vKiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG5vdCBvZmZpY2lhbCwgc2VlIG9wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktc3BlY2lmaWNhdGlvbiMxNjUyICovXG52YXIgVExTQXR0cmlidXRlcztcbihmdW5jdGlvbiAoVExTQXR0cmlidXRlcykge1xuICAgIFRMU0F0dHJpYnV0ZXNbXCJQUk9UT0NPTFwiXSA9IFwidGxzLnByb3RvY29sXCI7XG4gICAgVExTQXR0cmlidXRlc1tcIkFVVEhPUklaRURcIl0gPSBcInRscy5hdXRob3JpemVkXCI7XG4gICAgVExTQXR0cmlidXRlc1tcIkNJUEhFUl9OQU1FXCJdID0gXCJ0bHMuY2lwaGVyLm5hbWVcIjtcbiAgICBUTFNBdHRyaWJ1dGVzW1wiQ0lQSEVSX1ZFUlNJT05cIl0gPSBcInRscy5jaXBoZXIudmVyc2lvblwiO1xuICAgIFRMU0F0dHJpYnV0ZXNbXCJDRVJUSUZJQ0FURV9GSU5HRVJQUklOVFwiXSA9IFwidGxzLmNlcnRpZmljYXRlLmZpbmdlcnByaW50XCI7XG4gICAgVExTQXR0cmlidXRlc1tcIkNFUlRJRklDQVRFX1NFUklBTF9OVU1CRVJcIl0gPSBcInRscy5jZXJ0aWZpY2F0ZS5zZXJpYWxOdW1iZXJcIjtcbiAgICBUTFNBdHRyaWJ1dGVzW1wiQ0VSVElGSUNBVEVfVkFMSURfRlJPTVwiXSA9IFwidGxzLmNlcnRpZmljYXRlLnZhbGlkRnJvbVwiO1xuICAgIFRMU0F0dHJpYnV0ZXNbXCJDRVJUSUZJQ0FURV9WQUxJRF9UT1wiXSA9IFwidGxzLmNlcnRpZmljYXRlLnZhbGlkVG9cIjtcbiAgICBUTFNBdHRyaWJ1dGVzW1wiQUxQTl9QUk9UT0NPTFwiXSA9IFwidGxzLmFscG5Qcm90b2NvbFwiO1xufSkoVExTQXR0cmlidXRlcyA9IGV4cG9ydHMuVExTQXR0cmlidXRlcyB8fCAoZXhwb3J0cy5UTFNBdHRyaWJ1dGVzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Tb2NrZXRFdmVudCA9IHZvaWQgMDtcbnZhciBTb2NrZXRFdmVudDtcbihmdW5jdGlvbiAoU29ja2V0RXZlbnQpIHtcbiAgICBTb2NrZXRFdmVudFtcIkNMT1NFXCJdID0gXCJjbG9zZVwiO1xuICAgIFNvY2tldEV2ZW50W1wiQ09OTkVDVFwiXSA9IFwiY29ubmVjdFwiO1xuICAgIFNvY2tldEV2ZW50W1wiRVJST1JcIl0gPSBcImVycm9yXCI7XG4gICAgU29ja2V0RXZlbnRbXCJTRUNVUkVfQ09OTkVDVFwiXSA9IFwic2VjdXJlQ29ubmVjdFwiO1xufSkoU29ja2V0RXZlbnQgPSBleHBvcnRzLlNvY2tldEV2ZW50IHx8IChleHBvcnRzLlNvY2tldEV2ZW50ID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVybmFsLXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXROb3JtYWxpemVkQXJncyA9IGV4cG9ydHMuSVBDX1RSQU5TUE9SVCA9IHZvaWQgMDtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuLy8gQ3VycmVudGx5IHRoZSBgSVBDX1RSQU5TUE9SVGAgdmFsdWVzIGFyZSBmb3IgJ25ldC50cmFuc3BvcnQnLiBJbiBzZW1jb252XG4vLyB2MS4yMS4wIGEgYnJlYWtpbmcgY2hhbmdlIChodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1zcGVjaWZpY2F0aW9uL3B1bGwvMzQyNilcbi8vIHJlcGxhY2VkICduZXQudHJhbnNwb3J0JyB3aXRoICduZXR3b3JrLnRyYW5zcG9ydCcuIFRoZSBkZXByZWNhdGVkXG4vLyAnbmV0LnRyYW5zcG9ydCcgKnJlbW92ZWQqIHRoZSAndW5peCcgdmFsdWUgKG5vdCBzdXJlIGlmIGludGVudGlvbmFsKS4gQXMgYVxuLy8gcmVzdWx0LCB0aGUgSlMgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYCBwYWNrYWdlIGRvZXMgbm90IGV4cG9ydFxuLy8gYSBgTkVUX1RSQU5TUE9SVF9WQUxVRV9VTklYYC5cbi8vXG4vLyAoVE9ETzogdXBkYXRlIGluc3RydW1lbnRhdGlvbi1uZXQgKHBlciBQUi0zNDI2KSB0byB1c2UgJ25ldHdvcmsudHJhbnNwb3J0Jyxcbi8vIHRoZW4gdGhlIGBORVRXT1JLX1RSQU5TUE9SVF9WQUxVRV9VTklYYCBjb25zdGFudCBjYW4gYmUgdXNlZC4pXG5leHBvcnRzLklQQ19UUkFOU1BPUlQgPSAoMCwgb3NfMS5wbGF0Zm9ybSkoKSA9PT0gJ3dpbjMyJyA/IHNlbWNvbnZfMS5ORVRfVFJBTlNQT1JUX1ZBTFVFX1BJUEUgOiAndW5peCc7XG5mdW5jdGlvbiBnZXRIb3N0KGFyZ3MpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnID8gYXJnc1sxXSA6ICdsb2NhbGhvc3QnO1xufVxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEFyZ3MoYXJncykge1xuICAgIGNvbnN0IG9wdCA9IGFyZ3NbMF07XG4gICAgaWYgKCFvcHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiBvcHQpIHtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcG9ydDogb3B0LFxuICAgICAgICAgICAgICAgIGhvc3Q6IGdldEhvc3QoYXJncyksXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXROb3JtYWxpemVkQXJncyhvcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdDtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzoge1xuICAgICAgICAgICAgY29uc3QgbWF5YmVQb3J0ID0gTnVtYmVyKG9wdCk7XG4gICAgICAgICAgICBpZiAobWF5YmVQb3J0ID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwb3J0OiBtYXliZVBvcnQsXG4gICAgICAgICAgICAgICAgICAgIGhvc3Q6IGdldEhvc3QoYXJncyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0aDogb3B0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0Tm9ybWFsaXplZEFyZ3MgPSBnZXROb3JtYWxpemVkQXJncztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41MS4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1uZXQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTmV0SW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4vc2VtY29udlwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNsYXNzIE5ldEluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ25ldCcsIFsnKiddLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLlNvY2tldC5wcm90b3R5cGUuY29ubmVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuU29ja2V0LnByb3RvdHlwZSwgJ2Nvbm5lY3QnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlNvY2tldC5wcm90b3R5cGUsICdjb25uZWN0JywgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRQYXRjaGVkQ29ubmVjdCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLlNvY2tldC5wcm90b3R5cGUsICdjb25uZWN0Jyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRDb25uZWN0KCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDb25uZWN0KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKDAsIHV0aWxzXzEuZ2V0Tm9ybWFsaXplZEFyZ3MpKGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzIGluc3RhbmNlb2YgdGxzXzEuVExTU29ja2V0XG4gICAgICAgICAgICAgICAgICAgID8gcGx1Z2luLl9zdGFydFRMU1NwYW4ob3B0aW9ucywgdGhpcylcbiAgICAgICAgICAgICAgICAgICAgOiBwbHVnaW4uX3N0YXJ0U3BhbihvcHRpb25zLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpLCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3N0YXJ0U3BhbihvcHRpb25zLCBzb2NrZXQpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRHZW5lcmljU3Bhbihzb2NrZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydElwY1NwYW4ob3B0aW9ucywgc29ja2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRUY3BTcGFuKG9wdGlvbnMsIHNvY2tldCk7XG4gICAgfVxuICAgIF9zdGFydFRMU1NwYW4ob3B0aW9ucywgc29ja2V0KSB7XG4gICAgICAgIGNvbnN0IHRsc1NwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oJ3Rscy5jb25uZWN0Jyk7XG4gICAgICAgIGNvbnN0IG5ldFNwYW4gPSBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCB0bHNTcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BhbihvcHRpb25zLCBzb2NrZXQpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3RlbFRsc1NwYW5MaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlZXJDZXJ0aWZpY2F0ZSA9IHNvY2tldC5nZXRQZWVyQ2VydGlmaWNhdGUodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBjaXBoZXIgPSBzb2NrZXQuZ2V0Q2lwaGVyKCk7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IHNvY2tldC5nZXRQcm90b2NvbCgpO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBbdHlwZXNfMS5UTFNBdHRyaWJ1dGVzLlBST1RPQ09MXTogU3RyaW5nKHByb3RvY29sKSxcbiAgICAgICAgICAgICAgICBbdHlwZXNfMS5UTFNBdHRyaWJ1dGVzLkFVVEhPUklaRURdOiBTdHJpbmcoc29ja2V0LmF1dGhvcml6ZWQpLFxuICAgICAgICAgICAgICAgIFt0eXBlc18xLlRMU0F0dHJpYnV0ZXMuQ0lQSEVSX05BTUVdOiBjaXBoZXIubmFtZSxcbiAgICAgICAgICAgICAgICBbdHlwZXNfMS5UTFNBdHRyaWJ1dGVzLkNJUEhFUl9WRVJTSU9OXTogY2lwaGVyLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgW3R5cGVzXzEuVExTQXR0cmlidXRlcy5DRVJUSUZJQ0FURV9GSU5HRVJQUklOVF06IHBlZXJDZXJ0aWZpY2F0ZS5maW5nZXJwcmludCxcbiAgICAgICAgICAgICAgICBbdHlwZXNfMS5UTFNBdHRyaWJ1dGVzLkNFUlRJRklDQVRFX1NFUklBTF9OVU1CRVJdOiBwZWVyQ2VydGlmaWNhdGUuc2VyaWFsTnVtYmVyLFxuICAgICAgICAgICAgICAgIFt0eXBlc18xLlRMU0F0dHJpYnV0ZXMuQ0VSVElGSUNBVEVfVkFMSURfRlJPTV06IHBlZXJDZXJ0aWZpY2F0ZS52YWxpZF9mcm9tLFxuICAgICAgICAgICAgICAgIFt0eXBlc18xLlRMU0F0dHJpYnV0ZXMuQ0VSVElGSUNBVEVfVkFMSURfVE9dOiBwZWVyQ2VydGlmaWNhdGUudmFsaWRfdG8sXG4gICAgICAgICAgICAgICAgW3R5cGVzXzEuVExTQXR0cmlidXRlcy5BTFBOX1BST1RPQ09MXTogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHNvY2tldC5hbHBuUHJvdG9jb2wpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3R5cGVzXzEuVExTQXR0cmlidXRlcy5BTFBOX1BST1RPQ09MXSA9IHNvY2tldC5hbHBuUHJvdG9jb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0bHNTcGFuLnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0bHNTcGFuLmVuZCgpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvdGVsVGxzRXJyb3JMaXN0ZW5lciA9IChlKSA9PiB7XG4gICAgICAgICAgICB0bHNTcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bHNTcGFuLmVuZCgpO1xuICAgICAgICB9O1xuICAgICAgICAvKiBpZiB3ZSB1c2Ugb25jZSBhbmQgdGxzLmNvbm5lY3QoKSB1c2VzIGEgY2FsbGJhY2sgdGhpcyBpcyBuZXZlciBleGVjdXRlZCAqL1xuICAgICAgICBzb2NrZXQucHJlcGVuZE9uY2VMaXN0ZW5lcihpbnRlcm5hbF90eXBlc18xLlNvY2tldEV2ZW50LlNFQ1VSRV9DT05ORUNULCBvdGVsVGxzU3Bhbkxpc3RlbmVyKTtcbiAgICAgICAgc29ja2V0Lm9uY2UoaW50ZXJuYWxfdHlwZXNfMS5Tb2NrZXRFdmVudC5FUlJPUiwgb3RlbFRsc0Vycm9yTGlzdGVuZXIpO1xuICAgICAgICBjb25zdCBvdGVsVGxzUmVtb3ZlTGlzdGVuZXJzID0gKCkgPT4ge1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuU0VDVVJFX0NPTk5FQ1QsIG90ZWxUbHNTcGFuTGlzdGVuZXIpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuRVJST1IsIG90ZWxUbHNFcnJvckxpc3RlbmVyKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgU09DS0VUX0VWRU5UUykge1xuICAgICAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihldmVudCwgb3RlbFRsc1JlbW92ZUxpc3RlbmVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgW1xuICAgICAgICAgICAgaW50ZXJuYWxfdHlwZXNfMS5Tb2NrZXRFdmVudC5DTE9TRSxcbiAgICAgICAgICAgIGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuRVJST1IsXG4gICAgICAgICAgICBpbnRlcm5hbF90eXBlc18xLlNvY2tldEV2ZW50LlNFQ1VSRV9DT05ORUNULFxuICAgICAgICBdKSB7XG4gICAgICAgICAgICBzb2NrZXQub25jZShldmVudCwgb3RlbFRsc1JlbW92ZUxpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldFNwYW47XG4gICAgfVxuICAgIC8qIEl0IG1pZ2h0IHN0aWxsIGJlIHVzZWZ1bCB0byBwaWNrIHVwIGVycm9ycyBkdWUgdG8gaW52YWxpZCBjb25uZWN0IGFyZ3VtZW50cy4gKi9cbiAgICBfc3RhcnRHZW5lcmljU3Bhbihzb2NrZXQpIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMudHJhY2VyLnN0YXJ0U3BhbignY29ubmVjdCcpO1xuICAgICAgICByZWdpc3Rlckxpc3RlbmVycyhzb2NrZXQsIHNwYW4pO1xuICAgICAgICByZXR1cm4gc3BhbjtcbiAgICB9XG4gICAgX3N0YXJ0SXBjU3BhbihvcHRpb25zLCBzb2NrZXQpIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMudHJhY2VyLnN0YXJ0U3BhbignaXBjLmNvbm5lY3QnLCB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9UUkFOU1BPUlRdOiB1dGlsc18xLklQQ19UUkFOU1BPUlQsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdOiBvcHRpb25zLnBhdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVnaXN0ZXJMaXN0ZW5lcnMoc29ja2V0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgfVxuICAgIF9zdGFydFRjcFNwYW4ob3B0aW9ucywgc29ja2V0KSB7XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oJ3RjcC5jb25uZWN0Jywge1xuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfVFJBTlNQT1JUXTogc2VtY29udl8xLk5FVF9UUkFOU1BPUlRfVkFMVUVfSVBfVENQLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogb3B0aW9ucy5ob3N0LFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogb3B0aW9ucy5wb3J0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZ2lzdGVyTGlzdGVuZXJzKHNvY2tldCwgc3BhbiwgeyBob3N0QXR0cmlidXRlczogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgfVxufVxuZXhwb3J0cy5OZXRJbnN0cnVtZW50YXRpb24gPSBOZXRJbnN0cnVtZW50YXRpb247XG5jb25zdCBTT0NLRVRfRVZFTlRTID0gW1xuICAgIGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuQ0xPU0UsXG4gICAgaW50ZXJuYWxfdHlwZXNfMS5Tb2NrZXRFdmVudC5DT05ORUNULFxuICAgIGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuRVJST1IsXG5dO1xuZnVuY3Rpb24gc3BhbkVuZEhhbmRsZXIoc3Bhbikge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNwYW5FcnJvckhhbmRsZXIoc3Bhbikge1xuICAgIHJldHVybiAoZSkgPT4ge1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyTGlzdGVuZXJzKHNvY2tldCwgc3BhbiwgeyBob3N0QXR0cmlidXRlcyA9IGZhbHNlIH0gPSB7fSkge1xuICAgIGNvbnN0IHNldFNwYW5FcnJvciA9IHNwYW5FcnJvckhhbmRsZXIoc3Bhbik7XG4gICAgY29uc3Qgc2V0U3BhbkVuZCA9IHNwYW5FbmRIYW5kbGVyKHNwYW4pO1xuICAgIGNvbnN0IHNldEhvc3RBdHRyaWJ1dGVzID0gKCkgPT4ge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX0lQXTogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX0hPU1RfSVBdOiBzb2NrZXQubG9jYWxBZGRyZXNzLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9IT1NUX1BPUlRdOiBzb2NrZXQubG9jYWxQb3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNvY2tldC5vbmNlKGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuRVJST1IsIHNldFNwYW5FcnJvcik7XG4gICAgaWYgKGhvc3RBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHNvY2tldC5vbmNlKGludGVybmFsX3R5cGVzXzEuU29ja2V0RXZlbnQuQ09OTkVDVCwgc2V0SG9zdEF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICBjb25zdCByZW1vdmVMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihpbnRlcm5hbF90eXBlc18xLlNvY2tldEV2ZW50LkVSUk9SLCBzZXRTcGFuRXJyb3IpO1xuICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoaW50ZXJuYWxfdHlwZXNfMS5Tb2NrZXRFdmVudC5DT05ORUNULCBzZXRIb3N0QXR0cmlidXRlcyk7XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgU09DS0VUX0VWRU5UUykge1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBzZXRTcGFuRW5kKTtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcihldmVudCwgcmVtb3ZlTGlzdGVuZXJzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBTT0NLRVRfRVZFTlRTKSB7XG4gICAgICAgIHNvY2tldC5vbmNlKGV2ZW50LCBzZXRTcGFuRW5kKTtcbiAgICAgICAgc29ja2V0Lm9uY2UoZXZlbnQsIHJlbW92ZUxpc3RlbmVycyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UTFNBdHRyaWJ1dGVzID0gZXhwb3J0cy5OZXRJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOZXRJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLk5ldEluc3RydW1lbnRhdGlvbjsgfSB9KTtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUTFNBdHRyaWJ1dGVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlc18xLlRMU0F0dHJpYnV0ZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTUVUUklDX0dFTl9BSV9DTElFTlRfVE9LRU5fVVNBR0UgPSBleHBvcnRzLk1FVFJJQ19HRU5fQUlfQ0xJRU5UX09QRVJBVElPTl9EVVJBVElPTiA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUyA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9UT0tFTl9UWVBFID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9TWVNURU0gPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFU1BPTlNFX01PREVMID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVNQT05TRV9JRCA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfVE9QX1AgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfVEVNUEVSQVRVUkUgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfU1RPUF9TRVFVRU5DRVMgPSBleHBvcnRzLkFUVFJfR0VOX0FJX1JFUVVFU1RfUFJFU0VOQ0VfUEVOQUxUWSA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTCA9IGV4cG9ydHMuQVRUUl9HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX0ZSRVFVRU5DWV9QRU5BTFRZID0gZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX0VOQ09ESU5HX0ZPUk1BVFMgPSBleHBvcnRzLkFUVFJfR0VOX0FJX09QRVJBVElPTl9OQU1FID0gZXhwb3J0cy5BVFRSX0VWRU5UX05BTUUgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBjbGFzcyAvIHR5cGUgb2YgZXZlbnQuXG4gKlxuICogQGV4YW1wbGUgYnJvd3Nlci5tb3VzZS5jbGlja1xuICogQGV4YW1wbGUgZGV2aWNlLmFwcC5saWZlY3ljbGVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgRXZlbnROYW1lIHRvcC1sZXZlbCBmaWVsZCBvbiB0aGUgTG9nUmVjb3JkLlxuICovXG5leHBvcnRzLkFUVFJfRVZFTlRfTkFNRSA9ICdldmVudC5uYW1lJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQuXG4gKlxuICogQG5vdGUgSWYgb25lIG9mIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBhcHBsaWVzLCBidXQgc3BlY2lmaWMgc3lzdGVtIHVzZXMgYSBkaWZmZXJlbnQgbmFtZSBpdCdzICoqUkVDT01NRU5ERUQqKiB0byBkb2N1bWVudCBpdCBpbiB0aGUgc2VtYW50aWMgY29udmVudGlvbnMgZm9yIHNwZWNpZmljIEdlbkFJIHN5c3RlbSBhbmQgdXNlIHN5c3RlbS1zcGVjaWZpYyBuYW1lIGluIHRoZSBpbnN0cnVtZW50YXRpb24uIElmIGEgZGlmZmVyZW50IG5hbWUgaXMgbm90IGRvY3VtZW50ZWQsIGluc3RydW1lbnRhdGlvbiBsaWJyYXJpZXMgKipTSE9VTEQqKiB1c2UgYXBwbGljYWJsZSBwcmVkZWZpbmVkIHZhbHVlLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9PUEVSQVRJT05fTkFNRSA9ICdnZW5fYWkub3BlcmF0aW9uLm5hbWUnO1xuLyoqXG4gKiBUaGUgZW5jb2RpbmcgZm9ybWF0cyByZXF1ZXN0ZWQgaW4gYW4gZW1iZWRkaW5ncyBvcGVyYXRpb24sIGlmIHNwZWNpZmllZC5cbiAqXG4gKiBAZXhhbXBsZSBbXCJiYXNlNjRcIl1cbiAqIEBleGFtcGxlIFtcImZsb2F0XCIsIFwiYmluYXJ5XCJdXG4gKlxuICogQG5vdGUgSW4gc29tZSBHZW5BSSBzeXN0ZW1zIHRoZSBlbmNvZGluZyBmb3JtYXRzIGFyZSBjYWxsZWQgZW1iZWRkaW5nIHR5cGVzLiBBbHNvLCBzb21lIEdlbkFJIHN5c3RlbXMgb25seSBhY2NlcHQgYSBzaW5nbGUgZm9ybWF0IHBlciByZXF1ZXN0LlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX0VOQ09ESU5HX0ZPUk1BVFMgPSAnZ2VuX2FpLnJlcXVlc3QuZW5jb2RpbmdfZm9ybWF0cyc7XG4vKipcbiAqIFRoZSBmcmVxdWVuY3kgcGVuYWx0eSBzZXR0aW5nIGZvciB0aGUgR2VuQUkgcmVxdWVzdC5cbiAqXG4gKiBAZXhhbXBsZSAwLjFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfUkVRVUVTVF9GUkVRVUVOQ1lfUEVOQUxUWSA9ICdnZW5fYWkucmVxdWVzdC5mcmVxdWVuY3lfcGVuYWx0eSc7XG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0b2tlbnMgdGhlIG1vZGVsIGdlbmVyYXRlcyBmb3IgYSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDEwMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX01BWF9UT0tFTlMgPSAnZ2VuX2FpLnJlcXVlc3QubWF4X3Rva2Vucyc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBHZW5BSSBtb2RlbCBhIHJlcXVlc3QgaXMgYmVpbmcgbWFkZSB0by5cbiAqXG4gKiBAZXhhbXBsZSBcImdwdC00XCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTCA9ICdnZW5fYWkucmVxdWVzdC5tb2RlbCc7XG4vKipcbiAqIFRoZSBwcmVzZW5jZSBwZW5hbHR5IHNldHRpbmcgZm9yIHRoZSBHZW5BSSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDAuMVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1BSRVNFTkNFX1BFTkFMVFkgPSAnZ2VuX2FpLnJlcXVlc3QucHJlc2VuY2VfcGVuYWx0eSc7XG4vKipcbiAqIExpc3Qgb2Ygc2VxdWVuY2VzIHRoYXQgdGhlIG1vZGVsIHdpbGwgdXNlIHRvIHN0b3AgZ2VuZXJhdGluZyBmdXJ0aGVyIHRva2Vucy5cbiAqXG4gKiBAZXhhbXBsZSBbXCJmb3Jlc3RcIiwgXCJsaXZlZFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTID0gJ2dlbl9haS5yZXF1ZXN0LnN0b3Bfc2VxdWVuY2VzJztcbi8qKlxuICogVGhlIHRlbXBlcmF0dXJlIHNldHRpbmcgZm9yIHRoZSBHZW5BSSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDAuMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFID0gJ2dlbl9haS5yZXF1ZXN0LnRlbXBlcmF0dXJlJztcbi8qKlxuICogVGhlIHRvcF9wIHNhbXBsaW5nIHNldHRpbmcgZm9yIHRoZSBHZW5BSSByZXF1ZXN0LlxuICpcbiAqIEBleGFtcGxlIDEuMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QID0gJ2dlbl9haS5yZXF1ZXN0LnRvcF9wJztcbi8qKlxuICogQXJyYXkgb2YgcmVhc29ucyB0aGUgbW9kZWwgc3RvcHBlZCBnZW5lcmF0aW5nIHRva2VucywgY29ycmVzcG9uZGluZyB0byBlYWNoIGdlbmVyYXRpb24gcmVjZWl2ZWQuXG4gKlxuICogQGV4YW1wbGUgW1wic3RvcFwiXVxuICogQGV4YW1wbGUgW1wic3RvcFwiLCBcImxlbmd0aFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUyA9ICdnZW5fYWkucmVzcG9uc2UuZmluaXNoX3JlYXNvbnMnO1xuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wbGV0aW9uLlxuICpcbiAqIEBleGFtcGxlIGNoYXRjbXBsLTEyM1xuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9SRVNQT05TRV9JRCA9ICdnZW5fYWkucmVzcG9uc2UuaWQnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbW9kZWwgdGhhdCBnZW5lcmF0ZWQgdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBleGFtcGxlIGdwdC00LTA2MTNcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfUkVTUE9OU0VfTU9ERUwgPSAnZ2VuX2FpLnJlc3BvbnNlLm1vZGVsJztcbi8qKlxuICogVGhlIEdlbmVyYXRpdmUgQUkgcHJvZHVjdCBhcyBpZGVudGlmaWVkIGJ5IHRoZSBjbGllbnQgb3Igc2VydmVyIGluc3RydW1lbnRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSBcIm9wZW5haVwiXG4gKlxuICogQG5vdGUgVGhlIGBnZW5fYWkuc3lzdGVtYCBkZXNjcmliZXMgYSBmYW1pbHkgb2YgR2VuQUkgbW9kZWxzIHdpdGggc3BlY2lmaWMgbW9kZWwgaWRlbnRpZmllZFxuICogYnkgYGdlbl9haS5yZXF1ZXN0Lm1vZGVsYCBhbmQgYGdlbl9haS5yZXNwb25zZS5tb2RlbGAgYXR0cmlidXRlcy5cbiAqXG4gKiBUaGUgYWN0dWFsIEdlbkFJIHByb2R1Y3QgbWF5IGRpZmZlciBmcm9tIHRoZSBvbmUgaWRlbnRpZmllZCBieSB0aGUgY2xpZW50LlxuICogTXVsdGlwbGUgc3lzdGVtcywgaW5jbHVkaW5nIEF6dXJlIE9wZW5BSSBhbmQgR2VtaW5pLCBhcmUgYWNjZXNzaWJsZSBieSBPcGVuQUkgY2xpZW50XG4gKiBsaWJyYXJpZXMuIEluIHN1Y2ggY2FzZXMsIHRoZSBgZ2VuX2FpLnN5c3RlbWAgaXMgc2V0IHRvIGBvcGVuYWlgIGJhc2VkIG9uIHRoZVxuICogaW5zdHJ1bWVudGF0aW9uJ3MgYmVzdCBrbm93bGVkZ2UsIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBzeXN0ZW0uIFRoZSBgc2VydmVyLmFkZHJlc3NgXG4gKiBhdHRyaWJ1dGUgbWF5IGhlbHAgaWRlbnRpZnkgdGhlIGFjdHVhbCBzeXN0ZW0gaW4gdXNlIGZvciBgb3BlbmFpYC5cbiAqXG4gKiBGb3IgY3VzdG9tIG1vZGVsLCBhIGN1c3RvbSBmcmllbmRseSBuYW1lICoqU0hPVUxEKiogYmUgdXNlZC5cbiAqIElmIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucyBhcHBseSwgdGhlIGBnZW5fYWkuc3lzdGVtYCAqKlNIT1VMRCoqIGJlIHNldCB0byBgX09USEVSYC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfU1lTVEVNID0gJ2dlbl9haS5zeXN0ZW0nO1xuLyoqXG4gKiBUaGUgdHlwZSBvZiB0b2tlbiBiZWluZyBjb3VudGVkLlxuICpcbiAqIEBleGFtcGxlIGlucHV0XG4gKiBAZXhhbXBsZSBvdXRwdXRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfVE9LRU5fVFlQRSA9ICdnZW5fYWkudG9rZW4udHlwZSc7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgdG9rZW5zIHVzZWQgaW4gdGhlIEdlbkFJIGlucHV0IChwcm9tcHQpLlxuICpcbiAqIEBleGFtcGxlIDEwMFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMgPSAnZ2VuX2FpLnVzYWdlLmlucHV0X3Rva2Vucyc7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgdG9rZW5zIHVzZWQgaW4gdGhlIEdlbkFJIHJlc3BvbnNlIChjb21wbGV0aW9uKS5cbiAqXG4gKiBAZXhhbXBsZSAxODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUyA9ICdnZW5fYWkudXNhZ2Uub3V0cHV0X3Rva2Vucyc7XG4vKipcbiAqIEdlbkFJIG9wZXJhdGlvbiBkdXJhdGlvblxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfR0VOX0FJX0NMSUVOVF9PUEVSQVRJT05fRFVSQVRJT04gPSAnZ2VuX2FpLmNsaWVudC5vcGVyYXRpb24uZHVyYXRpb24nO1xuLyoqXG4gKiBNZWFzdXJlcyBudW1iZXIgb2YgaW5wdXQgYW5kIG91dHB1dCB0b2tlbnMgdXNlZFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfR0VOX0FJX0NMSUVOVF9UT0tFTl9VU0FHRSA9ICdnZW5fYWkuY2xpZW50LnRva2VuLnVzYWdlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjUuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tb3BlbmFpJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0QXR0cnNGcm9tQmFzZVVSTCA9IGV4cG9ydHMuZ2V0RW52Qm9vbCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuLyoqXG4gKiBSZWFkIGEgYm9vbGVhbiBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICpcbiAqIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL290ZWwvY29uZmlndXJhdGlvbi9zZGstZW52aXJvbm1lbnQtdmFyaWFibGVzLyNib29sZWFuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkfVxuICogICAgLSBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnZ2YXIgaXMgbm90IHNldCBvbiBgcHJvY2Vzcy5lbnZgIG9yIGlzXG4gKiAgICAgIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMgaW5kaWNhdGVzIHRoYXQgbm8gZXhwbGljaXQgdmFsdWUgd2FzIGdpdmVuLFxuICogICAgICB3aGljaCBtYXkgYmUgYSB1c2VmdWwgZGlzdGluY3Rpb24gZnJvbSBhbiBleHBsaWNpdCBgZmFsc2VgIGZvciBjYWxsZXJzLlxuICogICAgLSBSZXR1cm5zIGB0cnVlYCBpZmYgdGhlIGVudnZhciB2YWx1ZSBpcyB0aGUgc3RyaW5nIFwidHJ1ZVwiIChjYXNlLWluc2Vuc2l0aXZlKS5cbiAqICAgIC0gUmV0dXJucyBgZmFsc2VgLCBpZmYgdGhlIGVudnZhciB2YWx1ZSBpcyB0aGUgc3RyaW5nIFwiZmFsc2VcIiAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gKiAgICAtIE90aGVyd2lzZSwgaXQgYGRpYWcud2FybigpYHMgYWJvdXQgdGhlIGludmFsaWQgdmFsdWUgYW5kIHJldHVybnNcbiAqICAgICAgYHVuZGVmaW5lZGAgYXMgYSAoZmFsc2V5KSBmYWxsYmFjay5cbiAqIEB0aHJvd3MgaWYgdGhlIGVudnZhciB2YWx1ZSBpcyBzZXQgYW5kIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRFbnZCb29sKG5hbWUsIGRpYWdfID0gYXBpXzEuZGlhZykge1xuICAgIGNvbnN0IHZhbCA9IHByb2Nlc3MuZW52W25hbWVdO1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0eXBlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZTogJHt0eXBlb2YgdmFsfSAoJHtuYW1lfT0ke3ZhbH0pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB2YWxMb3dlciA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodmFsTG93ZXIgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsTG93ZXIgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRpYWdfLndhcm4oYGludmFsaWQgYm9vbGVhbiB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGU6ICR7bmFtZX09JHt2YWx9OyBpZ25vcmluZ2ApO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RW52Qm9vbCA9IGdldEVudkJvb2w7XG5jb25zdCBTRVJWRVJfUE9SVF9GUk9NX1VSTF9QUk9UT0NPTCA9IHtcbiAgICAnaHR0cHM6JzogNDQzLFxuICAgICdodHRwOic6IDgwLFxufTtcbi8qKlxuICogUmV0dXJuIHNwYW4vbWV0cmljIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZ2l2ZW4gT3BlbkFJIGNsaWVudCBiYXNlVVJMLlxuICovXG5mdW5jdGlvbiBnZXRBdHRyc0Zyb21CYXNlVVJMKGJhc2VVUkwsIGRpYWdfID0gYXBpXzEuZGlhZykge1xuICAgIGlmICghYmFzZVVSTCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE86IHdvdWxkIGJlIG5pY2UgdG8gTFJVIGNhY2hlIHRoaXMsIGJ1dCBwcm9iYWJseSBub3Qgc2lnbmlmaWNhbnQgcGVyZlxuICAgIGxldCB1O1xuICAgIHRyeSB7XG4gICAgICAgIHUgPSBuZXcgVVJMKGJhc2VVUkwpO1xuICAgIH1cbiAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgLy8gTm90ZTogV2Ugc2hvdWxkIG5ldmVyIGdldCB0byB0aGlzIHBvaW50IGFzIG9wZW5haSBzaG91bGQgY3Jhc2ggcHJpb3IgdG8gdGhpcy5cbiAgICAgICAgLy8gRXZlbiBpZiBpdCBkaWQsIGluc3RydW1lbnRhdGlvbiB3aWxsIHN0aWxsIHdvcmsgZXhjZXB0IGxhY2tpbmcgdGhlc2UgYXR0cmlidXRlcy5cbiAgICAgICAgZGlhZ18uZGVidWcoYGNvdWxkIG5vdCBkZXRlcm1pbmUgc2VydmVyLnthZGRyZXNzLHBvcnR9IGZyb20gYmFzZVVSTDogJHtleH1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogdS5ob3N0bmFtZSxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfUE9SVF06IHUucG9ydFxuICAgICAgICAgICAgPyBOdW1iZXIodS5wb3J0KVxuICAgICAgICAgICAgOiBTRVJWRVJfUE9SVF9GUk9NX1VSTF9QUk9UT0NPTFt1LnByb3RvY29sXSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRBdHRyc0Zyb21CYXNlVVJMID0gZ2V0QXR0cnNGcm9tQmFzZVVSTDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PcGVuQUlJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vLyBhdm9pZHMgYSBkZXBlbmRlbmN5IG9uIEBvcGVudGVsZW1ldHJ5L2NvcmUgZm9yIGhyVGltZSB1dGlsaXRpZXNcbmNvbnN0IHBlcmZfaG9va3NfMSA9IHJlcXVpcmUoXCJwZXJmX2hvb2tzXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3QgYXBpX2xvZ3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGktbG9nc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vLyBUaGUgSlMgc2VtY29udiBwYWNrYWdlIGRvZXNuJ3QgeWV0IGVtaXQgY29uc3RhbnRzIGZvciBldmVudCBuYW1lcy5cbi8vIFRPRE86IG90ZWwtanMgaXNzdWUgZm9yIHNlbWNvbnYgcGtnIG5vdCBpbmNsdWRpbmcgZXZlbnQgbmFtZXNcbmNvbnN0IEVWRU5UX0dFTl9BSV9TWVNURU1fTUVTU0FHRSA9ICdnZW5fYWkuc3lzdGVtLm1lc3NhZ2UnO1xuY29uc3QgRVZFTlRfR0VOX0FJX1VTRVJfTUVTU0FHRSA9ICdnZW5fYWkudXNlci5tZXNzYWdlJztcbmNvbnN0IEVWRU5UX0dFTl9BSV9BU1NJU1RBTlRfTUVTU0FHRSA9ICdnZW5fYWkuYXNzaXN0YW50Lm1lc3NhZ2UnO1xuY29uc3QgRVZFTlRfR0VOX0FJX1RPT0xfTUVTU0FHRSA9ICdnZW5fYWkudG9vbC5tZXNzYWdlJztcbmNvbnN0IEVWRU5UX0dFTl9BSV9DSE9JQ0UgPSAnZ2VuX2FpLmNob2ljZSc7XG5jbGFzcyBPcGVuQUlJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBfZ2VuYWlDbGllbnRPcGVyYXRpb25EdXJhdGlvbjtcbiAgICBfZ2VuYWlDbGllbnRUb2tlblVzYWdlO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgICAgIC8vIFBvc3NpYmxlIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyBmb3IgY29uZmlnLlxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBjb25zdCBlbnZDQyA9ICgwLCB1dGlsc18xLmdldEVudkJvb2wpKCdPVEVMX0lOU1RSVU1FTlRBVElPTl9HRU5BSV9DQVBUVVJFX01FU1NBR0VfQ09OVEVOVCcsIHRoaXMuX2RpYWcpO1xuICAgICAgICBpZiAoZW52Q0MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2ZnLmNhcHR1cmVNZXNzYWdlQ29udGVudCA9IGVudkNDO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE92ZXJyaWRlIEluc3RydW1lbnRhdGlvbkFidHJhY3Quc2V0Q29uZmlnIHNvIHdlIGNhbiBub3JtYWxpemUgY29uZmlnLlxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBjb25zdCB7IGNhcHR1cmVNZXNzYWdlQ29udGVudCwgLi4udmFsaWRDb25maWcgfSA9IGNvbmZpZztcbiAgICAgICAgdmFsaWRDb25maWcuY2FwdHVyZU1lc3NhZ2VDb250ZW50ID1cbiAgICAgICAgICAgICEhY2FwdHVyZU1lc3NhZ2VDb250ZW50O1xuICAgICAgICBzdXBlci5zZXRDb25maWcodmFsaWRDb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdvcGVuYWknLCBbJz49NC4xOS4wIDw3J10sIG1vZEV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kRXhwb3J0cy5PcGVuQUkuQ2hhdC5Db21wbGV0aW9ucy5wcm90b3R5cGUsICdjcmVhdGUnLCB0aGlzLl9nZXRQYXRjaGVkQ2hhdENvbXBsZXRpb25zQ3JlYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kRXhwb3J0cy5PcGVuQUkuRW1iZWRkaW5ncy5wcm90b3R5cGUsICdjcmVhdGUnLCB0aGlzLl9nZXRQYXRjaGVkRW1iZWRkaW5nc0NyZWF0ZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kRXhwb3J0cztcbiAgICAgICAgICAgIH0sIG1vZEV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2RFeHBvcnRzLk9wZW5BSS5DaGF0LkNvbXBsZXRpb25zLnByb3RvdHlwZSwgJ2NyZWF0ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2RFeHBvcnRzLk9wZW5BSS5FbWJlZGRpbmdzLnByb3RvdHlwZSwgJ2NyZWF0ZScpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8vIFRoaXMgaXMgYSAncHJvdGVjdGVkJyBtZXRob2Qgb24gY2xhc3MgYEluc3RydW1lbnRhdGlvbkFic3RyYWN0YC5cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2dlbmFpQ2xpZW50T3BlcmF0aW9uRHVyYXRpb24gPSB0aGlzLm1ldGVyLmNyZWF0ZUhpc3RvZ3JhbShzZW1jb252XzEuTUVUUklDX0dFTl9BSV9DTElFTlRfT1BFUkFUSU9OX0RVUkFUSU9OLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbkFJIG9wZXJhdGlvbiBkdXJhdGlvbicsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgICAgICBhZHZpY2U6IHtcbiAgICAgICAgICAgICAgICBleHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgMC4wMSwgMC4wMiwgMC4wNCwgMC4wOCwgMC4xNiwgMC4zMiwgMC42NCwgMS4yOCwgMi41NiwgNS4xMiwgMTAuMjQsXG4gICAgICAgICAgICAgICAgICAgIDIwLjQ4LCA0MC45NiwgODEuOTIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9nZW5haUNsaWVudFRva2VuVXNhZ2UgPSB0aGlzLm1ldGVyLmNyZWF0ZUhpc3RvZ3JhbShzZW1jb252XzEuTUVUUklDX0dFTl9BSV9DTElFTlRfVE9LRU5fVVNBR0UsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTWVhc3VyZXMgbnVtYmVyIG9mIGlucHV0IGFuZCBvdXRwdXQgdG9rZW5zIHVzZWQnLFxuICAgICAgICAgICAgdW5pdDogJ3t0b2tlbn0nLFxuICAgICAgICAgICAgYWR2aWNlOiB7XG4gICAgICAgICAgICAgICAgZXhwbGljaXRCdWNrZXRCb3VuZGFyaWVzOiBbXG4gICAgICAgICAgICAgICAgICAgIDEsIDQsIDE2LCA2NCwgMjU2LCAxMDI0LCA0MDk2LCAxNjM4NCwgNjU1MzYsIDI2MjE0NCwgMTA0ODU3NixcbiAgICAgICAgICAgICAgICAgICAgNDE5NDMwNCwgMTY3NzcyMTYsIDY3MTA4ODY0LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRDaGF0Q29tcGxldGlvbnNDcmVhdGUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICAvLyBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9hcGktcmVmZXJlbmNlL2NoYXQvY3JlYXRlXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZENyZWF0ZSguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuX2RpYWcuZGVidWcoJ09wZW5BSS5DaGF0LkNvbXBsZXRpb25zLmNyZWF0ZSBhcmdzOiAlTycsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gc2VsZi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE5vdyA9IHBlcmZfaG9va3NfMS5wZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnRJbmZvO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5mbyA9IHNlbGYuX3N0YXJ0Q2hhdENvbXBsZXRpb25zU3BhbihwYXJhbXMsIGNvbmZpZywgdGhpcz8uX2NsaWVudD8uYmFzZVVSTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlhZy5lcnJvcigndW5leHBlY3RlZCBlcnJvciBzdGFydGluZyBzcGFuOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzcGFuLCBjdHgsIGNvbW1vbkF0dHJzIH0gPSBzdGFydEluZm87XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpUHJvbWlzZSA9IGFwaV8xLmNvbnRleHQud2l0aChjdHgsICgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICAvLyBTdHJlYW1pbmcuXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyZWFtUHJvbWlzZShwYXJhbXMsIGFwaVByb21pc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gc3RyZWFtaW5nLCBgYXBpUHJvbWlzZWAgcmVzb2x2ZXMgdG8gYFN0cmVhbWAsXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuIGFzeW5jIGl0ZXJhYmxlIChpLmUuIGhhcyBhIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgbWV0aG9kKS4gV2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FudCB0byB3cmFwIHRoYXQgaXRlcmF0aW9uIHRvIGdhdGhlciB0ZWxlbWV0cnkuIEluc3RlYWQgb2Ygd3JhcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCwgd2hpY2ggd291bGQgYmUgbmljZSwgd2Ugd3JhcCB0aGUgYGl0ZXJhdG9yYFxuICAgICAgICAgICAgICAgICAgICAvLyBtZXRob2QgYmVjYXVzZSBpdCBpcyB1c2VkIGludGVybmFsbHkgYnkgYFN0cmVhbSN0ZWUoKWAuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGlQcm9taXNlLnRoZW4oc3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cmFwKHN0cmVhbSwgJ2l0ZXJhdG9yJywgb3JpZ0l0ZXJhdG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb25DaGF0Q29tcGxldGlvbnNTdHJlYW1JdGVyYXRvcihvcmlnSXRlcmF0b3IoKSwgc3Bhbiwgc3RhcnROb3csIGNvbmZpZywgY29tbW9uQXR0cnMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE5vbi1zdHJlYW1pbmcuXG4gICAgICAgICAgICAgICAgYXBpUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbkNoYXRDb21wbGV0aW9uc0NyZWF0ZVJlc3VsdChzcGFuLCBzdGFydE5vdywgY29tbW9uQXR0cnMsIHJlc3VsdCwgY29uZmlnLCBjdHgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChzZWxmLl9jcmVhdGVBUElQcm9taXNlUmVqZWN0aW9uSGFuZGxlcihzdGFydE5vdywgc3BhbiwgY29tbW9uQXR0cnMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGEgc3BhbiBmb3IgdGhpcyBjaGF0LWNvbXBsZXRpb24gQVBJIGNhbGwuIFRoaXMgYWxzbyBlbWl0cyBsb2cgZXZlbnRzXG4gICAgICogYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSByZXF1ZXN0IHBhcmFtcy5cbiAgICAgKi9cbiAgICBfc3RhcnRDaGF0Q29tcGxldGlvbnNTcGFuKHBhcmFtcywgY29uZmlnLCBiYXNlVVJMKSB7XG4gICAgICAgIC8vIEF0dHJpYnV0ZXMgY29tbW9uIHRvIHNwYW4sIG1ldHJpY3MsIGxvZyBldmVudHMuXG4gICAgICAgIGNvbnN0IGNvbW1vbkF0dHJzID0ge1xuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9PUEVSQVRJT05fTkFNRV06ICdjaGF0JyxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NT0RFTF06IHBhcmFtcy5tb2RlbCxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfU1lTVEVNXTogJ29wZW5haScsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29tbW9uQXR0cnMsICgwLCB1dGlsc18xLmdldEF0dHJzRnJvbUJhc2VVUkwpKGJhc2VVUkwsIHRoaXMuX2RpYWcpKTtcbiAgICAgICAgLy8gU3BhbiBhdHRyaWJ1dGVzLlxuICAgICAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkF0dHJzLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocGFyYW1zLmZyZXF1ZW5jeV9wZW5hbHR5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX0ZSRVFVRU5DWV9QRU5BTFRZXSA9IHBhcmFtcy5mcmVxdWVuY3lfcGVuYWx0eTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBpZiAocGFyYW1zLm1heF9jb21wbGV0aW9uX3Rva2VucyAhPSBudWxsKSB7XG4gICAgICAgICAgICBhdHRyc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TXSA9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBwYXJhbXMubWF4X2NvbXBsZXRpb25fdG9rZW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcmFtcy5tYXhfdG9rZW5zICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGBtYXhfdG9rZW5zYCBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgbWF4X2NvbXBsZXRpb25fdG9rZW5zYC5cbiAgICAgICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX01BWF9UT0tFTlNdID0gcGFyYW1zLm1heF90b2tlbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5wcmVzZW5jZV9wZW5hbHR5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1BSRVNFTkNFX1BFTkFMVFldID0gcGFyYW1zLnByZXNlbmNlX3BlbmFsdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5zdG9wICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcy5zdG9wKSkge1xuICAgICAgICAgICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1NUT1BfU0VRVUVOQ0VTXSA9IHBhcmFtcy5zdG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0cnNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfU1RPUF9TRVFVRU5DRVNdID0gW3BhcmFtcy5zdG9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnRlbXBlcmF0dXJlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFXSA9IHBhcmFtcy50ZW1wZXJhdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnRvcF9wICE9IG51bGwpIHtcbiAgICAgICAgICAgIGF0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX1RPUF9QXSA9IHBhcmFtcy50b3BfcDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGAke2F0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9PUEVSQVRJT05fTkFNRV19ICR7YXR0cnNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfTU9ERUxdfWAsIHtcbiAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY3R4ID0gYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgLy8gQ2FwdHVyZSBwcm9tcHRzIGFzIGxvZyBldmVudHMuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIHBhcmFtcy5tZXNzYWdlcy5mb3JFYWNoKChtc2cpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAobXNnLnJvbGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzeXN0ZW0nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5jYXB0dXJlTWVzc2FnZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1zZy5jb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkuY29udGVudCA9IG1zZy5jb250ZW50Lm1hcChwID0+IHAudGV4dCkuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LmNvbnRlbnQgPSBtc2cuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5TnVtYmVyOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk8sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0VWRU5UX05BTUVdOiBFVkVOVF9HRU5fQUlfU1lTVEVNX01FU1NBR0UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9TWVNURU1dOiAnb3BlbmFpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3VzZXInOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5jYXB0dXJlTWVzc2FnZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1zZy5jb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkuY29udGVudCA9IG1zZy5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNUZXh0Q29udGVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChwID0+IHAudGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5jb250ZW50ID0gbXNnLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eU51bWJlcjogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9FVkVOVF9OQU1FXTogRVZFTlRfR0VOX0FJX1VTRVJfTUVTU0FHRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1NZU1RFTV06ICdvcGVuYWknLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnYXNzaXN0YW50Jzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2FwdHVyZU1lc3NhZ2VDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtc2cuY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5jb250ZW50ID0gbXNnLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNUZXh0Q29udGVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAocCA9PiBwLnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LmNvbnRlbnQgPSBtc2cuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyBvZiBvcGVuYWlANS4xMi4xLCB0eXBlIENoYXRDb21wbGV0aW9uTWVzc2FnZVRvb2xDYWxsIGNhblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0eXBlPVwiY3VzdG9tXCIgd2hpY2ggaGFzIG5vIGBmdW5jdGlvbmAgcHJvcGVydHkuIEFzIHdlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5BSSBzZW1jb252IGhhcyBzaW5jZSBjaGFuZ2VkIGhvdyBpdCBjYXB0dXJlcyB0b29sIGNhbGxzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vdyB3ZSBqdXN0IGNvcGU6IHdlIGNvdWxkIGNhcHR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBDaGF0Q29tcGxldGlvbk1lc3NhZ2VDdXN0b21Ub29sQ2FsbC5DdXN0b21gIHByb3BlcnRpZXMsIGJ1dCB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkudG9vbF9jYWxscyA9IG1zZy50b29sX2NhbGxzPy5tYXAodGMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcHIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGMudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Yy50eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIuZnVuY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0Yy5mdW5jdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzOiB0Yy5mdW5jdGlvbi5hcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXByO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5LnRvb2xfY2FsbHMgPSBtc2cudG9vbF9jYWxscz8ubWFwKHRjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXByID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdGMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRjLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGMudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByLmZ1bmN0aW9uID0geyBuYW1lOiB0Yy5mdW5jdGlvbi5uYW1lIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXByO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eU51bWJlcjogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9FVkVOVF9OQU1FXTogRVZFTlRfR0VOX0FJX0FTU0lTVEFOVF9NRVNTQUdFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfU1lTVEVNXTogJ29wZW5haScsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICd0b29sJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1zZy50b29sX2NhbGxfaWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2FwdHVyZU1lc3NhZ2VDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtc2cuY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LmNvbnRlbnQgPSBtc2cuY29udGVudC5tYXAocCA9PiBwLnRleHQpLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keS5jb250ZW50ID0gbXNnLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eU51bWJlcjogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9FVkVOVF9OQU1FXTogRVZFTlRfR0VOX0FJX1RPT0xfTUVTU0FHRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1NZU1RFTV06ICdvcGVuYWknLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgdW5rbm93biBtZXNzYWdlIHJvbGUgaW4gT3BlbkFJLkNoYXQuQ29tcGxldGlvbnMuY3JlYXRlOiAke21zZy5yb2xlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgc3BhbiwgY3R4LCBjb21tb25BdHRycyB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIHdyYXBzIGFuIGluc3RhbmNlIG9mIGEgYG9wZW5haS9zdHJlYW1pbmcuU3RyZWFtLml0ZXJhdG9yKClgLCBhblxuICAgICAqIGFzeW5jIGl0ZXJhdG9yLiBJdCBzaG91bGQgeWllbGQgdGhlIGNodW5rcyB1bmNoYW5nZWQsIGFuZCBnYXRoZXIgdGVsZW1ldHJ5XG4gICAgICogZGF0YSBmcm9tIHRob3NlIGNodW5rcywgdGhlbiBlbmQgdGhlIHNwYW4uXG4gICAgICovXG4gICAgYXN5bmMgKl9vbkNoYXRDb21wbGV0aW9uc1N0cmVhbUl0ZXJhdG9yKHN0cmVhbUl0ZXIsIHNwYW4sIHN0YXJ0Tm93LCBjb25maWcsIGNvbW1vbkF0dHJzLCBjdHgpIHtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIGNvbnN0IGZpbmlzaFJlYXNvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFtdO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbUl0ZXIpIHtcbiAgICAgICAgICAgIHlpZWxkIGNodW5rO1xuICAgICAgICAgICAgLy8gR2F0aGVyIHRlbGVtZXRyeSBmcm9tIHRoaXMgY2h1bmsuXG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdPcGVuQUkuQ2hhdC5Db21wbGV0aW9ucy5jcmVhdGUgc3RyZWFtIGNodW5rOiAlTycsIGNodW5rKTtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNodW5rLmNob2ljZXNbMF0/LmluZGV4ID8/IDA7XG4gICAgICAgICAgICBpZiAoIWNob2ljZXNbaWR4XSkge1xuICAgICAgICAgICAgICAgIGNob2ljZXNbaWR4XSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpZy5jYXB0dXJlTWVzc2FnZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UGFydCA9IGNodW5rLmNob2ljZXNbMF0/LmRlbHRhPy5jb250ZW50O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50UGFydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNob2ljZXNbaWR4XS5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzW2lkeF0uY29udGVudCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXNbaWR4XS5jb250ZW50ICs9IGNvbnRlbnRQYXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFzc3VtZSBkZWx0YS50b29sX2NhbGxzLCBpZiBleGlzdHMsIGlzIGFuIGFycmF5IG9mIGxlbmd0aCAxLlxuICAgICAgICAgICAgY29uc3QgdG9vbENhbGxQYXJ0ID0gY2h1bmsuY2hvaWNlc1swXT8uZGVsdGE/LnRvb2xfY2FsbHM/LlswXTtcbiAgICAgICAgICAgIGlmICh0b29sQ2FsbFBhcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNob2ljZXNbaWR4XS50b29sQ2FsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hvaWNlc1tpZHhdLnRvb2xDYWxscyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB0b29sQ2FsbHMgPSBjaG9pY2VzW2lkeF0udG9vbENhbGxzO1xuICAgICAgICAgICAgICAgIGlmICh0b29sQ2FsbFBhcnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QgY2h1bmsgaW4gYSB0b29sIGNhbGwuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcHIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdG9vbENhbGxQYXJ0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9vbENhbGxQYXJ0LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b29sQ2FsbFBhcnQudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwci5mdW5jdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0b29sQ2FsbFBhcnQuZnVuY3Rpb24/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzOiB0b29sQ2FsbFBhcnQuZnVuY3Rpb24/LmFyZ3VtZW50cyA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdG9vbENhbGxzLnB1c2gocmVwcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRvb2xDYWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgdG9vbCBjYWxsIGNodW5rIHdpdGggbW9yZSBvZiB0aGUgYGZ1bmN0aW9uLmFyZ3VtZW50c2AuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RQYXJ0ID0gdG9vbENhbGxzW3Rvb2xDYWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RQYXJ0LmZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQYXJ0LmZ1bmN0aW9uLmFyZ3VtZW50cyArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xDYWxsUGFydC5mdW5jdGlvbj8uYXJndW1lbnRzID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpZCAmJiBjaHVuay5pZCkge1xuICAgICAgICAgICAgICAgIGlkID0gY2h1bmsuaWQ7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX0lELCBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1vZGVsICYmIGNodW5rLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBjaHVuay5tb2RlbDtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfTU9ERUwsIG1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmluaXNoUmVhc29uc1tpZHhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmluaXNoUmVhc29uID0gY2h1bmsuY2hvaWNlc1swXT8uZmluaXNoX3JlYXNvbjtcbiAgICAgICAgICAgICAgICBpZiAoZmluaXNoUmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlYXNvbnNbaWR4XSA9IGZpbmlzaFJlYXNvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2h1bmsudXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBBIGZpbmFsIHVzYWdlIGNodW5rIGlmIGBzdHJlYW1fb3B0aW9ucy5pbmNsdWRlX3VzYWdlOiB0cnVlYC5cbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TLCBjaHVuay51c2FnZS5wcm9tcHRfdG9rZW5zKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUywgY2h1bmsudXNhZ2UuY29tcGxldGlvbl90b2tlbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlbmFpQ2xpZW50VG9rZW5Vc2FnZS5yZWNvcmQoY2h1bmsudXNhZ2UucHJvbXB0X3Rva2Vucywge1xuICAgICAgICAgICAgICAgICAgICAuLi5jb21tb25BdHRycyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9NT0RFTF06IG1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1RPS0VOX1RZUEVdOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlbmFpQ2xpZW50VG9rZW5Vc2FnZS5yZWNvcmQoY2h1bmsudXNhZ2UuY29tcGxldGlvbl90b2tlbnMsIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY29tbW9uQXR0cnMsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfTU9ERUxdOiBtb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9UT0tFTl9UWVBFXTogJ291dHB1dCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TLCBmaW5pc2hSZWFzb25zLmZpbHRlcihmID0+IGYgIT09IHVuZGVmaW5lZCkpO1xuICAgICAgICAvLyBDYXB0dXJlIGNob2ljZXMgYXMgbG9nIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBbaWR4LCBjaG9pY2VdIG9mIGNob2ljZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoIWNob2ljZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHt9O1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5jYXB0dXJlTWVzc2FnZUNvbnRlbnQgJiZcbiAgICAgICAgICAgICAgICBjaG9pY2UuY29udGVudCAmJlxuICAgICAgICAgICAgICAgIGNob2ljZS5jb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlLmNvbnRlbnQgPSBjaG9pY2UuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaG9pY2UudG9vbENhbGxzICYmIGNob2ljZS50b29sQ2FsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UudG9vbF9jYWxscyA9IGNob2ljZS50b29sQ2FsbHM7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWcuY2FwdHVyZU1lc3NhZ2VDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudG9vbF9jYWxscy5mb3JFYWNoKHRjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0Yy5mdW5jdGlvbj8uYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lbWl0KHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgY29udGV4dDogY3R4LFxuICAgICAgICAgICAgICAgIHNldmVyaXR5TnVtYmVyOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk8sXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfRVZFTlRfTkFNRV06IEVWRU5UX0dFTl9BSV9DSE9JQ0UsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfU1lTVEVNXTogJ29wZW5haScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaF9yZWFzb246IGZpbmlzaFJlYXNvbnNbaWR4XSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlkeCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ2VuYWlDbGllbnRPcGVyYXRpb25EdXJhdGlvbi5yZWNvcmQoKHBlcmZfaG9va3NfMS5wZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0Tm93KSAvIDEwMDAsIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkF0dHJzLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVNQT05TRV9NT0RFTF06IG1vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gICAgX29uQ2hhdENvbXBsZXRpb25zQ3JlYXRlUmVzdWx0KHNwYW4sIHN0YXJ0Tm93LCBjb21tb25BdHRycywgcmVzdWx0LCBjb25maWcsIGN0eCkge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdPcGVuQUkuQ2hhdC5Db21wbGV0aW9ucy5jcmVhdGUgcmVzdWx0OiAlTycsIHJlc3VsdCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMsIHJlc3VsdC5jaG9pY2VzLm1hcChjID0+IGMuZmluaXNoX3JlYXNvbikpO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX0lELCByZXN1bHQuaWQpO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX01PREVMLCByZXN1bHQubW9kZWwpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC51c2FnZSkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHJlc3VsdC51c2FnZS5wcm9tcHRfdG9rZW5zKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUywgcmVzdWx0LnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENhcHR1cmUgY2hvaWNlcyBhcyBsb2cgZXZlbnRzLlxuICAgICAgICAgICAgcmVzdWx0LmNob2ljZXMuZm9yRWFjaChjaG9pY2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNhcHR1cmVNZXNzYWdlQ29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB0ZWxlbWV0cnkgZGlmZiB3aXRoIHN0cmVhbWluZyBjYXNlOiBjb250ZW50PW51bGwsIG5vICdyb2xlOiBhc3Npc3RhbnQnLCAndG9vbCBjYWxscyAoZW5hYmxlQ2FwdHVyZUNvbnRlbnQ9dHJ1ZSknIHRlc3QgY2FzZVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hvaWNlLm1lc3NhZ2UuY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb250ZW50ID0gY2hvaWNlLm1lc3NhZ2UuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hvaWNlLm1lc3NhZ2UudG9vbF9jYWxscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50b29sX2NhbGxzID0gY2hvaWNlLm1lc3NhZ2UudG9vbF9jYWxscztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNob2ljZS5tZXNzYWdlLnRvb2xfY2FsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudG9vbF9jYWxscyA9IGNob2ljZS5tZXNzYWdlLnRvb2xfY2FsbHMubWFwKHRjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXByID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdGMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRjLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGMudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByLmZ1bmN0aW9uID0geyBuYW1lOiB0Yy5mdW5jdGlvbi5uYW1lIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXByO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogY3R4LFxuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eU51bWJlcjogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfRVZFTlRfTkFNRV06IEVWRU5UX0dFTl9BSV9DSE9JQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1NZU1RFTV06ICdvcGVuYWknLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hfcmVhc29uOiBjaG9pY2UuZmluaXNoX3JlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjaG9pY2UuaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9nZW5haUNsaWVudE9wZXJhdGlvbkR1cmF0aW9uLnJlY29yZCgocGVyZl9ob29rc18xLnBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnROb3cpIC8gMTAwMCwge1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkF0dHJzLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfTU9ERUxdOiByZXN1bHQubW9kZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQudXNhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW5haUNsaWVudFRva2VuVXNhZ2UucmVjb3JkKHJlc3VsdC51c2FnZS5wcm9tcHRfdG9rZW5zLCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbW1vbkF0dHJzLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX01PREVMXTogcmVzdWx0Lm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1RPS0VOX1RZUEVdOiAnaW5wdXQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlbmFpQ2xpZW50VG9rZW5Vc2FnZS5yZWNvcmQocmVzdWx0LnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbW1vbkF0dHJzLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX01PREVMXTogcmVzdWx0Lm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1RPS0VOX1RZUEVdOiAnb3V0cHV0JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCd1bmV4cGVjdGVkIGVycm9yIGdldHRpbmcgdGVsZW1ldHJ5IGZyb20gY2hhdCByZXN1bHQ6JywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBfY3JlYXRlQVBJUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIoc3RhcnROb3csIHNwYW4sIGNvbW1vbkF0dHJzKSB7XG4gICAgICAgIHJldHVybiAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdPcGVuQUkgQVBJUHJvbWlzZSByZWplY3Rpb246ICVPJywgZXJyKTtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYWkvb3BlbmFpLW5vZGUvYmxvYi9tYXN0ZXIvc3JjL2Vycm9yLnRzXG4gICAgICAgICAgICAvLyBUaGUgbW9zdCByZWxpYWJsZSBsb3cgY2FyZGluYWxpdHkgc3RyaW5nIGZvciBlcnJvcnMgc2VlbXMgdG8gYmVcbiAgICAgICAgICAgIC8vIHRoZSBjbGFzcyBuYW1lLiBTZWUgYWxzbzpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9kb2NzL2d1aWRlcy9lcnJvci1jb2Rlc1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUeXBlID0gZXJyPy5jb25zdHJ1Y3Rvcj8ubmFtZTtcbiAgICAgICAgICAgIHRoaXMuX2dlbmFpQ2xpZW50T3BlcmF0aW9uRHVyYXRpb24ucmVjb3JkKChwZXJmX2hvb2tzXzEucGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydE5vdykgLyAxMDAwLCB7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uQXR0cnMsXG4gICAgICAgICAgICAgICAgJ2Vycm9yLnR5cGUnOiBlcnJvclR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2Vycm9yLnR5cGUnLCBlcnJvclR5cGUpO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRFbWJlZGRpbmdzQ3JlYXRlKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvYXBpLXJlZmVyZW5jZS9lbWJlZGRpbmdzL2NyZWF0ZVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDcmVhdGUoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5pc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLl9kaWFnLmRlYnVnKCdPcGVuQUkuQ2hhdC5FbWJlZGRpbmdzLmNyZWF0ZSBhcmdzOiAlTycsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnROb3cgPSBwZXJmX2hvb2tzXzEucGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0SW5mbztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydEluZm8gPSBzZWxmLl9zdGFydEVtYmVkZGluZ3NTcGFuKHBhcmFtcywgdGhpcz8uX2NsaWVudD8uYmFzZVVSTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlhZy5lcnJvcigndW5leHBlY3RlZCBlcnJvciBzdGFydGluZyBzcGFuOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzcGFuLCBjdHgsIGNvbW1vbkF0dHJzIH0gPSBzdGFydEluZm87XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpUHJvbWlzZSA9IGFwaV8xLmNvbnRleHQud2l0aChjdHgsICgpID0+IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICBhcGlQcm9taXNlXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uRW1iZWRkaW5nc0NyZWF0ZVJlc3VsdChzcGFuLCBzdGFydE5vdywgY29tbW9uQXR0cnMsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHNlbGYuX2NyZWF0ZUFQSVByb21pc2VSZWplY3Rpb25IYW5kbGVyKHN0YXJ0Tm93LCBzcGFuLCBjb21tb25BdHRycykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGlQcm9taXNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnQgYSBzcGFuIGZvciB0aGlzIGNoYXQtY29tcGxldGlvbiBBUEkgY2FsbC4gVGhpcyBhbHNvIGVtaXRzIGxvZyBldmVudHNcbiAgICAgKiBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHJlcXVlc3QgcGFyYW1zLlxuICAgICAqL1xuICAgIF9zdGFydEVtYmVkZGluZ3NTcGFuKHBhcmFtcywgYmFzZVVSTCkge1xuICAgICAgICAvLyBBdHRyaWJ1dGVzIGNvbW1vbiB0byBzcGFuLCBtZXRyaWNzLCBsb2cgZXZlbnRzLlxuICAgICAgICBjb25zdCBjb21tb25BdHRycyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfT1BFUkFUSU9OX05BTUVdOiAnZW1iZWRkaW5ncycsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfTU9ERUxdOiBwYXJhbXMubW9kZWwsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1NZU1RFTV06ICdvcGVuYWknLFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvbW1vbkF0dHJzLCAoMCwgdXRpbHNfMS5nZXRBdHRyc0Zyb21CYXNlVVJMKShiYXNlVVJMLCB0aGlzLl9kaWFnKSk7XG4gICAgICAgIC8vIFNwYW4gYXR0cmlidXRlcy5cbiAgICAgICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICAgICAgICAuLi5jb21tb25BdHRycyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHBhcmFtcy5lbmNvZGluZ19mb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cnNbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFUVVFU1RfRU5DT0RJTkdfRk9STUFUU10gPSBbcGFyYW1zLmVuY29kaW5nX2Zvcm1hdF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMudHJhY2VyLnN0YXJ0U3BhbihgJHthdHRyc1tzZW1jb252XzEuQVRUUl9HRU5fQUlfT1BFUkFUSU9OX05BTUVdfSAke2F0dHJzW3NlbWNvbnZfMS5BVFRSX0dFTl9BSV9SRVFVRVNUX01PREVMXX1gLCB7XG4gICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGN0eCA9IGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3Bhbik7XG4gICAgICAgIHJldHVybiB7IHNwYW4sIGN0eCwgY29tbW9uQXR0cnMgfTtcbiAgICB9XG4gICAgX29uRW1iZWRkaW5nc0NyZWF0ZVJlc3VsdChzcGFuLCBzdGFydE5vdywgY29tbW9uQXR0cnMsIHJlc3VsdCkge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdPcGVuQUkuRW1iZWRkaW5ncy5jcmVhdGUgcmVzdWx0OiAlTycsIHJlc3VsdCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfTU9ERUwsIHJlc3VsdC5tb2RlbCk7XG4gICAgICAgICAgICB0aGlzLl9nZW5haUNsaWVudE9wZXJhdGlvbkR1cmF0aW9uLnJlY29yZCgocGVyZl9ob29rc18xLnBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnROb3cpIC8gMTAwMCwge1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkF0dHJzLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfUkVTUE9OU0VfTU9ERUxdOiByZXN1bHQubW9kZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHJlc3VsdC51c2FnZS5wcm9tcHRfdG9rZW5zKTtcbiAgICAgICAgICAgIHRoaXMuX2dlbmFpQ2xpZW50VG9rZW5Vc2FnZS5yZWNvcmQocmVzdWx0LnVzYWdlLnByb21wdF90b2tlbnMsIHtcbiAgICAgICAgICAgICAgICAuLi5jb21tb25BdHRycyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfR0VOX0FJX1JFU1BPTlNFX01PREVMXTogcmVzdWx0Lm1vZGVsLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9HRU5fQUlfVE9LRU5fVFlQRV06ICdpbnB1dCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCd1bmV4cGVjdGVkIGVycm9yIGdldHRpbmcgdGVsZW1ldHJ5IGZyb20gZW1iZWRkaW5ncyByZXN1bHQ6JywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuT3BlbkFJSW5zdHJ1bWVudGF0aW9uID0gT3BlbkFJSW5zdHJ1bWVudGF0aW9uO1xuZnVuY3Rpb24gaXNUZXh0Q29udGVudCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50eXBlID09PSAndGV4dCc7XG59XG5mdW5jdGlvbiBpc1N0cmVhbVByb21pc2UocGFyYW1zLCB2YWx1ZSkge1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLnN0cmVhbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9wZW5BSUluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcGVuQUlJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLk9wZW5BSUluc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqIENvcHlyaWdodCAoYykgMjAyNSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9PUkFDTEVfREIgPSBleHBvcnRzLkFUVFJfREJfVVNFUiA9IGV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT05fUEFSQU1FVEVSID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogQSBkYXRhYmFzZSBvcGVyYXRpb24gcGFyYW1ldGVyLCB3aXRoIGA8a2V5PmAgYmVpbmcgdGhlIHBhcmFtZXRlciBuYW1lLCBhbmQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICpcbiAqIEBleGFtcGxlIHNvbWV2YWxcbiAqIEBleGFtcGxlIDU1XG4gKlxuICogQG5vdGUgRm9yIGV4YW1wbGUsIGEgY2xpZW50LXNpZGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlXG4gKiAqKk1BWSoqIGJlIHJlY29yZGVkIGFzIHRoZSBgZGIub3BlcmF0aW9uLnBhcmFtZXRlci5tYXhfcm93c2AgYXR0cmlidXRlLlxuICpcbiAqIGBkYi5xdWVyeS50ZXh0YCBwYXJhbWV0ZXJzICoqU0hPVUxEKiogYmUgY2FwdHVyZWQgdXNpbmcgYGRiLnF1ZXJ5LnBhcmFtZXRlci48a2V5PmBcbiAqIGluc3RlYWQgb2YgYGRiLm9wZXJhdGlvbi5wYXJhbWV0ZXIuPGtleT5gLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuY29uc3QgQVRUUl9EQl9PUEVSQVRJT05fUEFSQU1FVEVSID0gKGtleSkgPT4gYGRiLm9wZXJhdGlvbi5wYXJhbWV0ZXIuJHtrZXl9YDtcbmV4cG9ydHMuQVRUUl9EQl9PUEVSQVRJT05fUEFSQU1FVEVSID0gQVRUUl9EQl9PUEVSQVRJT05fUEFSQU1FVEVSO1xuLyoqXG4gKiBEZXByZWNhdGVkLCBubyByZXBsYWNlbWVudCBhdCB0aGlzIHRpbWUuXG4gKlxuICogQGV4YW1wbGUgcmVhZG9ubHlfdXNlclxuICogQGV4YW1wbGUgcmVwb3J0aW5nX3VzZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCwgbm8gcmVwbGFjZW1lbnQgYXQgdGhpcyB0aW1lLlxuICovXG5leHBvcnRzLkFUVFJfREJfVVNFUiA9ICdkYi51c2VyJztcbi8qKlxuICogRW51bSB2YWx1ZSBcIm9yYWNsZS5kYlwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfU1lTVEVNX05BTUV9LlxuICpcbiAqIFtPcmFjbGUgRGF0YWJhc2VdKGh0dHBzOi8vd3d3Lm9yYWNsZS5jb20vZGF0YWJhc2UvKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuREJfU1lTVEVNX05BTUVfVkFMVUVfT1JBQ0xFX0RCID0gJ29yYWNsZS5kYic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqIENvcHlyaWdodCAoYykgMjAyNSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFuTmFtZXMgPSB2b2lkIDA7XG4vLyBDb250YWlucyBzcGFuIG5hbWVzIHByb2R1Y2VkIGJ5IGluc3RydW1lbnRhdGlvblxuLy8gSXQgbGlzdHMgdGhlIFJQQyBuYW1lcyAoc3VmZml4IHdpdGggX01TRyBsaWtlIEVYRUNVVEVfTVNHKSBhbmRcbi8vIGV4cG9ydGVkIG9yYWNsZWRiIGZ1bmN0aW9ucyAobGlrZSBFWEVDVVRFKS5cbi8vIFRoZXNlIGNvbnN0YW50cyBuZWVkIHRvIGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGdlbmVyYXRlZCBieSB0aGVcbi8vICdvcmFjbGVkYicgbW9kdWxlLlxudmFyIFNwYW5OYW1lcztcbihmdW5jdGlvbiAoU3Bhbk5hbWVzKSB7XG4gICAgU3Bhbk5hbWVzW1wiQ09OTkVDVFwiXSA9IFwib3JhY2xlZGIuZ2V0Q29ubmVjdGlvblwiO1xuICAgIFNwYW5OYW1lc1tcIlBPT0xfQ09OTkVDVFwiXSA9IFwib3JhY2xlZGIuUG9vbC5nZXRDb25uZWN0aW9uXCI7XG4gICAgU3Bhbk5hbWVzW1wiUE9PTF9DUkVBVEVcIl0gPSBcIm9yYWNsZWRiLmNyZWF0ZVBvb2xcIjtcbiAgICBTcGFuTmFtZXNbXCJDT05ORUNUX1BST1RPQ09MX05FR1wiXSA9IFwib3JhY2xlZGIuUHJvdG9jb2xNZXNzYWdlXCI7XG4gICAgU3Bhbk5hbWVzW1wiQ09OTkVDVF9EQVRBVFlQRV9ORUdcIl0gPSBcIm9yYWNsZWRiLkRhdGFUeXBlTWVzc2FnZVwiO1xuICAgIFNwYW5OYW1lc1tcIkNPTk5FQ1RfQVVUSF9NU0dcIl0gPSBcIm9yYWNsZWRiLkF1dGhNZXNzYWdlXCI7XG4gICAgU3Bhbk5hbWVzW1wiQ09OTkVDVF9GQVNUX0FVVEhcIl0gPSBcIm9yYWNsZWRiLkZhc3RBdXRoTWVzc2FnZVwiO1xuICAgIFNwYW5OYW1lc1tcIkVYRUNVVEVfTVNHXCJdID0gXCJvcmFjbGVkYi5FeGVjdXRlTWVzc2FnZVwiO1xuICAgIFNwYW5OYW1lc1tcIkVYRUNVVEVcIl0gPSBcIm9yYWNsZWRiLkNvbm5lY3Rpb24uZXhlY3V0ZVwiO1xuICAgIFNwYW5OYW1lc1tcIkVYRUNVVEVfTUFOWVwiXSA9IFwib3JhY2xlZGIuQ29ubmVjdGlvbi5leGVjdXRlTWFueVwiO1xuICAgIFNwYW5OYW1lc1tcIkxPR09GRl9NU0dcIl0gPSBcIm9yYWNsZWRiLkxvZ09mZk1lc3NhZ2VcIjtcbiAgICBTcGFuTmFtZXNbXCJDT05ORUNUX0NMT1NFXCJdID0gXCJvcmFjbGVkYi5Db25uZWN0aW9uLmNsb3NlXCI7XG4gICAgU3Bhbk5hbWVzW1wiQ1JFQVRFX0xPQlwiXSA9IFwib3JhY2xlZGIuQ29ubmVjdGlvbi5jcmVhdGVMb2JcIjtcbiAgICBTcGFuTmFtZXNbXCJMT0JfTUVTU0FHRVwiXSA9IFwib3JhY2xlZGIuTG9iT3BNZXNzYWdlXCI7XG4gICAgU3Bhbk5hbWVzW1wiTE9CX0dFVERBVEFcIl0gPSBcIm9yYWNsZWRiLkxvYi5nZXREYXRhXCI7XG59KShTcGFuTmFtZXMgPSBleHBvcnRzLlNwYW5OYW1lcyB8fCAoZXhwb3J0cy5TcGFuTmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqIENvcHlyaWdodCAoYykgMjAyNSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPcmFjbGVUZWxlbWV0cnlUcmFjZUhhbmRsZXJDbGFzcyA9IHZvaWQgMDtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3QgT1VUX0JJTkQgPSAzMDAzOyAvLyBiaW5kaW5mbyBkaXJlY3Rpb24gdmFsdWUuXG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbi8vIEl0IGR5bmFtaWNhbGx5IHJldHJpZXZlcyB0aGUgVHJhY2VIYW5kbGVyQmFzZSBjbGFzcyBmcm9tIHRoZSBvcmFjbGVkYiBtb2R1bGVcbi8vIChpZiBhdmFpbGFibGUpIHdoaWxlIGF2b2lkaW5nIGRpcmVjdCBpbXBvcnRzIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzIGlmXG4vLyB0aGUgbW9kdWxlIGlzIG1pc3NpbmcuXG5mdW5jdGlvbiBnZXRUcmFjZUhhbmRsZXJCYXNlQ2xhc3Mob2JqKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9iai50cmFjZUhhbmRsZXIuVHJhY2VIYW5kbGVyQmFzZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBvcmFjbGVkYiBtb2R1bGUuJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0T3JhY2xlVGVsZW1ldHJ5VHJhY2VIYW5kbGVyQ2xhc3Mob2JqKSB7XG4gICAgY29uc3QgdHJhY2VIYW5kbGVyQmFzZSA9IGdldFRyYWNlSGFuZGxlckJhc2VDbGFzcyhvYmopO1xuICAgIGlmICghdHJhY2VIYW5kbGVyQmFzZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPcmFjbGVUZWxlbWV0cnlUcmFjZUhhbmRsZXIgZXh0ZW5kcyBUcmFjZUhhbmRsZXJCYXNlIGZyb20gb3JhY2xlZGIgbW9kdWxlXG4gICAgICogSXQgaW1wbGVtZW50cyB0aGUgYWJzdHJhY3QgbWV0aG9kczsgYG9uRW50ZXJGbmAsIGBvbkV4aXRGbmAsXG4gICAgICogYG9uQmVnaW5Sb3VuZFRyaXBgIGFuZCBgb25FbmRSb3VuZFRyaXBgIG9mIFRyYWNlSGFuZGxlckJhc2UgY2xhc3MuXG4gICAgICogSW5zaWRlIHRoZXNlIG92ZXJyaWRkZW4gbWV0aG9kcywgdGhlIGlucHV0IHRyYWNlQ29udGV4dCBkYXRhIGlzIHVzZWRcbiAgICAgKiB0byBnZW5lcmF0ZSBhdHRyaWJ1dGVzIGZvciBzcGFuLlxuICAgICAqL1xuICAgIGNsYXNzIE9yYWNsZVRlbGVtZXRyeVRyYWNlSGFuZGxlciBleHRlbmRzIHRyYWNlSGFuZGxlckJhc2Uge1xuICAgICAgICBfZ2V0VHJhY2VyO1xuICAgICAgICBfaW5zdHJ1bWVudENvbmZpZztcbiAgICAgICAgY29uc3RydWN0b3IoZ2V0VHJhY2VyLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLl9nZXRUcmFjZXIgPSBnZXRUcmFjZXI7XG4gICAgICAgICAgICB0aGlzLl9pbnN0cnVtZW50Q29uZmlnID0gY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIF9zaG91bGRTa2lwSW5zdHJ1bWVudGF0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9pbnN0cnVtZW50Q29uZmlnLnJlcXVpcmVQYXJlbnRTcGFuID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCByZXR1cm5zIGRiLm5hbWVzcGFjZSBhcyBtZW50aW9uZWQgaW4gc2VtYW50aWMgY29udmVudGlvbnNcbiAgICAgICAgLy8gRXg6IE9SQ0wxfFBEQjF8ZGJfaGlnaC5hZGIub3JhY2xlY2xvdWQuY29tXG4gICAgICAgIF9nZXREQk5hbWVTcGFjZShpbnN0YW5jZU5hbWUsIHBkYk5hbWUsIHNlcnZpY2VOYW1lKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09IG51bGwgJiYgcGRiTmFtZSA9PSBudWxsICYmIHNlcnZpY2VOYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2luc3RhbmNlTmFtZSA/PyAnJ318JHtwZGJOYW1lID8/ICcnfXwke3NlcnZpY2VOYW1lID8/ICcnfWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJucyB0aGUgY29ubmVjdGlvbiByZWxhdGVkIEF0dHJpYnV0ZXMgZm9yXG4gICAgICAgIC8vIHNlbWFudGljIHN0YW5kYXJkcyBhbmQgbW9kdWxlIGN1c3RvbSBrZXlzLlxuICAgICAgICBfZ2V0Q29ubmVjdGlvblNwYW5BdHRyaWJ1dGVzKGNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1NZU1RFTV9OQU1FXTogc2VtY29udl8xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX09SQUNMRV9EQixcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfVFJBTlNQT1JUXTogY29uZmlnLnByb3RvY29sLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9VU0VSXTogY29uZmlnLnVzZXIsXG4gICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9OQU1FU1BBQ0VdOiB0aGlzLl9nZXREQk5hbWVTcGFjZShjb25maWcuaW5zdGFuY2VOYW1lLCBjb25maWcucGRiTmFtZSwgY29uZmlnLnNlcnZpY2VOYW1lKSxcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogY29uZmlnLmhvc3ROYW1lLFxuICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX1BPUlRdOiBjb25maWcucG9ydCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQgcmV0dXJucyB0cnVlIGlmIG9iamVjdCBpcyBvZiB0eXBlIG9yYWNsZWRiLkxvYi5cbiAgICAgICAgX2lzTG9iSW5zdGFuY2Uob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgb2JqICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmopPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0xvYicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zZm9ybXMgdGhlIGJpbmQgdmFsdWVzIGFycmF5IG9yIGJpbmRpbmZvIGludG8gYW4gb2JqZWN0XG4gICAgICAgIC8vICdkYi5vcGVyYXRpb24ucGFyYW1ldGVyJy5cbiAgICAgICAgLy8gRXg6XG4gICAgICAgIC8vICAgZGIub3BlcmF0aW9uLnBhcmFtZXRlci4wID0gXCJzb21ldmFsXCIgLy8gZm9yIGJpbmQgYnkgcG9zaXRpb25cbiAgICAgICAgLy8gICBkYi5vcGVyYXRpb24ucGFyYW1ldGVyLm5hbWUgPSBcInNvbWV2YWxcIiAvLyBmb3IgYmluZCBieSBuYW1lXG4gICAgICAgIC8vIEl0IGlzIG9ubHkgY2FsbGVkIGlmIGNvbmZpZyAnZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZycgaXMgdHJ1ZS5cbiAgICAgICAgX2dldFZhbHVlcyh2YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWVzKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaW5kZXhlZCAocG9zaXRpb25hbCkgcGFyYW1ldGVyc1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRWYWx1ZSA9IHRoaXMuX2V4dHJhY3RWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmFjdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZFZhbHVlc1soMCwgc2VtY29udl8xLkFUVFJfREJfT1BFUkFUSU9OX1BBUkFNRVRFUikoYCR7aW5kZXh9YCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZXMgJiYgdHlwZW9mIHZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5hbWVkIHBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbcGFyYW1OYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKDAsIHNlbWNvbnZfMS5BVFRSX0RCX09QRVJBVElPTl9QQVJBTUVURVIpKHBhcmFtTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5WYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpblZhbCAmJiB0eXBlb2YgaW5WYWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYmluZCBpbmZvIGlmIHByZXNlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluVmFsLmRpciA9PT0gT1VUX0JJTkQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0YmluZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkVmFsdWVzW2tleV0gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgndmFsJyBpbiBpblZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblZhbCA9IGluVmFsLnZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYWN0ZWRWYWx1ZSA9IHRoaXMuX2V4dHJhY3RWYWx1ZShpblZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmFjdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZFZhbHVlc1trZXldID0gZXh0cmFjdGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ2ZhaWxlZCB0byBzdHJpbmdpZnkgYmluZCB2YWx1ZXM6JywgdmFsdWVzLCBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICBfZXh0cmFjdFZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIgfHwgdGhpcy5faXNMb2JJbnN0YW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZXMgdGhlIGNhbGwgbGV2ZWwgYXR0cmlidXRlcyBpbiBzcGFuLlxuICAgICAgICAvLyByb3VuZFRyaXAgZmxhZyB3aWxsIHNraXAgZHVtcGluZyBiaW5kIHZhbHVlcyBmb3JcbiAgICAgICAgLy8gaW50ZXJuYWwgcm91bmR0cmlwIHNwYW5zIGdlbmVyYXRlZCBmb3Igb3JhY2xlZGIgZXhwb3J0ZWQgZnVuY3Rpb25zLlxuICAgICAgICBfc2V0Q2FsbExldmVsQXR0cmlidXRlcyhzcGFuLCBjYWxsQ29uZmlnLCByb3VuZFRyaXAgPSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKCFjYWxsQ29uZmlnKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjYWxsQ29uZmlnLnN0YXRlbWVudCkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9PUEVSQVRJT05fTkFNRSwgXG4gICAgICAgICAgICAgICAgLy8gcmV0cmlldmUganVzdCB0aGUgZmlyc3Qgd29yZFxuICAgICAgICAgICAgICAgIGNhbGxDb25maWcuc3RhdGVtZW50LnNwbGl0KCcgJylbMF0udG9VcHBlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luc3RydW1lbnRDb25maWcuZGJTdGF0ZW1lbnREdW1wIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RydW1lbnRDb25maWcuZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZykge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfUVVFUllfVEVYVCwgY2FsbENvbmZpZy5zdGF0ZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5zdHJ1bWVudENvbmZpZy5lbmhhbmNlZERhdGFiYXNlUmVwb3J0aW5nICYmICFyb3VuZFRyaXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2dldFZhbHVlcyhjYWxsQ29uZmlnLnZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2hhbmRsZUV4ZWN1dGVDdXN0b21SZXF1ZXN0KHNwYW4sIHRyYWNlQ29udGV4dCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9pbnN0cnVtZW50Q29uZmlnLnJlcXVlc3RIb29rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5zdHJ1bWVudENvbmZpZy5yZXF1ZXN0SG9vaz8uKHNwYW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHRyYWNlQ29udGV4dC5jb25uZWN0TGV2ZWxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEFyZ3M6IHRyYWNlQ29udGV4dC5hZGRpdGlvbmFsQ29uZmlnLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ0Vycm9yIHJ1bm5pbmcgcmVxdWVzdCBob29rJywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9oYW5kbGVFeGVjdXRlQ3VzdG9tUmVzdWx0KHNwYW4sIHRyYWNlQ29udGV4dCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9pbnN0cnVtZW50Q29uZmlnLnJlc3BvbnNlSG9vayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RydW1lbnRDb25maWcucmVzcG9uc2VIb29rPy4oc3Bhbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdHJhY2VDb250ZXh0LmFkZGl0aW9uYWxDb25maWcucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdFcnJvciBydW5uaW5nIHF1ZXJ5IGhvb2snLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlcyB0aGUgc3Bhbk5hbWUgZm9sbG93aW5nIHRoZSBmb3JtYXRcbiAgICAgICAgLy8ge0Z1bmN0aW9uTmFtZTpbc3FsQ29tbWFuZF0gZGIubmFtZXNwYWNlfVxuICAgICAgICAvLyBFeDogJ29yYWNsZWRiLlBvb2wuZ2V0Q29ubmVjdGlvbjpbU0VMRUNUXSBPUkNMMXxQREIxfGRiX2hpZ2guYWRiLm9yYWNsZWNsb3VkLmNvbSdcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjb25uZWN0TGV2ZWxDb25maWcgaGFzIHJlcXVpcmVkIHBhcmFtZXRlcnMgcG9wdWxhdGVkLlxuICAgICAgICBfdXBkYXRlU3Bhbk5hbWUodHJhY2VDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbm5lY3RMZXZlbENvbmZpZywgY2FsbExldmVsQ29uZmlnLCB1c2VyQ29udGV4dCwgb3BlcmF0aW9uIH0gPSB0cmFjZUNvbnRleHQ7XG4gICAgICAgICAgICBpZiAoIVtcbiAgICAgICAgICAgICAgICBjb25zdGFudHNfMS5TcGFuTmFtZXMuRVhFQ1VURSxcbiAgICAgICAgICAgICAgICBjb25zdGFudHNfMS5TcGFuTmFtZXMuRVhFQ1VURV9NQU5ZLFxuICAgICAgICAgICAgICAgIGNvbnN0YW50c18xLlNwYW5OYW1lcy5FWEVDVVRFX01TRyxcbiAgICAgICAgICAgIF0uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBmb3IgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZ1bmN0aW9ucy5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGluc3RhbmNlTmFtZSwgcGRiTmFtZSwgc2VydmljZU5hbWUgfSA9IGNvbm5lY3RMZXZlbENvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IGRiTmFtZSA9IHRoaXMuX2dldERCTmFtZVNwYWNlKGluc3RhbmNlTmFtZSwgcGRiTmFtZSwgc2VydmljZU5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgc3FsQ29tbWFuZCA9IGNhbGxMZXZlbENvbmZpZz8uc3RhdGVtZW50Py5zcGxpdCgnICcpWzBdLnRvVXBwZXJDYXNlKCkgfHwgJyc7XG4gICAgICAgICAgICB1c2VyQ29udGV4dC5zcGFuLnVwZGF0ZU5hbWUoYCR7b3BlcmF0aW9ufToke3NxbENvbW1hbmR9JHtkYk5hbWUgJiYgYCAke2RiTmFtZX1gfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZXMgdGhlIHNwYW4gd2l0aCBmaW5hbCB0cmFjZUNvbnRleHQgYXR0cmlidXRlc1xuICAgICAgICAvLyB3aGljaCBhcmUgdXBkYXRlZCBhZnRlciB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gY2FsbC5cbiAgICAgICAgLy8gcm91bmRUcmlwIGZsYWcgd2lsbCBza2lwIGR1bXBpbmcgYmluZCB2YWx1ZXMgZm9yXG4gICAgICAgIC8vIGludGVybmFsIHJvdW5kdHJpcCBzcGFucyBnZW5lcmF0ZWQgZm9yIGV4cG9ydGVkIGZ1bmN0aW9ucy5cbiAgICAgICAgX3VwZGF0ZUZpbmFsU3BhbkF0dHJpYnV0ZXModHJhY2VDb250ZXh0LCByb3VuZFRyaXAgPSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlQ29udGV4dC51c2VyQ29udGV4dC5zcGFuO1xuICAgICAgICAgICAgLy8gU2V0IGlmIGFkZGl0aW9uYWwgY29ubmVjdGlvbiBhbmQgY2FsbCBwYXJhbWV0ZXJzXG4gICAgICAgICAgICAvLyBhcmUgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAodHJhY2VDb250ZXh0LmNvbm5lY3RMZXZlbENvbmZpZykge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh0aGlzLl9nZXRDb25uZWN0aW9uU3BhbkF0dHJpYnV0ZXModHJhY2VDb250ZXh0LmNvbm5lY3RMZXZlbENvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYWNlQ29udGV4dC5jYWxsTGV2ZWxDb25maWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDYWxsTGV2ZWxBdHRyaWJ1dGVzKHNwYW4sIHRyYWNlQ29udGV4dC5jYWxsTGV2ZWxDb25maWcsIHJvdW5kVHJpcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJhY2VDb250ZXh0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24odHJhY2VDb250ZXh0LmVycm9yKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0cmFjZUNvbnRleHQuZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRJbnN0cnVtZW50Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0cnVtZW50Q29uZmlnID0gY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYmVmb3JlIGNhbGxpbmcgYW4gZXhwb3J0ZWQgZnVuY3Rpb25cbiAgICAgICAgLy8gZnJvbSBvcmFjbGVkYiBtb2R1bGUuXG4gICAgICAgIG9uRW50ZXJGbih0cmFjZUNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRTa2lwSW5zdHJ1bWVudGF0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IHRyYWNlQ29udGV4dC5vcGVyYXRpb247XG4gICAgICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHRyYWNlQ29udGV4dC5jb25uZWN0TGV2ZWxDb25maWdcbiAgICAgICAgICAgICAgICA/IHRoaXMuX2dldENvbm5lY3Rpb25TcGFuQXR0cmlidXRlcyh0cmFjZUNvbnRleHQuY29ubmVjdExldmVsQ29uZmlnKVxuICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICB0cmFjZUNvbnRleHQudXNlckNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgc3BhbjogdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHNwYW5OYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRyYWNlQ29udGV4dC5mbikge1xuICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlIGFjdGl2ZSBzcGFuIGNvbnRleHQgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgIHRyYWNlQ29udGV4dC5mbiA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHRyYWNlQ29udGV4dC51c2VyQ29udGV4dC5zcGFuKSwgdHJhY2VDb250ZXh0LmZuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmFjZUNvbnRleHQub3BlcmF0aW9uID09PSBjb25zdGFudHNfMS5TcGFuTmFtZXMuRVhFQ1VURSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4ZWN1dGVDdXN0b21SZXF1ZXN0KHRyYWNlQ29udGV4dC51c2VyQ29udGV4dC5zcGFuLCB0cmFjZUNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYWZ0ZXIgZXhwb3J0ZWQgZnVuY3Rpb24gZnJvbSBvcmFjbGVkYiBtb2R1bGVcbiAgICAgICAgLy8gY29tcGxldGVzLlxuICAgICAgICBvbkV4aXRGbih0cmFjZUNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICghdHJhY2VDb250ZXh0LnVzZXJDb250ZXh0Py5zcGFuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmluYWxTcGFuQXR0cmlidXRlcyh0cmFjZUNvbnRleHQpO1xuICAgICAgICAgICAgc3dpdGNoICh0cmFjZUNvbnRleHQub3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBjb25zdGFudHNfMS5TcGFuTmFtZXMuRVhFQ1VURTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXhlY3V0ZUN1c3RvbVJlc3VsdCh0cmFjZUNvbnRleHQudXNlckNvbnRleHQuc3BhbiwgdHJhY2VDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTcGFuTmFtZSh0cmFjZUNvbnRleHQpO1xuICAgICAgICAgICAgdHJhY2VDb250ZXh0LnVzZXJDb250ZXh0LnNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYSByb3VuZCB0cmlwIGNhbGwgdG8gREIgaXMgZG9uZVxuICAgICAgICAvLyBmcm9tIHRoZSBvcmFjbGVkYiBtb2R1bGUgYXMgcGFydCBvZiBzcWwgZXhlY3V0aW9uLlxuICAgICAgICBvbkJlZ2luUm91bmRUcmlwKHRyYWNlQ29udGV4dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNraXBJbnN0cnVtZW50YXRpb24oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwYW5OYW1lID0gdHJhY2VDb250ZXh0Lm9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5BdHRycyA9IHt9O1xuICAgICAgICAgICAgdHJhY2VDb250ZXh0LnVzZXJDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIHNwYW46IHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHNwYW5BdHRycyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBhZnRlciBhIHJvdW5kIHRyaXAgY2FsbCB0byBEQiBpcyBkb25lXG4gICAgICAgIC8vIGZyb20gdGhlIG9yYWNsZWRiIG1vZHVsZSBhcyBwYXJ0IG9mIHNxbCBleGVjdXRpb24uXG4gICAgICAgIG9uRW5kUm91bmRUcmlwKHRyYWNlQ29udGV4dCkge1xuICAgICAgICAgICAgaWYgKCF0cmFjZUNvbnRleHQudXNlckNvbnRleHQ/LnNwYW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgaWYgYWRkaXRpb25hbCBjb25uZWN0aW9uIGFuZCBjYWxsIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIC8vIGFyZSBhdmFpbGFibGVcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbmFsU3BhbkF0dHJpYnV0ZXModHJhY2VDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNwYW5OYW1lKHRyYWNlQ29udGV4dCk7XG4gICAgICAgICAgICB0cmFjZUNvbnRleHQudXNlckNvbnRleHQuc3Bhbi5lbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT3JhY2xlVGVsZW1ldHJ5VHJhY2VIYW5kbGVyO1xufVxuZXhwb3J0cy5nZXRPcmFjbGVUZWxlbWV0cnlUcmFjZUhhbmRsZXJDbGFzcyA9IGdldE9yYWNsZVRlbGVtZXRyeVRyYWNlSGFuZGxlckNsYXNzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3JhY2xlVGVsZW1ldHJ5VHJhY2VIYW5kbGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC4zMy4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1vcmFjbGVkYic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqIENvcHlyaWdodCAoYykgMjAyNSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PcmFjbGVJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBPcmFjbGVUZWxlbWV0cnlUcmFjZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL09yYWNsZVRlbGVtZXRyeVRyYWNlSGFuZGxlclwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNsYXNzIE9yYWNsZUluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIF90bUhhbmRsZXI7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlT3JhY2xlREIgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ29yYWNsZWRiJywgWyc+PSA2LjcgPCA3J10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdG1IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSByZWdpc3RlcmVkLCBzbyB1bnJlZ2lzdGVyIGl0LlxuICAgICAgICAgICAgICAgIG1vZHVsZUV4cG9ydHMudHJhY2VIYW5kbGVyLnNldFRyYWNlSW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90bUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoQ2xhc3MgPSAoMCwgT3JhY2xlVGVsZW1ldHJ5VHJhY2VIYW5kbGVyXzEuZ2V0T3JhY2xlVGVsZW1ldHJ5VHJhY2VIYW5kbGVyQ2xhc3MpKG1vZHVsZUV4cG9ydHMpO1xuICAgICAgICAgICAgaWYgKHRoQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBuZXcgdGhDbGFzcygoKSA9PiB0aGlzLnRyYWNlciwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBvYmouZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGluc3RhbmNlIHdpdGggb3JhY2xlZGIuXG4gICAgICAgICAgICAgICAgbW9kdWxlRXhwb3J0cy50cmFjZUhhbmRsZXIuc2V0VHJhY2VJbnN0YW5jZShvYmopO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RtSGFuZGxlciA9IG9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90bUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVFeHBvcnRzLnRyYWNlSGFuZGxlci5zZXRUcmFjZUluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG1IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbbW9kdWxlT3JhY2xlREJdO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgY29uZmlnIGluIE9yYWNsZVRlbGVtZXRyeVRyYWNlSGFuZGxlciBvYmouXG4gICAgICAgIHRoaXMuX3RtSGFuZGxlcj8uc2V0SW5zdHJ1bWVudENvbmZpZyh0aGlzLl9jb25maWcpO1xuICAgIH1cbn1cbmV4cG9ydHMuT3JhY2xlSW5zdHJ1bWVudGF0aW9uID0gT3JhY2xlSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqIENvcHlyaWdodCAoYykgMjAyNSwgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PcmFjbGVJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcmFjbGVJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLk9yYWNsZUluc3RydW1lbnRhdGlvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FVkVOVF9MSVNURU5FUlNfU0VUID0gdm9pZCAwO1xuZXhwb3J0cy5FVkVOVF9MSVNURU5FUlNfU0VUID0gU3ltYm9sKCdvcGVudGVsZW1ldHJ5Lmluc3RydW1lbnRhdGlvbi5wZy5ldmVudExpc3RlbmVyc1NldCcpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gUG9zdGdyZXNxbCBzcGVjaWZpYyBhdHRyaWJ1dGVzIG5vdCBjb3ZlcmVkIGJ5IHNlbWFudGljIGNvbnZlbnRpb25zXG52YXIgQXR0cmlidXRlTmFtZXM7XG4oZnVuY3Rpb24gKEF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJQR19WQUxVRVNcIl0gPSBcImRiLnBvc3RncmVzcWwudmFsdWVzXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJQR19QTEFOXCJdID0gXCJkYi5wb3N0Z3Jlc3FsLnBsYW5cIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIklETEVfVElNRU9VVF9NSUxMSVNcIl0gPSBcImRiLnBvc3RncmVzcWwuaWRsZS50aW1lb3V0Lm1pbGxpc1wiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiTUFYX0NMSUVOVFwiXSA9IFwiZGIucG9zdGdyZXNxbC5tYXguY2xpZW50XCI7XG59KShBdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgfHwgKGV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXR0cmlidXRlTmFtZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTl9QRU5ESU5HX1JFUVVFU1RTID0gZXhwb3J0cy5NRVRSSUNfREJfQ0xJRU5UX0NPTk5FQ1RJT05fQ09VTlQgPSBleHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9QT1NUR1JFU1FMID0gZXhwb3J0cy5EQl9DTElFTlRfQ09OTkVDVElPTl9TVEFURV9WQUxVRV9VU0VEID0gZXhwb3J0cy5EQl9DTElFTlRfQ09OTkVDVElPTl9TVEFURV9WQUxVRV9JRExFID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSBleHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9VU0VSID0gZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9IGV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSBleHBvcnRzLkFUVFJfREJfTkFNRSA9IGV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9IGV4cG9ydHMuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9TVEFURSA9IGV4cG9ydHMuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9QT09MX05BTUUgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvbiBwb29sOyB1bmlxdWUgd2l0aGluIHRoZSBpbnN0cnVtZW50ZWQgYXBwbGljYXRpb24uIEluIGNhc2UgdGhlIGNvbm5lY3Rpb24gcG9vbCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHByb3ZpZGUgYSBuYW1lLCBpbnN0cnVtZW50YXRpb24gKipTSE9VTEQqKiB1c2UgYSBjb21iaW5hdGlvbiBvZiBwYXJhbWV0ZXJzIHRoYXQgd291bGQgbWFrZSB0aGUgbmFtZSB1bmlxdWUsIGZvciBleGFtcGxlLCBjb21iaW5pbmcgYXR0cmlidXRlcyBgc2VydmVyLmFkZHJlc3NgLCBgc2VydmVyLnBvcnRgLCBhbmQgYGRiLm5hbWVzcGFjZWAsIGZvcm1hdHRlZCBhcyBgc2VydmVyLmFkZHJlc3M6c2VydmVyLnBvcnQvZGIubmFtZXNwYWNlYC4gSW5zdHJ1bWVudGF0aW9ucyB0aGF0IGdlbmVyYXRlIGNvbm5lY3Rpb24gcG9vbCBuYW1lIGZvbGxvd2luZyBkaWZmZXJlbnQgcGF0dGVybnMgKipTSE9VTEQqKiBkb2N1bWVudCBpdC5cbiAqXG4gKiBAZXhhbXBsZSBteURhdGFTb3VyY2VcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9QT09MX05BTUUgPSAnZGIuY2xpZW50LmNvbm5lY3Rpb24ucG9vbC5uYW1lJztcbi8qKlxuICogVGhlIHN0YXRlIG9mIGEgY29ubmVjdGlvbiBpbiB0aGUgcG9vbFxuICpcbiAqIEBleGFtcGxlIGlkbGVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9TVEFURSA9ICdkYi5jbGllbnQuY29ubmVjdGlvbi5zdGF0ZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgLCBgc2VydmVyLnBvcnRgIGF0dHJpYnV0ZXMgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBcIlNlcnZlcj0obG9jYWxkYilcXFxcdjExLjA7SW50ZWdyYXRlZCBTZWN1cml0eT10cnVlO1wiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AgYW5kIGBzZXJ2ZXIucG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9ICdkYi5jb25uZWN0aW9uX3N0cmluZyc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgZGIubmFtZXNwYWNlYCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIGN1c3RvbWVyc1xuICogQGV4YW1wbGUgbWFpblxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIubmFtZXNwYWNlYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX05BTUUgPSAnZGIubmFtZSc7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQGV4YW1wbGUgU0VMRUNUICogRlJPTSB3dXNlcl90YWJsZVxuICogQGV4YW1wbGUgU0VUIG15a2V5IFwiV3VWYWx1ZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9ICdkYi5zdGF0ZW1lbnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLnN5c3RlbS5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuc3lzdGVtLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIG5vIHJlcGxhY2VtZW50IGF0IHRoaXMgdGltZS5cbiAqXG4gKiBAZXhhbXBsZSByZWFkb25seV91c2VyXG4gKiBAZXhhbXBsZSByZXBvcnRpbmdfdXNlclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZW1vdmVkLCBubyByZXBsYWNlbWVudCBhdCB0aGlzIHRpbWUuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9VU0VSID0gJ2RiLnVzZXInO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIGV4YW1wbGUuY29tXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSAnbmV0LnBlZXIubmFtZSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLnBvcnRgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5wb3J0YCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgODA4MFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLnBvcnRgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5wb3J0YCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gJ25ldC5wZWVyLnBvcnQnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiaWRsZVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfQ0xJRU5UX0NPTk5FQ1RJT05fU1RBVEV9LlxuICovXG5leHBvcnRzLkRCX0NMSUVOVF9DT05ORUNUSU9OX1NUQVRFX1ZBTFVFX0lETEUgPSAnaWRsZSc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJ1c2VkXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9TVEFURX0uXG4gKi9cbmV4cG9ydHMuREJfQ0xJRU5UX0NPTk5FQ1RJT05fU1RBVEVfVkFMVUVfVVNFRCA9ICd1c2VkJztcbi8qKlxuICogRW51bSB2YWx1ZSBcInBvc3RncmVzcWxcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0RCX1NZU1RFTX0uXG4gKi9cbmV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX1BPU1RHUkVTUUwgPSAncG9zdGdyZXNxbCc7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluIHN0YXRlIGRlc2NyaWJlZCBieSB0aGUgYHN0YXRlYCBhdHRyaWJ1dGVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0cmljIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuTUVUUklDX0RCX0NMSUVOVF9DT05ORUNUSU9OX0NPVU5UID0gJ2RiLmNsaWVudC5jb25uZWN0aW9uLmNvdW50Jztcbi8qKlxuICogVGhlIG51bWJlciBvZiBjdXJyZW50IHBlbmRpbmcgcmVxdWVzdHMgZm9yIGFuIG9wZW4gY29ubmVjdGlvblxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfREJfQ0xJRU5UX0NPTk5FQ1RJT05fUEVORElOR19SRVFVRVNUUyA9ICdkYi5jbGllbnQuY29ubmVjdGlvbi5wZW5kaW5nX3JlcXVlc3RzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3Bhbk5hbWVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIENvbnRhaW5zIHNwYW4gbmFtZXMgcHJvZHVjZWQgYnkgaW5zdHJ1bWVudGF0aW9uXG52YXIgU3Bhbk5hbWVzO1xuKGZ1bmN0aW9uIChTcGFuTmFtZXMpIHtcbiAgICBTcGFuTmFtZXNbXCJRVUVSWV9QUkVGSVhcIl0gPSBcInBnLnF1ZXJ5XCI7XG4gICAgU3Bhbk5hbWVzW1wiQ09OTkVDVFwiXSA9IFwicGcuY29ubmVjdFwiO1xuICAgIFNwYW5OYW1lc1tcIlBPT0xfQ09OTkVDVFwiXSA9IFwicGctcG9vbC5jb25uZWN0XCI7XG59KShTcGFuTmFtZXMgPSBleHBvcnRzLlNwYW5OYW1lcyB8fCAoZXhwb3J0cy5TcGFuTmFtZXMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Bhbk5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc09iamVjdFdpdGhUZXh0U3RyaW5nID0gZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBleHBvcnRzLnBhdGNoQ2xpZW50Q29ubmVjdENhbGxiYWNrID0gZXhwb3J0cy5wYXRjaENhbGxiYWNrUEdQb29sID0gZXhwb3J0cy51cGRhdGVDb3VudGVyID0gZXhwb3J0cy5nZXRQb29sTmFtZSA9IGV4cG9ydHMucGF0Y2hDYWxsYmFjayA9IGV4cG9ydHMuaGFuZGxlRXhlY3V0aW9uUmVzdWx0ID0gZXhwb3J0cy5oYW5kbGVDb25maWdRdWVyeSA9IGV4cG9ydHMuc2hvdWxkU2tpcEluc3RydW1lbnRhdGlvbiA9IGV4cG9ydHMuZ2V0U2VtYW50aWNBdHRyaWJ1dGVzRnJvbVBvb2xDb25uZWN0aW9uID0gZXhwb3J0cy5nZXRTZW1hbnRpY0F0dHJpYnV0ZXNGcm9tQ29ubmVjdGlvbiA9IGV4cG9ydHMuZ2V0Q29ubmVjdGlvblN0cmluZyA9IGV4cG9ydHMucGFyc2VBbmRNYXNrQ29ubmVjdGlvblN0cmluZyA9IGV4cG9ydHMucGFyc2VOb3JtYWxpemVkT3BlcmF0aW9uTmFtZSA9IGV4cG9ydHMuZ2V0UXVlcnlTcGFuTmFtZSA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi9zZW1jb252XCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3QgU3Bhbk5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9TcGFuTmFtZXNcIik7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgYSBsb3cgY2FyZGluYWxpdHkgc3BhbiBuYW1lIGZyb20gd2hhdGV2ZXIgaW5mbyB3ZSBoYXZlXG4gKiBhYm91dCB0aGUgcXVlcnkuXG4gKlxuICogVGhpcyBpcyB0cmlja3ksIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBtb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiAodGFibGUgbmFtZSxcbiAqIG9wZXJhdGlvbiBuYW1lLCBldGMpIHRoZSBzcGVjIHJlY29tbWVuZHMgdXNpbmcgdG8gYnVpbGQgYSBsb3ctY2FyZGluYWxpdHlcbiAqIHZhbHVlIHcvbyBwYXJzaW5nLiBTbywgd2UgdXNlIGRiLm5hbWUgYW5kIGFzc3VtZSB0aGF0LCBpZiB0aGUgcXVlcnkncyBhIG5hbWVkXG4gKiBwcmVwYXJlZCBzdGF0ZW1lbnQsIHRob3NlIGBuYW1lYCB2YWx1ZXMgd2lsbCBiZSBsb3cgY2FyZGluYWxpdHkuIElmIHdlIGRvbid0XG4gKiBoYXZlIGEgbmFtZWQgcHJlcGFyZWQgc3RhdGVtZW50LCB3ZSB0cnkgdG8gcGFyc2UgYW4gb3BlcmF0aW9uIChkZXNwaXRlIHRoZVxuICogc3BlYydzIHdhcm5pbmdzKS5cbiAqXG4gKiBAcGFyYW1zIGRiTmFtZSBUaGUgbmFtZSBvZiB0aGUgZGIgYWdhaW5zdCB3aGljaCB0aGlzIHF1ZXJ5IGlzIGJlaW5nIGlzc3VlZCxcbiAqICAgd2hpY2ggY291bGQgYmUgbWlzc2luZyBpZiBubyBkYiBuYW1lIHdhcyBnaXZlbiBhdCB0aGUgdGltZSB0aGF0IHRoZVxuICogICBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC5cbiAqIEBwYXJhbXMgcXVlcnlDb25maWcgSW5mb3JtYXRpb24gd2UgaGF2ZSBhYm91dCB0aGUgcXVlcnkgYmVpbmcgaXNzdWVkLCB0eXBlZFxuICogICB0byByZWZsZWN0IG9ubHkgdGhlIHZhbGlkYXRpb24gd2UndmUgYWN0dWFsbHkgZG9uZSBvbiB0aGUgYXJncyB0b1xuICogICBgY2xpZW50LnF1ZXJ5KClgLiBUaGlzIHdpbGwgYmUgdW5kZWZpbmVkIGlmIGBjbGllbnQucXVlcnkoKWAgd2FzIGNhbGxlZFxuICogICB3aXRoIGludmFsaWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBnZXRRdWVyeVNwYW5OYW1lKGRiTmFtZSwgcXVlcnlDb25maWcpIHtcbiAgICAvLyBOQjogd2hlbiB0aGUgcXVlcnkgY29uZmlnIGlzIGludmFsaWQsIHdlIG9taXQgdGhlIGRiTmFtZSB0b28sIHNvIHRoYXRcbiAgICAvLyBzb21lb25lIChvciBzb21lIHRvb2wpIHJlYWRpbmcgdGhlIHNwYW4gbmFtZSBkb2Vzbid0IG1pc2ludGVycHJldCB0aGVcbiAgICAvLyBkYk5hbWUgYXMgYmVpbmcgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgb3Igc3FsIGNvbW1pdCBuYW1lLlxuICAgIGlmICghcXVlcnlDb25maWcpXG4gICAgICAgIHJldHVybiBTcGFuTmFtZXNfMS5TcGFuTmFtZXMuUVVFUllfUFJFRklYO1xuICAgIC8vIEVpdGhlciB0aGUgbmFtZSBvZiBhIHByZXBhcmVkIHN0YXRlbWVudDsgb3IgYW4gYXR0ZW1wdGVkIHBhcnNlXG4gICAgLy8gb2YgdGhlIFNRTCBjb21tYW5kLCBub3JtYWxpemVkIHRvIHVwcGVyY2FzZTsgb3IgdW5rbm93bi5cbiAgICBjb25zdCBjb21tYW5kID0gdHlwZW9mIHF1ZXJ5Q29uZmlnLm5hbWUgPT09ICdzdHJpbmcnICYmIHF1ZXJ5Q29uZmlnLm5hbWVcbiAgICAgICAgPyBxdWVyeUNvbmZpZy5uYW1lXG4gICAgICAgIDogcGFyc2VOb3JtYWxpemVkT3BlcmF0aW9uTmFtZShxdWVyeUNvbmZpZy50ZXh0KTtcbiAgICByZXR1cm4gYCR7U3Bhbk5hbWVzXzEuU3Bhbk5hbWVzLlFVRVJZX1BSRUZJWH06JHtjb21tYW5kfSR7ZGJOYW1lID8gYCAke2RiTmFtZX1gIDogJyd9YDtcbn1cbmV4cG9ydHMuZ2V0UXVlcnlTcGFuTmFtZSA9IGdldFF1ZXJ5U3Bhbk5hbWU7XG5mdW5jdGlvbiBwYXJzZU5vcm1hbGl6ZWRPcGVyYXRpb25OYW1lKHF1ZXJ5VGV4dCkge1xuICAgIGNvbnN0IGluZGV4T2ZGaXJzdFNwYWNlID0gcXVlcnlUZXh0LmluZGV4T2YoJyAnKTtcbiAgICBsZXQgc3FsQ29tbWFuZCA9IGluZGV4T2ZGaXJzdFNwYWNlID09PSAtMVxuICAgICAgICA/IHF1ZXJ5VGV4dFxuICAgICAgICA6IHF1ZXJ5VGV4dC5zbGljZSgwLCBpbmRleE9mRmlyc3RTcGFjZSk7XG4gICAgc3FsQ29tbWFuZCA9IHNxbENvbW1hbmQudG9VcHBlckNhc2UoKTtcbiAgICAvLyBIYW5kbGUgcXVlcnkgdGV4dCBiZWluZyBcIkNPTU1JVDtcIiwgd2hpY2ggaGFzIGFuIGV4dHJhIHNlbWljb2xvbiBiZWZvcmUgdGhlIHNwYWNlLlxuICAgIHJldHVybiBzcWxDb21tYW5kLmVuZHNXaXRoKCc7JykgPyBzcWxDb21tYW5kLnNsaWNlKDAsIC0xKSA6IHNxbENvbW1hbmQ7XG59XG5leHBvcnRzLnBhcnNlTm9ybWFsaXplZE9wZXJhdGlvbk5hbWUgPSBwYXJzZU5vcm1hbGl6ZWRPcGVyYXRpb25OYW1lO1xuZnVuY3Rpb24gcGFyc2VBbmRNYXNrQ29ubmVjdGlvblN0cmluZyhjb25uZWN0aW9uU3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGNvbm5lY3Rpb24gc3RyaW5nXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoY29ubmVjdGlvblN0cmluZyk7XG4gICAgICAgIC8vIFJlbW92ZSBhbGwgYXV0aCBpbmZvcm1hdGlvbiAodXNlcm5hbWUgYW5kIHBhc3N3b3JkKVxuICAgICAgICB1cmwudXNlcm5hbWUgPSAnJztcbiAgICAgICAgdXJsLnBhc3N3b3JkID0gJyc7XG4gICAgICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWYgcGFyc2luZyBmYWlscywgcmV0dXJuIGEgZ2VuZXJpYyBjb25uZWN0aW9uIHN0cmluZ1xuICAgICAgICByZXR1cm4gJ3Bvc3RncmVzcWw6Ly9sb2NhbGhvc3Q6NTQzMi8nO1xuICAgIH1cbn1cbmV4cG9ydHMucGFyc2VBbmRNYXNrQ29ubmVjdGlvblN0cmluZyA9IHBhcnNlQW5kTWFza0Nvbm5lY3Rpb25TdHJpbmc7XG5mdW5jdGlvbiBnZXRDb25uZWN0aW9uU3RyaW5nKHBhcmFtcykge1xuICAgIGlmICgnY29ubmVjdGlvblN0cmluZycgaW4gcGFyYW1zICYmIHBhcmFtcy5jb25uZWN0aW9uU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFuZE1hc2tDb25uZWN0aW9uU3RyaW5nKHBhcmFtcy5jb25uZWN0aW9uU3RyaW5nKTtcbiAgICB9XG4gICAgY29uc3QgaG9zdCA9IHBhcmFtcy5ob3N0IHx8ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHBvcnQgPSBwYXJhbXMucG9ydCB8fCA1NDMyO1xuICAgIGNvbnN0IGRhdGFiYXNlID0gcGFyYW1zLmRhdGFiYXNlIHx8ICcnO1xuICAgIHJldHVybiBgcG9zdGdyZXNxbDovLyR7aG9zdH06JHtwb3J0fS8ke2RhdGFiYXNlfWA7XG59XG5leHBvcnRzLmdldENvbm5lY3Rpb25TdHJpbmcgPSBnZXRDb25uZWN0aW9uU3RyaW5nO1xuZnVuY3Rpb24gZ2V0UG9ydChwb3J0KSB7XG4gICAgLy8gUG9ydCBtYXkgYmUgTmFOIGFzIHBhcnNlSW50KCkgaXMgdXNlZCBvbiB0aGUgdmFsdWUsIHBhc3NpbmcgbnVsbCB3aWxsIHJlc3VsdCBpbiBOYU4gYmVpbmcgcGFyc2VkLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9icmlhbmMvbm9kZS1wb3N0Z3Jlcy9ibG9iLzJhOGVmYmVlMDlhMjg0YmUxMjc0OGVkMzk2MmJjOWI4MTY5NjVlMzYvcGFja2FnZXMvcGcvbGliL2Nvbm5lY3Rpb24tcGFyYW1ldGVycy5qcyNMNjZcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwb3J0KSkge1xuICAgICAgICByZXR1cm4gcG9ydDtcbiAgICB9XG4gICAgLy8gVW5hYmxlIHRvIGZpbmQgdGhlIGRlZmF1bHQgdXNlZCBpbiBwZyBjb2RlLCBzbyBmYWxsaW5nIGJhY2sgdG8gJ3VuZGVmaW5lZCcuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFNlbWFudGljQXR0cmlidXRlc0Zyb21Db25uZWN0aW9uKHBhcmFtcywgc2VtY29udlN0YWJpbGl0eSkge1xuICAgIGxldCBhdHRyaWJ1dGVzID0ge307XG4gICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9TWVNURU1dOiBzZW1jb252XzEuREJfU1lTVEVNX1ZBTFVFX1BPU1RHUkVTUUwsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfTkFNRV06IHBhcmFtcy5kYXRhYmFzZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklOR106IGdldENvbm5lY3Rpb25TdHJpbmcocGFyYW1zKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9VU0VSXTogcGFyYW1zLnVzZXIsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfTkFNRV06IHBhcmFtcy5ob3N0LFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX1BPUlRdOiBnZXRQb3J0KHBhcmFtcy5wb3J0KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfREJfU1lTVEVNX05BTUVdOiBzZW1hbnRpY19jb252ZW50aW9uc18xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX1BPU1RHUkVTUUwsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX05BTUVTUEFDRV06IHBhcmFtcy5uYW1lc3BhY2UsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogcGFyYW1zLmhvc3QsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXTogZ2V0UG9ydChwYXJhbXMucG9ydCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xufVxuZXhwb3J0cy5nZXRTZW1hbnRpY0F0dHJpYnV0ZXNGcm9tQ29ubmVjdGlvbiA9IGdldFNlbWFudGljQXR0cmlidXRlc0Zyb21Db25uZWN0aW9uO1xuZnVuY3Rpb24gZ2V0U2VtYW50aWNBdHRyaWJ1dGVzRnJvbVBvb2xDb25uZWN0aW9uKHBhcmFtcywgc2VtY29udlN0YWJpbGl0eSkge1xuICAgIGxldCB1cmw7XG4gICAgdHJ5IHtcbiAgICAgICAgdXJsID0gcGFyYW1zLmNvbm5lY3Rpb25TdHJpbmdcbiAgICAgICAgICAgID8gbmV3IFVSTChwYXJhbXMuY29ubmVjdGlvblN0cmluZylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB1cmwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5JRExFX1RJTUVPVVRfTUlMTElTXTogcGFyYW1zLmlkbGVUaW1lb3V0TWlsbGlzLFxuICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5NQVhfQ0xJRU5UXTogcGFyYW1zLm1heENsaWVudCxcbiAgICB9O1xuICAgIGlmIChzZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfU1lTVEVNXTogc2VtY29udl8xLkRCX1NZU1RFTV9WQUxVRV9QT1NUR1JFU1FMLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX05BTUVdOiB1cmw/LnBhdGhuYW1lLnNsaWNlKDEpID8/IHBhcmFtcy5kYXRhYmFzZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklOR106IGdldENvbm5lY3Rpb25TdHJpbmcocGFyYW1zKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9OQU1FXTogdXJsPy5ob3N0bmFtZSA/PyBwYXJhbXMuaG9zdCxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogTnVtYmVyKHVybD8ucG9ydCkgfHwgZ2V0UG9ydChwYXJhbXMucG9ydCksXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfVVNFUl06IHVybD8udXNlcm5hbWUgPz8gcGFyYW1zLnVzZXIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1NZU1RFTV9OQU1FXTogc2VtYW50aWNfY29udmVudGlvbnNfMS5EQl9TWVNURU1fTkFNRV9WQUxVRV9QT1NUR1JFU1FMLFxuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9OQU1FU1BBQ0VdOiBwYXJhbXMubmFtZXNwYWNlLFxuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfQUREUkVTU106IHVybD8uaG9zdG5hbWUgPz8gcGFyYW1zLmhvc3QsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXTogTnVtYmVyKHVybD8ucG9ydCkgfHwgZ2V0UG9ydChwYXJhbXMucG9ydCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xufVxuZXhwb3J0cy5nZXRTZW1hbnRpY0F0dHJpYnV0ZXNGcm9tUG9vbENvbm5lY3Rpb24gPSBnZXRTZW1hbnRpY0F0dHJpYnV0ZXNGcm9tUG9vbENvbm5lY3Rpb247XG5mdW5jdGlvbiBzaG91bGRTa2lwSW5zdHJ1bWVudGF0aW9uKGluc3RydW1lbnRhdGlvbkNvbmZpZykge1xuICAgIHJldHVybiAoaW5zdHJ1bWVudGF0aW9uQ29uZmlnLnJlcXVpcmVQYXJlbnRTcGFuID09PSB0cnVlICYmXG4gICAgICAgIGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSkgPT09IHVuZGVmaW5lZCk7XG59XG5leHBvcnRzLnNob3VsZFNraXBJbnN0cnVtZW50YXRpb24gPSBzaG91bGRTa2lwSW5zdHJ1bWVudGF0aW9uO1xuLy8gQ3JlYXRlIGEgc3BhbiBmcm9tIG91ciBub3JtYWxpemVkIHF1ZXJ5Q29uZmlnIG9iamVjdCxcbi8vIG9yIHJldHVybiBhIGJhc2ljIHNwYW4gaWYgbm8gcXVlcnlDb25maWcgd2FzIGdpdmVuL2NvdWxkIGJlIGNyZWF0ZWQuXG5mdW5jdGlvbiBoYW5kbGVDb25maWdRdWVyeSh0cmFjZXIsIGluc3RydW1lbnRhdGlvbkNvbmZpZywgc2VtY29udlN0YWJpbGl0eSwgcXVlcnlDb25maWcpIHtcbiAgICAvLyBDcmVhdGUgY2hpbGQgc3Bhbi5cbiAgICBjb25zdCB7IGNvbm5lY3Rpb25QYXJhbWV0ZXJzIH0gPSB0aGlzO1xuICAgIGNvbnN0IGRiTmFtZSA9IGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmRhdGFiYXNlO1xuICAgIGNvbnN0IHNwYW5OYW1lID0gZ2V0UXVlcnlTcGFuTmFtZShkYk5hbWUsIHF1ZXJ5Q29uZmlnKTtcbiAgICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGdldFNlbWFudGljQXR0cmlidXRlc0Zyb21Db25uZWN0aW9uKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLCBzZW1jb252U3RhYmlsaXR5KSxcbiAgICB9KTtcbiAgICBpZiAoIXF1ZXJ5Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICAvLyBTZXQgYXR0cmlidXRlc1xuICAgIGlmIChxdWVyeUNvbmZpZy50ZXh0KSB7XG4gICAgICAgIGlmIChzZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5PTEQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKHNlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVCwgcXVlcnlDb25maWcudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1FVRVJZX1RFWFQsIHF1ZXJ5Q29uZmlnLnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpbnN0cnVtZW50YXRpb25Db25maWcuZW5oYW5jZWREYXRhYmFzZVJlcG9ydGluZyAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHF1ZXJ5Q29uZmlnLnZhbHVlcykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlcyA9IHF1ZXJ5Q29uZmlnLnZhbHVlcy5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUudG9Qb3N0Z3JlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvUG9zdGdyZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zdHJpbmcsIG51bWJlclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuUEdfVkFMVUVTLCBjb252ZXJ0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdmYWlsZWQgdG8gc3RyaW5naWZ5ICcsIHF1ZXJ5Q29uZmlnLnZhbHVlcywgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2V0IHBsYW4gbmFtZSBhdHRyaWJ1dGUsIGlmIHByZXNlbnRcbiAgICBpZiAodHlwZW9mIHF1ZXJ5Q29uZmlnLm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuUEdfUExBTiwgcXVlcnlDb25maWcubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFuO1xufVxuZXhwb3J0cy5oYW5kbGVDb25maWdRdWVyeSA9IGhhbmRsZUNvbmZpZ1F1ZXJ5O1xuZnVuY3Rpb24gaGFuZGxlRXhlY3V0aW9uUmVzdWx0KGNvbmZpZywgc3BhbiwgcGdSZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZXNwb25zZUhvb2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5yZXNwb25zZUhvb2soc3Bhbiwge1xuICAgICAgICAgICAgICAgIGRhdGE6IHBnUmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignRXJyb3IgcnVubmluZyByZXNwb25zZSBob29rJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5oYW5kbGVFeGVjdXRpb25SZXN1bHQgPSBoYW5kbGVFeGVjdXRpb25SZXN1bHQ7XG5mdW5jdGlvbiBwYXRjaENhbGxiYWNrKGluc3RydW1lbnRhdGlvbkNvbmZpZywgc3BhbiwgY2IsIGF0dHJpYnV0ZXMsIHJlY29yZER1cmF0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDYWxsYmFjayhlcnIsIHJlcykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVyciwgJ2NvZGUnKSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VSUk9SX1RZUEVdID0gZXJyWydjb2RlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZUV4ZWN1dGlvblJlc3VsdChpbnN0cnVtZW50YXRpb25Db25maWcsIHNwYW4sIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3JkRHVyYXRpb24oKTtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIHJlcyk7XG4gICAgfTtcbn1cbmV4cG9ydHMucGF0Y2hDYWxsYmFjayA9IHBhdGNoQ2FsbGJhY2s7XG5mdW5jdGlvbiBnZXRQb29sTmFtZShwb29sKSB7XG4gICAgbGV0IHBvb2xOYW1lID0gJyc7XG4gICAgcG9vbE5hbWUgKz0gKHBvb2w/Lmhvc3QgPyBgJHtwb29sLmhvc3R9YCA6ICd1bmtub3duX2hvc3QnKSArICc6JztcbiAgICBwb29sTmFtZSArPSAocG9vbD8ucG9ydCA/IGAke3Bvb2wucG9ydH1gIDogJ3Vua25vd25fcG9ydCcpICsgJy8nO1xuICAgIHBvb2xOYW1lICs9IHBvb2w/LmRhdGFiYXNlID8gYCR7cG9vbC5kYXRhYmFzZX1gIDogJ3Vua25vd25fZGF0YWJhc2UnO1xuICAgIHJldHVybiBwb29sTmFtZS50cmltKCk7XG59XG5leHBvcnRzLmdldFBvb2xOYW1lID0gZ2V0UG9vbE5hbWU7XG5mdW5jdGlvbiB1cGRhdGVDb3VudGVyKHBvb2xOYW1lLCBwb29sLCBjb25uZWN0aW9uQ291bnQsIGNvbm5lY3Rpb25QZW5kaW5nUmVxdWVzdHMsIGxhdGVzdENvdW50ZXIpIHtcbiAgICBjb25zdCBhbGwgPSBwb29sLnRvdGFsQ291bnQ7XG4gICAgY29uc3QgcGVuZGluZyA9IHBvb2wud2FpdGluZ0NvdW50O1xuICAgIGNvbnN0IGlkbGUgPSBwb29sLmlkbGVDb3VudDtcbiAgICBjb25zdCB1c2VkID0gYWxsIC0gaWRsZTtcbiAgICBjb25uZWN0aW9uQ291bnQuYWRkKHVzZWQgLSBsYXRlc3RDb3VudGVyLnVzZWQsIHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX0NMSUVOVF9DT05ORUNUSU9OX1NUQVRFXTogc2VtY29udl8xLkRCX0NMSUVOVF9DT05ORUNUSU9OX1NUQVRFX1ZBTFVFX1VTRUQsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9QT09MX05BTUVdOiBwb29sTmFtZSxcbiAgICB9KTtcbiAgICBjb25uZWN0aW9uQ291bnQuYWRkKGlkbGUgLSBsYXRlc3RDb3VudGVyLmlkbGUsIHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX0NMSUVOVF9DT05ORUNUSU9OX1NUQVRFXTogc2VtY29udl8xLkRCX0NMSUVOVF9DT05ORUNUSU9OX1NUQVRFX1ZBTFVFX0lETEUsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9QT09MX05BTUVdOiBwb29sTmFtZSxcbiAgICB9KTtcbiAgICBjb25uZWN0aW9uUGVuZGluZ1JlcXVlc3RzLmFkZChwZW5kaW5nIC0gbGF0ZXN0Q291bnRlci5wZW5kaW5nLCB7XG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9DTElFTlRfQ09OTkVDVElPTl9QT09MX05BTUVdOiBwb29sTmFtZSxcbiAgICB9KTtcbiAgICByZXR1cm4geyB1c2VkOiB1c2VkLCBpZGxlOiBpZGxlLCBwZW5kaW5nOiBwZW5kaW5nIH07XG59XG5leHBvcnRzLnVwZGF0ZUNvdW50ZXIgPSB1cGRhdGVDb3VudGVyO1xuZnVuY3Rpb24gcGF0Y2hDYWxsYmFja1BHUG9vbChzcGFuLCBjYikge1xuICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkQ2FsbGJhY2soZXJyLCByZXMsIGRvbmUpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIHJlcywgZG9uZSk7XG4gICAgfTtcbn1cbmV4cG9ydHMucGF0Y2hDYWxsYmFja1BHUG9vbCA9IHBhdGNoQ2FsbGJhY2tQR1Bvb2w7XG5mdW5jdGlvbiBwYXRjaENsaWVudENvbm5lY3RDYWxsYmFjayhzcGFuLCBjYikge1xuICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkQ2xpZW50Q29ubmVjdENhbGxiYWNrKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgY29kZTogYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5leHBvcnRzLnBhdGNoQ2xpZW50Q29ubmVjdENhbGxiYWNrID0gcGF0Y2hDbGllbnRDb25uZWN0Q2FsbGJhY2s7XG4vKipcbiAqIEF0dGVtcHQgdG8gZ2V0IGEgbWVzc2FnZSBzdHJpbmcgZnJvbSBhIHRocm93biB2YWx1ZSwgd2hpbGUgYmVpbmcgcXVpdGVcbiAqIGRlZmVuc2l2ZSwgdG8gcmVjb2duaXplIHRoZSBmYWN0IHRoYXQsIGluIEpTLCBhbnkga2luZCBvZiB2YWx1ZSAoZXZlblxuICogcHJpbWl0aXZlcykgY2FuIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIGUgPT09ICdvYmplY3QnICYmIGUgIT09IG51bGwgJiYgJ21lc3NhZ2UnIGluIGVcbiAgICAgICAgPyBTdHJpbmcoZS5tZXNzYWdlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0RXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlO1xuZnVuY3Rpb24gaXNPYmplY3RXaXRoVGV4dFN0cmluZyhpdCkge1xuICAgIHJldHVybiAodHlwZW9mIGl0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgaXQ/LnRleHQgPT09ICdzdHJpbmcnKTtcbn1cbmV4cG9ydHMuaXNPYmplY3RXaXRoVGV4dFN0cmluZyA9IGlzT2JqZWN0V2l0aFRleHRTdHJpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNjAuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGcnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QZ0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBpbnRlcm5hbF90eXBlc18xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtdHlwZXNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3Qgc3FsX2NvbW1vbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NxbC1jb21tb25cIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBTcGFuTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL1NwYW5OYW1lc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5mdW5jdGlvbiBleHRyYWN0TW9kdWxlRXhwb3J0cyhtb2R1bGUpIHtcbiAgICByZXR1cm4gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnXG4gICAgICAgID8gbW9kdWxlLmRlZmF1bHQgLy8gRVNNXG4gICAgICAgIDogbW9kdWxlOyAvLyBDb21tb25KU1xufVxuY2xhc3MgUGdJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICAvLyBQb29sIGV2ZW50cyBjb25uZWN0LCBhY3F1aXJlLCByZWxlYXNlIGFuZCByZW1vdmUgY2FuIGJlIGNhbGxlZFxuICAgIC8vIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZhbHVlcyBvZiB0b3RhbCwgaWRsZSBhbmQgd2FpdGluZ1xuICAgIC8vIGNvbm5lY3Rpb25zLiBUaGUgX2Nvbm5lY3Rpb25zQ291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgbGF0ZXN0XG4gICAgLy8gdmFsdWVzIGFuZCBvbmx5IHVwZGF0ZSB0aGUgbWV0cmljcyBfY29ubmVjdGlvbnNDb3VudCBhbmQgX2Nvbm5lY3Rpb25QZW5kaW5nUmVxdWVzdHNcbiAgICAvLyB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2UuXG4gICAgX2Nvbm5lY3Rpb25zQ291bnRlciA9IHtcbiAgICAgICAgdXNlZDogMCxcbiAgICAgICAgaWRsZTogMCxcbiAgICAgICAgcGVuZGluZzogMCxcbiAgICB9O1xuICAgIF9zZW1jb252U3RhYmlsaXR5O1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgPSAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2VtY29udlN0YWJpbGl0eUZyb21TdHIpKCdkYXRhYmFzZScsIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOKTtcbiAgICB9XG4gICAgX3VwZGF0ZU1ldHJpY0luc3RydW1lbnRzKCkge1xuICAgICAgICB0aGlzLl9vcGVyYXRpb25EdXJhdGlvbiA9IHRoaXMubWV0ZXIuY3JlYXRlSGlzdG9ncmFtKHNlbWFudGljX2NvbnZlbnRpb25zXzEuTUVUUklDX0RCX0NMSUVOVF9PUEVSQVRJT05fRFVSQVRJT04sIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRHVyYXRpb24gb2YgZGF0YWJhc2UgY2xpZW50IG9wZXJhdGlvbnMuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgICAgIHZhbHVlVHlwZTogYXBpXzEuVmFsdWVUeXBlLkRPVUJMRSxcbiAgICAgICAgICAgIGFkdmljZToge1xuICAgICAgICAgICAgICAgIGV4cGxpY2l0QnVja2V0Qm91bmRhcmllczogW1xuICAgICAgICAgICAgICAgICAgICAwLjAwMSwgMC4wMDUsIDAuMDEsIDAuMDUsIDAuMSwgMC41LCAxLCA1LCAxMCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zQ291bnRlciA9IHtcbiAgICAgICAgICAgIGlkbGU6IDAsXG4gICAgICAgICAgICBwZW5kaW5nOiAwLFxuICAgICAgICAgICAgdXNlZDogMCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY29ubmVjdGlvbnNDb3VudCA9IHRoaXMubWV0ZXIuY3JlYXRlVXBEb3duQ291bnRlcihzZW1jb252XzEuTUVUUklDX0RCX0NMSUVOVF9DT05ORUNUSU9OX0NPVU5ULCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluIHN0YXRlIGRlc2NyaWJlZCBieSB0aGUgc3RhdGUgYXR0cmlidXRlLicsXG4gICAgICAgICAgICB1bml0OiAne2Nvbm5lY3Rpb259JyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25QZW5kaW5nUmVxdWVzdHMgPSB0aGlzLm1ldGVyLmNyZWF0ZVVwRG93bkNvdW50ZXIoc2VtY29udl8xLk1FVFJJQ19EQl9DTElFTlRfQ09OTkVDVElPTl9QRU5ESU5HX1JFUVVFU1RTLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBudW1iZXIgb2YgY3VycmVudCBwZW5kaW5nIHJlcXVlc3RzIGZvciBhbiBvcGVuIGNvbm5lY3Rpb24uJyxcbiAgICAgICAgICAgIHVuaXQ6ICd7Y29ubmVjdGlvbn0nLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgU1VQUE9SVEVEX1BHX1ZFUlNJT05TID0gWyc+PTguMC4zIDw5J107XG4gICAgICAgIGNvbnN0IFNVUFBPUlRFRF9QR19QT09MX1ZFUlNJT05TID0gWyc+PTIuMC4wIDw0J107XG4gICAgICAgIGNvbnN0IG1vZHVsZVBnTmF0aXZlQ2xpZW50ID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdwZy9saWIvbmF0aXZlL2NsaWVudC5qcycsIFNVUFBPUlRFRF9QR19WRVJTSU9OUywgdGhpcy5fcGF0Y2hQZ0NsaWVudC5iaW5kKHRoaXMpLCB0aGlzLl91bnBhdGNoUGdDbGllbnQuYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnN0IG1vZHVsZVBnQ2xpZW50ID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdwZy9saWIvY2xpZW50LmpzJywgU1VQUE9SVEVEX1BHX1ZFUlNJT05TLCB0aGlzLl9wYXRjaFBnQ2xpZW50LmJpbmQodGhpcyksIHRoaXMuX3VucGF0Y2hQZ0NsaWVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlUEcgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ3BnJywgU1VQUE9SVEVEX1BHX1ZFUlNJT05TLCAobW9kdWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGVFeHBvcnRzID0gZXh0cmFjdE1vZHVsZUV4cG9ydHMobW9kdWxlKTtcbiAgICAgICAgICAgIHRoaXMuX3BhdGNoUGdDbGllbnQobW9kdWxlRXhwb3J0cy5DbGllbnQpO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgfSwgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IGV4dHJhY3RNb2R1bGVFeHBvcnRzKG1vZHVsZSk7XG4gICAgICAgICAgICB0aGlzLl91bnBhdGNoUGdDbGllbnQobW9kdWxlRXhwb3J0cy5DbGllbnQpO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgfSwgW21vZHVsZVBnQ2xpZW50LCBtb2R1bGVQZ05hdGl2ZUNsaWVudF0pO1xuICAgICAgICBjb25zdCBtb2R1bGVQR1Bvb2wgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ3BnLXBvb2wnLCBTVVBQT1JURURfUEdfUE9PTF9WRVJTSU9OUywgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IGV4dHJhY3RNb2R1bGVFeHBvcnRzKG1vZHVsZSk7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUuY29ubmVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdjb25uZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnY29ubmVjdCcsIHRoaXMuX2dldFBvb2xDb25uZWN0UGF0Y2goKSk7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSwgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IGV4dHJhY3RNb2R1bGVFeHBvcnRzKG1vZHVsZSk7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUuY29ubmVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdjb25uZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW21vZHVsZVBHLCBtb2R1bGVQR1Bvb2xdO1xuICAgIH1cbiAgICBfcGF0Y2hQZ0NsaWVudChtb2R1bGUpIHtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2R1bGVFeHBvcnRzID0gZXh0cmFjdE1vZHVsZUV4cG9ydHMobW9kdWxlKTtcbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLnF1ZXJ5KSkge1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAncXVlcnknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUuY29ubmVjdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ2Nvbm5lY3QnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAncXVlcnknLCB0aGlzLl9nZXRDbGllbnRRdWVyeVBhdGNoKCkpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnY29ubmVjdCcsIHRoaXMuX2dldENsaWVudENvbm5lY3RQYXRjaCgpKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG4gICAgX3VucGF0Y2hQZ0NsaWVudChtb2R1bGUpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlRXhwb3J0cyA9IGV4dHJhY3RNb2R1bGVFeHBvcnRzKG1vZHVsZSk7XG4gICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnByb3RvdHlwZS5xdWVyeSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ3F1ZXJ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLmNvbm5lY3QpKSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdjb25uZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG4gICAgX2dldENsaWVudENvbm5lY3RQYXRjaCgpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAodXRpbHMuc2hvdWxkU2tpcEluc3RydW1lbnRhdGlvbihwbHVnaW4uZ2V0Q29uZmlnKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHBsdWdpbi50cmFjZXIuc3RhcnRTcGFuKFNwYW5OYW1lc18xLlNwYW5OYW1lcy5DT05ORUNULCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdXRpbHMuZ2V0U2VtYW50aWNBdHRyaWJ1dGVzRnJvbUNvbm5lY3Rpb24odGhpcywgcGx1Z2luLl9zZW1jb252U3RhYmlsaXR5KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdXRpbHMucGF0Y2hDbGllbnRDb25uZWN0Q2FsbGJhY2soc3BhbiwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBhcGlfMS5jb250ZXh0LmJpbmQoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RSZXN1bHQgPSBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNvbm5lY3RSZXN1bHQoc3BhbiwgY29ubmVjdFJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZWNvcmRPcGVyYXRpb25EdXJhdGlvbihhdHRyaWJ1dGVzLCBzdGFydFRpbWUpIHtcbiAgICAgICAgY29uc3QgbWV0cmljc0F0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5c1RvQ29weSA9IFtcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9OQU1FU1BBQ0UsXG4gICAgICAgICAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfRVJST1JfVFlQRSxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfUE9SVCxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfQUREUkVTUyxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9PUEVSQVRJT05fTkFNRSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAga2V5c1RvQ29weS5wdXNoKHNlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAga2V5c1RvQ29weS5wdXNoKHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9TWVNURU1fTkFNRSk7XG4gICAgICAgIH1cbiAgICAgICAga2V5c1RvQ29weS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBtZXRyaWNzQXR0cmlidXRlc1trZXldID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZHVyYXRpb25TZWNvbmRzID0gKDAsIGNvcmVfMS5oclRpbWVUb01pbGxpc2Vjb25kcykoKDAsIGNvcmVfMS5oclRpbWVEdXJhdGlvbikoc3RhcnRUaW1lLCAoMCwgY29yZV8xLmhyVGltZSkoKSkpIC8gMTAwMDtcbiAgICAgICAgdGhpcy5fb3BlcmF0aW9uRHVyYXRpb24ucmVjb3JkKGR1cmF0aW9uU2Vjb25kcywgbWV0cmljc0F0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICBfZ2V0Q2xpZW50UXVlcnlQYXRjaCgpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnUGF0Y2hpbmcgcGcuQ2xpZW50LnByb3RvdHlwZS5xdWVyeScpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHF1ZXJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodXRpbHMuc2hvdWxkU2tpcEluc3RydW1lbnRhdGlvbihwbHVnaW4uZ2V0Q29uZmlnKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gKDAsIGNvcmVfMS5oclRpbWUpKCk7XG4gICAgICAgICAgICAgICAgLy8gY2xpZW50LnF1ZXJ5KHRleHQsIGNiPyksIGNsaWVudC5xdWVyeSh0ZXh0LCB2YWx1ZXMsIGNiPyksIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNsaWVudC5xdWVyeShjb25maWdPYmosIGNiPykgYXJlIGFsbCB2YWxpZCBzaWduYXR1cmVzLiBXZSBjb25zdHJ1Y3RcbiAgICAgICAgICAgICAgICAvLyBhIHF1ZXJ5Q29uZmlnIG9iaiBmcm9tIGFsbCAodmFsaWQpIHNpZ25hdHVyZXMgdG8gYnVpbGQgdGhlIHNwYW4gaW4gYVxuICAgICAgICAgICAgICAgIC8vIHVuaWZpZWQgd2F5LiBXZSB2ZXJpZnkgdGhhdCB3ZSBhdCBsZWFzdCBoYXZlIHF1ZXJ5IHRleHQsIGFuZCBjb2RlXG4gICAgICAgICAgICAgICAgLy8gZGVmZW5zaXZlbHkgd2hlbiBkZWFsaW5nIHdpdGggYHF1ZXJ5Q29uZmlnYCBhZnRlciB0aGF0ICh0byBoYW5kbGUgYWxsXG4gICAgICAgICAgICAgICAgLy8gdGhlIG90aGVyIGludmFsaWQgY2FzZXMsIGxpa2UgYSBub24tYXJyYXkgZm9yIHZhbHVlcyBiZWluZyBwcm92aWRlZCkuXG4gICAgICAgICAgICAgICAgLy8gVGhlIHR5cGUgY2FzdHMgaGVyZSByZWZsZWN0IG9ubHkgd2hhdCB3ZSd2ZSBhY3R1YWxseSB2YWxpZGF0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgYXJnMCA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RBcmdJc1N0cmluZyA9IHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEFyZ0lzUXVlcnlPYmplY3RXaXRoVGV4dCA9IHV0aWxzLmlzT2JqZWN0V2l0aFRleHRTdHJpbmcoYXJnMCk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIHRoZSBgYXMgLi4uYCBjYXN0cyBiZWxvdyB3aGVuIHRoZSBUUyB2ZXJzaW9uIGlzIHVwZ3JhZGVkLlxuICAgICAgICAgICAgICAgIC8vIE5ld2VyIFRTIHZlcnNpb25zIHdpbGwgdXNlIHRoZSByZXN1bHQgb2YgZmlyc3RBcmdJc1F1ZXJ5T2JqZWN0V2l0aFRleHRcbiAgICAgICAgICAgICAgICAvLyB0byBwcm9wZXJseSBuYXJyb3cgYXJnMCwgYnV0IFRTIDQuMy41IGRvZXMgbm90LlxuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5Q29uZmlnID0gZmlyc3RBcmdJc1N0cmluZ1xuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGFyZzAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IEFycmF5LmlzQXJyYXkoYXJnc1sxXSkgPyBhcmdzWzFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogZmlyc3RBcmdJc1F1ZXJ5T2JqZWN0V2l0aFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYXJnMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfUE9TVEdSRVNRTCxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9OQU1FU1BBQ0VdOiB0aGlzLmRhdGFiYXNlLFxuICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXTogdGhpcy5jb25uZWN0aW9uUGFyYW1ldGVycy5wb3J0LFxuICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXTogdGhpcy5jb25uZWN0aW9uUGFyYW1ldGVycy5ob3N0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5Q29uZmlnPy50ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX09QRVJBVElPTl9OQU1FXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlscy5wYXJzZU5vcm1hbGl6ZWRPcGVyYXRpb25OYW1lKHF1ZXJ5Q29uZmlnPy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkRHVyYXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5yZWNvcmRPcGVyYXRpb25EdXJhdGlvbihhdHRyaWJ1dGVzLCBzdGFydFRpbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uQ29uZmlnID0gcGx1Z2luLmdldENvbmZpZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB1dGlscy5oYW5kbGVDb25maWdRdWVyeS5jYWxsKHRoaXMsIHBsdWdpbi50cmFjZXIsIGluc3RydW1lbnRhdGlvbkNvbmZpZywgcGx1Z2luLl9zZW1jb252U3RhYmlsaXR5LCBxdWVyeUNvbmZpZyk7XG4gICAgICAgICAgICAgICAgLy8gTW9kaWZ5IHF1ZXJ5IHRleHQgdy8gYSB0cmFjaW5nIGNvbW1lbnQgYmVmb3JlIGludm9raW5nIG9yaWdpbmFsIGZvclxuICAgICAgICAgICAgICAgIC8vIHRyYWNpbmcsIGJ1dCBvbmx5IGlmIGFyZ3NbMF0gaGFzIG9uZSBvZiBvdXIgZXhwZWN0ZWQgc2hhcGVzLlxuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb25Db25maWcuYWRkU3FsQ29tbWVudGVyQ29tbWVudFRvUXVlcmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RBcmdJc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9ICgwLCBzcWxfY29tbW9uXzEuYWRkU3FsQ29tbWVudGVyQ29tbWVudCkoc3BhbiwgYXJnMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RBcmdJc1F1ZXJ5T2JqZWN0V2l0aFRleHQgJiYgISgnbmFtZScgaW4gYXJnMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgcXVlcnkgb2JqZWN0LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGVyZSdzIG5vIG5hbWUgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoaXMgaW5kaWNhdGVzIGEgcHJlcGFyZWQgcXVlcnksIHdoZXJlIHRoZSBjb21tZW50IHdvdWxkIHJlbWFpbiB0aGUgc2FtZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGV2ZXJ5IGludm9jYXRpb24gYW5kIGNvbnRhaW4gYW4gb3V0ZGF0ZWQgdHJhY2UgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYXJnMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAoMCwgc3FsX2NvbW1vbl8xLmFkZFNxbENvbW1lbnRlckNvbW1lbnQpKHNwYW4sIGFyZzAudGV4dCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEJpbmQgY2FsbGJhY2sgKGlmIGFueSkgdG8gcGFyZW50IHNwYW4gKGlmIGFueSlcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGF0Y2ggUGFyYW1ldGVyUXVlcnkgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IHV0aWxzLnBhdGNoQ2FsbGJhY2soaW5zdHJ1bWVudGF0aW9uQ29uZmlnLCBzcGFuLCBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sIC8vIG5iOiBub3QgdHlwZSBzYWZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywgcmVjb3JkRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBwYXJlbnQgc3BhbiBleGlzdHMsIGJpbmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBxdWVyeUNvbmZpZz8uY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhdGNoIENvbmZpZ1F1ZXJ5IGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSB1dGlscy5wYXRjaENhbGxiYWNrKHBsdWdpbi5nZXRDb25maWcoKSwgc3BhbiwgcXVlcnlDb25maWcuY2FsbGJhY2ssIC8vIG5iOiBub3QgdHlwZSBzYWZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywgcmVjb3JkRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBwYXJlbnQgc3BhbiBleGlzdGVkLCBiaW5kIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFNwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyByZXF1ZXN0SG9vayB9ID0gaW5zdHJ1bWVudGF0aW9uQ29uZmlnO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEhvb2sgPT09ICdmdW5jdGlvbicgJiYgcXVlcnlDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBpY2sga2V5cyB0byBleHBvc2UgZXhwbGljaXRseSwgc28gd2UncmUgbm90IGxlYWtpbmcgcGcgcGFja2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJuYWxzIHRoYXQgYXJlIHN1YmplY3QgdG8gY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGFiYXNlLCBob3N0LCBwb3J0LCB1c2VyIH0gPSB0aGlzLmNvbm5lY3Rpb25QYXJhbWV0ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHsgZGF0YWJhc2UsIGhvc3QsIHBvcnQsIHVzZXIgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIb29rKHNwYW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1ZXJ5Q29uZmlnLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5iOiBpZiBgY2xpZW50LnF1ZXJ5YCBpcyBjYWxsZWQgd2l0aCBpbGxlZ2FsIGFyZ3VtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoZS5nLiwgaWYgYHF1ZXJ5Q29uZmlnLnZhbHVlc2AgaXMgcGFzc2VkIGV4cGxpY2l0bHksIGJ1dCBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1hcnJheSBpcyBnaXZlbiksIHRoZW4gdGhlIHR5cGUgY2FzdHMgd2lsbCBiZSB3cm9uZy4gQnV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGxlYXZlIGl0IHVwIHRvIHRoZSBxdWVyeUhvb2sgdG8gaGFuZGxlIHRoYXQsIGFuZCB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCBhbmQgc3dhbGxvdyBhbnkgZXJyb3JzIGl0IHRocm93cy4gVGhlIG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGFsbCB3b3JzZS4gRS5nLiwgd2UgY291bGQgbGVhdmUgYHF1ZXJ5Q29uZmlnLnZhbHVlc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGBxdWVyeUNvbmZpZy5uYW1lYCBhcyBgdW5rbm93bmAsIGJ1dCB0aGVuIHRoZSBob29rIGJvZHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd291bGQgYmUgZm9yY2VkIHRvIHZhbGlkYXRlIChvciBjYXN0KSB0aGVtIGJlZm9yZSB1c2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVtLCB3aGljaCBzZWVtcyBpbmNyZWRpYmx5IGN1bWJlcnNvbWUgZ2l2ZW4gdGhhdCB0aGVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXN0cyB3aWxsIGJlIGNvcnJlY3QgOTkuOSUgb2YgdGhlIHRpbWUgLS0gYW5kIHBnLnF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgdGhyb3cgZHVyaW5nIGRldmVsb3BtZW50IGluIHRoZSBvdGhlciAuMSVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgY2FzZXMuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHNpbXBseSBza2lwIGNhbGxpbmcgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhvb2sgd2hlbiBgdmFsdWVzYCBvciBgbmFtZWAgZG9uJ3QgaGF2ZSB0aGUgZXhwZWN0ZWQgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHRoYXQgd291bGQgYWRkIHVubmVjZXNzYXJ5IHZhbGlkYXRpb24gb3ZlcmhlYWQgdG8gZXZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9vayBpbnZvY2F0aW9uIGFuZCBwb3NzaWJseSBiZSBldmVuIG1vcmUgY29uZnVzaW5nL3VuZXhwZWN0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogcXVlcnlDb25maWcudmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBxdWVyeUNvbmZpZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2RpYWcuZXJyb3IoJ0Vycm9yIHJ1bm5pbmcgcXVlcnkgaG9vaycsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHV0aWxzLmdldEVycm9yTWVzc2FnZShlKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEJpbmQgcHJvbWlzZSB0byBwYXJlbnQgc3BhbiBhbmQgZW5kIHRoZSBzcGFuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgcGFzcy1hbG9uZyBwcm9taXNlIHdoaWNoIGVuZHMgdGhlIHNwYW4gYW5kIHRoZW4gZ29lcyB0byB1c2VyJ3Mgb3JpZyByZXNvbHZlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlscy5oYW5kbGVFeGVjdXRpb25SZXN1bHQocGx1Z2luLmdldENvbmZpZygpLCBzcGFuLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZER1cmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmREdXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZWxzZSByZXR1cm5zIHZvaWRcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAvLyB2b2lkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfc2V0UG9vbENvbm5lY3RFdmVudExpc3RlbmVycyhwZ1Bvb2wpIHtcbiAgICAgICAgaWYgKHBnUG9vbFtpbnRlcm5hbF90eXBlc18xLkVWRU5UX0xJU1RFTkVSU19TRVRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwb29sTmFtZSA9IHV0aWxzLmdldFBvb2xOYW1lKHBnUG9vbC5vcHRpb25zKTtcbiAgICAgICAgcGdQb29sLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbnNDb3VudGVyID0gdXRpbHMudXBkYXRlQ291bnRlcihwb29sTmFtZSwgcGdQb29sLCB0aGlzLl9jb25uZWN0aW9uc0NvdW50LCB0aGlzLl9jb25uZWN0aW9uUGVuZGluZ1JlcXVlc3RzLCB0aGlzLl9jb25uZWN0aW9uc0NvdW50ZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGdQb29sLm9uKCdhY3F1aXJlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbnNDb3VudGVyID0gdXRpbHMudXBkYXRlQ291bnRlcihwb29sTmFtZSwgcGdQb29sLCB0aGlzLl9jb25uZWN0aW9uc0NvdW50LCB0aGlzLl9jb25uZWN0aW9uUGVuZGluZ1JlcXVlc3RzLCB0aGlzLl9jb25uZWN0aW9uc0NvdW50ZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGdQb29sLm9uKCdyZW1vdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uc0NvdW50ZXIgPSB1dGlscy51cGRhdGVDb3VudGVyKHBvb2xOYW1lLCBwZ1Bvb2wsIHRoaXMuX2Nvbm5lY3Rpb25zQ291bnQsIHRoaXMuX2Nvbm5lY3Rpb25QZW5kaW5nUmVxdWVzdHMsIHRoaXMuX2Nvbm5lY3Rpb25zQ291bnRlcik7XG4gICAgICAgIH0pO1xuICAgICAgICBwZ1Bvb2wub24oJ3JlbGVhc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uc0NvdW50ZXIgPSB1dGlscy51cGRhdGVDb3VudGVyKHBvb2xOYW1lLCBwZ1Bvb2wsIHRoaXMuX2Nvbm5lY3Rpb25zQ291bnQsIHRoaXMuX2Nvbm5lY3Rpb25QZW5kaW5nUmVxdWVzdHMsIHRoaXMuX2Nvbm5lY3Rpb25zQ291bnRlcik7XG4gICAgICAgIH0pO1xuICAgICAgICBwZ1Bvb2xbaW50ZXJuYWxfdHlwZXNfMS5FVkVOVF9MSVNURU5FUlNfU0VUXSA9IHRydWU7XG4gICAgfVxuICAgIF9nZXRQb29sQ29ubmVjdFBhdGNoKCkge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsQ29ubmVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBpZiAodXRpbHMuc2hvdWxkU2tpcEluc3RydW1lbnRhdGlvbihwbHVnaW4uZ2V0Q29uZmlnKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbENvbm5lY3QuY2FsbCh0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNldHVwIHNwYW5cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLnRyYWNlci5zdGFydFNwYW4oU3Bhbk5hbWVzXzEuU3Bhbk5hbWVzLlBPT0xfQ09OTkVDVCwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHV0aWxzLmdldFNlbWFudGljQXR0cmlidXRlc0Zyb21Qb29sQ29ubmVjdGlvbih0aGlzLm9wdGlvbnMsIHBsdWdpbi5fc2VtY29udlN0YWJpbGl0eSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGx1Z2luLl9zZXRQb29sQ29ubmVjdEV2ZW50TGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB1dGlscy5wYXRjaENhbGxiYWNrUEdQb29sKHNwYW4sIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBwYXJlbnQgc3BhbiBleGlzdHMsIGJpbmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdFJlc3VsdCA9IGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbENvbm5lY3QuY2FsbCh0aGlzLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNvbm5lY3RSZXN1bHQoc3BhbiwgY29ubmVjdFJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuUGdJbnN0cnVtZW50YXRpb24gPSBQZ0luc3RydW1lbnRhdGlvbjtcbmZ1bmN0aW9uIGhhbmRsZUNvbm5lY3RSZXN1bHQoc3BhbiwgY29ubmVjdFJlc3VsdCkge1xuICAgIGlmICghKGNvbm5lY3RSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgICByZXR1cm4gY29ubmVjdFJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgY29ubmVjdFJlc3VsdFByb21pc2UgPSBjb25uZWN0UmVzdWx0O1xuICAgIHJldHVybiBhcGlfMS5jb250ZXh0LmJpbmQoYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgY29ubmVjdFJlc3VsdFByb21pc2VcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogdXRpbHMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuUGdJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQZ0luc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuUGdJbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXR0cmlidXRlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTQuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcGlubyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVGVsUGlub1N0cmVhbSA9IGV4cG9ydHMuZ2V0VGltZUNvbnZlcnRlciA9IHZvaWQgMDtcbmNvbnN0IHN0cmVhbV8xID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGFwaV9sb2dzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3NcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8vIFRoaXMgYmxvY2sgaXMgYSBjb3B5IChtb2R1bG8gY29kZSBzdHlsZSBhbmQgVHlwZVNjcmlwdCB0eXBlcykgb2YgdGhlIFBpbm9cbi8vIGNvZGUgdGhhdCBkZWZpbmVzIGxvZyBsZXZlbCB2YWx1ZSBhbmQgbmFtZXMuIFRoaXMgZmlsZSBpcyBwYXJ0IG9mXG4vLyAqaW5zdHJ1bWVudGluZyogUGlubywgc28gd2Ugd2FudCB0byBhdm9pZCBhIGRlcGVuZGVuY3kgb24gdGhlIGxpYnJhcnkuXG5jb25zdCBERUZBVUxUX0xFVkVMUyA9IHtcbiAgICB0cmFjZTogMTAsXG4gICAgZGVidWc6IDIwLFxuICAgIGluZm86IDMwLFxuICAgIHdhcm46IDQwLFxuICAgIGVycm9yOiA1MCxcbiAgICBmYXRhbDogNjAsXG59O1xuY29uc3QgT1RFTF9TRVZfTlVNX0ZST01fUElOT19MRVZFTCA9IHtcbiAgICBbREVGQVVMVF9MRVZFTFMudHJhY2VdOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFLFxuICAgIFtERUZBVUxUX0xFVkVMUy5kZWJ1Z106IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuREVCVUcsXG4gICAgW0RFRkFVTFRfTEVWRUxTLmluZm9dOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk8sXG4gICAgW0RFRkFVTFRfTEVWRUxTLndhcm5dOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLldBUk4sXG4gICAgW0RFRkFVTFRfTEVWRUxTLmVycm9yXTogYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5FUlJPUixcbiAgICBbREVGQVVMVF9MRVZFTFMuZmF0YWxdOiBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkZBVEFMLFxufTtcbmNvbnN0IEVYVFJBX1NFVl9OVU1TID0gW1xuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuVFJBQ0UyLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuVFJBQ0UzLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuVFJBQ0U0LFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuREVCVUcyLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuREVCVUczLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuREVCVUc0LFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuSU5GTzIsXG4gICAgYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPMyxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk80LFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuV0FSTjIsXG4gICAgYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5XQVJOMyxcbiAgICBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLldBUk40LFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRVJST1IyLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRVJST1IzLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRVJST1I0LFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRkFUQUwyLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRkFUQUwzLFxuICAgIGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRkFUQUw0LFxuXTtcbmZ1bmN0aW9uIHNldmVyaXR5TnVtYmVyRnJvbVBpbm9MZXZlbChsdmwpIHtcbiAgICAvLyBGYXN0IGNvbW1vbiBjYXNlOiBvbmUgb2YgdGhlIGtub3duIGxldmVsc1xuICAgIGNvbnN0IHNldiA9IE9URUxfU0VWX05VTV9GUk9NX1BJTk9fTEVWRUxbbHZsXTtcbiAgICBpZiAoc2V2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHNldjtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlLCBzY2FsZSB0aGUgUGlubyBsZXZlbCByYW5nZSAtLSAxMCAodHJhY2UpIHRvIDcwIChmYXRhbCsxMClcbiAgICAvLyAtLSBvbnRvIHRoZSBleHRyYSBPVGVsIHNldmVyaXR5IG51bWJlcnMgKFRSQUNFMiwgVFJBQ0UzLCAuLi4sIEZBVEFMNCkuXG4gICAgLy8gVmFsdWVzIGJlbG93IHRyYWNlICgxMCkgbWFwIHRvIFNldmVyaXR5TnVtYmVyLlRSQUNFMiwgd2hpY2ggbWF5IGJlXG4gICAgLy8gY29uc2lkZXJlZCBhIGJpdCB3ZWlyZCwgYnV0IGl0IG1lYW5zIHRoZSB1bm51bWJlcmVkIGxldmVscyBhcmUgYWx3YXlzXG4gICAgLy8ganVzdCBmb3IgZXhhY3RseSBtYXRjaGluZyB2YWx1ZXMuXG4gICAgY29uc3QgcmVsYXRpdmVMZXZlbFdlaWdodCA9IChsdmwgLSAxMCkgLyAoNzAgLSAxMCk7XG4gICAgY29uc3Qgb3RlbFNldklkeCA9IE1hdGguZmxvb3IocmVsYXRpdmVMZXZlbFdlaWdodCAqIEVYVFJBX1NFVl9OVU1TLmxlbmd0aCk7XG4gICAgY29uc3QgY2FwcGVkT1RlbElkeCA9IE1hdGgubWluKEVYVFJBX1NFVl9OVU1TLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIG90ZWxTZXZJZHgpKTtcbiAgICBjb25zdCBvdGVsU2V2VmFsdWUgPSBFWFRSQV9TRVZfTlVNU1tjYXBwZWRPVGVsSWR4XTtcbiAgICByZXR1cm4gb3RlbFNldlZhbHVlO1xufVxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGtub3dzIGhvdyB0byBjb252ZXJ0IHRoZSBcInRpbWVcIiBmaWVsZCB2YWx1ZSBvbiBhXG4gKiBQaW5vIGxvZyByZWNvcmQgdG8gYW4gT1RlbCBMb2dSZWNvcmQgdGltZXN0YW1wIHZhbHVlLlxuICpcbiAqIEhvdyB0byBjb252ZXJ0IHRoZSBzZXJpYWxpemVkIFwidGltZVwiIG9uIGEgUGlubyBsb2cgcmVjb3JkXG4gKiBkZXBlbmRzIG9uIHRoZSBMb2dnZXIncyBgU3ltYm9sKHBpbm8udGltZSlgIHByb3AsIGNvbmZpZ3VyYWJsZVxuICogdmlhIGh0dHBzOi8vZ2V0cGluby5pby8jL2RvY3MvYXBpP2lkPXRpbWVzdGFtcC1ib29sZWFuLWZ1bmN0aW9uXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgICBjb25zdCBsb2dnZXIgPSBwaW5vKHt0aW1lc3RhbXA6IHBpbm8uc3RkVGltZUZ1bmN0aW9ucy5pc29UaW1lfSlcbiAqIHJlc3VsdHMgaW4gbG9nIHJlY29yZCBlbnRyaWVzIG9mIHRoZSBmb3JtOlxuICogICAgLFwidGltZVwiOlwiMjAyNC0wNS0xN1QyMjowMzoyNS45NjlaXCJcbiAqIGBvdGVsVGltZXN0YW1wRnJvbVRpbWVgIHdpbGwgYmUgZ2l2ZW4gdGhlIHZhbHVlIG9mIHRoZSBcInRpbWVcIiBmaWVsZDpcbiAqICAgXCIyMDI0LTA1LTE3VDIyOjAzOjI1Ljk2OVpcIlxuICogd2hpY2ggc2hvdWxkIGJlIHBhcnNlZCB0byBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoLlxuICovXG5mdW5jdGlvbiBnZXRUaW1lQ29udmVydGVyKHBpbm9Mb2dnZXIsIHBpbm9Nb2QpIHtcbiAgICBjb25zdCBzdGRUaW1lRm5zID0gcGlub01vZC5zdGRUaW1lRnVuY3Rpb25zO1xuICAgIGNvbnN0IGxvZ2dlclRpbWVGbiA9IHBpbm9Mb2dnZXJbcGlub01vZC5zeW1ib2xzLnRpbWVTeW1dO1xuICAgIGlmIChsb2dnZXJUaW1lRm4gPT09IHN0ZFRpbWVGbnMuZXBvY2hUaW1lKSB7XG4gICAgICAgIHJldHVybiAodGltZSkgPT4gdGltZTtcbiAgICB9XG4gICAgZWxzZSBpZiAobG9nZ2VyVGltZUZuID09PSBzdGRUaW1lRm5zLnVuaXhUaW1lKSB7XG4gICAgICAgIHJldHVybiAodGltZSkgPT4gdGltZSAqIDFlMztcbiAgICB9XG4gICAgZWxzZSBpZiAobG9nZ2VyVGltZUZuID09PSBzdGRUaW1lRm5zLmlzb1RpbWUpIHtcbiAgICAgICAgcmV0dXJuICh0aW1lKSA9PiBuZXcgRGF0ZSh0aW1lKS5nZXRUaW1lKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGxvZ2dlclRpbWVGbiA9PT0gc3RkVGltZUZucy5udWxsVGltZSkge1xuICAgICAgICByZXR1cm4gKCkgPT4gRGF0ZS5ub3coKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZSBsb2dnZXIgaGFzIGEgY3VzdG9tIHRpbWUgZnVuY3Rpb24uIERvbid0IGd1ZXNzLlxuICAgICAgICByZXR1cm4gKCkgPT4gTmFOO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0VGltZUNvbnZlcnRlciA9IGdldFRpbWVDb252ZXJ0ZXI7XG4vKipcbiAqIEEgUGlubyBzdHJlYW0gZm9yIHNlbmRpbmcgcmVjb3JkcyB0byB0aGUgT3BlblRlbGVtZXRyeSBMb2dzIEFQSS5cbiAqXG4gKiAtIFRoaXMgc3RyZWFtIGVtaXRzIGFuICd1bmtub3duJyBldmVudCBvbiBhbiB1bnByb2Nlc3NhYmxlIHBpbm8gcmVjb3JkLlxuICogICBUaGUgZXZlbnQgYXJndW1lbnRzIGFyZTogYGxvZ0xpbmU6IHN0cmluZ2AsIGBlcnI6IHN0cmluZyB8IEVycm9yYC5cbiAqL1xuY2xhc3MgT1RlbFBpbm9TdHJlYW0gZXh0ZW5kcyBzdHJlYW1fMS5Xcml0YWJsZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyBOb3RlOiBBIFBJTk9fQ09ORklHIGV2ZW50IHdhcyBhZGRlZCB0byBwaW5vICgyMDI0LTA0LTA0KSB0byBzZW5kIGNvbmZpZ1xuICAgICAgICAvLyB0byB0cmFuc3BvcnRzLiBFdmVudHVhbGx5IE9UZWxQaW5vU3RyZWFtIG1pZ2h0IGJlIGFibGUgdG8gdXNlIHRoaXNcbiAgICAgICAgLy8gZm9yIGF1dG8tY29uZmlndXJhdGlvbiBpbiBuZXdlciBwaW5vIHZlcnNpb25zLiBUaGUgZXZlbnQgY3VycmVudGx5IGRvZXNcbiAgICAgICAgLy8gbm90IGluY2x1ZGUgdGhlIGB0aW1lU3ltYCB2YWx1ZSB0aGF0IGlzIG5lZWRlZCBoZXJlLCBob3dldmVyLlxuICAgICAgICB0aGlzLl9tZXNzYWdlS2V5ID0gb3B0aW9ucy5tZXNzYWdlS2V5O1xuICAgICAgICB0aGlzLl9sZXZlbHMgPSBvcHRpb25zLmxldmVscztcbiAgICAgICAgdGhpcy5fb3RlbFRpbWVzdGFtcEZyb21UaW1lID0gb3B0aW9ucy5vdGVsVGltZXN0YW1wRnJvbVRpbWU7XG4gICAgICAgIC8vIENhbm5vdCB1c2UgYGluc3RydW1lbnRhdGlvbi5sb2dnZXJgIHVudGlsIGhhdmUgZGVsZWdhdGluZyBMb2dnZXJQcm92aWRlcjpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvaXNzdWVzLzQzOTlcbiAgICAgICAgdGhpcy5fb3RlbExvZ2dlciA9IGFwaV9sb2dzXzEubG9ncy5nZXRMb2dnZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTik7XG4gICAgfVxuICAgIF93cml0ZShzLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBQYXJzZSwgYW5kIGhhbmRsZSBlZGdlIGNhc2VzIHNpbWlsYXIgdG8gaG93IGBwaW5vLWFidHJhY3QtdHJhbnNwb3J0YCBkb2VzOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGlub2pzL3Bpbm8tYWJzdHJhY3QtdHJhbnNwb3J0L2Jsb2IvdjEuMi4wL2luZGV4LmpzI0wyOC1MNDVcbiAgICAgICAgLy8gLSBFbWl0dGluZyBhbiAndW5rbm93bicgZXZlbnQgb24gcGFyc2UgZXJyb3IgbWltaWNrcyBwaW5vLWFic3RyYWN0LXRyYW5zcG9ydC5cbiAgICAgICAgbGV0IHJlY09iajtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlY09iaiA9IEpTT04ucGFyc2Uocyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHBhcnNlRXJyKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIEpTT04gc3VnZ2VzdHMgYSBidWcgaW4gUGlubywgb3IgYSBsb2dnZXIgY29uZmlndXJhdGlvbiBidWdcbiAgICAgICAgICAgIC8vIChhIGJvZ3VzIGBvcHRpb25zLnRpbWVzdGFtcGAgb3Igc2VyaWFsaXplcikuXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3Vua25vd24nLCBzLnRvU3RyaW5nKCksIHBhcnNlRXJyKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZWNPYmogPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgndW5rbm93bicsIHMudG9TdHJpbmcoKSwgJ051bGwgdmFsdWUgaWdub3JlZCcpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHR5cGVvZiByZWNPYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZWNPYmogPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjT2JqLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHRpbWUsIFt0aGlzLl9tZXNzYWdlS2V5XTogYm9keSwgbGV2ZWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIC8vIFRoZSB0eXBpY2FsIFBpbm8gYGhvc3RuYW1lYCBhbmQgYHBpZGAgZmllbGRzIGFyZSByZW1vdmVkIGJlY2F1c2UgdGhleVxuICAgICAgICAvLyBhcmUgcmVkdW5kYW50IHdpdGggdGhlIE9wZW5UZWxlbWV0cnkgYGhvc3QubmFtZWAgYW5kIGBwcm9jZXNzLnBpZGBcbiAgICAgICAgLy8gUmVzb3VyY2UgYXR0cmlidXRlcywgcmVzcGVjdGl2ZWx5LiBUaGlzIGNvZGUgY2Fubm90IGNoYW5nZSB0aGVcbiAgICAgICAgLy8gTG9nZ2VyUHJvdmlkZXIncyBgcmVzb3VyY2VgLCBzbyBnZXR0aW5nIHRoZSBPcGVuVGVsZW1ldHJ5IGVxdWl2YWxlbnRzXG4gICAgICAgIC8vIGRlcGVuZHMgb24gdGhlIHVzZXIgdXNpbmcgdGhlIE9wZW5UZWxlbWV0cnkgSG9zdERldGVjdG9yIGFuZFxuICAgICAgICAvLyBQcm9jZXNzRGV0ZWN0b3IuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2V0cGluby5pby8jL2RvY3MvYXBpP2lkPW9wdC1iYXNlXG4gICAgICAgIGhvc3RuYW1lLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICBwaWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIC8vIFRoZSBgdHJhY2VfaWRgIGV0IGFsIGZpZWxkcyB0aGF0IG1heSBoYXZlIGJlZW4gYWRkZWQgYnkgdGhlXG4gICAgICAgIC8vIFwibG9nIGNvcnJlbGF0aW9uXCIgZmVhdHVyZSBhcmUgc3RyaXBwZWQsIGJlY2F1c2UgdGhleSBhcmUgcmVkdW5kYW50LlxuICAgICAgICB0cmFjZV9pZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgc3Bhbl9pZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgdHJhY2VfZmxhZ3MsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIC4uLmF0dHJpYnV0ZXMgfSA9IHJlY09iajtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMuX290ZWxUaW1lc3RhbXBGcm9tVGltZSh0aW1lKTtcbiAgICAgICAgaWYgKGlzTmFOKHRpbWVzdGFtcCkpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbJ3RpbWUnXSA9IHRpbWU7IC8vIHNhdmUgdGhlIHVuZXhwZWN0ZWQgXCJ0aW1lXCIgZmllbGQgdG8gYXR0cmlidXRlc1xuICAgICAgICAgICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGF2b2lkcyBhIHBvc3NpYmxlIHN1YnRsZSBidWcgd2hlbiBhIFBpbm8gbG9nZ2VyIHVzZXNcbiAgICAgICAgLy8gYHRpbWU6IHBpbm8uc3RkVGltZUZ1bmN0aW9ucy51bml4VGltZWAgYW5kIGxvZ3MgaW4gdGhlIGZpcnN0IGhhbGYtc2Vjb25kXG4gICAgICAgIC8vIHNpbmNlIHByb2Nlc3Mgc3RhcnQuIFRoZSByb3VuZGluZyBpbnZvbHZlZCByZXN1bHRzIGluOlxuICAgICAgICAvLyAgICB0aW1lc3RhbXAgPCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luXG4gICAgICAgIC8vIElmIHRoYXQgaXMgcGFzc2VkIHRvIExvZ2dlci5lbWl0KCkgaXQgd2lsbCBiZSBtaXNpbnRlcnByZXRlZCBieVxuICAgICAgICAvLyBgdGltZUlucHV0VG9IclRpbWVgIGFzIGEgYHBlcmZvcm1hbmNlLm5vdygpYCB2YWx1ZS5cbiAgICAgICAgY29uc3QgdGltZXN0YW1wSHJUaW1lID0gKDAsIGNvcmVfMS5taWxsaXNUb0hyVGltZSkodGltZXN0YW1wKTtcbiAgICAgICAgLy8gUHJlZmVyIHVzaW5nIGBzdHJlYW0ubGFzdExldmVsYCwgYmVjYXVzZSBgcmVjT2JqLmxldmVsYCBjYW4gYmUgY3VzdG9taXplZFxuICAgICAgICAvLyB0byBhbnl0aGluZyB2aWEgYGZvcm1hdHRlcnMubGV2ZWxgXG4gICAgICAgIC8vIChodHRwczovL2dldHBpbm8uaW8vIy9kb2NzL2FwaT9pZD1mb3JtYXR0ZXJzLW9iamVjdCkuXG4gICAgICAgIGNvbnN0IGxhc3RMZXZlbCA9IHRoaXMubGFzdExldmVsO1xuICAgICAgICBjb25zdCBvdGVsUmVjID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBIclRpbWUsXG4gICAgICAgICAgICBvYnNlcnZlZFRpbWVzdGFtcDogdGltZXN0YW1wSHJUaW1lLFxuICAgICAgICAgICAgc2V2ZXJpdHlOdW1iZXI6IHNldmVyaXR5TnVtYmVyRnJvbVBpbm9MZXZlbChsYXN0TGV2ZWwpLFxuICAgICAgICAgICAgc2V2ZXJpdHlUZXh0OiB0aGlzLl9sZXZlbHMubGFiZWxzW2xhc3RMZXZlbF0sXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fb3RlbExvZ2dlci5lbWl0KG90ZWxSZWMpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RlbFBpbm9TdHJlYW0gPSBPVGVsUGlub1N0cmVhbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZy1zZW5kaW5nLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QaW5vSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgbG9nX3NlbmRpbmdfdXRpbHNfMSA9IHJlcXVpcmUoXCIuL2xvZy1zZW5kaW5nLXV0aWxzXCIpO1xuY29uc3QgcGlub1ZlcnNpb25zID0gWyc+PTUuMTQuMCA8MTEnXTtcbmNvbnN0IERFRkFVTFRfTE9HX0tFWVMgPSB7XG4gICAgdHJhY2VJZDogJ3RyYWNlX2lkJyxcbiAgICBzcGFuSWQ6ICdzcGFuX2lkJyxcbiAgICB0cmFjZUZsYWdzOiAndHJhY2VfZmxhZ3MnLFxufTtcbmNsYXNzIFBpbm9JbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdwaW5vJywgcGlub1ZlcnNpb25zLCBtb2R1bGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRVNNID0gbW9kdWxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUV4cG9ydHMgPSBpc0VTTSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZFBpbm8gPSBPYmplY3QuYXNzaWduKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFbmFibGVkID0gaW5zdHJ1bWVudGF0aW9uLmlzRW5hYmxlZCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBtb2R1bGVFeHBvcnRzKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXR1cCBcImxvZyBjb3JyZWxhdGlvblwiIC0tIGluamVjdGlvbiBvZiBgdHJhY2VfaWRgIGV0IGFsIGZpZWxkcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogSWYgdGhlIFBpbm8gbG9nZ2VyIGlzIGNvbmZpZ3VyZWQgd2l0aCBgbmVzdGVkS2V5YCwgdGhlblxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYHRyYWNlX2lkYCBldCBhbCBmaWVsZHMgYWRkZWQgYnkgYG90ZWxNaXhpbmAgd2lsbCBiZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gYXMgd2VsbC4gaHR0cHM6Ly9nZXRwaW5vLmlvLyMvZG9jcy9hcGk/aWQ9bWl4aW4tZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RlbE1peGluID0gaW5zdHJ1bWVudGF0aW9uLl9nZXRNaXhpbkZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1peGluU3ltID0gbW9kdWxlRXhwb3J0cy5zeW1ib2xzLm1peGluU3ltO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnTWl4aW4gPSBsb2dnZXJbbWl4aW5TeW1dO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ01peGluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlclttaXhpblN5bV0gPSBvdGVsTWl4aW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXJbbWl4aW5TeW1dID0gKGN0eCwgbGV2ZWwsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvdGVsTWl4aW4oY3R4LCBsZXZlbCksIG9yaWdNaXhpbihjdHgsIGxldmVsLCAuLi5yZXN0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldHVwIFwibG9nIHNlbmRpbmdcIiAtLSBzZW5kaW5nIGxvZyByZWNvcmRzIHRvIHRoZSBMb2dzIEFQSS5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkZXBlbmRzIG9uIGBwaW5vLm11bHRpc3RyZWFtYCwgd2hpY2ggd2FzIGFkZGVkIGluIHY3LjAuMC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZy5kaXNhYmxlTG9nU2VuZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1vZHVsZUV4cG9ydHMubXVsdGlzdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90ZWxUaW1lc3RhbXBGcm9tVGltZSA9ICgwLCBsb2dfc2VuZGluZ191dGlsc18xLmdldFRpbWVDb252ZXJ0ZXIpKGxvZ2dlciwgbW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdGVsU3RyZWFtID0gbmV3IGxvZ19zZW5kaW5nX3V0aWxzXzEuT1RlbFBpbm9TdHJlYW0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VLZXk6IGxvZ2dlclttb2R1bGVFeHBvcnRzLnN5bWJvbHMubWVzc2FnZUtleVN5bV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzOiBsb2dnZXIubGV2ZWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90ZWxUaW1lc3RhbXBGcm9tVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3RlbFN0cmVhbVtTeW1ib2wuZm9yKCdwaW5vLm1ldGFkYXRhJyldID0gdHJ1ZTsgLy8gZm9yIGBzdHJlYW0ubGFzdExldmVsYFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW4gZXJyb3IgdHlwaWNhbGx5IGluZGljYXRlcyBhIFBpbm8gYnVnLCBvciBsb2dnZXIgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVnLiBgZGlhZy53YXJuYCAqb25jZSogZm9yIHRoZSBmaXJzdCBlcnJvciBvbiB0aGUgYXNzdW1wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Vic2VxdWVudCBvbmVzIHN0ZW0gZnJvbSB0aGUgc2FtZSBidWcuXG4gICAgICAgICAgICAgICAgICAgICAgICBvdGVsU3RyZWFtLm9uY2UoJ3Vua25vd24nLCAobGluZSwgZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9kaWFnLndhcm4oJ2NvdWxkIG5vdCBzZW5kIHBpbm8gbG9nIGxpbmUgKHdpbGwgb25seSBsb2cgZmlyc3Qgb2NjdXJyZW5jZSknLCB7IGxpbmUsIGVyciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHBpbm8ncyBvd24gYG11bHRpc3RyZWFtYCB0byBzZW5kIHRvIHRoZSBvcmlnaW5hbCBzdHJlYW0gYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgT1RlbCBMb2dzIEFQSS9TREsuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dldHBpbm8uaW8vIy9kb2NzL2FwaT9pZD1waW5vbXVsdGlzdHJlYW1zdHJlYW1zYXJyYXktb3B0cy1ndC1tdWx0aXN0cmVhbXJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1N0cmVhbSA9IGxvZ2dlclttb2R1bGVFeHBvcnRzLnN5bWJvbHMuc3RyZWFtU3ltXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlclttb2R1bGVFeHBvcnRzLnN5bWJvbHMuc3RyZWFtU3ltXSA9IG1vZHVsZUV4cG9ydHMubXVsdGlzdHJlYW0oW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBsZXZlbCBgMGAgdG8gbmV2ZXIgbm90IGxvZyBhIHJlY29yZCBnaXZlbiB0byB0aGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGV2ZWw6IDAsIHN0cmVhbTogb3JpZ1N0cmVhbSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGV2ZWw6IDAsIHN0cmVhbTogb3RlbFN0cmVhbSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgeyBsZXZlbHM6IGxvZ2dlci5sZXZlbHMudmFsdWVzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgICAgICAgICAgICAgfSwgbW9kdWxlRXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXRjaGVkUGluby5waW5vID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZWRQaW5vLnBpbm8gPSBwYXRjaGVkUGlubztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXRjaGVkUGluby5kZWZhdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZWRQaW5vLmRlZmF1bHQgPSBwYXRjaGVkUGlubztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGlzRVNNKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGUucGlubykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3YXMgYWRkZWQgaW4gcGlub0A2LjguMCAoaHR0cHM6Ly9naXRodWIuY29tL3Bpbm9qcy9waW5vL3B1bGwvOTM2KS5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5waW5vID0gcGF0Y2hlZFBpbm87XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmRlZmF1bHQgPSBwYXRjaGVkUGlubztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNoZWRQaW5vO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIF9jYWxsSG9vayhzcGFuLCByZWNvcmQsIGxldmVsKSB7XG4gICAgICAgIGNvbnN0IHsgbG9nSG9vayB9ID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgaWYgKCFsb2dIb29rKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IGxvZ0hvb2soc3BhbiwgcmVjb3JkLCBsZXZlbCksIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcigncGlubyBpbnN0cnVtZW50YXRpb246IGVycm9yIGNhbGxpbmcgbG9nSG9vaycsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICBfZ2V0TWl4aW5GdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG90ZWxNaXhpbihfY29udGV4dCwgbGV2ZWwpIHtcbiAgICAgICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmlzRW5hYmxlZCgpIHx8XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLmRpc2FibGVMb2dDb3JyZWxhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgaWYgKCFzcGFuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBzcGFuLnNwYW5Db250ZXh0KCk7XG4gICAgICAgICAgICBpZiAoISgwLCBhcGlfMS5pc1NwYW5Db250ZXh0VmFsaWQpKHNwYW5Db250ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvZ0tleXMgPSBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCkubG9nS2V5cyA/PyBERUZBVUxUX0xPR19LRVlTO1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIFtsb2dLZXlzLnRyYWNlSWRdOiBzcGFuQ29udGV4dC50cmFjZUlkLFxuICAgICAgICAgICAgICAgIFtsb2dLZXlzLnNwYW5JZF06IHNwYW5Db250ZXh0LnNwYW5JZCxcbiAgICAgICAgICAgICAgICBbbG9nS2V5cy50cmFjZUZsYWdzXTogYDAke3NwYW5Db250ZXh0LnRyYWNlRmxhZ3MudG9TdHJpbmcoMTYpfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9jYWxsSG9vayhzcGFuLCByZWNvcmQsIGxldmVsKTtcbiAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5QaW5vSW5zdHJ1bWVudGF0aW9uID0gUGlub0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGlub0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBpbm9JbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLlBpbm9JbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTYuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VHJhY2VkQ3JlYXRlU3RyZWFtVHJhY2UgPSBleHBvcnRzLmdldFRyYWNlZENyZWF0ZUNsaWVudCA9IGV4cG9ydHMuZW5kU3BhbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGVuZFNwYW4gPSAoc3BhbiwgZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Bhbi5lbmQoKTtcbn07XG5leHBvcnRzLmVuZFNwYW4gPSBlbmRTcGFuO1xuY29uc3QgZ2V0VHJhY2VkQ3JlYXRlQ2xpZW50ID0gKG9yaWdpbmFsKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUNsaWVudFRyYWNlKCkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gYXBpXzEuY29udGV4dC5iaW5kKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIGNsaWVudCk7XG4gICAgfTtcbn07XG5leHBvcnRzLmdldFRyYWNlZENyZWF0ZUNsaWVudCA9IGdldFRyYWNlZENyZWF0ZUNsaWVudDtcbmNvbnN0IGdldFRyYWNlZENyZWF0ZVN0cmVhbVRyYWNlID0gKG9yaWdpbmFsKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZV9zdHJlYW1fdHJhY2UoKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsICdzdHJlYW0nKSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJlYW0nLCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0Y2hlZF9yZWRpc19zdHJlYW07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwaV8xLmNvbnRleHQuYmluZChhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRjaGVkX3JlZGlzX3N0cmVhbSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn07XG5leHBvcnRzLmdldFRyYWNlZENyZWF0ZVN0cmVhbVRyYWNlID0gZ2V0VHJhY2VkQ3JlYXRlU3RyZWFtVHJhY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX1JFRElTID0gZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9SRURJUyA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSBleHBvcnRzLkFUVFJfREJfU1lTVEVNID0gZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9IGV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgLCBgc2VydmVyLnBvcnRgIGF0dHJpYnV0ZXMgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBcIlNlcnZlcj0obG9jYWxkYilcXFxcdjExLjA7SW50ZWdyYXRlZCBTZWN1cml0eT10cnVlO1wiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIuYWRkcmVzc2AgYW5kIGBzZXJ2ZXIucG9ydGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORyA9ICdkYi5jb25uZWN0aW9uX3N0cmluZyc7XG4vKipcbiAqIFRoZSBkYXRhYmFzZSBzdGF0ZW1lbnQgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQGV4YW1wbGUgU0VMRUNUICogRlJPTSB3dXNlcl90YWJsZVxuICogQGV4YW1wbGUgU0VUIG15a2V5IFwiV3VWYWx1ZVwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NUQVRFTUVOVCA9ICdkYi5zdGF0ZW1lbnQnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYGRiLnN5c3RlbS5uYW1lYCBpbnN0ZWFkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIuc3lzdGVtLm5hbWVgLlxuICovXG5leHBvcnRzLkFUVFJfREJfU1lTVEVNID0gJ2RiLnN5c3RlbSc7XG4vKipcbiAqIERlcHJlY2F0ZWQsIHVzZSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKlxuICogQGV4YW1wbGUgZXhhbXBsZS5jb21cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5hZGRyZXNzYCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQuYWRkcmVzc2Agb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfTkFNRSA9ICduZXQucGVlci5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSA4MDgwXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBzZXJ2ZXIucG9ydGAgb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LnBvcnRgIG9uIHNlcnZlciBzcGFucy5cbiAqL1xuZXhwb3J0cy5BVFRSX05FVF9QRUVSX1BPUlQgPSAnbmV0LnBlZXIucG9ydCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJyZWRpc1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfU1lTVEVNX05BTUV9LlxuICpcbiAqIFtSZWRpc10oaHR0cHM6Ly9yZWRpcy5pby8pXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fTkFNRV9WQUxVRV9SRURJUyA9ICdyZWRpcyc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJyZWRpc1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfREJfU1lTVEVNfS5cbiAqXG4gKiBSZWRpc1xuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuREJfU1lTVEVNX1ZBTFVFX1JFRElTID0gJ3JlZGlzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZGlzSW5zdHJ1bWVudGF0aW9uVjJfVjMgPSB2b2lkIDA7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuLi92ZXJzaW9uXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuY29uc3QgcmVkaXNfY29tbW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVkaXMtY29tbW9uXCIpO1xuY2xhc3MgUmVkaXNJbnN0cnVtZW50YXRpb25WMl9WMyBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIHN0YXRpYyBDT01QT05FTlQgPSAncmVkaXMnO1xuICAgIF9zZW1jb252U3RhYmlsaXR5O1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgPSBjb25maWcuc2VtY29udlN0YWJpbGl0eVxuICAgICAgICAgICAgPyBjb25maWcuc2VtY29udlN0YWJpbGl0eVxuICAgICAgICAgICAgOiAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2VtY29udlN0YWJpbGl0eUZyb21TdHIpKCdkYXRhYmFzZScsIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOKTtcbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLl9zZW1jb252U3RhYmlsaXR5ID0gY29uZmlnLnNlbWNvbnZTdGFiaWxpdHlcbiAgICAgICAgICAgID8gY29uZmlnLnNlbWNvbnZTdGFiaWxpdHlcbiAgICAgICAgICAgIDogKDAsIGluc3RydW1lbnRhdGlvbl8xLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKSgnZGF0YWJhc2UnLCBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTik7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ3JlZGlzJywgWyc+PTIuNi4wIDw0J10sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLlJlZGlzQ2xpZW50LnByb3RvdHlwZVsnaW50ZXJuYWxfc2VuZF9jb21tYW5kJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLlJlZGlzQ2xpZW50LnByb3RvdHlwZSwgJ2ludGVybmFsX3NlbmRfY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuUmVkaXNDbGllbnQucHJvdG90eXBlLCAnaW50ZXJuYWxfc2VuZF9jb21tYW5kJywgdGhpcy5fZ2V0UGF0Y2hJbnRlcm5hbFNlbmRDb21tYW5kKCkpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLlJlZGlzQ2xpZW50LnByb3RvdHlwZVsnY3JlYXRlX3N0cmVhbSddKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5SZWRpc0NsaWVudC5wcm90b3R5cGUsICdjcmVhdGVfc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5SZWRpc0NsaWVudC5wcm90b3R5cGUsICdjcmVhdGVfc3RyZWFtJywgdGhpcy5fZ2V0UGF0Y2hDcmVhdGVTdHJlYW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHMuY3JlYXRlQ2xpZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgJ2NyZWF0ZUNsaWVudCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsICdjcmVhdGVDbGllbnQnLCB0aGlzLl9nZXRQYXRjaENyZWF0ZUNsaWVudCgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5SZWRpc0NsaWVudC5wcm90b3R5cGUsICdpbnRlcm5hbF9zZW5kX2NvbW1hbmQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5SZWRpc0NsaWVudC5wcm90b3R5cGUsICdjcmVhdGVfc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdjcmVhdGVDbGllbnQnKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBpbnRlcm5hbF9zZW5kX2NvbW1hbmQoLi4uKSB0byB0cmFjZSByZXF1ZXN0c1xuICAgICAqL1xuICAgIF9nZXRQYXRjaEludGVybmFsU2VuZENvbW1hbmQoKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcm5hbF9zZW5kX2NvbW1hbmQob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcm5hbF9zZW5kX2NvbW1hbmRfdHJhY2UoY21kKSB7XG4gICAgICAgICAgICAgICAgLy8gVmVyc2lvbnMgb2YgcmVkaXMgKDIuNCspIHVzZSBhIHNpbmdsZSBvcHRpb25zIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgbmFtZWQgYXJndW1lbnRzXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDEgfHwgdHlwZW9mIGNtZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBob3cgdG8gdHJhY2UgdGhpcyBjYWxsLCBzbyBkb24ndCBzdGFydC9zdG9wIGEgc3BhblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc05vUGFyZW50U3BhbiA9IGFwaV8xLnRyYWNlLmdldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSkgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnJlcXVpcmVQYXJlbnRTcGFuID09PSB0cnVlICYmIGhhc05vUGFyZW50U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGJTdGF0ZW1lbnRTZXJpYWxpemVyID0gY29uZmlnPy5kYlN0YXRlbWVudFNlcmlhbGl6ZXIgfHwgcmVkaXNfY29tbW9uXzEuZGVmYXVsdERiU3RhdGVtZW50U2VyaWFsaXplcjtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbi5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfUkVESVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfU1RBVEVNRU5UXTogZGJTdGF0ZW1lbnRTZXJpYWxpemVyKGNtZC5jb21tYW5kLCBjbWQuYXJncyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uLl9zZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1NZU1RFTV9OQU1FXTogc2VtY29udl8xLkRCX1NZU1RFTV9OQU1FX1ZBTFVFX1JFRElTLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9PUEVSQVRJT05fTkFNRV06IGNtZC5jb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9RVUVSWV9URVhUXTogZGJTdGF0ZW1lbnRTZXJpYWxpemVyKGNtZC5jb21tYW5kLCBjbWQuYXJncyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gaW5zdHJ1bWVudGF0aW9uLnRyYWNlci5zdGFydFNwYW4oYCR7UmVkaXNJbnN0cnVtZW50YXRpb25WMl9WMy5DT01QT05FTlR9LSR7Y21kLmNvbW1hbmR9YCwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gU2V0IGF0dHJpYnV0ZXMgZm9yIG5vdCBleHBsaWNpdGx5IHR5cGVkIFJlZGlzUGx1Z2luQ2xpZW50VHlwZXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uX29wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbkF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbi5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbm5lY3Rpb25BdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX05FVF9QRUVSX05BTUVdOiB0aGlzLmNvbm5lY3Rpb25fb3B0aW9ucy5ob3N0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogdGhpcy5jb25uZWN0aW9uX29wdGlvbnMucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24uX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5LlNUQUJMRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb25uZWN0aW9uQXR0cmlidXRlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX0FERFJFU1NdOiB0aGlzLmNvbm5lY3Rpb25fb3B0aW9ucy5ob3N0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX1BPUlRdOiB0aGlzLmNvbm5lY3Rpb25fb3B0aW9ucy5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKGNvbm5lY3Rpb25BdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWRkcmVzcyAmJlxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX3NlbWNvbnZTdGFiaWxpdHkgJiBpbnN0cnVtZW50YXRpb25fMS5TZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShzZW1jb252XzEuQVRUUl9EQl9DT05ORUNUSU9OX1NUUklORywgYHJlZGlzOi8vJHt0aGlzLmFkZHJlc3N9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSBhcmd1bWVudHNbMF0uY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzWzBdLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soZXJyLCByZXBseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZz8ucmVzcG9uc2VIb29rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VIb29rID0gY29uZmlnLnJlc3BvbnNlSG9vaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhvb2soc3BhbiwgY21kLmNvbW1hbmQsIGNtZC5hcmdzLCByZXBseSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9kaWFnLmVycm9yKCdFcnJvciBleGVjdXRpbmcgcmVzcG9uc2VIb29rJywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxzXzEuZW5kU3Bhbikoc3BhbiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgob3JpZ2luYWxDb250ZXh0LCBvcmlnaW5hbENhbGxiYWNrLCB0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTcGFuIHdpbGwgYmUgZW5kZWQgaW4gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChyZXRocm93KSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLmVuZFNwYW4pKHNwYW4sIHJldGhyb3cpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXRocm93OyAvLyByZXRocm93IGFmdGVyIGVuZGluZyBzcGFuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFBhdGNoQ3JlYXRlQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlQ2xpZW50KG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHV0aWxzXzEuZ2V0VHJhY2VkQ3JlYXRlQ2xpZW50KShvcmlnaW5hbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRQYXRjaENyZWF0ZVN0cmVhbSgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVJlYWRTdHJlYW0ob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgdXRpbHNfMS5nZXRUcmFjZWRDcmVhdGVTdHJlYW1UcmFjZSkob3JpZ2luYWwpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuUmVkaXNJbnN0cnVtZW50YXRpb25WMl9WMyA9IFJlZGlzSW5zdHJ1bWVudGF0aW9uVjJfVjM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q2xpZW50QXR0cmlidXRlcyA9IHZvaWQgMDtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmZ1bmN0aW9uIGdldENsaWVudEF0dHJpYnV0ZXMoZGlhZywgb3B0aW9ucywgc2VtY29udlN0YWJpbGl0eSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBpZiAoc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfUkVESVMsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfTkFNRV06IG9wdGlvbnM/LnNvY2tldD8uaG9zdCxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogb3B0aW9ucz8uc29ja2V0Py5wb3J0LFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX0NPTk5FQ1RJT05fU1RSSU5HXTogcmVtb3ZlQ3JlZGVudGlhbHNGcm9tREJDb25uZWN0aW9uU3RyaW5nQXR0cmlidXRlKGRpYWcsIG9wdGlvbnM/LnVybCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywge1xuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9EQl9TWVNURU1fTkFNRV06IHNlbWNvbnZfMS5EQl9TWVNURU1fTkFNRV9WQUxVRV9SRURJUyxcbiAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVkVSX0FERFJFU1NdOiBvcHRpb25zPy5zb2NrZXQ/Lmhvc3QsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9QT1JUXTogb3B0aW9ucz8uc29ja2V0Py5wb3J0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59XG5leHBvcnRzLmdldENsaWVudEF0dHJpYnV0ZXMgPSBnZXRDbGllbnRBdHRyaWJ1dGVzO1xuLyoqXG4gKiByZW1vdmVDcmVkZW50aWFsc0Zyb21EQkNvbm5lY3Rpb25TdHJpbmdBdHRyaWJ1dGUgcmVtb3ZlcyBiYXNpYyBhdXRoIGZyb20gdXJsIGFuZCB1c2VyX3B3ZCBmcm9tIHF1ZXJ5IHN0cmluZ1xuICpcbiAqIEV4YW1wbGVzOlxuICogICByZWRpczovL3VzZXI6cGFzc0Bsb2NhbGhvc3Q6NjM3OS9teWRiID0+IHJlZGlzOi8vbG9jYWxob3N0OjYzNzkvbXlkYlxuICogICByZWRpczovL2xvY2FsaG9zdDo2Mzc5P2RiPW15ZGImdXNlcl9wd2Q9cGFzcyA9PiByZWRpczovL2xvY2FsaG9zdDo2Mzc5P2RiPW15ZGJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ3JlZGVudGlhbHNGcm9tREJDb25uZWN0aW9uU3RyaW5nQXR0cmlidXRlKGRpYWcsIHVybCkge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyB8fCAhdXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgdS5zZWFyY2hQYXJhbXMuZGVsZXRlKCd1c2VyX3B3ZCcpO1xuICAgICAgICB1LnVzZXJuYW1lID0gJyc7XG4gICAgICAgIHUucGFzc3dvcmQgPSAnJztcbiAgICAgICAgcmV0dXJuIHUuaHJlZjtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBkaWFnLmVycm9yKCdmYWlsZWQgdG8gc2FuaXRpemUgcmVkaXMgY29ubmVjdGlvbiB1cmwnLCBlcnIpO1xuICAgIH1cbiAgICByZXR1cm47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVkaXNJbnN0cnVtZW50YXRpb25WNF9WNSA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IHJlZGlzX2NvbW1vbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3JlZGlzLWNvbW1vblwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4uL3ZlcnNpb25cIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCBPVEVMX09QRU5fU1BBTlMgPSBTeW1ib2woJ29wZW50ZWxlbWV0cnkuaW5zdHJ1bWVudGF0aW9uLnJlZGlzLm9wZW5fc3BhbnMnKTtcbmNvbnN0IE1VTFRJX0NPTU1BTkRfT1BUSU9OUyA9IFN5bWJvbCgnb3BlbnRlbGVtZXRyeS5pbnN0cnVtZW50YXRpb24ucmVkaXMubXVsdGlfY29tbWFuZF9vcHRpb25zJyk7XG5jbGFzcyBSZWRpc0luc3RydW1lbnRhdGlvblY0X1Y1IGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgc3RhdGljIENPTVBPTkVOVCA9ICdyZWRpcyc7XG4gICAgX3NlbWNvbnZTdGFiaWxpdHk7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2VtY29udlN0YWJpbGl0eSA9IGNvbmZpZy5zZW1jb252U3RhYmlsaXR5XG4gICAgICAgICAgICA/IGNvbmZpZy5zZW1jb252U3RhYmlsaXR5XG4gICAgICAgICAgICA6ICgwLCBpbnN0cnVtZW50YXRpb25fMS5zZW1jb252U3RhYmlsaXR5RnJvbVN0cikoJ2RhdGFiYXNlJywgcHJvY2Vzcy5lbnYuT1RFTF9TRU1DT05WX1NUQUJJTElUWV9PUFRfSU4pO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgPSBjb25maWcuc2VtY29udlN0YWJpbGl0eVxuICAgICAgICAgICAgPyBjb25maWcuc2VtY29udlN0YWJpbGl0eVxuICAgICAgICAgICAgOiAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2VtY29udlN0YWJpbGl0eUZyb21TdHIpKCdkYXRhYmFzZScsIHByb2Nlc3MuZW52Lk9URUxfU0VNQ09OVl9TVEFCSUxJVFlfT1BUX0lOKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgLy8gQG5vZGUtcmVkaXMvY2xpZW50IGlzIGEgbmV3IHBhY2thZ2UgaW50cm9kdWNlZCBhbmQgY29uc3VtZWQgYnkgJ3JlZGlzIDQuMC54J1xuICAgICAgICAvLyBvbiByZWRpc0A0LjEuMCBpdCB3YXMgY2hhbmdlZCB0byBAcmVkaXMvY2xpZW50LlxuICAgICAgICAvLyB3ZSB3aWxsIGluc3RydW1lbnQgYm90aCBwYWNrYWdlc1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5fZ2V0SW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ0ByZWRpcy9jbGllbnQnKSxcbiAgICAgICAgICAgIHRoaXMuX2dldEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdAbm9kZS1yZWRpcy9jbGllbnQnKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX2dldEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKGJhc2VQYWNrYWdlTmFtZSkge1xuICAgICAgICBjb25zdCBjb21tYW5kZXJNb2R1bGVGaWxlID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKGAke2Jhc2VQYWNrYWdlTmFtZX0vZGlzdC9saWIvY29tbWFuZGVyLmpzYCwgWydeMS4wLjAnXSwgKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHMgPSBtb2R1bGVFeHBvcnRzLnRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHM7XG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCdpbnRlcm5hbCBpbnN0cnVtZW50YXRpb24gZXJyb3IsIG1pc3NpbmcgdHJhbnNmb3JtQ29tbWFuZEFyZ3VtZW50cyBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZnVuY3Rpb24gbmFtZSBhbmQgc2lnbmF0dXJlIGNoYW5nZWQgaW4gcmVkaXMgNC4xLjAgZnJvbSAnZXh0ZW5kV2l0aENvbW1hbmRzJyB0byAnYXR0YWNoQ29tbWFuZHMnXG4gICAgICAgICAgICAvLyB0aGUgbWF0Y2hpbmcgaW50ZXJuYWwgcGFja2FnZSBuYW1lcyBzdGFydHMgd2l0aCAxLjAueCAoZm9yIHJlZGlzIDQuMC54KVxuICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25Ub1BhdGNoID0gbW9kdWxlVmVyc2lvbj8uc3RhcnRzV2l0aCgnMS4wLicpXG4gICAgICAgICAgICAgICAgPyAnZXh0ZW5kV2l0aENvbW1hbmRzJ1xuICAgICAgICAgICAgICAgIDogJ2F0dGFjaENvbW1hbmRzJztcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZXh0ZW5kIGEgcmVkaXMgY2xpZW50IHdpdGggYSBsaXN0IG9mIGNvbW1hbmRzLlxuICAgICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHBhdGNoZXMgdGhlIGNvbW1hbmRFeGVjdXRvciB0byByZWNvcmQgYSBzcGFuXG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cz8uW2Z1bmN0aW9uVG9QYXRjaF0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsIGZ1bmN0aW9uVG9QYXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMsIGZ1bmN0aW9uVG9QYXRjaCwgdGhpcy5fZ2V0UGF0Y2hFeHRlbmRXaXRoQ29tbWFuZHModHJhbnNmb3JtQ29tbWFuZEFyZ3VtZW50cykpO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cz8uZXh0ZW5kV2l0aENvbW1hbmRzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCAnZXh0ZW5kV2l0aENvbW1hbmRzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cz8uYXR0YWNoQ29tbWFuZHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMsICdhdHRhY2hDb21tYW5kcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbXVsdGlDb21tYW5kZXJNb2R1bGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoYCR7YmFzZVBhY2thZ2VOYW1lfS9kaXN0L2xpYi9jbGllbnQvbXVsdGktY29tbWFuZC5qc2AsIFsnXjEuMC4wJywgJ141LjAuMCddLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVkaXNDbGllbnRNdWx0aUNvbW1hbmRQcm90b3R5cGUgPSBtb2R1bGVFeHBvcnRzPy5kZWZhdWx0Py5wcm90b3R5cGU7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocmVkaXNDbGllbnRNdWx0aUNvbW1hbmRQcm90b3R5cGU/LmV4ZWMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKHJlZGlzQ2xpZW50TXVsdGlDb21tYW5kUHJvdG90eXBlLCAnZXhlYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChyZWRpc0NsaWVudE11bHRpQ29tbWFuZFByb3RvdHlwZSwgJ2V4ZWMnLCB0aGlzLl9nZXRQYXRjaE11bHRpQ29tbWFuZHNFeGVjKCkpO1xuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHJlZGlzQ2xpZW50TXVsdGlDb21tYW5kUHJvdG90eXBlPy5hZGRDb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChyZWRpc0NsaWVudE11bHRpQ29tbWFuZFByb3RvdHlwZSwgJ2FkZENvbW1hbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dyYXAocmVkaXNDbGllbnRNdWx0aUNvbW1hbmRQcm90b3R5cGUsICdhZGRDb21tYW5kJywgdGhpcy5fZ2V0UGF0Y2hNdWx0aUNvbW1hbmRzQWRkQ29tbWFuZCgpKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVkaXNDbGllbnRNdWx0aUNvbW1hbmRQcm90b3R5cGUgPSBtb2R1bGVFeHBvcnRzPy5kZWZhdWx0Py5wcm90b3R5cGU7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocmVkaXNDbGllbnRNdWx0aUNvbW1hbmRQcm90b3R5cGU/LmV4ZWMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKHJlZGlzQ2xpZW50TXVsdGlDb21tYW5kUHJvdG90eXBlLCAnZXhlYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKHJlZGlzQ2xpZW50TXVsdGlDb21tYW5kUHJvdG90eXBlPy5hZGRDb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChyZWRpc0NsaWVudE11bHRpQ29tbWFuZFByb3RvdHlwZSwgJ2FkZENvbW1hbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNsaWVudEluZGV4TW9kdWxlID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKGAke2Jhc2VQYWNrYWdlTmFtZX0vZGlzdC9saWIvY2xpZW50L2luZGV4LmpzYCwgWydeMS4wLjAnLCAnXjUuMC4wJ10sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWRpc0NsaWVudFByb3RvdHlwZSA9IG1vZHVsZUV4cG9ydHM/LmRlZmF1bHQ/LnByb3RvdHlwZTtcbiAgICAgICAgICAgIC8vIEluIHNvbWUgQHJlZGlzL2NsaWVudCB2ZXJzaW9ucyAnbXVsdGknIGlzIGEgbWV0aG9kLiBJbiBsYXRlclxuICAgICAgICAgICAgLy8gdmVyc2lvbnMsIGFzIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWRpcy9ub2RlLXJlZGlzL3B1bGwvMjMyNCxcbiAgICAgICAgICAgIC8vICdNVUxUSScgaXMgYSBtZXRob2QgYW5kICdtdWx0aScgaXMgYSBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZVxuICAgICAgICAgICAgLy8gY29uc3RydWN0b3IgdGhhdCBwb2ludHMgdG8gJ01VTFRJJywgYW5kIHRoZXJlZm9yZSBpdCB3aWxsIG5vdFxuICAgICAgICAgICAgLy8gYmUgZGVmaW5lZCBvbiB0aGUgcHJvdG90eXBlLlxuICAgICAgICAgICAgaWYgKHJlZGlzQ2xpZW50UHJvdG90eXBlPy5tdWx0aSkge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShyZWRpc0NsaWVudFByb3RvdHlwZT8ubXVsdGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChyZWRpc0NsaWVudFByb3RvdHlwZSwgJ211bHRpJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAocmVkaXNDbGllbnRQcm90b3R5cGUsICdtdWx0aScsIHRoaXMuX2dldFBhdGNoUmVkaXNDbGllbnRNdWx0aSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWRpc0NsaWVudFByb3RvdHlwZT8uTVVMVEkpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocmVkaXNDbGllbnRQcm90b3R5cGU/Lk1VTFRJKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAocmVkaXNDbGllbnRQcm90b3R5cGUsICdNVUxUSScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKHJlZGlzQ2xpZW50UHJvdG90eXBlLCAnTVVMVEknLCB0aGlzLl9nZXRQYXRjaFJlZGlzQ2xpZW50TXVsdGkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocmVkaXNDbGllbnRQcm90b3R5cGU/LnNlbmRDb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChyZWRpc0NsaWVudFByb3RvdHlwZSwgJ3NlbmRDb21tYW5kJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKHJlZGlzQ2xpZW50UHJvdG90eXBlLCAnc2VuZENvbW1hbmQnLCB0aGlzLl9nZXRQYXRjaFJlZGlzQ2xpZW50U2VuZENvbW1hbmQoKSk7XG4gICAgICAgICAgICB0aGlzLl93cmFwKHJlZGlzQ2xpZW50UHJvdG90eXBlLCAnY29ubmVjdCcsIHRoaXMuX2dldFBhdGNoZWRDbGllbnRDb25uZWN0KCkpO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWRpc0NsaWVudFByb3RvdHlwZSA9IG1vZHVsZUV4cG9ydHM/LmRlZmF1bHQ/LnByb3RvdHlwZTtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShyZWRpc0NsaWVudFByb3RvdHlwZT8ubXVsdGkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKHJlZGlzQ2xpZW50UHJvdG90eXBlLCAnbXVsdGknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShyZWRpc0NsaWVudFByb3RvdHlwZT8uTVVMVEkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKHJlZGlzQ2xpZW50UHJvdG90eXBlLCAnTVVMVEknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShyZWRpc0NsaWVudFByb3RvdHlwZT8uc2VuZENvbW1hbmQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKHJlZGlzQ2xpZW50UHJvdG90eXBlLCAnc2VuZENvbW1hbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oYmFzZVBhY2thZ2VOYW1lLCBbJ14xLjAuMCcsICdeNS4wLjAnXSwgKG1vZHVsZUV4cG9ydHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCAoKSA9PiB7IH0sIFtjb21tYW5kZXJNb2R1bGVGaWxlLCBtdWx0aUNvbW1hbmRlck1vZHVsZSwgY2xpZW50SW5kZXhNb2R1bGVdKTtcbiAgICB9XG4gICAgLy8gc2VydmVzIGJvdGggZm9yIHJlZGlzIDQuMC54IHdoZXJlIGZ1bmN0aW9uIG5hbWUgaXMgZXh0ZW5kV2l0aENvbW1hbmRzXG4gICAgLy8gYW5kIHJlZGlzIF40LjEuMCB3aGVyZSBmdW5jdGlvbiBuYW1lIGlzIGF0dGFjaENvbW1hbmRzXG4gICAgX2dldFBhdGNoRXh0ZW5kV2l0aENvbW1hbmRzKHRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHMpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV4dGVuZFdpdGhDb21tYW5kc1BhdGNoV3JhcHBlcihvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV4dGVuZFdpdGhDb21tYW5kc1BhdGNoKGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWc/LkJhc2VDbGFzcz8ubmFtZSAhPT0gJ1JlZGlzQ2xpZW50Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ0V4ZWN1dG9yID0gY29uZmlnLmV4ZWN1dG9yO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5leGVjdXRvciA9IGZ1bmN0aW9uIChjb21tYW5kLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlzQ29tbWFuZEFyZ3VtZW50cyA9IHRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHMoY29tbWFuZCwgYXJncykuYXJncztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5fdHJhY2VDbGllbnRDb21tYW5kKG9yaWdFeGVjdXRvciwgdGhpcywgYXJndW1lbnRzLCByZWRpc0NvbW1hbmRBcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hNdWx0aUNvbW1hbmRzRXhlYygpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWNQYXRjaFdyYXBwZXIob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBleGVjUGF0Y2goKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY1JlcyA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBleGVjUmVzPy50aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZGlhZy5lcnJvcignZ290IG5vbiBwcm9taXNlIHJlc3VsdCB3aGVuIHBhdGNoaW5nIFJlZGlzQ2xpZW50TXVsdGlDb21tYW5kLmV4ZWMnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWNSZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBleGVjUmVzXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZWRpc1JlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVuU3BhbnMgPSB0aGlzW09URUxfT1BFTl9TUEFOU107XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZW5kU3BhbnNXaXRoUmVkaXNSZXBsaWVzKG9wZW5TcGFucywgcmVkaXNSZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVkaXNSZXM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlblNwYW5zID0gdGhpc1tPVEVMX09QRU5fU1BBTlNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZW5TcGFucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLl9kaWFnLmVycm9yKCdjYW5ub3QgZmluZCBvcGVuIHNwYW5zIHRvIGVuZCBmb3IgcmVkaXMgbXVsdGkgY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwbGllcyA9IGVyci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnTXVsdGlFcnJvclJlcGx5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyLnJlcGxpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBBcnJheShvcGVuU3BhbnMubGVuZ3RoKS5maWxsKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2VuZFNwYW5zV2l0aFJlZGlzUmVwbGllcyhvcGVuU3BhbnMsIHJlcGxpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFBhdGNoTXVsdGlDb21tYW5kc0FkZENvbW1hbmQoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhZGRDb21tYW5kV3JhcHBlcihvcmlnaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFkZENvbW1hbmRQYXRjaChhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5fdHJhY2VDbGllbnRDb21tYW5kKG9yaWdpbmFsLCB0aGlzLCBhcmd1bWVudHMsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFBhdGNoUmVkaXNDbGllbnRNdWx0aSgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG11bHRpUGF0Y2hXcmFwcGVyKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbXVsdGlQYXRjaCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtdWx0aVJlcyA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgbXVsdGlSZXNbTVVMVElfQ09NTUFORF9PUFRJT05TXSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gbXVsdGlSZXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hSZWRpc0NsaWVudFNlbmRDb21tYW5kKCkge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2VuZENvbW1hbmRXcmFwcGVyKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2VuZENvbW1hbmRQYXRjaChhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsdWdpbi5fdHJhY2VDbGllbnRDb21tYW5kKG9yaWdpbmFsLCB0aGlzLCBhcmd1bWVudHMsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2dldFBhdGNoZWRDbGllbnRDb25uZWN0KCkge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdFdyYXBwZXIob3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkQ29ubmVjdCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoMCwgdXRpbHNfMS5nZXRDbGllbnRBdHRyaWJ1dGVzKShwbHVnaW4uX2RpYWcsIG9wdGlvbnMsIHBsdWdpbi5fc2VtY29udlN0YWJpbGl0eSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHBsdWdpbi50cmFjZXIuc3RhcnRTcGFuKGAke1JlZGlzSW5zdHJ1bWVudGF0aW9uVjRfVjUuQ09NUE9ORU5UfS1jb25uZWN0YCwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3RyYWNlQ2xpZW50Q29tbWFuZChvcmlnRnVuY3Rpb24sIG9yaWdUaGlzLCBvcmlnQXJndW1lbnRzLCByZWRpc0NvbW1hbmRBcmd1bWVudHMpIHtcbiAgICAgICAgY29uc3QgaGFzTm9QYXJlbnRTcGFuID0gYXBpXzEudHJhY2UuZ2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaGFzTm9QYXJlbnRTcGFuICYmIHRoaXMuZ2V0Q29uZmlnKCkucmVxdWlyZVBhcmVudFNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnRnVuY3Rpb24uYXBwbHkob3JpZ1RoaXMsIG9yaWdBcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBvcmlnVGhpcy5vcHRpb25zIHx8IG9yaWdUaGlzW01VTFRJX0NPTU1BTkRfT1BUSU9OU107XG4gICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcmVkaXNDb21tYW5kQXJndW1lbnRzWzBdOyAvLyB0eXBlcyBhbHNvIGFsbG93cyBpdCB0byBiZSBhIEJ1ZmZlciwgYnV0IGluIHByYWN0aWNlIGl0IG9ubHkgc3RyaW5nXG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0gcmVkaXNDb21tYW5kQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICBjb25zdCBkYlN0YXRlbWVudFNlcmlhbGl6ZXIgPSB0aGlzLmdldENvbmZpZygpLmRiU3RhdGVtZW50U2VyaWFsaXplciB8fCByZWRpc19jb21tb25fMS5kZWZhdWx0RGJTdGF0ZW1lbnRTZXJpYWxpemVyO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gKDAsIHV0aWxzXzEuZ2V0Q2xpZW50QXR0cmlidXRlcykodGhpcy5fZGlhZywgY2xpZW50T3B0aW9ucywgdGhpcy5fc2VtY29udlN0YWJpbGl0eSk7XG4gICAgICAgIGlmICh0aGlzLl9zZW1jb252U3RhYmlsaXR5ICYgaW5zdHJ1bWVudGF0aW9uXzEuU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX09QRVJBVElPTl9OQU1FXSA9IGNvbW1hbmROYW1lO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkYlN0YXRlbWVudCA9IGRiU3RhdGVtZW50U2VyaWFsaXplcihjb21tYW5kTmFtZSwgY29tbWFuZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKGRiU3RhdGVtZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuT0xEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfREJfU1RBVEVNRU5UXSA9IGRiU3RhdGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VtY29udlN0YWJpbGl0eSAmIGluc3RydW1lbnRhdGlvbl8xLlNlbWNvbnZTdGFiaWxpdHkuU1RBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0RCX1FVRVJZX1RFWFRdID0gZGJTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKCdkYlN0YXRlbWVudFNlcmlhbGl6ZXIgdGhyb3cgYW4gZXhjZXB0aW9uJywgZSwge1xuICAgICAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMudHJhY2VyLnN0YXJ0U3BhbihgJHtSZWRpc0luc3RydW1lbnRhdGlvblY0X1Y1LkNPTVBPTkVOVH0tJHtjb21tYW5kTmFtZX1gLCB7XG4gICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzID0gYXBpXzEuY29udGV4dC53aXRoKGFwaV8xLnRyYWNlLnNldFNwYW4oYXBpXzEuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnRnVuY3Rpb24uYXBwbHkob3JpZ1RoaXMsIG9yaWdBcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXM/LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcy50aGVuKChyZWRpc1JlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW5XaXRoUmVzcG9uc2Uoc3BhbiwgY29tbWFuZE5hbWUsIGNvbW1hbmRBcmdzLCByZWRpc1JlcywgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmRTcGFuV2l0aFJlc3BvbnNlKHNwYW4sIGNvbW1hbmROYW1lLCBjb21tYW5kQXJncywgbnVsbCwgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVkaXNDbGllbnRNdWx0aUNvbW1hbmQgPSByZXM7XG4gICAgICAgICAgICByZWRpc0NsaWVudE11bHRpQ29tbWFuZFtPVEVMX09QRU5fU1BBTlNdID1cbiAgICAgICAgICAgICAgICByZWRpc0NsaWVudE11bHRpQ29tbWFuZFtPVEVMX09QRU5fU1BBTlNdIHx8IFtdO1xuICAgICAgICAgICAgcmVkaXNDbGllbnRNdWx0aUNvbW1hbmRbT1RFTF9PUEVOX1NQQU5TXS5wdXNoKHtcbiAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRBcmdzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgX2VuZFNwYW5zV2l0aFJlZGlzUmVwbGllcyhvcGVuU3BhbnMsIHJlcGxpZXMpIHtcbiAgICAgICAgaWYgKCFvcGVuU3BhbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaWFnLmVycm9yKCdjYW5ub3QgZmluZCBvcGVuIHNwYW5zIHRvIGVuZCBmb3IgcmVkaXMgbXVsdGkgY29tbWFuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXBsaWVzLmxlbmd0aCAhPT0gb3BlblNwYW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWcuZXJyb3IoJ251bWJlciBvZiBtdWx0aSBjb21tYW5kIHNwYW5zIGRvZXMgbm90IG1hdGNoIHJlc3BvbnNlIGZyb20gcmVkaXMnKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wZW5TcGFucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgeyBzcGFuLCBjb21tYW5kTmFtZSwgY29tbWFuZEFyZ3MgfSA9IG9wZW5TcGFuc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJDb21tYW5kUmVzID0gcmVwbGllc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IFtyZXMsIGVycl0gPSBjdXJyQ29tbWFuZFJlcyBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgPyBbbnVsbCwgY3VyckNvbW1hbmRSZXNdXG4gICAgICAgICAgICAgICAgOiBbY3VyckNvbW1hbmRSZXMsIHVuZGVmaW5lZF07XG4gICAgICAgICAgICB0aGlzLl9lbmRTcGFuV2l0aFJlc3BvbnNlKHNwYW4sIGNvbW1hbmROYW1lLCBjb21tYW5kQXJncywgcmVzLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9lbmRTcGFuV2l0aFJlc3BvbnNlKHNwYW4sIGNvbW1hbmROYW1lLCBjb21tYW5kQXJncywgcmVzcG9uc2UsIGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2VIb29rIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgICBpZiAoIWVycm9yICYmIHJlc3BvbnNlSG9vaykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUhvb2soc3BhbiwgY29tbWFuZE5hbWUsIGNvbW1hbmRBcmdzLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcigncmVzcG9uc2VIb29rIHRocm93IGFuIGV4Y2VwdGlvbicsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVkaXNJbnN0cnVtZW50YXRpb25WNF9WNSA9IFJlZGlzSW5zdHJ1bWVudGF0aW9uVjRfVjU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVkaXNJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzIgPSByZXF1aXJlKFwiLi92Mi12My9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMyA9IHJlcXVpcmUoXCIuL3Y0LXY1L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge1xuICAgIHJlcXVpcmVQYXJlbnRTcGFuOiBmYWxzZSxcbn07XG4vLyBXcmFwcGVyIFJlZGlzSW5zdHJ1bWVudGF0aW9uIHRoYXQgYWRkcmVzcyBhbGwgc3VwcG9ydGVkIHZlcnNpb25zXG5jbGFzcyBSZWRpc0luc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGluc3RydW1lbnRhdGlvblYyX1YzO1xuICAgIGluc3RydW1lbnRhdGlvblY0X1Y1O1xuICAgIC8vIHRoaXMgaXMgdXNlZCB0byBieXBhc3MgYSBmbGF3IGluIHRoZSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLCB3aGljaCBpcyBjYWxsaW5nXG4gICAgLy8gbWVtYmVyIGZ1bmN0aW9ucyBiZWZvcmUgdGhlIGNvbnN0cnVjdG9yIGhhcyBhIGNoYW5jZSB0byBmdWxseSBpbml0aWFsaXplIHRoZSBtZW1iZXIgdmFyaWFibGVzLlxuICAgIGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRDb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgcmVzb2x2ZWRDb25maWcpO1xuICAgICAgICB0aGlzLmluc3RydW1lbnRhdGlvblYyX1YzID0gbmV3IGluc3RydW1lbnRhdGlvbl8yLlJlZGlzSW5zdHJ1bWVudGF0aW9uVjJfVjModGhpcy5nZXRDb25maWcoKSk7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uVjRfVjUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzMuUmVkaXNJbnN0cnVtZW50YXRpb25WNF9WNSh0aGlzLmdldENvbmZpZygpKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKG5ld0NvbmZpZyk7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uVjJfVjMuc2V0Q29uZmlnKG5ld0NvbmZpZyk7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uVjRfVjUuc2V0Q29uZmlnKG5ld0NvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7IH1cbiAgICAvLyBSZXR1cm4gdW5kZXJseWluZyBtb2R1bGVzLCBhcyBjb25zdW1lcnMgKGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL0RyZXdDb3JsaW4vb3BlbnRlbGVtZXRyeS1ub2RlLWJ1bmRsZXItcGx1Z2lucykgbWF5XG4gICAgLy8gZXhwZWN0IHRoZW0gdG8gYmUgcG9wdWxhdGVkIHdpdGhvdXQga25vd2luZyB0aGF0IHRoaXMgbW9kdWxlIHdyYXBzIDIgaW5zdHJ1bWVudGF0aW9uc1xuICAgIGdldE1vZHVsZURlZmluaXRpb25zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4udGhpcy5pbnN0cnVtZW50YXRpb25WMl9WMy5nZXRNb2R1bGVEZWZpbml0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy5pbnN0cnVtZW50YXRpb25WNF9WNS5nZXRNb2R1bGVEZWZpbml0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzZXRUcmFjZXJQcm92aWRlcih0cmFjZXJQcm92aWRlcikge1xuICAgICAgICBzdXBlci5zZXRUcmFjZXJQcm92aWRlcih0cmFjZXJQcm92aWRlcik7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uVjJfVjMuc2V0VHJhY2VyUHJvdmlkZXIodHJhY2VyUHJvdmlkZXIpO1xuICAgICAgICB0aGlzLmluc3RydW1lbnRhdGlvblY0X1Y1LnNldFRyYWNlclByb3ZpZGVyKHRyYWNlclByb3ZpZGVyKTtcbiAgICB9XG4gICAgZW5hYmxlKCkge1xuICAgICAgICBzdXBlci5lbmFibGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WMl9WMy5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WNF9WNS5lbmFibGUoKTtcbiAgICB9XG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgc3VwZXIuZGlzYWJsZSgpO1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc3RydW1lbnRhdGlvblYyX1YzLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WNF9WNS5kaXNhYmxlKCk7XG4gICAgfVxufVxuZXhwb3J0cy5SZWRpc0luc3RydW1lbnRhdGlvbiA9IFJlZGlzSW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkaXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlZGlzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIHJlZGlzXzEgPSByZXF1aXJlKFwiLi9yZWRpc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZGlzSW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWRpc18xLlJlZGlzSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxheWVyVHlwZSA9IHZvaWQgMDtcbnZhciBMYXllclR5cGU7XG4oZnVuY3Rpb24gKExheWVyVHlwZSkge1xuICAgIExheWVyVHlwZVtcIk1JRERMRVdBUkVcIl0gPSBcIm1pZGRsZXdhcmVcIjtcbiAgICBMYXllclR5cGVbXCJSRVFVRVNUX0hBTkRMRVJcIl0gPSBcInJlcXVlc3RfaGFuZGxlclwiO1xufSkoTGF5ZXJUeXBlID0gZXhwb3J0cy5MYXllclR5cGUgfHwgKGV4cG9ydHMuTGF5ZXJUeXBlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBBdHRyaWJ1dGVOYW1lcztcbihmdW5jdGlvbiAoQXR0cmlidXRlTmFtZXMpIHtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIlRZUEVcIl0gPSBcInJlc3RpZnkudHlwZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiTkFNRVwiXSA9IFwicmVzdGlmeS5uYW1lXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJNRVRIT0RcIl0gPSBcInJlc3RpZnkubWV0aG9kXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJWRVJTSU9OXCJdID0gXCJyZXN0aWZ5LnZlcnNpb25cIjtcbn0pKEF0dHJpYnV0ZU5hbWVzID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyB8fCAoZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdHRyaWJ1dGVOYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuNTMuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVzdGlmeSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1PRFVMRV9OQU1FID0gZXhwb3J0cy5SRVNUSUZZX01FVEhPRFMgPSBleHBvcnRzLlJFU1RJRllfTVdfTUVUSE9EUyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5leHBvcnRzLlJFU1RJRllfTVdfTUVUSE9EUyA9IFsndXNlJywgJ3ByZSddO1xuZXhwb3J0cy5SRVNUSUZZX01FVEhPRFMgPSBbXG4gICAgJ2RlbCcsXG4gICAgJ2dldCcsXG4gICAgJ2hlYWQnLFxuICAgICdvcHRzJyxcbiAgICAncG9zdCcsXG4gICAgJ3B1dCcsXG4gICAgJ3BhdGNoJyxcbl07XG5leHBvcnRzLk1PRFVMRV9OQU1FID0gJ3Jlc3RpZnknO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0FzeW5jRnVuY3Rpb24gPSBleHBvcnRzLmlzUHJvbWlzZSA9IHZvaWQgMDtcbi8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIHN1cHBvcnRlZCBmcm9tIDEwLjAuMFxuY29uc3QgaXNQcm9taXNlID0gKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuICEhKHZhbHVlICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB2YWx1ZS50b1N0cmluZygpID09PSAnW29iamVjdCBQcm9taXNlXScpO1xufTtcbmV4cG9ydHMuaXNQcm9taXNlID0gaXNQcm9taXNlO1xuLy8gdXRpbC50eXBlcy5pc0FzeW5jRnVuY3Rpb24gaXMgc3VwcG9ydGVkIGZyb20gMTAuMC4wXG5jb25zdCBpc0FzeW5jRnVuY3Rpb24gPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gISEodmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yPy5uYW1lID09PSAnQXN5bmNGdW5jdGlvbicpO1xufTtcbmV4cG9ydHMuaXNBc3luY0Z1bmN0aW9uID0gaXNBc3luY0Z1bmN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJlc3RpZnlJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBbJz49NC4xLjAgPDEyJ107XG5jbGFzcyBSZXN0aWZ5SW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICB9XG4gICAgX21vZHVsZVZlcnNpb247XG4gICAgX2lzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oY29uc3RhbnRzLk1PRFVMRV9OQU1FLCBzdXBwb3J0ZWRWZXJzaW9ucywgKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21vZHVsZVZlcnNpb24gPSBtb2R1bGVWZXJzaW9uO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2R1bGUuZmlsZXMucHVzaChuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ3Jlc3RpZnkvbGliL3NlcnZlci5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IFNlcnZlciA9IG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgY29uc3RhbnRzLlJFU1RJRllfTUVUSE9EUykge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShTZXJ2ZXIucHJvdG90eXBlW25hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoU2VydmVyLnByb3RvdHlwZSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAoU2VydmVyLnByb3RvdHlwZSwgbmFtZSwgdGhpcy5fbWV0aG9kUGF0Y2hlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBjb25zdGFudHMuUkVTVElGWV9NV19NRVRIT0RTKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKFNlcnZlci5wcm90b3R5cGVbbmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChTZXJ2ZXIucHJvdG90eXBlLCBuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChTZXJ2ZXIucHJvdG90eXBlLCBuYW1lLCB0aGlzLl9taWRkbGV3YXJlUGF0Y2hlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBTZXJ2ZXIgPSBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBjb25zdGFudHMuUkVTVElGWV9NRVRIT0RTKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChTZXJ2ZXIucHJvdG90eXBlLCBuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGNvbnN0YW50cy5SRVNUSUZZX01XX01FVEhPRFMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKFNlcnZlci5wcm90b3R5cGUsIG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBfbWlkZGxld2FyZVBhdGNoZXIob3JpZ2luYWwsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5oYW5kbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBpbnN0cnVtZW50YXRpb24uX2hhbmRsZXJQYXRjaGVyKHsgdHlwZTogdHlwZXNfMS5MYXllclR5cGUuTUlERExFV0FSRSwgbWV0aG9kTmFtZSB9LCBoYW5kbGVyKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9tZXRob2RQYXRjaGVyKG9yaWdpbmFsLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocGF0aCwgLi4uaGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgcGF0aCwgLi4uaW5zdHJ1bWVudGF0aW9uLl9oYW5kbGVyUGF0Y2hlcih7IHR5cGU6IHR5cGVzXzEuTGF5ZXJUeXBlLlJFUVVFU1RfSEFORExFUiwgcGF0aCwgbWV0aG9kTmFtZSB9LCBoYW5kbGVyKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHR5cGUgYXMgYGhhbmRsZXJgLCBidXQgYWxsIGZ1bmN0aW9ucyByZWN1cnNpdmVseSBwYXRjaGVkXG4gICAgX2hhbmRsZXJQYXRjaGVyKG1ldGFkYXRhLCBoYW5kbGVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlci5tYXAoaGFuZGxlciA9PiB0aGlzLl9oYW5kbGVyUGF0Y2hlcihtZXRhZGF0YSwgaGFuZGxlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyKHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSB0eXBlb2YgcmVxLmdldFJvdXRlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gcmVxLmdldFJvdXRlKCk/LnBhdGhcbiAgICAgICAgICAgICAgICAgICAgOiByZXEucm91dGU/LnBhdGg7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBIVFRQIGluc3RydW1lbnRhdGlvbnMgbmFtZSB3aXRoIG9uZSB0aGF0IGNvbnRhaW5zIGEgcm91dGVcbiAgICAgICAgICAgICAgICBjb25zdCBodHRwTWV0YWRhdGEgPSAoMCwgY29yZV8xLmdldFJQQ01ldGFkYXRhKShhcGkuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGh0dHBNZXRhZGF0YT8udHlwZSA9PT0gY29yZV8xLlJQQ1R5cGUuSFRUUCkge1xuICAgICAgICAgICAgICAgICAgICBodHRwTWV0YWRhdGEucm91dGUgPSByb3V0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZm5OYW1lID0gaGFuZGxlci5uYW1lIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IG1ldGFkYXRhLnR5cGUgPT09IHR5cGVzXzEuTGF5ZXJUeXBlLlJFUVVFU1RfSEFORExFUlxuICAgICAgICAgICAgICAgICAgICA/IGByZXF1ZXN0IGhhbmRsZXIgLSAke3JvdXRlfWBcbiAgICAgICAgICAgICAgICAgICAgOiBgbWlkZGxld2FyZSAtICR7Zm5OYW1lIHx8ICdhbm9ueW1vdXMnfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuTkFNRV06IGZuTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXMuVkVSU0lPTl06IHRoaXMuX21vZHVsZVZlcnNpb24gfHwgJ24vYScsXG4gICAgICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLkF0dHJpYnV0ZU5hbWVzLlRZUEVdOiBtZXRhZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lcy5NRVRIT0RdOiBtZXRhZGF0YS5tZXRob2ROYW1lLFxuICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUk9VVEVdOiByb3V0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9LCBhcGkuY29udGV4dC5hY3RpdmUoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJlcXVlc3RIb29rIH0gPSBpbnN0cnVtZW50YXRpb24uZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RIb29rKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdEhvb2soc3Bhbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHJlcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllclR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5fZGlhZy5lcnJvcigncmVxdWVzdCBob29rIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZE5leHQgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHBhdGNoZWROZXh0LmlmRXJyb3IgPSBuZXh0LmlmRXJyb3I7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcFByb21pc2UgPSAocHJvbWlzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IGFwaS50cmFjZS5zZXRTcGFuKGFwaS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aChuZXdDb250ZXh0LCAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzQXN5bmNGdW5jdGlvbikoaGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwUHJvbWlzZShoYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZXIocmVxLCByZXMsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzUHJvbWlzZSkocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwUHJvbWlzZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzLCByZXEsIHJlcywgcGF0Y2hlZE5leHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICB9XG59XG5leHBvcnRzLlJlc3RpZnlJbnN0cnVtZW50YXRpb24gPSBSZXN0aWZ5SW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MYXllclR5cGUgPSBleHBvcnRzLkF0dHJpYnV0ZU5hbWVzID0gZXhwb3J0cy5SZXN0aWZ5SW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzdGlmeUluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuUmVzdGlmeUluc3RydW1lbnRhdGlvbjsgfSB9KTtcbnZhciBBdHRyaWJ1dGVOYW1lc18xID0gcmVxdWlyZShcIi4vZW51bXMvQXR0cmlidXRlTmFtZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBdHRyaWJ1dGVOYW1lc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXR0cmlidXRlTmFtZXNfMS5BdHRyaWJ1dGVOYW1lczsgfSB9KTtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMYXllclR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuTGF5ZXJUeXBlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjUyLjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJvdXRlcic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ST1VURVJfSEFORExFX0ZOID0gZXhwb3J0cy5ST1VURV9ST1VURVJfRk4gPSBleHBvcnRzLk1PRFVMRV9OQU1FID0gdm9pZCAwO1xuZXhwb3J0cy5NT0RVTEVfTkFNRSA9ICdyb3V0ZXInO1xuLy8gUm91dGVyLnByb3RvdHlwZS5oYW5kbGVcbmV4cG9ydHMuUk9VVEVfUk9VVEVSX0ZOID0gYGZ1bmN0aW9uIHJvdXRlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIHJvdXRlci5oYW5kbGUocmVxLCByZXMsIG5leHQpXG4gIH1gO1xuLy8gUm91dGUucHJvdG90eXBlLmRpc3BhdGNoXG5leHBvcnRzLlJPVVRFUl9IQU5ETEVfRk4gPSBgZnVuY3Rpb24gaGFuZGxlKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgcm91dGUuZGlzcGF0Y2gocmVxLCByZXMsIG5leHQpXG4gIH1gO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vbmNlID0gZXhwb3J0cy5yZW5hbWVIdHRwU3BhbiA9IGV4cG9ydHMuaXNJbnRlcm5hbCA9IHZvaWQgMDtcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbi8vIERldGVjdCB3aGV0aGVyIGEgZnVuY3Rpb24gaXMgYSByb3V0ZXIgcGFja2FnZSBpbnRlcm5hbCBwbHVtYmluZyBoYW5kbGVyXG5jb25zdCBpc0ludGVybmFsID0gKGZuKSA9PiB7XG4gICAgLy8gTm90ZSB0aGF0IGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBzeW5jXG4gICAgaWYgKGZuLm5hbWUgPT09ICdoYW5kbGUnICYmIGZuLnRvU3RyaW5nKCkgPT09IGNvbnN0YW50cy5ST1VURVJfSEFORExFX0ZOKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZm4ubmFtZSA9PT0gJ3JvdXRlcicgJiYgZm4udG9TdHJpbmcoKSA9PT0gY29uc3RhbnRzLlJPVVRFX1JPVVRFUl9GTikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydHMuaXNJbnRlcm5hbCA9IGlzSW50ZXJuYWw7XG5jb25zdCByZW5hbWVIdHRwU3BhbiA9IChzcGFuLCBtZXRob2QsIHJvdXRlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3Bhbj8ubmFtZT8uc3RhcnRzV2l0aCgnSFRUUCAnKSkge1xuICAgICAgICBzcGFuLnVwZGF0ZU5hbWUoYCR7bWV0aG9kLnRvVXBwZXJDYXNlKCl9ICR7cm91dGV9YCk7XG4gICAgfVxufTtcbmV4cG9ydHMucmVuYW1lSHR0cFNwYW4gPSByZW5hbWVIdHRwU3BhbjtcbmNvbnN0IG9uY2UgPSAoZm4pID0+IHtcbiAgICBsZXQgcnVuID0gdHJ1ZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAocnVuKSB7XG4gICAgICAgICAgICBydW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydHMub25jZSA9IG9uY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlTmFtZXMgPSB2b2lkIDA7XG52YXIgQXR0cmlidXRlTmFtZXM7XG4oZnVuY3Rpb24gKEF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJUWVBFXCJdID0gXCJyb3V0ZXIudHlwZVwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiTkFNRVwiXSA9IFwicm91dGVyLm5hbWVcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIk1FVEhPRFwiXSA9IFwicm91dGVyLm1ldGhvZFwiO1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiVkVSU0lPTlwiXSA9IFwicm91dGVyLnZlcnNpb25cIjtcbn0pKEF0dHJpYnV0ZU5hbWVzID0gZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyB8fCAoZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IHt9KSk7XG5leHBvcnRzLmRlZmF1bHQgPSBBdHRyaWJ1dGVOYW1lcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MYXllclR5cGUgPSB2b2lkIDA7XG52YXIgTGF5ZXJUeXBlO1xuKGZ1bmN0aW9uIChMYXllclR5cGUpIHtcbiAgICBMYXllclR5cGVbXCJNSURETEVXQVJFXCJdID0gXCJtaWRkbGV3YXJlXCI7XG4gICAgTGF5ZXJUeXBlW1wiUkVRVUVTVF9IQU5ETEVSXCJdID0gXCJyZXF1ZXN0X2hhbmRsZXJcIjtcbn0pKExheWVyVHlwZSA9IGV4cG9ydHMuTGF5ZXJUeXBlIHx8IChleHBvcnRzLkxheWVyVHlwZSA9IHt9KSk7XG5leHBvcnRzLmRlZmF1bHQgPSBMYXllclR5cGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1MYXllclR5cGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJvdXRlckluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9lbnVtcy9BdHRyaWJ1dGVOYW1lc1wiKTtcbmNvbnN0IExheWVyVHlwZV8xID0gcmVxdWlyZShcIi4vZW51bXMvTGF5ZXJUeXBlXCIpO1xuY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBbJz49MS4wLjAgPDInXTtcbmNsYXNzIFJvdXRlckluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIF9tb2R1bGVWZXJzaW9uO1xuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihjb25zdGFudHMuTU9EVUxFX05BTUUsIHN1cHBvcnRlZFZlcnNpb25zLCAobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbW9kdWxlVmVyc2lvbiA9IG1vZHVsZVZlcnNpb247XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZHVsZS5maWxlcy5wdXNoKG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgncm91dGVyL2xpYi9sYXllci5qcycsIHN1cHBvcnRlZFZlcnNpb25zLCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IExheWVyID0gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShMYXllci5wcm90b3R5cGUuaGFuZGxlX3JlcXVlc3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKExheWVyLnByb3RvdHlwZSwgJ2hhbmRsZV9yZXF1ZXN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKExheWVyLnByb3RvdHlwZSwgJ2hhbmRsZV9yZXF1ZXN0JywgdGhpcy5fcmVxdWVzdEhhbmRsZXJQYXRjaGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKExheWVyLnByb3RvdHlwZS5oYW5kbGVfZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKExheWVyLnByb3RvdHlwZSwgJ2hhbmRsZV9lcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChMYXllci5wcm90b3R5cGUsICdoYW5kbGVfZXJyb3InLCB0aGlzLl9lcnJvckhhbmRsZXJQYXRjaGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgY29uc3QgTGF5ZXIgPSBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKExheWVyLnByb3RvdHlwZSwgJ2hhbmRsZV9yZXF1ZXN0Jyk7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAoTGF5ZXIucHJvdG90eXBlLCAnaGFuZGxlX2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICAvLyBEZWZpbmUgaGFuZGxlX3JlcXVlc3Qgd3JhcHBlciBzZXBhcmF0ZWx5IHRvIGVuc3VyZSB0aGUgc2lnbmF0dXJlIGhhcyB0aGUgY29ycmVjdCBsZW5ndGhcbiAgICBfcmVxdWVzdEhhbmRsZXJQYXRjaGVyKG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVkX2hhbmRsZV9yZXF1ZXN0KHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBTa2lwIGNyZWF0aW5nIHNwYW5zIGlmIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIgaXMgb2YgaW52YWxpZCBsZW5ndGgsIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHdlIGtub3cgcm91dGVyIHdpbGwgaWdub3JlIHRob3NlXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNJbnRlcm5hbCh0aGlzLmhhbmRsZSkgfHwgdGhpcy5oYW5kbGUubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY29udGV4dCwgd3JhcHBlZE5leHQgfSA9IGluc3RydW1lbnRhdGlvbi5fc2V0dXBTcGFuKHRoaXMsIHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKGNvbnRleHQsIG9yaWdpbmFsLCB0aGlzLCByZXEsIHJlcywgd3JhcHBlZE5leHQpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBEZWZpbmUgaGFuZGxlX2Vycm9yIHdyYXBwZXIgc2VwYXJhdGVseSB0byBlbnN1cmUgdGhlIHNpZ25hdHVyZSBoYXMgdGhlIGNvcnJlY3QgbGVuZ3RoXG4gICAgX2Vycm9ySGFuZGxlclBhdGNoZXIob3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBwZWRfaGFuZGxlX3JlcXVlc3QoZXJyb3IsIHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICAgICAgICAvLyBTa2lwIGNyZWF0aW5nIHNwYW5zIGlmIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIgaXMgb2YgaW52YWxpZCBsZW5ndGgsIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHdlIGtub3cgcm91dGVyIHdpbGwgaWdub3JlIHRob3NlXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNJbnRlcm5hbCh0aGlzLmhhbmRsZSkgfHwgdGhpcy5oYW5kbGUubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgZXJyb3IsIHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY29udGV4dCwgd3JhcHBlZE5leHQgfSA9IGluc3RydW1lbnRhdGlvbi5fc2V0dXBTcGFuKHRoaXMsIHJlcSwgcmVzLCBuZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKGNvbnRleHQsIG9yaWdpbmFsLCB0aGlzLCBlcnJvciwgcmVxLCByZXMsIHdyYXBwZWROZXh0KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3NldHVwU3BhbihsYXllciwgcmVxLCByZXMsIG5leHQpIHtcbiAgICAgICAgY29uc3QgZm5OYW1lID0gbGF5ZXIuaGFuZGxlLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcbiAgICAgICAgY29uc3QgdHlwZSA9IGxheWVyLm1ldGhvZFxuICAgICAgICAgICAgPyBMYXllclR5cGVfMS5kZWZhdWx0LlJFUVVFU1RfSEFORExFUlxuICAgICAgICAgICAgOiBMYXllclR5cGVfMS5kZWZhdWx0Lk1JRERMRVdBUkU7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gcmVxLmJhc2VVcmwgKyAocmVxLnJvdXRlPy5wYXRoID8/ICcnKSB8fCAnLyc7XG4gICAgICAgIGNvbnN0IHNwYW5OYW1lID0gdHlwZSA9PT0gTGF5ZXJUeXBlXzEuZGVmYXVsdC5SRVFVRVNUX0hBTkRMRVJcbiAgICAgICAgICAgID8gYHJlcXVlc3QgaGFuZGxlciAtICR7cm91dGV9YFxuICAgICAgICAgICAgOiBgbWlkZGxld2FyZSAtICR7Zm5OYW1lfWA7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5kZWZhdWx0Lk5BTUVdOiBmbk5hbWUsXG4gICAgICAgICAgICBbQXR0cmlidXRlTmFtZXNfMS5kZWZhdWx0LlZFUlNJT05dOiB0aGlzLl9tb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgW0F0dHJpYnV0ZU5hbWVzXzEuZGVmYXVsdC5UWVBFXTogdHlwZSxcbiAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9ST1VURV06IHJvdXRlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBhcGkuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IGFwaS50cmFjZS5nZXRTcGFuKHBhcmVudCk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIH0sIHBhcmVudCk7XG4gICAgICAgIGNvbnN0IGVuZFNwYW4gPSB1dGlscy5vbmNlKHNwYW4uZW5kLmJpbmQoc3BhbikpO1xuICAgICAgICB1dGlscy5yZW5hbWVIdHRwU3BhbihwYXJlbnRTcGFuLCBsYXllci5tZXRob2QsIHJvdXRlKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHNwYW5zIGFyZSBlbmRlZCBhdCBsZWFzdCB3aGVuIHJlc3BvbnNlIGlzIGZpbmlzaGVkXG4gICAgICAgIHJlcy5wcmVwZW5kT25jZUxpc3RlbmVyKCdmaW5pc2gnLCBlbmRTcGFuKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlZE5leHQgPSBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRTcGFuKCk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0LndpdGgocGFyZW50LCBuZXh0LCB1bmRlZmluZWQsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGV4dDogYXBpLnRyYWNlLnNldFNwYW4ocGFyZW50LCBzcGFuKSxcbiAgICAgICAgICAgIHdyYXBwZWROZXh0LFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuUm91dGVySW5zdHJ1bWVudGF0aW9uID0gUm91dGVySW5zdHJ1bWVudGF0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BdHRyaWJ1dGVOYW1lcyA9IGV4cG9ydHMuUm91dGVySW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xudmFyIGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4vaW5zdHJ1bWVudGF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUm91dGVySW5zdHJ1bWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25fMS5Sb3V0ZXJJbnN0cnVtZW50YXRpb247IH0gfSk7XG52YXIgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL2VudW1zL0F0dHJpYnV0ZU5hbWVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXR0cmlidXRlTmFtZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZU5hbWVzXzEuQXR0cmlidXRlTmFtZXM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXNlQ29sbGVjdG9yID0gdm9pZCAwO1xuY2xhc3MgQmFzZUNvbGxlY3RvciB7XG4gICAgX2NvbmZpZyA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB9XG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbERpc2FibGUoKTtcbiAgICB9XG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9jb25maWcuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxFbmFibGUoKTtcbiAgICB9XG59XG5leHBvcnRzLkJhc2VDb2xsZWN0b3IgPSBCYXNlQ29sbGVjdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZUNvbGxlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTk9ERUpTX0VWRU5UTE9PUF9TVEFURV9WQUxVRV9JRExFID0gZXhwb3J0cy5OT0RFSlNfRVZFTlRMT09QX1NUQVRFX1ZBTFVFX0FDVElWRSA9IGV4cG9ydHMuTUVUUklDX1Y4SlNfTUVNT1JZX0hFQVBfVVNFRCA9IGV4cG9ydHMuTUVUUklDX1Y4SlNfTUVNT1JZX0hFQVBfTElNSVQgPSBleHBvcnRzLk1FVFJJQ19WOEpTX0dDX0RVUkFUSU9OID0gZXhwb3J0cy5NRVRSSUNfTk9ERUpTX0VWRU5UTE9PUF9VVElMSVpBVElPTiA9IGV4cG9ydHMuTUVUUklDX05PREVKU19FVkVOVExPT1BfVElNRSA9IGV4cG9ydHMuTUVUUklDX05PREVKU19FVkVOVExPT1BfREVMQVlfU1REREVWID0gZXhwb3J0cy5NRVRSSUNfTk9ERUpTX0VWRU5UTE9PUF9ERUxBWV9QOTkgPSBleHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX1A5MCA9IGV4cG9ydHMuTUVUUklDX05PREVKU19FVkVOVExPT1BfREVMQVlfUDUwID0gZXhwb3J0cy5NRVRSSUNfTk9ERUpTX0VWRU5UTE9PUF9ERUxBWV9NSU4gPSBleHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX01FQU4gPSBleHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX01BWCA9IGV4cG9ydHMuQVRUUl9WOEpTX0hFQVBfU1BBQ0VfTkFNRSA9IGV4cG9ydHMuQVRUUl9WOEpTX0dDX1RZUEUgPSBleHBvcnRzLkFUVFJfTk9ERUpTX0VWRU5UTE9PUF9TVEFURSA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBzdGF0ZSBvZiBldmVudCBsb29wIHRpbWUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTk9ERUpTX0VWRU5UTE9PUF9TVEFURSA9ICdub2RlanMuZXZlbnRsb29wLnN0YXRlJztcbi8qKlxuICogVGhlIHR5cGUgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1Y4SlNfR0NfVFlQRSA9ICd2OGpzLmdjLnR5cGUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc3BhY2UgdHlwZSBvZiBoZWFwIG1lbW9yeS5cbiAqXG4gKiBAbm90ZSBWYWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYHNwYWNlX25hbWVgIG9mIFtgdjguZ2V0SGVhcFNwYWNlU3RhdGlzdGljcygpYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS92OC5odG1sI3Y4Z2V0aGVhcHNwYWNlc3RhdGlzdGljcylcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9WOEpTX0hFQVBfU1BBQ0VfTkFNRSA9ICd2OGpzLmhlYXAuc3BhY2UubmFtZSc7XG4vKipcbiAqIEV2ZW50IGxvb3AgbWF4aW11bSBkZWxheS5cbiAqXG4gKiBAbm90ZSBWYWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYGhpc3RvZ3JhbS5tYXhgIG9mIFtgcGVyZl9ob29rcy5tb25pdG9yRXZlbnRMb29wRGVsYXkoW29wdGlvbnNdKWBdKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcGVyZl9ob29rcy5odG1sI3BlcmZfaG9va3Ntb25pdG9yZXZlbnRsb29wZGVsYXlvcHRpb25zKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfTk9ERUpTX0VWRU5UTE9PUF9ERUxBWV9NQVggPSAnbm9kZWpzLmV2ZW50bG9vcC5kZWxheS5tYXgnO1xuLyoqXG4gKiBFdmVudCBsb29wIG1lYW4gZGVsYXkuXG4gKlxuICogQG5vdGUgVmFsdWUgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHZhbHVlIGBoaXN0b2dyYW0ubWVhbmAgb2YgW2BwZXJmX2hvb2tzLm1vbml0b3JFdmVudExvb3BEZWxheShbb3B0aW9uc10pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZl9ob29rc21vbml0b3JldmVudGxvb3BkZWxheW9wdGlvbnMpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX01FQU4gPSAnbm9kZWpzLmV2ZW50bG9vcC5kZWxheS5tZWFuJztcbi8qKlxuICogRXZlbnQgbG9vcCBtaW5pbXVtIGRlbGF5LlxuICpcbiAqIEBub3RlIFZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB2YWx1ZSBgaGlzdG9ncmFtLm1pbmAgb2YgW2BwZXJmX2hvb2tzLm1vbml0b3JFdmVudExvb3BEZWxheShbb3B0aW9uc10pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZl9ob29rc21vbml0b3JldmVudGxvb3BkZWxheW9wdGlvbnMpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX01JTiA9ICdub2RlanMuZXZlbnRsb29wLmRlbGF5Lm1pbic7XG4vKipcbiAqIEV2ZW50IGxvb3AgNTAgcGVyY2VudGlsZSBkZWxheS5cbiAqXG4gKiBAbm90ZSBWYWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYGhpc3RvZ3JhbS5wZXJjZW50aWxlKDUwKWAgb2YgW2BwZXJmX2hvb2tzLm1vbml0b3JFdmVudExvb3BEZWxheShbb3B0aW9uc10pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZl9ob29rc21vbml0b3JldmVudGxvb3BkZWxheW9wdGlvbnMpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX1A1MCA9ICdub2RlanMuZXZlbnRsb29wLmRlbGF5LnA1MCc7XG4vKipcbiAqIEV2ZW50IGxvb3AgOTAgcGVyY2VudGlsZSBkZWxheS5cbiAqXG4gKiBAbm90ZSBWYWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYGhpc3RvZ3JhbS5wZXJjZW50aWxlKDkwKWAgb2YgW2BwZXJmX2hvb2tzLm1vbml0b3JFdmVudExvb3BEZWxheShbb3B0aW9uc10pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZl9ob29rc21vbml0b3JldmVudGxvb3BkZWxheW9wdGlvbnMpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX1A5MCA9ICdub2RlanMuZXZlbnRsb29wLmRlbGF5LnA5MCc7XG4vKipcbiAqIEV2ZW50IGxvb3AgOTkgcGVyY2VudGlsZSBkZWxheS5cbiAqXG4gKiBAbm90ZSBWYWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYGhpc3RvZ3JhbS5wZXJjZW50aWxlKDk5KWAgb2YgW2BwZXJmX2hvb2tzLm1vbml0b3JFdmVudExvb3BEZWxheShbb3B0aW9uc10pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZl9ob29rc21vbml0b3JldmVudGxvb3BkZWxheW9wdGlvbnMpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX1A5OSA9ICdub2RlanMuZXZlbnRsb29wLmRlbGF5LnA5OSc7XG4vKipcbiAqIEV2ZW50IGxvb3Agc3RhbmRhcmQgZGV2aWF0aW9uIGRlbGF5LlxuICpcbiAqIEBub3RlIFZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB2YWx1ZSBgaGlzdG9ncmFtLnN0ZGRldmAgb2YgW2BwZXJmX2hvb2tzLm1vbml0b3JFdmVudExvb3BEZWxheShbb3B0aW9uc10pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZl9ob29rc21vbml0b3JldmVudGxvb3BkZWxheW9wdGlvbnMpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX1NURERFViA9ICdub2RlanMuZXZlbnRsb29wLmRlbGF5LnN0ZGRldic7XG4vKipcbiAqIEN1bXVsYXRpdmUgZHVyYXRpb24gb2YgdGltZSB0aGUgZXZlbnQgbG9vcCBoYXMgYmVlbiBpbiBlYWNoIHN0YXRlLlxuICpcbiAqIEBub3RlIFZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBbYHBlcmZvcm1hbmNlLmV2ZW50TG9vcFV0aWxpemF0aW9uKFt1dGlsaXphdGlvbjFbLCB1dGlsaXphdGlvbjJdXSlgXShodHRwczovL25vZGVqcy5vcmcvYXBpL3BlcmZfaG9va3MuaHRtbCNwZXJmb3JtYW5jZWV2ZW50bG9vcHV0aWxpemF0aW9udXRpbGl6YXRpb24xLXV0aWxpemF0aW9uMilcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0cmljIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuTUVUUklDX05PREVKU19FVkVOVExPT1BfVElNRSA9ICdub2RlanMuZXZlbnRsb29wLnRpbWUnO1xuLyoqXG4gKiBFdmVudCBsb29wIHV0aWxpemF0aW9uLlxuICpcbiAqIEBub3RlIFRoZSB2YWx1ZSByYW5nZSBpcyBbMC4wLCAxLjBdIGFuZCBjYW4gYmUgcmV0cmlldmVkIGZyb20gW2BwZXJmb3JtYW5jZS5ldmVudExvb3BVdGlsaXphdGlvbihbdXRpbGl6YXRpb24xWywgdXRpbGl6YXRpb24yXV0pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZm9ybWFuY2VldmVudGxvb3B1dGlsaXphdGlvbnV0aWxpemF0aW9uMS11dGlsaXphdGlvbjIpXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldHJpYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX1VUSUxJWkFUSU9OID0gJ25vZGVqcy5ldmVudGxvb3AudXRpbGl6YXRpb24nO1xuLyoqXG4gKiBHYXJiYWdlIGNvbGxlY3Rpb24gZHVyYXRpb24uXG4gKlxuICogQG5vdGUgVGhlIHZhbHVlcyBjYW4gYmUgcmV0cmlldmVkIGZyb20gW2BwZXJmX2hvb2tzLlBlcmZvcm1hbmNlT2JzZXJ2ZXIoLi4uKS5vYnNlcnZlKHsgZW50cnlUeXBlczogWydnYyddIH0pYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wZXJmX2hvb2tzLmh0bWwjcGVyZm9ybWFuY2VvYnNlcnZlcm9ic2VydmVvcHRpb25zKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfVjhKU19HQ19EVVJBVElPTiA9ICd2OGpzLmdjLmR1cmF0aW9uJztcbi8qKlxuICogVG90YWwgaGVhcCBtZW1vcnkgc2l6ZSBwcmUtYWxsb2NhdGVkLlxuICpcbiAqIEBub3RlIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYHNwYWNlX3NpemVgIG9mIFtgdjguZ2V0SGVhcFNwYWNlU3RhdGlzdGljcygpYF0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS92OC5odG1sI3Y4Z2V0aGVhcHNwYWNlc3RhdGlzdGljcylcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0cmljIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuTUVUUklDX1Y4SlNfTUVNT1JZX0hFQVBfTElNSVQgPSAndjhqcy5tZW1vcnkuaGVhcC5saW1pdCc7XG4vKipcbiAqIEhlYXAgTWVtb3J5IHNpemUgYWxsb2NhdGVkLlxuICpcbiAqIEBub3RlIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdmFsdWUgYHNwYWNlX3VzZWRfc2l6ZWAgb2YgW2B2OC5nZXRIZWFwU3BhY2VTdGF0aXN0aWNzKClgXShodHRwczovL25vZGVqcy5vcmcvYXBpL3Y4Lmh0bWwjdjhnZXRoZWFwc3BhY2VzdGF0aXN0aWNzKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRyaWMgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5NRVRSSUNfVjhKU19NRU1PUllfSEVBUF9VU0VEID0gJ3Y4anMubWVtb3J5LmhlYXAudXNlZCc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJhY3RpdmVcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX05PREVKU19FVkVOVExPT1BfU1RBVEV9LlxuICpcbiAqIEFjdGl2ZSB0aW1lLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuTk9ERUpTX0VWRU5UTE9PUF9TVEFURV9WQUxVRV9BQ1RJVkUgPSAnYWN0aXZlJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImlkbGVcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX05PREVKU19FVkVOVExPT1BfU1RBVEV9LlxuICpcbiAqIElkbGUgdGltZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLk5PREVKU19FVkVOVExPT1BfU1RBVEVfVkFMVUVfSURMRSA9ICdpZGxlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV2ZW50TG9vcFV0aWxpemF0aW9uQ29sbGVjdG9yID0gdm9pZCAwO1xuY29uc3Qgbm9kZV9wZXJmX2hvb2tzXzEgPSByZXF1aXJlKFwibm9kZTpwZXJmX2hvb2tzXCIpO1xuY29uc3QgYmFzZUNvbGxlY3Rvcl8xID0gcmVxdWlyZShcIi4vYmFzZUNvbGxlY3RvclwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuY29uc3QgeyBldmVudExvb3BVdGlsaXphdGlvbjogZXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3IgfSA9IG5vZGVfcGVyZl9ob29rc18xLnBlcmZvcm1hbmNlO1xuY2xhc3MgRXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3IgZXh0ZW5kcyBiYXNlQ29sbGVjdG9yXzEuQmFzZUNvbGxlY3RvciB7XG4gICAgX2xhc3RWYWx1ZTtcbiAgICB1cGRhdGVNZXRyaWNJbnN0cnVtZW50cyhtZXRlcikge1xuICAgICAgICBtZXRlclxuICAgICAgICAgICAgLmNyZWF0ZU9ic2VydmFibGVHYXVnZShzZW1jb252XzEuTUVUUklDX05PREVKU19FVkVOVExPT1BfVVRJTElaQVRJT04sIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgbG9vcCB1dGlsaXphdGlvbicsXG4gICAgICAgICAgICB1bml0OiAnMScsXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkQ2FsbGJhY2soYXN5bmMgKG9ic2VydmFibGVSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29uZmlnLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgZWx1ID0gZXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3IodGhpcy5fbGFzdFZhbHVlKTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZShlbHUudXRpbGl6YXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fbGFzdFZhbHVlID0gZWx1O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW50ZXJuYWxEaXNhYmxlKCkgeyB9XG4gICAgaW50ZXJuYWxFbmFibGUoKSB7IH1cbn1cbmV4cG9ydHMuRXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3IgPSBFdmVudExvb3BVdGlsaXphdGlvbkNvbGxlY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50TG9vcFV0aWxpemF0aW9uQ29sbGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV2ZW50TG9vcERlbGF5Q29sbGVjdG9yID0gdm9pZCAwO1xuY29uc3QgcGVyZl9ob29rcyA9IHJlcXVpcmUoXCJub2RlOnBlcmZfaG9va3NcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IGJhc2VDb2xsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL2Jhc2VDb2xsZWN0b3JcIik7XG5jbGFzcyBFdmVudExvb3BEZWxheUNvbGxlY3RvciBleHRlbmRzIGJhc2VDb2xsZWN0b3JfMS5CYXNlQ29sbGVjdG9yIHtcbiAgICBfaGlzdG9ncmFtO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2hpc3RvZ3JhbSA9IHBlcmZfaG9va3MubW9uaXRvckV2ZW50TG9vcERlbGF5KHtcbiAgICAgICAgICAgIHJlc29sdXRpb246IGNvbmZpZy5tb25pdG9yaW5nUHJlY2lzaW9uLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMobWV0ZXIpIHtcbiAgICAgICAgY29uc3QgZGVsYXlNaW4gPSBtZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2Uoc2VtY29udl8xLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX01JTiwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBsb29wIG1pbmltdW0gZGVsYXkuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlbGF5TWF4ID0gbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKHNlbWNvbnZfMS5NRVRSSUNfTk9ERUpTX0VWRU5UTE9PUF9ERUxBWV9NQVgsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgbG9vcCBtYXhpbXVtIGRlbGF5LicsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZWxheU1lYW4gPSBtZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2Uoc2VtY29udl8xLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX01FQU4sIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgbG9vcCBtZWFuIGRlbGF5LicsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZWxheVN0ZGRldiA9IG1ldGVyLmNyZWF0ZU9ic2VydmFibGVHYXVnZShzZW1jb252XzEuTUVUUklDX05PREVKU19FVkVOVExPT1BfREVMQVlfU1REREVWLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGxvb3Agc3RhbmRhcmQgZGV2aWF0aW9uIGRlbGF5LicsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZWxheXA1MCA9IG1ldGVyLmNyZWF0ZU9ic2VydmFibGVHYXVnZShzZW1jb252XzEuTUVUUklDX05PREVKU19FVkVOVExPT1BfREVMQVlfUDUwLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGxvb3AgNTAgcGVyY2VudGlsZSBkZWxheS4nLFxuICAgICAgICAgICAgdW5pdDogJ3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGVsYXlwOTAgPSBtZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2Uoc2VtY29udl8xLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX0RFTEFZX1A5MCwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBsb29wIDkwIHBlcmNlbnRpbGUgZGVsYXkuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlbGF5cDk5ID0gbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKHNlbWNvbnZfMS5NRVRSSUNfTk9ERUpTX0VWRU5UTE9PUF9ERUxBWV9QOTksIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgbG9vcCA5OSBwZXJjZW50aWxlIGRlbGF5LicsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgIH0pO1xuICAgICAgICBtZXRlci5hZGRCYXRjaE9ic2VydmFibGVDYWxsYmFjayhhc3luYyAob2JzZXJ2YWJsZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb25maWcuZW5hYmxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zY3JhcGUoKTtcbiAgICAgICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hpc3RvZ3JhbS5jb3VudCA8IDUpXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBEb24ndCByZXR1cm4gaGlzdG9ncmFtIGRhdGEgaWYgd2UgaGF2ZSBsZXNzIHRoYW4gNSBzYW1wbGVzXG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUoZGVsYXlNaW4sIGRhdGEubWluKTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZShkZWxheU1heCwgZGF0YS5tYXgpO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKGRlbGF5TWVhbiwgZGF0YS5tZWFuKTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZShkZWxheVN0ZGRldiwgZGF0YS5zdGRkZXYpO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKGRlbGF5cDUwLCBkYXRhLnA1MCk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUoZGVsYXlwOTAsIGRhdGEucDkwKTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZShkZWxheXA5OSwgZGF0YS5wOTkpO1xuICAgICAgICAgICAgdGhpcy5faGlzdG9ncmFtLnJlc2V0KCk7XG4gICAgICAgIH0sIFtkZWxheU1pbiwgZGVsYXlNYXgsIGRlbGF5TWVhbiwgZGVsYXlTdGRkZXYsIGRlbGF5cDUwLCBkZWxheXA5MCwgZGVsYXlwOTldKTtcbiAgICB9XG4gICAgaW50ZXJuYWxFbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2hpc3RvZ3JhbS5lbmFibGUoKTtcbiAgICB9XG4gICAgaW50ZXJuYWxEaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9oaXN0b2dyYW0uZGlzYWJsZSgpO1xuICAgIH1cbiAgICBzY3JhcGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW46IHRoaXMuY2hlY2tOYW4odGhpcy5faGlzdG9ncmFtLm1pbiAvIDFlOSksXG4gICAgICAgICAgICBtYXg6IHRoaXMuY2hlY2tOYW4odGhpcy5faGlzdG9ncmFtLm1heCAvIDFlOSksXG4gICAgICAgICAgICBtZWFuOiB0aGlzLmNoZWNrTmFuKHRoaXMuX2hpc3RvZ3JhbS5tZWFuIC8gMWU5KSxcbiAgICAgICAgICAgIHN0ZGRldjogdGhpcy5jaGVja05hbih0aGlzLl9oaXN0b2dyYW0uc3RkZGV2IC8gMWU5KSxcbiAgICAgICAgICAgIHA1MDogdGhpcy5jaGVja05hbih0aGlzLl9oaXN0b2dyYW0ucGVyY2VudGlsZSg1MCkgLyAxZTkpLFxuICAgICAgICAgICAgcDkwOiB0aGlzLmNoZWNrTmFuKHRoaXMuX2hpc3RvZ3JhbS5wZXJjZW50aWxlKDkwKSAvIDFlOSksXG4gICAgICAgICAgICBwOTk6IHRoaXMuY2hlY2tOYW4odGhpcy5faGlzdG9ncmFtLnBlcmNlbnRpbGUoOTkpIC8gMWU5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tOYW4odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/IDAgOiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLkV2ZW50TG9vcERlbGF5Q29sbGVjdG9yID0gRXZlbnRMb29wRGVsYXlDb2xsZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ldmVudExvb3BEZWxheUNvbGxlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR0NDb2xsZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBwZXJmX2hvb2tzID0gcmVxdWlyZShcIm5vZGU6cGVyZl9ob29rc1wiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGJhc2VDb2xsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL2Jhc2VDb2xsZWN0b3JcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IERFRkFVTFRfR0NfRFVSQVRJT05fQlVDS0VUUyA9IFswLjAxLCAwLjEsIDEsIDEwXTtcbmNvbnN0IGtpbmRzID0gW107XG5raW5kc1twZXJmX2hvb2tzLmNvbnN0YW50cy5OT0RFX1BFUkZPUk1BTkNFX0dDX01BSk9SXSA9ICdtYWpvcic7XG5raW5kc1twZXJmX2hvb2tzLmNvbnN0YW50cy5OT0RFX1BFUkZPUk1BTkNFX0dDX01JTk9SXSA9ICdtaW5vcic7XG5raW5kc1twZXJmX2hvb2tzLmNvbnN0YW50cy5OT0RFX1BFUkZPUk1BTkNFX0dDX0lOQ1JFTUVOVEFMXSA9ICdpbmNyZW1lbnRhbCc7XG5raW5kc1twZXJmX2hvb2tzLmNvbnN0YW50cy5OT0RFX1BFUkZPUk1BTkNFX0dDX1dFQUtDQl0gPSAnd2Vha2NiJztcbmNsYXNzIEdDQ29sbGVjdG9yIGV4dGVuZHMgYmFzZUNvbGxlY3Rvcl8xLkJhc2VDb2xsZWN0b3Ige1xuICAgIF9nY0R1cmF0aW9uQnlLaW5kSGlzdG9ncmFtO1xuICAgIF9vYnNlcnZlcjtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcihjb25maWcpO1xuICAgICAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBwZXJmX2hvb2tzLlBlcmZvcm1hbmNlT2JzZXJ2ZXIobGlzdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZy5lbmFibGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gbGlzdC5nZXRFbnRyaWVzKClbMF07XG4gICAgICAgICAgICAvLyBOb2RlIDwgMTYgdXNlcyBlbnRyeS5raW5kXG4gICAgICAgICAgICAvLyBOb2RlID49IDE2IHVzZXMgZW50cnkuZGV0YWlsLmtpbmRcbiAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0LXYxNi54L2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDE1Ml9leHRlbnNpb25fcGVyZm9ybWFuY2VlbnRyeV9wcm9wZXJ0aWVzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3Qga2luZCA9IGVudHJ5LmRldGFpbCA/IGtpbmRzW2VudHJ5LmRldGFpbC5raW5kXSA6IGtpbmRzW2VudHJ5LmtpbmRdO1xuICAgICAgICAgICAgdGhpcy5fZ2NEdXJhdGlvbkJ5S2luZEhpc3RvZ3JhbT8ucmVjb3JkKGVudHJ5LmR1cmF0aW9uIC8gMTAwMCwge1xuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9WOEpTX0dDX1RZUEVdOiBraW5kLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1cGRhdGVNZXRyaWNJbnN0cnVtZW50cyhtZXRlcikge1xuICAgICAgICB0aGlzLl9nY0R1cmF0aW9uQnlLaW5kSGlzdG9ncmFtID0gbWV0ZXIuY3JlYXRlSGlzdG9ncmFtKHNlbWNvbnZfMS5NRVRSSUNfVjhKU19HQ19EVVJBVElPTiwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHYXJiYWdlIGNvbGxlY3Rpb24gZHVyYXRpb24gYnkga2luZCwgb25lIG9mIG1ham9yLCBtaW5vciwgaW5jcmVtZW50YWwgb3Igd2Vha2NiLicsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGFwaV8xLlZhbHVlVHlwZS5ET1VCTEUsXG4gICAgICAgICAgICBhZHZpY2U6IHtcbiAgICAgICAgICAgICAgICBleHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXM6IERFRkFVTFRfR0NfRFVSQVRJT05fQlVDS0VUUyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbnRlcm5hbEVuYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh7IGVudHJ5VHlwZXM6IFsnZ2MnXSB9KTtcbiAgICB9XG4gICAgaW50ZXJuYWxEaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxufVxuZXhwb3J0cy5HQ0NvbGxlY3RvciA9IEdDQ29sbGVjdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2NDb2xsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhlYXBTcGFjZXNTaXplQW5kVXNlZENvbGxlY3RvciA9IHZvaWQgMDtcbmNvbnN0IHY4ID0gcmVxdWlyZShcIm5vZGU6djhcIik7XG5jb25zdCBiYXNlQ29sbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9iYXNlQ29sbGVjdG9yXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jbGFzcyBIZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3IgZXh0ZW5kcyBiYXNlQ29sbGVjdG9yXzEuQmFzZUNvbGxlY3RvciB7XG4gICAgdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMobWV0ZXIpIHtcbiAgICAgICAgY29uc3QgaGVhcExpbWl0ID0gbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKHNlbWNvbnZfMS5NRVRSSUNfVjhKU19NRU1PUllfSEVBUF9MSU1JVCwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBoZWFwIG1lbW9yeSBzaXplIHByZS1hbGxvY2F0ZWQuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdCeScsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBoZWFwU3BhY2VVc2VkID0gbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKHNlbWNvbnZfMS5NRVRSSUNfVjhKU19NRU1PUllfSEVBUF9VU0VELCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hlYXAgTWVtb3J5IHNpemUgYWxsb2NhdGVkLicsXG4gICAgICAgICAgICB1bml0OiAnQnknLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaGVhcFNwYWNlQXZhaWxhYmxlID0gbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKFxuICAgICAgICAvLyBUT0RPOiBVc2UgTUVUUklDX1Y4SlNfTUVNT1JZX0hFQVBfU1BBQ0VfQVZBSUxBQkxFX1NJWkUgd2hlbiBhdmFpbGFibGUgaW4gc2VtY29udiB2MS4zOC4wXG4gICAgICAgICd2OGpzLm1lbW9yeS5oZWFwLnNwYWNlLmF2YWlsYWJsZV9zaXplJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdIZWFwIHNwYWNlIGF2YWlsYWJsZSBzaXplLicsXG4gICAgICAgICAgICB1bml0OiAnQnknLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaGVhcFNwYWNlUGh5c2ljYWwgPSBtZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2UoXG4gICAgICAgIC8vIFRPRE86IFVzZSBNRVRSSUNfVjhKU19NRU1PUllfSEVBUF9TUEFDRV9QSFlTSUNBTF9TSVpFIHdoZW4gYXZhaWxhYmxlIGluIHNlbWNvbnYgdjEuMzguMFxuICAgICAgICAndjhqcy5tZW1vcnkuaGVhcC5zcGFjZS5waHlzaWNhbF9zaXplJywge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb21taXR0ZWQgc2l6ZSBvZiBhIGhlYXAgc3BhY2UuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdCeScsXG4gICAgICAgIH0pO1xuICAgICAgICBtZXRlci5hZGRCYXRjaE9ic2VydmFibGVDYWxsYmFjayhvYnNlcnZhYmxlUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29uZmlnLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2NyYXBlKCk7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3BhY2Ugb2YgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYWNlTmFtZSA9IHNwYWNlLnNwYWNlX25hbWU7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKGhlYXBMaW1pdCwgc3BhY2Uuc3BhY2Vfc2l6ZSwge1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfVjhKU19IRUFQX1NQQUNFX05BTUVdOiBzcGFjZU5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKGhlYXBTcGFjZVVzZWQsIHNwYWNlLnNwYWNlX3VzZWRfc2l6ZSwge1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfVjhKU19IRUFQX1NQQUNFX05BTUVdOiBzcGFjZU5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKGhlYXBTcGFjZUF2YWlsYWJsZSwgc3BhY2Uuc3BhY2VfYXZhaWxhYmxlX3NpemUsIHtcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1Y4SlNfSEVBUF9TUEFDRV9OQU1FXTogc3BhY2VOYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZShoZWFwU3BhY2VQaHlzaWNhbCwgc3BhY2UucGh5c2ljYWxfc3BhY2Vfc2l6ZSwge1xuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfVjhKU19IRUFQX1NQQUNFX05BTUVdOiBzcGFjZU5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtoZWFwTGltaXQsIGhlYXBTcGFjZVVzZWQsIGhlYXBTcGFjZUF2YWlsYWJsZSwgaGVhcFNwYWNlUGh5c2ljYWxdKTtcbiAgICB9XG4gICAgaW50ZXJuYWxFbmFibGUoKSB7IH1cbiAgICBpbnRlcm5hbERpc2FibGUoKSB7IH1cbiAgICBzY3JhcGUoKSB7XG4gICAgICAgIHJldHVybiB2OC5nZXRIZWFwU3BhY2VTdGF0aXN0aWNzKCk7XG4gICAgfVxufVxuZXhwb3J0cy5IZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3IgPSBIZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV2ZW50TG9vcFRpbWVDb2xsZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBub2RlX3BlcmZfaG9va3NfMSA9IHJlcXVpcmUoXCJub2RlOnBlcmZfaG9va3NcIik7XG5jb25zdCBiYXNlQ29sbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9iYXNlQ29sbGVjdG9yXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCB7IGV2ZW50TG9vcFV0aWxpemF0aW9uOiBldmVudExvb3BVdGlsaXphdGlvbkNvbGxlY3RvciB9ID0gbm9kZV9wZXJmX2hvb2tzXzEucGVyZm9ybWFuY2U7XG5jbGFzcyBFdmVudExvb3BUaW1lQ29sbGVjdG9yIGV4dGVuZHMgYmFzZUNvbGxlY3Rvcl8xLkJhc2VDb2xsZWN0b3Ige1xuICAgIHVwZGF0ZU1ldHJpY0luc3RydW1lbnRzKG1ldGVyKSB7XG4gICAgICAgIGNvbnN0IHRpbWVDb3VudGVyID0gbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUNvdW50ZXIoc2VtY29udl8xLk1FVFJJQ19OT0RFSlNfRVZFTlRMT09QX1RJTUUsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ3VtdWxhdGl2ZSBkdXJhdGlvbiBvZiB0aW1lIHRoZSBldmVudCBsb29wIGhhcyBiZWVuIGluIGVhY2ggc3RhdGUuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIG1ldGVyLmFkZEJhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrKGFzeW5jIChvYnNlcnZhYmxlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZy5lbmFibGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNjcmFwZSgpO1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGltZUNvdW50ZXIsIGRhdGEuYWN0aXZlIC8gMTAwMCwge1xuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9OT0RFSlNfRVZFTlRMT09QX1NUQVRFXTogc2VtY29udl8xLk5PREVKU19FVkVOVExPT1BfU1RBVEVfVkFMVUVfQUNUSVZFLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGltZUNvdW50ZXIsIGRhdGEuaWRsZSAvIDEwMDAsIHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTk9ERUpTX0VWRU5UTE9PUF9TVEFURV06IHNlbWNvbnZfMS5OT0RFSlNfRVZFTlRMT09QX1NUQVRFX1ZBTFVFX0lETEUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgW3RpbWVDb3VudGVyXSk7XG4gICAgfVxuICAgIGludGVybmFsRGlzYWJsZSgpIHsgfVxuICAgIGludGVybmFsRW5hYmxlKCkgeyB9XG4gICAgc2NyYXBlKCkge1xuICAgICAgICByZXR1cm4gZXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3IoKTtcbiAgICB9XG59XG5leHBvcnRzLkV2ZW50TG9vcFRpbWVDb2xsZWN0b3IgPSBFdmVudExvb3BUaW1lQ29sbGVjdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnRMb29wVGltZUNvbGxlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuMjEuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcnVudGltZS1ub2RlJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUnVudGltZU5vZGVJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3QgZXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL21ldHJpY3MvZXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3JcIik7XG5jb25zdCBldmVudExvb3BEZWxheUNvbGxlY3Rvcl8xID0gcmVxdWlyZShcIi4vbWV0cmljcy9ldmVudExvb3BEZWxheUNvbGxlY3RvclwiKTtcbmNvbnN0IGdjQ29sbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9tZXRyaWNzL2djQ29sbGVjdG9yXCIpO1xuY29uc3QgaGVhcFNwYWNlc1NpemVBbmRVc2VkQ29sbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9tZXRyaWNzL2hlYXBTcGFjZXNTaXplQW5kVXNlZENvbGxlY3RvclwiKTtcbmNvbnN0IGV2ZW50TG9vcFRpbWVDb2xsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL21ldHJpY3MvZXZlbnRMb29wVGltZUNvbGxlY3RvclwiKTtcbi8qKiBAa25pcGlnbm9yZSAqL1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge1xuICAgIG1vbml0b3JpbmdQcmVjaXNpb246IDEwLFxufTtcbmNsYXNzIFJ1bnRpbWVOb2RlSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgX2NvbGxlY3RvcnMgPSBbXTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRywgY29uZmlnKSk7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RvcnMgPSBbXG4gICAgICAgICAgICBuZXcgZXZlbnRMb29wVXRpbGl6YXRpb25Db2xsZWN0b3JfMS5FdmVudExvb3BVdGlsaXphdGlvbkNvbGxlY3Rvcih0aGlzLl9jb25maWcpLFxuICAgICAgICAgICAgbmV3IGV2ZW50TG9vcFRpbWVDb2xsZWN0b3JfMS5FdmVudExvb3BUaW1lQ29sbGVjdG9yKHRoaXMuX2NvbmZpZyksXG4gICAgICAgICAgICBuZXcgZXZlbnRMb29wRGVsYXlDb2xsZWN0b3JfMS5FdmVudExvb3BEZWxheUNvbGxlY3Rvcih0aGlzLl9jb25maWcpLFxuICAgICAgICAgICAgbmV3IGdjQ29sbGVjdG9yXzEuR0NDb2xsZWN0b3IodGhpcy5fY29uZmlnKSxcbiAgICAgICAgICAgIG5ldyBoZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3JfMS5IZWFwU3BhY2VzU2l6ZUFuZFVzZWRDb2xsZWN0b3IodGhpcy5fY29uZmlnKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5lbmFibGVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3RvciBvZiB0aGlzLl9jb2xsZWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdG9yLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxlZCB3aGVuIGEgbmV3IGBNZXRlclByb3ZpZGVyYCBpcyBzZXRcbiAgICAvLyB0aGUgTWV0ZXIgKHJlc3VsdCBvZiBAb3BlbnRlbGVtZXRyeS9hcGkncyBnZXRNZXRlcikgaXMgYXZhaWxhYmxlIGFzIHRoaXMubWV0ZXIgd2l0aGluIHRoaXMgbWV0aG9kXG4gICAgX3VwZGF0ZU1ldHJpY0luc3RydW1lbnRzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3RvcnMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgY29sbGVjdG9yIG9mIHRoaXMuX2NvbGxlY3RvcnMpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rvci51cGRhdGVNZXRyaWNJbnN0cnVtZW50cyh0aGlzLm1ldGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICAvLyBOb3QgaW5zdHJ1bWVudGluZyBvciBwYXRjaGluZyBhIE5vZGUuanMgbW9kdWxlXG4gICAgfVxuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgc3VwZXIuZW5hYmxlKCk7XG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdG9ycylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0b3Igb2YgdGhpcy5fY29sbGVjdG9ycykge1xuICAgICAgICAgICAgY29sbGVjdG9yLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHN1cGVyLmRpc2FibGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0b3Igb2YgdGhpcy5fY29sbGVjdG9ycykge1xuICAgICAgICAgICAgY29sbGVjdG9yLmRpc2FibGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUnVudGltZU5vZGVJbnN0cnVtZW50YXRpb24gPSBSdW50aW1lTm9kZUluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUnVudGltZU5vZGVJbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG52YXIgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSdW50aW1lTm9kZUluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5zdHJ1bWVudGF0aW9uXzEuUnVudGltZU5vZGVJbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfU1lTVEVNID0gZXhwb3J0cy5BVFRSX01FU1NBR0lOR19PUEVSQVRJT04gPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhhbXBsZSBwdWJsaXNoXG4gKiBAZXhhbXBsZSBjcmVhdGVcbiAqIEBleGFtcGxlIHByb2Nlc3NcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZWAuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfT1BFUkFUSU9OID0gJ21lc3NhZ2luZy5vcGVyYXRpb24nO1xuLyoqXG4gKiBUaGUgbWVzc2FnaW5nIHN5c3RlbSBhcyBpZGVudGlmaWVkIGJ5IHRoZSBjbGllbnQgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIEBub3RlIFRoZSBhY3R1YWwgbWVzc2FnaW5nIHN5c3RlbSBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSBrbm93biBieSB0aGUgY2xpZW50LiBGb3IgZXhhbXBsZSwgd2hlbiB1c2luZyBLYWZrYSBjbGllbnQgbGlicmFyaWVzIHRvIGNvbW11bmljYXRlIHdpdGggQXp1cmUgRXZlbnQgSHVicywgdGhlIGBtZXNzYWdpbmcuc3lzdGVtYCBpcyBzZXQgdG8gYGthZmthYCBiYXNlZCBvbiB0aGUgaW5zdHJ1bWVudGF0aW9uJ3MgYmVzdCBrbm93bGVkZ2UuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfTUVTU0FHSU5HX1NZU1RFTSA9ICdtZXNzYWdpbmcuc3lzdGVtJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EX1ZBTFVFX1RPUElDID0gZXhwb3J0cy5NRVNTQUdJTkdfT1BFUkFUSU9OX1ZBTFVFX1JFQ0VJVkUgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkQgPSBleHBvcnRzLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBjb25zdGFudHMgZm9yIHZhbHVlcyB0aGF0IHdoZXJlIHJlcGxhY2VkL3JlbW92ZWQgZnJvbVxuICogU2VtYW50aWMgQ29udmVudGlvbnMgbG9uZyBlbm91Z2ggYWdvIHRoYXQgdGhleSBkbyBub3QgaGF2ZSBgQVRUUl8qYFxuICogY29uc3RhbnRzIGluIHRoZSBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgIHBhY2thZ2UuIEV2ZW50dWFsbHlcbiAqIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBpbnN0cnVtZW50aW9uIHdpbGwgYmUgdXBkYXRlZCB0byBlbWl0IHRlbGVtZXRyeVxuICogdXNpbmcgbW9kZXJuIFNlbWFudGljIENvbnZlbnRpb25zLCBkcm9wcGluZyB0aGUgbmVlZCBmb3IgdGhlIGNvbnN0YW50cyBpblxuICogdGhpcyBmaWxlLlxuICovXG4vKipcbiAqIFRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIG5hbWUuIFRoaXMgbWlnaHQgYmUgZXF1YWwgdG8gdGhlIHNwYW4gbmFtZSBidXQgaXMgcmVxdWlyZWQgbmV2ZXJ0aGVsZXNzLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBBVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9OQU1FIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT04gPSAnbWVzc2FnaW5nLmRlc3RpbmF0aW9uJztcbi8qKlxuICogVGhlIGtpbmQgb2YgbWVzc2FnZSBkZXN0aW5hdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZW1vdmVkIGluIHNlbWNvbnYgdjEuMjAuMC5cbiAqL1xuZXhwb3J0cy5BVFRSX01FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EID0gJ21lc3NhZ2luZy5kZXN0aW5hdGlvbl9raW5kJztcbi8qKlxuICogQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGtpbmQgb2YgbWVzc2FnZSBjb25zdW1wdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBbT3BlcmF0aW9uIG5hbWVzXSgjb3BlcmF0aW9uLW5hbWVzKSBzZWN0aW9uIGFib3ZlLiBJZiB0aGUgb3BlcmF0aW9uIGlzICYjMzQ7c2VuZCYjMzQ7LCB0aGlzIGF0dHJpYnV0ZSBNVVNUIE5PVCBiZSBzZXQsIHNpbmNlIHRoZSBvcGVyYXRpb24gY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIHNwYW4ga2luZCBpbiB0aGF0IGNhc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIE1FU1NBR0lOR19PUEVSQVRJT05fVFlQRV9WQUxVRV9SRUNFSVZFIGluIFtpbmN1YmF0aW5nIGVudHJ5LXBvaW50XSh7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvYmxvYi9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zL1JFQURNRS5tZCN1bnN0YWJsZS1zZW1jb252fSkuXG4gKi9cbmV4cG9ydHMuTUVTU0FHSU5HX09QRVJBVElPTl9WQUxVRV9SRUNFSVZFID0gJ3JlY2VpdmUnO1xuLyoqXG4gKiBUaGUga2luZCBvZiBtZXNzYWdlIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlbW92ZWQgaW4gc2VtY29udiB2MS4yMC4wLlxuICovXG5leHBvcnRzLk1FU1NBR0lOR19ERVNUSU5BVElPTl9LSU5EX1ZBTFVFX1RPUElDID0gJ3RvcGljJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYtb2Jzb2xldGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU29ja2V0SW9JbnN0cnVtZW50YXRpb25BdHRyaWJ1dGVzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmV4cG9ydHMuU29ja2V0SW9JbnN0cnVtZW50YXRpb25BdHRyaWJ1dGVzID0ge1xuICAgIFNPQ0tFVF9JT19ST09NUzogJ21lc3NhZ2luZy5zb2NrZXQuaW8ucm9vbXMnLFxuICAgIFNPQ0tFVF9JT19OQU1FU1BBQ0U6ICdtZXNzYWdpbmcuc29ja2V0LmlvLm5hbWVzcGFjZScsXG4gICAgU09DS0VUX0lPX0VWRU5UX05BTUU6ICdtZXNzYWdpbmcuc29ja2V0LmlvLmV2ZW50X25hbWUnLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSBleHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSAnMC41NC4wJztcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1zb2NrZXQuaW8nO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRyYWN0Um9vbXNBdHRyaWJ1dGVWYWx1ZSA9IGV4cG9ydHMubm9ybWFsaXplQ29uZmlnID0gZXhwb3J0cy5pc1Byb21pc2UgPSB2b2lkIDA7XG5jb25zdCBpc1Byb21pc2UgPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlPy50aGVuID09PSAnZnVuY3Rpb24nO1xufTtcbmV4cG9ydHMuaXNQcm9taXNlID0gaXNQcm9taXNlO1xuY29uc3Qgbm9ybWFsaXplQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5lbWl0SWdub3JlRXZlbnRMaXN0KSkge1xuICAgICAgICBjb25maWcuZW1pdElnbm9yZUV2ZW50TGlzdCA9IFtdO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLm9uSWdub3JlRXZlbnRMaXN0KSkge1xuICAgICAgICBjb25maWcub25JZ25vcmVFdmVudExpc3QgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn07XG5leHBvcnRzLm5vcm1hbGl6ZUNvbmZpZyA9IG5vcm1hbGl6ZUNvbmZpZztcbmNvbnN0IGV4dHJhY3RSb29tc0F0dHJpYnV0ZVZhbHVlID0gKHNlbGYpID0+IHtcbiAgICBsZXQgcm9vbXMgPSBzZWxmLnJvb21zIHx8XG4gICAgICAgIHNlbGYuX3Jvb21zIHx8XG4gICAgICAgIHNlbGYuc29ja2V0cz8uX3Jvb21zIHx8XG4gICAgICAgIHNlbGYuc29ja2V0cz8ucm9vbXMgfHxcbiAgICAgICAgW107XG4gICAgLy8gU29tZSBvZiB0aGUgYXR0cmlidXRlcyBhYm92ZSBhcmUgb2YgU2V0IHR5cGUuIENvbnZlcnQgaXQuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJvb21zKSkge1xuICAgICAgICByb29tcyA9IEFycmF5LmZyb20ocm9vbXMpO1xuICAgIH1cbiAgICAvLyBvbmx5IGZvciB2MjogdGhpcy5pZCBpcyBvbmx5IHNldCBmb3IgdjIuIFRoYXQncyB0byBtaW1pYyBsYXRlciB2ZXJzaW9ucyB3aGljaCBoYXZlIHRoaXMuaWQgaW4gdGhlIHJvb21zIFNldC5cbiAgICBpZiAocm9vbXMubGVuZ3RoID09PSAwICYmIHNlbGYuaWQpIHtcbiAgICAgICAgcm9vbXMucHVzaChzZWxmLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb21zO1xufTtcbmV4cG9ydHMuZXh0cmFjdFJvb21zQXR0cmlidXRlVmFsdWUgPSBleHRyYWN0Um9vbXNBdHRyaWJ1dGVWYWx1ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCBzZW1jb252X29ic29sZXRlXzEgPSByZXF1aXJlKFwiLi9zZW1jb252LW9ic29sZXRlXCIpO1xuY29uc3QgQXR0cmlidXRlTmFtZXNfMSA9IHJlcXVpcmUoXCIuL0F0dHJpYnV0ZU5hbWVzXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY29uc3QgcmVzZXJ2ZWRFdmVudHMgPSBbXG4gICAgJ2Nvbm5lY3QnLFxuICAgICdjb25uZWN0X2Vycm9yJyxcbiAgICAnZGlzY29ubmVjdCcsXG4gICAgJ2Rpc2Nvbm5lY3RpbmcnLFxuICAgICduZXdMaXN0ZW5lcicsXG4gICAgJ3JlbW92ZUxpc3RlbmVyJyxcbl07XG5jbGFzcyBTb2NrZXRJb0luc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sICgwLCB1dGlsc18xLm5vcm1hbGl6ZUNvbmZpZykoY29uZmlnKSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHNvY2tldEluc3RydW1lbnRhdGlvbiA9IG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnc29ja2V0LmlvL2Rpc3Qvc29ja2V0LmpzJywgWyc+PTMgPDUnXSwgKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQgfHwgbW9kdWxlRXhwb3J0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vZHVsZVZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHM/LlNvY2tldD8ucHJvdG90eXBlPy5vbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5Tb2NrZXQucHJvdG90eXBlLCAnb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5Tb2NrZXQucHJvdG90eXBlLCAnb24nLCB0aGlzLl9wYXRjaE9uKG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5Tb2NrZXQ/LnByb3RvdHlwZT8uZW1pdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5Tb2NrZXQucHJvdG90eXBlLCAnZW1pdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlNvY2tldC5wcm90b3R5cGUsICdlbWl0JywgdGhpcy5fcGF0Y2hFbWl0KG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5Tb2NrZXQ/LnByb3RvdHlwZT8ub24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuU29ja2V0LnByb3RvdHlwZSwgJ29uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cz8uU29ja2V0Py5wcm90b3R5cGU/LmVtaXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuU29ja2V0LnByb3RvdHlwZSwgJ2VtaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYnJvYWRjYXN0T3BlcmF0b3JJbnN0cnVtZW50YXRpb24gPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ3NvY2tldC5pby9kaXN0L2Jyb2FkY2FzdC1vcGVyYXRvci5qcycsIFsnPj00IDw1J10sIChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkIHx8IG1vZHVsZUV4cG9ydHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb2R1bGVWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5Ccm9hZGNhc3RPcGVyYXRvcj8ucHJvdG90eXBlPy5lbWl0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkJyb2FkY2FzdE9wZXJhdG9yLnByb3RvdHlwZSwgJ2VtaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5Ccm9hZGNhc3RPcGVyYXRvci5wcm90b3R5cGUsICdlbWl0JywgdGhpcy5fcGF0Y2hFbWl0KG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5Ccm9hZGNhc3RPcGVyYXRvcj8ucHJvdG90eXBlPy5lbWl0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkJyb2FkY2FzdE9wZXJhdG9yLnByb3RvdHlwZSwgJ2VtaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlSW5zdHJ1bWVudGF0aW9uID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdzb2NrZXQuaW8vZGlzdC9uYW1lc3BhY2UuanMnLCBbJzw0J10sIChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkIHx8IG1vZHVsZUV4cG9ydHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb2R1bGVWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5OYW1lc3BhY2U/LnByb3RvdHlwZT8uZW1pdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5OYW1lc3BhY2UucHJvdG90eXBlLCAnZW1pdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLk5hbWVzcGFjZS5wcm90b3R5cGUsICdlbWl0JywgdGhpcy5fcGF0Y2hFbWl0KG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICB9LCBtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5OYW1lc3BhY2U/LnByb3RvdHlwZT8uZW1pdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5OYW1lc3BhY2UucHJvdG90eXBlLCAnZW1pdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc29ja2V0SW5zdHJ1bWVudGF0aW9uTGVnYWN5ID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCdzb2NrZXQuaW8vbGliL3NvY2tldC5qcycsIFsnMiddLCAobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZCB8fCBtb2R1bGVFeHBvcnRzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9kdWxlVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wcm90b3R5cGU/Lm9uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ29uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnb24nLCB0aGlzLl9wYXRjaE9uKG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzLnByb3RvdHlwZT8uZW1pdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdlbWl0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnZW1pdCcsIHRoaXMuX3BhdGNoRW1pdChtb2R1bGVWZXJzaW9uKSk7XG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgfSwgbW9kdWxlRXhwb3J0cyA9PiB7XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wcm90b3R5cGU/Lm9uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ29uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cy5wcm90b3R5cGU/LmVtaXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnZW1pdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VJbnN0cnVtZW50YXRpb25MZWdhY3kgPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGUoJ3NvY2tldC5pby9saWIvbmFtZXNwYWNlLmpzJywgWycyJ10sIChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cyA9PT0gdW5kZWZpbmVkIHx8IG1vZHVsZUV4cG9ydHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb2R1bGVWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5wcm90b3R5cGU/LmVtaXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnZW1pdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ2VtaXQnLCB0aGlzLl9wYXRjaEVtaXQobW9kdWxlVmVyc2lvbikpO1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHM/LnByb3RvdHlwZT8uZW1pdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdlbWl0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCdzb2NrZXQuaW8nLCBbJz49MyA8NSddLCAobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQgfHwgbW9kdWxlRXhwb3J0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZVZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHM/LlNlcnZlcj8ucHJvdG90eXBlPy5vbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuU2VydmVyLnByb3RvdHlwZSwgJ29uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5TZXJ2ZXIucHJvdG90eXBlLCAnb24nLCB0aGlzLl9wYXRjaE9uKG1vZHVsZVZlcnNpb24pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShtb2R1bGVFeHBvcnRzPy5TZXJ2ZXI/LnByb3RvdHlwZT8ub24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLlNlcnZlci5wcm90b3R5cGUsICdvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICBicm9hZGNhc3RPcGVyYXRvckluc3RydW1lbnRhdGlvbixcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VJbnN0cnVtZW50YXRpb24sXG4gICAgICAgICAgICAgICAgc29ja2V0SW5zdHJ1bWVudGF0aW9uLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ3NvY2tldC5pbycsIFsnMiddLCAobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVFeHBvcnRzID09PSB1bmRlZmluZWQgfHwgbW9kdWxlRXhwb3J0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZVZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKG1vZHVsZUV4cG9ydHM/LnByb3RvdHlwZT8ub24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLnByb3RvdHlwZSwgJ29uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5wcm90b3R5cGUsICdvbicsIHRoaXMuX3BhdGNoT24obW9kdWxlVmVyc2lvbikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgICAgICAgICAgfSwgKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0cz8ucHJvdG90eXBlPy5vbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMucHJvdG90eXBlLCAnb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgICAgICAgICB9LCBbbmFtZXNwYWNlSW5zdHJ1bWVudGF0aW9uTGVnYWN5LCBzb2NrZXRJbnN0cnVtZW50YXRpb25MZWdhY3ldKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBzdXBlci5zZXRDb25maWcoKDAsIHV0aWxzXzEubm9ybWFsaXplQ29uZmlnKShjb25maWcpKTtcbiAgICB9XG4gICAgX3BhdGNoT24obW9kdWxlVmVyc2lvbikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldiwgb3JpZ2luYWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5nZXRDb25maWcoKS50cmFjZVJlc2VydmVkICYmIHJlc2VydmVkRXZlbnRzLmluY2x1ZGVzKGV2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuZ2V0Q29uZmlnKCkub25JZ25vcmVFdmVudExpc3Q/LmluY2x1ZGVzKGV2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gZXY7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZSB8fCB0aGlzLmFkYXB0ZXI/Lm5zcD8ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHNlbGYudHJhY2VyLnN0YXJ0U3BhbihgJHtzZW1jb252X29ic29sZXRlXzEuTUVTU0FHSU5HX09QRVJBVElPTl9WQUxVRV9SRUNFSVZFfSAke25hbWVzcGFjZX1gLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiBhcGlfMS5TcGFuS2luZC5DT05TVU1FUixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTUVTU0FHSU5HX1NZU1RFTV06ICdzb2NrZXQuaW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05dOiBuYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX01FU1NBR0lOR19PUEVSQVRJT05dOiBzZW1jb252X29ic29sZXRlXzEuTUVTU0FHSU5HX09QRVJBVElPTl9WQUxVRV9SRUNFSVZFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uQXR0cmlidXRlcy5TT0NLRVRfSU9fRVZFTlRfTkFNRV06IGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG9uSG9vayB9ID0gc2VsZi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uSG9vaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IG9uSG9vayhzcGFuLCB7IG1vZHVsZVZlcnNpb24sIHBheWxvYWQ6IGFyZ3MgfSksIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaWFnLmVycm9yKCdvbkhvb2sgZXJyb3InLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgKCkgPT4gc2VsZi5lbmRTcGFuKCgpID0+IG9yaWdpbmFsTGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgc3BhbikpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtldiwgd3JhcHBlZExpc3RlbmVyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbmRTcGFuKHRyYWNlZCwgc3Bhbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdHJhY2VkKCk7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxzXzEuaXNQcm9taXNlKShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3BhdGNoRW1pdChtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2LCAuLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLmdldENvbmZpZygpLnRyYWNlUmVzZXJ2ZWQgJiYgcmVzZXJ2ZWRFdmVudHMuaW5jbHVkZXMoZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5nZXRDb25maWcoKS5lbWl0SWdub3JlRXZlbnRMaXN0Py5pbmNsdWRlcyhldikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2luZ1N5c3RlbSA9ICdzb2NrZXQuaW8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGV2O1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9NRVNTQUdJTkdfU1lTVEVNXTogbWVzc2FnaW5nU3lzdGVtLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl9vYnNvbGV0ZV8xLkFUVFJfTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkRdOiBzZW1jb252X29ic29sZXRlXzEuTUVTU0FHSU5HX0RFU1RJTkFUSU9OX0tJTkRfVkFMVUVfVE9QSUMsXG4gICAgICAgICAgICAgICAgICAgIFtBdHRyaWJ1dGVOYW1lc18xLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uQXR0cmlidXRlcy5TT0NLRVRfSU9fRVZFTlRfTkFNRV06IGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb21zID0gKDAsIHV0aWxzXzEuZXh0cmFjdFJvb21zQXR0cmlidXRlVmFsdWUpKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmIChyb29tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tBdHRyaWJ1dGVOYW1lc18xLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uQXR0cmlidXRlcy5TT0NLRVRfSU9fUk9PTVNdID0gcm9vbXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMubmFtZSB8fCB0aGlzLmFkYXB0ZXI/Lm5zcD8ubmFtZSB8fCB0aGlzLnNvY2tldHM/Lm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW0F0dHJpYnV0ZU5hbWVzXzEuU29ja2V0SW9JbnN0cnVtZW50YXRpb25BdHRyaWJ1dGVzLlNPQ0tFVF9JT19OQU1FU1BBQ0VdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1jb252X29ic29sZXRlXzEuQVRUUl9NRVNTQUdJTkdfREVTVElOQVRJT05dID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gc2VsZi50cmFjZXIuc3RhcnRTcGFuKGBzZW5kICR7bmFtZXNwYWNlfWAsIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogYXBpXzEuU3BhbktpbmQuUFJPRFVDRVIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWl0SG9vayB9ID0gc2VsZi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW1pdEhvb2spIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IGVtaXRIb29rKHNwYW4sIHsgbW9kdWxlVmVyc2lvbiwgcGF5bG9hZDogYXJncyB9KSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaWFnLmVycm9yKCdlbWl0SG9vayBlcnJvcicsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwaV8xLmNvbnRleHQud2l0aChhcGlfMS50cmFjZS5zZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCksIHNwYW4pLCAoKSA9PiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU29ja2V0SW9JbnN0cnVtZW50YXRpb24gPSBTb2NrZXRJb0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvY2tldC5pby5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0U29ja2V0SW9QYXRoID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0U29ja2V0SW9QYXRoID0gJy9zb2NrZXQuaW8vJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTb2NrZXRJb1BhdGggPSBleHBvcnRzLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uQXR0cmlidXRlcyA9IGV4cG9ydHMuU29ja2V0SW9JbnN0cnVtZW50YXRpb24gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHNvY2tldF9pb18xID0gcmVxdWlyZShcIi4vc29ja2V0LmlvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU29ja2V0SW9JbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvY2tldF9pb18xLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xudmFyIEF0dHJpYnV0ZU5hbWVzXzEgPSByZXF1aXJlKFwiLi9BdHRyaWJ1dGVOYW1lc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNvY2tldElvSW5zdHJ1bWVudGF0aW9uQXR0cmlidXRlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXR0cmlidXRlTmFtZXNfMS5Tb2NrZXRJb0luc3RydW1lbnRhdGlvbkF0dHJpYnV0ZXM7IH0gfSk7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFNvY2tldElvUGF0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZXNfMS5kZWZhdWx0U29ja2V0SW9QYXRoOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRCX1NZU1RFTV9WQUxVRV9NU1NRTCA9IGV4cG9ydHMuQVRUUl9ORVRfUEVFUl9QT1JUID0gZXhwb3J0cy5BVFRSX05FVF9QRUVSX05BTUUgPSBleHBvcnRzLkFUVFJfREJfVVNFUiA9IGV4cG9ydHMuQVRUUl9EQl9TWVNURU0gPSBleHBvcnRzLkFUVFJfREJfU1RBVEVNRU5UID0gZXhwb3J0cy5BVFRSX0RCX1NRTF9UQUJMRSA9IGV4cG9ydHMuQVRUUl9EQl9OQU1FID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5uYW1lc3BhY2VgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgY3VzdG9tZXJzXG4gKiBAZXhhbXBsZSBtYWluXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICpcbiAqIEBkZXByZWNhdGVkIFJlcGxhY2VkIGJ5IGBkYi5uYW1lc3BhY2VgLlxuICovXG5leHBvcnRzLkFUVFJfREJfTkFNRSA9ICdkYi5uYW1lJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5jb2xsZWN0aW9uLm5hbWVgIGluc3RlYWQuXG4gKlxuICogQGV4YW1wbGUgXCJteXRhYmxlXCJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLmNvbGxlY3Rpb24ubmFtZWAsIGJ1dCBvbmx5IGlmIG5vdCBleHRyYWN0aW5nIHRoZSB2YWx1ZSBmcm9tIGBkYi5xdWVyeS50ZXh0YC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NRTF9UQUJMRSA9ICdkYi5zcWwudGFibGUnO1xuLyoqXG4gKiBUaGUgZGF0YWJhc2Ugc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIFNFTEVDVCAqIEZST00gd3VzZXJfdGFibGVcbiAqIEBleGFtcGxlIFNFVCBteWtleSBcIld1VmFsdWVcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgZGIucXVlcnkudGV4dGAuXG4gKi9cbmV4cG9ydHMuQVRUUl9EQl9TVEFURU1FTlQgPSAnZGIuc3RhdGVtZW50Jztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBkYi5zeXN0ZW0ubmFtZWAgaW5zdGVhZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYGRiLnN5c3RlbS5uYW1lYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0RCX1NZU1RFTSA9ICdkYi5zeXN0ZW0nO1xuLyoqXG4gKiBEZXByZWNhdGVkLCBubyByZXBsYWNlbWVudCBhdCB0aGlzIHRpbWUuXG4gKlxuICogQGV4YW1wbGUgcmVhZG9ubHlfdXNlclxuICogQGV4YW1wbGUgcmVwb3J0aW5nX3VzZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVtb3ZlZCwgbm8gcmVwbGFjZW1lbnQgYXQgdGhpcyB0aW1lLlxuICovXG5leHBvcnRzLkFUVFJfREJfVVNFUiA9ICdkYi51c2VyJztcbi8qKlxuICogRGVwcmVjYXRlZCwgdXNlIGBzZXJ2ZXIuYWRkcmVzc2Agb24gY2xpZW50IHNwYW5zIGFuZCBgY2xpZW50LmFkZHJlc3NgIG9uIHNlcnZlciBzcGFucy5cbiAqXG4gKiBAZXhhbXBsZSBleGFtcGxlLmNvbVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBSZXBsYWNlZCBieSBgc2VydmVyLmFkZHJlc3NgIG9uIGNsaWVudCBzcGFucyBhbmQgYGNsaWVudC5hZGRyZXNzYCBvbiBzZXJ2ZXIgc3BhbnMuXG4gKi9cbmV4cG9ydHMuQVRUUl9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xuLyoqXG4gKiBEZXByZWNhdGVkLCB1c2UgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICpcbiAqIEBleGFtcGxlIDgwODBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKlxuICogQGRlcHJlY2F0ZWQgUmVwbGFjZWQgYnkgYHNlcnZlci5wb3J0YCBvbiBjbGllbnQgc3BhbnMgYW5kIGBjbGllbnQucG9ydGAgb24gc2VydmVyIHNwYW5zLlxuICovXG5leHBvcnRzLkFUVFJfTkVUX1BFRVJfUE9SVCA9ICduZXQucGVlci5wb3J0Jztcbi8qKlxuICogRW51bSB2YWx1ZSBcIm1zc3FsXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9EQl9TWVNURU19LlxuICpcbiAqIE1pY3Jvc29mdCBTUUwgU2VydmVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5EQl9TWVNURU1fVkFMVUVfTVNTUUwgPSAnbXNzcWwnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub25jZSA9IGV4cG9ydHMuZ2V0U3Bhbk5hbWUgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBzcGFuIG5hbWUgU0hPVUxEIGJlIHNldCB0byBhIGxvdyBjYXJkaW5hbGl0eSB2YWx1ZVxuICogcmVwcmVzZW50aW5nIHRoZSBzdGF0ZW1lbnQgZXhlY3V0ZWQgb24gdGhlIGRhdGFiYXNlLlxuICpcbiAqIEByZXR1cm5zIE9wZXJhdGlvbiBleGVjdXRlZCBvbiBUZWRpb3VzIENvbm5lY3Rpb24uIERvZXMgbm90IG1hcCB0byBTUUwgc3RhdGVtZW50IGluIGFueSB3YXkuXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5OYW1lKG9wZXJhdGlvbiwgZGIsIHNxbCwgYnVsa0xvYWRUYWJsZSkge1xuICAgIGlmIChvcGVyYXRpb24gPT09ICdleGVjQnVsa0xvYWQnICYmIGJ1bGtMb2FkVGFibGUgJiYgZGIpIHtcbiAgICAgICAgcmV0dXJuIGAke29wZXJhdGlvbn0gJHtidWxrTG9hZFRhYmxlfSAke2RifWA7XG4gICAgfVxuICAgIGlmIChvcGVyYXRpb24gPT09ICdjYWxsUHJvY2VkdXJlJykge1xuICAgICAgICAvLyBgc3FsYCByZWZlcnMgdG8gcHJvY2VkdXJlIG5hbWUgd2l0aCBgY2FsbFByb2NlZHVyZWBcbiAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7b3BlcmF0aW9ufSAke3NxbH0gJHtkYn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtvcGVyYXRpb259ICR7c3FsfWA7XG4gICAgfVxuICAgIC8vIGRvIG5vdCB1c2UgYHNxbGAgaW4gZ2VuZXJhbCBjYXNlIGJlY2F1c2Ugb2YgaGlnaC1jYXJkaW5hbGl0eVxuICAgIGlmIChkYikge1xuICAgICAgICByZXR1cm4gYCR7b3BlcmF0aW9ufSAke2RifWA7XG4gICAgfVxuICAgIHJldHVybiBgJHtvcGVyYXRpb259YDtcbn1cbmV4cG9ydHMuZ2V0U3Bhbk5hbWUgPSBnZXRTcGFuTmFtZTtcbmNvbnN0IG9uY2UgPSAoZm4pID0+IHtcbiAgICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChjYWxsZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9O1xufTtcbmV4cG9ydHMub25jZSA9IG9uY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuMjYuMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdGVkaW91cyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZWRpb3VzSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBDVVJSRU5UX0RBVEFCQVNFID0gU3ltYm9sKCdvcGVudGVsZW1ldHJ5Lmluc3RydW1lbnRhdGlvbi10ZWRpb3VzLmN1cnJlbnQtZGF0YWJhc2UnKTtcbmNvbnN0IFBBVENIRURfTUVUSE9EUyA9IFtcbiAgICAnY2FsbFByb2NlZHVyZScsXG4gICAgJ2V4ZWNTcWwnLFxuICAgICdleGVjU3FsQmF0Y2gnLFxuICAgICdleGVjQnVsa0xvYWQnLFxuICAgICdwcmVwYXJlJyxcbiAgICAnZXhlY3V0ZScsXG5dO1xuZnVuY3Rpb24gc2V0RGF0YWJhc2UoZGF0YWJhc2VOYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIENVUlJFTlRfREFUQUJBU0UsIHtcbiAgICAgICAgdmFsdWU6IGRhdGFiYXNlTmFtZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgfSk7XG59XG5jbGFzcyBUZWRpb3VzSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgc3RhdGljIENPTVBPTkVOVCA9ICd0ZWRpb3VzJztcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcih2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FLCB2ZXJzaW9uXzEuUEFDS0FHRV9WRVJTSU9OLCBjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFRlZGlvdXNJbnN0cnVtZW50YXRpb24uQ09NUE9ORU5ULCBbJz49MS4xMS4wIDwyMCddLCAobW9kdWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbm5lY3Rpb25Qcm90b3R5cGUgPSBtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIFBBVENIRURfTUVUSE9EUykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkoQ29ubmVjdGlvblByb3RvdHlwZVttZXRob2RdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKENvbm5lY3Rpb25Qcm90b3R5cGUsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JhcChDb25uZWN0aW9uUHJvdG90eXBlLCBtZXRob2QsIHRoaXMuX3BhdGNoUXVlcnkobWV0aG9kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoMCwgaW5zdHJ1bWVudGF0aW9uXzEuaXNXcmFwcGVkKShDb25uZWN0aW9uUHJvdG90eXBlLmNvbm5lY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChDb25uZWN0aW9uUHJvdG90eXBlLCAnY29ubmVjdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKENvbm5lY3Rpb25Qcm90b3R5cGUsICdjb25uZWN0JywgdGhpcy5fcGF0Y2hDb25uZWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICAgICAgICAgIH0sIChtb2R1bGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbm5lY3Rpb25Qcm90b3R5cGUgPSBtb2R1bGVFeHBvcnRzLkNvbm5lY3Rpb24ucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIFBBVENIRURfTUVUSE9EUykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoQ29ubmVjdGlvblByb3RvdHlwZSwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKENvbm5lY3Rpb25Qcm90b3R5cGUsICdjb25uZWN0Jyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX3BhdGNoQ29ubmVjdChvcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZENvbm5lY3QoKSB7XG4gICAgICAgICAgICBzZXREYXRhYmFzZS5jYWxsKHRoaXMsIHRoaXMuY29uZmlnPy5vcHRpb25zPy5kYXRhYmFzZSk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIGxpc3RlbmVyIGZpcnN0IGluIGNhc2UgaXQncyBhbHJlYWR5IGFkZGVkXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdkYXRhYmFzZUNoYW5nZScsIHNldERhdGFiYXNlKTtcbiAgICAgICAgICAgIHRoaXMub24oJ2RhdGFiYXNlQ2hhbmdlJywgc2V0RGF0YWJhc2UpO1xuICAgICAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZGF0YWJhc2VDaGFuZ2UnLCBzZXREYXRhYmFzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hRdWVyeShvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbE1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGhpc1BsdWdpbiA9IHRoaXM7XG4gICAgICAgICAgICBmdW5jdGlvbiBwYXRjaGVkTWV0aG9kKHJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0IGluc3RhbmNlb2YgZXZlbnRzXzEuRXZlbnRFbWl0dGVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzUGx1Z2luLl9kaWFnLndhcm4oYFVuZXhwZWN0ZWQgaW52b2NhdGlvbiBvZiBwYXRjaGVkICR7b3BlcmF0aW9ufSBtZXRob2QuIFNwYW4gbm90IHJlY29yZGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcHJvY0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgc3RhdGVtZW50Q291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluY3JlbWVudFN0YXRlbWVudENvdW50ID0gKCkgPT4gc3RhdGVtZW50Q291bnQrKztcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNyZW1lbnRQcm9jQ291bnQgPSAoKSA9PiBwcm9jQ291bnQrKztcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhYmFzZU5hbWUgPSB0aGlzW0NVUlJFTlRfREFUQUJBU0VdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNxbCA9IChyZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWlyZWQgZm9yIDwxMS4wLjlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlID09PSAnc3BfcHJlcGFyZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVyc0J5TmFtZT8uc3RtdD8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LnBhcmFtZXRlcnNCeU5hbWUuc3RtdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmU7XG4gICAgICAgICAgICAgICAgfSkocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXNQbHVnaW4udHJhY2VyLnN0YXJ0U3BhbigoMCwgdXRpbHNfMS5nZXRTcGFuTmFtZSkob3BlcmF0aW9uLCBkYXRhYmFzZU5hbWUsIHNxbCwgcmVxdWVzdC50YWJsZSksIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogYXBpLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NZU1RFTV06IHNlbWNvbnZfMS5EQl9TWVNURU1fVkFMVUVfTVNTUUwsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfREJfTkFNRV06IGRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9ORVRfUEVFUl9QT1JUXTogdGhpcy5jb25maWc/Lm9wdGlvbnM/LnBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfTkVUX1BFRVJfTkFNRV06IHRoaXMuY29uZmlnPy5zZXJ2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA+PTQgdXNlcyBgYXV0aGVudGljYXRpb25gIG9iamVjdCwgb2xkZXIgdmVyc2lvbnMganVzdCB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgcGFpclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1VTRVJdOiB0aGlzLmNvbmZpZz8udXNlck5hbWUgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZz8uYXV0aGVudGljYXRpb24/Lm9wdGlvbnM/LnVzZXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0RCX1NUQVRFTUVOVF06IHNxbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9EQl9TUUxfVEFCTEVdOiByZXF1ZXN0LnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFNwYW4gPSAoMCwgdXRpbHNfMS5vbmNlKSgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ2RvbmUnLCBpbmNyZW1lbnRTdGF0ZW1lbnRDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ2RvbmVJblByb2MnLCBpbmNyZW1lbnRTdGF0ZW1lbnRDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ2RvbmVQcm9jJywgaW5jcmVtZW50UHJvY0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlbmRTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZW5kJywgZW5kU3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCd0ZWRpb3VzLnByb2NlZHVyZV9jb3VudCcsIHByb2NDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCd0ZWRpb3VzLnN0YXRlbWVudF9jb3VudCcsIHN0YXRlbWVudENvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFwaS5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbignZG9uZScsIGluY3JlbWVudFN0YXRlbWVudENvdW50KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uKCdkb25lSW5Qcm9jJywgaW5jcmVtZW50U3RhdGVtZW50Q291bnQpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3Qub24oJ2RvbmVQcm9jJywgaW5jcmVtZW50UHJvY0NvdW50KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uY2UoJ2Vycm9yJywgZW5kU3Bhbik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbignZW5kJywgZW5kU3Bhbik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0LmNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX3dyYXAocmVxdWVzdCwgJ2NhbGxiYWNrJywgdGhpc1BsdWdpbi5fcGF0Y2hDYWxsYmFja1F1ZXJ5KGVuZFNwYW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNQbHVnaW4uX2RpYWcuZXJyb3IoJ0V4cGVjdGVkIHJlcXVlc3QuY2FsbGJhY2sgdG8gYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpLmNvbnRleHQud2l0aChhcGkudHJhY2Uuc2V0U3BhbihhcGkuY29udGV4dC5hY3RpdmUoKSwgc3BhbiksIG9yaWdpbmFsTWV0aG9kLCB0aGlzLCAuLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdGNoZWRNZXRob2QsICdsZW5ndGgnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG9yaWdpbmFsTWV0aG9kLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXRjaGVkTWV0aG9kO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGF0Y2hDYWxsYmFja1F1ZXJ5KGVuZFNwYW4pIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbENhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgcm93Q291bnQsIHJvd3MpIHtcbiAgICAgICAgICAgICAgICBlbmRTcGFuKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5UZWRpb3VzSW5zdHJ1bWVudGF0aW9uID0gVGVkaW91c0luc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVkaW91c0luc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRlZGlvdXNJbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLlRlZGlvdXNJbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuMTguMCc7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdW5kaWNpJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVW5kaWNpSW5zdHJ1bWVudGF0aW9uID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGRpYWdjaCA9IHJlcXVpcmUoXCJkaWFnbm9zdGljc19jaGFubmVsXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuLyoqIEBrbmlwaWdub3JlICovXG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuLy8gQSBjb21iaW5hdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tYWdlbnQtbm9kZWpzIGFuZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dhZGdldC1pbmMvb3BlbnRlbGVtZXRyeS1pbnN0cnVtZW50YXRpb25zL2Jsb2IvbWFpbi9wYWNrYWdlcy9vcGVudGVsZW1ldHJ5LWluc3RydW1lbnRhdGlvbi11bmRpY2kvc3JjL2luZGV4LnRzXG5jbGFzcyBVbmRpY2lJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBfcmVjb3JkRnJvbVJlcSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIodmVyc2lvbl8xLlBBQ0tBR0VfTkFNRSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTiwgY29uZmlnKTtcbiAgICB9XG4gICAgLy8gTm8gbmVlZCB0byBpbnN0cnVtZW50IGZpbGVzL21vZHVsZXNcbiAgICBpbml0KCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBzdXBlci5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxTdWJzLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbFN1YnMubGVuZ3RoID0gMDtcbiAgICB9XG4gICAgZW5hYmxlKCkge1xuICAgICAgICAvLyBcImVuYWJsZWRcIiBoYW5kbGluZyBpcyBjdXJyZW50bHkgYSBiaXQgbWVzc3kgd2l0aCBJbnN0cnVtZW50YXRpb25CYXNlLlxuICAgICAgICAvLyBJZiBjb25zdHJ1Y3RlZCB3aXRoIGB7ZW5hYmxlZDogZmFsc2V9YCwgdGhpcyBgLmVuYWJsZSgpYCBpcyBzdGlsbCBjYWxsZWQsXG4gICAgICAgIC8vIGFuZCBgdGhpcy5nZXRDb25maWcoKS5lbmFibGVkICE9PSB0aGlzLmlzRW5hYmxlZCgpYCwgY3JlYXRpbmcgY29uZnVzaW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBGb3Igbm93LCB0aGlzIGNsYXNzIHdpbGwgc2V0dXAgZm9yIGluc3RydW1lbnRpbmcgaWYgYC5lbmFibGUoKWAgaXNcbiAgICAgICAgLy8gY2FsbGVkLCBidXQgdXNlIGB0aGlzLmdldENvbmZpZygpLmVuYWJsZWRgIHRvIGRldGVybWluZSBpZlxuICAgICAgICAvLyBpbnN0cnVtZW50YXRpb24gc2hvdWxkIGJlIGdlbmVyYXRlZC4gVGhpcyBjb3ZlcnMgdGhlIG1vcmUgbGlrZWx5IGNvbW1vblxuICAgICAgICAvLyBjYXNlIG9mIGNvbmZpZyBiZWluZyBnaXZlbiBhIGNvbnN0cnVjdGlvbiB0aW1lLCByYXRoZXIgdGhhbiBsYXRlciB2aWFcbiAgICAgICAgLy8gYGluc3RhbmNlLmVuYWJsZSgpYCwgYC5kaXNhYmxlKClgLCBvciBgLnNldENvbmZpZygpYCBjYWxscy5cbiAgICAgICAgc3VwZXIuZW5hYmxlKCk7XG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgc3VwZXItY2xhc3MgY29uc3RydWN0b3IgYmVmb3JlIG91cnMgaXNcbiAgICAgICAgLy8gY2FsbGVkLiBTbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJvcGVydHkgaXMgaW5pdGFsaXplZC5cbiAgICAgICAgdGhpcy5fY2hhbm5lbFN1YnMgPSB0aGlzLl9jaGFubmVsU3VicyB8fCBbXTtcbiAgICAgICAgLy8gQXZvaWQgdG8gZHVwbGljYXRlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxTdWJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJywgdGhpcy5vblJlcXVlc3RDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycsIHRoaXMub25SZXF1ZXN0SGVhZGVycy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnLCB0aGlzLm9uUmVzcG9uc2VIZWFkZXJzLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6dHJhaWxlcnMnLCB0aGlzLm9uRG9uZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJywgdGhpcy5vbkVycm9yLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBfdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKSB7XG4gICAgICAgIHRoaXMuX2h0dHBDbGllbnREdXJhdGlvbkhpc3RvZ3JhbSA9IHRoaXMubWV0ZXIuY3JlYXRlSGlzdG9ncmFtKHNlbWFudGljX2NvbnZlbnRpb25zXzEuTUVUUklDX0hUVFBfQ0xJRU5UX1JFUVVFU1RfRFVSQVRJT04sIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTWVhc3VyZXMgdGhlIGR1cmF0aW9uIG9mIG91dGJvdW5kIEhUVFAgcmVxdWVzdHMuJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgICAgIHZhbHVlVHlwZTogYXBpXzEuVmFsdWVUeXBlLkRPVUJMRSxcbiAgICAgICAgICAgIGFkdmljZToge1xuICAgICAgICAgICAgICAgIGV4cGxpY2l0QnVja2V0Qm91bmRhcmllczogW1xuICAgICAgICAgICAgICAgICAgICAwLjAwNSwgMC4wMSwgMC4wMjUsIDAuMDUsIDAuMDc1LCAwLjEsIDAuMjUsIDAuNSwgMC43NSwgMSwgMi41LCA1LFxuICAgICAgICAgICAgICAgICAgICA3LjUsIDEwLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Vic2NyaWJlVG9DaGFubmVsKGRpYWdub3N0aWNDaGFubmVsLCBvbk1lc3NhZ2UpIHtcbiAgICAgICAgLy8gYGRpYWdub3N0aWNzX2NoYW5uZWxgIGhhZCBhIHJlZiBjb3VudGluZyBidWcgdW50aWwgdjE4LjE5LjAuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ3NTIwXG4gICAgICAgIGNvbnN0IFttYWpvciwgbWlub3JdID0gcHJvY2Vzcy52ZXJzaW9uXG4gICAgICAgICAgICAucmVwbGFjZSgndicsICcnKVxuICAgICAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgICAgIC5tYXAobiA9PiBOdW1iZXIobikpO1xuICAgICAgICBjb25zdCB1c2VOZXdTdWJzY3JpYmUgPSBtYWpvciA+IDE4IHx8IChtYWpvciA9PT0gMTggJiYgbWlub3IgPj0gMTkpO1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmU7XG4gICAgICAgIGlmICh1c2VOZXdTdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIGRpYWdjaC5zdWJzY3JpYmU/LihkaWFnbm9zdGljQ2hhbm5lbCwgb25NZXNzYWdlKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gKCkgPT4gZGlhZ2NoLnVuc3Vic2NyaWJlPy4oZGlhZ25vc3RpY0NoYW5uZWwsIG9uTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaGFubmVsID0gZGlhZ2NoLmNoYW5uZWwoZGlhZ25vc3RpY0NoYW5uZWwpO1xuICAgICAgICAgICAgY2hhbm5lbC5zdWJzY3JpYmUob25NZXNzYWdlKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gKCkgPT4gY2hhbm5lbC51bnN1YnNjcmliZShvbk1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5uZWxTdWJzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogZGlhZ25vc3RpY0NoYW5uZWwsXG4gICAgICAgICAgICB1bnN1YnNjcmliZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlUmVxdWVzdEhlYWRlcnMocmVxdWVzdCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcXVlc3QuaGVhZGVycykpIHtcbiAgICAgICAgICAgIC8vIGhlYWRlcnMgYXJlIGFuIGFycmF5IFtrMSwgdjIsIGsyLCB2Ml0gKHVuZGljaSB2NispXG4gICAgICAgICAgICAvLyB2YWx1ZXMgY291bGQgYmUgc3RyaW5nIG9yIGEgc3RyaW5nW10gZm9yIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0LmhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSByZXF1ZXN0LmhlYWRlcnNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXF1ZXN0LmhlYWRlcnNbaSArIDFdO1xuICAgICAgICAgICAgICAgIC8vIEtleSBzaG91bGQgYWx3YXlzIGJlIGEgc3RyaW5nLCBidXQgdGhlIHR5cGVzIGRvbid0IGtub3cgdGhhdCwgYW5kIGxldCdzIGJlIHNhZmVcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChrZXkudG9Mb3dlckNhc2UoKSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdC5oZWFkZXJzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gaGVhZGVycyBhcmUgYSByYXcgc3RyaW5nICh1bmRpY2kgdjUpXG4gICAgICAgICAgICAvLyBoZWFkZXJzIGNvdWxkIGJlIHJlcGVhdGVkIGluIHNldmVyYWwgbGluZXMgZm9yIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlcXVlc3QuaGVhZGVycy5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaGVhZGVycykge1xuICAgICAgICAgICAgICAgIGlmICghbGluZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb25JbmRleCA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgICAgICAgICAgICAgIGlmIChjb2xvbkluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGhlYWRlcj8gUHJvYmFibHkgdGhpcyBjYW4ndCBoYXBwZW4sIGJ1dCBhZ2FpbiBsZXQncyBiZSBzYWZlLlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxKS50cmltKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsVmFsdWVzID0gcmVzdWx0LmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChhbGxWYWx1ZXMgJiYgQXJyYXkuaXNBcnJheShhbGxWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYWxsVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBbYWxsVmFsdWVzLCB2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gVGhpcyBpcyB0aGUgMXN0IG1lc3NhZ2Ugd2UgcmVjZWl2ZSBmb3IgZWFjaCByZXF1ZXN0IChmaXJlZCBhZnRlciByZXF1ZXN0IGNyZWF0aW9uKS4gSGVyZSB3ZSB3aWxsXG4gICAgLy8gY3JlYXRlIHRoZSBzcGFuIGFuZCBwb3B1bGF0ZSBzb21lIGF0dHRyaWJ1dGVzLCB0aGVuIGxpbmsgdGhlIHNwYW4gdG8gdGhlIHJlcXVlc3QgZm9yIGZ1cnRoZXJcbiAgICAvLyBzcGFuIHByb2Nlc3NpbmdcbiAgICBvblJlcXVlc3RDcmVhdGVkKHsgcmVxdWVzdCB9KSB7XG4gICAgICAgIC8vIElnbm9yZSBpZjpcbiAgICAgICAgLy8gLSBpbnN0cnVtZW50YXRpb24gaXMgZGlzYWJsZWRcbiAgICAgICAgLy8gLSBpZ25vcmVkIGJ5IGNvbmZpZ1xuICAgICAgICAvLyAtIG1ldGhvZCBpcyAnQ09OTkVDVCdcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IGNvbmZpZy5lbmFibGVkICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2hvdWxkSWdub3JlUmVxID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+ICFlbmFibGVkIHx8XG4gICAgICAgICAgICByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnIHx8XG4gICAgICAgICAgICBjb25maWcuaWdub3JlUmVxdWVzdEhvb2s/LihyZXF1ZXN0KSwgZSA9PiBlICYmIHRoaXMuX2RpYWcuZXJyb3IoJ2NhdWdodCBpZ25vcmVSZXF1ZXN0SG9vayBlcnJvcjogJywgZSksIHRydWUpO1xuICAgICAgICBpZiAoc2hvdWxkSWdub3JlUmVxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gKDAsIGNvcmVfMS5oclRpbWUpKCk7XG4gICAgICAgIGxldCByZXF1ZXN0VXJsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWVzdFVybCA9IG5ldyB1cmxfMS5VUkwocmVxdWVzdC5wYXRoLCByZXF1ZXN0Lm9yaWdpbik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy53YXJuKCdjb3VsZCBub3QgZGV0ZXJtaW5lIHVybC5mdWxsOicsIGVycik7XG4gICAgICAgICAgICAvLyBTa2lwIGluc3RydW1lbnRpbmcgdGhpcyByZXF1ZXN0LlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybFNjaGVtZSA9IHJlcXVlc3RVcmwucHJvdG9jb2wucmVwbGFjZSgnOicsICcnKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChyZXF1ZXN0Lm1ldGhvZCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVRVUVTVF9NRVRIT0RdOiByZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9IVFRQX1JFUVVFU1RfTUVUSE9EX09SSUdJTkFMXTogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VSTF9GVUxMXTogcmVxdWVzdFVybC50b1N0cmluZygpLFxuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9VUkxfUEFUSF06IHJlcXVlc3RVcmwucGF0aG5hbWUsXG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1VSTF9RVUVSWV06IHJlcXVlc3RVcmwuc2VhcmNoLFxuICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9VUkxfU0NIRU1FXTogdXJsU2NoZW1lLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzY2hlbWVQb3J0cyA9IHsgaHR0cHM6ICc0NDMnLCBodHRwOiAnODAnIH07XG4gICAgICAgIGNvbnN0IHNlcnZlckFkZHJlc3MgPSByZXF1ZXN0VXJsLmhvc3RuYW1lO1xuICAgICAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcmVxdWVzdFVybC5wb3J0IHx8IHNjaGVtZVBvcnRzW3VybFNjaGVtZV07XG4gICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZFUl9BRERSRVNTXSA9IHNlcnZlckFkZHJlc3M7XG4gICAgICAgIGlmIChzZXJ2ZXJQb3J0ICYmICFpc05hTihOdW1iZXIoc2VydmVyUG9ydCkpKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfUE9SVF0gPSBOdW1iZXIoc2VydmVyUG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IHVzZXIgYWdlbnQgZnJvbSBoZWFkZXJzXG4gICAgICAgIGNvbnN0IGhlYWRlcnNNYXAgPSB0aGlzLnBhcnNlUmVxdWVzdEhlYWRlcnMocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHVzZXJBZ2VudFZhbHVlcyA9IGhlYWRlcnNNYXAuZ2V0KCd1c2VyLWFnZW50Jyk7XG4gICAgICAgIGlmICh1c2VyQWdlbnRWYWx1ZXMpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IGhhdmluZyBtdWx0aXBsZSB1c2VyIGFnZW50cyBpcyBub3QgZXhwZWN0ZWQgc29cbiAgICAgICAgICAgIC8vIHdlJ3JlIGdvaW5nIHRvIHRha2UgbGFzdCBvbmUgbGlrZSBgY3VybGAgZG9lc1xuICAgICAgICAgICAgLy8gcmVmOiBodHRwczovL2N1cmwuc2UvZG9jcy9tYW5wYWdlLmh0bWwjLUFcbiAgICAgICAgICAgIGNvbnN0IHVzZXJBZ2VudCA9IEFycmF5LmlzQXJyYXkodXNlckFnZW50VmFsdWVzKVxuICAgICAgICAgICAgICAgID8gdXNlckFnZW50VmFsdWVzW3VzZXJBZ2VudFZhbHVlcy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIDogdXNlckFnZW50VmFsdWVzO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVVNFUl9BR0VOVF9PUklHSU5BTF0gPSB1c2VyQWdlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgaG9vayBpZiBwcmVzZW50XG4gICAgICAgIGNvbnN0IGhvb2tBdHRyaWJ1dGVzID0gKDAsIGluc3RydW1lbnRhdGlvbl8xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGUpKCgpID0+IGNvbmZpZy5zdGFydFNwYW5Ib29rPy4ocmVxdWVzdCksIGUgPT4gZSAmJiB0aGlzLl9kaWFnLmVycm9yKCdjYXVnaHQgc3RhcnRTcGFuSG9vayBlcnJvcjogJywgZSksIHRydWUpO1xuICAgICAgICBpZiAoaG9va0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGhvb2tBdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1trZXldID0gdmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50IHNwYW4gaXMgcmVxdWlyZWQgdmlhIGNvbmZpZyBhbmQ6XG4gICAgICAgIC8vIC0gaWYgYSBwYXJlbnQgaXMgcmVxdWlyZWQgYnV0IG5vdCBwcmVzZW50LCB3ZSB1c2UgYSBgTm9vcFNwYW5gIHRvIHN0aWxsXG4gICAgICAgIC8vICAgcHJvcGFnYXRlIGNvbnRleHQgd2l0aG91dCByZWNvcmRpbmcgaXQuXG4gICAgICAgIC8vIC0gY3JlYXRlIGEgc3BhbiBvdGhlcndpc2VcbiAgICAgICAgY29uc3QgYWN0aXZlQ3R4ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFjdGl2ZUN0eCk7XG4gICAgICAgIGxldCBzcGFuO1xuICAgICAgICBpZiAoY29uZmlnLnJlcXVpcmVQYXJlbnRmb3JTcGFucyAmJlxuICAgICAgICAgICAgKCFjdXJyZW50U3BhbiB8fCAhYXBpXzEudHJhY2UuaXNTcGFuQ29udGV4dFZhbGlkKGN1cnJlbnRTcGFuLnNwYW5Db250ZXh0KCkpKSkge1xuICAgICAgICAgICAgc3BhbiA9IGFwaV8xLnRyYWNlLndyYXBTcGFuQ29udGV4dChhcGlfMS5JTlZBTElEX1NQQU5fQ09OVEVYVCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKHJlcXVlc3RNZXRob2QgPT09ICdfT1RIRVInID8gJ0hUVFAnIDogcmVxdWVzdE1ldGhvZCwge1xuICAgICAgICAgICAgICAgIGtpbmQ6IGFwaV8xLlNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSwgYWN0aXZlQ3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeGVjdXRlIHRoZSByZXF1ZXN0IGhvb2sgaWYgZGVmaW5lZFxuICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gY29uZmlnLnJlcXVlc3RIb29rPy4oc3BhbiwgcmVxdWVzdCksIGUgPT4gZSAmJiB0aGlzLl9kaWFnLmVycm9yKCdjYXVnaHQgcmVxdWVzdEhvb2sgZXJyb3I6ICcsIGUpLCB0cnVlKTtcbiAgICAgICAgLy8gQ29udGV4dCBwcm9wYWdhdGlvbiBnb2VzIGxhc3Qgc28gbm8gaG9vayBjYW4gdGFtcGVyXG4gICAgICAgIC8vIHRoZSBwcm9wYWdhdGlvbiBoZWFkZXJzXG4gICAgICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gYXBpXzEudHJhY2Uuc2V0U3BhbihhcGlfMS5jb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgY29uc3QgYWRkZWRIZWFkZXJzID0ge307XG4gICAgICAgIGFwaV8xLnByb3BhZ2F0aW9uLmluamVjdChyZXF1ZXN0Q29udGV4dCwgYWRkZWRIZWFkZXJzKTtcbiAgICAgICAgY29uc3QgaGVhZGVyRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGFkZGVkSGVhZGVycyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVyRW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgW2ssIHZdID0gaGVhZGVyRW50cmllc1tpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdC5hZGRIZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhlYWRlcihrLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0LmhlYWRlcnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzICs9IGAke2t9OiAke3Z9XFxyXFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVxdWVzdC5oZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIC8vIHVuZGljaUA2LjExLjAgYWNjaWRlbnRhbGx5LCBicmllZmx5IHJlbW92ZWQgYHJlcXVlc3QuYWRkSGVhZGVyKClgLlxuICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5wdXNoKGssIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlY29yZEZyb21SZXEuc2V0KHJlcXVlc3QsIHsgc3BhbiwgYXR0cmlidXRlcywgc3RhcnRUaW1lIH0pO1xuICAgIH1cbiAgICAvLyBUaGlzIGlzIHRoZSAybmQgbWVzc2FnZSB3ZSByZWNlaXZlIGZvciBlYWNoIHJlcXVlc3QuIEl0IGlzIGZpcmVkIHdoZW4gY29ubmVjdGlvbiB3aXRoXG4gICAgLy8gdGhlIHJlbW90ZSBpcyBlc3RhYmxpc2hlZCBhbmQgYWJvdXQgdG8gc2VuZCB0aGUgZmlyc3QgYnl0ZS4gSGVyZSB3ZSBkbyBoYXZlIGluZm8gYWJvdXQgdGhlXG4gICAgLy8gcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQgc28gd2UgY2FuIHBvcHVsYXRlIHNvbWUgYG5ldHdvcmsuKmAgYXR0cmlidXRlcyBpbnRvIHRoZSBzcGFuXG4gICAgb25SZXF1ZXN0SGVhZGVycyh7IHJlcXVlc3QsIHNvY2tldCB9KSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuX3JlY29yZEZyb21SZXEuZ2V0KHJlcXVlc3QpO1xuICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGNvbnN0IHsgc3BhbiB9ID0gcmVjb3JkO1xuICAgICAgICBjb25zdCB7IHJlbW90ZUFkZHJlc3MsIHJlbW90ZVBvcnQgfSA9IHNvY2tldDtcbiAgICAgICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX05FVFdPUktfUEVFUl9BRERSRVNTXTogcmVtb3RlQWRkcmVzcyxcbiAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfTkVUV09SS19QRUVSX1BPUlRdOiByZW1vdGVQb3J0LFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZnRlciBob29rcyBoYXZlIGJlZW4gcHJvY2Vzc2VkICh3aGljaCBtYXkgbW9kaWZ5IHJlcXVlc3QgaGVhZGVycylcbiAgICAgICAgLy8gd2UgY2FuIGNvbGxlY3QgdGhlIGhlYWRlcnMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgaWYgKGNvbmZpZy5oZWFkZXJzVG9TcGFuQXR0cmlidXRlcz8ucmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnNUb0F0dHJpYnMgPSBuZXcgU2V0KGNvbmZpZy5oZWFkZXJzVG9TcGFuQXR0cmlidXRlcy5yZXF1ZXN0SGVhZGVycy5tYXAobiA9PiBuLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnNNYXAgPSB0aGlzLnBhcnNlUmVxdWVzdEhlYWRlcnMocmVxdWVzdCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgaGVhZGVyc01hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyc1RvQXR0cmlicy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0clZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW2BodHRwLnJlcXVlc3QuaGVhZGVyLiR7bmFtZX1gXSA9IGF0dHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHNwYW5BdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgLy8gVGhpcyBpcyB0aGUgM3JkIG1lc3NhZ2Ugd2UgZ2V0IGZvciBlYWNoIHJlcXVlc3QgYW5kIGl0J3MgZmlyZWQgd2hlbiB0aGUgc2VydmVyXG4gICAgLy8gaGVhZGVycyBhcmUgcmVjZWl2ZWQsIGJvZHkgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHlldC5cbiAgICAvLyBGcm9tIHRoZSByZXNwb25zZSBoZWFkZXJzIHdlIGNhbiBzZXQgdGhlIHN0YXR1cyBhbmQgY29udGVudCBsZW5ndGhcbiAgICBvblJlc3BvbnNlSGVhZGVycyh7IHJlcXVlc3QsIHJlc3BvbnNlLCB9KSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuX3JlY29yZEZyb21SZXEuZ2V0KHJlcXVlc3QpO1xuICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3BhbiwgYXR0cmlidXRlcyB9ID0gcmVjb3JkO1xuICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVNQT05TRV9TVEFUVVNfQ09ERV06IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHJlc3BvbnNlIGhvb2sgaWYgZGVmaW5lZFxuICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSkoKCkgPT4gY29uZmlnLnJlc3BvbnNlSG9vaz8uKHNwYW4sIHsgcmVxdWVzdCwgcmVzcG9uc2UgfSksIGUgPT4gZSAmJiB0aGlzLl9kaWFnLmVycm9yKCdjYXVnaHQgcmVzcG9uc2VIb29rIGVycm9yOiAnLCBlKSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnNUb0F0dHJpYnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmIChjb25maWcuaGVhZGVyc1RvU3BhbkF0dHJpYnV0ZXM/LnJlc3BvbnNlSGVhZGVycykge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNUb1NwYW5BdHRyaWJ1dGVzPy5yZXNwb25zZUhlYWRlcnMuZm9yRWFjaChuYW1lID0+IGhlYWRlcnNUb0F0dHJpYnMuYWRkKG5hbWUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlc3BvbnNlLmhlYWRlcnMubGVuZ3RoOyBpZHggPSBpZHggKyAyKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gcmVzcG9uc2UuaGVhZGVyc1tpZHhdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzcG9uc2UuaGVhZGVyc1tpZHggKyAxXTtcbiAgICAgICAgICAgIGlmIChoZWFkZXJzVG9BdHRyaWJzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHNwYW5BdHRyaWJ1dGVzW2BodHRwLnJlc3BvbnNlLmhlYWRlci4ke25hbWV9YF0gPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gTnVtYmVyKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4oY29udGVudExlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbkF0dHJpYnV0ZXNbJ2h0dHAucmVzcG9uc2UuaGVhZGVyLmNvbnRlbnQtbGVuZ3RoJ10gPSBjb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoc3BhbkF0dHJpYnV0ZXMpO1xuICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlID49IDQwMFxuICAgICAgICAgICAgICAgID8gYXBpXzEuU3BhblN0YXR1c0NvZGUuRVJST1JcbiAgICAgICAgICAgICAgICA6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLlVOU0VULFxuICAgICAgICB9KTtcbiAgICAgICAgcmVjb3JkLmF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHNwYW5BdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgLy8gVGhpcyBpcyB0aGUgbGFzdCBldmVudCB3ZSByZWNlaXZlIGlmIHRoZSByZXF1ZXN0IHdlbnQgd2l0aG91dCBhbnkgZXJyb3JzXG4gICAgb25Eb25lKHsgcmVxdWVzdCB9KSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuX3JlY29yZEZyb21SZXEuZ2V0KHJlcXVlc3QpO1xuICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3BhbiwgYXR0cmlidXRlcywgc3RhcnRUaW1lIH0gPSByZWNvcmQ7XG4gICAgICAgIC8vIEVuZCB0aGUgc3BhblxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB0aGlzLl9yZWNvcmRGcm9tUmVxLmRlbGV0ZShyZXF1ZXN0KTtcbiAgICAgICAgLy8gUmVjb3JkIG1ldHJpY3NcbiAgICAgICAgdGhpcy5yZWNvcmRSZXF1ZXN0RHVyYXRpb24oYXR0cmlidXRlcywgc3RhcnRUaW1lKTtcbiAgICB9XG4gICAgLy8gVGhpcyBpcyB0aGUgZXZlbnQgd2UgZ2V0IHdoZW4gc29tZXRoaW5nIGlzIHdyb25nIGluIHRoZSByZXF1ZXN0IGxpa2VcbiAgICAvLyAtIGludmFsaWQgb3B0aW9ucyB3aGVuIGNhbGxpbmcgYGZldGNoYCBnbG9iYWwgQVBJIG9yIGFueSB1bmRpY2kgbWV0aG9kIGZvciByZXF1ZXN0XG4gICAgLy8gLSBjb25uZWN0aXZpdHkgZXJyb3JzIHN1Y2ggYXMgdW5yZWFjaGFibGUgaG9zdFxuICAgIC8vIC0gcmVxdWVzdHMgYWJvcnRlZCB0aHJvdWdoIGFuIGBBYm9ydENvbnRyb2xsZXIuc2lnbmFsYFxuICAgIC8vIE5PVEU6IHNlcnZlciBlcnJvcnMgYXJlIGNvbnNpZGVyZWQgdmFsaWQgcmVzcG9uc2VzIGFuZCBpdCdzIHRoZSBsaWIgY29uc3VtZXJcbiAgICAvLyB3aG8gc2hvdWxkIGRlYWwgd2l0aCB0aGF0LlxuICAgIG9uRXJyb3IoeyByZXF1ZXN0LCBlcnJvciB9KSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuX3JlY29yZEZyb21SZXEuZ2V0KHJlcXVlc3QpO1xuICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3BhbiwgYXR0cmlidXRlcywgc3RhcnRUaW1lIH0gPSByZWNvcmQ7XG4gICAgICAgIC8vIE5PVEU6IGluIGB1bmRpY2lANi4zLjBgIHdoZW4gcmVxdWVzdCBhYm9ydGVkIHRoZSBlcnJvciB0eXBlIGNoYW5nZXMgZnJvbVxuICAgICAgICAvLyBhIGN1c3RvbSBlcnJvciAoYFJlcXVlc3RBYm9ydGVkRXJyb3JgKSB0byBhIGJ1aWx0LWluIGBET01FeGNlcHRpb25gIGNhcnJ5aW5nXG4gICAgICAgIC8vIHNvbWUgZGlmZmVyZW5jZXM6XG4gICAgICAgIC8vIC0gYGNvZGVgIGlzIGZyb20gRE9NRVhjZXB0aW9uIChBQk9SVF9FUlI6IDIwKVxuICAgICAgICAvLyAtIGBtZXNzYWdlYCBjaGFuZ2VzXG4gICAgICAgIC8vIC0gc3RhY2t0cmFjZSBpcyBzbWFsbGVyIGFuZCBjb250YWlucyBub2RlIGludGVybmFsIGZyYW1lc1xuICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IGFwaV8xLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIHRoaXMuX3JlY29yZEZyb21SZXEuZGVsZXRlKHJlcXVlc3QpO1xuICAgICAgICAvLyBSZWNvcmQgbWV0cmljcyAod2l0aCB0aGUgZXJyb3IpXG4gICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VSUk9SX1RZUEVdID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgdGhpcy5yZWNvcmRSZXF1ZXN0RHVyYXRpb24oYXR0cmlidXRlcywgc3RhcnRUaW1lKTtcbiAgICB9XG4gICAgcmVjb3JkUmVxdWVzdER1cmF0aW9uKGF0dHJpYnV0ZXMsIHN0YXJ0VGltZSkge1xuICAgICAgICAvLyBUaW1lIHRvIHJlY29yZCBtZXRyaWNzXG4gICAgICAgIGNvbnN0IG1ldHJpY3NBdHRyaWJ1dGVzID0ge307XG4gICAgICAgIC8vIEdldCB0aGUgYXR0cmlicyBhbHJlYWR5IGluIHNwYW4gYXR0cmlidXRlc1xuICAgICAgICBjb25zdCBrZXlzVG9Db3B5ID0gW1xuICAgICAgICAgICAgc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0hUVFBfUkVTUE9OU0VfU1RBVFVTX0NPREUsXG4gICAgICAgICAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfSFRUUF9SRVFVRVNUX01FVEhPRCxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfQUREUkVTUyxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWRVJfUE9SVCxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9VUkxfU0NIRU1FLFxuICAgICAgICAgICAgc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VSUk9SX1RZUEUsXG4gICAgICAgIF07XG4gICAgICAgIGtleXNUb0NvcHkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgbWV0cmljc0F0dHJpYnV0ZXNba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRha2UgdGhlIGR1cmF0aW9uIGFuZCByZWNvcmQgaXRcbiAgICAgICAgY29uc3QgZHVyYXRpb25TZWNvbmRzID0gKDAsIGNvcmVfMS5oclRpbWVUb01pbGxpc2Vjb25kcykoKDAsIGNvcmVfMS5oclRpbWVEdXJhdGlvbikoc3RhcnRUaW1lLCAoMCwgY29yZV8xLmhyVGltZSkoKSkpIC8gMTAwMDtcbiAgICAgICAgdGhpcy5faHR0cENsaWVudER1cmF0aW9uSGlzdG9ncmFtLnJlY29yZChkdXJhdGlvblNlY29uZHMsIG1ldHJpY3NBdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgZ2V0UmVxdWVzdE1ldGhvZChvcmlnaW5hbCkge1xuICAgICAgICBjb25zdCBrbm93bk1ldGhvZHMgPSB7XG4gICAgICAgICAgICBDT05ORUNUOiB0cnVlLFxuICAgICAgICAgICAgT1BUSU9OUzogdHJ1ZSxcbiAgICAgICAgICAgIEhFQUQ6IHRydWUsXG4gICAgICAgICAgICBHRVQ6IHRydWUsXG4gICAgICAgICAgICBQT1NUOiB0cnVlLFxuICAgICAgICAgICAgUFVUOiB0cnVlLFxuICAgICAgICAgICAgUEFUQ0g6IHRydWUsXG4gICAgICAgICAgICBERUxFVEU6IHRydWUsXG4gICAgICAgICAgICBUUkFDRTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9yaWdpbmFsLnRvVXBwZXJDYXNlKCkgaW4ga25vd25NZXRob2RzKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ19PVEhFUic7XG4gICAgfVxufVxuZXhwb3J0cy5VbmRpY2lJbnN0cnVtZW50YXRpb24gPSBVbmRpY2lJbnN0cnVtZW50YXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmRpY2kuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVuZGljaUluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciB1bmRpY2lfMSA9IHJlcXVpcmUoXCIuL3VuZGljaVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVuZGljaUluc3RydW1lbnRhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kaWNpXzEuVW5kaWNpSW5zdHJ1bWVudGF0aW9uOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9IGV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlBBQ0tBR0VfVkVSU0lPTiA9ICcwLjUyLjAnO1xuZXhwb3J0cy5QQUNLQUdFX05BTUUgPSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXdpbnN0b24nO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuV2luc3Rvbkluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGFwaV9sb2dzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3NcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCB3aW5zdG9uM1ZlcnNpb25zID0gWyc+PTMgPDQnXTtcbmNvbnN0IHdpbnN0b25QcmUzVmVyc2lvbnMgPSBbJz49MSA8MyddO1xuY2xhc3MgV2luc3Rvbkluc3RydW1lbnRhdGlvbiBleHRlbmRzIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHZlcnNpb25fMS5QQUNLQUdFX05BTUUsIHZlcnNpb25fMS5QQUNLQUdFX1ZFUlNJT04sIGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IHdpbnN0b25zM2luc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uID0gbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKCd3aW5zdG9uJywgd2luc3RvbjNWZXJzaW9ucywgbW9kdWxlRXhwb3J0cyA9PiBtb2R1bGVFeHBvcnRzLCAoKSA9PiB7IH0sIFtcbiAgICAgICAgICAgIG5ldyBpbnN0cnVtZW50YXRpb25fMS5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSgnd2luc3Rvbi9saWIvd2luc3Rvbi9sb2dnZXIuanMnLCB3aW5zdG9uM1ZlcnNpb25zLCAobG9nZ2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBpbnN0cnVtZW50YXRpb25fMS5pc1dyYXBwZWQpKGxvZ2dlci5wcm90b3R5cGVbJ3dyaXRlJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChsb2dnZXIucHJvdG90eXBlLCAnd3JpdGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChsb2dnZXIucHJvdG90eXBlLCAnd3JpdGUnLCB0aGlzLl9nZXRQYXRjaGVkV3JpdGUoKSk7XG4gICAgICAgICAgICAgICAgLy8gV3JhcCBjb25maWd1cmVcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkobG9nZ2VyLnByb3RvdHlwZVsnY29uZmlndXJlJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChsb2dnZXIucHJvdG90eXBlLCAnY29uZmlndXJlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXAobG9nZ2VyLnByb3RvdHlwZSwgJ2NvbmZpZ3VyZScsIHRoaXMuX2dldFBhdGNoZWRDb25maWd1cmUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICAgICAgICAgIH0sIChsb2dnZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobG9nZ2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobG9nZ2VyLnByb3RvdHlwZSwgJ3dyaXRlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGxvZ2dlci5wcm90b3R5cGUsICdjb25maWd1cmUnKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3Qgd2luc3RvbnMyaW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24gPSBuZXcgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oJ3dpbnN0b24nLCB3aW5zdG9uUHJlM1ZlcnNpb25zLCBtb2R1bGVFeHBvcnRzID0+IG1vZHVsZUV4cG9ydHMsICgpID0+IHsgfSwgW1xuICAgICAgICAgICAgbmV3IGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlKCd3aW5zdG9uL2xpYi93aW5zdG9uL2xvZ2dlci5qcycsIHdpbnN0b25QcmUzVmVyc2lvbnMsIChmaWxlRXhwb3J0cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvID0gZmlsZUV4cG9ydHMuTG9nZ2VyLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGluc3RydW1lbnRhdGlvbl8xLmlzV3JhcHBlZCkocHJvdG8ubG9nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAocHJvdG8sICdsb2cnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChwcm90bywgJ2xvZycsIHRoaXMuX2dldFBhdGNoZWRMb2coKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVFeHBvcnRzO1xuICAgICAgICAgICAgfSwgKGZpbGVFeHBvcnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVFeHBvcnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoZmlsZUV4cG9ydHMuTG9nZ2VyLnByb3RvdHlwZSwgJ2xvZycpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF0pO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgd2luc3RvbnMzaW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aW5zdG9uczJpbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbixcbiAgICAgICAgXTtcbiAgICB9XG4gICAgX2NhbGxIb29rKHNwYW4sIHJlY29yZCkge1xuICAgICAgICBjb25zdCB7IGxvZ0hvb2sgfSA9IHRoaXMuZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghbG9nSG9vaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlKSgoKSA9PiBsb2dIb29rKHNwYW4sIHJlY29yZCksIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5lcnJvcignZXJyb3IgY2FsbGluZyBsb2dIb29rJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICAgIF9nZXRQYXRjaGVkV3JpdGUoKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hlZFdyaXRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5faGFuZGxlTG9nQ29ycmVsYXRpb24ocmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hlZExvZygpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRjaGVkTG9nKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB7fTtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uX2hhbmRsZUxvZ0NvcnJlbGF0aW9uKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgLy8gSW5qZWN0IGluIG1ldGFkYXRhIGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IGlzRGF0YUluamVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGFyZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IE9iamVjdC5hc3NpZ24oYXJnc1tpXSwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGF0YUluamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaXNEYXRhSW5qZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0QXQgPSB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFyZ3MubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhcmdzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5zcGxpY2UoaW5zZXJ0QXQsIDAsIHJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9nZXRQYXRjaGVkQ29uZmlndXJlKCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoZWRDb25maWd1cmUoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGluc3RydW1lbnRhdGlvbi5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9nU2VuZGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBsb2FkIFdpbnN0b24gdHJhbnNwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgT3BlblRlbGVtZXRyeVRyYW5zcG9ydFYzLCB9ID0gcmVxdWlyZSgnQG9wZW50ZWxlbWV0cnkvd2luc3Rvbi10cmFuc3BvcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRyYW5zcG9ydHMgPSBhcmdzWzBdLnRyYW5zcG9ydHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RyYW5zcG9ydHMgPSBBcnJheS5pc0FycmF5KG9yaWdpbmFsVHJhbnNwb3J0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbFRyYW5zcG9ydHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHJhbnNwb3J0T3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9nU2V2ZXJpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2luc3RvbkxldmVsID0gaW5zdHJ1bWVudGF0aW9uLl93aW5zdG9uTGV2ZWxGcm9tU2V2ZXJpdHkoY29uZmlnLmxvZ1NldmVyaXR5LCBhcmdzWzBdLmxldmVscyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydE9wdGlvbnMgPSB7IGxldmVsOiB3aW5zdG9uTGV2ZWwgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlblRlbGVtZXRyeVRyYW5zcG9ydCA9IG5ldyBPcGVuVGVsZW1ldHJ5VHJhbnNwb3J0VjModHJhbnNwb3J0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHJhbnNwb3J0cyAmJiAhQXJyYXkuaXNBcnJheShvcmlnaW5hbFRyYW5zcG9ydHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zcG9ydHMgPSBbb3JpZ2luYWxUcmFuc3BvcnRzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VHJhbnNwb3J0cy5wdXNoKG9wZW5UZWxlbWV0cnlUcmFuc3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0udHJhbnNwb3J0cyA9IG5ld1RyYW5zcG9ydHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLl9kaWFnLndhcm4oJ0BvcGVudGVsZW1ldHJ5L3dpbnN0b24tdHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGUsIGxvZyByZWNvcmRzIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc2VudC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfaGFuZGxlTG9nQ29ycmVsYXRpb24ocmVjb3JkKSB7XG4gICAgICAgIGlmICghdGhpcy5nZXRDb25maWcoKS5kaXNhYmxlTG9nQ29ycmVsYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBhcGlfMS50cmFjZS5nZXRTcGFuKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkoc3BhbkNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX2lkOiBzcGFuQ29udGV4dC50cmFjZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbl9pZDogc3BhbkNvbnRleHQuc3BhbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VfZmxhZ3M6IGAwJHtzcGFuQ29udGV4dC50cmFjZUZsYWdzLnRvU3RyaW5nKDE2KX1gLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmhhbmNlZFJlY29yZCA9IE9iamVjdC5hc3NpZ24ocmVjb3JkLCBmaWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsSG9vayhzcGFuLCBlbmhhbmNlZFJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmhhbmNlZFJlY29yZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG4gICAgX3dpbnN0b25MZXZlbEZyb21TZXZlcml0eShzZXZlcml0eSwgd2luc3RvbkxldmVscykge1xuICAgICAgICBpZiAod2luc3RvbkxldmVscykge1xuICAgICAgICAgICAgaWYgKGlzTnBtTGV2ZWxzKHdpbnN0b25MZXZlbHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRVJST1IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuV0FSTikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3dhcm4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbmZvJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5ERUJVRzMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5ERUJVRzIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd2ZXJib3NlJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5ERUJVRykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RlYnVnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5UUkFDRSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NpbGx5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NsaUxldmVscyh3aW5zdG9uTGV2ZWxzKSkge1xuICAgICAgICAgICAgICAgIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLldBUk4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd3YXJuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPMykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hlbHAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLklORk8yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGF0YSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuSU5GTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luZm8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkRFQlVHKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGVidWcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFNCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb21wdCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuVFJBQ0UzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndmVyYm9zZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuVFJBQ0UyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaW5wdXQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnc2lsbHknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzU3lzbG9nTGV2ZWxzKHdpbnN0b25MZXZlbHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuRkFUQUwyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZW1lcmcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkZBVEFMKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnYWxlcnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2NyaXQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLkVSUk9SKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLldBUk4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2V2ZXJpdHkgPj0gYXBpX2xvZ3NfMS5TZXZlcml0eU51bWJlci5JTkZPMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ25vdGljZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNldmVyaXR5ID49IGFwaV9sb2dzXzEuU2V2ZXJpdHlOdW1iZXIuSU5GTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luZm8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZXZlcml0eSA+PSBhcGlfbG9nc18xLlNldmVyaXR5TnVtYmVyLlRSQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGVidWcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVua25vd24gbGV2ZWxcbiAgICAgICAgICAgIHRoaXMuX2RpYWcud2FybignZmFpbGVkIHRvIGNvbmZpZ3VyZSBzZXZlcml0eSB3aXRoIGV4aXN0aW5nIHdpbnN0b24gbGV2ZWxzJyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNDbGlMZXZlbHMoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gKGFyZyAmJlxuICAgICAgICAgICAgICAgIGFyZy5lcnJvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgYXJnLndhcm4gJiZcbiAgICAgICAgICAgICAgICBhcmcuaGVscCAmJlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhICYmXG4gICAgICAgICAgICAgICAgYXJnLmluZm8gJiZcbiAgICAgICAgICAgICAgICBhcmcuZGVidWcgJiZcbiAgICAgICAgICAgICAgICBhcmcucHJvbXB0ICYmXG4gICAgICAgICAgICAgICAgYXJnLnZlcmJvc2UgJiZcbiAgICAgICAgICAgICAgICBhcmcuaW5wdXQgJiZcbiAgICAgICAgICAgICAgICBhcmcuc2lsbHkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzTnBtTGV2ZWxzKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIChhcmcgJiZcbiAgICAgICAgICAgICAgICBhcmcuZXJyb3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGFyZy53YXJuICYmXG4gICAgICAgICAgICAgICAgYXJnLmluZm8gJiZcbiAgICAgICAgICAgICAgICBhcmcuaHR0cCAmJlxuICAgICAgICAgICAgICAgIGFyZy52ZXJib3NlICYmXG4gICAgICAgICAgICAgICAgYXJnLmRlYnVnICYmXG4gICAgICAgICAgICAgICAgYXJnLnNpbGx5KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1N5c2xvZ0xldmVscyhhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiAoYXJnICYmXG4gICAgICAgICAgICAgICAgYXJnLmVtZXJnICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBhcmcuYWxlcnQgJiZcbiAgICAgICAgICAgICAgICBhcmcuY3JpdCAmJlxuICAgICAgICAgICAgICAgIGFyZy5lcnJvciAmJlxuICAgICAgICAgICAgICAgIGFyZy53YXJuaW5nICYmXG4gICAgICAgICAgICAgICAgYXJnLm5vdGljZSAmJlxuICAgICAgICAgICAgICAgIGFyZy5pbmZvICYmXG4gICAgICAgICAgICAgICAgYXJnLmRlYnVnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxufVxuZXhwb3J0cy5XaW5zdG9uSW5zdHJ1bWVudGF0aW9uID0gV2luc3Rvbkluc3RydW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuV2luc3Rvbkluc3RydW1lbnRhdGlvbiA9IHZvaWQgMDtcbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIldpbnN0b25JbnN0cnVtZW50YXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLldpbnN0b25JbnN0cnVtZW50YXRpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ0xPVURfUFJPVklERVJfVkFMVUVfQUxJQkFCQV9DTE9VRCA9IGV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfQUxJQkFCQV9DTE9VRF9FQ1MgPSBleHBvcnRzLkFUVFJfSE9TVF9UWVBFID0gZXhwb3J0cy5BVFRSX0hPU1RfTkFNRSA9IGV4cG9ydHMuQVRUUl9IT1NUX0lEID0gZXhwb3J0cy5BVFRSX0NMT1VEX1JFR0lPTiA9IGV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9IGV4cG9ydHMuQVRUUl9DTE9VRF9QTEFURk9STSA9IGV4cG9ydHMuQVRUUl9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSA9IGV4cG9ydHMuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogVGhlIGNsb3VkIGFjY291bnQgSUQgdGhlIHJlc291cmNlIGlzIGFzc2lnbmVkIHRvLlxuICpcbiAqIEBleGFtcGxlIDExMTExMTExMTExMVxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NMT1VEX0FDQ09VTlRfSUQgPSAnY2xvdWQuYWNjb3VudC5pZCc7XG4vKipcbiAqIENsb3VkIHJlZ2lvbnMgb2Z0ZW4gaGF2ZSBtdWx0aXBsZSwgaXNvbGF0ZWQgbG9jYXRpb25zIGtub3duIGFzIHpvbmVzIHRvIGluY3JlYXNlIGF2YWlsYWJpbGl0eS4gQXZhaWxhYmlsaXR5IHpvbmUgcmVwcmVzZW50cyB0aGUgem9uZSB3aGVyZSB0aGUgcmVzb3VyY2UgaXMgcnVubmluZy5cbiAqXG4gKiBAZXhhbXBsZSB1cy1lYXN0LTFjXG4gKlxuICogQG5vdGUgQXZhaWxhYmlsaXR5IHpvbmVzIGFyZSBjYWxsZWQgXCJ6b25lc1wiIG9uIEFsaWJhYmEgQ2xvdWQgYW5kIEdvb2dsZSBDbG91ZC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSA9ICdjbG91ZC5hdmFpbGFiaWxpdHlfem9uZSc7XG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogQG5vdGUgVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSAqKlNIT1VMRCoqIG1hdGNoIHRoZSBvbmUgc3BlY2lmaWVkIGluIGBjbG91ZC5wcm92aWRlcmAuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUExBVEZPUk0gPSAnY2xvdWQucGxhdGZvcm0nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9ICdjbG91ZC5wcm92aWRlcic7XG4vKipcbiAqIFRoZSBnZW9ncmFwaGljYWwgcmVnaW9uIHdpdGhpbiBhIGNsb3VkIHByb3ZpZGVyLiBXaGVuIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLCB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiB3aGVyZSB0aGUgcmVzb3VyY2Ugb3BlcmF0ZXMuIFdoZW4gY2FsbGluZyBzZXJ2aWNlcyBvciBBUElzIGRlcGxveWVkIG9uIGEgY2xvdWQsIHRoaXMgYXR0cmlidXRlIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiB3aGVyZSB0aGUgY2FsbGVkIGRlc3RpbmF0aW9uIGlzIGRlcGxveWVkLlxuICpcbiAqIEBleGFtcGxlIHVzLWNlbnRyYWwxXG4gKiBAZXhhbXBsZSB1cy1lYXN0LTFcbiAqXG4gKiBAbm90ZSBSZWZlciB0byB5b3VyIHByb3ZpZGVyJ3MgZG9jcyB0byBzZWUgdGhlIGF2YWlsYWJsZSByZWdpb25zLCBmb3IgZXhhbXBsZSBbQWxpYmFiYSBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy5hbGliYWJhY2xvdWQuY29tL2hlbHAvZG9jLWRldGFpbC80MDY1NC5odG0pLCBbQVdTIHJlZ2lvbnNdKGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYWJvdXQtYXdzL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9yZWdpb25zX2F6LyksIFtBenVyZSByZWdpb25zXShodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vZ2xvYmFsLWluZnJhc3RydWN0dXJlL2dlb2dyYXBoaWVzLyksIFtHb29nbGUgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Fib3V0L2xvY2F0aW9ucyksIG9yIFtUZW5jZW50IENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vd3d3LnRlbmNlbnRjbG91ZC5jb20vZG9jdW1lbnQvcHJvZHVjdC8yMTMvNjA5MSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUkVHSU9OID0gJ2Nsb3VkLnJlZ2lvbic7XG4vKipcbiAqIFVuaXF1ZSBob3N0IElELiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgaW5zdGFuY2VfaWQgYXNzaWduZWQgYnkgdGhlIGNsb3VkIHByb3ZpZGVyLiBGb3Igbm9uLWNvbnRhaW5lcml6ZWQgc3lzdGVtcywgdGhpcyBzaG91bGQgYmUgdGhlIGBtYWNoaW5lLWlkYC4gU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIHNvdXJjZXMgdG8gdXNlIHRvIGRldGVybWluZSB0aGUgYG1hY2hpbmUtaWRgIGJhc2VkIG9uIG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQGV4YW1wbGUgZmRiZjc5ZThhZjk0Y2I3ZjllOGRmMzY3ODkxODcwNTJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0lEID0gJ2hvc3QuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0LiBPbiBVbml4IHN5c3RlbXMsIGl0IG1heSBjb250YWluIHdoYXQgdGhlIGhvc3RuYW1lIGNvbW1hbmQgcmV0dXJucywgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LXRlc3RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSAnaG9zdC5uYW1lJztcbi8qKlxuICogVHlwZSBvZiBob3N0LiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgbWFjaGluZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlIG4xLXN0YW5kYXJkLTFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX1RZUEUgPSAnaG9zdC50eXBlJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImFsaWJhYmFfY2xvdWRfZWNzXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QTEFURk9STX0uXG4gKlxuICogQWxpYmFiYSBDbG91ZCBFbGFzdGljIENvbXB1dGUgU2VydmljZVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfQUxJQkFCQV9DTE9VRF9FQ1MgPSAnYWxpYmFiYV9jbG91ZF9lY3MnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiYWxpYmFiYV9jbG91ZFwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUFJPVklERVJ9LlxuICpcbiAqIEFsaWJhYmEgQ2xvdWRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0FMSUJBQkFfQ0xPVUQgPSAnYWxpYmFiYV9jbG91ZCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hbGliYWJhQ2xvdWRFY3NEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCBodHRwID0gcmVxdWlyZShcImh0dHBcIik7XG4vKipcbiAqIFRoZSBBbGliYWJhQ2xvdWRFY3NEZXRlY3RvciBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgYSBwcm9jZXNzIGlzIHJ1bm5pbmcgaW5cbiAqIEFsaWJhYmFDbG91ZCBFQ1MgYW5kIHJldHVybiBhIHtAbGluayBSZXNvdXJjZX0gcG9wdWxhdGVkIHdpdGggbWV0YWRhdGEgYWJvdXRcbiAqIHRoZSBFQ1MgaW5zdGFuY2UuIFJldHVybnMgYW4gZW1wdHkgUmVzb3VyY2UgaWYgZGV0ZWN0aW9uIGZhaWxzLlxuICovXG5jbGFzcyBBbGliYWJhQ2xvdWRFY3NEZXRlY3RvciB7XG4gICAgLyoqXG4gICAgICogU2VlIGh0dHBzOi8vd3d3LmFsaWJhYmFjbG91ZC5jb20vaGVscC9kb2MtZGV0YWlsLzY3MjU0Lmh0bSBmb3JcbiAgICAgKiBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBBbGliYWJhQ2xvdWQgaW5zdGFuY2UgaWRlbnRpdHkgZG9jdW1lbnQuXG4gICAgICovXG4gICAgQUxJQkFCQV9DTE9VRF9JRE1TX0VORFBPSU5UID0gJzEwMC4xMDAuMTAwLjIwMCc7XG4gICAgQUxJQkFCQV9DTE9VRF9JTlNUQU5DRV9JREVOVElUWV9ET0NVTUVOVF9QQVRIID0gJy9sYXRlc3QvZHluYW1pYy9pbnN0YW5jZS1pZGVudGl0eS9kb2N1bWVudCc7XG4gICAgQUxJQkFCQV9DTE9VRF9JTlNUQU5DRV9IT1NUX0RPQ1VNRU5UX1BBVEggPSAnL2xhdGVzdC9tZXRhLWRhdGEvaG9zdG5hbWUnO1xuICAgIE1JTExJU0VDT05EU19USU1FX09VVCA9IDEwMDA7XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gY29ubmVjdCBhbmQgb2J0YWluIGFuIEFsaWJhYmFDbG91ZCBpbnN0YW5jZSBJZGVudGl0eSBkb2N1bWVudC5cbiAgICAgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsIGl0IHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgYVxuICAgICAqIHtAbGluayBSZXNvdXJjZX0gcG9wdWxhdGVkIHdpdGggaW5zdGFuY2UgbWV0YWRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnICh1bnVzZWQpIFRoZSByZXNvdXJjZSBkZXRlY3Rpb24gY29uZmlnXG4gICAgICovXG4gICAgZGV0ZWN0KCkge1xuICAgICAgICBjb25zdCBkYXRhUHJvbWlzZSA9IGFwaV8xLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksICgpID0+IHRoaXMuX2dhdGhlckRhdGEoKSk7XG4gICAgICAgIGNvbnN0IGF0dHJOYW1lcyA9IFtcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk0sXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9BQ0NPVU5UX0lELFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfUkVHSU9OLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUsXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9IT1NUX0lELFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfSE9TVF9UWVBFLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfSE9TVF9OQU1FLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGF0dHJOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgLy8gRWFjaCByZXNvdXJjZSBhdHRyaWJ1dGUgaXMgZGV0ZXJtaW5lZCBhc3luY2hyb25vdXNseSBpbiBfZ2F0aGVyRGF0YSgpLlxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IGRhdGFQcm9taXNlLnRoZW4oZGF0YSA9PiBkYXRhW25hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGF0dHJpYnV0ZXMgfTtcbiAgICB9XG4gICAgLyoqIEdldHMgaWRlbnRpdHkgYW5kIGhvc3QgaW5mbyBhbmQgcmV0dXJucyB0aGVtIGFzIGF0dHJpYnMuIEVtcHR5IG9iamVjdCBpZiBmYWlscyAqL1xuICAgIGFzeW5jIF9nYXRoZXJEYXRhKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyAnb3duZXItYWNjb3VudC1pZCc6IGFjY291bnRJZCwgJ2luc3RhbmNlLWlkJzogaW5zdGFuY2VJZCwgJ2luc3RhbmNlLXR5cGUnOiBpbnN0YW5jZVR5cGUsICdyZWdpb24taWQnOiByZWdpb24sICd6b25lLWlkJzogYXZhaWxhYmlsaXR5Wm9uZSwgfSA9IGF3YWl0IHRoaXMuX2ZldGNoSWRlbnRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RuYW1lID0gYXdhaXQgdGhpcy5fZmV0Y2hIb3N0KCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUl06IHNlbWNvbnZfMS5DTE9VRF9QUk9WSURFUl9WQUxVRV9BTElCQUJBX0NMT1VELFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9QTEFURk9STV06IHNlbWNvbnZfMS5DTE9VRF9QTEFURk9STV9WQUxVRV9BTElCQUJBX0NMT1VEX0VDUyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfQUNDT1VOVF9JRF06IGFjY291bnRJZCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUkVHSU9OXTogcmVnaW9uLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORV06IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0hPU1RfSURdOiBpbnN0YW5jZUlkLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX1RZUEVdOiBpbnN0YW5jZVR5cGUsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0hPU1RfTkFNRV06IGhvc3RuYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGRpZCBub3QgZGV0ZWN0IHJlc291cmNlOiAke2Vycj8ubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaCBBbGliYWJhQ2xvdWQgaW5zdGFuY2UgZG9jdW1lbnQgdXJsIHdpdGggaHR0cCByZXF1ZXN0cy4gSWYgdGhlXG4gICAgICogYXBwbGljYXRpb24gaXMgcnVubmluZyBvbiBhbiBFQ1MgaW5zdGFuY2UsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBiYWNrIGFcbiAgICAgKiB2YWxpZCBKU09OIGRvY3VtZW50LiBQYXJzZXMgdGhhdCBkb2N1bWVudCBhbmQgc3RvcmVzIHRoZSBpZGVudGl0eVxuICAgICAqIHByb3BlcnRpZXMgaW4gYSBsb2NhbCBtYXAuXG4gICAgICovXG4gICAgYXN5bmMgX2ZldGNoSWRlbnRpdHkoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLkFMSUJBQkFfQ0xPVURfSURNU19FTkRQT0lOVCxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuQUxJQkFCQV9DTE9VRF9JTlNUQU5DRV9JREVOVElUWV9ET0NVTUVOVF9QQVRILFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMuTUlMTElTRUNPTkRTX1RJTUVfT1VULFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpZGVudGl0eSA9IGF3YWl0IHRoaXMuX2ZldGNoU3RyaW5nKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpZGVudGl0eSk7XG4gICAgfVxuICAgIGFzeW5jIF9mZXRjaEhvc3QoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLkFMSUJBQkFfQ0xPVURfSURNU19FTkRQT0lOVCxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuQUxJQkFCQV9DTE9VRF9JTlNUQU5DRV9IT1NUX0RPQ1VNRU5UX1BBVEgsXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgdGltZW91dDogdGhpcy5NSUxMSVNFQ09ORFNfVElNRV9PVVQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mZXRjaFN0cmluZyhvcHRpb25zKTtcbiAgICB9XG4gICAgYXN5bmMgX2ZldGNoU3RyaW5nKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcS5kZXN0cm95KG5ldyBFcnJvcignRUNTIG1ldGFkYXRhIGFwaSByZXF1ZXN0IHRpbWVkIG91dC4nKSk7XG4gICAgICAgICAgICB9LCB0aGlzLk1JTExJU0VDT05EU19USU1FX09VVCk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwLnJlcXVlc3Qob3B0aW9ucywgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0YXR1c0NvZGUgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICEoc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8IDMwMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHBhZ2UsIHN0YXR1cyBjb2RlOiAke3N0YXR1c0NvZGV9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgICBsZXQgcmF3RGF0YSA9ICcnO1xuICAgICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IChyYXdEYXRhICs9IGNodW5rKSk7XG4gICAgICAgICAgICAgICAgcmVzLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJhd0RhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmFsaWJhYmFDbG91ZEVjc0RldGVjdG9yID0gbmV3IEFsaWJhYmFDbG91ZEVjc0RldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbGliYWJhQ2xvdWRFY3NEZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYWxpYmFiYUNsb3VkRWNzRGV0ZWN0b3IgPSB2b2lkIDA7XG52YXIgQWxpYmFiYUNsb3VkRWNzRGV0ZWN0b3JfMSA9IHJlcXVpcmUoXCIuL0FsaWJhYmFDbG91ZEVjc0RldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWxpYmFiYUNsb3VkRWNzRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFsaWJhYmFDbG91ZEVjc0RldGVjdG9yXzEuYWxpYmFiYUNsb3VkRWNzRGV0ZWN0b3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYWxpYmFiYUNsb3VkRWNzRGV0ZWN0b3IgPSB2b2lkIDA7XG52YXIgZGV0ZWN0b3JzXzEgPSByZXF1aXJlKFwiLi9kZXRlY3RvcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbGliYWJhQ2xvdWRFY3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGV0ZWN0b3JzXzEuYWxpYmFiYUNsb3VkRWNzRGV0ZWN0b3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ0xPVURfUFJPVklERVJfVkFMVUVfQVdTID0gZXhwb3J0cy5DTE9VRF9QTEFURk9STV9WQUxVRV9BV1NfTEFNQkRBID0gZXhwb3J0cy5DTE9VRF9QTEFURk9STV9WQUxVRV9BV1NfRUxBU1RJQ19CRUFOU1RBTEsgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FS1MgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FQ1MgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FQzIgPSBleHBvcnRzLkFUVFJfU0VSVklDRV9OQU1FU1BBQ0UgPSBleHBvcnRzLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRCA9IGV4cG9ydHMuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FID0gZXhwb3J0cy5BVFRSX0hPU1RfVFlQRSA9IGV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSBleHBvcnRzLkFUVFJfSE9TVF9JRCA9IGV4cG9ydHMuQVRUUl9GQUFTX1ZFUlNJT04gPSBleHBvcnRzLkFUVFJfRkFBU19NQVhfTUVNT1JZID0gZXhwb3J0cy5BVFRSX0ZBQVNfSU5TVEFOQ0UgPSBleHBvcnRzLkFUVFJfRkFBU19OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9IGV4cG9ydHMuQVRUUl9DTE9VRF9SRVNPVVJDRV9JRCA9IGV4cG9ydHMuQVRUUl9DTE9VRF9SRUdJT04gPSBleHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSBleHBvcnRzLkFUVFJfQ0xPVURfUExBVEZPUk0gPSBleHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSBleHBvcnRzLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCA9IGV4cG9ydHMuQVRUUl9BV1NfTE9HX1NUUkVBTV9OQU1FUyA9IGV4cG9ydHMuQVRUUl9BV1NfTE9HX1NUUkVBTV9BUk5TID0gZXhwb3J0cy5BVFRSX0FXU19MT0dfR1JPVVBfTkFNRVMgPSBleHBvcnRzLkFUVFJfQVdTX0xPR19HUk9VUF9BUk5TID0gZXhwb3J0cy5BVFRSX0FXU19FQ1NfVEFTS19SRVZJU0lPTiA9IGV4cG9ydHMuQVRUUl9BV1NfRUNTX1RBU0tfRkFNSUxZID0gZXhwb3J0cy5BVFRSX0FXU19FQ1NfVEFTS19BUk4gPSBleHBvcnRzLkFUVFJfQVdTX0VDU19MQVVOQ0hUWVBFID0gZXhwb3J0cy5BVFRSX0FXU19FQ1NfQ09OVEFJTkVSX0FSTiA9IGV4cG9ydHMuQVRUUl9BV1NfRUNTX0NMVVNURVJfQVJOID0gdm9pZCAwO1xuLypcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdW5zdGFibGUgc2VtYW50aWMgY29udmVudGlvbiBkZWZpbml0aW9uc1xuICogdXNlZCBieSB0aGlzIHBhY2thZ2UuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL3RyZWUvbWFpbi9zZW1hbnRpYy1jb252ZW50aW9ucyN1bnN0YWJsZS1zZW1jb252XG4gKi9cbi8qKlxuICogVGhlIEFSTiBvZiBhbiBbRUNTIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXJzLmh0bWwpLlxuICpcbiAqIEBleGFtcGxlIGFybjphd3M6ZWNzOnVzLXdlc3QtMjoxMjM0NTY3ODkxMjM6Y2x1c3Rlci9teS1jbHVzdGVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQVdTX0VDU19DTFVTVEVSX0FSTiA9ICdhd3MuZWNzLmNsdXN0ZXIuYXJuJztcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIGFuIFtFQ1MgY29udGFpbmVyIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9FQ1NfaW5zdGFuY2VzLmh0bWwpLlxuICpcbiAqIEBleGFtcGxlIGFybjphd3M6ZWNzOnVzLXdlc3QtMToxMjM0NTY3ODkxMjM6Y29udGFpbmVyLzMyNjI0MTUyLTkwODYtNGYwZS1hY2FlLTFhNzViMTRmZTRkOVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19FQ1NfQ09OVEFJTkVSX0FSTiA9ICdhd3MuZWNzLmNvbnRhaW5lci5hcm4nO1xuLyoqXG4gKiBUaGUgW2xhdW5jaCB0eXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgZm9yIGFuIEVDUyB0YXNrLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19FQ1NfTEFVTkNIVFlQRSA9ICdhd3MuZWNzLmxhdW5jaHR5cGUnO1xuLyoqXG4gKiBUaGUgQVJOIG9mIGEgcnVubmluZyBbRUNTIHRhc2tdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hY2NvdW50LXNldHRpbmdzLmh0bWwjZWNzLXJlc291cmNlLWlkcykuXG4gKlxuICogQGV4YW1wbGUgYXJuOmF3czplY3M6dXMtd2VzdC0xOjEyMzQ1Njc4OTEyMzp0YXNrLzEwODM4YmVkLTQyMWYtNDNlZi04NzBhLWY0M2ZlYWNiYmI1YlxuICogQGV4YW1wbGUgYXJuOmF3czplY3M6dXMtd2VzdC0xOjEyMzQ1Njc4OTEyMzp0YXNrL215LWNsdXN0ZXIvdGFzay1pZC8yM2ViYjhhYy1jMThmLTQ2YzYtOGJiZS1kNTVkMGUzN2NmYmRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRUNTX1RBU0tfQVJOID0gJ2F3cy5lY3MudGFzay5hcm4nO1xuLyoqXG4gKiBUaGUgZmFtaWx5IG5hbWUgb2YgdGhlIFtFQ1MgdGFzayBkZWZpbml0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrX2RlZmluaXRpb25zLmh0bWwpIHVzZWQgdG8gY3JlYXRlIHRoZSBFQ1MgdGFzay5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWZhbWlseVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19FQ1NfVEFTS19GQU1JTFkgPSAnYXdzLmVjcy50YXNrLmZhbWlseSc7XG4vKipcbiAqIFRoZSByZXZpc2lvbiBmb3IgdGhlIHRhc2sgZGVmaW5pdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRUNTIHRhc2suXG4gKlxuICogQGV4YW1wbGUgOFxuICogQGV4YW1wbGUgMjZcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfRUNTX1RBU0tfUkVWSVNJT04gPSAnYXdzLmVjcy50YXNrLnJldmlzaW9uJztcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lKHMpIChBUk4pIG9mIHRoZSBBV1MgbG9nIGdyb3VwKHMpLlxuICpcbiAqIEBleGFtcGxlIFtcImFybjphd3M6bG9nczp1cy13ZXN0LTE6MTIzNDU2Nzg5MDEyOmxvZy1ncm91cDovYXdzL215L2dyb3VwOipcIl1cbiAqXG4gKiBAbm90ZSBTZWUgdGhlIFtsb2cgZ3JvdXAgQVJOIGZvcm1hdCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9pYW0tYWNjZXNzLWNvbnRyb2wtb3ZlcnZpZXctY3dsLmh0bWwjQ1dMX0FSTl9Gb3JtYXQpLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19MT0dfR1JPVVBfQVJOUyA9ICdhd3MubG9nLmdyb3VwLmFybnMnO1xuLyoqXG4gKiBUaGUgbmFtZShzKSBvZiB0aGUgQVdTIGxvZyBncm91cChzKSBhbiBhcHBsaWNhdGlvbiBpcyB3cml0aW5nIHRvLlxuICpcbiAqIEBleGFtcGxlIFtcIi9hd3MvbGFtYmRhL215LWZ1bmN0aW9uXCIsIFwib3BlbnRlbGVtZXRyeS1zZXJ2aWNlXCJdXG4gKlxuICogQG5vdGUgTXVsdGlwbGUgbG9nIGdyb3VwcyBtdXN0IGJlIHN1cHBvcnRlZCBmb3IgY2FzZXMgbGlrZSBtdWx0aS1jb250YWluZXIgYXBwbGljYXRpb25zLCB3aGVyZSBhIHNpbmdsZSBhcHBsaWNhdGlvbiBoYXMgc2lkZWNhciBjb250YWluZXJzLCBhbmQgZWFjaCB3cml0ZSB0byB0aGVpciBvd24gbG9nIGdyb3VwLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19MT0dfR1JPVVBfTkFNRVMgPSAnYXdzLmxvZy5ncm91cC5uYW1lcyc7XG4vKipcbiAqIFRoZSBBUk4ocykgb2YgdGhlIEFXUyBsb2cgc3RyZWFtKHMpLlxuICpcbiAqIEBleGFtcGxlIFtcImFybjphd3M6bG9nczp1cy13ZXN0LTE6MTIzNDU2Nzg5MDEyOmxvZy1ncm91cDovYXdzL215L2dyb3VwOmxvZy1zdHJlYW06bG9ncy9tYWluLzEwODM4YmVkLTQyMWYtNDNlZi04NzBhLWY0M2ZlYWNiYmI1YlwiXVxuICpcbiAqIEBub3RlIFNlZSB0aGUgW2xvZyBzdHJlYW0gQVJOIGZvcm1hdCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9pYW0tYWNjZXNzLWNvbnRyb2wtb3ZlcnZpZXctY3dsLmh0bWwjQ1dMX0FSTl9Gb3JtYXQpLiBPbmUgbG9nIGdyb3VwIGNhbiBjb250YWluIHNldmVyYWwgbG9nIHN0cmVhbXMsIHNvIHRoZXNlIEFSTnMgbmVjZXNzYXJpbHkgaWRlbnRpZnkgYm90aCBhIGxvZyBncm91cCBhbmQgYSBsb2cgc3RyZWFtLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0FXU19MT0dfU1RSRUFNX0FSTlMgPSAnYXdzLmxvZy5zdHJlYW0uYXJucyc7XG4vKipcbiAqIFRoZSBuYW1lKHMpIG9mIHRoZSBBV1MgbG9nIHN0cmVhbShzKSBhbiBhcHBsaWNhdGlvbiBpcyB3cml0aW5nIHRvLlxuICpcbiAqIEBleGFtcGxlIFtcImxvZ3MvbWFpbi8xMDgzOGJlZC00MjFmLTQzZWYtODcwYS1mNDNmZWFjYmJiNWJcIl1cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9BV1NfTE9HX1NUUkVBTV9OQU1FUyA9ICdhd3MubG9nLnN0cmVhbS5uYW1lcyc7XG4vKipcbiAqIFRoZSBjbG91ZCBhY2NvdW50IElEIHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0by5cbiAqXG4gKiBAZXhhbXBsZSAxMTExMTExMTExMTFcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnlcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEID0gJ2Nsb3VkLmFjY291bnQuaWQnO1xuLyoqXG4gKiBDbG91ZCByZWdpb25zIG9mdGVuIGhhdmUgbXVsdGlwbGUsIGlzb2xhdGVkIGxvY2F0aW9ucyBrbm93biBhcyB6b25lcyB0byBpbmNyZWFzZSBhdmFpbGFiaWxpdHkuIEF2YWlsYWJpbGl0eSB6b25lIHJlcHJlc2VudHMgdGhlIHpvbmUgd2hlcmUgdGhlIHJlc291cmNlIGlzIHJ1bm5pbmcuXG4gKlxuICogQGV4YW1wbGUgdXMtZWFzdC0xY1xuICpcbiAqIEBub3RlIEF2YWlsYWJpbGl0eSB6b25lcyBhcmUgY2FsbGVkIFwiem9uZXNcIiBvbiBBbGliYWJhIENsb3VkIGFuZCBHb29nbGUgQ2xvdWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSAnY2xvdWQuYXZhaWxhYmlsaXR5X3pvbmUnO1xuLyoqXG4gKiBUaGUgY2xvdWQgcGxhdGZvcm0gaW4gdXNlLlxuICpcbiAqIEBub3RlIFRoZSBwcmVmaXggb2YgdGhlIHNlcnZpY2UgKipTSE9VTEQqKiBtYXRjaCB0aGUgb25lIHNwZWNpZmllZCBpbiBgY2xvdWQucHJvdmlkZXJgLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NMT1VEX1BMQVRGT1JNID0gJ2Nsb3VkLnBsYXRmb3JtJztcbi8qKlxuICogTmFtZSBvZiB0aGUgY2xvdWQgcHJvdmlkZXIuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSAnY2xvdWQucHJvdmlkZXInO1xuLyoqXG4gKiBUaGUgZ2VvZ3JhcGhpY2FsIHJlZ2lvbiB0aGUgcmVzb3VyY2UgaXMgcnVubmluZy5cbiAqXG4gKiBAZXhhbXBsZSB1cy1jZW50cmFsMVxuICogQGV4YW1wbGUgdXMtZWFzdC0xXG4gKlxuICogQG5vdGUgUmVmZXIgdG8geW91ciBwcm92aWRlcidzIGRvY3MgdG8gc2VlIHRoZSBhdmFpbGFibGUgcmVnaW9ucywgZm9yIGV4YW1wbGUgW0FsaWJhYmEgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly93d3cuYWxpYmFiYWNsb3VkLmNvbS9oZWxwL2RvYy1kZXRhaWwvNDA2NTQuaHRtKSwgW0FXUyByZWdpb25zXShodHRwczovL2F3cy5hbWF6b24uY29tL2Fib3V0LWF3cy9nbG9iYWwtaW5mcmFzdHJ1Y3R1cmUvcmVnaW9uc19hei8pLCBbQXp1cmUgcmVnaW9uc10oaHR0cHM6Ly9henVyZS5taWNyb3NvZnQuY29tL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9nZW9ncmFwaGllcy8pLCBbR29vZ2xlIENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9hYm91dC9sb2NhdGlvbnMpLCBvciBbVGVuY2VudCBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy50ZW5jZW50Y2xvdWQuY29tL2RvY3VtZW50L3Byb2R1Y3QvMjEzLzYwOTEpLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NMT1VEX1JFR0lPTiA9ICdjbG91ZC5yZWdpb24nO1xuLyoqXG4gKiBDbG91ZCBwcm92aWRlci1zcGVjaWZpYyBuYXRpdmUgaWRlbnRpZmllciBvZiB0aGUgbW9uaXRvcmVkIGNsb3VkIHJlc291cmNlIChlLmcuIGFuIFtBUk5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9hd3MtYXJucy1hbmQtbmFtZXNwYWNlcy5odG1sKSBvbiBBV1MsIGEgW2Z1bGx5IHF1YWxpZmllZCByZXNvdXJjZSBJRF0oaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3Jlc291cmNlcy9yZXNvdXJjZXMvZ2V0LWJ5LWlkKSBvbiBBenVyZSwgYSBbZnVsbCByZXNvdXJjZSBuYW1lXShodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYXBpcy9kZXNpZ24vcmVzb3VyY2VfbmFtZXMjZnVsbF9yZXNvdXJjZV9uYW1lKSBvbiBHQ1ApXG4gKlxuICogQGV4YW1wbGUgYXJuOmF3czpsYW1iZGE6UkVHSU9OOkFDQ09VTlRfSUQ6ZnVuY3Rpb246bXktZnVuY3Rpb25cbiAqIEBleGFtcGxlIC8vcnVuLmdvb2dsZWFwaXMuY29tL3Byb2plY3RzL1BST0pFQ1RfSUQvbG9jYXRpb25zL0xPQ0FUSU9OX0lEL3NlcnZpY2VzL1NFUlZJQ0VfSURcbiAqIEBleGFtcGxlIC9zdWJzY3JpcHRpb25zLzxTVUJTQ1JJUFRJT05fR1VJRD4vcmVzb3VyY2VHcm91cHMvPFJHPi9wcm92aWRlcnMvTWljcm9zb2Z0LldlYi9zaXRlcy88RlVOQ0FQUD4vZnVuY3Rpb25zLzxGVU5DPlxuICpcbiAqIEBub3RlIE9uIHNvbWUgY2xvdWQgcHJvdmlkZXJzLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgZnVsbCBJRCBhdCBzdGFydHVwLFxuICogc28gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBzZXQgYGNsb3VkLnJlc291cmNlX2lkYCBhcyBhIHNwYW4gYXR0cmlidXRlIGluc3RlYWQuXG4gKlxuICogVGhlIGV4YWN0IHZhbHVlIHRvIHVzZSBmb3IgYGNsb3VkLnJlc291cmNlX2lkYCBkZXBlbmRzIG9uIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqIFRoZSBmb2xsb3dpbmcgd2VsbC1rbm93biBkZWZpbml0aW9ucyAqKk1VU1QqKiBiZSB1c2VkIGlmIHlvdSBzZXQgdGhpcyBhdHRyaWJ1dGUgYW5kIHRoZXkgYXBwbHk6XG4gKlxuICogICAtICoqQVdTIExhbWJkYToqKiBUaGUgZnVuY3Rpb24gW0FSTl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL2F3cy1hcm5zLWFuZC1uYW1lc3BhY2VzLmh0bWwpLlxuICogICAgIFRha2UgY2FyZSBub3QgdG8gdXNlIHRoZSBcImludm9rZWQgQVJOXCIgZGlyZWN0bHkgYnV0IHJlcGxhY2UgYW55XG4gKiAgICAgW2FsaWFzIHN1ZmZpeF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvY29uZmlndXJhdGlvbi1hbGlhc2VzLmh0bWwpXG4gKiAgICAgd2l0aCB0aGUgcmVzb2x2ZWQgZnVuY3Rpb24gdmVyc2lvbiwgYXMgdGhlIHNhbWUgcnVudGltZSBpbnN0YW5jZSBtYXkgYmUgaW52b2NhYmxlIHdpdGhcbiAqICAgICBtdWx0aXBsZSBkaWZmZXJlbnQgYWxpYXNlcy5cbiAqICAgLSAqKkdDUDoqKiBUaGUgW1VSSSBvZiB0aGUgcmVzb3VyY2VdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9pYW0vZG9jcy9mdWxsLXJlc291cmNlLW5hbWVzKVxuICogICAtICoqQXp1cmU6KiogVGhlIFtGdWxseSBRdWFsaWZpZWQgUmVzb3VyY2UgSURdKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL3Jlc3QvYXBpL3Jlc291cmNlcy9yZXNvdXJjZXMvZ2V0LWJ5LWlkKSBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbixcbiAqICAgICAqbm90KiB0aGUgZnVuY3Rpb24gYXBwLCBoYXZpbmcgdGhlIGZvcm1cbiAqICAgICBgL3N1YnNjcmlwdGlvbnMvPFNVQlNDUklQVElPTl9HVUlEPi9yZXNvdXJjZUdyb3Vwcy88Ukc+L3Byb3ZpZGVycy9NaWNyb3NvZnQuV2ViL3NpdGVzLzxGVU5DQVBQPi9mdW5jdGlvbnMvPEZVTkM+YC5cbiAqICAgICBUaGlzIG1lYW5zIHRoYXQgYSBzcGFuIGF0dHJpYnV0ZSAqKk1VU1QqKiBiZSB1c2VkLCBhcyBhbiBBenVyZSBmdW5jdGlvbiBhcHAgY2FuIGhvc3QgbXVsdGlwbGUgZnVuY3Rpb25zIHRoYXQgd291bGQgdXN1YWxseSBzaGFyZVxuICogICAgIGEgVHJhY2VyUHJvdmlkZXIuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUkVTT1VSQ0VfSUQgPSAnY2xvdWQucmVzb3VyY2VfaWQnO1xuLyoqXG4gKiBDb250YWluZXIgSUQuIFVzdWFsbHkgYSBVVUlELCBhcyBmb3IgZXhhbXBsZSB1c2VkIHRvIFtpZGVudGlmeSBEb2NrZXIgY29udGFpbmVyc10oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2NvbnRhaW5lcnMvcnVuLyNjb250YWluZXItaWRlbnRpZmljYXRpb24pLiBUaGUgVVVJRCBtaWdodCBiZSBhYmJyZXZpYXRlZC5cbiAqXG4gKiBAZXhhbXBsZSBhM2JmOTBlMDA2YjJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DT05UQUlORVJfSUQgPSAnY29udGFpbmVyLmlkJztcbi8qKlxuICogQ29udGFpbmVyIG5hbWUgdXNlZCBieSBjb250YWluZXIgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ09OVEFJTkVSX05BTUUgPSAnY29udGFpbmVyLm5hbWUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgdGhpcyBydW50aW1lIGluc3RhbmNlIGV4ZWN1dGVzLlxuICpcbiAqIEBleGFtcGxlIG15LWZ1bmN0aW9uXG4gKiBAZXhhbXBsZSBteWF6dXJlZnVuY3Rpb25hcHAvc29tZS1mdW5jdGlvbi1uYW1lXG4gKlxuICogQG5vdGUgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gYXMgY29uZmlndXJlZC9kZXBsb3llZCBvbiB0aGUgRmFhU1xuICogcGxhdGZvcm0gYW5kIGlzIHVzdWFsbHkgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrXG4gKiBmdW5jdGlvbiAod2hpY2ggbWF5IGJlIHN0b3JlZCBpbiB0aGVcbiAqIFtgY29kZS5uYW1lc3BhY2VgL2Bjb2RlLmZ1bmN0aW9uYF0oL2RvY3MvZ2VuZXJhbC9hdHRyaWJ1dGVzLm1kI3NvdXJjZS1jb2RlLWF0dHJpYnV0ZXMpXG4gKiBzcGFuIGF0dHJpYnV0ZXMpLlxuICpcbiAqIEZvciBzb21lIGNsb3VkIHByb3ZpZGVycywgdGhlIGFib3ZlIGRlZmluaXRpb24gaXMgYW1iaWd1b3VzLiBUaGUgZm9sbG93aW5nXG4gKiBkZWZpbml0aW9uIG9mIGZ1bmN0aW9uIG5hbWUgKipNVVNUKiogYmUgdXNlZCBmb3IgdGhpcyBhdHRyaWJ1dGVcbiAqIChhbmQgY29uc2VxdWVudGx5IHRoZSBzcGFuIG5hbWUpIGZvciB0aGUgbGlzdGVkIGNsb3VkIHByb3ZpZGVycy9wcm9kdWN0czpcbiAqXG4gKiAgIC0gKipBenVyZToqKiAgVGhlIGZ1bGwgbmFtZSBgPEZVTkNBUFA+LzxGVU5DPmAsIGkuZS4sIGZ1bmN0aW9uIGFwcCBuYW1lXG4gKiAgICAgZm9sbG93ZWQgYnkgYSBmb3J3YXJkIHNsYXNoIGZvbGxvd2VkIGJ5IHRoZSBmdW5jdGlvbiBuYW1lICh0aGlzIGZvcm1cbiAqICAgICBjYW4gYWxzbyBiZSBzZWVuIGluIHRoZSByZXNvdXJjZSBKU09OIGZvciB0aGUgZnVuY3Rpb24pLlxuICogICAgIFRoaXMgbWVhbnMgdGhhdCBhIHNwYW4gYXR0cmlidXRlICoqTVVTVCoqIGJlIHVzZWQsIGFzIGFuIEF6dXJlIGZ1bmN0aW9uXG4gKiAgICAgYXBwIGNhbiBob3N0IG11bHRpcGxlIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIHVzdWFsbHkgc2hhcmVcbiAqICAgICBhIFRyYWNlclByb3ZpZGVyIChzZWUgYWxzbyB0aGUgYGNsb3VkLnJlc291cmNlX2lkYCBhdHRyaWJ1dGUpLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0ZBQVNfTkFNRSA9ICdmYWFzLm5hbWUnO1xuLyoqXG4gKiBUaGUgZXhlY3V0aW9uIGVudmlyb25tZW50IElEIGFzIGEgc3RyaW5nLCB0aGF0IHdpbGwgYmUgcG90ZW50aWFsbHkgcmV1c2VkIGZvciBvdGhlciBpbnZvY2F0aW9ucyB0byB0aGUgc2FtZSBmdW5jdGlvbi9mdW5jdGlvbiB2ZXJzaW9uLlxuICpcbiAqIEBleGFtcGxlIDIwMjEvMDYvMjgvWyRMQVRFU1RdMmYzOTllYjE0NTM3NDQ3ZGEwNWFiMmEyZTM5MzA5ZGVcbiAqXG4gKiBAbm90ZSAqICoqQVdTIExhbWJkYToqKiBVc2UgdGhlIChmdWxsKSBsb2cgc3RyZWFtIG5hbWUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfRkFBU19JTlNUQU5DRSA9ICdmYWFzLmluc3RhbmNlJztcbi8qKlxuICogVGhlIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBzZXJ2ZXJsZXNzIGZ1bmN0aW9uIGNvbnZlcnRlZCB0byBCeXRlcy5cbiAqXG4gKiBAZXhhbXBsZSAxMzQyMTc3MjhcbiAqXG4gKiBAbm90ZSBJdCdzIHJlY29tbWVuZGVkIHRvIHNldCB0aGlzIGF0dHJpYnV0ZSBzaW5jZSBlLmcuIHRvbyBsaXR0bGUgbWVtb3J5IGNhbiBlYXNpbHkgc3RvcCBhIEphdmEgQVdTIExhbWJkYSBmdW5jdGlvbiBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBPbiBBV1MgTGFtYmRhLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEFXU19MQU1CREFfRlVOQ1RJT05fTUVNT1JZX1NJWkVgIHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRpb24gKHdoaWNoIG11c3QgYmUgbXVsdGlwbGllZCBieSAxLDA0OCw1NzYpLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0ZBQVNfTUFYX01FTU9SWSA9ICdmYWFzLm1heF9tZW1vcnknO1xuLyoqXG4gKiBUaGUgaW1tdXRhYmxlIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIDI2XG4gKiBAZXhhbXBsZSBwaW5rZnJvaWQtMDAwMDJcbiAqXG4gKiBAbm90ZSBEZXBlbmRpbmcgb24gdGhlIGNsb3VkIHByb3ZpZGVyIGFuZCBwbGF0Zm9ybSwgdXNlOlxuICpcbiAqICAgLSAqKkFXUyBMYW1iZGE6KiogVGhlIFtmdW5jdGlvbiB2ZXJzaW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLXZlcnNpb25zLmh0bWwpXG4gKiAgICAgKGFuIGludGVnZXIgcmVwcmVzZW50ZWQgYXMgYSBkZWNpbWFsIHN0cmluZykuXG4gKiAgIC0gKipHb29nbGUgQ2xvdWQgUnVuIChTZXJ2aWNlcyk6KiogVGhlIFtyZXZpc2lvbl0oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3J1bi9kb2NzL21hbmFnaW5nL3JldmlzaW9ucylcbiAqICAgICAoaS5lLiwgdGhlIGZ1bmN0aW9uIG5hbWUgcGx1cyB0aGUgcmV2aXNpb24gc3VmZml4KS5cbiAqICAgLSAqKkdvb2dsZSBDbG91ZCBGdW5jdGlvbnM6KiogVGhlIHZhbHVlIG9mIHRoZVxuICogICAgIFtgS19SRVZJU0lPTmAgZW52aXJvbm1lbnQgdmFyaWFibGVdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9mdW5jdGlvbnMvZG9jcy9lbnYtdmFyI3J1bnRpbWVfZW52aXJvbm1lbnRfdmFyaWFibGVzX3NldF9hdXRvbWF0aWNhbGx5KS5cbiAqICAgLSAqKkF6dXJlIEZ1bmN0aW9uczoqKiBOb3QgYXBwbGljYWJsZS4gRG8gbm90IHNldCB0aGlzIGF0dHJpYnV0ZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9GQUFTX1ZFUlNJT04gPSAnZmFhcy52ZXJzaW9uJztcbi8qKlxuICogVW5pcXVlIGhvc3QgSUQuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBpbnN0YW5jZV9pZCBhc3NpZ25lZCBieSB0aGUgY2xvdWQgcHJvdmlkZXIuIEZvciBub24tY29udGFpbmVyaXplZCBzeXN0ZW1zLCB0aGlzIHNob3VsZCBiZSB0aGUgYG1hY2hpbmUtaWRgLiBTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgc291cmNlcyB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSBgbWFjaGluZS1pZGAgYmFzZWQgb24gb3BlcmF0aW5nIHN5c3RlbS5cbiAqXG4gKiBAZXhhbXBsZSBmZGJmNzllOGFmOTRjYjdmOWU4ZGYzNjc4OTE4NzA1MlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSAnaG9zdC5pZCc7XG4vKipcbiAqIE5hbWUgb2YgdGhlIGhvc3QuIE9uIFVuaXggc3lzdGVtcywgaXQgbWF5IGNvbnRhaW4gd2hhdCB0aGUgaG9zdG5hbWUgY29tbWFuZCByZXR1cm5zLCBvciB0aGUgZnVsbHkgcXVhbGlmaWVkIGhvc3RuYW1lLCBvciBhbm90aGVyIG5hbWUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLlxuICpcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnktdGVzdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfTkFNRSA9ICdob3N0Lm5hbWUnO1xuLyoqXG4gKiBUeXBlIG9mIGhvc3QuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBtYWNoaW5lIHR5cGUuXG4gKlxuICogQGV4YW1wbGUgbjEtc3RhbmRhcmQtMVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfVFlQRSA9ICdob3N0LnR5cGUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY2x1c3Rlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWNsdXN0ZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FID0gJ2s4cy5jbHVzdGVyLm5hbWUnO1xuLyoqXG4gKiBUaGUgc3RyaW5nIElEIG9mIHRoZSBzZXJ2aWNlIGluc3RhbmNlLlxuICpcbiAqIEBleGFtcGxlIDYyN2NjNDkzLWYzMTAtNDdkZS05NmJkLTcxNDEwYjdkZWMwOVxuICpcbiAqIEBub3RlICoqTVVTVCoqIGJlIHVuaXF1ZSBmb3IgZWFjaCBpbnN0YW5jZSBvZiB0aGUgc2FtZSBgc2VydmljZS5uYW1lc3BhY2Usc2VydmljZS5uYW1lYCBwYWlyIChpbiBvdGhlciB3b3Jkc1xuICogYHNlcnZpY2UubmFtZXNwYWNlLHNlcnZpY2UubmFtZSxzZXJ2aWNlLmluc3RhbmNlLmlkYCB0cmlwbGV0ICoqTVVTVCoqIGJlIGdsb2JhbGx5IHVuaXF1ZSkuIFRoZSBJRCBoZWxwcyB0b1xuICogZGlzdGluZ3Vpc2ggaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHNlcnZpY2UgdGhhdCBleGlzdCBhdCB0aGUgc2FtZSB0aW1lIChlLmcuIGluc3RhbmNlcyBvZiBhIGhvcml6b250YWxseSBzY2FsZWRcbiAqIHNlcnZpY2UpLlxuICpcbiAqIEltcGxlbWVudGF0aW9ucywgc3VjaCBhcyBTREtzLCBhcmUgcmVjb21tZW5kZWQgdG8gZ2VuZXJhdGUgYSByYW5kb20gVmVyc2lvbiAxIG9yIFZlcnNpb24gNCBbUkZDXG4gKiA0MTIyXShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDEyMi50eHQpIFVVSUQsIGJ1dCBhcmUgZnJlZSB0byB1c2UgYW4gaW5oZXJlbnQgdW5pcXVlIElEIGFzIHRoZSBzb3VyY2Ugb2ZcbiAqIHRoaXMgdmFsdWUgaWYgc3RhYmlsaXR5IGlzIGRlc2lyYWJsZS4gSW4gdGhhdCBjYXNlLCB0aGUgSUQgKipTSE9VTEQqKiBiZSB1c2VkIGFzIHNvdXJjZSBvZiBhIFVVSUQgVmVyc2lvbiA1IGFuZFxuICogKipTSE9VTEQqKiB1c2UgdGhlIGZvbGxvd2luZyBVVUlEIGFzIHRoZSBuYW1lc3BhY2U6IGA0ZDYzMDA5YS04ZDBmLTExZWUtYWFkNy00Yzc5NmVkOGUzMjBgLlxuICpcbiAqIFVVSURzIGFyZSB0eXBpY2FsbHkgcmVjb21tZW5kZWQsIGFzIG9ubHkgYW4gb3BhcXVlIHZhbHVlIGZvciB0aGUgcHVycG9zZXMgb2YgaWRlbnRpZnlpbmcgYSBzZXJ2aWNlIGluc3RhbmNlIGlzXG4gKiBuZWVkZWQuIFNpbWlsYXIgdG8gd2hhdCBjYW4gYmUgc2VlbiBpbiB0aGUgbWFuIHBhZ2UgZm9yIHRoZVxuICogW2AvZXRjL21hY2hpbmUtaWRgXShodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvc3lzdGVtZC9tYW4vbWFjaGluZS1pZC5odG1sKSBmaWxlLCB0aGUgdW5kZXJseWluZ1xuICogZGF0YSwgc3VjaCBhcyBwb2QgbmFtZSBhbmQgbmFtZXNwYWNlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNvbmZpZGVudGlhbCwgYmVpbmcgdGhlIHVzZXIncyBjaG9pY2UgdG8gZXhwb3NlIGl0XG4gKiBvciBub3QgdmlhIGFub3RoZXIgcmVzb3VyY2UgYXR0cmlidXRlLlxuICpcbiAqIEZvciBhcHBsaWNhdGlvbnMgcnVubmluZyBiZWhpbmQgYW4gYXBwbGljYXRpb24gc2VydmVyIChsaWtlIHVuaWNvcm4pLCB3ZSBkbyBub3QgcmVjb21tZW5kIHVzaW5nIG9uZSBpZGVudGlmaWVyXG4gKiBmb3IgYWxsIHByb2Nlc3NlcyBwYXJ0aWNpcGF0aW5nIGluIHRoZSBhcHBsaWNhdGlvbi4gSW5zdGVhZCwgaXQncyByZWNvbW1lbmRlZCBlYWNoIGRpdmlzaW9uIChlLmcuIGEgd29ya2VyXG4gKiB0aHJlYWQgaW4gdW5pY29ybikgdG8gaGF2ZSBpdHMgb3duIGluc3RhbmNlLmlkLlxuICpcbiAqIEl0J3Mgbm90IHJlY29tbWVuZGVkIGZvciBhIENvbGxlY3RvciB0byBzZXQgYHNlcnZpY2UuaW5zdGFuY2UuaWRgIGlmIGl0IGNhbid0IHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lIHRoZVxuICogc2VydmljZSBpbnN0YW5jZSB0aGF0IGlzIGdlbmVyYXRpbmcgdGhhdCB0ZWxlbWV0cnkuIEZvciBpbnN0YW5jZSwgY3JlYXRpbmcgYW4gVVVJRCBiYXNlZCBvbiBgcG9kLm5hbWVgIHdpbGxcbiAqIGxpa2VseSBiZSB3cm9uZywgYXMgdGhlIENvbGxlY3RvciBtaWdodCBub3Qga25vdyBmcm9tIHdoaWNoIGNvbnRhaW5lciB3aXRoaW4gdGhhdCBwb2QgdGhlIHRlbGVtZXRyeSBvcmlnaW5hdGVkLlxuICogSG93ZXZlciwgQ29sbGVjdG9ycyBjYW4gc2V0IHRoZSBgc2VydmljZS5pbnN0YW5jZS5pZGAgaWYgdGhleSBjYW4gdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmUgdGhlIHNlcnZpY2UgaW5zdGFuY2VcbiAqIGZvciB0aGF0IHRlbGVtZXRyeS4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2UgZm9yIHNjcmFwaW5nIHJlY2VpdmVycywgYXMgdGhleSBrbm93IHRoZSB0YXJnZXQgYWRkcmVzcyBhbmRcbiAqIHBvcnQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRCA9ICdzZXJ2aWNlLmluc3RhbmNlLmlkJztcbi8qKlxuICogQSBuYW1lc3BhY2UgZm9yIGBzZXJ2aWNlLm5hbWVgLlxuICpcbiAqIEBleGFtcGxlIFNob3BcbiAqXG4gKiBAbm90ZSBBIHN0cmluZyB2YWx1ZSBoYXZpbmcgYSBtZWFuaW5nIHRoYXQgaGVscHMgdG8gZGlzdGluZ3Vpc2ggYSBncm91cCBvZiBzZXJ2aWNlcywgZm9yIGV4YW1wbGUgdGhlIHRlYW0gbmFtZSB0aGF0IG93bnMgYSBncm91cCBvZiBzZXJ2aWNlcy4gYHNlcnZpY2UubmFtZWAgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pcXVlIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuIElmIGBzZXJ2aWNlLm5hbWVzcGFjZWAgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgUmVzb3VyY2UgdGhlbiBgc2VydmljZS5uYW1lYCBpcyBleHBlY3RlZCB0byBiZSB1bmlxdWUgZm9yIGFsbCBzZXJ2aWNlcyB0aGF0IGhhdmUgbm8gZXhwbGljaXQgbmFtZXNwYWNlIGRlZmluZWQgKHNvIHRoZSBlbXB0eS91bnNwZWNpZmllZCBuYW1lc3BhY2UgaXMgc2ltcGx5IG9uZSBtb3JlIHZhbGlkIG5hbWVzcGFjZSkuIFplcm8tbGVuZ3RoIG5hbWVzcGFjZSBzdHJpbmcgaXMgYXNzdW1lZCBlcXVhbCB0byB1bnNwZWNpZmllZCBuYW1lc3BhY2UuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfU0VSVklDRV9OQU1FU1BBQ0UgPSAnc2VydmljZS5uYW1lc3BhY2UnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiYXdzX2VjMlwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUExBVEZPUk19LlxuICovXG5leHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FQzIgPSAnYXdzX2VjMic7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJhd3NfZWNzXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QTEFURk9STX0uXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VDUyA9ICdhd3NfZWNzJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImF3c19la3NcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0NMT1VEX1BMQVRGT1JNfS5cbiAqL1xuZXhwb3J0cy5DTE9VRF9QTEFURk9STV9WQUxVRV9BV1NfRUtTID0gJ2F3c19la3MnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiYXdzX2VsYXN0aWNfYmVhbnN0YWxrXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QTEFURk9STX0uXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VMQVNUSUNfQkVBTlNUQUxLID0gJ2F3c19lbGFzdGljX2JlYW5zdGFsayc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJhd3NfbGFtYmRhXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QTEFURk9STX0uXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0xBTUJEQSA9ICdhd3NfbGFtYmRhJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImF3c1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUFJPVklERVJ9LlxuICovXG5leHBvcnRzLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0FXUyA9ICdhd3MnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXdzQmVhbnN0YWxrRGV0ZWN0b3IgPSBleHBvcnRzLkF3c0JlYW5zdGFsa0RldGVjdG9yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKFwidXRpbFwiKTtcbi8qKlxuICogVGhlIEF3c0JlYW5zdGFsa0RldGVjdG9yIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBpZiBhIHByb2Nlc3MgaXMgcnVubmluZyBpbiBBV1MgRWxhc3RpY1xuICogQmVhbnN0YWxrIGFuZCByZXR1cm4gYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGRhdGEgYWJvdXQgdGhlIGJlYW5zdGFsa1xuICogcGx1Z2lucyBvZiBBV1MgWC1SYXkuIFJldHVybnMgYW4gZW1wdHkgUmVzb3VyY2UgaWYgZGV0ZWN0aW9uIGZhaWxzLlxuICpcbiAqIFNlZSBodHRwczovL2RvY3MuYW1hem9uYXdzLmNuL2VuX3VzL3hyYXkvbGF0ZXN0L2Rldmd1aWRlL3hyYXktZ3VpZGUucGRmXG4gKiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IGRldGVjdGluZyBpbmZvcm1hdGlvbiBvZiBFbGFzdGljIEJlYW5zdGFsayBwbHVnaW5zXG4gKi9cbmNvbnN0IERFRkFVTFRfQkVBTlNUQUxLX0NPTkZfUEFUSCA9ICcvdmFyL2VsYXN0aWNiZWFuc3RhbGsveHJheS9lbnZpcm9ubWVudC5jb25mJztcbmNvbnN0IFdJTl9PU19CRUFOU1RBTEtfQ09ORl9QQVRIID0gJ0M6XFxcXFByb2dyYW0gRmlsZXNcXFxcQW1hem9uXFxcXFhSYXlcXFxcZW52aXJvbm1lbnQuY29uZic7XG5jbGFzcyBBd3NCZWFuc3RhbGtEZXRlY3RvciB7XG4gICAgQkVBTlNUQUxLX0NPTkZfUEFUSDtcbiAgICBzdGF0aWMgcmVhZEZpbGVBc3luYyA9IHV0aWwucHJvbWlzaWZ5KGZzLnJlYWRGaWxlKTtcbiAgICBzdGF0aWMgZmlsZUFjY2Vzc0FzeW5jID0gdXRpbC5wcm9taXNpZnkoZnMuYWNjZXNzKTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgICAgIHRoaXMuQkVBTlNUQUxLX0NPTkZfUEFUSCA9IFdJTl9PU19CRUFOU1RBTEtfQ09ORl9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5CRUFOU1RBTEtfQ09ORl9QQVRIID0gREVGQVVMVF9CRUFOU1RBTEtfQ09ORl9QQVRIO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRldGVjdCgpIHtcbiAgICAgICAgY29uc3QgZGF0YVByb21pc2UgPSBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB0aGlzLl9nYXRoZXJEYXRhKCkpO1xuICAgICAgICBjb25zdCBhdHRyTmFtZXMgPSBbXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNLFxuICAgICAgICAgICAgc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRSxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX1NFUlZJQ0VfTkFNRVNQQUNFLFxuICAgICAgICAgICAgc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfVkVSU0lPTixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX1NFUlZJQ0VfSU5TVEFOQ0VfSUQsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgYXR0ck5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICAvLyBFYWNoIHJlc291cmNlIGF0dHJpYnV0ZSBpcyBkZXRlcm1pbmVkIGFzeW5jaHJvbm91c2x5IGluIF9nYXRoZXJEYXRhKCkuXG4gICAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdID0gZGF0YVByb21pc2UudGhlbihkYXRhID0+IGRhdGFbbmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlcyB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3luYyByZXNvdXJjZSBhdHRyaWJ1dGVzIGZvciBBV1MgQmVhbnN0YWxrIGNvbmZpZ3VyYXRpb24gcmVhZCBmcm9tIGZpbGUuXG4gICAgICovXG4gICAgYXN5bmMgX2dhdGhlckRhdGEoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBBd3NCZWFuc3RhbGtEZXRlY3Rvci5maWxlQWNjZXNzQXN5bmModGhpcy5CRUFOU1RBTEtfQ09ORl9QQVRILCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICAgICAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgQXdzQmVhbnN0YWxrRGV0ZWN0b3IucmVhZEZpbGVBc3luYyh0aGlzLkJFQU5TVEFMS19DT05GX1BBVEgsICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShyYXdEYXRhKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSXTogc2VtY29udl8xLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0FXUyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk1dOiBzZW1jb252XzEuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0VMQVNUSUNfQkVBTlNUQUxLLFxuICAgICAgICAgICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVklDRV9OQU1FXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FTEFTVElDX0JFQU5TVEFMSyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfU0VSVklDRV9OQU1FU1BBQ0VdOiBwYXJzZWREYXRhLmVudmlyb25tZW50X25hbWUsXG4gICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX1ZFUlNJT05dOiBwYXJzZWREYXRhLnZlcnNpb25fbGFiZWwsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1NFUlZJQ0VfSU5TVEFOQ0VfSURdOiBwYXJzZWREYXRhLmRlcGxveW1lbnRfaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBBd3NCZWFuc3RhbGtEZXRlY3RvcjogZGlkIG5vdCBkZXRlY3QgcmVzb3VyY2U6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Bd3NCZWFuc3RhbGtEZXRlY3RvciA9IEF3c0JlYW5zdGFsa0RldGVjdG9yO1xuZXhwb3J0cy5hd3NCZWFuc3RhbGtEZXRlY3RvciA9IG5ldyBBd3NCZWFuc3RhbGtEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXdzQmVhbnN0YWxrRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF3c0VjMkRldGVjdG9yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbi8qKlxuICogVGhlIEF3c0VjMkRldGVjdG9yIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBpZiBhIHByb2Nlc3MgaXMgcnVubmluZyBpbiBBV1MgRUMyXG4gKiBhbmQgcmV0dXJuIHJlc291cmNlIGF0dHJpYnV0ZXMgd2l0aCBtZXRhZGF0YSBhYm91dCB0aGUgRUMyIGluc3RhbmNlLlxuICovXG5jbGFzcyBBd3NFYzJEZXRlY3RvciB7XG4gICAgLyoqXG4gICAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZS1pZGVudGl0eS1kb2N1bWVudHMuaHRtbFxuICAgICAqIGZvciBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBBV1MgaW5zdGFuY2UgaWRlbnRpdHkgZG9jdW1lbnRcbiAgICAgKiBhbmQgc3RhbmRhcmQgb2YgSU1EU3YyLlxuICAgICAqL1xuICAgIEFXU19JRE1TX0VORFBPSU5UID0gJzE2OS4yNTQuMTY5LjI1NCc7XG4gICAgQVdTX0lOU1RBTkNFX1RPS0VOX0RPQ1VNRU5UX1BBVEggPSAnL2xhdGVzdC9hcGkvdG9rZW4nO1xuICAgIEFXU19JTlNUQU5DRV9JREVOVElUWV9ET0NVTUVOVF9QQVRIID0gJy9sYXRlc3QvZHluYW1pYy9pbnN0YW5jZS1pZGVudGl0eS9kb2N1bWVudCc7XG4gICAgQVdTX0lOU1RBTkNFX0hPU1RfRE9DVU1FTlRfUEFUSCA9ICcvbGF0ZXN0L21ldGEtZGF0YS9ob3N0bmFtZSc7XG4gICAgQVdTX01FVEFEQVRBX1RUTF9IRUFERVIgPSAnWC1hd3MtZWMyLW1ldGFkYXRhLXRva2VuLXR0bC1zZWNvbmRzJztcbiAgICBBV1NfTUVUQURBVEFfVE9LRU5fSEVBREVSID0gJ1gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbic7XG4gICAgTUlMTElTRUNPTkRfVElNRV9PVVQgPSA1MDAwO1xuICAgIGRldGVjdCgpIHtcbiAgICAgICAgY29uc3QgZGF0YVByb21pc2UgPSBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB0aGlzLl9nYXRoZXJEYXRhKCkpO1xuICAgICAgICBjb25zdCBhdHRyTmFtZXMgPSBbXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfSE9TVF9JRCxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0hPU1RfVFlQRSxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0hPU1RfTkFNRSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBhdHRyTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIC8vIEVhY2ggcmVzb3VyY2UgYXR0cmlidXRlIGlzIGRldGVybWluZWQgYXN5bmNocm9ub3VzbHkgaW4gX2dhdGhlckRhdGEoKS5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0gPSBkYXRhUHJvbWlzZS50aGVuKGRhdGEgPT4gZGF0YVtuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIGNvbm5lY3QgYW5kIG9idGFpbiBhbiBBV1MgaW5zdGFuY2UgSWRlbnRpdHkgZG9jdW1lbnQuXG4gICAgICovXG4gICAgYXN5bmMgX2dhdGhlckRhdGEoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuX2ZldGNoVG9rZW4oKTtcbiAgICAgICAgICAgIGNvbnN0IHsgYWNjb3VudElkLCBpbnN0YW5jZUlkLCBpbnN0YW5jZVR5cGUsIHJlZ2lvbiwgYXZhaWxhYmlsaXR5Wm9uZSB9ID0gYXdhaXQgdGhpcy5fZmV0Y2hJZGVudGl0eSh0b2tlbik7XG4gICAgICAgICAgICBjb25zdCBob3N0bmFtZSA9IGF3YWl0IHRoaXMuX2ZldGNoSG9zdCh0b2tlbik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUl06IHNlbWNvbnZfMS5DTE9VRF9QUk9WSURFUl9WQUxVRV9BV1MsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FQzIsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX0FDQ09VTlRfSURdOiBhY2NvdW50SWQsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTl06IHJlZ2lvbixcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkVdOiBhdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0lEXTogaW5zdGFuY2VJZCxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfSE9TVF9UWVBFXTogaW5zdGFuY2VUeXBlLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX05BTUVdOiBob3N0bmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9mZXRjaFRva2VuKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaG9zdDogdGhpcy5BV1NfSURNU19FTkRQT0lOVCxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuQVdTX0lOU1RBTkNFX1RPS0VOX0RPQ1VNRU5UX1BBVEgsXG4gICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICAgICAgdGltZW91dDogdGhpcy5NSUxMSVNFQ09ORF9USU1FX09VVCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBbdGhpcy5BV1NfTUVUQURBVEFfVFRMX0hFQURFUl06ICc2MCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZmV0Y2hTdHJpbmcob3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIF9mZXRjaElkZW50aXR5KHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLkFXU19JRE1TX0VORFBPSU5ULFxuICAgICAgICAgICAgcGF0aDogdGhpcy5BV1NfSU5TVEFOQ0VfSURFTlRJVFlfRE9DVU1FTlRfUEFUSCxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLk1JTExJU0VDT05EX1RJTUVfT1VULFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFt0aGlzLkFXU19NRVRBREFUQV9UT0tFTl9IRUFERVJdOiB0b2tlbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgdGhpcy5fZmV0Y2hTdHJpbmcob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGlkZW50aXR5KTtcbiAgICB9XG4gICAgYXN5bmMgX2ZldGNoSG9zdCh0b2tlbikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaG9zdDogdGhpcy5BV1NfSURNU19FTkRQT0lOVCxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuQVdTX0lOU1RBTkNFX0hPU1RfRE9DVU1FTlRfUEFUSCxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLk1JTExJU0VDT05EX1RJTUVfT1VULFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFt0aGlzLkFXU19NRVRBREFUQV9UT0tFTl9IRUFERVJdOiB0b2tlbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mZXRjaFN0cmluZyhvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXN0YWJsaXNoZXMgYW4gSFRUUCBjb25uZWN0aW9uIHRvIEFXUyBpbnN0YW5jZSBkb2N1bWVudCB1cmwuXG4gICAgICogSWYgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgb24gYW4gRUMyIGluc3RhbmNlLCB3ZSBzaG91bGQgYmUgYWJsZVxuICAgICAqIHRvIGdldCBiYWNrIGEgdmFsaWQgSlNPTiBkb2N1bWVudC4gUGFyc2VzIHRoYXQgZG9jdW1lbnQgYW5kIHN0b3Jlc1xuICAgICAqIHRoZSBpZGVudGl0eSBwcm9wZXJ0aWVzIGluIGEgbG9jYWwgbWFwLlxuICAgICAqL1xuICAgIGFzeW5jIF9mZXRjaFN0cmluZyhvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFQzIgbWV0YWRhdGEgYXBpIHJlcXVlc3QgdGltZWQgb3V0LicpKTtcbiAgICAgICAgICAgIH0sIHRoaXMuTUlMTElTRUNPTkRfVElNRV9PVVQpO1xuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMsIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHJhd0RhdGEgPSAnJztcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiAocmF3RGF0YSArPSBjaHVuaykpO1xuICAgICAgICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmF3RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHBhZ2UsIHN0YXR1cyBjb2RlOiAnICsgc3RhdHVzQ29kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXEuZW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuYXdzRWMyRGV0ZWN0b3IgPSBuZXcgQXdzRWMyRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF3c0VjMkRldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hd3NFY3NEZXRlY3RvciA9IGV4cG9ydHMuQXdzRWNzRGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBvcyA9IHJlcXVpcmUoXCJvc1wiKTtcbmNvbnN0IEhUVFBfVElNRU9VVF9JTl9NUyA9IDEwMDA7XG4vKipcbiAqIFRoZSBBd3NFY3NEZXRlY3RvciBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgYSBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gQVdTXG4gKiBFQ1MgYW5kIHJldHVybiBhIHtAbGluayBSZXNvdXJjZX0gcG9wdWxhdGVkIHdpdGggZGF0YSBhYm91dCB0aGUgRUNTXG4gKiBwbHVnaW5zIG9mIEFXUyBYLVJheS4gUmV0dXJucyBhbiBlbXB0eSBSZXNvdXJjZSBpZiBkZXRlY3Rpb24gZmFpbHMuXG4gKi9cbmNsYXNzIEF3c0Vjc0RldGVjdG9yIHtcbiAgICBzdGF0aWMgQ09OVEFJTkVSX0lEX0xFTkdUSCA9IDY0O1xuICAgIHN0YXRpYyBDT05UQUlORVJfSURfTEVOR1RIX01JTiA9IDMyO1xuICAgIHN0YXRpYyBERUZBVUxUX0NHUk9VUF9QQVRIID0gJy9wcm9jL3NlbGYvY2dyb3VwJztcbiAgICBzdGF0aWMgcmVhZEZpbGVBc3luYyA9IHV0aWwucHJvbWlzaWZ5KGZzLnJlYWRGaWxlKTtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB0aGlzLl9nZXRBdHRyaWJ1dGVzKCkpO1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIF9nZXRBdHRyaWJ1dGVzKCkge1xuICAgICAgICBpZiAoIXByb2Nlc3MuZW52LkVDU19DT05UQUlORVJfTUVUQURBVEFfVVJJX1Y0ICYmXG4gICAgICAgICAgICAhcHJvY2Vzcy5lbnYuRUNTX0NPTlRBSU5FUl9NRVRBREFUQV9VUkkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ0F3c0Vjc0RldGVjdG9yOiBQcm9jZXNzIGlzIG5vdCBvbiBFQ1MnKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhUHJvbWlzZSA9IHRoaXMuX2dhdGhlckRhdGEoKTtcbiAgICAgICAgY29uc3QgYXR0ck5hbWVzID0gW1xuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfUFJPVklERVIsXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9QTEFURk9STSxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NPTlRBSU5FUl9OQU1FLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ09OVEFJTkVSX0lELFxuICAgICAgICAgICAgLy8gQWRkZWQgaW4gX2FkZE1ldGFkYXRhVjRBdHRyc1xuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQVdTX0VDU19DT05UQUlORVJfQVJOLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQVdTX0VDU19DTFVTVEVSX0FSTixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0FXU19FQ1NfTEFVTkNIVFlQRSxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0FXU19FQ1NfVEFTS19BUk4sXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9BV1NfRUNTX1RBU0tfRkFNSUxZLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQVdTX0VDU19UQVNLX1JFVklTSU9OLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1JFU09VUkNFX0lELFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUsXG4gICAgICAgICAgICAvLyBBZGRlZCBpbiBfYWRkTG9nQXR0cnNcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0FXU19MT0dfR1JPVVBfTkFNRVMsXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9BV1NfTE9HX0dST1VQX0FSTlMsXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9BV1NfTE9HX1NUUkVBTV9OQU1FUyxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0FXU19MT0dfU1RSRUFNX0FSTlMsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgYXR0ck5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICAvLyBFYWNoIHJlc291cmNlIGF0dHJpYnV0ZSBpcyBkZXRlcm1pbmVkIGFzeW5jaHJvbm91c2x5IGluIF9nYXRoZXJEYXRhKCkuXG4gICAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdID0gZGF0YVByb21pc2UudGhlbihkYXRhID0+IGRhdGFbbmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGFzeW5jIF9nYXRoZXJEYXRhKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUFJPVklERVJdOiBzZW1jb252XzEuQ0xPVURfUFJPVklERVJfVkFMVUVfQVdTLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9QTEFURk9STV06IHNlbWNvbnZfMS5DTE9VRF9QTEFURk9STV9WQUxVRV9BV1NfRUNTLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DT05UQUlORVJfTkFNRV06IG9zLmhvc3RuYW1lKCksXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NPTlRBSU5FUl9JRF06IGF3YWl0IHRoaXMuX2dldENvbnRhaW5lcklkKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFVcmwgPSBwcm9jZXNzLmVudi5FQ1NfQ09OVEFJTkVSX01FVEFEQVRBX1VSSV9WNDtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YVVybCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtjb250YWluZXJNZXRhZGF0YSwgdGFza01ldGFkYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgQXdzRWNzRGV0ZWN0b3IuX2dldFVybEFzSnNvbihtZXRhZGF0YVVybCksXG4gICAgICAgICAgICAgICAgICAgIEF3c0Vjc0RldGVjdG9yLl9nZXRVcmxBc0pzb24oYCR7bWV0YWRhdGFVcmx9L3Rhc2tgKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBBd3NFY3NEZXRlY3Rvci5fYWRkTWV0YWRhdGFWNEF0dHJzKGRhdGEsIGNvbnRhaW5lck1ldGFkYXRhLCB0YXNrTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgIEF3c0Vjc0RldGVjdG9yLl9hZGRMb2dBdHRycyhkYXRhLCBjb250YWluZXJNZXRhZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBjb250YWluZXIgSUQgZnJvbSBjZ3JvdXAgZmlsZVxuICAgICAqIEluIEVDUywgZXZlbiBpZiB3ZSBmYWlsIHRvIGZpbmQgdGFyZ2V0IGZpbGVcbiAgICAgKiBvciB0YXJnZXQgZmlsZSBkb2VzIG5vdCBjb250YWluIGNvbnRhaW5lciBJRFxuICAgICAqIHdlIGRvIG5vdCB0aHJvdyBhbiBlcnJvciBidXQgdGhyb3cgd2FybmluZyBtZXNzYWdlXG4gICAgICogYW5kIHRoZW4gcmV0dXJuIHVuZGVmaW5lZC5cbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0Q29udGFpbmVySWQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgQXdzRWNzRGV0ZWN0b3IucmVhZEZpbGVBc3luYyhBd3NFY3NEZXRlY3Rvci5ERUZBVUxUX0NHUk9VUF9QQVRILCAndXRmOCcpO1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSByYXdEYXRhXG4gICAgICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgICAgIC5tYXAocyA9PiBzLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgLy8gUGFzcyAxOiBQcmVmZXIgcHJpbWFyeSBFQ1MgcGF0dGVybiBhY3Jvc3MgYWxsIGxpbmVzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2V4dHJhY3RQcmltYXJ5RWNzQ29udGFpbmVySWQobGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXNzIDI6IEZhbGxiYWNrIHRvIGxhc3Qtc2VnbWVudCB3aXRoIHN0cmljdCBhbGxvd2VkIGNoYXJzIChoZXggKyBoeXBoZW4pXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2V4dHJhY3RMYXN0U2VnbWVudENvbnRhaW5lcklkKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChpZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGFzcyAzOiBMZWdhY3kgZmFsbGJhY2sgdG8gbGFzdCA2NCBjaGFycyAoRG9ja2VyLXN0eWxlKSwga2VlcCBleGlzdGluZyBiZWhhdmlvclxuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9leHRyYWN0TGVnYWN5Q29udGFpbmVySWQobGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ0F3c0Vjc0RldGVjdG9yIGZhaWxlZCB0byByZWFkIGNvbnRhaW5lciBJRCcsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFByZWZlciBwcmltYXJ5IEVDUyBmb3JtYXQgZXh0cmFjdGlvblxuICAgIF9leHRyYWN0UHJpbWFyeUVjc0NvbnRhaW5lcklkKGxpbmUpIHtcbiAgICAgICAgY29uc3QgZWNzUGF0dGVybiA9IC9cXC9lY3NcXC9bYS1mQS1GMC05LV0rXFwvKFthLWZBLUYwLTktXSspJC87XG4gICAgICAgIGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaChlY3NQYXR0ZXJuKTtcbiAgICAgICAgaWYgKG1hdGNoICYmXG4gICAgICAgICAgICBtYXRjaFsxXSAmJlxuICAgICAgICAgICAgbWF0Y2hbMV0ubGVuZ3RoID49IEF3c0Vjc0RldGVjdG9yLkNPTlRBSU5FUl9JRF9MRU5HVEhfTUlOICYmXG4gICAgICAgICAgICBtYXRjaFsxXS5sZW5ndGggPD0gQXdzRWNzRGV0ZWN0b3IuQ09OVEFJTkVSX0lEX0xFTkdUSCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBhY2NlcHQgbGFzdCBwYXRoIHNlZ21lbnQgaWYgaXQgbG9va3MgbGlrZSBhIGNvbnRhaW5lciBpZCAoaGV4ICsgJy0nKVxuICAgIF9leHRyYWN0TGFzdFNlZ21lbnRDb250YWluZXJJZChsaW5lKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgnLycpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBsYXN0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChsYXN0ICYmXG4gICAgICAgICAgICBsYXN0Lmxlbmd0aCA+PSBBd3NFY3NEZXRlY3Rvci5DT05UQUlORVJfSURfTEVOR1RIX01JTiAmJlxuICAgICAgICAgICAgbGFzdC5sZW5ndGggPD0gQXdzRWNzRGV0ZWN0b3IuQ09OVEFJTkVSX0lEX0xFTkdUSCAmJlxuICAgICAgICAgICAgL15bYS1mQS1GMC05LV0rJC8udGVzdChsYXN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gTGVnYWN5IGZhbGxiYWNrOiBrZWVwIGV4aXN0aW5nIGJlaGF2aW9yIHRvIGF2b2lkIGJyZWFraW5nIHVzZXJzL3Rlc3RzXG4gICAgX2V4dHJhY3RMZWdhY3lDb250YWluZXJJZChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IEF3c0Vjc0RldGVjdG9yLkNPTlRBSU5FUl9JRF9MRU5HVEgpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5lLnN1YnN0cmluZyhsaW5lLmxlbmd0aCAtIEF3c0Vjc0RldGVjdG9yLkNPTlRBSU5FUl9JRF9MRU5HVEgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBtZXRhZGF0YS12NC1yZWxhdGVkIHJlc291cmNlIGF0dHJpYnV0ZXMgdG8gYGRhdGFgIChpbi1wbGFjZSlcbiAgICAgKi9cbiAgICBzdGF0aWMgX2FkZE1ldGFkYXRhVjRBdHRycyhkYXRhLCBjb250YWluZXJNZXRhZGF0YSwgdGFza01ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IGxhdW5jaFR5cGUgPSB0YXNrTWV0YWRhdGFbJ0xhdW5jaFR5cGUnXTtcbiAgICAgICAgY29uc3QgdGFza0FybiA9IHRhc2tNZXRhZGF0YVsnVGFza0FSTiddO1xuICAgICAgICBjb25zdCBiYXNlQXJuID0gdGFza0Fybi5zdWJzdHJpbmcoMCwgdGFza0Fybi5sYXN0SW5kZXhPZignOicpKTtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IHRhc2tNZXRhZGF0YVsnQ2x1c3RlciddO1xuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBBd3NFY3NEZXRlY3Rvci5fZ2V0QWNjb3VudEZyb21Bcm4odGFza0Fybik7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IEF3c0Vjc0RldGVjdG9yLl9nZXRSZWdpb25Gcm9tQXJuKHRhc2tBcm4pO1xuICAgICAgICBjb25zdCBhdmFpbGFiaWxpdHlab25lID0gdGFza01ldGFkYXRhPy5BdmFpbGFiaWxpdHlab25lO1xuICAgICAgICBjb25zdCBjbHVzdGVyQXJuID0gY2x1c3Rlci5zdGFydHNXaXRoKCdhcm46JylcbiAgICAgICAgICAgID8gY2x1c3RlclxuICAgICAgICAgICAgOiBgJHtiYXNlQXJufTpjbHVzdGVyLyR7Y2x1c3Rlcn1gO1xuICAgICAgICBjb25zdCBjb250YWluZXJBcm4gPSBjb250YWluZXJNZXRhZGF0YVsnQ29udGFpbmVyQVJOJ107XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy9ibG9iL21haW4vc2VtYW50aWNfY29udmVudGlvbnMvcmVzb3VyY2UvY2xvdWRfcHJvdmlkZXIvYXdzL2Vjcy55YW1sXG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQVdTX0VDU19DT05UQUlORVJfQVJOXSA9IGNvbnRhaW5lckFybjtcbiAgICAgICAgZGF0YVtzZW1jb252XzEuQVRUUl9BV1NfRUNTX0NMVVNURVJfQVJOXSA9IGNsdXN0ZXJBcm47XG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQVdTX0VDU19MQVVOQ0hUWVBFXSA9IGxhdW5jaFR5cGU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQVdTX0VDU19UQVNLX0FSTl0gPSB0YXNrQXJuO1xuICAgICAgICBkYXRhW3NlbWNvbnZfMS5BVFRSX0FXU19FQ1NfVEFTS19GQU1JTFldID0gdGFza01ldGFkYXRhWydGYW1pbHknXTtcbiAgICAgICAgZGF0YVtzZW1jb252XzEuQVRUUl9BV1NfRUNTX1RBU0tfUkVWSVNJT05dID0gdGFza01ldGFkYXRhWydSZXZpc2lvbiddO1xuICAgICAgICBkYXRhW3NlbWNvbnZfMS5BVFRSX0NMT1VEX0FDQ09VTlRfSURdID0gYWNjb3VudElkO1xuICAgICAgICBkYXRhW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTl0gPSByZWdpb247XG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQ0xPVURfUkVTT1VSQ0VfSURdID0gY29udGFpbmVyQXJuO1xuICAgICAgICAvLyBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgaXMgbm90IGF2YWlsYWJsZSBpbiBhbGwgRmFyZ2F0ZSBydW50aW1lc1xuICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Wm9uZSkge1xuICAgICAgICAgICAgZGF0YVtzZW1jb252XzEuQVRUUl9DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORV0gPSBhdmFpbGFiaWxpdHlab25lO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBfYWRkTG9nQXR0cnMoZGF0YSwgY29udGFpbmVyTWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lck1ldGFkYXRhWydMb2dEcml2ZXInXSAhPT0gJ2F3c2xvZ3MnIHx8XG4gICAgICAgICAgICAhY29udGFpbmVyTWV0YWRhdGFbJ0xvZ09wdGlvbnMnXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckFybiA9IGNvbnRhaW5lck1ldGFkYXRhWydDb250YWluZXJBUk4nXTtcbiAgICAgICAgY29uc3QgbG9nT3B0aW9ucyA9IGNvbnRhaW5lck1ldGFkYXRhWydMb2dPcHRpb25zJ107XG4gICAgICAgIGNvbnN0IGxvZ3NSZWdpb24gPSBsb2dPcHRpb25zWydhd3Nsb2dzLXJlZ2lvbiddIHx8XG4gICAgICAgICAgICBBd3NFY3NEZXRlY3Rvci5fZ2V0UmVnaW9uRnJvbUFybihjb250YWluZXJBcm4pO1xuICAgICAgICBjb25zdCBhd3NBY2NvdW50ID0gQXdzRWNzRGV0ZWN0b3IuX2dldEFjY291bnRGcm9tQXJuKGNvbnRhaW5lckFybik7XG4gICAgICAgIGNvbnN0IGxvZ3NHcm91cE5hbWUgPSBsb2dPcHRpb25zWydhd3Nsb2dzLWdyb3VwJ107XG4gICAgICAgIGNvbnN0IGxvZ3NHcm91cEFybiA9IGBhcm46YXdzOmxvZ3M6JHtsb2dzUmVnaW9ufToke2F3c0FjY291bnR9OmxvZy1ncm91cDoke2xvZ3NHcm91cE5hbWV9YDtcbiAgICAgICAgY29uc3QgbG9nc1N0cmVhbU5hbWUgPSBsb2dPcHRpb25zWydhd3Nsb2dzLXN0cmVhbSddO1xuICAgICAgICBjb25zdCBsb2dzU3RyZWFtQXJuID0gYGFybjphd3M6bG9nczoke2xvZ3NSZWdpb259OiR7YXdzQWNjb3VudH06bG9nLWdyb3VwOiR7bG9nc0dyb3VwTmFtZX06bG9nLXN0cmVhbToke2xvZ3NTdHJlYW1OYW1lfWA7XG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQVdTX0xPR19HUk9VUF9OQU1FU10gPSBbbG9nc0dyb3VwTmFtZV07XG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQVdTX0xPR19HUk9VUF9BUk5TXSA9IFtsb2dzR3JvdXBBcm5dO1xuICAgICAgICBkYXRhW3NlbWNvbnZfMS5BVFRSX0FXU19MT0dfU1RSRUFNX05BTUVTXSA9IFtsb2dzU3RyZWFtTmFtZV07XG4gICAgICAgIGRhdGFbc2VtY29udl8xLkFUVFJfQVdTX0xPR19TVFJFQU1fQVJOU10gPSBbbG9nc1N0cmVhbUFybl07XG4gICAgfVxuICAgIHN0YXRpYyBfZ2V0QWNjb3VudEZyb21Bcm4oY29udGFpbmVyQXJuKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL2Fybjphd3M6ZWNzOlteOl0rOihbXjpdKyk6LiovLmV4ZWMoY29udGFpbmVyQXJuKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgX2dldFJlZ2lvbkZyb21Bcm4oY29udGFpbmVyQXJuKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL2Fybjphd3M6ZWNzOihbXjpdKyk6LiovLmV4ZWMoY29udGFpbmVyQXJuKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgX2dldFVybEFzSnNvbih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBodHRwLmdldCh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFJlcXVlc3QgdG8gJyR7dXJsfScgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogQ29uY2F0ZW5hdGUgdGhlIHJlc3BvbnNlIG91dCBvZiBjaHVua3M6XG4gICAgICAgICAgICAgICAgICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9zdHJlYW0uaHRtbCNzdHJlYW1fZXZlbnRfZGF0YVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZUJvZHkgPSAnJztcbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChjaHVuaykgPT4gKHJlc3BvbnNlQm9keSArPSBjaHVuay50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgLy8gQWxsIHRoZSBkYXRhIGhhcyBiZWVuIHJlYWQsIHJlc29sdmUgdGhlIFByb21pc2VcbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShyZXNwb25zZUJvZHkpKTtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHByZXF1ZXN0dXJsLW9wdGlvbnMtY2FsbGJhY2ssIHNlZSB0aGVcbiAgICAgICAgICAgICAgICAgKiAnSW4gdGhlIGNhc2Ugb2YgYSBwcmVtYXR1cmUgY29ubmVjdGlvbiBjbG9zZSBhZnRlciB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQnXG4gICAgICAgICAgICAgICAgICogY2FzZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2V0IGFuIGFnZ3Jlc3NpdmUgdGltZW91dCB0byBwcmV2ZW50IGxvY2stdXBzXG4gICAgICAgICAgICByZXF1ZXN0LnNldFRpbWVvdXQoSFRUUF9USU1FT1VUX0lOX01TLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbm5lY3Rpb24gZXJyb3IsIGRpc2Nvbm5lY3Rpb24sIGV0Yy5cbiAgICAgICAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2VCb2R5UmF3ID0+IEpTT04ucGFyc2UocmVzcG9uc2VCb2R5UmF3KSk7XG4gICAgfVxufVxuZXhwb3J0cy5Bd3NFY3NEZXRlY3RvciA9IEF3c0Vjc0RldGVjdG9yO1xuZXhwb3J0cy5hd3NFY3NEZXRlY3RvciA9IG5ldyBBd3NFY3NEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXdzRWNzRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF3c0Vrc0RldGVjdG9yID0gZXhwb3J0cy5Bd3NFa3NEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgYXBpXzIgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLyoqXG4gKiBUaGUgQXdzRWtzRGV0ZWN0b3IgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGlmIGEgcHJvY2VzcyBpcyBydW5uaW5nIGluIEFXUyBFbGFzdGljXG4gKiBLdWJlcm5ldGVzIGFuZCByZXR1cm4gYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGRhdGEgYWJvdXQgdGhlIEt1YmVybmV0ZXNcbiAqIHBsdWdpbnMgb2YgQVdTIFgtUmF5LiBSZXR1cm5zIGFuIGVtcHR5IFJlc291cmNlIGlmIGRldGVjdGlvbiBmYWlscy5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kb2NzLmFtYXpvbmF3cy5jbi9lbl91cy94cmF5L2xhdGVzdC9kZXZndWlkZS94cmF5LWd1aWRlLnBkZlxuICogZm9yIG1vcmUgZGV0YWlscyBhYm91dCBkZXRlY3RpbmcgaW5mb3JtYXRpb24gZm9yIEVsYXN0aWMgS3ViZXJuZXRlcyBwbHVnaW5zXG4gKi9cbmNsYXNzIEF3c0Vrc0RldGVjdG9yIHtcbiAgICBLOFNfU1ZDX1VSTCA9ICdrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjJztcbiAgICBLOFNfVE9LRU5fUEFUSCA9ICcvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4nO1xuICAgIEs4U19DRVJUX1BBVEggPSAnL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCc7XG4gICAgQVVUSF9DT05GSUdNQVBfUEFUSCA9ICcvYXBpL3YxL25hbWVzcGFjZXMva3ViZS1zeXN0ZW0vY29uZmlnbWFwcy9hd3MtYXV0aCc7XG4gICAgQ1dfQ09ORklHTUFQX1BBVEggPSAnL2FwaS92MS9uYW1lc3BhY2VzL2FtYXpvbi1jbG91ZHdhdGNoL2NvbmZpZ21hcHMvY2x1c3Rlci1pbmZvJztcbiAgICBDT05UQUlORVJfSURfTEVOR1RIID0gNjQ7XG4gICAgREVGQVVMVF9DR1JPVVBfUEFUSCA9ICcvcHJvYy9zZWxmL2Nncm91cCc7XG4gICAgVElNRU9VVF9NUyA9IDIwMDA7XG4gICAgVVRGOF9VTklDT0RFID0gJ3V0ZjgnO1xuICAgIHN0YXRpYyByZWFkRmlsZUFzeW5jID0gdXRpbC5wcm9taXNpZnkoZnMucmVhZEZpbGUpO1xuICAgIHN0YXRpYyBmaWxlQWNjZXNzQXN5bmMgPSB1dGlsLnByb21pc2lmeShmcy5hY2Nlc3MpO1xuICAgIGRldGVjdCgpIHtcbiAgICAgICAgY29uc3QgZGF0YVByb21pc2UgPSBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB0aGlzLl9nYXRoZXJEYXRhKCkpO1xuICAgICAgICBjb25zdCBhdHRyTmFtZXMgPSBbXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUixcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfSzhTX0NMVVNURVJfTkFNRSxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NPTlRBSU5FUl9JRCxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBhdHRyTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIC8vIEVhY2ggcmVzb3VyY2UgYXR0cmlidXRlIGlzIGRldGVybWluZWQgYXN5bmNocm9ub3VzbHkgaW4gX2dhdGhlckRhdGEoKS5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0gPSBkYXRhUHJvbWlzZS50aGVuKGRhdGEgPT4gZGF0YVtuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBBd3NFa3NEZXRlY3RvciBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgYSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gQW1hem9uXG4gICAgICogRWxhc3RpYyBLdWJlcm5ldGVzIGFuZCByZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIHJlc291cmNlIGF0dHJpYnV0ZXNcbiAgICAgKiBkZXRlcm1pbmVkIGZyb20gd2l0aCBpbnN0YW5jZSBtZXRhZGF0YSwgb3IgZW1wdHkgaWYgdGhlIGNvbm5lY3Rpb24gdG9cbiAgICAgKiBrdWJlcm5ldGVzIHByb2Nlc3Mgb3IgYXdzIGNvbmZpZyBtYXBzIGZhaWxzLlxuICAgICAqL1xuICAgIGFzeW5jIF9nYXRoZXJEYXRhKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgQXdzRWtzRGV0ZWN0b3IuZmlsZUFjY2Vzc0FzeW5jKHRoaXMuSzhTX1RPS0VOX1BBVEgpO1xuICAgICAgICAgICAgY29uc3QgazhzY2VydCA9IGF3YWl0IEF3c0Vrc0RldGVjdG9yLnJlYWRGaWxlQXN5bmModGhpcy5LOFNfQ0VSVF9QQVRIKTtcbiAgICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMuX2lzRWtzKGs4c2NlcnQpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklkID0gYXdhaXQgdGhpcy5fZ2V0Q29udGFpbmVySWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJOYW1lID0gYXdhaXQgdGhpcy5fZ2V0Q2x1c3Rlck5hbWUoazhzY2VydCk7XG4gICAgICAgICAgICByZXR1cm4gIWNvbnRhaW5lcklkICYmICFjbHVzdGVyTmFtZVxuICAgICAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSXTogc2VtY29udl8xLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0FXUyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FXU19FS1MsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FXTogY2x1c3Rlck5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DT05UQUlORVJfSURdOiBjb250YWluZXJJZCB8fCAnJyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhcGlfMi5kaWFnLmRlYnVnKCdBd3NFa3NEZXRlY3RvcjogUHJvY2VzcyBpcyBub3QgcnVubmluZyBvbiBLOFM6JywgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBtYWtlIGEgY29ubmVjdGlvbiB0byBBV1MgQ29uZmlnIG1hcCB3aGljaCB3aWxsXG4gICAgICogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBhbiBFS1NcbiAgICAgKiBwcm9jZXNzIGlmIHRoZSBjb25maWcgbWFwIGlzIGVtcHR5IG9yIG5vdFxuICAgICAqL1xuICAgIGFzeW5jIF9pc0VrcyhjZXJ0KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjYTogY2VydCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBhd2FpdCB0aGlzLl9nZXRLOHNDcmVkSGVhZGVyKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaG9zdG5hbWU6IHRoaXMuSzhTX1NWQ19VUkwsXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5BVVRIX0NPTkZJR01BUF9QQVRILFxuICAgICAgICAgICAgdGltZW91dDogdGhpcy5USU1FT1VUX01TLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5fZmV0Y2hTdHJpbmcob3B0aW9ucykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBtYWtlIGEgY29ubmVjdGlvbiB0byBBbWF6b24gQ2xvdWR3YXRjaFxuICAgICAqIENvbmZpZyBNYXBzIHRvIGdyYWIgY2x1c3RlciBuYW1lXG4gICAgICovXG4gICAgYXN5bmMgX2dldENsdXN0ZXJOYW1lKGNlcnQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNhOiBjZXJ0LFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGF3YWl0IHRoaXMuX2dldEs4c0NyZWRIZWFkZXIoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob3N0OiB0aGlzLks4U19TVkNfVVJMLFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuQ1dfQ09ORklHTUFQX1BBVEgsXG4gICAgICAgICAgICB0aW1lb3V0OiB0aGlzLlRJTUVPVVRfTVMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZmV0Y2hTdHJpbmcob3B0aW9ucyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZSkuZGF0YVsnY2x1c3Rlci5uYW1lJ107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFwaV8yLmRpYWcuZGVidWcoJ0Nhbm5vdCBnZXQgY2x1c3RlciBuYW1lIG9uIEVLUycsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZHMgdGhlIEt1YmVybmV0ZXMgdG9rZW4gcGF0aCBhbmQgcmV0dXJucyBrdWJlcm5ldGVzXG4gICAgICogY3JlZGVudGlhbCBoZWFkZXJcbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0SzhzQ3JlZEhlYWRlcigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBBd3NFa3NEZXRlY3Rvci5yZWFkRmlsZUFzeW5jKHRoaXMuSzhTX1RPS0VOX1BBVEgsIHRoaXMuVVRGOF9VTklDT0RFKTtcbiAgICAgICAgICAgIHJldHVybiAnQmVhcmVyICcgKyBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhcGlfMi5kaWFnLmRlYnVnKCdVbmFibGUgdG8gcmVhZCBLdWJlcm5ldGVzIGNsaWVudCB0b2tlbi4nLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgY29udGFpbmVyIElEIGZyb20gY2dyb3VwIGZpbGUgZ2VuZXJhdGVkIGZyb20gZG9ja2VyIHdoaWNoIGxpc3RzIHRoZSBmdWxsXG4gICAgICogdW50cnVuY2F0ZWQgZG9ja2VyIGNvbnRhaW5lciBJRCBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS5cbiAgICAgKlxuICAgICAqIFRoZSBwcmVkZWZpbmVkIHN0cnVjdHVyZSBvZiBjYWxsaW5nIC9wcm9jL3NlbGYvY2dyb3VwIHdoZW4gaW4gYSBkb2NrZXIgY29udGFpbmVyIGhhcyB0aGUgc3RydWN0dXJlOlxuICAgICAqXG4gICAgICogIzp4eHh4eHg6L1xuICAgICAqXG4gICAgICogb3JcbiAgICAgKlxuICAgICAqICM6eHh4eHh4Oi9kb2NrZXIvNjRjaGFyYWN0ZXJJRFxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhhdCBmYWN0IGJ5IGp1c3QgcmVhZGluZyB0aGUgNjQtY2hhcmFjdGVyIElEIGZyb20gdGhlIGVuZCBvZiB0aGVcbiAgICAgKiBmaXJzdCBsaW5lLiBJbiBFS1MsIGV2ZW4gaWYgd2UgZmFpbCB0byBmaW5kIHRhcmdldCBmaWxlIG9yIHRhcmdldCBmaWxlIGRvZXNcbiAgICAgKiBub3QgY29udGFpbiBjb250YWluZXIgSUQgd2UgZG8gbm90IHRocm93IGFuIGVycm9yIGJ1dCB0aHJvdyB3YXJuaW5nIG1lc3NhZ2VcbiAgICAgKiBhbmQgdGhlbiByZXR1cm4gbnVsbCBzdHJpbmdcbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0Q29udGFpbmVySWQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgQXdzRWtzRGV0ZWN0b3IucmVhZEZpbGVBc3luYyh0aGlzLkRFRkFVTFRfQ0dST1VQX1BBVEgsIHRoaXMuVVRGOF9VTklDT0RFKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0RGF0YSA9IHJhd0RhdGEudHJpbSgpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3RyIG9mIHNwbGl0RGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gdGhpcy5DT05UQUlORVJfSURfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKHN0ci5sZW5ndGggLSB0aGlzLkNPTlRBSU5FUl9JRF9MRU5HVEgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzIuZGlhZy5kZWJ1ZyhgQXdzRWtzRGV0ZWN0b3IgZmFpbGVkIHRvIHJlYWQgY29udGFpbmVyIElEOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFc3RhYmxpc2hlcyBhbiBIVFRQIGNvbm5lY3Rpb24gdG8gQVdTIGluc3RhbmNlIGRvY3VtZW50IHVybC5cbiAgICAgKiBJZiB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZyBvbiBhbiBFS1MgaW5zdGFuY2UsIHdlIHNob3VsZCBiZSBhYmxlXG4gICAgICogdG8gZ2V0IGJhY2sgYSB2YWxpZCBKU09OIGRvY3VtZW50LiBQYXJzZXMgdGhhdCBkb2N1bWVudCBhbmQgc3RvcmVzXG4gICAgICogdGhlIGlkZW50aXR5IHByb3BlcnRpZXMgaW4gYSBsb2NhbCBtYXAuXG4gICAgICovXG4gICAgYXN5bmMgX2ZldGNoU3RyaW5nKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0VLUyBtZXRhZGF0YSBhcGkgcmVxdWVzdCB0aW1lZCBvdXQuJykpO1xuICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgcmVzLnNldEVuY29kaW5nKHRoaXMuVVRGOF9VTklDT0RFKTtcbiAgICAgICAgICAgICAgICBsZXQgcmF3RGF0YSA9ICcnO1xuICAgICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IChyYXdEYXRhICs9IGNodW5rKSk7XG4gICAgICAgICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyYXdEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgcGFnZSwgc3RhdHVzIGNvZGU6ICcgKyBzdGF0dXNDb2RlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcS5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Bd3NFa3NEZXRlY3RvciA9IEF3c0Vrc0RldGVjdG9yO1xuZXhwb3J0cy5hd3NFa3NEZXRlY3RvciA9IG5ldyBBd3NFa3NEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXdzRWtzRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF3c0xhbWJkYURldGVjdG9yID0gZXhwb3J0cy5Bd3NMYW1iZGFEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuLyoqXG4gKiBUaGUgQXdzTGFtYmRhRGV0ZWN0b3IgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGlmIGEgcHJvY2VzcyBpcyBydW5uaW5nIGluIEFXUyBMYW1iZGFcbiAqIGFuZCByZXR1cm4gYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGRhdGEgYWJvdXQgdGhlIGVudmlyb25tZW50LlxuICogUmV0dXJucyBhbiBlbXB0eSBSZXNvdXJjZSBpZiBkZXRlY3Rpb24gZmFpbHMuXG4gKi9cbmNsYXNzIEF3c0xhbWJkYURldGVjdG9yIHtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHJ1bm5pbmcgaW5zaWRlIEFXUyBMYW1iZGEgZW52aXJvbm1lbnRcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uRW52ID0gcHJvY2Vzcy5lbnYuQVdTX0VYRUNVVElPTl9FTlY7XG4gICAgICAgIGlmICghZXhlY3V0aW9uRW52Py5zdGFydHNXaXRoKCdBV1NfTGFtYmRhXycpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHByZXNlbnQgaW4gTGFtYmRhIGVudmlyb25tZW50XG4gICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2NvbmZpZ3VyYXRpb24tZW52dmFycy5odG1sI2NvbmZpZ3VyYXRpb24tZW52dmFycy1ydW50aW1lXG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LkFXU19SRUdJT047XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHByb2Nlc3MuZW52LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25WZXJzaW9uID0gcHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9WRVJTSU9OO1xuICAgICAgICBjb25zdCBtZW1vcnlTaXplID0gcHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9NRU1PUllfU0laRTtcbiAgICAgICAgLy8gVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3QgYXZhaWxhYmxlIGluIExhbWJkYSBTbmFwU3RhcnQgZnVuY3Rpb25zXG4gICAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IHByb2Nlc3MuZW52LkFXU19MQU1CREFfTE9HX0dST1VQX05BTUU7XG4gICAgICAgIGNvbnN0IGxvZ1N0cmVhbU5hbWUgPSBwcm9jZXNzLmVudi5BV1NfTEFNQkRBX0xPR19TVFJFQU1fTkFNRTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUl06IHNlbWNvbnZfMS5DTE9VRF9QUk9WSURFUl9WQUxVRV9BV1MsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk1dOiBzZW1jb252XzEuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVdTX0xBTUJEQSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9SRUdJT05dOiByZWdpb24sXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19OQU1FXTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0ZBQVNfVkVSU0lPTl06IGZ1bmN0aW9uVmVyc2lvbixcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9GQUFTX01BWF9NRU1PUlldOiBwYXJzZUludChtZW1vcnlTaXplKSAqIDEwMjQgKiAxMDI0LFxuICAgICAgICB9O1xuICAgICAgICBpZiAobG9nR3JvdXBOYW1lKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX0FXU19MT0dfR1JPVVBfTkFNRVNdID0gW2xvZ0dyb3VwTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvZ1N0cmVhbU5hbWUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRV0gPSBsb2dTdHJlYW1OYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGF0dHJpYnV0ZXMgfTtcbiAgICB9XG59XG5leHBvcnRzLkF3c0xhbWJkYURldGVjdG9yID0gQXdzTGFtYmRhRGV0ZWN0b3I7XG5leHBvcnRzLmF3c0xhbWJkYURldGVjdG9yID0gbmV3IEF3c0xhbWJkYURldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bd3NMYW1iZGFEZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXdzTGFtYmRhRGV0ZWN0b3IgPSBleHBvcnRzLmF3c0Vrc0RldGVjdG9yID0gZXhwb3J0cy5hd3NFY3NEZXRlY3RvciA9IGV4cG9ydHMuYXdzRWMyRGV0ZWN0b3IgPSBleHBvcnRzLmF3c0JlYW5zdGFsa0RldGVjdG9yID0gdm9pZCAwO1xudmFyIEF3c0JlYW5zdGFsa0RldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9Bd3NCZWFuc3RhbGtEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0JlYW5zdGFsa0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBd3NCZWFuc3RhbGtEZXRlY3Rvcl8xLmF3c0JlYW5zdGFsa0RldGVjdG9yOyB9IH0pO1xudmFyIEF3c0VjMkRldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9Bd3NFYzJEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0VjMkRldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBd3NFYzJEZXRlY3Rvcl8xLmF3c0VjMkRldGVjdG9yOyB9IH0pO1xudmFyIEF3c0Vjc0RldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9Bd3NFY3NEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0Vjc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBd3NFY3NEZXRlY3Rvcl8xLmF3c0Vjc0RldGVjdG9yOyB9IH0pO1xudmFyIEF3c0Vrc0RldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9Bd3NFa3NEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0Vrc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBd3NFa3NEZXRlY3Rvcl8xLmF3c0Vrc0RldGVjdG9yOyB9IH0pO1xudmFyIEF3c0xhbWJkYURldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9Bd3NMYW1iZGFEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0xhbWJkYURldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBd3NMYW1iZGFEZXRlY3Rvcl8xLmF3c0xhbWJkYURldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF3c0xhbWJkYURldGVjdG9yID0gZXhwb3J0cy5hd3NFa3NEZXRlY3RvciA9IGV4cG9ydHMuYXdzRWNzRGV0ZWN0b3IgPSBleHBvcnRzLmF3c0VjMkRldGVjdG9yID0gZXhwb3J0cy5hd3NCZWFuc3RhbGtEZXRlY3RvciA9IHZvaWQgMDtcbnZhciBkZXRlY3RvcnNfMSA9IHJlcXVpcmUoXCIuL2RldGVjdG9yc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0JlYW5zdGFsa0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5hd3NCZWFuc3RhbGtEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0VjMkRldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5hd3NFYzJEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0Vjc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5hd3NFY3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0Vrc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5hd3NFa3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF3c0xhbWJkYURldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5hd3NMYW1iZGFEZXRlY3RvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4dHJhY3RDb250YWluZXJJZEZyb21MaW5lID0gZXhwb3J0cy50cnVuY2F0ZVByZWZpeCA9IGV4cG9ydHMuSEVYX1NUUklOR19SRUdFWCA9IGV4cG9ydHMuRE9DS0VSID0gZXhwb3J0cy5DUklfQ09OVEFJTkVSRCA9IGV4cG9ydHMuQ1JJTyA9IGV4cG9ydHMuTUFSS0lOR19QUkVGSVggPSBleHBvcnRzLkhPU1ROQU1FID0gZXhwb3J0cy5VVEY4X1VOSUNPREUgPSBleHBvcnRzLkRFRkFVTFRfQ0dST1VQX1YyX1BBVEggPSBleHBvcnRzLkRFRkFVTFRfQ0dST1VQX1YxX1BBVEggPSBleHBvcnRzLkNPTlRBSU5FUl9JRF9MRU5HVEggPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0cy5DT05UQUlORVJfSURfTEVOR1RIID0gNjQ7XG5leHBvcnRzLkRFRkFVTFRfQ0dST1VQX1YxX1BBVEggPSAnL3Byb2Mvc2VsZi9jZ3JvdXAnO1xuZXhwb3J0cy5ERUZBVUxUX0NHUk9VUF9WMl9QQVRIID0gJy9wcm9jL3NlbGYvbW91bnRpbmZvJztcbmV4cG9ydHMuVVRGOF9VTklDT0RFID0gJ3V0ZjgnO1xuZXhwb3J0cy5IT1NUTkFNRSA9ICdob3N0bmFtZSc7XG5leHBvcnRzLk1BUktJTkdfUFJFRklYID0gWydjb250YWluZXJzJywgJ292ZXJsYXktY29udGFpbmVycyddO1xuZXhwb3J0cy5DUklPID0gJ2NyaW8tJztcbmV4cG9ydHMuQ1JJX0NPTlRBSU5FUkQgPSAnY3JpLWNvbnRhaW5lcmQtJztcbmV4cG9ydHMuRE9DS0VSID0gJ2RvY2tlci0nO1xuZXhwb3J0cy5IRVhfU1RSSU5HX1JFR0VYID0gL15bYS1mMC05XSskL2k7XG5mdW5jdGlvbiB0cnVuY2F0ZVByZWZpeChsYXN0U2VjdGlvbiwgcHJlZml4KSB7XG4gICAgcmV0dXJuIGxhc3RTZWN0aW9uLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbn1cbmV4cG9ydHMudHJ1bmNhdGVQcmVmaXggPSB0cnVuY2F0ZVByZWZpeDtcbmZ1bmN0aW9uIGV4dHJhY3RDb250YWluZXJJZEZyb21MaW5lKGxpbmUpIHtcbiAgICBpZiAoIWxpbmUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBsaW5lLnNwbGl0KCcvJyk7XG4gICAgaWYgKHNlY3Rpb25zLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBsYXN0U2VjdGlvbiA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdO1xuICAgIC8vIEhhbmRsZSBjb250YWluZXJkIHYxLjUuMCsgZm9ybWF0IHdpdGggc3lzdGVtZCBjZ3JvdXAgZHJpdmVyXG4gICAgY29uc3QgY29sb25JbmRleCA9IGxhc3RTZWN0aW9uLmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgaWYgKGNvbG9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxhc3RTZWN0aW9uID0gbGFzdFNlY3Rpb24uc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxKTtcbiAgICB9XG4gICAgLy8gVHJ1bmNhdGUga25vd24gcHJlZml4ZXMgZnJvbSB0aGUgbGFzdCBzZWN0aW9uXG4gICAgaWYgKGxhc3RTZWN0aW9uLnN0YXJ0c1dpdGgoZXhwb3J0cy5DUklPKSkge1xuICAgICAgICBsYXN0U2VjdGlvbiA9IHRydW5jYXRlUHJlZml4KGxhc3RTZWN0aW9uLCBleHBvcnRzLkNSSU8pO1xuICAgIH1cbiAgICBlbHNlIGlmIChsYXN0U2VjdGlvbi5zdGFydHNXaXRoKGV4cG9ydHMuRE9DS0VSKSkge1xuICAgICAgICBsYXN0U2VjdGlvbiA9IHRydW5jYXRlUHJlZml4KGxhc3RTZWN0aW9uLCBleHBvcnRzLkRPQ0tFUik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGxhc3RTZWN0aW9uLnN0YXJ0c1dpdGgoZXhwb3J0cy5DUklfQ09OVEFJTkVSRCkpIHtcbiAgICAgICAgbGFzdFNlY3Rpb24gPSB0cnVuY2F0ZVByZWZpeChsYXN0U2VjdGlvbiwgZXhwb3J0cy5DUklfQ09OVEFJTkVSRCk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBhbnl0aGluZyBhZnRlciB0aGUgZmlyc3QgcGVyaW9kXG4gICAgaWYgKGxhc3RTZWN0aW9uLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgbGFzdFNlY3Rpb24gPSBsYXN0U2VjdGlvbi5zcGxpdCgnLicpWzBdO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGUgcmVtYWluaW5nIHN0cmluZyBpcyBhIHZhbGlkIGhleCBzdHJpbmdcbiAgICBpZiAoZXhwb3J0cy5IRVhfU1RSSU5HX1JFR0VYLnRlc3QobGFzdFNlY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBsYXN0U2VjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZXh0cmFjdENvbnRhaW5lcklkRnJvbUxpbmUgPSBleHRyYWN0Q29udGFpbmVySWRGcm9tTGluZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIENvbnRhaW5lciBJRC4gVXN1YWxseSBhIFVVSUQsIGFzIGZvciBleGFtcGxlIHVzZWQgdG8gW2lkZW50aWZ5IERvY2tlciBjb250YWluZXJzXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvY29udGFpbmVycy9ydW4vI2NvbnRhaW5lci1pZGVudGlmaWNhdGlvbikuIFRoZSBVVUlEIG1pZ2h0IGJlIGFiYnJldmlhdGVkLlxuICpcbiAqIEBleGFtcGxlIGEzYmY5MGUwMDZiMlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9ICdjb250YWluZXIuaWQnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGFpbmVyRGV0ZWN0b3IgPSBleHBvcnRzLkNvbnRhaW5lckRldGVjdG9yID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuY2xhc3MgQ29udGFpbmVyRGV0ZWN0b3Ige1xuICAgIENPTlRBSU5FUl9JRF9MRU5HVEggPSA2NDtcbiAgICBERUZBVUxUX0NHUk9VUF9WMV9QQVRIID0gJy9wcm9jL3NlbGYvY2dyb3VwJztcbiAgICBERUZBVUxUX0NHUk9VUF9WMl9QQVRIID0gJy9wcm9jL3NlbGYvbW91bnRpbmZvJztcbiAgICBVVEY4X1VOSUNPREUgPSAndXRmOCc7XG4gICAgSE9TVE5BTUUgPSAnaG9zdG5hbWUnO1xuICAgIE1BUktJTkdfUFJFRklYID0gWydjb250YWluZXJzJywgJ292ZXJsYXktY29udGFpbmVycyddO1xuICAgIENSSU8gPSAnY3Jpby0nO1xuICAgIENSSV9DT05UQUlORVJEID0gJ2NyaS1jb250YWluZXJkLSc7XG4gICAgRE9DS0VSID0gJ2RvY2tlci0nO1xuICAgIEhFWF9TVFJJTkdfUkVHRVggPSAvXlthLWYwLTldKyQvaTtcbiAgICBzdGF0aWMgcmVhZEZpbGVBc3luYyA9IHV0aWwucHJvbWlzaWZ5KGZzLnJlYWRGaWxlKTtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ09OVEFJTkVSX0lEXTogdGhpcy5fZ2V0Q29udGFpbmVySWRXaXRoU3VwcHJlc3NlZFRyYWNpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlcyB9O1xuICAgIH1cbiAgICBhc3luYyBfZ2V0Q29udGFpbmVySWRXaXRoU3VwcHJlc3NlZFRyYWNpbmcoKSB7XG4gICAgICAgIHJldHVybiBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB0aGlzLl9nZXRDb250YWluZXJJZCgpKTtcbiAgICB9XG4gICAgYXN5bmMgX2dldENvbnRhaW5lcklkVjEoKSB7XG4gICAgICAgIGNvbnN0IHJhd0RhdGEgPSBhd2FpdCBDb250YWluZXJEZXRlY3Rvci5yZWFkRmlsZUFzeW5jKHRoaXMuREVGQVVMVF9DR1JPVVBfVjFfUEFUSCwgdGhpcy5VVEY4X1VOSUNPREUpO1xuICAgICAgICBjb25zdCBzcGxpdERhdGEgPSByYXdEYXRhLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzcGxpdERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklEID0gKDAsIHV0aWxzXzEuZXh0cmFjdENvbnRhaW5lcklkRnJvbUxpbmUpKGxpbmUpO1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcklEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFzeW5jIF9nZXRDb250YWluZXJJZFYyKCkge1xuICAgICAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgQ29udGFpbmVyRGV0ZWN0b3IucmVhZEZpbGVBc3luYyh0aGlzLkRFRkFVTFRfQ0dST1VQX1YyX1BBVEgsIHRoaXMuVVRGOF9VTklDT0RFKTtcbiAgICAgICAgY29uc3Qgc3RyID0gcmF3RGF0YVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLmZpbmQocyA9PiBzLmluY2x1ZGVzKHRoaXMuSE9TVE5BTUUpKTtcbiAgICAgICAgaWYgKCFzdHIpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IHN0ckFycmF5ID0gc3RyPy5zcGxpdCgnLycpID8/IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuTUFSS0lOR19QUkVGSVguaW5jbHVkZXMoc3RyQXJyYXlbaV0pICYmXG4gICAgICAgICAgICAgICAgc3RyQXJyYXlbaSArIDFdPy5sZW5ndGggPT09IHRoaXMuQ09OVEFJTkVSX0lEX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJBcnJheVtpICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvKlxuICAgICAgY2dyb3VwdjEgcGF0aCB3b3VsZCBzdGlsbCBleGlzdCBpbiBjYXNlIG9mIGNvbnRhaW5lciBydW5uaW5nIG9uIHYyXG4gICAgICBidXQgdGhlIGNncm91cHYxIHBhdGggd291bGQgbm8gbG9uZ2VyIGhhdmUgdGhlIGNvbnRhaW5lciBpZCBhbmQgd291bGRcbiAgICAgIGZhbGxiYWNrIG9uIHRoZSBjZ3JvdXB2MiBpbXBsZW1lbnRhdGlvbi5cbiAgICAqL1xuICAgIGFzeW5jIF9nZXRDb250YWluZXJJZCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklkVjEgPSBhd2FpdCB0aGlzLl9nZXRDb250YWluZXJJZFYxKCk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVySWRWMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXJJZFYxOyAvLyBJZiBjb250YWluZXJJZFYxIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgcmV0dXJuIGl0LlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySWRWMiA9IGF3YWl0IHRoaXMuX2dldENvbnRhaW5lcklkVjIoKTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJJZFYyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcklkVjI7IC8vIElmIGNvbnRhaW5lcklkVjIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCByZXR1cm4gaXQuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnQ29udGFpbmVyIERldGVjdG9yIGZhaWxlZCB0byByZWFkIHRoZSBDb250YWluZXIgSUQ6ICcsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gRXhwbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIGlmIG5laXRoZXIgSUQgaXMgZm91bmQuXG4gICAgfVxufVxuZXhwb3J0cy5Db250YWluZXJEZXRlY3RvciA9IENvbnRhaW5lckRldGVjdG9yO1xuZXhwb3J0cy5jb250YWluZXJEZXRlY3RvciA9IG5ldyBDb250YWluZXJEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29udGFpbmVyRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGFpbmVyRGV0ZWN0b3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIENvbnRhaW5lckRldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9Db250YWluZXJEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbnRhaW5lckRldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb250YWluZXJEZXRlY3Rvcl8xLmNvbnRhaW5lckRldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udGFpbmVyRGV0ZWN0b3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGRldGVjdG9yc18xID0gcmVxdWlyZShcIi4vZGV0ZWN0b3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29udGFpbmVyRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRldGVjdG9yc18xLmNvbnRhaW5lckRldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0dDUCA9IGV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0tVQkVSTkVURVNfRU5HSU5FID0gZXhwb3J0cy5DTE9VRF9QTEFURk9STV9WQUxVRV9HQ1BfQ09NUFVURV9FTkdJTkUgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9DTE9VRF9SVU4gPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9DTE9VRF9GVU5DVElPTlMgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9BUFBfRU5HSU5FID0gZXhwb3J0cy5BVFRSX0s4U19DTFVTVEVSX05BTUUgPSBleHBvcnRzLkFUVFJfSE9TVF9UWVBFID0gZXhwb3J0cy5BVFRSX0hPU1RfTkFNRSA9IGV4cG9ydHMuQVRUUl9IT1NUX0lEID0gZXhwb3J0cy5BVFRSX0ZBQVNfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9GQUFTX05BTUUgPSBleHBvcnRzLkFUVFJfRkFBU19JTlNUQU5DRSA9IGV4cG9ydHMuQVRUUl9DTE9VRF9SRUdJT04gPSBleHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSBleHBvcnRzLkFUVFJfQ0xPVURfUExBVEZPUk0gPSBleHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSBleHBvcnRzLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBjbG91ZCBhY2NvdW50IElEIHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0by5cbiAqXG4gKiBAZXhhbXBsZSAxMTExMTExMTExMTFcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnlcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEID0gJ2Nsb3VkLmFjY291bnQuaWQnO1xuLyoqXG4gKiBDbG91ZCByZWdpb25zIG9mdGVuIGhhdmUgbXVsdGlwbGUsIGlzb2xhdGVkIGxvY2F0aW9ucyBrbm93biBhcyB6b25lcyB0byBpbmNyZWFzZSBhdmFpbGFiaWxpdHkuIEF2YWlsYWJpbGl0eSB6b25lIHJlcHJlc2VudHMgdGhlIHpvbmUgd2hlcmUgdGhlIHJlc291cmNlIGlzIHJ1bm5pbmcuXG4gKlxuICogQGV4YW1wbGUgdXMtZWFzdC0xY1xuICpcbiAqIEBub3RlIEF2YWlsYWJpbGl0eSB6b25lcyBhcmUgY2FsbGVkIFwiem9uZXNcIiBvbiBBbGliYWJhIENsb3VkIGFuZCBHb29nbGUgQ2xvdWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSAnY2xvdWQuYXZhaWxhYmlsaXR5X3pvbmUnO1xuLyoqXG4gKiBUaGUgY2xvdWQgcGxhdGZvcm0gaW4gdXNlLlxuICpcbiAqIEBub3RlIFRoZSBwcmVmaXggb2YgdGhlIHNlcnZpY2UgKipTSE9VTEQqKiBtYXRjaCB0aGUgb25lIHNwZWNpZmllZCBpbiBgY2xvdWQucHJvdmlkZXJgLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NMT1VEX1BMQVRGT1JNID0gJ2Nsb3VkLnBsYXRmb3JtJztcbi8qKlxuICogTmFtZSBvZiB0aGUgY2xvdWQgcHJvdmlkZXIuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSAnY2xvdWQucHJvdmlkZXInO1xuLyoqXG4gKiBUaGUgZ2VvZ3JhcGhpY2FsIHJlZ2lvbiB3aXRoaW4gYSBjbG91ZCBwcm92aWRlci4gV2hlbiBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSByZWdpb24gd2hlcmUgdGhlIHJlc291cmNlIG9wZXJhdGVzLiBXaGVuIGNhbGxpbmcgc2VydmljZXMgb3IgQVBJcyBkZXBsb3llZCBvbiBhIGNsb3VkLCB0aGlzIGF0dHJpYnV0ZSBpZGVudGlmaWVzIHRoZSByZWdpb24gd2hlcmUgdGhlIGNhbGxlZCBkZXN0aW5hdGlvbiBpcyBkZXBsb3llZC5cbiAqXG4gKiBAZXhhbXBsZSB1cy1jZW50cmFsMVxuICogQGV4YW1wbGUgdXMtZWFzdC0xXG4gKlxuICogQG5vdGUgUmVmZXIgdG8geW91ciBwcm92aWRlcidzIGRvY3MgdG8gc2VlIHRoZSBhdmFpbGFibGUgcmVnaW9ucywgZm9yIGV4YW1wbGUgW0FsaWJhYmEgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly93d3cuYWxpYmFiYWNsb3VkLmNvbS9oZWxwL2RvYy1kZXRhaWwvNDA2NTQuaHRtKSwgW0FXUyByZWdpb25zXShodHRwczovL2F3cy5hbWF6b24uY29tL2Fib3V0LWF3cy9nbG9iYWwtaW5mcmFzdHJ1Y3R1cmUvcmVnaW9uc19hei8pLCBbQXp1cmUgcmVnaW9uc10oaHR0cHM6Ly9henVyZS5taWNyb3NvZnQuY29tL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9nZW9ncmFwaGllcy8pLCBbR29vZ2xlIENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9hYm91dC9sb2NhdGlvbnMpLCBvciBbVGVuY2VudCBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy50ZW5jZW50Y2xvdWQuY29tL2RvY3VtZW50L3Byb2R1Y3QvMjEzLzYwOTEpLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NMT1VEX1JFR0lPTiA9ICdjbG91ZC5yZWdpb24nO1xuLyoqXG4gKiBUaGUgZXhlY3V0aW9uIGVudmlyb25tZW50IElEIGFzIGEgc3RyaW5nLCB0aGF0IHdpbGwgYmUgcG90ZW50aWFsbHkgcmV1c2VkIGZvciBvdGhlciBpbnZvY2F0aW9ucyB0byB0aGUgc2FtZSBmdW5jdGlvbi9mdW5jdGlvbiB2ZXJzaW9uLlxuICpcbiAqIEBleGFtcGxlIDIwMjEvMDYvMjgvWyRMQVRFU1RdMmYzOTllYjE0NTM3NDQ3ZGEwNWFiMmEyZTM5MzA5ZGVcbiAqXG4gKiBAbm90ZSAtICoqQVdTIExhbWJkYToqKiBVc2UgdGhlIChmdWxsKSBsb2cgc3RyZWFtIG5hbWUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfRkFBU19JTlNUQU5DRSA9ICdmYWFzLmluc3RhbmNlJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNpbmdsZSBmdW5jdGlvbiB0aGF0IHRoaXMgcnVudGltZSBpbnN0YW5jZSBleGVjdXRlcy5cbiAqXG4gKiBAZXhhbXBsZSBteS1mdW5jdGlvblxuICogQGV4YW1wbGUgbXlhenVyZWZ1bmN0aW9uYXBwL3NvbWUtZnVuY3Rpb24tbmFtZVxuICpcbiAqIEBub3RlIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGFzIGNvbmZpZ3VyZWQvZGVwbG95ZWQgb24gdGhlIEZhYVNcbiAqIHBsYXRmb3JtIGFuZCBpcyB1c3VhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFja1xuICogZnVuY3Rpb24gKHdoaWNoIG1heSBiZSBzdG9yZWQgaW4gdGhlXG4gKiBbYGNvZGUubmFtZXNwYWNlYC9gY29kZS5mdW5jdGlvbi5uYW1lYF0oL2RvY3MvZ2VuZXJhbC9hdHRyaWJ1dGVzLm1kI3NvdXJjZS1jb2RlLWF0dHJpYnV0ZXMpXG4gKiBzcGFuIGF0dHJpYnV0ZXMpLlxuICpcbiAqIEZvciBzb21lIGNsb3VkIHByb3ZpZGVycywgdGhlIGFib3ZlIGRlZmluaXRpb24gaXMgYW1iaWd1b3VzLiBUaGUgZm9sbG93aW5nXG4gKiBkZWZpbml0aW9uIG9mIGZ1bmN0aW9uIG5hbWUgKipNVVNUKiogYmUgdXNlZCBmb3IgdGhpcyBhdHRyaWJ1dGVcbiAqIChhbmQgY29uc2VxdWVudGx5IHRoZSBzcGFuIG5hbWUpIGZvciB0aGUgbGlzdGVkIGNsb3VkIHByb3ZpZGVycy9wcm9kdWN0czpcbiAqXG4gKiAgIC0gKipBenVyZToqKiAgVGhlIGZ1bGwgbmFtZSBgPEZVTkNBUFA+LzxGVU5DPmAsIGkuZS4sIGZ1bmN0aW9uIGFwcCBuYW1lXG4gKiAgICAgZm9sbG93ZWQgYnkgYSBmb3J3YXJkIHNsYXNoIGZvbGxvd2VkIGJ5IHRoZSBmdW5jdGlvbiBuYW1lICh0aGlzIGZvcm1cbiAqICAgICBjYW4gYWxzbyBiZSBzZWVuIGluIHRoZSByZXNvdXJjZSBKU09OIGZvciB0aGUgZnVuY3Rpb24pLlxuICogICAgIFRoaXMgbWVhbnMgdGhhdCBhIHNwYW4gYXR0cmlidXRlICoqTVVTVCoqIGJlIHVzZWQsIGFzIGFuIEF6dXJlIGZ1bmN0aW9uXG4gKiAgICAgYXBwIGNhbiBob3N0IG11bHRpcGxlIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIHVzdWFsbHkgc2hhcmVcbiAqICAgICBhIFRyYWNlclByb3ZpZGVyIChzZWUgYWxzbyB0aGUgYGNsb3VkLnJlc291cmNlX2lkYCBhdHRyaWJ1dGUpLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0ZBQVNfTkFNRSA9ICdmYWFzLm5hbWUnO1xuLyoqXG4gKiBUaGUgaW1tdXRhYmxlIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBleGFtcGxlIDI2XG4gKiBAZXhhbXBsZSBwaW5rZnJvaWQtMDAwMDJcbiAqXG4gKiBAbm90ZSBEZXBlbmRpbmcgb24gdGhlIGNsb3VkIHByb3ZpZGVyIGFuZCBwbGF0Zm9ybSwgdXNlOlxuICpcbiAqICAgLSAqKkFXUyBMYW1iZGE6KiogVGhlIFtmdW5jdGlvbiB2ZXJzaW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLXZlcnNpb25zLmh0bWwpXG4gKiAgICAgKGFuIGludGVnZXIgcmVwcmVzZW50ZWQgYXMgYSBkZWNpbWFsIHN0cmluZykuXG4gKiAgIC0gKipHb29nbGUgQ2xvdWQgUnVuIChTZXJ2aWNlcyk6KiogVGhlIFtyZXZpc2lvbl0oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3J1bi9kb2NzL21hbmFnaW5nL3JldmlzaW9ucylcbiAqICAgICAoaS5lLiwgdGhlIGZ1bmN0aW9uIG5hbWUgcGx1cyB0aGUgcmV2aXNpb24gc3VmZml4KS5cbiAqICAgLSAqKkdvb2dsZSBDbG91ZCBGdW5jdGlvbnM6KiogVGhlIHZhbHVlIG9mIHRoZVxuICogICAgIFtgS19SRVZJU0lPTmAgZW52aXJvbm1lbnQgdmFyaWFibGVdKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9mdW5jdGlvbnMvZG9jcy9lbnYtdmFyI3J1bnRpbWVfZW52aXJvbm1lbnRfdmFyaWFibGVzX3NldF9hdXRvbWF0aWNhbGx5KS5cbiAqICAgLSAqKkF6dXJlIEZ1bmN0aW9uczoqKiBOb3QgYXBwbGljYWJsZS4gRG8gbm90IHNldCB0aGlzIGF0dHJpYnV0ZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9GQUFTX1ZFUlNJT04gPSAnZmFhcy52ZXJzaW9uJztcbi8qKlxuICogVW5pcXVlIGhvc3QgSUQuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBpbnN0YW5jZV9pZCBhc3NpZ25lZCBieSB0aGUgY2xvdWQgcHJvdmlkZXIuIEZvciBub24tY29udGFpbmVyaXplZCBzeXN0ZW1zLCB0aGlzIHNob3VsZCBiZSB0aGUgYG1hY2hpbmUtaWRgLiBTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgc291cmNlcyB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSBgbWFjaGluZS1pZGAgYmFzZWQgb24gb3BlcmF0aW5nIHN5c3RlbS5cbiAqXG4gKiBAZXhhbXBsZSBmZGJmNzllOGFmOTRjYjdmOWU4ZGYzNjc4OTE4NzA1MlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSAnaG9zdC5pZCc7XG4vKipcbiAqIE5hbWUgb2YgdGhlIGhvc3QuIE9uIFVuaXggc3lzdGVtcywgaXQgbWF5IGNvbnRhaW4gd2hhdCB0aGUgaG9zdG5hbWUgY29tbWFuZCByZXR1cm5zLCBvciB0aGUgZnVsbHkgcXVhbGlmaWVkIGhvc3RuYW1lLCBvciBhbm90aGVyIG5hbWUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLlxuICpcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnktdGVzdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfTkFNRSA9ICdob3N0Lm5hbWUnO1xuLyoqXG4gKiBUeXBlIG9mIGhvc3QuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBtYWNoaW5lIHR5cGUuXG4gKlxuICogQGV4YW1wbGUgbjEtc3RhbmRhcmQtMVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfVFlQRSA9ICdob3N0LnR5cGUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY2x1c3Rlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWNsdXN0ZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FID0gJ2s4cy5jbHVzdGVyLm5hbWUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiZ2NwX2FwcF9lbmdpbmVcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0NMT1VEX1BMQVRGT1JNfS5cbiAqXG4gKiBHb29nbGUgQ2xvdWQgQXBwIEVuZ2luZSAoR0FFKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0FQUF9FTkdJTkUgPSAnZ2NwX2FwcF9lbmdpbmUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiZ2NwX2Nsb3VkX2Z1bmN0aW9uc1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUExBVEZPUk19LlxuICpcbiAqIEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgKEdDRilcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9DTE9VRF9GVU5DVElPTlMgPSAnZ2NwX2Nsb3VkX2Z1bmN0aW9ucyc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJnY3BfY2xvdWRfcnVuXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QTEFURk9STX0uXG4gKlxuICogR29vZ2xlIENsb3VkIFJ1blxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0NMT1VEX1JVTiA9ICdnY3BfY2xvdWRfcnVuJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImdjcF9jb21wdXRlX2VuZ2luZVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUExBVEZPUk19LlxuICpcbiAqIEdvb2dsZSBDbG91ZCBDb21wdXRlIEVuZ2luZSAoR0NFKVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0NPTVBVVEVfRU5HSU5FID0gJ2djcF9jb21wdXRlX2VuZ2luZSc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJnY3Bfa3ViZXJuZXRlc19lbmdpbmVcIiBmb3IgYXR0cmlidXRlIHtAbGluayBBVFRSX0NMT1VEX1BMQVRGT1JNfS5cbiAqXG4gKiBHb29nbGUgQ2xvdWQgS3ViZXJuZXRlcyBFbmdpbmUgKEdLRSlcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9LVUJFUk5FVEVTX0VOR0lORSA9ICdnY3Bfa3ViZXJuZXRlc19lbmdpbmUnO1xuLyoqXG4gKiBFbnVtIHZhbHVlIFwiZ2NwXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QUk9WSURFUn0uXG4gKlxuICogR29vZ2xlIENsb3VkIFBsYXRmb3JtXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5DTE9VRF9QUk9WSURFUl9WQUxVRV9HQ1AgPSAnZ2NwJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbWNvbnYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGRlZmF1bHRTZXJ2aWNlTmFtZSgpIHtcbiAgICByZXR1cm4gYHVua25vd25fc2VydmljZToke3Byb2Nlc3MuYXJndjB9YDtcbn1cbmV4cG9ydHMuZGVmYXVsdFNlcnZpY2VOYW1lID0gZGVmYXVsdFNlcnZpY2VOYW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdC1zZXJ2aWNlLW5hbWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdFNlcnZpY2VOYW1lID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBkZWZhdWx0X3NlcnZpY2VfbmFtZV8xID0gcmVxdWlyZShcIi4vZGVmYXVsdC1zZXJ2aWNlLW5hbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0U2VydmljZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmF1bHRfc2VydmljZV9uYW1lXzEuZGVmYXVsdFNlcnZpY2VOYW1lOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFNlcnZpY2VOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZGVmYXVsdFNlcnZpY2VOYW1lOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5pc1Byb21pc2VMaWtlID0gdm9pZCAwO1xuY29uc3QgaXNQcm9taXNlTGlrZSA9ICh2YWwpID0+IHtcbiAgICByZXR1cm4gKHZhbCAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicpO1xufTtcbmV4cG9ydHMuaXNQcm9taXNlTGlrZSA9IGlzUHJvbWlzZUxpa2U7XG5mdW5jdGlvbiBpZGVudGl0eShfKSB7XG4gICAgcmV0dXJuIF87XG59XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZXhwb3J0cy5lbXB0eVJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21EZXRlY3RlZFJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuY2xhc3MgUmVzb3VyY2VJbXBsIHtcbiAgICBfcmF3QXR0cmlidXRlcztcbiAgICBfYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyA9IGZhbHNlO1xuICAgIF9zY2hlbWFVcmw7XG4gICAgX21lbW9pemVkQXR0cmlidXRlcztcbiAgICBzdGF0aWMgRnJvbUF0dHJpYnV0ZUxpc3QoYXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgUmVzb3VyY2VJbXBsKHt9LCBvcHRpb25zKTtcbiAgICAgICAgcmVzLl9yYXdBdHRyaWJ1dGVzID0gZ3VhcmRlZFJhd0F0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgICAgIHJlcy5fYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyA9XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmZpbHRlcigoW18sIHZhbF0pID0+ICgwLCB1dGlsc18xLmlzUHJvbWlzZUxpa2UpKHZhbCkpLmxlbmd0aCA+IDA7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIEEgZGljdGlvbmFyeSBvZiBhdHRyaWJ1dGVzIHdpdGggc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IHByb3ZpZGVcbiAgICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW50aXR5IGFzIG51bWJlcnMsIHN0cmluZ3Mgb3IgYm9vbGVhbnNcbiAgICAgKiBUT0RPOiBDb25zaWRlciB0byBhZGQgY2hlY2svdmFsaWRhdGlvbiBvbiBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIHJlc291cmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSByZXNvdXJjZS5hdHRyaWJ1dGVzID8/IHt9O1xuICAgICAgICB0aGlzLl9yYXdBdHRyaWJ1dGVzID0gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykubWFwKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSkge1xuICAgICAgICAgICAgICAgIC8vIHNpZGUtZWZmZWN0XG4gICAgICAgICAgICAgICAgdGhpcy5fYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2ssIHZdO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmF3QXR0cmlidXRlcyA9IGd1YXJkZWRSYXdBdHRyaWJ1dGVzKHRoaXMuX3Jhd0F0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLl9zY2hlbWFVcmwgPSB2YWxpZGF0ZVNjaGVtYVVybChvcHRpb25zPy5zY2hlbWFVcmwpO1xuICAgIH1cbiAgICBnZXQgYXN5bmNBdHRyaWJ1dGVzUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jQXR0cmlidXRlc1BlbmRpbmc7XG4gICAgfVxuICAgIGFzeW5jIHdhaXRGb3JBc3luY0F0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yYXdBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbaywgdl0gPSB0aGlzLl9yYXdBdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgICAgdGhpcy5fcmF3QXR0cmlidXRlc1tpXSA9IFtrLCAoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSA/IGF3YWl0IHYgOiB2XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hc3luY0F0dHJpYnV0ZXNQZW5kaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGdldCBhdHRyaWJ1dGVzKCkge1xuICAgICAgICBpZiAodGhpcy5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdBY2Nlc3NpbmcgcmVzb3VyY2UgYXR0cmlidXRlcyBiZWZvcmUgYXN5bmMgYXR0cmlidXRlcyBzZXR0bGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21lbW9pemVkQXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lbW9pemVkQXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRycyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLl9yYXdBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIHV0aWxzXzEuaXNQcm9taXNlTGlrZSkodikpIHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBVbnNldHRsZWQgcmVzb3VyY2UgYXR0cmlidXRlICR7a30gc2tpcHBlZGApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGF0dHJzW2tdID8/PSB2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG9ubHkgbWVtb2l6ZSBvdXRwdXQgaWYgYWxsIGF0dHJpYnV0ZXMgYXJlIHNldHRsZWRcbiAgICAgICAgaWYgKCF0aGlzLl9hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9tZW1vaXplZEF0dHJpYnV0ZXMgPSBhdHRycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0cnM7XG4gICAgfVxuICAgIGdldFJhd0F0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYXdBdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBnZXQgc2NoZW1hVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1hVXJsO1xuICAgIH1cbiAgICBtZXJnZShyZXNvdXJjZSkge1xuICAgICAgICBpZiAocmVzb3VyY2UgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnRcbiAgICAgICAgLy8gU3BlYyBzdGF0ZXMgaW5jb21pbmcgYXR0cmlidXRlcyBvdmVycmlkZSBleGlzdGluZyBhdHRyaWJ1dGVzXG4gICAgICAgIGNvbnN0IG1lcmdlZFNjaGVtYVVybCA9IG1lcmdlU2NoZW1hVXJsKHRoaXMsIHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IG1lcmdlZFNjaGVtYVVybFxuICAgICAgICAgICAgPyB7IHNjaGVtYVVybDogbWVyZ2VkU2NoZW1hVXJsIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gUmVzb3VyY2VJbXBsLkZyb21BdHRyaWJ1dGVMaXN0KFsuLi5yZXNvdXJjZS5nZXRSYXdBdHRyaWJ1dGVzKCksIC4uLnRoaXMuZ2V0UmF3QXR0cmlidXRlcygpXSwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb3VyY2VGcm9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFJlc291cmNlSW1wbC5Gcm9tQXR0cmlidXRlTGlzdChPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnJlc291cmNlRnJvbUF0dHJpYnV0ZXMgPSByZXNvdXJjZUZyb21BdHRyaWJ1dGVzO1xuZnVuY3Rpb24gcmVzb3VyY2VGcm9tRGV0ZWN0ZWRSZXNvdXJjZShkZXRlY3RlZFJlc291cmNlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUltcGwoZGV0ZWN0ZWRSZXNvdXJjZSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnJlc291cmNlRnJvbURldGVjdGVkUmVzb3VyY2UgPSByZXNvdXJjZUZyb21EZXRlY3RlZFJlc291cmNlO1xuZnVuY3Rpb24gZW1wdHlSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2VGcm9tQXR0cmlidXRlcyh7fSk7XG59XG5leHBvcnRzLmVtcHR5UmVzb3VyY2UgPSBlbXB0eVJlc291cmNlO1xuZnVuY3Rpb24gZGVmYXVsdFJlc291cmNlKCkge1xuICAgIHJldHVybiByZXNvdXJjZUZyb21BdHRyaWJ1dGVzKHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdOiAoMCwgcGxhdGZvcm1fMS5kZWZhdWx0U2VydmljZU5hbWUpKCksXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV06IGNvcmVfMS5TREtfSU5GT1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV0sXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19OQU1FXTogY29yZV8xLlNES19JTkZPW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX05BTUVdLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfVkVSU0lPTl06IGNvcmVfMS5TREtfSU5GT1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19WRVJTSU9OXSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZGVmYXVsdFJlc291cmNlO1xuZnVuY3Rpb24gZ3VhcmRlZFJhd0F0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBrLFxuICAgICAgICAgICAgICAgIHYuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygncHJvbWlzZSByZWplY3Rpb24gZm9yIHJlc291cmNlIGF0dHJpYnV0ZTogJXMgLSAlcycsIGssIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaywgdl07XG4gICAgfSk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYVVybChzY2hlbWFVcmwpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYVVybCA9PT0gJ3N0cmluZycgfHwgc2NoZW1hVXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVVybDtcbiAgICB9XG4gICAgYXBpXzEuZGlhZy53YXJuKCdTY2hlbWEgVVJMIG11c3QgYmUgc3RyaW5nIG9yIHVuZGVmaW5lZCwgZ290ICVzLiBTY2hlbWEgVVJMIHdpbGwgYmUgaWdub3JlZC4nLCBzY2hlbWFVcmwpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBtZXJnZVNjaGVtYVVybChvbGQsIHVwZGF0aW5nKSB7XG4gICAgY29uc3Qgb2xkU2NoZW1hVXJsID0gb2xkPy5zY2hlbWFVcmw7XG4gICAgY29uc3QgdXBkYXRpbmdTY2hlbWFVcmwgPSB1cGRhdGluZz8uc2NoZW1hVXJsO1xuICAgIGNvbnN0IGlzT2xkRW1wdHkgPSBvbGRTY2hlbWFVcmwgPT09IHVuZGVmaW5lZCB8fCBvbGRTY2hlbWFVcmwgPT09ICcnO1xuICAgIGNvbnN0IGlzVXBkYXRpbmdFbXB0eSA9IHVwZGF0aW5nU2NoZW1hVXJsID09PSB1bmRlZmluZWQgfHwgdXBkYXRpbmdTY2hlbWFVcmwgPT09ICcnO1xuICAgIGlmIChpc09sZEVtcHR5KSB7XG4gICAgICAgIHJldHVybiB1cGRhdGluZ1NjaGVtYVVybDtcbiAgICB9XG4gICAgaWYgKGlzVXBkYXRpbmdFbXB0eSkge1xuICAgICAgICByZXR1cm4gb2xkU2NoZW1hVXJsO1xuICAgIH1cbiAgICBpZiAob2xkU2NoZW1hVXJsID09PSB1cGRhdGluZ1NjaGVtYVVybCkge1xuICAgICAgICByZXR1cm4gb2xkU2NoZW1hVXJsO1xuICAgIH1cbiAgICBhcGlfMS5kaWFnLndhcm4oJ1NjaGVtYSBVUkwgbWVyZ2UgY29uZmxpY3Q6IG9sZCByZXNvdXJjZSBoYXMgXCIlc1wiLCB1cGRhdGluZyByZXNvdXJjZSBoYXMgXCIlc1wiLiBSZXN1bHRpbmcgcmVzb3VyY2Ugd2lsbCBoYXZlIHVuZGVmaW5lZCBTY2hlbWEgVVJMLicsIG9sZFNjaGVtYVVybCwgdXBkYXRpbmdTY2hlbWFVcmwpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXNvdXJjZUltcGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRldGVjdFJlc291cmNlcyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFJlc291cmNlSW1wbF8xID0gcmVxdWlyZShcIi4vUmVzb3VyY2VJbXBsXCIpO1xuLyoqXG4gKiBSdW5zIGFsbCByZXNvdXJjZSBkZXRlY3RvcnMgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgbWVyZ2VkIGludG8gYSBzaW5nbGUgUmVzb3VyY2UuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciByZXNvdXJjZSBkZXRlY3Rpb25cbiAqL1xuY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gKGNvbmZpZy5kZXRlY3RvcnMgfHwgW10pLm1hcChkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gKDAsIFJlc291cmNlSW1wbF8xLnJlc291cmNlRnJvbURldGVjdGVkUmVzb3VyY2UpKGQuZGV0ZWN0KGNvbmZpZykpO1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtkLmNvbnN0cnVjdG9yLm5hbWV9IGZvdW5kIHJlc291cmNlLmAsIHJlc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtkLmNvbnN0cnVjdG9yLm5hbWV9IGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIFJlc291cmNlSW1wbF8xLmVtcHR5UmVzb3VyY2UpKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb3VyY2VzLnJlZHVjZSgoYWNjLCByZXNvdXJjZSkgPT4gYWNjLm1lcmdlKHJlc291cmNlKSwgKDAsIFJlc291cmNlSW1wbF8xLmVtcHR5UmVzb3VyY2UpKCkpO1xufTtcbmV4cG9ydHMuZGV0ZWN0UmVzb3VyY2VzID0gZGV0ZWN0UmVzb3VyY2VzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGV0ZWN0LXJlc291cmNlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW52RGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEVudkRldGVjdG9yIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYW5kIGNyZWF0ZSBhIFJlc291cmNlXG4gKiBmcm9tIHRoZSBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKi9cbmNsYXNzIEVudkRldGVjdG9yIHtcbiAgICAvLyBUeXBlLCBhdHRyaWJ1dGUga2V5cywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgc2hvdWxkIG5vdCBleGNlZWQgMjU2IGNoYXJhY3RlcnMuXG4gICAgX01BWF9MRU5HVEggPSAyNTU7XG4gICAgLy8gT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcy5cbiAgICBfQ09NTUFfU0VQQVJBVE9SID0gJywnO1xuICAgIC8vIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBjb250YWlucyBrZXkgdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgIF9MQUJFTF9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4gICAgX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSUyA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBncmVhdGVyIHRoYW4gMCBhbmQgbm90IGV4Y2VlZCAnICtcbiAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICcgY2hhcmFjdGVycy4nO1xuICAgIF9FUlJPUl9NRVNTQUdFX0lOVkFMSURfVkFMVUUgPSAnc2hvdWxkIGJlIGEgQVNDSUkgc3RyaW5nIHdpdGggYSBsZW5ndGggbm90IGV4Y2VlZCAnICtcbiAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICcgY2hhcmFjdGVycy4nO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGF0dHJpYnV0ZXMgZnJvbSB0aGVcbiAgICAgKiBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnQgdmFyaWFibGUuIE5vdGUgdGhpcyBpcyBhbiBhc3luY1xuICAgICAqIGZ1bmN0aW9uIHRvIGNvbmZvcm0gdG8gdGhlIERldGVjdG9yIGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIHJlc291cmNlIGRldGVjdGlvbiBjb25maWdcbiAgICAgKi9cbiAgICBkZXRlY3QoX2NvbmZpZykge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMnKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX1NFUlZJQ0VfTkFNRScpO1xuICAgICAgICBpZiAocmF3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBdHRyaWJ1dGVzID0gdGhpcy5fcGFyc2VSZXNvdXJjZUF0dHJpYnV0ZXMocmF3QXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBwYXJzZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgRW52RGV0ZWN0b3IgZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VydmljZU5hbWUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV0gPSBzZXJ2aWNlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXR0cmlidXRlIG1hcCBmcm9tIHRoZSBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnRcbiAgICAgKiB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUzogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzIGRlc2NyaWJpbmdcbiAgICAgKiB0aGUgc291cmNlIGluIG1vcmUgZGV0YWlsLCBlLmcuIOKAnGtleTE9dmFsMSxrZXkyPXZhbDLigJ0uIERvbWFpbiBuYW1lcyBhbmRcbiAgICAgKiBwYXRocyBhcmUgYWNjZXB0ZWQgYXMgYXR0cmlidXRlIGtleXMuIFZhbHVlcyBtYXkgYmUgcXVvdGVkIG9yIHVucXVvdGVkIGluXG4gICAgICogZ2VuZXJhbC4gSWYgYSB2YWx1ZSBjb250YWlucyB3aGl0ZXNwYWNlLCA9LCBvciBcIiBjaGFyYWN0ZXJzLCBpdCBtdXN0XG4gICAgICogYWx3YXlzIGJlIHF1b3RlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByYXdFbnZBdHRyaWJ1dGVzIFRoZSByZXNvdXJjZSBhdHRyaWJ1dGVzIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3RcbiAgICAgKiBvZiBrZXkvdmFsdWUgcGFpcnMuXG4gICAgICogQHJldHVybnMgVGhlIHNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIF9wYXJzZVJlc291cmNlQXR0cmlidXRlcyhyYXdFbnZBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghcmF3RW52QXR0cmlidXRlcylcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBjb25zdCByYXdBdHRyaWJ1dGVzID0gcmF3RW52QXR0cmlidXRlcy5zcGxpdCh0aGlzLl9DT01NQV9TRVBBUkFUT1IsIC0xKTtcbiAgICAgICAgZm9yIChjb25zdCByYXdBdHRyaWJ1dGUgb2YgcmF3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWVQYWlyID0gcmF3QXR0cmlidXRlLnNwbGl0KHRoaXMuX0xBQkVMX0tFWV9WQUxVRV9TUExJVFRFUiwgLTEpO1xuICAgICAgICAgICAgaWYgKGtleVZhbHVlUGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBrZXlWYWx1ZVBhaXI7XG4gICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgdHJpbW1lZC5cbiAgICAgICAgICAgIGtleSA9IGtleS50cmltKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKS5zcGxpdCgvXlwifFwiJC8pLmpvaW4oJycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkQW5kTm90RW1wdHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0cmlidXRlIGtleSAke3RoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSU31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dHJpYnV0ZSB2YWx1ZSAke3RoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9WQUxVRX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggbm90IGV4Y2VlZCBfTUFYX0xFTkdUSCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ciBUaGUgU3RyaW5nIHRvIGJlIHZhbGlkYXRlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBTdHJpbmcgaXMgdmFsaWQuXG4gICAgICovXG4gICAgX2lzVmFsaWQobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZS5sZW5ndGggPD0gdGhpcy5fTUFYX0xFTkdUSCAmJiB0aGlzLl9pc0JhZ2dhZ2VPY3RldFN0cmluZyhuYW1lKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2JhZ2dhZ2UvI2RlZmluaXRpb25cbiAgICBfaXNCYWdnYWdlT2N0ZXRTdHJpbmcoc3RyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKGNoIDwgMHgyMSB8fCBjaCA9PT0gMHgyYyB8fCBjaCA9PT0gMHgzYiB8fCBjaCA9PT0gMHg1YyB8fCBjaCA+IDB4N2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggZ3JlYXRlciB0aGFuIDAgYW5kIG5vdCBleGNlZWQgX01BWF9MRU5HVEggY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIFN0cmluZyB0byBiZSB2YWxpZGF0ZWQuXG4gICAgICogQHJldHVybnMgV2hldGhlciB0aGUgU3RyaW5nIGlzIHZhbGlkIGFuZCBub3QgZW1wdHkuXG4gICAgICovXG4gICAgX2lzVmFsaWRBbmROb3RFbXB0eShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiAwICYmIHRoaXMuX2lzVmFsaWQoc3RyKTtcbiAgICB9XG59XG5leHBvcnRzLmVudkRldGVjdG9yID0gbmV3IEVudkRldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbnZEZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfTkFNRSA9IGV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfREVTQ1JJUFRJT04gPSBleHBvcnRzLkFUVFJfU0VSVklDRV9OQU1FU1BBQ0UgPSBleHBvcnRzLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRCA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRSA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfREVTQ1JJUFRJT04gPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19PV05FUiA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfTkFNRSA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0NPTU1BTkRfQVJHUyA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0NPTU1BTkQgPSBleHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9PU19UWVBFID0gZXhwb3J0cy5BVFRSX0s4U19QT0RfTkFNRSA9IGV4cG9ydHMuQVRUUl9LOFNfTkFNRVNQQUNFX05BTUUgPSBleHBvcnRzLkFUVFJfSzhTX0RFUExPWU1FTlRfTkFNRSA9IGV4cG9ydHMuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FID0gZXhwb3J0cy5BVFRSX0hPU1RfVFlQRSA9IGV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSBleHBvcnRzLkFUVFJfSE9TVF9JTUFHRV9WRVJTSU9OID0gZXhwb3J0cy5BVFRSX0hPU1RfSU1BR0VfTkFNRSA9IGV4cG9ydHMuQVRUUl9IT1NUX0lNQUdFX0lEID0gZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSBleHBvcnRzLkFUVFJfSE9TVF9BUkNIID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9UQUdTID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9IGV4cG9ydHMuQVRUUl9DTE9VRF9SRUdJT04gPSBleHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSBleHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSBleHBvcnRzLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBjbG91ZCBhY2NvdW50IElEIHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0by5cbiAqXG4gKiBAZXhhbXBsZSAxMTExMTExMTExMTFcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnlcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEID0gJ2Nsb3VkLmFjY291bnQuaWQnO1xuLyoqXG4gKiBDbG91ZCByZWdpb25zIG9mdGVuIGhhdmUgbXVsdGlwbGUsIGlzb2xhdGVkIGxvY2F0aW9ucyBrbm93biBhcyB6b25lcyB0byBpbmNyZWFzZSBhdmFpbGFiaWxpdHkuIEF2YWlsYWJpbGl0eSB6b25lIHJlcHJlc2VudHMgdGhlIHpvbmUgd2hlcmUgdGhlIHJlc291cmNlIGlzIHJ1bm5pbmcuXG4gKlxuICogQGV4YW1wbGUgdXMtZWFzdC0xY1xuICpcbiAqIEBub3RlIEF2YWlsYWJpbGl0eSB6b25lcyBhcmUgY2FsbGVkIFwiem9uZXNcIiBvbiBBbGliYWJhIENsb3VkIGFuZCBHb29nbGUgQ2xvdWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSAnY2xvdWQuYXZhaWxhYmlsaXR5X3pvbmUnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9ICdjbG91ZC5wcm92aWRlcic7XG4vKipcbiAqIFRoZSBnZW9ncmFwaGljYWwgcmVnaW9uIHRoZSByZXNvdXJjZSBpcyBydW5uaW5nLlxuICpcbiAqIEBleGFtcGxlIHVzLWNlbnRyYWwxXG4gKiBAZXhhbXBsZSB1cy1lYXN0LTFcbiAqXG4gKiBAbm90ZSBSZWZlciB0byB5b3VyIHByb3ZpZGVyJ3MgZG9jcyB0byBzZWUgdGhlIGF2YWlsYWJsZSByZWdpb25zLCBmb3IgZXhhbXBsZSBbQWxpYmFiYSBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy5hbGliYWJhY2xvdWQuY29tL2hlbHAvZG9jLWRldGFpbC80MDY1NC5odG0pLCBbQVdTIHJlZ2lvbnNdKGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYWJvdXQtYXdzL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9yZWdpb25zX2F6LyksIFtBenVyZSByZWdpb25zXShodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vZ2xvYmFsLWluZnJhc3RydWN0dXJlL2dlb2dyYXBoaWVzLyksIFtHb29nbGUgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Fib3V0L2xvY2F0aW9ucyksIG9yIFtUZW5jZW50IENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vd3d3LnRlbmNlbnRjbG91ZC5jb20vZG9jdW1lbnQvcHJvZHVjdC8yMTMvNjA5MSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUkVHSU9OID0gJ2Nsb3VkLnJlZ2lvbic7XG4vKipcbiAqIENvbnRhaW5lciBJRC4gVXN1YWxseSBhIFVVSUQsIGFzIGZvciBleGFtcGxlIHVzZWQgdG8gW2lkZW50aWZ5IERvY2tlciBjb250YWluZXJzXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvY29udGFpbmVycy9ydW4vI2NvbnRhaW5lci1pZGVudGlmaWNhdGlvbikuIFRoZSBVVUlEIG1pZ2h0IGJlIGFiYnJldmlhdGVkLlxuICpcbiAqIEBleGFtcGxlIGEzYmY5MGUwMDZiMlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9ICdjb250YWluZXIuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBpbWFnZSB0aGUgY29udGFpbmVyIHdhcyBidWlsdCBvbi5cbiAqXG4gKiBAZXhhbXBsZSBnY3IuaW8vb3BlbnRlbGVtZXRyeS9vcGVyYXRvclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gJ2NvbnRhaW5lci5pbWFnZS5uYW1lJztcbi8qKlxuICogQ29udGFpbmVyIGltYWdlIHRhZ3MuIEFuIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluIFtEb2NrZXIgSW1hZ2UgSW5zcGVjdF0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2FwaS92MS40My8jdGFnL0ltYWdlL29wZXJhdGlvbi9JbWFnZUluc3BlY3QpLiBTaG91bGQgYmUgb25seSB0aGUgYDx0YWc+YCBzZWN0aW9uIG9mIHRoZSBmdWxsIG5hbWUgZm9yIGV4YW1wbGUgZnJvbSBgcmVnaXN0cnkuZXhhbXBsZS5jb20vbXktb3JnL215LWltYWdlOjx0YWc+YC5cbiAqXG4gKiBAZXhhbXBsZSBbXCJ2MS4yNy4xXCIsIFwiMy41LjctMFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9UQUdTID0gJ2NvbnRhaW5lci5pbWFnZS50YWdzJztcbi8qKlxuICogQ29udGFpbmVyIG5hbWUgdXNlZCBieSBjb250YWluZXIgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ09OVEFJTkVSX05BTUUgPSAnY29udGFpbmVyLm5hbWUnO1xuLyoqXG4gKiBUaGUgQ1BVIGFyY2hpdGVjdHVyZSB0aGUgaG9zdCBzeXN0ZW0gaXMgcnVubmluZyBvbi5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0FSQ0ggPSAnaG9zdC5hcmNoJztcbi8qKlxuICogVW5pcXVlIGhvc3QgSUQuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBpbnN0YW5jZV9pZCBhc3NpZ25lZCBieSB0aGUgY2xvdWQgcHJvdmlkZXIuIEZvciBub24tY29udGFpbmVyaXplZCBzeXN0ZW1zLCB0aGlzIHNob3VsZCBiZSB0aGUgYG1hY2hpbmUtaWRgLiBTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgc291cmNlcyB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSBgbWFjaGluZS1pZGAgYmFzZWQgb24gb3BlcmF0aW5nIHN5c3RlbS5cbiAqXG4gKiBAZXhhbXBsZSBmZGJmNzllOGFmOTRjYjdmOWU4ZGYzNjc4OTE4NzA1MlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSAnaG9zdC5pZCc7XG4vKipcbiAqIFZNIGltYWdlIElEIG9yIGhvc3QgT1MgaW1hZ2UgSUQuIEZvciBDbG91ZCwgdGhpcyB2YWx1ZSBpcyBmcm9tIHRoZSBwcm92aWRlci5cbiAqXG4gKiBAZXhhbXBsZSBhbWktMDdiMDZiNDQyOTIxODMxZTVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0lNQUdFX0lEID0gJ2hvc3QuaW1hZ2UuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBWTSBpbWFnZSBvciBPUyBpbnN0YWxsIHRoZSBob3N0IHdhcyBpbnN0YW50aWF0ZWQgZnJvbS5cbiAqXG4gKiBAZXhhbXBsZSBpbmZyYS1hbWktZWtzLXdvcmtlci1ub2RlLTdkNGVjNzgzMTJcbiAqIEBleGFtcGxlIENlbnRPUy04LXg4Nl82NC0xOTA1XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSE9TVF9JTUFHRV9OQU1FID0gJ2hvc3QuaW1hZ2UubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgVk0gaW1hZ2Ugb3IgaG9zdCBPUyBhcyBkZWZpbmVkIGluIFtWZXJzaW9uIEF0dHJpYnV0ZXNdKC9kb2NzL3Jlc291cmNlL1JFQURNRS5tZCN2ZXJzaW9uLWF0dHJpYnV0ZXMpLlxuICpcbiAqIEBleGFtcGxlIDAuMVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSU1BR0VfVkVSU0lPTiA9ICdob3N0LmltYWdlLnZlcnNpb24nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0LiBPbiBVbml4IHN5c3RlbXMsIGl0IG1heSBjb250YWluIHdoYXQgdGhlIGhvc3RuYW1lIGNvbW1hbmQgcmV0dXJucywgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LXRlc3RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSAnaG9zdC5uYW1lJztcbi8qKlxuICogVHlwZSBvZiBob3N0LiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgbWFjaGluZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlIG4xLXN0YW5kYXJkLTFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX1RZUEUgPSAnaG9zdC50eXBlJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gKlxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeS1jbHVzdGVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSzhTX0NMVVNURVJfTkFNRSA9ICdrOHMuY2x1c3Rlci5uYW1lJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIERlcGxveW1lbnQuXG4gKlxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0s4U19ERVBMT1lNRU5UX05BTUUgPSAnazhzLmRlcGxveW1lbnQubmFtZSc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBuYW1lc3BhY2UgdGhhdCB0aGUgcG9kIGlzIHJ1bm5pbmcgaW4uXG4gKlxuICogQGV4YW1wbGUgZGVmYXVsdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0s4U19OQU1FU1BBQ0VfTkFNRSA9ICdrOHMubmFtZXNwYWNlLm5hbWUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgUG9kLlxuICpcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnktcG9kLWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSzhTX1BPRF9OQU1FID0gJ2s4cy5wb2QubmFtZSc7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVFlQRSA9ICdvcy50eXBlJztcbi8qKlxuICogVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFzIGRlZmluZWQgaW4gW1ZlcnNpb24gQXR0cmlidXRlc10oL2RvY3MvcmVzb3VyY2UvUkVBRE1FLm1kI3ZlcnNpb24tYXR0cmlidXRlcykuXG4gKlxuICogQGV4YW1wbGUgMTQuMi4xXG4gKiBAZXhhbXBsZSAxOC4wNC4xXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9ICdvcy52ZXJzaW9uJztcbi8qKlxuICogVGhlIGNvbW1hbmQgdXNlZCB0byBsYXVuY2ggdGhlIHByb2Nlc3MgKGkuZS4gdGhlIGNvbW1hbmQgbmFtZSkuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHplcm90aCBzdHJpbmcgaW4gYHByb2MvW3BpZF0vY21kbGluZWAuIE9uIFdpbmRvd3MsIGNhbiBiZSBzZXQgdG8gdGhlIGZpcnN0IHBhcmFtZXRlciBleHRyYWN0ZWQgZnJvbSBgR2V0Q29tbWFuZExpbmVXYC5cbiAqXG4gKiBAZXhhbXBsZSBjbWQvb3RlbGNvbFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfQ09NTUFORCA9ICdwcm9jZXNzLmNvbW1hbmQnO1xuLyoqXG4gKiBBbGwgdGhlIGNvbW1hbmQgYXJndW1lbnRzIChpbmNsdWRpbmcgdGhlIGNvbW1hbmQvZXhlY3V0YWJsZSBpdHNlbGYpIGFzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLiBPbiBMaW51eC1iYXNlZCBzeXN0ZW1zIChhbmQgc29tZSBvdGhlciBVbml4b2lkIHN5c3RlbXMgc3VwcG9ydGluZyBwcm9jZnMpLCBjYW4gYmUgc2V0IGFjY29yZGluZyB0byB0aGUgbGlzdCBvZiBudWxsLWRlbGltaXRlZCBzdHJpbmdzIGV4dHJhY3RlZCBmcm9tIGBwcm9jL1twaWRdL2NtZGxpbmVgLiBGb3IgbGliYy1iYXNlZCBleGVjdXRhYmxlcywgdGhpcyB3b3VsZCBiZSB0aGUgZnVsbCBhcmd2IHZlY3RvciBwYXNzZWQgdG8gYG1haW5gLlxuICpcbiAqIEBleGFtcGxlIFtcImNtZC9vdGVjb2xcIiwgXCItLWNvbmZpZz1jb25maWcueWFtbFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfQ09NTUFORF9BUkdTID0gJ3Byb2Nlc3MuY29tbWFuZF9hcmdzJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZS4gT24gTGludXggYmFzZWQgc3lzdGVtcywgdGhpcyAqKlNIT1VMRCoqIGJlIHNldCB0byB0aGUgYmFzZSBuYW1lIG9mIHRoZSB0YXJnZXQgb2YgYC9wcm9jL1twaWRdL2V4ZWAuIE9uIFdpbmRvd3MsIHRoaXMgKipTSE9VTEQqKiBiZSBzZXQgdG8gdGhlIGJhc2UgbmFtZSBvZiBgR2V0UHJvY2Vzc0ltYWdlRmlsZU5hbWVXYC5cbiAqXG4gKiBAZXhhbXBsZSBvdGVsY29sXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19FWEVDVVRBQkxFX05BTUUgPSAncHJvY2Vzcy5leGVjdXRhYmxlLm5hbWUnO1xuLyoqXG4gKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9jZXNzIGV4ZWN1dGFibGUuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHRhcmdldCBvZiBgcHJvYy9bcGlkXS9leGVgLiBPbiBXaW5kb3dzLCBjYW4gYmUgc2V0IHRvIHRoZSByZXN1bHQgb2YgYEdldFByb2Nlc3NJbWFnZUZpbGVOYW1lV2AuXG4gKlxuICogQGV4YW1wbGUgL3Vzci9iaW4vY21kL290ZWxjb2xcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9ICdwcm9jZXNzLmV4ZWN1dGFibGUucGF0aCc7XG4vKipcbiAqIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlciB0aGF0IG93bnMgdGhlIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgcm9vdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfT1dORVIgPSAncHJvY2Vzcy5vd25lcic7XG4vKipcbiAqIFByb2Nlc3MgaWRlbnRpZmllciAoUElEKS5cbiAqXG4gKiBAZXhhbXBsZSAxMjM0XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSAncHJvY2Vzcy5waWQnO1xuLyoqXG4gKiBBbiBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGFib3V0IHRoZSBydW50aW1lIG9mIHRoZSBwcm9jZXNzLCBmb3IgZXhhbXBsZSBhIHNwZWNpZmljIHZlbmRvciBjdXN0b21pemF0aW9uIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEBleGFtcGxlIFwiRWNsaXBzZSBPcGVuSjkgRWNsaXBzZSBPcGVuSjkgVk0gb3Blbmo5LTAuMjEuMFwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OID0gJ3Byb2Nlc3MucnVudGltZS5kZXNjcmlwdGlvbic7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBydW50aW1lIG9mIHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiBAZXhhbXBsZSBPcGVuSkRLIFJ1bnRpbWUgRW52aXJvbm1lbnRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRSA9ICdwcm9jZXNzLnJ1bnRpbWUubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBydW50aW1lIG9mIHRoaXMgcHJvY2VzcywgYXMgcmV0dXJuZWQgYnkgdGhlIHJ1bnRpbWUgd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogQGV4YW1wbGUgXCIxNC4wLjJcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OID0gJ3Byb2Nlc3MucnVudGltZS52ZXJzaW9uJztcbi8qKlxuICogVGhlIHN0cmluZyBJRCBvZiB0aGUgc2VydmljZSBpbnN0YW5jZS5cbiAqXG4gKiBAZXhhbXBsZSA2MjdjYzQ5My1mMzEwLTQ3ZGUtOTZiZC03MTQxMGI3ZGVjMDlcbiAqXG4gKiBAbm90ZSAqKk1VU1QqKiBiZSB1bmlxdWUgZm9yIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHNhbWUgYHNlcnZpY2UubmFtZXNwYWNlLHNlcnZpY2UubmFtZWAgcGFpciAoaW4gb3RoZXIgd29yZHNcbiAqIGBzZXJ2aWNlLm5hbWVzcGFjZSxzZXJ2aWNlLm5hbWUsc2VydmljZS5pbnN0YW5jZS5pZGAgdHJpcGxldCAqKk1VU1QqKiBiZSBnbG9iYWxseSB1bmlxdWUpLiBUaGUgSUQgaGVscHMgdG9cbiAqIGRpc3Rpbmd1aXNoIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBzZXJ2aWNlIHRoYXQgZXhpc3QgYXQgdGhlIHNhbWUgdGltZSAoZS5nLiBpbnN0YW5jZXMgb2YgYSBob3Jpem9udGFsbHkgc2NhbGVkXG4gKiBzZXJ2aWNlKS5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgU0RLcywgYXJlIHJlY29tbWVuZGVkIHRvIGdlbmVyYXRlIGEgcmFuZG9tIFZlcnNpb24gMSBvciBWZXJzaW9uIDQgW1JGQ1xuICogNDEyMl0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQxMjIudHh0KSBVVUlELCBidXQgYXJlIGZyZWUgdG8gdXNlIGFuIGluaGVyZW50IHVuaXF1ZSBJRCBhcyB0aGUgc291cmNlIG9mXG4gKiB0aGlzIHZhbHVlIGlmIHN0YWJpbGl0eSBpcyBkZXNpcmFibGUuIEluIHRoYXQgY2FzZSwgdGhlIElEICoqU0hPVUxEKiogYmUgdXNlZCBhcyBzb3VyY2Ugb2YgYSBVVUlEIFZlcnNpb24gNSBhbmRcbiAqICoqU0hPVUxEKiogdXNlIHRoZSBmb2xsb3dpbmcgVVVJRCBhcyB0aGUgbmFtZXNwYWNlOiBgNGQ2MzAwOWEtOGQwZi0xMWVlLWFhZDctNGM3OTZlZDhlMzIwYC5cbiAqXG4gKiBVVUlEcyBhcmUgdHlwaWNhbGx5IHJlY29tbWVuZGVkLCBhcyBvbmx5IGFuIG9wYXF1ZSB2YWx1ZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGlkZW50aWZ5aW5nIGEgc2VydmljZSBpbnN0YW5jZSBpc1xuICogbmVlZGVkLiBTaW1pbGFyIHRvIHdoYXQgY2FuIGJlIHNlZW4gaW4gdGhlIG1hbiBwYWdlIGZvciB0aGVcbiAqIFtgL2V0Yy9tYWNoaW5lLWlkYF0oaHR0cHM6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL2xhdGVzdC9tYWNoaW5lLWlkLmh0bWwpIGZpbGUsIHRoZSB1bmRlcmx5aW5nXG4gKiBkYXRhLCBzdWNoIGFzIHBvZCBuYW1lIGFuZCBuYW1lc3BhY2Ugc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY29uZmlkZW50aWFsLCBiZWluZyB0aGUgdXNlcidzIGNob2ljZSB0byBleHBvc2UgaXRcbiAqIG9yIG5vdCB2aWEgYW5vdGhlciByZXNvdXJjZSBhdHRyaWJ1dGUuXG4gKlxuICogRm9yIGFwcGxpY2F0aW9ucyBydW5uaW5nIGJlaGluZCBhbiBhcHBsaWNhdGlvbiBzZXJ2ZXIgKGxpa2UgdW5pY29ybiksIHdlIGRvIG5vdCByZWNvbW1lbmQgdXNpbmcgb25lIGlkZW50aWZpZXJcbiAqIGZvciBhbGwgcHJvY2Vzc2VzIHBhcnRpY2lwYXRpbmcgaW4gdGhlIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBpdCdzIHJlY29tbWVuZGVkIGVhY2ggZGl2aXNpb24gKGUuZy4gYSB3b3JrZXJcbiAqIHRocmVhZCBpbiB1bmljb3JuKSB0byBoYXZlIGl0cyBvd24gaW5zdGFuY2UuaWQuXG4gKlxuICogSXQncyBub3QgcmVjb21tZW5kZWQgZm9yIGEgQ29sbGVjdG9yIHRvIHNldCBgc2VydmljZS5pbnN0YW5jZS5pZGAgaWYgaXQgY2FuJ3QgdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmUgdGhlXG4gKiBzZXJ2aWNlIGluc3RhbmNlIHRoYXQgaXMgZ2VuZXJhdGluZyB0aGF0IHRlbGVtZXRyeS4gRm9yIGluc3RhbmNlLCBjcmVhdGluZyBhbiBVVUlEIGJhc2VkIG9uIGBwb2QubmFtZWAgd2lsbFxuICogbGlrZWx5IGJlIHdyb25nLCBhcyB0aGUgQ29sbGVjdG9yIG1pZ2h0IG5vdCBrbm93IGZyb20gd2hpY2ggY29udGFpbmVyIHdpdGhpbiB0aGF0IHBvZCB0aGUgdGVsZW1ldHJ5IG9yaWdpbmF0ZWQuXG4gKiBIb3dldmVyLCBDb2xsZWN0b3JzIGNhbiBzZXQgdGhlIGBzZXJ2aWNlLmluc3RhbmNlLmlkYCBpZiB0aGV5IGNhbiB1bmFtYmlndW91c2x5IGRldGVybWluZSB0aGUgc2VydmljZSBpbnN0YW5jZVxuICogZm9yIHRoYXQgdGVsZW1ldHJ5LiBUaGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSBmb3Igc2NyYXBpbmcgcmVjZWl2ZXJzLCBhcyB0aGV5IGtub3cgdGhlIHRhcmdldCBhZGRyZXNzIGFuZFxuICogcG9ydC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9TRVJWSUNFX0lOU1RBTkNFX0lEID0gJ3NlcnZpY2UuaW5zdGFuY2UuaWQnO1xuLyoqXG4gKiBBIG5hbWVzcGFjZSBmb3IgYHNlcnZpY2UubmFtZWAuXG4gKlxuICogQGV4YW1wbGUgU2hvcFxuICpcbiAqIEBub3RlIEEgc3RyaW5nIHZhbHVlIGhhdmluZyBhIG1lYW5pbmcgdGhhdCBoZWxwcyB0byBkaXN0aW5ndWlzaCBhIGdyb3VwIG9mIHNlcnZpY2VzLCBmb3IgZXhhbXBsZSB0aGUgdGVhbSBuYW1lIHRoYXQgb3ducyBhIGdyb3VwIG9mIHNlcnZpY2VzLiBgc2VydmljZS5uYW1lYCBpcyBleHBlY3RlZCB0byBiZSB1bmlxdWUgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS4gSWYgYHNlcnZpY2UubmFtZXNwYWNlYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBSZXNvdXJjZSB0aGVuIGBzZXJ2aWNlLm5hbWVgIGlzIGV4cGVjdGVkIHRvIGJlIHVuaXF1ZSBmb3IgYWxsIHNlcnZpY2VzIHRoYXQgaGF2ZSBubyBleHBsaWNpdCBuYW1lc3BhY2UgZGVmaW5lZCAoc28gdGhlIGVtcHR5L3Vuc3BlY2lmaWVkIG5hbWVzcGFjZSBpcyBzaW1wbHkgb25lIG1vcmUgdmFsaWQgbmFtZXNwYWNlKS4gWmVyby1sZW5ndGggbmFtZXNwYWNlIHN0cmluZyBpcyBhc3N1bWVkIGVxdWFsIHRvIHVuc3BlY2lmaWVkIG5hbWVzcGFjZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9TRVJWSUNFX05BTUVTUEFDRSA9ICdzZXJ2aWNlLm5hbWVzcGFjZSc7XG4vKipcbiAqIEFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHdlYiBlbmdpbmUgKGUuZy4gZGV0YWlsZWQgdmVyc2lvbiBhbmQgZWRpdGlvbiBpbmZvcm1hdGlvbikuXG4gKlxuICogQGV4YW1wbGUgV2lsZEZseSBGdWxsIDIxLjAuMC5GaW5hbCAoV2lsZEZseSBDb3JlIDEzLjAuMS5GaW5hbCkgLSAyLjIuMi5GaW5hbFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1dFQkVOR0lORV9ERVNDUklQVElPTiA9ICd3ZWJlbmdpbmUuZGVzY3JpcHRpb24nO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgd2ViIGVuZ2luZS5cbiAqXG4gKiBAZXhhbXBsZSBXaWxkRmx5XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfV0VCRU5HSU5FX05BTUUgPSAnd2ViZW5naW5lLm5hbWUnO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgd2ViIGVuZ2luZS5cbiAqXG4gKiBAZXhhbXBsZSAyMS4wLjBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfVkVSU0lPTiA9ICd3ZWJlbmdpbmUudmVyc2lvbic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leGVjQXN5bmMgPSB2b2lkIDA7XG5jb25zdCBjaGlsZF9wcm9jZXNzID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7XG5jb25zdCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5leHBvcnRzLmV4ZWNBc3luYyA9IHV0aWwucHJvbWlzaWZ5KGNoaWxkX3Byb2Nlc3MuZXhlYyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjQXN5bmMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IHZvaWQgMDtcbmNvbnN0IGV4ZWNBc3luY18xID0gcmVxdWlyZShcIi4vZXhlY0FzeW5jXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKCdpb3JlZyAtcmQxIC1jIFwiSU9QbGF0Zm9ybUV4cGVydERldmljZVwiJyk7XG4gICAgICAgIGNvbnN0IGlkTGluZSA9IHJlc3VsdC5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC5maW5kKGxpbmUgPT4gbGluZS5pbmNsdWRlcygnSU9QbGF0Zm9ybVVVSUQnKSk7XG4gICAgICAgIGlmICghaWRMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnRzID0gaWRMaW5lLnNwbGl0KCdcIiA9IFwiJyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1sxXS5zbGljZSgwLCAtMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3IgcmVhZGluZyBtYWNoaW5lIGlkOiAke2V9YCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IGdldE1hY2hpbmVJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hY2hpbmVJZC1kYXJ3aW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5hc3luYyBmdW5jdGlvbiBnZXRNYWNoaW5lSWQoKSB7XG4gICAgY29uc3QgcGF0aHMgPSBbJy9ldGMvbWFjaGluZS1pZCcsICcvdmFyL2xpYi9kYnVzL21hY2hpbmUtaWQnXTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZzXzEucHJvbWlzZXMucmVhZEZpbGUocGF0aCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYGVycm9yIHJlYWRpbmcgbWFjaGluZSBpZDogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IGdldE1hY2hpbmVJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hY2hpbmVJZC1saW51eC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGV4ZWNBc3luY18xID0gcmVxdWlyZShcIi4vZXhlY0FzeW5jXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZzXzEucHJvbWlzZXMucmVhZEZpbGUoJy9ldGMvaG9zdGlkJywgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3IgcmVhZGluZyBtYWNoaW5lIGlkOiAke2V9YCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKCdrZW52IC1xIHNtYmlvcy5zeXN0ZW0udXVpZCcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYGVycm9yIHJlYWRpbmcgbWFjaGluZSBpZDogJHtlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSBnZXRNYWNoaW5lSWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRNYWNoaW5lSWQtYnNkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSB2b2lkIDA7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5jb25zdCBleGVjQXN5bmNfMSA9IHJlcXVpcmUoXCIuL2V4ZWNBc3luY1wiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGdldE1hY2hpbmVJZCgpIHtcbiAgICBjb25zdCBhcmdzID0gJ1FVRVJZIEhLRVlfTE9DQUxfTUFDSElORVxcXFxTT0ZUV0FSRVxcXFxNaWNyb3NvZnRcXFxcQ3J5cHRvZ3JhcGh5IC92IE1hY2hpbmVHdWlkJztcbiAgICBsZXQgY29tbWFuZCA9ICcld2luZGlyJVxcXFxTeXN0ZW0zMlxcXFxSRUcuZXhlJztcbiAgICBpZiAocHJvY2Vzcy5hcmNoID09PSAnaWEzMicgJiYgJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInIGluIHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGNvbW1hbmQgPSAnJXdpbmRpciVcXFxcc3lzbmF0aXZlXFxcXGNtZC5leGUgL2MgJyArIGNvbW1hbmQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKGAke2NvbW1hbmR9ICR7YXJnc31gKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSByZXN1bHQuc3Rkb3V0LnNwbGl0KCdSRUdfU1onKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBlcnJvciByZWFkaW5nIG1hY2hpbmUgaWQ6ICR7ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gZ2V0TWFjaGluZUlkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0TWFjaGluZUlkLXdpbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIGFwaV8xLmRpYWcuZGVidWcoJ2NvdWxkIG5vdCByZWFkIG1hY2hpbmUtaWQ6IHVuc3VwcG9ydGVkIHBsYXRmb3JtJyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gZ2V0TWFjaGluZUlkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0TWFjaGluZUlkLXVuc3VwcG9ydGVkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5sZXQgZ2V0TWFjaGluZUlkSW1wbDtcbmFzeW5jIGZ1bmN0aW9uIGdldE1hY2hpbmVJZCgpIHtcbiAgICBpZiAoIWdldE1hY2hpbmVJZEltcGwpIHtcbiAgICAgICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgICAgICAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC1kYXJ3aW4uanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgICAgICAgICAgICBnZXRNYWNoaW5lSWRJbXBsID0gKGF3YWl0IGltcG9ydCgnLi9nZXRNYWNoaW5lSWQtbGludXguanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZyZWVic2QnOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC1ic2QuanMnKSkuZ2V0TWFjaGluZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2luMzInOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC13aW4uanMnKSkuZ2V0TWFjaGluZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBnZXRNYWNoaW5lSWRJbXBsID0gKGF3YWl0IGltcG9ydCgnLi9nZXRNYWNoaW5lSWQtdW5zdXBwb3J0ZWQuanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkSW1wbCgpO1xufVxuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSBnZXRNYWNoaW5lSWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRNYWNoaW5lSWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm9ybWFsaXplVHlwZSA9IGV4cG9ydHMubm9ybWFsaXplQXJjaCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBub3JtYWxpemVBcmNoID0gKG5vZGVBcmNoU3RyaW5nKSA9PiB7XG4gICAgLy8gTWFwcyBmcm9tIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvb3MuaHRtbCNvc2FyY2ggdG8gYXJjaCB2YWx1ZXMgaW4gc3BlYzpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1zcGVjaWZpY2F0aW9uL2Jsb2IvbWFpbi9zcGVjaWZpY2F0aW9uL3Jlc291cmNlL3NlbWFudGljX2NvbnZlbnRpb25zL2hvc3QubWRcbiAgICBzd2l0Y2ggKG5vZGVBcmNoU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgJ2FybSc6XG4gICAgICAgICAgICByZXR1cm4gJ2FybTMyJztcbiAgICAgICAgY2FzZSAncHBjJzpcbiAgICAgICAgICAgIHJldHVybiAncHBjMzInO1xuICAgICAgICBjYXNlICd4NjQnOlxuICAgICAgICAgICAgcmV0dXJuICdhbWQ2NCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbm9kZUFyY2hTdHJpbmc7XG4gICAgfVxufTtcbmV4cG9ydHMubm9ybWFsaXplQXJjaCA9IG5vcm1hbGl6ZUFyY2g7XG5jb25zdCBub3JtYWxpemVUeXBlID0gKG5vZGVQbGF0Zm9ybSkgPT4ge1xuICAgIC8vIE1hcHMgZnJvbSBodHRwczovL25vZGVqcy5vcmcvYXBpL29zLmh0bWwjb3NwbGF0Zm9ybSB0byBhcmNoIHZhbHVlcyBpbiBzcGVjOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vYmxvYi9tYWluL3NwZWNpZmljYXRpb24vcmVzb3VyY2Uvc2VtYW50aWNfY29udmVudGlvbnMvb3MubWRcbiAgICBzd2l0Y2ggKG5vZGVQbGF0Zm9ybSkge1xuICAgICAgICBjYXNlICdzdW5vcyc6XG4gICAgICAgICAgICByZXR1cm4gJ3NvbGFyaXMnO1xuICAgICAgICBjYXNlICd3aW4zMic6XG4gICAgICAgICAgICByZXR1cm4gJ3dpbmRvd3MnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5vZGVQbGF0Zm9ybTtcbiAgICB9XG59O1xuZXhwb3J0cy5ub3JtYWxpemVUeXBlID0gbm9ybWFsaXplVHlwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ob3N0RGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VtY29udlwiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBnZXRNYWNoaW5lSWRfMSA9IHJlcXVpcmUoXCIuL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBIb3N0RGV0ZWN0b3IgZGV0ZWN0cyB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlIGhvc3QgY3VycmVudCBwcm9jZXNzIGlzXG4gKiBydW5uaW5nIG9uLiBDdXJyZW50bHkgb25seSBub24tY2xvdWQtYmFzZWQgYXR0cmlidXRlcyBhcmUgaW5jbHVkZWQuXG4gKi9cbmNsYXNzIEhvc3REZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX05BTUVdOiAoMCwgb3NfMS5ob3N0bmFtZSkoKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0FSQ0hdOiAoMCwgdXRpbHNfMS5ub3JtYWxpemVBcmNoKSgoMCwgb3NfMS5hcmNoKSgpKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0lEXTogKDAsIGdldE1hY2hpbmVJZF8xLmdldE1hY2hpbmVJZCkoKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlcyB9O1xuICAgIH1cbn1cbmV4cG9ydHMuaG9zdERldGVjdG9yID0gbmV3IEhvc3REZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SG9zdERldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vc0RldGVjdG9yID0gdm9pZCAwO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlbWNvbnZcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBPU0RldGVjdG9yIGRldGVjdHMgdGhlIHJlc291cmNlcyByZWxhdGVkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUykgb25cbiAqIHdoaWNoIHRoZSBwcm9jZXNzIHJlcHJlc2VudGVkIGJ5IHRoaXMgcmVzb3VyY2UgaXMgcnVubmluZy5cbiAqL1xuY2xhc3MgT1NEZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9PU19UWVBFXTogKDAsIHV0aWxzXzEubm9ybWFsaXplVHlwZSkoKDAsIG9zXzEucGxhdGZvcm0pKCkpLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX09TX1ZFUlNJT05dOiAoMCwgb3NfMS5yZWxlYXNlKSgpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5vc0RldGVjdG9yID0gbmV3IE9TRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9TRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zZW1jb252XCIpO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG4vKipcbiAqIFByb2Nlc3NEZXRlY3RvciB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSByZXNvdXJjZXMgcmVsYXRlZCBjdXJyZW50IHByb2Nlc3MgcnVubmluZ1xuICogYW5kIGJlaW5nIGluc3RydW1lbnRlZCBmcm9tIHRoZSBOb2RlSlMgUHJvY2VzcyBtb2R1bGUuXG4gKi9cbmNsYXNzIFByb2Nlc3NEZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1BJRF06IHByb2Nlc3MucGlkLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfRVhFQ1VUQUJMRV9OQU1FXTogcHJvY2Vzcy50aXRsZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSF06IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19DT01NQU5EX0FSR1NdOiBbXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5hcmd2WzBdLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3MuZXhlY0FyZ3YsXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTl06IHByb2Nlc3MudmVyc2lvbnMubm9kZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRV06ICdub2RlanMnLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTl06ICdOb2RlLmpzJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfQ09NTUFORF0gPSBwcm9jZXNzLmFyZ3ZbMV07XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gb3MudXNlckluZm8oKTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19PV05FUl0gPSB1c2VySW5mby51c2VybmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3Igb2J0YWluaW5nIHByb2Nlc3Mgb3duZXI6ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5wcm9jZXNzRGV0ZWN0b3IgPSBuZXcgUHJvY2Vzc0RldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9jZXNzRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VtY29udlwiKTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbi8qKlxuICogU2VydmljZUluc3RhbmNlSWREZXRlY3RvciBkZXRlY3RzIHRoZSByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgc2VydmljZSBpbnN0YW5jZSBJRC5cbiAqL1xuY2xhc3MgU2VydmljZUluc3RhbmNlSWREZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRF06ICgwLCBjcnlwdG9fMS5yYW5kb21VVUlEKSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yID0gbmV3IFNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSBleHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IGV4cG9ydHMub3NEZXRlY3RvciA9IGV4cG9ydHMuaG9zdERldGVjdG9yID0gdm9pZCAwO1xudmFyIEhvc3REZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vSG9zdERldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaG9zdERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBIb3N0RGV0ZWN0b3JfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG52YXIgT1NEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vT1NEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9zRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9TRGV0ZWN0b3JfMS5vc0RldGVjdG9yOyB9IH0pO1xudmFyIFByb2Nlc3NEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vUHJvY2Vzc0RldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9jZXNzRGV0ZWN0b3JfMS5wcm9jZXNzRGV0ZWN0b3I7IH0gfSk7XG52YXIgU2VydmljZUluc3RhbmNlSWREZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VydmljZUluc3RhbmNlSWREZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VydmljZUluc3RhbmNlSWREZXRlY3RvciA9IGV4cG9ydHMucHJvY2Vzc0RldGVjdG9yID0gZXhwb3J0cy5vc0RldGVjdG9yID0gZXhwb3J0cy5ob3N0RGV0ZWN0b3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJob3N0RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEub3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb2Nlc3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLnByb2Nlc3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vb3BEZXRlY3RvciA9IGV4cG9ydHMuTm9vcERldGVjdG9yID0gdm9pZCAwO1xuY2xhc3MgTm9vcERldGVjdG9yIHtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLk5vb3BEZXRlY3RvciA9IE5vb3BEZXRlY3RvcjtcbmV4cG9ydHMubm9vcERldGVjdG9yID0gbmV3IE5vb3BEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9vcERldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub29wRGV0ZWN0b3IgPSBleHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSBleHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IGV4cG9ydHMub3NEZXRlY3RvciA9IGV4cG9ydHMuaG9zdERldGVjdG9yID0gZXhwb3J0cy5lbnZEZXRlY3RvciA9IHZvaWQgMDtcbnZhciBFbnZEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vRW52RGV0ZWN0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnZEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRW52RGV0ZWN0b3JfMS5lbnZEZXRlY3RvcjsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJob3N0RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuaG9zdERldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5vc0RldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLnByb2Nlc3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuc2VydmljZUluc3RhbmNlSWREZXRlY3RvcjsgfSB9KTtcbnZhciBOb29wRGV0ZWN0b3JfMSA9IHJlcXVpcmUoXCIuL05vb3BEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vb3BEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcERldGVjdG9yXzEubm9vcERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IGV4cG9ydHMuZW1wdHlSZXNvdXJjZSA9IGV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzID0gZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yID0gZXhwb3J0cy5wcm9jZXNzRGV0ZWN0b3IgPSBleHBvcnRzLm9zRGV0ZWN0b3IgPSBleHBvcnRzLmhvc3REZXRlY3RvciA9IGV4cG9ydHMuZW52RGV0ZWN0b3IgPSBleHBvcnRzLmRldGVjdFJlc291cmNlcyA9IHZvaWQgMDtcbnZhciBkZXRlY3RfcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiLi9kZXRlY3QtcmVzb3VyY2VzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGV0ZWN0UmVzb3VyY2VzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RfcmVzb3VyY2VzXzEuZGV0ZWN0UmVzb3VyY2VzOyB9IH0pO1xudmFyIGRldGVjdG9yc18xID0gcmVxdWlyZShcIi4vZGV0ZWN0b3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW52RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRldGVjdG9yc18xLmVudkRldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaG9zdERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5vc0RldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5wcm9jZXNzRGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xudmFyIFJlc291cmNlSW1wbF8xID0gcmVxdWlyZShcIi4vUmVzb3VyY2VJbXBsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzb3VyY2VGcm9tQXR0cmlidXRlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEucmVzb3VyY2VGcm9tQXR0cmlidXRlczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRSZXNvdXJjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEuZGVmYXVsdFJlc291cmNlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW1wdHlSZXNvdXJjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEuZW1wdHlSZXNvdXJjZTsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0U2VydmljZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuZGVmYXVsdFNlcnZpY2VOYW1lOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycikge1xuXHRpZiAodHlwZW9mIEFycmF5LmlzQXJyYXkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpO1xuXHR9XG5cblx0cmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcblx0aWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgJ2NvbnN0cnVjdG9yJyk7XG5cdHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKTtcblx0Ly8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdFxuXHRpZiAob2JqLmNvbnN0cnVjdG9yICYmICFoYXNPd25Db25zdHJ1Y3RvciAmJiAhaGFzSXNQcm90b3R5cGVPZikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLFxuXHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi5cblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gb2JqKSB7IC8qKi8gfVxuXG5cdHJldHVybiB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJyB8fCBoYXNPd24uY2FsbChvYmosIGtleSk7XG59O1xuXG4vLyBJZiBuYW1lIGlzICdfX3Byb3RvX18nLCBhbmQgT2JqZWN0LmRlZmluZVByb3BlcnR5IGlzIGF2YWlsYWJsZSwgZGVmaW5lIF9fcHJvdG9fXyBhcyBhbiBvd24gcHJvcGVydHkgb24gdGFyZ2V0XG52YXIgc2V0UHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMpIHtcblx0aWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7XG5cdH1cbn07XG5cbi8vIFJldHVybiB1bmRlZmluZWQgaW5zdGVhZCBvZiBfX3Byb3RvX18gaWYgJ19fcHJvdG9fXycgaXMgbm90IGFuIG93biBwcm9wZXJ0eVxudmFyIGdldFByb3BlcnR5ID0gZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqLCBuYW1lKSB7XG5cdGlmIChuYW1lID09PSAnX19wcm90b19fJykge1xuXHRcdGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkge1xuXHRcdFx0cmV0dXJuIHZvaWQgMDtcblx0XHR9IGVsc2UgaWYgKGdPUEQpIHtcblx0XHRcdC8vIEluIGVhcmx5IHZlcnNpb25zIG9mIG5vZGUsIG9ialsnX19wcm90b19fJ10gaXMgYnVnZ3kgd2hlbiBvYmogaGFzXG5cdFx0XHQvLyBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5LiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkgd29ya3MuXG5cdFx0XHRyZXR1cm4gZ09QRChvYmosIG5hbWUpLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmpbbmFtZV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZCgpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lO1xuXHR2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzBdO1xuXHR2YXIgaSA9IDE7XG5cdHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHR2YXIgZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKHR5cGVvZiB0YXJnZXQgPT09ICdib29sZWFuJykge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuXHRcdC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHRpID0gMjtcblx0fVxuXHRpZiAodGFyZ2V0ID09IG51bGwgfHwgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnICYmIHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHRmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1tpXTtcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yIChuYW1lIGluIG9wdGlvbnMpIHtcblx0XHRcdFx0c3JjID0gZ2V0UHJvcGVydHkodGFyZ2V0LCBuYW1lKTtcblx0XHRcdFx0Y29weSA9IGdldFByb3BlcnR5KG9wdGlvbnMsIG5hbWUpO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gY29weSkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gaXNBcnJheShjb3B5KSkpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGV4dGVuZChkZWVwLCBjbG9uZSwgY29weSkgfSk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29weSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdHNldFByb3BlcnR5KHRhcmdldCwgeyBuYW1lOiBuYW1lLCBuZXdWYWx1ZTogY29weSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc1N0cmVhbSA9IHN0cmVhbSA9PlxuXHRzdHJlYW0gIT09IG51bGwgJiZcblx0dHlwZW9mIHN0cmVhbSA9PT0gJ29iamVjdCcgJiZcblx0dHlwZW9mIHN0cmVhbS5waXBlID09PSAnZnVuY3Rpb24nO1xuXG5pc1N0cmVhbS53cml0YWJsZSA9IHN0cmVhbSA9PlxuXHRpc1N0cmVhbShzdHJlYW0pICYmXG5cdHN0cmVhbS53cml0YWJsZSAhPT0gZmFsc2UgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGUgPT09ICdmdW5jdGlvbicgJiZcblx0dHlwZW9mIHN0cmVhbS5fd3JpdGFibGVTdGF0ZSA9PT0gJ29iamVjdCc7XG5cbmlzU3RyZWFtLnJlYWRhYmxlID0gc3RyZWFtID0+XG5cdGlzU3RyZWFtKHN0cmVhbSkgJiZcblx0c3RyZWFtLnJlYWRhYmxlICE9PSBmYWxzZSAmJlxuXHR0eXBlb2Ygc3RyZWFtLl9yZWFkID09PSAnZnVuY3Rpb24nICYmXG5cdHR5cGVvZiBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgPT09ICdvYmplY3QnO1xuXG5pc1N0cmVhbS5kdXBsZXggPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0ud3JpdGFibGUoc3RyZWFtKSAmJlxuXHRpc1N0cmVhbS5yZWFkYWJsZShzdHJlYW0pO1xuXG5pc1N0cmVhbS50cmFuc2Zvcm0gPSBzdHJlYW0gPT5cblx0aXNTdHJlYW0uZHVwbGV4KHN0cmVhbSkgJiZcblx0dHlwZW9mIHN0cmVhbS5fdHJhbnNmb3JtID09PSAnZnVuY3Rpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyZWFtO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wa2cgPSB2b2lkIDA7XG5leHBvcnRzLnBrZyA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQ1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG52YXIgX2E7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdheGlvc0Vycm9yID0gZXhwb3J0cy5HQVhJT1NfRVJST1JfU1lNQk9MID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0RXJyb3JSZWRhY3RvciA9IGRlZmF1bHRFcnJvclJlZGFjdG9yO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IGV4dGVuZF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJleHRlbmRcIikpO1xuLyoqXG4gKiBTdXBwb3J0IGBpbnN0YW5jZW9mYCBvcGVyYXRvciBmb3IgYEdheGlvc0Vycm9yYHMgaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoaXMgbGlicmFyeS5cbiAqXG4gKiBAc2VlIHtAbGluayBHYXhpb3NFcnJvcltTeW1ib2wuaGFzSW5zdGFuY2VdfVxuICovXG5leHBvcnRzLkdBWElPU19FUlJPUl9TWU1CT0wgPSBTeW1ib2wuZm9yKGAke3V0aWxfMS5wa2cubmFtZX0tZ2F4aW9zLWVycm9yYCk7XG4vKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuY2xhc3MgR2F4aW9zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgLyoqXG4gICAgICogU3VwcG9ydCBgaW5zdGFuY2VvZmAgb3BlcmF0b3IgZm9yIGBHYXhpb3NFcnJvcmAgYWNyb3NzIGJ1aWxkcy9kdXBsaWNhdGVkIGZpbGVzLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgR0FYSU9TX0VSUk9SX1NZTUJPTH1cbiAgICAgKiBAc2VlIHtAbGluayBHYXhpb3NFcnJvcltHQVhJT1NfRVJST1JfU1lNQk9MXX1cbiAgICAgKi9cbiAgICBzdGF0aWMgWyhfYSA9IGV4cG9ydHMuR0FYSU9TX0VSUk9SX1NZTUJPTCwgU3ltYm9sLmhhc0luc3RhbmNlKV0oaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGluc3RhbmNlICYmXG4gICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBleHBvcnRzLkdBWElPU19FUlJPUl9TWU1CT0wgaW4gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgIGluc3RhbmNlW2V4cG9ydHMuR0FYSU9TX0VSUk9SX1NZTUJPTF0gPT09IHV0aWxfMS5wa2cudmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gbmF0aXZlXG4gICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKEdheGlvc0Vycm9yLCBpbnN0YW5jZSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvbmZpZywgcmVzcG9uc2UsIGVycm9yKSB7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHBvcnQgYGluc3RhbmNlb2ZgIG9wZXJhdG9yIGZvciBgR2F4aW9zRXJyb3JgIGFjcm9zcyBidWlsZHMvZHVwbGljYXRlZCBmaWxlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgR0FYSU9TX0VSUk9SX1NZTUJPTH1cbiAgICAgICAgICogQHNlZSB7QGxpbmsgR2F4aW9zRXJyb3JbU3ltYm9sLmhhc0luc3RhbmNlXX1cbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xMzk2NSNpc3N1ZWNvbW1lbnQtMjc4NTcwMjAwfVxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NjYxODg1Mi9yZXF1aXJlLWFuZC1pbnN0YW5jZW9mfVxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9AQGhhc0luc3RhbmNlI3JldmVydGluZ190b19kZWZhdWx0X2luc3RhbmNlb2ZfYmVoYXZpb3J9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzW19hXSA9IHV0aWxfMS5wa2cudmVyc2lvbjtcbiAgICAgICAgLy8gZGVlcC1jb3B5IGNvbmZpZyBhcyB3ZSBkbyBub3Qgd2FudCB0byBtdXRhdGVcbiAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGNvbmZpZyBmb3IgZnV0dXJlIHJldHJpZXMvdXNlXG4gICAgICAgIHRoaXMuY29uZmlnID0gKDAsIGV4dGVuZF8xLmRlZmF1bHQpKHRydWUsIHt9LCBjb25maWcpO1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zZS5jb25maWcgPSAoMCwgZXh0ZW5kXzEuZGVmYXVsdCkodHJ1ZSwge30sIHRoaXMucmVzcG9uc2UuY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2xhdGVEYXRhKHRoaXMuY29uZmlnLnJlc3BvbnNlVHlwZSwgKF9iID0gdGhpcy5yZXNwb25zZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9jKSB7XG4gICAgICAgICAgICAgICAgLy8gYmVzdCBlZmZvcnQgLSBkb24ndCB0aHJvdyBhbiBlcnJvciB3aXRoaW4gYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZCBzZXQgYHRoaXMucmVzcG9uc2UuY29uZmlnLnJlc3BvbnNlVHlwZSA9ICd1bmtub3duJ2AsIGJ1dFxuICAgICAgICAgICAgICAgIC8vIHRoYXQgd291bGQgbXV0YXRlIGZ1dHVyZSBjYWxscyB3aXRoIHRoaXMgY29uZmlnIG9iamVjdC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5yZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICdjb2RlJyBpbiBlcnJvciAmJiBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBlcnJvci5jb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZXJyb3JSZWRhY3Rvcikge1xuICAgICAgICAgICAgY29uZmlnLmVycm9yUmVkYWN0b3Ioe1xuICAgICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IHRoaXMucmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuR2F4aW9zRXJyb3IgPSBHYXhpb3NFcnJvcjtcbmZ1bmN0aW9uIHRyYW5zbGF0ZURhdGEocmVzcG9uc2VUeXBlLCBkYXRhKSB7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RyZWFtJzpcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgY2FzZSAnYXJyYXlidWZmZXInOlxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgICAgIGNhc2UgJ2Jsb2InOlxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50ZXh0KCkpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuLyoqXG4gKiBBbiBleHBlcmltZW50YWwgZXJyb3IgcmVkYWN0b3IuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWcgdG8gcG90ZW50aWFsbHkgcmVkYWN0IHByb3BlcnRpZXMgb2ZcbiAqIEBwYXJhbSByZXNwb25zZSBDb25maWcgdG8gcG90ZW50aWFsbHkgcmVkYWN0IHByb3BlcnRpZXMgb2ZcbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvclJlZGFjdG9yKGRhdGEpIHtcbiAgICBjb25zdCBSRURBQ1QgPSAnPDxSRURBQ1RFRD4gLSBTZWUgYGVycm9yUmVkYWN0b3JgIG9wdGlvbiBpbiBgZ2F4aW9zYCBmb3IgY29uZmlndXJhdGlvbj4uJztcbiAgICBmdW5jdGlvbiByZWRhY3RIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKCFoZWFkZXJzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgLy8gYW55IGNhc2luZyBvZiBgQXV0aGVudGljYXRpb25gXG4gICAgICAgICAgICBpZiAoL15hdXRoZW50aWNhdGlvbiQvaS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBSRURBQ1Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbnkgY2FzaW5nIG9mIGBBdXRob3JpemF0aW9uYFxuICAgICAgICAgICAgaWYgKC9eYXV0aG9yaXphdGlvbiQvaS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBSRURBQ1Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbnl0aGluZyBjb250YWluaW5nIHNlY3JldCwgc3VjaCBhcyAnY2xpZW50IHNlY3JldCdcbiAgICAgICAgICAgIGlmICgvc2VjcmV0L2kudGVzdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1trZXldID0gUkVEQUNUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZGFjdFN0cmluZyhvYmosIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIG9ialtrZXldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKC9ncmFudF90eXBlPS9pLnRlc3QodGV4dCkgfHxcbiAgICAgICAgICAgICAgICAvYXNzZXJ0aW9uPS9pLnRlc3QodGV4dCkgfHxcbiAgICAgICAgICAgICAgICAvc2VjcmV0L2kudGVzdCh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gUkVEQUNUO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZGFjdE9iamVjdChvYmopIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCdncmFudF90eXBlJyBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBvYmpbJ2dyYW50X3R5cGUnXSA9IFJFREFDVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnYXNzZXJ0aW9uJyBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBvYmpbJ2Fzc2VydGlvbiddID0gUkVEQUNUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdjbGllbnRfc2VjcmV0JyBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBvYmpbJ2NsaWVudF9zZWNyZXQnXSA9IFJFREFDVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgcmVkYWN0SGVhZGVycyhkYXRhLmNvbmZpZy5oZWFkZXJzKTtcbiAgICAgICAgcmVkYWN0U3RyaW5nKGRhdGEuY29uZmlnLCAnZGF0YScpO1xuICAgICAgICByZWRhY3RPYmplY3QoZGF0YS5jb25maWcuZGF0YSk7XG4gICAgICAgIHJlZGFjdFN0cmluZyhkYXRhLmNvbmZpZywgJ2JvZHknKTtcbiAgICAgICAgcmVkYWN0T2JqZWN0KGRhdGEuY29uZmlnLmJvZHkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IHVybF8xLlVSTCgnJywgZGF0YS5jb25maWcudXJsKTtcbiAgICAgICAgICAgIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcygndG9rZW4nKSkge1xuICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd0b2tlbicsIFJFREFDVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoJ2NsaWVudF9zZWNyZXQnKSkge1xuICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdjbGllbnRfc2VjcmV0JywgUkVEQUNUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuY29uZmlnLnVybCA9IHVybC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYikge1xuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yIC0gbm8gbmVlZCB0byBwYXJzZSBhbiBpbnZhbGlkIFVSTFxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLnJlc3BvbnNlKSB7XG4gICAgICAgIGRlZmF1bHRFcnJvclJlZGFjdG9yKHsgY29uZmlnOiBkYXRhLnJlc3BvbnNlLmNvbmZpZyB9KTtcbiAgICAgICAgcmVkYWN0SGVhZGVycyhkYXRhLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICByZWRhY3RTdHJpbmcoZGF0YS5yZXNwb25zZSwgJ2RhdGEnKTtcbiAgICAgICAgcmVkYWN0T2JqZWN0KGRhdGEucmVzcG9uc2UuZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tbW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UmV0cnlDb25maWcgPSBnZXRSZXRyeUNvbmZpZztcbmFzeW5jIGZ1bmN0aW9uIGdldFJldHJ5Q29uZmlnKGVycikge1xuICAgIGxldCBjb25maWcgPSBnZXRDb25maWcoZXJyKTtcbiAgICBpZiAoIWVyciB8fCAhZXJyLmNvbmZpZyB8fCAoIWNvbmZpZyAmJiAhZXJyLmNvbmZpZy5yZXRyeSkpIHtcbiAgICAgICAgcmV0dXJuIHsgc2hvdWxkUmV0cnk6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcuY3VycmVudFJldHJ5QXR0ZW1wdCA9IGNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0IHx8IDA7XG4gICAgY29uZmlnLnJldHJ5ID1cbiAgICAgICAgY29uZmlnLnJldHJ5ID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnJldHJ5ID09PSBudWxsID8gMyA6IGNvbmZpZy5yZXRyeTtcbiAgICBjb25maWcuaHR0cE1ldGhvZHNUb1JldHJ5ID0gY29uZmlnLmh0dHBNZXRob2RzVG9SZXRyeSB8fCBbXG4gICAgICAgICdHRVQnLFxuICAgICAgICAnSEVBRCcsXG4gICAgICAgICdQVVQnLFxuICAgICAgICAnT1BUSU9OUycsXG4gICAgICAgICdERUxFVEUnLFxuICAgIF07XG4gICAgY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzID1cbiAgICAgICAgY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzID09PSB1bmRlZmluZWQgfHwgY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzID09PSBudWxsXG4gICAgICAgICAgICA/IDJcbiAgICAgICAgICAgIDogY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzO1xuICAgIGNvbmZpZy5yZXRyeURlbGF5TXVsdGlwbGllciA9IGNvbmZpZy5yZXRyeURlbGF5TXVsdGlwbGllclxuICAgICAgICA/IGNvbmZpZy5yZXRyeURlbGF5TXVsdGlwbGllclxuICAgICAgICA6IDI7XG4gICAgY29uZmlnLnRpbWVPZkZpcnN0UmVxdWVzdCA9IGNvbmZpZy50aW1lT2ZGaXJzdFJlcXVlc3RcbiAgICAgICAgPyBjb25maWcudGltZU9mRmlyc3RSZXF1ZXN0XG4gICAgICAgIDogRGF0ZS5ub3coKTtcbiAgICBjb25maWcudG90YWxUaW1lb3V0ID0gY29uZmlnLnRvdGFsVGltZW91dFxuICAgICAgICA/IGNvbmZpZy50b3RhbFRpbWVvdXRcbiAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBjb25maWcubWF4UmV0cnlEZWxheSA9IGNvbmZpZy5tYXhSZXRyeURlbGF5XG4gICAgICAgID8gY29uZmlnLm1heFJldHJ5RGVsYXlcbiAgICAgICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAvLyBJZiB0aGlzIHdhc24ndCBpbiB0aGUgbGlzdCBvZiBzdGF0dXMgY29kZXMgd2hlcmUgd2Ugd2FudFxuICAgIC8vIHRvIGF1dG9tYXRpY2FsbHkgcmV0cnksIHJldHVybi5cbiAgICBjb25zdCByZXRyeVJhbmdlcyA9IFtcbiAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9IVFRQX3N0YXR1c19jb2Rlc1xuICAgICAgICAvLyAxeHggLSBSZXRyeSAoSW5mb3JtYXRpb25hbCwgcmVxdWVzdCBzdGlsbCBwcm9jZXNzaW5nKVxuICAgICAgICAvLyAyeHggLSBEbyBub3QgcmV0cnkgKFN1Y2Nlc3MpXG4gICAgICAgIC8vIDN4eCAtIERvIG5vdCByZXRyeSAoUmVkaXJlY3QpXG4gICAgICAgIC8vIDR4eCAtIERvIG5vdCByZXRyeSAoQ2xpZW50IGVycm9ycylcbiAgICAgICAgLy8gNDA4IC0gUmV0cnkgKFwiUmVxdWVzdCBUaW1lb3V0XCIpXG4gICAgICAgIC8vIDQyOSAtIFJldHJ5IChcIlRvbyBNYW55IFJlcXVlc3RzXCIpXG4gICAgICAgIC8vIDV4eCAtIFJldHJ5IChTZXJ2ZXIgZXJyb3JzKVxuICAgICAgICBbMTAwLCAxOTldLFxuICAgICAgICBbNDA4LCA0MDhdLFxuICAgICAgICBbNDI5LCA0MjldLFxuICAgICAgICBbNTAwLCA1OTldLFxuICAgIF07XG4gICAgY29uZmlnLnN0YXR1c0NvZGVzVG9SZXRyeSA9IGNvbmZpZy5zdGF0dXNDb2Rlc1RvUmV0cnkgfHwgcmV0cnlSYW5nZXM7XG4gICAgLy8gUHV0IHRoZSBjb25maWcgYmFjayBpbnRvIHRoZSBlcnJcbiAgICBlcnIuY29uZmlnLnJldHJ5Q29uZmlnID0gY29uZmlnO1xuICAgIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgcmV0cnkgdGhlIHJlcXVlc3RcbiAgICBjb25zdCBzaG91bGRSZXRyeUZuID0gY29uZmlnLnNob3VsZFJldHJ5IHx8IHNob3VsZFJldHJ5UmVxdWVzdDtcbiAgICBpZiAoIShhd2FpdCBzaG91bGRSZXRyeUZuKGVycikpKSB7XG4gICAgICAgIHJldHVybiB7IHNob3VsZFJldHJ5OiBmYWxzZSwgY29uZmlnOiBlcnIuY29uZmlnIH07XG4gICAgfVxuICAgIGNvbnN0IGRlbGF5ID0gZ2V0TmV4dFJldHJ5RGVsYXkoY29uZmlnKTtcbiAgICAvLyBXZSdyZSBnb2luZyB0byByZXRyeSEgIEluY3JlbWVuZW50IHRoZSBjb3VudGVyLlxuICAgIGVyci5jb25maWcucmV0cnlDb25maWcuY3VycmVudFJldHJ5QXR0ZW1wdCArPSAxO1xuICAgIC8vIENyZWF0ZSBhIHByb21pc2UgdGhhdCBpbnZva2VzIHRoZSByZXRyeSBhZnRlciB0aGUgYmFja09mZkRlbGF5XG4gICAgY29uc3QgYmFja29mZiA9IGNvbmZpZy5yZXRyeUJhY2tvZmZcbiAgICAgICAgPyBjb25maWcucmV0cnlCYWNrb2ZmKGVyciwgZGVsYXkpXG4gICAgICAgIDogbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcbiAgICAgICAgfSk7XG4gICAgLy8gTm90aWZ5IHRoZSB1c2VyIGlmIHRoZXkgYWRkZWQgYW4gYG9uUmV0cnlBdHRlbXB0YCBoYW5kbGVyXG4gICAgaWYgKGNvbmZpZy5vblJldHJ5QXR0ZW1wdCkge1xuICAgICAgICBjb25maWcub25SZXRyeUF0dGVtcHQoZXJyKTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIHRoZSBwcm9taXNlIGluIHdoaWNoIHJlY2FsbHMgR2F4aW9zIHRvIHJldHJ5IHRoZSByZXF1ZXN0XG4gICAgYXdhaXQgYmFja29mZjtcbiAgICByZXR1cm4geyBzaG91bGRSZXRyeTogdHJ1ZSwgY29uZmlnOiBlcnIuY29uZmlnIH07XG59XG4vKipcbiAqIERldGVybWluZSBiYXNlZCBvbiBjb25maWcgaWYgd2Ugc2hvdWxkIHJldHJ5IHRoZSByZXF1ZXN0LlxuICogQHBhcmFtIGVyciBUaGUgR2F4aW9zRXJyb3IgcGFzc2VkIHRvIHRoZSBpbnRlcmNlcHRvci5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUmV0cnlSZXF1ZXN0KGVycikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoZXJyKTtcbiAgICAvLyBub2RlLWZldGNoIHJhaXNlcyBhbiBBYm9ydEVycm9yIGlmIHNpZ25hbGVkOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpbm4vbm9kZS1mZXRjaCNyZXF1ZXN0LWNhbmNlbGxhdGlvbi13aXRoLWFib3J0c2lnbmFsXG4gICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicgfHwgKChfYSA9IGVyci5lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGNvbmZpZywgb3IgcmV0cmllcyBhcmUgZGlzYWJsZWQsIHJldHVybi5cbiAgICBpZiAoIWNvbmZpZyB8fCBjb25maWcucmV0cnkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGlzIGVycm9yIGhhcyBubyByZXNwb25zZSAoRVRJTUVET1VULCBFTk9URk9VTkQsIGV0YylcbiAgICBpZiAoIWVyci5yZXNwb25zZSAmJlxuICAgICAgICAoY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgfHwgMCkgPj0gY29uZmlnLm5vUmVzcG9uc2VSZXRyaWVzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gT25seSByZXRyeSB3aXRoIGNvbmZpZ3VyZWQgSHR0cE1ldGhvZHMuXG4gICAgaWYgKCFlcnIuY29uZmlnLm1ldGhvZCB8fFxuICAgICAgICBjb25maWcuaHR0cE1ldGhvZHNUb1JldHJ5LmluZGV4T2YoZXJyLmNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSkgPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgdGhpcyB3YXNuJ3QgaW4gdGhlIGxpc3Qgb2Ygc3RhdHVzIGNvZGVzIHdoZXJlIHdlIHdhbnRcbiAgICAvLyB0byBhdXRvbWF0aWNhbGx5IHJldHJ5LCByZXR1cm4uXG4gICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgIGxldCBpc0luUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBbbWluLCBtYXhdIG9mIGNvbmZpZy5zdGF0dXNDb2Rlc1RvUmV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGVyci5yZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID49IG1pbiAmJiBzdGF0dXMgPD0gbWF4KSB7XG4gICAgICAgICAgICAgICAgaXNJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzSW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBvdXQgb2YgcmV0cnkgYXR0ZW1wdHMsIHJldHVyblxuICAgIGNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0ID0gY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgfHwgMDtcbiAgICBpZiAoY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgPj0gY29uZmlnLnJldHJ5KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEFjcXVpcmUgdGhlIHJheENvbmZpZyBvYmplY3QgZnJvbSBhbiBHYXhpb3NFcnJvciBpZiBhdmFpbGFibGUuXG4gKiBAcGFyYW0gZXJyIFRoZSBHYXhpb3MgZXJyb3Igd2l0aCBhIGNvbmZpZyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZyhlcnIpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb25maWcgJiYgZXJyLmNvbmZpZy5yZXRyeUNvbmZpZykge1xuICAgICAgICByZXR1cm4gZXJyLmNvbmZpZy5yZXRyeUNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBHZXRzIHRoZSBkZWxheSB0byB3YWl0IGJlZm9yZSB0aGUgbmV4dCByZXRyeS5cbiAqXG4gKiBAcGFyYW0ge1JldHJ5Q29uZmlnfSBjb25maWcgVGhlIGN1cnJlbnQgc2V0IG9mIHJldHJ5IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBhbW91bnQgb2YgbXMgdG8gd2FpdCBiZWZvcmUgdGhlIG5leHQgcmV0cnkgYXR0ZW1wdC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dFJldHJ5RGVsYXkoY29uZmlnKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIENhbGN1bGF0ZSB0aW1lIHRvIHdhaXQgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJldHJ5LCBsb29rIGZvciBhIGNvbmZpZ3VyZWQgcmV0cnlEZWxheS5cbiAgICBjb25zdCByZXRyeURlbGF5ID0gY29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQgPyAwIDogKF9hID0gY29uZmlnLnJldHJ5RGVsYXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEwMDtcbiAgICAvLyBGb3JtdWxhOiByZXRyeURlbGF5ICsgKChyZXRyeURlbGF5TXVsdGlwbGllcl5jdXJyZW50UmV0cnlBdHRlbXB0IC0gMSAvIDIpICogMTAwMClcbiAgICBjb25zdCBjYWxjdWxhdGVkRGVsYXkgPSByZXRyeURlbGF5ICtcbiAgICAgICAgKChNYXRoLnBvdyhjb25maWcucmV0cnlEZWxheU11bHRpcGxpZXIsIGNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0KSAtIDEpIC9cbiAgICAgICAgICAgIDIpICpcbiAgICAgICAgICAgIDEwMDA7XG4gICAgY29uc3QgbWF4QWxsb3dhYmxlRGVsYXkgPSBjb25maWcudG90YWxUaW1lb3V0IC0gKERhdGUubm93KCkgLSBjb25maWcudGltZU9mRmlyc3RSZXF1ZXN0KTtcbiAgICByZXR1cm4gTWF0aC5taW4oY2FsY3VsYXRlZERlbGF5LCBtYXhBbGxvd2FibGVEZWxheSwgY29uZmlnLm1heFJldHJ5RGVsYXkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJuZztcblxudmFyIF9jcnlwdG8gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjcnlwdG9cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCBybmRzOFBvb2wgPSBuZXcgVWludDhBcnJheSgyNTYpOyAvLyAjIG9mIHJhbmRvbSB2YWx1ZXMgdG8gcHJlLWFsbG9jYXRlXG5cbmxldCBwb29sUHRyID0gcm5kczhQb29sLmxlbmd0aDtcblxuZnVuY3Rpb24gcm5nKCkge1xuICBpZiAocG9vbFB0ciA+IHJuZHM4UG9vbC5sZW5ndGggLSAxNikge1xuICAgIF9jcnlwdG8uZGVmYXVsdC5yYW5kb21GaWxsU3luYyhybmRzOFBvb2wpO1xuXG4gICAgcG9vbFB0ciA9IDA7XG4gIH1cblxuICByZXR1cm4gcm5kczhQb29sLnNsaWNlKHBvb2xQdHIsIHBvb2xQdHIgKz0gMTYpO1xufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLnVuc2FmZVN0cmluZ2lmeSA9IHVuc2FmZVN0cmluZ2lmeTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5sZXQgX25vZGVJZDtcblxubGV0IF9jbG9ja3NlcTsgLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG5cblxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgbGV0IGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIGxldCBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgbGV0IG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgY29uc3QgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwOyAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG5cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfSAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG5cblxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfSAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG5cblxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTsgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG5cbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7IC8vIGB0aW1lX2xvd2BcblxuICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICBjb25zdCB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHYxO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbnZhciBfZGVmYXVsdCA9IHBhcnNlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShieXRlcykpIHtcbiAgICBieXRlcyA9IEJ1ZmZlci5mcm9tKGJ5dGVzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcywgJ3V0ZjgnKTtcbiAgfVxuXG4gIHJldHVybiBfY3J5cHRvLmRlZmF1bHQuY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGJ5dGVzKS5kaWdlc3QoKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX21kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZDUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCB2MyA9ICgwLCBfdi5kZWZhdWx0KSgndjMnLCAweDMwLCBfbWQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2MztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiY3J5cHRvXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEOiBfY3J5cHRvLmRlZmF1bHQucmFuZG9tVVVJRFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX2NyeXB0byA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNyeXB0b1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgYnl0ZXMgPSBCdWZmZXIuZnJvbShieXRlcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMsICd1dGY4Jyk7XG4gIH1cblxuICByZXR1cm4gX2NyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzaGExO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9uaWwuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcGFyc2UuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF92LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HYXhpb3NJbnRlcmNlcHRvck1hbmFnZXIgPSB2b2lkIDA7XG4vKipcbiAqIENsYXNzIHRvIG1hbmFnZSBjb2xsZWN0aW9ucyBvZiBHYXhpb3NJbnRlcmNlcHRvcnMgZm9yIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy5cbiAqL1xuY2xhc3MgR2F4aW9zSW50ZXJjZXB0b3JNYW5hZ2VyIGV4dGVuZHMgU2V0IHtcbn1cbmV4cG9ydHMuR2F4aW9zSW50ZXJjZXB0b3JNYW5hZ2VyID0gR2F4aW9zSW50ZXJjZXB0b3JNYW5hZ2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJjZXB0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXEgPSBleHBvcnRzLmpzb24gPSBleHBvcnRzLnRvQnVmZmVyID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cFwiKSk7XG5jb25zdCBodHRwcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiaHR0cHNcIikpO1xuYXN5bmMgZnVuY3Rpb24gdG9CdWZmZXIoc3RyZWFtKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MsIGxlbmd0aCk7XG59XG5leHBvcnRzLnRvQnVmZmVyID0gdG9CdWZmZXI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24ganNvbihzdHJlYW0pIHtcbiAgICBjb25zdCBidWYgPSBhd2FpdCB0b0J1ZmZlcihzdHJlYW0pO1xuICAgIGNvbnN0IHN0ciA9IGJ1Zi50b1N0cmluZygndXRmOCcpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cik7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IF9lcnI7XG4gICAgICAgIGVyci5tZXNzYWdlICs9IGAgKGlucHV0OiAke3N0cn0pYDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cbmV4cG9ydHMuanNvbiA9IGpzb247XG5mdW5jdGlvbiByZXEodXJsLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBocmVmID0gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwgOiB1cmwuaHJlZjtcbiAgICBjb25zdCByZXEgPSAoaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSA/IGh0dHBzIDogaHR0cCkucmVxdWVzdCh1cmwsIG9wdHMpO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlcVxuICAgICAgICAgICAgLm9uY2UoJ3Jlc3BvbnNlJywgcmVzb2x2ZSlcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgIC5lbmQoKTtcbiAgICB9KTtcbiAgICByZXEudGhlbiA9IHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpO1xuICAgIHJldHVybiByZXE7XG59XG5leHBvcnRzLnJlcSA9IHJlcTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdlbnQgPSB2b2lkIDA7XG5jb25zdCBuZXQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcIm5ldFwiKSk7XG5jb25zdCBodHRwID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJodHRwXCIpKTtcbmNvbnN0IGh0dHBzXzEgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaGVscGVyc1wiKSwgZXhwb3J0cyk7XG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgnQWdlbnRCYXNlSW50ZXJuYWxTdGF0ZScpO1xuY2xhc3MgQWdlbnQgZXh0ZW5kcyBodHRwLkFnZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzW0lOVEVSTkFMXSA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuXG4gICAgICovXG4gICAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgXCJwYXNzaW5nIHRocm91Z2hcIiB0byB0aGlzIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpc1xuICAgICAgICAgICAgLy8gc2V0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY2FzZSBzaW5jZSB1c2luZyBhIGZ1bGwgc3RyaW5nIFVSTFxuICAgICAgICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluYWxseSwgaWYgbm8gYHByb3RvY29sYCBwcm9wZXJ0eSB3YXMgc2V0LCB0aGVuIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0b1xuICAgICAgICAvLyBkZXRlY3QgdGhlIFwiaHR0cHNcIiBtb2R1bGUuXG4gICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0YWNrXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAuc29tZSgobCkgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8XG4gICAgICAgICAgICBsLmluZGV4T2YoJ25vZGU6aHR0cHM6JykgIT09IC0xKTtcbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBhc3luYyBzaWduYXR1cmVzIGluIGBjb25uZWN0KClgIGFuZCBOb2RlJ3MgbmF0aXZlXG4gICAgLy8gY29ubmVjdGlvbiBwb29saW5nIGluIGBodHRwLkFnZW50YCwgdGhlIGFycmF5IG9mIHNvY2tldHMgZm9yIGVhY2ggb3JpZ2luXG4gICAgLy8gaGFzIHRvIGJlIHVwZGF0ZWQgc3luY2hyb25vdXNseS4gVGhpcyBpcyBzbyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpc1xuICAgIC8vIGFjY3VyYXRlIHdoZW4gYGFkZFJlcXVlc3QoKWAgaXMgbmV4dCBjYWxsZWQuIFdlIGFjaGlldmUgdGhpcyBieSBjcmVhdGluZyBhXG4gICAgLy8gZmFrZSBzb2NrZXQgYW5kIGFkZGluZyBpdCB0byBgc29ja2V0c1tvcmlnaW5dYCBhbmQgaW5jcmVtZW50aW5nXG4gICAgLy8gYHRvdGFsU29ja2V0Q291bnRgLlxuICAgIGluY3JlbWVudFNvY2tldHMobmFtZSkge1xuICAgICAgICAvLyBJZiBgbWF4U29ja2V0c2AgYW5kIGBtYXhUb3RhbFNvY2tldHNgIGFyZSBib3RoIEluZmluaXR5IHRoZW4gdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgYSBmYWtlIHNvY2tldCBiZWNhdXNlIE5vZGUuanMgbmF0aXZlIGNvbm5lY3Rpb24gcG9vbGluZ1xuICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGludm9rZWQuXG4gICAgICAgIGlmICh0aGlzLm1heFNvY2tldHMgPT09IEluZmluaXR5ICYmIHRoaXMubWF4VG90YWxTb2NrZXRzID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsIGluc3RhbmNlcyBvZiBgc29ja2V0c2AgYXJlIGV4cGVjdGVkIFR5cGVTY3JpcHQgZXJyb3JzLiBUaGVcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gYWRkIGl0IGFzIGEgcHJpdmF0ZSBwcm9wZXJ0eSBvZiB0aGlzIGNsYXNzIGJ1dCB0aGF0XG4gICAgICAgIC8vIHdpbGwgYnJlYWsgVHlwZVNjcmlwdCBzdWJjbGFzc2luZy5cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldHNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHNvY2tldHNgIGlzIHJlYWRvbmx5IGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMuc29ja2V0c1tuYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXRzW25hbWVdLnB1c2goZmFrZVNvY2tldCk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHRvdGFsU29ja2V0Q291bnRgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICB0aGlzLnRvdGFsU29ja2V0Q291bnQrKztcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxuICAgIGRlY3JlbWVudFNvY2tldHMobmFtZSwgc29ja2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXRzW25hbWVdIHx8IHNvY2tldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldHMgPSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc29ja2V0cy5pbmRleE9mKHNvY2tldCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHNvY2tldHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgIGB0b3RhbFNvY2tldENvdW50YCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWBcbiAgICAgICAgICAgIHRoaXMudG90YWxTb2NrZXRDb3VudC0tO1xuICAgICAgICAgICAgaWYgKHNvY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgc29ja2V0c2AgaXMgcmVhZG9ubHkgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNvY2tldHNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSW4gb3JkZXIgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzb2NrZXQgcG9vbCwgd2UgbmVlZCB0byBjYWxsIGBnZXROYW1lKClgIG9uXG4gICAgLy8gdGhlIGNvcmUgYGh0dHBzLkFnZW50YCBpZiBpdCBpcyBhIHNlY3VyZUVuZHBvaW50LlxuICAgIGdldE5hbWUob3B0aW9ucykge1xuICAgICAgICBjb25zdCBzZWN1cmVFbmRwb2ludCA9IHRoaXMuaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKTtcbiAgICAgICAgaWYgKHNlY3VyZUVuZHBvaW50KSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBnZXROYW1lKClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgcmV0dXJuIGh0dHBzXzEuQWdlbnQucHJvdG90eXBlLmdldE5hbWUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBnZXROYW1lKClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0TmFtZShvcHRpb25zKTtcbiAgICB9XG4gICAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdE9wdHMgPSB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgc2VjdXJlRW5kcG9pbnQ6IHRoaXMuaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZShjb25uZWN0T3B0cyk7XG4gICAgICAgIGNvbnN0IGZha2VTb2NrZXQgPSB0aGlzLmluY3JlbWVudFNvY2tldHMobmFtZSk7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNvbm5lY3QocmVxLCBjb25uZWN0T3B0cykpXG4gICAgICAgICAgICAudGhlbigoc29ja2V0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudFNvY2tldHMobmFtZSwgZmFrZVNvY2tldCk7XG4gICAgICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGFkZFJlcXVlc3QoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0O1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgY3JlYXRlU29ja2V0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYFxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpO1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudFNvY2tldHMobmFtZSwgZmFrZVNvY2tldCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlQ29ubmVjdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDtcbiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdFBvcnQoKSB7XG4gICAgICAgIHJldHVybiAodGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPz9cbiAgICAgICAgICAgICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSk7XG4gICAgfVxuICAgIHNldCBkZWZhdWx0UG9ydCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwcm90b2NvbCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCA/P1xuICAgICAgICAgICAgKHRoaXMuaXNTZWN1cmVFbmRwb2ludCgpID8gJ2h0dHBzOicgOiAnaHR0cDonKSk7XG4gICAgfVxuICAgIHNldCBwcm90b2NvbCh2KSB7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSTkFMXSkge1xuICAgICAgICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5BZ2VudCA9IEFnZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VQcm94eVJlc3BvbnNlID0gdm9pZCAwO1xuY29uc3QgZGVidWdfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZGVidWdcIikpO1xuY29uc3QgZGVidWcgPSAoMCwgZGVidWdfMS5kZWZhdWx0KSgnaHR0cHMtcHJveHktYWdlbnQ6cGFyc2UtcHJveHktcmVzcG9uc2UnKTtcbmZ1bmN0aW9uIHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0XG4gICAgICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuIFwiMjAwXCJcbiAgICAgICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgXCJkYXRhXCIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGVcbiAgICAgICAgLy8gSFRUUCBwYXJzZXIgaXMgaG9va2VkIHVwLi4uXG4gICAgICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgYiA9IHNvY2tldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoYilcbiAgICAgICAgICAgICAgICBvbmRhdGEoYik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc29ja2V0Lm9uY2UoJ3JlYWRhYmxlJywgcmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIHJlYWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZW5kJyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgZGVidWcoJ29uZXJyb3IgJW8nLCBlcnIpO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25kYXRhKGIpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChiKTtcbiAgICAgICAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcXHJcXG5cXHJcXG4nKTtcbiAgICAgICAgICAgIGlmIChlbmRPZkhlYWRlcnMgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8ga2VlcCBidWZmZXJpbmdcbiAgICAgICAgICAgICAgICBkZWJ1ZygnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTtcbiAgICAgICAgICAgICAgICByZWFkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZFxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKCdhc2NpaScpXG4gICAgICAgICAgICAgICAgLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0TGluZSkge1xuICAgICAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05vIGhlYWRlciByZWNlaXZlZCBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9ICtmaXJzdExpbmVQYXJ0c1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJQYXJ0cykge1xuICAgICAgICAgICAgICAgIGlmICghaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbG9uID0gaGVhZGVyLmluZGV4T2YoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb2xvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogXCIke2hlYWRlcn1cImApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyLnNsaWNlKDAsIGZpcnN0Q29sb24pLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFkZXIuc2xpY2UoZmlyc3RDb2xvbiArIDEpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1ZygnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgY29ubmVjdDoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnVmZmVyZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7XG4gICAgICAgIHNvY2tldC5vbignZW5kJywgb25lbmQpO1xuICAgICAgICByZWFkKCk7XG4gICAgfSk7XG59XG5leHBvcnRzLnBhcnNlUHJveHlSZXNwb25zZSA9IHBhcnNlUHJveHlSZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLXByb3h5LXJlc3BvbnNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cHNQcm94eUFnZW50ID0gdm9pZCAwO1xuY29uc3QgbmV0ID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJuZXRcIikpO1xuY29uc3QgdGxzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ0bHNcIikpO1xuY29uc3QgYXNzZXJ0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImFzc2VydFwiKSk7XG5jb25zdCBkZWJ1Z18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJkZWJ1Z1wiKSk7XG5jb25zdCBhZ2VudF9iYXNlXzEgPSByZXF1aXJlKFwiYWdlbnQtYmFzZVwiKTtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IHBhcnNlX3Byb3h5X3Jlc3BvbnNlXzEgPSByZXF1aXJlKFwiLi9wYXJzZS1wcm94eS1yZXNwb25zZVwiKTtcbmNvbnN0IGRlYnVnID0gKDAsIGRlYnVnXzEuZGVmYXVsdCkoJ2h0dHBzLXByb3h5LWFnZW50Jyk7XG5jb25zdCBzZXRTZXJ2ZXJuYW1lRnJvbU5vbklwSG9zdCA9IChvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuc2VydmVybmFtZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG9wdGlvbnMuaG9zdCAmJlxuICAgICAgICAhbmV0LmlzSVAob3B0aW9ucy5ob3N0KSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHNlcnZlcm5hbWU6IG9wdGlvbnMuaG9zdCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59O1xuLyoqXG4gKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG9cbiAqIHRoZSBzcGVjaWZpZWQgXCJIVFRQKHMpIHByb3h5IHNlcnZlclwiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLlxuICpcbiAqIE91dGdvaW5nIEhUVFAgcmVxdWVzdHMgYXJlIGZpcnN0IHR1bm5lbGVkIHRocm91Z2ggdGhlIHByb3h5IHNlcnZlciB1c2luZyB0aGVcbiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlcixcbiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZVxuICogSFRUUCByZXF1ZXN0IGZyb20gdGhlIHByb3h5IHNlcnZlci5cbiAqXG4gKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlXG4gKiB0aGUgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuICovXG5jbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBhZ2VudF9iYXNlXzEuQWdlbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IHBhdGg6IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyB1cmxfMS5VUkwocHJveHkpIDogcHJveHk7XG4gICAgICAgIHRoaXMucHJveHlIZWFkZXJzID0gb3B0cz8uaGVhZGVycyA/PyB7fTtcbiAgICAgICAgZGVidWcoJ0NyZWF0aW5nIG5ldyBIdHRwc1Byb3h5QWdlbnQgaW5zdGFuY2U6ICVvJywgdGhpcy5wcm94eS5ocmVmKTtcbiAgICAgICAgLy8gVHJpbSBvZmYgdGhlIGJyYWNrZXRzIGZyb20gSVB2NiBhZGRyZXNzZXNcbiAgICAgICAgY29uc3QgaG9zdCA9ICh0aGlzLnByb3h5Lmhvc3RuYW1lIHx8IHRoaXMucHJveHkuaG9zdCkucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMucHJveHkucG9ydFxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKVxuICAgICAgICAgICAgOiB0aGlzLnByb3h5LnByb3RvY29sID09PSAnaHR0cHM6J1xuICAgICAgICAgICAgICAgID8gNDQzXG4gICAgICAgICAgICAgICAgOiA4MDtcbiAgICAgICAgdGhpcy5jb25uZWN0T3B0cyA9IHtcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gbmVnb3RpYXRlIGh0dHAvMS4xIGZvciBwcm94eSBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBodHRwLzJcbiAgICAgICAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgICAgIC4uLihvcHRzID8gb21pdChvcHRzLCAnaGVhZGVycycpIDogbnVsbCksXG4gICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIG5vZGUtY29yZSBIVFRQIGNsaWVudCBsaWJyYXJ5IGlzIGNyZWF0aW5nIGFcbiAgICAgKiBuZXcgSFRUUCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGFzeW5jIGNvbm5lY3QocmVxLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7XG4gICAgICAgIGlmICghb3B0cy5ob3N0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBcImhvc3RcIiBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBhIHNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIuXG4gICAgICAgIGxldCBzb2NrZXQ7XG4gICAgICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdChzZXRTZXJ2ZXJuYW1lRnJvbU5vbklwSG9zdCh0aGlzLmNvbm5lY3RPcHRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpO1xuICAgICAgICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5jb25uZWN0T3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHR5cGVvZiB0aGlzLnByb3h5SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB0aGlzLnByb3h5SGVhZGVycygpXG4gICAgICAgICAgICA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTtcbiAgICAgICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7XG4gICAgICAgIGxldCBwYXlsb2FkID0gYENPTk5FQ1QgJHtob3N0fToke29wdHMucG9ydH0gSFRUUC8xLjFcXHJcXG5gO1xuICAgICAgICAvLyBJbmplY3QgdGhlIGBQcm94eS1BdXRob3JpemF0aW9uYCBoZWFkZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSBgJHtkZWNvZGVVUklDb21wb25lbnQocHJveHkudXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS5wYXNzd29yZCl9YDtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7XG4gICAgICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10gPSB0aGlzLmtlZXBBbGl2ZVxuICAgICAgICAgICAgICAgID8gJ0tlZXAtQWxpdmUnXG4gICAgICAgICAgICAgICAgOiAnY2xvc2UnO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgcGF5bG9hZCArPSBgJHtuYW1lfTogJHtoZWFkZXJzW25hbWVdfVxcclxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSAoMCwgcGFyc2VfcHJveHlfcmVzcG9uc2VfMS5wYXJzZVByb3h5UmVzcG9uc2UpKHNvY2tldCk7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxcclxcbmApO1xuICAgICAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTtcbiAgICAgICAgcmVxLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QpO1xuICAgICAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7XG4gICAgICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIHJlc3VtZSk7XG4gICAgICAgICAgICBpZiAob3B0cy5zZWN1cmVFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcm94eSBpcyBjb25uZWN0aW5nIHRvIGEgVExTIHNlcnZlciwgc28gdXBncmFkZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgc29ja2V0IGNvbm5lY3Rpb24gdG8gYSBUTFMgY29ubmVjdGlvbi5cbiAgICAgICAgICAgICAgICBkZWJ1ZygnVXBncmFkaW5nIHNvY2tldCBjb25uZWN0aW9uIHRvIFRMUycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0bHMuY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9taXQoc2V0U2VydmVybmFtZUZyb21Ob25JcEhvc3Qob3B0cyksICdob3N0JywgJ3BhdGgnLCAncG9ydCcpLFxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgc3RhdHVzIGNvZGUgdGhhdCdzIG5vdCAyMDAuLi4gbmVlZCB0byByZS1wbGF5IHRoZSBIVFRQXG4gICAgICAgIC8vIGhlYWRlciBcImRhdGFcIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzXG4gICAgICAgIC8vIGF0dGFjaGVkIHNvIHRoYXQgdGhlIG5vZGUgY29yZSBgaHR0cGAgY2FuIHBhcnNlIGFuZCBoYW5kbGUgdGhlXG4gICAgICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgICAgICAvLyBDbG9zZSB0aGUgb3JpZ2luYWwgc29ja2V0LCBhbmQgYSBuZXcgXCJmYWtlXCIgc29ja2V0IGlzIHJldHVybmVkXG4gICAgICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3RcbiAgICAgICAgLy8gd3JpdHRlbiB0byBpdCAod2hpY2ggbWF5IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gIGhlYWRlcnMgb3Igb3RoZXJcbiAgICAgICAgLy8gc2Vuc2l0aXZlIGRhdGEpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vaGFja2Vyb25lLmNvbS9yZXBvcnRzLzU0MTUwMlxuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBmYWtlU29ja2V0ID0gbmV3IG5ldC5Tb2NrZXQoeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlO1xuICAgICAgICAvLyBOZWVkIHRvIHdhaXQgZm9yIHRoZSBcInNvY2tldFwiIGV2ZW50IHRvIHJlLXBsYXkgdGhlIFwiZGF0YVwiIGV2ZW50cy5cbiAgICAgICAgcmVxLm9uY2UoJ3NvY2tldCcsIChzKSA9PiB7XG4gICAgICAgICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTtcbiAgICAgICAgICAgICgwLCBhc3NlcnRfMS5kZWZhdWx0KShzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDApO1xuICAgICAgICAgICAgLy8gUmVwbGF5IHRoZSBcImJ1ZmZlcmVkXCIgQnVmZmVyIG9udG8gdGhlIGZha2UgYHNvY2tldGAsIHNpbmNlIGF0XG4gICAgICAgICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvclxuICAgICAgICAgICAgLy8gdGhlIHVzZXIuXG4gICAgICAgICAgICBzLnB1c2goYnVmZmVyZWQpO1xuICAgICAgICAgICAgcy5wdXNoKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZha2VTb2NrZXQ7XG4gICAgfVxufVxuSHR0cHNQcm94eUFnZW50LnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddO1xuZXhwb3J0cy5IdHRwc1Byb3h5QWdlbnQgPSBIdHRwc1Byb3h5QWdlbnQ7XG5mdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7XG4gICAgc29ja2V0LnJlc3VtZSgpO1xufVxuZnVuY3Rpb24gb21pdChvYmosIC4uLmtleXMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBsZXQga2V5O1xuICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTENcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG52YXIgX0dheGlvc19pbnN0YW5jZXMsIF9hLCBfR2F4aW9zX3VybE1heVVzZVByb3h5LCBfR2F4aW9zX2FwcGx5UmVxdWVzdEludGVyY2VwdG9ycywgX0dheGlvc19hcHBseVJlc3BvbnNlSW50ZXJjZXB0b3JzLCBfR2F4aW9zX3ByZXBhcmVSZXF1ZXN0LCBfR2F4aW9zX3Byb3h5QWdlbnQsIF9HYXhpb3NfZ2V0UHJveHlBZ2VudDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR2F4aW9zID0gdm9pZCAwO1xuY29uc3QgZXh0ZW5kXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImV4dGVuZFwiKSk7XG5jb25zdCBodHRwc18xID0gcmVxdWlyZShcImh0dHBzXCIpO1xuY29uc3Qgbm9kZV9mZXRjaF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJub2RlLWZldGNoXCIpKTtcbmNvbnN0IHF1ZXJ5c3RyaW5nXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInF1ZXJ5c3RyaW5nXCIpKTtcbmNvbnN0IGlzX3N0cmVhbV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJpcy1zdHJlYW1cIikpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgY29tbW9uXzEgPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG5jb25zdCByZXRyeV8xID0gcmVxdWlyZShcIi4vcmV0cnlcIik7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCB1dWlkXzEgPSByZXF1aXJlKFwidXVpZFwiKTtcbmNvbnN0IGludGVyY2VwdG9yXzEgPSByZXF1aXJlKFwiLi9pbnRlcmNlcHRvclwiKTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGZldGNoID0gaGFzRmV0Y2goKSA/IHdpbmRvdy5mZXRjaCA6IG5vZGVfZmV0Y2hfMS5kZWZhdWx0O1xuZnVuY3Rpb24gaGFzV2luZG93KCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhIXdpbmRvdztcbn1cbmZ1bmN0aW9uIGhhc0ZldGNoKCkge1xuICAgIHJldHVybiBoYXNXaW5kb3coKSAmJiAhIXdpbmRvdy5mZXRjaDtcbn1cbmZ1bmN0aW9uIGhhc0J1ZmZlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCc7XG59XG5mdW5jdGlvbiBoYXNIZWFkZXIob3B0aW9ucywgaGVhZGVyKSB7XG4gICAgcmV0dXJuICEhZ2V0SGVhZGVyKG9wdGlvbnMsIGhlYWRlcik7XG59XG5mdW5jdGlvbiBnZXRIZWFkZXIob3B0aW9ucywgaGVhZGVyKSB7XG4gICAgaGVhZGVyID0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKSB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGhlYWRlciA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmhlYWRlcnNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuY2xhc3MgR2F4aW9zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgR2F4aW9zIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgSFRUUCByZXF1ZXN0cy5cbiAgICAgKiBAcGFyYW0gZGVmYXVsdHMgVGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgdG8gYmUgdXNlZCBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihkZWZhdWx0cykge1xuICAgICAgICBfR2F4aW9zX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMuYWdlbnRDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IG5ldyBpbnRlcmNlcHRvcl8xLkdheGlvc0ludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgICAgICAgcmVzcG9uc2U6IG5ldyBpbnRlcmNlcHRvcl8xLkdheGlvc0ludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIEhUVFAgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRzIFNldCBvZiBIVFRQIG9wdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgSFRUUCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHJlcXVlc3Qob3B0cyA9IHt9KSB7XG4gICAgICAgIG9wdHMgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HYXhpb3NfaW5zdGFuY2VzLCBcIm1cIiwgX0dheGlvc19wcmVwYXJlUmVxdWVzdCkuY2FsbCh0aGlzLCBvcHRzKTtcbiAgICAgICAgb3B0cyA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dheGlvc19pbnN0YW5jZXMsIFwibVwiLCBfR2F4aW9zX2FwcGx5UmVxdWVzdEludGVyY2VwdG9ycykuY2FsbCh0aGlzLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dheGlvc19pbnN0YW5jZXMsIFwibVwiLCBfR2F4aW9zX2FwcGx5UmVzcG9uc2VJbnRlcmNlcHRvcnMpLmNhbGwodGhpcywgdGhpcy5fcmVxdWVzdChvcHRzKSk7XG4gICAgfVxuICAgIGFzeW5jIF9kZWZhdWx0QWRhcHRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdHMuZmV0Y2hJbXBsZW1lbnRhdGlvbiB8fCBmZXRjaDtcbiAgICAgICAgY29uc3QgcmVzID0gKGF3YWl0IGZldGNoSW1wbChvcHRzLnVybCwgb3B0cykpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZURhdGEob3B0cywgcmVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlUmVzcG9uc2Uob3B0cywgcmVzLCBkYXRhKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwsIHJldHJ5YWJsZSB2ZXJzaW9uIG9mIHRoZSBgcmVxdWVzdGAgbWV0aG9kLlxuICAgICAqIEBwYXJhbSBvcHRzIFNldCBvZiBIVFRQIG9wdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgSFRUUCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGFzeW5jIF9yZXF1ZXN0KG9wdHMgPSB7fSkge1xuICAgICAgICB2YXIgX2I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgdHJhbnNsYXRlZFJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKG9wdHMuYWRhcHRlcikge1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRSZXNwb25zZSA9IGF3YWl0IG9wdHMuYWRhcHRlcihvcHRzLCB0aGlzLl9kZWZhdWx0QWRhcHRlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRSZXNwb25zZSA9IGF3YWl0IHRoaXMuX2RlZmF1bHRBZGFwdGVyKG9wdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlU3RhdHVzKHRyYW5zbGF0ZWRSZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMucmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAodHJhbnNsYXRlZFJlc3BvbnNlID09PSBudWxsIHx8IHRyYW5zbGF0ZWRSZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhbnNsYXRlZFJlc3BvbnNlLmRhdGEpLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlICs9IGNodW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAodHJhbnNsYXRlZFJlc3BvbnNlID09PSBudWxsIHx8IHRyYW5zbGF0ZWRSZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhbnNsYXRlZFJlc3BvbnNlLmRhdGEpLm9uKCdlbmQnLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRSZXNwb25zZS5kYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb21tb25fMS5HYXhpb3NFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAke3RyYW5zbGF0ZWRSZXNwb25zZS5zdGF0dXN9YCwgb3B0cywgdHJhbnNsYXRlZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGUgaW5zdGFuY2VvZiBjb21tb25fMS5HYXhpb3NFcnJvclxuICAgICAgICAgICAgICAgID8gZVxuICAgICAgICAgICAgICAgIDogbmV3IGNvbW1vbl8xLkdheGlvc0Vycm9yKGUubWVzc2FnZSwgb3B0cywgdW5kZWZpbmVkLCBlKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2hvdWxkUmV0cnksIGNvbmZpZyB9ID0gYXdhaXQgKDAsIHJldHJ5XzEuZ2V0UmV0cnlDb25maWcpKGVycik7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnkgJiYgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZXJyLmNvbmZpZy5yZXRyeUNvbmZpZy5jdXJyZW50UmV0cnlBdHRlbXB0ID1cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnJldHJ5Q29uZmlnLmN1cnJlbnRSZXRyeUF0dGVtcHQ7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGVycm9yJ3MgY29uZmlnIGNvdWxkIGJlIHJlZGFjdGVkIC0gdGhlcmVmb3JlIHdlIG9ubHkgd2FudCB0b1xuICAgICAgICAgICAgICAgIC8vIGNvcHkgdGhlIHJldHJ5IHN0YXRlIG92ZXIgdG8gdGhlIGV4aXN0aW5nIGNvbmZpZ1xuICAgICAgICAgICAgICAgIG9wdHMucmV0cnlDb25maWcgPSAoX2IgPSBlcnIuY29uZmlnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmV0cnlDb25maWc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3Qob3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0UmVzcG9uc2VEYXRhKG9wdHMsIHJlcykge1xuICAgICAgICBzd2l0Y2ggKG9wdHMucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJlYW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuYm9keTtcbiAgICAgICAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoX2IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdhcnJheWJ1ZmZlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgY2FzZSAnYmxvYic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5ibG9iKCk7XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLnRleHQoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzcG9uc2VEYXRhRnJvbUNvbnRlbnRUeXBlKHJlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhyb3cgZm9yIGFueSBub24tMnh4IHN0YXR1cyBjb2RlXG4gICAgICogQHBhcmFtIHN0YXR1cyBzdGF0dXMgY29kZSBmcm9tIHRoZSBIVFRQIHJlc3BvbnNlXG4gICAgICovXG4gICAgdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5jb2RlIGEgc2V0IG9mIGtleS92YWx1ZSBwYXJzIGludG8gYSBxdWVyeXN0cmluZyBmb3JtYXQgKD9mb289YmFyJmJhej1ib28pXG4gICAgICogQHBhcmFtIHBhcmFtcyBrZXkgdmFsdWUgcGFycyB0byBlbmNvZGVcbiAgICAgKi9cbiAgICBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gcXVlcnlzdHJpbmdfMS5kZWZhdWx0LnN0cmluZ2lmeShwYXJhbXMpO1xuICAgIH1cbiAgICB0cmFuc2xhdGVSZXNwb25zZShvcHRzLCByZXMsIGRhdGEpIHtcbiAgICAgICAgLy8gaGVhZGVycyBuZWVkIHRvIGJlIGNvbnZlcnRlZCBmcm9tIGEgbWFwIHRvIGFuIG9ialxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICAgIHJlcy5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbmZpZzogb3B0cyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogcmVzLnN0YXR1c1RleHQsXG4gICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdExpa2VcbiAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVVSTDogcmVzLnVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIHBhcnNlIGEgcmVzcG9uc2UgYnkgbG9va2luZyBhdCB0aGUgQ29udGVudC1UeXBlIGhlYWRlci5cbiAgICAgKiBAcGFyYW0ge0ZldGNoUmVzcG9uc2V9IHJlc3BvbnNlIHRoZSBIVFRQIHJlc3BvbnNlLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXNwb25zZSBkYXRhLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlc3BvbnNlRGF0YUZyb21Db250ZW50VHlwZShyZXNwb25zZSkge1xuICAgICAgICBsZXQgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTWFpbnRhaW4gZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBieSBjYWxsaW5nIHRleHQoKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChjb250ZW50VHlwZS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2IpIHtcbiAgICAgICAgICAgICAgICAvLyBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGVudFR5cGUubWF0Y2goL150ZXh0XFwvLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgY29udGVudCB0eXBlIGlzIHNvbWV0aGluZyBub3QgZWFzaWx5IGhhbmRsZWQsIGp1c3QgcmV0dXJuIHRoZSByYXcgZGF0YSAoYmxvYilcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhc3luYyBnZW5lcmF0b3IgdGhhdCB5aWVsZHMgdGhlIHBpZWNlcyBvZiBhIG11bHRpcGFydC9yZWxhdGVkIHJlcXVlc3QgYm9keS5cbiAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIHNwZWM6IGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMzg3LnR4dC4gSG93ZXZlciwgcmVjdXJzaXZlXG4gICAgICogbXVsdGlwYXJ0L3JlbGF0ZWQgcmVxdWVzdHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtHYXhpb011bHRpcGFydE9wdGlvbnNbXX0gbXVsdGlwYXJ0T3B0aW9ucyB0aGUgcGllY2VzIHRvIHR1cm4gaW50byBhIG11bHRpcGFydC9yZWxhdGVkIGJvZHkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGJvdW5kYXJ5IHRoZSBib3VuZGFyeSBzdHJpbmcgdG8gYmUgcGxhY2VkIGJldHdlZW4gZWFjaCBwYXJ0LlxuICAgICAqL1xuICAgIGFzeW5jICpnZXRNdWx0aXBhcnRSZXF1ZXN0KG11bHRpcGFydE9wdGlvbnMsIGJvdW5kYXJ5KSB7XG4gICAgICAgIGNvbnN0IGZpbmFsZSA9IGAtLSR7Ym91bmRhcnl9LS1gO1xuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRQYXJ0IG9mIG11bHRpcGFydE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRDb250ZW50VHlwZSA9IGN1cnJlbnRQYXJ0LmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICAgICAgICAgICAgY29uc3QgcHJlYW1ibGUgPSBgLS0ke2JvdW5kYXJ5fVxcclxcbkNvbnRlbnQtVHlwZTogJHtwYXJ0Q29udGVudFR5cGV9XFxyXFxuXFxyXFxuYDtcbiAgICAgICAgICAgIHlpZWxkIHByZWFtYmxlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50UGFydC5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGN1cnJlbnRQYXJ0LmNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5aWVsZCogY3VycmVudFBhcnQuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkICdcXHJcXG4nO1xuICAgICAgICB9XG4gICAgICAgIHlpZWxkIGZpbmFsZTtcbiAgICB9XG59XG5leHBvcnRzLkdheGlvcyA9IEdheGlvcztcbl9hID0gR2F4aW9zLCBfR2F4aW9zX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9HYXhpb3NfdXJsTWF5VXNlUHJveHkgPSBmdW5jdGlvbiBfR2F4aW9zX3VybE1heVVzZVByb3h5KHVybCwgbm9Qcm94eSA9IFtdKSB7XG4gICAgdmFyIF9iLCBfYztcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBuZXcgdXJsXzEuVVJMKHVybCk7XG4gICAgY29uc3Qgbm9Qcm94eUxpc3QgPSBbLi4ubm9Qcm94eV07XG4gICAgY29uc3Qgbm9Qcm94eUVudkxpc3QgPSAoKF9jID0gKChfYiA9IHByb2Nlc3MuZW52Lk5PX1BST1hZKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBwcm9jZXNzLmVudi5ub19wcm94eSkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5zcGxpdCgnLCcpKSB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2Ygbm9Qcm94eUVudkxpc3QpIHtcbiAgICAgICAgbm9Qcm94eUxpc3QucHVzaChydWxlLnRyaW0oKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBub1Byb3h5TGlzdCkge1xuICAgICAgICAvLyBNYXRjaCByZWdleFxuICAgICAgICBpZiAocnVsZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUudGVzdChjYW5kaWRhdGUudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWF0Y2ggVVJMXG4gICAgICAgIGVsc2UgaWYgKHJ1bGUgaW5zdGFuY2VvZiB1cmxfMS5VUkwpIHtcbiAgICAgICAgICAgIGlmIChydWxlLm9yaWdpbiA9PT0gY2FuZGlkYXRlLm9yaWdpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXRjaCBzdHJpbmcgcmVnZXhcbiAgICAgICAgZWxzZSBpZiAocnVsZS5zdGFydHNXaXRoKCcqLicpIHx8IHJ1bGUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhbmVkUnVsZSA9IHJ1bGUucmVwbGFjZSgvXlxcKlxcLi8sICcuJyk7XG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmhvc3RuYW1lLmVuZHNXaXRoKGNsZWFuZWRSdWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBCYXNpYyBzdHJpbmcgbWF0Y2hcbiAgICAgICAgZWxzZSBpZiAocnVsZSA9PT0gY2FuZGlkYXRlLm9yaWdpbiB8fFxuICAgICAgICAgICAgcnVsZSA9PT0gY2FuZGlkYXRlLmhvc3RuYW1lIHx8XG4gICAgICAgICAgICBydWxlID09PSBjYW5kaWRhdGUuaHJlZikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufSwgX0dheGlvc19hcHBseVJlcXVlc3RJbnRlcmNlcHRvcnMgPSBcbi8qKlxuICogQXBwbGllcyB0aGUgcmVxdWVzdCBpbnRlcmNlcHRvcnMuIFRoZSByZXF1ZXN0IGludGVyY2VwdG9ycyBhcmUgYXBwbGllZCBhZnRlciB0aGVcbiAqIGNhbGwgdG8gcHJlcGFyZVJlcXVlc3QgaXMgY29tcGxldGVkLlxuICpcbiAqIEBwYXJhbSB7R2F4aW9zT3B0aW9uc30gb3B0aW9ucyBUaGUgY3VycmVudCBzZXQgb2Ygb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxHYXhpb3NPcHRpb25zPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzZXQgb2Ygb3B0aW9ucyBvciByZXNwb25zZSBhZnRlciBpbnRlcmNlcHRvcnMgYXJlIGFwcGxpZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9HYXhpb3NfYXBwbHlSZXF1ZXN0SW50ZXJjZXB0b3JzKG9wdGlvbnMpIHtcbiAgICBsZXQgcHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKG9wdGlvbnMpO1xuICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC52YWx1ZXMoKSkge1xuICAgICAgICBpZiAoaW50ZXJjZXB0b3IpIHtcbiAgICAgICAgICAgIHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKGludGVyY2VwdG9yLnJlc29sdmVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbn0sIF9HYXhpb3NfYXBwbHlSZXNwb25zZUludGVyY2VwdG9ycyA9IFxuLyoqXG4gKiBBcHBsaWVzIHRoZSByZXNwb25zZSBpbnRlcmNlcHRvcnMuIFRoZSByZXNwb25zZSBpbnRlcmNlcHRvcnMgYXJlIGFwcGxpZWQgYWZ0ZXIgdGhlXG4gKiBjYWxsIHRvIHJlcXVlc3QgaXMgbWFkZS5cbiAqXG4gKiBAcGFyYW0ge0dheGlvc09wdGlvbnN9IG9wdGlvbnMgVGhlIGN1cnJlbnQgc2V0IG9mIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8R2F4aW9zT3B0aW9ucz59IFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgc2V0IG9mIG9wdGlvbnMgb3IgcmVzcG9uc2UgYWZ0ZXIgaW50ZXJjZXB0b3JzIGFyZSBhcHBsaWVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBfR2F4aW9zX2FwcGx5UmVzcG9uc2VJbnRlcmNlcHRvcnMocmVzcG9uc2UpIHtcbiAgICBsZXQgcHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnZhbHVlcygpKSB7XG4gICAgICAgIGlmIChpbnRlcmNlcHRvcikge1xuICAgICAgICAgICAgcHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluLnRoZW4oaW50ZXJjZXB0b3IucmVzb2x2ZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xufSwgX0dheGlvc19wcmVwYXJlUmVxdWVzdCA9IFxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG9wdGlvbnMsIG1lcmdlcyB0aGVtIHdpdGggZGVmYXVsdHMsIGFuZCBwcmVwYXJlIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9yaWdpbmFsIG9wdGlvbnMgcGFzc2VkIGZyb20gdGhlIGNsaWVudC5cbiAqIEByZXR1cm5zIFByZXBhcmVkIG9wdGlvbnMsIHJlYWR5IHRvIG1ha2UgYSByZXF1ZXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9HYXhpb3NfcHJlcGFyZVJlcXVlc3Qob3B0aW9ucykge1xuICAgIHZhciBfYiwgX2MsIF9kLCBfZTtcbiAgICBjb25zdCBvcHRzID0gKDAsIGV4dGVuZF8xLmRlZmF1bHQpKHRydWUsIHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICBpZiAoIW9wdHMudXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVVJMIGlzIHJlcXVpcmVkLicpO1xuICAgIH1cbiAgICAvLyBiYXNlVXJsIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHJlbW92ZSBpbiAyLjBcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0cy5iYXNlVXJsIHx8IG9wdHMuYmFzZVVSTDtcbiAgICBpZiAoYmFzZVVybCkge1xuICAgICAgICBvcHRzLnVybCA9IGJhc2VVcmwudG9TdHJpbmcoKSArIG9wdHMudXJsO1xuICAgIH1cbiAgICBvcHRzLnBhcmFtc1NlcmlhbGl6ZXIgPSBvcHRzLnBhcmFtc1NlcmlhbGl6ZXIgfHwgdGhpcy5wYXJhbXNTZXJpYWxpemVyO1xuICAgIGlmIChvcHRzLnBhcmFtcyAmJiBPYmplY3Qua2V5cyhvcHRzLnBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgYWRkaXRpb25hbFF1ZXJ5UGFyYW1zID0gb3B0cy5wYXJhbXNTZXJpYWxpemVyKG9wdHMucGFyYW1zKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxRdWVyeVBhcmFtcy5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxRdWVyeVBhcmFtcyA9IGFkZGl0aW9uYWxRdWVyeVBhcmFtcy5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmVmaXggPSBvcHRzLnVybC50b1N0cmluZygpLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgIG9wdHMudXJsID0gb3B0cy51cmwgKyBwcmVmaXggKyBhZGRpdGlvbmFsUXVlcnlQYXJhbXM7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICBvcHRzLnNpemUgPSBvcHRpb25zLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhSZWRpcmVjdHMgPT09ICdudW1iZXInKSB7XG4gICAgICAgIG9wdHMuZm9sbG93ID0gb3B0aW9ucy5tYXhSZWRpcmVjdHM7XG4gICAgfVxuICAgIG9wdHMuaGVhZGVycyA9IG9wdHMuaGVhZGVycyB8fCB7fTtcbiAgICBpZiAob3B0cy5tdWx0aXBhcnQgPT09IHVuZGVmaW5lZCAmJiBvcHRzLmRhdGEpIHtcbiAgICAgICAgY29uc3QgaXNGb3JtRGF0YSA9IHR5cGVvZiBGb3JtRGF0YSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy5kYXRhKSBpbnN0YW5jZW9mIEZvcm1EYXRhO1xuICAgICAgICBpZiAoaXNfc3RyZWFtXzEuZGVmYXVsdC5yZWFkYWJsZShvcHRzLmRhdGEpKSB7XG4gICAgICAgICAgICBvcHRzLmJvZHkgPSBvcHRzLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzQnVmZmVyKCkgJiYgQnVmZmVyLmlzQnVmZmVyKG9wdHMuZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIEpTT04uc3RyaW5naWZ5KCkgYSBCdWZmZXI6XG4gICAgICAgICAgICBvcHRzLmJvZHkgPSBvcHRzLmRhdGE7XG4gICAgICAgICAgICBpZiAoIWhhc0hlYWRlcihvcHRzLCAnQ29udGVudC1UeXBlJykpIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLmRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBJZiB3d3ctZm9ybS11cmxlbmNvZGVkIGNvbnRlbnQgdHlwZSBoYXMgYmVlbiBzZXQsIGJ1dCBkYXRhIGlzXG4gICAgICAgICAgICAvLyBwcm92aWRlZCBhcyBhbiBvYmplY3QsIHNlcmlhbGl6ZSB0aGUgY29udGVudCB1c2luZyBxdWVyeXN0cmluZzpcbiAgICAgICAgICAgIGlmICghaXNGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRIZWFkZXIob3B0cywgJ2NvbnRlbnQtdHlwZScpID09PVxuICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmJvZHkgPSBvcHRzLnBhcmFtc1NlcmlhbGl6ZXIob3B0cy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAoIShvcHRzLmRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNIZWFkZXIob3B0cywgJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0cy5ib2R5ID0gb3B0cy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdHMubXVsdGlwYXJ0ICYmIG9wdHMubXVsdGlwYXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gbm90ZTogb25jZSB0aGUgbWluaW11bSB2ZXJzaW9uIHJlYWNoZXMgTm9kZSAxNixcbiAgICAgICAgLy8gdGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCByYW5kb21VVUlEKCkgZnVuY3Rpb24gZnJvbSBjcnlwdG9cbiAgICAgICAgLy8gYW5kIHRoZSBkZXBlbmRlbmN5IG9uIFVVSUQgcmVtb3ZlZFxuICAgICAgICBjb25zdCBib3VuZGFyeSA9ICgwLCB1dWlkXzEudjQpKCk7XG4gICAgICAgIG9wdHMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBgbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YDtcbiAgICAgICAgY29uc3QgYm9keVN0cmVhbSA9IG5ldyBzdHJlYW1fMS5QYXNzVGhyb3VnaCgpO1xuICAgICAgICBvcHRzLmJvZHkgPSBib2R5U3RyZWFtO1xuICAgICAgICAoMCwgc3RyZWFtXzEucGlwZWxpbmUpKHRoaXMuZ2V0TXVsdGlwYXJ0UmVxdWVzdChvcHRzLm11bHRpcGFydCwgYm91bmRhcnkpLCBib2R5U3RyZWFtLCAoKSA9PiB7IH0pO1xuICAgIH1cbiAgICBvcHRzLnZhbGlkYXRlU3RhdHVzID0gb3B0cy52YWxpZGF0ZVN0YXR1cyB8fCB0aGlzLnZhbGlkYXRlU3RhdHVzO1xuICAgIG9wdHMucmVzcG9uc2VUeXBlID0gb3B0cy5yZXNwb25zZVR5cGUgfHwgJ3Vua25vd24nO1xuICAgIGlmICghb3B0cy5oZWFkZXJzWydBY2NlcHQnXSAmJiBvcHRzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIG9wdHMuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgfVxuICAgIG9wdHMubWV0aG9kID0gb3B0cy5tZXRob2QgfHwgJ0dFVCc7XG4gICAgY29uc3QgcHJveHkgPSBvcHRzLnByb3h5IHx8XG4gICAgICAgICgoX2IgPSBwcm9jZXNzID09PSBudWxsIHx8IHByb2Nlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2Nlc3MuZW52KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuSFRUUFNfUFJPWFkpIHx8XG4gICAgICAgICgoX2MgPSBwcm9jZXNzID09PSBudWxsIHx8IHByb2Nlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2Nlc3MuZW52KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaHR0cHNfcHJveHkpIHx8XG4gICAgICAgICgoX2QgPSBwcm9jZXNzID09PSBudWxsIHx8IHByb2Nlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb2Nlc3MuZW52KSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuSFRUUF9QUk9YWSkgfHxcbiAgICAgICAgKChfZSA9IHByb2Nlc3MgPT09IG51bGwgfHwgcHJvY2VzcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvY2Vzcy5lbnYpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5odHRwX3Byb3h5KTtcbiAgICBjb25zdCB1cmxNYXlVc2VQcm94eSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dheGlvc19pbnN0YW5jZXMsIFwibVwiLCBfR2F4aW9zX3VybE1heVVzZVByb3h5KS5jYWxsKHRoaXMsIG9wdHMudXJsLCBvcHRzLm5vUHJveHkpO1xuICAgIGlmIChvcHRzLmFnZW50KSB7XG4gICAgICAgIC8vIGRvbid0IGRvIGFueSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgLSB1c2UgdGhlIHVzZXItcHJvdmlkZWQgYWdlbnQuXG4gICAgfVxuICAgIGVsc2UgaWYgKHByb3h5ICYmIHVybE1heVVzZVByb3h5KSB7XG4gICAgICAgIGNvbnN0IEh0dHBzUHJveHlBZ2VudCA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQoX2EsIF9hLCBcIm1cIiwgX0dheGlvc19nZXRQcm94eUFnZW50KS5jYWxsKF9hKTtcbiAgICAgICAgaWYgKHRoaXMuYWdlbnRDYWNoZS5oYXMocHJveHkpKSB7XG4gICAgICAgICAgICBvcHRzLmFnZW50ID0gdGhpcy5hZ2VudENhY2hlLmdldChwcm94eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzLmFnZW50ID0gbmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSwge1xuICAgICAgICAgICAgICAgIGNlcnQ6IG9wdHMuY2VydCxcbiAgICAgICAgICAgICAgICBrZXk6IG9wdHMua2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFnZW50Q2FjaGUuc2V0KHByb3h5LCBvcHRzLmFnZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRzLmNlcnQgJiYgb3B0cy5rZXkpIHtcbiAgICAgICAgLy8gQ29uZmlndXJlIGNsaWVudCBmb3IgbVRMU1xuICAgICAgICBpZiAodGhpcy5hZ2VudENhY2hlLmhhcyhvcHRzLmtleSkpIHtcbiAgICAgICAgICAgIG9wdHMuYWdlbnQgPSB0aGlzLmFnZW50Q2FjaGUuZ2V0KG9wdHMua2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdHMuYWdlbnQgPSBuZXcgaHR0cHNfMS5BZ2VudCh7XG4gICAgICAgICAgICAgICAgY2VydDogb3B0cy5jZXJ0LFxuICAgICAgICAgICAgICAgIGtleTogb3B0cy5rZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWdlbnRDYWNoZS5zZXQob3B0cy5rZXksIG9wdHMuYWdlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5lcnJvclJlZGFjdG9yICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIG9wdHMuZXJyb3JSZWRhY3RvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3B0cy5lcnJvclJlZGFjdG9yID0gY29tbW9uXzEuZGVmYXVsdEVycm9yUmVkYWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBvcHRzO1xufSwgX0dheGlvc19nZXRQcm94eUFnZW50ID0gYXN5bmMgZnVuY3Rpb24gX0dheGlvc19nZXRQcm94eUFnZW50KCkge1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2EsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2EsIFwiZlwiLCBfR2F4aW9zX3Byb3h5QWdlbnQpIHx8IChhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IF9faW1wb3J0U3RhcihyZXF1aXJlKCdodHRwcy1wcm94eS1hZ2VudCcpKSkpLkh0dHBzUHJveHlBZ2VudCwgXCJmXCIsIF9HYXhpb3NfcHJveHlBZ2VudCk7XG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2EsIFwiZlwiLCBfR2F4aW9zX3Byb3h5QWdlbnQpO1xufTtcbi8qKlxuICogQSBjYWNoZSBmb3IgdGhlIGxhemlseS1sb2FkZWQgcHJveHkgYWdlbnQuXG4gKlxuICogU2hvdWxkIHVzZSB7QGxpbmsgR2F4aW9zWyNnZXRQcm94eUFnZW50XX0gdG8gcmV0cmlldmUuXG4gKi9cbi8vIHVzaW5nIGBpbXBvcnRgIHRvIGR5bmFtaWNhbGx5IGltcG9ydCB0aGUgdHlwZXMgaGVyZVxuX0dheGlvc19wcm94eUFnZW50ID0geyB2YWx1ZTogdm9pZCAwIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nYXhpb3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTENcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmluc3RhbmNlID0gZXhwb3J0cy5HYXhpb3MgPSBleHBvcnRzLkdheGlvc0Vycm9yID0gdm9pZCAwO1xuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWVzdDtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcIi4vZ2F4aW9zXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2F4aW9zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnYXhpb3NfMS5HYXhpb3M7IH0gfSk7XG52YXIgY29tbW9uXzEgPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJHYXhpb3NFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbW9uXzEuR2F4aW9zRXJyb3I7IH0gfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaW50ZXJjZXB0b3JcIiksIGV4cG9ydHMpO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBpbnN0YW5jZSB1c2VkIHdoZW4gdGhlIGByZXF1ZXN0YCBtZXRob2QgaXMgZGlyZWN0bHlcbiAqIGludm9rZWQuXG4gKi9cbmV4cG9ydHMuaW5zdGFuY2UgPSBuZXcgZ2F4aW9zXzEuR2F4aW9zKCk7XG4vKipcbiAqIE1ha2UgYW4gSFRUUCByZXF1ZXN0IHVzaW5nIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChvcHRzKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuaW5zdGFuY2UucmVxdWVzdChvcHRzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMy4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjUgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaSxcclxuICAgIG1hdGhjZWlsID0gTWF0aC5jZWlsLFxyXG4gICAgbWF0aGZsb29yID0gTWF0aC5mbG9vcixcclxuXHJcbiAgICBiaWdudW1iZXJFcnJvciA9ICdbQmlnTnVtYmVyIEVycm9yXSAnLFxyXG4gICAgdG9vTWFueURpZ2l0cyA9IGJpZ251bWJlckVycm9yICsgJ051bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICcsXHJcblxyXG4gICAgQkFTRSA9IDFlMTQsXHJcbiAgICBMT0dfQkFTRSA9IDE0LFxyXG4gICAgTUFYX1NBRkVfSU5URUdFUiA9IDB4MWZmZmZmZmZmZmZmZmYsICAgICAgICAgLy8gMl41MyAtIDFcclxuICAgIC8vIE1BWF9JTlQzMiA9IDB4N2ZmZmZmZmYsICAgICAgICAgICAgICAgICAgIC8vIDJeMzEgLSAxXHJcbiAgICBQT1dTX1RFTiA9IFsxLCAxMCwgMTAwLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTNdLFxyXG4gICAgU1FSVF9CQVNFID0gMWU3LFxyXG5cclxuICAgIC8vIEVESVRBQkxFXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIERFQ0lNQUxfUExBQ0VTLCBUT19FWFBfTkVHLCBUT19FWFBfUE9TLCBNSU5fRVhQLCBNQVhfRVhQLCBhbmRcclxuICAgIC8vIHRoZSBhcmd1bWVudHMgdG8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQsIGFuZCB0b1ByZWNpc2lvbi5cclxuICAgIE1BWCA9IDFFOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYX0lOVDMyXHJcblxyXG5cclxuICAvKlxyXG4gICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNsb25lKGNvbmZpZ09iamVjdCkge1xyXG4gICAgdmFyIGRpdiwgY29udmVydEJhc2UsIHBhcnNlTnVtZXJpYyxcclxuICAgICAgUCA9IEJpZ051bWJlci5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBCaWdOdW1iZXIsIHRvU3RyaW5nOiBudWxsLCB2YWx1ZU9mOiBudWxsIH0sXHJcbiAgICAgIE9ORSA9IG5ldyBCaWdOdW1iZXIoMSksXHJcblxyXG5cclxuICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFRElUQUJMRSBDT05GSUcgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBzdGF0ZWQuXHJcbiAgICAgIC8vIFRoZSB2YWx1ZXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyBCaWdOdW1iZXIuc2V0LlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBvcGVyYXRpb25zIGludm9sdmluZyBkaXZpc2lvbi5cclxuICAgICAgREVDSU1BTF9QTEFDRVMgPSAyMCwgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIHRoZSBhYm92ZSBkZWNpbWFsIHBsYWNlcywgYW5kIHdoZW4gdXNpbmdcclxuICAgICAgLy8gdG9FeHBvbmVudGlhbCwgdG9GaXhlZCwgdG9Gb3JtYXQgYW5kIHRvUHJlY2lzaW9uLCBhbmQgcm91bmQgKGRlZmF1bHQgdmFsdWUpLlxyXG4gICAgICAvLyBVUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIENFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBIQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgUk9VTkRJTkdfTU9ERSA9IDQsICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIEVYUE9ORU5USUFMX0FUIDogW1RPX0VYUF9ORUcgLCBUT19FWFBfUE9TXVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtN1xyXG4gICAgICBUT19FWFBfTkVHID0gLTcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogMjFcclxuICAgICAgVE9fRVhQX1BPUyA9IDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gUkFOR0UgOiBbTUlOX0VYUCwgTUFYX0VYUF1cclxuXHJcbiAgICAgIC8vIFRoZSBtaW5pbXVtIGV4cG9uZW50IHZhbHVlLCBiZW5lYXRoIHdoaWNoIHVuZGVyZmxvdyB0byB6ZXJvIG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIE1JTl9FWFAgPSAtMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLU1BWFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6ICAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgLy8gRm9yIE1BWF9FWFAgPiAxZTcsIGUuZy4gbmV3IEJpZ051bWJlcignMWUxMDAwMDAwMDAnKS5wbHVzKDEpIG1heSBiZSBzbG93LlxyXG4gICAgICBNQVhfRVhQID0gMWU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIENSWVBUTyA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZSBvciBmYWxzZVxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAvLyBET1dOICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZC5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhpcyBtb2R1bG8gbW9kZSBpcyBjb21tb25seSBrbm93biBhcyAndHJ1bmNhdGVkIGRpdmlzaW9uJyBhbmQgaXNcclxuICAgICAgLy8gICAgICAgICAgICAgZXF1aXZhbGVudCB0byAoYSAlIG4pIGluIEphdmFTY3JpcHQuXHJcbiAgICAgIC8vIEZMT09SICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOIDYgVGhpcyBtb2R1bG8gbW9kZSBpbXBsZW1lbnRzIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS5cclxuICAgICAgLy8gICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBpcyBhbHdheXMgcG9zaXRpdmUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFRoZSB0cnVuY2F0ZWQgZGl2aXNpb24sIGZsb29yZWQgZGl2aXNpb24sIEV1Y2xpZGlhbiBkaXZpc2lvbiBhbmQgSUVFRSA3NTQgcmVtYWluZGVyXHJcbiAgICAgIC8vIG1vZGVzIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uXHJcbiAgICAgIC8vIEFsdGhvdWdoIHRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbyBiZSB1c2VkLCB0aGV5IG1heSBub3QgZ2l2ZSB1c2VmdWwgcmVzdWx0cy5cclxuICAgICAgTU9EVUxPX01PREUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZXhwb25lbnRpYXRlZEJ5IG9wZXJhdGlvbi5cclxuICAgICAgLy8gSWYgUE9XX1BSRUNJU0lPTiBpcyAwLCB0aGVyZSB3aWxsIGJlIHVubGltaXRlZCBzaWduaWZpY2FudCBkaWdpdHMuXHJcbiAgICAgIFBPV19QUkVDSVNJT04gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBCaWdOdW1iZXIucHJvdG90eXBlLnRvRm9ybWF0IG1ldGhvZC5cclxuICAgICAgRk9STUFUID0ge1xyXG4gICAgICAgIHByZWZpeDogJycsXHJcbiAgICAgICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICAgIHNlY29uZGFyeUdyb3VwU2l6ZTogMCxcclxuICAgICAgICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2l6ZTogMCxcclxuICAgICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgICAgc3VmZml4OiAnJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gVGhlIGFscGhhYmV0IHVzZWQgZm9yIGJhc2UgY29udmVyc2lvbi4gSXQgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZywgd2l0aCBubyAnKycsXHJcbiAgICAgIC8vICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgIC8vICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiRfJ1xyXG4gICAgICBBTFBIQUJFVCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLFxyXG4gICAgICBhbHBoYWJldEhhc05vcm1hbERlY2ltYWxEaWdpdHMgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUlxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIEJpZ051bWJlciBjb25zdHJ1Y3RvciBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24uXHJcbiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJpZ051bWJlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEEgbnVtZXJpYyB2YWx1ZS5cclxuICAgICAqIFtiXSB7bnVtYmVyfSBUaGUgYmFzZSBvZiB2LiBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJpZ051bWJlcih2LCBiKSB7XHJcbiAgICAgIHZhciBhbHBoYWJldCwgYywgY2FzZUNoYW5nZWQsIGUsIGksIGlzTnVtLCBsZW4sIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIC8vIEVuYWJsZSBjb25zdHJ1Y3RvciBjYWxsIHdpdGhvdXQgYG5ld2AuXHJcbiAgICAgIGlmICghKHggaW5zdGFuY2VvZiBCaWdOdW1iZXIpKSByZXR1cm4gbmV3IEJpZ051bWJlcih2LCBiKTtcclxuXHJcbiAgICAgIGlmIChiID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHYgJiYgdi5faXNCaWdOdW1iZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgIHgucyA9IHYucztcclxuXHJcbiAgICAgICAgICBpZiAoIXYuYyB8fCB2LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHYuZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeC5lID0gdi5lO1xyXG4gICAgICAgICAgICB4LmMgPSB2LmMuc2xpY2UoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpICYmIHYgKiAwID09IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBVc2UgYDEgLyBuYCB0byBoYW5kbGUgbWludXMgemVybyBhbHNvLlxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHYgPSAtdiwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGludGVnZXJzLCB3aGVyZSBuIDwgMjE0NzQ4MzY0OCAoMioqMzEpLlxyXG4gICAgICAgICAgaWYgKHYgPT09IH5+dikge1xyXG4gICAgICAgICAgICBmb3IgKGUgPSAwLCBpID0gdjsgaSA+PSAxMDsgaSAvPSAxMCwgZSsrKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmMgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIWlzTnVtZXJpYy50ZXN0KHN0ciA9IFN0cmluZyh2KSkpIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSk7XHJcblxyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgZm9ybT9cclxuICAgICAgICBpZiAoKGkgPSBzdHIuc2VhcmNoKC9lL2kpKSA+IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpZiAoZSA8IDApIGUgPSBpO1xyXG4gICAgICAgICAgZSArPSArc3RyLnNsaWNlKGkgKyAxKTtcclxuICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgICAgIC8vIEludGVnZXIuXHJcbiAgICAgICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG5cclxuICAgICAgICAvLyBBbGxvdyBleHBvbmVudGlhbCBub3RhdGlvbiB0byBiZSB1c2VkIHdpdGggYmFzZSAxMCBhcmd1bWVudCwgd2hpbGVcclxuICAgICAgICAvLyBhbHNvIHJvdW5kaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFzIHdpdGggb3RoZXIgYmFzZXMuXHJcbiAgICAgICAgaWYgKGIgPT0gMTAgJiYgYWxwaGFiZXRIYXNOb3JtYWxEZWNpbWFsRGlnaXRzKSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEJpZ051bWJlcih2KTtcclxuICAgICAgICAgIHJldHVybiByb3VuZCh4LCBERUNJTUFMX1BMQUNFUyArIHguZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHYpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykge1xyXG5cclxuICAgICAgICAgIC8vIEF2b2lkIHBvdGVudGlhbCBpbnRlcnByZXRhdGlvbiBvZiBJbmZpbml0eSBhbmQgTmFOIGFzIGJhc2UgNDQrIHZhbHVlcy5cclxuICAgICAgICAgIGlmICh2ICogMCAhPSAwKSByZXR1cm4gcGFyc2VOdW1lcmljKHgsIHN0ciwgaXNOdW0sIGIpO1xyXG5cclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcgJiYgc3RyLnJlcGxhY2UoL14wXFwuMCp8XFwuLywgJycpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArIHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWxwaGFiZXQgPSBBTFBIQUJFVC5zbGljZSgwLCBiKTtcclxuICAgICAgICBlID0gaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3RyIGlzIGEgdmFsaWQgYmFzZSBiIG51bWJlci5cclxuICAgICAgICAvLyBEb24ndCB1c2UgUmVnRXhwLCBzbyBhbHBoYWJldCBjYW4gY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuXHJcbiAgICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGMgPSBzdHIuY2hhckF0KGkpKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmICcuJyBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgaXQgaGFzIG5vdCBiZSBmb3VuZCBiZWZvcmUuXHJcbiAgICAgICAgICAgICAgaWYgKGkgPiBlKSB7XHJcbiAgICAgICAgICAgICAgICBlID0gbGVuO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYXNlQ2hhbmdlZCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBBbGxvdyBlLmcuIGhleGFkZWNpbWFsICdGRicgYXMgd2VsbCBhcyAnZmYnLlxyXG4gICAgICAgICAgICAgIGlmIChzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAgICAgICAgICAgICBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgKHN0ciA9IHN0ci50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWMoeCwgU3RyaW5nKHYpLCBpc051bSwgYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIGNoZWNrIGZvciBsZW5ndGggb24gY29udmVydGVkIG51bWJlci5cclxuICAgICAgICBpc051bSA9IGZhbHNlO1xyXG4gICAgICAgIHN0ciA9IGNvbnZlcnRCYXNlKHN0ciwgYiwgMTAsIHgucyk7XHJcblxyXG4gICAgICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICAgICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgZWxzZSBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdCgtLWxlbikgPT09IDQ4Oyk7XHJcblxyXG4gICAgICBpZiAoc3RyID0gc3RyLnNsaWNlKGksICsrbGVuKSkge1xyXG4gICAgICAgIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgIGlmIChpc051bSAmJiBCaWdOdW1iZXIuREVCVUcgJiZcclxuICAgICAgICAgIGxlbiA+IDE1ICYmICh2ID4gTUFYX1NBRkVfSU5URUdFUiB8fCB2ICE9PSBtYXRoZmxvb3IodikpKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAodG9vTWFueURpZ2l0cyArICh4LnMgKiB2KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKChlID0gZSAtIGkgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgIHguYyA9IFtdO1xyXG5cclxuICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYXNlXHJcblxyXG4gICAgICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29lZmZpY2llbnQgYXJyYXkuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOyAgLy8gaSA8IDFcclxuXHJcbiAgICAgICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoaSkgeC5jLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgICB4LmMucHVzaCgrc3RyLnNsaWNlKGksIGkgKz0gTE9HX0JBU0UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSA9IExPR19CQVNFIC0gKHN0ciA9IHN0ci5zbGljZShpKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZm9yICg7IGktLTsgc3RyICs9ICcwJyk7XHJcbiAgICAgICAgICB4LmMucHVzaCgrc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SIFBST1BFUlRJRVNcclxuXHJcblxyXG4gICAgQmlnTnVtYmVyLmNsb25lID0gY2xvbmU7XHJcblxyXG4gICAgQmlnTnVtYmVyLlJPVU5EX1VQID0gMDtcclxuICAgIEJpZ051bWJlci5ST1VORF9ET1dOID0gMTtcclxuICAgIEJpZ051bWJlci5ST1VORF9DRUlMID0gMjtcclxuICAgIEJpZ051bWJlci5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9ET1dOID0gNTtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9GTE9PUiA9IDg7XHJcbiAgICBCaWdOdW1iZXIuRVVDTElEID0gOTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbmZpZ3VyZSBpbmZyZXF1ZW50bHktY2hhbmdpbmcgbGlicmFyeS13aWRlIHNldHRpbmdzLlxyXG4gICAgICpcclxuICAgICAqIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgKGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzXHJcbiAgICAgKiBhIG51bWJlciwgaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIHN0YXRlZCk6XHJcbiAgICAgKlxyXG4gICAgICogICBERUNJTUFMX1BMQUNFUyAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBST1VORElOR19NT0RFICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDhcclxuICAgICAqICAgRVhQT05FTlRJQUxfQVQgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggIG9yICBbLU1BWCB0byAwLCAwIHRvIE1BWF1cclxuICAgICAqICAgUkFOR0UgICAgICAgICAgICB7bnVtYmVyfG51bWJlcltdfSAgLU1BWCB0byBNQVggKG5vdCB6ZXJvKSAgb3IgIFstTUFYIHRvIC0xLCAxIHRvIE1BWF1cclxuICAgICAqICAgQ1JZUFRPICAgICAgICAgICB7Ym9vbGVhbn0gICAgICAgICAgdHJ1ZSBvciBmYWxzZVxyXG4gICAgICogICBNT0RVTE9fTU9ERSAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIDlcclxuICAgICAqICAgUE9XX1BSRUNJU0lPTiAgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgQUxQSEFCRVQgICAgICAgICB7c3RyaW5nfSAgICAgICAgICAgQSBzdHJpbmcgb2YgdHdvIG9yIG1vcmUgdW5pcXVlIGNoYXJhY3RlcnMgd2hpY2ggZG9lc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29udGFpbiAnLicuXHJcbiAgICAgKiAgIEZPUk1BVCAgICAgICAgICAge29iamVjdH0gICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gICAgICogICAgIHByZWZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBncm91cFNpemUgICAgICAgICAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgc2Vjb25kYXJ5R3JvdXBTaXplICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGdyb3VwU2VwYXJhdG9yICAgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBkZWNpbWFsU2VwYXJhdG9yICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNpemUgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3Ige3N0cmluZ31cclxuICAgICAqICAgICBzdWZmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKlxyXG4gICAgICogKFRoZSB2YWx1ZXMgYXNzaWduZWQgdG8gdGhlIGFib3ZlIEZPUk1BVCBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LilcclxuICAgICAqXHJcbiAgICAgKiBFLmcuXHJcbiAgICAgKiBCaWdOdW1iZXIuY29uZmlnKHsgREVDSU1BTF9QTEFDRVMgOiAyMCwgUk9VTkRJTkdfTU9ERSA6IDQgfSlcclxuICAgICAqXHJcbiAgICAgKiBJZ25vcmUgcHJvcGVydGllcy9wYXJhbWV0ZXJzIHNldCB0byBudWxsIG9yIHVuZGVmaW5lZCwgZXhjZXB0IGZvciBBTFBIQUJFVC5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgY3VycmVudCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5jb25maWcgPSBCaWdOdW1iZXIuc2V0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICB2YXIgcCwgdjtcclxuXHJcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgIC8vIERFQ0lNQUxfUExBQ0VTIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBERUNJTUFMX1BMQUNFUyB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnREVDSU1BTF9QTEFDRVMnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBERUNJTUFMX1BMQUNFUyA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUk9VTkRJTkdfTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJPVU5ESU5HX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JPVU5ESU5HX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA4LCBwKTtcclxuICAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRVhQT05FTlRJQUxfQVQge251bWJlcnxudW1iZXJbXX1cclxuICAgICAgICAgIC8vIEludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAwIGluY2x1c2l2ZSwgMCB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBFWFBPTkVOVElBTF9BVCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRVhQT05FTlRJQUxfQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIDAsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IHZbMF07XHJcbiAgICAgICAgICAgICAgVE9fRVhQX1BPUyA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gLShUT19FWFBfUE9TID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUkFOR0Uge251bWJlcnxudW1iZXJbXX0gTm9uLXplcm8gaW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIC0xIGluY2x1c2l2ZSwgaW50ZWdlciAxIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFJBTkdFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZXxjYW5ub3QgYmUgemVyb306IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdSQU5HRScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgLTEsIHApO1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMV0sIDEsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgTUlOX0VYUCA9IHZbMF07XHJcbiAgICAgICAgICAgICAgTUFYX0VYUCA9IHZbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodiwgLU1BWCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgTUlOX0VYUCA9IC0oTUFYX0VYUCA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBjYW5ub3QgYmUgemVybzogJyArIHYpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIENSWVBUTyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBDUllQVE8gbm90IHRydWUgb3IgZmFsc2U6IHt2fSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQ1JZUFRPJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgPT09ICEhdikge1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0byAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8gJiZcclxuICAgICAgICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSAhdjtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IHRydWUgb3IgZmFsc2U6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1PRFVMT19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOSBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTU9EVUxPX01PREUge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ01PRFVMT19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOSwgcCk7XHJcbiAgICAgICAgICAgIE1PRFVMT19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBQT1dfUFJFQ0lTSU9OIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBQT1dfUFJFQ0lTSU9OIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdQT1dfUFJFQ0lTSU9OJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgUE9XX1BSRUNJU0lPTiA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gRk9STUFUIHtvYmplY3R9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRk9STUFUIG5vdCBhbiBvYmplY3Q6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdGT1JNQVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ29iamVjdCcpIEZPUk1BVCA9IHY7XHJcbiAgICAgICAgICAgIGVsc2UgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCBhbiBvYmplY3Q6ICcgKyB2KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBBTFBIQUJFVCB7c3RyaW5nfVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEFMUEhBQkVUIGludmFsaWQ6IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdBTFBIQUJFVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhbGxvdyBpZiBsZXNzIHRoYW4gdHdvIGNoYXJhY3RlcnMsXHJcbiAgICAgICAgICAgIC8vIG9yIGlmIGl0IGNvbnRhaW5zICcrJywgJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIGEgcmVwZWF0ZWQgY2hhcmFjdGVyLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ3N0cmluZycgJiYgIS9eLj8kfFsrXFwtLlxcc118KC4pLipcXDEvLnRlc3QodikpIHtcclxuICAgICAgICAgICAgICBhbHBoYWJldEhhc05vcm1hbERlY2ltYWxEaWdpdHMgPSB2LnNsaWNlKDAsIDEwKSA9PSAnMDEyMzQ1Njc4OSc7XHJcbiAgICAgICAgICAgICAgQUxQSEFCRVQgPSB2O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGludmFsaWQ6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBPYmplY3QgZXhwZWN0ZWQ6IHt2fSdcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ09iamVjdCBleHBlY3RlZDogJyArIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIERFQ0lNQUxfUExBQ0VTOiBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICBST1VORElOR19NT0RFOiBST1VORElOR19NT0RFLFxyXG4gICAgICAgIEVYUE9ORU5USUFMX0FUOiBbVE9fRVhQX05FRywgVE9fRVhQX1BPU10sXHJcbiAgICAgICAgUkFOR0U6IFtNSU5fRVhQLCBNQVhfRVhQXSxcclxuICAgICAgICBDUllQVE86IENSWVBUTyxcclxuICAgICAgICBNT0RVTE9fTU9ERTogTU9EVUxPX01PREUsXHJcbiAgICAgICAgUE9XX1BSRUNJU0lPTjogUE9XX1BSRUNJU0lPTixcclxuICAgICAgICBGT1JNQVQ6IEZPUk1BVCxcclxuICAgICAgICBBTFBIQUJFVDogQUxQSEFCRVRcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB2IGlzIGEgQmlnTnVtYmVyIGluc3RhbmNlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICpcclxuICAgICAqIElmIEJpZ051bWJlci5ERUJVRyBpcyB0cnVlLCB0aHJvdyBpZiBhIEJpZ051bWJlciBpbnN0YW5jZSBpcyBub3Qgd2VsbC1mb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogdiB7YW55fVxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBJbnZhbGlkIEJpZ051bWJlcjoge3Z9J1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuaXNCaWdOdW1iZXIgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICBpZiAoIXYgfHwgdi5faXNCaWdOdW1iZXIgIT09IHRydWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKCFCaWdOdW1iZXIuREVCVUcpIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgdmFyIGksIG4sXHJcbiAgICAgICAgYyA9IHYuYyxcclxuICAgICAgICBlID0gdi5lLFxyXG4gICAgICAgIHMgPSB2LnM7XHJcblxyXG4gICAgICBvdXQ6IGlmICh7fS50b1N0cmluZy5jYWxsKGMpID09ICdbb2JqZWN0IEFycmF5XScpIHtcclxuXHJcbiAgICAgICAgaWYgKChzID09PSAxIHx8IHMgPT09IC0xKSAmJiBlID49IC1NQVggJiYgZSA8PSBNQVggJiYgZSA9PT0gbWF0aGZsb29yKGUpKSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgemVybywgdGhlIEJpZ051bWJlciB2YWx1ZSBtdXN0IGJlIHplcm8uXHJcbiAgICAgICAgICBpZiAoY1swXSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoZSA9PT0gMCAmJiBjLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyB0aGF0IGNbMF0gc2hvdWxkIGhhdmUsIGJhc2VkIG9uIHRoZSBleHBvbmVudC5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoaSA8IDEpIGkgKz0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgICAgIC8vaWYgKE1hdGguY2VpbChNYXRoLmxvZyhjWzBdICsgMSkgLyBNYXRoLkxOMTApID09IGkpIHtcclxuICAgICAgICAgIGlmIChTdHJpbmcoY1swXSkubGVuZ3RoID09IGkpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbiA9IGNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gQkFTRSB8fCBuICE9PSBtYXRoZmxvb3IobikpIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTGFzdCBlbGVtZW50IGNhbm5vdCBiZSB6ZXJvLCB1bmxlc3MgaXQgaXMgdGhlIG9ubHkgZWxlbWVudC5cclxuICAgICAgICAgICAgaWYgKG4gIT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTlxyXG4gICAgICB9IGVsc2UgaWYgKGMgPT09IG51bGwgJiYgZSA9PT0gbnVsbCAmJiAocyA9PT0gbnVsbCB8fCBzID09PSAxIHx8IHMgPT09IC0xKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgIChiaWdudW1iZXJFcnJvciArICdJbnZhbGlkIEJpZ051bWJlcjogJyArIHYpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWF4aW11bSA9IEJpZ051bWJlci5tYXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIC0xKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1pbmltdW0gPSBCaWdOdW1iZXIubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLFxyXG4gICAgICogYW5kIHdpdGggZHAsIG9yIERFQ0lNQUxfUExBQ0VTIGlmIGRwIGlzIG9taXR0ZWQsIGRlY2ltYWwgcGxhY2VzIChvciBsZXNzIGlmIHRyYWlsaW5nXHJcbiAgICAgKiB6ZXJvcyBhcmUgcHJvZHVjZWQpLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5yYW5kb20gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgcG93Ml81MyA9IDB4MjAwMDAwMDAwMDAwMDA7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gYSA1MyBiaXQgaW50ZWdlciBuLCB3aGVyZSAwIDw9IG4gPCA5MDA3MTk5MjU0NzQwOTkyLlxyXG4gICAgICAvLyBDaGVjayBpZiBNYXRoLnJhbmRvbSgpIHByb2R1Y2VzIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHJhbmRvbW5lc3MuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIGFzc3VtZSBhdCBsZWFzdCA1MyBiaXRzIGFyZSBwcm9kdWNlZCwgb3RoZXJ3aXNlIGFzc3VtZSBhdCBsZWFzdCAzMCBiaXRzLlxyXG4gICAgICAvLyAweDQwMDAwMDAwIGlzIDJeMzAsIDB4ODAwMDAwIGlzIDJeMjMsIDB4MWZmZmZmIGlzIDJeMjEgLSAxLlxyXG4gICAgICB2YXIgcmFuZG9tNTNiaXRJbnQgPSAoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpICYgMHgxZmZmZmZcclxuICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKTsgfVxyXG4gICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoKE1hdGgucmFuZG9tKCkgKiAweDQwMDAwMDAwIHwgMCkgKiAweDgwMDAwMCkgK1xyXG4gICAgICAgICAoTWF0aC5yYW5kb20oKSAqIDB4ODAwMDAwIHwgMCk7IH07XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRwKSB7XHJcbiAgICAgICAgdmFyIGEsIGIsIGUsIGssIHYsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGMgPSBbXSxcclxuICAgICAgICAgIHJhbmQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAgIGlmIChkcCA9PSBudWxsKSBkcCA9IERFQ0lNQUxfUExBQ0VTO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcblxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChkcCAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgaWYgKENSWVBUTykge1xyXG5cclxuICAgICAgICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgICAgICAgIGlmIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoayAqPSAyKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDUzIGJpdHM6XHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSAqIE1hdGgucG93KDIsIDIxKSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTEwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMFxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgPj4+IDExKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMHgyMDAwMCBpcyAyXjIxLlxyXG4gICAgICAgICAgICAgIHYgPSBhW2ldICogMHgyMDAwMCArIChhW2kgKyAxXSA+Pj4gMTEpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBSZWplY3Rpb24gc2FtcGxpbmc6XHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIC8vIFByb2JhYmlsaXR5IHRoYXQgdiA+PSA5ZTE1LCBpc1xyXG4gICAgICAgICAgICAgIC8vIDcxOTkyNTQ3NDA5OTIgLyA5MDA3MTk5MjU0NzQwOTkyIH49IDAuMDAwOCwgaS5lLiAxIGluIDEyNTFcclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBiID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpO1xyXG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbMF07XHJcbiAgICAgICAgICAgICAgICBhW2kgKyAxXSA9IGJbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9IHYgPD0gODk5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9kZS5qcyBzdXBwb3J0aW5nIGNyeXB0by5yYW5kb21CeXRlcy5cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBidWZmZXJcclxuICAgICAgICAgICAgYSA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMDAwMDAgaXMgMl40OCwgMHgxMDAwMDAwMDAwMCBpcyAyXjQwXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAgaXMgMl4zMiwgMHgxMDAwMDAwIGlzIDJeMjRcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICB2ID0gKChhW2ldICYgMzEpICogMHgxMDAwMDAwMDAwMDAwKSArIChhW2kgKyAxXSAqIDB4MTAwMDAwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgMl0gKiAweDEwMDAwMDAwMCkgKyAoYVtpICsgM10gKiAweDEwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgNF0gPDwgMTYpICsgKGFbaSArIDVdIDw8IDgpICsgYVtpICsgNl07XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KGEsIGkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSA3O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBDUllQVE8gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBNYXRoLnJhbmRvbS5cclxuICAgICAgICBpZiAoIUNSWVBUTykge1xyXG5cclxuICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuICAgICAgICAgICAgdiA9IHJhbmRvbTUzYml0SW50KCk7XHJcbiAgICAgICAgICAgIGlmICh2IDwgOWUxNSkgY1tpKytdID0gdiAlIDFlMTQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBrID0gY1stLWldO1xyXG4gICAgICAgIGRwICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gZHAuXHJcbiAgICAgICAgaWYgKGsgJiYgZHApIHtcclxuICAgICAgICAgIHYgPSBQT1dTX1RFTltMT0dfQkFTRSAtIGRwXTtcclxuICAgICAgICAgIGNbaV0gPSBtYXRoZmxvb3IoayAvIHYpICogdjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVyby5cclxuICAgICAgICBmb3IgKDsgY1tpXSA9PT0gMDsgYy5wb3AoKSwgaS0tKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIGMgPSBbZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8gYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGZvciAoZSA9IC0xIDsgY1swXSA9PT0gMDsgYy5zcGxpY2UoMCwgMSksIGUgLT0gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYyB0byBkZXRlcm1pbmUgbGVhZGluZyB6ZXJvcywgYW5kLi4uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCB2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgaWYgKGkgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByYW5kLmUgPSBlO1xyXG4gICAgICAgIHJhbmQuYyA9IGM7XHJcbiAgICAgICAgcmV0dXJuIHJhbmQ7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuc3VtID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcclxuICAgICAgICBzdW0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOykgc3VtID0gc3VtLnBsdXMoYXJnc1tpKytdKTtcclxuICAgICAgcmV0dXJuIHN1bTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIFBSSVZBVEUgRlVOQ1RJT05TXHJcblxyXG5cclxuICAgIC8vIENhbGxlZCBieSBCaWdOdW1iZXIgYW5kIEJpZ051bWJlci5wcm90b3R5cGUudG9TdHJpbmcuXHJcbiAgICBjb252ZXJ0QmFzZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBkZWNpbWFsID0gJzAxMjM0NTY3ODknO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ29udmVydCBzdHJpbmcgb2YgYmFzZUluIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYmFzZU91dC5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCdmZicsIDE2LCAxMCkgcmV0dXJucyBbMiwgNSwgNV0uXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGFscGhhYmV0KSB7XHJcbiAgICAgICAgdmFyIGosXHJcbiAgICAgICAgICBhcnIgPSBbMF0sXHJcbiAgICAgICAgICBhcnJMLFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgIGZvciAoYXJyTCA9IGFyci5sZW5ndGg7IGFyckwtLTsgYXJyW2FyckxdICo9IGJhc2VJbik7XHJcblxyXG4gICAgICAgICAgYXJyWzBdICs9IGFscGhhYmV0LmluZGV4T2Yoc3RyLmNoYXJBdChpKyspKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJyW2pdID4gYmFzZU91dCAtIDEpIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PSBudWxsKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwO1xyXG4gICAgICAgICAgICAgIGFycltqXSAlPSBiYXNlT3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29udmVydCBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VJbiB0byBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgdG9TdHJpbmcsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZSAxMCB0byBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIEJpZ051bWJlciwgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlSW4gdG8gYmFzZSAxMC5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIGJhc2VJbiwgYmFzZU91dCwgc2lnbiwgY2FsbGVySXNUb1N0cmluZykge1xyXG4gICAgICAgIHZhciBhbHBoYWJldCwgZCwgZSwgaywgciwgeCwgeGMsIHksXHJcbiAgICAgICAgICBpID0gc3RyLmluZGV4T2YoJy4nKSxcclxuICAgICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgICBybSA9IFJPVU5ESU5HX01PREU7XHJcblxyXG4gICAgICAgIC8vIE5vbi1pbnRlZ2VyLlxyXG4gICAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICAgIGsgPSBQT1dfUFJFQ0lTSU9OO1xyXG5cclxuICAgICAgICAgIC8vIFVubGltaXRlZCBwcmVjaXNpb24uXHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gMDtcclxuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoYmFzZUluKTtcclxuICAgICAgICAgIHggPSB5LnBvdyhzdHIubGVuZ3RoIC0gaSk7XHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gaztcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHN0ciBhcyBpZiBhbiBpbnRlZ2VyLCB0aGVuIHJlc3RvcmUgdGhlIGZyYWN0aW9uIHBhcnQgYnkgZGl2aWRpbmcgdGhlXHJcbiAgICAgICAgICAvLyByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIuXHJcblxyXG4gICAgICAgICAgeS5jID0gdG9CYXNlT3V0KHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKHguYyksIHguZSwgJzAnKSxcclxuICAgICAgICAgICAxMCwgYmFzZU91dCwgZGVjaW1hbCk7XHJcbiAgICAgICAgICB5LmUgPSB5LmMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0aGUgbnVtYmVyIGFzIGludGVnZXIuXHJcblxyXG4gICAgICAgIHhjID0gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBjYWxsZXJJc1RvU3RyaW5nXHJcbiAgICAgICAgID8gKGFscGhhYmV0ID0gQUxQSEFCRVQsIGRlY2ltYWwpXHJcbiAgICAgICAgIDogKGFscGhhYmV0ID0gZGVjaW1hbCwgQUxQSEFCRVQpKTtcclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGFzIGFuIGludGVnZXIgYW5kIGNvbnZlcnRlZCB0byBiYXNlT3V0LiBlIGlzIHRoZSBleHBvbmVudC5cclxuICAgICAgICBlID0gayA9IHhjLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyB4Y1stLWtdID09IDA7IHhjLnBvcCgpKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoIXhjWzBdKSByZXR1cm4gYWxwaGFiZXQuY2hhckF0KDApO1xyXG5cclxuICAgICAgICAvLyBEb2VzIHN0ciByZXByZXNlbnQgYW4gaW50ZWdlcj8gSWYgc28sIG5vIG5lZWQgZm9yIHRoZSBkaXZpc2lvbi5cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIC0tZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5jID0geGM7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG5cclxuICAgICAgICAgIC8vIFRoZSBzaWduIGlzIG5lZWRlZCBmb3IgY29ycmVjdCByb3VuZGluZy5cclxuICAgICAgICAgIHgucyA9IHNpZ247XHJcbiAgICAgICAgICB4ID0gZGl2KHgsIHksIGRwLCBybSwgYmFzZU91dCk7XHJcbiAgICAgICAgICB4YyA9IHguYztcclxuICAgICAgICAgIHIgPSB4LnI7XHJcbiAgICAgICAgICBlID0geC5lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGNvbnZlcnRlZCB0byBiYXNlT3V0LlxyXG5cclxuICAgICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIGQgPSBlICsgZHAgKyAxO1xyXG5cclxuICAgICAgICAvLyBUaGUgcm91bmRpbmcgZGlnaXQ6IHRoZSBkaWdpdCB0byB0aGUgcmlnaHQgb2YgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhjW2RdO1xyXG5cclxuICAgICAgICAvLyBMb29rIGF0IHRoZSByb3VuZGluZyBkaWdpdHMgYW5kIG1vZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcm91bmQgdXAuXHJcblxyXG4gICAgICAgIGsgPSBiYXNlT3V0IC8gMjtcclxuICAgICAgICByID0gciB8fCBkIDwgMCB8fCB4Y1tkICsgMV0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgciA9IHJtIDwgNCA/IChpICE9IG51bGwgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgICAgOiBpID4gayB8fCBpID09IGsgJiYocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiYgeGNbZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvLCBvciB4YyByZXByZXNlbnRzXHJcbiAgICAgICAgLy8gemVybywgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBiYXNlIGNvbnZlcnNpb24gaXMgemVybyBvciwgaWYgcm91bmRpbmcgdXAsIGEgdmFsdWVcclxuICAgICAgICAvLyBzdWNoIGFzIDAuMDAwMDEuXHJcbiAgICAgICAgaWYgKGQgPCAxIHx8ICF4Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIDFeLWRwIG9yIDBcclxuICAgICAgICAgIHN0ciA9IHIgPyB0b0ZpeGVkUG9pbnQoYWxwaGFiZXQuY2hhckF0KDEpLCAtZHAsIGFscGhhYmV0LmNoYXJBdCgwKSkgOiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBUcnVuY2F0ZSB4YyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgeGMubGVuZ3RoID0gZDtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgICBmb3IgKC0tYmFzZU91dDsgKyt4Y1stLWRdID4gYmFzZU91dDspIHtcclxuICAgICAgICAgICAgICB4Y1tkXSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghZCkge1xyXG4gICAgICAgICAgICAgICAgKytlO1xyXG4gICAgICAgICAgICAgICAgeGMgPSBbMV0uY29uY2F0KHhjKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGsgPSB4Yy5sZW5ndGg7ICF4Y1stLWtdOyk7XHJcblxyXG4gICAgICAgICAgLy8gRS5nLiBbNCwgMTEsIDE1XSBiZWNvbWVzIDRiZi5cclxuICAgICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDw9IGs7IHN0ciArPSBhbHBoYWJldC5jaGFyQXQoeGNbaSsrXSkpO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm9zLCBkZWNpbWFsIHBvaW50IGFuZCB0cmFpbGluZyB6ZXJvcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsIGFscGhhYmV0LmNoYXJBdCgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgYWRkIHRoZSBzaWduLlxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvLyBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS4gQ2FsbGVkIGJ5IGRpdiBhbmQgY29udmVydEJhc2UuXHJcbiAgICBkaXYgPSAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgLy8gQXNzdW1lIG5vbi16ZXJvIHggYW5kIGsuXHJcbiAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KHgsIGssIGJhc2UpIHtcclxuICAgICAgICB2YXIgbSwgdGVtcCwgeGxvLCB4aGksXHJcbiAgICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgICBpID0geC5sZW5ndGgsXHJcbiAgICAgICAgICBrbG8gPSBrICUgU1FSVF9CQVNFLFxyXG4gICAgICAgICAga2hpID0gayAvIFNRUlRfQkFTRSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoeCA9IHguc2xpY2UoKTsgaS0tOykge1xyXG4gICAgICAgICAgeGxvID0geFtpXSAlIFNRUlRfQkFTRTtcclxuICAgICAgICAgIHhoaSA9IHhbaV0gLyBTUVJUX0JBU0UgfCAwO1xyXG4gICAgICAgICAgbSA9IGtoaSAqIHhsbyArIHhoaSAqIGtsbztcclxuICAgICAgICAgIHRlbXAgPSBrbG8gKiB4bG8gKyAoKG0gJSBTUVJUX0JBU0UpICogU1FSVF9CQVNFKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSAodGVtcCAvIGJhc2UgfCAwKSArIChtIC8gU1FSVF9CQVNFIHwgMCkgKyBraGkgKiB4aGk7XHJcbiAgICAgICAgICB4W2ldID0gdGVtcCAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FycnkpIHggPSBbY2FycnldLmNvbmNhdCh4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7XHJcbiAgICAgICAgdmFyIGksIGNtcDtcclxuXHJcbiAgICAgICAgaWYgKGFMICE9IGJMKSB7XHJcbiAgICAgICAgICBjbXAgPSBhTCA+IGJMID8gMSA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgZm9yIChpID0gY21wID0gMDsgaSA8IGFMOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgICBjbXAgPSBhW2ldID4gYltpXSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNtcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gc3VidHJhY3QoYSwgYiwgYUwsIGJhc2UpIHtcclxuICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICAgIGZvciAoOyBhTC0tOykge1xyXG4gICAgICAgICAgYVthTF0gLT0gaTtcclxuICAgICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgICBhW2FMXSA9IGkgKiBiYXNlICsgYVthTF0gLSBiW2FMXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyAhYVswXSAmJiBhLmxlbmd0aCA+IDE7IGEuc3BsaWNlKDAsIDEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geDogZGl2aWRlbmQsIHk6IGRpdmlzb3IuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgZHAsIHJtLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGNtcCwgZSwgaSwgbW9yZSwgbiwgcHJvZCwgcHJvZEwsIHEsIHFjLCByZW0sIHJlbUwsIHJlbTAsIHhpLCB4TCwgeWMwLFxyXG4gICAgICAgICAgeUwsIHl6LFxyXG4gICAgICAgICAgcyA9IHgucyA9PSB5LnMgPyAxIDogLTEsXHJcbiAgICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwP1xyXG4gICAgICAgIGlmICgheGMgfHwgIXhjWzBdIHx8ICF5YyB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihcclxuXHJcbiAgICAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgTmFOLCBvciBib3RoIEluZmluaXR5IG9yIDAuXHJcbiAgICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4YyA/IHljICYmIHhjWzBdID09IHljWzBdIDogIXljKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIHggaXMgwrEwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyDCsTAuXHJcbiAgICAgICAgICAgIHhjICYmIHhjWzBdID09IDAgfHwgIXljID8gcyAqIDAgOiBzIC8gMFxyXG4gICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcSA9IG5ldyBCaWdOdW1iZXIocyk7XHJcbiAgICAgICAgcWMgPSBxLmMgPSBbXTtcclxuICAgICAgICBlID0geC5lIC0geS5lO1xyXG4gICAgICAgIHMgPSBkcCArIGUgKyAxO1xyXG5cclxuICAgICAgICBpZiAoIWJhc2UpIHtcclxuICAgICAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSAtIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgICAgIHMgPSBzIC8gTE9HX0JBU0UgfCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGUuXHJcbiAgICAgICAgLy8gVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgQmlnTnVtYmVycyBmcm9tIGNvbnZlcnRCYXNlIG1heSBoYXZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoaSA9IDA7IHljW2ldID09ICh4Y1tpXSB8fCAwKTsgaSsrKTtcclxuXHJcbiAgICAgICAgaWYgKHljW2ldID4gKHhjW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCkge1xyXG4gICAgICAgICAgcWMucHVzaCgxKTtcclxuICAgICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBzICs9IDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhjIGFuZCB5YyBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHljIGlzID49IGJhc2UgLyAyLlxyXG5cclxuICAgICAgICAgIG4gPSBtYXRoZmxvb3IoYmFzZSAvICh5Y1swXSArIDEpKTtcclxuXHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gaGFuZGxlIG9kZCBiYXNlcyB3aGVyZSB5Y1swXSA9PSAoYmFzZSAvIDIpIC0gMS5cclxuICAgICAgICAgIC8vIGlmIChuID4gMSB8fCBuKysgPT0gMSAmJiB5Y1swXSA8IGJhc2UgLyAyKSB7XHJcbiAgICAgICAgICBpZiAobiA+IDEpIHtcclxuICAgICAgICAgICAgeWMgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHhjID0gbXVsdGlwbHkoeGMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhjLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOyByZW1bcmVtTCsrXSA9IDApO1xyXG4gICAgICAgICAgeXogPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgeXogPSBbMF0uY29uY2F0KHl6KTtcclxuICAgICAgICAgIHljMCA9IHljWzBdO1xyXG4gICAgICAgICAgaWYgKHljWzFdID49IGJhc2UgLyAyKSB5YzArKztcclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBwcmV2ZW50IHRyaWFsIGRpZ2l0IG4gPiBiYXNlLCB3aGVuIHVzaW5nIGJhc2UgMy5cclxuICAgICAgICAgIC8vIGVsc2UgaWYgKGJhc2UgPT0gMyAmJiB5YzAgPT0gMSkgeWMwID0gMSArIDFlLTE1O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIG4uXHJcblxyXG4gICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07XHJcbiAgICAgICAgICAgICAgaWYgKHlMICE9IHJlbUwpIHJlbTAgPSByZW0wICogYmFzZSArIChyZW1bMV0gfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIG4gaXMgaG93IG1hbnkgdGltZXMgdGhlIGRpdmlzb3IgZ29lcyBpbnRvIHRoZSBjdXJyZW50IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBuID0gbWF0aGZsb29yKHJlbTAgLyB5YzApO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICBwcm9kdWN0ID0gZGl2aXNvciBtdWx0aXBsaWVkIGJ5IHRyaWFsIGRpZ2l0IChuKS5cclxuICAgICAgICAgICAgICAvLyAgQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3QgaXMgZ3JlYXRlciB0aGFuIHJlbWFpbmRlcjpcclxuICAgICAgICAgICAgICAvLyAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdCwgZGVjcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgIC8vICBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IHdhcyBsZXNzIHRoYW4gcmVtYWluZGVyIGF0IHRoZSBsYXN0IGNvbXBhcmU6XHJcbiAgICAgICAgICAgICAgLy8gICAgQ29tcGFyZSBuZXcgcmVtYWluZGVyIGFuZCBkaXZpc29yLlxyXG4gICAgICAgICAgICAgIC8vICAgIElmIHJlbWFpbmRlciBpcyBncmVhdGVyIHRoYW4gZGl2aXNvcjpcclxuICAgICAgICAgICAgICAvLyAgICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIsIGluY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG4gPiAxKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBtYXkgYmUgPiBiYXNlIG9ubHkgd2hlbiBiYXNlIGlzIDMuXHJcbiAgICAgICAgICAgICAgICBpZiAobiA+PSBiYXNlKSBuID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0ID4gcmVtYWluZGVyIHRoZW4gdHJpYWwgZGlnaXQgbiB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gaGlnaCBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIGlzIG5vdCBrbm93biB0byBoYXZlXHJcbiAgICAgICAgICAgICAgICAvLyBldmVyIGJlZW4gbW9yZSB0aGFuIDEgdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4tLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5YywgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjbXAgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAwIG9yIDEsIGNtcCBpcyAtMS5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wYXJlIHljIGFuZCByZW0gYWdhaW4gYmVsb3csXHJcbiAgICAgICAgICAgICAgICAvLyBzbyBjaGFuZ2UgY21wIHRvIDEgdG8gYXZvaWQgaXQuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDEsIGxlYXZlIGNtcCBhcyAtMSwgc28geWMgYW5kIHJlbSBhcmUgY29tcGFyZWQgYWdhaW4uXHJcbiAgICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBkaXZpc29yIDwgcmVtYWluZGVyLCBzbyBuIG11c3QgYmUgYXQgbGVhc3QgMS5cclxuICAgICAgICAgICAgICAgICAgY21wID0gbiA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3JcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwcm9kTCA8IHJlbUwpIHByb2QgPSBbMF0uY29uY2F0KHByb2QpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBUcmlhbCBkaWdpdCBuIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGxvdyBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIHZlcnkgcmFyZWx5IDIgdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCB5TCA8IHJlbUwgPyB5eiA6IHljLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIG4rKztcclxuICAgICAgICAgICAgICByZW0gPSBbMF07XHJcbiAgICAgICAgICAgIH0gLy8gZWxzZSBjbXAgPT09IDEgYW5kIG4gd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIG4sIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFjW2krK10gPSBuO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChyZW1bMF0pIHtcclxuICAgICAgICAgICAgICByZW1bcmVtTCsrXSA9IHhjW3hpXSB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlbSA9IFt4Y1t4aV1dO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHdoaWxlICgoeGkrKyA8IHhMIHx8IHJlbVswXSAhPSBudWxsKSAmJiBzLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBMZWFkaW5nIHplcm8/XHJcbiAgICAgICAgICBpZiAoIXFjWzBdKSBxYy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFzZSA9PSBCQVNFKSB7XHJcblxyXG4gICAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFjWzBdLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgcyA9IHFjWzBdOyBzID49IDEwOyBzIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIHJvdW5kKHEsIGRwICsgKHEuZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSArIDEsIHJtLCBtb3JlKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbGVyIGlzIGNvbnZlcnRCYXNlLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxLmUgPSBlO1xyXG4gICAgICAgICAgcS5yID0gK21vcmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIgbiBpbiBmaXhlZC1wb2ludCBvciBleHBvbmVudGlhbFxyXG4gICAgICogbm90YXRpb24gcm91bmRlZCB0byB0aGUgc3BlY2lmaWVkIGRlY2ltYWwgcGxhY2VzIG9yIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAqXHJcbiAgICAgKiBuOiBhIEJpZ051bWJlci5cclxuICAgICAqIGk6IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBkaWdpdCByZXF1aXJlZCAoaS5lLiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cCkuXHJcbiAgICAgKiBybTogdGhlIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgKiBpZDogMSAodG9FeHBvbmVudGlhbCkgb3IgMiAodG9QcmVjaXNpb24pLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBmb3JtYXQobiwgaSwgcm0sIGlkKSB7XHJcbiAgICAgIHZhciBjMCwgZSwgbmUsIGxlbiwgc3RyO1xyXG5cclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICBpZiAoIW4uYykgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGMwID0gbi5jWzBdO1xyXG4gICAgICBuZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChpID09IG51bGwpIHtcclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgc3RyID0gaWQgPT0gMSB8fCBpZCA9PSAyICYmIChuZSA8PSBUT19FWFBfTkVHIHx8IG5lID49IFRPX0VYUF9QT1MpXHJcbiAgICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIG5lKVxyXG4gICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIG5lLCAnMCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBpLCBybSk7XHJcblxyXG4gICAgICAgIC8vIG4uZSBtYXkgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2YWx1ZSB3YXMgcm91bmRlZCB1cC5cclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gdG9QcmVjaXNpb24gcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICAgIC8vIHNwZWNpZmllZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlclxyXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgICBpZiAoaWQgPT0gMSB8fCBpZCA9PSAyICYmIChpIDw9IGUgfHwgZSA8PSBUT19FWFBfTkVHKSkge1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGZvciAoOyBsZW4gPCBpOyBzdHIgKz0gJzAnLCBsZW4rKyk7XHJcbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHN0ciwgZSk7XHJcblxyXG4gICAgICAgIC8vIEZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpIC09IG5lICsgKGlkID09PSAyICYmIGUgPiBuZSk7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGlmIChlICsgMSA+IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoLS1pID4gMCkgZm9yIChzdHIgKz0gJy4nOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSArPSBlIC0gbGVuO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICBpZiAoZSArIDEgPT0gbGVuKSBzdHIgKz0gJy4nO1xyXG4gICAgICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCAmJiBjMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIEJpZ051bWJlci5tYXggYW5kIEJpZ051bWJlci5taW4uXHJcbiAgICAvLyBJZiBhbnkgbnVtYmVyIGlzIE5hTiwgcmV0dXJuIE5hTi5cclxuICAgIGZ1bmN0aW9uIG1heE9yTWluKGFyZ3MsIG4pIHtcclxuICAgICAgdmFyIGssIHksXHJcbiAgICAgICAgaSA9IDEsXHJcbiAgICAgICAgeCA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihhcmdzW2ldKTtcclxuICAgICAgICBpZiAoIXkucyB8fCAoayA9IGNvbXBhcmUoeCwgeSkpID09PSBuIHx8IGsgPT09IDAgJiYgeC5zID09PSBuKSB7XHJcbiAgICAgICAgICB4ID0geTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogU3RyaXAgdHJhaWxpbmcgemVyb3MsIGNhbGN1bGF0ZSBiYXNlIDEwIGV4cG9uZW50IGFuZCBjaGVjayBhZ2FpbnN0IE1JTl9FWFAgYW5kIE1BWF9FWFAuXHJcbiAgICAgKiBDYWxsZWQgYnkgbWludXMsIHBsdXMgYW5kIHRpbWVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpc2UobiwgYywgZSkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgaiA9IGMubGVuZ3RoO1xyXG5cclxuICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFjWy0tal07IGMucG9wKCkpO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50LiBGaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgZm9yIChqID0gY1swXTsgaiA+PSAxMDsgaiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoKGUgPSBpICsgZSAqIExPR19CQVNFIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIG4uYyA9IG4uZSA9IG51bGw7XHJcblxyXG4gICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICBuLmMgPSBbbi5lID0gMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbi5lID0gZTtcclxuICAgICAgICBuLmMgPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIHZhbHVlcyB0aGF0IGZhaWwgdGhlIHZhbGlkaXR5IHRlc3QgaW4gQmlnTnVtYmVyLlxyXG4gICAgcGFyc2VOdW1lcmljID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pLFxyXG4gICAgICAgIGRvdEFmdGVyID0gL14oW14uXSspXFwuJC8sXHJcbiAgICAgICAgZG90QmVmb3JlID0gL15cXC4oW14uXSspJC8sXHJcbiAgICAgICAgaXNJbmZpbml0eU9yTmFOID0gL14tPyhJbmZpbml0eXxOYU4pJC8sXHJcbiAgICAgICAgd2hpdGVzcGFjZU9yUGx1cyA9IC9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZztcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgc3RyLCBpc051bSwgYikge1xyXG4gICAgICAgIHZhciBiYXNlLFxyXG4gICAgICAgICAgcyA9IGlzTnVtID8gc3RyIDogc3RyLnJlcGxhY2Uod2hpdGVzcGFjZU9yUGx1cywgJycpO1xyXG5cclxuICAgICAgICAvLyBObyBleGNlcHRpb24gb24gwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgICAgaWYgKGlzSW5maW5pdHlPck5hTi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICB4LnMgPSBpc05hTihzKSA/IG51bGwgOiBzIDwgMCA/IC0xIDogMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFpc051bSkge1xyXG5cclxuICAgICAgICAgICAgLy8gYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2lcclxuICAgICAgICAgICAgcyA9IHMucmVwbGFjZShiYXNlUHJlZml4LCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IChwMiA9IHAyLnRvTG93ZXJDYXNlKCkpID09ICd4JyA/IDE2IDogcDIgPT0gJ2InID8gMiA6IDg7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICFiIHx8IGIgPT0gYmFzZSA/IHAxIDogbTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSBiO1xyXG5cclxuICAgICAgICAgICAgICAvLyBFLmcuICcxLicgdG8gJzEnLCAnLjEnIHRvICcwLjEnXHJcbiAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZShkb3RBZnRlciwgJyQxJykucmVwbGFjZShkb3RCZWZvcmUsICcwLiQxJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHIgIT0gcykgcmV0dXJuIG5ldyBCaWdOdW1iZXIocywgYmFzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIG51bWJlcjoge259J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE5vdCBhIGJhc2Uge2J9IG51bWJlcjoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRykge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdOb3QgYScgKyAoYiA/ICcgYmFzZSAnICsgYiA6ICcnKSArICcgbnVtYmVyOiAnICsgc3RyKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBOYU5cclxuICAgICAgICAgIHgucyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUm91bmQgeCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBybS4gQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgICAqIElmIHIgaXMgdHJ1dGh5LCBpdCBpcyBrbm93biB0aGF0IHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHJvdW5kKHgsIHNkLCBybSwgcikge1xyXG4gICAgICB2YXIgZCwgaSwgaiwgaywgbiwgbmksIHJkLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHBvd3MxMCA9IFBPV1NfVEVOO1xyXG5cclxuICAgICAgLy8gaWYgeCBpcyBub3QgSW5maW5pdHkgb3IgTmFOLi4uXHJcbiAgICAgIGlmICh4Yykge1xyXG5cclxuICAgICAgICAvLyByZCBpcyB0aGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIC8vIG4gaXMgYSBiYXNlIDFlMTQgbnVtYmVyLCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgb2YgYXJyYXkgeC5jIGNvbnRhaW5pbmcgcmQuXHJcbiAgICAgICAgLy8gbmkgaXMgdGhlIGluZGV4IG9mIG4gd2l0aGluIHguYy5cclxuICAgICAgICAvLyBkIGlzIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIG4uXHJcbiAgICAgICAgLy8gaSBpcyB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4gaW5jbHVkaW5nIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgLy8gaiBpcyB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiBuIChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuICAgICAgICBvdXQ6IHtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuXHJcbiAgICAgICAgICBmb3IgKGQgPSAxLCBrID0geGNbMF07IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcbiAgICAgICAgICBpID0gc2QgLSBkO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBzZDtcclxuICAgICAgICAgICAgbiA9IHhjW25pID0gMF07XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgcmQgPSBtYXRoZmxvb3IobiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmkgPSBtYXRoY2VpbCgoaSArIDEpIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5pID49IHhjLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBieSBzcXJ0LlxyXG4gICAgICAgICAgICAgICAgZm9yICg7IHhjLmxlbmd0aCA8PSBuaTsgeGMucHVzaCgwKSk7XHJcbiAgICAgICAgICAgICAgICBuID0gcmQgPSAwO1xyXG4gICAgICAgICAgICAgICAgZCA9IDE7XHJcbiAgICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG4gICAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbiA9IGsgPSB4Y1tuaV07XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgICAgICAgIGZvciAoZCA9IDE7IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4uXHJcbiAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiwgYWRqdXN0ZWQgZm9yIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4gaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkLlxyXG4gICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyBkO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgICByZCA9IGogPCAwID8gMCA6IG1hdGhmbG9vcihuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByID0gciB8fCBzZCA8IDAgfHxcclxuXHJcbiAgICAgICAgICAvLyBBcmUgdGhlcmUgYW55IG5vbi16ZXJvIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQ/XHJcbiAgICAgICAgICAvLyBUaGUgZXhwcmVzc2lvbiAgbiAlIHBvd3MxMFtkIC0gaiAtIDFdICByZXR1cm5zIGFsbCBkaWdpdHMgb2YgbiB0byB0aGUgcmlnaHRcclxuICAgICAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCBqLCBlLmcuIGlmIG4gaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uIGdpdmVzIDcxNC5cclxuICAgICAgICAgICB4Y1tuaSArIDFdICE9IG51bGwgfHwgKGogPCAwID8gbiA6IG4gJSBwb3dzMTBbZCAtIGogLSAxXSk7XHJcblxyXG4gICAgICAgICAgciA9IHJtIDwgNFxyXG4gICAgICAgICAgID8gKHJkIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmXHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgb2RkLlxyXG4gICAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyBuIC8gcG93czEwW2QgLSBqXSA6IDAgOiB4Y1tuaSAtIDFdKSAlIDEwKSAmIDEgfHxcclxuICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2QgPCAxIHx8ICF4Y1swXSkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgICAgICBzZCAtPSB4LmUgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0gcG93czEwWyhMT0dfQkFTRSAtIHNkICUgTE9HX0JBU0UpICUgTE9HX0JBU0VdO1xyXG4gICAgICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0geC5lID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuXHJcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pO1xyXG4gICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgbmktLTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pICsgMTtcclxuICAgICAgICAgICAgayA9IHBvd3MxMFtMT0dfQkFTRSAtIGldO1xyXG5cclxuICAgICAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAvLyBqID4gMCBtZWFucyBpID4gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2Ygbi5cclxuICAgICAgICAgICAgeGNbbmldID0gaiA+IDAgPyBtYXRoZmxvb3IobiAvIHBvd3MxMFtkIC0gal0gJSBwb3dzMTBbal0pICogayA6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgICAgICBpZiAobmkgPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhjWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG4gICAgICAgICAgICAgICAgaiA9IHhjWzBdICs9IGs7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBqID49IDEwOyBqIC89IDEwLCBrKyspO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHguZSsrO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeGNbMF0gPT0gQkFTRSkgeGNbMF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaV0gKz0gaztcclxuICAgICAgICAgICAgICAgIGlmICh4Y1tuaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaS0tXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGkgPSB4Yy5sZW5ndGg7IHhjWy0taV0gPT09IDA7IHhjLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE92ZXJmbG93PyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93PyBaZXJvLlxyXG4gICAgICAgIH0gZWxzZSBpZiAoeC5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHZhbHVlT2Yobikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuXHJcbiAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBlKVxyXG4gICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBQUk9UT1RZUEUvSU5TVEFOQ0UgTUVUSE9EU1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIFAuYWJzb2x1dGVWYWx1ZSA9IFAuYWJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm5cclxuICAgICAqICAgMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIC0xIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgMCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUsXHJcbiAgICAgKiAgIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgKi9cclxuICAgIFAuY29tcGFyZWRUbyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIGRwIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIG9mIHRoZVxyXG4gICAgICogdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgZHAgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBkcCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXM6IGludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5kZWNpbWFsUGxhY2VzID0gUC5kcCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBkcCArIHguZSArIDEsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICBuID0gKCh2ID0gYy5sZW5ndGggLSAxKSAtIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSkgKiBMT0dfQkFTRTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgbnVtYmVyLlxyXG4gICAgICBpZiAodiA9IGNbdl0pIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuICAgICAgaWYgKG4gPCAwKSBuID0gMDtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC8gMCA9IElcclxuICAgICAqICBuIC8gTiA9IE5cclxuICAgICAqICBuIC8gSSA9IDBcclxuICAgICAqICAwIC8gbiA9IDBcclxuICAgICAqICAwIC8gMCA9IE5cclxuICAgICAqICAwIC8gTiA9IE5cclxuICAgICAqICAwIC8gSSA9IDBcclxuICAgICAqICBOIC8gbiA9IE5cclxuICAgICAqICBOIC8gMCA9IE5cclxuICAgICAqICBOIC8gTiA9IE5cclxuICAgICAqICBOIC8gSSA9IE5cclxuICAgICAqICBJIC8gbiA9IElcclxuICAgICAqICBJIC8gMCA9IElcclxuICAgICAqICBJIC8gTiA9IE5cclxuICAgICAqICBJIC8gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkQnkgPSBQLmRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgREVDSU1BTF9QTEFDRVMsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIgcGFydCBvZiBkaXZpZGluZyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIGJ5IHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5pZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCAwLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGV4cG9uZW50aWF0ZWQgYnkgbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBtIGlzIHByZXNlbnQsIHJldHVybiB0aGUgcmVzdWx0IG1vZHVsbyBtLlxyXG4gICAgICogSWYgbiBpcyBuZWdhdGl2ZSByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKiBJZiBQT1dfUFJFQ0lTSU9OIGlzIG5vbi16ZXJvIGFuZCBtIGlzIG5vdCBwcmVzZW50LCByb3VuZCB0byBQT1dfUFJFQ0lTSU9OIHVzaW5nIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZHVsYXIgcG93ZXIgb3BlcmF0aW9uIHdvcmtzIGVmZmljaWVudGx5IHdoZW4geCwgbiwgYW5kIG0gYXJlIGludGVnZXJzLCBvdGhlcndpc2UgaXRcclxuICAgICAqIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgeC5leHBvbmVudGlhdGVkQnkobikubW9kdWxvKG0pIHdpdGggYSBQT1dfUFJFQ0lTSU9OIG9mIDAuXHJcbiAgICAgKlxyXG4gICAgICogbiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBleHBvbmVudC4gQW4gaW50ZWdlci5cclxuICAgICAqIFttXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBtb2R1bHVzLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBFeHBvbmVudCBub3QgYW4gaW50ZWdlcjoge259J1xyXG4gICAgICovXHJcbiAgICBQLmV4cG9uZW50aWF0ZWRCeSA9IFAucG93ID0gZnVuY3Rpb24gKG4sIG0pIHtcclxuICAgICAgdmFyIGhhbGYsIGlzTW9kRXhwLCBpLCBrLCBtb3JlLCBuSXNCaWcsIG5Jc05lZywgbklzT2RkLCB5LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobik7XHJcblxyXG4gICAgICAvLyBBbGxvdyBOYU4gYW5kIMKxSW5maW5pdHksIGJ1dCBub3Qgb3RoZXIgbm9uLWludGVnZXJzLlxyXG4gICAgICBpZiAobi5jICYmICFuLmlzSW50ZWdlcigpKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogJyArIHZhbHVlT2YobikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobSAhPSBudWxsKSBtID0gbmV3IEJpZ051bWJlcihtKTtcclxuXHJcbiAgICAgIC8vIEV4cG9uZW50IG9mIE1BWF9TQUZFX0lOVEVHRVIgaXMgMTUuXHJcbiAgICAgIG5Jc0JpZyA9IG4uZSA+IDE0O1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBOYU4sIMKxSW5maW5pdHksIMKxMCBvciDCsTEsIG9yIG4gaXMgwrFJbmZpbml0eSwgTmFOIG9yIMKxMC5cclxuICAgICAgaWYgKCF4LmMgfHwgIXguY1swXSB8fCB4LmNbMF0gPT0gMSAmJiAheC5lICYmIHguYy5sZW5ndGggPT0gMSB8fCAhbi5jIHx8ICFuLmNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBvZiBwb3cgd2hlbiB4IGlzIG5lZ2F0aXZlIGRlcGVuZHMgb24gdGhlIGV2ZW5uZXNzIG9mIG4uXHJcbiAgICAgICAgLy8gSWYgK24gb3ZlcmZsb3dzIHRvIMKxSW5maW5pdHksIHRoZSBldmVubmVzcyBvZiBuIHdvdWxkIGJlIG5vdCBiZSBrbm93bi5cclxuICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihNYXRoLnBvdygrdmFsdWVPZih4KSwgbklzQmlnID8gbi5zICogKDIgLSBpc09kZChuKSkgOiArdmFsdWVPZihuKSkpO1xyXG4gICAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuSXNOZWcgPSBuLnMgPCAwO1xyXG5cclxuICAgICAgaWYgKG0pIHtcclxuXHJcbiAgICAgICAgLy8geCAlIG0gcmV0dXJucyBOYU4gaWYgYWJzKG0pIGlzIHplcm8sIG9yIG0gaXMgTmFOLlxyXG4gICAgICAgIGlmIChtLmMgPyAhbS5jWzBdIDogIW0ucykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgICAgaXNNb2RFeHAgPSAhbklzTmVnICYmIHguaXNJbnRlZ2VyKCkgJiYgbS5pc0ludGVnZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTW9kRXhwKSB4ID0geC5tb2QobSk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdyB0byDCsUluZmluaXR5OiA+PTIqKjFlMTAgb3IgPj0xLjAwMDAwMjQqKjFlMTUuXHJcbiAgICAgIC8vIFVuZGVyZmxvdyB0byDCsTA6IDw9MC43OSoqMWUxMCBvciA8PTAuOTk5OTk3NSoqMWUxNS5cclxuICAgICAgfSBlbHNlIGlmIChuLmUgPiA5ICYmICh4LmUgPiAwIHx8IHguZSA8IC0xIHx8ICh4LmUgPT0gMFxyXG4gICAgICAgIC8vIFsxLCAyNDAwMDAwMDBdXHJcbiAgICAgICAgPyB4LmNbMF0gPiAxIHx8IG5Jc0JpZyAmJiB4LmNbMV0gPj0gMjRlN1xyXG4gICAgICAgIC8vIFs4MDAwMDAwMDAwMDAwMF0gIFs5OTk5OTc1MDAwMDAwMF1cclxuICAgICAgICA6IHguY1swXSA8IDhlMTMgfHwgbklzQmlnICYmIHguY1swXSA8PSA5OTk5OTc1ZTcpKSkge1xyXG5cclxuICAgICAgICAvLyBJZiB4IGlzIG5lZ2F0aXZlIGFuZCBuIGlzIG9kZCwgayA9IC0wLCBlbHNlIGsgPSAwLlxyXG4gICAgICAgIGsgPSB4LnMgPCAwICYmIGlzT2RkKG4pID8gLTAgOiAwO1xyXG5cclxuICAgICAgICAvLyBJZiB4ID49IDEsIGsgPSDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiAtMSkgayA9IDEgLyBrO1xyXG5cclxuICAgICAgICAvLyBJZiBuIGlzIG5lZ2F0aXZlIHJldHVybiDCsTAsIGVsc2UgcmV0dXJuIMKxSW5maW5pdHkuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIobklzTmVnID8gMSAvIGsgOiBrKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoUE9XX1BSRUNJU0lPTikge1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0aW5nIGVhY2ggY29lZmZpY2llbnQgYXJyYXkgdG8gYSBsZW5ndGggb2YgayBhZnRlciBlYWNoIG11bHRpcGxpY2F0aW9uXHJcbiAgICAgICAgLy8gZXF1YXRlcyB0byB0cnVuY2F0aW5nIHNpZ25pZmljYW50IGRpZ2l0cyB0byBQT1dfUFJFQ0lTSU9OICsgWzI4LCA0MV0sXHJcbiAgICAgICAgLy8gaS5lLiB0aGVyZSB3aWxsIGJlIGEgbWluaW11bSBvZiAyOCBndWFyZCBkaWdpdHMgcmV0YWluZWQuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKFBPV19QUkVDSVNJT04gLyBMT0dfQkFTRSArIDIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobklzQmlnKSB7XHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoMC41KTtcclxuICAgICAgICBpZiAobklzTmVnKSBuLnMgPSAxO1xyXG4gICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSBNYXRoLmFicygrdmFsdWVPZihuKSk7XHJcbiAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAvLyBQZXJmb3JtcyA1NCBsb29wIGl0ZXJhdGlvbnMgZm9yIG4gb2YgOTAwNzE5OTI1NDc0MDk5MS5cclxuICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgaWYgKG5Jc09kZCkge1xyXG4gICAgICAgICAgeSA9IHkudGltZXMoeCk7XHJcbiAgICAgICAgICBpZiAoIXkuYykgYnJlYWs7XHJcblxyXG4gICAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgICAgaWYgKHkuYy5sZW5ndGggPiBrKSB5LmMubGVuZ3RoID0gaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgICAgeSA9IHkubW9kKG0pOyAgICAvL3kgPSB5Lm1pbnVzKGRpdih5LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGkpIHtcclxuICAgICAgICAgIGkgPSBtYXRoZmxvb3IoaSAvIDIpO1xyXG4gICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBuLnRpbWVzKGhhbGYpO1xyXG4gICAgICAgICAgcm91bmQobiwgbi5lICsgMSwgMSk7XHJcblxyXG4gICAgICAgICAgaWYgKG4uZSA+IDE0KSB7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSA9ICt2YWx1ZU9mKG4pO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeCA9IHgudGltZXMoeCk7XHJcblxyXG4gICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICBpZiAoeC5jICYmIHguYy5sZW5ndGggPiBrKSB4LmMubGVuZ3RoID0gaztcclxuICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICB4ID0geC5tb2QobSk7ICAgIC8veCA9IHgubWludXMoZGl2KHgsIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNNb2RFeHApIHJldHVybiB5O1xyXG4gICAgICBpZiAobklzTmVnKSB5ID0gT05FLmRpdih5KTtcclxuXHJcbiAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiBrID8gcm91bmQoeSwgUE9XX1BSRUNJU0lPTiwgUk9VTkRJTkdfTU9ERSwgbW9yZSkgOiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gYW4gaW50ZWdlclxyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3JtfSdcclxuICAgICAqL1xyXG4gICAgUC5pbnRlZ2VyVmFsdWUgPSBmdW5jdGlvbiAocm0pIHtcclxuICAgICAgdmFyIG4gPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuICAgICAgcmV0dXJuIHJvdW5kKG4sIG4uZSArIDEsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNFcXVhbFRvID0gUC5lcSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhIGZpbml0ZSBudW1iZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW4gPSBQLmd0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyA9IFAuZ3RlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IDEgfHwgYiA9PT0gMDtcclxuXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGFuIGludGVnZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNJbnRlZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpID4gdGhpcy5jLmxlbmd0aCAtIDI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuID0gUC5sdCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW5PckVxdWFsVG8gPSBQLmx0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAtMSB8fCBiID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBOYU4sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5zO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05lZ2F0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNQb3NpdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIDAgb3IgLTAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgdGhpcy5jWzBdID09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLSAwID0gblxyXG4gICAgICogIG4gLSBOID0gTlxyXG4gICAgICogIG4gLSBJID0gLUlcclxuICAgICAqICAwIC0gbiA9IC1uXHJcbiAgICAgKiAgMCAtIDAgPSAwXHJcbiAgICAgKiAgMCAtIE4gPSBOXHJcbiAgICAgKiAgMCAtIEkgPSAtSVxyXG4gICAgICogIE4gLSBuID0gTlxyXG4gICAgICogIE4gLSAwID0gTlxyXG4gICAgICogIE4gLSBOID0gTlxyXG4gICAgICogIE4gLSBJID0gTlxyXG4gICAgICogIEkgLSBuID0gSVxyXG4gICAgICogIEkgLSAwID0gSVxyXG4gICAgICogIEkgLSBOID0gTlxyXG4gICAgICogIEkgLSBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1pbnVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm1pbnVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGksIGosIHQsIHhMVHksXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIHhjID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeWMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICAgIHJldHVybiB5Y1swXSA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6XHJcblxyXG4gICAgICAgICAgIC8vIElFRUUgNzU0ICgyMDA4KSA2LjM6IG4gLSBuID0gLTAgd2hlbiByb3VuZGluZyB0byAtSW5maW5pdHlcclxuICAgICAgICAgICBST1VORElOR19NT0RFID09IDMgPyAtMCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG5cclxuICAgICAgICBpZiAoeExUeSA9IGEgPCAwKSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgICAgZm9yIChiID0gYTsgYi0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudHMgZXF1YWwuIENoZWNrIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgICAgIGogPSAoeExUeSA9IChhID0geGMubGVuZ3RoKSA8IChiID0geWMubGVuZ3RoKSkgPyBhIDogYjtcclxuXHJcbiAgICAgICAgZm9yIChhID0gYiA9IDA7IGIgPCBqOyBiKyspIHtcclxuXHJcbiAgICAgICAgICBpZiAoeGNbYl0gIT0geWNbYl0pIHtcclxuICAgICAgICAgICAgeExUeSA9IHhjW2JdIDwgeWNbYl07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geCA8IHk/IFBvaW50IHhjIHRvIHRoZSBhcnJheSBvZiB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKHhMVHkpIHtcclxuICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgeGMgPSB5YztcclxuICAgICAgICB5YyA9IHQ7XHJcbiAgICAgICAgeS5zID0gLXkucztcclxuICAgICAgfVxyXG5cclxuICAgICAgYiA9IChqID0geWMubGVuZ3RoKSAtIChpID0geGMubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcyB0byB4YyBpZiBzaG9ydGVyLlxyXG4gICAgICAvLyBObyBuZWVkIHRvIGFkZCB6ZXJvcyB0byB5YyBpZiBzaG9ydGVyIGFzIHN1YnRyYWN0IG9ubHkgbmVlZHMgdG8gc3RhcnQgYXQgeWMubGVuZ3RoLlxyXG4gICAgICBpZiAoYiA+IDApIGZvciAoOyBiLS07IHhjW2krK10gPSAwKTtcclxuICAgICAgYiA9IEJBU0UgLSAxO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgeWMgZnJvbSB4Yy5cclxuICAgICAgZm9yICg7IGogPiBhOykge1xyXG5cclxuICAgICAgICBpZiAoeGNbLS1qXSA8IHljW2pdKSB7XHJcbiAgICAgICAgICBmb3IgKGkgPSBqOyBpICYmICF4Y1stLWldOyB4Y1tpXSA9IGIpO1xyXG4gICAgICAgICAgLS14Y1tpXTtcclxuICAgICAgICAgIHhjW2pdICs9IEJBU0U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4Y1tqXSAtPSB5Y1tqXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MgYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgZm9yICg7IHhjWzBdID09IDA7IHhjLnNwbGljZSgwLCAxKSwgLS15ZSk7XHJcblxyXG4gICAgICAvLyBaZXJvP1xyXG4gICAgICBpZiAoIXhjWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIEZvbGxvd2luZyBJRUVFIDc1NCAoMjAwOCkgNi4zLFxyXG4gICAgICAgIC8vIG4gLSBuID0gKzAgIGJ1dCAgbiAtIG4gPSAtMCAgd2hlbiByb3VuZGluZyB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgICB5LnMgPSBST1VORElOR19NT0RFID09IDMgPyAtMSA6IDE7XHJcbiAgICAgICAgeS5jID0gW3kuZSA9IDBdO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciBJbmZpbml0eSBhcyAreCAtICt5ICE9IEluZmluaXR5ICYmIC14IC0gLXkgIT0gSW5maW5pdHlcclxuICAgICAgLy8gZm9yIGZpbml0ZSB4IGFuZCB5LlxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogICBuICUgMCA9ICBOXHJcbiAgICAgKiAgIG4gJSBOID0gIE5cclxuICAgICAqICAgbiAlIEkgPSAgblxyXG4gICAgICogICAwICUgbiA9ICAwXHJcbiAgICAgKiAgLTAgJSBuID0gLTBcclxuICAgICAqICAgMCAlIDAgPSAgTlxyXG4gICAgICogICAwICUgTiA9ICBOXHJcbiAgICAgKiAgIDAgJSBJID0gIDBcclxuICAgICAqICAgTiAlIG4gPSAgTlxyXG4gICAgICogICBOICUgMCA9ICBOXHJcbiAgICAgKiAgIE4gJSBOID0gIE5cclxuICAgICAqICAgTiAlIEkgPSAgTlxyXG4gICAgICogICBJICUgbiA9ICBOXHJcbiAgICAgKiAgIEkgJSAwID0gIE5cclxuICAgICAqICAgSSAlIE4gPSAgTlxyXG4gICAgICogICBJICUgSSA9ICBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbW9kdWxvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIE1PRFVMT19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLm1vZHVsbyA9IFAubW9kID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHEsIHMsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgeCBpcyBJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIHplcm8uXHJcbiAgICAgIGlmICgheC5jIHx8ICF5LnMgfHwgeS5jICYmICF5LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBJbmZpbml0eSBvciB4IGlzIHplcm8uXHJcbiAgICAgIH0gZWxzZSBpZiAoIXkuYyB8fCB4LmMgJiYgIXguY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoTU9EVUxPX01PREUgPT0gOSkge1xyXG5cclxuICAgICAgICAvLyBFdWNsaWRpYW4gZGl2aXNpb246IHEgPSBzaWduKHkpICogZmxvb3IoeCAvIGFicyh5KSlcclxuICAgICAgICAvLyByID0geCAtIHF5ICAgIHdoZXJlICAwIDw9IHIgPCBhYnMoeSlcclxuICAgICAgICBzID0geS5zO1xyXG4gICAgICAgIHkucyA9IDE7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCAzKTtcclxuICAgICAgICB5LnMgPSBzO1xyXG4gICAgICAgIHEucyAqPSBzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgTU9EVUxPX01PREUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0geC5taW51cyhxLnRpbWVzKHkpKTtcclxuXHJcbiAgICAgIC8vIFRvIG1hdGNoIEphdmFTY3JpcHQgJSwgZW5zdXJlIHNpZ24gb2YgemVybyBpcyBzaWduIG9mIGRpdmlkZW5kLlxyXG4gICAgICBpZiAoIXkuY1swXSAmJiBNT0RVTE9fTU9ERSA9PSAxKSB5LnMgPSB4LnM7XHJcblxyXG4gICAgICByZXR1cm4geTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAqIDAgPSAwXHJcbiAgICAgKiAgbiAqIE4gPSBOXHJcbiAgICAgKiAgbiAqIEkgPSBJXHJcbiAgICAgKiAgMCAqIG4gPSAwXHJcbiAgICAgKiAgMCAqIDAgPSAwXHJcbiAgICAgKiAgMCAqIE4gPSBOXHJcbiAgICAgKiAgMCAqIEkgPSBOXHJcbiAgICAgKiAgTiAqIG4gPSBOXHJcbiAgICAgKiAgTiAqIDAgPSBOXHJcbiAgICAgKiAgTiAqIE4gPSBOXHJcbiAgICAgKiAgTiAqIEkgPSBOXHJcbiAgICAgKiAgSSAqIG4gPSBJXHJcbiAgICAgKiAgSSAqIDAgPSBOXHJcbiAgICAgKiAgSSAqIE4gPSBOXHJcbiAgICAgKiAgSSAqIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbXVsdGlwbGllZCBieSB0aGUgdmFsdWVcclxuICAgICAqIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5tdWx0aXBsaWVkQnkgPSBQLnRpbWVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGMsIGUsIGksIGosIGssIG0sIHhjTCwgeGxvLCB4aGksIHljTCwgeWxvLCB5aGksIHpjLFxyXG4gICAgICAgIGJhc2UsIHNxcnRCYXNlLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0gKHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpKS5jO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTiwgwrFJbmZpbml0eSBvciDCsTA/XHJcbiAgICAgIGlmICgheGMgfHwgIXljIHx8ICF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgaXMgTmFOLCBvciBvbmUgaXMgMCBhbmQgdGhlIG90aGVyIGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICgheC5zIHx8ICF5LnMgfHwgeGMgJiYgIXhjWzBdICYmICF5YyB8fCB5YyAmJiAheWNbMF0gJiYgIXhjKSB7XHJcbiAgICAgICAgICB5LmMgPSB5LmUgPSB5LnMgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciBpcyDCsUluZmluaXR5LlxyXG4gICAgICAgICAgaWYgKCF4YyB8fCAheWMpIHtcclxuICAgICAgICAgICAgeS5jID0geS5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIGVpdGhlciBpcyDCsTAuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB5LmMgPSBbMF07XHJcbiAgICAgICAgICAgIHkuZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSArIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgeS5zICo9IHgucztcclxuICAgICAgeGNMID0geGMubGVuZ3RoO1xyXG4gICAgICB5Y0wgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBFbnN1cmUgeGMgcG9pbnRzIHRvIGxvbmdlciBhcnJheSBhbmQgeGNMIHRvIGl0cyBsZW5ndGguXHJcbiAgICAgIGlmICh4Y0wgPCB5Y0wpIHtcclxuICAgICAgICB6YyA9IHhjO1xyXG4gICAgICAgIHhjID0geWM7XHJcbiAgICAgICAgeWMgPSB6YztcclxuICAgICAgICBpID0geGNMO1xyXG4gICAgICAgIHhjTCA9IHljTDtcclxuICAgICAgICB5Y0wgPSBpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSByZXN1bHQgYXJyYXkgd2l0aCB6ZXJvcy5cclxuICAgICAgZm9yIChpID0geGNMICsgeWNMLCB6YyA9IFtdOyBpLS07IHpjLnB1c2goMCkpO1xyXG5cclxuICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgIHNxcnRCYXNlID0gU1FSVF9CQVNFO1xyXG5cclxuICAgICAgZm9yIChpID0geWNMOyAtLWkgPj0gMDspIHtcclxuICAgICAgICBjID0gMDtcclxuICAgICAgICB5bG8gPSB5Y1tpXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgIHloaSA9IHljW2ldIC8gc3FydEJhc2UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSB4Y0wsIGogPSBpICsgazsgaiA+IGk7KSB7XHJcbiAgICAgICAgICB4bG8gPSB4Y1stLWtdICUgc3FydEJhc2U7XHJcbiAgICAgICAgICB4aGkgPSB4Y1trXSAvIHNxcnRCYXNlIHwgMDtcclxuICAgICAgICAgIG0gPSB5aGkgKiB4bG8gKyB4aGkgKiB5bG87XHJcbiAgICAgICAgICB4bG8gPSB5bG8gKiB4bG8gKyAoKG0gJSBzcXJ0QmFzZSkgKiBzcXJ0QmFzZSkgKyB6Y1tqXSArIGM7XHJcbiAgICAgICAgICBjID0gKHhsbyAvIGJhc2UgfCAwKSArIChtIC8gc3FydEJhc2UgfCAwKSArIHloaSAqIHhoaTtcclxuICAgICAgICAgIHpjW2otLV0gPSB4bG8gJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgemNbal0gPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgICsrZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB6Yy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgemMsIGUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG5lZ2F0ZWQsXHJcbiAgICAgKiBpLmUuIG11bHRpcGxpZWQgYnkgLTEuXHJcbiAgICAgKi9cclxuICAgIFAubmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICB4LnMgPSAteC5zIHx8IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICsgMCA9IG5cclxuICAgICAqICBuICsgTiA9IE5cclxuICAgICAqICBuICsgSSA9IElcclxuICAgICAqICAwICsgbiA9IG5cclxuICAgICAqICAwICsgMCA9IDBcclxuICAgICAqICAwICsgTiA9IE5cclxuICAgICAqICAwICsgSSA9IElcclxuICAgICAqICBOICsgbiA9IE5cclxuICAgICAqICBOICsgMCA9IE5cclxuICAgICAqICBOICsgTiA9IE5cclxuICAgICAqICBOICsgSSA9IE5cclxuICAgICAqICBJICsgbiA9IElcclxuICAgICAqICBJICsgMCA9IElcclxuICAgICAqICBJICsgTiA9IE5cclxuICAgICAqICBJICsgSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBwbHVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLnBsdXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoYSAvIDApO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkgcmV0dXJuIHljWzBdID8geSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDogYSAqIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcbiAgICAgICAgaWYgKGEgPiAwKSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgICBmb3IgKDsgYS0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhID0geGMubGVuZ3RoO1xyXG4gICAgICBiID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gUG9pbnQgeGMgdG8gdGhlIGxvbmdlciBhcnJheSwgYW5kIGIgdG8gdGhlIHNob3J0ZXIgbGVuZ3RoLlxyXG4gICAgICBpZiAoYSAtIGIgPCAwKSB7XHJcbiAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIHljID0geGM7XHJcbiAgICAgICAgeGMgPSB0O1xyXG4gICAgICAgIGIgPSBhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBPbmx5IHN0YXJ0IGFkZGluZyBhdCB5Yy5sZW5ndGggLSAxIGFzIHRoZSBmdXJ0aGVyIGRpZ2l0cyBvZiB4YyBjYW4gYmUgaWdub3JlZC5cclxuICAgICAgZm9yIChhID0gMDsgYjspIHtcclxuICAgICAgICBhID0gKHhjWy0tYl0gPSB4Y1tiXSArIHljW2JdICsgYSkgLyBCQVNFIHwgMDtcclxuICAgICAgICB4Y1tiXSA9IEJBU0UgPT09IHhjW2JdID8gMCA6IHhjW2JdICUgQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICB4YyA9IFthXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICsreWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHplcm8sIGFzICt4ICsgK3kgIT0gMCAmJiAteCArIC15ICE9IDBcclxuICAgICAgLy8geWUgPSBNQVhfRVhQICsgMSBwb3NzaWJsZVxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgc2QgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mXHJcbiAgICAgKiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICogSWYgc2QgaXMgdHJ1ZSBpbmNsdWRlIGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgY291bnQuXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBzZCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIHNkIHtudW1iZXJ8Ym9vbGVhbn0gbnVtYmVyOiBzaWduaWZpY2FudCBkaWdpdHM6IGludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbjogd2hldGhlciB0byBjb3VudCBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3M6IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoc2QgIT0gbnVsbCAmJiBzZCAhPT0gISFzZCkge1xyXG4gICAgICAgIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBzZCwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIHYgPSBjLmxlbmd0aCAtIDE7XHJcbiAgICAgIG4gPSB2ICogTE9HX0JBU0UgKyAxO1xyXG5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSB7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBuKyspO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2QgJiYgeC5lICsgMSA+IG4pIG4gPSB4LmUgKyAxO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgc2hpZnRlZCBieSBrIHBsYWNlc1xyXG4gICAgICogKHBvd2VycyBvZiAxMCkuIFNoaWZ0IHRvIHRoZSByaWdodCBpZiBuID4gMCwgYW5kIHRvIHRoZSBsZWZ0IGlmIG4gPCAwLlxyXG4gICAgICpcclxuICAgICAqIGsge251bWJlcn0gSW50ZWdlciwgLU1BWF9TQUZFX0lOVEVHRVIgdG8gTUFYX1NBRkVfSU5URUdFUiBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtrfSdcclxuICAgICAqL1xyXG4gICAgUC5zaGlmdGVkQnkgPSBmdW5jdGlvbiAoaykge1xyXG4gICAgICBpbnRDaGVjayhrLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVzKCcxZScgKyBrKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgc3FydCgtbikgPSAgTlxyXG4gICAgICogIHNxcnQoTikgPSAgTlxyXG4gICAgICogIHNxcnQoLUkpID0gIE5cclxuICAgICAqICBzcXJ0KEkpID0gIElcclxuICAgICAqICBzcXJ0KDApID0gIDBcclxuICAgICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLFxyXG4gICAgICogcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuc3F1YXJlUm9vdCA9IFAuc3FydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIG0sIG4sIHIsIHJlcCwgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBjID0geC5jLFxyXG4gICAgICAgIHMgPSB4LnMsXHJcbiAgICAgICAgZSA9IHguZSxcclxuICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTICsgNCxcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcignMC41Jyk7XHJcblxyXG4gICAgICAvLyBOZWdhdGl2ZS9OYU4vSW5maW5pdHkvemVybz9cclxuICAgICAgaWYgKHMgIT09IDEgfHwgIWMgfHwgIWNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcighcyB8fCBzIDwgMCAmJiAoIWMgfHwgY1swXSkgPyBOYU4gOiBjID8geCA6IDEgLyAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgICAgcyA9IE1hdGguc3FydCgrdmFsdWVPZih4KSk7XHJcblxyXG4gICAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93P1xyXG4gICAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgICBpZiAocyA9PSAwIHx8IHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gY29lZmZUb1N0cmluZyhjKTtcclxuICAgICAgICBpZiAoKG4ubGVuZ3RoICsgZSkgJSAyID09IDApIG4gKz0gJzAnO1xyXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoK24pO1xyXG4gICAgICAgIGUgPSBiaXRGbG9vcigoZSArIDEpIC8gMikgLSAoZSA8IDAgfHwgZSAlIDIpO1xyXG5cclxuICAgICAgICBpZiAocyA9PSAxIC8gMCkge1xyXG4gICAgICAgICAgbiA9ICc1ZScgKyBlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7XHJcbiAgICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKHMgKyAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciB6ZXJvLlxyXG4gICAgICAvLyByIGNvdWxkIGJlIHplcm8gaWYgTUlOX0VYUCBpcyBjaGFuZ2VkIGFmdGVyIHRoZSB0aGlzIHZhbHVlIHdhcyBjcmVhdGVkLlxyXG4gICAgICAvLyBUaGlzIHdvdWxkIGNhdXNlIGEgZGl2aXNpb24gYnkgemVybyAoeC90KSBhbmQgaGVuY2UgSW5maW5pdHkgYmVsb3csIHdoaWNoIHdvdWxkIGNhdXNlXHJcbiAgICAgIC8vIGNvZWZmVG9TdHJpbmcgdG8gdGhyb3cuXHJcbiAgICAgIGlmIChyLmNbMF0pIHtcclxuICAgICAgICBlID0gci5lO1xyXG4gICAgICAgIHMgPSBlICsgZHA7XHJcbiAgICAgICAgaWYgKHMgPCAzKSBzID0gMDtcclxuXHJcbiAgICAgICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgICAgIGZvciAoOyA7KSB7XHJcbiAgICAgICAgICB0ID0gcjtcclxuICAgICAgICAgIHIgPSBoYWxmLnRpbWVzKHQucGx1cyhkaXYoeCwgdCwgZHAsIDEpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvZWZmVG9TdHJpbmcodC5jKS5zbGljZSgwLCBzKSA9PT0gKG4gPSBjb2VmZlRvU3RyaW5nKHIuYykpLnNsaWNlKDAsIHMpKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZXhwb25lbnQgb2YgciBtYXkgaGVyZSBiZSBvbmUgbGVzcyB0aGFuIHRoZSBmaW5hbCByZXN1bHQgZXhwb25lbnQsXHJcbiAgICAgICAgICAgIC8vIGUuZyAwLjAwMDk5OTkgKGUtNCkgLS0+IDAuMDAxIChlLTMpLCBzbyBhZGp1c3QgcyBzbyB0aGUgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSBpbmRleGVkIGNvcnJlY3RseS5cclxuICAgICAgICAgICAgaWYgKHIuZSA8IGUpIC0tcztcclxuICAgICAgICAgICAgbiA9IG4uc2xpY2UocyAtIDMsIHMgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgOTk5OSBvciA0OTk5IChpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnkpIGNvbnRpbnVlIHRoZVxyXG4gICAgICAgICAgICAvLyBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZVxyXG4gICAgICAgICAgICAgIC8vIGV4YWN0IHJlc3VsdCBhcyB0aGUgbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgICAgICByb3VuZCh0LCB0LmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHIgPSB0O1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRwICs9IDQ7XHJcbiAgICAgICAgICAgICAgcyArPSA0O1xyXG4gICAgICAgICAgICAgIHJlcCA9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBleGFjdFxyXG4gICAgICAgICAgICAgIC8vIHJlc3VsdC4gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgICAgICBpZiAoIStuIHx8ICErbi5zbGljZSgxKSAmJiBuLmNoYXJBdCgwKSA9PSAnNScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDEpO1xyXG4gICAgICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDEsIFJPVU5ESU5HX01PREUsIG0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFuZFxyXG4gICAgICogcm91bmRlZCB1c2luZyBST1VORElOR19NT0RFIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0V4cG9uZW50aWFsID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwKys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0sIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kaW5nXHJcbiAgICAgKiB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTogYXMgd2l0aCBKYXZhU2NyaXB0J3MgbnVtYmVyIHR5cGUsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsXHJcbiAgICAgKiBidXQgZS5nLiAoLTAuMDAwMDEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GaXhlZCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCA9IGRwICsgdGhpcy5lICsgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRlZFxyXG4gICAgICogdXNpbmcgcm0gb3IgUk9VTkRJTkdfTU9ERSB0byBkcCBkZWNpbWFsIHBsYWNlcywgYW5kIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHByb3BlcnRpZXNcclxuICAgICAqIG9mIHRoZSBmb3JtYXQgb3IgRk9STUFUIG9iamVjdCAoc2VlIEJpZ051bWJlci5zZXQpLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmb3JtYXR0aW5nIG9iamVjdCBtYXkgY29udGFpbiBzb21lIG9yIGFsbCBvZiB0aGUgcHJvcGVydGllcyBzaG93biBiZWxvdy5cclxuICAgICAqXHJcbiAgICAgKiBGT1JNQVQgPSB7XHJcbiAgICAgKiAgIHByZWZpeDogJycsXHJcbiAgICAgKiAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAqICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICogICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICogICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICogICBzdWZmaXg6ICcnXHJcbiAgICAgKiB9O1xyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqIFtmb3JtYXRdIHtvYmplY3R9IEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlIEZPUk1BVCBwYmplY3QgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQgbm90IGFuIG9iamVjdDoge2Zvcm1hdH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9Gb3JtYXQgPSBmdW5jdGlvbiAoZHAsIHJtLCBmb3JtYXQpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChkcCAhPSBudWxsICYmIHJtICYmIHR5cGVvZiBybSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gcm07XHJcbiAgICAgICAgICBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkcCAmJiB0eXBlb2YgZHAgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IGRwO1xyXG4gICAgICAgICAgZHAgPSBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEZPUk1BVDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZvcm1hdCAhPSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgbm90IGFuIG9iamVjdDogJyArIGZvcm1hdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IHgudG9GaXhlZChkcCwgcm0pO1xyXG5cclxuICAgICAgaWYgKHguYykge1xyXG4gICAgICAgIHZhciBpLFxyXG4gICAgICAgICAgYXJyID0gc3RyLnNwbGl0KCcuJyksXHJcbiAgICAgICAgICBnMSA9ICtmb3JtYXQuZ3JvdXBTaXplLFxyXG4gICAgICAgICAgZzIgPSArZm9ybWF0LnNlY29uZGFyeUdyb3VwU2l6ZSxcclxuICAgICAgICAgIGdyb3VwU2VwYXJhdG9yID0gZm9ybWF0Lmdyb3VwU2VwYXJhdG9yIHx8ICcnLFxyXG4gICAgICAgICAgaW50UGFydCA9IGFyclswXSxcclxuICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGFyclsxXSxcclxuICAgICAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgICAgIGludERpZ2l0cyA9IGlzTmVnID8gaW50UGFydC5zbGljZSgxKSA6IGludFBhcnQsXHJcbiAgICAgICAgICBsZW4gPSBpbnREaWdpdHMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoZzIpIHtcclxuICAgICAgICAgIGkgPSBnMTtcclxuICAgICAgICAgIGcxID0gZzI7XHJcbiAgICAgICAgICBnMiA9IGk7XHJcbiAgICAgICAgICBsZW4gLT0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChnMSA+IDAgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgaSA9IGxlbiAlIGcxIHx8IGcxO1xyXG4gICAgICAgICAgaW50UGFydCA9IGludERpZ2l0cy5zdWJzdHIoMCwgaSk7XHJcbiAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSArPSBnMSkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zdWJzdHIoaSwgZzEpO1xyXG4gICAgICAgICAgaWYgKGcyID4gMCkgaW50UGFydCArPSBncm91cFNlcGFyYXRvciArIGludERpZ2l0cy5zbGljZShpKTtcclxuICAgICAgICAgIGlmIChpc05lZykgaW50UGFydCA9ICctJyArIGludFBhcnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBmcmFjdGlvblBhcnRcclxuICAgICAgICAgPyBpbnRQYXJ0ICsgKGZvcm1hdC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcnKSArICgoZzIgPSArZm9ybWF0LmZyYWN0aW9uR3JvdXBTaXplKVxyXG4gICAgICAgICAgPyBmcmFjdGlvblBhcnQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcZHsnICsgZzIgKyAnfVxcXFxCJywgJ2cnKSxcclxuICAgICAgICAgICAnJCYnICsgKGZvcm1hdC5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHx8ICcnKSlcclxuICAgICAgICAgIDogZnJhY3Rpb25QYXJ0KVxyXG4gICAgICAgICA6IGludFBhcnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoZm9ybWF0LnByZWZpeCB8fCAnJykgKyBzdHIgKyAoZm9ybWF0LnN1ZmZpeCB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHR3byBCaWdOdW1iZXJzIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgYXMgYSBzaW1wbGVcclxuICAgICAqIGZyYWN0aW9uIHdpdGggYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkXHJcbiAgICAgKiBtYXhpbXVtIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmVcclxuICAgICAqIHRoZSBsb3dlc3QgdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICAgKlxyXG4gICAgICogW21kXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEludGVnZXIgPj0gMSwgb3IgSW5maW5pdHkuIFRoZSBtYXhpbXVtIGRlbm9taW5hdG9yLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfSA6IHttZH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtZCkge1xyXG4gICAgICB2YXIgZCwgZDAsIGQxLCBkMiwgZSwgZXhwLCBuLCBuMCwgbjEsIHEsIHIsIHMsXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgeGMgPSB4LmM7XHJcblxyXG4gICAgICBpZiAobWQgIT0gbnVsbCkge1xyXG4gICAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKG1kKTtcclxuXHJcbiAgICAgICAgLy8gVGhyb3cgaWYgbWQgaXMgbGVzcyB0aGFuIG9uZSBvciBpcyBub3QgYW4gaW50ZWdlciwgdW5sZXNzIGl0IGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICghbi5pc0ludGVnZXIoKSAmJiAobi5jIHx8IG4ucyAhPT0gMSkgfHwgbi5sdChPTkUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgJyArXHJcbiAgICAgICAgICAgICAgKG4uaXNJbnRlZ2VyKCkgPyAnb3V0IG9mIHJhbmdlOiAnIDogJ25vdCBhbiBpbnRlZ2VyOiAnKSArIHZhbHVlT2YobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF4YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XHJcblxyXG4gICAgICBkID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBuMSA9IGQwID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBkMSA9IG4wID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG4gICAgICBzID0gY29lZmZUb1N0cmluZyh4Yyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkZW5vbWluYXRvci5cclxuICAgICAgLy8gZCBpcyBhIHBvd2VyIG9mIDEwIGFuZCB0aGUgbWluaW11bSBtYXggZGVub21pbmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIGV4YWN0bHkuXHJcbiAgICAgIGUgPSBkLmUgPSBzLmxlbmd0aCAtIHguZSAtIDE7XHJcbiAgICAgIGQuY1swXSA9IFBPV1NfVEVOWyhleHAgPSBlICUgTE9HX0JBU0UpIDwgMCA/IExPR19CQVNFICsgZXhwIDogZXhwXTtcclxuICAgICAgbWQgPSAhbWQgfHwgbi5jb21wYXJlZFRvKGQpID4gMCA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG5cclxuICAgICAgZXhwID0gTUFYX0VYUDtcclxuICAgICAgTUFYX0VYUCA9IDEgLyAwO1xyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihzKTtcclxuXHJcbiAgICAgIC8vIG4wID0gZDEgPSAwXHJcbiAgICAgIG4wLmNbMF0gPSAwO1xyXG5cclxuICAgICAgZm9yICg7IDspICB7XHJcbiAgICAgICAgcSA9IGRpdihuLCBkLCAwLCAxKTtcclxuICAgICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICAgIGlmIChkMi5jb21wYXJlZFRvKG1kKSA9PSAxKSBicmVhaztcclxuICAgICAgICBkMCA9IGQxO1xyXG4gICAgICAgIGQxID0gZDI7XHJcbiAgICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIgPSBuMSkpO1xyXG4gICAgICAgIG4wID0gZDI7XHJcbiAgICAgICAgZCA9IG4ubWludXMocS50aW1lcyhkMiA9IGQpKTtcclxuICAgICAgICBuID0gZDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGQyID0gZGl2KG1kLm1pbnVzKGQwKSwgZDEsIDAsIDEpO1xyXG4gICAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgICAgZDAgPSBkMC5wbHVzKGQyLnRpbWVzKGQxKSk7XHJcbiAgICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG4gICAgICBlID0gZSAqIDI7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggZnJhY3Rpb24gaXMgY2xvc2VyIHRvIHgsIG4wL2QwIG9yIG4xL2QxXHJcbiAgICAgIHIgPSBkaXYobjEsIGQxLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKS5jb21wYXJlZFRvKFxyXG4gICAgICAgICAgZGl2KG4wLCBkMCwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkpIDwgMSA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgICBNQVhfRVhQID0gZXhwO1xyXG5cclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAgICovXHJcbiAgICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gK3ZhbHVlT2YodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgcm91bmRlZCB0byBzZCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0gb3IgUk9VTkRJTkdfTU9ERS4gSWYgc2QgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzXHJcbiAgICAgKiBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLCB0aGVuIHVzZVxyXG4gICAgICogZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgaWYgKHNkICE9IG51bGwpIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIHNkLCBybSwgMik7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gYmFzZSBiLCBvciBiYXNlIDEwIGlmIGIgaXNcclxuICAgICAqIG9taXR0ZWQuIElmIGEgYmFzZSBpcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBiYXNlIDEwLCByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kXHJcbiAgICAgKiBST1VORElOR19NT0RFLiBJZiBhIGJhc2UgaXMgbm90IHNwZWNpZmllZCwgYW5kIHRoaXMgQmlnTnVtYmVyIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICAgKiB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBUT19FWFBfUE9TLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhblxyXG4gICAgICogVE9fRVhQX05FRywgcmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtiXSB7bnVtYmVyfSBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEJhc2Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2J9J1xyXG4gICAgICovXHJcbiAgICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKGIpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICBuID0gdGhpcyxcclxuICAgICAgICBzID0gbi5zLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eSBvciBOYU4/XHJcbiAgICAgIGlmIChlID09PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHMpIHtcclxuICAgICAgICAgIHN0ciA9ICdJbmZpbml0eSc7XHJcbiAgICAgICAgICBpZiAocyA8IDApIHN0ciA9ICctJyArIHN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RyID0gJ05hTic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChiID09IG51bGwpIHtcclxuICAgICAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICAgICA/IHRvRXhwb25lbnRpYWwoY29lZmZUb1N0cmluZyhuLmMpLCBlKVxyXG4gICAgICAgICAgIDogdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IDEwICYmIGFscGhhYmV0SGFzTm9ybWFsRGVjaW1hbERpZ2l0cykge1xyXG4gICAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIERFQ0lNQUxfUExBQ0VTICsgZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgbi5lLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcbiAgICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZSh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpLCAxMCwgYiwgcywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocyA8IDAgJiYgbi5jWzBdKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFzIHRvU3RyaW5nLCBidXQgZG8gbm90IGFjY2VwdCBhIGJhc2UgYXJndW1lbnQsIGFuZCBpbmNsdWRlIHRoZSBtaW51cyBzaWduIGZvclxyXG4gICAgICogbmVnYXRpdmUgemVyby5cclxuICAgICAqL1xyXG4gICAgUC52YWx1ZU9mID0gUC50b0pTT04gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgUC5faXNCaWdOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb25maWdPYmplY3QgIT0gbnVsbCkgQmlnTnVtYmVyLnNldChjb25maWdPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBCaWdOdW1iZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUFJJVkFURSBIRUxQRVIgRlVOQ1RJT05TXHJcblxyXG4gIC8vIFRoZXNlIGZ1bmN0aW9ucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2YXJpYWJsZXMsXHJcbiAgLy8gZS5nLiBERUNJTUFMX1BMQUNFUywgaW4gdGhlIHNjb3BlIG9mIHRoZSBgY2xvbmVgIGZ1bmN0aW9uIGFib3ZlLlxyXG5cclxuXHJcbiAgZnVuY3Rpb24gYml0Rmxvb3Iobikge1xyXG4gICAgdmFyIGkgPSBuIHwgMDtcclxuICAgIHJldHVybiBuID4gMCB8fCBuID09PSBpID8gaSA6IGkgLSAxO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFJldHVybiBhIGNvZWZmaWNpZW50IGFycmF5IGFzIGEgc3RyaW5nIG9mIGJhc2UgMTAgZGlnaXRzLlxyXG4gIGZ1bmN0aW9uIGNvZWZmVG9TdHJpbmcoYSkge1xyXG4gICAgdmFyIHMsIHosXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBqID0gYS5sZW5ndGgsXHJcbiAgICAgIHIgPSBhWzBdICsgJyc7XHJcblxyXG4gICAgZm9yICg7IGkgPCBqOykge1xyXG4gICAgICBzID0gYVtpKytdICsgJyc7XHJcbiAgICAgIHogPSBMT0dfQkFTRSAtIHMubGVuZ3RoO1xyXG4gICAgICBmb3IgKDsgei0tOyBzID0gJzAnICsgcyk7XHJcbiAgICAgIHIgKz0gcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGogPSByLmxlbmd0aDsgci5jaGFyQ29kZUF0KC0taikgPT09IDQ4Oyk7XHJcblxyXG4gICAgcmV0dXJuIHIuc2xpY2UoMCwgaiArIDEgfHwgMSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ29tcGFyZSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVycyB4IGFuZCB5LlxyXG4gIGZ1bmN0aW9uIGNvbXBhcmUoeCwgeSkge1xyXG4gICAgdmFyIGEsIGIsXHJcbiAgICAgIHhjID0geC5jLFxyXG4gICAgICB5YyA9IHkuYyxcclxuICAgICAgaSA9IHgucyxcclxuICAgICAgaiA9IHkucyxcclxuICAgICAgayA9IHguZSxcclxuICAgICAgbCA9IHkuZTtcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgaWYgKCFpIHx8ICFqKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBhID0geGMgJiYgIXhjWzBdO1xyXG4gICAgYiA9IHljICYmICF5Y1swXTtcclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmIChhIHx8IGIpIHJldHVybiBhID8gYiA/IDAgOiAtaiA6IGk7XHJcblxyXG4gICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgaWYgKGkgIT0gaikgcmV0dXJuIGk7XHJcblxyXG4gICAgYSA9IGkgPCAwO1xyXG4gICAgYiA9IGsgPT0gbDtcclxuXHJcbiAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIGIgPyAwIDogIXhjIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGV4cG9uZW50cy5cclxuICAgIGlmICghYikgcmV0dXJuIGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICBqID0gKGsgPSB4Yy5sZW5ndGgpIDwgKGwgPSB5Yy5sZW5ndGgpID8gayA6IGw7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBkaWdpdCBieSBkaWdpdC5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIGlmICh4Y1tpXSAhPSB5Y1tpXSkgcmV0dXJuIHhjW2ldID4geWNbaV0gXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiBrID09IGwgPyAwIDogayA+IGwgXiBhID8gMSA6IC0xO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgdGhhdCBuIGlzIGEgcHJpbWl0aXZlIG51bWJlciwgYW4gaW50ZWdlciwgYW5kIGluIHJhbmdlLCBvdGhlcndpc2UgdGhyb3cuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50Q2hlY2sobiwgbWluLCBtYXgsIG5hbWUpIHtcclxuICAgIGlmIChuIDwgbWluIHx8IG4gPiBtYXggfHwgbiAhPT0gbWF0aGZsb29yKG4pKSB7XHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAobmFtZSB8fCAnQXJndW1lbnQnKSArICh0eXBlb2YgbiA9PSAnbnVtYmVyJ1xyXG4gICAgICAgICA/IG4gPCBtaW4gfHwgbiA+IG1heCA/ICcgb3V0IG9mIHJhbmdlOiAnIDogJyBub3QgYW4gaW50ZWdlcjogJ1xyXG4gICAgICAgICA6ICcgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogJykgKyBTdHJpbmcobikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFzc3VtZXMgZmluaXRlIG4uXHJcbiAgZnVuY3Rpb24gaXNPZGQobikge1xyXG4gICAgdmFyIGsgPSBuLmMubGVuZ3RoIC0gMTtcclxuICAgIHJldHVybiBiaXRGbG9vcihuLmUgLyBMT0dfQkFTRSkgPT0gayAmJiBuLmNba10gJSAyICE9IDA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9FeHBvbmVudGlhbChzdHIsIGUpIHtcclxuICAgIHJldHVybiAoc3RyLmxlbmd0aCA+IDEgPyBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpIDogc3RyKSArXHJcbiAgICAgKGUgPCAwID8gJ2UnIDogJ2UrJykgKyBlO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRml4ZWRQb2ludChzdHIsIGUsIHopIHtcclxuICAgIHZhciBsZW4sIHpzO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlIGV4cG9uZW50P1xyXG4gICAgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zLlxyXG4gICAgICBmb3IgKHpzID0geiArICcuJzsgKytlOyB6cyArPSB6KTtcclxuICAgICAgc3RyID0genMgKyBzdHI7XHJcblxyXG4gICAgLy8gUG9zaXRpdmUgZXhwb25lbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MuXHJcbiAgICAgIGlmICgrK2UgPiBsZW4pIHtcclxuICAgICAgICBmb3IgKHpzID0geiwgZSAtPSBsZW47IC0tZTsgenMgKz0geik7XHJcbiAgICAgICAgc3RyICs9IHpzO1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBsZW4pIHtcclxuICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgZSkgKyAnLicgKyBzdHIuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEVYUE9SVFxyXG5cclxuXHJcbiAgQmlnTnVtYmVyID0gY2xvbmUoKTtcclxuICBCaWdOdW1iZXJbJ2RlZmF1bHQnXSA9IEJpZ051bWJlci5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEFNRC5cclxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7IHJldHVybiBCaWdOdW1iZXI7IH0pO1xyXG5cclxuICAvLyBOb2RlLmpzIGFuZCBvdGhlciBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLlxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEJyb3dzZXIuXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7XHJcbiAgICAgIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGdsb2JhbE9iamVjdC5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcbiAgfVxyXG59KSh0aGlzKTtcclxuIiwKICAgICJ2YXIgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG5cbi8qXG4gICAganNvbjIuanNcbiAgICAyMDEzLTA1LTI2XG5cbiAgICBQdWJsaWMgRG9tYWluLlxuXG4gICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLlxuXG4gICAgU2VlIGh0dHA6Ly93d3cuSlNPTi5vcmcvanMuaHRtbFxuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0cmluZ2lmeVxuICAgIGFuZCBwYXJzZS5cblxuICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKVxuICAgICAgICAgICAgdmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LlxuXG4gICAgICAgICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVjdHMuIEl0IGNhbiBiZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuXG4gICAgICAgICAgICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2lsbFxuICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVhY2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLiBJZiBpdCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXFx0JyBvciAnJm5ic3A7JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxldmVsLlxuXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9tIGEgSmF2YVNjcmlwdCB2YWx1ZS5cblxuICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgZm91bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT05cbiAgICAgICAgICAgIG1ldGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2lsbCBiZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBzZXJpYWxpemU6IGl0IHJldHVybnMgdGhlXG4gICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgbmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsXG4gICAgICAgICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRvSlNPTiBtZXRob2RcbiAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZVxuICAgICAgICAgICAgYm91bmQgdG8gdGhlIHZhbHVlXG5cbiAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy5cblxuICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAgICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgpKSAgICAgICsgJ1QnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygpKSAgICsgJ1onO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUgcGFzc2VkIHRoZVxuICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nXG4gICAgICAgICAgICBvYmplY3QuIFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2lsbCBiZVxuICAgICAgICAgICAgc2VyaWFsaXplZC4gSWYgeW91ciBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhlIG1lbWJlciB3aWxsXG4gICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0aW9uLlxuXG4gICAgICAgICAgICBJZiB0aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gaXQgd2lsbCBiZVxuICAgICAgICAgICAgdXNlZCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc2VyaWFsaXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0c1xuICAgICAgICAgICAgc3VjaCB0aGF0IG9ubHkgbWVtYmVycyB3aXRoIGtleXMgbGlzdGVkIGluIHRoZSByZXBsYWNlciBhcnJheSBhcmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBWYWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBKU09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmluZWQgb3JcbiAgICAgICAgICAgIGZ1bmN0aW9ucywgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gU3VjaCB2YWx1ZXMgaW4gb2JqZWN0cyB3aWxsIGJlXG4gICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJheXMgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2VcbiAgICAgICAgICAgIGEgcmVwbGFjZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aG9zZSB3aXRoIEpTT04gdmFsdWVzLlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKSByZXR1cm5zIHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBhIHN0cmluZ2lmaWNhdGlvbiBvZiB0aGVcbiAgICAgICAgICAgIHZhbHVlIHRoYXQgaXMgZmlsbGVkIHdpdGggbGluZSBicmVha3MgYW5kIGluZGVudGF0aW9uIHRvIG1ha2UgaXRcbiAgICAgICAgICAgIGVhc2llciB0byByZWFkLlxuXG4gICAgICAgICAgICBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgdGhlbiB0aGF0IHN0cmluZyB3aWxsXG4gICAgICAgICAgICBiZSB1c2VkIGZvciBpbmRlbnRhdGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgdGhlblxuICAgICAgICAgICAgdGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiZVwiLHtcInBsdXJpYnVzXCI6XCJ1bnVtXCJ9XSdcblxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1xcdCcpO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1xcblxcdFwiZVwiLFxcblxcdHtcXG5cXHRcXHRcInBsdXJpYnVzXCI6IFwidW51bVwiXFxuXFx0fVxcbl0nXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbbmV3IERhdGUoKV0sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgP1xuICAgICAgICAgICAgICAgICAgICAnRGF0ZSgnICsgdGhpc1trZXldICsgJyknIDogdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcIkRhdGUoLS0tY3VycmVudCB0aW1lLS0tKVwiXSdcblxuXG4gICAgICAgIEpTT04ucGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSgnW1wiRGF0ZSgwOS8wOS8yMDAxKVwiXScsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIDUpID09PSAnRGF0ZSgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgtMSkgPT09ICcpJykge1xuICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUodmFsdWUuc2xpY2UoNSwgLTEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJlIGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvclxuICAgIHJlZGlzdHJpYnV0ZS5cbiovXG5cbi8qanNsaW50IGV2aWw6IHRydWUsIHJlZ2V4cDogdHJ1ZSAqL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXGJcIiwgXCJcXHRcIiwgXCJcXG5cIiwgXCJcXGZcIiwgXCJcXHJcIiwgXCJcXFwiXCIsIEpTT04sIFwiXFxcXFwiLCBhcHBseSxcbiAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVhciwgZ2V0VVRDSG91cnMsXG4gICAgZ2V0VVRDTWludXRlcywgZ2V0VVRDTW9udGgsIGdldFVUQ1NlY29uZHMsIGhhc093blByb3BlcnR5LCBqb2luLFxuICAgIGxhc3RJbmRleCwgbGVuZ3RoLCBwYXJzZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3RyaW5naWZ5LFxuICAgIHRlc3QsIHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVlT2ZcbiovXG5cblxuLy8gQ3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gV2UgY3JlYXRlIHRoZVxuLy8gbWV0aG9kcyBpbiBhIGNsb3N1cmUgdG8gYXZvaWQgY3JlYXRpbmcgZ2xvYmFsIHZhcmlhYmxlcy5cblxudmFyIEpTT04gPSBtb2R1bGUuZXhwb3J0cztcblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuO1xuICAgIH1cblxuICAgIHZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICBnYXAsXG4gICAgICAgIGluZGVudCxcbiAgICAgICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICAgICAnXCInIDogJ1xcXFxcIicsXG4gICAgICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVwO1xuXG5cbiAgICBmdW5jdGlvbiBxdW90ZShzdHJpbmcpIHtcblxuLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbi8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuLy8gc2VxdWVuY2VzLlxuXG4gICAgICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICB2YXIgYyA9IG1ldGFbYV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgICAgOiAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICAgICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHtcblxuLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuXG4gICAgICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLlxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgICAgIHBhcnRpYWwsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldLFxuICAgICAgICAgICAgaXNCaWdOdW1iZXIgPSB2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSBpbnN0YW5jZW9mIEJpZ051bWJlciB8fCBCaWdOdW1iZXIuaXNCaWdOdW1iZXIodmFsdWUpKTtcblxuLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgICAgICB9XG5cbi8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuXG4vLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuXG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGlmIChpc0JpZ051bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdudW1iZXInOlxuXG4vLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cblxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG5cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICBjYXNlICdiaWdpbnQnOlxuXG4vLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4vLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG5cbi8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yXG4vLyBudWxsLlxuXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG5cbi8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRlciBpbiBFQ01BU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0Jyxcbi8vIHNvIHdhdGNoIG91dCBmb3IgdGhhdCBjYXNlLlxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhbiBhcnJheSB0byBob2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVlLlxuXG4gICAgICAgICAgICBnYXAgKz0gaW5kZW50O1xuICAgICAgICAgICAgcGFydGlhbCA9IFtdO1xuXG4vLyBJcyB0aGUgdmFsdWUgYW4gYXJyYXk/XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXG4vLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2UgbnVsbCBhcyBhIHBsYWNlaG9sZGVyXG4vLyBmb3Igbm9uLUpTT04gdmFsdWVzLlxuXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kIHdyYXAgdGhlbSBpblxuLy8gYnJhY2tldHMuXG5cbiAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnW10nXG4gICAgICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJztcbiAgICAgICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcFtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4vLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuXG5cbiAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gJ3t9J1xuICAgICAgICAgICAgICAgIDogZ2FwXG4gICAgICAgICAgICAgICAgPyAne1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICd9J1xuICAgICAgICAgICAgICAgIDogJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICB9XG5cbi8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIHN0cmluZ2lmeSBtZXRob2QsIGdpdmUgaXQgb25lLlxuXG4gICAgaWYgKHR5cGVvZiBKU09OLnN0cmluZ2lmeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBKU09OLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG5cbi8vIFRoZSBzdHJpbmdpZnkgbWV0aG9kIHRha2VzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHJlcGxhY2VyLCBhbmQgYW4gb3B0aW9uYWxcbi8vIHNwYWNlIHBhcmFtZXRlciwgYW5kIHJldHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvblxuLy8gdGhhdCBjYW4gcmVwbGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxsIHNlbGVjdCB0aGUga2V5cy5cbi8vIEEgZGVmYXVsdCByZXBsYWNlciBtZXRob2QgY2FuIGJlIHByb3ZpZGVkLiBVc2Ugb2YgdGhlIHNwYWNlIHBhcmFtZXRlciBjYW5cbi8vIHByb2R1Y2UgdGV4dCB0aGF0IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLlxuXG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGdhcCA9ICcnO1xuICAgICAgICAgICAgaW5kZW50ID0gJyc7XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbi8vIG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGluZGVudCA9IHNwYWNlO1xuICAgICAgICAgICAgfVxuXG4vLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4vLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLlxuXG4gICAgICAgICAgICByZXAgPSByZXBsYWNlcjtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLlxuLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cblxuICAgICAgICAgICAgcmV0dXJuIHN0cignJywgeycnOiB2YWx1ZX0pO1xuICAgICAgICB9O1xuICAgIH1cbn0oKSk7XG4iLAogICAgInZhciBCaWdOdW1iZXIgPSBudWxsO1xuXG4vLyByZWdleHB4cyBleHRyYWN0ZWQgZnJvbVxuLy8gKGMpIEJTRC0zLUNsYXVzZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zhc3RpZnkvc2VjdXJlLWpzb24tcGFyc2UvZ3JhcGhzL2NvbnRyaWJ1dG9ycyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy9ib3VybmUvZ3JhcGhzL2NvbnRyaWJ1dG9yc1xuXG5jb25zdCBzdXNwZWN0UHJvdG9SeCA9IC8oPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpwfFxcXFx1MDA3MCkoPzpyfFxcXFx1MDA3MikoPzpvfFxcXFx1MDA2W0ZmXSkoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkvO1xuY29uc3Qgc3VzcGVjdENvbnN0cnVjdG9yUnggPSAvKD86Y3xcXFxcdTAwNjMpKD86b3xcXFxcdTAwNltGZl0pKD86bnxcXFxcdTAwNltFZV0pKD86c3xcXFxcdTAwNzMpKD86dHxcXFxcdTAwNzQpKD86cnxcXFxcdTAwNzIpKD86dXxcXFxcdTAwNzUpKD86Y3xcXFxcdTAwNjMpKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86cnxcXFxcdTAwNzIpLztcblxuLypcbiAgICBqc29uX3BhcnNlLmpzXG4gICAgMjAxMi0wNi0yMFxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEganNvbl9wYXJzZSBmdW5jdGlvbi5cbiAgICBEdXJpbmcgY3JlYXRlIHlvdSBjYW4gKG9wdGlvbmFsbHkpIHNwZWNpZnkgc29tZSBiZWhhdmlvdXJhbCBzd2l0Y2hlc1xuXG4gICAgICAgIHJlcXVpcmUoJ2pzb24tYmlnaW50Jykob3B0aW9ucylcblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIG9wdGlvbnMgcGFyYW1ldGVyIGhvbGRzIHN3aXRjaGVzIHRoYXQgZHJpdmUgY2VydGFpblxuICAgICAgICAgICAgYXNwZWN0cyBvZiB0aGUgcGFyc2luZyBwcm9jZXNzOlxuICAgICAgICAgICAgKiBvcHRpb25zLnN0cmljdCA9IHRydWUgd2lsbCB3YXJuIGFib3V0IGR1cGxpY2F0ZS1rZXkgdXNhZ2UgaW4gdGhlIGpzb24uXG4gICAgICAgICAgICAgIFRoZSBkZWZhdWx0IChzdHJpY3QgPSBmYWxzZSkgd2lsbCBzaWxlbnRseSBpZ25vcmUgdGhvc2UgYW5kIG92ZXJ3cml0ZVxuICAgICAgICAgICAgICB2YWx1ZXMgZm9yIGtleXMgdGhhdCBhcmUgaW4gZHVwbGljYXRlIHVzZS5cblxuICAgIFRoZSByZXN1bHRpbmcgZnVuY3Rpb24gZm9sbG93cyB0aGlzIHNpZ25hdHVyZTpcbiAgICAgICAganNvbl9wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IGpzb25fcGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG4qL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXFwiXCIsIFwiXFwvXCIsIFwiXFxcXFwiLCBhdCwgYiwgY2FsbCwgY2hhckF0LCBmLCBmcm9tQ2hhckNvZGUsXG4gICAgaGFzT3duUHJvcGVydHksIG1lc3NhZ2UsIG4sIG5hbWUsIHByb3RvdHlwZSwgcHVzaCwgciwgdCwgdGV4dFxuKi9cblxudmFyIGpzb25fcGFyc2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIHBhcnNlIGEgSlNPTiB0ZXh0LCBwcm9kdWNpbmcgYSBKYXZhU2NyaXB0XG4gIC8vIGRhdGEgc3RydWN0dXJlLiBJdCBpcyBhIHNpbXBsZSwgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLiBJdCBkb2VzIG5vdCB1c2VcbiAgLy8gZXZhbCBvciByZWd1bGFyIGV4cHJlc3Npb25zLCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIG1vZGVsIGZvciBpbXBsZW1lbnRpbmdcbiAgLy8gYSBKU09OIHBhcnNlciBpbiBvdGhlciBsYW5ndWFnZXMuXG5cbiAgLy8gV2UgYXJlIGRlZmluaW5nIHRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAvLyBnbG9iYWwgdmFyaWFibGVzLlxuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyBvbmUgY2FuIG92ZXJyaWRlIGJ5IHBhc3Npbmcgb3B0aW9ucyB0byB0aGUgcGFyc2UoKVxuICB2YXIgX29wdGlvbnMgPSB7XG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gbm90IGJlaW5nIHN0cmljdCBtZWFucyBkbyBub3QgZ2VuZXJhdGUgc3ludGF4IGVycm9ycyBmb3IgXCJkdXBsaWNhdGUga2V5XCJcbiAgICBzdG9yZUFzU3RyaW5nOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHN0b3JlZCBhcyBCaWdOdW1iZXIgKGRlZmF1bHQpIG9yIGEgc3RyaW5nXG4gICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciBhbGwgbnVtYmVycyBzaG91bGQgYmUgQmlnXG4gICAgdXNlTmF0aXZlQmlnSW50OiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRvIHVzZSBuYXRpdmUgQmlnSW50IGluc3RlYWQgb2YgYmlnbnVtYmVyLmpzXG4gICAgcHJvdG9BY3Rpb246ICdlcnJvcicsXG4gICAgY29uc3RydWN0b3JBY3Rpb246ICdlcnJvcicsXG4gIH07XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbnMsIHRoZW4gdXNlIHRoZW0gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgX29wdGlvbnNcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0ID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdHJpY3QgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdG9yZUFzU3RyaW5nID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9XG4gICAgICBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPT09IHRydWUgPyBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgOiBmYWxzZTtcbiAgICBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPVxuICAgICAgb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPT09IHRydWUgPyBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA6IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9IG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgY29uc3RydWN0b3JBY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b0FjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMucHJvdG9BY3Rpb24gPSBvcHRpb25zLnByb3RvQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIHByb3RvQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLnByb3RvQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICdcIic6ICdcIicsXG4gICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICcvJzogJy8nLFxuICAgICAgYjogJ1xcYicsXG4gICAgICBmOiAnXFxmJyxcbiAgICAgIG46ICdcXG4nLFxuICAgICAgcjogJ1xccicsXG4gICAgICB0OiAnXFx0JyxcbiAgICB9LFxuICAgIHRleHQsXG4gICAgZXJyb3IgPSBmdW5jdGlvbiAobSkge1xuICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cblxuICAgICAgdGhyb3cge1xuICAgICAgICBuYW1lOiAnU3ludGF4RXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICBhdDogYXQsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICB9O1xuICAgIH0sXG4gICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cblxuICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgZXJyb3IoXCJFeHBlY3RlZCAnXCIgKyBjICsgXCInIGluc3RlYWQgb2YgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTtcbiAgICAgIGF0ICs9IDE7XG4gICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cblxuICAgICAgdmFyIG51bWJlcixcbiAgICAgICAgc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgIHN0cmluZyA9ICctJztcbiAgICAgICAgbmV4dCgnLScpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICBzdHJpbmcgKz0gJy4nO1xuICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICBlcnJvcignQmFkIG51bWJlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEJpZ051bWJlciA9PSBudWxsKSBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcbiAgICAgICAgLy9pZiAobnVtYmVyID4gOTAwNzE5OTI1NDc0MDk5MiB8fCBudW1iZXIgPCAtOTAwNzE5OTI1NDc0MDk5MilcbiAgICAgICAgLy8gQmlnbnVtYmVyIGhhcyBzdHJpY3RlciBjaGVjazogZXZlcnl0aGluZyB3aXRoIGxlbmd0aCA+IDE1IGRpZ2l0cyBkaXNhbGxvd2VkXG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMTUpXG4gICAgICAgICAgcmV0dXJuIF9vcHRpb25zLnN0b3JlQXNTdHJpbmdcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQoc3RyaW5nKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKHN0cmluZyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gIV9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWdcbiAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQobnVtYmVyKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKG51bWJlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cblxuICAgICAgdmFyIGhleCxcbiAgICAgICAgaSxcbiAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgIHVmZmZmO1xuXG4gICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICB2YXIgc3RhcnRBdCA9IGF0O1xuICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQobmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShoZXgpKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVzY2FwZWVbY2hdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgc3RyaW5nJyk7XG4gICAgfSxcbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNraXAgd2hpdGVzcGFjZS5cblxuICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXG5cbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgIG5leHQoJ3InKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG4gICAgdmFsdWUsIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gYXJyYXkgdmFsdWUuXG5cbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgIHJldHVybiBhcnJheTsgLy8gZW1wdHkgYXJyYXlcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgYXJyYXknKTtcbiAgICB9LFxuICAgIG9iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgdmFyIGtleSxcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgbmV4dCgneycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0OyAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBrZXkgPSBzdHJpbmcoKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIG5leHQoJzonKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfb3B0aW9ucy5zdHJpY3QgPT09IHRydWUgJiZcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1c3BlY3RQcm90b1J4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIHByb3RvdHlwZSBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHN1c3BlY3RDb25zdHJ1Y3RvclJ4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIGNvbnN0cnVjdG9yIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgb2JqZWN0Jyk7XG4gICAgfTtcblxuICB2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbiAgICAvLyBvciBhIHdvcmQuXG5cbiAgICB3aGl0ZSgpO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgICBjYXNlICdcIic6XG4gICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuICAvLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxuICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0ZXh0ID0gc291cmNlICsgJyc7XG4gICAgYXQgPSAwO1xuICAgIGNoID0gJyAnO1xuICAgIHJlc3VsdCA9IHZhbHVlKCk7XG4gICAgd2hpdGUoKTtcbiAgICBpZiAoY2gpIHtcbiAgICAgIGVycm9yKCdTeW50YXggZXJyb3InKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7XG4gICAgICAgICAgdmFyIGssXG4gICAgICAgICAgICB2LFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSkoeyAnJzogcmVzdWx0IH0sICcnKVxuICAgICAgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25fcGFyc2U7XG4iLAogICAgInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5HQ0VfTElOVVhfQklPU19QQVRIUyA9IHZvaWQgMDtcbmV4cG9ydHMuaXNHb29nbGVDbG91ZFNlcnZlcmxlc3MgPSBpc0dvb2dsZUNsb3VkU2VydmVybGVzcztcbmV4cG9ydHMuaXNHb29nbGVDb21wdXRlRW5naW5lTGludXggPSBpc0dvb2dsZUNvbXB1dGVFbmdpbmVMaW51eDtcbmV4cG9ydHMuaXNHb29nbGVDb21wdXRlRW5naW5lTUFDQWRkcmVzcyA9IGlzR29vZ2xlQ29tcHV0ZUVuZ2luZU1BQ0FkZHJlc3M7XG5leHBvcnRzLmlzR29vZ2xlQ29tcHV0ZUVuZ2luZSA9IGlzR29vZ2xlQ29tcHV0ZUVuZ2luZTtcbmV4cG9ydHMuZGV0ZWN0R0NQUmVzaWRlbmN5ID0gZGV0ZWN0R0NQUmVzaWRlbmN5O1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG4vKipcbiAqIEtub3duIHBhdGhzIHVuaXF1ZSB0byBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgTGludXggaW5zdGFuY2VzXG4gKi9cbmV4cG9ydHMuR0NFX0xJTlVYX0JJT1NfUEFUSFMgPSB7XG4gICAgQklPU19EQVRFOiAnL3N5cy9jbGFzcy9kbWkvaWQvYmlvc19kYXRlJyxcbiAgICBCSU9TX1ZFTkRPUjogJy9zeXMvY2xhc3MvZG1pL2lkL2Jpb3NfdmVuZG9yJyxcbn07XG5jb25zdCBHQ0VfTUFDX0FERFJFU1NfUkVHRVggPSAvXjQyOjAxLztcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIGEgR29vZ2xlIENsb3VkIFNlcnZlcmxlc3MgZW52aXJvbm1lbnQgKENsb3VkIFJ1biBvciBDbG91ZCBGdW5jdGlvbnMgaW5zdGFuY2UpLlxuICpcbiAqIFVzZXMgdGhlOlxuICogLSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3J1bi9kb2NzL2NvbnRhaW5lci1jb250cmFjdCNlbnYtdmFycyBDbG91ZCBSdW4gZW52aXJvbm1lbnQgdmFyaWFibGVzfS5cbiAqIC0ge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9mdW5jdGlvbnMvZG9jcy9lbnYtdmFyIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudCB2YXJpYWJsZXN9LlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBHQ1Agc2VydmVybGVzcywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzR29vZ2xlQ2xvdWRTZXJ2ZXJsZXNzKCkge1xuICAgIC8qKlxuICAgICAqIGBDTE9VRF9SVU5fSk9CYCBpcyB1c2VkIGZvciBDbG91ZCBSdW4gSm9ic1xuICAgICAqIC0gU2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcnVuL2RvY3MvY29udGFpbmVyLWNvbnRyYWN0I2Vudi12YXJzIENsb3VkIFJ1biBlbnZpcm9ubWVudCB2YXJpYWJsZXN9LlxuICAgICAqXG4gICAgICogYEZVTkNUSU9OX05BTUVgIGlzIHVzZWQgaW4gb2xkZXIgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50czpcbiAgICAgKiAtIFNlZSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Z1bmN0aW9ucy9kb2NzL2Vudi12YXIgUHl0aG9uIDMuNyBhbmQgR28gMS4xMX0uXG4gICAgICpcbiAgICAgKiBgS19TRVJWSUNFYCBpcyB1c2VkIGluIENsb3VkIFJ1biBhbmQgbmV3ZXIgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50czpcbiAgICAgKiAtIFNlZSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3J1bi9kb2NzL2NvbnRhaW5lci1jb250cmFjdCNlbnYtdmFycyBDbG91ZCBSdW4gZW52aXJvbm1lbnQgdmFyaWFibGVzfS5cbiAgICAgKiAtIFNlZSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Z1bmN0aW9ucy9kb2NzL2Vudi12YXIgQ2xvdWQgRnVuY3Rpb25zIG5ld2VyIHJ1bnRpbWVzfS5cbiAgICAgKi9cbiAgICBjb25zdCBpc0dGRW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudi5DTE9VRF9SVU5fSk9CIHx8XG4gICAgICAgIHByb2Nlc3MuZW52LkZVTkNUSU9OX05BTUUgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuS19TRVJWSUNFO1xuICAgIHJldHVybiAhIWlzR0ZFbnZpcm9ubWVudDtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIGEgTGludXggR29vZ2xlIENvbXB1dGUgRW5naW5lIGluc3RhbmNlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBMaW51eCBHQ0UsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBpc0dvb2dsZUNvbXB1dGVFbmdpbmVMaW51eCgpIHtcbiAgICBpZiAoKDAsIG9zXzEucGxhdGZvcm0pKCkgIT09ICdsaW51eCcpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICAvLyBlbnN1cmUgdGhpcyBmaWxlIGV4aXN0XG4gICAgICAgICgwLCBmc18xLnN0YXRTeW5jKShleHBvcnRzLkdDRV9MSU5VWF9CSU9TX1BBVEhTLkJJT1NfREFURSk7XG4gICAgICAgIC8vIGVuc3VyZSB0aGlzIGZpbGUgZXhpc3QgYW5kIG1hdGNoZXNcbiAgICAgICAgY29uc3QgYmlvc1ZlbmRvciA9ICgwLCBmc18xLnJlYWRGaWxlU3luYykoZXhwb3J0cy5HQ0VfTElOVVhfQklPU19QQVRIUy5CSU9TX1ZFTkRPUiwgJ3V0ZjgnKTtcbiAgICAgICAgcmV0dXJuIC9Hb29nbGUvLnRlc3QoYmlvc1ZlbmRvcik7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gYSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgaW5zdGFuY2Ugd2l0aCBhIGtub3duXG4gKiBNQUMgYWRkcmVzcy5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gR0NFIChhcyBkZXRlcm1pbmVkIGJ5IE1BQyBhZGRyZXNzKSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzR29vZ2xlQ29tcHV0ZUVuZ2luZU1BQ0FkZHJlc3MoKSB7XG4gICAgY29uc3QgaW50ZXJmYWNlcyA9ICgwLCBvc18xLm5ldHdvcmtJbnRlcmZhY2VzKSgpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBPYmplY3QudmFsdWVzKGludGVyZmFjZXMpKSB7XG4gICAgICAgIGlmICghaXRlbSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHsgbWFjIH0gb2YgaXRlbSkge1xuICAgICAgICAgICAgaWYgKEdDRV9NQUNfQUREUkVTU19SRUdFWC50ZXN0KG1hYykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBvbiBhIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpbnN0YW5jZS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gR0NFLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNHb29nbGVDb21wdXRlRW5naW5lKCkge1xuICAgIHJldHVybiBpc0dvb2dsZUNvbXB1dGVFbmdpbmVMaW51eCgpIHx8IGlzR29vZ2xlQ29tcHV0ZUVuZ2luZU1BQ0FkZHJlc3MoKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIEdvb2dsZSBDbG91ZCBQbGF0Zm9ybS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgb24gR0NQLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0R0NQUmVzaWRlbmN5KCkge1xuICAgIHJldHVybiBpc0dvb2dsZUNsb3VkU2VydmVybGVzcygpIHx8IGlzR29vZ2xlQ29tcHV0ZUVuZ2luZSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2NwLXJlc2lkZW5jeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjQgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbG91cnMgPSB2b2lkIDA7XG4vKipcbiAqIEhhbmRsZXMgZmlndXJpbmcgb3V0IGlmIHdlIGNhbiB1c2UgQU5TSSBjb2xvdXJzIGFuZCBoYW5kaW5nIG91dCB0aGUgZXNjYXBlIGNvZGVzLlxuICpcbiAqIFRoaXMgaXMgZm9yIHBhY2thZ2UtaW50ZXJuYWwgdXNlIG9ubHksIGFuZCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgQ29sb3VycyB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHN0cmVhbSBUaGUgc3RyZWFtIChlLmcuIHByb2Nlc3Muc3RkZXJyKVxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmVhbSBzaG91bGQgaGF2ZSBjb2xvdXJpemF0aW9uIGVuYWJsZWRcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNFbmFibGVkKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gKHN0cmVhbS5pc1RUWSAmJlxuICAgICAgICAgICAgKHR5cGVvZiBzdHJlYW0uZ2V0Q29sb3JEZXB0aCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gc3RyZWFtLmdldENvbG9yRGVwdGgoKSA+IDJcbiAgICAgICAgICAgICAgICA6IHRydWUpKTtcbiAgICB9XG4gICAgc3RhdGljIHJlZnJlc2goKSB7XG4gICAgICAgIENvbG91cnMuZW5hYmxlZCA9IENvbG91cnMuaXNFbmFibGVkKHByb2Nlc3Muc3RkZXJyKTtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIENvbG91cnMucmVzZXQgPSAnJztcbiAgICAgICAgICAgIENvbG91cnMuYnJpZ2h0ID0gJyc7XG4gICAgICAgICAgICBDb2xvdXJzLmRpbSA9ICcnO1xuICAgICAgICAgICAgQ29sb3Vycy5yZWQgPSAnJztcbiAgICAgICAgICAgIENvbG91cnMuZ3JlZW4gPSAnJztcbiAgICAgICAgICAgIENvbG91cnMueWVsbG93ID0gJyc7XG4gICAgICAgICAgICBDb2xvdXJzLmJsdWUgPSAnJztcbiAgICAgICAgICAgIENvbG91cnMubWFnZW50YSA9ICcnO1xuICAgICAgICAgICAgQ29sb3Vycy5jeWFuID0gJyc7XG4gICAgICAgICAgICBDb2xvdXJzLndoaXRlID0gJyc7XG4gICAgICAgICAgICBDb2xvdXJzLmdyZXkgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIENvbG91cnMucmVzZXQgPSAnXFx1MDAxYlswbSc7XG4gICAgICAgICAgICBDb2xvdXJzLmJyaWdodCA9ICdcXHUwMDFiWzFtJztcbiAgICAgICAgICAgIENvbG91cnMuZGltID0gJ1xcdTAwMWJbMm0nO1xuICAgICAgICAgICAgQ29sb3Vycy5yZWQgPSAnXFx1MDAxYlszMW0nO1xuICAgICAgICAgICAgQ29sb3Vycy5ncmVlbiA9ICdcXHUwMDFiWzMybSc7XG4gICAgICAgICAgICBDb2xvdXJzLnllbGxvdyA9ICdcXHUwMDFiWzMzbSc7XG4gICAgICAgICAgICBDb2xvdXJzLmJsdWUgPSAnXFx1MDAxYlszNG0nO1xuICAgICAgICAgICAgQ29sb3Vycy5tYWdlbnRhID0gJ1xcdTAwMWJbMzVtJztcbiAgICAgICAgICAgIENvbG91cnMuY3lhbiA9ICdcXHUwMDFiWzM2bSc7XG4gICAgICAgICAgICBDb2xvdXJzLndoaXRlID0gJ1xcdTAwMWJbMzdtJztcbiAgICAgICAgICAgIENvbG91cnMuZ3JleSA9ICdcXHUwMDFiWzkwbSc7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkNvbG91cnMgPSBDb2xvdXJzO1xuQ29sb3Vycy5lbmFibGVkID0gZmFsc2U7XG5Db2xvdXJzLnJlc2V0ID0gJyc7XG5Db2xvdXJzLmJyaWdodCA9ICcnO1xuQ29sb3Vycy5kaW0gPSAnJztcbkNvbG91cnMucmVkID0gJyc7XG5Db2xvdXJzLmdyZWVuID0gJyc7XG5Db2xvdXJzLnllbGxvdyA9ICcnO1xuQ29sb3Vycy5ibHVlID0gJyc7XG5Db2xvdXJzLm1hZ2VudGEgPSAnJztcbkNvbG91cnMuY3lhbiA9ICcnO1xuQ29sb3Vycy53aGl0ZSA9ICcnO1xuQ29sb3Vycy5ncmV5ID0gJyc7XG5Db2xvdXJzLnJlZnJlc2goKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbG91cnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxLTIwMjQgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW52ID0gZXhwb3J0cy5EZWJ1Z0xvZ0JhY2tlbmRCYXNlID0gZXhwb3J0cy5wbGFjZWhvbGRlciA9IGV4cG9ydHMuQWRob2NEZWJ1Z0xvZ2dlciA9IGV4cG9ydHMuTG9nU2V2ZXJpdHkgPSB2b2lkIDA7XG5leHBvcnRzLmdldE5vZGVCYWNrZW5kID0gZ2V0Tm9kZUJhY2tlbmQ7XG5leHBvcnRzLmdldERlYnVnQmFja2VuZCA9IGdldERlYnVnQmFja2VuZDtcbmV4cG9ydHMuZ2V0U3RydWN0dXJlZEJhY2tlbmQgPSBnZXRTdHJ1Y3R1cmVkQmFja2VuZDtcbmV4cG9ydHMuc2V0QmFja2VuZCA9IHNldEJhY2tlbmQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmNvbnN0IG5vZGVfZXZlbnRzXzEgPSByZXF1aXJlKFwibm9kZTpldmVudHNcIik7XG5jb25zdCBwcm9jZXNzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJub2RlOnByb2Nlc3NcIikpO1xuY29uc3QgdXRpbCA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwibm9kZTp1dGlsXCIpKTtcbmNvbnN0IGNvbG91cnNfMSA9IHJlcXVpcmUoXCIuL2NvbG91cnNcIik7XG4vLyBTb21lIGZ1bmN0aW9ucyAoYXMgbm90ZWQpIGFyZSBiYXNlZCBvbiB0aGUgTm9kZSBzdGFuZGFyZCBsaWJyYXJ5LCBmcm9tXG4vLyB0aGUgZm9sbG93aW5nIGZpbGU6XG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFpbi9saWIvaW50ZXJuYWwvdXRpbC9kZWJ1Z2xvZy5qc1xuLyoqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIGFkLWhvYyBkZWJ1ZyBsb2dnZXIgZm9yIEdvb2dsZSBDbG91ZCBQbGF0Zm9ybVxuICogY2xpZW50IGxpYnJhcmllcyBpbiBOb2RlLiBBbiBhZC1ob2MgZGVidWcgbG9nZ2VyIGlzIGEgdG9vbCB3aGljaCBsZXRzXG4gKiB1c2VycyB1c2UgYW4gZXh0ZXJuYWwsIHVuaWZpZWQgaW50ZXJmYWNlIChpbiB0aGlzIGNhc2UsIGVudmlyb25tZW50XG4gKiB2YXJpYWJsZXMpIHRvIGRldGVybWluZSB3aGF0IGxvZ2dpbmcgdGhleSB3YW50IHRvIHNlZSBhdCBydW50aW1lLiBUaGlzXG4gKiBpc24ndCBuZWNlc3NhcmlseSBmZWQgaW50byB0aGUgY29uc29sZSwgYnV0IGlzIG1lYW50IHRvIGJlIHVuZGVyIHRoZVxuICogY29udHJvbCBvZiB0aGUgdXNlci4gVGhlIGtpbmQgb2YgbG9nZ2luZyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgYnkgdGhpc1xuICogaXMgbW9yZSBsaWtlIFwiY2FsbCByZXRyeSBoYXBwZW5lZFwiLCBub3QgXCJldmVudCB5b3UnZCB3YW50IHRvIHJlY29yZFxuICogaW4gQ2xvdWQgTG9nZ2VyXCIuXG4gKlxuICogTW9yZSBmb3IgR29vZ2xlcnMgaW1wbGVtZW50aW5nIGxpYnJhcmllcyB3aXRoIGl0OlxuICogZ28vY2xvdWQtY2xpZW50LWxvZ2dpbmctZGVzaWduXG4gKi9cbi8qKlxuICogUG9zc2libGUgbG9nIGxldmVscy4gVGhlc2UgYXJlIGEgc3Vic2V0IG9mIENsb3VkIE9ic2VydmFiaWxpdHkgbGV2ZWxzLlxuICogaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2xvZ2dpbmcvZG9jcy9yZWZlcmVuY2UvdjIvcmVzdC92Mi9Mb2dFbnRyeSNMb2dTZXZlcml0eVxuICovXG52YXIgTG9nU2V2ZXJpdHk7XG4oZnVuY3Rpb24gKExvZ1NldmVyaXR5KSB7XG4gICAgTG9nU2V2ZXJpdHlbXCJERUZBVUxUXCJdID0gXCJERUZBVUxUXCI7XG4gICAgTG9nU2V2ZXJpdHlbXCJERUJVR1wiXSA9IFwiREVCVUdcIjtcbiAgICBMb2dTZXZlcml0eVtcIklORk9cIl0gPSBcIklORk9cIjtcbiAgICBMb2dTZXZlcml0eVtcIldBUk5JTkdcIl0gPSBcIldBUk5JTkdcIjtcbiAgICBMb2dTZXZlcml0eVtcIkVSUk9SXCJdID0gXCJFUlJPUlwiO1xufSkoTG9nU2V2ZXJpdHkgfHwgKGV4cG9ydHMuTG9nU2V2ZXJpdHkgPSBMb2dTZXZlcml0eSA9IHt9KSk7XG4vKipcbiAqIE91ciBsb2dnZXIgaW5zdGFuY2UuIFRoaXMgYWN0dWFsbHkgY29udGFpbnMgdGhlIG1lYXQgb2YgZGVhbGluZ1xuICogd2l0aCBsb2cgbGluZXMsIGluY2x1ZGluZyBFdmVudEVtaXR0ZXIuIFRoaXMgY29udGFpbnMgdGhlIGZ1bmN0aW9uXG4gKiB0aGF0IHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8gdXNlcnMgb2YgdGhlIHBhY2thZ2UuXG4gKi9cbmNsYXNzIEFkaG9jRGVidWdMb2dnZXIgZXh0ZW5kcyBub2RlX2V2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHVwc3RyZWFtIFRoZSBiYWNrZW5kIHdpbGwgcGFzcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZVxuICAgICAqICAgY2FsbGVkIHdoZW5ldmVyIG91ciBsb2dnZXIgZnVuY3Rpb24gaXMgaW52b2tlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lc3BhY2UsIHVwc3RyZWFtKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgICAgICB0aGlzLnVwc3RyZWFtID0gdXBzdHJlYW07XG4gICAgICAgIHRoaXMuZnVuYyA9IE9iamVjdC5hc3NpZ24odGhpcy5pbnZva2UuYmluZCh0aGlzKSwge1xuICAgICAgICAgICAgLy8gQWxzbyBhZGQgYW4gaW5zdGFuY2UgcG9pbnRlciBiYWNrIHRvIHVzLlxuICAgICAgICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICAgICAgICAvLyBBbmQgcHVsbCBvdmVyIHRoZSBFdmVudEVtaXR0ZXIgZnVuY3Rpb25hbGl0eS5cbiAgICAgICAgICAgIG9uOiAoZXZlbnQsIGxpc3RlbmVyKSA9PiB0aGlzLm9uKGV2ZW50LCBsaXN0ZW5lciksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBsb2cgbGV2ZWxzLlxuICAgICAgICB0aGlzLmZ1bmMuZGVidWcgPSAoLi4uYXJncykgPT4gdGhpcy5pbnZva2VTZXZlcml0eShMb2dTZXZlcml0eS5ERUJVRywgLi4uYXJncyk7XG4gICAgICAgIHRoaXMuZnVuYy5pbmZvID0gKC4uLmFyZ3MpID0+IHRoaXMuaW52b2tlU2V2ZXJpdHkoTG9nU2V2ZXJpdHkuSU5GTywgLi4uYXJncyk7XG4gICAgICAgIHRoaXMuZnVuYy53YXJuID0gKC4uLmFyZ3MpID0+IHRoaXMuaW52b2tlU2V2ZXJpdHkoTG9nU2V2ZXJpdHkuV0FSTklORywgLi4uYXJncyk7XG4gICAgICAgIHRoaXMuZnVuYy5lcnJvciA9ICguLi5hcmdzKSA9PiB0aGlzLmludm9rZVNldmVyaXR5KExvZ1NldmVyaXR5LkVSUk9SLCAuLi5hcmdzKTtcbiAgICAgICAgdGhpcy5mdW5jLnN1YmxvZyA9IChuYW1lc3BhY2UpID0+IGxvZyhuYW1lc3BhY2UsIHRoaXMuZnVuYyk7XG4gICAgfVxuICAgIGludm9rZShmaWVsZHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gUHVzaCBvdXQgYW55IHVwc3RyZWFtIGxvZ2dlciBmaXJzdC5cbiAgICAgICAgaWYgKHRoaXMudXBzdHJlYW0pIHtcbiAgICAgICAgICAgIHRoaXMudXBzdHJlYW0oZmllbGRzLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbWl0IHNpbmsgZXZlbnRzLlxuICAgICAgICB0aGlzLmVtaXQoJ2xvZycsIGZpZWxkcywgYXJncyk7XG4gICAgfVxuICAgIGludm9rZVNldmVyaXR5KHNldmVyaXR5LCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuaW52b2tlKHsgc2V2ZXJpdHkgfSwgLi4uYXJncyk7XG4gICAgfVxufVxuZXhwb3J0cy5BZGhvY0RlYnVnTG9nZ2VyID0gQWRob2NEZWJ1Z0xvZ2dlcjtcbi8qKlxuICogVGhpcyBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBhIHJlYWwgbG9nZ2VyIHdoaWxlIHdhaXRpbmcgZm9yIFByb21pc2VzIG9yIGRpc2FibGluZyBsb2dnaW5nLlxuICovXG5leHBvcnRzLnBsYWNlaG9sZGVyID0gbmV3IEFkaG9jRGVidWdMb2dnZXIoJycsICgpID0+IHsgfSkuZnVuYztcbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGRlYnVnIGxvZ2dpbmcgYmFja2VuZHMuIEl0J3MgcG9zc2libGUgdG8gdXNlIHRoaXMsIGJ1dCB0aGVcbiAqIHNhbWUgbm9uLWd1YXJhbnRlZXMgYWJvdmUgc3RpbGwgYXBwbHkgKHVuc3RhYmxlIGludGVyZmFjZSwgZXRjKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIERlYnVnTG9nQmFja2VuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2FjaGVkID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmZpbHRlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIExvb2sgZm9yIHRoZSBOb2RlIGNvbmZpZyB2YXJpYWJsZSBmb3Igd2hhdCBzeXN0ZW1zIHRvIGVuYWJsZS4gV2UnbGwgc3RvcmVcbiAgICAgICAgLy8gdGhlc2UgZm9yIHRoZSBsb2cgbWV0aG9kIGJlbG93LCB3aGljaCB3aWxsIGNhbGwgc2V0RmlsdGVycygpIG9uY2UuXG4gICAgICAgIGxldCBub2RlRmxhZyA9IChfYSA9IHByb2Nlc3MuZW52W2V4cG9ydHMuZW52Lm5vZGVFbmFibGVzXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyonO1xuICAgICAgICBpZiAobm9kZUZsYWcgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICBub2RlRmxhZyA9ICcqJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnMgPSBub2RlRmxhZy5zcGxpdCgnLCcpO1xuICAgIH1cbiAgICBsb2cobmFtZXNwYWNlLCBmaWVsZHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJzU2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBsb2dnZXIgPSB0aGlzLmNhY2hlZC5nZXQobmFtZXNwYWNlKTtcbiAgICAgICAgICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyID0gdGhpcy5tYWtlTG9nZ2VyKG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWQuc2V0KG5hbWVzcGFjZSwgbG9nZ2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlcihmaWVsZHMsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgYWxsIGVycm9yczsgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGludGVyZmVyZSB3aXRoXG4gICAgICAgICAgICAvLyB0aGUgdXNlcidzIHJ1bm5pbmcgYXBwLlxuICAgICAgICAgICAgLy8gZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkRlYnVnTG9nQmFja2VuZEJhc2UgPSBEZWJ1Z0xvZ0JhY2tlbmRCYXNlO1xuLy8gVGhlIGJhc2ljIGJhY2tlbmQuIFRoaXMgb25lIGRlZmluaXRlbHkgd29ya3MsIGJ1dCBpdCdzIGxlc3MgZmVhdHVyZS1maWxsZWQuXG4vL1xuLy8gUmF0aGVyIHRoYW4gdXNpbmcgdXRpbC5kZWJ1Z2xvZywgdGhpcyBpbXBsZW1lbnRzIHRoZSBzYW1lIGJhc2ljIGxvZ2ljIGRpcmVjdGx5LlxuLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBkZWNpc2lvbiBpcyB0aGF0IGRlYnVnbG9nIGNoZWNrcyB0aGUgdmFsdWUgb2YgdGhlXG4vLyBOT0RFX0RFQlVHIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBhbnkgdXNlciBjb2RlIHJ1bnM7IHdlIHRoZXJlZm9yZVxuLy8gY2FuJ3QgcGlwZSBvdXIgb3duIGVuYWJsZXMgaW50byBpdCAoYW5kIHV0aWwuZGVidWdsb2cgd2lsbCBuZXZlciBwcmludCB1bmxlc3Ncbi8vIHRoZSB1c2VyIGR1cGxpY2F0ZXMgaXQgaW50byBOT0RFX0RFQlVHLCB3aGljaCBpc24ndCByZWFzb25hYmxlKS5cbi8vXG5jbGFzcyBOb2RlQmFja2VuZCBleHRlbmRzIERlYnVnTG9nQmFja2VuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyBEZWZhdWx0IHRvIGFsbG93aW5nIGFsbCBzeXN0ZW1zLCBzaW5jZSB3ZSBnYXRlIGVhcmxpZXIgYmFzZWQgb24gd2hldGhlciB0aGVcbiAgICAgICAgLy8gdmFyaWFibGUgaXMgZW1wdHkuXG4gICAgICAgIHRoaXMuZW5hYmxlZFJlZ2V4cCA9IC8uKi9nO1xuICAgIH1cbiAgICBpc0VuYWJsZWQobmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWRSZWdleHAudGVzdChuYW1lc3BhY2UpO1xuICAgIH1cbiAgICBtYWtlTG9nZ2VyKG5hbWVzcGFjZSkge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZFJlZ2V4cC50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7IH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChmaWVsZHMsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIC8vIFRPRE86IGBmaWVsZHNgIG5lZWRzIHRvIGJlIHR1cm5lZCBpbnRvIGEgc3RyaW5nIGhlcmUsIG9uZSB3YXkgb3IgYW5vdGhlci5cbiAgICAgICAgICAgIGNvbnN0IG5zY29sb3VyID0gYCR7Y29sb3Vyc18xLkNvbG91cnMuZ3JlZW59JHtuYW1lc3BhY2V9JHtjb2xvdXJzXzEuQ29sb3Vycy5yZXNldH1gO1xuICAgICAgICAgICAgY29uc3QgcGlkID0gYCR7Y29sb3Vyc18xLkNvbG91cnMueWVsbG93fSR7cHJvY2Vzcy5waWR9JHtjb2xvdXJzXzEuQ29sb3Vycy5yZXNldH1gO1xuICAgICAgICAgICAgbGV0IGxldmVsO1xuICAgICAgICAgICAgc3dpdGNoIChmaWVsZHMuc2V2ZXJpdHkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExvZ1NldmVyaXR5LkVSUk9SOlxuICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGAke2NvbG91cnNfMS5Db2xvdXJzLnJlZH0ke2ZpZWxkcy5zZXZlcml0eX0ke2NvbG91cnNfMS5Db2xvdXJzLnJlc2V0fWA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTG9nU2V2ZXJpdHkuSU5GTzpcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBgJHtjb2xvdXJzXzEuQ29sb3Vycy5tYWdlbnRhfSR7ZmllbGRzLnNldmVyaXR5fSR7Y29sb3Vyc18xLkNvbG91cnMucmVzZXR9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMb2dTZXZlcml0eS5XQVJOSU5HOlxuICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGAke2NvbG91cnNfMS5Db2xvdXJzLnllbGxvd30ke2ZpZWxkcy5zZXZlcml0eX0ke2NvbG91cnNfMS5Db2xvdXJzLnJlc2V0fWA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGxldmVsID0gKF9hID0gZmllbGRzLnNldmVyaXR5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBMb2dTZXZlcml0eS5ERUZBVUxUO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoeyBjb2xvcnM6IGNvbG91cnNfMS5Db2xvdXJzLmVuYWJsZWQgfSwgLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEZpZWxkcyA9IE9iamVjdC5hc3NpZ24oe30sIGZpZWxkcyk7XG4gICAgICAgICAgICBkZWxldGUgZmlsdGVyZWRGaWVsZHMuc2V2ZXJpdHk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNKc29uID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZmlsdGVyZWRGaWVsZHMpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWRGaWVsZHMpXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0NvbG91ciA9IGZpZWxkc0pzb25cbiAgICAgICAgICAgICAgICA/IGAke2NvbG91cnNfMS5Db2xvdXJzLmdyZXl9JHtmaWVsZHNKc29ufSR7Y29sb3Vyc18xLkNvbG91cnMucmVzZXR9YFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCclcyBbJXN8JXNdICVzJXMnLCBwaWQsIG5zY29sb3VyLCBsZXZlbCwgbXNnLCBmaWVsZHNKc29uID8gYCAke2ZpZWxkc0NvbG91cn1gIDogJycpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBSZWdleHAgcGF0dGVybnMgYmVsb3cgYXJlIGZyb20gaGVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9jMGFlYmVkNGIzMzk1YmQ2NWQ1NGIxOGQxZmQwMGYwNzEwMDJhYzIwL2xpYi9pbnRlcm5hbC91dGlsL2RlYnVnbG9nLmpzI0wzNlxuICAgIHNldEZpbHRlcnMoKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsRmlsdGVycyA9IHRoaXMuZmlsdGVycy5qb2luKCcsJyk7XG4gICAgICAgIGNvbnN0IHJlZ2V4cCA9IHRvdGFsRmlsdGVyc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrPy5dL2csICdcXFxcJCYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKi9nLCAnLionKVxuICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJyR8XicpO1xuICAgICAgICB0aGlzLmVuYWJsZWRSZWdleHAgPSBuZXcgUmVnRXhwKGBeJHtyZWdleHB9JGAsICdpJyk7XG4gICAgfVxufVxuLyoqXG4gKiBAcmV0dXJucyBBIGJhY2tlbmQgYmFzZWQgb24gTm9kZSB1dGlsLmRlYnVnbG9nOyB0aGlzIGlzIHRoZSBkZWZhdWx0LlxuICovXG5mdW5jdGlvbiBnZXROb2RlQmFja2VuZCgpIHtcbiAgICByZXR1cm4gbmV3IE5vZGVCYWNrZW5kKCk7XG59XG5jbGFzcyBEZWJ1Z0JhY2tlbmQgZXh0ZW5kcyBEZWJ1Z0xvZ0JhY2tlbmRCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihwa2cpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5kZWJ1Z1BrZyA9IHBrZztcbiAgICB9XG4gICAgbWFrZUxvZ2dlcihuYW1lc3BhY2UpIHtcbiAgICAgICAgY29uc3QgZGVidWdMb2dnZXIgPSB0aGlzLmRlYnVnUGtnKG5hbWVzcGFjZSk7XG4gICAgICAgIHJldHVybiAoZmllbGRzLCAuLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBgZmllbGRzYCBuZWVkcyB0byBiZSB0dXJuZWQgaW50byBhIHN0cmluZyBoZXJlLlxuICAgICAgICAgICAgZGVidWdMb2dnZXIoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldEZpbHRlcnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJzID0gKF9hID0gcHJvY2Vzcy5lbnZbJ05PREVfREVCVUcnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIHByb2Nlc3MuZW52WydOT0RFX0RFQlVHJ10gPSBgJHtleGlzdGluZ0ZpbHRlcnN9JHtleGlzdGluZ0ZpbHRlcnMgPyAnLCcgOiAnJ30ke3RoaXMuZmlsdGVycy5qb2luKCcsJyl9YDtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBcImRlYnVnXCIgcGFja2FnZSBiYWNrZW5kLiBUaGUgdXNlciBtdXN0IGNhbGwgcmVxdWlyZSgnZGVidWcnKSBhbmQgcGFzc1xuICogdGhlIHJlc3VsdGluZyBvYmplY3QgdG8gdGhpcyBmdW5jdGlvbi5cbiAqXG4gKiBgYGBcbiAqICBzZXRCYWNrZW5kKGdldERlYnVnQmFja2VuZChyZXF1aXJlKCdkZWJ1ZycpKSlcbiAqIGBgYFxuICpcbiAqIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2RlYnVnXG4gKlxuICogTm90ZTogR29vZ2xlIGRvZXMgbm90IGV4cGxpY2l0bHkgZW5kb3JzZSBvciByZWNvbW1lbmQgdGhpcyBwYWNrYWdlOyBpdCdzIGp1c3RcbiAqIGJlaW5nIHByb3ZpZGVkIGFzIGFuIG9wdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBBIGJhY2tlbmQgYmFzZWQgb24gdGhlIG5wbSBcImRlYnVnXCIgcGFja2FnZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVidWdCYWNrZW5kKGRlYnVnUGtnKSB7XG4gICAgcmV0dXJuIG5ldyBEZWJ1Z0JhY2tlbmQoZGVidWdQa2cpO1xufVxuLyoqXG4gKiBUaGlzIHByZXR0eSBtdWNoIHdvcmtzIGxpa2UgdGhlIE5vZGUgbG9nZ2VyLCBidXQgaXQgb3V0cHV0cyBzdHJ1Y3R1cmVkXG4gKiBsb2dnaW5nIEpTT04gbWF0Y2hpbmcgR29vZ2xlIENsb3VkJ3MgaW5nZXN0aW9uIHNwZWNzLiBSYXRoZXIgdGhhbiBoYW5kbGluZ1xuICogaXRzIG93biBvdXRwdXQsIGl0IHdyYXBzIGFub3RoZXIgYmFja2VuZC4gVGhlIHBhc3NlZCBiYWNrZW5kIG11c3QgYmUgYSBzdWJjbGFzc1xuICogb2YgYERlYnVnTG9nQmFja2VuZEJhc2VgIChhbnkgb2YgdGhlIGJhY2tlbmRzIGV4cG9zZWQgYnkgdGhpcyBwYWNrYWdlIHdpbGwgd29yaykuXG4gKi9cbmNsYXNzIFN0cnVjdHVyZWRCYWNrZW5kIGV4dGVuZHMgRGVidWdMb2dCYWNrZW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IodXBzdHJlYW0pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnVwc3RyZWFtID0gKF9hID0gdXBzdHJlYW0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBOb2RlQmFja2VuZCgpO1xuICAgIH1cbiAgICBtYWtlTG9nZ2VyKG5hbWVzcGFjZSkge1xuICAgICAgICBjb25zdCBkZWJ1Z0xvZ2dlciA9IHRoaXMudXBzdHJlYW0ubWFrZUxvZ2dlcihuYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gKGZpZWxkcywgLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3Qgc2V2ZXJpdHkgPSAoX2EgPSBmaWVsZHMuc2V2ZXJpdHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IExvZ1NldmVyaXR5LklORk87XG4gICAgICAgICAgICBjb25zdCBqc29uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHksXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdXRpbC5mb3JtYXQoLi4uYXJncyksXG4gICAgICAgICAgICB9LCBmaWVsZHMpO1xuICAgICAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuICAgICAgICAgICAgZGVidWdMb2dnZXIoZmllbGRzLCBqc29uU3RyaW5nKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0RmlsdGVycygpIHtcbiAgICAgICAgdGhpcy51cHN0cmVhbS5zZXRGaWx0ZXJzKCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgXCJzdHJ1Y3R1cmVkIGxvZ2dpbmdcIiBiYWNrZW5kLiBUaGlzIHByZXR0eSBtdWNoIHdvcmtzIGxpa2UgdGhlXG4gKiBOb2RlIGxvZ2dlciwgYnV0IGl0IG91dHB1dHMgc3RydWN0dXJlZCBsb2dnaW5nIEpTT04gbWF0Y2hpbmcgR29vZ2xlXG4gKiBDbG91ZCdzIGluZ2VzdGlvbiBzcGVjcyBpbnN0ZWFkIG9mIHBsYWluIHRleHQuXG4gKlxuICogYGBgXG4gKiAgc2V0QmFja2VuZChnZXRTdHJ1Y3R1cmVkQmFja2VuZCgpKVxuICogYGBgXG4gKlxuICogQHBhcmFtIHVwc3RyZWFtIElmIHlvdSB3YW50IHRvIHVzZSBzb21ldGhpbmcgYmVzaWRlcyB0aGUgTm9kZSBiYWNrZW5kIHRvXG4gKiAgIHdyaXRlIHRoZSBhY3R1YWwgbG9nIGxpbmVzIGludG8sIHBhc3MgdGhhdCBoZXJlLlxuICogQHJldHVybnMgQSBiYWNrZW5kIGJhc2VkIG9uIEdvb2dsZSBDbG91ZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcuXG4gKi9cbmZ1bmN0aW9uIGdldFN0cnVjdHVyZWRCYWNrZW5kKHVwc3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkQmFja2VuZCh1cHN0cmVhbSk7XG59XG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3ZSBzdGFuZGFyZGl6ZWQgb24sIGZvciBhbGwgYWQtaG9jIGxvZ2dpbmcuXG4gKi9cbmV4cG9ydHMuZW52ID0ge1xuICAgIC8qKlxuICAgICAqIEZpbHRlciB3aWxkY2FyZHMgc3BlY2lmaWMgdG8gdGhlIE5vZGUgc3ludGF4LCBhbmQgc2ltaWxhciB0byB0aGUgYnVpbHQtaW5cbiAgICAgKiB1dGlscy5kZWJ1Z2xvZygpIGVudmlyb25tZW50IHZhcmlhYmxlLiBJZiBtaXNzaW5nLCBkaXNhYmxlcyBsb2dnaW5nLlxuICAgICAqL1xuICAgIG5vZGVFbmFibGVzOiAnR09PR0xFX1NES19OT0RFX0xPR0dJTkcnLFxufTtcbi8vIEtlZXAgYSBjb3B5IG9mIGFsbCBuYW1lc3BhY2VkIGxvZ2dlcnMgc28gdXNlcnMgY2FuIHJlbGlhYmx5IC5vbigpIHRoZW0uXG4vLyBOb3RlIHRoYXQgdGhlc2UgY2FjaGVkIGZ1bmN0aW9ucyB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIGNoYW5nZXMgaW4gdGhlIGJhY2tlbmQuXG5jb25zdCBsb2dnZXJDYWNoZSA9IG5ldyBNYXAoKTtcbi8vIE91ciBjdXJyZW50IGdsb2JhbCBiYWNrZW5kLiBUaGlzIG1pZ2h0IGJlOlxubGV0IGNhY2hlZEJhY2tlbmQgPSB1bmRlZmluZWQ7XG4vKipcbiAqIFNldCB0aGUgYmFja2VuZCB0byB1c2UgZm9yIG91ciBsb2cgb3V0cHV0LlxuICogLSBBIGJhY2tlbmQgb2JqZWN0XG4gKiAtIG51bGwgdG8gZGlzYWJsZSBsb2dnaW5nXG4gKiAtIHVuZGVmaW5lZCBmb3IgXCJub3RoaW5nIHlldFwiLCBkZWZhdWx0cyB0byB0aGUgTm9kZSBiYWNrZW5kXG4gKlxuICogQHBhcmFtIGJhY2tlbmQgUmVzdWx0cyBmcm9tIG9uZSBvZiB0aGUgZ2V0KkJhY2tlbmQoKSBmdW5jdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHNldEJhY2tlbmQoYmFja2VuZCkge1xuICAgIGNhY2hlZEJhY2tlbmQgPSBiYWNrZW5kO1xuICAgIGxvZ2dlckNhY2hlLmNsZWFyKCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBsb2dnaW5nIGZ1bmN0aW9uLiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIHdpdGggdGhlIHNhbWUgbmFtZXNwYWNlXG4gKiB3aWxsIHByb2R1Y2UgdGhlIHNhbWUgbG9nZ2VyLCB3aXRoIHRoZSBzYW1lIGV2ZW50IGVtaXR0ZXIgaG9va3MuXG4gKlxuICogTmFtZXNwYWNlcyBjYW4gYmUgYSBzaW1wbGUgc3RyaW5nIChcInN5c3RlbVwiIG5hbWUpLCBvciBhIHF1YWxpZmllZCBzdHJpbmdcbiAqIChzeXN0ZW06c3Vic3lzdGVtKSwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGZpbHRlcmluZywgb3IgZm9yIFwic3lzdGVtOipcIi5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UsIGEgZGVzY3JpcHRpdmUgdGV4dCBzdHJpbmcuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHlvdSBjYW4gY2FsbCB0aGF0IHdvcmtzIHNpbWlsYXIgdG8gY29uc29sZS5sb2coKS5cbiAqL1xuZnVuY3Rpb24gbG9nKG5hbWVzcGFjZSwgcGFyZW50KSB7XG4gICAgLy8gSWYgdGhlIGVuYWJsZSBmbGFnIGlzbid0IHNldCwgZG8gbm90aGluZy5cbiAgICBjb25zdCBlbmFibGVzRmxhZyA9IHByb2Nlc3MuZW52W2V4cG9ydHMuZW52Lm5vZGVFbmFibGVzXTtcbiAgICBpZiAoIWVuYWJsZXNGbGFnKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLnBsYWNlaG9sZGVyO1xuICAgIH1cbiAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBtb3N0bHkgaWYgdGhlIHR5cGluZ3MgYXJlIGRyb3BwZWQgaW4gYSB1c2VyJ3MgY29kZSxcbiAgICAvLyBvciBpZiB0aGV5J3JlIGNhbGxpbmcgZnJvbSBKYXZhU2NyaXB0LlxuICAgIGlmICghbmFtZXNwYWNlKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLnBsYWNlaG9sZGVyO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgc3ViLWxvZ2dlcnMuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICBuYW1lc3BhY2UgPSBgJHtwYXJlbnQuaW5zdGFuY2UubmFtZXNwYWNlfToke25hbWVzcGFjZX1gO1xuICAgIH1cbiAgICAvLyBSZXVzZSBsb2dnZXJzIHNvIHRoaW5ncyBsaWtlIGV2ZW50IHNpbmtzIGFyZSBwZXJzaXN0ZW50LlxuICAgIGNvbnN0IGV4aXN0aW5nID0gbG9nZ2VyQ2FjaGUuZ2V0KG5hbWVzcGFjZSk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZy5mdW5jO1xuICAgIH1cbiAgICAvLyBEbyB3ZSBoYXZlIGEgYmFja2VuZCB5ZXQ/XG4gICAgaWYgKGNhY2hlZEJhY2tlbmQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwbGljaXRseSBkaXNhYmxlZC5cbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucGxhY2Vob2xkZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhY2hlZEJhY2tlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBPbmUgaGFzbid0IGJlZW4gbWFkZSB5ZXQsIHNvIGRlZmF1bHQgdG8gTm9kZS5cbiAgICAgICAgY2FjaGVkQmFja2VuZCA9IGdldE5vZGVCYWNrZW5kKCk7XG4gICAgfVxuICAgIC8vIFRoZSBsb2dnZXIgaXMgZnVydGhlciB3cmFwcGVkIHNvIHdlIGNhbiBoYW5kbGUgdGhlIGJhY2tlbmQgY2hhbmdpbmcgb3V0LlxuICAgIGNvbnN0IGxvZ2dlciA9ICgoKSA9PiB7XG4gICAgICAgIGxldCBwcmV2aW91c0JhY2tlbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG5ld0xvZ2dlciA9IG5ldyBBZGhvY0RlYnVnTG9nZ2VyKG5hbWVzcGFjZSwgKGZpZWxkcywgLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQmFja2VuZCAhPT0gY2FjaGVkQmFja2VuZCkge1xuICAgICAgICAgICAgICAgIC8vIERpZCB0aGUgdXNlciBwYXNzIGEgY3VzdG9tIGJhY2tlbmQ/XG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlZEJhY2tlbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwbGljaXRseSBkaXNhYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjYWNoZWRCYWNrZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25lIGhhc24ndCBiZWVuIG1hZGUgeWV0LCBzbyBkZWZhdWx0IHRvIE5vZGUuXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlZEJhY2tlbmQgPSBnZXROb2RlQmFja2VuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcmV2aW91c0JhY2tlbmQgPSBjYWNoZWRCYWNrZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FjaGVkQmFja2VuZCA9PT0gbnVsbCB8fCBjYWNoZWRCYWNrZW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYWNoZWRCYWNrZW5kLmxvZyhuYW1lc3BhY2UsIGZpZWxkcywgLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3TG9nZ2VyO1xuICAgIH0pKCk7XG4gICAgbG9nZ2VyQ2FjaGUuc2V0KG5hbWVzcGFjZSwgbG9nZ2VyKTtcbiAgICByZXR1cm4gbG9nZ2VyLmZ1bmM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dnaW5nLXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2xvZ2dpbmctdXRpbHNcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nY3BSZXNpZGVuY3lDYWNoZSA9IGV4cG9ydHMuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTiA9IGV4cG9ydHMuSEVBREVSUyA9IGV4cG9ydHMuSEVBREVSX1ZBTFVFID0gZXhwb3J0cy5IRUFERVJfTkFNRSA9IGV4cG9ydHMuU0VDT05EQVJZX0hPU1RfQUREUkVTUyA9IGV4cG9ydHMuSE9TVF9BRERSRVNTID0gZXhwb3J0cy5CQVNFX1BBVEggPSB2b2lkIDA7XG5leHBvcnRzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5leHBvcnRzLnByb2plY3QgPSBwcm9qZWN0O1xuZXhwb3J0cy51bml2ZXJzZSA9IHVuaXZlcnNlO1xuZXhwb3J0cy5idWxrID0gYnVsaztcbmV4cG9ydHMuaXNBdmFpbGFibGUgPSBpc0F2YWlsYWJsZTtcbmV4cG9ydHMucmVzZXRJc0F2YWlsYWJsZUNhY2hlID0gcmVzZXRJc0F2YWlsYWJsZUNhY2hlO1xuZXhwb3J0cy5nZXRHQ1BSZXNpZGVuY3kgPSBnZXRHQ1BSZXNpZGVuY3k7XG5leHBvcnRzLnNldEdDUFJlc2lkZW5jeSA9IHNldEdDUFJlc2lkZW5jeTtcbmV4cG9ydHMucmVxdWVzdFRpbWVvdXQgPSByZXF1ZXN0VGltZW91dDtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcImdheGlvc1wiKTtcbmNvbnN0IGpzb25CaWdpbnQgPSByZXF1aXJlKFwianNvbi1iaWdpbnRcIik7XG5jb25zdCBnY3BfcmVzaWRlbmN5XzEgPSByZXF1aXJlKFwiLi9nY3AtcmVzaWRlbmN5XCIpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZShcImdvb2dsZS1sb2dnaW5nLXV0aWxzXCIpO1xuZXhwb3J0cy5CQVNFX1BBVEggPSAnL2NvbXB1dGVNZXRhZGF0YS92MSc7XG5leHBvcnRzLkhPU1RfQUREUkVTUyA9ICdodHRwOi8vMTY5LjI1NC4xNjkuMjU0JztcbmV4cG9ydHMuU0VDT05EQVJZX0hPU1RfQUREUkVTUyA9ICdodHRwOi8vbWV0YWRhdGEuZ29vZ2xlLmludGVybmFsLic7XG5leHBvcnRzLkhFQURFUl9OQU1FID0gJ01ldGFkYXRhLUZsYXZvcic7XG5leHBvcnRzLkhFQURFUl9WQUxVRSA9ICdHb29nbGUnO1xuZXhwb3J0cy5IRUFERVJTID0gT2JqZWN0LmZyZWV6ZSh7IFtleHBvcnRzLkhFQURFUl9OQU1FXTogZXhwb3J0cy5IRUFERVJfVkFMVUUgfSk7XG5jb25zdCBsb2cgPSBsb2dnZXIubG9nKCdnY3AgbWV0YWRhdGEnKTtcbi8qKlxuICogTWV0YWRhdGEgc2VydmVyIGRldGVjdGlvbiBvdmVycmlkZSBvcHRpb25zLlxuICpcbiAqIEF2YWlsYWJsZSB2aWEgYHByb2Nlc3MuZW52Lk1FVEFEQVRBX1NFUlZFUl9ERVRFQ1RJT05gLlxuICovXG5leHBvcnRzLk1FVEFEQVRBX1NFUlZFUl9ERVRFQ1RJT04gPSBPYmplY3QuZnJlZXplKHtcbiAgICAnYXNzdW1lLXByZXNlbnQnOiBcImRvbid0IHRyeSB0byBwaW5nIHRoZSBtZXRhZGF0YSBzZXJ2ZXIsIGJ1dCBhc3N1bWUgaXQncyBwcmVzZW50XCIsXG4gICAgbm9uZTogXCJkb24ndCB0cnkgdG8gcGluZyB0aGUgbWV0YWRhdGEgc2VydmVyLCBidXQgZG9uJ3QgdHJ5IHRvIHVzZSBpdCBlaXRoZXJcIixcbiAgICAnYmlvcy1vbmx5JzogXCJ0cmVhdCB0aGUgcmVzdWx0IG9mIGEgQklPUyBwcm9iZSBhcyBjYW5vbmljYWwgKGRvbid0IGZhbGwgYmFjayB0byBwaW5naW5nKVwiLFxuICAgICdwaW5nLW9ubHknOiAnc2tpcCB0aGUgQklPUyBwcm9iZSwgYW5kIGdvIHN0cmFpZ2h0IHRvIHBpbmdpbmcnLFxufSk7XG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgVVJMIHdoaWxlIHRha2luZyBpbnRvIGFjY291bnQgdGhlIEdDRV9NRVRBREFUQV9IT1NUXG4gKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHJldHVybnMgVGhlIGJhc2UgVVJMLCBlLmcuLCBodHRwOi8vMTY5LjI1NC4xNjkuMjU0L2NvbXB1dGVNZXRhZGF0YS92MS5cbiAqL1xuZnVuY3Rpb24gZ2V0QmFzZVVybChiYXNlVXJsKSB7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgIGJhc2VVcmwgPVxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuR0NFX01FVEFEQVRBX0lQIHx8XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuR0NFX01FVEFEQVRBX0hPU1QgfHxcbiAgICAgICAgICAgICAgICBleHBvcnRzLkhPU1RfQUREUkVTUztcbiAgICB9XG4gICAgLy8gSWYgbm8gc2NoZW1lIGlzIHByb3ZpZGVkIGRlZmF1bHQgdG8gSFRUUDpcbiAgICBpZiAoIS9eaHR0cHM/OlxcL1xcLy8udGVzdChiYXNlVXJsKSkge1xuICAgICAgICBiYXNlVXJsID0gYGh0dHA6Ly8ke2Jhc2VVcmx9YDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVUkwoZXhwb3J0cy5CQVNFX1BBVEgsIGJhc2VVcmwpLmhyZWY7XG59XG4vLyBBY2NlcHRzIGFuIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB1c2VyIHRvIHRoZSBBUEkuIEluIHByZXZpb3VzXG4vLyB2ZXJzaW9ucyBvZiB0aGUgQVBJLCBpdCByZWZlcnJlZCB0byBhIGBSZXF1ZXN0YCBvciBhbiBgQXhpb3NgIHJlcXVlc3Rcbi8vIG9wdGlvbnMgb2JqZWN0LiAgTm93IGl0IHJlZmVycyB0byBhbiBvYmplY3Qgd2l0aCB2ZXJ5IGxpbWl0ZWQgcHJvcGVydHlcbi8vIG5hbWVzLiBUaGlzIGlzIGhlcmUgdG8gaGVscCBlbnN1cmUgdXNlcnMgZG9uJ3QgcGFzcyBpbnZhbGlkIG9wdGlvbnMgd2hlblxuLy8gdGhleSAgdXBncmFkZSBmcm9tIDAuNCB0byAwLjUgdG8gMC44LlxuZnVuY3Rpb24gdmFsaWRhdGUob3B0aW9ucykge1xuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BhcmFtcyc6XG4gICAgICAgICAgICBjYXNlICdwcm9wZXJ0eSc6XG4gICAgICAgICAgICBjYXNlICdoZWFkZXJzJzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3FzJzpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIncXMnIGlzIG5vdCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBQbGVhc2UgdXNlICdwYXJhbXMnIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2tleX0nIGlzIG5vdCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLmApO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBtZXRhZGF0YUFjY2Vzc29yKHR5cGUsIG9wdGlvbnMgPSB7fSwgbm9SZXNwb25zZVJldHJpZXMgPSAzLCBmYXN0RmFpbCA9IGZhbHNlKSB7XG4gICAgbGV0IG1ldGFkYXRhS2V5ID0gJyc7XG4gICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUFjY2Vzc29yID0gdHlwZTtcbiAgICAgICAgbWV0YWRhdGFLZXkgPSBtZXRhZGF0YUFjY2Vzc29yLm1ldGFkYXRhS2V5O1xuICAgICAgICBwYXJhbXMgPSBtZXRhZGF0YUFjY2Vzc29yLnBhcmFtcyB8fCBwYXJhbXM7XG4gICAgICAgIGhlYWRlcnMgPSBtZXRhZGF0YUFjY2Vzc29yLmhlYWRlcnMgfHwgaGVhZGVycztcbiAgICAgICAgbm9SZXNwb25zZVJldHJpZXMgPSBtZXRhZGF0YUFjY2Vzc29yLm5vUmVzcG9uc2VSZXRyaWVzIHx8IG5vUmVzcG9uc2VSZXRyaWVzO1xuICAgICAgICBmYXN0RmFpbCA9IG1ldGFkYXRhQWNjZXNzb3IuZmFzdEZhaWwgfHwgZmFzdEZhaWw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtZXRhZGF0YUtleSA9IHR5cGU7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWV0YWRhdGFLZXkgKz0gYC8ke29wdGlvbnN9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhbGlkYXRlKG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgbWV0YWRhdGFLZXkgKz0gYC8ke29wdGlvbnMucHJvcGVydHl9YDtcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IGhlYWRlcnM7XG4gICAgICAgIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1zIHx8IHBhcmFtcztcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IGZhc3RGYWlsID8gZmFzdEZhaWxNZXRhZGF0YVJlcXVlc3QgOiBnYXhpb3NfMS5yZXF1ZXN0O1xuICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgdXJsOiBgJHtnZXRCYXNlVXJsKCl9LyR7bWV0YWRhdGFLZXl9YCxcbiAgICAgICAgaGVhZGVyczogeyAuLi5leHBvcnRzLkhFQURFUlMsIC4uLmhlYWRlcnMgfSxcbiAgICAgICAgcmV0cnlDb25maWc6IHsgbm9SZXNwb25zZVJldHJpZXMgfSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdGltZW91dDogcmVxdWVzdFRpbWVvdXQoKSxcbiAgICB9O1xuICAgIGxvZy5pbmZvKCdpbnN0YW5jZSByZXF1ZXN0ICVqJywgcmVxKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCByZXF1ZXN0TWV0aG9kKHJlcSk7XG4gICAgbG9nLmluZm8oJ2luc3RhbmNlIG1ldGFkYXRhIGlzICVzJywgcmVzLmRhdGEpO1xuICAgIC8vIE5PVEU6IG5vZGUuanMgY29udmVydHMgYWxsIGluY29taW5nIGhlYWRlcnMgdG8gbG93ZXIgY2FzZS5cbiAgICBpZiAocmVzLmhlYWRlcnNbZXhwb3J0cy5IRUFERVJfTkFNRS50b0xvd2VyQ2FzZSgpXSAhPT0gZXhwb3J0cy5IRUFERVJfVkFMVUUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlc3BvbnNlIGZyb20gbWV0YWRhdGEgc2VydmljZTogaW5jb3JyZWN0ICR7ZXhwb3J0cy5IRUFERVJfTkFNRX0gaGVhZGVyLiBFeHBlY3RlZCAnJHtleHBvcnRzLkhFQURFUl9WQUxVRX0nLCBnb3QgJHtyZXMuaGVhZGVyc1tleHBvcnRzLkhFQURFUl9OQU1FLnRvTG93ZXJDYXNlKCldID8gYCcke3Jlcy5oZWFkZXJzW2V4cG9ydHMuSEVBREVSX05BTUUudG9Mb3dlckNhc2UoKV19J2AgOiAnbm8gaGVhZGVyJ31gKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBqc29uQmlnaW50LnBhcnNlKHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXMuZGF0YTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGZhc3RGYWlsTWV0YWRhdGFSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgc2Vjb25kYXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdXJsOiAoX2EgPSBvcHRpb25zLnVybCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvU3RyaW5nKCkucmVwbGFjZShnZXRCYXNlVXJsKCksIGdldEJhc2VVcmwoZXhwb3J0cy5TRUNPTkRBUllfSE9TVF9BRERSRVNTKSksXG4gICAgfTtcbiAgICAvLyBXZSByYWNlIGEgY29ubmVjdGlvbiBiZXR3ZWVuIEROUy9JUCB0byBtZXRhZGF0YSBzZXJ2ZXIuIFRoZXJlIGFyZSBhIGNvdXBsZVxuICAgIC8vIHJlYXNvbnMgZm9yIHRoaXM6XG4gICAgLy9cbiAgICAvLyAxLiB0aGUgRE5TIGlzIHNsb3cgaW4gc29tZSBHQ1AgZW52aXJvbm1lbnRzOyBieSBjaGVja2luZyBib3RoLCB3ZSBtaWdodFxuICAgIC8vICAgIGRldGVjdCB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBzaWduZmljYW50bHkgZmFzdGVyLlxuICAgIC8vIDIuIHdlIGNhbid0IGp1c3QgY2hlY2sgdGhlIElQLCB3aGljaCBpcyB0YXJwaXR0ZWQgYW5kIHNsb3cgdG8gcmVzcG9uZFxuICAgIC8vICAgIG9uIGEgdXNlcidzIGxvY2FsIG1hY2hpbmUuXG4gICAgLy9cbiAgICAvLyBBZGRpdGlvbmFsIGxvZ2ljIGhhcyBiZWVuIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGNyZWF0ZSBhblxuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb24gaW4gc2NlbmFyaW9zIHdoZXJlIGEgZmFpbHVyZSBoYXBwZW5zIHNvbWV0aW1lXG4gICAgLy8gYWZ0ZXIgYSBzdWNjZXNzLlxuICAgIC8vXG4gICAgLy8gTm90ZSwgaG93ZXZlciwgaWYgYSBmYWlsdXJlIGhhcHBlbnMgcHJpb3IgdG8gYSBzdWNjZXNzLCBhIHJlamVjdGlvbiBzaG91bGRcbiAgICAvLyBvY2N1ciwgdGhpcyBpcyBmb3IgZm9sa3MgcnVubmluZyBsb2NhbGx5LlxuICAgIC8vXG4gICAgbGV0IHJlc3BvbmRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHIxID0gKDAsIGdheGlvc18xLnJlcXVlc3QpKG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHJlc3BvbmRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGlmIChyZXNwb25kZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3BvbmRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByMiA9ICgwLCBnYXhpb3NfMS5yZXF1ZXN0KShzZWNvbmRhcnlPcHRpb25zKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICByZXNwb25kZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBpZiAocmVzcG9uZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcjE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXNwb25kZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbcjEsIHIyXSk7XG59XG4vKipcbiAqIE9idGFpbiBtZXRhZGF0YSBmb3IgdGhlIGN1cnJlbnQgR0NFIGluc3RhbmNlLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvbWV0YWRhdGEvcHJlZGVmaW5lZC1tZXRhZGF0YS1rZXlzfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGNvbnN0IHNlcnZpY2VBY2NvdW50OiB7fSA9IGF3YWl0IGluc3RhbmNlKCdzZXJ2aWNlLWFjY291bnRzLycpO1xuICogY29uc3Qgc2VydmljZUFjY291bnRFbWFpbDogc3RyaW5nID0gYXdhaXQgaW5zdGFuY2UoJ3NlcnZpY2UtYWNjb3VudHMvZGVmYXVsdC9lbWFpbCcpO1xuICogYGBgXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBpbnN0YW5jZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhQWNjZXNzb3IoJ2luc3RhbmNlJywgb3B0aW9ucyk7XG59XG4vKipcbiAqIE9idGFpbiBtZXRhZGF0YSBmb3IgdGhlIGN1cnJlbnQgR0NQIHByb2plY3QuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy9tZXRhZGF0YS9wcmVkZWZpbmVkLW1ldGFkYXRhLWtleXN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogY29uc3QgcHJvamVjdElkOiBzdHJpbmcgPSBhd2FpdCBwcm9qZWN0KCdwcm9qZWN0LWlkJyk7XG4gKiBjb25zdCBudW1lcmljUHJvamVjdElkOiBudW1iZXIgPSBhd2FpdCBwcm9qZWN0KCdudW1lcmljLXByb2plY3QtaWQnKTtcbiAqIGBgYFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gcHJvamVjdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhQWNjZXNzb3IoJ3Byb2plY3QnLCBvcHRpb25zKTtcbn1cbi8qKlxuICogT2J0YWluIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCB1bml2ZXJzZS5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21ldGFkYXRhL3ByZWRlZmluZWQtbWV0YWRhdGEta2V5c31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBjb25zdCB1bml2ZXJzZURvbWFpbjogc3RyaW5nID0gYXdhaXQgdW5pdmVyc2UoJ3VuaXZlcnNlLWRvbWFpbicpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHVuaXZlcnNlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFBY2Nlc3NvcigndW5pdmVyc2UnLCBvcHRpb25zKTtcbn1cbi8qKlxuICogUmV0cmlldmUgbWV0YWRhdGEgaXRlbXMgaW4gcGFyYWxsZWwuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy9tZXRhZGF0YS9wcmVkZWZpbmVkLW1ldGFkYXRhLWtleXN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogY29uc3QgZGF0YSA9IGF3YWl0IGJ1bGsoW1xuICogICB7XG4gKiAgICAgbWV0YWRhdGFLZXk6ICdpbnN0YW5jZScsXG4gKiAgIH0sXG4gKiAgIHtcbiAqICAgICBtZXRhZGF0YUtleTogJ3Byb2plY3QvcHJvamVjdC1pZCcsXG4gKiAgIH0sXG4gKiBdIGFzIGNvbnN0KTtcbiAqXG4gKiAvLyBkYXRhLmluc3RhbmNlO1xuICogLy8gZGF0YVsncHJvamVjdC9wcm9qZWN0LWlkJ107XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyBUaGUgbWV0YWRhdGEgcHJvcGVydGllcyB0byByZXRyaWV2ZVxuICogQHJldHVybnMgVGhlIG1ldGFkYXRhIGluIGBtZXRhZGF0YWtleTp2YWx1ZWAgZm9ybWF0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1bGsocHJvcGVydGllcykge1xuICAgIGNvbnN0IHIgPSB7fTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9wZXJ0aWVzLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBtZXRhZGF0YUFjY2Vzc29yKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5tZXRhZGF0YUtleTtcbiAgICAgICAgICAgIHJba2V5XSA9IHJlcztcbiAgICAgICAgfSkoKTtcbiAgICB9KSk7XG4gICAgcmV0dXJuIHI7XG59XG4vKlxuICogSG93IG1hbnkgdGltZXMgc2hvdWxkIHdlIHJldHJ5IGRldGVjdGluZyBHQ1AgZW52aXJvbm1lbnQuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdEdDUEF2YWlsYWJsZVJldHJpZXMoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkRFVEVDVF9HQ1BfUkVUUklFU1xuICAgICAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ERVRFQ1RfR0NQX1JFVFJJRVMpXG4gICAgICAgIDogMDtcbn1cbmxldCBjYWNoZWRJc0F2YWlsYWJsZVJlc3BvbnNlO1xuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIG1ldGFkYXRhIHNlcnZlciBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBpc0F2YWlsYWJsZSgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52Lk1FVEFEQVRBX1NFUlZFUl9ERVRFQ1RJT04udHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghKHZhbHVlIGluIGV4cG9ydHMuTUVUQURBVEFfU0VSVkVSX0RFVEVDVElPTikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIFxcYE1FVEFEQVRBX1NFUlZFUl9ERVRFQ1RJT05cXGAgZW52IHZhcmlhYmxlLiBHb3QgXFxgJHt2YWx1ZX1cXGAsIGJ1dCBpdCBzaG91bGQgYmUgXFxgJHtPYmplY3Qua2V5cyhleHBvcnRzLk1FVEFEQVRBX1NFUlZFUl9ERVRFQ1RJT04pLmpvaW4oJ2AsIGAnKX1cXGAsIG9yIHVuc2V0YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnYXNzdW1lLXByZXNlbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSAnYmlvcy1vbmx5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0R0NQUmVzaWRlbmN5KCk7XG4gICAgICAgICAgICBjYXNlICdwaW5nLW9ubHknOlxuICAgICAgICAgICAgLy8gY29udGludWUsIHdlIHdhbnQgdG8gcGluZyB0aGUgc2VydmVyXG4gICAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSWYgYSB1c2VyIGlzIGluc3RhbnRpYXRpbmcgc2V2ZXJhbCBHQ1AgbGlicmFyaWVzIGF0IHRoZSBzYW1lIHRpbWUsXG4gICAgICAgIC8vIHRoaXMgbWF5IHJlc3VsdCBpbiBtdWx0aXBsZSBjYWxscyB0byBpc0F2YWlsYWJsZSgpLCB0byBkZXRlY3QgdGhlXG4gICAgICAgIC8vIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFdlIHVzZSB0aGUgc2FtZSBwcm9taXNlIGZvciBlYWNoIG9mIHRoZXNlIGNhbGxzXG4gICAgICAgIC8vIHRvIHJlZHVjZSB0aGUgbmV0d29yayBsb2FkLlxuICAgICAgICBpZiAoY2FjaGVkSXNBdmFpbGFibGVSZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjYWNoZWRJc0F2YWlsYWJsZVJlc3BvbnNlID0gbWV0YWRhdGFBY2Nlc3NvcignaW5zdGFuY2UnLCB1bmRlZmluZWQsIGRldGVjdEdDUEF2YWlsYWJsZVJldHJpZXMoKSwgXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGVmYXVsdCBIT1NUX0FERFJFU1MgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgLy8gbWFrZSBhbiBlZmZvcnQgdG8gdHJ5IFNFQ09OREFSWV9IT1NUX0FERFJFU1MgKGFzIHdlIGFyZSBsaWtlbHkgaW5cbiAgICAgICAgICAgIC8vIGEgbm9uLUdDUCBlbnZpcm9ubWVudCk6XG4gICAgICAgICAgICAhKHByb2Nlc3MuZW52LkdDRV9NRVRBREFUQV9JUCB8fCBwcm9jZXNzLmVudi5HQ0VfTUVUQURBVEFfSE9TVCkpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGNhY2hlZElzQXZhaWxhYmxlUmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBlcnIgPSBlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuREVCVUdfQVVUSCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyci50eXBlID09PSAncmVxdWVzdC10aW1lb3V0Jykge1xuICAgICAgICAgICAgLy8gSWYgcnVubmluZyBpbiBhIEdDUCBlbnZpcm9ubWVudCwgbWV0YWRhdGEgZW5kcG9pbnQgc2hvdWxkIHJldHVyblxuICAgICAgICAgICAgLy8gd2l0aGluIG1zLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIShlcnIucmVzcG9uc2UgJiYgZXJyLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSAmJlxuICAgICAgICAgICAgICAgIC8vIEEgd2FybmluZyBpcyBlbWl0dGVkIGlmIHdlIHNlZSBhbiB1bmV4cGVjdGVkIGVyci5jb2RlLCBvciBlcnIuY29kZVxuICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBwb3B1bGF0ZWQ6XG4gICAgICAgICAgICAgICAgKCFlcnIuY29kZSB8fFxuICAgICAgICAgICAgICAgICAgICAhW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRUhPU1RVTlJFQUNIJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFTkVUVU5SRUFDSCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRU5PRU5UJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoZXJyLmNvZGUpKSkge1xuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ1VOS05PV04nO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9IGVyci5jb2RlO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoYHJlY2VpdmVkIHVuZXhwZWN0ZWQgZXJyb3IgPSAke2Vyci5tZXNzYWdlfSBjb2RlID0gJHtjb2RlfWAsICdNZXRhZGF0YUxvb2t1cFdhcm5pbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZhaWx1cmUgdG8gcmVzb2x2ZSB0aGUgbWV0YWRhdGEgc2VydmljZSBtZWFucyB0aGF0IGl0IGlzIG5vdCBhdmFpbGFibGUuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIHJlc2V0IHRoZSBtZW1vaXplZCBpc0F2YWlsYWJsZSgpIGxvb2t1cC5cbiAqL1xuZnVuY3Rpb24gcmVzZXRJc0F2YWlsYWJsZUNhY2hlKCkge1xuICAgIGNhY2hlZElzQXZhaWxhYmxlUmVzcG9uc2UgPSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEEgY2FjaGUgZm9yIHRoZSBkZXRlY3RlZCBHQ1AgUmVzaWRlbmN5LlxuICovXG5leHBvcnRzLmdjcFJlc2lkZW5jeUNhY2hlID0gbnVsbDtcbi8qKlxuICogRGV0ZWN0cyBHQ1AgUmVzaWRlbmN5LlxuICogQ2FjaGVzIHJlc3VsdHMgdG8gcmVkdWNlIGNvc3RzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuICpcbiAqIEBzZWUgc2V0R0NQUmVzaWRlbmN5IGZvciBzZXR0aW5nXG4gKi9cbmZ1bmN0aW9uIGdldEdDUFJlc2lkZW5jeSgpIHtcbiAgICBpZiAoZXhwb3J0cy5nY3BSZXNpZGVuY3lDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICBzZXRHQ1BSZXNpZGVuY3koKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydHMuZ2NwUmVzaWRlbmN5Q2FjaGU7XG59XG4vKipcbiAqIFNldHMgdGhlIGRldGVjdGVkIEdDUCBSZXNpZGVuY3kuXG4gKiBVc2VmdWwgZm9yIGZvcmNpbmcgbWV0YWRhdGEgc2VydmVyIGRldGVjdGlvbiBiZWhhdmlvci5cbiAqXG4gKiBTZXQgYG51bGxgIHRvIGF1dG9kZXRlY3QgdGhlIGVudmlyb25tZW50IChkZWZhdWx0IGJlaGF2aW9yKS5cbiAqIEBzZWUgZ2V0R0NQUmVzaWRlbmN5IGZvciBnZXR0aW5nXG4gKi9cbmZ1bmN0aW9uIHNldEdDUFJlc2lkZW5jeSh2YWx1ZSA9IG51bGwpIHtcbiAgICBleHBvcnRzLmdjcFJlc2lkZW5jeUNhY2hlID0gdmFsdWUgIT09IG51bGwgPyB2YWx1ZSA6ICgwLCBnY3BfcmVzaWRlbmN5XzEuZGV0ZWN0R0NQUmVzaWRlbmN5KSgpO1xufVxuLyoqXG4gKiBPYnRhaW4gdGhlIHRpbWVvdXQgZm9yIHJlcXVlc3RzIHRvIHRoZSBtZXRhZGF0YSBzZXJ2ZXIuXG4gKlxuICogSW4gY2VydGFpbiBlbnZpcm9ubWVudHMgYW5kIGNvbmRpdGlvbnMgcmVxdWVzdHMgY2FuIHRha2UgbG9uZ2VyIHRoYW5cbiAqIHRoZSBkZWZhdWx0IHRpbWVvdXQgdG8gY29tcGxldGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkZXRlcm1pbmUgdGhlXG4gKiBhcHByb3ByaWF0ZSB0aW1lb3V0IGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhIHJlcXVlc3QgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KCkge1xuICAgIHJldHVybiBnZXRHQ1BSZXNpZGVuY3koKSA/IDAgOiAzMDAwO1xufVxuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2djcC1yZXNpZGVuY3lcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmZhYXNDbG91ZFJlZ2lvbiA9IGV4cG9ydHMuZmFhc0luc3RhbmNlID0gZXhwb3J0cy5mYWFzVmVyc2lvbiA9IGV4cG9ydHMuZmFhc05hbWUgPSBleHBvcnRzLm9uQ2xvdWRGdW5jdGlvbnMgPSBleHBvcnRzLm9uQ2xvdWRSdW4gPSB2b2lkIDA7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIGluIHRoaXMgZmlsZSBjb3BpZWQgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNsb3VkUGxhdGZvcm0vb3BlbnRlbGVtZXRyeS1vcGVyYXRpb25zLWdvL2Jsb2IvdjEuOC4wL2RldGVjdG9ycy9nY3AvZmFhcy5nb1xuICovXG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBJRF9NRVRBREFUQV9BVFRSID0gJ2lkJztcbmNvbnN0IENMT1VEX1JVTl9DT05GSUdfRU5WID0gJ0tfQ09ORklHVVJBVElPTic7XG5jb25zdCBDTE9VRF9GVU5DVElPTl9UQVJHRVRfRU5WID0gJ0ZVTkNUSU9OX1RBUkdFVCc7XG5jb25zdCBGQUFTX1NFUlZJQ0VfRU5WID0gJ0tfU0VSVklDRSc7XG5jb25zdCBGQUFTX1JFVklTSU9OX0VOViA9ICdLX1JFVklTSU9OJztcbmNvbnN0IFJFR0lPTl9NRVRBREFUQV9BVFRSID0gJ3JlZ2lvbic7XG5hc3luYyBmdW5jdGlvbiBvbkNsb3VkUnVuKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltDTE9VRF9SVU5fQ09ORklHX0VOVl0gIT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMub25DbG91ZFJ1biA9IG9uQ2xvdWRSdW47XG5hc3luYyBmdW5jdGlvbiBvbkNsb3VkRnVuY3Rpb25zKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltDTE9VRF9GVU5DVElPTl9UQVJHRVRfRU5WXSAhPT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5vbkNsb3VkRnVuY3Rpb25zID0gb25DbG91ZEZ1bmN0aW9ucztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIENsb3VkIFJ1biBvciBDbG91ZCBGdW5jdGlvbi4gQ2hlY2sgdGhhdCB7QGxpbmsgb25DbG91ZFJ1bigpfSBvciB7QGxpbmtcbiAqIG9uQ2xvdWRGdW5jdGlvbnMoKX0gaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmFhc05hbWUoKSB7XG4gICAgcmV0dXJuIGxvb2t1cEVudihGQUFTX1NFUlZJQ0VfRU5WKTtcbn1cbmV4cG9ydHMuZmFhc05hbWUgPSBmYWFzTmFtZTtcbi8qKlxuICogVGhlIHZlcnNpb24vcmV2aXNpb24gb2YgdGhlIENsb3VkIFJ1biBvciBDbG91ZCBGdW5jdGlvbi4gQ2hlY2sgdGhhdCB7QGxpbmsgb25DbG91ZFJ1bigpfSBvclxuICoge0BsaW5rIG9uQ2xvdWRGdW5jdGlvbnMoKX0gaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmFhc1ZlcnNpb24oKSB7XG4gICAgcmV0dXJuIGxvb2t1cEVudihGQUFTX1JFVklTSU9OX0VOVik7XG59XG5leHBvcnRzLmZhYXNWZXJzaW9uID0gZmFhc1ZlcnNpb247XG4vKipcbiAqIFRoZSBJRCBmb3IgdGhlIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgYSBDbG91ZCBSdW4gb3IgQ2xvdWQgRnVuY3Rpb24uIENoZWNrIHRoYXQge0BsaW5rXG4gKiBvbkNsb3VkUnVuKCl9IG9yIHtAbGluayBvbkNsb3VkRnVuY3Rpb25zKCl9IGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93XG4gKiBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBmYWFzSW5zdGFuY2UoKSB7XG4gICAgLy8gTWF5IGJlIGEgYmlnbnVtYmVyLmpzIEJpZ051bWJlciB3aGljaCBjYW4ganVzdCBiZSBjb252ZXJ0ZWQgd2l0aCB0b1N0cmluZygpLiBTZWVcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9nY3AtbWV0YWRhdGEjdGFrZS1jYXJlLXdpdGgtbGFyZ2UtbnVtYmVyLXZhbHVlZC1wcm9wZXJ0aWVzXG4gICAgY29uc3QgaWQgPSBhd2FpdCBtZXRhZGF0YS5pbnN0YW5jZShJRF9NRVRBREFUQV9BVFRSKTtcbiAgICByZXR1cm4gaWQudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuZmFhc0luc3RhbmNlID0gZmFhc0luc3RhbmNlO1xuLyoqXG4gKiBUaGUgY2xvdWQgcmVnaW9uIHdoZXJlIHRoZSBydW5uaW5nIGluc3RhbmNlIG9mIGEgQ2xvdWQgUnVuIG9yIENsb3VkIEZ1bmN0aW9uIGlzIGxvY2F0ZWQuXG4gKiBDaGVjayB0aGF0IHtAbGluayBvbkNsb3VkUnVuKCl9IG9yIHtAbGluayBvbkNsb3VkRnVuY3Rpb25zKCl9IGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcyxcbiAqIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBmYWFzQ2xvdWRSZWdpb24oKSB7XG4gICAgY29uc3QgcmVnaW9uID0gYXdhaXQgbWV0YWRhdGEuaW5zdGFuY2UoUkVHSU9OX01FVEFEQVRBX0FUVFIpO1xuICAgIHJldHVybiByZWdpb24uc2xpY2UocmVnaW9uLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbn1cbmV4cG9ydHMuZmFhc0Nsb3VkUmVnaW9uID0gZmFhc0Nsb3VkUmVnaW9uO1xuZnVuY3Rpb24gbG9va3VwRW52KGtleSkge1xuICAgIGNvbnN0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgdmFyaWFibGUgJHtrZXl9IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmFhcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbiA9IGV4cG9ydHMuaG9zdE5hbWUgPSBleHBvcnRzLmhvc3RJZCA9IGV4cG9ydHMuaG9zdFR5cGUgPSBleHBvcnRzLm9uR2NlID0gdm9pZCAwO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUgY29waWVkIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDbG91ZFBsYXRmb3JtL29wZW50ZWxlbWV0cnktb3BlcmF0aW9ucy1nby9ibG9iL3YxLjguMC9kZXRlY3RvcnMvZ2NwL2djZS5nb1xuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBNQUNISU5FX1RZUEVfTUVUQURBVEFfQVRUUiA9ICdtYWNoaW5lLXR5cGUnO1xuY29uc3QgSURfTUVUQURBVEFfQVRUUiA9ICdpZCc7XG5jb25zdCBIT1NUX05BTUVfTUVUQURBVEFfQVRUUiA9ICduYW1lJztcbmNvbnN0IFpPTkVfTUVUQURBVEFfQVRUUiA9ICd6b25lJztcbmFzeW5jIGZ1bmN0aW9uIG9uR2NlKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG1ldGFkYXRhLmluc3RhbmNlKE1BQ0hJTkVfVFlQRV9NRVRBREFUQV9BVFRSKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnQ291bGQgbm90IGZldGNoIG1ldGFkYXRhIGF0dHJpYnV0ZSAlcywgYXNzdW1pbmcgbm90IG9uIEdDRS4gRXJyb3Igd2FzICVzJywgTUFDSElORV9UWVBFX01FVEFEQVRBX0FUVFIsIGVycik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLm9uR2NlID0gb25HY2U7XG4vKipcbiAqIFRoZSBtYWNoaW5lIHR5cGUgb2YgdGhlIGluc3RhbmNlIG9uIHdoaWNoIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nLiBDaGVjayB0aGF0IHtAbGlua1xuICogb25HY2UoKX0gaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG9zdFR5cGUoKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhLmluc3RhbmNlKE1BQ0hJTkVfVFlQRV9NRVRBREFUQV9BVFRSKTtcbn1cbmV4cG9ydHMuaG9zdFR5cGUgPSBob3N0VHlwZTtcbi8qKlxuICogVGhlIGluc3RhbmNlIElEIG9mIHRoZSBpbnN0YW5jZSBvbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmsgb25HY2UoKX1cbiAqIGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhvc3RJZCgpIHtcbiAgICAvLyBNYXkgYmUgYSBiaWdudW1iZXIuanMgQmlnTnVtYmVyIHdoaWNoIGNhbiBqdXN0IGJlIGNvbnZlcnRlZCB3aXRoIHRvU3RyaW5nKCkuIFNlZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL2djcC1tZXRhZGF0YSN0YWtlLWNhcmUtd2l0aC1sYXJnZS1udW1iZXItdmFsdWVkLXByb3BlcnRpZXNcbiAgICBjb25zdCBpZCA9IGF3YWl0IG1ldGFkYXRhLmluc3RhbmNlKElEX01FVEFEQVRBX0FUVFIpO1xuICAgIHJldHVybiBpZC50b1N0cmluZygpO1xufVxuZXhwb3J0cy5ob3N0SWQgPSBob3N0SWQ7XG4vKipcbiAqIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgaW5zdGFuY2Ugb24gd2hpY2ggdGhpcyBwcm9ncmFtIGlzIHJ1bm5pbmcuIENoZWNrIHRoYXQge0BsaW5rIG9uR2NlKCl9XG4gKiBpcyB0cnVlIGJlZm9yZSBjYWxsaW5nIHRoaXMsIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBob3N0TmFtZSgpIHtcbiAgICByZXR1cm4gbWV0YWRhdGEuaW5zdGFuY2UoSE9TVF9OQU1FX01FVEFEQVRBX0FUVFIpO1xufVxuZXhwb3J0cy5ob3N0TmFtZSA9IGhvc3ROYW1lO1xuLyoqXG4gKiBUaGUgem9uZSBhbmQgcmVnaW9uIGluIHdoaWNoIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nLiBDaGVjayB0aGF0IHtAbGluayBvbkdjZSgpfSBpcyB0cnVlXG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbigpIHtcbiAgICBjb25zdCBmdWxsWm9uZSA9IGF3YWl0IG1ldGFkYXRhLmluc3RhbmNlKFpPTkVfTUVUQURBVEFfQVRUUik7XG4gICAgLy8gRm9ybWF0IGRlc2NyaWJlZCBpblxuICAgIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvbWV0YWRhdGEvZGVmYXVsdC1tZXRhZGF0YS12YWx1ZXMjdm1faW5zdGFuY2VfbWV0YWRhdGFcbiAgICBjb25zdCByZSA9IC9wcm9qZWN0c1xcL1xcZCtcXC96b25lc1xcLyg/PHpvbmU+KD88cmVnaW9uPlxcdystXFx3KyktXFx3KykvO1xuICAgIGNvbnN0IHsgem9uZSwgcmVnaW9uIH0gPSBmdWxsWm9uZS5tYXRjaChyZSk/Lmdyb3VwcyA/PyB7fTtcbiAgICBpZiAoIXpvbmUgfHwgIXJlZ2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHpvbmUgd2FzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0OiBwcm9qZWN0cy9QUk9KRUNUX05VTS96b25lcy9DT1VOVFJZLVJFR0lPTi1aT05FLiBHb3QgJHtmdWxsWm9uZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgem9uZSwgcmVnaW9uIH07XG59XG5leHBvcnRzLmF2YWlsYWJpbGl0eVpvbmVBbmRSZWdpb24gPSBhdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2NlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGFuZGFyZENsb3VkUmVnaW9uID0gZXhwb3J0cy5zdGFuZGFyZEF2YWlsYWJpbGl0eVpvbmUgPSBleHBvcnRzLmZsZXhBdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uID0gZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2UgPSBleHBvcnRzLnNlcnZpY2VWZXJzaW9uID0gZXhwb3J0cy5zZXJ2aWNlTmFtZSA9IGV4cG9ydHMub25BcHBFbmdpbmUgPSBleHBvcnRzLm9uQXBwRW5naW5lU3RhbmRhcmQgPSB2b2lkIDA7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIGluIHRoaXMgZmlsZSBjb3BpZWQgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNsb3VkUGxhdGZvcm0vb3BlbnRlbGVtZXRyeS1vcGVyYXRpb25zLWdvL2Jsb2IvdjEuOC4wL2RldGVjdG9ycy9nY3AvYXBwX2VuZ2luZS5nb1xuICovXG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBnY2UgPSByZXF1aXJlKFwiLi9nY2VcIik7XG5jb25zdCBmYWFzID0gcmVxdWlyZShcIi4vZmFhc1wiKTtcbmNvbnN0IEdBRV9TRVJWSUNFX0VOViA9ICdHQUVfU0VSVklDRSc7XG5jb25zdCBHQUVfVkVSU0lPTl9FTlYgPSAnR0FFX1ZFUlNJT04nO1xuY29uc3QgR0FFX0lOU1RBTkNFX0VOViA9ICdHQUVfSU5TVEFOQ0UnO1xuY29uc3QgR0FFX0VOViA9ICdHQUVfRU5WJztcbmNvbnN0IEdBRV9TVEFOREFSRCA9ICdzdGFuZGFyZCc7XG5jb25zdCBaT05FX01FVEFEQVRBX0FUVFIgPSAnem9uZSc7XG5hc3luYyBmdW5jdGlvbiBvbkFwcEVuZ2luZVN0YW5kYXJkKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltHQUVfRU5WXSA9PT0gR0FFX1NUQU5EQVJEO1xufVxuZXhwb3J0cy5vbkFwcEVuZ2luZVN0YW5kYXJkID0gb25BcHBFbmdpbmVTdGFuZGFyZDtcbmFzeW5jIGZ1bmN0aW9uIG9uQXBwRW5naW5lKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltHQUVfU0VSVklDRV9FTlZdICE9PSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLm9uQXBwRW5naW5lID0gb25BcHBFbmdpbmU7XG4vKipcbiAqIFRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIGFwcCBlbmdpbmUgc2VydmljZS4gQ2hlY2sgdGhhdCB7QGxpbmsgb25BcHBFbmdpbmUoKX0gaXMgdHJ1ZSBiZWZvcmVcbiAqIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlcnZpY2VOYW1lKCkge1xuICAgIHJldHVybiBsb29rdXBFbnYoR0FFX1NFUlZJQ0VfRU5WKTtcbn1cbmV4cG9ydHMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTtcbi8qKlxuICogVGhlIHNlcnZpY2UgdmVyc2lvbiBvZiB0aGUgYXBwIGVuZ2luZSBzZXJ2aWNlLiBDaGVjayB0aGF0IHtAbGluayBvbkFwcEVuZ2luZSgpfSBpcyB0cnVlXG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VydmljZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIGxvb2t1cEVudihHQUVfVkVSU0lPTl9FTlYpO1xufVxuZXhwb3J0cy5zZXJ2aWNlVmVyc2lvbiA9IHNlcnZpY2VWZXJzaW9uO1xuLyoqXG4gKiBUaGUgc2VydmljZSBpbnN0YW5jZSBvZiB0aGUgYXBwIGVuZ2luZSBzZXJ2aWNlLiBDaGVjayB0aGF0IHtAbGluayBvbkFwcEVuZ2luZSgpfSBpcyB0cnVlXG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VydmljZUluc3RhbmNlKCkge1xuICAgIHJldHVybiBsb29rdXBFbnYoR0FFX0lOU1RBTkNFX0VOVik7XG59XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZSA9IHNlcnZpY2VJbnN0YW5jZTtcbi8qKlxuICogVGhlIHpvbmUgYW5kIHJlZ2lvbiBpbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmsgb25BcHBFbmdpbmUoKX0gaXNcbiAqIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZsZXhBdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uKCkge1xuICAgIHJldHVybiBhd2FpdCBnY2UuYXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbigpO1xufVxuZXhwb3J0cy5mbGV4QXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbiA9IGZsZXhBdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uO1xuLyoqXG4gKiBUaGUgem9uZSB0aGUgYXBwIGVuZ2luZSBzZXJ2aWNlIGlzIHJ1bm5pbmcgaW4uIENoZWNrIHRoYXQge0BsaW5rIG9uQXBwRW5naW5lU3RhbmRhcmQoKX0gaXNcbiAqIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YW5kYXJkQXZhaWxhYmlsaXR5Wm9uZSgpIHtcbiAgICBjb25zdCB6b25lID0gYXdhaXQgbWV0YWRhdGEuaW5zdGFuY2UoWk9ORV9NRVRBREFUQV9BVFRSKTtcbiAgICAvLyB6b25lIGlzIG9mIHRoZSBmb3JtIFwicHJvamVjdHMvMjMzNTEwNjY5OTk5L3pvbmVzL3VzMTVcIlxuICAgIHJldHVybiB6b25lLnNsaWNlKHpvbmUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xufVxuZXhwb3J0cy5zdGFuZGFyZEF2YWlsYWJpbGl0eVpvbmUgPSBzdGFuZGFyZEF2YWlsYWJpbGl0eVpvbmU7XG4vKipcbiAqIFRoZSByZWdpb24gdGhlIGFwcCBlbmdpbmUgc2VydmljZSBpcyBydW5uaW5nIGluLiBDaGVjayB0aGF0IHtAbGluayBvbkFwcEVuZ2luZVN0YW5kYXJkKCl9IGlzXG4gKiB0cnVlIGJlZm9yZSBjYWxsaW5nIHRoaXMsIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFuZGFyZENsb3VkUmVnaW9uKCkge1xuICAgIHJldHVybiBhd2FpdCBmYWFzLmZhYXNDbG91ZFJlZ2lvbigpO1xufVxuZXhwb3J0cy5zdGFuZGFyZENsb3VkUmVnaW9uID0gc3RhbmRhcmRDbG91ZFJlZ2lvbjtcbmZ1bmN0aW9uIGxvb2t1cEVudihrZXkpIHtcbiAgICBjb25zdCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudmlyb25tZW50IHZhcmlhYmxlICR7a2V5fSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdhZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXZhaWxhYmlsaXR5Wm9uZU9yUmVnaW9uID0gZXhwb3J0cy5jbHVzdGVyTmFtZSA9IGV4cG9ydHMuaG9zdElkID0gZXhwb3J0cy5vbkdrZSA9IHZvaWQgMDtcbi8qKlxuICogSW1wbGVtZW50YXRpb24gaW4gdGhpcyBmaWxlIGNvcGllZCBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9vcGVudGVsZW1ldHJ5LW9wZXJhdGlvbnMtZ28vYmxvYi92MS44LjAvZGV0ZWN0b3JzL2djcC9na2UuZ29cbiAqL1xuY29uc3QgbWV0YWRhdGEgPSByZXF1aXJlKFwiZ2NwLW1ldGFkYXRhXCIpO1xuY29uc3QgZ2NlID0gcmVxdWlyZShcIi4vZ2NlXCIpO1xuY29uc3QgS1VCRVJORVRFU19TRVJWSUNFX0hPU1RfRU5WID0gJ0tVQkVSTkVURVNfU0VSVklDRV9IT1NUJztcbmNvbnN0IENMVVNURVJfTkFNRV9NRVRBREFUQV9BVFRSID0gJ2F0dHJpYnV0ZXMvY2x1c3Rlci1uYW1lJztcbmNvbnN0IENMVVNURVJfTE9DQVRJT05fTUVUQURBVEFfQVRUUiA9ICdhdHRyaWJ1dGVzL2NsdXN0ZXItbG9jYXRpb24nO1xuYXN5bmMgZnVuY3Rpb24gb25Ha2UoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W0tVQkVSTkVURVNfU0VSVklDRV9IT1NUX0VOVl0gIT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMub25Ha2UgPSBvbkdrZTtcbi8qKlxuICogVGhlIGluc3RhbmNlIElEIG9mIHRoZSBpbnN0YW5jZSBvbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmsgb25Ha2UoKX1cbiAqIGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhvc3RJZCgpIHtcbiAgICByZXR1cm4gYXdhaXQgZ2NlLmhvc3RJZCgpO1xufVxuZXhwb3J0cy5ob3N0SWQgPSBob3N0SWQ7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBHS0UgY2x1c3RlciBpbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmsgb25Ha2UoKX0gaXNcbiAqIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsdXN0ZXJOYW1lKCkge1xuICAgIHJldHVybiBtZXRhZGF0YS5pbnN0YW5jZShDTFVTVEVSX05BTUVfTUVUQURBVEFfQVRUUik7XG59XG5leHBvcnRzLmNsdXN0ZXJOYW1lID0gY2x1c3Rlck5hbWU7XG4vKipcbiAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgY2x1c3RlciBhbmQgd2hldGhlciB0aGUgY2x1c3RlciBpcyB6b25hbCBvciByZWdpb25hbC4gQ2hlY2sgdGhhdCB7QGxpbmtcbiAqIG9uR2tlKCl9IGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF2YWlsYWJpbGl0eVpvbmVPclJlZ2lvbigpIHtcbiAgICBjb25zdCBjbHVzdGVyTG9jYXRpb24gPSBhd2FpdCBtZXRhZGF0YS5pbnN0YW5jZShDTFVTVEVSX0xPQ0FUSU9OX01FVEFEQVRBX0FUVFIpO1xuICAgIHN3aXRjaCAoY291bnRDaGFyKGNsdXN0ZXJMb2NhdGlvbiwgJy0nKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAncmVnaW9uJywgdmFsdWU6IGNsdXN0ZXJMb2NhdGlvbiB9O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnem9uZScsIHZhbHVlOiBjbHVzdGVyTG9jYXRpb24gfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5yZWNvZ25pemVkIGZvcm1hdCBmb3IgY2x1c3RlciBsb2NhdGlvbjogJHtjbHVzdGVyTG9jYXRpb259YCk7XG4gICAgfVxufVxuZXhwb3J0cy5hdmFpbGFiaWxpdHlab25lT3JSZWdpb24gPSBhdmFpbGFiaWxpdHlab25lT3JSZWdpb247XG5mdW5jdGlvbiBjb3VudENoYXIocywgY2hhcikge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzW2ldID09PSBjaGFyKSB7XG4gICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdrZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2NwRGV0ZWN0b3IgPSBleHBvcnRzLkdjcERldGVjdG9yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IHJlc291cmNlc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Jlc291cmNlc1wiKTtcbmNvbnN0IG1ldGFkYXRhID0gcmVxdWlyZShcImdjcC1tZXRhZGF0YVwiKTtcbmNvbnN0IGZhYXMgPSByZXF1aXJlKFwiLi9mYWFzXCIpO1xuY29uc3QgZ2FlID0gcmVxdWlyZShcIi4vZ2FlXCIpO1xuY29uc3QgZ2NlID0gcmVxdWlyZShcIi4vZ2NlXCIpO1xuY29uc3QgZ2tlID0gcmVxdWlyZShcIi4vZ2tlXCIpO1xuY29uc3QgQVRUUklCVVRFX05BTUVTID0gW1xuICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNLFxuICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FLFxuICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTixcbiAgICBzZW1jb252XzEuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FLFxuICAgIHNlbWNvbnZfMS5BVFRSX0hPU1RfVFlQRSxcbiAgICBzZW1jb252XzEuQVRUUl9IT1NUX0lELFxuICAgIHNlbWNvbnZfMS5BVFRSX0hPU1RfTkFNRSxcbiAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9QUk9WSURFUixcbiAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9BQ0NPVU5UX0lELFxuICAgIHNlbWNvbnZfMS5BVFRSX0ZBQVNfTkFNRSxcbiAgICBzZW1jb252XzEuQVRUUl9GQUFTX1ZFUlNJT04sXG4gICAgc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRSxcbl07XG5hc3luYyBmdW5jdGlvbiBkZXRlY3QoKSB7XG4gICAgaWYgKCEoYXdhaXQgbWV0YWRhdGEuaXNBdmFpbGFibGUoKSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCByZXNvdXJjZXNfMS5lbXB0eVJlc291cmNlKSgpO1xuICAgIH1cbiAgICAvLyBOb3RlIHRoZSBvcmRlciBvZiB0aGVzZSBpZiBjaGVja3MgaXMgc2lnbmlmaWNhbnQgd2l0aCBtb3JlIHNwZWNpZmljIHJlc291cmNlcyBjb21pbmdcbiAgICAvLyBmaXJzdC4gRS5nLiBDbG91ZCBGdW5jdGlvbnMgZ2VuMiBhcmUgZXhlY3V0ZWQgaW4gQ2xvdWQgUnVuIHNvIGl0IG11c3QgYmUgY2hlY2tlZCBmaXJzdC5cbiAgICBpZiAoYXdhaXQgZ2tlLm9uR2tlKCkpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdrZVJlc291cmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGF3YWl0IGZhYXMub25DbG91ZEZ1bmN0aW9ucygpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjbG91ZEZ1bmN0aW9uc1Jlc291cmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGF3YWl0IGZhYXMub25DbG91ZFJ1bigpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjbG91ZFJ1blJlc291cmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGF3YWl0IGdhZS5vbkFwcEVuZ2luZSgpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBnYWVSZXNvdXJjZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhd2FpdCBnY2Uub25HY2UoKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZ2NlUmVzb3VyY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCByZXNvdXJjZXNfMS5lbXB0eVJlc291cmNlKSgpO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2tlUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgW3pvbmVPclJlZ2lvbiwgazhzQ2x1c3Rlck5hbWUsIGhvc3RJZF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdrZS5hdmFpbGFiaWxpdHlab25lT3JSZWdpb24oKSxcbiAgICAgICAgZ2tlLmNsdXN0ZXJOYW1lKCksXG4gICAgICAgIGdrZS5ob3N0SWQoKSxcbiAgICBdKTtcbiAgICByZXR1cm4gYXdhaXQgbWFrZVJlc291cmNlKHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9LVUJFUk5FVEVTX0VOR0lORSxcbiAgICAgICAgW3pvbmVPclJlZ2lvbi50eXBlID09PSAnem9uZSdcbiAgICAgICAgICAgID8gc2VtY29udl8xLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkVcbiAgICAgICAgICAgIDogc2VtY29udl8xLkFUVFJfQ0xPVURfUkVHSU9OXTogem9uZU9yUmVnaW9uLnZhbHVlLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfSzhTX0NMVVNURVJfTkFNRV06IGs4c0NsdXN0ZXJOYW1lLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfSE9TVF9JRF06IGhvc3RJZCxcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNsb3VkUnVuUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgW2ZhYXNOYW1lLCBmYWFzVmVyc2lvbiwgZmFhc0luc3RhbmNlLCBmYWFzQ2xvdWRSZWdpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBmYWFzLmZhYXNOYW1lKCksXG4gICAgICAgIGZhYXMuZmFhc1ZlcnNpb24oKSxcbiAgICAgICAgZmFhcy5mYWFzSW5zdGFuY2UoKSxcbiAgICAgICAgZmFhcy5mYWFzQ2xvdWRSZWdpb24oKSxcbiAgICBdKTtcbiAgICByZXR1cm4gYXdhaXQgbWFrZVJlc291cmNlKHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9DTE9VRF9SVU4sXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9GQUFTX05BTUVdOiBmYWFzTmFtZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0ZBQVNfVkVSU0lPTl06IGZhYXNWZXJzaW9uLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRV06IGZhYXNJbnN0YW5jZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTl06IGZhYXNDbG91ZFJlZ2lvbixcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNsb3VkRnVuY3Rpb25zUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgW2ZhYXNOYW1lLCBmYWFzVmVyc2lvbiwgZmFhc0luc3RhbmNlLCBmYWFzQ2xvdWRSZWdpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBmYWFzLmZhYXNOYW1lKCksXG4gICAgICAgIGZhYXMuZmFhc1ZlcnNpb24oKSxcbiAgICAgICAgZmFhcy5mYWFzSW5zdGFuY2UoKSxcbiAgICAgICAgZmFhcy5mYWFzQ2xvdWRSZWdpb24oKSxcbiAgICBdKTtcbiAgICByZXR1cm4gYXdhaXQgbWFrZVJlc291cmNlKHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0dDUF9DTE9VRF9GVU5DVElPTlMsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9GQUFTX05BTUVdOiBmYWFzTmFtZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0ZBQVNfVkVSU0lPTl06IGZhYXNWZXJzaW9uLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRV06IGZhYXNJbnN0YW5jZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTl06IGZhYXNDbG91ZFJlZ2lvbixcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdhZVJlc291cmNlKCkge1xuICAgIGxldCB6b25lLCByZWdpb247XG4gICAgaWYgKGF3YWl0IGdhZS5vbkFwcEVuZ2luZVN0YW5kYXJkKCkpIHtcbiAgICAgICAgW3pvbmUsIHJlZ2lvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBnYWUuc3RhbmRhcmRBdmFpbGFiaWxpdHlab25lKCksXG4gICAgICAgICAgICBnYWUuc3RhbmRhcmRDbG91ZFJlZ2lvbigpLFxuICAgICAgICBdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgICh7IHpvbmUsIHJlZ2lvbiB9ID0gYXdhaXQgZ2NlLmF2YWlsYWJpbGl0eVpvbmVBbmRSZWdpb24oKSk7XG4gICAgfVxuICAgIGNvbnN0IFtmYWFzTmFtZSwgZmFhc1ZlcnNpb24sIGZhYXNJbnN0YW5jZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdhZS5zZXJ2aWNlTmFtZSgpLFxuICAgICAgICBnYWUuc2VydmljZVZlcnNpb24oKSxcbiAgICAgICAgZ2FlLnNlcnZpY2VJbnN0YW5jZSgpLFxuICAgIF0pO1xuICAgIHJldHVybiBhd2FpdCBtYWtlUmVzb3VyY2Uoe1xuICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk1dOiBzZW1jb252XzEuQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0FQUF9FTkdJTkUsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9GQUFTX05BTUVdOiBmYWFzTmFtZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0ZBQVNfVkVSU0lPTl06IGZhYXNWZXJzaW9uLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRV06IGZhYXNJbnN0YW5jZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FXTogem9uZSxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1JFR0lPTl06IHJlZ2lvbixcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdjZVJlc291cmNlKCkge1xuICAgIGNvbnN0IFt6b25lQW5kUmVnaW9uLCBob3N0VHlwZSwgaG9zdElkLCBob3N0TmFtZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdjZS5hdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uKCksXG4gICAgICAgIGdjZS5ob3N0VHlwZSgpLFxuICAgICAgICBnY2UuaG9zdElkKCksXG4gICAgICAgIGdjZS5ob3N0TmFtZSgpLFxuICAgIF0pO1xuICAgIHJldHVybiBhd2FpdCBtYWtlUmVzb3VyY2Uoe1xuICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk1dOiBzZW1jb252XzEuQ0xPVURfUExBVEZPUk1fVkFMVUVfR0NQX0NPTVBVVEVfRU5HSU5FLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkVdOiB6b25lQW5kUmVnaW9uLnpvbmUsXG4gICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9SRUdJT05dOiB6b25lQW5kUmVnaW9uLnJlZ2lvbixcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0hPU1RfVFlQRV06IGhvc3RUeXBlLFxuICAgICAgICBbc2VtY29udl8xLkFUVFJfSE9TVF9JRF06IGhvc3RJZCxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0hPU1RfTkFNRV06IGhvc3ROYW1lLFxuICAgIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gbWFrZVJlc291cmNlKGF0dHJzKSB7XG4gICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IG1ldGFkYXRhLnByb2plY3QoJ3Byb2plY3QtaWQnKTtcbiAgICByZXR1cm4gKDAsIHJlc291cmNlc18xLnJlc291cmNlRnJvbUF0dHJpYnV0ZXMpKHtcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSXTogc2VtY29udl8xLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0dDUCxcbiAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX0FDQ09VTlRfSURdOiBwcm9qZWN0LFxuICAgICAgICAuLi5hdHRycyxcbiAgICB9KTtcbn1cbi8qKlxuICogR29vZ2xlIENsb3VkIHJlc291cmNlIGRldGVjdG9yIHdoaWNoIHBvcHVsYXRlcyBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCB0aGlzXG4gKiBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4uIElmIG5vdCBvbiBHQ1AsIHJldHVybnMgYW4gZW1wdHkgcmVzb3VyY2UuXG4gKi9cbmNsYXNzIEdjcERldGVjdG9yIHtcbiAgICBhc3luYyBfYXN5bmNBdHRyaWJ1dGVzKCkge1xuICAgICAgICBjb25zdCByZXNvdXJjZSA9IGF3YWl0IGFwaV8xLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksIGRldGVjdCk7XG4gICAgICAgIHJldHVybiByZXNvdXJjZS5hdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIGNvbnN0IGFzeW5jQXR0cmlidXRlcyA9IHRoaXMuX2FzeW5jQXR0cmlidXRlcygpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIEFUVFJJQlVURV9OQU1FUy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgLy8gRWFjaCByZXNvdXJjZSBhdHRyaWJ1dGUgaXMgZGV0ZXJtaW5lZCBhc3luY2hyb25vdXNseSBpbiBfZ2F0aGVyRGF0YSgpLlxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IGFzeW5jQXR0cmlidXRlcy50aGVuKGRhdGEgPT4gZGF0YVtuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5HY3BEZXRlY3RvciA9IEdjcERldGVjdG9yO1xuZXhwb3J0cy5nY3BEZXRlY3RvciA9IG5ldyBHY3BEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R2NwRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdjcERldGVjdG9yID0gdm9pZCAwO1xudmFyIEdjcERldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9HY3BEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdjcERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBHY3BEZXRlY3Rvcl8xLmdjcERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc2V0SXNBdmFpbGFibGVDYWNoZSA9IGV4cG9ydHMuZ2NwRGV0ZWN0b3IgPSB2b2lkIDA7XG52YXIgZGV0ZWN0b3JzXzEgPSByZXF1aXJlKFwiLi9kZXRlY3RvcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnY3BEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGV0ZWN0b3JzXzEuZ2NwRGV0ZWN0b3I7IH0gfSk7XG4vLyBJbnRlcm5hbCAtIHVzZWQgZm9yIHRlc3RzIG9ubHlcbnZhciBnY3BfbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNldElzQXZhaWxhYmxlQ2FjaGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdjcF9tZXRhZGF0YV8xLnJlc2V0SXNBdmFpbGFibGVDYWNoZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BWlVSRV9WTV9TS1VfQVRUUklCVVRFID0gZXhwb3J0cy5BWlVSRV9WTV9TQ0FMRV9TRVRfTkFNRV9BVFRSSUJVVEUgPSBleHBvcnRzLkFaVVJFX1ZNX01FVEFEQVRBX1BBVEggPSBleHBvcnRzLkFaVVJFX1ZNX01FVEFEQVRBX0hPU1QgPSBleHBvcnRzLkZVTkNUSU9OU19NRU1fTElNSVQgPSBleHBvcnRzLkZVTkNUSU9OU19WRVJTSU9OID0gZXhwb3J0cy5XRUJTSVRFX1NLVSA9IGV4cG9ydHMuV0VCU0lURV9TTE9UX05BTUUgPSBleHBvcnRzLldFQlNJVEVfU0lURV9OQU1FID0gZXhwb3J0cy5XRUJTSVRFX1JFU09VUkNFX0dST1VQID0gZXhwb3J0cy5XRUJTSVRFX09XTkVSX05BTUUgPSBleHBvcnRzLldFQlNJVEVfSU5TVEFOQ0VfSUQgPSBleHBvcnRzLldFQlNJVEVfSE9TVE5BTUUgPSBleHBvcnRzLldFQlNJVEVfSE9NRV9TVEFNUE5BTUUgPSBleHBvcnRzLlJFR0lPTl9OQU1FID0gZXhwb3J0cy5DTE9VRF9SRVNPVVJDRV9JRF9SRVNPVVJDRV9BVFRSSUJVVEUgPSBleHBvcnRzLkFaVVJFX0FQUF9TRVJWSUNFX1NUQU1QX1JFU09VUkNFX0FUVFJJQlVURSA9IHZvaWQgMDtcbmV4cG9ydHMuQVpVUkVfQVBQX1NFUlZJQ0VfU1RBTVBfUkVTT1VSQ0VfQVRUUklCVVRFID0gJ2F6dXJlLmFwcC5zZXJ2aWNlLnN0YW1wJztcbmV4cG9ydHMuQ0xPVURfUkVTT1VSQ0VfSURfUkVTT1VSQ0VfQVRUUklCVVRFID0gJ2Nsb3VkLnJlc291cmNlX2lkJztcbmV4cG9ydHMuUkVHSU9OX05BTUUgPSAnUkVHSU9OX05BTUUnO1xuZXhwb3J0cy5XRUJTSVRFX0hPTUVfU1RBTVBOQU1FID0gJ1dFQlNJVEVfSE9NRV9TVEFNUE5BTUUnO1xuZXhwb3J0cy5XRUJTSVRFX0hPU1ROQU1FID0gJ1dFQlNJVEVfSE9TVE5BTUUnO1xuZXhwb3J0cy5XRUJTSVRFX0lOU1RBTkNFX0lEID0gJ1dFQlNJVEVfSU5TVEFOQ0VfSUQnO1xuZXhwb3J0cy5XRUJTSVRFX09XTkVSX05BTUUgPSAnV0VCU0lURV9PV05FUl9OQU1FJztcbmV4cG9ydHMuV0VCU0lURV9SRVNPVVJDRV9HUk9VUCA9ICdXRUJTSVRFX1JFU09VUkNFX0dST1VQJztcbmV4cG9ydHMuV0VCU0lURV9TSVRFX05BTUUgPSAnV0VCU0lURV9TSVRFX05BTUUnO1xuZXhwb3J0cy5XRUJTSVRFX1NMT1RfTkFNRSA9ICdXRUJTSVRFX1NMT1RfTkFNRSc7XG5leHBvcnRzLldFQlNJVEVfU0tVID0gJ1dFQlNJVEVfU0tVJztcbmV4cG9ydHMuRlVOQ1RJT05TX1ZFUlNJT04gPSAnRlVOQ1RJT05TX0VYVEVOU0lPTl9WRVJTSU9OJztcbmV4cG9ydHMuRlVOQ1RJT05TX01FTV9MSU1JVCA9ICdXRUJTSVRFX01FTU9SWV9MSU1JVF9NQic7XG5leHBvcnRzLkFaVVJFX1ZNX01FVEFEQVRBX0hPU1QgPSAnMTY5LjI1NC4xNjkuMjU0JztcbmV4cG9ydHMuQVpVUkVfVk1fTUVUQURBVEFfUEFUSCA9ICcvbWV0YWRhdGEvaW5zdGFuY2UvY29tcHV0ZT9hcGktdmVyc2lvbj0yMDIxLTEyLTEzJmZvcm1hdD1qc29uJztcbmV4cG9ydHMuQVpVUkVfVk1fU0NBTEVfU0VUX05BTUVfQVRUUklCVVRFID0gJ2F6dXJlLnZtLnNjYWxlc2V0Lm5hbWUnO1xuZXhwb3J0cy5BWlVSRV9WTV9TS1VfQVRUUklCVVRFID0gJ2F6dXJlLnZtLnNrdSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ0xPVURfUFJPVklERVJfVkFMVUVfQVpVUkUgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FaVVJFX1ZNID0gZXhwb3J0cy5DTE9VRF9QTEFURk9STV9WQUxVRV9BWlVSRV9GVU5DVElPTlMgPSBleHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FaVVJFX0FQUF9TRVJWSUNFID0gZXhwb3J0cy5BVFRSX1NFUlZJQ0VfSU5TVEFOQ0VfSUQgPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSBleHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9IT1NUX1RZUEUgPSBleHBvcnRzLkFUVFJfSE9TVF9OQU1FID0gZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSBleHBvcnRzLkFUVFJfRkFBU19NQVhfTUVNT1JZID0gZXhwb3J0cy5BVFRSX0ZBQVNfSU5TVEFOQ0UgPSBleHBvcnRzLkFUVFJfREVQTE9ZTUVOVF9FTlZJUk9OTUVOVF9OQU1FID0gZXhwb3J0cy5BVFRSX0NMT1VEX1JFR0lPTiA9IGV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9IGV4cG9ydHMuQVRUUl9DTE9VRF9QTEFURk9STSA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBjbG91ZCBwbGF0Zm9ybSBpbiB1c2UuXG4gKlxuICogQG5vdGUgVGhlIHByZWZpeCBvZiB0aGUgc2VydmljZSAqKlNIT1VMRCoqIG1hdGNoIHRoZSBvbmUgc3BlY2lmaWVkIGluIGBjbG91ZC5wcm92aWRlcmAuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUExBVEZPUk0gPSAnY2xvdWQucGxhdGZvcm0nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9ICdjbG91ZC5wcm92aWRlcic7XG4vKipcbiAqIFRoZSBnZW9ncmFwaGljYWwgcmVnaW9uIHdpdGhpbiBhIGNsb3VkIHByb3ZpZGVyLiBXaGVuIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLCB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHJlZ2lvbiB3aGVyZSB0aGUgcmVzb3VyY2Ugb3BlcmF0ZXMuIFdoZW4gY2FsbGluZyBzZXJ2aWNlcyBvciBBUElzIGRlcGxveWVkIG9uIGEgY2xvdWQsIHRoaXMgYXR0cmlidXRlIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiB3aGVyZSB0aGUgY2FsbGVkIGRlc3RpbmF0aW9uIGlzIGRlcGxveWVkLlxuICpcbiAqIEBleGFtcGxlIHVzLWNlbnRyYWwxXG4gKiBAZXhhbXBsZSB1cy1lYXN0LTFcbiAqXG4gKiBAbm90ZSBSZWZlciB0byB5b3VyIHByb3ZpZGVyJ3MgZG9jcyB0byBzZWUgdGhlIGF2YWlsYWJsZSByZWdpb25zLCBmb3IgZXhhbXBsZSBbQWxpYmFiYSBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy5hbGliYWJhY2xvdWQuY29tL2hlbHAvZG9jLWRldGFpbC80MDY1NC5odG0pLCBbQVdTIHJlZ2lvbnNdKGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYWJvdXQtYXdzL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9yZWdpb25zX2F6LyksIFtBenVyZSByZWdpb25zXShodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vZ2xvYmFsLWluZnJhc3RydWN0dXJlL2dlb2dyYXBoaWVzLyksIFtHb29nbGUgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Fib3V0L2xvY2F0aW9ucyksIG9yIFtUZW5jZW50IENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vd3d3LnRlbmNlbnRjbG91ZC5jb20vZG9jdW1lbnQvcHJvZHVjdC8yMTMvNjA5MSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUkVHSU9OID0gJ2Nsb3VkLnJlZ2lvbic7XG4vKipcbiAqIE5hbWUgb2YgdGhlIFtkZXBsb3ltZW50IGVudmlyb25tZW50XShodHRwczovL3dpa2lwZWRpYS5vcmcvd2lraS9EZXBsb3ltZW50X2Vudmlyb25tZW50KSAoYWthIGRlcGxveW1lbnQgdGllcikuXG4gKlxuICogQGV4YW1wbGUgc3RhZ2luZ1xuICogQGV4YW1wbGUgcHJvZHVjdGlvblxuICpcbiAqIEBub3RlIGBkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWVgIGRvZXMgbm90IGFmZmVjdCB0aGUgdW5pcXVlbmVzcyBjb25zdHJhaW50cyBkZWZpbmVkIHRocm91Z2hcbiAqIHRoZSBgc2VydmljZS5uYW1lc3BhY2VgLCBgc2VydmljZS5uYW1lYCBhbmQgYHNlcnZpY2UuaW5zdGFuY2UuaWRgIHJlc291cmNlIGF0dHJpYnV0ZXMuXG4gKiBUaGlzIGltcGxpZXMgdGhhdCByZXNvdXJjZXMgY2FycnlpbmcgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGUgY29tYmluYXRpb25zICoqTVVTVCoqIGJlXG4gKiBjb25zaWRlcmVkIHRvIGJlIGlkZW50aWZ5aW5nIHRoZSBzYW1lIHNlcnZpY2U6XG4gKlxuICogICAtIGBzZXJ2aWNlLm5hbWU9ZnJvbnRlbmRgLCBgZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lPXByb2R1Y3Rpb25gXG4gKiAgIC0gYHNlcnZpY2UubmFtZT1mcm9udGVuZGAsIGBkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWU9c3RhZ2luZ2AuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfREVQTE9ZTUVOVF9FTlZJUk9OTUVOVF9OQU1FID0gJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc7XG4vKipcbiAqIFRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgSUQgYXMgYSBzdHJpbmcsIHRoYXQgd2lsbCBiZSBwb3RlbnRpYWxseSByZXVzZWQgZm9yIG90aGVyIGludm9jYXRpb25zIHRvIHRoZSBzYW1lIGZ1bmN0aW9uL2Z1bmN0aW9uIHZlcnNpb24uXG4gKlxuICogQGV4YW1wbGUgMjAyMS8wNi8yOC9bJExBVEVTVF0yZjM5OWViMTQ1Mzc0NDdkYTA1YWIyYTJlMzkzMDlkZVxuICpcbiAqIEBub3RlIC0gKipBV1MgTGFtYmRhOioqIFVzZSB0aGUgKGZ1bGwpIGxvZyBzdHJlYW0gbmFtZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9GQUFTX0lOU1RBTkNFID0gJ2ZhYXMuaW5zdGFuY2UnO1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUgdG8gdGhlIHNlcnZlcmxlc3MgZnVuY3Rpb24gY29udmVydGVkIHRvIEJ5dGVzLlxuICpcbiAqIEBleGFtcGxlIDEzNDIxNzcyOFxuICpcbiAqIEBub3RlIEl0J3MgcmVjb21tZW5kZWQgdG8gc2V0IHRoaXMgYXR0cmlidXRlIHNpbmNlIGUuZy4gdG9vIGxpdHRsZSBtZW1vcnkgY2FuIGVhc2lseSBzdG9wIGEgSmF2YSBBV1MgTGFtYmRhIGZ1bmN0aW9uIGZyb20gd29ya2luZyBjb3JyZWN0bHkuIE9uIEFXUyBMYW1iZGEsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgQVdTX0xBTUJEQV9GVU5DVElPTl9NRU1PUllfU0laRWAgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlvbiAod2hpY2ggbXVzdCBiZSBtdWx0aXBsaWVkIGJ5IDEsMDQ4LDU3NikuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfRkFBU19NQVhfTUVNT1JZID0gJ2ZhYXMubWF4X21lbW9yeSc7XG4vKipcbiAqIFVuaXF1ZSBob3N0IElELiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgaW5zdGFuY2VfaWQgYXNzaWduZWQgYnkgdGhlIGNsb3VkIHByb3ZpZGVyLiBGb3Igbm9uLWNvbnRhaW5lcml6ZWQgc3lzdGVtcywgdGhpcyBzaG91bGQgYmUgdGhlIGBtYWNoaW5lLWlkYC4gU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIHNvdXJjZXMgdG8gdXNlIHRvIGRldGVybWluZSB0aGUgYG1hY2hpbmUtaWRgIGJhc2VkIG9uIG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQGV4YW1wbGUgZmRiZjc5ZThhZjk0Y2I3ZjllOGRmMzY3ODkxODcwNTJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0lEID0gJ2hvc3QuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0LiBPbiBVbml4IHN5c3RlbXMsIGl0IG1heSBjb250YWluIHdoYXQgdGhlIGhvc3RuYW1lIGNvbW1hbmQgcmV0dXJucywgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LXRlc3RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSAnaG9zdC5uYW1lJztcbi8qKlxuICogVHlwZSBvZiBob3N0LiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgbWFjaGluZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlIG4xLXN0YW5kYXJkLTFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX1RZUEUgPSAnaG9zdC50eXBlJztcbi8qKlxuICogVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFzIGRlZmluZWQgaW4gW1ZlcnNpb24gQXR0cmlidXRlc10oL2RvY3MvcmVzb3VyY2UvUkVBRE1FLm1kI3ZlcnNpb24tYXR0cmlidXRlcykuXG4gKlxuICogQGV4YW1wbGUgMTQuMi4xXG4gKiBAZXhhbXBsZSAxOC4wNC4xXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9ICdvcy52ZXJzaW9uJztcbi8qKlxuICogUHJvY2VzcyBpZGVudGlmaWVyIChQSUQpLlxuICpcbiAqIEBleGFtcGxlIDEyMzRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX1BJRCA9ICdwcm9jZXNzLnBpZCc7XG4vKipcbiAqIFRoZSBzdHJpbmcgSUQgb2YgdGhlIHNlcnZpY2UgaW5zdGFuY2UuXG4gKlxuICogQGV4YW1wbGUgNjI3Y2M0OTMtZjMxMC00N2RlLTk2YmQtNzE0MTBiN2RlYzA5XG4gKlxuICogQG5vdGUgKipNVVNUKiogYmUgdW5pcXVlIGZvciBlYWNoIGluc3RhbmNlIG9mIHRoZSBzYW1lIGBzZXJ2aWNlLm5hbWVzcGFjZSxzZXJ2aWNlLm5hbWVgIHBhaXIgKGluIG90aGVyIHdvcmRzXG4gKiBgc2VydmljZS5uYW1lc3BhY2Usc2VydmljZS5uYW1lLHNlcnZpY2UuaW5zdGFuY2UuaWRgIHRyaXBsZXQgKipNVVNUKiogYmUgZ2xvYmFsbHkgdW5pcXVlKS4gVGhlIElEIGhlbHBzIHRvXG4gKiBkaXN0aW5ndWlzaCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc2VydmljZSB0aGF0IGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUgKGUuZy4gaW5zdGFuY2VzIG9mIGEgaG9yaXpvbnRhbGx5IHNjYWxlZFxuICogc2VydmljZSkuXG4gKlxuICogSW1wbGVtZW50YXRpb25zLCBzdWNoIGFzIFNES3MsIGFyZSByZWNvbW1lbmRlZCB0byBnZW5lcmF0ZSBhIHJhbmRvbSBWZXJzaW9uIDEgb3IgVmVyc2lvbiA0IFtSRkNcbiAqIDQxMjJdKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MTIyLnR4dCkgVVVJRCwgYnV0IGFyZSBmcmVlIHRvIHVzZSBhbiBpbmhlcmVudCB1bmlxdWUgSUQgYXMgdGhlIHNvdXJjZSBvZlxuICogdGhpcyB2YWx1ZSBpZiBzdGFiaWxpdHkgaXMgZGVzaXJhYmxlLiBJbiB0aGF0IGNhc2UsIHRoZSBJRCAqKlNIT1VMRCoqIGJlIHVzZWQgYXMgc291cmNlIG9mIGEgVVVJRCBWZXJzaW9uIDUgYW5kXG4gKiAqKlNIT1VMRCoqIHVzZSB0aGUgZm9sbG93aW5nIFVVSUQgYXMgdGhlIG5hbWVzcGFjZTogYDRkNjMwMDlhLThkMGYtMTFlZS1hYWQ3LTRjNzk2ZWQ4ZTMyMGAuXG4gKlxuICogVVVJRHMgYXJlIHR5cGljYWxseSByZWNvbW1lbmRlZCwgYXMgb25seSBhbiBvcGFxdWUgdmFsdWUgZm9yIHRoZSBwdXJwb3NlcyBvZiBpZGVudGlmeWluZyBhIHNlcnZpY2UgaW5zdGFuY2UgaXNcbiAqIG5lZWRlZC4gU2ltaWxhciB0byB3aGF0IGNhbiBiZSBzZWVuIGluIHRoZSBtYW4gcGFnZSBmb3IgdGhlXG4gKiBbYC9ldGMvbWFjaGluZS1pZGBdKGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zeXN0ZW1kL21hbi9sYXRlc3QvbWFjaGluZS1pZC5odG1sKSBmaWxlLCB0aGUgdW5kZXJseWluZ1xuICogZGF0YSwgc3VjaCBhcyBwb2QgbmFtZSBhbmQgbmFtZXNwYWNlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGNvbmZpZGVudGlhbCwgYmVpbmcgdGhlIHVzZXIncyBjaG9pY2UgdG8gZXhwb3NlIGl0XG4gKiBvciBub3QgdmlhIGFub3RoZXIgcmVzb3VyY2UgYXR0cmlidXRlLlxuICpcbiAqIEZvciBhcHBsaWNhdGlvbnMgcnVubmluZyBiZWhpbmQgYW4gYXBwbGljYXRpb24gc2VydmVyIChsaWtlIHVuaWNvcm4pLCB3ZSBkbyBub3QgcmVjb21tZW5kIHVzaW5nIG9uZSBpZGVudGlmaWVyXG4gKiBmb3IgYWxsIHByb2Nlc3NlcyBwYXJ0aWNpcGF0aW5nIGluIHRoZSBhcHBsaWNhdGlvbi4gSW5zdGVhZCwgaXQncyByZWNvbW1lbmRlZCBlYWNoIGRpdmlzaW9uIChlLmcuIGEgd29ya2VyXG4gKiB0aHJlYWQgaW4gdW5pY29ybikgdG8gaGF2ZSBpdHMgb3duIGluc3RhbmNlLmlkLlxuICpcbiAqIEl0J3Mgbm90IHJlY29tbWVuZGVkIGZvciBhIENvbGxlY3RvciB0byBzZXQgYHNlcnZpY2UuaW5zdGFuY2UuaWRgIGlmIGl0IGNhbid0IHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lIHRoZVxuICogc2VydmljZSBpbnN0YW5jZSB0aGF0IGlzIGdlbmVyYXRpbmcgdGhhdCB0ZWxlbWV0cnkuIEZvciBpbnN0YW5jZSwgY3JlYXRpbmcgYW4gVVVJRCBiYXNlZCBvbiBgcG9kLm5hbWVgIHdpbGxcbiAqIGxpa2VseSBiZSB3cm9uZywgYXMgdGhlIENvbGxlY3RvciBtaWdodCBub3Qga25vdyBmcm9tIHdoaWNoIGNvbnRhaW5lciB3aXRoaW4gdGhhdCBwb2QgdGhlIHRlbGVtZXRyeSBvcmlnaW5hdGVkLlxuICogSG93ZXZlciwgQ29sbGVjdG9ycyBjYW4gc2V0IHRoZSBgc2VydmljZS5pbnN0YW5jZS5pZGAgaWYgdGhleSBjYW4gdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmUgdGhlIHNlcnZpY2UgaW5zdGFuY2VcbiAqIGZvciB0aGF0IHRlbGVtZXRyeS4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGNhc2UgZm9yIHNjcmFwaW5nIHJlY2VpdmVycywgYXMgdGhleSBrbm93IHRoZSB0YXJnZXQgYWRkcmVzcyBhbmRcbiAqIHBvcnQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRCA9ICdzZXJ2aWNlLmluc3RhbmNlLmlkJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImF6dXJlLmFwcF9zZXJ2aWNlXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QTEFURk9STX0uXG4gKlxuICogQXp1cmUgQXBwIFNlcnZpY2VcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FaVVJFX0FQUF9TRVJWSUNFID0gJ2F6dXJlLmFwcF9zZXJ2aWNlJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImF6dXJlLmZ1bmN0aW9uc1wiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUExBVEZPUk19LlxuICpcbiAqIEF6dXJlIEZ1bmN0aW9uc1xuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBlbnVtIHZhbHVlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfRlVOQ1RJT05TID0gJ2F6dXJlLmZ1bmN0aW9ucyc7XG4vKipcbiAqIEVudW0gdmFsdWUgXCJhenVyZS52bVwiIGZvciBhdHRyaWJ1dGUge0BsaW5rIEFUVFJfQ0xPVURfUExBVEZPUk19LlxuICpcbiAqIEF6dXJlIFZpcnR1YWwgTWFjaGluZXNcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgZW51bSB2YWx1ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FaVVJFX1ZNID0gJ2F6dXJlLnZtJztcbi8qKlxuICogRW51bSB2YWx1ZSBcImF6dXJlXCIgZm9yIGF0dHJpYnV0ZSB7QGxpbmsgQVRUUl9DTE9VRF9QUk9WSURFUn0uXG4gKlxuICogTWljcm9zb2Z0IEF6dXJlXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGVudW0gdmFsdWUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5DTE9VRF9QUk9WSURFUl9WQUxVRV9BWlVSRSA9ICdhenVyZSc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0F6dXJlRnVuY3Rpb24gPSBleHBvcnRzLmdldEF6dXJlUmVzb3VyY2VVcmkgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5mdW5jdGlvbiBnZXRBenVyZVJlc291cmNlVXJpKHdlYnNpdGVTaXRlTmFtZSkge1xuICAgIGNvbnN0IHdlYnNpdGVSZXNvdXJjZUdyb3VwID0gcHJvY2Vzcy5lbnZbdHlwZXNfMS5XRUJTSVRFX1JFU09VUkNFX0dST1VQXTtcbiAgICBjb25zdCB3ZWJzaXRlT3duZXJOYW1lID0gcHJvY2Vzcy5lbnZbdHlwZXNfMS5XRUJTSVRFX09XTkVSX05BTUVdO1xuICAgIGxldCBzdWJzY3JpcHRpb25JZCA9IHdlYnNpdGVPd25lck5hbWU7XG4gICAgaWYgKHdlYnNpdGVPd25lck5hbWUgJiYgd2Vic2l0ZU93bmVyTmFtZS5pbmRleE9mKCcrJykgIT09IC0xKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbklkID0gd2Vic2l0ZU93bmVyTmFtZS5zcGxpdCgnKycpWzBdO1xuICAgIH1cbiAgICBpZiAoIXN1YnNjcmlwdGlvbklkICYmICF3ZWJzaXRlT3duZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBgL3N1YnNjcmlwdGlvbnMvJHtzdWJzY3JpcHRpb25JZH0vcmVzb3VyY2VHcm91cHMvJHt3ZWJzaXRlUmVzb3VyY2VHcm91cH0vcHJvdmlkZXJzL01pY3Jvc29mdC5XZWIvc2l0ZXMvJHt3ZWJzaXRlU2l0ZU5hbWV9YDtcbn1cbmV4cG9ydHMuZ2V0QXp1cmVSZXNvdXJjZVVyaSA9IGdldEF6dXJlUmVzb3VyY2VVcmk7XG5mdW5jdGlvbiBpc0F6dXJlRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhKHByb2Nlc3MuZW52W3R5cGVzXzEuRlVOQ1RJT05TX1ZFUlNJT05dIHx8XG4gICAgICAgIHByb2Nlc3MuZW52W3R5cGVzXzEuV0VCU0lURV9TS1VdID09PSAnRmxleENvbnN1bXB0aW9uJyk7XG59XG5leHBvcnRzLmlzQXp1cmVGdW5jdGlvbiA9IGlzQXp1cmVGdW5jdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5henVyZUFwcFNlcnZpY2VEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uL3NlbWNvbnZcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgQVBQX1NFUlZJQ0VfQVRUUklCVVRFX0VOVl9WQVJTID0ge1xuICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9SRUdJT05dOiB0eXBlc18xLlJFR0lPTl9OQU1FLFxuICAgIFtzZW1jb252XzEuQVRUUl9ERVBMT1lNRU5UX0VOVklST05NRU5UX05BTUVdOiB0eXBlc18xLldFQlNJVEVfU0xPVF9OQU1FLFxuICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0lEXTogdHlwZXNfMS5XRUJTSVRFX0hPU1ROQU1FLFxuICAgIFtzZW1jb252XzEuQVRUUl9TRVJWSUNFX0lOU1RBTkNFX0lEXTogdHlwZXNfMS5XRUJTSVRFX0lOU1RBTkNFX0lELFxuICAgIFt0eXBlc18xLkFaVVJFX0FQUF9TRVJWSUNFX1NUQU1QX1JFU09VUkNFX0FUVFJJQlVURV06IHR5cGVzXzEuV0VCU0lURV9IT01FX1NUQU1QTkFNRSxcbn07XG4vKipcbiAqIFRoZSBBenVyZUFwcFNlcnZpY2VEZXRlY3RvciBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgYSBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gYW4gQXp1cmUgQXBwIFNlcnZpY2VcbiAqIEByZXR1cm5zIGEge0BsaW5rIFJlc291cmNlfSBwb3B1bGF0ZWQgd2l0aCBkYXRhIGFib3V0IHRoZSBlbnZpcm9ubWVudCBvciBhbiBlbXB0eSBSZXNvdXJjZSBpZiBkZXRlY3Rpb24gZmFpbHMuXG4gKi9cbmNsYXNzIEF6dXJlQXBwU2VydmljZURldGVjdG9yIHtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIGxldCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHdlYnNpdGVTaXRlTmFtZSA9IHByb2Nlc3MuZW52W3R5cGVzXzEuV0VCU0lURV9TSVRFX05BTUVdO1xuICAgICAgICBpZiAod2Vic2l0ZVNpdGVOYW1lICYmICEoMCwgdXRpbHNfMS5pc0F6dXJlRnVuY3Rpb24pKCkpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV06IHdlYnNpdGVTaXRlTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSXTogc2VtY29udl8xLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0FaVVJFLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk1dOiBzZW1jb252XzEuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfQVBQX1NFUlZJQ0UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgYXp1cmVSZXNvdXJjZVVyaSA9ICgwLCB1dGlsc18xLmdldEF6dXJlUmVzb3VyY2VVcmkpKHdlYnNpdGVTaXRlTmFtZSk7XG4gICAgICAgICAgICBpZiAoYXp1cmVSZXNvdXJjZVVyaSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnsgW3R5cGVzXzEuQ0xPVURfUkVTT1VSQ0VfSURfUkVTT1VSQ0VfQVRUUklCVVRFXTogYXp1cmVSZXNvdXJjZVVyaSB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhBUFBfU0VSVklDRV9BVFRSSUJVVEVfRU5WX1ZBUlMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52VmFyID0gcHJvY2Vzcy5lbnZbdmFsdWVdO1xuICAgICAgICAgICAgICAgIGlmIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHsgLi4uYXR0cmlidXRlcywgLi4ueyBba2V5XTogZW52VmFyIH0gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlcyB9O1xuICAgIH1cbn1cbmV4cG9ydHMuYXp1cmVBcHBTZXJ2aWNlRGV0ZWN0b3IgPSBuZXcgQXp1cmVBcHBTZXJ2aWNlRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF6dXJlQXBwU2VydmljZURldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5henVyZUZ1bmN0aW9uc0RldGVjdG9yID0gdm9pZCAwO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi9zZW1jb252XCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi90eXBlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBBWlVSRV9GVU5DVElPTlNfQVRUUklCVVRFX0VOVl9WQVJTID0ge1xuICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfU0VSVklDRV9OQU1FXTogdHlwZXNfMS5XRUJTSVRFX1NJVEVfTkFNRSxcbiAgICBbc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRV06IHR5cGVzXzEuV0VCU0lURV9JTlNUQU5DRV9JRCxcbiAgICBbc2VtY29udl8xLkFUVFJfRkFBU19NQVhfTUVNT1JZXTogdHlwZXNfMS5GVU5DVElPTlNfTUVNX0xJTUlULFxufTtcbi8qKlxuICogVGhlIEF6dXJlRnVuY3Rpb25zRGV0ZWN0b3IgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGlmIGEgcHJvY2VzcyBpcyBydW5uaW5nIGluIEF6dXJlIEZ1bmN0aW9uc1xuICogQHJldHVybnMgYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGRhdGEgYWJvdXQgdGhlIGVudmlyb25tZW50IG9yIGFuIGVtcHR5IFJlc291cmNlIGlmIGRldGVjdGlvbiBmYWlscy5cbiAqL1xuY2xhc3MgQXp1cmVGdW5jdGlvbnNEZXRlY3RvciB7XG4gICAgZGV0ZWN0KCkge1xuICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52W3R5cGVzXzEuV0VCU0lURV9TSVRFX05BTUVdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2tzIHRoYXQgd2UgYXJlIG9wZXJhdGluZyB3aXRoaW4gYW4gQXp1cmUgRnVuY3Rpb24gdXNpbmcgdGhlIGZ1bmN0aW9uIHZlcnNpb24gc2luY2UgV0VCU0lURV9TSVRFX05BTUVcbiAgICAgICAgICogd2lsbCBleGlzdCBpbiBBenVyZSBBcHAgU2VydmljZSBhcyB3ZWxsIGFuZCBkZXRlY3RvcnMgc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiAgICAgICAgICogSWYgdGhlIGZ1bmN0aW9uIHZlcnNpb24gaXMgbm90IHByZXNlbnQsIHdlIGNoZWNrIGZvciB0aGUgd2Vic2l0ZSBza3UgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgZnVuY3Rpb24uXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2VydmljZU5hbWUgJiYgKDAsIHV0aWxzXzEuaXNBenVyZUZ1bmN0aW9uKSgpKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluc3RhbmNlID0gcHJvY2Vzcy5lbnZbdHlwZXNfMS5XRUJTSVRFX0lOU1RBTkNFX0lEXTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTWVtTGltaXQgPSBwcm9jZXNzLmVudlt0eXBlc18xLkZVTkNUSU9OU19NRU1fTElNSVRdO1xuICAgICAgICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUFJPVklERVJdOiBzZW1jb252XzEuQ0xPVURfUFJPVklERVJfVkFMVUVfQVpVUkUsXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BMQVRGT1JNXTogc2VtY29udl8xLkNMT1VEX1BMQVRGT1JNX1ZBTFVFX0FaVVJFX0ZVTkNUSU9OUyxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUkVHSU9OXTogcHJvY2Vzcy5lbnZbdHlwZXNfMS5SRUdJT05fTkFNRV0sXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfUElEXTogcHJvY2Vzcy5waWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfRkFBU19JTlNUQU5DRV06IGZ1bmN0aW9uSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmdW5jdGlvbk1lbUxpbWl0KSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0ZBQVNfTUFYX01FTU9SWV06IGZ1bmN0aW9uTWVtTGltaXQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF6dXJlUmVzb3VyY2VVcmkgPSAoMCwgdXRpbHNfMS5nZXRBenVyZVJlc291cmNlVXJpKShzZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgICBpZiAoYXp1cmVSZXNvdXJjZVVyaSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnsgW3R5cGVzXzEuQ0xPVURfUkVTT1VSQ0VfSURfUkVTT1VSQ0VfQVRUUklCVVRFXTogYXp1cmVSZXNvdXJjZVVyaSB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhBWlVSRV9GVU5DVElPTlNfQVRUUklCVVRFX0VOVl9WQVJTKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhciA9IHByb2Nlc3MuZW52W3ZhbHVlXTtcbiAgICAgICAgICAgICAgICBpZiAoZW52VmFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7IC4uLmF0dHJpYnV0ZXMsIC4uLnsgW2tleV06IGVudlZhciB9IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGF0dHJpYnV0ZXMgfTtcbiAgICB9XG59XG5leHBvcnRzLmF6dXJlRnVuY3Rpb25zRGV0ZWN0b3IgPSBuZXcgQXp1cmVGdW5jdGlvbnNEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXp1cmVGdW5jdGlvbnNEZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXp1cmVWbURldGVjdG9yID0gdm9pZCAwO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vc2VtY29udlwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG4vKipcbiAqIFRoZSBBenVyZVZtRGV0ZWN0b3IgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGlmIGEgcHJvY2VzcyBpcyBydW5uaW5nIGluIGFuIEF6dXJlIFZNLlxuICogQHJldHVybnMgYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGRhdGEgYWJvdXQgdGhlIGVudmlyb25tZW50IG9yIGFuIGVtcHR5IFJlc291cmNlIGlmIGRldGVjdGlvbiBmYWlscy5cbiAqL1xuY2xhc3MgQXp1cmVWbVJlc291cmNlRGV0ZWN0b3Ige1xuICAgIGRldGVjdCgpIHtcbiAgICAgICAgY29uc3QgZGF0YVByb21pc2UgPSBhcGlfMS5jb250ZXh0LndpdGgoKDAsIGNvcmVfMS5zdXBwcmVzc1RyYWNpbmcpKGFwaV8xLmNvbnRleHQuYWN0aXZlKCkpLCAoKSA9PiB0aGlzLmdldEF6dXJlVm1NZXRhZGF0YSgpKTtcbiAgICAgICAgY29uc3QgYXR0ck5hbWVzID0gW1xuICAgICAgICAgICAgdHlwZXNfMS5BWlVSRV9WTV9TQ0FMRV9TRVRfTkFNRV9BVFRSSUJVVEUsXG4gICAgICAgICAgICB0eXBlc18xLkFaVVJFX1ZNX1NLVV9BVFRSSUJVVEUsXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9DTE9VRF9QTEFURk9STSxcbiAgICAgICAgICAgIHNlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfQ0xPVURfUkVHSU9OLFxuICAgICAgICAgICAgdHlwZXNfMS5DTE9VRF9SRVNPVVJDRV9JRF9SRVNPVVJDRV9BVFRSSUJVVEUsXG4gICAgICAgICAgICBzZW1jb252XzEuQVRUUl9IT1NUX0lELFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfSE9TVF9OQU1FLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfSE9TVF9UWVBFLFxuICAgICAgICAgICAgc2VtY29udl8xLkFUVFJfT1NfVkVSU0lPTixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBhdHRyTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIC8vIEVhY2ggcmVzb3VyY2UgYXR0cmlidXRlIGlzIGRldGVybWluZWQgYXN5bmNocm9ub3VzbHkgaW4gX2dhdGhlckRhdGEoKS5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0gPSBkYXRhUHJvbWlzZS50aGVuKGRhdGEgPT4gZGF0YVtuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIGFzeW5jIGdldEF6dXJlVm1NZXRhZGF0YSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgaG9zdDogdHlwZXNfMS5BWlVSRV9WTV9NRVRBREFUQV9IT1NULFxuICAgICAgICAgICAgICAgIHBhdGg6IHR5cGVzXzEuQVpVUkVfVk1fTUVUQURBVEFfUEFUSCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDAsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YTogJ1RydWUnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0F6dXJlIG1ldGFkYXRhIHNlcnZpY2UgcmVxdWVzdCB0aW1lZCBvdXQuJykpO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHAucmVxdWVzdChvcHRpb25zLCByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5zZXRFbmNvZGluZygndXRmOCcpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmF3RGF0YSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiAocmF3RGF0YSArPSBjaHVuaykpO1xuICAgICAgICAgICAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmF3RGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCBwYWdlLCBzdGF0dXMgY29kZTogJyArIHN0YXR1c0NvZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXEuZW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICAgICAgW3R5cGVzXzEuQVpVUkVfVk1fU0NBTEVfU0VUX05BTUVfQVRUUklCVVRFXTogbWV0YWRhdGFbJ3ZtU2NhbGVTZXROYW1lJ10sXG4gICAgICAgICAgICAgICAgW3R5cGVzXzEuQVpVUkVfVk1fU0tVX0FUVFJJQlVURV06IG1ldGFkYXRhWydza3UnXSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfQ0xPVURfUExBVEZPUk1dOiBzZW1jb252XzEuQ0xPVURfUExBVEZPUk1fVkFMVUVfQVpVUkVfVk0sXG4gICAgICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX0NMT1VEX1BST1ZJREVSXTogc2VtY29udl8xLkNMT1VEX1BST1ZJREVSX1ZBTFVFX0FaVVJFLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9DTE9VRF9SRUdJT05dOiBtZXRhZGF0YVsnbG9jYXRpb24nXSxcbiAgICAgICAgICAgICAgICBbdHlwZXNfMS5DTE9VRF9SRVNPVVJDRV9JRF9SRVNPVVJDRV9BVFRSSUJVVEVdOiBtZXRhZGF0YVsncmVzb3VyY2VJZCddLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0lEXTogbWV0YWRhdGFbJ3ZtSWQnXSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfSE9TVF9OQU1FXTogbWV0YWRhdGFbJ25hbWUnXSxcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfSE9TVF9UWVBFXTogbWV0YWRhdGFbJ3ZtU2l6ZSddLFxuICAgICAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9PU19WRVJTSU9OXTogbWV0YWRhdGFbJ3ZlcnNpb24nXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdBenVyZVZtUmVzb3VyY2VEZXRlY3Rvcjogbm90IHJ1bm5pbmcgaW4gYW4gQXp1cmUgVk06JywgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5henVyZVZtRGV0ZWN0b3IgPSBuZXcgQXp1cmVWbVJlc291cmNlRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF6dXJlVm1EZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXp1cmVWbURldGVjdG9yID0gZXhwb3J0cy5henVyZUZ1bmN0aW9uc0RldGVjdG9yID0gZXhwb3J0cy5henVyZUFwcFNlcnZpY2VEZXRlY3RvciA9IHZvaWQgMDtcbnZhciBBenVyZUFwcFNlcnZpY2VEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vQXp1cmVBcHBTZXJ2aWNlRGV0ZWN0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhenVyZUFwcFNlcnZpY2VEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXp1cmVBcHBTZXJ2aWNlRGV0ZWN0b3JfMS5henVyZUFwcFNlcnZpY2VEZXRlY3RvcjsgfSB9KTtcbnZhciBBenVyZUZ1bmN0aW9uc0RldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9BenVyZUZ1bmN0aW9uc0RldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXp1cmVGdW5jdGlvbnNEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXp1cmVGdW5jdGlvbnNEZXRlY3Rvcl8xLmF6dXJlRnVuY3Rpb25zRGV0ZWN0b3I7IH0gfSk7XG52YXIgQXp1cmVWbURldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9BenVyZVZtRGV0ZWN0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhenVyZVZtRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF6dXJlVm1EZXRlY3Rvcl8xLmF6dXJlVm1EZXRlY3RvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5henVyZVZtRGV0ZWN0b3IgPSBleHBvcnRzLmF6dXJlRnVuY3Rpb25zRGV0ZWN0b3IgPSBleHBvcnRzLmF6dXJlQXBwU2VydmljZURldGVjdG9yID0gdm9pZCAwO1xudmFyIGRldGVjdG9yc18xID0gcmVxdWlyZShcIi4vZGV0ZWN0b3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXp1cmVBcHBTZXJ2aWNlRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRldGVjdG9yc18xLmF6dXJlQXBwU2VydmljZURldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXp1cmVGdW5jdGlvbnNEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGV0ZWN0b3JzXzEuYXp1cmVGdW5jdGlvbnNEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF6dXJlVm1EZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGV0ZWN0b3JzXzEuYXp1cmVWbURldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJlc291cmNlRGV0ZWN0b3JzRnJvbUVudiA9IGV4cG9ydHMuZ2V0Tm9kZUF1dG9JbnN0cnVtZW50YXRpb25zID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2FtcXBsaWJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYW1xcGxpYlwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9hd3NfbGFtYmRhXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWF3cy1sYW1iZGFcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fYXdzX3Nka18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hd3Mtc2RrXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2J1bnlhbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1idW55YW5cIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fY2Fzc2FuZHJhX2RyaXZlcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jYXNzYW5kcmEtZHJpdmVyXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2Nvbm5lY3RfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tY29ubmVjdFwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9jdWN1bWJlcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jdWN1bWJlclwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9kYXRhbG9hZGVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRhdGFsb2FkZXJcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fZG5zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRuc1wiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9leHByZXNzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWV4cHJlc3NcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fZmFzdGlmeV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5XCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2ZzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZzXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2dlbmVyaWNfcG9vbF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1nZW5lcmljLXBvb2xcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fZ3JhcGhxbF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2dycGNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZ3JwY1wiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9oYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWhhcGlcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25faHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2lvcmVkaXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taW9yZWRpc1wiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9rYWZrYWpzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWthZmthanNcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fa25leF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4XCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX2tvYV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rb2FcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fbHJ1X21lbW9pemVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWxydS1tZW1vaXplclwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9tZW1jYWNoZWRfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbWVtY2FjaGVkXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX21vbmdvZGJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29kYlwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9tb25nb29zZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tb25nb29zZVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9teXNxbDJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbXlzcWwyXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX215c3FsXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW15c3FsXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX25lc3Rqc19jb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW5lc3Rqcy1jb3JlXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX25ldF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1uZXRcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fb3BlbmFpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9wZW5haVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9vcmFjbGVkYl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1vcmFjbGVkYlwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9wZ18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1wZ1wiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9waW5vXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXBpbm9cIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fcmVkaXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXNcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fcmVzdGlmeV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yZXN0aWZ5XCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX3JvdXRlcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yb3V0ZXJcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fcnVudGltZV9ub2RlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJ1bnRpbWUtbm9kZVwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl9zb2NrZXRfaW9fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tc29ja2V0LmlvXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX3RlZGlvdXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdGVkaW91c1wiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl91bmRpY2lfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdW5kaWNpXCIpO1xuY29uc3QgaW5zdHJ1bWVudGF0aW9uX3dpbnN0b25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24td2luc3RvblwiKTtcbmNvbnN0IHJlc291cmNlX2RldGVjdG9yX2FsaWJhYmFfY2xvdWRfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1hbGliYWJhLWNsb3VkXCIpO1xuY29uc3QgcmVzb3VyY2VfZGV0ZWN0b3JfYXdzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItYXdzXCIpO1xuY29uc3QgcmVzb3VyY2VfZGV0ZWN0b3JfY29udGFpbmVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItY29udGFpbmVyXCIpO1xuY29uc3QgcmVzb3VyY2VfZGV0ZWN0b3JfZ2NwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2UtZGV0ZWN0b3ItZ2NwXCIpO1xuY29uc3QgcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzXCIpO1xuY29uc3QgcmVzb3VyY2VfZGV0ZWN0b3JfYXp1cmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZS1kZXRlY3Rvci1henVyZVwiKTtcbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SX0NPTlRBSU5FUiA9ICdjb250YWluZXInO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfRU5WSVJPTk1FTlQgPSAnZW52JztcbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SX0hPU1QgPSAnaG9zdCc7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9PUyA9ICdvcyc7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9TRVJWSUNFX0lOU1RBTkNFX0lEID0gJ3NlcnZpY2VpbnN0YW5jZSc7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9QUk9DRVNTID0gJ3Byb2Nlc3MnO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfQUxJQkFCQSA9ICdhbGliYWJhJztcbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SX0FXUyA9ICdhd3MnO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfQVpVUkUgPSAnYXp1cmUnO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfR0NQID0gJ2djcCc7XG5jb25zdCBJbnN0cnVtZW50YXRpb25NYXAgPSB7XG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1hbXFwbGliJzogaW5zdHJ1bWVudGF0aW9uX2FtcXBsaWJfMS5BbXFwbGliSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLWxhbWJkYSc6IGluc3RydW1lbnRhdGlvbl9hd3NfbGFtYmRhXzEuQXdzTGFtYmRhSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYXdzLXNkayc6IGluc3RydW1lbnRhdGlvbl9hd3Nfc2RrXzEuQXdzSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tYnVueWFuJzogaW5zdHJ1bWVudGF0aW9uX2J1bnlhbl8xLkJ1bnlhbkluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWNhc3NhbmRyYS1kcml2ZXInOiBpbnN0cnVtZW50YXRpb25fY2Fzc2FuZHJhX2RyaXZlcl8xLkNhc3NhbmRyYURyaXZlckluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWNvbm5lY3QnOiBpbnN0cnVtZW50YXRpb25fY29ubmVjdF8xLkNvbm5lY3RJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1jdWN1bWJlcic6IGluc3RydW1lbnRhdGlvbl9jdWN1bWJlcl8xLkN1Y3VtYmVySW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZGF0YWxvYWRlcic6IGluc3RydW1lbnRhdGlvbl9kYXRhbG9hZGVyXzEuRGF0YWxvYWRlckluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWRucyc6IGluc3RydW1lbnRhdGlvbl9kbnNfMS5EbnNJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1leHByZXNzJzogaW5zdHJ1bWVudGF0aW9uX2V4cHJlc3NfMS5FeHByZXNzSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZmFzdGlmeSc6IGluc3RydW1lbnRhdGlvbl9mYXN0aWZ5XzEuRmFzdGlmeUluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZzJzogaW5zdHJ1bWVudGF0aW9uX2ZzXzEuRnNJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1nZW5lcmljLXBvb2wnOiBpbnN0cnVtZW50YXRpb25fZ2VuZXJpY19wb29sXzEuR2VuZXJpY1Bvb2xJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1ncmFwaHFsJzogaW5zdHJ1bWVudGF0aW9uX2dyYXBocWxfMS5HcmFwaFFMSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZ3JwYyc6IGluc3RydW1lbnRhdGlvbl9ncnBjXzEuR3JwY0luc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWhhcGknOiBpbnN0cnVtZW50YXRpb25faGFwaV8xLkhhcGlJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJzogaW5zdHJ1bWVudGF0aW9uX2h0dHBfMS5IdHRwSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taW9yZWRpcyc6IGluc3RydW1lbnRhdGlvbl9pb3JlZGlzXzEuSU9SZWRpc0luc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWthZmthanMnOiBpbnN0cnVtZW50YXRpb25fa2Fma2Fqc18xLkthZmthSnNJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1rbmV4JzogaW5zdHJ1bWVudGF0aW9uX2tuZXhfMS5LbmV4SW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24ta29hJzogaW5zdHJ1bWVudGF0aW9uX2tvYV8xLktvYUluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWxydS1tZW1vaXplcic6IGluc3RydW1lbnRhdGlvbl9scnVfbWVtb2l6ZXJfMS5McnVNZW1vaXplckluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW1lbWNhY2hlZCc6IGluc3RydW1lbnRhdGlvbl9tZW1jYWNoZWRfMS5NZW1jYWNoZWRJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1tb25nb2RiJzogaW5zdHJ1bWVudGF0aW9uX21vbmdvZGJfMS5Nb25nb0RCSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbW9uZ29vc2UnOiBpbnN0cnVtZW50YXRpb25fbW9uZ29vc2VfMS5Nb25nb29zZUluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW15c3FsMic6IGluc3RydW1lbnRhdGlvbl9teXNxbDJfMS5NeVNRTDJJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1teXNxbCc6IGluc3RydW1lbnRhdGlvbl9teXNxbF8xLk15U1FMSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbmVzdGpzLWNvcmUnOiBpbnN0cnVtZW50YXRpb25fbmVzdGpzX2NvcmVfMS5OZXN0SW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tbmV0JzogaW5zdHJ1bWVudGF0aW9uX25ldF8xLk5ldEluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLW9wZW5haSc6IGluc3RydW1lbnRhdGlvbl9vcGVuYWlfMS5PcGVuQUlJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1vcmFjbGVkYic6IGluc3RydW1lbnRhdGlvbl9vcmFjbGVkYl8xLk9yYWNsZUluc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXBnJzogaW5zdHJ1bWVudGF0aW9uX3BnXzEuUGdJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1waW5vJzogaW5zdHJ1bWVudGF0aW9uX3Bpbm9fMS5QaW5vSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcmVkaXMnOiBpbnN0cnVtZW50YXRpb25fcmVkaXNfMS5SZWRpc0luc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXJlc3RpZnknOiBpbnN0cnVtZW50YXRpb25fcmVzdGlmeV8xLlJlc3RpZnlJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1yb3V0ZXInOiBpbnN0cnVtZW50YXRpb25fcm91dGVyXzEuUm91dGVySW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tcnVudGltZS1ub2RlJzogaW5zdHJ1bWVudGF0aW9uX3J1bnRpbWVfbm9kZV8xLlJ1bnRpbWVOb2RlSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tc29ja2V0LmlvJzogaW5zdHJ1bWVudGF0aW9uX3NvY2tldF9pb18xLlNvY2tldElvSW5zdHJ1bWVudGF0aW9uLFxuICAgICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tdGVkaW91cyc6IGluc3RydW1lbnRhdGlvbl90ZWRpb3VzXzEuVGVkaW91c0luc3RydW1lbnRhdGlvbixcbiAgICAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXVuZGljaSc6IGluc3RydW1lbnRhdGlvbl91bmRpY2lfMS5VbmRpY2lJbnN0cnVtZW50YXRpb24sXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi13aW5zdG9uJzogaW5zdHJ1bWVudGF0aW9uX3dpbnN0b25fMS5XaW5zdG9uSW5zdHJ1bWVudGF0aW9uLFxufTtcbmNvbnN0IGRlZmF1bHRFeGNsdWRlZEluc3RydW1lbnRhdGlvbnMgPSBbXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mcycsXG4gICAgJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mYXN0aWZ5Jyxcbl07XG5mdW5jdGlvbiBnZXROb2RlQXV0b0luc3RydW1lbnRhdGlvbnMoaW5wdXRDb25maWdzID0ge30pIHtcbiAgICBjaGVja01hbnVhbGx5UHJvdmlkZWRJbnN0cnVtZW50YXRpb25OYW1lcyhPYmplY3Qua2V5cyhpbnB1dENvbmZpZ3MpKTtcbiAgICBjb25zdCBlbmFibGVkSW5zdHJ1bWVudGF0aW9uc0Zyb21FbnYgPSBnZXRFbmFibGVkSW5zdHJ1bWVudGF0aW9uc0Zyb21FbnYoKTtcbiAgICBjb25zdCBkaXNhYmxlZEluc3RydW1lbnRhdGlvbnNGcm9tRW52ID0gZ2V0RGlzYWJsZWRJbnN0cnVtZW50YXRpb25zRnJvbUVudigpO1xuICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoSW5zdHJ1bWVudGF0aW9uTWFwKSkge1xuICAgICAgICBjb25zdCBJbnN0YW5jZSA9IEluc3RydW1lbnRhdGlvbk1hcFtuYW1lXTtcbiAgICAgICAgLy8gRGVmYXVsdHMgYXJlIGRlZmluZWQgYnkgdGhlIGluc3RydW1lbnRhdGlvbiBpdHNlbGZcbiAgICAgICAgY29uc3QgdXNlckNvbmZpZyA9IGlucHV0Q29uZmlnc1tuYW1lXSA/PyB7fTtcbiAgICAgICAgaWYgKHVzZXJDb25maWcuZW5hYmxlZCA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICFlbmFibGVkSW5zdHJ1bWVudGF0aW9uc0Zyb21FbnYuaW5jbHVkZXMobmFtZSkgfHxcbiAgICAgICAgICAgIGRpc2FibGVkSW5zdHJ1bWVudGF0aW9uc0Zyb21FbnYuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYERpc2FibGluZyBpbnN0cnVtZW50YXRpb24gZm9yICR7bmFtZX1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBMb2FkaW5nIGluc3RydW1lbnRhdGlvbiBmb3IgJHtuYW1lfWApO1xuICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKG5ldyBJbnN0YW5jZSh1c2VyQ29uZmlnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbnM7XG59XG5leHBvcnRzLmdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucyA9IGdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucztcbmZ1bmN0aW9uIGNoZWNrTWFudWFsbHlQcm92aWRlZEluc3RydW1lbnRhdGlvbk5hbWVzKG1hbnVhbGx5UHJvdmlkZWRJbnN0cnVtZW50YXRpb25OYW1lcykge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBtYW51YWxseVByb3ZpZGVkSW5zdHJ1bWVudGF0aW9uTmFtZXMpIHtcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSW5zdHJ1bWVudGF0aW9uTWFwLCBuYW1lKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgUHJvdmlkZWQgaW5zdHJ1bWVudGF0aW9uIG5hbWUgXCIke25hbWV9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRJbnN0cnVtZW50YXRpb25zRnJvbUVudihlbnZWYXIpIHtcbiAgICBjb25zdCBlbnZWYXJWYWx1ZSA9IHByb2Nlc3MuZW52W2VudlZhcl07XG4gICAgaWYgKGVudlZhclZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBpbnN0cnVtZW50YXRpb25zRnJvbUVudiA9IGVudlZhclZhbHVlXG4gICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAubWFwKGluc3RydW1lbnRhdGlvblBrZ1N1ZmZpeCA9PiBgQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLSR7aW5zdHJ1bWVudGF0aW9uUGtnU3VmZml4LnRyaW0oKX1gKTtcbiAgICBjaGVja01hbnVhbGx5UHJvdmlkZWRJbnN0cnVtZW50YXRpb25OYW1lcyhpbnN0cnVtZW50YXRpb25zRnJvbUVudik7XG4gICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbnNGcm9tRW52O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGluc3RydW1lbnRhdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5zZXQsIHJldHVybnMgYWxsIGluc3RydW1lbnRhdGlvbiB0aGF0IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gKi9cbmZ1bmN0aW9uIGdldEVuYWJsZWRJbnN0cnVtZW50YXRpb25zRnJvbUVudigpIHtcbiAgICBpZiAoIXByb2Nlc3MuZW52Lk9URUxfTk9ERV9FTkFCTEVEX0lOU1RSVU1FTlRBVElPTlMpIHtcbiAgICAgICAgLy8gYWxsIGtleXMgaW4gdGhlIEluc3RydW1lbnRhdGlvbk1hcCBleGNlcHQgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LlxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoSW5zdHJ1bWVudGF0aW9uTWFwKS5maWx0ZXIoa2V5ID0+ICFkZWZhdWx0RXhjbHVkZWRJbnN0cnVtZW50YXRpb25zLmluY2x1ZGVzKGtleSkpO1xuICAgIH1cbiAgICBjb25zdCBpbnN0cnVtZW50YXRpb25zRnJvbUVudiA9IGdldEluc3RydW1lbnRhdGlvbnNGcm9tRW52KCdPVEVMX05PREVfRU5BQkxFRF9JTlNUUlVNRU5UQVRJT05TJyk7XG4gICAgcmV0dXJuIGluc3RydW1lbnRhdGlvbnNGcm9tRW52O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGluc3RydW1lbnRhdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5mdW5jdGlvbiBnZXREaXNhYmxlZEluc3RydW1lbnRhdGlvbnNGcm9tRW52KCkge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuT1RFTF9OT0RFX0RJU0FCTEVEX0lOU1RSVU1FTlRBVElPTlMpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBpbnN0cnVtZW50YXRpb25zRnJvbUVudiA9IGdldEluc3RydW1lbnRhdGlvbnNGcm9tRW52KCdPVEVMX05PREVfRElTQUJMRURfSU5TVFJVTUVOVEFUSU9OUycpO1xuICAgIHJldHVybiBpbnN0cnVtZW50YXRpb25zRnJvbUVudjtcbn1cbmZ1bmN0aW9uIGdldFJlc291cmNlRGV0ZWN0b3JzRnJvbUVudigpIHtcbiAgICBjb25zdCByZXNvdXJjZURldGVjdG9ycyA9IG5ldyBNYXAoW1xuICAgICAgICBbUkVTT1VSQ0VfREVURUNUT1JfQ09OVEFJTkVSLCByZXNvdXJjZV9kZXRlY3Rvcl9jb250YWluZXJfMS5jb250YWluZXJEZXRlY3Rvcl0sXG4gICAgICAgIFtSRVNPVVJDRV9ERVRFQ1RPUl9FTlZJUk9OTUVOVCwgcmVzb3VyY2VzXzEuZW52RGV0ZWN0b3JdLFxuICAgICAgICBbUkVTT1VSQ0VfREVURUNUT1JfSE9TVCwgcmVzb3VyY2VzXzEuaG9zdERldGVjdG9yXSxcbiAgICAgICAgW1JFU09VUkNFX0RFVEVDVE9SX09TLCByZXNvdXJjZXNfMS5vc0RldGVjdG9yXSxcbiAgICAgICAgW1JFU09VUkNFX0RFVEVDVE9SX1NFUlZJQ0VfSU5TVEFOQ0VfSUQsIHJlc291cmNlc18xLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JdLFxuICAgICAgICBbUkVTT1VSQ0VfREVURUNUT1JfUFJPQ0VTUywgcmVzb3VyY2VzXzEucHJvY2Vzc0RldGVjdG9yXSxcbiAgICAgICAgW1JFU09VUkNFX0RFVEVDVE9SX0FMSUJBQkEsIHJlc291cmNlX2RldGVjdG9yX2FsaWJhYmFfY2xvdWRfMS5hbGliYWJhQ2xvdWRFY3NEZXRlY3Rvcl0sXG4gICAgICAgIFtSRVNPVVJDRV9ERVRFQ1RPUl9HQ1AsIHJlc291cmNlX2RldGVjdG9yX2djcF8xLmdjcERldGVjdG9yXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgUkVTT1VSQ0VfREVURUNUT1JfQVdTLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHJlc291cmNlX2RldGVjdG9yX2F3c18xLmF3c0VjMkRldGVjdG9yLFxuICAgICAgICAgICAgICAgIHJlc291cmNlX2RldGVjdG9yX2F3c18xLmF3c0Vjc0RldGVjdG9yLFxuICAgICAgICAgICAgICAgIHJlc291cmNlX2RldGVjdG9yX2F3c18xLmF3c0Vrc0RldGVjdG9yLFxuICAgICAgICAgICAgICAgIHJlc291cmNlX2RldGVjdG9yX2F3c18xLmF3c0JlYW5zdGFsa0RldGVjdG9yLFxuICAgICAgICAgICAgICAgIHJlc291cmNlX2RldGVjdG9yX2F3c18xLmF3c0xhbWJkYURldGVjdG9yLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgUkVTT1VSQ0VfREVURUNUT1JfQVpVUkUsXG4gICAgICAgICAgICBbcmVzb3VyY2VfZGV0ZWN0b3JfYXp1cmVfMS5henVyZUFwcFNlcnZpY2VEZXRlY3RvciwgcmVzb3VyY2VfZGV0ZWN0b3JfYXp1cmVfMS5henVyZUZ1bmN0aW9uc0RldGVjdG9yLCByZXNvdXJjZV9kZXRlY3Rvcl9henVyZV8xLmF6dXJlVm1EZXRlY3Rvcl0sXG4gICAgICAgIF0sXG4gICAgXSk7XG4gICAgY29uc3QgcmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52ID0gcHJvY2Vzcy5lbnYuT1RFTF9OT0RFX1JFU09VUkNFX0RFVEVDVE9SUz8uc3BsaXQoJywnKSA/PyBbJ2FsbCddO1xuICAgIGlmIChyZXNvdXJjZURldGVjdG9yc0Zyb21FbnYuaW5jbHVkZXMoJ2FsbCcpKSB7XG4gICAgICAgIHJldHVybiBbLi4ucmVzb3VyY2VEZXRlY3RvcnMudmFsdWVzKCldLmZsYXQoKTtcbiAgICB9XG4gICAgaWYgKHJlc291cmNlRGV0ZWN0b3JzRnJvbUVudi5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlRGV0ZWN0b3JzRnJvbUVudi5mbGF0TWFwKGRldGVjdG9yID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VEZXRlY3RvciA9IHJlc291cmNlRGV0ZWN0b3JzLmdldChkZXRlY3Rvcik7XG4gICAgICAgIGlmICghcmVzb3VyY2VEZXRlY3Rvcikge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgSW52YWxpZCByZXNvdXJjZSBkZXRlY3RvciBcIiR7ZGV0ZWN0b3J9XCIgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBPVEVMX05PREVfUkVTT1VSQ0VfREVURUNUT1JTYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlRGV0ZWN0b3IgfHwgW107XG4gICAgfSk7XG59XG5leHBvcnRzLmdldFJlc291cmNlRGV0ZWN0b3JzRnJvbUVudiA9IGdldFJlc291cmNlRGV0ZWN0b3JzRnJvbUVudjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJlc291cmNlRGV0ZWN0b3JzID0gZXhwb3J0cy5nZXROb2RlQXV0b0luc3RydW1lbnRhdGlvbnMgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5nZXROb2RlQXV0b0luc3RydW1lbnRhdGlvbnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRSZXNvdXJjZURldGVjdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5nZXRSZXNvdXJjZURldGVjdG9yc0Zyb21FbnY7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUEV4cG9ydGVyQmFzZSA9IHZvaWQgMDtcbmNsYXNzIE9UTFBFeHBvcnRlckJhc2Uge1xuICAgIF9kZWxlZ2F0ZTtcbiAgICBjb25zdHJ1Y3RvcihfZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBfZGVsZWdhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydCBpdGVtcy5cbiAgICAgKiBAcGFyYW0gaXRlbXNcbiAgICAgKiBAcGFyYW0gcmVzdWx0Q2FsbGJhY2tcbiAgICAgKi9cbiAgICBleHBvcnQoaXRlbXMsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlLmV4cG9ydChpdGVtcywgcmVzdWx0Q2FsbGJhY2spO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuZm9yY2VGbHVzaCgpO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLnNodXRkb3duKCk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQRXhwb3J0ZXJCYXNlID0gT1RMUEV4cG9ydGVyQmFzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBFeHBvcnRlckJhc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBFeHBvcnRlckVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGhhbmRsaW5nIGVycm9yXG4gKi9cbmNsYXNzIE9UTFBFeHBvcnRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvZGU7XG4gICAgbmFtZSA9ICdPVExQRXhwb3J0ZXJFcnJvcic7XG4gICAgZGF0YTtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUEV4cG9ydGVyRXJyb3IgPSBPVExQRXhwb3J0ZXJFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBleHBvcnRzLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBleHBvcnRzLndyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbiA9IGV4cG9ydHMudmFsaWRhdGVUaW1lb3V0TWlsbGlzID0gdm9pZCAwO1xuZnVuY3Rpb24gdmFsaWRhdGVUaW1lb3V0TWlsbGlzKHRpbWVvdXRNaWxsaXMpIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNaWxsaXMpICYmIHRpbWVvdXRNaWxsaXMgPiAwKSB7XG4gICAgICAgIHJldHVybiB0aW1lb3V0TWlsbGlzO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZ3VyYXRpb246IHRpbWVvdXRNaWxsaXMgaXMgaW52YWxpZCwgZXhwZWN0ZWQgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIChhY3R1YWw6ICcke3RpbWVvdXRNaWxsaXN9JylgKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVUaW1lb3V0TWlsbGlzID0gdmFsaWRhdGVUaW1lb3V0TWlsbGlzO1xuZnVuY3Rpb24gd3JhcFN0YXRpY0hlYWRlcnNJbkZ1bmN0aW9uKGhlYWRlcnMpIHtcbiAgICBpZiAoaGVhZGVycyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBoZWFkZXJzO1xufVxuZXhwb3J0cy53cmFwU3RhdGljSGVhZGVyc0luRnVuY3Rpb24gPSB3cmFwU3RhdGljSGVhZGVyc0luRnVuY3Rpb247XG4vKipcbiAqIEBwYXJhbSB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uICBDb25maWd1cmF0aW9uIG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgaW4gY29kZS5cbiAqIEBwYXJhbSBmYWxsYmFja0NvbmZpZ3VyYXRpb24gRmFsbGJhY2sgdG8gdXNlIHdoZW4gdGhlIHtAbGluayB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9ufSBkb2VzIG5vdCBzcGVjaWZ5IGFuIG9wdGlvbi5cbiAqIEBwYXJhbSBkZWZhdWx0Q29uZmlndXJhdGlvbiBUaGUgZGVmYXVsdHMgYXMgZGVmaW5lZCBieSB0aGUgZXhwb3J0ZXIgc3BlY2lmaWNhdGlvblxuICovXG5mdW5jdGlvbiBtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24sIGZhbGxiYWNrQ29uZmlndXJhdGlvbiwgZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0aW1lb3V0TWlsbGlzOiB2YWxpZGF0ZVRpbWVvdXRNaWxsaXModXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi50aW1lb3V0TWlsbGlzID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24udGltZW91dE1pbGxpcyA/P1xuICAgICAgICAgICAgZGVmYXVsdENvbmZpZ3VyYXRpb24udGltZW91dE1pbGxpcyksXG4gICAgICAgIGNvbmN1cnJlbmN5TGltaXQ6IHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24uY29uY3VycmVuY3lMaW1pdCA/P1xuICAgICAgICAgICAgZmFsbGJhY2tDb25maWd1cmF0aW9uLmNvbmN1cnJlbmN5TGltaXQgPz9cbiAgICAgICAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbmN1cnJlbmN5TGltaXQsXG4gICAgICAgIGNvbXByZXNzaW9uOiB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLmNvbXByZXNzaW9uID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24uY29tcHJlc3Npb24gPz9cbiAgICAgICAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbXByZXNzaW9uLFxuICAgIH07XG59XG5leHBvcnRzLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzO1xuZnVuY3Rpb24gZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVvdXRNaWxsaXM6IDEwMDAwLFxuICAgICAgICBjb25jdXJyZW5jeUxpbWl0OiAzMCxcbiAgICAgICAgY29tcHJlc3Npb246ICdub25lJyxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBnZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG0gPSB2b2lkIDA7XG52YXIgQ29tcHJlc3Npb25BbGdvcml0aG07XG4oZnVuY3Rpb24gKENvbXByZXNzaW9uQWxnb3JpdGhtKSB7XG4gICAgQ29tcHJlc3Npb25BbGdvcml0aG1bXCJOT05FXCJdID0gXCJub25lXCI7XG4gICAgQ29tcHJlc3Npb25BbGdvcml0aG1bXCJHWklQXCJdID0gXCJnemlwXCI7XG59KShDb21wcmVzc2lvbkFsZ29yaXRobSA9IGV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG0gfHwgKGV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG0gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGVnYWN5LW5vZGUtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlciB7XG4gICAgX2NvbmN1cnJlbmN5TGltaXQ7XG4gICAgX3NlbmRpbmdQcm9taXNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeUxpbWl0IG1heGltdW0gcHJvbWlzZXMgYWxsb3dlZCBpbiBhIHF1ZXVlIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uY3VycmVuY3lMaW1pdCkge1xuICAgICAgICB0aGlzLl9jb25jdXJyZW5jeUxpbWl0ID0gY29uY3VycmVuY3lMaW1pdDtcbiAgICB9XG4gICAgcHVzaFByb21pc2UocHJvbWlzZSkge1xuICAgICAgICBpZiAodGhpcy5oYXNSZWFjaGVkTGltaXQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBMaW1pdCByZWFjaGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VuZGluZ1Byb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIGNvbnN0IHBvcFByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbmRpbmdQcm9taXNlcy5pbmRleE9mKHByb21pc2UpO1xuICAgICAgICAgICAgdm9pZCB0aGlzLl9zZW5kaW5nUHJvbWlzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvbWlzZS50aGVuKHBvcFByb21pc2UsIHBvcFByb21pc2UpO1xuICAgIH1cbiAgICBoYXNSZWFjaGVkTGltaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kaW5nUHJvbWlzZXMubGVuZ3RoID49IHRoaXMuX2NvbmN1cnJlbmN5TGltaXQ7XG4gICAgfVxuICAgIGFzeW5jIGF3YWl0QWxsKCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zZW5kaW5nUHJvbWlzZXMpO1xuICAgIH1cbn1cbi8qKlxuICogUHJvbWlzZSBxdWV1ZSBmb3Iga2VlcGluZyB0cmFjayBvZiBleHBvcnQgcHJvbWlzZXMuIEZpbmlzaGVkIHByb21pc2VzIHdpbGwgYmUgYXV0by1kZXF1ZXVlZC5cbiAqIEFsbG93cyBmb3IgYXdhaXRpbmcgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIob3B0aW9ucy5jb25jdXJyZW5jeUxpbWl0KTtcbn1cbmV4cG9ydHMuY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIgPSBjcmVhdGVCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvdW5kZWQtcXVldWUtZXhwb3J0LXByb21pc2UtaGFuZGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZnVuY3Rpb24gaXNQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXNwb25zZSwgJ3BhcnRpYWxTdWNjZXNzJyk7XG59XG4vKipcbiAqIERlZmF1bHQgcmVzcG9uc2UgaGFuZGxlciB0aGF0IGxvZ3MgYSBwYXJ0aWFsIHN1Y2Nlc3MgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlSGFuZGxlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBoYW5kbGVSZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gUGFydGlhbCBzdWNjZXNzIE1VU1QgbmV2ZXIgYmUgYW4gZW1wdHkgb2JqZWN0IGFjY29yZGluZyB0aGUgc3BlY2lmaWNhdGlvblxuICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL290bHAvI3BhcnRpYWwtc3VjY2Vzc1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAhaXNQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSB8fFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnBhcnRpYWxTdWNjZXNzID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5wYXJ0aWFsU3VjY2VzcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdSZWNlaXZlZCBQYXJ0aWFsIFN1Y2Nlc3MgcmVzcG9uc2U6JywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UucGFydGlhbFN1Y2Nlc3MpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXIgPSBjcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dnaW5nLXJlc3BvbnNlLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZSA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgbG9nZ2luZ19yZXNwb25zZV9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9sb2dnaW5nLXJlc3BvbnNlLWhhbmRsZXJcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jbGFzcyBPVExQRXhwb3J0RGVsZWdhdGUge1xuICAgIF90cmFuc3BvcnQ7XG4gICAgX3NlcmlhbGl6ZXI7XG4gICAgX3Jlc3BvbnNlSGFuZGxlcjtcbiAgICBfcHJvbWlzZVF1ZXVlO1xuICAgIF90aW1lb3V0O1xuICAgIF9kaWFnTG9nZ2VyO1xuICAgIGNvbnN0cnVjdG9yKF90cmFuc3BvcnQsIF9zZXJpYWxpemVyLCBfcmVzcG9uc2VIYW5kbGVyLCBfcHJvbWlzZVF1ZXVlLCBfdGltZW91dCkge1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBfdHJhbnNwb3J0O1xuICAgICAgICB0aGlzLl9zZXJpYWxpemVyID0gX3NlcmlhbGl6ZXI7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlciA9IF9yZXNwb25zZUhhbmRsZXI7XG4gICAgICAgIHRoaXMuX3Byb21pc2VRdWV1ZSA9IF9wcm9taXNlUXVldWU7XG4gICAgICAgIHRoaXMuX3RpbWVvdXQgPSBfdGltZW91dDtcbiAgICAgICAgdGhpcy5fZGlhZ0xvZ2dlciA9IGFwaV8xLmRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogJ09UTFBFeHBvcnREZWxlZ2F0ZScsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHBvcnQoaW50ZXJuYWxSZXByZXNlbnRhdGlvbiwgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZGlhZ0xvZ2dlci5kZWJ1ZygnaXRlbXMgdG8gYmUgc2VudCcsIGludGVybmFsUmVwcmVzZW50YXRpb24pO1xuICAgICAgICAvLyBkb24ndCBkbyBhbnkgd29yayBpZiB0b28gbWFueSBleHBvcnRzIGFyZSBpbiBwcm9ncmVzcy5cbiAgICAgICAgaWYgKHRoaXMuX3Byb21pc2VRdWV1ZS5oYXNSZWFjaGVkTGltaXQoKSkge1xuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdDb25jdXJyZW50IGV4cG9ydCBsaW1pdCByZWFjaGVkJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXJpYWxpemVkUmVxdWVzdCA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdChpbnRlcm5hbFJlcHJlc2VudGF0aW9uKTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRSZXF1ZXN0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignTm90aGluZyB0byBzZW5kJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcm9taXNlUXVldWUucHVzaFByb21pc2UodGhpcy5fdHJhbnNwb3J0LnNlbmQoc2VyaWFsaXplZFJlcXVlc3QsIHRoaXMuX3RpbWVvdXQpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VIYW5kbGVyLmhhbmRsZVJlc3BvbnNlKHRoaXMuX3NlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWdMb2dnZXIud2FybignRXhwb3J0IHN1Y2NlZWRlZCBidXQgY291bGQgbm90IGRlc2VyaWFsaXplIHJlc3BvbnNlIC0gaXMgdGhlIHJlc3BvbnNlIHNwZWNpZmljYXRpb24gY29tcGxpYW50PycsIGUsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE5vIG1hdHRlciB0aGUgcmVzcG9uc2UsIHdlIGNhbiBjb25zaWRlciB0aGUgZXhwb3J0IHN0aWxsIHN1Y2Nlc3NmdWwuXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2ZhaWx1cmUnICYmIHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiByZXNwb25zZS5lcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdyZXRyeWFibGUnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgdHlwZXNfMS5PVExQRXhwb3J0ZXJFcnJvcignRXhwb3J0IGZhaWxlZCB3aXRoIHJldHJ5YWJsZSBzdGF0dXMnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IHR5cGVzXzEuT1RMUEV4cG9ydGVyRXJyb3IoJ0V4cG9ydCBmYWlsZWQgd2l0aCB1bmtub3duIGVycm9yJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHJlYXNvbiA9PiByZXN1bHRDYWxsYmFjayh7XG4gICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICBlcnJvcjogcmVhc29uLFxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZVF1ZXVlLmF3YWl0QWxsKCk7XG4gICAgfVxuICAgIGFzeW5jIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9kaWFnTG9nZ2VyLmRlYnVnKCdzaHV0ZG93biBzdGFydGVkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQuc2h1dGRvd24oKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBnZW5lcmljIGRlbGVnYXRlIGZvciBPVExQIGV4cG9ydHMgd2hpY2ggb25seSBjb250YWlucyBwYXJ0cyBvZiB0aGUgT1RMUCBleHBvcnQgdGhhdCBhcmUgc2hhcmVkIGFjcm9zcyBhbGxcbiAqIHNpZ25hbHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZShjb21wb25lbnRzLCBzZXR0aW5ncykge1xuICAgIHJldHVybiBuZXcgT1RMUEV4cG9ydERlbGVnYXRlKGNvbXBvbmVudHMudHJhbnNwb3J0LCBjb21wb25lbnRzLnNlcmlhbGl6ZXIsICgwLCBsb2dnaW5nX3Jlc3BvbnNlX2hhbmRsZXJfMS5jcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXIpKCksIGNvbXBvbmVudHMucHJvbWlzZUhhbmRsZXIsIHNldHRpbmdzLnRpbWVvdXQpO1xufVxuZXhwb3J0cy5jcmVhdGVPdGxwRXhwb3J0RGVsZWdhdGUgPSBjcmVhdGVPdGxwRXhwb3J0RGVsZWdhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLWV4cG9ydC1kZWxlZ2F0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZSA9IHZvaWQgMDtcbmNvbnN0IGJvdW5kZWRfcXVldWVfZXhwb3J0X3Byb21pc2VfaGFuZGxlcl8xID0gcmVxdWlyZShcIi4vYm91bmRlZC1xdWV1ZS1leHBvcnQtcHJvbWlzZS1oYW5kbGVyXCIpO1xuY29uc3Qgb3RscF9leHBvcnRfZGVsZWdhdGVfMSA9IHJlcXVpcmUoXCIuL290bHAtZXhwb3J0LWRlbGVnYXRlXCIpO1xuZnVuY3Rpb24gY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZShvcHRpb25zLCBzZXJpYWxpemVyLCB0cmFuc3BvcnQpIHtcbiAgICByZXR1cm4gKDAsIG90bHBfZXhwb3J0X2RlbGVnYXRlXzEuY3JlYXRlT3RscEV4cG9ydERlbGVnYXRlKSh7XG4gICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0LFxuICAgICAgICBzZXJpYWxpemVyLFxuICAgICAgICBwcm9taXNlSGFuZGxlcjogKDAsIGJvdW5kZWRfcXVldWVfZXhwb3J0X3Byb21pc2VfaGFuZGxlcl8xLmNyZWF0ZUJvdW5kZWRRdWV1ZUV4cG9ydFByb21pc2VIYW5kbGVyKShvcHRpb25zKSxcbiAgICB9LCB7IHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dE1pbGxpcyB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZSA9IGNyZWF0ZU90bHBOZXR3b3JrRXhwb3J0RGVsZWdhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLW5ldHdvcmstZXhwb3J0LWRlbGVnYXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlID0gZXhwb3J0cy5Db21wcmVzc2lvbkFsZ29yaXRobSA9IGV4cG9ydHMuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzID0gZXhwb3J0cy5tZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gZXhwb3J0cy5PVExQRXhwb3J0ZXJFcnJvciA9IGV4cG9ydHMuT1RMUEV4cG9ydGVyQmFzZSA9IHZvaWQgMDtcbnZhciBPVExQRXhwb3J0ZXJCYXNlXzEgPSByZXF1aXJlKFwiLi9PVExQRXhwb3J0ZXJCYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUEV4cG9ydGVyQmFzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUEV4cG9ydGVyQmFzZV8xLk9UTFBFeHBvcnRlckJhc2U7IH0gfSk7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUEV4cG9ydGVyRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuT1RMUEV4cG9ydGVyRXJyb3I7IH0gfSk7XG52YXIgc2hhcmVkX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb24vc2hhcmVkLWNvbmZpZ3VyYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZWRfY29uZmlndXJhdGlvbl8xLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlZF9jb25maWd1cmF0aW9uXzEuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzOyB9IH0pO1xudmFyIGxlZ2FjeV9ub2RlX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb24vbGVnYWN5LW5vZGUtY29uZmlndXJhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbXByZXNzaW9uQWxnb3JpdGhtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsZWdhY3lfbm9kZV9jb25maWd1cmF0aW9uXzEuQ29tcHJlc3Npb25BbGdvcml0aG07IH0gfSk7XG52YXIgb3RscF9uZXR3b3JrX2V4cG9ydF9kZWxlZ2F0ZV8xID0gcmVxdWlyZShcIi4vb3RscC1uZXR3b3JrLWV4cG9ydC1kZWxlZ2F0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU90bHBOZXR3b3JrRXhwb3J0RGVsZWdhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG90bHBfbmV0d29ya19leHBvcnRfZGVsZWdhdGVfMS5jcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBhc1Byb21pc2U7XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5hc1Byb21pc2V9LlxyXG4gKiBAdHlwZWRlZiBhc1Byb21pc2VDYWxsYmFja1xyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBBZGRpdGlvbmFsIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSBmcm9tIGEgbm9kZS1zdHlsZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHthc1Byb21pc2VDYWxsYmFja30gZm4gRnVuY3Rpb24gdG8gY2FsbFxyXG4gKiBAcGFyYW0geyp9IGN0eCBGdW5jdGlvbiBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEZ1bmN0aW9uIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTwqPn0gUHJvbWlzaWZpZWQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGFzUHJvbWlzZShmbiwgY3R4LyosIHZhcmFyZ3MgKi8pIHtcclxuICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICBvZmZzZXQgID0gMCxcclxuICAgICAgICBpbmRleCAgID0gMixcclxuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcclxuICAgIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpXHJcbiAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0XSA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVyci8qLCB2YXJhcmdzICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlLmFwcGx5KG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgbWluaW1hbCBiYXNlNjQgaW1wbGVtZW50YXRpb24gZm9yIG51bWJlciBhcnJheXMuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbnZhciBiYXNlNjQgPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGJ5dGUgbGVuZ3RoIG9mIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIEJhc2U2NCBlbmNvZGVkIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlIGxlbmd0aFxyXG4gKi9cclxuYmFzZTY0Lmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aChzdHJpbmcpIHtcclxuICAgIHZhciBwID0gc3RyaW5nLmxlbmd0aDtcclxuICAgIGlmICghcClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciBuID0gMDtcclxuICAgIHdoaWxlICgtLXAgJSA0ID4gMSAmJiBzdHJpbmcuY2hhckF0KHApID09PSBcIj1cIilcclxuICAgICAgICArK247XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHN0cmluZy5sZW5ndGggKiAzKSAvIDQgLSBuO1xyXG59O1xyXG5cclxuLy8gQmFzZTY0IGVuY29kaW5nIHRhYmxlXHJcbnZhciBiNjQgPSBuZXcgQXJyYXkoNjQpO1xyXG5cclxuLy8gQmFzZTY0IGRlY29kaW5nIHRhYmxlXHJcbnZhciBzNjQgPSBuZXcgQXJyYXkoMTIzKTtcclxuXHJcbi8vIDY1Li45MCwgOTcuLjEyMiwgNDguLjU3LCA0MywgNDdcclxuZm9yICh2YXIgaSA9IDA7IGkgPCA2NDspXHJcbiAgICBzNjRbYjY0W2ldID0gaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpIC0gNTkgfCA0M10gPSBpKys7XHJcblxyXG4vKipcclxuICogRW5jb2RlcyBhIGJ1ZmZlciB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgU291cmNlIHN0YXJ0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgU291cmNlIGVuZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICovXHJcbmJhc2U2NC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoYnVmZmVyLCBzdGFydCwgZW5kKSB7XHJcbiAgICB2YXIgcGFydHMgPSBudWxsLFxyXG4gICAgICAgIGNodW5rID0gW107XHJcbiAgICB2YXIgaSA9IDAsIC8vIG91dHB1dCBpbmRleFxyXG4gICAgICAgIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XHJcbiAgICAgICAgdmFyIGIgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiA+PiAyXTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDMpIDw8IDQ7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W3QgfCBiID4+IDRdO1xyXG4gICAgICAgICAgICAgICAgdCA9IChiICYgMTUpIDw8IDI7XHJcbiAgICAgICAgICAgICAgICBqID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W3QgfCBiID4+IDZdO1xyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFtiICYgNjNdO1xyXG4gICAgICAgICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XHJcbiAgICAgICAgICAgIChwYXJ0cyB8fCAocGFydHMgPSBbXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChqKSB7XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0XTtcclxuICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICAgICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSA2MTtcclxuICAgIH1cclxuICAgIGlmIChwYXJ0cykge1xyXG4gICAgICAgIGlmIChpKVxyXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSkpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSk7XHJcbn07XHJcblxyXG52YXIgaW52YWxpZEVuY29kaW5nID0gXCJpbnZhbGlkIGVuY29kaW5nXCI7XHJcblxyXG4vKipcclxuICogRGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byBhIGJ1ZmZlci5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlblxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZW5jb2RpbmcgaXMgaW52YWxpZFxyXG4gKi9cclxuYmFzZTY0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQ7XHJcbiAgICB2YXIgaiA9IDAsIC8vIGdvdG8gaW5kZXhcclxuICAgICAgICB0OyAgICAgLy8gdGVtcG9yYXJ5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChjID09PSA2MSAmJiBqID4gMSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgaWYgKChjID0gczY0W2NdKSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkRW5jb2RpbmcpO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSB0IDw8IDIgfCAoYyAmIDQ4KSA+PiA0O1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAxNSkgPDwgNCB8IChjICYgNjApID4+IDI7XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSAodCAmIDMpIDw8IDYgfCBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaiA9PT0gMSlcclxuICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkRW5jb2RpbmcpO1xyXG4gICAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGFwcGVhcnMgdG8gYmUgYmFzZTY0IGVuY29kZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIHRlc3RcclxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBwcm9iYWJseSBiYXNlNjQgZW5jb2RlZCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAqL1xyXG5iYXNlNjQudGVzdCA9IGZ1bmN0aW9uIHRlc3Qoc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvLnRlc3Qoc3RyaW5nKTtcclxufTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XHJcblxyXG4vKipcclxuICogQ29uc3RydWN0cyBhIG5ldyBldmVudCBlbWl0dGVyIGluc3RhbmNlLlxyXG4gKiBAY2xhc3NkZXNjIEEgbWluaW1hbCBldmVudCBlbWl0dGVyLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxyXG4gICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCo+fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBMaXN0ZW5lclxyXG4gKiBAcGFyYW0geyp9IFtjdHhdIExpc3RlbmVyIGNvbnRleHRcclxuICogQHJldHVybnMge3V0aWwuRXZlbnRFbWl0dGVyfSBgdGhpc2BcclxuICovXHJcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldnQsIGZuLCBjdHgpIHtcclxuICAgICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSB8fCAodGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXSkpLnB1c2goe1xyXG4gICAgICAgIGZuICA6IGZuLFxyXG4gICAgICAgIGN0eCA6IGN0eCB8fCB0aGlzXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgb3IgYW55IG1hdGNoaW5nIGxpc3RlbmVycyBpZiBhcmd1bWVudHMgYXJlIG9taXR0ZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZXZ0XSBFdmVudCBuYW1lLiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMgaWYgb21pdHRlZC5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2ZuXSBMaXN0ZW5lciB0byByZW1vdmUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBvZiBgZXZ0YCBpZiBvbWl0dGVkLlxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiBvZmYoZXZ0LCBmbikge1xyXG4gICAgaWYgKGV2dCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGZuID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1tldnRdID0gW107XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZ0XTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOylcclxuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0uZm4gPT09IGZuKVxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKytpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEVtaXRzIGFuIGV2ZW50IGJ5IGNhbGxpbmcgaXRzIGxpc3RlbmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZ0IEV2ZW50IG5hbWVcclxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldnQpIHtcclxuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZ0XTtcclxuICAgIGlmIChsaXN0ZW5lcnMpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdLFxyXG4gICAgICAgICAgICBpID0gMTtcclxuICAgICAgICBmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOylcclxuICAgICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpKytdLmN0eCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmYWN0b3J5KTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyAvIHdyaXRlcyBmbG9hdHMgLyBkb3VibGVzIGZyb20gLyB0byBidWZmZXJzLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0XHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLy8gRmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm9kZS1iYXNlZCB0ZXN0aW5nIGluIG1vZGlmaWVkIGdsb2JhbCBlbnZpcm9ubWVudHNcclxuZnVuY3Rpb24gZmFjdG9yeShleHBvcnRzKSB7XHJcblxyXG4gICAgLy8gZmxvYXQ6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShbIC0wIF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmMzIuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzNdID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9jcHkgOiB3cml0ZUZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfcmV2IDogd3JpdGVGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfY3B5IDogcmVhZEZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gbGUgPyByZWFkRmxvYXRfZjMyX3JldiA6IHJlYWRGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgIC8vIGZsb2F0OiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9pZWVlNzU0KHdyaXRlVWludCwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc05hTih2YWwpKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDMyODkzNDQsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMy40MDI4MjM0NjYzODUyODg2ZSszOCkgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgMS4xNzU0OTQzNTA4MjIyODc1ZS0zOCkgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IE1hdGgucm91bmQodmFsIC8gMS40MDEyOTg0NjQzMjQ4MTdlLTQ1KSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBNYXRoLnJvdW5kKHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCkgKiA4Mzg4NjA4KSAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEyNyA8PCAyMyB8IG1hbnRpc3NhKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFKTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2llZWU3NTQocmVhZFVpbnQsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciB1aW50ID0gcmVhZFVpbnQoYnVmLCBwb3MpLFxyXG4gICAgICAgICAgICAgICAgc2lnbiA9ICh1aW50ID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSB1aW50ID4+PiAyMyAmIDI1NSxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdWludCAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjU1XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE1MCkgKiAobWFudGlzc2EgKyA4Mzg4NjA4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUpO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgLy8gZG91YmxlOiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGY2NC5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbN10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbN107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbN107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfY3B5IDogd3JpdGVEb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X3JldiA6IHdyaXRlRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSBsZSA/IHJlYWREb3VibGVfZjY0X2NweSA6IHJlYWREb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9yZXYgOiByZWFkRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgLy8gZG91YmxlOiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfaWVlZTc1NCh3cml0ZVVpbnQsIG9mZjAsIG9mZjEsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDY5NTkzNjAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpIHsgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTQ2NDM1MDcyKSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYW50aXNzYTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgeyAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsIC8gNWUtMzI0O1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBtYW50aXNzYSAvIDQyOTQ5NjcyOTYpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09PSAxMDI0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDEwMjM7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSAqIDQ1MDM1OTk2MjczNzA0OTYgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMDIzIDw8IDIwIHwgbWFudGlzc2EgKiAxMDQ4NTc2ICYgMTA0ODU3NSkgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9pZWVlNzU0KHJlYWRVaW50LCBvZmYwLCBvZmYxLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgbG8gPSByZWFkVWludChidWYsIHBvcyArIG9mZjApLFxyXG4gICAgICAgICAgICAgICAgaGkgPSByZWFkVWludChidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IChoaSA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gaGkgPj4+IDIwICYgMjA0NyxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gNDI5NDk2NzI5NiAqIChoaSAmIDEwNDg1NzUpICsgbG87XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjA0N1xyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiA1ZS0zMjQgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxMDc1KSAqIChtYW50aXNzYSArIDQ1MDM1OTk2MjczNzA0OTYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbn1cclxuXHJcbi8vIHVpbnQgaGVscGVyc1xyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50TEUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludEJFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgPj4+IDI0O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludExFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXVxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdIDw8IDI0KSA+Pj4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRCRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF0gPDwgMjRcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSkgPj4+IDA7XHJcbn1cclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBpbnF1aXJlO1xyXG5cclxuLyoqXHJcbiAqIFJlcXVpcmVzIGEgbW9kdWxlIG9ubHkgaWYgYXZhaWxhYmxlLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSBNb2R1bGUgdG8gcmVxdWlyZVxyXG4gKiBAcmV0dXJucyB7P09iamVjdH0gUmVxdWlyZWQgbW9kdWxlIGlmIGF2YWlsYWJsZSBhbmQgbm90IGVtcHR5LCBvdGhlcndpc2UgYG51bGxgXHJcbiAqL1xyXG5mdW5jdGlvbiBpbnF1aXJlKG1vZHVsZU5hbWUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG1vZCA9IGV2YWwoXCJxdWlyZVwiLnJlcGxhY2UoL14vLFwicmVcIikpKG1vZHVsZU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcclxuICAgICAgICBpZiAobW9kICYmIChtb2QubGVuZ3RoIHx8IE9iamVjdC5rZXlzKG1vZCkubGVuZ3RoKSlcclxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcclxuICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuICogQSBtaW5pbWFsIFVURjggaW1wbGVtZW50YXRpb24gZm9yIG51bWJlciBhcnJheXMuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbnZhciB1dGY4ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBVVEY4IGJ5dGUgbGVuZ3RoIG9mIGEgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZ1xyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlIGxlbmd0aFxyXG4gKi9cclxudXRmOC5sZW5ndGggPSBmdW5jdGlvbiB1dGY4X2xlbmd0aChzdHJpbmcpIHtcclxuICAgIHZhciBsZW4gPSAwLFxyXG4gICAgICAgIGMgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMgPCAxMjgpXHJcbiAgICAgICAgICAgIGxlbiArPSAxO1xyXG4gICAgICAgIGVsc2UgaWYgKGMgPCAyMDQ4KVxyXG4gICAgICAgICAgICBsZW4gKz0gMjtcclxuICAgICAgICBlbHNlIGlmICgoYyAmIDB4RkMwMCkgPT09IDB4RDgwMCAmJiAoc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwKSB7XHJcbiAgICAgICAgICAgICsraTtcclxuICAgICAgICAgICAgbGVuICs9IDQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIGxlbiArPSAzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBVVEY4IGJ5dGVzIGFzIGEgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTb3VyY2Ugc3RhcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBTb3VyY2UgZW5kXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyByZWFkXHJcbiAqL1xyXG51dGY4LnJlYWQgPSBmdW5jdGlvbiB1dGY4X3JlYWQoYnVmZmVyLCBzdGFydCwgZW5kKSB7XHJcbiAgICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XHJcbiAgICBpZiAobGVuIDwgMSlcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIHZhciBwYXJ0cyA9IG51bGwsXHJcbiAgICAgICAgY2h1bmsgPSBbXSxcclxuICAgICAgICBpID0gMCwgLy8gY2hhciBvZmZzZXRcclxuICAgICAgICB0OyAgICAgLy8gdGVtcG9yYXJ5XHJcbiAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcclxuICAgICAgICB0ID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIGlmICh0IDwgMTI4KVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gdDtcclxuICAgICAgICBlbHNlIGlmICh0ID4gMTkxICYmIHQgPCAyMjQpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDMxKSA8PCA2IHwgYnVmZmVyW3N0YXJ0KytdICYgNjM7XHJcbiAgICAgICAgZWxzZSBpZiAodCA+IDIzOSAmJiB0IDwgMzY1KSB7XHJcbiAgICAgICAgICAgIHQgPSAoKHQgJiA3KSA8PCAxOCB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MykgLSAweDEwMDAwO1xyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEODAwICsgKHQgPj4gMTApO1xyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEQzAwICsgKHQgJiAxMDIzKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMTUpIDw8IDEyIHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCA2IHwgYnVmZmVyW3N0YXJ0KytdICYgNjM7XHJcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XHJcbiAgICAgICAgICAgIChwYXJ0cyB8fCAocGFydHMgPSBbXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwYXJ0cykge1xyXG4gICAgICAgIGlmIChpKVxyXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSkpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgc3RyaW5nIGFzIFVURjggYnl0ZXMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZXMgd3JpdHRlblxyXG4gKi9cclxudXRmOC53cml0ZSA9IGZ1bmN0aW9uIHV0Zjhfd3JpdGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0LFxyXG4gICAgICAgIGMxLCAvLyBjaGFyYWN0ZXIgMVxyXG4gICAgICAgIGMyOyAvLyBjaGFyYWN0ZXIgMlxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjMSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIGlmIChjMSA8IDEyOCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjMSA8IDIwNDgpIHtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICAgICAgfCAxOTI7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKGMxICYgMHhGQzAwKSA9PT0gMHhEODAwICYmICgoYzIgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSkpICYgMHhGQzAwKSA9PT0gMHhEQzAwKSB7XHJcbiAgICAgICAgICAgIGMxID0gMHgxMDAwMCArICgoYzEgJiAweDAzRkYpIDw8IDEwKSArIChjMiAmIDB4MDNGRik7XHJcbiAgICAgICAgICAgICsraTtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDE4ICAgICAgfCAyNDA7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiAxMiAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgJiA2MyB8IDEyODtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICAgICAgfCAyMjQ7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0IC0gc3RhcnQ7XHJcbn07XHJcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gcG9vbDtcclxuXHJcbi8qKlxyXG4gKiBBbiBhbGxvY2F0b3IgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbEFsbG9jYXRvclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcclxuICovXHJcblxyXG4vKipcclxuICogQSBzbGljZXIgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbFNsaWNlclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmQgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXIgc2xpY2VcclxuICogQHRoaXMge1VpbnQ4QXJyYXl9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlciBwb29sLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtQb29sQWxsb2NhdG9yfSBhbGxvYyBBbGxvY2F0b3JcclxuICogQHBhcmFtIHtQb29sU2xpY2VyfSBzbGljZSBTbGljZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTgxOTJdIFNsYWIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7UG9vbEFsbG9jYXRvcn0gUG9vbGVkIGFsbG9jYXRvclxyXG4gKi9cclxuZnVuY3Rpb24gcG9vbChhbGxvYywgc2xpY2UsIHNpemUpIHtcclxuICAgIHZhciBTSVpFICAgPSBzaXplIHx8IDgxOTI7XHJcbiAgICB2YXIgTUFYICAgID0gU0laRSA+Pj4gMTtcclxuICAgIHZhciBzbGFiICAgPSBudWxsO1xyXG4gICAgdmFyIG9mZnNldCA9IFNJWkU7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9vbF9hbGxvYyhzaXplKSB7XHJcbiAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiBNQVgpXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvYyhzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IFNJWkUpIHtcclxuICAgICAgICAgICAgc2xhYiA9IGFsbG9jKFNJWkUpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnVmID0gc2xpY2UuY2FsbChzbGFiLCBvZmZzZXQsIG9mZnNldCArPSBzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICYgNykgLy8gYWxpZ24gdG8gMzIgYml0XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgfCA3KSArIDE7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZjtcclxuICAgIH07XHJcbn1cclxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gTG9uZ0JpdHM7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMuXG4gKiBAY2xhc3NkZXNjIEhlbHBlciBjbGFzcyBmb3Igd29ya2luZyB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBsbyBMb3cgMzIgYml0cywgdW5zaWduZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaSBIaWdoIDMyIGJpdHMsIHVuc2lnbmVkXG4gKi9cbmZ1bmN0aW9uIExvbmdCaXRzKGxvLCBoaSkge1xuXG4gICAgLy8gbm90ZSB0aGF0IHRoZSBjYXN0cyBiZWxvdyBhcmUgdGhlb3JldGljYWxseSB1bm5lY2Vzc2FyeSBhcyBvZiB0b2RheSwgYnV0IG9sZGVyIHN0YXRpY2FsbHlcbiAgICAvLyBnZW5lcmF0ZWQgY29udmVydGVyIGNvZGUgbWlnaHQgc3RpbGwgY2FsbCB0aGUgY3RvciB3aXRoIHNpZ25lZCAzMmJpdHMuIGtlcHQgZm9yIGNvbXBhdC5cblxuICAgIC8qKlxuICAgICAqIExvdyBiaXRzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sbyA9IGxvID4+PiAwO1xuXG4gICAgLyoqXG4gICAgICogSGlnaCBiaXRzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oaSA9IGhpID4+PiAwO1xufVxuXG4vKipcbiAqIFplcm8gYml0cy5cbiAqIEBtZW1iZXJvZiB1dGlsLkxvbmdCaXRzXG4gKiBAdHlwZSB7dXRpbC5Mb25nQml0c31cbiAqL1xudmFyIHplcm8gPSBMb25nQml0cy56ZXJvID0gbmV3IExvbmdCaXRzKDAsIDApO1xuXG56ZXJvLnRvTnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuemVyby56ekVuY29kZSA9IHplcm8uenpEZWNvZGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH07XG56ZXJvLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfTtcblxuLyoqXG4gKiBaZXJvIGhhc2guXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xudmFyIHplcm9IYXNoID0gTG9uZ0JpdHMuemVyb0hhc2ggPSBcIlxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFwiO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIHRoZSBzcGVjaWZpZWQgbnVtYmVyLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gSW5zdGFuY2VcbiAqL1xuTG9uZ0JpdHMuZnJvbU51bWJlciA9IGZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHZhciBzaWduID0gdmFsdWUgPCAwO1xuICAgIGlmIChzaWduKVxuICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcbiAgICB2YXIgbG8gPSB2YWx1ZSA+Pj4gMCxcbiAgICAgICAgaGkgPSAodmFsdWUgLSBsbykgLyA0Mjk0OTY3Mjk2ID4+PiAwO1xuICAgIGlmIChzaWduKSB7XG4gICAgICAgIGhpID0gfmhpID4+PiAwO1xuICAgICAgICBsbyA9IH5sbyA+Pj4gMDtcbiAgICAgICAgaWYgKCsrbG8gPiA0Mjk0OTY3Mjk1KSB7XG4gICAgICAgICAgICBsbyA9IDA7XG4gICAgICAgICAgICBpZiAoKytoaSA+IDQyOTQ5NjcyOTUpXG4gICAgICAgICAgICAgICAgaGkgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMobG8sIGhpKTtcbn07XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzIGZyb20gYSBudW1iZXIsIGxvbmcgb3Igc3RyaW5nLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gSW5zdGFuY2VcbiAqL1xuTG9uZ0JpdHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20odmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh1dGlsLkxvbmcpXG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWwuTG9uZy5mcm9tU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIocGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sb3cgfHwgdmFsdWUuaGlnaCA/IG5ldyBMb25nQml0cyh2YWx1ZS5sb3cgPj4+IDAsIHZhbHVlLmhpZ2ggPj4+IDApIDogemVybztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSBwb3NzaWJseSB1bnNhZmUgSmF2YVNjcmlwdCBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bnNpZ25lZD1mYWxzZV0gV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFBvc3NpYmx5IHVuc2FmZSBudW1iZXJcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIodW5zaWduZWQpIHtcbiAgICBpZiAoIXVuc2lnbmVkICYmIHRoaXMuaGkgPj4+IDMxKSB7XG4gICAgICAgIHZhciBsbyA9IH50aGlzLmxvICsgMSA+Pj4gMCxcbiAgICAgICAgICAgIGhpID0gfnRoaXMuaGkgICAgID4+PiAwO1xuICAgICAgICBpZiAoIWxvKVxuICAgICAgICAgICAgaGkgPSBoaSArIDEgPj4+IDA7XG4gICAgICAgIHJldHVybiAtKGxvICsgaGkgKiA0Mjk0OTY3Mjk2KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG8gKyB0aGlzLmhpICogNDI5NDk2NzI5Njtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSBsb25nLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7TG9uZ30gTG9uZ1xuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9Mb25nID0gZnVuY3Rpb24gdG9Mb25nKHVuc2lnbmVkKSB7XG4gICAgcmV0dXJuIHV0aWwuTG9uZ1xuICAgICAgICA/IG5ldyB1dGlsLkxvbmcodGhpcy5sbyB8IDAsIHRoaXMuaGkgfCAwLCBCb29sZWFuKHVuc2lnbmVkKSlcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiB7IGxvdzogdGhpcy5sbyB8IDAsIGhpZ2g6IHRoaXMuaGkgfCAwLCB1bnNpZ25lZDogQm9vbGVhbih1bnNpZ25lZCkgfTtcbn07XG5cbnZhciBjaGFyQ29kZUF0ID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIHRoZSBzcGVjaWZpZWQgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBCaXRzXG4gKi9cbkxvbmdCaXRzLmZyb21IYXNoID0gZnVuY3Rpb24gZnJvbUhhc2goaGFzaCkge1xuICAgIGlmIChoYXNoID09PSB6ZXJvSGFzaClcbiAgICAgICAgcmV0dXJuIHplcm87XG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhcbiAgICAgICAgKCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMClcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMSkgPDwgOFxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAyKSA8PCAxNlxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAzKSA8PCAyNCkgPj4+IDBcbiAgICAsXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDQpXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDUpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNykgPDwgMjQpID4+PiAwXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoLlxuICogQHJldHVybnMge3N0cmluZ30gSGFzaFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9IYXNoID0gZnVuY3Rpb24gdG9IYXNoKCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICB0aGlzLmxvICAgICAgICAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gOCAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDE2ICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAyNCAgICAgICxcbiAgICAgICAgdGhpcy5oaSAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMjRcbiAgICApO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGVuY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekVuY29kZSA9IGZ1bmN0aW9uIHp6RW5jb2RlKCkge1xuICAgIHZhciBtYXNrID0gICB0aGlzLmhpID4+IDMxO1xuICAgIHRoaXMuaGkgID0gKCh0aGlzLmhpIDw8IDEgfCB0aGlzLmxvID4+PiAzMSkgXiBtYXNrKSA+Pj4gMDtcbiAgICB0aGlzLmxvICA9ICggdGhpcy5sbyA8PCAxICAgICAgICAgICAgICAgICAgIF4gbWFzaykgPj4+IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFppZy16YWcgZGVjb2RlcyB0aGlzIGxvbmcgYml0cy5cbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBgdGhpc2BcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnp6RGVjb2RlID0gZnVuY3Rpb24genpEZWNvZGUoKSB7XG4gICAgdmFyIG1hc2sgPSAtKHRoaXMubG8gJiAxKTtcbiAgICB0aGlzLmxvICA9ICgodGhpcy5sbyA+Pj4gMSB8IHRoaXMuaGkgPDwgMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5oaSAgPSAoIHRoaXMuaGkgPj4+IDEgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgdGhpcyBsb25nYml0cyB3aGVuIGVuY29kZWQgYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBMZW5ndGhcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aCgpIHtcbiAgICB2YXIgcGFydDAgPSAgdGhpcy5sbyxcbiAgICAgICAgcGFydDEgPSAodGhpcy5sbyA+Pj4gMjggfCB0aGlzLmhpIDw8IDQpID4+PiAwLFxuICAgICAgICBwYXJ0MiA9ICB0aGlzLmhpID4+PiAyNDtcbiAgICByZXR1cm4gcGFydDIgPT09IDBcbiAgICAgICAgID8gcGFydDEgPT09IDBcbiAgICAgICAgICAgPyBwYXJ0MCA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MCA8IDEyOCA/IDEgOiAyXG4gICAgICAgICAgICAgOiBwYXJ0MCA8IDIwOTcxNTIgPyAzIDogNFxuICAgICAgICAgICA6IHBhcnQxIDwgMTYzODRcbiAgICAgICAgICAgICA/IHBhcnQxIDwgMTI4ID8gNSA6IDZcbiAgICAgICAgICAgICA6IHBhcnQxIDwgMjA5NzE1MiA/IDcgOiA4XG4gICAgICAgICA6IHBhcnQyIDwgMTI4ID8gOSA6IDEwO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbCA9IGV4cG9ydHM7XG5cbi8vIHVzZWQgdG8gcmV0dXJuIGEgUHJvbWlzZSB3aGVyZSBjYWxsYmFjayBpcyBvbWl0dGVkXG51dGlsLmFzUHJvbWlzZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9hc3Byb21pc2VcIik7XG5cbi8vIGNvbnZlcnRzIHRvIC8gZnJvbSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG51dGlsLmJhc2U2NCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9iYXNlNjRcIik7XG5cbi8vIGJhc2UgY2xhc3Mgb2YgcnBjLlNlcnZpY2VcbnV0aWwuRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2V2ZW50ZW1pdHRlclwiKTtcblxuLy8gZmxvYXQgaGFuZGxpbmcgYWNjcm9zcyBicm93c2Vyc1xudXRpbC5mbG9hdCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9mbG9hdFwiKTtcblxuLy8gcmVxdWlyZXMgbW9kdWxlcyBvcHRpb25hbGx5IGFuZCBoaWRlcyB0aGUgY2FsbCBmcm9tIGJ1bmRsZXJzXG51dGlsLmlucXVpcmUgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvaW5xdWlyZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIHV0ZjggZW5jb2RlZCBzdHJpbmdzXG51dGlsLnV0ZjggPSByZXF1aXJlKFwiQHByb3RvYnVmanMvdXRmOFwiKTtcblxuLy8gcHJvdmlkZXMgYSBub2RlLWxpa2UgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXJcbnV0aWwucG9vbCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9wb29sXCIpO1xuXG4vLyB1dGlsaXR5IHRvIHdvcmsgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWVcbnV0aWwuTG9uZ0JpdHMgPSByZXF1aXJlKFwiLi9sb25nYml0c1wiKTtcblxuLyoqXG4gKiBXaGV0aGVyIHJ1bm5pbmcgd2l0aGluIG5vZGUgb3Igbm90LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG51dGlsLmlzTm9kZSA9IEJvb2xlYW4odHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbFxuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3MudmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcblxuLyoqXG4gKiBHbG9iYWwgb2JqZWN0IHJlZmVyZW5jZS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG51dGlsLmdsb2JhbCA9IHV0aWwuaXNOb2RlICYmIGdsb2JhbFxuICAgICAgICAgICB8fCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvd1xuICAgICAgICAgICB8fCB0eXBlb2Ygc2VsZiAgICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGZcbiAgICAgICAgICAgfHwgdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblxuLyoqXG4gKiBBbiBpbW11YWJsZSBlbXB0eSBhcnJheS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAdHlwZSB7QXJyYXkuPCo+fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlBcnJheSA9IE9iamVjdC5mcmVlemUgPyBPYmplY3QuZnJlZXplKFtdKSA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFtdOyAvLyB1c2VkIG9uIHByb3RvdHlwZXNcblxuLyoqXG4gKiBBbiBpbW11dGFibGUgZW1wdHkgb2JqZWN0LlxuICogQHR5cGUge09iamVjdH1cbiAqIEBjb25zdFxuICovXG51dGlsLmVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoe30pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8ge307IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyXG4gKi9cbnV0aWwuaXNJbnRlZ2VyID0gTnVtYmVyLmlzSW50ZWdlciB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBzdHJpbmcuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nXG4gKi9cbnV0aWwuaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgbm9uLW51bGwgb2JqZWN0XG4gKi9cbnV0aWwuaXNPYmplY3QgPSBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHByb3BlcnR5IG9uIGEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQuXG4gKiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayB1dGlsLmlzU2V0fS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBQbGFpbiBvYmplY3Qgb3IgbWVzc2FnZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbnV0aWwuaXNzZXQgPVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHByb3BlcnR5IG9uIGEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc1NldCA9IGZ1bmN0aW9uIGlzU2V0KG9iaiwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9ialtwcm9wXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxLCBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5sZW5ndGggOiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSA+IDA7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBBbnkgY29tcGF0aWJsZSBCdWZmZXIgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgQnVmZmVyIGluc3RhbmNlLiBUaGUgYWN0dWFsIHR5cGUgaXMgdGhhdCBleHBvcnRlZCBieSBub2RlJ3MgdHlwaW5ncy5cbiAqIEBpbnRlcmZhY2UgQnVmZmVyXG4gKiBAZXh0ZW5kcyBVaW50OEFycmF5XG4gKi9cblxuLyoqXG4gKiBOb2RlJ3MgQnVmZmVyIGNsYXNzIGlmIGF2YWlsYWJsZS5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxCdWZmZXI+fVxuICovXG51dGlsLkJ1ZmZlciA9IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgQnVmZmVyID0gdXRpbC5pbnF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcbiAgICAgICAgLy8gcmVmdXNlIHRvIHVzZSBub24tbm9kZSBidWZmZXJzIGlmIG5vdCBleHBsaWNpdGx5IGFzc2lnbmVkIChwZXJmIHJlYXNvbnMpOlxuICAgICAgICByZXR1cm4gQnVmZmVyLnByb3RvdHlwZS51dGY4V3JpdGUgPyBCdWZmZXIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBudWxsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufSkoKTtcblxuLy8gSW50ZXJuYWwgYWxpYXMgb2Ygb3IgcG9seWZ1bGwgZm9yIEJ1ZmZlci5mcm9tLlxudXRpbC5fQnVmZmVyX2Zyb20gPSBudWxsO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZmlsbCBmb3IgQnVmZmVyLmFsbG9jVW5zYWZlLlxudXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gbnVsbDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGJ1ZmZlciBvZiB3aGF0ZXZlciB0eXBlIHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge251bWJlcnxudW1iZXJbXX0gW3NpemVPckFycmF5PTBdIEJ1ZmZlciBzaXplIG9yIG51bWJlciBhcnJheVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl8QnVmZmVyfSBCdWZmZXJcbiAqL1xudXRpbC5uZXdCdWZmZXIgPSBmdW5jdGlvbiBuZXdCdWZmZXIoc2l6ZU9yQXJyYXkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0eXBlb2Ygc2l6ZU9yQXJyYXkgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyB1dGlsLkJ1ZmZlclxuICAgICAgICAgICAgPyB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUoc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IG5ldyB1dGlsLkFycmF5KHNpemVPckFycmF5KVxuICAgICAgICA6IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9mcm9tKHNpemVPckFycmF5KVxuICAgICAgICAgICAgOiB0eXBlb2YgVWludDhBcnJheSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgID8gc2l6ZU9yQXJyYXlcbiAgICAgICAgICAgICAgICA6IG5ldyBVaW50OEFycmF5KHNpemVPckFycmF5KTtcbn07XG5cbi8qKlxuICogQXJyYXkgaW1wbGVtZW50YXRpb24gdXNlZCBpbiB0aGUgYnJvd3Nlci4gYFVpbnQ4QXJyYXlgIGlmIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGBBcnJheWAuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8VWludDhBcnJheT59XG4gKi9cbnV0aWwuQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gXCJ1bmRlZmluZWRcIiA/IFVpbnQ4QXJyYXkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gOiBBcnJheTtcblxuLyoqXG4gKiBBbnkgY29tcGF0aWJsZSBMb25nIGluc3RhbmNlLlxuICogVGhpcyBpcyBhIG1pbmltYWwgc3RhbmQtYWxvbmUgZGVmaW5pdGlvbiBvZiBhIExvbmcgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IGxvbmcuanMuXG4gKiBAaW50ZXJmYWNlIExvbmdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb3cgTG93IGJpdHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoaWdoIEhpZ2ggYml0c1xuICogQHByb3BlcnR5IHtib29sZWFufSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICovXG5cbi8qKlxuICogTG9uZy5qcydzIExvbmcgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPExvbmc+fVxuICovXG51dGlsLkxvbmcgPSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5kY29kZUlPICYmIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8uTG9uZ1xuICAgICAgICAgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuTG9uZ1xuICAgICAgICAgfHwgdXRpbC5pbnF1aXJlKFwibG9uZ1wiKTtcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byB2ZXJpZnkgMiBiaXQgKGBib29sYCkgbWFwIGtleXMuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICogQGNvbnN0XG4gKi9cbnV0aWwua2V5MlJlID0gL150cnVlfGZhbHNlfDB8MSQvO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAzMiBiaXQgKGBpbnQzMmAgZXRjLikgbWFwIGtleXMuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICogQGNvbnN0XG4gKi9cbnV0aWwua2V5MzJSZSA9IC9eLT8oPzowfFsxLTldWzAtOV0qKSQvO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSA2NCBiaXQgKGBpbnQ2NGAgZXRjLikgbWFwIGtleXMuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICogQGNvbnN0XG4gKi9cbnV0aWwua2V5NjRSZSA9IC9eKD86W1xcXFx4MDAtXFxcXHhmZl17OH18LT8oPzowfFsxLTldWzAtOV0qKSkkLztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIG51bWJlciBvciBsb25nIHRvIGFuIDggY2hhcmFjdGVycyBsb25nIGhhc2ggc3RyaW5nLlxuICogQHBhcmFtIHtMb25nfG51bWJlcn0gdmFsdWUgVmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge3N0cmluZ30gSGFzaFxuICovXG51dGlsLmxvbmdUb0hhc2ggPSBmdW5jdGlvbiBsb25nVG9IYXNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gdXRpbC5Mb25nQml0cy5mcm9tKHZhbHVlKS50b0hhc2goKVxuICAgICAgICA6IHV0aWwuTG9uZ0JpdHMuemVyb0hhc2g7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIDggY2hhcmFjdGVycyBsb25nIGhhc2ggc3RyaW5nIHRvIGEgbG9uZyBvciBudW1iZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bnNpZ25lZD1mYWxzZV0gV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqIEByZXR1cm5zIHtMb25nfG51bWJlcn0gT3JpZ2luYWwgdmFsdWVcbiAqL1xudXRpbC5sb25nRnJvbUhhc2ggPSBmdW5jdGlvbiBsb25nRnJvbUhhc2goaGFzaCwgdW5zaWduZWQpIHtcbiAgICB2YXIgYml0cyA9IHV0aWwuTG9uZ0JpdHMuZnJvbUhhc2goaGFzaCk7XG4gICAgaWYgKHV0aWwuTG9uZylcbiAgICAgICAgcmV0dXJuIHV0aWwuTG9uZy5mcm9tQml0cyhiaXRzLmxvLCBiaXRzLmhpLCB1bnNpZ25lZCk7XG4gICAgcmV0dXJuIGJpdHMudG9OdW1iZXIoQm9vbGVhbih1bnNpZ25lZCkpO1xufTtcblxuLyoqXG4gKiBNZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNvdXJjZSBvYmplY3QgaW50byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IGRzdCBEZXN0aW5hdGlvbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IHNyYyBTb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpZk5vdFNldD1mYWxzZV0gTWVyZ2VzIG9ubHkgaWYgdGhlIGtleSBpcyBub3QgYWxyZWFkeSBzZXRcbiAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gRGVzdGluYXRpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIG1lcmdlKGRzdCwgc3JjLCBpZk5vdFNldCkgeyAvLyB1c2VkIGJ5IGNvbnZlcnRlcnNcbiAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICBpZiAoZHN0W2tleXNbaV1dID09PSB1bmRlZmluZWQgfHwgIWlmTm90U2V0KVxuICAgICAgICAgICAgZHN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIHJldHVybiBkc3Q7XG59XG5cbnV0aWwubWVyZ2UgPSBtZXJnZTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nIHRvIGxvd2VyIGNhc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb252ZXJ0ZWQgc3RyaW5nXG4gKi9cbnV0aWwubGNGaXJzdCA9IGZ1bmN0aW9uIGxjRmlyc3Qoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gZXJyb3IgY29uc3RydWN0b3IuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXJyb3IgbmFtZVxuICogQHJldHVybnMge0NvbnN0cnVjdG9yPEVycm9yPn0gQ3VzdG9tIGVycm9yIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIG5ld0Vycm9yKG5hbWUpIHtcblxuICAgIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpIHtcblxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ3VzdG9tRXJyb3IpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21FcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAvLyBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuICAgICAgICAvLyBeIGp1c3QgcmV0dXJucyBhIG5ldyBlcnJvciBpbnN0YW5jZSBiZWNhdXNlIHRoZSBjdG9yIGNhbiBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvblxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1lc3NhZ2VcIiwgeyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbWVzc2FnZTsgfSB9KTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIC8vIG5vZGVcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEN1c3RvbUVycm9yKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhY2tcIiwgeyB2YWx1ZTogbmV3IEVycm9yKCkuc3RhY2sgfHwgXCJcIiB9KTtcblxuICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgIG1lcmdlKHRoaXMsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogQ3VzdG9tRXJyb3IsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsgcmV0dXJuIG5hbWU7IH0sXG4gICAgICAgICAgICBzZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgLy8gY29uZmlndXJhYmxlOiBmYWxzZSB3b3VsZCBhY2N1cmF0ZWx5IHByZXNlcnZlIHRoZSBiZWhhdmlvciBvZlxuICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsLCBidXQgSSdtIGd1ZXNzaW5nIHRoYXQgd2FzIG5vdCBpbnRlbnRpb25hbC5cbiAgICAgICAgICAgIC8vIEZvciBhbiBhY3R1YWwgZXJyb3Igc3ViY2xhc3MsIHRoaXMgcHJvcGVydHkgd291bGRcbiAgICAgICAgICAgIC8vIGJlIGNvbmZpZ3VyYWJsZS5cbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdG9TdHJpbmc6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMubmFtZSArIFwiOiBcIiArIHRoaXMubWVzc2FnZTsgfSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbnV0aWwubmV3RXJyb3IgPSBuZXdFcnJvcjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHByb3RvY29sIGVycm9yLlxuICogQGNsYXNzZGVzYyBFcnJvciBzdWJjbGFzcyBpbmRpY2F0aW5nIGEgcHJvdG9jb2wgc3BlY2lmYyBlcnJvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAZXh0ZW5kcyBFcnJvclxuICogQHRlbXBsYXRlIFQgZXh0ZW5kcyBNZXNzYWdlPFQ+XG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtwcm9wZXJ0aWVzXSBBZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAqIEBleGFtcGxlXG4gKiB0cnkge1xuICogICAgIE15TWVzc2FnZS5kZWNvZGUoc29tZUJ1ZmZlcik7IC8vIHRocm93cyBpZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAqIH0gY2F0Y2ggKGUpIHtcbiAqICAgICBpZiAoZSBpbnN0YW5jZW9mIFByb3RvY29sRXJyb3IgJiYgZS5pbnN0YW5jZSlcbiAqICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIHNvIGZhcjogXCIgKyBKU09OLnN0cmluZ2lmeShlLmluc3RhbmNlKSk7XG4gKiB9XG4gKi9cbnV0aWwuUHJvdG9jb2xFcnJvciA9IG5ld0Vycm9yKFwiUHJvdG9jb2xFcnJvclwiKTtcblxuLyoqXG4gKiBTbyBmYXIgZGVjb2RlZCBtZXNzYWdlIGluc3RhbmNlLlxuICogQG5hbWUgdXRpbC5Qcm90b2NvbEVycm9yI2luc3RhbmNlXG4gKiBAdHlwZSB7TWVzc2FnZTxUPn1cbiAqL1xuXG4vKipcbiAqIEEgT25lT2YgZ2V0dGVyIGFzIHJldHVybmVkIGJ5IHtAbGluayB1dGlsLm9uZU9mR2V0dGVyfS5cbiAqIEB0eXBlZGVmIE9uZU9mR2V0dGVyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgZ2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mR2V0dGVyfSBVbmJvdW5kIGdldHRlclxuICovXG51dGlsLm9uZU9mR2V0dGVyID0gZnVuY3Rpb24gZ2V0T25lT2YoZmllbGROYW1lcykge1xuICAgIHZhciBmaWVsZE1hcCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgZmllbGRNYXBbZmllbGROYW1lc1tpXV0gPSAxO1xuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFNldCBmaWVsZCBuYW1lLCBpZiBhbnlcbiAgICAgKiBAdGhpcyBPYmplY3RcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKSwgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+IC0xOyAtLWkpXG4gICAgICAgICAgICBpZiAoZmllbGRNYXBba2V5c1tpXV0gPT09IDEgJiYgdGhpc1trZXlzW2ldXSAhPT0gdW5kZWZpbmVkICYmIHRoaXNba2V5c1tpXV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleXNbaV07XG4gICAgfTtcbn07XG5cbi8qKlxuICogQSBPbmVPZiBzZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZTZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZTZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdmFsdWUgRmllbGQgbmFtZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEJ1aWxkcyBhIHNldHRlciBmb3IgYSBvbmVvZidzIHByZXNlbnQgZmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGZpZWxkTmFtZXMgRmllbGQgbmFtZXNcbiAqIEByZXR1cm5zIHtPbmVPZlNldHRlcn0gVW5ib3VuZCBzZXR0ZXJcbiAqL1xudXRpbC5vbmVPZlNldHRlciA9IGZ1bmN0aW9uIHNldE9uZU9mKGZpZWxkTmFtZXMpIHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEZpZWxkIG5hbWVcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkTmFtZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBpZiAoZmllbGROYW1lc1tpXSAhPT0gbmFtZSlcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tmaWVsZE5hbWVzW2ldXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnZlcnNpb24gb3B0aW9ucyB1c2VkIGZvciB7QGxpbmsgTWVzc2FnZSN0b0pTT059IGltcGxlbWVudGF0aW9ucy5cbiAqXG4gKiBUaGVzZSBvcHRpb25zIGFyZSBjbG9zZSB0byBwcm90bzMncyBKU09OIG1hcHBpbmcgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgaW50ZXJuYWwgdHlwZXMgbGlrZSBBbnkgYXJlIGhhbmRsZWQganVzdCBsaWtlIG1lc3NhZ2VzLiBNb3JlIHByZWNpc2VseTpcbiAqXG4gKiAtIExvbmdzIGJlY29tZSBzdHJpbmdzXG4gKiAtIEVudW1zIGJlY29tZSBzdHJpbmcga2V5c1xuICogLSBCeXRlcyBiZWNvbWUgYmFzZTY0IGVuY29kZWQgc3RyaW5nc1xuICogLSAoU3ViLSlNZXNzYWdlcyBiZWNvbWUgcGxhaW4gb2JqZWN0c1xuICogLSBNYXBzIGJlY29tZSBwbGFpbiBvYmplY3RzIHdpdGggYWxsIHN0cmluZyBrZXlzXG4gKiAtIFJlcGVhdGVkIGZpZWxkcyBiZWNvbWUgYXJyYXlzXG4gKiAtIE5hTiBhbmQgSW5maW5pdHkgZm9yIGZsb2F0IGFuZCBkb3VibGUgZmllbGRzIGJlY29tZSBzdHJpbmdzXG4gKlxuICogQHR5cGUge0lDb252ZXJzaW9uT3B0aW9uc31cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMz9obD1lbiNqc29uXG4gKi9cbnV0aWwudG9KU09OT3B0aW9ucyA9IHtcbiAgICBsb25nczogU3RyaW5nLFxuICAgIGVudW1zOiBTdHJpbmcsXG4gICAgYnl0ZXM6IFN0cmluZyxcbiAgICBqc29uOiB0cnVlXG59O1xuXG4vLyBTZXRzIHVwIGJ1ZmZlciB1dGlsaXR5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQgKGNhbGxlZCBpbiBpbmRleC1taW5pbWFsKVxudXRpbC5fY29uZmlndXJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIEJ1ZmZlciA9IHV0aWwuQnVmZmVyO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghQnVmZmVyKSB7XG4gICAgICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBiZWNhdXNlIG5vZGUgNC54IGJ1ZmZlcnMgYXJlIGluY29tcGF0aWJsZSAmIGltbXV0YWJsZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Rjb2RlSU8vcHJvdG9idWYuanMvcHVsbC82NjVcbiAgICB1dGlsLl9CdWZmZXJfZnJvbSA9IEJ1ZmZlci5mcm9tICE9PSBVaW50OEFycmF5LmZyb20gJiYgQnVmZmVyLmZyb20gfHxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZnVuY3Rpb24gQnVmZmVyX2Zyb20odmFsdWUsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmcpO1xuICAgICAgICB9O1xuICAgIHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfYWxsb2NVbnNhZmUoc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIoc2l6ZSk7XG4gICAgICAgIH07XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyV3JpdGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgYmFzZTY0ICAgID0gdXRpbC5iYXNlNjQsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHdyaXRlciBvcGVyYXRpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgVWludDhBcnJheSwgbnVtYmVyKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gT3AoZm4sIGxlbiwgdmFsKSB7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfVxuICAgICAqL1xuICAgIHRoaXMuZm4gPSBmbjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IG9wZXJhdGlvbi5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbCA9IHZhbDsgLy8gdHlwZSB2YXJpZXNcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgc3RhdGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIENvcGllZCB3cml0ZXIgc3RhdGUuXG4gKiBAbWVtYmVyb2YgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7V3JpdGVyfSB3cml0ZXIgV3JpdGVyIHRvIGNvcHkgc3RhdGUgZnJvbVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBTdGF0ZSh3cml0ZXIpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaGVhZC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IHdyaXRlci5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCB0YWlsLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gd3JpdGVyLnRhaWw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IHdyaXRlci5sZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IHN0YXRlLlxuICAgICAqIEB0eXBlIHtTdGF0ZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHdyaXRlci5zdGF0ZXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXcml0ZXIoKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gMDtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgaGVhZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgdGFpbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogTGlua2VkIGZvcmtlZCBzdGF0ZXMuXG4gICAgICogQHR5cGUge09iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGVzID0gbnVsbDtcblxuICAgIC8vIFdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuLCB0aGUgd3JpdGVyIGNhbGN1bGF0ZXMgaXRzIGJ5dGUgbGVuZ3RoIGFuZCBwdXRzIGl0IGludG8gYSBsaW5rZWRcbiAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGZpbmlzaCgpIGlzIGNhbGxlZC4gVGhpcyBib3RoIGFsbG93cyB1cyB0byBhbGxvY2F0ZVxuICAgIC8vIGJ1ZmZlcnMgb2YgdGhlIGV4YWN0IHJlcXVpcmVkIHNpemUgYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGhhdmUgdG8gZG8gY29tcGFyZWRcbiAgICAvLyB0byBmaXJzdCBjYWxjdWxhdGluZyBvdmVyIG9iamVjdHMgYW5kIHRoZW4gZW5jb2Rpbmcgb3ZlciBvYmplY3RzLiBJbiBvdXIgY2FzZSwgdGhlIGVuY29kaW5nXG4gICAgLy8gcGFydCBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2FsayBjYWxsaW5nIG9wZXJhdGlvbnMgd2l0aCBhbHJlYWR5IHByZXBhcmVkIHZhbHVlcy5cbn1cblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKCkge1xuICAgICAgICAgICAgcmV0dXJuIChXcml0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlcigpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGVyKCk7XG4gICAgICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyV3JpdGVyfFdyaXRlcn0gQSB7QGxpbmsgQnVmZmVyV3JpdGVyfSB3aGVuIEJ1ZmZlcnMgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGEge0BsaW5rIFdyaXRlcn1cbiAqL1xuV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxuICovXG5Xcml0ZXIuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gICAgcmV0dXJuIG5ldyB1dGlsLkFycmF5KHNpemUpO1xufTtcblxuLy8gVXNlIFVpbnQ4QXJyYXkgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXIsIGp1c3QgbGlrZSBub2RlIGRvZXMgd2l0aCBidWZmZXJzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHV0aWwuQXJyYXkgIT09IEFycmF5KVxuICAgIFdyaXRlci5hbGxvYyA9IHV0aWwucG9vbChXcml0ZXIuYWxsb2MsIHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KTtcblxuLyoqXG4gKiBQdXNoZXMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAcHJpdmF0ZVxuICovXG5Xcml0ZXIucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gcHVzaChmbiwgbGVuLCB2YWwpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcChmbiwgbGVuLCB2YWwpO1xuICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQnl0ZSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWwgJiAyNTU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwgPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbCAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsID4+Pj0gNztcbiAgICB9XG4gICAgYnVmW3Bvc10gPSB2YWw7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHZhcmludCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGV4dGVuZHMgT3BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBWYXJpbnRPcChsZW4sIHZhbCkge1xuICAgIHRoaXMubGVuID0gbGVuO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbn1cblxuVmFyaW50T3AucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcC5wcm90b3R5cGUpO1xuVmFyaW50T3AucHJvdG90eXBlLmZuID0gd3JpdGVWYXJpbnQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50MzIgPSBmdW5jdGlvbiB3cml0ZV91aW50MzIodmFsdWUpIHtcbiAgICAvLyBoZXJlLCB0aGUgY2FsbCB0byB0aGlzLnB1c2ggaGFzIGJlZW4gaW5saW5lZCBhbmQgYSB2YXJpbnQgc3BlY2lmaWMgT3Agc3ViY2xhc3MgaXMgdXNlZC5cbiAgICAvLyB1aW50MzIgaXMgYnkgZmFyIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gYW5kIGJlbmVmaXRzIHNpZ25pZmljYW50bHkgZnJvbSB0aGlzLlxuICAgIHRoaXMubGVuICs9ICh0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBWYXJpbnRPcChcbiAgICAgICAgKHZhbHVlID0gdmFsdWUgPj4+IDApXG4gICAgICAgICAgICAgICAgPCAxMjggICAgICAgPyAxXG4gICAgICAgIDogdmFsdWUgPCAxNjM4NCAgICAgPyAyXG4gICAgICAgIDogdmFsdWUgPCAyMDk3MTUyICAgPyAzXG4gICAgICAgIDogdmFsdWUgPCAyNjg0MzU0NTYgPyA0XG4gICAgICAgIDogICAgICAgICAgICAgICAgICAgICA1LFxuICAgIHZhbHVlKSkubGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gd3JpdGVfaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPCAwXG4gICAgICAgID8gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCAxMCwgTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSkpIC8vIDEwIGJ5dGVzIHBlciBzcGVjXG4gICAgICAgIDogdGhpcy51aW50MzIodmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gd3JpdGVfc2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCh2YWx1ZSA8PCAxIF4gdmFsdWUgPj4gMzEpID4+PiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50NjQodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwuaGkpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gKHZhbC5sbyA+Pj4gNyB8IHZhbC5oaSA8PCAyNSkgPj4+IDA7XG4gICAgICAgIHZhbC5oaSA+Pj49IDc7XG4gICAgfVxuICAgIHdoaWxlICh2YWwubG8gPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gdmFsLmxvID4+PiA3O1xuICAgIH1cbiAgICBidWZbcG9zKytdID0gdmFsLmxvO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50NjQgPSBmdW5jdGlvbiB3cml0ZV91aW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQ2NCA9IFdyaXRlci5wcm90b3R5cGUudWludDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSkuenpFbmNvZGUoKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgYm9vbGlzaCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiB3cml0ZV9ib29sKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCB2YWx1ZSA/IDEgOiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlRml4ZWQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICAmIDI1NTtcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdmFsdWUgPj4+IDApO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkMzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkNjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5sbykuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmhpKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBmbG9hdCAoMzIgYml0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHdyaXRlX2Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHdyaXRlX2RvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRSwgOCwgdmFsdWUpO1xufTtcblxudmFyIHdyaXRlQnl0ZXMgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zZXRcbiAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc19mb3IodmFsLCBidWYsIHBvcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHZhbFtpXTtcbiAgICB9O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fHN0cmluZ30gdmFsdWUgQnVmZmVyIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlcyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgaWYgKCFsZW4pXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhciBidWYgPSBXcml0ZXIuYWxsb2MobGVuID0gYmFzZTY0Lmxlbmd0aCh2YWx1ZSkpO1xuICAgICAgICBiYXNlNjQuZGVjb2RlKHZhbHVlLCBidWYsIDApO1xuICAgICAgICB2YWx1ZSA9IGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudWludDMyKGxlbikuX3B1c2god3JpdGVCeXRlcywgbGVuLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0ZjgubGVuZ3RoKHZhbHVlKTtcbiAgICByZXR1cm4gbGVuXG4gICAgICAgID8gdGhpcy51aW50MzIobGVuKS5fcHVzaCh1dGY4LndyaXRlLCBsZW4sIHZhbHVlKVxuICAgICAgICA6IHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhpcyB3cml0ZXIncyBzdGF0ZSBieSBwdXNoaW5nIGl0IHRvIGEgc3RhY2suXG4gKiBDYWxsaW5nIHtAbGluayBXcml0ZXIjcmVzZXR8cmVzZXR9IG9yIHtAbGluayBXcml0ZXIjbGRlbGltfGxkZWxpbX0gcmVzZXRzIHRoZSB3cml0ZXIgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uIGZvcmsoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyk7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgIHRoaXMubGVuID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGxhc3Qgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgICB0aGlzLmhlYWQgICA9IHRoaXMuc3RhdGVzLmhlYWQ7XG4gICAgICAgIHRoaXMudGFpbCAgID0gdGhpcy5zdGF0ZXMudGFpbDtcbiAgICAgICAgdGhpcy5sZW4gICAgPSB0aGlzLnN0YXRlcy5sZW47XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMubmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgICAgIHRoaXMubGVuICA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdG8gdGhlIGxhc3Qgc3RhdGUgYW5kIGFwcGVuZHMgdGhlIGZvcmsgc3RhdGUncyBjdXJyZW50IHdyaXRlIGxlbmd0aCBhcyBhIHZhcmludCBmb2xsb3dlZCBieSBpdHMgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGxkZWxpbSgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgdGFpbCA9IHRoaXMudGFpbCxcbiAgICAgICAgbGVuICA9IHRoaXMubGVuO1xuICAgIHRoaXMucmVzZXQoKS51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gaGVhZC5uZXh0OyAvLyBza2lwIG5vb3BcbiAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQubmV4dCwgLy8gc2tpcCBub29wXG4gICAgICAgIGJ1ZiAgPSB0aGlzLmNvbnN0cnVjdG9yLmFsbG9jKHRoaXMubGVuKSxcbiAgICAgICAgcG9zICA9IDA7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgaGVhZC5mbihoZWFkLnZhbCwgYnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gaGVhZC5sZW47XG4gICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIC8vIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyV3JpdGVyXykge1xuICAgIEJ1ZmZlcldyaXRlciA9IEJ1ZmZlcldyaXRlcl87XG4gICAgV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyV3JpdGVyO1xuXG4vLyBleHRlbmRzIFdyaXRlclxudmFyIFdyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbihCdWZmZXJXcml0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0ZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJXcml0ZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHdyaXRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgd3JpdGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFdyaXRlclxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlcldyaXRlcigpIHtcbiAgICBXcml0ZXIuY2FsbCh0aGlzKTtcbn1cblxuQnVmZmVyV3JpdGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQWxsb2NhdGVzIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IEJ1ZmZlclxuICAgICAqL1xuICAgIEJ1ZmZlcldyaXRlci5hbGxvYyA9IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZTtcblxuICAgIEJ1ZmZlcldyaXRlci53cml0ZUJ5dGVzQnVmZmVyID0gdXRpbC5CdWZmZXIgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiB1dGlsLkJ1ZmZlci5wcm90b3R5cGUuc2V0Lm5hbWUgPT09IFwic2V0XCJcbiAgICAgICAgPyBmdW5jdGlvbiB3cml0ZUJ5dGVzQnVmZmVyX3NldCh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGZhc3RlciB0aGFuIGNvcHkgKHJlcXVpcmVzIG5vZGUgPj0gNCB3aGVyZSBCdWZmZXJzIGV4dGVuZCBVaW50OEFycmF5IGFuZCBzZXQgaXMgcHJvcGVybHkgaW5oZXJpdGVkKVxuICAgICAgICAgIC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9jb3B5KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgICBpZiAodmFsLmNvcHkpIC8vIEJ1ZmZlciB2YWx1ZXNcbiAgICAgICAgICAgIHZhbC5jb3B5KGJ1ZiwgcG9zLCAwLCB2YWwubGVuZ3RoKTtcbiAgICAgICAgICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDspIC8vIHBsYWluIGFycmF5IHZhbHVlc1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IHZhbFtpKytdO1xuICAgICAgICB9O1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gd3JpdGVfYnl0ZXNfYnVmZmVyKHZhbHVlKSB7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKVxuICAgICAgICB2YWx1ZSA9IHV0aWwuX0J1ZmZlcl9mcm9tKHZhbHVlLCBcImJhc2U2NFwiKTtcbiAgICB2YXIgbGVuID0gdmFsdWUubGVuZ3RoID4+PiAwO1xuICAgIHRoaXMudWludDMyKGxlbik7XG4gICAgaWYgKGxlbilcbiAgICAgICAgdGhpcy5fcHVzaChCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciwgbGVuLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiB3cml0ZVN0cmluZ0J1ZmZlcih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgaWYgKHZhbC5sZW5ndGggPCA0MCkgLy8gcGxhaW4ganMgaXMgZmFzdGVyIGZvciBzaG9ydCBzdHJpbmdzIChwcm9iYWJseSBkdWUgdG8gcmVkdW5kYW50IGFzc2VydGlvbnMpXG4gICAgICAgIHV0aWwudXRmOC53cml0ZSh2YWwsIGJ1ZiwgcG9zKTtcbiAgICBlbHNlIGlmIChidWYudXRmOFdyaXRlKVxuICAgICAgICBidWYudXRmOFdyaXRlKHZhbCwgcG9zKTtcbiAgICBlbHNlXG4gICAgICAgIGJ1Zi53cml0ZSh2YWwsIHBvcyk7XG59XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlcldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nX2J1ZmZlcih2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB1dGlsLkJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2god3JpdGVTdHJpbmdCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEZpbmlzaGVzIHRoZSB3cml0ZSBvcGVyYXRpb24uXG4gKiBAbmFtZSBCdWZmZXJXcml0ZXIjZmluaXNoXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IEZpbmlzaGVkIGJ1ZmZlclxuICovXG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBSZWFkZXI7XG5cbnZhciB1dGlsICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbnZhciBCdWZmZXJSZWFkZXI7IC8vIGN5Y2xpY1xuXG52YXIgTG9uZ0JpdHMgID0gdXRpbC5Mb25nQml0cyxcbiAgICB1dGY4ICAgICAgPSB1dGlsLnV0Zjg7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpbmRleE91dE9mUmFuZ2UocmVhZGVyLCB3cml0ZUxlbmd0aCkge1xuICAgIHJldHVybiBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlOiBcIiArIHJlYWRlci5wb3MgKyBcIiArIFwiICsgKHdyaXRlTGVuZ3RoIHx8IDEpICsgXCIgPiBcIiArIHJlYWRlci5sZW4pO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcmVhZGVyIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgYnVmZmVyLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCByZWFkZXIgdXNpbmcgYFVpbnQ4QXJyYXlgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBBcnJheWAuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gUmVhZGVyKGJ1ZmZlcikge1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIuXG4gICAgICogQHR5cGUge1VpbnQ4QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5idWYgPSBidWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlciBwb3NpdGlvbi5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucG9zID0gMDtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gYnVmZmVyLmxlbmd0aDtcbn1cblxudmFyIGNyZWF0ZV9hcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyBmdW5jdGlvbiBjcmVhdGVfdHlwZWRfYXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgOiBmdW5jdGlvbiBjcmVhdGVfYXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRlcihidWZmZXIpO1xuICAgICAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xuICAgIH07XG5cbnZhciBjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIHV0aWwuQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcl9zZXR1cChidWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhZGVyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXIoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcilcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgQnVmZmVyUmVhZGVyKGJ1ZmZlcilcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVfYXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIH0pKGJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiBjcmVhdGVfYXJyYXk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcmVhZGVyIHVzaW5nIHRoZSBzcGVjaWZpZWQgYnVmZmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl8QnVmZmVyfSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICogQHJldHVybnMge1JlYWRlcnxCdWZmZXJSZWFkZXJ9IEEge0BsaW5rIEJ1ZmZlclJlYWRlcn0gaWYgYGJ1ZmZlcmAgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBhIHtAbGluayBSZWFkZXJ9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYGJ1ZmZlcmAgaXMgbm90IGEgdmFsaWQgYnVmZmVyXG4gKi9cblJlYWRlci5jcmVhdGUgPSBjcmVhdGUoKTtcblxuUmVhZGVyLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zdWJhcnJheSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLkFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgdmFsdWUuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS51aW50MzIgPSAoZnVuY3Rpb24gcmVhZF91aW50MzJfc2V0dXAoKSB7XG4gICAgdmFyIHZhbHVlID0gNDI5NDk2NzI5NTsgLy8gb3B0aW1pemVyIHR5cGUtaGludCwgdGVuZHMgdG8gZGVvcHQgb3RoZXJ3aXNlICg/ISlcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVhZF91aW50MzIoKSB7XG4gICAgICAgIHZhbHVlID0gKCAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNyAgICAgICApID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAgNykgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDE0KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjEpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgIDE1KSA8PCAyOCkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoKHRoaXMucG9zICs9IDUpID4gdGhpcy5sZW4pIHtcbiAgICAgICAgICAgIHRoaXMucG9zID0gdGhpcy5sZW47XG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgMTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuaW50MzIgPSBmdW5jdGlvbiByZWFkX2ludDMyKCkge1xuICAgIHJldHVybiB0aGlzLnVpbnQzMigpIHwgMDtcbn07XG5cbi8qKlxuICogUmVhZHMgYSB6aWctemFnIGVuY29kZWQgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zaW50MzIgPSBmdW5jdGlvbiByZWFkX3NpbnQzMigpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnVpbnQzMigpO1xuICAgIHJldHVybiB2YWx1ZSA+Pj4gMSBeIC0odmFsdWUgJiAxKSB8IDA7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuZnVuY3Rpb24gcmVhZExvbmdWYXJpbnQoKSB7XG4gICAgLy8gdGVuZHMgdG8gZGVvcHQgd2l0aCBsb2NhbCB2YXJzIGZvciBvY3RldCBldGMuXG4gICAgdmFyIGJpdHMgPSBuZXcgTG9uZ0JpdHMoMCwgMCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkgeyAvLyBmYXN0IHJvdXRlIChsbylcbiAgICAgICAgZm9yICg7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgICAgIC8vIDFzdC4uNHRoXG4gICAgICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNXRoXG4gICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDI4KSA+Pj4gMDtcbiAgICAgICAgYml0cy5oaSA9IChiaXRzLmhpIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPj4gIDQpID4+PiAwO1xuICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgaSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCAzOyArK2kpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgICAgIC8vIDFzdC4uM3RoXG4gICAgICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNHRoXG4gICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyNykgPDwgaSAqIDcpID4+PiAwO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGhpKVxuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgICAgIC8vIDZ0aC4uMTB0aFxuICAgICAgICAgICAgYml0cy5oaSA9IChiaXRzLmhpIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcgKyAzKSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IEVycm9yKFwiaW52YWxpZCB2YXJpbnQgZW5jb2RpbmdcIik7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8taW52YWxpZC10aGlzICovXG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYSBzaWduZWQgNjQgYml0IHZhbHVlLlxuICogQG5hbWUgUmVhZGVyI2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjdWludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgNjQgYml0IHZhbHVlLlxuICogQG5hbWUgUmVhZGVyI3NpbnQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYSBib29sZWFuLlxuICogQHJldHVybnMge2Jvb2xlYW59IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5ib29sID0gZnVuY3Rpb24gcmVhZF9ib29sKCkge1xuICAgIHJldHVybiB0aGlzLnVpbnQzMigpICE9PSAwO1xufTtcblxuZnVuY3Rpb24gcmVhZEZpeGVkMzJfZW5kKGJ1ZiwgZW5kKSB7IC8vIG5vdGUgdGhhdCB0aGlzIHVzZXMgYGVuZGAsIG5vdCBgcG9zYFxuICAgIHJldHVybiAoYnVmW2VuZCAtIDRdXG4gICAgICAgICAgfCBidWZbZW5kIC0gM10gPDwgOFxuICAgICAgICAgIHwgYnVmW2VuZCAtIDJdIDw8IDE2XG4gICAgICAgICAgfCBidWZbZW5kIC0gMV0gPDwgMjQpID4+PiAwO1xufVxuXG4vKipcbiAqIFJlYWRzIGZpeGVkIDMyIGJpdHMgYXMgYW4gdW5zaWduZWQgMzIgYml0IGludGVnZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfZml4ZWQzMigpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgcmV0dXJuIHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGZpeGVkIDMyIGJpdHMgYXMgYSBzaWduZWQgMzIgYml0IGludGVnZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBmdW5jdGlvbiByZWFkX3NmaXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KSB8IDA7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuZnVuY3Rpb24gcmVhZEZpeGVkNjQoLyogdGhpczogUmVhZGVyICovKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA4KTtcblxuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMocmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KSwgcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8taW52YWxpZC10aGlzICovXG5cbi8qKlxuICogUmVhZHMgZml4ZWQgNjQgYml0cy5cbiAqIEBuYW1lIFJlYWRlciNmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyB6aWctemFnIGVuY29kZWQgZml4ZWQgNjQgYml0cy5cbiAqIEBuYW1lIFJlYWRlciNzZml4ZWQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSBmbG9hdCAoMzIgYml0KSBhcyBhIG51bWJlci5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmZsb2F0ID0gZnVuY3Rpb24gcmVhZF9mbG9hdCgpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgdmFyIHZhbHVlID0gdXRpbC5mbG9hdC5yZWFkRmxvYXRMRSh0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgIHRoaXMucG9zICs9IDQ7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIGRvdWJsZSAoNjQgYml0IGZsb2F0KSBhcyBhIG51bWJlci5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHJlYWRfZG91YmxlKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgOCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWREb3VibGVMRSh0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgIHRoaXMucG9zICs9IDg7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHByZWNlZWRlZCBieSBpdHMgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHJlYWRfYnl0ZXMoKSB7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMudWludDMyKCksXG4gICAgICAgIHN0YXJ0ICA9IHRoaXMucG9zLFxuICAgICAgICBlbmQgICAgPSB0aGlzLnBvcyArIGxlbmd0aDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbmQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIGxlbmd0aCk7XG5cbiAgICB0aGlzLnBvcyArPSBsZW5ndGg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5idWYpKSAvLyBwbGFpbiBhcnJheVxuICAgICAgICByZXR1cm4gdGhpcy5idWYuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICBpZiAoc3RhcnQgPT09IGVuZCkgeyAvLyBmaXggZm9yIElFIDEwL1dpbjggYW5kIG90aGVycycgc3ViYXJyYXkgcmV0dXJuaW5nIGFycmF5IG9mIHNpemUgMVxuICAgICAgICB2YXIgbmF0aXZlQnVmZmVyID0gdXRpbC5CdWZmZXI7XG4gICAgICAgIHJldHVybiBuYXRpdmVCdWZmZXJcbiAgICAgICAgICAgID8gbmF0aXZlQnVmZmVyLmFsbG9jKDApXG4gICAgICAgICAgICA6IG5ldyB0aGlzLmJ1Zi5jb25zdHJ1Y3RvcigwKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIHN0YXJ0LCBlbmQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHN0cmluZyBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge3N0cmluZ30gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nKCkge1xuICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXMoKTtcbiAgICByZXR1cm4gdXRmOC5yZWFkKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBza2lwcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggaWYga25vd24sIG90aGVyd2lzZSBhIHZhcmludCBpcyBhc3N1bWVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMucG9zICsgbGVuZ3RoID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgfSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHdpcmUgdHlwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3aXJlVHlwZSBXaXJlIHR5cGUgcmVjZWl2ZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXBUeXBlID0gZnVuY3Rpb24od2lyZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgd2hpbGUgKCh3aXJlVHlwZSA9IHRoaXMudWludDMyKCkgJiA3KSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFR5cGUod2lyZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUgKyBcIiBhdCBvZmZzZXQgXCIgKyB0aGlzLnBvcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJSZWFkZXJfKSB7XG4gICAgQnVmZmVyUmVhZGVyID0gQnVmZmVyUmVhZGVyXztcbiAgICBSZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcblxuICAgIHZhciBmbiA9IHV0aWwuTG9uZyA/IFwidG9Mb25nXCIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcInRvTnVtYmVyXCI7XG4gICAgdXRpbC5tZXJnZShSZWFkZXIucHJvdG90eXBlLCB7XG5cbiAgICAgICAgaW50NjQ6IGZ1bmN0aW9uIHJlYWRfaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpbnQ2NDogZnVuY3Rpb24gcmVhZF91aW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ludDY0OiBmdW5jdGlvbiByZWFkX3NpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaXhlZDY0OiBmdW5jdGlvbiByZWFkX2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJSZWFkZXI7XG5cbi8vIGV4dGVuZHMgUmVhZGVyXG52YXIgUmVhZGVyID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuKEJ1ZmZlclJlYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlYWRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlclJlYWRlcjtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBidWZmZXIgcmVhZGVyIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCByZWFkZXIgdXNpbmcgbm9kZSBidWZmZXJzLlxuICogQGV4dGVuZHMgUmVhZGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBCdWZmZXJSZWFkZXIoYnVmZmVyKSB7XG4gICAgUmVhZGVyLmNhbGwodGhpcywgYnVmZmVyKTtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyLlxuICAgICAqIEBuYW1lIEJ1ZmZlclJlYWRlciNidWZcbiAgICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgICAqL1xufVxuXG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh1dGlsLkJ1ZmZlcilcbiAgICAgICAgQnVmZmVyUmVhZGVyLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsLkJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG59O1xuXG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlclJlYWRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gcmVhZF9zdHJpbmdfYnVmZmVyKCkge1xuICAgIHZhciBsZW4gPSB0aGlzLnVpbnQzMigpOyAvLyBtb2RpZmllcyBwb3NcbiAgICByZXR1cm4gdGhpcy5idWYudXRmOFNsaWNlXG4gICAgICAgID8gdGhpcy5idWYudXRmOFNsaWNlKHRoaXMucG9zLCB0aGlzLnBvcyA9IE1hdGgubWluKHRoaXMucG9zICsgbGVuLCB0aGlzLmxlbikpXG4gICAgICAgIDogdGhpcy5idWYudG9TdHJpbmcoXCJ1dGYtOFwiLCB0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBzZXF1ZW5jZSBvZiBieXRlcyBwcmVjZWVkZWQgYnkgaXRzIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEBuYW1lIEJ1ZmZlclJlYWRlciNieXRlc1xuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBWYWx1ZSByZWFkXG4gKi9cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZpY2U7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWwvbWluaW1hbFwiKTtcblxuLy8gRXh0ZW5kcyBFdmVudEVtaXR0ZXJcbihTZXJ2aWNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodXRpbC5FdmVudEVtaXR0ZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBTZXJ2aWNlO1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgcnBjLlNlcnZpY2VNZXRob2R8U2VydmljZU1ldGhvZH0uXG4gKlxuICogRGlmZmVycyBmcm9tIHtAbGluayBSUENJbXBsQ2FsbGJhY2t9IGluIHRoYXQgaXQgaXMgYW4gYWN0dWFsIGNhbGxiYWNrIG9mIGEgc2VydmljZSBtZXRob2Qgd2hpY2ggbWF5IG5vdCByZXR1cm4gYHJlc3BvbnNlID0gbnVsbGAuXG4gKiBAdHlwZWRlZiBycGMuU2VydmljZU1ldGhvZENhbGxiYWNrXG4gKiBAdGVtcGxhdGUgVFJlcyBleHRlbmRzIE1lc3NhZ2U8VFJlcz5cbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxuICogQHBhcmFtIHtUUmVzfSBbcmVzcG9uc2VdIFJlc3BvbnNlIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuLyoqXG4gKiBBIHNlcnZpY2UgbWV0aG9kIHBhcnQgb2YgYSB7QGxpbmsgcnBjLlNlcnZpY2V9IGFzIGNyZWF0ZWQgYnkge0BsaW5rIFNlcnZpY2UuY3JlYXRlfS5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kXG4gKiBAdGVtcGxhdGUgVFJlcSBleHRlbmRzIE1lc3NhZ2U8VFJlcT5cbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtUUmVxfFByb3BlcnRpZXM8VFJlcT59IHJlcXVlc3QgUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICogQHBhcmFtIHtycGMuU2VydmljZU1ldGhvZENhbGxiYWNrPFRSZXM+fSBbY2FsbGJhY2tdIE5vZGUtc3R5bGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggdGhlIGVycm9yLCBpZiBhbnksIGFuZCB0aGUgcmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge1Byb21pc2U8TWVzc2FnZTxUUmVzPj59IFByb21pc2UgaWYgYGNhbGxiYWNrYCBoYXMgYmVlbiBvbWl0dGVkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGBcbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgUlBDIHNlcnZpY2UgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIEFuIFJQQyBzZXJ2aWNlIGFzIHJldHVybmVkIGJ5IHtAbGluayBTZXJ2aWNlI2NyZWF0ZX0uXG4gKiBAZXhwb3J0cyBycGMuU2VydmljZVxuICogQGV4dGVuZHMgdXRpbC5FdmVudEVtaXR0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtSUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKi9cbmZ1bmN0aW9uIFNlcnZpY2UocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpIHtcblxuICAgIGlmICh0eXBlb2YgcnBjSW1wbCAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJycGNJbXBsIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcblxuICAgIHV0aWwuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBSUEMgaW1wbGVtZW50YXRpb24uIEJlY29tZXMgYG51bGxgIG9uY2UgdGhlIHNlcnZpY2UgaXMgZW5kZWQuXG4gICAgICogQHR5cGUge1JQQ0ltcGx8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLnJwY0ltcGwgPSBycGNJbXBsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVlc3REZWxpbWl0ZWQgPSBCb29sZWFuKHJlcXVlc3REZWxpbWl0ZWQpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXNwb25zZURlbGltaXRlZCA9IEJvb2xlYW4ocmVzcG9uc2VEZWxpbWl0ZWQpO1xufVxuXG4vKipcbiAqIENhbGxzIGEgc2VydmljZSBtZXRob2QgdGhyb3VnaCB7QGxpbmsgcnBjLlNlcnZpY2UjcnBjSW1wbHxycGNJbXBsfS5cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPFRSZXEsVFJlcz59IG1ldGhvZCBSZWZsZWN0ZWQgb3Igc3RhdGljIG1ldGhvZFxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUUmVxPn0gcmVxdWVzdEN0b3IgUmVxdWVzdCBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUUmVzPn0gcmVzcG9uc2VDdG9yIFJlc3BvbnNlIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IGNhbGxiYWNrIFNlcnZpY2UgY2FsbGJhY2tcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGVtcGxhdGUgVFJlcSBleHRlbmRzIE1lc3NhZ2U8VFJlcT5cbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5ycGNDYWxsID0gZnVuY3Rpb24gcnBjQ2FsbChtZXRob2QsIHJlcXVlc3RDdG9yLCByZXNwb25zZUN0b3IsIHJlcXVlc3QsIGNhbGxiYWNrKSB7XG5cbiAgICBpZiAoIXJlcXVlc3QpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJlcXVlc3QgbXVzdCBiZSBzcGVjaWZpZWRcIik7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFjYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIHV0aWwuYXNQcm9taXNlKHJwY0NhbGwsIHNlbGYsIG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCk7XG5cbiAgICBpZiAoIXNlbGYucnBjSW1wbCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhFcnJvcihcImFscmVhZHkgZW5kZWRcIikpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VsZi5ycGNJbXBsKFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgcmVxdWVzdEN0b3Jbc2VsZi5yZXF1ZXN0RGVsaW1pdGVkID8gXCJlbmNvZGVEZWxpbWl0ZWRcIiA6IFwiZW5jb2RlXCJdKHJlcXVlc3QpLmZpbmlzaCgpLFxuICAgICAgICAgICAgZnVuY3Rpb24gcnBjQ2FsbGJhY2soZXJyLCByZXNwb25zZSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVuZCgvKiBlbmRlZEJ5UlBDICovIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghKHJlc3BvbnNlIGluc3RhbmNlb2YgcmVzcG9uc2VDdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZUN0b3Jbc2VsZi5yZXNwb25zZURlbGltaXRlZCA/IFwiZGVjb2RlRGVsaW1pdGVkXCIgOiBcImRlY29kZVwiXShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJkYXRhXCIsIHJlc3BvbnNlLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2soZXJyKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBFbmRzIHRoaXMgc2VydmljZSBhbmQgZW1pdHMgdGhlIGBlbmRgIGV2ZW50LlxuICogQHBhcmFtIHtib29sZWFufSBbZW5kZWRCeVJQQz1mYWxzZV0gV2hldGhlciB0aGUgc2VydmljZSBoYXMgYmVlbiBlbmRlZCBieSB0aGUgUlBDIGltcGxlbWVudGF0aW9uLlxuICogQHJldHVybnMge3JwYy5TZXJ2aWNlfSBgdGhpc2BcbiAqL1xuU2VydmljZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gZW5kKGVuZGVkQnlSUEMpIHtcbiAgICBpZiAodGhpcy5ycGNJbXBsKSB7XG4gICAgICAgIGlmICghZW5kZWRCeVJQQykgLy8gc2lnbmFsIGVuZCB0byBycGNJbXBsXG4gICAgICAgICAgICB0aGlzLnJwY0ltcGwobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICAgIHRoaXMucnBjSW1wbCA9IG51bGw7XG4gICAgICAgIHRoaXMuZW1pdChcImVuZFwiKS5vZmYoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBTdHJlYW1pbmcgUlBDIGhlbHBlcnMuXG4gKiBAbmFtZXNwYWNlXG4gKi9cbnZhciBycGMgPSBleHBvcnRzO1xuXG4vKipcbiAqIFJQQyBpbXBsZW1lbnRhdGlvbiBwYXNzZWQgdG8ge0BsaW5rIFNlcnZpY2UjY3JlYXRlfSBwZXJmb3JtaW5nIGEgc2VydmljZSByZXF1ZXN0IG9uIG5ldHdvcmsgbGV2ZWwsIGkuZS4gYnkgdXRpbGl6aW5nIGh0dHAgcmVxdWVzdHMgb3Igd2Vic29ja2V0cy5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPE1lc3NhZ2U8e30+LE1lc3NhZ2U8e30+Pn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHtVaW50OEFycmF5fSByZXF1ZXN0RGF0YSBSZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7UlBDSW1wbENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBycGNJbXBsKG1ldGhvZCwgcmVxdWVzdERhdGEsIGNhbGxiYWNrKSB7XG4gKiAgICAgaWYgKHByb3RvYnVmLnV0aWwubGNGaXJzdChtZXRob2QubmFtZSkgIT09IFwibXlNZXRob2RcIikgLy8gY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBjb2RlXG4gKiAgICAgICAgIHRocm93IEVycm9yKFwibm8gc3VjaCBtZXRob2RcIik7XG4gKiAgICAgYXN5bmNocm9ub3VzbHlPYnRhaW5BUmVzcG9uc2UocmVxdWVzdERhdGEsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2VEYXRhKSB7XG4gKiAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2VEYXRhKTtcbiAqICAgICB9KTtcbiAqIH1cbiAqL1xuXG4vKipcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgUlBDSW1wbH0uXG4gKiBAdHlwZWRlZiBSUENJbXBsQ2FsbGJhY2tcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxuICogQHBhcmFtIHtVaW50OEFycmF5fG51bGx9IFtyZXNwb25zZV0gUmVzcG9uc2UgZGF0YSBvciBgbnVsbGAgdG8gc2lnbmFsIGVuZCBvZiBzdHJlYW0sIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbnJwYy5TZXJ2aWNlID0gcmVxdWlyZShcIi4vcnBjL3NlcnZpY2VcIik7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLyoqXG4gKiBOYW1lZCByb290cy5cbiAqIFRoaXMgaXMgd2hlcmUgcGJqcyBzdG9yZXMgZ2VuZXJhdGVkIHN0cnVjdHVyZXMgKHRoZSBvcHRpb24gYC1yLCAtLXJvb3RgIHNwZWNpZmllcyBhIG5hbWUpLlxuICogQ2FuIGFsc28gYmUgdXNlZCBtYW51YWxseSB0byBtYWtlIHJvb3RzIGF2YWlsYWJsZSBhY3Jvc3MgbW9kdWxlcy5cbiAqIEBuYW1lIHJvb3RzXG4gKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsUm9vdD59XG4gKiBAZXhhbXBsZVxuICogLy8gcGJqcyAtciBteXJvb3QgLW8gY29tcGlsZWQuanMgLi4uXG4gKlxuICogLy8gaW4gYW5vdGhlciBtb2R1bGU6XG4gKiByZXF1aXJlKFwiLi9jb21waWxlZC5qc1wiKTtcbiAqXG4gKiAvLyBpbiBhbnkgc3Vic2VxdWVudCBtb2R1bGU6XG4gKiB2YXIgcm9vdCA9IHByb3RvYnVmLnJvb3RzW1wibXlyb290XCJdO1xuICovXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIHByb3RvYnVmID0gZXhwb3J0cztcblxuLyoqXG4gKiBCdWlsZCB0eXBlLCBvbmUgb2YgYFwiZnVsbFwiYCwgYFwibGlnaHRcImAgb3IgYFwibWluaW1hbFwiYC5cbiAqIEBuYW1lIGJ1aWxkXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGNvbnN0XG4gKi9cbnByb3RvYnVmLmJ1aWxkID0gXCJtaW5pbWFsXCI7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLldyaXRlciAgICAgICA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlcldyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlcl9idWZmZXJcIik7XG5wcm90b2J1Zi5SZWFkZXIgICAgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJfYnVmZmVyXCIpO1xuXG4vLyBVdGlsaXR5XG5wcm90b2J1Zi51dGlsICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5wcm90b2J1Zi5ycGMgICAgICAgICAgPSByZXF1aXJlKFwiLi9ycGNcIik7XG5wcm90b2J1Zi5yb290cyAgICAgICAgPSByZXF1aXJlKFwiLi9yb290c1wiKTtcbnByb3RvYnVmLmNvbmZpZ3VyZSAgICA9IGNvbmZpZ3VyZTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qKlxuICogUmVjb25maWd1cmVzIHRoZSBsaWJyYXJ5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmUoKSB7XG4gICAgcHJvdG9idWYudXRpbC5fY29uZmlndXJlKCk7XG4gICAgcHJvdG9idWYuV3JpdGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyV3JpdGVyKTtcbiAgICBwcm90b2J1Zi5SZWFkZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJSZWFkZXIpO1xufVxuXG4vLyBTZXQgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudFxuY29uZmlndXJlKCk7XG4iLAogICAgIi8qZXNsaW50LWRpc2FibGUgYmxvY2stc2NvcGVkLXZhciwgaWQtbGVuZ3RoLCBuby1jb250cm9sLXJlZ2V4LCBuby1tYWdpYy1udW1iZXJzLCBuby1wcm90b3R5cGUtYnVpbHRpbnMsIG5vLXJlZGVjbGFyZSwgbm8tc2hhZG93LCBuby12YXIsIHNvcnQtdmFycyovXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciAkcHJvdG9idWYgPSByZXF1aXJlKFwicHJvdG9idWZqcy9taW5pbWFsXCIpO1xuLy8gQ29tbW9uIGFsaWFzZXNcbnZhciAkUmVhZGVyID0gJHByb3RvYnVmLlJlYWRlciwgJFdyaXRlciA9ICRwcm90b2J1Zi5Xcml0ZXIsICR1dGlsID0gJHByb3RvYnVmLnV0aWw7XG4vLyBFeHBvcnRlZCByb290IG5hbWVzcGFjZVxudmFyICRyb290ID0gJHByb3RvYnVmLnJvb3RzW1wiZGVmYXVsdFwiXSB8fCAoJHByb3RvYnVmLnJvb3RzW1wiZGVmYXVsdFwiXSA9IHt9KTtcbiRyb290Lm9wZW50ZWxlbWV0cnkgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIE5hbWVzcGFjZSBvcGVudGVsZW1ldHJ5LlxuICAgICAqIEBleHBvcnRzIG9wZW50ZWxlbWV0cnlcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICovXG4gICAgdmFyIG9wZW50ZWxlbWV0cnkgPSB7fTtcbiAgICBvcGVudGVsZW1ldHJ5LnByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5hbWVzcGFjZSBwcm90by5cbiAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnlcbiAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHByb3RvID0ge307XG4gICAgICAgIHByb3RvLmNvbW1vbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE5hbWVzcGFjZSBjb21tb24uXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90b1xuICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgY29tbW9uID0ge307XG4gICAgICAgICAgICBjb21tb24udjEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSB2MS5cbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb25cbiAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIHYxID0ge307XG4gICAgICAgICAgICAgICAgdjEuQW55VmFsdWUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBBbnlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzdHJpbmdWYWx1ZV0gQW55VmFsdWUgc3RyaW5nVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtib29sZWFufG51bGx9IFtib29sVmFsdWVdIEFueVZhbHVlIGJvb2xWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtpbnRWYWx1ZV0gQW55VmFsdWUgaW50VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2RvdWJsZVZhbHVlXSBBbnlWYWx1ZSBkb3VibGVWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBcnJheVZhbHVlfG51bGx9IFthcnJheVZhbHVlXSBBbnlWYWx1ZSBhcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlTGlzdHxudWxsfSBba3ZsaXN0VmFsdWVdIEFueVZhbHVlIGt2bGlzdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbYnl0ZXNWYWx1ZV0gQW55VmFsdWUgYnl0ZXNWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQW55VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gQW55VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElBbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQW55VmFsdWU9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFueVZhbHVlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEFueVZhbHVlIHN0cmluZ1ZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHN0cmluZ1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnByb3RvdHlwZS5zdHJpbmdWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBib29sVmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW58bnVsbHx1bmRlZmluZWR9IGJvb2xWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5wcm90b3R5cGUuYm9vbFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEFueVZhbHVlIGludFZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gaW50VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUucHJvdG90eXBlLmludFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEFueVZhbHVlIGRvdWJsZVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRvdWJsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnByb3RvdHlwZS5kb3VibGVWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBhcnJheVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQXJyYXlWYWx1ZXxudWxsfHVuZGVmaW5lZH0gYXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5wcm90b3R5cGUuYXJyYXlWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBrdmxpc3RWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlTGlzdHxudWxsfHVuZGVmaW5lZH0ga3ZsaXN0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUucHJvdG90eXBlLmt2bGlzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEFueVZhbHVlIGJ5dGVzVmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1VpbnQ4QXJyYXl8bnVsbHx1bmRlZmluZWR9IGJ5dGVzVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUucHJvdG90eXBlLmJ5dGVzVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmVPZiBmaWVsZCBuYW1lcyBib3VuZCB0byB2aXJ0dWFsIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICAgICAgICAgICAgICAgICAgdmFyICRvbmVPZkZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEFueVZhbHVlIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcInN0cmluZ1ZhbHVlXCJ8XCJib29sVmFsdWVcInxcImludFZhbHVlXCJ8XCJkb3VibGVWYWx1ZVwifFwiYXJyYXlWYWx1ZVwifFwia3ZsaXN0VmFsdWVcInxcImJ5dGVzVmFsdWVcInx1bmRlZmluZWR9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbnlWYWx1ZS5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJzdHJpbmdWYWx1ZVwiLCBcImJvb2xWYWx1ZVwiLCBcImludFZhbHVlXCIsIFwiZG91YmxlVmFsdWVcIiwgXCJhcnJheVZhbHVlXCIsIFwia3ZsaXN0VmFsdWVcIiwgXCJieXRlc1ZhbHVlXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgQW55VmFsdWUgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZX0gQW55VmFsdWUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFueVZhbHVlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEFueVZhbHVlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlfSBtZXNzYWdlIEFueVZhbHVlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0cmluZ1ZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdHJpbmdWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5zdHJpbmcobWVzc2FnZS5zdHJpbmdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ib29sVmFsdWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImJvb2xWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovIDE2KS5ib29sKG1lc3NhZ2UuYm9vbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmludFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJpbnRWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDAgPSovIDI0KS5pbnQ2NChtZXNzYWdlLmludFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRvdWJsZVZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkb3VibGVWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovIDMzKS5kb3VibGUobWVzc2FnZS5kb3VibGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcnJheVZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJhcnJheVZhbHVlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUuZW5jb2RlKG1lc3NhZ2UuYXJyYXlWYWx1ZSwgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAyID0qLyA0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmt2bGlzdFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJrdmxpc3RWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QuZW5jb2RlKG1lc3NhZ2Uua3ZsaXN0VmFsdWUsIHdyaXRlci51aW50MzIoLyogaWQgNiwgd2lyZVR5cGUgMiA9Ki8gNTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ieXRlc1ZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJieXRlc1ZhbHVlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNywgd2lyZVR5cGUgMiA9Ki8gNTgpLmJ5dGVzKG1lc3NhZ2UuYnl0ZXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEFueVZhbHVlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlfSBtZXNzYWdlIEFueVZhbHVlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEFueVZhbHVlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZX0gQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0cmluZ1ZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJvb2xWYWx1ZSA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaW50VmFsdWUgPSByZWFkZXIuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kb3VibGVWYWx1ZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnJheVZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmt2bGlzdFZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnl0ZXNWYWx1ZSA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBBbnlWYWx1ZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWV9IEFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBBbnlWYWx1ZSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0cmluZ1ZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0cmluZ1ZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnN0cmluZ1ZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nVmFsdWU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYm9vbFZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJvb2xWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmJvb2xWYWx1ZSAhPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJvb2xWYWx1ZTogYm9vbGVhbiBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW50VmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiaW50VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuaW50VmFsdWUpICYmICEobWVzc2FnZS5pbnRWYWx1ZSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5pbnRWYWx1ZS5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmludFZhbHVlLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaW50VmFsdWU6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZG91YmxlVmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZG91YmxlVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5kb3VibGVWYWx1ZSAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZG91YmxlVmFsdWU6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJyYXlWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhcnJheVZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXJyYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFycmF5VmFsdWUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5rdmxpc3RWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJrdmxpc3RWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmVyaWZ5KG1lc3NhZ2Uua3ZsaXN0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJrdmxpc3RWYWx1ZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJ5dGVzVmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYnl0ZXNWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5ieXRlc1ZhbHVlICYmIHR5cGVvZiBtZXNzYWdlLmJ5dGVzVmFsdWUubGVuZ3RoID09PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UuYnl0ZXNWYWx1ZSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJieXRlc1ZhbHVlOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBBbnlWYWx1ZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlfSBBbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnN0cmluZ1ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpbmdWYWx1ZSA9IFN0cmluZyhvYmplY3Quc3RyaW5nVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5ib29sVmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJvb2xWYWx1ZSA9IEJvb2xlYW4ob2JqZWN0LmJvb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmludFZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLmludFZhbHVlID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LmludFZhbHVlKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmludFZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmludFZhbHVlID0gcGFyc2VJbnQob2JqZWN0LmludFZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5pbnRWYWx1ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pbnRWYWx1ZSA9IG9iamVjdC5pbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmludFZhbHVlID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmludFZhbHVlID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5pbnRWYWx1ZS5sb3cgPj4+IDAsIG9iamVjdC5pbnRWYWx1ZS5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kb3VibGVWYWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZG91YmxlVmFsdWUgPSBOdW1iZXIob2JqZWN0LmRvdWJsZVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXJyYXlWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXJyYXlWYWx1ZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmFycmF5VmFsdWU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFycmF5VmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmFycmF5VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5rdmxpc3RWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Qua3ZsaXN0VmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5rdmxpc3RWYWx1ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua3ZsaXN0VmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QuZnJvbU9iamVjdChvYmplY3Qua3ZsaXN0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5ieXRlc1ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYnl0ZXNWYWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3QuYnl0ZXNWYWx1ZSwgbWVzc2FnZS5ieXRlc1ZhbHVlID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgob2JqZWN0LmJ5dGVzVmFsdWUpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LmJ5dGVzVmFsdWUubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnl0ZXNWYWx1ZSA9IG9iamVjdC5ieXRlc1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gQW55VmFsdWUgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZX0gbWVzc2FnZSBBbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0cmluZ1ZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0cmluZ1ZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0cmluZ1ZhbHVlID0gbWVzc2FnZS5zdHJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwic3RyaW5nVmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJvb2xWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJib29sVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYm9vbFZhbHVlID0gbWVzc2FnZS5ib29sVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBcImJvb2xWYWx1ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW50VmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiaW50VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuaW50VmFsdWUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5pbnRWYWx1ZSA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLmludFZhbHVlKSA6IG1lc3NhZ2UuaW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaW50VmFsdWUgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UuaW50VmFsdWUpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuaW50VmFsdWUubG93ID4+PiAwLCBtZXNzYWdlLmludFZhbHVlLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLmludFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJpbnRWYWx1ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZG91YmxlVmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZG91YmxlVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZG91YmxlVmFsdWUgPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UuZG91YmxlVmFsdWUpID8gU3RyaW5nKG1lc3NhZ2UuZG91YmxlVmFsdWUpIDogbWVzc2FnZS5kb3VibGVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiZG91YmxlVmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFycmF5VmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXJyYXlWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hcnJheVZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmFycmF5VmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJhcnJheVZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5rdmxpc3RWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJrdmxpc3RWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5rdmxpc3RWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC50b09iamVjdChtZXNzYWdlLmt2bGlzdFZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwia3ZsaXN0VmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJ5dGVzVmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYnl0ZXNWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5ieXRlc1ZhbHVlID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLmJ5dGVzVmFsdWUsIDAsIG1lc3NhZ2UuYnl0ZXNWYWx1ZS5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLmJ5dGVzVmFsdWUpIDogbWVzc2FnZS5ieXRlc1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJieXRlc1ZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBBbnlWYWx1ZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5BcnJheVZhbHVlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gQXJyYXlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlPnxudWxsfSBbdmFsdWVzXSBBcnJheVZhbHVlIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQXJyYXlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBBcnJheVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQXJyYXlWYWx1ZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQXJyYXlWYWx1ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQXJyYXlWYWx1ZSB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQW55VmFsdWU+fSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLnByb3RvdHlwZS52YWx1ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBBcnJheVZhbHVlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFycmF5VmFsdWU9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWV9IEFycmF5VmFsdWUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFycmF5VmFsdWUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlWYWx1ZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBBcnJheVZhbHVlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBcnJheVZhbHVlfSBtZXNzYWdlIEFycmF5VmFsdWUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLnZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnZhbHVlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKG1lc3NhZ2UudmFsdWVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBBcnJheVZhbHVlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBcnJheVZhbHVlfSBtZXNzYWdlIEFycmF5VmFsdWUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBBcnJheVZhbHVlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWV9IEFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS52YWx1ZXMgJiYgbWVzc2FnZS52YWx1ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gQXJyYXlWYWx1ZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlfSBBcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEFycmF5VmFsdWUgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidmFsdWVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UudmFsdWVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS52YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUudmVyaWZ5KG1lc3NhZ2UudmFsdWVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEFycmF5VmFsdWUgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWV9IEFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFycmF5VmFsdWUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZhbHVlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC52YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudmFsdWVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudmFsdWVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZnJvbU9iamVjdChvYmplY3QudmFsdWVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBBcnJheVZhbHVlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlfSBtZXNzYWdlIEFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlcyAmJiBtZXNzYWdlLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnZhbHVlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UudmFsdWVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEFycmF5VmFsdWUgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBBcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5VmFsdWU7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5LZXlWYWx1ZUxpc3QgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIEtleVZhbHVlTGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUtleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFt2YWx1ZXNdIEtleVZhbHVlTGlzdCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEtleVZhbHVlTGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIEtleVZhbHVlTGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUtleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWVMaXN0PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBLZXlWYWx1ZUxpc3QocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEtleVZhbHVlTGlzdCB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5wcm90b3R5cGUudmFsdWVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgS2V5VmFsdWVMaXN0IGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWVMaXN0PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3R9IEtleVZhbHVlTGlzdCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEtleVZhbHVlTGlzdChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBLZXlWYWx1ZUxpc3QgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZUxpc3R9IG1lc3NhZ2UgS2V5VmFsdWVMaXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLnZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnZhbHVlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKG1lc3NhZ2UudmFsdWVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBLZXlWYWx1ZUxpc3QgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZUxpc3R9IG1lc3NhZ2UgS2V5VmFsdWVMaXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEtleVZhbHVlTGlzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdH0gS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnZhbHVlcyAmJiBtZXNzYWdlLnZhbHVlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEtleVZhbHVlTGlzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdH0gS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBLZXlWYWx1ZUxpc3QgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZUxpc3QudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UudmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLnZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIEtleVZhbHVlTGlzdCBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3R9IEtleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QudmFsdWVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC52YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QudmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnZhbHVlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmFsdWVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QudmFsdWVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIEtleVZhbHVlTGlzdCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3R9IG1lc3NhZ2UgS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlcyAmJiBtZXNzYWdlLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnZhbHVlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UudmFsdWVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEtleVZhbHVlTGlzdCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBLZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdFwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gS2V5VmFsdWVMaXN0O1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuS2V5VmFsdWUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIEtleVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW2tleV0gS2V5VmFsdWUga2V5XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlfG51bGx9IFt2YWx1ZV0gS2V5VmFsdWUgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEtleVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgS2V5VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElLZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEtleVZhbHVlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEtleVZhbHVlIGtleS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBrZXlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUucHJvdG90eXBlLmtleSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBLZXlWYWx1ZSB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlfG51bGx8dW5kZWZpbmVkfSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS5wcm90b3R5cGUudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBLZXlWYWx1ZSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlfSBLZXlWYWx1ZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgS2V5VmFsdWUocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgS2V5VmFsdWUgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWV9IG1lc3NhZ2UgS2V5VmFsdWUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uua2V5ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJrZXlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuc3RyaW5nKG1lc3NhZ2Uua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5lbmNvZGUobWVzc2FnZS52YWx1ZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgS2V5VmFsdWUgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWV9IG1lc3NhZ2UgS2V5VmFsdWUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBLZXlWYWx1ZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWV9IEtleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5rZXkgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEtleVZhbHVlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZX0gS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgS2V5VmFsdWUgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmtleSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJrZXlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLmtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImtleTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeShtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBLZXlWYWx1ZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlfSBLZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmtleSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2V5ID0gU3RyaW5nKG9iamVjdC5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52YWx1ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIEtleVZhbHVlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWV9IG1lc3NhZ2UgS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5rZXkgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5rZXkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwia2V5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5rZXkgPSBtZXNzYWdlLmtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgS2V5VmFsdWUgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEtleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEtleVZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBJbnN0cnVtZW50YXRpb25TY29wZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtuYW1lXSBJbnN0cnVtZW50YXRpb25TY29wZSBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFt2ZXJzaW9uXSBJbnN0cnVtZW50YXRpb25TY29wZSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT58bnVsbH0gW2F0dHJpYnV0ZXNdIEluc3RydW1lbnRhdGlvblNjb3BlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnRdIEluc3RydW1lbnRhdGlvblNjb3BlIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEluc3RydW1lbnRhdGlvblNjb3BlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEluc3RydW1lbnRhdGlvblNjb3BlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbnN0cnVtZW50YXRpb25TY29wZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEluc3RydW1lbnRhdGlvblNjb3BlIG5hbWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gbmFtZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5wcm90b3R5cGUubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJbnN0cnVtZW50YXRpb25TY29wZSB2ZXJzaW9uLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUucHJvdG90eXBlLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSW5zdHJ1bWVudGF0aW9uU2NvcGUgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSW5zdHJ1bWVudGF0aW9uU2NvcGUgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBkcm9wcGVkQXR0cmlidXRlc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLnByb3RvdHlwZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgSW5zdHJ1bWVudGF0aW9uU2NvcGUgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZX0gSW5zdHJ1bWVudGF0aW9uU2NvcGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluc3RydW1lbnRhdGlvblNjb3BlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEluc3RydW1lbnRhdGlvblNjb3BlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlfSBtZXNzYWdlIEluc3RydW1lbnRhdGlvblNjb3BlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52ZXJzaW9uICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ2ZXJzaW9uXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLnN0cmluZyhtZXNzYWdlLnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMCA9Ki8gMzIpLnVpbnQzMihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZX0gbWVzc2FnZSBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGV9IEluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZlcnNpb24gPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEluc3RydW1lbnRhdGlvblNjb3BlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZX0gSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEluc3RydW1lbnRhdGlvblNjb3BlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZlcnNpb24gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidmVyc2lvblwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UudmVyc2lvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZlcnNpb246IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEluc3RydW1lbnRhdGlvblNjb3BlIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGV9IEluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubmFtZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IFN0cmluZyhvYmplY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnZlcnNpb24gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZlcnNpb24gPSBTdHJpbmcob2JqZWN0LnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gSW5zdHJ1bWVudGF0aW9uU2NvcGUgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZX0gbWVzc2FnZSBJbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmVyc2lvbiA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmVyc2lvbiAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ2ZXJzaW9uXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52ZXJzaW9uID0gbWVzc2FnZS52ZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmF0dHJpYnV0ZXNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgSW5zdHJ1bWVudGF0aW9uU2NvcGUgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuRW50aXR5UmVmID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRW50aXR5UmVmLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzY2hlbWFVcmxdIEVudGl0eVJlZiBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW3R5cGVdIEVudGl0eVJlZiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz58bnVsbH0gW2lkS2V5c10gRW50aXR5UmVmIGlkS2V5c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fG51bGx9IFtkZXNjcmlwdGlvbktleXNdIEVudGl0eVJlZiBkZXNjcmlwdGlvbktleXNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEVudGl0eVJlZi5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFbnRpdHlSZWYuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUVudGl0eVJlZj19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRW50aXR5UmVmKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRLZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW50aXR5UmVmIHNjaGVtYVVybC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVudGl0eVJlZiB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5wcm90b3R5cGUudHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbnRpdHlSZWYgaWRLZXlzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48c3RyaW5nPn0gaWRLZXlzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYucHJvdG90eXBlLmlkS2V5cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbnRpdHlSZWYgZGVzY3JpcHRpb25LZXlzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48c3RyaW5nPn0gZGVzY3JpcHRpb25LZXlzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYucHJvdG90eXBlLmRlc2NyaXB0aW9uS2V5cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEVudGl0eVJlZiBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUVudGl0eVJlZj19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmfSBFbnRpdHlSZWYgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbnRpdHlSZWYocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRW50aXR5UmVmIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JRW50aXR5UmVmfSBtZXNzYWdlIEVudGl0eVJlZiBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuc3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInR5cGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuc3RyaW5nKG1lc3NhZ2UudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pZEtleXMgIT0gbnVsbCAmJiBtZXNzYWdlLmlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmlkS2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2UuaWRLZXlzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cyAhPSBudWxsICYmIG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDQsIHdpcmVUeXBlIDIgPSovIDM0KS5zdHJpbmcobWVzc2FnZS5kZXNjcmlwdGlvbktleXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFbnRpdHlSZWYgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklFbnRpdHlSZWZ9IG1lc3NhZ2UgRW50aXR5UmVmIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFbnRpdHlSZWYgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZ9IEVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHlwZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5pZEtleXMgJiYgbWVzc2FnZS5pZEtleXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmlkS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pZEtleXMucHVzaChyZWFkZXIuc3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cyAmJiBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cy5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEVudGl0eVJlZiBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZn0gRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRW50aXR5UmVmIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNjaGVtYVVybCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInR5cGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0eXBlOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlkS2V5cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJpZEtleXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5pZEtleXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJpZEtleXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmlkS2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLmlkS2V5c1tpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJpZEtleXM6IHN0cmluZ1tdIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kZXNjcmlwdGlvbktleXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGVzY3JpcHRpb25LZXlzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGVzY3JpcHRpb25LZXlzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kZXNjcmlwdGlvbktleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5kZXNjcmlwdGlvbktleXNbaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGVzY3JpcHRpb25LZXlzOiBzdHJpbmdbXSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEVudGl0eVJlZiBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZ9IEVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50eXBlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50eXBlID0gU3RyaW5nKG9iamVjdC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuaWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5pZEtleXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLmlkS2V5czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pZEtleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5pZEtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaWRLZXlzW2ldID0gU3RyaW5nKG9iamVjdC5pZEtleXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kZXNjcmlwdGlvbktleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmRlc2NyaXB0aW9uS2V5cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWYuZGVzY3JpcHRpb25LZXlzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmRlc2NyaXB0aW9uS2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kZXNjcmlwdGlvbktleXNbaV0gPSBTdHJpbmcob2JqZWN0LmRlc2NyaXB0aW9uS2V5c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFbnRpdHlSZWYgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmfSBtZXNzYWdlIEVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5pZEtleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGVzY3JpcHRpb25LZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50eXBlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IG1lc3NhZ2Uuc2NoZW1hVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50eXBlID0gbWVzc2FnZS50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaWRLZXlzICYmIG1lc3NhZ2UuaWRLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5pZEtleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuaWRLZXlzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaWRLZXlzW2pdID0gbWVzc2FnZS5pZEtleXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kZXNjcmlwdGlvbktleXMgJiYgbWVzc2FnZS5kZXNjcmlwdGlvbktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlc2NyaXB0aW9uS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5kZXNjcmlwdGlvbktleXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZXNjcmlwdGlvbktleXNbal0gPSBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEVudGl0eVJlZiB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW50aXR5UmVmO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYxO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiBjb21tb247XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHByb3RvLnJlc291cmNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTmFtZXNwYWNlIHJlc291cmNlLlxuICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG9cbiAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIHJlc291cmNlID0ge307XG4gICAgICAgICAgICByZXNvdXJjZS52MSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIHYxLlxuICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlXG4gICAgICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHZhciB2MSA9IHt9O1xuICAgICAgICAgICAgICAgIHYxLlJlc291cmNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBSZXNvdXJjZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gUmVzb3VyY2UgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZHJvcHBlZEF0dHJpYnV0ZXNDb3VudF0gUmVzb3VyY2UgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JRW50aXR5UmVmPnxudWxsfSBbZW50aXR5UmVmc10gUmVzb3VyY2UgZW50aXR5UmVmc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgUmVzb3VyY2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFJlc291cmNlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5JUmVzb3VyY2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlc291cmNlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlSZWZzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZSBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPn0gYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlIGVudGl0eVJlZnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JRW50aXR5UmVmPn0gZW50aXR5UmVmc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5lbnRpdHlSZWZzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgUmVzb3VyY2UgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZX0gUmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlfSBtZXNzYWdlIFJlc291cmNlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovIDE2KS51aW50MzIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVudGl0eVJlZnMgIT0gbnVsbCAmJiBtZXNzYWdlLmVudGl0eVJlZnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5lbnRpdHlSZWZzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWYuZW5jb2RlKG1lc3NhZ2UuZW50aXR5UmVmc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgUmVzb3VyY2UgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5JUmVzb3VyY2V9IG1lc3NhZ2UgUmVzb3VyY2UgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlfSBSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5lbnRpdHlSZWZzICYmIG1lc3NhZ2UuZW50aXR5UmVmcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW50aXR5UmVmcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbnRpdHlSZWZzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFJlc291cmNlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2V9IFJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFJlc291cmNlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVudGl0eVJlZnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZW50aXR5UmVmc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmVudGl0eVJlZnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJlbnRpdHlSZWZzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5lbnRpdHlSZWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi52ZXJpZnkobWVzc2FnZS5lbnRpdHlSZWZzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZW50aXR5UmVmcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFJlc291cmNlIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlfSBSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZW50aXR5UmVmcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuZW50aXR5UmVmcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVudGl0eVJlZnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW50aXR5UmVmcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmVudGl0eVJlZnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZW50aXR5UmVmc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVudGl0eVJlZnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbnRpdHlSZWZzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLmZyb21PYmplY3Qob2JqZWN0LmVudGl0eVJlZnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgUmVzb3VyY2UgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2V9IG1lc3NhZ2UgUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVudGl0eVJlZnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVudGl0eVJlZnMgJiYgbWVzc2FnZS5lbnRpdHlSZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lbnRpdHlSZWZzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmVudGl0eVJlZnMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lbnRpdHlSZWZzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLnRvT2JqZWN0KG1lc3NhZ2UuZW50aXR5UmVmc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBSZXNvdXJjZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2U7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjE7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlO1xuICAgICAgICB9KSgpO1xuICAgICAgICBwcm90by50cmFjZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE5hbWVzcGFjZSB0cmFjZS5cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvXG4gICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciB0cmFjZSA9IHt9O1xuICAgICAgICAgICAgdHJhY2UudjEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSB2MS5cbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZVxuICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgdjEgPSB7fTtcbiAgICAgICAgICAgICAgICB2MS5UcmFjZXNEYXRhID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBUcmFjZXNEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElUcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVJlc291cmNlU3BhbnM+fG51bGx9IFtyZXNvdXJjZVNwYW5zXSBUcmFjZXNEYXRhIHJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFRyYWNlc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFRyYWNlc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElUcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVRyYWNlc0RhdGE9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYWNlc0RhdGEocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBUcmFjZXNEYXRhIHJlc291cmNlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklSZXNvdXJjZVNwYW5zPn0gcmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5wcm90b3R5cGUucmVzb3VyY2VTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFRyYWNlc0RhdGEgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVRyYWNlc0RhdGE9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YX0gVHJhY2VzRGF0YSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmFjZXNEYXRhKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFRyYWNlc0RhdGEgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVRyYWNlc0RhdGF9IG1lc3NhZ2UgVHJhY2VzRGF0YSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuZW5jb2RlKG1lc3NhZ2UucmVzb3VyY2VTcGFuc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgVHJhY2VzRGF0YSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGEudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JVHJhY2VzRGF0YX0gbWVzc2FnZSBUcmFjZXNEYXRhIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBUcmFjZXNEYXRhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhfSBUcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5yZXNvdXJjZVNwYW5zICYmIG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFRyYWNlc0RhdGEgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGF9IFRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBUcmFjZXNEYXRhLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBUcmFjZXNEYXRhIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlU3BhbnNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VTcGFuczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2VTcGFuc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBUcmFjZXNEYXRhIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YX0gVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZXNvdXJjZVNwYW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YS5yZXNvdXJjZVNwYW5zOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlU3BhbnNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhLnJlc291cmNlU3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlU3BhbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgVHJhY2VzRGF0YSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGF9IG1lc3NhZ2UgVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlU3BhbnMgJiYgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZVNwYW5zW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnRvT2JqZWN0KG1lc3NhZ2UucmVzb3VyY2VTcGFuc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBUcmFjZXNEYXRhIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBUcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFjZXNEYXRhO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuUmVzb3VyY2VTcGFucyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgUmVzb3VyY2VTcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlfG51bGx9IFtyZXNvdXJjZV0gUmVzb3VyY2VTcGFucyByZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTY29wZVNwYW5zPnxudWxsfSBbc2NvcGVTcGFuc10gUmVzb3VyY2VTcGFucyBzY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzY2hlbWFVcmxdIFJlc291cmNlU3BhbnMgc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBSZXNvdXJjZVNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBSZXNvdXJjZVNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklSZXNvdXJjZVNwYW5zPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZVNwYW5zKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb3VyY2VTcGFucyByZXNvdXJjZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5JUmVzb3VyY2V8bnVsbHx1bmRlZmluZWR9IHJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLnByb3RvdHlwZS5yZXNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZVNwYW5zIHNjb3BlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTY29wZVNwYW5zPn0gc2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5wcm90b3R5cGUuc2NvcGVTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZVNwYW5zIHNjaGVtYVVybC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFJlc291cmNlU3BhbnMgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVJlc291cmNlU3BhbnM9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc30gUmVzb3VyY2VTcGFucyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNvdXJjZVNwYW5zKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlU3BhbnMgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVJlc291cmNlU3BhbnN9IG1lc3NhZ2UgUmVzb3VyY2VTcGFucyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJyZXNvdXJjZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVuY29kZShtZXNzYWdlLnJlc291cmNlLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVTcGFucyAhPSBudWxsICYmIG1lc3NhZ2Uuc2NvcGVTcGFucy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnNjb3BlU3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5lbmNvZGUobWVzc2FnZS5zY29wZVNwYW5zW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgUmVzb3VyY2VTcGFucyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JUmVzb3VyY2VTcGFuc30gbWVzc2FnZSBSZXNvdXJjZVNwYW5zIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZVNwYW5zIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zfSBSZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zY29wZVNwYW5zICYmIG1lc3NhZ2Uuc2NvcGVTcGFucy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZVNwYW5zLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZVNwYW5zIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zfSBSZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgUmVzb3VyY2VTcGFucyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLnZlcmlmeShtZXNzYWdlLnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZVNwYW5zICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlU3BhbnNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5zY29wZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVTcGFuczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Uuc2NvcGVTcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMudmVyaWZ5KG1lc3NhZ2Uuc2NvcGVTcGFuc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlU3BhbnMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgUmVzb3VyY2VTcGFucyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnN9IFJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZnJvbU9iamVjdChvYmplY3QucmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY29wZVNwYW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5zY29wZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5zY29wZVNwYW5zOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5zY29wZVNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNjb3BlU3BhbnNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnNjb3BlU3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZVNwYW5zW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLmZyb21PYmplY3Qob2JqZWN0LnNjb3BlU3BhbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NoZW1hVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSBTdHJpbmcob2JqZWN0LnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFJlc291cmNlU3BhbnMgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zfSBtZXNzYWdlIFJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLnRvT2JqZWN0KG1lc3NhZ2UucmVzb3VyY2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVTcGFucyAmJiBtZXNzYWdlLnNjb3BlU3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2Uuc2NvcGVTcGFucy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlU3BhbnNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMudG9PYmplY3QobWVzc2FnZS5zY29wZVNwYW5zW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IG1lc3NhZ2Uuc2NoZW1hVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgUmVzb3VyY2VTcGFucyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VTcGFucztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlNjb3BlU3BhbnMgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFNjb3BlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JSW5zdHJ1bWVudGF0aW9uU2NvcGV8bnVsbH0gW3Njb3BlXSBTY29wZVNwYW5zIHNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNwYW4+fG51bGx9IFtzcGFuc10gU2NvcGVTcGFucyBzcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBTY29wZVNwYW5zIHNjaGVtYVVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgU2NvcGVTcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgU2NvcGVTcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSVNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU2NvcGVTcGFucz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU2NvcGVTcGFucyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTY29wZVNwYW5zIHNjb3BlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JSW5zdHJ1bWVudGF0aW9uU2NvcGV8bnVsbHx1bmRlZmluZWR9IHNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLnByb3RvdHlwZS5zY29wZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTY29wZVNwYW5zIHNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3Bhbj59IHNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLnByb3RvdHlwZS5zcGFucyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTY29wZVNwYW5zIHNjaGVtYVVybC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFNjb3BlU3BhbnMgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNjb3BlU3BhbnM9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc30gU2NvcGVTcGFucyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTY29wZVNwYW5zKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFNjb3BlU3BhbnMgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNjb3BlU3BhbnN9IG1lc3NhZ2UgU2NvcGVTcGFucyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY29wZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5lbmNvZGUobWVzc2FnZS5zY29wZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5zICE9IG51bGwgJiYgbWVzc2FnZS5zcGFucy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnNwYW5zLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uZW5jb2RlKG1lc3NhZ2Uuc3BhbnNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5zdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTY29wZVNwYW5zIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTY29wZVNwYW5zfSBtZXNzYWdlIFNjb3BlU3BhbnMgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFNjb3BlU3BhbnMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnN9IFNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zcGFucyAmJiBtZXNzYWdlLnNwYW5zLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU2NvcGVTcGFucyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc30gU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFNjb3BlU3BhbnMgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5KG1lc3NhZ2Uuc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5zICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5zXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2Uuc3BhbnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Uuc3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnZlcmlmeShtZXNzYWdlLnNwYW5zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbnMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgU2NvcGVTcGFucyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnN9IFNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NvcGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNjb3BlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLnNjb3BlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmZyb21PYmplY3Qob2JqZWN0LnNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3BhbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5zcGFuczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LnNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNwYW5zW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5zcGFuczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNwYW5zW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmZyb21PYmplY3Qob2JqZWN0LnNwYW5zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTY29wZVNwYW5zIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc30gbWVzc2FnZSBTY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnRvT2JqZWN0KG1lc3NhZ2Uuc2NvcGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbnMgJiYgbWVzc2FnZS5zcGFucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2Uuc3BhbnMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi50b09iamVjdChtZXNzYWdlLnNwYW5zW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IG1lc3NhZ2Uuc2NoZW1hVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgU2NvcGVTcGFucyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NvcGVTcGFucztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlNwYW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFNwYW4uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtVaW50OEFycmF5fG51bGx9IFt0cmFjZUlkXSBTcGFuIHRyYWNlSWRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtVaW50OEFycmF5fG51bGx9IFtzcGFuSWRdIFNwYW4gc3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFt0cmFjZVN0YXRlXSBTcGFuIHRyYWNlU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtVaW50OEFycmF5fG51bGx9IFtwYXJlbnRTcGFuSWRdIFNwYW4gcGFyZW50U3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gU3BhbiBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbbmFtZV0gU3BhbiBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLlNwYW5LaW5kfG51bGx9IFtraW5kXSBTcGFuIGtpbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbc3RhcnRUaW1lVW5peE5hbm9dIFNwYW4gc3RhcnRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbZW5kVGltZVVuaXhOYW5vXSBTcGFuIGVuZFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBTcGFuIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnRdIFNwYW4gZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUV2ZW50PnxudWxsfSBbZXZlbnRzXSBTcGFuIGV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZHJvcHBlZEV2ZW50c0NvdW50XSBTcGFuIGRyb3BwZWRFdmVudHNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUxpbms+fG51bGx9IFtsaW5rc10gU3BhbiBsaW5rc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZHJvcHBlZExpbmtzQ291bnRdIFNwYW4gZHJvcHBlZExpbmtzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTdGF0dXN8bnVsbH0gW3N0YXR1c10gU3BhbiBzdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFNwYW4uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFNwYW4uXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNwYW49fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNwYW4ocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiB0cmFjZUlkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS50cmFjZUlkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gc3BhbklkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLnNwYW5JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIHRyYWNlU3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gdHJhY2VTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUudHJhY2VTdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIHBhcmVudFNwYW5JZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7VWludDhBcnJheXxudWxsfHVuZGVmaW5lZH0gcGFyZW50U3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5wYXJlbnRTcGFuSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBmbGFncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUuZmxhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBuYW1lLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBraW5kLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uU3BhbktpbmR8bnVsbHx1bmRlZmluZWR9IGtpbmRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLmtpbmQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBzdGFydFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5zdGFydFRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIGVuZFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IGVuZFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUuZW5kVGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBkcm9wcGVkQXR0cmlidXRlc0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUV2ZW50Pn0gZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5ldmVudHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBkcm9wcGVkRXZlbnRzQ291bnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZHJvcHBlZEV2ZW50c0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5kcm9wcGVkRXZlbnRzQ291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBsaW5rcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JTGluaz59IGxpbmtzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5saW5rcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIGRyb3BwZWRMaW5rc0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRMaW5rc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5kcm9wcGVkTGlua3NDb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIHN0YXR1cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3RhdHVzfG51bGx8dW5kZWZpbmVkfSBzdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLnN0YXR1cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFNwYW4gaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNwYW49fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbn0gU3BhbiBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTcGFuKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFNwYW4gbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNwYW59IG1lc3NhZ2UgU3BhbiBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRyYWNlSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuYnl0ZXMobWVzc2FnZS50cmFjZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLmJ5dGVzKG1lc3NhZ2Uuc3BhbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlU3RhdGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRyYWNlU3RhdGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2UudHJhY2VTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJlbnRTcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInBhcmVudFNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDQsIHdpcmVUeXBlIDIgPSovIDM0KS5ieXRlcyhtZXNzYWdlLnBhcmVudFNwYW5JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNSwgd2lyZVR5cGUgMiA9Ki8gNDIpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uua2luZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwia2luZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDAgPSovIDQ4KS5pbnQzMihtZXNzYWdlLmtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNywgd2lyZVR5cGUgMSA9Ki8gNTcpLmZpeGVkNjQobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImVuZFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDgsIHdpcmVUeXBlIDEgPSovIDY1KS5maXhlZDY0KG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDksIHdpcmVUeXBlIDIgPSovIDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEwLCB3aXJlVHlwZSAwID0qLyA4MCkudWludDMyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ldmVudHMgIT0gbnVsbCAmJiBtZXNzYWdlLmV2ZW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmV2ZW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LmVuY29kZShtZXNzYWdlLmV2ZW50c1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxMSwgd2lyZVR5cGUgMiA9Ki8gOTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkRXZlbnRzQ291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImRyb3BwZWRFdmVudHNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEyLCB3aXJlVHlwZSAwID0qLyA5NikudWludDMyKG1lc3NhZ2UuZHJvcHBlZEV2ZW50c0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmxpbmtzICE9IG51bGwgJiYgbWVzc2FnZS5saW5rcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmxpbmtzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay5lbmNvZGUobWVzc2FnZS5saW5rc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxMywgd2lyZVR5cGUgMiA9Ki8gMTA2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZExpbmtzQ291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImRyb3BwZWRMaW5rc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTQsIHdpcmVUeXBlIDAgPSovIDExMikudWludDMyKG1lc3NhZ2UuZHJvcHBlZExpbmtzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdGF0dXNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMuZW5jb2RlKG1lc3NhZ2Uuc3RhdHVzLCB3cml0ZXIudWludDMyKC8qIGlkIDE1LCB3aXJlVHlwZSAyID0qLyAxMjIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxNiwgd2lyZVR5cGUgNSA9Ki8gMTMzKS5maXhlZDMyKG1lc3NhZ2UuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTcGFuIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTcGFufSBtZXNzYWdlIFNwYW4gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFNwYW4gbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW59IFNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYWNlSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZVN0YXRlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcmVudFNwYW5JZCA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IHJlYWRlci5maXhlZDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5raW5kID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVuZFRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5ldmVudHMgJiYgbWVzc2FnZS5ldmVudHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ldmVudHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRFdmVudHNDb3VudCA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UubGlua3MgJiYgbWVzc2FnZS5saW5rcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubGlua3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZExpbmtzQ291bnQgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXR1cyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU3BhbiBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbn0gU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFNwYW4gbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnRyYWNlSWQgJiYgdHlwZW9mIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGggPT09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcobWVzc2FnZS50cmFjZUlkKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRyYWNlSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnNwYW5JZCAmJiB0eXBlb2YgbWVzc2FnZS5zcGFuSWQubGVuZ3RoID09PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc3BhbklkKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNwYW5JZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZVN0YXRlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnRyYWNlU3RhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0cmFjZVN0YXRlOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcmVudFNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJwYXJlbnRTcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5wYXJlbnRTcGFuSWQgJiYgdHlwZW9mIG1lc3NhZ2UucGFyZW50U3BhbklkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnBhcmVudFNwYW5JZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJwYXJlbnRTcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5mbGFncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmtpbmQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwia2luZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uua2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwia2luZDogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZW5kVGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmVuZFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmVuZFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImVuZFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ldmVudHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXZlbnRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZXZlbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXZlbnRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5ldmVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnZlcmlmeShtZXNzYWdlLmV2ZW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV2ZW50cy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRFdmVudHNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkRXZlbnRzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5kcm9wcGVkRXZlbnRzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkRXZlbnRzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmxpbmtzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImxpbmtzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UubGlua3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJsaW5rczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UubGlua3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsudmVyaWZ5KG1lc3NhZ2UubGlua3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJsaW5rcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRMaW5rc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZExpbmtzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkTGlua3NDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLnZlcmlmeShtZXNzYWdlLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdGF0dXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFNwYW4gbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFufSBTcGFuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRyYWNlSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC50cmFjZUlkID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRpbC5iYXNlNjQuZGVjb2RlKG9iamVjdC50cmFjZUlkLCBtZXNzYWdlLnRyYWNlSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChvYmplY3QudHJhY2VJZCkpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3QudHJhY2VJZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZUlkID0gb2JqZWN0LnRyYWNlSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNwYW5JZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNwYW5JZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3Quc3BhbklkLCBtZXNzYWdlLnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC5zcGFuSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnNwYW5JZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSBvYmplY3Quc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50cmFjZVN0YXRlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZVN0YXRlID0gU3RyaW5nKG9iamVjdC50cmFjZVN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucGFyZW50U3BhbklkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucGFyZW50U3BhbklkID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRpbC5iYXNlNjQuZGVjb2RlKG9iamVjdC5wYXJlbnRTcGFuSWQsIG1lc3NhZ2UucGFyZW50U3BhbklkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgob2JqZWN0LnBhcmVudFNwYW5JZCkpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3QucGFyZW50U3BhbklkLmxlbmd0aCA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcmVudFNwYW5JZCA9IG9iamVjdC5wYXJlbnRTcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmZsYWdzICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IG9iamVjdC5mbGFncyA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubmFtZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IFN0cmluZyhvYmplY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iamVjdC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Qua2luZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5raW5kID0gb2JqZWN0LmtpbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmtpbmQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX0lOVEVSTkFMXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmtpbmQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX1NFUlZFUlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5raW5kID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9DTElFTlRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2luZCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTUEFOX0tJTkRfUFJPRFVDRVJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2luZCA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTUEFOX0tJTkRfQ09OU1VNRVJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2luZCA9IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5zdGFydFRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZW5kVGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLmVuZFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5lbmRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuZW5kVGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVuZFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5lbmRUaW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmVuZFRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gPSBvYmplY3QuZW5kVGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuZW5kVGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVuZFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QuZW5kVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LmVuZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmF0dHJpYnV0ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmV2ZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuZXZlbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5ldmVudHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXZlbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZXZlbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmV2ZW50c1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uZXZlbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXZlbnRzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LmZyb21PYmplY3Qob2JqZWN0LmV2ZW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kcm9wcGVkRXZlbnRzQ291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRFdmVudHNDb3VudCA9IG9iamVjdC5kcm9wcGVkRXZlbnRzQ291bnQgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmxpbmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5saW5rcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4ubGlua3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5saW5rcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5saW5rc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4ubGlua3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5saW5rc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rLmZyb21PYmplY3Qob2JqZWN0LmxpbmtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkTGlua3NDb3VudCA9IG9iamVjdC5kcm9wcGVkTGlua3NDb3VudCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3RhdHVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zdGF0dXMgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uc3RhdHVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGF0dXMgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5mcm9tT2JqZWN0KG9iamVjdC5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTcGFuIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbn0gbWVzc2FnZSBTcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5saW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKG9iamVjdC50cmFjZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgIT09IEFycmF5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3Quc3BhbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlU3RhdGUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJlbnRTcGFuSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50U3BhbklkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJlbnRTcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIob2JqZWN0LnBhcmVudFNwYW5JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qua2luZCA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/IFwiU1BBTl9LSU5EX1VOU1BFQ0lGSUVEXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVuZFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVuZFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRFdmVudHNDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRMaW5rc0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhdHVzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnRyYWNlSWQsIDAsIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLnRyYWNlSWQpIDogbWVzc2FnZS50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnNwYW5JZCwgMCwgbWVzc2FnZS5zcGFuSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS5zcGFuSWQpIDogbWVzc2FnZS5zcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZVN0YXRlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlU3RhdGUgPSBtZXNzYWdlLnRyYWNlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJlbnRTcGFuSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFyZW50U3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJlbnRTcGFuSWQgPSBvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKG1lc3NhZ2UucGFyZW50U3BhbklkLCAwLCBtZXNzYWdlLnBhcmVudFNwYW5JZC5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLnBhcmVudFNwYW5JZCkgOiBtZXNzYWdlLnBhcmVudFNwYW5JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmFtZSA9IG1lc3NhZ2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmtpbmQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwia2luZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qua2luZCA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5TcGFuS2luZFttZXNzYWdlLmtpbmRdID09PSB1bmRlZmluZWQgPyBtZXNzYWdlLmtpbmQgOiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uU3BhbktpbmRbbWVzc2FnZS5raW5kXSA6IG1lc3NhZ2Uua2luZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZW5kVGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lbmRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8pIDogbWVzc2FnZS5lbmRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZW5kVGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLmVuZFRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLmVuZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5lbmRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ldmVudHMgJiYgbWVzc2FnZS5ldmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5ldmVudHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5ldmVudHNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQudG9PYmplY3QobWVzc2FnZS5ldmVudHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEV2ZW50c0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRFdmVudHNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEV2ZW50c0NvdW50ID0gbWVzc2FnZS5kcm9wcGVkRXZlbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5saW5rcyAmJiBtZXNzYWdlLmxpbmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5saW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5saW5rcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmxpbmtzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsudG9PYmplY3QobWVzc2FnZS5saW5rc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkTGlua3NDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkTGlua3NDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZExpbmtzQ291bnQgPSBtZXNzYWdlLmRyb3BwZWRMaW5rc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhdHVzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMudG9PYmplY3QobWVzc2FnZS5zdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gbWVzc2FnZS5mbGFncztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFNwYW4gdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW5LaW5kIGVudW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBuYW1lIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5TcGFuS2luZFxuICAgICAgICAgICAgICAgICAgICAgKiBAZW51bSB7bnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9LSU5EX1VOU1BFQ0lGSUVEPTAgU1BBTl9LSU5EX1VOU1BFQ0lGSUVEIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTUEFOX0tJTkRfSU5URVJOQUw9MSBTUEFOX0tJTkRfSU5URVJOQUwgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNQQU5fS0lORF9TRVJWRVI9MiBTUEFOX0tJTkRfU0VSVkVSIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTUEFOX0tJTkRfQ0xJRU5UPTMgU1BBTl9LSU5EX0NMSUVOVCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9LSU5EX1BST0RVQ0VSPTQgU1BBTl9LSU5EX1BST0RVQ0VSIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTUEFOX0tJTkRfQ09OU1VNRVI9NSBTUEFOX0tJTkRfQ09OU1VNRVIgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4uU3BhbktpbmQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlc0J5SWQgPSB7fSwgdmFsdWVzID0gT2JqZWN0LmNyZWF0ZSh2YWx1ZXNCeUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzBdID0gXCJTUEFOX0tJTkRfVU5TUEVDSUZJRURcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMV0gPSBcIlNQQU5fS0lORF9JTlRFUk5BTFwiXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyXSA9IFwiU1BBTl9LSU5EX1NFUlZFUlwiXSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFszXSA9IFwiU1BBTl9LSU5EX0NMSUVOVFwiXSA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFs0XSA9IFwiU1BBTl9LSU5EX1BST0RVQ0VSXCJdID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzVdID0gXCJTUEFOX0tJTkRfQ09OU1VNRVJcIl0gPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5FdmVudCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbdGltZVVuaXhOYW5vXSBFdmVudCB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtuYW1lXSBFdmVudCBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBFdmVudCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZHJvcHBlZEF0dHJpYnV0ZXNDb3VudF0gRXZlbnQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUV2ZW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV2ZW50KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFdmVudCB0aW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV2ZW50IG5hbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5wcm90b3R5cGUubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV2ZW50IGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPn0gYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXZlbnQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnByb3RvdHlwZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFdmVudCBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JRXZlbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnR9IEV2ZW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFdmVudChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFdmVudCBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JRXZlbnR9IG1lc3NhZ2UgRXZlbnQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDEgPSovIDkpLmZpeGVkNjQobWVzc2FnZS50aW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAwID0qLyAzMikudWludDMyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFdmVudCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JRXZlbnR9IG1lc3NhZ2UgRXZlbnQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFdmVudCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudH0gRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV2ZW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnR9IEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXZlbnQgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8pICYmICEobWVzc2FnZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXZlbnQgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnR9IEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50aW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG9iamVjdC50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm5hbWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gU3RyaW5nKG9iamVjdC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV2ZW50IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnR9IG1lc3NhZ2UgRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnRpbWVVbml4TmFubykgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS50aW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm5hbWUgPSBtZXNzYWdlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmF0dHJpYnV0ZXNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV2ZW50IHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV2ZW50O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICBTcGFuLkxpbmsgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgTGluay5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbdHJhY2VJZF0gTGluayB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge1VpbnQ4QXJyYXl8bnVsbH0gW3NwYW5JZF0gTGluayBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFt0cmFjZVN0YXRlXSBMaW5rIHRyYWNlU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT58bnVsbH0gW2F0dHJpYnV0ZXNdIExpbmsgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnRdIExpbmsgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2ZsYWdzXSBMaW5rIGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBMaW5rLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTGluay5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLklMaW5rPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExpbmsocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIExpbmsgdHJhY2VJZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1VpbnQ4QXJyYXl8bnVsbHx1bmRlZmluZWR9IHRyYWNlSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsucHJvdG90eXBlLnRyYWNlSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBMaW5rIHNwYW5JZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1VpbnQ4QXJyYXl8bnVsbHx1bmRlZmluZWR9IHNwYW5JZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5wcm90b3R5cGUuc3BhbklkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGluayB0cmFjZVN0YXRlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSB0cmFjZVN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnByb3RvdHlwZS50cmFjZVN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGluayBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBMaW5rIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBMaW5rIGZsYWdzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5wcm90b3R5cGUuZmxhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IExpbmsgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JTGluaz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rfSBMaW5rIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpbmsocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTGluayBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUxpbmt9IG1lc3NhZ2UgTGluayBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5ieXRlcyhtZXNzYWdlLnRyYWNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5ieXRlcyhtZXNzYWdlLnNwYW5JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VTdGF0ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidHJhY2VTdGF0ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2UudHJhY2VTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKG1lc3NhZ2UuYXR0cmlidXRlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAyID0qLyAzNCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDAgPSovIDQwKS51aW50MzIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNiwgd2lyZVR5cGUgNSA9Ki8gNTMpLmZpeGVkMzIobWVzc2FnZS5mbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBMaW5rIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JTGlua30gbWVzc2FnZSBMaW5rIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIExpbmsgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rfSBMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VJZCA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VTdGF0ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gcmVhZGVyLmZpeGVkMzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIExpbmsgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmt9IExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgTGluayBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnRyYWNlSWQgJiYgdHlwZW9mIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGggPT09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcobWVzc2FnZS50cmFjZUlkKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnNwYW5JZCAmJiB0eXBlb2YgbWVzc2FnZS5zcGFuSWQubGVuZ3RoID09PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc3BhbklkKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlU3RhdGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHJhY2VTdGF0ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnRyYWNlU3RhdGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VTdGF0ZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZmxhZ3M6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBMaW5rIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua30gTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHJhY2VJZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC50cmFjZUlkID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3QudHJhY2VJZCwgbWVzc2FnZS50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgob2JqZWN0LnRyYWNlSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC50cmFjZUlkLmxlbmd0aCA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZUlkID0gb2JqZWN0LnRyYWNlSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zcGFuSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc3BhbklkID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3Quc3BhbklkLCBtZXNzYWdlLnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC5zcGFuSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5zcGFuSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNwYW5JZCA9IG9iamVjdC5zcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50cmFjZVN0YXRlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VTdGF0ZSA9IFN0cmluZyhvYmplY3QudHJhY2VTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5mbGFncyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gb2JqZWN0LmZsYWdzID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgTGluayBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua30gbWVzc2FnZSBMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3QudHJhY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKG9iamVjdC5zcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZVN0YXRlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnRyYWNlSWQsIDAsIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLnRyYWNlSWQpIDogbWVzc2FnZS50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKG1lc3NhZ2Uuc3BhbklkLCAwLCBtZXNzYWdlLnNwYW5JZC5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLnNwYW5JZCkgOiBtZXNzYWdlLnNwYW5JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZVN0YXRlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZVN0YXRlID0gbWVzc2FnZS50cmFjZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gbWVzc2FnZS5mbGFncztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBMaW5rIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbms7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTcGFuO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuU3RhdHVzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBTdGF0dXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbbWVzc2FnZV0gU3RhdHVzIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5TdGF0dXNDb2RlfG51bGx9IFtjb2RlXSBTdGF0dXMgY29kZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgU3RhdHVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBTdGF0dXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3RhdHVzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdGF0dXMocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3RhdHVzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMucHJvdG90eXBlLm1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3RhdHVzIGNvZGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGV8bnVsbHx1bmRlZmluZWR9IGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLnByb3RvdHlwZS5jb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgU3RhdHVzIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVN0YXR1cz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXN9IFN0YXR1cyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YXR1cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTdGF0dXMgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTdGF0dXN9IG1lc3NhZ2UgU3RhdHVzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXNzYWdlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJtZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLnN0cmluZyhtZXNzYWdlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY29kZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiY29kZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDAgPSovIDI0KS5pbnQzMihtZXNzYWdlLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTdGF0dXMgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTdGF0dXN9IG1lc3NhZ2UgU3RhdHVzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN0YXR1cyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXN9IFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29kZSA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN0YXR1cyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXN9IFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgU3RhdHVzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb2RlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvZGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvZGU6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFN0YXR1cyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzfSBTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubWVzc2FnZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWVzc2FnZSA9IFN0cmluZyhvYmplY3QubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iamVjdC5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuY29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb2RlID0gb2JqZWN0LmNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1RBVFVTX0NPREVfVU5TRVRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29kZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTVEFUVVNfQ09ERV9PS1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb2RlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNUQVRVU19DT0RFX0VSUk9SXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvZGUgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgU3RhdHVzIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXN9IG1lc3NhZ2UgU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb2RlID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gXCJTVEFUVVNfQ09ERV9VTlNFVFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWVzc2FnZSA9IG1lc3NhZ2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvZGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiY29kZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY29kZSA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGVbbWVzc2FnZS5jb2RlXSA9PT0gdW5kZWZpbmVkID8gbWVzc2FnZS5jb2RlIDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMuU3RhdHVzQ29kZVttZXNzYWdlLmNvZGVdIDogbWVzc2FnZS5jb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgU3RhdHVzIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdGF0dXNDb2RlIGVudW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBuYW1lIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQGVudW0ge251bWJlcn1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNUQVRVU19DT0RFX1VOU0VUPTAgU1RBVFVTX0NPREVfVU5TRVQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNUQVRVU19DT0RFX09LPTEgU1RBVFVTX0NPREVfT0sgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNUQVRVU19DT0RFX0VSUk9SPTIgU1RBVFVTX0NPREVfRVJST1IgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5TdGF0dXNDb2RlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXNCeUlkID0ge30sIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUodmFsdWVzQnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFswXSA9IFwiU1RBVFVTX0NPREVfVU5TRVRcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMV0gPSBcIlNUQVRVU19DT0RFX09LXCJdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzJdID0gXCJTVEFUVVNfQ09ERV9FUlJPUlwiXSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogU3BhbkZsYWdzIGVudW0uXG4gICAgICAgICAgICAgICAgICogQG5hbWUgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuRmxhZ3NcbiAgICAgICAgICAgICAgICAgKiBAZW51bSB7bnVtYmVyfVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTUEFOX0ZMQUdTX0RPX05PVF9VU0U9MCBTUEFOX0ZMQUdTX0RPX05PVF9VU0UgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9GTEFHU19UUkFDRV9GTEFHU19NQVNLPTI1NSBTUEFOX0ZMQUdTX1RSQUNFX0ZMQUdTX01BU0sgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9GTEFHU19DT05URVhUX0hBU19JU19SRU1PVEVfTUFTSz0yNTYgU1BBTl9GTEFHU19DT05URVhUX0hBU19JU19SRU1PVEVfTUFTSyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTUEFOX0ZMQUdTX0NPTlRFWFRfSVNfUkVNT1RFX01BU0s9NTEyIFNQQU5fRkxBR1NfQ09OVEVYVF9JU19SRU1PVEVfTUFTSyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHYxLlNwYW5GbGFncyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXNCeUlkID0ge30sIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUodmFsdWVzQnlJZCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzBdID0gXCJTUEFOX0ZMQUdTX0RPX05PVF9VU0VcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyNTVdID0gXCJTUEFOX0ZMQUdTX1RSQUNFX0ZMQUdTX01BU0tcIl0gPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzI1Nl0gPSBcIlNQQU5fRkxBR1NfQ09OVEVYVF9IQVNfSVNfUkVNT1RFX01BU0tcIl0gPSAyNTY7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzUxMl0gPSBcIlNQQU5fRkxBR1NfQ09OVEVYVF9JU19SRU1PVEVfTUFTS1wiXSA9IDUxMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2MTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2U7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHByb3RvLmNvbGxlY3RvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE5hbWVzcGFjZSBjb2xsZWN0b3IuXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90b1xuICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgY29sbGVjdG9yID0ge307XG4gICAgICAgICAgICBjb2xsZWN0b3IudHJhY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSB0cmFjZS5cbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3JcbiAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIHRyYWNlID0ge307XG4gICAgICAgICAgICAgICAgdHJhY2UudjEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIHYxLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2VcbiAgICAgICAgICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0ge307XG4gICAgICAgICAgICAgICAgICAgIHYxLlRyYWNlU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgVHJhY2VTZXJ2aWNlIHNlcnZpY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFRyYWNlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGV4dGVuZHMgJHByb3RvYnVmLnJwYy5TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhY2VTZXJ2aWNlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb3RvYnVmLnJwYy5TZXJ2aWNlLmNhbGwodGhpcywgcnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKFRyYWNlU2VydmljZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCRwcm90b2J1Zi5ycGMuU2VydmljZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IFRyYWNlU2VydmljZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBuZXcgVHJhY2VTZXJ2aWNlIHNlcnZpY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBycGMgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuVHJhY2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7VHJhY2VTZXJ2aWNlfSBSUEMgc2VydmljZS4gVXNlZnVsIHdoZXJlIHJlcXVlc3RzIGFuZC9vciByZXNwb25zZXMgYXJlIHN0cmVhbWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFjZVNlcnZpY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLlRyYWNlU2VydmljZSNleHBvcnRffS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5UcmFjZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlZGVmIEV4cG9ydENhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfG51bGx9IGVycm9yIEVycm9yLCBpZiBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2V9IFtyZXNwb25zZV0gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDYWxscyBFeHBvcnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuVHJhY2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IHJlcXVlc3QgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5UcmFjZVNlcnZpY2UuRXhwb3J0Q2FsbGJhY2t9IGNhbGxiYWNrIE5vZGUtc3R5bGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggdGhlIGVycm9yLCBpZiBhbnksIGFuZCBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB2YXJpYXRpb24gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJhY2VTZXJ2aWNlLnByb3RvdHlwZVtcImV4cG9ydFwiXSA9IGZ1bmN0aW9uIGV4cG9ydF8ocmVxdWVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNDYWxsKGV4cG9ydF8sICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QsICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLCByZXF1ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBcIm5hbWVcIiwgeyB2YWx1ZTogXCJFeHBvcnRcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbHMgRXhwb3J0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLlRyYWNlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSByZXF1ZXN0IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlPn0gUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHZhcmlhdGlvbiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFjZVNlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVJlc291cmNlU3BhbnM+fG51bGx9IFtyZXNvdXJjZVNwYW5zXSBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IHJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IHJlc291cmNlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JUmVzb3VyY2VTcGFucz59IHJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5wcm90b3R5cGUucmVzb3VyY2VTcGFucyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdH0gbWVzc2FnZSBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5lbmNvZGUobWVzc2FnZS5yZXNvdXJjZVNwYW5zW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5yZXNvdXJjZVNwYW5zICYmIG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlU3BhbnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VTcGFucyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVNwYW5zXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnJlc291cmNlU3BhbnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VTcGFuczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy52ZXJpZnkobWVzc2FnZS5yZXNvdXJjZVNwYW5zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZVNwYW5zLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlc291cmNlU3BhbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucmVzb3VyY2VTcGFuc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlU3BhbnNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuZnJvbU9iamVjdChvYmplY3QucmVzb3VyY2VTcGFuc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZVNwYW5zICYmIG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VTcGFuc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy50b09iamVjdChtZXNzYWdlLnJlc291cmNlU3BhbnNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3N8bnVsbH0gW3BhcnRpYWxTdWNjZXNzXSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBwYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgcGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc3xudWxsfHVuZGVmaW5lZH0gcGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnByb3RvdHlwZS5wYXJ0aWFsU3VjY2VzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBtZXNzYWdlIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicGFydGlhbFN1Y2Nlc3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZW5jb2RlKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MsIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2V9IEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy52ZXJpZnkobWVzc2FnZS5wYXJ0aWFsU3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInBhcnRpYWxTdWNjZXNzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2V9IEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5wYXJ0aWFsU3VjY2VzcyAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5wYXJ0aWFsU3VjY2Vzczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5mcm9tT2JqZWN0KG9iamVjdC5wYXJ0aWFsU3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBtZXNzYWdlIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcnRpYWxTdWNjZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy50b09iamVjdChtZXNzYWdlLnBhcnRpYWxTdWNjZXNzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbcmVqZWN0ZWRTcGFuc10gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyByZWplY3RlZFNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbZXJyb3JNZXNzYWdlXSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgcmVqZWN0ZWRTcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSByZWplY3RlZFNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLnJlamVjdGVkU3BhbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIGVycm9yTWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInJlamVjdGVkU3BhbnNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMCA9Ki8gOCkuaW50NjQobWVzc2FnZS5yZWplY3RlZFNwYW5zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImVycm9yTWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuc3RyaW5nKG1lc3NhZ2UuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzfSBtZXNzYWdlIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWRTcGFucyA9IHJlYWRlci5pbnQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvck1lc3NhZ2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVqZWN0ZWRTcGFucyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZFNwYW5zXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnJlamVjdGVkU3BhbnMpICYmICEobWVzc2FnZS5yZWplY3RlZFNwYW5zICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnJlamVjdGVkU3BhbnMubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZFNwYW5zLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlamVjdGVkU3BhbnM6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yTWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5lcnJvck1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JNZXNzYWdlOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzfSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVqZWN0ZWRTcGFucyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnJlamVjdGVkU3BhbnMgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QucmVqZWN0ZWRTcGFucykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QucmVqZWN0ZWRTcGFucyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWRTcGFucyA9IHBhcnNlSW50KG9iamVjdC5yZWplY3RlZFNwYW5zLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QucmVqZWN0ZWRTcGFucyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWRTcGFucyA9IG9iamVjdC5yZWplY3RlZFNwYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnJlamVjdGVkU3BhbnMgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkU3BhbnMgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnJlamVjdGVkU3BhbnMubG93ID4+PiAwLCBvYmplY3QucmVqZWN0ZWRTcGFucy5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXJyb3JNZXNzYWdlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXJyb3JNZXNzYWdlID0gU3RyaW5nKG9iamVjdC5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzfSBtZXNzYWdlIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkU3BhbnMgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZFNwYW5zID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVqZWN0ZWRTcGFucyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZFNwYW5zXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UucmVqZWN0ZWRTcGFucyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZFNwYW5zID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UucmVqZWN0ZWRTcGFucykgOiBtZXNzYWdlLnJlamVjdGVkU3BhbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZFNwYW5zID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnJlamVjdGVkU3BhbnMpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UucmVqZWN0ZWRTcGFucy5sb3cgPj4+IDAsIG1lc3NhZ2UucmVqZWN0ZWRTcGFucy5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5yZWplY3RlZFNwYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yTWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lcnJvck1lc3NhZ2UgPSBtZXNzYWdlLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2MTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICBjb2xsZWN0b3IubWV0cmljcyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIG1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yXG4gICAgICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHZhciBtZXRyaWNzID0ge307XG4gICAgICAgICAgICAgICAgbWV0cmljcy52MSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgdjEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHZhciB2MSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2MS5NZXRyaWNzU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTWV0cmljc1NlcnZpY2Ugc2VydmljZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBNZXRyaWNzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGV4dGVuZHMgJHByb3RvYnVmLnJwYy5TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWV0cmljc1NlcnZpY2UocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJvdG9idWYucnBjLlNlcnZpY2UuY2FsbCh0aGlzLCBycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAoTWV0cmljc1NlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgkcHJvdG9idWYucnBjLlNlcnZpY2UucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBNZXRyaWNzU2VydmljZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBuZXcgTWV0cmljc1NlcnZpY2Ugc2VydmljZSB1c2luZyB0aGUgc3BlY2lmaWVkIHJwYyBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLk1ldHJpY3NTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7TWV0cmljc1NlcnZpY2V9IFJQQyBzZXJ2aWNlLiBVc2VmdWwgd2hlcmUgcmVxdWVzdHMgYW5kL29yIHJlc3BvbnNlcyBhcmUgc3RyZWFtZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIE1ldHJpY3NTZXJ2aWNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLk1ldHJpY3NTZXJ2aWNlI2V4cG9ydF99LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuTWV0cmljc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlZGVmIEV4cG9ydENhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfG51bGx9IGVycm9yIEVycm9yLCBpZiBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlfSBbcmVzcG9uc2VdIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDYWxscyBFeHBvcnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5NZXRyaWNzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gcmVxdWVzdCBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5NZXRyaWNzU2VydmljZS5FeHBvcnRDYWxsYmFja30gY2FsbGJhY2sgTm9kZS1zdHlsZSBjYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgZXJyb3IsIGlmIGFueSwgYW5kIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdmFyaWF0aW9uIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1ldHJpY3NTZXJ2aWNlLnByb3RvdHlwZVtcImV4cG9ydFwiXSA9IGZ1bmN0aW9uIGV4cG9ydF8ocmVxdWVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNDYWxsKGV4cG9ydF8sICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UsIHJlcXVlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwibmFtZVwiLCB7IHZhbHVlOiBcIkV4cG9ydFwiIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDYWxscyBFeHBvcnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5NZXRyaWNzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gcmVxdWVzdCBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZT59IFByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB2YXJpYXRpb24gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0cmljc1NlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3M+fG51bGx9IFtyZXNvdXJjZU1ldHJpY3NdIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCByZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IHJlc291cmNlTWV0cmljcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVJlc291cmNlTWV0cmljcz59IHJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNvdXJjZU1ldHJpY3MgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5JRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3R9IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5JRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0fSBtZXNzYWdlIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZW5jb2RlKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gbWVzc2FnZSBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgJiYgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0fSBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZU1ldHJpY3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy52ZXJpZnkobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTWV0cmljcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0fSBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2VNZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QucmVzb3VyY2VNZXRyaWNzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlTWV0cmljc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QucmVzb3VyY2VNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTWV0cmljc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZnJvbU9iamVjdChvYmplY3QucmVzb3VyY2VNZXRyaWNzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgJiYgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZU1ldHJpY3Nbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0KG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc3xudWxsfSBbcGFydGlhbFN1Y2Nlc3NdIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgcGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBwYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc3xudWxsfHVuZGVmaW5lZH0gcGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLnByb3RvdHlwZS5wYXJ0aWFsU3VjY2VzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2V9IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5JRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZX0gbWVzc2FnZSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJwYXJ0aWFsU3VjY2Vzc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MsIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5JRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZX0gbWVzc2FnZSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlfSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2V9IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy52ZXJpZnkobWVzc2FnZS5wYXJ0aWFsU3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInBhcnRpYWxTdWNjZXNzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlfSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucGFydGlhbFN1Y2Nlc3MgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLnBhcnRpYWxTdWNjZXNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5mcm9tT2JqZWN0KG9iamVjdC5wYXJ0aWFsU3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZX0gbWVzc2FnZSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFydGlhbFN1Y2Nlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInBhcnRpYWxTdWNjZXNzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdChtZXNzYWdlLnBhcnRpYWxTdWNjZXNzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbcmVqZWN0ZWREYXRhUG9pbnRzXSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgcmVqZWN0ZWREYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbZXJyb3JNZXNzYWdlXSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgcmVqZWN0ZWREYXRhUG9pbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHJlamVjdGVkRGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS5yZWplY3RlZERhdGFQb2ludHMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgZXJyb3JNZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBlcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5wcm90b3R5cGUuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzfSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInJlamVjdGVkRGF0YVBvaW50c1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAwID0qLyA4KS5pbnQ2NChtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJlcnJvck1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLnN0cmluZyhtZXNzYWdlLmVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5JRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzfSBtZXNzYWdlIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzfSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyA9IHJlYWRlci5pbnQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvck1lc3NhZ2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzfSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZERhdGFQb2ludHNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzKSAmJiAhKG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cy5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cy5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZWplY3RlZERhdGFQb2ludHM6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yTWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5lcnJvck1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JNZXNzYWdlOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzID0gcGFyc2VJbnQob2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzID0gb2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzLmxvdyA+Pj4gMCwgb2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cy5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXJyb3JNZXNzYWdlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXJyb3JNZXNzYWdlID0gU3RyaW5nKG9iamVjdC5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlamVjdGVkRGF0YVBvaW50c1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMpIDogbWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cy5sb3cgPj4+IDAsIG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXJyb3JNZXNzYWdlID0gbWVzc2FnZS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYxO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldHJpY3M7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgY29sbGVjdG9yLmxvZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSBsb2dzLlxuICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3RvclxuICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgbG9ncyA9IHt9O1xuICAgICAgICAgICAgICAgIGxvZ3MudjEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIHYxLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdjEuTG9nc1NlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IExvZ3NTZXJ2aWNlIHNlcnZpY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTG9nc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBleHRlbmRzICRwcm90b2J1Zi5ycGMuU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExvZ3NTZXJ2aWNlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb3RvYnVmLnJwYy5TZXJ2aWNlLmNhbGwodGhpcywgcnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKExvZ3NTZXJ2aWNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoJHByb3RvYnVmLnJwYy5TZXJ2aWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gTG9nc1NlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgbmV3IExvZ3NTZXJ2aWNlIHNlcnZpY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBycGMgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5Mb2dzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUlBDSW1wbH0gcnBjSW1wbCBSUEMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcXVlc3REZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc3BvbnNlRGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge0xvZ3NTZXJ2aWNlfSBSUEMgc2VydmljZS4gVXNlZnVsIHdoZXJlIHJlcXVlc3RzIGFuZC9vciByZXNwb25zZXMgYXJlIHN0cmVhbWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2dzU2VydmljZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5Mb2dzU2VydmljZSNleHBvcnRffS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkxvZ3NTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZWRlZiBFeHBvcnRDYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZX0gW3Jlc3BvbnNlXSBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbHMgRXhwb3J0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuTG9nc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IHJlcXVlc3QgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuTG9nc1NlcnZpY2UuRXhwb3J0Q2FsbGJhY2t9IGNhbGxiYWNrIE5vZGUtc3R5bGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggdGhlIGVycm9yLCBpZiBhbnksIGFuZCBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHZhcmlhdGlvbiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2dzU2VydmljZS5wcm90b3R5cGVbXCJleHBvcnRcIl0gPSBmdW5jdGlvbiBleHBvcnRfKHJlcXVlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChleHBvcnRfLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLCByZXF1ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBcIm5hbWVcIiwgeyB2YWx1ZTogXCJFeHBvcnRcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbHMgRXhwb3J0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuTG9nc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IHJlcXVlc3QgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2U+fSBQcm9taXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdmFyaWF0aW9uIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvZ3NTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JUmVzb3VyY2VMb2dzPnxudWxsfSBbcmVzb3VyY2VMb2dzXSBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgcmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlcXVlc3Q9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCByZXNvdXJjZUxvZ3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklSZXNvdXJjZUxvZ3M+fSByZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5wcm90b3R5cGUucmVzb3VyY2VMb2dzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuSUV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0fSBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuSUV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdH0gbWVzc2FnZSBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZUxvZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLnJlc291cmNlTG9ncy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmVuY29kZShtZXNzYWdlLnJlc291cmNlTG9nc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UucmVzb3VyY2VMb2dzICYmIG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZUxvZ3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZUxvZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VMb2dzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnJlc291cmNlTG9ncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2VMb2dzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZUxvZ3MuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlc291cmNlTG9ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnJlc291cmNlTG9ncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QucmVzb3VyY2VMb2dzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5yZXNvdXJjZUxvZ3NbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTG9nczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZUxvZ3NbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlTG9nc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0fSBtZXNzYWdlIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VMb2dzICYmIG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VMb2dzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy50b09iamVjdChtZXNzYWdlLnJlc291cmNlTG9nc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N8bnVsbH0gW3BhcnRpYWxTdWNjZXNzXSBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIHBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgcGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N8bnVsbHx1bmRlZmluZWR9IHBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5wcm90b3R5cGUucGFydGlhbFN1Y2Nlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlfSBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuSUV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicGFydGlhbFN1Y2Nlc3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLmVuY29kZShtZXNzYWdlLnBhcnRpYWxTdWNjZXNzLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuSUV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZX0gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlfSBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJwYXJ0aWFsU3VjY2Vzcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZX0gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnBhcnRpYWxTdWNjZXNzICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5wYXJ0aWFsU3VjY2Vzczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdChvYmplY3QucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcnRpYWxTdWNjZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudG9PYmplY3QobWVzc2FnZS5wYXJ0aWFsU3VjY2Vzcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3JlamVjdGVkTG9nUmVjb3Jkc10gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIHJlamVjdGVkTG9nUmVjb3Jkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW2Vycm9yTWVzc2FnZV0gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIHJlamVjdGVkTG9nUmVjb3Jkcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSByZWplY3RlZExvZ1JlY29yZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5wcm90b3R5cGUucmVqZWN0ZWRMb2dSZWNvcmRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIGVycm9yTWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IG1lc3NhZ2UgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJyZWplY3RlZExvZ1JlY29yZHNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMCA9Ki8gOCkuaW50NjQobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yTWVzc2FnZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5zdHJpbmcobWVzc2FnZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuSUV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgPSByZWFkZXIuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXJyb3JNZXNzYWdlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcykgJiYgIShtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVqZWN0ZWRMb2dSZWNvcmRzOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UuZXJyb3JNZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImVycm9yTWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcyA9IHBhcnNlSW50KG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcyA9IG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnJlamVjdGVkTG9nUmVjb3Jkcy5sb3cgPj4+IDAsIG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmVycm9yTWVzc2FnZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yTWVzc2FnZSA9IFN0cmluZyhvYmplY3QuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IG1lc3NhZ2UgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkTG9nUmVjb3JkcyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkTG9nUmVjb3JkcyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZExvZ1JlY29yZHNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzKSA6IG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMubG93ID4+PiAwLCBtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3Jkcy5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVycm9yTWVzc2FnZSA9IG1lc3NhZ2UuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2MTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2dzO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0b3I7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHByb3RvLm1ldHJpY3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOYW1lc3BhY2UgbWV0cmljcy5cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvXG4gICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBtZXRyaWNzID0ge307XG4gICAgICAgICAgICBtZXRyaWNzLnYxID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgdjEuXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljc1xuICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgdjEgPSB7fTtcbiAgICAgICAgICAgICAgICB2MS5NZXRyaWNzRGF0YSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgTWV0cmljc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3M+fG51bGx9IFtyZXNvdXJjZU1ldHJpY3NdIE1ldHJpY3NEYXRhIHJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTWV0cmljc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTWV0cmljc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElNZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpY3NEYXRhPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXRyaWNzRGF0YShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljc0RhdGEgcmVzb3VyY2VNZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3M+fSByZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLnByb3RvdHlwZS5yZXNvdXJjZU1ldHJpY3MgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBNZXRyaWNzRGF0YSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklNZXRyaWNzRGF0YT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhfSBNZXRyaWNzRGF0YSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWV0cmljc0RhdGEocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTWV0cmljc0RhdGEgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljc0RhdGF9IG1lc3NhZ2UgTWV0cmljc0RhdGEgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWNzRGF0YS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzICE9IG51bGwgJiYgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZW5jb2RlKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBNZXRyaWNzRGF0YSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklNZXRyaWNzRGF0YX0gbWVzc2FnZSBNZXRyaWNzRGF0YSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIE1ldHJpY3NEYXRhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhfSBNZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnJlc291cmNlTWV0cmljcyAmJiBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgTWV0cmljc0RhdGEgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGF9IE1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIE1ldHJpY3NEYXRhIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlTWV0cmljc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnJlc291cmNlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VNZXRyaWNzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgTWV0cmljc0RhdGEgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhfSBNZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2VNZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhLnJlc291cmNlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucmVzb3VyY2VNZXRyaWNzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YS5yZXNvdXJjZU1ldHJpY3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3NbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlTWV0cmljc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBNZXRyaWNzRGF0YSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGF9IG1lc3NhZ2UgTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWNzRGF0YS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgJiYgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZU1ldHJpY3Nbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0KG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIE1ldHJpY3NEYXRhIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRyaWNzRGF0YTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlJlc291cmNlTWV0cmljcyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgUmVzb3VyY2VNZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlfG51bGx9IFtyZXNvdXJjZV0gUmVzb3VyY2VNZXRyaWNzIHJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU2NvcGVNZXRyaWNzPnxudWxsfSBbc2NvcGVNZXRyaWNzXSBSZXNvdXJjZU1ldHJpY3Mgc2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzY2hlbWFVcmxdIFJlc291cmNlTWV0cmljcyBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlc291cmNlTWV0cmljcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBSZXNvdXJjZU1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElSZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlc291cmNlTWV0cmljcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3BlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb3VyY2VNZXRyaWNzIHJlc291cmNlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZXxudWxsfHVuZGVmaW5lZH0gcmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MucHJvdG90eXBlLnJlc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlTWV0cmljcyBzY29wZU1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVNjb3BlTWV0cmljcz59IHNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5wcm90b3R5cGUuc2NvcGVNZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlTWV0cmljcyBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBSZXNvdXJjZU1ldHJpY3MgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVJlc291cmNlTWV0cmljcz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc30gUmVzb3VyY2VNZXRyaWNzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VNZXRyaWNzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlTWV0cmljcyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVJlc291cmNlTWV0cmljc30gbWVzc2FnZSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJyZXNvdXJjZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVuY29kZShtZXNzYWdlLnJlc291cmNlLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVNZXRyaWNzICE9IG51bGwgJiYgbWVzc2FnZS5zY29wZU1ldHJpY3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5zY29wZU1ldHJpY3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MuZW5jb2RlKG1lc3NhZ2Uuc2NvcGVNZXRyaWNzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgUmVzb3VyY2VNZXRyaWNzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JUmVzb3VyY2VNZXRyaWNzfSBtZXNzYWdlIFJlc291cmNlTWV0cmljcyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc30gUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zY29wZU1ldHJpY3MgJiYgbWVzc2FnZS5zY29wZU1ldHJpY3MubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZU1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc30gUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS52ZXJpZnkobWVzc2FnZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVNZXRyaWNzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlTWV0cmljc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnNjb3BlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Uuc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MudmVyaWZ5KG1lc3NhZ2Uuc2NvcGVNZXRyaWNzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVNZXRyaWNzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFJlc291cmNlTWV0cmljcyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc30gUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZXNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucmVzb3VyY2UgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZnJvbU9iamVjdChvYmplY3QucmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY29wZU1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnNjb3BlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5zY29wZU1ldHJpY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc2NvcGVNZXRyaWNzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVNZXRyaWNzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy5mcm9tT2JqZWN0KG9iamVjdC5zY29wZU1ldHJpY3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NoZW1hVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSBTdHJpbmcob2JqZWN0LnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFJlc291cmNlTWV0cmljcyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc30gbWVzc2FnZSBSZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS50b09iamVjdChtZXNzYWdlLnJlc291cmNlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlTWV0cmljcyAmJiBtZXNzYWdlLnNjb3BlTWV0cmljcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NvcGVNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnNjb3BlTWV0cmljcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlTWV0cmljc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MudG9PYmplY3QobWVzc2FnZS5zY29wZU1ldHJpY3Nbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gbWVzc2FnZS5zY2hlbWFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBSZXNvdXJjZU1ldHJpY3MgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTWV0cmljcztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlNjb3BlTWV0cmljcyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgU2NvcGVNZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZXxudWxsfSBbc2NvcGVdIFNjb3BlTWV0cmljcyBzY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpYz58bnVsbH0gW21ldHJpY3NdIFNjb3BlTWV0cmljcyBtZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzY2hlbWFVcmxdIFNjb3BlTWV0cmljcyBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFNjb3BlTWV0cmljcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBTY29wZU1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTY29wZU1ldHJpY3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNjb3BlTWV0cmljcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNjb3BlTWV0cmljcyBzY29wZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlfG51bGx8dW5kZWZpbmVkfSBzY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy5wcm90b3R5cGUuc2NvcGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVNZXRyaWNzIG1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpYz59IG1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MucHJvdG90eXBlLm1ldHJpY3MgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVNZXRyaWNzIHNjaGVtYVVybC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFNjb3BlTWV0cmljcyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU2NvcGVNZXRyaWNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzfSBTY29wZU1ldHJpY3MgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTY29wZU1ldHJpY3MocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU2NvcGVNZXRyaWNzIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU2NvcGVNZXRyaWNzfSBtZXNzYWdlIFNjb3BlTWV0cmljcyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNjb3BlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZShtZXNzYWdlLnNjb3BlLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2UubWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLm1ldHJpY3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuZW5jb2RlKG1lc3NhZ2UubWV0cmljc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFNjb3BlTWV0cmljcyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVNjb3BlTWV0cmljc30gbWVzc2FnZSBTY29wZU1ldHJpY3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU2NvcGVNZXRyaWNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3N9IFNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLm1ldHJpY3MgJiYgbWVzc2FnZS5tZXRyaWNzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTY29wZU1ldHJpY3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc30gU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBTY29wZU1ldHJpY3MgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5KG1lc3NhZ2Uuc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1ldHJpY3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWV0cmljc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLm1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5tZXRyaWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMudmVyaWZ5KG1lc3NhZ2UubWV0cmljc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldHJpY3MuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgU2NvcGVNZXRyaWNzIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzfSBTY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zY29wZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3Muc2NvcGU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZnJvbU9iamVjdChvYmplY3Quc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5tZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5tZXRyaWNzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MubWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubWV0cmljcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5tZXRyaWNzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MubWV0cmljczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1ldHJpY3NbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmZyb21PYmplY3Qob2JqZWN0Lm1ldHJpY3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NoZW1hVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSBTdHJpbmcob2JqZWN0LnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFNjb3BlTWV0cmljcyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc30gbWVzc2FnZSBTY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnRvT2JqZWN0KG1lc3NhZ2Uuc2NvcGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWV0cmljcyAmJiBtZXNzYWdlLm1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UubWV0cmljcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1ldHJpY3Nbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLnRvT2JqZWN0KG1lc3NhZ2UubWV0cmljc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBtZXNzYWdlLnNjaGVtYVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFNjb3BlTWV0cmljcyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NvcGVNZXRyaWNzO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuTWV0cmljID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBNZXRyaWMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtuYW1lXSBNZXRyaWMgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbZGVzY3JpcHRpb25dIE1ldHJpYyBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbdW5pdF0gTWV0cmljIHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUdhdWdlfG51bGx9IFtnYXVnZV0gTWV0cmljIGdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW18bnVsbH0gW3N1bV0gTWV0cmljIHN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JSGlzdG9ncmFtfG51bGx9IFtoaXN0b2dyYW1dIE1ldHJpYyBoaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtfG51bGx9IFtleHBvbmVudGlhbEhpc3RvZ3JhbV0gTWV0cmljIGV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5fG51bGx9IFtzdW1tYXJ5XSBNZXRyaWMgc3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFttZXRhZGF0YV0gTWV0cmljIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBNZXRyaWMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTWV0cmljLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXRyaWMocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRhZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIG5hbWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gbmFtZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBNZXRyaWMgZGVzY3JpcHRpb24uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyB1bml0LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLnVuaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIGdhdWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUdhdWdlfG51bGx8dW5kZWZpbmVkfSBnYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUuZ2F1Z2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIHN1bS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW18bnVsbHx1bmRlZmluZWR9IHN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUuc3VtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyBoaXN0b2dyYW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JSGlzdG9ncmFtfG51bGx8dW5kZWZpbmVkfSBoaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLmhpc3RvZ3JhbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBNZXRyaWMgZXhwb25lbnRpYWxIaXN0b2dyYW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW18bnVsbHx1bmRlZmluZWR9IGV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnByb3RvdHlwZS5leHBvbmVudGlhbEhpc3RvZ3JhbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBNZXRyaWMgc3VtbWFyeS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5fG51bGx8dW5kZWZpbmVkfSBzdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnByb3RvdHlwZS5zdW1tYXJ5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyBtZXRhZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnByb3RvdHlwZS5tZXRhZGF0YSA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9uZU9mIGZpZWxkIG5hbWVzIGJvdW5kIHRvIHZpcnR1YWwgZ2V0dGVycyBhbmQgc2V0dGVyc1xuICAgICAgICAgICAgICAgICAgICB2YXIgJG9uZU9mRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wiZ2F1Z2VcInxcInN1bVwifFwiaGlzdG9ncmFtXCJ8XCJleHBvbmVudGlhbEhpc3RvZ3JhbVwifFwic3VtbWFyeVwifHVuZGVmaW5lZH0gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRyaWMucHJvdG90eXBlLCBcImRhdGFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJnYXVnZVwiLCBcInN1bVwiLCBcImhpc3RvZ3JhbVwiLCBcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIsIFwic3VtbWFyeVwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IE1ldHJpYyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljfSBNZXRyaWMgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXRyaWMocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTWV0cmljIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljfSBtZXNzYWdlIE1ldHJpYyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkZXNjcmlwdGlvblwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5zdHJpbmcobWVzc2FnZS5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS51bml0ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ1bml0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnVuaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2F1Z2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImdhdWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS5lbmNvZGUobWVzc2FnZS5nYXVnZSwgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAyID0qLyA0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3VtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0uZW5jb2RlKG1lc3NhZ2Uuc3VtLCB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovIDU4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaGlzdG9ncmFtICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJoaXN0b2dyYW1cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5lbmNvZGUobWVzc2FnZS5oaXN0b2dyYW0sIHdyaXRlci51aW50MzIoLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki8gNzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leHBvbmVudGlhbEhpc3RvZ3JhbSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZXhwb25lbnRpYWxIaXN0b2dyYW1cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmVuY29kZShtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtLCB3cml0ZXIudWludDMyKC8qIGlkIDEwLCB3aXJlVHlwZSAyID0qLyA4MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bW1hcnkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN1bW1hcnlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZW5jb2RlKG1lc3NhZ2Uuc3VtbWFyeSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxMSwgd2lyZVR5cGUgMiA9Ki8gOTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXRhZGF0YSAhPSBudWxsICYmIG1lc3NhZ2UubWV0YWRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5tZXRhZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKG1lc3NhZ2UubWV0YWRhdGFbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMTIsIHdpcmVUeXBlIDIgPSovIDk4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBNZXRyaWMgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklNZXRyaWN9IG1lc3NhZ2UgTWV0cmljIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIE1ldHJpYyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljfSBNZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGVzY3JpcHRpb24gPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudW5pdCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nYXVnZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN1bSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5oaXN0b2dyYW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN1bW1hcnkgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5tZXRhZGF0YSAmJiBtZXNzYWdlLm1ldGFkYXRhLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRhZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRhZGF0YS5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIE1ldHJpYyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljfSBNZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIE1ldHJpYyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5hbWU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGVzY3JpcHRpb25cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLmRlc2NyaXB0aW9uKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGVzY3JpcHRpb246IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudW5pdCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ1bml0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS51bml0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidW5pdDogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5nYXVnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJnYXVnZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGF0YSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UudmVyaWZ5KG1lc3NhZ2UuZ2F1Z2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJnYXVnZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdW1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRhdGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS52ZXJpZnkobWVzc2FnZS5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdW0uXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5oaXN0b2dyYW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiaGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuZGF0YSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kYXRhID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0udmVyaWZ5KG1lc3NhZ2UuaGlzdG9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaGlzdG9ncmFtLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXhwb25lbnRpYWxIaXN0b2dyYW1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRhdGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLnZlcmlmeShtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhwb25lbnRpYWxIaXN0b2dyYW0uXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW1tYXJ5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bW1hcnlcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5kYXRhID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRhdGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkudmVyaWZ5KG1lc3NhZ2Uuc3VtbWFyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN1bW1hcnkuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXRhZGF0YSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtZXRhZGF0YVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLm1ldGFkYXRhKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWV0YWRhdGE6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLm1ldGFkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLm1ldGFkYXRhW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWV0YWRhdGEuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBNZXRyaWMgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWN9IE1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubmFtZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IFN0cmluZyhvYmplY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRlc2NyaXB0aW9uICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kZXNjcmlwdGlvbiA9IFN0cmluZyhvYmplY3QuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC51bml0ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS51bml0ID0gU3RyaW5nKG9iamVjdC51bml0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZ2F1Z2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmdhdWdlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5nYXVnZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2F1Z2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZnJvbU9iamVjdChvYmplY3QuZ2F1Z2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnN1bSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuc3VtOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmZyb21PYmplY3Qob2JqZWN0LnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lmhpc3RvZ3JhbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuaGlzdG9ncmFtICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5oaXN0b2dyYW06IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0uZnJvbU9iamVjdChvYmplY3QuaGlzdG9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmV4cG9uZW50aWFsSGlzdG9ncmFtICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5leHBvbmVudGlhbEhpc3RvZ3JhbTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwb25lbnRpYWxIaXN0b2dyYW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW0uZnJvbU9iamVjdChvYmplY3QuZXhwb25lbnRpYWxIaXN0b2dyYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdW1tYXJ5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zdW1tYXJ5ICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5zdW1tYXJ5OiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW1tYXJ5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZnJvbU9iamVjdChvYmplY3Quc3VtbWFyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5tZXRhZGF0YSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLm1ldGFkYXRhOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1ldGFkYXRhID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubWV0YWRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QubWV0YWRhdGFbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5tZXRhZGF0YTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1ldGFkYXRhW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QubWV0YWRhdGFbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgTWV0cmljIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljfSBtZXNzYWdlIE1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWV0YWRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZXNjcmlwdGlvbiA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnVuaXQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGVzY3JpcHRpb25cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlc2NyaXB0aW9uID0gbWVzc2FnZS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnVuaXQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidW5pdFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudW5pdCA9IG1lc3NhZ2UudW5pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmdhdWdlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImdhdWdlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmdhdWdlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnRvT2JqZWN0KG1lc3NhZ2UuZ2F1Z2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGEgPSBcImdhdWdlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN1bSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0udG9PYmplY3QobWVzc2FnZS5zdW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGEgPSBcInN1bVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaGlzdG9ncmFtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImhpc3RvZ3JhbVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5oaXN0b2dyYW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLnRvT2JqZWN0KG1lc3NhZ2UuaGlzdG9ncmFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhID0gXCJoaXN0b2dyYW1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLnRvT2JqZWN0KG1lc3NhZ2UuZXhwb25lbnRpYWxIaXN0b2dyYW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGEgPSBcImV4cG9uZW50aWFsSGlzdG9ncmFtXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW1tYXJ5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bW1hcnlcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3VtbWFyeSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LnRvT2JqZWN0KG1lc3NhZ2Uuc3VtbWFyeSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YSA9IFwic3VtbWFyeVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWV0YWRhdGEgJiYgbWVzc2FnZS5tZXRhZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWV0YWRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UubWV0YWRhdGEubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tZXRhZGF0YVtqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UubWV0YWRhdGFbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgTWV0cmljIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBNZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRyaWM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5HYXVnZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgR2F1Z2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnQ+fG51bGx9IFtkYXRhUG9pbnRzXSBHYXVnZSBkYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBHYXVnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBHYXVnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JR2F1Z2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdhdWdlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2F1Z2UgZGF0YVBvaW50cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50Pn0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UucHJvdG90eXBlLmRhdGFQb2ludHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBHYXVnZSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklHYXVnZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlfSBHYXVnZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR2F1Z2UocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgR2F1Z2UgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JR2F1Z2V9IG1lc3NhZ2UgR2F1Z2UgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZW5jb2RlKG1lc3NhZ2UuZGF0YVBvaW50c1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgR2F1Z2UgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JR2F1Z2V9IG1lc3NhZ2UgR2F1Z2UgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBHYXVnZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZX0gR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5kYXRhUG9pbnRzICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBHYXVnZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZX0gR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgR2F1Z2UgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRhdGFQb2ludHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnZlcmlmeShtZXNzYWdlLmRhdGFQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgR2F1Z2UgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlfSBHYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5kYXRhUG9pbnRzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50c1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZnJvbU9iamVjdChvYmplY3QuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBHYXVnZSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2V9IG1lc3NhZ2UgR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnRvT2JqZWN0KG1lc3NhZ2UuZGF0YVBvaW50c1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBHYXVnZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEdhdWdlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEdhdWdlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2F1Z2U7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TdW0gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFN1bS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElTdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnQ+fG51bGx9IFtkYXRhUG9pbnRzXSBTdW0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5fG51bGx9IFthZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSBTdW0gYWdncmVnYXRpb25UZW1wb3JhbGl0eVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW58bnVsbH0gW2lzTW9ub3RvbmljXSBTdW0gaXNNb25vdG9uaWNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFN1bS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBTdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTdW1cbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW09fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN1bShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bSBkYXRhUG9pbnRzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnQ+fSBkYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bSBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eXxudWxsfHVuZGVmaW5lZH0gYWdncmVnYXRpb25UZW1wb3JhbGl0eVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5wcm90b3R5cGUuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW0gaXNNb25vdG9uaWMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW58bnVsbHx1bmRlZmluZWR9IGlzTW9ub3RvbmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLnByb3RvdHlwZS5pc01vbm90b25pYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFN1bSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtfSBTdW0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdW0ocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3VtIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0udmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtfSBtZXNzYWdlIFN1bSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZW5jb2RlKG1lc3NhZ2UuZGF0YVBvaW50c1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAwID0qLyAxNikuaW50MzIobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlzTW9ub3RvbmljICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJpc01vbm90b25pY1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDAgPSovIDI0KS5ib29sKG1lc3NhZ2UuaXNNb25vdG9uaWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTdW0gbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW19IG1lc3NhZ2UgU3VtIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN1bSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtfSBTdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pc01vbm90b25pYyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU3VtIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW19IFN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgU3VtIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRhdGFQb2ludHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LnZlcmlmeShtZXNzYWdlLmRhdGFQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5OiBlbnVtIHZhbHVlIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pc01vbm90b25pYyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJpc01vbm90b25pY1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuaXNNb25vdG9uaWMgIT09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJpc01vbm90b25pYzogYm9vbGVhbiBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgU3VtIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtfSBTdW1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmRhdGFQb2ludHNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50c1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZnJvbU9iamVjdChvYmplY3QuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEFcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9DVU1VTEFUSVZFXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuaXNNb25vdG9uaWMgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmlzTW9ub3RvbmljID0gQm9vbGVhbihvYmplY3QuaXNNb25vdG9uaWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTdW0gbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW19IG1lc3NhZ2UgU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaXNNb25vdG9uaWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC50b09iamVjdChtZXNzYWdlLmRhdGFQb2ludHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdW5kZWZpbmVkID8gbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlzTW9ub3RvbmljICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImlzTW9ub3RvbmljXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5pc01vbm90b25pYyA9IG1lc3NhZ2UuaXNNb25vdG9uaWM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBTdW0gdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN1bTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLkhpc3RvZ3JhbSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgSGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbURhdGFQb2ludD58bnVsbH0gW2RhdGFQb2ludHNdIEhpc3RvZ3JhbSBkYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHl8bnVsbH0gW2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldIEhpc3RvZ3JhbSBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBIaXN0b2dyYW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgSGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JSGlzdG9ncmFtPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBIaXN0b2dyYW0ocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW0gZGF0YVBvaW50cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JSGlzdG9ncmFtRGF0YVBvaW50Pn0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW0gYWdncmVnYXRpb25UZW1wb3JhbGl0eS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHl8bnVsbHx1bmRlZmluZWR9IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0ucHJvdG90eXBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBIaXN0b2dyYW0gaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbX0gSGlzdG9ncmFtIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGlzdG9ncmFtKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEhpc3RvZ3JhbSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbX0gbWVzc2FnZSBIaXN0b2dyYW0gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZShtZXNzYWdlLmRhdGFQb2ludHNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki8gMTYpLmludDMyKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEhpc3RvZ3JhbSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbX0gbWVzc2FnZSBIaXN0b2dyYW0gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgSGlzdG9ncmFtIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW19IEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEhpc3RvZ3JhbSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtfSBIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIEhpc3RvZ3JhbSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0udmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnkobWVzc2FnZS5kYXRhUG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgSGlzdG9ncmFtIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtfSBIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmRhdGFQb2ludHNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50c1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZnJvbU9iamVjdChvYmplY3QuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEFcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9DVU1VTEFUSVZFXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgSGlzdG9ncmFtIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtfSBtZXNzYWdlIEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LnRvT2JqZWN0KG1lc3NhZ2UuZGF0YVBvaW50c1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVttZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldID09PSB1bmRlZmluZWQgPyBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgOiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVttZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldIDogbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgSGlzdG9ncmFtIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBIaXN0b2dyYW07XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5FeHBvbmVudGlhbEhpc3RvZ3JhbSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQ+fG51bGx9IFtkYXRhUG9pbnRzXSBFeHBvbmVudGlhbEhpc3RvZ3JhbSBkYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHl8bnVsbH0gW2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHldIEV4cG9uZW50aWFsSGlzdG9ncmFtIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW09fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9uZW50aWFsSGlzdG9ncmFtKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW0gZGF0YVBvaW50cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQ+fSBkYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbSBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eXxudWxsfHVuZGVmaW5lZH0gYWdncmVnYXRpb25UZW1wb3JhbGl0eVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0ucHJvdG90eXBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFeHBvbmVudGlhbEhpc3RvZ3JhbSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeHBvbmVudGlhbEhpc3RvZ3JhbT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtfSBFeHBvbmVudGlhbEhpc3RvZ3JhbSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0uY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW0ocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW19IG1lc3NhZ2UgRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5lbmNvZGUobWVzc2FnZS5kYXRhUG9pbnRzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovIDE2KS5pbnQzMihtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvbmVudGlhbEhpc3RvZ3JhbSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW0udmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeHBvbmVudGlhbEhpc3RvZ3JhbX0gbWVzc2FnZSBFeHBvbmVudGlhbEhpc3RvZ3JhbSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbX0gRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5kYXRhUG9pbnRzICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW19IEV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGF0YVBvaW50c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnkobWVzc2FnZS5kYXRhUG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbX0gRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmRhdGFQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZGF0YVBvaW50c1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW0uZGF0YVBvaW50czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZnJvbU9iamVjdChvYmplY3QuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEFcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9DVU1VTEFUSVZFXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbX0gbWVzc2FnZSBFeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50c1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC50b09iamVjdChtZXNzYWdlLmRhdGFQb2ludHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdW5kZWZpbmVkID8gbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9uZW50aWFsSGlzdG9ncmFtIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvbmVudGlhbEhpc3RvZ3JhbTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlN1bW1hcnkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFN1bW1hcnkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bW1hcnlEYXRhUG9pbnQ+fG51bGx9IFtkYXRhUG9pbnRzXSBTdW1tYXJ5IGRhdGFQb2ludHNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFN1bW1hcnkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgU3VtbWFyeS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSVN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdW1tYXJ5KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3VtbWFyeSBkYXRhUG9pbnRzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5RGF0YVBvaW50Pn0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5LnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgU3VtbWFyeSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bW1hcnk9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5fSBTdW1tYXJ5IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN1bW1hcnkocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3VtbWFyeSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeX0gbWVzc2FnZSBTdW1tYXJ5IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmVuY29kZShtZXNzYWdlLmRhdGFQb2ludHNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFN1bW1hcnkgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bW1hcnl9IG1lc3NhZ2UgU3VtbWFyeSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU3VtbWFyeSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnl9IFN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN1bW1hcnkgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5fSBTdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgU3VtbWFyeSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRhdGFQb2ludHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC52ZXJpZnkobWVzc2FnZS5kYXRhUG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFN1bW1hcnkgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeX0gU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZGF0YVBvaW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmRhdGFQb2ludHNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZGF0YVBvaW50czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5mcm9tT2JqZWN0KG9iamVjdC5kYXRhUG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFN1bW1hcnkgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeX0gbWVzc2FnZSBTdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC50b09iamVjdChtZXNzYWdlLmRhdGFQb2ludHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgU3VtbWFyeSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBTdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3VtbWFyeTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgZW51bS5cbiAgICAgICAgICAgICAgICAgKiBAbmFtZSBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVxuICAgICAgICAgICAgICAgICAqIEBlbnVtIHtudW1iZXJ9XG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEPTAgQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRUQgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEE9MSBBR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQSB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBBR0dSRUdBVElPTl9URU1QT1JBTElUWV9DVU1VTEFUSVZFPTIgQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRSB2YWx1ZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzQnlJZCA9IHt9LCB2YWx1ZXMgPSBPYmplY3QuY3JlYXRlKHZhbHVlc0J5SWQpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFswXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEFcIl0gPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiXSA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBEYXRhUG9pbnRGbGFncyBlbnVtLlxuICAgICAgICAgICAgICAgICAqIEBuYW1lIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5EYXRhUG9pbnRGbGFnc1xuICAgICAgICAgICAgICAgICAqIEBlbnVtIHtudW1iZXJ9XG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IERBVEFfUE9JTlRfRkxBR1NfRE9fTk9UX1VTRT0wIERBVEFfUE9JTlRfRkxBR1NfRE9fTk9UX1VTRSB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEQVRBX1BPSU5UX0ZMQUdTX05PX1JFQ09SREVEX1ZBTFVFX01BU0s9MSBEQVRBX1BPSU5UX0ZMQUdTX05PX1JFQ09SREVEX1ZBTFVFX01BU0sgdmFsdWVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2MS5EYXRhUG9pbnRGbGFncyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXNCeUlkID0ge30sIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUodmFsdWVzQnlJZCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzBdID0gXCJEQVRBX1BPSU5UX0ZMQUdTX0RPX05PVF9VU0VcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxXSA9IFwiREFUQV9QT0lOVF9GTEFHU19OT19SRUNPUkRFRF9WQUxVRV9NQVNLXCJdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLk51bWJlckRhdGFQb2ludCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgTnVtYmVyRGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSU51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBOdW1iZXJEYXRhUG9pbnQgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtzdGFydFRpbWVVbml4TmFub10gTnVtYmVyRGF0YVBvaW50IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3RpbWVVbml4TmFub10gTnVtYmVyRGF0YVBvaW50IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbYXNEb3VibGVdIE51bWJlckRhdGFQb2ludCBhc0RvdWJsZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFthc0ludF0gTnVtYmVyRGF0YVBvaW50IGFzSW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXI+fG51bGx9IFtleGVtcGxhcnNdIE51bWJlckRhdGFQb2ludCBleGVtcGxhcnNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2ZsYWdzXSBOdW1iZXJEYXRhUG9pbnQgZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE51bWJlckRhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBOdW1iZXJEYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElOdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bWJlckRhdGFQb2ludChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTnVtYmVyRGF0YVBvaW50IHN0YXJ0VGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gc3RhcnRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE51bWJlckRhdGFQb2ludCB0aW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgYXNEb3VibGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gYXNEb3VibGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLmFzRG91YmxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE51bWJlckRhdGFQb2ludCBhc0ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IGFzSW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnByb3RvdHlwZS5hc0ludCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgZXhlbXBsYXJzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeGVtcGxhcj59IGV4ZW1wbGFyc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5wcm90b3R5cGUuZXhlbXBsYXJzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE51bWJlckRhdGFQb2ludCBmbGFncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5wcm90b3R5cGUuZmxhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmVPZiBmaWVsZCBuYW1lcyBib3VuZCB0byB2aXJ0dWFsIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICAgICAgICAgICAgICAgICAgdmFyICRvbmVPZkZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE51bWJlckRhdGFQb2ludCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7XCJhc0RvdWJsZVwifFwiYXNJbnRcInx1bmRlZmluZWR9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE51bWJlckRhdGFQb2ludC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJhc0RvdWJsZVwiLCBcImFzSW50XCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgTnVtYmVyRGF0YVBvaW50IGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnR9IE51bWJlckRhdGFQb2ludCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE51bWJlckRhdGFQb2ludChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBOdW1iZXJEYXRhUG9pbnQgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnR9IG1lc3NhZ2UgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAxID0qLyAxNykuZml4ZWQ2NChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMSA9Ki8gMjUpLmZpeGVkNjQobWVzc2FnZS50aW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNEb3VibGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImFzRG91YmxlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMSA9Ki8gMzMpLmRvdWJsZShtZXNzYWdlLmFzRG91YmxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4ZW1wbGFycyAhPSBudWxsICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZW5jb2RlKG1lc3NhZ2UuZXhlbXBsYXJzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovIDQyKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNJbnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImFzSW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNiwgd2lyZVR5cGUgMSA9Ki8gNDkpLnNmaXhlZDY0KG1lc3NhZ2UuYXNJbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgNywgd2lyZVR5cGUgMiA9Ki8gNTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA4LCB3aXJlVHlwZSAwID0qLyA2NCkudWludDMyKG1lc3NhZ2UuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBOdW1iZXJEYXRhUG9pbnQgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklOdW1iZXJEYXRhUG9pbnR9IG1lc3NhZ2UgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIE51bWJlckRhdGFQb2ludCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50fSBOdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hc0RvdWJsZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hc0ludCA9IHJlYWRlci5zZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmV4ZW1wbGFycyAmJiBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBOdW1iZXJEYXRhUG9pbnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludH0gTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBOdW1iZXJEYXRhUG9pbnQgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pICYmICEobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNEb3VibGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXNEb3VibGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuYXNEb3VibGUgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFzRG91YmxlOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzSW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFzSW50XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmFzSW50KSAmJiAhKG1lc3NhZ2UuYXNJbnQgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYXNJbnQubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5hc0ludC5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFzSW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4ZW1wbGFycyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJleGVtcGxhcnNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5leGVtcGxhcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIudmVyaWZ5KG1lc3NhZ2UuZXhlbXBsYXJzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5mbGFncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBOdW1iZXJEYXRhUG9pbnQgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnR9IE51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5zdGFydFRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hc0RvdWJsZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNEb3VibGUgPSBOdW1iZXIob2JqZWN0LmFzRG91YmxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXNJbnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuYXNJbnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuYXNJbnQpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYXNJbnQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNJbnQgPSBwYXJzZUludChvYmplY3QuYXNJbnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmFzSW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzSW50ID0gb2JqZWN0LmFzSW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYXNJbnQgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNJbnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmFzSW50LmxvdyA+Pj4gMCwgb2JqZWN0LmFzSW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmV4ZW1wbGFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmV4ZW1wbGFycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5leGVtcGxhcnNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5leGVtcGxhcnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZnJvbU9iamVjdChvYmplY3QuZXhlbXBsYXJzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmZsYWdzICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IG9iamVjdC5mbGFncyA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50fSBtZXNzYWdlIE51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS50aW1lVW5peE5hbm8pIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0RvdWJsZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhc0RvdWJsZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hc0RvdWJsZSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5hc0RvdWJsZSkgPyBTdHJpbmcobWVzc2FnZS5hc0RvdWJsZSkgOiBtZXNzYWdlLmFzRG91YmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJhc0RvdWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhlbXBsYXJzICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnRvT2JqZWN0KG1lc3NhZ2UuZXhlbXBsYXJzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzSW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFzSW50XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmFzSW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXNJbnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5hc0ludCkgOiBtZXNzYWdlLmFzSW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmFzSW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLmFzSW50KSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLmFzSW50LmxvdyA+Pj4gMCwgbWVzc2FnZS5hc0ludC5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5hc0ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiYXNJbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IG1lc3NhZ2UuZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBOdW1iZXJEYXRhUG9pbnQgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIE51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlckRhdGFQb2ludDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLkhpc3RvZ3JhbURhdGFQb2ludCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgSGlzdG9ncmFtRGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBIaXN0b2dyYW1EYXRhUG9pbnQgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtzdGFydFRpbWVVbml4TmFub10gSGlzdG9ncmFtRGF0YVBvaW50IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3RpbWVVbml4TmFub10gSGlzdG9ncmFtRGF0YVBvaW50IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtjb3VudF0gSGlzdG9ncmFtRGF0YVBvaW50IGNvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtzdW1dIEhpc3RvZ3JhbURhdGFQb2ludCBzdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48bnVtYmVyfExvbmc+fG51bGx9IFtidWNrZXRDb3VudHNdIEhpc3RvZ3JhbURhdGFQb2ludCBidWNrZXRDb3VudHNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48bnVtYmVyPnxudWxsfSBbZXhwbGljaXRCb3VuZHNdIEhpc3RvZ3JhbURhdGFQb2ludCBleHBsaWNpdEJvdW5kc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyPnxudWxsfSBbZXhlbXBsYXJzXSBIaXN0b2dyYW1EYXRhUG9pbnQgZXhlbXBsYXJzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gSGlzdG9ncmFtRGF0YVBvaW50IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFttaW5dIEhpc3RvZ3JhbURhdGFQb2ludCBtaW5cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW21heF0gSGlzdG9ncmFtRGF0YVBvaW50IG1heFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgSGlzdG9ncmFtRGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIEhpc3RvZ3JhbURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbURhdGFQb2ludD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSGlzdG9ncmFtRGF0YVBvaW50KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwbGljaXRCb3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IHN0YXJ0VGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gc3RhcnRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCB0aW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgY291bnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuY291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IHN1bS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBzdW1cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnN1bSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgYnVja2V0Q291bnRzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48bnVtYmVyfExvbmc+fSBidWNrZXRDb3VudHNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmJ1Y2tldENvdW50cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgZXhwbGljaXRCb3VuZHMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxudW1iZXI+fSBleHBsaWNpdEJvdW5kc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuZXhwbGljaXRCb3VuZHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IGV4ZW1wbGFycy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXI+fSBleGVtcGxhcnNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmV4ZW1wbGFycyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBtaW4uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gbWluXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5taW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IG1heC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBtYXhcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLm1heCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9uZU9mIGZpZWxkIG5hbWVzIGJvdW5kIHRvIHZpcnR1YWwgZ2V0dGVycyBhbmQgc2V0dGVyc1xuICAgICAgICAgICAgICAgICAgICB2YXIgJG9uZU9mRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IF9zdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wic3VtXCJ8dW5kZWZpbmVkfSBfc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUsIFwiX3N1bVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKCRvbmVPZkZpZWxkcyA9IFtcInN1bVwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgX21pbi5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7XCJtaW5cInx1bmRlZmluZWR9IF9taW5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZSwgXCJfbWluXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wibWluXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBfbWF4LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcIm1heFwifHVuZGVmaW5lZH0gX21heFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLCBcIl9tYXhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJtYXhcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcigkb25lT2ZGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBIaXN0b2dyYW1EYXRhUG9pbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbURhdGFQb2ludD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludH0gSGlzdG9ncmFtRGF0YVBvaW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGlzdG9ncmFtRGF0YVBvaW50KHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbURhdGFQb2ludH0gbWVzc2FnZSBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDEgPSovIDE3KS5maXhlZDY0KG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAxID0qLyAyNSkuZml4ZWQ2NChtZXNzYWdlLnRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAxID0qLyAzMykuZml4ZWQ2NChtZXNzYWdlLmNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3VtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNSwgd2lyZVR5cGUgMSA9Ki8gNDEpLmRvdWJsZShtZXNzYWdlLnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5idWNrZXRDb3VudHMgIT0gbnVsbCAmJiBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDIgPSovIDUwKS5mb3JrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmZpeGVkNjQobWVzc2FnZS5idWNrZXRDb3VudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4cGxpY2l0Qm91bmRzICE9IG51bGwgJiYgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovIDU4KS5mb3JrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuZG91YmxlKG1lc3NhZ2UuZXhwbGljaXRCb3VuZHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4ZW1wbGFycyAhPSBudWxsICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZW5jb2RlKG1lc3NhZ2UuZXhlbXBsYXJzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDgsIHdpcmVUeXBlIDIgPSovIDY2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki8gNzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki8gODApLnVpbnQzMihtZXNzYWdlLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1pbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibWluXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTEsIHdpcmVUeXBlIDEgPSovIDg5KS5kb3VibGUobWVzc2FnZS5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWF4ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJtYXhcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMiwgd2lyZVR5cGUgMSA9Ki8gOTcpLmRvdWJsZShtZXNzYWdlLm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbURhdGFQb2ludH0gbWVzc2FnZSBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnR9IEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvdW50ID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW0gPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYnVja2V0Q291bnRzICYmIG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50cy5wdXNoKHJlYWRlci5maXhlZDY0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzLnB1c2gocmVhZGVyLmZpeGVkNjQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMgJiYgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzLnB1c2gocmVhZGVyLmRvdWJsZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzLnB1c2gocmVhZGVyLmRvdWJsZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5leGVtcGxhcnMgJiYgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5taW4gPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1heCA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludH0gSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pICYmICEobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5jb3VudCkgJiYgIShtZXNzYWdlLmNvdW50ICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmNvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuY291bnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb3VudDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5fc3VtID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uuc3VtICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdW06IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnVja2V0Q291bnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJ1Y2tldENvdW50c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmJ1Y2tldENvdW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSkgJiYgIShtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5idWNrZXRDb3VudHNbaV0ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5idWNrZXRDb3VudHNbaV0uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnVja2V0Q291bnRzOiBpbnRlZ2VyfExvbmdbXSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXhwbGljaXRCb3VuZHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5leHBsaWNpdEJvdW5kcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4cGxpY2l0Qm91bmRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzW2ldICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhwbGljaXRCb3VuZHM6IG51bWJlcltdIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leGVtcGxhcnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXhlbXBsYXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnZlcmlmeShtZXNzYWdlLmV4ZW1wbGFyc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFycy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJmbGFnczogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWluICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1pblwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuX21pbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLm1pbiAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWluOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1heCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtYXhcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLl9tYXggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5tYXggIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1heDogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnR9IEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5zdGFydFRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5jb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5jb3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5jb3VudCkpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5jb3VudCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IHBhcnNlSW50KG9iamVjdC5jb3VudCwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBvYmplY3QuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5jb3VudCA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QuY291bnQubG93ID4+PiAwLCBvYmplY3QuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3VtICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW0gPSBOdW1iZXIob2JqZWN0LnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmJ1Y2tldENvdW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYnVja2V0Q291bnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuYnVja2V0Q291bnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmJ1Y2tldENvdW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5idWNrZXRDb3VudHNbaV0gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuYnVja2V0Q291bnRzW2ldKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5idWNrZXRDb3VudHNbaV0gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSA9IHBhcnNlSW50KG9iamVjdC5idWNrZXRDb3VudHNbaV0sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5idWNrZXRDb3VudHNbaV0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSA9IG9iamVjdC5idWNrZXRDb3VudHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYnVja2V0Q291bnRzW2ldID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHNbaV0gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmJ1Y2tldENvdW50c1tpXS5sb3cgPj4+IDAsIG9iamVjdC5idWNrZXRDb3VudHNbaV0uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXhwbGljaXRCb3VuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmV4cGxpY2l0Qm91bmRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZXhwbGljaXRCb3VuZHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leHBsaWNpdEJvdW5kc1tpXSA9IE51bWJlcihvYmplY3QuZXhwbGljaXRCb3VuZHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5leGVtcGxhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5leGVtcGxhcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZXhlbXBsYXJzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQuZXhlbXBsYXJzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhlbXBsYXJzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3Qob2JqZWN0LmV4ZW1wbGFyc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5mbGFncyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSBvYmplY3QuZmxhZ3MgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm1pbiAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWluID0gTnVtYmVyKG9iamVjdC5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5tYXggIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1heCA9IE51bWJlcihvYmplY3QubWF4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50fSBtZXNzYWdlIEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhwbGljaXRCb3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnRpbWVVbml4TmFubykgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5jb3VudCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuY291bnQpIDogbWVzc2FnZS5jb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5jb3VudCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5jb3VudC5sb3cgPj4+IDAsIG1lc3NhZ2UuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN1bSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5zdW0pID8gU3RyaW5nKG1lc3NhZ2Uuc3VtKSA6IG1lc3NhZ2Uuc3VtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9zdW0gPSBcInN1bVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnVja2V0Q291bnRzICYmIG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJ1Y2tldENvdW50c1tqXSA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLmJ1Y2tldENvdW50c1tqXSkgOiBtZXNzYWdlLmJ1Y2tldENvdW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJ1Y2tldENvdW50c1tqXSA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5idWNrZXRDb3VudHNbal0pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdLmxvdyA+Pj4gMCwgbWVzc2FnZS5idWNrZXRDb3VudHNbal0uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMgJiYgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhwbGljaXRCb3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leHBsaWNpdEJvdW5kc1tqXSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5leHBsaWNpdEJvdW5kc1tqXSkgPyBTdHJpbmcobWVzc2FnZS5leHBsaWNpdEJvdW5kc1tqXSkgOiBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhlbXBsYXJzICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnRvT2JqZWN0KG1lc3NhZ2UuZXhlbXBsYXJzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IG1lc3NhZ2UuZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5taW4gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWluXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1pbiA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5taW4pID8gU3RyaW5nKG1lc3NhZ2UubWluKSA6IG1lc3NhZ2UubWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9taW4gPSBcIm1pblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWF4ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1heFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tYXggPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UubWF4KSA/IFN0cmluZyhtZXNzYWdlLm1heCkgOiBtZXNzYWdlLm1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fbWF4ID0gXCJtYXhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEhpc3RvZ3JhbURhdGFQb2ludCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSGlzdG9ncmFtRGF0YVBvaW50O1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3N0YXJ0VGltZVVuaXhOYW5vXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBzdGFydFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFt0aW1lVW5peE5hbm9dIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtjb3VudF0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgY291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW3N1bV0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtzY2FsZV0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgc2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbemVyb0NvdW50XSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCB6ZXJvQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHN8bnVsbH0gW3Bvc2l0aXZlXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBwb3NpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5JQnVja2V0c3xudWxsfSBbbmVnYXRpdmVdIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeGVtcGxhcj58bnVsbH0gW2V4ZW1wbGFyc10gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgZXhlbXBsYXJzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFttaW5dIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1pblxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbbWF4XSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtYXhcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW3plcm9UaHJlc2hvbGRdIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHplcm9UaHJlc2hvbGRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBzdGFydFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuc3RhcnRUaW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgdGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGNvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5jb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBzdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuc3VtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHNjYWxlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHNjYWxlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuc2NhbGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgemVyb0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gemVyb0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuemVyb0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHBvc2l0aXZlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHN8bnVsbHx1bmRlZmluZWR9IHBvc2l0aXZlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUucG9zaXRpdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgbmVnYXRpdmUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5JQnVja2V0c3xudWxsfHVuZGVmaW5lZH0gbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5uZWdhdGl2ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBmbGFncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGV4ZW1wbGFycy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXI+fSBleGVtcGxhcnNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5leGVtcGxhcnMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgbWluLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IG1pblxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLm1pbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtYXguXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gbWF4XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUubWF4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHplcm9UaHJlc2hvbGQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gemVyb1RocmVzaG9sZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnplcm9UaHJlc2hvbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmVPZiBmaWVsZCBuYW1lcyBib3VuZCB0byB2aXJ0dWFsIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICAgICAgICAgICAgICAgICAgdmFyICRvbmVPZkZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IF9zdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wic3VtXCJ8dW5kZWZpbmVkfSBfc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLCBcIl9zdW1cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJzdW1cIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcigkb25lT2ZGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgX21pbi5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7XCJtaW5cInx1bmRlZmluZWR9IF9taW5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUsIFwiX21pblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKCRvbmVPZkZpZWxkcyA9IFtcIm1pblwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBfbWF4LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcIm1heFwifHVuZGVmaW5lZH0gX21heFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZSwgXCJfbWF4XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wibWF4XCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludH0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50KHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50fSBtZXNzYWdlIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMSA9Ki8gMTcpLmZpeGVkNjQobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDEgPSovIDI1KS5maXhlZDY0KG1lc3NhZ2UudGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJjb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovIDMzKS5maXhlZDY0KG1lc3NhZ2UuY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdW1cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAxID0qLyA0MSkuZG91YmxlKG1lc3NhZ2Uuc3VtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjYWxlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY2FsZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDAgPSovIDQ4KS5zaW50MzIobWVzc2FnZS5zY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS56ZXJvQ291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInplcm9Db3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDEgPSovIDU3KS5maXhlZDY0KG1lc3NhZ2UuemVyb0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBvc2l0aXZlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJwb3NpdGl2ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5lbmNvZGUobWVzc2FnZS5wb3NpdGl2ZSwgd3JpdGVyLnVpbnQzMigvKiBpZCA4LCB3aXJlVHlwZSAyID0qLyA2NikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5lZ2F0aXZlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJuZWdhdGl2ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5lbmNvZGUobWVzc2FnZS5uZWdhdGl2ZSwgd3JpdGVyLnVpbnQzMigvKiBpZCA5LCB3aXJlVHlwZSAyID0qLyA3NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEwLCB3aXJlVHlwZSAwID0qLyA4MCkudWludDMyKG1lc3NhZ2UuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhlbXBsYXJzICE9IG51bGwgJiYgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5lbmNvZGUobWVzc2FnZS5leGVtcGxhcnNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovIDkwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWluICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJtaW5cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMiwgd2lyZVR5cGUgMSA9Ki8gOTcpLmRvdWJsZShtZXNzYWdlLm1pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tYXggIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcIm1heFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEzLCB3aXJlVHlwZSAxID0qLyAxMDUpLmRvdWJsZShtZXNzYWdlLm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS56ZXJvVGhyZXNob2xkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ6ZXJvVGhyZXNob2xkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTQsIHdpcmVUeXBlIDEgPSovIDExMykuZG91YmxlKG1lc3NhZ2UuemVyb1RocmVzaG9sZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50fSBtZXNzYWdlIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50fSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjYWxlID0gcmVhZGVyLnNpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnplcm9Db3VudCA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucG9zaXRpdmUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5lZ2F0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmV4ZW1wbGFycyAmJiBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWluID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tYXggPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnplcm9UaHJlc2hvbGQgPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50fSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0YXJ0VGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8pICYmICEobWVzc2FnZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuY291bnQpICYmICEobWVzc2FnZS5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuX3N1bSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnN1bSAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3VtOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjYWxlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjYWxlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc2NhbGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY2FsZTogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuemVyb0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInplcm9Db3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnplcm9Db3VudCkgJiYgIShtZXNzYWdlLnplcm9Db3VudCAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS56ZXJvQ291bnQubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS56ZXJvQ291bnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ6ZXJvQ291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucG9zaXRpdmUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicG9zaXRpdmVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy52ZXJpZnkobWVzc2FnZS5wb3NpdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJwb3NpdGl2ZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmVnYXRpdmUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmVnYXRpdmVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy52ZXJpZnkobWVzc2FnZS5uZWdhdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJuZWdhdGl2ZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5mbGFncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leGVtcGxhcnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXhlbXBsYXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnZlcmlmeShtZXNzYWdlLmV4ZW1wbGFyc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFycy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1pbiAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtaW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLl9taW4gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5taW4gIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1pbjogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tYXggIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWF4XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5fbWF4ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UubWF4ICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtYXg6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuemVyb1RocmVzaG9sZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ6ZXJvVGhyZXNob2xkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS56ZXJvVGhyZXNob2xkICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ6ZXJvVGhyZXNob2xkOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnR9IEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmF0dHJpYnV0ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5zdGFydFRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5jb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5jb3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5jb3VudCkpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5jb3VudCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IHBhcnNlSW50KG9iamVjdC5jb3VudCwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBvYmplY3QuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5jb3VudCA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QuY291bnQubG93ID4+PiAwLCBvYmplY3QuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3VtICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW0gPSBOdW1iZXIob2JqZWN0LnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjYWxlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2FsZSA9IG9iamVjdC5zY2FsZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lnplcm9Db3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS56ZXJvQ291bnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuemVyb0NvdW50KSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0Lnplcm9Db3VudCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS56ZXJvQ291bnQgPSBwYXJzZUludChvYmplY3QuemVyb0NvdW50LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC56ZXJvQ291bnQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuemVyb0NvdW50ID0gb2JqZWN0Lnplcm9Db3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0Lnplcm9Db3VudCA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS56ZXJvQ291bnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0Lnplcm9Db3VudC5sb3cgPj4+IDAsIG9iamVjdC56ZXJvQ291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucG9zaXRpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnBvc2l0aXZlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnBvc2l0aXZlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wb3NpdGl2ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmZyb21PYmplY3Qob2JqZWN0LnBvc2l0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubmVnYXRpdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0Lm5lZ2F0aXZlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50Lm5lZ2F0aXZlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uZWdhdGl2ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmZyb21PYmplY3Qob2JqZWN0Lm5lZ2F0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZmxhZ3MgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gb2JqZWN0LmZsYWdzID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5leGVtcGxhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmV4ZW1wbGFycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5leGVtcGxhcnNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFyc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5mcm9tT2JqZWN0KG9iamVjdC5leGVtcGxhcnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubWluICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5taW4gPSBOdW1iZXIob2JqZWN0Lm1pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm1heCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWF4ID0gTnVtYmVyKG9iamVjdC5tYXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC56ZXJvVGhyZXNob2xkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS56ZXJvVGhyZXNob2xkID0gTnVtYmVyKG9iamVjdC56ZXJvVGhyZXNob2xkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludH0gbWVzc2FnZSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjYWxlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lnplcm9Db3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lnplcm9Db3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucG9zaXRpdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uZWdhdGl2ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuemVyb1RocmVzaG9sZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS50aW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5jb3VudCkgOiBtZXNzYWdlLmNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLmNvdW50KSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLmNvdW50LmxvdyA+Pj4gMCwgbWVzc2FnZS5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5jb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdW1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3VtID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLnN1bSkgPyBTdHJpbmcobWVzc2FnZS5zdW0pIDogbWVzc2FnZS5zdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX3N1bSA9IFwic3VtXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2FsZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2FsZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NhbGUgPSBtZXNzYWdlLnNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuemVyb0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInplcm9Db3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuemVyb0NvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuemVyb0NvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuemVyb0NvdW50KSA6IG1lc3NhZ2UuemVyb0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lnplcm9Db3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS56ZXJvQ291bnQpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuemVyb0NvdW50LmxvdyA+Pj4gMCwgbWVzc2FnZS56ZXJvQ291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuemVyb0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucG9zaXRpdmUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicG9zaXRpdmVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBvc2l0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudG9PYmplY3QobWVzc2FnZS5wb3NpdGl2ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uZWdhdGl2ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJuZWdhdGl2ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmVnYXRpdmUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy50b09iamVjdChtZXNzYWdlLm5lZ2F0aXZlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IG1lc3NhZ2UuZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leGVtcGxhcnMgJiYgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leGVtcGxhcnNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIudG9PYmplY3QobWVzc2FnZS5leGVtcGxhcnNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWluICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1pblwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5taW4gPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UubWluKSA/IFN0cmluZyhtZXNzYWdlLm1pbikgOiBtZXNzYWdlLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fbWluID0gXCJtaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1heCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtYXhcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWF4ID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLm1heCkgPyBTdHJpbmcobWVzc2FnZS5tYXgpIDogbWVzc2FnZS5tYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX21heCA9IFwibWF4XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS56ZXJvVGhyZXNob2xkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInplcm9UaHJlc2hvbGRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lnplcm9UaHJlc2hvbGQgPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UuemVyb1RocmVzaG9sZCkgPyBTdHJpbmcobWVzc2FnZS56ZXJvVGhyZXNob2xkKSA6IG1lc3NhZ2UuemVyb1RocmVzaG9sZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgQnVja2V0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtvZmZzZXRdIEJ1Y2tldHMgb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxudW1iZXJ8TG9uZz58bnVsbH0gW2J1Y2tldENvdW50c10gQnVja2V0cyBidWNrZXRDb3VudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEJ1Y2tldHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBCdWNrZXRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHM9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQnVja2V0cyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBCdWNrZXRzIG9mZnNldC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLnByb3RvdHlwZS5vZmZzZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBCdWNrZXRzIGJ1Y2tldENvdW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxudW1iZXJ8TG9uZz59IGJ1Y2tldENvdW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVja2V0cy5wcm90b3R5cGUuYnVja2V0Q291bnRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBCdWNrZXRzIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHM9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c30gQnVja2V0cyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWNrZXRzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEJ1Y2tldHMgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LklCdWNrZXRzfSBtZXNzYWdlIEJ1Y2tldHMgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVja2V0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub2Zmc2V0ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJvZmZzZXRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMCA9Ki8gOCkuc2ludDMyKG1lc3NhZ2Uub2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5idWNrZXRDb3VudHMgIT0gbnVsbCAmJiBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQ2NChtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBCdWNrZXRzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5JQnVja2V0c30gbWVzc2FnZSBCdWNrZXRzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEJ1Y2tldHMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzfSBCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2Zmc2V0ID0gcmVhZGVyLnNpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5idWNrZXRDb3VudHMgJiYgbWVzc2FnZS5idWNrZXRDb3VudHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHMucHVzaChyZWFkZXIudWludDY0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzLnB1c2gocmVhZGVyLnVpbnQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEJ1Y2tldHMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHN9IEJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVja2V0cy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgQnVja2V0cyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub2Zmc2V0ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm9mZnNldFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5vZmZzZXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2Zmc2V0OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnVja2V0Q291bnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJ1Y2tldENvdW50c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnVja2V0Q291bnRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5idWNrZXRDb3VudHNbaV0pICYmICEobWVzc2FnZS5idWNrZXRDb3VudHNbaV0gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJidWNrZXRDb3VudHM6IGludGVnZXJ8TG9uZ1tdIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIEJ1Y2tldHMgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzfSBCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5vZmZzZXQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vZmZzZXQgPSBvYmplY3Qub2Zmc2V0IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmJ1Y2tldENvdW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmJ1Y2tldENvdW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuYnVja2V0Q291bnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYnVja2V0Q291bnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LmJ1Y2tldENvdW50c1tpXSkpLnVuc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYnVja2V0Q291bnRzW2ldID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldID0gcGFyc2VJbnQob2JqZWN0LmJ1Y2tldENvdW50c1tpXSwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5idWNrZXRDb3VudHNbaV0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHNbaV0gPSBvYmplY3QuYnVja2V0Q291bnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5idWNrZXRDb3VudHNbaV0gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHNbaV0gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmJ1Y2tldENvdW50c1tpXS5sb3cgPj4+IDAsIG9iamVjdC5idWNrZXRDb3VudHNbaV0uaGlnaCA+Pj4gMCkudG9OdW1iZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgQnVja2V0cyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c30gbWVzc2FnZSBCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm9mZnNldCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJvZmZzZXRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5vZmZzZXQgPSBtZXNzYWdlLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5idWNrZXRDb3VudHMgJiYgbWVzc2FnZS5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5idWNrZXRDb3VudHNbal0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJ1Y2tldENvdW50c1tqXSA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLmJ1Y2tldENvdW50c1tqXSkgOiBtZXNzYWdlLmJ1Y2tldENvdW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYnVja2V0Q291bnRzW2pdID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLmJ1Y2tldENvdW50c1tqXSkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5idWNrZXRDb3VudHNbal0ubG93ID4+PiAwLCBtZXNzYWdlLmJ1Y2tldENvdW50c1tqXS5oaWdoID4+PiAwKS50b051bWJlcih0cnVlKSA6IG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBCdWNrZXRzIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1Y2tldHM7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlN1bW1hcnlEYXRhUG9pbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFN1bW1hcnlEYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBTdW1tYXJ5RGF0YVBvaW50IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbc3RhcnRUaW1lVW5peE5hbm9dIFN1bW1hcnlEYXRhUG9pbnQgc3RhcnRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbdGltZVVuaXhOYW5vXSBTdW1tYXJ5RGF0YVBvaW50IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtjb3VudF0gU3VtbWFyeURhdGFQb2ludCBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbc3VtXSBTdW1tYXJ5RGF0YVBvaW50IHN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5JVmFsdWVBdFF1YW50aWxlPnxudWxsfSBbcXVhbnRpbGVWYWx1ZXNdIFN1bW1hcnlEYXRhUG9pbnQgcXVhbnRpbGVWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2ZsYWdzXSBTdW1tYXJ5RGF0YVBvaW50IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBTdW1tYXJ5RGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFN1bW1hcnlEYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeURhdGFQb2ludD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3VtbWFyeURhdGFQb2ludChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVhbnRpbGVWYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bW1hcnlEYXRhUG9pbnQgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW1tYXJ5RGF0YVBvaW50IHN0YXJ0VGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gc3RhcnRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUuc3RhcnRUaW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3VtbWFyeURhdGFQb2ludCB0aW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bW1hcnlEYXRhUG9pbnQgY291bnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LnByb3RvdHlwZS5jb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW1tYXJ5RGF0YVBvaW50IHN1bS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBzdW1cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUuc3VtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bW1hcnlEYXRhUG9pbnQgcXVhbnRpbGVWYWx1ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5JVmFsdWVBdFF1YW50aWxlPn0gcXVhbnRpbGVWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUucXVhbnRpbGVWYWx1ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3VtbWFyeURhdGFQb2ludCBmbGFncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LnByb3RvdHlwZS5mbGFncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFN1bW1hcnlEYXRhUG9pbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5RGF0YVBvaW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludH0gU3VtbWFyeURhdGFQb2ludCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdW1tYXJ5RGF0YVBvaW50KHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFN1bW1hcnlEYXRhUG9pbnQgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bW1hcnlEYXRhUG9pbnR9IG1lc3NhZ2UgU3VtbWFyeURhdGFQb2ludCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDEgPSovIDE3KS5maXhlZDY0KG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAxID0qLyAyNSkuZml4ZWQ2NChtZXNzYWdlLnRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAxID0qLyAzMykuZml4ZWQ2NChtZXNzYWdlLmNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3VtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNSwgd2lyZVR5cGUgMSA9Ki8gNDEpLmRvdWJsZShtZXNzYWdlLnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5xdWFudGlsZVZhbHVlcyAhPSBudWxsICYmIG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5xdWFudGlsZVZhbHVlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlLmVuY29kZShtZXNzYWdlLnF1YW50aWxlVmFsdWVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDIgPSovIDUwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgNywgd2lyZVR5cGUgMiA9Ki8gNTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA4LCB3aXJlVHlwZSAwID0qLyA2NCkudWludDMyKG1lc3NhZ2UuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5RGF0YVBvaW50fSBtZXNzYWdlIFN1bW1hcnlEYXRhUG9pbnQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN1bW1hcnlEYXRhUG9pbnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50fSBTdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnF1YW50aWxlVmFsdWVzICYmIG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnF1YW50aWxlVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnF1YW50aWxlVmFsdWVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN1bW1hcnlEYXRhUG9pbnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50fSBTdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgU3VtbWFyeURhdGFQb2ludCBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pICYmICEobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5jb3VudCkgJiYgIShtZXNzYWdlLmNvdW50ICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmNvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuY291bnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb3VudDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5zdW0gIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN1bTogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5xdWFudGlsZVZhbHVlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVZhbHVlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnF1YW50aWxlVmFsdWVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicXVhbnRpbGVWYWx1ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnF1YW50aWxlVmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS52ZXJpZnkobWVzc2FnZS5xdWFudGlsZVZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInF1YW50aWxlVmFsdWVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5mbGFncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnR9IFN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5zdGFydFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5zdGFydFRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5jb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5jb3VudCA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5jb3VudCkpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5jb3VudCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IHBhcnNlSW50KG9iamVjdC5jb3VudCwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBvYmplY3QuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5jb3VudCA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QuY291bnQubG93ID4+PiAwLCBvYmplY3QuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3VtICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW0gPSBOdW1iZXIob2JqZWN0LnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnF1YW50aWxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5xdWFudGlsZVZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5xdWFudGlsZVZhbHVlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5xdWFudGlsZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LnF1YW50aWxlVmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnF1YW50aWxlVmFsdWVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LnF1YW50aWxlVmFsdWVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUuZnJvbU9iamVjdChvYmplY3QucXVhbnRpbGVWYWx1ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZmxhZ3MgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gb2JqZWN0LmZsYWdzID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnR9IG1lc3NhZ2UgU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucXVhbnRpbGVWYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdW0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS50aW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5jb3VudCkgOiBtZXNzYWdlLmNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLmNvdW50KSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLmNvdW50LmxvdyA+Pj4gMCwgbWVzc2FnZS5jb3VudC5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5jb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdW1cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN1bSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5zdW0pID8gU3RyaW5nKG1lc3NhZ2Uuc3VtKSA6IG1lc3NhZ2Uuc3VtO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMgJiYgbWVzc2FnZS5xdWFudGlsZVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucXVhbnRpbGVWYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5xdWFudGlsZVZhbHVlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS50b09iamVjdChtZXNzYWdlLnF1YW50aWxlVmFsdWVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IG1lc3NhZ2UuZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBTdW1tYXJ5RGF0YVBvaW50IHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFZhbHVlQXRRdWFudGlsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbcXVhbnRpbGVdIFZhbHVlQXRRdWFudGlsZSBxdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW3ZhbHVlXSBWYWx1ZUF0UXVhbnRpbGUgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFZhbHVlQXRRdWFudGlsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgVmFsdWVBdFF1YW50aWxlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSVZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LklWYWx1ZUF0UXVhbnRpbGU9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVmFsdWVBdFF1YW50aWxlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWYWx1ZUF0UXVhbnRpbGUgcXVhbnRpbGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLnByb3RvdHlwZS5xdWFudGlsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZhbHVlQXRRdWFudGlsZSB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUF0UXVhbnRpbGUucHJvdG90eXBlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBWYWx1ZUF0UXVhbnRpbGUgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5JVmFsdWVBdFF1YW50aWxlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlfSBWYWx1ZUF0UXVhbnRpbGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZUF0UXVhbnRpbGUocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuSVZhbHVlQXRRdWFudGlsZX0gbWVzc2FnZSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5xdWFudGlsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicXVhbnRpbGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki8gOSkuZG91YmxlKG1lc3NhZ2UucXVhbnRpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAxID0qLyAxNykuZG91YmxlKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuSVZhbHVlQXRRdWFudGlsZX0gbWVzc2FnZSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGV9IFZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUF0UXVhbnRpbGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnF1YW50aWxlID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFZhbHVlQXRRdWFudGlsZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlfSBWYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnF1YW50aWxlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInF1YW50aWxlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UucXVhbnRpbGUgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJxdWFudGlsZTogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS52YWx1ZSAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGV9IFZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUF0UXVhbnRpbGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnF1YW50aWxlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucXVhbnRpbGUgPSBOdW1iZXIob2JqZWN0LnF1YW50aWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSBOdW1iZXIob2JqZWN0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFZhbHVlQXRRdWFudGlsZSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlfSBtZXNzYWdlIFZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUF0UXVhbnRpbGUudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5xdWFudGlsZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnF1YW50aWxlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInF1YW50aWxlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucXVhbnRpbGUgPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UucXVhbnRpbGUpID8gU3RyaW5nKG1lc3NhZ2UucXVhbnRpbGUpIDogbWVzc2FnZS5xdWFudGlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLnZhbHVlKSA/IFN0cmluZyhtZXNzYWdlLnZhbHVlKSA6IG1lc3NhZ2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgVmFsdWVBdFF1YW50aWxlIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBWYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlQXRRdWFudGlsZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN1bW1hcnlEYXRhUG9pbnQ7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5FeGVtcGxhciA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4ZW1wbGFyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT58bnVsbH0gW2ZpbHRlcmVkQXR0cmlidXRlc10gRXhlbXBsYXIgZmlsdGVyZWRBdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3RpbWVVbml4TmFub10gRXhlbXBsYXIgdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFthc0RvdWJsZV0gRXhlbXBsYXIgYXNEb3VibGVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbYXNJbnRdIEV4ZW1wbGFyIGFzSW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbc3BhbklkXSBFeGVtcGxhciBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtVaW50OEFycmF5fG51bGx9IFt0cmFjZUlkXSBFeGVtcGxhciB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeGVtcGxhci5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhlbXBsYXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeGVtcGxhcihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhlbXBsYXIgZmlsdGVyZWRBdHRyaWJ1dGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPn0gZmlsdGVyZWRBdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5wcm90b3R5cGUuZmlsdGVyZWRBdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4ZW1wbGFyIHRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeGVtcGxhciBhc0RvdWJsZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBhc0RvdWJsZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIucHJvdG90eXBlLmFzRG91YmxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4ZW1wbGFyIGFzSW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gYXNJbnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnByb3RvdHlwZS5hc0ludCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeGVtcGxhciBzcGFuSWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1VpbnQ4QXJyYXl8bnVsbHx1bmRlZmluZWR9IHNwYW5JZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIucHJvdG90eXBlLnNwYW5JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeGVtcGxhciB0cmFjZUlkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5wcm90b3R5cGUudHJhY2VJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9uZU9mIGZpZWxkIG5hbWVzIGJvdW5kIHRvIHZpcnR1YWwgZ2V0dGVycyBhbmQgc2V0dGVyc1xuICAgICAgICAgICAgICAgICAgICB2YXIgJG9uZU9mRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhlbXBsYXIgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wiYXNEb3VibGVcInxcImFzSW50XCJ8dW5kZWZpbmVkfSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4ZW1wbGFyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKCRvbmVPZkZpZWxkcyA9IFtcImFzRG91YmxlXCIsIFwiYXNJbnRcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcigkb25lT2ZGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFeGVtcGxhciBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeGVtcGxhcj19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyfSBFeGVtcGxhciBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhlbXBsYXIocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhlbXBsYXIgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXJ9IG1lc3NhZ2UgRXhlbXBsYXIgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAxID0qLyAxNykuZml4ZWQ2NChtZXNzYWdlLnRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0RvdWJsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiYXNEb3VibGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAxID0qLyAyNSkuZG91YmxlKG1lc3NhZ2UuYXNEb3VibGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAyID0qLyAzNCkuYnl0ZXMobWVzc2FnZS5zcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovIDQyKS5ieXRlcyhtZXNzYWdlLnRyYWNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNJbnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImFzSW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNiwgd2lyZVR5cGUgMSA9Ki8gNDkpLnNmaXhlZDY0KG1lc3NhZ2UuYXNJbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCA3LCB3aXJlVHlwZSAyID0qLyA1OCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhlbXBsYXIgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXJ9IG1lc3NhZ2UgRXhlbXBsYXIgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhlbXBsYXIgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJ9IEV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzICYmIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hc0RvdWJsZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hc0ludCA9IHJlYWRlci5zZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNwYW5JZCA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYWNlSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhlbXBsYXIgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJ9IEV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeGVtcGxhciBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmlsdGVyZWRBdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZmlsdGVyZWRBdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZmlsdGVyZWRBdHRyaWJ1dGVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNEb3VibGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXNEb3VibGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuYXNEb3VibGUgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFzRG91YmxlOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzSW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFzSW50XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmFzSW50KSAmJiAhKG1lc3NhZ2UuYXNJbnQgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYXNJbnQubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5hc0ludC5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFzSW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zcGFuSWQgJiYgdHlwZW9mIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNwYW5JZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UudHJhY2VJZCAmJiB0eXBlb2YgbWVzc2FnZS50cmFjZUlkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnRyYWNlSWQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhlbXBsYXIgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyfSBFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZmlsdGVyZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5maWx0ZXJlZEF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZpbHRlcmVkQXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZmlsdGVyZWRBdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5maWx0ZXJlZEF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC5maWx0ZXJlZEF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hc0RvdWJsZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNEb3VibGUgPSBOdW1iZXIob2JqZWN0LmFzRG91YmxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXNJbnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuYXNJbnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuYXNJbnQpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYXNJbnQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNJbnQgPSBwYXJzZUludChvYmplY3QuYXNJbnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmFzSW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzSW50ID0gb2JqZWN0LmFzSW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYXNJbnQgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNJbnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmFzSW50LmxvdyA+Pj4gMCwgb2JqZWN0LmFzSW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNwYW5JZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNwYW5JZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3Quc3BhbklkLCBtZXNzYWdlLnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC5zcGFuSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnNwYW5JZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSBvYmplY3Quc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50cmFjZUlkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudHJhY2VJZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3QudHJhY2VJZCwgbWVzc2FnZS50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgob2JqZWN0LnRyYWNlSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnRyYWNlSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VJZCA9IG9iamVjdC50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRXhlbXBsYXIgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyfSBtZXNzYWdlIEV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZpbHRlcmVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKG9iamVjdC5zcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKG9iamVjdC50cmFjZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS50aW1lVW5peE5hbm8pIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0RvdWJsZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhc0RvdWJsZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hc0RvdWJsZSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5hc0RvdWJsZSkgPyBTdHJpbmcobWVzc2FnZS5hc0RvdWJsZSkgOiBtZXNzYWdlLmFzRG91YmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJhc0RvdWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnNwYW5JZCwgMCwgbWVzc2FnZS5zcGFuSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS5zcGFuSWQpIDogbWVzc2FnZS5zcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcgPyAkdXRpbC5iYXNlNjQuZW5jb2RlKG1lc3NhZ2UudHJhY2VJZCwgMCwgbWVzc2FnZS50cmFjZUlkLmxlbmd0aCkgOiBvcHRpb25zLmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1lc3NhZ2UudHJhY2VJZCkgOiBtZXNzYWdlLnRyYWNlSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0ludCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5hc0ludCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmFzSW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuYXNJbnQpIDogbWVzc2FnZS5hc0ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hc0ludCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5hc0ludCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5hc0ludC5sb3cgPj4+IDAsIG1lc3NhZ2UuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuYXNJbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBcImFzSW50XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZpbHRlcmVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5maWx0ZXJlZEF0dHJpYnV0ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeGVtcGxhciB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhlbXBsYXI7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjE7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIG1ldHJpY3M7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHByb3RvLmxvZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOYW1lc3BhY2UgbG9ncy5cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvXG4gICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBsb2dzID0ge307XG4gICAgICAgICAgICBsb2dzLnYxID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgdjEuXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9nc1xuICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgdjEgPSB7fTtcbiAgICAgICAgICAgICAgICB2MS5Mb2dzRGF0YSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgTG9nc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklSZXNvdXJjZUxvZ3M+fG51bGx9IFtyZXNvdXJjZUxvZ3NdIExvZ3NEYXRhIHJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTG9nc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTG9nc0RhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElMb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ3NEYXRhPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMb2dzRGF0YShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nc0RhdGEgcmVzb3VyY2VMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklSZXNvdXJjZUxvZ3M+fSByZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLnByb3RvdHlwZS5yZXNvdXJjZUxvZ3MgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBMb2dzRGF0YSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dzRGF0YT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhfSBMb2dzRGF0YSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9nc0RhdGEocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTG9nc0RhdGEgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JTG9nc0RhdGF9IG1lc3NhZ2UgTG9nc0RhdGEgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dzRGF0YS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VMb2dzICE9IG51bGwgJiYgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MuZW5jb2RlKG1lc3NhZ2UucmVzb3VyY2VMb2dzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBMb2dzRGF0YSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGEudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dzRGF0YX0gbWVzc2FnZSBMb2dzRGF0YSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIExvZ3NEYXRhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhfSBMb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnJlc291cmNlTG9ncyAmJiBtZXNzYWdlLnJlc291cmNlTG9ncy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTG9ncy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgTG9nc0RhdGEgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGF9IExvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIExvZ3NEYXRhIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VMb2dzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlTG9nc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnJlc291cmNlTG9ncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTG9nczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2VMb2dzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VMb2dzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgTG9nc0RhdGEgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhfSBMb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2VMb2dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhLnJlc291cmNlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucmVzb3VyY2VMb2dzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS5yZXNvdXJjZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZUxvZ3NbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlTG9nc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBMb2dzRGF0YSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGF9IG1lc3NhZ2UgTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dzRGF0YS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZUxvZ3MgJiYgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZUxvZ3Nbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnRvT2JqZWN0KG1lc3NhZ2UucmVzb3VyY2VMb2dzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIExvZ3NEYXRhIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBMb2dzRGF0YTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlJlc291cmNlTG9ncyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgUmVzb3VyY2VMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlfG51bGx9IFtyZXNvdXJjZV0gUmVzb3VyY2VMb2dzIHJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JU2NvcGVMb2dzPnxudWxsfSBbc2NvcGVMb2dzXSBSZXNvdXJjZUxvZ3Mgc2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzY2hlbWFVcmxdIFJlc291cmNlTG9ncyBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlc291cmNlTG9ncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBSZXNvdXJjZUxvZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElSZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklSZXNvdXJjZUxvZ3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlc291cmNlTG9ncyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3BlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb3VyY2VMb2dzIHJlc291cmNlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZXxudWxsfHVuZGVmaW5lZH0gcmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MucHJvdG90eXBlLnJlc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlTG9ncyBzY29wZUxvZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVNjb3BlTG9ncz59IHNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5wcm90b3R5cGUuc2NvcGVMb2dzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlTG9ncyBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBSZXNvdXJjZUxvZ3MgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVJlc291cmNlTG9ncz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc30gUmVzb3VyY2VMb2dzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VMb2dzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlTG9ncyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVJlc291cmNlTG9nc30gbWVzc2FnZSBSZXNvdXJjZUxvZ3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJyZXNvdXJjZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmVuY29kZShtZXNzYWdlLnJlc291cmNlLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVMb2dzICE9IG51bGwgJiYgbWVzc2FnZS5zY29wZUxvZ3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5zY29wZUxvZ3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MuZW5jb2RlKG1lc3NhZ2Uuc2NvcGVMb2dzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgUmVzb3VyY2VMb2dzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JUmVzb3VyY2VMb2dzfSBtZXNzYWdlIFJlc291cmNlTG9ncyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZUxvZ3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc30gUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zY29wZUxvZ3MgJiYgbWVzc2FnZS5zY29wZUxvZ3MubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZUxvZ3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZUxvZ3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc30gUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBSZXNvdXJjZUxvZ3MgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS52ZXJpZnkobWVzc2FnZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVMb2dzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlTG9nc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnNjb3BlTG9ncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlTG9nczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Uuc2NvcGVMb2dzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudmVyaWZ5KG1lc3NhZ2Uuc2NvcGVMb2dzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGVMb2dzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFJlc291cmNlTG9ncyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc30gUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZXNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucmVzb3VyY2UgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnJlc291cmNlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UuZnJvbU9iamVjdChvYmplY3QucmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY29wZUxvZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnNjb3BlTG9ncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnNjb3BlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5zY29wZUxvZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc2NvcGVMb2dzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3Muc2NvcGVMb2dzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVMb2dzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncy5mcm9tT2JqZWN0KG9iamVjdC5zY29wZUxvZ3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NoZW1hVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSBTdHJpbmcob2JqZWN0LnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFJlc291cmNlTG9ncyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc30gbWVzc2FnZSBSZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS50b09iamVjdChtZXNzYWdlLnJlc291cmNlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlTG9ncyAmJiBtZXNzYWdlLnNjb3BlTG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NvcGVMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnNjb3BlTG9ncy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlTG9nc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudG9PYmplY3QobWVzc2FnZS5zY29wZUxvZ3Nbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gbWVzc2FnZS5zY2hlbWFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBSZXNvdXJjZUxvZ3MgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9ncztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlNjb3BlTG9ncyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgU2NvcGVMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZXxudWxsfSBbc2NvcGVdIFNjb3BlTG9ncyBzY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ1JlY29yZD58bnVsbH0gW2xvZ1JlY29yZHNdIFNjb3BlTG9ncyBsb2dSZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzY2hlbWFVcmxdIFNjb3BlTG9ncyBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFNjb3BlTG9ncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBTY29wZUxvZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklTY29wZUxvZ3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNjb3BlTG9ncyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNjb3BlTG9ncyBzY29wZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlfG51bGx8dW5kZWZpbmVkfSBzY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy5wcm90b3R5cGUuc2NvcGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVMb2dzIGxvZ1JlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ1JlY29yZD59IGxvZ1JlY29yZHNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MucHJvdG90eXBlLmxvZ1JlY29yZHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVMb2dzIHNjaGVtYVVybC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFNjb3BlTG9ncyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JU2NvcGVMb2dzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzfSBTY29wZUxvZ3MgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTY29wZUxvZ3MocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU2NvcGVMb2dzIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JU2NvcGVMb2dzfSBtZXNzYWdlIFNjb3BlTG9ncyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNjb3BlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZShtZXNzYWdlLnNjb3BlLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubG9nUmVjb3JkcyAhPSBudWxsICYmIG1lc3NhZ2UubG9nUmVjb3Jkcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmxvZ1JlY29yZHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuZW5jb2RlKG1lc3NhZ2UubG9nUmVjb3Jkc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFNjb3BlTG9ncyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVNjb3BlTG9nc30gbWVzc2FnZSBTY29wZUxvZ3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU2NvcGVMb2dzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3N9IFNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmxvZ1JlY29yZHMgJiYgbWVzc2FnZS5sb2dSZWNvcmRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5sb2dSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmxvZ1JlY29yZHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTY29wZUxvZ3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc30gU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBTY29wZUxvZ3MgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5KG1lc3NhZ2Uuc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NvcGUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmxvZ1JlY29yZHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibG9nUmVjb3Jkc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmxvZ1JlY29yZHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJsb2dSZWNvcmRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5sb2dSZWNvcmRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQudmVyaWZ5KG1lc3NhZ2UubG9nUmVjb3Jkc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImxvZ1JlY29yZHMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgU2NvcGVMb2dzIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzfSBTY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zY29wZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3Muc2NvcGU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZnJvbU9iamVjdChvYmplY3Quc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5sb2dSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5sb2dSZWNvcmRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MubG9nUmVjb3JkczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5sb2dSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubG9nUmVjb3Jkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5sb2dSZWNvcmRzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MubG9nUmVjb3Jkczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmxvZ1JlY29yZHNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLmZyb21PYmplY3Qob2JqZWN0LmxvZ1JlY29yZHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NoZW1hVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSBTdHJpbmcob2JqZWN0LnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFNjb3BlTG9ncyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc30gbWVzc2FnZSBTY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjb3BlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnRvT2JqZWN0KG1lc3NhZ2Uuc2NvcGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubG9nUmVjb3JkcyAmJiBtZXNzYWdlLmxvZ1JlY29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmxvZ1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UubG9nUmVjb3Jkcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmxvZ1JlY29yZHNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLnRvT2JqZWN0KG1lc3NhZ2UubG9nUmVjb3Jkc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBtZXNzYWdlLnNjaGVtYVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFNjb3BlTG9ncyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NvcGVMb2dzO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogU2V2ZXJpdHlOdW1iZXIgZW51bS5cbiAgICAgICAgICAgICAgICAgKiBAbmFtZSBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2V2ZXJpdHlOdW1iZXJcbiAgICAgICAgICAgICAgICAgKiBAZW51bSB7bnVtYmVyfVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfVU5TUEVDSUZJRUQ9MCBTRVZFUklUWV9OVU1CRVJfVU5TUEVDSUZJRUQgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX1RSQUNFPTEgU0VWRVJJVFlfTlVNQkVSX1RSQUNFIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9UUkFDRTI9MiBTRVZFUklUWV9OVU1CRVJfVFJBQ0UyIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9UUkFDRTM9MyBTRVZFUklUWV9OVU1CRVJfVFJBQ0UzIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9UUkFDRTQ9NCBTRVZFUklUWV9OVU1CRVJfVFJBQ0U0IHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9ERUJVRz01IFNFVkVSSVRZX05VTUJFUl9ERUJVRyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfREVCVUcyPTYgU0VWRVJJVFlfTlVNQkVSX0RFQlVHMiB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfREVCVUczPTcgU0VWRVJJVFlfTlVNQkVSX0RFQlVHMyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfREVCVUc0PTggU0VWRVJJVFlfTlVNQkVSX0RFQlVHNCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfSU5GTz05IFNFVkVSSVRZX05VTUJFUl9JTkZPIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9JTkZPMj0xMCBTRVZFUklUWV9OVU1CRVJfSU5GTzIgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0lORk8zPTExIFNFVkVSSVRZX05VTUJFUl9JTkZPMyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfSU5GTzQ9MTIgU0VWRVJJVFlfTlVNQkVSX0lORk80IHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9XQVJOPTEzIFNFVkVSSVRZX05VTUJFUl9XQVJOIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9XQVJOMj0xNCBTRVZFUklUWV9OVU1CRVJfV0FSTjIgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX1dBUk4zPTE1IFNFVkVSSVRZX05VTUJFUl9XQVJOMyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfV0FSTjQ9MTYgU0VWRVJJVFlfTlVNQkVSX1dBUk40IHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9FUlJPUj0xNyBTRVZFUklUWV9OVU1CRVJfRVJST1IgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0VSUk9SMj0xOCBTRVZFUklUWV9OVU1CRVJfRVJST1IyIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9FUlJPUjM9MTkgU0VWRVJJVFlfTlVNQkVSX0VSUk9SMyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfRVJST1I0PTIwIFNFVkVSSVRZX05VTUJFUl9FUlJPUjQgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0ZBVEFMPTIxIFNFVkVSSVRZX05VTUJFUl9GQVRBTCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfRkFUQUwyPTIyIFNFVkVSSVRZX05VTUJFUl9GQVRBTDIgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0ZBVEFMMz0yMyBTRVZFUklUWV9OVU1CRVJfRkFUQUwzIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9GQVRBTDQ9MjQgU0VWRVJJVFlfTlVNQkVSX0ZBVEFMNCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHYxLlNldmVyaXR5TnVtYmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlc0J5SWQgPSB7fSwgdmFsdWVzID0gT2JqZWN0LmNyZWF0ZSh2YWx1ZXNCeUlkKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMF0gPSBcIlNFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRFwiXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzFdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0VcIl0gPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFMlwiXSA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzNdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UzXCJdID0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbNF0gPSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRTRcIl0gPSA0O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFs1XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHXCJdID0gNTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbNl0gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzJcIl0gPSA2O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFs3XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHM1wiXSA9IDc7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzhdID0gXCJTRVZFUklUWV9OVU1CRVJfREVCVUc0XCJdID0gODtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbOV0gPSBcIlNFVkVSSVRZX05VTUJFUl9JTkZPXCJdID0gOTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTBdID0gXCJTRVZFUklUWV9OVU1CRVJfSU5GTzJcIl0gPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTFdID0gXCJTRVZFUklUWV9OVU1CRVJfSU5GTzNcIl0gPSAxMTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTJdID0gXCJTRVZFUklUWV9OVU1CRVJfSU5GTzRcIl0gPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTNdID0gXCJTRVZFUklUWV9OVU1CRVJfV0FSTlwiXSA9IDEzO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxNF0gPSBcIlNFVkVSSVRZX05VTUJFUl9XQVJOMlwiXSA9IDE0O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxNV0gPSBcIlNFVkVSSVRZX05VTUJFUl9XQVJOM1wiXSA9IDE1O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxNl0gPSBcIlNFVkVSSVRZX05VTUJFUl9XQVJONFwiXSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxN10gPSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUlwiXSA9IDE3O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxOF0gPSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjJcIl0gPSAxODtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTldID0gXCJTRVZFUklUWV9OVU1CRVJfRVJST1IzXCJdID0gMTk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzIwXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SNFwiXSA9IDIwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyMV0gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTFwiXSA9IDIxO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyMl0gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDJcIl0gPSAyMjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMjNdID0gXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwzXCJdID0gMjM7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzI0XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMNFwiXSA9IDI0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogTG9nUmVjb3JkRmxhZ3MgZW51bS5cbiAgICAgICAgICAgICAgICAgKiBAbmFtZSBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkRmxhZ3NcbiAgICAgICAgICAgICAgICAgKiBAZW51bSB7bnVtYmVyfVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMT0dfUkVDT1JEX0ZMQUdTX0RPX05PVF9VU0U9MCBMT0dfUkVDT1JEX0ZMQUdTX0RPX05PVF9VU0UgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gTE9HX1JFQ09SRF9GTEFHU19UUkFDRV9GTEFHU19NQVNLPTI1NSBMT0dfUkVDT1JEX0ZMQUdTX1RSQUNFX0ZMQUdTX01BU0sgdmFsdWVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2MS5Mb2dSZWNvcmRGbGFncyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXNCeUlkID0ge30sIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUodmFsdWVzQnlJZCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzBdID0gXCJMT0dfUkVDT1JEX0ZMQUdTX0RPX05PVF9VU0VcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyNTVdID0gXCJMT0dfUkVDT1JEX0ZMQUdTX1RSQUNFX0ZMQUdTX01BU0tcIl0gPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5Mb2dSZWNvcmQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIExvZ1JlY29yZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElMb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbdGltZVVuaXhOYW5vXSBMb2dSZWNvcmQgdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW29ic2VydmVkVGltZVVuaXhOYW5vXSBMb2dSZWNvcmQgb2JzZXJ2ZWRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2V2ZXJpdHlOdW1iZXJ8bnVsbH0gW3NldmVyaXR5TnVtYmVyXSBMb2dSZWNvcmQgc2V2ZXJpdHlOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW3NldmVyaXR5VGV4dF0gTG9nUmVjb3JkIHNldmVyaXR5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZXxudWxsfSBbYm9keV0gTG9nUmVjb3JkIGJvZHlcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gTG9nUmVjb3JkIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnRdIExvZ1JlY29yZCBkcm9wcGVkQXR0cmlidXRlc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gTG9nUmVjb3JkIGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbdHJhY2VJZF0gTG9nUmVjb3JkIHRyYWNlSWRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtVaW50OEFycmF5fG51bGx9IFtzcGFuSWRdIExvZ1JlY29yZCBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW2V2ZW50TmFtZV0gTG9nUmVjb3JkIGV2ZW50TmFtZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTG9nUmVjb3JkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIExvZ1JlY29yZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ1JlY29yZD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTG9nUmVjb3JkKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nUmVjb3JkIHRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUudGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCBvYnNlcnZlZFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IG9ic2VydmVkVGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgc2V2ZXJpdHlOdW1iZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlcnxudWxsfHVuZGVmaW5lZH0gc2V2ZXJpdHlOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLnNldmVyaXR5TnVtYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCBzZXZlcml0eVRleHQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2V2ZXJpdHlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS5zZXZlcml0eVRleHQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nUmVjb3JkIGJvZHkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZXxudWxsfHVuZGVmaW5lZH0gYm9keVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUuYm9keSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nUmVjb3JkIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCB0cmFjZUlkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS50cmFjZUlkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCBzcGFuSWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1VpbnQ4QXJyYXl8bnVsbHx1bmRlZmluZWR9IHNwYW5JZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUuc3BhbklkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCBldmVudE5hbWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gZXZlbnROYW1lXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS5ldmVudE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBMb2dSZWNvcmQgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ1JlY29yZD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZH0gTG9nUmVjb3JkIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9nUmVjb3JkKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIExvZ1JlY29yZCBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ1JlY29yZH0gbWVzc2FnZSBMb2dSZWNvcmQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMSA9Ki8gOSkuZml4ZWQ2NChtZXNzYWdlLnRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2V2ZXJpdHlOdW1iZXJcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAwID0qLyAxNikuaW50MzIobWVzc2FnZS5zZXZlcml0eU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zZXZlcml0eVRleHQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNldmVyaXR5VGV4dFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5zdHJpbmcobWVzc2FnZS5zZXZlcml0eVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYm9keSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiYm9keVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5lbmNvZGUobWVzc2FnZS5ib2R5LCB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovIDQyKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgNiwgd2lyZVR5cGUgMiA9Ki8gNTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNywgd2lyZVR5cGUgMCA9Ki8gNTYpLnVpbnQzMihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgOCwgd2lyZVR5cGUgNSA9Ki8gNjkpLmZpeGVkMzIobWVzc2FnZS5mbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki8gNzQpLmJ5dGVzKG1lc3NhZ2UudHJhY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEwLCB3aXJlVHlwZSAyID0qLyA4MikuYnl0ZXMobWVzc2FnZS5zcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcIm9ic2VydmVkVGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTEsIHdpcmVUeXBlIDEgPSovIDg5KS5maXhlZDY0KG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXZlbnROYW1lICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJldmVudE5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMiwgd2lyZVR5cGUgMiA9Ki8gOTgpLnN0cmluZyhtZXNzYWdlLmV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIExvZ1JlY29yZCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ1JlY29yZH0gbWVzc2FnZSBMb2dSZWNvcmQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgTG9nUmVjb3JkIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmR9IExvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJvZHkgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gcmVhZGVyLmZpeGVkMzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZUlkID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNwYW5JZCA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ldmVudE5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgTG9nUmVjb3JkIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmR9IExvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgTG9nUmVjb3JkIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2UudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJvYnNlcnZlZFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9ic2VydmVkVGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNldmVyaXR5TnVtYmVyICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5TnVtYmVyXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS5zZXZlcml0eU51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2V2ZXJpdHlOdW1iZXI6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5VGV4dFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2V2ZXJpdHlUZXh0OiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJvZHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYm9keVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeShtZXNzYWdlLmJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYm9keS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5mbGFncykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS50cmFjZUlkICYmIHR5cGVvZiBtZXNzYWdlLnRyYWNlSWQubGVuZ3RoID09PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UudHJhY2VJZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zcGFuSWQgJiYgdHlwZW9mIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNwYW5JZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXZlbnROYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV2ZW50TmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UuZXZlbnROYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXZlbnROYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIExvZ1JlY29yZCBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZH0gTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50aW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LnRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcGFyc2VJbnQob2JqZWN0LnRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG9iamVjdC50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3QudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vID0gcGFyc2VJbnQob2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9IG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvYmplY3Quc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zZXZlcml0eU51bWJlciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IG9iamVjdC5zZXZlcml0eU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfVU5TUEVDSUZJRURcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRTJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFM1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0U0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVR1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUcyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHNFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfSU5GT1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfSU5GTzJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfSU5GTzNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfSU5GTzRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAxMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9XQVJOMlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9XQVJOM1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9XQVJONFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAxNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1IzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SNFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMNFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAyNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNldmVyaXR5VGV4dCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0ID0gU3RyaW5nKG9iamVjdC5zZXZlcml0eVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5ib2R5ICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5ib2R5OiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ib2R5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmF0dHJpYnV0ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5mbGFncyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSBvYmplY3QuZmxhZ3MgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRyYWNlSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC50cmFjZUlkID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRpbC5iYXNlNjQuZGVjb2RlKG9iamVjdC50cmFjZUlkLCBtZXNzYWdlLnRyYWNlSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChvYmplY3QudHJhY2VJZCkpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3QudHJhY2VJZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZUlkID0gb2JqZWN0LnRyYWNlSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNwYW5JZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNwYW5JZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3Quc3BhbklkLCBtZXNzYWdlLnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC5zcGFuSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnNwYW5JZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSBvYmplY3Quc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5ldmVudE5hbWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV2ZW50TmFtZSA9IFN0cmluZyhvYmplY3QuZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgTG9nUmVjb3JkIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkfSBtZXNzYWdlIExvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V2ZXJpdHlOdW1iZXIgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyBcIlNFVkVSSVRZX05VTUJFUl9VTlNQRUNJRklFRFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V2ZXJpdHlUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYm9keSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3QudHJhY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIob2JqZWN0LnNwYW5JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXZlbnROYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnRpbWVVbml4TmFubykgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNldmVyaXR5TnVtYmVyICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5TnVtYmVyXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXZlcml0eU51bWJlciA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlclttZXNzYWdlLnNldmVyaXR5TnVtYmVyXSA9PT0gdW5kZWZpbmVkID8gbWVzc2FnZS5zZXZlcml0eU51bWJlciA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TZXZlcml0eU51bWJlclttZXNzYWdlLnNldmVyaXR5TnVtYmVyXSA6IG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zZXZlcml0eVRleHQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2V2ZXJpdHlUZXh0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXZlcml0eVRleHQgPSBtZXNzYWdlLnNldmVyaXR5VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJvZHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYm9keVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYm9keSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYm9keSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSBtZXNzYWdlLmZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnRyYWNlSWQsIDAsIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLnRyYWNlSWQpIDogbWVzc2FnZS50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnNwYW5JZCwgMCwgbWVzc2FnZS5zcGFuSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS5zcGFuSWQpIDogbWVzc2FnZS5zcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJvYnNlcnZlZFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vKSA6IG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXZlbnROYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV2ZW50TmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXZlbnROYW1lID0gbWVzc2FnZS5ldmVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBMb2dSZWNvcmQgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIExvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvZ1JlY29yZDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2MTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4gbG9ncztcbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuIHByb3RvO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIG9wZW50ZWxlbWV0cnk7XG59KSgpO1xubW9kdWxlLmV4cG9ydHMgPSAkcm9vdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvb3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhleFRvQmluYXJ5ID0gdm9pZCAwO1xuZnVuY3Rpb24gaW50VmFsdWUoY2hhckNvZGUpIHtcbiAgICAvLyAwLTlcbiAgICBpZiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlIC0gNDg7XG4gICAgfVxuICAgIC8vIGEtZlxuICAgIGlmIChjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlIC0gODc7XG4gICAgfVxuICAgIC8vIEEtRlxuICAgIHJldHVybiBjaGFyQ29kZSAtIDU1O1xufVxuZnVuY3Rpb24gaGV4VG9CaW5hcnkoaGV4U3RyKSB7XG4gICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoaGV4U3RyLmxlbmd0aCAvIDIpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGV4U3RyLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IGhpID0gaW50VmFsdWUoaGV4U3RyLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICBjb25zdCBsbyA9IGludFZhbHVlKGhleFN0ci5jaGFyQ29kZUF0KGkgKyAxKSk7XG4gICAgICAgIGJ1ZltvZmZzZXQrK10gPSAoaGkgPDwgNCkgfCBsbztcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cbmV4cG9ydHMuaGV4VG9CaW5hcnkgPSBoZXhUb0JpbmFyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhleC10by1iaW5hcnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE90bHBFbmNvZGVyID0gZXhwb3J0cy5lbmNvZGVBc1N0cmluZyA9IGV4cG9ydHMuZW5jb2RlQXNMb25nQml0cyA9IGV4cG9ydHMudG9Mb25nQml0cyA9IGV4cG9ydHMuaHJUaW1lVG9OYW5vcyA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaGV4X3RvX2JpbmFyeV8xID0gcmVxdWlyZShcIi4vaGV4LXRvLWJpbmFyeVwiKTtcbmZ1bmN0aW9uIGhyVGltZVRvTmFub3MoaHJUaW1lKSB7XG4gICAgY29uc3QgTkFOT1NFQ09ORFMgPSBCaWdJbnQoMTAwMDAwMDAwMCk7XG4gICAgcmV0dXJuIChCaWdJbnQoTWF0aC50cnVuYyhoclRpbWVbMF0pKSAqIE5BTk9TRUNPTkRTICsgQmlnSW50KE1hdGgudHJ1bmMoaHJUaW1lWzFdKSkpO1xufVxuZXhwb3J0cy5oclRpbWVUb05hbm9zID0gaHJUaW1lVG9OYW5vcztcbmZ1bmN0aW9uIHRvTG9uZ0JpdHModmFsdWUpIHtcbiAgICBjb25zdCBsb3cgPSBOdW1iZXIoQmlnSW50LmFzVWludE4oMzIsIHZhbHVlKSk7XG4gICAgY29uc3QgaGlnaCA9IE51bWJlcihCaWdJbnQuYXNVaW50TigzMiwgdmFsdWUgPj4gQmlnSW50KDMyKSkpO1xuICAgIHJldHVybiB7IGxvdywgaGlnaCB9O1xufVxuZXhwb3J0cy50b0xvbmdCaXRzID0gdG9Mb25nQml0cztcbmZ1bmN0aW9uIGVuY29kZUFzTG9uZ0JpdHMoaHJUaW1lKSB7XG4gICAgY29uc3QgbmFub3MgPSBoclRpbWVUb05hbm9zKGhyVGltZSk7XG4gICAgcmV0dXJuIHRvTG9uZ0JpdHMobmFub3MpO1xufVxuZXhwb3J0cy5lbmNvZGVBc0xvbmdCaXRzID0gZW5jb2RlQXNMb25nQml0cztcbmZ1bmN0aW9uIGVuY29kZUFzU3RyaW5nKGhyVGltZSkge1xuICAgIGNvbnN0IG5hbm9zID0gaHJUaW1lVG9OYW5vcyhoclRpbWUpO1xuICAgIHJldHVybiBuYW5vcy50b1N0cmluZygpO1xufVxuZXhwb3J0cy5lbmNvZGVBc1N0cmluZyA9IGVuY29kZUFzU3RyaW5nO1xuY29uc3QgZW5jb2RlVGltZXN0YW1wID0gdHlwZW9mIEJpZ0ludCAhPT0gJ3VuZGVmaW5lZCcgPyBlbmNvZGVBc1N0cmluZyA6IGNvcmVfMS5oclRpbWVUb05hbm9zZWNvbmRzO1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBvcHRpb25hbEhleFRvQmluYXJ5KHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKDAsIGhleF90b19iaW5hcnlfMS5oZXhUb0JpbmFyeSkoc3RyKTtcbn1cbmNvbnN0IERFRkFVTFRfRU5DT0RFUiA9IHtcbiAgICBlbmNvZGVIclRpbWU6IGVuY29kZUFzTG9uZ0JpdHMsXG4gICAgZW5jb2RlU3BhbkNvbnRleHQ6IGhleF90b19iaW5hcnlfMS5oZXhUb0JpbmFyeSxcbiAgICBlbmNvZGVPcHRpb25hbFNwYW5Db250ZXh0OiBvcHRpb25hbEhleFRvQmluYXJ5LFxufTtcbmZ1bmN0aW9uIGdldE90bHBFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX0VOQ09ERVI7XG4gICAgfVxuICAgIGNvbnN0IHVzZUxvbmdCaXRzID0gb3B0aW9ucy51c2VMb25nQml0cyA/PyB0cnVlO1xuICAgIGNvbnN0IHVzZUhleCA9IG9wdGlvbnMudXNlSGV4ID8/IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZUhyVGltZTogdXNlTG9uZ0JpdHMgPyBlbmNvZGVBc0xvbmdCaXRzIDogZW5jb2RlVGltZXN0YW1wLFxuICAgICAgICBlbmNvZGVTcGFuQ29udGV4dDogdXNlSGV4ID8gaWRlbnRpdHkgOiBoZXhfdG9fYmluYXJ5XzEuaGV4VG9CaW5hcnksXG4gICAgICAgIGVuY29kZU9wdGlvbmFsU3BhbkNvbnRleHQ6IHVzZUhleCA/IGlkZW50aXR5IDogb3B0aW9uYWxIZXhUb0JpbmFyeSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRPdGxwRW5jb2RlciA9IGdldE90bHBFbmNvZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudG9BbnlWYWx1ZSA9IGV4cG9ydHMudG9LZXlWYWx1ZSA9IGV4cG9ydHMudG9BdHRyaWJ1dGVzID0gZXhwb3J0cy5jcmVhdGVJbnN0cnVtZW50YXRpb25TY29wZSA9IGV4cG9ydHMuY3JlYXRlUmVzb3VyY2UgPSB2b2lkIDA7XG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgYXR0cmlidXRlczogdG9BdHRyaWJ1dGVzKHJlc291cmNlLmF0dHJpYnV0ZXMpLFxuICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwLFxuICAgIH07XG4gICAgY29uc3Qgc2NoZW1hVXJsID0gcmVzb3VyY2Uuc2NoZW1hVXJsO1xuICAgIGlmIChzY2hlbWFVcmwgJiYgc2NoZW1hVXJsICE9PSAnJylcbiAgICAgICAgcmVzdWx0LnNjaGVtYVVybCA9IHNjaGVtYVVybDtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5jcmVhdGVSZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlO1xuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudGF0aW9uU2NvcGUoc2NvcGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzY29wZS5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBzY29wZS52ZXJzaW9uLFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZUluc3RydW1lbnRhdGlvblNjb3BlID0gY3JlYXRlSW5zdHJ1bWVudGF0aW9uU2NvcGU7XG5mdW5jdGlvbiB0b0F0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5tYXAoa2V5ID0+IHRvS2V5VmFsdWUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pKTtcbn1cbmV4cG9ydHMudG9BdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzO1xuZnVuY3Rpb24gdG9LZXlWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlOiB0b0FueVZhbHVlKHZhbHVlKSxcbiAgICB9O1xufVxuZXhwb3J0cy50b0tleVZhbHVlID0gdG9LZXlWYWx1ZTtcbmZ1bmN0aW9uIHRvQW55VmFsdWUodmFsdWUpIHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmICh0ID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIHsgc3RyaW5nVmFsdWU6IHZhbHVlIH07XG4gICAgaWYgKHQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm4geyBkb3VibGVWYWx1ZTogdmFsdWUgfTtcbiAgICAgICAgcmV0dXJuIHsgaW50VmFsdWU6IHZhbHVlIH07XG4gICAgfVxuICAgIGlmICh0ID09PSAnYm9vbGVhbicpXG4gICAgICAgIHJldHVybiB7IGJvb2xWYWx1ZTogdmFsdWUgfTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KVxuICAgICAgICByZXR1cm4geyBieXRlc1ZhbHVlOiB2YWx1ZSB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHsgYXJyYXlWYWx1ZTogeyB2YWx1ZXM6IHZhbHVlLm1hcCh0b0FueVZhbHVlKSB9IH07XG4gICAgaWYgKHQgPT09ICdvYmplY3QnICYmIHZhbHVlICE9IG51bGwpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrdmxpc3RWYWx1ZToge1xuICAgICAgICAgICAgICAgIHZhbHVlczogT2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2ssIHZdKSA9PiB0b0tleVZhbHVlKGssIHYpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgcmV0dXJuIHt9O1xufVxuZXhwb3J0cy50b0FueVZhbHVlID0gdG9BbnlWYWx1ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVybmFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0xvZ0F0dHJpYnV0ZXMgPSBleHBvcnRzLmNyZWF0ZUV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL3V0aWxzXCIpO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vaW50ZXJuYWxcIik7XG5mdW5jdGlvbiBjcmVhdGVFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QobG9nUmVjb3Jkcywgb3B0aW9ucykge1xuICAgIGNvbnN0IGVuY29kZXIgPSAoMCwgdXRpbHNfMS5nZXRPdGxwRW5jb2Rlcikob3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2VMb2dzOiBsb2dSZWNvcmRzVG9SZXNvdXJjZUxvZ3MobG9nUmVjb3JkcywgZW5jb2RlciksXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0ID0gY3JlYXRlRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0O1xuZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VNYXAobG9nUmVjb3Jkcykge1xuICAgIGNvbnN0IHJlc291cmNlTWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGxvZ1JlY29yZHMpIHtcbiAgICAgICAgY29uc3QgeyByZXNvdXJjZSwgaW5zdHJ1bWVudGF0aW9uU2NvcGU6IHsgbmFtZSwgdmVyc2lvbiA9ICcnLCBzY2hlbWFVcmwgPSAnJyB9LCB9ID0gcmVjb3JkO1xuICAgICAgICBsZXQgaXNtTWFwID0gcmVzb3VyY2VNYXAuZ2V0KHJlc291cmNlKTtcbiAgICAgICAgaWYgKCFpc21NYXApIHtcbiAgICAgICAgICAgIGlzbU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHJlc291cmNlTWFwLnNldChyZXNvdXJjZSwgaXNtTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc21LZXkgPSBgJHtuYW1lfUAke3ZlcnNpb259OiR7c2NoZW1hVXJsfWA7XG4gICAgICAgIGxldCByZWNvcmRzID0gaXNtTWFwLmdldChpc21LZXkpO1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgIGlzbU1hcC5zZXQoaXNtS2V5LCByZWNvcmRzKTtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlTWFwO1xufVxuZnVuY3Rpb24gbG9nUmVjb3Jkc1RvUmVzb3VyY2VMb2dzKGxvZ1JlY29yZHMsIGVuY29kZXIpIHtcbiAgICBjb25zdCByZXNvdXJjZU1hcCA9IGNyZWF0ZVJlc291cmNlTWFwKGxvZ1JlY29yZHMpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHJlc291cmNlTWFwLCAoW3Jlc291cmNlLCBpc21NYXBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFJlc291cmNlID0gKDAsIGludGVybmFsXzEuY3JlYXRlUmVzb3VyY2UpKHJlc291cmNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc291cmNlOiBwcm9jZXNzZWRSZXNvdXJjZSxcbiAgICAgICAgICAgIHNjb3BlTG9nczogQXJyYXkuZnJvbShpc21NYXAsIChbLCBzY29wZUxvZ3NdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZUluc3RydW1lbnRhdGlvblNjb3BlKShzY29wZUxvZ3NbMF0uaW5zdHJ1bWVudGF0aW9uU2NvcGUpLFxuICAgICAgICAgICAgICAgICAgICBsb2dSZWNvcmRzOiBzY29wZUxvZ3MubWFwKGxvZyA9PiB0b0xvZ1JlY29yZChsb2csIGVuY29kZXIpKSxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hVXJsOiBzY29wZUxvZ3NbMF0uaW5zdHJ1bWVudGF0aW9uU2NvcGUuc2NoZW1hVXJsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNjaGVtYVVybDogcHJvY2Vzc2VkUmVzb3VyY2Uuc2NoZW1hVXJsLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdG9Mb2dSZWNvcmQobG9nLCBlbmNvZGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGltZVVuaXhOYW5vOiBlbmNvZGVyLmVuY29kZUhyVGltZShsb2cuaHJUaW1lKSxcbiAgICAgICAgb2JzZXJ2ZWRUaW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKGxvZy5oclRpbWVPYnNlcnZlZCksXG4gICAgICAgIHNldmVyaXR5TnVtYmVyOiB0b1NldmVyaXR5TnVtYmVyKGxvZy5zZXZlcml0eU51bWJlciksXG4gICAgICAgIHNldmVyaXR5VGV4dDogbG9nLnNldmVyaXR5VGV4dCxcbiAgICAgICAgYm9keTogKDAsIGludGVybmFsXzEudG9BbnlWYWx1ZSkobG9nLmJvZHkpLFxuICAgICAgICBldmVudE5hbWU6IGxvZy5ldmVudE5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHRvTG9nQXR0cmlidXRlcyhsb2cuYXR0cmlidXRlcyksXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGxvZy5kcm9wcGVkQXR0cmlidXRlc0NvdW50LFxuICAgICAgICBmbGFnczogbG9nLnNwYW5Db250ZXh0Py50cmFjZUZsYWdzLFxuICAgICAgICB0cmFjZUlkOiBlbmNvZGVyLmVuY29kZU9wdGlvbmFsU3BhbkNvbnRleHQobG9nLnNwYW5Db250ZXh0Py50cmFjZUlkKSxcbiAgICAgICAgc3BhbklkOiBlbmNvZGVyLmVuY29kZU9wdGlvbmFsU3BhbkNvbnRleHQobG9nLnNwYW5Db250ZXh0Py5zcGFuSWQpLFxuICAgIH07XG59XG5mdW5jdGlvbiB0b1NldmVyaXR5TnVtYmVyKHNldmVyaXR5TnVtYmVyKSB7XG4gICAgcmV0dXJuIHNldmVyaXR5TnVtYmVyO1xufVxuZnVuY3Rpb24gdG9Mb2dBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcykubWFwKGtleSA9PiAoMCwgaW50ZXJuYWxfMS50b0tleVZhbHVlKShrZXksIGF0dHJpYnV0ZXNba2V5XSkpO1xufVxuZXhwb3J0cy50b0xvZ0F0dHJpYnV0ZXMgPSB0b0xvZ0F0dHJpYnV0ZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IHJvb3QgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkL3Jvb3RcIik7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuY29uc3QgbG9nc1Jlc3BvbnNlVHlwZSA9IHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgIC5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlO1xuY29uc3QgbG9nc1JlcXVlc3RUeXBlID0gcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxXG4gICAgLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdDtcbi8qXG4gKiBAZXhwZXJpbWVudGFsIHRoaXMgc2VyaWFsaXplciBtYXkgcmVjZWl2ZSBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHZlcnNpb25zLCBwaW4gdGhpcyBwYWNrYWdlJ3MgdmVyc2lvbiB3aGVuIHVzaW5nIHRoaXMgY29uc3RhbnRcbiAqL1xuZXhwb3J0cy5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZVJlcXVlc3Q6IChhcmcpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZUV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCkoYXJnKTtcbiAgICAgICAgcmV0dXJuIGxvZ3NSZXF1ZXN0VHlwZS5lbmNvZGUocmVxdWVzdCkuZmluaXNoKCk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZVJlc3BvbnNlOiAoYXJnKSA9PiB7XG4gICAgICAgIHJldHVybiBsb2dzUmVzcG9uc2VUeXBlLmRlY29kZShhcmcpO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9ncy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZMb2dzU2VyaWFsaXplciA9IHZvaWQgMDtcbnZhciBsb2dzXzEgPSByZXF1aXJlKFwiLi9sb2dzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZMb2dzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nc18xLlByb3RvYnVmTG9nc1NlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHZvaWQgMDtcbi8qKlxuICogQWdncmVnYXRpb25UZW1wb3JhbGl0eSBpbmRpY2F0ZXMgdGhlIHdheSBhZGRpdGl2ZSBxdWFudGl0aWVzIGFyZSBleHByZXNzZWQuXG4gKi9cbnZhciBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgQWdncmVnYXRpb25UZW1wb3JhbGl0eVtBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W1wiREVMVEFcIl0gPSAwXSA9IFwiREVMVEFcIjtcbiAgICBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbXCJDVU1VTEFUSVZFXCJdID0gMV0gPSBcIkNVTVVMQVRJVkVcIjtcbn0pKEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgfHwgKGV4cG9ydHMuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EYXRhUG9pbnRUeXBlID0gZXhwb3J0cy5JbnN0cnVtZW50VHlwZSA9IHZvaWQgMDtcbi8qKlxuICogU3VwcG9ydGVkIHR5cGVzIG9mIG1ldHJpYyBpbnN0cnVtZW50cy5cbiAqL1xudmFyIEluc3RydW1lbnRUeXBlO1xuKGZ1bmN0aW9uIChJbnN0cnVtZW50VHlwZSkge1xuICAgIEluc3RydW1lbnRUeXBlW1wiQ09VTlRFUlwiXSA9IFwiQ09VTlRFUlwiO1xuICAgIEluc3RydW1lbnRUeXBlW1wiR0FVR0VcIl0gPSBcIkdBVUdFXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJISVNUT0dSQU1cIl0gPSBcIkhJU1RPR1JBTVwiO1xuICAgIEluc3RydW1lbnRUeXBlW1wiVVBfRE9XTl9DT1VOVEVSXCJdID0gXCJVUF9ET1dOX0NPVU5URVJcIjtcbiAgICBJbnN0cnVtZW50VHlwZVtcIk9CU0VSVkFCTEVfQ09VTlRFUlwiXSA9IFwiT0JTRVJWQUJMRV9DT1VOVEVSXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJPQlNFUlZBQkxFX0dBVUdFXCJdID0gXCJPQlNFUlZBQkxFX0dBVUdFXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJPQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUlwiXSA9IFwiT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVJcIjtcbn0pKEluc3RydW1lbnRUeXBlID0gZXhwb3J0cy5JbnN0cnVtZW50VHlwZSB8fCAoZXhwb3J0cy5JbnN0cnVtZW50VHlwZSA9IHt9KSk7XG4vKipcbiAqIFRoZSBhZ2dyZWdhdGVkIHBvaW50IGRhdGEgdHlwZS5cbiAqL1xudmFyIERhdGFQb2ludFR5cGU7XG4oZnVuY3Rpb24gKERhdGFQb2ludFR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBBIGhpc3RvZ3JhbSBkYXRhIHBvaW50IGNvbnRhaW5zIGEgaGlzdG9ncmFtIHN0YXRpc3RpY3Mgb2YgY29sbGVjdGVkXG4gICAgICogdmFsdWVzIHdpdGggYSBsaXN0IG9mIGV4cGxpY2l0IGJ1Y2tldCBib3VuZGFyaWVzIGFuZCBzdGF0aXN0aWNzIHN1Y2hcbiAgICAgKiBhcyBtaW4sIG1heCwgY291bnQsIGFuZCBzdW0gb2YgYWxsIGNvbGxlY3RlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgRGF0YVBvaW50VHlwZVtEYXRhUG9pbnRUeXBlW1wiSElTVE9HUkFNXCJdID0gMF0gPSBcIkhJU1RPR1JBTVwiO1xuICAgIC8qKlxuICAgICAqIEFuIGV4cG9uZW50aWFsIGhpc3RvZ3JhbSBkYXRhIHBvaW50IGNvbnRhaW5zIGEgaGlzdG9ncmFtIHN0YXRpc3RpY3Mgb2ZcbiAgICAgKiBjb2xsZWN0ZWQgdmFsdWVzIHdoZXJlIGJ1Y2tldCBib3VuZGFyaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWRcbiAgICAgKiB1c2luZyBhbiBleHBvbmVudGlhbCBmdW5jdGlvbiwgYW5kIHN0YXRpc3RpY3Mgc3VjaCBhcyBtaW4sIG1heCwgY291bnQsXG4gICAgICogYW5kIHN1bSBvZiBhbGwgY29sbGVjdGVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBEYXRhUG9pbnRUeXBlW0RhdGFQb2ludFR5cGVbXCJFWFBPTkVOVElBTF9ISVNUT0dSQU1cIl0gPSAxXSA9IFwiRVhQT05FTlRJQUxfSElTVE9HUkFNXCI7XG4gICAgLyoqXG4gICAgICogQSBnYXVnZSBtZXRyaWMgZGF0YSBwb2ludCBoYXMgb25seSBhIHNpbmdsZSBudW1lcmljIHZhbHVlLlxuICAgICAqL1xuICAgIERhdGFQb2ludFR5cGVbRGF0YVBvaW50VHlwZVtcIkdBVUdFXCJdID0gMl0gPSBcIkdBVUdFXCI7XG4gICAgLyoqXG4gICAgICogQSBzdW0gbWV0cmljIGRhdGEgcG9pbnQgaGFzIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUgYW5kIGFcbiAgICAgKiBtb25vdG9uaWNpdHktaW5kaWNhdG9yLlxuICAgICAqL1xuICAgIERhdGFQb2ludFR5cGVbRGF0YVBvaW50VHlwZVtcIlNVTVwiXSA9IDNdID0gXCJTVU1cIjtcbn0pKERhdGFQb2ludFR5cGUgPSBleHBvcnRzLkRhdGFQb2ludFR5cGUgfHwgKGV4cG9ydHMuRGF0YVBvaW50VHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNEYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lcXVhbHNDYXNlSW5zZW5zaXRpdmUgPSBleHBvcnRzLmJpbmFyeVNlYXJjaFVCID0gZXhwb3J0cy5zZXRFcXVhbHMgPSBleHBvcnRzLkZsYXRNYXAgPSBleHBvcnRzLmlzUHJvbWlzZUFsbFNldHRsZWRSZWplY3Rpb25SZXN1bHQgPSBleHBvcnRzLlByb21pc2VBbGxTZXR0bGVkID0gZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IGV4cG9ydHMuaW5zdHJ1bWVudGF0aW9uU2NvcGVJZCA9IGV4cG9ydHMuaGFzaEF0dHJpYnV0ZXMgPSBleHBvcnRzLmlzTm90TnVsbGlzaCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzTm90TnVsbGlzaChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc05vdE51bGxpc2ggPSBpc05vdE51bGxpc2g7XG4vKipcbiAqIENvbnZlcnRpbmcgdGhlIHVub3JkZXJlZCBhdHRyaWJ1dGVzIGludG8gdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nLlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgdXNlciBwcm92aWRlZCB1bm9yZGVyZWQgQXR0cmlidXRlcy5cbiAqL1xuZnVuY3Rpb24gaGFzaEF0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcyk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgLy8gUmV0dXJuIGEgc3RyaW5nIHRoYXQgaXMgc3RhYmxlIG9uIGtleSBvcmRlcnMuXG4gICAga2V5cyA9IGtleXMuc29ydCgpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXlzLm1hcChrZXkgPT4gW2tleSwgYXR0cmlidXRlc1trZXldXSkpO1xufVxuZXhwb3J0cy5oYXNoQXR0cmlidXRlcyA9IGhhc2hBdHRyaWJ1dGVzO1xuLyoqXG4gKiBDb252ZXJ0aW5nIHRoZSBpbnN0cnVtZW50YXRpb24gc2NvcGUgb2JqZWN0IHRvIGEgdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nLlxuICogQHBhcmFtIGluc3RydW1lbnRhdGlvblNjb3BlXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRhdGlvblNjb3BlSWQoaW5zdHJ1bWVudGF0aW9uU2NvcGUpIHtcbiAgICByZXR1cm4gYCR7aW5zdHJ1bWVudGF0aW9uU2NvcGUubmFtZX06JHtpbnN0cnVtZW50YXRpb25TY29wZS52ZXJzaW9uID8/ICcnfToke2luc3RydW1lbnRhdGlvblNjb3BlLnNjaGVtYVVybCA/PyAnJ31gO1xufVxuZXhwb3J0cy5pbnN0cnVtZW50YXRpb25TY29wZUlkID0gaW5zdHJ1bWVudGF0aW9uU2NvcGVJZDtcbi8qKlxuICogRXJyb3IgdGhhdCBpcyB0aHJvd24gb24gdGltZW91dHMuXG4gKi9cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICAvLyBtYW51YWxseSBhZGp1c3QgcHJvdG90eXBlIHRvIHJldGFpbiBgaW5zdGFuY2VvZmAgZnVuY3Rpb25hbGl0eSB3aGVuIHRhcmdldGluZyBFUzUsIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUaW1lb3V0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcbi8qKlxuICogQWRkcyBhIHRpbWVvdXQgdG8gYSBwcm9taXNlIGFuZCByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZC4gQWxzbyByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZVxuICogcmVqZWN0cywgYW5kIHJlc29sdmVzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZSByZXNvbHZlcy5cbiAqXG4gKiA8cD4gTk9URTogdGhpcyBvcGVyYXRpb24gd2lsbCBjb250aW51ZSBldmVuIGFmdGVyIGl0IHRocm93cyBhIHtAbGluayBUaW1lb3V0RXJyb3J9LlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIHByb21pc2UgdG8gdXNlIHdpdGggdGltZW91dC5cbiAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAqL1xuZnVuY3Rpb24gY2FsbFdpdGhUaW1lb3V0KHByb21pc2UsIHRpbWVvdXQpIHtcbiAgICBsZXQgdGltZW91dEhhbmRsZTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHRpbWVvdXRGdW5jdGlvbihfcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ09wZXJhdGlvbiB0aW1lZCBvdXQuJykpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHJlYXNvbiA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBjYWxsV2l0aFRpbWVvdXQ7XG4vKipcbiAqIE5vZGUuanMgdjEyLjkgbG93ZXIgYW5kIGJyb3dzZXIgY29tcGF0aWJsZSBgUHJvbWlzZS5hbGxTZXR0bGVkYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gUHJvbWlzZUFsbFNldHRsZWQocHJvbWlzZXMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBwO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdmdWxmaWxsZWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3JlamVjdGVkJyxcbiAgICAgICAgICAgICAgICByZWFzb246IGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuZXhwb3J0cy5Qcm9taXNlQWxsU2V0dGxlZCA9IFByb21pc2VBbGxTZXR0bGVkO1xuZnVuY3Rpb24gaXNQcm9taXNlQWxsU2V0dGxlZFJlamVjdGlvblJlc3VsdChpdCkge1xuICAgIHJldHVybiBpdC5zdGF0dXMgPT09ICdyZWplY3RlZCc7XG59XG5leHBvcnRzLmlzUHJvbWlzZUFsbFNldHRsZWRSZWplY3Rpb25SZXN1bHQgPSBpc1Byb21pc2VBbGxTZXR0bGVkUmVqZWN0aW9uUmVzdWx0O1xuLyoqXG4gKiBOb2RlLmpzIHYxMS4wIGxvd2VyIGFuZCBicm93c2VyIGNvbXBhdGlibGUgYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYC5cbiAqL1xuZnVuY3Rpb24gRmxhdE1hcChhcnIsIGZuKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgYXJyLmZvckVhY2goaXQgPT4ge1xuICAgICAgICByZXN1bHQucHVzaCguLi5mbihpdCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLkZsYXRNYXAgPSBGbGF0TWFwO1xuZnVuY3Rpb24gc2V0RXF1YWxzKGxocywgcmhzKSB7XG4gICAgaWYgKGxocy5zaXplICE9PSByaHMuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaHMpIHtcbiAgICAgICAgaWYgKCFyaHMuaGFzKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLnNldEVxdWFscyA9IHNldEVxdWFscztcbi8qKlxuICogQmluYXJ5IHNlYXJjaCB0aGUgc29ydGVkIGFycmF5IHRvIHRoZSBmaW5kIHVwcGVyIGJvdW5kIGZvciB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gYXJyXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFVCKGFyciwgdmFsdWUpIHtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IGFyci5sZW5ndGggLSAxO1xuICAgIGxldCByZXQgPSBhcnIubGVuZ3RoO1xuICAgIHdoaWxlIChoaSA+PSBsbykge1xuICAgICAgICBjb25zdCBtaWQgPSBsbyArIE1hdGgudHJ1bmMoKGhpIC0gbG8pIC8gMik7XG4gICAgICAgIGlmIChhcnJbbWlkXSA8IHZhbHVlKSB7XG4gICAgICAgICAgICBsbyA9IG1pZCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXQgPSBtaWQ7XG4gICAgICAgICAgICBoaSA9IG1pZCAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbmV4cG9ydHMuYmluYXJ5U2VhcmNoVUIgPSBiaW5hcnlTZWFyY2hVQjtcbmZ1bmN0aW9uIGVxdWFsc0Nhc2VJbnNlbnNpdGl2ZShsaHMsIHJocykge1xuICAgIHJldHVybiBsaHMudG9Mb3dlckNhc2UoKSA9PT0gcmhzLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnRzLmVxdWFsc0Nhc2VJbnNlbnNpdGl2ZSA9IGVxdWFsc0Nhc2VJbnNlbnNpdGl2ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BZ2dyZWdhdG9yS2luZCA9IHZvaWQgMDtcbi8qKiBUaGUga2luZCBvZiBhZ2dyZWdhdG9yLiAqL1xudmFyIEFnZ3JlZ2F0b3JLaW5kO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdG9yS2luZCkge1xuICAgIEFnZ3JlZ2F0b3JLaW5kW0FnZ3JlZ2F0b3JLaW5kW1wiRFJPUFwiXSA9IDBdID0gXCJEUk9QXCI7XG4gICAgQWdncmVnYXRvcktpbmRbQWdncmVnYXRvcktpbmRbXCJTVU1cIl0gPSAxXSA9IFwiU1VNXCI7XG4gICAgQWdncmVnYXRvcktpbmRbQWdncmVnYXRvcktpbmRbXCJMQVNUX1ZBTFVFXCJdID0gMl0gPSBcIkxBU1RfVkFMVUVcIjtcbiAgICBBZ2dyZWdhdG9yS2luZFtBZ2dyZWdhdG9yS2luZFtcIkhJU1RPR1JBTVwiXSA9IDNdID0gXCJISVNUT0dSQU1cIjtcbiAgICBBZ2dyZWdhdG9yS2luZFtBZ2dyZWdhdG9yS2luZFtcIkVYUE9ORU5USUFMX0hJU1RPR1JBTVwiXSA9IDRdID0gXCJFWFBPTkVOVElBTF9ISVNUT0dSQU1cIjtcbn0pKEFnZ3JlZ2F0b3JLaW5kID0gZXhwb3J0cy5BZ2dyZWdhdG9yS2luZCB8fCAoZXhwb3J0cy5BZ2dyZWdhdG9yS2luZCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRHJvcEFnZ3JlZ2F0b3IgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG4vKiogQmFzaWMgYWdncmVnYXRvciBmb3IgTm9uZSB3aGljaCBrZWVwcyBubyByZWNvcmRlZCB2YWx1ZS4gKi9cbmNsYXNzIERyb3BBZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gdHlwZXNfMS5BZ2dyZWdhdG9yS2luZC5EUk9QO1xuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbWVyZ2UoX3ByZXZpb3VzLCBfZGVsdGEpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZGlmZihfcHJldmlvdXMsIF9jdXJyZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRvTWV0cmljRGF0YShfZGVzY3JpcHRvciwgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIF9hY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMsIF9lbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5Ecm9wQWdncmVnYXRvciA9IERyb3BBZ2dyZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RHJvcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGlzdG9ncmFtQWdncmVnYXRvciA9IGV4cG9ydHMuSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgTWV0cmljRGF0YV8xID0gcmVxdWlyZShcIi4uL2V4cG9ydC9NZXRyaWNEYXRhXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZU5ld0VtcHR5Q2hlY2twb2ludChib3VuZGFyaWVzKSB7XG4gICAgY29uc3QgY291bnRzID0gYm91bmRhcmllcy5tYXAoKCkgPT4gMCk7XG4gICAgY291bnRzLnB1c2goMCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgYm91bmRhcmllcyxcbiAgICAgICAgICAgIGNvdW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgc3VtOiAwLFxuICAgICAgICBjb3VudDogMCxcbiAgICAgICAgaGFzTWluTWF4OiBmYWxzZSxcbiAgICAgICAgbWluOiBJbmZpbml0eSxcbiAgICAgICAgbWF4OiAtSW5maW5pdHksXG4gICAgfTtcbn1cbmNsYXNzIEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9ib3VuZGFyaWVzO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgX2N1cnJlbnQ7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBfYm91bmRhcmllcywgX3JlY29yZE1pbk1heCA9IHRydWUsIF9jdXJyZW50ID0gY3JlYXRlTmV3RW1wdHlDaGVja3BvaW50KF9ib3VuZGFyaWVzKSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5fYm91bmRhcmllcyA9IF9ib3VuZGFyaWVzO1xuICAgICAgICB0aGlzLl9yZWNvcmRNaW5NYXggPSBfcmVjb3JkTWluTWF4O1xuICAgICAgICB0aGlzLl9jdXJyZW50ID0gX2N1cnJlbnQ7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICAvLyBOYU4gZG9lcyBub3QgZmFsbCBpbnRvIGFueSBidWNrZXQsIGlzIG5vdCB6ZXJvIGFuZCBzaG91bGQgbm90IGJlIGNvdW50ZWQsXG4gICAgICAgIC8vIE5hTiBpcyBuZXZlciBncmVhdGVyIHRoYW4gbWF4IG5vciBsZXNzIHRoYW4gbWluLCB0aGVyZWZvcmUgcmV0dXJuIGFzIHRoZXJlJ3Mgbm90aGluZyBmb3IgdXMgdG8gZG8uXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudC5jb3VudCArPSAxO1xuICAgICAgICB0aGlzLl9jdXJyZW50LnN1bSArPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3JlY29yZE1pbk1heCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5taW4gPSBNYXRoLm1pbih2YWx1ZSwgdGhpcy5fY3VycmVudC5taW4pO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5tYXggPSBNYXRoLm1heCh2YWx1ZSwgdGhpcy5fY3VycmVudC5tYXgpO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5oYXNNaW5NYXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9ICgwLCB1dGlsc18xLmJpbmFyeVNlYXJjaFVCKSh0aGlzLl9ib3VuZGFyaWVzLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQuYnVja2V0cy5jb3VudHNbaWR4XSArPSAxO1xuICAgIH1cbiAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKSB7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICAgIH1cbiAgICB0b1BvaW50VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICAgIH1cbn1cbmV4cG9ydHMuSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gSGlzdG9ncmFtQWNjdW11bGF0aW9uO1xuLyoqXG4gKiBCYXNpYyBhZ2dyZWdhdG9yIHdoaWNoIG9ic2VydmVzIGV2ZW50cyBhbmQgY291bnRzIHRoZW0gaW4gcHJlLWRlZmluZWQgYnVja2V0c1xuICogYW5kIHByb3ZpZGVzIHRoZSB0b3RhbCBzdW0gYW5kIGNvdW50IG9mIGFsbCBvYnNlcnZhdGlvbnMuXG4gKi9cbmNsYXNzIEhpc3RvZ3JhbUFnZ3JlZ2F0b3Ige1xuICAgIF9ib3VuZGFyaWVzO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAga2luZCA9IHR5cGVzXzEuQWdncmVnYXRvcktpbmQuSElTVE9HUkFNO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBfYm91bmRhcmllcyBzb3J0ZWQgdXBwZXIgYm91bmRzIG9mIHJlY29yZGVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gX3JlY29yZE1pbk1heCBJZiBzZXQgdG8gdHJ1ZSwgbWluIGFuZCBtYXggd2lsbCBiZSByZWNvcmRlZC4gT3RoZXJ3aXNlLCBtaW4gYW5kIG1heCB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfYm91bmRhcmllcywgX3JlY29yZE1pbk1heCkge1xuICAgICAgICB0aGlzLl9ib3VuZGFyaWVzID0gX2JvdW5kYXJpZXM7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbihzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW1BY2N1bXVsYXRpb24oc3RhcnRUaW1lLCB0aGlzLl9ib3VuZGFyaWVzLCB0aGlzLl9yZWNvcmRNaW5NYXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2Ugb2YgdHdvIGhpc3RvZ3JhbSBhY2N1bXVsYXRpb25zLiBBcyBsb25nIGFzIG9uZSBBZ2dyZWdhdG9yXG4gICAgICogaW5zdGFuY2UgcHJvZHVjZXMgYWxsIEFjY3VtdWxhdGlvbnMgd2l0aCBjb25zdGFudCBib3VuZGFyaWVzIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXRcbiAgICAgKiBtZXJnaW5nIGFjY3VtdWxhdGlvbnMgd2l0aCBkaWZmZXJlbnQgYm91bmRhcmllcy5cbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cywgZGVsdGEpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBkZWx0YVZhbHVlID0gZGVsdGEudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ291bnRzID0gcHJldmlvdXNWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgZGVsdGFDb3VudHMgPSBkZWx0YVZhbHVlLmJ1Y2tldHMuY291bnRzO1xuICAgICAgICBjb25zdCBtZXJnZWRDb3VudHMgPSBuZXcgQXJyYXkocHJldmlvdXNDb3VudHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgcHJldmlvdXNDb3VudHMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgbWVyZ2VkQ291bnRzW2lkeF0gPSBwcmV2aW91c0NvdW50c1tpZHhdICsgZGVsdGFDb3VudHNbaWR4XTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXggPSAtSW5maW5pdHk7XG4gICAgICAgIGlmICh0aGlzLl9yZWNvcmRNaW5NYXgpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmhhc01pbk1heCAmJiBkZWx0YVZhbHVlLmhhc01pbk1heCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKHByZXZpb3VzVmFsdWUubWluLCBkZWx0YVZhbHVlLm1pbik7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgocHJldmlvdXNWYWx1ZS5tYXgsIGRlbHRhVmFsdWUubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByZXZpb3VzVmFsdWUuaGFzTWluTWF4KSB7XG4gICAgICAgICAgICAgICAgbWluID0gcHJldmlvdXNWYWx1ZS5taW47XG4gICAgICAgICAgICAgICAgbWF4ID0gcHJldmlvdXNWYWx1ZS5tYXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkZWx0YVZhbHVlLmhhc01pbk1heCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IGRlbHRhVmFsdWUubWluO1xuICAgICAgICAgICAgICAgIG1heCA9IGRlbHRhVmFsdWUubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSGlzdG9ncmFtQWNjdW11bGF0aW9uKHByZXZpb3VzLnN0YXJ0VGltZSwgcHJldmlvdXNWYWx1ZS5idWNrZXRzLmJvdW5kYXJpZXMsIHRoaXMuX3JlY29yZE1pbk1heCwge1xuICAgICAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXM6IHByZXZpb3VzVmFsdWUuYnVja2V0cy5ib3VuZGFyaWVzLFxuICAgICAgICAgICAgICAgIGNvdW50czogbWVyZ2VkQ291bnRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiBwcmV2aW91c1ZhbHVlLmNvdW50ICsgZGVsdGFWYWx1ZS5jb3VudCxcbiAgICAgICAgICAgIHN1bTogcHJldmlvdXNWYWx1ZS5zdW0gKyBkZWx0YVZhbHVlLnN1bSxcbiAgICAgICAgICAgIGhhc01pbk1heDogdGhpcy5fcmVjb3JkTWluTWF4ICYmXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzVmFsdWUuaGFzTWluTWF4IHx8IGRlbHRhVmFsdWUuaGFzTWluTWF4KSxcbiAgICAgICAgICAgIG1pbjogbWluLFxuICAgICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IERFTFRBIGFnZ3JlZ2F0aW9uIGJ5IGNvbXBhcmluZyB0d28gY3VtdWxhdGl2ZSBtZWFzdXJlbWVudHMuXG4gICAgICovXG4gICAgZGlmZihwcmV2aW91cywgY3VycmVudCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXMudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnQudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ291bnRzID0gcHJldmlvdXNWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50cyA9IGN1cnJlbnRWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgZGlmZmVkQ291bnRzID0gbmV3IEFycmF5KHByZXZpb3VzQ291bnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHByZXZpb3VzQ291bnRzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGRpZmZlZENvdW50c1tpZHhdID0gY3VycmVudENvdW50c1tpZHhdIC0gcHJldmlvdXNDb3VudHNbaWR4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbUFjY3VtdWxhdGlvbihjdXJyZW50LnN0YXJ0VGltZSwgcHJldmlvdXNWYWx1ZS5idWNrZXRzLmJvdW5kYXJpZXMsIHRoaXMuX3JlY29yZE1pbk1heCwge1xuICAgICAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXM6IHByZXZpb3VzVmFsdWUuYnVja2V0cy5ib3VuZGFyaWVzLFxuICAgICAgICAgICAgICAgIGNvdW50czogZGlmZmVkQ291bnRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiBjdXJyZW50VmFsdWUuY291bnQgLSBwcmV2aW91c1ZhbHVlLmNvdW50LFxuICAgICAgICAgICAgc3VtOiBjdXJyZW50VmFsdWUuc3VtIC0gcHJldmlvdXNWYWx1ZS5zdW0sXG4gICAgICAgICAgICBoYXNNaW5NYXg6IGZhbHNlLFxuICAgICAgICAgICAgbWluOiBJbmZpbml0eSxcbiAgICAgICAgICAgIG1heDogLUluZmluaXR5LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9NZXRyaWNEYXRhKGRlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcywgZW5kVGltZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICBkYXRhUG9pbnRUeXBlOiBNZXRyaWNEYXRhXzEuRGF0YVBvaW50VHlwZS5ISVNUT0dSQU0sXG4gICAgICAgICAgICBkYXRhUG9pbnRzOiBhY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMubWFwKChbYXR0cmlidXRlcywgYWNjdW11bGF0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VmFsdWUgPSBhY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIGluc3RydW1lbnQgYWxsb3dzIG5lZ2F0aXZlIHZhbHVlcy5cbiAgICAgICAgICAgICAgICBjb25zdCBhbGxvd3NOZWdhdGl2ZVZhbHVlcyA9IGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkdBVUdFIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUiB8fFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnR5cGUgPT09IE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogYWNjdW11bGF0aW9uLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kVGltZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogcG9pbnRWYWx1ZS5oYXNNaW5NYXggPyBwb2ludFZhbHVlLm1pbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogcG9pbnRWYWx1ZS5oYXNNaW5NYXggPyBwb2ludFZhbHVlLm1heCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bTogIWFsbG93c05lZ2F0aXZlVmFsdWVzID8gcG9pbnRWYWx1ZS5zdW0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRzOiBwb2ludFZhbHVlLmJ1Y2tldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudDogcG9pbnRWYWx1ZS5jb3VudCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5IaXN0b2dyYW1BZ2dyZWdhdG9yID0gSGlzdG9ncmFtQWdncmVnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhpc3RvZ3JhbS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CdWNrZXRzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNsYXNzIEJ1Y2tldHMge1xuICAgIGJhY2tpbmc7XG4gICAgaW5kZXhCYXNlO1xuICAgIGluZGV4U3RhcnQ7XG4gICAgaW5kZXhFbmQ7XG4gICAgLyoqXG4gICAgICogVGhlIHRlcm0gaW5kZXggcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgdGhlIGV4cG9uZW50aWFsIGhpc3RvZ3JhbSBidWNrZXRcbiAgICAgKiB1c2VkIHRvIGRldGVybWluZSBpdHMgYm91bmRhcmllcy4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIGEgYnVja2V0IGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSBiYXNlICoqIGluZGV4IGFuZCB0aGUgdXBwZXIgYm91bmRhcnkgb2YgYSBidWNrZXQgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IGJhc2UgKiogKGluZGV4ICsgMSkuIGluZGV4IHZhbHVlcyBhcmUgc2lnbmVkIHRvIGFjY291bnRcbiAgICAgKiBmb3IgdmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxLlxuICAgICAqXG4gICAgICogaW5kZXhCYXNlIGlzIHRoZSBpbmRleCBvZiB0aGUgMHRoIHBvc2l0aW9uIGluIHRoZVxuICAgICAqIGJhY2tpbmcgYXJyYXksIGkuZS4sIGJhY2tpbmdbMF0gaXMgdGhlIGNvdW50XG4gICAgICogaW4gdGhlIGJ1Y2tldCB3aXRoIGluZGV4IGBpbmRleEJhc2VgLlxuICAgICAqXG4gICAgICogaW5kZXhTdGFydCBpcyB0aGUgc21hbGxlc3QgaW5kZXggdmFsdWUgcmVwcmVzZW50ZWRcbiAgICAgKiBpbiB0aGUgYmFja2luZyBhcnJheS5cbiAgICAgKlxuICAgICAqIGluZGV4RW5kIGlzIHRoZSBsYXJnZXN0IGluZGV4IHZhbHVlIHJlcHJlc2VudGVkIGluXG4gICAgICogdGhlIGJhY2tpbmcgYXJyYXkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYmFja2luZyA9IG5ldyBCdWNrZXRzQmFja2luZygpLCBpbmRleEJhc2UgPSAwLCBpbmRleFN0YXJ0ID0gMCwgaW5kZXhFbmQgPSAwKSB7XG4gICAgICAgIHRoaXMuYmFja2luZyA9IGJhY2tpbmc7XG4gICAgICAgIHRoaXMuaW5kZXhCYXNlID0gaW5kZXhCYXNlO1xuICAgICAgICB0aGlzLmluZGV4U3RhcnQgPSBpbmRleFN0YXJ0O1xuICAgICAgICB0aGlzLmluZGV4RW5kID0gaW5kZXhFbmQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9mZnNldCBpcyB0aGUgYnVja2V0IGluZGV4IG9mIHRoZSBzbWFsbGVzdCBlbnRyeSBpbiB0aGUgY291bnRzIGFycmF5XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgb2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleFN0YXJ0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCdWNrZXRzIGlzIGEgdmlldyBpbnRvIHRoZSBiYWNraW5nIGFycmF5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYmFja2luZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV4RW5kID09PSB0aGlzLmluZGV4U3RhcnQgJiYgdGhpcy5hdCgwKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhFbmQgLSB0aGlzLmluZGV4U3RhcnQgKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb3VudHMsIHdoZXJlIGNvdW50W2ldIGNhcnJpZXMgdGhlIGNvdW50XG4gICAgICogb2YgdGhlIGJ1Y2tldCBhdCBpbmRleCAob2Zmc2V0K2kpLiAgY291bnRbaV0gaXMgdGhlIGNvdW50IG9mXG4gICAgICogdmFsdWVzIGdyZWF0ZXIgdGhhbiBiYXNlXihvZmZzZXQraSkgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqIGJhc2VeKG9mZnNldCtpKzEpLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBsb2dpY2FsIGNvdW50cyBiYXNlZCBvbiB0aGUgYmFja2luZyBhcnJheVxuICAgICAqL1xuICAgIGNvdW50cygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0sIChfLCBpKSA9PiB0aGlzLmF0KGkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXQgcmV0dXJucyB0aGUgY291bnQgb2YgdGhlIGJ1Y2tldCBhdCBhIHBvc2l0aW9uIGluIHRoZSBsb2dpY2FsXG4gICAgICogYXJyYXkgb2YgY291bnRzLlxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgYXQocG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgYmlhcyA9IHRoaXMuaW5kZXhCYXNlIC0gdGhpcy5pbmRleFN0YXJ0O1xuICAgICAgICBpZiAocG9zaXRpb24gPCBiaWFzKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSB0aGlzLmJhY2tpbmcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9uIC09IGJpYXM7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tpbmcuY291bnRBdChwb3NpdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGluY3JlbWVudEJ1Y2tldCBpbmNyZW1lbnRzIHRoZSBiYWNraW5nIGFycmF5IGluZGV4IGJ5IGBpbmNyZW1lbnRgXG4gICAgICogQHBhcmFtIGJ1Y2tldEluZGV4XG4gICAgICogQHBhcmFtIGluY3JlbWVudFxuICAgICAqL1xuICAgIGluY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgaW5jcmVtZW50KSB7XG4gICAgICAgIHRoaXMuYmFja2luZy5pbmNyZW1lbnQoYnVja2V0SW5kZXgsIGluY3JlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGRlY3JlbWVudEJ1Y2tldCBkZWNyZW1lbnRzIHRoZSBiYWNraW5nIGFycmF5IGluZGV4IGJ5IGBkZWNyZW1lbnRgXG4gICAgICogaWYgZGVjcmVtZW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSwgaXQncyBzZXQgdG8gMC5cbiAgICAgKiBAcGFyYW0gYnVja2V0SW5kZXhcbiAgICAgKiBAcGFyYW0gZGVjcmVtZW50XG4gICAgICovXG4gICAgZGVjcmVtZW50QnVja2V0KGJ1Y2tldEluZGV4LCBkZWNyZW1lbnQpIHtcbiAgICAgICAgdGhpcy5iYWNraW5nLmRlY3JlbWVudChidWNrZXRJbmRleCwgZGVjcmVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJpbSByZW1vdmVzIGxlYWRpbmcgYW5kIC8gb3IgdHJhaWxpbmcgemVybyBidWNrZXRzICh3aGljaCBjYW4gb2NjdXJcbiAgICAgKiBhZnRlciBkaWZmaW5nIHR3byBoaXN0b3MpIGFuZCByb3RhdGVzIHRoZSBiYWNraW5nIGFycmF5IHNvIHRoYXQgdGhlXG4gICAgICogc21hbGxlc3Qgbm9uLXplcm8gaW5kZXggaXMgaW4gdGhlIDB0aCBwb3NpdGlvbiBvZiB0aGUgYmFja2luZyBhcnJheVxuICAgICAqL1xuICAgIHRyaW0oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXQoaSkgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4U3RhcnQgKz0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIC8vdGhlIGVudGlyZSBhcnJheSBpcyB6ZXJvZWQgb3V0XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleFN0YXJ0ID0gdGhpcy5pbmRleEVuZCA9IHRoaXMuaW5kZXhCYXNlID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0KGkpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEVuZCAtPSB0aGlzLmxlbmd0aCAtIGkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JvdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkb3duc2NhbGUgZmlyc3Qgcm90YXRlcywgdGhlbiBjb2xsYXBzZXMgMioqYGJ5YC10by0xIGJ1Y2tldHMuXG4gICAgICogQHBhcmFtIGJ5XG4gICAgICovXG4gICAgZG93bnNjYWxlKGJ5KSB7XG4gICAgICAgIHRoaXMuX3JvdGF0ZSgpO1xuICAgICAgICBjb25zdCBzaXplID0gMSArIHRoaXMuaW5kZXhFbmQgLSB0aGlzLmluZGV4U3RhcnQ7XG4gICAgICAgIGNvbnN0IGVhY2ggPSAxIDw8IGJ5O1xuICAgICAgICBsZXQgaW5wb3MgPSAwO1xuICAgICAgICBsZXQgb3V0cG9zID0gMDtcbiAgICAgICAgZm9yIChsZXQgcG9zID0gdGhpcy5pbmRleFN0YXJ0OyBwb3MgPD0gdGhpcy5pbmRleEVuZDspIHtcbiAgICAgICAgICAgIGxldCBtb2QgPSBwb3MgJSBlYWNoO1xuICAgICAgICAgICAgaWYgKG1vZCA8IDApIHtcbiAgICAgICAgICAgICAgICBtb2QgKz0gZWFjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBtb2Q7IGkgPCBlYWNoICYmIGlucG9zIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2NhdGVCdWNrZXQob3V0cG9zLCBpbnBvcyk7XG4gICAgICAgICAgICAgICAgaW5wb3MrKztcbiAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXhTdGFydCA+Pj0gYnk7XG4gICAgICAgIHRoaXMuaW5kZXhFbmQgPj49IGJ5O1xuICAgICAgICB0aGlzLmluZGV4QmFzZSA9IHRoaXMuaW5kZXhTdGFydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBCdWNrZXRzXG4gICAgICogQHJldHVybnMge0J1Y2tldHN9XG4gICAgICovXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQnVja2V0cyh0aGlzLmJhY2tpbmcuY2xvbmUoKSwgdGhpcy5pbmRleEJhc2UsIHRoaXMuaW5kZXhTdGFydCwgdGhpcy5pbmRleEVuZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9yb3RhdGUgc2hpZnRzIHRoZSBiYWNraW5nIGFycmF5IGNvbnRlbnRzIHNvIHRoYXQgaW5kZXhTdGFydCA9PVxuICAgICAqIGluZGV4QmFzZSB0byBzaW1wbGlmeSB0aGUgZG93bnNjYWxlIGxvZ2ljLlxuICAgICAqL1xuICAgIF9yb3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGJpYXMgPSB0aGlzLmluZGV4QmFzZSAtIHRoaXMuaW5kZXhTdGFydDtcbiAgICAgICAgaWYgKGJpYXMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaWFzID4gMCkge1xuICAgICAgICAgICAgdGhpcy5iYWNraW5nLnJldmVyc2UoMCwgdGhpcy5iYWNraW5nLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tpbmcucmV2ZXJzZSgwLCBiaWFzKTtcbiAgICAgICAgICAgIHRoaXMuYmFja2luZy5yZXZlcnNlKGJpYXMsIHRoaXMuYmFja2luZy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbmVnYXRpdmUgYmlhcywgdGhpcyBjYW4gaGFwcGVuIHdoZW4gZGlmZmluZyB0d28gaGlzdG9ncmFtc1xuICAgICAgICAgICAgdGhpcy5iYWNraW5nLnJldmVyc2UoMCwgdGhpcy5iYWNraW5nLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tpbmcucmV2ZXJzZSgwLCB0aGlzLmJhY2tpbmcubGVuZ3RoICsgYmlhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleEJhc2UgPSB0aGlzLmluZGV4U3RhcnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9yZWxvY2F0ZUJ1Y2tldCBhZGRzIHRoZSBjb3VudCBpbiBjb3VudHNbc3JjXSB0byBjb3VudHNbZGVzdF0gYW5kXG4gICAgICogcmVzZXRzIGNvdW50W3NyY10gdG8gemVyby5cbiAgICAgKi9cbiAgICBfcmVsb2NhdGVCdWNrZXQoZGVzdCwgc3JjKSB7XG4gICAgICAgIGlmIChkZXN0ID09PSBzcmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudEJ1Y2tldChkZXN0LCB0aGlzLmJhY2tpbmcuZW1wdHlCdWNrZXQoc3JjKSk7XG4gICAgfVxufVxuZXhwb3J0cy5CdWNrZXRzID0gQnVja2V0cztcbi8qKlxuICogQnVja2V0c0JhY2tpbmcgaG9sZHMgdGhlIHJhdyBidWNrZXRzIGFuZCBzb21lIHV0aWxpdHkgbWV0aG9kcyB0b1xuICogbWFuYWdlIHRoZW0uXG4gKi9cbmNsYXNzIEJ1Y2tldHNCYWNraW5nIHtcbiAgICBfY291bnRzO1xuICAgIGNvbnN0cnVjdG9yKF9jb3VudHMgPSBbMF0pIHtcbiAgICAgICAgdGhpcy5fY291bnRzID0gX2NvdW50cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogbGVuZ3RoIHJldHVybnMgdGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGJhY2tpbmcgYXJyYXksIHdoaWNoXG4gICAgICogaXMgPj0gYnVja2V0cy5sZW5ndGgoKVxuICAgICAqL1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudHMubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb3VudEF0IHJldHVybnMgdGhlIGNvdW50IGluIGEgc3BlY2lmaWMgYnVja2V0XG4gICAgICovXG4gICAgY291bnRBdChwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdW50c1twb3NdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBncm93VG8gZ3Jvd3MgYSBiYWNraW5nIGFycmF5IGFuZCBjb3BpZXMgb2xkIGVudHJpZXNcbiAgICAgKiBpbnRvIHRoZWlyIGNvcnJlY3QgbmV3IHBvc2l0aW9ucy5cbiAgICAgKi9cbiAgICBncm93VG8obmV3U2l6ZSwgb2xkUG9zaXRpdmVMaW1pdCwgbmV3UG9zaXRpdmVMaW1pdCkge1xuICAgICAgICBjb25zdCB0bXAgPSBuZXcgQXJyYXkobmV3U2l6ZSkuZmlsbCgwKTtcbiAgICAgICAgdG1wLnNwbGljZShuZXdQb3NpdGl2ZUxpbWl0LCB0aGlzLl9jb3VudHMubGVuZ3RoIC0gb2xkUG9zaXRpdmVMaW1pdCwgLi4udGhpcy5fY291bnRzLnNsaWNlKG9sZFBvc2l0aXZlTGltaXQpKTtcbiAgICAgICAgdG1wLnNwbGljZSgwLCBvbGRQb3NpdGl2ZUxpbWl0LCAuLi50aGlzLl9jb3VudHMuc2xpY2UoMCwgb2xkUG9zaXRpdmVMaW1pdCkpO1xuICAgICAgICB0aGlzLl9jb3VudHMgPSB0bXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHJldmVyc2UgdGhlIGl0ZW1zIGluIHRoZSBiYWNraW5nIGFycmF5IGluIHRoZSByYW5nZSBbZnJvbSwgbGltaXQpLlxuICAgICAqL1xuICAgIHJldmVyc2UoZnJvbSwgbGltaXQpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTWF0aC5mbG9vcigoZnJvbSArIGxpbWl0KSAvIDIpIC0gZnJvbTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fY291bnRzW2Zyb20gKyBpXTtcbiAgICAgICAgICAgIHRoaXMuX2NvdW50c1tmcm9tICsgaV0gPSB0aGlzLl9jb3VudHNbbGltaXQgLSBpIC0gMV07XG4gICAgICAgICAgICB0aGlzLl9jb3VudHNbbGltaXQgLSBpIC0gMV0gPSB0bXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogZW1wdHlCdWNrZXQgZW1wdGllcyB0aGUgY291bnQgZnJvbSBhIGJ1Y2tldCwgZm9yXG4gICAgICogbW92aW5nIGludG8gYW5vdGhlci5cbiAgICAgKi9cbiAgICBlbXB0eUJ1Y2tldChzcmMpIHtcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fY291bnRzW3NyY107XG4gICAgICAgIHRoaXMuX2NvdW50c1tzcmNdID0gMDtcbiAgICAgICAgcmV0dXJuIHRtcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogaW5jcmVtZW50cyBhIGJ1Y2tldCBieSBgaW5jcmVtZW50YFxuICAgICAqL1xuICAgIGluY3JlbWVudChidWNrZXRJbmRleCwgaW5jcmVtZW50KSB7XG4gICAgICAgIHRoaXMuX2NvdW50c1tidWNrZXRJbmRleF0gKz0gaW5jcmVtZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkZWNyZW1lbnRzIGEgYnVja2V0IGJ5IGBkZWNyZW1lbnRgXG4gICAgICovXG4gICAgZGVjcmVtZW50KGJ1Y2tldEluZGV4LCBkZWNyZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50c1tidWNrZXRJbmRleF0gPj0gZGVjcmVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb3VudHNbYnVja2V0SW5kZXhdIC09IGRlY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSdyZSBiZWluZyBkZWZlbnNpdmUgYWdhaW5zdFxuICAgICAgICAgICAgLy8gbmVnYXRpdmUgY291bnRzLlxuICAgICAgICAgICAgdGhpcy5fY291bnRzW2J1Y2tldEluZGV4XSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBCdWNrZXRzQmFja2luZ1xuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1Y2tldHNCYWNraW5nKFsuLi50aGlzLl9jb3VudHNdKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdWNrZXRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaWduaWZpY2FuZCA9IGV4cG9ydHMuZ2V0Tm9ybWFsQmFzZTIgPSBleHBvcnRzLk1JTl9WQUxVRSA9IGV4cG9ydHMuTUFYX05PUk1BTF9FWFBPTkVOVCA9IGV4cG9ydHMuTUlOX05PUk1BTF9FWFBPTkVOVCA9IGV4cG9ydHMuU0lHTklGSUNBTkRfV0lEVEggPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyBpbiB0aGlzIGZpbGUgYWxsb3cgdXMgdG8gaW50ZXJhY3RcbiAqIHdpdGggdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIElFRUUgNjQtYml0IGZsb2F0aW5nIHBvaW50XG4gKiBudW1iZXIuIFdlIG5lZWQgdG8gd29yayB3aXRoIGFsbCA2NC1iaXRzLCB0aHVzLCBjYXJlIG5lZWRzIHRvIGJlXG4gKiB0YWtlbiB3aGVuIHdvcmtpbmcgd2l0aCBKYXZhc2NyaXB0J3MgYml0d2lzZSBvcGVyYXRvcnMgKDw8LCA+PiwgJixcbiAqIHwsIGV0YykgYXMgdGhleSB0cnVuY2F0ZSBvcGVyYW5kcyB0byAzMi1iaXRzLiBJbiBvcmRlciB0byB3b3JrIGFyb3VuZFxuICogdGhpcyB3ZSB3b3JrIHdpdGggdGhlIDY0LWJpdHMgYXMgdHdvIDMyLWJpdCBoYWx2ZXMsIHBlcmZvcm0gYml0d2lzZVxuICogb3BlcmF0aW9ucyBvbiB0aGVtIGluZGVwZW5kZW50bHksIGFuZCBjb21iaW5lIHRoZSByZXN1bHRzIChpZiBuZWVkZWQpLlxuICovXG5leHBvcnRzLlNJR05JRklDQU5EX1dJRFRIID0gNTI7XG4vKipcbiAqIEVYUE9ORU5UX01BU0sgaXMgc2V0IHRvIDEgZm9yIHRoZSBoaSAzMi1iaXRzIG9mIGFuIElFRUUgNzU0XG4gKiBmbG9hdGluZyBwb2ludCBleHBvbmVudDogMHg3ZmYwMDAwMC5cbiAqL1xuY29uc3QgRVhQT05FTlRfTUFTSyA9IDB4N2ZmMDAwMDA7XG4vKipcbiAqIFNJR05JRklDQU5EX01BU0sgaXMgdGhlIG1hc2sgZm9yIHRoZSBzaWduaWZpY2FuZCBwb3J0aW9uIG9mIHRoZSBoaSAzMi1iaXRzXG4gKiBvZiBhbiBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlOiAweGZmZmZmXG4gKi9cbmNvbnN0IFNJR05JRklDQU5EX01BU0sgPSAweGZmZmZmO1xuLyoqXG4gKiBFWFBPTkVOVF9CSUFTIGlzIHRoZSBleHBvbmVudCBiaWFzIHNwZWNpZmllZCBmb3IgZW5jb2RpbmdcbiAqIHRoZSBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IGV4cG9uZW50OiAxMDIzXG4gKi9cbmNvbnN0IEVYUE9ORU5UX0JJQVMgPSAxMDIzO1xuLyoqXG4gKiBNSU5fTk9STUFMX0VYUE9ORU5UIGlzIHRoZSBtaW5pbXVtIGV4cG9uZW50IG9mIGEgbm9ybWFsaXplZFxuICogZmxvYXRpbmcgcG9pbnQ6IC0xMDIyLlxuICovXG5leHBvcnRzLk1JTl9OT1JNQUxfRVhQT05FTlQgPSAtRVhQT05FTlRfQklBUyArIDE7XG4vKipcbiAqIE1BWF9OT1JNQUxfRVhQT05FTlQgaXMgdGhlIG1heGltdW0gZXhwb25lbnQgb2YgYSBub3JtYWxpemVkXG4gKiBmbG9hdGluZyBwb2ludDogMTAyMy5cbiAqL1xuZXhwb3J0cy5NQVhfTk9STUFMX0VYUE9ORU5UID0gRVhQT05FTlRfQklBUztcbi8qKlxuICogTUlOX1ZBTFVFIGlzIHRoZSBzbWFsbGVzdCBub3JtYWwgbnVtYmVyXG4gKi9cbmV4cG9ydHMuTUlOX1ZBTFVFID0gTWF0aC5wb3coMiwgLTEwMjIpO1xuLyoqXG4gKiBnZXROb3JtYWxCYXNlMiBleHRyYWN0cyB0aGUgbm9ybWFsaXplZCBiYXNlLTIgZnJhY3Rpb25hbCBleHBvbmVudC5cbiAqIFRoaXMgcmV0dXJucyBrIGZvciB0aGUgZXF1YXRpb24gZiB4IDIqKmsgd2hlcmUgZiBpc1xuICogaW4gdGhlIHJhbmdlIFsxLCAyKS4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZm9yXG4gKiBzdWJub3JtYWwgbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgbm9ybWFsaXplZCBiYXNlLTIgZnJhY3Rpb25hbFxuICogICAgZXhwb25lbnQgZm9yXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgbm9ybWFsaXplZCBiYXNlLTIgZXhwb25lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9ybWFsQmFzZTIodmFsdWUpIHtcbiAgICBjb25zdCBkdiA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpO1xuICAgIGR2LnNldEZsb2F0NjQoMCwgdmFsdWUpO1xuICAgIC8vIGFjY2VzcyB0aGUgcmF3IDY0LWJpdCBmbG9hdCBhcyAzMi1iaXQgdWludHNcbiAgICBjb25zdCBoaUJpdHMgPSBkdi5nZXRVaW50MzIoMCk7XG4gICAgY29uc3QgZXhwQml0cyA9IChoaUJpdHMgJiBFWFBPTkVOVF9NQVNLKSA+PiAyMDtcbiAgICByZXR1cm4gZXhwQml0cyAtIEVYUE9ORU5UX0JJQVM7XG59XG5leHBvcnRzLmdldE5vcm1hbEJhc2UyID0gZ2V0Tm9ybWFsQmFzZTI7XG4vKipcbiAqIEdldFNpZ25pZmljYW5kIHJldHVybnMgdGhlIDUyIGJpdCAodW5zaWduZWQpIHNpZ25pZmljYW5kIGFzIGEgc2lnbmVkIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBleHRyYWN0IHRoZSBzaWduaWZpY2FuZCBmcm9tXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgNTItYml0IHNpZ25pZmljYW5kXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25pZmljYW5kKHZhbHVlKSB7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcbiAgICBkdi5zZXRGbG9hdDY0KDAsIHZhbHVlKTtcbiAgICAvLyBhY2Nlc3MgdGhlIHJhdyA2NC1iaXQgZmxvYXQgYXMgdHdvIDMyLWJpdCB1aW50c1xuICAgIGNvbnN0IGhpQml0cyA9IGR2LmdldFVpbnQzMigwKTtcbiAgICBjb25zdCBsb0JpdHMgPSBkdi5nZXRVaW50MzIoNCk7XG4gICAgLy8gZXh0cmFjdCB0aGUgc2lnbmlmaWNhbmQgYml0cyBmcm9tIHRoZSBoaSBiaXRzIGFuZCBsZWZ0IHNoaWZ0IDMyIHBsYWNlcyBub3RlOlxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgbmF0aXZlIDw8IG9wZXJhdG9yIGFzIGl0IHdpbGwgdHJ1bmNhdGUgdGhlIHJlc3VsdCB0byAzMi1iaXRzXG4gICAgY29uc3Qgc2lnbmlmaWNhbmRIaUJpdHMgPSAoaGlCaXRzICYgU0lHTklGSUNBTkRfTUFTSykgKiBNYXRoLnBvdygyLCAzMik7XG4gICAgLy8gY29tYmluZSB0aGUgaGkgYW5kIGxvIGJpdHMgYW5kIHJldHVyblxuICAgIHJldHVybiBzaWduaWZpY2FuZEhpQml0cyArIGxvQml0cztcbn1cbmV4cG9ydHMuZ2V0U2lnbmlmaWNhbmQgPSBnZXRTaWduaWZpY2FuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWllZWU3NTQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5leHRHcmVhdGVyU3F1YXJlID0gZXhwb3J0cy5sZGV4cCA9IHZvaWQgMDtcbi8qKlxuICogTm90ZTogb3RoZXIgbGFuZ3VhZ2VzIHByb3ZpZGUgdGhpcyBhcyBhIGJ1aWx0IGluIGZ1bmN0aW9uLiBUaGlzIGlzXG4gKiBhIG5haXZlLCBidXQgZnVuY3Rpb25hbGx5IGNvcnJlY3QgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdXNlZCBzcGFyaW5nbHksXG4gKiB3aGVuIGNyZWF0aW5nIGEgbmV3IG1hcHBpbmcgaW4gYSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuICpcbiAqIGxkZXhwIHJldHVybnMgZnJhYyDDlyAyKipleHAuIFdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNhc2VzOlxuICogICBsZGV4cCjCsTAsIGV4cCkgPSDCsTBcbiAqICAgbGRleHAowrFJbmYsIGV4cCkgPSDCsUluZlxuICogICBsZGV4cChOYU4sIGV4cCkgPSBOYU5cbiAqIEBwYXJhbSBmcmFjXG4gKiBAcGFyYW0gZXhwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBsZGV4cChmcmFjLCBleHApIHtcbiAgICBpZiAoZnJhYyA9PT0gMCB8fFxuICAgICAgICBmcmFjID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICAgICAgZnJhYyA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIHx8XG4gICAgICAgIE51bWJlci5pc05hTihmcmFjKSkge1xuICAgICAgICByZXR1cm4gZnJhYztcbiAgICB9XG4gICAgcmV0dXJuIGZyYWMgKiBNYXRoLnBvdygyLCBleHApO1xufVxuZXhwb3J0cy5sZGV4cCA9IGxkZXhwO1xuLyoqXG4gKiBDb21wdXRlcyB0aGUgbmV4dCBwb3dlciBvZiB0d28gdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdi5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSBlZmZpY2llbnQgdGhhbiwgYnV0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50XG4gKiB0byBNYXRoLnBvdygyLCBNYXRoLmNlaWwoTWF0aC5sb2coeCkvTWF0aC5sb2coMikpKS5cbiAqIEBwYXJhbSB2XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBuZXh0R3JlYXRlclNxdWFyZSh2KSB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGNvbXB1dGVzIHRoZSBsZWFzdCBwb3dlci1vZi10d29cbiAgICAvLyB0aGF0IGlzID49IHYuICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgdHJpY2t5IHdheXMgdG9cbiAgICAvLyBkbyB0aGlzLCBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDY2MjA0L3JvdW5kaW5nLXVwLXRvLW5leHQtcG93ZXItb2YtMlxuICAgIHYtLTtcbiAgICB2IHw9IHYgPj4gMTtcbiAgICB2IHw9IHYgPj4gMjtcbiAgICB2IHw9IHYgPj4gNDtcbiAgICB2IHw9IHYgPj4gODtcbiAgICB2IHw9IHYgPj4gMTY7XG4gICAgdisrO1xuICAgIHJldHVybiB2O1xufVxuZXhwb3J0cy5uZXh0R3JlYXRlclNxdWFyZSA9IG5leHRHcmVhdGVyU3F1YXJlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NYXBwaW5nRXJyb3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY2xhc3MgTWFwcGluZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZXhwb3J0cy5NYXBwaW5nRXJyb3IgPSBNYXBwaW5nRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FeHBvbmVudE1hcHBpbmcgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgaWVlZTc1NCA9IHJlcXVpcmUoXCIuL2llZWU3NTRcIik7XG5jb25zdCB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG4vKipcbiAqIEV4cG9uZW50TWFwcGluZyBpbXBsZW1lbnRzIGV4cG9uZW50aWFsIG1hcHBpbmcgZnVuY3Rpb25zIGZvclxuICogc2NhbGVzIDw9MC4gRm9yIHNjYWxlcyA+IDAgTG9nYXJpdGhtTWFwcGluZyBzaG91bGQgYmUgdXNlZC5cbiAqL1xuY2xhc3MgRXhwb25lbnRNYXBwaW5nIHtcbiAgICBfc2hpZnQ7XG4gICAgY29uc3RydWN0b3Ioc2NhbGUpIHtcbiAgICAgICAgdGhpcy5fc2hpZnQgPSAtc2NhbGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcHMgcG9zaXRpdmUgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHRvIGluZGV4ZXMgY29ycmVzcG9uZGluZyB0byBzY2FsZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGluZGV4IGZvciBwcm92aWRlZCB2YWx1ZSBhdCB0aGUgY3VycmVudCBzY2FsZVxuICAgICAqL1xuICAgIG1hcFRvSW5kZXgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgaWVlZTc1NC5NSU5fVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHAgPSBpZWVlNzU0LmdldE5vcm1hbEJhc2UyKHZhbHVlKTtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgdmFsdWUgaXMgYW4gZXhhY3QgcG93ZXIgb2YgdHdvLCBjb21wdXRlIGFcbiAgICAgICAgLy8gY29ycmVjdGlvbiBvZiAtMS4gTm90ZSwgd2UgYXJlIHVzaW5nIGEgY3VzdG9tIF9yaWdodFNoaWZ0XG4gICAgICAgIC8vIHRvIGFjY29tbW9kYXRlIGEgNTItYml0IGFyZ3VtZW50LCB3aGljaCB0aGUgbmF0aXZlIGJpdHdpc2VcbiAgICAgICAgLy8gb3BlcmF0b3JzIGRvIG5vdCBzdXBwb3J0XG4gICAgICAgIGNvbnN0IGNvcnJlY3Rpb24gPSB0aGlzLl9yaWdodFNoaWZ0KGllZWU3NTQuZ2V0U2lnbmlmaWNhbmQodmFsdWUpIC0gMSwgaWVlZTc1NC5TSUdOSUZJQ0FORF9XSURUSCk7XG4gICAgICAgIHJldHVybiAoZXhwICsgY29ycmVjdGlvbikgPj4gdGhpcy5fc2hpZnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJ1Y2tldCBib3VuZGFyeSBmb3IgdGhlIGdpdmVuIGluZGV4IGZvciBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBsb3dlckJvdW5kYXJ5KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1pbkluZGV4ID0gdGhpcy5fbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA8IG1pbkluZGV4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5NYXBwaW5nRXJyb3IoYHVuZGVyZmxvdzogJHtpbmRleH0gaXMgPCBtaW5pbXVtIGxvd2VyIGJvdW5kYXJ5OiAke21pbkluZGV4fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5fbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA+IG1heEluZGV4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5NYXBwaW5nRXJyb3IoYG92ZXJmbG93OiAke2luZGV4fSBpcyA+IG1heGltdW0gbG93ZXIgYm91bmRhcnk6ICR7bWF4SW5kZXh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWwubGRleHAoMSwgaW5kZXggPDwgdGhpcy5fc2hpZnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIG1hcHBpbmdcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NoaWZ0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLXRoaXMuX3NoaWZ0O1xuICAgIH1cbiAgICBfbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICBsZXQgaW5kZXggPSBpZWVlNzU0Lk1JTl9OT1JNQUxfRVhQT05FTlQgPj4gdGhpcy5fc2hpZnQ7XG4gICAgICAgIGlmICh0aGlzLl9zaGlmdCA8IDIpIHtcbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICBfbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICByZXR1cm4gaWVlZTc1NC5NQVhfTk9STUFMX0VYUE9ORU5UID4+IHRoaXMuX3NoaWZ0O1xuICAgIH1cbiAgICBfcmlnaHRTaGlmdCh2YWx1ZSwgc2hpZnQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUgKiBNYXRoLnBvdygyLCAtc2hpZnQpKTtcbiAgICB9XG59XG5leHBvcnRzLkV4cG9uZW50TWFwcGluZyA9IEV4cG9uZW50TWFwcGluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9uZW50TWFwcGluZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dhcml0aG1NYXBwaW5nID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKFwiLi9pZWVlNzU0XCIpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuLyoqXG4gKiBMb2dhcml0aG1NYXBwaW5nIGltcGxlbWVudHMgZXhwb25lbnRpYWwgbWFwcGluZyBmdW5jdGlvbnMgZm9yIHNjYWxlID4gMC5cbiAqIEZvciBzY2FsZXMgPD0gMCB0aGUgZXhwb25lbnQgbWFwcGluZyBzaG91bGQgYmUgdXNlZC5cbiAqL1xuY2xhc3MgTG9nYXJpdGhtTWFwcGluZyB7XG4gICAgX3NjYWxlO1xuICAgIF9zY2FsZUZhY3RvcjtcbiAgICBfaW52ZXJzZUZhY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihzY2FsZSkge1xuICAgICAgICB0aGlzLl9zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLl9zY2FsZUZhY3RvciA9IHV0aWwubGRleHAoTWF0aC5MT0cyRSwgc2NhbGUpO1xuICAgICAgICB0aGlzLl9pbnZlcnNlRmFjdG9yID0gdXRpbC5sZGV4cChNYXRoLkxOMiwgLXNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFwcyBwb3NpdGl2ZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgdG8gaW5kZXhlcyBjb3JyZXNwb25kaW5nIHRvIHNjYWxlXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggZm9yIHByb3ZpZGVkIHZhbHVlIGF0IHRoZSBjdXJyZW50IHNjYWxlXG4gICAgICovXG4gICAgbWFwVG9JbmRleCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPD0gaWVlZTc1NC5NSU5fVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhhY3QgcG93ZXIgb2YgdHdvIHNwZWNpYWwgY2FzZVxuICAgICAgICBpZiAoaWVlZTc1NC5nZXRTaWduaWZpY2FuZCh2YWx1ZSkgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cCA9IGllZWU3NTQuZ2V0Tm9ybWFsQmFzZTIodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIChleHAgPDwgdGhpcy5fc2NhbGUpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub24tcG93ZXIgb2YgdHdvIGNhc2VzLiB1c2UgTWF0aC5mbG9vciB0byByb3VuZCB0aGUgc2NhbGVkIGxvZ2FyaXRobVxuICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpICogdGhpcy5fc2NhbGVGYWN0b3IpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuX21heE5vcm1hbExvd2VyQm91bmRhcnlJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPj0gbWF4SW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJ1Y2tldCBib3VuZGFyeSBmb3IgdGhlIGdpdmVuIGluZGV4IGZvciBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBsb3dlckJvdW5kYXJ5KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5fbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA+PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAyICogTWF0aC5leHAoKGluZGV4IC0gKDEgPDwgdGhpcy5fc2NhbGUpKSAvIHRoaXMuX3NjYWxlRmFjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLk1hcHBpbmdFcnJvcihgb3ZlcmZsb3c6ICR7aW5kZXh9IGlzID4gbWF4aW11bSBsb3dlciBib3VuZGFyeTogJHttYXhJbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5JbmRleCA9IHRoaXMuX21pbk5vcm1hbExvd2VyQm91bmRhcnlJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPD0gbWluSW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbWluSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWVlZTc1NC5NSU5fVkFMVUU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PT0gbWluSW5kZXggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZXhwKChpbmRleCArICgxIDw8IHRoaXMuX3NjYWxlKSkgLyB0aGlzLl9zY2FsZUZhY3RvcikgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuTWFwcGluZ0Vycm9yKGBvdmVyZmxvdzogJHtpbmRleH0gaXMgPCBtaW5pbXVtIGxvd2VyIGJvdW5kYXJ5OiAke21pbkluZGV4fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLmV4cChpbmRleCAqIHRoaXMuX2ludmVyc2VGYWN0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIG1hcHBpbmdcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlO1xuICAgIH1cbiAgICBfbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICByZXR1cm4gaWVlZTc1NC5NSU5fTk9STUFMX0VYUE9ORU5UIDw8IHRoaXMuX3NjYWxlO1xuICAgIH1cbiAgICBfbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICByZXR1cm4gKChpZWVlNzU0Lk1BWF9OT1JNQUxfRVhQT05FTlQgKyAxKSA8PCB0aGlzLl9zY2FsZSkgLSAxO1xuICAgIH1cbn1cbmV4cG9ydHMuTG9nYXJpdGhtTWFwcGluZyA9IExvZ2FyaXRobU1hcHBpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2dhcml0aG1NYXBwaW5nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hcHBpbmcgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgRXhwb25lbnRNYXBwaW5nXzEgPSByZXF1aXJlKFwiLi9FeHBvbmVudE1hcHBpbmdcIik7XG5jb25zdCBMb2dhcml0aG1NYXBwaW5nXzEgPSByZXF1aXJlKFwiLi9Mb2dhcml0aG1NYXBwaW5nXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgTUlOX1NDQUxFID0gLTEwO1xuY29uc3QgTUFYX1NDQUxFID0gMjA7XG5jb25zdCBQUkVCVUlMVF9NQVBQSU5HUyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDMxIH0sIChfLCBpKSA9PiB7XG4gICAgaWYgKGkgPiAxMCkge1xuICAgICAgICByZXR1cm4gbmV3IExvZ2FyaXRobU1hcHBpbmdfMS5Mb2dhcml0aG1NYXBwaW5nKGkgLSAxMCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXhwb25lbnRNYXBwaW5nXzEuRXhwb25lbnRNYXBwaW5nKGkgLSAxMCk7XG59KTtcbi8qKlxuICogZ2V0TWFwcGluZyByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBzY2FsZS4gRm9yIHNjYWxlcyAtMTBcbiAqIHRvIDAgdGhlIHVuZGVybHlpbmcgdHlwZSB3aWxsIGJlIEV4cG9uZW50TWFwcGluZy4gRm9yIHNjYWxlcyAxIHRvIDIwIHRoZVxuICogdW5kZXJseWluZyB0eXBlIHdpbGwgYmUgTG9nYXJpdGhtTWFwcGluZy5cbiAqIEBwYXJhbSBzY2FsZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWy0xMCwgMjBdXG4gKiBAcmV0dXJucyB7TWFwcGluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwcGluZyhzY2FsZSkge1xuICAgIGlmIChzY2FsZSA+IE1BWF9TQ0FMRSB8fCBzY2FsZSA8IE1JTl9TQ0FMRSkge1xuICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5NYXBwaW5nRXJyb3IoYGV4cGVjdGVkIHNjYWxlID49ICR7TUlOX1NDQUxFfSAmJiA8PSAke01BWF9TQ0FMRX0sIGdvdDogJHtzY2FsZX1gKTtcbiAgICB9XG4gICAgLy8gbWFwcGluZ3MgYXJlIG9mZnNldCBieSAxMC4gc2NhbGUgLTEwIGlzIGF0IHBvc2l0aW9uIDAgYW5kIHNjYWxlIDIwIGlzIGF0IDMwXG4gICAgcmV0dXJuIFBSRUJVSUxUX01BUFBJTkdTW3NjYWxlICsgMTBdO1xufVxuZXhwb3J0cy5nZXRNYXBwaW5nID0gZ2V0TWFwcGluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hcHBpbmcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvciA9IGV4cG9ydHMuRXhwb25lbnRpYWxIaXN0b2dyYW1BY2N1bXVsYXRpb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L01ldHJpY0RhdGFcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBCdWNrZXRzXzEgPSByZXF1aXJlKFwiLi9leHBvbmVudGlhbC1oaXN0b2dyYW0vQnVja2V0c1wiKTtcbmNvbnN0IGdldE1hcHBpbmdfMSA9IHJlcXVpcmUoXCIuL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL2dldE1hcHBpbmdcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9leHBvbmVudGlhbC1oaXN0b2dyYW0vdXRpbFwiKTtcbi8vIEhpZ2hMb3cgaXMgYSB1dGlsaXR5IGNsYXNzIHVzZWQgZm9yIGNvbXB1dGluZyBhIGNvbW1vbiBzY2FsZSBmb3Jcbi8vIHR3byBleHBvbmVudGlhbCBoaXN0b2dyYW0gYWNjdW11bGF0aW9uc1xuY2xhc3MgSGlnaExvdyB7XG4gICAgbG93O1xuICAgIGhpZ2g7XG4gICAgc3RhdGljIGNvbWJpbmUoaDEsIGgyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSGlnaExvdyhNYXRoLm1pbihoMS5sb3csIGgyLmxvdyksIE1hdGgubWF4KGgxLmhpZ2gsIGgyLmhpZ2gpKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IobG93LCBoaWdoKSB7XG4gICAgICAgIHRoaXMubG93ID0gbG93O1xuICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuICAgIH1cbn1cbmNvbnN0IE1BWF9TQ0FMRSA9IDIwO1xuY29uc3QgREVGQVVMVF9NQVhfU0laRSA9IDE2MDtcbmNvbnN0IE1JTl9NQVhfU0laRSA9IDI7XG5jbGFzcyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9tYXhTaXplO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgX3N1bTtcbiAgICBfY291bnQ7XG4gICAgX3plcm9Db3VudDtcbiAgICBfbWluO1xuICAgIF9tYXg7XG4gICAgX3Bvc2l0aXZlO1xuICAgIF9uZWdhdGl2ZTtcbiAgICBfbWFwcGluZztcbiAgICBjb25zdHJ1Y3RvcihzdGFydFRpbWUsIF9tYXhTaXplID0gREVGQVVMVF9NQVhfU0laRSwgX3JlY29yZE1pbk1heCA9IHRydWUsIF9zdW0gPSAwLCBfY291bnQgPSAwLCBfemVyb0NvdW50ID0gMCwgX21pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgX21heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSwgX3Bvc2l0aXZlID0gbmV3IEJ1Y2tldHNfMS5CdWNrZXRzKCksIF9uZWdhdGl2ZSA9IG5ldyBCdWNrZXRzXzEuQnVja2V0cygpLCBfbWFwcGluZyA9ICgwLCBnZXRNYXBwaW5nXzEuZ2V0TWFwcGluZykoTUFYX1NDQUxFKSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5fbWF4U2l6ZSA9IF9tYXhTaXplO1xuICAgICAgICB0aGlzLl9yZWNvcmRNaW5NYXggPSBfcmVjb3JkTWluTWF4O1xuICAgICAgICB0aGlzLl9zdW0gPSBfc3VtO1xuICAgICAgICB0aGlzLl9jb3VudCA9IF9jb3VudDtcbiAgICAgICAgdGhpcy5femVyb0NvdW50ID0gX3plcm9Db3VudDtcbiAgICAgICAgdGhpcy5fbWluID0gX21pbjtcbiAgICAgICAgdGhpcy5fbWF4ID0gX21heDtcbiAgICAgICAgdGhpcy5fcG9zaXRpdmUgPSBfcG9zaXRpdmU7XG4gICAgICAgIHRoaXMuX25lZ2F0aXZlID0gX25lZ2F0aXZlO1xuICAgICAgICB0aGlzLl9tYXBwaW5nID0gX21hcHBpbmc7XG4gICAgICAgIGlmICh0aGlzLl9tYXhTaXplIDwgTUlOX01BWF9TSVpFKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEV4cG9uZW50aWFsIEhpc3RvZ3JhbSBNYXggU2l6ZSBzZXQgdG8gJHt0aGlzLl9tYXhTaXplfSwgXFxcbiAgICAgICAgICAgICAgICBjaGFuZ2luZyB0byB0aGUgbWluaW11bSBzaXplIG9mOiAke01JTl9NQVhfU0laRX1gKTtcbiAgICAgICAgICAgIHRoaXMuX21heFNpemUgPSBNSU5fTUFYX1NJWkU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogcmVjb3JkIHVwZGF0ZXMgYSBoaXN0b2dyYW0gd2l0aCBhIHNpbmdsZSBjb3VudFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5SW5jcmVtZW50KHZhbHVlLCAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhcnQgdGltZSBmb3IgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKiBAcGFyYW0ge0hyVGltZX0gc3RhcnRUaW1lXG4gICAgICovXG4gICAgc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICogQHBhcmFtIHtIclRpbWV9IHN0YXJ0VGltZVxuICAgICAqL1xuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc01pbk1heDogdGhpcy5fcmVjb3JkTWluTWF4LFxuICAgICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBzdW06IHRoaXMuc3VtLFxuICAgICAgICAgICAgcG9zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMucG9zaXRpdmUub2Zmc2V0LFxuICAgICAgICAgICAgICAgIGJ1Y2tldENvdW50czogdGhpcy5wb3NpdGl2ZS5jb3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZWdhdGl2ZToge1xuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5uZWdhdGl2ZS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgYnVja2V0Q291bnRzOiB0aGlzLm5lZ2F0aXZlLmNvdW50cygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmNvdW50LFxuICAgICAgICAgICAgc2NhbGU6IHRoaXMuc2NhbGUsXG4gICAgICAgICAgICB6ZXJvQ291bnQ6IHRoaXMuemVyb0NvdW50LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc3VtIG9mIHZhbHVlcyByZWNvcmRlZCBieSB0aGlzIGFjY3VtdWxhdGlvblxuICAgICAqL1xuICAgIGdldCBzdW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdW07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBtaW5pbXVtIHZhbHVlIHJlY29yZGVkIGJ5IHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICovXG4gICAgZ2V0IG1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMge051bWJlcn0gVGhlIG1heGltdW0gdmFsdWUgcmVjb3JkZWQgYnkgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgY291bnQgb2YgdmFsdWVzIHJlY29yZGVkIGJ5IHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICovXG4gICAgZ2V0IGNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgMCB2YWx1ZXMgcmVjb3JkZWQgYnkgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKi9cbiAgICBnZXQgemVyb0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5femVyb0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIGFjY3VtdWxhdGlvblxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50ID09PSB0aGlzLl96ZXJvQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGFsbCB6ZXJvcyEgc2NhbGUgZG9lc24ndCBtYXR0ZXIsIHVzZSB6ZXJvXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZy5zY2FsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcG9zaXRpdmUgaG9sZHMgdGhlIHBvc2l0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIHtCdWNrZXRzfVxuICAgICAqL1xuICAgIGdldCBwb3NpdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBuZWdhdGl2ZSBob2xkcyB0aGUgbmVnYXRpdmUgdmFsdWVzIGJ5IHRoZWlyIGFic29sdXRlIHZhbHVlXG4gICAgICogQHJldHVybnMge0J1Y2tldHN9XG4gICAgICovXG4gICAgZ2V0IG5lZ2F0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHVwZGF0ZUJ5SW5jciBzdXBwb3J0cyB1cGRhdGluZyBhIGhpc3RvZ3JhbSB3aXRoIGEgbm9uLW5lZ2F0aXZlXG4gICAgICogaW5jcmVtZW50LlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqIEBwYXJhbSBpbmNyZW1lbnRcbiAgICAgKi9cbiAgICB1cGRhdGVCeUluY3JlbWVudCh2YWx1ZSwgaW5jcmVtZW50KSB7XG4gICAgICAgIC8vIE5hTiBkb2VzIG5vdCBmYWxsIGludG8gYW55IGJ1Y2tldCwgaXMgbm90IHplcm8gYW5kIHNob3VsZCBub3QgYmUgY291bnRlZCxcbiAgICAgICAgLy8gTmFOIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiBtYXggbm9yIGxlc3MgdGhhbiBtaW4sIHRoZXJlZm9yZSByZXR1cm4gYXMgdGhlcmUncyBub3RoaW5nIGZvciB1cyB0byBkby5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA8IHRoaXMuX21pbikge1xuICAgICAgICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY291bnQgKz0gaW5jcmVtZW50O1xuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3plcm9Db3VudCArPSBpbmNyZW1lbnQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VtICs9IHZhbHVlICogaW5jcmVtZW50O1xuICAgICAgICBpZiAodmFsdWUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWNrZXRzKHRoaXMuX3Bvc2l0aXZlLCB2YWx1ZSwgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJ1Y2tldHModGhpcy5fbmVnYXRpdmUsIC12YWx1ZSwgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBtZXJnZSBjb21iaW5lcyBkYXRhIGZyb20gcHJldmlvdXMgdmFsdWUgaW50byBzZWxmXG4gICAgICogQHBhcmFtIHtFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbn0gcHJldmlvdXNcbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cykge1xuICAgICAgICBpZiAodGhpcy5fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21pbiA9IHByZXZpb3VzLm1pbjtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHByZXZpb3VzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmV2aW91cy5jb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzLm1pbiA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluID0gcHJldmlvdXMubWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLm1heCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4ID0gcHJldmlvdXMubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gcHJldmlvdXMuc3RhcnRUaW1lO1xuICAgICAgICB0aGlzLl9zdW0gKz0gcHJldmlvdXMuc3VtO1xuICAgICAgICB0aGlzLl9jb3VudCArPSBwcmV2aW91cy5jb3VudDtcbiAgICAgICAgdGhpcy5femVyb0NvdW50ICs9IHByZXZpb3VzLnplcm9Db3VudDtcbiAgICAgICAgY29uc3QgbWluU2NhbGUgPSB0aGlzLl9taW5TY2FsZShwcmV2aW91cyk7XG4gICAgICAgIHRoaXMuX2Rvd25zY2FsZSh0aGlzLnNjYWxlIC0gbWluU2NhbGUpO1xuICAgICAgICB0aGlzLl9tZXJnZUJ1Y2tldHModGhpcy5wb3NpdGl2ZSwgcHJldmlvdXMsIHByZXZpb3VzLnBvc2l0aXZlLCBtaW5TY2FsZSk7XG4gICAgICAgIHRoaXMuX21lcmdlQnVja2V0cyh0aGlzLm5lZ2F0aXZlLCBwcmV2aW91cywgcHJldmlvdXMubmVnYXRpdmUsIG1pblNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZGlmZiBzdWJ0cmFjdHMgb3RoZXIgZnJvbSBzZWxmXG4gICAgICogQHBhcmFtIHtFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbn0gb3RoZXJcbiAgICAgKi9cbiAgICBkaWZmKG90aGVyKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IEluZmluaXR5O1xuICAgICAgICB0aGlzLl9tYXggPSAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMuX3N1bSAtPSBvdGhlci5zdW07XG4gICAgICAgIHRoaXMuX2NvdW50IC09IG90aGVyLmNvdW50O1xuICAgICAgICB0aGlzLl96ZXJvQ291bnQgLT0gb3RoZXIuemVyb0NvdW50O1xuICAgICAgICBjb25zdCBtaW5TY2FsZSA9IHRoaXMuX21pblNjYWxlKG90aGVyKTtcbiAgICAgICAgdGhpcy5fZG93bnNjYWxlKHRoaXMuc2NhbGUgLSBtaW5TY2FsZSk7XG4gICAgICAgIHRoaXMuX2RpZmZCdWNrZXRzKHRoaXMucG9zaXRpdmUsIG90aGVyLCBvdGhlci5wb3NpdGl2ZSwgbWluU2NhbGUpO1xuICAgICAgICB0aGlzLl9kaWZmQnVja2V0cyh0aGlzLm5lZ2F0aXZlLCBvdGhlciwgb3RoZXIubmVnYXRpdmUsIG1pblNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBzZWxmXG4gICAgICogQHJldHVybnMge0V4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9ufVxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uKHRoaXMuc3RhcnRUaW1lLCB0aGlzLl9tYXhTaXplLCB0aGlzLl9yZWNvcmRNaW5NYXgsIHRoaXMuX3N1bSwgdGhpcy5fY291bnQsIHRoaXMuX3plcm9Db3VudCwgdGhpcy5fbWluLCB0aGlzLl9tYXgsIHRoaXMucG9zaXRpdmUuY2xvbmUoKSwgdGhpcy5uZWdhdGl2ZS5jbG9uZSgpLCB0aGlzLl9tYXBwaW5nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogX3VwZGF0ZUJ1Y2tldHMgbWFwcyB0aGUgaW5jb21pbmcgdmFsdWUgdG8gYSBidWNrZXQgaW5kZXggZm9yIHRoZSBjdXJyZW50XG4gICAgICogc2NhbGUuIElmIHRoZSBidWNrZXQgaW5kZXggaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGJhY2tpbmcgYXJyYXksXG4gICAgICogaXQgd2lsbCByZXNjYWxlIHRoZSBiYWNraW5nIGFycmF5IGFuZCB1cGRhdGUgdGhlIG1hcHBpbmcgZm9yIHRoZSBuZXcgc2NhbGUuXG4gICAgICovXG4gICAgX3VwZGF0ZUJ1Y2tldHMoYnVja2V0cywgdmFsdWUsIGluY3JlbWVudCkge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9tYXBwaW5nLm1hcFRvSW5kZXgodmFsdWUpO1xuICAgICAgICAvLyByZXNjYWxlIHRoZSBtYXBwaW5nIGlmIG5lZWRlZFxuICAgICAgICBsZXQgcmVzY2FsaW5nTmVlZGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBoaWdoID0gMDtcbiAgICAgICAgbGV0IGxvdyA9IDA7XG4gICAgICAgIGlmIChidWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBidWNrZXRzLmluZGV4RW5kID0gYnVja2V0cy5pbmRleFN0YXJ0O1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleEJhc2UgPSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBidWNrZXRzLmluZGV4U3RhcnQgJiZcbiAgICAgICAgICAgIGJ1Y2tldHMuaW5kZXhFbmQgLSBpbmRleCA+PSB0aGlzLl9tYXhTaXplKSB7XG4gICAgICAgICAgICByZXNjYWxpbmdOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgbG93ID0gaW5kZXg7XG4gICAgICAgICAgICBoaWdoID0gYnVja2V0cy5pbmRleEVuZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbmRleCA+IGJ1Y2tldHMuaW5kZXhFbmQgJiZcbiAgICAgICAgICAgIGluZGV4IC0gYnVja2V0cy5pbmRleFN0YXJ0ID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgICAgICAgIHJlc2NhbGluZ05lZWRlZCA9IHRydWU7XG4gICAgICAgICAgICBsb3cgPSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgICAgICBoaWdoID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzY2FsZSBhbmQgY29tcHV0ZSBpbmRleCBhdCBuZXcgc2NhbGVcbiAgICAgICAgaWYgKHJlc2NhbGluZ05lZWRlZCkge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlID0gdGhpcy5fY2hhbmdlU2NhbGUoaGlnaCwgbG93KTtcbiAgICAgICAgICAgIHRoaXMuX2Rvd25zY2FsZShjaGFuZ2UpO1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9tYXBwaW5nLm1hcFRvSW5kZXgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luY3JlbWVudEluZGV4QnkoYnVja2V0cywgaW5kZXgsIGluY3JlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9pbmNyZW1lbnRJbmRleEJ5IGluY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSBidWNrZXQgc3BlY2lmaWVkIGJ5IGBpbmRleGAuXG4gICAgICogSWYgdGhlIGluZGV4IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlIFtidWNrZXRzLmluZGV4U3RhcnQsIGJ1Y2tldHMuaW5kZXhFbmRdXG4gICAgICogdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGJhY2tpbmcgYXJyYXkgd2lsbCBiZSBhZGp1c3RlZCBhbmQgbW9yZSBidWNrZXRzIHdpbGxcbiAgICAgKiBiZSBhZGRlZCBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgX2luY3JlbWVudEluZGV4QnkoYnVja2V0cywgaW5kZXgsIGluY3JlbWVudCkge1xuICAgICAgICBpZiAoaW5jcmVtZW50ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvIGZvciBhIHplcm8gaW5jcmVtZW50LCBjYW4gaGFwcGVuIGR1cmluZyBhIG1lcmdlIG9wZXJhdGlvblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gYnVja2V0cy5pbmRleEVuZCA9IGJ1Y2tldHMuaW5kZXhCYXNlID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4IDwgYnVja2V0cy5pbmRleFN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gYnVja2V0cy5pbmRleEVuZCAtIGluZGV4O1xuICAgICAgICAgICAgaWYgKHNwYW4gPj0gYnVja2V0cy5iYWNraW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3coYnVja2V0cywgc3BhbiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPiBidWNrZXRzLmluZGV4RW5kKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5kZXggLSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgICAgICBpZiAoc3BhbiA+PSBidWNrZXRzLmJhY2tpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JvdyhidWNrZXRzLCBzcGFuICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWNrZXRzLmluZGV4RW5kID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJ1Y2tldEluZGV4ID0gaW5kZXggLSBidWNrZXRzLmluZGV4QmFzZTtcbiAgICAgICAgaWYgKGJ1Y2tldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgYnVja2V0SW5kZXggKz0gYnVja2V0cy5iYWNraW5nLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBidWNrZXRzLmluY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgaW5jcmVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ3JvdyByZXNpemVzIHRoZSBiYWNraW5nIGFycmF5IGJ5IGRvdWJsaW5nIGluIHNpemUgdXAgdG8gbWF4U2l6ZS5cbiAgICAgKiBUaGlzIGV4dGVuZHMgdGhlIGFycmF5IHdpdGggYSBidW5jaCBvZiB6ZXJvcyBhbmQgY29waWVzIHRoZVxuICAgICAqIGV4aXN0aW5nIGNvdW50cyB0byB0aGUgc2FtZSBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBfZ3JvdyhidWNrZXRzLCBuZWVkZWQpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ1Y2tldHMuYmFja2luZy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJpYXMgPSBidWNrZXRzLmluZGV4QmFzZSAtIGJ1Y2tldHMuaW5kZXhTdGFydDtcbiAgICAgICAgY29uc3Qgb2xkUG9zaXRpdmVMaW1pdCA9IHNpemUgLSBiaWFzO1xuICAgICAgICBsZXQgbmV3U2l6ZSA9ICgwLCB1dGlsXzEubmV4dEdyZWF0ZXJTcXVhcmUpKG5lZWRlZCk7XG4gICAgICAgIGlmIChuZXdTaXplID4gdGhpcy5fbWF4U2l6ZSkge1xuICAgICAgICAgICAgbmV3U2l6ZSA9IHRoaXMuX21heFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UG9zaXRpdmVMaW1pdCA9IG5ld1NpemUgLSBiaWFzO1xuICAgICAgICBidWNrZXRzLmJhY2tpbmcuZ3Jvd1RvKG5ld1NpemUsIG9sZFBvc2l0aXZlTGltaXQsIG5ld1Bvc2l0aXZlTGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfY2hhbmdlU2NhbGUgY29tcHV0ZXMgaG93IG11Y2ggZG93bnNjYWxpbmcgaXMgbmVlZGVkIGJ5IHNoaWZ0aW5nIHRoZVxuICAgICAqIGhpZ2ggYW5kIGxvdyB2YWx1ZXMgdW50aWwgdGhleSBhcmUgc2VwYXJhdGVkIGJ5IG5vIG1vcmUgdGhhbiBzaXplLlxuICAgICAqL1xuICAgIF9jaGFuZ2VTY2FsZShoaWdoLCBsb3cpIHtcbiAgICAgICAgbGV0IGNoYW5nZSA9IDA7XG4gICAgICAgIHdoaWxlIChoaWdoIC0gbG93ID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgICAgICAgIGhpZ2ggPj49IDE7XG4gICAgICAgICAgICBsb3cgPj49IDE7XG4gICAgICAgICAgICBjaGFuZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfZG93bnNjYWxlIHN1YnRyYWN0cyBgY2hhbmdlYCBmcm9tIHRoZSBjdXJyZW50IG1hcHBpbmcgc2NhbGUuXG4gICAgICovXG4gICAgX2Rvd25zY2FsZShjaGFuZ2UpIHtcbiAgICAgICAgaWYgKGNoYW5nZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UgPCAwKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlLiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW1wb3NzaWJsZSBjaGFuZ2Ugb2Ygc2NhbGU6ICR7dGhpcy5zY2FsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdTY2FsZSA9IHRoaXMuX21hcHBpbmcuc2NhbGUgLSBjaGFuZ2U7XG4gICAgICAgIHRoaXMuX3Bvc2l0aXZlLmRvd25zY2FsZShjaGFuZ2UpO1xuICAgICAgICB0aGlzLl9uZWdhdGl2ZS5kb3duc2NhbGUoY2hhbmdlKTtcbiAgICAgICAgdGhpcy5fbWFwcGluZyA9ICgwLCBnZXRNYXBwaW5nXzEuZ2V0TWFwcGluZykobmV3U2NhbGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfbWluU2NhbGUgaXMgdXNlZCBieSBkaWZmIGFuZCBtZXJnZSB0byBjb21wdXRlIGFuIGlkZWFsIGNvbWJpbmVkIHNjYWxlXG4gICAgICovXG4gICAgX21pblNjYWxlKG90aGVyKSB7XG4gICAgICAgIGNvbnN0IG1pblNjYWxlID0gTWF0aC5taW4odGhpcy5zY2FsZSwgb3RoZXIuc2NhbGUpO1xuICAgICAgICBjb25zdCBoaWdoTG93UG9zID0gSGlnaExvdy5jb21iaW5lKHRoaXMuX2hpZ2hMb3dBdFNjYWxlKHRoaXMucG9zaXRpdmUsIHRoaXMuc2NhbGUsIG1pblNjYWxlKSwgdGhpcy5faGlnaExvd0F0U2NhbGUob3RoZXIucG9zaXRpdmUsIG90aGVyLnNjYWxlLCBtaW5TY2FsZSkpO1xuICAgICAgICBjb25zdCBoaWdoTG93TmVnID0gSGlnaExvdy5jb21iaW5lKHRoaXMuX2hpZ2hMb3dBdFNjYWxlKHRoaXMubmVnYXRpdmUsIHRoaXMuc2NhbGUsIG1pblNjYWxlKSwgdGhpcy5faGlnaExvd0F0U2NhbGUob3RoZXIubmVnYXRpdmUsIG90aGVyLnNjYWxlLCBtaW5TY2FsZSkpO1xuICAgICAgICByZXR1cm4gTWF0aC5taW4obWluU2NhbGUgLSB0aGlzLl9jaGFuZ2VTY2FsZShoaWdoTG93UG9zLmhpZ2gsIGhpZ2hMb3dQb3MubG93KSwgbWluU2NhbGUgLSB0aGlzLl9jaGFuZ2VTY2FsZShoaWdoTG93TmVnLmhpZ2gsIGhpZ2hMb3dOZWcubG93KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9oaWdoTG93QXRTY2FsZSBpcyB1c2VkIGJ5IGRpZmYgYW5kIG1lcmdlIHRvIGNvbXB1dGUgYW4gaWRlYWwgY29tYmluZWQgc2NhbGUuXG4gICAgICovXG4gICAgX2hpZ2hMb3dBdFNjYWxlKGJ1Y2tldHMsIGN1cnJlbnRTY2FsZSwgbmV3U2NhbGUpIHtcbiAgICAgICAgaWYgKGJ1Y2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEhpZ2hMb3coMCwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gY3VycmVudFNjYWxlIC0gbmV3U2NhbGU7XG4gICAgICAgIHJldHVybiBuZXcgSGlnaExvdyhidWNrZXRzLmluZGV4U3RhcnQgPj4gc2hpZnQsIGJ1Y2tldHMuaW5kZXhFbmQgPj4gc2hpZnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfbWVyZ2VCdWNrZXRzIHRyYW5zbGF0ZXMgaW5kZXggdmFsdWVzIGZyb20gYW5vdGhlciBoaXN0b2dyYW0gYW5kXG4gICAgICogYWRkcyB0aGUgdmFsdWVzIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVja2V0cyBvZiB0aGlzIGhpc3RvZ3JhbS5cbiAgICAgKi9cbiAgICBfbWVyZ2VCdWNrZXRzKG91cnMsIG90aGVyLCB0aGVpcnMsIHNjYWxlKSB7XG4gICAgICAgIGNvbnN0IHRoZWlyT2Zmc2V0ID0gdGhlaXJzLm9mZnNldDtcbiAgICAgICAgY29uc3QgdGhlaXJDaGFuZ2UgPSBvdGhlci5zY2FsZSAtIHNjYWxlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50SW5kZXhCeShvdXJzLCAodGhlaXJPZmZzZXQgKyBpKSA+PiB0aGVpckNoYW5nZSwgdGhlaXJzLmF0KGkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBfZGlmZkJ1Y2tldHMgdHJhbnNsYXRlcyBpbmRleCB2YWx1ZXMgZnJvbSBhbm90aGVyIGhpc3RvZ3JhbSBhbmRcbiAgICAgKiBzdWJ0cmFjdHMgdGhlIHZhbHVlcyBpbiB0aGUgY29ycmVzcG9uZGluZyBidWNrZXRzIG9mIHRoaXMgaGlzdG9ncmFtLlxuICAgICAqL1xuICAgIF9kaWZmQnVja2V0cyhvdXJzLCBvdGhlciwgdGhlaXJzLCBzY2FsZSkge1xuICAgICAgICBjb25zdCB0aGVpck9mZnNldCA9IHRoZWlycy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRoZWlyQ2hhbmdlID0gb3RoZXIuc2NhbGUgLSBzY2FsZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG91ckluZGV4ID0gKHRoZWlyT2Zmc2V0ICsgaSkgPj4gdGhlaXJDaGFuZ2U7XG4gICAgICAgICAgICBsZXQgYnVja2V0SW5kZXggPSBvdXJJbmRleCAtIG91cnMuaW5kZXhCYXNlO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4ICs9IG91cnMuYmFja2luZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXJzLmRlY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgdGhlaXJzLmF0KGkpKTtcbiAgICAgICAgfVxuICAgICAgICBvdXJzLnRyaW0oKTtcbiAgICB9XG59XG5leHBvcnRzLkV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gRXhwb25lbnRpYWxIaXN0b2dyYW1BY2N1bXVsYXRpb247XG4vKipcbiAqIEFnZ3JlZ2F0b3IgZm9yIEV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uc1xuICovXG5jbGFzcyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0b3Ige1xuICAgIF9tYXhTaXplO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAga2luZCA9IHR5cGVzXzEuQWdncmVnYXRvcktpbmQuRVhQT05FTlRJQUxfSElTVE9HUkFNO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBfbWF4U2l6ZSBNYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIGZvciBlYWNoIG9mIHRoZSBwb3NpdGl2ZVxuICAgICAqICAgIGFuZCBuZWdhdGl2ZSByYW5nZXMsIGV4Y2x1c2l2ZSBvZiB0aGUgemVyby1idWNrZXQuXG4gICAgICogQHBhcmFtIF9yZWNvcmRNaW5NYXggSWYgc2V0IHRvIHRydWUsIG1pbiBhbmQgbWF4IHdpbGwgYmUgcmVjb3JkZWQuXG4gICAgICogICAgT3RoZXJ3aXNlLCBtaW4gYW5kIG1heCB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfbWF4U2l6ZSwgX3JlY29yZE1pbk1heCkge1xuICAgICAgICB0aGlzLl9tYXhTaXplID0gX21heFNpemU7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbihzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbihzdGFydFRpbWUsIHRoaXMuX21heFNpemUsIHRoaXMuX3JlY29yZE1pbk1heCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0d28gZXhwb25lbnRpYWwgaGlzdG9ncmFtIGFjY3VtdWxhdGlvbnMuXG4gICAgICovXG4gICAgbWVyZ2UocHJldmlvdXMsIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlbHRhLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5tZXJnZShwcmV2aW91cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgREVMVEEgYWdncmVnYXRpb24gYnkgY29tcGFyaW5nIHR3byBjdW11bGF0aXZlIG1lYXN1cmVtZW50cy5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGN1cnJlbnQuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmRpZmYocHJldmlvdXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB0b01ldHJpY0RhdGEoZGVzY3JpcHRvciwgYWdncmVnYXRpb25UZW1wb3JhbGl0eSwgYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLCBlbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgIGRhdGFQb2ludFR5cGU6IE1ldHJpY0RhdGFfMS5EYXRhUG9pbnRUeXBlLkVYUE9ORU5USUFMX0hJU1RPR1JBTSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRWYWx1ZSA9IGFjY3VtdWxhdGlvbi50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgaW5zdHJ1bWVudCBhbGxvd3MgbmVnYXRpdmUgdmFsdWVzLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93c05lZ2F0aXZlVmFsdWVzID0gZGVzY3JpcHRvci50eXBlID09PSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0UgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuVVBfRE9XTl9DT1VOVEVSIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfR0FVR0UgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBwb2ludFZhbHVlLmhhc01pbk1heCA/IHBvaW50VmFsdWUubWluIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBwb2ludFZhbHVlLmhhc01pbk1heCA/IHBvaW50VmFsdWUubWF4IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtOiAhYWxsb3dzTmVnYXRpdmVWYWx1ZXMgPyBwb2ludFZhbHVlLnN1bSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBwb2ludFZhbHVlLnBvc2l0aXZlLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRDb3VudHM6IHBvaW50VmFsdWUucG9zaXRpdmUuYnVja2V0Q291bnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBwb2ludFZhbHVlLm5lZ2F0aXZlLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRDb3VudHM6IHBvaW50VmFsdWUubmVnYXRpdmUuYnVja2V0Q291bnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBwb2ludFZhbHVlLmNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHBvaW50VmFsdWUuc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB6ZXJvQ291bnQ6IHBvaW50VmFsdWUuemVyb0NvdW50LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvciA9IEV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9uZW50aWFsSGlzdG9ncmFtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MYXN0VmFsdWVBZ2dyZWdhdG9yID0gZXhwb3J0cy5MYXN0VmFsdWVBY2N1bXVsYXRpb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IE1ldHJpY0RhdGFfMSA9IHJlcXVpcmUoXCIuLi9leHBvcnQvTWV0cmljRGF0YVwiKTtcbmNsYXNzIExhc3RWYWx1ZUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9jdXJyZW50O1xuICAgIHNhbXBsZVRpbWU7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBfY3VycmVudCA9IDAsIHNhbXBsZVRpbWUgPSBbMCwgMF0pIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSBfY3VycmVudDtcbiAgICAgICAgdGhpcy5zYW1wbGVUaW1lID0gc2FtcGxlVGltZTtcbiAgICB9XG4gICAgcmVjb3JkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zYW1wbGVUaW1lID0gKDAsIGNvcmVfMS5taWxsaXNUb0hyVGltZSkoRGF0ZS5ub3coKSk7XG4gICAgfVxuICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgfVxuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxufVxuZXhwb3J0cy5MYXN0VmFsdWVBY2N1bXVsYXRpb24gPSBMYXN0VmFsdWVBY2N1bXVsYXRpb247XG4vKiogQmFzaWMgYWdncmVnYXRvciB3aGljaCBjYWxjdWxhdGVzIGEgTGFzdFZhbHVlIGZyb20gaW5kaXZpZHVhbCBtZWFzdXJlbWVudHMuICovXG5jbGFzcyBMYXN0VmFsdWVBZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gdHlwZXNfMS5BZ2dyZWdhdG9yS2luZC5MQVNUX1ZBTFVFO1xuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbihzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXN0VmFsdWVBY2N1bXVsYXRpb24oc3RhcnRUaW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0aGUgZ2l2ZW4gYWNjdW11bGF0aW9ucy5cbiAgICAgKlxuICAgICAqIFJldHVybiB0aGUgbmV3bHkgY2FwdHVyZWQgKGRlbHRhKSBhY2N1bXVsYXRpb24gZm9yIExhc3RWYWx1ZUFnZ3JlZ2F0b3IuXG4gICAgICovXG4gICAgbWVyZ2UocHJldmlvdXMsIGRlbHRhKSB7XG4gICAgICAgIC8vIG5hbm9zZWNvbmRzIG1heSBsb3NlIHByZWNpc2lvbnMuXG4gICAgICAgIGNvbnN0IGxhdGVzdEFjY3VtdWxhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKGRlbHRhLnNhbXBsZVRpbWUpID49XG4gICAgICAgICAgICAoMCwgY29yZV8xLmhyVGltZVRvTWljcm9zZWNvbmRzKShwcmV2aW91cy5zYW1wbGVUaW1lKVxuICAgICAgICAgICAgPyBkZWx0YVxuICAgICAgICAgICAgOiBwcmV2aW91cztcbiAgICAgICAgcmV0dXJuIG5ldyBMYXN0VmFsdWVBY2N1bXVsYXRpb24ocHJldmlvdXMuc3RhcnRUaW1lLCBsYXRlc3RBY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCksIGxhdGVzdEFjY3VtdWxhdGlvbi5zYW1wbGVUaW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBERUxUQSBhZ2dyZWdhdGlvbiBieSBjb21wYXJpbmcgdHdvIGN1bXVsYXRpdmUgbWVhc3VyZW1lbnRzLlxuICAgICAqXG4gICAgICogQSBkZWx0YSBhZ2dyZWdhdGlvbiBpcyBub3QgbWVhbmluZ2Z1bCB0byBMYXN0VmFsdWVBZ2dyZWdhdG9yLCBqdXN0IHJldHVyblxuICAgICAqIHRoZSBuZXdseSBjYXB0dXJlZCAoZGVsdGEpIGFjY3VtdWxhdGlvbiBmb3IgTGFzdFZhbHVlQWdncmVnYXRvci5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIC8vIG5hbm9zZWNvbmRzIG1heSBsb3NlIHByZWNpc2lvbnMuXG4gICAgICAgIGNvbnN0IGxhdGVzdEFjY3VtdWxhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKGN1cnJlbnQuc2FtcGxlVGltZSkgPj1cbiAgICAgICAgICAgICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKHByZXZpb3VzLnNhbXBsZVRpbWUpXG4gICAgICAgICAgICA/IGN1cnJlbnRcbiAgICAgICAgICAgIDogcHJldmlvdXM7XG4gICAgICAgIHJldHVybiBuZXcgTGFzdFZhbHVlQWNjdW11bGF0aW9uKGN1cnJlbnQuc3RhcnRUaW1lLCBsYXRlc3RBY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCksIGxhdGVzdEFjY3VtdWxhdGlvbi5zYW1wbGVUaW1lKTtcbiAgICB9XG4gICAgdG9NZXRyaWNEYXRhKGRlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcywgZW5kVGltZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICBkYXRhUG9pbnRUeXBlOiBNZXRyaWNEYXRhXzEuRGF0YVBvaW50VHlwZS5HQVVHRSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkxhc3RWYWx1ZUFnZ3JlZ2F0b3IgPSBMYXN0VmFsdWVBZ2dyZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGFzdFZhbHVlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdW1BZ2dyZWdhdG9yID0gZXhwb3J0cy5TdW1BY2N1bXVsYXRpb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L01ldHJpY0RhdGFcIik7XG5jbGFzcyBTdW1BY2N1bXVsYXRpb24ge1xuICAgIHN0YXJ0VGltZTtcbiAgICBtb25vdG9uaWM7XG4gICAgX2N1cnJlbnQ7XG4gICAgcmVzZXQ7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBtb25vdG9uaWMsIF9jdXJyZW50ID0gMCwgcmVzZXQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5tb25vdG9uaWMgPSBtb25vdG9uaWM7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSBfY3VycmVudDtcbiAgICAgICAgdGhpcy5yZXNldCA9IHJlc2V0O1xuICAgIH1cbiAgICByZWNvcmQodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9ub3RvbmljICYmIHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgKz0gdmFsdWU7XG4gICAgfVxuICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgfVxuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxufVxuZXhwb3J0cy5TdW1BY2N1bXVsYXRpb24gPSBTdW1BY2N1bXVsYXRpb247XG4vKiogQmFzaWMgYWdncmVnYXRvciB3aGljaCBjYWxjdWxhdGVzIGEgU3VtIGZyb20gaW5kaXZpZHVhbCBtZWFzdXJlbWVudHMuICovXG5jbGFzcyBTdW1BZ2dyZWdhdG9yIHtcbiAgICBtb25vdG9uaWM7XG4gICAga2luZCA9IHR5cGVzXzEuQWdncmVnYXRvcktpbmQuU1VNO1xuICAgIGNvbnN0cnVjdG9yKG1vbm90b25pYykge1xuICAgICAgICB0aGlzLm1vbm90b25pYyA9IG1vbm90b25pYztcbiAgICB9XG4gICAgY3JlYXRlQWNjdW11bGF0aW9uKHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihzdGFydFRpbWUsIHRoaXMubW9ub3RvbmljKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0aGUgZ2l2ZW4gYWNjdW11bGF0aW9ucy5cbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cywgZGVsdGEpIHtcbiAgICAgICAgY29uc3QgcHJldlB2ID0gcHJldmlvdXMudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGRlbHRhUHYgPSBkZWx0YS50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgaWYgKGRlbHRhLnJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihkZWx0YS5zdGFydFRpbWUsIHRoaXMubW9ub3RvbmljLCBkZWx0YVB2LCBkZWx0YS5yZXNldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdW1BY2N1bXVsYXRpb24ocHJldmlvdXMuc3RhcnRUaW1lLCB0aGlzLm1vbm90b25pYywgcHJldlB2ICsgZGVsdGFQdik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgREVMVEEgYWdncmVnYXRpb24gYnkgY29tcGFyaW5nIHR3byBjdW11bGF0aXZlIG1lYXN1cmVtZW50cy5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHByZXZQdiA9IHByZXZpb3VzLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjdXJyUHYgPSBjdXJyZW50LnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIFN1bUFnZ3JlZ2F0b3IgaXMgYSBtb25vdG9uaWMgb25lIGFuZCB0aGUgcHJldmlvdXMgcG9pbnQgdmFsdWUgaXNcbiAgICAgICAgICogZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgYSByZXNldCBpcyBkZWVtZWQgdG8gYmUgaGFwcGVuZWQuXG4gICAgICAgICAqIFJldHVybiB0aGUgY3VycmVudCBwb2ludCB2YWx1ZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGJlZW4gcmVzZXQuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5tb25vdG9uaWMgJiYgcHJldlB2ID4gY3VyclB2KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihjdXJyZW50LnN0YXJ0VGltZSwgdGhpcy5tb25vdG9uaWMsIGN1cnJQdiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdW1BY2N1bXVsYXRpb24oY3VycmVudC5zdGFydFRpbWUsIHRoaXMubW9ub3RvbmljLCBjdXJyUHYgLSBwcmV2UHYpO1xuICAgIH1cbiAgICB0b01ldHJpY0RhdGEoZGVzY3JpcHRvciwgYWdncmVnYXRpb25UZW1wb3JhbGl0eSwgYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLCBlbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgIGRhdGFQb2ludFR5cGU6IE1ldHJpY0RhdGFfMS5EYXRhUG9pbnRUeXBlLlNVTSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGlzTW9ub3RvbmljOiB0aGlzLm1vbm90b25pYyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlN1bUFnZ3JlZ2F0b3IgPSBTdW1BZ2dyZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3VtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdW1BZ2dyZWdhdG9yID0gZXhwb3J0cy5TdW1BY2N1bXVsYXRpb24gPSBleHBvcnRzLkxhc3RWYWx1ZUFnZ3JlZ2F0b3IgPSBleHBvcnRzLkxhc3RWYWx1ZUFjY3VtdWxhdGlvbiA9IGV4cG9ydHMuRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yID0gZXhwb3J0cy5FeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiA9IGV4cG9ydHMuSGlzdG9ncmFtQWdncmVnYXRvciA9IGV4cG9ydHMuSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gZXhwb3J0cy5Ecm9wQWdncmVnYXRvciA9IHZvaWQgMDtcbnZhciBEcm9wXzEgPSByZXF1aXJlKFwiLi9Ecm9wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRHJvcEFnZ3JlZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIERyb3BfMS5Ecm9wQWdncmVnYXRvcjsgfSB9KTtcbnZhciBIaXN0b2dyYW1fMSA9IHJlcXVpcmUoXCIuL0hpc3RvZ3JhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhpc3RvZ3JhbUFjY3VtdWxhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSGlzdG9ncmFtXzEuSGlzdG9ncmFtQWNjdW11bGF0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGlzdG9ncmFtQWdncmVnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSGlzdG9ncmFtXzEuSGlzdG9ncmFtQWdncmVnYXRvcjsgfSB9KTtcbnZhciBFeHBvbmVudGlhbEhpc3RvZ3JhbV8xID0gcmVxdWlyZShcIi4vRXhwb25lbnRpYWxIaXN0b2dyYW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRXhwb25lbnRpYWxIaXN0b2dyYW1fMS5FeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRXhwb25lbnRpYWxIaXN0b2dyYW1fMS5FeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0b3I7IH0gfSk7XG52YXIgTGFzdFZhbHVlXzEgPSByZXF1aXJlKFwiLi9MYXN0VmFsdWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMYXN0VmFsdWVBY2N1bXVsYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExhc3RWYWx1ZV8xLkxhc3RWYWx1ZUFjY3VtdWxhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxhc3RWYWx1ZUFnZ3JlZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExhc3RWYWx1ZV8xLkxhc3RWYWx1ZUFnZ3JlZ2F0b3I7IH0gfSk7XG52YXIgU3VtXzEgPSByZXF1aXJlKFwiLi9TdW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdW1BY2N1bXVsYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1bV8xLlN1bUFjY3VtdWxhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlN1bUFnZ3JlZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1bV8xLlN1bUFnZ3JlZ2F0b3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9BR0dSRUdBVElPTiA9IGV4cG9ydHMuRVhQT05FTlRJQUxfSElTVE9HUkFNX0FHR1JFR0FUSU9OID0gZXhwb3J0cy5ISVNUT0dSQU1fQUdHUkVHQVRJT04gPSBleHBvcnRzLkxBU1RfVkFMVUVfQUdHUkVHQVRJT04gPSBleHBvcnRzLlNVTV9BR0dSRUdBVElPTiA9IGV4cG9ydHMuRFJPUF9BR0dSRUdBVElPTiA9IGV4cG9ydHMuRGVmYXVsdEFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5FeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5FeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5IaXN0b2dyYW1BZ2dyZWdhdGlvbiA9IGV4cG9ydHMuTGFzdFZhbHVlQWdncmVnYXRpb24gPSBleHBvcnRzLlN1bUFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5Ecm9wQWdncmVnYXRpb24gPSB2b2lkIDA7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgYWdncmVnYXRvcl8xID0gcmVxdWlyZShcIi4uL2FnZ3JlZ2F0b3JcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L01ldHJpY0RhdGFcIik7XG4vKipcbiAqIFRoZSBkZWZhdWx0IGRyb3AgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIERyb3BBZ2dyZWdhdGlvbiB7XG4gICAgc3RhdGljIERFRkFVTFRfSU5TVEFOQ0UgPSBuZXcgYWdncmVnYXRvcl8xLkRyb3BBZ2dyZWdhdG9yKCk7XG4gICAgY3JlYXRlQWdncmVnYXRvcihfaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gRHJvcEFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0cy5Ecm9wQWdncmVnYXRpb24gPSBEcm9wQWdncmVnYXRpb247XG4vKipcbiAqIFRoZSBkZWZhdWx0IHN1bSBhZ2dyZWdhdGlvbi5cbiAqL1xuY2xhc3MgU3VtQWdncmVnYXRpb24ge1xuICAgIHN0YXRpYyBNT05PVE9OSUNfSU5TVEFOQ0UgPSBuZXcgYWdncmVnYXRvcl8xLlN1bUFnZ3JlZ2F0b3IodHJ1ZSk7XG4gICAgc3RhdGljIE5PTl9NT05PVE9OSUNfSU5TVEFOQ0UgPSBuZXcgYWdncmVnYXRvcl8xLlN1bUFnZ3JlZ2F0b3IoZmFsc2UpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoaW5zdHJ1bWVudCkge1xuICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkhJU1RPR1JBTToge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdW1BZ2dyZWdhdGlvbi5NT05PVE9OSUNfSU5TVEFOQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN1bUFnZ3JlZ2F0aW9uLk5PTl9NT05PVE9OSUNfSU5TVEFOQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlN1bUFnZ3JlZ2F0aW9uID0gU3VtQWdncmVnYXRpb247XG4vKipcbiAqIFRoZSBkZWZhdWx0IGxhc3QgdmFsdWUgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIExhc3RWYWx1ZUFnZ3JlZ2F0aW9uIHtcbiAgICBzdGF0aWMgREVGQVVMVF9JTlNUQU5DRSA9IG5ldyBhZ2dyZWdhdG9yXzEuTGFzdFZhbHVlQWdncmVnYXRvcigpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIExhc3RWYWx1ZUFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0cy5MYXN0VmFsdWVBZ2dyZWdhdGlvbiA9IExhc3RWYWx1ZUFnZ3JlZ2F0aW9uO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBoaXN0b2dyYW0gYWdncmVnYXRpb24uXG5cbiAqL1xuY2xhc3MgSGlzdG9ncmFtQWdncmVnYXRpb24ge1xuICAgIHN0YXRpYyBERUZBVUxUX0lOU1RBTkNFID0gbmV3IGFnZ3JlZ2F0b3JfMS5IaXN0b2dyYW1BZ2dyZWdhdG9yKFswLCA1LCAxMCwgMjUsIDUwLCA3NSwgMTAwLCAyNTAsIDUwMCwgNzUwLCAxMDAwLCAyNTAwLCA1MDAwLCA3NTAwLCAxMDAwMF0sIHRydWUpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0cy5IaXN0b2dyYW1BZ2dyZWdhdGlvbiA9IEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uO1xuLyoqXG4gKiBUaGUgZXhwbGljaXQgYnVja2V0IGhpc3RvZ3JhbSBhZ2dyZWdhdGlvbi5cbiAqL1xuY2xhc3MgRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbiB7XG4gICAgX3JlY29yZE1pbk1heDtcbiAgICBfYm91bmRhcmllcztcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm91bmRhcmllcyB0aGUgYnVja2V0IGJvdW5kYXJpZXMgb2YgdGhlIGhpc3RvZ3JhbSBhZ2dyZWdhdGlvblxuICAgICAqIEBwYXJhbSBfcmVjb3JkTWluTWF4IElmIHNldCB0byB0cnVlLCBtaW4gYW5kIG1heCB3aWxsIGJlIHJlY29yZGVkLiBPdGhlcndpc2UsIG1pbiBhbmQgbWF4IHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGJvdW5kYXJpZXMsIF9yZWNvcmRNaW5NYXggPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgICAgIGlmIChib3VuZGFyaWVzID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbiBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGV4cGxpY2l0IGJvdW5kYXJpZXMsIGlmIGEgc2luZ2xlIGJ1Y2tldCBoaXN0b2dyYW0gaXMgcmVxdWlyZWQsIHBsZWFzZSBwYXNzIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29weSB0aGUgYm91bmRhcmllcyBhcnJheSBmb3IgbW9kaWZpY2F0aW9uLlxuICAgICAgICBib3VuZGFyaWVzID0gYm91bmRhcmllcy5jb25jYXQoKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBhbiBvcmRlcmVkIHNldCB0byBiZSBhYmxlIHRvIGNvcnJlY3RseSBjb21wdXRlIGNvdW50IGZvciBlYWNoXG4gICAgICAgIC8vIGJvdW5kYXJ5IHNpbmNlIHdlJ2xsIGl0ZXJhdGUgb24gZWFjaCBpbiBvcmRlci5cbiAgICAgICAgYm91bmRhcmllcyA9IGJvdW5kYXJpZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICAvLyBSZW1vdmUgYWxsIEluZmluaXR5IGZyb20gdGhlIGJvdW5kYXJpZXMuXG4gICAgICAgIGNvbnN0IG1pbnVzSW5maW5pdHlJbmRleCA9IGJvdW5kYXJpZXMubGFzdEluZGV4T2YoLUluZmluaXR5KTtcbiAgICAgICAgbGV0IGluZmluaXR5SW5kZXggPSBib3VuZGFyaWVzLmluZGV4T2YoSW5maW5pdHkpO1xuICAgICAgICBpZiAoaW5maW5pdHlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGluZmluaXR5SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYm91bmRhcmllcyA9IGJvdW5kYXJpZXMuc2xpY2UobWludXNJbmZpbml0eUluZGV4ICsgMSwgaW5maW5pdHlJbmRleCk7XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhZ2dyZWdhdG9yXzEuSGlzdG9ncmFtQWdncmVnYXRvcih0aGlzLl9ib3VuZGFyaWVzLCB0aGlzLl9yZWNvcmRNaW5NYXgpO1xuICAgIH1cbn1cbmV4cG9ydHMuRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbiA9IEV4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb247XG5jbGFzcyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uIHtcbiAgICBfbWF4U2l6ZTtcbiAgICBfcmVjb3JkTWluTWF4O1xuICAgIGNvbnN0cnVjdG9yKF9tYXhTaXplID0gMTYwLCBfcmVjb3JkTWluTWF4ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9tYXhTaXplID0gX21heFNpemU7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhZ2dyZWdhdG9yXzEuRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yKHRoaXMuX21heFNpemUsIHRoaXMuX3JlY29yZE1pbk1heCk7XG4gICAgfVxufVxuZXhwb3J0cy5FeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uID0gRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdGlvbjtcbi8qKlxuICogVGhlIGRlZmF1bHQgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIERlZmF1bHRBZ2dyZWdhdGlvbiB7XG4gICAgX3Jlc29sdmUoaW5zdHJ1bWVudCkge1xuICAgICAgICAvLyBjYXN0IHRvIHVua25vd24gdG8gZGlzYWJsZSBjb21wbGFpbnRzIG9uIHRoZSAodW5yZWFjaGFibGUpIGZhbGxiYWNrLlxuICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuU1VNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0U6XG4gICAgICAgICAgICBjYXNlIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuTEFTVF9WQUxVRV9BR0dSRUdBVElPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkhJU1RPR1JBTToge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50LmFkdmljZS5leHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uKGluc3RydW1lbnQuYWR2aWNlLmV4cGxpY2l0QnVja2V0Qm91bmRhcmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkhJU1RPR1JBTV9BR0dSRUdBVElPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcGkuZGlhZy53YXJuKGBVbmFibGUgdG8gcmVjb2duaXplIGluc3RydW1lbnQgdHlwZTogJHtpbnN0cnVtZW50LnR5cGV9YCk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkRST1BfQUdHUkVHQVRJT047XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZShpbnN0cnVtZW50KS5jcmVhdGVBZ2dyZWdhdG9yKGluc3RydW1lbnQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdEFnZ3JlZ2F0aW9uID0gRGVmYXVsdEFnZ3JlZ2F0aW9uO1xuZXhwb3J0cy5EUk9QX0FHR1JFR0FUSU9OID0gbmV3IERyb3BBZ2dyZWdhdGlvbigpO1xuZXhwb3J0cy5TVU1fQUdHUkVHQVRJT04gPSBuZXcgU3VtQWdncmVnYXRpb24oKTtcbmV4cG9ydHMuTEFTVF9WQUxVRV9BR0dSRUdBVElPTiA9IG5ldyBMYXN0VmFsdWVBZ2dyZWdhdGlvbigpO1xuZXhwb3J0cy5ISVNUT0dSQU1fQUdHUkVHQVRJT04gPSBuZXcgSGlzdG9ncmFtQWdncmVnYXRpb24oKTtcbmV4cG9ydHMuRVhQT05FTlRJQUxfSElTVE9HUkFNX0FHR1JFR0FUSU9OID0gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRpb24oKTtcbmV4cG9ydHMuREVGQVVMVF9BR0dSRUdBVElPTiA9IG5ldyBEZWZhdWx0QWdncmVnYXRpb24oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvQWdncmVnYXRpb24gPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVHlwZSA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBBZ2dyZWdhdGlvbl8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25cIik7XG52YXIgQWdncmVnYXRpb25UeXBlO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGlvblR5cGUpIHtcbiAgICBBZ2dyZWdhdGlvblR5cGVbQWdncmVnYXRpb25UeXBlW1wiREVGQVVMVFwiXSA9IDBdID0gXCJERUZBVUxUXCI7XG4gICAgQWdncmVnYXRpb25UeXBlW0FnZ3JlZ2F0aW9uVHlwZVtcIkRST1BcIl0gPSAxXSA9IFwiRFJPUFwiO1xuICAgIEFnZ3JlZ2F0aW9uVHlwZVtBZ2dyZWdhdGlvblR5cGVbXCJTVU1cIl0gPSAyXSA9IFwiU1VNXCI7XG4gICAgQWdncmVnYXRpb25UeXBlW0FnZ3JlZ2F0aW9uVHlwZVtcIkxBU1RfVkFMVUVcIl0gPSAzXSA9IFwiTEFTVF9WQUxVRVwiO1xuICAgIEFnZ3JlZ2F0aW9uVHlwZVtBZ2dyZWdhdGlvblR5cGVbXCJFWFBMSUNJVF9CVUNLRVRfSElTVE9HUkFNXCJdID0gNF0gPSBcIkVYUExJQ0lUX0JVQ0tFVF9ISVNUT0dSQU1cIjtcbiAgICBBZ2dyZWdhdGlvblR5cGVbQWdncmVnYXRpb25UeXBlW1wiRVhQT05FTlRJQUxfSElTVE9HUkFNXCJdID0gNV0gPSBcIkVYUE9ORU5USUFMX0hJU1RPR1JBTVwiO1xufSkoQWdncmVnYXRpb25UeXBlID0gZXhwb3J0cy5BZ2dyZWdhdGlvblR5cGUgfHwgKGV4cG9ydHMuQWdncmVnYXRpb25UeXBlID0ge30pKTtcbmZ1bmN0aW9uIHRvQWdncmVnYXRpb24ob3B0aW9uKSB7XG4gICAgc3dpdGNoIChvcHRpb24udHlwZSkge1xuICAgICAgICBjYXNlIEFnZ3JlZ2F0aW9uVHlwZS5ERUZBVUxUOlxuICAgICAgICAgICAgcmV0dXJuIEFnZ3JlZ2F0aW9uXzEuREVGQVVMVF9BR0dSRUdBVElPTjtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuRFJPUDpcbiAgICAgICAgICAgIHJldHVybiBBZ2dyZWdhdGlvbl8xLkRST1BfQUdHUkVHQVRJT047XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLlNVTTpcbiAgICAgICAgICAgIHJldHVybiBBZ2dyZWdhdGlvbl8xLlNVTV9BR0dSRUdBVElPTjtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuTEFTVF9WQUxVRTpcbiAgICAgICAgICAgIHJldHVybiBBZ2dyZWdhdGlvbl8xLkxBU1RfVkFMVUVfQUdHUkVHQVRJT047XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLkVYUE9ORU5USUFMX0hJU1RPR1JBTToge1xuICAgICAgICAgICAgY29uc3QgZXhwT3B0aW9uID0gb3B0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGlvbl8xLkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRpb24oZXhwT3B0aW9uLm9wdGlvbnM/Lm1heFNpemUsIGV4cE9wdGlvbi5vcHRpb25zPy5yZWNvcmRNaW5NYXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLkVYUExJQ0lUX0JVQ0tFVF9ISVNUT0dSQU06IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cE9wdGlvbiA9IG9wdGlvbjtcbiAgICAgICAgICAgIGlmIChleHBPcHRpb24ub3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFnZ3JlZ2F0aW9uXzEuSElTVE9HUkFNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGlvbl8xLkV4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb24oZXhwT3B0aW9uLm9wdGlvbnM/LmJvdW5kYXJpZXMsIGV4cE9wdGlvbi5vcHRpb25zPy5yZWNvcmRNaW5NYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIEFnZ3JlZ2F0aW9uJyk7XG4gICAgfVxufVxuZXhwb3J0cy50b0FnZ3JlZ2F0aW9uID0gdG9BZ2dyZWdhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uT3B0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SID0gZXhwb3J0cy5ERUZBVUxUX0FHR1JFR0FUSU9OX1NFTEVDVE9SID0gdm9pZCAwO1xuY29uc3QgQWdncmVnYXRpb25UZW1wb3JhbGl0eV8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKTtcbmNvbnN0IEFnZ3JlZ2F0aW9uT3B0aW9uXzEgPSByZXF1aXJlKFwiLi4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvblwiKTtcbmNvbnN0IERFRkFVTFRfQUdHUkVHQVRJT05fU0VMRUNUT1IgPSBfaW5zdHJ1bWVudFR5cGUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IEFnZ3JlZ2F0aW9uT3B0aW9uXzEuQWdncmVnYXRpb25UeXBlLkRFRkFVTFQsXG4gICAgfTtcbn07XG5leHBvcnRzLkRFRkFVTFRfQUdHUkVHQVRJT05fU0VMRUNUT1IgPSBERUZBVUxUX0FHR1JFR0FUSU9OX1NFTEVDVE9SO1xuY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUiA9IF9pbnN0cnVtZW50VHlwZSA9PiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5DVU1VTEFUSVZFO1xuZXhwb3J0cy5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SID0gREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uU2VsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldHJpY1JlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgQWdncmVnYXRpb25TZWxlY3Rvcl8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25TZWxlY3RvclwiKTtcbi8qKlxuICogQSByZWdpc3RlcmVkIHJlYWRlciBvZiBtZXRyaWNzIHRoYXQsIHdoZW4gbGlua2VkIHRvIGEge0BsaW5rIE1ldHJpY1Byb2R1Y2VyfSwgb2ZmZXJzIGdsb2JhbFxuICogY29udHJvbCBvdmVyIG1ldHJpY3MuXG4gKi9cbmNsYXNzIE1ldHJpY1JlYWRlciB7XG4gICAgLy8gVHJhY2tzIHRoZSBzaHV0ZG93biBzdGF0ZS5cbiAgICAvLyBUT0RPOiB1c2UgQmluZE9uY2VQcm9taXNlIGhlcmUgb25jZSBhIG5ldyB2ZXJzaW9uIG9mIEBvcGVudGVsZW1ldHJ5L2NvcmUgaXMgYXZhaWxhYmxlLlxuICAgIF9zaHV0ZG93biA9IGZhbHNlO1xuICAgIC8vIEFkZGl0aW9uYWwgTWV0cmljUHJvZHVjZXJzIHdoaWNoIHdpbGwgYmUgY29tYmluZWQgd2l0aCB0aGUgU0RLJ3Mgb3V0cHV0XG4gICAgX21ldHJpY1Byb2R1Y2VycztcbiAgICAvLyBNZXRyaWNQcm9kdWNlciB1c2VkIGJ5IHRoaXMgaW5zdGFuY2Ugd2hpY2ggcHJvZHVjZXMgbWV0cmljcyBmcm9tIHRoZSBTREtcbiAgICBfc2RrTWV0cmljUHJvZHVjZXI7XG4gICAgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICBfYWdncmVnYXRpb25TZWxlY3RvcjtcbiAgICBfY2FyZGluYWxpdHlTZWxlY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uU2VsZWN0b3IgPVxuICAgICAgICAgICAgb3B0aW9ucz8uYWdncmVnYXRpb25TZWxlY3RvciA/PyBBZ2dyZWdhdGlvblNlbGVjdG9yXzEuREVGQVVMVF9BR0dSRUdBVElPTl9TRUxFQ1RPUjtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25UZW1wb3JhbGl0eVNlbGVjdG9yID1cbiAgICAgICAgICAgIG9wdGlvbnM/LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvciA/P1xuICAgICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uU2VsZWN0b3JfMS5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SO1xuICAgICAgICB0aGlzLl9tZXRyaWNQcm9kdWNlcnMgPSBvcHRpb25zPy5tZXRyaWNQcm9kdWNlcnMgPz8gW107XG4gICAgICAgIHRoaXMuX2NhcmRpbmFsaXR5U2VsZWN0b3IgPSBvcHRpb25zPy5jYXJkaW5hbGl0eVNlbGVjdG9yO1xuICAgIH1cbiAgICBzZXRNZXRyaWNQcm9kdWNlcihtZXRyaWNQcm9kdWNlcikge1xuICAgICAgICBpZiAodGhpcy5fc2RrTWV0cmljUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljUmVhZGVyIGNhbiBub3QgYmUgYm91bmQgdG8gYSBNZXRlclByb3ZpZGVyIGFnYWluLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nka01ldHJpY1Byb2R1Y2VyID0gbWV0cmljUHJvZHVjZXI7XG4gICAgICAgIHRoaXMub25Jbml0aWFsaXplZCgpO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRpb25TZWxlY3RvcihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIHNlbGVjdENhcmRpbmFsaXR5TGltaXQoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRpbmFsaXR5U2VsZWN0b3JcbiAgICAgICAgICAgID8gdGhpcy5fY2FyZGluYWxpdHlTZWxlY3RvcihpbnN0cnVtZW50VHlwZSlcbiAgICAgICAgICAgIDogMjAwMDsgLy8gZGVmYXVsdCB2YWx1ZSBpZiBubyBzZWxlY3RvciBpcyBwcm92aWRlZFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgb25jZSB0aGUgU0RLIGhhcyBpbml0aWFsaXplZCB0aGlzIHtAbGluayBNZXRyaWNSZWFkZXJ9XG4gICAgICogT3ZlcnJpZGluZyB0aGlzIG1ldGhvZCBpcyBvcHRpb25hbC5cbiAgICAgKi9cbiAgICBvbkluaXRpYWxpemVkKCkge1xuICAgICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGVtcHR5LlxuICAgIH1cbiAgICBhc3luYyBjb2xsZWN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nka01ldHJpY1Byb2R1Y2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljUmVhZGVyIGlzIG5vdCBib3VuZCB0byBhIE1ldHJpY1Byb2R1Y2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3Vic2VxdWVudCBpbnZvY2F0aW9ucyB0byBjb2xsZWN0IGFyZSBub3QgYWxsb3dlZC4gU0RLcyBTSE9VTEQgcmV0dXJuIHNvbWUgZmFpbHVyZSBmb3IgdGhlc2UgY2FsbHMuXG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRyaWNSZWFkZXIgaXMgc2h1dGRvd24nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbc2RrQ29sbGVjdGlvblJlc3VsdHMsIC4uLmFkZGl0aW9uYWxDb2xsZWN0aW9uUmVzdWx0c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICB0aGlzLl9zZGtNZXRyaWNQcm9kdWNlci5jb2xsZWN0KHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBvcHRpb25zPy50aW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9tZXRyaWNQcm9kdWNlcnMubWFwKHByb2R1Y2VyID0+IHByb2R1Y2VyLmNvbGxlY3Qoe1xuICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IG9wdGlvbnM/LnRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIF0pO1xuICAgICAgICAvLyBNZXJnZSB0aGUgcmVzdWx0cywga2VlcGluZyB0aGUgU0RLJ3MgUmVzb3VyY2VcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc2RrQ29sbGVjdGlvblJlc3VsdHMuZXJyb3JzLmNvbmNhdCgoMCwgdXRpbHNfMS5GbGF0TWFwKShhZGRpdGlvbmFsQ29sbGVjdGlvblJlc3VsdHMsIHJlc3VsdCA9PiByZXN1bHQuZXJyb3JzKSk7XG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gc2RrQ29sbGVjdGlvblJlc3VsdHMucmVzb3VyY2VNZXRyaWNzLnJlc291cmNlO1xuICAgICAgICBjb25zdCBzY29wZU1ldHJpY3MgPSBzZGtDb2xsZWN0aW9uUmVzdWx0cy5yZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzLmNvbmNhdCgoMCwgdXRpbHNfMS5GbGF0TWFwKShhZGRpdGlvbmFsQ29sbGVjdGlvblJlc3VsdHMsIHJlc3VsdCA9PiByZXN1bHQucmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzb3VyY2VNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9ycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgc2h1dGRvd24ob3B0aW9ucykge1xuICAgICAgICAvLyBEbyBub3QgY2FsbCBzaHV0ZG93biBhZ2FpbiBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC5cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGkuZGlhZy5lcnJvcignQ2Fubm90IGNhbGwgc2h1dGRvd24gdHdpY2UuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gdGltZW91dCBpZiB0aW1lb3V0TWlsbGlzIGlzIHVuZGVmaW5lZCBvciBudWxsLlxuICAgICAgICBpZiAob3B0aW9ucz8udGltZW91dE1pbGxpcyA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uU2h1dGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCB1dGlsc18xLmNhbGxXaXRoVGltZW91dCkodGhpcy5vblNodXRkb3duKCksIG9wdGlvbnMudGltZW91dE1pbGxpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbiAgICBhc3luYyBmb3JjZUZsdXNoKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGkuZGlhZy53YXJuKCdDYW5ub3QgZm9yY2VGbHVzaCBvbiBhbHJlYWR5IHNodXRkb3duIE1ldHJpY1JlYWRlci4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyB0aW1lb3V0IGlmIHRpbWVvdXRNaWxsaXMgaXMgdW5kZWZpbmVkIG9yIG51bGwuXG4gICAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0TWlsbGlzID09IG51bGwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Gb3JjZUZsdXNoKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgKDAsIHV0aWxzXzEuY2FsbFdpdGhUaW1lb3V0KSh0aGlzLm9uRm9yY2VGbHVzaCgpLCBvcHRpb25zLnRpbWVvdXRNaWxsaXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWV0cmljUmVhZGVyID0gTWV0cmljUmVhZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0cmljUmVhZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IE1ldHJpY1JlYWRlcl8xID0gcmVxdWlyZShcIi4vTWV0cmljUmVhZGVyXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbi8qKlxuICoge0BsaW5rIE1ldHJpY1JlYWRlcn0gd2hpY2ggY29sbGVjdHMgbWV0cmljcyBiYXNlZCBvbiBhIHVzZXItY29uZmlndXJhYmxlIHRpbWUgaW50ZXJ2YWwsIGFuZCBwYXNzZXMgdGhlIG1ldHJpY3MgdG9cbiAqIHRoZSBjb25maWd1cmVkIHtAbGluayBQdXNoTWV0cmljRXhwb3J0ZXJ9XG4gKi9cbmNsYXNzIFBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyIGV4dGVuZHMgTWV0cmljUmVhZGVyXzEuTWV0cmljUmVhZGVyIHtcbiAgICBfaW50ZXJ2YWw7XG4gICAgX2V4cG9ydGVyO1xuICAgIF9leHBvcnRJbnRlcnZhbDtcbiAgICBfZXhwb3J0VGltZW91dDtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uU2VsZWN0b3I6IG9wdGlvbnMuZXhwb3J0ZXIuc2VsZWN0QWdncmVnYXRpb24/LmJpbmQob3B0aW9ucy5leHBvcnRlciksXG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5U2VsZWN0b3I6IG9wdGlvbnMuZXhwb3J0ZXIuc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eT8uYmluZChvcHRpb25zLmV4cG9ydGVyKSxcbiAgICAgICAgICAgIG1ldHJpY1Byb2R1Y2Vyczogb3B0aW9ucy5tZXRyaWNQcm9kdWNlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy5leHBvcnRJbnRlcnZhbE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdleHBvcnRJbnRlcnZhbE1pbGxpcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb3J0VGltZW91dE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydFRpbWVvdXRNaWxsaXMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ2V4cG9ydFRpbWVvdXRNaWxsaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydFRpbWVvdXRNaWxsaXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3B0aW9ucy5leHBvcnRJbnRlcnZhbE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzIDwgb3B0aW9ucy5leHBvcnRUaW1lb3V0TWlsbGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignZXhwb3J0SW50ZXJ2YWxNaWxsaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZXhwb3J0VGltZW91dE1pbGxpcycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V4cG9ydEludGVydmFsID0gb3B0aW9ucy5leHBvcnRJbnRlcnZhbE1pbGxpcyA/PyA2MDAwMDtcbiAgICAgICAgdGhpcy5fZXhwb3J0VGltZW91dCA9IG9wdGlvbnMuZXhwb3J0VGltZW91dE1pbGxpcyA/PyAzMDAwMDtcbiAgICAgICAgdGhpcy5fZXhwb3J0ZXIgPSBvcHRpb25zLmV4cG9ydGVyO1xuICAgIH1cbiAgICBhc3luYyBfcnVuT25jZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCB1dGlsc18xLmNhbGxXaXRoVGltZW91dCkodGhpcy5fZG9SdW4oKSwgdGhpcy5fZXhwb3J0VGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIHV0aWxzXzEuVGltZW91dEVycm9yKSB7XG4gICAgICAgICAgICAgICAgYXBpLmRpYWcuZXJyb3IoJ0V4cG9ydCB0b29rIGxvbmdlciB0aGFuICVzIG1pbGxpc2Vjb25kcyBhbmQgdGltZWQgb3V0LicsIHRoaXMuX2V4cG9ydFRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKShlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9kb1J1bigpIHtcbiAgICAgICAgY29uc3QgeyByZXNvdXJjZU1ldHJpY3MsIGVycm9ycyB9ID0gYXdhaXQgdGhpcy5jb2xsZWN0KHtcbiAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IHRoaXMuX2V4cG9ydFRpbWVvdXQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLmVycm9yKCdQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjogbWV0cmljcyBjb2xsZWN0aW9uIGVycm9ycycsIC4uLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlTWV0cmljcy5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlc291cmNlTWV0cmljcy5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzPy4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXBpLmRpYWcuZGVidWcoJ0Vycm9yIHdoaWxlIHJlc29sdmluZyBhc3luYyBwb3J0aW9uIG9mIHJlc291cmNlOiAnLCBlKTtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlTWV0cmljcy5zY29wZU1ldHJpY3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29yZV8xLmludGVybmFsLl9leHBvcnQodGhpcy5fZXhwb3J0ZXIsIHJlc291cmNlTWV0cmljcyk7XG4gICAgICAgIGlmIChyZXN1bHQuY29kZSAhPT0gY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjogbWV0cmljcyBleHBvcnQgZmFpbGVkIChlcnJvciAke3Jlc3VsdC5lcnJvcn0pYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Jbml0aWFsaXplZCgpIHtcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgaW50ZXJ2YWwgYXMgc29vbiBhcyB0aGlzIHJlYWRlciBpcyBpbml0aWFsaXplZCBhbmQga2VlcCBoYW5kbGUgZm9yIHNodXRkb3duLlxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX3J1bk9uY2UgbmV2ZXIgcmVqZWN0cy4gVXNpbmcgdm9pZCBvcGVyYXRvciB0byBzdXBwcmVzcyBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXMuXG4gICAgICAgICAgICB2b2lkIHRoaXMuX3J1bk9uY2UoKTtcbiAgICAgICAgfSwgdGhpcy5fZXhwb3J0SW50ZXJ2YWwpO1xuICAgICAgICAvLyBkZXBlbmRpbmcgb24gcnVudGltZSwgdGhpcyBtYXkgYmUgYSAnbnVtYmVyJyBvciBOb2RlSlMuVGltZW91dFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2ludGVydmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwudW5yZWYoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkZvcmNlRmx1c2goKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3J1bk9uY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCgpO1xuICAgIH1cbiAgICBhc3luYyBvblNodXRkb3duKCkge1xuICAgICAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMub25Gb3JjZUZsdXNoKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgfVxufVxuZXhwb3J0cy5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlciA9IFBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluTWVtb3J5TWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8qKlxuICogSW4tbWVtb3J5IE1ldHJpY3MgRXhwb3J0ZXIgaXMgYSBQdXNoIE1ldHJpYyBFeHBvcnRlclxuICogd2hpY2ggYWNjdW11bGF0ZXMgbWV0cmljcyBkYXRhIGluIHRoZSBsb2NhbCBtZW1vcnkgYW5kXG4gKiBhbGxvd3MgdG8gaW5zcGVjdCBpdCAodXNlZnVsIGZvciBlLmcuIHVuaXQgdGVzdHMpLlxuICovXG5jbGFzcyBJbk1lbW9yeU1ldHJpY0V4cG9ydGVyIHtcbiAgICBfc2h1dGRvd24gPSBmYWxzZTtcbiAgICBfYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICBfbWV0cmljcyA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZWREb2NcbiAgICAgKi9cbiAgICBleHBvcnQobWV0cmljcywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgLy8gQXZvaWQgc3RvcmluZyBtZXRyaWNzIHdoZW4gZXhwb3J0ZXIgaXMgc2h1dGRvd25cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlc3VsdENhbGxiYWNrKHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVEIH0pLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljcyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pLCAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgdGhlIGNvbGxlY3RlZCByZXNvdXJjZSBtZXRyaWNzXG4gICAgICogQHJldHVybnMgUmVzb3VyY2VNZXRyaWNzW11cbiAgICAgKi9cbiAgICBnZXRNZXRyaWNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0cmljcztcbiAgICB9XG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fbWV0cmljcyA9IFtdO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KF9pbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMuX3NodXRkb3duID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW5NZW1vcnlNZXRyaWNFeHBvcnRlciA9IEluTWVtb3J5TWV0cmljRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Jbk1lbW9yeU1ldHJpY0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbnNvbGVNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IEFnZ3JlZ2F0aW9uU2VsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL0FnZ3JlZ2F0aW9uU2VsZWN0b3JcIik7XG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFB1c2hNZXRyaWNFeHBvcnRlcn0gdGhhdCBwcmludHMgbWV0cmljcyB0byB0aGVcbiAqIGNvbnNvbGUuIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuXG4gKlxuICogTk9URTogVGhpcyB7QGxpbmsgUHVzaE1ldHJpY0V4cG9ydGVyfSBpcyBpbnRlbmRlZCBmb3IgZGlhZ25vc3RpY3MgdXNlIG9ubHksIG91dHB1dCByZW5kZXJlZCB0byB0aGUgY29uc29sZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5jbGFzcyBDb25zb2xlTWV0cmljRXhwb3J0ZXIge1xuICAgIF9zaHV0ZG93biA9IGZhbHNlO1xuICAgIF90ZW1wb3JhbGl0eVNlbGVjdG9yO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fdGVtcG9yYWxpdHlTZWxlY3RvciA9XG4gICAgICAgICAgICBvcHRpb25zPy50ZW1wb3JhbGl0eVNlbGVjdG9yID8/IEFnZ3JlZ2F0aW9uU2VsZWN0b3JfMS5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SO1xuICAgIH1cbiAgICBleHBvcnQobWV0cmljcywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZXhwb3J0ZXIgaXMgc2h1dHRpbmcgZG93biwgYnkgc3BlYywgd2UgbmVlZCB0byByZXR1cm4gRkFJTEVEIGFzIGV4cG9ydCByZXN1bHRcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZShyZXN1bHRDYWxsYmFjaywgeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvbnNvbGVNZXRyaWNFeHBvcnRlci5fc2VuZE1ldHJpY3MobWV0cmljcywgcmVzdWx0Q2FsbGJhY2spO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoX2luc3RydW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wb3JhbGl0eVNlbGVjdG9yKF9pbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9zaHV0ZG93biA9IHRydWU7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgc3RhdGljIF9zZW5kTWV0cmljcyhtZXRyaWNzLCBkb25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGVNZXRyaWNzIG9mIG1ldHJpY3Muc2NvcGVNZXRyaWNzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1ldHJpYyBvZiBzY29wZU1ldHJpY3MubWV0cmljcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogbWV0cmljLmRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQb2ludFR5cGU6IG1ldHJpYy5kYXRhUG9pbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUG9pbnRzOiBtZXRyaWMuZGF0YVBvaW50cyxcbiAgICAgICAgICAgICAgICB9LCB7IGRlcHRoOiBudWxsIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvbmUoeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29uc29sZU1ldHJpY0V4cG9ydGVyID0gQ29uc29sZU1ldHJpY0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29uc29sZU1ldHJpY0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WaWV3UmVnaXN0cnkgPSB2b2lkIDA7XG5jbGFzcyBWaWV3UmVnaXN0cnkge1xuICAgIF9yZWdpc3RlcmVkVmlld3MgPSBbXTtcbiAgICBhZGRWaWV3KHZpZXcpIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZFZpZXdzLnB1c2godmlldyk7XG4gICAgfVxuICAgIGZpbmRWaWV3cyhpbnN0cnVtZW50LCBtZXRlcikge1xuICAgICAgICBjb25zdCB2aWV3cyA9IHRoaXMuX3JlZ2lzdGVyZWRWaWV3cy5maWx0ZXIocmVnaXN0ZXJlZFZpZXcgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9tYXRjaEluc3RydW1lbnQocmVnaXN0ZXJlZFZpZXcuaW5zdHJ1bWVudFNlbGVjdG9yLCBpbnN0cnVtZW50KSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21hdGNoTWV0ZXIocmVnaXN0ZXJlZFZpZXcubWV0ZXJTZWxlY3RvciwgbWV0ZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2aWV3cztcbiAgICB9XG4gICAgX21hdGNoSW5zdHJ1bWVudChzZWxlY3RvciwgaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gKChzZWxlY3Rvci5nZXRUeXBlKCkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgaW5zdHJ1bWVudC50eXBlID09PSBzZWxlY3Rvci5nZXRUeXBlKCkpICYmXG4gICAgICAgICAgICBzZWxlY3Rvci5nZXROYW1lRmlsdGVyKCkubWF0Y2goaW5zdHJ1bWVudC5uYW1lKSAmJlxuICAgICAgICAgICAgc2VsZWN0b3IuZ2V0VW5pdEZpbHRlcigpLm1hdGNoKGluc3RydW1lbnQudW5pdCkpO1xuICAgIH1cbiAgICBfbWF0Y2hNZXRlcihzZWxlY3RvciwgbWV0ZXIpIHtcbiAgICAgICAgcmV0dXJuIChzZWxlY3Rvci5nZXROYW1lRmlsdGVyKCkubWF0Y2gobWV0ZXIubmFtZSkgJiZcbiAgICAgICAgICAgIChtZXRlci52ZXJzaW9uID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBzZWxlY3Rvci5nZXRWZXJzaW9uRmlsdGVyKCkubWF0Y2gobWV0ZXIudmVyc2lvbikpICYmXG4gICAgICAgICAgICAobWV0ZXIuc2NoZW1hVXJsID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBzZWxlY3Rvci5nZXRTY2hlbWFVcmxGaWx0ZXIoKS5tYXRjaChtZXRlci5zY2hlbWFVcmwpKSk7XG4gICAgfVxufVxuZXhwb3J0cy5WaWV3UmVnaXN0cnkgPSBWaWV3UmVnaXN0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WaWV3UmVnaXN0cnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmFsaWROYW1lID0gZXhwb3J0cy5pc0Rlc2NyaXB0b3JDb21wYXRpYmxlV2l0aCA9IGV4cG9ydHMuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3JXaXRoVmlldyA9IGV4cG9ydHMuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5mdW5jdGlvbiBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcihuYW1lLCB0eXBlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEludmFsaWQgbWV0cmljIG5hbWU6IFwiJHtuYW1lfVwiLiBUaGUgbWV0cmljIG5hbWUgc2hvdWxkIGJlIGEgQVNDSUkgc3RyaW5nIHdpdGggYSBsZW5ndGggbm8gZ3JlYXRlciB0aGFuIDI1NSBjaGFyYWN0ZXJzLmApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICAgIHVuaXQ6IG9wdGlvbnM/LnVuaXQgPz8gJycsXG4gICAgICAgIHZhbHVlVHlwZTogb3B0aW9ucz8udmFsdWVUeXBlID8/IGFwaV8xLlZhbHVlVHlwZS5ET1VCTEUsXG4gICAgICAgIGFkdmljZTogb3B0aW9ucz8uYWR2aWNlID8/IHt9LFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yID0gY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3I7XG5mdW5jdGlvbiBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcldpdGhWaWV3KHZpZXcsIGluc3RydW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB2aWV3Lm5hbWUgPz8gaW5zdHJ1bWVudC5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdmlldy5kZXNjcmlwdGlvbiA/PyBpbnN0cnVtZW50LmRlc2NyaXB0aW9uLFxuICAgICAgICB0eXBlOiBpbnN0cnVtZW50LnR5cGUsXG4gICAgICAgIHVuaXQ6IGluc3RydW1lbnQudW5pdCxcbiAgICAgICAgdmFsdWVUeXBlOiBpbnN0cnVtZW50LnZhbHVlVHlwZSxcbiAgICAgICAgYWR2aWNlOiBpbnN0cnVtZW50LmFkdmljZSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcldpdGhWaWV3ID0gY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3JXaXRoVmlldztcbmZ1bmN0aW9uIGlzRGVzY3JpcHRvckNvbXBhdGlibGVXaXRoKGRlc2NyaXB0b3IsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIC8vIE5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZ3MuXG4gICAgcmV0dXJuICgoMCwgdXRpbHNfMS5lcXVhbHNDYXNlSW5zZW5zaXRpdmUpKGRlc2NyaXB0b3IubmFtZSwgb3RoZXJEZXNjcmlwdG9yLm5hbWUpICYmXG4gICAgICAgIGRlc2NyaXB0b3IudW5pdCA9PT0gb3RoZXJEZXNjcmlwdG9yLnVuaXQgJiZcbiAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBvdGhlckRlc2NyaXB0b3IudHlwZSAmJlxuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlVHlwZSA9PT0gb3RoZXJEZXNjcmlwdG9yLnZhbHVlVHlwZSk7XG59XG5leHBvcnRzLmlzRGVzY3JpcHRvckNvbXBhdGlibGVXaXRoID0gaXNEZXNjcmlwdG9yQ29tcGF0aWJsZVdpdGg7XG4vLyBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBubyBncmVhdGVyIHRoYW4gMjU1IGNoYXJhY3RlcnMuXG4vLyBOQjogdGhlIGZpcnN0IGNoYXJhY3RlciBjb3VudGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVzdC5cbmNvbnN0IE5BTUVfUkVHRVhQID0gL15bYS16XVthLXowLTlfLlxcLS9dezAsMjU0fSQvaTtcbmZ1bmN0aW9uIGlzVmFsaWROYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5tYXRjaChOQU1FX1JFR0VYUCkgIT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNWYWxpZE5hbWUgPSBpc1ZhbGlkTmFtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluc3RydW1lbnREZXNjcmlwdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc09ic2VydmFibGVJbnN0cnVtZW50ID0gZXhwb3J0cy5PYnNlcnZhYmxlVXBEb3duQ291bnRlckluc3RydW1lbnQgPSBleHBvcnRzLk9ic2VydmFibGVHYXVnZUluc3RydW1lbnQgPSBleHBvcnRzLk9ic2VydmFibGVDb3VudGVySW5zdHJ1bWVudCA9IGV4cG9ydHMuT2JzZXJ2YWJsZUluc3RydW1lbnQgPSBleHBvcnRzLkhpc3RvZ3JhbUluc3RydW1lbnQgPSBleHBvcnRzLkdhdWdlSW5zdHJ1bWVudCA9IGV4cG9ydHMuQ291bnRlckluc3RydW1lbnQgPSBleHBvcnRzLlVwRG93bkNvdW50ZXJJbnN0cnVtZW50ID0gZXhwb3J0cy5TeW5jSW5zdHJ1bWVudCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY2xhc3MgU3luY0luc3RydW1lbnQge1xuICAgIF93cml0YWJsZU1ldHJpY1N0b3JhZ2U7XG4gICAgX2Rlc2NyaXB0b3I7XG4gICAgY29uc3RydWN0b3IoX3dyaXRhYmxlTWV0cmljU3RvcmFnZSwgX2Rlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVNZXRyaWNTdG9yYWdlID0gX3dyaXRhYmxlTWV0cmljU3RvcmFnZTtcbiAgICAgICAgdGhpcy5fZGVzY3JpcHRvciA9IF9kZXNjcmlwdG9yO1xuICAgIH1cbiAgICBfcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzID0ge30sIGNvbnRleHQgPSBhcGlfMS5jb250ZXh0LmFjdGl2ZSgpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYG5vbi1udW1iZXIgdmFsdWUgcHJvdmlkZWQgdG8gbWV0cmljICR7dGhpcy5fZGVzY3JpcHRvci5uYW1lfTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVzY3JpcHRvci52YWx1ZVR5cGUgPT09IGFwaV8xLlZhbHVlVHlwZS5JTlQgJiZcbiAgICAgICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJTlQgdmFsdWUgdHlwZSBjYW5ub3QgYWNjZXB0IGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgZm9yICR7dGhpcy5fZGVzY3JpcHRvci5uYW1lfSwgaWdub3JpbmcgdGhlIGZyYWN0aW9uYWwgZGlnaXRzLmApO1xuICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnRydW5jKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBub24tZmluaXRlIHZhbHVlcy5cbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd3JpdGFibGVNZXRyaWNTdG9yYWdlLnJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY29udGV4dCwgKDAsIGNvcmVfMS5taWxsaXNUb0hyVGltZSkoRGF0ZS5ub3coKSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3luY0luc3RydW1lbnQgPSBTeW5jSW5zdHJ1bWVudDtcbi8qKlxuICogVGhlIGNsYXNzIGltcGxlbWVudHMge0BsaW5rIFVwRG93bkNvdW50ZXJ9IGludGVyZmFjZS5cbiAqL1xuY2xhc3MgVXBEb3duQ291bnRlckluc3RydW1lbnQgZXh0ZW5kcyBTeW5jSW5zdHJ1bWVudCB7XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IHZhbHVlIG9mIGNvdW50ZXIgYnkgdGhlIGlucHV0LiBJbnB1dHMgbWF5IGJlIG5lZ2F0aXZlLlxuICAgICAqL1xuICAgIGFkZCh2YWx1ZSwgYXR0cmlidXRlcywgY3R4KSB7XG4gICAgICAgIHRoaXMuX3JlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY3R4KTtcbiAgICB9XG59XG5leHBvcnRzLlVwRG93bkNvdW50ZXJJbnN0cnVtZW50ID0gVXBEb3duQ291bnRlckluc3RydW1lbnQ7XG4vKipcbiAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHtAbGluayBDb3VudGVyfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIENvdW50ZXJJbnN0cnVtZW50IGV4dGVuZHMgU3luY0luc3RydW1lbnQge1xuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCB2YWx1ZSBvZiBjb3VudGVyIGJ5IHRoZSBpbnB1dC4gSW5wdXRzIG1heSBub3QgYmUgbmVnYXRpdmUuXG4gICAgICovXG4gICAgYWRkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBuZWdhdGl2ZSB2YWx1ZSBwcm92aWRlZCB0byBjb3VudGVyICR7dGhpcy5fZGVzY3JpcHRvci5uYW1lfTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCk7XG4gICAgfVxufVxuZXhwb3J0cy5Db3VudGVySW5zdHJ1bWVudCA9IENvdW50ZXJJbnN0cnVtZW50O1xuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgR2F1Z2V9IGludGVyZmFjZS5cbiAqL1xuY2xhc3MgR2F1Z2VJbnN0cnVtZW50IGV4dGVuZHMgU3luY0luc3RydW1lbnQge1xuICAgIC8qKlxuICAgICAqIFJlY29yZHMgYSBtZWFzdXJlbWVudC5cbiAgICAgKi9cbiAgICByZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCkge1xuICAgICAgICB0aGlzLl9yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCk7XG4gICAgfVxufVxuZXhwb3J0cy5HYXVnZUluc3RydW1lbnQgPSBHYXVnZUluc3RydW1lbnQ7XG4vKipcbiAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHtAbGluayBIaXN0b2dyYW19IGludGVyZmFjZS5cbiAqL1xuY2xhc3MgSGlzdG9ncmFtSW5zdHJ1bWVudCBleHRlbmRzIFN5bmNJbnN0cnVtZW50IHtcbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIGEgbWVhc3VyZW1lbnQuIFZhbHVlIG9mIHRoZSBtZWFzdXJlbWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZS5cbiAgICAgKi9cbiAgICByZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCkge1xuICAgICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYG5lZ2F0aXZlIHZhbHVlIHByb3ZpZGVkIHRvIGhpc3RvZ3JhbSAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydHMuSGlzdG9ncmFtSW5zdHJ1bWVudCA9IEhpc3RvZ3JhbUluc3RydW1lbnQ7XG5jbGFzcyBPYnNlcnZhYmxlSW5zdHJ1bWVudCB7XG4gICAgX29ic2VydmFibGVSZWdpc3RyeTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX21ldHJpY1N0b3JhZ2VzO1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfZGVzY3JpcHRvcjtcbiAgICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yLCBtZXRyaWNTdG9yYWdlcywgX29ic2VydmFibGVSZWdpc3RyeSkge1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlUmVnaXN0cnkgPSBfb2JzZXJ2YWJsZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fbWV0cmljU3RvcmFnZXMgPSBtZXRyaWNTdG9yYWdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHNlZSB7T2JzZXJ2YWJsZS5hZGRDYWxsYmFja31cbiAgICAgKi9cbiAgICBhZGRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlUmVnaXN0cnkuYWRkQ2FsbGJhY2soY2FsbGJhY2ssIHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtPYnNlcnZhYmxlLnJlbW92ZUNhbGxiYWNrfVxuICAgICAqL1xuICAgIHJlbW92ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX29ic2VydmFibGVSZWdpc3RyeS5yZW1vdmVDYWxsYmFjayhjYWxsYmFjaywgdGhpcyk7XG4gICAgfVxufVxuZXhwb3J0cy5PYnNlcnZhYmxlSW5zdHJ1bWVudCA9IE9ic2VydmFibGVJbnN0cnVtZW50O1xuY2xhc3MgT2JzZXJ2YWJsZUNvdW50ZXJJbnN0cnVtZW50IGV4dGVuZHMgT2JzZXJ2YWJsZUluc3RydW1lbnQge1xufVxuZXhwb3J0cy5PYnNlcnZhYmxlQ291bnRlckluc3RydW1lbnQgPSBPYnNlcnZhYmxlQ291bnRlckluc3RydW1lbnQ7XG5jbGFzcyBPYnNlcnZhYmxlR2F1Z2VJbnN0cnVtZW50IGV4dGVuZHMgT2JzZXJ2YWJsZUluc3RydW1lbnQge1xufVxuZXhwb3J0cy5PYnNlcnZhYmxlR2F1Z2VJbnN0cnVtZW50ID0gT2JzZXJ2YWJsZUdhdWdlSW5zdHJ1bWVudDtcbmNsYXNzIE9ic2VydmFibGVVcERvd25Db3VudGVySW5zdHJ1bWVudCBleHRlbmRzIE9ic2VydmFibGVJbnN0cnVtZW50IHtcbn1cbmV4cG9ydHMuT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJJbnN0cnVtZW50ID0gT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJJbnN0cnVtZW50O1xuZnVuY3Rpb24gaXNPYnNlcnZhYmxlSW5zdHJ1bWVudChpdCkge1xuICAgIHJldHVybiBpdCBpbnN0YW5jZW9mIE9ic2VydmFibGVJbnN0cnVtZW50O1xufVxuZXhwb3J0cy5pc09ic2VydmFibGVJbnN0cnVtZW50ID0gaXNPYnNlcnZhYmxlSW5zdHJ1bWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluc3RydW1lbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXRlciA9IHZvaWQgMDtcbmNvbnN0IEluc3RydW1lbnREZXNjcmlwdG9yXzEgPSByZXF1aXJlKFwiLi9JbnN0cnVtZW50RGVzY3JpcHRvclwiKTtcbmNvbnN0IEluc3RydW1lbnRzXzEgPSByZXF1aXJlKFwiLi9JbnN0cnVtZW50c1wiKTtcbmNvbnN0IE1ldHJpY0RhdGFfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9NZXRyaWNEYXRhXCIpO1xuLyoqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIHtAbGluayBJTWV0ZXJ9IGludGVyZmFjZS5cbiAqL1xuY2xhc3MgTWV0ZXIge1xuICAgIF9tZXRlclNoYXJlZFN0YXRlO1xuICAgIGNvbnN0cnVjdG9yKF9tZXRlclNoYXJlZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUgPSBfbWV0ZXJTaGFyZWRTdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIEdhdWdlfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZUdhdWdlKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9ICgwLCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKShuYW1lLCBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0UsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgSW5zdHJ1bWVudHNfMS5HYXVnZUluc3RydW1lbnQoc3RvcmFnZSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBIaXN0b2dyYW19IGluc3RydW1lbnQuXG4gICAgICovXG4gICAgY3JlYXRlSGlzdG9ncmFtKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9ICgwLCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKShuYW1lLCBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuSElTVE9HUkFNLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IEluc3RydW1lbnRzXzEuSGlzdG9ncmFtSW5zdHJ1bWVudChzdG9yYWdlLCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIENvdW50ZXJ9IGluc3RydW1lbnQuXG4gICAgICovXG4gICAgY3JlYXRlQ291bnRlcihuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikobmFtZSwgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkNPVU5URVIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgSW5zdHJ1bWVudHNfMS5Db3VudGVySW5zdHJ1bWVudChzdG9yYWdlLCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIFVwRG93bkNvdW50ZXJ9IGluc3RydW1lbnQuXG4gICAgICovXG4gICAgY3JlYXRlVXBEb3duQ291bnRlcihuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikobmFtZSwgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUiwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVtZW50c18xLlVwRG93bkNvdW50ZXJJbnN0cnVtZW50KHN0b3JhZ2UsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB7QGxpbmsgT2JzZXJ2YWJsZUdhdWdlfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZU9ic2VydmFibGVHYXVnZShuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikobmFtZSwgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfR0FVR0UsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJBc3luY01ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgSW5zdHJ1bWVudHNfMS5PYnNlcnZhYmxlR2F1Z2VJbnN0cnVtZW50KGRlc2NyaXB0b3IsIHN0b3JhZ2VzLCB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLm9ic2VydmFibGVSZWdpc3RyeSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBPYnNlcnZhYmxlQ291bnRlcn0gaW5zdHJ1bWVudC5cbiAgICAgKi9cbiAgICBjcmVhdGVPYnNlcnZhYmxlQ291bnRlcihuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikobmFtZSwgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUiwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3RlckFzeW5jTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVtZW50c18xLk9ic2VydmFibGVDb3VudGVySW5zdHJ1bWVudChkZXNjcmlwdG9yLCBzdG9yYWdlcywgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB7QGxpbmsgT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJ9IGluc3RydW1lbnQuXG4gICAgICovXG4gICAgY3JlYXRlT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXIobmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IpKG5hbWUsIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUiwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3RlckFzeW5jTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVtZW50c18xLk9ic2VydmFibGVVcERvd25Db3VudGVySW5zdHJ1bWVudChkZXNjcmlwdG9yLCBzdG9yYWdlcywgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5hZGRCYXRjaE9ic2VydmFibGVDYWxsYmFja31cbiAgICAgKi9cbiAgICBhZGRCYXRjaE9ic2VydmFibGVDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkuYWRkQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5yZW1vdmVCYXRjaE9ic2VydmFibGVDYWxsYmFja31cbiAgICAgKi9cbiAgICByZW1vdmVCYXRjaE9ic2VydmFibGVDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkucmVtb3ZlQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWV0ZXIgPSBNZXRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXRyaWNTdG9yYWdlID0gdm9pZCAwO1xuY29uc3QgSW5zdHJ1bWVudERlc2NyaXB0b3JfMSA9IHJlcXVpcmUoXCIuLi9JbnN0cnVtZW50RGVzY3JpcHRvclwiKTtcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICpcbiAqIFJlcHJlc2VudHMgYSBzdG9yYWdlIGZyb20gd2hpY2ggd2UgY2FuIGNvbGxlY3QgbWV0cmljcy5cbiAqL1xuY2xhc3MgTWV0cmljU3RvcmFnZSB7XG4gICAgX2luc3RydW1lbnREZXNjcmlwdG9yO1xuICAgIGNvbnN0cnVjdG9yKF9pbnN0cnVtZW50RGVzY3JpcHRvcikge1xuICAgICAgICB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvciA9IF9pbnN0cnVtZW50RGVzY3JpcHRvcjtcbiAgICB9XG4gICAgZ2V0SW5zdHJ1bWVudERlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvcjtcbiAgICB9XG4gICAgdXBkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikodGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IubmFtZSwgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IudHlwZSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvci52YWx1ZVR5cGUsXG4gICAgICAgICAgICB1bml0OiB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvci51bml0LFxuICAgICAgICAgICAgYWR2aWNlOiB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvci5hZHZpY2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuTWV0cmljU3RvcmFnZSA9IE1ldHJpY1N0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNTdG9yYWdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BdHRyaWJ1dGVIYXNoTWFwID0gZXhwb3J0cy5IYXNoTWFwID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNsYXNzIEhhc2hNYXAge1xuICAgIF9oYXNoO1xuICAgIF92YWx1ZU1hcCA9IG5ldyBNYXAoKTtcbiAgICBfa2V5TWFwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKF9oYXNoKSB7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBfaGFzaDtcbiAgICB9XG4gICAgZ2V0KGtleSwgaGFzaENvZGUpIHtcbiAgICAgICAgaGFzaENvZGUgPz89IHRoaXMuX2hhc2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlTWFwLmdldChoYXNoQ29kZSk7XG4gICAgfVxuICAgIGdldE9yRGVmYXVsdChrZXksIGRlZmF1bHRGYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLl9oYXNoKGtleSk7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZU1hcC5oYXMoaGFzaCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZU1hcC5nZXQoaGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsID0gZGVmYXVsdEZhY3RvcnkoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9rZXlNYXAuaGFzKGhhc2gpKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYXAuc2V0KGhhc2gsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWVNYXAuc2V0KGhhc2gsIHZhbCk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHNldChrZXksIHZhbHVlLCBoYXNoQ29kZSkge1xuICAgICAgICBoYXNoQ29kZSA/Pz0gdGhpcy5faGFzaChrZXkpO1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hcC5oYXMoaGFzaENvZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYXAuc2V0KGhhc2hDb2RlLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlTWFwLnNldChoYXNoQ29kZSwgdmFsdWUpO1xuICAgIH1cbiAgICBoYXMoa2V5LCBoYXNoQ29kZSkge1xuICAgICAgICBoYXNoQ29kZSA/Pz0gdGhpcy5faGFzaChrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVNYXAuaGFzKGhhc2hDb2RlKTtcbiAgICB9XG4gICAgKmtleXMoKSB7XG4gICAgICAgIGNvbnN0IGtleUl0ZXJhdG9yID0gdGhpcy5fa2V5TWFwLmVudHJpZXMoKTtcbiAgICAgICAgbGV0IG5leHQgPSBrZXlJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlIChuZXh0LmRvbmUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHlpZWxkIFtuZXh0LnZhbHVlWzFdLCBuZXh0LnZhbHVlWzBdXTtcbiAgICAgICAgICAgIG5leHQgPSBrZXlJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmVudHJpZXMoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlSXRlcmF0b3IgPSB0aGlzLl92YWx1ZU1hcC5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBuZXh0ID0gdmFsdWVJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlIChuZXh0LmRvbmUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIG5leHQudmFsdWVbMF0gaGVyZSBjYW4gbm90IGJlIHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIHlpZWxkIFt0aGlzLl9rZXlNYXAuZ2V0KG5leHQudmFsdWVbMF0pLCBuZXh0LnZhbHVlWzFdLCBuZXh0LnZhbHVlWzBdXTtcbiAgICAgICAgICAgIG5leHQgPSB2YWx1ZUl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlTWFwLnNpemU7XG4gICAgfVxufVxuZXhwb3J0cy5IYXNoTWFwID0gSGFzaE1hcDtcbmNsYXNzIEF0dHJpYnV0ZUhhc2hNYXAgZXh0ZW5kcyBIYXNoTWFwIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIodXRpbHNfMS5oYXNoQXR0cmlidXRlcyk7XG4gICAgfVxufVxuZXhwb3J0cy5BdHRyaWJ1dGVIYXNoTWFwID0gQXR0cmlidXRlSGFzaE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhhc2hNYXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlbHRhTWV0cmljUHJvY2Vzc29yID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IEhhc2hNYXBfMSA9IHJlcXVpcmUoXCIuL0hhc2hNYXBcIik7XG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZS5cbiAqXG4gKiBBbGxvd3Mgc3luY2hyb25vdXMgY29sbGVjdGlvbiBvZiBtZXRyaWNzLiBUaGlzIHByb2Nlc3NvciBzaG91bGQgYWxsb3dcbiAqIGFsbG9jYXRpb24gb2YgbmV3IGFnZ3JlZ2F0aW9uIGNlbGxzIGZvciBtZXRyaWNzIGFuZCBjb252ZXJ0IGN1bXVsYXRpdmVcbiAqIHJlY29yZGluZyB0byBkZWx0YSBkYXRhIHBvaW50cy5cbiAqL1xuY2xhc3MgRGVsdGFNZXRyaWNQcm9jZXNzb3Ige1xuICAgIF9hZ2dyZWdhdG9yO1xuICAgIF9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZSA9IG5ldyBIYXNoTWFwXzEuQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgIC8vIFRPRE86IGZpbmQgYSByZWFzb25hYmxlIG1lYW4gdG8gY2xlYW4gdGhlIG1lbW87XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktc3BlY2lmaWNhdGlvbi9wdWxsLzIyMDhcbiAgICBfY3VtdWxhdGl2ZU1lbW9TdG9yYWdlID0gbmV3IEhhc2hNYXBfMS5BdHRyaWJ1dGVIYXNoTWFwKCk7XG4gICAgX2NhcmRpbmFsaXR5TGltaXQ7XG4gICAgX292ZXJmbG93QXR0cmlidXRlcyA9IHsgJ290ZWwubWV0cmljLm92ZXJmbG93JzogdHJ1ZSB9O1xuICAgIF9vdmVyZmxvd0hhc2hDb2RlO1xuICAgIGNvbnN0cnVjdG9yKF9hZ2dyZWdhdG9yLCBhZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQpIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvciA9IF9hZ2dyZWdhdG9yO1xuICAgICAgICB0aGlzLl9jYXJkaW5hbGl0eUxpbWl0ID0gKGFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA/PyAyMDAwKSAtIDE7XG4gICAgICAgIHRoaXMuX292ZXJmbG93SGFzaENvZGUgPSAoMCwgdXRpbHNfMS5oYXNoQXR0cmlidXRlcykodGhpcy5fb3ZlcmZsb3dBdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBfY29udGV4dCwgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgbGV0IGFjY3VtdWxhdGlvbiA9IHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLmdldChhdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKCFhY2N1bXVsYXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5zaXplID49IHRoaXMuX2NhcmRpbmFsaXR5TGltaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvd0FjY3VtdWxhdGlvbiA9IHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLmdldE9yRGVmYXVsdCh0aGlzLl9vdmVyZmxvd0F0dHJpYnV0ZXMsICgpID0+IHRoaXMuX2FnZ3JlZ2F0b3IuY3JlYXRlQWNjdW11bGF0aW9uKGNvbGxlY3Rpb25UaW1lKSk7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3dBY2N1bXVsYXRpb24/LnJlY29yZCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjdW11bGF0aW9uID0gdGhpcy5fYWdncmVnYXRvci5jcmVhdGVBY2N1bXVsYXRpb24oY29sbGVjdGlvblRpbWUpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2Uuc2V0KGF0dHJpYnV0ZXMsIGFjY3VtdWxhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgYWNjdW11bGF0aW9uPy5yZWNvcmQodmFsdWUpO1xuICAgIH1cbiAgICBiYXRjaEN1bXVsYXRlKG1lYXN1cmVtZW50cywgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgQXJyYXkuZnJvbShtZWFzdXJlbWVudHMuZW50cmllcygpKS5mb3JFYWNoKChbYXR0cmlidXRlcywgdmFsdWUsIGhhc2hDb2RlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNjdW11bGF0aW9uID0gdGhpcy5fYWdncmVnYXRvci5jcmVhdGVBY2N1bXVsYXRpb24oY29sbGVjdGlvblRpbWUpO1xuICAgICAgICAgICAgYWNjdW11bGF0aW9uPy5yZWNvcmQodmFsdWUpO1xuICAgICAgICAgICAgbGV0IGRlbHRhID0gYWNjdW11bGF0aW9uO1xuICAgICAgICAgICAgLy8gRGlmZiB3aXRoIHJlY29yZGVkIGN1bXVsYXRpdmUgbWVtby5cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdW11bGF0aXZlTWVtb1N0b3JhZ2UuaGFzKGF0dHJpYnV0ZXMsIGhhc2hDb2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIGhhcygpIHJldHVybmVkIHRydWUsIHByZXZpb3VzIGlzIHByZXNlbnQuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX2N1bXVsYXRpdmVNZW1vU3RvcmFnZS5nZXQoYXR0cmlidXRlcywgaGFzaENvZGUpO1xuICAgICAgICAgICAgICAgIGRlbHRhID0gdGhpcy5fYWdncmVnYXRvci5kaWZmKHByZXZpb3VzLCBhY2N1bXVsYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhcmRpbmFsaXR5IGxpbWl0IGlzIHJlYWNoZWQsIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1bXVsYXRpdmVNZW1vU3RvcmFnZS5zaXplID49IHRoaXMuX2NhcmRpbmFsaXR5TGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IHRoaXMuX292ZXJmbG93QXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICAgICAgaGFzaENvZGUgPSB0aGlzLl9vdmVyZmxvd0hhc2hDb2RlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VtdWxhdGl2ZU1lbW9TdG9yYWdlLmhhcyhhdHRyaWJ1dGVzLCBoYXNoQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhcygpIHJldHVybmVkIHRydWUsIHByZXZpb3VzIGlzIHByZXNlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLl9jdW11bGF0aXZlTWVtb1N0b3JhZ2UuZ2V0KGF0dHJpYnV0ZXMsIGhhc2hDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gdGhpcy5fYWdncmVnYXRvci5kaWZmKHByZXZpb3VzLCBhY2N1bXVsYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCB1bmNvbGxlY3RlZCBhY3RpdmUgZGVsdGEuXG4gICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UuaGFzKGF0dHJpYnV0ZXMsIGhhc2hDb2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIGhhcygpIHJldHVybmVkIHRydWUsIGFjdGl2ZSBpcyBwcmVzZW50LlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UuZ2V0KGF0dHJpYnV0ZXMsIGhhc2hDb2RlKTtcbiAgICAgICAgICAgICAgICBkZWx0YSA9IHRoaXMuX2FnZ3JlZ2F0b3IubWVyZ2UoYWN0aXZlLCBkZWx0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHJlY29yZCBhbmQgdGhlIGRlbHRhIHJlY29yZC5cbiAgICAgICAgICAgIHRoaXMuX2N1bXVsYXRpdmVNZW1vU3RvcmFnZS5zZXQoYXR0cmlidXRlcywgYWNjdW11bGF0aW9uLCBoYXNoQ29kZSk7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5zZXQoYXR0cmlidXRlcywgZGVsdGEsIGhhc2hDb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGRlbHRhIG1ldHJpY3MuIFN0YXJ0IHRpbWUgaXMgdGhlIHdoZW4gZmlyc3RcbiAgICAgKiB0aW1lIGV2ZW50IGNvbGxlY3RlZC5cbiAgICAgKi9cbiAgICBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCB1bnJlcG9ydGVkRGVsdGEgPSB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZTtcbiAgICAgICAgdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UgPSBuZXcgSGFzaE1hcF8xLkF0dHJpYnV0ZUhhc2hNYXAoKTtcbiAgICAgICAgcmV0dXJuIHVucmVwb3J0ZWREZWx0YTtcbiAgICB9XG59XG5leHBvcnRzLkRlbHRhTWV0cmljUHJvY2Vzc29yID0gRGVsdGFNZXRyaWNQcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EZWx0YU1ldHJpY1Byb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IgPSB2b2lkIDA7XG5jb25zdCBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIik7XG5jb25zdCBIYXNoTWFwXzEgPSByZXF1aXJlKFwiLi9IYXNoTWFwXCIpO1xuLyoqXG4gKiBJbnRlcm5hbCBpbnRlcmZhY2UuXG4gKlxuICogUHJvdmlkZXMgdW5pcXVlIHJlcG9ydGluZyBmb3IgZWFjaCBjb2xsZWN0b3IuIEFsbG93cyBzeW5jaHJvbm91cyBjb2xsZWN0aW9uXG4gKiBvZiBtZXRyaWNzIGFuZCByZXBvcnRzIGdpdmVuIHRlbXBvcmFsaXR5IHZhbHVlcy5cbiAqL1xuY2xhc3MgVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3Ige1xuICAgIF9hZ2dyZWdhdG9yO1xuICAgIF91bnJlcG9ydGVkQWNjdW11bGF0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICBfcmVwb3J0SGlzdG9yeSA9IG5ldyBNYXAoKTtcbiAgICBjb25zdHJ1Y3RvcihfYWdncmVnYXRvciwgY29sbGVjdG9ySGFuZGxlcykge1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdG9yID0gX2FnZ3JlZ2F0b3I7XG4gICAgICAgIGNvbGxlY3RvckhhbmRsZXMuZm9yRWFjaChoYW5kbGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMuc2V0KGhhbmRsZSwgW10pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSB7QGxpbmsgTWV0cmljRGF0YX0gc3RyZWFtcyB0byByZXBvcnQgYWdhaW5zdCBhIHNwZWNpZmljIE1ldHJpY0NvbGxlY3Rvci5cbiAgICAgKiBAcGFyYW0gY29sbGVjdG9yIFRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgTWV0cmljQ29sbGVjdG9yLlxuICAgICAqIEBwYXJhbSBjb2xsZWN0b3JzIFRoZSByZWdpc3RlcmVkIGNvbGxlY3RvcnMuXG4gICAgICogQHBhcmFtIGluc3RydW1lbnREZXNjcmlwdG9yIFRoZSBpbnN0cnVtZW50YXRpb24gZGVzY3JpcHRvciB0aGF0IHRoZXNlIG1ldHJpY3MgZ2VuZXJhdGVkIHdpdGguXG4gICAgICogQHBhcmFtIGN1cnJlbnRBY2N1bXVsYXRpb25zIFRoZSBjdXJyZW50IGFjY3VtdWxhdGlvbiBvZiBtZXRyaWMgZGF0YSBmcm9tIGluc3RydW1lbnRzLlxuICAgICAqIEBwYXJhbSBjb2xsZWN0aW9uVGltZSBUaGUgY3VycmVudCBjb2xsZWN0aW9uIHRpbWVzdGFtcC5cbiAgICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIE1ldHJpY0RhdGF9IHBvaW50cyBvciBgbnVsbGAuXG4gICAgICovXG4gICAgYnVpbGRNZXRyaWNzKGNvbGxlY3RvciwgaW5zdHJ1bWVudERlc2NyaXB0b3IsIGN1cnJlbnRBY2N1bXVsYXRpb25zLCBjb2xsZWN0aW9uVGltZSkge1xuICAgICAgICB0aGlzLl9zdGFzaEFjY3VtdWxhdGlvbnMoY3VycmVudEFjY3VtdWxhdGlvbnMpO1xuICAgICAgICBjb25zdCB1bnJlcG9ydGVkQWNjdW11bGF0aW9ucyA9IHRoaXMuX2dldE1lcmdlZFVucmVwb3J0ZWRBY2N1bXVsYXRpb25zKGNvbGxlY3Rvcik7XG4gICAgICAgIGxldCByZXN1bHQgPSB1bnJlcG9ydGVkQWNjdW11bGF0aW9ucztcbiAgICAgICAgbGV0IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgIC8vIENoZWNrIG91ciBsYXN0IHJlcG9ydCB0aW1lLlxuICAgICAgICBpZiAodGhpcy5fcmVwb3J0SGlzdG9yeS5oYXMoY29sbGVjdG9yKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLl9yZXBvcnRIaXN0b3J5LmdldChjb2xsZWN0b3IpO1xuICAgICAgICAgICAgY29uc3QgbGFzdENvbGxlY3Rpb25UaW1lID0gbGFzdC5jb2xsZWN0aW9uVGltZTtcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBsYXN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAvLyBVc2UgYWdncmVnYXRpb24gdGVtcG9yYWxpdHkgKyBpbnN0cnVtZW50IHRvIGRldGVybWluZSBpZiB3ZSBkbyBhIG1lcmdlIG9yIGEgZGlmZiBvZlxuICAgICAgICAgICAgLy8gcHJldmlvdXMuIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBmb3VyIHNjZW5hcmlvczpcbiAgICAgICAgICAgIC8vIDEuIEN1bXVsYXRpdmUgQWdncmVnYXRpb24gKHRlbXBvcmFsaXR5KSArIERlbHRhIHJlY29yZGluZyAoc3luYyBpbnN0cnVtZW50KS5cbiAgICAgICAgICAgIC8vICAgIEhlcmUgd2UgbWVyZ2Ugd2l0aCBvdXIgbGFzdCByZWNvcmQgdG8gZ2V0IGEgY3VtdWxhdGl2ZSBhZ2dyZWdhdGlvbi5cbiAgICAgICAgICAgIC8vIDIuIEN1bXVsYXRpdmUgQWdncmVnYXRpb24gKyBDdW11bGF0aXZlIHJlY29yZGluZyAoYXN5bmMgaW5zdHJ1bWVudCkuXG4gICAgICAgICAgICAvLyAgICBDdW11bGF0aXZlIHJlY29yZHMgYXJlIGNvbnZlcnRlZCB0byBkZWx0YSByZWNvcmRpbmcgd2l0aCBEZWx0YU1ldHJpY1Byb2Nlc3Nvci5cbiAgICAgICAgICAgIC8vICAgIEhlcmUgd2UgbWVyZ2Ugd2l0aCBvdXIgbGFzdCByZWNvcmQgdG8gZ2V0IGEgY3VtdWxhdGl2ZSBhZ2dyZWdhdGlvbi5cbiAgICAgICAgICAgIC8vIDMuIERlbHRhIEFnZ3JlZ2F0aW9uICsgRGVsdGEgcmVjb3JkaW5nXG4gICAgICAgICAgICAvLyAgICBDYWxpYnJhdGUgdGhlIHN0YXJ0VGltZSBvZiBtZXRyaWMgc3RyZWFtcyB0byBiZSB0aGUgcmVhZGVyJ3MgbGFzdENvbGxlY3Rpb25UaW1lLlxuICAgICAgICAgICAgLy8gNC4gRGVsdGEgQWdncmVnYXRpb24gKyBDdW11bGF0aXZlIHJlY29yZGluZy5cbiAgICAgICAgICAgIC8vICAgIEN1bXVsYXRpdmUgcmVjb3JkcyBhcmUgY29udmVydGVkIHRvIGRlbHRhIHJlY29yZGluZyB3aXRoIERlbHRhTWV0cmljUHJvY2Vzc29yLlxuICAgICAgICAgICAgLy8gICAgQ2FsaWJyYXRlIHRoZSBzdGFydFRpbWUgb2YgbWV0cmljIHN0cmVhbXMgdG8gYmUgdGhlIHJlYWRlcidzIGxhc3RDb2xsZWN0aW9uVGltZS5cbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID09PSBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5DVU1VTEFUSVZFKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgZGVsdGEgcmVjb3JkaW5nIGdldHMgbWVyZ2VkIGludG8gdGhlIHByZXZpb3VzIGN1bXVsYXRpdmVcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIG5leHQgY3VtdWxhdGl2ZSByZWNvcmRpbmcuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IubWVyZ2UobGFzdC5hY2N1bXVsYXRpb25zLCB1bnJlcG9ydGVkQWNjdW11bGF0aW9ucywgdGhpcy5fYWdncmVnYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBUZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvci5jYWxpYnJhdGVTdGFydFRpbWUobGFzdC5hY2N1bXVsYXRpb25zLCB1bnJlcG9ydGVkQWNjdW11bGF0aW9ucywgbGFzdENvbGxlY3Rpb25UaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIENhbGwgaW50byB1c2VyIGNvZGUgdG8gc2VsZWN0IGFnZ3JlZ2F0aW9uIHRlbXBvcmFsaXR5IGZvciB0aGUgaW5zdHJ1bWVudC5cbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBjb2xsZWN0b3Iuc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eShpbnN0cnVtZW50RGVzY3JpcHRvci50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgbGFzdCByZXBvcnRlZCAoY3VtdWxhdGl2ZSkgYWNjdW11bGF0aW9uLlxuICAgICAgICB0aGlzLl9yZXBvcnRIaXN0b3J5LnNldChjb2xsZWN0b3IsIHtcbiAgICAgICAgICAgIGFjY3VtdWxhdGlvbnM6IHJlc3VsdCxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25UaW1lLFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFjY3VtdWxhdGlvblJlY29yZHMgPSBBdHRyaWJ1dGVzTWFwVG9BY2N1bXVsYXRpb25SZWNvcmRzKHJlc3VsdCk7XG4gICAgICAgIC8vIGRvIG5vdCBjb252ZXJ0IHRvIG1ldHJpYyBkYXRhIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29udmVydC5cbiAgICAgICAgaWYgKGFjY3VtdWxhdGlvblJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdG9yLnRvTWV0cmljRGF0YShpbnN0cnVtZW50RGVzY3JpcHRvciwgYWdncmVnYXRpb25UZW1wb3JhbGl0eSwgYWNjdW11bGF0aW9uUmVjb3JkcywgXG4gICAgICAgIC8qIGVuZFRpbWUgKi8gY29sbGVjdGlvblRpbWUpO1xuICAgIH1cbiAgICBfc3Rhc2hBY2N1bXVsYXRpb25zKGN1cnJlbnRBY2N1bXVsYXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZENvbGxlY3RvcnMgPSB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5rZXlzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY29sbGVjdG9yIG9mIHJlZ2lzdGVyZWRDb2xsZWN0b3JzKSB7XG4gICAgICAgICAgICBsZXQgc3Rhc2ggPSB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5nZXQoY29sbGVjdG9yKTtcbiAgICAgICAgICAgIGlmIChzdGFzaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3Rhc2ggPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5zZXQoY29sbGVjdG9yLCBzdGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFzaC5wdXNoKGN1cnJlbnRBY2N1bXVsYXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9nZXRNZXJnZWRVbnJlcG9ydGVkQWNjdW11bGF0aW9ucyhjb2xsZWN0b3IpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBIYXNoTWFwXzEuQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgICAgICBjb25zdCB1bnJlcG9ydGVkTGlzdCA9IHRoaXMuX3VucmVwb3J0ZWRBY2N1bXVsYXRpb25zLmdldChjb2xsZWN0b3IpO1xuICAgICAgICB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5zZXQoY29sbGVjdG9yLCBbXSk7XG4gICAgICAgIGlmICh1bnJlcG9ydGVkTGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgdW5yZXBvcnRlZExpc3QpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yLm1lcmdlKHJlc3VsdCwgaXQsIHRoaXMuX2FnZ3JlZ2F0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZShsYXN0LCBjdXJyZW50LCBhZ2dyZWdhdG9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGxhc3Q7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gY3VycmVudC5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAobmV4dC5kb25lICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCByZWNvcmQsIGhhc2hdID0gbmV4dC52YWx1ZTtcbiAgICAgICAgICAgIGlmIChsYXN0LmhhcyhrZXksIGhhc2gpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEFjY3VtdWxhdGlvbiA9IGxhc3QuZ2V0KGtleSwgaGFzaCk7XG4gICAgICAgICAgICAgICAgLy8gbGFzdC5oYXMoKSByZXR1cm5lZCB0cnVlLCBsYXN0QWNjdW11bGF0aW9uIGlzIHByZXNlbnQuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBhY2N1bXVsYXRpb24gPSBhZ2dyZWdhdG9yLm1lcmdlKGxhc3RBY2N1bXVsYXRpb24sIHJlY29yZCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIGFjY3VtdWxhdGlvbiwgaGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgcmVjb3JkLCBoYXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsaWJyYXRlIHRoZSByZXBvcnRlZCBtZXRyaWMgc3RyZWFtcycgc3RhcnRUaW1lIHRvIGxhc3RDb2xsZWN0aW9uVGltZS4gTGVhdmVzXG4gICAgICogdGhlIG5ldyBzdHJlYW0gdG8gYmUgdGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gdGltZSB1bmNoYW5nZWQuXG4gICAgICovXG4gICAgc3RhdGljIGNhbGlicmF0ZVN0YXJ0VGltZShsYXN0LCBjdXJyZW50LCBsYXN0Q29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBoYXNoXSBvZiBsYXN0LmtleXMoKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEFjY3VtdWxhdGlvbiA9IGN1cnJlbnQuZ2V0KGtleSwgaGFzaCk7XG4gICAgICAgICAgICBjdXJyZW50QWNjdW11bGF0aW9uPy5zZXRTdGFydFRpbWUobGFzdENvbGxlY3Rpb25UaW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG59XG5leHBvcnRzLlRlbXBvcmFsTWV0cmljUHJvY2Vzc29yID0gVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3I7XG4vLyBUeXBlU2NyaXB0IGNvbXBsYWlucyBhYm91dCBjb252ZXJ0aW5nIDMgZWxlbWVudHMgdHVwbGUgdG8gQWNjdW11bGF0aW9uUmVjb3JkPFQ+LlxuZnVuY3Rpb24gQXR0cmlidXRlc01hcFRvQWNjdW11bGF0aW9uUmVjb3JkcyhtYXApIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShtYXAuZW50cmllcygpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRlbXBvcmFsTWV0cmljUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY01ldHJpY1N0b3JhZ2UgPSB2b2lkIDA7XG5jb25zdCBNZXRyaWNTdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9NZXRyaWNTdG9yYWdlXCIpO1xuY29uc3QgRGVsdGFNZXRyaWNQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL0RlbHRhTWV0cmljUHJvY2Vzc29yXCIpO1xuY29uc3QgVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL1RlbXBvcmFsTWV0cmljUHJvY2Vzc29yXCIpO1xuY29uc3QgSGFzaE1hcF8xID0gcmVxdWlyZShcIi4vSGFzaE1hcFwiKTtcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICpcbiAqIFN0b3JlcyBhbmQgYWdncmVnYXRlcyB7QGxpbmsgTWV0cmljRGF0YX0gZm9yIGFzeW5jaHJvbm91cyBpbnN0cnVtZW50cy5cbiAqL1xuY2xhc3MgQXN5bmNNZXRyaWNTdG9yYWdlIGV4dGVuZHMgTWV0cmljU3RvcmFnZV8xLk1ldHJpY1N0b3JhZ2Uge1xuICAgIF9hdHRyaWJ1dGVzUHJvY2Vzc29yO1xuICAgIF9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgX2RlbHRhTWV0cmljU3RvcmFnZTtcbiAgICBfdGVtcG9yYWxNZXRyaWNTdG9yYWdlO1xuICAgIGNvbnN0cnVjdG9yKF9pbnN0cnVtZW50RGVzY3JpcHRvciwgYWdncmVnYXRvciwgX2F0dHJpYnV0ZXNQcm9jZXNzb3IsIGNvbGxlY3RvckhhbmRsZXMsIF9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQpIHtcbiAgICAgICAgc3VwZXIoX2luc3RydW1lbnREZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlc1Byb2Nlc3NvciA9IF9hdHRyaWJ1dGVzUHJvY2Vzc29yO1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQgPSBfYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0O1xuICAgICAgICB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UgPSBuZXcgRGVsdGFNZXRyaWNQcm9jZXNzb3JfMS5EZWx0YU1ldHJpY1Byb2Nlc3NvcihhZ2dyZWdhdG9yLCB0aGlzLl9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQpO1xuICAgICAgICB0aGlzLl90ZW1wb3JhbE1ldHJpY1N0b3JhZ2UgPSBuZXcgVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3JfMS5UZW1wb3JhbE1ldHJpY1Byb2Nlc3NvcihhZ2dyZWdhdG9yLCBjb2xsZWN0b3JIYW5kbGVzKTtcbiAgICB9XG4gICAgcmVjb3JkKG1lYXN1cmVtZW50cywgb2JzZXJ2YXRpb25UaW1lKSB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBIYXNoTWFwXzEuQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgICAgICBBcnJheS5mcm9tKG1lYXN1cmVtZW50cy5lbnRyaWVzKCkpLmZvckVhY2goKFthdHRyaWJ1dGVzLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3NlZC5zZXQodGhpcy5fYXR0cmlidXRlc1Byb2Nlc3Nvci5wcm9jZXNzKGF0dHJpYnV0ZXMpLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UuYmF0Y2hDdW11bGF0ZShwcm9jZXNzZWQsIG9ic2VydmF0aW9uVGltZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbGxlY3RzIHRoZSBtZXRyaWNzIGZyb20gdGhpcyBzdG9yYWdlLiBUaGUgT2JzZXJ2YWJsZUNhbGxiYWNrIGlzIGludm9rZWRcbiAgICAgKiBkdXJpbmcgdGhlIGNvbGxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGlzIGlzIGEgc3RhdGVmdWwgb3BlcmF0aW9uIGFuZCBtYXkgcmVzZXQgYW55IGludGVydmFsLXJlbGF0ZWRcbiAgICAgKiBzdGF0ZSBmb3IgdGhlIE1ldHJpY0NvbGxlY3Rvci5cbiAgICAgKi9cbiAgICBjb2xsZWN0KGNvbGxlY3RvciwgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgY29uc3QgYWNjdW11bGF0aW9ucyA9IHRoaXMuX2RlbHRhTWV0cmljU3RvcmFnZS5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wb3JhbE1ldHJpY1N0b3JhZ2UuYnVpbGRNZXRyaWNzKGNvbGxlY3RvciwgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IsIGFjY3VtdWxhdGlvbnMsIGNvbGxlY3Rpb25UaW1lKTtcbiAgICB9XG59XG5leHBvcnRzLkFzeW5jTWV0cmljU3RvcmFnZSA9IEFzeW5jTWV0cmljU3RvcmFnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jTWV0cmljU3RvcmFnZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZXhwb3J0cy5nZXREZXNjcmlwdGlvblJlc29sdXRpb25SZWNpcGUgPSBleHBvcnRzLmdldFR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUgPSBleHBvcnRzLmdldFVuaXRDb25mbGljdFJlc29sdXRpb25SZWNpcGUgPSBleHBvcnRzLmdldFZhbHVlVHlwZUNvbmZsaWN0UmVzb2x1dGlvblJlY2lwZSA9IGV4cG9ydHMuZ2V0SW5jb21wYXRpYmlsaXR5RGV0YWlscyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGdldEluY29tcGF0aWJpbGl0eURldGFpbHMoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIGxldCBpbmNvbXBhdGliaWxpdHkgPSAnJztcbiAgICBpZiAoZXhpc3RpbmcudW5pdCAhPT0gb3RoZXJEZXNjcmlwdG9yLnVuaXQpIHtcbiAgICAgICAgaW5jb21wYXRpYmlsaXR5ICs9IGBcXHQtIFVuaXQgJyR7ZXhpc3RpbmcudW5pdH0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci51bml0fSdcXG5gO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcudHlwZSAhPT0gb3RoZXJEZXNjcmlwdG9yLnR5cGUpIHtcbiAgICAgICAgaW5jb21wYXRpYmlsaXR5ICs9IGBcXHQtIFR5cGUgJyR7ZXhpc3RpbmcudHlwZX0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci50eXBlfSdcXG5gO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcudmFsdWVUeXBlICE9PSBvdGhlckRlc2NyaXB0b3IudmFsdWVUeXBlKSB7XG4gICAgICAgIGluY29tcGF0aWJpbGl0eSArPSBgXFx0LSBWYWx1ZSBUeXBlICcke2V4aXN0aW5nLnZhbHVlVHlwZX0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci52YWx1ZVR5cGV9J1xcbmA7XG4gICAgfVxuICAgIGlmIChleGlzdGluZy5kZXNjcmlwdGlvbiAhPT0gb3RoZXJEZXNjcmlwdG9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGluY29tcGF0aWJpbGl0eSArPSBgXFx0LSBEZXNjcmlwdGlvbiAnJHtleGlzdGluZy5kZXNjcmlwdGlvbn0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci5kZXNjcmlwdGlvbn0nXFxuYDtcbiAgICB9XG4gICAgcmV0dXJuIGluY29tcGF0aWJpbGl0eTtcbn1cbmV4cG9ydHMuZ2V0SW5jb21wYXRpYmlsaXR5RGV0YWlscyA9IGdldEluY29tcGF0aWJpbGl0eURldGFpbHM7XG5mdW5jdGlvbiBnZXRWYWx1ZVR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBgXFx0LSB1c2UgdmFsdWVUeXBlICcke2V4aXN0aW5nLnZhbHVlVHlwZX0nIG9uIGluc3RydW1lbnQgY3JlYXRpb24gb3IgdXNlIGFuIGluc3RydW1lbnQgbmFtZSBvdGhlciB0aGFuICcke290aGVyRGVzY3JpcHRvci5uYW1lfSdgO1xufVxuZXhwb3J0cy5nZXRWYWx1ZVR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUgPSBnZXRWYWx1ZVR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGU7XG5mdW5jdGlvbiBnZXRVbml0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gYFxcdC0gdXNlIHVuaXQgJyR7ZXhpc3RpbmcudW5pdH0nIG9uIGluc3RydW1lbnQgY3JlYXRpb24gb3IgdXNlIGFuIGluc3RydW1lbnQgbmFtZSBvdGhlciB0aGFuICcke290aGVyRGVzY3JpcHRvci5uYW1lfSdgO1xufVxuZXhwb3J0cy5nZXRVbml0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZ2V0VW5pdENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZTtcbmZ1bmN0aW9uIGdldFR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIGNvbnN0IHNlbGVjdG9yID0ge1xuICAgICAgICBuYW1lOiBvdGhlckRlc2NyaXB0b3IubmFtZSxcbiAgICAgICAgdHlwZTogb3RoZXJEZXNjcmlwdG9yLnR5cGUsXG4gICAgICAgIHVuaXQ6IG90aGVyRGVzY3JpcHRvci51bml0LFxuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0b3JTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzZWxlY3Rvcik7XG4gICAgcmV0dXJuIGBcXHQtIGNyZWF0ZSBhIG5ldyB2aWV3IHdpdGggYSBuYW1lIG90aGVyIHRoYW4gJyR7ZXhpc3RpbmcubmFtZX0nIGFuZCBJbnN0cnVtZW50U2VsZWN0b3IgJyR7c2VsZWN0b3JTdHJpbmd9J2A7XG59XG5leHBvcnRzLmdldFR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUgPSBnZXRUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlO1xuZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb25SZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IHtcbiAgICAgICAgbmFtZTogb3RoZXJEZXNjcmlwdG9yLm5hbWUsXG4gICAgICAgIHR5cGU6IG90aGVyRGVzY3JpcHRvci50eXBlLFxuICAgICAgICB1bml0OiBvdGhlckRlc2NyaXB0b3IudW5pdCxcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdG9yU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0b3IpO1xuICAgIHJldHVybiBgXFx0LSBjcmVhdGUgYSBuZXcgdmlldyB3aXRoIGEgbmFtZSBvdGhlciB0aGFuICcke2V4aXN0aW5nLm5hbWV9JyBhbmQgSW5zdHJ1bWVudFNlbGVjdG9yICcke3NlbGVjdG9yU3RyaW5nfSdcbiAgICBcXHQtIE9SIC0gY3JlYXRlIGEgbmV3IHZpZXcgd2l0aCB0aGUgbmFtZSAke2V4aXN0aW5nLm5hbWV9IGFuZCBkZXNjcmlwdGlvbiAnJHtleGlzdGluZy5kZXNjcmlwdGlvbn0nIGFuZCBJbnN0cnVtZW50U2VsZWN0b3IgJHtzZWxlY3RvclN0cmluZ31cbiAgICBcXHQtIE9SIC0gY3JlYXRlIGEgbmV3IHZpZXcgd2l0aCB0aGUgbmFtZSAke290aGVyRGVzY3JpcHRvci5uYW1lfSBhbmQgZGVzY3JpcHRpb24gJyR7ZXhpc3RpbmcuZGVzY3JpcHRpb259JyBhbmQgSW5zdHJ1bWVudFNlbGVjdG9yICR7c2VsZWN0b3JTdHJpbmd9YDtcbn1cbmV4cG9ydHMuZ2V0RGVzY3JpcHRpb25SZXNvbHV0aW9uUmVjaXBlID0gZ2V0RGVzY3JpcHRpb25SZXNvbHV0aW9uUmVjaXBlO1xuZnVuY3Rpb24gZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICAvLyBDb25mbGljdHMgdGhhdCBjYW5ub3QgYmUgc29sdmVkIHZpYSB2aWV3cy5cbiAgICBpZiAoZXhpc3RpbmcudmFsdWVUeXBlICE9PSBvdGhlckRlc2NyaXB0b3IudmFsdWVUeXBlKSB7XG4gICAgICAgIHJldHVybiBnZXRWYWx1ZVR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIGlmIChleGlzdGluZy51bml0ICE9PSBvdGhlckRlc2NyaXB0b3IudW5pdCkge1xuICAgICAgICByZXR1cm4gZ2V0VW5pdENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZShleGlzdGluZywgb3RoZXJEZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgLy8gQ29uZmxpY3RzIHRoYXQgY2FuIGJlIHNvbHZlZCB2aWEgdmlld3MuXG4gICAgaWYgKGV4aXN0aW5nLnR5cGUgIT09IG90aGVyRGVzY3JpcHRvci50eXBlKSB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHNvbHZlIHBvc3NpYmxlIGRlc2NyaXB0aW9uIGNvbmZsaWN0cy5cbiAgICAgICAgcmV0dXJuIGdldFR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIGlmIChleGlzdGluZy5kZXNjcmlwdGlvbiAhPT0gb3RoZXJEZXNjcmlwdG9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBnZXREZXNjcmlwdGlvblJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cbmV4cG9ydHMuZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVnaXN0cmF0aW9uQ29uZmxpY3RzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXRyaWNTdG9yYWdlUmVnaXN0cnkgPSB2b2lkIDA7XG5jb25zdCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xID0gcmVxdWlyZShcIi4uL0luc3RydW1lbnREZXNjcmlwdG9yXCIpO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFJlZ2lzdHJhdGlvbkNvbmZsaWN0c18xID0gcmVxdWlyZShcIi4uL3ZpZXcvUmVnaXN0cmF0aW9uQ29uZmxpY3RzXCIpO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyBmb3Igc3RvcmluZyB7QGxpbmsgTWV0cmljU3RvcmFnZX1cbiAqL1xuY2xhc3MgTWV0cmljU3RvcmFnZVJlZ2lzdHJ5IHtcbiAgICBfc2hhcmVkUmVnaXN0cnkgPSBuZXcgTWFwKCk7XG4gICAgX3BlckNvbGxlY3RvclJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWV0cmljU3RvcmFnZVJlZ2lzdHJ5KCk7XG4gICAgfVxuICAgIGdldFN0b3JhZ2VzKGNvbGxlY3Rvcikge1xuICAgICAgICBsZXQgc3RvcmFnZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBtZXRyaWNTdG9yYWdlcyBvZiB0aGlzLl9zaGFyZWRSZWdpc3RyeS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgc3RvcmFnZXMgPSBzdG9yYWdlcy5jb25jYXQobWV0cmljU3RvcmFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBlckNvbGxlY3RvclN0b3JhZ2VzID0gdGhpcy5fcGVyQ29sbGVjdG9yUmVnaXN0cnkuZ2V0KGNvbGxlY3Rvcik7XG4gICAgICAgIGlmIChwZXJDb2xsZWN0b3JTdG9yYWdlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1ldHJpY1N0b3JhZ2VzIG9mIHBlckNvbGxlY3RvclN0b3JhZ2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmFnZXMgPSBzdG9yYWdlcy5jb25jYXQobWV0cmljU3RvcmFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yYWdlcztcbiAgICB9XG4gICAgcmVnaXN0ZXIoc3RvcmFnZSkge1xuICAgICAgICB0aGlzLl9yZWdpc3RlclN0b3JhZ2Uoc3RvcmFnZSwgdGhpcy5fc2hhcmVkUmVnaXN0cnkpO1xuICAgIH1cbiAgICByZWdpc3RlckZvckNvbGxlY3Rvcihjb2xsZWN0b3IsIHN0b3JhZ2UpIHtcbiAgICAgICAgbGV0IHN0b3JhZ2VNYXAgPSB0aGlzLl9wZXJDb2xsZWN0b3JSZWdpc3RyeS5nZXQoY29sbGVjdG9yKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VNYXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RvcmFnZU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuX3BlckNvbGxlY3RvclJlZ2lzdHJ5LnNldChjb2xsZWN0b3IsIHN0b3JhZ2VNYXApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyU3RvcmFnZShzdG9yYWdlLCBzdG9yYWdlTWFwKTtcbiAgICB9XG4gICAgZmluZE9yVXBkYXRlQ29tcGF0aWJsZVN0b3JhZ2UoZXhwZWN0ZWREZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fc2hhcmVkUmVnaXN0cnkuZ2V0KGV4cGVjdGVkRGVzY3JpcHRvci5uYW1lKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBkZXNjcmlwdG9yIGlzIGNvbXBhdGlibGUsIHRoZSB0eXBlIG9mIHRoZWlyIG1ldHJpYyBzdG9yYWdlXG4gICAgICAgIC8vIChlaXRoZXIgU3luY01ldHJpY1N0b3JhZ2Ugb3IgQXN5bmNNZXRyaWNTdG9yYWdlKSBtdXN0IGJlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kT3JVcGRhdGVDb21wYXRpYmxlU3RvcmFnZShleHBlY3RlZERlc2NyaXB0b3IsIHN0b3JhZ2VzKTtcbiAgICB9XG4gICAgZmluZE9yVXBkYXRlQ29tcGF0aWJsZUNvbGxlY3RvclN0b3JhZ2UoY29sbGVjdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZU1hcCA9IHRoaXMuX3BlckNvbGxlY3RvclJlZ2lzdHJ5LmdldChjb2xsZWN0b3IpO1xuICAgICAgICBpZiAoc3RvcmFnZU1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHN0b3JhZ2VNYXAuZ2V0KGV4cGVjdGVkRGVzY3JpcHRvci5uYW1lKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBkZXNjcmlwdG9yIGlzIGNvbXBhdGlibGUsIHRoZSB0eXBlIG9mIHRoZWlyIG1ldHJpYyBzdG9yYWdlXG4gICAgICAgIC8vIChlaXRoZXIgU3luY01ldHJpY1N0b3JhZ2Ugb3IgQXN5bmNNZXRyaWNTdG9yYWdlKSBtdXN0IGJlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kT3JVcGRhdGVDb21wYXRpYmxlU3RvcmFnZShleHBlY3RlZERlc2NyaXB0b3IsIHN0b3JhZ2VzKTtcbiAgICB9XG4gICAgX3JlZ2lzdGVyU3RvcmFnZShzdG9yYWdlLCBzdG9yYWdlTWFwKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBzdG9yYWdlLmdldEluc3RydW1lbnREZXNjcmlwdG9yKCk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gc3RvcmFnZU1hcC5nZXQoZGVzY3JpcHRvci5uYW1lKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VNYXAuc2V0KGRlc2NyaXB0b3IubmFtZSwgW3N0b3JhZ2VdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdG9yYWdlcy5wdXNoKHN0b3JhZ2UpO1xuICAgIH1cbiAgICBfZmluZE9yVXBkYXRlQ29tcGF0aWJsZVN0b3JhZ2UoZXhwZWN0ZWREZXNjcmlwdG9yLCBleGlzdGluZ1N0b3JhZ2VzKSB7XG4gICAgICAgIGxldCBjb21wYXRpYmxlU3RvcmFnZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZXhpc3RpbmdTdG9yYWdlIG9mIGV4aXN0aW5nU3RvcmFnZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRGVzY3JpcHRvciA9IGV4aXN0aW5nU3RvcmFnZS5nZXRJbnN0cnVtZW50RGVzY3JpcHRvcigpO1xuICAgICAgICAgICAgaWYgKCgwLCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xLmlzRGVzY3JpcHRvckNvbXBhdGlibGVXaXRoKShleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGxvbmdlciBkZXNjcmlwdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmRlc2NyaXB0aW9uICE9PSBleHBlY3RlZERlc2NyaXB0b3IuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkRGVzY3JpcHRvci5kZXNjcmlwdGlvbi5sZW5ndGggPlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLmRlc2NyaXB0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdTdG9yYWdlLnVwZGF0ZURlc2NyaXB0aW9uKGV4cGVjdGVkRGVzY3JpcHRvci5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXBpLmRpYWcud2FybignQSB2aWV3IG9yIGluc3RydW1lbnQgd2l0aCB0aGUgbmFtZSAnLCBleHBlY3RlZERlc2NyaXB0b3IubmFtZSwgJyBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQsIGJ1dCBoYXMgYSBkaWZmZXJlbnQgZGVzY3JpcHRpb24gYW5kIGlzIGluY29tcGF0aWJsZSB3aXRoIGFub3RoZXIgcmVnaXN0ZXJlZCB2aWV3LlxcbicsICdEZXRhaWxzOlxcbicsICgwLCBSZWdpc3RyYXRpb25Db25mbGljdHNfMS5nZXRJbmNvbXBhdGliaWxpdHlEZXRhaWxzKShleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvciksICdUaGUgbG9uZ2VyIGRlc2NyaXB0aW9uIHdpbGwgYmUgdXNlZC5cXG5UbyByZXNvbHZlIHRoZSBjb25mbGljdDonLCAoMCwgUmVnaXN0cmF0aW9uQ29uZmxpY3RzXzEuZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKShleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTdG9yYWdlIGlzIGZ1bGx5IGNvbXBhdGlibGUuIFRoZXJlIHdpbGwgbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSBwcmUtZXhpc3RpbmcgZnVsbHkgY29tcGF0aWJsZSBzdG9yYWdlLlxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVTdG9yYWdlID0gZXhpc3RpbmdTdG9yYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9uIFNIT1VMRCB3YXJuIGFib3V0IGR1cGxpY2F0ZSBpbnN0cnVtZW50IHJlZ2lzdHJhdGlvblxuICAgICAgICAgICAgICAgIC8vIGNvbmZsaWN0cyBhZnRlciBhcHBseWluZyBWaWV3IGNvbmZpZ3VyYXRpb24uXG4gICAgICAgICAgICAgICAgYXBpLmRpYWcud2FybignQSB2aWV3IG9yIGluc3RydW1lbnQgd2l0aCB0aGUgbmFtZSAnLCBleHBlY3RlZERlc2NyaXB0b3IubmFtZSwgJyBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgYW5kIGlzIGluY29tcGF0aWJsZSB3aXRoIGFub3RoZXIgcmVnaXN0ZXJlZCB2aWV3LlxcbicsICdEZXRhaWxzOlxcbicsICgwLCBSZWdpc3RyYXRpb25Db25mbGljdHNfMS5nZXRJbmNvbXBhdGliaWxpdHlEZXRhaWxzKShleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvciksICdUbyByZXNvbHZlIHRoZSBjb25mbGljdDpcXG4nLCAoMCwgUmVnaXN0cmF0aW9uQ29uZmxpY3RzXzEuZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKShleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wYXRpYmxlU3RvcmFnZTtcbiAgICB9XG59XG5leHBvcnRzLk1ldHJpY1N0b3JhZ2VSZWdpc3RyeSA9IE1ldHJpY1N0b3JhZ2VSZWdpc3RyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldHJpY1N0b3JhZ2VSZWdpc3RyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTXVsdGlNZXRyaWNTdG9yYWdlID0gdm9pZCAwO1xuLyoqXG4gKiBJbnRlcm5hbCBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIE11bHRpTWV0cmljU3RvcmFnZSB7XG4gICAgX2JhY2tpbmdTdG9yYWdlcztcbiAgICBjb25zdHJ1Y3RvcihfYmFja2luZ1N0b3JhZ2VzKSB7XG4gICAgICAgIHRoaXMuX2JhY2tpbmdTdG9yYWdlcyA9IF9iYWNraW5nU3RvcmFnZXM7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY29udGV4dCwgcmVjb3JkVGltZSkge1xuICAgICAgICB0aGlzLl9iYWNraW5nU3RvcmFnZXMuZm9yRWFjaChpdCA9PiB7XG4gICAgICAgICAgICBpdC5yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGNvbnRleHQsIHJlY29yZFRpbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLk11bHRpTWV0cmljU3RvcmFnZSA9IE11bHRpTWV0cmljU3RvcmFnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU11bHRpV3JpdGFibGVNZXRyaWNTdG9yYWdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaE9ic2VydmFibGVSZXN1bHRJbXBsID0gZXhwb3J0cy5PYnNlcnZhYmxlUmVzdWx0SW1wbCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IEhhc2hNYXBfMSA9IHJlcXVpcmUoXCIuL3N0YXRlL0hhc2hNYXBcIik7XG5jb25zdCBJbnN0cnVtZW50c18xID0gcmVxdWlyZShcIi4vSW5zdHJ1bWVudHNcIik7XG4vKipcbiAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHtAbGluayBPYnNlcnZhYmxlUmVzdWx0fSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIE9ic2VydmFibGVSZXN1bHRJbXBsIHtcbiAgICBfaW5zdHJ1bWVudE5hbWU7XG4gICAgX3ZhbHVlVHlwZTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBfYnVmZmVyID0gbmV3IEhhc2hNYXBfMS5BdHRyaWJ1dGVIYXNoTWFwKCk7XG4gICAgY29uc3RydWN0b3IoX2luc3RydW1lbnROYW1lLCBfdmFsdWVUeXBlKSB7XG4gICAgICAgIHRoaXMuX2luc3RydW1lbnROYW1lID0gX2luc3RydW1lbnROYW1lO1xuICAgICAgICB0aGlzLl92YWx1ZVR5cGUgPSBfdmFsdWVUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnNlcnZlIGEgbWVhc3VyZW1lbnQgb2YgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiAgICAgKi9cbiAgICBvYnNlcnZlKHZhbHVlLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2Fybihgbm9uLW51bWJlciB2YWx1ZSBwcm92aWRlZCB0byBtZXRyaWMgJHt0aGlzLl9pbnN0cnVtZW50TmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlVHlwZSA9PT0gYXBpXzEuVmFsdWVUeXBlLklOVCAmJiAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgSU5UIHZhbHVlIHR5cGUgY2Fubm90IGFjY2VwdCBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZvciAke3RoaXMuX2luc3RydW1lbnROYW1lfSwgaWdub3JpbmcgdGhlIGZyYWN0aW9uYWwgZGlnaXRzLmApO1xuICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnRydW5jKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBub24tZmluaXRlIHZhbHVlcy5cbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYnVmZmVyLnNldChhdHRyaWJ1dGVzLCB2YWx1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5PYnNlcnZhYmxlUmVzdWx0SW1wbCA9IE9ic2VydmFibGVSZXN1bHRJbXBsO1xuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2t9IGludGVyZmFjZS5cbiAqL1xuY2xhc3MgQmF0Y2hPYnNlcnZhYmxlUmVzdWx0SW1wbCB7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX2J1ZmZlciA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBPYnNlcnZlIGEgbWVhc3VyZW1lbnQgb2YgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiAgICAgKi9cbiAgICBvYnNlcnZlKG1ldHJpYywgdmFsdWUsIGF0dHJpYnV0ZXMgPSB7fSkge1xuICAgICAgICBpZiAoISgwLCBJbnN0cnVtZW50c18xLmlzT2JzZXJ2YWJsZUluc3RydW1lbnQpKG1ldHJpYykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFwID0gdGhpcy5fYnVmZmVyLmdldChtZXRyaWMpO1xuICAgICAgICBpZiAobWFwID09IG51bGwpIHtcbiAgICAgICAgICAgIG1hcCA9IG5ldyBIYXNoTWFwXzEuQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChtZXRyaWMsIG1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2Fybihgbm9uLW51bWJlciB2YWx1ZSBwcm92aWRlZCB0byBtZXRyaWMgJHttZXRyaWMuX2Rlc2NyaXB0b3IubmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldHJpYy5fZGVzY3JpcHRvci52YWx1ZVR5cGUgPT09IGFwaV8xLlZhbHVlVHlwZS5JTlQgJiZcbiAgICAgICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJTlQgdmFsdWUgdHlwZSBjYW5ub3QgYWNjZXB0IGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgZm9yICR7bWV0cmljLl9kZXNjcmlwdG9yLm5hbWV9LCBpZ25vcmluZyB0aGUgZnJhY3Rpb25hbCBkaWdpdHMuYCk7XG4gICAgICAgICAgICB2YWx1ZSA9IE1hdGgudHJ1bmModmFsdWUpO1xuICAgICAgICAgICAgLy8gaWdub3JlIG5vbi1maW5pdGUgdmFsdWVzLlxuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYXAuc2V0KGF0dHJpYnV0ZXMsIHZhbHVlKTtcbiAgICB9XG59XG5leHBvcnRzLkJhdGNoT2JzZXJ2YWJsZVJlc3VsdEltcGwgPSBCYXRjaE9ic2VydmFibGVSZXN1bHRJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T2JzZXJ2YWJsZVJlc3VsdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT2JzZXJ2YWJsZVJlZ2lzdHJ5ID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgSW5zdHJ1bWVudHNfMSA9IHJlcXVpcmUoXCIuLi9JbnN0cnVtZW50c1wiKTtcbmNvbnN0IE9ic2VydmFibGVSZXN1bHRfMSA9IHJlcXVpcmUoXCIuLi9PYnNlcnZhYmxlUmVzdWx0XCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbi8qKlxuICogQW4gaW50ZXJuYWwgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBPYnNlcnZhYmxlQ2FsbGJhY2tzLlxuICpcbiAqIEV2ZXJ5IHJlZ2lzdGVyZWQgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIGEgc2V0IG9mIGluc3RydW1lbnRzIGFyZSBiZSBldmFsdWF0ZWRcbiAqIGV4YWN0bHkgb25jZSBkdXJpbmcgY29sbGVjdGlvbiBwcmlvciB0byByZWFkaW5nIGRhdGEgZm9yIHRoYXQgaW5zdHJ1bWVudC5cbiAqL1xuY2xhc3MgT2JzZXJ2YWJsZVJlZ2lzdHJ5IHtcbiAgICBfY2FsbGJhY2tzID0gW107XG4gICAgX2JhdGNoQ2FsbGJhY2tzID0gW107XG4gICAgYWRkQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RydW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5fZmluZENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goeyBjYWxsYmFjaywgaW5zdHJ1bWVudCB9KTtcbiAgICB9XG4gICAgcmVtb3ZlQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RydW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5fZmluZENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KTtcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XG4gICAgfVxuICAgIGFkZEJhdGNoQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RydW1lbnRzKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiB1bmlxdWUgaW5zdHJ1bWVudHMuXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVJbnN0cnVtZW50cyA9IG5ldyBTZXQoaW5zdHJ1bWVudHMuZmlsdGVyKEluc3RydW1lbnRzXzEuaXNPYnNlcnZhYmxlSW5zdHJ1bWVudCkpO1xuICAgICAgICBpZiAob2JzZXJ2YWJsZUluc3RydW1lbnRzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ0JhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdmFsaWQgaW5zdHJ1bWVudHMnLCBpbnN0cnVtZW50cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5fZmluZEJhdGNoQ2FsbGJhY2soY2FsbGJhY2ssIG9ic2VydmFibGVJbnN0cnVtZW50cyk7XG4gICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JhdGNoQ2FsbGJhY2tzLnB1c2goeyBjYWxsYmFjaywgaW5zdHJ1bWVudHM6IG9ic2VydmFibGVJbnN0cnVtZW50cyB9KTtcbiAgICB9XG4gICAgcmVtb3ZlQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudHMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2V0IG9mIHVuaXF1ZSBpbnN0cnVtZW50cy5cbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZUluc3RydW1lbnRzID0gbmV3IFNldChpbnN0cnVtZW50cy5maWx0ZXIoSW5zdHJ1bWVudHNfMS5pc09ic2VydmFibGVJbnN0cnVtZW50KSk7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBvYnNlcnZhYmxlSW5zdHJ1bWVudHMpO1xuICAgICAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JhdGNoQ2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhIHByb21pc2Ugb2YgcmVqZWN0ZWQgcmVhc29ucyBmb3IgaW52b2tpbmcgY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIGFzeW5jIG9ic2VydmUoY29sbGVjdGlvblRpbWUsIHRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tGdXR1cmVzID0gdGhpcy5fb2JzZXJ2ZUNhbGxiYWNrcyhjb2xsZWN0aW9uVGltZSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgIGNvbnN0IGJhdGNoQ2FsbGJhY2tGdXR1cmVzID0gdGhpcy5fb2JzZXJ2ZUJhdGNoQ2FsbGJhY2tzKGNvbGxlY3Rpb25UaW1lLCB0aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0ICgwLCB1dGlsc18xLlByb21pc2VBbGxTZXR0bGVkKShbXG4gICAgICAgICAgICAuLi5jYWxsYmFja0Z1dHVyZXMsXG4gICAgICAgICAgICAuLi5iYXRjaENhbGxiYWNrRnV0dXJlcyxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHJlamVjdGlvbnMgPSByZXN1bHRzXG4gICAgICAgICAgICAuZmlsdGVyKHV0aWxzXzEuaXNQcm9taXNlQWxsU2V0dGxlZFJlamVjdGlvblJlc3VsdClcbiAgICAgICAgICAgIC5tYXAoaXQgPT4gaXQucmVhc29uKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdGlvbnM7XG4gICAgfVxuICAgIF9vYnNlcnZlQ2FsbGJhY2tzKG9ic2VydmF0aW9uVGltZSwgdGltZW91dE1pbGxpcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzLm1hcChhc3luYyAoeyBjYWxsYmFjaywgaW5zdHJ1bWVudCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlUmVzdWx0ID0gbmV3IE9ic2VydmFibGVSZXN1bHRfMS5PYnNlcnZhYmxlUmVzdWx0SW1wbChpbnN0cnVtZW50Ll9kZXNjcmlwdG9yLm5hbWUsIGluc3RydW1lbnQuX2Rlc2NyaXB0b3IudmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGxldCBjYWxsUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjYWxsYmFjayhvYnNlcnZhYmxlUmVzdWx0KSk7XG4gICAgICAgICAgICBpZiAodGltZW91dE1pbGxpcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2FsbFByb21pc2UgPSAoMCwgdXRpbHNfMS5jYWxsV2l0aFRpbWVvdXQpKGNhbGxQcm9taXNlLCB0aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNhbGxQcm9taXNlO1xuICAgICAgICAgICAgaW5zdHJ1bWVudC5fbWV0cmljU3RvcmFnZXMuZm9yRWFjaChtZXRyaWNTdG9yYWdlID0+IHtcbiAgICAgICAgICAgICAgICBtZXRyaWNTdG9yYWdlLnJlY29yZChvYnNlcnZhYmxlUmVzdWx0Ll9idWZmZXIsIG9ic2VydmF0aW9uVGltZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9vYnNlcnZlQmF0Y2hDYWxsYmFja3Mob2JzZXJ2YXRpb25UaW1lLCB0aW1lb3V0TWlsbGlzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iYXRjaENhbGxiYWNrcy5tYXAoYXN5bmMgKHsgY2FsbGJhY2ssIGluc3RydW1lbnRzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGVSZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZVJlc3VsdF8xLkJhdGNoT2JzZXJ2YWJsZVJlc3VsdEltcGwoKTtcbiAgICAgICAgICAgIGxldCBjYWxsUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjYWxsYmFjayhvYnNlcnZhYmxlUmVzdWx0KSk7XG4gICAgICAgICAgICBpZiAodGltZW91dE1pbGxpcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2FsbFByb21pc2UgPSAoMCwgdXRpbHNfMS5jYWxsV2l0aFRpbWVvdXQpKGNhbGxQcm9taXNlLCB0aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNhbGxQcm9taXNlO1xuICAgICAgICAgICAgaW5zdHJ1bWVudHMuZm9yRWFjaChpbnN0cnVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBvYnNlcnZhYmxlUmVzdWx0Ll9idWZmZXIuZ2V0KGluc3RydW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChidWZmZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc3RydW1lbnQuX21ldHJpY1N0b3JhZ2VzLmZvckVhY2gobWV0cmljU3RvcmFnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY1N0b3JhZ2UucmVjb3JkKGJ1ZmZlciwgb2JzZXJ2YXRpb25UaW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2ZpbmRDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmZpbmRJbmRleChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5jYWxsYmFjayA9PT0gY2FsbGJhY2sgJiYgcmVjb3JkLmluc3RydW1lbnQgPT09IGluc3RydW1lbnQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZmluZEJhdGNoQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RydW1lbnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iYXRjaENhbGxiYWNrcy5maW5kSW5kZXgocmVjb3JkID0+IHtcbiAgICAgICAgICAgIHJldHVybiAocmVjb3JkLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgICAgICgwLCB1dGlsc18xLnNldEVxdWFscykocmVjb3JkLmluc3RydW1lbnRzLCBpbnN0cnVtZW50cykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLk9ic2VydmFibGVSZWdpc3RyeSA9IE9ic2VydmFibGVSZWdpc3RyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGVSZWdpc3RyeS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU3luY01ldHJpY1N0b3JhZ2UgPSB2b2lkIDA7XG5jb25zdCBNZXRyaWNTdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9NZXRyaWNTdG9yYWdlXCIpO1xuY29uc3QgRGVsdGFNZXRyaWNQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL0RlbHRhTWV0cmljUHJvY2Vzc29yXCIpO1xuY29uc3QgVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL1RlbXBvcmFsTWV0cmljUHJvY2Vzc29yXCIpO1xuLyoqXG4gKiBJbnRlcm5hbCBpbnRlcmZhY2UuXG4gKlxuICogU3RvcmVzIGFuZCBhZ2dyZWdhdGVzIHtAbGluayBNZXRyaWNEYXRhfSBmb3Igc3luY2hyb25vdXMgaW5zdHJ1bWVudHMuXG4gKi9cbmNsYXNzIFN5bmNNZXRyaWNTdG9yYWdlIGV4dGVuZHMgTWV0cmljU3RvcmFnZV8xLk1ldHJpY1N0b3JhZ2Uge1xuICAgIF9hdHRyaWJ1dGVzUHJvY2Vzc29yO1xuICAgIF9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgX2RlbHRhTWV0cmljU3RvcmFnZTtcbiAgICBfdGVtcG9yYWxNZXRyaWNTdG9yYWdlO1xuICAgIGNvbnN0cnVjdG9yKGluc3RydW1lbnREZXNjcmlwdG9yLCBhZ2dyZWdhdG9yLCBfYXR0cmlidXRlc1Byb2Nlc3NvciwgY29sbGVjdG9ySGFuZGxlcywgX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCkge1xuICAgICAgICBzdXBlcihpbnN0cnVtZW50RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNQcm9jZXNzb3IgPSBfYXR0cmlidXRlc1Byb2Nlc3NvcjtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0ID0gX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICAgICAgdGhpcy5fZGVsdGFNZXRyaWNTdG9yYWdlID0gbmV3IERlbHRhTWV0cmljUHJvY2Vzc29yXzEuRGVsdGFNZXRyaWNQcm9jZXNzb3IoYWdncmVnYXRvciwgdGhpcy5fYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KTtcbiAgICAgICAgdGhpcy5fdGVtcG9yYWxNZXRyaWNTdG9yYWdlID0gbmV3IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yXzEuVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IoYWdncmVnYXRvciwgY29sbGVjdG9ySGFuZGxlcyk7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY29udGV4dCwgcmVjb3JkVGltZSkge1xuICAgICAgICBhdHRyaWJ1dGVzID0gdGhpcy5fYXR0cmlidXRlc1Byb2Nlc3Nvci5wcm9jZXNzKGF0dHJpYnV0ZXMsIGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UucmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjb250ZXh0LCByZWNvcmRUaW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29sbGVjdHMgdGhlIG1ldHJpY3MgZnJvbSB0aGlzIHN0b3JhZ2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGlzIGlzIGEgc3RhdGVmdWwgb3BlcmF0aW9uIGFuZCBtYXkgcmVzZXQgYW55IGludGVydmFsLXJlbGF0ZWRcbiAgICAgKiBzdGF0ZSBmb3IgdGhlIE1ldHJpY0NvbGxlY3Rvci5cbiAgICAgKi9cbiAgICBjb2xsZWN0KGNvbGxlY3RvciwgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgY29uc3QgYWNjdW11bGF0aW9ucyA9IHRoaXMuX2RlbHRhTWV0cmljU3RvcmFnZS5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wb3JhbE1ldHJpY1N0b3JhZ2UuYnVpbGRNZXRyaWNzKGNvbGxlY3RvciwgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IsIGFjY3VtdWxhdGlvbnMsIGNvbGxlY3Rpb25UaW1lKTtcbiAgICB9XG59XG5leHBvcnRzLlN5bmNNZXRyaWNTdG9yYWdlID0gU3luY01ldHJpY1N0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TeW5jTWV0cmljU3RvcmFnZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRGVueUxpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yID0gZXhwb3J0cy5jcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yID0gZXhwb3J0cy5jcmVhdGVNdWx0aUF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBleHBvcnRzLmNyZWF0ZU5vb3BBdHRyaWJ1dGVzUHJvY2Vzc29yID0gdm9pZCAwO1xuY2xhc3MgTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3Ige1xuICAgIHByb2Nlc3MoaW5jb21pbmcsIF9jb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBpbmNvbWluZztcbiAgICB9XG59XG5jbGFzcyBNdWx0aUF0dHJpYnV0ZXNQcm9jZXNzb3Ige1xuICAgIF9wcm9jZXNzb3JzO1xuICAgIGNvbnN0cnVjdG9yKF9wcm9jZXNzb3JzKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NvcnMgPSBfcHJvY2Vzc29ycztcbiAgICB9XG4gICAgcHJvY2VzcyhpbmNvbWluZywgY29udGV4dCkge1xuICAgICAgICBsZXQgZmlsdGVyZWRBdHRyaWJ1dGVzID0gaW5jb21pbmc7XG4gICAgICAgIGZvciAoY29uc3QgcHJvY2Vzc29yIG9mIHRoaXMuX3Byb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkQXR0cmlidXRlcyA9IHByb2Nlc3Nvci5wcm9jZXNzKGZpbHRlcmVkQXR0cmlidXRlcywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXR0cmlidXRlcztcbiAgICB9XG59XG5jbGFzcyBBbGxvd0xpc3RQcm9jZXNzb3Ige1xuICAgIF9hbGxvd2VkQXR0cmlidXRlTmFtZXM7XG4gICAgY29uc3RydWN0b3IoX2FsbG93ZWRBdHRyaWJ1dGVOYW1lcykge1xuICAgICAgICB0aGlzLl9hbGxvd2VkQXR0cmlidXRlTmFtZXMgPSBfYWxsb3dlZEF0dHJpYnV0ZU5hbWVzO1xuICAgIH1cbiAgICBwcm9jZXNzKGluY29taW5nLCBfY29udGV4dCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoaW5jb21pbmcpXG4gICAgICAgICAgICAuZmlsdGVyKGF0dHJpYnV0ZU5hbWUgPT4gdGhpcy5fYWxsb3dlZEF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKVxuICAgICAgICAgICAgLmZvckVhY2goYXR0cmlidXRlTmFtZSA9PiAoZmlsdGVyZWRBdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID0gaW5jb21pbmdbYXR0cmlidXRlTmFtZV0pKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXR0cmlidXRlcztcbiAgICB9XG59XG5jbGFzcyBEZW55TGlzdFByb2Nlc3NvciB7XG4gICAgX2RlbmllZEF0dHJpYnV0ZU5hbWVzO1xuICAgIGNvbnN0cnVjdG9yKF9kZW5pZWRBdHRyaWJ1dGVOYW1lcykge1xuICAgICAgICB0aGlzLl9kZW5pZWRBdHRyaWJ1dGVOYW1lcyA9IF9kZW5pZWRBdHRyaWJ1dGVOYW1lcztcbiAgICB9XG4gICAgcHJvY2VzcyhpbmNvbWluZywgX2NvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRBdHRyaWJ1dGVzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGluY29taW5nKVxuICAgICAgICAgICAgLmZpbHRlcihhdHRyaWJ1dGVOYW1lID0+ICF0aGlzLl9kZW5pZWRBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGF0dHJpYnV0ZU5hbWUgPT4gKGZpbHRlcmVkQXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9IGluY29taW5nW2F0dHJpYnV0ZU5hbWVdKSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEF0dHJpYnV0ZXM7XG4gICAgfVxufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBDcmVhdGUgYW4ge0BsaW5rIElBdHRyaWJ1dGVzUHJvY2Vzc29yfSB0aGF0IGFjdHMgYXMgYSBzaW1wbGUgcGFzcy10aHJvdWdoIGZvciBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVOb29wQXR0cmlidXRlc1Byb2Nlc3NvcigpIHtcbiAgICByZXR1cm4gTk9PUDtcbn1cbmV4cG9ydHMuY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBjcmVhdGVOb29wQXR0cmlidXRlc1Byb2Nlc3Nvcjtcbi8qKlxuICogQGludGVybmFsXG4gKlxuICogQ3JlYXRlIGFuIHtAbGluayBJQXR0cmlidXRlc1Byb2Nlc3Nvcn0gdGhhdCBhcHBsaWVzIGFsbCBwcm9jZXNzb3JzIGZyb20gdGhlIHByb3ZpZGVkIGxpc3QgaW4gb3JkZXIuXG4gKlxuICogQHBhcmFtIHByb2Nlc3NvcnMgUHJvY2Vzc29ycyB0byBhcHBseSBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yKHByb2Nlc3NvcnMpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpQXR0cmlidXRlc1Byb2Nlc3Nvcihwcm9jZXNzb3JzKTtcbn1cbmV4cG9ydHMuY3JlYXRlTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yID0gY3JlYXRlTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yO1xuLyoqXG4gKiBDcmVhdGUgYW4ge0BsaW5rIElBdHRyaWJ1dGVzUHJvY2Vzc29yfSB0aGF0IGZpbHRlcnMgYnkgYWxsb3dlZCBhdHRyaWJ1dGUgbmFtZXMgYW5kIGRyb3BzIGFueSBuYW1lcyB0aGF0IGFyZSBub3QgaW4gdGhlXG4gKiBhbGxvdyBsaXN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yKGF0dHJpYnV0ZUFsbG93TGlzdCkge1xuICAgIHJldHVybiBuZXcgQWxsb3dMaXN0UHJvY2Vzc29yKGF0dHJpYnV0ZUFsbG93TGlzdCk7XG59XG5leHBvcnRzLmNyZWF0ZUFsbG93TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBjcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yO1xuLyoqXG4gKiBDcmVhdGUgYW4ge0BsaW5rIElBdHRyaWJ1dGVzUHJvY2Vzc29yfSB0aGF0IGRyb3BzIGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIG5hbWVzIHByb3ZpZGVkIGluIHRoZSBkZW55IGxpc3RcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVueUxpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yKGF0dHJpYnV0ZURlbnlMaXN0KSB7XG4gICAgcmV0dXJuIG5ldyBEZW55TGlzdFByb2Nlc3NvcihhdHRyaWJ1dGVEZW55TGlzdCk7XG59XG5leHBvcnRzLmNyZWF0ZURlbnlMaXN0QXR0cmlidXRlc1Byb2Nlc3NvciA9IGNyZWF0ZURlbnlMaXN0QXR0cmlidXRlc1Byb2Nlc3NvcjtcbmNvbnN0IE5PT1AgPSBuZXcgTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF0dHJpYnV0ZXNQcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldGVyU2hhcmVkU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xID0gcmVxdWlyZShcIi4uL0luc3RydW1lbnREZXNjcmlwdG9yXCIpO1xuY29uc3QgTWV0ZXJfMSA9IHJlcXVpcmUoXCIuLi9NZXRlclwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBBc3luY01ldHJpY1N0b3JhZ2VfMSA9IHJlcXVpcmUoXCIuL0FzeW5jTWV0cmljU3RvcmFnZVwiKTtcbmNvbnN0IE1ldHJpY1N0b3JhZ2VSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4vTWV0cmljU3RvcmFnZVJlZ2lzdHJ5XCIpO1xuY29uc3QgTXVsdGlXcml0YWJsZU1ldHJpY1N0b3JhZ2VfMSA9IHJlcXVpcmUoXCIuL011bHRpV3JpdGFibGVNZXRyaWNTdG9yYWdlXCIpO1xuY29uc3QgT2JzZXJ2YWJsZVJlZ2lzdHJ5XzEgPSByZXF1aXJlKFwiLi9PYnNlcnZhYmxlUmVnaXN0cnlcIik7XG5jb25zdCBTeW5jTWV0cmljU3RvcmFnZV8xID0gcmVxdWlyZShcIi4vU3luY01ldHJpY1N0b3JhZ2VcIik7XG5jb25zdCBBdHRyaWJ1dGVzUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi4vdmlldy9BdHRyaWJ1dGVzUHJvY2Vzc29yXCIpO1xuLyoqXG4gKiBBbiBpbnRlcm5hbCByZWNvcmQgZm9yIHNoYXJlZCBtZXRlciBwcm92aWRlciBzdGF0ZXMuXG4gKi9cbmNsYXNzIE1ldGVyU2hhcmVkU3RhdGUge1xuICAgIF9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGU7XG4gICAgX2luc3RydW1lbnRhdGlvblNjb3BlO1xuICAgIG1ldHJpY1N0b3JhZ2VSZWdpc3RyeSA9IG5ldyBNZXRyaWNTdG9yYWdlUmVnaXN0cnlfMS5NZXRyaWNTdG9yYWdlUmVnaXN0cnkoKTtcbiAgICBvYnNlcnZhYmxlUmVnaXN0cnkgPSBuZXcgT2JzZXJ2YWJsZVJlZ2lzdHJ5XzEuT2JzZXJ2YWJsZVJlZ2lzdHJ5KCk7XG4gICAgbWV0ZXI7XG4gICAgY29uc3RydWN0b3IoX21ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSwgX2luc3RydW1lbnRhdGlvblNjb3BlKSB7XG4gICAgICAgIHRoaXMuX21ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSA9IF9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGU7XG4gICAgICAgIHRoaXMuX2luc3RydW1lbnRhdGlvblNjb3BlID0gX2luc3RydW1lbnRhdGlvblNjb3BlO1xuICAgICAgICB0aGlzLm1ldGVyID0gbmV3IE1ldGVyXzEuTWV0ZXIodGhpcyk7XG4gICAgfVxuICAgIHJlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fcmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IsIFN5bmNNZXRyaWNTdG9yYWdlXzEuU3luY01ldHJpY1N0b3JhZ2UpO1xuICAgICAgICBpZiAoc3RvcmFnZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aVdyaXRhYmxlTWV0cmljU3RvcmFnZV8xLk11bHRpTWV0cmljU3RvcmFnZShzdG9yYWdlcyk7XG4gICAgfVxuICAgIHJlZ2lzdGVyQXN5bmNNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSB0aGlzLl9yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvciwgQXN5bmNNZXRyaWNTdG9yYWdlXzEuQXN5bmNNZXRyaWNTdG9yYWdlKTtcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2VzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29sbGVjdG9yIG9wYXF1ZSBoYW5kbGUgb2Yge0BsaW5rIE1ldHJpY0NvbGxlY3Rvcn0gd2hpY2ggaW5pdGlhdGVkIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBjb2xsZWN0aW9uVGltZSB0aGUgSHJUaW1lIGF0IHdoaWNoIHRoZSBjb2xsZWN0aW9uIHdhcyBpbml0aWF0ZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgY29sbGVjdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgbGlzdCBvZiBtZXRyaWMgZGF0YSBjb2xsZWN0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgY29sbGVjdChjb2xsZWN0b3IsIGNvbGxlY3Rpb25UaW1lLCBvcHRpb25zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAxLiBDYWxsIGFsbCBvYnNlcnZhYmxlIGNhbGxiYWNrcyBmaXJzdC5cbiAgICAgICAgICogMi4gQ29sbGVjdCBtZXRyaWMgcmVzdWx0IGZvciB0aGUgY29sbGVjdG9yLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgdGhpcy5vYnNlcnZhYmxlUmVnaXN0cnkub2JzZXJ2ZShjb2xsZWN0aW9uVGltZSwgb3B0aW9ucz8udGltZW91dE1pbGxpcyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5tZXRyaWNTdG9yYWdlUmVnaXN0cnkuZ2V0U3RvcmFnZXMoY29sbGVjdG9yKTtcbiAgICAgICAgLy8gcHJldmVudCBtb3JlIGFsbG9jYXRpb25zIGlmIHRoZXJlIGFyZSBubyBzdG9yYWdlcy5cbiAgICAgICAgaWYgKHN0b3JhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0cmljRGF0YUxpc3QgPSBzdG9yYWdlc1xuICAgICAgICAgICAgLm1hcChtZXRyaWNTdG9yYWdlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXRyaWNTdG9yYWdlLmNvbGxlY3QoY29sbGVjdG9yLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHV0aWxzXzEuaXNOb3ROdWxsaXNoKTtcbiAgICAgICAgLy8gc2tpcCB0aGlzIHNjb3BlIGlmIG5vIGRhdGEgd2FzIGNvbGxlY3RlZCAoc3RvcmFnZSBjcmVhdGVkLCBidXQgbm8gZGF0YSBvYnNlcnZlZClcbiAgICAgICAgaWYgKG1ldHJpY0RhdGFMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3JzIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjb3BlTWV0cmljczoge1xuICAgICAgICAgICAgICAgIHNjb3BlOiB0aGlzLl9pbnN0cnVtZW50YXRpb25TY29wZSxcbiAgICAgICAgICAgICAgICBtZXRyaWNzOiBtZXRyaWNEYXRhTGlzdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvciwgTWV0cmljU3RvcmFnZVR5cGUpIHtcbiAgICAgICAgY29uc3Qgdmlld3MgPSB0aGlzLl9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUudmlld1JlZ2lzdHJ5LmZpbmRWaWV3cyhkZXNjcmlwdG9yLCB0aGlzLl9pbnN0cnVtZW50YXRpb25TY29wZSk7XG4gICAgICAgIGxldCBzdG9yYWdlcyA9IHZpZXdzLm1hcCh2aWV3ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdEZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3JXaXRoVmlldykodmlldywgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICBjb25zdCBjb21wYXRpYmxlU3RvcmFnZSA9IHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LmZpbmRPclVwZGF0ZUNvbXBhdGlibGVTdG9yYWdlKHZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIGlmIChjb21wYXRpYmxlU3RvcmFnZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhdGlibGVTdG9yYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRvciA9IHZpZXcuYWdncmVnYXRpb24uY3JlYXRlQWdncmVnYXRvcih2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgICAgICBjb25zdCB2aWV3U3RvcmFnZSA9IG5ldyBNZXRyaWNTdG9yYWdlVHlwZSh2aWV3RGVzY3JpcHRvciwgYWdncmVnYXRvciwgdmlldy5hdHRyaWJ1dGVzUHJvY2Vzc29yLCB0aGlzLl9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUubWV0cmljQ29sbGVjdG9ycywgdmlldy5hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQpO1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNTdG9yYWdlUmVnaXN0cnkucmVnaXN0ZXIodmlld1N0b3JhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHZpZXdTdG9yYWdlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIHBlci1jb2xsZWN0b3IgYWdncmVnYXRpb25zIGlmIG5vIHZpZXcgaXMgY29uZmlndXJlZCBmb3IgdGhlIGluc3RydW1lbnQuXG4gICAgICAgIGlmIChzdG9yYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBlckNvbGxlY3RvckFnZ3JlZ2F0aW9ucyA9IHRoaXMuX21ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZS5zZWxlY3RBZ2dyZWdhdGlvbnMoZGVzY3JpcHRvci50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3RvclN0b3JhZ2VzID0gcGVyQ29sbGVjdG9yQWdncmVnYXRpb25zLm1hcCgoW2NvbGxlY3RvciwgYWdncmVnYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGF0aWJsZVN0b3JhZ2UgPSB0aGlzLm1ldHJpY1N0b3JhZ2VSZWdpc3RyeS5maW5kT3JVcGRhdGVDb21wYXRpYmxlQ29sbGVjdG9yU3RvcmFnZShjb2xsZWN0b3IsIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXRpYmxlU3RvcmFnZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXRpYmxlU3RvcmFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWdncmVnYXRvciA9IGFnZ3JlZ2F0aW9uLmNyZWF0ZUFnZ3JlZ2F0b3IoZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FyZGluYWxpdHlMaW1pdCA9IGNvbGxlY3Rvci5zZWxlY3RDYXJkaW5hbGl0eUxpbWl0KGRlc2NyaXB0b3IudHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZSA9IG5ldyBNZXRyaWNTdG9yYWdlVHlwZShkZXNjcmlwdG9yLCBhZ2dyZWdhdG9yLCAoMCwgQXR0cmlidXRlc1Byb2Nlc3Nvcl8xLmNyZWF0ZU5vb3BBdHRyaWJ1dGVzUHJvY2Vzc29yKSgpLCBbY29sbGVjdG9yXSwgY2FyZGluYWxpdHlMaW1pdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNTdG9yYWdlUmVnaXN0cnkucmVnaXN0ZXJGb3JDb2xsZWN0b3IoY29sbGVjdG9yLCBzdG9yYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmFnZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RvcmFnZXMgPSBzdG9yYWdlcy5jb25jYXQoY29sbGVjdG9yU3RvcmFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yYWdlcztcbiAgICB9XG59XG5leHBvcnRzLk1ldGVyU2hhcmVkU3RhdGUgPSBNZXRlclNoYXJlZFN0YXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0ZXJTaGFyZWRTdGF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IFZpZXdSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4uL3ZpZXcvVmlld1JlZ2lzdHJ5XCIpO1xuY29uc3QgTWV0ZXJTaGFyZWRTdGF0ZV8xID0gcmVxdWlyZShcIi4vTWV0ZXJTaGFyZWRTdGF0ZVwiKTtcbmNvbnN0IEFnZ3JlZ2F0aW9uT3B0aW9uXzEgPSByZXF1aXJlKFwiLi4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvblwiKTtcbi8qKlxuICogQW4gaW50ZXJuYWwgcmVjb3JkIGZvciBzaGFyZWQgbWV0ZXIgcHJvdmlkZXIgc3RhdGVzLlxuICovXG5jbGFzcyBNZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUge1xuICAgIHJlc291cmNlO1xuICAgIHZpZXdSZWdpc3RyeSA9IG5ldyBWaWV3UmVnaXN0cnlfMS5WaWV3UmVnaXN0cnkoKTtcbiAgICBtZXRyaWNDb2xsZWN0b3JzID0gW107XG4gICAgbWV0ZXJTaGFyZWRTdGF0ZXMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3IocmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgIH1cbiAgICBnZXRNZXRlclNoYXJlZFN0YXRlKGluc3RydW1lbnRhdGlvblNjb3BlKSB7XG4gICAgICAgIGNvbnN0IGlkID0gKDAsIHV0aWxzXzEuaW5zdHJ1bWVudGF0aW9uU2NvcGVJZCkoaW5zdHJ1bWVudGF0aW9uU2NvcGUpO1xuICAgICAgICBsZXQgbWV0ZXJTaGFyZWRTdGF0ZSA9IHRoaXMubWV0ZXJTaGFyZWRTdGF0ZXMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKG1ldGVyU2hhcmVkU3RhdGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgbWV0ZXJTaGFyZWRTdGF0ZSA9IG5ldyBNZXRlclNoYXJlZFN0YXRlXzEuTWV0ZXJTaGFyZWRTdGF0ZSh0aGlzLCBpbnN0cnVtZW50YXRpb25TY29wZSk7XG4gICAgICAgICAgICB0aGlzLm1ldGVyU2hhcmVkU3RhdGVzLnNldChpZCwgbWV0ZXJTaGFyZWRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGVyU2hhcmVkU3RhdGU7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9ucyhpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0b3Igb2YgdGhpcy5tZXRyaWNDb2xsZWN0b3JzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbXG4gICAgICAgICAgICAgICAgY29sbGVjdG9yLFxuICAgICAgICAgICAgICAgICgwLCBBZ2dyZWdhdGlvbk9wdGlvbl8xLnRvQWdncmVnYXRpb24pKGNvbGxlY3Rvci5zZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSkpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLk1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSA9IE1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0cmljQ29sbGVjdG9yID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEFuIGludGVybmFsIG9wYXF1ZSBpbnRlcmZhY2UgdGhhdCB0aGUgTWV0cmljUmVhZGVyIHJlY2VpdmVzIGFzXG4gKiBNZXRyaWNQcm9kdWNlci4gSXQgYWN0cyBhcyB0aGUgc3RvcmFnZSBrZXkgdG8gdGhlIGludGVybmFsIG1ldHJpYyBzdHJlYW1cbiAqIHN0YXRlIGZvciBlYWNoIE1ldHJpY1JlYWRlci5cbiAqL1xuY2xhc3MgTWV0cmljQ29sbGVjdG9yIHtcbiAgICBfc2hhcmVkU3RhdGU7XG4gICAgX21ldHJpY1JlYWRlcjtcbiAgICBjb25zdHJ1Y3Rvcihfc2hhcmVkU3RhdGUsIF9tZXRyaWNSZWFkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUgPSBfc2hhcmVkU3RhdGU7XG4gICAgICAgIHRoaXMuX21ldHJpY1JlYWRlciA9IF9tZXRyaWNSZWFkZXI7XG4gICAgfVxuICAgIGFzeW5jIGNvbGxlY3Qob3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uVGltZSA9ICgwLCBjb3JlXzEubWlsbGlzVG9IclRpbWUpKERhdGUubm93KCkpO1xuICAgICAgICBjb25zdCBzY29wZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IG1ldGVyQ29sbGVjdGlvblByb21pc2VzID0gQXJyYXkuZnJvbSh0aGlzLl9zaGFyZWRTdGF0ZS5tZXRlclNoYXJlZFN0YXRlcy52YWx1ZXMoKSkubWFwKGFzeW5jIChtZXRlclNoYXJlZFN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgbWV0ZXJTaGFyZWRTdGF0ZS5jb2xsZWN0KHRoaXMsIGNvbGxlY3Rpb25UaW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgIC8vIG9ubHkgYWRkIHNjb3BlIG1ldHJpY3MgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAoY3VycmVudD8uc2NvcGVNZXRyaWNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzY29wZU1ldHJpY3MucHVzaChjdXJyZW50LnNjb3BlTWV0cmljcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBlcnJvcnMgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAoY3VycmVudD8uZXJyb3JzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCguLi5jdXJyZW50LmVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChtZXRlckNvbGxlY3Rpb25Qcm9taXNlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNvdXJjZU1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogdGhpcy5fc2hhcmVkU3RhdGUucmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzOiBzY29wZU1ldHJpY3MsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGVnYXRlcyBmb3IgTWV0cmljUmVhZGVyLmZvcmNlRmx1c2guXG4gICAgICovXG4gICAgYXN5bmMgZm9yY2VGbHVzaChvcHRpb25zKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX21ldHJpY1JlYWRlci5mb3JjZUZsdXNoKG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxlZ2F0ZXMgZm9yIE1ldHJpY1JlYWRlci5zaHV0ZG93bi5cbiAgICAgKi9cbiAgICBhc3luYyBzaHV0ZG93bihvcHRpb25zKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX21ldHJpY1JlYWRlci5zaHV0ZG93bihvcHRpb25zKTtcbiAgICB9XG4gICAgc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eShpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0cmljUmVhZGVyLnNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudFR5cGUpO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0cmljUmVhZGVyLnNlbGVjdEFnZ3JlZ2F0aW9uKGluc3RydW1lbnRUeXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VsZWN0IHRoZSBjYXJkaW5hbGl0eSBsaW1pdCBmb3IgdGhlIGdpdmVuIHtAbGluayBJbnN0cnVtZW50VHlwZX0gZm9yIHRoaXNcbiAgICAgKiBjb2xsZWN0b3IuXG4gICAgICovXG4gICAgc2VsZWN0Q2FyZGluYWxpdHlMaW1pdChpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0cmljUmVhZGVyLnNlbGVjdENhcmRpbmFsaXR5TGltaXQ/LihpbnN0cnVtZW50VHlwZSkgPz8gMjAwMDtcbiAgICB9XG59XG5leHBvcnRzLk1ldHJpY0NvbGxlY3RvciA9IE1ldHJpY0NvbGxlY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldHJpY0NvbGxlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXhhY3RQcmVkaWNhdGUgPSBleHBvcnRzLlBhdHRlcm5QcmVkaWNhdGUgPSB2b2lkIDA7XG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtcmVnZXgtZXNjYXBpbmdcbi8vIGVzY2FwZSBeICQgXFwgLiAgKyA/ICggKSBbIF0geyB9IHxcbi8vIGRvIG5vdCBuZWVkIHRvIGVzY2FwZSAqIGFzIHdlIGludGVycHJldCBpdCBhcyB3aWxkY2FyZFxuY29uc3QgRVNDQVBFID0gL1tcXF4kXFxcXC4rPygpW1xcXXt9fF0vZztcbi8qKlxuICogV2lsZGNhcmQgcGF0dGVybiBwcmVkaWNhdGUsIHN1cHBvcnRzIHBhdHRlcm5zIGxpa2UgYCpgLCBgZm9vKmAsIGAqYmFyYC5cbiAqL1xuY2xhc3MgUGF0dGVyblByZWRpY2F0ZSB7XG4gICAgX21hdGNoQWxsO1xuICAgIF9yZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJyonKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXRjaEFsbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9yZWdleHAgPSAvLiovO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2hBbGwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2V4cCA9IG5ldyBSZWdFeHAoUGF0dGVyblByZWRpY2F0ZS5lc2NhcGVQYXR0ZXJuKHBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChzdHIpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hdGNoQWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnZXhwLnRlc3Qoc3RyKTtcbiAgICB9XG4gICAgc3RhdGljIGVzY2FwZVBhdHRlcm4ocGF0dGVybikge1xuICAgICAgICByZXR1cm4gYF4ke3BhdHRlcm4ucmVwbGFjZShFU0NBUEUsICdcXFxcJCYnKS5yZXBsYWNlKCcqJywgJy4qJyl9JGA7XG4gICAgfVxuICAgIHN0YXRpYyBoYXNXaWxkY2FyZChwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLmluY2x1ZGVzKCcqJyk7XG4gICAgfVxufVxuZXhwb3J0cy5QYXR0ZXJuUHJlZGljYXRlID0gUGF0dGVyblByZWRpY2F0ZTtcbmNsYXNzIEV4YWN0UHJlZGljYXRlIHtcbiAgICBfbWF0Y2hBbGw7XG4gICAgX3BhdHRlcm47XG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgICAgICB0aGlzLl9tYXRjaEFsbCA9IHBhdHRlcm4gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcGF0dGVybiA9IHBhdHRlcm47XG4gICAgfVxuICAgIG1hdGNoKHN0cikge1xuICAgICAgICBpZiAodGhpcy5fbWF0Y2hBbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHIgPT09IHRoaXMuX3BhdHRlcm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLkV4YWN0UHJlZGljYXRlID0gRXhhY3RQcmVkaWNhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QcmVkaWNhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluc3RydW1lbnRTZWxlY3RvciA9IHZvaWQgMDtcbmNvbnN0IFByZWRpY2F0ZV8xID0gcmVxdWlyZShcIi4vUHJlZGljYXRlXCIpO1xuY2xhc3MgSW5zdHJ1bWVudFNlbGVjdG9yIHtcbiAgICBfbmFtZUZpbHRlcjtcbiAgICBfdHlwZTtcbiAgICBfdW5pdEZpbHRlcjtcbiAgICBjb25zdHJ1Y3Rvcihjcml0ZXJpYSkge1xuICAgICAgICB0aGlzLl9uYW1lRmlsdGVyID0gbmV3IFByZWRpY2F0ZV8xLlBhdHRlcm5QcmVkaWNhdGUoY3JpdGVyaWE/Lm5hbWUgPz8gJyonKTtcbiAgICAgICAgdGhpcy5fdHlwZSA9IGNyaXRlcmlhPy50eXBlO1xuICAgICAgICB0aGlzLl91bml0RmlsdGVyID0gbmV3IFByZWRpY2F0ZV8xLkV4YWN0UHJlZGljYXRlKGNyaXRlcmlhPy51bml0KTtcbiAgICB9XG4gICAgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuICAgIGdldE5hbWVGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lRmlsdGVyO1xuICAgIH1cbiAgICBnZXRVbml0RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5pdEZpbHRlcjtcbiAgICB9XG59XG5leHBvcnRzLkluc3RydW1lbnRTZWxlY3RvciA9IEluc3RydW1lbnRTZWxlY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluc3RydW1lbnRTZWxlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0ZXJTZWxlY3RvciA9IHZvaWQgMDtcbmNvbnN0IFByZWRpY2F0ZV8xID0gcmVxdWlyZShcIi4vUHJlZGljYXRlXCIpO1xuY2xhc3MgTWV0ZXJTZWxlY3RvciB7XG4gICAgX25hbWVGaWx0ZXI7XG4gICAgX3ZlcnNpb25GaWx0ZXI7XG4gICAgX3NjaGVtYVVybEZpbHRlcjtcbiAgICBjb25zdHJ1Y3Rvcihjcml0ZXJpYSkge1xuICAgICAgICB0aGlzLl9uYW1lRmlsdGVyID0gbmV3IFByZWRpY2F0ZV8xLkV4YWN0UHJlZGljYXRlKGNyaXRlcmlhPy5uYW1lKTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbkZpbHRlciA9IG5ldyBQcmVkaWNhdGVfMS5FeGFjdFByZWRpY2F0ZShjcml0ZXJpYT8udmVyc2lvbik7XG4gICAgICAgIHRoaXMuX3NjaGVtYVVybEZpbHRlciA9IG5ldyBQcmVkaWNhdGVfMS5FeGFjdFByZWRpY2F0ZShjcml0ZXJpYT8uc2NoZW1hVXJsKTtcbiAgICB9XG4gICAgZ2V0TmFtZUZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWVGaWx0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRPRE86IHNlbXZlciBmaWx0ZXI/IG5vIHNwZWMgeWV0LlxuICAgICAqL1xuICAgIGdldFZlcnNpb25GaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uRmlsdGVyO1xuICAgIH1cbiAgICBnZXRTY2hlbWFVcmxGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY2hlbWFVcmxGaWx0ZXI7XG4gICAgfVxufVxuZXhwb3J0cy5NZXRlclNlbGVjdG9yID0gTWV0ZXJTZWxlY3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyU2VsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZpZXcgPSB2b2lkIDA7XG5jb25zdCBQcmVkaWNhdGVfMSA9IHJlcXVpcmUoXCIuL1ByZWRpY2F0ZVwiKTtcbmNvbnN0IEF0dHJpYnV0ZXNQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL0F0dHJpYnV0ZXNQcm9jZXNzb3JcIik7XG5jb25zdCBJbnN0cnVtZW50U2VsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL0luc3RydW1lbnRTZWxlY3RvclwiKTtcbmNvbnN0IE1ldGVyU2VsZWN0b3JfMSA9IHJlcXVpcmUoXCIuL01ldGVyU2VsZWN0b3JcIik7XG5jb25zdCBBZ2dyZWdhdGlvbk9wdGlvbl8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25PcHRpb25cIik7XG5mdW5jdGlvbiBpc1NlbGVjdG9yTm90UHJvdmlkZWQob3B0aW9ucykge1xuICAgIHJldHVybiAob3B0aW9ucy5pbnN0cnVtZW50TmFtZSA9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMuaW5zdHJ1bWVudFR5cGUgPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zLmluc3RydW1lbnRVbml0ID09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucy5tZXRlck5hbWUgPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zLm1ldGVyVmVyc2lvbiA9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMubWV0ZXJTY2hlbWFVcmwgPT0gbnVsbCk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVZpZXdPcHRpb25zKHZpZXdPcHRpb25zKSB7XG4gICAgLy8gSWYgbm8gY3JpdGVyaWEgaXMgcHJvdmlkZWQsIHRoZSBTREsgU0hPVUxEIHRyZWF0IGl0IGFzIGFuIGVycm9yLlxuICAgIC8vIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIFNESyBpbXBsZW1lbnRhdGlvbnMgZmFpbCBmYXN0LlxuICAgIGlmIChpc1NlbGVjdG9yTm90UHJvdmlkZWQodmlld09wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSB2aWV3IHdpdGggbm8gc2VsZWN0b3IgYXJndW1lbnRzIHN1cHBsaWVkJyk7XG4gICAgfVxuICAgIC8vIHRoZSBTREsgU0hPVUxEIE5PVCBhbGxvdyBWaWV3cyB3aXRoIGEgc3BlY2lmaWVkIG5hbWUgdG8gYmUgZGVjbGFyZWQgd2l0aCBpbnN0cnVtZW50IHNlbGVjdG9ycyB0aGF0XG4gICAgLy8gbWF5IHNlbGVjdCBtb3JlIHRoYW4gb25lIGluc3RydW1lbnQgKGUuZy4gd2lsZCBjYXJkIGluc3RydW1lbnQgbmFtZSkgaW4gdGhlIHNhbWUgTWV0ZXIuXG4gICAgaWYgKHZpZXdPcHRpb25zLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgICAodmlld09wdGlvbnM/Lmluc3RydW1lbnROYW1lID09IG51bGwgfHxcbiAgICAgICAgICAgIFByZWRpY2F0ZV8xLlBhdHRlcm5QcmVkaWNhdGUuaGFzV2lsZGNhcmQodmlld09wdGlvbnMuaW5zdHJ1bWVudE5hbWUpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdzIHdpdGggYSBzcGVjaWZpZWQgbmFtZSBtdXN0IGJlIGRlY2xhcmVkIHdpdGggYW4gaW5zdHJ1bWVudCBzZWxlY3RvciB0aGF0IHNlbGVjdHMgYXQgbW9zdCBvbmUgaW5zdHJ1bWVudCBwZXIgbWV0ZXIuJyk7XG4gICAgfVxufVxuLyoqXG4gKiBDYW4gYmUgcGFzc2VkIHRvIGEge0BsaW5rIE1ldGVyUHJvdmlkZXJ9IHRvIHNlbGVjdCBpbnN0cnVtZW50cyBhbmQgYWx0ZXIgdGhlaXIgbWV0cmljIHN0cmVhbS5cbiAqL1xuY2xhc3MgVmlldyB7XG4gICAgbmFtZTtcbiAgICBkZXNjcmlwdGlvbjtcbiAgICBhZ2dyZWdhdGlvbjtcbiAgICBhdHRyaWJ1dGVzUHJvY2Vzc29yO1xuICAgIGluc3RydW1lbnRTZWxlY3RvcjtcbiAgICBtZXRlclNlbGVjdG9yO1xuICAgIGFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIFZpZXd9IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogUGFyYW1ldGVycyBjYW4gYmUgY2F0ZWdvcml6ZWQgYXMgdHdvIHR5cGVzOlxuICAgICAqICBJbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYTogVXNlZCB0byBkZXNjcmliZSB0aGUgaW5zdHJ1bWVudChzKSB0aGlzIHZpZXcgd2lsbCBiZSBhcHBsaWVkIHRvLlxuICAgICAqICBXaWxsIGJlIHRyZWF0ZWQgYXMgYWRkaXRpdmUgKHRoZSBJbnN0cnVtZW50IGhhcyB0byBtZWV0IGFsbCB0aGUgcHJvdmlkZWQgY3JpdGVyaWEgdG8gYmUgc2VsZWN0ZWQpLlxuICAgICAqXG4gICAgICogIE1ldHJpYyBzdHJlYW0gYWx0ZXJpbmc6IEFsdGVyIHRoZSBtZXRyaWMgc3RyZWFtIG9mIGluc3RydW1lbnRzIHNlbGVjdGVkIGJ5IGluc3RydW1lbnQgc2VsZWN0aW9uIGNyaXRlcmlhLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zIHtAbGluayBWaWV3T3B0aW9uc30gZm9yIGFsdGVyaW5nIHRoZSBtZXRyaWMgc3RyZWFtIGFuZCBpbnN0cnVtZW50IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMubmFtZVxuICAgICAqIEFsdGVycyB0aGUgbWV0cmljIHN0cmVhbTpcbiAgICAgKiAgVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIG1ldHJpY3Mgc3RyZWFtLlxuICAgICAqICBJZiBub3QgcHJvdmlkZWQsIHRoZSBvcmlnaW5hbCBJbnN0cnVtZW50IG5hbWUgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucy5kZXNjcmlwdGlvblxuICAgICAqIEFsdGVycyB0aGUgbWV0cmljIHN0cmVhbTpcbiAgICAgKiAgVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBtZXRyaWNzIHN0cmVhbS5cbiAgICAgKiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgb3JpZ2luYWwgSW5zdHJ1bWVudCBkZXNjcmlwdGlvbiB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuYXR0cmlidXRlc1Byb2Nlc3NvcnNcbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIElmIHByb3ZpZGVkLCB0aGUgYXR0cmlidXRlcyB3aWxsIGJlIG1vZGlmaWVkIGFzIGRlZmluZWQgYnkgdGhlIGFkZGVkIHByb2Nlc3NvcnMuXG4gICAgICogIElmIG5vdCBwcm92aWRlZCwgYWxsIGF0dHJpYnV0ZSBrZXlzIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0LlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucy5hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXRcbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIFNldHMgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBhdHRyaWJ1dGUgY29tYmluYXRpb25zIChjYXJkaW5hbGl0eSkgdGhhdCBjYW4gYmUgYWdncmVnYXRlZC5cbiAgICAgKiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBsaW1pdCBvZiAyMDAwIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuYWdncmVnYXRpb25cbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIEFsdGVycyB0aGUge0BsaW5rIEFnZ3JlZ2F0aW9ufSBvZiB0aGUgbWV0cmljIHN0cmVhbS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuaW5zdHJ1bWVudE5hbWVcbiAgICAgKiBJbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYTpcbiAgICAgKiAgT3JpZ2luYWwgbmFtZSBvZiB0aGUgSW5zdHJ1bWVudChzKSB3aXRoIHdpbGRjYXJkIHN1cHBvcnQuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmluc3RydW1lbnRUeXBlXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIFRoZSBvcmlnaW5hbCB0eXBlIG9mIHRoZSBJbnN0cnVtZW50KHMpLlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucy5pbnN0cnVtZW50VW5pdFxuICAgICAqIEluc3RydW1lbnQgc2VsZWN0aW9uIGNyaXRlcmlhOlxuICAgICAqICBUaGUgdW5pdCBvZiB0aGUgSW5zdHJ1bWVudChzKS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMubWV0ZXJOYW1lXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIFRoZSBuYW1lIG9mIHRoZSBNZXRlci4gTm8gd2lsZGNhcmQgc3VwcG9ydCwgbmFtZSBtdXN0IG1hdGNoIHRoZSBtZXRlciBleGFjdGx5LlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucy5tZXRlclZlcnNpb25cbiAgICAgKiBJbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYTpcbiAgICAgKiAgVGhlIHZlcnNpb24gb2YgdGhlIE1ldGVyLiBObyB3aWxkY2FyZCBzdXBwb3J0LCB2ZXJzaW9uIG11c3QgbWF0Y2ggZXhhY3RseS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMubWV0ZXJTY2hlbWFVcmxcbiAgICAgKiBJbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYTpcbiAgICAgKiAgVGhlIHNjaGVtYSBVUkwgb2YgdGhlIE1ldGVyLiBObyB3aWxkY2FyZCBzdXBwb3J0LCBzY2hlbWEgVVJMIG11c3QgbWF0Y2ggZXhhY3RseS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQ3JlYXRlIGEgdmlldyB0aGF0IGNoYW5nZXMgdGhlIEluc3RydW1lbnQgJ215Lmluc3RydW1lbnQnIHRvIHVzZSB0byBhblxuICAgICAqIC8vIEV4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb24gd2l0aCB0aGUgYm91bmRhcmllcyBbMjAsIDMwLCA0MF1cbiAgICAgKiBuZXcgVmlldyh7XG4gICAgICogICBhZ2dyZWdhdGlvbjogbmV3IEV4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb24oWzIwLCAzMCwgNDBdKSxcbiAgICAgKiAgIGluc3RydW1lbnROYW1lOiAnbXkuaW5zdHJ1bWVudCdcbiAgICAgKiB9KVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHZpZXdPcHRpb25zKSB7XG4gICAgICAgIHZhbGlkYXRlVmlld09wdGlvbnModmlld09wdGlvbnMpO1xuICAgICAgICAvLyBDcmVhdGUgbXVsdGktcHJvY2Vzc29yIGlmIGF0dHJpYnV0ZXNQcm9jZXNzb3JzIGFyZSBkZWZpbmVkLlxuICAgICAgICBpZiAodmlld09wdGlvbnMuYXR0cmlidXRlc1Byb2Nlc3NvcnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzUHJvY2Vzc29yID0gKDAsIEF0dHJpYnV0ZXNQcm9jZXNzb3JfMS5jcmVhdGVNdWx0aUF0dHJpYnV0ZXNQcm9jZXNzb3IpKHZpZXdPcHRpb25zLmF0dHJpYnV0ZXNQcm9jZXNzb3JzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1Byb2Nlc3NvciA9ICgwLCBBdHRyaWJ1dGVzUHJvY2Vzc29yXzEuY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IpKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYW1lID0gdmlld09wdGlvbnMubmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHZpZXdPcHRpb25zLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uID0gKDAsIEFnZ3JlZ2F0aW9uT3B0aW9uXzEudG9BZ2dyZWdhdGlvbikodmlld09wdGlvbnMuYWdncmVnYXRpb24gPz8geyB0eXBlOiBBZ2dyZWdhdGlvbk9wdGlvbl8xLkFnZ3JlZ2F0aW9uVHlwZS5ERUZBVUxUIH0pO1xuICAgICAgICB0aGlzLmluc3RydW1lbnRTZWxlY3RvciA9IG5ldyBJbnN0cnVtZW50U2VsZWN0b3JfMS5JbnN0cnVtZW50U2VsZWN0b3Ioe1xuICAgICAgICAgICAgbmFtZTogdmlld09wdGlvbnMuaW5zdHJ1bWVudE5hbWUsXG4gICAgICAgICAgICB0eXBlOiB2aWV3T3B0aW9ucy5pbnN0cnVtZW50VHlwZSxcbiAgICAgICAgICAgIHVuaXQ6IHZpZXdPcHRpb25zLmluc3RydW1lbnRVbml0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tZXRlclNlbGVjdG9yID0gbmV3IE1ldGVyU2VsZWN0b3JfMS5NZXRlclNlbGVjdG9yKHtcbiAgICAgICAgICAgIG5hbWU6IHZpZXdPcHRpb25zLm1ldGVyTmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IHZpZXdPcHRpb25zLm1ldGVyVmVyc2lvbixcbiAgICAgICAgICAgIHNjaGVtYVVybDogdmlld09wdGlvbnMubWV0ZXJTY2hlbWFVcmwsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA9IHZpZXdPcHRpb25zLmFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICB9XG59XG5leHBvcnRzLlZpZXcgPSBWaWV3O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Vmlldy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0ZXJQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHJlc291cmNlc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Jlc291cmNlc1wiKTtcbmNvbnN0IE1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZV8xID0gcmVxdWlyZShcIi4vc3RhdGUvTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlXCIpO1xuY29uc3QgTWV0cmljQ29sbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS9NZXRyaWNDb2xsZWN0b3JcIik7XG5jb25zdCBWaWV3XzEgPSByZXF1aXJlKFwiLi92aWV3L1ZpZXdcIik7XG4vKipcbiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUge0BsaW5rIE1ldGVyUHJvdmlkZXJ9IGludGVyZmFjZS5cbiAqL1xuY2xhc3MgTWV0ZXJQcm92aWRlciB7XG4gICAgX3NoYXJlZFN0YXRlO1xuICAgIF9zaHV0ZG93biA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUgPSBuZXcgTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlXzEuTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlKG9wdGlvbnM/LnJlc291cmNlID8/ICgwLCByZXNvdXJjZXNfMS5kZWZhdWx0UmVzb3VyY2UpKCkpO1xuICAgICAgICBpZiAob3B0aW9ucz8udmlld3MgIT0gbnVsbCAmJiBvcHRpb25zLnZpZXdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgdmlld09wdGlvbiBvZiBvcHRpb25zLnZpZXdzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUudmlld1JlZ2lzdHJ5LmFkZFZpZXcobmV3IFZpZXdfMS5WaWV3KHZpZXdPcHRpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucz8ucmVhZGVycyAhPSBudWxsICYmIG9wdGlvbnMucmVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1ldHJpY1JlYWRlciBvZiBvcHRpb25zLnJlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0b3IgPSBuZXcgTWV0cmljQ29sbGVjdG9yXzEuTWV0cmljQ29sbGVjdG9yKHRoaXMuX3NoYXJlZFN0YXRlLCBtZXRyaWNSZWFkZXIpO1xuICAgICAgICAgICAgICAgIG1ldHJpY1JlYWRlci5zZXRNZXRyaWNQcm9kdWNlcihjb2xsZWN0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlLm1ldHJpY0NvbGxlY3RvcnMucHVzaChjb2xsZWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIG1ldGVyIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1ldGVyUHJvdmlkZXIuXG4gICAgICovXG4gICAgZ2V0TWV0ZXIobmFtZSwgdmVyc2lvbiA9ICcnLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktc3BlY2lmaWNhdGlvbi9ibG9iL21haW4vc3BlY2lmaWNhdGlvbi9tZXRyaWNzL3Nkay5tZCNtZXRlci1jcmVhdGlvblxuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd24pIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignQSBzaHV0ZG93biBNZXRlclByb3ZpZGVyIGNhbm5vdCBwcm92aWRlIGEgTWV0ZXInKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgYXBpXzEuY3JlYXRlTm9vcE1ldGVyKSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRTdGF0ZS5nZXRNZXRlclNoYXJlZFN0YXRlKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgc2NoZW1hVXJsOiBvcHRpb25zLnNjaGVtYVVybCxcbiAgICAgICAgfSkubWV0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNodXQgZG93biB0aGUgTWV0ZXJQcm92aWRlciBhbmQgYWxsIHJlZ2lzdGVyZWRcbiAgICAgKiBNZXRyaWNSZWFkZXJzLlxuICAgICAqXG4gICAgICogUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiBhbGwgZmx1c2hlcyBhcmUgY29tcGxldGUuXG4gICAgICovXG4gICAgYXN5bmMgc2h1dGRvd24ob3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd24pIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2Fybignc2h1dGRvd24gbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIE1ldGVyUHJvdmlkZXInKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaHV0ZG93biA9IHRydWU7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3NoYXJlZFN0YXRlLm1ldHJpY0NvbGxlY3RvcnMubWFwKGNvbGxlY3RvciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdG9yLnNodXRkb3duKG9wdGlvbnMpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIGFsbCByZWdpc3RlcmVkIE1ldHJpY1JlYWRlcnMgdG8gZmx1c2ggYW55IGJ1ZmZlcmVkIGRhdGEuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIGFsbCBmbHVzaGVzIGFyZSBjb21wbGV0ZS5cbiAgICAgKi9cbiAgICBhc3luYyBmb3JjZUZsdXNoKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gZG8gbm90IGZsdXNoIGFmdGVyIHNodXRkb3duXG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bikge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdpbnZhbGlkIGF0dGVtcHQgdG8gZm9yY2UgZmx1c2ggYWZ0ZXIgTWV0ZXJQcm92aWRlciBzaHV0ZG93bicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3NoYXJlZFN0YXRlLm1ldHJpY0NvbGxlY3RvcnMubWFwKGNvbGxlY3RvciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdG9yLmZvcmNlRmx1c2gob3B0aW9ucyk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5leHBvcnRzLk1ldGVyUHJvdmlkZXIgPSBNZXRlclByb3ZpZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0ZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVGltZW91dEVycm9yID0gZXhwb3J0cy5jcmVhdGVEZW55TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBleHBvcnRzLmNyZWF0ZUFsbG93TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVHlwZSA9IGV4cG9ydHMuTWV0ZXJQcm92aWRlciA9IGV4cG9ydHMuQ29uc29sZU1ldHJpY0V4cG9ydGVyID0gZXhwb3J0cy5Jbk1lbW9yeU1ldHJpY0V4cG9ydGVyID0gZXhwb3J0cy5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlciA9IGV4cG9ydHMuTWV0cmljUmVhZGVyID0gZXhwb3J0cy5JbnN0cnVtZW50VHlwZSA9IGV4cG9ydHMuRGF0YVBvaW50VHlwZSA9IGV4cG9ydHMuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHZvaWQgMDtcbnZhciBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XzEgPSByZXF1aXJlKFwiLi9leHBvcnQvQWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5OyB9IH0pO1xudmFyIE1ldHJpY0RhdGFfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9NZXRyaWNEYXRhXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGF0YVBvaW50VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWV0cmljRGF0YV8xLkRhdGFQb2ludFR5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbnN0cnVtZW50VHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlOyB9IH0pO1xudmFyIE1ldHJpY1JlYWRlcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L01ldHJpY1JlYWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1ldHJpY1JlYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWV0cmljUmVhZGVyXzEuTWV0cmljUmVhZGVyOyB9IH0pO1xudmFyIFBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXJfMS5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjsgfSB9KTtcbnZhciBJbk1lbW9yeU1ldHJpY0V4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvSW5NZW1vcnlNZXRyaWNFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluTWVtb3J5TWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEluTWVtb3J5TWV0cmljRXhwb3J0ZXJfMS5Jbk1lbW9yeU1ldHJpY0V4cG9ydGVyOyB9IH0pO1xudmFyIENvbnNvbGVNZXRyaWNFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0NvbnNvbGVNZXRyaWNFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnNvbGVNZXRyaWNFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29uc29sZU1ldHJpY0V4cG9ydGVyXzEuQ29uc29sZU1ldHJpY0V4cG9ydGVyOyB9IH0pO1xudmFyIE1ldGVyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL01ldGVyUHJvdmlkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZXRlclByb3ZpZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBNZXRlclByb3ZpZGVyXzEuTWV0ZXJQcm92aWRlcjsgfSB9KTtcbnZhciBBZ2dyZWdhdGlvbk9wdGlvbl8xID0gcmVxdWlyZShcIi4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFnZ3JlZ2F0aW9uVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQWdncmVnYXRpb25PcHRpb25fMS5BZ2dyZWdhdGlvblR5cGU7IH0gfSk7XG52YXIgQXR0cmlidXRlc1Byb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4vdmlldy9BdHRyaWJ1dGVzUHJvY2Vzc29yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWxsb3dMaXN0QXR0cmlidXRlc1Byb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXR0cmlidXRlc1Byb2Nlc3Nvcl8xLmNyZWF0ZUFsbG93TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZW55TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZXNQcm9jZXNzb3JfMS5jcmVhdGVEZW55TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3I7IH0gfSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGltZW91dEVycm9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLlRpbWVvdXRFcnJvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gdm9pZCAwO1xuLyoqXG4gKiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5IGRlZmluZXMgaG93IGEgbWV0cmljIGFnZ3JlZ2F0b3IgcmVwb3J0cyBhZ2dyZWdhdGVkXG4gKiB2YWx1ZXMuIEl0IGRlc2NyaWJlcyBob3cgdGhvc2UgdmFsdWVzIHJlbGF0ZSB0byB0aGUgdGltZSBpbnRlcnZhbCBvdmVyXG4gKiB3aGljaCB0aGV5IGFyZSBhZ2dyZWdhdGVkLlxuICovXG52YXIgRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4oZnVuY3Rpb24gKEVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgLyogVU5TUEVDSUZJRUQgaXMgdGhlIGRlZmF1bHQgQWdncmVnYXRpb25UZW1wb3JhbGl0eSwgaXQgTVVTVCBub3QgYmUgdXNlZC4gKi9cbiAgICBFQWdncmVnYXRpb25UZW1wb3JhbGl0eVtFQWdncmVnYXRpb25UZW1wb3JhbGl0eVtcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCJdID0gMF0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCI7XG4gICAgLyoqIERFTFRBIGlzIGFuIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgZm9yIGEgbWV0cmljIGFnZ3JlZ2F0b3Igd2hpY2ggcmVwb3J0c1xuICAgIGNoYW5nZXMgc2luY2UgbGFzdCByZXBvcnQgdGltZS4gU3VjY2Vzc2l2ZSBtZXRyaWNzIGNvbnRhaW4gYWdncmVnYXRpb24gb2ZcbiAgICB2YWx1ZXMgZnJvbSBjb250aW51b3VzIGFuZCBub24tb3ZlcmxhcHBpbmcgaW50ZXJ2YWxzLlxuICBcbiAgICBUaGUgdmFsdWVzIGZvciBhIERFTFRBIG1ldHJpYyBhcmUgYmFzZWQgb25seSBvbiB0aGUgdGltZSBpbnRlcnZhbFxuICAgIGFzc29jaWF0ZWQgd2l0aCBvbmUgbWVhc3VyZW1lbnQgY3ljbGUuIFRoZXJlIGlzIG5vIGRlcGVuZGVuY3kgb25cbiAgICBwcmV2aW91cyBtZWFzdXJlbWVudHMgbGlrZSBpcyB0aGUgY2FzZSBmb3IgQ1VNVUxBVElWRSBtZXRyaWNzLlxuICBcbiAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBzeXN0ZW0gbWVhc3VyaW5nIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdFxuICAgIGl0IHJlY2VpdmVzIGFuZCByZXBvcnRzIHRoZSBzdW0gb2YgdGhlc2UgcmVxdWVzdHMgZXZlcnkgc2Vjb25kIGFzIGFcbiAgICBERUxUQSBtZXRyaWM6XG4gIFxuICAgIDEuIFRoZSBzeXN0ZW0gc3RhcnRzIHJlY2VpdmluZyBhdCB0aW1lPXRfMC5cbiAgICAyLiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDMuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgNC4gQSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc3lzdGVtIG1lYXN1cmVzIDEgcmVxdWVzdC5cbiAgICA1LiBUaGUgMSBzZWNvbmQgY29sbGVjdGlvbiBjeWNsZSBlbmRzLiBBIG1ldHJpYyBpcyBleHBvcnRlZCBmb3IgdGhlXG4gICAgICAgIG51bWJlciBvZiByZXF1ZXN0cyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcnZhbCBvZiB0aW1lIHRfMCB0b1xuICAgICAgICB0XzArMSB3aXRoIGEgdmFsdWUgb2YgMy5cbiAgICA2LiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDcuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgOC4gVGhlIDEgc2Vjb25kIGNvbGxlY3Rpb24gY3ljbGUgZW5kcy4gQSBtZXRyaWMgaXMgZXhwb3J0ZWQgZm9yIHRoZVxuICAgICAgICBudW1iZXIgb2YgcmVxdWVzdHMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJ2YWwgb2YgdGltZSB0XzArMSB0b1xuICAgICAgICB0XzArMiB3aXRoIGEgdmFsdWUgb2YgMi4gKi9cbiAgICBFQWdncmVnYXRpb25UZW1wb3JhbGl0eVtFQWdncmVnYXRpb25UZW1wb3JhbGl0eVtcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCJdID0gMV0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI7XG4gICAgLyoqIENVTVVMQVRJVkUgaXMgYW4gQWdncmVnYXRpb25UZW1wb3JhbGl0eSBmb3IgYSBtZXRyaWMgYWdncmVnYXRvciB3aGljaFxuICAgIHJlcG9ydHMgY2hhbmdlcyBzaW5jZSBhIGZpeGVkIHN0YXJ0IHRpbWUuIFRoaXMgbWVhbnMgdGhhdCBjdXJyZW50IHZhbHVlc1xuICAgIG9mIGEgQ1VNVUxBVElWRSBtZXRyaWMgZGVwZW5kIG9uIGFsbCBwcmV2aW91cyBtZWFzdXJlbWVudHMgc2luY2UgdGhlXG4gICAgc3RhcnQgdGltZS4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgc2VuZGVyIGlzIHJlcXVpcmVkIHRvIHJldGFpbiB0aGlzIHN0YXRlXG4gICAgaW4gc29tZSBmb3JtLiBJZiB0aGlzIHN0YXRlIGlzIGxvc3Qgb3IgaW52YWxpZGF0ZWQsIHRoZSBDVU1VTEFUSVZFIG1ldHJpY1xuICAgIHZhbHVlcyBNVVNUIGJlIHJlc2V0IGFuZCBhIG5ldyBmaXhlZCBzdGFydCB0aW1lIGZvbGxvd2luZyB0aGUgbGFzdFxuICAgIHJlcG9ydGVkIG1lYXN1cmVtZW50IHRpbWUgc2VudCBNVVNUIGJlIHVzZWQuXG4gIFxuICAgIEZvciBleGFtcGxlLCBjb25zaWRlciBhIHN5c3RlbSBtZWFzdXJpbmcgdGhlIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0XG4gICAgaXQgcmVjZWl2ZXMgYW5kIHJlcG9ydHMgdGhlIHN1bSBvZiB0aGVzZSByZXF1ZXN0cyBldmVyeSBzZWNvbmQgYXMgYVxuICAgIENVTVVMQVRJVkUgbWV0cmljOlxuICBcbiAgICAxLiBUaGUgc3lzdGVtIHN0YXJ0cyByZWNlaXZpbmcgYXQgdGltZT10XzAuXG4gICAgMi4gQSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc3lzdGVtIG1lYXN1cmVzIDEgcmVxdWVzdC5cbiAgICAzLiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDQuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgNS4gVGhlIDEgc2Vjb25kIGNvbGxlY3Rpb24gY3ljbGUgZW5kcy4gQSBtZXRyaWMgaXMgZXhwb3J0ZWQgZm9yIHRoZVxuICAgICAgICBudW1iZXIgb2YgcmVxdWVzdHMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJ2YWwgb2YgdGltZSB0XzAgdG9cbiAgICAgICAgdF8wKzEgd2l0aCBhIHZhbHVlIG9mIDMuXG4gICAgNi4gQSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc3lzdGVtIG1lYXN1cmVzIDEgcmVxdWVzdC5cbiAgICA3LiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDguIFRoZSAxIHNlY29uZCBjb2xsZWN0aW9uIGN5Y2xlIGVuZHMuIEEgbWV0cmljIGlzIGV4cG9ydGVkIGZvciB0aGVcbiAgICAgICAgbnVtYmVyIG9mIHJlcXVlc3RzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVydmFsIG9mIHRpbWUgdF8wIHRvXG4gICAgICAgIHRfMCsyIHdpdGggYSB2YWx1ZSBvZiA1LlxuICAgIDkuIFRoZSBzeXN0ZW0gZXhwZXJpZW5jZXMgYSBmYXVsdCBhbmQgbG9zZXMgc3RhdGUuXG4gICAgMTAuIFRoZSBzeXN0ZW0gcmVjb3ZlcnMgYW5kIHJlc3VtZXMgcmVjZWl2aW5nIGF0IHRpbWU9dF8xLlxuICAgIDExLiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDEyLiBUaGUgMSBzZWNvbmQgY29sbGVjdGlvbiBjeWNsZSBlbmRzLiBBIG1ldHJpYyBpcyBleHBvcnRlZCBmb3IgdGhlXG4gICAgICAgIG51bWJlciBvZiByZXF1ZXN0cyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcnZhbCBvZiB0aW1lIHRfMSB0b1xuICAgICAgICB0XzArMSB3aXRoIGEgdmFsdWUgb2YgMS5cbiAgXG4gICAgTm90ZTogRXZlbiB0aG91Z2gsIHdoZW4gcmVwb3J0aW5nIGNoYW5nZXMgc2luY2UgbGFzdCByZXBvcnQgdGltZSwgdXNpbmdcbiAgICBDVU1VTEFUSVZFIGlzIHZhbGlkLCBpdCBpcyBub3QgcmVjb21tZW5kZWQuIFRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGZvclxuICAgIHN5c3RlbXMgdGhhdCBkbyBub3QgdXNlIHN0YXJ0X3RpbWUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uXG4gICAgdmFsdWUgd2FzIHJlc2V0IChlLmcuIFByb21ldGhldXMpLiAqL1xuICAgIEVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W0VBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W1wiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiXSA9IDJdID0gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9DVU1VTEFUSVZFXCI7XG59KShFQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGV4cG9ydHMuRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgfHwgKGV4cG9ydHMuRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwtdHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0ID0gZXhwb3J0cy50b01ldHJpYyA9IGV4cG9ydHMudG9TY29wZU1ldHJpY3MgPSBleHBvcnRzLnRvUmVzb3VyY2VNZXRyaWNzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc2RrX21ldHJpY3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZGstbWV0cmljc1wiKTtcbmNvbnN0IGludGVybmFsX3R5cGVzXzEgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC10eXBlc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL3V0aWxzXCIpO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vaW50ZXJuYWxcIik7XG5mdW5jdGlvbiB0b1Jlc291cmNlTWV0cmljcyhyZXNvdXJjZU1ldHJpY3MsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlbmNvZGVyID0gKDAsIHV0aWxzXzEuZ2V0T3RscEVuY29kZXIpKG9wdGlvbnMpO1xuICAgIGNvbnN0IHByb2Nlc3NlZFJlc291cmNlID0gKDAsIGludGVybmFsXzEuY3JlYXRlUmVzb3VyY2UpKHJlc291cmNlTWV0cmljcy5yZXNvdXJjZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6IHByb2Nlc3NlZFJlc291cmNlLFxuICAgICAgICBzY2hlbWFVcmw6IHByb2Nlc3NlZFJlc291cmNlLnNjaGVtYVVybCxcbiAgICAgICAgc2NvcGVNZXRyaWNzOiB0b1Njb3BlTWV0cmljcyhyZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzLCBlbmNvZGVyKSxcbiAgICB9O1xufVxuZXhwb3J0cy50b1Jlc291cmNlTWV0cmljcyA9IHRvUmVzb3VyY2VNZXRyaWNzO1xuZnVuY3Rpb24gdG9TY29wZU1ldHJpY3Moc2NvcGVNZXRyaWNzLCBlbmNvZGVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2NvcGVNZXRyaWNzLm1hcChtZXRyaWNzID0+ICh7XG4gICAgICAgIHNjb3BlOiAoMCwgaW50ZXJuYWxfMS5jcmVhdGVJbnN0cnVtZW50YXRpb25TY29wZSkobWV0cmljcy5zY29wZSksXG4gICAgICAgIG1ldHJpY3M6IG1ldHJpY3MubWV0cmljcy5tYXAobWV0cmljRGF0YSA9PiB0b01ldHJpYyhtZXRyaWNEYXRhLCBlbmNvZGVyKSksXG4gICAgICAgIHNjaGVtYVVybDogbWV0cmljcy5zY29wZS5zY2hlbWFVcmwsXG4gICAgfSkpKTtcbn1cbmV4cG9ydHMudG9TY29wZU1ldHJpY3MgPSB0b1Njb3BlTWV0cmljcztcbmZ1bmN0aW9uIHRvTWV0cmljKG1ldHJpY0RhdGEsIGVuY29kZXIpIHtcbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICAgIG5hbWU6IG1ldHJpY0RhdGEuZGVzY3JpcHRvci5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogbWV0cmljRGF0YS5kZXNjcmlwdG9yLmRlc2NyaXB0aW9uLFxuICAgICAgICB1bml0OiBtZXRyaWNEYXRhLmRlc2NyaXB0b3IudW5pdCxcbiAgICB9O1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB0b0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkobWV0cmljRGF0YS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KTtcbiAgICBzd2l0Y2ggKG1ldHJpY0RhdGEuZGF0YVBvaW50VHlwZSkge1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5TVU06XG4gICAgICAgICAgICBvdXQuc3VtID0ge1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICAgICAgaXNNb25vdG9uaWM6IG1ldHJpY0RhdGEuaXNNb25vdG9uaWMsXG4gICAgICAgICAgICAgICAgZGF0YVBvaW50czogdG9TaW5ndWxhckRhdGFQb2ludHMobWV0cmljRGF0YSwgZW5jb2RlciksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLkdBVUdFOlxuICAgICAgICAgICAgb3V0LmdhdWdlID0ge1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludHM6IHRvU2luZ3VsYXJEYXRhUG9pbnRzKG1ldHJpY0RhdGEsIGVuY29kZXIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5ISVNUT0dSQU06XG4gICAgICAgICAgICBvdXQuaGlzdG9ncmFtID0ge1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICAgICAgZGF0YVBvaW50czogdG9IaXN0b2dyYW1EYXRhUG9pbnRzKG1ldHJpY0RhdGEsIGVuY29kZXIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5FWFBPTkVOVElBTF9ISVNUT0dSQU06XG4gICAgICAgICAgICBvdXQuZXhwb25lbnRpYWxIaXN0b2dyYW0gPSB7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRzOiB0b0V4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50cyhtZXRyaWNEYXRhLCBlbmNvZGVyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydHMudG9NZXRyaWMgPSB0b01ldHJpYztcbmZ1bmN0aW9uIHRvU2luZ3VsYXJEYXRhUG9pbnQoZGF0YVBvaW50LCB2YWx1ZVR5cGUsIGVuY29kZXIpIHtcbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICAgIGF0dHJpYnV0ZXM6ICgwLCBpbnRlcm5hbF8xLnRvQXR0cmlidXRlcykoZGF0YVBvaW50LmF0dHJpYnV0ZXMpLFxuICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LnN0YXJ0VGltZSksXG4gICAgICAgIHRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LmVuZFRpbWUpLFxuICAgIH07XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgICAgY2FzZSBhcGlfMS5WYWx1ZVR5cGUuSU5UOlxuICAgICAgICAgICAgb3V0LmFzSW50ID0gZGF0YVBvaW50LnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgYXBpXzEuVmFsdWVUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgIG91dC5hc0RvdWJsZSA9IGRhdGFQb2ludC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuZnVuY3Rpb24gdG9TaW5ndWxhckRhdGFQb2ludHMobWV0cmljRGF0YSwgZW5jb2Rlcikge1xuICAgIHJldHVybiBtZXRyaWNEYXRhLmRhdGFQb2ludHMubWFwKGRhdGFQb2ludCA9PiB7XG4gICAgICAgIHJldHVybiB0b1Npbmd1bGFyRGF0YVBvaW50KGRhdGFQb2ludCwgbWV0cmljRGF0YS5kZXNjcmlwdG9yLnZhbHVlVHlwZSwgZW5jb2Rlcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b0hpc3RvZ3JhbURhdGFQb2ludHMobWV0cmljRGF0YSwgZW5jb2Rlcikge1xuICAgIHJldHVybiBtZXRyaWNEYXRhLmRhdGFQb2ludHMubWFwKGRhdGFQb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvZ3JhbSA9IGRhdGFQb2ludC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICgwLCBpbnRlcm5hbF8xLnRvQXR0cmlidXRlcykoZGF0YVBvaW50LmF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgYnVja2V0Q291bnRzOiBoaXN0b2dyYW0uYnVja2V0cy5jb3VudHMsXG4gICAgICAgICAgICBleHBsaWNpdEJvdW5kczogaGlzdG9ncmFtLmJ1Y2tldHMuYm91bmRhcmllcyxcbiAgICAgICAgICAgIGNvdW50OiBoaXN0b2dyYW0uY291bnQsXG4gICAgICAgICAgICBzdW06IGhpc3RvZ3JhbS5zdW0sXG4gICAgICAgICAgICBtaW46IGhpc3RvZ3JhbS5taW4sXG4gICAgICAgICAgICBtYXg6IGhpc3RvZ3JhbS5tYXgsXG4gICAgICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LnN0YXJ0VGltZSksXG4gICAgICAgICAgICB0aW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKGRhdGFQb2ludC5lbmRUaW1lKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRzKG1ldHJpY0RhdGEsIGVuY29kZXIpIHtcbiAgICByZXR1cm4gbWV0cmljRGF0YS5kYXRhUG9pbnRzLm1hcChkYXRhUG9pbnQgPT4ge1xuICAgICAgICBjb25zdCBoaXN0b2dyYW0gPSBkYXRhUG9pbnQudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiAoMCwgaW50ZXJuYWxfMS50b0F0dHJpYnV0ZXMpKGRhdGFQb2ludC5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgIGNvdW50OiBoaXN0b2dyYW0uY291bnQsXG4gICAgICAgICAgICBtaW46IGhpc3RvZ3JhbS5taW4sXG4gICAgICAgICAgICBtYXg6IGhpc3RvZ3JhbS5tYXgsXG4gICAgICAgICAgICBzdW06IGhpc3RvZ3JhbS5zdW0sXG4gICAgICAgICAgICBwb3NpdGl2ZToge1xuICAgICAgICAgICAgICAgIG9mZnNldDogaGlzdG9ncmFtLnBvc2l0aXZlLm9mZnNldCxcbiAgICAgICAgICAgICAgICBidWNrZXRDb3VudHM6IGhpc3RvZ3JhbS5wb3NpdGl2ZS5idWNrZXRDb3VudHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmVnYXRpdmU6IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGhpc3RvZ3JhbS5uZWdhdGl2ZS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgYnVja2V0Q291bnRzOiBoaXN0b2dyYW0ubmVnYXRpdmUuYnVja2V0Q291bnRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjYWxlOiBoaXN0b2dyYW0uc2NhbGUsXG4gICAgICAgICAgICB6ZXJvQ291bnQ6IGhpc3RvZ3JhbS56ZXJvQ291bnQsXG4gICAgICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LnN0YXJ0VGltZSksXG4gICAgICAgICAgICB0aW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKGRhdGFQb2ludC5lbmRUaW1lKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvQWdncmVnYXRpb25UZW1wb3JhbGl0eSh0ZW1wb3JhbGl0eSkge1xuICAgIHN3aXRjaCAodGVtcG9yYWxpdHkpIHtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuREVMVEE6XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfdHlwZXNfMS5FQWdncmVnYXRpb25UZW1wb3JhbGl0eS5BR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQTtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuQ1VNVUxBVElWRTpcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLkVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkU7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KHJlc291cmNlTWV0cmljcywgb3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc291cmNlTWV0cmljczogcmVzb3VyY2VNZXRyaWNzLm1hcChtZXRyaWNzID0+IHRvUmVzb3VyY2VNZXRyaWNzKG1ldHJpY3MsIG9wdGlvbnMpKSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgPSBjcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IHJvb3QgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkL3Jvb3RcIik7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuY29uc3QgbWV0cmljc1Jlc3BvbnNlVHlwZSA9IHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgIC5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlO1xuY29uc3QgbWV0cmljc1JlcXVlc3RUeXBlID0gcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdDtcbmV4cG9ydHMuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciA9IHtcbiAgICBzZXJpYWxpemVSZXF1ZXN0OiAoYXJnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgaW50ZXJuYWxfMS5jcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QpKFthcmddKTtcbiAgICAgICAgcmV0dXJuIG1ldHJpY3NSZXF1ZXN0VHlwZS5lbmNvZGUocmVxdWVzdCkuZmluaXNoKCk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZVJlc3BvbnNlOiAoYXJnKSA9PiB7XG4gICAgICAgIHJldHVybiBtZXRyaWNzUmVzcG9uc2VUeXBlLmRlY29kZShhcmcpO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0cmljcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciA9IHZvaWQgMDtcbi8vIElNUE9SVEFOVDogZXhwb3J0cyBhZGRlZCBoZXJlIGFyZSBwdWJsaWNcbnZhciBtZXRyaWNzXzEgPSByZXF1aXJlKFwiLi9tZXRyaWNzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljc18xLlByb3RvYnVmTWV0cmljc1NlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0ID0gZXhwb3J0cy50b090bHBTcGFuRXZlbnQgPSBleHBvcnRzLnRvT3RscExpbmsgPSBleHBvcnRzLnNka1NwYW5Ub090bHBTcGFuID0gdm9pZCAwO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vaW50ZXJuYWxcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL2NvbW1vbi91dGlsc1wiKTtcbi8vIFNwYW4gZmxhZ3MgY29uc3RhbnRzIG1hdGNoaW5nIHRoZSBPVExQIHNwZWNpZmljYXRpb25cbmNvbnN0IFNQQU5fRkxBR1NfQ09OVEVYVF9IQVNfSVNfUkVNT1RFX01BU0sgPSAweDEwMDtcbmNvbnN0IFNQQU5fRkxBR1NfQ09OVEVYVF9JU19SRU1PVEVfTUFTSyA9IDB4MjAwO1xuLyoqXG4gKiBCdWlsZHMgdGhlIDMyLWJpdCBzcGFuIGZsYWdzIHZhbHVlIGNvbWJpbmluZyB0aGUgbG93IDgtYml0IFczQyBUcmFjZUZsYWdzXG4gKiB3aXRoIHRoZSBIQVNfSVNfUkVNT1RFIGFuZCBJU19SRU1PVEUgYml0cyBhY2NvcmRpbmcgdG8gdGhlIE9UTFAgc3BlYy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTcGFuRmxhZ3NGcm9tKHRyYWNlRmxhZ3MsIGlzUmVtb3RlKSB7XG4gICAgLy8gbG93IDggYml0cyBhcmUgVzNDIFRyYWNlRmxhZ3MgKGUuZy4sIHNhbXBsZWQpXG4gICAgbGV0IGZsYWdzID0gKHRyYWNlRmxhZ3MgJiAweGZmKSB8IFNQQU5fRkxBR1NfQ09OVEVYVF9IQVNfSVNfUkVNT1RFX01BU0s7XG4gICAgaWYgKGlzUmVtb3RlKSB7XG4gICAgICAgIGZsYWdzIHw9IFNQQU5fRkxBR1NfQ09OVEVYVF9JU19SRU1PVEVfTUFTSztcbiAgICB9XG4gICAgcmV0dXJuIGZsYWdzO1xufVxuZnVuY3Rpb24gc2RrU3BhblRvT3RscFNwYW4oc3BhbiwgZW5jb2Rlcikge1xuICAgIGNvbnN0IGN0eCA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgICBjb25zdCBzdGF0dXMgPSBzcGFuLnN0YXR1cztcbiAgICBjb25zdCBwYXJlbnRTcGFuSWQgPSBzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5zcGFuSWRcbiAgICAgICAgPyBlbmNvZGVyLmVuY29kZVNwYW5Db250ZXh0KHNwYW4ucGFyZW50U3BhbkNvbnRleHQ/LnNwYW5JZClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHJhY2VJZDogZW5jb2Rlci5lbmNvZGVTcGFuQ29udGV4dChjdHgudHJhY2VJZCksXG4gICAgICAgIHNwYW5JZDogZW5jb2Rlci5lbmNvZGVTcGFuQ29udGV4dChjdHguc3BhbklkKSxcbiAgICAgICAgcGFyZW50U3BhbklkOiBwYXJlbnRTcGFuSWQsXG4gICAgICAgIHRyYWNlU3RhdGU6IGN0eC50cmFjZVN0YXRlPy5zZXJpYWxpemUoKSxcbiAgICAgICAgbmFtZTogc3Bhbi5uYW1lLFxuICAgICAgICAvLyBTcGFuIGtpbmQgaXMgb2Zmc2V0IGJ5IDEgYmVjYXVzZSB0aGUgQVBJIGRvZXMgbm90IGRlZmluZSBhIHZhbHVlIGZvciB1bnNldFxuICAgICAgICBraW5kOiBzcGFuLmtpbmQgPT0gbnVsbCA/IDAgOiBzcGFuLmtpbmQgKyAxLFxuICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoc3Bhbi5zdGFydFRpbWUpLFxuICAgICAgICBlbmRUaW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKHNwYW4uZW5kVGltZSksXG4gICAgICAgIGF0dHJpYnV0ZXM6ICgwLCBpbnRlcm5hbF8xLnRvQXR0cmlidXRlcykoc3Bhbi5hdHRyaWJ1dGVzKSxcbiAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogc3Bhbi5kcm9wcGVkQXR0cmlidXRlc0NvdW50LFxuICAgICAgICBldmVudHM6IHNwYW4uZXZlbnRzLm1hcChldmVudCA9PiB0b090bHBTcGFuRXZlbnQoZXZlbnQsIGVuY29kZXIpKSxcbiAgICAgICAgZHJvcHBlZEV2ZW50c0NvdW50OiBzcGFuLmRyb3BwZWRFdmVudHNDb3VudCxcbiAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICAvLyBBUEkgYW5kIHByb3RvIGVudW1zIHNoYXJlIHRoZSBzYW1lIHZhbHVlc1xuICAgICAgICAgICAgY29kZTogc3RhdHVzLmNvZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBzdGF0dXMubWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGlua3M6IHNwYW4ubGlua3MubWFwKGxpbmsgPT4gdG9PdGxwTGluayhsaW5rLCBlbmNvZGVyKSksXG4gICAgICAgIGRyb3BwZWRMaW5rc0NvdW50OiBzcGFuLmRyb3BwZWRMaW5rc0NvdW50LFxuICAgICAgICBmbGFnczogYnVpbGRTcGFuRmxhZ3NGcm9tKGN0eC50cmFjZUZsYWdzLCBzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5pc1JlbW90ZSksXG4gICAgfTtcbn1cbmV4cG9ydHMuc2RrU3BhblRvT3RscFNwYW4gPSBzZGtTcGFuVG9PdGxwU3BhbjtcbmZ1bmN0aW9uIHRvT3RscExpbmsobGluaywgZW5jb2Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IGxpbmsuYXR0cmlidXRlcyA/ICgwLCBpbnRlcm5hbF8xLnRvQXR0cmlidXRlcykobGluay5hdHRyaWJ1dGVzKSA6IFtdLFxuICAgICAgICBzcGFuSWQ6IGVuY29kZXIuZW5jb2RlU3BhbkNvbnRleHQobGluay5jb250ZXh0LnNwYW5JZCksXG4gICAgICAgIHRyYWNlSWQ6IGVuY29kZXIuZW5jb2RlU3BhbkNvbnRleHQobGluay5jb250ZXh0LnRyYWNlSWQpLFxuICAgICAgICB0cmFjZVN0YXRlOiBsaW5rLmNvbnRleHQudHJhY2VTdGF0ZT8uc2VyaWFsaXplKCksXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGxpbmsuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCB8fCAwLFxuICAgICAgICBmbGFnczogYnVpbGRTcGFuRmxhZ3NGcm9tKGxpbmsuY29udGV4dC50cmFjZUZsYWdzLCBsaW5rLmNvbnRleHQuaXNSZW1vdGUpLFxuICAgIH07XG59XG5leHBvcnRzLnRvT3RscExpbmsgPSB0b090bHBMaW5rO1xuZnVuY3Rpb24gdG9PdGxwU3BhbkV2ZW50KHRpbWVkRXZlbnQsIGVuY29kZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0aW1lZEV2ZW50LmF0dHJpYnV0ZXNcbiAgICAgICAgICAgID8gKDAsIGludGVybmFsXzEudG9BdHRyaWJ1dGVzKSh0aW1lZEV2ZW50LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBuYW1lOiB0aW1lZEV2ZW50Lm5hbWUsXG4gICAgICAgIHRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUodGltZWRFdmVudC50aW1lKSxcbiAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogdGltZWRFdmVudC5kcm9wcGVkQXR0cmlidXRlc0NvdW50IHx8IDAsXG4gICAgfTtcbn1cbmV4cG9ydHMudG9PdGxwU3BhbkV2ZW50ID0gdG9PdGxwU3BhbkV2ZW50O1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3Qoc3BhbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlbmNvZGVyID0gKDAsIHV0aWxzXzEuZ2V0T3RscEVuY29kZXIpKG9wdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc291cmNlU3BhbnM6IHNwYW5SZWNvcmRzVG9SZXNvdXJjZVNwYW5zKHNwYW5zLCBlbmNvZGVyKSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0ID0gY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdDtcbmZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlTWFwKHJlYWRhYmxlU3BhbnMpIHtcbiAgICBjb25zdCByZXNvdXJjZU1hcCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWFkYWJsZVNwYW5zKSB7XG4gICAgICAgIGxldCBpbHNNYXAgPSByZXNvdXJjZU1hcC5nZXQocmVjb3JkLnJlc291cmNlKTtcbiAgICAgICAgaWYgKCFpbHNNYXApIHtcbiAgICAgICAgICAgIGlsc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHJlc291cmNlTWFwLnNldChyZWNvcmQucmVzb3VyY2UsIGlsc01hcCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyB0aGlzIGlzIGR1cGxpY2F0ZWQgaW4gYmFzaWMgdHJhY2VyLiBDb25zb2xpZGF0ZSBvbiBhIGNvbW1vbiBoZWxwZXIgaW4gY29yZVxuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb25TY29wZUtleSA9IGAke3JlY29yZC5pbnN0cnVtZW50YXRpb25TY29wZS5uYW1lfUAke3JlY29yZC5pbnN0cnVtZW50YXRpb25TY29wZS52ZXJzaW9uIHx8ICcnfToke3JlY29yZC5pbnN0cnVtZW50YXRpb25TY29wZS5zY2hlbWFVcmwgfHwgJyd9YDtcbiAgICAgICAgbGV0IHJlY29yZHMgPSBpbHNNYXAuZ2V0KGluc3RydW1lbnRhdGlvblNjb3BlS2V5KTtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZWNvcmRzID0gW107XG4gICAgICAgICAgICBpbHNNYXAuc2V0KGluc3RydW1lbnRhdGlvblNjb3BlS2V5LCByZWNvcmRzKTtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlTWFwO1xufVxuZnVuY3Rpb24gc3BhblJlY29yZHNUb1Jlc291cmNlU3BhbnMocmVhZGFibGVTcGFucywgZW5jb2Rlcikge1xuICAgIGNvbnN0IHJlc291cmNlTWFwID0gY3JlYXRlUmVzb3VyY2VNYXAocmVhZGFibGVTcGFucyk7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgY29uc3QgZW50cnlJdGVyYXRvciA9IHJlc291cmNlTWFwLmVudHJpZXMoKTtcbiAgICBsZXQgZW50cnkgPSBlbnRyeUl0ZXJhdG9yLm5leHQoKTtcbiAgICB3aGlsZSAoIWVudHJ5LmRvbmUpIHtcbiAgICAgICAgY29uc3QgW3Jlc291cmNlLCBpbG1NYXBdID0gZW50cnkudmFsdWU7XG4gICAgICAgIGNvbnN0IHNjb3BlUmVzb3VyY2VTcGFucyA9IFtdO1xuICAgICAgICBjb25zdCBpbG1JdGVyYXRvciA9IGlsbU1hcC52YWx1ZXMoKTtcbiAgICAgICAgbGV0IGlsbUVudHJ5ID0gaWxtSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIWlsbUVudHJ5LmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlU3BhbnMgPSBpbG1FbnRyeS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChzY29wZVNwYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFucyA9IHNjb3BlU3BhbnMubWFwKHJlYWRhYmxlU3BhbiA9PiBzZGtTcGFuVG9PdGxwU3BhbihyZWFkYWJsZVNwYW4sIGVuY29kZXIpKTtcbiAgICAgICAgICAgICAgICBzY29wZVJlc291cmNlU3BhbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiAoMCwgaW50ZXJuYWxfMS5jcmVhdGVJbnN0cnVtZW50YXRpb25TY29wZSkoc2NvcGVTcGFuc1swXS5pbnN0cnVtZW50YXRpb25TY29wZSksXG4gICAgICAgICAgICAgICAgICAgIHNwYW5zOiBzcGFucyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hVXJsOiBzY29wZVNwYW5zWzBdLmluc3RydW1lbnRhdGlvblNjb3BlLnNjaGVtYVVybCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlsbUVudHJ5ID0gaWxtSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFJlc291cmNlID0gKDAsIGludGVybmFsXzEuY3JlYXRlUmVzb3VyY2UpKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTcGFucyA9IHtcbiAgICAgICAgICAgIHJlc291cmNlOiBwcm9jZXNzZWRSZXNvdXJjZSxcbiAgICAgICAgICAgIHNjb3BlU3BhbnM6IHNjb3BlUmVzb3VyY2VTcGFucyxcbiAgICAgICAgICAgIHNjaGVtYVVybDogcHJvY2Vzc2VkUmVzb3VyY2Uuc2NoZW1hVXJsLFxuICAgICAgICB9O1xuICAgICAgICBvdXQucHVzaCh0cmFuc2Zvcm1lZFNwYW5zKTtcbiAgICAgICAgZW50cnkgPSBlbnRyeUl0ZXJhdG9yLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVybmFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm90b2J1ZlRyYWNlU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IHJvb3QgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkL3Jvb3RcIik7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuY29uc3QgdHJhY2VSZXNwb25zZVR5cGUgPSByb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxXG4gICAgLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlO1xuY29uc3QgdHJhY2VSZXF1ZXN0VHlwZSA9IHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdDtcbmV4cG9ydHMuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXIgPSB7XG4gICAgc2VyaWFsaXplUmVxdWVzdDogKGFyZykgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKDAsIGludGVybmFsXzEuY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCkoYXJnKTtcbiAgICAgICAgcmV0dXJuIHRyYWNlUmVxdWVzdFR5cGUuZW5jb2RlKHJlcXVlc3QpLmZpbmlzaCgpO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemVSZXNwb25zZTogKGFyZykgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2VSZXNwb25zZVR5cGUuZGVjb2RlKGFyZyk7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXIgPSB2b2lkIDA7XG4vLyBJTVBPUlRBTlQ6IGV4cG9ydHMgYWRkZWQgaGVyZSBhcmUgcHVibGljXG52YXIgdHJhY2VfMSA9IHJlcXVpcmUoXCIuL3RyYWNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYWNlXzEuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Kc29uTG9nc1NlcmlhbGl6ZXIgPSB2b2lkIDA7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuLypcbiAqIEBleHBlcmltZW50YWwgdGhpcyBzZXJpYWxpemVyIG1heSByZWNlaXZlIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgdmVyc2lvbnMsIHBpbiB0aGlzIHBhY2thZ2UncyB2ZXJzaW9uIHdoZW4gdXNpbmcgdGhpcyBjb25zdGFudFxuICovXG5leHBvcnRzLkpzb25Mb2dzU2VyaWFsaXplciA9IHtcbiAgICBzZXJpYWxpemVSZXF1ZXN0OiAoYXJnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgaW50ZXJuYWxfMS5jcmVhdGVFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QpKGFyZywge1xuICAgICAgICAgICAgdXNlSGV4OiB0cnVlLFxuICAgICAgICAgICAgdXNlTG9uZ0JpdHM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemVSZXNwb25zZTogKGFyZykgPT4ge1xuICAgICAgICBpZiAoYXJnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2Rlci5kZWNvZGUoYXJnKSk7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Kc29uTG9nc1NlcmlhbGl6ZXIgPSB2b2lkIDA7XG4vLyBJTVBPUlRBTlQ6IGV4cG9ydHMgYWRkZWQgaGVyZSBhcmUgcHVibGljXG52YXIgbG9nc18xID0gcmVxdWlyZShcIi4vbG9nc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpzb25Mb2dzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nc18xLkpzb25Mb2dzU2VyaWFsaXplcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkpzb25NZXRyaWNzU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IGludGVybmFsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWxcIik7XG5leHBvcnRzLkpzb25NZXRyaWNzU2VyaWFsaXplciA9IHtcbiAgICBzZXJpYWxpemVSZXF1ZXN0OiAoYXJnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgaW50ZXJuYWxfMS5jcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QpKFthcmddLCB7XG4gICAgICAgICAgICB1c2VMb25nQml0czogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZVJlc3BvbnNlOiAoYXJnKSA9PiB7XG4gICAgICAgIGlmIChhcmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVyLmRlY29kZShhcmcpKTtcbiAgICB9LFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldHJpY3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkpzb25NZXRyaWNzU2VyaWFsaXplciA9IHZvaWQgMDtcbi8vIElNUE9SVEFOVDogZXhwb3J0cyBhZGRlZCBoZXJlIGFyZSBwdWJsaWNcbnZhciBtZXRyaWNzXzEgPSByZXF1aXJlKFwiLi9tZXRyaWNzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSnNvbk1ldHJpY3NTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWNzXzEuSnNvbk1ldHJpY3NTZXJpYWxpemVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSnNvblRyYWNlU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IGludGVybmFsXzEgPSByZXF1aXJlKFwiLi4vaW50ZXJuYWxcIik7XG5leHBvcnRzLkpzb25UcmFjZVNlcmlhbGl6ZXIgPSB7XG4gICAgc2VyaWFsaXplUmVxdWVzdDogKGFyZykgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKDAsIGludGVybmFsXzEuY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCkoYXJnLCB7XG4gICAgICAgICAgICB1c2VIZXg6IHRydWUsXG4gICAgICAgICAgICB1c2VMb25nQml0czogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZVJlc3BvbnNlOiAoYXJnKSA9PiB7XG4gICAgICAgIGlmIChhcmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVyLmRlY29kZShhcmcpKTtcbiAgICB9LFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Kc29uVHJhY2VTZXJpYWxpemVyID0gdm9pZCAwO1xuLy8gSU1QT1JUQU5UOiBleHBvcnRzIGFkZGVkIGhlcmUgYXJlIHB1YmxpY1xudmFyIHRyYWNlXzEgPSByZXF1aXJlKFwiLi90cmFjZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpzb25UcmFjZVNlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYWNlXzEuSnNvblRyYWNlU2VyaWFsaXplcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Kc29uVHJhY2VTZXJpYWxpemVyID0gZXhwb3J0cy5Kc29uTWV0cmljc1NlcmlhbGl6ZXIgPSBleHBvcnRzLkpzb25Mb2dzU2VyaWFsaXplciA9IGV4cG9ydHMuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXIgPSBleHBvcnRzLlByb3RvYnVmTWV0cmljc1NlcmlhbGl6ZXIgPSBleHBvcnRzLlByb3RvYnVmTG9nc1NlcmlhbGl6ZXIgPSB2b2lkIDA7XG52YXIgcHJvdG9idWZfMSA9IHJlcXVpcmUoXCIuL2xvZ3MvcHJvdG9idWZcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm90b2J1ZkxvZ3NTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm90b2J1Zl8xLlByb3RvYnVmTG9nc1NlcmlhbGl6ZXI7IH0gfSk7XG52YXIgcHJvdG9idWZfMiA9IHJlcXVpcmUoXCIuL21ldHJpY3MvcHJvdG9idWZcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm90b2J1Zk1ldHJpY3NTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm90b2J1Zl8yLlByb3RvYnVmTWV0cmljc1NlcmlhbGl6ZXI7IH0gfSk7XG52YXIgcHJvdG9idWZfMyA9IHJlcXVpcmUoXCIuL3RyYWNlL3Byb3RvYnVmXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3RvYnVmXzMuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXI7IH0gfSk7XG52YXIganNvbl8xID0gcmVxdWlyZShcIi4vbG9ncy9qc29uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSnNvbkxvZ3NTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqc29uXzEuSnNvbkxvZ3NTZXJpYWxpemVyOyB9IH0pO1xudmFyIGpzb25fMiA9IHJlcXVpcmUoXCIuL21ldHJpY3MvanNvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpzb25NZXRyaWNzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl8yLkpzb25NZXRyaWNzU2VyaWFsaXplcjsgfSB9KTtcbnZhciBqc29uXzMgPSByZXF1aXJlKFwiLi90cmFjZS9qc29uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSnNvblRyYWNlU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl8zLkpzb25UcmFjZVNlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBbmROb3JtYWxpemVIZWFkZXJzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLyoqXG4gKiBQYXJzZXMgaGVhZGVycyBmcm9tIGNvbmZpZyBsZWF2aW5nIG9ubHkgdGhvc2UgdGhhdCBoYXZlIGRlZmluZWQgdmFsdWVzXG4gKiBAcGFyYW0gcGFydGlhbEhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBbmROb3JtYWxpemVIZWFkZXJzKHBhcnRpYWxIZWFkZXJzKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJ0aWFsSGVhZGVycz8uKCkgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBIZWFkZXIgXCIke2tleX1cIiBoYXMgaW52YWxpZCB2YWx1ZSAoJHt2YWx1ZX0pIGFuZCB3aWxsIGJlIGlnbm9yZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH07XG59XG5leHBvcnRzLnZhbGlkYXRlQW5kTm9ybWFsaXplSGVhZGVycyA9IHZhbGlkYXRlQW5kTm9ybWFsaXplSGVhZGVycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEh0dHBDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBleHBvcnRzLm1lcmdlT3RscEh0dHBDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1jb25maWd1cmF0aW9uXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBtZXJnZUhlYWRlcnModXNlclByb3ZpZGVkSGVhZGVycywgZmFsbGJhY2tIZWFkZXJzLCBkZWZhdWx0SGVhZGVycykge1xuICAgIGNvbnN0IHJlcXVpcmVkSGVhZGVycyA9IHtcbiAgICAgICAgLi4uZGVmYXVsdEhlYWRlcnMoKSxcbiAgICB9O1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyBhZGQgZmFsbGJhY2sgb25lcyBmaXJzdFxuICAgICAgICBpZiAoZmFsbGJhY2tIZWFkZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgZmFsbGJhY2tIZWFkZXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG92ZXJyaWRlIHdpdGggdXNlci1wcm92aWRlZCBvbmVzXG4gICAgICAgIGlmICh1c2VyUHJvdmlkZWRIZWFkZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgdXNlclByb3ZpZGVkSGVhZGVycygpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdmVycmlkZSByZXF1aXJlZCBvbmVzLlxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCByZXF1aXJlZEhlYWRlcnMpO1xuICAgIH07XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVVzZXJQcm92aWRlZFVybCh1cmwpIHtcbiAgICBpZiAodXJsID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gTk9URTogSW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzLCBgZ2xvYmFsVGhpcy5sb2NhdGlvbmAgd2lsbCBiZSBgdW5kZWZpbmVkYC5cbiAgICAgICAgY29uc3QgYmFzZSA9IGdsb2JhbFRoaXMubG9jYXRpb24/LmhyZWY7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKHVybCwgYmFzZSkuaHJlZjtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZ3VyYXRpb246IENvdWxkIG5vdCBwYXJzZSB1c2VyLXByb3ZpZGVkIGV4cG9ydCBVUkw6ICcke3VybH0nYCk7XG4gICAgfVxufVxuLyoqXG4gKiBAcGFyYW0gdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbiAgQ29uZmlndXJhdGlvbiBvcHRpb25zIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGluIGNvZGUuXG4gKiBAcGFyYW0gZmFsbGJhY2tDb25maWd1cmF0aW9uIEZhbGxiYWNrIHRvIHVzZSB3aGVuIHRoZSB7QGxpbmsgdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbn0gZG9lcyBub3Qgc3BlY2lmeSBhbiBvcHRpb24uXG4gKiBAcGFyYW0gZGVmYXVsdENvbmZpZ3VyYXRpb24gVGhlIGRlZmF1bHRzIGFzIGRlZmluZWQgYnkgdGhlIGV4cG9ydGVyIHNwZWNpZmljYXRpb25cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPdGxwSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHModXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbiwgZmFsbGJhY2tDb25maWd1cmF0aW9uLCBkZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLigwLCBzaGFyZWRfY29uZmlndXJhdGlvbl8xLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMpKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24sIGZhbGxiYWNrQ29uZmlndXJhdGlvbiwgZGVmYXVsdENvbmZpZ3VyYXRpb24pLFxuICAgICAgICBoZWFkZXJzOiBtZXJnZUhlYWRlcnMoKDAsIHV0aWxfMS52YWxpZGF0ZUFuZE5vcm1hbGl6ZUhlYWRlcnMpKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24uaGVhZGVycyksIGZhbGxiYWNrQ29uZmlndXJhdGlvbi5oZWFkZXJzLCBkZWZhdWx0Q29uZmlndXJhdGlvbi5oZWFkZXJzKSxcbiAgICAgICAgdXJsOiB2YWxpZGF0ZVVzZXJQcm92aWRlZFVybCh1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLnVybCkgPz9cbiAgICAgICAgICAgIGZhbGxiYWNrQ29uZmlndXJhdGlvbi51cmwgPz9cbiAgICAgICAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLnVybCxcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZU90bHBIdHRwQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cyA9IG1lcmdlT3RscEh0dHBDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzO1xuZnVuY3Rpb24gZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cyhyZXF1aXJlZEhlYWRlcnMsIHNpZ25hbFJlc291cmNlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLigwLCBzaGFyZWRfY29uZmlndXJhdGlvbl8xLmdldFNoYXJlZENvbmZpZ3VyYXRpb25EZWZhdWx0cykoKSxcbiAgICAgICAgaGVhZGVyczogKCkgPT4gcmVxdWlyZWRIZWFkZXJzLFxuICAgICAgICB1cmw6ICdodHRwOi8vbG9jYWxob3N0OjQzMTgvJyArIHNpZ25hbFJlc291cmNlUGF0aCxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRIdHRwQ29uZmlndXJhdGlvbkRlZmF1bHRzID0gZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtaHR0cC1jb25maWd1cmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE5vZGVIdHRwQ29uZmlndXJhdGlvbkRlZmF1bHRzID0gZXhwb3J0cy5tZXJnZU90bHBOb2RlSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBleHBvcnRzLmh0dHBBZ2VudEZhY3RvcnlGcm9tT3B0aW9ucyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBvdGxwX2h0dHBfY29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vb3RscC1odHRwLWNvbmZpZ3VyYXRpb25cIik7XG5mdW5jdGlvbiBodHRwQWdlbnRGYWN0b3J5RnJvbU9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBhc3luYyAocHJvdG9jb2wpID0+IHtcbiAgICAgICAgY29uc3QgaXNJbnNlY3VyZSA9IHByb3RvY29sID09PSAnaHR0cDonO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBpc0luc2VjdXJlID8gaW1wb3J0KCdodHRwJykgOiBpbXBvcnQoJ2h0dHBzJyk7XG4gICAgICAgIGNvbnN0IHsgQWdlbnQgfSA9IGF3YWl0IG1vZHVsZTtcbiAgICAgICAgaWYgKGlzSW5zZWN1cmUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgLS0gdGhlc2UgcHJvcHMgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGFnZW50IG9wdGlvbnNcbiAgICAgICAgICAgIGNvbnN0IHsgY2EsIGNlcnQsIGtleSwgLi4uaW5zZWN1cmVPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBZ2VudChpbnNlY3VyZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWdlbnQob3B0aW9ucyk7XG4gICAgfTtcbn1cbmV4cG9ydHMuaHR0cEFnZW50RmFjdG9yeUZyb21PcHRpb25zID0gaHR0cEFnZW50RmFjdG9yeUZyb21PcHRpb25zO1xuLyoqXG4gKiBAcGFyYW0gdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbiAgQ29uZmlndXJhdGlvbiBvcHRpb25zIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGluIGNvZGUuXG4gKiBAcGFyYW0gZmFsbGJhY2tDb25maWd1cmF0aW9uIEZhbGxiYWNrIHRvIHVzZSB3aGVuIHRoZSB7QGxpbmsgdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbn0gZG9lcyBub3Qgc3BlY2lmeSBhbiBvcHRpb24uXG4gKiBAcGFyYW0gZGVmYXVsdENvbmZpZ3VyYXRpb24gVGhlIGRlZmF1bHRzIGFzIGRlZmluZWQgYnkgdGhlIGV4cG9ydGVyIHNwZWNpZmljYXRpb25cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPdGxwTm9kZUh0dHBDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24sIGZhbGxiYWNrQ29uZmlndXJhdGlvbiwgZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi4oMCwgb3RscF9odHRwX2NvbmZpZ3VyYXRpb25fMS5tZXJnZU90bHBIdHRwQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cykodXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbiwgZmFsbGJhY2tDb25maWd1cmF0aW9uLCBkZWZhdWx0Q29uZmlndXJhdGlvbiksXG4gICAgICAgIGFnZW50RmFjdG9yeTogdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi5hZ2VudEZhY3RvcnkgPz9cbiAgICAgICAgICAgIGZhbGxiYWNrQ29uZmlndXJhdGlvbi5hZ2VudEZhY3RvcnkgPz9cbiAgICAgICAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLmFnZW50RmFjdG9yeSxcbiAgICAgICAgdXNlckFnZW50OiB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLnVzZXJBZ2VudCxcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZU90bHBOb2RlSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBtZXJnZU90bHBOb2RlSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHM7XG5mdW5jdGlvbiBnZXROb2RlSHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cyhyZXF1aXJlZEhlYWRlcnMsIHNpZ25hbFJlc291cmNlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLigwLCBvdGxwX2h0dHBfY29uZmlndXJhdGlvbl8xLmdldEh0dHBDb25maWd1cmF0aW9uRGVmYXVsdHMpKHJlcXVpcmVkSGVhZGVycywgc2lnbmFsUmVzb3VyY2VQYXRoKSxcbiAgICAgICAgYWdlbnRGYWN0b3J5OiBodHRwQWdlbnRGYWN0b3J5RnJvbU9wdGlvbnMoeyBrZWVwQWxpdmU6IHRydWUgfSksXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0Tm9kZUh0dHBDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBnZXROb2RlSHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtbm9kZS1odHRwLWNvbmZpZ3VyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlclRvTWlsbHMgPSBleHBvcnRzLmlzRXhwb3J0UmV0cnlhYmxlID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNFeHBvcnRSZXRyeWFibGUoc3RhdHVzQ29kZSkge1xuICAgIGNvbnN0IHJldHJ5Q29kZXMgPSBbNDI5LCA1MDIsIDUwMywgNTA0XTtcbiAgICByZXR1cm4gcmV0cnlDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKTtcbn1cbmV4cG9ydHMuaXNFeHBvcnRSZXRyeWFibGUgPSBpc0V4cG9ydFJldHJ5YWJsZTtcbmZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlclRvTWlsbHMocmV0cnlBZnRlcikge1xuICAgIGlmIChyZXRyeUFmdGVyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2Vjb25kcyA9IE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyLCAxMCk7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoc2Vjb25kcykpIHtcbiAgICAgICAgcmV0dXJuIHNlY29uZHMgPiAwID8gc2Vjb25kcyAqIDEwMDAgOiAtMTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JldHJ5LUFmdGVyI2RpcmVjdGl2ZXNcbiAgICBjb25zdCBkZWxheSA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpLmdldFRpbWUoKSAtIERhdGUubm93KCk7XG4gICAgaWYgKGRlbGF5ID49IDApIHtcbiAgICAgICAgcmV0dXJuIGRlbGF5O1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmV4cG9ydHMucGFyc2VSZXRyeUFmdGVyVG9NaWxscyA9IHBhcnNlUmV0cnlBZnRlclRvTWlsbHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1leHBvcnQtcmV0cnlhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlZFUlNJT04gPSAnMC4yMDcuMCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbXByZXNzQW5kU2VuZCA9IGV4cG9ydHMuc2VuZFdpdGhIdHRwID0gdm9pZCAwO1xuY29uc3QgemxpYiA9IHJlcXVpcmUoXCJ6bGliXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3QgaXNfZXhwb3J0X3JldHJ5YWJsZV8xID0gcmVxdWlyZShcIi4uL2lzLWV4cG9ydC1yZXRyeWFibGVcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL3R5cGVzXCIpO1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4uL3ZlcnNpb25cIik7XG5jb25zdCBERUZBVUxUX1VTRVJfQUdFTlQgPSBgT1RlbC1PVExQLUV4cG9ydGVyLUphdmFTY3JpcHQvJHt2ZXJzaW9uXzEuVkVSU0lPTn1gO1xuLyoqXG4gKiBTZW5kcyBkYXRhIHVzaW5nIGh0dHBcbiAqIEBwYXJhbSByZXF1ZXN0XG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gYWdlbnRcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcGFyYW0gb25Eb25lXG4gKiBAcGFyYW0gdGltZW91dE1pbGxpc1xuICovXG5mdW5jdGlvbiBzZW5kV2l0aEh0dHAocmVxdWVzdCwgcGFyYW1zLCBhZ2VudCwgZGF0YSwgb25Eb25lLCB0aW1lb3V0TWlsbGlzKSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYXJhbXMudXJsKTtcbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi5wYXJhbXMuaGVhZGVycygpIH07XG4gICAgaWYgKHBhcmFtcy51c2VyQWdlbnQpIHtcbiAgICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gYCR7cGFyYW1zLnVzZXJBZ2VudH0gJHtERUZBVUxUX1VTRVJfQUdFTlR9YDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IERFRkFVTFRfVVNFUl9BR0VOVDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaG9zdG5hbWU6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogcGFyc2VkVXJsLnBvcnQsXG4gICAgICAgIHBhdGg6IHBhcnNlZFVybC5wYXRobmFtZSxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGFnZW50LFxuICAgIH07XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdChvcHRpb25zLCAocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IFtdO1xuICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiByZXNwb25zZURhdGEucHVzaChjaHVuaykpO1xuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAmJiByZXMuc3RhdHVzQ29kZSA8IDI5OSkge1xuICAgICAgICAgICAgICAgIG9uRG9uZSh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBCdWZmZXIuY29uY2F0KHJlc3BvbnNlRGF0YSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXMuc3RhdHVzQ29kZSAmJiAoMCwgaXNfZXhwb3J0X3JldHJ5YWJsZV8xLmlzRXhwb3J0UmV0cnlhYmxlKShyZXMuc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgICAgICBvbkRvbmUoe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdyZXRyeWFibGUnLFxuICAgICAgICAgICAgICAgICAgICByZXRyeUluTWlsbGlzOiAoMCwgaXNfZXhwb3J0X3JldHJ5YWJsZV8xLnBhcnNlUmV0cnlBZnRlclRvTWlsbHMpKHJlcy5oZWFkZXJzWydyZXRyeS1hZnRlciddKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IHR5cGVzXzEuT1RMUEV4cG9ydGVyRXJyb3IocmVzLnN0YXR1c01lc3NhZ2UsIHJlcy5zdGF0dXNDb2RlLCBCdWZmZXIuY29uY2F0KHJlc3BvbnNlRGF0YSkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgb25Eb25lKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXEuc2V0VGltZW91dCh0aW1lb3V0TWlsbGlzLCAoKSA9PiB7XG4gICAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICAgIG9uRG9uZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICdmYWlsdXJlJyxcbiAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ1JlcXVlc3QgVGltZW91dCcpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIG9uRG9uZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICdmYWlsdXJlJyxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb21wcmVzc0FuZFNlbmQocmVxLCBwYXJhbXMuY29tcHJlc3Npb24sIGRhdGEsIChlcnJvcikgPT4ge1xuICAgICAgICBvbkRvbmUoe1xuICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLnNlbmRXaXRoSHR0cCA9IHNlbmRXaXRoSHR0cDtcbmZ1bmN0aW9uIGNvbXByZXNzQW5kU2VuZChyZXEsIGNvbXByZXNzaW9uLCBkYXRhLCBvbkVycm9yKSB7XG4gICAgbGV0IGRhdGFTdHJlYW0gPSByZWFkYWJsZUZyb21VaW50OEFycmF5KGRhdGEpO1xuICAgIGlmIChjb21wcmVzc2lvbiA9PT0gJ2d6aXAnKSB7XG4gICAgICAgIHJlcS5zZXRIZWFkZXIoJ0NvbnRlbnQtRW5jb2RpbmcnLCAnZ3ppcCcpO1xuICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVN0cmVhbVxuICAgICAgICAgICAgLm9uKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgICAgICAucGlwZSh6bGliLmNyZWF0ZUd6aXAoKSlcbiAgICAgICAgICAgIC5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICB9XG4gICAgZGF0YVN0cmVhbS5waXBlKHJlcSkub24oJ2Vycm9yJywgb25FcnJvcik7XG59XG5leHBvcnRzLmNvbXByZXNzQW5kU2VuZCA9IGNvbXByZXNzQW5kU2VuZDtcbmZ1bmN0aW9uIHJlYWRhYmxlRnJvbVVpbnQ4QXJyYXkoYnVmZikge1xuICAgIGNvbnN0IHJlYWRhYmxlID0gbmV3IHN0cmVhbV8xLlJlYWRhYmxlKCk7XG4gICAgcmVhZGFibGUucHVzaChidWZmKTtcbiAgICByZWFkYWJsZS5wdXNoKG51bGwpO1xuICAgIHJldHVybiByZWFkYWJsZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHAtdHJhbnNwb3J0LXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVIdHRwRXhwb3J0ZXJUcmFuc3BvcnQgPSB2b2lkIDA7XG5jb25zdCBodHRwX3RyYW5zcG9ydF91dGlsc18xID0gcmVxdWlyZShcIi4vaHR0cC10cmFuc3BvcnQtdXRpbHNcIik7XG5jbGFzcyBIdHRwRXhwb3J0ZXJUcmFuc3BvcnQge1xuICAgIF9wYXJhbWV0ZXJzO1xuICAgIF91dGlscyA9IG51bGw7XG4gICAgY29uc3RydWN0b3IoX3BhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IF9wYXJhbWV0ZXJzO1xuICAgIH1cbiAgICBhc3luYyBzZW5kKGRhdGEsIHRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgY29uc3QgeyBhZ2VudCwgcmVxdWVzdCB9ID0gYXdhaXQgdGhpcy5fbG9hZFV0aWxzKCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICgwLCBodHRwX3RyYW5zcG9ydF91dGlsc18xLnNlbmRXaXRoSHR0cCkocmVxdWVzdCwgdGhpcy5fcGFyYW1ldGVycywgYWdlbnQsIGRhdGEsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBsZWZ0IGVtcHR5LCBub3RoaW5nIHRvIGRvLlxuICAgIH1cbiAgICBhc3luYyBfbG9hZFV0aWxzKCkge1xuICAgICAgICBsZXQgdXRpbHMgPSB0aGlzLl91dGlscztcbiAgICAgICAgaWYgKHV0aWxzID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IG5ldyBVUkwodGhpcy5fcGFyYW1ldGVycy51cmwpLnByb3RvY29sO1xuICAgICAgICAgICAgY29uc3QgW2FnZW50LCByZXF1ZXN0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzLmFnZW50RmFjdG9yeShwcm90b2NvbCksXG4gICAgICAgICAgICAgICAgcmVxdWVzdEZ1bmN0aW9uRmFjdG9yeShwcm90b2NvbCksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHV0aWxzID0gdGhpcy5fdXRpbHMgPSB7IGFnZW50LCByZXF1ZXN0IH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWxzO1xuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RGdW5jdGlvbkZhY3RvcnkocHJvdG9jb2wpIHtcbiAgICBjb25zdCBtb2R1bGUgPSBwcm90b2NvbCA9PT0gJ2h0dHA6JyA/IGltcG9ydCgnaHR0cCcpIDogaW1wb3J0KCdodHRwcycpO1xuICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gYXdhaXQgbW9kdWxlO1xuICAgIHJldHVybiByZXF1ZXN0O1xufVxuZnVuY3Rpb24gY3JlYXRlSHR0cEV4cG9ydGVyVHJhbnNwb3J0KHBhcmFtZXRlcnMpIHtcbiAgICByZXR1cm4gbmV3IEh0dHBFeHBvcnRlclRyYW5zcG9ydChwYXJhbWV0ZXJzKTtcbn1cbmV4cG9ydHMuY3JlYXRlSHR0cEV4cG9ydGVyVHJhbnNwb3J0ID0gY3JlYXRlSHR0cEV4cG9ydGVyVHJhbnNwb3J0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cC1leHBvcnRlci10cmFuc3BvcnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0ID0gdm9pZCAwO1xuY29uc3QgTUFYX0FUVEVNUFRTID0gNTtcbmNvbnN0IElOSVRJQUxfQkFDS09GRiA9IDEwMDA7XG5jb25zdCBNQVhfQkFDS09GRiA9IDUwMDA7XG5jb25zdCBCQUNLT0ZGX01VTFRJUExJRVIgPSAxLjU7XG5jb25zdCBKSVRURVIgPSAwLjI7XG4vKipcbiAqIEdldCBhIHBzZXVkby1yYW5kb20gaml0dGVyIHRoYXQgZmFsbHMgaW4gdGhlIHJhbmdlIG9mIFstSklUVEVSLCArSklUVEVSXVxuICovXG5mdW5jdGlvbiBnZXRKaXR0ZXIoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAoMiAqIEpJVFRFUikgLSBKSVRURVI7XG59XG5jbGFzcyBSZXRyeWluZ1RyYW5zcG9ydCB7XG4gICAgX3RyYW5zcG9ydDtcbiAgICBjb25zdHJ1Y3RvcihfdHJhbnNwb3J0KSB7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IF90cmFuc3BvcnQ7XG4gICAgfVxuICAgIHJldHJ5KGRhdGEsIHRpbWVvdXRNaWxsaXMsIGluTWlsbGlzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQuc2VuZChkYXRhLCB0aW1lb3V0TWlsbGlzKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9LCBpbk1pbGxpcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBzZW5kKGRhdGEsIHRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1pbGxpcztcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGRhdGEsIHRpbWVvdXRNaWxsaXMpO1xuICAgICAgICBsZXQgYXR0ZW1wdHMgPSBNQVhfQVRURU1QVFM7XG4gICAgICAgIGxldCBuZXh0QmFja29mZiA9IElOSVRJQUxfQkFDS09GRjtcbiAgICAgICAgd2hpbGUgKHJlc3VsdC5zdGF0dXMgPT09ICdyZXRyeWFibGUnICYmIGF0dGVtcHRzID4gMCkge1xuICAgICAgICAgICAgYXR0ZW1wdHMtLTtcbiAgICAgICAgICAgIC8vIHVzZSBtYXhpbXVtIG9mIGNvbXB1dGVkIGJhY2tvZmYgYW5kIDAgdG8gYXZvaWQgbmVnYXRpdmUgdGltZW91dHNcbiAgICAgICAgICAgIGNvbnN0IGJhY2tvZmYgPSBNYXRoLm1heChNYXRoLm1pbihuZXh0QmFja29mZiwgTUFYX0JBQ0tPRkYpICsgZ2V0Sml0dGVyKCksIDApO1xuICAgICAgICAgICAgbmV4dEJhY2tvZmYgPSBuZXh0QmFja29mZiAqIEJBQ0tPRkZfTVVMVElQTElFUjtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5SW5NaWxsaXMgPSByZXN1bHQucmV0cnlJbk1pbGxpcyA/PyBiYWNrb2ZmO1xuICAgICAgICAgICAgLy8gcmV0dXJuIHdoZW4gZXhwZWN0ZWQgcmV0cnkgdGltZSBpcyBhZnRlciB0aGUgZXhwb3J0IGRlYWRsaW5lLlxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nVGltZW91dE1pbGxpcyA9IGRlYWRsaW5lIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGlmIChyZXRyeUluTWlsbGlzID4gcmVtYWluaW5nVGltZW91dE1pbGxpcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnJldHJ5KGRhdGEsIHJlbWFpbmluZ1RpbWVvdXRNaWxsaXMsIHJldHJ5SW5NaWxsaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnNodXRkb3duKCk7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGFuIEV4cG9ydGVyIFRyYW5zcG9ydCB0aGF0IHJldHJpZXMgb24gJ3JldHJ5YWJsZScgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFJldHJ5aW5nVHJhbnNwb3J0KG9wdGlvbnMudHJhbnNwb3J0KTtcbn1cbmV4cG9ydHMuY3JlYXRlUmV0cnlpbmdUcmFuc3BvcnQgPSBjcmVhdGVSZXRyeWluZ1RyYW5zcG9ydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5aW5nLXRyYW5zcG9ydC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVPdGxwSHR0cEV4cG9ydERlbGVnYXRlID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IG90bHBfZXhwb3J0X2RlbGVnYXRlXzEgPSByZXF1aXJlKFwiLi9vdGxwLWV4cG9ydC1kZWxlZ2F0ZVwiKTtcbmNvbnN0IGh0dHBfZXhwb3J0ZXJfdHJhbnNwb3J0XzEgPSByZXF1aXJlKFwiLi90cmFuc3BvcnQvaHR0cC1leHBvcnRlci10cmFuc3BvcnRcIik7XG5jb25zdCBib3VuZGVkX3F1ZXVlX2V4cG9ydF9wcm9taXNlX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2JvdW5kZWQtcXVldWUtZXhwb3J0LXByb21pc2UtaGFuZGxlclwiKTtcbmNvbnN0IHJldHJ5aW5nX3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vcmV0cnlpbmctdHJhbnNwb3J0XCIpO1xuZnVuY3Rpb24gY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZShvcHRpb25zLCBzZXJpYWxpemVyKSB7XG4gICAgcmV0dXJuICgwLCBvdGxwX2V4cG9ydF9kZWxlZ2F0ZV8xLmNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZSkoe1xuICAgICAgICB0cmFuc3BvcnQ6ICgwLCByZXRyeWluZ190cmFuc3BvcnRfMS5jcmVhdGVSZXRyeWluZ1RyYW5zcG9ydCkoe1xuICAgICAgICAgICAgdHJhbnNwb3J0OiAoMCwgaHR0cF9leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVIdHRwRXhwb3J0ZXJUcmFuc3BvcnQpKG9wdGlvbnMpLFxuICAgICAgICB9KSxcbiAgICAgICAgc2VyaWFsaXplcjogc2VyaWFsaXplcixcbiAgICAgICAgcHJvbWlzZUhhbmRsZXI6ICgwLCBib3VuZGVkX3F1ZXVlX2V4cG9ydF9wcm9taXNlX2hhbmRsZXJfMS5jcmVhdGVCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlcikob3B0aW9ucyksXG4gICAgfSwgeyB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXRNaWxsaXMgfSk7XG59XG5leHBvcnRzLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUgPSBjcmVhdGVPdGxwSHR0cEV4cG9ydERlbGVnYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3RscC1odHRwLWV4cG9ydC1kZWxlZ2F0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50ID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZnVuY3Rpb24gcGFyc2VBbmRWYWxpZGF0ZVRpbWVvdXRGcm9tRW52KHRpbWVvdXRFbnZWYXIpIHtcbiAgICBjb25zdCBlbnZUaW1lb3V0ID0gKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSh0aW1lb3V0RW52VmFyKTtcbiAgICBpZiAoZW52VGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZW52VGltZW91dCkgJiYgZW52VGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBlbnZUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIGFwaV8xLmRpYWcud2FybihgQ29uZmlndXJhdGlvbjogJHt0aW1lb3V0RW52VmFyfSBpcyBpbnZhbGlkLCBleHBlY3RlZCBudW1iZXIgZ3JlYXRlciB0aGFuIDAgKGFjdHVhbDogJHtlbnZUaW1lb3V0fSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFRpbWVvdXRGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICBjb25zdCBzcGVjaWZpY1RpbWVvdXQgPSBwYXJzZUFuZFZhbGlkYXRlVGltZW91dEZyb21FbnYoYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X1RJTUVPVVRgKTtcbiAgICBjb25zdCBub25TcGVjaWZpY1RpbWVvdXQgPSBwYXJzZUFuZFZhbGlkYXRlVGltZW91dEZyb21FbnYoJ09URUxfRVhQT1JURVJfT1RMUF9USU1FT1VUJyk7XG4gICAgcmV0dXJuIHNwZWNpZmljVGltZW91dCA/PyBub25TcGVjaWZpY1RpbWVvdXQ7XG59XG5mdW5jdGlvbiBwYXJzZUFuZFZhbGlkYXRlQ29tcHJlc3Npb25Gcm9tRW52KGNvbXByZXNzaW9uRW52VmFyKSB7XG4gICAgY29uc3QgY29tcHJlc3Npb24gPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKGNvbXByZXNzaW9uRW52VmFyKT8udHJpbSgpO1xuICAgIGlmIChjb21wcmVzc2lvbiA9PSBudWxsIHx8IGNvbXByZXNzaW9uID09PSAnbm9uZScgfHwgY29tcHJlc3Npb24gPT09ICdnemlwJykge1xuICAgICAgICByZXR1cm4gY29tcHJlc3Npb247XG4gICAgfVxuICAgIGFwaV8xLmRpYWcud2FybihgQ29uZmlndXJhdGlvbjogJHtjb21wcmVzc2lvbkVudlZhcn0gaXMgaW52YWxpZCwgZXhwZWN0ZWQgJ25vbmUnIG9yICdnemlwJyAoYWN0dWFsOiAnJHtjb21wcmVzc2lvbn0nKWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRDb21wcmVzc2lvbkZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHNwZWNpZmljQ29tcHJlc3Npb24gPSBwYXJzZUFuZFZhbGlkYXRlQ29tcHJlc3Npb25Gcm9tRW52KGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9DT01QUkVTU0lPTmApO1xuICAgIGNvbnN0IG5vblNwZWNpZmljQ29tcHJlc3Npb24gPSBwYXJzZUFuZFZhbGlkYXRlQ29tcHJlc3Npb25Gcm9tRW52KCdPVEVMX0VYUE9SVEVSX09UTFBfQ09NUFJFU1NJT04nKTtcbiAgICByZXR1cm4gc3BlY2lmaWNDb21wcmVzc2lvbiA/PyBub25TcGVjaWZpY0NvbXByZXNzaW9uO1xufVxuZnVuY3Rpb24gZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudChzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGltZW91dE1pbGxpczogZ2V0VGltZW91dEZyb21FbnYoc2lnbmFsSWRlbnRpZmllciksXG4gICAgICAgIGNvbXByZXNzaW9uOiBnZXRDb21wcmVzc2lvbkZyb21FbnYoc2lnbmFsSWRlbnRpZmllciksXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudCA9IGdldFNoYXJlZENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtZW52LWNvbmZpZ3VyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Tm9kZUh0dHBDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50ID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzaGFyZWRfZW52X2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1lbnYtY29uZmlndXJhdGlvblwiKTtcbmNvbnN0IHNoYXJlZF9jb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQtY29uZmlndXJhdGlvblwiKTtcbmNvbnN0IG90bHBfbm9kZV9odHRwX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL290bHAtbm9kZS1odHRwLWNvbmZpZ3VyYXRpb25cIik7XG5mdW5jdGlvbiBnZXRTdGF0aWNIZWFkZXJzRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzID0gKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KShgT1RFTF9FWFBPUlRFUl9PVExQXyR7c2lnbmFsSWRlbnRpZmllcn1fSEVBREVSU2ApO1xuICAgIGNvbnN0IG5vblNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTJyk7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNIZWFkZXJzID0gKDAsIGNvcmVfMS5wYXJzZUtleVBhaXJzSW50b1JlY29yZCkoc2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzKTtcbiAgICBjb25zdCBub25TaWduYWxTcGVjaWZpY0hlYWRlcnMgPSAoMCwgY29yZV8xLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkKShub25TaWduYWxTcGVjaWZpY1Jhd0hlYWRlcnMpO1xuICAgIGlmIChPYmplY3Qua2V5cyhzaWduYWxTcGVjaWZpY0hlYWRlcnMpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBPYmplY3Qua2V5cyhub25TaWduYWxTcGVjaWZpY0hlYWRlcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBoZWFkZXJzIGFyZSBjb21iaW5lZCBpbnN0ZWFkIG9mIG92ZXJ3cml0dGVuLCB3aXRoIHRoZSBzcGVjaWZpYyBoZWFkZXJzIHRha2luZyBwcmVjZWRlbmNlIG92ZXJcbiAgICAvLyB0aGUgbm9uLXNwZWNpZmljIG9uZXMuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sICgwLCBjb3JlXzEucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQpKG5vblNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyksICgwLCBjb3JlXzEucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQpKHNpZ25hbFNwZWNpZmljUmF3SGVhZGVycykpO1xufVxuZnVuY3Rpb24gYXBwZW5kUm9vdFBhdGhUb1VybElmTmVlZGVkKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZW5kICcvJyBpZiB0aGVyZSdzIG5vIHJvb3QgcGF0aC5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybihgQ29uZmlndXJhdGlvbjogQ291bGQgbm90IHBhcnNlIGVudmlyb25tZW50LXByb3ZpZGVkIGV4cG9ydCBVUkw6ICcke3VybH0nLCBmYWxsaW5nIGJhY2sgdG8gdW5kZWZpbmVkYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwZW5kUmVzb3VyY2VQYXRoVG9VcmwodXJsLCBwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8ganVzdCB0cnkgdG8gcGFyc2UsIGlmIGl0IGZhaWxzIHdlIGNhdGNoIGFuZCB3YXJuLlxuICAgICAgICBuZXcgVVJMKHVybCk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBDb25maWd1cmF0aW9uOiBDb3VsZCBub3QgcGFyc2UgZW52aXJvbm1lbnQtcHJvdmlkZWQgZXhwb3J0IFVSTDogJyR7dXJsfScsIGZhbGxpbmcgYmFjayB0byB1bmRlZmluZWRgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF1cmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICB1cmwgPSB1cmwgKyAnLyc7XG4gICAgfVxuICAgIHVybCArPSBwYXRoO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGp1c3QgdHJ5IHRvIHBhcnNlLCBpZiBpdCBmYWlscyB3ZSBjYXRjaCBhbmQgd2Fybi5cbiAgICAgICAgbmV3IFVSTCh1cmwpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybihgQ29uZmlndXJhdGlvbjogUHJvdmlkZWQgVVJMIGFwcGVuZGVkIHdpdGggJyR7cGF0aH0nIGlzIG5vdCBhIHZhbGlkIFVSTCwgdXNpbmcgJ3VuZGVmaW5lZCcgaW5zdGVhZCBvZiAnJHt1cmx9J2ApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuZnVuY3Rpb24gZ2V0Tm9uU3BlY2lmaWNVcmxGcm9tRW52KHNpZ25hbFJlc291cmNlUGF0aCkge1xuICAgIGNvbnN0IGVudlVybCA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCcpO1xuICAgIGlmIChlbnZVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYXBwZW5kUmVzb3VyY2VQYXRoVG9VcmwoZW52VXJsLCBzaWduYWxSZXNvdXJjZVBhdGgpO1xufVxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNVcmxGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICBjb25zdCBlbnZVcmwgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9FTkRQT0lOVGApO1xuICAgIGlmIChlbnZVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYXBwZW5kUm9vdFBhdGhUb1VybElmTmVlZGVkKGVudlVybCk7XG59XG5mdW5jdGlvbiByZWFkRmlsZUZyb21FbnYoc2lnbmFsU3BlY2lmaWNFbnZWYXIsIG5vblNpZ25hbFNwZWNpZmljRW52VmFyLCB3YXJuaW5nTWVzc2FnZSkge1xuICAgIGNvbnN0IHNpZ25hbFNwZWNpZmljUGF0aCA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoc2lnbmFsU3BlY2lmaWNFbnZWYXIpO1xuICAgIGNvbnN0IG5vblNpZ25hbFNwZWNpZmljUGF0aCA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikobm9uU2lnbmFsU3BlY2lmaWNFbnZWYXIpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gc2lnbmFsU3BlY2lmaWNQYXRoID8/IG5vblNpZ25hbFNwZWNpZmljUGF0aDtcbiAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4od2FybmluZ01lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRDbGllbnRDZXJ0aWZpY2F0ZUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIHJldHVybiByZWFkRmlsZUZyb21FbnYoYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0NMSUVOVF9DRVJUSUZJQ0FURWAsICdPVEVMX0VYUE9SVEVSX09UTFBfQ0xJRU5UX0NFUlRJRklDQVRFJywgJ0ZhaWxlZCB0byByZWFkIGNsaWVudCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlJyk7XG59XG5mdW5jdGlvbiBnZXRDbGllbnRLZXlGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gcmVhZEZpbGVGcm9tRW52KGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9DTElFTlRfS0VZYCwgJ09URUxfRVhQT1JURVJfT1RMUF9DTElFTlRfS0VZJywgJ0ZhaWxlZCB0byByZWFkIGNsaWVudCBjZXJ0aWZpY2F0ZSBwcml2YXRlIGtleSBmaWxlJyk7XG59XG5mdW5jdGlvbiBnZXRSb290Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gcmVhZEZpbGVGcm9tRW52KGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9DRVJUSUZJQ0FURWAsICdPVEVMX0VYUE9SVEVSX09UTFBfQ0VSVElGSUNBVEUnLCAnRmFpbGVkIHRvIHJlYWQgcm9vdCBjZXJ0aWZpY2F0ZSBmaWxlJyk7XG59XG4vKipcbiAqIFJlYWRzIGFuZCByZXR1cm5zIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAqXG4gKiBAcGFyYW0gc2lnbmFsSWRlbnRpZmllciBhbGwgY2FwcyBwYXJ0IGluIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGlkZW50aWZpZXMgdGhlIHNpZ25hbCAoZS5nLjogTUVUUklDUywgVFJBQ0VTLCBMT0dTKVxuICogQHBhcmFtIHNpZ25hbFJlc291cmNlUGF0aCBzaWduYWwgcmVzb3VyY2UgcGF0aCB0byBhcHBlbmQgaWYgbmVjZXNzYXJ5IChlLmcuOiB2MS9tZXRyaWNzLCB2MS90cmFjZXMsIHYxL2xvZ3MpXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVIdHRwQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudChzaWduYWxJZGVudGlmaWVyLCBzaWduYWxSZXNvdXJjZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi4oMCwgc2hhcmVkX2Vudl9jb25maWd1cmF0aW9uXzEuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudCkoc2lnbmFsSWRlbnRpZmllciksXG4gICAgICAgIHVybDogZ2V0U3BlY2lmaWNVcmxGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpID8/XG4gICAgICAgICAgICBnZXROb25TcGVjaWZpY1VybEZyb21FbnYoc2lnbmFsUmVzb3VyY2VQYXRoKSxcbiAgICAgICAgaGVhZGVyczogKDAsIHNoYXJlZF9jb25maWd1cmF0aW9uXzEud3JhcFN0YXRpY0hlYWRlcnNJbkZ1bmN0aW9uKShnZXRTdGF0aWNIZWFkZXJzRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSksXG4gICAgICAgIGFnZW50RmFjdG9yeTogKDAsIG90bHBfbm9kZV9odHRwX2NvbmZpZ3VyYXRpb25fMS5odHRwQWdlbnRGYWN0b3J5RnJvbU9wdGlvbnMpKHtcbiAgICAgICAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhOiBnZXRSb290Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpLFxuICAgICAgICAgICAgY2VydDogZ2V0Q2xpZW50Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpLFxuICAgICAgICAgICAga2V5OiBnZXRDbGllbnRLZXlGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpLFxuICAgICAgICB9KSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXROb2RlSHR0cENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnQgPSBnZXROb2RlSHR0cENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLW5vZGUtaHR0cC1lbnYtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzaGFyZWRfY29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWNvbmZpZ3VyYXRpb25cIik7XG5jb25zdCBvdGxwX25vZGVfaHR0cF9jb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9vdGxwLW5vZGUtaHR0cC1jb25maWd1cmF0aW9uXCIpO1xuY29uc3QgaW5kZXhfbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiLi4vaW5kZXgtbm9kZS1odHRwXCIpO1xuY29uc3Qgb3RscF9ub2RlX2h0dHBfZW52X2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL290bHAtbm9kZS1odHRwLWVudi1jb25maWd1cmF0aW9uXCIpO1xuZnVuY3Rpb24gY29udmVydExlZ2FjeUFnZW50T3B0aW9ucyhjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5odHRwQWdlbnRPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBjb25maWcuaHR0cEFnZW50T3B0aW9ucztcbiAgICB9XG4gICAgbGV0IGxlZ2FjeSA9IGNvbmZpZy5odHRwQWdlbnRPcHRpb25zO1xuICAgIGlmIChjb25maWcua2VlcEFsaXZlICE9IG51bGwpIHtcbiAgICAgICAgbGVnYWN5ID0geyBrZWVwQWxpdmU6IGNvbmZpZy5rZWVwQWxpdmUsIC4uLmxlZ2FjeSB9O1xuICAgIH1cbiAgICBpZiAobGVnYWN5ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICgwLCBpbmRleF9ub2RlX2h0dHBfMS5odHRwQWdlbnRGYWN0b3J5RnJvbU9wdGlvbnMpKGxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8qKlxuICogQGRlcHJlY2F0ZWQgdGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gMi4wXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gc2lnbmFsSWRlbnRpZmllclxuICogQHBhcmFtIHNpZ25hbFJlc291cmNlUGF0aFxuICogQHBhcmFtIHJlcXVpcmVkSGVhZGVyc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMoY29uZmlnLCBzaWduYWxJZGVudGlmaWVyLCBzaWduYWxSZXNvdXJjZVBhdGgsIHJlcXVpcmVkSGVhZGVycykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKGNvbmZpZy5tZXRhZGF0YSkge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ01ldGFkYXRhIGNhbm5vdCBiZSBzZXQgd2hlbiB1c2luZyBodHRwJyk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgb3RscF9ub2RlX2h0dHBfY29uZmlndXJhdGlvbl8xLm1lcmdlT3RscE5vZGVIdHRwQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cykoe1xuICAgICAgICB1cmw6IGNvbmZpZy51cmwsXG4gICAgICAgIGhlYWRlcnM6ICgwLCBzaGFyZWRfY29uZmlndXJhdGlvbl8xLndyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbikoY29uZmlnLmhlYWRlcnMpLFxuICAgICAgICBjb25jdXJyZW5jeUxpbWl0OiBjb25maWcuY29uY3VycmVuY3lMaW1pdCxcbiAgICAgICAgdGltZW91dE1pbGxpczogY29uZmlnLnRpbWVvdXRNaWxsaXMsXG4gICAgICAgIGNvbXByZXNzaW9uOiBjb25maWcuY29tcHJlc3Npb24sXG4gICAgICAgIGFnZW50RmFjdG9yeTogY29udmVydExlZ2FjeUFnZW50T3B0aW9ucyhjb25maWcpLFxuICAgICAgICB1c2VyQWdlbnQ6IGNvbmZpZy51c2VyQWdlbnQsXG4gICAgfSwgKDAsIG90bHBfbm9kZV9odHRwX2Vudl9jb25maWd1cmF0aW9uXzEuZ2V0Tm9kZUh0dHBDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50KShzaWduYWxJZGVudGlmaWVyLCBzaWduYWxSZXNvdXJjZVBhdGgpLCAoMCwgb3RscF9ub2RlX2h0dHBfY29uZmlndXJhdGlvbl8xLmdldE5vZGVIdHRwQ29uZmlndXJhdGlvbkRlZmF1bHRzKShyZXF1aXJlZEhlYWRlcnMsIHNpZ25hbFJlc291cmNlUGF0aCkpO1xufVxuZXhwb3J0cy5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMgPSBjb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb252ZXJ0LWxlZ2FjeS1ub2RlLWh0dHAtb3B0aW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udmVydExlZ2FjeUh0dHBPcHRpb25zID0gZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50ID0gZXhwb3J0cy5jcmVhdGVPdGxwSHR0cEV4cG9ydERlbGVnYXRlID0gZXhwb3J0cy5odHRwQWdlbnRGYWN0b3J5RnJvbU9wdGlvbnMgPSB2b2lkIDA7XG52YXIgb3RscF9ub2RlX2h0dHBfY29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vY29uZmlndXJhdGlvbi9vdGxwLW5vZGUtaHR0cC1jb25maWd1cmF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHR0cEFnZW50RmFjdG9yeUZyb21PcHRpb25zXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvdGxwX25vZGVfaHR0cF9jb25maWd1cmF0aW9uXzEuaHR0cEFnZW50RmFjdG9yeUZyb21PcHRpb25zOyB9IH0pO1xudmFyIG90bHBfaHR0cF9leHBvcnRfZGVsZWdhdGVfMSA9IHJlcXVpcmUoXCIuL290bHAtaHR0cC1leHBvcnQtZGVsZWdhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPdGxwSHR0cEV4cG9ydERlbGVnYXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvdGxwX2h0dHBfZXhwb3J0X2RlbGVnYXRlXzEuY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZTsgfSB9KTtcbnZhciBzaGFyZWRfZW52X2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb24vc2hhcmVkLWVudi1jb25maWd1cmF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2hhcmVkX2Vudl9jb25maWd1cmF0aW9uXzEuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudDsgfSB9KTtcbnZhciBjb252ZXJ0X2xlZ2FjeV9ub2RlX2h0dHBfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vY29uZmlndXJhdGlvbi9jb252ZXJ0LWxlZ2FjeS1ub2RlLWh0dHAtb3B0aW9uc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbnZlcnRMZWdhY3lIdHRwT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29udmVydF9sZWdhY3lfbm9kZV9odHRwX29wdGlvbnNfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC1ub2RlLWh0dHAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IG90bHBfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZVwiKTtcbmNvbnN0IG90bHBfdHJhbnNmb3JtZXJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyXCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbi8qKlxuICogQ29sbGVjdG9yIExvZ3MgRXhwb3J0ZXIgZm9yIE5vZGVcbiAqL1xuY2xhc3MgT1RMUExvZ0V4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZywgJ0xPR1MnLCAndjEvbG9ncycsIHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0pLCBvdGxwX3RyYW5zZm9ybWVyXzEuSnNvbkxvZ3NTZXJpYWxpemVyKSk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSBPVExQTG9nRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTG9nRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQTG9nRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBMb2dFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBMb2dFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUExvZ0V4cG9ydGVyXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUExvZ0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTG9nRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlID0gdm9pZCAwO1xudmFyIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZSkge1xuICAgIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlW0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlW1wiREVMVEFcIl0gPSAwXSA9IFwiREVMVEFcIjtcbiAgICBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVtBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVtcIkNVTVVMQVRJVkVcIl0gPSAxXSA9IFwiQ1VNVUxBVElWRVwiO1xuICAgIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlW0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlW1wiTE9XTUVNT1JZXCJdID0gMl0gPSBcIkxPV01FTU9SWVwiO1xufSkoQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2UgPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlIHx8IChleHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlckJhc2UgPSBleHBvcnRzLkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3IgPSBleHBvcnRzLkRlbHRhVGVtcG9yYWxpdHlTZWxlY3RvciA9IGV4cG9ydHMuQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IHNka19tZXRyaWNzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3NcIik7XG5jb25zdCBPVExQTWV0cmljRXhwb3J0ZXJPcHRpb25zXzEgPSByZXF1aXJlKFwiLi9PVExQTWV0cmljRXhwb3J0ZXJPcHRpb25zXCIpO1xuY29uc3Qgb3RscF9leHBvcnRlcl9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3IgPSAoKSA9PiBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuQ1VNVUxBVElWRTtcbmV4cG9ydHMuQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3IgPSBDdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3RvcjtcbmNvbnN0IERlbHRhVGVtcG9yYWxpdHlTZWxlY3RvciA9IChpbnN0cnVtZW50VHlwZSkgPT4ge1xuICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLkNPVU5URVI6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0NPVU5URVI6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5HQVVHRTpcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLkhJU1RPR1JBTTpcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfR0FVR0U6XG4gICAgICAgICAgICByZXR1cm4gc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkRFTFRBO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuVVBfRE9XTl9DT1VOVEVSOlxuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVI6XG4gICAgICAgICAgICByZXR1cm4gc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkNVTVVMQVRJVkU7XG4gICAgfVxufTtcbmV4cG9ydHMuRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yID0gRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yO1xuY29uc3QgTG93TWVtb3J5VGVtcG9yYWxpdHlTZWxlY3RvciA9IChpbnN0cnVtZW50VHlwZSkgPT4ge1xuICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLkNPVU5URVI6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5ISVNUT0dSQU06XG4gICAgICAgICAgICByZXR1cm4gc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkRFTFRBO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0U6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5VUF9ET1dOX0NPVU5URVI6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUjpcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUjpcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfR0FVR0U6XG4gICAgICAgICAgICByZXR1cm4gc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkNVTVVMQVRJVkU7XG4gICAgfVxufTtcbmV4cG9ydHMuTG93TWVtb3J5VGVtcG9yYWxpdHlTZWxlY3RvciA9IExvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3I7XG5mdW5jdGlvbiBjaG9vc2VUZW1wb3JhbGl0eVNlbGVjdG9yRnJvbUVudmlyb25tZW50KCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWRUZW1wb3JhbGl0eSA9ICgoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX0VYUE9SVEVSX09UTFBfTUVUUklDU19URU1QT1JBTElUWV9QUkVGRVJFTkNFJykgPz9cbiAgICAgICAgJ2N1bXVsYXRpdmUnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb25maWd1cmVkVGVtcG9yYWxpdHkgPT09ICdjdW11bGF0aXZlJykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5DdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZ3VyZWRUZW1wb3JhbGl0eSA9PT0gJ2RlbHRhJykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5EZWx0YVRlbXBvcmFsaXR5U2VsZWN0b3I7XG4gICAgfVxuICAgIGlmIChjb25maWd1cmVkVGVtcG9yYWxpdHkgPT09ICdsb3dtZW1vcnknKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3I7XG4gICAgfVxuICAgIGFwaV8xLmRpYWcud2FybihgT1RFTF9FWFBPUlRFUl9PVExQX01FVFJJQ1NfVEVNUE9SQUxJVFlfUFJFRkVSRU5DRSBpcyBzZXQgdG8gJyR7Y29uZmlndXJlZFRlbXBvcmFsaXR5fScsIGJ1dCBvbmx5ICdjdW11bGF0aXZlJyBhbmQgJ2RlbHRhJyBhcmUgYWxsb3dlZC4gVXNpbmcgZGVmYXVsdCAoJ2N1bXVsYXRpdmUnKSBpbnN0ZWFkLmApO1xuICAgIHJldHVybiBleHBvcnRzLkN1bXVsYXRpdmVUZW1wb3JhbGl0eVNlbGVjdG9yO1xufVxuZnVuY3Rpb24gY2hvb3NlVGVtcG9yYWxpdHlTZWxlY3Rvcih0ZW1wb3JhbGl0eVByZWZlcmVuY2UpIHtcbiAgICAvLyBEaXJlY3RseSBwYXNzZWQgcHJlZmVyZW5jZSBoYXMgcHJpb3JpdHkuXG4gICAgaWYgKHRlbXBvcmFsaXR5UHJlZmVyZW5jZSAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0ZW1wb3JhbGl0eVByZWZlcmVuY2UgPT09IE9UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnNfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZS5ERUxUQSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRlbXBvcmFsaXR5UHJlZmVyZW5jZSA9PT0gT1RMUE1ldHJpY0V4cG9ydGVyT3B0aW9uc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlLkxPV01FTU9SWSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuTG93TWVtb3J5VGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwb3J0cy5DdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIGNob29zZVRlbXBvcmFsaXR5U2VsZWN0b3JGcm9tRW52aXJvbm1lbnQoKTtcbn1cbmNvbnN0IERFRkFVTFRfQUdHUkVHQVRJT04gPSBPYmplY3QuZnJlZXplKHtcbiAgICB0eXBlOiBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVHlwZS5ERUZBVUxULFxufSk7XG5mdW5jdGlvbiBjaG9vc2VBZ2dyZWdhdGlvblNlbGVjdG9yKGNvbmZpZykge1xuICAgIHJldHVybiBjb25maWc/LmFnZ3JlZ2F0aW9uUHJlZmVyZW5jZSA/PyAoKCkgPT4gREVGQVVMVF9BR0dSRUdBVElPTik7XG59XG5jbGFzcyBPVExQTWV0cmljRXhwb3J0ZXJCYXNlIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICBfYWdncmVnYXRpb25TZWxlY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSwgY29uZmlnKSB7XG4gICAgICAgIHN1cGVyKGRlbGVnYXRlKTtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25TZWxlY3RvciA9IGNob29zZUFnZ3JlZ2F0aW9uU2VsZWN0b3IoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25UZW1wb3JhbGl0eVNlbGVjdG9yID0gY2hvb3NlVGVtcG9yYWxpdHlTZWxlY3Rvcihjb25maWc/LnRlbXBvcmFsaXR5UHJlZmVyZW5jZSk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uKGluc3RydW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdGlvblNlbGVjdG9yKGluc3RydW1lbnRUeXBlKTtcbiAgICB9XG4gICAgc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eShpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRpb25UZW1wb3JhbGl0eVNlbGVjdG9yKGluc3RydW1lbnRUeXBlKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlckJhc2UgPSBPVExQTWV0cmljRXhwb3J0ZXJCYXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T1RMUE1ldHJpY0V4cG9ydGVyQmFzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgT1RMUE1ldHJpY0V4cG9ydGVyQmFzZV8xID0gcmVxdWlyZShcIi4uLy4uL09UTFBNZXRyaWNFeHBvcnRlckJhc2VcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbmNvbnN0IG5vZGVfaHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9ub2RlLWh0dHBcIik7XG4vKipcbiAqIE9UTFAgTWV0cmljIEV4cG9ydGVyIGZvciBOb2RlLmpzXG4gKi9cbmNsYXNzIE9UTFBNZXRyaWNFeHBvcnRlciBleHRlbmRzIE9UTFBNZXRyaWNFeHBvcnRlckJhc2VfMS5PVExQTWV0cmljRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZyA/PyB7fSwgJ01FVFJJQ1MnLCAndjEvbWV0cmljcycsIHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0pLCBvdGxwX3RyYW5zZm9ybWVyXzEuSnNvbk1ldHJpY3NTZXJpYWxpemVyKSwgY29uZmlnKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IE9UTFBNZXRyaWNFeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBNZXRyaWNFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyID0gdm9pZCAwO1xudmFyIE9UTFBNZXRyaWNFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vT1RMUE1ldHJpY0V4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUE1ldHJpY0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBPVExQTWV0cmljRXhwb3J0ZXJfMS5PVExQTWV0cmljRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyID0gdm9pZCAwO1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5PVExQTWV0cmljRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyQmFzZSA9IGV4cG9ydHMuTG93TWVtb3J5VGVtcG9yYWxpdHlTZWxlY3RvciA9IGV4cG9ydHMuRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yID0gZXhwb3J0cy5DdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3RvciA9IGV4cG9ydHMuQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2UgPSBleHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xudmFyIE9UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL09UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyT3B0aW9uc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlOyB9IH0pO1xudmFyIE9UTFBNZXRyaWNFeHBvcnRlckJhc2VfMSA9IHJlcXVpcmUoXCIuL09UTFBNZXRyaWNFeHBvcnRlckJhc2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyQmFzZV8xLkN1bXVsYXRpdmVUZW1wb3JhbGl0eVNlbGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBPVExQTWV0cmljRXhwb3J0ZXJCYXNlXzEuRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG93TWVtb3J5VGVtcG9yYWxpdHlTZWxlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyQmFzZV8xLkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTWV0cmljRXhwb3J0ZXJCYXNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBPVExQTWV0cmljRXhwb3J0ZXJCYXNlXzEuT1RMUE1ldHJpY0V4cG9ydGVyQmFzZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQVHJhY2VFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IG90bHBfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZVwiKTtcbmNvbnN0IG90bHBfdHJhbnNmb3JtZXJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyXCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbi8qKlxuICogQ29sbGVjdG9yIFRyYWNlIEV4cG9ydGVyIGZvciBOb2RlXG4gKi9cbmNsYXNzIE9UTFBUcmFjZUV4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZywgJ1RSQUNFUycsICd2MS90cmFjZXMnLCB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9KSwgb3RscF90cmFuc2Zvcm1lcl8xLkpzb25UcmFjZVNlcmlhbGl6ZXIpKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBUcmFjZUV4cG9ydGVyID0gT1RMUFRyYWNlRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQVHJhY2VFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUFRyYWNlRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBUcmFjZUV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBUcmFjZUV4cG9ydGVyXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBUcmFjZUV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUEFDS0FHRV9OQU1FID0gZXhwb3J0cy5QQUNLQUdFX1ZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuUEFDS0FHRV9WRVJTSU9OID0gJzAuMzYuMic7XG5leHBvcnRzLlBBQ0tBR0VfTkFNRSA9ICdAb3BlbnRlbGVtZXRyeS9ob3N0LW1ldHJpY3MnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFzZU1ldHJpY3MgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG4vKiogQGtuaXBpZ25vcmUgKi9cbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBERUZBVUxUX05BTUUgPSB2ZXJzaW9uXzEuUEFDS0FHRV9OQU1FO1xuLyoqXG4gKiBCYXNlIENsYXNzIGZvciBtZXRyaWNzXG4gKi9cbmNsYXNzIEJhc2VNZXRyaWNzIHtcbiAgICBfbG9nZ2VyID0gYXBpXzEuZGlhZztcbiAgICBfbWV0ZXI7XG4gICAgX25hbWU7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2UgYD8/YCBvcGVyYXRvciB0byBhbGxvdyBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCB3aGVuIHRoZVxuICAgICAgICAvLyBzcGVjaWZpZWQgbmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICAgIHRoaXMuX25hbWUgPSBjb25maWc/Lm5hbWUgfHwgREVGQVVMVF9OQU1FO1xuICAgICAgICBjb25zdCBtZXRlclByb3ZpZGVyID0gY29uZmlnPy5tZXRlclByb3ZpZGVyID8/IGFwaV8xLm1ldHJpY3MuZ2V0TWV0ZXJQcm92aWRlcigpO1xuICAgICAgICB0aGlzLl9tZXRlciA9IG1ldGVyUHJvdmlkZXIuZ2V0TWV0ZXIodGhpcy5fbmFtZSwgdmVyc2lvbl8xLlBBQ0tBR0VfVkVSU0lPTik7XG4gICAgfVxufVxuZXhwb3J0cy5CYXNlTWV0cmljcyA9IEJhc2VNZXRyaWNzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmFzZU1ldHJpY3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1FTU9SWV9MQUJFTFMgPSBleHBvcnRzLk5FVFdPUktfTEFCRUxTID0gZXhwb3J0cy5DUFVfTEFCRUxTID0gZXhwb3J0cy5BVFRSSUJVVEVfTkFNRVMgPSBleHBvcnRzLk1FVFJJQ19OQU1FUyA9IHZvaWQgMDtcbnZhciBNRVRSSUNfTkFNRVM7XG4oZnVuY3Rpb24gKE1FVFJJQ19OQU1FUykge1xuICAgIE1FVFJJQ19OQU1FU1tcIkNQVV9USU1FXCJdID0gXCJzeXN0ZW0uY3B1LnRpbWVcIjtcbiAgICBNRVRSSUNfTkFNRVNbXCJDUFVfVVRJTElaQVRJT05cIl0gPSBcInN5c3RlbS5jcHUudXRpbGl6YXRpb25cIjtcbiAgICBNRVRSSUNfTkFNRVNbXCJNRU1PUllfVVNBR0VcIl0gPSBcInN5c3RlbS5tZW1vcnkudXNhZ2VcIjtcbiAgICBNRVRSSUNfTkFNRVNbXCJNRU1PUllfVVRJTElaQVRJT05cIl0gPSBcInN5c3RlbS5tZW1vcnkudXRpbGl6YXRpb25cIjtcbiAgICBNRVRSSUNfTkFNRVNbXCJORVRXT1JLX0RST1BQRURcIl0gPSBcInN5c3RlbS5uZXR3b3JrLmRyb3BwZWRcIjtcbiAgICBNRVRSSUNfTkFNRVNbXCJORVRXT1JLX0VSUk9SU1wiXSA9IFwic3lzdGVtLm5ldHdvcmsuZXJyb3JzXCI7XG4gICAgTUVUUklDX05BTUVTW1wiTkVUV09SS19JT1wiXSA9IFwic3lzdGVtLm5ldHdvcmsuaW9cIjtcbiAgICBNRVRSSUNfTkFNRVNbXCJQUk9DRVNTX0NQVV9USU1FXCJdID0gXCJwcm9jZXNzLmNwdS50aW1lXCI7XG4gICAgTUVUUklDX05BTUVTW1wiUFJPQ0VTU19DUFVfVVRJTElaQVRJT05cIl0gPSBcInByb2Nlc3MuY3B1LnV0aWxpemF0aW9uXCI7XG4gICAgTUVUUklDX05BTUVTW1wiUFJPQ0VTU19NRU1PUllfVVNBR0VcIl0gPSBcInByb2Nlc3MubWVtb3J5LnVzYWdlXCI7XG59KShNRVRSSUNfTkFNRVMgPSBleHBvcnRzLk1FVFJJQ19OQU1FUyB8fCAoZXhwb3J0cy5NRVRSSUNfTkFNRVMgPSB7fSkpO1xudmFyIEFUVFJJQlVURV9OQU1FUztcbihmdW5jdGlvbiAoQVRUUklCVVRFX05BTUVTKSB7XG4gICAgQVRUUklCVVRFX05BTUVTW1wiU1lTVEVNX0NQVV9MT0dJQ0FMX05VTUJFUlwiXSA9IFwic3lzdGVtLmNwdS5sb2dpY2FsX251bWJlclwiO1xuICAgIEFUVFJJQlVURV9OQU1FU1tcIlNZU1RFTV9DUFVfU1RBVEVcIl0gPSBcInN5c3RlbS5jcHUuc3RhdGVcIjtcbiAgICBBVFRSSUJVVEVfTkFNRVNbXCJTWVNURU1fTUVNT1JZX1NUQVRFXCJdID0gXCJzeXN0ZW0ubWVtb3J5LnN0YXRlXCI7XG4gICAgQVRUUklCVVRFX05BTUVTW1wiU1lTVEVNX0RFVklDRVwiXSA9IFwic3lzdGVtLmRldmljZVwiO1xuICAgIEFUVFJJQlVURV9OQU1FU1tcIk5FVFdPUktfSU9fRElSRUNUSU9OXCJdID0gXCJuZXR3b3JrLmlvLmRpcmVjdGlvblwiO1xuICAgIEFUVFJJQlVURV9OQU1FU1tcIlNZU1RFTV9ORVRXT1JLX1NUQVRFXCJdID0gXCJzeXN0ZW0ubmV0d29yay5zdGF0ZVwiO1xuICAgIEFUVFJJQlVURV9OQU1FU1tcIlBST0NFU1NfQ1BVX1NUQVRFXCJdID0gXCJwcm9jZXNzLmNwdS5zdGF0ZVwiO1xufSkoQVRUUklCVVRFX05BTUVTID0gZXhwb3J0cy5BVFRSSUJVVEVfTkFNRVMgfHwgKGV4cG9ydHMuQVRUUklCVVRFX05BTUVTID0ge30pKTtcbnZhciBDUFVfTEFCRUxTO1xuKGZ1bmN0aW9uIChDUFVfTEFCRUxTKSB7XG4gICAgQ1BVX0xBQkVMU1tcIlVTRVJcIl0gPSBcInVzZXJcIjtcbiAgICBDUFVfTEFCRUxTW1wiU1lTVEVNXCJdID0gXCJzeXN0ZW1cIjtcbiAgICBDUFVfTEFCRUxTW1wiSURMRVwiXSA9IFwiaWRsZVwiO1xuICAgIENQVV9MQUJFTFNbXCJJTlRFUlJVUFRcIl0gPSBcImludGVycnVwdFwiO1xuICAgIENQVV9MQUJFTFNbXCJOSUNFXCJdID0gXCJuaWNlXCI7XG59KShDUFVfTEFCRUxTID0gZXhwb3J0cy5DUFVfTEFCRUxTIHx8IChleHBvcnRzLkNQVV9MQUJFTFMgPSB7fSkpO1xudmFyIE5FVFdPUktfTEFCRUxTO1xuKGZ1bmN0aW9uIChORVRXT1JLX0xBQkVMUykge1xuICAgIE5FVFdPUktfTEFCRUxTW1wiUkVDRUlWRVwiXSA9IFwicmVjZWl2ZVwiO1xuICAgIE5FVFdPUktfTEFCRUxTW1wiVFJBTlNNSVRcIl0gPSBcInRyYW5zbWl0XCI7XG59KShORVRXT1JLX0xBQkVMUyA9IGV4cG9ydHMuTkVUV09SS19MQUJFTFMgfHwgKGV4cG9ydHMuTkVUV09SS19MQUJFTFMgPSB7fSkpO1xudmFyIE1FTU9SWV9MQUJFTFM7XG4oZnVuY3Rpb24gKE1FTU9SWV9MQUJFTFMpIHtcbiAgICBNRU1PUllfTEFCRUxTW1wiRlJFRVwiXSA9IFwiZnJlZVwiO1xuICAgIE1FTU9SWV9MQUJFTFNbXCJVU0VEXCJdID0gXCJ1c2VkXCI7XG59KShNRU1PUllfTEFCRUxTID0gZXhwb3J0cy5NRU1PUllfTEFCRUxTIHx8IChleHBvcnRzLk1FTU9SWV9MQUJFTFMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW51bS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0UHJvY2Vzc01lbW9yeURhdGEgPSBleHBvcnRzLmdldE1lbW9yeURhdGEgPSBleHBvcnRzLmdldFByb2Nlc3NDcHVVc2FnZURhdGEgPSBleHBvcnRzLmdldENwdVVzYWdlRGF0YSA9IHZvaWQgMDtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBNSUxMSVNFQ09ORCA9IDEgLyAxZTM7XG5jb25zdCBNSUNST1NFQ09ORCA9IDEgLyAxZTY7XG4vKipcbiAqIFdlIGdldCBkYXRhIGFzIHNvb24gYXMgd2UgbG9hZCB0aGUgbW9kdWxlIHNvIHRoZSAxc3QgY29sbGVjdFxuICogb2YgdGhlIG1ldHJpYyBhbHJlYWR5IGhhcyB2YWx1YWJsZSBkYXRhIHRvIGJlIHNlbnQuXG4gKi9cbmxldCBwcmV2T3NEYXRhID0ge1xuICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgY3B1czogKDAsIG9zXzEuY3B1cykoKSxcbn07XG4vKipcbiAqIEZvciBlYWNoIENQVSByZXR1cm5lZCBieSBgb3MuY3B1cygpYCBpdCByZXR1cm5zXG4gKiAtIHRoZSBDUFUgdGltZXMgaW4gZWFjaCBzdGF0ZSAodXNlciwgc3lzLCAuLi4pIGluIHNlY29uZHNcbiAqIC0gdGhlICUgb2YgdGltZSB0aGUgQ1BVIHdhcyBpbiBlYWNoIHN0YXRlIHNpbmNlIGxhc3QgbWVhc3VyZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3B1VXNhZ2VEYXRhKCkge1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lRWxhcHNlZCA9IGN1cnJlbnRUaW1lIC0gcHJldk9zRGF0YS50aW1lO1xuICAgIGNvbnN0IGN1cnJlbnRPc0RhdGEgPSB7IHRpbWU6IGN1cnJlbnRUaW1lLCBjcHVzOiAoMCwgb3NfMS5jcHVzKSgpIH07XG4gICAgY29uc3QgdXNhZ2VEYXRhID0gY3VycmVudE9zRGF0YS5jcHVzLm1hcCgoY3B1LCBjcHVOdW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJldlRpbWVzID0gcHJldk9zRGF0YS5jcHVzW2NwdU51bWJlcl0udGltZXM7XG4gICAgICAgIGNvbnN0IGN1cnJUaW1lcyA9IGNwdS50aW1lcztcbiAgICAgICAgY29uc3QgaWRsZSA9IGN1cnJUaW1lcy5pZGxlICogTUlMTElTRUNPTkQ7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBjdXJyVGltZXMudXNlciAqIE1JTExJU0VDT05EO1xuICAgICAgICBjb25zdCBzeXN0ZW0gPSBjdXJyVGltZXMuc3lzICogTUlMTElTRUNPTkQ7XG4gICAgICAgIGNvbnN0IGludGVycnVwdCA9IGN1cnJUaW1lcy5pcnEgKiBNSUxMSVNFQ09ORDtcbiAgICAgICAgY29uc3QgbmljZSA9IGN1cnJUaW1lcy5uaWNlICogTUlMTElTRUNPTkQ7XG4gICAgICAgIGNvbnN0IGlkbGVQID0gKGN1cnJUaW1lcy5pZGxlIC0gcHJldlRpbWVzLmlkbGUpIC8gdGltZUVsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHVzZXJQID0gKGN1cnJUaW1lcy51c2VyIC0gcHJldlRpbWVzLnVzZXIpIC8gdGltZUVsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHN5c3RlbVAgPSAoY3VyclRpbWVzLnN5cyAtIHByZXZUaW1lcy5zeXMpIC8gdGltZUVsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGludGVycnVwdFAgPSAoY3VyclRpbWVzLmlycSAtIHByZXZUaW1lcy5pcnEpIC8gdGltZUVsYXBzZWQ7XG4gICAgICAgIGNvbnN0IG5pY2VQID0gKGN1cnJUaW1lcy5uaWNlIC0gcHJldlRpbWVzLm5pY2UpIC8gdGltZUVsYXBzZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjcHVOdW1iZXI6IFN0cmluZyhjcHVOdW1iZXIpLFxuICAgICAgICAgICAgaWRsZSxcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICBzeXN0ZW0sXG4gICAgICAgICAgICBpbnRlcnJ1cHQsXG4gICAgICAgICAgICBuaWNlLFxuICAgICAgICAgICAgdXNlclAsXG4gICAgICAgICAgICBzeXN0ZW1QLFxuICAgICAgICAgICAgaWRsZVAsXG4gICAgICAgICAgICBpbnRlcnJ1cHRQLFxuICAgICAgICAgICAgbmljZVAsXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcHJldk9zRGF0YSA9IGN1cnJlbnRPc0RhdGE7XG4gICAgcmV0dXJuIHVzYWdlRGF0YTtcbn1cbmV4cG9ydHMuZ2V0Q3B1VXNhZ2VEYXRhID0gZ2V0Q3B1VXNhZ2VEYXRhO1xuLyoqXG4gKiBXZSBnZXQgZGF0YSBhcyBzb29uIGFzIHdlIGxvYWQgdGhlIG1vZHVsZSBzbyB0aGUgMXN0IGNvbGxlY3RcbiAqIG9mIHRoZSBtZXRyaWMgYWxyZWFkeSBoYXMgdmFsdWFibGUgZGF0YSB0byBiZSBzZW50LlxuICovXG5sZXQgcHJldlByb2NEYXRhID0ge1xuICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgdXNhZ2U6IHByb2Nlc3MuY3B1VXNhZ2UoKSxcbn07XG4vKipcbiAqIEdldHMgdGhlIHByb2Nlc3MgQ1BVIHVzYWdlIGFuZCByZXR1cm5zXG4gKiAtIHRoZSB0aW1lIHNwZW50IGluIGB1c2VyYCBzdGF0ZVxuICogLSB0aGUgdGltZSBzcGVudCBpbiBgc3lzdGVtYCBzdGF0ZVxuICogLSB0aGUgJSBvZiB0aW1lIGluIGB1c2VyYCBzdGF0ZSBzaW5jZSBsYXN0IG1lYXN1cmVtZW50XG4gKiAtIHRoZSAlIG9mIHRpbWUgaW4gYHN5c3RlbWAgc3RhdGUgc2luY2UgbGFzdCBtZWFzdXJlbWVudFxuICovXG5mdW5jdGlvbiBnZXRQcm9jZXNzQ3B1VXNhZ2VEYXRhKCkge1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBjdXJyZW50VXNhZ2UgPSBwcm9jZXNzLmNwdVVzYWdlKCk7XG4gICAgY29uc3QgcHJldlVzYWdlID0gcHJldlByb2NEYXRhLnVzYWdlO1xuICAgIC8vIEFjY29yZGluZyB0byBzZW1hbnRpYyBjb252ZW50aW9ucyB3ZSBuZWVkIHRvIGRpdmlkZSBieVxuICAgIC8vIC0gdGltZSBlbGFwc2VkIChpbiBtaWNyb3NlY29uZHMgdG8gbWF0Y2ggYHByb2Nlc3MuY3B1VXNhZ2UoKWAgdW5pdHMpXG4gICAgLy8gLSBudW1iZXIgb2YgQ1BVc1xuICAgIGNvbnN0IHRpbWVFbGFwc2VkID0gKGN1cnJlbnRUaW1lIC0gcHJldlByb2NEYXRhLnRpbWUpICogMTAwMDtcbiAgICBjb25zdCBjcHVzVGltZUVsYXBzZWQgPSB0aW1lRWxhcHNlZCAqIHByZXZPc0RhdGEuY3B1cy5sZW5ndGg7XG4gICAgY29uc3QgdXNlciA9IGN1cnJlbnRVc2FnZS51c2VyICogTUlDUk9TRUNPTkQ7XG4gICAgY29uc3Qgc3lzdGVtID0gY3VycmVudFVzYWdlLnN5c3RlbSAqIE1JQ1JPU0VDT05EO1xuICAgIGNvbnN0IHVzZXJQID0gKGN1cnJlbnRVc2FnZS51c2VyIC0gcHJldlVzYWdlLnVzZXIpIC8gY3B1c1RpbWVFbGFwc2VkO1xuICAgIGNvbnN0IHN5c3RlbVAgPSAoY3VycmVudFVzYWdlLnN5c3RlbSAtIHByZXZVc2FnZS5zeXN0ZW0pIC8gY3B1c1RpbWVFbGFwc2VkO1xuICAgIHByZXZQcm9jRGF0YSA9IHsgdGltZTogY3VycmVudFRpbWUsIHVzYWdlOiBjdXJyZW50VXNhZ2UgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICB1c2VyLFxuICAgICAgICBzeXN0ZW0sXG4gICAgICAgIHVzZXJQLFxuICAgICAgICBzeXN0ZW1QLFxuICAgIH07XG59XG5leHBvcnRzLmdldFByb2Nlc3NDcHVVc2FnZURhdGEgPSBnZXRQcm9jZXNzQ3B1VXNhZ2VEYXRhO1xuLyoqXG4gKiBSZXR1cm5zIG1lbW9yeSBkYXRhIGFzIGFic29sdXRlIHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXRNZW1vcnlEYXRhKCkge1xuICAgIGNvbnN0IHRvdGFsID0gKDAsIG9zXzEudG90YWxtZW0pKCk7XG4gICAgY29uc3QgZnJlZSA9ICgwLCBvc18xLmZyZWVtZW0pKCk7XG4gICAgY29uc3QgdXNlZCA9IHRvdGFsIC0gZnJlZTtcbiAgICBjb25zdCBmcmVlUCA9IGZyZWUgLyB0b3RhbDtcbiAgICBjb25zdCB1c2VkUCA9IHVzZWQgLyB0b3RhbDtcbiAgICByZXR1cm4ge1xuICAgICAgICB1c2VkOiB1c2VkLFxuICAgICAgICBmcmVlOiBmcmVlLFxuICAgICAgICB1c2VkUDogdXNlZFAsXG4gICAgICAgIGZyZWVQOiBmcmVlUCwgLy8gdGhpcyBpcyBmcmFjIHBhcnQgKDAtMSlcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRNZW1vcnlEYXRhID0gZ2V0TWVtb3J5RGF0YTtcbi8qKlxuICogUmV0dXJucyBwcm9jZXNzIG1lbW9yeSBSU1NcbiAqIFRoZSBSZXNpZGVudCBTZXQgU2l6ZSwgaXMgdGhlIGFtb3VudCBvZiBzcGFjZSBvY2N1cGllZCBpbiB0aGUgbWFpbiBtZW1vcnkgZGV2aWNlICh0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSB0b3RhbCBhbGxvY2F0ZWQgbWVtb3J5KSBmb3IgdGhlIHByb2Nlc3MsXG4gKiBpbmNsdWRpbmcgYWxsIEMrKyBhbmQgSmF2YVNjcmlwdCBvYmplY3RzIGFuZCBjb2RlLlxuICovXG5mdW5jdGlvbiBnZXRQcm9jZXNzTWVtb3J5RGF0YSgpIHtcbiAgICAvLyBgcHJvY2Vzcy5tZW1vcnlVc2FnZS5yc3NgIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlIGludHJvZHVjZWQgaW4gdjE0LjE4LjAuXG4gICAgLy8gUHJlZmVyIGl0IGlmIGF2YWlsYWJsZS5cbiAgICBpZiAocHJvY2Vzcy5tZW1vcnlVc2FnZS5yc3MpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MubWVtb3J5VXNhZ2UucnNzKCk7XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm1lbW9yeVVzYWdlKCkucnNzO1xufVxuZXhwb3J0cy5nZXRQcm9jZXNzTWVtb3J5RGF0YSA9IGdldFByb2Nlc3NNZW1vcnlEYXRhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tbW9uLmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuLy8gQHRzLWNoZWNrXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyB1dGlscy5qc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGVzY3JpcHRpb246ICAgU3lzdGVtIEluZm9ybWF0aW9uIC0gbGlicmFyeVxuLy8gICAgICAgICAgICAgICAgZm9yIE5vZGUuanNcbi8vIENvcHlyaWdodDogICAgIChjKSAyMDE0IC0gMjAyNFxuLy8gQXV0aG9yOiAgICAgICAgU2ViYXN0aWFuIEhpbGRlYnJhbmR0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMaWNlbnNlOiAgICAgICBNSVRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIDAuIGhlbHBlciBmdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHNwYXduID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLnNwYXduO1xuY29uc3QgZXhlYyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjO1xuY29uc3QgZXhlY1N5bmMgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY1N5bmM7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5sZXQgX3BsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybTtcbmNvbnN0IF9saW51eCA9IChfcGxhdGZvcm0gPT09ICdsaW51eCcgfHwgX3BsYXRmb3JtID09PSAnYW5kcm9pZCcpO1xuY29uc3QgX2RhcndpbiA9IChfcGxhdGZvcm0gPT09ICdkYXJ3aW4nKTtcbmNvbnN0IF93aW5kb3dzID0gKF9wbGF0Zm9ybSA9PT0gJ3dpbjMyJyk7XG5jb25zdCBfZnJlZWJzZCA9IChfcGxhdGZvcm0gPT09ICdmcmVlYnNkJyk7XG5jb25zdCBfb3BlbmJzZCA9IChfcGxhdGZvcm0gPT09ICdvcGVuYnNkJyk7XG5jb25zdCBfbmV0YnNkID0gKF9wbGF0Zm9ybSA9PT0gJ25ldGJzZCcpO1xuXG5sZXQgX2NvcmVzID0gMDtcbmxldCB3bWljUGF0aCA9ICcnO1xubGV0IGNvZGVwYWdlID0gJyc7XG5sZXQgX3NtYXJ0TW9uVG9vbHNJbnN0YWxsZWQgPSBudWxsO1xubGV0IF9ycGlfY3B1aW5mbyA9IG51bGw7XG5cbmNvbnN0IFdJTkRJUiA9IHByb2Nlc3MuZW52LldJTkRJUiB8fCAnQzpcXFxcV2luZG93cyc7XG5cbi8vIHBvd2VyU2hlbGxcbmxldCBfcHNDaGlsZDtcbmxldCBfcHNSZXN1bHQgPSAnJztcbmxldCBfcHNDbWRzID0gW107XG5sZXQgX3BzUGVyc2lzdGVudCA9IGZhbHNlO1xuY29uc3QgX3BzVG9VVEY4ID0gJyRPdXRwdXRFbmNvZGluZyA9IFtTeXN0ZW0uQ29uc29sZV06Ok91dHB1dEVuY29kaW5nID0gW1N5c3RlbS5Db25zb2xlXTo6SW5wdXRFbmNvZGluZyA9IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjggOyAnO1xuY29uc3QgX3BzQ21kU3RhcnQgPSAnLS0jIyNTVEFSVCMjIy0tJztcbmNvbnN0IF9wc0Vycm9yID0gJy0tRVJST1ItLSc7XG5jb25zdCBfcHNDbWRTZXBlcmF0b3IgPSAnLS0jIyNFTkRDTUQjIyMtLSc7XG5jb25zdCBfcHNJZFNlcGVyYXRvciA9ICctLSMjSUQjIy0tJztcblxuY29uc3QgZXhlY09wdHNXaW4gPSB7XG4gIHdpbmRvd3NIaWRlOiB0cnVlLFxuICBtYXhCdWZmZXI6IDEwMjQgKiAyMDAwMCxcbiAgZW5jb2Rpbmc6ICdVVEYtOCcsXG4gIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIHsgTEFORzogJ2VuX1VTLlVURi04JyB9KVxufTtcblxuY29uc3QgZXhlY09wdHNMaW51eCA9IHtcbiAgbWF4QnVmZmVyOiAxMDI0ICogMjAwMDAsXG4gIGVuY29kaW5nOiAnVVRGLTgnLFxuICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAnaWdub3JlJ11cbn07XG5cbmZ1bmN0aW9uIHRvSW50KHZhbHVlKSB7XG4gIGxldCByZXN1bHQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHJlc3VsdCA9IDA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gc3BsaXRCeU51bWJlcihzdHIpIHtcbiAgbGV0IG51bWJlclN0YXJ0ZWQgPSBmYWxzZTtcbiAgbGV0IG51bSA9ICcnO1xuICBsZXQgY3BhcnQgPSAnJztcbiAgZm9yIChjb25zdCBjIG9mIHN0cikge1xuICAgIGlmICgoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IG51bWJlclN0YXJ0ZWQpIHtcbiAgICAgIG51bWJlclN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgbnVtICs9IGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNwYXJ0ICs9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiBbY3BhcnQsIG51bV07XG59XG5cbmNvbnN0IHN0cmluZ1JlcGxhY2UgPSBuZXcgU3RyaW5nKCkucmVwbGFjZTtcbmNvbnN0IHN0cmluZ1RvTG93ZXIgPSBuZXcgU3RyaW5nKCkudG9Mb3dlckNhc2U7XG5jb25zdCBzdHJpbmdUb1N0cmluZyA9IG5ldyBTdHJpbmcoKS50b1N0cmluZztcbmNvbnN0IHN0cmluZ1N1YnN0ciA9IG5ldyBTdHJpbmcoKS5zdWJzdHI7XG5jb25zdCBzdHJpbmdUcmltID0gbmV3IFN0cmluZygpLnRyaW07XG5jb25zdCBzdHJpbmdTdGFydFdpdGggPSBuZXcgU3RyaW5nKCkuc3RhcnRzV2l0aDtcbmNvbnN0IG1hdGhNaW4gPSBNYXRoLm1pbjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcbiAgbGV0IGdldFR5cGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiBnZXRUeXBlLnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuZnVuY3Rpb24gdW5pcXVlKG9iaikge1xuICBsZXQgdW5pcXVlcyA9IFtdO1xuICBsZXQgc3RyaW5naWZ5ID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhvYmpbaV0pO1xuICAgIGtleXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAtIGI7IH0pO1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShrZXlzW2pdKTtcbiAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShvYmpbaV1ba2V5c1tqXV0pO1xuICAgIH1cbiAgICBpZiAoIXt9Lmhhc093blByb3BlcnR5LmNhbGwoc3RyaW5naWZ5LCBzdHIpKSB7XG4gICAgICB1bmlxdWVzLnB1c2gob2JqW2ldKTtcbiAgICAgIHN0cmluZ2lmeVtzdHJdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuaXF1ZXM7XG59XG5cbmZ1bmN0aW9uIHNvcnRCeUtleShhcnJheSwga2V5cykge1xuICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIGxldCB4ID0gJyc7XG4gICAgbGV0IHkgPSAnJztcbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgeCA9IHggKyBhW2tleV07IHkgPSB5ICsgYltrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiAoKHggPCB5KSA/IC0xIDogKCh4ID4geSkgPyAxIDogMCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29yZXMoKSB7XG4gIGlmIChfY29yZXMgPT09IDApIHtcbiAgICBfY29yZXMgPSBvcy5jcHVzKCkubGVuZ3RoO1xuICB9XG4gIHJldHVybiBfY29yZXM7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlKGxpbmVzLCBwcm9wZXJ0eSwgc2VwYXJhdG9yLCB0cmltbWVkLCBsaW5lTWF0Y2gpIHtcbiAgc2VwYXJhdG9yID0gc2VwYXJhdG9yIHx8ICc6JztcbiAgcHJvcGVydHkgPSBwcm9wZXJ0eS50b0xvd2VyQ2FzZSgpO1xuICB0cmltbWVkID0gdHJpbW1lZCB8fCBmYWxzZTtcbiAgbGluZU1hdGNoID0gbGluZU1hdGNoIHx8IGZhbHNlO1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGxpbmVzLnNvbWUoKGxpbmUpID0+IHtcbiAgICBsZXQgbGluZUxvd2VyID0gbGluZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcdC9nLCAnJyk7XG4gICAgaWYgKHRyaW1tZWQpIHtcbiAgICAgIGxpbmVMb3dlciA9IGxpbmVMb3dlci50cmltKCk7XG4gICAgfVxuICAgIGlmIChsaW5lTG93ZXIuc3RhcnRzV2l0aChwcm9wZXJ0eSkgJiYgKGxpbmVNYXRjaCA/IChsaW5lTG93ZXIubWF0Y2gocHJvcGVydHkgKyBzZXBhcmF0b3IpKSB8fCAobGluZUxvd2VyLm1hdGNoKHByb3BlcnR5ICsgJyAnICsgc2VwYXJhdG9yKSkgOiB0cnVlKSkge1xuICAgICAgY29uc3QgcGFydHMgPSB0cmltbWVkID8gbGluZS50cmltKCkuc3BsaXQoc2VwYXJhdG9yKSA6IGxpbmUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgICAgICBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICByZXN1bHQgPSBwYXJ0cy5qb2luKHNlcGFyYXRvcikudHJpbSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBkZWNvZGVFc2NhcGVTZXF1ZW5jZShzdHIsIGJhc2UpIHtcbiAgYmFzZSA9IGJhc2UgfHwgMTY7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxcXHgoWzAtOUEtRmEtZl17Mn0pL2csIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmd1bWVudHNbMV0sIGJhc2UpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFNwbGl0KHN0cikge1xuICBsZXQgc2VwZXJhdG9yID0gJyc7XG4gIGxldCBwYXJ0ID0gMDtcbiAgc3RyLnNwbGl0KCcnKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50ID49ICcwJyAmJiBlbGVtZW50IDw9ICc5Jykge1xuICAgICAgaWYgKHBhcnQgPT09IDEpIHsgcGFydCsrOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJ0ID09PSAwKSB7IHBhcnQrKzsgfVxuICAgICAgaWYgKHBhcnQgPT09IDEpIHtcbiAgICAgICAgc2VwZXJhdG9yICs9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlcGVyYXRvcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHQsIHBtRGVzaWduYXRvcikge1xuICBwbURlc2lnbmF0b3IgPSBwbURlc2lnbmF0b3IgfHwgJyc7XG4gIHQgPSB0LnRvVXBwZXJDYXNlKCk7XG4gIGxldCBob3VyID0gMDtcbiAgbGV0IG1pbiA9IDA7XG4gIGxldCBzcGxpdHRlciA9IGRldGVjdFNwbGl0KHQpO1xuICBsZXQgcGFydHMgPSB0LnNwbGl0KHNwbGl0dGVyKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgaWYgKHBhcnRzWzJdKSB7XG4gICAgICBwYXJ0c1sxXSArPSBwYXJ0c1syXTtcbiAgICB9XG4gICAgbGV0IGlzUE0gPSAocGFydHNbMV0gJiYgKHBhcnRzWzFdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncG0nKSA+IC0xKSB8fCAocGFydHNbMV0udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdwLm0uJykgPiAtMSkgfHwgKHBhcnRzWzFdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncC4gbS4nKSA+IC0xKSB8fCAocGFydHNbMV0udG9Mb3dlckNhc2UoKS5pbmRleE9mKCduJykgPiAtMSkgfHwgKHBhcnRzWzFdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2gnKSA+IC0xKSB8fCAocGFydHNbMV0udG9Mb3dlckNhc2UoKS5pbmRleE9mKCfDtnMnKSA+IC0xKSB8fCAocG1EZXNpZ25hdG9yICYmIHBhcnRzWzFdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihwbURlc2lnbmF0b3IpID4gLTEpKTtcbiAgICBob3VyID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICBtaW4gPSBwYXJzZUludChwYXJ0c1sxXSwgMTApO1xuICAgIGhvdXIgPSBpc1BNICYmIGhvdXIgPCAxMiA/IGhvdXIgKyAxMiA6IGhvdXI7XG4gICAgcmV0dXJuICgnMCcgKyBob3VyKS5zdWJzdHIoLTIpICsgJzonICsgKCcwJyArIG1pbikuc3Vic3RyKC0yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGVUaW1lKGR0LCBjdWx0dXJlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBkYXRlOiAnJyxcbiAgICB0aW1lOiAnJ1xuICB9O1xuICBjdWx0dXJlID0gY3VsdHVyZSB8fCB7fTtcbiAgbGV0IGRhdGVGb3JtYXQgPSAoY3VsdHVyZS5kYXRlRm9ybWF0IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBsZXQgcG1EZXNpZ25hdG9yID0gKGN1bHR1cmUucG1EZXNpZ25hdG9yIHx8ICcnKTtcblxuICBjb25zdCBwYXJ0cyA9IGR0LnNwbGl0KCcgJyk7XG4gIGlmIChwYXJ0c1swXSkge1xuICAgIGlmIChwYXJ0c1swXS5pbmRleE9mKCcvJykgPj0gMCkge1xuICAgICAgLy8gRGF0ZWZvcm1hdDogbW0vZGQveXl5eSBvciBkZC9tbS95eXl5IG9yIGRkL21tL3l5IG9yIHl5eXkvbW0vZGRcbiAgICAgIGNvbnN0IGR0cGFydHMgPSBwYXJ0c1swXS5zcGxpdCgnLycpO1xuICAgICAgaWYgKGR0cGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmIChkdHBhcnRzWzBdLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIC8vIERhdGVmb3JtYXQ6IHl5eXkvbW0vZGRcbiAgICAgICAgICByZXN1bHQuZGF0ZSA9IGR0cGFydHNbMF0gKyAnLScgKyAoJzAnICsgZHRwYXJ0c1sxXSkuc3Vic3RyKC0yKSArICctJyArICgnMCcgKyBkdHBhcnRzWzJdKS5zdWJzdHIoLTIpO1xuICAgICAgICB9IGVsc2UgaWYgKGR0cGFydHNbMl0ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKChkYXRlRm9ybWF0LmluZGV4T2YoJy9kLycpID4gLTEgfHwgZGF0ZUZvcm1hdC5pbmRleE9mKCcvZGQvJykgPiAtMSkpIHtcbiAgICAgICAgICAgIC8vIERhdGVmb3JtYXQ6IG1tL2RkL3l5XG4gICAgICAgICAgICByZXN1bHQuZGF0ZSA9ICcyMCcgKyBkdHBhcnRzWzJdICsgJy0nICsgKCcwJyArIGR0cGFydHNbMV0pLnN1YnN0cigtMikgKyAnLScgKyAoJzAnICsgZHRwYXJ0c1swXSkuc3Vic3RyKC0yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGF0ZWZvcm1hdDogZGQvbW0veXlcbiAgICAgICAgICAgIHJlc3VsdC5kYXRlID0gJzIwJyArIGR0cGFydHNbMl0gKyAnLScgKyAoJzAnICsgZHRwYXJ0c1sxXSkuc3Vic3RyKC0yKSArICctJyArICgnMCcgKyBkdHBhcnRzWzBdKS5zdWJzdHIoLTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEYXRlZm9ybWF0OiBtbS9kZC95eXl5IG9yIGRkL21tL3l5eXlcbiAgICAgICAgICBjb25zdCBpc0VOID0gKChkdC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3BtJykgPiAtMSkgfHwgKGR0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncC5tLicpID4gLTEpIHx8IChkdC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3AuIG0uJykgPiAtMSkgfHwgKGR0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignYW0nKSA+IC0xKSB8fCAoZHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdhLm0uJykgPiAtMSkgfHwgKGR0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignYS4gbS4nKSA+IC0xKSk7XG4gICAgICAgICAgaWYgKChpc0VOIHx8IGRhdGVGb3JtYXQuaW5kZXhPZignL2QvJykgPiAtMSB8fCBkYXRlRm9ybWF0LmluZGV4T2YoJy9kZC8nKSA+IC0xKSAmJiBkYXRlRm9ybWF0LmluZGV4T2YoJ2RkLycpICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBEYXRlZm9ybWF0OiBtbS9kZC95eXl5XG4gICAgICAgICAgICByZXN1bHQuZGF0ZSA9IGR0cGFydHNbMl0gKyAnLScgKyAoJzAnICsgZHRwYXJ0c1swXSkuc3Vic3RyKC0yKSArICctJyArICgnMCcgKyBkdHBhcnRzWzFdKS5zdWJzdHIoLTIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEYXRlZm9ybWF0OiBkZC9tbS95eXl5XG4gICAgICAgICAgICByZXN1bHQuZGF0ZSA9IGR0cGFydHNbMl0gKyAnLScgKyAoJzAnICsgZHRwYXJ0c1sxXSkuc3Vic3RyKC0yKSArICctJyArICgnMCcgKyBkdHBhcnRzWzBdKS5zdWJzdHIoLTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFydHNbMF0uaW5kZXhPZignLicpID49IDApIHtcbiAgICAgIGNvbnN0IGR0cGFydHMgPSBwYXJ0c1swXS5zcGxpdCgnLicpO1xuICAgICAgaWYgKGR0cGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmIChkYXRlRm9ybWF0LmluZGV4T2YoJy5kLicpID4gLTEgfHwgZGF0ZUZvcm1hdC5pbmRleE9mKCcuZGQuJykgPiAtMSkge1xuICAgICAgICAgIC8vIERhdGVmb3JtYXQ6IG1tLmRkLnl5eXlcbiAgICAgICAgICByZXN1bHQuZGF0ZSA9IGR0cGFydHNbMl0gKyAnLScgKyAoJzAnICsgZHRwYXJ0c1swXSkuc3Vic3RyKC0yKSArICctJyArICgnMCcgKyBkdHBhcnRzWzFdKS5zdWJzdHIoLTIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERhdGVmb3JtYXQ6IGRkLm1tLnl5eXlcbiAgICAgICAgICByZXN1bHQuZGF0ZSA9IGR0cGFydHNbMl0gKyAnLScgKyAoJzAnICsgZHRwYXJ0c1sxXSkuc3Vic3RyKC0yKSArICctJyArICgnMCcgKyBkdHBhcnRzWzBdKS5zdWJzdHIoLTIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwYXJ0c1swXS5pbmRleE9mKCctJykgPj0gMCkge1xuICAgICAgLy8gRGF0ZWZvcm1hdDogeXl5eS1tbS1kZFxuICAgICAgY29uc3QgZHRwYXJ0cyA9IHBhcnRzWzBdLnNwbGl0KCctJyk7XG4gICAgICBpZiAoZHRwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmVzdWx0LmRhdGUgPSBkdHBhcnRzWzBdICsgJy0nICsgKCcwJyArIGR0cGFydHNbMV0pLnN1YnN0cigtMikgKyAnLScgKyAoJzAnICsgZHRwYXJ0c1syXSkuc3Vic3RyKC0yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHBhcnRzWzFdKSB7XG4gICAgcGFydHMuc2hpZnQoKTtcbiAgICBsZXQgdGltZSA9IHBhcnRzLmpvaW4oJyAnKTtcbiAgICByZXN1bHQudGltZSA9IHBhcnNlVGltZSh0aW1lLCBwbURlc2lnbmF0b3IpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZChoZWFkLCByaWdodHMpIHtcbiAgbGV0IHNwYWNlID0gKHJpZ2h0cyA+IDApO1xuICBsZXQgY291bnQgPSAxO1xuICBsZXQgZnJvbSA9IDA7XG4gIGxldCB0byA9IDA7XG4gIGxldCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvdW50IDw9IHJpZ2h0cykge1xuICAgICAgaWYgKC9cXHMvLnRlc3QoaGVhZFtpXSkgJiYgIXNwYWNlKSB7XG4gICAgICAgIHRvID0gaSAtIDE7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICAgIHRvOiB0byArIDEsXG4gICAgICAgICAgY2FwOiBoZWFkLnN1YnN0cmluZyhmcm9tLCB0byArIDEpXG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tID0gdG8gKyAyO1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgICAgc3BhY2UgPSBoZWFkW2ldID09PSAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghL1xccy8udGVzdChoZWFkW2ldKSAmJiBzcGFjZSkge1xuICAgICAgICB0byA9IGkgLSAxO1xuICAgICAgICBpZiAoZnJvbSA8IHRvKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgICAgIHRvOiB0byxcbiAgICAgICAgICAgIGNhcDogaGVhZC5zdWJzdHJpbmcoZnJvbSwgdG8pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnJvbSA9IHRvICsgMTtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICAgIHNwYWNlID0gaGVhZFtpXSA9PT0gJyAnO1xuICAgIH1cbiAgfVxuICB0byA9IDUwMDA7XG4gIHJlc3VsdC5wdXNoKHtcbiAgICBmcm9tOiBmcm9tLFxuICAgIHRvOiB0byxcbiAgICBjYXA6IGhlYWQuc3Vic3RyaW5nKGZyb20sIHRvKVxuICB9KTtcbiAgbGV0IGxlbiA9IHJlc3VsdC5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAocmVzdWx0W2ldLmNhcC5yZXBsYWNlKC9cXHMvZywgJycpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKGkgKyAxIDwgbGVuKSB7XG4gICAgICAgIHJlc3VsdFtpXS50byA9IHJlc3VsdFtpICsgMV0udG87XG4gICAgICAgIHJlc3VsdFtpXS5jYXAgPSByZXN1bHRbaV0uY2FwICsgcmVzdWx0W2kgKyAxXS5jYXA7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoaSArIDEsIDEpO1xuICAgICAgICBsZW4gPSBsZW4gLSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaW5kT2JqZWN0QnlLZXkoYXJyYXksIGtleSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJheVtpXVtrZXldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0V21pYygpIHtcbiAgaWYgKG9zLnR5cGUoKSA9PT0gJ1dpbmRvd3NfTlQnICYmICF3bWljUGF0aCkge1xuICAgIHdtaWNQYXRoID0gV0lORElSICsgJ1xcXFxzeXN0ZW0zMlxcXFx3YmVtXFxcXHdtaWMuZXhlJztcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMod21pY1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB3bWljUGF0aEFycmF5ID0gZXhlY1N5bmMoJ1dIRVJFIFdNSUMnLCBleGVjT3B0c1dpbikudG9TdHJpbmcoKS5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgIGlmICh3bWljUGF0aEFycmF5ICYmIHdtaWNQYXRoQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgd21pY1BhdGggPSB3bWljUGF0aEFycmF5WzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdtaWNQYXRoID0gJ3dtaWMnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHdtaWNQYXRoID0gJ3dtaWMnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gd21pY1BhdGg7XG59XG5cbmZ1bmN0aW9uIHdtaWMoY29tbWFuZCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBvd2VyU2hlbGwoZ2V0V21pYygpICsgJyAnICsgY29tbWFuZCkudGhlbihzdGRvdXQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoc3Rkb3V0LCAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXNvbHZlKCcnLCBlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFZib3htYW5hZ2UoKSB7XG4gIHJldHVybiBfd2luZG93cyA/IGBcIiR7cHJvY2Vzcy5lbnYuVkJPWF9JTlNUQUxMX1BBVEggfHwgcHJvY2Vzcy5lbnYuVkJPWF9NU0lfSU5TVEFMTF9QQVRIfVxcXFxWQm94TWFuYWdlLmV4ZVwiYCA6ICd2Ym94bWFuYWdlJztcbn1cblxuZnVuY3Rpb24gcG93ZXJTaGVsbFByb2NlZWRSZXN1bHRzKGRhdGEpIHtcbiAgbGV0IGlkID0gJyc7XG4gIGxldCBwYXJ0cztcbiAgbGV0IHJlcyA9ICcnO1xuICAvLyBzdGFydElEXG4gIGlmIChkYXRhLmluZGV4T2YoX3BzQ21kU3RhcnQpID49IDApIHtcbiAgICBwYXJ0cyA9IGRhdGEuc3BsaXQoX3BzQ21kU3RhcnQpO1xuICAgIGNvbnN0IHBhcnRzMiA9IHBhcnRzWzFdLnNwbGl0KF9wc0lkU2VwZXJhdG9yKTtcbiAgICBpZCA9IHBhcnRzMlswXTtcbiAgICBpZiAocGFydHMyLmxlbmd0aCA+IDEpIHtcbiAgICAgIGRhdGEgPSBwYXJ0czIuc2xpY2UoMSkuam9pbihfcHNJZFNlcGVyYXRvcik7XG4gICAgfVxuICB9XG4gIC8vIHJlc3VsdDtcbiAgaWYgKGRhdGEuaW5kZXhPZihfcHNDbWRTZXBlcmF0b3IpID49IDApIHtcbiAgICBwYXJ0cyA9IGRhdGEuc3BsaXQoX3BzQ21kU2VwZXJhdG9yKTtcbiAgICByZXMgPSBwYXJ0c1swXTtcbiAgfVxuICBsZXQgcmVtb3ZlID0gLTE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgX3BzQ21kcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChfcHNDbWRzW2ldLmlkID09PSBpZCkge1xuICAgICAgcmVtb3ZlID0gaTtcbiAgICAgIF9wc0NtZHNbaV0uY2FsbGJhY2socmVzKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlbW92ZSA+PSAwKSB7XG4gICAgX3BzQ21kcy5zcGxpY2UocmVtb3ZlLCAxKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3dlclNoZWxsU3RhcnQoKSB7XG4gIGlmICghX3BzQ2hpbGQpIHtcbiAgICBfcHNDaGlsZCA9IHNwYXduKCdwb3dlcnNoZWxsLmV4ZScsIFsnLU5vUHJvZmlsZScsICctTm9Mb2dvJywgJy1JbnB1dEZvcm1hdCcsICdUZXh0JywgJy1Ob0V4aXQnLCAnLUNvbW1hbmQnLCAnLSddLCB7XG4gICAgICBzdGRpbzogJ3BpcGUnLFxuICAgICAgd2luZG93c0hpZGU6IHRydWUsXG4gICAgICBtYXhCdWZmZXI6IDEwMjQgKiAyMDAwMCxcbiAgICAgIGVuY29kaW5nOiAnVVRGLTgnLFxuICAgICAgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgeyBMQU5HOiAnZW5fVVMuVVRGLTgnIH0pXG4gICAgfSk7XG4gICAgaWYgKF9wc0NoaWxkICYmIF9wc0NoaWxkLnBpZCkge1xuICAgICAgX3BzUGVyc2lzdGVudCA9IHRydWU7XG4gICAgICBfcHNDaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBfcHNSZXN1bHQgPSBfcHNSZXN1bHQgKyBkYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgIGlmIChkYXRhLmluZGV4T2YoX3BzQ21kU2VwZXJhdG9yKSA+PSAwKSB7XG4gICAgICAgICAgcG93ZXJTaGVsbFByb2NlZWRSZXN1bHRzKF9wc1Jlc3VsdCk7XG4gICAgICAgICAgX3BzUmVzdWx0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgX3BzQ2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBwb3dlclNoZWxsUHJvY2VlZFJlc3VsdHMoX3BzUmVzdWx0ICsgX3BzRXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBfcHNDaGlsZC5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBvd2VyU2hlbGxQcm9jZWVkUmVzdWx0cyhfcHNSZXN1bHQgKyBfcHNFcnJvcik7XG4gICAgICB9KTtcbiAgICAgIF9wc0NoaWxkLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF9wc0NoaWxkKSB7IF9wc0NoaWxkLmtpbGwoKTsgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvd2VyU2hlbGxSZWxlYXNlKCkge1xuICB0cnkge1xuICAgIGlmIChfcHNDaGlsZCkge1xuICAgICAgX3BzQ2hpbGQuc3RkaW4ud3JpdGUoJ2V4aXQnICsgb3MuRU9MKTtcbiAgICAgIF9wc0NoaWxkLnN0ZGluLmVuZCgpO1xuICAgICAgX3BzUGVyc2lzdGVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChfcHNDaGlsZCkgeyBfcHNDaGlsZC5raWxsKCk7IH1cbiAgfVxuICBfcHNDaGlsZCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHBvd2VyU2hlbGwoY21kKSB7XG5cbiAgLy8vIGNvbnN0IHBhdHRlcm4gPSBbXG4gIC8vLyAgICdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpJyxcbiAgLy8vICAgJyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpJ1xuICAvLy8gXS5qb2luKCd8Jyk7XG5cbiAgaWYgKF9wc1BlcnNpc3RlbnQpIHtcbiAgICBjb25zdCBpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZGF0YSkge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgX3BzQ21kcy5wdXNoKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjbWQsXG4gICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgc3RhcnQ6IG5ldyBEYXRlKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKF9wc0NoaWxkICYmIF9wc0NoaWxkLnBpZCkge1xuICAgICAgICAgICAgX3BzQ2hpbGQuc3RkaW4ud3JpdGUoX3BzVG9VVEY4ICsgJ2VjaG8gJyArIF9wc0NtZFN0YXJ0ICsgaWQgKyBfcHNJZFNlcGVyYXRvciArICc7ICcgKyBvcy5FT0wgKyBjbWQgKyBvcy5FT0wgKyAnZWNobyAnICsgX3BzQ21kU2VwZXJhdG9yICsgb3MuRU9MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXNvbHZlKCcnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oJ3Bvd2Vyc2hlbGwuZXhlJywgWyctTm9Qcm9maWxlJywgJy1Ob0xvZ28nLCAnLUlucHV0Rm9ybWF0JywgJ1RleHQnLCAnLU5vRXhpdCcsICctRXhlY3V0aW9uUG9saWN5JywgJ1VucmVzdHJpY3RlZCcsICctQ29tbWFuZCcsICctJ10sIHtcbiAgICAgICAgICAgIHN0ZGlvOiAncGlwZScsXG4gICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heEJ1ZmZlcjogMTAyNCAqIDIwMDAwLFxuICAgICAgICAgICAgZW5jb2Rpbmc6ICdVVEYtOCcsXG4gICAgICAgICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCB7IExBTkc6ICdlbl9VUy5VVEYtOCcgfSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChjaGlsZCAmJiAhY2hpbGQucGlkKSB7XG4gICAgICAgICAgICBjaGlsZC5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQucGlkKSB7XG4gICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBkYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNoaWxkLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgY2hpbGQua2lsbCgpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2hpbGQub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoX3BzVG9VVEY4ICsgY21kICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2V4aXQnICsgb3MuRU9MKTtcbiAgICAgICAgICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLmtpbGwoKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleGVjU2FmZShjbWQsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY21kLCBhcmdzLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoY2hpbGQgJiYgIWNoaWxkLnBpZCkge1xuICAgICAgICAgIGNoaWxkLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQucGlkKSB7XG4gICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2hpbGQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNoaWxkLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNoaWxkLmtpbGwoKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29kZXBhZ2UoKSB7XG4gIGlmIChfd2luZG93cykge1xuICAgIGlmICghY29kZXBhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ZG91dCA9IGV4ZWNTeW5jKCdjaGNwJywgZXhlY09wdHNXaW4pO1xuICAgICAgICBjb25zdCBsaW5lcyA9IHN0ZG91dC50b1N0cmluZygpLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lc1swXS5zcGxpdCgnOicpO1xuICAgICAgICBjb2RlcGFnZSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXS5yZXBsYWNlKCcuJywgJycpLnRyaW0oKSA6ICcnO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvZGVwYWdlID0gJzQzNyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2RlcGFnZTtcbiAgfVxuICBpZiAoX2xpbnV4IHx8IF9kYXJ3aW4gfHwgX2ZyZWVic2QgfHwgX29wZW5ic2QgfHwgX25ldGJzZCkge1xuICAgIGlmICghY29kZXBhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ZG91dCA9IGV4ZWNTeW5jKCdlY2hvICRMQU5HJywgdXRpbC5leGVjT3B0c0xpbnV4KTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBzdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbGluZXNbMF0uc3BsaXQoJy4nKTtcbiAgICAgICAgY29kZXBhZ2UgPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0udHJpbSgpIDogJyc7XG4gICAgICAgIGlmICghY29kZXBhZ2UpIHtcbiAgICAgICAgICBjb2RlcGFnZSA9ICdVVEYtOCc7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb2RlcGFnZSA9ICdVVEYtOCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2RlcGFnZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbWFydE1vblRvb2xzSW5zdGFsbGVkKCkge1xuICBpZiAoX3NtYXJ0TW9uVG9vbHNJbnN0YWxsZWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gX3NtYXJ0TW9uVG9vbHNJbnN0YWxsZWQ7XG4gIH1cbiAgX3NtYXJ0TW9uVG9vbHNJbnN0YWxsZWQgPSBmYWxzZTtcbiAgaWYgKF93aW5kb3dzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhBcnJheSA9IGV4ZWNTeW5jKCdXSEVSRSBzbWFydGN0bCAyPm51bCcsIGV4ZWNPcHRzV2luKS50b1N0cmluZygpLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgIGlmIChwYXRoQXJyYXkgJiYgcGF0aEFycmF5Lmxlbmd0aCkge1xuICAgICAgICBfc21hcnRNb25Ub29sc0luc3RhbGxlZCA9IHBhdGhBcnJheVswXS5pbmRleE9mKCc6XFxcXCcpID49IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc21hcnRNb25Ub29sc0luc3RhbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIF9zbWFydE1vblRvb2xzSW5zdGFsbGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmIChfbGludXggfHwgX2RhcndpbiB8fCBfZnJlZWJzZCB8fCBfb3BlbmJzZCB8fCBfbmV0YnNkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhBcnJheSA9IGV4ZWNTeW5jKCd3aGljaCBzbWFydGN0bCAyPi9kZXYvbnVsbCcsIGV4ZWNPcHRzTGludXgpLnRvU3RyaW5nKCkuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgX3NtYXJ0TW9uVG9vbHNJbnN0YWxsZWQgPSBwYXRoQXJyYXkubGVuZ3RoID4gMDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB1dGlsLm5vb3AoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9zbWFydE1vblRvb2xzSW5zdGFsbGVkO1xufVxuXG5mdW5jdGlvbiBpc1Jhc3BiZXJyeSgpIHtcbiAgY29uc3QgUElfTU9ERUxfTk8gPSBbXG4gICAgJ0JDTTI3MDgnLFxuICAgICdCQ00yNzA5JyxcbiAgICAnQkNNMjcxMCcsXG4gICAgJ0JDTTI3MTEnLFxuICAgICdCQ00yNzEyJyxcbiAgICAnQkNNMjgzNScsXG4gICAgJ0JDTTI4MzYnLFxuICAgICdCQ00yODM3JyxcbiAgICAnQkNNMjgzN0IwJ1xuICBdO1xuICBsZXQgY3B1aW5mbyA9IFtdO1xuXG4gIGlmIChfcnBpX2NwdWluZm8gIT09IG51bGwpIHtcbiAgICBjcHVpbmZvID0gX3JwaV9jcHVpbmZvO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBjcHVpbmZvID0gZnMucmVhZEZpbGVTeW5jKCcvcHJvYy9jcHVpbmZvJywgeyBlbmNvZGluZzogJ3V0ZjgnIH0pLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgX3JwaV9jcHVpbmZvID0gY3B1aW5mbztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFyZHdhcmUgPSBnZXRWYWx1ZShjcHVpbmZvLCAnaGFyZHdhcmUnKTtcbiAgcmV0dXJuIChoYXJkd2FyZSAmJiBQSV9NT0RFTF9OTy5pbmRleE9mKGhhcmR3YXJlKSA+IC0xKTtcbn1cblxuZnVuY3Rpb24gaXNSYXNwYmlhbigpIHtcbiAgbGV0IG9zcmVsZWFzZSA9IFtdO1xuICB0cnkge1xuICAgIG9zcmVsZWFzZSA9IGZzLnJlYWRGaWxlU3luYygnL2V0Yy9vcy1yZWxlYXNlJywgeyBlbmNvZGluZzogJ3V0ZjgnIH0pLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGlkID0gZ2V0VmFsdWUob3NyZWxlYXNlLCAnaWQnLCAnPScpO1xuICByZXR1cm4gKGlkICYmIGlkLmluZGV4T2YoJ3Jhc3BiaWFuJykgPiAtMSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWNXaW4oY21kLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgIG9wdHMgPSBleGVjT3B0c1dpbjtcbiAgfVxuICBsZXQgbmV3Q21kID0gJ2NoY3AgNjUwMDEgPiBudWwgJiYgY21kIC9DICcgKyBjbWQgKyAnICYmIGNoY3AgJyArIGNvZGVwYWdlICsgJyA+IG51bCc7XG4gIGV4ZWMobmV3Q21kLCBvcHRzLCBmdW5jdGlvbiAoZXJyb3IsIHN0ZG91dCkge1xuICAgIGNhbGxiYWNrKGVycm9yLCBzdGRvdXQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZGFyd2luWGNvZGVFeGlzdHMoKSB7XG4gIGNvbnN0IGNtZExpbmVUb29sc0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoJy9MaWJyYXJ5L0RldmVsb3Blci9Db21tYW5kTGluZVRvb2xzL3Vzci9iaW4vJyk7XG4gIGNvbnN0IHhjb2RlQXBwRXhpc3RzID0gZnMuZXhpc3RzU3luYygnL0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVyL1Rvb2xzJyk7XG4gIGNvbnN0IHhjb2RlRXhpc3RzID0gZnMuZXhpc3RzU3luYygnL0xpYnJhcnkvRGV2ZWxvcGVyL1hjb2RlLycpO1xuICByZXR1cm4gKGNtZExpbmVUb29sc0V4aXN0cyB8fCB4Y29kZUV4aXN0cyB8fCB4Y29kZUFwcEV4aXN0cyk7XG59XG5cbmZ1bmN0aW9uIG5hbm9TZWNvbmRzKCkge1xuICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHRpbWUpIHx8IHRpbWUubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuICt0aW1lWzBdICogMWU5ICsgK3RpbWVbMV07XG59XG5cbmZ1bmN0aW9uIGNvdW50VW5pcXVlTGluZXMobGluZXMsIHN0YXJ0aW5nV2l0aCkge1xuICBzdGFydGluZ1dpdGggPSBzdGFydGluZ1dpdGggfHwgJyc7XG4gIGNvbnN0IHVuaXF1ZUxpbmVzID0gW107XG4gIGxpbmVzLmZvckVhY2gobGluZSA9PiB7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aChzdGFydGluZ1dpdGgpKSB7XG4gICAgICBpZiAodW5pcXVlTGluZXMuaW5kZXhPZihsaW5lKSA9PT0gLTEpIHtcbiAgICAgICAgdW5pcXVlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdW5pcXVlTGluZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBjb3VudExpbmVzKGxpbmVzLCBzdGFydGluZ1dpdGgpIHtcbiAgc3RhcnRpbmdXaXRoID0gc3RhcnRpbmdXaXRoIHx8ICcnO1xuICBjb25zdCB1bmlxdWVMaW5lcyA9IFtdO1xuICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoc3RhcnRpbmdXaXRoKSkge1xuICAgICAgdW5pcXVlTGluZXMucHVzaChsaW5lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdW5pcXVlTGluZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVNoZWxsU3RyaW5nKHN0ciwgc3RyaWN0KSB7XG4gIGlmICh0eXBlb2Ygc3RyaWN0ID09PSAndW5kZWZpbmVkJykgeyBzdHJpY3QgPSBmYWxzZTsgfVxuICBjb25zdCBzID0gc3RyIHx8ICcnO1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGNvbnN0IGwgPSBtYXRoTWluKHMubGVuZ3RoLCAyMDAwKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbDsgaSsrKSB7XG4gICAgaWYgKCEoc1tpXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBzW2ldID09PSAnPicgfHxcbiAgICAgIHNbaV0gPT09ICc8JyB8fFxuICAgICAgc1tpXSA9PT0gJyonIHx8XG4gICAgICBzW2ldID09PSAnPycgfHxcbiAgICAgIHNbaV0gPT09ICdbJyB8fFxuICAgICAgc1tpXSA9PT0gJ10nIHx8XG4gICAgICBzW2ldID09PSAnfCcgfHxcbiAgICAgIHNbaV0gPT09ICfLmicgfHxcbiAgICAgIHNbaV0gPT09ICckJyB8fFxuICAgICAgc1tpXSA9PT0gJzsnIHx8XG4gICAgICBzW2ldID09PSAnJicgfHxcbiAgICAgIHNbaV0gPT09ICddJyB8fFxuICAgICAgc1tpXSA9PT0gJyMnIHx8XG4gICAgICBzW2ldID09PSAnXFxcXCcgfHxcbiAgICAgIHNbaV0gPT09ICdcXHQnIHx8XG4gICAgICBzW2ldID09PSAnXFxuJyB8fFxuICAgICAgc1tpXSA9PT0gJ1xccicgfHxcbiAgICAgIHNbaV0gPT09ICdcXCcnIHx8XG4gICAgICBzW2ldID09PSAnYCcgfHxcbiAgICAgIHNbaV0gPT09ICdcIicgfHxcbiAgICAgIHNbaV0ubGVuZ3RoID4gMSB8fFxuICAgICAgKHN0cmljdCAmJiBzW2ldID09PSAnKCcpIHx8XG4gICAgICAoc3RyaWN0ICYmIHNbaV0gPT09ICcpJykgfHxcbiAgICAgIChzdHJpY3QgJiYgc1tpXSA9PT0gJ0AnKSB8fFxuICAgICAgKHN0cmljdCAmJiBzW2ldID09PSAnICcpIHx8XG4gICAgICAoc3RyaWN0ICYmIHNbaV0gPT0gJ3snKSB8fFxuICAgICAgKHN0cmljdCAmJiBzW2ldID09ICc7JykgfHxcbiAgICAgIChzdHJpY3QgJiYgc1tpXSA9PSAnfScpKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgc1tpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNQcm90b3R5cGVQb2xsdXRlZCgpIHtcbiAgY29uc3QgcyA9ICcxMjM0NTY3ODkwYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gIGxldCBub3RQb2xsdXRlZCA9IHRydWU7XG4gIGxldCBzdCA9ICcnO1xuXG4gIHN0Ll9fcHJvdG9fXy5yZXBsYWNlID0gc3RyaW5nUmVwbGFjZTtcbiAgc3QuX19wcm90b19fLnRvTG93ZXJDYXNlID0gc3RyaW5nVG9Mb3dlcjtcbiAgc3QuX19wcm90b19fLnRvU3RyaW5nID0gc3RyaW5nVG9TdHJpbmc7XG4gIHN0Ll9fcHJvdG9fXy5zdWJzdHIgPSBzdHJpbmdTdWJzdHI7XG5cbiAgbm90UG9sbHV0ZWQgPSBub3RQb2xsdXRlZCB8fCAocy5sZW5ndGggIT09IDYyKTtcbiAgY29uc3QgbXMgPSBEYXRlLm5vdygpO1xuICBpZiAodHlwZW9mIG1zID09PSAnbnVtYmVyJyAmJiBtcyA+IDE2MDAwMDAwMDAwMDApIHtcbiAgICBjb25zdCBsID0gbXMgJSAxMDAgKyAxNTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgciA9IE1hdGgucmFuZG9tKCkgKiA2MS45OTk5OTk5OSArIDE7XG4gICAgICBjb25zdCBycyA9IHBhcnNlSW50KE1hdGguZmxvb3IocikudG9TdHJpbmcoKSwgMTApO1xuICAgICAgY29uc3QgcnMyID0gcGFyc2VJbnQoci50b1N0cmluZygpLnNwbGl0KCcuJylbMF0sIDEwKTtcbiAgICAgIGNvbnN0IHEgPSBNYXRoLnJhbmRvbSgpICogNjEuOTk5OTk5OTkgKyAxO1xuICAgICAgY29uc3QgcXMgPSBwYXJzZUludChNYXRoLmZsb29yKHEpLnRvU3RyaW5nKCksIDEwKTtcbiAgICAgIGNvbnN0IHFzMiA9IHBhcnNlSW50KHEudG9TdHJpbmcoKS5zcGxpdCgnLicpWzBdLCAxMCk7XG4gICAgICBub3RQb2xsdXRlZCA9IG5vdFBvbGx1dGVkICYmIChyICE9PSBxKTtcbiAgICAgIG5vdFBvbGx1dGVkID0gbm90UG9sbHV0ZWQgJiYgcnMgPT09IHJzMiAmJiBxcyA9PT0gcXMyO1xuICAgICAgc3QgKz0gc1tycyAtIDFdO1xuICAgIH1cbiAgICBub3RQb2xsdXRlZCA9IG5vdFBvbGx1dGVkICYmIHN0Lmxlbmd0aCA9PT0gbDtcbiAgICAvLyBzdHJpbmcgbWFuaXB1bGF0aW9uXG4gICAgbGV0IHAgPSBNYXRoLnJhbmRvbSgpICogbCAqIDAuOTk5OTk5OTk5OTtcbiAgICBsZXQgc3RtID0gc3Quc3Vic3RyKDAsIHApICsgJyAnICsgc3Quc3Vic3RyKHAsIDIwMDApO1xuICAgIHN0bS5fX3Byb3RvX18ucmVwbGFjZSA9IHN0cmluZ1JlcGxhY2U7XG4gICAgbGV0IHN0byA9IHN0bS5yZXBsYWNlKC8gL2csICcnKTtcbiAgICBub3RQb2xsdXRlZCA9IG5vdFBvbGx1dGVkICYmIHN0ID09PSBzdG87XG4gICAgcCA9IE1hdGgucmFuZG9tKCkgKiBsICogMC45OTk5OTk5OTk5O1xuICAgIHN0bSA9IHN0LnN1YnN0cigwLCBwKSArICd7JyArIHN0LnN1YnN0cihwLCAyMDAwKTtcbiAgICBzdG8gPSBzdG0ucmVwbGFjZSgvey9nLCAnJyk7XG4gICAgbm90UG9sbHV0ZWQgPSBub3RQb2xsdXRlZCAmJiBzdCA9PT0gc3RvO1xuICAgIHAgPSBNYXRoLnJhbmRvbSgpICogbCAqIDAuOTk5OTk5OTk5OTtcbiAgICBzdG0gPSBzdC5zdWJzdHIoMCwgcCkgKyAnKicgKyBzdC5zdWJzdHIocCwgMjAwMCk7XG4gICAgc3RvID0gc3RtLnJlcGxhY2UoL1xcKi9nLCAnJyk7XG4gICAgbm90UG9sbHV0ZWQgPSBub3RQb2xsdXRlZCAmJiBzdCA9PT0gc3RvO1xuICAgIHAgPSBNYXRoLnJhbmRvbSgpICogbCAqIDAuOTk5OTk5OTk5OTtcbiAgICBzdG0gPSBzdC5zdWJzdHIoMCwgcCkgKyAnJCcgKyBzdC5zdWJzdHIocCwgMjAwMCk7XG4gICAgc3RvID0gc3RtLnJlcGxhY2UoL1xcJC9nLCAnJyk7XG4gICAgbm90UG9sbHV0ZWQgPSBub3RQb2xsdXRlZCAmJiBzdCA9PT0gc3RvO1xuXG4gICAgLy8gbG93ZXJcbiAgICBjb25zdCBzdGwgPSBzdC50b0xvd2VyQ2FzZSgpO1xuICAgIG5vdFBvbGx1dGVkID0gbm90UG9sbHV0ZWQgJiYgKHN0bC5sZW5ndGggPT09IGwpICYmIHN0bFtsIC0gMV0gJiYgIShzdGxbbF0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBzMSA9IHN0W2ldO1xuICAgICAgczEuX19wcm90b19fLnRvTG93ZXJDYXNlID0gc3RyaW5nVG9Mb3dlcjtcbiAgICAgIGNvbnN0IHMyID0gc3RsID8gc3RsW2ldIDogJyc7XG4gICAgICBjb25zdCBzMWwgPSBzMS50b0xvd2VyQ2FzZSgpO1xuICAgICAgbm90UG9sbHV0ZWQgPSBub3RQb2xsdXRlZCAmJiBzMWxbMF0gPT09IHMyICYmIHMxbFswXSAmJiAhKHMxbFsxXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiAhbm90UG9sbHV0ZWQ7XG59XG5cbmZ1bmN0aW9uIGhleDJiaW4oaGV4KSB7XG4gIHJldHVybiAoJzAwMDAwMDAwJyArIChwYXJzZUludChoZXgsIDE2KSkudG9TdHJpbmcoMikpLnN1YnN0cigtOCk7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVzSW5QYXRoKHNvdXJjZSkge1xuICBjb25zdCBsc3RhdFN5bmMgPSBmcy5sc3RhdFN5bmM7XG4gIGNvbnN0IHJlYWRkaXJTeW5jID0gZnMucmVhZGRpclN5bmM7XG4gIGNvbnN0IGpvaW4gPSBwYXRoLmpvaW47XG5cbiAgZnVuY3Rpb24gaXNEaXJlY3Rvcnkoc291cmNlKSB7XG4gICAgcmV0dXJuIGxzdGF0U3luYyhzb3VyY2UpLmlzRGlyZWN0b3J5KCk7XG4gIH1cbiAgZnVuY3Rpb24gaXNGaWxlKHNvdXJjZSkgeyByZXR1cm4gbHN0YXRTeW5jKHNvdXJjZSkuaXNGaWxlKCk7IH1cblxuICBmdW5jdGlvbiBnZXREaXJlY3Rvcmllcyhzb3VyY2UpIHtcbiAgICByZXR1cm4gcmVhZGRpclN5bmMoc291cmNlKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIGpvaW4oc291cmNlLCBuYW1lKTsgfSkuZmlsdGVyKGlzRGlyZWN0b3J5KTtcbiAgfVxuICBmdW5jdGlvbiBnZXRGaWxlcyhzb3VyY2UpIHtcbiAgICByZXR1cm4gcmVhZGRpclN5bmMoc291cmNlKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIGpvaW4oc291cmNlLCBuYW1lKTsgfSkuZmlsdGVyKGlzRmlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGaWxlc1JlY3Vyc2l2ZWx5KHNvdXJjZSkge1xuICAgIHRyeSB7XG4gICAgICBsZXQgZGlycyA9IGdldERpcmVjdG9yaWVzKHNvdXJjZSk7XG4gICAgICBsZXQgZmlsZXMgPSBkaXJzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGRpcikgeyByZXR1cm4gZ2V0RmlsZXNSZWN1cnNpdmVseShkaXIpOyB9KVxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmNvbmNhdChiKTsgfSwgW10pO1xuICAgICAgcmV0dXJuIGZpbGVzLmNvbmNhdChnZXRGaWxlcyhzb3VyY2UpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlKSkge1xuICAgIHJldHVybiBnZXRGaWxlc1JlY3Vyc2l2ZWx5KHNvdXJjZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVBpQ3B1aW5mbyhsaW5lcykge1xuXG4gIGlmIChfcnBpX2NwdWluZm8gPT09IG51bGwpIHtcbiAgICBfcnBpX2NwdWluZm8gPSBsaW5lcztcbiAgfVxuXG4gIC8vIGh0dHBzOi8vd3d3LnJhc3BiZXJyeXBpLm9yZy9kb2N1bWVudGF0aW9uL2hhcmR3YXJlL3Jhc3BiZXJyeXBpL3JldmlzaW9uLWNvZGVzL1JFQURNRS5tZFxuXG4gIGNvbnN0IG9sZFJldmlzaW9uQ29kZXMgPSB7XG4gICAgJzAwMDInOiB7XG4gICAgICB0eXBlOiAnQicsXG4gICAgICByZXZpc2lvbjogJzEuMCcsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ0Vnb21hbicsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMDMnOiB7XG4gICAgICB0eXBlOiAnQicsXG4gICAgICByZXZpc2lvbjogJzEuMCcsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ0Vnb21hbicsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMDQnOiB7XG4gICAgICB0eXBlOiAnQicsXG4gICAgICByZXZpc2lvbjogJzIuMCcsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ1NvbnkgVUsnLFxuICAgICAgcHJvY2Vzc29yOiAnQkNNMjgzNSdcbiAgICB9LFxuICAgICcwMDA1Jzoge1xuICAgICAgdHlwZTogJ0InLFxuICAgICAgcmV2aXNpb246ICcyLjAnLFxuICAgICAgbWVtb3J5OiAyNTYsXG4gICAgICBtYW51ZmFjdHVyZXI6ICdRaXNkYScsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMDYnOiB7XG4gICAgICB0eXBlOiAnQicsXG4gICAgICByZXZpc2lvbjogJzIuMCcsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ0Vnb21hbicsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMDcnOiB7XG4gICAgICB0eXBlOiAnQScsXG4gICAgICByZXZpc2lvbjogJzIuMCcsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ0Vnb21hbicsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMDgnOiB7XG4gICAgICB0eXBlOiAnQScsXG4gICAgICByZXZpc2lvbjogJzIuMCcsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ1NvbnkgVUsnLFxuICAgICAgcHJvY2Vzc29yOiAnQkNNMjgzNSdcbiAgICB9LFxuICAgICcwMDA5Jzoge1xuICAgICAgdHlwZTogJ0EnLFxuICAgICAgcmV2aXNpb246ICcyLjAnLFxuICAgICAgbWVtb3J5OiAyNTYsXG4gICAgICBtYW51ZmFjdHVyZXI6ICdRaXNkYScsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMGQnOiB7XG4gICAgICB0eXBlOiAnQicsXG4gICAgICByZXZpc2lvbjogJzIuMCcsXG4gICAgICBtZW1vcnk6IDUxMixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ0Vnb21hbicsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMGUnOiB7XG4gICAgICB0eXBlOiAnQicsXG4gICAgICByZXZpc2lvbjogJzIuMCcsXG4gICAgICBtZW1vcnk6IDUxMixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ1NvbnkgVUsnLFxuICAgICAgcHJvY2Vzc29yOiAnQkNNMjgzNSdcbiAgICB9LFxuICAgICcwMDBmJzoge1xuICAgICAgdHlwZTogJ0InLFxuICAgICAgcmV2aXNpb246ICcyLjAnLFxuICAgICAgbWVtb3J5OiA1MTIsXG4gICAgICBtYW51ZmFjdHVyZXI6ICdFZ29tYW4nLFxuICAgICAgcHJvY2Vzc29yOiAnQkNNMjgzNSdcbiAgICB9LFxuICAgICcwMDEwJzoge1xuICAgICAgdHlwZTogJ0IrJyxcbiAgICAgIHJldmlzaW9uOiAnMS4yJyxcbiAgICAgIG1lbW9yeTogNTEyLFxuICAgICAgbWFudWZhY3R1cmVyOiAnU29ueSBVSycsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMTEnOiB7XG4gICAgICB0eXBlOiAnQ00xJyxcbiAgICAgIHJldmlzaW9uOiAnMS4wJyxcbiAgICAgIG1lbW9yeTogNTEyLFxuICAgICAgbWFudWZhY3R1cmVyOiAnU29ueSBVSycsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMTInOiB7XG4gICAgICB0eXBlOiAnQSsnLFxuICAgICAgcmV2aXNpb246ICcxLjEnLFxuICAgICAgbWVtb3J5OiAyNTYsXG4gICAgICBtYW51ZmFjdHVyZXI6ICdTb255IFVLJyxcbiAgICAgIHByb2Nlc3NvcjogJ0JDTTI4MzUnXG4gICAgfSxcbiAgICAnMDAxMyc6IHtcbiAgICAgIHR5cGU6ICdCKycsXG4gICAgICByZXZpc2lvbjogJzEuMicsXG4gICAgICBtZW1vcnk6IDUxMixcbiAgICAgIG1hbnVmYWN0dXJlcjogJ0VtYmVzdCcsXG4gICAgICBwcm9jZXNzb3I6ICdCQ00yODM1J1xuICAgIH0sXG4gICAgJzAwMTQnOiB7XG4gICAgICB0eXBlOiAnQ00xJyxcbiAgICAgIHJldmlzaW9uOiAnMS4wJyxcbiAgICAgIG1lbW9yeTogNTEyLFxuICAgICAgbWFudWZhY3R1cmVyOiAnRW1iZXN0JyxcbiAgICAgIHByb2Nlc3NvcjogJ0JDTTI4MzUnXG4gICAgfSxcbiAgICAnMDAxNSc6IHtcbiAgICAgIHR5cGU6ICdBKycsXG4gICAgICByZXZpc2lvbjogJzEuMScsXG4gICAgICBtZW1vcnk6IDI1NixcbiAgICAgIG1hbnVmYWN0dXJlcjogJzUxMk1CXHRFbWJlc3QnLFxuICAgICAgcHJvY2Vzc29yOiAnQkNNMjgzNSdcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcHJvY2Vzc29yTGlzdCA9IFtcbiAgICAnQkNNMjgzNScsXG4gICAgJ0JDTTI4MzYnLFxuICAgICdCQ00yODM3JyxcbiAgICAnQkNNMjcxMScsXG4gICAgJ0JDTTI3MTInLFxuICBdO1xuICBjb25zdCBtYW51ZmFjdHVyZXJMaXN0ID0gW1xuICAgICdTb255IFVLJyxcbiAgICAnRWdvbWFuJyxcbiAgICAnRW1iZXN0JyxcbiAgICAnU29ueSBKYXBhbicsXG4gICAgJ0VtYmVzdCcsXG4gICAgJ1N0YWRpdW0nXG4gIF07XG4gIGNvbnN0IHR5cGVMaXN0ID0ge1xuICAgICcwMCc6ICdBJyxcbiAgICAnMDEnOiAnQicsXG4gICAgJzAyJzogJ0ErJyxcbiAgICAnMDMnOiAnQisnLFxuICAgICcwNCc6ICcyQicsXG4gICAgJzA1JzogJ0FscGhhIChlYXJseSBwcm90b3R5cGUpJyxcbiAgICAnMDYnOiAnQ00xJyxcbiAgICAnMDgnOiAnM0InLFxuICAgICcwOSc6ICdaZXJvJyxcbiAgICAnMGEnOiAnQ00zJyxcbiAgICAnMGMnOiAnWmVybyBXJyxcbiAgICAnMGQnOiAnM0IrJyxcbiAgICAnMGUnOiAnM0ErJyxcbiAgICAnMGYnOiAnSW50ZXJuYWwgdXNlIG9ubHknLFxuICAgICcxMCc6ICdDTTMrJyxcbiAgICAnMTEnOiAnNEInLFxuICAgICcxMic6ICdaZXJvIDIgVycsXG4gICAgJzEzJzogJzQwMCcsXG4gICAgJzE0JzogJ0NNNCcsXG4gICAgJzE1JzogJ0NNNFMnLFxuICAgICcxNic6ICdJbnRlcm5hbCB1c2Ugb25seScsXG4gICAgJzE3JzogJzUnLFxuICAgICcxOCc6ICdDTTUnLFxuICAgICcxOSc6ICc1MDAnLFxuICAgICcxYSc6ICdDTTUgTGl0ZScsXG4gIH07XG5cbiAgY29uc3QgcmV2aXNpb25Db2RlID0gZ2V0VmFsdWUobGluZXMsICdyZXZpc2lvbicsICc6JywgdHJ1ZSk7XG4gIGNvbnN0IG1vZGVsID0gZ2V0VmFsdWUobGluZXMsICdtb2RlbDonLCAnOicsIHRydWUpO1xuICBjb25zdCBzZXJpYWwgPSBnZXRWYWx1ZShsaW5lcywgJ3NlcmlhbCcsICc6JywgdHJ1ZSk7XG5cbiAgbGV0IHJlc3VsdCA9IHt9O1xuICBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChvbGRSZXZpc2lvbkNvZGVzLCByZXZpc2lvbkNvZGUpKSB7XG4gICAgLy8gb2xkIHJldmlzaW9uIGNvZGVzXG4gICAgcmVzdWx0ID0ge1xuICAgICAgbW9kZWwsXG4gICAgICBzZXJpYWwsXG4gICAgICByZXZpc2lvbkNvZGUsXG4gICAgICBtZW1vcnk6IG9sZFJldmlzaW9uQ29kZXNbcmV2aXNpb25Db2RlXS5tZW1vcnksXG4gICAgICBtYW51ZmFjdHVyZXI6IG9sZFJldmlzaW9uQ29kZXNbcmV2aXNpb25Db2RlXS5tYW51ZmFjdHVyZXIsXG4gICAgICBwcm9jZXNzb3I6IG9sZFJldmlzaW9uQ29kZXNbcmV2aXNpb25Db2RlXS5wcm9jZXNzb3IsXG4gICAgICB0eXBlOiBvbGRSZXZpc2lvbkNvZGVzW3JldmlzaW9uQ29kZV0udHlwZSxcbiAgICAgIHJldmlzaW9uOiBvbGRSZXZpc2lvbkNvZGVzW3JldmlzaW9uQ29kZV0ucmV2aXNpb24sXG4gICAgfTtcblxuICB9IGVsc2Uge1xuICAgIC8vIG5ldyByZXZpc2lvbiBjb2RlXG4gICAgY29uc3QgcmV2aXNpb24gPSAoJzAwMDAwMDAwJyArIGdldFZhbHVlKGxpbmVzLCAncmV2aXNpb24nLCAnOicsIHRydWUpLnRvTG93ZXJDYXNlKCkpLnN1YnN0cigtOCk7XG4gICAgY29uc3QgbWVtU2l6ZUNvZGUgPSBwYXJzZUludChoZXgyYmluKHJldmlzaW9uLnN1YnN0cigyLCAxKSkuc3Vic3RyKDUsIDMpLCAyKSB8fCAwO1xuICAgIGNvbnN0IG1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlckxpc3RbcGFyc2VJbnQocmV2aXNpb24uc3Vic3RyKDMsIDEpLCAxMCldO1xuICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3Nvckxpc3RbcGFyc2VJbnQocmV2aXNpb24uc3Vic3RyKDQsIDEpLCAxMCldO1xuICAgIGNvbnN0IHR5cGVDb2RlID0gcmV2aXNpb24uc3Vic3RyKDUsIDIpO1xuXG5cbiAgICByZXN1bHQgPSB7XG4gICAgICBtb2RlbCxcbiAgICAgIHNlcmlhbCxcbiAgICAgIHJldmlzaW9uQ29kZSxcbiAgICAgIG1lbW9yeTogMjU2ICogTWF0aC5wb3coMiwgbWVtU2l6ZUNvZGUpLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgcHJvY2Vzc29yLFxuICAgICAgdHlwZToge30uaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlTGlzdCwgdHlwZUNvZGUpID8gdHlwZUxpc3RbdHlwZUNvZGVdIDogJycsXG4gICAgICByZXZpc2lvbjogJzEuJyArIHJldmlzaW9uLnN1YnN0cig3LCAxKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFJwaUdwdSgpIHtcbiAgbGV0IGNwdWluZm8gPSBudWxsO1xuICBpZiAoX3JwaV9jcHVpbmZvICE9PSBudWxsKSB7XG4gICAgY3B1aW5mbyA9IF9ycGlfY3B1aW5mbztcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgY3B1aW5mbyA9IGZzLnJlYWRGaWxlU3luYygnL3Byb2MvY3B1aW5mbycsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KS50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICAgIF9ycGlfY3B1aW5mbyA9IGNwdWluZm87XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJwaSA9IGRlY29kZVBpQ3B1aW5mbyhjcHVpbmZvKTtcbiAgaWYgKHJwaS50eXBlID09PSAnNEInIHx8IHJwaS50eXBlID09PSAnQ000JyB8fCBycGkudHlwZSA9PT0gJ0NNNFMnIHx8IHJwaS50eXBlID09PSAnNDAwJykgeyByZXR1cm4gJ1ZpZGVvQ29yZSBWSSc7IH1cbiAgaWYgKHJwaS50eXBlID09PSAnNScpIHsgcmV0dXJuICdWaWRlb0NvcmUgVklJJzsgfVxuICByZXR1cm4gJ1ZpZGVvQ29yZSBJVic7XG59XG5cbmZ1bmN0aW9uIHByb21pc2VBbGwocHJvbWlzZXMpIHtcbiAgY29uc3QgcmVzb2x2aW5nUHJvbWlzZXMgPSBwcm9taXNlcy5tYXAoZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIGxldCBwYXlsb2FkID0gbmV3IEFycmF5KDIpO1xuICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgcGF5bG9hZFswXSA9IHJlc3VsdDtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBwYXlsb2FkWzFdID0gZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBUaGUgd3JhcHBlZCBQcm9taXNlIHJldHVybnMgYW4gYXJyYXk6IDAgPSByZXN1bHQsIDEgPSBlcnJvciAuLi4gd2UgcmVzb2x2ZSBhbGxcbiAgICAgICAgICByZXNvbHZlKHBheWxvYWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGVycm9ycyA9IFtdO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgLy8gRXhlY3V0ZSBhbGwgd3JhcHBlZCBQcm9taXNlc1xuICByZXR1cm4gUHJvbWlzZS5hbGwocmVzb2x2aW5nUHJvbWlzZXMpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGl0ZW1zKSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gICAgICAgIGlmIChwYXlsb2FkWzFdKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2gocGF5bG9hZFsxXSk7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9ycy5wdXNoKG51bGwpO1xuICAgICAgICAgIHJlc3VsdHMucHVzaChwYXlsb2FkWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICByZXN1bHRzOiByZXN1bHRzXG4gICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwcm9taXNpZnkobm9kZVN0eWxlRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbm9kZVN0eWxlRnVuY3Rpb24uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb21pc2lmeVNhdmUobm9kZVN0eWxlRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIG5vZGVTdHlsZUZ1bmN0aW9uLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBsaW51eFZlcnNpb24oKSB7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgaWYgKF9saW51eCkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBleGVjU3luYygndW5hbWUgLXYnLCB1dGlsLmV4ZWNPcHRzTGludXgpLnRvU3RyaW5nKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVzdWx0ID0gJyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBsaXN0UGFyc2VyKHhtbFN0cikge1xuICBjb25zdCB0YWdzID0gWydhcnJheScsICdkaWN0JywgJ2tleScsICdzdHJpbmcnLCAnaW50ZWdlcicsICdkYXRlJywgJ3JlYWwnLCAnZGF0YScsICdib29sZWFuJywgJ2FycmF5RW1wdHknXTtcbiAgY29uc3Qgc3RhcnRTdHIgPSAnPHBsaXN0IHZlcnNpb24nO1xuXG4gIGxldCBwb3MgPSB4bWxTdHIuaW5kZXhPZihzdGFydFN0cik7XG4gIGxldCBsZW4gPSB4bWxTdHIubGVuZ3RoO1xuICB3aGlsZSAoeG1sU3RyW3Bvc10gIT09ICc+JyAmJiBwb3MgPCBsZW4pIHtcbiAgICBwb3MrKztcbiAgfVxuXG4gIGxldCBkZXB0aCA9IDA7XG4gIGxldCBpblRhZ1N0YXJ0ID0gZmFsc2U7XG4gIGxldCBpblRhZ0NvbnRlbnQgPSBmYWxzZTtcbiAgbGV0IGluVGFnRW5kID0gZmFsc2U7XG4gIGxldCBtZXRhRGF0YSA9IFt7IHRhZ1N0YXJ0OiAnJywgdGFnRW5kOiAnJywgdGFnQ29udGVudDogJycsIGtleTogJycsIGRhdGE6IG51bGwgfV07XG4gIGxldCBjID0gJyc7XG4gIGxldCBjbiA9IHhtbFN0cltwb3NdO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBjID0gY247XG4gICAgaWYgKHBvcyArIDEgPCBsZW4pIHsgY24gPSB4bWxTdHJbcG9zICsgMV07IH1cbiAgICBpZiAoYyA9PT0gJzwnKSB7XG4gICAgICBpblRhZ0NvbnRlbnQgPSBmYWxzZTtcbiAgICAgIGlmIChjbiA9PT0gJy8nKSB7IGluVGFnRW5kID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAobWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0KSB7XG4gICAgICAgIG1ldGFEYXRhW2RlcHRoXS50YWdDb250ZW50ID0gJyc7XG4gICAgICAgIGlmICghbWV0YURhdGFbZGVwdGhdLmRhdGEpIHsgbWV0YURhdGFbZGVwdGhdLmRhdGEgPSBtZXRhRGF0YVtkZXB0aF0udGFnU3RhcnQgPT09ICdhcnJheScgPyBbXSA6IHt9OyB9XG4gICAgICAgIGRlcHRoKys7XG4gICAgICAgIG1ldGFEYXRhLnB1c2goeyB0YWdTdGFydDogJycsIHRhZ0VuZDogJycsIHRhZ0NvbnRlbnQ6ICcnLCBrZXk6IG51bGwsIGRhdGE6IG51bGwgfSk7XG4gICAgICAgIGluVGFnU3RhcnQgPSB0cnVlO1xuICAgICAgICBpblRhZ0NvbnRlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCFpblRhZ1N0YXJ0KSB7IGluVGFnU3RhcnQgPSB0cnVlOyB9XG4gICAgfSBlbHNlIGlmIChjID09PSAnPicpIHtcbiAgICAgIGlmIChtZXRhRGF0YVtkZXB0aF0udGFnU3RhcnQgPT09ICd0cnVlLycpIHsgaW5UYWdTdGFydCA9IGZhbHNlOyBpblRhZ0VuZCA9IHRydWU7IG1ldGFEYXRhW2RlcHRoXS50YWdTdGFydCA9ICcnOyBtZXRhRGF0YVtkZXB0aF0udGFnRW5kID0gJy9ib29sZWFuJzsgbWV0YURhdGFbZGVwdGhdLmRhdGEgPSB0cnVlOyB9XG4gICAgICBpZiAobWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0ID09PSAnZmFsc2UvJykgeyBpblRhZ1N0YXJ0ID0gZmFsc2U7IGluVGFnRW5kID0gdHJ1ZTsgbWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0ID0gJyc7IG1ldGFEYXRhW2RlcHRoXS50YWdFbmQgPSAnL2Jvb2xlYW4nOyBtZXRhRGF0YVtkZXB0aF0uZGF0YSA9IGZhbHNlOyB9XG4gICAgICBpZiAobWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0ID09PSAnYXJyYXkvJykgeyBpblRhZ1N0YXJ0ID0gZmFsc2U7IGluVGFnRW5kID0gdHJ1ZTsgbWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0ID0gJyc7IG1ldGFEYXRhW2RlcHRoXS50YWdFbmQgPSAnL2FycmF5RW1wdHknOyBtZXRhRGF0YVtkZXB0aF0uZGF0YSA9IFtdOyB9XG4gICAgICBpZiAoaW5UYWdDb250ZW50KSB7IGluVGFnQ29udGVudCA9IGZhbHNlOyB9XG4gICAgICBpZiAoaW5UYWdTdGFydCkge1xuICAgICAgICBpblRhZ1N0YXJ0ID0gZmFsc2U7XG4gICAgICAgIGluVGFnQ29udGVudCA9IHRydWU7XG4gICAgICAgIGlmIChtZXRhRGF0YVtkZXB0aF0udGFnU3RhcnQgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBtZXRhRGF0YVtkZXB0aF0uZGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhRGF0YVtkZXB0aF0udGFnU3RhcnQgPT09ICdkaWN0Jykge1xuICAgICAgICAgIG1ldGFEYXRhW2RlcHRoXS5kYXRhID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpblRhZ0VuZCkge1xuICAgICAgICBpblRhZ0VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAobWV0YURhdGFbZGVwdGhdLnRhZ0VuZCAmJiB0YWdzLmluZGV4T2YobWV0YURhdGFbZGVwdGhdLnRhZ0VuZC5zdWJzdHIoMSkpID49IDApIHtcbiAgICAgICAgICBpZiAobWV0YURhdGFbZGVwdGhdLnRhZ0VuZCA9PT0gJy9kaWN0JyB8fCBtZXRhRGF0YVtkZXB0aF0udGFnRW5kID09PSAnL2FycmF5Jykge1xuICAgICAgICAgICAgaWYgKGRlcHRoID4gMSAmJiBtZXRhRGF0YVtkZXB0aCAtIDJdLnRhZ1N0YXJ0ID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgIG1ldGFEYXRhW2RlcHRoIC0gMl0uZGF0YS5wdXNoKG1ldGFEYXRhW2RlcHRoIC0gMV0uZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVwdGggPiAxICYmIG1ldGFEYXRhW2RlcHRoIC0gMl0udGFnU3RhcnQgPT09ICdkaWN0Jykge1xuICAgICAgICAgICAgICBtZXRhRGF0YVtkZXB0aCAtIDJdLmRhdGFbbWV0YURhdGFbZGVwdGggLSAxXS5rZXldID0gbWV0YURhdGFbZGVwdGggLSAxXS5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgICAgIG1ldGFEYXRhLnBvcCgpO1xuICAgICAgICAgICAgbWV0YURhdGFbZGVwdGhdLnRhZ0NvbnRlbnQgPSAnJztcbiAgICAgICAgICAgIG1ldGFEYXRhW2RlcHRoXS50YWdTdGFydCA9ICcnO1xuICAgICAgICAgICAgbWV0YURhdGFbZGVwdGhdLnRhZ0VuZCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChtZXRhRGF0YVtkZXB0aF0udGFnRW5kID09PSAnL2tleScgJiYgbWV0YURhdGFbZGVwdGhdLnRhZ0NvbnRlbnQpIHtcbiAgICAgICAgICAgICAgbWV0YURhdGFbZGVwdGhdLmtleSA9IG1ldGFEYXRhW2RlcHRoXS50YWdDb250ZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKG1ldGFEYXRhW2RlcHRoXS50YWdFbmQgPT09ICcvcmVhbCcgJiYgbWV0YURhdGFbZGVwdGhdLnRhZ0NvbnRlbnQpIHsgbWV0YURhdGFbZGVwdGhdLmRhdGEgPSBwYXJzZUZsb2F0KG1ldGFEYXRhW2RlcHRoXS50YWdDb250ZW50KSB8fCAwOyB9XG4gICAgICAgICAgICAgIGlmIChtZXRhRGF0YVtkZXB0aF0udGFnRW5kID09PSAnL2ludGVnZXInICYmIG1ldGFEYXRhW2RlcHRoXS50YWdDb250ZW50KSB7IG1ldGFEYXRhW2RlcHRoXS5kYXRhID0gcGFyc2VJbnQobWV0YURhdGFbZGVwdGhdLnRhZ0NvbnRlbnQpIHx8IDA7IH1cbiAgICAgICAgICAgICAgaWYgKG1ldGFEYXRhW2RlcHRoXS50YWdFbmQgPT09ICcvc3RyaW5nJyAmJiBtZXRhRGF0YVtkZXB0aF0udGFnQ29udGVudCkgeyBtZXRhRGF0YVtkZXB0aF0uZGF0YSA9IG1ldGFEYXRhW2RlcHRoXS50YWdDb250ZW50IHx8ICcnOyB9XG4gICAgICAgICAgICAgIGlmIChtZXRhRGF0YVtkZXB0aF0udGFnRW5kID09PSAnL2Jvb2xlYW4nKSB7IG1ldGFEYXRhW2RlcHRoXS5kYXRhID0gbWV0YURhdGFbZGVwdGhdLnRhZ0NvbnRlbnQgfHwgZmFsc2U7IH1cbiAgICAgICAgICAgICAgaWYgKG1ldGFEYXRhW2RlcHRoXS50YWdFbmQgPT09ICcvYXJyYXlFbXB0eScpIHsgbWV0YURhdGFbZGVwdGhdLmRhdGEgPSBtZXRhRGF0YVtkZXB0aF0udGFnQ29udGVudCB8fCBbXTsgfVxuICAgICAgICAgICAgICBpZiAoZGVwdGggPiAwICYmIG1ldGFEYXRhW2RlcHRoIC0gMV0udGFnU3RhcnQgPT09ICdhcnJheScpIHsgbWV0YURhdGFbZGVwdGggLSAxXS5kYXRhLnB1c2gobWV0YURhdGFbZGVwdGhdLmRhdGEpOyB9XG4gICAgICAgICAgICAgIGlmIChkZXB0aCA+IDAgJiYgbWV0YURhdGFbZGVwdGggLSAxXS50YWdTdGFydCA9PT0gJ2RpY3QnKSB7IG1ldGFEYXRhW2RlcHRoIC0gMV0uZGF0YVttZXRhRGF0YVtkZXB0aF0ua2V5XSA9IG1ldGFEYXRhW2RlcHRoXS5kYXRhOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXRhRGF0YVtkZXB0aF0udGFnQ29udGVudCA9ICcnO1xuICAgICAgICAgICAgbWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0ID0gJyc7XG4gICAgICAgICAgICBtZXRhRGF0YVtkZXB0aF0udGFnRW5kID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1ldGFEYXRhW2RlcHRoXS50YWdFbmQgPSAnJztcbiAgICAgICAgaW5UYWdTdGFydCA9IGZhbHNlO1xuICAgICAgICBpblRhZ0NvbnRlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluVGFnU3RhcnQpIHsgbWV0YURhdGFbZGVwdGhdLnRhZ1N0YXJ0ICs9IGM7IH1cbiAgICAgIGlmIChpblRhZ0VuZCkgeyBtZXRhRGF0YVtkZXB0aF0udGFnRW5kICs9IGM7IH1cbiAgICAgIGlmIChpblRhZ0NvbnRlbnQpIHsgbWV0YURhdGFbZGVwdGhdLnRhZ0NvbnRlbnQgKz0gYzsgfVxuICAgIH1cbiAgICBwb3MrKztcbiAgfVxuICByZXR1cm4gbWV0YURhdGFbMF0uZGF0YTtcbn1cblxuZnVuY3Rpb24gc3RySXNOdW1lcmljKHN0cikge1xuICByZXR1cm4gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKHN0cikgJiYgIWlzTmFOKHBhcnNlRmxvYXQoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHBsaXN0UmVhZGVyKG91dHB1dCkge1xuICBjb25zdCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXFxuJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobGluZXNbaV0uaW5kZXhPZignID0gJykgPj0gMCkge1xuICAgICAgY29uc3QgbGluZVBhcnRzID0gbGluZXNbaV0uc3BsaXQoJyA9ICcpO1xuICAgICAgbGluZVBhcnRzWzBdID0gbGluZVBhcnRzWzBdLnRyaW0oKTtcbiAgICAgIGlmICghbGluZVBhcnRzWzBdLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgICAgbGluZVBhcnRzWzBdID0gJ1wiJyArIGxpbmVQYXJ0c1swXSArICdcIic7XG4gICAgICB9XG4gICAgICBsaW5lUGFydHNbMV0gPSBsaW5lUGFydHNbMV0udHJpbSgpO1xuICAgICAgaWYgKGxpbmVQYXJ0c1sxXS5pbmRleE9mKCdcIicpID09PSAtMSAmJiBsaW5lUGFydHNbMV0uZW5kc1dpdGgoJzsnKSkge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGxpbmVQYXJ0c1sxXS5zdWJzdHJpbmcoMCwgbGluZVBhcnRzWzFdLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoIXN0cklzTnVtZXJpYyh2YWx1ZVN0cmluZykpIHtcbiAgICAgICAgICBsaW5lUGFydHNbMV0gPSBgXCIke3ZhbHVlU3RyaW5nfVwiO2A7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsaW5lUGFydHNbMV0uaW5kZXhPZignXCInKSA+PSAwICYmIGxpbmVQYXJ0c1sxXS5lbmRzV2l0aCgnOycpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gbGluZVBhcnRzWzFdLnN1YnN0cmluZygwLCBsaW5lUGFydHNbMV0ubGVuZ3RoIC0gMSkucmVwbGFjZSgvXCIvZywgJycpO1xuICAgICAgICBpZiAoc3RySXNOdW1lcmljKHZhbHVlU3RyaW5nKSkge1xuICAgICAgICAgIGxpbmVQYXJ0c1sxXSA9IGAke3ZhbHVlU3RyaW5nfTtgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaW5lc1tpXSA9IGxpbmVQYXJ0cy5qb2luKCcgOiAnKTtcbiAgICB9XG4gICAgbGluZXNbaV0gPSBsaW5lc1tpXS5yZXBsYWNlKC9cXCgvZywgJ1snKS5yZXBsYWNlKC9cXCkvZywgJ10nKS5yZXBsYWNlKC87L2csICcsJykudHJpbSgpO1xuICAgIGlmIChsaW5lc1tpXS5zdGFydHNXaXRoKCd9JykgJiYgbGluZXNbaSAtIDFdICYmIGxpbmVzW2kgLSAxXS5lbmRzV2l0aCgnLCcpKSB7XG4gICAgICBsaW5lc1tpIC0gMV0gPSBsaW5lc1tpIC0gMV0uc3Vic3RyaW5nKDAsIGxpbmVzW2kgLSAxXS5sZW5ndGggLSAxKTtcbiAgICB9XG4gIH1cbiAgb3V0cHV0ID0gbGluZXMuam9pbignJyk7XG4gIGxldCBvYmogPSB7fTtcbiAgdHJ5IHtcbiAgICBvYmogPSBKU09OLnBhcnNlKG91dHB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBub29wKCk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gc2VtdmVyQ29tcGFyZSh2MSwgdjIpIHtcbiAgbGV0IHJlcyA9IDA7XG4gIGNvbnN0IHBhcnRzMSA9IHYxLnNwbGl0KCcuJyk7XG4gIGNvbnN0IHBhcnRzMiA9IHYyLnNwbGl0KCcuJyk7XG4gIGlmIChwYXJ0czFbMF0gPCBwYXJ0czJbMF0pIHsgcmVzID0gMTsgfVxuICBlbHNlIGlmIChwYXJ0czFbMF0gPiBwYXJ0czJbMF0pIHsgcmVzID0gLTE7IH1cbiAgZWxzZSBpZiAocGFydHMxWzBdID09PSBwYXJ0czJbMF0gJiYgcGFydHMxLmxlbmd0aCA+PSAyICYmIHBhcnRzMi5sZW5ndGggPj0gMikge1xuICAgIGlmIChwYXJ0czFbMV0gPCBwYXJ0czJbMV0pIHsgcmVzID0gMTsgfVxuICAgIGVsc2UgaWYgKHBhcnRzMVsxXSA+IHBhcnRzMlsxXSkgeyByZXMgPSAtMTsgfVxuICAgIGVsc2UgaWYgKHBhcnRzMVsxXSA9PT0gcGFydHMyWzFdKSB7XG4gICAgICBpZiAocGFydHMxLmxlbmd0aCA+PSAzICYmIHBhcnRzMi5sZW5ndGggPj0gMykge1xuICAgICAgICBpZiAocGFydHMxWzJdIDwgcGFydHMyWzJdKSB7IHJlcyA9IDE7IH1cbiAgICAgICAgZWxzZSBpZiAocGFydHMxWzJdID4gcGFydHMyWzJdKSB7IHJlcyA9IC0xOyB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnRzMi5sZW5ndGggPj0gMykge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmV4cG9ydHMudG9JbnQgPSB0b0ludDtcbmV4cG9ydHMuc3BsaXRCeU51bWJlciA9IHNwbGl0QnlOdW1iZXI7XG5leHBvcnRzLmV4ZWNPcHRzV2luID0gZXhlY09wdHNXaW47XG5leHBvcnRzLmV4ZWNPcHRzTGludXggPSBleGVjT3B0c0xpbnV4O1xuZXhwb3J0cy5nZXRDb2RlcGFnZSA9IGdldENvZGVwYWdlO1xuZXhwb3J0cy5leGVjV2luID0gZXhlY1dpbjtcbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5leHBvcnRzLnVuaXF1ZSA9IHVuaXF1ZTtcbmV4cG9ydHMuc29ydEJ5S2V5ID0gc29ydEJ5S2V5O1xuZXhwb3J0cy5jb3JlcyA9IGNvcmVzO1xuZXhwb3J0cy5nZXRWYWx1ZSA9IGdldFZhbHVlO1xuZXhwb3J0cy5kZWNvZGVFc2NhcGVTZXF1ZW5jZSA9IGRlY29kZUVzY2FwZVNlcXVlbmNlO1xuZXhwb3J0cy5wYXJzZURhdGVUaW1lID0gcGFyc2VEYXRlVGltZTtcbmV4cG9ydHMucGFyc2VIZWFkID0gcGFyc2VIZWFkO1xuZXhwb3J0cy5maW5kT2JqZWN0QnlLZXkgPSBmaW5kT2JqZWN0QnlLZXk7XG5leHBvcnRzLmdldFdtaWMgPSBnZXRXbWljO1xuZXhwb3J0cy53bWljID0gd21pYztcbmV4cG9ydHMuZGFyd2luWGNvZGVFeGlzdHMgPSBkYXJ3aW5YY29kZUV4aXN0cztcbmV4cG9ydHMuZ2V0VmJveG1hbmFnZSA9IGdldFZib3htYW5hZ2U7XG5leHBvcnRzLnBvd2VyU2hlbGwgPSBwb3dlclNoZWxsO1xuZXhwb3J0cy5wb3dlclNoZWxsU3RhcnQgPSBwb3dlclNoZWxsU3RhcnQ7XG5leHBvcnRzLnBvd2VyU2hlbGxSZWxlYXNlID0gcG93ZXJTaGVsbFJlbGVhc2U7XG5leHBvcnRzLmV4ZWNTYWZlID0gZXhlY1NhZmU7XG5leHBvcnRzLm5hbm9TZWNvbmRzID0gbmFub1NlY29uZHM7XG5leHBvcnRzLmNvdW50VW5pcXVlTGluZXMgPSBjb3VudFVuaXF1ZUxpbmVzO1xuZXhwb3J0cy5jb3VudExpbmVzID0gY291bnRMaW5lcztcbmV4cG9ydHMubm9vcCA9IG5vb3A7XG5leHBvcnRzLmlzUmFzcGJlcnJ5ID0gaXNSYXNwYmVycnk7XG5leHBvcnRzLmlzUmFzcGJpYW4gPSBpc1Jhc3BiaWFuO1xuZXhwb3J0cy5zYW5pdGl6ZVNoZWxsU3RyaW5nID0gc2FuaXRpemVTaGVsbFN0cmluZztcbmV4cG9ydHMuaXNQcm90b3R5cGVQb2xsdXRlZCA9IGlzUHJvdG90eXBlUG9sbHV0ZWQ7XG5leHBvcnRzLmRlY29kZVBpQ3B1aW5mbyA9IGRlY29kZVBpQ3B1aW5mbztcbmV4cG9ydHMuZ2V0UnBpR3B1ID0gZ2V0UnBpR3B1O1xuZXhwb3J0cy5wcm9taXNlQWxsID0gcHJvbWlzZUFsbDtcbmV4cG9ydHMucHJvbWlzaWZ5ID0gcHJvbWlzaWZ5O1xuZXhwb3J0cy5wcm9taXNpZnlTYXZlID0gcHJvbWlzaWZ5U2F2ZTtcbmV4cG9ydHMuc21hcnRNb25Ub29sc0luc3RhbGxlZCA9IHNtYXJ0TW9uVG9vbHNJbnN0YWxsZWQ7XG5leHBvcnRzLmxpbnV4VmVyc2lvbiA9IGxpbnV4VmVyc2lvbjtcbmV4cG9ydHMucGxpc3RQYXJzZXIgPSBwbGlzdFBhcnNlcjtcbmV4cG9ydHMucGxpc3RSZWFkZXIgPSBwbGlzdFJlYWRlcjtcbmV4cG9ydHMuc3RyaW5nUmVwbGFjZSA9IHN0cmluZ1JlcGxhY2U7XG5leHBvcnRzLnN0cmluZ1RvTG93ZXIgPSBzdHJpbmdUb0xvd2VyO1xuZXhwb3J0cy5zdHJpbmdUb1N0cmluZyA9IHN0cmluZ1RvU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdTdWJzdHIgPSBzdHJpbmdTdWJzdHI7XG5leHBvcnRzLnN0cmluZ1RyaW0gPSBzdHJpbmdUcmltO1xuZXhwb3J0cy5zdHJpbmdTdGFydFdpdGggPSBzdHJpbmdTdGFydFdpdGg7XG5leHBvcnRzLm1hdGhNaW4gPSBtYXRoTWluO1xuZXhwb3J0cy5XSU5ESVIgPSBXSU5ESVI7XG5leHBvcnRzLmdldEZpbGVzSW5QYXRoID0gZ2V0RmlsZXNJblBhdGg7XG5leHBvcnRzLnNlbXZlckNvbXBhcmUgPSBzZW12ZXJDb21wYXJlO1xuIiwKICAgICIndXNlIHN0cmljdCc7XG4vLyBAdHMtY2hlY2tcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIG5ldHdvcmsuanNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlc2NyaXB0aW9uOiAgIFN5c3RlbSBJbmZvcm1hdGlvbiAtIGxpYnJhcnlcbi8vICAgICAgICAgICAgICAgIGZvciBOb2RlLmpzXG4vLyBDb3B5cmlnaHQ6ICAgICAoYykgMjAxNCAtIDIwMjRcbi8vIEF1dGhvcjogICAgICAgIFNlYmFzdGlhbiBIaWxkZWJyYW5kdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTGljZW5zZTogICAgICAgTUlUXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyA5LiBOZXR3b3JrXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGV4ZWMgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlYztcbmNvbnN0IGV4ZWNTeW5jID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5sZXQgX3BsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybTtcblxuY29uc3QgX2xpbnV4ID0gKF9wbGF0Zm9ybSA9PT0gJ2xpbnV4JyB8fCBfcGxhdGZvcm0gPT09ICdhbmRyb2lkJyk7XG5jb25zdCBfZGFyd2luID0gKF9wbGF0Zm9ybSA9PT0gJ2RhcndpbicpO1xuY29uc3QgX3dpbmRvd3MgPSAoX3BsYXRmb3JtID09PSAnd2luMzInKTtcbmNvbnN0IF9mcmVlYnNkID0gKF9wbGF0Zm9ybSA9PT0gJ2ZyZWVic2QnKTtcbmNvbnN0IF9vcGVuYnNkID0gKF9wbGF0Zm9ybSA9PT0gJ29wZW5ic2QnKTtcbmNvbnN0IF9uZXRic2QgPSAoX3BsYXRmb3JtID09PSAnbmV0YnNkJyk7XG5jb25zdCBfc3Vub3MgPSAoX3BsYXRmb3JtID09PSAnc3Vub3MnKTtcblxubGV0IF9uZXR3b3JrID0ge307XG5sZXQgX2RlZmF1bHRfaWZhY2UgPSAnJztcbmxldCBfaWZhY2VzID0ge307XG5sZXQgX2RoY3BOaWNzID0gW107XG5sZXQgX25ldHdvcmtJbnRlcmZhY2VzID0gW107XG5sZXQgX21hYyA9IHt9O1xubGV0IHBhdGhUb0lwO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0TmV0d29ya0ludGVyZmFjZSgpIHtcblxuICBsZXQgaWZhY2VuYW1lID0gJyc7XG4gIGxldCBpZmFjZW5hbWVGaXJzdCA9ICcnO1xuICB0cnkge1xuICAgIGxldCBpZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpO1xuXG4gICAgbGV0IHNjb3BlaWQgPSA5OTk5O1xuXG4gICAgLy8gZmFsbGJhY2sgLSBcImZpcnN0XCIgZXh0ZXJuYWwgaW50ZXJmYWNlIChzb3J0ZWQgYnkgc2NvcGVpZClcbiAgICBmb3IgKGxldCBkZXYgaW4gaWZhY2VzKSB7XG4gICAgICBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChpZmFjZXMsIGRldikpIHtcbiAgICAgICAgaWZhY2VzW2Rldl0uZm9yRWFjaChmdW5jdGlvbiAoZGV0YWlscykge1xuICAgICAgICAgIGlmIChkZXRhaWxzICYmIGRldGFpbHMuaW50ZXJuYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZmFjZW5hbWVGaXJzdCA9IGlmYWNlbmFtZUZpcnN0IHx8IGRldjsgLy8gZmFsbGJhY2sgaWYgbm8gc2NvcGVpZFxuICAgICAgICAgICAgaWYgKGRldGFpbHMuc2NvcGVpZCAmJiBkZXRhaWxzLnNjb3BlaWQgPCBzY29wZWlkKSB7XG4gICAgICAgICAgICAgIGlmYWNlbmFtZSA9IGRldjtcbiAgICAgICAgICAgICAgc2NvcGVpZCA9IGRldGFpbHMuc2NvcGVpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZmFjZW5hbWUgPSBpZmFjZW5hbWUgfHwgaWZhY2VuYW1lRmlyc3QgfHwgJyc7XG5cbiAgICBpZiAoX3dpbmRvd3MpIHtcbiAgICAgIC8vIGh0dHBzOi8vd3d3LmluZXRkYWVtb24uY29tL3R1dG9yaWFscy9pbnRlcm5ldC9pcC9yb3V0aW5nL2RlZmF1bHRfcm91dGUuc2h0bWxcbiAgICAgIGxldCBkZWZhdWx0SXAgPSAnJztcbiAgICAgIGNvbnN0IGNtZCA9ICduZXRzdGF0IC1yJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNTeW5jKGNtZCwgdXRpbC5leGVjT3B0c1dpbik7XG4gICAgICBjb25zdCBsaW5lcyA9IHJlc3VsdC50b1N0cmluZygpLnNwbGl0KG9zLkVPTCk7XG4gICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuICAgICAgICBpZiAobGluZS5pbmRleE9mKCcwLjAuMC4wIDAuMC4wLjAnKSA+IC0xICYmICEoL1thLXpBLVpdLy50ZXN0KGxpbmUpKSkge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgZGVmYXVsdElwID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChkZWZhdWx0SXApIHtcbiAgICAgICAgZm9yIChsZXQgZGV2IGluIGlmYWNlcykge1xuICAgICAgICAgIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlmYWNlcywgZGV2KSkge1xuICAgICAgICAgICAgaWZhY2VzW2Rldl0uZm9yRWFjaChmdW5jdGlvbiAoZGV0YWlscykge1xuICAgICAgICAgICAgICBpZiAoZGV0YWlscyAmJiBkZXRhaWxzLmFkZHJlc3MgJiYgZGV0YWlscy5hZGRyZXNzID09PSBkZWZhdWx0SXApIHtcbiAgICAgICAgICAgICAgICBpZmFjZW5hbWUgPSBkZXY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoX2xpbnV4KSB7XG4gICAgICBsZXQgY21kID0gJ2lwIHJvdXRlIDI+IC9kZXYvbnVsbCB8IGdyZXAgZGVmYXVsdCc7XG4gICAgICBsZXQgcmVzdWx0ID0gZXhlY1N5bmMoY21kLCB1dGlsLmV4ZWNPcHRzTGludXgpO1xuICAgICAgbGV0IHBhcnRzID0gcmVzdWx0LnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpWzBdLnNwbGl0KC9cXHMrLyk7XG4gICAgICBpZiAocGFydHNbMF0gPT09ICdub25lJyAmJiBwYXJ0c1s1XSkge1xuICAgICAgICBpZmFjZW5hbWUgPSBwYXJ0c1s1XTtcbiAgICAgIH0gZWxzZSBpZiAocGFydHNbNF0pIHtcbiAgICAgICAgaWZhY2VuYW1lID0gcGFydHNbNF07XG4gICAgICB9XG5cbiAgICAgIGlmIChpZmFjZW5hbWUuaW5kZXhPZignOicpID4gLTEpIHtcbiAgICAgICAgaWZhY2VuYW1lID0gaWZhY2VuYW1lLnNwbGl0KCc6JylbMV0udHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoX2RhcndpbiB8fCBfZnJlZWJzZCB8fCBfb3BlbmJzZCB8fCBfbmV0YnNkIHx8IF9zdW5vcykge1xuICAgICAgbGV0IGNtZCA9ICcnO1xuICAgICAgaWYgKF9saW51eCkgeyBjbWQgPSAnaXAgcm91dGUgMj4gL2Rldi9udWxsIHwgZ3JlcCBkZWZhdWx0IHwgYXdrIFxcJ3twcmludCAkNX1cXCcnOyB9XG4gICAgICBpZiAoX2RhcndpbikgeyBjbWQgPSAncm91dGUgLW4gZ2V0IGRlZmF1bHQgMj4vZGV2L251bGwgfCBncmVwIGludGVyZmFjZTogfCBhd2sgXFwne3ByaW50ICQyfVxcJyc7IH1cbiAgICAgIGlmIChfZnJlZWJzZCB8fCBfb3BlbmJzZCB8fCBfbmV0YnNkIHx8IF9zdW5vcykgeyBjbWQgPSAncm91dGUgZ2V0IDAuMC4wLjAgfCBncmVwIGludGVyZmFjZTonOyB9XG4gICAgICBsZXQgcmVzdWx0ID0gZXhlY1N5bmMoY21kKTtcbiAgICAgIGlmYWNlbmFtZSA9IHJlc3VsdC50b1N0cmluZygpLnNwbGl0KCdcXG4nKVswXTtcbiAgICAgIGlmIChpZmFjZW5hbWUuaW5kZXhPZignOicpID4gLTEpIHtcbiAgICAgICAgaWZhY2VuYW1lID0gaWZhY2VuYW1lLnNwbGl0KCc6JylbMV0udHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHV0aWwubm9vcCgpO1xuICB9XG4gIGlmIChpZmFjZW5hbWUpIHsgX2RlZmF1bHRfaWZhY2UgPSBpZmFjZW5hbWU7IH1cbiAgcmV0dXJuIF9kZWZhdWx0X2lmYWNlO1xufVxuXG5leHBvcnRzLmdldERlZmF1bHROZXR3b3JrSW50ZXJmYWNlID0gZ2V0RGVmYXVsdE5ldHdvcmtJbnRlcmZhY2U7XG5cbmZ1bmN0aW9uIGdldE1hY0FkZHJlc3NlcygpIHtcbiAgbGV0IGlmYWNlID0gJyc7XG4gIGxldCBtYWMgPSAnJztcbiAgbGV0IHJlc3VsdCA9IHt9O1xuICBpZiAoX2xpbnV4IHx8IF9mcmVlYnNkIHx8IF9vcGVuYnNkIHx8IF9uZXRic2QpIHtcbiAgICBpZiAodHlwZW9mIHBhdGhUb0lwID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBleGVjU3luYygnd2hpY2ggaXAnLCB1dGlsLmV4ZWNPcHRzTGludXgpLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoICYmIGxpbmVzWzBdLmluZGV4T2YoJzonKSA9PT0gLTEgJiYgbGluZXNbMF0uaW5kZXhPZignLycpID09PSAwKSB7XG4gICAgICAgICAgcGF0aFRvSXAgPSBsaW5lc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXRoVG9JcCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhdGhUb0lwID0gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbWQgPSAnZXhwb3J0IExDX0FMTD1DOyAnICsgKChwYXRoVG9JcCkgPyBwYXRoVG9JcCArICcgbGluayBzaG93IHVwJyA6ICcvc2Jpbi9pZmNvbmZpZycpICsgJzsgdW5zZXQgTENfQUxMJztcbiAgICAgIGxldCByZXMgPSBleGVjU3luYyhjbWQsIHV0aWwuZXhlY09wdHNMaW51eCk7XG4gICAgICBjb25zdCBsaW5lcyA9IHJlcy50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxpbmVzW2ldICYmIGxpbmVzW2ldWzBdICE9PSAnICcpIHtcbiAgICAgICAgICBpZiAocGF0aFRvSXApIHtcbiAgICAgICAgICAgIGxldCBuZXh0bGluZSA9IGxpbmVzW2kgKyAxXS50cmltKCkuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGlmIChuZXh0bGluZVswXSA9PT0gJ2xpbmsvZXRoZXInKSB7XG4gICAgICAgICAgICAgIGlmYWNlID0gbGluZXNbaV0uc3BsaXQoJyAnKVsxXTtcbiAgICAgICAgICAgICAgaWZhY2UgPSBpZmFjZS5zbGljZSgwLCBpZmFjZS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgbWFjID0gbmV4dGxpbmVbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmYWNlID0gbGluZXNbaV0uc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICAgIG1hYyA9IGxpbmVzW2ldLnNwbGl0KCdIV2FkZHIgJylbMV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlmYWNlICYmIG1hYykge1xuICAgICAgICAgICAgcmVzdWx0W2lmYWNlXSA9IG1hYy50cmltKCk7XG4gICAgICAgICAgICBpZmFjZSA9ICcnO1xuICAgICAgICAgICAgbWFjID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdXRpbC5ub29wKCk7XG4gICAgfVxuICB9XG4gIGlmIChfZGFyd2luKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNtZCA9ICcvc2Jpbi9pZmNvbmZpZyc7XG4gICAgICBsZXQgcmVzID0gZXhlY1N5bmMoY21kKTtcbiAgICAgIGNvbnN0IGxpbmVzID0gcmVzLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobGluZXNbaV0gJiYgbGluZXNbaV1bMF0gIT09ICdcXHQnICYmIGxpbmVzW2ldLmluZGV4T2YoJzonKSA+IDApIHtcbiAgICAgICAgICBpZmFjZSA9IGxpbmVzW2ldLnNwbGl0KCc6JylbMF07XG4gICAgICAgIH0gZWxzZSBpZiAobGluZXNbaV0uaW5kZXhPZignXFx0ZXRoZXIgJykgPT09IDApIHtcbiAgICAgICAgICBtYWMgPSBsaW5lc1tpXS5zcGxpdCgnXFx0ZXRoZXIgJylbMV07XG4gICAgICAgICAgaWYgKGlmYWNlICYmIG1hYykge1xuICAgICAgICAgICAgcmVzdWx0W2lmYWNlXSA9IG1hYy50cmltKCk7XG4gICAgICAgICAgICBpZmFjZSA9ICcnO1xuICAgICAgICAgICAgbWFjID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdXRpbC5ub29wKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG5ldHdvcmtJbnRlcmZhY2VEZWZhdWx0KGNhbGxiYWNrKSB7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gZ2V0RGVmYXVsdE5ldHdvcmtJbnRlcmZhY2UoKTtcbiAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnRzLm5ldHdvcmtJbnRlcmZhY2VEZWZhdWx0ID0gbmV0d29ya0ludGVyZmFjZURlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBORVQgLSBpbnRlcmZhY2VzXG5cbmZ1bmN0aW9uIHBhcnNlTGluZXNXaW5kb3dzTmljcyhzZWN0aW9ucywgbmNvbmZpZ3NlY3Rpb25zKSB7XG4gIGxldCBuaWNzID0gW107XG4gIGZvciAobGV0IGkgaW4gc2VjdGlvbnMpIHtcbiAgICBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChzZWN0aW9ucywgaSkpIHtcblxuICAgICAgaWYgKHNlY3Rpb25zW2ldLnRyaW0oKSAhPT0gJycpIHtcblxuICAgICAgICBsZXQgbGluZXMgPSBzZWN0aW9uc1tpXS50cmltKCkuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICBsZXQgbGluZXNOaWNDb25maWcgPSBuY29uZmlnc2VjdGlvbnMgJiYgbmNvbmZpZ3NlY3Rpb25zW2ldID8gbmNvbmZpZ3NlY3Rpb25zW2ldLnRyaW0oKS5zcGxpdCgnXFxyXFxuJykgOiBbXTtcbiAgICAgICAgbGV0IG5ldEVuYWJsZWQgPSB1dGlsLmdldFZhbHVlKGxpbmVzLCAnTmV0RW5hYmxlZCcsICc6Jyk7XG4gICAgICAgIGxldCBhZGFwdGVyVHlwZSA9IHV0aWwuZ2V0VmFsdWUobGluZXMsICdBZGFwdGVyVHlwZUlEJywgJzonKSA9PT0gJzknID8gJ3dpcmVsZXNzJyA6ICd3aXJlZCc7XG4gICAgICAgIGxldCBpZmFjZW5hbWUgPSB1dGlsLmdldFZhbHVlKGxpbmVzLCAnTmFtZScsICc6JykucmVwbGFjZSgvXFxdL2csICcpJykucmVwbGFjZSgvXFxbL2csICcoJyk7XG4gICAgICAgIGxldCBpZmFjZSA9IHV0aWwuZ2V0VmFsdWUobGluZXMsICdOZXRDb25uZWN0aW9uSUQnLCAnOicpLnJlcGxhY2UoL1xcXS9nLCAnKScpLnJlcGxhY2UoL1xcWy9nLCAnKCcpO1xuICAgICAgICBpZiAoaWZhY2VuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignd2ktZmknKSA+PSAwIHx8IGlmYWNlbmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3dpcmVsZXNzJykgPj0gMCkge1xuICAgICAgICAgIGFkYXB0ZXJUeXBlID0gJ3dpcmVsZXNzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV0RW5hYmxlZCAhPT0gJycpIHtcbiAgICAgICAgICBjb25zdCBzcGVlZCA9IHBhcnNlSW50KHV0aWwuZ2V0VmFsdWUobGluZXMsICdzcGVlZCcsICc6JykudHJpbSgpLCAxMCkgLyAxMDAwMDAwO1xuICAgICAgICAgIG5pY3MucHVzaCh7XG4gICAgICAgICAgICBtYWM6IHV0aWwuZ2V0VmFsdWUobGluZXMsICdNQUNBZGRyZXNzJywgJzonKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgZGhjcDogdXRpbC5nZXRWYWx1ZShsaW5lc05pY0NvbmZpZywgJ2RoY3BFbmFibGVkJywgJzonKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScsXG4gICAgICAgICAgICBuYW1lOiBpZmFjZW5hbWUsXG4gICAgICAgICAgICBpZmFjZSxcbiAgICAgICAgICAgIG5ldEVuYWJsZWQ6IG5ldEVuYWJsZWQgPT09ICdUUlVFJyxcbiAgICAgICAgICAgIHNwZWVkOiBpc05hTihzcGVlZCkgPyBudWxsIDogc3BlZWQsXG4gICAgICAgICAgICBvcGVyc3RhdGU6IHV0aWwuZ2V0VmFsdWUobGluZXMsICdOZXRDb25uZWN0aW9uU3RhdHVzJywgJzonKSA9PT0gJzInID8gJ3VwJyA6ICdkb3duJyxcbiAgICAgICAgICAgIHR5cGU6IGFkYXB0ZXJUeXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5pY3M7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd3NOaWNzKCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIGxldCBjbWQgPSAnR2V0LUNpbUluc3RhbmNlIFdpbjMyX05ldHdvcmtBZGFwdGVyIHwgZmwgKicgKyAnOyBlY2hvIFxcJyMtIy0jLSNcXCc7JztcbiAgICAgIGNtZCArPSAnR2V0LUNpbUluc3RhbmNlIFdpbjMyX05ldHdvcmtBZGFwdGVyQ29uZmlndXJhdGlvbiB8IGZsIERIQ1BFbmFibGVkJyArICcnO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXRpbC5wb3dlclNoZWxsKGNtZCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGRhdGEgPSBkYXRhLnNwbGl0KCcjLSMtIy0jJyk7XG4gICAgICAgICAgY29uc3QgbnNlY3Rpb25zID0gKGRhdGFbMF0gfHwgJycpLnNwbGl0KC9cXG5cXHMqXFxuLyk7XG4gICAgICAgICAgY29uc3QgbmNvbmZpZ3NlY3Rpb25zID0gKGRhdGFbMV0gfHwgJycpLnNwbGl0KC9cXG5cXHMqXFxuLyk7XG4gICAgICAgICAgcmVzb2x2ZShwYXJzZUxpbmVzV2luZG93c05pY3MobnNlY3Rpb25zLCBuY29uZmlnc2VjdGlvbnMpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93c0ROU3N1ZmZpeGVzKCkge1xuXG4gIGxldCBpZmFjZSA9IHt9O1xuXG4gIGxldCBkbnNTdWZmaXhlcyA9IHtcbiAgICBwcmltYXJ5RE5TOiAnJyxcbiAgICBleGl0Q29kZTogMCxcbiAgICBpZmFjZXM6IFtdLFxuICB9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaXBjb25maWcgPSBleGVjU3luYygnaXBjb25maWcgL2FsbCcsIHV0aWwuZXhlY09wdHNXaW4pO1xuICAgIGNvbnN0IGlwY29uZmlnQXJyYXkgPSBpcGNvbmZpZy5zcGxpdCgnXFxyXFxuXFxyXFxuJyk7XG5cbiAgICBpcGNvbmZpZ0FycmF5LmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG5cbiAgICAgIGlmIChpbmRleCA9PSAxKSB7XG4gICAgICAgIGNvbnN0IGxvbmdQcmltYXJ5RE5TID0gZWxlbWVudC5zcGxpdCgnXFxyXFxuJykuZmlsdGVyKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQudG9VcHBlckNhc2UoKS5pbmNsdWRlcygnRE5TJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcmltYXJ5RE5TID0gbG9uZ1ByaW1hcnlETlNbMF0uc3Vic3RyaW5nKGxvbmdQcmltYXJ5RE5TWzBdLmxhc3RJbmRleE9mKCc6JykgKyAxKTtcbiAgICAgICAgZG5zU3VmZml4ZXMucHJpbWFyeUROUyA9IHByaW1hcnlETlMudHJpbSgpO1xuICAgICAgICBpZiAoIWRuc1N1ZmZpeGVzLnByaW1hcnlETlMpIHsgZG5zU3VmZml4ZXMucHJpbWFyeUROUyA9ICdOb3QgZGVmaW5lZCc7IH1cbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IDEpIHtcbiAgICAgICAgaWYgKGluZGV4ICUgMiA9PSAwKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGVsZW1lbnQuc3Vic3RyaW5nKGVsZW1lbnQubGFzdEluZGV4T2YoJyAnKSArIDEpLnJlcGxhY2UoJzonLCAnJyk7XG4gICAgICAgICAgaWZhY2UubmFtZSA9IG5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvblNwZWNpZmljRE5TID0gZWxlbWVudC5zcGxpdCgnXFxyXFxuJykuZmlsdGVyKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdETlMnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkbnNTdWZmaXggPSBjb25uZWN0aW9uU3BlY2lmaWNETlNbMF0uc3Vic3RyaW5nKGNvbm5lY3Rpb25TcGVjaWZpY0ROU1swXS5sYXN0SW5kZXhPZignOicpICsgMSk7XG4gICAgICAgICAgaWZhY2UuZG5zU3VmZml4ID0gZG5zU3VmZml4LnRyaW0oKTtcbiAgICAgICAgICBkbnNTdWZmaXhlcy5pZmFjZXMucHVzaChpZmFjZSk7XG4gICAgICAgICAgaWZhY2UgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRuc1N1ZmZpeGVzO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBwcmltYXJ5RE5TOiAnJyxcbiAgICAgIGV4aXRDb2RlOiAwLFxuICAgICAgaWZhY2VzOiBbXSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd3NJZmFjZUROU3N1ZmZpeChpZmFjZXMsIGlmYWNlbmFtZSkge1xuICBsZXQgZG5zU3VmZml4ID0gJyc7XG4gIC8vIEFkZGluZyAoLikgdG8gZW5zdXJlIGlmYWNlbmFtZSBjb21wYXRpYmlsaXR5IHdoZW4gZHVwbGljYXRlZCBpZmFjZS1uYW1lc1xuICBjb25zdCBpbnRlcmZhY2VOYW1lID0gaWZhY2VuYW1lICsgJy4nO1xuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25EbnNTdWZmaXggPSBpZmFjZXMuZmlsdGVyKChpZmFjZSkgPT4ge1xuICAgICAgcmV0dXJuIGludGVyZmFjZU5hbWUuaW5jbHVkZXMoaWZhY2UubmFtZSArICcuJyk7XG4gICAgfSkubWFwKChpZmFjZSkgPT4gaWZhY2UuZG5zU3VmZml4KTtcbiAgICBpZiAoY29ubmVjdGlvbkRuc1N1ZmZpeFswXSkge1xuICAgICAgZG5zU3VmZml4ID0gY29ubmVjdGlvbkRuc1N1ZmZpeFswXTtcbiAgICB9XG4gICAgaWYgKCFkbnNTdWZmaXgpIHsgZG5zU3VmZml4ID0gJyc7IH1cbiAgICByZXR1cm4gZG5zU3VmZml4O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnVW5rbm93bic7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93c1dpcmVkUHJvZmlsZXNJbmZvcm1hdGlvbigpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBleGVjU3luYygnbmV0c2ggbGFuIHNob3cgcHJvZmlsZXMnLCB1dGlsLmV4ZWNPcHRzV2luKTtcbiAgICBjb25zdCBwcm9maWxlTGlzdCA9IHJlc3VsdC5zcGxpdCgnXFxyXFxuUHJvZmlsZSBvbiBpbnRlcmZhY2UnKTtcbiAgICByZXR1cm4gcHJvZmlsZUxpc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gMSAmJiBlcnJvci5zdGRvdXQuaW5jbHVkZXMoJ0F1dG9Db25maWcnKSkge1xuICAgICAgcmV0dXJuICdEaXNhYmxlZCc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dzV2lyZWxlc3NJZmFjZVNTSUQoaW50ZXJmYWNlTmFtZSkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNTeW5jKGBuZXRzaCB3bGFuIHNob3cgIGludGVyZmFjZSBuYW1lPVwiJHtpbnRlcmZhY2VOYW1lfVwiIHwgZmluZHN0ciBcIlNTSURcImAsIHV0aWwuZXhlY09wdHNXaW4pO1xuICAgIGNvbnN0IFNTSUQgPSByZXN1bHQuc3BsaXQoJ1xcclxcbicpLnNoaWZ0KCk7XG4gICAgY29uc3QgcGFyc2VTU0lEID0gU1NJRC5zcGxpdCgnOicpLnBvcCgpLnRyaW0oKTtcbiAgICByZXR1cm4gcGFyc2VTU0lEO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnVW5rbm93bic7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFdpbmRvd3NJRUVFODAyMXgoY29ubmVjdGlvblR5cGUsIGlmYWNlLCBpZmFjZXMpIHtcbiAgbGV0IGk4MDIxeCA9IHtcbiAgICBzdGF0ZTogJ1Vua25vd24nLFxuICAgIHByb3RvY29sOiAnVW5rbm93bicsXG4gIH07XG5cbiAgaWYgKGlmYWNlcyA9PT0gJ0Rpc2FibGVkJykge1xuICAgIGk4MDIxeC5zdGF0ZSA9ICdEaXNhYmxlZCc7XG4gICAgaTgwMjF4LnByb3RvY29sID0gJ05vdCBkZWZpbmVkJztcbiAgICByZXR1cm4gaTgwMjF4O1xuICB9XG5cbiAgaWYgKGNvbm5lY3Rpb25UeXBlID09ICd3aXJlZCcgJiYgaWZhY2VzLmxlbmd0aCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IDgwMi4xeCBpbmZvcm1hdGlvbiBieSBpbnRlcmZhY2UgbmFtZVxuICAgICAgY29uc3QgaWZhY2U4MDIxeEluZm8gPSBpZmFjZXMuZmluZCgoZWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5pbmNsdWRlcyhpZmFjZSArICdcXHJcXG4nKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXJyYXlJZmFjZTgwMjF4SW5mbyA9IGlmYWNlODAyMXhJbmZvLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgIGNvbnN0IHN0YXRlODAyMXggPSBhcnJheUlmYWNlODAyMXhJbmZvLmZpbmQoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5jbHVkZXMoJzgwMi4xeCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGF0ZTgwMjF4LmluY2x1ZGVzKCdEaXNhYmxlZCcpKSB7XG4gICAgICAgIGk4MDIxeC5zdGF0ZSA9ICdEaXNhYmxlZCc7XG4gICAgICAgIGk4MDIxeC5wcm90b2NvbCA9ICdOb3QgZGVmaW5lZCc7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlODAyMXguaW5jbHVkZXMoJ0VuYWJsZWQnKSkge1xuICAgICAgICBjb25zdCBwcm90b2NvbDgwMjF4ID0gYXJyYXlJZmFjZTgwMjF4SW5mby5maW5kKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5jbHVkZXMoJ0VBUCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaTgwMjF4LnByb3RvY29sID0gcHJvdG9jb2w4MDIxeC5zcGxpdCgnOicpLnBvcCgpO1xuICAgICAgICBpODAyMXguc3RhdGUgPSAnRW5hYmxlZCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBpODAyMXg7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbm5lY3Rpb25UeXBlID09ICd3aXJlbGVzcycpIHtcblxuICAgIGxldCBpODAyMXhTdGF0ZSA9ICcnO1xuICAgIGxldCBpODAyMXhQcm90b2NvbCA9ICcnO1xuXG5cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBTU0lEID0gZ2V0V2luZG93c1dpcmVsZXNzSWZhY2VTU0lEKGlmYWNlKTtcbiAgICAgIGlmIChTU0lEICE9PSAnVW5rbm93bicpIHtcblxuICAgICAgICBsZXQgaWZhY2VTYW5pdGl6ZWQgPSAnJztcbiAgICAgICAgY29uc3QgcyA9IHV0aWwuaXNQcm90b3R5cGVQb2xsdXRlZCgpID8gJy0tLScgOiB1dGlsLnNhbml0aXplU2hlbGxTdHJpbmcoU1NJRCk7XG4gICAgICAgIGNvbnN0IGwgPSB1dGlsLm1hdGhNaW4ocy5sZW5ndGgsIDIwMDApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGw7IGkrKykge1xuICAgICAgICAgIGlmIChzW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmYWNlU2FuaXRpemVkID0gaWZhY2VTYW5pdGl6ZWQgKyBzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpODAyMXhTdGF0ZSA9IGV4ZWNTeW5jKGBuZXRzaCB3bGFuIHNob3cgcHJvZmlsZXMgXCIke2lmYWNlU2FuaXRpemVkfVwiIHwgZmluZHN0ciBcIjgwMi4xWFwiYCwgdXRpbC5leGVjT3B0c1dpbik7XG4gICAgICAgIGk4MDIxeFByb3RvY29sID0gZXhlY1N5bmMoYG5ldHNoIHdsYW4gc2hvdyBwcm9maWxlcyBcIiR7aWZhY2VTYW5pdGl6ZWR9XCIgfCBmaW5kc3RyIFwiRUFQXCJgLCB1dGlsLmV4ZWNPcHRzV2luKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGk4MDIxeFN0YXRlLmluY2x1ZGVzKCc6JykgJiYgaTgwMjF4UHJvdG9jb2wuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICBpODAyMXguc3RhdGUgPSBpODAyMXhTdGF0ZS5zcGxpdCgnOicpLnBvcCgpO1xuICAgICAgICBpODAyMXgucHJvdG9jb2wgPSBpODAyMXhQcm90b2NvbC5zcGxpdCgnOicpLnBvcCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSAxICYmIGVycm9yLnN0ZG91dC5pbmNsdWRlcygnQXV0b0NvbmZpZycpKSB7XG4gICAgICAgIGk4MDIxeC5zdGF0ZSA9ICdEaXNhYmxlZCc7XG4gICAgICAgIGk4MDIxeC5wcm90b2NvbCA9ICdOb3QgZGVmaW5lZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gaTgwMjF4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpODAyMXg7XG59XG5cbmZ1bmN0aW9uIHNwbGl0U2VjdGlvbnNOaWNzKGxpbmVzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgc2VjdGlvbiA9IFtdO1xuICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoJ1xcdCcpICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSkge1xuICAgICAgaWYgKHNlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHNlY3Rpb24pO1xuICAgICAgICBzZWN0aW9uID0gW107XG4gICAgICB9XG4gICAgfVxuICAgIHNlY3Rpb24ucHVzaChsaW5lKTtcbiAgfSk7XG4gIGlmIChzZWN0aW9uLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKHNlY3Rpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGluZXNEYXJ3aW5OaWNzKHNlY3Rpb25zKSB7XG4gIGxldCBuaWNzID0gW107XG4gIHNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgbGV0IG5pYyA9IHtcbiAgICAgIGlmYWNlOiAnJyxcbiAgICAgIG10dTogbnVsbCxcbiAgICAgIG1hYzogJycsXG4gICAgICBpcDY6ICcnLFxuICAgICAgaXA0OiAnJyxcbiAgICAgIHNwZWVkOiBudWxsLFxuICAgICAgdHlwZTogJycsXG4gICAgICBvcGVyc3RhdGU6ICcnLFxuICAgICAgZHVwbGV4OiAnJyxcbiAgICAgIGludGVybmFsOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZmlyc3QgPSBzZWN0aW9uWzBdO1xuICAgIG5pYy5pZmFjZSA9IGZpcnN0LnNwbGl0KCc6JylbMF0udHJpbSgpO1xuICAgIGxldCBwYXJ0cyA9IGZpcnN0LnNwbGl0KCc+IG10dScpO1xuICAgIG5pYy5tdHUgPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFyc2VJbnQocGFydHNbMV0sIDEwKSA6IG51bGw7XG4gICAgaWYgKGlzTmFOKG5pYy5tdHUpKSB7XG4gICAgICBuaWMubXR1ID0gbnVsbDtcbiAgICB9XG4gICAgbmljLmludGVybmFsID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdsb29wYmFjaycpID4gLTE7XG4gICAgc2VjdGlvbi5mb3JFYWNoKGxpbmUgPT4ge1xuICAgICAgaWYgKGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ2V0aGVyICcpKSB7XG4gICAgICAgIG5pYy5tYWMgPSBsaW5lLnNwbGl0KCdldGhlciAnKVsxXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdpbmV0NiAnKSAmJiAhbmljLmlwNikge1xuICAgICAgICBuaWMuaXA2ID0gbGluZS5zcGxpdCgnaW5ldDYgJylbMV0udG9Mb3dlckNhc2UoKS5zcGxpdCgnJScpWzBdLnNwbGl0KCcgJylbMF07XG4gICAgICB9XG4gICAgICBpZiAobGluZS50cmltKCkuc3RhcnRzV2l0aCgnaW5ldCAnKSAmJiAhbmljLmlwNCkge1xuICAgICAgICBuaWMuaXA0ID0gbGluZS5zcGxpdCgnaW5ldCAnKVsxXS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJylbMF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHNwZWVkID0gdXRpbC5nZXRWYWx1ZShzZWN0aW9uLCAnbGluayByYXRlJyk7XG4gICAgbmljLnNwZWVkID0gc3BlZWQgPyBwYXJzZUZsb2F0KHNwZWVkKSA6IG51bGw7XG4gICAgaWYgKG5pYy5zcGVlZCA9PT0gbnVsbCkge1xuICAgICAgc3BlZWQgPSB1dGlsLmdldFZhbHVlKHNlY3Rpb24sICd1cGxpbmsgcmF0ZScpO1xuICAgICAgbmljLnNwZWVkID0gc3BlZWQgPyBwYXJzZUZsb2F0KHNwZWVkKSA6IG51bGw7XG4gICAgICBpZiAobmljLnNwZWVkICE9PSBudWxsICYmIHNwZWVkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ2JwcycpID49IDApIHtcbiAgICAgICAgbmljLnNwZWVkID0gbmljLnNwZWVkICogMTAwMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNwZWVkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ2JwcycpID49IDApIHtcbiAgICAgICAgbmljLnNwZWVkID0gbmljLnNwZWVkICogMTAwMDtcbiAgICAgIH1cbiAgICB9XG4gICAgbmljLnR5cGUgPSB1dGlsLmdldFZhbHVlKHNlY3Rpb24sICd0eXBlJykudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd3aS1maScpID4gLTEgPyAnd2lyZWxlc3MnIDogJ3dpcmVkJztcbiAgICBjb25zdCBvcGVyc3RhdGUgPSB1dGlsLmdldFZhbHVlKHNlY3Rpb24sICdzdGF0dXMnKS50b0xvd2VyQ2FzZSgpO1xuICAgIG5pYy5vcGVyc3RhdGUgPSAob3BlcnN0YXRlID09PSAnYWN0aXZlJyA/ICd1cCcgOiAob3BlcnN0YXRlID09PSAnaW5hY3RpdmUnID8gJ2Rvd24nIDogJ3Vua25vd24nKSk7XG4gICAgbmljLmR1cGxleCA9IHV0aWwuZ2V0VmFsdWUoc2VjdGlvbiwgJ21lZGlhJykudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdoYWxmLWR1cGxleCcpID4gLTEgPyAnaGFsZicgOiAnZnVsbCc7XG4gICAgaWYgKG5pYy5pcDYgfHwgbmljLmlwNCB8fCBuaWMubWFjKSB7XG4gICAgICBuaWNzLnB1c2gobmljKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmljcztcbn1cblxuZnVuY3Rpb24gZ2V0RGFyd2luTmljcygpIHtcbiAgY29uc3QgY21kID0gJy9zYmluL2lmY29uZmlnIC12JztcbiAgdHJ5IHtcbiAgICBjb25zdCBsaW5lcyA9IGV4ZWNTeW5jKGNtZCwgeyBtYXhCdWZmZXI6IDEwMjQgKiAyMDAwMCB9KS50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCBuc2VjdGlvbnMgPSBzcGxpdFNlY3Rpb25zTmljcyhsaW5lcyk7XG4gICAgcmV0dXJuIChwYXJzZUxpbmVzRGFyd2luTmljcyhuc2VjdGlvbnMpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRMaW51eElmYWNlQ29ubmVjdGlvbk5hbWUoaW50ZXJmYWNlTmFtZSkge1xuICBjb25zdCBjbWQgPSBgbm1jbGkgZGV2aWNlIHN0YXR1cyAyPi9kZXYvbnVsbCB8IGdyZXAgJHtpbnRlcmZhY2VOYW1lfWA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBleGVjU3luYyhjbWQsIHV0aWwuZXhlY09wdHNMaW51eCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXN1bHRGb3JtYXQgPSByZXN1bHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgICBjb25zdCBjb25uZWN0aW9uTmFtZUxpbmVzID0gcmVzdWx0Rm9ybWF0LnNwbGl0KCcgJykuc2xpY2UoMyk7XG4gICAgY29uc3QgY29ubmVjdGlvbk5hbWUgPSBjb25uZWN0aW9uTmFtZUxpbmVzLmpvaW4oJyAnKTtcbiAgICByZXR1cm4gY29ubmVjdGlvbk5hbWUgIT0gJy0tJyA/IGNvbm5lY3Rpb25OYW1lIDogJyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tMaW51eERDSFBJbnRlcmZhY2VzKGZpbGUpIHtcbiAgbGV0IHJlc3VsdCA9IFtdO1xuICB0cnkge1xuICAgIGxldCBjbWQgPSBgY2F0ICR7ZmlsZX0gMj4gL2Rldi9udWxsIHwgZ3JlcCAnaWZhY2VcXFxcfHNvdXJjZSdgO1xuICAgIGNvbnN0IGxpbmVzID0gZXhlY1N5bmMoY21kLCB1dGlsLmV4ZWNPcHRzTGludXgpLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuXG4gICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbGluZS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID49IDQpIHtcbiAgICAgICAgaWYgKGxpbmUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCcgaW5ldCAnKSA+PSAwICYmIGxpbmUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdkaGNwJykgPj0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnRzWzFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc291cmNlJykpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBsaW5lLnNwbGl0KCcgJylbMV07XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY2hlY2tMaW51eERDSFBJbnRlcmZhY2VzKGZpbGUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHV0aWwubm9vcCgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldExpbnV4REhDUE5pY3MoKSB7XG4gIC8vIGFsdGVybmF0ZSBtZXRob2RzIGdldHRpbmcgaW50ZXJmYWNlcyB1c2luZyBESENQXG4gIGxldCBjbWQgPSAnaXAgYSAyPiAvZGV2L251bGwnO1xuICBsZXQgcmVzdWx0ID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgbGluZXMgPSBleGVjU3luYyhjbWQsIHV0aWwuZXhlY09wdHNMaW51eCkudG9TdHJpbmcoKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgbnNlY3Rpb25zID0gc3BsaXRTZWN0aW9uc05pY3MobGluZXMpO1xuICAgIHJlc3VsdCA9IChwYXJzZUxpbnV4REhDUE5pY3MobnNlY3Rpb25zKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB1dGlsLm5vb3AoKTtcbiAgfVxuICB0cnkge1xuICAgIHJlc3VsdCA9IGNoZWNrTGludXhEQ0hQSW50ZXJmYWNlcygnL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHV0aWwubm9vcCgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGludXhESENQTmljcyhzZWN0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKHNlY3Rpb25zICYmIHNlY3Rpb25zLmxlbmd0aCkge1xuICAgIHNlY3Rpb25zLmZvckVhY2gobGluZXMgPT4ge1xuICAgICAgaWYgKGxpbmVzICYmIGxpbmVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmVzWzBdLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignIGluZXQgJykgPj0gMCAmJiBsaW5lLmluZGV4T2YoJyBkeW5hbWljICcpID49IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFydHMyID0gbGluZS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICBjb25zdCBuaWMgPSBwYXJ0czJbcGFydHMyLmxlbmd0aCAtIDFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmljKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0TGludXhJZmFjZURIQ1BzdGF0dXMoaWZhY2UsIGNvbm5lY3Rpb25OYW1lLCBESENQTmljcykge1xuICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChjb25uZWN0aW9uTmFtZSkge1xuICAgIGNvbnN0IGNtZCA9IGBubWNsaSBjb25uZWN0aW9uIHNob3cgXCIke2Nvbm5lY3Rpb25OYW1lfVwiIDI+L2Rldi9udWxsIHwgZ3JlcCBpcHY0Lm1ldGhvZDtgO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsaW5lcyA9IGV4ZWNTeW5jKGNtZCwgdXRpbC5leGVjT3B0c0xpbnV4KS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcmVzdWx0Rm9ybWF0ID0gbGluZXMucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblxuICAgICAgbGV0IGRoY1N0YXR1cyA9IHJlc3VsdEZvcm1hdC5zcGxpdCgnICcpLnNsaWNlKDEpLnRvU3RyaW5nKCk7XG4gICAgICBzd2l0Y2ggKGRoY1N0YXR1cykge1xuICAgICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAoREhDUE5pY3MuaW5kZXhPZihpZmFjZSkgPj0gMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoREhDUE5pY3MuaW5kZXhPZihpZmFjZSkgPj0gMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGFyd2luSWZhY2VESENQc3RhdHVzKGlmYWNlKSB7XG4gIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgY29uc3QgY21kID0gYGlwY29uZmlnIGdldHBhY2tldCBcIiR7aWZhY2V9XCIgMj4vZGV2L251bGwgfCBncmVwIGxlYXNlX3RpbWU7YDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaW5lcyA9IGV4ZWNTeW5jKGNtZCkudG9TdHJpbmcoKS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCAmJiBsaW5lc1swXS5zdGFydHNXaXRoKCdsZWFzZV90aW1lJykpIHtcbiAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdXRpbC5ub29wKCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0TGludXhJZmFjZUROU3N1ZmZpeChjb25uZWN0aW9uTmFtZSkge1xuICBpZiAoY29ubmVjdGlvbk5hbWUpIHtcbiAgICBjb25zdCBjbWQgPSBgbm1jbGkgY29ubmVjdGlvbiBzaG93IFwiJHtjb25uZWN0aW9uTmFtZX1cIiAyPi9kZXYvbnVsbCB8IGdyZXAgaXB2NC5kbnMtc2VhcmNoO2A7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNTeW5jKGNtZCwgdXRpbC5leGVjT3B0c0xpbnV4KS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcmVzdWx0Rm9ybWF0ID0gcmVzdWx0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG4gICAgICBjb25zdCBkbnNTdWZmaXggPSByZXN1bHRGb3JtYXQuc3BsaXQoJyAnKS5zbGljZSgxKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIGRuc1N1ZmZpeCA9PSAnLS0nID8gJ05vdCBkZWZpbmVkJyA6IGRuc1N1ZmZpeDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ1Vua25vd24nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpbnV4SWZhY2VJRUVFODAyMXhBdXRoKGNvbm5lY3Rpb25OYW1lKSB7XG4gIGlmIChjb25uZWN0aW9uTmFtZSkge1xuICAgIGNvbnN0IGNtZCA9IGBubWNsaSBjb25uZWN0aW9uIHNob3cgXCIke2Nvbm5lY3Rpb25OYW1lfVwiIDI+L2Rldi9udWxsIHwgZ3JlcCA4MDItMXguZWFwO2A7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNTeW5jKGNtZCwgdXRpbC5leGVjT3B0c0xpbnV4KS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcmVzdWx0Rm9ybWF0ID0gcmVzdWx0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG4gICAgICBjb25zdCBhdXRoZW50aWNhdGlvblByb3RvY29sID0gcmVzdWx0Rm9ybWF0LnNwbGl0KCcgJykuc2xpY2UoMSkudG9TdHJpbmcoKTtcblxuXG4gICAgICByZXR1cm4gYXV0aGVudGljYXRpb25Qcm90b2NvbCA9PSAnLS0nID8gJycgOiBhdXRoZW50aWNhdGlvblByb3RvY29sO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnTm90IGRlZmluZWQnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ05vdCBkZWZpbmVkJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRMaW51eElmYWNlSUVFRTgwMjF4U3RhdGUoYXV0aGVudGljYXRpb25Qcm90b2NvbCkge1xuICBpZiAoYXV0aGVudGljYXRpb25Qcm90b2NvbCkge1xuICAgIGlmIChhdXRoZW50aWNhdGlvblByb3RvY29sID09ICdOb3QgZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnRGlzYWJsZWQnO1xuICAgIH1cbiAgICByZXR1cm4gJ0VuYWJsZWQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnVW5rbm93bic7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFZpcnR1YWxOaWMoaWZhY2UsIGlmYWNlTmFtZSwgbWFjKSB7XG4gIGNvbnN0IHZpcnR1YWxNYWNzID0gWycwMDowMDowMDowMDowMDowMCcsICcwMDowMzpGRicsICcwMDowNTo2OScsICcwMDowQzoyOScsICcwMDowRjo0QicsICcwMDoxMzowNycsICcwMDoxMzpCRScsICcwMDoxNTo1ZCcsICcwMDoxNjozRScsICcwMDoxQzo0MicsICcwMDoyMTpGNicsICcwMDoyNDowQicsICcwMDo1MDo1NicsICcwMDpBMDpCMScsICcwMDpFMDpDOCcsICcwODowMDoyNycsICcwQTowMDoyNycsICcxODo5MjoyQycsICcxNjpERjo0OScsICczQzpGMzo5MicsICc1NDo1MjowMCcsICdGQzoxNTo5NyddO1xuICBpZiAobWFjKSB7XG4gICAgcmV0dXJuIHZpcnR1YWxNYWNzLmZpbHRlcihpdGVtID0+IHsgcmV0dXJuIG1hYy50b1VwcGVyQ2FzZSgpLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChpdGVtLnN1YnN0cmluZygwLCBtYWMubGVuZ3RoKSk7IH0pLmxlbmd0aCA+IDAgfHxcbiAgICAgIGlmYWNlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignIHZpcnR1YWwgJykgPiAtMSB8fFxuICAgICAgaWZhY2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignIHZpcnR1YWwgJykgPiAtMSB8fFxuICAgICAgaWZhY2UudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd2ZXRoZXJuZXQgJykgPiAtMSB8fFxuICAgICAgaWZhY2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigndmV0aGVybmV0ICcpID4gLTEgfHxcbiAgICAgIGlmYWNlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgndmV0aCcpIHx8XG4gICAgICBpZmFjZU5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCd2ZXRoJykgfHxcbiAgICAgIGlmYWNlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgndmJveG5ldCcpIHx8XG4gICAgICBpZmFjZU5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCd2Ym94bmV0Jyk7XG4gIH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfVxufVxuXG5mdW5jdGlvbiBuZXR3b3JrSW50ZXJmYWNlcyhjYWxsYmFjaywgcmVzY2FuLCBkZWZhdWx0U3RyaW5nKSB7XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICBkZWZhdWx0U3RyaW5nID0gY2FsbGJhY2s7XG4gICAgcmVzY2FuID0gdHJ1ZTtcbiAgICBjYWxsYmFjayA9IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnYm9vbGVhbicpIHtcbiAgICByZXNjYW4gPSBjYWxsYmFjaztcbiAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgZGVmYXVsdFN0cmluZyA9ICcnO1xuICB9XG4gIGlmICh0eXBlb2YgcmVzY2FuID09PSAndW5kZWZpbmVkJykge1xuICAgIHJlc2NhbiA9IHRydWU7XG4gIH1cbiAgZGVmYXVsdFN0cmluZyA9IGRlZmF1bHRTdHJpbmcgfHwgJyc7XG4gIGRlZmF1bHRTdHJpbmcgPSAnJyArIGRlZmF1bHRTdHJpbmc7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG5cbiAgICAgIGxldCBpZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpO1xuXG4gICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICBsZXQgbmljcyA9IFtdO1xuICAgICAgbGV0IGRuc1N1ZmZpeGVzID0gW107XG4gICAgICBsZXQgbmljczgwMjF4SW5mbyA9IFtdO1xuICAgICAgLy8gc2VwZXJhdGUgaGFuZGxpbmcgaW4gT1NYXG4gICAgICBpZiAoX2RhcndpbiB8fCBfZnJlZWJzZCB8fCBfb3BlbmJzZCB8fCBfbmV0YnNkKSB7XG4gICAgICAgIGlmICgoSlNPTi5zdHJpbmdpZnkoaWZhY2VzKSA9PT0gSlNPTi5zdHJpbmdpZnkoX2lmYWNlcykpICYmICFyZXNjYW4pIHtcbiAgICAgICAgICAvLyBubyBjaGFuZ2VzIC0ganVzdCByZXR1cm4gb2JqZWN0XG4gICAgICAgICAgcmVzdWx0ID0gX25ldHdvcmtJbnRlcmZhY2VzO1xuXG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKHJlc3VsdCk7IH1cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdEludGVyZmFjZSA9IGdldERlZmF1bHROZXR3b3JrSW50ZXJmYWNlKCk7XG4gICAgICAgICAgX2lmYWNlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWZhY2VzKSk7XG5cbiAgICAgICAgICBuaWNzID0gZ2V0RGFyd2luTmljcygpO1xuXG5cbiAgICAgICAgICBuaWNzLmZvckVhY2gobmljID0+IHtcblxuICAgICAgICAgICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwoaWZhY2VzLCBuaWMuaWZhY2UpKSB7XG4gICAgICAgICAgICAgIGlmYWNlc1tuaWMuaWZhY2VdLmZvckVhY2goZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5mYW1pbHkgPT09ICdJUHY0JyB8fCBkZXRhaWxzLmZhbWlseSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgbmljLmlwNHN1Ym5ldCA9IGRldGFpbHMubmV0bWFzaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRldGFpbHMuZmFtaWx5ID09PSAnSVB2NicgfHwgZGV0YWlscy5mYW1pbHkgPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgIG5pYy5pcDZzdWJuZXQgPSBkZXRhaWxzLm5ldG1hc2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlmYWNlU2FuaXRpemVkID0gJyc7XG4gICAgICAgICAgICBjb25zdCBzID0gdXRpbC5pc1Byb3RvdHlwZVBvbGx1dGVkKCkgPyAnLS0tJyA6IHV0aWwuc2FuaXRpemVTaGVsbFN0cmluZyhuaWMuaWZhY2UpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHV0aWwubWF0aE1pbihzLmxlbmd0aCwgMjAwMCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBsOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKHNbaV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmYWNlU2FuaXRpemVkID0gaWZhY2VTYW5pdGl6ZWQgKyBzW2ldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgaWZhY2U6IG5pYy5pZmFjZSxcbiAgICAgICAgICAgICAgaWZhY2VOYW1lOiBuaWMuaWZhY2UsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG5pYy5pZmFjZSA9PT0gZGVmYXVsdEludGVyZmFjZSxcbiAgICAgICAgICAgICAgaXA0OiBuaWMuaXA0LFxuICAgICAgICAgICAgICBpcDRzdWJuZXQ6IG5pYy5pcDRzdWJuZXQgfHwgJycsXG4gICAgICAgICAgICAgIGlwNjogbmljLmlwNixcbiAgICAgICAgICAgICAgaXA2c3VibmV0OiBuaWMuaXA2c3VibmV0IHx8ICcnLFxuICAgICAgICAgICAgICBtYWM6IG5pYy5tYWMsXG4gICAgICAgICAgICAgIGludGVybmFsOiBuaWMuaW50ZXJuYWwsXG4gICAgICAgICAgICAgIHZpcnR1YWw6IG5pYy5pbnRlcm5hbCA/IGZhbHNlIDogdGVzdFZpcnR1YWxOaWMobmljLmlmYWNlLCBuaWMuaWZhY2UsIG5pYy5tYWMpLFxuICAgICAgICAgICAgICBvcGVyc3RhdGU6IG5pYy5vcGVyc3RhdGUsXG4gICAgICAgICAgICAgIHR5cGU6IG5pYy50eXBlLFxuICAgICAgICAgICAgICBkdXBsZXg6IG5pYy5kdXBsZXgsXG4gICAgICAgICAgICAgIG10dTogbmljLm10dSxcbiAgICAgICAgICAgICAgc3BlZWQ6IG5pYy5zcGVlZCxcbiAgICAgICAgICAgICAgZGhjcDogZ2V0RGFyd2luSWZhY2VESENQc3RhdHVzKGlmYWNlU2FuaXRpemVkKSxcbiAgICAgICAgICAgICAgZG5zU3VmZml4OiAnJyxcbiAgICAgICAgICAgICAgaWVlZTgwMjF4QXV0aDogJycsXG4gICAgICAgICAgICAgIGllZWU4MDIxeFN0YXRlOiAnJyxcbiAgICAgICAgICAgICAgY2FycmllckNoYW5nZXM6IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9uZXR3b3JrSW50ZXJmYWNlcyA9IHJlc3VsdDtcbiAgICAgICAgICBpZiAoZGVmYXVsdFN0cmluZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2RlZmF1bHQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kZWZhdWx0KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKHJlc3VsdCk7IH1cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChfbGludXgpIHtcbiAgICAgICAgaWYgKChKU09OLnN0cmluZ2lmeShpZmFjZXMpID09PSBKU09OLnN0cmluZ2lmeShfaWZhY2VzKSkgJiYgIXJlc2Nhbikge1xuICAgICAgICAgIC8vIG5vIGNoYW5nZXMgLSBqdXN0IHJldHVybiBvYmplY3RcbiAgICAgICAgICByZXN1bHQgPSBfbmV0d29ya0ludGVyZmFjZXM7XG5cbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2socmVzdWx0KTsgfVxuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfaWZhY2VzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpZmFjZXMpKTtcbiAgICAgICAgICBfZGhjcE5pY3MgPSBnZXRMaW51eERIQ1BOaWNzKCk7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdEludGVyZmFjZSA9IGdldERlZmF1bHROZXR3b3JrSW50ZXJmYWNlKCk7XG4gICAgICAgICAgZm9yIChsZXQgZGV2IGluIGlmYWNlcykge1xuICAgICAgICAgICAgbGV0IGlwNCA9ICcnO1xuICAgICAgICAgICAgbGV0IGlwNHN1Ym5ldCA9ICcnO1xuICAgICAgICAgICAgbGV0IGlwNiA9ICcnO1xuICAgICAgICAgICAgbGV0IGlwNnN1Ym5ldCA9ICcnO1xuICAgICAgICAgICAgbGV0IG1hYyA9ICcnO1xuICAgICAgICAgICAgbGV0IGR1cGxleCA9ICcnO1xuICAgICAgICAgICAgbGV0IG10dSA9ICcnO1xuICAgICAgICAgICAgbGV0IHNwZWVkID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjYXJyaWVyQ2hhbmdlcyA9IDA7XG4gICAgICAgICAgICBsZXQgZGhjcCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRuc1N1ZmZpeCA9ICcnO1xuICAgICAgICAgICAgbGV0IGllZWU4MDIxeEF1dGggPSAnJztcbiAgICAgICAgICAgIGxldCBpZWVlODAyMXhTdGF0ZSA9ICcnO1xuICAgICAgICAgICAgbGV0IHR5cGUgPSAnJztcblxuICAgICAgICAgICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwoaWZhY2VzLCBkZXYpKSB7XG4gICAgICAgICAgICAgIGxldCBpZmFjZU5hbWUgPSBkZXY7XG4gICAgICAgICAgICAgIGlmYWNlc1tkZXZdLmZvckVhY2goZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5mYW1pbHkgPT09ICdJUHY0JyB8fCBkZXRhaWxzLmZhbWlseSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgaXA0ID0gZGV0YWlscy5hZGRyZXNzO1xuICAgICAgICAgICAgICAgICAgaXA0c3VibmV0ID0gZGV0YWlscy5uZXRtYXNrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5mYW1pbHkgPT09ICdJUHY2JyB8fCBkZXRhaWxzLmZhbWlseSA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpcDYgfHwgaXA2Lm1hdGNoKC9eZmU4MDo6L2kpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlwNiA9IGRldGFpbHMuYWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgaXA2c3VibmV0ID0gZGV0YWlscy5uZXRtYXNrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYWMgPSBkZXRhaWxzLm1hYztcbiAgICAgICAgICAgICAgICAvLyBmYWxsYmFjayBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xMzU4MSAobm9kZSA4LjEgLSBub2RlIDguMilcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlTWFpblZlcnNpb24gPSBwYXJzZUludChwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKSwgMTApO1xuICAgICAgICAgICAgICAgIGlmIChtYWMuaW5kZXhPZignMDA6MDA6MCcpID4gLTEgJiYgKF9saW51eCB8fCBfZGFyd2luKSAmJiAoIWRldGFpbHMuaW50ZXJuYWwpICYmIG5vZGVNYWluVmVyc2lvbiA+PSA4ICYmIG5vZGVNYWluVmVyc2lvbiA8PSAxMSkge1xuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9tYWMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBfbWFjID0gZ2V0TWFjQWRkcmVzc2VzKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBtYWMgPSBfbWFjW2Rldl0gfHwgJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGV0IGlmYWNlID0gZGV2LnNwbGl0KCc6JylbMF0udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGxldCBpZmFjZVNhbml0aXplZCA9ICcnO1xuICAgICAgICAgICAgICBjb25zdCBzID0gdXRpbC5pc1Byb3RvdHlwZVBvbGx1dGVkKCkgPyAnLS0tJyA6IHV0aWwuc2FuaXRpemVTaGVsbFN0cmluZyhpZmFjZSk7XG4gICAgICAgICAgICAgIGNvbnN0IGwgPSB1dGlsLm1hdGhNaW4ocy5sZW5ndGgsIDIwMDApO1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoc1tpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBpZmFjZVNhbml0aXplZCA9IGlmYWNlU2FuaXRpemVkICsgc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY21kID0gYGVjaG8gLW4gXCJhZGRyX2Fzc2lnbl90eXBlOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2FkZHJfYXNzaWduX3R5cGUgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwiYWRkcmVzczogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9hZGRyZXNzIDI+L2Rldi9udWxsOyBlY2hvO1xuICAgICAgICAgICAgZWNobyAtbiBcImFkZHJfbGVuOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2FkZHJfbGVuIDI+L2Rldi9udWxsOyBlY2hvO1xuICAgICAgICAgICAgZWNobyAtbiBcImJyb2FkY2FzdDogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9icm9hZGNhc3QgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwiY2FycmllcjogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9jYXJyaWVyIDI+L2Rldi9udWxsOyBlY2hvO1xuICAgICAgICAgICAgZWNobyAtbiBcImNhcnJpZXJfY2hhbmdlczogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9jYXJyaWVyX2NoYW5nZXMgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwiZGV2X2lkOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2Rldl9pZCAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJkZXZfcG9ydDogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9kZXZfcG9ydCAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJkb3JtYW50OiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2Rvcm1hbnQgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwiZHVwbGV4OiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2R1cGxleCAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJmbGFnczogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9mbGFncyAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJncm9fZmx1c2hfdGltZW91dDogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9ncm9fZmx1c2hfdGltZW91dCAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJpZmFsaWFzOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2lmYWxpYXMgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwiaWZpbmRleDogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9pZmluZGV4IDI+L2Rldi9udWxsOyBlY2hvO1xuICAgICAgICAgICAgZWNobyAtbiBcImlmbGluazogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9pZmxpbmsgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwibGlua19tb2RlOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L2xpbmtfbW9kZSAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJtdHU6IFwiOyBjYXQgL3N5cy9jbGFzcy9uZXQvJHtpZmFjZVNhbml0aXplZH0vbXR1IDI+L2Rldi9udWxsOyBlY2hvO1xuICAgICAgICAgICAgZWNobyAtbiBcIm5ldGRldl9ncm91cDogXCI7IGNhdCAvc3lzL2NsYXNzL25ldC8ke2lmYWNlU2FuaXRpemVkfS9uZXRkZXZfZ3JvdXAgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwib3BlcnN0YXRlOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L29wZXJzdGF0ZSAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJwcm90b19kb3duOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L3Byb3RvX2Rvd24gMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwic3BlZWQ6IFwiOyBjYXQgL3N5cy9jbGFzcy9uZXQvJHtpZmFjZVNhbml0aXplZH0vc3BlZWQgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwidHhfcXVldWVfbGVuOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L3R4X3F1ZXVlX2xlbiAyPi9kZXYvbnVsbDsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJ0eXBlOiBcIjsgY2F0IC9zeXMvY2xhc3MvbmV0LyR7aWZhY2VTYW5pdGl6ZWR9L3R5cGUgMj4vZGV2L251bGw7IGVjaG87XG4gICAgICAgICAgICBlY2hvIC1uIFwid2lyZWxlc3M6IFwiOyBjYXQgL3Byb2MvbmV0L3dpcmVsZXNzIDI+L2Rldi9udWxsIHwgZ3JlcCAke2lmYWNlU2FuaXRpemVkfTsgZWNobztcbiAgICAgICAgICAgIGVjaG8gLW4gXCJ3aXJlbGVzc3NwZWVkOiBcIjsgaXcgZGV2ICR7aWZhY2VTYW5pdGl6ZWR9IGxpbmsgMj4mMSB8IGdyZXAgYml0cmF0ZTsgZWNobztgO1xuXG4gICAgICAgICAgICAgIGxldCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxpbmVzID0gZXhlY1N5bmMoY21kLCB1dGlsLmV4ZWNPcHRzTGludXgpLnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25OYW1lID0gZ2V0TGludXhJZmFjZUNvbm5lY3Rpb25OYW1lKGlmYWNlU2FuaXRpemVkKTtcbiAgICAgICAgICAgICAgICBkaGNwID0gZ2V0TGludXhJZmFjZURIQ1BzdGF0dXMoaWZhY2VTYW5pdGl6ZWQsIGNvbm5lY3Rpb25OYW1lLCBfZGhjcE5pY3MpO1xuICAgICAgICAgICAgICAgIGRuc1N1ZmZpeCA9IGdldExpbnV4SWZhY2VETlNzdWZmaXgoY29ubmVjdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgIGllZWU4MDIxeEF1dGggPSBnZXRMaW51eElmYWNlSUVFRTgwMjF4QXV0aChjb25uZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgaWVlZTgwMjF4U3RhdGUgPSBnZXRMaW51eElmYWNlSUVFRTgwMjF4U3RhdGUoaWVlZTgwMjF4QXV0aCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB1dGlsLm5vb3AoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkdXBsZXggPSB1dGlsLmdldFZhbHVlKGxpbmVzLCAnZHVwbGV4Jyk7XG4gICAgICAgICAgICAgIGR1cGxleCA9IGR1cGxleC5zdGFydHNXaXRoKCdjYXQnKSA/ICcnIDogZHVwbGV4O1xuICAgICAgICAgICAgICBtdHUgPSBwYXJzZUludCh1dGlsLmdldFZhbHVlKGxpbmVzLCAnbXR1JyksIDEwKTtcbiAgICAgICAgICAgICAgbGV0IG15c3BlZWQgPSBwYXJzZUludCh1dGlsLmdldFZhbHVlKGxpbmVzLCAnc3BlZWQnKSwgMTApO1xuICAgICAgICAgICAgICBzcGVlZCA9IGlzTmFOKG15c3BlZWQpID8gbnVsbCA6IG15c3BlZWQ7XG4gICAgICAgICAgICAgIGxldCB3aXJlbGVzc3NwZWVkID0gdXRpbC5nZXRWYWx1ZShsaW5lcywgJ3dpcmVsZXNzc3BlZWQnKS5zcGxpdCgndHggYml0cmF0ZTogJyk7XG4gICAgICAgICAgICAgIGlmIChzcGVlZCA9PT0gbnVsbCAmJiB3aXJlbGVzc3NwZWVkLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIG15c3BlZWQgPSBwYXJzZUZsb2F0KHdpcmVsZXNzc3BlZWRbMV0pO1xuICAgICAgICAgICAgICAgIHNwZWVkID0gaXNOYU4obXlzcGVlZCkgPyBudWxsIDogbXlzcGVlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXJyaWVyQ2hhbmdlcyA9IHBhcnNlSW50KHV0aWwuZ2V0VmFsdWUobGluZXMsICdjYXJyaWVyX2NoYW5nZXMnKSwgMTApO1xuICAgICAgICAgICAgICBjb25zdCBvcGVyc3RhdGUgPSB1dGlsLmdldFZhbHVlKGxpbmVzLCAnb3BlcnN0YXRlJyk7XG4gICAgICAgICAgICAgIHR5cGUgPSBvcGVyc3RhdGUgPT09ICd1cCcgPyAodXRpbC5nZXRWYWx1ZShsaW5lcywgJ3dpcmVsZXNzJykudHJpbSgpID8gJ3dpcmVsZXNzJyA6ICd3aXJlZCcpIDogJ3Vua25vd24nO1xuICAgICAgICAgICAgICBpZiAoaWZhY2VTYW5pdGl6ZWQgPT09ICdsbycgfHwgaWZhY2VTYW5pdGl6ZWQuc3RhcnRzV2l0aCgnYm9uZCcpKSB7IHR5cGUgPSAndmlydHVhbCc7IH1cblxuICAgICAgICAgICAgICBsZXQgaW50ZXJuYWwgPSAoaWZhY2VzW2Rldl0gJiYgaWZhY2VzW2Rldl1bMF0pID8gaWZhY2VzW2Rldl1bMF0uaW50ZXJuYWwgOiBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGRldi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2xvb3BiYWNrJykgPiAtMSB8fCBpZmFjZU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdsb29wYmFjaycpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgdmlydHVhbCA9IGludGVybmFsID8gZmFsc2UgOiB0ZXN0VmlydHVhbE5pYyhkZXYsIGlmYWNlTmFtZSwgbWFjKTtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIGlmYWNlOiBpZmFjZVNhbml0aXplZCxcbiAgICAgICAgICAgICAgICBpZmFjZU5hbWUsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogaWZhY2UgPT09IGRlZmF1bHRJbnRlcmZhY2UsXG4gICAgICAgICAgICAgICAgaXA0LFxuICAgICAgICAgICAgICAgIGlwNHN1Ym5ldCxcbiAgICAgICAgICAgICAgICBpcDYsXG4gICAgICAgICAgICAgICAgaXA2c3VibmV0LFxuICAgICAgICAgICAgICAgIG1hYyxcbiAgICAgICAgICAgICAgICBpbnRlcm5hbCxcbiAgICAgICAgICAgICAgICB2aXJ0dWFsLFxuICAgICAgICAgICAgICAgIG9wZXJzdGF0ZSxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGR1cGxleCxcbiAgICAgICAgICAgICAgICBtdHUsXG4gICAgICAgICAgICAgICAgc3BlZWQsXG4gICAgICAgICAgICAgICAgZGhjcCxcbiAgICAgICAgICAgICAgICBkbnNTdWZmaXgsXG4gICAgICAgICAgICAgICAgaWVlZTgwMjF4QXV0aCxcbiAgICAgICAgICAgICAgICBpZWVlODAyMXhTdGF0ZSxcbiAgICAgICAgICAgICAgICBjYXJyaWVyQ2hhbmdlcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIF9uZXR3b3JrSW50ZXJmYWNlcyA9IHJlc3VsdDtcbiAgICAgICAgICBpZiAoZGVmYXVsdFN0cmluZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2RlZmF1bHQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kZWZhdWx0KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKHJlc3VsdCk7IH1cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChfd2luZG93cykge1xuICAgICAgICBpZiAoKEpTT04uc3RyaW5naWZ5KGlmYWNlcykgPT09IEpTT04uc3RyaW5naWZ5KF9pZmFjZXMpKSAmJiAhcmVzY2FuKSB7XG4gICAgICAgICAgLy8gbm8gY2hhbmdlcyAtIGp1c3QgcmV0dXJuIG9iamVjdFxuICAgICAgICAgIHJlc3VsdCA9IF9uZXR3b3JrSW50ZXJmYWNlcztcblxuICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9pZmFjZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlmYWNlcykpO1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRJbnRlcmZhY2UgPSBnZXREZWZhdWx0TmV0d29ya0ludGVyZmFjZSgpO1xuXG4gICAgICAgICAgZ2V0V2luZG93c05pY3MoKS50aGVuKGZ1bmN0aW9uIChuaWNzKSB7XG4gICAgICAgICAgICBuaWNzLmZvckVhY2gobmljID0+IHtcbiAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGlmYWNlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgIGlmYWNlc1trZXldLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUpLmluZGV4T2YoJ21hYycpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHZhbHVlWydtYWMnXSA9PT0gbmljLm1hYztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgaWZhY2VzW25pYy5uYW1lXSA9IFt7IG1hYzogbmljLm1hYyB9XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuaWNzODAyMXhJbmZvID0gZ2V0V2luZG93c1dpcmVkUHJvZmlsZXNJbmZvcm1hdGlvbigpO1xuICAgICAgICAgICAgZG5zU3VmZml4ZXMgPSBnZXRXaW5kb3dzRE5Tc3VmZml4ZXMoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGRldiBpbiBpZmFjZXMpIHtcblxuICAgICAgICAgICAgICBsZXQgaWZhY2VTYW5pdGl6ZWQgPSAnJztcbiAgICAgICAgICAgICAgY29uc3QgcyA9IHV0aWwuaXNQcm90b3R5cGVQb2xsdXRlZCgpID8gJy0tLScgOiB1dGlsLnNhbml0aXplU2hlbGxTdHJpbmcoZGV2KTtcbiAgICAgICAgICAgICAgY29uc3QgbCA9IHV0aWwubWF0aE1pbihzLmxlbmd0aCwgMjAwMCk7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChzW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmYWNlU2FuaXRpemVkID0gaWZhY2VTYW5pdGl6ZWQgKyBzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxldCBpZmFjZSA9IGRldjtcbiAgICAgICAgICAgICAgbGV0IGlwNCA9ICcnO1xuICAgICAgICAgICAgICBsZXQgaXA0c3VibmV0ID0gJyc7XG4gICAgICAgICAgICAgIGxldCBpcDYgPSAnJztcbiAgICAgICAgICAgICAgbGV0IGlwNnN1Ym5ldCA9ICcnO1xuICAgICAgICAgICAgICBsZXQgbWFjID0gJyc7XG4gICAgICAgICAgICAgIGxldCBkdXBsZXggPSAnJztcbiAgICAgICAgICAgICAgbGV0IG10dSA9ICcnO1xuICAgICAgICAgICAgICBsZXQgc3BlZWQgPSBudWxsO1xuICAgICAgICAgICAgICBsZXQgY2FycmllckNoYW5nZXMgPSAwO1xuICAgICAgICAgICAgICBsZXQgb3BlcnN0YXRlID0gJ2Rvd24nO1xuICAgICAgICAgICAgICBsZXQgZGhjcCA9IGZhbHNlO1xuICAgICAgICAgICAgICBsZXQgZG5zU3VmZml4ID0gJyc7XG4gICAgICAgICAgICAgIGxldCBpZWVlODAyMXhBdXRoID0gJyc7XG4gICAgICAgICAgICAgIGxldCBpZWVlODAyMXhTdGF0ZSA9ICcnO1xuICAgICAgICAgICAgICBsZXQgdHlwZSA9ICcnO1xuXG4gICAgICAgICAgICAgIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlmYWNlcywgZGV2KSkge1xuICAgICAgICAgICAgICAgIGxldCBpZmFjZU5hbWUgPSBkZXY7XG4gICAgICAgICAgICAgICAgaWZhY2VzW2Rldl0uZm9yRWFjaChmdW5jdGlvbiAoZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbHMuZmFtaWx5ID09PSAnSVB2NCcgfHwgZGV0YWlscy5mYW1pbHkgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXA0ID0gZGV0YWlscy5hZGRyZXNzO1xuICAgICAgICAgICAgICAgICAgICBpcDRzdWJuZXQgPSBkZXRhaWxzLm5ldG1hc2s7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5mYW1pbHkgPT09ICdJUHY2JyB8fCBkZXRhaWxzLmZhbWlseSA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlwNiB8fCBpcDYubWF0Y2goL15mZTgwOjovaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpcDYgPSBkZXRhaWxzLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgICAgaXA2c3VibmV0ID0gZGV0YWlscy5uZXRtYXNrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBtYWMgPSBkZXRhaWxzLm1hYztcbiAgICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzEzNTgxIChub2RlIDguMSAtIG5vZGUgOC4yKVxuICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZU1haW5WZXJzaW9uID0gcGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJyksIDEwKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYWMuaW5kZXhPZignMDA6MDA6MCcpID4gLTEgJiYgKF9saW51eCB8fCBfZGFyd2luKSAmJiAoIWRldGFpbHMuaW50ZXJuYWwpICYmIG5vZGVNYWluVmVyc2lvbiA+PSA4ICYmIG5vZGVNYWluVmVyc2lvbiA8PSAxMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoX21hYykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgX21hYyA9IGdldE1hY0FkZHJlc3NlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hYyA9IF9tYWNbZGV2XSB8fCAnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgICAgICAgICBkbnNTdWZmaXggPSBnZXRXaW5kb3dzSWZhY2VETlNzdWZmaXgoZG5zU3VmZml4ZXMuaWZhY2VzLCBpZmFjZVNhbml0aXplZCk7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBuaWNzLmZvckVhY2goZGV0YWlsID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWwubWFjID09PSBtYWMgJiYgIWZvdW5kRmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWZhY2UgPSBkZXRhaWwuaWZhY2UgfHwgaWZhY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmYWNlTmFtZSA9IGRldGFpbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkaGNwID0gZGV0YWlsLmRoY3A7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJzdGF0ZSA9IGRldGFpbC5vcGVyc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIHNwZWVkID0gb3BlcnN0YXRlID09PSAndXAnID8gZGV0YWlsLnNwZWVkIDogMDtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGRldGFpbC50eXBlO1xuICAgICAgICAgICAgICAgICAgICBmb3VuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChkZXYudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd3bGFuJykgPj0gMCB8fCBpZmFjZU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd3bGFuJykgPj0gMCB8fCBpZmFjZU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCc4MDIuMTFuJykgPj0gMCB8fCBpZmFjZU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCd3aXJlbGVzcycpID49IDAgfHwgaWZhY2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignd2ktZmknKSA+PSAwIHx8IGlmYWNlTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3dpZmknKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICB0eXBlID0gJ3dpcmVsZXNzJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBJRUVFODAyMXggPSBnZXRXaW5kb3dzSUVFRTgwMjF4KHR5cGUsIGlmYWNlU2FuaXRpemVkLCBuaWNzODAyMXhJbmZvKTtcbiAgICAgICAgICAgICAgICBpZWVlODAyMXhBdXRoID0gSUVFRTgwMjF4LnByb3RvY29sO1xuICAgICAgICAgICAgICAgIGllZWU4MDIxeFN0YXRlID0gSUVFRTgwMjF4LnN0YXRlO1xuICAgICAgICAgICAgICAgIGxldCBpbnRlcm5hbCA9IChpZmFjZXNbZGV2XSAmJiBpZmFjZXNbZGV2XVswXSkgPyBpZmFjZXNbZGV2XVswXS5pbnRlcm5hbCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChkZXYudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdsb29wYmFjaycpID4gLTEgfHwgaWZhY2VOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignbG9vcGJhY2snKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICBpbnRlcm5hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHZpcnR1YWwgPSBpbnRlcm5hbCA/IGZhbHNlIDogdGVzdFZpcnR1YWxOaWMoZGV2LCBpZmFjZU5hbWUsIG1hYyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWZhY2UsXG4gICAgICAgICAgICAgICAgICBpZmFjZU5hbWUsXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBpZmFjZSA9PT0gZGVmYXVsdEludGVyZmFjZSxcbiAgICAgICAgICAgICAgICAgIGlwNCxcbiAgICAgICAgICAgICAgICAgIGlwNHN1Ym5ldCxcbiAgICAgICAgICAgICAgICAgIGlwNixcbiAgICAgICAgICAgICAgICAgIGlwNnN1Ym5ldCxcbiAgICAgICAgICAgICAgICAgIG1hYyxcbiAgICAgICAgICAgICAgICAgIGludGVybmFsLFxuICAgICAgICAgICAgICAgICAgdmlydHVhbCxcbiAgICAgICAgICAgICAgICAgIG9wZXJzdGF0ZSxcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBkdXBsZXgsXG4gICAgICAgICAgICAgICAgICBtdHUsXG4gICAgICAgICAgICAgICAgICBzcGVlZCxcbiAgICAgICAgICAgICAgICAgIGRoY3AsXG4gICAgICAgICAgICAgICAgICBkbnNTdWZmaXgsXG4gICAgICAgICAgICAgICAgICBpZWVlODAyMXhBdXRoLFxuICAgICAgICAgICAgICAgICAgaWVlZTgwMjF4U3RhdGUsXG4gICAgICAgICAgICAgICAgICBjYXJyaWVyQ2hhbmdlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX25ldHdvcmtJbnRlcmZhY2VzID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRTdHJpbmcudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdkZWZhdWx0JykgPj0gMCkge1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2socmVzdWx0KTsgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnRzLm5ldHdvcmtJbnRlcmZhY2VzID0gbmV0d29ya0ludGVyZmFjZXM7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBORVQgLSBTcGVlZFxuXG5mdW5jdGlvbiBjYWxjTmV0d29ya1NwZWVkKGlmYWNlLCByeF9ieXRlcywgdHhfYnl0ZXMsIG9wZXJzdGF0ZSwgcnhfZHJvcHBlZCwgcnhfZXJyb3JzLCB0eF9kcm9wcGVkLCB0eF9lcnJvcnMpIHtcbiAgbGV0IHJlc3VsdCA9IHtcbiAgICBpZmFjZSxcbiAgICBvcGVyc3RhdGUsXG4gICAgcnhfYnl0ZXMsXG4gICAgcnhfZHJvcHBlZCxcbiAgICByeF9lcnJvcnMsXG4gICAgdHhfYnl0ZXMsXG4gICAgdHhfZHJvcHBlZCxcbiAgICB0eF9lcnJvcnMsXG4gICAgcnhfc2VjOiBudWxsLFxuICAgIHR4X3NlYzogbnVsbCxcbiAgICBtczogMFxuICB9O1xuXG4gIGlmIChfbmV0d29ya1tpZmFjZV0gJiYgX25ldHdvcmtbaWZhY2VdLm1zKSB7XG4gICAgcmVzdWx0Lm1zID0gRGF0ZS5ub3coKSAtIF9uZXR3b3JrW2lmYWNlXS5tcztcbiAgICByZXN1bHQucnhfc2VjID0gKHJ4X2J5dGVzIC0gX25ldHdvcmtbaWZhY2VdLnJ4X2J5dGVzKSA+PSAwID8gKHJ4X2J5dGVzIC0gX25ldHdvcmtbaWZhY2VdLnJ4X2J5dGVzKSAvIChyZXN1bHQubXMgLyAxMDAwKSA6IDA7XG4gICAgcmVzdWx0LnR4X3NlYyA9ICh0eF9ieXRlcyAtIF9uZXR3b3JrW2lmYWNlXS50eF9ieXRlcykgPj0gMCA/ICh0eF9ieXRlcyAtIF9uZXR3b3JrW2lmYWNlXS50eF9ieXRlcykgLyAocmVzdWx0Lm1zIC8gMTAwMCkgOiAwO1xuICAgIF9uZXR3b3JrW2lmYWNlXS5yeF9ieXRlcyA9IHJ4X2J5dGVzO1xuICAgIF9uZXR3b3JrW2lmYWNlXS50eF9ieXRlcyA9IHR4X2J5dGVzO1xuICAgIF9uZXR3b3JrW2lmYWNlXS5yeF9zZWMgPSByZXN1bHQucnhfc2VjO1xuICAgIF9uZXR3b3JrW2lmYWNlXS50eF9zZWMgPSByZXN1bHQudHhfc2VjO1xuICAgIF9uZXR3b3JrW2lmYWNlXS5tcyA9IERhdGUubm93KCk7XG4gICAgX25ldHdvcmtbaWZhY2VdLmxhc3RfbXMgPSByZXN1bHQubXM7XG4gICAgX25ldHdvcmtbaWZhY2VdLm9wZXJzdGF0ZSA9IG9wZXJzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIV9uZXR3b3JrW2lmYWNlXSkgeyBfbmV0d29ya1tpZmFjZV0gPSB7fTsgfVxuICAgIF9uZXR3b3JrW2lmYWNlXS5yeF9ieXRlcyA9IHJ4X2J5dGVzO1xuICAgIF9uZXR3b3JrW2lmYWNlXS50eF9ieXRlcyA9IHR4X2J5dGVzO1xuICAgIF9uZXR3b3JrW2lmYWNlXS5yeF9zZWMgPSBudWxsO1xuICAgIF9uZXR3b3JrW2lmYWNlXS50eF9zZWMgPSBudWxsO1xuICAgIF9uZXR3b3JrW2lmYWNlXS5tcyA9IERhdGUubm93KCk7XG4gICAgX25ldHdvcmtbaWZhY2VdLmxhc3RfbXMgPSAwO1xuICAgIF9uZXR3b3JrW2lmYWNlXS5vcGVyc3RhdGUgPSBvcGVyc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbmV0d29ya1N0YXRzKGlmYWNlcywgY2FsbGJhY2spIHtcblxuICBsZXQgaWZhY2VzQXJyYXkgPSBbXTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcblxuICAgICAgLy8gZmFsbGJhY2sgLSBpZiBvbmx5IGNhbGxiYWNrIGlzIGdpdmVuXG4gICAgICBpZiAodXRpbC5pc0Z1bmN0aW9uKGlmYWNlcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gaWZhY2VzO1xuICAgICAgICBpZmFjZXNBcnJheSA9IFtnZXREZWZhdWx0TmV0d29ya0ludGVyZmFjZSgpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgaWZhY2VzICE9PSAnc3RyaW5nJyAmJiBpZmFjZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhbXSk7IH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWZhY2VzID0gaWZhY2VzIHx8IGdldERlZmF1bHROZXR3b3JrSW50ZXJmYWNlKCk7XG5cbiAgICAgICAgaWZhY2VzLl9fcHJvdG9fXy50b0xvd2VyQ2FzZSA9IHV0aWwuc3RyaW5nVG9Mb3dlcjtcbiAgICAgICAgaWZhY2VzLl9fcHJvdG9fXy5yZXBsYWNlID0gdXRpbC5zdHJpbmdSZXBsYWNlO1xuICAgICAgICBpZmFjZXMuX19wcm90b19fLnRyaW0gPSB1dGlsLnN0cmluZ1RyaW07XG5cbiAgICAgICAgaWZhY2VzID0gaWZhY2VzLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywrL2csICd8Jyk7XG4gICAgICAgIGlmYWNlc0FycmF5ID0gaWZhY2VzLnNwbGl0KCd8Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICBjb25zdCB3b3JrbG9hZCA9IFtdO1xuICAgICAgaWYgKGlmYWNlc0FycmF5Lmxlbmd0aCAmJiBpZmFjZXNBcnJheVswXS50cmltKCkgPT09ICcqJykge1xuICAgICAgICBpZmFjZXNBcnJheSA9IFtdO1xuICAgICAgICBuZXR3b3JrSW50ZXJmYWNlcyhmYWxzZSkudGhlbihhbGxJRmFjZXMgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGlmYWNlIG9mIGFsbElGYWNlcykge1xuICAgICAgICAgICAgaWZhY2VzQXJyYXkucHVzaChpZmFjZS5pZmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ldHdvcmtTdGF0cyhpZmFjZXNBcnJheS5qb2luKCcsJykpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaWZhY2Ugb2YgaWZhY2VzQXJyYXkpIHtcbiAgICAgICAgICB3b3JrbG9hZC5wdXNoKG5ldHdvcmtTdGF0c1NpbmdsZShpZmFjZS50cmltKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod29ya2xvYWQubGVuZ3RoKSB7XG4gICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB3b3JrbG9hZFxuICAgICAgICAgICkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKGRhdGEpOyB9XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBuZXR3b3JrU3RhdHNTaW5nbGUoaWZhY2UpIHtcblxuICBmdW5jdGlvbiBwYXJzZUxpbmVzV2luZG93c1BlcmZEYXRhKHNlY3Rpb25zKSB7XG4gICAgbGV0IHBlcmZEYXRhID0gW107XG4gICAgZm9yIChsZXQgaSBpbiBzZWN0aW9ucykge1xuICAgICAgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwoc2VjdGlvbnMsIGkpKSB7XG4gICAgICAgIGlmIChzZWN0aW9uc1tpXS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgbGV0IGxpbmVzID0gc2VjdGlvbnNbaV0udHJpbSgpLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgICBwZXJmRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHV0aWwuZ2V0VmFsdWUobGluZXMsICdOYW1lJywgJzonKS5yZXBsYWNlKC9bKClbXFxdIF0rL2csICcnKS5yZXBsYWNlKC8jfFxcLy9nLCAnXycpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICByeF9ieXRlczogcGFyc2VJbnQodXRpbC5nZXRWYWx1ZShsaW5lcywgJ0J5dGVzUmVjZWl2ZWRQZXJzZWMnLCAnOicpLCAxMCksXG4gICAgICAgICAgICByeF9lcnJvcnM6IHBhcnNlSW50KHV0aWwuZ2V0VmFsdWUobGluZXMsICdQYWNrZXRzUmVjZWl2ZWRFcnJvcnMnLCAnOicpLCAxMCksXG4gICAgICAgICAgICByeF9kcm9wcGVkOiBwYXJzZUludCh1dGlsLmdldFZhbHVlKGxpbmVzLCAnUGFja2V0c1JlY2VpdmVkRGlzY2FyZGVkJywgJzonKSwgMTApLFxuICAgICAgICAgICAgdHhfYnl0ZXM6IHBhcnNlSW50KHV0aWwuZ2V0VmFsdWUobGluZXMsICdCeXRlc1NlbnRQZXJzZWMnLCAnOicpLCAxMCksXG4gICAgICAgICAgICB0eF9lcnJvcnM6IHBhcnNlSW50KHV0aWwuZ2V0VmFsdWUobGluZXMsICdQYWNrZXRzT3V0Ym91bmRFcnJvcnMnLCAnOicpLCAxMCksXG4gICAgICAgICAgICB0eF9kcm9wcGVkOiBwYXJzZUludCh1dGlsLmdldFZhbHVlKGxpbmVzLCAnUGFja2V0c091dGJvdW5kRGlzY2FyZGVkJywgJzonKSwgMTApXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBlcmZEYXRhO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICBsZXQgaWZhY2VTYW5pdGl6ZWQgPSAnJztcbiAgICAgIGNvbnN0IHMgPSB1dGlsLmlzUHJvdG90eXBlUG9sbHV0ZWQoKSA/ICctLS0nIDogdXRpbC5zYW5pdGl6ZVNoZWxsU3RyaW5nKGlmYWNlKTtcbiAgICAgIGNvbnN0IGwgPSB1dGlsLm1hdGhNaW4ocy5sZW5ndGgsIDIwMDApO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbDsgaSsrKSB7XG4gICAgICAgIGlmIChzW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZmFjZVNhbml0aXplZCA9IGlmYWNlU2FuaXRpemVkICsgc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICBpZmFjZTogaWZhY2VTYW5pdGl6ZWQsXG4gICAgICAgIG9wZXJzdGF0ZTogJ3Vua25vd24nLFxuICAgICAgICByeF9ieXRlczogMCxcbiAgICAgICAgcnhfZHJvcHBlZDogMCxcbiAgICAgICAgcnhfZXJyb3JzOiAwLFxuICAgICAgICB0eF9ieXRlczogMCxcbiAgICAgICAgdHhfZHJvcHBlZDogMCxcbiAgICAgICAgdHhfZXJyb3JzOiAwLFxuICAgICAgICByeF9zZWM6IG51bGwsXG4gICAgICAgIHR4X3NlYzogbnVsbCxcbiAgICAgICAgbXM6IDBcbiAgICAgIH07XG5cbiAgICAgIGxldCBvcGVyc3RhdGUgPSAndW5rbm93bic7XG4gICAgICBsZXQgcnhfYnl0ZXMgPSAwO1xuICAgICAgbGV0IHR4X2J5dGVzID0gMDtcbiAgICAgIGxldCByeF9kcm9wcGVkID0gMDtcbiAgICAgIGxldCByeF9lcnJvcnMgPSAwO1xuICAgICAgbGV0IHR4X2Ryb3BwZWQgPSAwO1xuICAgICAgbGV0IHR4X2Vycm9ycyA9IDA7XG5cbiAgICAgIGxldCBjbWQsIGxpbmVzLCBzdGF0cztcbiAgICAgIGlmICghX25ldHdvcmtbaWZhY2VTYW5pdGl6ZWRdIHx8IChfbmV0d29ya1tpZmFjZVNhbml0aXplZF0gJiYgIV9uZXR3b3JrW2lmYWNlU2FuaXRpemVkXS5tcykgfHwgKF9uZXR3b3JrW2lmYWNlU2FuaXRpemVkXSAmJiBfbmV0d29ya1tpZmFjZVNhbml0aXplZF0ubXMgJiYgRGF0ZS5ub3coKSAtIF9uZXR3b3JrW2lmYWNlU2FuaXRpemVkXS5tcyA+PSA1MDApKSB7XG4gICAgICAgIGlmIChfbGludXgpIHtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYygnL3N5cy9jbGFzcy9uZXQvJyArIGlmYWNlU2FuaXRpemVkKSkge1xuICAgICAgICAgICAgY21kID1cbiAgICAgICAgICAgICAgJ2NhdCAvc3lzL2NsYXNzL25ldC8nICsgaWZhY2VTYW5pdGl6ZWQgKyAnL29wZXJzdGF0ZTsgJyArXG4gICAgICAgICAgICAgICdjYXQgL3N5cy9jbGFzcy9uZXQvJyArIGlmYWNlU2FuaXRpemVkICsgJy9zdGF0aXN0aWNzL3J4X2J5dGVzOyAnICtcbiAgICAgICAgICAgICAgJ2NhdCAvc3lzL2NsYXNzL25ldC8nICsgaWZhY2VTYW5pdGl6ZWQgKyAnL3N0YXRpc3RpY3MvdHhfYnl0ZXM7ICcgK1xuICAgICAgICAgICAgICAnY2F0IC9zeXMvY2xhc3MvbmV0LycgKyBpZmFjZVNhbml0aXplZCArICcvc3RhdGlzdGljcy9yeF9kcm9wcGVkOyAnICtcbiAgICAgICAgICAgICAgJ2NhdCAvc3lzL2NsYXNzL25ldC8nICsgaWZhY2VTYW5pdGl6ZWQgKyAnL3N0YXRpc3RpY3MvcnhfZXJyb3JzOyAnICtcbiAgICAgICAgICAgICAgJ2NhdCAvc3lzL2NsYXNzL25ldC8nICsgaWZhY2VTYW5pdGl6ZWQgKyAnL3N0YXRpc3RpY3MvdHhfZHJvcHBlZDsgJyArXG4gICAgICAgICAgICAgICdjYXQgL3N5cy9jbGFzcy9uZXQvJyArIGlmYWNlU2FuaXRpemVkICsgJy9zdGF0aXN0aWNzL3R4X2Vycm9yczsgJztcbiAgICAgICAgICAgIGV4ZWMoY21kLCBmdW5jdGlvbiAoZXJyb3IsIHN0ZG91dCkge1xuICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgbGluZXMgPSBzdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgb3BlcnN0YXRlID0gbGluZXNbMF0udHJpbSgpO1xuICAgICAgICAgICAgICAgIHJ4X2J5dGVzID0gcGFyc2VJbnQobGluZXNbMV0sIDEwKTtcbiAgICAgICAgICAgICAgICB0eF9ieXRlcyA9IHBhcnNlSW50KGxpbmVzWzJdLCAxMCk7XG4gICAgICAgICAgICAgICAgcnhfZHJvcHBlZCA9IHBhcnNlSW50KGxpbmVzWzNdLCAxMCk7XG4gICAgICAgICAgICAgICAgcnhfZXJyb3JzID0gcGFyc2VJbnQobGluZXNbNF0sIDEwKTtcbiAgICAgICAgICAgICAgICB0eF9kcm9wcGVkID0gcGFyc2VJbnQobGluZXNbNV0sIDEwKTtcbiAgICAgICAgICAgICAgICB0eF9lcnJvcnMgPSBwYXJzZUludChsaW5lc1s2XSwgMTApO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsY05ldHdvcmtTcGVlZChpZmFjZVNhbml0aXplZCwgcnhfYnl0ZXMsIHR4X2J5dGVzLCBvcGVyc3RhdGUsIHJ4X2Ryb3BwZWQsIHJ4X2Vycm9ycywgdHhfZHJvcHBlZCwgdHhfZXJyb3JzKTtcblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChfZnJlZWJzZCB8fCBfb3BlbmJzZCB8fCBfbmV0YnNkKSB7XG4gICAgICAgICAgY21kID0gJ25ldHN0YXQgLWlibmRJICcgKyBpZmFjZVNhbml0aXplZDsgICAvLyBsZ3RtIFtqcy9zaGVsbC1jb21tYW5kLWNvbnN0cnVjdGVkLWZyb20taW5wdXRdXG4gICAgICAgICAgZXhlYyhjbWQsIGZ1bmN0aW9uIChlcnJvciwgc3Rkb3V0KSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgIGxpbmVzID0gc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldLnJlcGxhY2UoLyArL2csICcgJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICBpZiAobGluZSAmJiBsaW5lWzBdICYmIGxpbmVbN10gJiYgbGluZVsxMF0pIHtcbiAgICAgICAgICAgICAgICAgIHJ4X2J5dGVzID0gcnhfYnl0ZXMgKyBwYXJzZUludChsaW5lWzddKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsaW5lWzZdLnRyaW0oKSAhPT0gJy0nKSB7IHJ4X2Ryb3BwZWQgPSByeF9kcm9wcGVkICsgcGFyc2VJbnQobGluZVs2XSk7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChsaW5lWzVdLnRyaW0oKSAhPT0gJy0nKSB7IHJ4X2Vycm9ycyA9IHJ4X2Vycm9ycyArIHBhcnNlSW50KGxpbmVbNV0pOyB9XG4gICAgICAgICAgICAgICAgICB0eF9ieXRlcyA9IHR4X2J5dGVzICsgcGFyc2VJbnQobGluZVsxMF0pO1xuICAgICAgICAgICAgICAgICAgaWYgKGxpbmVbMTJdLnRyaW0oKSAhPT0gJy0nKSB7IHR4X2Ryb3BwZWQgPSB0eF9kcm9wcGVkICsgcGFyc2VJbnQobGluZVsxMl0pOyB9XG4gICAgICAgICAgICAgICAgICBpZiAobGluZVs5XS50cmltKCkgIT09ICctJykgeyB0eF9lcnJvcnMgPSB0eF9lcnJvcnMgKyBwYXJzZUludChsaW5lWzldKTsgfVxuICAgICAgICAgICAgICAgICAgb3BlcnN0YXRlID0gJ3VwJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsY05ldHdvcmtTcGVlZChpZmFjZVNhbml0aXplZCwgcnhfYnl0ZXMsIHR4X2J5dGVzLCBvcGVyc3RhdGUsIHJ4X2Ryb3BwZWQsIHJ4X2Vycm9ycywgdHhfZHJvcHBlZCwgdHhfZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2Rhcndpbikge1xuICAgICAgICAgIGNtZCA9ICdpZmNvbmZpZyAnICsgaWZhY2VTYW5pdGl6ZWQgKyAnIHwgZ3JlcCBcInN0YXR1c1wiJzsgICAgLy8gbGd0bSBbanMvc2hlbGwtY29tbWFuZC1jb25zdHJ1Y3RlZC1mcm9tLWlucHV0XVxuICAgICAgICAgIGV4ZWMoY21kLCBmdW5jdGlvbiAoZXJyb3IsIHN0ZG91dCkge1xuICAgICAgICAgICAgcmVzdWx0Lm9wZXJzdGF0ZSA9IChzdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnOicpWzFdIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICByZXN1bHQub3BlcnN0YXRlID0gKHJlc3VsdC5vcGVyc3RhdGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXN1bHQub3BlcnN0YXRlID0gKHJlc3VsdC5vcGVyc3RhdGUgPT09ICdhY3RpdmUnID8gJ3VwJyA6IChyZXN1bHQub3BlcnN0YXRlID09PSAnaW5hY3RpdmUnID8gJ2Rvd24nIDogJ3Vua25vd24nKSk7XG4gICAgICAgICAgICBjbWQgPSAnbmV0c3RhdCAtYmRJICcgKyBpZmFjZVNhbml0aXplZDsgICAvLyBsZ3RtIFtqcy9zaGVsbC1jb21tYW5kLWNvbnN0cnVjdGVkLWZyb20taW5wdXRdXG4gICAgICAgICAgICBleGVjKGNtZCwgZnVuY3Rpb24gKGVycm9yLCBzdGRvdXQpIHtcbiAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIGxpbmVzID0gc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGxlc3MgdGhhbiAyIGxpbmVzLCBubyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2Ugd2FzIGZvdW5kXG4gICAgICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEgJiYgbGluZXNbMV0udHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgLy8gc2tpcCBoZWFkZXIgbGluZVxuICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBzZWNvbmQgbGluZSBiZWNhdXNlIGl0IGlzIHRpZWQgdG8gdGhlIE5JQyBpbnN0ZWFkIG9mIHRoZSBpcHY0IG9yIGlwdjYgYWRkcmVzc1xuICAgICAgICAgICAgICAgICAgc3RhdHMgPSBsaW5lc1sxXS5yZXBsYWNlKC8gKy9nLCAnICcpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBzdGF0cy5sZW5ndGggPiAxMSA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgcnhfYnl0ZXMgPSBwYXJzZUludChzdGF0c1tvZmZzZXQgKyA1XSk7XG4gICAgICAgICAgICAgICAgICByeF9kcm9wcGVkID0gcGFyc2VJbnQoc3RhdHNbb2Zmc2V0ICsgMTBdKTtcbiAgICAgICAgICAgICAgICAgIHJ4X2Vycm9ycyA9IHBhcnNlSW50KHN0YXRzW29mZnNldCArIDRdKTtcbiAgICAgICAgICAgICAgICAgIHR4X2J5dGVzID0gcGFyc2VJbnQoc3RhdHNbb2Zmc2V0ICsgOF0pO1xuICAgICAgICAgICAgICAgICAgdHhfZHJvcHBlZCA9IHBhcnNlSW50KHN0YXRzW29mZnNldCArIDEwXSk7XG4gICAgICAgICAgICAgICAgICB0eF9lcnJvcnMgPSBwYXJzZUludChzdGF0c1tvZmZzZXQgKyA3XSk7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBjYWxjTmV0d29ya1NwZWVkKGlmYWNlU2FuaXRpemVkLCByeF9ieXRlcywgdHhfYnl0ZXMsIHJlc3VsdC5vcGVyc3RhdGUsIHJ4X2Ryb3BwZWQsIHJ4X2Vycm9ycywgdHhfZHJvcHBlZCwgdHhfZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF93aW5kb3dzKSB7XG4gICAgICAgICAgbGV0IHBlcmZEYXRhID0gW107XG4gICAgICAgICAgbGV0IGlmYWNlTmFtZSA9IGlmYWNlU2FuaXRpemVkO1xuXG4gICAgICAgICAgLy8gUGVyZm9ybWFuY2UgRGF0YVxuICAgICAgICAgIHV0aWwucG93ZXJTaGVsbCgnR2V0LUNpbUluc3RhbmNlIFdpbjMyX1BlcmZSYXdEYXRhX1RjcGlwX05ldHdvcmtJbnRlcmZhY2UgfCBzZWxlY3QgTmFtZSxCeXRlc1JlY2VpdmVkUGVyc2VjLFBhY2tldHNSZWNlaXZlZEVycm9ycyxQYWNrZXRzUmVjZWl2ZWREaXNjYXJkZWQsQnl0ZXNTZW50UGVyc2VjLFBhY2tldHNPdXRib3VuZEVycm9ycyxQYWNrZXRzT3V0Ym91bmREaXNjYXJkZWQgfCBmbCcpLnRoZW4oKHN0ZG91dCwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHNlY3Rpb25zID0gc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQoL1xcblxccypcXG4vKTtcbiAgICAgICAgICAgICAgcGVyZkRhdGEgPSBwYXJzZUxpbmVzV2luZG93c1BlcmZEYXRhKHBzZWN0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5ldHdvcmsgSW50ZXJmYWNlc1xuICAgICAgICAgICAgbmV0d29ya0ludGVyZmFjZXMoZmFsc2UpLnRoZW4oaW50ZXJmYWNlcyA9PiB7XG4gICAgICAgICAgICAgIC8vIGdldCBieXRlcyBzZW50LCByZWNlaXZlZCBmcm9tIHBlcmZEYXRhIGJ5IG5hbWVcbiAgICAgICAgICAgICAgcnhfYnl0ZXMgPSAwO1xuICAgICAgICAgICAgICB0eF9ieXRlcyA9IDA7XG4gICAgICAgICAgICAgIHBlcmZEYXRhLmZvckVhY2goZGV0YWlsID0+IHtcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2VzLmZvckVhY2goZGV0ID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICgoZGV0LmlmYWNlLnRvTG93ZXJDYXNlKCkgPT09IGlmYWNlU2FuaXRpemVkLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGV0Lm1hYy50b0xvd2VyQ2FzZSgpID09PSBpZmFjZVNhbml0aXplZC50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgIGRldC5pcDQudG9Mb3dlckNhc2UoKSA9PT0gaWZhY2VTYW5pdGl6ZWQudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgICAgICBkZXQuaXA2LnRvTG93ZXJDYXNlKCkgPT09IGlmYWNlU2FuaXRpemVkLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGV0LmlmYWNlTmFtZS5yZXBsYWNlKC9bKClbXFxdIF0rL2csICcnKS5yZXBsYWNlKC8jfFxcLy9nLCAnXycpLnRvTG93ZXJDYXNlKCkgPT09IGlmYWNlU2FuaXRpemVkLnJlcGxhY2UoL1soKVtcXF0gXSsvZywgJycpLnJlcGxhY2UoJyMnLCAnXycpLnRvTG93ZXJDYXNlKCkpICYmXG4gICAgICAgICAgICAgICAgICAgIChkZXQuaWZhY2VOYW1lLnJlcGxhY2UoL1soKVtcXF0gXSsvZywgJycpLnJlcGxhY2UoLyN8XFwvL2csICdfJykudG9Mb3dlckNhc2UoKSA9PT0gZGV0YWlsLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmYWNlTmFtZSA9IGRldC5pZmFjZTtcbiAgICAgICAgICAgICAgICAgICAgcnhfYnl0ZXMgPSBkZXRhaWwucnhfYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgIHJ4X2Ryb3BwZWQgPSBkZXRhaWwucnhfZHJvcHBlZDtcbiAgICAgICAgICAgICAgICAgICAgcnhfZXJyb3JzID0gZGV0YWlsLnJ4X2Vycm9ycztcbiAgICAgICAgICAgICAgICAgICAgdHhfYnl0ZXMgPSBkZXRhaWwudHhfYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgIHR4X2Ryb3BwZWQgPSBkZXRhaWwudHhfZHJvcHBlZDtcbiAgICAgICAgICAgICAgICAgICAgdHhfZXJyb3JzID0gZGV0YWlsLnR4X2Vycm9ycztcbiAgICAgICAgICAgICAgICAgICAgb3BlcnN0YXRlID0gZGV0Lm9wZXJzdGF0ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChyeF9ieXRlcyAmJiB0eF9ieXRlcykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGNOZXR3b3JrU3BlZWQoaWZhY2VOYW1lLCBwYXJzZUludChyeF9ieXRlcyksIHBhcnNlSW50KHR4X2J5dGVzKSwgb3BlcnN0YXRlLCByeF9kcm9wcGVkLCByeF9lcnJvcnMsIHR4X2Ryb3BwZWQsIHR4X2Vycm9ycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5yeF9ieXRlcyA9IF9uZXR3b3JrW2lmYWNlU2FuaXRpemVkXS5yeF9ieXRlcztcbiAgICAgICAgcmVzdWx0LnR4X2J5dGVzID0gX25ldHdvcmtbaWZhY2VTYW5pdGl6ZWRdLnR4X2J5dGVzO1xuICAgICAgICByZXN1bHQucnhfc2VjID0gX25ldHdvcmtbaWZhY2VTYW5pdGl6ZWRdLnJ4X3NlYztcbiAgICAgICAgcmVzdWx0LnR4X3NlYyA9IF9uZXR3b3JrW2lmYWNlU2FuaXRpemVkXS50eF9zZWM7XG4gICAgICAgIHJlc3VsdC5tcyA9IF9uZXR3b3JrW2lmYWNlU2FuaXRpemVkXS5sYXN0X21zO1xuICAgICAgICByZXN1bHQub3BlcnN0YXRlID0gX25ldHdvcmtbaWZhY2VTYW5pdGl6ZWRdLm9wZXJzdGF0ZTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0cy5uZXR3b3JrU3RhdHMgPSBuZXR3b3JrU3RhdHM7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBORVQgLSBjb25uZWN0aW9ucyAoc29ja2V0cylcblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc05hbWUocHJvY2Vzc2VzLCBwaWQpIHtcbiAgbGV0IGNtZCA9ICcnO1xuICBwcm9jZXNzZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IGxpbmUuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBpZCA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCkgfHwgLTE7XG4gICAgaWYgKGlkID09PSBwaWQpIHtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICBjbWQgPSBwYXJ0cy5qb2luKCcgJykuc3BsaXQoJzonKVswXTtcbiAgICB9XG4gIH0pO1xuICBjbWQgPSBjbWQuc3BsaXQoJyAtJylbMF07XG4gIC8vIHJldHVybiBjbWQ7XG4gIGNvbnN0IGNtZFBhcnRzID0gY21kLnNwbGl0KCcvJyk7XG4gIHJldHVybiBjbWRQYXJ0c1tjbWRQYXJ0cy5sZW5ndGggLSAxXTtcbn1cblxuZnVuY3Rpb24gbmV0d29ya0Nvbm5lY3Rpb25zKGNhbGxiYWNrKSB7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICBpZiAoX2xpbnV4IHx8IF9mcmVlYnNkIHx8IF9vcGVuYnNkIHx8IF9uZXRic2QpIHtcbiAgICAgICAgbGV0IGNtZCA9ICdleHBvcnQgTENfQUxMPUM7IG5ldHN0YXQgLXR1bmFwIHwgZ3JlcCBcIkVTVEFCTElTSEVEXFxcXHxTWU5fU0VOVFxcXFx8U1lOX1JFQ1ZcXFxcfEZJTl9XQUlUMVxcXFx8RklOX1dBSVQyXFxcXHxUSU1FX1dBSVRcXFxcfENMT1NFXFxcXHxDTE9TRV9XQUlUXFxcXHxMQVNUX0FDS1xcXFx8TElTVEVOXFxcXHxDTE9TSU5HXFxcXHxVTktOT1dOXCI7IHVuc2V0IExDX0FMTCc7XG4gICAgICAgIGlmIChfZnJlZWJzZCB8fCBfb3BlbmJzZCB8fCBfbmV0YnNkKSB7IGNtZCA9ICdleHBvcnQgTENfQUxMPUM7IG5ldHN0YXQgLW5hIHwgZ3JlcCBcIkVTVEFCTElTSEVEXFxcXHxTWU5fU0VOVFxcXFx8U1lOX1JFQ1ZcXFxcfEZJTl9XQUlUMVxcXFx8RklOX1dBSVQyXFxcXHxUSU1FX1dBSVRcXFxcfENMT1NFXFxcXHxDTE9TRV9XQUlUXFxcXHxMQVNUX0FDS1xcXFx8TElTVEVOXFxcXHxDTE9TSU5HXFxcXHxVTktOT1dOXCI7IHVuc2V0IExDX0FMTCc7IH1cbiAgICAgICAgZXhlYyhjbWQsIHsgbWF4QnVmZmVyOiAxMDI0ICogMjAwMDAgfSwgZnVuY3Rpb24gKGVycm9yLCBzdGRvdXQpIHtcbiAgICAgICAgICBsZXQgbGluZXMgPSBzdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgaWYgKCFlcnJvciAmJiAobGluZXMubGVuZ3RoID4gMSB8fCBsaW5lc1swXSAhPSAnJykpIHtcbiAgICAgICAgICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvICsvZywgJyAnKS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPj0gNykge1xuICAgICAgICAgICAgICAgIGxldCBsb2NhbGlwID0gbGluZVszXTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxwb3J0ID0gJyc7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsYWRkcmVzcyA9IGxpbmVbM10uc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxhZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FscG9ydCA9IGxvY2FsYWRkcmVzc1tsb2NhbGFkZHJlc3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICBsb2NhbGFkZHJlc3MucG9wKCk7XG4gICAgICAgICAgICAgICAgICBsb2NhbGlwID0gbG9jYWxhZGRyZXNzLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBlZXJpcCA9IGxpbmVbNF07XG4gICAgICAgICAgICAgICAgbGV0IHBlZXJwb3J0ID0gJyc7XG4gICAgICAgICAgICAgICAgbGV0IHBlZXJhZGRyZXNzID0gbGluZVs0XS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgIGlmIChwZWVyYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICBwZWVycG9ydCA9IHBlZXJhZGRyZXNzW3BlZXJhZGRyZXNzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgcGVlcmFkZHJlc3MucG9wKCk7XG4gICAgICAgICAgICAgICAgICBwZWVyaXAgPSBwZWVyYWRkcmVzcy5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb25uc3RhdGUgPSBsaW5lWzVdO1xuICAgICAgICAgICAgICAgIGxldCBwcm9jID0gbGluZVs2XS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbm5zdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbDogbGluZVswXSxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxBZGRyZXNzOiBsb2NhbGlwLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbFBvcnQ6IGxvY2FscG9ydCxcbiAgICAgICAgICAgICAgICAgICAgcGVlckFkZHJlc3M6IHBlZXJpcCxcbiAgICAgICAgICAgICAgICAgICAgcGVlclBvcnQ6IHBlZXJwb3J0LFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogY29ubnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBwaWQ6IHByb2NbMF0gJiYgcHJvY1swXSAhPT0gJy0nID8gcGFyc2VJbnQocHJvY1swXSwgMTApIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2VzczogcHJvY1sxXSA/IHByb2NbMV0uc3BsaXQoJyAnKVswXS5zcGxpdCgnOicpWzBdIDogJydcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY21kID0gJ3NzIC10dW5hcCB8IGdyZXAgXCJFU1RBQlxcXFx8U1lOLVNFTlRcXFxcfFNZTi1SRUNWXFxcXHxGSU4tV0FJVDFcXFxcfEZJTi1XQUlUMlxcXFx8VElNRS1XQUlUXFxcXHxDTE9TRVxcXFx8Q0xPU0UtV0FJVFxcXFx8TEFTVC1BQ0tcXFxcfExJU1RFTlxcXFx8Q0xPU0lOR1wiJztcbiAgICAgICAgICAgIGV4ZWMoY21kLCB7IG1heEJ1ZmZlcjogMTAyNCAqIDIwMDAwIH0sIGZ1bmN0aW9uIChlcnJvciwgc3Rkb3V0KSB7XG5cbiAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIGxldCBsaW5lcyA9IHN0ZG91dC50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gKy9nLCAnICcpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPj0gNikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYWxpcCA9IGxpbmVbNF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBsb2NhbHBvcnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2FsYWRkcmVzcyA9IGxpbmVbNF0uc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWxwb3J0ID0gbG9jYWxhZGRyZXNzW2xvY2FsYWRkcmVzcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbGFkZHJlc3MucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWxpcCA9IGxvY2FsYWRkcmVzcy5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IHBlZXJpcCA9IGxpbmVbNV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBwZWVycG9ydCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGVlcmFkZHJlc3MgPSBsaW5lWzVdLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWVyYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVlcnBvcnQgPSBwZWVyYWRkcmVzc1twZWVyYWRkcmVzcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyYWRkcmVzcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyaXAgPSBwZWVyYWRkcmVzcy5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5zdGF0ZSA9IGxpbmVbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uc3RhdGUgPT09ICdFU1RBQicpIHsgY29ubnN0YXRlID0gJ0VTVEFCTElTSEVEJzsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlID09PSAnVElNRS1XQUlUJykgeyBjb25uc3RhdGUgPSAnVElNRV9XQUlUJzsgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgcGlkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb2Nlc3MgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID49IDcgJiYgbGluZVs2XS5pbmRleE9mKCd1c2VyczonKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHByb2MgPSBsaW5lWzZdLnJlcGxhY2UoJ3VzZXJzOigoXCInLCAnJykucmVwbGFjZSgvXCIvZywgJycpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2MubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2NbMF0uc3BsaXQoJyAnKVswXS5zcGxpdCgnOicpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGlkID0gcGFyc2VJbnQocHJvY1sxXSwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w6IGxpbmVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsaXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvcnQ6IGxvY2FscG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJBZGRyZXNzOiBwZWVyaXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZWVyUG9ydDogcGVlcnBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogY29ubnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKF9kYXJ3aW4pIHtcbiAgICAgICAgLy8gbGV0IGNtZCA9ICduZXRzdGF0IC1uYXR2IHwgZ3JlcCBcIkVTVEFCTElTSEVEXFxcXHxTWU5fU0VOVFxcXFx8U1lOX1JFQ1ZcXFxcfEZJTl9XQUlUMVxcXFx8RklOX1dBSVQyXFxcXHxUSU1FX1dBSVRcXFxcfENMT1NFXFxcXHxDTE9TRV9XQUlUXFxcXHxMQVNUX0FDS1xcXFx8TElTVEVOXFxcXHxDTE9TSU5HXFxcXHxVTktOT1dOXCInO1xuICAgICAgICBsZXQgY21kID0gJ25ldHN0YXQgLW5hdHZsbiB8IGdyZXAgXCJ0Y3A0XFxcXHx0Y3A2XFxcXHx1ZHA0XFxcXHx1ZHA2XCInO1xuICAgICAgICBjb25zdCBzdGF0ZXMgPSAnRVNUQUJMSVNIRUR8U1lOX1NFTlR8U1lOX1JFQ1Z8RklOX1dBSVQxfEZJTl9XQUlUMnxUSU1FX1dBSVR8Q0xPU0V8Q0xPU0VfV0FJVHxMQVNUX0FDS3xMSVNURU58Q0xPU0lOR3xVTktOT1dOJztcbiAgICAgICAgZXhlYyhjbWQsIHsgbWF4QnVmZmVyOiAxMDI0ICogMjAwMDAgfSwgZnVuY3Rpb24gKGVycm9yLCBzdGRvdXQpIHtcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBleGVjKCdwcyAtYXhvIHBpZCxjb21tYW5kJywgeyBtYXhCdWZmZXI6IDEwMjQgKiAyMDAwMCB9LCBmdW5jdGlvbiAoZXJyMiwgc3Rkb3V0Mikge1xuICAgICAgICAgICAgICBsZXQgcHJvY2Vzc2VzID0gc3Rkb3V0Mi50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gcHJvY2Vzc2VzLm1hcCgobGluZSA9PiB7IHJldHVybiBsaW5lLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCAnICcpOyB9KSk7XG4gICAgICAgICAgICAgIGxldCBsaW5lcyA9IHN0ZG91dC50b1N0cmluZygpLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvICsvZywgJyAnKS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+PSA4KSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbG9jYWxpcCA9IGxpbmVbM107XG4gICAgICAgICAgICAgICAgICBsZXQgbG9jYWxwb3J0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBsZXQgbG9jYWxhZGRyZXNzID0gbGluZVszXS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FscG9ydCA9IGxvY2FsYWRkcmVzc1tsb2NhbGFkZHJlc3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsYWRkcmVzcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxpcCA9IGxvY2FsYWRkcmVzcy5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsZXQgcGVlcmlwID0gbGluZVs0XTtcbiAgICAgICAgICAgICAgICAgIGxldCBwZWVycG9ydCA9ICcnO1xuICAgICAgICAgICAgICAgICAgbGV0IHBlZXJhZGRyZXNzID0gbGluZVs0XS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZXJhZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVlcnBvcnQgPSBwZWVyYWRkcmVzc1twZWVyYWRkcmVzcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgcGVlcmFkZHJlc3MucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHBlZXJpcCA9IHBlZXJhZGRyZXNzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1N0YXRlID0gc3RhdGVzLmluZGV4T2YobGluZVs1XSkgPj0gMDtcbiAgICAgICAgICAgICAgICAgIGxldCBjb25uc3RhdGUgPSBoYXNTdGF0ZSA/IGxpbmVbNV0gOiAnVU5LTk9XTic7XG4gICAgICAgICAgICAgICAgICBsZXQgcGlkID0gcGFyc2VJbnQobGluZVs4ICsgKGhhc1N0YXRlID8gMCA6IC0xKV0sIDEwKTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb25uc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sOiBsaW5lWzBdLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxpcCxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvcnQ6IGxvY2FscG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQWRkcmVzczogcGVlcmlwLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJQb3J0OiBwZWVycG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogY29ubnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIHBpZDogcGlkLFxuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3M6IGdldFByb2Nlc3NOYW1lKHByb2Nlc3NlcywgcGlkKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChfd2luZG93cykge1xuICAgICAgICBsZXQgY21kID0gJ25ldHN0YXQgLW5hbyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZXhlYyhjbWQsIHV0aWwuZXhlY09wdHNXaW4sIGZ1bmN0aW9uIChlcnJvciwgc3Rkb3V0KSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG5cbiAgICAgICAgICAgICAgbGV0IGxpbmVzID0gc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQoJ1xcclxcbicpO1xuXG4gICAgICAgICAgICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCkucmVwbGFjZSgvICsvZywgJyAnKS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbG9jYWxpcCA9IGxpbmVbMV07XG4gICAgICAgICAgICAgICAgICBsZXQgbG9jYWxwb3J0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBsZXQgbG9jYWxhZGRyZXNzID0gbGluZVsxXS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FscG9ydCA9IGxvY2FsYWRkcmVzc1tsb2NhbGFkZHJlc3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsYWRkcmVzcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxpcCA9IGxvY2FsYWRkcmVzcy5qb2luKCc6Jyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsb2NhbGlwID0gbG9jYWxpcC5yZXBsYWNlKC9cXFsvZywgJycpLnJlcGxhY2UoL1xcXS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICBsZXQgcGVlcmlwID0gbGluZVsyXTtcbiAgICAgICAgICAgICAgICAgIGxldCBwZWVycG9ydCA9ICcnO1xuICAgICAgICAgICAgICAgICAgbGV0IHBlZXJhZGRyZXNzID0gbGluZVsyXS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZXJhZGRyZXNzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVlcnBvcnQgPSBwZWVyYWRkcmVzc1twZWVyYWRkcmVzcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgcGVlcmFkZHJlc3MucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHBlZXJpcCA9IHBlZXJhZGRyZXNzLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHBlZXJpcCA9IHBlZXJpcC5yZXBsYWNlKC9cXFsvZywgJycpLnJlcGxhY2UoL1xcXS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICBsZXQgcGlkID0gdXRpbC50b0ludChsaW5lWzRdKTtcbiAgICAgICAgICAgICAgICAgIGxldCBjb25uc3RhdGUgPSBsaW5lWzNdO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbm5zdGF0ZSA9PT0gJ0hFUkdFU1RFTExUJykgeyBjb25uc3RhdGUgPSAnRVNUQUJMSVNIRUQnOyB9XG4gICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlLnN0YXJ0c1dpdGgoJ0FCSCcpKSB7IGNvbm5zdGF0ZSA9ICdMSVNURU4nOyB9XG4gICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlID09PSAnU0NITElFU1NFTl9XQVJURU4nKSB7IGNvbm5zdGF0ZSA9ICdDTE9TRV9XQUlUJzsgfVxuICAgICAgICAgICAgICAgICAgaWYgKGNvbm5zdGF0ZSA9PT0gJ1dBUlRFTkQnKSB7IGNvbm5zdGF0ZSA9ICdUSU1FX1dBSVQnOyB9XG4gICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlID09PSAnU1lOX0dFU0VOREVUJykgeyBjb25uc3RhdGUgPSAnU1lOX1NFTlQnOyB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjb25uc3RhdGUgPT09ICdMSVNURU5JTkcnKSB7IGNvbm5zdGF0ZSA9ICdMSVNURU4nOyB9XG4gICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlID09PSAnU1lOX1JFQ0VJVkVEJykgeyBjb25uc3RhdGUgPSAnU1lOX1JFQ1YnOyB9XG4gICAgICAgICAgICAgICAgICBpZiAoY29ubnN0YXRlID09PSAnRklOX1dBSVRfMScpIHsgY29ubnN0YXRlID0gJ0ZJTl9XQUlUMSc7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChjb25uc3RhdGUgPT09ICdGSU5fV0FJVF8yJykgeyBjb25uc3RhdGUgPSAnRklOX1dBSVQyJzsgfVxuICAgICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0udG9Mb3dlckNhc2UoKSAhPT0gJ3VkcCcgJiYgY29ubnN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbDogbGluZVswXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxpcCxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvcnQ6IGxvY2FscG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQWRkcmVzczogcGVlcmlwLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJQb3J0OiBwZWVycG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogY29ubnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIHBpZCxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZVswXS50b0xvd2VyQ2FzZSgpID09PSAndWRwJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w6IGxpbmVbMF0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsaXAsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWxQb3J0OiBsb2NhbHBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckFkZHJlc3M6IHBlZXJpcCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyUG9ydDogcGVlcnBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHBpZDogcGFyc2VJbnQobGluZVszXSwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3M6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKHJlc3VsdCk7IH1cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydHMubmV0d29ya0Nvbm5lY3Rpb25zID0gbmV0d29ya0Nvbm5lY3Rpb25zO1xuXG5mdW5jdGlvbiBuZXR3b3JrR2F0ZXdheURlZmF1bHQoY2FsbGJhY2spIHtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgIGlmIChfbGludXggfHwgX2ZyZWVic2QgfHwgX29wZW5ic2QgfHwgX25ldGJzZCkge1xuICAgICAgICBsZXQgY21kID0gJ2lwIHJvdXRlIGdldCAxJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBleGVjKGNtZCwgeyBtYXhCdWZmZXI6IDEwMjQgKiAyMDAwMCB9LCBmdW5jdGlvbiAoZXJyb3IsIHN0ZG91dCkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICBsZXQgbGluZXMgPSBzdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lcyAmJiBsaW5lc1swXSA/IGxpbmVzWzBdIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwYXJ0cyA9IGxpbmUuc3BsaXQoJyB2aWEgJyk7XG4gICAgICAgICAgICAgIGlmIChwYXJ0cyAmJiBwYXJ0c1sxXSkge1xuICAgICAgICAgICAgICAgIHBhcnRzID0gcGFydHNbMV0uc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJ0c1swXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKHJlc3VsdCk7IH1cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChfZGFyd2luKSB7XG4gICAgICAgIGxldCBjbWQgPSAncm91dGUgLW4gZ2V0IGRlZmF1bHQnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV4ZWMoY21kLCB7IG1heEJ1ZmZlcjogMTAyNCAqIDIwMDAwIH0sIGZ1bmN0aW9uIChlcnJvciwgc3Rkb3V0KSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKTtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdXRpbC5nZXRWYWx1ZShsaW5lcywgJ2dhdGV3YXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgIGNtZCA9ICduZXRzdGF0IC1ybiB8IGF3ayBcXCcvZGVmYXVsdC8ge3ByaW50ICQyfVxcJyc7XG4gICAgICAgICAgICAgIGV4ZWMoY21kLCB7IG1heEJ1ZmZlcjogMTAyNCAqIDIwMDAwIH0sIGZ1bmN0aW9uIChlcnJvciwgc3Rkb3V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSBzdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnXFxuJykubWFwKGxpbmUgPT4gbGluZS50cmltKCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxpbmVzLmZpbmQobGluZSA9PiAoL14oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KSQvLnRlc3QobGluZSkpKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoX3dpbmRvd3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBleGVjKCduZXRzdGF0IC1yJywgdXRpbC5leGVjT3B0c1dpbiwgZnVuY3Rpb24gKGVycm9yLCBzdGRvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQob3MuRU9MKTtcbiAgICAgICAgICAgIGxpbmVzLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJzAuMC4wLjAgMC4wLjAuMCcpID4gLTEgJiYgISgvW2EtekEtWl0vLnRlc3QobGluZSkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSA1ICYmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSkuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICB1dGlsLnBvd2VyU2hlbGwoJ0dldC1DaW1JbnN0YW5jZSAtQ2xhc3NOYW1lIFdpbjMyX0lQNFJvdXRlVGFibGUgfCBXaGVyZS1PYmplY3QgeyAkXy5EZXN0aW5hdGlvbiAtZXEgXFwnMC4wLjAuMFxcJyAtYW5kICRfLk1hc2sgLWVxIFxcJzAuMC4wLjBcXCcgfScpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBsaW5lcyA9IGRhdGEudG9TdHJpbmcoKS5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSAmJiAhcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHV0aWwuZ2V0VmFsdWUobGluZXMsICdOZXh0SG9wJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAgIGV4ZWMoJ2lwY29uZmlnJywgdXRpbC5leGVjT3B0c1dpbiwgZnVuY3Rpb24gKGVycm9yLCBzdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxldCBsaW5lcyA9IHN0ZG91dC50b1N0cmluZygpLnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgbGluZSA9IGxpbmUudHJpbSgpLnJlcGxhY2UoL1xcLiAvZywgJycpO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBsaW5lID0gbGluZS50cmltKCkucmVwbGFjZSgvICsvZywgJycpO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgaWYgKChwYXJ0c1swXS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3N0YW5kYXJkZ2F0ZScpIHx8IHBhcnRzWzBdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ2F0ZXdheScpID4gLTEgfHwgcGFydHNbMF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlbmxhY2UnKSA+IC0xKSAmJiBwYXJ0c1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJlc3VsdCA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjayhyZXN1bHQpOyB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnRzLm5ldHdvcmtHYXRld2F5RGVmYXVsdCA9IG5ldHdvcmtHYXRld2F5RGVmYXVsdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXROZXR3b3JrRGF0YSA9IHZvaWQgMDtcbi8vIEltcG9ydCBmcm9tIHRoZSBuZXR3b3JrIGZpbGUgZGlyZWN0bHkgYXMgYnVuZGxlcnMgdHJpZ2dlciB0aGUgJ29zeC10ZW1wZXJhdHVyZS1zZW5zb3InIGltcG9ydCBpbiB0aGUgc3lzdGVtaW5mb3JtYXRpb24vbGliL2NwdS5qcyxcbi8vIHJlc3VsdGluZyBpbiB0aGUgZm9sbG93aW5nIHdhcm5pbmc6IFwiQ2FuJ3QgcmVzb2x2ZSAnb3N4LXRlbXBlcmF0dXJlLXNlbnNvcidcIlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzLWNvbnRyaWIvcHVsbC8yMDcxXG5jb25zdCBuZXR3b3JrXzEgPSByZXF1aXJlKFwic3lzdGVtaW5mb3JtYXRpb24vbGliL25ldHdvcmtcIik7XG5mdW5jdGlvbiBnZXROZXR3b3JrRGF0YSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICgwLCBuZXR3b3JrXzEubmV0d29ya1N0YXRzKSgpXG4gICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0TmV0d29ya0RhdGEgPSBnZXROZXR3b3JrRGF0YTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ib3N0TWV0cmljcyA9IHZvaWQgMDtcbmNvbnN0IEJhc2VNZXRyaWNzXzEgPSByZXF1aXJlKFwiLi9CYXNlTWV0cmljc1wiKTtcbmNvbnN0IGVudW1fMSA9IHJlcXVpcmUoXCIuL2VudW1cIik7XG5jb25zdCBjb21tb25fMSA9IHJlcXVpcmUoXCIuL3N0YXRzL2NvbW1vblwiKTtcbmNvbnN0IHNpXzEgPSByZXF1aXJlKFwiLi9zdGF0cy9zaVwiKTtcbi8qKlxuICogTWV0cmljcyBDb2xsZWN0b3IgLSBjb2xsZWN0cyBtZXRyaWNzIGZvciBDUFUsIE1lbW9yeSwgTmV0d29ya1xuICovXG5jbGFzcyBIb3N0TWV0cmljcyBleHRlbmRzIEJhc2VNZXRyaWNzXzEuQmFzZU1ldHJpY3Mge1xuICAgIF9iYXRjaFVwZGF0ZUNwdVVzYWdlcyhvYnNlcnZhYmxlUmVzdWx0LCBjcHVVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVBdHRyID0gZW51bV8xLkFUVFJJQlVURV9OQU1FUy5TWVNURU1fQ1BVX1NUQVRFO1xuICAgICAgICBjb25zdCBjcHVBdHRyID0gZW51bV8xLkFUVFJJQlVURV9OQU1FUy5TWVNURU1fQ1BVX0xPR0lDQUxfTlVNQkVSO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IGNwdVVzYWdlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNwdVVzYWdlID0gY3B1VXNhZ2VzW2ldO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX2NwdVRpbWUsIGNwdVVzYWdlLnVzZXIsIHtcbiAgICAgICAgICAgICAgICBbc3RhdGVBdHRyXTogZW51bV8xLkNQVV9MQUJFTFMuVVNFUixcbiAgICAgICAgICAgICAgICBbY3B1QXR0cl06IGNwdVVzYWdlLmNwdU51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX2NwdVRpbWUsIGNwdVVzYWdlLnN5c3RlbSwge1xuICAgICAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5TWVNURU0sXG4gICAgICAgICAgICAgICAgW2NwdUF0dHJdOiBjcHVVc2FnZS5jcHVOdW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZSh0aGlzLl9jcHVUaW1lLCBjcHVVc2FnZS5pZGxlLCB7XG4gICAgICAgICAgICAgICAgW3N0YXRlQXR0cl06IGVudW1fMS5DUFVfTEFCRUxTLklETEUsXG4gICAgICAgICAgICAgICAgW2NwdUF0dHJdOiBjcHVVc2FnZS5jcHVOdW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZSh0aGlzLl9jcHVUaW1lLCBjcHVVc2FnZS5pbnRlcnJ1cHQsIHtcbiAgICAgICAgICAgICAgICBbc3RhdGVBdHRyXTogZW51bV8xLkNQVV9MQUJFTFMuSU5URVJSVVBULFxuICAgICAgICAgICAgICAgIFtjcHVBdHRyXTogY3B1VXNhZ2UuY3B1TnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fY3B1VGltZSwgY3B1VXNhZ2UubmljZSwge1xuICAgICAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5OSUNFLFxuICAgICAgICAgICAgICAgIFtjcHVBdHRyXTogY3B1VXNhZ2UuY3B1TnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fY3B1VXRpbGl6YXRpb24sIGNwdVVzYWdlLnVzZXJQLCB7XG4gICAgICAgICAgICAgICAgW3N0YXRlQXR0cl06IGVudW1fMS5DUFVfTEFCRUxTLlVTRVIsXG4gICAgICAgICAgICAgICAgW2NwdUF0dHJdOiBjcHVVc2FnZS5jcHVOdW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZSh0aGlzLl9jcHVVdGlsaXphdGlvbiwgY3B1VXNhZ2Uuc3lzdGVtUCwge1xuICAgICAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5TWVNURU0sXG4gICAgICAgICAgICAgICAgW2NwdUF0dHJdOiBjcHVVc2FnZS5jcHVOdW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZSh0aGlzLl9jcHVVdGlsaXphdGlvbiwgY3B1VXNhZ2UuaWRsZVAsIHtcbiAgICAgICAgICAgICAgICBbc3RhdGVBdHRyXTogZW51bV8xLkNQVV9MQUJFTFMuSURMRSxcbiAgICAgICAgICAgICAgICBbY3B1QXR0cl06IGNwdVVzYWdlLmNwdU51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX2NwdVV0aWxpemF0aW9uLCBjcHVVc2FnZS5pbnRlcnJ1cHRQLCB7XG4gICAgICAgICAgICAgICAgW3N0YXRlQXR0cl06IGVudW1fMS5DUFVfTEFCRUxTLklOVEVSUlVQVCxcbiAgICAgICAgICAgICAgICBbY3B1QXR0cl06IGNwdVVzYWdlLmNwdU51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX2NwdVV0aWxpemF0aW9uLCBjcHVVc2FnZS5uaWNlUCwge1xuICAgICAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5OSUNFLFxuICAgICAgICAgICAgICAgIFtjcHVBdHRyXTogY3B1VXNhZ2UuY3B1TnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2JhdGNoVXBkYXRlUHJvY2Vzc0NwdVVzYWdlcyhvYnNlcnZhYmxlUmVzdWx0LCBwcm9jZXNzQ3B1VXNhZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVBdHRyID0gZW51bV8xLkFUVFJJQlVURV9OQU1FUy5QUk9DRVNTX0NQVV9TVEFURTtcbiAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX3Byb2Nlc3NDcHVUaW1lLCBwcm9jZXNzQ3B1VXNhZ2UudXNlciwge1xuICAgICAgICAgICAgW3N0YXRlQXR0cl06IGVudW1fMS5DUFVfTEFCRUxTLlVTRVIsXG4gICAgICAgIH0pO1xuICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fcHJvY2Vzc0NwdVRpbWUsIHByb2Nlc3NDcHVVc2FnZS5zeXN0ZW0sIHtcbiAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5TWVNURU0sXG4gICAgICAgIH0pO1xuICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fcHJvY2Vzc0NwdVV0aWxpemF0aW9uLCBwcm9jZXNzQ3B1VXNhZ2UudXNlclAsIHtcbiAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5VU0VSLFxuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX3Byb2Nlc3NDcHVVdGlsaXphdGlvbiwgcHJvY2Vzc0NwdVVzYWdlLnN5c3RlbVAsIHtcbiAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuQ1BVX0xBQkVMUy5TWVNURU0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYmF0Y2hVcGRhdGVNZW1Vc2FnZXMob2JzZXJ2YWJsZVJlc3VsdCwgbWVtVXNhZ2UpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVBdHRyID0gZW51bV8xLkFUVFJJQlVURV9OQU1FUy5TWVNURU1fTUVNT1JZX1NUQVRFO1xuICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fbWVtb3J5VXNhZ2UsIG1lbVVzYWdlLnVzZWQsIHtcbiAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuTUVNT1JZX0xBQkVMUy5VU0VELFxuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX21lbW9yeVVzYWdlLCBtZW1Vc2FnZS5mcmVlLCB7XG4gICAgICAgICAgICBbc3RhdGVBdHRyXTogZW51bV8xLk1FTU9SWV9MQUJFTFMuRlJFRSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZSh0aGlzLl9tZW1vcnlVdGlsaXphdGlvbiwgbWVtVXNhZ2UudXNlZFAsIHtcbiAgICAgICAgICAgIFtzdGF0ZUF0dHJdOiBlbnVtXzEuTUVNT1JZX0xBQkVMUy5VU0VELFxuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX21lbW9yeVV0aWxpemF0aW9uLCBtZW1Vc2FnZS5mcmVlUCwge1xuICAgICAgICAgICAgW3N0YXRlQXR0cl06IGVudW1fMS5NRU1PUllfTEFCRUxTLkZSRUUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYmF0Y2hVcGRhdGVQcm9jZXNzTWVtVXNhZ2Uob2JzZXJ2YWJsZVJlc3VsdCwgbWVtb3J5VXNhZ2UpIHtcbiAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX3Byb2Nlc3NNZW1vcnlVc2FnZSwgbWVtb3J5VXNhZ2UpO1xuICAgIH1cbiAgICBfYmF0Y2hVcGRhdGVOZXR3b3JrRGF0YShvYnNlcnZhYmxlUmVzdWx0LCBuZXR3b3JrVXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGRldmljZUF0dHIgPSBlbnVtXzEuQVRUUklCVVRFX05BTUVTLlNZU1RFTV9ERVZJQ0U7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkF0dHIgPSBlbnVtXzEuQVRUUklCVVRFX05BTUVTLk5FVFdPUktfSU9fRElSRUNUSU9OO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IG5ldHdvcmtVc2FnZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrVXNhZ2UgPSBuZXR3b3JrVXNhZ2VzW2ldO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX25ldHdvcmtEcm9wcGVkLCBuZXR3b3JrVXNhZ2UucnhfZHJvcHBlZCwge1xuICAgICAgICAgICAgICAgIFtkZXZpY2VBdHRyXTogbmV0d29ya1VzYWdlLmlmYWNlLFxuICAgICAgICAgICAgICAgIFtkaXJlY3Rpb25BdHRyXTogZW51bV8xLk5FVFdPUktfTEFCRUxTLlJFQ0VJVkUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9ic2VydmFibGVSZXN1bHQub2JzZXJ2ZSh0aGlzLl9uZXR3b3JrRHJvcHBlZCwgbmV0d29ya1VzYWdlLnR4X2Ryb3BwZWQsIHtcbiAgICAgICAgICAgICAgICBbZGV2aWNlQXR0cl06IG5ldHdvcmtVc2FnZS5pZmFjZSxcbiAgICAgICAgICAgICAgICBbZGlyZWN0aW9uQXR0cl06IGVudW1fMS5ORVRXT1JLX0xBQkVMUy5UUkFOU01JVCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZVJlc3VsdC5vYnNlcnZlKHRoaXMuX25ldHdvcmtFcnJvcnMsIG5ldHdvcmtVc2FnZS5yeF9lcnJvcnMsIHtcbiAgICAgICAgICAgICAgICBbZGV2aWNlQXR0cl06IG5ldHdvcmtVc2FnZS5pZmFjZSxcbiAgICAgICAgICAgICAgICBbZGlyZWN0aW9uQXR0cl06IGVudW1fMS5ORVRXT1JLX0xBQkVMUy5SRUNFSVZFLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fbmV0d29ya0Vycm9ycywgbmV0d29ya1VzYWdlLnR4X2Vycm9ycywge1xuICAgICAgICAgICAgICAgIFtkZXZpY2VBdHRyXTogbmV0d29ya1VzYWdlLmlmYWNlLFxuICAgICAgICAgICAgICAgIFtkaXJlY3Rpb25BdHRyXTogZW51bV8xLk5FVFdPUktfTEFCRUxTLlRSQU5TTUlULFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fbmV0d29ya0lvLCBuZXR3b3JrVXNhZ2UucnhfYnl0ZXMsIHtcbiAgICAgICAgICAgICAgICBbZGV2aWNlQXR0cl06IG5ldHdvcmtVc2FnZS5pZmFjZSxcbiAgICAgICAgICAgICAgICBbZGlyZWN0aW9uQXR0cl06IGVudW1fMS5ORVRXT1JLX0xBQkVMUy5SRUNFSVZFLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlUmVzdWx0Lm9ic2VydmUodGhpcy5fbmV0d29ya0lvLCBuZXR3b3JrVXNhZ2UudHhfYnl0ZXMsIHtcbiAgICAgICAgICAgICAgICBbZGV2aWNlQXR0cl06IG5ldHdvcmtVc2FnZS5pZmFjZSxcbiAgICAgICAgICAgICAgICBbZGlyZWN0aW9uQXR0cl06IGVudW1fMS5ORVRXT1JLX0xBQkVMUy5UUkFOU01JVCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbWV0cmljc1xuICAgICAqL1xuICAgIF9jcmVhdGVNZXRyaWNzKCkge1xuICAgICAgICB0aGlzLl9jcHVUaW1lID0gdGhpcy5fbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUNvdW50ZXIoZW51bV8xLk1FVFJJQ19OQU1FUy5DUFVfVElNRSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDcHUgdGltZSBpbiBzZWNvbmRzJyxcbiAgICAgICAgICAgIHVuaXQ6ICdzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2NwdVV0aWxpemF0aW9uID0gdGhpcy5fbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUdhdWdlKGVudW1fMS5NRVRSSUNfTkFNRVMuQ1BVX1VUSUxJWkFUSU9OLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NwdSB1c2FnZSB0aW1lIDAtMScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9tZW1vcnlVc2FnZSA9IHRoaXMuX21ldGVyLmNyZWF0ZU9ic2VydmFibGVHYXVnZShlbnVtXzEuTUVUUklDX05BTUVTLk1FTU9SWV9VU0FHRSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNZW1vcnkgdXNhZ2UgaW4gYnl0ZXMnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbWVtb3J5VXRpbGl6YXRpb24gPSB0aGlzLl9tZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2UoZW51bV8xLk1FVFJJQ19OQU1FUy5NRU1PUllfVVRJTElaQVRJT04sIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTWVtb3J5IHVzYWdlIDAtMScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9uZXR3b3JrRHJvcHBlZCA9IHRoaXMuX21ldGVyLmNyZWF0ZU9ic2VydmFibGVDb3VudGVyKGVudW1fMS5NRVRSSUNfTkFNRVMuTkVUV09SS19EUk9QUEVELCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05ldHdvcmsgZHJvcHBlZCBwYWNrZXRzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX25ldHdvcmtFcnJvcnMgPSB0aGlzLl9tZXRlci5jcmVhdGVPYnNlcnZhYmxlQ291bnRlcihlbnVtXzEuTUVUUklDX05BTUVTLk5FVFdPUktfRVJST1JTLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05ldHdvcmsgZXJyb3JzIGNvdW50ZXInLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbmV0d29ya0lvID0gdGhpcy5fbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUNvdW50ZXIoZW51bV8xLk1FVFJJQ19OQU1FUy5ORVRXT1JLX0lPLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05ldHdvcmsgdHJhbnNtaXQgYW5kIHJlY2VpdmVkIGJ5dGVzJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NDcHVUaW1lID0gdGhpcy5fbWV0ZXIuY3JlYXRlT2JzZXJ2YWJsZUNvdW50ZXIoZW51bV8xLk1FVFJJQ19OQU1FUy5QUk9DRVNTX0NQVV9USU1FLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Byb2Nlc3MgQ3B1IHRpbWUgaW4gc2Vjb25kcycsXG4gICAgICAgICAgICB1bml0OiAncycsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wcm9jZXNzQ3B1VXRpbGl6YXRpb24gPSB0aGlzLl9tZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2UoZW51bV8xLk1FVFJJQ19OQU1FUy5QUk9DRVNTX0NQVV9VVElMSVpBVElPTiwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdQcm9jZXNzIENwdSB1c2FnZSB0aW1lIDAtMScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wcm9jZXNzTWVtb3J5VXNhZ2UgPSB0aGlzLl9tZXRlci5jcmVhdGVPYnNlcnZhYmxlR2F1Z2UoZW51bV8xLk1FVFJJQ19OQU1FUy5QUk9DRVNTX01FTU9SWV9VU0FHRSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdQcm9jZXNzIE1lbW9yeSB1c2FnZSBpbiBieXRlcycsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9tZXRlci5hZGRCYXRjaE9ic2VydmFibGVDYWxsYmFjayhhc3luYyAob2JzZXJ2YWJsZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3B1VXNhZ2VzID0gKDAsIGNvbW1vbl8xLmdldENwdVVzYWdlRGF0YSkoKTtcbiAgICAgICAgICAgIGNvbnN0IG1lbW9yeVVzYWdlcyA9ICgwLCBjb21tb25fMS5nZXRNZW1vcnlEYXRhKSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0NwdVVzYWdlcyA9ICgwLCBjb21tb25fMS5nZXRQcm9jZXNzQ3B1VXNhZ2VEYXRhKSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc01lbW9yeVVzYWdlcyA9ICgwLCBjb21tb25fMS5nZXRQcm9jZXNzTWVtb3J5RGF0YSkoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtEYXRhID0gYXdhaXQgKDAsIHNpXzEuZ2V0TmV0d29ya0RhdGEpKCk7XG4gICAgICAgICAgICB0aGlzLl9iYXRjaFVwZGF0ZUNwdVVzYWdlcyhvYnNlcnZhYmxlUmVzdWx0LCBjcHVVc2FnZXMpO1xuICAgICAgICAgICAgdGhpcy5fYmF0Y2hVcGRhdGVNZW1Vc2FnZXMob2JzZXJ2YWJsZVJlc3VsdCwgbWVtb3J5VXNhZ2VzKTtcbiAgICAgICAgICAgIHRoaXMuX2JhdGNoVXBkYXRlUHJvY2Vzc0NwdVVzYWdlcyhvYnNlcnZhYmxlUmVzdWx0LCBwcm9jZXNzQ3B1VXNhZ2VzKTtcbiAgICAgICAgICAgIHRoaXMuX2JhdGNoVXBkYXRlUHJvY2Vzc01lbVVzYWdlKG9ic2VydmFibGVSZXN1bHQsIHByb2Nlc3NNZW1vcnlVc2FnZXMpO1xuICAgICAgICAgICAgdGhpcy5fYmF0Y2hVcGRhdGVOZXR3b3JrRGF0YShvYnNlcnZhYmxlUmVzdWx0LCBuZXR3b3JrRGF0YSk7XG4gICAgICAgIH0sIFtcbiAgICAgICAgICAgIHRoaXMuX2NwdVRpbWUsXG4gICAgICAgICAgICB0aGlzLl9jcHVVdGlsaXphdGlvbixcbiAgICAgICAgICAgIHRoaXMuX21lbW9yeVVzYWdlLFxuICAgICAgICAgICAgdGhpcy5fbWVtb3J5VXRpbGl6YXRpb24sXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzQ3B1VGltZSxcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDcHVVdGlsaXphdGlvbixcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NNZW1vcnlVc2FnZSxcbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtEcm9wcGVkLFxuICAgICAgICAgICAgdGhpcy5fbmV0d29ya0Vycm9ycyxcbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtJbyxcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyBjb2xsZWN0aW5nIG1ldHJpY3NcbiAgICAgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTWV0cmljcygpO1xuICAgIH1cbiAgICAvLyBUaGUgbWV0cmljcyBhcmUgY3JlYXRlZCBpbiBgX2NyZWF0ZU1ldHJpY3NgLlxuICAgIF9jcHVUaW1lO1xuICAgIF9jcHVVdGlsaXphdGlvbjtcbiAgICBfbWVtb3J5VXNhZ2U7XG4gICAgX21lbW9yeVV0aWxpemF0aW9uO1xuICAgIF9wcm9jZXNzQ3B1VGltZTtcbiAgICBfcHJvY2Vzc0NwdVV0aWxpemF0aW9uO1xuICAgIF9wcm9jZXNzTWVtb3J5VXNhZ2U7XG4gICAgX25ldHdvcmtEcm9wcGVkO1xuICAgIF9uZXR3b3JrRXJyb3JzO1xuICAgIF9uZXR3b3JrSW87XG59XG5leHBvcnRzLkhvc3RNZXRyaWNzID0gSG9zdE1ldHJpY3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRyaWMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhvc3RNZXRyaWNzID0gZXhwb3J0cy5CYXNlTWV0cmljcyA9IHZvaWQgMDtcbnZhciBCYXNlTWV0cmljc18xID0gcmVxdWlyZShcIi4vQmFzZU1ldHJpY3NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNlTWV0cmljc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmFzZU1ldHJpY3NfMS5CYXNlTWV0cmljczsgfSB9KTtcbnZhciBtZXRyaWNfMSA9IHJlcXVpcmUoXCIuL21ldHJpY1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhvc3RNZXRyaWNzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWNfMS5Ib3N0TWV0cmljczsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dSZWNvcmRJbXBsID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY2xhc3MgTG9nUmVjb3JkSW1wbCB7XG4gICAgaHJUaW1lO1xuICAgIGhyVGltZU9ic2VydmVkO1xuICAgIHNwYW5Db250ZXh0O1xuICAgIHJlc291cmNlO1xuICAgIGluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgIGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBfc2V2ZXJpdHlUZXh0O1xuICAgIF9zZXZlcml0eU51bWJlcjtcbiAgICBfYm9keTtcbiAgICBfZXZlbnROYW1lO1xuICAgIHRvdGFsQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICBfaXNSZWFkb25seSA9IGZhbHNlO1xuICAgIF9sb2dSZWNvcmRMaW1pdHM7XG4gICAgc2V0IHNldmVyaXR5VGV4dChzZXZlcml0eVRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTG9nUmVjb3JkUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldmVyaXR5VGV4dCA9IHNldmVyaXR5VGV4dDtcbiAgICB9XG4gICAgZ2V0IHNldmVyaXR5VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldmVyaXR5VGV4dDtcbiAgICB9XG4gICAgc2V0IHNldmVyaXR5TnVtYmVyKHNldmVyaXR5TnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0xvZ1JlY29yZFJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXZlcml0eU51bWJlciA9IHNldmVyaXR5TnVtYmVyO1xuICAgIH1cbiAgICBnZXQgc2V2ZXJpdHlOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXZlcml0eU51bWJlcjtcbiAgICB9XG4gICAgc2V0IGJvZHkoYm9keSkge1xuICAgICAgICBpZiAodGhpcy5faXNMb2dSZWNvcmRSZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYm9keSA9IGJvZHk7XG4gICAgfVxuICAgIGdldCBib2R5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9keTtcbiAgICB9XG4gICAgZ2V0IGV2ZW50TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50TmFtZTtcbiAgICB9XG4gICAgc2V0IGV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTG9nUmVjb3JkUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V2ZW50TmFtZSA9IGV2ZW50TmFtZTtcbiAgICB9XG4gICAgZ2V0IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsQXR0cmlidXRlc0NvdW50IC0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKF9zaGFyZWRTdGF0ZSwgaW5zdHJ1bWVudGF0aW9uU2NvcGUsIGxvZ1JlY29yZCkge1xuICAgICAgICBjb25zdCB7IHRpbWVzdGFtcCwgb2JzZXJ2ZWRUaW1lc3RhbXAsIGV2ZW50TmFtZSwgc2V2ZXJpdHlOdW1iZXIsIHNldmVyaXR5VGV4dCwgYm9keSwgYXR0cmlidXRlcyA9IHt9LCBjb250ZXh0LCB9ID0gbG9nUmVjb3JkO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmhyVGltZSA9ICgwLCBjb3JlXzEudGltZUlucHV0VG9IclRpbWUpKHRpbWVzdGFtcCA/PyBub3cpO1xuICAgICAgICB0aGlzLmhyVGltZU9ic2VydmVkID0gKDAsIGNvcmVfMS50aW1lSW5wdXRUb0hyVGltZSkob2JzZXJ2ZWRUaW1lc3RhbXAgPz8gbm93KTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gYXBpLnRyYWNlLmdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHNwYW5Db250ZXh0ICYmIGFwaS5pc1NwYW5Db250ZXh0VmFsaWQoc3BhbkNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuQ29udGV4dCA9IHNwYW5Db250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V2ZXJpdHlOdW1iZXIgPSBzZXZlcml0eU51bWJlcjtcbiAgICAgICAgdGhpcy5zZXZlcml0eVRleHQgPSBzZXZlcml0eVRleHQ7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMucmVzb3VyY2UgPSBfc2hhcmVkU3RhdGUucmVzb3VyY2U7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBpbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICAgICAgdGhpcy5fbG9nUmVjb3JkTGltaXRzID0gX3NoYXJlZFN0YXRlLmxvZ1JlY29yZExpbWl0cztcbiAgICAgICAgdGhpcy5fZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgfVxuICAgIHNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0xvZ1JlY29yZFJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oYEludmFsaWQgYXR0cmlidXRlIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBjb3JlXzEuaXNBdHRyaWJ1dGVWYWx1ZSkodmFsdWUpICYmXG4gICAgICAgICAgICAhKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oYEludmFsaWQgYXR0cmlidXRlIHZhbHVlIHNldCBmb3Iga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxBdHRyaWJ1dGVzQ291bnQgKz0gMTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLl9sb2dSZWNvcmRMaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCAmJlxuICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGtleSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbG9naWMgaXMgdG8gY3JlYXRlIGRyb3AgbWVzc2FnZSBhdCBtb3N0IG9uY2UgcGVyIExvZ1JlY29yZCB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBsb2dnaW5nLlxuICAgICAgICAgICAgaWYgKHRoaXMuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oJ0Ryb3BwaW5nIGV4dHJhIGF0dHJpYnV0ZXMuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGNvcmVfMS5pc0F0dHJpYnV0ZVZhbHVlKSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdGhpcy5fdHJ1bmNhdGVUb1NpemUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0Qm9keShib2R5KSB7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0U2V2ZXJpdHlOdW1iZXIoc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXZlcml0eU51bWJlciA9IHNldmVyaXR5TnVtYmVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0U2V2ZXJpdHlUZXh0KHNldmVyaXR5VGV4dCkge1xuICAgICAgICB0aGlzLnNldmVyaXR5VGV4dCA9IHNldmVyaXR5VGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEEgTG9nUmVjb3JkUHJvY2Vzc29yIG1heSBmcmVlbHkgbW9kaWZ5IGxvZ1JlY29yZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBPbkVtaXQgY2FsbC5cbiAgICAgKiBJZiBsb2dSZWNvcmQgaXMgbmVlZGVkIGFmdGVyIE9uRW1pdCByZXR1cm5zIChpLmUuIGZvciBhc3luY2hyb25vdXMgcHJvY2Vzc2luZykgb25seSByZWFkcyBhcmUgcGVybWl0dGVkLlxuICAgICAqL1xuICAgIF9tYWtlUmVhZG9ubHkoKSB7XG4gICAgICAgIHRoaXMuX2lzUmVhZG9ubHkgPSB0cnVlO1xuICAgIH1cbiAgICBfdHJ1bmNhdGVUb1NpemUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbGltaXQgPSB0aGlzLl9sb2dSZWNvcmRMaW1pdHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDtcbiAgICAgICAgLy8gQ2hlY2sgbGltaXRcbiAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIC8vIE5lZ2F0aXZlIHZhbHVlcyBhcmUgaW52YWxpZCwgc28gZG8gbm90IHRydW5jYXRlXG4gICAgICAgICAgICBhcGkuZGlhZy53YXJuKGBBdHRyaWJ1dGUgdmFsdWUgbGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7bGltaXR9YCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh2YWx1ZSwgbGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFycmF5IG9mIHN0cmluZ3NcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKHZhbCA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHRoaXMuX3RydW5jYXRlVG9MaW1pdFV0aWwodmFsLCBsaW1pdCkgOiB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIHR5cGVzLCBubyBuZWVkIHRvIGFwcGx5IHZhbHVlIGxlbmd0aCBsaW1pdFxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIF90cnVuY2F0ZVRvTGltaXRVdGlsKHZhbHVlLCBsaW1pdCkge1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDw9IGxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBsaW1pdCk7XG4gICAgfVxuICAgIF9pc0xvZ1JlY29yZFJlYWRvbmx5KCkge1xuICAgICAgICBpZiAodGhpcy5faXNSZWFkb25seSkge1xuICAgICAgICAgICAgYXBpLmRpYWcud2FybignQ2FuIG5vdCBleGVjdXRlIHRoZSBvcGVyYXRpb24gb24gZW1pdHRlZCBsb2cgcmVjb3JkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVhZG9ubHk7XG4gICAgfVxufVxuZXhwb3J0cy5Mb2dSZWNvcmRJbXBsID0gTG9nUmVjb3JkSW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxvZ1JlY29yZEltcGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2dlciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IExvZ1JlY29yZEltcGxfMSA9IHJlcXVpcmUoXCIuL0xvZ1JlY29yZEltcGxcIik7XG5jbGFzcyBMb2dnZXIge1xuICAgIGluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgIF9zaGFyZWRTdGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihpbnN0cnVtZW50YXRpb25TY29wZSwgX3NoYXJlZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBpbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUgPSBfc2hhcmVkU3RhdGU7XG4gICAgfVxuICAgIGVtaXQobG9nUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gbG9nUmVjb3JkLmNvbnRleHQgfHwgYXBpXzEuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGEgTG9nZ2VyIHdhcyBvYnRhaW5lZCB3aXRoIGluY2x1ZGVfdHJhY2VfY29udGV4dD10cnVlLFxuICAgICAgICAgKiB0aGUgTG9nUmVjb3JkcyBpdCBlbWl0cyBNVVNUIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSB0aGUgVHJhY2UgQ29udGV4dCBmcm9tIHRoZSBhY3RpdmUgQ29udGV4dCxcbiAgICAgICAgICogaWYgQ29udGV4dCBoYXMgbm90IGJlZW4gZXhwbGljaXRseSBzZXQuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBsb2dSZWNvcmRJbnN0YW5jZSA9IG5ldyBMb2dSZWNvcmRJbXBsXzEuTG9nUmVjb3JkSW1wbCh0aGlzLl9zaGFyZWRTdGF0ZSwgdGhpcy5pbnN0cnVtZW50YXRpb25TY29wZSwge1xuICAgICAgICAgICAgY29udGV4dDogY3VycmVudENvbnRleHQsXG4gICAgICAgICAgICAuLi5sb2dSZWNvcmQsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogdGhlIGV4cGxpY2l0bHkgcGFzc2VkIENvbnRleHQsXG4gICAgICAgICAqIHRoZSBjdXJyZW50IENvbnRleHQsIG9yIGFuIGVtcHR5IENvbnRleHQgaWYgdGhlIExvZ2dlciB3YXMgb2J0YWluZWQgd2l0aCBpbmNsdWRlX3RyYWNlX2NvbnRleHQ9ZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlLmFjdGl2ZVByb2Nlc3Nvci5vbkVtaXQobG9nUmVjb3JkSW5zdGFuY2UsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgTG9nUmVjb3JkUHJvY2Vzc29yIG1heSBmcmVlbHkgbW9kaWZ5IGxvZ1JlY29yZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBPbkVtaXQgY2FsbC5cbiAgICAgICAgICogSWYgbG9nUmVjb3JkIGlzIG5lZWRlZCBhZnRlciBPbkVtaXQgcmV0dXJucyAoaS5lLiBmb3IgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcpIG9ubHkgcmVhZHMgYXJlIHBlcm1pdHRlZC5cbiAgICAgICAgICovXG4gICAgICAgIGxvZ1JlY29yZEluc3RhbmNlLl9tYWtlUmVhZG9ubHkoKTtcbiAgICB9XG59XG5leHBvcnRzLkxvZ2dlciA9IExvZ2dlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxvZ2dlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVjb25maWd1cmVMaW1pdHMgPSBleHBvcnRzLmxvYWREZWZhdWx0Q29uZmlnID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5mdW5jdGlvbiBsb2FkRGVmYXVsdENvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmb3JjZUZsdXNoVGltZW91dE1pbGxpczogMzAwMDAsXG4gICAgICAgIGxvZ1JlY29yZExpbWl0czoge1xuICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDogKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9MT0dSRUNPUkRfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCcpID8/XG4gICAgICAgICAgICAgICAgSW5maW5pdHksXG4gICAgICAgICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0xPR1JFQ09SRF9BVFRSSUJVVEVfQ09VTlRfTElNSVQnKSA/PyAxMjgsXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVUcmFjZUNvbnRleHQ6IHRydWUsXG4gICAgfTtcbn1cbmV4cG9ydHMubG9hZERlZmF1bHRDb25maWcgPSBsb2FkRGVmYXVsdENvbmZpZztcbi8qKlxuICogV2hlbiBnZW5lcmFsIGxpbWl0cyBhcmUgcHJvdmlkZWQgYW5kIG1vZGVsIHNwZWNpZmljIGxpbWl0cyBhcmUgbm90LFxuICogY29uZmlndXJlcyB0aGUgbW9kZWwgc3BlY2lmaWMgbGltaXRzIGJ5IHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZ2VuZXJhbCBvbmVzLlxuICogQHBhcmFtIGxvZ1JlY29yZExpbWl0cyBVc2VyIHByb3ZpZGVkIGxpbWl0cyBjb25maWd1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlY29uZmlndXJlTGltaXRzKGxvZ1JlY29yZExpbWl0cykge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWFzc2lnbiBsb2cgcmVjb3JkIGF0dHJpYnV0ZSBjb3VudCBsaW1pdCB0byB1c2UgZmlyc3Qgbm9uIG51bGwgdmFsdWUgZGVmaW5lZCBieSB1c2VyIG9yIHVzZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiBsb2dSZWNvcmRMaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9MT0dSRUNPUkRfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz9cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz9cbiAgICAgICAgICAgIDEyOCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlYXNzaWduIGxvZyByZWNvcmQgYXR0cmlidXRlIHZhbHVlIGxlbmd0aCBsaW1pdCB0byB1c2UgZmlyc3Qgbm9uIG51bGwgdmFsdWUgZGVmaW5lZCBieSB1c2VyIG9yIHVzZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiBsb2dSZWNvcmRMaW1pdHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9MT0dSRUNPUkRfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCcpID8/XG4gICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/P1xuICAgICAgICAgICAgSW5maW5pdHksXG4gICAgfTtcbn1cbmV4cG9ydHMucmVjb25maWd1cmVMaW1pdHMgPSByZWNvbmZpZ3VyZUxpbWl0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9vcExvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbmNsYXNzIE5vb3BMb2dSZWNvcmRQcm9jZXNzb3Ige1xuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgb25FbWl0KF9sb2dSZWNvcmQsIF9jb250ZXh0KSB7IH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm9vcExvZ1JlY29yZFByb2Nlc3NvciA9IE5vb3BMb2dSZWNvcmRQcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob29wTG9nUmVjb3JkUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NdWx0aUxvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIExvZ1JlY29yZFByb2Nlc3Nvcn0gdGhhdCBzaW1wbHkgZm9yd2FyZHMgYWxsXG4gKiByZWNlaXZlZCBldmVudHMgdG8gYSBsaXN0IG9mIHtAbGluayBMb2dSZWNvcmRQcm9jZXNzb3J9cy5cbiAqL1xuY2xhc3MgTXVsdGlMb2dSZWNvcmRQcm9jZXNzb3Ige1xuICAgIHByb2Nlc3NvcnM7XG4gICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM7XG4gICAgY29uc3RydWN0b3IocHJvY2Vzc29ycywgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzb3JzID0gcHJvY2Vzc29ycztcbiAgICAgICAgdGhpcy5mb3JjZUZsdXNoVGltZW91dE1pbGxpcyA9IGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzO1xuICAgIH1cbiAgICBhc3luYyBmb3JjZUZsdXNoKCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5mb3JjZUZsdXNoVGltZW91dE1pbGxpcztcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5wcm9jZXNzb3JzLm1hcChwcm9jZXNzb3IgPT4gKDAsIGNvcmVfMS5jYWxsV2l0aFRpbWVvdXQpKHByb2Nlc3Nvci5mb3JjZUZsdXNoKCksIHRpbWVvdXQpKSk7XG4gICAgfVxuICAgIG9uRW1pdChsb2dSZWNvcmQsIGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzb3JzLmZvckVhY2gocHJvY2Vzc29ycyA9PiBwcm9jZXNzb3JzLm9uRW1pdChsb2dSZWNvcmQsIGNvbnRleHQpKTtcbiAgICB9XG4gICAgYXN5bmMgc2h1dGRvd24oKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29ycy5tYXAocHJvY2Vzc29yID0+IHByb2Nlc3Nvci5zaHV0ZG93bigpKSk7XG4gICAgfVxufVxuZXhwb3J0cy5NdWx0aUxvZ1JlY29yZFByb2Nlc3NvciA9IE11bHRpTG9nUmVjb3JkUHJvY2Vzc29yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TXVsdGlMb2dSZWNvcmRQcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBOb29wTG9nUmVjb3JkUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L05vb3BMb2dSZWNvcmRQcm9jZXNzb3JcIik7XG5jb25zdCBNdWx0aUxvZ1JlY29yZFByb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4uL011bHRpTG9nUmVjb3JkUHJvY2Vzc29yXCIpO1xuY2xhc3MgTG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZSB7XG4gICAgcmVzb3VyY2U7XG4gICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM7XG4gICAgbG9nUmVjb3JkTGltaXRzO1xuICAgIHByb2Nlc3NvcnM7XG4gICAgbG9nZ2VycyA9IG5ldyBNYXAoKTtcbiAgICBhY3RpdmVQcm9jZXNzb3I7XG4gICAgcmVnaXN0ZXJlZExvZ1JlY29yZFByb2Nlc3NvcnMgPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihyZXNvdXJjZSwgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMsIGxvZ1JlY29yZExpbWl0cywgcHJvY2Vzc29ycykge1xuICAgICAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2U7XG4gICAgICAgIHRoaXMuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMgPSBmb3JjZUZsdXNoVGltZW91dE1pbGxpcztcbiAgICAgICAgdGhpcy5sb2dSZWNvcmRMaW1pdHMgPSBsb2dSZWNvcmRMaW1pdHM7XG4gICAgICAgIHRoaXMucHJvY2Vzc29ycyA9IHByb2Nlc3NvcnM7XG4gICAgICAgIGlmIChwcm9jZXNzb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZExvZ1JlY29yZFByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVQcm9jZXNzb3IgPSBuZXcgTXVsdGlMb2dSZWNvcmRQcm9jZXNzb3JfMS5NdWx0aUxvZ1JlY29yZFByb2Nlc3Nvcih0aGlzLnJlZ2lzdGVyZWRMb2dSZWNvcmRQcm9jZXNzb3JzLCB0aGlzLmZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUHJvY2Vzc29yID0gbmV3IE5vb3BMb2dSZWNvcmRQcm9jZXNzb3JfMS5Ob29wTG9nUmVjb3JkUHJvY2Vzc29yKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkxvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUgPSBMb2dnZXJQcm92aWRlclNoYXJlZFN0YXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dnZXJQcm92aWRlciA9IGV4cG9ydHMuREVGQVVMVF9MT0dHRVJfTkFNRSA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBhcGlfbG9nc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaS1sb2dzXCIpO1xuY29uc3QgcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBMb2dnZXJfMSA9IHJlcXVpcmUoXCIuL0xvZ2dlclwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgTG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZV8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvTG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZVwiKTtcbmV4cG9ydHMuREVGQVVMVF9MT0dHRVJfTkFNRSA9ICd1bmtub3duJztcbmNsYXNzIExvZ2dlclByb3ZpZGVyIHtcbiAgICBfc2h1dGRvd25PbmNlO1xuICAgIF9zaGFyZWRTdGF0ZTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBjb25zdCBtZXJnZWRDb25maWcgPSAoMCwgY29yZV8xLm1lcmdlKSh7fSwgKDAsIGNvbmZpZ18xLmxvYWREZWZhdWx0Q29uZmlnKSgpLCBjb25maWcpO1xuICAgICAgICBjb25zdCByZXNvdXJjZSA9IGNvbmZpZy5yZXNvdXJjZSA/PyAoMCwgcmVzb3VyY2VzXzEuZGVmYXVsdFJlc291cmNlKSgpO1xuICAgICAgICB0aGlzLl9zaGFyZWRTdGF0ZSA9IG5ldyBMb2dnZXJQcm92aWRlclNoYXJlZFN0YXRlXzEuTG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZShyZXNvdXJjZSwgbWVyZ2VkQ29uZmlnLmZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzLCAoMCwgY29uZmlnXzEucmVjb25maWd1cmVMaW1pdHMpKG1lcmdlZENvbmZpZy5sb2dSZWNvcmRMaW1pdHMpLCBjb25maWc/LnByb2Nlc3NvcnMgPz8gW10pO1xuICAgICAgICB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgY29yZV8xLkJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEgbG9nZ2VyIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIExvZ2dlclByb3ZpZGVyLlxuICAgICAqL1xuICAgIGdldExvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignQSBzaHV0ZG93biBMb2dnZXJQcm92aWRlciBjYW5ub3QgcHJvdmlkZSBhIExvZ2dlcicpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaV9sb2dzXzEuTk9PUF9MT0dHRVI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0xvZ2dlciByZXF1ZXN0ZWQgd2l0aG91dCBpbnN0cnVtZW50YXRpb24gc2NvcGUgbmFtZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2dnZXJOYW1lID0gbmFtZSB8fCBleHBvcnRzLkRFRkFVTFRfTE9HR0VSX05BTUU7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2xvZ2dlck5hbWV9QCR7dmVyc2lvbiB8fCAnJ306JHtvcHRpb25zPy5zY2hlbWFVcmwgfHwgJyd9YDtcbiAgICAgICAgaWYgKCF0aGlzLl9zaGFyZWRTdGF0ZS5sb2dnZXJzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9zaGFyZWRTdGF0ZS5sb2dnZXJzLnNldChrZXksIG5ldyBMb2dnZXJfMS5Mb2dnZXIoeyBuYW1lOiBsb2dnZXJOYW1lLCB2ZXJzaW9uLCBzY2hlbWFVcmw6IG9wdGlvbnM/LnNjaGVtYVVybCB9LCB0aGlzLl9zaGFyZWRTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRTdGF0ZS5sb2dnZXJzLmdldChrZXkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOb3RpZmllcyBhbGwgcmVnaXN0ZXJlZCBMb2dSZWNvcmRQcm9jZXNzb3IgdG8gZmx1c2ggYW55IGJ1ZmZlcmVkIGRhdGEuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIGFsbCBmbHVzaGVzIGFyZSBjb21wbGV0ZS5cbiAgICAgKi9cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICAvLyBkbyBub3QgZmx1c2ggYWZ0ZXIgc2h1dGRvd25cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdpbnZhbGlkIGF0dGVtcHQgdG8gZm9yY2UgZmx1c2ggYWZ0ZXIgTG9nZ2VyUHJvdmlkZXIgc2h1dGRvd24nKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc2hhcmVkU3RhdGUuYWN0aXZlUHJvY2Vzc29yLmZvcmNlRmx1c2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRmx1c2ggYWxsIGJ1ZmZlcmVkIGRhdGEgYW5kIHNodXQgZG93biB0aGUgTG9nZ2VyUHJvdmlkZXIgYW5kIGFsbCByZWdpc3RlcmVkXG4gICAgICogTG9nUmVjb3JkUHJvY2Vzc29yLlxuICAgICAqXG4gICAgICogUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiBhbGwgZmx1c2hlcyBhcmUgY29tcGxldGUuXG4gICAgICovXG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2Fybignc2h1dGRvd24gbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UgcGVyIExvZ2dlclByb3ZpZGVyJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfVxuICAgIF9zaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlZFN0YXRlLmFjdGl2ZVByb2Nlc3Nvci5zaHV0ZG93bigpO1xuICAgIH1cbn1cbmV4cG9ydHMuTG9nZ2VyUHJvdmlkZXIgPSBMb2dnZXJQcm92aWRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxvZ2dlclByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8qKlxuICogVGhpcyBpcyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgTG9nUmVjb3JkRXhwb3J0ZXJ9IHRoYXQgcHJpbnRzIExvZ1JlY29yZHMgdG8gdGhlXG4gKiBjb25zb2xlLiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLlxuICpcbiAqIE5PVEU6IFRoaXMge0BsaW5rIExvZ1JlY29yZEV4cG9ydGVyfSBpcyBpbnRlbmRlZCBmb3IgZGlhZ25vc3RpY3MgdXNlIG9ubHksIG91dHB1dCByZW5kZXJlZCB0byB0aGUgY29uc29sZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5jbGFzcyBDb25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIge1xuICAgIC8qKlxuICAgICAqIEV4cG9ydCBsb2dzLlxuICAgICAqIEBwYXJhbSBsb2dzXG4gICAgICogQHBhcmFtIHJlc3VsdENhbGxiYWNrXG4gICAgICovXG4gICAgZXhwb3J0KGxvZ3MsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3NlbmRMb2dSZWNvcmRzKGxvZ3MsIHJlc3VsdENhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2h1dGRvd24gdGhlIGV4cG9ydGVyLlxuICAgICAqL1xuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGxvZ1JlY29yZCBpbmZvIGludG8gbW9yZSByZWFkYWJsZSBmb3JtYXRcbiAgICAgKiBAcGFyYW0gbG9nUmVjb3JkXG4gICAgICovXG4gICAgX2V4cG9ydEluZm8obG9nUmVjb3JkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGxvZ1JlY29yZC5yZXNvdXJjZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvblNjb3BlOiBsb2dSZWNvcmQuaW5zdHJ1bWVudGF0aW9uU2NvcGUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKGxvZ1JlY29yZC5oclRpbWUpLFxuICAgICAgICAgICAgdHJhY2VJZDogbG9nUmVjb3JkLnNwYW5Db250ZXh0Py50cmFjZUlkLFxuICAgICAgICAgICAgc3BhbklkOiBsb2dSZWNvcmQuc3BhbkNvbnRleHQ/LnNwYW5JZCxcbiAgICAgICAgICAgIHRyYWNlRmxhZ3M6IGxvZ1JlY29yZC5zcGFuQ29udGV4dD8udHJhY2VGbGFncyxcbiAgICAgICAgICAgIHNldmVyaXR5VGV4dDogbG9nUmVjb3JkLnNldmVyaXR5VGV4dCxcbiAgICAgICAgICAgIHNldmVyaXR5TnVtYmVyOiBsb2dSZWNvcmQuc2V2ZXJpdHlOdW1iZXIsXG4gICAgICAgICAgICBib2R5OiBsb2dSZWNvcmQuYm9keSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGxvZ1JlY29yZC5hdHRyaWJ1dGVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG93aW5nIGxvZ3MgIGluIGNvbnNvbGVcbiAgICAgKiBAcGFyYW0gbG9nUmVjb3Jkc1xuICAgICAqIEBwYXJhbSBkb25lXG4gICAgICovXG4gICAgX3NlbmRMb2dSZWNvcmRzKGxvZ1JlY29yZHMsIGRvbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2dSZWNvcmQgb2YgbG9nUmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc29sZS5kaXIodGhpcy5fZXhwb3J0SW5mbyhsb2dSZWNvcmQpLCB7IGRlcHRoOiAzIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvbmU/Lih7IGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIgPSBDb25zb2xlTG9nUmVjb3JkRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY2xhc3MgU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yIHtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBfdW5yZXNvbHZlZEV4cG9ydHM7XG4gICAgY29uc3RydWN0b3IoX2V4cG9ydGVyKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydGVyID0gX2V4cG9ydGVyO1xuICAgICAgICB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgY29yZV8xLkJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIG9uRW1pdChsb2dSZWNvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvRXhwb3J0ID0gKCkgPT4gY29yZV8xLmludGVybmFsXG4gICAgICAgICAgICAuX2V4cG9ydCh0aGlzLl9leHBvcnRlciwgW2xvZ1JlY29yZF0pXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvZGUgIT09IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yOiBsb2cgcmVjb3JkIGV4cG9ydCBmYWlsZWQgKHN0YXR1cyAke3Jlc3VsdH0pYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpO1xuICAgICAgICAvLyBBdm9pZCBzY2hlZHVsaW5nIGEgcHJvbWlzZSB0byBtYWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIGFuZCBlYXNpZXIgdG8gdGVzdFxuICAgICAgICBpZiAobG9nUmVjb3JkLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydFByb21pc2UgPSBsb2dSZWNvcmQucmVzb3VyY2VcbiAgICAgICAgICAgICAgICAud2FpdEZvckFzeW5jQXR0cmlidXRlcz8uKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXNpbmcgVFMgTm9uLW51bGwgYXNzZXJ0aW9uIG9wZXJhdG9yIGJlY2F1c2UgZXhwb3J0UHJvbWlzZSBjb3VsZCBub3QgYmUgbnVsbCBpbiBoZXJlXG4gICAgICAgICAgICAgICAgLy8gaWYgd2FpdEZvckFzeW5jQXR0cmlidXRlcyBpcyBub3QgcHJlc2VudCB0aGlzIGNvZGUgd2lsbCBuZXZlciBiZSByZWFjaGVkXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlc29sdmVkRXhwb3J0cy5kZWxldGUoZXhwb3J0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvRXhwb3J0KCk7XG4gICAgICAgICAgICB9LCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKTtcbiAgICAgICAgICAgIC8vIHN0b3JlIHRoZSB1bnJlc29sdmVkIGV4cG9ydHNcbiAgICAgICAgICAgIGlmIChleHBvcnRQcm9taXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlc29sdmVkRXhwb3J0cy5hZGQoZXhwb3J0UHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2b2lkIGRvRXhwb3J0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgLy8gYXdhaXQgdW5yZXNvbHZlZCByZXNvdXJjZXMgYmVmb3JlIHJlc29sdmluZ1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHRoaXMuX3VucmVzb2x2ZWRFeHBvcnRzKSk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9XG4gICAgX3NodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICB9XG59XG5leHBvcnRzLlNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvciA9IFNpbXBsZUxvZ1JlY29yZFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNpbXBsZUxvZ1JlY29yZFByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuLyoqXG4gKiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBJdCBzdG9yZXMgdGhlIGV4cG9ydGVkIExvZ1JlY29yZHNcbiAqIGluIGEgbGlzdCBpbiBtZW1vcnkgdGhhdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZSBgZ2V0RmluaXNoZWRMb2dSZWNvcmRzKClgXG4gKiBtZXRob2QuXG4gKi9cbmNsYXNzIEluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXIge1xuICAgIF9maW5pc2hlZExvZ1JlY29yZHMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGV4cG9ydGVyIGhhcyBiZWVuIFwic2h1dGRvd24uXCJcbiAgICAgKiBXaGVuIGZhbHNlLCBleHBvcnRlZCBsb2cgcmVjb3JkcyB3aWxsIG5vdCBiZSBzdG9yZWQgaW4tbWVtb3J5LlxuICAgICAqL1xuICAgIF9zdG9wcGVkID0gZmFsc2U7XG4gICAgZXhwb3J0KGxvZ3MsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdFeHBvcnRlciBoYXMgYmVlbiBzdG9wcGVkJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMucHVzaCguLi5sb2dzKTtcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBnZXRGaW5pc2hlZExvZ1JlY29yZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHM7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMgPSBbXTtcbiAgICB9XG59XG5leHBvcnRzLkluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXIgPSBJbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JCYXNlID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jbGFzcyBCYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2Uge1xuICAgIF9leHBvcnRlcjtcbiAgICBfbWF4RXhwb3J0QmF0Y2hTaXplO1xuICAgIF9tYXhRdWV1ZVNpemU7XG4gICAgX3NjaGVkdWxlZERlbGF5TWlsbGlzO1xuICAgIF9leHBvcnRUaW1lb3V0TWlsbGlzO1xuICAgIF9pc0V4cG9ydGluZyA9IGZhbHNlO1xuICAgIF9maW5pc2hlZExvZ1JlY29yZHMgPSBbXTtcbiAgICBfdGltZXI7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBjb25zdHJ1Y3RvcihfZXhwb3J0ZXIsIGNvbmZpZykge1xuICAgICAgICB0aGlzLl9leHBvcnRlciA9IF9leHBvcnRlcjtcbiAgICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID1cbiAgICAgICAgICAgIGNvbmZpZz8ubWF4RXhwb3J0QmF0Y2hTaXplID8/XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9CTFJQX01BWF9FWFBPUlRfQkFUQ0hfU0laRScpID8/XG4gICAgICAgICAgICAgICAgNTEyO1xuICAgICAgICB0aGlzLl9tYXhRdWV1ZVNpemUgPVxuICAgICAgICAgICAgY29uZmlnPy5tYXhRdWV1ZVNpemUgPz9cbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0JMUlBfTUFYX1FVRVVFX1NJWkUnKSA/P1xuICAgICAgICAgICAgICAgIDIwNDg7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzID1cbiAgICAgICAgICAgIGNvbmZpZz8uc2NoZWR1bGVkRGVsYXlNaWxsaXMgPz9cbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0JMUlBfU0NIRURVTEVfREVMQVknKSA/P1xuICAgICAgICAgICAgICAgIDUwMDA7XG4gICAgICAgIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMgPVxuICAgICAgICAgICAgY29uZmlnPy5leHBvcnRUaW1lb3V0TWlsbGlzID8/XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9CTFJQX0VYUE9SVF9USU1FT1VUJykgPz9cbiAgICAgICAgICAgICAgICAzMDAwMDtcbiAgICAgICAgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGNvcmVfMS5CaW5kT25jZUZ1dHVyZSh0aGlzLl9zaHV0ZG93biwgdGhpcyk7XG4gICAgICAgIGlmICh0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPiB0aGlzLl9tYXhRdWV1ZVNpemUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3I6IG1heEV4cG9ydEJhdGNoU2l6ZSBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gbWF4UXVldWVTaXplLCBzZXR0aW5nIG1heEV4cG9ydEJhdGNoU2l6ZSB0byBtYXRjaCBtYXhRdWV1ZVNpemUnKTtcbiAgICAgICAgICAgIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9IHRoaXMuX21heFF1ZXVlU2l6ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVtaXQobG9nUmVjb3JkKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hZGRUb0J1ZmZlcihsb2dSZWNvcmQpO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9XG4gICAgYXN5bmMgX3NodXRkb3duKCkge1xuICAgICAgICB0aGlzLm9uU2h1dGRvd24oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZmx1c2hBbGwoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICB9XG4gICAgLyoqIEFkZCBhIExvZ1JlY29yZCBpbiB0aGUgYnVmZmVyLiAqL1xuICAgIF9hZGRUb0J1ZmZlcihsb2dSZWNvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkTG9nUmVjb3Jkcy5sZW5ndGggPj0gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmluaXNoZWRMb2dSZWNvcmRzLnB1c2gobG9nUmVjb3JkKTtcbiAgICAgICAgdGhpcy5fbWF5YmVTdGFydFRpbWVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYWxsIExvZ1JlY29yZHMgdG8gdGhlIGV4cG9ydGVyIHJlc3BlY3RpbmcgdGhlIGJhdGNoIHNpemUgbGltaXRcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBvbiBmb3JjZUZsdXNoIG9yIHNodXRkb3duLFxuICAgICAqIGZvciBhbGwgb3RoZXIgY2FzZXMgX2ZsdXNoIHNob3VsZCBiZSB1c2VkXG4gICAgICogKi9cbiAgICBfZmx1c2hBbGwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgYmF0Y2hDb3VudCA9IE1hdGguY2VpbCh0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMubGVuZ3RoIC8gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2hDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9mbHVzaE9uZUJhdGNoKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZmx1c2hPbmVCYXRjaCgpIHtcbiAgICAgICAgdGhpcy5fY2xlYXJUaW1lcigpO1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRMb2dSZWNvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmNhbGxXaXRoVGltZW91dCkodGhpcy5fZXhwb3J0KHRoaXMuX2ZpbmlzaGVkTG9nUmVjb3Jkcy5zcGxpY2UoMCwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKSksIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gcmVzb2x2ZSgpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX21heWJlU3RhcnRUaW1lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRXhwb3J0aW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoT25lQmF0Y2goKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0V4cG9ydGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHdlIG9ubHkgd2FpdCBpZiB0aGUgcXVldWUgZG9lc24ndCBoYXZlIGVub3VnaCBlbGVtZW50cyB5ZXRcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkTG9nUmVjb3Jkcy5sZW5ndGggPj0gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGZsdXNoKCksIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzKTtcbiAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHJ1bnRpbWUsIHRoaXMgbWF5IGJlIGEgJ251bWJlcicgb3IgTm9kZUpTLlRpbWVvdXRcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl90aW1lciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyLnVucmVmKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NsZWFyVGltZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLl90aW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2V4cG9ydChsb2dSZWNvcmRzKSB7XG4gICAgICAgIGNvbnN0IGRvRXhwb3J0ID0gKCkgPT4gY29yZV8xLmludGVybmFsXG4gICAgICAgICAgICAuX2V4cG9ydCh0aGlzLl9leHBvcnRlciwgbG9nUmVjb3JkcylcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuY29kZSAhPT0gY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUykge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKShyZXN1bHQuZXJyb3IgPz9cbiAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKGBCYXRjaExvZ1JlY29yZFByb2Nlc3NvcjogbG9nIHJlY29yZCBleHBvcnQgZmFpbGVkIChzdGF0dXMgJHtyZXN1bHR9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKTtcbiAgICAgICAgY29uc3QgcGVuZGluZ1Jlc291cmNlcyA9IGxvZ1JlY29yZHNcbiAgICAgICAgICAgIC5tYXAobG9nUmVjb3JkID0+IGxvZ1JlY29yZC5yZXNvdXJjZSlcbiAgICAgICAgICAgIC5maWx0ZXIocmVzb3VyY2UgPT4gcmVzb3VyY2UuYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyk7XG4gICAgICAgIC8vIEF2b2lkIHNjaGVkdWxpbmcgYSBwcm9taXNlIHRvIG1ha2UgdGhlIGJlaGF2aW9yIG1vcmUgcHJlZGljdGFibGUgYW5kIGVhc2llciB0byB0ZXN0XG4gICAgICAgIGlmIChwZW5kaW5nUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvRXhwb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZ1Jlc291cmNlcy5tYXAocmVzb3VyY2UgPT4gcmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcz8uKCkpKS50aGVuKGRvRXhwb3J0LCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JCYXNlID0gQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JCYXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JCYXNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaExvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZV8xID0gcmVxdWlyZShcIi4uLy4uLy4uL2V4cG9ydC9CYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2VcIik7XG5jbGFzcyBCYXRjaExvZ1JlY29yZFByb2Nlc3NvciBleHRlbmRzIEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZV8xLkJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZSB7XG4gICAgb25TaHV0ZG93bigpIHsgfVxufVxuZXhwb3J0cy5CYXRjaExvZ1JlY29yZFByb2Nlc3NvciA9IEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yID0gdm9pZCAwO1xudmFyIEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXRjaExvZ1JlY29yZFByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JfMS5CYXRjaExvZ1JlY29yZFByb2Nlc3NvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaExvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5CYXRjaExvZ1JlY29yZFByb2Nlc3NvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaExvZ1JlY29yZFByb2Nlc3NvciA9IGV4cG9ydHMuSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlciA9IGV4cG9ydHMuU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yID0gZXhwb3J0cy5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIgPSBleHBvcnRzLk5vb3BMb2dSZWNvcmRQcm9jZXNzb3IgPSBleHBvcnRzLkxvZ2dlclByb3ZpZGVyID0gdm9pZCAwO1xudmFyIExvZ2dlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9Mb2dnZXJQcm92aWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxvZ2dlclByb3ZpZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBMb2dnZXJQcm92aWRlcl8xLkxvZ2dlclByb3ZpZGVyOyB9IH0pO1xudmFyIE5vb3BMb2dSZWNvcmRQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9Ob29wTG9nUmVjb3JkUHJvY2Vzc29yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm9vcExvZ1JlY29yZFByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcExvZ1JlY29yZFByb2Nlc3Nvcl8xLk5vb3BMb2dSZWNvcmRQcm9jZXNzb3I7IH0gfSk7XG52YXIgQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBDb25zb2xlTG9nUmVjb3JkRXhwb3J0ZXJfMS5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXI7IH0gfSk7XG52YXIgU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTaW1wbGVMb2dSZWNvcmRQcm9jZXNzb3JfMS5TaW1wbGVMb2dSZWNvcmRQcm9jZXNzb3I7IH0gfSk7XG52YXIgSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0luTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBJbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyXzEuSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlcjsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXRjaExvZ1JlY29yZFByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5CYXRjaExvZ1JlY29yZFByb2Nlc3NvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQWdncmVnYXRpb25UZW1wb3JhbGl0eSBpbmRpY2F0ZXMgdGhlIHdheSBhZGRpdGl2ZSBxdWFudGl0aWVzIGFyZSBleHByZXNzZWQuXG4gKi9cbmV4cG9ydCB2YXIgQWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbihmdW5jdGlvbiAoQWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbQWdncmVnYXRpb25UZW1wb3JhbGl0eVtcIkRFTFRBXCJdID0gMF0gPSBcIkRFTFRBXCI7XG4gICAgQWdncmVnYXRpb25UZW1wb3JhbGl0eVtBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W1wiQ1VNVUxBVElWRVwiXSA9IDFdID0gXCJDVU1VTEFUSVZFXCI7XG59KShBZ2dyZWdhdGlvblRlbXBvcmFsaXR5IHx8IChBZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBTdXBwb3J0ZWQgdHlwZXMgb2YgbWV0cmljIGluc3RydW1lbnRzLlxuICovXG5leHBvcnQgdmFyIEluc3RydW1lbnRUeXBlO1xuKGZ1bmN0aW9uIChJbnN0cnVtZW50VHlwZSkge1xuICAgIEluc3RydW1lbnRUeXBlW1wiQ09VTlRFUlwiXSA9IFwiQ09VTlRFUlwiO1xuICAgIEluc3RydW1lbnRUeXBlW1wiR0FVR0VcIl0gPSBcIkdBVUdFXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJISVNUT0dSQU1cIl0gPSBcIkhJU1RPR1JBTVwiO1xuICAgIEluc3RydW1lbnRUeXBlW1wiVVBfRE9XTl9DT1VOVEVSXCJdID0gXCJVUF9ET1dOX0NPVU5URVJcIjtcbiAgICBJbnN0cnVtZW50VHlwZVtcIk9CU0VSVkFCTEVfQ09VTlRFUlwiXSA9IFwiT0JTRVJWQUJMRV9DT1VOVEVSXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJPQlNFUlZBQkxFX0dBVUdFXCJdID0gXCJPQlNFUlZBQkxFX0dBVUdFXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJPQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUlwiXSA9IFwiT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVJcIjtcbn0pKEluc3RydW1lbnRUeXBlIHx8IChJbnN0cnVtZW50VHlwZSA9IHt9KSk7XG4vKipcbiAqIFRoZSBhZ2dyZWdhdGVkIHBvaW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IHZhciBEYXRhUG9pbnRUeXBlO1xuKGZ1bmN0aW9uIChEYXRhUG9pbnRUeXBlKSB7XG4gICAgLyoqXG4gICAgICogQSBoaXN0b2dyYW0gZGF0YSBwb2ludCBjb250YWlucyBhIGhpc3RvZ3JhbSBzdGF0aXN0aWNzIG9mIGNvbGxlY3RlZFxuICAgICAqIHZhbHVlcyB3aXRoIGEgbGlzdCBvZiBleHBsaWNpdCBidWNrZXQgYm91bmRhcmllcyBhbmQgc3RhdGlzdGljcyBzdWNoXG4gICAgICogYXMgbWluLCBtYXgsIGNvdW50LCBhbmQgc3VtIG9mIGFsbCBjb2xsZWN0ZWQgdmFsdWVzLlxuICAgICAqL1xuICAgIERhdGFQb2ludFR5cGVbRGF0YVBvaW50VHlwZVtcIkhJU1RPR1JBTVwiXSA9IDBdID0gXCJISVNUT0dSQU1cIjtcbiAgICAvKipcbiAgICAgKiBBbiBleHBvbmVudGlhbCBoaXN0b2dyYW0gZGF0YSBwb2ludCBjb250YWlucyBhIGhpc3RvZ3JhbSBzdGF0aXN0aWNzIG9mXG4gICAgICogY29sbGVjdGVkIHZhbHVlcyB3aGVyZSBidWNrZXQgYm91bmRhcmllcyBhcmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkXG4gICAgICogdXNpbmcgYW4gZXhwb25lbnRpYWwgZnVuY3Rpb24sIGFuZCBzdGF0aXN0aWNzIHN1Y2ggYXMgbWluLCBtYXgsIGNvdW50LFxuICAgICAqIGFuZCBzdW0gb2YgYWxsIGNvbGxlY3RlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgRGF0YVBvaW50VHlwZVtEYXRhUG9pbnRUeXBlW1wiRVhQT05FTlRJQUxfSElTVE9HUkFNXCJdID0gMV0gPSBcIkVYUE9ORU5USUFMX0hJU1RPR1JBTVwiO1xuICAgIC8qKlxuICAgICAqIEEgZ2F1Z2UgbWV0cmljIGRhdGEgcG9pbnQgaGFzIG9ubHkgYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZS5cbiAgICAgKi9cbiAgICBEYXRhUG9pbnRUeXBlW0RhdGFQb2ludFR5cGVbXCJHQVVHRVwiXSA9IDJdID0gXCJHQVVHRVwiO1xuICAgIC8qKlxuICAgICAqIEEgc3VtIG1ldHJpYyBkYXRhIHBvaW50IGhhcyBhIHNpbmdsZSBudW1lcmljIHZhbHVlIGFuZCBhXG4gICAgICogbW9ub3RvbmljaXR5LWluZGljYXRvci5cbiAgICAgKi9cbiAgICBEYXRhUG9pbnRUeXBlW0RhdGFQb2ludFR5cGVbXCJTVU1cIl0gPSAzXSA9IFwiU1VNXCI7XG59KShEYXRhUG9pbnRUeXBlIHx8IChEYXRhUG9pbnRUeXBlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldHJpY0RhdGEuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBDb252ZXJ0aW5nIHRoZSB1bm9yZGVyZWQgYXR0cmlidXRlcyBpbnRvIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZy5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIHVzZXIgcHJvdmlkZWQgdW5vcmRlcmVkIEF0dHJpYnV0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiAnJztcbiAgICAvLyBSZXR1cm4gYSBzdHJpbmcgdGhhdCBpcyBzdGFibGUgb24ga2V5IG9yZGVycy5cbiAgICBrZXlzID0ga2V5cy5zb3J0KCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleXMubWFwKGtleSA9PiBba2V5LCBhdHRyaWJ1dGVzW2tleV1dKSk7XG59XG4vKipcbiAqIENvbnZlcnRpbmcgdGhlIGluc3RydW1lbnRhdGlvbiBzY29wZSBvYmplY3QgdG8gYSB1bmlxdWUgaWRlbnRpZmllciBzdHJpbmcuXG4gKiBAcGFyYW0gaW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRhdGlvblNjb3BlSWQoaW5zdHJ1bWVudGF0aW9uU2NvcGUpIHtcbiAgICByZXR1cm4gYCR7aW5zdHJ1bWVudGF0aW9uU2NvcGUubmFtZX06JHtpbnN0cnVtZW50YXRpb25TY29wZS52ZXJzaW9uID8/ICcnfToke2luc3RydW1lbnRhdGlvblNjb3BlLnNjaGVtYVVybCA/PyAnJ31gO1xufVxuLyoqXG4gKiBFcnJvciB0aGF0IGlzIHRocm93biBvbiB0aW1lb3V0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICAvLyBtYW51YWxseSBhZGp1c3QgcHJvdG90eXBlIHRvIHJldGFpbiBgaW5zdGFuY2VvZmAgZnVuY3Rpb25hbGl0eSB3aGVuIHRhcmdldGluZyBFUzUsIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUaW1lb3V0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG4vKipcbiAqIEFkZHMgYSB0aW1lb3V0IHRvIGEgcHJvbWlzZSBhbmQgcmVqZWN0cyBpZiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgaGFzIGVsYXBzZWQuIEFsc28gcmVqZWN0cyBpZiB0aGUgc3BlY2lmaWVkIHByb21pc2VcbiAqIHJlamVjdHMsIGFuZCByZXNvbHZlcyBpZiB0aGUgc3BlY2lmaWVkIHByb21pc2UgcmVzb2x2ZXMuXG4gKlxuICogPHA+IE5PVEU6IHRoaXMgb3BlcmF0aW9uIHdpbGwgY29udGludWUgZXZlbiBhZnRlciBpdCB0aHJvd3MgYSB7QGxpbmsgVGltZW91dEVycm9yfS5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSBwcm9taXNlIHRvIHVzZSB3aXRoIHRpbWVvdXQuXG4gKiBAcGFyYW0gdGltZW91dCB0aGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxsV2l0aFRpbWVvdXQocHJvbWlzZSwgdGltZW91dCkge1xuICAgIGxldCB0aW1lb3V0SGFuZGxlO1xuICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gdGltZW91dEZ1bmN0aW9uKF9yZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZW91dEhhbmRsZXIoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IFRpbWVvdXRFcnJvcignT3BlcmF0aW9uIHRpbWVkIG91dC4nKSk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3Byb21pc2UsIHRpbWVvdXRQcm9taXNlXSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG59XG4vKipcbiAqIE5vZGUuanMgdjEyLjkgbG93ZXIgYW5kIGJyb3dzZXIgY29tcGF0aWJsZSBgUHJvbWlzZS5hbGxTZXR0bGVkYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIFByb21pc2VBbGxTZXR0bGVkKHByb21pc2VzKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgcDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnZnVsZmlsbGVkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmV0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdyZWplY3RlZCcsXG4gICAgICAgICAgICAgICAgcmVhc29uOiBlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2VBbGxTZXR0bGVkUmVqZWN0aW9uUmVzdWx0KGl0KSB7XG4gICAgcmV0dXJuIGl0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcXVhbHMobGhzLCByaHMpIHtcbiAgICBpZiAobGhzLnNpemUgIT09IHJocy5zaXplKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGxocykge1xuICAgICAgICBpZiAoIXJocy5oYXMoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogQmluYXJ5IHNlYXJjaCB0aGUgc29ydGVkIGFycmF5IHRvIHRoZSBmaW5kIHVwcGVyIGJvdW5kIGZvciB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gYXJyXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5hcnlTZWFyY2hVQihhcnIsIHZhbHVlKSB7XG4gICAgbGV0IGxvID0gMDtcbiAgICBsZXQgaGkgPSBhcnIubGVuZ3RoIC0gMTtcbiAgICBsZXQgcmV0ID0gYXJyLmxlbmd0aDtcbiAgICB3aGlsZSAoaGkgPj0gbG8pIHtcbiAgICAgICAgY29uc3QgbWlkID0gbG8gKyBNYXRoLnRydW5jKChoaSAtIGxvKSAvIDIpO1xuICAgICAgICBpZiAoYXJyW21pZF0gPCB2YWx1ZSkge1xuICAgICAgICAgICAgbG8gPSBtaWQgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0ID0gbWlkO1xuICAgICAgICAgICAgaGkgPSBtaWQgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzQ2FzZUluc2Vuc2l0aXZlKGxocywgcmhzKSB7XG4gICAgcmV0dXJuIGxocy50b0xvd2VyQ2FzZSgpID09PSByaHMudG9Mb3dlckNhc2UoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBUaGUga2luZCBvZiBhZ2dyZWdhdG9yLiAqL1xuZXhwb3J0IHZhciBBZ2dyZWdhdG9yS2luZDtcbihmdW5jdGlvbiAoQWdncmVnYXRvcktpbmQpIHtcbiAgICBBZ2dyZWdhdG9yS2luZFtBZ2dyZWdhdG9yS2luZFtcIkRST1BcIl0gPSAwXSA9IFwiRFJPUFwiO1xuICAgIEFnZ3JlZ2F0b3JLaW5kW0FnZ3JlZ2F0b3JLaW5kW1wiU1VNXCJdID0gMV0gPSBcIlNVTVwiO1xuICAgIEFnZ3JlZ2F0b3JLaW5kW0FnZ3JlZ2F0b3JLaW5kW1wiTEFTVF9WQUxVRVwiXSA9IDJdID0gXCJMQVNUX1ZBTFVFXCI7XG4gICAgQWdncmVnYXRvcktpbmRbQWdncmVnYXRvcktpbmRbXCJISVNUT0dSQU1cIl0gPSAzXSA9IFwiSElTVE9HUkFNXCI7XG4gICAgQWdncmVnYXRvcktpbmRbQWdncmVnYXRvcktpbmRbXCJFWFBPTkVOVElBTF9ISVNUT0dSQU1cIl0gPSA0XSA9IFwiRVhQT05FTlRJQUxfSElTVE9HUkFNXCI7XG59KShBZ2dyZWdhdG9yS2luZCB8fCAoQWdncmVnYXRvcktpbmQgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQWdncmVnYXRvcktpbmQgfSBmcm9tICcuL3R5cGVzJztcbi8qKiBCYXNpYyBhZ2dyZWdhdG9yIGZvciBOb25lIHdoaWNoIGtlZXBzIG5vIHJlY29yZGVkIHZhbHVlLiAqL1xuZXhwb3J0IGNsYXNzIERyb3BBZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gQWdncmVnYXRvcktpbmQuRFJPUDtcbiAgICBjcmVhdGVBY2N1bXVsYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG1lcmdlKF9wcmV2aW91cywgX2RlbHRhKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGRpZmYoX3ByZXZpb3VzLCBfY3VycmVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0b01ldHJpY0RhdGEoX2Rlc2NyaXB0b3IsIF9hZ2dyZWdhdGlvblRlbXBvcmFsaXR5LCBfYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLCBfZW5kVGltZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURyb3AuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQWdncmVnYXRvcktpbmQsIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBEYXRhUG9pbnRUeXBlLCBJbnN0cnVtZW50VHlwZSwgfSBmcm9tICcuLi9leHBvcnQvTWV0cmljRGF0YSc7XG5pbXBvcnQgeyBiaW5hcnlTZWFyY2hVQiB9IGZyb20gJy4uL3V0aWxzJztcbmZ1bmN0aW9uIGNyZWF0ZU5ld0VtcHR5Q2hlY2twb2ludChib3VuZGFyaWVzKSB7XG4gICAgY29uc3QgY291bnRzID0gYm91bmRhcmllcy5tYXAoKCkgPT4gMCk7XG4gICAgY291bnRzLnB1c2goMCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgYm91bmRhcmllcyxcbiAgICAgICAgICAgIGNvdW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgc3VtOiAwLFxuICAgICAgICBjb3VudDogMCxcbiAgICAgICAgaGFzTWluTWF4OiBmYWxzZSxcbiAgICAgICAgbWluOiBJbmZpbml0eSxcbiAgICAgICAgbWF4OiAtSW5maW5pdHksXG4gICAgfTtcbn1cbmV4cG9ydCBjbGFzcyBIaXN0b2dyYW1BY2N1bXVsYXRpb24ge1xuICAgIHN0YXJ0VGltZTtcbiAgICBfYm91bmRhcmllcztcbiAgICBfcmVjb3JkTWluTWF4O1xuICAgIF9jdXJyZW50O1xuICAgIGNvbnN0cnVjdG9yKHN0YXJ0VGltZSwgYm91bmRhcmllcywgcmVjb3JkTWluTWF4ID0gdHJ1ZSwgY3VycmVudCA9IGNyZWF0ZU5ld0VtcHR5Q2hlY2twb2ludChib3VuZGFyaWVzKSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5fYm91bmRhcmllcyA9IGJvdW5kYXJpZXM7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IHJlY29yZE1pbk1heDtcbiAgICAgICAgdGhpcy5fY3VycmVudCA9IGN1cnJlbnQ7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICAvLyBOYU4gZG9lcyBub3QgZmFsbCBpbnRvIGFueSBidWNrZXQsIGlzIG5vdCB6ZXJvIGFuZCBzaG91bGQgbm90IGJlIGNvdW50ZWQsXG4gICAgICAgIC8vIE5hTiBpcyBuZXZlciBncmVhdGVyIHRoYW4gbWF4IG5vciBsZXNzIHRoYW4gbWluLCB0aGVyZWZvcmUgcmV0dXJuIGFzIHRoZXJlJ3Mgbm90aGluZyBmb3IgdXMgdG8gZG8uXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudC5jb3VudCArPSAxO1xuICAgICAgICB0aGlzLl9jdXJyZW50LnN1bSArPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3JlY29yZE1pbk1heCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5taW4gPSBNYXRoLm1pbih2YWx1ZSwgdGhpcy5fY3VycmVudC5taW4pO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5tYXggPSBNYXRoLm1heCh2YWx1ZSwgdGhpcy5fY3VycmVudC5tYXgpO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5oYXNNaW5NYXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9IGJpbmFyeVNlYXJjaFVCKHRoaXMuX2JvdW5kYXJpZXMsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3VycmVudC5idWNrZXRzLmNvdW50c1tpZHhdICs9IDE7XG4gICAgfVxuICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgfVxuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxufVxuLyoqXG4gKiBCYXNpYyBhZ2dyZWdhdG9yIHdoaWNoIG9ic2VydmVzIGV2ZW50cyBhbmQgY291bnRzIHRoZW0gaW4gcHJlLWRlZmluZWQgYnVja2V0c1xuICogYW5kIHByb3ZpZGVzIHRoZSB0b3RhbCBzdW0gYW5kIGNvdW50IG9mIGFsbCBvYnNlcnZhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBIaXN0b2dyYW1BZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gQWdncmVnYXRvcktpbmQuSElTVE9HUkFNO1xuICAgIF9ib3VuZGFyaWVzO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIF9ib3VuZGFyaWVzIHNvcnRlZCB1cHBlciBib3VuZHMgb2YgcmVjb3JkZWQgdmFsdWVzLlxuICAgICAqIEBwYXJhbSBfcmVjb3JkTWluTWF4IElmIHNldCB0byB0cnVlLCBtaW4gYW5kIG1heCB3aWxsIGJlIHJlY29yZGVkLiBPdGhlcndpc2UsIG1pbiBhbmQgbWF4IHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGJvdW5kYXJpZXMsIHJlY29yZE1pbk1heCkge1xuICAgICAgICB0aGlzLl9ib3VuZGFyaWVzID0gYm91bmRhcmllcztcbiAgICAgICAgdGhpcy5fcmVjb3JkTWluTWF4ID0gcmVjb3JkTWluTWF4O1xuICAgIH1cbiAgICBjcmVhdGVBY2N1bXVsYXRpb24oc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgSGlzdG9ncmFtQWNjdW11bGF0aW9uKHN0YXJ0VGltZSwgdGhpcy5fYm91bmRhcmllcywgdGhpcy5fcmVjb3JkTWluTWF4KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlIG9mIHR3byBoaXN0b2dyYW0gYWNjdW11bGF0aW9ucy4gQXMgbG9uZyBhcyBvbmUgQWdncmVnYXRvclxuICAgICAqIGluc3RhbmNlIHByb2R1Y2VzIGFsbCBBY2N1bXVsYXRpb25zIHdpdGggY29uc3RhbnQgYm91bmRhcmllcyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gICAgICogbWVyZ2luZyBhY2N1bXVsYXRpb25zIHdpdGggZGlmZmVyZW50IGJvdW5kYXJpZXMuXG4gICAgICovXG4gICAgbWVyZ2UocHJldmlvdXMsIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBwcmV2aW91cy50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgY29uc3QgZGVsdGFWYWx1ZSA9IGRlbHRhLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0NvdW50cyA9IHByZXZpb3VzVmFsdWUuYnVja2V0cy5jb3VudHM7XG4gICAgICAgIGNvbnN0IGRlbHRhQ291bnRzID0gZGVsdGFWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgbWVyZ2VkQ291bnRzID0gbmV3IEFycmF5KHByZXZpb3VzQ291bnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHByZXZpb3VzQ291bnRzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIG1lcmdlZENvdW50c1tpZHhdID0gcHJldmlvdXNDb3VudHNbaWR4XSArIGRlbHRhQ291bnRzW2lkeF07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1pbiA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWF4ID0gLUluZmluaXR5O1xuICAgICAgICBpZiAodGhpcy5fcmVjb3JkTWluTWF4KSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZS5oYXNNaW5NYXggJiYgZGVsdGFWYWx1ZS5oYXNNaW5NYXgpIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBNYXRoLm1pbihwcmV2aW91c1ZhbHVlLm1pbiwgZGVsdGFWYWx1ZS5taW4pO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KHByZXZpb3VzVmFsdWUubWF4LCBkZWx0YVZhbHVlLm1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcmV2aW91c1ZhbHVlLmhhc01pbk1heCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IHByZXZpb3VzVmFsdWUubWluO1xuICAgICAgICAgICAgICAgIG1heCA9IHByZXZpb3VzVmFsdWUubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGFWYWx1ZS5oYXNNaW5NYXgpIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBkZWx0YVZhbHVlLm1pbjtcbiAgICAgICAgICAgICAgICBtYXggPSBkZWx0YVZhbHVlLm1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbUFjY3VtdWxhdGlvbihwcmV2aW91cy5zdGFydFRpbWUsIHByZXZpb3VzVmFsdWUuYnVja2V0cy5ib3VuZGFyaWVzLCB0aGlzLl9yZWNvcmRNaW5NYXgsIHtcbiAgICAgICAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgICAgICAgICBib3VuZGFyaWVzOiBwcmV2aW91c1ZhbHVlLmJ1Y2tldHMuYm91bmRhcmllcyxcbiAgICAgICAgICAgICAgICBjb3VudHM6IG1lcmdlZENvdW50cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3VudDogcHJldmlvdXNWYWx1ZS5jb3VudCArIGRlbHRhVmFsdWUuY291bnQsXG4gICAgICAgICAgICBzdW06IHByZXZpb3VzVmFsdWUuc3VtICsgZGVsdGFWYWx1ZS5zdW0sXG4gICAgICAgICAgICBoYXNNaW5NYXg6IHRoaXMuX3JlY29yZE1pbk1heCAmJlxuICAgICAgICAgICAgICAgIChwcmV2aW91c1ZhbHVlLmhhc01pbk1heCB8fCBkZWx0YVZhbHVlLmhhc01pbk1heCksXG4gICAgICAgICAgICBtaW46IG1pbixcbiAgICAgICAgICAgIG1heDogbWF4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBERUxUQSBhZ2dyZWdhdGlvbiBieSBjb21wYXJpbmcgdHdvIGN1bXVsYXRpdmUgbWVhc3VyZW1lbnRzLlxuICAgICAqL1xuICAgIGRpZmYocHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjdXJyZW50LnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0NvdW50cyA9IHByZXZpb3VzVmFsdWUuYnVja2V0cy5jb3VudHM7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudHMgPSBjdXJyZW50VmFsdWUuYnVja2V0cy5jb3VudHM7XG4gICAgICAgIGNvbnN0IGRpZmZlZENvdW50cyA9IG5ldyBBcnJheShwcmV2aW91c0NvdW50cy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBwcmV2aW91c0NvdW50cy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBkaWZmZWRDb3VudHNbaWR4XSA9IGN1cnJlbnRDb3VudHNbaWR4XSAtIHByZXZpb3VzQ291bnRzW2lkeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW1BY2N1bXVsYXRpb24oY3VycmVudC5zdGFydFRpbWUsIHByZXZpb3VzVmFsdWUuYnVja2V0cy5ib3VuZGFyaWVzLCB0aGlzLl9yZWNvcmRNaW5NYXgsIHtcbiAgICAgICAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgICAgICAgICBib3VuZGFyaWVzOiBwcmV2aW91c1ZhbHVlLmJ1Y2tldHMuYm91bmRhcmllcyxcbiAgICAgICAgICAgICAgICBjb3VudHM6IGRpZmZlZENvdW50cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb3VudDogY3VycmVudFZhbHVlLmNvdW50IC0gcHJldmlvdXNWYWx1ZS5jb3VudCxcbiAgICAgICAgICAgIHN1bTogY3VycmVudFZhbHVlLnN1bSAtIHByZXZpb3VzVmFsdWUuc3VtLFxuICAgICAgICAgICAgaGFzTWluTWF4OiBmYWxzZSxcbiAgICAgICAgICAgIG1pbjogSW5maW5pdHksXG4gICAgICAgICAgICBtYXg6IC1JbmZpbml0eSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvTWV0cmljRGF0YShkZXNjcmlwdG9yLCBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5LCBhY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMsIGVuZFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5LFxuICAgICAgICAgICAgZGF0YVBvaW50VHlwZTogRGF0YVBvaW50VHlwZS5ISVNUT0dSQU0sXG4gICAgICAgICAgICBkYXRhUG9pbnRzOiBhY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMubWFwKChbYXR0cmlidXRlcywgYWNjdW11bGF0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VmFsdWUgPSBhY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIGluc3RydW1lbnQgYWxsb3dzIG5lZ2F0aXZlIHZhbHVlcy5cbiAgICAgICAgICAgICAgICBjb25zdCBhbGxvd3NOZWdhdGl2ZVZhbHVlcyA9IGRlc2NyaXB0b3IudHlwZSA9PT0gSW5zdHJ1bWVudFR5cGUuR0FVR0UgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBJbnN0cnVtZW50VHlwZS5VUF9ET1dOX0NPVU5URVIgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBJbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBwb2ludFZhbHVlLmhhc01pbk1heCA/IHBvaW50VmFsdWUubWluIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBwb2ludFZhbHVlLmhhc01pbk1heCA/IHBvaW50VmFsdWUubWF4IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtOiAhYWxsb3dzTmVnYXRpdmVWYWx1ZXMgPyBwb2ludFZhbHVlLnN1bSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldHM6IHBvaW50VmFsdWUuYnVja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBwb2ludFZhbHVlLmNvdW50LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1IaXN0b2dyYW0uanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Y2tldHMge1xuICAgIGJhY2tpbmc7XG4gICAgaW5kZXhCYXNlO1xuICAgIGluZGV4U3RhcnQ7XG4gICAgaW5kZXhFbmQ7XG4gICAgLyoqXG4gICAgICogVGhlIHRlcm0gaW5kZXggcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgdGhlIGV4cG9uZW50aWFsIGhpc3RvZ3JhbSBidWNrZXRcbiAgICAgKiB1c2VkIHRvIGRldGVybWluZSBpdHMgYm91bmRhcmllcy4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIGEgYnVja2V0IGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSBiYXNlICoqIGluZGV4IGFuZCB0aGUgdXBwZXIgYm91bmRhcnkgb2YgYSBidWNrZXQgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IGJhc2UgKiogKGluZGV4ICsgMSkuIGluZGV4IHZhbHVlcyBhcmUgc2lnbmVkIHRvIGFjY291bnRcbiAgICAgKiBmb3IgdmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxLlxuICAgICAqXG4gICAgICogaW5kZXhCYXNlIGlzIHRoZSBpbmRleCBvZiB0aGUgMHRoIHBvc2l0aW9uIGluIHRoZVxuICAgICAqIGJhY2tpbmcgYXJyYXksIGkuZS4sIGJhY2tpbmdbMF0gaXMgdGhlIGNvdW50XG4gICAgICogaW4gdGhlIGJ1Y2tldCB3aXRoIGluZGV4IGBpbmRleEJhc2VgLlxuICAgICAqXG4gICAgICogaW5kZXhTdGFydCBpcyB0aGUgc21hbGxlc3QgaW5kZXggdmFsdWUgcmVwcmVzZW50ZWRcbiAgICAgKiBpbiB0aGUgYmFja2luZyBhcnJheS5cbiAgICAgKlxuICAgICAqIGluZGV4RW5kIGlzIHRoZSBsYXJnZXN0IGluZGV4IHZhbHVlIHJlcHJlc2VudGVkIGluXG4gICAgICogdGhlIGJhY2tpbmcgYXJyYXkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYmFja2luZyA9IG5ldyBCdWNrZXRzQmFja2luZygpLCBpbmRleEJhc2UgPSAwLCBpbmRleFN0YXJ0ID0gMCwgaW5kZXhFbmQgPSAwKSB7XG4gICAgICAgIHRoaXMuYmFja2luZyA9IGJhY2tpbmc7XG4gICAgICAgIHRoaXMuaW5kZXhCYXNlID0gaW5kZXhCYXNlO1xuICAgICAgICB0aGlzLmluZGV4U3RhcnQgPSBpbmRleFN0YXJ0O1xuICAgICAgICB0aGlzLmluZGV4RW5kID0gaW5kZXhFbmQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9mZnNldCBpcyB0aGUgYnVja2V0IGluZGV4IG9mIHRoZSBzbWFsbGVzdCBlbnRyeSBpbiB0aGUgY291bnRzIGFycmF5XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgb2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleFN0YXJ0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCdWNrZXRzIGlzIGEgdmlldyBpbnRvIHRoZSBiYWNraW5nIGFycmF5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYmFja2luZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV4RW5kID09PSB0aGlzLmluZGV4U3RhcnQgJiYgdGhpcy5hdCgwKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhFbmQgLSB0aGlzLmluZGV4U3RhcnQgKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb3VudHMsIHdoZXJlIGNvdW50W2ldIGNhcnJpZXMgdGhlIGNvdW50XG4gICAgICogb2YgdGhlIGJ1Y2tldCBhdCBpbmRleCAob2Zmc2V0K2kpLiAgY291bnRbaV0gaXMgdGhlIGNvdW50IG9mXG4gICAgICogdmFsdWVzIGdyZWF0ZXIgdGhhbiBiYXNlXihvZmZzZXQraSkgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqIGJhc2VeKG9mZnNldCtpKzEpLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBsb2dpY2FsIGNvdW50cyBiYXNlZCBvbiB0aGUgYmFja2luZyBhcnJheVxuICAgICAqL1xuICAgIGNvdW50cygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0sIChfLCBpKSA9PiB0aGlzLmF0KGkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXQgcmV0dXJucyB0aGUgY291bnQgb2YgdGhlIGJ1Y2tldCBhdCBhIHBvc2l0aW9uIGluIHRoZSBsb2dpY2FsXG4gICAgICogYXJyYXkgb2YgY291bnRzLlxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgYXQocG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgYmlhcyA9IHRoaXMuaW5kZXhCYXNlIC0gdGhpcy5pbmRleFN0YXJ0O1xuICAgICAgICBpZiAocG9zaXRpb24gPCBiaWFzKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSB0aGlzLmJhY2tpbmcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9uIC09IGJpYXM7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tpbmcuY291bnRBdChwb3NpdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGluY3JlbWVudEJ1Y2tldCBpbmNyZW1lbnRzIHRoZSBiYWNraW5nIGFycmF5IGluZGV4IGJ5IGBpbmNyZW1lbnRgXG4gICAgICogQHBhcmFtIGJ1Y2tldEluZGV4XG4gICAgICogQHBhcmFtIGluY3JlbWVudFxuICAgICAqL1xuICAgIGluY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgaW5jcmVtZW50KSB7XG4gICAgICAgIHRoaXMuYmFja2luZy5pbmNyZW1lbnQoYnVja2V0SW5kZXgsIGluY3JlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGRlY3JlbWVudEJ1Y2tldCBkZWNyZW1lbnRzIHRoZSBiYWNraW5nIGFycmF5IGluZGV4IGJ5IGBkZWNyZW1lbnRgXG4gICAgICogaWYgZGVjcmVtZW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSwgaXQncyBzZXQgdG8gMC5cbiAgICAgKiBAcGFyYW0gYnVja2V0SW5kZXhcbiAgICAgKiBAcGFyYW0gZGVjcmVtZW50XG4gICAgICovXG4gICAgZGVjcmVtZW50QnVja2V0KGJ1Y2tldEluZGV4LCBkZWNyZW1lbnQpIHtcbiAgICAgICAgdGhpcy5iYWNraW5nLmRlY3JlbWVudChidWNrZXRJbmRleCwgZGVjcmVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJpbSByZW1vdmVzIGxlYWRpbmcgYW5kIC8gb3IgdHJhaWxpbmcgemVybyBidWNrZXRzICh3aGljaCBjYW4gb2NjdXJcbiAgICAgKiBhZnRlciBkaWZmaW5nIHR3byBoaXN0b3MpIGFuZCByb3RhdGVzIHRoZSBiYWNraW5nIGFycmF5IHNvIHRoYXQgdGhlXG4gICAgICogc21hbGxlc3Qgbm9uLXplcm8gaW5kZXggaXMgaW4gdGhlIDB0aCBwb3NpdGlvbiBvZiB0aGUgYmFja2luZyBhcnJheVxuICAgICAqL1xuICAgIHRyaW0oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXQoaSkgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4U3RhcnQgKz0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIC8vdGhlIGVudGlyZSBhcnJheSBpcyB6ZXJvZWQgb3V0XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleFN0YXJ0ID0gdGhpcy5pbmRleEVuZCA9IHRoaXMuaW5kZXhCYXNlID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0KGkpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEVuZCAtPSB0aGlzLmxlbmd0aCAtIGkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JvdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkb3duc2NhbGUgZmlyc3Qgcm90YXRlcywgdGhlbiBjb2xsYXBzZXMgMioqYGJ5YC10by0xIGJ1Y2tldHMuXG4gICAgICogQHBhcmFtIGJ5XG4gICAgICovXG4gICAgZG93bnNjYWxlKGJ5KSB7XG4gICAgICAgIHRoaXMuX3JvdGF0ZSgpO1xuICAgICAgICBjb25zdCBzaXplID0gMSArIHRoaXMuaW5kZXhFbmQgLSB0aGlzLmluZGV4U3RhcnQ7XG4gICAgICAgIGNvbnN0IGVhY2ggPSAxIDw8IGJ5O1xuICAgICAgICBsZXQgaW5wb3MgPSAwO1xuICAgICAgICBsZXQgb3V0cG9zID0gMDtcbiAgICAgICAgZm9yIChsZXQgcG9zID0gdGhpcy5pbmRleFN0YXJ0OyBwb3MgPD0gdGhpcy5pbmRleEVuZDspIHtcbiAgICAgICAgICAgIGxldCBtb2QgPSBwb3MgJSBlYWNoO1xuICAgICAgICAgICAgaWYgKG1vZCA8IDApIHtcbiAgICAgICAgICAgICAgICBtb2QgKz0gZWFjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBtb2Q7IGkgPCBlYWNoICYmIGlucG9zIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2NhdGVCdWNrZXQob3V0cG9zLCBpbnBvcyk7XG4gICAgICAgICAgICAgICAgaW5wb3MrKztcbiAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXhTdGFydCA+Pj0gYnk7XG4gICAgICAgIHRoaXMuaW5kZXhFbmQgPj49IGJ5O1xuICAgICAgICB0aGlzLmluZGV4QmFzZSA9IHRoaXMuaW5kZXhTdGFydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBCdWNrZXRzXG4gICAgICogQHJldHVybnMge0J1Y2tldHN9XG4gICAgICovXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQnVja2V0cyh0aGlzLmJhY2tpbmcuY2xvbmUoKSwgdGhpcy5pbmRleEJhc2UsIHRoaXMuaW5kZXhTdGFydCwgdGhpcy5pbmRleEVuZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9yb3RhdGUgc2hpZnRzIHRoZSBiYWNraW5nIGFycmF5IGNvbnRlbnRzIHNvIHRoYXQgaW5kZXhTdGFydCA9PVxuICAgICAqIGluZGV4QmFzZSB0byBzaW1wbGlmeSB0aGUgZG93bnNjYWxlIGxvZ2ljLlxuICAgICAqL1xuICAgIF9yb3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGJpYXMgPSB0aGlzLmluZGV4QmFzZSAtIHRoaXMuaW5kZXhTdGFydDtcbiAgICAgICAgaWYgKGJpYXMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaWFzID4gMCkge1xuICAgICAgICAgICAgdGhpcy5iYWNraW5nLnJldmVyc2UoMCwgdGhpcy5iYWNraW5nLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tpbmcucmV2ZXJzZSgwLCBiaWFzKTtcbiAgICAgICAgICAgIHRoaXMuYmFja2luZy5yZXZlcnNlKGJpYXMsIHRoaXMuYmFja2luZy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbmVnYXRpdmUgYmlhcywgdGhpcyBjYW4gaGFwcGVuIHdoZW4gZGlmZmluZyB0d28gaGlzdG9ncmFtc1xuICAgICAgICAgICAgdGhpcy5iYWNraW5nLnJldmVyc2UoMCwgdGhpcy5iYWNraW5nLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tpbmcucmV2ZXJzZSgwLCB0aGlzLmJhY2tpbmcubGVuZ3RoICsgYmlhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleEJhc2UgPSB0aGlzLmluZGV4U3RhcnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9yZWxvY2F0ZUJ1Y2tldCBhZGRzIHRoZSBjb3VudCBpbiBjb3VudHNbc3JjXSB0byBjb3VudHNbZGVzdF0gYW5kXG4gICAgICogcmVzZXRzIGNvdW50W3NyY10gdG8gemVyby5cbiAgICAgKi9cbiAgICBfcmVsb2NhdGVCdWNrZXQoZGVzdCwgc3JjKSB7XG4gICAgICAgIGlmIChkZXN0ID09PSBzcmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudEJ1Y2tldChkZXN0LCB0aGlzLmJhY2tpbmcuZW1wdHlCdWNrZXQoc3JjKSk7XG4gICAgfVxufVxuLyoqXG4gKiBCdWNrZXRzQmFja2luZyBob2xkcyB0aGUgcmF3IGJ1Y2tldHMgYW5kIHNvbWUgdXRpbGl0eSBtZXRob2RzIHRvXG4gKiBtYW5hZ2UgdGhlbS5cbiAqL1xuY2xhc3MgQnVja2V0c0JhY2tpbmcge1xuICAgIF9jb3VudHM7XG4gICAgY29uc3RydWN0b3IoY291bnRzID0gWzBdKSB7XG4gICAgICAgIHRoaXMuX2NvdW50cyA9IGNvdW50cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogbGVuZ3RoIHJldHVybnMgdGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGJhY2tpbmcgYXJyYXksIHdoaWNoXG4gICAgICogaXMgPj0gYnVja2V0cy5sZW5ndGgoKVxuICAgICAqL1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudHMubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb3VudEF0IHJldHVybnMgdGhlIGNvdW50IGluIGEgc3BlY2lmaWMgYnVja2V0XG4gICAgICovXG4gICAgY291bnRBdChwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdW50c1twb3NdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBncm93VG8gZ3Jvd3MgYSBiYWNraW5nIGFycmF5IGFuZCBjb3BpZXMgb2xkIGVudHJpZXNcbiAgICAgKiBpbnRvIHRoZWlyIGNvcnJlY3QgbmV3IHBvc2l0aW9ucy5cbiAgICAgKi9cbiAgICBncm93VG8obmV3U2l6ZSwgb2xkUG9zaXRpdmVMaW1pdCwgbmV3UG9zaXRpdmVMaW1pdCkge1xuICAgICAgICBjb25zdCB0bXAgPSBuZXcgQXJyYXkobmV3U2l6ZSkuZmlsbCgwKTtcbiAgICAgICAgdG1wLnNwbGljZShuZXdQb3NpdGl2ZUxpbWl0LCB0aGlzLl9jb3VudHMubGVuZ3RoIC0gb2xkUG9zaXRpdmVMaW1pdCwgLi4udGhpcy5fY291bnRzLnNsaWNlKG9sZFBvc2l0aXZlTGltaXQpKTtcbiAgICAgICAgdG1wLnNwbGljZSgwLCBvbGRQb3NpdGl2ZUxpbWl0LCAuLi50aGlzLl9jb3VudHMuc2xpY2UoMCwgb2xkUG9zaXRpdmVMaW1pdCkpO1xuICAgICAgICB0aGlzLl9jb3VudHMgPSB0bXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHJldmVyc2UgdGhlIGl0ZW1zIGluIHRoZSBiYWNraW5nIGFycmF5IGluIHRoZSByYW5nZSBbZnJvbSwgbGltaXQpLlxuICAgICAqL1xuICAgIHJldmVyc2UoZnJvbSwgbGltaXQpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTWF0aC5mbG9vcigoZnJvbSArIGxpbWl0KSAvIDIpIC0gZnJvbTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fY291bnRzW2Zyb20gKyBpXTtcbiAgICAgICAgICAgIHRoaXMuX2NvdW50c1tmcm9tICsgaV0gPSB0aGlzLl9jb3VudHNbbGltaXQgLSBpIC0gMV07XG4gICAgICAgICAgICB0aGlzLl9jb3VudHNbbGltaXQgLSBpIC0gMV0gPSB0bXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogZW1wdHlCdWNrZXQgZW1wdGllcyB0aGUgY291bnQgZnJvbSBhIGJ1Y2tldCwgZm9yXG4gICAgICogbW92aW5nIGludG8gYW5vdGhlci5cbiAgICAgKi9cbiAgICBlbXB0eUJ1Y2tldChzcmMpIHtcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fY291bnRzW3NyY107XG4gICAgICAgIHRoaXMuX2NvdW50c1tzcmNdID0gMDtcbiAgICAgICAgcmV0dXJuIHRtcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogaW5jcmVtZW50cyBhIGJ1Y2tldCBieSBgaW5jcmVtZW50YFxuICAgICAqL1xuICAgIGluY3JlbWVudChidWNrZXRJbmRleCwgaW5jcmVtZW50KSB7XG4gICAgICAgIHRoaXMuX2NvdW50c1tidWNrZXRJbmRleF0gKz0gaW5jcmVtZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkZWNyZW1lbnRzIGEgYnVja2V0IGJ5IGBkZWNyZW1lbnRgXG4gICAgICovXG4gICAgZGVjcmVtZW50KGJ1Y2tldEluZGV4LCBkZWNyZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50c1tidWNrZXRJbmRleF0gPj0gZGVjcmVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb3VudHNbYnVja2V0SW5kZXhdIC09IGRlY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSdyZSBiZWluZyBkZWZlbnNpdmUgYWdhaW5zdFxuICAgICAgICAgICAgLy8gbmVnYXRpdmUgY291bnRzLlxuICAgICAgICAgICAgdGhpcy5fY291bnRzW2J1Y2tldEluZGV4XSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBCdWNrZXRzQmFja2luZ1xuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1Y2tldHNCYWNraW5nKFsuLi50aGlzLl9jb3VudHNdKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdWNrZXRzLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzIGluIHRoaXMgZmlsZSBhbGxvdyB1cyB0byBpbnRlcmFjdFxuICogd2l0aCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gSUVFRSA2NC1iaXQgZmxvYXRpbmcgcG9pbnRcbiAqIG51bWJlci4gV2UgbmVlZCB0byB3b3JrIHdpdGggYWxsIDY0LWJpdHMsIHRodXMsIGNhcmUgbmVlZHMgdG8gYmVcbiAqIHRha2VuIHdoZW4gd29ya2luZyB3aXRoIEphdmFzY3JpcHQncyBiaXR3aXNlIG9wZXJhdG9ycyAoPDwsID4+LCAmLFxuICogfCwgZXRjKSBhcyB0aGV5IHRydW5jYXRlIG9wZXJhbmRzIHRvIDMyLWJpdHMuIEluIG9yZGVyIHRvIHdvcmsgYXJvdW5kXG4gKiB0aGlzIHdlIHdvcmsgd2l0aCB0aGUgNjQtYml0cyBhcyB0d28gMzItYml0IGhhbHZlcywgcGVyZm9ybSBiaXR3aXNlXG4gKiBvcGVyYXRpb25zIG9uIHRoZW0gaW5kZXBlbmRlbnRseSwgYW5kIGNvbWJpbmUgdGhlIHJlc3VsdHMgKGlmIG5lZWRlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBTSUdOSUZJQ0FORF9XSURUSCA9IDUyO1xuLyoqXG4gKiBFWFBPTkVOVF9NQVNLIGlzIHNldCB0byAxIGZvciB0aGUgaGkgMzItYml0cyBvZiBhbiBJRUVFIDc1NFxuICogZmxvYXRpbmcgcG9pbnQgZXhwb25lbnQ6IDB4N2ZmMDAwMDAuXG4gKi9cbmNvbnN0IEVYUE9ORU5UX01BU0sgPSAweDdmZjAwMDAwO1xuLyoqXG4gKiBTSUdOSUZJQ0FORF9NQVNLIGlzIHRoZSBtYXNrIGZvciB0aGUgc2lnbmlmaWNhbmQgcG9ydGlvbiBvZiB0aGUgaGkgMzItYml0c1xuICogb2YgYW4gSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZTogMHhmZmZmZlxuICovXG5jb25zdCBTSUdOSUZJQ0FORF9NQVNLID0gMHhmZmZmZjtcbi8qKlxuICogRVhQT05FTlRfQklBUyBpcyB0aGUgZXhwb25lbnQgYmlhcyBzcGVjaWZpZWQgZm9yIGVuY29kaW5nXG4gKiB0aGUgSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBleHBvbmVudDogMTAyM1xuICovXG5jb25zdCBFWFBPTkVOVF9CSUFTID0gMTAyMztcbi8qKlxuICogTUlOX05PUk1BTF9FWFBPTkVOVCBpcyB0aGUgbWluaW11bSBleHBvbmVudCBvZiBhIG5vcm1hbGl6ZWRcbiAqIGZsb2F0aW5nIHBvaW50OiAtMTAyMi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1JTl9OT1JNQUxfRVhQT05FTlQgPSAtRVhQT05FTlRfQklBUyArIDE7XG4vKipcbiAqIE1BWF9OT1JNQUxfRVhQT05FTlQgaXMgdGhlIG1heGltdW0gZXhwb25lbnQgb2YgYSBub3JtYWxpemVkXG4gKiBmbG9hdGluZyBwb2ludDogMTAyMy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9OT1JNQUxfRVhQT05FTlQgPSBFWFBPTkVOVF9CSUFTO1xuLyoqXG4gKiBNSU5fVkFMVUUgaXMgdGhlIHNtYWxsZXN0IG5vcm1hbCBudW1iZXJcbiAqL1xuZXhwb3J0IGNvbnN0IE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbi8qKlxuICogZ2V0Tm9ybWFsQmFzZTIgZXh0cmFjdHMgdGhlIG5vcm1hbGl6ZWQgYmFzZS0yIGZyYWN0aW9uYWwgZXhwb25lbnQuXG4gKiBUaGlzIHJldHVybnMgayBmb3IgdGhlIGVxdWF0aW9uIGYgeCAyKiprIHdoZXJlIGYgaXNcbiAqIGluIHRoZSByYW5nZSBbMSwgMikuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZvclxuICogc3Vibm9ybWFsIG51bWJlcnMuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIG5vcm1hbGl6ZWQgYmFzZS0yIGZyYWN0aW9uYWxcbiAqICAgIGV4cG9uZW50IGZvclxuICogQHJldHVybnMge251bWJlcn0gdGhlIG5vcm1hbGl6ZWQgYmFzZS0yIGV4cG9uZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3JtYWxCYXNlMih2YWx1ZSkge1xuICAgIGNvbnN0IGR2ID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSk7XG4gICAgZHYuc2V0RmxvYXQ2NCgwLCB2YWx1ZSk7XG4gICAgLy8gYWNjZXNzIHRoZSByYXcgNjQtYml0IGZsb2F0IGFzIDMyLWJpdCB1aW50c1xuICAgIGNvbnN0IGhpQml0cyA9IGR2LmdldFVpbnQzMigwKTtcbiAgICBjb25zdCBleHBCaXRzID0gKGhpQml0cyAmIEVYUE9ORU5UX01BU0spID4+IDIwO1xuICAgIHJldHVybiBleHBCaXRzIC0gRVhQT05FTlRfQklBUztcbn1cbi8qKlxuICogR2V0U2lnbmlmaWNhbmQgcmV0dXJucyB0aGUgNTIgYml0ICh1bnNpZ25lZCkgc2lnbmlmaWNhbmQgYXMgYSBzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGV4dHJhY3QgdGhlIHNpZ25pZmljYW5kIGZyb21cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSA1Mi1iaXQgc2lnbmlmaWNhbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25pZmljYW5kKHZhbHVlKSB7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcbiAgICBkdi5zZXRGbG9hdDY0KDAsIHZhbHVlKTtcbiAgICAvLyBhY2Nlc3MgdGhlIHJhdyA2NC1iaXQgZmxvYXQgYXMgdHdvIDMyLWJpdCB1aW50c1xuICAgIGNvbnN0IGhpQml0cyA9IGR2LmdldFVpbnQzMigwKTtcbiAgICBjb25zdCBsb0JpdHMgPSBkdi5nZXRVaW50MzIoNCk7XG4gICAgLy8gZXh0cmFjdCB0aGUgc2lnbmlmaWNhbmQgYml0cyBmcm9tIHRoZSBoaSBiaXRzIGFuZCBsZWZ0IHNoaWZ0IDMyIHBsYWNlcyBub3RlOlxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgbmF0aXZlIDw8IG9wZXJhdG9yIGFzIGl0IHdpbGwgdHJ1bmNhdGUgdGhlIHJlc3VsdCB0byAzMi1iaXRzXG4gICAgY29uc3Qgc2lnbmlmaWNhbmRIaUJpdHMgPSAoaGlCaXRzICYgU0lHTklGSUNBTkRfTUFTSykgKiBNYXRoLnBvdygyLCAzMik7XG4gICAgLy8gY29tYmluZSB0aGUgaGkgYW5kIGxvIGJpdHMgYW5kIHJldHVyblxuICAgIHJldHVybiBzaWduaWZpY2FuZEhpQml0cyArIGxvQml0cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWllZWU3NTQuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBOb3RlOiBvdGhlciBsYW5ndWFnZXMgcHJvdmlkZSB0aGlzIGFzIGEgYnVpbHQgaW4gZnVuY3Rpb24uIFRoaXMgaXNcbiAqIGEgbmFpdmUsIGJ1dCBmdW5jdGlvbmFsbHkgY29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB1c2VkIHNwYXJpbmdseSxcbiAqIHdoZW4gY3JlYXRpbmcgYSBuZXcgbWFwcGluZyBpbiBhIHJ1bm5pbmcgYXBwbGljYXRpb24uXG4gKlxuICogbGRleHAgcmV0dXJucyBmcmFjIMOXIDIqKmV4cC4gV2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY2FzZXM6XG4gKiAgIGxkZXhwKMKxMCwgZXhwKSA9IMKxMFxuICogICBsZGV4cCjCsUluZiwgZXhwKSA9IMKxSW5mXG4gKiAgIGxkZXhwKE5hTiwgZXhwKSA9IE5hTlxuICogQHBhcmFtIGZyYWNcbiAqIEBwYXJhbSBleHBcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZGV4cChmcmFjLCBleHApIHtcbiAgICBpZiAoZnJhYyA9PT0gMCB8fFxuICAgICAgICBmcmFjID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICAgICAgZnJhYyA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIHx8XG4gICAgICAgIE51bWJlci5pc05hTihmcmFjKSkge1xuICAgICAgICByZXR1cm4gZnJhYztcbiAgICB9XG4gICAgcmV0dXJuIGZyYWMgKiBNYXRoLnBvdygyLCBleHApO1xufVxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbmV4dCBwb3dlciBvZiB0d28gdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdi5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSBlZmZpY2llbnQgdGhhbiwgYnV0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50XG4gKiB0byBNYXRoLnBvdygyLCBNYXRoLmNlaWwoTWF0aC5sb2coeCkvTWF0aC5sb2coMikpKS5cbiAqIEBwYXJhbSB2XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dEdyZWF0ZXJTcXVhcmUodikge1xuICAgIC8vIFRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiBjb21wdXRlcyB0aGUgbGVhc3QgcG93ZXItb2YtdHdvXG4gICAgLy8gdGhhdCBpcyA+PSB2LiAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHRyaWNreSB3YXlzIHRvXG4gICAgLy8gZG8gdGhpcywgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ2NjIwNC9yb3VuZGluZy11cC10by1uZXh0LXBvd2VyLW9mLTJcbiAgICB2LS07XG4gICAgdiB8PSB2ID4+IDE7XG4gICAgdiB8PSB2ID4+IDI7XG4gICAgdiB8PSB2ID4+IDQ7XG4gICAgdiB8PSB2ID4+IDg7XG4gICAgdiB8PSB2ID4+IDE2O1xuICAgIHYrKztcbiAgICByZXR1cm4gdjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcHBpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCAqIGFzIGllZWU3NTQgZnJvbSAnLi9pZWVlNzU0JztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBNYXBwaW5nRXJyb3IgfSBmcm9tICcuL3R5cGVzJztcbi8qKlxuICogRXhwb25lbnRNYXBwaW5nIGltcGxlbWVudHMgZXhwb25lbnRpYWwgbWFwcGluZyBmdW5jdGlvbnMgZm9yXG4gKiBzY2FsZXMgPD0wLiBGb3Igc2NhbGVzID4gMCBMb2dhcml0aG1NYXBwaW5nIHNob3VsZCBiZSB1c2VkLlxuICovXG5leHBvcnQgY2xhc3MgRXhwb25lbnRNYXBwaW5nIHtcbiAgICBfc2hpZnQ7XG4gICAgY29uc3RydWN0b3Ioc2NhbGUpIHtcbiAgICAgICAgdGhpcy5fc2hpZnQgPSAtc2NhbGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcHMgcG9zaXRpdmUgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHRvIGluZGV4ZXMgY29ycmVzcG9uZGluZyB0byBzY2FsZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGluZGV4IGZvciBwcm92aWRlZCB2YWx1ZSBhdCB0aGUgY3VycmVudCBzY2FsZVxuICAgICAqL1xuICAgIG1hcFRvSW5kZXgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgaWVlZTc1NC5NSU5fVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHAgPSBpZWVlNzU0LmdldE5vcm1hbEJhc2UyKHZhbHVlKTtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgdmFsdWUgaXMgYW4gZXhhY3QgcG93ZXIgb2YgdHdvLCBjb21wdXRlIGFcbiAgICAgICAgLy8gY29ycmVjdGlvbiBvZiAtMS4gTm90ZSwgd2UgYXJlIHVzaW5nIGEgY3VzdG9tIF9yaWdodFNoaWZ0XG4gICAgICAgIC8vIHRvIGFjY29tbW9kYXRlIGEgNTItYml0IGFyZ3VtZW50LCB3aGljaCB0aGUgbmF0aXZlIGJpdHdpc2VcbiAgICAgICAgLy8gb3BlcmF0b3JzIGRvIG5vdCBzdXBwb3J0XG4gICAgICAgIGNvbnN0IGNvcnJlY3Rpb24gPSB0aGlzLl9yaWdodFNoaWZ0KGllZWU3NTQuZ2V0U2lnbmlmaWNhbmQodmFsdWUpIC0gMSwgaWVlZTc1NC5TSUdOSUZJQ0FORF9XSURUSCk7XG4gICAgICAgIHJldHVybiAoZXhwICsgY29ycmVjdGlvbikgPj4gdGhpcy5fc2hpZnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJ1Y2tldCBib3VuZGFyeSBmb3IgdGhlIGdpdmVuIGluZGV4IGZvciBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBsb3dlckJvdW5kYXJ5KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1pbkluZGV4ID0gdGhpcy5fbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA8IG1pbkluZGV4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTWFwcGluZ0Vycm9yKGB1bmRlcmZsb3c6ICR7aW5kZXh9IGlzIDwgbWluaW11bSBsb3dlciBib3VuZGFyeTogJHttaW5JbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuX21heE5vcm1hbExvd2VyQm91bmRhcnlJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPiBtYXhJbmRleCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1hcHBpbmdFcnJvcihgb3ZlcmZsb3c6ICR7aW5kZXh9IGlzID4gbWF4aW11bSBsb3dlciBib3VuZGFyeTogJHttYXhJbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXRpbC5sZGV4cCgxLCBpbmRleCA8PCB0aGlzLl9zaGlmdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSB1c2VkIGJ5IHRoaXMgbWFwcGluZ1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IHNjYWxlKCkge1xuICAgICAgICBpZiAodGhpcy5fc2hpZnQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtdGhpcy5fc2hpZnQ7XG4gICAgfVxuICAgIF9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSB7XG4gICAgICAgIGxldCBpbmRleCA9IGllZWU3NTQuTUlOX05PUk1BTF9FWFBPTkVOVCA+PiB0aGlzLl9zaGlmdDtcbiAgICAgICAgaWYgKHRoaXMuX3NoaWZ0IDwgMikge1xuICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIF9tYXhOb3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBpZWVlNzU0Lk1BWF9OT1JNQUxfRVhQT05FTlQgPj4gdGhpcy5fc2hpZnQ7XG4gICAgfVxuICAgIF9yaWdodFNoaWZ0KHZhbHVlLCBzaGlmdCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSAqIE1hdGgucG93KDIsIC1zaGlmdCkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9uZW50TWFwcGluZy5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgKiBhcyBpZWVlNzU0IGZyb20gJy4vaWVlZTc1NCc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgTWFwcGluZ0Vycm9yIH0gZnJvbSAnLi90eXBlcyc7XG4vKipcbiAqIExvZ2FyaXRobU1hcHBpbmcgaW1wbGVtZW50cyBleHBvbmVudGlhbCBtYXBwaW5nIGZ1bmN0aW9ucyBmb3Igc2NhbGUgPiAwLlxuICogRm9yIHNjYWxlcyA8PSAwIHRoZSBleHBvbmVudCBtYXBwaW5nIHNob3VsZCBiZSB1c2VkLlxuICovXG5leHBvcnQgY2xhc3MgTG9nYXJpdGhtTWFwcGluZyB7XG4gICAgX3NjYWxlO1xuICAgIF9zY2FsZUZhY3RvcjtcbiAgICBfaW52ZXJzZUZhY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihzY2FsZSkge1xuICAgICAgICB0aGlzLl9zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLl9zY2FsZUZhY3RvciA9IHV0aWwubGRleHAoTWF0aC5MT0cyRSwgc2NhbGUpO1xuICAgICAgICB0aGlzLl9pbnZlcnNlRmFjdG9yID0gdXRpbC5sZGV4cChNYXRoLkxOMiwgLXNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFwcyBwb3NpdGl2ZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgdG8gaW5kZXhlcyBjb3JyZXNwb25kaW5nIHRvIHNjYWxlXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggZm9yIHByb3ZpZGVkIHZhbHVlIGF0IHRoZSBjdXJyZW50IHNjYWxlXG4gICAgICovXG4gICAgbWFwVG9JbmRleCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPD0gaWVlZTc1NC5NSU5fVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhhY3QgcG93ZXIgb2YgdHdvIHNwZWNpYWwgY2FzZVxuICAgICAgICBpZiAoaWVlZTc1NC5nZXRTaWduaWZpY2FuZCh2YWx1ZSkgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cCA9IGllZWU3NTQuZ2V0Tm9ybWFsQmFzZTIodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIChleHAgPDwgdGhpcy5fc2NhbGUpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub24tcG93ZXIgb2YgdHdvIGNhc2VzLiB1c2UgTWF0aC5mbG9vciB0byByb3VuZCB0aGUgc2NhbGVkIGxvZ2FyaXRobVxuICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpICogdGhpcy5fc2NhbGVGYWN0b3IpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuX21heE5vcm1hbExvd2VyQm91bmRhcnlJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPj0gbWF4SW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJ1Y2tldCBib3VuZGFyeSBmb3IgdGhlIGdpdmVuIGluZGV4IGZvciBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBsb3dlckJvdW5kYXJ5KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5fbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA+PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAyICogTWF0aC5leHAoKGluZGV4IC0gKDEgPDwgdGhpcy5fc2NhbGUpKSAvIHRoaXMuX3NjYWxlRmFjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBNYXBwaW5nRXJyb3IoYG92ZXJmbG93OiAke2luZGV4fSBpcyA+IG1heGltdW0gbG93ZXIgYm91bmRhcnk6ICR7bWF4SW5kZXh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluSW5kZXggPSB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKTtcbiAgICAgICAgaWYgKGluZGV4IDw9IG1pbkluZGV4KSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IG1pbkluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGllZWU3NTQuTUlOX1ZBTFVFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IG1pbkluZGV4IC0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmV4cCgoaW5kZXggKyAoMSA8PCB0aGlzLl9zY2FsZSkpIC8gdGhpcy5fc2NhbGVGYWN0b3IpIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBNYXBwaW5nRXJyb3IoYG92ZXJmbG93OiAke2luZGV4fSBpcyA8IG1pbmltdW0gbG93ZXIgYm91bmRhcnk6ICR7bWluSW5kZXh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguZXhwKGluZGV4ICogdGhpcy5faW52ZXJzZUZhY3Rvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBzY2FsZSB1c2VkIGJ5IHRoaXMgbWFwcGluZ1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IHNjYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGU7XG4gICAgfVxuICAgIF9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBpZWVlNzU0Lk1JTl9OT1JNQUxfRVhQT05FTlQgPDwgdGhpcy5fc2NhbGU7XG4gICAgfVxuICAgIF9tYXhOb3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiAoKGllZWU3NTQuTUFYX05PUk1BTF9FWFBPTkVOVCArIDEpIDw8IHRoaXMuX3NjYWxlKSAtIDE7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TG9nYXJpdGhtTWFwcGluZy5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBFeHBvbmVudE1hcHBpbmcgfSBmcm9tICcuL0V4cG9uZW50TWFwcGluZyc7XG5pbXBvcnQgeyBMb2dhcml0aG1NYXBwaW5nIH0gZnJvbSAnLi9Mb2dhcml0aG1NYXBwaW5nJztcbmltcG9ydCB7IE1hcHBpbmdFcnJvciB9IGZyb20gJy4vdHlwZXMnO1xuY29uc3QgTUlOX1NDQUxFID0gLTEwO1xuY29uc3QgTUFYX1NDQUxFID0gMjA7XG5jb25zdCBQUkVCVUlMVF9NQVBQSU5HUyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDMxIH0sIChfLCBpKSA9PiB7XG4gICAgaWYgKGkgPiAxMCkge1xuICAgICAgICByZXR1cm4gbmV3IExvZ2FyaXRobU1hcHBpbmcoaSAtIDEwKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBFeHBvbmVudE1hcHBpbmcoaSAtIDEwKTtcbn0pO1xuLyoqXG4gKiBnZXRNYXBwaW5nIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgbWFwcGluZyBmb3IgdGhlIGdpdmVuIHNjYWxlLiBGb3Igc2NhbGVzIC0xMFxuICogdG8gMCB0aGUgdW5kZXJseWluZyB0eXBlIHdpbGwgYmUgRXhwb25lbnRNYXBwaW5nLiBGb3Igc2NhbGVzIDEgdG8gMjAgdGhlXG4gKiB1bmRlcmx5aW5nIHR5cGUgd2lsbCBiZSBMb2dhcml0aG1NYXBwaW5nLlxuICogQHBhcmFtIHNjYWxlIGEgbnVtYmVyIGluIHRoZSByYW5nZSBbLTEwLCAyMF1cbiAqIEByZXR1cm5zIHtNYXBwaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFwcGluZyhzY2FsZSkge1xuICAgIGlmIChzY2FsZSA+IE1BWF9TQ0FMRSB8fCBzY2FsZSA8IE1JTl9TQ0FMRSkge1xuICAgICAgICB0aHJvdyBuZXcgTWFwcGluZ0Vycm9yKGBleHBlY3RlZCBzY2FsZSA+PSAke01JTl9TQ0FMRX0gJiYgPD0gJHtNQVhfU0NBTEV9LCBnb3Q6ICR7c2NhbGV9YCk7XG4gICAgfVxuICAgIC8vIG1hcHBpbmdzIGFyZSBvZmZzZXQgYnkgMTAuIHNjYWxlIC0xMCBpcyBhdCBwb3NpdGlvbiAwIGFuZCBzY2FsZSAyMCBpcyBhdCAzMFxuICAgIHJldHVybiBQUkVCVUlMVF9NQVBQSU5HU1tzY2FsZSArIDEwXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hcHBpbmcuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQWdncmVnYXRvcktpbmQsIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBEYXRhUG9pbnRUeXBlLCBJbnN0cnVtZW50VHlwZSwgfSBmcm9tICcuLi9leHBvcnQvTWV0cmljRGF0YSc7XG5pbXBvcnQgeyBkaWFnIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IEJ1Y2tldHMgfSBmcm9tICcuL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9CdWNrZXRzJztcbmltcG9ydCB7IGdldE1hcHBpbmcgfSBmcm9tICcuL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL2dldE1hcHBpbmcnO1xuaW1wb3J0IHsgbmV4dEdyZWF0ZXJTcXVhcmUgfSBmcm9tICcuL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS91dGlsJztcbi8vIEhpZ2hMb3cgaXMgYSB1dGlsaXR5IGNsYXNzIHVzZWQgZm9yIGNvbXB1dGluZyBhIGNvbW1vbiBzY2FsZSBmb3Jcbi8vIHR3byBleHBvbmVudGlhbCBoaXN0b2dyYW0gYWNjdW11bGF0aW9uc1xuY2xhc3MgSGlnaExvdyB7XG4gICAgc3RhdGljIGNvbWJpbmUoaDEsIGgyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSGlnaExvdyhNYXRoLm1pbihoMS5sb3csIGgyLmxvdyksIE1hdGgubWF4KGgxLmhpZ2gsIGgyLmhpZ2gpKTtcbiAgICB9XG4gICAgbG93O1xuICAgIGhpZ2g7XG4gICAgY29uc3RydWN0b3IobG93LCBoaWdoKSB7XG4gICAgICAgIHRoaXMubG93ID0gbG93O1xuICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuICAgIH1cbn1cbmNvbnN0IE1BWF9TQ0FMRSA9IDIwO1xuY29uc3QgREVGQVVMVF9NQVhfU0laRSA9IDE2MDtcbmNvbnN0IE1JTl9NQVhfU0laRSA9IDI7XG5leHBvcnQgY2xhc3MgRXhwb25lbnRpYWxIaXN0b2dyYW1BY2N1bXVsYXRpb24ge1xuICAgIHN0YXJ0VGltZTtcbiAgICBfbWF4U2l6ZTtcbiAgICBfcmVjb3JkTWluTWF4O1xuICAgIF9zdW07XG4gICAgX2NvdW50O1xuICAgIF96ZXJvQ291bnQ7XG4gICAgX21pbjtcbiAgICBfbWF4O1xuICAgIF9wb3NpdGl2ZTtcbiAgICBfbmVnYXRpdmU7XG4gICAgX21hcHBpbmc7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBtYXhTaXplID0gREVGQVVMVF9NQVhfU0laRSwgcmVjb3JkTWluTWF4ID0gdHJ1ZSwgc3VtID0gMCwgY291bnQgPSAwLCB6ZXJvQ291bnQgPSAwLCBtaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSwgcG9zaXRpdmUgPSBuZXcgQnVja2V0cygpLCBuZWdhdGl2ZSA9IG5ldyBCdWNrZXRzKCksIG1hcHBpbmcgPSBnZXRNYXBwaW5nKE1BWF9TQ0FMRSkpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplO1xuICAgICAgICB0aGlzLl9yZWNvcmRNaW5NYXggPSByZWNvcmRNaW5NYXg7XG4gICAgICAgIHRoaXMuX3N1bSA9IHN1bTtcbiAgICAgICAgdGhpcy5fY291bnQgPSBjb3VudDtcbiAgICAgICAgdGhpcy5femVyb0NvdW50ID0gemVyb0NvdW50O1xuICAgICAgICB0aGlzLl9taW4gPSBtaW47XG4gICAgICAgIHRoaXMuX21heCA9IG1heDtcbiAgICAgICAgdGhpcy5fcG9zaXRpdmUgPSBwb3NpdGl2ZTtcbiAgICAgICAgdGhpcy5fbmVnYXRpdmUgPSBuZWdhdGl2ZTtcbiAgICAgICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7XG4gICAgICAgIGlmICh0aGlzLl9tYXhTaXplIDwgTUlOX01BWF9TSVpFKSB7XG4gICAgICAgICAgICBkaWFnLndhcm4oYEV4cG9uZW50aWFsIEhpc3RvZ3JhbSBNYXggU2l6ZSBzZXQgdG8gJHt0aGlzLl9tYXhTaXplfSwgXFxcbiAgICAgICAgICAgICAgICBjaGFuZ2luZyB0byB0aGUgbWluaW11bSBzaXplIG9mOiAke01JTl9NQVhfU0laRX1gKTtcbiAgICAgICAgICAgIHRoaXMuX21heFNpemUgPSBNSU5fTUFYX1NJWkU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogcmVjb3JkIHVwZGF0ZXMgYSBoaXN0b2dyYW0gd2l0aCBhIHNpbmdsZSBjb3VudFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5SW5jcmVtZW50KHZhbHVlLCAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhcnQgdGltZSBmb3IgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKiBAcGFyYW0ge0hyVGltZX0gc3RhcnRUaW1lXG4gICAgICovXG4gICAgc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICogQHBhcmFtIHtIclRpbWV9IHN0YXJ0VGltZVxuICAgICAqL1xuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc01pbk1heDogdGhpcy5fcmVjb3JkTWluTWF4LFxuICAgICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBzdW06IHRoaXMuc3VtLFxuICAgICAgICAgICAgcG9zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMucG9zaXRpdmUub2Zmc2V0LFxuICAgICAgICAgICAgICAgIGJ1Y2tldENvdW50czogdGhpcy5wb3NpdGl2ZS5jb3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZWdhdGl2ZToge1xuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5uZWdhdGl2ZS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgYnVja2V0Q291bnRzOiB0aGlzLm5lZ2F0aXZlLmNvdW50cygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmNvdW50LFxuICAgICAgICAgICAgc2NhbGU6IHRoaXMuc2NhbGUsXG4gICAgICAgICAgICB6ZXJvQ291bnQ6IHRoaXMuemVyb0NvdW50LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc3VtIG9mIHZhbHVlcyByZWNvcmRlZCBieSB0aGlzIGFjY3VtdWxhdGlvblxuICAgICAqL1xuICAgIGdldCBzdW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdW07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBtaW5pbXVtIHZhbHVlIHJlY29yZGVkIGJ5IHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICovXG4gICAgZ2V0IG1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMge051bWJlcn0gVGhlIG1heGltdW0gdmFsdWUgcmVjb3JkZWQgYnkgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgY291bnQgb2YgdmFsdWVzIHJlY29yZGVkIGJ5IHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICovXG4gICAgZ2V0IGNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgMCB2YWx1ZXMgcmVjb3JkZWQgYnkgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKi9cbiAgICBnZXQgemVyb0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5femVyb0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIGFjY3VtdWxhdGlvblxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50ID09PSB0aGlzLl96ZXJvQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGFsbCB6ZXJvcyEgc2NhbGUgZG9lc24ndCBtYXR0ZXIsIHVzZSB6ZXJvXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZy5zY2FsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcG9zaXRpdmUgaG9sZHMgdGhlIHBvc2l0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIHtCdWNrZXRzfVxuICAgICAqL1xuICAgIGdldCBwb3NpdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBuZWdhdGl2ZSBob2xkcyB0aGUgbmVnYXRpdmUgdmFsdWVzIGJ5IHRoZWlyIGFic29sdXRlIHZhbHVlXG4gICAgICogQHJldHVybnMge0J1Y2tldHN9XG4gICAgICovXG4gICAgZ2V0IG5lZ2F0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHVwZGF0ZUJ5SW5jciBzdXBwb3J0cyB1cGRhdGluZyBhIGhpc3RvZ3JhbSB3aXRoIGEgbm9uLW5lZ2F0aXZlXG4gICAgICogaW5jcmVtZW50LlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqIEBwYXJhbSBpbmNyZW1lbnRcbiAgICAgKi9cbiAgICB1cGRhdGVCeUluY3JlbWVudCh2YWx1ZSwgaW5jcmVtZW50KSB7XG4gICAgICAgIC8vIE5hTiBkb2VzIG5vdCBmYWxsIGludG8gYW55IGJ1Y2tldCwgaXMgbm90IHplcm8gYW5kIHNob3VsZCBub3QgYmUgY291bnRlZCxcbiAgICAgICAgLy8gTmFOIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiBtYXggbm9yIGxlc3MgdGhhbiBtaW4sIHRoZXJlZm9yZSByZXR1cm4gYXMgdGhlcmUncyBub3RoaW5nIGZvciB1cyB0byBkby5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA8IHRoaXMuX21pbikge1xuICAgICAgICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY291bnQgKz0gaW5jcmVtZW50O1xuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3plcm9Db3VudCArPSBpbmNyZW1lbnQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VtICs9IHZhbHVlICogaW5jcmVtZW50O1xuICAgICAgICBpZiAodmFsdWUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWNrZXRzKHRoaXMuX3Bvc2l0aXZlLCB2YWx1ZSwgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJ1Y2tldHModGhpcy5fbmVnYXRpdmUsIC12YWx1ZSwgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBtZXJnZSBjb21iaW5lcyBkYXRhIGZyb20gcHJldmlvdXMgdmFsdWUgaW50byBzZWxmXG4gICAgICogQHBhcmFtIHtFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbn0gcHJldmlvdXNcbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cykge1xuICAgICAgICBpZiAodGhpcy5fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21pbiA9IHByZXZpb3VzLm1pbjtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHByZXZpb3VzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmV2aW91cy5jb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzLm1pbiA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluID0gcHJldmlvdXMubWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLm1heCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4ID0gcHJldmlvdXMubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gcHJldmlvdXMuc3RhcnRUaW1lO1xuICAgICAgICB0aGlzLl9zdW0gKz0gcHJldmlvdXMuc3VtO1xuICAgICAgICB0aGlzLl9jb3VudCArPSBwcmV2aW91cy5jb3VudDtcbiAgICAgICAgdGhpcy5femVyb0NvdW50ICs9IHByZXZpb3VzLnplcm9Db3VudDtcbiAgICAgICAgY29uc3QgbWluU2NhbGUgPSB0aGlzLl9taW5TY2FsZShwcmV2aW91cyk7XG4gICAgICAgIHRoaXMuX2Rvd25zY2FsZSh0aGlzLnNjYWxlIC0gbWluU2NhbGUpO1xuICAgICAgICB0aGlzLl9tZXJnZUJ1Y2tldHModGhpcy5wb3NpdGl2ZSwgcHJldmlvdXMsIHByZXZpb3VzLnBvc2l0aXZlLCBtaW5TY2FsZSk7XG4gICAgICAgIHRoaXMuX21lcmdlQnVja2V0cyh0aGlzLm5lZ2F0aXZlLCBwcmV2aW91cywgcHJldmlvdXMubmVnYXRpdmUsIG1pblNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZGlmZiBzdWJ0cmFjdHMgb3RoZXIgZnJvbSBzZWxmXG4gICAgICogQHBhcmFtIHtFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbn0gb3RoZXJcbiAgICAgKi9cbiAgICBkaWZmKG90aGVyKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IEluZmluaXR5O1xuICAgICAgICB0aGlzLl9tYXggPSAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMuX3N1bSAtPSBvdGhlci5zdW07XG4gICAgICAgIHRoaXMuX2NvdW50IC09IG90aGVyLmNvdW50O1xuICAgICAgICB0aGlzLl96ZXJvQ291bnQgLT0gb3RoZXIuemVyb0NvdW50O1xuICAgICAgICBjb25zdCBtaW5TY2FsZSA9IHRoaXMuX21pblNjYWxlKG90aGVyKTtcbiAgICAgICAgdGhpcy5fZG93bnNjYWxlKHRoaXMuc2NhbGUgLSBtaW5TY2FsZSk7XG4gICAgICAgIHRoaXMuX2RpZmZCdWNrZXRzKHRoaXMucG9zaXRpdmUsIG90aGVyLCBvdGhlci5wb3NpdGl2ZSwgbWluU2NhbGUpO1xuICAgICAgICB0aGlzLl9kaWZmQnVja2V0cyh0aGlzLm5lZ2F0aXZlLCBvdGhlciwgb3RoZXIubmVnYXRpdmUsIG1pblNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBzZWxmXG4gICAgICogQHJldHVybnMge0V4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9ufVxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uKHRoaXMuc3RhcnRUaW1lLCB0aGlzLl9tYXhTaXplLCB0aGlzLl9yZWNvcmRNaW5NYXgsIHRoaXMuX3N1bSwgdGhpcy5fY291bnQsIHRoaXMuX3plcm9Db3VudCwgdGhpcy5fbWluLCB0aGlzLl9tYXgsIHRoaXMucG9zaXRpdmUuY2xvbmUoKSwgdGhpcy5uZWdhdGl2ZS5jbG9uZSgpLCB0aGlzLl9tYXBwaW5nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogX3VwZGF0ZUJ1Y2tldHMgbWFwcyB0aGUgaW5jb21pbmcgdmFsdWUgdG8gYSBidWNrZXQgaW5kZXggZm9yIHRoZSBjdXJyZW50XG4gICAgICogc2NhbGUuIElmIHRoZSBidWNrZXQgaW5kZXggaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGJhY2tpbmcgYXJyYXksXG4gICAgICogaXQgd2lsbCByZXNjYWxlIHRoZSBiYWNraW5nIGFycmF5IGFuZCB1cGRhdGUgdGhlIG1hcHBpbmcgZm9yIHRoZSBuZXcgc2NhbGUuXG4gICAgICovXG4gICAgX3VwZGF0ZUJ1Y2tldHMoYnVja2V0cywgdmFsdWUsIGluY3JlbWVudCkge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9tYXBwaW5nLm1hcFRvSW5kZXgodmFsdWUpO1xuICAgICAgICAvLyByZXNjYWxlIHRoZSBtYXBwaW5nIGlmIG5lZWRlZFxuICAgICAgICBsZXQgcmVzY2FsaW5nTmVlZGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBoaWdoID0gMDtcbiAgICAgICAgbGV0IGxvdyA9IDA7XG4gICAgICAgIGlmIChidWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBidWNrZXRzLmluZGV4RW5kID0gYnVja2V0cy5pbmRleFN0YXJ0O1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleEJhc2UgPSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBidWNrZXRzLmluZGV4U3RhcnQgJiZcbiAgICAgICAgICAgIGJ1Y2tldHMuaW5kZXhFbmQgLSBpbmRleCA+PSB0aGlzLl9tYXhTaXplKSB7XG4gICAgICAgICAgICByZXNjYWxpbmdOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgbG93ID0gaW5kZXg7XG4gICAgICAgICAgICBoaWdoID0gYnVja2V0cy5pbmRleEVuZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbmRleCA+IGJ1Y2tldHMuaW5kZXhFbmQgJiZcbiAgICAgICAgICAgIGluZGV4IC0gYnVja2V0cy5pbmRleFN0YXJ0ID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgICAgICAgIHJlc2NhbGluZ05lZWRlZCA9IHRydWU7XG4gICAgICAgICAgICBsb3cgPSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgICAgICBoaWdoID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzY2FsZSBhbmQgY29tcHV0ZSBpbmRleCBhdCBuZXcgc2NhbGVcbiAgICAgICAgaWYgKHJlc2NhbGluZ05lZWRlZCkge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlID0gdGhpcy5fY2hhbmdlU2NhbGUoaGlnaCwgbG93KTtcbiAgICAgICAgICAgIHRoaXMuX2Rvd25zY2FsZShjaGFuZ2UpO1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9tYXBwaW5nLm1hcFRvSW5kZXgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luY3JlbWVudEluZGV4QnkoYnVja2V0cywgaW5kZXgsIGluY3JlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9pbmNyZW1lbnRJbmRleEJ5IGluY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSBidWNrZXQgc3BlY2lmaWVkIGJ5IGBpbmRleGAuXG4gICAgICogSWYgdGhlIGluZGV4IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlIFtidWNrZXRzLmluZGV4U3RhcnQsIGJ1Y2tldHMuaW5kZXhFbmRdXG4gICAgICogdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGJhY2tpbmcgYXJyYXkgd2lsbCBiZSBhZGp1c3RlZCBhbmQgbW9yZSBidWNrZXRzIHdpbGxcbiAgICAgKiBiZSBhZGRlZCBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgX2luY3JlbWVudEluZGV4QnkoYnVja2V0cywgaW5kZXgsIGluY3JlbWVudCkge1xuICAgICAgICBpZiAoaW5jcmVtZW50ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvIGZvciBhIHplcm8gaW5jcmVtZW50LCBjYW4gaGFwcGVuIGR1cmluZyBhIG1lcmdlIG9wZXJhdGlvblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gYnVja2V0cy5pbmRleEVuZCA9IGJ1Y2tldHMuaW5kZXhCYXNlID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4IDwgYnVja2V0cy5pbmRleFN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gYnVja2V0cy5pbmRleEVuZCAtIGluZGV4O1xuICAgICAgICAgICAgaWYgKHNwYW4gPj0gYnVja2V0cy5iYWNraW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3coYnVja2V0cywgc3BhbiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPiBidWNrZXRzLmluZGV4RW5kKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5kZXggLSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgICAgICBpZiAoc3BhbiA+PSBidWNrZXRzLmJhY2tpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JvdyhidWNrZXRzLCBzcGFuICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWNrZXRzLmluZGV4RW5kID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJ1Y2tldEluZGV4ID0gaW5kZXggLSBidWNrZXRzLmluZGV4QmFzZTtcbiAgICAgICAgaWYgKGJ1Y2tldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgYnVja2V0SW5kZXggKz0gYnVja2V0cy5iYWNraW5nLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBidWNrZXRzLmluY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgaW5jcmVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ3JvdyByZXNpemVzIHRoZSBiYWNraW5nIGFycmF5IGJ5IGRvdWJsaW5nIGluIHNpemUgdXAgdG8gbWF4U2l6ZS5cbiAgICAgKiBUaGlzIGV4dGVuZHMgdGhlIGFycmF5IHdpdGggYSBidW5jaCBvZiB6ZXJvcyBhbmQgY29waWVzIHRoZVxuICAgICAqIGV4aXN0aW5nIGNvdW50cyB0byB0aGUgc2FtZSBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBfZ3JvdyhidWNrZXRzLCBuZWVkZWQpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ1Y2tldHMuYmFja2luZy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJpYXMgPSBidWNrZXRzLmluZGV4QmFzZSAtIGJ1Y2tldHMuaW5kZXhTdGFydDtcbiAgICAgICAgY29uc3Qgb2xkUG9zaXRpdmVMaW1pdCA9IHNpemUgLSBiaWFzO1xuICAgICAgICBsZXQgbmV3U2l6ZSA9IG5leHRHcmVhdGVyU3F1YXJlKG5lZWRlZCk7XG4gICAgICAgIGlmIChuZXdTaXplID4gdGhpcy5fbWF4U2l6ZSkge1xuICAgICAgICAgICAgbmV3U2l6ZSA9IHRoaXMuX21heFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UG9zaXRpdmVMaW1pdCA9IG5ld1NpemUgLSBiaWFzO1xuICAgICAgICBidWNrZXRzLmJhY2tpbmcuZ3Jvd1RvKG5ld1NpemUsIG9sZFBvc2l0aXZlTGltaXQsIG5ld1Bvc2l0aXZlTGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfY2hhbmdlU2NhbGUgY29tcHV0ZXMgaG93IG11Y2ggZG93bnNjYWxpbmcgaXMgbmVlZGVkIGJ5IHNoaWZ0aW5nIHRoZVxuICAgICAqIGhpZ2ggYW5kIGxvdyB2YWx1ZXMgdW50aWwgdGhleSBhcmUgc2VwYXJhdGVkIGJ5IG5vIG1vcmUgdGhhbiBzaXplLlxuICAgICAqL1xuICAgIF9jaGFuZ2VTY2FsZShoaWdoLCBsb3cpIHtcbiAgICAgICAgbGV0IGNoYW5nZSA9IDA7XG4gICAgICAgIHdoaWxlIChoaWdoIC0gbG93ID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgICAgICAgIGhpZ2ggPj49IDE7XG4gICAgICAgICAgICBsb3cgPj49IDE7XG4gICAgICAgICAgICBjaGFuZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfZG93bnNjYWxlIHN1YnRyYWN0cyBgY2hhbmdlYCBmcm9tIHRoZSBjdXJyZW50IG1hcHBpbmcgc2NhbGUuXG4gICAgICovXG4gICAgX2Rvd25zY2FsZShjaGFuZ2UpIHtcbiAgICAgICAgaWYgKGNoYW5nZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UgPCAwKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlLiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW1wb3NzaWJsZSBjaGFuZ2Ugb2Ygc2NhbGU6ICR7dGhpcy5zY2FsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdTY2FsZSA9IHRoaXMuX21hcHBpbmcuc2NhbGUgLSBjaGFuZ2U7XG4gICAgICAgIHRoaXMuX3Bvc2l0aXZlLmRvd25zY2FsZShjaGFuZ2UpO1xuICAgICAgICB0aGlzLl9uZWdhdGl2ZS5kb3duc2NhbGUoY2hhbmdlKTtcbiAgICAgICAgdGhpcy5fbWFwcGluZyA9IGdldE1hcHBpbmcobmV3U2NhbGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfbWluU2NhbGUgaXMgdXNlZCBieSBkaWZmIGFuZCBtZXJnZSB0byBjb21wdXRlIGFuIGlkZWFsIGNvbWJpbmVkIHNjYWxlXG4gICAgICovXG4gICAgX21pblNjYWxlKG90aGVyKSB7XG4gICAgICAgIGNvbnN0IG1pblNjYWxlID0gTWF0aC5taW4odGhpcy5zY2FsZSwgb3RoZXIuc2NhbGUpO1xuICAgICAgICBjb25zdCBoaWdoTG93UG9zID0gSGlnaExvdy5jb21iaW5lKHRoaXMuX2hpZ2hMb3dBdFNjYWxlKHRoaXMucG9zaXRpdmUsIHRoaXMuc2NhbGUsIG1pblNjYWxlKSwgdGhpcy5faGlnaExvd0F0U2NhbGUob3RoZXIucG9zaXRpdmUsIG90aGVyLnNjYWxlLCBtaW5TY2FsZSkpO1xuICAgICAgICBjb25zdCBoaWdoTG93TmVnID0gSGlnaExvdy5jb21iaW5lKHRoaXMuX2hpZ2hMb3dBdFNjYWxlKHRoaXMubmVnYXRpdmUsIHRoaXMuc2NhbGUsIG1pblNjYWxlKSwgdGhpcy5faGlnaExvd0F0U2NhbGUob3RoZXIubmVnYXRpdmUsIG90aGVyLnNjYWxlLCBtaW5TY2FsZSkpO1xuICAgICAgICByZXR1cm4gTWF0aC5taW4obWluU2NhbGUgLSB0aGlzLl9jaGFuZ2VTY2FsZShoaWdoTG93UG9zLmhpZ2gsIGhpZ2hMb3dQb3MubG93KSwgbWluU2NhbGUgLSB0aGlzLl9jaGFuZ2VTY2FsZShoaWdoTG93TmVnLmhpZ2gsIGhpZ2hMb3dOZWcubG93KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9oaWdoTG93QXRTY2FsZSBpcyB1c2VkIGJ5IGRpZmYgYW5kIG1lcmdlIHRvIGNvbXB1dGUgYW4gaWRlYWwgY29tYmluZWQgc2NhbGUuXG4gICAgICovXG4gICAgX2hpZ2hMb3dBdFNjYWxlKGJ1Y2tldHMsIGN1cnJlbnRTY2FsZSwgbmV3U2NhbGUpIHtcbiAgICAgICAgaWYgKGJ1Y2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEhpZ2hMb3coMCwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gY3VycmVudFNjYWxlIC0gbmV3U2NhbGU7XG4gICAgICAgIHJldHVybiBuZXcgSGlnaExvdyhidWNrZXRzLmluZGV4U3RhcnQgPj4gc2hpZnQsIGJ1Y2tldHMuaW5kZXhFbmQgPj4gc2hpZnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfbWVyZ2VCdWNrZXRzIHRyYW5zbGF0ZXMgaW5kZXggdmFsdWVzIGZyb20gYW5vdGhlciBoaXN0b2dyYW0gYW5kXG4gICAgICogYWRkcyB0aGUgdmFsdWVzIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVja2V0cyBvZiB0aGlzIGhpc3RvZ3JhbS5cbiAgICAgKi9cbiAgICBfbWVyZ2VCdWNrZXRzKG91cnMsIG90aGVyLCB0aGVpcnMsIHNjYWxlKSB7XG4gICAgICAgIGNvbnN0IHRoZWlyT2Zmc2V0ID0gdGhlaXJzLm9mZnNldDtcbiAgICAgICAgY29uc3QgdGhlaXJDaGFuZ2UgPSBvdGhlci5zY2FsZSAtIHNjYWxlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50SW5kZXhCeShvdXJzLCAodGhlaXJPZmZzZXQgKyBpKSA+PiB0aGVpckNoYW5nZSwgdGhlaXJzLmF0KGkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBfZGlmZkJ1Y2tldHMgdHJhbnNsYXRlcyBpbmRleCB2YWx1ZXMgZnJvbSBhbm90aGVyIGhpc3RvZ3JhbSBhbmRcbiAgICAgKiBzdWJ0cmFjdHMgdGhlIHZhbHVlcyBpbiB0aGUgY29ycmVzcG9uZGluZyBidWNrZXRzIG9mIHRoaXMgaGlzdG9ncmFtLlxuICAgICAqL1xuICAgIF9kaWZmQnVja2V0cyhvdXJzLCBvdGhlciwgdGhlaXJzLCBzY2FsZSkge1xuICAgICAgICBjb25zdCB0aGVpck9mZnNldCA9IHRoZWlycy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRoZWlyQ2hhbmdlID0gb3RoZXIuc2NhbGUgLSBzY2FsZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG91ckluZGV4ID0gKHRoZWlyT2Zmc2V0ICsgaSkgPj4gdGhlaXJDaGFuZ2U7XG4gICAgICAgICAgICBsZXQgYnVja2V0SW5kZXggPSBvdXJJbmRleCAtIG91cnMuaW5kZXhCYXNlO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4ICs9IG91cnMuYmFja2luZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXJzLmRlY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgdGhlaXJzLmF0KGkpKTtcbiAgICAgICAgfVxuICAgICAgICBvdXJzLnRyaW0oKTtcbiAgICB9XG59XG4vKipcbiAqIEFnZ3JlZ2F0b3IgZm9yIEV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gQWdncmVnYXRvcktpbmQuRVhQT05FTlRJQUxfSElTVE9HUkFNO1xuICAgIF9tYXhTaXplO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIF9tYXhTaXplIE1heGltdW0gbnVtYmVyIG9mIGJ1Y2tldHMgZm9yIGVhY2ggb2YgdGhlIHBvc2l0aXZlXG4gICAgICogICAgYW5kIG5lZ2F0aXZlIHJhbmdlcywgZXhjbHVzaXZlIG9mIHRoZSB6ZXJvLWJ1Y2tldC5cbiAgICAgKiBAcGFyYW0gX3JlY29yZE1pbk1heCBJZiBzZXQgdG8gdHJ1ZSwgbWluIGFuZCBtYXggd2lsbCBiZSByZWNvcmRlZC5cbiAgICAgKiAgICBPdGhlcndpc2UsIG1pbiBhbmQgbWF4IHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1heFNpemUsIHJlY29yZE1pbk1heCkge1xuICAgICAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5fcmVjb3JkTWluTWF4ID0gcmVjb3JkTWluTWF4O1xuICAgIH1cbiAgICBjcmVhdGVBY2N1bXVsYXRpb24oc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW1BY2N1bXVsYXRpb24oc3RhcnRUaW1lLCB0aGlzLl9tYXhTaXplLCB0aGlzLl9yZWNvcmRNaW5NYXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2Ugb2YgdHdvIGV4cG9uZW50aWFsIGhpc3RvZ3JhbSBhY2N1bXVsYXRpb25zLlxuICAgICAqL1xuICAgIG1lcmdlKHByZXZpb3VzLCBkZWx0YSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWx0YS5jbG9uZSgpO1xuICAgICAgICByZXN1bHQubWVyZ2UocHJldmlvdXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IERFTFRBIGFnZ3JlZ2F0aW9uIGJ5IGNvbXBhcmluZyB0d28gY3VtdWxhdGl2ZSBtZWFzdXJlbWVudHMuXG4gICAgICovXG4gICAgZGlmZihwcmV2aW91cywgY3VycmVudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjdXJyZW50LmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5kaWZmKHByZXZpb3VzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdG9NZXRyaWNEYXRhKGRlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcywgZW5kVGltZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICBkYXRhUG9pbnRUeXBlOiBEYXRhUG9pbnRUeXBlLkVYUE9ORU5USUFMX0hJU1RPR1JBTSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRWYWx1ZSA9IGFjY3VtdWxhdGlvbi50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgaW5zdHJ1bWVudCBhbGxvd3MgbmVnYXRpdmUgdmFsdWVzLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93c05lZ2F0aXZlVmFsdWVzID0gZGVzY3JpcHRvci50eXBlID09PSBJbnN0cnVtZW50VHlwZS5HQVVHRSB8fFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnR5cGUgPT09IEluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUiB8fFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnR5cGUgPT09IEluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfR0FVR0UgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBJbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUjtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IGFjY3VtdWxhdGlvbi5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IHBvaW50VmFsdWUuaGFzTWluTWF4ID8gcG9pbnRWYWx1ZS5taW4gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IHBvaW50VmFsdWUuaGFzTWluTWF4ID8gcG9pbnRWYWx1ZS5tYXggOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW06ICFhbGxvd3NOZWdhdGl2ZVZhbHVlcyA/IHBvaW50VmFsdWUuc3VtIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHBvaW50VmFsdWUucG9zaXRpdmUub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldENvdW50czogcG9pbnRWYWx1ZS5wb3NpdGl2ZS5idWNrZXRDb3VudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHBvaW50VmFsdWUubmVnYXRpdmUub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldENvdW50czogcG9pbnRWYWx1ZS5uZWdhdGl2ZS5idWNrZXRDb3VudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IHBvaW50VmFsdWUuY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogcG9pbnRWYWx1ZS5zY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHplcm9Db3VudDogcG9pbnRWYWx1ZS56ZXJvQ291bnQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9uZW50aWFsSGlzdG9ncmFtLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IEFnZ3JlZ2F0b3JLaW5kLCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWlsbGlzVG9IclRpbWUsIGhyVGltZVRvTWljcm9zZWNvbmRzIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvY29yZSc7XG5pbXBvcnQgeyBEYXRhUG9pbnRUeXBlIH0gZnJvbSAnLi4vZXhwb3J0L01ldHJpY0RhdGEnO1xuZXhwb3J0IGNsYXNzIExhc3RWYWx1ZUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9jdXJyZW50O1xuICAgIHNhbXBsZVRpbWU7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBjdXJyZW50ID0gMCwgc2FtcGxlVGltZSA9IFswLCAwXSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5fY3VycmVudCA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMuc2FtcGxlVGltZSA9IHNhbXBsZVRpbWU7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2FtcGxlVGltZSA9IG1pbGxpc1RvSHJUaW1lKERhdGUubm93KCkpO1xuICAgIH1cbiAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKSB7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICAgIH1cbiAgICB0b1BvaW50VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICAgIH1cbn1cbi8qKiBCYXNpYyBhZ2dyZWdhdG9yIHdoaWNoIGNhbGN1bGF0ZXMgYSBMYXN0VmFsdWUgZnJvbSBpbmRpdmlkdWFsIG1lYXN1cmVtZW50cy4gKi9cbmV4cG9ydCBjbGFzcyBMYXN0VmFsdWVBZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gQWdncmVnYXRvcktpbmQuTEFTVF9WQUxVRTtcbiAgICBjcmVhdGVBY2N1bXVsYXRpb24oc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGFzdFZhbHVlQWNjdW11bGF0aW9uKHN0YXJ0VGltZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2Ugb2YgdGhlIGdpdmVuIGFjY3VtdWxhdGlvbnMuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gdGhlIG5ld2x5IGNhcHR1cmVkIChkZWx0YSkgYWNjdW11bGF0aW9uIGZvciBMYXN0VmFsdWVBZ2dyZWdhdG9yLlxuICAgICAqL1xuICAgIG1lcmdlKHByZXZpb3VzLCBkZWx0YSkge1xuICAgICAgICAvLyBuYW5vc2Vjb25kcyBtYXkgbG9zZSBwcmVjaXNpb25zLlxuICAgICAgICBjb25zdCBsYXRlc3RBY2N1bXVsYXRpb24gPSBoclRpbWVUb01pY3Jvc2Vjb25kcyhkZWx0YS5zYW1wbGVUaW1lKSA+PVxuICAgICAgICAgICAgaHJUaW1lVG9NaWNyb3NlY29uZHMocHJldmlvdXMuc2FtcGxlVGltZSlcbiAgICAgICAgICAgID8gZGVsdGFcbiAgICAgICAgICAgIDogcHJldmlvdXM7XG4gICAgICAgIHJldHVybiBuZXcgTGFzdFZhbHVlQWNjdW11bGF0aW9uKHByZXZpb3VzLnN0YXJ0VGltZSwgbGF0ZXN0QWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLCBsYXRlc3RBY2N1bXVsYXRpb24uc2FtcGxlVGltZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgREVMVEEgYWdncmVnYXRpb24gYnkgY29tcGFyaW5nIHR3byBjdW11bGF0aXZlIG1lYXN1cmVtZW50cy5cbiAgICAgKlxuICAgICAqIEEgZGVsdGEgYWdncmVnYXRpb24gaXMgbm90IG1lYW5pbmdmdWwgdG8gTGFzdFZhbHVlQWdncmVnYXRvciwganVzdCByZXR1cm5cbiAgICAgKiB0aGUgbmV3bHkgY2FwdHVyZWQgKGRlbHRhKSBhY2N1bXVsYXRpb24gZm9yIExhc3RWYWx1ZUFnZ3JlZ2F0b3IuXG4gICAgICovXG4gICAgZGlmZihwcmV2aW91cywgY3VycmVudCkge1xuICAgICAgICAvLyBuYW5vc2Vjb25kcyBtYXkgbG9zZSBwcmVjaXNpb25zLlxuICAgICAgICBjb25zdCBsYXRlc3RBY2N1bXVsYXRpb24gPSBoclRpbWVUb01pY3Jvc2Vjb25kcyhjdXJyZW50LnNhbXBsZVRpbWUpID49XG4gICAgICAgICAgICBoclRpbWVUb01pY3Jvc2Vjb25kcyhwcmV2aW91cy5zYW1wbGVUaW1lKVxuICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICA6IHByZXZpb3VzO1xuICAgICAgICByZXR1cm4gbmV3IExhc3RWYWx1ZUFjY3VtdWxhdGlvbihjdXJyZW50LnN0YXJ0VGltZSwgbGF0ZXN0QWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLCBsYXRlc3RBY2N1bXVsYXRpb24uc2FtcGxlVGltZSk7XG4gICAgfVxuICAgIHRvTWV0cmljRGF0YShkZXNjcmlwdG9yLCBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5LCBhY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMsIGVuZFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5LFxuICAgICAgICAgICAgZGF0YVBvaW50VHlwZTogRGF0YVBvaW50VHlwZS5HQVVHRSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1MYXN0VmFsdWUuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQWdncmVnYXRvcktpbmQsIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBEYXRhUG9pbnRUeXBlIH0gZnJvbSAnLi4vZXhwb3J0L01ldHJpY0RhdGEnO1xuZXhwb3J0IGNsYXNzIFN1bUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIG1vbm90b25pYztcbiAgICBfY3VycmVudDtcbiAgICByZXNldDtcbiAgICBjb25zdHJ1Y3RvcihzdGFydFRpbWUsIG1vbm90b25pYywgY3VycmVudCA9IDAsIHJlc2V0ID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgIHRoaXMubW9ub3RvbmljID0gbW9ub3RvbmljO1xuICAgICAgICB0aGlzLl9jdXJyZW50ID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5yZXNldCA9IHJlc2V0O1xuICAgIH1cbiAgICByZWNvcmQodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9ub3RvbmljICYmIHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgKz0gdmFsdWU7XG4gICAgfVxuICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgfVxuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxufVxuLyoqIEJhc2ljIGFnZ3JlZ2F0b3Igd2hpY2ggY2FsY3VsYXRlcyBhIFN1bSBmcm9tIGluZGl2aWR1YWwgbWVhc3VyZW1lbnRzLiAqL1xuZXhwb3J0IGNsYXNzIFN1bUFnZ3JlZ2F0b3Ige1xuICAgIGtpbmQgPSBBZ2dyZWdhdG9yS2luZC5TVU07XG4gICAgbW9ub3RvbmljO1xuICAgIGNvbnN0cnVjdG9yKG1vbm90b25pYykge1xuICAgICAgICB0aGlzLm1vbm90b25pYyA9IG1vbm90b25pYztcbiAgICB9XG4gICAgY3JlYXRlQWNjdW11bGF0aW9uKHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihzdGFydFRpbWUsIHRoaXMubW9ub3RvbmljKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0aGUgZ2l2ZW4gYWNjdW11bGF0aW9ucy5cbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cywgZGVsdGEpIHtcbiAgICAgICAgY29uc3QgcHJldlB2ID0gcHJldmlvdXMudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGRlbHRhUHYgPSBkZWx0YS50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgaWYgKGRlbHRhLnJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihkZWx0YS5zdGFydFRpbWUsIHRoaXMubW9ub3RvbmljLCBkZWx0YVB2LCBkZWx0YS5yZXNldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdW1BY2N1bXVsYXRpb24ocHJldmlvdXMuc3RhcnRUaW1lLCB0aGlzLm1vbm90b25pYywgcHJldlB2ICsgZGVsdGFQdik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgREVMVEEgYWdncmVnYXRpb24gYnkgY29tcGFyaW5nIHR3byBjdW11bGF0aXZlIG1lYXN1cmVtZW50cy5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHByZXZQdiA9IHByZXZpb3VzLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjdXJyUHYgPSBjdXJyZW50LnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIFN1bUFnZ3JlZ2F0b3IgaXMgYSBtb25vdG9uaWMgb25lIGFuZCB0aGUgcHJldmlvdXMgcG9pbnQgdmFsdWUgaXNcbiAgICAgICAgICogZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgYSByZXNldCBpcyBkZWVtZWQgdG8gYmUgaGFwcGVuZWQuXG4gICAgICAgICAqIFJldHVybiB0aGUgY3VycmVudCBwb2ludCB2YWx1ZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGJlZW4gcmVzZXQuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5tb25vdG9uaWMgJiYgcHJldlB2ID4gY3VyclB2KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihjdXJyZW50LnN0YXJ0VGltZSwgdGhpcy5tb25vdG9uaWMsIGN1cnJQdiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdW1BY2N1bXVsYXRpb24oY3VycmVudC5zdGFydFRpbWUsIHRoaXMubW9ub3RvbmljLCBjdXJyUHYgLSBwcmV2UHYpO1xuICAgIH1cbiAgICB0b01ldHJpY0RhdGEoZGVzY3JpcHRvciwgYWdncmVnYXRpb25UZW1wb3JhbGl0eSwgYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLCBlbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgIGRhdGFQb2ludFR5cGU6IERhdGFQb2ludFR5cGUuU1VNLFxuICAgICAgICAgICAgZGF0YVBvaW50czogYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLm1hcCgoW2F0dHJpYnV0ZXMsIGFjY3VtdWxhdGlvbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IGFjY3VtdWxhdGlvbi5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaXNNb25vdG9uaWM6IHRoaXMubW9ub3RvbmljLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1bS5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5leHBvcnQgeyBEcm9wQWdncmVnYXRvciB9IGZyb20gJy4vRHJvcCc7XG5leHBvcnQgeyBIaXN0b2dyYW1BY2N1bXVsYXRpb24sIEhpc3RvZ3JhbUFnZ3JlZ2F0b3IgfSBmcm9tICcuL0hpc3RvZ3JhbSc7XG5leHBvcnQgeyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiwgRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yLCB9IGZyb20gJy4vRXhwb25lbnRpYWxIaXN0b2dyYW0nO1xuZXhwb3J0IHsgTGFzdFZhbHVlQWNjdW11bGF0aW9uLCBMYXN0VmFsdWVBZ2dyZWdhdG9yIH0gZnJvbSAnLi9MYXN0VmFsdWUnO1xuZXhwb3J0IHsgU3VtQWNjdW11bGF0aW9uLCBTdW1BZ2dyZWdhdG9yIH0gZnJvbSAnLi9TdW0nO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0ICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBTdW1BZ2dyZWdhdG9yLCBEcm9wQWdncmVnYXRvciwgTGFzdFZhbHVlQWdncmVnYXRvciwgSGlzdG9ncmFtQWdncmVnYXRvciwgRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yLCB9IGZyb20gJy4uL2FnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgSW5zdHJ1bWVudFR5cGUgfSBmcm9tICcuLi9leHBvcnQvTWV0cmljRGF0YSc7XG4vKipcbiAqIFRoZSBkZWZhdWx0IGRyb3AgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIERyb3BBZ2dyZWdhdGlvbiB7XG4gICAgc3RhdGljIERFRkFVTFRfSU5TVEFOQ0UgPSBuZXcgRHJvcEFnZ3JlZ2F0b3IoKTtcbiAgICBjcmVhdGVBZ2dyZWdhdG9yKF9pbnN0cnVtZW50KSB7XG4gICAgICAgIHJldHVybiBEcm9wQWdncmVnYXRpb24uREVGQVVMVF9JTlNUQU5DRTtcbiAgICB9XG59XG5leHBvcnQgeyBEcm9wQWdncmVnYXRpb24gfTtcbi8qKlxuICogVGhlIGRlZmF1bHQgc3VtIGFnZ3JlZ2F0aW9uLlxuICovXG5jbGFzcyBTdW1BZ2dyZWdhdGlvbiB7XG4gICAgc3RhdGljIE1PTk9UT05JQ19JTlNUQU5DRSA9IG5ldyBTdW1BZ2dyZWdhdG9yKHRydWUpO1xuICAgIHN0YXRpYyBOT05fTU9OT1RPTklDX0lOU1RBTkNFID0gbmV3IFN1bUFnZ3JlZ2F0b3IoZmFsc2UpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoaW5zdHJ1bWVudCkge1xuICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBJbnN0cnVtZW50VHlwZS5DT1VOVEVSOlxuICAgICAgICAgICAgY2FzZSBJbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0NPVU5URVI6XG4gICAgICAgICAgICBjYXNlIEluc3RydW1lbnRUeXBlLkhJU1RPR1JBTToge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdW1BZ2dyZWdhdGlvbi5NT05PVE9OSUNfSU5TVEFOQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN1bUFnZ3JlZ2F0aW9uLk5PTl9NT05PVE9OSUNfSU5TVEFOQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgeyBTdW1BZ2dyZWdhdGlvbiB9O1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBsYXN0IHZhbHVlIGFnZ3JlZ2F0aW9uLlxuICovXG5jbGFzcyBMYXN0VmFsdWVBZ2dyZWdhdGlvbiB7XG4gICAgc3RhdGljIERFRkFVTFRfSU5TVEFOQ0UgPSBuZXcgTGFzdFZhbHVlQWdncmVnYXRvcigpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIExhc3RWYWx1ZUFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0IHsgTGFzdFZhbHVlQWdncmVnYXRpb24gfTtcbi8qKlxuICogVGhlIGRlZmF1bHQgaGlzdG9ncmFtIGFnZ3JlZ2F0aW9uLlxuXG4gKi9cbmNsYXNzIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uIHtcbiAgICBzdGF0aWMgREVGQVVMVF9JTlNUQU5DRSA9IG5ldyBIaXN0b2dyYW1BZ2dyZWdhdG9yKFswLCA1LCAxMCwgMjUsIDUwLCA3NSwgMTAwLCAyNTAsIDUwMCwgNzUwLCAxMDAwLCAyNTAwLCA1MDAwLCA3NTAwLCAxMDAwMF0sIHRydWUpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0IHsgSGlzdG9ncmFtQWdncmVnYXRpb24gfTtcbi8qKlxuICogVGhlIGV4cGxpY2l0IGJ1Y2tldCBoaXN0b2dyYW0gYWdncmVnYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uIHtcbiAgICBfYm91bmRhcmllcztcbiAgICBfcmVjb3JkTWluTWF4O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib3VuZGFyaWVzIHRoZSBidWNrZXQgYm91bmRhcmllcyBvZiB0aGUgaGlzdG9ncmFtIGFnZ3JlZ2F0aW9uXG4gICAgICogQHBhcmFtIF9yZWNvcmRNaW5NYXggSWYgc2V0IHRvIHRydWUsIG1pbiBhbmQgbWF4IHdpbGwgYmUgcmVjb3JkZWQuIE90aGVyd2lzZSwgbWluIGFuZCBtYXggd2lsbCBub3QgYmUgcmVjb3JkZWQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYm91bmRhcmllcywgcmVjb3JkTWluTWF4ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoYm91bmRhcmllcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb24gc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBleHBsaWNpdCBib3VuZGFyaWVzLCBpZiBhIHNpbmdsZSBidWNrZXQgaGlzdG9ncmFtIGlzIHJlcXVpcmVkLCBwbGVhc2UgcGFzcyBhbiBlbXB0eSBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvcHkgdGhlIGJvdW5kYXJpZXMgYXJyYXkgZm9yIG1vZGlmaWNhdGlvbi5cbiAgICAgICAgYm91bmRhcmllcyA9IGJvdW5kYXJpZXMuY29uY2F0KCk7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gYW4gb3JkZXJlZCBzZXQgdG8gYmUgYWJsZSB0byBjb3JyZWN0bHkgY29tcHV0ZSBjb3VudCBmb3IgZWFjaFxuICAgICAgICAvLyBib3VuZGFyeSBzaW5jZSB3ZSdsbCBpdGVyYXRlIG9uIGVhY2ggaW4gb3JkZXIuXG4gICAgICAgIGJvdW5kYXJpZXMgPSBib3VuZGFyaWVzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBJbmZpbml0eSBmcm9tIHRoZSBib3VuZGFyaWVzLlxuICAgICAgICBjb25zdCBtaW51c0luZmluaXR5SW5kZXggPSBib3VuZGFyaWVzLmxhc3RJbmRleE9mKC1JbmZpbml0eSk7XG4gICAgICAgIGxldCBpbmZpbml0eUluZGV4ID0gYm91bmRhcmllcy5pbmRleE9mKEluZmluaXR5KTtcbiAgICAgICAgaWYgKGluZmluaXR5SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBpbmZpbml0eUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JvdW5kYXJpZXMgPSBib3VuZGFyaWVzLnNsaWNlKG1pbnVzSW5maW5pdHlJbmRleCArIDEsIGluZmluaXR5SW5kZXgpO1xuICAgICAgICB0aGlzLl9yZWNvcmRNaW5NYXggPSByZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW1BZ2dyZWdhdG9yKHRoaXMuX2JvdW5kYXJpZXMsIHRoaXMuX3JlY29yZE1pbk1heCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRpb24ge1xuICAgIF9tYXhTaXplO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgY29uc3RydWN0b3IobWF4U2l6ZSA9IDE2MCwgcmVjb3JkTWluTWF4ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTtcbiAgICAgICAgdGhpcy5fcmVjb3JkTWluTWF4ID0gcmVjb3JkTWluTWF4O1xuICAgIH1cbiAgICBjcmVhdGVBZ2dyZWdhdG9yKF9pbnN0cnVtZW50KSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yKHRoaXMuX21heFNpemUsIHRoaXMuX3JlY29yZE1pbk1heCk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgZGVmYXVsdCBhZ2dyZWdhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRBZ2dyZWdhdGlvbiB7XG4gICAgX3Jlc29sdmUoaW5zdHJ1bWVudCkge1xuICAgICAgICAvLyBjYXN0IHRvIHVua25vd24gdG8gZGlzYWJsZSBjb21wbGFpbnRzIG9uIHRoZSAodW5yZWFjaGFibGUpIGZhbGxiYWNrLlxuICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBJbnN0cnVtZW50VHlwZS5DT1VOVEVSOlxuICAgICAgICAgICAgY2FzZSBJbnN0cnVtZW50VHlwZS5VUF9ET1dOX0NPVU5URVI6XG4gICAgICAgICAgICBjYXNlIEluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU1VNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnN0cnVtZW50VHlwZS5HQVVHRTpcbiAgICAgICAgICAgIGNhc2UgSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9HQVVHRToge1xuICAgICAgICAgICAgICAgIHJldHVybiBMQVNUX1ZBTFVFX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnN0cnVtZW50VHlwZS5ISVNUT0dSQU06IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1bWVudC5hZHZpY2UuZXhwbGljaXRCdWNrZXRCb3VuZGFyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbihpbnN0cnVtZW50LmFkdmljZS5leHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gSElTVE9HUkFNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFwaS5kaWFnLndhcm4oYFVuYWJsZSB0byByZWNvZ25pemUgaW5zdHJ1bWVudCB0eXBlOiAke2luc3RydW1lbnQudHlwZX1gKTtcbiAgICAgICAgcmV0dXJuIERST1BfQUdHUkVHQVRJT047XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZShpbnN0cnVtZW50KS5jcmVhdGVBZ2dyZWdhdG9yKGluc3RydW1lbnQpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBEUk9QX0FHR1JFR0FUSU9OID0gbmV3IERyb3BBZ2dyZWdhdGlvbigpO1xuZXhwb3J0IGNvbnN0IFNVTV9BR0dSRUdBVElPTiA9IG5ldyBTdW1BZ2dyZWdhdGlvbigpO1xuZXhwb3J0IGNvbnN0IExBU1RfVkFMVUVfQUdHUkVHQVRJT04gPSBuZXcgTGFzdFZhbHVlQWdncmVnYXRpb24oKTtcbmV4cG9ydCBjb25zdCBISVNUT0dSQU1fQUdHUkVHQVRJT04gPSBuZXcgSGlzdG9ncmFtQWdncmVnYXRpb24oKTtcbmV4cG9ydCBjb25zdCBFWFBPTkVOVElBTF9ISVNUT0dSQU1fQUdHUkVHQVRJT04gPSBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdGlvbigpO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUdHUkVHQVRJT04gPSBuZXcgRGVmYXVsdEFnZ3JlZ2F0aW9uKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BZ2dyZWdhdGlvbi5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBERUZBVUxUX0FHR1JFR0FUSU9OLCBEUk9QX0FHR1JFR0FUSU9OLCBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uLCBFeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uLCBISVNUT0dSQU1fQUdHUkVHQVRJT04sIExBU1RfVkFMVUVfQUdHUkVHQVRJT04sIFNVTV9BR0dSRUdBVElPTiwgfSBmcm9tICcuL0FnZ3JlZ2F0aW9uJztcbmV4cG9ydCB2YXIgQWdncmVnYXRpb25UeXBlO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGlvblR5cGUpIHtcbiAgICBBZ2dyZWdhdGlvblR5cGVbQWdncmVnYXRpb25UeXBlW1wiREVGQVVMVFwiXSA9IDBdID0gXCJERUZBVUxUXCI7XG4gICAgQWdncmVnYXRpb25UeXBlW0FnZ3JlZ2F0aW9uVHlwZVtcIkRST1BcIl0gPSAxXSA9IFwiRFJPUFwiO1xuICAgIEFnZ3JlZ2F0aW9uVHlwZVtBZ2dyZWdhdGlvblR5cGVbXCJTVU1cIl0gPSAyXSA9IFwiU1VNXCI7XG4gICAgQWdncmVnYXRpb25UeXBlW0FnZ3JlZ2F0aW9uVHlwZVtcIkxBU1RfVkFMVUVcIl0gPSAzXSA9IFwiTEFTVF9WQUxVRVwiO1xuICAgIEFnZ3JlZ2F0aW9uVHlwZVtBZ2dyZWdhdGlvblR5cGVbXCJFWFBMSUNJVF9CVUNLRVRfSElTVE9HUkFNXCJdID0gNF0gPSBcIkVYUExJQ0lUX0JVQ0tFVF9ISVNUT0dSQU1cIjtcbiAgICBBZ2dyZWdhdGlvblR5cGVbQWdncmVnYXRpb25UeXBlW1wiRVhQT05FTlRJQUxfSElTVE9HUkFNXCJdID0gNV0gPSBcIkVYUE9ORU5USUFMX0hJU1RPR1JBTVwiO1xufSkoQWdncmVnYXRpb25UeXBlIHx8IChBZ2dyZWdhdGlvblR5cGUgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHRvQWdncmVnYXRpb24ob3B0aW9uKSB7XG4gICAgc3dpdGNoIChvcHRpb24udHlwZSkge1xuICAgICAgICBjYXNlIEFnZ3JlZ2F0aW9uVHlwZS5ERUZBVUxUOlxuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfQUdHUkVHQVRJT047XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLkRST1A6XG4gICAgICAgICAgICByZXR1cm4gRFJPUF9BR0dSRUdBVElPTjtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuU1VNOlxuICAgICAgICAgICAgcmV0dXJuIFNVTV9BR0dSRUdBVElPTjtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuTEFTVF9WQUxVRTpcbiAgICAgICAgICAgIHJldHVybiBMQVNUX1ZBTFVFX0FHR1JFR0FUSU9OO1xuICAgICAgICBjYXNlIEFnZ3JlZ2F0aW9uVHlwZS5FWFBPTkVOVElBTF9ISVNUT0dSQU06IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cE9wdGlvbiA9IG9wdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdGlvbihleHBPcHRpb24ub3B0aW9ucz8ubWF4U2l6ZSwgZXhwT3B0aW9uLm9wdGlvbnM/LnJlY29yZE1pbk1heCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuRVhQTElDSVRfQlVDS0VUX0hJU1RPR1JBTToge1xuICAgICAgICAgICAgY29uc3QgZXhwT3B0aW9uID0gb3B0aW9uO1xuICAgICAgICAgICAgaWYgKGV4cE9wdGlvbi5vcHRpb25zID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSElTVE9HUkFNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uKGV4cE9wdGlvbi5vcHRpb25zPy5ib3VuZGFyaWVzLCBleHBPcHRpb24ub3B0aW9ucz8ucmVjb3JkTWluTWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBBZ2dyZWdhdGlvbicpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uT3B0aW9uLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgfSBmcm9tICcuL0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHknO1xuaW1wb3J0IHsgQWdncmVnYXRpb25UeXBlIH0gZnJvbSAnLi4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvbic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9TRUxFQ1RPUiA9IF9pbnN0cnVtZW50VHlwZSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogQWdncmVnYXRpb25UeXBlLkRFRkFVTFQsXG4gICAgfTtcbn07XG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUiA9IF9pbnN0cnVtZW50VHlwZSA9PiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkNVTVVMQVRJVkU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BZ2dyZWdhdGlvblNlbGVjdG9yLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCAqIGFzIGFwaSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgY2FsbFdpdGhUaW1lb3V0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9BR0dSRUdBVElPTl9TRUxFQ1RPUiwgREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUiwgfSBmcm9tICcuL0FnZ3JlZ2F0aW9uU2VsZWN0b3InO1xuLyoqXG4gKiBBIHJlZ2lzdGVyZWQgcmVhZGVyIG9mIG1ldHJpY3MgdGhhdCwgd2hlbiBsaW5rZWQgdG8gYSB7QGxpbmsgTWV0cmljUHJvZHVjZXJ9LCBvZmZlcnMgZ2xvYmFsXG4gKiBjb250cm9sIG92ZXIgbWV0cmljcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1ldHJpY1JlYWRlciB7XG4gICAgLy8gVHJhY2tzIHRoZSBzaHV0ZG93biBzdGF0ZS5cbiAgICAvLyBUT0RPOiB1c2UgQmluZE9uY2VQcm9taXNlIGhlcmUgb25jZSBhIG5ldyB2ZXJzaW9uIG9mIEBvcGVudGVsZW1ldHJ5L2NvcmUgaXMgYXZhaWxhYmxlLlxuICAgIF9zaHV0ZG93biA9IGZhbHNlO1xuICAgIC8vIEFkZGl0aW9uYWwgTWV0cmljUHJvZHVjZXJzIHdoaWNoIHdpbGwgYmUgY29tYmluZWQgd2l0aCB0aGUgU0RLJ3Mgb3V0cHV0XG4gICAgX21ldHJpY1Byb2R1Y2VycztcbiAgICAvLyBNZXRyaWNQcm9kdWNlciB1c2VkIGJ5IHRoaXMgaW5zdGFuY2Ugd2hpY2ggcHJvZHVjZXMgbWV0cmljcyBmcm9tIHRoZSBTREtcbiAgICBfc2RrTWV0cmljUHJvZHVjZXI7XG4gICAgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICBfYWdncmVnYXRpb25TZWxlY3RvcjtcbiAgICBfY2FyZGluYWxpdHlTZWxlY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uU2VsZWN0b3IgPVxuICAgICAgICAgICAgb3B0aW9ucz8uYWdncmVnYXRpb25TZWxlY3RvciA/PyBERUZBVUxUX0FHR1JFR0FUSU9OX1NFTEVDVE9SO1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGlvblRlbXBvcmFsaXR5U2VsZWN0b3IgPVxuICAgICAgICAgICAgb3B0aW9ucz8uYWdncmVnYXRpb25UZW1wb3JhbGl0eVNlbGVjdG9yID8/XG4gICAgICAgICAgICAgICAgREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUjtcbiAgICAgICAgdGhpcy5fbWV0cmljUHJvZHVjZXJzID0gb3B0aW9ucz8ubWV0cmljUHJvZHVjZXJzID8/IFtdO1xuICAgICAgICB0aGlzLl9jYXJkaW5hbGl0eVNlbGVjdG9yID0gb3B0aW9ucz8uY2FyZGluYWxpdHlTZWxlY3RvcjtcbiAgICB9XG4gICAgc2V0TWV0cmljUHJvZHVjZXIobWV0cmljUHJvZHVjZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nka01ldHJpY1Byb2R1Y2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldHJpY1JlYWRlciBjYW4gbm90IGJlIGJvdW5kIHRvIGEgTWV0ZXJQcm92aWRlciBhZ2Fpbi4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZGtNZXRyaWNQcm9kdWNlciA9IG1ldHJpY1Byb2R1Y2VyO1xuICAgICAgICB0aGlzLm9uSW5pdGlhbGl6ZWQoKTtcbiAgICB9XG4gICAgc2VsZWN0QWdncmVnYXRpb24oaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0aW9uU2VsZWN0b3IoaW5zdHJ1bWVudFR5cGUpO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KGluc3RydW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdGlvblRlbXBvcmFsaXR5U2VsZWN0b3IoaW5zdHJ1bWVudFR5cGUpO1xuICAgIH1cbiAgICBzZWxlY3RDYXJkaW5hbGl0eUxpbWl0KGluc3RydW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkaW5hbGl0eVNlbGVjdG9yXG4gICAgICAgICAgICA/IHRoaXMuX2NhcmRpbmFsaXR5U2VsZWN0b3IoaW5zdHJ1bWVudFR5cGUpXG4gICAgICAgICAgICA6IDIwMDA7IC8vIGRlZmF1bHQgdmFsdWUgaWYgbm8gc2VsZWN0b3IgaXMgcHJvdmlkZWRcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlIG9uY2UgdGhlIFNESyBoYXMgaW5pdGlhbGl6ZWQgdGhpcyB7QGxpbmsgTWV0cmljUmVhZGVyfVxuICAgICAqIE92ZXJyaWRpbmcgdGhpcyBtZXRob2QgaXMgb3B0aW9uYWwuXG4gICAgICovXG4gICAgb25Jbml0aWFsaXplZCgpIHtcbiAgICAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBlbXB0eS5cbiAgICB9XG4gICAgYXN5bmMgY29sbGVjdChvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZGtNZXRyaWNQcm9kdWNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldHJpY1JlYWRlciBpcyBub3QgYm91bmQgdG8gYSBNZXRyaWNQcm9kdWNlcicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN1YnNlcXVlbnQgaW52b2NhdGlvbnMgdG8gY29sbGVjdCBhcmUgbm90IGFsbG93ZWQuIFNES3MgU0hPVUxEIHJldHVybiBzb21lIGZhaWx1cmUgZm9yIHRoZXNlIGNhbGxzLlxuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljUmVhZGVyIGlzIHNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW3Nka0NvbGxlY3Rpb25SZXN1bHRzLCAuLi5hZGRpdGlvbmFsQ29sbGVjdGlvblJlc3VsdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgdGhpcy5fc2RrTWV0cmljUHJvZHVjZXIuY29sbGVjdCh7XG4gICAgICAgICAgICAgICAgdGltZW91dE1pbGxpczogb3B0aW9ucz8udGltZW91dE1pbGxpcyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4udGhpcy5fbWV0cmljUHJvZHVjZXJzLm1hcChwcm9kdWNlciA9PiBwcm9kdWNlci5jb2xsZWN0KHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBvcHRpb25zPy50aW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICBdKTtcbiAgICAgICAgLy8gTWVyZ2UgdGhlIHJlc3VsdHMsIGtlZXBpbmcgdGhlIFNESydzIFJlc291cmNlXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHNka0NvbGxlY3Rpb25SZXN1bHRzLmVycm9ycy5jb25jYXQoYWRkaXRpb25hbENvbGxlY3Rpb25SZXN1bHRzLmZsYXRNYXAocmVzdWx0ID0+IHJlc3VsdC5lcnJvcnMpKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBzZGtDb2xsZWN0aW9uUmVzdWx0cy5yZXNvdXJjZU1ldHJpY3MucmVzb3VyY2U7XG4gICAgICAgIGNvbnN0IHNjb3BlTWV0cmljcyA9IHNka0NvbGxlY3Rpb25SZXN1bHRzLnJlc291cmNlTWV0cmljcy5zY29wZU1ldHJpY3MuY29uY2F0KGFkZGl0aW9uYWxDb2xsZWN0aW9uUmVzdWx0cy5mbGF0TWFwKHJlc3VsdCA9PiByZXN1bHQucmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzb3VyY2VNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9ycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgc2h1dGRvd24ob3B0aW9ucykge1xuICAgICAgICAvLyBEbyBub3QgY2FsbCBzaHV0ZG93biBhZ2FpbiBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC5cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGkuZGlhZy5lcnJvcignQ2Fubm90IGNhbGwgc2h1dGRvd24gdHdpY2UuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gdGltZW91dCBpZiB0aW1lb3V0TWlsbGlzIGlzIHVuZGVmaW5lZCBvciBudWxsLlxuICAgICAgICBpZiAob3B0aW9ucz8udGltZW91dE1pbGxpcyA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uU2h1dGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxXaXRoVGltZW91dCh0aGlzLm9uU2h1dGRvd24oKSwgb3B0aW9ucy50aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaHV0ZG93biA9IHRydWU7XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmx1c2gob3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd24pIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oJ0Nhbm5vdCBmb3JjZUZsdXNoIG9uIGFscmVhZHkgc2h1dGRvd24gTWV0cmljUmVhZGVyLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIHRpbWVvdXQgaWYgdGltZW91dE1pbGxpcyBpcyB1bmRlZmluZWQgb3IgbnVsbC5cbiAgICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXRNaWxsaXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkZvcmNlRmx1c2goKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjYWxsV2l0aFRpbWVvdXQodGhpcy5vbkZvcmNlRmx1c2goKSwgb3B0aW9ucy50aW1lb3V0TWlsbGlzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNSZWFkZXIuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0ICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBpbnRlcm5hbCwgRXhwb3J0UmVzdWx0Q29kZSwgZ2xvYmFsRXJyb3JIYW5kbGVyLCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2NvcmUnO1xuaW1wb3J0IHsgTWV0cmljUmVhZGVyIH0gZnJvbSAnLi9NZXRyaWNSZWFkZXInO1xuaW1wb3J0IHsgY2FsbFdpdGhUaW1lb3V0LCBUaW1lb3V0RXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG4vKipcbiAqIHtAbGluayBNZXRyaWNSZWFkZXJ9IHdoaWNoIGNvbGxlY3RzIG1ldHJpY3MgYmFzZWQgb24gYSB1c2VyLWNvbmZpZ3VyYWJsZSB0aW1lIGludGVydmFsLCBhbmQgcGFzc2VzIHRoZSBtZXRyaWNzIHRvXG4gKiB0aGUgY29uZmlndXJlZCB7QGxpbmsgUHVzaE1ldHJpY0V4cG9ydGVyfVxuICovXG5leHBvcnQgY2xhc3MgUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIgZXh0ZW5kcyBNZXRyaWNSZWFkZXIge1xuICAgIF9pbnRlcnZhbDtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX2V4cG9ydEludGVydmFsO1xuICAgIF9leHBvcnRUaW1lb3V0O1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgYWdncmVnYXRpb25TZWxlY3Rvcjogb3B0aW9ucy5leHBvcnRlci5zZWxlY3RBZ2dyZWdhdGlvbj8uYmluZChvcHRpb25zLmV4cG9ydGVyKSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3Rvcjogb3B0aW9ucy5leHBvcnRlci5zZWxlY3RBZ2dyZWdhdGlvblRlbXBvcmFsaXR5Py5iaW5kKG9wdGlvbnMuZXhwb3J0ZXIpLFxuICAgICAgICAgICAgbWV0cmljUHJvZHVjZXJzOiBvcHRpb25zLm1ldHJpY1Byb2R1Y2VycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIG9wdGlvbnMuZXhwb3J0SW50ZXJ2YWxNaWxsaXMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ2V4cG9ydEludGVydmFsTWlsbGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5leHBvcnRUaW1lb3V0TWlsbGlzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIG9wdGlvbnMuZXhwb3J0VGltZW91dE1pbGxpcyA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignZXhwb3J0VGltZW91dE1pbGxpcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb3J0VGltZW91dE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIG9wdGlvbnMuZXhwb3J0SW50ZXJ2YWxNaWxsaXMgPCBvcHRpb25zLmV4cG9ydFRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdleHBvcnRJbnRlcnZhbE1pbGxpcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBleHBvcnRUaW1lb3V0TWlsbGlzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXhwb3J0SW50ZXJ2YWwgPSBvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzID8/IDYwMDAwO1xuICAgICAgICB0aGlzLl9leHBvcnRUaW1lb3V0ID0gb3B0aW9ucy5leHBvcnRUaW1lb3V0TWlsbGlzID8/IDMwMDAwO1xuICAgICAgICB0aGlzLl9leHBvcnRlciA9IG9wdGlvbnMuZXhwb3J0ZXI7XG4gICAgfVxuICAgIGFzeW5jIF9ydW5PbmNlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgY2FsbFdpdGhUaW1lb3V0KHRoaXMuX2RvUnVuKCksIHRoaXMuX2V4cG9ydFRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBhcGkuZGlhZy5lcnJvcignRXhwb3J0IHRvb2sgbG9uZ2VyIHRoYW4gJXMgbWlsbGlzZWNvbmRzIGFuZCB0aW1lZCBvdXQuJywgdGhpcy5fZXhwb3J0VGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2xvYmFsRXJyb3JIYW5kbGVyKGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgX2RvUnVuKCkge1xuICAgICAgICBjb25zdCB7IHJlc291cmNlTWV0cmljcywgZXJyb3JzIH0gPSBhd2FpdCB0aGlzLmNvbGxlY3Qoe1xuICAgICAgICAgICAgdGltZW91dE1pbGxpczogdGhpcy5fZXhwb3J0VGltZW91dCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXBpLmRpYWcuZXJyb3IoJ1BlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyOiBtZXRyaWNzIGNvbGxlY3Rpb24gZXJyb3JzJywgLi4uZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2VNZXRyaWNzLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVzb3VyY2VNZXRyaWNzLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXM/LigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhcGkuZGlhZy5kZWJ1ZygnRXJyb3Igd2hpbGUgcmVzb2x2aW5nIGFzeW5jIHBvcnRpb24gb2YgcmVzb3VyY2U6ICcsIGUpO1xuICAgICAgICAgICAgICAgIGdsb2JhbEVycm9ySGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnRlcm5hbC5fZXhwb3J0KHRoaXMuX2V4cG9ydGVyLCByZXNvdXJjZU1ldHJpY3MpO1xuICAgICAgICBpZiAocmVzdWx0LmNvZGUgIT09IEV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjogbWV0cmljcyBleHBvcnQgZmFpbGVkIChlcnJvciAke3Jlc3VsdC5lcnJvcn0pYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Jbml0aWFsaXplZCgpIHtcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgaW50ZXJ2YWwgYXMgc29vbiBhcyB0aGlzIHJlYWRlciBpcyBpbml0aWFsaXplZCBhbmQga2VlcCBoYW5kbGUgZm9yIHNodXRkb3duLlxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX3J1bk9uY2UgbmV2ZXIgcmVqZWN0cy4gVXNpbmcgdm9pZCBvcGVyYXRvciB0byBzdXBwcmVzcyBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXMuXG4gICAgICAgICAgICB2b2lkIHRoaXMuX3J1bk9uY2UoKTtcbiAgICAgICAgfSwgdGhpcy5fZXhwb3J0SW50ZXJ2YWwpO1xuICAgICAgICAvLyBkZXBlbmRpbmcgb24gcnVudGltZSwgdGhpcyBtYXkgYmUgYSAnbnVtYmVyJyBvciBOb2RlSlMuVGltZW91dFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2ludGVydmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwudW5yZWYoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkZvcmNlRmx1c2goKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3J1bk9uY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCgpO1xuICAgIH1cbiAgICBhc3luYyBvblNodXRkb3duKCkge1xuICAgICAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMub25Gb3JjZUZsdXNoKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFZpZXdSZWdpc3RyeSB7XG4gICAgX3JlZ2lzdGVyZWRWaWV3cyA9IFtdO1xuICAgIGFkZFZpZXcodmlldykge1xuICAgICAgICB0aGlzLl9yZWdpc3RlcmVkVmlld3MucHVzaCh2aWV3KTtcbiAgICB9XG4gICAgZmluZFZpZXdzKGluc3RydW1lbnQsIG1ldGVyKSB7XG4gICAgICAgIGNvbnN0IHZpZXdzID0gdGhpcy5fcmVnaXN0ZXJlZFZpZXdzLmZpbHRlcihyZWdpc3RlcmVkVmlldyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX21hdGNoSW5zdHJ1bWVudChyZWdpc3RlcmVkVmlldy5pbnN0cnVtZW50U2VsZWN0b3IsIGluc3RydW1lbnQpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWF0Y2hNZXRlcihyZWdpc3RlcmVkVmlldy5tZXRlclNlbGVjdG9yLCBtZXRlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZpZXdzO1xuICAgIH1cbiAgICBfbWF0Y2hJbnN0cnVtZW50KHNlbGVjdG9yLCBpbnN0cnVtZW50KSB7XG4gICAgICAgIHJldHVybiAoKHNlbGVjdG9yLmdldFR5cGUoKSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBpbnN0cnVtZW50LnR5cGUgPT09IHNlbGVjdG9yLmdldFR5cGUoKSkgJiZcbiAgICAgICAgICAgIHNlbGVjdG9yLmdldE5hbWVGaWx0ZXIoKS5tYXRjaChpbnN0cnVtZW50Lm5hbWUpICYmXG4gICAgICAgICAgICBzZWxlY3Rvci5nZXRVbml0RmlsdGVyKCkubWF0Y2goaW5zdHJ1bWVudC51bml0KSk7XG4gICAgfVxuICAgIF9tYXRjaE1ldGVyKHNlbGVjdG9yLCBtZXRlcikge1xuICAgICAgICByZXR1cm4gKHNlbGVjdG9yLmdldE5hbWVGaWx0ZXIoKS5tYXRjaChtZXRlci5uYW1lKSAmJlxuICAgICAgICAgICAgKG1ldGVyLnZlcnNpb24gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yLmdldFZlcnNpb25GaWx0ZXIoKS5tYXRjaChtZXRlci52ZXJzaW9uKSkgJiZcbiAgICAgICAgICAgIChtZXRlci5zY2hlbWFVcmwgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yLmdldFNjaGVtYVVybEZpbHRlcigpLm1hdGNoKG1ldGVyLnNjaGVtYVVybCkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WaWV3UmVnaXN0cnkuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgVmFsdWVUeXBlLCBkaWFnLCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBlcXVhbHNDYXNlSW5zZW5zaXRpdmUgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcihuYW1lLCB0eXBlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkge1xuICAgICAgICBkaWFnLndhcm4oYEludmFsaWQgbWV0cmljIG5hbWU6IFwiJHtuYW1lfVwiLiBUaGUgbWV0cmljIG5hbWUgc2hvdWxkIGJlIGEgQVNDSUkgc3RyaW5nIHdpdGggYSBsZW5ndGggbm8gZ3JlYXRlciB0aGFuIDI1NSBjaGFyYWN0ZXJzLmApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICAgIHVuaXQ6IG9wdGlvbnM/LnVuaXQgPz8gJycsXG4gICAgICAgIHZhbHVlVHlwZTogb3B0aW9ucz8udmFsdWVUeXBlID8/IFZhbHVlVHlwZS5ET1VCTEUsXG4gICAgICAgIGFkdmljZTogb3B0aW9ucz8uYWR2aWNlID8/IHt9LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3JXaXRoVmlldyh2aWV3LCBpbnN0cnVtZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdmlldy5uYW1lID8/IGluc3RydW1lbnQubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHZpZXcuZGVzY3JpcHRpb24gPz8gaW5zdHJ1bWVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgdHlwZTogaW5zdHJ1bWVudC50eXBlLFxuICAgICAgICB1bml0OiBpbnN0cnVtZW50LnVuaXQsXG4gICAgICAgIHZhbHVlVHlwZTogaW5zdHJ1bWVudC52YWx1ZVR5cGUsXG4gICAgICAgIGFkdmljZTogaW5zdHJ1bWVudC5hZHZpY2UsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlc2NyaXB0b3JDb21wYXRpYmxlV2l0aChkZXNjcmlwdG9yLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICAvLyBOYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmdzLlxuICAgIHJldHVybiAoZXF1YWxzQ2FzZUluc2Vuc2l0aXZlKGRlc2NyaXB0b3IubmFtZSwgb3RoZXJEZXNjcmlwdG9yLm5hbWUpICYmXG4gICAgICAgIGRlc2NyaXB0b3IudW5pdCA9PT0gb3RoZXJEZXNjcmlwdG9yLnVuaXQgJiZcbiAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBvdGhlckRlc2NyaXB0b3IudHlwZSAmJlxuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlVHlwZSA9PT0gb3RoZXJEZXNjcmlwdG9yLnZhbHVlVHlwZSk7XG59XG4vLyBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBubyBncmVhdGVyIHRoYW4gMjU1IGNoYXJhY3RlcnMuXG4vLyBOQjogdGhlIGZpcnN0IGNoYXJhY3RlciBjb3VudGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVzdC5cbmNvbnN0IE5BTUVfUkVHRVhQID0gL15bYS16XVthLXowLTlfLlxcLS9dezAsMjU0fSQvaTtcbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIE5BTUVfUkVHRVhQLnRlc3QobmFtZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnN0cnVtZW50RGVzY3JpcHRvci5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjb250ZXh0IGFzIGNvbnRleHRBcGksIGRpYWcsIFZhbHVlVHlwZSwgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgbWlsbGlzVG9IclRpbWUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbmV4cG9ydCBjbGFzcyBTeW5jSW5zdHJ1bWVudCB7XG4gICAgX3dyaXRhYmxlTWV0cmljU3RvcmFnZTtcbiAgICBfZGVzY3JpcHRvcjtcbiAgICBjb25zdHJ1Y3Rvcih3cml0YWJsZU1ldHJpY1N0b3JhZ2UsIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVNZXRyaWNTdG9yYWdlID0gd3JpdGFibGVNZXRyaWNTdG9yYWdlO1xuICAgICAgICB0aGlzLl9kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcbiAgICB9XG4gICAgX3JlY29yZCh2YWx1ZSwgYXR0cmlidXRlcyA9IHt9LCBjb250ZXh0ID0gY29udGV4dEFwaS5hY3RpdmUoKSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZGlhZy53YXJuKGBub24tbnVtYmVyIHZhbHVlIHByb3ZpZGVkIHRvIG1ldHJpYyAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Rlc2NyaXB0b3IudmFsdWVUeXBlID09PSBWYWx1ZVR5cGUuSU5UICYmXG4gICAgICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRpYWcud2FybihgSU5UIHZhbHVlIHR5cGUgY2Fubm90IGFjY2VwdCBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZvciAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX0sIGlnbm9yaW5nIHRoZSBmcmFjdGlvbmFsIGRpZ2l0cy5gKTtcbiAgICAgICAgICAgIHZhbHVlID0gTWF0aC50cnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICAvLyBpZ25vcmUgbm9uLWZpbml0ZSB2YWx1ZXMuXG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlTWV0cmljU3RvcmFnZS5yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGNvbnRleHQsIG1pbGxpc1RvSHJUaW1lKERhdGUubm93KCkpKTtcbiAgICB9XG59XG4vKipcbiAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHtAbGluayBVcERvd25Db3VudGVyfSBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBVcERvd25Db3VudGVySW5zdHJ1bWVudCBleHRlbmRzIFN5bmNJbnN0cnVtZW50IHtcbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgdmFsdWUgb2YgY291bnRlciBieSB0aGUgaW5wdXQuIElucHV0cyBtYXkgYmUgbmVnYXRpdmUuXG4gICAgICovXG4gICAgYWRkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpIHtcbiAgICAgICAgdGhpcy5fcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpO1xuICAgIH1cbn1cbi8qKlxuICogVGhlIGNsYXNzIGltcGxlbWVudHMge0BsaW5rIENvdW50ZXJ9IGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvdW50ZXJJbnN0cnVtZW50IGV4dGVuZHMgU3luY0luc3RydW1lbnQge1xuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCB2YWx1ZSBvZiBjb3VudGVyIGJ5IHRoZSBpbnB1dC4gSW5wdXRzIG1heSBub3QgYmUgbmVnYXRpdmUuXG4gICAgICovXG4gICAgYWRkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgZGlhZy53YXJuKGBuZWdhdGl2ZSB2YWx1ZSBwcm92aWRlZCB0byBjb3VudGVyICR7dGhpcy5fZGVzY3JpcHRvci5uYW1lfTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgR2F1Z2V9IGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEdhdWdlSW5zdHJ1bWVudCBleHRlbmRzIFN5bmNJbnN0cnVtZW50IHtcbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIGEgbWVhc3VyZW1lbnQuXG4gICAgICovXG4gICAgcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpIHtcbiAgICAgICAgdGhpcy5fcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpO1xuICAgIH1cbn1cbi8qKlxuICogVGhlIGNsYXNzIGltcGxlbWVudHMge0BsaW5rIEhpc3RvZ3JhbX0gaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY2xhc3MgSGlzdG9ncmFtSW5zdHJ1bWVudCBleHRlbmRzIFN5bmNJbnN0cnVtZW50IHtcbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIGEgbWVhc3VyZW1lbnQuIFZhbHVlIG9mIHRoZSBtZWFzdXJlbWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZS5cbiAgICAgKi9cbiAgICByZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCkge1xuICAgICAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgICAgICBkaWFnLndhcm4oYG5lZ2F0aXZlIHZhbHVlIHByb3ZpZGVkIHRvIGhpc3RvZ3JhbSAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlSW5zdHJ1bWVudCB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9tZXRyaWNTdG9yYWdlcztcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX2Rlc2NyaXB0b3I7XG4gICAgX29ic2VydmFibGVSZWdpc3RyeTtcbiAgICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yLCBtZXRyaWNTdG9yYWdlcywgb2JzZXJ2YWJsZVJlZ2lzdHJ5KSB7XG4gICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9tZXRyaWNTdG9yYWdlcyA9IG1ldHJpY1N0b3JhZ2VzO1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlUmVnaXN0cnkgPSBvYnNlcnZhYmxlUmVnaXN0cnk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzZWUge09ic2VydmFibGUuYWRkQ2FsbGJhY2t9XG4gICAgICovXG4gICAgYWRkQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVJlZ2lzdHJ5LmFkZENhbGxiYWNrKGNhbGxiYWNrLCB0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHNlZSB7T2JzZXJ2YWJsZS5yZW1vdmVDYWxsYmFja31cbiAgICAgKi9cbiAgICByZW1vdmVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlUmVnaXN0cnkucmVtb3ZlQ2FsbGJhY2soY2FsbGJhY2ssIHRoaXMpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlQ291bnRlckluc3RydW1lbnQgZXh0ZW5kcyBPYnNlcnZhYmxlSW5zdHJ1bWVudCB7XG59XG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZUdhdWdlSW5zdHJ1bWVudCBleHRlbmRzIE9ic2VydmFibGVJbnN0cnVtZW50IHtcbn1cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlVXBEb3duQ291bnRlckluc3RydW1lbnQgZXh0ZW5kcyBPYnNlcnZhYmxlSW5zdHJ1bWVudCB7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPYnNlcnZhYmxlSW5zdHJ1bWVudChpdCkge1xuICAgIHJldHVybiBpdCBpbnN0YW5jZW9mIE9ic2VydmFibGVJbnN0cnVtZW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5zdHJ1bWVudHMuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IgfSBmcm9tICcuL0luc3RydW1lbnREZXNjcmlwdG9yJztcbmltcG9ydCB7IENvdW50ZXJJbnN0cnVtZW50LCBHYXVnZUluc3RydW1lbnQsIEhpc3RvZ3JhbUluc3RydW1lbnQsIE9ic2VydmFibGVDb3VudGVySW5zdHJ1bWVudCwgT2JzZXJ2YWJsZUdhdWdlSW5zdHJ1bWVudCwgT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJJbnN0cnVtZW50LCBVcERvd25Db3VudGVySW5zdHJ1bWVudCwgfSBmcm9tICcuL0luc3RydW1lbnRzJztcbmltcG9ydCB7IEluc3RydW1lbnRUeXBlIH0gZnJvbSAnLi9leHBvcnQvTWV0cmljRGF0YSc7XG4vKipcbiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUge0BsaW5rIElNZXRlcn0gaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY2xhc3MgTWV0ZXIge1xuICAgIF9tZXRlclNoYXJlZFN0YXRlO1xuICAgIGNvbnN0cnVjdG9yKG1ldGVyU2hhcmVkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZSA9IG1ldGVyU2hhcmVkU3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBHYXVnZX0gaW5zdHJ1bWVudC5cbiAgICAgKi9cbiAgICBjcmVhdGVHYXVnZShuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcihuYW1lLCBJbnN0cnVtZW50VHlwZS5HQVVHRSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBHYXVnZUluc3RydW1lbnQoc3RvcmFnZSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBIaXN0b2dyYW19IGluc3RydW1lbnQuXG4gICAgICovXG4gICAgY3JlYXRlSGlzdG9ncmFtKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKG5hbWUsIEluc3RydW1lbnRUeXBlLkhJU1RPR1JBTSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW1JbnN0cnVtZW50KHN0b3JhZ2UsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB7QGxpbmsgQ291bnRlcn0gaW5zdHJ1bWVudC5cbiAgICAgKi9cbiAgICBjcmVhdGVDb3VudGVyKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKG5hbWUsIEluc3RydW1lbnRUeXBlLkNPVU5URVIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgQ291bnRlckluc3RydW1lbnQoc3RvcmFnZSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBVcERvd25Db3VudGVyfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZVVwRG93bkNvdW50ZXIobmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IobmFtZSwgSW5zdHJ1bWVudFR5cGUuVVBfRE9XTl9DT1VOVEVSLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IFVwRG93bkNvdW50ZXJJbnN0cnVtZW50KHN0b3JhZ2UsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB7QGxpbmsgT2JzZXJ2YWJsZUdhdWdlfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZU9ic2VydmFibGVHYXVnZShuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcihuYW1lLCBJbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyQXN5bmNNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVHYXVnZUluc3RydW1lbnQoZGVzY3JpcHRvciwgc3RvcmFnZXMsIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUub2JzZXJ2YWJsZVJlZ2lzdHJ5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIE9ic2VydmFibGVDb3VudGVyfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZU9ic2VydmFibGVDb3VudGVyKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKG5hbWUsIEluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUiwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3RlckFzeW5jTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlQ291bnRlckluc3RydW1lbnQoZGVzY3JpcHRvciwgc3RvcmFnZXMsIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUub2JzZXJ2YWJsZVJlZ2lzdHJ5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIE9ic2VydmFibGVVcERvd25Db3VudGVyfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZU9ic2VydmFibGVVcERvd25Db3VudGVyKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKG5hbWUsIEluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyQXN5bmNNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVVcERvd25Db3VudGVySW5zdHJ1bWVudChkZXNjcmlwdG9yLCBzdG9yYWdlcywgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5hZGRCYXRjaE9ic2VydmFibGVDYWxsYmFja31cbiAgICAgKi9cbiAgICBhZGRCYXRjaE9ic2VydmFibGVDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkuYWRkQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIHtAbGluayBNZXRlci5yZW1vdmVCYXRjaE9ic2VydmFibGVDYWxsYmFja31cbiAgICAgKi9cbiAgICByZW1vdmVCYXRjaE9ic2VydmFibGVDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkucmVtb3ZlQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZXMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yLCB9IGZyb20gJy4uL0luc3RydW1lbnREZXNjcmlwdG9yJztcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICpcbiAqIFJlcHJlc2VudHMgYSBzdG9yYWdlIGZyb20gd2hpY2ggd2UgY2FuIGNvbGxlY3QgbWV0cmljcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1ldHJpY1N0b3JhZ2Uge1xuICAgIF9pbnN0cnVtZW50RGVzY3JpcHRvcjtcbiAgICBjb25zdHJ1Y3RvcihpbnN0cnVtZW50RGVzY3JpcHRvcikge1xuICAgICAgICB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvciA9IGluc3RydW1lbnREZXNjcmlwdG9yO1xuICAgIH1cbiAgICBnZXRJbnN0cnVtZW50RGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yO1xuICAgIH1cbiAgICB1cGRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLl9pbnN0cnVtZW50RGVzY3JpcHRvciA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yLm5hbWUsIHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yLnR5cGUsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHZhbHVlVHlwZTogdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IudmFsdWVUeXBlLFxuICAgICAgICAgICAgdW5pdDogdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IudW5pdCxcbiAgICAgICAgICAgIGFkdmljZTogdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IuYWR2aWNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNTdG9yYWdlLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGhhc2hBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuZXhwb3J0IGNsYXNzIEhhc2hNYXAge1xuICAgIF92YWx1ZU1hcCA9IG5ldyBNYXAoKTtcbiAgICBfa2V5TWFwID0gbmV3IE1hcCgpO1xuICAgIF9oYXNoO1xuICAgIGNvbnN0cnVjdG9yKGhhc2gpIHtcbiAgICAgICAgdGhpcy5faGFzaCA9IGhhc2g7XG4gICAgfVxuICAgIGdldChrZXksIGhhc2hDb2RlKSB7XG4gICAgICAgIGhhc2hDb2RlID8/PSB0aGlzLl9oYXNoKGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZU1hcC5nZXQoaGFzaENvZGUpO1xuICAgIH1cbiAgICBnZXRPckRlZmF1bHQoa2V5LCBkZWZhdWx0RmFjdG9yeSkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5faGFzaChrZXkpO1xuICAgICAgICBpZiAodGhpcy5fdmFsdWVNYXAuaGFzKGhhc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVNYXAuZ2V0KGhhc2gpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbCA9IGRlZmF1bHRGYWN0b3J5KCk7XG4gICAgICAgIGlmICghdGhpcy5fa2V5TWFwLmhhcyhoYXNoKSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5TWFwLnNldChoYXNoLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlTWFwLnNldChoYXNoLCB2YWwpO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSwgaGFzaENvZGUpIHtcbiAgICAgICAgaGFzaENvZGUgPz89IHRoaXMuX2hhc2goa2V5KTtcbiAgICAgICAgaWYgKCF0aGlzLl9rZXlNYXAuaGFzKGhhc2hDb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5TWFwLnNldChoYXNoQ29kZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZU1hcC5zZXQoaGFzaENvZGUsIHZhbHVlKTtcbiAgICB9XG4gICAgaGFzKGtleSwgaGFzaENvZGUpIHtcbiAgICAgICAgaGFzaENvZGUgPz89IHRoaXMuX2hhc2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlTWFwLmhhcyhoYXNoQ29kZSk7XG4gICAgfVxuICAgICprZXlzKCkge1xuICAgICAgICBjb25zdCBrZXlJdGVyYXRvciA9IHRoaXMuX2tleU1hcC5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBuZXh0ID0ga2V5SXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAobmV4dC5kb25lICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB5aWVsZCBbbmV4dC52YWx1ZVsxXSwgbmV4dC52YWx1ZVswXV07XG4gICAgICAgICAgICBuZXh0ID0ga2V5SXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICplbnRyaWVzKCkge1xuICAgICAgICBjb25zdCB2YWx1ZUl0ZXJhdG9yID0gdGhpcy5fdmFsdWVNYXAuZW50cmllcygpO1xuICAgICAgICBsZXQgbmV4dCA9IHZhbHVlSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAobmV4dC5kb25lICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBuZXh0LnZhbHVlWzBdIGhlcmUgY2FuIG5vdCBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICB5aWVsZCBbdGhpcy5fa2V5TWFwLmdldChuZXh0LnZhbHVlWzBdKSwgbmV4dC52YWx1ZVsxXSwgbmV4dC52YWx1ZVswXV07XG4gICAgICAgICAgICBuZXh0ID0gdmFsdWVJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZU1hcC5zaXplO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVIYXNoTWFwIGV4dGVuZHMgSGFzaE1hcCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKGhhc2hBdHRyaWJ1dGVzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1IYXNoTWFwLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGhhc2hBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXR0cmlidXRlSGFzaE1hcCB9IGZyb20gJy4vSGFzaE1hcCc7XG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZS5cbiAqXG4gKiBBbGxvd3Mgc3luY2hyb25vdXMgY29sbGVjdGlvbiBvZiBtZXRyaWNzLiBUaGlzIHByb2Nlc3NvciBzaG91bGQgYWxsb3dcbiAqIGFsbG9jYXRpb24gb2YgbmV3IGFnZ3JlZ2F0aW9uIGNlbGxzIGZvciBtZXRyaWNzIGFuZCBjb252ZXJ0IGN1bXVsYXRpdmVcbiAqIHJlY29yZGluZyB0byBkZWx0YSBkYXRhIHBvaW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbHRhTWV0cmljUHJvY2Vzc29yIHtcbiAgICBfYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UgPSBuZXcgQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgIC8vIFRPRE86IGZpbmQgYSByZWFzb25hYmxlIG1lYW4gdG8gY2xlYW4gdGhlIG1lbW87XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktc3BlY2lmaWNhdGlvbi9wdWxsLzIyMDhcbiAgICBfY3VtdWxhdGl2ZU1lbW9TdG9yYWdlID0gbmV3IEF0dHJpYnV0ZUhhc2hNYXAoKTtcbiAgICBfY2FyZGluYWxpdHlMaW1pdDtcbiAgICBfb3ZlcmZsb3dBdHRyaWJ1dGVzID0geyAnb3RlbC5tZXRyaWMub3ZlcmZsb3cnOiB0cnVlIH07XG4gICAgX292ZXJmbG93SGFzaENvZGU7XG4gICAgX2FnZ3JlZ2F0b3I7XG4gICAgY29uc3RydWN0b3IoYWdncmVnYXRvciwgYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9yO1xuICAgICAgICB0aGlzLl9jYXJkaW5hbGl0eUxpbWl0ID0gKGFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA/PyAyMDAwKSAtIDE7XG4gICAgICAgIHRoaXMuX292ZXJmbG93SGFzaENvZGUgPSBoYXNoQXR0cmlidXRlcyh0aGlzLl9vdmVyZmxvd0F0dHJpYnV0ZXMpO1xuICAgIH1cbiAgICByZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIF9jb250ZXh0LCBjb2xsZWN0aW9uVGltZSkge1xuICAgICAgICBsZXQgYWNjdW11bGF0aW9uID0gdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UuZ2V0KGF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoIWFjY3VtdWxhdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLnNpemUgPj0gdGhpcy5fY2FyZGluYWxpdHlMaW1pdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93QWNjdW11bGF0aW9uID0gdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UuZ2V0T3JEZWZhdWx0KHRoaXMuX292ZXJmbG93QXR0cmlidXRlcywgKCkgPT4gdGhpcy5fYWdncmVnYXRvci5jcmVhdGVBY2N1bXVsYXRpb24oY29sbGVjdGlvblRpbWUpKTtcbiAgICAgICAgICAgICAgICBvdmVyZmxvd0FjY3VtdWxhdGlvbj8ucmVjb3JkKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2N1bXVsYXRpb24gPSB0aGlzLl9hZ2dyZWdhdG9yLmNyZWF0ZUFjY3VtdWxhdGlvbihjb2xsZWN0aW9uVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5zZXQoYXR0cmlidXRlcywgYWNjdW11bGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBhY2N1bXVsYXRpb24/LnJlY29yZCh2YWx1ZSk7XG4gICAgfVxuICAgIGJhdGNoQ3VtdWxhdGUobWVhc3VyZW1lbnRzLCBjb2xsZWN0aW9uVGltZSkge1xuICAgICAgICBBcnJheS5mcm9tKG1lYXN1cmVtZW50cy5lbnRyaWVzKCkpLmZvckVhY2goKFthdHRyaWJ1dGVzLCB2YWx1ZSwgaGFzaENvZGVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY2N1bXVsYXRpb24gPSB0aGlzLl9hZ2dyZWdhdG9yLmNyZWF0ZUFjY3VtdWxhdGlvbihjb2xsZWN0aW9uVGltZSk7XG4gICAgICAgICAgICBhY2N1bXVsYXRpb24/LnJlY29yZCh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgZGVsdGEgPSBhY2N1bXVsYXRpb247XG4gICAgICAgICAgICAvLyBEaWZmIHdpdGggcmVjb3JkZWQgY3VtdWxhdGl2ZSBtZW1vLlxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1bXVsYXRpdmVNZW1vU3RvcmFnZS5oYXMoYXR0cmlidXRlcywgaGFzaENvZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFzKCkgcmV0dXJuZWQgdHJ1ZSwgcHJldmlvdXMgaXMgcHJlc2VudC5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fY3VtdWxhdGl2ZU1lbW9TdG9yYWdlLmdldChhdHRyaWJ1dGVzLCBoYXNoQ29kZSk7XG4gICAgICAgICAgICAgICAgZGVsdGEgPSB0aGlzLl9hZ2dyZWdhdG9yLmRpZmYocHJldmlvdXMsIGFjY3VtdWxhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FyZGluYWxpdHkgbGltaXQgaXMgcmVhY2hlZCwgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VtdWxhdGl2ZU1lbW9TdG9yYWdlLnNpemUgPj0gdGhpcy5fY2FyZGluYWxpdHlMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gdGhpcy5fb3ZlcmZsb3dBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZSA9IHRoaXMuX292ZXJmbG93SGFzaENvZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdW11bGF0aXZlTWVtb1N0b3JhZ2UuaGFzKGF0dHJpYnV0ZXMsIGhhc2hDb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzKCkgcmV0dXJuZWQgdHJ1ZSwgcHJldmlvdXMgaXMgcHJlc2VudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX2N1bXVsYXRpdmVNZW1vU3RvcmFnZS5nZXQoYXR0cmlidXRlcywgaGFzaENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSB0aGlzLl9hZ2dyZWdhdG9yLmRpZmYocHJldmlvdXMsIGFjY3VtdWxhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNZXJnZSB3aXRoIHVuY29sbGVjdGVkIGFjdGl2ZSBkZWx0YS5cbiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5oYXMoYXR0cmlidXRlcywgaGFzaENvZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFzKCkgcmV0dXJuZWQgdHJ1ZSwgYWN0aXZlIGlzIHByZXNlbnQuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5nZXQoYXR0cmlidXRlcywgaGFzaENvZGUpO1xuICAgICAgICAgICAgICAgIGRlbHRhID0gdGhpcy5fYWdncmVnYXRvci5tZXJnZShhY3RpdmUsIGRlbHRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcmVjb3JkIGFuZCB0aGUgZGVsdGEgcmVjb3JkLlxuICAgICAgICAgICAgdGhpcy5fY3VtdWxhdGl2ZU1lbW9TdG9yYWdlLnNldChhdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb24sIGhhc2hDb2RlKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLnNldChhdHRyaWJ1dGVzLCBkZWx0YSwgaGFzaENvZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgZGVsdGEgbWV0cmljcy4gU3RhcnQgdGltZSBpcyB0aGUgd2hlbiBmaXJzdFxuICAgICAqIHRpbWUgZXZlbnQgY29sbGVjdGVkLlxuICAgICAqL1xuICAgIGNvbGxlY3QoKSB7XG4gICAgICAgIGNvbnN0IHVucmVwb3J0ZWREZWx0YSA9IHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlO1xuICAgICAgICB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZSA9IG5ldyBBdHRyaWJ1dGVIYXNoTWFwKCk7XG4gICAgICAgIHJldHVybiB1bnJlcG9ydGVkRGVsdGE7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGVsdGFNZXRyaWNQcm9jZXNzb3IuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQWdncmVnYXRpb25UZW1wb3JhbGl0eSB9IGZyb20gJy4uL2V4cG9ydC9BZ2dyZWdhdGlvblRlbXBvcmFsaXR5JztcbmltcG9ydCB7IEF0dHJpYnV0ZUhhc2hNYXAgfSBmcm9tICcuL0hhc2hNYXAnO1xuLyoqXG4gKiBJbnRlcm5hbCBpbnRlcmZhY2UuXG4gKlxuICogUHJvdmlkZXMgdW5pcXVlIHJlcG9ydGluZyBmb3IgZWFjaCBjb2xsZWN0b3IuIEFsbG93cyBzeW5jaHJvbm91cyBjb2xsZWN0aW9uXG4gKiBvZiBtZXRyaWNzIGFuZCByZXBvcnRzIGdpdmVuIHRlbXBvcmFsaXR5IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yIHtcbiAgICBfYWdncmVnYXRvcjtcbiAgICBfdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgX3JlcG9ydEhpc3RvcnkgPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3IoYWdncmVnYXRvciwgY29sbGVjdG9ySGFuZGxlcykge1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdG9yID0gYWdncmVnYXRvcjtcbiAgICAgICAgY29sbGVjdG9ySGFuZGxlcy5mb3JFYWNoKGhhbmRsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5zZXQoaGFuZGxlLCBbXSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgdGhlIHtAbGluayBNZXRyaWNEYXRhfSBzdHJlYW1zIHRvIHJlcG9ydCBhZ2FpbnN0IGEgc3BlY2lmaWMgTWV0cmljQ29sbGVjdG9yLlxuICAgICAqIEBwYXJhbSBjb2xsZWN0b3IgVGhlIGluZm9ybWF0aW9uIG9mIHRoZSBNZXRyaWNDb2xsZWN0b3IuXG4gICAgICogQHBhcmFtIGNvbGxlY3RvcnMgVGhlIHJlZ2lzdGVyZWQgY29sbGVjdG9ycy5cbiAgICAgKiBAcGFyYW0gaW5zdHJ1bWVudERlc2NyaXB0b3IgVGhlIGluc3RydW1lbnRhdGlvbiBkZXNjcmlwdG9yIHRoYXQgdGhlc2UgbWV0cmljcyBnZW5lcmF0ZWQgd2l0aC5cbiAgICAgKiBAcGFyYW0gY3VycmVudEFjY3VtdWxhdGlvbnMgVGhlIGN1cnJlbnQgYWNjdW11bGF0aW9uIG9mIG1ldHJpYyBkYXRhIGZyb20gaW5zdHJ1bWVudHMuXG4gICAgICogQHBhcmFtIGNvbGxlY3Rpb25UaW1lIFRoZSBjdXJyZW50IGNvbGxlY3Rpb24gdGltZXN0YW1wLlxuICAgICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgTWV0cmljRGF0YX0gcG9pbnRzIG9yIGBudWxsYC5cbiAgICAgKi9cbiAgICBidWlsZE1ldHJpY3MoY29sbGVjdG9yLCBpbnN0cnVtZW50RGVzY3JpcHRvciwgY3VycmVudEFjY3VtdWxhdGlvbnMsIGNvbGxlY3Rpb25UaW1lKSB7XG4gICAgICAgIHRoaXMuX3N0YXNoQWNjdW11bGF0aW9ucyhjdXJyZW50QWNjdW11bGF0aW9ucyk7XG4gICAgICAgIGNvbnN0IHVucmVwb3J0ZWRBY2N1bXVsYXRpb25zID0gdGhpcy5fZ2V0TWVyZ2VkVW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMoY29sbGVjdG9yKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHVucmVwb3J0ZWRBY2N1bXVsYXRpb25zO1xuICAgICAgICBsZXQgYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgLy8gQ2hlY2sgb3VyIGxhc3QgcmVwb3J0IHRpbWUuXG4gICAgICAgIGlmICh0aGlzLl9yZXBvcnRIaXN0b3J5Lmhhcyhjb2xsZWN0b3IpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMuX3JlcG9ydEhpc3RvcnkuZ2V0KGNvbGxlY3Rvcik7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29sbGVjdGlvblRpbWUgPSBsYXN0LmNvbGxlY3Rpb25UaW1lO1xuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IGxhc3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgIC8vIFVzZSBhZ2dyZWdhdGlvbiB0ZW1wb3JhbGl0eSArIGluc3RydW1lbnQgdG8gZGV0ZXJtaW5lIGlmIHdlIGRvIGEgbWVyZ2Ugb3IgYSBkaWZmIG9mXG4gICAgICAgICAgICAvLyBwcmV2aW91cy4gV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGZvdXIgc2NlbmFyaW9zOlxuICAgICAgICAgICAgLy8gMS4gQ3VtdWxhdGl2ZSBBZ2dyZWdhdGlvbiAodGVtcG9yYWxpdHkpICsgRGVsdGEgcmVjb3JkaW5nIChzeW5jIGluc3RydW1lbnQpLlxuICAgICAgICAgICAgLy8gICAgSGVyZSB3ZSBtZXJnZSB3aXRoIG91ciBsYXN0IHJlY29yZCB0byBnZXQgYSBjdW11bGF0aXZlIGFnZ3JlZ2F0aW9uLlxuICAgICAgICAgICAgLy8gMi4gQ3VtdWxhdGl2ZSBBZ2dyZWdhdGlvbiArIEN1bXVsYXRpdmUgcmVjb3JkaW5nIChhc3luYyBpbnN0cnVtZW50KS5cbiAgICAgICAgICAgIC8vICAgIEN1bXVsYXRpdmUgcmVjb3JkcyBhcmUgY29udmVydGVkIHRvIGRlbHRhIHJlY29yZGluZyB3aXRoIERlbHRhTWV0cmljUHJvY2Vzc29yLlxuICAgICAgICAgICAgLy8gICAgSGVyZSB3ZSBtZXJnZSB3aXRoIG91ciBsYXN0IHJlY29yZCB0byBnZXQgYSBjdW11bGF0aXZlIGFnZ3JlZ2F0aW9uLlxuICAgICAgICAgICAgLy8gMy4gRGVsdGEgQWdncmVnYXRpb24gKyBEZWx0YSByZWNvcmRpbmdcbiAgICAgICAgICAgIC8vICAgIENhbGlicmF0ZSB0aGUgc3RhcnRUaW1lIG9mIG1ldHJpYyBzdHJlYW1zIHRvIGJlIHRoZSByZWFkZXIncyBsYXN0Q29sbGVjdGlvblRpbWUuXG4gICAgICAgICAgICAvLyA0LiBEZWx0YSBBZ2dyZWdhdGlvbiArIEN1bXVsYXRpdmUgcmVjb3JkaW5nLlxuICAgICAgICAgICAgLy8gICAgQ3VtdWxhdGl2ZSByZWNvcmRzIGFyZSBjb252ZXJ0ZWQgdG8gZGVsdGEgcmVjb3JkaW5nIHdpdGggRGVsdGFNZXRyaWNQcm9jZXNzb3IuXG4gICAgICAgICAgICAvLyAgICBDYWxpYnJhdGUgdGhlIHN0YXJ0VGltZSBvZiBtZXRyaWMgc3RyZWFtcyB0byBiZSB0aGUgcmVhZGVyJ3MgbGFzdENvbGxlY3Rpb25UaW1lLlxuICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPT09IEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuQ1VNVUxBVElWRSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50IGRlbHRhIHJlY29yZGluZyBnZXRzIG1lcmdlZCBpbnRvIHRoZSBwcmV2aW91cyBjdW11bGF0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBuZXh0IGN1bXVsYXRpdmUgcmVjb3JkaW5nLlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yLm1lcmdlKGxhc3QuYWNjdW11bGF0aW9ucywgdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMsIHRoaXMuX2FnZ3JlZ2F0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IuY2FsaWJyYXRlU3RhcnRUaW1lKGxhc3QuYWNjdW11bGF0aW9ucywgdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMsIGxhc3RDb2xsZWN0aW9uVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBDYWxsIGludG8gdXNlciBjb2RlIHRvIHNlbGVjdCBhZ2dyZWdhdGlvbiB0ZW1wb3JhbGl0eSBmb3IgdGhlIGluc3RydW1lbnQuXG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gY29sbGVjdG9yLnNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudERlc2NyaXB0b3IudHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIGxhc3QgcmVwb3J0ZWQgKGN1bXVsYXRpdmUpIGFjY3VtdWxhdGlvbi5cbiAgICAgICAgdGhpcy5fcmVwb3J0SGlzdG9yeS5zZXQoY29sbGVjdG9yLCB7XG4gICAgICAgICAgICBhY2N1bXVsYXRpb25zOiByZXN1bHQsXG4gICAgICAgICAgICBjb2xsZWN0aW9uVGltZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBhY2N1bXVsYXRpb25SZWNvcmRzID0gQXR0cmlidXRlc01hcFRvQWNjdW11bGF0aW9uUmVjb3JkcyhyZXN1bHQpO1xuICAgICAgICAvLyBkbyBub3QgY29udmVydCB0byBtZXRyaWMgZGF0YSBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbnZlcnQuXG4gICAgICAgIGlmIChhY2N1bXVsYXRpb25SZWNvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRvci50b01ldHJpY0RhdGEoaW5zdHJ1bWVudERlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvblJlY29yZHMsIFxuICAgICAgICAvKiBlbmRUaW1lICovIGNvbGxlY3Rpb25UaW1lKTtcbiAgICB9XG4gICAgX3N0YXNoQWNjdW11bGF0aW9ucyhjdXJyZW50QWNjdW11bGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRDb2xsZWN0b3JzID0gdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMua2V5cygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3RvciBvZiByZWdpc3RlcmVkQ29sbGVjdG9ycykge1xuICAgICAgICAgICAgbGV0IHN0YXNoID0gdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMuZ2V0KGNvbGxlY3Rvcik7XG4gICAgICAgICAgICBpZiAoc3Rhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXNoID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMuc2V0KGNvbGxlY3Rvciwgc3Rhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Rhc2gucHVzaChjdXJyZW50QWNjdW11bGF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0TWVyZ2VkVW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMoY29sbGVjdG9yKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgICAgICBjb25zdCB1bnJlcG9ydGVkTGlzdCA9IHRoaXMuX3VucmVwb3J0ZWRBY2N1bXVsYXRpb25zLmdldChjb2xsZWN0b3IpO1xuICAgICAgICB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5zZXQoY29sbGVjdG9yLCBbXSk7XG4gICAgICAgIGlmICh1bnJlcG9ydGVkTGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgdW5yZXBvcnRlZExpc3QpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yLm1lcmdlKHJlc3VsdCwgaXQsIHRoaXMuX2FnZ3JlZ2F0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZShsYXN0LCBjdXJyZW50LCBhZ2dyZWdhdG9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGxhc3Q7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gY3VycmVudC5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAobmV4dC5kb25lICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCByZWNvcmQsIGhhc2hdID0gbmV4dC52YWx1ZTtcbiAgICAgICAgICAgIGlmIChsYXN0LmhhcyhrZXksIGhhc2gpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEFjY3VtdWxhdGlvbiA9IGxhc3QuZ2V0KGtleSwgaGFzaCk7XG4gICAgICAgICAgICAgICAgLy8gbGFzdC5oYXMoKSByZXR1cm5lZCB0cnVlLCBsYXN0QWNjdW11bGF0aW9uIGlzIHByZXNlbnQuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBhY2N1bXVsYXRpb24gPSBhZ2dyZWdhdG9yLm1lcmdlKGxhc3RBY2N1bXVsYXRpb24sIHJlY29yZCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIGFjY3VtdWxhdGlvbiwgaGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgcmVjb3JkLCBoYXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsaWJyYXRlIHRoZSByZXBvcnRlZCBtZXRyaWMgc3RyZWFtcycgc3RhcnRUaW1lIHRvIGxhc3RDb2xsZWN0aW9uVGltZS4gTGVhdmVzXG4gICAgICogdGhlIG5ldyBzdHJlYW0gdG8gYmUgdGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gdGltZSB1bmNoYW5nZWQuXG4gICAgICovXG4gICAgc3RhdGljIGNhbGlicmF0ZVN0YXJ0VGltZShsYXN0LCBjdXJyZW50LCBsYXN0Q29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBoYXNoXSBvZiBsYXN0LmtleXMoKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEFjY3VtdWxhdGlvbiA9IGN1cnJlbnQuZ2V0KGtleSwgaGFzaCk7XG4gICAgICAgICAgICBjdXJyZW50QWNjdW11bGF0aW9uPy5zZXRTdGFydFRpbWUobGFzdENvbGxlY3Rpb25UaW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG59XG4vLyBUeXBlU2NyaXB0IGNvbXBsYWlucyBhYm91dCBjb252ZXJ0aW5nIDMgZWxlbWVudHMgdHVwbGUgdG8gQWNjdW11bGF0aW9uUmVjb3JkPFQ+LlxuZnVuY3Rpb24gQXR0cmlidXRlc01hcFRvQWNjdW11bGF0aW9uUmVjb3JkcyhtYXApIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShtYXAuZW50cmllcygpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRlbXBvcmFsTWV0cmljUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IE1ldHJpY1N0b3JhZ2UgfSBmcm9tICcuL01ldHJpY1N0b3JhZ2UnO1xuaW1wb3J0IHsgRGVsdGFNZXRyaWNQcm9jZXNzb3IgfSBmcm9tICcuL0RlbHRhTWV0cmljUHJvY2Vzc29yJztcbmltcG9ydCB7IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yIH0gZnJvbSAnLi9UZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvcic7XG5pbXBvcnQgeyBBdHRyaWJ1dGVIYXNoTWFwIH0gZnJvbSAnLi9IYXNoTWFwJztcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICpcbiAqIFN0b3JlcyBhbmQgYWdncmVnYXRlcyB7QGxpbmsgTWV0cmljRGF0YX0gZm9yIGFzeW5jaHJvbm91cyBpbnN0cnVtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzeW5jTWV0cmljU3RvcmFnZSBleHRlbmRzIE1ldHJpY1N0b3JhZ2Uge1xuICAgIF9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgX2RlbHRhTWV0cmljU3RvcmFnZTtcbiAgICBfdGVtcG9yYWxNZXRyaWNTdG9yYWdlO1xuICAgIF9hdHRyaWJ1dGVzUHJvY2Vzc29yO1xuICAgIGNvbnN0cnVjdG9yKF9pbnN0cnVtZW50RGVzY3JpcHRvciwgYWdncmVnYXRvciwgYXR0cmlidXRlc1Byb2Nlc3NvciwgY29sbGVjdG9ySGFuZGxlcywgYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KSB7XG4gICAgICAgIHN1cGVyKF9pbnN0cnVtZW50RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA9IGFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICAgICAgdGhpcy5fZGVsdGFNZXRyaWNTdG9yYWdlID0gbmV3IERlbHRhTWV0cmljUHJvY2Vzc29yKGFnZ3JlZ2F0b3IsIHRoaXMuX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCk7XG4gICAgICAgIHRoaXMuX3RlbXBvcmFsTWV0cmljU3RvcmFnZSA9IG5ldyBUZW1wb3JhbE1ldHJpY1Byb2Nlc3NvcihhZ2dyZWdhdG9yLCBjb2xsZWN0b3JIYW5kbGVzKTtcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlc1Byb2Nlc3NvciA9IGF0dHJpYnV0ZXNQcm9jZXNzb3I7XG4gICAgfVxuICAgIHJlY29yZChtZWFzdXJlbWVudHMsIG9ic2VydmF0aW9uVGltZSkge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgICAgICBBcnJheS5mcm9tKG1lYXN1cmVtZW50cy5lbnRyaWVzKCkpLmZvckVhY2goKFthdHRyaWJ1dGVzLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3NlZC5zZXQodGhpcy5fYXR0cmlidXRlc1Byb2Nlc3Nvci5wcm9jZXNzKGF0dHJpYnV0ZXMpLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UuYmF0Y2hDdW11bGF0ZShwcm9jZXNzZWQsIG9ic2VydmF0aW9uVGltZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbGxlY3RzIHRoZSBtZXRyaWNzIGZyb20gdGhpcyBzdG9yYWdlLiBUaGUgT2JzZXJ2YWJsZUNhbGxiYWNrIGlzIGludm9rZWRcbiAgICAgKiBkdXJpbmcgdGhlIGNvbGxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGlzIGlzIGEgc3RhdGVmdWwgb3BlcmF0aW9uIGFuZCBtYXkgcmVzZXQgYW55IGludGVydmFsLXJlbGF0ZWRcbiAgICAgKiBzdGF0ZSBmb3IgdGhlIE1ldHJpY0NvbGxlY3Rvci5cbiAgICAgKi9cbiAgICBjb2xsZWN0KGNvbGxlY3RvciwgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgY29uc3QgYWNjdW11bGF0aW9ucyA9IHRoaXMuX2RlbHRhTWV0cmljU3RvcmFnZS5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wb3JhbE1ldHJpY1N0b3JhZ2UuYnVpbGRNZXRyaWNzKGNvbGxlY3RvciwgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IsIGFjY3VtdWxhdGlvbnMsIGNvbGxlY3Rpb25UaW1lKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY01ldHJpY1N0b3JhZ2UuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluY29tcGF0aWJpbGl0eURldGFpbHMoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIGxldCBpbmNvbXBhdGliaWxpdHkgPSAnJztcbiAgICBpZiAoZXhpc3RpbmcudW5pdCAhPT0gb3RoZXJEZXNjcmlwdG9yLnVuaXQpIHtcbiAgICAgICAgaW5jb21wYXRpYmlsaXR5ICs9IGBcXHQtIFVuaXQgJyR7ZXhpc3RpbmcudW5pdH0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci51bml0fSdcXG5gO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcudHlwZSAhPT0gb3RoZXJEZXNjcmlwdG9yLnR5cGUpIHtcbiAgICAgICAgaW5jb21wYXRpYmlsaXR5ICs9IGBcXHQtIFR5cGUgJyR7ZXhpc3RpbmcudHlwZX0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci50eXBlfSdcXG5gO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcudmFsdWVUeXBlICE9PSBvdGhlckRlc2NyaXB0b3IudmFsdWVUeXBlKSB7XG4gICAgICAgIGluY29tcGF0aWJpbGl0eSArPSBgXFx0LSBWYWx1ZSBUeXBlICcke2V4aXN0aW5nLnZhbHVlVHlwZX0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci52YWx1ZVR5cGV9J1xcbmA7XG4gICAgfVxuICAgIGlmIChleGlzdGluZy5kZXNjcmlwdGlvbiAhPT0gb3RoZXJEZXNjcmlwdG9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGluY29tcGF0aWJpbGl0eSArPSBgXFx0LSBEZXNjcmlwdGlvbiAnJHtleGlzdGluZy5kZXNjcmlwdGlvbn0nIGRvZXMgbm90IG1hdGNoICcke290aGVyRGVzY3JpcHRvci5kZXNjcmlwdGlvbn0nXFxuYDtcbiAgICB9XG4gICAgcmV0dXJuIGluY29tcGF0aWJpbGl0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZVR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBgXFx0LSB1c2UgdmFsdWVUeXBlICcke2V4aXN0aW5nLnZhbHVlVHlwZX0nIG9uIGluc3RydW1lbnQgY3JlYXRpb24gb3IgdXNlIGFuIGluc3RydW1lbnQgbmFtZSBvdGhlciB0aGFuICcke290aGVyRGVzY3JpcHRvci5uYW1lfSdgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBgXFx0LSB1c2UgdW5pdCAnJHtleGlzdGluZy51bml0fScgb24gaW5zdHJ1bWVudCBjcmVhdGlvbiBvciB1c2UgYW4gaW5zdHJ1bWVudCBuYW1lIG90aGVyIHRoYW4gJyR7b3RoZXJEZXNjcmlwdG9yLm5hbWV9J2A7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbmZsaWN0UmVzb2x1dGlvblJlY2lwZShleGlzdGluZywgb3RoZXJEZXNjcmlwdG9yKSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB7XG4gICAgICAgIG5hbWU6IG90aGVyRGVzY3JpcHRvci5uYW1lLFxuICAgICAgICB0eXBlOiBvdGhlckRlc2NyaXB0b3IudHlwZSxcbiAgICAgICAgdW5pdDogb3RoZXJEZXNjcmlwdG9yLnVuaXQsXG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3RvclN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNlbGVjdG9yKTtcbiAgICByZXR1cm4gYFxcdC0gY3JlYXRlIGEgbmV3IHZpZXcgd2l0aCBhIG5hbWUgb3RoZXIgdGhhbiAnJHtleGlzdGluZy5uYW1lfScgYW5kIEluc3RydW1lbnRTZWxlY3RvciAnJHtzZWxlY3RvclN0cmluZ30nYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdGlvblJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcikge1xuICAgIGNvbnN0IHNlbGVjdG9yID0ge1xuICAgICAgICBuYW1lOiBvdGhlckRlc2NyaXB0b3IubmFtZSxcbiAgICAgICAgdHlwZTogb3RoZXJEZXNjcmlwdG9yLnR5cGUsXG4gICAgICAgIHVuaXQ6IG90aGVyRGVzY3JpcHRvci51bml0LFxuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0b3JTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzZWxlY3Rvcik7XG4gICAgcmV0dXJuIGBcXHQtIGNyZWF0ZSBhIG5ldyB2aWV3IHdpdGggYSBuYW1lIG90aGVyIHRoYW4gJyR7ZXhpc3RpbmcubmFtZX0nIGFuZCBJbnN0cnVtZW50U2VsZWN0b3IgJyR7c2VsZWN0b3JTdHJpbmd9J1xuICAgIFxcdC0gT1IgLSBjcmVhdGUgYSBuZXcgdmlldyB3aXRoIHRoZSBuYW1lICR7ZXhpc3RpbmcubmFtZX0gYW5kIGRlc2NyaXB0aW9uICcke2V4aXN0aW5nLmRlc2NyaXB0aW9ufScgYW5kIEluc3RydW1lbnRTZWxlY3RvciAke3NlbGVjdG9yU3RyaW5nfVxuICAgIFxcdC0gT1IgLSBjcmVhdGUgYSBuZXcgdmlldyB3aXRoIHRoZSBuYW1lICR7b3RoZXJEZXNjcmlwdG9yLm5hbWV9IGFuZCBkZXNjcmlwdGlvbiAnJHtleGlzdGluZy5kZXNjcmlwdGlvbn0nIGFuZCBJbnN0cnVtZW50U2VsZWN0b3IgJHtzZWxlY3RvclN0cmluZ31gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZShleGlzdGluZywgb3RoZXJEZXNjcmlwdG9yKSB7XG4gICAgLy8gQ29uZmxpY3RzIHRoYXQgY2Fubm90IGJlIHNvbHZlZCB2aWEgdmlld3MuXG4gICAgaWYgKGV4aXN0aW5nLnZhbHVlVHlwZSAhPT0gb3RoZXJEZXNjcmlwdG9yLnZhbHVlVHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0VmFsdWVUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcudW5pdCAhPT0gb3RoZXJEZXNjcmlwdG9yLnVuaXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFVuaXRDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8vIENvbmZsaWN0cyB0aGF0IGNhbiBiZSBzb2x2ZWQgdmlhIHZpZXdzLlxuICAgIGlmIChleGlzdGluZy50eXBlICE9PSBvdGhlckRlc2NyaXB0b3IudHlwZSkge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBzb2x2ZSBwb3NzaWJsZSBkZXNjcmlwdGlvbiBjb25mbGljdHMuXG4gICAgICAgIHJldHVybiBnZXRUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcuZGVzY3JpcHRpb24gIT09IG90aGVyRGVzY3JpcHRvci5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gZ2V0RGVzY3JpcHRpb25SZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpc3RyYXRpb25Db25mbGljdHMuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgaXNEZXNjcmlwdG9yQ29tcGF0aWJsZVdpdGgsIH0gZnJvbSAnLi4vSW5zdHJ1bWVudERlc2NyaXB0b3InO1xuaW1wb3J0ICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBnZXRDb25mbGljdFJlc29sdXRpb25SZWNpcGUsIGdldEluY29tcGF0aWJpbGl0eURldGFpbHMsIH0gZnJvbSAnLi4vdmlldy9SZWdpc3RyYXRpb25Db25mbGljdHMnO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyBmb3Igc3RvcmluZyB7QGxpbmsgTWV0cmljU3RvcmFnZX1cbiAqL1xuZXhwb3J0IGNsYXNzIE1ldHJpY1N0b3JhZ2VSZWdpc3RyeSB7XG4gICAgX3NoYXJlZFJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgIF9wZXJDb2xsZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1ldHJpY1N0b3JhZ2VSZWdpc3RyeSgpO1xuICAgIH1cbiAgICBnZXRTdG9yYWdlcyhjb2xsZWN0b3IpIHtcbiAgICAgICAgbGV0IHN0b3JhZ2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbWV0cmljU3RvcmFnZXMgb2YgdGhpcy5fc2hhcmVkUmVnaXN0cnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VzID0gc3RvcmFnZXMuY29uY2F0KG1ldHJpY1N0b3JhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwZXJDb2xsZWN0b3JTdG9yYWdlcyA9IHRoaXMuX3BlckNvbGxlY3RvclJlZ2lzdHJ5LmdldChjb2xsZWN0b3IpO1xuICAgICAgICBpZiAocGVyQ29sbGVjdG9yU3RvcmFnZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZXRyaWNTdG9yYWdlcyBvZiBwZXJDb2xsZWN0b3JTdG9yYWdlcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2VzID0gc3RvcmFnZXMuY29uY2F0KG1ldHJpY1N0b3JhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmFnZXM7XG4gICAgfVxuICAgIHJlZ2lzdGVyKHN0b3JhZ2UpIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJTdG9yYWdlKHN0b3JhZ2UsIHRoaXMuX3NoYXJlZFJlZ2lzdHJ5KTtcbiAgICB9XG4gICAgcmVnaXN0ZXJGb3JDb2xsZWN0b3IoY29sbGVjdG9yLCBzdG9yYWdlKSB7XG4gICAgICAgIGxldCBzdG9yYWdlTWFwID0gdGhpcy5fcGVyQ29sbGVjdG9yUmVnaXN0cnkuZ2V0KGNvbGxlY3Rvcik7XG4gICAgICAgIGlmIChzdG9yYWdlTWFwID09IG51bGwpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLl9wZXJDb2xsZWN0b3JSZWdpc3RyeS5zZXQoY29sbGVjdG9yLCBzdG9yYWdlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWdpc3RlclN0b3JhZ2Uoc3RvcmFnZSwgc3RvcmFnZU1hcCk7XG4gICAgfVxuICAgIGZpbmRPclVwZGF0ZUNvbXBhdGlibGVTdG9yYWdlKGV4cGVjdGVkRGVzY3JpcHRvcikge1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX3NoYXJlZFJlZ2lzdHJ5LmdldChleHBlY3RlZERlc2NyaXB0b3IubmFtZSk7XG4gICAgICAgIGlmIChzdG9yYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZGVzY3JpcHRvciBpcyBjb21wYXRpYmxlLCB0aGUgdHlwZSBvZiB0aGVpciBtZXRyaWMgc3RvcmFnZVxuICAgICAgICAvLyAoZWl0aGVyIFN5bmNNZXRyaWNTdG9yYWdlIG9yIEFzeW5jTWV0cmljU3RvcmFnZSkgbXVzdCBiZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE9yVXBkYXRlQ29tcGF0aWJsZVN0b3JhZ2UoZXhwZWN0ZWREZXNjcmlwdG9yLCBzdG9yYWdlcyk7XG4gICAgfVxuICAgIGZpbmRPclVwZGF0ZUNvbXBhdGlibGVDb2xsZWN0b3JTdG9yYWdlKGNvbGxlY3RvciwgZXhwZWN0ZWREZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VNYXAgPSB0aGlzLl9wZXJDb2xsZWN0b3JSZWdpc3RyeS5nZXQoY29sbGVjdG9yKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSBzdG9yYWdlTWFwLmdldChleHBlY3RlZERlc2NyaXB0b3IubmFtZSk7XG4gICAgICAgIGlmIChzdG9yYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZGVzY3JpcHRvciBpcyBjb21wYXRpYmxlLCB0aGUgdHlwZSBvZiB0aGVpciBtZXRyaWMgc3RvcmFnZVxuICAgICAgICAvLyAoZWl0aGVyIFN5bmNNZXRyaWNTdG9yYWdlIG9yIEFzeW5jTWV0cmljU3RvcmFnZSkgbXVzdCBiZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE9yVXBkYXRlQ29tcGF0aWJsZVN0b3JhZ2UoZXhwZWN0ZWREZXNjcmlwdG9yLCBzdG9yYWdlcyk7XG4gICAgfVxuICAgIF9yZWdpc3RlclN0b3JhZ2Uoc3RvcmFnZSwgc3RvcmFnZU1hcCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gc3RvcmFnZS5nZXRJbnN0cnVtZW50RGVzY3JpcHRvcigpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHN0b3JhZ2VNYXAuZ2V0KGRlc2NyaXB0b3IubmFtZSk7XG4gICAgICAgIGlmIChzdG9yYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdG9yYWdlTWFwLnNldChkZXNjcmlwdG9yLm5hbWUsIFtzdG9yYWdlXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RvcmFnZXMucHVzaChzdG9yYWdlKTtcbiAgICB9XG4gICAgX2ZpbmRPclVwZGF0ZUNvbXBhdGlibGVTdG9yYWdlKGV4cGVjdGVkRGVzY3JpcHRvciwgZXhpc3RpbmdTdG9yYWdlcykge1xuICAgICAgICBsZXQgY29tcGF0aWJsZVN0b3JhZ2UgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGV4aXN0aW5nU3RvcmFnZSBvZiBleGlzdGluZ1N0b3JhZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0Rlc2NyaXB0b3IgPSBleGlzdGluZ1N0b3JhZ2UuZ2V0SW5zdHJ1bWVudERlc2NyaXB0b3IoKTtcbiAgICAgICAgICAgIGlmIChpc0Rlc2NyaXB0b3JDb21wYXRpYmxlV2l0aChleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGxvbmdlciBkZXNjcmlwdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaC5cbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmRlc2NyaXB0aW9uICE9PSBleHBlY3RlZERlc2NyaXB0b3IuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkRGVzY3JpcHRvci5kZXNjcmlwdGlvbi5sZW5ndGggPlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLmRlc2NyaXB0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdTdG9yYWdlLnVwZGF0ZURlc2NyaXB0aW9uKGV4cGVjdGVkRGVzY3JpcHRvci5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXBpLmRpYWcud2FybignQSB2aWV3IG9yIGluc3RydW1lbnQgd2l0aCB0aGUgbmFtZSAnLCBleHBlY3RlZERlc2NyaXB0b3IubmFtZSwgJyBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQsIGJ1dCBoYXMgYSBkaWZmZXJlbnQgZGVzY3JpcHRpb24gYW5kIGlzIGluY29tcGF0aWJsZSB3aXRoIGFub3RoZXIgcmVnaXN0ZXJlZCB2aWV3LlxcbicsICdEZXRhaWxzOlxcbicsIGdldEluY29tcGF0aWJpbGl0eURldGFpbHMoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpLCAnVGhlIGxvbmdlciBkZXNjcmlwdGlvbiB3aWxsIGJlIHVzZWQuXFxuVG8gcmVzb2x2ZSB0aGUgY29uZmxpY3Q6JywgZ2V0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nRGVzY3JpcHRvciwgZXhwZWN0ZWREZXNjcmlwdG9yKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0b3JhZ2UgaXMgZnVsbHkgY29tcGF0aWJsZS4gVGhlcmUgd2lsbCBuZXZlciBiZSBtb3JlIHRoYW4gb25lIHByZS1leGlzdGluZyBmdWxseSBjb21wYXRpYmxlIHN0b3JhZ2UuXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVN0b3JhZ2UgPSBleGlzdGluZ1N0b3JhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gU0hPVUxEIHdhcm4gYWJvdXQgZHVwbGljYXRlIGluc3RydW1lbnQgcmVnaXN0cmF0aW9uXG4gICAgICAgICAgICAgICAgLy8gY29uZmxpY3RzIGFmdGVyIGFwcGx5aW5nIFZpZXcgY29uZmlndXJhdGlvbi5cbiAgICAgICAgICAgICAgICBhcGkuZGlhZy53YXJuKCdBIHZpZXcgb3IgaW5zdHJ1bWVudCB3aXRoIHRoZSBuYW1lICcsIGV4cGVjdGVkRGVzY3JpcHRvci5uYW1lLCAnIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCBhbmQgaXMgaW5jb21wYXRpYmxlIHdpdGggYW5vdGhlciByZWdpc3RlcmVkIHZpZXcuXFxuJywgJ0RldGFpbHM6XFxuJywgZ2V0SW5jb21wYXRpYmlsaXR5RGV0YWlscyhleGlzdGluZ0Rlc2NyaXB0b3IsIGV4cGVjdGVkRGVzY3JpcHRvciksICdUbyByZXNvbHZlIHRoZSBjb25mbGljdDpcXG4nLCBnZXRDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcGF0aWJsZVN0b3JhZ2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0cmljU3RvcmFnZVJlZ2lzdHJ5LmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY2xhc3MgTXVsdGlNZXRyaWNTdG9yYWdlIHtcbiAgICBfYmFja2luZ1N0b3JhZ2VzO1xuICAgIGNvbnN0cnVjdG9yKGJhY2tpbmdTdG9yYWdlcykge1xuICAgICAgICB0aGlzLl9iYWNraW5nU3RvcmFnZXMgPSBiYWNraW5nU3RvcmFnZXM7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY29udGV4dCwgcmVjb3JkVGltZSkge1xuICAgICAgICB0aGlzLl9iYWNraW5nU3RvcmFnZXMuZm9yRWFjaChpdCA9PiB7XG4gICAgICAgICAgICBpdC5yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGNvbnRleHQsIHJlY29yZFRpbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NdWx0aVdyaXRhYmxlTWV0cmljU3RvcmFnZS5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBkaWFnLCBWYWx1ZVR5cGUsIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IEF0dHJpYnV0ZUhhc2hNYXAgfSBmcm9tICcuL3N0YXRlL0hhc2hNYXAnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlSW5zdHJ1bWVudCB9IGZyb20gJy4vSW5zdHJ1bWVudHMnO1xuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgT2JzZXJ2YWJsZVJlc3VsdH0gaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZVJlc3VsdEltcGwge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9idWZmZXIgPSBuZXcgQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgIF9pbnN0cnVtZW50TmFtZTtcbiAgICBfdmFsdWVUeXBlO1xuICAgIGNvbnN0cnVjdG9yKGluc3RydW1lbnROYW1lLCB2YWx1ZVR5cGUpIHtcbiAgICAgICAgdGhpcy5faW5zdHJ1bWVudE5hbWUgPSBpbnN0cnVtZW50TmFtZTtcbiAgICAgICAgdGhpcy5fdmFsdWVUeXBlID0gdmFsdWVUeXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnNlcnZlIGEgbWVhc3VyZW1lbnQgb2YgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcy5cbiAgICAgKi9cbiAgICBvYnNlcnZlKHZhbHVlLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGRpYWcud2Fybihgbm9uLW51bWJlciB2YWx1ZSBwcm92aWRlZCB0byBtZXRyaWMgJHt0aGlzLl9pbnN0cnVtZW50TmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlVHlwZSA9PT0gVmFsdWVUeXBlLklOVCAmJiAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRpYWcud2FybihgSU5UIHZhbHVlIHR5cGUgY2Fubm90IGFjY2VwdCBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZvciAke3RoaXMuX2luc3RydW1lbnROYW1lfSwgaWdub3JpbmcgdGhlIGZyYWN0aW9uYWwgZGlnaXRzLmApO1xuICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnRydW5jKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBub24tZmluaXRlIHZhbHVlcy5cbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYnVmZmVyLnNldChhdHRyaWJ1dGVzLCB2YWx1ZSk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2t9IGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhdGNoT2JzZXJ2YWJsZVJlc3VsdEltcGwge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9idWZmZXIgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogT2JzZXJ2ZSBhIG1lYXN1cmVtZW50IG9mIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgb2JzZXJ2ZShtZXRyaWMsIHZhbHVlLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICAgICAgaWYgKCFpc09ic2VydmFibGVJbnN0cnVtZW50KG1ldHJpYykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFwID0gdGhpcy5fYnVmZmVyLmdldChtZXRyaWMpO1xuICAgICAgICBpZiAobWFwID09IG51bGwpIHtcbiAgICAgICAgICAgIG1hcCA9IG5ldyBBdHRyaWJ1dGVIYXNoTWFwKCk7XG4gICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KG1ldHJpYywgbWFwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZGlhZy53YXJuKGBub24tbnVtYmVyIHZhbHVlIHByb3ZpZGVkIHRvIG1ldHJpYyAke21ldHJpYy5fZGVzY3JpcHRvci5uYW1lfTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0cmljLl9kZXNjcmlwdG9yLnZhbHVlVHlwZSA9PT0gVmFsdWVUeXBlLklOVCAmJlxuICAgICAgICAgICAgIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICBkaWFnLndhcm4oYElOVCB2YWx1ZSB0eXBlIGNhbm5vdCBhY2NlcHQgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBmb3IgJHttZXRyaWMuX2Rlc2NyaXB0b3IubmFtZX0sIGlnbm9yaW5nIHRoZSBmcmFjdGlvbmFsIGRpZ2l0cy5gKTtcbiAgICAgICAgICAgIHZhbHVlID0gTWF0aC50cnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICAvLyBpZ25vcmUgbm9uLWZpbml0ZSB2YWx1ZXMuXG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1hcC5zZXQoYXR0cmlidXRlcywgdmFsdWUpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGVSZXN1bHQuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgZGlhZywgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlSW5zdHJ1bWVudCB9IGZyb20gJy4uL0luc3RydW1lbnRzJztcbmltcG9ydCB7IEJhdGNoT2JzZXJ2YWJsZVJlc3VsdEltcGwsIE9ic2VydmFibGVSZXN1bHRJbXBsLCB9IGZyb20gJy4uL09ic2VydmFibGVSZXN1bHQnO1xuaW1wb3J0IHsgY2FsbFdpdGhUaW1lb3V0LCBQcm9taXNlQWxsU2V0dGxlZCwgaXNQcm9taXNlQWxsU2V0dGxlZFJlamVjdGlvblJlc3VsdCwgc2V0RXF1YWxzLCB9IGZyb20gJy4uL3V0aWxzJztcbi8qKlxuICogQW4gaW50ZXJuYWwgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyBPYnNlcnZhYmxlQ2FsbGJhY2tzLlxuICpcbiAqIEV2ZXJ5IHJlZ2lzdGVyZWQgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIGEgc2V0IG9mIGluc3RydW1lbnRzIGFyZSBiZSBldmFsdWF0ZWRcbiAqIGV4YWN0bHkgb25jZSBkdXJpbmcgY29sbGVjdGlvbiBwcmlvciB0byByZWFkaW5nIGRhdGEgZm9yIHRoYXQgaW5zdHJ1bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVSZWdpc3RyeSB7XG4gICAgX2NhbGxiYWNrcyA9IFtdO1xuICAgIF9iYXRjaENhbGxiYWNrcyA9IFtdO1xuICAgIGFkZENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudCk7XG4gICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKHsgY2FsbGJhY2ssIGluc3RydW1lbnQgfSk7XG4gICAgfVxuICAgIHJlbW92ZUNhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudCk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgICBhZGRCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50cykge1xuICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgdW5pcXVlIGluc3RydW1lbnRzLlxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlSW5zdHJ1bWVudHMgPSBuZXcgU2V0KGluc3RydW1lbnRzLmZpbHRlcihpc09ic2VydmFibGVJbnN0cnVtZW50KSk7XG4gICAgICAgIGlmIChvYnNlcnZhYmxlSW5zdHJ1bWVudHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgZGlhZy5lcnJvcignQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2sgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB2YWxpZCBpbnN0cnVtZW50cycsIGluc3RydW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9maW5kQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZUluc3RydW1lbnRzKTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYmF0Y2hDYWxsYmFja3MucHVzaCh7IGNhbGxiYWNrLCBpbnN0cnVtZW50czogb2JzZXJ2YWJsZUluc3RydW1lbnRzIH0pO1xuICAgIH1cbiAgICByZW1vdmVCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50cykge1xuICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgdW5pcXVlIGluc3RydW1lbnRzLlxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlSW5zdHJ1bWVudHMgPSBuZXcgU2V0KGluc3RydW1lbnRzLmZpbHRlcihpc09ic2VydmFibGVJbnN0cnVtZW50KSk7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBvYnNlcnZhYmxlSW5zdHJ1bWVudHMpO1xuICAgICAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JhdGNoQ2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhIHByb21pc2Ugb2YgcmVqZWN0ZWQgcmVhc29ucyBmb3IgaW52b2tpbmcgY2FsbGJhY2tzLlxuICAgICAqL1xuICAgIGFzeW5jIG9ic2VydmUoY29sbGVjdGlvblRpbWUsIHRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tGdXR1cmVzID0gdGhpcy5fb2JzZXJ2ZUNhbGxiYWNrcyhjb2xsZWN0aW9uVGltZSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgIGNvbnN0IGJhdGNoQ2FsbGJhY2tGdXR1cmVzID0gdGhpcy5fb2JzZXJ2ZUJhdGNoQ2FsbGJhY2tzKGNvbGxlY3Rpb25UaW1lLCB0aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2VBbGxTZXR0bGVkKFtcbiAgICAgICAgICAgIC4uLmNhbGxiYWNrRnV0dXJlcyxcbiAgICAgICAgICAgIC4uLmJhdGNoQ2FsbGJhY2tGdXR1cmVzLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgcmVqZWN0aW9ucyA9IHJlc3VsdHNcbiAgICAgICAgICAgIC5maWx0ZXIoaXNQcm9taXNlQWxsU2V0dGxlZFJlamVjdGlvblJlc3VsdClcbiAgICAgICAgICAgIC5tYXAoaXQgPT4gaXQucmVhc29uKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdGlvbnM7XG4gICAgfVxuICAgIF9vYnNlcnZlQ2FsbGJhY2tzKG9ic2VydmF0aW9uVGltZSwgdGltZW91dE1pbGxpcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzLm1hcChhc3luYyAoeyBjYWxsYmFjaywgaW5zdHJ1bWVudCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlUmVzdWx0ID0gbmV3IE9ic2VydmFibGVSZXN1bHRJbXBsKGluc3RydW1lbnQuX2Rlc2NyaXB0b3IubmFtZSwgaW5zdHJ1bWVudC5fZGVzY3JpcHRvci52YWx1ZVR5cGUpO1xuICAgICAgICAgICAgbGV0IGNhbGxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNhbGxiYWNrKG9ic2VydmFibGVSZXN1bHQpKTtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0TWlsbGlzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjYWxsUHJvbWlzZSA9IGNhbGxXaXRoVGltZW91dChjYWxsUHJvbWlzZSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBjYWxsUHJvbWlzZTtcbiAgICAgICAgICAgIGluc3RydW1lbnQuX21ldHJpY1N0b3JhZ2VzLmZvckVhY2gobWV0cmljU3RvcmFnZSA9PiB7XG4gICAgICAgICAgICAgICAgbWV0cmljU3RvcmFnZS5yZWNvcmQob2JzZXJ2YWJsZVJlc3VsdC5fYnVmZmVyLCBvYnNlcnZhdGlvblRpbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfb2JzZXJ2ZUJhdGNoQ2FsbGJhY2tzKG9ic2VydmF0aW9uVGltZSwgdGltZW91dE1pbGxpcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmF0Y2hDYWxsYmFja3MubWFwKGFzeW5jICh7IGNhbGxiYWNrLCBpbnN0cnVtZW50cyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlUmVzdWx0ID0gbmV3IEJhdGNoT2JzZXJ2YWJsZVJlc3VsdEltcGwoKTtcbiAgICAgICAgICAgIGxldCBjYWxsUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjYWxsYmFjayhvYnNlcnZhYmxlUmVzdWx0KSk7XG4gICAgICAgICAgICBpZiAodGltZW91dE1pbGxpcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2FsbFByb21pc2UgPSBjYWxsV2l0aFRpbWVvdXQoY2FsbFByb21pc2UsIHRpbWVvdXRNaWxsaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY2FsbFByb21pc2U7XG4gICAgICAgICAgICBpbnN0cnVtZW50cy5mb3JFYWNoKGluc3RydW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG9ic2VydmFibGVSZXN1bHQuX2J1ZmZlci5nZXQoaW5zdHJ1bWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zdHJ1bWVudC5fbWV0cmljU3RvcmFnZXMuZm9yRWFjaChtZXRyaWNTdG9yYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljU3RvcmFnZS5yZWNvcmQoYnVmZmVyLCBvYnNlcnZhdGlvblRpbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZmluZENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KHJlY29yZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVjb3JkLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiByZWNvcmQuaW5zdHJ1bWVudCA9PT0gaW5zdHJ1bWVudDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9maW5kQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JhdGNoQ2FsbGJhY2tzLmZpbmRJbmRleChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChyZWNvcmQuY2FsbGJhY2sgPT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAgICAgc2V0RXF1YWxzKHJlY29yZC5pbnN0cnVtZW50cywgaW5zdHJ1bWVudHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T2JzZXJ2YWJsZVJlZ2lzdHJ5LmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IE1ldHJpY1N0b3JhZ2UgfSBmcm9tICcuL01ldHJpY1N0b3JhZ2UnO1xuaW1wb3J0IHsgRGVsdGFNZXRyaWNQcm9jZXNzb3IgfSBmcm9tICcuL0RlbHRhTWV0cmljUHJvY2Vzc29yJztcbmltcG9ydCB7IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yIH0gZnJvbSAnLi9UZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvcic7XG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZS5cbiAqXG4gKiBTdG9yZXMgYW5kIGFnZ3JlZ2F0ZXMge0BsaW5rIE1ldHJpY0RhdGF9IGZvciBzeW5jaHJvbm91cyBpbnN0cnVtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN5bmNNZXRyaWNTdG9yYWdlIGV4dGVuZHMgTWV0cmljU3RvcmFnZSB7XG4gICAgX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICBfZGVsdGFNZXRyaWNTdG9yYWdlO1xuICAgIF90ZW1wb3JhbE1ldHJpY1N0b3JhZ2U7XG4gICAgX2F0dHJpYnV0ZXNQcm9jZXNzb3I7XG4gICAgY29uc3RydWN0b3IoaW5zdHJ1bWVudERlc2NyaXB0b3IsIGFnZ3JlZ2F0b3IsIGF0dHJpYnV0ZXNQcm9jZXNzb3IsIGNvbGxlY3RvckhhbmRsZXMsIGFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCkge1xuICAgICAgICBzdXBlcihpbnN0cnVtZW50RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA9IGFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICAgICAgdGhpcy5fZGVsdGFNZXRyaWNTdG9yYWdlID0gbmV3IERlbHRhTWV0cmljUHJvY2Vzc29yKGFnZ3JlZ2F0b3IsIHRoaXMuX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCk7XG4gICAgICAgIHRoaXMuX3RlbXBvcmFsTWV0cmljU3RvcmFnZSA9IG5ldyBUZW1wb3JhbE1ldHJpY1Byb2Nlc3NvcihhZ2dyZWdhdG9yLCBjb2xsZWN0b3JIYW5kbGVzKTtcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlc1Byb2Nlc3NvciA9IGF0dHJpYnV0ZXNQcm9jZXNzb3I7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY29udGV4dCwgcmVjb3JkVGltZSkge1xuICAgICAgICBhdHRyaWJ1dGVzID0gdGhpcy5fYXR0cmlidXRlc1Byb2Nlc3Nvci5wcm9jZXNzKGF0dHJpYnV0ZXMsIGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UucmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjb250ZXh0LCByZWNvcmRUaW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29sbGVjdHMgdGhlIG1ldHJpY3MgZnJvbSB0aGlzIHN0b3JhZ2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGlzIGlzIGEgc3RhdGVmdWwgb3BlcmF0aW9uIGFuZCBtYXkgcmVzZXQgYW55IGludGVydmFsLXJlbGF0ZWRcbiAgICAgKiBzdGF0ZSBmb3IgdGhlIE1ldHJpY0NvbGxlY3Rvci5cbiAgICAgKi9cbiAgICBjb2xsZWN0KGNvbGxlY3RvciwgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgY29uc3QgYWNjdW11bGF0aW9ucyA9IHRoaXMuX2RlbHRhTWV0cmljU3RvcmFnZS5jb2xsZWN0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wb3JhbE1ldHJpY1N0b3JhZ2UuYnVpbGRNZXRyaWNzKGNvbGxlY3RvciwgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IsIGFjY3VtdWxhdGlvbnMsIGNvbGxlY3Rpb25UaW1lKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TeW5jTWV0cmljU3RvcmFnZS5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jbGFzcyBOb29wQXR0cmlidXRlc1Byb2Nlc3NvciB7XG4gICAgcHJvY2VzcyhpbmNvbWluZywgX2NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGluY29taW5nO1xuICAgIH1cbn1cbmNsYXNzIE11bHRpQXR0cmlidXRlc1Byb2Nlc3NvciB7XG4gICAgX3Byb2Nlc3NvcnM7XG4gICAgY29uc3RydWN0b3IocHJvY2Vzc29ycykge1xuICAgICAgICB0aGlzLl9wcm9jZXNzb3JzID0gcHJvY2Vzc29ycztcbiAgICB9XG4gICAgcHJvY2VzcyhpbmNvbWluZywgY29udGV4dCkge1xuICAgICAgICBsZXQgZmlsdGVyZWRBdHRyaWJ1dGVzID0gaW5jb21pbmc7XG4gICAgICAgIGZvciAoY29uc3QgcHJvY2Vzc29yIG9mIHRoaXMuX3Byb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkQXR0cmlidXRlcyA9IHByb2Nlc3Nvci5wcm9jZXNzKGZpbHRlcmVkQXR0cmlidXRlcywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXR0cmlidXRlcztcbiAgICB9XG59XG5jbGFzcyBBbGxvd0xpc3RQcm9jZXNzb3Ige1xuICAgIF9hbGxvd2VkQXR0cmlidXRlTmFtZXM7XG4gICAgY29uc3RydWN0b3IoYWxsb3dlZEF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICAgIHRoaXMuX2FsbG93ZWRBdHRyaWJ1dGVOYW1lcyA9IGFsbG93ZWRBdHRyaWJ1dGVOYW1lcztcbiAgICB9XG4gICAgcHJvY2VzcyhpbmNvbWluZywgX2NvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRBdHRyaWJ1dGVzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGluY29taW5nKS5mb3JFYWNoKGF0dHJpYnV0ZU5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93ZWRBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkQXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9IGluY29taW5nW2F0dHJpYnV0ZU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXR0cmlidXRlcztcbiAgICB9XG59XG5jbGFzcyBEZW55TGlzdFByb2Nlc3NvciB7XG4gICAgX2RlbmllZEF0dHJpYnV0ZU5hbWVzO1xuICAgIGNvbnN0cnVjdG9yKGRlbmllZEF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICAgIHRoaXMuX2RlbmllZEF0dHJpYnV0ZU5hbWVzID0gZGVuaWVkQXR0cmlidXRlTmFtZXM7XG4gICAgfVxuICAgIHByb2Nlc3MoaW5jb21pbmcsIF9jb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhpbmNvbWluZykuZm9yRWFjaChhdHRyaWJ1dGVOYW1lID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGVuaWVkQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPSBpbmNvbWluZ1thdHRyaWJ1dGVOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEF0dHJpYnV0ZXM7XG4gICAgfVxufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBDcmVhdGUgYW4ge0BsaW5rIElBdHRyaWJ1dGVzUHJvY2Vzc29yfSB0aGF0IGFjdHMgYXMgYSBzaW1wbGUgcGFzcy10aHJvdWdoIGZvciBhdHRyaWJ1dGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IoKSB7XG4gICAgcmV0dXJuIE5PT1A7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIENyZWF0ZSBhbiB7QGxpbmsgSUF0dHJpYnV0ZXNQcm9jZXNzb3J9IHRoYXQgYXBwbGllcyBhbGwgcHJvY2Vzc29ycyBmcm9tIHRoZSBwcm92aWRlZCBsaXN0IGluIG9yZGVyLlxuICpcbiAqIEBwYXJhbSBwcm9jZXNzb3JzIFByb2Nlc3NvcnMgdG8gYXBwbHkgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWx0aUF0dHJpYnV0ZXNQcm9jZXNzb3IocHJvY2Vzc29ycykge1xuICAgIHJldHVybiBuZXcgTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yKHByb2Nlc3NvcnMpO1xufVxuLyoqXG4gKiBDcmVhdGUgYW4ge0BsaW5rIElBdHRyaWJ1dGVzUHJvY2Vzc29yfSB0aGF0IGZpbHRlcnMgYnkgYWxsb3dlZCBhdHRyaWJ1dGUgbmFtZXMgYW5kIGRyb3BzIGFueSBuYW1lcyB0aGF0IGFyZSBub3QgaW4gdGhlXG4gKiBhbGxvdyBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWxsb3dMaXN0QXR0cmlidXRlc1Byb2Nlc3NvcihhdHRyaWJ1dGVBbGxvd0xpc3QpIHtcbiAgICByZXR1cm4gbmV3IEFsbG93TGlzdFByb2Nlc3NvcihhdHRyaWJ1dGVBbGxvd0xpc3QpO1xufVxuLyoqXG4gKiBDcmVhdGUgYW4ge0BsaW5rIElBdHRyaWJ1dGVzUHJvY2Vzc29yfSB0aGF0IGRyb3BzIGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIG5hbWVzIHByb3ZpZGVkIGluIHRoZSBkZW55IGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlbnlMaXN0QXR0cmlidXRlc1Byb2Nlc3NvcihhdHRyaWJ1dGVEZW55TGlzdCkge1xuICAgIHJldHVybiBuZXcgRGVueUxpc3RQcm9jZXNzb3IoYXR0cmlidXRlRGVueUxpc3QpO1xufVxuY29uc3QgTk9PUCA9IG5ldyBOb29wQXR0cmlidXRlc1Byb2Nlc3NvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXR0cmlidXRlc1Byb2Nlc3Nvci5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcldpdGhWaWV3LCB9IGZyb20gJy4uL0luc3RydW1lbnREZXNjcmlwdG9yJztcbmltcG9ydCB7IE1ldGVyIH0gZnJvbSAnLi4vTWV0ZXInO1xuaW1wb3J0IHsgQXN5bmNNZXRyaWNTdG9yYWdlIH0gZnJvbSAnLi9Bc3luY01ldHJpY1N0b3JhZ2UnO1xuaW1wb3J0IHsgTWV0cmljU3RvcmFnZVJlZ2lzdHJ5IH0gZnJvbSAnLi9NZXRyaWNTdG9yYWdlUmVnaXN0cnknO1xuaW1wb3J0IHsgTXVsdGlNZXRyaWNTdG9yYWdlIH0gZnJvbSAnLi9NdWx0aVdyaXRhYmxlTWV0cmljU3RvcmFnZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlUmVnaXN0cnkgfSBmcm9tICcuL09ic2VydmFibGVSZWdpc3RyeSc7XG5pbXBvcnQgeyBTeW5jTWV0cmljU3RvcmFnZSB9IGZyb20gJy4vU3luY01ldHJpY1N0b3JhZ2UnO1xuaW1wb3J0IHsgY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IsIH0gZnJvbSAnLi4vdmlldy9BdHRyaWJ1dGVzUHJvY2Vzc29yJztcbi8qKlxuICogQW4gaW50ZXJuYWwgcmVjb3JkIGZvciBzaGFyZWQgbWV0ZXIgcHJvdmlkZXIgc3RhdGVzLlxuICovXG5leHBvcnQgY2xhc3MgTWV0ZXJTaGFyZWRTdGF0ZSB7XG4gICAgbWV0cmljU3RvcmFnZVJlZ2lzdHJ5ID0gbmV3IE1ldHJpY1N0b3JhZ2VSZWdpc3RyeSgpO1xuICAgIG9ic2VydmFibGVSZWdpc3RyeSA9IG5ldyBPYnNlcnZhYmxlUmVnaXN0cnkoKTtcbiAgICBtZXRlcjtcbiAgICBfbWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlO1xuICAgIF9pbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICBjb25zdHJ1Y3RvcihtZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUsIGluc3RydW1lbnRhdGlvblNjb3BlKSB7XG4gICAgICAgIHRoaXMubWV0ZXIgPSBuZXcgTWV0ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuX21ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSA9IG1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZTtcbiAgICAgICAgdGhpcy5faW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBpbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICB9XG4gICAgcmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSB0aGlzLl9yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvciwgU3luY01ldHJpY1N0b3JhZ2UpO1xuICAgICAgICBpZiAoc3RvcmFnZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmFnZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aU1ldHJpY1N0b3JhZ2Uoc3RvcmFnZXMpO1xuICAgIH1cbiAgICByZWdpc3RlckFzeW5jTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fcmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IsIEFzeW5jTWV0cmljU3RvcmFnZSk7XG4gICAgICAgIHJldHVybiBzdG9yYWdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNvbGxlY3RvciBvcGFxdWUgaGFuZGxlIG9mIHtAbGluayBNZXRyaWNDb2xsZWN0b3J9IHdoaWNoIGluaXRpYXRlZCB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gY29sbGVjdGlvblRpbWUgdGhlIEhyVGltZSBhdCB3aGljaCB0aGUgY29sbGVjdGlvbiB3YXMgaW5pdGlhdGVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgZm9yIGNvbGxlY3Rpb24uXG4gICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2YgbWV0cmljIGRhdGEgY29sbGVjdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbGxlY3QoY29sbGVjdG9yLCBjb2xsZWN0aW9uVGltZSwgb3B0aW9ucykge1xuICAgICAgICAvKipcbiAgICAgICAgICogMS4gQ2FsbCBhbGwgb2JzZXJ2YWJsZSBjYWxsYmFja3MgZmlyc3QuXG4gICAgICAgICAqIDIuIENvbGxlY3QgbWV0cmljIHJlc3VsdCBmb3IgdGhlIGNvbGxlY3Rvci5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IHRoaXMub2JzZXJ2YWJsZVJlZ2lzdHJ5Lm9ic2VydmUoY29sbGVjdGlvblRpbWUsIG9wdGlvbnM/LnRpbWVvdXRNaWxsaXMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LmdldFN0b3JhZ2VzKGNvbGxlY3Rvcik7XG4gICAgICAgIC8vIHByZXZlbnQgbW9yZSBhbGxvY2F0aW9ucyBpZiB0aGVyZSBhcmUgbm8gc3RvcmFnZXMuXG4gICAgICAgIGlmIChzdG9yYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldHJpY0RhdGFMaXN0ID0gW107XG4gICAgICAgIHN0b3JhZ2VzLmZvckVhY2gobWV0cmljU3RvcmFnZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRyaWNEYXRhID0gbWV0cmljU3RvcmFnZS5jb2xsZWN0KGNvbGxlY3RvciwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgICAgICAgaWYgKG1ldHJpY0RhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1ldHJpY0RhdGFMaXN0LnB1c2gobWV0cmljRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBza2lwIHRoaXMgc2NvcGUgaWYgbm8gZGF0YSB3YXMgY29sbGVjdGVkIChzdG9yYWdlIGNyZWF0ZWQsIGJ1dCBubyBkYXRhIG9ic2VydmVkKVxuICAgICAgICBpZiAobWV0cmljRGF0YUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcnMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NvcGVNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMuX2luc3RydW1lbnRhdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgIG1ldHJpY3M6IG1ldHJpY0RhdGFMaXN0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9ycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3JlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yLCBNZXRyaWNTdG9yYWdlVHlwZSkge1xuICAgICAgICBjb25zdCB2aWV3cyA9IHRoaXMuX21ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZS52aWV3UmVnaXN0cnkuZmluZFZpZXdzKGRlc2NyaXB0b3IsIHRoaXMuX2luc3RydW1lbnRhdGlvblNjb3BlKTtcbiAgICAgICAgbGV0IHN0b3JhZ2VzID0gdmlld3MubWFwKHZpZXcgPT4ge1xuICAgICAgICAgICAgY29uc3Qgdmlld0Rlc2NyaXB0b3IgPSBjcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcldpdGhWaWV3KHZpZXcsIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgY29uc3QgY29tcGF0aWJsZVN0b3JhZ2UgPSB0aGlzLm1ldHJpY1N0b3JhZ2VSZWdpc3RyeS5maW5kT3JVcGRhdGVDb21wYXRpYmxlU3RvcmFnZSh2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgICAgICBpZiAoY29tcGF0aWJsZVN0b3JhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXRpYmxlU3RvcmFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSB2aWV3LmFnZ3JlZ2F0aW9uLmNyZWF0ZUFnZ3JlZ2F0b3Iodmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgY29uc3Qgdmlld1N0b3JhZ2UgPSBuZXcgTWV0cmljU3RvcmFnZVR5cGUodmlld0Rlc2NyaXB0b3IsIGFnZ3JlZ2F0b3IsIHZpZXcuYXR0cmlidXRlc1Byb2Nlc3NvciwgdGhpcy5fbWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlLm1ldHJpY0NvbGxlY3RvcnMsIHZpZXcuYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LnJlZ2lzdGVyKHZpZXdTdG9yYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB2aWV3U3RvcmFnZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBwZXItY29sbGVjdG9yIGFnZ3JlZ2F0aW9ucyBpZiBubyB2aWV3IGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBpbnN0cnVtZW50LlxuICAgICAgICBpZiAoc3RvcmFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJDb2xsZWN0b3JBZ2dyZWdhdGlvbnMgPSB0aGlzLl9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUuc2VsZWN0QWdncmVnYXRpb25zKGRlc2NyaXB0b3IudHlwZSk7XG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0b3JTdG9yYWdlcyA9IHBlckNvbGxlY3RvckFnZ3JlZ2F0aW9ucy5tYXAoKFtjb2xsZWN0b3IsIGFnZ3JlZ2F0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhdGlibGVTdG9yYWdlID0gdGhpcy5tZXRyaWNTdG9yYWdlUmVnaXN0cnkuZmluZE9yVXBkYXRlQ29tcGF0aWJsZUNvbGxlY3RvclN0b3JhZ2UoY29sbGVjdG9yLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGF0aWJsZVN0b3JhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGF0aWJsZVN0b3JhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdGlvbi5jcmVhdGVBZ2dyZWdhdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5TGltaXQgPSBjb2xsZWN0b3Iuc2VsZWN0Q2FyZGluYWxpdHlMaW1pdChkZXNjcmlwdG9yLnR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTWV0cmljU3RvcmFnZVR5cGUoZGVzY3JpcHRvciwgYWdncmVnYXRvciwgY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IoKSwgW2NvbGxlY3Rvcl0sIGNhcmRpbmFsaXR5TGltaXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LnJlZ2lzdGVyRm9yQ29sbGVjdG9yKGNvbGxlY3Rvciwgc3RvcmFnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0b3JhZ2VzID0gc3RvcmFnZXMuY29uY2F0KGNvbGxlY3RvclN0b3JhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmFnZXM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0ZXJTaGFyZWRTdGF0ZS5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBpbnN0cnVtZW50YXRpb25TY29wZUlkIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgVmlld1JlZ2lzdHJ5IH0gZnJvbSAnLi4vdmlldy9WaWV3UmVnaXN0cnknO1xuaW1wb3J0IHsgTWV0ZXJTaGFyZWRTdGF0ZSB9IGZyb20gJy4vTWV0ZXJTaGFyZWRTdGF0ZSc7XG5pbXBvcnQgeyB0b0FnZ3JlZ2F0aW9uIH0gZnJvbSAnLi4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvbic7XG4vKipcbiAqIEFuIGludGVybmFsIHJlY29yZCBmb3Igc2hhcmVkIG1ldGVyIHByb3ZpZGVyIHN0YXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSB7XG4gICAgdmlld1JlZ2lzdHJ5ID0gbmV3IFZpZXdSZWdpc3RyeSgpO1xuICAgIG1ldHJpY0NvbGxlY3RvcnMgPSBbXTtcbiAgICBtZXRlclNoYXJlZFN0YXRlcyA9IG5ldyBNYXAoKTtcbiAgICByZXNvdXJjZTtcbiAgICBjb25zdHJ1Y3RvcihyZXNvdXJjZSkge1xuICAgICAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2U7XG4gICAgfVxuICAgIGdldE1ldGVyU2hhcmVkU3RhdGUoaW5zdHJ1bWVudGF0aW9uU2NvcGUpIHtcbiAgICAgICAgY29uc3QgaWQgPSBpbnN0cnVtZW50YXRpb25TY29wZUlkKGluc3RydW1lbnRhdGlvblNjb3BlKTtcbiAgICAgICAgbGV0IG1ldGVyU2hhcmVkU3RhdGUgPSB0aGlzLm1ldGVyU2hhcmVkU3RhdGVzLmdldChpZCk7XG4gICAgICAgIGlmIChtZXRlclNoYXJlZFN0YXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIG1ldGVyU2hhcmVkU3RhdGUgPSBuZXcgTWV0ZXJTaGFyZWRTdGF0ZSh0aGlzLCBpbnN0cnVtZW50YXRpb25TY29wZSk7XG4gICAgICAgICAgICB0aGlzLm1ldGVyU2hhcmVkU3RhdGVzLnNldChpZCwgbWV0ZXJTaGFyZWRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGVyU2hhcmVkU3RhdGU7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9ucyhpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0b3Igb2YgdGhpcy5tZXRyaWNDb2xsZWN0b3JzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbXG4gICAgICAgICAgICAgICAgY29sbGVjdG9yLFxuICAgICAgICAgICAgICAgIHRvQWdncmVnYXRpb24oY29sbGVjdG9yLnNlbGVjdEFnZ3JlZ2F0aW9uKGluc3RydW1lbnRUeXBlKSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZS5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBtaWxsaXNUb0hyVGltZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2NvcmUnO1xuLyoqXG4gKiBBbiBpbnRlcm5hbCBvcGFxdWUgaW50ZXJmYWNlIHRoYXQgdGhlIE1ldHJpY1JlYWRlciByZWNlaXZlcyBhc1xuICogTWV0cmljUHJvZHVjZXIuIEl0IGFjdHMgYXMgdGhlIHN0b3JhZ2Uga2V5IHRvIHRoZSBpbnRlcm5hbCBtZXRyaWMgc3RyZWFtXG4gKiBzdGF0ZSBmb3IgZWFjaCBNZXRyaWNSZWFkZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXRyaWNDb2xsZWN0b3Ige1xuICAgIF9zaGFyZWRTdGF0ZTtcbiAgICBfbWV0cmljUmVhZGVyO1xuICAgIGNvbnN0cnVjdG9yKHNoYXJlZFN0YXRlLCBtZXRyaWNSZWFkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUgPSBzaGFyZWRTdGF0ZTtcbiAgICAgICAgdGhpcy5fbWV0cmljUmVhZGVyID0gbWV0cmljUmVhZGVyO1xuICAgIH1cbiAgICBhc3luYyBjb2xsZWN0KG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblRpbWUgPSBtaWxsaXNUb0hyVGltZShEYXRlLm5vdygpKTtcbiAgICAgICAgY29uc3Qgc2NvcGVNZXRyaWNzID0gW107XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgICBjb25zdCBtZXRlckNvbGxlY3Rpb25Qcm9taXNlcyA9IEFycmF5LmZyb20odGhpcy5fc2hhcmVkU3RhdGUubWV0ZXJTaGFyZWRTdGF0ZXMudmFsdWVzKCkpLm1hcChhc3luYyAobWV0ZXJTaGFyZWRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IG1ldGVyU2hhcmVkU3RhdGUuY29sbGVjdCh0aGlzLCBjb2xsZWN0aW9uVGltZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBzY29wZSBtZXRyaWNzIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQ/LnNjb3BlTWV0cmljcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzLnB1c2goY3VycmVudC5zY29wZU1ldHJpY3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb25seSBhZGQgZXJyb3JzIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQ/LmVycm9ycyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4uY3VycmVudC5lcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobWV0ZXJDb2xsZWN0aW9uUHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzb3VyY2VNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3NoYXJlZFN0YXRlLnJlc291cmNlLFxuICAgICAgICAgICAgICAgIHNjb3BlTWV0cmljczogc2NvcGVNZXRyaWNzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxlZ2F0ZXMgZm9yIE1ldHJpY1JlYWRlci5mb3JjZUZsdXNoLlxuICAgICAqL1xuICAgIGFzeW5jIGZvcmNlRmx1c2gob3B0aW9ucykge1xuICAgICAgICBhd2FpdCB0aGlzLl9tZXRyaWNSZWFkZXIuZm9yY2VGbHVzaChvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZWdhdGVzIGZvciBNZXRyaWNSZWFkZXIuc2h1dGRvd24uXG4gICAgICovXG4gICAgYXN5bmMgc2h1dGRvd24ob3B0aW9ucykge1xuICAgICAgICBhd2FpdCB0aGlzLl9tZXRyaWNSZWFkZXIuc2h1dGRvd24ob3B0aW9ucyk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1JlYWRlci5zZWxlY3RBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KGluc3RydW1lbnRUeXBlKTtcbiAgICB9XG4gICAgc2VsZWN0QWdncmVnYXRpb24oaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1JlYWRlci5zZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbGVjdCB0aGUgY2FyZGluYWxpdHkgbGltaXQgZm9yIHRoZSBnaXZlbiB7QGxpbmsgSW5zdHJ1bWVudFR5cGV9IGZvciB0aGlzXG4gICAgICogY29sbGVjdG9yLlxuICAgICAqL1xuICAgIHNlbGVjdENhcmRpbmFsaXR5TGltaXQoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1JlYWRlci5zZWxlY3RDYXJkaW5hbGl0eUxpbWl0Py4oaW5zdHJ1bWVudFR5cGUpID8/IDIwMDA7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0cmljQ29sbGVjdG9yLmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1yZWdleC1lc2NhcGluZ1xuLy8gZXNjYXBlIF4gJCBcXCAuICArID8gKCApIFsgXSB7IH0gfFxuLy8gZG8gbm90IG5lZWQgdG8gZXNjYXBlICogYXMgd2UgaW50ZXJwcmV0IGl0IGFzIHdpbGRjYXJkXG5jb25zdCBFU0NBUEUgPSAvW1xcXiRcXFxcLis/KClbXFxde318XS9nO1xuLyoqXG4gKiBXaWxkY2FyZCBwYXR0ZXJuIHByZWRpY2F0ZSwgc3VwcG9ydHMgcGF0dGVybnMgbGlrZSBgKmAsIGBmb28qYCwgYCpiYXJgLlxuICovXG5leHBvcnQgY2xhc3MgUGF0dGVyblByZWRpY2F0ZSB7XG4gICAgX21hdGNoQWxsO1xuICAgIF9yZWdleHA7XG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJyonKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXRjaEFsbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9yZWdleHAgPSAvLiovO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2hBbGwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2V4cCA9IG5ldyBSZWdFeHAoUGF0dGVyblByZWRpY2F0ZS5lc2NhcGVQYXR0ZXJuKHBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaChzdHIpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hdGNoQWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmVnZXhwLnRlc3Qoc3RyKTtcbiAgICB9XG4gICAgc3RhdGljIGVzY2FwZVBhdHRlcm4ocGF0dGVybikge1xuICAgICAgICByZXR1cm4gYF4ke3BhdHRlcm4ucmVwbGFjZShFU0NBUEUsICdcXFxcJCYnKS5yZXBsYWNlKCcqJywgJy4qJyl9JGA7XG4gICAgfVxuICAgIHN0YXRpYyBoYXNXaWxkY2FyZChwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLmluY2x1ZGVzKCcqJyk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEV4YWN0UHJlZGljYXRlIHtcbiAgICBfbWF0Y2hBbGw7XG4gICAgX3BhdHRlcm47XG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgICAgICB0aGlzLl9tYXRjaEFsbCA9IHBhdHRlcm4gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcGF0dGVybiA9IHBhdHRlcm47XG4gICAgfVxuICAgIG1hdGNoKHN0cikge1xuICAgICAgICBpZiAodGhpcy5fbWF0Y2hBbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHIgPT09IHRoaXMuX3BhdHRlcm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QcmVkaWNhdGUuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgRXhhY3RQcmVkaWNhdGUsIFBhdHRlcm5QcmVkaWNhdGUgfSBmcm9tICcuL1ByZWRpY2F0ZSc7XG5leHBvcnQgY2xhc3MgSW5zdHJ1bWVudFNlbGVjdG9yIHtcbiAgICBfbmFtZUZpbHRlcjtcbiAgICBfdHlwZTtcbiAgICBfdW5pdEZpbHRlcjtcbiAgICBjb25zdHJ1Y3Rvcihjcml0ZXJpYSkge1xuICAgICAgICB0aGlzLl9uYW1lRmlsdGVyID0gbmV3IFBhdHRlcm5QcmVkaWNhdGUoY3JpdGVyaWE/Lm5hbWUgPz8gJyonKTtcbiAgICAgICAgdGhpcy5fdHlwZSA9IGNyaXRlcmlhPy50eXBlO1xuICAgICAgICB0aGlzLl91bml0RmlsdGVyID0gbmV3IEV4YWN0UHJlZGljYXRlKGNyaXRlcmlhPy51bml0KTtcbiAgICB9XG4gICAgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuICAgIGdldE5hbWVGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lRmlsdGVyO1xuICAgIH1cbiAgICBnZXRVbml0RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5pdEZpbHRlcjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnN0cnVtZW50U2VsZWN0b3IuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgRXhhY3RQcmVkaWNhdGUgfSBmcm9tICcuL1ByZWRpY2F0ZSc7XG5leHBvcnQgY2xhc3MgTWV0ZXJTZWxlY3RvciB7XG4gICAgX25hbWVGaWx0ZXI7XG4gICAgX3ZlcnNpb25GaWx0ZXI7XG4gICAgX3NjaGVtYVVybEZpbHRlcjtcbiAgICBjb25zdHJ1Y3Rvcihjcml0ZXJpYSkge1xuICAgICAgICB0aGlzLl9uYW1lRmlsdGVyID0gbmV3IEV4YWN0UHJlZGljYXRlKGNyaXRlcmlhPy5uYW1lKTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbkZpbHRlciA9IG5ldyBFeGFjdFByZWRpY2F0ZShjcml0ZXJpYT8udmVyc2lvbik7XG4gICAgICAgIHRoaXMuX3NjaGVtYVVybEZpbHRlciA9IG5ldyBFeGFjdFByZWRpY2F0ZShjcml0ZXJpYT8uc2NoZW1hVXJsKTtcbiAgICB9XG4gICAgZ2V0TmFtZUZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWVGaWx0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRPRE86IHNlbXZlciBmaWx0ZXI/IG5vIHNwZWMgeWV0LlxuICAgICAqL1xuICAgIGdldFZlcnNpb25GaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uRmlsdGVyO1xuICAgIH1cbiAgICBnZXRTY2hlbWFVcmxGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY2hlbWFVcmxGaWx0ZXI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0ZXJTZWxlY3Rvci5qcy5tYXAiLAogICAgIi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBQYXR0ZXJuUHJlZGljYXRlIH0gZnJvbSAnLi9QcmVkaWNhdGUnO1xuaW1wb3J0IHsgY3JlYXRlTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yLCBjcmVhdGVOb29wQXR0cmlidXRlc1Byb2Nlc3NvciwgfSBmcm9tICcuL0F0dHJpYnV0ZXNQcm9jZXNzb3InO1xuaW1wb3J0IHsgSW5zdHJ1bWVudFNlbGVjdG9yIH0gZnJvbSAnLi9JbnN0cnVtZW50U2VsZWN0b3InO1xuaW1wb3J0IHsgTWV0ZXJTZWxlY3RvciB9IGZyb20gJy4vTWV0ZXJTZWxlY3Rvcic7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvblR5cGUsIHRvQWdncmVnYXRpb24sIH0gZnJvbSAnLi9BZ2dyZWdhdGlvbk9wdGlvbic7XG5mdW5jdGlvbiBpc1NlbGVjdG9yTm90UHJvdmlkZWQob3B0aW9ucykge1xuICAgIHJldHVybiAob3B0aW9ucy5pbnN0cnVtZW50TmFtZSA9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMuaW5zdHJ1bWVudFR5cGUgPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zLmluc3RydW1lbnRVbml0ID09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucy5tZXRlck5hbWUgPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zLm1ldGVyVmVyc2lvbiA9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMubWV0ZXJTY2hlbWFVcmwgPT0gbnVsbCk7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVZpZXdPcHRpb25zKHZpZXdPcHRpb25zKSB7XG4gICAgLy8gSWYgbm8gY3JpdGVyaWEgaXMgcHJvdmlkZWQsIHRoZSBTREsgU0hPVUxEIHRyZWF0IGl0IGFzIGFuIGVycm9yLlxuICAgIC8vIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIFNESyBpbXBsZW1lbnRhdGlvbnMgZmFpbCBmYXN0LlxuICAgIGlmIChpc1NlbGVjdG9yTm90UHJvdmlkZWQodmlld09wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSB2aWV3IHdpdGggbm8gc2VsZWN0b3IgYXJndW1lbnRzIHN1cHBsaWVkJyk7XG4gICAgfVxuICAgIC8vIHRoZSBTREsgU0hPVUxEIE5PVCBhbGxvdyBWaWV3cyB3aXRoIGEgc3BlY2lmaWVkIG5hbWUgdG8gYmUgZGVjbGFyZWQgd2l0aCBpbnN0cnVtZW50IHNlbGVjdG9ycyB0aGF0XG4gICAgLy8gbWF5IHNlbGVjdCBtb3JlIHRoYW4gb25lIGluc3RydW1lbnQgKGUuZy4gd2lsZCBjYXJkIGluc3RydW1lbnQgbmFtZSkgaW4gdGhlIHNhbWUgTWV0ZXIuXG4gICAgaWYgKHZpZXdPcHRpb25zLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgICAodmlld09wdGlvbnM/Lmluc3RydW1lbnROYW1lID09IG51bGwgfHxcbiAgICAgICAgICAgIFBhdHRlcm5QcmVkaWNhdGUuaGFzV2lsZGNhcmQodmlld09wdGlvbnMuaW5zdHJ1bWVudE5hbWUpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdzIHdpdGggYSBzcGVjaWZpZWQgbmFtZSBtdXN0IGJlIGRlY2xhcmVkIHdpdGggYW4gaW5zdHJ1bWVudCBzZWxlY3RvciB0aGF0IHNlbGVjdHMgYXQgbW9zdCBvbmUgaW5zdHJ1bWVudCBwZXIgbWV0ZXIuJyk7XG4gICAgfVxufVxuLyoqXG4gKiBDYW4gYmUgcGFzc2VkIHRvIGEge0BsaW5rIE1ldGVyUHJvdmlkZXJ9IHRvIHNlbGVjdCBpbnN0cnVtZW50cyBhbmQgYWx0ZXIgdGhlaXIgbWV0cmljIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGNsYXNzIFZpZXcge1xuICAgIG5hbWU7XG4gICAgZGVzY3JpcHRpb247XG4gICAgYWdncmVnYXRpb247XG4gICAgYXR0cmlidXRlc1Byb2Nlc3NvcjtcbiAgICBpbnN0cnVtZW50U2VsZWN0b3I7XG4gICAgbWV0ZXJTZWxlY3RvcjtcbiAgICBhZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IHtAbGluayBWaWV3fSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIFBhcmFtZXRlcnMgY2FuIGJlIGNhdGVnb3JpemVkIGFzIHR3byB0eXBlczpcbiAgICAgKiAgSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6IFVzZWQgdG8gZGVzY3JpYmUgdGhlIGluc3RydW1lbnQocykgdGhpcyB2aWV3IHdpbGwgYmUgYXBwbGllZCB0by5cbiAgICAgKiAgV2lsbCBiZSB0cmVhdGVkIGFzIGFkZGl0aXZlICh0aGUgSW5zdHJ1bWVudCBoYXMgdG8gbWVldCBhbGwgdGhlIHByb3ZpZGVkIGNyaXRlcmlhIHRvIGJlIHNlbGVjdGVkKS5cbiAgICAgKlxuICAgICAqICBNZXRyaWMgc3RyZWFtIGFsdGVyaW5nOiBBbHRlciB0aGUgbWV0cmljIHN0cmVhbSBvZiBpbnN0cnVtZW50cyBzZWxlY3RlZCBieSBpbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyB7QGxpbmsgVmlld09wdGlvbnN9IGZvciBhbHRlcmluZyB0aGUgbWV0cmljIHN0cmVhbSBhbmQgaW5zdHJ1bWVudCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLm5hbWVcbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIFRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBtZXRyaWNzIHN0cmVhbS5cbiAgICAgKiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgb3JpZ2luYWwgSW5zdHJ1bWVudCBuYW1lIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuZGVzY3JpcHRpb25cbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIFRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWV0cmljcyBzdHJlYW0uXG4gICAgICogIElmIG5vdCBwcm92aWRlZCwgdGhlIG9yaWdpbmFsIEluc3RydW1lbnQgZGVzY3JpcHRpb24gd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmF0dHJpYnV0ZXNQcm9jZXNzb3JzXG4gICAgICogQWx0ZXJzIHRoZSBtZXRyaWMgc3RyZWFtOlxuICAgICAqICBJZiBwcm92aWRlZCwgdGhlIGF0dHJpYnV0ZXMgd2lsbCBiZSBtb2RpZmllZCBhcyBkZWZpbmVkIGJ5IHRoZSBhZGRlZCBwcm9jZXNzb3JzLlxuICAgICAqICBJZiBub3QgcHJvdmlkZWQsIGFsbCBhdHRyaWJ1dGUga2V5cyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0XG4gICAgICogQWx0ZXJzIHRoZSBtZXRyaWMgc3RyZWFtOlxuICAgICAqICBTZXRzIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiB1bmlxdWUgYXR0cmlidXRlIGNvbWJpbmF0aW9ucyAoY2FyZGluYWxpdHkpIHRoYXQgY2FuIGJlIGFnZ3JlZ2F0ZWQuXG4gICAgICogIElmIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgbGltaXQgb2YgMjAwMCB3aWxsIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmFnZ3JlZ2F0aW9uXG4gICAgICogQWx0ZXJzIHRoZSBtZXRyaWMgc3RyZWFtOlxuICAgICAqICBBbHRlcnMgdGhlIHtAbGluayBBZ2dyZWdhdGlvbn0gb2YgdGhlIG1ldHJpYyBzdHJlYW0uXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmluc3RydW1lbnROYW1lXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIE9yaWdpbmFsIG5hbWUgb2YgdGhlIEluc3RydW1lbnQocykgd2l0aCB3aWxkY2FyZCBzdXBwb3J0LlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucy5pbnN0cnVtZW50VHlwZVxuICAgICAqIEluc3RydW1lbnQgc2VsZWN0aW9uIGNyaXRlcmlhOlxuICAgICAqICBUaGUgb3JpZ2luYWwgdHlwZSBvZiB0aGUgSW5zdHJ1bWVudChzKS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuaW5zdHJ1bWVudFVuaXRcbiAgICAgKiBJbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYTpcbiAgICAgKiAgVGhlIHVuaXQgb2YgdGhlIEluc3RydW1lbnQocykuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLm1ldGVyTmFtZVxuICAgICAqIEluc3RydW1lbnQgc2VsZWN0aW9uIGNyaXRlcmlhOlxuICAgICAqICBUaGUgbmFtZSBvZiB0aGUgTWV0ZXIuIE5vIHdpbGRjYXJkIHN1cHBvcnQsIG5hbWUgbXVzdCBtYXRjaCB0aGUgbWV0ZXIgZXhhY3RseS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMubWV0ZXJWZXJzaW9uXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIFRoZSB2ZXJzaW9uIG9mIHRoZSBNZXRlci4gTm8gd2lsZGNhcmQgc3VwcG9ydCwgdmVyc2lvbiBtdXN0IG1hdGNoIGV4YWN0bHkuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLm1ldGVyU2NoZW1hVXJsXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIFRoZSBzY2hlbWEgVVJMIG9mIHRoZSBNZXRlci4gTm8gd2lsZGNhcmQgc3VwcG9ydCwgc2NoZW1hIFVSTCBtdXN0IG1hdGNoIGV4YWN0bHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIENyZWF0ZSBhIHZpZXcgdGhhdCBjaGFuZ2VzIHRoZSBJbnN0cnVtZW50ICdteS5pbnN0cnVtZW50JyB0byB1c2UgdG8gYW5cbiAgICAgKiAvLyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uIHdpdGggdGhlIGJvdW5kYXJpZXMgWzIwLCAzMCwgNDBdXG4gICAgICogbmV3IFZpZXcoe1xuICAgICAqICAgYWdncmVnYXRpb246IG5ldyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uKFsyMCwgMzAsIDQwXSksXG4gICAgICogICBpbnN0cnVtZW50TmFtZTogJ215Lmluc3RydW1lbnQnXG4gICAgICogfSlcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih2aWV3T3B0aW9ucykge1xuICAgICAgICB2YWxpZGF0ZVZpZXdPcHRpb25zKHZpZXdPcHRpb25zKTtcbiAgICAgICAgLy8gQ3JlYXRlIG11bHRpLXByb2Nlc3NvciBpZiBhdHRyaWJ1dGVzUHJvY2Vzc29ycyBhcmUgZGVmaW5lZC5cbiAgICAgICAgaWYgKHZpZXdPcHRpb25zLmF0dHJpYnV0ZXNQcm9jZXNzb3JzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1Byb2Nlc3NvciA9IGNyZWF0ZU11bHRpQXR0cmlidXRlc1Byb2Nlc3Nvcih2aWV3T3B0aW9ucy5hdHRyaWJ1dGVzUHJvY2Vzc29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBjcmVhdGVOb29wQXR0cmlidXRlc1Byb2Nlc3NvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IHZpZXdPcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB2aWV3T3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbiA9IHRvQWdncmVnYXRpb24odmlld09wdGlvbnMuYWdncmVnYXRpb24gPz8geyB0eXBlOiBBZ2dyZWdhdGlvblR5cGUuREVGQVVMVCB9KTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50U2VsZWN0b3IgPSBuZXcgSW5zdHJ1bWVudFNlbGVjdG9yKHtcbiAgICAgICAgICAgIG5hbWU6IHZpZXdPcHRpb25zLmluc3RydW1lbnROYW1lLFxuICAgICAgICAgICAgdHlwZTogdmlld09wdGlvbnMuaW5zdHJ1bWVudFR5cGUsXG4gICAgICAgICAgICB1bml0OiB2aWV3T3B0aW9ucy5pbnN0cnVtZW50VW5pdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWV0ZXJTZWxlY3RvciA9IG5ldyBNZXRlclNlbGVjdG9yKHtcbiAgICAgICAgICAgIG5hbWU6IHZpZXdPcHRpb25zLm1ldGVyTmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IHZpZXdPcHRpb25zLm1ldGVyVmVyc2lvbixcbiAgICAgICAgICAgIHNjaGVtYVVybDogdmlld09wdGlvbnMubWV0ZXJTY2hlbWFVcmwsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA9IHZpZXdPcHRpb25zLmFnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WaWV3LmpzLm1hcCIsCiAgICAiLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGRpYWcsIGNyZWF0ZU5vb3BNZXRlciwgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgZGVmYXVsdFJlc291cmNlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzJztcbmltcG9ydCB7IE1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSB9IGZyb20gJy4vc3RhdGUvTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlJztcbmltcG9ydCB7IE1ldHJpY0NvbGxlY3RvciB9IGZyb20gJy4vc3RhdGUvTWV0cmljQ29sbGVjdG9yJztcbmltcG9ydCB7IFZpZXcgfSBmcm9tICcuL3ZpZXcvVmlldyc7XG4vKipcbiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUge0BsaW5rIE1ldGVyUHJvdmlkZXJ9IGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1ldGVyUHJvdmlkZXIge1xuICAgIF9zaGFyZWRTdGF0ZTtcbiAgICBfc2h1dGRvd24gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlID0gbmV3IE1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZShvcHRpb25zPy5yZXNvdXJjZSA/PyBkZWZhdWx0UmVzb3VyY2UoKSk7XG4gICAgICAgIGlmIChvcHRpb25zPy52aWV3cyAhPSBudWxsICYmIG9wdGlvbnMudmlld3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2aWV3T3B0aW9uIG9mIG9wdGlvbnMudmlld3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaGFyZWRTdGF0ZS52aWV3UmVnaXN0cnkuYWRkVmlldyhuZXcgVmlldyh2aWV3T3B0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnM/LnJlYWRlcnMgIT0gbnVsbCAmJiBvcHRpb25zLnJlYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZXRyaWNSZWFkZXIgb2Ygb3B0aW9ucy5yZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdG9yID0gbmV3IE1ldHJpY0NvbGxlY3Rvcih0aGlzLl9zaGFyZWRTdGF0ZSwgbWV0cmljUmVhZGVyKTtcbiAgICAgICAgICAgICAgICBtZXRyaWNSZWFkZXIuc2V0TWV0cmljUHJvZHVjZXIoY29sbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaGFyZWRTdGF0ZS5tZXRyaWNDb2xsZWN0b3JzLnB1c2goY29sbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBtZXRlciB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBNZXRlclByb3ZpZGVyLlxuICAgICAqL1xuICAgIGdldE1ldGVyKG5hbWUsIHZlcnNpb24gPSAnJywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vYmxvYi9tYWluL3NwZWNpZmljYXRpb24vbWV0cmljcy9zZGsubWQjbWV0ZXItY3JlYXRpb25cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBkaWFnLndhcm4oJ0Egc2h1dGRvd24gTWV0ZXJQcm92aWRlciBjYW5ub3QgcHJvdmlkZSBhIE1ldGVyJyk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTm9vcE1ldGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlZFN0YXRlLmdldE1ldGVyU2hhcmVkU3RhdGUoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBzY2hlbWFVcmw6IG9wdGlvbnMuc2NoZW1hVXJsLFxuICAgICAgICB9KS5tZXRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2h1dCBkb3duIHRoZSBNZXRlclByb3ZpZGVyIGFuZCBhbGwgcmVnaXN0ZXJlZFxuICAgICAqIE1ldHJpY1JlYWRlcnMuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIGFsbCBmbHVzaGVzIGFyZSBjb21wbGV0ZS5cbiAgICAgKi9cbiAgICBhc3luYyBzaHV0ZG93bihvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bikge1xuICAgICAgICAgICAgZGlhZy53YXJuKCdzaHV0ZG93biBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgTWV0ZXJQcm92aWRlcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NodXRkb3duID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fc2hhcmVkU3RhdGUubWV0cmljQ29sbGVjdG9ycy5tYXAoY29sbGVjdG9yID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0b3Iuc2h1dGRvd24ob3B0aW9ucyk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTm90aWZpZXMgYWxsIHJlZ2lzdGVyZWQgTWV0cmljUmVhZGVycyB0byBmbHVzaCBhbnkgYnVmZmVyZWQgZGF0YS5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gYWxsIGZsdXNoZXMgYXJlIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIGFzeW5jIGZvcmNlRmx1c2gob3B0aW9ucykge1xuICAgICAgICAvLyBkbyBub3QgZmx1c2ggYWZ0ZXIgc2h1dGRvd25cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBkaWFnLndhcm4oJ2ludmFsaWQgYXR0ZW1wdCB0byBmb3JjZSBmbHVzaCBhZnRlciBNZXRlclByb3ZpZGVyIHNodXRkb3duJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fc2hhcmVkU3RhdGUubWV0cmljQ29sbGVjdG9ycy5tYXAoY29sbGVjdG9yID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0b3IuZm9yY2VGbHVzaChvcHRpb25zKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyUHJvdmlkZXIuanMubWFwIiwKICAgICIvKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0IHsgQWdncmVnYXRpb25UZW1wb3JhbGl0eSB9IGZyb20gJy4vZXhwb3J0L0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHknO1xuZXhwb3J0IHsgRGF0YVBvaW50VHlwZSwgSW5zdHJ1bWVudFR5cGUgfSBmcm9tICcuL2V4cG9ydC9NZXRyaWNEYXRhJztcbmV4cG9ydCB7IE1ldHJpY1JlYWRlciB9IGZyb20gJy4vZXhwb3J0L01ldHJpY1JlYWRlcic7XG5leHBvcnQgeyBQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlciB9IGZyb20gJy4vZXhwb3J0L1BlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyJztcbmV4cG9ydCB7IEluTWVtb3J5TWV0cmljRXhwb3J0ZXIgfSBmcm9tICcuL2V4cG9ydC9Jbk1lbW9yeU1ldHJpY0V4cG9ydGVyJztcbmV4cG9ydCB7IENvbnNvbGVNZXRyaWNFeHBvcnRlciB9IGZyb20gJy4vZXhwb3J0L0NvbnNvbGVNZXRyaWNFeHBvcnRlcic7XG5leHBvcnQgeyBNZXRlclByb3ZpZGVyIH0gZnJvbSAnLi9NZXRlclByb3ZpZGVyJztcbmV4cG9ydCB7IEFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJy4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvbic7XG5leHBvcnQgeyBjcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yLCBjcmVhdGVEZW55TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3IsIH0gZnJvbSAnLi92aWV3L0F0dHJpYnV0ZXNQcm9jZXNzb3InO1xuZXhwb3J0IHsgVGltZW91dEVycm9yIH0gZnJvbSAnLi91dGlscyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSB2b2lkIDA7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBBRERfTElTVEVORVJfTUVUSE9EUyA9IFtcbiAgICAnYWRkTGlzdGVuZXInLFxuICAgICdvbicsXG4gICAgJ29uY2UnLFxuICAgICdwcmVwZW5kTGlzdGVuZXInLFxuICAgICdwcmVwZW5kT25jZUxpc3RlbmVyJyxcbl07XG5jbGFzcyBBYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlciB7XG4gICAgLyoqXG4gICAgICogQmluZHMgYSB0aGUgY2VydGFpbiBjb250ZXh0IG9yIHRoZSBhY3RpdmUgb25lIHRvIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIHRoZW4gcmV0dXJucyB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIGNvbnRleHQgQSBjb250ZXh0IChzcGFuKSB0byBiZSBiaW5kIHRvIHRhcmdldFxuICAgICAqIEBwYXJhbSB0YXJnZXQgYSBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyLiBXaGVuIHRhcmdldCBvciBvbmUgb2YgaXRzIGNhbGxiYWNrcyBpcyBjYWxsZWQsXG4gICAgICogIHRoZSBwcm92aWRlZCBjb250ZXh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgYWN0aXZlIGNvbnRleHQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbC5cbiAgICAgKi9cbiAgICBiaW5kKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgZXZlbnRzXzEuRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmluZEV2ZW50RW1pdHRlcihjb250ZXh0LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmluZEZ1bmN0aW9uKGNvbnRleHQsIHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgX2JpbmRGdW5jdGlvbihjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHRXcmFwcGVyID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLndpdGgoY29udGV4dCwgKCkgPT4gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHRXcmFwcGVyLCAnbGVuZ3RoJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGFyZ2V0Lmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdCBpc24ndCBwb3NzaWJsZSB0byB0ZWxsIFR5cGVzY3JpcHQgdGhhdCBjb250ZXh0V3JhcHBlciBpcyB0aGUgc2FtZSBhcyBUXG4gICAgICAgICAqIHNvIHdlIGZvcmNlZCB0byBjYXN0IGFzIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGNvbnRleHRXcmFwcGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBFdmVudEVtaXR0ZXIgY2FsbCB0aGVpciBjYWxsYmFjayB3aXRoIHRoZWlyIGNvbnRleHQsIHdoaWNoIHdlIGRvXG4gICAgICogbm90IHdhbnQsIGluc3RlYWQgd2Ugd2lsbCBiaW5kIGEgc3BlY2lmaWMgY29udGV4dCB0byBhbGwgY2FsbGJhY2tzIHRoYXRcbiAgICAgKiBnbyB0aHJvdWdoIGl0LlxuICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBjb250ZXh0IHdlIHdhbnQgdG8gYmluZFxuICAgICAqIEBwYXJhbSBlZSBFdmVudEVtaXR0ZXIgYW4gaW5zdGFuY2Ugb2YgRXZlbnRFbWl0dGVyIHRvIHBhdGNoXG4gICAgICovXG4gICAgX2JpbmRFdmVudEVtaXR0ZXIoY29udGV4dCwgZWUpIHtcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fZ2V0UGF0Y2hNYXAoZWUpO1xuICAgICAgICBpZiAobWFwICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gZWU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVBhdGNoTWFwKGVlKTtcbiAgICAgICAgLy8gcGF0Y2ggbWV0aG9kcyB0aGF0IGFkZCBhIGxpc3RlbmVyIHRvIHByb3BhZ2F0ZSBjb250ZXh0XG4gICAgICAgIEFERF9MSVNURU5FUl9NRVRIT0RTLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgICAgICAgICBpZiAoZWVbbWV0aG9kTmFtZV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBlZVttZXRob2ROYW1lXSA9IHRoaXMuX3BhdGNoQWRkTGlzdGVuZXIoZWUsIGVlW21ldGhvZE5hbWVdLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHBhdGNoIG1ldGhvZHMgdGhhdCByZW1vdmUgYSBsaXN0ZW5lclxuICAgICAgICBpZiAodHlwZW9mIGVlLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBlZS5yZW1vdmVMaXN0ZW5lciA9IHRoaXMuX3BhdGNoUmVtb3ZlTGlzdGVuZXIoZWUsIGVlLnJlbW92ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVlLm9mZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWUub2ZmID0gdGhpcy5fcGF0Y2hSZW1vdmVMaXN0ZW5lcihlZSwgZWUub2ZmKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXRjaCBtZXRob2QgdGhhdCByZW1vdmUgYWxsIGxpc3RlbmVyc1xuICAgICAgICBpZiAodHlwZW9mIGVlLnJlbW92ZUFsbExpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWUucmVtb3ZlQWxsTGlzdGVuZXJzID0gdGhpcy5fcGF0Y2hSZW1vdmVBbGxMaXN0ZW5lcnMoZWUsIGVlLnJlbW92ZUFsbExpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBtZXRob2RzIHRoYXQgcmVtb3ZlIGEgZ2l2ZW4gbGlzdGVuZXIgc28gdGhhdCB3ZSBtYXRjaCB0aGUgXCJwYXRjaGVkXCJcbiAgICAgKiB2ZXJzaW9uIG9mIHRoYXQgbGlzdGVuZXIgKHRoZSBvbmUgdGhhdCBwcm9wYWdhdGUgY29udGV4dCkuXG4gICAgICogQHBhcmFtIGVlIEV2ZW50RW1pdHRlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBvcmlnaW5hbCByZWZlcmVuY2UgdG8gdGhlIHBhdGNoZWQgbWV0aG9kXG4gICAgICovXG4gICAgX3BhdGNoUmVtb3ZlTGlzdGVuZXIoZWUsIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNYW5hZ2VyID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGNvbnRleHRNYW5hZ2VyLl9nZXRQYXRjaE1hcChlZSk/LltldmVudF07XG4gICAgICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZExpc3RlbmVyID0gZXZlbnRzLmdldChsaXN0ZW5lcik7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCwgcGF0Y2hlZExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF0Y2ggbWV0aG9kcyB0aGF0IHJlbW92ZSBhbGwgbGlzdGVuZXJzIHNvIHdlIHJlbW92ZSBvdXJcbiAgICAgKiBpbnRlcm5hbCByZWZlcmVuY2VzIGZvciBhIGdpdmVuIGV2ZW50LlxuICAgICAqIEBwYXJhbSBlZSBFdmVudEVtaXR0ZXIgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWwgcmVmZXJlbmNlIHRvIHRoZSBwYXRjaGVkIG1ldGhvZFxuICAgICAqL1xuICAgIF9wYXRjaFJlbW92ZUFsbExpc3RlbmVycyhlZSwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgY29udGV4dE1hbmFnZXIgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSBjb250ZXh0TWFuYWdlci5fZ2V0UGF0Y2hNYXAoZWUpO1xuICAgICAgICAgICAgaWYgKG1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dE1hbmFnZXIuX2NyZWF0ZVBhdGNoTWFwKGVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWFwW2V2ZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXBbZXZlbnRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBtZXRob2RzIG9uIGFuIGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UgdGhhdCBjYW4gYWRkIGxpc3RlbmVycyBzbyB3ZVxuICAgICAqIGNhbiBmb3JjZSB0aGVtIHRvIHByb3BhZ2F0ZSBhIGdpdmVuIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGVlIEV2ZW50RW1pdHRlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBvcmlnaW5hbCByZWZlcmVuY2UgdG8gdGhlIHBhdGNoZWQgbWV0aG9kXG4gICAgICogQHBhcmFtIFtjb250ZXh0XSBjb250ZXh0IHRvIHByb3BhZ2F0ZSB3aGVuIGNhbGxpbmcgbGlzdGVuZXJzXG4gICAgICovXG4gICAgX3BhdGNoQWRkTGlzdGVuZXIoZWUsIG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNYW5hZ2VyID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBwcmV2ZW50IGRvdWJsZS13cmFwcGluZyB0aGUgbGlzdGVuZXIuXG4gICAgICAgICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIGVlLm9uY2Ugd3JhcHMgdGhlIGxpc3RlbmVyIGFuZCBjYWxscyBlZS5vbi5cbiAgICAgICAgICAgICAqIFdpdGhvdXQgdGhpcyBjaGVjaywgd2Ugd291bGQgd3JhcCB0aGF0IHdyYXBwZWQgbGlzdGVuZXIuXG4gICAgICAgICAgICAgKiBUaGlzIGNhdXNlcyBhbiBpc3N1ZSBiZWNhdXNlIGVlLnJlbW92ZUxpc3RlbmVyIGRlcGVuZHMgb24gdGhlIG9uY2VXcmFwcGVyXG4gICAgICAgICAgICAgKiB0byBwcm9wZXJseSByZW1vdmUgdGhlIGxpc3RlbmVyLiBJZiB3ZSB3cmFwIHRoZWlyIHdyYXBwZXIsIHdlIGJyZWFrXG4gICAgICAgICAgICAgKiB0aGF0IGRldGVjdGlvbi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGNvbnRleHRNYW5hZ2VyLl93cmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBtYXAgPSBjb250ZXh0TWFuYWdlci5fZ2V0UGF0Y2hNYXAoZWUpO1xuICAgICAgICAgICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWFwID0gY29udGV4dE1hbmFnZXIuX2NyZWF0ZVBhdGNoTWFwKGVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBsaXN0ZW5lcnMgPSBtYXBbZXZlbnRdO1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgICAgICBtYXBbZXZlbnRdID0gbGlzdGVuZXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZExpc3RlbmVyID0gY29udGV4dE1hbmFnZXIuYmluZChjb250ZXh0LCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAvLyBzdG9yZSBhIHdlYWsgcmVmZXJlbmNlIG9mIHRoZSB1c2VyIGxpc3RlbmVyIHRvIG91cnNcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQobGlzdGVuZXIsIHBhdGNoZWRMaXN0ZW5lcik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNlZSBjb21tZW50IGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uIGZvciB0aGUgZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29udGV4dE1hbmFnZXIuX3dyYXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCwgcGF0Y2hlZExpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRNYW5hZ2VyLl93cmFwcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVQYXRjaE1hcChlZSkge1xuICAgICAgICBjb25zdCBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBlZVt0aGlzLl9rT3RMaXN0ZW5lcnNdID0gbWFwO1xuICAgICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hNYXAoZWUpIHtcbiAgICAgICAgcmV0dXJuIGVlW3RoaXMuX2tPdExpc3RlbmVyc107XG4gICAgfVxuICAgIF9rT3RMaXN0ZW5lcnMgPSBTeW1ib2woJ090TGlzdGVuZXJzJyk7XG4gICAgX3dyYXBwZWQgPSBmYWxzZTtcbn1cbmV4cG9ydHMuQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSBBYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBhc3luY0hvb2tzID0gcmVxdWlyZShcImFzeW5jX2hvb2tzXCIpO1xuY29uc3QgQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL0Fic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyXCIpO1xuY2xhc3MgQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyIGV4dGVuZHMgQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXJfMS5BYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlciB7XG4gICAgX2FzeW5jSG9vaztcbiAgICBfY29udGV4dHMgPSBuZXcgTWFwKCk7XG4gICAgX3N0YWNrID0gW107XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2FzeW5jSG9vayA9IGFzeW5jSG9va3MuY3JlYXRlSG9vayh7XG4gICAgICAgICAgICBpbml0OiB0aGlzLl9pbml0LmJpbmQodGhpcyksXG4gICAgICAgICAgICBiZWZvcmU6IHRoaXMuX2JlZm9yZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgYWZ0ZXI6IHRoaXMuX2FmdGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICBkZXN0cm95OiB0aGlzLl9kZXN0cm95LmJpbmQodGhpcyksXG4gICAgICAgICAgICBwcm9taXNlUmVzb2x2ZTogdGhpcy5fZGVzdHJveS5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoIC0gMV0gPz8gYXBpXzEuUk9PVF9DT05URVhUO1xuICAgIH1cbiAgICB3aXRoKGNvbnRleHQsIGZuLCB0aGlzQXJnLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VudGVyQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXNBcmcsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fZXhpdENvbnRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2FzeW5jSG9vay5lbmFibGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2FzeW5jSG9vay5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3N0YWNrID0gW107XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0IGhvb2sgd2lsbCBiZSBjYWxsZWQgd2hlbiB1c2VybGFuZCBjcmVhdGUgYSBhc3luYyBjb250ZXh0LCBzZXR0aW5nIHRoZVxuICAgICAqIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lIGlmIGl0IGV4aXN0LlxuICAgICAqIEBwYXJhbSB1aWQgaWQgb2YgdGhlIGFzeW5jIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gdHlwZSB0aGUgcmVzb3VyY2UgdHlwZVxuICAgICAqL1xuICAgIF9pbml0KHVpZCwgdHlwZSkge1xuICAgICAgICAvLyBpZ25vcmUgVElNRVJXUkFQIGFzIHRoZXkgY29tYmluZSB0aW1lcnMgd2l0aCBzYW1lIHRpbWVvdXQgd2hpY2ggY2FuIGxlYWQgdG9cbiAgICAgICAgLy8gZmFsc2UgY29udGV4dCBwcm9wYWdhdGlvbi4gVElNRVJXUkFQIGhhcyBiZWVuIHJlbW92ZWQgaW4gbm9kZSAxMVxuICAgICAgICAvLyBldmVyeSB0aW1lciBoYXMgaXQncyBvd24gYFRpbWVvdXRgIHJlc291cmNlIGFueXdheSB3aGljaCBpcyB1c2VkIHRvIHByb3BhZ2F0ZVxuICAgICAgICAvLyBjb250ZXh0LlxuICAgICAgICBpZiAodHlwZSA9PT0gJ1RJTUVSV1JBUCcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dHMuc2V0KHVpZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBob29rIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBnaXZlbiBjb250ZXh0IGlzIG5vIGxvbmdlciB1c2VkIHNvIHdlIGNhblxuICAgICAqIHJlbW92ZSBpdHMgYXR0YWNoZWQgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gdWlkIHVpZCBvZiB0aGUgYXN5bmMgY29udGV4dFxuICAgICAqL1xuICAgIF9kZXN0cm95KHVpZCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0cy5kZWxldGUodWlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmVmb3JlIGhvb2sgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGV4ZWN1dGluZyBhIGFzeW5jIGNvbnRleHQuXG4gICAgICogQHBhcmFtIHVpZCB1aWQgb2YgdGhlIGFzeW5jIGNvbnRleHRcbiAgICAgKi9cbiAgICBfYmVmb3JlKHVpZCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fY29udGV4dHMuZ2V0KHVpZCk7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VudGVyQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZnRlciBob29rIGlzIGNhbGxlZCBqdXN0IGFmdGVyIGNvbXBsZXRpbmcgdGhlIGV4ZWN1dGlvbiBvZiBhIGFzeW5jIGNvbnRleHQuXG4gICAgICovXG4gICAgX2FmdGVyKCkge1xuICAgICAgICB0aGlzLl9leGl0Q29udGV4dCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGdpdmVuIGNvbnRleHQgYXMgYWN0aXZlXG4gICAgICovXG4gICAgX2VudGVyQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX3N0YWNrLnB1c2goY29udGV4dCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgY29udGV4dCBhdCB0aGUgcm9vdCBvZiB0aGUgc3RhY2tcbiAgICAgKi9cbiAgICBfZXhpdENvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuX3N0YWNrLnBvcCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyID0gQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgYXN5bmNfaG9va3NfMSA9IHJlcXVpcmUoXCJhc3luY19ob29rc1wiKTtcbmNvbnN0IEFic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9BYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlclwiKTtcbmNsYXNzIEFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlcl8xLkFic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyIHtcbiAgICBfYXN5bmNMb2NhbFN0b3JhZ2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2FzeW5jTG9jYWxTdG9yYWdlID0gbmV3IGFzeW5jX2hvb2tzXzEuQXN5bmNMb2NhbFN0b3JhZ2UoKTtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKSA/PyBhcGlfMS5ST09UX0NPTlRFWFQ7XG4gICAgfVxuICAgIHdpdGgoY29udGV4dCwgZm4sIHRoaXNBcmcsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2IgPSB0aGlzQXJnID09IG51bGwgPyBmbiA6IGZuLmJpbmQodGhpc0FyZyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9hc3luY0xvY2FsU3RvcmFnZS5ydW4oY29udGV4dCwgY2IsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9hc3luY0xvY2FsU3RvcmFnZS5kaXNhYmxlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmV4cG9ydHMuQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlciA9IEFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyID0gZXhwb3J0cy5Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc3luY0hvb2tzQ29udGV4dE1hbmFnZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFzeW5jSG9va3NDb250ZXh0TWFuYWdlcl8xLkFzeW5jSG9va3NDb250ZXh0TWFuYWdlcjsgfSB9KTtcbnZhciBBc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlcl8xLkFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXhjZXB0aW9uRXZlbnROYW1lID0gdm9pZCAwO1xuLy8gRXZlbnQgbmFtZSBkZWZpbml0aW9uc1xuZXhwb3J0cy5FeGNlcHRpb25FdmVudE5hbWUgPSAnZXhjZXB0aW9uJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFuSW1wbCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IGVudW1zXzEgPSByZXF1aXJlKFwiLi9lbnVtc1wiKTtcbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3Bhbi5cbiAqL1xuY2xhc3MgU3BhbkltcGwge1xuICAgIC8vIEJlbG93IHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIHRvIGltcGxlbWVudCBSZWFkYWJsZVNwYW4gZm9yIGV4cG9ydFxuICAgIC8vIHB1cnBvc2VzIGJ1dCBhcmUgbm90IGludGVuZGVkIHRvIGJlIHdyaXR0ZW4tdG8gZGlyZWN0bHkuXG4gICAgX3NwYW5Db250ZXh0O1xuICAgIGtpbmQ7XG4gICAgcGFyZW50U3BhbkNvbnRleHQ7XG4gICAgYXR0cmlidXRlcyA9IHt9O1xuICAgIGxpbmtzID0gW107XG4gICAgZXZlbnRzID0gW107XG4gICAgc3RhcnRUaW1lO1xuICAgIHJlc291cmNlO1xuICAgIGluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgIF9kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICBfZHJvcHBlZEV2ZW50c0NvdW50ID0gMDtcbiAgICBfZHJvcHBlZExpbmtzQ291bnQgPSAwO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzID0ge1xuICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5VTlNFVCxcbiAgICB9O1xuICAgIGVuZFRpbWUgPSBbMCwgMF07XG4gICAgX2VuZGVkID0gZmFsc2U7XG4gICAgX2R1cmF0aW9uID0gWy0xLCAtMV07XG4gICAgX3NwYW5Qcm9jZXNzb3I7XG4gICAgX3NwYW5MaW1pdHM7XG4gICAgX2F0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ7XG4gICAgX3BlcmZvcm1hbmNlU3RhcnRUaW1lO1xuICAgIF9wZXJmb3JtYW5jZU9mZnNldDtcbiAgICBfc3RhcnRUaW1lUHJvdmlkZWQ7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBTcGFuSW1wbCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gb3B0cy5zcGFuQ29udGV4dDtcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWUgPSBjb3JlXzEub3RwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQgPVxuICAgICAgICAgICAgbm93IC0gKHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lICsgKDAsIGNvcmVfMS5nZXRUaW1lT3JpZ2luKSgpKTtcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQgPSBvcHRzLnN0YXJ0VGltZSAhPSBudWxsO1xuICAgICAgICB0aGlzLl9zcGFuTGltaXRzID0gb3B0cy5zcGFuTGltaXRzO1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID1cbiAgICAgICAgICAgIHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCB8fCAwO1xuICAgICAgICB0aGlzLl9zcGFuUHJvY2Vzc29yID0gb3B0cy5zcGFuUHJvY2Vzc29yO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWU7XG4gICAgICAgIHRoaXMucGFyZW50U3BhbkNvbnRleHQgPSBvcHRzLnBhcmVudFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmtpbmQgPSBvcHRzLmtpbmQ7XG4gICAgICAgIHRoaXMubGlua3MgPSBvcHRzLmxpbmtzIHx8IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuX2dldFRpbWUob3B0cy5zdGFydFRpbWUgPz8gbm93KTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG9wdHMucmVzb3VyY2U7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBvcHRzLnNjb3BlO1xuICAgICAgICBpZiAob3B0cy5hdHRyaWJ1dGVzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyhvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25TdGFydCh0aGlzLCBvcHRzLmNvbnRleHQpO1xuICAgIH1cbiAgICBzcGFuQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICBzZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEludmFsaWQgYXR0cmlidXRlIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBjb3JlXzEuaXNBdHRyaWJ1dGVWYWx1ZSkodmFsdWUpKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEludmFsaWQgYXR0cmlidXRlIHZhbHVlIHNldCBmb3Iga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYXR0cmlidXRlQ291bnRMaW1pdCB9ID0gdGhpcy5fc3BhbkxpbWl0cztcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUNvdW50TGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGggPj0gYXR0cmlidXRlQ291bnRMaW1pdCAmJlxuICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdGhpcy5fdHJ1bmNhdGVUb1NpemUodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBTcGFuIE5hbWVcbiAgICAgKiBAcGFyYW0gW2F0dHJpYnV0ZXNPclN0YXJ0VGltZV0gU3BhbiBhdHRyaWJ1dGVzIG9yIHN0YXJ0IHRpbWVcbiAgICAgKiAgICAgaWYgdHlwZSBpcyB7QHR5cGUgVGltZUlucHV0fSBhbmQgM3JkIHBhcmFtIGlzIHVuZGVmaW5lZFxuICAgICAqIEBwYXJhbSBbdGltZVN0YW1wXSBTcGVjaWZpZWQgdGltZSBzdGFtcCBmb3IgdGhlIGV2ZW50XG4gICAgICovXG4gICAgYWRkRXZlbnQobmFtZSwgYXR0cmlidXRlc09yU3RhcnRUaW1lLCB0aW1lU3RhbXApIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgY29uc3QgeyBldmVudENvdW50TGltaXQgfSA9IHRoaXMuX3NwYW5MaW1pdHM7XG4gICAgICAgIGlmIChldmVudENvdW50TGltaXQgPT09IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignTm8gZXZlbnRzIGFsbG93ZWQuJyk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudENvdW50TGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5ldmVudHMubGVuZ3RoID49IGV2ZW50Q291bnRMaW1pdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ0Ryb3BwaW5nIGV4dHJhIGV2ZW50cy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGNvcmVfMS5pc1RpbWVJbnB1dCkoYXR0cmlidXRlc09yU3RhcnRUaW1lKSkge1xuICAgICAgICAgICAgaWYgKCEoMCwgY29yZV8xLmlzVGltZUlucHV0KSh0aW1lU3RhbXApKSB7XG4gICAgICAgICAgICAgICAgdGltZVN0YW1wID0gYXR0cmlidXRlc09yU3RhcnRUaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlc09yU3RhcnRUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoMCwgY29yZV8xLnNhbml0aXplQXR0cmlidXRlcykoYXR0cmlidXRlc09yU3RhcnRUaW1lKTtcbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRpbWU6IHRoaXMuX2dldFRpbWUodGltZVN0YW1wKSxcbiAgICAgICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkTGluayhsaW5rKSB7XG4gICAgICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZExpbmtzKGxpbmtzKSB7XG4gICAgICAgIHRoaXMubGlua3MucHVzaCguLi5saW5rcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMuc3RhdHVzID0geyAuLi5zdGF0dXMgfTtcbiAgICAgICAgLy8gV2hlbiB1c2luZyB0cnktY2F0Y2gsIHRoZSBjYXVnaHQgXCJlcnJvclwiIGlzIG9mIHR5cGUgYGFueWAuIFdoZW4gdGhlbiBhc3NpZ25pbmcgYGFueWAgdG8gYHN0YXR1cy5tZXNzYWdlYCxcbiAgICAgICAgLy8gVHlwZVNjcmlwdCB3aWxsIG5vdCBlcnJvci4gV2hpbGUgdGhpcyBjYW4gaGFwcGVuIGR1cmluZyB1c2Ugb2YgYW55IEFQSSwgaXQgaXMgbW9yZSBjb21tb24gb24gU3BhbiNzZXRTdGF0dXMoKVxuICAgICAgICAvLyBhcyBpdCdzIGxpa2VseSB1c2VkIGluIGEgY2F0Y2gtYmxvY2suIFRoZXJlZm9yZSwgd2UgdmFsaWRhdGUgaWYgYHN0YXR1cy5tZXNzYWdlYCBpcyBhY3R1YWxseSBhIHN0cmluZywgbnVsbCwgb3JcbiAgICAgICAgLy8gdW5kZWZpbmVkIHRvIGF2b2lkIGFuIGluY29ycmVjdCB0eXBlIGNhdXNpbmcgaXNzdWVzIGRvd25zdHJlYW0uXG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5tZXNzYWdlICE9IG51bGwgJiYgdHlwZW9mIHN0YXR1cy5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBEcm9wcGluZyBpbnZhbGlkIHN0YXR1cy5tZXNzYWdlIG9mIHR5cGUgJyR7dHlwZW9mIHN0YXR1cy5tZXNzYWdlfScsIGV4cGVjdGVkICdzdHJpbmcnYCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdGF0dXMubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdXBkYXRlTmFtZShuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlbmQoZW5kVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNTcGFuRW5kZWQoKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgJHt0aGlzLm5hbWV9ICR7dGhpcy5fc3BhbkNvbnRleHQudHJhY2VJZH0tJHt0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWR9IC0gWW91IGNhbiBvbmx5IGNhbGwgZW5kKCkgb24gYSBzcGFuIG9uY2UuYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmVuZFRpbWUgPSB0aGlzLl9nZXRUaW1lKGVuZFRpbWUpO1xuICAgICAgICB0aGlzLl9kdXJhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lRHVyYXRpb24pKHRoaXMuc3RhcnRUaW1lLCB0aGlzLmVuZFRpbWUpO1xuICAgICAgICBpZiAodGhpcy5fZHVyYXRpb25bMF0gPCAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0luY29uc2lzdGVudCBzdGFydCBhbmQgZW5kIHRpbWUsIHN0YXJ0VGltZSA+IGVuZFRpbWUuIFNldHRpbmcgc3BhbiBkdXJhdGlvbiB0byAwbXMuJywgdGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSk7XG4gICAgICAgICAgICB0aGlzLmVuZFRpbWUgPSB0aGlzLnN0YXJ0VGltZS5zbGljZSgpO1xuICAgICAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA+IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgRHJvcHBlZCAke3RoaXMuX2Ryb3BwZWRFdmVudHNDb3VudH0gZXZlbnRzIGJlY2F1c2UgZXZlbnRDb3VudExpbWl0IHJlYWNoZWRgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zcGFuUHJvY2Vzc29yLm9uRW5kKHRoaXMpO1xuICAgIH1cbiAgICBfZ2V0VGltZShpbnApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnAgPT09ICdudW1iZXInICYmIGlucCA8PSBjb3JlXzEub3RwZXJmb3JtYW5jZS5ub3coKSkge1xuICAgICAgICAgICAgLy8gbXVzdCBiZSBhIHBlcmZvcm1hbmNlIHRpbWVzdGFtcFxuICAgICAgICAgICAgLy8gYXBwbHkgY29ycmVjdGlvbiBhbmQgY29udmVydCB0byBocnRpbWVcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29yZV8xLmhyVGltZSkoaW5wICsgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaW5wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb3JlXzEubWlsbGlzVG9IclRpbWUpKGlucCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29yZV8xLm1pbGxpc1RvSHJUaW1lKShpbnAuZ2V0VGltZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGNvcmVfMS5pc1RpbWVJbnB1dEhyVGltZSkoaW5wKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQpIHtcbiAgICAgICAgICAgIC8vIGlmIHVzZXIgcHJvdmlkZWQgYSB0aW1lIGZvciB0aGUgc3RhcnQgbWFudWFsbHlcbiAgICAgICAgICAgIC8vIHdlIGNhbid0IHVzZSBkdXJhdGlvbiB0byBjYWxjdWxhdGUgZXZlbnQvZW5kIHRpbWVzXG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvcmVfMS5taWxsaXNUb0hyVGltZSkoRGF0ZS5ub3coKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXNEdXJhdGlvbiA9IGNvcmVfMS5vdHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWU7XG4gICAgICAgIHJldHVybiAoMCwgY29yZV8xLmFkZEhyVGltZXMpKHRoaXMuc3RhcnRUaW1lLCAoMCwgY29yZV8xLm1pbGxpc1RvSHJUaW1lKShtc0R1cmF0aW9uKSk7XG4gICAgfVxuICAgIGlzUmVjb3JkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kZWQgPT09IGZhbHNlO1xuICAgIH1cbiAgICByZWNvcmRFeGNlcHRpb24oZXhjZXB0aW9uLCB0aW1lKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBleGNlcHRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fTUVTU0FHRV0gPSBleGNlcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZXhjZXB0aW9uLmNvZGUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fVFlQRV0gPSBleGNlcHRpb24uY29kZS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXhjZXB0aW9uLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fVFlQRV0gPSBleGNlcHRpb24ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleGNlcHRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VYQ0VQVElPTl9NRVNTQUdFXSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbi5zdGFjaykge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VYQ0VQVElPTl9TVEFDS1RSQUNFXSA9IGV4Y2VwdGlvbi5zdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aGVzZSBhcmUgbWluaW11bSByZXF1aXJlbWVudHMgZnJvbSBzcGVjXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fVFlQRV0gfHwgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfRVhDRVBUSU9OX01FU1NBR0VdKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50KGVudW1zXzEuRXhjZXB0aW9uRXZlbnROYW1lLCBhdHRyaWJ1dGVzLCB0aW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgRmFpbGVkIHRvIHJlY29yZCBhbiBleGNlcHRpb24gJHtleGNlcHRpb259YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XG4gICAgfVxuICAgIGdldCBlbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkO1xuICAgIH1cbiAgICBnZXQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgfVxuICAgIGdldCBkcm9wcGVkRXZlbnRzQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQ7XG4gICAgfVxuICAgIGdldCBkcm9wcGVkTGlua3NDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRMaW5rc0NvdW50O1xuICAgIH1cbiAgICBfaXNTcGFuRW5kZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYE9wZXJhdGlvbiBhdHRlbXB0ZWQgb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogJHt0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkfSwgc3BhbklkOiAke3RoaXMuX3NwYW5Db250ZXh0LnNwYW5JZH19YCk7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYENhbm5vdCBleGVjdXRlIHRoZSBvcGVyYXRpb24gb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogJHt0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkfSwgc3BhbklkOiAke3RoaXMuX3NwYW5Db250ZXh0LnNwYW5JZH19YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRlZDtcbiAgICB9XG4gICAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byB0cnVuY2F0ZSBnaXZlbiB2YWx1ZSB3aXRoaW4gc2l6ZVxuICAgIC8vIGZvciB2YWx1ZSB0eXBlIG9mIHN0cmluZywgd2lsbCB0cnVuY2F0ZSB0byBnaXZlbiBsaW1pdFxuICAgIC8vIGZvciB0eXBlIG9mIG5vbi1zdHJpbmcsIHdpbGwgcmV0dXJuIHNhbWUgdmFsdWVcbiAgICBfdHJ1bmNhdGVUb0xpbWl0VXRpbCh2YWx1ZSwgbGltaXQpIHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8PSBsaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgbGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZ2l2ZW4gYXR0cmlidXRlIHZhbHVlIGlzIG9mIHR5cGUgc3RyaW5nIGFuZCBoYXMgbW9yZSBjaGFyYWN0ZXJzIHRoYW4gZ2l2ZW4ge0Bjb2RlIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXR9IHRoZW5cbiAgICAgKiByZXR1cm4gc3RyaW5nIHdpdGggdHJ1bmNhdGVkIHRvIHtAY29kZSBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0fSBjaGFyYWN0ZXJzXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZ2l2ZW4gYXR0cmlidXRlIHZhbHVlIGlzIGFycmF5IG9mIHN0cmluZ3MgdGhlblxuICAgICAqIHJldHVybiBuZXcgYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIGVhY2ggZWxlbWVudCB0cnVuY2F0ZWQgdG8ge0Bjb2RlIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXR9IGNoYXJhY3RlcnNcbiAgICAgKlxuICAgICAqIE90aGVyd2lzZSByZXR1cm4gc2FtZSBBdHRyaWJ1dGUge0Bjb2RlIHZhbHVlfVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHRydW5jYXRlZCBhdHRyaWJ1dGUgdmFsdWUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSBzYW1lIHZhbHVlXG4gICAgICovXG4gICAgX3RydW5jYXRlVG9TaXplKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5fYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDtcbiAgICAgICAgLy8gQ2hlY2sgbGltaXRcbiAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIC8vIE5lZ2F0aXZlIHZhbHVlcyBhcmUgaW52YWxpZCwgc28gZG8gbm90IHRydW5jYXRlXG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEF0dHJpYnV0ZSB2YWx1ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtsaW1pdH1gKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cnVuY2F0ZVRvTGltaXRVdGlsKHZhbHVlLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2Ygc3RyaW5nc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAodmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh2YWwsIGxpbWl0KSA6IHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgdHlwZXMsIG5vIG5lZWQgdG8gYXBwbHkgdmFsdWUgbGVuZ3RoIGxpbWl0XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLlNwYW5JbXBsID0gU3BhbkltcGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TcGFuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TYW1wbGluZ0RlY2lzaW9uID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNhbXBsaW5nIGRlY2lzaW9uIHRoYXQgZGV0ZXJtaW5lcyBob3cgYSB7QGxpbmsgU3Bhbn0gd2lsbCBiZSByZWNvcmRlZFxuICogYW5kIGNvbGxlY3RlZC5cbiAqL1xudmFyIFNhbXBsaW5nRGVjaXNpb247XG4oZnVuY3Rpb24gKFNhbXBsaW5nRGVjaXNpb24pIHtcbiAgICAvKipcbiAgICAgKiBgU3Bhbi5pc1JlY29yZGluZygpID09PSBmYWxzZWAsIHNwYW4gd2lsbCBub3QgYmUgcmVjb3JkZWQgYW5kIGFsbCBldmVudHNcbiAgICAgKiBhbmQgYXR0cmlidXRlcyB3aWxsIGJlIGRyb3BwZWQuXG4gICAgICovXG4gICAgU2FtcGxpbmdEZWNpc2lvbltTYW1wbGluZ0RlY2lzaW9uW1wiTk9UX1JFQ09SRFwiXSA9IDBdID0gXCJOT1RfUkVDT1JEXCI7XG4gICAgLyoqXG4gICAgICogYFNwYW4uaXNSZWNvcmRpbmcoKSA9PT0gdHJ1ZWAsIGJ1dCBgU2FtcGxlZGAgZmxhZyBpbiB7QGxpbmsgVHJhY2VGbGFnc31cbiAgICAgKiBNVVNUIE5PVCBiZSBzZXQuXG4gICAgICovXG4gICAgU2FtcGxpbmdEZWNpc2lvbltTYW1wbGluZ0RlY2lzaW9uW1wiUkVDT1JEXCJdID0gMV0gPSBcIlJFQ09SRFwiO1xuICAgIC8qKlxuICAgICAqIGBTcGFuLmlzUmVjb3JkaW5nKCkgPT09IHRydWVgIEFORCBgU2FtcGxlZGAgZmxhZyBpbiB7QGxpbmsgVHJhY2VGbGFnc31cbiAgICAgKiBNVVNUIGJlIHNldC5cbiAgICAgKi9cbiAgICBTYW1wbGluZ0RlY2lzaW9uW1NhbXBsaW5nRGVjaXNpb25bXCJSRUNPUkRfQU5EX1NBTVBMRURcIl0gPSAyXSA9IFwiUkVDT1JEX0FORF9TQU1QTEVEXCI7XG59KShTYW1wbGluZ0RlY2lzaW9uID0gZXhwb3J0cy5TYW1wbGluZ0RlY2lzaW9uIHx8IChleHBvcnRzLlNhbXBsaW5nRGVjaXNpb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWx3YXlzT2ZmU2FtcGxlciA9IHZvaWQgMDtcbmNvbnN0IFNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuLi9TYW1wbGVyXCIpO1xuLyoqIFNhbXBsZXIgdGhhdCBzYW1wbGVzIG5vIHRyYWNlcy4gKi9cbmNsYXNzIEFsd2F5c09mZlNhbXBsZXIge1xuICAgIHNob3VsZFNhbXBsZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY2lzaW9uOiBTYW1wbGVyXzEuU2FtcGxpbmdEZWNpc2lvbi5OT1RfUkVDT1JELFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuICdBbHdheXNPZmZTYW1wbGVyJztcbiAgICB9XG59XG5leHBvcnRzLkFsd2F5c09mZlNhbXBsZXIgPSBBbHdheXNPZmZTYW1wbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWx3YXlzT2ZmU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWx3YXlzT25TYW1wbGVyID0gdm9pZCAwO1xuY29uc3QgU2FtcGxlcl8xID0gcmVxdWlyZShcIi4uL1NhbXBsZXJcIik7XG4vKiogU2FtcGxlciB0aGF0IHNhbXBsZXMgYWxsIHRyYWNlcy4gKi9cbmNsYXNzIEFsd2F5c09uU2FtcGxlciB7XG4gICAgc2hvdWxkU2FtcGxlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVjaXNpb246IFNhbXBsZXJfMS5TYW1wbGluZ0RlY2lzaW9uLlJFQ09SRF9BTkRfU0FNUExFRCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnQWx3YXlzT25TYW1wbGVyJztcbiAgICB9XG59XG5leHBvcnRzLkFsd2F5c09uU2FtcGxlciA9IEFsd2F5c09uU2FtcGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFsd2F5c09uU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGFyZW50QmFzZWRTYW1wbGVyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBBbHdheXNPZmZTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9BbHdheXNPZmZTYW1wbGVyXCIpO1xuY29uc3QgQWx3YXlzT25TYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9BbHdheXNPblNhbXBsZXJcIik7XG4vKipcbiAqIEEgY29tcG9zaXRlIHNhbXBsZXIgdGhhdCBlaXRoZXIgcmVzcGVjdHMgdGhlIHBhcmVudCBzcGFuJ3Mgc2FtcGxpbmcgZGVjaXNpb25cbiAqIG9yIGRlbGVnYXRlcyB0byBgZGVsZWdhdGVTYW1wbGVyYCBmb3Igcm9vdCBzcGFucy5cbiAqL1xuY2xhc3MgUGFyZW50QmFzZWRTYW1wbGVyIHtcbiAgICBfcm9vdDtcbiAgICBfcmVtb3RlUGFyZW50U2FtcGxlZDtcbiAgICBfcmVtb3RlUGFyZW50Tm90U2FtcGxlZDtcbiAgICBfbG9jYWxQYXJlbnRTYW1wbGVkO1xuICAgIF9sb2NhbFBhcmVudE5vdFNhbXBsZWQ7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBjb25maWcucm9vdDtcbiAgICAgICAgaWYgKCF0aGlzLl9yb290KSB7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikobmV3IEVycm9yKCdQYXJlbnRCYXNlZFNhbXBsZXIgbXVzdCBoYXZlIGEgcm9vdCBzYW1wbGVyIGNvbmZpZ3VyZWQnKSk7XG4gICAgICAgICAgICB0aGlzLl9yb290ID0gbmV3IEFsd2F5c09uU2FtcGxlcl8xLkFsd2F5c09uU2FtcGxlcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQgPVxuICAgICAgICAgICAgY29uZmlnLnJlbW90ZVBhcmVudFNhbXBsZWQgPz8gbmV3IEFsd2F5c09uU2FtcGxlcl8xLkFsd2F5c09uU2FtcGxlcigpO1xuICAgICAgICB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkID1cbiAgICAgICAgICAgIGNvbmZpZy5yZW1vdGVQYXJlbnROb3RTYW1wbGVkID8/IG5ldyBBbHdheXNPZmZTYW1wbGVyXzEuQWx3YXlzT2ZmU2FtcGxlcigpO1xuICAgICAgICB0aGlzLl9sb2NhbFBhcmVudFNhbXBsZWQgPVxuICAgICAgICAgICAgY29uZmlnLmxvY2FsUGFyZW50U2FtcGxlZCA/PyBuZXcgQWx3YXlzT25TYW1wbGVyXzEuQWx3YXlzT25TYW1wbGVyKCk7XG4gICAgICAgIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZCA9XG4gICAgICAgICAgICBjb25maWcubG9jYWxQYXJlbnROb3RTYW1wbGVkID8/IG5ldyBBbHdheXNPZmZTYW1wbGVyXzEuQWx3YXlzT2ZmU2FtcGxlcigpO1xuICAgIH1cbiAgICBzaG91bGRTYW1wbGUoY29udGV4dCwgdHJhY2VJZCwgc3Bhbk5hbWUsIHNwYW5LaW5kLCBhdHRyaWJ1dGVzLCBsaW5rcykge1xuICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gYXBpXzEudHJhY2UuZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmICghcGFyZW50Q29udGV4dCB8fCAhKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkocGFyZW50Q29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290LnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50Q29udGV4dC5pc1JlbW90ZSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudENvbnRleHQudHJhY2VGbGFncyAmIGFwaV8xLlRyYWNlRmxhZ3MuU0FNUExFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50Q29udGV4dC50cmFjZUZsYWdzICYgYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgUGFyZW50QmFzZWR7cm9vdD0ke3RoaXMuX3Jvb3QudG9TdHJpbmcoKX0sIHJlbW90ZVBhcmVudFNhbXBsZWQ9JHt0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCl9LCByZW1vdGVQYXJlbnROb3RTYW1wbGVkPSR7dGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpfSwgbG9jYWxQYXJlbnRTYW1wbGVkPSR7dGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCl9LCBsb2NhbFBhcmVudE5vdFNhbXBsZWQ9JHt0aGlzLl9sb2NhbFBhcmVudE5vdFNhbXBsZWQudG9TdHJpbmcoKX19YDtcbiAgICB9XG59XG5leHBvcnRzLlBhcmVudEJhc2VkU2FtcGxlciA9IFBhcmVudEJhc2VkU2FtcGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBhcmVudEJhc2VkU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgU2FtcGxlcl8xID0gcmVxdWlyZShcIi4uL1NhbXBsZXJcIik7XG4vKiogU2FtcGxlciB0aGF0IHNhbXBsZXMgYSBnaXZlbiBmcmFjdGlvbiBvZiB0cmFjZXMgYmFzZWQgb2YgdHJhY2UgaWQgZGV0ZXJtaW5pc3RpY2FsbHkuICovXG5jbGFzcyBUcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIge1xuICAgIF9yYXRpbztcbiAgICBfdXBwZXJCb3VuZDtcbiAgICBjb25zdHJ1Y3RvcihfcmF0aW8gPSAwKSB7XG4gICAgICAgIHRoaXMuX3JhdGlvID0gX3JhdGlvO1xuICAgICAgICB0aGlzLl9yYXRpbyA9IHRoaXMuX25vcm1hbGl6ZShfcmF0aW8pO1xuICAgICAgICB0aGlzLl91cHBlckJvdW5kID0gTWF0aC5mbG9vcih0aGlzLl9yYXRpbyAqIDB4ZmZmZmZmZmYpO1xuICAgIH1cbiAgICBzaG91bGRTYW1wbGUoY29udGV4dCwgdHJhY2VJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVjaXNpb246ICgwLCBhcGlfMS5pc1ZhbGlkVHJhY2VJZCkodHJhY2VJZCkgJiYgdGhpcy5fYWNjdW11bGF0ZSh0cmFjZUlkKSA8IHRoaXMuX3VwcGVyQm91bmRcbiAgICAgICAgICAgICAgICA/IFNhbXBsZXJfMS5TYW1wbGluZ0RlY2lzaW9uLlJFQ09SRF9BTkRfU0FNUExFRFxuICAgICAgICAgICAgICAgIDogU2FtcGxlcl8xLlNhbXBsaW5nRGVjaXNpb24uTk9UX1JFQ09SRCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgVHJhY2VJZFJhdGlvQmFzZWR7JHt0aGlzLl9yYXRpb319YDtcbiAgICB9XG4gICAgX25vcm1hbGl6ZShyYXRpbykge1xuICAgICAgICBpZiAodHlwZW9mIHJhdGlvICE9PSAnbnVtYmVyJyB8fCBpc05hTihyYXRpbykpXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIHJhdGlvID49IDEgPyAxIDogcmF0aW8gPD0gMCA/IDAgOiByYXRpbztcbiAgICB9XG4gICAgX2FjY3VtdWxhdGUodHJhY2VJZCkge1xuICAgICAgICBsZXQgYWNjdW11bGF0aW9uID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFjZUlkLmxlbmd0aCAvIDg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gaSAqIDg7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFyc2VJbnQodHJhY2VJZC5zbGljZShwb3MsIHBvcyArIDgpLCAxNik7XG4gICAgICAgICAgICBhY2N1bXVsYXRpb24gPSAoYWNjdW11bGF0aW9uIF4gcGFydCkgPj4+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciA9IFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRTYW1wbGVyRnJvbUVudiA9IGV4cG9ydHMubG9hZERlZmF1bHRDb25maWcgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IEFsd2F5c09mZlNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvQWx3YXlzT2ZmU2FtcGxlclwiKTtcbmNvbnN0IEFsd2F5c09uU2FtcGxlcl8xID0gcmVxdWlyZShcIi4vc2FtcGxlci9BbHdheXNPblNhbXBsZXJcIik7XG5jb25zdCBQYXJlbnRCYXNlZFNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvUGFyZW50QmFzZWRTYW1wbGVyXCIpO1xuY29uc3QgVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVyL1RyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlclwiKTtcbnZhciBUcmFjZXNTYW1wbGVyVmFsdWVzO1xuKGZ1bmN0aW9uIChUcmFjZXNTYW1wbGVyVmFsdWVzKSB7XG4gICAgVHJhY2VzU2FtcGxlclZhbHVlc1tcIkFsd2F5c09mZlwiXSA9IFwiYWx3YXlzX29mZlwiO1xuICAgIFRyYWNlc1NhbXBsZXJWYWx1ZXNbXCJBbHdheXNPblwiXSA9IFwiYWx3YXlzX29uXCI7XG4gICAgVHJhY2VzU2FtcGxlclZhbHVlc1tcIlBhcmVudEJhc2VkQWx3YXlzT2ZmXCJdID0gXCJwYXJlbnRiYXNlZF9hbHdheXNfb2ZmXCI7XG4gICAgVHJhY2VzU2FtcGxlclZhbHVlc1tcIlBhcmVudEJhc2VkQWx3YXlzT25cIl0gPSBcInBhcmVudGJhc2VkX2Fsd2F5c19vblwiO1xuICAgIFRyYWNlc1NhbXBsZXJWYWx1ZXNbXCJQYXJlbnRCYXNlZFRyYWNlSWRSYXRpb1wiXSA9IFwicGFyZW50YmFzZWRfdHJhY2VpZHJhdGlvXCI7XG4gICAgVHJhY2VzU2FtcGxlclZhbHVlc1tcIlRyYWNlSWRSYXRpb1wiXSA9IFwidHJhY2VpZHJhdGlvXCI7XG59KShUcmFjZXNTYW1wbGVyVmFsdWVzIHx8IChUcmFjZXNTYW1wbGVyVmFsdWVzID0ge30pKTtcbmNvbnN0IERFRkFVTFRfUkFUSU8gPSAxO1xuLyoqXG4gKiBMb2FkIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gRm9yIGZpZWxkcyB3aXRoIHByaW1pdGl2ZSB2YWx1ZXMsIGFueSB1c2VyLXByb3ZpZGVkXG4gKiB2YWx1ZSB3aWxsIG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUuIEZvciBmaWVsZHMgd2l0aFxuICogbm9uLXByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgYHNwYW5MaW1pdHNgKSwgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWUgd2lsbCBiZVxuICogdXNlZCB0byBleHRlbmQgdGhlIGRlZmF1bHQgdmFsdWUuXG4gKi9cbi8vIG9iamVjdCBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHRoaXMgZnVuY3Rpb24gYW5kIGNhbGxlZCB3aGVuIG5lZWRlZCBvdGhlcndpc2Vcbi8vIGVudnMgYXJlIHBhcnNlZCBiZWZvcmUgdGVzdHMgYXJlIHJhbiAtIGNhdXNlcyB0ZXN0cyB1c2luZyB0aGVzZSBlbnZzIHRvIGZhaWxcbmZ1bmN0aW9uIGxvYWREZWZhdWx0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhbXBsZXI6IGJ1aWxkU2FtcGxlckZyb21FbnYoKSxcbiAgICAgICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgICAgICBnZW5lcmFsTGltaXRzOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/PyBJbmZpbml0eSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZUNvdW50TGltaXQ6ICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICB9LFxuICAgICAgICBzcGFuTGltaXRzOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCcpID8/IEluZmluaXR5LFxuICAgICAgICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9TUEFOX0FUVFJJQlVURV9DT1VOVF9MSU1JVCcpID8/IDEyOCxcbiAgICAgICAgICAgIGxpbmtDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fTElOS19DT1VOVF9MSU1JVCcpID8/IDEyOCxcbiAgICAgICAgICAgIGV2ZW50Q291bnRMaW1pdDogKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9TUEFOX0VWRU5UX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICAgICAgYXR0cmlidXRlUGVyRXZlbnRDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9FVkVOVF9DT1VOVF9MSU1JVCcpID8/IDEyOCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVBlckxpbmtDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9MSU5LX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmxvYWREZWZhdWx0Q29uZmlnID0gbG9hZERlZmF1bHRDb25maWc7XG4vKipcbiAqIEJhc2VkIG9uIGVudmlyb25tZW50LCBidWlsZHMgYSBzYW1wbGVyLCBjb21wbGllcyB3aXRoIHNwZWNpZmljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2FtcGxlckZyb21FbnYoKSB7XG4gICAgY29uc3Qgc2FtcGxlciA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfVFJBQ0VTX1NBTVBMRVInKSA/P1xuICAgICAgICBUcmFjZXNTYW1wbGVyVmFsdWVzLlBhcmVudEJhc2VkQWx3YXlzT247XG4gICAgc3dpdGNoIChzYW1wbGVyKSB7XG4gICAgICAgIGNhc2UgVHJhY2VzU2FtcGxlclZhbHVlcy5BbHdheXNPbjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWx3YXlzT25TYW1wbGVyXzEuQWx3YXlzT25TYW1wbGVyKCk7XG4gICAgICAgIGNhc2UgVHJhY2VzU2FtcGxlclZhbHVlcy5BbHdheXNPZmY6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFsd2F5c09mZlNhbXBsZXJfMS5BbHdheXNPZmZTYW1wbGVyKCk7XG4gICAgICAgIGNhc2UgVHJhY2VzU2FtcGxlclZhbHVlcy5QYXJlbnRCYXNlZEFsd2F5c09uOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXJfMS5QYXJlbnRCYXNlZFNhbXBsZXIoe1xuICAgICAgICAgICAgICAgIHJvb3Q6IG5ldyBBbHdheXNPblNhbXBsZXJfMS5BbHdheXNPblNhbXBsZXIoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFRyYWNlc1NhbXBsZXJWYWx1ZXMuUGFyZW50QmFzZWRBbHdheXNPZmY6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhcmVudEJhc2VkU2FtcGxlcl8xLlBhcmVudEJhc2VkU2FtcGxlcih7XG4gICAgICAgICAgICAgICAgcm9vdDogbmV3IEFsd2F5c09mZlNhbXBsZXJfMS5BbHdheXNPZmZTYW1wbGVyKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBUcmFjZXNTYW1wbGVyVmFsdWVzLlRyYWNlSWRSYXRpbzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXzEuVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyKGdldFNhbXBsZXJQcm9iYWJpbGl0eUZyb21FbnYoKSk7XG4gICAgICAgIGNhc2UgVHJhY2VzU2FtcGxlclZhbHVlcy5QYXJlbnRCYXNlZFRyYWNlSWRSYXRpbzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGFyZW50QmFzZWRTYW1wbGVyXzEuUGFyZW50QmFzZWRTYW1wbGVyKHtcbiAgICAgICAgICAgICAgICByb290OiBuZXcgVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXzEuVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyKGdldFNhbXBsZXJQcm9iYWJpbGl0eUZyb21FbnYoKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoYE9URUxfVFJBQ0VTX1NBTVBMRVIgdmFsdWUgXCIke3NhbXBsZXJ9XCIgaW52YWxpZCwgZGVmYXVsdGluZyB0byBcIiR7VHJhY2VzU2FtcGxlclZhbHVlcy5QYXJlbnRCYXNlZEFsd2F5c09ufVwiLmApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXJfMS5QYXJlbnRCYXNlZFNhbXBsZXIoe1xuICAgICAgICAgICAgICAgIHJvb3Q6IG5ldyBBbHdheXNPblNhbXBsZXJfMS5BbHdheXNPblNhbXBsZXIoKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuYnVpbGRTYW1wbGVyRnJvbUVudiA9IGJ1aWxkU2FtcGxlckZyb21FbnY7XG5mdW5jdGlvbiBnZXRTYW1wbGVyUHJvYmFiaWxpdHlGcm9tRW52KCkge1xuICAgIGNvbnN0IHByb2JhYmlsaXR5ID0gKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcnKTtcbiAgICBpZiAocHJvYmFiaWxpdHkgPT0gbnVsbCkge1xuICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBPVEVMX1RSQUNFU19TQU1QTEVSX0FSRyBpcyBibGFuaywgZGVmYXVsdGluZyB0byAke0RFRkFVTFRfUkFUSU99LmApO1xuICAgICAgICByZXR1cm4gREVGQVVMVF9SQVRJTztcbiAgICB9XG4gICAgaWYgKHByb2JhYmlsaXR5IDwgMCB8fCBwcm9iYWJpbGl0eSA+IDEpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgT1RFTF9UUkFDRVNfU0FNUExFUl9BUkc9JHtwcm9iYWJpbGl0eX0gd2FzIGdpdmVuLCBidXQgaXQgaXMgb3V0IG9mIHJhbmdlIChbMC4uMV0pLCBkZWZhdWx0aW5nIHRvICR7REVGQVVMVF9SQVRJT30uYCk7XG4gICAgICAgIHJldHVybiBERUZBVUxUX1JBVElPO1xuICAgIH1cbiAgICByZXR1cm4gcHJvYmFiaWxpdHk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlY29uZmlndXJlTGltaXRzID0gZXhwb3J0cy5tZXJnZUNvbmZpZyA9IGV4cG9ydHMuREVGQVVMVF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUID0gZXhwb3J0cy5ERUZBVUxUX0FUVFJJQlVURV9DT1VOVF9MSU1JVCA9IHZvaWQgMDtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5leHBvcnRzLkRFRkFVTFRfQVRUUklCVVRFX0NPVU5UX0xJTUlUID0gMTI4O1xuZXhwb3J0cy5ERUZBVUxUX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQgPSBJbmZpbml0eTtcbi8qKlxuICogRnVuY3Rpb24gdG8gbWVyZ2UgRGVmYXVsdCBjb25maWd1cmF0aW9uIChhcyBzcGVjaWZpZWQgaW4gJy4vY29uZmlnJykgd2l0aFxuICogdXNlciBwcm92aWRlZCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcodXNlckNvbmZpZykge1xuICAgIGNvbnN0IHBlckluc3RhbmNlRGVmYXVsdHMgPSB7XG4gICAgICAgIHNhbXBsZXI6ICgwLCBjb25maWdfMS5idWlsZFNhbXBsZXJGcm9tRW52KSgpLFxuICAgIH07XG4gICAgY29uc3QgREVGQVVMVF9DT05GSUcgPSAoMCwgY29uZmlnXzEubG9hZERlZmF1bHRDb25maWcpKCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcsIHBlckluc3RhbmNlRGVmYXVsdHMsIHVzZXJDb25maWcpO1xuICAgIHRhcmdldC5nZW5lcmFsTGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuZ2VuZXJhbExpbWl0cywgdXNlckNvbmZpZy5nZW5lcmFsTGltaXRzIHx8IHt9KTtcbiAgICB0YXJnZXQuc3BhbkxpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLnNwYW5MaW1pdHMsIHVzZXJDb25maWcuc3BhbkxpbWl0cyB8fCB7fSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmV4cG9ydHMubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcbi8qKlxuICogV2hlbiBnZW5lcmFsIGxpbWl0cyBhcmUgcHJvdmlkZWQgYW5kIG1vZGVsIHNwZWNpZmljIGxpbWl0cyBhcmUgbm90LFxuICogY29uZmlndXJlcyB0aGUgbW9kZWwgc3BlY2lmaWMgbGltaXRzIGJ5IHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZ2VuZXJhbCBvbmVzLlxuICogQHBhcmFtIHVzZXJDb25maWcgVXNlciBwcm92aWRlZCB0cmFjZXIgY29uZmlndXJhdGlvblxuICovXG5mdW5jdGlvbiByZWNvbmZpZ3VyZUxpbWl0cyh1c2VyQ29uZmlnKSB7XG4gICAgY29uc3Qgc3BhbkxpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIHVzZXJDb25maWcuc3BhbkxpbWl0cyk7XG4gICAgLyoqXG4gICAgICogUmVhc3NpZ24gc3BhbiBhdHRyaWJ1dGUgY291bnQgbGltaXQgdG8gdXNlIGZpcnN0IG5vbiBudWxsIHZhbHVlIGRlZmluZWQgYnkgdXNlciBvciB1c2UgZGVmYXVsdCB2YWx1ZVxuICAgICAqL1xuICAgIHNwYW5MaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCA9XG4gICAgICAgIHVzZXJDb25maWcuc3BhbkxpbWl0cz8uYXR0cmlidXRlQ291bnRMaW1pdCA/P1xuICAgICAgICAgICAgdXNlckNvbmZpZy5nZW5lcmFsTGltaXRzPy5hdHRyaWJ1dGVDb3VudExpbWl0ID8/XG4gICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz9cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz9cbiAgICAgICAgICAgIGV4cG9ydHMuREVGQVVMVF9BVFRSSUJVVEVfQ09VTlRfTElNSVQ7XG4gICAgLyoqXG4gICAgICogUmVhc3NpZ24gc3BhbiBhdHRyaWJ1dGUgdmFsdWUgbGVuZ3RoIGxpbWl0IHRvIHVzZSBmaXJzdCBub24gbnVsbCB2YWx1ZSBkZWZpbmVkIGJ5IHVzZXIgb3IgdXNlIGRlZmF1bHQgdmFsdWVcbiAgICAgKi9cbiAgICBzcGFuTGltaXRzLmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPVxuICAgICAgICB1c2VyQ29uZmlnLnNwYW5MaW1pdHM/LmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPz9cbiAgICAgICAgICAgIHVzZXJDb25maWcuZ2VuZXJhbExpbWl0cz8uYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUJykgPz9cbiAgICAgICAgICAgIGV4cG9ydHMuREVGQVVMVF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB1c2VyQ29uZmlnLCB7IHNwYW5MaW1pdHMgfSk7XG59XG5leHBvcnRzLnJlY29uZmlndXJlTGltaXRzID0gcmVjb25maWd1cmVMaW1pdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3JCYXNlID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgU3BhblByb2Nlc3Nvcn0gdGhhdCBiYXRjaGVzIHNwYW5zIGV4cG9ydGVkIGJ5XG4gKiB0aGUgU0RLIHRoZW4gcHVzaGVzIHRoZW0gdG8gdGhlIGV4cG9ydGVyIHBpcGVsaW5lLlxuICovXG5jbGFzcyBCYXRjaFNwYW5Qcm9jZXNzb3JCYXNlIHtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX21heEV4cG9ydEJhdGNoU2l6ZTtcbiAgICBfbWF4UXVldWVTaXplO1xuICAgIF9zY2hlZHVsZWREZWxheU1pbGxpcztcbiAgICBfZXhwb3J0VGltZW91dE1pbGxpcztcbiAgICBfaXNFeHBvcnRpbmcgPSBmYWxzZTtcbiAgICBfZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIF90aW1lcjtcbiAgICBfc2h1dGRvd25PbmNlO1xuICAgIF9kcm9wcGVkU3BhbnNDb3VudCA9IDA7XG4gICAgY29uc3RydWN0b3IoX2V4cG9ydGVyLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5fZXhwb3J0ZXIgPSBfZXhwb3J0ZXI7XG4gICAgICAgIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9XG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnPy5tYXhFeHBvcnRCYXRjaFNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyBjb25maWcubWF4RXhwb3J0QmF0Y2hTaXplXG4gICAgICAgICAgICAgICAgOiAoKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9CU1BfTUFYX0VYUE9SVF9CQVRDSF9TSVpFJykgPz8gNTEyKTtcbiAgICAgICAgdGhpcy5fbWF4UXVldWVTaXplID1cbiAgICAgICAgICAgIHR5cGVvZiBjb25maWc/Lm1heFF1ZXVlU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5tYXhRdWV1ZVNpemVcbiAgICAgICAgICAgICAgICA6ICgoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0JTUF9NQVhfUVVFVUVfU0laRScpID8/IDIwNDgpO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyA9XG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnPy5zY2hlZHVsZWREZWxheU1pbGxpcyA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5zY2hlZHVsZWREZWxheU1pbGxpc1xuICAgICAgICAgICAgICAgIDogKCgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQlNQX1NDSEVEVUxFX0RFTEFZJykgPz8gNTAwMCk7XG4gICAgICAgIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMgPVxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZz8uZXhwb3J0VGltZW91dE1pbGxpcyA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5leHBvcnRUaW1lb3V0TWlsbGlzXG4gICAgICAgICAgICAgICAgOiAoKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9CU1BfRVhQT1JUX1RJTUVPVVQnKSA/PyAzMDAwMCk7XG4gICAgICAgIHRoaXMuX3NodXRkb3duT25jZSA9IG5ldyBjb3JlXzEuQmluZE9uY2VGdXR1cmUodGhpcy5fc2h1dGRvd24sIHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID4gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0JhdGNoU3BhblByb2Nlc3NvcjogbWF4RXhwb3J0QmF0Y2hTaXplIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBtYXhRdWV1ZVNpemUsIHNldHRpbmcgbWF4RXhwb3J0QmF0Y2hTaXplIHRvIG1hdGNoIG1heFF1ZXVlU2l6ZScpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdGhpcy5fbWF4UXVldWVTaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2hBbGwoKTtcbiAgICB9XG4gICAgLy8gZG9lcyBub3RoaW5nLlxuICAgIG9uU3RhcnQoX3NwYW4sIF9wYXJlbnRDb250ZXh0KSB7IH1cbiAgICBvbkVuZChzcGFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FkZFRvQnVmZmVyKHNwYW4pO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfVxuICAgIF9zaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vblNodXRkb3duKCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2hBbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEFkZCBhIHNwYW4gaW4gdGhlIGJ1ZmZlci4gKi9cbiAgICBfYWRkVG9CdWZmZXIoc3Bhbikge1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPj0gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgICAgICAvLyBsaW1pdCByZWFjaGVkLCBkcm9wIHNwYW5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ21heFF1ZXVlU2l6ZSByZWFjaGVkLCBkcm9wcGluZyBzcGFucycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBzb21lIHNwYW5zIHdlcmUgZHJvcHBlZCwgbG9nIG9uY2Ugd2l0aCBjb3VudCBvZiBzcGFucyBkcm9wcGVkXG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYERyb3BwZWQgJHt0aGlzLl9kcm9wcGVkU3BhbnNDb3VudH0gc3BhbnMgYmVjYXVzZSBtYXhRdWV1ZVNpemUgcmVhY2hlZGApO1xuICAgICAgICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbmlzaGVkU3BhbnMucHVzaChzcGFuKTtcbiAgICAgICAgdGhpcy5fbWF5YmVTdGFydFRpbWVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYWxsIHNwYW5zIHRvIHRoZSBleHBvcnRlciByZXNwZWN0aW5nIHRoZSBiYXRjaCBzaXplIGxpbWl0XG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgb24gZm9yY2VGbHVzaCBvciBzaHV0ZG93bixcbiAgICAgKiBmb3IgYWxsIG90aGVyIGNhc2VzIF9mbHVzaCBzaG91bGQgYmUgdXNlZFxuICAgICAqICovXG4gICAgX2ZsdXNoQWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgYmF0Y2hlc1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBNYXRoLmNlaWwodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggLyB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSBjb3VudDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fZmx1c2hPbmVCYXRjaCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2ZsdXNoT25lQmF0Y2goKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyVGltZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZG9uJ3Qgd2FpdCBhbnltb3JlIGZvciBleHBvcnQsIHRoaXMgd2F5IHRoZSBuZXh0IGJhdGNoIGNhbiBzdGFydFxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQnKSk7XG4gICAgICAgICAgICB9LCB0aGlzLl9leHBvcnRUaW1lb3V0TWlsbGlzKTtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZG93bnN0cmVhbSBleHBvcnRlciBjYWxscyBmcm9tIGdlbmVyYXRpbmcgc3BhbnNcbiAgICAgICAgICAgIGFwaV8xLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZmluaXNoZWQgc3BhbnMgYnVmZmVyIGhlcmUgYmVjYXVzZSB0aGUgbmV4dCBpbnZvY2F0aW9ucyBvZiB0aGUgX2ZsdXNoIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIHBhc3MgdGhlIHNhbWUgZmluaXNoZWQgc3BhbnMgdG8gdGhlIGV4cG9ydGVyIGlmIHRoZSBidWZmZXIgaXMgY2xlYXJlZFxuICAgICAgICAgICAgICAgIC8vIG91dHNpZGUgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGNhbGxiYWNrLlxuICAgICAgICAgICAgICAgIGxldCBzcGFucztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPD0gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5zID0gdGhpcy5fZmluaXNoZWRTcGFucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbnMgPSB0aGlzLl9maW5pc2hlZFNwYW5zLnNwbGljZSgwLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkb0V4cG9ydCA9ICgpID0+IHRoaXMuX2V4cG9ydGVyLmV4cG9ydChzcGFucywgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb2RlID09PSBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCdCYXRjaFNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxldCBwZW5kaW5nUmVzb3VyY2VzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3BhbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbi5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXNvdXJjZXMgPz89IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1Jlc291cmNlcy5wdXNoKHNwYW4ucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBdm9pZCBzY2hlZHVsaW5nIGEgcHJvbWlzZSB0byBtYWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIGFuZCBlYXNpZXIgdG8gdGVzdFxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVzb3VyY2VzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvRXhwb3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwZW5kaW5nUmVzb3VyY2VzKS50aGVuKGRvRXhwb3J0LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbWF5YmVTdGFydFRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5faXNFeHBvcnRpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNFeHBvcnRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hPbmVCYXRjaCgpXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHdlIG9ubHkgd2FpdCBpZiB0aGUgcXVldWUgZG9lc24ndCBoYXZlIGVub3VnaCBlbGVtZW50cyB5ZXRcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiBmbHVzaCgpLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyk7XG4gICAgICAgIC8vIGRlcGVuZGluZyBvbiBydW50aW1lLCB0aGlzIG1heSBiZSBhICdudW1iZXInIG9yIE5vZGVKUy5UaW1lb3V0XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fdGltZXIgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lci51bnJlZigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jbGVhclRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3JCYXNlID0gQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhdGNoU3BhblByb2Nlc3NvckJhc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhdGNoU3BhblByb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IEJhdGNoU3BhblByb2Nlc3NvckJhc2VfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9leHBvcnQvQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZVwiKTtcbmNsYXNzIEJhdGNoU3BhblByb2Nlc3NvciBleHRlbmRzIEJhdGNoU3BhblByb2Nlc3NvckJhc2VfMS5CYXRjaFNwYW5Qcm9jZXNzb3JCYXNlIHtcbiAgICBvblNodXRkb3duKCkgeyB9XG59XG5leHBvcnRzLkJhdGNoU3BhblByb2Nlc3NvciA9IEJhdGNoU3BhblByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhdGNoU3BhblByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmFuZG9tSWRHZW5lcmF0b3IgPSB2b2lkIDA7XG5jb25zdCBTUEFOX0lEX0JZVEVTID0gODtcbmNvbnN0IFRSQUNFX0lEX0JZVEVTID0gMTY7XG5jbGFzcyBSYW5kb21JZEdlbmVyYXRvciB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSAxNi1ieXRlIHRyYWNlIElEIGZvcm1hdHRlZC9lbmNvZGVkIGFzIGEgMzIgbG93ZXJjYXNlIGhleFxuICAgICAqIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byAxMjggYml0cy5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVRyYWNlSWQgPSBnZXRJZEdlbmVyYXRvcihUUkFDRV9JRF9CWVRFUyk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSA4LWJ5dGUgc3BhbiBJRCBmb3JtYXR0ZWQvZW5jb2RlZCBhcyBhIDE2IGxvd2VyY2FzZSBoZXhcbiAgICAgKiBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gNjQgYml0cy5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNwYW5JZCA9IGdldElkR2VuZXJhdG9yKFNQQU5fSURfQllURVMpO1xufVxuZXhwb3J0cy5SYW5kb21JZEdlbmVyYXRvciA9IFJhbmRvbUlkR2VuZXJhdG9yO1xuY29uc3QgU0hBUkVEX0JVRkZFUiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShUUkFDRV9JRF9CWVRFUyk7XG5mdW5jdGlvbiBnZXRJZEdlbmVyYXRvcihieXRlcykge1xuICAgIHJldHVybiBmdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzIC8gNDsgaSsrKSB7XG4gICAgICAgICAgICAvLyB1bnNpZ25lZCByaWdodCBzaGlmdCBkcm9wcyBkZWNpbWFsIHBhcnQgb2YgdGhlIG51bWJlclxuICAgICAgICAgICAgLy8gaXQgaXMgcmVxdWlyZWQgYmVjYXVzZSBpZiBhIG51bWJlciBiZXR3ZWVuIDIqKjMyIGFuZCAyKiozMiAtIDEgaXMgZ2VuZXJhdGVkLCBhbiBvdXQgb2YgcmFuZ2UgZXJyb3IgaXMgdGhyb3duIGJ5IHdyaXRlVUludDMyQkVcbiAgICAgICAgICAgIFNIQVJFRF9CVUZGRVIud3JpdGVVSW50MzJCRSgoTWF0aC5yYW5kb20oKSAqIDIgKiogMzIpID4+PiAwLCBpICogNCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYnVmZmVyIGlzIGFsbCAwLCBzZXQgdGhlIGxhc3QgYnl0ZSB0byAxIHRvIGd1YXJhbnRlZSBhIHZhbGlkIHczYyBpZCBpcyBnZW5lcmF0ZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoU0hBUkVEX0JVRkZFUltpXSA+IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IGJ5dGVzIC0gMSkge1xuICAgICAgICAgICAgICAgIFNIQVJFRF9CVUZGRVJbYnl0ZXMgLSAxXSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNIQVJFRF9CVUZGRVIudG9TdHJpbmcoJ2hleCcsIDAsIGJ5dGVzKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmFuZG9tSWRHZW5lcmF0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJhbmRvbUlkR2VuZXJhdG9yID0gZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3IgPSB2b2lkIDA7XG52YXIgQmF0Y2hTcGFuUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvQmF0Y2hTcGFuUHJvY2Vzc29yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmF0Y2hTcGFuUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXRjaFNwYW5Qcm9jZXNzb3JfMS5CYXRjaFNwYW5Qcm9jZXNzb3I7IH0gfSk7XG52YXIgUmFuZG9tSWRHZW5lcmF0b3JfMSA9IHJlcXVpcmUoXCIuL1JhbmRvbUlkR2VuZXJhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmFuZG9tSWRHZW5lcmF0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJhbmRvbUlkR2VuZXJhdG9yXzEuUmFuZG9tSWRHZW5lcmF0b3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmFuZG9tSWRHZW5lcmF0b3IgPSBleHBvcnRzLkJhdGNoU3BhblByb2Nlc3NvciA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmF0Y2hTcGFuUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmFuZG9tSWRHZW5lcmF0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5SYW5kb21JZEdlbmVyYXRvcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFjZXIgPSB2b2lkIDA7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBTcGFuXzEgPSByZXF1aXJlKFwiLi9TcGFuXCIpO1xuY29uc3QgdXRpbGl0eV8xID0gcmVxdWlyZShcIi4vdXRpbGl0eVwiKTtcbmNvbnN0IHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgYmFzaWMgdHJhY2VyLlxuICovXG5jbGFzcyBUcmFjZXIge1xuICAgIF9zYW1wbGVyO1xuICAgIF9nZW5lcmFsTGltaXRzO1xuICAgIF9zcGFuTGltaXRzO1xuICAgIF9pZEdlbmVyYXRvcjtcbiAgICBpbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICBfcmVzb3VyY2U7XG4gICAgX3NwYW5Qcm9jZXNzb3I7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBUcmFjZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaW5zdHJ1bWVudGF0aW9uU2NvcGUsIGNvbmZpZywgcmVzb3VyY2UsIHNwYW5Qcm9jZXNzb3IpIHtcbiAgICAgICAgY29uc3QgbG9jYWxDb25maWcgPSAoMCwgdXRpbGl0eV8xLm1lcmdlQ29uZmlnKShjb25maWcpO1xuICAgICAgICB0aGlzLl9zYW1wbGVyID0gbG9jYWxDb25maWcuc2FtcGxlcjtcbiAgICAgICAgdGhpcy5fZ2VuZXJhbExpbWl0cyA9IGxvY2FsQ29uZmlnLmdlbmVyYWxMaW1pdHM7XG4gICAgICAgIHRoaXMuX3NwYW5MaW1pdHMgPSBsb2NhbENvbmZpZy5zcGFuTGltaXRzO1xuICAgICAgICB0aGlzLl9pZEdlbmVyYXRvciA9IGNvbmZpZy5pZEdlbmVyYXRvciB8fCBuZXcgcGxhdGZvcm1fMS5SYW5kb21JZEdlbmVyYXRvcigpO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgICB0aGlzLl9zcGFuUHJvY2Vzc29yID0gc3BhblByb2Nlc3NvcjtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25TY29wZSA9IGluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgYSBuZXcgU3BhbiBvciByZXR1cm5zIHRoZSBkZWZhdWx0IE5vb3BTcGFuIGJhc2VkIG9uIHRoZSBzYW1wbGluZ1xuICAgICAqIGRlY2lzaW9uLlxuICAgICAqL1xuICAgIHN0YXJ0U3BhbihuYW1lLCBvcHRpb25zID0ge30sIGNvbnRleHQgPSBhcGkuY29udGV4dC5hY3RpdmUoKSkge1xuICAgICAgICAvLyByZW1vdmUgc3BhbiBmcm9tIGNvbnRleHQgaW4gY2FzZSBhIHJvb3Qgc3BhbiBpcyByZXF1ZXN0ZWQgdmlhIG9wdGlvbnNcbiAgICAgICAgaWYgKG9wdGlvbnMucm9vdCkge1xuICAgICAgICAgICAgY29udGV4dCA9IGFwaS50cmFjZS5kZWxldGVTcGFuKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW4gPSBhcGkudHJhY2UuZ2V0U3Bhbihjb250ZXh0KTtcbiAgICAgICAgaWYgKCgwLCBjb3JlXzEuaXNUcmFjaW5nU3VwcHJlc3NlZCkoY29udGV4dCkpIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLmRlYnVnKCdJbnN0cnVtZW50YXRpb24gc3VwcHJlc3NlZCwgcmV0dXJuaW5nIE5vb3AgU3BhbicpO1xuICAgICAgICAgICAgY29uc3Qgbm9uUmVjb3JkaW5nU3BhbiA9IGFwaS50cmFjZS53cmFwU3BhbkNvbnRleHQoYXBpLklOVkFMSURfU1BBTl9DT05URVhUKTtcbiAgICAgICAgICAgIHJldHVybiBub25SZWNvcmRpbmdTcGFuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW5Db250ZXh0ID0gcGFyZW50U3Bhbj8uc3BhbkNvbnRleHQoKTtcbiAgICAgICAgY29uc3Qgc3BhbklkID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVTcGFuSWQoKTtcbiAgICAgICAgbGV0IHZhbGlkUGFyZW50U3BhbkNvbnRleHQ7XG4gICAgICAgIGxldCB0cmFjZUlkO1xuICAgICAgICBsZXQgdHJhY2VTdGF0ZTtcbiAgICAgICAgaWYgKCFwYXJlbnRTcGFuQ29udGV4dCB8fFxuICAgICAgICAgICAgIWFwaS50cmFjZS5pc1NwYW5Db250ZXh0VmFsaWQocGFyZW50U3BhbkNvbnRleHQpKSB7XG4gICAgICAgICAgICAvLyBOZXcgcm9vdCBzcGFuLlxuICAgICAgICAgICAgdHJhY2VJZCA9IHRoaXMuX2lkR2VuZXJhdG9yLmdlbmVyYXRlVHJhY2VJZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gTmV3IGNoaWxkIHNwYW4uXG4gICAgICAgICAgICB0cmFjZUlkID0gcGFyZW50U3BhbkNvbnRleHQudHJhY2VJZDtcbiAgICAgICAgICAgIHRyYWNlU3RhdGUgPSBwYXJlbnRTcGFuQ29udGV4dC50cmFjZVN0YXRlO1xuICAgICAgICAgICAgdmFsaWRQYXJlbnRTcGFuQ29udGV4dCA9IHBhcmVudFNwYW5Db250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNwYW5LaW5kID0gb3B0aW9ucy5raW5kID8/IGFwaS5TcGFuS2luZC5JTlRFUk5BTDtcbiAgICAgICAgY29uc3QgbGlua3MgPSAob3B0aW9ucy5saW5rcyA/PyBbXSkubWFwKGxpbmsgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsaW5rLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogKDAsIGNvcmVfMS5zYW5pdGl6ZUF0dHJpYnV0ZXMpKGxpbmsuYXR0cmlidXRlcyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9ICgwLCBjb3JlXzEuc2FuaXRpemVBdHRyaWJ1dGVzKShvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICAgICAgICAvLyBtYWtlIHNhbXBsaW5nIGRlY2lzaW9uXG4gICAgICAgIGNvbnN0IHNhbXBsaW5nUmVzdWx0ID0gdGhpcy5fc2FtcGxlci5zaG91bGRTYW1wbGUoY29udGV4dCwgdHJhY2VJZCwgbmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgdHJhY2VTdGF0ZSA9IHNhbXBsaW5nUmVzdWx0LnRyYWNlU3RhdGUgPz8gdHJhY2VTdGF0ZTtcbiAgICAgICAgY29uc3QgdHJhY2VGbGFncyA9IHNhbXBsaW5nUmVzdWx0LmRlY2lzaW9uID09PSBhcGkuU2FtcGxpbmdEZWNpc2lvbi5SRUNPUkRfQU5EX1NBTVBMRURcbiAgICAgICAgICAgID8gYXBpLlRyYWNlRmxhZ3MuU0FNUExFRFxuICAgICAgICAgICAgOiBhcGkuVHJhY2VGbGFncy5OT05FO1xuICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IHsgdHJhY2VJZCwgc3BhbklkLCB0cmFjZUZsYWdzLCB0cmFjZVN0YXRlIH07XG4gICAgICAgIGlmIChzYW1wbGluZ1Jlc3VsdC5kZWNpc2lvbiA9PT0gYXBpLlNhbXBsaW5nRGVjaXNpb24uTk9UX1JFQ09SRCkge1xuICAgICAgICAgICAgYXBpLmRpYWcuZGVidWcoJ1JlY29yZGluZyBpcyBvZmYsIHByb3BhZ2F0aW5nIGNvbnRleHQgaW4gYSBub24tcmVjb3JkaW5nIHNwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IG5vblJlY29yZGluZ1NwYW4gPSBhcGkudHJhY2Uud3JhcFNwYW5Db250ZXh0KHNwYW5Db250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBub25SZWNvcmRpbmdTcGFuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBpbml0aWFsIHNwYW4gYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZXMgb2JqZWN0IG1heSBoYXZlIGJlZW4gbXV0YXRlZFxuICAgICAgICAvLyBieSB0aGUgc2FtcGxlciwgc28gd2Ugc2FuaXRpemUgdGhlIG1lcmdlZCBhdHRyaWJ1dGVzIGJlZm9yZSBzZXR0aW5nIHRoZW0uXG4gICAgICAgIGNvbnN0IGluaXRBdHRyaWJ1dGVzID0gKDAsIGNvcmVfMS5zYW5pdGl6ZUF0dHJpYnV0ZXMpKE9iamVjdC5hc3NpZ24oYXR0cmlidXRlcywgc2FtcGxpbmdSZXN1bHQuYXR0cmlidXRlcykpO1xuICAgICAgICBjb25zdCBzcGFuID0gbmV3IFNwYW5fMS5TcGFuSW1wbCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UsXG4gICAgICAgICAgICBzY29wZTogdGhpcy5pbnN0cnVtZW50YXRpb25TY29wZSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBzcGFuQ29udGV4dCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBraW5kOiBzcGFuS2luZCxcbiAgICAgICAgICAgIGxpbmtzLFxuICAgICAgICAgICAgcGFyZW50U3BhbkNvbnRleHQ6IHZhbGlkUGFyZW50U3BhbkNvbnRleHQsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBpbml0QXR0cmlidXRlcyxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogb3B0aW9ucy5zdGFydFRpbWUsXG4gICAgICAgICAgICBzcGFuUHJvY2Vzc29yOiB0aGlzLl9zcGFuUHJvY2Vzc29yLFxuICAgICAgICAgICAgc3BhbkxpbWl0czogdGhpcy5fc3BhbkxpbWl0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICBzdGFydEFjdGl2ZVNwYW4obmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICBsZXQgb3B0cztcbiAgICAgICAgbGV0IGN0eDtcbiAgICAgICAgbGV0IGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGN0eCA/PyBhcGkuY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICBjb25zdCBjb250ZXh0V2l0aFNwYW5TZXQgPSBhcGkudHJhY2Uuc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGFwaS5jb250ZXh0LndpdGgoY29udGV4dFdpdGhTcGFuU2V0LCBmbiwgdW5kZWZpbmVkLCBzcGFuKTtcbiAgICB9XG4gICAgLyoqIFJldHVybnMgdGhlIGFjdGl2ZSB7QGxpbmsgR2VuZXJhbExpbWl0c30uICovXG4gICAgZ2V0R2VuZXJhbExpbWl0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dlbmVyYWxMaW1pdHM7XG4gICAgfVxuICAgIC8qKiBSZXR1cm5zIHRoZSBhY3RpdmUge0BsaW5rIFNwYW5MaW1pdHN9LiAqL1xuICAgIGdldFNwYW5MaW1pdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuTGltaXRzO1xuICAgIH1cbn1cbmV4cG9ydHMuVHJhY2VyID0gVHJhY2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJhY2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NdWx0aVNwYW5Qcm9jZXNzb3IgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBTcGFuUHJvY2Vzc29yfSB0aGF0IHNpbXBseSBmb3J3YXJkcyBhbGxcbiAqIHJlY2VpdmVkIGV2ZW50cyB0byBhIGxpc3Qgb2Yge0BsaW5rIFNwYW5Qcm9jZXNzb3J9cy5cbiAqL1xuY2xhc3MgTXVsdGlTcGFuUHJvY2Vzc29yIHtcbiAgICBfc3BhblByb2Nlc3NvcnM7XG4gICAgY29uc3RydWN0b3IoX3NwYW5Qcm9jZXNzb3JzKSB7XG4gICAgICAgIHRoaXMuX3NwYW5Qcm9jZXNzb3JzID0gX3NwYW5Qcm9jZXNzb3JzO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHNwYW5Qcm9jZXNzb3Igb2YgdGhpcy5fc3BhblByb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goc3BhblByb2Nlc3Nvci5mb3JjZUZsdXNoKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpKGVycm9yIHx8IG5ldyBFcnJvcignTXVsdGlTcGFuUHJvY2Vzc29yOiBmb3JjZUZsdXNoIGZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uU3RhcnQoc3BhbiwgY29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IHNwYW5Qcm9jZXNzb3Igb2YgdGhpcy5fc3BhblByb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIHNwYW5Qcm9jZXNzb3Iub25TdGFydChzcGFuLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVuZChzcGFuKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3BhblByb2Nlc3NvciBvZiB0aGlzLl9zcGFuUHJvY2Vzc29ycykge1xuICAgICAgICAgICAgc3BhblByb2Nlc3Nvci5vbkVuZChzcGFuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzcGFuUHJvY2Vzc29yIG9mIHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLk11bHRpU3BhblByb2Nlc3NvciA9IE11bHRpU3BhblByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU11bHRpU3BhblByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFzaWNUcmFjZXJQcm92aWRlciA9IGV4cG9ydHMuRm9yY2VGbHVzaFN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCByZXNvdXJjZXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXNcIik7XG5jb25zdCBUcmFjZXJfMSA9IHJlcXVpcmUoXCIuL1RyYWNlclwiKTtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgTXVsdGlTcGFuUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9NdWx0aVNwYW5Qcm9jZXNzb3JcIik7XG5jb25zdCB1dGlsaXR5XzEgPSByZXF1aXJlKFwiLi91dGlsaXR5XCIpO1xudmFyIEZvcmNlRmx1c2hTdGF0ZTtcbihmdW5jdGlvbiAoRm9yY2VGbHVzaFN0YXRlKSB7XG4gICAgRm9yY2VGbHVzaFN0YXRlW0ZvcmNlRmx1c2hTdGF0ZVtcInJlc29sdmVkXCJdID0gMF0gPSBcInJlc29sdmVkXCI7XG4gICAgRm9yY2VGbHVzaFN0YXRlW0ZvcmNlRmx1c2hTdGF0ZVtcInRpbWVvdXRcIl0gPSAxXSA9IFwidGltZW91dFwiO1xuICAgIEZvcmNlRmx1c2hTdGF0ZVtGb3JjZUZsdXNoU3RhdGVbXCJlcnJvclwiXSA9IDJdID0gXCJlcnJvclwiO1xuICAgIEZvcmNlRmx1c2hTdGF0ZVtGb3JjZUZsdXNoU3RhdGVbXCJ1bnJlc29sdmVkXCJdID0gM10gPSBcInVucmVzb2x2ZWRcIjtcbn0pKEZvcmNlRmx1c2hTdGF0ZSA9IGV4cG9ydHMuRm9yY2VGbHVzaFN0YXRlIHx8IChleHBvcnRzLkZvcmNlRmx1c2hTdGF0ZSA9IHt9KSk7XG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2ljIHRyYWNlciBwcm92aWRlciB3aGljaCBwbGF0Zm9ybSBsaWJyYXJpZXMgY2FuIGV4dGVuZFxuICovXG5jbGFzcyBCYXNpY1RyYWNlclByb3ZpZGVyIHtcbiAgICBfY29uZmlnO1xuICAgIF90cmFjZXJzID0gbmV3IE1hcCgpO1xuICAgIF9yZXNvdXJjZTtcbiAgICBfYWN0aXZlU3BhblByb2Nlc3NvcjtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBjb25zdCBtZXJnZWRDb25maWcgPSAoMCwgY29yZV8xLm1lcmdlKSh7fSwgKDAsIGNvbmZpZ18xLmxvYWREZWZhdWx0Q29uZmlnKSgpLCAoMCwgdXRpbGl0eV8xLnJlY29uZmlndXJlTGltaXRzKShjb25maWcpKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSBtZXJnZWRDb25maWcucmVzb3VyY2UgPz8gKDAsIHJlc291cmNlc18xLmRlZmF1bHRSZXNvdXJjZSkoKTtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgbWVyZ2VkQ29uZmlnLCB7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzcGFuUHJvY2Vzc29ycyA9IFtdO1xuICAgICAgICBpZiAoY29uZmlnLnNwYW5Qcm9jZXNzb3JzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwYW5Qcm9jZXNzb3JzLnB1c2goLi4uY29uZmlnLnNwYW5Qcm9jZXNzb3JzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IE11bHRpU3BhblByb2Nlc3Nvcl8xLk11bHRpU3BhblByb2Nlc3NvcihzcGFuUHJvY2Vzc29ycyk7XG4gICAgfVxuICAgIGdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke25hbWV9QCR7dmVyc2lvbiB8fCAnJ306JHtvcHRpb25zPy5zY2hlbWFVcmwgfHwgJyd9YDtcbiAgICAgICAgaWYgKCF0aGlzLl90cmFjZXJzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl90cmFjZXJzLnNldChrZXksIG5ldyBUcmFjZXJfMS5UcmFjZXIoeyBuYW1lLCB2ZXJzaW9uLCBzY2hlbWFVcmw6IG9wdGlvbnM/LnNjaGVtYVVybCB9LCB0aGlzLl9jb25maWcsIHRoaXMuX3Jlc291cmNlLCB0aGlzLl9hY3RpdmVTcGFuUHJvY2Vzc29yKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlcnMuZ2V0KGtleSk7XG4gICAgfVxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLl9jb25maWcuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5fYWN0aXZlU3BhblByb2Nlc3NvclsnX3NwYW5Qcm9jZXNzb3JzJ10ubWFwKChzcGFuUHJvY2Vzc29yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJbnRlcnZhbCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBFcnJvcihgU3BhbiBwcm9jZXNzb3IgZGlkIG5vdCBjb21wbGV0ZWQgd2l0aGluIHRpbWVvdXQgcGVyaW9kIG9mICR7dGltZW91dH0gbXNgKSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gRm9yY2VGbHVzaFN0YXRlLnRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgICAgICAgc3BhblByb2Nlc3NvclxuICAgICAgICAgICAgICAgICAgICAuZm9yY2VGbHVzaCgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gRm9yY2VGbHVzaFN0YXRlLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gRm9yY2VGbHVzaFN0YXRlLnJlc29sdmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEludGVydmFsKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBGb3JjZUZsdXNoU3RhdGUuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdCAhPT0gRm9yY2VGbHVzaFN0YXRlLnJlc29sdmVkKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9ycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KFtlcnJvcl0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlU3BhblByb2Nlc3Nvci5zaHV0ZG93bigpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzaWNUcmFjZXJQcm92aWRlciA9IEJhc2ljVHJhY2VyUHJvdmlkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXNpY1RyYWNlclByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25zb2xlU3BhbkV4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIFRoaXMgaXMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFNwYW5FeHBvcnRlcn0gdGhhdCBwcmludHMgc3BhbnMgdG8gdGhlXG4gKiBjb25zb2xlLiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLlxuICpcbiAqIE5PVEU6IFRoaXMge0BsaW5rIFNwYW5FeHBvcnRlcn0gaXMgaW50ZW5kZWQgZm9yIGRpYWdub3N0aWNzIHVzZSBvbmx5LCBvdXRwdXQgcmVuZGVyZWQgdG8gdGhlIGNvbnNvbGUgbWF5IGNoYW5nZSBhdCBhbnkgdGltZS5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuY2xhc3MgQ29uc29sZVNwYW5FeHBvcnRlciB7XG4gICAgLyoqXG4gICAgICogRXhwb3J0IHNwYW5zLlxuICAgICAqIEBwYXJhbSBzcGFuc1xuICAgICAqIEBwYXJhbSByZXN1bHRDYWxsYmFja1xuICAgICAqL1xuICAgIGV4cG9ydChzcGFucywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbmRTcGFucyhzcGFucywgcmVzdWx0Q2FsbGJhY2spO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0ZG93biB0aGUgZXhwb3J0ZXIuXG4gICAgICovXG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMuX3NlbmRTcGFucyhbXSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcmNlRmx1c2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyBhbnkgcGVuZGluZyBzcGFucyBpbiBleHBvcnRlclxuICAgICAqL1xuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29udmVydHMgc3BhbiBpbmZvIGludG8gbW9yZSByZWFkYWJsZSBmb3JtYXRcbiAgICAgKiBAcGFyYW0gc3BhblxuICAgICAqL1xuICAgIF9leHBvcnRJbmZvKHNwYW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogc3Bhbi5yZXNvdXJjZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvblNjb3BlOiBzcGFuLmluc3RydW1lbnRhdGlvblNjb3BlLFxuICAgICAgICAgICAgdHJhY2VJZDogc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAgICAgICBwYXJlbnRTcGFuQ29udGV4dDogc3Bhbi5wYXJlbnRTcGFuQ29udGV4dCxcbiAgICAgICAgICAgIHRyYWNlU3RhdGU6IHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZVN0YXRlPy5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIG5hbWU6IHNwYW4ubmFtZSxcbiAgICAgICAgICAgIGlkOiBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgICAgICAga2luZDogc3Bhbi5raW5kLFxuICAgICAgICAgICAgdGltZXN0YW1wOiAoMCwgY29yZV8xLmhyVGltZVRvTWljcm9zZWNvbmRzKShzcGFuLnN0YXJ0VGltZSksXG4gICAgICAgICAgICBkdXJhdGlvbjogKDAsIGNvcmVfMS5oclRpbWVUb01pY3Jvc2Vjb25kcykoc3Bhbi5kdXJhdGlvbiksXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBzcGFuLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzdGF0dXM6IHNwYW4uc3RhdHVzLFxuICAgICAgICAgICAgZXZlbnRzOiBzcGFuLmV2ZW50cyxcbiAgICAgICAgICAgIGxpbmtzOiBzcGFuLmxpbmtzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG93aW5nIHNwYW5zIGluIGNvbnNvbGVcbiAgICAgKiBAcGFyYW0gc3BhbnNcbiAgICAgKiBAcGFyYW0gZG9uZVxuICAgICAqL1xuICAgIF9zZW5kU3BhbnMoc3BhbnMsIGRvbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRpcih0aGlzLl9leHBvcnRJbmZvKHNwYW4pLCB7IGRlcHRoOiAzIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9uZSh7IGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkNvbnNvbGVTcGFuRXhwb3J0ZXIgPSBDb25zb2xlU3BhbkV4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29uc29sZVNwYW5FeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5NZW1vcnlTcGFuRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8qKlxuICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSXQgc3RvcmVzIHRoZSBleHBvcnRlZCBzcGFuc1xuICogaW4gYSBsaXN0IGluIG1lbW9yeSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlIGBnZXRGaW5pc2hlZFNwYW5zKClgXG4gKiBtZXRob2QuXG4gKi9cbmNsYXNzIEluTWVtb3J5U3BhbkV4cG9ydGVyIHtcbiAgICBfZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgZXhwb3J0ZXIgaGFzIGJlZW4gXCJzaHV0ZG93bi5cIlxuICAgICAqIFdoZW4gZmFsc2UsIGV4cG9ydGVkIHNwYW5zIHdpbGwgbm90IGJlIHN0b3JlZCBpbi1tZW1vcnkuXG4gICAgICovXG4gICAgX3N0b3BwZWQgPSBmYWxzZTtcbiAgICBleHBvcnQoc3BhbnMsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdG9wcGVkKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignRXhwb3J0ZXIgaGFzIGJlZW4gc3RvcHBlZCcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2ZpbmlzaGVkU3BhbnMucHVzaCguLi5zcGFucyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pLCAwKTtcbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9maW5pc2hlZFNwYW5zID0gW107XG4gICAgICAgIHJldHVybiB0aGlzLmZvcmNlRmx1c2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyBhbnkgcGVuZGluZyBzcGFucyBpbiB0aGUgZXhwb3J0ZXJcbiAgICAgKi9cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9maW5pc2hlZFNwYW5zID0gW107XG4gICAgfVxuICAgIGdldEZpbmlzaGVkU3BhbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZFNwYW5zO1xuICAgIH1cbn1cbmV4cG9ydHMuSW5NZW1vcnlTcGFuRXhwb3J0ZXIgPSBJbk1lbW9yeVNwYW5FeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUluTWVtb3J5U3BhbkV4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TaW1wbGVTcGFuUHJvY2Vzc29yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgU3BhblByb2Nlc3Nvcn0gdGhhdCBjb252ZXJ0cyB0aGUge0BsaW5rIFNwYW59XG4gKiB0byB7QGxpbmsgUmVhZGFibGVTcGFufSBhbmQgcGFzc2VzIGl0IHRvIHRoZSBjb25maWd1cmVkIGV4cG9ydGVyLlxuICpcbiAqIE9ubHkgc3BhbnMgdGhhdCBhcmUgc2FtcGxlZCBhcmUgY29udmVydGVkLlxuICpcbiAqIE5PVEU6IFRoaXMge0BsaW5rIFNwYW5Qcm9jZXNzb3J9IGV4cG9ydHMgZXZlcnkgZW5kZWQgc3BhbiBpbmRpdmlkdWFsbHkgaW5zdGVhZCBvZiBiYXRjaGluZyBzcGFucyB0b2dldGhlciwgd2hpY2ggY2F1c2VzIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIG92ZXJoZWFkIHdpdGggbW9zdCBleHBvcnRlcnMuIEZvciBwcm9kdWN0aW9uIHVzZSwgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSB7QGxpbmsgQmF0Y2hTcGFuUHJvY2Vzc29yfSBpbnN0ZWFkLlxuICovXG5jbGFzcyBTaW1wbGVTcGFuUHJvY2Vzc29yIHtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBfcGVuZGluZ0V4cG9ydHM7XG4gICAgY29uc3RydWN0b3IoX2V4cG9ydGVyKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydGVyID0gX2V4cG9ydGVyO1xuICAgICAgICB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgY29yZV8xLkJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0V4cG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIGFzeW5jIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5fcGVuZGluZ0V4cG9ydHMpKTtcbiAgICAgICAgaWYgKHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2gpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblN0YXJ0KF9zcGFuLCBfcGFyZW50Q29udGV4dCkgeyB9XG4gICAgb25FbmQoc3Bhbikge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VGbGFncyAmIGFwaV8xLlRyYWNlRmxhZ3MuU0FNUExFRCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwZW5kaW5nRXhwb3J0ID0gdGhpcy5fZG9FeHBvcnQoc3BhbikuY2F0Y2goZXJyID0+ICgwLCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKShlcnIpKTtcbiAgICAgICAgLy8gRW5xdWV1ZSB0aGlzIGV4cG9ydCB0byB0aGUgcGVuZGluZyBsaXN0IHNvIGl0IGNhbiBiZSBmbHVzaGVkIGJ5IHRoZSB1c2VyLlxuICAgICAgICB0aGlzLl9wZW5kaW5nRXhwb3J0cy5hZGQocGVuZGluZ0V4cG9ydCk7XG4gICAgICAgIHZvaWQgcGVuZGluZ0V4cG9ydC5maW5hbGx5KCgpID0+IHRoaXMuX3BlbmRpbmdFeHBvcnRzLmRlbGV0ZShwZW5kaW5nRXhwb3J0KSk7XG4gICAgfVxuICAgIGFzeW5jIF9kb0V4cG9ydChzcGFuKSB7XG4gICAgICAgIGlmIChzcGFuLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSByZXNvdXJjZSBpcyBmdWxseSByZXNvbHZlZCBiZWZvcmUgZXhwb3J0aW5nLlxuICAgICAgICAgICAgYXdhaXQgc3Bhbi5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzPy4oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb3JlXzEuaW50ZXJuYWwuX2V4cG9ydCh0aGlzLl9leHBvcnRlciwgW3NwYW5dKTtcbiAgICAgICAgaWYgKHJlc3VsdC5jb2RlICE9PSBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTKSB7XG4gICAgICAgICAgICB0aHJvdyAocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgbmV3IEVycm9yKGBTaW1wbGVTcGFuUHJvY2Vzc29yOiBzcGFuIGV4cG9ydCBmYWlsZWQgKHN0YXR1cyAke3Jlc3VsdH0pYCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9XG4gICAgX3NodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICB9XG59XG5leHBvcnRzLlNpbXBsZVNwYW5Qcm9jZXNzb3IgPSBTaW1wbGVTcGFuUHJvY2Vzc29yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2ltcGxlU3BhblByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9vcFNwYW5Qcm9jZXNzb3IgPSB2b2lkIDA7XG4vKiogTm8tb3AgaW1wbGVtZW50YXRpb24gb2YgU3BhblByb2Nlc3NvciAqL1xuY2xhc3MgTm9vcFNwYW5Qcm9jZXNzb3Ige1xuICAgIG9uU3RhcnQoX3NwYW4sIF9jb250ZXh0KSB7IH1cbiAgICBvbkVuZChfc3BhbikgeyB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm9vcFNwYW5Qcm9jZXNzb3IgPSBOb29wU3BhblByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BTcGFuUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TYW1wbGluZ0RlY2lzaW9uID0gZXhwb3J0cy5UcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIgPSBleHBvcnRzLlBhcmVudEJhc2VkU2FtcGxlciA9IGV4cG9ydHMuQWx3YXlzT25TYW1wbGVyID0gZXhwb3J0cy5BbHdheXNPZmZTYW1wbGVyID0gZXhwb3J0cy5Ob29wU3BhblByb2Nlc3NvciA9IGV4cG9ydHMuU2ltcGxlU3BhblByb2Nlc3NvciA9IGV4cG9ydHMuSW5NZW1vcnlTcGFuRXhwb3J0ZXIgPSBleHBvcnRzLkNvbnNvbGVTcGFuRXhwb3J0ZXIgPSBleHBvcnRzLlJhbmRvbUlkR2VuZXJhdG9yID0gZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3IgPSBleHBvcnRzLkJhc2ljVHJhY2VyUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgQmFzaWNUcmFjZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vQmFzaWNUcmFjZXJQcm92aWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhc2ljVHJhY2VyUHJvdmlkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2ljVHJhY2VyUHJvdmlkZXJfMS5CYXNpY1RyYWNlclByb3ZpZGVyOyB9IH0pO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhdGNoU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5CYXRjaFNwYW5Qcm9jZXNzb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5kb21JZEdlbmVyYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5SYW5kb21JZEdlbmVyYXRvcjsgfSB9KTtcbnZhciBDb25zb2xlU3BhbkV4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvQ29uc29sZVNwYW5FeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnNvbGVTcGFuRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbnNvbGVTcGFuRXhwb3J0ZXJfMS5Db25zb2xlU3BhbkV4cG9ydGVyOyB9IH0pO1xudmFyIEluTWVtb3J5U3BhbkV4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvSW5NZW1vcnlTcGFuRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbk1lbW9yeVNwYW5FeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSW5NZW1vcnlTcGFuRXhwb3J0ZXJfMS5Jbk1lbW9yeVNwYW5FeHBvcnRlcjsgfSB9KTtcbnZhciBTaW1wbGVTcGFuUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvU2ltcGxlU3BhblByb2Nlc3NvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNpbXBsZVNwYW5Qcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNpbXBsZVNwYW5Qcm9jZXNzb3JfMS5TaW1wbGVTcGFuUHJvY2Vzc29yOyB9IH0pO1xudmFyIE5vb3BTcGFuUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvTm9vcFNwYW5Qcm9jZXNzb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb29wU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcFNwYW5Qcm9jZXNzb3JfMS5Ob29wU3BhblByb2Nlc3NvcjsgfSB9KTtcbnZhciBBbHdheXNPZmZTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVyL0Fsd2F5c09mZlNhbXBsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBbHdheXNPZmZTYW1wbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBbHdheXNPZmZTYW1wbGVyXzEuQWx3YXlzT2ZmU2FtcGxlcjsgfSB9KTtcbnZhciBBbHdheXNPblNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvQWx3YXlzT25TYW1wbGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWx3YXlzT25TYW1wbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBbHdheXNPblNhbXBsZXJfMS5BbHdheXNPblNhbXBsZXI7IH0gfSk7XG52YXIgUGFyZW50QmFzZWRTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVyL1BhcmVudEJhc2VkU2FtcGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcmVudEJhc2VkU2FtcGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUGFyZW50QmFzZWRTYW1wbGVyXzEuUGFyZW50QmFzZWRTYW1wbGVyOyB9IH0pO1xudmFyIFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcl8xID0gcmVxdWlyZShcIi4vc2FtcGxlci9UcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcl8xLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcjsgfSB9KTtcbnZhciBTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9TYW1wbGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2FtcGxpbmdEZWNpc2lvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2FtcGxlcl8xLlNhbXBsaW5nRGVjaXNpb247IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob2RlVHJhY2VyUHJvdmlkZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgY29udGV4dF9hc3luY19ob29rc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvbnRleHQtYXN5bmMtaG9va3NcIik7XG5jb25zdCBzZGtfdHJhY2VfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5mdW5jdGlvbiBzZXR1cENvbnRleHRNYW5hZ2VyKGNvbnRleHRNYW5hZ2VyKSB7XG4gICAgLy8gbnVsbCBtZWFucyAnZG8gbm90IHJlZ2lzdGVyJ1xuICAgIGlmIChjb250ZXh0TWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHVuZGVmaW5lZCBtZWFucyAncmVnaXN0ZXIgZGVmYXVsdCdcbiAgICBpZiAoY29udGV4dE1hbmFnZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29udGV4dE1hbmFnZXIgPSBuZXcgY29udGV4dF9hc3luY19ob29rc18xLkFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXIoKTtcbiAgICAgICAgZGVmYXVsdENvbnRleHRNYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhcGlfMS5jb250ZXh0LnNldEdsb2JhbENvbnRleHRNYW5hZ2VyKGRlZmF1bHRDb250ZXh0TWFuYWdlcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGV4dE1hbmFnZXIuZW5hYmxlKCk7XG4gICAgYXBpXzEuY29udGV4dC5zZXRHbG9iYWxDb250ZXh0TWFuYWdlcihjb250ZXh0TWFuYWdlcik7XG59XG5mdW5jdGlvbiBzZXR1cFByb3BhZ2F0b3IocHJvcGFnYXRvcikge1xuICAgIC8vIG51bGwgbWVhbnMgJ2RvIG5vdCByZWdpc3RlcidcbiAgICBpZiAocHJvcGFnYXRvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHVuZGVmaW5lZCBtZWFucyAncmVnaXN0ZXIgZGVmYXVsdCdcbiAgICBpZiAocHJvcGFnYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFwaV8xLnByb3BhZ2F0aW9uLnNldEdsb2JhbFByb3BhZ2F0b3IobmV3IGNvcmVfMS5Db21wb3NpdGVQcm9wYWdhdG9yKHtcbiAgICAgICAgICAgIHByb3BhZ2F0b3JzOiBbXG4gICAgICAgICAgICAgICAgbmV3IGNvcmVfMS5XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yKCksXG4gICAgICAgICAgICAgICAgbmV3IGNvcmVfMS5XM0NCYWdnYWdlUHJvcGFnYXRvcigpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwaV8xLnByb3BhZ2F0aW9uLnNldEdsb2JhbFByb3BhZ2F0b3IocHJvcGFnYXRvcik7XG59XG4vKipcbiAqIFJlZ2lzdGVyIHRoaXMgVHJhY2VyUHJvdmlkZXIgZm9yIHVzZSB3aXRoIHRoZSBPcGVuVGVsZW1ldHJ5IEFQSS5cbiAqIFVuZGVmaW5lZCB2YWx1ZXMgbWF5IGJlIHJlcGxhY2VkIHdpdGggZGVmYXVsdHMsIGFuZFxuICogbnVsbCB2YWx1ZXMgd2lsbCBiZSBza2lwcGVkLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIFNESyByZWdpc3RyYXRpb25cbiAqL1xuY2xhc3MgTm9kZVRyYWNlclByb3ZpZGVyIGV4dGVuZHMgc2RrX3RyYWNlX2Jhc2VfMS5CYXNpY1RyYWNlclByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcihjb25maWcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGlzIFRyYWNlclByb3ZpZGVyIGZvciB1c2Ugd2l0aCB0aGUgT3BlblRlbGVtZXRyeSBBUEkuXG4gICAgICogVW5kZWZpbmVkIHZhbHVlcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cywgYW5kXG4gICAgICogbnVsbCB2YWx1ZXMgd2lsbCBiZSBza2lwcGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgU0RLIHJlZ2lzdHJhdGlvblxuICAgICAqL1xuICAgIHJlZ2lzdGVyKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIGFwaV8xLnRyYWNlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyKHRoaXMpO1xuICAgICAgICBzZXR1cENvbnRleHRNYW5hZ2VyKGNvbmZpZy5jb250ZXh0TWFuYWdlcik7XG4gICAgICAgIHNldHVwUHJvcGFnYXRvcihjb25maWcucHJvcGFnYXRvcik7XG4gICAgfVxufVxuZXhwb3J0cy5Ob2RlVHJhY2VyUHJvdmlkZXIgPSBOb2RlVHJhY2VyUHJvdmlkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob2RlVHJhY2VyUHJvdmlkZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciA9IGV4cG9ydHMuU2ltcGxlU3BhblByb2Nlc3NvciA9IGV4cG9ydHMuU2FtcGxpbmdEZWNpc2lvbiA9IGV4cG9ydHMuUmFuZG9tSWRHZW5lcmF0b3IgPSBleHBvcnRzLlBhcmVudEJhc2VkU2FtcGxlciA9IGV4cG9ydHMuTm9vcFNwYW5Qcm9jZXNzb3IgPSBleHBvcnRzLkluTWVtb3J5U3BhbkV4cG9ydGVyID0gZXhwb3J0cy5Db25zb2xlU3BhbkV4cG9ydGVyID0gZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3IgPSBleHBvcnRzLkJhc2ljVHJhY2VyUHJvdmlkZXIgPSBleHBvcnRzLkFsd2F5c09uU2FtcGxlciA9IGV4cG9ydHMuQWx3YXlzT2ZmU2FtcGxlciA9IGV4cG9ydHMuTm9kZVRyYWNlclByb3ZpZGVyID0gdm9pZCAwO1xudmFyIE5vZGVUcmFjZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vTm9kZVRyYWNlclByb3ZpZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm9kZVRyYWNlclByb3ZpZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOb2RlVHJhY2VyUHJvdmlkZXJfMS5Ob2RlVHJhY2VyUHJvdmlkZXI7IH0gfSk7XG52YXIgc2RrX3RyYWNlX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFsd2F5c09mZlNhbXBsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka190cmFjZV9iYXNlXzEuQWx3YXlzT2ZmU2FtcGxlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFsd2F5c09uU2FtcGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5BbHdheXNPblNhbXBsZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNpY1RyYWNlclByb3ZpZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLkJhc2ljVHJhY2VyUHJvdmlkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXRjaFNwYW5Qcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka190cmFjZV9iYXNlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uc29sZVNwYW5FeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5Db25zb2xlU3BhbkV4cG9ydGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5NZW1vcnlTcGFuRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka190cmFjZV9iYXNlXzEuSW5NZW1vcnlTcGFuRXhwb3J0ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb29wU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5Ob29wU3BhblByb2Nlc3NvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcmVudEJhc2VkU2FtcGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5QYXJlbnRCYXNlZFNhbXBsZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5kb21JZEdlbmVyYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5SYW5kb21JZEdlbmVyYXRvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNhbXBsaW5nRGVjaXNpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka190cmFjZV9iYXNlXzEuU2FtcGxpbmdEZWNpc2lvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNpbXBsZVNwYW5Qcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka190cmFjZV9iYXNlXzEuU2ltcGxlU3BhblByb2Nlc3NvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5UcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5WRVJTSU9OID0gJzAuMjA3LjAnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDE5IGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfTUFYX1JFQ0VJVkVfTUVTU0FHRV9MRU5HVEggPSBleHBvcnRzLkRFRkFVTFRfTUFYX1NFTkRfTUVTU0FHRV9MRU5HVEggPSBleHBvcnRzLlByb3BhZ2F0ZSA9IGV4cG9ydHMuTG9nVmVyYm9zaXR5ID0gZXhwb3J0cy5TdGF0dXMgPSB2b2lkIDA7XG52YXIgU3RhdHVzO1xuKGZ1bmN0aW9uIChTdGF0dXMpIHtcbiAgICBTdGF0dXNbU3RhdHVzW1wiT0tcIl0gPSAwXSA9IFwiT0tcIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiQ0FOQ0VMTEVEXCJdID0gMV0gPSBcIkNBTkNFTExFRFwiO1xuICAgIFN0YXR1c1tTdGF0dXNbXCJVTktOT1dOXCJdID0gMl0gPSBcIlVOS05PV05cIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiSU5WQUxJRF9BUkdVTUVOVFwiXSA9IDNdID0gXCJJTlZBTElEX0FSR1VNRU5UXCI7XG4gICAgU3RhdHVzW1N0YXR1c1tcIkRFQURMSU5FX0VYQ0VFREVEXCJdID0gNF0gPSBcIkRFQURMSU5FX0VYQ0VFREVEXCI7XG4gICAgU3RhdHVzW1N0YXR1c1tcIk5PVF9GT1VORFwiXSA9IDVdID0gXCJOT1RfRk9VTkRcIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiQUxSRUFEWV9FWElTVFNcIl0gPSA2XSA9IFwiQUxSRUFEWV9FWElTVFNcIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiUEVSTUlTU0lPTl9ERU5JRURcIl0gPSA3XSA9IFwiUEVSTUlTU0lPTl9ERU5JRURcIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiUkVTT1VSQ0VfRVhIQVVTVEVEXCJdID0gOF0gPSBcIlJFU09VUkNFX0VYSEFVU1RFRFwiO1xuICAgIFN0YXR1c1tTdGF0dXNbXCJGQUlMRURfUFJFQ09ORElUSU9OXCJdID0gOV0gPSBcIkZBSUxFRF9QUkVDT05ESVRJT05cIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiQUJPUlRFRFwiXSA9IDEwXSA9IFwiQUJPUlRFRFwiO1xuICAgIFN0YXR1c1tTdGF0dXNbXCJPVVRfT0ZfUkFOR0VcIl0gPSAxMV0gPSBcIk9VVF9PRl9SQU5HRVwiO1xuICAgIFN0YXR1c1tTdGF0dXNbXCJVTklNUExFTUVOVEVEXCJdID0gMTJdID0gXCJVTklNUExFTUVOVEVEXCI7XG4gICAgU3RhdHVzW1N0YXR1c1tcIklOVEVSTkFMXCJdID0gMTNdID0gXCJJTlRFUk5BTFwiO1xuICAgIFN0YXR1c1tTdGF0dXNbXCJVTkFWQUlMQUJMRVwiXSA9IDE0XSA9IFwiVU5BVkFJTEFCTEVcIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiREFUQV9MT1NTXCJdID0gMTVdID0gXCJEQVRBX0xPU1NcIjtcbiAgICBTdGF0dXNbU3RhdHVzW1wiVU5BVVRIRU5USUNBVEVEXCJdID0gMTZdID0gXCJVTkFVVEhFTlRJQ0FURURcIjtcbn0pKFN0YXR1cyB8fCAoZXhwb3J0cy5TdGF0dXMgPSBTdGF0dXMgPSB7fSkpO1xudmFyIExvZ1ZlcmJvc2l0eTtcbihmdW5jdGlvbiAoTG9nVmVyYm9zaXR5KSB7XG4gICAgTG9nVmVyYm9zaXR5W0xvZ1ZlcmJvc2l0eVtcIkRFQlVHXCJdID0gMF0gPSBcIkRFQlVHXCI7XG4gICAgTG9nVmVyYm9zaXR5W0xvZ1ZlcmJvc2l0eVtcIklORk9cIl0gPSAxXSA9IFwiSU5GT1wiO1xuICAgIExvZ1ZlcmJvc2l0eVtMb2dWZXJib3NpdHlbXCJFUlJPUlwiXSA9IDJdID0gXCJFUlJPUlwiO1xuICAgIExvZ1ZlcmJvc2l0eVtMb2dWZXJib3NpdHlbXCJOT05FXCJdID0gM10gPSBcIk5PTkVcIjtcbn0pKExvZ1ZlcmJvc2l0eSB8fCAoZXhwb3J0cy5Mb2dWZXJib3NpdHkgPSBMb2dWZXJib3NpdHkgPSB7fSkpO1xuLyoqXG4gKiBOT1RFOiBUaGlzIGVudW0gaXMgbm90IGN1cnJlbnRseSB1c2VkIGluIGFueSBpbXBsZW1lbnRlZCBBUEkgaW4gdGhpc1xuICogbGlicmFyeS4gSXQgaXMgaW5jbHVkZWQgb25seSBmb3IgdHlwZSBwYXJpdHkgd2l0aCB0aGUgb3RoZXIgaW1wbGVtZW50YXRpb24uXG4gKi9cbnZhciBQcm9wYWdhdGU7XG4oZnVuY3Rpb24gKFByb3BhZ2F0ZSkge1xuICAgIFByb3BhZ2F0ZVtQcm9wYWdhdGVbXCJERUFETElORVwiXSA9IDFdID0gXCJERUFETElORVwiO1xuICAgIFByb3BhZ2F0ZVtQcm9wYWdhdGVbXCJDRU5TVVNfU1RBVFNfQ09OVEVYVFwiXSA9IDJdID0gXCJDRU5TVVNfU1RBVFNfQ09OVEVYVFwiO1xuICAgIFByb3BhZ2F0ZVtQcm9wYWdhdGVbXCJDRU5TVVNfVFJBQ0lOR19DT05URVhUXCJdID0gNF0gPSBcIkNFTlNVU19UUkFDSU5HX0NPTlRFWFRcIjtcbiAgICBQcm9wYWdhdGVbUHJvcGFnYXRlW1wiQ0FOQ0VMTEFUSU9OXCJdID0gOF0gPSBcIkNBTkNFTExBVElPTlwiO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMvYmxvYi9tYXN0ZXIvaW5jbHVkZS9ncnBjL2ltcGwvY29kZWdlbi9wcm9wYWdhdGlvbl9iaXRzLmgjTDQzXG4gICAgUHJvcGFnYXRlW1Byb3BhZ2F0ZVtcIkRFRkFVTFRTXCJdID0gNjU1MzVdID0gXCJERUZBVUxUU1wiO1xufSkoUHJvcGFnYXRlIHx8IChleHBvcnRzLlByb3BhZ2F0ZSA9IFByb3BhZ2F0ZSA9IHt9KSk7XG4vLyAtMSBtZWFucyB1bmxpbWl0ZWRcbmV4cG9ydHMuREVGQVVMVF9NQVhfU0VORF9NRVNTQUdFX0xFTkdUSCA9IC0xO1xuLy8gNCBNQiBkZWZhdWx0XG5leHBvcnRzLkRFRkFVTFRfTUFYX1JFQ0VJVkVfTUVTU0FHRV9MRU5HVEggPSA0ICogMTAyNCAqIDEwMjQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xudmFyIF9hLCBfYiwgX2MsIF9kO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2cgPSBleHBvcnRzLnNldExvZ2dlclZlcmJvc2l0eSA9IGV4cG9ydHMuc2V0TG9nZ2VyID0gZXhwb3J0cy5nZXRMb2dnZXIgPSB2b2lkIDA7XG5leHBvcnRzLnRyYWNlID0gdHJhY2U7XG5leHBvcnRzLmlzVHJhY2VyRW5hYmxlZCA9IGlzVHJhY2VyRW5hYmxlZDtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgcHJvY2Vzc18xID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5jb25zdCBjbGllbnRWZXJzaW9uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IERFRkFVTFRfTE9HR0VSID0ge1xuICAgIGVycm9yOiAobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRSAnICsgbWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpO1xuICAgIH0sXG4gICAgaW5mbzogKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0kgJyArIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICB9LFxuICAgIGRlYnVnOiAobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRCAnICsgbWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpO1xuICAgIH0sXG59O1xubGV0IF9sb2dnZXIgPSBERUZBVUxUX0xPR0dFUjtcbmxldCBfbG9nVmVyYm9zaXR5ID0gY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SO1xuY29uc3QgdmVyYm9zaXR5U3RyaW5nID0gKF9iID0gKF9hID0gcHJvY2Vzcy5lbnYuR1JQQ19OT0RFX1ZFUkJPU0lUWSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvY2Vzcy5lbnYuR1JQQ19WRVJCT1NJVFkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuc3dpdGNoICh2ZXJib3NpdHlTdHJpbmcudG9VcHBlckNhc2UoKSkge1xuICAgIGNhc2UgJ0RFQlVHJzpcbiAgICAgICAgX2xvZ1ZlcmJvc2l0eSA9IGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRztcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnSU5GTyc6XG4gICAgICAgIF9sb2dWZXJib3NpdHkgPSBjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuSU5GTztcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRVJST1InOlxuICAgICAgICBfbG9nVmVyYm9zaXR5ID0gY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SO1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdOT05FJzpcbiAgICAgICAgX2xvZ1ZlcmJvc2l0eSA9IGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5OT05FO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgIC8vIElnbm9yZSBhbnkgb3RoZXIgdmFsdWVzXG59XG5jb25zdCBnZXRMb2dnZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIF9sb2dnZXI7XG59O1xuZXhwb3J0cy5nZXRMb2dnZXIgPSBnZXRMb2dnZXI7XG5jb25zdCBzZXRMb2dnZXIgPSAobG9nZ2VyKSA9PiB7XG4gICAgX2xvZ2dlciA9IGxvZ2dlcjtcbn07XG5leHBvcnRzLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbmNvbnN0IHNldExvZ2dlclZlcmJvc2l0eSA9ICh2ZXJib3NpdHkpID0+IHtcbiAgICBfbG9nVmVyYm9zaXR5ID0gdmVyYm9zaXR5O1xufTtcbmV4cG9ydHMuc2V0TG9nZ2VyVmVyYm9zaXR5ID0gc2V0TG9nZ2VyVmVyYm9zaXR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IGxvZyA9IChzZXZlcml0eSwgLi4uYXJncykgPT4ge1xuICAgIGxldCBsb2dGdW5jdGlvbjtcbiAgICBpZiAoc2V2ZXJpdHkgPj0gX2xvZ1ZlcmJvc2l0eSkge1xuICAgICAgICBzd2l0Y2ggKHNldmVyaXR5KSB7XG4gICAgICAgICAgICBjYXNlIGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRzpcbiAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbiA9IF9sb2dnZXIuZGVidWc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5JTkZPOlxuICAgICAgICAgICAgICAgIGxvZ0Z1bmN0aW9uID0gX2xvZ2dlci5pbmZvO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuRVJST1I6XG4gICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24gPSBfbG9nZ2VyLmVycm9yO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8qIEZhbGwgYmFjayB0byBfbG9nZ2VyLmVycm9yIHdoZW4gb3RoZXIgbWV0aG9kcyBhcmUgbm90IGF2YWlsYWJsZSBmb3JcbiAgICAgICAgICogY29tcGF0aWJsaXR5IHdpdGggb2xkZXIgYmVoYXZpb3IgdGhhdCBhbHdheXMgbG9nZ2VkIHRvIF9sb2dnZXIuZXJyb3IgKi9cbiAgICAgICAgaWYgKCFsb2dGdW5jdGlvbikge1xuICAgICAgICAgICAgbG9nRnVuY3Rpb24gPSBfbG9nZ2VyLmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2dGdW5jdGlvbikge1xuICAgICAgICAgICAgbG9nRnVuY3Rpb24uYmluZChfbG9nZ2VyKSguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnRzLmxvZyA9IGxvZztcbmNvbnN0IHRyYWNlcnNTdHJpbmcgPSAoX2QgPSAoX2MgPSBwcm9jZXNzLmVudi5HUlBDX05PREVfVFJBQ0UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHByb2Nlc3MuZW52LkdSUENfVFJBQ0UpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6ICcnO1xuY29uc3QgZW5hYmxlZFRyYWNlcnMgPSBuZXcgU2V0KCk7XG5jb25zdCBkaXNhYmxlZFRyYWNlcnMgPSBuZXcgU2V0KCk7XG5mb3IgKGNvbnN0IHRyYWNlck5hbWUgb2YgdHJhY2Vyc1N0cmluZy5zcGxpdCgnLCcpKSB7XG4gICAgaWYgKHRyYWNlck5hbWUuc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgICAgIGRpc2FibGVkVHJhY2Vycy5hZGQodHJhY2VyTmFtZS5zdWJzdHJpbmcoMSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW5hYmxlZFRyYWNlcnMuYWRkKHRyYWNlck5hbWUpO1xuICAgIH1cbn1cbmNvbnN0IGFsbEVuYWJsZWQgPSBlbmFibGVkVHJhY2Vycy5oYXMoJ2FsbCcpO1xuZnVuY3Rpb24gdHJhY2Uoc2V2ZXJpdHksIHRyYWNlciwgdGV4dCkge1xuICAgIGlmIChpc1RyYWNlckVuYWJsZWQodHJhY2VyKSkge1xuICAgICAgICAoMCwgZXhwb3J0cy5sb2cpKHNldmVyaXR5LCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgK1xuICAgICAgICAgICAgJyB8IHYnICtcbiAgICAgICAgICAgIGNsaWVudFZlcnNpb24gK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIHByb2Nlc3NfMS5waWQgK1xuICAgICAgICAgICAgJyB8ICcgK1xuICAgICAgICAgICAgdHJhY2VyICtcbiAgICAgICAgICAgICcgfCAnICtcbiAgICAgICAgICAgIHRleHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVHJhY2VyRW5hYmxlZCh0cmFjZXIpIHtcbiAgICByZXR1cm4gKCFkaXNhYmxlZFRyYWNlcnMuaGFzKHRyYWNlcikgJiYgKGFsbEVuYWJsZWQgfHwgZW5hYmxlZFRyYWNlcnMuaGFzKHRyYWNlcikpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dpbmcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2U7XG5leHBvcnRzLmdldEVycm9yQ29kZSA9IGdldEVycm9yQ29kZTtcbmZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZShlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RXJyb3JDb2RlKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgZXJyb3IgIT09IG51bGwgJiZcbiAgICAgICAgJ2NvZGUnIGluIGVycm9yICYmXG4gICAgICAgIHR5cGVvZiBlcnJvci5jb2RlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gZXJyb3IuY29kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0YWRhdGEgPSB2b2lkIDA7XG5jb25zdCBsb2dnaW5nXzEgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBlcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JcIik7XG5jb25zdCBMRUdBTF9LRVlfUkVHRVggPSAvXls6MC05YS16Xy4tXSskLztcbmNvbnN0IExFR0FMX05PTl9CSU5BUllfVkFMVUVfUkVHRVggPSAvXlsgLX5dKiQvO1xuZnVuY3Rpb24gaXNMZWdhbEtleShrZXkpIHtcbiAgICByZXR1cm4gTEVHQUxfS0VZX1JFR0VYLnRlc3Qoa2V5KTtcbn1cbmZ1bmN0aW9uIGlzTGVnYWxOb25CaW5hcnlWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiBMRUdBTF9OT05fQklOQVJZX1ZBTFVFX1JFR0VYLnRlc3QodmFsdWUpO1xufVxuZnVuY3Rpb24gaXNCaW5hcnlLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5lbmRzV2l0aCgnLWJpbicpO1xufVxuZnVuY3Rpb24gaXNDdXN0b21NZXRhZGF0YShrZXkpIHtcbiAgICByZXR1cm4gIWtleS5zdGFydHNXaXRoKCdncnBjLScpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIWlzTGVnYWxLZXkoa2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleSBcIicgKyBrZXkgKyAnXCIgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc0JpbmFyeUtleShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXlzIHRoYXQgZW5kIHdpdGggJy1iaW4nIG11c3QgaGF2ZSBCdWZmZXIgdmFsdWVzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXlzIHRoYXQgZG9uJ3QgZW5kIHdpdGggJy1iaW4nIG11c3QgaGF2ZSBTdHJpbmcgdmFsdWVzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0xlZ2FsTm9uQmluYXJ5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBzdHJpbmcgdmFsdWUgXCInICsgdmFsdWUgKyAnXCIgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEEgY2xhc3MgZm9yIHN0b3JpbmcgbWV0YWRhdGEuIEtleXMgYXJlIG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlIEFTQ0lJLlxuICovXG5jbGFzcyBNZXRhZGF0YSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxSZXByID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLm9wYXF1ZURhdGEgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGJ5IHJlcGxhY2luZyBhbnkgb3RoZXIgdmFsdWVzXG4gICAgICogYXNzb2NpYXRlZCB3aXRoIHRoYXQga2V5LiBOb3JtYWxpemVzIHRoZSBrZXkuXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHdob3NlIHZhbHVlIHNob3VsZCBiZSBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuIE11c3QgYmUgYSBidWZmZXIgaWYgYW5kIG9ubHlcbiAgICAgKiAgIGlmIHRoZSBub3JtYWxpemVkIGtleSBlbmRzIHdpdGggJy1iaW4nLlxuICAgICAqL1xuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuICAgICAgICB2YWxpZGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFJlcHIuc2V0KGtleSwgW3ZhbHVlXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGdpdmVuIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGJ5IGFwcGVuZGluZyB0byBhIGxpc3Qgb2YgcHJldmlvdXNcbiAgICAgKiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQga2V5LiBOb3JtYWxpemVzIHRoZSBrZXkuXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGZvciB3aGljaCBhIG5ldyB2YWx1ZSBzaG91bGQgYmUgYXBwZW5kZWQuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhZGQuIE11c3QgYmUgYSBidWZmZXIgaWYgYW5kIG9ubHlcbiAgICAgKiAgIGlmIHRoZSBub3JtYWxpemVkIGtleSBlbmRzIHdpdGggJy1iaW4nLlxuICAgICAqL1xuICAgIGFkZChrZXksIHZhbHVlKSB7XG4gICAgICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuICAgICAgICB2YWxpZGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHRoaXMuaW50ZXJuYWxSZXByLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsUmVwci5zZXQoa2V5LCBbdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4ga2V5IGFuZCBhbnkgYXNzb2NpYXRlZCB2YWx1ZXMuIE5vcm1hbGl6ZXMgdGhlIGtleS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHJlbW92ZShrZXkpIHtcbiAgICAgICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG4gICAgICAgIC8vIHZhbGlkYXRlKGtleSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxSZXByLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgbGlzdCBvZiBhbGwgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LiBOb3JtYWxpemVzIHRoZSBrZXkuXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHdob3NlIHZhbHVlIHNob3VsZCBiZSByZXRyaWV2ZWQuXG4gICAgICogQHJldHVybiBBIGxpc3Qgb2YgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgICAqL1xuICAgIGdldChrZXkpIHtcbiAgICAgICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG4gICAgICAgIC8vIHZhbGlkYXRlKGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsUmVwci5nZXQoa2V5KSB8fCBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyBhIHBsYWluIG9iamVjdCBtYXBwaW5nIGVhY2gga2V5IHRvIHRoZSBmaXJzdCB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4gICAgICogVGhpcyByZWZsZWN0cyB0aGUgbW9zdCBjb21tb24gd2F5IHRoYXQgcGVvcGxlIHdpbGwgd2FudCB0byBzZWUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybiBBIGtleS92YWx1ZSBtYXBwaW5nIG9mIHRoZSBtZXRhZGF0YS5cbiAgICAgKi9cbiAgICBnZXRNYXAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlc10gb2YgdGhpcy5pbnRlcm5hbFJlcHIpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB2YWx1ZXNbMF07XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBCdWZmZXIuaXNCdWZmZXIodikgPyBCdWZmZXIuZnJvbSh2KSA6IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvbmVzIHRoZSBtZXRhZGF0YSBvYmplY3QuXG4gICAgICogQHJldHVybiBUaGUgbmV3bHkgY2xvbmVkIG9iamVjdC5cbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgbmV3TWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEodGhpcy5vcHRpb25zKTtcbiAgICAgICAgY29uc3QgbmV3SW50ZXJuYWxSZXByID0gbmV3TWV0YWRhdGEuaW50ZXJuYWxSZXByO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmludGVybmFsUmVwcikge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20odik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5ld0ludGVybmFsUmVwci5zZXQoa2V5LCBjbG9uZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld01ldGFkYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIGEgZ2l2ZW4gTWV0YWRhdGEgb2JqZWN0IGludG8gdGhpcyBvbmUuXG4gICAgICogSWYgYm90aCB0aGlzIG9iamVjdCBhbmQgdGhlIGdpdmVuIG9iamVjdCBoYXZlIHZhbHVlcyBpbiB0aGUgc2FtZSBrZXksXG4gICAgICogdmFsdWVzIGZyb20gdGhlIG90aGVyIE1ldGFkYXRhIG9iamVjdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgb2JqZWN0J3NcbiAgICAgKiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIG90aGVyIEEgTWV0YWRhdGEgb2JqZWN0LlxuICAgICAqL1xuICAgIG1lcmdlKG90aGVyKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBvdGhlci5pbnRlcm5hbFJlcHIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZFZhbHVlID0gKHRoaXMuaW50ZXJuYWxSZXByLmdldChrZXkpIHx8IFtdKS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxSZXByLnNldChrZXksIG1lcmdlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgZ2V0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBPdXRnb2luZ0h0dHBIZWFkZXJzIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIGh0dHAyIEFQSS5cbiAgICAgKi9cbiAgICB0b0h0dHAySGVhZGVycygpIHtcbiAgICAgICAgLy8gTk9URTogTm9kZSA8OC45IGZvcm1hdHMgaHR0cDIgaGVhZGVycyBpbmNvcnJlY3RseS5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiB0aGlzLmludGVybmFsUmVwcikge1xuICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSB1c2VyJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG9iamVjdCBpcyBsaW1pdGVkIHRvXG4gICAgICAgICAgICAvLyB0aHJvdWdoIGl0cyBwdWJsaWMgQVBJIChpLmUuIGtleXMgYW5kIHZhbHVlcyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQpLlxuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZXMubWFwKGJ1ZlRvU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBKU09OLnN0cmluZ2lmeSB0byBzaG93IGFuIG9iamVjdFxuICAgICAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXRhZGF0YSBtYXAuXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZXNdIG9mIHRoaXMuaW50ZXJuYWxSZXByKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYWRkaXRpb25hbCBkYXRhIG9mIGFueSB0eXBlIHRvIHRoZSBtZXRhZGF0YSBvYmplY3QsIHdoaWNoIHdpbGwgbm90XG4gICAgICogYmUgaW5jbHVkZWQgd2hlbiBzZW5kaW5nIGhlYWRlcnMuIFRoZSBkYXRhIGNhbiBsYXRlciBiZSByZXRyaWV2ZWQgd2l0aFxuICAgICAqIGBnZXRPcGFxdWVgLiBLZXlzIHdpdGggdGhlIHByZWZpeCBgZ3JwY2AgYXJlIHJlc2VydmVkIGZvciB1c2UgYnkgdGhpc1xuICAgICAqIGxpYnJhcnkuXG4gICAgICogQHBhcmFtIGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHNldE9wYXF1ZShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMub3BhcXVlRGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGRhdGEgcHJldmlvdXNseSBhZGRlZCB3aXRoIGBzZXRPcGFxdWVgLlxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldE9wYXF1ZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BhcXVlRGF0YS5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBNZXRhZGF0YSBvYmplY3QgYmFzZWQgZmllbGRzIGluIGEgZ2l2ZW4gSW5jb21pbmdIdHRwSGVhZGVyc1xuICAgICAqIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gaGVhZGVycyBBbiBJbmNvbWluZ0h0dHBIZWFkZXJzIG9iamVjdC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbUh0dHAySGVhZGVycyhoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNZXRhZGF0YSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgLy8gUmVzZXJ2ZWQgaGVhZGVycyAoYmVnaW5uaW5nIHdpdGggYDpgKSBhcmUgbm90IHZhbGlkIGtleXMuXG4gICAgICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSA9PT0gJzonKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeUtleShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGtleSwgQnVmZmVyLmZyb20odmFsdWUsICdiYXNlNjQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VzdG9tTWV0YWRhdGEoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zcGxpdCgnLCcpLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoa2V5LCBCdWZmZXIuZnJvbSh2LnRyaW0oKSwgJ2Jhc2U2NCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoa2V5LCBCdWZmZXIuZnJvbSh2YWx1ZXMsICdiYXNlNjQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsZWQgdG8gYWRkIG1ldGFkYXRhIGVudHJ5ICR7a2V5fTogJHt2YWx1ZXN9LiAkeygwLCBlcnJvcl8xLmdldEVycm9yTWVzc2FnZSkoZXJyb3IpfS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMtbm9kZS9pc3N1ZXMvMTE3M2A7XG4gICAgICAgICAgICAgICAgKDAsIGxvZ2dpbmdfMS5sb2cpKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5FUlJPUiwgbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLk1ldGFkYXRhID0gTWV0YWRhdGE7XG5jb25zdCBidWZUb1N0cmluZyA9ICh2YWwpID0+IHtcbiAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHZhbCkgPyB2YWwudG9TdHJpbmcoJ2Jhc2U2NCcpIDogdmFsO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1ldGFkYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2FsbENyZWRlbnRpYWxzID0gdm9pZCAwO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuZnVuY3Rpb24gaXNDdXJyZW50T2F1dGgyQ2xpZW50KGNsaWVudCkge1xuICAgIHJldHVybiAoJ2dldFJlcXVlc3RIZWFkZXJzJyBpbiBjbGllbnQgJiZcbiAgICAgICAgdHlwZW9mIGNsaWVudC5nZXRSZXF1ZXN0SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4vKipcbiAqIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgZ2VuZXJpYyBtZXRob2Qgb2YgYWRkaW5nIGF1dGhlbnRpY2F0aW9uLXJlbGF0ZWRcbiAqIG1ldGFkYXRhIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMuXG4gKi9cbmNsYXNzIENhbGxDcmVkZW50aWFscyB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDYWxsQ3JlZGVudGlhbHMgb2JqZWN0IGZyb20gYSBnaXZlbiBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlc1xuICAgICAqIE1ldGFkYXRhIG9iamVjdHMuXG4gICAgICogQHBhcmFtIG1ldGFkYXRhR2VuZXJhdG9yIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgc2V0IG9mIG9wdGlvbnMsIGFuZFxuICAgICAqIGdlbmVyYXRlcyBhIE1ldGFkYXRhIG9iamVjdCBiYXNlZCBvbiB0aGVzZSBvcHRpb25zLCB3aGljaCBpcyBwYXNzZWQgYmFja1xuICAgICAqIHRvIHRoZSBjYWxsZXIgdmlhIGEgc3VwcGxpZWQgKGVyciwgbWV0YWRhdGEpIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGVGcm9tTWV0YWRhdGFHZW5lcmF0b3IobWV0YWRhdGFHZW5lcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVDYWxsQ3JlZGVudGlhbHMobWV0YWRhdGFHZW5lcmF0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBnUlBDIGNyZWRlbnRpYWwgZnJvbSBhIEdvb2dsZSBjcmVkZW50aWFsIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gZ29vZ2xlQ3JlZGVudGlhbHMgVGhlIGF1dGhlbnRpY2F0aW9uIGNsaWVudCB0byB1c2UuXG4gICAgICogQHJldHVybiBUaGUgcmVzdWx0aW5nIENhbGxDcmVkZW50aWFscyBvYmplY3QuXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZUZyb21Hb29nbGVDcmVkZW50aWFsKGdvb2dsZUNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHJldHVybiBDYWxsQ3JlZGVudGlhbHMuY3JlYXRlRnJvbU1ldGFkYXRhR2VuZXJhdG9yKChvcHRpb25zLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgbGV0IGdldEhlYWRlcnM7XG4gICAgICAgICAgICBpZiAoaXNDdXJyZW50T2F1dGgyQ2xpZW50KGdvb2dsZUNyZWRlbnRpYWxzKSkge1xuICAgICAgICAgICAgICAgIGdldEhlYWRlcnMgPSBnb29nbGVDcmVkZW50aWFscy5nZXRSZXF1ZXN0SGVhZGVycyhvcHRpb25zLnNlcnZpY2VfdXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldEhlYWRlcnMgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdvb2dsZUNyZWRlbnRpYWxzLmdldFJlcXVlc3RNZXRhZGF0YShvcHRpb25zLnNlcnZpY2VfdXJsLCAoZXJyLCBoZWFkZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSGVhZGVycyBub3Qgc2V0IGJ5IG1ldGFkYXRhIHBsdWdpbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGhlYWRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldEhlYWRlcnMudGhlbihoZWFkZXJzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuYWRkKGtleSwgaGVhZGVyc1trZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgbWV0YWRhdGEpO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRW1wdHlDYWxsQ3JlZGVudGlhbHMoKTtcbiAgICB9XG59XG5leHBvcnRzLkNhbGxDcmVkZW50aWFscyA9IENhbGxDcmVkZW50aWFscztcbmNsYXNzIENvbXBvc2VkQ2FsbENyZWRlbnRpYWxzIGV4dGVuZHMgQ2FsbENyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3RvcihjcmVkcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNyZWRzID0gY3JlZHM7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlTWV0YWRhdGEob3B0aW9ucykge1xuICAgICAgICBjb25zdCBiYXNlID0gbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkID0gYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5jcmVkcy5tYXAoY3JlZCA9PiBjcmVkLmdlbmVyYXRlTWV0YWRhdGEob3B0aW9ucykpKTtcbiAgICAgICAgZm9yIChjb25zdCBnZW4gb2YgZ2VuZXJhdGVkKSB7XG4gICAgICAgICAgICBiYXNlLm1lcmdlKGdlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfVxuICAgIGNvbXBvc2Uob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NlZENhbGxDcmVkZW50aWFscyh0aGlzLmNyZWRzLmNvbmNhdChbb3RoZXJdKSk7XG4gICAgfVxuICAgIF9lcXVhbHMob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBDb21wb3NlZENhbGxDcmVkZW50aWFscykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlZHMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUuX2VxdWFscyhvdGhlci5jcmVkc1tpbmRleF0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNsYXNzIFNpbmdsZUNhbGxDcmVkZW50aWFscyBleHRlbmRzIENhbGxDcmVkZW50aWFscyB7XG4gICAgY29uc3RydWN0b3IobWV0YWRhdGFHZW5lcmF0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YUdlbmVyYXRvciA9IG1ldGFkYXRhR2VuZXJhdG9yO1xuICAgIH1cbiAgICBnZW5lcmF0ZU1ldGFkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWV0YWRhdGFHZW5lcmF0b3Iob3B0aW9ucywgKGVyciwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29tcG9zZShvdGhlcikge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2VkQ2FsbENyZWRlbnRpYWxzKFt0aGlzLCBvdGhlcl0pO1xuICAgIH1cbiAgICBfZXF1YWxzKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgU2luZ2xlQ2FsbENyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUdlbmVyYXRvciA9PT0gb3RoZXIubWV0YWRhdGFHZW5lcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBFbXB0eUNhbGxDcmVkZW50aWFscyBleHRlbmRzIENhbGxDcmVkZW50aWFscyB7XG4gICAgZ2VuZXJhdGVNZXRhZGF0YShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSk7XG4gICAgfVxuICAgIGNvbXBvc2Uob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH1cbiAgICBfZXF1YWxzKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIEVtcHR5Q2FsbENyZWRlbnRpYWxzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhbGwtY3JlZGVudGlhbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DSVBIRVJfU1VJVEVTID0gdm9pZCAwO1xuZXhwb3J0cy5nZXREZWZhdWx0Um9vdHNEYXRhID0gZ2V0RGVmYXVsdFJvb3RzRGF0YTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuZXhwb3J0cy5DSVBIRVJfU1VJVEVTID0gcHJvY2Vzcy5lbnYuR1JQQ19TU0xfQ0lQSEVSX1NVSVRFUztcbmNvbnN0IERFRkFVTFRfUk9PVFNfRklMRV9QQVRIID0gcHJvY2Vzcy5lbnYuR1JQQ19ERUZBVUxUX1NTTF9ST09UU19GSUxFX1BBVEg7XG5sZXQgZGVmYXVsdFJvb3RzRGF0YSA9IG51bGw7XG5mdW5jdGlvbiBnZXREZWZhdWx0Um9vdHNEYXRhKCkge1xuICAgIGlmIChERUZBVUxUX1JPT1RTX0ZJTEVfUEFUSCkge1xuICAgICAgICBpZiAoZGVmYXVsdFJvb3RzRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGVmYXVsdFJvb3RzRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhERUZBVUxUX1JPT1RTX0ZJTEVfUEFUSCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRSb290c0RhdGE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGxzLWhlbHBlcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZVVyaSA9IHBhcnNlVXJpO1xuZXhwb3J0cy5zcGxpdEhvc3RQb3J0ID0gc3BsaXRIb3N0UG9ydDtcbmV4cG9ydHMuY29tYmluZUhvc3RQb3J0ID0gY29tYmluZUhvc3RQb3J0O1xuZXhwb3J0cy51cmlUb1N0cmluZyA9IHVyaVRvU3RyaW5nO1xuLypcbiAqIFRoZSBncm91cHMgY29ycmVzcG9uZCB0byBVUkkgcGFydHMgYXMgZm9sbG93czpcbiAqIDEuIHNjaGVtZVxuICogMi4gYXV0aG9yaXR5XG4gKiAzLiBwYXRoXG4gKi9cbmNvbnN0IFVSSV9SRUdFWCA9IC9eKD86KFtBLVphLXowLTkrLi1dKyk6KT8oPzpcXC9cXC8oW14vXSopXFwvKT8oLispJC87XG5mdW5jdGlvbiBwYXJzZVVyaSh1cmlTdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWRVcmkgPSBVUklfUkVHRVguZXhlYyh1cmlTdHJpbmcpO1xuICAgIGlmIChwYXJzZWRVcmkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtZTogcGFyc2VkVXJpWzFdLFxuICAgICAgICBhdXRob3JpdHk6IHBhcnNlZFVyaVsyXSxcbiAgICAgICAgcGF0aDogcGFyc2VkVXJpWzNdLFxuICAgIH07XG59XG5jb25zdCBOVU1CRVJfUkVHRVggPSAvXlxcZCskLztcbmZ1bmN0aW9uIHNwbGl0SG9zdFBvcnQocGF0aCkge1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ1snKSkge1xuICAgICAgICBjb25zdCBob3N0RW5kID0gcGF0aC5pbmRleE9mKCddJyk7XG4gICAgICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdCA9IHBhdGguc3Vic3RyaW5nKDEsIGhvc3RFbmQpO1xuICAgICAgICAvKiBPbmx5IGFuIElQdjYgYWRkcmVzcyBzaG91bGQgYmUgaW4gYnJhY2tldGVkIG5vdGF0aW9uLCBhbmQgYW4gSVB2NlxuICAgICAgICAgKiBhZGRyZXNzIHNob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBjb2xvbiAqL1xuICAgICAgICBpZiAoaG9zdC5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5sZW5ndGggPiBob3N0RW5kICsgMSkge1xuICAgICAgICAgICAgaWYgKHBhdGhbaG9zdEVuZCArIDFdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0U3RyaW5nID0gcGF0aC5zdWJzdHJpbmcoaG9zdEVuZCArIDIpO1xuICAgICAgICAgICAgICAgIGlmIChOVU1CRVJfUkVHRVgudGVzdChwb3J0U3RyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6ICtwb3J0U3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBzcGxpdFBhdGggPSBwYXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgIC8qIEV4YWN0bHkgb25lIGNvbG9uIG1lYW5zIHRoYXQgdGhpcyBpcyBob3N0OnBvcnQuIFplcm8gY29sb25zIG1lYW5zIHRoYXRcbiAgICAgICAgICogdGhlcmUgaXMgbm8gcG9ydC4gQW5kIG11bHRpcGxlIGNvbG9ucyBtZWFucyB0aGF0IHRoaXMgaXMgYSBiYXJlIElQdjZcbiAgICAgICAgICogYWRkcmVzcyB3aXRoIG5vIHBvcnQgKi9cbiAgICAgICAgaWYgKHNwbGl0UGF0aC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGlmIChOVU1CRVJfUkVHRVgudGVzdChzcGxpdFBhdGhbMV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaG9zdDogc3BsaXRQYXRoWzBdLFxuICAgICAgICAgICAgICAgICAgICBwb3J0OiArc3BsaXRQYXRoWzFdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaG9zdDogcGF0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjb21iaW5lSG9zdFBvcnQoaG9zdFBvcnQpIHtcbiAgICBpZiAoaG9zdFBvcnQucG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBob3N0UG9ydC5ob3N0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gT25seSBhbiBJUHY2IGhvc3Qgc2hvdWxkIGluY2x1ZGUgYSBjb2xvblxuICAgICAgICBpZiAoaG9zdFBvcnQuaG9zdC5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYFske2hvc3RQb3J0Lmhvc3R9XToke2hvc3RQb3J0LnBvcnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtob3N0UG9ydC5ob3N0fToke2hvc3RQb3J0LnBvcnR9YDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHVyaVRvU3RyaW5nKHVyaSkge1xuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICBpZiAodXJpLnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCArPSB1cmkuc2NoZW1lICsgJzonO1xuICAgIH1cbiAgICBpZiAodXJpLmF1dGhvcml0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLy8nICsgdXJpLmF1dGhvcml0eSArICcvJztcbiAgICB9XG4gICAgcmVzdWx0ICs9IHVyaS5wYXRoO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmktcGFyc2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ0hBTk5FTF9BUkdTX0NPTkZJR19TRUxFQ1RPUl9LRVkgPSB2b2lkIDA7XG5leHBvcnRzLnJlZ2lzdGVyUmVzb2x2ZXIgPSByZWdpc3RlclJlc29sdmVyO1xuZXhwb3J0cy5yZWdpc3RlckRlZmF1bHRTY2hlbWUgPSByZWdpc3RlckRlZmF1bHRTY2hlbWU7XG5leHBvcnRzLmNyZWF0ZVJlc29sdmVyID0gY3JlYXRlUmVzb2x2ZXI7XG5leHBvcnRzLmdldERlZmF1bHRBdXRob3JpdHkgPSBnZXREZWZhdWx0QXV0aG9yaXR5O1xuZXhwb3J0cy5tYXBVcmlEZWZhdWx0U2NoZW1lID0gbWFwVXJpRGVmYXVsdFNjaGVtZTtcbmNvbnN0IHVyaV9wYXJzZXJfMSA9IHJlcXVpcmUoXCIuL3VyaS1wYXJzZXJcIik7XG5leHBvcnRzLkNIQU5ORUxfQVJHU19DT05GSUdfU0VMRUNUT1JfS0VZID0gJ2dycGMuaW50ZXJuYWwuY29uZmlnX3NlbGVjdG9yJztcbmNvbnN0IHJlZ2lzdGVyZWRSZXNvbHZlcnMgPSB7fTtcbmxldCBkZWZhdWx0U2NoZW1lID0gbnVsbDtcbi8qKlxuICogUmVnaXN0ZXIgYSByZXNvbHZlciBjbGFzcyB0byBoYW5kbGUgdGFyZ2V0IG5hbWVzIHByZWZpeGVkIHdpdGggdGhlIGBwcmVmaXhgXG4gKiBzdHJpbmcuIFRoaXMgcHJlZml4IHNob3VsZCBjb3JyZXNwb25kIHRvIGEgVVJJIHNjaGVtZSBuYW1lIGxpc3RlZCBpbiB0aGVcbiAqIFtnUlBDIE5hbWUgUmVzb2x1dGlvbiBkb2N1bWVudF0oaHR0cHM6Ly9naXRodWIuY29tL2dycGMvZ3JwYy9ibG9iL21hc3Rlci9kb2MvbmFtaW5nLm1kKVxuICogQHBhcmFtIHByZWZpeFxuICogQHBhcmFtIHJlc29sdmVyQ2xhc3NcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJSZXNvbHZlcihzY2hlbWUsIHJlc29sdmVyQ2xhc3MpIHtcbiAgICByZWdpc3RlcmVkUmVzb2x2ZXJzW3NjaGVtZV0gPSByZXNvbHZlckNsYXNzO1xufVxuLyoqXG4gKiBSZWdpc3RlciBhIGRlZmF1bHQgcmVzb2x2ZXIgdG8gaGFuZGxlIHRhcmdldCBuYW1lcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoXG4gKiBhbnkgcmVnaXN0ZXJlZCBwcmVmaXguXG4gKiBAcGFyYW0gcmVzb2x2ZXJDbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRTY2hlbWUoc2NoZW1lKSB7XG4gICAgZGVmYXVsdFNjaGVtZSA9IHNjaGVtZTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgbmFtZSByZXNvbHZlciBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQsIGlmIHBvc3NpYmxlLiBUaHJvd3MgYW5cbiAqIGVycm9yIGlmIG5vIHN1Y2ggbmFtZSByZXNvbHZlciBjYW4gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBsaXN0ZW5lclxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlcih0YXJnZXQsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gICAgaWYgKHRhcmdldC5zY2hlbWUgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQuc2NoZW1lIGluIHJlZ2lzdGVyZWRSZXNvbHZlcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyByZWdpc3RlcmVkUmVzb2x2ZXJzW3RhcmdldC5zY2hlbWVdKHRhcmdldCwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZXNvbHZlciBjb3VsZCBiZSBjcmVhdGVkIGZvciB0YXJnZXQgJHsoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0YXJnZXQpfWApO1xuICAgIH1cbn1cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGF1dGhvcml0eSBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQsIGlmIHBvc3NpYmxlLiBUaHJvd3MgYW5cbiAqIGVycm9yIGlmIG5vIHJlZ2lzdGVyZWQgbmFtZSByZXNvbHZlciBjYW4gcGFyc2UgdGhhdCB0YXJnZXQgc3RyaW5nLlxuICogQHBhcmFtIHRhcmdldFxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0QXV0aG9yaXR5KHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQuc2NoZW1lICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0LnNjaGVtZSBpbiByZWdpc3RlcmVkUmVzb2x2ZXJzKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RlcmVkUmVzb2x2ZXJzW3RhcmdldC5zY2hlbWVdLmdldERlZmF1bHRBdXRob3JpdHkodGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YXJnZXQgJHsoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0YXJnZXQpfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1hcFVyaURlZmF1bHRTY2hlbWUodGFyZ2V0KSB7XG4gICAgaWYgKHRhcmdldC5zY2hlbWUgPT09IHVuZGVmaW5lZCB8fCAhKHRhcmdldC5zY2hlbWUgaW4gcmVnaXN0ZXJlZFJlc29sdmVycykpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRTY2hlbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2NoZW1lOiBkZWZhdWx0U2NoZW1lLFxuICAgICAgICAgICAgICAgIGF1dGhvcml0eTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBhdGg6ICgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHRhcmdldCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc29sdmVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2hhbm5lbENyZWRlbnRpYWxzID0gdm9pZCAwO1xuZXhwb3J0cy5jcmVhdGVDZXJ0aWZpY2F0ZVByb3ZpZGVyQ2hhbm5lbENyZWRlbnRpYWxzID0gY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlckNoYW5uZWxDcmVkZW50aWFscztcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IGNhbGxfY3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL2NhbGwtY3JlZGVudGlhbHNcIik7XG5jb25zdCB0bHNfaGVscGVyc18xID0gcmVxdWlyZShcIi4vdGxzLWhlbHBlcnNcIik7XG5jb25zdCB1cmlfcGFyc2VyXzEgPSByZXF1aXJlKFwiLi91cmktcGFyc2VyXCIpO1xuY29uc3QgcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVyXCIpO1xuY29uc3QgbG9nZ2luZ18xID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHZlcmlmeUlzQnVmZmVyT3JOdWxsKG9iaiwgZnJpZW5kbHlOYW1lKSB7XG4gICAgaWYgKG9iaiAmJiAhKG9iaiBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtmcmllbmRseU5hbWV9LCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIEJ1ZmZlci5gKTtcbiAgICB9XG59XG4vKipcbiAqIEEgY2xhc3MgdGhhdCBjb250YWlucyBjcmVkZW50aWFscyBmb3IgY29tbXVuaWNhdGluZyBvdmVyIGEgY2hhbm5lbCwgYXMgd2VsbFxuICogYXMgYSBzZXQgb2YgcGVyLWNhbGwgY3JlZGVudGlhbHMsIHdoaWNoIGFyZSBhcHBsaWVkIHRvIGV2ZXJ5IG1ldGhvZCBjYWxsIG1hZGVcbiAqIG92ZXIgYSBjaGFubmVsIGluaXRpYWxpemVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAqL1xuY2xhc3MgQ2hhbm5lbENyZWRlbnRpYWxzIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIG9iamVjdCB3aXRoIHRoZSBpbmNsdWRlZCBzZXQgb2YgcGVyLWNhbGwgY3JlZGVudGlhbHNcbiAgICAgKiBleHBhbmRlZCB0byBpbmNsdWRlIGNhbGxDcmVkZW50aWFscy5cbiAgICAgKiBAcGFyYW0gY2FsbENyZWRlbnRpYWxzIEEgQ2FsbENyZWRlbnRpYWxzIG9iamVjdCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzXG4gICAgICogaW5zdGFuY2UuXG4gICAgICovXG4gICAgY29tcG9zZShjYWxsQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NlZENoYW5uZWxDcmVkZW50aWFsc0ltcGwodGhpcywgY2FsbENyZWRlbnRpYWxzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgbmV3IENoYW5uZWxDcmVkZW50aWFscyBpbnN0YW5jZSB3aXRoIGEgZ2l2ZW4gc2V0IG9mIGNyZWRlbnRpYWxzLlxuICAgICAqIFRoZSByZXN1bHRpbmcgaW5zdGFuY2UgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEgQ2hhbm5lbCB0aGF0IGNvbW11bmljYXRlc1xuICAgICAqIG92ZXIgVExTLlxuICAgICAqIEBwYXJhbSByb290Q2VydHMgVGhlIHJvb3QgY2VydGlmaWNhdGUgZGF0YS5cbiAgICAgKiBAcGFyYW0gcHJpdmF0ZUtleSBUaGUgY2xpZW50IGNlcnRpZmljYXRlIHByaXZhdGUga2V5LCBpZiBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIGNlcnRDaGFpbiBUaGUgY2xpZW50IGNlcnRpZmljYXRlIGtleSBjaGFpbiwgaWYgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB2ZXJpZnlPcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBtb2RpZnkgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZVNzbChyb290Q2VydHMsIHByaXZhdGVLZXksIGNlcnRDaGFpbiwgdmVyaWZ5T3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZlcmlmeUlzQnVmZmVyT3JOdWxsKHJvb3RDZXJ0cywgJ1Jvb3QgY2VydGlmaWNhdGUnKTtcbiAgICAgICAgdmVyaWZ5SXNCdWZmZXJPck51bGwocHJpdmF0ZUtleSwgJ1ByaXZhdGUga2V5Jyk7XG4gICAgICAgIHZlcmlmeUlzQnVmZmVyT3JOdWxsKGNlcnRDaGFpbiwgJ0NlcnRpZmljYXRlIGNoYWluJyk7XG4gICAgICAgIGlmIChwcml2YXRlS2V5ICYmICFjZXJ0Q2hhaW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgbXVzdCBiZSBnaXZlbiB3aXRoIGFjY29tcGFueWluZyBjZXJ0aWZpY2F0ZSBjaGFpbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJpdmF0ZUtleSAmJiBjZXJ0Q2hhaW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2VydGlmaWNhdGUgY2hhaW4gbXVzdCBiZSBnaXZlbiB3aXRoIGFjY29tcGFueWluZyBwcml2YXRlIGtleScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlY3VyZUNvbnRleHQgPSAoMCwgdGxzXzEuY3JlYXRlU2VjdXJlQ29udGV4dCkoe1xuICAgICAgICAgICAgY2E6IChfYSA9IHJvb3RDZXJ0cyAhPT0gbnVsbCAmJiByb290Q2VydHMgIT09IHZvaWQgMCA/IHJvb3RDZXJ0cyA6ICgwLCB0bHNfaGVscGVyc18xLmdldERlZmF1bHRSb290c0RhdGEpKCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogcHJpdmF0ZUtleSAhPT0gbnVsbCAmJiBwcml2YXRlS2V5ICE9PSB2b2lkIDAgPyBwcml2YXRlS2V5IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2VydDogY2VydENoYWluICE9PSBudWxsICYmIGNlcnRDaGFpbiAhPT0gdm9pZCAwID8gY2VydENoYWluIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2lwaGVyczogdGxzX2hlbHBlcnNfMS5DSVBIRVJfU1VJVEVTLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWN1cmVDaGFubmVsQ3JlZGVudGlhbHNJbXBsKHNlY3VyZUNvbnRleHQsIHZlcmlmeU9wdGlvbnMgIT09IG51bGwgJiYgdmVyaWZ5T3B0aW9ucyAhPT0gdm9pZCAwID8gdmVyaWZ5T3B0aW9ucyA6IHt9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgbmV3IENoYW5uZWxDcmVkZW50aWFscyBpbnN0YW5jZSB3aXRoIGNyZWRlbnRpYWxzIGNyZWF0ZWQgdXNpbmdcbiAgICAgKiB0aGUgcHJvdmlkZWQgc2VjdXJlQ29udGV4dC4gVGhlIHJlc3VsdGluZyBpbnN0YW5jZXMgY2FuIGJlIHVzZWQgdG9cbiAgICAgKiBjb25zdHJ1Y3QgYSBDaGFubmVsIHRoYXQgY29tbXVuaWNhdGVzIG92ZXIgVExTLiBnUlBDIHdpbGwgbm90IG92ZXJyaWRlXG4gICAgICogYW55dGhpbmcgaW4gdGhlIHByb3ZpZGVkIHNlY3VyZUNvbnRleHQsIHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgKiBHUlBDX1NTTF9DSVBIRVJfU1VJVEVTIGFuZCBHUlBDX0RFRkFVTFRfU1NMX1JPT1RTX0ZJTEVfUEFUSCB3aWxsXG4gICAgICogbm90IGJlIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHNlY3VyZUNvbnRleHQgVGhlIHJldHVybiB2YWx1ZSBvZiB0bHMuY3JlYXRlU2VjdXJlQ29udGV4dCgpXG4gICAgICogQHBhcmFtIHZlcmlmeU9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRvIG1vZGlmeSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb25cbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlRnJvbVNlY3VyZUNvbnRleHQoc2VjdXJlQ29udGV4dCwgdmVyaWZ5T3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFNlY3VyZUNoYW5uZWxDcmVkZW50aWFsc0ltcGwoc2VjdXJlQ29udGV4dCwgdmVyaWZ5T3B0aW9ucyAhPT0gbnVsbCAmJiB2ZXJpZnlPcHRpb25zICE9PSB2b2lkIDAgPyB2ZXJpZnlPcHRpb25zIDoge30pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBuZXcgQ2hhbm5lbENyZWRlbnRpYWxzIGluc3RhbmNlIHdpdGggbm8gY3JlZGVudGlhbHMuXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZUluc2VjdXJlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VjdXJlQ2hhbm5lbENyZWRlbnRpYWxzSW1wbCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2hhbm5lbENyZWRlbnRpYWxzID0gQ2hhbm5lbENyZWRlbnRpYWxzO1xuY2xhc3MgSW5zZWN1cmVDaGFubmVsQ3JlZGVudGlhbHNJbXBsIGV4dGVuZHMgQ2hhbm5lbENyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgY29tcG9zZShjYWxsQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcG9zZSBpbnNlY3VyZSBjcmVkZW50aWFscycpO1xuICAgIH1cbiAgICBfaXNTZWN1cmUoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgX2VxdWFscyhvdGhlcikge1xuICAgICAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBJbnNlY3VyZUNoYW5uZWxDcmVkZW50aWFsc0ltcGw7XG4gICAgfVxuICAgIF9jcmVhdGVTZWN1cmVDb25uZWN0b3IoY2hhbm5lbFRhcmdldCwgb3B0aW9ucywgY2FsbENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25uZWN0KHNvY2tldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3YWl0Rm9yUmVhZHk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q2FsbENyZWRlbnRpYWxzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxDcmVkZW50aWFscyAhPT0gbnVsbCAmJiBjYWxsQ3JlZGVudGlhbHMgIT09IHZvaWQgMCA/IGNhbGxDcmVkZW50aWFscyA6IGNhbGxfY3JlZGVudGlhbHNfMS5DYWxsQ3JlZGVudGlhbHMuY3JlYXRlRW1wdHkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95KCkgeyB9XG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbk9wdGlvbnMoc2VjdXJlQ29udGV4dCwgdmVyaWZ5T3B0aW9ucywgY2hhbm5lbFRhcmdldCwgb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgY29ubmVjdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIHNlY3VyZUNvbnRleHQ6IHNlY3VyZUNvbnRleHRcbiAgICB9O1xuICAgIGxldCByZWFsVGFyZ2V0ID0gY2hhbm5lbFRhcmdldDtcbiAgICBpZiAoJ2dycGMuaHR0cF9jb25uZWN0X3RhcmdldCcgaW4gb3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYXJzZWRUYXJnZXQgPSAoMCwgdXJpX3BhcnNlcl8xLnBhcnNlVXJpKShvcHRpb25zWydncnBjLmh0dHBfY29ubmVjdF90YXJnZXQnXSk7XG4gICAgICAgIGlmIChwYXJzZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHJlYWxUYXJnZXQgPSBwYXJzZWRUYXJnZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9ICgwLCByZXNvbHZlcl8xLmdldERlZmF1bHRBdXRob3JpdHkpKHJlYWxUYXJnZXQpO1xuICAgIGNvbnN0IGhvc3RQb3J0ID0gKDAsIHVyaV9wYXJzZXJfMS5zcGxpdEhvc3RQb3J0KSh0YXJnZXRQYXRoKTtcbiAgICBjb25zdCByZW1vdGVIb3N0ID0gKF9hID0gaG9zdFBvcnQgPT09IG51bGwgfHwgaG9zdFBvcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhvc3RQb3J0Lmhvc3QpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRhcmdldFBhdGg7XG4gICAgY29ubmVjdGlvbk9wdGlvbnMuaG9zdCA9IHJlbW90ZUhvc3Q7XG4gICAgaWYgKHZlcmlmeU9wdGlvbnMuY2hlY2tTZXJ2ZXJJZGVudGl0eSkge1xuICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5jaGVja1NlcnZlcklkZW50aXR5ID0gdmVyaWZ5T3B0aW9ucy5jaGVja1NlcnZlcklkZW50aXR5O1xuICAgIH1cbiAgICBpZiAodmVyaWZ5T3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSB2ZXJpZnlPcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZDtcbiAgICB9XG4gICAgY29ubmVjdGlvbk9wdGlvbnMuQUxQTlByb3RvY29scyA9IFsnaDInXTtcbiAgICBpZiAob3B0aW9uc1snZ3JwYy5zc2xfdGFyZ2V0X25hbWVfb3ZlcnJpZGUnXSkge1xuICAgICAgICBjb25zdCBzc2xUYXJnZXROYW1lT3ZlcnJpZGUgPSBvcHRpb25zWydncnBjLnNzbF90YXJnZXRfbmFtZV9vdmVycmlkZSddO1xuICAgICAgICBjb25zdCBvcmlnaW5hbENoZWNrU2VydmVySWRlbnRpdHkgPSAoX2IgPSBjb25uZWN0aW9uT3B0aW9ucy5jaGVja1NlcnZlcklkZW50aXR5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0bHNfMS5jaGVja1NlcnZlcklkZW50aXR5O1xuICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5jaGVja1NlcnZlcklkZW50aXR5ID0gKGhvc3QsIGNlcnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbENoZWNrU2VydmVySWRlbnRpdHkoc3NsVGFyZ2V0TmFtZU92ZXJyaWRlLCBjZXJ0KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29ubmVjdGlvbk9wdGlvbnMuc2VydmVybmFtZSA9IHNzbFRhcmdldE5hbWVPdmVycmlkZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbm5lY3Rpb25PcHRpb25zLnNlcnZlcm5hbWUgPSByZW1vdGVIb3N0O1xuICAgIH1cbiAgICBpZiAob3B0aW9uc1snZ3JwYy1ub2RlLnRsc19lbmFibGVfdHJhY2UnXSkge1xuICAgICAgICBjb25uZWN0aW9uT3B0aW9ucy5lbmFibGVUcmFjZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uT3B0aW9ucztcbn1cbmNsYXNzIFNlY3VyZUNvbm5lY3RvckltcGwge1xuICAgIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb25PcHRpb25zLCBjYWxsQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uT3B0aW9ucyA9IGNvbm5lY3Rpb25PcHRpb25zO1xuICAgICAgICB0aGlzLmNhbGxDcmVkZW50aWFscyA9IGNhbGxDcmVkZW50aWFscztcbiAgICB9XG4gICAgY29ubmVjdChzb2NrZXQpIHtcbiAgICAgICAgY29uc3QgdGxzQ29ubmVjdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgc29ja2V0OiBzb2NrZXQgfSwgdGhpcy5jb25uZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0bHNTb2NrZXQgPSAoMCwgdGxzXzEuY29ubmVjdCkodGxzQ29ubmVjdE9wdGlvbnMsICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSB0aGlzLmNvbm5lY3Rpb25PcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSkgJiYgIXRsc1NvY2tldC5hdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCh0bHNTb2NrZXQuYXV0aG9yaXphdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0OiB0bHNTb2NrZXQsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bHNTb2NrZXQub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2FpdEZvclJlYWR5KCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGdldENhbGxDcmVkZW50aWFscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbENyZWRlbnRpYWxzO1xuICAgIH1cbiAgICBkZXN0cm95KCkgeyB9XG59XG5jbGFzcyBTZWN1cmVDaGFubmVsQ3JlZGVudGlhbHNJbXBsIGV4dGVuZHMgQ2hhbm5lbENyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3RvcihzZWN1cmVDb250ZXh0LCB2ZXJpZnlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VjdXJlQ29udGV4dCA9IHNlY3VyZUNvbnRleHQ7XG4gICAgICAgIHRoaXMudmVyaWZ5T3B0aW9ucyA9IHZlcmlmeU9wdGlvbnM7XG4gICAgfVxuICAgIF9pc1NlY3VyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIF9lcXVhbHMob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBTZWN1cmVDaGFubmVsQ3JlZGVudGlhbHNJbXBsKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuc2VjdXJlQ29udGV4dCA9PT0gb3RoZXIuc2VjdXJlQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgIHRoaXMudmVyaWZ5T3B0aW9ucy5jaGVja1NlcnZlcklkZW50aXR5ID09PVxuICAgICAgICAgICAgICAgICAgICBvdGhlci52ZXJpZnlPcHRpb25zLmNoZWNrU2VydmVySWRlbnRpdHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jcmVhdGVTZWN1cmVDb25uZWN0b3IoY2hhbm5lbFRhcmdldCwgb3B0aW9ucywgY2FsbENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gZ2V0Q29ubmVjdGlvbk9wdGlvbnModGhpcy5zZWN1cmVDb250ZXh0LCB0aGlzLnZlcmlmeU9wdGlvbnMsIGNoYW5uZWxUYXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IFNlY3VyZUNvbm5lY3RvckltcGwoY29ubmVjdGlvbk9wdGlvbnMsIGNhbGxDcmVkZW50aWFscyAhPT0gbnVsbCAmJiBjYWxsQ3JlZGVudGlhbHMgIT09IHZvaWQgMCA/IGNhbGxDcmVkZW50aWFscyA6IGNhbGxfY3JlZGVudGlhbHNfMS5DYWxsQ3JlZGVudGlhbHMuY3JlYXRlRW1wdHkoKSk7XG4gICAgfVxufVxuY2xhc3MgQ2VydGlmaWNhdGVQcm92aWRlckNoYW5uZWxDcmVkZW50aWFsc0ltcGwgZXh0ZW5kcyBDaGFubmVsQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0cnVjdG9yKGNhQ2VydGlmaWNhdGVQcm92aWRlciwgaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyLCB2ZXJpZnlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyID0gY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyO1xuICAgICAgICB0aGlzLmlkZW50aXR5Q2VydGlmaWNhdGVQcm92aWRlciA9IGlkZW50aXR5Q2VydGlmaWNhdGVQcm92aWRlcjtcbiAgICAgICAgdGhpcy52ZXJpZnlPcHRpb25zID0gdmVyaWZ5T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZWZjb3VudCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBgdW5kZWZpbmVkYCBtZWFucyB0aGF0IHRoZSBjZXJ0aWZpY2F0ZXMgaGF2ZSBub3QgeWV0IGJlZW4gbG9hZGVkLiBgbnVsbGBcbiAgICAgICAgICogbWVhbnMgdGhhdCBhbiBhdHRlbXB0IHRvIGxvYWQgdGhlbSBoYXMgY29tcGxldGVkLCBhbmQgaGFzIGZhaWxlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGF0ZXN0Q2FVcGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBgdW5kZWZpbmVkYCBtZWFucyB0aGF0IHRoZSBjZXJ0aWZpY2F0ZXMgaGF2ZSBub3QgeWV0IGJlZW4gbG9hZGVkLiBgbnVsbGBcbiAgICAgICAgICogbWVhbnMgdGhhdCBhbiBhdHRlbXB0IHRvIGxvYWQgdGhlbSBoYXMgY29tcGxldGVkLCBhbmQgaGFzIGZhaWxlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2FDZXJ0aWZpY2F0ZVVwZGF0ZUxpc3RlbmVyID0gdGhpcy5oYW5kbGVDYUNlcnRpZmljYXRlVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVVwZGF0ZUxpc3RlbmVyID0gdGhpcy5oYW5kbGVJZGVudGl0eUNlcnRpdGlmaWNhdGVVcGRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZWN1cmVDb250ZXh0V2F0Y2hlcnMgPSBbXTtcbiAgICB9XG4gICAgX2lzU2VjdXJlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgX2VxdWFscyhvdGhlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIENlcnRpZmljYXRlUHJvdmlkZXJDaGFubmVsQ3JlZGVudGlhbHNJbXBsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYUNlcnRpZmljYXRlUHJvdmlkZXIgPT09IG90aGVyLmNhQ2VydGlmaWNhdGVQcm92aWRlciAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyID09PSBvdGhlci5pZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIgJiZcbiAgICAgICAgICAgICAgICAoKF9hID0gdGhpcy52ZXJpZnlPcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2hlY2tTZXJ2ZXJJZGVudGl0eSkgPT09ICgoX2IgPSBvdGhlci52ZXJpZnlPcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2hlY2tTZXJ2ZXJJZGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVmKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLnJlZmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhQ2VydGlmaWNhdGVQcm92aWRlci5hZGRDYUNlcnRpZmljYXRlTGlzdGVuZXIodGhpcy5jYUNlcnRpZmljYXRlVXBkYXRlTGlzdGVuZXIpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5pZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRJZGVudGl0eUNlcnRpZmljYXRlTGlzdGVuZXIodGhpcy5pZGVudGl0eUNlcnRpZmljYXRlVXBkYXRlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmY291bnQgKz0gMTtcbiAgICB9XG4gICAgdW5yZWYoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZjb3VudCAtPSAxO1xuICAgICAgICBpZiAodGhpcy5yZWZjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jYUNlcnRpZmljYXRlUHJvdmlkZXIucmVtb3ZlQ2FDZXJ0aWZpY2F0ZUxpc3RlbmVyKHRoaXMuY2FDZXJ0aWZpY2F0ZVVwZGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVtb3ZlSWRlbnRpdHlDZXJ0aWZpY2F0ZUxpc3RlbmVyKHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVVwZGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY3JlYXRlU2VjdXJlQ29ubmVjdG9yKGNoYW5uZWxUYXJnZXQsIG9wdGlvbnMsIGNhbGxDcmVkZW50aWFscykge1xuICAgICAgICB0aGlzLnJlZigpO1xuICAgICAgICByZXR1cm4gbmV3IENlcnRpZmljYXRlUHJvdmlkZXJDaGFubmVsQ3JlZGVudGlhbHNJbXBsLlNlY3VyZUNvbm5lY3RvckltcGwodGhpcywgY2hhbm5lbFRhcmdldCwgb3B0aW9ucywgY2FsbENyZWRlbnRpYWxzICE9PSBudWxsICYmIGNhbGxDcmVkZW50aWFscyAhPT0gdm9pZCAwID8gY2FsbENyZWRlbnRpYWxzIDogY2FsbF9jcmVkZW50aWFsc18xLkNhbGxDcmVkZW50aWFscy5jcmVhdGVFbXB0eSgpKTtcbiAgICB9XG4gICAgbWF5YmVVcGRhdGVXYXRjaGVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVjZWl2ZWRVcGRhdGVzKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgd2F0Y2hlciBvZiB0aGlzLnNlY3VyZUNvbnRleHRXYXRjaGVycykge1xuICAgICAgICAgICAgICAgIHdhdGNoZXIodGhpcy5nZXRMYXRlc3RTZWN1cmVDb250ZXh0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWN1cmVDb250ZXh0V2F0Y2hlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDYUNlcnRpZmljYXRlVXBkYXRlKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLmxhdGVzdENhVXBkYXRlID0gdXBkYXRlO1xuICAgICAgICB0aGlzLm1heWJlVXBkYXRlV2F0Y2hlcnMoKTtcbiAgICB9XG4gICAgaGFuZGxlSWRlbnRpdHlDZXJ0aXRpZmljYXRlVXBkYXRlKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLmxhdGVzdElkZW50aXR5VXBkYXRlID0gdXBkYXRlO1xuICAgICAgICB0aGlzLm1heWJlVXBkYXRlV2F0Y2hlcnMoKTtcbiAgICB9XG4gICAgaGFzUmVjZWl2ZWRVcGRhdGVzKCkge1xuICAgICAgICBpZiAodGhpcy5sYXRlc3RDYVVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyICYmIHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRTZWN1cmVDb250ZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5oYXNSZWNlaXZlZFVwZGF0ZXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldExhdGVzdFNlY3VyZUNvbnRleHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWN1cmVDb250ZXh0V2F0Y2hlcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldExhdGVzdFNlY3VyZUNvbnRleHQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICghdGhpcy5sYXRlc3RDYVVwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyICE9PSBudWxsICYmICF0aGlzLmxhdGVzdElkZW50aXR5VXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCB0bHNfMS5jcmVhdGVTZWN1cmVDb250ZXh0KSh7XG4gICAgICAgICAgICAgICAgY2E6IHRoaXMubGF0ZXN0Q2FVcGRhdGUuY2FDZXJ0aWZpY2F0ZSxcbiAgICAgICAgICAgICAgICBrZXk6IChfYSA9IHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wcml2YXRlS2V5LFxuICAgICAgICAgICAgICAgIGNlcnQ6IChfYiA9IHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jZXJ0aWZpY2F0ZSxcbiAgICAgICAgICAgICAgICBjaXBoZXJzOiB0bHNfaGVscGVyc18xLkNJUEhFUl9TVUlURVNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAoMCwgbG9nZ2luZ18xLmxvZykoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SLCAnRmFpbGVkIHRvIGNyZWF0ZVNlY3VyZUNvbnRleHQgd2l0aCBlcnJvciAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuQ2VydGlmaWNhdGVQcm92aWRlckNoYW5uZWxDcmVkZW50aWFsc0ltcGwuU2VjdXJlQ29ubmVjdG9ySW1wbCA9IGNsYXNzIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIGNoYW5uZWxUYXJnZXQsIG9wdGlvbnMsIGNhbGxDcmVkZW50aWFscykge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5jaGFubmVsVGFyZ2V0ID0gY2hhbm5lbFRhcmdldDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5jYWxsQ3JlZGVudGlhbHMgPSBjYWxsQ3JlZGVudGlhbHM7XG4gICAgfVxuICAgIGNvbm5lY3Qoc29ja2V0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWN1cmVDb250ZXh0ID0gdGhpcy5wYXJlbnQuZ2V0TGF0ZXN0U2VjdXJlQ29udGV4dCgpO1xuICAgICAgICAgICAgaWYgKCFzZWN1cmVDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgY3JlZGVudGlhbHMnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvY2tldC5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTb2NrZXQgY2xvc2VkIHdoaWxlIGxvYWRpbmcgY3JlZGVudGlhbHMnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb25ubmVjdGlvbk9wdGlvbnMgPSBnZXRDb25uZWN0aW9uT3B0aW9ucyhzZWN1cmVDb250ZXh0LCB0aGlzLnBhcmVudC52ZXJpZnlPcHRpb25zLCB0aGlzLmNoYW5uZWxUYXJnZXQsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0bHNDb25uZWN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBzb2NrZXQ6IHNvY2tldCB9LCBjb25ubmVjdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTb2NrZXQgY2xvc2VkJykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRsc1NvY2tldCA9ICgwLCB0bHNfMS5jb25uZWN0KSh0bHNDb25uZWN0T3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB0bHNTb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xvc2VDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGxzU29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmICgoKF9hID0gdGhpcy5wYXJlbnQudmVyaWZ5T3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpICYmICF0bHNTb2NrZXQuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QodGxzU29ja2V0LmF1dGhvcml6YXRpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvY2tldDogdGxzU29ja2V0LFxuICAgICAgICAgICAgICAgICAgICBzZWN1cmU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGxzU29ja2V0Lm9uY2UoJ2Nsb3NlJywgY2xvc2VDYWxsYmFjayk7XG4gICAgICAgICAgICB0bHNTb2NrZXQub25jZSgnZXJyb3InLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHdhaXRGb3JSZWFkeSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZ2V0U2VjdXJlQ29udGV4dCgpO1xuICAgIH1cbiAgICBnZXRDYWxsQ3JlZGVudGlhbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxDcmVkZW50aWFscztcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQudW5yZWYoKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlckNoYW5uZWxDcmVkZW50aWFscyhjYUNlcnRpZmljYXRlUHJvdmlkZXIsIGlkZW50aXR5Q2VydGlmaWNhdGVQcm92aWRlciwgdmVyaWZ5T3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVQcm92aWRlckNoYW5uZWxDcmVkZW50aWFsc0ltcGwoY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyLCBpZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIsIHZlcmlmeU9wdGlvbnMgIT09IG51bGwgJiYgdmVyaWZ5T3B0aW9ucyAhPT0gdm9pZCAwID8gdmVyaWZ5T3B0aW9ucyA6IHt9KTtcbn1cbmNsYXNzIENvbXBvc2VkQ2hhbm5lbENyZWRlbnRpYWxzSW1wbCBleHRlbmRzIENoYW5uZWxDcmVkZW50aWFscyB7XG4gICAgY29uc3RydWN0b3IoY2hhbm5lbENyZWRlbnRpYWxzLCBjYWxsQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ3JlZGVudGlhbHMgPSBjaGFubmVsQ3JlZGVudGlhbHM7XG4gICAgICAgIHRoaXMuY2FsbENyZWRlbnRpYWxzID0gY2FsbENyZWRlbnRpYWxzO1xuICAgICAgICBpZiAoIWNoYW5uZWxDcmVkZW50aWFscy5faXNTZWN1cmUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcG9zZSBpbnNlY3VyZSBjcmVkZW50aWFscycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbXBvc2UoY2FsbENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkQ2FsbENyZWRlbnRpYWxzID0gdGhpcy5jYWxsQ3JlZGVudGlhbHMuY29tcG9zZShjYWxsQ3JlZGVudGlhbHMpO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2VkQ2hhbm5lbENyZWRlbnRpYWxzSW1wbCh0aGlzLmNoYW5uZWxDcmVkZW50aWFscywgY29tYmluZWRDYWxsQ3JlZGVudGlhbHMpO1xuICAgIH1cbiAgICBfaXNTZWN1cmUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfZXF1YWxzKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQ29tcG9zZWRDaGFubmVsQ3JlZGVudGlhbHNJbXBsKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuY2hhbm5lbENyZWRlbnRpYWxzLl9lcXVhbHMob3RoZXIuY2hhbm5lbENyZWRlbnRpYWxzKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbENyZWRlbnRpYWxzLl9lcXVhbHMob3RoZXIuY2FsbENyZWRlbnRpYWxzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NyZWF0ZVNlY3VyZUNvbm5lY3RvcihjaGFubmVsVGFyZ2V0LCBvcHRpb25zLCBjYWxsQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgY29uc3QgY29tYmluZWRDYWxsQ3JlZGVudGlhbHMgPSB0aGlzLmNhbGxDcmVkZW50aWFscy5jb21wb3NlKGNhbGxDcmVkZW50aWFscyAhPT0gbnVsbCAmJiBjYWxsQ3JlZGVudGlhbHMgIT09IHZvaWQgMCA/IGNhbGxDcmVkZW50aWFscyA6IGNhbGxfY3JlZGVudGlhbHNfMS5DYWxsQ3JlZGVudGlhbHMuY3JlYXRlRW1wdHkoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWxDcmVkZW50aWFscy5fY3JlYXRlU2VjdXJlQ29ubmVjdG9yKGNoYW5uZWxUYXJnZXQsIG9wdGlvbnMsIGNvbWJpbmVkQ2FsbENyZWRlbnRpYWxzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFubmVsLWNyZWRlbnRpYWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQ2hpbGRDaGFubmVsQ29udHJvbEhlbHBlciA9IGNyZWF0ZUNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXI7XG5leHBvcnRzLnJlZ2lzdGVyTG9hZEJhbGFuY2VyVHlwZSA9IHJlZ2lzdGVyTG9hZEJhbGFuY2VyVHlwZTtcbmV4cG9ydHMucmVnaXN0ZXJEZWZhdWx0TG9hZEJhbGFuY2VyVHlwZSA9IHJlZ2lzdGVyRGVmYXVsdExvYWRCYWxhbmNlclR5cGU7XG5leHBvcnRzLmNyZWF0ZUxvYWRCYWxhbmNlciA9IGNyZWF0ZUxvYWRCYWxhbmNlcjtcbmV4cG9ydHMuaXNMb2FkQmFsYW5jZXJOYW1lUmVnaXN0ZXJlZCA9IGlzTG9hZEJhbGFuY2VyTmFtZVJlZ2lzdGVyZWQ7XG5leHBvcnRzLnBhcnNlTG9hZEJhbGFuY2luZ0NvbmZpZyA9IHBhcnNlTG9hZEJhbGFuY2luZ0NvbmZpZztcbmV4cG9ydHMuZ2V0RGVmYXVsdENvbmZpZyA9IGdldERlZmF1bHRDb25maWc7XG5leHBvcnRzLnNlbGVjdExiQ29uZmlnRnJvbUxpc3QgPSBzZWxlY3RMYkNvbmZpZ0Zyb21MaXN0O1xuY29uc3QgbG9nZ2luZ18xID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuLyoqXG4gKiBDcmVhdGUgYSBjaGlsZCBDaGFubmVsQ29udHJvbEhlbHBlciB0aGF0IG92ZXJyaWRlcyBzb21lIG1ldGhvZHMgb2YgdGhlXG4gKiBwYXJlbnQgd2hpbGUgbGV0dGluZyBvdGhlcnMgcGFzcyB0aHJvdWdoIHRvIHRoZSBwYXJlbnQgdW5tb2RpZmllZC4gVGhpc1xuICogYWxsb3dzIG90aGVyIGNvZGUgdG8gY3JlYXRlIHRoZXNlIGNoaWxkcmVuIHdpdGhvdXQgbmVlZGluZyB0byBrbm93IGFib3V0XG4gKiBhbGwgb2YgdGhlIG1ldGhvZHMgdG8gYmUgcGFzc2VkIHRocm91Z2guXG4gKiBAcGFyYW0gcGFyZW50XG4gKiBAcGFyYW0gb3ZlcnJpZGVzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXIocGFyZW50LCBvdmVycmlkZXMpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2s7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlU3ViY2hhbm5lbDogKF9iID0gKF9hID0gb3ZlcnJpZGVzLmNyZWF0ZVN1YmNoYW5uZWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5iaW5kKG92ZXJyaWRlcykpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHBhcmVudC5jcmVhdGVTdWJjaGFubmVsLmJpbmQocGFyZW50KSxcbiAgICAgICAgdXBkYXRlU3RhdGU6IChfZCA9IChfYyA9IG92ZXJyaWRlcy51cGRhdGVTdGF0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmJpbmQob3ZlcnJpZGVzKSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogcGFyZW50LnVwZGF0ZVN0YXRlLmJpbmQocGFyZW50KSxcbiAgICAgICAgcmVxdWVzdFJlcmVzb2x1dGlvbjogKF9mID0gKF9lID0gb3ZlcnJpZGVzLnJlcXVlc3RSZXJlc29sdXRpb24pID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5iaW5kKG92ZXJyaWRlcykpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IHBhcmVudC5yZXF1ZXN0UmVyZXNvbHV0aW9uLmJpbmQocGFyZW50KSxcbiAgICAgICAgYWRkQ2hhbm5lbHpDaGlsZDogKF9oID0gKF9nID0gb3ZlcnJpZGVzLmFkZENoYW5uZWx6Q2hpbGQpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5iaW5kKG92ZXJyaWRlcykpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHBhcmVudC5hZGRDaGFubmVsekNoaWxkLmJpbmQocGFyZW50KSxcbiAgICAgICAgcmVtb3ZlQ2hhbm5lbHpDaGlsZDogKF9rID0gKF9qID0gb3ZlcnJpZGVzLnJlbW92ZUNoYW5uZWx6Q2hpbGQpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5iaW5kKG92ZXJyaWRlcykpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IHBhcmVudC5yZW1vdmVDaGFubmVsekNoaWxkLmJpbmQocGFyZW50KSxcbiAgICB9O1xufVxuY29uc3QgcmVnaXN0ZXJlZExvYWRCYWxhbmNlclR5cGVzID0ge307XG5sZXQgZGVmYXVsdExvYWRCYWxhbmNlclR5cGUgPSBudWxsO1xuZnVuY3Rpb24gcmVnaXN0ZXJMb2FkQmFsYW5jZXJUeXBlKHR5cGVOYW1lLCBsb2FkQmFsYW5jZXJUeXBlLCBsb2FkQmFsYW5jaW5nQ29uZmlnVHlwZSkge1xuICAgIHJlZ2lzdGVyZWRMb2FkQmFsYW5jZXJUeXBlc1t0eXBlTmFtZV0gPSB7XG4gICAgICAgIExvYWRCYWxhbmNlcjogbG9hZEJhbGFuY2VyVHlwZSxcbiAgICAgICAgTG9hZEJhbGFuY2luZ0NvbmZpZzogbG9hZEJhbGFuY2luZ0NvbmZpZ1R5cGUsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdExvYWRCYWxhbmNlclR5cGUodHlwZU5hbWUpIHtcbiAgICBkZWZhdWx0TG9hZEJhbGFuY2VyVHlwZSA9IHR5cGVOYW1lO1xufVxuZnVuY3Rpb24gY3JlYXRlTG9hZEJhbGFuY2VyKGNvbmZpZywgY2hhbm5lbENvbnRyb2xIZWxwZXIpIHtcbiAgICBjb25zdCB0eXBlTmFtZSA9IGNvbmZpZy5nZXRMb2FkQmFsYW5jZXJOYW1lKCk7XG4gICAgaWYgKHR5cGVOYW1lIGluIHJlZ2lzdGVyZWRMb2FkQmFsYW5jZXJUeXBlcykge1xuICAgICAgICByZXR1cm4gbmV3IHJlZ2lzdGVyZWRMb2FkQmFsYW5jZXJUeXBlc1t0eXBlTmFtZV0uTG9hZEJhbGFuY2VyKGNoYW5uZWxDb250cm9sSGVscGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzTG9hZEJhbGFuY2VyTmFtZVJlZ2lzdGVyZWQodHlwZU5hbWUpIHtcbiAgICByZXR1cm4gdHlwZU5hbWUgaW4gcmVnaXN0ZXJlZExvYWRCYWxhbmNlclR5cGVzO1xufVxuZnVuY3Rpb24gcGFyc2VMb2FkQmFsYW5jaW5nQ29uZmlnKHJhd0NvbmZpZykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyYXdDb25maWcpO1xuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIGxvYWQgYmFsYW5jaW5nIGNvbmZpZyBoYXMgbXVsdGlwbGUgY29uZmxpY3RpbmcgZW50cmllcycpO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTmFtZSA9IGtleXNbMF07XG4gICAgaWYgKHR5cGVOYW1lIGluIHJlZ2lzdGVyZWRMb2FkQmFsYW5jZXJUeXBlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRMb2FkQmFsYW5jZXJUeXBlc1t0eXBlTmFtZV0uTG9hZEJhbGFuY2luZ0NvbmZpZy5jcmVhdGVGcm9tSnNvbihyYXdDb25maWdbdHlwZU5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGVOYW1lfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGxvYWQgYmFsYW5jaW5nIGNvbmZpZyBuYW1lICR7dHlwZU5hbWV9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmZpZygpIHtcbiAgICBpZiAoIWRlZmF1bHRMb2FkQmFsYW5jZXJUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZGVmYXVsdCBsb2FkIGJhbGFuY2VyIHR5cGUgcmVnaXN0ZXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHJlZ2lzdGVyZWRMb2FkQmFsYW5jZXJUeXBlc1tkZWZhdWx0TG9hZEJhbGFuY2VyVHlwZV0uTG9hZEJhbGFuY2luZ0NvbmZpZygpO1xufVxuZnVuY3Rpb24gc2VsZWN0TGJDb25maWdGcm9tTGlzdChjb25maWdzLCBmYWxsYmFja1RvZGVmYXVsdCA9IGZhbHNlKSB7XG4gICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9hZEJhbGFuY2luZ0NvbmZpZyhjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAoMCwgbG9nZ2luZ18xLmxvZykoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCAnQ29uZmlnIHBhcnNpbmcgZmFpbGVkIHdpdGggZXJyb3InLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZhbGxiYWNrVG9kZWZhdWx0KSB7XG4gICAgICAgIGlmIChkZWZhdWx0TG9hZEJhbGFuY2VyVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByZWdpc3RlcmVkTG9hZEJhbGFuY2VyVHlwZXNbZGVmYXVsdExvYWRCYWxhbmNlclR5cGVdLkxvYWRCYWxhbmNpbmdDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2FkLWJhbGFuY2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVSZXRyeVRocm90dGxpbmcgPSB2YWxpZGF0ZVJldHJ5VGhyb3R0bGluZztcbmV4cG9ydHMudmFsaWRhdGVTZXJ2aWNlQ29uZmlnID0gdmFsaWRhdGVTZXJ2aWNlQ29uZmlnO1xuZXhwb3J0cy5leHRyYWN0QW5kU2VsZWN0U2VydmljZUNvbmZpZyA9IGV4dHJhY3RBbmRTZWxlY3RTZXJ2aWNlQ29uZmlnO1xuLyogVGhpcyBmaWxlIGltcGxlbWVudHMgZ1JGQyBBMiBhbmQgdGhlIHNlcnZpY2UgY29uZmlnIHNwZWM6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9wcm9wb3NhbC9ibG9iL21hc3Rlci9BMi1zZXJ2aWNlLWNvbmZpZ3MtaW4tZG5zLm1kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9ncnBjL2Jsb2IvbWFzdGVyL2RvYy9zZXJ2aWNlX2NvbmZpZy5tZC4gRWFjaFxuICogZnVuY3Rpb24gaGVyZSB0YWtlcyBhbiBvYmplY3Qgd2l0aCB1bmtub3duIHN0cnVjdHVyZSBhbmQgcmV0dXJucyBpdHNcbiAqIHNwZWNpZmljIG9iamVjdCB0eXBlIGlmIHRoZSBpbnB1dCBoYXMgdGhlIHJpZ2h0IHN0cnVjdHVyZSwgYW5kIHRocm93cyBhblxuICogZXJyb3Igb3RoZXJ3aXNlLiAqL1xuLyogVGhlIGFueSB0eXBlIGlzIHB1cnBvc2VseSB1c2VkIGhlcmUuIEFsbCBmdW5jdGlvbnMgdmFsaWRhdGUgdGhlaXIgaW5wdXQgYXRcbiAqIHJ1bnRpbWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG4vKipcbiAqIFJlY29nbml6ZXMgYSBudW1iZXIgd2l0aCB1cCB0byA5IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCwgZm9sbG93ZWQgYnlcbiAqIGFuIFwic1wiLCByZXByZXNlbnRpbmcgYSBudW1iZXIgb2Ygc2Vjb25kcy5cbiAqL1xuY29uc3QgRFVSQVRJT05fUkVHRVggPSAvXlxcZCsoXFwuXFxkezEsOX0pP3MkLztcbi8qKlxuICogQ2xpZW50IGxhbmd1YWdlIG5hbWUgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGlzIGNsaWVudCBtYXRjaGVzIGFcbiAqIGBTZXJ2aWNlQ29uZmlnQ2FuYXJ5Q29uZmlnYCdzIGBjbGllbnRMYW5ndWFnZWAgbGlzdC5cbiAqL1xuY29uc3QgQ0xJRU5UX0xBTkdVQUdFX1NUUklORyA9ICdub2RlJztcbmZ1bmN0aW9uIHZhbGlkYXRlTmFtZShvYmopIHtcbiAgICAvLyBJbiB0aGlzIGNvbnRleHQsIGFuZCB1bnNldCBmaWVsZCBhbmQgJycgYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWVcbiAgICBpZiAoJ3NlcnZpY2UnIGluIG9iaiAmJiBvYmouc2VydmljZSAhPT0gJycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmouc2VydmljZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZXRob2QgY29uZmlnIG5hbWU6IGludmFsaWQgc2VydmljZTogZXhwZWN0ZWQgdHlwZSBzdHJpbmcsIGdvdCAke3R5cGVvZiBvYmouc2VydmljZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ21ldGhvZCcgaW4gb2JqICYmIG9iai5tZXRob2QgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5tZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1ldGhvZCBjb25maWcgbmFtZTogaW52YWxpZCBtZXRob2Q6IGV4cGVjdGVkIHR5cGUgc3RyaW5nLCBnb3QgJHt0eXBlb2Ygb2JqLnNlcnZpY2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IG9iai5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogb2JqLm1ldGhvZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6IG9iai5zZXJ2aWNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCdtZXRob2QnIGluIG9iaiAmJiBvYmoubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZXRob2QgY29uZmlnIG5hbWU6IG1ldGhvZCBzZXQgd2l0aCBlbXB0eSBvciB1bnNldCBzZXJ2aWNlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUmV0cnlQb2xpY3kob2JqKSB7XG4gICAgaWYgKCEoJ21heEF0dGVtcHRzJyBpbiBvYmopIHx8XG4gICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKG9iai5tYXhBdHRlbXB0cykgfHxcbiAgICAgICAgb2JqLm1heEF0dGVtcHRzIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZyByZXRyeSBwb2xpY3k6IG1heEF0dGVtcHRzIG11c3QgYmUgYW4gaW50ZWdlciBhdCBsZWFzdCAyJyk7XG4gICAgfVxuICAgIGlmICghKCdpbml0aWFsQmFja29mZicgaW4gb2JqKSB8fFxuICAgICAgICB0eXBlb2Ygb2JqLmluaXRpYWxCYWNrb2ZmICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICAhRFVSQVRJT05fUkVHRVgudGVzdChvYmouaW5pdGlhbEJhY2tvZmYpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnIHJldHJ5IHBvbGljeTogaW5pdGlhbEJhY2tvZmYgbXVzdCBiZSBhIHN0cmluZyBjb25zaXN0aW5nIG9mIGEgcG9zaXRpdmUgaW50ZWdlciBvciBkZWNpbWFsIGZvbGxvd2VkIGJ5IHMnKTtcbiAgICB9XG4gICAgaWYgKCEoJ21heEJhY2tvZmYnIGluIG9iaikgfHxcbiAgICAgICAgdHlwZW9mIG9iai5tYXhCYWNrb2ZmICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICAhRFVSQVRJT05fUkVHRVgudGVzdChvYmoubWF4QmFja29mZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBjb25maWcgcmV0cnkgcG9saWN5OiBtYXhCYWNrb2ZmIG11c3QgYmUgYSBzdHJpbmcgY29uc2lzdGluZyBvZiBhIHBvc2l0aXZlIGludGVnZXIgb3IgZGVjaW1hbCBmb2xsb3dlZCBieSBzJyk7XG4gICAgfVxuICAgIGlmICghKCdiYWNrb2ZmTXVsdGlwbGllcicgaW4gb2JqKSB8fFxuICAgICAgICB0eXBlb2Ygb2JqLmJhY2tvZmZNdWx0aXBsaWVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICBvYmouYmFja29mZk11bHRpcGxpZXIgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZyByZXRyeSBwb2xpY3k6IGJhY2tvZmZNdWx0aXBsaWVyIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gICAgaWYgKCEoJ3JldHJ5YWJsZVN0YXR1c0NvZGVzJyBpbiBvYmogJiYgQXJyYXkuaXNBcnJheShvYmoucmV0cnlhYmxlU3RhdHVzQ29kZXMpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZyByZXRyeSBwb2xpY3k6IHJldHJ5YWJsZVN0YXR1c0NvZGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmIChvYmoucmV0cnlhYmxlU3RhdHVzQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnIHJldHJ5IHBvbGljeTogcmV0cnlhYmxlU3RhdHVzQ29kZXMgbXVzdCBiZSBub24tZW1wdHknKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmoucmV0cnlhYmxlU3RhdHVzQ29kZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhjb25zdGFudHNfMS5TdGF0dXMpLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnIHJldHJ5IHBvbGljeTogcmV0cnlhYmxlU3RhdHVzQ29kZXMgdmFsdWUgbm90IGluIHN0YXR1cyBjb2RlIHJhbmdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGNvbnN0YW50c18xLlN0YXR1cykuaW5jbHVkZXModmFsdWUudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZyByZXRyeSBwb2xpY3k6IHJldHJ5YWJsZVN0YXR1c0NvZGVzIHZhbHVlIG5vdCBhIHN0YXR1cyBjb2RlIG5hbWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnIHJldHJ5IHBvbGljeTogcmV0cnlhYmxlU3RhdHVzQ29kZXMgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBudW1iZXInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtYXhBdHRlbXB0czogb2JqLm1heEF0dGVtcHRzLFxuICAgICAgICBpbml0aWFsQmFja29mZjogb2JqLmluaXRpYWxCYWNrb2ZmLFxuICAgICAgICBtYXhCYWNrb2ZmOiBvYmoubWF4QmFja29mZixcbiAgICAgICAgYmFja29mZk11bHRpcGxpZXI6IG9iai5iYWNrb2ZmTXVsdGlwbGllcixcbiAgICAgICAgcmV0cnlhYmxlU3RhdHVzQ29kZXM6IG9iai5yZXRyeWFibGVTdGF0dXNDb2RlcyxcbiAgICB9O1xufVxuZnVuY3Rpb24gdmFsaWRhdGVIZWRnaW5nUG9saWN5KG9iaikge1xuICAgIGlmICghKCdtYXhBdHRlbXB0cycgaW4gb2JqKSB8fFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihvYmoubWF4QXR0ZW1wdHMpIHx8XG4gICAgICAgIG9iai5tYXhBdHRlbXB0cyA8IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBjb25maWcgaGVkZ2luZyBwb2xpY3k6IG1heEF0dGVtcHRzIG11c3QgYmUgYW4gaW50ZWdlciBhdCBsZWFzdCAyJyk7XG4gICAgfVxuICAgIGlmICgnaGVkZ2luZ0RlbGF5JyBpbiBvYmogJiZcbiAgICAgICAgKHR5cGVvZiBvYmouaGVkZ2luZ0RlbGF5ICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgIURVUkFUSU9OX1JFR0VYLnRlc3Qob2JqLmhlZGdpbmdEZWxheSkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnIGhlZGdpbmcgcG9saWN5OiBoZWRnaW5nRGVsYXkgbXVzdCBiZSBhIHN0cmluZyBjb25zaXN0aW5nIG9mIGEgcG9zaXRpdmUgaW50ZWdlciBmb2xsb3dlZCBieSBzJyk7XG4gICAgfVxuICAgIGlmICgnbm9uRmF0YWxTdGF0dXNDb2RlcycgaW4gb2JqICYmIEFycmF5LmlzQXJyYXkob2JqLm5vbkZhdGFsU3RhdHVzQ29kZXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqLm5vbkZhdGFsU3RhdHVzQ29kZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGNvbnN0YW50c18xLlN0YXR1cykuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnIGhlZGdpbmcgcG9saWN5OiBub25GYXRhbFN0YXR1c0NvZGVzIHZhbHVlIG5vdCBpbiBzdGF0dXMgY29kZSByYW5nZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC52YWx1ZXMoY29uc3RhbnRzXzEuU3RhdHVzKS5pbmNsdWRlcyh2YWx1ZS50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZyBoZWRnaW5nIHBvbGljeTogbm9uRmF0YWxTdGF0dXNDb2RlcyB2YWx1ZSBub3QgYSBzdGF0dXMgY29kZSBuYW1lJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBjb25maWcgaGVkZ2luZyBwb2xpY3k6IG5vbkZhdGFsU3RhdHVzQ29kZXMgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBudW1iZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIG1heEF0dGVtcHRzOiBvYmoubWF4QXR0ZW1wdHMsXG4gICAgfTtcbiAgICBpZiAob2JqLmhlZGdpbmdEZWxheSkge1xuICAgICAgICByZXN1bHQuaGVkZ2luZ0RlbGF5ID0gb2JqLmhlZGdpbmdEZWxheTtcbiAgICB9XG4gICAgaWYgKG9iai5ub25GYXRhbFN0YXR1c0NvZGVzKSB7XG4gICAgICAgIHJlc3VsdC5ub25GYXRhbFN0YXR1c0NvZGVzID0gb2JqLm5vbkZhdGFsU3RhdHVzQ29kZXM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZU1ldGhvZENvbmZpZyhvYmopIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiBbXSxcbiAgICB9O1xuICAgIGlmICghKCduYW1lJyBpbiBvYmopIHx8ICFBcnJheS5pc0FycmF5KG9iai5uYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZzogaW52YWxpZCBuYW1lIGFycmF5Jyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBvYmoubmFtZSkge1xuICAgICAgICByZXN1bHQubmFtZS5wdXNoKHZhbGlkYXRlTmFtZShuYW1lKSk7XG4gICAgfVxuICAgIGlmICgnd2FpdEZvclJlYWR5JyBpbiBvYmopIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmoud2FpdEZvclJlYWR5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnOiBpbnZhbGlkIHdhaXRGb3JSZWFkeScpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC53YWl0Rm9yUmVhZHkgPSBvYmoud2FpdEZvclJlYWR5O1xuICAgIH1cbiAgICBpZiAoJ3RpbWVvdXQnIGluIG9iaikge1xuICAgICAgICBpZiAodHlwZW9mIG9iai50aW1lb3V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCEoJ3NlY29uZHMnIGluIG9iai50aW1lb3V0KSB8fFxuICAgICAgICAgICAgICAgICEodHlwZW9mIG9iai50aW1lb3V0LnNlY29uZHMgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnOiBpbnZhbGlkIHRpbWVvdXQuc2Vjb25kcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoJ25hbm9zJyBpbiBvYmoudGltZW91dCkgfHxcbiAgICAgICAgICAgICAgICAhKHR5cGVvZiBvYmoudGltZW91dC5uYW5vcyA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBjb25maWc6IGludmFsaWQgdGltZW91dC5uYW5vcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBvYmoudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqLnRpbWVvdXQgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBEVVJBVElPTl9SRUdFWC50ZXN0KG9iai50aW1lb3V0KSkge1xuICAgICAgICAgICAgY29uc3QgdGltZW91dFBhcnRzID0gb2JqLnRpbWVvdXRcbiAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDAsIG9iai50aW1lb3V0Lmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICByZXN1bHQudGltZW91dCA9IHtcbiAgICAgICAgICAgICAgICBzZWNvbmRzOiB0aW1lb3V0UGFydHNbMF0gfCAwLFxuICAgICAgICAgICAgICAgIG5hbm9zOiAoKF9hID0gdGltZW91dFBhcnRzWzFdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKSB8IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBjb25maWc6IGludmFsaWQgdGltZW91dCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgnbWF4UmVxdWVzdEJ5dGVzJyBpbiBvYmopIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmoubWF4UmVxdWVzdEJ5dGVzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBjb25maWc6IGludmFsaWQgbWF4UmVxdWVzdEJ5dGVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Lm1heFJlcXVlc3RCeXRlcyA9IG9iai5tYXhSZXF1ZXN0Qnl0ZXM7XG4gICAgfVxuICAgIGlmICgnbWF4UmVzcG9uc2VCeXRlcycgaW4gb2JqKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqLm1heFJlc3BvbnNlQnl0ZXMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIGNvbmZpZzogaW52YWxpZCBtYXhSZXF1ZXN0Qnl0ZXMnKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQubWF4UmVzcG9uc2VCeXRlcyA9IG9iai5tYXhSZXNwb25zZUJ5dGVzO1xuICAgIH1cbiAgICBpZiAoJ3JldHJ5UG9saWN5JyBpbiBvYmopIHtcbiAgICAgICAgaWYgKCdoZWRnaW5nUG9saWN5JyBpbiBvYmopIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtZXRob2QgY29uZmlnOiByZXRyeVBvbGljeSBhbmQgaGVkZ2luZ1BvbGljeSBjYW5ub3QgYm90aCBiZSBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZXRyeVBvbGljeSA9IHZhbGlkYXRlUmV0cnlQb2xpY3kob2JqLnJldHJ5UG9saWN5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgnaGVkZ2luZ1BvbGljeScgaW4gb2JqKSB7XG4gICAgICAgIHJlc3VsdC5oZWRnaW5nUG9saWN5ID0gdmFsaWRhdGVIZWRnaW5nUG9saWN5KG9iai5oZWRnaW5nUG9saWN5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUmV0cnlUaHJvdHRsaW5nKG9iaikge1xuICAgIGlmICghKCdtYXhUb2tlbnMnIGluIG9iaikgfHxcbiAgICAgICAgdHlwZW9mIG9iai5tYXhUb2tlbnMgIT09ICdudW1iZXInIHx8XG4gICAgICAgIG9iai5tYXhUb2tlbnMgPD0gMCB8fFxuICAgICAgICBvYmoubWF4VG9rZW5zID4gMTAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmV0cnlUaHJvdHRsaW5nOiBtYXhUb2tlbnMgbXVzdCBiZSBhIG51bWJlciBpbiAoMCwgMTAwMF0nKTtcbiAgICB9XG4gICAgaWYgKCEoJ3Rva2VuUmF0aW8nIGluIG9iaikgfHxcbiAgICAgICAgdHlwZW9mIG9iai50b2tlblJhdGlvICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICBvYmoudG9rZW5SYXRpbyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXRyeVRocm90dGxpbmc6IHRva2VuUmF0aW8gbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtYXhUb2tlbnM6ICtvYmoubWF4VG9rZW5zLnRvRml4ZWQoMyksXG4gICAgICAgIHRva2VuUmF0aW86ICtvYmoudG9rZW5SYXRpby50b0ZpeGVkKDMpLFxuICAgIH07XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUxvYWRCYWxhbmNpbmdDb25maWcob2JqKSB7XG4gICAgaWYgKCEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbG9hZEJhbGFuY2luZ0NvbmZpZzogdW5leHBlY3RlZCB0eXBlICR7dHlwZW9mIG9ian1gKTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbG9hZEJhbGFuY2luZ0NvbmZpZzogdW5leHBlY3RlZCBtdWx0aXBsZSBrZXlzICR7a2V5c31gKTtcbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2FkQmFsYW5jaW5nQ29uZmlnOiBsb2FkIGJhbGFuY2luZyBwb2xpY3kgbmFtZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBba2V5c1swXV06IG9ialtrZXlzWzBdXSxcbiAgICB9O1xufVxuZnVuY3Rpb24gdmFsaWRhdGVTZXJ2aWNlQ29uZmlnKG9iaikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgbG9hZEJhbGFuY2luZ0NvbmZpZzogW10sXG4gICAgICAgIG1ldGhvZENvbmZpZzogW10sXG4gICAgfTtcbiAgICBpZiAoJ2xvYWRCYWxhbmNpbmdQb2xpY3knIGluIG9iaikge1xuICAgICAgICBpZiAodHlwZW9mIG9iai5sb2FkQmFsYW5jaW5nUG9saWN5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0LmxvYWRCYWxhbmNpbmdQb2xpY3kgPSBvYmoubG9hZEJhbGFuY2luZ1BvbGljeTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogaW52YWxpZCBsb2FkQmFsYW5jaW5nUG9saWN5Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCdsb2FkQmFsYW5jaW5nQ29uZmlnJyBpbiBvYmopIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqLmxvYWRCYWxhbmNpbmdDb25maWcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBvYmoubG9hZEJhbGFuY2luZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5sb2FkQmFsYW5jaW5nQ29uZmlnLnB1c2godmFsaWRhdGVMb2FkQmFsYW5jaW5nQ29uZmlnKGNvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBpbnZhbGlkIGxvYWRCYWxhbmNpbmdDb25maWcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ21ldGhvZENvbmZpZycgaW4gb2JqKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iai5tZXRob2RDb25maWcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1ldGhvZENvbmZpZyBvZiBvYmoubWV0aG9kQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1ldGhvZENvbmZpZy5wdXNoKHZhbGlkYXRlTWV0aG9kQ29uZmlnKG1ldGhvZENvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgncmV0cnlUaHJvdHRsaW5nJyBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0LnJldHJ5VGhyb3R0bGluZyA9IHZhbGlkYXRlUmV0cnlUaHJvdHRsaW5nKG9iai5yZXRyeVRocm90dGxpbmcpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBtZXRob2QgbmFtZSB1bmlxdWVuZXNzXG4gICAgY29uc3Qgc2Vlbk1ldGhvZE5hbWVzID0gW107XG4gICAgZm9yIChjb25zdCBtZXRob2RDb25maWcgb2YgcmVzdWx0Lm1ldGhvZENvbmZpZykge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbWV0aG9kQ29uZmlnLm5hbWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2Vlbk5hbWUgb2Ygc2Vlbk1ldGhvZE5hbWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUuc2VydmljZSA9PT0gc2Vlbk5hbWUuc2VydmljZSAmJlxuICAgICAgICAgICAgICAgICAgICBuYW1lLm1ldGhvZCA9PT0gc2Vlbk5hbWUubWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogZHVwbGljYXRlIG5hbWUgJHtuYW1lLnNlcnZpY2V9LyR7bmFtZS5tZXRob2R9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbk1ldGhvZE5hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQ2FuYXJ5Q29uZmlnKG9iaikge1xuICAgIGlmICghKCdzZXJ2aWNlQ29uZmlnJyBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZXJ2aWNlIGNvbmZpZyBjaG9pY2U6IG1pc3Npbmcgc2VydmljZSBjb25maWcnKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBzZXJ2aWNlQ29uZmlnOiB2YWxpZGF0ZVNlcnZpY2VDb25maWcob2JqLnNlcnZpY2VDb25maWcpLFxuICAgIH07XG4gICAgaWYgKCdjbGllbnRMYW5ndWFnZScgaW4gb2JqKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iai5jbGllbnRMYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5jbGllbnRMYW5ndWFnZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYW5nIG9mIG9iai5jbGllbnRMYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFuZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNsaWVudExhbmd1YWdlLnB1c2gobGFuZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VydmljZSBjb25maWcgY2hvaWNlOiBpbnZhbGlkIGNsaWVudExhbmd1YWdlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlcnZpY2UgY29uZmlnIGNob2ljZTogaW52YWxpZCBjbGllbnRMYW5ndWFnZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICgnY2xpZW50SG9zdG5hbWUnIGluIG9iaikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmouY2xpZW50SG9zdG5hbWUpKSB7XG4gICAgICAgICAgICByZXN1bHQuY2xpZW50SG9zdG5hbWUgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGFuZyBvZiBvYmouY2xpZW50SG9zdG5hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGxhbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jbGllbnRIb3N0bmFtZS5wdXNoKGxhbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlcnZpY2UgY29uZmlnIGNob2ljZTogaW52YWxpZCBjbGllbnRIb3N0bmFtZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZXJ2aWNlIGNvbmZpZyBjaG9pY2U6IGludmFsaWQgY2xpZW50SG9zdG5hbWUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ3BlcmNlbnRhZ2UnIGluIG9iaikge1xuICAgICAgICBpZiAodHlwZW9mIG9iai5wZXJjZW50YWdlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgMCA8PSBvYmoucGVyY2VudGFnZSAmJlxuICAgICAgICAgICAgb2JqLnBlcmNlbnRhZ2UgPD0gMTAwKSB7XG4gICAgICAgICAgICByZXN1bHQucGVyY2VudGFnZSA9IG9iai5wZXJjZW50YWdlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlcnZpY2UgY29uZmlnIGNob2ljZTogaW52YWxpZCBwZXJjZW50YWdlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhhdCBubyB1bmV4cGVjdGVkIGZpZWxkcyBhcmUgcHJlc2VudFxuICAgIGNvbnN0IGFsbG93ZWRGaWVsZHMgPSBbXG4gICAgICAgICdjbGllbnRMYW5ndWFnZScsXG4gICAgICAgICdwZXJjZW50YWdlJyxcbiAgICAgICAgJ2NsaWVudEhvc3RuYW1lJyxcbiAgICAgICAgJ3NlcnZpY2VDb25maWcnLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWVsZCBpbiBvYmopIHtcbiAgICAgICAgaWYgKCFhbGxvd2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlcnZpY2UgY29uZmlnIGNob2ljZTogdW5leHBlY3RlZCBmaWVsZCAke2ZpZWxkfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFuZFNlbGVjdENhbmFyeUNvbmZpZyhvYmosIHBlcmNlbnRhZ2UpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VydmljZSBjb25maWcgbGlzdCcpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBvYmopIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVDYW5hcnlDb25maWcoY29uZmlnKTtcbiAgICAgICAgLyogRm9yIGVhY2ggZmllbGQsIHdlIGNoZWNrIGlmIGl0IGlzIHByZXNlbnQsIHRoZW4gb25seSBkaXNjYXJkIHRoZVxuICAgICAgICAgKiBjb25maWcgaWYgdGhlIGZpZWxkIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNsaWVudCAqL1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRlZENvbmZpZy5wZXJjZW50YWdlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgcGVyY2VudGFnZSA+IHZhbGlkYXRlZENvbmZpZy5wZXJjZW50YWdlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0ZWRDb25maWcuY2xpZW50SG9zdG5hbWUpKSB7XG4gICAgICAgICAgICBsZXQgaG9zdG5hbWVNYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhvc3RuYW1lIG9mIHZhbGlkYXRlZENvbmZpZy5jbGllbnRIb3N0bmFtZSkge1xuICAgICAgICAgICAgICAgIGlmIChob3N0bmFtZSA9PT0gb3MuaG9zdG5hbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBob3N0bmFtZU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaG9zdG5hbWVNYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGVkQ29uZmlnLmNsaWVudExhbmd1YWdlKSkge1xuICAgICAgICAgICAgbGV0IGxhbmd1YWdlTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiB2YWxpZGF0ZWRDb25maWcuY2xpZW50TGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2UgPT09IENMSUVOVF9MQU5HVUFHRV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxhbmd1YWdlTWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRDb25maWcuc2VydmljZUNvbmZpZztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBtYXRjaGluZyBzZXJ2aWNlIGNvbmZpZyBmb3VuZCcpO1xufVxuLyoqXG4gKiBGaW5kIHRoZSBcImdycGNfY29uZmlnXCIgcmVjb3JkIGFtb25nIHRoZSBUWFQgcmVjb3JkcywgcGFyc2UgaXRzIHZhbHVlIGFzIEpTT04sIHZhbGlkYXRlIGl0cyBjb250ZW50cyxcbiAqIGFuZCBzZWxlY3QgYSBzZXJ2aWNlIGNvbmZpZyB3aXRoIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCBhbGwgbWF0Y2ggdGhpcyBjbGllbnQuIE1vc3Qgb2YgdGhlc2Ugc3RlcHNcbiAqIGNhbiBmYWlsIHdpdGggYW4gZXJyb3I7IHRoZSBjYWxsZXIgbXVzdCBoYW5kbGUgYW55IGVycm9ycyB0aHJvd24gdGhpcyB3YXkuXG4gKiBAcGFyYW0gdHh0UmVjb3JkIFRoZSBUWFQgcmVjb3JkIGFycmF5IHRoYXQgaXMgb3V0cHV0IGZyb20gYSBzdWNjZXNzZnVsIGNhbGwgdG8gZG5zLnJlc29sdmVUeHRcbiAqIEBwYXJhbSBwZXJjZW50YWdlIEEgbnVtYmVyIGNob3NlbiBmcm9tIHRoZSByYW5nZSBbMCwgMTAwKSB0aGF0IGlzIHVzZWQgdG8gc2VsZWN0IHdoaWNoIGNvbmZpZyB0byB1c2VcbiAqIEByZXR1cm4gVGhlIHNlcnZpY2UgY29uZmlndXJhdGlvbiB0byB1c2UsIGdpdmVuIHRoZSBwZXJjZW50YWdlIHZhbHVlLCBvciBudWxsIGlmIHRoZSBzZXJ2aWNlIGNvbmZpZ1xuICogICAgIGRhdGEgaGFzIGEgdmFsaWQgZm9ybWF0IGJ1dCBub25lIG9mIHRoZSBvcHRpb25zIG1hdGNoIHRoZSBjdXJyZW50IGNsaWVudC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEFuZFNlbGVjdFNlcnZpY2VDb25maWcodHh0UmVjb3JkLCBwZXJjZW50YWdlKSB7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgdHh0UmVjb3JkKSB7XG4gICAgICAgIGlmIChyZWNvcmQubGVuZ3RoID4gMCAmJiByZWNvcmRbMF0uc3RhcnRzV2l0aCgnZ3JwY19jb25maWc9JykpIHtcbiAgICAgICAgICAgIC8qIFRyZWF0IHRoZSBsaXN0IG9mIHN0cmluZ3MgaW4gdGhpcyByZWNvcmQgYXMgYSBzaW5nbGUgc3RyaW5nIGFuZCByZW1vdmVcbiAgICAgICAgICAgICAqIFwiZ3JwY19jb25maWc9XCIgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGUgcmVzdCBzaG91bGQgYmUgYSBKU09OIHN0cmluZyAqL1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkU3RyaW5nID0gcmVjb3JkLmpvaW4oJycpLnN1YnN0cmluZygnZ3JwY19jb25maWc9Jy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkSnNvbiA9IEpTT04ucGFyc2UocmVjb3JkU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUFuZFNlbGVjdENhbmFyeUNvbmZpZyhyZWNvcmRKc29uLCBwZXJjZW50YWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZpY2UtY29uZmlnLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjEgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29ubmVjdGl2aXR5U3RhdGUgPSB2b2lkIDA7XG52YXIgQ29ubmVjdGl2aXR5U3RhdGU7XG4oZnVuY3Rpb24gKENvbm5lY3Rpdml0eVN0YXRlKSB7XG4gICAgQ29ubmVjdGl2aXR5U3RhdGVbQ29ubmVjdGl2aXR5U3RhdGVbXCJJRExFXCJdID0gMF0gPSBcIklETEVcIjtcbiAgICBDb25uZWN0aXZpdHlTdGF0ZVtDb25uZWN0aXZpdHlTdGF0ZVtcIkNPTk5FQ1RJTkdcIl0gPSAxXSA9IFwiQ09OTkVDVElOR1wiO1xuICAgIENvbm5lY3Rpdml0eVN0YXRlW0Nvbm5lY3Rpdml0eVN0YXRlW1wiUkVBRFlcIl0gPSAyXSA9IFwiUkVBRFlcIjtcbiAgICBDb25uZWN0aXZpdHlTdGF0ZVtDb25uZWN0aXZpdHlTdGF0ZVtcIlRSQU5TSUVOVF9GQUlMVVJFXCJdID0gM10gPSBcIlRSQU5TSUVOVF9GQUlMVVJFXCI7XG4gICAgQ29ubmVjdGl2aXR5U3RhdGVbQ29ubmVjdGl2aXR5U3RhdGVbXCJTSFVURE9XTlwiXSA9IDRdID0gXCJTSFVURE9XTlwiO1xufSkoQ29ubmVjdGl2aXR5U3RhdGUgfHwgKGV4cG9ydHMuQ29ubmVjdGl2aXR5U3RhdGUgPSBDb25uZWN0aXZpdHlTdGF0ZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25uZWN0aXZpdHktc3RhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5RdWV1ZVBpY2tlciA9IGV4cG9ydHMuVW5hdmFpbGFibGVQaWNrZXIgPSBleHBvcnRzLlBpY2tSZXN1bHRUeXBlID0gdm9pZCAwO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG52YXIgUGlja1Jlc3VsdFR5cGU7XG4oZnVuY3Rpb24gKFBpY2tSZXN1bHRUeXBlKSB7XG4gICAgUGlja1Jlc3VsdFR5cGVbUGlja1Jlc3VsdFR5cGVbXCJDT01QTEVURVwiXSA9IDBdID0gXCJDT01QTEVURVwiO1xuICAgIFBpY2tSZXN1bHRUeXBlW1BpY2tSZXN1bHRUeXBlW1wiUVVFVUVcIl0gPSAxXSA9IFwiUVVFVUVcIjtcbiAgICBQaWNrUmVzdWx0VHlwZVtQaWNrUmVzdWx0VHlwZVtcIlRSQU5TSUVOVF9GQUlMVVJFXCJdID0gMl0gPSBcIlRSQU5TSUVOVF9GQUlMVVJFXCI7XG4gICAgUGlja1Jlc3VsdFR5cGVbUGlja1Jlc3VsdFR5cGVbXCJEUk9QXCJdID0gM10gPSBcIkRST1BcIjtcbn0pKFBpY2tSZXN1bHRUeXBlIHx8IChleHBvcnRzLlBpY2tSZXN1bHRUeXBlID0gUGlja1Jlc3VsdFR5cGUgPSB7fSkpO1xuLyoqXG4gKiBBIHN0YW5kYXJkIHBpY2tlciByZXByZXNlbnRpbmcgYSBsb2FkIGJhbGFuY2VyIGluIHRoZSBUUkFOU0lFTlRfRkFJTFVSRVxuICogc3RhdGUuIEFsd2F5cyByZXNwb25kcyB0byBldmVyeSBwaWNrIHJlcXVlc3Qgd2l0aCBhbiBVTkFWQUlMQUJMRSBzdGF0dXMuXG4gKi9cbmNsYXNzIFVuYXZhaWxhYmxlUGlja2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdGF0dXMpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBPYmplY3QuYXNzaWduKHsgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlVOQVZBSUxBQkxFLCBkZXRhaWxzOiAnTm8gY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcsIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpIH0sIHN0YXR1cyk7XG4gICAgfVxuICAgIHBpY2socGlja0FyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBpY2tSZXN1bHRUeXBlOiBQaWNrUmVzdWx0VHlwZS5UUkFOU0lFTlRfRkFJTFVSRSxcbiAgICAgICAgICAgIHN1YmNoYW5uZWw6IG51bGwsXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgICAgICAgb25DYWxsU3RhcnRlZDogbnVsbCxcbiAgICAgICAgICAgIG9uQ2FsbEVuZGVkOiBudWxsLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuVW5hdmFpbGFibGVQaWNrZXIgPSBVbmF2YWlsYWJsZVBpY2tlcjtcbi8qKlxuICogQSBzdGFuZGFyZCBwaWNrZXIgcmVwcmVzZW50aW5nIGEgbG9hZCBiYWxhbmNlciBpbiB0aGUgSURMRSBvciBDT05ORUNUSU5HXG4gKiBzdGF0ZS4gQWx3YXlzIHJlc3BvbmRzIHRvIGV2ZXJ5IHBpY2sgcmVxdWVzdCB3aXRoIGEgUVVFVUUgcGljayByZXN1bHRcbiAqIGluZGljYXRpbmcgdGhhdCB0aGUgcGljayBzaG91bGQgYmUgdHJpZWQgYWdhaW4gd2l0aCB0aGUgbmV4dCBgUGlja2VyYC4gQWxzb1xuICogcmVwb3J0cyBiYWNrIHRvIHRoZSBsb2FkIGJhbGFuY2VyIHRoYXQgYSBjb25uZWN0aW9uIHNob3VsZCBiZSBlc3RhYmxpc2hlZFxuICogb25jZSBhbnkgcGljayBpcyBhdHRlbXB0ZWQuXG4gKiBJZiB0aGUgY2hpbGRQaWNrZXIgaXMgcHJvdmlkZWQsIGRlbGVnYXRlIHRvIGl0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZVxuICogaGFyZGNvZGVkIFFVRVVFIHBpY2sgcmVzdWx0LCBidXQgc3RpbGwgY2FsbHMgZXhpdElkbGUuXG4gKi9cbmNsYXNzIFF1ZXVlUGlja2VyIHtcbiAgICAvLyBDb25zdHJ1Y3RlZCB3aXRoIGEgbG9hZCBiYWxhbmNlci4gQ2FsbHMgZXhpdElkbGUgb24gaXQgdGhlIGZpcnN0IHRpbWUgcGljayBpcyBjYWxsZWRcbiAgICBjb25zdHJ1Y3Rvcihsb2FkQmFsYW5jZXIsIGNoaWxkUGlja2VyKSB7XG4gICAgICAgIHRoaXMubG9hZEJhbGFuY2VyID0gbG9hZEJhbGFuY2VyO1xuICAgICAgICB0aGlzLmNoaWxkUGlja2VyID0gY2hpbGRQaWNrZXI7XG4gICAgICAgIHRoaXMuY2FsbGVkRXhpdElkbGUgPSBmYWxzZTtcbiAgICB9XG4gICAgcGljayhwaWNrQXJncykge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkRXhpdElkbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEJhbGFuY2VyLmV4aXRJZGxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGVkRXhpdElkbGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoaWxkUGlja2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZFBpY2tlci5waWNrKHBpY2tBcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGlja1Jlc3VsdFR5cGU6IFBpY2tSZXN1bHRUeXBlLlFVRVVFLFxuICAgICAgICAgICAgICAgIHN1YmNoYW5uZWw6IG51bGwsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBudWxsLFxuICAgICAgICAgICAgICAgIG9uQ2FsbFN0YXJ0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgb25DYWxsRW5kZWQ6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5RdWV1ZVBpY2tlciA9IFF1ZXVlUGlja2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlja2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFja29mZlRpbWVvdXQgPSB2b2lkIDA7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGxvZ2dpbmcgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3QgVFJBQ0VSX05BTUUgPSAnYmFja29mZic7XG5jb25zdCBJTklUSUFMX0JBQ0tPRkZfTVMgPSAxMDAwO1xuY29uc3QgQkFDS09GRl9NVUxUSVBMSUVSID0gMS42O1xuY29uc3QgTUFYX0JBQ0tPRkZfTVMgPSAxMjAwMDA7XG5jb25zdCBCQUNLT0ZGX0pJVFRFUiA9IDAuMjtcbi8qKlxuICogR2V0IGEgbnVtYmVyIHVuaWZvcm1seSBhdCByYW5kb20gaW4gdGhlIHJhbmdlIFttaW4sIG1heClcbiAqIEBwYXJhbSBtaW5cbiAqIEBwYXJhbSBtYXhcbiAqL1xuZnVuY3Rpb24gdW5pZm9ybVJhbmRvbShtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG59XG5jbGFzcyBCYWNrb2ZmVGltZW91dCB7XG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGRlbGF5IHRpbWUgYXQgdGhlIHN0YXJ0LCBhbmQgYWZ0ZXIgZWFjaCByZXNldC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5pdGlhbERlbGF5ID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGV4cG9uZW50aWFsIGJhY2tvZmYgbXVsdGlwbGllci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubXVsdGlwbGllciA9IEJBQ0tPRkZfTVVMVElQTElFUjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWF4RGVsYXkgPSBNQVhfQkFDS09GRl9NUztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBtYXhpbXVtIGZyYWN0aW9uIGJ5IHdoaWNoIHRoZSBkZWxheSB0aW1lIGNhbiByYW5kb21seSB2YXJ5IGFmdGVyXG4gICAgICAgICAqIGFwcGx5aW5nIHRoZSBtdWx0aXBsaWVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5qaXR0ZXIgPSBCQUNLT0ZGX0pJVFRFUjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0aW1lciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRpbWVyIHNob3VsZCBrZWVwIHRoZSBOb2RlIHByb2Nlc3MgcnVubmluZyBpZiBub1xuICAgICAgICAgKiBvdGhlciBhc3luYyBvcGVyYXRpb24gaXMgZG9pbmcgc28uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhc1JlZiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdGltZSB0aGF0IHRoZSBjdXJyZW50bHkgcnVubmluZyB0aW1lciB3YXMgc3RhcnRlZC4gT25seSB2YWxpZCBpZlxuICAgICAgICAgKiBydW5uaW5nIGlzIHRydWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYXBwcm94aW1hdGUgdGltZSB0aGF0IHRoZSBjdXJyZW50bHkgcnVubmluZyB0aW1lciB3aWxsIGVuZC4gT25seSB2YWxpZFxuICAgICAgICAgKiBpZiBydW5uaW5nIGlzIHRydWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmlkID0gQmFja29mZlRpbWVvdXQuZ2V0TmV4dElkKCk7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pbml0aWFsRGVsYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxEZWxheSA9IG9wdGlvbnMuaW5pdGlhbERlbGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGllcikge1xuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlwbGllciA9IG9wdGlvbnMubXVsdGlwbGllcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmppdHRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuaml0dGVyID0gb3B0aW9ucy5qaXR0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhEZWxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4RGVsYXkgPSBvcHRpb25zLm1heERlbGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2UoJ2NvbnN0cnVjdGVkIGluaXRpYWxEZWxheT0nICsgdGhpcy5pbml0aWFsRGVsYXkgKyAnIG11bHRpcGxpZXI9JyArIHRoaXMubXVsdGlwbGllciArICcgaml0dGVyPScgKyB0aGlzLmppdHRlciArICcgbWF4RGVsYXk9JyArIHRoaXMubWF4RGVsYXkpO1xuICAgICAgICB0aGlzLm5leHREZWxheSA9IHRoaXMuaW5pdGlhbERlbGF5O1xuICAgICAgICB0aGlzLnRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHsgfSwgMCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0TmV4dElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0SWQrKztcbiAgICB9XG4gICAgdHJhY2UodGV4dCkge1xuICAgICAgICBsb2dnaW5nLnRyYWNlKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgVFJBQ0VSX05BTUUsICd7JyArIHRoaXMuaWQgKyAnfSAnICsgdGV4dCk7XG4gICAgfVxuICAgIHJ1blRpbWVyKGRlbGF5KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMudHJhY2UoJ3J1blRpbWVyKGRlbGF5PScgKyBkZWxheSArICcpJyk7XG4gICAgICAgIHRoaXMuZW5kVGltZSA9IHRoaXMuc3RhcnRUaW1lO1xuICAgICAgICB0aGlzLmVuZFRpbWUuc2V0TWlsbGlzZWNvbmRzKHRoaXMuZW5kVGltZS5nZXRNaWxsaXNlY29uZHMoKSArIGRlbGF5KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICAgIHRoaXMudGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmFjZSgndGltZXIgZmlyZWQnKTtcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZWYpIHtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMudGltZXJJZCkudW5yZWYpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIHRoZSBjYWxsYmFjayBhZnRlciB0aGUgY3VycmVudCBhbW91bnQgb2YgZGVsYXkgdGltZVxuICAgICAqL1xuICAgIHJ1bk9uY2UoKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3J1bk9uY2UoKScpO1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMucnVuVGltZXIodGhpcy5uZXh0RGVsYXkpO1xuICAgICAgICBjb25zdCBuZXh0QmFja29mZiA9IE1hdGgubWluKHRoaXMubmV4dERlbGF5ICogdGhpcy5tdWx0aXBsaWVyLCB0aGlzLm1heERlbGF5KTtcbiAgICAgICAgY29uc3Qgaml0dGVyTWFnbml0dWRlID0gbmV4dEJhY2tvZmYgKiB0aGlzLmppdHRlcjtcbiAgICAgICAgdGhpcy5uZXh0RGVsYXkgPVxuICAgICAgICAgICAgbmV4dEJhY2tvZmYgKyB1bmlmb3JtUmFuZG9tKC1qaXR0ZXJNYWduaXR1ZGUsIGppdHRlck1hZ25pdHVkZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0b3AgdGhlIHRpbWVyLiBUaGUgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2FsbGVkIHVudGlsIGBydW5PbmNlYCBpcyBjYWxsZWRcbiAgICAgKiBhZ2Fpbi5cbiAgICAgKi9cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLnRyYWNlKCdzdG9wKCknKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgZGVsYXkgdGltZSB0byBpdHMgaW5pdGlhbCB2YWx1ZS4gSWYgdGhlIHRpbWVyIGlzIHN0aWxsIHJ1bm5pbmcsXG4gICAgICogcmV0cm9hY3RpdmVseSBhcHBseSB0aGF0IHJlc2V0IHRvIHRoZSBjdXJyZW50IHRpbWVyLlxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnRyYWNlKCdyZXNldCgpIHJ1bm5pbmc9JyArIHRoaXMucnVubmluZyk7XG4gICAgICAgIHRoaXMubmV4dERlbGF5ID0gdGhpcy5pbml0aWFsRGVsYXk7XG4gICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdFbmRUaW1lID0gdGhpcy5zdGFydFRpbWU7XG4gICAgICAgICAgICBuZXdFbmRUaW1lLnNldE1pbGxpc2Vjb25kcyhuZXdFbmRUaW1lLmdldE1pbGxpc2Vjb25kcygpICsgdGhpcy5uZXh0RGVsYXkpO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICAgICAgICBpZiAobm93IDwgbmV3RW5kVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuVGltZXIobmV3RW5kVGltZS5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIHRpbWVyIGlzIGN1cnJlbnRseSBydW5uaW5nLlxuICAgICAqL1xuICAgIGlzUnVubmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoYXQgd2hpbGUgdGhlIHRpbWVyIGlzIHJ1bm5pbmcsIGl0IHNob3VsZCBrZWVwIHRoZSBOb2RlIHByb2Nlc3NcbiAgICAgKiBydW5uaW5nLlxuICAgICAqL1xuICAgIHJlZigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5oYXNSZWYgPSB0cnVlO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLnRpbWVySWQpLnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhhdCB3aGlsZSB0aGUgdGltZXIgaXMgcnVubmluZywgaXQgc2hvdWxkIG5vdCBrZWVwIHRoZSBOb2RlIHByb2Nlc3NcbiAgICAgKiBydW5uaW5nLlxuICAgICAqL1xuICAgIHVucmVmKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLmhhc1JlZiA9IGZhbHNlO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLnRpbWVySWQpLnVucmVmKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYXBwcm94aW1hdGUgdGltZXN0YW1wIG9mIHdoZW4gdGhlIHRpbWVyIHdpbGwgZmlyZS4gT25seSB2YWxpZCBpZlxuICAgICAqIHRoaXMuaXNSdW5uaW5nKCkgaXMgdHJ1ZS5cbiAgICAgKi9cbiAgICBnZXRFbmRUaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmRUaW1lO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFja29mZlRpbWVvdXQgPSBCYWNrb2ZmVGltZW91dDtcbkJhY2tvZmZUaW1lb3V0Lm5leHRJZCA9IDA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrb2ZmLXRpbWVvdXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DaGlsZExvYWRCYWxhbmNlckhhbmRsZXIgPSB2b2lkIDA7XG5jb25zdCBsb2FkX2JhbGFuY2VyXzEgPSByZXF1aXJlKFwiLi9sb2FkLWJhbGFuY2VyXCIpO1xuY29uc3QgY29ubmVjdGl2aXR5X3N0YXRlXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHktc3RhdGVcIik7XG5jb25zdCBUWVBFX05BTUUgPSAnY2hpbGRfbG9hZF9iYWxhbmNlcl9oZWxwZXInO1xuY2xhc3MgQ2hpbGRMb2FkQmFsYW5jZXJIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udHJvbEhlbHBlcikge1xuICAgICAgICB0aGlzLmNoYW5uZWxDb250cm9sSGVscGVyID0gY2hhbm5lbENvbnRyb2xIZWxwZXI7XG4gICAgICAgIHRoaXMuY3VycmVudENoaWxkID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2hpbGQgPSBudWxsO1xuICAgICAgICB0aGlzLmxhdGVzdENvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMuQ2hpbGRQb2xpY3lIZWxwZXIgPSBjbGFzcyB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNyZWF0ZVN1YmNoYW5uZWwoc3ViY2hhbm5lbEFkZHJlc3MsIHN1YmNoYW5uZWxBcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNoYW5uZWxDb250cm9sSGVscGVyLmNyZWF0ZVN1YmNoYW5uZWwoc3ViY2hhbm5lbEFkZHJlc3MsIHN1YmNoYW5uZWxBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eVN0YXRlLCBwaWNrZXIsIGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsZWRCeVBlbmRpbmdDaGlsZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aXZpdHlTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuQ09OTkVDVElORykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRoaXMucGFyZW50LmN1cnJlbnRDaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY3VycmVudENoaWxkID0gdGhpcy5wYXJlbnQucGVuZGluZ0NoaWxkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5wZW5kaW5nQ2hpbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5jYWxsZWRCeUN1cnJlbnRDaGlsZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hhbm5lbENvbnRyb2xIZWxwZXIudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RSZXJlc29sdXRpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhdGVzdENoaWxkID0gKF9hID0gdGhpcy5wYXJlbnQucGVuZGluZ0NoaWxkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnBhcmVudC5jdXJyZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGQgPT09IGxhdGVzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoYW5uZWxDb250cm9sSGVscGVyLnJlcXVlc3RSZXJlc29sdXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDaGlsZChuZXdDaGlsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZENoYW5uZWx6Q2hpbGQoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGFubmVsQ29udHJvbEhlbHBlci5hZGRDaGFubmVsekNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUNoYW5uZWx6Q2hpbGQoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGFubmVsQ29udHJvbEhlbHBlci5yZW1vdmVDaGFubmVsekNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxlZEJ5UGVuZGluZ0NoaWxkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkID09PSB0aGlzLnBhcmVudC5wZW5kaW5nQ2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsZWRCeUN1cnJlbnRDaGlsZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZCA9PT0gdGhpcy5wYXJlbnQuY3VycmVudENoaWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25maWdVcGRhdGVSZXF1aXJlc05ld1BvbGljeUluc3RhbmNlKG9sZENvbmZpZywgbmV3Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBvbGRDb25maWcuZ2V0TG9hZEJhbGFuY2VyTmFtZSgpICE9PSBuZXdDb25maWcuZ2V0TG9hZEJhbGFuY2VyTmFtZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmVyZXF1aXNpdGVzOiBsYkNvbmZpZyAhPT0gbnVsbCBhbmQgbGJDb25maWcubmFtZSBpcyByZWdpc3RlcmVkXG4gICAgICogQHBhcmFtIGVuZHBvaW50TGlzdFxuICAgICAqIEBwYXJhbSBsYkNvbmZpZ1xuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgdXBkYXRlQWRkcmVzc0xpc3QoZW5kcG9pbnRMaXN0LCBsYkNvbmZpZywgb3B0aW9ucywgcmVzb2x1dGlvbk5vdGUpIHtcbiAgICAgICAgbGV0IGNoaWxkVG9VcGRhdGU7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGlsZCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy5sYXRlc3RDb25maWcgPT09IG51bGwgfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnVXBkYXRlUmVxdWlyZXNOZXdQb2xpY3lJbnN0YW5jZSh0aGlzLmxhdGVzdENvbmZpZywgbGJDb25maWcpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdIZWxwZXIgPSBuZXcgdGhpcy5DaGlsZFBvbGljeUhlbHBlcih0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoaWxkID0gKDAsIGxvYWRfYmFsYW5jZXJfMS5jcmVhdGVMb2FkQmFsYW5jZXIpKGxiQ29uZmlnLCBuZXdIZWxwZXIpO1xuICAgICAgICAgICAgbmV3SGVscGVyLnNldENoaWxkKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoaWxkID0gbmV3Q2hpbGQ7XG4gICAgICAgICAgICAgICAgY2hpbGRUb1VwZGF0ZSA9IHRoaXMuY3VycmVudENoaWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NoaWxkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hpbGQgPSBuZXdDaGlsZDtcbiAgICAgICAgICAgICAgICBjaGlsZFRvVXBkYXRlID0gdGhpcy5wZW5kaW5nQ2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFRvVXBkYXRlID0gdGhpcy5jdXJyZW50Q2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZFRvVXBkYXRlID0gdGhpcy5wZW5kaW5nQ2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXRlc3RDb25maWcgPSBsYkNvbmZpZztcbiAgICAgICAgcmV0dXJuIGNoaWxkVG9VcGRhdGUudXBkYXRlQWRkcmVzc0xpc3QoZW5kcG9pbnRMaXN0LCBsYkNvbmZpZywgb3B0aW9ucywgcmVzb2x1dGlvbk5vdGUpO1xuICAgIH1cbiAgICBleGl0SWRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGlsZC5leGl0SWRsZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hpbGQuZXhpdElkbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNldEJhY2tvZmYoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hpbGQucmVzZXRCYWNrb2ZmKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGlsZC5yZXNldEJhY2tvZmYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICAvKiBOb3RlOiBzdGF0ZSB1cGRhdGVzIGFyZSBvbmx5IHByb3BhZ2F0ZWQgZnJvbSB0aGUgY2hpbGQgYmFsYW5jZXIgaWYgdGhhdFxuICAgICAgICAgKiBvYmplY3QgaXMgZXF1YWwgdG8gdGhpcy5jdXJyZW50Q2hpbGQgb3IgdGhpcy5wZW5kaW5nQ2hpbGQuIFNpbmNlIHRoaXNcbiAgICAgICAgICogZnVuY3Rpb24gc2V0cyBib3RoIG9mIHRob3NlIHRvIG51bGwsIG5vIGZ1cnRoZXIgc3RhdGUgdXBkYXRlcyB3aWxsXG4gICAgICAgICAqIG9jY3VyIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4gKi9cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGlsZC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGlsZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGlsZC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDaGlsZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0VHlwZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBUWVBFX05BTUU7XG4gICAgfVxufVxuZXhwb3J0cy5DaGlsZExvYWRCYWxhbmNlckhhbmRsZXIgPSBDaGlsZExvYWRCYWxhbmNlckhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2FkLWJhbGFuY2VyLWNoaWxkLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXNvbHZpbmdMb2FkQmFsYW5jZXIgPSB2b2lkIDA7XG5jb25zdCBsb2FkX2JhbGFuY2VyXzEgPSByZXF1aXJlKFwiLi9sb2FkLWJhbGFuY2VyXCIpO1xuY29uc3Qgc2VydmljZV9jb25maWdfMSA9IHJlcXVpcmUoXCIuL3NlcnZpY2UtY29uZmlnXCIpO1xuY29uc3QgY29ubmVjdGl2aXR5X3N0YXRlXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHktc3RhdGVcIik7XG5jb25zdCByZXNvbHZlcl8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZXJcIik7XG5jb25zdCBwaWNrZXJfMSA9IHJlcXVpcmUoXCIuL3BpY2tlclwiKTtcbmNvbnN0IGJhY2tvZmZfdGltZW91dF8xID0gcmVxdWlyZShcIi4vYmFja29mZi10aW1lb3V0XCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18yID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXJpX3BhcnNlcl8xID0gcmVxdWlyZShcIi4vdXJpLXBhcnNlclwiKTtcbmNvbnN0IGxvYWRfYmFsYW5jZXJfY2hpbGRfaGFuZGxlcl8xID0gcmVxdWlyZShcIi4vbG9hZC1iYWxhbmNlci1jaGlsZC1oYW5kbGVyXCIpO1xuY29uc3QgVFJBQ0VSX05BTUUgPSAncmVzb2x2aW5nX2xvYWRfYmFsYW5jZXInO1xuZnVuY3Rpb24gdHJhY2UodGV4dCkge1xuICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzIuTG9nVmVyYm9zaXR5LkRFQlVHLCBUUkFDRVJfTkFNRSwgdGV4dCk7XG59XG4vKipcbiAqIE5hbWUgbWF0Y2ggbGV2ZWxzIGluIG9yZGVyIGZyb20gbW9zdCB0byBsZWFzdCBzcGVjaWZpYy4gVGhpcyBpcyB0aGUgb3JkZXIgaW5cbiAqIHdoaWNoIHNlYXJjaGVzIHdpbGwgYmUgcGVyZm9ybWVkLlxuICovXG5jb25zdCBOQU1FX01BVENIX0xFVkVMX09SREVSID0gW1xuICAgICdTRVJWSUNFX0FORF9NRVRIT0QnLFxuICAgICdTRVJWSUNFJyxcbiAgICAnRU1QVFknLFxuXTtcbmZ1bmN0aW9uIGhhc01hdGNoaW5nTmFtZShzZXJ2aWNlLCBtZXRob2QsIG1ldGhvZENvbmZpZywgbWF0Y2hMZXZlbCkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBtZXRob2RDb25maWcubmFtZSkge1xuICAgICAgICBzd2l0Y2ggKG1hdGNoTGV2ZWwpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VNUFRZJzpcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWUuc2VydmljZSAmJiAhbmFtZS5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU0VSVklDRSc6XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUuc2VydmljZSA9PT0gc2VydmljZSAmJiAhbmFtZS5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU0VSVklDRV9BTkRfTUVUSE9EJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZS5zZXJ2aWNlID09PSBzZXJ2aWNlICYmIG5hbWUubWV0aG9kID09PSBtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0NvbmZpZyhzZXJ2aWNlLCBtZXRob2QsIG1ldGhvZENvbmZpZ3MsIG1hdGNoTGV2ZWwpIHtcbiAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBtZXRob2RDb25maWdzKSB7XG4gICAgICAgIGlmIChoYXNNYXRjaGluZ05hbWUoc2VydmljZSwgbWV0aG9kLCBjb25maWcsIG1hdGNoTGV2ZWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmZpZ1NlbGVjdG9yKHNlcnZpY2VDb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbnZva2UobWV0aG9kTmFtZSwgbWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBzcGxpdE5hbWUgPSBtZXRob2ROYW1lLnNwbGl0KCcvJykuZmlsdGVyKHggPT4geC5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSAoX2EgPSBzcGxpdE5hbWVbMF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gKF9iID0gc3BsaXROYW1lWzFdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlQ29uZmlnICYmIHNlcnZpY2VDb25maWcubWV0aG9kQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIsIGFuZCByZXR1cm4gdGhlIGZpcnN0IG1ldGhvZFxuICAgICAgICAgICAgICAgICogY29uZmlnIHRoYXQgbWF0Y2hlczpcbiAgICAgICAgICAgICAgICAqIDEuIEEgbmFtZSB0aGF0IGV4YWN0bHkgbWF0Y2hlcyB0aGUgc2VydmljZSBhbmQgbWV0aG9kXG4gICAgICAgICAgICAgICAgKiAyLiBBIG5hbWUgd2l0aCBubyBtZXRob2Qgc2V0IHRoYXQgbWF0Y2hlcyB0aGUgc2VydmljZVxuICAgICAgICAgICAgICAgICogMy4gQW4gZW1wdHkgbmFtZVxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRjaExldmVsIG9mIE5BTUVfTUFUQ0hfTEVWRUxfT1JERVIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb25maWcgPSBmaW5kTWF0Y2hpbmdDb25maWcoc2VydmljZSwgbWV0aG9kLCBzZXJ2aWNlQ29uZmlnLm1ldGhvZENvbmZpZywgbWF0Y2hMZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RDb25maWc6IG1hdGNoaW5nQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tJbmZvcm1hdGlvbjoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBjb25zdGFudHNfMS5TdGF0dXMuT0ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pY0ZpbHRlckZhY3RvcmllczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtZXRob2RDb25maWc6IHsgbmFtZTogW10gfSxcbiAgICAgICAgICAgICAgICBwaWNrSW5mb3JtYXRpb246IHt9LFxuICAgICAgICAgICAgICAgIHN0YXR1czogY29uc3RhbnRzXzEuU3RhdHVzLk9LLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNGaWx0ZXJGYWN0b3JpZXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5yZWYoKSB7IH1cbiAgICB9O1xufVxuY2xhc3MgUmVzb2x2aW5nTG9hZEJhbGFuY2VyIHtcbiAgICAvKipcbiAgICAgKiBXcmFwcGVyIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgYExvYWRCYWxhbmNlcmAgYW5kIGFsc28gaGFuZGxlcyBuYW1lXG4gICAgICogcmVzb2x1dGlvbiBpbnRlcm5hbGx5LlxuICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIGFkZHJlc3Mgb2YgdGhlIGJhY2tlbmQgdG8gY29ubmVjdCB0by5cbiAgICAgKiBAcGFyYW0gY2hhbm5lbENvbnRyb2xIZWxwZXIgYENoYW5uZWxDb250cm9sSGVscGVyYCBpbnN0YW5jZSBwcm92aWRlZCBieVxuICAgICAqICAgICB0aGlzIGxvYWQgYmFsYW5jZXIncyBvd25lci5cbiAgICAgKiBAcGFyYW0gZGVmYXVsdFNlcnZpY2VDb25maWcgVGhlIGRlZmF1bHQgc2VydmljZSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWRcbiAgICAgKiAgICAgaWYgbm9uZSBpcyBwcm92aWRlZCBieSB0aGUgbmFtZSByZXNvbHZlci4gQSBgbnVsbGAgdmFsdWUgaW5kaWNhdGVzXG4gICAgICogICAgIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoZSBkZWZhdWx0IHVuY29uZmlndXJlZCBiZWhhdmlvci5cbiAgICAgKiAgICAgSW4gcHJhY3RpY2UsIHRoYXQgbWVhbnMgdXNpbmcgdGhlIFwicGljayBmaXJzdFwiIGxvYWQgYmFsYW5jZXJcbiAgICAgKiAgICAgaW1wbG1lbnRhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgY2hhbm5lbENvbnRyb2xIZWxwZXIsIGNoYW5uZWxPcHRpb25zLCBvblN1Y2Nlc3NmdWxSZXNvbHV0aW9uLCBvbkZhaWxlZFJlc29sdXRpb24pIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIgPSBjaGFubmVsQ29udHJvbEhlbHBlcjtcbiAgICAgICAgdGhpcy5jaGFubmVsT3B0aW9ucyA9IGNoYW5uZWxPcHRpb25zO1xuICAgICAgICB0aGlzLm9uU3VjY2Vzc2Z1bFJlc29sdXRpb24gPSBvblN1Y2Nlc3NmdWxSZXNvbHV0aW9uO1xuICAgICAgICB0aGlzLm9uRmFpbGVkUmVzb2x1dGlvbiA9IG9uRmFpbGVkUmVzb2x1dGlvbjtcbiAgICAgICAgdGhpcy5sYXRlc3RDaGlsZFN0YXRlID0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRTtcbiAgICAgICAgdGhpcy5sYXRlc3RDaGlsZFBpY2tlciA9IG5ldyBwaWNrZXJfMS5RdWV1ZVBpY2tlcih0aGlzKTtcbiAgICAgICAgdGhpcy5sYXRlc3RDaGlsZEVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIHJlc29sdmluZyBsb2FkIGJhbGFuY2VyJ3MgY3VycmVudCBjb25uZWN0aXZpdHkgc3RhdGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc2VydmljZSBjb25maWcgb2JqZWN0IGZyb20gdGhlIGxhc3Qgc3VjY2Vzc2Z1bCByZXNvbHV0aW9uLCBpZlxuICAgICAgICAgKiBhdmFpbGFibGUuIEEgdmFsdWUgb2YgbnVsbCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIG5vdCB5ZXQgcmVjZWl2ZWQgYSB2YWxpZFxuICAgICAgICAgKiBzZXJ2aWNlIGNvbmZpZyBmcm9tIHRoZSByZXNvbHZlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucHJldmlvdXNTZXJ2aWNlQ29uZmlnID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHdlIHNob3VsZCBhdHRlbXB0IHRvIHJlc29sdmUgYWdhaW4gYWZ0ZXIgdGhlIGJhY2tvZmZcbiAgICAgICAgICogdGltZXIgcnVucyBvdXQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbnRpbnVlUmVzb2x2aW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGFubmVsT3B0aW9uc1snZ3JwYy5zZXJ2aWNlX2NvbmZpZyddKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlQ29uZmlnID0gKDAsIHNlcnZpY2VfY29uZmlnXzEudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKShKU09OLnBhcnNlKGNoYW5uZWxPcHRpb25zWydncnBjLnNlcnZpY2VfY29uZmlnJ10pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2VDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbG9hZEJhbGFuY2luZ0NvbmZpZzogW10sXG4gICAgICAgICAgICAgICAgbWV0aG9kQ29uZmlnOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFLCBuZXcgcGlja2VyXzEuUXVldWVQaWNrZXIodGhpcyksIG51bGwpO1xuICAgICAgICB0aGlzLmNoaWxkTG9hZEJhbGFuY2VyID0gbmV3IGxvYWRfYmFsYW5jZXJfY2hpbGRfaGFuZGxlcl8xLkNoaWxkTG9hZEJhbGFuY2VySGFuZGxlcih7XG4gICAgICAgICAgICBjcmVhdGVTdWJjaGFubmVsOiBjaGFubmVsQ29udHJvbEhlbHBlci5jcmVhdGVTdWJjaGFubmVsLmJpbmQoY2hhbm5lbENvbnRyb2xIZWxwZXIpLFxuICAgICAgICAgICAgcmVxdWVzdFJlcmVzb2x1dGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qIElmIHRoZSBiYWNrb2ZmVGltZW91dCBpcyBydW5uaW5nLCB3ZSdyZSBzdGlsbCBiYWNraW5nIG9mZiBmcm9tXG4gICAgICAgICAgICAgICAgICogbWFraW5nIHJlc29sdmUgcmVxdWVzdHMsIHNvIHdlIHNob3VsZG4ndCBtYWtlIGFub3RoZXIgb25lIGhlcmUuXG4gICAgICAgICAgICAgICAgICogSW4gdGhhdCBjYXNlLCB0aGUgYmFja29mZiB0aW1lciBjYWxsYmFjayB3aWxsIGNhbGxcbiAgICAgICAgICAgICAgICAgKiB1cGRhdGVSZXNvbHV0aW9uICovXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFja29mZlRpbWVvdXQuaXNSdW5uaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2UoJ3JlcXVlc3RSZXJlc29sdXRpb24gZGVsYXllZCBieSBiYWNrb2ZmIHRpbWVyIHVudGlsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrb2ZmVGltZW91dC5nZXRFbmRUaW1lKCkudG9JU09TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGludWVSZXNvbHZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiAobmV3U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RDaGlsZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RDaGlsZFBpY2tlciA9IHBpY2tlcjtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdENoaWxkRXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUobmV3U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRDaGFubmVsekNoaWxkOiBjaGFubmVsQ29udHJvbEhlbHBlci5hZGRDaGFubmVsekNoaWxkLmJpbmQoY2hhbm5lbENvbnRyb2xIZWxwZXIpLFxuICAgICAgICAgICAgcmVtb3ZlQ2hhbm5lbHpDaGlsZDogY2hhbm5lbENvbnRyb2xIZWxwZXIucmVtb3ZlQ2hhbm5lbHpDaGlsZC5iaW5kKGNoYW5uZWxDb250cm9sSGVscGVyKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5uZXJSZXNvbHZlciA9ICgwLCByZXNvbHZlcl8xLmNyZWF0ZVJlc29sdmVyKSh0YXJnZXQsIHRoaXMuaGFuZGxlUmVzb2x2ZXJSZXN1bHQuYmluZCh0aGlzKSwgY2hhbm5lbE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBiYWNrb2ZmT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluaXRpYWxEZWxheTogY2hhbm5lbE9wdGlvbnNbJ2dycGMuaW5pdGlhbF9yZWNvbm5lY3RfYmFja29mZl9tcyddLFxuICAgICAgICAgICAgbWF4RGVsYXk6IGNoYW5uZWxPcHRpb25zWydncnBjLm1heF9yZWNvbm5lY3RfYmFja29mZl9tcyddLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0ID0gbmV3IGJhY2tvZmZfdGltZW91dF8xLkJhY2tvZmZUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRpbnVlUmVzb2x2aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250aW51ZVJlc29sdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh0aGlzLmxhdGVzdENoaWxkU3RhdGUsIHRoaXMubGF0ZXN0Q2hpbGRQaWNrZXIsIHRoaXMubGF0ZXN0Q2hpbGRFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBiYWNrb2ZmT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYmFja29mZlRpbWVvdXQudW5yZWYoKTtcbiAgICB9XG4gICAgaGFuZGxlUmVzb2x2ZXJSZXN1bHQoZW5kcG9pbnRMaXN0LCBhdHRyaWJ1dGVzLCBzZXJ2aWNlQ29uZmlnLCByZXNvbHV0aW9uTm90ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0LnN0b3AoKTtcbiAgICAgICAgdGhpcy5iYWNrb2ZmVGltZW91dC5yZXNldCgpO1xuICAgICAgICBsZXQgcmVzdWx0QWNjZXB0ZWQgPSB0cnVlO1xuICAgICAgICBsZXQgd29ya2luZ1NlcnZpY2VDb25maWcgPSBudWxsO1xuICAgICAgICBpZiAoc2VydmljZUNvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgd29ya2luZ1NlcnZpY2VDb25maWcgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlQ29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlcnZpY2VDb25maWcub2spIHtcbiAgICAgICAgICAgIHdvcmtpbmdTZXJ2aWNlQ29uZmlnID0gc2VydmljZUNvbmZpZy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzU2VydmljZUNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdvcmtpbmdTZXJ2aWNlQ29uZmlnID0gdGhpcy5wcmV2aW91c1NlcnZpY2VDb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRBY2NlcHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzb2x1dGlvbkZhaWx1cmUoc2VydmljZUNvbmZpZy5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdvcmtpbmdTZXJ2aWNlQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JraW5nQ29uZmlnTGlzdCA9IChfYSA9IHdvcmtpbmdTZXJ2aWNlQ29uZmlnID09PSBudWxsIHx8IHdvcmtpbmdTZXJ2aWNlQ29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3b3JraW5nU2VydmljZUNvbmZpZy5sb2FkQmFsYW5jaW5nQ29uZmlnKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRCYWxhbmNpbmdDb25maWcgPSAoMCwgbG9hZF9iYWxhbmNlcl8xLnNlbGVjdExiQ29uZmlnRnJvbUxpc3QpKHdvcmtpbmdDb25maWdMaXN0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChsb2FkQmFsYW5jaW5nQ29uZmlnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0QWNjZXB0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlc29sdXRpb25GYWlsdXJlKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlVOQVZBSUxBQkxFLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAnQWxsIGxvYWQgYmFsYW5jZXIgb3B0aW9ucyBpbiBzZXJ2aWNlIGNvbmZpZyBhcmUgbm90IGNvbXBhdGlibGUnLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdEFjY2VwdGVkID0gdGhpcy5jaGlsZExvYWRCYWxhbmNlci51cGRhdGVBZGRyZXNzTGlzdChlbmRwb2ludExpc3QsIGxvYWRCYWxhbmNpbmdDb25maWcsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jaGFubmVsT3B0aW9ucyksIGF0dHJpYnV0ZXMpLCByZXNvbHV0aW9uTm90ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdEFjY2VwdGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9uU3VjY2Vzc2Z1bFJlc29sdXRpb24od29ya2luZ1NlcnZpY2VDb25maWcsIChfYiA9IGF0dHJpYnV0ZXNbcmVzb2x2ZXJfMS5DSEFOTkVMX0FSR1NfQ09ORklHX1NFTEVDVE9SX0tFWV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGdldERlZmF1bHRDb25maWdTZWxlY3Rvcih3b3JraW5nU2VydmljZUNvbmZpZykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRBY2NlcHRlZDtcbiAgICB9XG4gICAgdXBkYXRlUmVzb2x1dGlvbigpIHtcbiAgICAgICAgdGhpcy5pbm5lclJlc29sdmVyLnVwZGF0ZVJlc29sdXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFKSB7XG4gICAgICAgICAgICAvKiB0aGlzLmxhdGVzdENoaWxkUGlja2VyIGlzIGluaXRpYWxpemVkIGFzIG5ldyBRdWV1ZVBpY2tlcih0aGlzKSwgd2hpY2hcbiAgICAgICAgICAgICAqIGlzIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGhlcmUgaWYgdGhlIGNoaWxkIExCIHBvbGljeSBpcyB1bnNldC5cbiAgICAgICAgICAgICAqIE90aGVyd2lzZSwgd2Ugd2FudCB0byBkZWxlZ2F0ZSB0byB0aGUgY2hpbGQgaGVyZSwgaW4gY2FzZSB0aGF0XG4gICAgICAgICAgICAgKiB0cmlnZ2VycyBzb21ldGhpbmcuICovXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLkNPTk5FQ1RJTkcsIHRoaXMubGF0ZXN0Q2hpbGRQaWNrZXIsIHRoaXMubGF0ZXN0Q2hpbGRFcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFja29mZlRpbWVvdXQucnVuT25jZSgpO1xuICAgIH1cbiAgICB1cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlTdGF0ZSwgcGlja2VyLCBlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdHJhY2UoKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGhpcy50YXJnZXQpICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZVt0aGlzLmN1cnJlbnRTdGF0ZV0gK1xuICAgICAgICAgICAgJyAtPiAnICtcbiAgICAgICAgICAgIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW2Nvbm5lY3Rpdml0eVN0YXRlXSk7XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoaXMuZXhpdElkbGUoKSBpcyBjYWxsZWQgYnkgdGhlIHBpY2tlclxuICAgICAgICBpZiAoY29ubmVjdGl2aXR5U3RhdGUgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEUpIHtcbiAgICAgICAgICAgIHBpY2tlciA9IG5ldyBwaWNrZXJfMS5RdWV1ZVBpY2tlcih0aGlzLCBwaWNrZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gY29ubmVjdGl2aXR5U3RhdGU7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgaGFuZGxlUmVzb2x1dGlvbkZhaWx1cmUoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMubGF0ZXN0Q2hpbGRTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSwgbmV3IHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyKGVycm9yKSwgZXJyb3IuZGV0YWlscyk7XG4gICAgICAgICAgICB0aGlzLm9uRmFpbGVkUmVzb2x1dGlvbihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXhpdElkbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRSB8fFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlRSQU5TSUVOVF9GQUlMVVJFKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYWNrb2ZmVGltZW91dC5pc1J1bm5pbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGludWVSZXNvbHZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZExvYWRCYWxhbmNlci5leGl0SWRsZSgpO1xuICAgIH1cbiAgICB1cGRhdGVBZGRyZXNzTGlzdChlbmRwb2ludExpc3QsIGxiQ29uZmlnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndXBkYXRlQWRkcmVzc0xpc3Qgbm90IHN1cHBvcnRlZCBvbiBSZXNvbHZpbmdMb2FkQmFsYW5jZXInKTtcbiAgICB9XG4gICAgcmVzZXRCYWNrb2ZmKCkge1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0LnJlc2V0KCk7XG4gICAgICAgIHRoaXMuY2hpbGRMb2FkQmFsYW5jZXIucmVzZXRCYWNrb2ZmKCk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2hpbGRMb2FkQmFsYW5jZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlubmVyUmVzb2x2ZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0LnJlc2V0KCk7XG4gICAgICAgIHRoaXMuYmFja29mZlRpbWVvdXQuc3RvcCgpO1xuICAgICAgICB0aGlzLmxhdGVzdENoaWxkU3RhdGUgPSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFO1xuICAgICAgICB0aGlzLmxhdGVzdENoaWxkUGlja2VyID0gbmV3IHBpY2tlcl8xLlF1ZXVlUGlja2VyKHRoaXMpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEU7XG4gICAgICAgIHRoaXMucHJldmlvdXNTZXJ2aWNlQ29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb250aW51ZVJlc29sdmluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICdyZXNvbHZpbmdfbG9hZF9iYWxhbmNlcic7XG4gICAgfVxufVxuZXhwb3J0cy5SZXNvbHZpbmdMb2FkQmFsYW5jZXIgPSBSZXNvbHZpbmdMb2FkQmFsYW5jZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZpbmctbG9hZC1iYWxhbmNlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDE5IGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlY29nbml6ZWRPcHRpb25zID0gdm9pZCAwO1xuZXhwb3J0cy5jaGFubmVsT3B0aW9uc0VxdWFsID0gY2hhbm5lbE9wdGlvbnNFcXVhbDtcbi8qKlxuICogVGhpcyBpcyBmb3IgY2hlY2tpbmcgcHJvdmlkZWQgb3B0aW9ucyBhdCBydW50aW1lLiBUaGlzIGlzIGFuIG9iamVjdCBmb3JcbiAqIGVhc2llciBtZW1iZXJzaGlwIGNoZWNraW5nLlxuICovXG5leHBvcnRzLnJlY29nbml6ZWRPcHRpb25zID0ge1xuICAgICdncnBjLnNzbF90YXJnZXRfbmFtZV9vdmVycmlkZSc6IHRydWUsXG4gICAgJ2dycGMucHJpbWFyeV91c2VyX2FnZW50JzogdHJ1ZSxcbiAgICAnZ3JwYy5zZWNvbmRhcnlfdXNlcl9hZ2VudCc6IHRydWUsXG4gICAgJ2dycGMuZGVmYXVsdF9hdXRob3JpdHknOiB0cnVlLFxuICAgICdncnBjLmtlZXBhbGl2ZV90aW1lX21zJzogdHJ1ZSxcbiAgICAnZ3JwYy5rZWVwYWxpdmVfdGltZW91dF9tcyc6IHRydWUsXG4gICAgJ2dycGMua2VlcGFsaXZlX3Blcm1pdF93aXRob3V0X2NhbGxzJzogdHJ1ZSxcbiAgICAnZ3JwYy5zZXJ2aWNlX2NvbmZpZyc6IHRydWUsXG4gICAgJ2dycGMubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyc6IHRydWUsXG4gICAgJ2dycGMuaW5pdGlhbF9yZWNvbm5lY3RfYmFja29mZl9tcyc6IHRydWUsXG4gICAgJ2dycGMubWF4X3JlY29ubmVjdF9iYWNrb2ZmX21zJzogdHJ1ZSxcbiAgICAnZ3JwYy51c2VfbG9jYWxfc3ViY2hhbm5lbF9wb29sJzogdHJ1ZSxcbiAgICAnZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCc6IHRydWUsXG4gICAgJ2dycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGgnOiB0cnVlLFxuICAgICdncnBjLmVuYWJsZV9odHRwX3Byb3h5JzogdHJ1ZSxcbiAgICAnZ3JwYy5lbmFibGVfY2hhbm5lbHonOiB0cnVlLFxuICAgICdncnBjLmRuc19taW5fdGltZV9iZXR3ZWVuX3Jlc29sdXRpb25zX21zJzogdHJ1ZSxcbiAgICAnZ3JwYy5lbmFibGVfcmV0cmllcyc6IHRydWUsXG4gICAgJ2dycGMucGVyX3JwY19yZXRyeV9idWZmZXJfc2l6ZSc6IHRydWUsXG4gICAgJ2dycGMucmV0cnlfYnVmZmVyX3NpemUnOiB0cnVlLFxuICAgICdncnBjLm1heF9jb25uZWN0aW9uX2FnZV9tcyc6IHRydWUsXG4gICAgJ2dycGMubWF4X2Nvbm5lY3Rpb25fYWdlX2dyYWNlX21zJzogdHJ1ZSxcbiAgICAnZ3JwYy1ub2RlLm1heF9zZXNzaW9uX21lbW9yeSc6IHRydWUsXG4gICAgJ2dycGMuc2VydmljZV9jb25maWdfZGlzYWJsZV9yZXNvbHV0aW9uJzogdHJ1ZSxcbiAgICAnZ3JwYy5jbGllbnRfaWRsZV90aW1lb3V0X21zJzogdHJ1ZSxcbiAgICAnZ3JwYy1ub2RlLnRsc19lbmFibGVfdHJhY2UnOiB0cnVlLFxuICAgICdncnBjLmxiLnJpbmdfaGFzaC5yaW5nX3NpemVfY2FwJzogdHJ1ZSxcbiAgICAnZ3JwYy1ub2RlLnJldHJ5X21heF9hdHRlbXB0c19saW1pdCc6IHRydWUsXG4gICAgJ2dycGMtbm9kZS5mbG93X2NvbnRyb2xfd2luZG93JzogdHJ1ZSxcbiAgICAnZ3JwYy5zZXJ2ZXJfY2FsbF9tZXRyaWNfcmVjb3JkaW5nJzogdHJ1ZVxufTtcbmZ1bmN0aW9uIGNoYW5uZWxPcHRpb25zRXF1YWwob3B0aW9uczEsIG9wdGlvbnMyKSB7XG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvcHRpb25zMSkuc29ydCgpO1xuICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob3B0aW9uczIpLnNvcnQoKTtcbiAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMxLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChrZXlzMVtpXSAhPT0ga2V5czJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uczFba2V5czFbaV1dICE9PSBvcHRpb25zMltrZXlzMltpXV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYW5uZWwtb3B0aW9ucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDIxIGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVuZHBvaW50TWFwID0gdm9pZCAwO1xuZXhwb3J0cy5pc1RjcFN1YmNoYW5uZWxBZGRyZXNzID0gaXNUY3BTdWJjaGFubmVsQWRkcmVzcztcbmV4cG9ydHMuc3ViY2hhbm5lbEFkZHJlc3NFcXVhbCA9IHN1YmNoYW5uZWxBZGRyZXNzRXF1YWw7XG5leHBvcnRzLnN1YmNoYW5uZWxBZGRyZXNzVG9TdHJpbmcgPSBzdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1N1YmNoYW5uZWxBZGRyZXNzID0gc3RyaW5nVG9TdWJjaGFubmVsQWRkcmVzcztcbmV4cG9ydHMuZW5kcG9pbnRFcXVhbCA9IGVuZHBvaW50RXF1YWw7XG5leHBvcnRzLmVuZHBvaW50VG9TdHJpbmcgPSBlbmRwb2ludFRvU3RyaW5nO1xuZXhwb3J0cy5lbmRwb2ludEhhc0FkZHJlc3MgPSBlbmRwb2ludEhhc0FkZHJlc3M7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5mdW5jdGlvbiBpc1RjcFN1YmNoYW5uZWxBZGRyZXNzKGFkZHJlc3MpIHtcbiAgICByZXR1cm4gJ3BvcnQnIGluIGFkZHJlc3M7XG59XG5mdW5jdGlvbiBzdWJjaGFubmVsQWRkcmVzc0VxdWFsKGFkZHJlc3MxLCBhZGRyZXNzMikge1xuICAgIGlmICghYWRkcmVzczEgJiYgIWFkZHJlc3MyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWFkZHJlc3MxIHx8ICFhZGRyZXNzMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpc1RjcFN1YmNoYW5uZWxBZGRyZXNzKGFkZHJlc3MxKSkge1xuICAgICAgICByZXR1cm4gKGlzVGNwU3ViY2hhbm5lbEFkZHJlc3MoYWRkcmVzczIpICYmXG4gICAgICAgICAgICBhZGRyZXNzMS5ob3N0ID09PSBhZGRyZXNzMi5ob3N0ICYmXG4gICAgICAgICAgICBhZGRyZXNzMS5wb3J0ID09PSBhZGRyZXNzMi5wb3J0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAhaXNUY3BTdWJjaGFubmVsQWRkcmVzcyhhZGRyZXNzMikgJiYgYWRkcmVzczEucGF0aCA9PT0gYWRkcmVzczIucGF0aDtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKGFkZHJlc3MpIHtcbiAgICBpZiAoaXNUY3BTdWJjaGFubmVsQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgICBpZiAoKDAsIG5ldF8xLmlzSVB2NikoYWRkcmVzcy5ob3N0KSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGFkZHJlc3MuaG9zdCArICddOicgKyBhZGRyZXNzLnBvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkcmVzcy5ob3N0ICsgJzonICsgYWRkcmVzcy5wb3J0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gYWRkcmVzcy5wYXRoO1xuICAgIH1cbn1cbmNvbnN0IERFRkFVTFRfUE9SVCA9IDQ0MztcbmZ1bmN0aW9uIHN0cmluZ1RvU3ViY2hhbm5lbEFkZHJlc3MoYWRkcmVzc1N0cmluZywgcG9ydCkge1xuICAgIGlmICgoMCwgbmV0XzEuaXNJUCkoYWRkcmVzc1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3Q6IGFkZHJlc3NTdHJpbmcsXG4gICAgICAgICAgICBwb3J0OiBwb3J0ICE9PSBudWxsICYmIHBvcnQgIT09IHZvaWQgMCA/IHBvcnQgOiBERUZBVUxUX1BPUlQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aDogYWRkcmVzc1N0cmluZyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRwb2ludEVxdWFsKGVuZHBvaW50MSwgZW5kcG9pbnQyKSB7XG4gICAgaWYgKGVuZHBvaW50MS5hZGRyZXNzZXMubGVuZ3RoICE9PSBlbmRwb2ludDIuYWRkcmVzc2VzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kcG9pbnQxLmFkZHJlc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXN1YmNoYW5uZWxBZGRyZXNzRXF1YWwoZW5kcG9pbnQxLmFkZHJlc3Nlc1tpXSwgZW5kcG9pbnQyLmFkZHJlc3Nlc1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGVuZHBvaW50VG9TdHJpbmcoZW5kcG9pbnQpIHtcbiAgICByZXR1cm4gKCdbJyArIGVuZHBvaW50LmFkZHJlc3Nlcy5tYXAoc3ViY2hhbm5lbEFkZHJlc3NUb1N0cmluZykuam9pbignLCAnKSArICddJyk7XG59XG5mdW5jdGlvbiBlbmRwb2ludEhhc0FkZHJlc3MoZW5kcG9pbnQsIGV4cGVjdGVkQWRkcmVzcykge1xuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBlbmRwb2ludC5hZGRyZXNzZXMpIHtcbiAgICAgICAgaWYgKHN1YmNoYW5uZWxBZGRyZXNzRXF1YWwoYWRkcmVzcywgZXhwZWN0ZWRBZGRyZXNzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZW5kcG9pbnRFcXVhbFVub3JkZXJlZChlbmRwb2ludDEsIGVuZHBvaW50Mikge1xuICAgIGlmIChlbmRwb2ludDEuYWRkcmVzc2VzLmxlbmd0aCAhPT0gZW5kcG9pbnQyLmFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFkZHJlc3MxIG9mIGVuZHBvaW50MS5hZGRyZXNzZXMpIHtcbiAgICAgICAgbGV0IG1hdGNoRm91bmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBhZGRyZXNzMiBvZiBlbmRwb2ludDIuYWRkcmVzc2VzKSB7XG4gICAgICAgICAgICBpZiAoc3ViY2hhbm5lbEFkZHJlc3NFcXVhbChhZGRyZXNzMSwgYWRkcmVzczIpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaEZvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5jbGFzcyBFbmRwb2ludE1hcCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLnNpemU7XG4gICAgfVxuICAgIGdldEZvclN1YmNoYW5uZWxBZGRyZXNzKGFkZHJlc3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLm1hcCkge1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50SGFzQWRkcmVzcyhlbnRyeS5rZXksIGFkZHJlc3MpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBhbnkgZW50cmllcyBpbiB0aGlzIG1hcCB3aXRoIGtleXMgdGhhdCBhcmUgbm90IGluIGVuZHBvaW50c1xuICAgICAqIEBwYXJhbSBlbmRwb2ludHNcbiAgICAgKi9cbiAgICBkZWxldGVNaXNzaW5nKGVuZHBvaW50cykge1xuICAgICAgICBjb25zdCByZW1vdmVkVmFsdWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5tYXApIHtcbiAgICAgICAgICAgIGxldCBmb3VuZEVudHJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIGVuZHBvaW50cykge1xuICAgICAgICAgICAgICAgIGlmIChlbmRwb2ludEVxdWFsVW5vcmRlcmVkKGVuZHBvaW50LCBlbnRyeS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRW50cnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZm91bmRFbnRyeSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZWRWYWx1ZXMucHVzaChlbnRyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVtb3ZlZFZhbHVlcztcbiAgICB9XG4gICAgZ2V0KGVuZHBvaW50KSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5tYXApIHtcbiAgICAgICAgICAgIGlmIChlbmRwb2ludEVxdWFsVW5vcmRlcmVkKGVuZHBvaW50LCBlbnRyeS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldChlbmRwb2ludCwgbWFwRW50cnkpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLm1hcCkge1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50RXF1YWxVbm9yZGVyZWQoZW5kcG9pbnQsIGVudHJ5LmtleSkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IG1hcEVudHJ5O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hcC5hZGQoeyBrZXk6IGVuZHBvaW50LCB2YWx1ZTogbWFwRW50cnkgfSk7XG4gICAgfVxuICAgIGRlbGV0ZShlbmRwb2ludCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubWFwKSB7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnRFcXVhbFVub3JkZXJlZChlbmRwb2ludCwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhcyhlbmRwb2ludCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubWFwKSB7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnRFcXVhbFVub3JkZXJlZChlbmRwb2ludCwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgfVxuICAgICprZXlzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubWFwKSB7XG4gICAgICAgICAgICB5aWVsZCBlbnRyeS5rZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKnZhbHVlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLm1hcCkge1xuICAgICAgICAgICAgeWllbGQgZW50cnkudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKmVudHJpZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5tYXApIHtcbiAgICAgICAgICAgIHlpZWxkIFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuRW5kcG9pbnRNYXAgPSBFbmRwb2ludE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YmNoYW5uZWwtYWRkcmVzcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0XCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmNsYXNzIFRyZWVOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih0LCBlLCBzID0gMSkge1xuICAgICAgICB0aGlzLmkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5vID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnUgPSB0O1xuICAgICAgICB0aGlzLmwgPSBlO1xuICAgICAgICB0aGlzLnAgPSBzO1xuICAgIH1cbiAgICBJKCkge1xuICAgICAgICBsZXQgdCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGUgPSB0Lm8ubyA9PT0gdDtcbiAgICAgICAgaWYgKGUgJiYgdC5wID09PSAxKSB7XG4gICAgICAgICAgICB0ID0gdC5oO1xuICAgICAgICB9IGVsc2UgaWYgKHQuaSkge1xuICAgICAgICAgICAgdCA9IHQuaTtcbiAgICAgICAgICAgIHdoaWxlICh0LmgpIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5oO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5vO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHMgPSB0Lm87XG4gICAgICAgICAgICB3aGlsZSAocy5pID09PSB0KSB7XG4gICAgICAgICAgICAgICAgdCA9IHM7XG4gICAgICAgICAgICAgICAgcyA9IHQubztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSBzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH1cbiAgICBCKCkge1xuICAgICAgICBsZXQgdCA9IHRoaXM7XG4gICAgICAgIGlmICh0LmgpIHtcbiAgICAgICAgICAgIHQgPSB0Lmg7XG4gICAgICAgICAgICB3aGlsZSAodC5pKSB7XG4gICAgICAgICAgICAgICAgdCA9IHQuaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGUgPSB0Lm87XG4gICAgICAgICAgICB3aGlsZSAoZS5oID09PSB0KSB7XG4gICAgICAgICAgICAgICAgdCA9IGU7XG4gICAgICAgICAgICAgICAgZSA9IHQubztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmggIT09IGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfKCkge1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5vO1xuICAgICAgICBjb25zdCBlID0gdGhpcy5oO1xuICAgICAgICBjb25zdCBzID0gZS5pO1xuICAgICAgICBpZiAodC5vID09PSB0aGlzKSB0Lm8gPSBlOyBlbHNlIGlmICh0LmkgPT09IHRoaXMpIHQuaSA9IGU7IGVsc2UgdC5oID0gZTtcbiAgICAgICAgZS5vID0gdDtcbiAgICAgICAgZS5pID0gdGhpcztcbiAgICAgICAgdGhpcy5vID0gZTtcbiAgICAgICAgdGhpcy5oID0gcztcbiAgICAgICAgaWYgKHMpIHMubyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICBnKCkge1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5vO1xuICAgICAgICBjb25zdCBlID0gdGhpcy5pO1xuICAgICAgICBjb25zdCBzID0gZS5oO1xuICAgICAgICBpZiAodC5vID09PSB0aGlzKSB0Lm8gPSBlOyBlbHNlIGlmICh0LmkgPT09IHRoaXMpIHQuaSA9IGU7IGVsc2UgdC5oID0gZTtcbiAgICAgICAgZS5vID0gdDtcbiAgICAgICAgZS5oID0gdGhpcztcbiAgICAgICAgdGhpcy5vID0gZTtcbiAgICAgICAgdGhpcy5pID0gcztcbiAgICAgICAgaWYgKHMpIHMubyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbn1cblxuY2xhc3MgVHJlZU5vZGVFbmFibGVJbmRleCBleHRlbmRzIFRyZWVOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5NID0gMTtcbiAgICB9XG4gICAgXygpIHtcbiAgICAgICAgY29uc3QgdCA9IHN1cGVyLl8oKTtcbiAgICAgICAgdGhpcy5PKCk7XG4gICAgICAgIHQuTygpO1xuICAgICAgICByZXR1cm4gdDtcbiAgICB9XG4gICAgZygpIHtcbiAgICAgICAgY29uc3QgdCA9IHN1cGVyLmcoKTtcbiAgICAgICAgdGhpcy5PKCk7XG4gICAgICAgIHQuTygpO1xuICAgICAgICByZXR1cm4gdDtcbiAgICB9XG4gICAgTygpIHtcbiAgICAgICAgdGhpcy5NID0gMTtcbiAgICAgICAgaWYgKHRoaXMuaSkge1xuICAgICAgICAgICAgdGhpcy5NICs9IHRoaXMuaS5NO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmgpIHtcbiAgICAgICAgICAgIHRoaXMuTSArPSB0aGlzLmguTTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ29udGFpbmVySXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHQgPSAwKSB7XG4gICAgICAgIHRoaXMuaXRlcmF0b3JUeXBlID0gdDtcbiAgICB9XG4gICAgZXF1YWxzKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuVCA9PT0gdC5UO1xuICAgIH1cbn1cblxuY2xhc3MgQmFzZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubSA9IDA7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm07XG4gICAgfVxuICAgIHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm07XG4gICAgfVxuICAgIGVtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tID09PSAwO1xuICAgIH1cbn1cblxuY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgQmFzZSB7fVxuXG5mdW5jdGlvbiB0aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJdGVyYXRvciBhY2Nlc3MgZGVuaWVkIVwiKTtcbn1cblxuY2xhc3MgVHJlZUNvbnRhaW5lciBleHRlbmRzIENvbnRhaW5lciB7XG4gICAgY29uc3RydWN0b3IodCA9IGZ1bmN0aW9uKHQsIGUpIHtcbiAgICAgICAgaWYgKHQgPCBlKSByZXR1cm4gLTE7XG4gICAgICAgIGlmICh0ID4gZSkgcmV0dXJuIDE7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0sIGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnYgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuQSA9IHQ7XG4gICAgICAgIHRoaXMuZW5hYmxlSW5kZXggPSBlO1xuICAgICAgICB0aGlzLk4gPSBlID8gVHJlZU5vZGVFbmFibGVJbmRleCA6IFRyZWVOb2RlO1xuICAgICAgICB0aGlzLkMgPSBuZXcgdGhpcy5OO1xuICAgIH1cbiAgICBSKHQsIGUpIHtcbiAgICAgICAgbGV0IHMgPSB0aGlzLkM7XG4gICAgICAgIHdoaWxlICh0KSB7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5BKHQudSwgZSk7XG4gICAgICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5oO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgIHMgPSB0O1xuICAgICAgICAgICAgICAgIHQgPSB0Lmk7XG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIEsodCwgZSkge1xuICAgICAgICBsZXQgcyA9IHRoaXMuQztcbiAgICAgICAgd2hpbGUgKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLkEodC51LCBlKTtcbiAgICAgICAgICAgIGlmIChpIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5oO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzID0gdDtcbiAgICAgICAgICAgICAgICB0ID0gdC5pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBMKHQsIGUpIHtcbiAgICAgICAgbGV0IHMgPSB0aGlzLkM7XG4gICAgICAgIHdoaWxlICh0KSB7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5BKHQudSwgZSk7XG4gICAgICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgICAgICBzID0gdDtcbiAgICAgICAgICAgICAgICB0ID0gdC5oO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgIHQgPSB0Lmk7XG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGsodCwgZSkge1xuICAgICAgICBsZXQgcyA9IHRoaXMuQztcbiAgICAgICAgd2hpbGUgKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLkEodC51LCBlKTtcbiAgICAgICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgICAgIHMgPSB0O1xuICAgICAgICAgICAgICAgIHQgPSB0Lmg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSB0Lmk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIFAodCkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgZSA9IHQubztcbiAgICAgICAgICAgIGlmIChlID09PSB0aGlzLkMpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0LnAgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0LnAgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ID09PSBlLmkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZS5oO1xuICAgICAgICAgICAgICAgIGlmIChzLnAgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZS5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHRoaXMudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ID0gZS5fKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBlLl8oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocy5oICYmIHMuaC5wID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLnAgPSBlLnA7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5oLnAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHRoaXMudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudiA9IGUuXygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUuXygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuaSAmJiBzLmkucCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaS5wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuZygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZS5pO1xuICAgICAgICAgICAgICAgIGlmIChzLnAgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZS5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHRoaXMudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ID0gZS5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBlLmcoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocy5pICYmIHMuaS5wID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLnAgPSBlLnA7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5pLnAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHRoaXMudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudiA9IGUuZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUuZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuaCAmJiBzLmgucCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaC5wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuXygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIFModCkge1xuICAgICAgICBpZiAodGhpcy5tID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGUgPSB0O1xuICAgICAgICB3aGlsZSAoZS5pIHx8IGUuaCkge1xuICAgICAgICAgICAgaWYgKGUuaCkge1xuICAgICAgICAgICAgICAgIGUgPSBlLmg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGUuaSkgZSA9IGUuaTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZSA9IGUuaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHMgPSB0LnU7XG4gICAgICAgICAgICB0LnUgPSBlLnU7XG4gICAgICAgICAgICBlLnUgPSBzO1xuICAgICAgICAgICAgY29uc3QgaSA9IHQubDtcbiAgICAgICAgICAgIHQubCA9IGUubDtcbiAgICAgICAgICAgIGUubCA9IGk7XG4gICAgICAgICAgICB0ID0gZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5DLmkgPT09IGUpIHtcbiAgICAgICAgICAgIHRoaXMuQy5pID0gZS5vO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQy5oID09PSBlKSB7XG4gICAgICAgICAgICB0aGlzLkMuaCA9IGUubztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLlAoZSk7XG4gICAgICAgIGxldCBzID0gZS5vO1xuICAgICAgICBpZiAoZSA9PT0gcy5pKSB7XG4gICAgICAgICAgICBzLmkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBzLmggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubSAtPSAxO1xuICAgICAgICB0aGlzLnYucCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUluZGV4KSB7XG4gICAgICAgICAgICB3aGlsZSAocyAhPT0gdGhpcy5DKSB7XG4gICAgICAgICAgICAgICAgcy5NIC09IDE7XG4gICAgICAgICAgICAgICAgcyA9IHMubztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBVKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHR5cGVvZiB0ID09PSBcIm51bWJlclwiID8gdCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcyA9IHR5cGVvZiB0ID09PSBcImZ1bmN0aW9uXCIgPyB0IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBpID0gdHlwZW9mIHQgPT09IFwidW5kZWZpbmVkXCIgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHIgPSAwO1xuICAgICAgICBsZXQgbiA9IHRoaXMudjtcbiAgICAgICAgY29uc3QgaCA9IFtdO1xuICAgICAgICB3aGlsZSAoaC5sZW5ndGggfHwgbikge1xuICAgICAgICAgICAgaWYgKG4pIHtcbiAgICAgICAgICAgICAgICBoLnB1c2gobik7XG4gICAgICAgICAgICAgICAgbiA9IG4uaTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IGgucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKHIgPT09IGUpIHJldHVybiBuO1xuICAgICAgICAgICAgICAgIGkgJiYgaS5wdXNoKG4pO1xuICAgICAgICAgICAgICAgIHMgJiYgcyhuLCByLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByICs9IDE7XG4gICAgICAgICAgICAgICAgbiA9IG4uaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgaih0KSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdC5vO1xuICAgICAgICAgICAgaWYgKGUucCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcyA9IGUubztcbiAgICAgICAgICAgIGlmIChlID09PSBzLmkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpID0gcy5oO1xuICAgICAgICAgICAgICAgIGlmIChpICYmIGkucCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpLnAgPSBlLnAgPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAocyA9PT0gdGhpcy52KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHMucCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBzO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgPT09IGUuaCkge1xuICAgICAgICAgICAgICAgICAgICB0LnAgPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAodC5pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0LmkubyA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5oLm8gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGUuaCA9IHQuaTtcbiAgICAgICAgICAgICAgICAgICAgcy5pID0gdC5oO1xuICAgICAgICAgICAgICAgICAgICB0LmkgPSBlO1xuICAgICAgICAgICAgICAgICAgICB0LmggPSBzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocyA9PT0gdGhpcy52KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnYgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5DLm8gPSB0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IHMubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmkgPT09IHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmkgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUuaCA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdC5vID0gcy5vO1xuICAgICAgICAgICAgICAgICAgICBlLm8gPSB0O1xuICAgICAgICAgICAgICAgICAgICBzLm8gPSB0O1xuICAgICAgICAgICAgICAgICAgICBzLnAgPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGUucCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzID09PSB0aGlzLnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudiA9IHMuZygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugcy5nKCk7XG4gICAgICAgICAgICAgICAgICAgIHMucCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBzLmk7XG4gICAgICAgICAgICAgICAgaWYgKGkgJiYgaS5wID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGkucCA9IGUucCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzID09PSB0aGlzLnYpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcy5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdCA9IHM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gZS5pKSB7XG4gICAgICAgICAgICAgICAgICAgIHQucCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0LmkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuaS5vID0gcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodC5oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0LmgubyA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcy5oID0gdC5pO1xuICAgICAgICAgICAgICAgICAgICBlLmkgPSB0Lmg7XG4gICAgICAgICAgICAgICAgICAgIHQuaSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIHQuaCA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzID09PSB0aGlzLnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudiA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkMubyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gcy5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuaSA9PT0gcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZS5oID0gdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0Lm8gPSBzLm87XG4gICAgICAgICAgICAgICAgICAgIGUubyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIHMubyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIHMucCA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IHRoaXMudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ID0gcy5fKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBzLl8oKTtcbiAgICAgICAgICAgICAgICAgICAgcy5wID0gMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgZS5PKCk7XG4gICAgICAgICAgICAgICAgcy5PKCk7XG4gICAgICAgICAgICAgICAgdC5PKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgcSh0LCBlLCBzKSB7XG4gICAgICAgIGlmICh0aGlzLnYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5tICs9IDE7XG4gICAgICAgICAgICB0aGlzLnYgPSBuZXcgdGhpcy5OKHQsIGUsIDApO1xuICAgICAgICAgICAgdGhpcy52Lm8gPSB0aGlzLkM7XG4gICAgICAgICAgICB0aGlzLkMubyA9IHRoaXMuQy5pID0gdGhpcy5DLmggPSB0aGlzLnY7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpO1xuICAgICAgICBjb25zdCByID0gdGhpcy5DLmk7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLkEoci51LCB0KTtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICAgIHIubCA9IGU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tO1xuICAgICAgICB9IGVsc2UgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgICByLmkgPSBuZXcgdGhpcy5OKHQsIGUpO1xuICAgICAgICAgICAgci5pLm8gPSByO1xuICAgICAgICAgICAgaSA9IHIuaTtcbiAgICAgICAgICAgIHRoaXMuQy5pID0gaTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLkMuaDtcbiAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLkEoci51LCB0KTtcbiAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgci5sID0gZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuIDwgMCkge1xuICAgICAgICAgICAgICAgIHIuaCA9IG5ldyB0aGlzLk4odCwgZSk7XG4gICAgICAgICAgICAgICAgci5oLm8gPSByO1xuICAgICAgICAgICAgICAgIGkgPSByLmg7XG4gICAgICAgICAgICAgICAgdGhpcy5DLmggPSBpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBzLlQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyICE9PSB0aGlzLkMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLkEoci51LCB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5sID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSByLkkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gdGhpcy5BKHMudSwgdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5sID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBuZXcgdGhpcy5OKHQsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5oID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuaCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLm8gPSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5pID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkubyA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy52O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuQShpLnUsIHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkuaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaSA9IG5ldyB0aGlzLk4odCwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaS5vID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkuaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpLmk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkuaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaCA9IG5ldyB0aGlzLk4odCwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaC5vID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkuaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpLmg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkubCA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbmFibGVJbmRleCkge1xuICAgICAgICAgICAgbGV0IHQgPSBpLm87XG4gICAgICAgICAgICB3aGlsZSAodCAhPT0gdGhpcy5DKSB7XG4gICAgICAgICAgICAgICAgdC5NICs9IDE7XG4gICAgICAgICAgICAgICAgdCA9IHQubztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmooaSk7XG4gICAgICAgIHRoaXMubSArPSAxO1xuICAgICAgICByZXR1cm4gdGhpcy5tO1xuICAgIH1cbiAgICBIKHQsIGUpIHtcbiAgICAgICAgd2hpbGUgKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLkEodC51LCBlKTtcbiAgICAgICAgICAgIGlmIChzIDwgMCkge1xuICAgICAgICAgICAgICAgIHQgPSB0Lmg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgdCA9IHQuaTtcbiAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdCB8fCB0aGlzLkM7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLm0gPSAwO1xuICAgICAgICB0aGlzLnYgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuQy5vID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLkMuaSA9IHRoaXMuQy5oID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGVLZXlCeUl0ZXJhdG9yKHQsIGUpIHtcbiAgICAgICAgY29uc3QgcyA9IHQuVDtcbiAgICAgICAgaWYgKHMgPT09IHRoaXMuQykge1xuICAgICAgICAgICAgdGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubSA9PT0gMSkge1xuICAgICAgICAgICAgcy51ID0gZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGkgPSBzLkIoKS51O1xuICAgICAgICBpZiAocyA9PT0gdGhpcy5DLmkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLkEoaSwgZSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgcy51ID0gZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByID0gcy5JKCkudTtcbiAgICAgICAgaWYgKHMgPT09IHRoaXMuQy5oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5BKHIsIGUpIDwgMCkge1xuICAgICAgICAgICAgICAgIHMudSA9IGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuQShyLCBlKSA+PSAwIHx8IHRoaXMuQShpLCBlKSA8PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHMudSA9IGU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlcmFzZUVsZW1lbnRCeVBvcyh0KSB7XG4gICAgICAgIGlmICh0IDwgMCB8fCB0ID4gdGhpcy5tIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IHRoaXMuVSh0KTtcbiAgICAgICAgdGhpcy5TKGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5tO1xuICAgIH1cbiAgICBlcmFzZUVsZW1lbnRCeUtleSh0KSB7XG4gICAgICAgIGlmICh0aGlzLm0gPT09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMuSCh0aGlzLnYsIHQpO1xuICAgICAgICBpZiAoZSA9PT0gdGhpcy5DKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuUyhlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVyYXNlRWxlbWVudEJ5SXRlcmF0b3IodCkge1xuICAgICAgICBjb25zdCBlID0gdC5UO1xuICAgICAgICBpZiAoZSA9PT0gdGhpcy5DKSB7XG4gICAgICAgICAgICB0aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzID0gZS5oID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGkgPSB0Lml0ZXJhdG9yVHlwZSA9PT0gMDtcbiAgICAgICAgaWYgKGkpIHtcbiAgICAgICAgICAgIGlmIChzKSB0Lm5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcyB8fCBlLmkgPT09IHVuZGVmaW5lZCkgdC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5TKGUpO1xuICAgICAgICByZXR1cm4gdDtcbiAgICB9XG4gICAgZ2V0SGVpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5tID09PSAwKSByZXR1cm4gMDtcbiAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2FsKHQpIHtcbiAgICAgICAgICAgIGlmICghdCkgcmV0dXJuIDA7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodHJhdmVyc2FsKHQuaSksIHRyYXZlcnNhbCh0LmgpKSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYXZlcnNhbCh0aGlzLnYpO1xuICAgIH1cbn1cblxuY2xhc3MgVHJlZUl0ZXJhdG9yIGV4dGVuZHMgQ29udGFpbmVySXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHQsIGUsIHMpIHtcbiAgICAgICAgc3VwZXIocyk7XG4gICAgICAgIHRoaXMuVCA9IHQ7XG4gICAgICAgIHRoaXMuQyA9IGU7XG4gICAgICAgIGlmICh0aGlzLml0ZXJhdG9yVHlwZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wcmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5UID09PSB0aGlzLkMuaSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5UID0gdGhpcy5ULkkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5UID09PSB0aGlzLkMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuVCA9IHRoaXMuVC5CKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5UID09PSB0aGlzLkMuaCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5UID0gdGhpcy5ULkIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5UID09PSB0aGlzLkMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dJdGVyYXRvckFjY2Vzc0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuVCA9IHRoaXMuVC5JKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgbGV0IHQgPSB0aGlzLlQ7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLkMubztcbiAgICAgICAgaWYgKHQgPT09IHRoaXMuQykge1xuICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5NIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgaWYgKHQuaSkge1xuICAgICAgICAgICAgcyArPSB0LmkuTTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodCAhPT0gZSkge1xuICAgICAgICAgICAgY29uc3QgZSA9IHQubztcbiAgICAgICAgICAgIGlmICh0ID09PSBlLmgpIHtcbiAgICAgICAgICAgICAgICBzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGUuaSkge1xuICAgICAgICAgICAgICAgICAgICBzICs9IGUuaS5NO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQgPSBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICBpc0FjY2Vzc2libGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlQgIT09IHRoaXMuQztcbiAgICB9XG59XG5cbmNsYXNzIE9yZGVyZWRNYXBJdGVyYXRvciBleHRlbmRzIFRyZWVJdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IodCwgZSwgcywgaSkge1xuICAgICAgICBzdXBlcih0LCBlLCBpKTtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBzO1xuICAgIH1cbiAgICBnZXQgcG9pbnRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuVCA9PT0gdGhpcy5DKSB7XG4gICAgICAgICAgICB0aHJvd0l0ZXJhdG9yQWNjZXNzRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShbXSwge1xuICAgICAgICAgICAgZ2V0KGUsIHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocyA9PT0gXCIwXCIpIHJldHVybiB0LlQudTsgZWxzZSBpZiAocyA9PT0gXCIxXCIpIHJldHVybiB0LlQubDtcbiAgICAgICAgICAgICAgICBlWzBdID0gdC5ULnU7XG4gICAgICAgICAgICAgICAgZVsxXSA9IHQuVC5sO1xuICAgICAgICAgICAgICAgIHJldHVybiBlW3NdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldChlLCBzLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHMgIT09IFwiMVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwcm9wIG11c3QgYmUgMVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdC5ULmwgPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwSXRlcmF0b3IodGhpcy5ULCB0aGlzLkMsIHRoaXMuY29udGFpbmVyLCB0aGlzLml0ZXJhdG9yVHlwZSk7XG4gICAgfVxufVxuXG5jbGFzcyBPcmRlcmVkTWFwIGV4dGVuZHMgVHJlZUNvbnRhaW5lciB7XG4gICAgY29uc3RydWN0b3IodCA9IFtdLCBlLCBzKSB7XG4gICAgICAgIHN1cGVyKGUsIHMpO1xuICAgICAgICBjb25zdCBpID0gdGhpcztcbiAgICAgICAgdC5mb3JFYWNoKChmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpLnNldEVsZW1lbnQodFswXSwgdFsxXSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgYmVnaW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJlZE1hcEl0ZXJhdG9yKHRoaXMuQy5pIHx8IHRoaXMuQywgdGhpcy5DLCB0aGlzKTtcbiAgICB9XG4gICAgZW5kKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyZWRNYXBJdGVyYXRvcih0aGlzLkMsIHRoaXMuQywgdGhpcyk7XG4gICAgfVxuICAgIHJCZWdpbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwSXRlcmF0b3IodGhpcy5DLmggfHwgdGhpcy5DLCB0aGlzLkMsIHRoaXMsIDEpO1xuICAgIH1cbiAgICByRW5kKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyZWRNYXBJdGVyYXRvcih0aGlzLkMsIHRoaXMuQywgdGhpcywgMSk7XG4gICAgfVxuICAgIGZyb250KCkge1xuICAgICAgICBpZiAodGhpcy5tID09PSAwKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLkMuaTtcbiAgICAgICAgcmV0dXJuIFsgdC51LCB0LmwgXTtcbiAgICB9XG4gICAgYmFjaygpIHtcbiAgICAgICAgaWYgKHRoaXMubSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5DLmg7XG4gICAgICAgIHJldHVybiBbIHQudSwgdC5sIF07XG4gICAgfVxuICAgIGxvd2VyQm91bmQodCkge1xuICAgICAgICBjb25zdCBlID0gdGhpcy5SKHRoaXMudiwgdCk7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJlZE1hcEl0ZXJhdG9yKGUsIHRoaXMuQywgdGhpcyk7XG4gICAgfVxuICAgIHVwcGVyQm91bmQodCkge1xuICAgICAgICBjb25zdCBlID0gdGhpcy5LKHRoaXMudiwgdCk7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJlZE1hcEl0ZXJhdG9yKGUsIHRoaXMuQywgdGhpcyk7XG4gICAgfVxuICAgIHJldmVyc2VMb3dlckJvdW5kKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMuTCh0aGlzLnYsIHQpO1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyZWRNYXBJdGVyYXRvcihlLCB0aGlzLkMsIHRoaXMpO1xuICAgIH1cbiAgICByZXZlcnNlVXBwZXJCb3VuZCh0KSB7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLmsodGhpcy52LCB0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkTWFwSXRlcmF0b3IoZSwgdGhpcy5DLCB0aGlzKTtcbiAgICB9XG4gICAgZm9yRWFjaCh0KSB7XG4gICAgICAgIHRoaXMuVSgoZnVuY3Rpb24oZSwgcywgaSkge1xuICAgICAgICAgICAgdChbIGUudSwgZS5sIF0sIHMsIGkpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHNldEVsZW1lbnQodCwgZSwgcykge1xuICAgICAgICByZXR1cm4gdGhpcy5xKHQsIGUsIHMpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50QnlQb3ModCkge1xuICAgICAgICBpZiAodCA8IDAgfHwgdCA+IHRoaXMubSAtIDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLlUodCk7XG4gICAgICAgIHJldHVybiBbIGUudSwgZS5sIF07XG4gICAgfVxuICAgIGZpbmQodCkge1xuICAgICAgICBjb25zdCBlID0gdGhpcy5IKHRoaXMudiwgdCk7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJlZE1hcEl0ZXJhdG9yKGUsIHRoaXMuQywgdGhpcyk7XG4gICAgfVxuICAgIGdldEVsZW1lbnRCeUtleSh0KSB7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLkgodGhpcy52LCB0KTtcbiAgICAgICAgcmV0dXJuIGUubDtcbiAgICB9XG4gICAgdW5pb24odCkge1xuICAgICAgICBjb25zdCBlID0gdGhpcztcbiAgICAgICAgdC5mb3JFYWNoKChmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBlLnNldEVsZW1lbnQodFswXSwgdFsxXSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubTtcbiAgICB9XG4gICAgKiBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMubTtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMuVSgpO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHQ7ICsrcykge1xuICAgICAgICAgICAgY29uc3QgdCA9IGVbc107XG4gICAgICAgICAgICB5aWVsZCBbIHQudSwgdC5sIF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydHMuT3JkZXJlZE1hcCA9IE9yZGVyZWRNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjEgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnaXN0ZXJBZG1pblNlcnZpY2UgPSByZWdpc3RlckFkbWluU2VydmljZTtcbmV4cG9ydHMuYWRkQWRtaW5TZXJ2aWNlc1RvU2VydmVyID0gYWRkQWRtaW5TZXJ2aWNlc1RvU2VydmVyO1xuY29uc3QgcmVnaXN0ZXJlZEFkbWluU2VydmljZXMgPSBbXTtcbmZ1bmN0aW9uIHJlZ2lzdGVyQWRtaW5TZXJ2aWNlKGdldFNlcnZpY2VEZWZpbml0aW9uLCBnZXRIYW5kbGVycykge1xuICAgIHJlZ2lzdGVyZWRBZG1pblNlcnZpY2VzLnB1c2goeyBnZXRTZXJ2aWNlRGVmaW5pdGlvbiwgZ2V0SGFuZGxlcnMgfSk7XG59XG5mdW5jdGlvbiBhZGRBZG1pblNlcnZpY2VzVG9TZXJ2ZXIoc2VydmVyKSB7XG4gICAgZm9yIChjb25zdCB7IGdldFNlcnZpY2VEZWZpbml0aW9uLCBnZXRIYW5kbGVycyB9IG9mIHJlZ2lzdGVyZWRBZG1pblNlcnZpY2VzKSB7XG4gICAgICAgIHNlcnZlci5hZGRTZXJ2aWNlKGdldFNlcnZpY2VEZWZpbml0aW9uKCksIGdldEhhbmRsZXJzKCkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkbWluLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2xpZW50RHVwbGV4U3RyZWFtSW1wbCA9IGV4cG9ydHMuQ2xpZW50V3JpdGFibGVTdHJlYW1JbXBsID0gZXhwb3J0cy5DbGllbnRSZWFkYWJsZVN0cmVhbUltcGwgPSBleHBvcnRzLkNsaWVudFVuYXJ5Q2FsbEltcGwgPSB2b2lkIDA7XG5leHBvcnRzLmNhbGxFcnJvckZyb21TdGF0dXMgPSBjYWxsRXJyb3JGcm9tU3RhdHVzO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3Qgc3RyZWFtXzEgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG4vKipcbiAqIENvbnN0cnVjdCBhIFNlcnZpY2VFcnJvciBmcm9tIGEgU3RhdHVzT2JqZWN0LiBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBwcmltYXJpbHlcbiAqIGFzIGFuIGF0dGVtcHQgdG8gbWFrZSB0aGUgZXJyb3Igc3RhY2sgdHJhY2UgY2xlYXJseSBjb21tdW5pY2F0ZSB0aGF0IHRoZVxuICogZXJyb3IgaXMgbm90IG5lY2Vzc2FyaWx5IGEgcHJvYmxlbSBpbiBnUlBDIGl0c2VsZi5cbiAqIEBwYXJhbSBzdGF0dXNcbiAqL1xuZnVuY3Rpb24gY2FsbEVycm9yRnJvbVN0YXR1cyhzdGF0dXMsIGNhbGxlclN0YWNrKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGAke3N0YXR1cy5jb2RlfSAke2NvbnN0YW50c18xLlN0YXR1c1tzdGF0dXMuY29kZV19OiAke3N0YXR1cy5kZXRhaWxzfWA7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgY29uc3Qgc3RhY2sgPSBgJHtlcnJvci5zdGFja31cXG5mb3IgY2FsbCBhdFxcbiR7Y2FsbGVyU3RhY2t9YDtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IobWVzc2FnZSksIHN0YXR1cywgeyBzdGFjayB9KTtcbn1cbmNsYXNzIENsaWVudFVuYXJ5Q2FsbEltcGwgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FuY2VsV2l0aFN0YXR1cyhjb25zdGFudHNfMS5TdGF0dXMuQ0FOQ0VMTEVELCAnQ2FuY2VsbGVkIG9uIGNsaWVudCcpO1xuICAgIH1cbiAgICBnZXRQZWVyKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UGVlcigpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAndW5rbm93bic7XG4gICAgfVxuICAgIGdldEF1dGhDb250ZXh0KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0QXV0aENvbnRleHQoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbDtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudFVuYXJ5Q2FsbEltcGwgPSBDbGllbnRVbmFyeUNhbGxJbXBsO1xuY2xhc3MgQ2xpZW50UmVhZGFibGVTdHJlYW1JbXBsIGV4dGVuZHMgc3RyZWFtXzEuUmVhZGFibGUge1xuICAgIGNvbnN0cnVjdG9yKGRlc2VyaWFsaXplKSB7XG4gICAgICAgIHN1cGVyKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5kZXNlcmlhbGl6ZSA9IGRlc2VyaWFsaXplO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FuY2VsV2l0aFN0YXR1cyhjb25zdGFudHNfMS5TdGF0dXMuQ0FOQ0VMTEVELCAnQ2FuY2VsbGVkIG9uIGNsaWVudCcpO1xuICAgIH1cbiAgICBnZXRQZWVyKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UGVlcigpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAndW5rbm93bic7XG4gICAgfVxuICAgIGdldEF1dGhDb250ZXh0KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0QXV0aENvbnRleHQoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbDtcbiAgICB9XG4gICAgX3JlYWQoX3NpemUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB0aGlzLmNhbGwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdGFydFJlYWQoKTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudFJlYWRhYmxlU3RyZWFtSW1wbCA9IENsaWVudFJlYWRhYmxlU3RyZWFtSW1wbDtcbmNsYXNzIENsaWVudFdyaXRhYmxlU3RyZWFtSW1wbCBleHRlbmRzIHN0cmVhbV8xLldyaXRhYmxlIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJpYWxpemUpIHtcbiAgICAgICAgc3VwZXIoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbiAgICB9XG4gICAgY2FuY2VsKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMuY2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbmNlbFdpdGhTdGF0dXMoY29uc3RhbnRzXzEuU3RhdHVzLkNBTkNFTExFRCwgJ0NhbmNlbGxlZCBvbiBjbGllbnQnKTtcbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFBlZXIoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJ3Vua25vd24nO1xuICAgIH1cbiAgICBnZXRBdXRoQ29udGV4dCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEF1dGhDb250ZXh0KCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgfVxuICAgIF93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBOdW1iZXIoZW5jb2RpbmcpO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihmbGFncykpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZmxhZ3MgPSBmbGFncztcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSB0aGlzLmNhbGwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KGNvbnRleHQsIGNodW5rKTtcbiAgICB9XG4gICAgX2ZpbmFsKGNiKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFsZkNsb3NlKCk7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuZXhwb3J0cy5DbGllbnRXcml0YWJsZVN0cmVhbUltcGwgPSBDbGllbnRXcml0YWJsZVN0cmVhbUltcGw7XG5jbGFzcyBDbGllbnREdXBsZXhTdHJlYW1JbXBsIGV4dGVuZHMgc3RyZWFtXzEuRHVwbGV4IHtcbiAgICBjb25zdHJ1Y3RvcihzZXJpYWxpemUsIGRlc2VyaWFsaXplKSB7XG4gICAgICAgIHN1cGVyKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXJpYWxpemUgPSBzZXJpYWxpemU7XG4gICAgICAgIHRoaXMuZGVzZXJpYWxpemUgPSBkZXNlcmlhbGl6ZTtcbiAgICB9XG4gICAgY2FuY2VsKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIChfYSA9IHRoaXMuY2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbmNlbFdpdGhTdGF0dXMoY29uc3RhbnRzXzEuU3RhdHVzLkNBTkNFTExFRCwgJ0NhbmNlbGxlZCBvbiBjbGllbnQnKTtcbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFBlZXIoKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJ3Vua25vd24nO1xuICAgIH1cbiAgICBnZXRBdXRoQ29udGV4dCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEF1dGhDb250ZXh0KCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7XG4gICAgfVxuICAgIF9yZWFkKF9zaXplKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RhcnRSZWFkKCk7XG4gICAgfVxuICAgIF93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBOdW1iZXIoZW5jb2RpbmcpO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihmbGFncykpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZmxhZ3MgPSBmbGFncztcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSB0aGlzLmNhbGwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KGNvbnRleHQsIGNodW5rKTtcbiAgICB9XG4gICAgX2ZpbmFsKGNiKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5jYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGFsZkNsb3NlKCk7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuZXhwb3J0cy5DbGllbnREdXBsZXhTdHJlYW1JbXBsID0gQ2xpZW50RHVwbGV4U3RyZWFtSW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhbGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnRlcmNlcHRpbmdMaXN0ZW5lckltcGwgPSB2b2lkIDA7XG5leHBvcnRzLnN0YXR1c09yRnJvbVZhbHVlID0gc3RhdHVzT3JGcm9tVmFsdWU7XG5leHBvcnRzLnN0YXR1c09yRnJvbUVycm9yID0gc3RhdHVzT3JGcm9tRXJyb3I7XG5leHBvcnRzLmlzSW50ZXJjZXB0aW5nTGlzdGVuZXIgPSBpc0ludGVyY2VwdGluZ0xpc3RlbmVyO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuZnVuY3Rpb24gc3RhdHVzT3JGcm9tVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0YXR1c09yRnJvbUVycm9yKGVycm9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB7XG4gICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXJyb3IpLCB7IG1ldGFkYXRhOiAoX2EgPSBlcnJvci5tZXRhZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSB9KVxuICAgIH07XG59XG5mdW5jdGlvbiBpc0ludGVyY2VwdGluZ0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIChsaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGxpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhLmxlbmd0aCA9PT0gMSk7XG59XG5jbGFzcyBJbnRlcmNlcHRpbmdMaXN0ZW5lckltcGwge1xuICAgIGNvbnN0cnVjdG9yKGxpc3RlbmVyLCBuZXh0TGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICAgICAgICB0aGlzLm5leHRMaXN0ZW5lciA9IG5leHRMaXN0ZW5lcjtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWV0YWRhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNQZW5kaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdNZXNzYWdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGVuZGluZ1N0YXR1cyA9IG51bGw7XG4gICAgfVxuICAgIHByb2Nlc3NQZW5kaW5nTWVzc2FnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUGVuZGluZ01lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dExpc3RlbmVyLm9uUmVjZWl2ZU1lc3NhZ2UodGhpcy5wZW5kaW5nTWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFzUGVuZGluZ01lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzUGVuZGluZ1N0YXR1cygpIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1N0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5uZXh0TGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKHRoaXMucGVuZGluZ1N0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhKG1ldGFkYXRhLCBtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdNZXRhZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5uZXh0TGlzdGVuZXIub25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUGVuZGluZ01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmdTdGF0dXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25SZWNlaXZlTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIC8qIElmIHRoaXMgbGlzdGVuZXIgcHJvY2Vzc2VzIG1lc3NhZ2VzIGFzeW5jaHJvbm91c2x5LCB0aGUgbGFzdCBtZXNzYWdlIG1heVxuICAgICAgICAgKiBiZSByZW9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBzdGF0dXMgKi9cbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZShtZXNzYWdlLCBtc2cgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1BlbmRpbmdNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dExpc3RlbmVyLm9uUmVjZWl2ZU1lc3NhZ2UobXNnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NQZW5kaW5nU3RhdHVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblJlY2VpdmVTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKHN0YXR1cywgcHJvY2Vzc2VkU3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NpbmdNZXRhZGF0YSB8fCB0aGlzLnByb2Nlc3NpbmdNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gcHJvY2Vzc2VkU3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0TGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKHByb2Nlc3NlZFN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJjZXB0aW5nTGlzdGVuZXJJbXBsID0gSW50ZXJjZXB0aW5nTGlzdGVuZXJJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FsbC1pbnRlcmZhY2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnRlcmNlcHRpbmdDYWxsID0gZXhwb3J0cy5SZXF1ZXN0ZXJCdWlsZGVyID0gZXhwb3J0cy5MaXN0ZW5lckJ1aWxkZXIgPSBleHBvcnRzLkludGVyY2VwdG9yQ29uZmlndXJhdGlvbkVycm9yID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRJbnRlcmNlcHRpbmdDYWxsID0gZ2V0SW50ZXJjZXB0aW5nQ2FsbDtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGNhbGxfaW50ZXJmYWNlXzEgPSByZXF1aXJlKFwiLi9jYWxsLWludGVyZmFjZVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2Vycm9yXCIpO1xuLyoqXG4gKiBFcnJvciBjbGFzcyBhc3NvY2lhdGVkIHdpdGggcGFzc2luZyBib3RoIGludGVyY2VwdG9ycyBhbmQgaW50ZXJjZXB0b3JcbiAqIHByb3ZpZGVycyB0byBhIGNsaWVudCBjb25zdHJ1Y3RvciBvciBhcyBjYWxsIG9wdGlvbnMuXG4gKi9cbmNsYXNzIEludGVyY2VwdG9yQ29uZmlndXJhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25FcnJvcic7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludGVyY2VwdG9yQ29uZmlndXJhdGlvbkVycm9yKTtcbiAgICB9XG59XG5leHBvcnRzLkludGVyY2VwdG9yQ29uZmlndXJhdGlvbkVycm9yID0gSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uRXJyb3I7XG5jbGFzcyBMaXN0ZW5lckJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB3aXRoT25SZWNlaXZlTWV0YWRhdGEob25SZWNlaXZlTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG9uUmVjZWl2ZU1ldGFkYXRhO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd2l0aE9uUmVjZWl2ZU1lc3NhZ2Uob25SZWNlaXZlTWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBvblJlY2VpdmVNZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd2l0aE9uUmVjZWl2ZVN0YXR1cyhvblJlY2VpdmVTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBvblJlY2VpdmVTdGF0dXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBidWlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhLFxuICAgICAgICAgICAgb25SZWNlaXZlTWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgICAgICAgb25SZWNlaXZlU3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkxpc3RlbmVyQnVpbGRlciA9IExpc3RlbmVyQnVpbGRlcjtcbmNsYXNzIFJlcXVlc3RlckJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaGFsZkNsb3NlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNhbmNlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgd2l0aFN0YXJ0KHN0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHdpdGhTZW5kTWVzc2FnZShzZW5kTWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBzZW5kTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHdpdGhIYWxmQ2xvc2UoaGFsZkNsb3NlKSB7XG4gICAgICAgIHRoaXMuaGFsZkNsb3NlID0gaGFsZkNsb3NlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd2l0aENhbmNlbChjYW5jZWwpIHtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBjYW5jZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBidWlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgICAgICAgc2VuZE1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgICAgICAgIGhhbGZDbG9zZTogdGhpcy5oYWxmQ2xvc2UsXG4gICAgICAgICAgICBjYW5jZWw6IHRoaXMuY2FuY2VsLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuUmVxdWVzdGVyQnVpbGRlciA9IFJlcXVlc3RlckJ1aWxkZXI7XG4vKipcbiAqIEEgTGlzdGVuZXIgd2l0aCBhIGRlZmF1bHQgcGFzcy10aHJvdWdoIGltcGxlbWVudGF0aW9uIG9mIGVhY2ggbWV0aG9kLiBVc2VkXG4gKiBmb3IgZmlsbGluZyBvdXQgTGlzdGVuZXJzIHdpdGggc29tZSBtZXRob2RzIG9taXR0ZWQuXG4gKi9cbmNvbnN0IGRlZmF1bHRMaXN0ZW5lciA9IHtcbiAgICBvblJlY2VpdmVNZXRhZGF0YTogKG1ldGFkYXRhLCBuZXh0KSA9PiB7XG4gICAgICAgIG5leHQobWV0YWRhdGEpO1xuICAgIH0sXG4gICAgb25SZWNlaXZlTWVzc2FnZTogKG1lc3NhZ2UsIG5leHQpID0+IHtcbiAgICAgICAgbmV4dChtZXNzYWdlKTtcbiAgICB9LFxuICAgIG9uUmVjZWl2ZVN0YXR1czogKHN0YXR1cywgbmV4dCkgPT4ge1xuICAgICAgICBuZXh0KHN0YXR1cyk7XG4gICAgfSxcbn07XG4vKipcbiAqIEEgUmVxdWVzdGVyIHdpdGggYSBkZWZhdWx0IHBhc3MtdGhyb3VnaCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG1ldGhvZC4gVXNlZFxuICogZm9yIGZpbGxpbmcgb3V0IFJlcXVlc3RlcnMgd2l0aCBzb21lIG1ldGhvZHMgb21pdHRlZC5cbiAqL1xuY29uc3QgZGVmYXVsdFJlcXVlc3RlciA9IHtcbiAgICBzdGFydDogKG1ldGFkYXRhLCBsaXN0ZW5lciwgbmV4dCkgPT4ge1xuICAgICAgICBuZXh0KG1ldGFkYXRhLCBsaXN0ZW5lcik7XG4gICAgfSxcbiAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2UsIG5leHQpID0+IHtcbiAgICAgICAgbmV4dChtZXNzYWdlKTtcbiAgICB9LFxuICAgIGhhbGZDbG9zZTogbmV4dCA9PiB7XG4gICAgICAgIG5leHQoKTtcbiAgICB9LFxuICAgIGNhbmNlbDogbmV4dCA9PiB7XG4gICAgICAgIG5leHQoKTtcbiAgICB9LFxufTtcbmNsYXNzIEludGVyY2VwdGluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKG5leHRDYWxsLCByZXF1ZXN0ZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICB0aGlzLm5leHRDYWxsID0gbmV4dENhbGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCBtZXRhZGF0YSBoYXMgYmVlbiBwYXNzZWQgdG8gdGhlIHJlcXVlc3RlcidzIHN0YXJ0XG4gICAgICAgICAqIG1ldGhvZCBidXQgaXQgaGFzIG5vdCBiZWVuIHBhc3NlZCB0byB0aGUgY29ycmVzcG9uZGluZyBuZXh0IGNhbGxiYWNrXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdNZXRhZGF0YSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogTWVzc2FnZSBjb250ZXh0IGZvciBhIHBlbmRpbmcgbWVzc2FnZSB0aGF0IGlzIHdhaXRpbmcgZm9yXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlQ29udGV4dCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCBhIG1lc3NhZ2UgaGFzIGJlZW4gcGFzc2VkIHRvIHRoZSByZXF1ZXN0ZXIncyBzZW5kTWVzc2FnZVxuICAgICAgICAgKiBtZXRob2QgYnV0IGl0IGhhcyBub3QgYmVlbiBwYXNzZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbmV4dCBjYWxsYmFja1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHRoYXQgYSBzdGF0dXMgd2FzIHJlY2VpdmVkIGJ1dCBjb3VsZCBub3QgYmUgcHJvcGFnYXRlZCBiZWNhdXNlXG4gICAgICAgICAqIGEgbWVzc2FnZSB3YXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZW5kaW5nSGFsZkNsb3NlID0gZmFsc2U7XG4gICAgICAgIGlmIChyZXF1ZXN0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdGVyID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiAoX2EgPSByZXF1ZXN0ZXIuc3RhcnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRlZmF1bHRSZXF1ZXN0ZXIuc3RhcnQsXG4gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2U6IChfYiA9IHJlcXVlc3Rlci5zZW5kTWVzc2FnZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZGVmYXVsdFJlcXVlc3Rlci5zZW5kTWVzc2FnZSxcbiAgICAgICAgICAgICAgICBoYWxmQ2xvc2U6IChfYyA9IHJlcXVlc3Rlci5oYWxmQ2xvc2UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRSZXF1ZXN0ZXIuaGFsZkNsb3NlLFxuICAgICAgICAgICAgICAgIGNhbmNlbDogKF9kID0gcmVxdWVzdGVyLmNhbmNlbCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZGVmYXVsdFJlcXVlc3Rlci5jYW5jZWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0ZXIgPSBkZWZhdWx0UmVxdWVzdGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLCBkZXRhaWxzKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdGVyLmNhbmNlbCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHRDYWxsLmNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLCBkZXRhaWxzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFBlZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRDYWxsLmdldFBlZXIoKTtcbiAgICB9XG4gICAgcHJvY2Vzc1BlbmRpbmdNZXNzYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nTWVzc2FnZUNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dENhbGwuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dCh0aGlzLnBlbmRpbmdNZXNzYWdlQ29udGV4dCwgdGhpcy5wZW5kaW5nTWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlQ29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzUGVuZGluZ0hhbGZDbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0hhbGZDbG9zZSkge1xuICAgICAgICAgICAgdGhpcy5uZXh0Q2FsbC5oYWxmQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydChtZXRhZGF0YSwgaW50ZXJjZXB0aW5nTGlzdGVuZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgIGNvbnN0IGZ1bGxJbnRlcmNlcHRpbmdMaXN0ZW5lciA9IHtcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiAoX2IgPSAoX2EgPSBpbnRlcmNlcHRpbmdMaXN0ZW5lciA9PT0gbnVsbCB8fCBpbnRlcmNlcHRpbmdMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0aW5nTGlzdGVuZXIub25SZWNlaXZlTWV0YWRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5iaW5kKGludGVyY2VwdGluZ0xpc3RlbmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKG1ldGFkYXRhID0+IHsgfSksXG4gICAgICAgICAgICBvblJlY2VpdmVNZXNzYWdlOiAoX2QgPSAoX2MgPSBpbnRlcmNlcHRpbmdMaXN0ZW5lciA9PT0gbnVsbCB8fCBpbnRlcmNlcHRpbmdMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0aW5nTGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmJpbmQoaW50ZXJjZXB0aW5nTGlzdGVuZXIpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAobWVzc2FnZSA9PiB7IH0pLFxuICAgICAgICAgICAgb25SZWNlaXZlU3RhdHVzOiAoX2YgPSAoX2UgPSBpbnRlcmNlcHRpbmdMaXN0ZW5lciA9PT0gbnVsbCB8fCBpbnRlcmNlcHRpbmdMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0aW5nTGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuYmluZChpbnRlcmNlcHRpbmdMaXN0ZW5lcikpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IChzdGF0dXMgPT4geyB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcXVlc3Rlci5zdGFydChtZXRhZGF0YSwgZnVsbEludGVyY2VwdGluZ0xpc3RlbmVyLCAobWQsIGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZmluYWxJbnRlcmNlcHRpbmdMaXN0ZW5lcjtcbiAgICAgICAgICAgIGlmICgoMCwgY2FsbF9pbnRlcmZhY2VfMS5pc0ludGVyY2VwdGluZ0xpc3RlbmVyKShsaXN0ZW5lcikpIHtcbiAgICAgICAgICAgICAgICBmaW5hbEludGVyY2VwdGluZ0xpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsTGlzdGVuZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiAoX2EgPSBsaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdExpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICBvblJlY2VpdmVNZXNzYWdlOiAoX2IgPSBsaXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0TGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgb25SZWNlaXZlU3RhdHVzOiAoX2MgPSBsaXN0ZW5lci5vblJlY2VpdmVTdGF0dXMpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRMaXN0ZW5lci5vblJlY2VpdmVTdGF0dXMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmaW5hbEludGVyY2VwdGluZ0xpc3RlbmVyID0gbmV3IGNhbGxfaW50ZXJmYWNlXzEuSW50ZXJjZXB0aW5nTGlzdGVuZXJJbXBsKGZ1bGxMaXN0ZW5lciwgZnVsbEludGVyY2VwdGluZ0xpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmV4dENhbGwuc3RhcnQobWQsIGZpbmFsSW50ZXJjZXB0aW5nTGlzdGVuZXIpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUGVuZGluZ01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmdIYWxmQ2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc2VuZE1lc3NhZ2VXaXRoQ29udGV4dChjb250ZXh0LCBtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ01lc3NhZ2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlcXVlc3Rlci5zZW5kTWVzc2FnZShtZXNzYWdlLCBmaW5hbE1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZUNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2FsbC5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KGNvbnRleHQsIGZpbmFsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUGVuZGluZ0hhbGZDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzZW5kTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dCh7fSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIHN0YXJ0UmVhZCgpIHtcbiAgICAgICAgdGhpcy5uZXh0Q2FsbC5zdGFydFJlYWQoKTtcbiAgICB9XG4gICAgaGFsZkNsb3NlKCkge1xuICAgICAgICB0aGlzLnJlcXVlc3Rlci5oYWxmQ2xvc2UoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhIHx8IHRoaXMucHJvY2Vzc2luZ01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdIYWxmQ2xvc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2FsbC5oYWxmQ2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEF1dGhDb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbC5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuSW50ZXJjZXB0aW5nQ2FsbCA9IEludGVyY2VwdGluZ0NhbGw7XG5mdW5jdGlvbiBnZXRDYWxsKGNoYW5uZWwsIHBhdGgsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gKF9hID0gb3B0aW9ucy5kZWFkbGluZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogSW5maW5pdHk7XG4gICAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdDtcbiAgICBjb25zdCBwYXJlbnQgPSAoX2IgPSBvcHRpb25zLnBhcmVudCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbDtcbiAgICBjb25zdCBwcm9wYWdhdGVGbGFncyA9IG9wdGlvbnMucHJvcGFnYXRlX2ZsYWdzO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscztcbiAgICBjb25zdCBjYWxsID0gY2hhbm5lbC5jcmVhdGVDYWxsKHBhdGgsIGRlYWRsaW5lLCBob3N0LCBwYXJlbnQsIHByb3BhZ2F0ZUZsYWdzKTtcbiAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgY2FsbC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XG4gICAgfVxuICAgIHJldHVybiBjYWxsO1xufVxuLyoqXG4gKiBJbnRlcmNlcHRpbmdDYWxsIGltcGxlbWVudGF0aW9uIHRoYXQgZGlyZWN0bHkgb3ducyB0aGUgdW5kZXJseWluZyBDYWxsXG4gKiBvYmplY3QgYW5kIGhhbmRsZXMgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJhaXpsaWF0aW9uLlxuICovXG5jbGFzcyBCYXNlSW50ZXJjZXB0aW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IoY2FsbCwgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBtZXRob2REZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMuY2FsbCA9IGNhbGw7XG4gICAgICAgIHRoaXMubWV0aG9kRGVmaW5pdGlvbiA9IG1ldGhvZERlZmluaXRpb247XG4gICAgfVxuICAgIGNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLCBkZXRhaWxzKSB7XG4gICAgICAgIHRoaXMuY2FsbC5jYW5jZWxXaXRoU3RhdHVzKHN0YXR1cywgZGV0YWlscyk7XG4gICAgfVxuICAgIGdldFBlZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0UGVlcigpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHNlbmRNZXNzYWdlV2l0aENvbnRleHQoY29udGV4dCwgbWVzc2FnZSkge1xuICAgICAgICBsZXQgc2VyaWFsaXplZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQgPSB0aGlzLm1ldGhvZERlZmluaXRpb24ucmVxdWVzdFNlcmlhbGl6ZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsLmNhbmNlbFdpdGhTdGF0dXMoY29uc3RhbnRzXzEuU3RhdHVzLklOVEVSTkFMLCBgUmVxdWVzdCBtZXNzYWdlIHNlcmlhbGl6YXRpb24gZmFpbHVyZTogJHsoMCwgZXJyb3JfMS5nZXRFcnJvck1lc3NhZ2UpKGUpfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbC5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KGNvbnRleHQsIHNlcmlhbGl6ZWQpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KHt9LCBtZXNzYWdlKTtcbiAgICB9XG4gICAgc3RhcnQobWV0YWRhdGEsIGludGVyY2VwdGluZ0xpc3RlbmVyKSB7XG4gICAgICAgIGxldCByZWFkRXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmNhbGwuc3RhcnQobWV0YWRhdGEsIHtcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiBtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IGludGVyY2VwdGluZ0xpc3RlbmVyID09PSBudWxsIHx8IGludGVyY2VwdGluZ0xpc3RlbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnRlcmNlcHRpbmdMaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoaW50ZXJjZXB0aW5nTGlzdGVuZXIsIG1ldGFkYXRhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlY2VpdmVNZXNzYWdlOiBtZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICBsZXQgZGVzZXJpYWxpemVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplZCA9IHRoaXMubWV0aG9kRGVmaW5pdGlvbi5yZXNwb25zZURlc2VyaWFsaXplKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWFkRXJyb3IgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgUmVzcG9uc2UgbWVzc2FnZSBwYXJzaW5nIGVycm9yOiAkeygwLCBlcnJvcl8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGwuY2FuY2VsV2l0aFN0YXR1cyhyZWFkRXJyb3IuY29kZSwgcmVhZEVycm9yLmRldGFpbHMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYSA9IGludGVyY2VwdGluZ0xpc3RlbmVyID09PSBudWxsIHx8IGludGVyY2VwdGluZ0xpc3RlbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnRlcmNlcHRpbmdMaXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChpbnRlcmNlcHRpbmdMaXN0ZW5lciwgZGVzZXJpYWxpemVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlY2VpdmVTdGF0dXM6IHN0YXR1cyA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICBpZiAocmVhZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGludGVyY2VwdGluZ0xpc3RlbmVyID09PSBudWxsIHx8IGludGVyY2VwdGluZ0xpc3RlbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnRlcmNlcHRpbmdMaXN0ZW5lci5vblJlY2VpdmVTdGF0dXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGludGVyY2VwdGluZ0xpc3RlbmVyLCByZWFkRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKF9iID0gaW50ZXJjZXB0aW5nTGlzdGVuZXIgPT09IG51bGwgfHwgaW50ZXJjZXB0aW5nTGlzdGVuZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGludGVyY2VwdGluZ0xpc3RlbmVyLm9uUmVjZWl2ZVN0YXR1cykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoaW50ZXJjZXB0aW5nTGlzdGVuZXIsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXJ0UmVhZCgpIHtcbiAgICAgICAgdGhpcy5jYWxsLnN0YXJ0UmVhZCgpO1xuICAgIH1cbiAgICBoYWxmQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMuY2FsbC5oYWxmQ2xvc2UoKTtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9XG59XG4vKipcbiAqIEJhc2VJbnRlcmNlcHRpbmdDYWxsIHdpdGggc3BlY2lhbC1jYXNlZCBiZWhhdmlvciBmb3IgbWV0aG9kcyB3aXRoIHVuYXJ5XG4gKiByZXNwb25zZXMuXG4gKi9cbmNsYXNzIEJhc2VVbmFyeUludGVyY2VwdGluZ0NhbGwgZXh0ZW5kcyBCYXNlSW50ZXJjZXB0aW5nQ2FsbCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdHJ1Y3RvcihjYWxsLCBtZXRob2REZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNhbGwsIG1ldGhvZERlZmluaXRpb24pO1xuICAgIH1cbiAgICBzdGFydChtZXRhZGF0YSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgbGV0IHJlY2VpdmVkTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB3cmFwcGVyTGlzdGVuZXIgPSB7XG4gICAgICAgICAgICBvblJlY2VpdmVNZXRhZGF0YTogKF9iID0gKF9hID0gbGlzdGVuZXIgPT09IG51bGwgfHwgbGlzdGVuZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYmluZChsaXN0ZW5lcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChtZXRhZGF0YSA9PiB7IH0pLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2U6IChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkTWVzc2FnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgKF9hID0gbGlzdGVuZXIgPT09IG51bGwgfHwgbGlzdGVuZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpc3RlbmVyLm9uUmVjZWl2ZU1lc3NhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGxpc3RlbmVyLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlY2VpdmVTdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGlmICghcmVjZWl2ZWRNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGxpc3RlbmVyID09PSBudWxsIHx8IGxpc3RlbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsaXN0ZW5lciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYiA9IGxpc3RlbmVyID09PSBudWxsIHx8IGxpc3RlbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsaXN0ZW5lci5vblJlY2VpdmVTdGF0dXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGxpc3RlbmVyLCBzdGF0dXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIuc3RhcnQobWV0YWRhdGEsIHdyYXBwZXJMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuY2FsbC5zdGFydFJlYWQoKTtcbiAgICB9XG59XG4vKipcbiAqIEJhc2VJbnRlcmNlcHRpbmdDYWxsIHdpdGggc3BlY2lhbC1jYXNlZCBiZWhhdmlvciBmb3IgbWV0aG9kcyB3aXRoIHN0cmVhbWluZ1xuICogcmVzcG9uc2VzLlxuICovXG5jbGFzcyBCYXNlU3RyZWFtaW5nSW50ZXJjZXB0aW5nQ2FsbCBleHRlbmRzIEJhc2VJbnRlcmNlcHRpbmdDYWxsIHtcbn1cbmZ1bmN0aW9uIGdldEJvdHRvbUludGVyY2VwdGluZ0NhbGwoY2hhbm5lbCwgb3B0aW9ucywgXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxubWV0aG9kRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGNhbGwgPSBnZXRDYWxsKGNoYW5uZWwsIG1ldGhvZERlZmluaXRpb24ucGF0aCwgb3B0aW9ucyk7XG4gICAgaWYgKG1ldGhvZERlZmluaXRpb24ucmVzcG9uc2VTdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCYXNlU3RyZWFtaW5nSW50ZXJjZXB0aW5nQ2FsbChjYWxsLCBtZXRob2REZWZpbml0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQmFzZVVuYXJ5SW50ZXJjZXB0aW5nQ2FsbChjYWxsLCBtZXRob2REZWZpbml0aW9uKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRJbnRlcmNlcHRpbmdDYWxsKGludGVyY2VwdG9yQXJncywgXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxubWV0aG9kRGVmaW5pdGlvbiwgb3B0aW9ucywgY2hhbm5lbCkge1xuICAgIGlmIChpbnRlcmNlcHRvckFyZ3MuY2xpZW50SW50ZXJjZXB0b3JzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgaW50ZXJjZXB0b3JBcmdzLmNsaWVudEludGVyY2VwdG9yUHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludGVyY2VwdG9yQ29uZmlndXJhdGlvbkVycm9yKCdCb3RoIGludGVyY2VwdG9ycyBhbmQgaW50ZXJjZXB0b3JfcHJvdmlkZXJzIHdlcmUgcGFzc2VkIGFzIG9wdGlvbnMgJyArXG4gICAgICAgICAgICAndG8gdGhlIGNsaWVudCBjb25zdHJ1Y3Rvci4gT25seSBvbmUgb2YgdGhlc2UgaXMgYWxsb3dlZC4nKTtcbiAgICB9XG4gICAgaWYgKGludGVyY2VwdG9yQXJncy5jYWxsSW50ZXJjZXB0b3JzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgaW50ZXJjZXB0b3JBcmdzLmNhbGxJbnRlcmNlcHRvclByb3ZpZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25FcnJvcignQm90aCBpbnRlcmNlcHRvcnMgYW5kIGludGVyY2VwdG9yX3Byb3ZpZGVycyB3ZXJlIHBhc3NlZCBhcyBjYWxsICcgK1xuICAgICAgICAgICAgJ29wdGlvbnMuIE9ubHkgb25lIG9mIHRoZXNlIGlzIGFsbG93ZWQuJyk7XG4gICAgfVxuICAgIGxldCBpbnRlcmNlcHRvcnMgPSBbXTtcbiAgICAvLyBJbnRlcmNlcHRvcnMgcGFzc2VkIHRvIHRoZSBjYWxsIG92ZXJyaWRlIGludGVyY2VwdG9ycyBwYXNzZWQgdG8gdGhlIGNsaWVudCBjb25zdHJ1Y3RvclxuICAgIGlmIChpbnRlcmNlcHRvckFyZ3MuY2FsbEludGVyY2VwdG9ycy5sZW5ndGggPiAwIHx8XG4gICAgICAgIGludGVyY2VwdG9yQXJncy5jYWxsSW50ZXJjZXB0b3JQcm92aWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnRlcmNlcHRvcnMgPSBbXVxuICAgICAgICAgICAgLmNvbmNhdChpbnRlcmNlcHRvckFyZ3MuY2FsbEludGVyY2VwdG9ycywgaW50ZXJjZXB0b3JBcmdzLmNhbGxJbnRlcmNlcHRvclByb3ZpZGVycy5tYXAocHJvdmlkZXIgPT4gcHJvdmlkZXIobWV0aG9kRGVmaW5pdGlvbikpKVxuICAgICAgICAgICAgLmZpbHRlcihpbnRlcmNlcHRvciA9PiBpbnRlcmNlcHRvcik7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgZmFsc3kgdmFsdWVzIHdoZW4gcHJvdmlkZXJzIHJldHVybiBub3RoaW5nXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpbnRlcmNlcHRvcnMgPSBbXVxuICAgICAgICAgICAgLmNvbmNhdChpbnRlcmNlcHRvckFyZ3MuY2xpZW50SW50ZXJjZXB0b3JzLCBpbnRlcmNlcHRvckFyZ3MuY2xpZW50SW50ZXJjZXB0b3JQcm92aWRlcnMubWFwKHByb3ZpZGVyID0+IHByb3ZpZGVyKG1ldGhvZERlZmluaXRpb24pKSlcbiAgICAgICAgICAgIC5maWx0ZXIoaW50ZXJjZXB0b3IgPT4gaW50ZXJjZXB0b3IpO1xuICAgICAgICAvLyBGaWx0ZXIgb3V0IGZhbHN5IHZhbHVlcyB3aGVuIHByb3ZpZGVycyByZXR1cm4gbm90aGluZ1xuICAgIH1cbiAgICBjb25zdCBpbnRlcmNlcHRvck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIG1ldGhvZF9kZWZpbml0aW9uOiBtZXRob2REZWZpbml0aW9uLFxuICAgIH0pO1xuICAgIC8qIEZvciBlYWNoIGludGVyY2VwdG9yIGluIHRoZSBsaXN0LCB0aGUgbmV4dENhbGwgZnVuY3Rpb24gcGFzc2VkIHRvIGl0IGlzXG4gICAgICogYmFzZWQgb24gdGhlIG5leHQgaW50ZXJjZXB0b3IgaW4gdGhlIGxpc3QsIHVzaW5nIGEgbmV4dENhbGwgZnVuY3Rpb25cbiAgICAgKiBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaW50ZXJjZXB0b3IgaW4gdGhlIGxpc3QsIGFuZCBzbyBvbi4gVGhlXG4gICAgICogaW5pdGlhbFZhbHVlLCB3aGljaCBpcyBlZmZlY3RpdmVseSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBpcyBhIG5leHRDYWxsXG4gICAgICogZnVuY3Rpb24gdGhhdCBpbnZva2VzIGdldEJvdHRvbUludGVyY2VwdGluZ0NhbGwsIHRoZSByZXN1bHQgb2Ygd2hpY2hcbiAgICAgKiBoYW5kbGVzIChkZSlzZXJpYWxpemF0aW9uIGFuZCBhbHNvIGdldHMgdGhlIHVuZGVybHlpbmcgY2FsbCBmcm9tIHRoZVxuICAgICAqIGNoYW5uZWwuICovXG4gICAgY29uc3QgZ2V0Q2FsbCA9IGludGVyY2VwdG9ycy5yZWR1Y2VSaWdodCgobmV4dENhbGwsIG5leHRJbnRlcmNlcHRvcikgPT4ge1xuICAgICAgICByZXR1cm4gY3VycmVudE9wdGlvbnMgPT4gbmV4dEludGVyY2VwdG9yKGN1cnJlbnRPcHRpb25zLCBuZXh0Q2FsbCk7XG4gICAgfSwgKGZpbmFsT3B0aW9ucykgPT4gZ2V0Qm90dG9tSW50ZXJjZXB0aW5nQ2FsbChjaGFubmVsLCBmaW5hbE9wdGlvbnMsIG1ldGhvZERlZmluaXRpb24pKTtcbiAgICByZXR1cm4gZ2V0Q2FsbChpbnRlcmNlcHRvck9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LWludGVyY2VwdG9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDE5IGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNhbGxfMSA9IHJlcXVpcmUoXCIuL2NhbGxcIik7XG5jb25zdCBjaGFubmVsXzEgPSByZXF1aXJlKFwiLi9jaGFubmVsXCIpO1xuY29uc3QgY29ubmVjdGl2aXR5X3N0YXRlXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHktc3RhdGVcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGNsaWVudF9pbnRlcmNlcHRvcnNfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC1pbnRlcmNlcHRvcnNcIik7XG5jb25zdCBDSEFOTkVMX1NZTUJPTCA9IFN5bWJvbCgpO1xuY29uc3QgSU5URVJDRVBUT1JfU1lNQk9MID0gU3ltYm9sKCk7XG5jb25zdCBJTlRFUkNFUFRPUl9QUk9WSURFUl9TWU1CT0wgPSBTeW1ib2woKTtcbmNvbnN0IENBTExfSU5WT0NBVElPTl9UUkFOU0ZPUk1FUl9TWU1CT0wgPSBTeW1ib2woKTtcbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBnZXRFcnJvclN0YWNrU3RyaW5nKGVycm9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoKF9hID0gZXJyb3Iuc3RhY2spID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGxpdCgnXFxuJykuc2xpY2UoMSkuam9pbignXFxuJykpIHx8ICdubyBzdGFjayB0cmFjZSBhdmFpbGFibGUnO1xufVxuLyoqXG4gKiBBIGdlbmVyaWMgZ1JQQyBjbGllbnQuIFByaW1hcmlseSB1c2VmdWwgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgZ2VuZXJhdGVkXG4gKiBjbGllbnRzLlxuICovXG5jbGFzcyBDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MsIGNyZWRlbnRpYWxzLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgICAgICB0aGlzW0lOVEVSQ0VQVE9SX1NZTUJPTF0gPSAoX2EgPSBvcHRpb25zLmludGVyY2VwdG9ycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmludGVyY2VwdG9ycztcbiAgICAgICAgdGhpc1tJTlRFUkNFUFRPUl9QUk9WSURFUl9TWU1CT0xdID0gKF9iID0gb3B0aW9ucy5pbnRlcmNlcHRvcl9wcm92aWRlcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdO1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5pbnRlcmNlcHRvcl9wcm92aWRlcnM7XG4gICAgICAgIGlmICh0aGlzW0lOVEVSQ0VQVE9SX1NZTUJPTF0ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgdGhpc1tJTlRFUkNFUFRPUl9QUk9WSURFUl9TWU1CT0xdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBpbnRlcmNlcHRvcnMgYW5kIGludGVyY2VwdG9yX3Byb3ZpZGVycyB3ZXJlIHBhc3NlZCBhcyBvcHRpb25zICcgK1xuICAgICAgICAgICAgICAgICd0byB0aGUgY2xpZW50IGNvbnN0cnVjdG9yLiBPbmx5IG9uZSBvZiB0aGVzZSBpcyBhbGxvd2VkLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNbQ0FMTF9JTlZPQ0FUSU9OX1RSQU5TRk9STUVSX1NZTUJPTF0gPVxuICAgICAgICAgICAgb3B0aW9ucy5jYWxsSW52b2NhdGlvblRyYW5zZm9ybWVyO1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5jYWxsSW52b2NhdGlvblRyYW5zZm9ybWVyO1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFubmVsT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHRoaXNbQ0hBTk5FTF9TWU1CT0xdID0gb3B0aW9ucy5jaGFubmVsT3ZlcnJpZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5jaGFubmVsRmFjdG9yeU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFubmVsRmFjdG9yeU92ZXJyaWRlID0gb3B0aW9ucy5jaGFubmVsRmFjdG9yeU92ZXJyaWRlO1xuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuY2hhbm5lbEZhY3RvcnlPdmVycmlkZTtcbiAgICAgICAgICAgIHRoaXNbQ0hBTk5FTF9TWU1CT0xdID0gY2hhbm5lbEZhY3RvcnlPdmVycmlkZShhZGRyZXNzLCBjcmVkZW50aWFscywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW0NIQU5ORUxfU1lNQk9MXSA9IG5ldyBjaGFubmVsXzEuQ2hhbm5lbEltcGxlbWVudGF0aW9uKGFkZHJlc3MsIGNyZWRlbnRpYWxzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpc1tDSEFOTkVMX1NZTUJPTF0uY2xvc2UoKTtcbiAgICB9XG4gICAgZ2V0Q2hhbm5lbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbQ0hBTk5FTF9TWU1CT0xdO1xuICAgIH1cbiAgICB3YWl0Rm9yUmVhZHkoZGVhZGxpbmUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrU3RhdGUgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdGYWlsZWQgdG8gY29ubmVjdCBiZWZvcmUgdGhlIGRlYWRsaW5lJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXdTdGF0ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbmV3U3RhdGUgPSB0aGlzW0NIQU5ORUxfU1lNQk9MXS5nZXRDb25uZWN0aXZpdHlTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdUaGUgY2hhbm5lbCBoYXMgYmVlbiBjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld1N0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0NIQU5ORUxfU1lNQk9MXS53YXRjaENvbm5lY3Rpdml0eVN0YXRlKG5ld1N0YXRlLCBkZWFkbGluZSwgY2hlY2tTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignVGhlIGNoYW5uZWwgaGFzIGJlZW4gY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0SW1tZWRpYXRlKGNoZWNrU3RhdGUpO1xuICAgIH1cbiAgICBjaGVja09wdGlvbmFsVW5hcnlSZXNwb25zZUFyZ3VtZW50cyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGFyZzEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSwgb3B0aW9uczoge30sIGNhbGxiYWNrOiBhcmcxIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihhcmcyKSkge1xuICAgICAgICAgICAgaWYgKGFyZzEgaW5zdGFuY2VvZiBtZXRhZGF0YV8xLk1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWV0YWRhdGE6IGFyZzEsIG9wdGlvbnM6IHt9LCBjYWxsYmFjazogYXJnMiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWV0YWRhdGE6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCksIG9wdGlvbnM6IGFyZzEsIGNhbGxiYWNrOiBhcmcyIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIShhcmcxIGluc3RhbmNlb2YgbWV0YWRhdGFfMS5NZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIGFyZzIgaW5zdGFuY2VvZiBPYmplY3QgJiZcbiAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGFyZzMpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IGFyZ3VtZW50cyBwYXNzZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IG1ldGFkYXRhOiBhcmcxLCBvcHRpb25zOiBhcmcyLCBjYWxsYmFjazogYXJnMyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIG1ha2VVbmFyeVJlcXVlc3QobWV0aG9kLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplLCBhcmd1bWVudCwgbWV0YWRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRBcmd1bWVudHMgPSB0aGlzLmNoZWNrT3B0aW9uYWxVbmFyeVJlc3BvbnNlQXJndW1lbnRzKG1ldGFkYXRhLCBvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgIGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBwYXRoOiBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgICAgICAgICAgIHJlcXVlc3RTZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICAgICAgICAgIHJlc3BvbnNlRGVzZXJpYWxpemU6IGRlc2VyaWFsaXplLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgY2FsbFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICBtZXRhZGF0YTogY2hlY2tlZEFyZ3VtZW50cy5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNhbGw6IG5ldyBjYWxsXzEuQ2xpZW50VW5hcnlDYWxsSW1wbCgpLFxuICAgICAgICAgICAgY2hhbm5lbDogdGhpc1tDSEFOTkVMX1NZTUJPTF0sXG4gICAgICAgICAgICBtZXRob2REZWZpbml0aW9uOiBtZXRob2REZWZpbml0aW9uLFxuICAgICAgICAgICAgY2FsbE9wdGlvbnM6IGNoZWNrZWRBcmd1bWVudHMub3B0aW9ucyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjaGVja2VkQXJndW1lbnRzLmNhbGxiYWNrLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpc1tDQUxMX0lOVk9DQVRJT05fVFJBTlNGT1JNRVJfU1lNQk9MXSkge1xuICAgICAgICAgICAgY2FsbFByb3BlcnRpZXMgPSB0aGlzW0NBTExfSU5WT0NBVElPTl9UUkFOU0ZPUk1FUl9TWU1CT0xdKGNhbGxQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbWl0dGVyID0gY2FsbFByb3BlcnRpZXMuY2FsbDtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JBcmdzID0ge1xuICAgICAgICAgICAgY2xpZW50SW50ZXJjZXB0b3JzOiB0aGlzW0lOVEVSQ0VQVE9SX1NZTUJPTF0sXG4gICAgICAgICAgICBjbGllbnRJbnRlcmNlcHRvclByb3ZpZGVyczogdGhpc1tJTlRFUkNFUFRPUl9QUk9WSURFUl9TWU1CT0xdLFxuICAgICAgICAgICAgY2FsbEludGVyY2VwdG9yczogKF9hID0gY2FsbFByb3BlcnRpZXMuY2FsbE9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgIGNhbGxJbnRlcmNlcHRvclByb3ZpZGVyczogKF9iID0gY2FsbFByb3BlcnRpZXMuY2FsbE9wdGlvbnMuaW50ZXJjZXB0b3JfcHJvdmlkZXJzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FsbCA9ICgwLCBjbGllbnRfaW50ZXJjZXB0b3JzXzEuZ2V0SW50ZXJjZXB0aW5nQ2FsbCkoaW50ZXJjZXB0b3JBcmdzLCBjYWxsUHJvcGVydGllcy5tZXRob2REZWZpbml0aW9uLCBjYWxsUHJvcGVydGllcy5jYWxsT3B0aW9ucywgY2FsbFByb3BlcnRpZXMuY2hhbm5lbCk7XG4gICAgICAgIC8qIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB0aGUgZW1pdHRlciBpcyB1c2VkLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0XG4gICAgICAgICAqIGVuZm9yY2UgdGhpcyB3aXRoIHRoZSB0eXBlIHN5c3RlbS4gV2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhpcyBlbWl0dGVyXG4gICAgICAgICAqIGJlZm9yZSBjYWxsaW5nIHRoZSBDYWxsSW52b2NhdGlvblRyYW5zZm9ybWVyLCBhbmQgd2UgbmVlZCB0byBjcmVhdGUgdGhlXG4gICAgICAgICAqIGNhbGwgYWZ0ZXIgdGhhdC4gKi9cbiAgICAgICAgZW1pdHRlci5jYWxsID0gY2FsbDtcbiAgICAgICAgbGV0IHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIGxldCByZWNlaXZlZFN0YXR1cyA9IGZhbHNlO1xuICAgICAgICBsZXQgY2FsbGVyU3RhY2tFcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgICBjYWxsLnN0YXJ0KGNhbGxQcm9wZXJ0aWVzLm1ldGFkYXRhLCB7XG4gICAgICAgICAgICBvblJlY2VpdmVNZXRhZGF0YTogbWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCgnbWV0YWRhdGEnLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbC5jYW5jZWxXaXRoU3RhdHVzKGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVELCAnVG9vIG1hbnkgcmVzcG9uc2VzIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SZWNlaXZlU3RhdHVzKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlZFN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlY2VpdmVkU3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmNvZGUgPT09IGNvbnN0YW50c18xLlN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsZXJTdGFjayA9IGdldEVycm9yU3RhY2tTdHJpbmcoY2FsbGVyU3RhY2tFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsUHJvcGVydGllcy5jYWxsYmFjaygoMCwgY2FsbF8xLmNhbGxFcnJvckZyb21TdGF0dXMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5JTVBMRU1FTlRFRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAnTm8gbWVzc2FnZSByZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHN0YXR1cy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNhbGxlclN0YWNrKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsUHJvcGVydGllcy5jYWxsYmFjayhudWxsLCByZXNwb25zZU1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsZXJTdGFjayA9IGdldEVycm9yU3RhY2tTdHJpbmcoY2FsbGVyU3RhY2tFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxQcm9wZXJ0aWVzLmNhbGxiYWNrKCgwLCBjYWxsXzEuY2FsbEVycm9yRnJvbVN0YXR1cykoc3RhdHVzLCBjYWxsZXJTdGFjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBBdm9pZCByZXRhaW5pbmcgdGhlIGNhbGxlclN0YWNrRXJyb3Igb2JqZWN0IGluIHRoZSBjYWxsIGNvbnRleHQgb2ZcbiAgICAgICAgICAgICAgICAgKiB0aGUgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICovXG4gICAgICAgICAgICAgICAgY2FsbGVyU3RhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KCdzdGF0dXMnLCBzdGF0dXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGwuc2VuZE1lc3NhZ2UoYXJndW1lbnQpO1xuICAgICAgICBjYWxsLmhhbGZDbG9zZSgpO1xuICAgICAgICByZXR1cm4gZW1pdHRlcjtcbiAgICB9XG4gICAgbWFrZUNsaWVudFN0cmVhbVJlcXVlc3QobWV0aG9kLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplLCBtZXRhZGF0YSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgY2hlY2tlZEFyZ3VtZW50cyA9IHRoaXMuY2hlY2tPcHRpb25hbFVuYXJ5UmVzcG9uc2VBcmd1bWVudHMobWV0YWRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgY29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIHBhdGg6IG1ldGhvZCxcbiAgICAgICAgICAgIHJlcXVlc3RTdHJlYW06IHRydWUsXG4gICAgICAgICAgICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gICAgICAgICAgICByZXF1ZXN0U2VyaWFsaXplOiBzZXJpYWxpemUsXG4gICAgICAgICAgICByZXNwb25zZURlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNhbGxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IGNoZWNrZWRBcmd1bWVudHMubWV0YWRhdGEsXG4gICAgICAgICAgICBjYWxsOiBuZXcgY2FsbF8xLkNsaWVudFdyaXRhYmxlU3RyZWFtSW1wbChzZXJpYWxpemUpLFxuICAgICAgICAgICAgY2hhbm5lbDogdGhpc1tDSEFOTkVMX1NZTUJPTF0sXG4gICAgICAgICAgICBtZXRob2REZWZpbml0aW9uOiBtZXRob2REZWZpbml0aW9uLFxuICAgICAgICAgICAgY2FsbE9wdGlvbnM6IGNoZWNrZWRBcmd1bWVudHMub3B0aW9ucyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjaGVja2VkQXJndW1lbnRzLmNhbGxiYWNrLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpc1tDQUxMX0lOVk9DQVRJT05fVFJBTlNGT1JNRVJfU1lNQk9MXSkge1xuICAgICAgICAgICAgY2FsbFByb3BlcnRpZXMgPSB0aGlzW0NBTExfSU5WT0NBVElPTl9UUkFOU0ZPUk1FUl9TWU1CT0xdKGNhbGxQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbWl0dGVyID0gY2FsbFByb3BlcnRpZXMuY2FsbDtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JBcmdzID0ge1xuICAgICAgICAgICAgY2xpZW50SW50ZXJjZXB0b3JzOiB0aGlzW0lOVEVSQ0VQVE9SX1NZTUJPTF0sXG4gICAgICAgICAgICBjbGllbnRJbnRlcmNlcHRvclByb3ZpZGVyczogdGhpc1tJTlRFUkNFUFRPUl9QUk9WSURFUl9TWU1CT0xdLFxuICAgICAgICAgICAgY2FsbEludGVyY2VwdG9yczogKF9hID0gY2FsbFByb3BlcnRpZXMuY2FsbE9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgIGNhbGxJbnRlcmNlcHRvclByb3ZpZGVyczogKF9iID0gY2FsbFByb3BlcnRpZXMuY2FsbE9wdGlvbnMuaW50ZXJjZXB0b3JfcHJvdmlkZXJzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FsbCA9ICgwLCBjbGllbnRfaW50ZXJjZXB0b3JzXzEuZ2V0SW50ZXJjZXB0aW5nQ2FsbCkoaW50ZXJjZXB0b3JBcmdzLCBjYWxsUHJvcGVydGllcy5tZXRob2REZWZpbml0aW9uLCBjYWxsUHJvcGVydGllcy5jYWxsT3B0aW9ucywgY2FsbFByb3BlcnRpZXMuY2hhbm5lbCk7XG4gICAgICAgIC8qIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB0aGUgZW1pdHRlciBpcyB1c2VkLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0XG4gICAgICAgICAqIGVuZm9yY2UgdGhpcyB3aXRoIHRoZSB0eXBlIHN5c3RlbS4gV2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhpcyBlbWl0dGVyXG4gICAgICAgICAqIGJlZm9yZSBjYWxsaW5nIHRoZSBDYWxsSW52b2NhdGlvblRyYW5zZm9ybWVyLCBhbmQgd2UgbmVlZCB0byBjcmVhdGUgdGhlXG4gICAgICAgICAqIGNhbGwgYWZ0ZXIgdGhhdC4gKi9cbiAgICAgICAgZW1pdHRlci5jYWxsID0gY2FsbDtcbiAgICAgICAgbGV0IHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIGxldCByZWNlaXZlZFN0YXR1cyA9IGZhbHNlO1xuICAgICAgICBsZXQgY2FsbGVyU3RhY2tFcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgICBjYWxsLnN0YXJ0KGNhbGxQcm9wZXJ0aWVzLm1ldGFkYXRhLCB7XG4gICAgICAgICAgICBvblJlY2VpdmVNZXRhZGF0YTogbWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCgnbWV0YWRhdGEnLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbC5jYW5jZWxXaXRoU3RhdHVzKGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVELCAnVG9vIG1hbnkgcmVzcG9uc2VzIHJlY2VpdmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgY2FsbC5zdGFydFJlYWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlY2VpdmVTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWRTdGF0dXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxlclN0YWNrID0gZ2V0RXJyb3JTdGFja1N0cmluZyhjYWxsZXJTdGFja0Vycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxQcm9wZXJ0aWVzLmNhbGxiYWNrKCgwLCBjYWxsXzEuY2FsbEVycm9yRnJvbVN0YXR1cykoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6ICdObyBtZXNzYWdlIHJlY2VpdmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogc3RhdHVzLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2FsbGVyU3RhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxQcm9wZXJ0aWVzLmNhbGxiYWNrKG51bGwsIHJlc3BvbnNlTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxlclN0YWNrID0gZ2V0RXJyb3JTdGFja1N0cmluZyhjYWxsZXJTdGFja0Vycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbFByb3BlcnRpZXMuY2FsbGJhY2soKDAsIGNhbGxfMS5jYWxsRXJyb3JGcm9tU3RhdHVzKShzdGF0dXMsIGNhbGxlclN0YWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIEF2b2lkIHJldGFpbmluZyB0aGUgY2FsbGVyU3RhY2tFcnJvciBvYmplY3QgaW4gdGhlIGNhbGwgY29udGV4dCBvZlxuICAgICAgICAgICAgICAgICAqIHRoZSBzdGF0dXMgZXZlbnQgaGFuZGxlci4gKi9cbiAgICAgICAgICAgICAgICBjYWxsZXJTdGFja0Vycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQoJ3N0YXR1cycsIHN0YXR1cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVtaXR0ZXI7XG4gICAgfVxuICAgIGNoZWNrTWV0YWRhdGFBbmRPcHRpb25zKGFyZzEsIGFyZzIpIHtcbiAgICAgICAgbGV0IG1ldGFkYXRhO1xuICAgICAgICBsZXQgb3B0aW9ucztcbiAgICAgICAgaWYgKGFyZzEgaW5zdGFuY2VvZiBtZXRhZGF0YV8xLk1ldGFkYXRhKSB7XG4gICAgICAgICAgICBtZXRhZGF0YSA9IGFyZzE7XG4gICAgICAgICAgICBpZiAoYXJnMikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBhcmcyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFyZzEpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gYXJnMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGFkYXRhID0gbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBtZXRhZGF0YSwgb3B0aW9ucyB9O1xuICAgIH1cbiAgICBtYWtlU2VydmVyU3RyZWFtUmVxdWVzdChtZXRob2QsIHNlcmlhbGl6ZSwgZGVzZXJpYWxpemUsIGFyZ3VtZW50LCBtZXRhZGF0YSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBjaGVja2VkQXJndW1lbnRzID0gdGhpcy5jaGVja01ldGFkYXRhQW5kT3B0aW9ucyhtZXRhZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBwYXRoOiBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtOiB0cnVlLFxuICAgICAgICAgICAgcmVxdWVzdFNlcmlhbGl6ZTogc2VyaWFsaXplLFxuICAgICAgICAgICAgcmVzcG9uc2VEZXNlcmlhbGl6ZTogZGVzZXJpYWxpemUsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBjYWxsUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBjaGVja2VkQXJndW1lbnRzLm1ldGFkYXRhLFxuICAgICAgICAgICAgY2FsbDogbmV3IGNhbGxfMS5DbGllbnRSZWFkYWJsZVN0cmVhbUltcGwoZGVzZXJpYWxpemUpLFxuICAgICAgICAgICAgY2hhbm5lbDogdGhpc1tDSEFOTkVMX1NZTUJPTF0sXG4gICAgICAgICAgICBtZXRob2REZWZpbml0aW9uOiBtZXRob2REZWZpbml0aW9uLFxuICAgICAgICAgICAgY2FsbE9wdGlvbnM6IGNoZWNrZWRBcmd1bWVudHMub3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXNbQ0FMTF9JTlZPQ0FUSU9OX1RSQU5TRk9STUVSX1NZTUJPTF0pIHtcbiAgICAgICAgICAgIGNhbGxQcm9wZXJ0aWVzID0gdGhpc1tDQUxMX0lOVk9DQVRJT05fVFJBTlNGT1JNRVJfU1lNQk9MXShjYWxsUHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyZWFtID0gY2FsbFByb3BlcnRpZXMuY2FsbDtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JBcmdzID0ge1xuICAgICAgICAgICAgY2xpZW50SW50ZXJjZXB0b3JzOiB0aGlzW0lOVEVSQ0VQVE9SX1NZTUJPTF0sXG4gICAgICAgICAgICBjbGllbnRJbnRlcmNlcHRvclByb3ZpZGVyczogdGhpc1tJTlRFUkNFUFRPUl9QUk9WSURFUl9TWU1CT0xdLFxuICAgICAgICAgICAgY2FsbEludGVyY2VwdG9yczogKF9hID0gY2FsbFByb3BlcnRpZXMuY2FsbE9wdGlvbnMuaW50ZXJjZXB0b3JzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgIGNhbGxJbnRlcmNlcHRvclByb3ZpZGVyczogKF9iID0gY2FsbFByb3BlcnRpZXMuY2FsbE9wdGlvbnMuaW50ZXJjZXB0b3JfcHJvdmlkZXJzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FsbCA9ICgwLCBjbGllbnRfaW50ZXJjZXB0b3JzXzEuZ2V0SW50ZXJjZXB0aW5nQ2FsbCkoaW50ZXJjZXB0b3JBcmdzLCBjYWxsUHJvcGVydGllcy5tZXRob2REZWZpbml0aW9uLCBjYWxsUHJvcGVydGllcy5jYWxsT3B0aW9ucywgY2FsbFByb3BlcnRpZXMuY2hhbm5lbCk7XG4gICAgICAgIC8qIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB0aGUgZW1pdHRlciBpcyB1c2VkLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0XG4gICAgICAgICAqIGVuZm9yY2UgdGhpcyB3aXRoIHRoZSB0eXBlIHN5c3RlbS4gV2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhpcyBlbWl0dGVyXG4gICAgICAgICAqIGJlZm9yZSBjYWxsaW5nIHRoZSBDYWxsSW52b2NhdGlvblRyYW5zZm9ybWVyLCBhbmQgd2UgbmVlZCB0byBjcmVhdGUgdGhlXG4gICAgICAgICAqIGNhbGwgYWZ0ZXIgdGhhdC4gKi9cbiAgICAgICAgc3RyZWFtLmNhbGwgPSBjYWxsO1xuICAgICAgICBsZXQgcmVjZWl2ZWRTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNhbGxlclN0YWNrRXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgY2FsbC5zdGFydChjYWxsUHJvcGVydGllcy5tZXRhZGF0YSwge1xuICAgICAgICAgICAgb25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZW1pdCgnbWV0YWRhdGEnLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVjZWl2ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVjZWl2ZWRTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWNlaXZlZFN0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5jb2RlICE9PSBjb25zdGFudHNfMS5TdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGVyU3RhY2sgPSBnZXRFcnJvclN0YWNrU3RyaW5nKGNhbGxlclN0YWNrRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCAoMCwgY2FsbF8xLmNhbGxFcnJvckZyb21TdGF0dXMpKHN0YXR1cywgY2FsbGVyU3RhY2spKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogQXZvaWQgcmV0YWluaW5nIHRoZSBjYWxsZXJTdGFja0Vycm9yIG9iamVjdCBpbiB0aGUgY2FsbCBjb250ZXh0IG9mXG4gICAgICAgICAgICAgICAgICogdGhlIHN0YXR1cyBldmVudCBoYW5kbGVyLiAqL1xuICAgICAgICAgICAgICAgIGNhbGxlclN0YWNrRXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5lbWl0KCdzdGF0dXMnLCBzdGF0dXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGwuc2VuZE1lc3NhZ2UoYXJndW1lbnQpO1xuICAgICAgICBjYWxsLmhhbGZDbG9zZSgpO1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH1cbiAgICBtYWtlQmlkaVN0cmVhbVJlcXVlc3QobWV0aG9kLCBzZXJpYWxpemUsIGRlc2VyaWFsaXplLCBtZXRhZGF0YSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBjaGVja2VkQXJndW1lbnRzID0gdGhpcy5jaGVja01ldGFkYXRhQW5kT3B0aW9ucyhtZXRhZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBwYXRoOiBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtOiB0cnVlLFxuICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW06IHRydWUsXG4gICAgICAgICAgICByZXF1ZXN0U2VyaWFsaXplOiBzZXJpYWxpemUsXG4gICAgICAgICAgICByZXNwb25zZURlc2VyaWFsaXplOiBkZXNlcmlhbGl6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNhbGxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IGNoZWNrZWRBcmd1bWVudHMubWV0YWRhdGEsXG4gICAgICAgICAgICBjYWxsOiBuZXcgY2FsbF8xLkNsaWVudER1cGxleFN0cmVhbUltcGwoc2VyaWFsaXplLCBkZXNlcmlhbGl6ZSksXG4gICAgICAgICAgICBjaGFubmVsOiB0aGlzW0NIQU5ORUxfU1lNQk9MXSxcbiAgICAgICAgICAgIG1ldGhvZERlZmluaXRpb246IG1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICBjYWxsT3B0aW9uczogY2hlY2tlZEFyZ3VtZW50cy5vcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpc1tDQUxMX0lOVk9DQVRJT05fVFJBTlNGT1JNRVJfU1lNQk9MXSkge1xuICAgICAgICAgICAgY2FsbFByb3BlcnRpZXMgPSB0aGlzW0NBTExfSU5WT0NBVElPTl9UUkFOU0ZPUk1FUl9TWU1CT0xdKGNhbGxQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHJlYW0gPSBjYWxsUHJvcGVydGllcy5jYWxsO1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvckFyZ3MgPSB7XG4gICAgICAgICAgICBjbGllbnRJbnRlcmNlcHRvcnM6IHRoaXNbSU5URVJDRVBUT1JfU1lNQk9MXSxcbiAgICAgICAgICAgIGNsaWVudEludGVyY2VwdG9yUHJvdmlkZXJzOiB0aGlzW0lOVEVSQ0VQVE9SX1BST1ZJREVSX1NZTUJPTF0sXG4gICAgICAgICAgICBjYWxsSW50ZXJjZXB0b3JzOiAoX2EgPSBjYWxsUHJvcGVydGllcy5jYWxsT3B0aW9ucy5pbnRlcmNlcHRvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgY2FsbEludGVyY2VwdG9yUHJvdmlkZXJzOiAoX2IgPSBjYWxsUHJvcGVydGllcy5jYWxsT3B0aW9ucy5pbnRlcmNlcHRvcl9wcm92aWRlcnMpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYWxsID0gKDAsIGNsaWVudF9pbnRlcmNlcHRvcnNfMS5nZXRJbnRlcmNlcHRpbmdDYWxsKShpbnRlcmNlcHRvckFyZ3MsIGNhbGxQcm9wZXJ0aWVzLm1ldGhvZERlZmluaXRpb24sIGNhbGxQcm9wZXJ0aWVzLmNhbGxPcHRpb25zLCBjYWxsUHJvcGVydGllcy5jaGFubmVsKTtcbiAgICAgICAgLyogVGhpcyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlIHRoZSBlbWl0dGVyIGlzIHVzZWQuIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3RcbiAgICAgICAgICogZW5mb3JjZSB0aGlzIHdpdGggdGhlIHR5cGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNvbnN0cnVjdCB0aGlzIGVtaXR0ZXJcbiAgICAgICAgICogYmVmb3JlIGNhbGxpbmcgdGhlIENhbGxJbnZvY2F0aW9uVHJhbnNmb3JtZXIsIGFuZCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGVcbiAgICAgICAgICogY2FsbCBhZnRlciB0aGF0LiAqL1xuICAgICAgICBzdHJlYW0uY2FsbCA9IGNhbGw7XG4gICAgICAgIGxldCByZWNlaXZlZFN0YXR1cyA9IGZhbHNlO1xuICAgICAgICBsZXQgY2FsbGVyU3RhY2tFcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgICBjYWxsLnN0YXJ0KGNhbGxQcm9wZXJ0aWVzLm1ldGFkYXRhLCB7XG4gICAgICAgICAgICBvblJlY2VpdmVNZXRhZGF0YShtZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5lbWl0KCdtZXRhZGF0YScsIG1ldGFkYXRhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlY2VpdmVTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWRTdGF0dXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5wdXNoKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuY29kZSAhPT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxlclN0YWNrID0gZ2V0RXJyb3JTdGFja1N0cmluZyhjYWxsZXJTdGFja0Vycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgKDAsIGNhbGxfMS5jYWxsRXJyb3JGcm9tU3RhdHVzKShzdGF0dXMsIGNhbGxlclN0YWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIEF2b2lkIHJldGFpbmluZyB0aGUgY2FsbGVyU3RhY2tFcnJvciBvYmplY3QgaW4gdGhlIGNhbGwgY29udGV4dCBvZlxuICAgICAgICAgICAgICAgICAqIHRoZSBzdGF0dXMgZXZlbnQgaGFuZGxlci4gKi9cbiAgICAgICAgICAgICAgICBjYWxsZXJTdGFja0Vycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZW1pdCgnc3RhdHVzJywgc3RhdHVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2xpZW50ID0gQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubWFrZUNsaWVudENvbnN0cnVjdG9yID0gbWFrZUNsaWVudENvbnN0cnVjdG9yO1xuZXhwb3J0cy5sb2FkUGFja2FnZURlZmluaXRpb24gPSBsb2FkUGFja2FnZURlZmluaXRpb247XG5jb25zdCBjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudFwiKTtcbi8qKlxuICogTWFwIHdpdGggc2hvcnQgbmFtZXMgZm9yIGVhY2ggb2YgdGhlIHJlcXVlc3RlciBtYWtlciBmdW5jdGlvbnMuIFVzZWQgaW5cbiAqIG1ha2VDbGllbnRDb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgcmVxdWVzdGVyRnVuY3MgPSB7XG4gICAgdW5hcnk6IGNsaWVudF8xLkNsaWVudC5wcm90b3R5cGUubWFrZVVuYXJ5UmVxdWVzdCxcbiAgICBzZXJ2ZXJfc3RyZWFtOiBjbGllbnRfMS5DbGllbnQucHJvdG90eXBlLm1ha2VTZXJ2ZXJTdHJlYW1SZXF1ZXN0LFxuICAgIGNsaWVudF9zdHJlYW06IGNsaWVudF8xLkNsaWVudC5wcm90b3R5cGUubWFrZUNsaWVudFN0cmVhbVJlcXVlc3QsXG4gICAgYmlkaTogY2xpZW50XzEuQ2xpZW50LnByb3RvdHlwZS5tYWtlQmlkaVN0cmVhbVJlcXVlc3QsXG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUsIGlmIGdpdmVuIGtleSBpcyBpbmNsdWRlZCBpbiB0aGUgYmxhY2tsaXN0ZWRcbiAqIGtleXMuXG4gKiBAcGFyYW0ga2V5IGtleSBmb3IgY2hlY2ssIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGVQb2xsdXRlZChrZXkpIHtcbiAgICByZXR1cm4gWydfX3Byb3RvX18nLCAncHJvdG90eXBlJywgJ2NvbnN0cnVjdG9yJ10uaW5jbHVkZXMoa2V5KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnN0cnVjdG9yIGZvciBhIGNsaWVudCB3aXRoIHRoZSBnaXZlbiBtZXRob2RzLCBhcyBzcGVjaWZpZWQgaW5cbiAqIHRoZSBtZXRob2RzIGFyZ3VtZW50LiBUaGUgcmVzdWx0aW5nIGNsYXNzIHdpbGwgaGF2ZSBhbiBpbnN0YW5jZSBtZXRob2QgZm9yXG4gKiBlYWNoIG1ldGhvZCBpbiB0aGUgc2VydmljZSwgd2hpY2ggaXMgYSBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIG9uZSBvZiB0aGVcbiAqIFtDbGllbnRde0BsaW5rIGdycGMuQ2xpZW50fSByZXF1ZXN0IG1ldGhvZHMsIGRlcGVuZGluZyBvbiBgcmVxdWVzdFNlcmlhbGl6ZWBcbiAqIGFuZCBgcmVzcG9uc2VTZXJpYWxpemVgLCB3aXRoIHRoZSBgbWV0aG9kYCwgYHNlcmlhbGl6ZWAsIGFuZCBgZGVzZXJpYWxpemVgXG4gKiBhcmd1bWVudHMgcHJlZGVmaW5lZC5cbiAqIEBwYXJhbSBtZXRob2RzIEFuIG9iamVjdCBtYXBwaW5nIG1ldGhvZCBuYW1lcyB0b1xuICogICAgIG1ldGhvZCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gKiBAcGFyYW0gY2xhc3NPcHRpb25zIEFuIG9wdGlvbnMgb2JqZWN0LlxuICogQHJldHVybiBOZXcgY2xpZW50IGNvbnN0cnVjdG9yLCB3aGljaCBpcyBhIHN1YmNsYXNzIG9mXG4gKiAgICAge0BsaW5rIGdycGMuQ2xpZW50fSwgYW5kIGhhcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhhdCBjb25zdHJ1Y3Rvci5cbiAqL1xuZnVuY3Rpb24gbWFrZUNsaWVudENvbnN0cnVjdG9yKG1ldGhvZHMsIHNlcnZpY2VOYW1lLCBjbGFzc09wdGlvbnMpIHtcbiAgICBpZiAoIWNsYXNzT3B0aW9ucykge1xuICAgICAgICBjbGFzc09wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgY2xhc3MgU2VydmljZUNsaWVudEltcGwgZXh0ZW5kcyBjbGllbnRfMS5DbGllbnQge1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhtZXRob2RzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBpZiAoaXNQcm90b3R5cGVQb2xsdXRlZChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJzID0gbWV0aG9kc1tuYW1lXTtcbiAgICAgICAgbGV0IG1ldGhvZFR5cGU7XG4gICAgICAgIC8vIFRPRE8obXVyZ2F0cm9pZDk5KTogVmVyaWZ5IHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBuYW1lLmNoYXJBdCgwKSA9PT0gJyQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBuYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCAkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHJzLnJlcXVlc3RTdHJlYW0pIHtcbiAgICAgICAgICAgIGlmIChhdHRycy5yZXNwb25zZVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIG1ldGhvZFR5cGUgPSAnYmlkaSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXRob2RUeXBlID0gJ2NsaWVudF9zdHJlYW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGF0dHJzLnJlc3BvbnNlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kVHlwZSA9ICdzZXJ2ZXJfc3RyZWFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1ldGhvZFR5cGUgPSAndW5hcnknO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZSA9IGF0dHJzLnJlcXVlc3RTZXJpYWxpemU7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplID0gYXR0cnMucmVzcG9uc2VEZXNlcmlhbGl6ZTtcbiAgICAgICAgY29uc3QgbWV0aG9kRnVuYyA9IHBhcnRpYWwocmVxdWVzdGVyRnVuY3NbbWV0aG9kVHlwZV0sIGF0dHJzLnBhdGgsIHNlcmlhbGl6ZSwgZGVzZXJpYWxpemUpO1xuICAgICAgICBTZXJ2aWNlQ2xpZW50SW1wbC5wcm90b3R5cGVbbmFtZV0gPSBtZXRob2RGdW5jO1xuICAgICAgICAvLyBBc3NvY2lhdGUgYWxsIHByb3ZpZGVkIGF0dHJpYnV0ZXMgd2l0aCB0aGUgbWV0aG9kXG4gICAgICAgIE9iamVjdC5hc3NpZ24oU2VydmljZUNsaWVudEltcGwucHJvdG90eXBlW25hbWVdLCBhdHRycyk7XG4gICAgICAgIGlmIChhdHRycy5vcmlnaW5hbE5hbWUgJiYgIWlzUHJvdG90eXBlUG9sbHV0ZWQoYXR0cnMub3JpZ2luYWxOYW1lKSkge1xuICAgICAgICAgICAgU2VydmljZUNsaWVudEltcGwucHJvdG90eXBlW2F0dHJzLm9yaWdpbmFsTmFtZV0gPVxuICAgICAgICAgICAgICAgIFNlcnZpY2VDbGllbnRJbXBsLnByb3RvdHlwZVtuYW1lXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFNlcnZpY2VDbGllbnRJbXBsLnNlcnZpY2UgPSBtZXRob2RzO1xuICAgIFNlcnZpY2VDbGllbnRJbXBsLnNlcnZpY2VOYW1lID0gc2VydmljZU5hbWU7XG4gICAgcmV0dXJuIFNlcnZpY2VDbGllbnRJbXBsO1xufVxuZnVuY3Rpb24gcGFydGlhbChmbiwgcGF0aCwgc2VyaWFsaXplLCBkZXNlcmlhbGl6ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHBhdGgsIHNlcmlhbGl6ZSwgZGVzZXJpYWxpemUsIC4uLmFyZ3MpO1xuICAgIH07XG59XG5mdW5jdGlvbiBpc1Byb3RvYnVmVHlwZURlZmluaXRpb24ob2JqKSB7XG4gICAgcmV0dXJuICdmb3JtYXQnIGluIG9iajtcbn1cbi8qKlxuICogTG9hZCBhIGdSUEMgcGFja2FnZSBkZWZpbml0aW9uIGFzIGEgZ1JQQyBvYmplY3QgaGllcmFyY2h5LlxuICogQHBhcmFtIHBhY2thZ2VEZWYgVGhlIHBhY2thZ2UgZGVmaW5pdGlvbiBvYmplY3QuXG4gKiBAcmV0dXJuIFRoZSByZXN1bHRpbmcgZ1JQQyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGxvYWRQYWNrYWdlRGVmaW5pdGlvbihwYWNrYWdlRGVmKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBzZXJ2aWNlRnFuIGluIHBhY2thZ2VEZWYpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYWNrYWdlRGVmLCBzZXJ2aWNlRnFuKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHBhY2thZ2VEZWZbc2VydmljZUZxbl07XG4gICAgICAgICAgICBjb25zdCBuYW1lQ29tcG9uZW50cyA9IHNlcnZpY2VGcW4uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmIChuYW1lQ29tcG9uZW50cy5zb21lKChjb21wKSA9PiBpc1Byb3RvdHlwZVBvbGx1dGVkKGNvbXApKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBuYW1lQ29tcG9uZW50c1tuYW1lQ29tcG9uZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50ID0gcmVzdWx0O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBuYW1lQ29tcG9uZW50cy5zbGljZSgwLCAtMSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRbcGFja2FnZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGFja2FnZU5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhY2thZ2VOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1Byb3RvYnVmVHlwZURlZmluaXRpb24oc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50W3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50W3NlcnZpY2VOYW1lXSA9IG1ha2VDbGllbnRDb25zdHJ1Y3RvcihzZXJ2aWNlLCBzZXJ2aWNlTmFtZSwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWtlLWNsaWVudC5qcy5tYXAiLAogICAgIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHdvcmRzIGNvbXBvc2VkIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlQXNjaWlXb3JkID0gL1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBMYXRpbiBVbmljb2RlIGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbnZhciByZUxhdGluID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2c7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmZcXFxcdWZlMjAtXFxcXHVmZTIzJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZjAnLFxuICAgIHJzRGluZ2JhdFJhbmdlID0gJ1xcXFx1MjcwMC1cXFxcdTI3YmYnLFxuICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLFxuICAgIHJzTWF0aE9wUmFuZ2UgPSAnXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmNycsXG4gICAgcnNOb25DaGFyUmFuZ2UgPSAnXFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmJyxcbiAgICByc1B1bmN0dWF0aW9uUmFuZ2UgPSAnXFxcXHUyMDAwLVxcXFx1MjA2ZicsXG4gICAgcnNTcGFjZVJhbmdlID0gJyBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwJyxcbiAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgcnNCcmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNQdW5jdHVhdGlvblJhbmdlICsgcnNTcGFjZVJhbmdlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCIsXG4gICAgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQnJlYWsgPSAnWycgKyByc0JyZWFrUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9NYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSArICddJyxcbiAgICByc0RpZ2l0cyA9ICdcXFxcZCsnLFxuICAgIHJzRGluZ2JhdCA9ICdbJyArIHJzRGluZ2JhdFJhbmdlICsgJ10nLFxuICAgIHJzTG93ZXIgPSAnWycgKyByc0xvd2VyUmFuZ2UgKyAnXScsXG4gICAgcnNNaXNjID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyByc0JyZWFrUmFuZ2UgKyByc0RpZ2l0cyArIHJzRGluZ2JhdFJhbmdlICsgcnNMb3dlclJhbmdlICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICByc1VwcGVyID0gJ1snICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJzTG93ZXJNaXNjID0gJyg/OicgKyByc0xvd2VyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgIHJzVXBwZXJNaXNjID0gJyg/OicgKyByc1VwcGVyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgIHJzT3B0TG93ZXJDb250ciA9ICcoPzonICsgcnNBcG9zICsgJyg/OmR8bGx8bXxyZXxzfHR8dmUpKT8nLFxuICAgIHJzT3B0VXBwZXJDb250ciA9ICcoPzonICsgcnNBcG9zICsgJyg/OkR8TEx8TXxSRXxTfFR8VkUpKT8nLFxuICAgIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzRW1vamkgPSAnKD86JyArIFtyc0RpbmdiYXQsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzU2VxLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBhcG9zdHJvcGhlcy4gKi9cbnZhciByZUFwb3MgPSBSZWdFeHAocnNBcG9zLCAnZycpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19mb3JfU3ltYm9scykuXG4gKi9cbnZhciByZUNvbWJvTWFyayA9IFJlZ0V4cChyc0NvbWJvLCAnZycpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBjb21wbGV4IG9yIGNvbXBvdW5kIHdvcmRzLiAqL1xudmFyIHJlVW5pY29kZVdvcmQgPSBSZWdFeHAoW1xuICByc1VwcGVyICsgJz8nICsgcnNMb3dlciArICcrJyArIHJzT3B0TG93ZXJDb250ciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICByc1VwcGVyTWlzYyArICcrJyArIHJzT3B0VXBwZXJDb250ciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc0xvd2VyTWlzYywgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gIHJzVXBwZXIgKyAnPycgKyByc0xvd2VyTWlzYyArICcrJyArIHJzT3B0TG93ZXJDb250cixcbiAgcnNVcHBlciArICcrJyArIHJzT3B0VXBwZXJDb250cixcbiAgcnNEaWdpdHMsXG4gIHJzRW1vamlcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9NYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG52YXIgcmVIYXNVbmljb2RlV29yZCA9IC9bYS16XVtBLVpdfFtBLVpdezIsfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xudmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICdcXHhjNyc6ICdDJywgICdcXHhlNyc6ICdjJyxcbiAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAnXFx4ZTgnOiAnZScsICAnXFx4ZTknOiAnZScsICdcXHhlYSc6ICdlJywgJ1xceGViJzogJ2UnLFxuICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAnXFx4ZDEnOiAnTicsICAnXFx4ZjEnOiAnbicsXG4gICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgJ1xceGQ5JzogJ1UnLCAgJ1xceGRhJzogJ1UnLCAnXFx4ZGInOiAnVScsICdcXHhkYyc6ICdVJyxcbiAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICdcXHhjNic6ICdBZScsICdcXHhlNic6ICdhZScsXG4gICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICdcXHhkZic6ICdzcycsXG4gIC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG4gICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgJ1xcdTAxMDYnOiAnQycsICAnXFx1MDEwOCc6ICdDJywgJ1xcdTAxMGEnOiAnQycsICdcXHUwMTBjJzogJ0MnLFxuICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgJ1xcdTAxMTInOiAnRScsICAnXFx1MDExNCc6ICdFJywgJ1xcdTAxMTYnOiAnRScsICdcXHUwMTE4JzogJ0UnLCAnXFx1MDExYSc6ICdFJyxcbiAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAnXFx1MDExZCc6ICdnJywgICdcXHUwMTFmJzogJ2cnLCAnXFx1MDEyMSc6ICdnJywgJ1xcdTAxMjMnOiAnZycsXG4gICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgJ1xcdTAxMjknOiAnaScsICAnXFx1MDEyYic6ICdpJywgJ1xcdTAxMmQnOiAnaScsICdcXHUwMTJmJzogJ2knLCAnXFx1MDEzMSc6ICdpJyxcbiAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICdcXHUwMTM5JzogJ0wnLCAgJ1xcdTAxM2InOiAnTCcsICdcXHUwMTNkJzogJ0wnLCAnXFx1MDEzZic6ICdMJywgJ1xcdTAxNDEnOiAnTCcsXG4gICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgJ1xcdTAxNDQnOiAnbicsICAnXFx1MDE0Nic6ICduJywgJ1xcdTAxNDgnOiAnbicsICdcXHUwMTRiJzogJ24nLFxuICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICdcXHUwMTU0JzogJ1InLCAgJ1xcdTAxNTYnOiAnUicsICdcXHUwMTU4JzogJ1InLFxuICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAnXFx1MDE1Yic6ICdzJywgICdcXHUwMTVkJzogJ3MnLCAnXFx1MDE1Zic6ICdzJywgJ1xcdTAxNjEnOiAncycsXG4gICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgJ1xcdTAxNjgnOiAnVScsICAnXFx1MDE2YSc6ICdVJywgJ1xcdTAxNmMnOiAnVScsICdcXHUwMTZlJzogJ1UnLCAnXFx1MDE3MCc6ICdVJywgJ1xcdTAxNzInOiAnVScsXG4gICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAnXFx1MDE3Nic6ICdZJywgICdcXHUwMTc3JzogJ3knLCAnXFx1MDE3OCc6ICdZJyxcbiAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAnXFx1MDEzMic6ICdJSicsICdcXHUwMTMzJzogJ2lqJyxcbiAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzcydcbn07XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYW4gQVNDSUkgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICovXG5mdW5jdGlvbiBhc2NpaVdvcmRzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlQXNjaWlXb3JkKSB8fCBbXTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVidXJyYCB0byBjb252ZXJ0IExhdGluLTEgU3VwcGxlbWVudCBhbmQgTGF0aW4gRXh0ZW5kZWQtQVxuICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGV0dGVyIFRoZSBtYXRjaGVkIGxldHRlciB0byBkZWJ1cnIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuXG4gKi9cbnZhciBkZWJ1cnJMZXR0ZXIgPSBiYXNlUHJvcGVydHlPZihkZWJ1cnJlZExldHRlcnMpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBhIHdvcmQgY29tcG9zZWQgb2YgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICovXG5mdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlV29yZCkgfHwgW107XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmNhbWVsQ2FzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIGVhY2ggd29yZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvdW5kZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kZXIoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHJldHVybiBhcnJheVJlZHVjZSh3b3JkcyhkZWJ1cnIoc3RyaW5nKS5yZXBsYWNlKHJlQXBvcywgJycpKSwgY2FsbGJhY2ssICcnKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtjYW1lbCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYW1lbENhc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gKiAvLyA9PiAnZm9vQmFyJ1xuICpcbiAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXItLScpO1xuICogLy8gPT4gJ2Zvb0JhcidcbiAqXG4gKiBfLmNhbWVsQ2FzZSgnX19GT09fQkFSX18nKTtcbiAqIC8vID0+ICdmb29CYXInXG4gKi9cbnZhciBjYW1lbENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/IGNhcGl0YWxpemUod29yZCkgOiB3b3JkKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gdXBwZXIgY2FzZSBhbmQgdGhlIHJlbWFpbmluZ1xuICogdG8gbG93ZXIgY2FzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FwaXRhbGl6ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNhcGl0YWxpemUoJ0ZSRUQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICovXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICByZXR1cm4gdXBwZXJGaXJzdCh0b1N0cmluZyhzdHJpbmcpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIERlYnVycnMgYHN0cmluZ2AgYnkgY29udmVydGluZ1xuICogW0xhdGluLTEgU3VwcGxlbWVudF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMgYW5kIHJlbW92aW5nXG4gKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGRlYnVyci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICogLy8gPT4gJ2RlamEgdnUnXG4gKi9cbmZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIHN0cmluZyAmJiBzdHJpbmcucmVwbGFjZShyZUxhdGluLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udXBwZXJGaXJzdCgnZnJlZCcpO1xuICogLy8gPT4gJ0ZyZWQnXG4gKlxuICogXy51cHBlckZpcnN0KCdGUkVEJyk7XG4gKiAvLyA9PiAnRlJFRCdcbiAqL1xudmFyIHVwcGVyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvVXBwZXJDYXNlJyk7XG5cbi8qKlxuICogU3BsaXRzIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtwYXR0ZXJuXSBUaGUgcGF0dGVybiB0byBtYXRjaCB3b3Jkcy5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJ11cbiAqXG4gKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycsIC9bXiwgXSsvZyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJyYnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIHdvcmRzKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICBpZiAocGF0dGVybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGVXb3JkKHN0cmluZykgPyB1bmljb2RlV29yZHMoc3RyaW5nKSA6IGFzY2lpV29yZHMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gc3RyaW5nLm1hdGNoKHBhdHRlcm4pIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsQ2FzZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gY29kZWdlbjtcclxuXHJcbi8qKlxyXG4gKiBCZWdpbnMgZ2VuZXJhdGluZyBhIGZ1bmN0aW9uLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmdW5jdGlvblBhcmFtcyBGdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXNcclxuICogQHBhcmFtIHtzdHJpbmd9IFtmdW5jdGlvbk5hbWVdIEZ1bmN0aW9uIG5hbWUgaWYgbm90IGFub255bW91c1xyXG4gKiBAcmV0dXJucyB7Q29kZWdlbn0gQXBwZW5kZXIgdGhhdCBhcHBlbmRzIGNvZGUgdG8gdGhlIGZ1bmN0aW9uJ3MgYm9keVxyXG4gKi9cclxuZnVuY3Rpb24gY29kZWdlbihmdW5jdGlvblBhcmFtcywgZnVuY3Rpb25OYW1lKSB7XHJcblxyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXHJcbiAgICBpZiAodHlwZW9mIGZ1bmN0aW9uUGFyYW1zID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25QYXJhbXM7XHJcbiAgICAgICAgZnVuY3Rpb25QYXJhbXMgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJvZHkgPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgY29kZSB0byB0aGUgZnVuY3Rpb24ncyBib2R5IG9yIGZpbmlzaGVzIGdlbmVyYXRpb24uXHJcbiAgICAgKiBAdHlwZWRlZiBDb2RlZ2VuXHJcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3QuPHN0cmluZywqPn0gW2Zvcm1hdFN0cmluZ09yU2NvcGVdIEZvcm1hdCBzdHJpbmcgb3IsIHRvIGZpbmlzaCB0aGUgZnVuY3Rpb24sIGFuIG9iamVjdCBvZiBhZGRpdGlvbmFsIHNjb3BlIHZhcmlhYmxlcywgaWYgYW55XHJcbiAgICAgKiBAcGFyYW0gey4uLip9IFtmb3JtYXRQYXJhbXNdIEZvcm1hdCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcmV0dXJucyB7Q29kZWdlbnxGdW5jdGlvbn0gSXRzZWxmIG9yIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gaWYgZmluaXNoZWRcclxuICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBmb3JtYXQgcGFyYW1ldGVyIGNvdW50cyBkbyBub3QgbWF0Y2hcclxuICAgICAqL1xyXG5cclxuICAgIGZ1bmN0aW9uIENvZGVnZW4oZm9ybWF0U3RyaW5nT3JTY29wZSkge1xyXG4gICAgICAgIC8vIG5vdGUgdGhhdCBleHBsaWNpdCBhcnJheSBoYW5kbGluZyBiZWxvdyBtYWtlcyB0aGlzIH41MCUgZmFzdGVyXHJcblxyXG4gICAgICAgIC8vIGZpbmlzaCB0aGUgZnVuY3Rpb25cclxuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdFN0cmluZ09yU2NvcGUgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChjb2RlZ2VuLnZlcmJvc2UpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvZGVnZW46IFwiICsgc291cmNlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIHNvdXJjZSA9IFwicmV0dXJuIFwiICsgc291cmNlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0U3RyaW5nT3JTY29wZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjb3BlS2V5cyAgID0gT2JqZWN0LmtleXMoZm9ybWF0U3RyaW5nT3JTY29wZSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVQYXJhbXMgPSBuZXcgQXJyYXkoc2NvcGVLZXlzLmxlbmd0aCArIDEpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlVmFsdWVzID0gbmV3IEFycmF5KHNjb3BlS2V5cy5sZW5ndGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChzY29wZU9mZnNldCA8IHNjb3BlS2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY29wZVBhcmFtc1tzY29wZU9mZnNldF0gPSBzY29wZUtleXNbc2NvcGVPZmZzZXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlVmFsdWVzW3Njb3BlT2Zmc2V0XSA9IGZvcm1hdFN0cmluZ09yU2NvcGVbc2NvcGVLZXlzW3Njb3BlT2Zmc2V0KytdXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNjb3BlUGFyYW1zW3Njb3BlT2Zmc2V0XSA9IHNvdXJjZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5hcHBseShudWxsLCBzY29wZVBhcmFtcykuYXBwbHkobnVsbCwgc2NvcGVWYWx1ZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy1mdW5jXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKHNvdXJjZSkoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctZnVuY1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFwcGVuZCB0byBib2R5XHJcbiAgICAgICAgdmFyIGZvcm1hdFBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgIGZvcm1hdE9mZnNldCA9IDA7XHJcbiAgICAgICAgd2hpbGUgKGZvcm1hdE9mZnNldCA8IGZvcm1hdFBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtc1tmb3JtYXRPZmZzZXRdID0gYXJndW1lbnRzWysrZm9ybWF0T2Zmc2V0XTtcclxuICAgICAgICBmb3JtYXRPZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvcm1hdFN0cmluZ09yU2NvcGUgPSBmb3JtYXRTdHJpbmdPclNjb3BlLnJlcGxhY2UoLyUoWyVkZmlqc10pL2csIGZ1bmN0aW9uIHJlcGxhY2UoJDAsICQxKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGZvcm1hdFBhcmFtc1tmb3JtYXRPZmZzZXQrK107XHJcbiAgICAgICAgICAgIHN3aXRjaCAoJDEpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkXCI6IGNhc2UgXCJmXCI6IHJldHVybiBTdHJpbmcoTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOiByZXR1cm4gU3RyaW5nKE1hdGguZmxvb3IodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJqXCI6IHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic1wiOiByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gXCIlXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGZvcm1hdE9mZnNldCAhPT0gZm9ybWF0UGFyYW1zLmxlbmd0aClcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJwYXJhbWV0ZXIgY291bnQgbWlzbWF0Y2hcIik7XHJcbiAgICAgICAgYm9keS5wdXNoKGZvcm1hdFN0cmluZ09yU2NvcGUpO1xyXG4gICAgICAgIHJldHVybiBDb2RlZ2VuO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKGZ1bmN0aW9uTmFtZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb24gXCIgKyAoZnVuY3Rpb25OYW1lT3ZlcnJpZGUgfHwgZnVuY3Rpb25OYW1lIHx8IFwiXCIpICsgXCIoXCIgKyAoZnVuY3Rpb25QYXJhbXMgJiYgZnVuY3Rpb25QYXJhbXMuam9pbihcIixcIikgfHwgXCJcIikgKyBcIil7XFxuICBcIiArIGJvZHkuam9pbihcIlxcbiAgXCIpICsgXCJcXG59XCI7XHJcbiAgICB9XHJcblxyXG4gICAgQ29kZWdlbi50b1N0cmluZyA9IHRvU3RyaW5nO1xyXG4gICAgcmV0dXJuIENvZGVnZW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCZWdpbnMgZ2VuZXJhdGluZyBhIGZ1bmN0aW9uLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb24gY29kZWdlblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Z1bmN0aW9uTmFtZV0gRnVuY3Rpb24gbmFtZSBpZiBub3QgYW5vbnltb3VzXHJcbiAqIEByZXR1cm5zIHtDb2RlZ2VufSBBcHBlbmRlciB0aGF0IGFwcGVuZHMgY29kZSB0byB0aGUgZnVuY3Rpb24ncyBib2R5XHJcbiAqIEB2YXJpYXRpb24gMlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBXaGVuIHNldCB0byBgdHJ1ZWAsIGNvZGVnZW4gd2lsbCBsb2cgZ2VuZXJhdGVkIGNvZGUgdG8gY29uc29sZS4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuXHJcbiAqIEBuYW1lIHV0aWwuY29kZWdlbi52ZXJib3NlXHJcbiAqIEB0eXBlIHtib29sZWFufVxyXG4gKi9cclxuY29kZWdlbi52ZXJib3NlID0gZmFsc2U7XHJcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gZmV0Y2g7XHJcblxyXG52YXIgYXNQcm9taXNlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2FzcHJvbWlzZVwiKSxcclxuICAgIGlucXVpcmUgICA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9pbnF1aXJlXCIpO1xyXG5cclxudmFyIGZzID0gaW5xdWlyZShcImZzXCIpO1xyXG5cclxuLyoqXHJcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5mZXRjaH0uXHJcbiAqIEB0eXBlZGVmIEZldGNoQ2FsbGJhY2tcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAcGFyYW0gez9FcnJvcn0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbnRlbnRzXSBGaWxlIGNvbnRlbnRzLCBpZiB0aGVyZSBoYXNuJ3QgYmVlbiBhbiBlcnJvclxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGFzIHVzZWQgYnkge0BsaW5rIHV0aWwuZmV0Y2h9LlxyXG4gKiBAdHlwZWRlZiBGZXRjaE9wdGlvbnNcclxuICogQHR5cGUge09iamVjdH1cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbYmluYXJ5PWZhbHNlXSBXaGV0aGVyIGV4cGVjdGluZyBhIGJpbmFyeSByZXNwb25zZVxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt4aHI9ZmFsc2VdIElmIGB0cnVlYCwgZm9yY2VzIHRoZSB1c2Ugb2YgWE1MSHR0cFJlcXVlc3RcclxuICovXHJcblxyXG4vKipcclxuICogRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgYSBmaWxlLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgRmlsZSBwYXRoIG9yIHVybFxyXG4gKiBAcGFyYW0ge0ZldGNoT3B0aW9uc30gb3B0aW9ucyBGZXRjaCBvcHRpb25zXHJcbiAqIEBwYXJhbSB7RmV0Y2hDYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcbmZ1bmN0aW9uIGZldGNoKGZpbGVuYW1lLCBvcHRpb25zLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XHJcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xyXG4gICAgfSBlbHNlIGlmICghb3B0aW9ucylcclxuICAgICAgICBvcHRpb25zID0ge307XHJcblxyXG4gICAgaWYgKCFjYWxsYmFjaylcclxuICAgICAgICByZXR1cm4gYXNQcm9taXNlKGZldGNoLCB0aGlzLCBmaWxlbmFtZSwgb3B0aW9ucyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXHJcblxyXG4gICAgLy8gaWYgYSBub2RlLWxpa2UgZmlsZXN5c3RlbSBpcyBwcmVzZW50LCB0cnkgaXQgZmlyc3QgYnV0IGZhbGwgYmFjayB0byBYSFIgaWYgbm90aGluZyBpcyBmb3VuZC5cclxuICAgIGlmICghb3B0aW9ucy54aHIgJiYgZnMgJiYgZnMucmVhZEZpbGUpXHJcbiAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlKGZpbGVuYW1lLCBmdW5jdGlvbiBmZXRjaFJlYWRGaWxlQ2FsbGJhY2soZXJyLCBjb250ZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyICYmIHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgPyBmZXRjaC54aHIoZmlsZW5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgOiBlcnJcclxuICAgICAgICAgICAgICAgID8gY2FsbGJhY2soZXJyKVxyXG4gICAgICAgICAgICAgICAgOiBjYWxsYmFjayhudWxsLCBvcHRpb25zLmJpbmFyeSA/IGNvbnRlbnRzIDogY29udGVudHMudG9TdHJpbmcoXCJ1dGY4XCIpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAvLyB1c2UgdGhlIFhIUiB2ZXJzaW9uIG90aGVyd2lzZS5cclxuICAgIHJldHVybiBmZXRjaC54aHIoZmlsZW5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZldGNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZS5cclxuICogQG5hbWUgdXRpbC5mZXRjaFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggRmlsZSBwYXRoIG9yIHVybFxyXG4gKiBAcGFyYW0ge0ZldGNoQ2FsbGJhY2t9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uXHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqIEB2YXJpYXRpb24gMlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGZXRjaGVzIHRoZSBjb250ZW50cyBvZiBhIGZpbGUuXHJcbiAqIEBuYW1lIHV0aWwuZmV0Y2hcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIEZpbGUgcGF0aCBvciB1cmxcclxuICogQHBhcmFtIHtGZXRjaE9wdGlvbnN9IFtvcHRpb25zXSBGZXRjaCBvcHRpb25zXHJcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ3xVaW50OEFycmF5Pn0gUHJvbWlzZVxyXG4gKiBAdmFyaWF0aW9uIDNcclxuICovXHJcblxyXG4vKiovXHJcbmZldGNoLnhociA9IGZ1bmN0aW9uIGZldGNoX3hocihmaWxlbmFtZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgLyogd29ya3MgZXZlcnl3aGVyZSAqLyA9IGZ1bmN0aW9uIGZldGNoT25SZWFkeVN0YXRlQ2hhbmdlKCkge1xyXG5cclxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IDQpXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8vIGxvY2FsIGNvcnMgc2VjdXJpdHkgZXJyb3JzIHJldHVybiBzdGF0dXMgMCAvIGVtcHR5IHN0cmluZywgdG9vLiBhZmFpayB0aGlzIGNhbm5vdCBiZVxyXG4gICAgICAgIC8vIHJlbGlhYmx5IGRpc3Rpbmd1aXNoZWQgZnJvbSBhbiBhY3R1YWxseSBlbXB0eSBmaWxlIGZvciBzZWN1cml0eSByZWFzb25zLiBmZWVsIGZyZWVcclxuICAgICAgICAvLyB0byBzZW5kIGEgcHVsbCByZXF1ZXN0IGlmIHlvdSBhcmUgYXdhcmUgb2YgYSBzb2x1dGlvbi5cclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyAhPT0gMCAmJiB4aHIuc3RhdHVzICE9PSAyMDApXHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvcihcInN0YXR1cyBcIiArIHhoci5zdGF0dXMpKTtcclxuXHJcbiAgICAgICAgLy8gaWYgYmluYXJ5IGRhdGEgaXMgZXhwZWN0ZWQsIG1ha2Ugc3VyZSB0aGF0IHNvbWUgc29ydCBvZiBhcnJheSBpcyByZXR1cm5lZCwgZXZlbiBpZlxyXG4gICAgICAgIC8vIEFycmF5QnVmZmVycyBhcmUgbm90IHN1cHBvcnRlZC4gdGhlIGJpbmFyeSBzdHJpbmcgZmFsbGJhY2ssIGhvd2V2ZXIsIGlzIHVuc2FmZS5cclxuICAgICAgICBpZiAob3B0aW9ucy5iaW5hcnkpIHtcclxuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHhoci5yZXNwb25zZTtcclxuICAgICAgICAgICAgaWYgKCFidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4aHIucmVzcG9uc2VUZXh0Lmxlbmd0aDsgKytpKVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHhoci5yZXNwb25zZVRleHQuY2hhckNvZGVBdChpKSAmIDI1NSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiID8gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSA6IGJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuYmluYXJ5KSB7XHJcbiAgICAgICAgLy8gcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvU2VuZGluZ19hbmRfUmVjZWl2aW5nX0JpbmFyeV9EYXRhI1JlY2VpdmluZ19iaW5hcnlfZGF0YV9pbl9vbGRlcl9icm93c2Vyc1xyXG4gICAgICAgIGlmIChcIm92ZXJyaWRlTWltZVR5cGVcIiBpbiB4aHIpXHJcbiAgICAgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKFwidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZFwiKTtcclxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xyXG4gICAgfVxyXG5cclxuICAgIHhoci5vcGVuKFwiR0VUXCIsIGZpbGVuYW1lKTtcclxuICAgIHhoci5zZW5kKCk7XHJcbn07XHJcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuICogQSBtaW5pbWFsIHBhdGggbW9kdWxlIHRvIHJlc29sdmUgVW5peCwgV2luZG93cyBhbmQgVVJMIHBhdGhzIGFsaWtlLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgcGF0aCA9IGV4cG9ydHM7XHJcblxyXG52YXIgaXNBYnNvbHV0ZSA9XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHBhdGggaXMgYWJzb2x1dGUuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gdGVzdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHBhdGggaXMgYWJzb2x1dGVcclxuICovXHJcbnBhdGguaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aCkge1xyXG4gICAgcmV0dXJuIC9eKD86XFwvfFxcdys6KS8udGVzdChwYXRoKTtcclxufTtcclxuXHJcbnZhciBub3JtYWxpemUgPVxyXG4vKipcclxuICogTm9ybWFsaXplcyB0aGUgc3BlY2lmaWVkIHBhdGguXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE5vcm1hbGl6ZWQgcGF0aFxyXG4gKi9cclxucGF0aC5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUocGF0aCkge1xyXG4gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcclxuICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcL3syLH0vZywgXCIvXCIpO1xyXG4gICAgdmFyIHBhcnRzICAgID0gcGF0aC5zcGxpdChcIi9cIiksXHJcbiAgICAgICAgYWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgpLFxyXG4gICAgICAgIHByZWZpeCAgID0gXCJcIjtcclxuICAgIGlmIChhYnNvbHV0ZSlcclxuICAgICAgICBwcmVmaXggPSBwYXJ0cy5zaGlmdCgpICsgXCIvXCI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDspIHtcclxuICAgICAgICBpZiAocGFydHNbaV0gPT09IFwiLi5cIikge1xyXG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgcGFydHNbaSAtIDFdICE9PSBcIi4uXCIpXHJcbiAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoLS1pLCAyKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoYWJzb2x1dGUpXHJcbiAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICsraTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcnRzW2ldID09PSBcIi5cIilcclxuICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByZWZpeCArIHBhcnRzLmpvaW4oXCIvXCIpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlc29sdmVzIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBwYXRoIGFnYWluc3QgdGhlIHNwZWNpZmllZCBvcmlnaW4gcGF0aC5cclxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblBhdGggUGF0aCB0byB0aGUgb3JpZ2luIGZpbGVcclxuICogQHBhcmFtIHtzdHJpbmd9IGluY2x1ZGVQYXRoIEluY2x1ZGUgcGF0aCByZWxhdGl2ZSB0byBvcmlnaW4gcGF0aFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbHJlYWR5Tm9ybWFsaXplZD1mYWxzZV0gYHRydWVgIGlmIGJvdGggcGF0aHMgYXJlIGFscmVhZHkga25vd24gdG8gYmUgbm9ybWFsaXplZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQYXRoIHRvIHRoZSBpbmNsdWRlIGZpbGVcclxuICovXHJcbnBhdGgucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUob3JpZ2luUGF0aCwgaW5jbHVkZVBhdGgsIGFscmVhZHlOb3JtYWxpemVkKSB7XHJcbiAgICBpZiAoIWFscmVhZHlOb3JtYWxpemVkKVxyXG4gICAgICAgIGluY2x1ZGVQYXRoID0gbm9ybWFsaXplKGluY2x1ZGVQYXRoKTtcclxuICAgIGlmIChpc0Fic29sdXRlKGluY2x1ZGVQYXRoKSlcclxuICAgICAgICByZXR1cm4gaW5jbHVkZVBhdGg7XHJcbiAgICBpZiAoIWFscmVhZHlOb3JtYWxpemVkKVxyXG4gICAgICAgIG9yaWdpblBhdGggPSBub3JtYWxpemUob3JpZ2luUGF0aCk7XHJcbiAgICByZXR1cm4gKG9yaWdpblBhdGggPSBvcmlnaW5QYXRoLnJlcGxhY2UoLyg/OlxcL3xeKVteL10rJC8sIFwiXCIpKS5sZW5ndGggPyBub3JtYWxpemUob3JpZ2luUGF0aCArIFwiL1wiICsgaW5jbHVkZVBhdGgpIDogaW5jbHVkZVBhdGg7XHJcbn07XHJcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IE5hbWVzcGFjZTtcblxuLy8gZXh0ZW5kcyBSZWZsZWN0aW9uT2JqZWN0XG52YXIgUmVmbGVjdGlvbk9iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcbigoTmFtZXNwYWNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IE5hbWVzcGFjZSkuY2xhc3NOYW1lID0gXCJOYW1lc3BhY2VcIjtcblxudmFyIEZpZWxkICAgID0gcmVxdWlyZShcIi4vZmllbGRcIiksXG4gICAgdXRpbCAgICAgPSByZXF1aXJlKFwiLi91dGlsXCIpLFxuICAgIE9uZU9mICAgID0gcmVxdWlyZShcIi4vb25lb2ZcIik7XG5cbnZhciBUeXBlLCAgICAvLyBjeWNsaWNcbiAgICBTZXJ2aWNlLFxuICAgIEVudW07XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBuYW1lc3BhY2UgaW5zdGFuY2UuXG4gKiBAbmFtZSBOYW1lc3BhY2VcbiAqIEBjbGFzc2Rlc2MgUmVmbGVjdGVkIG5hbWVzcGFjZS5cbiAqIEBleHRlbmRzIE5hbWVzcGFjZUJhc2VcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZXNwYWNlIG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBEZWNsYXJlZCBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmFtZXNwYWNlIGZyb20gSlNPTi5cbiAqIEBtZW1iZXJvZiBOYW1lc3BhY2VcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZXNwYWNlIG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IGpzb24gSlNPTiBvYmplY3RcbiAqIEByZXR1cm5zIHtOYW1lc3BhY2V9IENyZWF0ZWQgbmFtZXNwYWNlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGFyZ3VtZW50cyBhcmUgaW52YWxpZFxuICovXG5OYW1lc3BhY2UuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihuYW1lLCBqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBOYW1lc3BhY2UobmFtZSwganNvbi5vcHRpb25zKS5hZGRKU09OKGpzb24ubmVzdGVkKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgcmVmbGVjdGlvbiBvYmplY3RzIHRvIEpTT04uXG4gKiBAbWVtYmVyb2YgTmFtZXNwYWNlXG4gKiBAcGFyYW0ge1JlZmxlY3Rpb25PYmplY3RbXX0gYXJyYXkgT2JqZWN0IGFycmF5XG4gKiBAcGFyYW0ge0lUb0pTT05PcHRpb25zfSBbdG9KU09OT3B0aW9uc10gSlNPTiBjb252ZXJzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPnx1bmRlZmluZWR9IEpTT04gb2JqZWN0IG9yIGB1bmRlZmluZWRgIHdoZW4gYXJyYXkgaXMgZW1wdHlcbiAqL1xuZnVuY3Rpb24gYXJyYXlUb0pTT04oYXJyYXksIHRvSlNPTk9wdGlvbnMpIHtcbiAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHZhciBvYmogPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICBvYmpbYXJyYXlbaV0ubmFtZV0gPSBhcnJheVtpXS50b0pTT04odG9KU09OT3B0aW9ucyk7XG4gICAgcmV0dXJuIG9iajtcbn1cblxuTmFtZXNwYWNlLmFycmF5VG9KU09OID0gYXJyYXlUb0pTT047XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCBpZCBpcyByZXNlcnZlZC5cbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcltdfHN0cmluZz58dW5kZWZpbmVkfSByZXNlcnZlZCBBcnJheSBvZiByZXNlcnZlZCByYW5nZXMgYW5kIG5hbWVzXG4gKiBAcGFyYW0ge251bWJlcn0gaWQgSWQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiByZXNlcnZlZCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xuTmFtZXNwYWNlLmlzUmVzZXJ2ZWRJZCA9IGZ1bmN0aW9uIGlzUmVzZXJ2ZWRJZChyZXNlcnZlZCwgaWQpIHtcbiAgICBpZiAocmVzZXJ2ZWQpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzZXJ2ZWQubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc2VydmVkW2ldICE9PSBcInN0cmluZ1wiICYmIHJlc2VydmVkW2ldWzBdIDw9IGlkICYmIHJlc2VydmVkW2ldWzFdID4gaWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIG5hbWUgaXMgcmVzZXJ2ZWQuXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXJbXXxzdHJpbmc+fHVuZGVmaW5lZH0gcmVzZXJ2ZWQgQXJyYXkgb2YgcmVzZXJ2ZWQgcmFuZ2VzIGFuZCBuYW1lc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHJlc2VydmVkLCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5OYW1lc3BhY2UuaXNSZXNlcnZlZE5hbWUgPSBmdW5jdGlvbiBpc1Jlc2VydmVkTmFtZShyZXNlcnZlZCwgbmFtZSkge1xuICAgIGlmIChyZXNlcnZlZClcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNlcnZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmIChyZXNlcnZlZFtpXSA9PT0gbmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIE5vdCBhbiBhY3R1YWwgY29uc3RydWN0b3IuIFVzZSB7QGxpbmsgTmFtZXNwYWNlfSBpbnN0ZWFkLlxuICogQGNsYXNzZGVzYyBCYXNlIGNsYXNzIG9mIGFsbCByZWZsZWN0aW9uIG9iamVjdHMgY29udGFpbmluZyBuZXN0ZWQgb2JqZWN0cy4gVGhpcyBpcyBub3QgYW4gYWN0dWFsIGNsYXNzIGJ1dCBoZXJlIGZvciB0aGUgc2FrZSBvZiBoYXZpbmcgY29uc2lzdGVudCB0eXBlIGRlZmluaXRpb25zLlxuICogQGV4cG9ydHMgTmFtZXNwYWNlQmFzZVxuICogQGV4dGVuZHMgUmVmbGVjdGlvbk9iamVjdFxuICogQGFic3RyYWN0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWVzcGFjZSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBbb3B0aW9uc10gRGVjbGFyZWQgb3B0aW9uc1xuICogQHNlZSB7QGxpbmsgTmFtZXNwYWNlfVxuICovXG5mdW5jdGlvbiBOYW1lc3BhY2UobmFtZSwgb3B0aW9ucykge1xuICAgIFJlZmxlY3Rpb25PYmplY3QuY2FsbCh0aGlzLCBuYW1lLCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIE5lc3RlZCBvYmplY3RzIGJ5IG5hbWUuXG4gICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLFJlZmxlY3Rpb25PYmplY3Q+fHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5lc3RlZCA9IHVuZGVmaW5lZDsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBDYWNoZWQgbmVzdGVkIG9iamVjdHMgYXMgYW4gYXJyYXkuXG4gICAgICogQHR5cGUge1JlZmxlY3Rpb25PYmplY3RbXXxudWxsfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbmVzdGVkQXJyYXkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgbG9va3VwIGNhbGxzIGZvciBhbnkgb2JqZWN0cyBjb250YWlucyBhbnl3aGVyZSB1bmRlciB0aGlzIG5hbWVzcGFjZS5cbiAgICAgKiBUaGlzIGRyYXN0aWNhbGx5IHNwZWVkcyB1cCByZXNvbHZlIGZvciBsYXJnZSBjcm9zcy1saW5rZWQgcHJvdG9zIHdoZXJlIHRoZSBzYW1lXG4gICAgICogdHlwZXMgYXJlIGxvb2tlZCB1cCByZXBlYXRlZGx5LlxuICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxSZWZsZWN0aW9uT2JqZWN0fG51bGw+fVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fbG9va3VwQ2FjaGUgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IG9iamVjdHMgY29udGFpbmVkIGluIHRoaXMgbmFtZXNwYWNlIG5lZWQgZmVhdHVyZSByZXNvbHV0aW9uLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICB0aGlzLl9uZWVkc1JlY3Vyc2l2ZUZlYXR1cmVSZXNvbHV0aW9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IG9iamVjdHMgY29udGFpbmVkIGluIHRoaXMgbmFtZXNwYWNlIG5lZWQgYSByZXNvbHZlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICB0aGlzLl9uZWVkc1JlY3Vyc2l2ZVJlc29sdmUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBjbGVhckNhY2hlKG5hbWVzcGFjZSkge1xuICAgIG5hbWVzcGFjZS5fbmVzdGVkQXJyYXkgPSBudWxsO1xuICAgIG5hbWVzcGFjZS5fbG9va3VwQ2FjaGUgPSB7fTtcblxuICAgIC8vIEFsc28gY2xlYXIgcGFyZW50IGNhY2hlcywgc2luY2UgdGhleSBpbmNsdWRlIG5lc3RlZCBsb29rdXBzLlxuICAgIHZhciBwYXJlbnQgPSBuYW1lc3BhY2U7XG4gICAgd2hpbGUocGFyZW50ID0gcGFyZW50LnBhcmVudCkge1xuICAgICAgICBwYXJlbnQuX2xvb2t1cENhY2hlID0ge307XG4gICAgfVxuICAgIHJldHVybiBuYW1lc3BhY2U7XG59XG5cbi8qKlxuICogTmVzdGVkIG9iamVjdHMgb2YgdGhpcyBuYW1lc3BhY2UgYXMgYW4gYXJyYXkgZm9yIGl0ZXJhdGlvbi5cbiAqIEBuYW1lIE5hbWVzcGFjZUJhc2UjbmVzdGVkQXJyYXlcbiAqIEB0eXBlIHtSZWZsZWN0aW9uT2JqZWN0W119XG4gKiBAcmVhZG9ubHlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hbWVzcGFjZS5wcm90b3R5cGUsIFwibmVzdGVkQXJyYXlcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXN0ZWRBcnJheSB8fCAodGhpcy5fbmVzdGVkQXJyYXkgPSB1dGlsLnRvQXJyYXkodGhpcy5uZXN0ZWQpKTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBOYW1lc3BhY2UgZGVzY3JpcHRvci5cbiAqIEBpbnRlcmZhY2UgSU5hbWVzcGFjZVxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywqPn0gW29wdGlvbnNdIE5hbWVzcGFjZSBvcHRpb25zXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLEFueU5lc3RlZE9iamVjdD59IFtuZXN0ZWRdIE5lc3RlZCBvYmplY3QgZGVzY3JpcHRvcnNcbiAqL1xuXG4vKipcbiAqIEFueSBleHRlbnNpb24gZmllbGQgZGVzY3JpcHRvci5cbiAqIEB0eXBlZGVmIEFueUV4dGVuc2lvbkZpZWxkXG4gKiBAdHlwZSB7SUV4dGVuc2lvbkZpZWxkfElFeHRlbnNpb25NYXBGaWVsZH1cbiAqL1xuXG4vKipcbiAqIEFueSBuZXN0ZWQgb2JqZWN0IGRlc2NyaXB0b3IuXG4gKiBAdHlwZWRlZiBBbnlOZXN0ZWRPYmplY3RcbiAqIEB0eXBlIHtJRW51bXxJVHlwZXxJU2VydmljZXxBbnlFeHRlbnNpb25GaWVsZHxJTmFtZXNwYWNlfElPbmVPZn1cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbmFtZXNwYWNlIHRvIGEgbmFtZXNwYWNlIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge0lUb0pTT05PcHRpb25zfSBbdG9KU09OT3B0aW9uc10gSlNPTiBjb252ZXJzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtJTmFtZXNwYWNlfSBOYW1lc3BhY2UgZGVzY3JpcHRvclxuICovXG5OYW1lc3BhY2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTih0b0pTT05PcHRpb25zKSB7XG4gICAgcmV0dXJuIHV0aWwudG9PYmplY3QoW1xuICAgICAgICBcIm9wdGlvbnNcIiAsIHRoaXMub3B0aW9ucyxcbiAgICAgICAgXCJuZXN0ZWRcIiAgLCBhcnJheVRvSlNPTih0aGlzLm5lc3RlZEFycmF5LCB0b0pTT05PcHRpb25zKVxuICAgIF0pO1xufTtcblxuLyoqXG4gKiBBZGRzIG5lc3RlZCBvYmplY3RzIHRvIHRoaXMgbmFtZXNwYWNlIGZyb20gbmVzdGVkIG9iamVjdCBkZXNjcmlwdG9ycy5cbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsQW55TmVzdGVkT2JqZWN0Pn0gbmVzdGVkSnNvbiBBbnkgbmVzdGVkIG9iamVjdCBkZXNjcmlwdG9yc1xuICogQHJldHVybnMge05hbWVzcGFjZX0gYHRoaXNgXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUuYWRkSlNPTiA9IGZ1bmN0aW9uIGFkZEpTT04obmVzdGVkSnNvbikge1xuICAgIHZhciBucyA9IHRoaXM7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAobmVzdGVkSnNvbikge1xuICAgICAgICBmb3IgKHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKG5lc3RlZEpzb24pLCBpID0gMCwgbmVzdGVkOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG5lc3RlZCA9IG5lc3RlZEpzb25bbmFtZXNbaV1dO1xuICAgICAgICAgICAgbnMuYWRkKCAvLyBtb3N0IHRvIGxlYXN0IGxpa2VseVxuICAgICAgICAgICAgICAgICggbmVzdGVkLmZpZWxkcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBUeXBlLmZyb21KU09OXG4gICAgICAgICAgICAgICAgOiBuZXN0ZWQudmFsdWVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IEVudW0uZnJvbUpTT05cbiAgICAgICAgICAgICAgICA6IG5lc3RlZC5tZXRob2RzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IFNlcnZpY2UuZnJvbUpTT05cbiAgICAgICAgICAgICAgICA6IG5lc3RlZC5pZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBGaWVsZC5mcm9tSlNPTlxuICAgICAgICAgICAgICAgIDogTmFtZXNwYWNlLmZyb21KU09OICkobmFtZXNbaV0sIG5lc3RlZClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIG5lc3RlZCBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmVzdGVkIG9iamVjdCBuYW1lXG4gKiBAcmV0dXJucyB7UmVmbGVjdGlvbk9iamVjdHxudWxsfSBUaGUgcmVmbGVjdGlvbiBvYmplY3Qgb3IgYG51bGxgIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAqL1xuTmFtZXNwYWNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZCAmJiB0aGlzLm5lc3RlZFtuYW1lXVxuICAgICAgICB8fCBudWxsO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIG5lc3RlZCB7QGxpbmsgRW51bXxlbnVtfSBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gKiBUaGlzIG1ldGhvZHMgZGlmZmVycyBmcm9tIHtAbGluayBOYW1lc3BhY2UjZ2V0fGdldH0gaW4gdGhhdCBpdCByZXR1cm5zIGFuIGVudW0ncyB2YWx1ZXMgZGlyZWN0bHkgYW5kIHRocm93cyBpbnN0ZWFkIG9mIHJldHVybmluZyBgbnVsbGAuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOZXN0ZWQgZW51bSBuYW1lXG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsbnVtYmVyPn0gRW51bSB2YWx1ZXNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBubyBzdWNoIGVudW1cbiAqL1xuTmFtZXNwYWNlLnByb3RvdHlwZS5nZXRFbnVtID0gZnVuY3Rpb24gZ2V0RW51bShuYW1lKSB7XG4gICAgaWYgKHRoaXMubmVzdGVkICYmIHRoaXMubmVzdGVkW25hbWVdIGluc3RhbmNlb2YgRW51bSlcbiAgICAgICAgcmV0dXJuIHRoaXMubmVzdGVkW25hbWVdLnZhbHVlcztcbiAgICB0aHJvdyBFcnJvcihcIm5vIHN1Y2ggZW51bTogXCIgKyBuYW1lKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIG5lc3RlZCBvYmplY3QgdG8gdGhpcyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0ge1JlZmxlY3Rpb25PYmplY3R9IG9iamVjdCBOZXN0ZWQgb2JqZWN0IHRvIGFkZFxuICogQHJldHVybnMge05hbWVzcGFjZX0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGFyZ3VtZW50cyBhcmUgaW52YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFscmVhZHkgYSBuZXN0ZWQgb2JqZWN0IHdpdGggdGhpcyBuYW1lXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKG9iamVjdCkge1xuXG4gICAgaWYgKCEob2JqZWN0IGluc3RhbmNlb2YgRmllbGQgJiYgb2JqZWN0LmV4dGVuZCAhPT0gdW5kZWZpbmVkIHx8IG9iamVjdCBpbnN0YW5jZW9mIFR5cGUgIHx8IG9iamVjdCBpbnN0YW5jZW9mIE9uZU9mIHx8IG9iamVjdCBpbnN0YW5jZW9mIEVudW0gfHwgb2JqZWN0IGluc3RhbmNlb2YgU2VydmljZSB8fCBvYmplY3QgaW5zdGFuY2VvZiBOYW1lc3BhY2UpKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJvYmplY3QgbXVzdCBiZSBhIHZhbGlkIG5lc3RlZCBvYmplY3RcIik7XG5cbiAgICBpZiAoIXRoaXMubmVzdGVkKVxuICAgICAgICB0aGlzLm5lc3RlZCA9IHt9O1xuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcHJldiA9IHRoaXMuZ2V0KG9iamVjdC5uYW1lKTtcbiAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIGlmIChwcmV2IGluc3RhbmNlb2YgTmFtZXNwYWNlICYmIG9iamVjdCBpbnN0YW5jZW9mIE5hbWVzcGFjZSAmJiAhKHByZXYgaW5zdGFuY2VvZiBUeXBlIHx8IHByZXYgaW5zdGFuY2VvZiBTZXJ2aWNlKSkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgcGxhaW4gbmFtZXNwYWNlIGJ1dCBrZWVwIGV4aXN0aW5nIG5lc3RlZCBlbGVtZW50cyBhbmQgb3B0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBwcmV2Lm5lc3RlZEFycmF5O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVzdGVkLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWRkKG5lc3RlZFtpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUocHJldik7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5lc3RlZClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWQgPSB7fTtcbiAgICAgICAgICAgICAgICBvYmplY3Quc2V0T3B0aW9ucyhwcmV2Lm9wdGlvbnMsIHRydWUpO1xuXG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImR1cGxpY2F0ZSBuYW1lICdcIiArIG9iamVjdC5uYW1lICsgXCInIGluIFwiICsgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZXN0ZWRbb2JqZWN0Lm5hbWVdID0gb2JqZWN0O1xuXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFR5cGUgfHwgdGhpcyBpbnN0YW5jZW9mIFNlcnZpY2UgfHwgdGhpcyBpbnN0YW5jZW9mIEVudW0gfHwgdGhpcyBpbnN0YW5jZW9mIEZpZWxkKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcGFja2FnZSBvciBhIHJvb3QgbmFtZXNwYWNlLlxuICAgICAgICBpZiAoIW9iamVjdC5fZWRpdGlvbikge1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgc29tZSBlZGl0aW9uIGlzIHNldCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHNwZWNpZmllZC5cbiAgICAgICAgICAgIG9iamVjdC5fZWRpdGlvbiA9IG9iamVjdC5fZGVmYXVsdEVkaXRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9uZWVkc1JlY3Vyc2l2ZUZlYXR1cmVSZXNvbHV0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9uZWVkc1JlY3Vyc2l2ZVJlc29sdmUgPSB0cnVlO1xuXG4gICAgLy8gQWxzbyBjbGVhciBwYXJlbnQgY2FjaGVzLCBzaW5jZSB0aGV5IG5lZWQgdG8gcmVjdXJzZSBkb3duLlxuICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuICAgIHdoaWxlKHBhcmVudCA9IHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgcGFyZW50Ll9uZWVkc1JlY3Vyc2l2ZUZlYXR1cmVSZXNvbHV0aW9uID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50Ll9uZWVkc1JlY3Vyc2l2ZVJlc29sdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIG9iamVjdC5vbkFkZCh0aGlzKTtcbiAgICByZXR1cm4gY2xlYXJDYWNoZSh0aGlzKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIG5lc3RlZCBvYmplY3QgZnJvbSB0aGlzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSB7UmVmbGVjdGlvbk9iamVjdH0gb2JqZWN0IE5lc3RlZCBvYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJucyB7TmFtZXNwYWNlfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYXJndW1lbnRzIGFyZSBpbnZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYG9iamVjdGAgaXMgbm90IGEgbWVtYmVyIG9mIHRoaXMgbmFtZXNwYWNlXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG9iamVjdCkge1xuXG4gICAgaWYgKCEob2JqZWN0IGluc3RhbmNlb2YgUmVmbGVjdGlvbk9iamVjdCkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIm9iamVjdCBtdXN0IGJlIGEgUmVmbGVjdGlvbk9iamVjdFwiKTtcbiAgICBpZiAob2JqZWN0LnBhcmVudCAhPT0gdGhpcylcbiAgICAgICAgdGhyb3cgRXJyb3Iob2JqZWN0ICsgXCIgaXMgbm90IGEgbWVtYmVyIG9mIFwiICsgdGhpcyk7XG5cbiAgICBkZWxldGUgdGhpcy5uZXN0ZWRbb2JqZWN0Lm5hbWVdO1xuICAgIGlmICghT2JqZWN0LmtleXModGhpcy5uZXN0ZWQpLmxlbmd0aClcbiAgICAgICAgdGhpcy5uZXN0ZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBvYmplY3Qub25SZW1vdmUodGhpcyk7XG4gICAgcmV0dXJuIGNsZWFyQ2FjaGUodGhpcyk7XG59O1xuXG4vKipcbiAqIERlZmluZXMgYWRkaXRpYWwgbmFtZXNwYWNlcyB3aXRoaW4gdGhpcyBvbmUgaWYgbm90IHlldCBleGlzdGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwYXRoIFBhdGggdG8gY3JlYXRlXG4gKiBAcGFyYW0geyp9IFtqc29uXSBOZXN0ZWQgdHlwZXMgdG8gY3JlYXRlIGZyb20gSlNPTlxuICogQHJldHVybnMge05hbWVzcGFjZX0gUG9pbnRlciB0byB0aGUgbGFzdCBuYW1lc3BhY2UgY3JlYXRlZCBvciBgdGhpc2AgaWYgcGF0aCBpcyBlbXB0eVxuICovXG5OYW1lc3BhY2UucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShwYXRoLCBqc29uKSB7XG5cbiAgICBpZiAodXRpbC5pc1N0cmluZyhwYXRoKSlcbiAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHBhdGgpKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJpbGxlZ2FsIHBhdGhcIik7XG4gICAgaWYgKHBhdGggJiYgcGF0aC5sZW5ndGggJiYgcGF0aFswXSA9PT0gXCJcIilcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJwYXRoIG11c3QgYmUgcmVsYXRpdmVcIik7XG5cbiAgICB2YXIgcHRyID0gdGhpcztcbiAgICB3aGlsZSAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gcGF0aC5zaGlmdCgpO1xuICAgICAgICBpZiAocHRyLm5lc3RlZCAmJiBwdHIubmVzdGVkW3BhcnRdKSB7XG4gICAgICAgICAgICBwdHIgPSBwdHIubmVzdGVkW3BhcnRdO1xuICAgICAgICAgICAgaWYgKCEocHRyIGluc3RhbmNlb2YgTmFtZXNwYWNlKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcInBhdGggY29uZmxpY3RzIHdpdGggbm9uLW5hbWVzcGFjZSBvYmplY3RzXCIpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHB0ci5hZGQocHRyID0gbmV3IE5hbWVzcGFjZShwYXJ0KSk7XG4gICAgfVxuICAgIGlmIChqc29uKVxuICAgICAgICBwdHIuYWRkSlNPTihqc29uKTtcbiAgICByZXR1cm4gcHRyO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGlzIG5hbWVzcGFjZSdzIGFuZCBhbGwgaXRzIG5lc3RlZCBvYmplY3RzJyB0eXBlIHJlZmVyZW5jZXMuIFVzZWZ1bCB0byB2YWxpZGF0ZSBhIHJlZmxlY3Rpb24gdHJlZSwgYnV0IGNvbWVzIGF0IGEgY29zdC5cbiAqIEByZXR1cm5zIHtOYW1lc3BhY2V9IGB0aGlzYFxuICovXG5OYW1lc3BhY2UucHJvdG90eXBlLnJlc29sdmVBbGwgPSBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgIGlmICghdGhpcy5fbmVlZHNSZWN1cnNpdmVSZXNvbHZlKSByZXR1cm4gdGhpcztcblxuICAgIHRoaXMuX3Jlc29sdmVGZWF0dXJlc1JlY3Vyc2l2ZSh0aGlzLl9lZGl0aW9uKTtcblxuICAgIHZhciBuZXN0ZWQgPSB0aGlzLm5lc3RlZEFycmF5LCBpID0gMDtcbiAgICB0aGlzLnJlc29sdmUoKTtcbiAgICB3aGlsZSAoaSA8IG5lc3RlZC5sZW5ndGgpXG4gICAgICAgIGlmIChuZXN0ZWRbaV0gaW5zdGFuY2VvZiBOYW1lc3BhY2UpXG4gICAgICAgICAgICBuZXN0ZWRbaSsrXS5yZXNvbHZlQWxsKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5lc3RlZFtpKytdLnJlc29sdmUoKTtcbiAgICB0aGlzLl9uZWVkc1JlY3Vyc2l2ZVJlc29sdmUgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUuX3Jlc29sdmVGZWF0dXJlc1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIF9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUoZWRpdGlvbikge1xuICAgIGlmICghdGhpcy5fbmVlZHNSZWN1cnNpdmVGZWF0dXJlUmVzb2x1dGlvbikgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5fbmVlZHNSZWN1cnNpdmVGZWF0dXJlUmVzb2x1dGlvbiA9IGZhbHNlO1xuXG4gICAgZWRpdGlvbiA9IHRoaXMuX2VkaXRpb24gfHwgZWRpdGlvbjtcblxuICAgIFJlZmxlY3Rpb25PYmplY3QucHJvdG90eXBlLl9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUuY2FsbCh0aGlzLCBlZGl0aW9uKTtcbiAgICB0aGlzLm5lc3RlZEFycmF5LmZvckVhY2gobmVzdGVkID0+IHtcbiAgICAgICAgbmVzdGVkLl9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUoZWRpdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGxvb2tzIHVwIHRoZSByZWZsZWN0aW9uIG9iamVjdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHBhdGggaW4gdGhlIHNjb3BlIG9mIHRoaXMgbmFtZXNwYWNlLlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHBhdGggUGF0aCB0byBsb29rIHVwXG4gKiBAcGFyYW0geyp8QXJyYXkuPCo+fSBmaWx0ZXJUeXBlcyBGaWx0ZXIgdHlwZXMsIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RydWN0b3JzIG9mIGBwcm90b2J1Zi5UeXBlYCwgYHByb3RvYnVmLkVudW1gLCBgcHJvdG9idWYuU2VydmljZWAgZXRjLlxuICogQHBhcmFtIHtib29sZWFufSBbcGFyZW50QWxyZWFkeUNoZWNrZWQ9ZmFsc2VdIElmIGtub3duLCB3aGV0aGVyIHRoZSBwYXJlbnQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkXG4gKiBAcmV0dXJucyB7UmVmbGVjdGlvbk9iamVjdHxudWxsfSBMb29rZWQgdXAgb2JqZWN0IG9yIGBudWxsYCBpZiBub25lIGNvdWxkIGJlIGZvdW5kXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24gbG9va3VwKHBhdGgsIGZpbHRlclR5cGVzLCBwYXJlbnRBbHJlYWR5Q2hlY2tlZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJUeXBlcyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcGFyZW50QWxyZWFkeUNoZWNrZWQgPSBmaWx0ZXJUeXBlcztcbiAgICAgICAgZmlsdGVyVHlwZXMgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXJUeXBlcyAmJiAhQXJyYXkuaXNBcnJheShmaWx0ZXJUeXBlcykpXG4gICAgICAgIGZpbHRlclR5cGVzID0gWyBmaWx0ZXJUeXBlcyBdO1xuXG4gICAgaWYgKHV0aWwuaXNTdHJpbmcocGF0aCkgJiYgcGF0aC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHBhdGggPT09IFwiLlwiKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIH0gZWxzZSBpZiAoIXBhdGgubGVuZ3RoKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIHZhciBmbGF0UGF0aCA9IHBhdGguam9pbihcIi5cIik7XG5cbiAgICAvLyBTdGFydCBhdCByb290IGlmIHBhdGggaXMgYWJzb2x1dGVcbiAgICBpZiAocGF0aFswXSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5sb29rdXAocGF0aC5zbGljZSgxKSwgZmlsdGVyVHlwZXMpO1xuXG4gICAgLy8gRWFybHkgYmFpbG91dCBmb3Igb2JqZWN0cyB3aXRoIG1hdGNoaW5nIGFic29sdXRlIHBhdGhzXG4gICAgdmFyIGZvdW5kID0gdGhpcy5yb290Ll9mdWxseVF1YWxpZmllZE9iamVjdHMgJiYgdGhpcy5yb290Ll9mdWxseVF1YWxpZmllZE9iamVjdHNbXCIuXCIgKyBmbGF0UGF0aF07XG4gICAgaWYgKGZvdW5kICYmICghZmlsdGVyVHlwZXMgfHwgZmlsdGVyVHlwZXMuaW5kZXhPZihmb3VuZC5jb25zdHJ1Y3RvcikgPiAtMSkpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cblxuICAgIC8vIERvIGEgcmVndWxhciBsb29rdXAgYXQgdGhpcyBuYW1lc3BhY2UgYW5kIGJlbG93XG4gICAgZm91bmQgPSB0aGlzLl9sb29rdXBJbXBsKHBhdGgsIGZsYXRQYXRoKTtcbiAgICBpZiAoZm91bmQgJiYgKCFmaWx0ZXJUeXBlcyB8fCBmaWx0ZXJUeXBlcy5pbmRleE9mKGZvdW5kLmNvbnN0cnVjdG9yKSA+IC0xKSkge1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudEFscmVhZHlDaGVja2VkKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIC8vIElmIHRoZXJlIGhhc24ndCBiZWVuIGEgbWF0Y2gsIHdhbGsgdXAgdGhlIHRyZWUgYW5kIGxvb2sgbW9yZSBicm9hZGx5XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzO1xuICAgIHdoaWxlIChjdXJyZW50LnBhcmVudCkge1xuICAgICAgICBmb3VuZCA9IGN1cnJlbnQucGFyZW50Ll9sb29rdXBJbXBsKHBhdGgsIGZsYXRQYXRoKTtcbiAgICAgICAgaWYgKGZvdW5kICYmICghZmlsdGVyVHlwZXMgfHwgZmlsdGVyVHlwZXMuaW5kZXhPZihmb3VuZC5jb25zdHJ1Y3RvcikgPiAtMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGxvb2t1cCB0aGF0IGhhbmRsZXMgc2VhcmNoaW5nIGp1c3QgYXQgdGhpcyBuYW1lc3BhY2UgYW5kIGJlbG93IGFsb25nIHdpdGggY2FjaGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggUGF0aCB0byBsb29rIHVwXG4gKiBAcGFyYW0ge3N0cmluZ30gZmxhdFBhdGggRmxhdHRlbmVkIHZlcnNpb24gb2YgdGhlIHBhdGggdG8gdXNlIGFzIGEgY2FjaGUga2V5XG4gKiBAcmV0dXJucyB7UmVmbGVjdGlvbk9iamVjdHxudWxsfSBMb29rZWQgdXAgb2JqZWN0IG9yIGBudWxsYCBpZiBub25lIGNvdWxkIGJlIGZvdW5kXG4gKiBAcHJpdmF0ZVxuICovXG5OYW1lc3BhY2UucHJvdG90eXBlLl9sb29rdXBJbXBsID0gZnVuY3Rpb24gbG9va3VwKHBhdGgsIGZsYXRQYXRoKSB7XG4gICAgaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2xvb2t1cENhY2hlLCBmbGF0UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvb2t1cENhY2hlW2ZsYXRQYXRoXTtcbiAgICB9XG5cbiAgICAvLyBUZXN0IGlmIHRoZSBmaXJzdCBwYXJ0IG1hdGNoZXMgYW55IG5lc3RlZCBvYmplY3QsIGFuZCBpZiBzbywgdHJhdmVyc2UgaWYgcGF0aCBjb250YWlucyBtb3JlXG4gICAgdmFyIGZvdW5kID0gdGhpcy5nZXQocGF0aFswXSk7XG4gICAgdmFyIGV4YWN0ID0gbnVsbDtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBleGFjdCA9IGZvdW5kO1xuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kIGluc3RhbmNlb2YgTmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zbGljZSgxKTtcbiAgICAgICAgICAgIGV4YWN0ID0gZm91bmQuX2xvb2t1cEltcGwocGF0aCwgcGF0aC5qb2luKFwiLlwiKSk7XG4gICAgICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSB0cnkgZWFjaCBuZXN0ZWQgbmFtZXNwYWNlXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5lc3RlZEFycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgaWYgKHRoaXMuX25lc3RlZEFycmF5W2ldIGluc3RhbmNlb2YgTmFtZXNwYWNlICYmIChmb3VuZCA9IHRoaXMuX25lc3RlZEFycmF5W2ldLl9sb29rdXBJbXBsKHBhdGgsIGZsYXRQYXRoKSkpXG4gICAgICAgICAgICAgICAgZXhhY3QgPSBmb3VuZDtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpcyBldmVuIHdoZW4gbnVsbCwgc28gdGhhdCB3aGVuIHdlIHdhbGsgdXAgdGhlIHRyZWUgd2UgY2FuIHF1aWNrbHkgYmFpbCBvbiByZXBlYXRlZCBjaGVja3MgYmFjayBkb3duLlxuICAgIHRoaXMuX2xvb2t1cENhY2hlW2ZsYXRQYXRoXSA9IGV4YWN0O1xuICAgIHJldHVybiBleGFjdDtcbn07XG5cbi8qKlxuICogTG9va3MgdXAgdGhlIHJlZmxlY3Rpb24gb2JqZWN0IGF0IHRoZSBzcGVjaWZpZWQgcGF0aCwgcmVsYXRpdmUgdG8gdGhpcyBuYW1lc3BhY2UuXG4gKiBAbmFtZSBOYW1lc3BhY2VCYXNlI2xvb2t1cFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcGF0aCBQYXRoIHRvIGxvb2sgdXBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BhcmVudEFscmVhZHlDaGVja2VkPWZhbHNlXSBXaGV0aGVyIHRoZSBwYXJlbnQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkXG4gKiBAcmV0dXJucyB7UmVmbGVjdGlvbk9iamVjdHxudWxsfSBMb29rZWQgdXAgb2JqZWN0IG9yIGBudWxsYCBpZiBub25lIGNvdWxkIGJlIGZvdW5kXG4gKiBAdmFyaWF0aW9uIDJcbiAqL1xuLy8gbG9va3VwKHBhdGg6IHN0cmluZywgW3BhcmVudEFscmVhZHlDaGVja2VkOiBib29sZWFuXSlcblxuLyoqXG4gKiBMb29rcyB1cCB0aGUge0BsaW5rIFR5cGV8dHlwZX0gYXQgdGhlIHNwZWNpZmllZCBwYXRoLCByZWxhdGl2ZSB0byB0aGlzIG5hbWVzcGFjZS5cbiAqIEJlc2lkZXMgaXRzIHNpZ25hdHVyZSwgdGhpcyBtZXRob2RzIGRpZmZlcnMgZnJvbSB7QGxpbmsgTmFtZXNwYWNlI2xvb2t1cHxsb29rdXB9IGluIHRoYXQgaXQgdGhyb3dzIGluc3RlYWQgb2YgcmV0dXJuaW5nIGBudWxsYC5cbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwYXRoIFBhdGggdG8gbG9vayB1cFxuICogQHJldHVybnMge1R5cGV9IExvb2tlZCB1cCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYHBhdGhgIGRvZXMgbm90IHBvaW50IHRvIGEgdHlwZVxuICovXG5OYW1lc3BhY2UucHJvdG90eXBlLmxvb2t1cFR5cGUgPSBmdW5jdGlvbiBsb29rdXBUeXBlKHBhdGgpIHtcbiAgICB2YXIgZm91bmQgPSB0aGlzLmxvb2t1cChwYXRoLCBbIFR5cGUgXSk7XG4gICAgaWYgKCFmb3VuZClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJubyBzdWNoIHR5cGU6IFwiICsgcGF0aCk7XG4gICAgcmV0dXJuIGZvdW5kO1xufTtcblxuLyoqXG4gKiBMb29rcyB1cCB0aGUgdmFsdWVzIG9mIHRoZSB7QGxpbmsgRW51bXxlbnVtfSBhdCB0aGUgc3BlY2lmaWVkIHBhdGgsIHJlbGF0aXZlIHRvIHRoaXMgbmFtZXNwYWNlLlxuICogQmVzaWRlcyBpdHMgc2lnbmF0dXJlLCB0aGlzIG1ldGhvZHMgZGlmZmVycyBmcm9tIHtAbGluayBOYW1lc3BhY2UjbG9va3VwfGxvb2t1cH0gaW4gdGhhdCBpdCB0aHJvd3MgaW5zdGVhZCBvZiByZXR1cm5pbmcgYG51bGxgLlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHBhdGggUGF0aCB0byBsb29rIHVwXG4gKiBAcmV0dXJucyB7RW51bX0gTG9va2VkIHVwIGVudW1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgcGF0aGAgZG9lcyBub3QgcG9pbnQgdG8gYW4gZW51bVxuICovXG5OYW1lc3BhY2UucHJvdG90eXBlLmxvb2t1cEVudW0gPSBmdW5jdGlvbiBsb29rdXBFbnVtKHBhdGgpIHtcbiAgICB2YXIgZm91bmQgPSB0aGlzLmxvb2t1cChwYXRoLCBbIEVudW0gXSk7XG4gICAgaWYgKCFmb3VuZClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJubyBzdWNoIEVudW0gJ1wiICsgcGF0aCArIFwiJyBpbiBcIiArIHRoaXMpO1xuICAgIHJldHVybiBmb3VuZDtcbn07XG5cbi8qKlxuICogTG9va3MgdXAgdGhlIHtAbGluayBUeXBlfHR5cGV9IG9yIHtAbGluayBFbnVtfGVudW19IGF0IHRoZSBzcGVjaWZpZWQgcGF0aCwgcmVsYXRpdmUgdG8gdGhpcyBuYW1lc3BhY2UuXG4gKiBCZXNpZGVzIGl0cyBzaWduYXR1cmUsIHRoaXMgbWV0aG9kcyBkaWZmZXJzIGZyb20ge0BsaW5rIE5hbWVzcGFjZSNsb29rdXB8bG9va3VwfSBpbiB0aGF0IGl0IHRocm93cyBpbnN0ZWFkIG9mIHJldHVybmluZyBgbnVsbGAuXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcGF0aCBQYXRoIHRvIGxvb2sgdXBcbiAqIEByZXR1cm5zIHtUeXBlfSBMb29rZWQgdXAgdHlwZSBvciBlbnVtXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYHBhdGhgIGRvZXMgbm90IHBvaW50IHRvIGEgdHlwZSBvciBlbnVtXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUubG9va3VwVHlwZU9yRW51bSA9IGZ1bmN0aW9uIGxvb2t1cFR5cGVPckVudW0ocGF0aCkge1xuICAgIHZhciBmb3VuZCA9IHRoaXMubG9va3VwKHBhdGgsIFsgVHlwZSwgRW51bSBdKTtcbiAgICBpZiAoIWZvdW5kKVxuICAgICAgICB0aHJvdyBFcnJvcihcIm5vIHN1Y2ggVHlwZSBvciBFbnVtICdcIiArIHBhdGggKyBcIicgaW4gXCIgKyB0aGlzKTtcbiAgICByZXR1cm4gZm91bmQ7XG59O1xuXG4vKipcbiAqIExvb2tzIHVwIHRoZSB7QGxpbmsgU2VydmljZXxzZXJ2aWNlfSBhdCB0aGUgc3BlY2lmaWVkIHBhdGgsIHJlbGF0aXZlIHRvIHRoaXMgbmFtZXNwYWNlLlxuICogQmVzaWRlcyBpdHMgc2lnbmF0dXJlLCB0aGlzIG1ldGhvZHMgZGlmZmVycyBmcm9tIHtAbGluayBOYW1lc3BhY2UjbG9va3VwfGxvb2t1cH0gaW4gdGhhdCBpdCB0aHJvd3MgaW5zdGVhZCBvZiByZXR1cm5pbmcgYG51bGxgLlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHBhdGggUGF0aCB0byBsb29rIHVwXG4gKiBAcmV0dXJucyB7U2VydmljZX0gTG9va2VkIHVwIHNlcnZpY2VcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgcGF0aGAgZG9lcyBub3QgcG9pbnQgdG8gYSBzZXJ2aWNlXG4gKi9cbk5hbWVzcGFjZS5wcm90b3R5cGUubG9va3VwU2VydmljZSA9IGZ1bmN0aW9uIGxvb2t1cFNlcnZpY2UocGF0aCkge1xuICAgIHZhciBmb3VuZCA9IHRoaXMubG9va3VwKHBhdGgsIFsgU2VydmljZSBdKTtcbiAgICBpZiAoIWZvdW5kKVxuICAgICAgICB0aHJvdyBFcnJvcihcIm5vIHN1Y2ggU2VydmljZSAnXCIgKyBwYXRoICsgXCInIGluIFwiICsgdGhpcyk7XG4gICAgcmV0dXJuIGZvdW5kO1xufTtcblxuLy8gU2V0cyB1cCBjeWNsaWMgZGVwZW5kZW5jaWVzIChjYWxsZWQgaW4gaW5kZXgtbGlnaHQpXG5OYW1lc3BhY2UuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKFR5cGVfLCBTZXJ2aWNlXywgRW51bV8pIHtcbiAgICBUeXBlICAgID0gVHlwZV87XG4gICAgU2VydmljZSA9IFNlcnZpY2VfO1xuICAgIEVudW0gICAgPSBFbnVtXztcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBNYXBGaWVsZDtcblxuLy8gZXh0ZW5kcyBGaWVsZFxudmFyIEZpZWxkID0gcmVxdWlyZShcIi4vZmllbGRcIik7XG4oKE1hcEZpZWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRmllbGQucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBNYXBGaWVsZCkuY2xhc3NOYW1lID0gXCJNYXBGaWVsZFwiO1xuXG52YXIgdHlwZXMgICA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpLFxuICAgIHV0aWwgICAgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgbWFwIGZpZWxkIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBSZWZsZWN0ZWQgbWFwIGZpZWxkLlxuICogQGV4dGVuZHMgRmllbGRCYXNlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFVuaXF1ZSBuYW1lIHdpdGhpbiBpdHMgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge251bWJlcn0gaWQgVW5pcXVlIGlkIHdpdGhpbiBpdHMgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5VHlwZSBLZXkgdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVmFsdWUgdHlwZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW29wdGlvbnNdIERlY2xhcmVkIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29tbWVudF0gQ29tbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWVsZFxuICovXG5mdW5jdGlvbiBNYXBGaWVsZChuYW1lLCBpZCwga2V5VHlwZSwgdHlwZSwgb3B0aW9ucywgY29tbWVudCkge1xuICAgIEZpZWxkLmNhbGwodGhpcywgbmFtZSwgaWQsIHR5cGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBvcHRpb25zLCBjb21tZW50KTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdXRpbC5pc1N0cmluZyhrZXlUeXBlKSlcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwia2V5VHlwZSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXG4gICAgLyoqXG4gICAgICogS2V5IHR5cGUuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmtleVR5cGUgPSBrZXlUeXBlOyAvLyB0b0pTT04sIG1hcmtlclxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZWQga2V5IHR5cGUgaWYgbm90IGEgYmFzaWMgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVmbGVjdGlvbk9iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x2ZWRLZXlUeXBlID0gbnVsbDtcblxuICAgIC8vIE92ZXJyaWRlcyBGaWVsZCNtYXBcbiAgICB0aGlzLm1hcCA9IHRydWU7XG59XG5cbi8qKlxuICogTWFwIGZpZWxkIGRlc2NyaXB0b3IuXG4gKiBAaW50ZXJmYWNlIElNYXBGaWVsZFxuICogQGV4dGVuZHMge0lGaWVsZH1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlUeXBlIEtleSB0eXBlXG4gKi9cblxuLyoqXG4gKiBFeHRlbnNpb24gbWFwIGZpZWxkIGRlc2NyaXB0b3IuXG4gKiBAaW50ZXJmYWNlIElFeHRlbnNpb25NYXBGaWVsZFxuICogQGV4dGVuZHMgSU1hcEZpZWxkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0ZW5kIEV4dGVuZGVkIHR5cGVcbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBtYXAgZmllbGQgZnJvbSBhIG1hcCBmaWVsZCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmllbGQgbmFtZVxuICogQHBhcmFtIHtJTWFwRmllbGR9IGpzb24gTWFwIGZpZWxkIGRlc2NyaXB0b3JcbiAqIEByZXR1cm5zIHtNYXBGaWVsZH0gQ3JlYXRlZCBtYXAgZmllbGRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYXJndW1lbnRzIGFyZSBpbnZhbGlkXG4gKi9cbk1hcEZpZWxkLmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04obmFtZSwganNvbikge1xuICAgIHJldHVybiBuZXcgTWFwRmllbGQobmFtZSwganNvbi5pZCwganNvbi5rZXlUeXBlLCBqc29uLnR5cGUsIGpzb24ub3B0aW9ucywganNvbi5jb21tZW50KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBtYXAgZmllbGQgdG8gYSBtYXAgZmllbGQgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7SVRvSlNPTk9wdGlvbnN9IFt0b0pTT05PcHRpb25zXSBKU09OIGNvbnZlcnNpb24gb3B0aW9uc1xuICogQHJldHVybnMge0lNYXBGaWVsZH0gTWFwIGZpZWxkIGRlc2NyaXB0b3JcbiAqL1xuTWFwRmllbGQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTih0b0pTT05PcHRpb25zKSB7XG4gICAgdmFyIGtlZXBDb21tZW50cyA9IHRvSlNPTk9wdGlvbnMgPyBCb29sZWFuKHRvSlNPTk9wdGlvbnMua2VlcENvbW1lbnRzKSA6IGZhbHNlO1xuICAgIHJldHVybiB1dGlsLnRvT2JqZWN0KFtcbiAgICAgICAgXCJrZXlUeXBlXCIgLCB0aGlzLmtleVR5cGUsXG4gICAgICAgIFwidHlwZVwiICAgICwgdGhpcy50eXBlLFxuICAgICAgICBcImlkXCIgICAgICAsIHRoaXMuaWQsXG4gICAgICAgIFwiZXh0ZW5kXCIgICwgdGhpcy5leHRlbmQsXG4gICAgICAgIFwib3B0aW9uc1wiICwgdGhpcy5vcHRpb25zLFxuICAgICAgICBcImNvbW1lbnRcIiAsIGtlZXBDb21tZW50cyA/IHRoaXMuY29tbWVudCA6IHVuZGVmaW5lZFxuICAgIF0pO1xufTtcblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuTWFwRmllbGQucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgIGlmICh0aGlzLnJlc29sdmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIC8vIEJlc2lkZXMgYSB2YWx1ZSB0eXBlLCBtYXAgZmllbGRzIGhhdmUgYSBrZXkgdHlwZSB0aGF0IG1heSBiZSBcImFueSBzY2FsYXIgdHlwZSBleGNlcHQgZm9yIGZsb2F0aW5nIHBvaW50IHR5cGVzIGFuZCBieXRlc1wiXG4gICAgaWYgKHR5cGVzLm1hcEtleVt0aGlzLmtleVR5cGVdID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IEVycm9yKFwiaW52YWxpZCBrZXkgdHlwZTogXCIgKyB0aGlzLmtleVR5cGUpO1xuXG4gICAgcmV0dXJuIEZpZWxkLnByb3RvdHlwZS5yZXNvbHZlLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIE1hcCBmaWVsZCBkZWNvcmF0b3IgKFR5cGVTY3JpcHQpLlxuICogQG5hbWUgTWFwRmllbGQuZFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZmllbGRJZCBGaWVsZCBpZFxuICogQHBhcmFtIHtcImludDMyXCJ8XCJ1aW50MzJcInxcInNpbnQzMlwifFwiZml4ZWQzMlwifFwic2ZpeGVkMzJcInxcImludDY0XCJ8XCJ1aW50NjRcInxcInNpbnQ2NFwifFwiZml4ZWQ2NFwifFwic2ZpeGVkNjRcInxcImJvb2xcInxcInN0cmluZ1wifSBmaWVsZEtleVR5cGUgRmllbGQga2V5IHR5cGVcbiAqIEBwYXJhbSB7XCJkb3VibGVcInxcImZsb2F0XCJ8XCJpbnQzMlwifFwidWludDMyXCJ8XCJzaW50MzJcInxcImZpeGVkMzJcInxcInNmaXhlZDMyXCJ8XCJpbnQ2NFwifFwidWludDY0XCJ8XCJzaW50NjRcInxcImZpeGVkNjRcInxcInNmaXhlZDY0XCJ8XCJib29sXCJ8XCJzdHJpbmdcInxcImJ5dGVzXCJ8T2JqZWN0fENvbnN0cnVjdG9yPHt9Pn0gZmllbGRWYWx1ZVR5cGUgRmllbGQgdmFsdWUgdHlwZVxuICogQHJldHVybnMge0ZpZWxkRGVjb3JhdG9yfSBEZWNvcmF0b3IgZnVuY3Rpb25cbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCBMb25nIHwgc3RyaW5nIHwgYm9vbGVhbiB8IFVpbnQ4QXJyYXkgfCBCdWZmZXIgfCBudW1iZXJbXSB8IE1lc3NhZ2U8e30+IH1cbiAqL1xuTWFwRmllbGQuZCA9IGZ1bmN0aW9uIGRlY29yYXRlTWFwRmllbGQoZmllbGRJZCwgZmllbGRLZXlUeXBlLCBmaWVsZFZhbHVlVHlwZSkge1xuXG4gICAgLy8gc3VibWVzc2FnZSB2YWx1ZTogZGVjb3JhdGUgdGhlIHN1Ym1lc3NhZ2UgYW5kIHVzZSBpdHMgbmFtZSBhcyB0aGUgdHlwZVxuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZVR5cGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZmllbGRWYWx1ZVR5cGUgPSB1dGlsLmRlY29yYXRlVHlwZShmaWVsZFZhbHVlVHlwZSkubmFtZTtcblxuICAgIC8vIGVudW0gcmVmZXJlbmNlIHZhbHVlOiBjcmVhdGUgYSByZWZsZWN0ZWQgY29weSBvZiB0aGUgZW51bSBhbmQga2VlcCByZXVzZWluZyBpdFxuICAgIGVsc2UgaWYgKGZpZWxkVmFsdWVUeXBlICYmIHR5cGVvZiBmaWVsZFZhbHVlVHlwZSA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgZmllbGRWYWx1ZVR5cGUgPSB1dGlsLmRlY29yYXRlRW51bShmaWVsZFZhbHVlVHlwZSkubmFtZTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBtYXBGaWVsZERlY29yYXRvcihwcm90b3R5cGUsIGZpZWxkTmFtZSkge1xuICAgICAgICB1dGlsLmRlY29yYXRlVHlwZShwcm90b3R5cGUuY29uc3RydWN0b3IpXG4gICAgICAgICAgICAuYWRkKG5ldyBNYXBGaWVsZChmaWVsZE5hbWUsIGZpZWxkSWQsIGZpZWxkS2V5VHlwZSwgZmllbGRWYWx1ZVR5cGUpKTtcbiAgICB9O1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IE1ldGhvZDtcblxuLy8gZXh0ZW5kcyBSZWZsZWN0aW9uT2JqZWN0XG52YXIgUmVmbGVjdGlvbk9iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcbigoTWV0aG9kLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IE1ldGhvZCkuY2xhc3NOYW1lID0gXCJNZXRob2RcIjtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgc2VydmljZSBtZXRob2QgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFJlZmxlY3RlZCBzZXJ2aWNlIG1ldGhvZC5cbiAqIEBleHRlbmRzIFJlZmxlY3Rpb25PYmplY3RcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTWV0aG9kIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdHlwZSBNZXRob2QgdHlwZSwgdXN1YWxseSBgXCJycGNcImBcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0VHlwZSBSZXF1ZXN0IG1lc3NhZ2UgdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlc3BvbnNlVHlwZSBSZXNwb25zZSBtZXNzYWdlIHR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3QuPHN0cmluZywqPn0gW3JlcXVlc3RTdHJlYW1dIFdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgc3RyZWFtZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3QuPHN0cmluZywqPn0gW3Jlc3BvbnNlU3RyZWFtXSBXaGV0aGVyIHRoZSByZXNwb25zZSBpcyBzdHJlYW1lZFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW29wdGlvbnNdIERlY2xhcmVkIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29tbWVudF0gVGhlIGNvbW1lbnQgZm9yIHRoaXMgbWV0aG9kXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBbcGFyc2VkT3B0aW9uc10gRGVjbGFyZWQgb3B0aW9ucywgcHJvcGVybHkgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIE1ldGhvZChuYW1lLCB0eXBlLCByZXF1ZXN0VHlwZSwgcmVzcG9uc2VUeXBlLCByZXF1ZXN0U3RyZWFtLCByZXNwb25zZVN0cmVhbSwgb3B0aW9ucywgY29tbWVudCwgcGFyc2VkT3B0aW9ucykge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodXRpbC5pc09iamVjdChyZXF1ZXN0U3RyZWFtKSkge1xuICAgICAgICBvcHRpb25zID0gcmVxdWVzdFN0cmVhbTtcbiAgICAgICAgcmVxdWVzdFN0cmVhbSA9IHJlc3BvbnNlU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAodXRpbC5pc09iamVjdChyZXNwb25zZVN0cmVhbSkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHJlc3BvbnNlU3RyZWFtO1xuICAgICAgICByZXNwb25zZVN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoISh0eXBlID09PSB1bmRlZmluZWQgfHwgdXRpbC5pc1N0cmluZyh0eXBlKSkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInR5cGUgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdXRpbC5pc1N0cmluZyhyZXF1ZXN0VHlwZSkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJlcXVlc3RUeXBlIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXV0aWwuaXNTdHJpbmcocmVzcG9uc2VUeXBlKSlcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicmVzcG9uc2VUeXBlIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cbiAgICBSZWZsZWN0aW9uT2JqZWN0LmNhbGwodGhpcywgbmFtZSwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdHlwZS5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgXCJycGNcIjsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0IHR5cGUuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7IC8vIHRvSlNPTiwgbWFya2VyXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlcXVlc3RzIGFyZSBzdHJlYW1lZCBvciBub3QuXG4gICAgICogQHR5cGUge2Jvb2xlYW58dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMucmVxdWVzdFN0cmVhbSA9IHJlcXVlc3RTdHJlYW0gPyB0cnVlIDogdW5kZWZpbmVkOyAvLyB0b0pTT05cblxuICAgIC8qKlxuICAgICAqIFJlc3BvbnNlIHR5cGUuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgc3RyZWFtZWQgb3Igbm90LlxuICAgICAqIEB0eXBlIHtib29sZWFufHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlU3RyZWFtID0gcmVzcG9uc2VTdHJlYW0gPyB0cnVlIDogdW5kZWZpbmVkOyAvLyB0b0pTT05cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVkIHJlcXVlc3QgdHlwZS5cbiAgICAgKiBAdHlwZSB7VHlwZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x2ZWRSZXF1ZXN0VHlwZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlZCByZXNwb25zZSB0eXBlLlxuICAgICAqIEB0eXBlIHtUeXBlfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHZlZFJlc3BvbnNlVHlwZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDb21tZW50IGZvciB0aGlzIG1ldGhvZFxuICAgICAqIEB0eXBlIHtzdHJpbmd8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50O1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyBwcm9wZXJseSBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAgICAgKi9cbiAgICB0aGlzLnBhcnNlZE9wdGlvbnMgPSBwYXJzZWRPcHRpb25zO1xufVxuXG4vKipcbiAqIE1ldGhvZCBkZXNjcmlwdG9yLlxuICogQGludGVyZmFjZSBJTWV0aG9kXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGU9XCJycGNcIl0gTWV0aG9kIHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXF1ZXN0VHlwZSBSZXF1ZXN0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXNwb25zZVR5cGUgUmVzcG9uc2UgdHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVxdWVzdFN0cmVhbT1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgc3RyZWFtZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc3BvbnNlU3RyZWFtPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgc3RyZWFtZWRcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBNZXRob2Qgb3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbW1lbnQgTWV0aG9kIGNvbW1lbnRzXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLCo+fSBbcGFyc2VkT3B0aW9uc10gTWV0aG9kIG9wdGlvbnMgcHJvcGVybHkgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbWV0aG9kIGZyb20gYSBtZXRob2QgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE1ldGhvZCBuYW1lXG4gKiBAcGFyYW0ge0lNZXRob2R9IGpzb24gTWV0aG9kIGRlc2NyaXB0b3JcbiAqIEByZXR1cm5zIHtNZXRob2R9IENyZWF0ZWQgbWV0aG9kXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGFyZ3VtZW50cyBhcmUgaW52YWxpZFxuICovXG5NZXRob2QuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihuYW1lLCBqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBNZXRob2QobmFtZSwganNvbi50eXBlLCBqc29uLnJlcXVlc3RUeXBlLCBqc29uLnJlc3BvbnNlVHlwZSwganNvbi5yZXF1ZXN0U3RyZWFtLCBqc29uLnJlc3BvbnNlU3RyZWFtLCBqc29uLm9wdGlvbnMsIGpzb24uY29tbWVudCwganNvbi5wYXJzZWRPcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBtZXRob2QgdG8gYSBtZXRob2QgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7SVRvSlNPTk9wdGlvbnN9IFt0b0pTT05PcHRpb25zXSBKU09OIGNvbnZlcnNpb24gb3B0aW9uc1xuICogQHJldHVybnMge0lNZXRob2R9IE1ldGhvZCBkZXNjcmlwdG9yXG4gKi9cbk1ldGhvZC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKHRvSlNPTk9wdGlvbnMpIHtcbiAgICB2YXIga2VlcENvbW1lbnRzID0gdG9KU09OT3B0aW9ucyA/IEJvb2xlYW4odG9KU09OT3B0aW9ucy5rZWVwQ29tbWVudHMpIDogZmFsc2U7XG4gICAgcmV0dXJuIHV0aWwudG9PYmplY3QoW1xuICAgICAgICBcInR5cGVcIiAgICAgICAgICAgLCB0aGlzLnR5cGUgIT09IFwicnBjXCIgJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdGhpcy50eXBlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgXCJyZXF1ZXN0VHlwZVwiICAgICwgdGhpcy5yZXF1ZXN0VHlwZSxcbiAgICAgICAgXCJyZXF1ZXN0U3RyZWFtXCIgICwgdGhpcy5yZXF1ZXN0U3RyZWFtLFxuICAgICAgICBcInJlc3BvbnNlVHlwZVwiICAgLCB0aGlzLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgXCJyZXNwb25zZVN0cmVhbVwiICwgdGhpcy5yZXNwb25zZVN0cmVhbSxcbiAgICAgICAgXCJvcHRpb25zXCIgICAgICAgICwgdGhpcy5vcHRpb25zLFxuICAgICAgICBcImNvbW1lbnRcIiAgICAgICAgLCBrZWVwQ29tbWVudHMgPyB0aGlzLmNvbW1lbnQgOiB1bmRlZmluZWQsXG4gICAgICAgIFwicGFyc2VkT3B0aW9uc1wiICAsIHRoaXMucGFyc2VkT3B0aW9ucyxcbiAgICBdKTtcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbk1ldGhvZC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5yZXNvbHZlZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB0aGlzLnJlc29sdmVkUmVxdWVzdFR5cGUgPSB0aGlzLnBhcmVudC5sb29rdXBUeXBlKHRoaXMucmVxdWVzdFR5cGUpO1xuICAgIHRoaXMucmVzb2x2ZWRSZXNwb25zZVR5cGUgPSB0aGlzLnBhcmVudC5sb29rdXBUeXBlKHRoaXMucmVzcG9uc2VUeXBlKTtcblxuICAgIHJldHVybiBSZWZsZWN0aW9uT2JqZWN0LnByb3RvdHlwZS5yZXNvbHZlLmNhbGwodGhpcyk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gU2VydmljZTtcblxuLy8gZXh0ZW5kcyBOYW1lc3BhY2VcbnZhciBOYW1lc3BhY2UgPSByZXF1aXJlKFwiLi9uYW1lc3BhY2VcIik7XG4oKFNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOYW1lc3BhY2UucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBTZXJ2aWNlKS5jbGFzc05hbWUgPSBcIlNlcnZpY2VcIjtcblxudmFyIE1ldGhvZCA9IHJlcXVpcmUoXCIuL21ldGhvZFwiKSxcbiAgICB1dGlsICAgPSByZXF1aXJlKFwiLi91dGlsXCIpLFxuICAgIHJwYyAgICA9IHJlcXVpcmUoXCIuL3JwY1wiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHNlcnZpY2UgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFJlZmxlY3RlZCBzZXJ2aWNlLlxuICogQGV4dGVuZHMgTmFtZXNwYWNlQmFzZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBTZXJ2aWNlIG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBTZXJ2aWNlIG9wdGlvbnNcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYXJndW1lbnRzIGFyZSBpbnZhbGlkXG4gKi9cbmZ1bmN0aW9uIFNlcnZpY2UobmFtZSwgb3B0aW9ucykge1xuICAgIE5hbWVzcGFjZS5jYWxsKHRoaXMsIG5hbWUsIG9wdGlvbnMpO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSBtZXRob2RzLlxuICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxNZXRob2Q+fVxuICAgICAqL1xuICAgIHRoaXMubWV0aG9kcyA9IHt9OyAvLyB0b0pTT04sIG1hcmtlclxuXG4gICAgLyoqXG4gICAgICogQ2FjaGVkIG1ldGhvZHMgYXMgYW4gYXJyYXkuXG4gICAgICogQHR5cGUge01ldGhvZFtdfG51bGx9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9tZXRob2RzQXJyYXkgPSBudWxsO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgZGVzY3JpcHRvci5cbiAqIEBpbnRlcmZhY2UgSVNlcnZpY2VcbiAqIEBleHRlbmRzIElOYW1lc3BhY2VcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsSU1ldGhvZD59IG1ldGhvZHMgTWV0aG9kIGRlc2NyaXB0b3JzXG4gKi9cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgc2VydmljZSBmcm9tIGEgc2VydmljZSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgU2VydmljZSBuYW1lXG4gKiBAcGFyYW0ge0lTZXJ2aWNlfSBqc29uIFNlcnZpY2UgZGVzY3JpcHRvclxuICogQHJldHVybnMge1NlcnZpY2V9IENyZWF0ZWQgc2VydmljZVxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBhcmd1bWVudHMgYXJlIGludmFsaWRcbiAqL1xuU2VydmljZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKG5hbWUsIGpzb24pIHtcbiAgICB2YXIgc2VydmljZSA9IG5ldyBTZXJ2aWNlKG5hbWUsIGpzb24ub3B0aW9ucyk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoanNvbi5tZXRob2RzKVxuICAgICAgICBmb3IgKHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKGpzb24ubWV0aG9kcyksIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBzZXJ2aWNlLmFkZChNZXRob2QuZnJvbUpTT04obmFtZXNbaV0sIGpzb24ubWV0aG9kc1tuYW1lc1tpXV0pKTtcbiAgICBpZiAoanNvbi5uZXN0ZWQpXG4gICAgICAgIHNlcnZpY2UuYWRkSlNPTihqc29uLm5lc3RlZCk7XG4gICAgaWYgKGpzb24uZWRpdGlvbilcbiAgICAgICAgc2VydmljZS5fZWRpdGlvbiA9IGpzb24uZWRpdGlvbjtcbiAgICBzZXJ2aWNlLmNvbW1lbnQgPSBqc29uLmNvbW1lbnQ7XG4gICAgc2VydmljZS5fZGVmYXVsdEVkaXRpb24gPSBcInByb3RvM1wiOyAgLy8gRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LlxuICAgIHJldHVybiBzZXJ2aWNlO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIHNlcnZpY2UgdG8gYSBzZXJ2aWNlIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge0lUb0pTT05PcHRpb25zfSBbdG9KU09OT3B0aW9uc10gSlNPTiBjb252ZXJzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtJU2VydmljZX0gU2VydmljZSBkZXNjcmlwdG9yXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTih0b0pTT05PcHRpb25zKSB7XG4gICAgdmFyIGluaGVyaXRlZCA9IE5hbWVzcGFjZS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcywgdG9KU09OT3B0aW9ucyk7XG4gICAgdmFyIGtlZXBDb21tZW50cyA9IHRvSlNPTk9wdGlvbnMgPyBCb29sZWFuKHRvSlNPTk9wdGlvbnMua2VlcENvbW1lbnRzKSA6IGZhbHNlO1xuICAgIHJldHVybiB1dGlsLnRvT2JqZWN0KFtcbiAgICAgICAgXCJlZGl0aW9uXCIgLCB0aGlzLl9lZGl0aW9uVG9KU09OKCksXG4gICAgICAgIFwib3B0aW9uc1wiICwgaW5oZXJpdGVkICYmIGluaGVyaXRlZC5vcHRpb25zIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgXCJtZXRob2RzXCIgLCBOYW1lc3BhY2UuYXJyYXlUb0pTT04odGhpcy5tZXRob2RzQXJyYXksIHRvSlNPTk9wdGlvbnMpIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHt9LFxuICAgICAgICBcIm5lc3RlZFwiICAsIGluaGVyaXRlZCAmJiBpbmhlcml0ZWQubmVzdGVkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgXCJjb21tZW50XCIgLCBrZWVwQ29tbWVudHMgPyB0aGlzLmNvbW1lbnQgOiB1bmRlZmluZWRcbiAgICBdKTtcbn07XG5cbi8qKlxuICogTWV0aG9kcyBvZiB0aGlzIHNlcnZpY2UgYXMgYW4gYXJyYXkgZm9yIGl0ZXJhdGlvbi5cbiAqIEBuYW1lIFNlcnZpY2UjbWV0aG9kc0FycmF5XG4gKiBAdHlwZSB7TWV0aG9kW119XG4gKiBAcmVhZG9ubHlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNlcnZpY2UucHJvdG90eXBlLCBcIm1ldGhvZHNBcnJheVwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGhvZHNBcnJheSB8fCAodGhpcy5fbWV0aG9kc0FycmF5ID0gdXRpbC50b0FycmF5KHRoaXMubWV0aG9kcykpO1xuICAgIH1cbn0pO1xuXG5mdW5jdGlvbiBjbGVhckNhY2hlKHNlcnZpY2UpIHtcbiAgICBzZXJ2aWNlLl9tZXRob2RzQXJyYXkgPSBudWxsO1xuICAgIHJldHVybiBzZXJ2aWNlO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1ldGhvZHNbbmFtZV1cbiAgICAgICAgfHwgTmFtZXNwYWNlLnByb3RvdHlwZS5nZXQuY2FsbCh0aGlzLCBuYW1lKTtcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJlc29sdmVBbGwgPSBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgIGlmICghdGhpcy5fbmVlZHNSZWN1cnNpdmVSZXNvbHZlKSByZXR1cm4gdGhpcztcblxuICAgIE5hbWVzcGFjZS5wcm90b3R5cGUucmVzb2x2ZS5jYWxsKHRoaXMpO1xuICAgIHZhciBtZXRob2RzID0gdGhpcy5tZXRob2RzQXJyYXk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgKytpKVxuICAgICAgICBtZXRob2RzW2ldLnJlc29sdmUoKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLl9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUgPSBmdW5jdGlvbiBfcmVzb2x2ZUZlYXR1cmVzUmVjdXJzaXZlKGVkaXRpb24pIHtcbiAgICBpZiAoIXRoaXMuX25lZWRzUmVjdXJzaXZlRmVhdHVyZVJlc29sdXRpb24pIHJldHVybiB0aGlzO1xuXG4gICAgZWRpdGlvbiA9IHRoaXMuX2VkaXRpb24gfHwgZWRpdGlvbjtcblxuICAgIE5hbWVzcGFjZS5wcm90b3R5cGUuX3Jlc29sdmVGZWF0dXJlc1JlY3Vyc2l2ZS5jYWxsKHRoaXMsIGVkaXRpb24pO1xuICAgIHRoaXMubWV0aG9kc0FycmF5LmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgbWV0aG9kLl9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUoZWRpdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQob2JqZWN0KSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5nZXQob2JqZWN0Lm5hbWUpKVxuICAgICAgICB0aHJvdyBFcnJvcihcImR1cGxpY2F0ZSBuYW1lICdcIiArIG9iamVjdC5uYW1lICsgXCInIGluIFwiICsgdGhpcyk7XG5cbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWV0aG9kKSB7XG4gICAgICAgIHRoaXMubWV0aG9kc1tvYmplY3QubmFtZV0gPSBvYmplY3Q7XG4gICAgICAgIG9iamVjdC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gY2xlYXJDYWNoZSh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIE5hbWVzcGFjZS5wcm90b3R5cGUuYWRkLmNhbGwodGhpcywgb2JqZWN0KTtcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWV0aG9kKSB7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0aGlzLm1ldGhvZHNbb2JqZWN0Lm5hbWVdICE9PSBvYmplY3QpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihvYmplY3QgKyBcIiBpcyBub3QgYSBtZW1iZXIgb2YgXCIgKyB0aGlzKTtcblxuICAgICAgICBkZWxldGUgdGhpcy5tZXRob2RzW29iamVjdC5uYW1lXTtcbiAgICAgICAgb2JqZWN0LnBhcmVudCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjbGVhckNhY2hlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gTmFtZXNwYWNlLnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCBvYmplY3QpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcnVudGltZSBzZXJ2aWNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcnBjIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIHtSUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKiBAcmV0dXJucyB7cnBjLlNlcnZpY2V9IFJQQyBzZXJ2aWNlLiBVc2VmdWwgd2hlcmUgcmVxdWVzdHMgYW5kL29yIHJlc3BvbnNlcyBhcmUgc3RyZWFtZWQuXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuICAgIHZhciBycGNTZXJ2aWNlID0gbmV3IHJwYy5TZXJ2aWNlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbWV0aG9kOyBpIDwgLyogaW5pdGlhbGl6ZXMgKi8gdGhpcy5tZXRob2RzQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSB1dGlsLmxjRmlyc3QoKG1ldGhvZCA9IHRoaXMuX21ldGhvZHNBcnJheVtpXSkucmVzb2x2ZSgpLm5hbWUpLnJlcGxhY2UoL1teJFxcd19dL2csIFwiXCIpO1xuICAgICAgICBycGNTZXJ2aWNlW21ldGhvZE5hbWVdID0gdXRpbC5jb2RlZ2VuKFtcInJcIixcImNcIl0sIHV0aWwuaXNSZXNlcnZlZChtZXRob2ROYW1lKSA/IG1ldGhvZE5hbWUgKyBcIl9cIiA6IG1ldGhvZE5hbWUpKFwicmV0dXJuIHRoaXMucnBjQ2FsbChtLHEscyxyLGMpXCIpKHtcbiAgICAgICAgICAgIG06IG1ldGhvZCxcbiAgICAgICAgICAgIHE6IG1ldGhvZC5yZXNvbHZlZFJlcXVlc3RUeXBlLmN0b3IsXG4gICAgICAgICAgICBzOiBtZXRob2QucmVzb2x2ZWRSZXNwb25zZVR5cGUuY3RvclxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJwY1NlcnZpY2U7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gTWVzc2FnZTtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBtZXNzYWdlIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBBYnN0cmFjdCBydW50aW1lIG1lc3NhZ2UuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UHJvcGVydGllczxUPn0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIG9iamVjdCA9IG9iamVjdFxuICovXG5mdW5jdGlvbiBNZXNzYWdlKHByb3BlcnRpZXMpIHtcbiAgICAvLyBub3QgdXNlZCBpbnRlcm5hbGx5XG4gICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG59XG5cbi8qKlxuICogUmVmZXJlbmNlIHRvIHRoZSByZWZsZWN0ZWQgdHlwZS5cbiAqIEBuYW1lIE1lc3NhZ2UuJHR5cGVcbiAqIEB0eXBlIHtUeXBlfVxuICogQHJlYWRvbmx5XG4gKi9cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIHJlZmxlY3RlZCB0eXBlLlxuICogQG5hbWUgTWVzc2FnZSMkdHlwZVxuICogQHR5cGUge1R5cGV9XG4gKiBAcmVhZG9ubHlcbiAqL1xuXG4vKmVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICogQHJldHVybnMge01lc3NhZ2U8VD59IE1lc3NhZ2UgaW5zdGFuY2VcbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICogQHRoaXMgQ29uc3RydWN0b3I8VD5cbiAqL1xuTWVzc2FnZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgIHJldHVybiB0aGlzLiR0eXBlLmNyZWF0ZShwcm9wZXJ0aWVzKTtcbn07XG5cbi8qKlxuICogRW5jb2RlcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlLlxuICogQHBhcmFtIHtUfE9iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIE1lc3NhZ2UgdG8gZW5jb2RlXG4gKiBAcGFyYW0ge1dyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIHVzZVxuICogQHJldHVybnMge1dyaXRlcn0gV3JpdGVyXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEB0aGlzIENvbnN0cnVjdG9yPFQ+XG4gKi9cbk1lc3NhZ2UuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgIHJldHVybiB0aGlzLiR0eXBlLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpO1xufTtcblxuLyoqXG4gKiBFbmNvZGVzIGEgbWVzc2FnZSBvZiB0aGlzIHR5cGUgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge1R8T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgTWVzc2FnZSB0byBlbmNvZGVcbiAqIEBwYXJhbSB7V3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gdXNlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBXcml0ZXJcbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICogQHRoaXMgQ29uc3RydWN0b3I8VD5cbiAqL1xuTWVzc2FnZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuJHR5cGUuZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcik7XG59O1xuXG4vKipcbiAqIERlY29kZXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlwZS5cbiAqIEBuYW1lIE1lc3NhZ2UuZGVjb2RlXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7UmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZVxuICogQHJldHVybnMge1R9IERlY29kZWQgbWVzc2FnZVxuICogQHRlbXBsYXRlIFQgZXh0ZW5kcyBNZXNzYWdlPFQ+XG4gKiBAdGhpcyBDb25zdHJ1Y3RvcjxUPlxuICovXG5NZXNzYWdlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIpIHtcbiAgICByZXR1cm4gdGhpcy4kdHlwZS5kZWNvZGUocmVhZGVyKTtcbn07XG5cbi8qKlxuICogRGVjb2RlcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIHByZWNlZWRlZCBieSBpdHMgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQG5hbWUgTWVzc2FnZS5kZWNvZGVEZWxpbWl0ZWRcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtSZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlXG4gKiBAcmV0dXJucyB7VH0gRGVjb2RlZCBtZXNzYWdlXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEB0aGlzIENvbnN0cnVjdG9yPFQ+XG4gKi9cbk1lc3NhZ2UuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgIHJldHVybiB0aGlzLiR0eXBlLmRlY29kZURlbGltaXRlZChyZWFkZXIpO1xufTtcblxuLyoqXG4gKiBWZXJpZmllcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlLlxuICogQG5hbWUgTWVzc2FnZS52ZXJpZnlcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICovXG5NZXNzYWdlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHRoaXMuJHR5cGUudmVyaWZ5KG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1lc3NhZ2Ugb2YgdGhpcyB0eXBlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gKiBAcmV0dXJucyB7VH0gTWVzc2FnZSBpbnN0YW5jZVxuICogQHRlbXBsYXRlIFQgZXh0ZW5kcyBNZXNzYWdlPFQ+XG4gKiBAdGhpcyBDb25zdHJ1Y3RvcjxUPlxuICovXG5NZXNzYWdlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLiR0eXBlLmZyb21PYmplY3Qob2JqZWN0KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgbWVzc2FnZSBvZiB0aGlzIHR5cGUuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAqIEBwYXJhbSB7VH0gbWVzc2FnZSBNZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge0lDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICogQHRoaXMgQ29uc3RydWN0b3I8VD5cbiAqL1xuTWVzc2FnZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy4kdHlwZS50b09iamVjdChtZXNzYWdlLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBtZXNzYWdlIHRvIEpTT04uXG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gKi9cbk1lc3NhZ2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy4kdHlwZS50b09iamVjdCh0aGlzLCB1dGlsLnRvSlNPTk9wdGlvbnMpO1xufTtcblxuLyplc2xpbnQtZW5hYmxlIHZhbGlkLWpzZG9jKi8iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBkZWNvZGVyO1xuXG52YXIgRW51bSAgICA9IHJlcXVpcmUoXCIuL2VudW1cIiksXG4gICAgdHlwZXMgICA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpLFxuICAgIHV0aWwgICAgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG5mdW5jdGlvbiBtaXNzaW5nKGZpZWxkKSB7XG4gICAgcmV0dXJuIFwibWlzc2luZyByZXF1aXJlZCAnXCIgKyBmaWVsZC5uYW1lICsgXCInXCI7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGVjb2RlciBzcGVjaWZpYyB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgdHlwZS5cbiAqIEBwYXJhbSB7VHlwZX0gbXR5cGUgTWVzc2FnZSB0eXBlXG4gKiBAcmV0dXJucyB7Q29kZWdlbn0gQ29kZWdlbiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBkZWNvZGVyKG10eXBlKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUgKi9cbiAgICB2YXIgZ2VuID0gdXRpbC5jb2RlZ2VuKFtcInJcIiwgXCJsXCIsIFwiZVwiXSwgbXR5cGUubmFtZSArIFwiJGRlY29kZVwiKVxuICAgIChcImlmKCEociBpbnN0YW5jZW9mIFJlYWRlcikpXCIpXG4gICAgICAgIChcInI9UmVhZGVyLmNyZWF0ZShyKVwiKVxuICAgIChcInZhciBjPWw9PT11bmRlZmluZWQ/ci5sZW46ci5wb3MrbCxtPW5ldyB0aGlzLmN0b3JcIiArIChtdHlwZS5maWVsZHNBcnJheS5maWx0ZXIoZnVuY3Rpb24oZmllbGQpIHsgcmV0dXJuIGZpZWxkLm1hcDsgfSkubGVuZ3RoID8gXCIsayx2YWx1ZVwiIDogXCJcIikpXG4gICAgKFwid2hpbGUoci5wb3M8Yyl7XCIpXG4gICAgICAgIChcInZhciB0PXIudWludDMyKClcIilcbiAgICAgICAgKFwiaWYodD09PWUpXCIpXG4gICAgICAgICAgICAoXCJicmVha1wiKVxuICAgICAgICAoXCJzd2l0Y2godD4+PjMpe1wiKTtcblxuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IC8qIGluaXRpYWxpemVzICovIG10eXBlLmZpZWxkc0FycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IG10eXBlLl9maWVsZHNBcnJheVtpXS5yZXNvbHZlKCksXG4gICAgICAgICAgICB0eXBlICA9IGZpZWxkLnJlc29sdmVkVHlwZSBpbnN0YW5jZW9mIEVudW0gPyBcImludDMyXCIgOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgcmVmICAgPSBcIm1cIiArIHV0aWwuc2FmZVByb3AoZmllbGQubmFtZSk7IGdlblxuICAgICAgICAgICAgKFwiY2FzZSAlaToge1wiLCBmaWVsZC5pZCk7XG5cbiAgICAgICAgLy8gTWFwIGZpZWxkc1xuICAgICAgICBpZiAoZmllbGQubWFwKSB7IGdlblxuICAgICAgICAgICAgICAgIChcImlmKCVzPT09dXRpbC5lbXB0eU9iamVjdClcIiwgcmVmKVxuICAgICAgICAgICAgICAgICAgICAoXCIlcz17fVwiLCByZWYpXG4gICAgICAgICAgICAgICAgKFwidmFyIGMyID0gci51aW50MzIoKStyLnBvc1wiKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVzLmRlZmF1bHRzW2ZpZWxkLmtleVR5cGVdICE9PSB1bmRlZmluZWQpIGdlblxuICAgICAgICAgICAgICAgIChcIms9JWpcIiwgdHlwZXMuZGVmYXVsdHNbZmllbGQua2V5VHlwZV0pO1xuICAgICAgICAgICAgZWxzZSBnZW5cbiAgICAgICAgICAgICAgICAoXCJrPW51bGxcIik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlcy5kZWZhdWx0c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSBnZW5cbiAgICAgICAgICAgICAgICAoXCJ2YWx1ZT0lalwiLCB0eXBlcy5kZWZhdWx0c1t0eXBlXSk7XG4gICAgICAgICAgICBlbHNlIGdlblxuICAgICAgICAgICAgICAgIChcInZhbHVlPW51bGxcIik7XG5cbiAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgIChcIndoaWxlKHIucG9zPGMyKXtcIilcbiAgICAgICAgICAgICAgICAgICAgKFwidmFyIHRhZzI9ci51aW50MzIoKVwiKVxuICAgICAgICAgICAgICAgICAgICAoXCJzd2l0Y2godGFnMj4+PjMpe1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKFwiY2FzZSAxOiBrPXIuJXMoKTsgYnJlYWtcIiwgZmllbGQua2V5VHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIChcImNhc2UgMjpcIik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlcy5iYXNpY1t0eXBlXSA9PT0gdW5kZWZpbmVkKSBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJ2YWx1ZT10eXBlc1slaV0uZGVjb2RlKHIsci51aW50MzIoKSlcIiwgaSk7IC8vIGNhbid0IGJlIGdyb3Vwc1xuICAgICAgICAgICAgZWxzZSBnZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJ2YWx1ZT1yLiVzKClcIiwgdHlwZSk7XG5cbiAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcImJyZWFrXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAoXCJkZWZhdWx0OlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcInIuc2tpcFR5cGUodGFnMiY3KVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcImJyZWFrXCIpXG4gICAgICAgICAgICAgICAgICAgIChcIn1cIilcbiAgICAgICAgICAgICAgICAoXCJ9XCIpO1xuXG4gICAgICAgICAgICBpZiAodHlwZXMubG9uZ1tmaWVsZC5rZXlUeXBlXSAhPT0gdW5kZWZpbmVkKSBnZW5cbiAgICAgICAgICAgICAgICAoXCIlc1t0eXBlb2Ygaz09PVxcXCJvYmplY3RcXFwiP3V0aWwubG9uZ1RvSGFzaChrKTprXT12YWx1ZVwiLCByZWYpO1xuICAgICAgICAgICAgZWxzZSBnZW5cbiAgICAgICAgICAgICAgICAoXCIlc1trXT12YWx1ZVwiLCByZWYpO1xuXG4gICAgICAgIC8vIFJlcGVhdGVkIGZpZWxkc1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnJlcGVhdGVkKSB7IGdlblxuXG4gICAgICAgICAgICAgICAgKFwiaWYoISglcyYmJXMubGVuZ3RoKSlcIiwgcmVmLCByZWYpXG4gICAgICAgICAgICAgICAgICAgIChcIiVzPVtdXCIsIHJlZik7XG5cbiAgICAgICAgICAgIC8vIFBhY2thYmxlIChhbHdheXMgY2hlY2sgZm9yIGZvcndhcmQgYW5kIGJhY2t3YXJkIGNvbXBhdGlibGl0eSlcbiAgICAgICAgICAgIGlmICh0eXBlcy5wYWNrZWRbdHlwZV0gIT09IHVuZGVmaW5lZCkgZ2VuXG4gICAgICAgICAgICAgICAgKFwiaWYoKHQmNyk9PT0yKXtcIilcbiAgICAgICAgICAgICAgICAgICAgKFwidmFyIGMyPXIudWludDMyKCkrci5wb3NcIilcbiAgICAgICAgICAgICAgICAgICAgKFwid2hpbGUoci5wb3M8YzIpXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAoXCIlcy5wdXNoKHIuJXMoKSlcIiwgcmVmLCB0eXBlKVxuICAgICAgICAgICAgICAgIChcIn1lbHNlXCIpO1xuXG4gICAgICAgICAgICAvLyBOb24tcGFja2VkXG4gICAgICAgICAgICBpZiAodHlwZXMuYmFzaWNbdHlwZV0gPT09IHVuZGVmaW5lZCkgZ2VuKGZpZWxkLmRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICA/IFwiJXMucHVzaCh0eXBlc1slaV0uZGVjb2RlKHIsdW5kZWZpbmVkLCgodCZ+Nyl8NCkpKVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCIlcy5wdXNoKHR5cGVzWyVpXS5kZWNvZGUocixyLnVpbnQzMigpKSlcIiwgcmVmLCBpKTtcbiAgICAgICAgICAgIGVsc2UgZ2VuXG4gICAgICAgICAgICAgICAgICAgIChcIiVzLnB1c2goci4lcygpKVwiLCByZWYsIHR5cGUpO1xuXG4gICAgICAgIC8vIE5vbi1yZXBlYXRlZFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVzLmJhc2ljW3R5cGVdID09PSB1bmRlZmluZWQpIGdlbihmaWVsZC5kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICA/IFwiJXM9dHlwZXNbJWldLmRlY29kZShyLHVuZGVmaW5lZCwoKHQmfjcpfDQpKVwiXG4gICAgICAgICAgICAgICAgOiBcIiVzPXR5cGVzWyVpXS5kZWNvZGUocixyLnVpbnQzMigpKVwiLCByZWYsIGkpO1xuICAgICAgICBlbHNlIGdlblxuICAgICAgICAgICAgICAgIChcIiVzPXIuJXMoKVwiLCByZWYsIHR5cGUpO1xuICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAoXCJicmVha1wiKVxuICAgICAgICAgICAgKFwifVwiKTtcbiAgICAgICAgLy8gVW5rbm93biBmaWVsZHNcbiAgICB9IGdlblxuICAgICAgICAgICAgKFwiZGVmYXVsdDpcIilcbiAgICAgICAgICAgICAgICAoXCJyLnNraXBUeXBlKHQmNylcIilcbiAgICAgICAgICAgICAgICAoXCJicmVha1wiKVxuXG4gICAgICAgIChcIn1cIilcbiAgICAoXCJ9XCIpO1xuXG4gICAgLy8gRmllbGQgcHJlc2VuY2VcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXR5cGUuX2ZpZWxkc0FycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZmllbGQgPSBtdHlwZS5fZmllbGRzQXJyYXlbaV07XG4gICAgICAgIGlmIChyZmllbGQucmVxdWlyZWQpIGdlblxuICAgIChcImlmKCFtLmhhc093blByb3BlcnR5KCVqKSlcIiwgcmZpZWxkLm5hbWUpXG4gICAgICAgIChcInRocm93IHV0aWwuUHJvdG9jb2xFcnJvciglaix7aW5zdGFuY2U6bX0pXCIsIG1pc3NpbmcocmZpZWxkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlblxuICAgIChcInJldHVybiBtXCIpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUgKi9cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHZlcmlmaWVyO1xuXG52YXIgRW51bSAgICAgID0gcmVxdWlyZShcIi4vZW51bVwiKSxcbiAgICB1dGlsICAgICAgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG5mdW5jdGlvbiBpbnZhbGlkKGZpZWxkLCBleHBlY3RlZCkge1xuICAgIHJldHVybiBmaWVsZC5uYW1lICsgXCI6IFwiICsgZXhwZWN0ZWQgKyAoZmllbGQucmVwZWF0ZWQgJiYgZXhwZWN0ZWQgIT09IFwiYXJyYXlcIiA/IFwiW11cIiA6IGZpZWxkLm1hcCAmJiBleHBlY3RlZCAhPT0gXCJvYmplY3RcIiA/IFwie2s6XCIrZmllbGQua2V5VHlwZStcIn1cIiA6IFwiXCIpICsgXCIgZXhwZWN0ZWRcIjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBwYXJ0aWFsIHZhbHVlIHZlcmlmaWVyLlxuICogQHBhcmFtIHtDb2RlZ2VufSBnZW4gQ29kZWdlbiBpbnN0YW5jZVxuICogQHBhcmFtIHtGaWVsZH0gZmllbGQgUmVmbGVjdGVkIGZpZWxkXG4gKiBAcGFyYW0ge251bWJlcn0gZmllbGRJbmRleCBGaWVsZCBpbmRleFxuICogQHBhcmFtIHtzdHJpbmd9IHJlZiBWYXJpYWJsZSByZWZlcmVuY2VcbiAqIEByZXR1cm5zIHtDb2RlZ2VufSBDb2RlZ2VuIGluc3RhbmNlXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIGdlblZlcmlmeVZhbHVlKGdlbiwgZmllbGQsIGZpZWxkSW5kZXgsIHJlZikge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lICovXG4gICAgaWYgKGZpZWxkLnJlc29sdmVkVHlwZSkge1xuICAgICAgICBpZiAoZmllbGQucmVzb2x2ZWRUeXBlIGluc3RhbmNlb2YgRW51bSkgeyBnZW5cbiAgICAgICAgICAgIChcInN3aXRjaCglcyl7XCIsIHJlZilcbiAgICAgICAgICAgICAgICAoXCJkZWZhdWx0OlwiKVxuICAgICAgICAgICAgICAgICAgICAoXCJyZXR1cm4lalwiLCBpbnZhbGlkKGZpZWxkLCBcImVudW0gdmFsdWVcIikpO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkLnJlc29sdmVkVHlwZS52YWx1ZXMpLCBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyArK2opIGdlblxuICAgICAgICAgICAgICAgIChcImNhc2UgJWk6XCIsIGZpZWxkLnJlc29sdmVkVHlwZS52YWx1ZXNba2V5c1tqXV0pO1xuICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIChcImJyZWFrXCIpXG4gICAgICAgICAgICAoXCJ9XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAoXCJ7XCIpXG4gICAgICAgICAgICAgICAgKFwidmFyIGU9dHlwZXNbJWldLnZlcmlmeSglcyk7XCIsIGZpZWxkSW5kZXgsIHJlZilcbiAgICAgICAgICAgICAgICAoXCJpZihlKVwiKVxuICAgICAgICAgICAgICAgICAgICAoXCJyZXR1cm4laitlXCIsIGZpZWxkLm5hbWUgKyBcIi5cIilcbiAgICAgICAgICAgIChcIn1cIik7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbnQzMlwiOlxuICAgICAgICAgICAgY2FzZSBcInVpbnQzMlwiOlxuICAgICAgICAgICAgY2FzZSBcInNpbnQzMlwiOlxuICAgICAgICAgICAgY2FzZSBcImZpeGVkMzJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzZml4ZWQzMlwiOiBnZW5cbiAgICAgICAgICAgICAgICAoXCJpZighdXRpbC5pc0ludGVnZXIoJXMpKVwiLCByZWYpXG4gICAgICAgICAgICAgICAgICAgIChcInJldHVybiVqXCIsIGludmFsaWQoZmllbGQsIFwiaW50ZWdlclwiKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaW50NjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1aW50NjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzaW50NjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmaXhlZDY0XCI6XG4gICAgICAgICAgICBjYXNlIFwic2ZpeGVkNjRcIjogZ2VuXG4gICAgICAgICAgICAgICAgKFwiaWYoIXV0aWwuaXNJbnRlZ2VyKCVzKSYmISglcyYmdXRpbC5pc0ludGVnZXIoJXMubG93KSYmdXRpbC5pc0ludGVnZXIoJXMuaGlnaCkpKVwiLCByZWYsIHJlZiwgcmVmLCByZWYpXG4gICAgICAgICAgICAgICAgICAgIChcInJldHVybiVqXCIsIGludmFsaWQoZmllbGQsIFwiaW50ZWdlcnxMb25nXCIpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmbG9hdFwiOlxuICAgICAgICAgICAgY2FzZSBcImRvdWJsZVwiOiBnZW5cbiAgICAgICAgICAgICAgICAoXCJpZih0eXBlb2YgJXMhPT1cXFwibnVtYmVyXFxcIilcIiwgcmVmKVxuICAgICAgICAgICAgICAgICAgICAoXCJyZXR1cm4lalwiLCBpbnZhbGlkKGZpZWxkLCBcIm51bWJlclwiKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbFwiOiBnZW5cbiAgICAgICAgICAgICAgICAoXCJpZih0eXBlb2YgJXMhPT1cXFwiYm9vbGVhblxcXCIpXCIsIHJlZilcbiAgICAgICAgICAgICAgICAgICAgKFwicmV0dXJuJWpcIiwgaW52YWxpZChmaWVsZCwgXCJib29sZWFuXCIpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjogZ2VuXG4gICAgICAgICAgICAgICAgKFwiaWYoIXV0aWwuaXNTdHJpbmcoJXMpKVwiLCByZWYpXG4gICAgICAgICAgICAgICAgICAgIChcInJldHVybiVqXCIsIGludmFsaWQoZmllbGQsIFwic3RyaW5nXCIpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJieXRlc1wiOiBnZW5cbiAgICAgICAgICAgICAgICAoXCJpZighKCVzJiZ0eXBlb2YgJXMubGVuZ3RoPT09XFxcIm51bWJlclxcXCJ8fHV0aWwuaXNTdHJpbmcoJXMpKSlcIiwgcmVmLCByZWYsIHJlZilcbiAgICAgICAgICAgICAgICAgICAgKFwicmV0dXJuJWpcIiwgaW52YWxpZChmaWVsZCwgXCJidWZmZXJcIikpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW47XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSAqL1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHBhcnRpYWwga2V5IHZlcmlmaWVyLlxuICogQHBhcmFtIHtDb2RlZ2VufSBnZW4gQ29kZWdlbiBpbnN0YW5jZVxuICogQHBhcmFtIHtGaWVsZH0gZmllbGQgUmVmbGVjdGVkIGZpZWxkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmIFZhcmlhYmxlIHJlZmVyZW5jZVxuICogQHJldHVybnMge0NvZGVnZW59IENvZGVnZW4gaW5zdGFuY2VcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gZ2VuVmVyaWZ5S2V5KGdlbiwgZmllbGQsIHJlZikge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lICovXG4gICAgc3dpdGNoIChmaWVsZC5rZXlUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJpbnQzMlwiOlxuICAgICAgICBjYXNlIFwidWludDMyXCI6XG4gICAgICAgIGNhc2UgXCJzaW50MzJcIjpcbiAgICAgICAgY2FzZSBcImZpeGVkMzJcIjpcbiAgICAgICAgY2FzZSBcInNmaXhlZDMyXCI6IGdlblxuICAgICAgICAgICAgKFwiaWYoIXV0aWwua2V5MzJSZS50ZXN0KCVzKSlcIiwgcmVmKVxuICAgICAgICAgICAgICAgIChcInJldHVybiVqXCIsIGludmFsaWQoZmllbGQsIFwiaW50ZWdlciBrZXlcIikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnQ2NFwiOlxuICAgICAgICBjYXNlIFwidWludDY0XCI6XG4gICAgICAgIGNhc2UgXCJzaW50NjRcIjpcbiAgICAgICAgY2FzZSBcImZpeGVkNjRcIjpcbiAgICAgICAgY2FzZSBcInNmaXhlZDY0XCI6IGdlblxuICAgICAgICAgICAgKFwiaWYoIXV0aWwua2V5NjRSZS50ZXN0KCVzKSlcIiwgcmVmKSAvLyBzZWUgY29tbWVudCBhYm92ZTogeCBpcyBvaywgZCBpcyBub3RcbiAgICAgICAgICAgICAgICAoXCJyZXR1cm4lalwiLCBpbnZhbGlkKGZpZWxkLCBcImludGVnZXJ8TG9uZyBrZXlcIikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJib29sXCI6IGdlblxuICAgICAgICAgICAgKFwiaWYoIXV0aWwua2V5MlJlLnRlc3QoJXMpKVwiLCByZWYpXG4gICAgICAgICAgICAgICAgKFwicmV0dXJuJWpcIiwgaW52YWxpZChmaWVsZCwgXCJib29sZWFuIGtleVwiKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGdlbjtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lICovXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdmVyaWZpZXIgc3BlY2lmaWMgdG8gdGhlIHNwZWNpZmllZCBtZXNzYWdlIHR5cGUuXG4gKiBAcGFyYW0ge1R5cGV9IG10eXBlIE1lc3NhZ2UgdHlwZVxuICogQHJldHVybnMge0NvZGVnZW59IENvZGVnZW4gaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gdmVyaWZpZXIobXR5cGUpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSAqL1xuXG4gICAgdmFyIGdlbiA9IHV0aWwuY29kZWdlbihbXCJtXCJdLCBtdHlwZS5uYW1lICsgXCIkdmVyaWZ5XCIpXG4gICAgKFwiaWYodHlwZW9mIG0hPT1cXFwib2JqZWN0XFxcInx8bT09PW51bGwpXCIpXG4gICAgICAgIChcInJldHVybiVqXCIsIFwib2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgIHZhciBvbmVvZnMgPSBtdHlwZS5vbmVvZnNBcnJheSxcbiAgICAgICAgc2VlbkZpcnN0RmllbGQgPSB7fTtcbiAgICBpZiAob25lb2ZzLmxlbmd0aCkgZ2VuXG4gICAgKFwidmFyIHA9e31cIik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IC8qIGluaXRpYWxpemVzICovIG10eXBlLmZpZWxkc0FycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IG10eXBlLl9maWVsZHNBcnJheVtpXS5yZXNvbHZlKCksXG4gICAgICAgICAgICByZWYgICA9IFwibVwiICsgdXRpbC5zYWZlUHJvcChmaWVsZC5uYW1lKTtcblxuICAgICAgICBpZiAoZmllbGQub3B0aW9uYWwpIGdlblxuICAgICAgICAoXCJpZiglcyE9bnVsbCYmbS5oYXNPd25Qcm9wZXJ0eSglaikpe1wiLCByZWYsIGZpZWxkLm5hbWUpOyAvLyAhPT0gdW5kZWZpbmVkICYmICE9PSBudWxsXG5cbiAgICAgICAgLy8gbWFwIGZpZWxkc1xuICAgICAgICBpZiAoZmllbGQubWFwKSB7IGdlblxuICAgICAgICAgICAgKFwiaWYoIXV0aWwuaXNPYmplY3QoJXMpKVwiLCByZWYpXG4gICAgICAgICAgICAgICAgKFwicmV0dXJuJWpcIiwgaW52YWxpZChmaWVsZCwgXCJvYmplY3RcIikpXG4gICAgICAgICAgICAoXCJ2YXIgaz1PYmplY3Qua2V5cyglcylcIiwgcmVmKVxuICAgICAgICAgICAgKFwiZm9yKHZhciBpPTA7aTxrLmxlbmd0aDsrK2kpe1wiKTtcbiAgICAgICAgICAgICAgICBnZW5WZXJpZnlLZXkoZ2VuLCBmaWVsZCwgXCJrW2ldXCIpO1xuICAgICAgICAgICAgICAgIGdlblZlcmlmeVZhbHVlKGdlbiwgZmllbGQsIGksIHJlZiArIFwiW2tbaV1dXCIpXG4gICAgICAgICAgICAoXCJ9XCIpO1xuXG4gICAgICAgIC8vIHJlcGVhdGVkIGZpZWxkc1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnJlcGVhdGVkKSB7IGdlblxuICAgICAgICAgICAgKFwiaWYoIUFycmF5LmlzQXJyYXkoJXMpKVwiLCByZWYpXG4gICAgICAgICAgICAgICAgKFwicmV0dXJuJWpcIiwgaW52YWxpZChmaWVsZCwgXCJhcnJheVwiKSlcbiAgICAgICAgICAgIChcImZvcih2YXIgaT0wO2k8JXMubGVuZ3RoOysraSl7XCIsIHJlZik7XG4gICAgICAgICAgICAgICAgZ2VuVmVyaWZ5VmFsdWUoZ2VuLCBmaWVsZCwgaSwgcmVmICsgXCJbaV1cIilcbiAgICAgICAgICAgIChcIn1cIik7XG5cbiAgICAgICAgLy8gcmVxdWlyZWQgb3IgcHJlc2VudCBmaWVsZHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5wYXJ0T2YpIHtcbiAgICAgICAgICAgICAgICB2YXIgb25lb2ZQcm9wID0gdXRpbC5zYWZlUHJvcChmaWVsZC5wYXJ0T2YubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW5GaXJzdEZpZWxkW2ZpZWxkLnBhcnRPZi5uYW1lXSA9PT0gMSkgZ2VuXG4gICAgICAgICAgICAoXCJpZihwJXM9PT0xKVwiLCBvbmVvZlByb3ApXG4gICAgICAgICAgICAgICAgKFwicmV0dXJuJWpcIiwgZmllbGQucGFydE9mLm5hbWUgKyBcIjogbXVsdGlwbGUgdmFsdWVzXCIpO1xuICAgICAgICAgICAgICAgIHNlZW5GaXJzdEZpZWxkW2ZpZWxkLnBhcnRPZi5uYW1lXSA9IDE7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAoXCJwJXM9MVwiLCBvbmVvZlByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuVmVyaWZ5VmFsdWUoZ2VuLCBmaWVsZCwgaSwgcmVmKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQub3B0aW9uYWwpIGdlblxuICAgICAgICAoXCJ9XCIpO1xuICAgIH1cbiAgICByZXR1cm4gZ2VuXG4gICAgKFwicmV0dXJuIG51bGxcIik7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSAqL1xufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIFJ1bnRpbWUgbWVzc2FnZSBmcm9tL3RvIHBsYWluIG9iamVjdCBjb252ZXJ0ZXJzLlxuICogQG5hbWVzcGFjZVxuICovXG52YXIgY29udmVydGVyID0gZXhwb3J0cztcblxudmFyIEVudW0gPSByZXF1aXJlKFwiLi9lbnVtXCIpLFxuICAgIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHBhcnRpYWwgdmFsdWUgZnJvbU9iamVjdCBjb252ZXRlci5cbiAqIEBwYXJhbSB7Q29kZWdlbn0gZ2VuIENvZGVnZW4gaW5zdGFuY2VcbiAqIEBwYXJhbSB7RmllbGR9IGZpZWxkIFJlZmxlY3RlZCBmaWVsZFxuICogQHBhcmFtIHtudW1iZXJ9IGZpZWxkSW5kZXggRmllbGQgaW5kZXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IHJlZmVyZW5jZVxuICogQHJldHVybnMge0NvZGVnZW59IENvZGVnZW4gaW5zdGFuY2VcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gZ2VuVmFsdWVQYXJ0aWFsX2Zyb21PYmplY3QoZ2VuLCBmaWVsZCwgZmllbGRJbmRleCwgcHJvcCkge1xuICAgIHZhciBkZWZhdWx0QWxyZWFkeUVtaXR0ZWQgPSBmYWxzZTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSwgYmxvY2stc2NvcGVkLXZhciwgbm8tcmVkZWNsYXJlICovXG4gICAgaWYgKGZpZWxkLnJlc29sdmVkVHlwZSkge1xuICAgICAgICBpZiAoZmllbGQucmVzb2x2ZWRUeXBlIGluc3RhbmNlb2YgRW51bSkgeyBnZW5cbiAgICAgICAgICAgIChcInN3aXRjaChkJXMpe1wiLCBwcm9wKTtcbiAgICAgICAgICAgIGZvciAodmFyIHZhbHVlcyA9IGZpZWxkLnJlc29sdmVkVHlwZS52YWx1ZXMsIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAvLyBlbnVtIHVua25vd24gdmFsdWVzIHBhc3N0aHJvdWdoXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlc1trZXlzW2ldXSA9PT0gZmllbGQudHlwZURlZmF1bHQgJiYgIWRlZmF1bHRBbHJlYWR5RW1pdHRlZCkgeyBnZW5cbiAgICAgICAgICAgICAgICAgICAgKFwiZGVmYXVsdDpcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIChcImlmKHR5cGVvZihkJXMpPT09XFxcIm51bWJlclxcXCIpe20lcz1kJXM7YnJlYWt9XCIsIHByb3AsIHByb3AsIHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkLnJlcGVhdGVkKSBnZW4gLy8gZmFsbGJhY2sgdG8gZGVmYXVsdCB2YWx1ZSBvbmx5IGZvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXlzLCB0byBhdm9pZCBsZWF2aW5nIGhvbGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgKFwiYnJlYWtcIik7ICAgICAgICAgICAvLyBmb3Igbm9uLXJlcGVhdGVkIGZpZWxkcywganVzdCBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEFscmVhZHlFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgKFwiY2FzZSVqOlwiLCBrZXlzW2ldKVxuICAgICAgICAgICAgICAgIChcImNhc2UgJWk6XCIsIHZhbHVlc1trZXlzW2ldXSlcbiAgICAgICAgICAgICAgICAgICAgKFwibSVzPSVqXCIsIHByb3AsIHZhbHVlc1trZXlzW2ldXSlcbiAgICAgICAgICAgICAgICAgICAgKFwiYnJlYWtcIik7XG4gICAgICAgICAgICB9IGdlblxuICAgICAgICAgICAgKFwifVwiKTtcbiAgICAgICAgfSBlbHNlIGdlblxuICAgICAgICAgICAgKFwiaWYodHlwZW9mIGQlcyE9PVxcXCJvYmplY3RcXFwiKVwiLCBwcm9wKVxuICAgICAgICAgICAgICAgIChcInRocm93IFR5cGVFcnJvciglailcIiwgZmllbGQuZnVsbE5hbWUgKyBcIjogb2JqZWN0IGV4cGVjdGVkXCIpXG4gICAgICAgICAgICAoXCJtJXM9dHlwZXNbJWldLmZyb21PYmplY3QoZCVzKVwiLCBwcm9wLCBmaWVsZEluZGV4LCBwcm9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNVbnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJkb3VibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmbG9hdFwiOiBnZW5cbiAgICAgICAgICAgICAgICAoXCJtJXM9TnVtYmVyKGQlcylcIiwgcHJvcCwgcHJvcCk7IC8vIGFsc28gY2F0Y2hlcyBcIk5hTlwiLCBcIkluZmluaXR5XCJcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ1aW50MzJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmaXhlZDMyXCI6IGdlblxuICAgICAgICAgICAgICAgIChcIm0lcz1kJXM+Pj4wXCIsIHByb3AsIHByb3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImludDMyXCI6XG4gICAgICAgICAgICBjYXNlIFwic2ludDMyXCI6XG4gICAgICAgICAgICBjYXNlIFwic2ZpeGVkMzJcIjogZ2VuXG4gICAgICAgICAgICAgICAgKFwibSVzPWQlc3wwXCIsIHByb3AsIHByb3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInVpbnQ2NFwiOlxuICAgICAgICAgICAgICAgIGlzVW5zaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgICAgICAgY2FzZSBcImludDY0XCI6XG4gICAgICAgICAgICBjYXNlIFwic2ludDY0XCI6XG4gICAgICAgICAgICBjYXNlIFwiZml4ZWQ2NFwiOlxuICAgICAgICAgICAgY2FzZSBcInNmaXhlZDY0XCI6IGdlblxuICAgICAgICAgICAgICAgIChcImlmKHV0aWwuTG9uZylcIilcbiAgICAgICAgICAgICAgICAgICAgKFwiKG0lcz11dGlsLkxvbmcuZnJvbVZhbHVlKGQlcykpLnVuc2lnbmVkPSVqXCIsIHByb3AsIHByb3AsIGlzVW5zaWduZWQpXG4gICAgICAgICAgICAgICAgKFwiZWxzZSBpZih0eXBlb2YgZCVzPT09XFxcInN0cmluZ1xcXCIpXCIsIHByb3ApXG4gICAgICAgICAgICAgICAgICAgIChcIm0lcz1wYXJzZUludChkJXMsMTApXCIsIHByb3AsIHByb3ApXG4gICAgICAgICAgICAgICAgKFwiZWxzZSBpZih0eXBlb2YgZCVzPT09XFxcIm51bWJlclxcXCIpXCIsIHByb3ApXG4gICAgICAgICAgICAgICAgICAgIChcIm0lcz1kJXNcIiwgcHJvcCwgcHJvcClcbiAgICAgICAgICAgICAgICAoXCJlbHNlIGlmKHR5cGVvZiBkJXM9PT1cXFwib2JqZWN0XFxcIilcIiwgcHJvcClcbiAgICAgICAgICAgICAgICAgICAgKFwibSVzPW5ldyB1dGlsLkxvbmdCaXRzKGQlcy5sb3c+Pj4wLGQlcy5oaWdoPj4+MCkudG9OdW1iZXIoJXMpXCIsIHByb3AsIHByb3AsIHByb3AsIGlzVW5zaWduZWQgPyBcInRydWVcIiA6IFwiXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImJ5dGVzXCI6IGdlblxuICAgICAgICAgICAgICAgIChcImlmKHR5cGVvZiBkJXM9PT1cXFwic3RyaW5nXFxcIilcIiwgcHJvcClcbiAgICAgICAgICAgICAgICAgICAgKFwidXRpbC5iYXNlNjQuZGVjb2RlKGQlcyxtJXM9dXRpbC5uZXdCdWZmZXIodXRpbC5iYXNlNjQubGVuZ3RoKGQlcykpLDApXCIsIHByb3AsIHByb3AsIHByb3ApXG4gICAgICAgICAgICAgICAgKFwiZWxzZSBpZihkJXMubGVuZ3RoID49IDApXCIsIHByb3ApXG4gICAgICAgICAgICAgICAgICAgIChcIm0lcz1kJXNcIiwgcHJvcCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IGdlblxuICAgICAgICAgICAgICAgIChcIm0lcz1TdHJpbmcoZCVzKVwiLCBwcm9wLCBwcm9wKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJib29sXCI6IGdlblxuICAgICAgICAgICAgICAgIChcIm0lcz1Cb29sZWFuKGQlcylcIiwgcHJvcCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBkZWZhdWx0OiBnZW5cbiAgICAgICAgICAgICAgICAoXCJtJXM9ZCVzXCIsIHByb3AsIHByb3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW47XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSwgYmxvY2stc2NvcGVkLXZhciwgbm8tcmVkZWNsYXJlICovXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcGxhaW4gb2JqZWN0IHRvIHJ1bnRpbWUgbWVzc2FnZSBjb252ZXJ0ZXIgc3BlY2lmaWMgdG8gdGhlIHNwZWNpZmllZCBtZXNzYWdlIHR5cGUuXG4gKiBAcGFyYW0ge1R5cGV9IG10eXBlIE1lc3NhZ2UgdHlwZVxuICogQHJldHVybnMge0NvZGVnZW59IENvZGVnZW4gaW5zdGFuY2VcbiAqL1xuY29udmVydGVyLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG10eXBlKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUsIGJsb2NrLXNjb3BlZC12YXIsIG5vLXJlZGVjbGFyZSAqL1xuICAgIHZhciBmaWVsZHMgPSBtdHlwZS5maWVsZHNBcnJheTtcbiAgICB2YXIgZ2VuID0gdXRpbC5jb2RlZ2VuKFtcImRcIl0sIG10eXBlLm5hbWUgKyBcIiRmcm9tT2JqZWN0XCIpXG4gICAgKFwiaWYoZCBpbnN0YW5jZW9mIHRoaXMuY3RvcilcIilcbiAgICAgICAgKFwicmV0dXJuIGRcIik7XG4gICAgaWYgKCFmaWVsZHMubGVuZ3RoKSByZXR1cm4gZ2VuXG4gICAgKFwicmV0dXJuIG5ldyB0aGlzLmN0b3JcIik7XG4gICAgZ2VuXG4gICAgKFwidmFyIG09bmV3IHRoaXMuY3RvclwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgZmllbGQgID0gZmllbGRzW2ldLnJlc29sdmUoKSxcbiAgICAgICAgICAgIHByb3AgICA9IHV0aWwuc2FmZVByb3AoZmllbGQubmFtZSk7XG5cbiAgICAgICAgLy8gTWFwIGZpZWxkc1xuICAgICAgICBpZiAoZmllbGQubWFwKSB7IGdlblxuICAgIChcImlmKGQlcyl7XCIsIHByb3ApXG4gICAgICAgIChcImlmKHR5cGVvZiBkJXMhPT1cXFwib2JqZWN0XFxcIilcIiwgcHJvcClcbiAgICAgICAgICAgIChcInRocm93IFR5cGVFcnJvciglailcIiwgZmllbGQuZnVsbE5hbWUgKyBcIjogb2JqZWN0IGV4cGVjdGVkXCIpXG4gICAgICAgIChcIm0lcz17fVwiLCBwcm9wKVxuICAgICAgICAoXCJmb3IodmFyIGtzPU9iamVjdC5rZXlzKGQlcyksaT0wO2k8a3MubGVuZ3RoOysraSl7XCIsIHByb3ApO1xuICAgICAgICAgICAgZ2VuVmFsdWVQYXJ0aWFsX2Zyb21PYmplY3QoZ2VuLCBmaWVsZCwgLyogbm90IHNvcnRlZCAqLyBpLCBwcm9wICsgXCJba3NbaV1dXCIpXG4gICAgICAgIChcIn1cIilcbiAgICAoXCJ9XCIpO1xuXG4gICAgICAgIC8vIFJlcGVhdGVkIGZpZWxkc1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnJlcGVhdGVkKSB7IGdlblxuICAgIChcImlmKGQlcyl7XCIsIHByb3ApXG4gICAgICAgIChcImlmKCFBcnJheS5pc0FycmF5KGQlcykpXCIsIHByb3ApXG4gICAgICAgICAgICAoXCJ0aHJvdyBUeXBlRXJyb3IoJWopXCIsIGZpZWxkLmZ1bGxOYW1lICsgXCI6IGFycmF5IGV4cGVjdGVkXCIpXG4gICAgICAgIChcIm0lcz1bXVwiLCBwcm9wKVxuICAgICAgICAoXCJmb3IodmFyIGk9MDtpPGQlcy5sZW5ndGg7KytpKXtcIiwgcHJvcCk7XG4gICAgICAgICAgICBnZW5WYWx1ZVBhcnRpYWxfZnJvbU9iamVjdChnZW4sIGZpZWxkLCAvKiBub3Qgc29ydGVkICovIGksIHByb3AgKyBcIltpXVwiKVxuICAgICAgICAoXCJ9XCIpXG4gICAgKFwifVwiKTtcblxuICAgICAgICAvLyBOb24tcmVwZWF0ZWQgZmllbGRzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIShmaWVsZC5yZXNvbHZlZFR5cGUgaW5zdGFuY2VvZiBFbnVtKSkgZ2VuIC8vIG5vIG5lZWQgdG8gdGVzdCBmb3IgbnVsbC91bmRlZmluZWQgaWYgYW4gZW51bSAodXNlcyBzd2l0Y2gpXG4gICAgKFwiaWYoZCVzIT1udWxsKXtcIiwgcHJvcCk7IC8vICE9PSB1bmRlZmluZWQgJiYgIT09IG51bGxcbiAgICAgICAgZ2VuVmFsdWVQYXJ0aWFsX2Zyb21PYmplY3QoZ2VuLCBmaWVsZCwgLyogbm90IHNvcnRlZCAqLyBpLCBwcm9wKTtcbiAgICAgICAgICAgIGlmICghKGZpZWxkLnJlc29sdmVkVHlwZSBpbnN0YW5jZW9mIEVudW0pKSBnZW5cbiAgICAoXCJ9XCIpO1xuICAgICAgICB9XG4gICAgfSByZXR1cm4gZ2VuXG4gICAgKFwicmV0dXJuIG1cIik7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSwgYmxvY2stc2NvcGVkLXZhciwgbm8tcmVkZWNsYXJlICovXG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHBhcnRpYWwgdmFsdWUgdG9PYmplY3QgY29udmVydGVyLlxuICogQHBhcmFtIHtDb2RlZ2VufSBnZW4gQ29kZWdlbiBpbnN0YW5jZVxuICogQHBhcmFtIHtGaWVsZH0gZmllbGQgUmVmbGVjdGVkIGZpZWxkXG4gKiBAcGFyYW0ge251bWJlcn0gZmllbGRJbmRleCBGaWVsZCBpbmRleFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgcmVmZXJlbmNlXG4gKiBAcmV0dXJucyB7Q29kZWdlbn0gQ29kZWdlbiBpbnN0YW5jZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBnZW5WYWx1ZVBhcnRpYWxfdG9PYmplY3QoZ2VuLCBmaWVsZCwgZmllbGRJbmRleCwgcHJvcCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lLCBibG9jay1zY29wZWQtdmFyLCBuby1yZWRlY2xhcmUgKi9cbiAgICBpZiAoZmllbGQucmVzb2x2ZWRUeXBlKSB7XG4gICAgICAgIGlmIChmaWVsZC5yZXNvbHZlZFR5cGUgaW5zdGFuY2VvZiBFbnVtKSBnZW5cbiAgICAgICAgICAgIChcImQlcz1vLmVudW1zPT09U3RyaW5nPyh0eXBlc1slaV0udmFsdWVzW20lc109PT11bmRlZmluZWQ/bSVzOnR5cGVzWyVpXS52YWx1ZXNbbSVzXSk6bSVzXCIsIHByb3AsIGZpZWxkSW5kZXgsIHByb3AsIHByb3AsIGZpZWxkSW5kZXgsIHByb3AsIHByb3ApO1xuICAgICAgICBlbHNlIGdlblxuICAgICAgICAgICAgKFwiZCVzPXR5cGVzWyVpXS50b09iamVjdChtJXMsbylcIiwgcHJvcCwgZmllbGRJbmRleCwgcHJvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGlzVW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiZG91YmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwiZmxvYXRcIjogZ2VuXG4gICAgICAgICAgICAoXCJkJXM9by5qc29uJiYhaXNGaW5pdGUobSVzKT9TdHJpbmcobSVzKTptJXNcIiwgcHJvcCwgcHJvcCwgcHJvcCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidWludDY0XCI6XG4gICAgICAgICAgICAgICAgaXNVbnNpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgICBjYXNlIFwiaW50NjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzaW50NjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmaXhlZDY0XCI6XG4gICAgICAgICAgICBjYXNlIFwic2ZpeGVkNjRcIjogZ2VuXG4gICAgICAgICAgICAoXCJpZih0eXBlb2YgbSVzPT09XFxcIm51bWJlclxcXCIpXCIsIHByb3ApXG4gICAgICAgICAgICAgICAgKFwiZCVzPW8ubG9uZ3M9PT1TdHJpbmc/U3RyaW5nKG0lcyk6bSVzXCIsIHByb3AsIHByb3AsIHByb3ApXG4gICAgICAgICAgICAoXCJlbHNlXCIpIC8vIExvbmctbGlrZVxuICAgICAgICAgICAgICAgIChcImQlcz1vLmxvbmdzPT09U3RyaW5nP3V0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtJXMpOm8ubG9uZ3M9PT1OdW1iZXI/bmV3IHV0aWwuTG9uZ0JpdHMobSVzLmxvdz4+PjAsbSVzLmhpZ2g+Pj4wKS50b051bWJlciglcyk6bSVzXCIsIHByb3AsIHByb3AsIHByb3AsIHByb3AsIGlzVW5zaWduZWQgPyBcInRydWVcIjogXCJcIiwgcHJvcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYnl0ZXNcIjogZ2VuXG4gICAgICAgICAgICAoXCJkJXM9by5ieXRlcz09PVN0cmluZz91dGlsLmJhc2U2NC5lbmNvZGUobSVzLDAsbSVzLmxlbmd0aCk6by5ieXRlcz09PUFycmF5P0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG0lcyk6bSVzXCIsIHByb3AsIHByb3AsIHByb3AsIHByb3AsIHByb3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogZ2VuXG4gICAgICAgICAgICAoXCJkJXM9bSVzXCIsIHByb3AsIHByb3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW47XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSwgYmxvY2stc2NvcGVkLXZhciwgbm8tcmVkZWNsYXJlICovXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcnVudGltZSBtZXNzYWdlIHRvIHBsYWluIG9iamVjdCBjb252ZXJ0ZXIgc3BlY2lmaWMgdG8gdGhlIHNwZWNpZmllZCBtZXNzYWdlIHR5cGUuXG4gKiBAcGFyYW0ge1R5cGV9IG10eXBlIE1lc3NhZ2UgdHlwZVxuICogQHJldHVybnMge0NvZGVnZW59IENvZGVnZW4gaW5zdGFuY2VcbiAqL1xuY29udmVydGVyLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobXR5cGUpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSwgYmxvY2stc2NvcGVkLXZhciwgbm8tcmVkZWNsYXJlICovXG4gICAgdmFyIGZpZWxkcyA9IG10eXBlLmZpZWxkc0FycmF5LnNsaWNlKCkuc29ydCh1dGlsLmNvbXBhcmVGaWVsZHNCeUlkKTtcbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB1dGlsLmNvZGVnZW4oKShcInJldHVybiB7fVwiKTtcbiAgICB2YXIgZ2VuID0gdXRpbC5jb2RlZ2VuKFtcIm1cIiwgXCJvXCJdLCBtdHlwZS5uYW1lICsgXCIkdG9PYmplY3RcIilcbiAgICAoXCJpZighbylcIilcbiAgICAgICAgKFwibz17fVwiKVxuICAgIChcInZhciBkPXt9XCIpO1xuXG4gICAgdmFyIHJlcGVhdGVkRmllbGRzID0gW10sXG4gICAgICAgIG1hcEZpZWxkcyA9IFtdLFxuICAgICAgICBub3JtYWxGaWVsZHMgPSBbXSxcbiAgICAgICAgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBmaWVsZHMubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmICghZmllbGRzW2ldLnBhcnRPZilcbiAgICAgICAgICAgICggZmllbGRzW2ldLnJlc29sdmUoKS5yZXBlYXRlZCA/IHJlcGVhdGVkRmllbGRzXG4gICAgICAgICAgICA6IGZpZWxkc1tpXS5tYXAgPyBtYXBGaWVsZHNcbiAgICAgICAgICAgIDogbm9ybWFsRmllbGRzKS5wdXNoKGZpZWxkc1tpXSk7XG5cbiAgICBpZiAocmVwZWF0ZWRGaWVsZHMubGVuZ3RoKSB7IGdlblxuICAgIChcImlmKG8uYXJyYXlzfHxvLmRlZmF1bHRzKXtcIik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZXBlYXRlZEZpZWxkcy5sZW5ndGg7ICsraSkgZ2VuXG4gICAgICAgIChcImQlcz1bXVwiLCB1dGlsLnNhZmVQcm9wKHJlcGVhdGVkRmllbGRzW2ldLm5hbWUpKTtcbiAgICAgICAgZ2VuXG4gICAgKFwifVwiKTtcbiAgICB9XG5cbiAgICBpZiAobWFwRmllbGRzLmxlbmd0aCkgeyBnZW5cbiAgICAoXCJpZihvLm9iamVjdHN8fG8uZGVmYXVsdHMpe1wiKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1hcEZpZWxkcy5sZW5ndGg7ICsraSkgZ2VuXG4gICAgICAgIChcImQlcz17fVwiLCB1dGlsLnNhZmVQcm9wKG1hcEZpZWxkc1tpXS5uYW1lKSk7XG4gICAgICAgIGdlblxuICAgIChcIn1cIik7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbEZpZWxkcy5sZW5ndGgpIHsgZ2VuXG4gICAgKFwiaWYoby5kZWZhdWx0cyl7XCIpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9ybWFsRmllbGRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSBub3JtYWxGaWVsZHNbaV0sXG4gICAgICAgICAgICAgICAgcHJvcCAgPSB1dGlsLnNhZmVQcm9wKGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpZWxkLnJlc29sdmVkVHlwZSBpbnN0YW5jZW9mIEVudW0pIGdlblxuICAgICAgICAoXCJkJXM9by5lbnVtcz09PVN0cmluZz8lajolalwiLCBwcm9wLCBmaWVsZC5yZXNvbHZlZFR5cGUudmFsdWVzQnlJZFtmaWVsZC50eXBlRGVmYXVsdF0sIGZpZWxkLnR5cGVEZWZhdWx0KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLmxvbmcpIGdlblxuICAgICAgICAoXCJpZih1dGlsLkxvbmcpe1wiKVxuICAgICAgICAgICAgKFwidmFyIG49bmV3IHV0aWwuTG9uZyglaSwlaSwlailcIiwgZmllbGQudHlwZURlZmF1bHQubG93LCBmaWVsZC50eXBlRGVmYXVsdC5oaWdoLCBmaWVsZC50eXBlRGVmYXVsdC51bnNpZ25lZClcbiAgICAgICAgICAgIChcImQlcz1vLmxvbmdzPT09U3RyaW5nP24udG9TdHJpbmcoKTpvLmxvbmdzPT09TnVtYmVyP24udG9OdW1iZXIoKTpuXCIsIHByb3ApXG4gICAgICAgIChcIn1lbHNlXCIpXG4gICAgICAgICAgICAoXCJkJXM9by5sb25ncz09PVN0cmluZz8lajolaVwiLCBwcm9wLCBmaWVsZC50eXBlRGVmYXVsdC50b1N0cmluZygpLCBmaWVsZC50eXBlRGVmYXVsdC50b051bWJlcigpKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLmJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5RGVmYXVsdCA9IFwiW1wiICsgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZmllbGQudHlwZURlZmF1bHQpLmpvaW4oXCIsXCIpICsgXCJdXCI7XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgIChcImlmKG8uYnl0ZXM9PT1TdHJpbmcpZCVzPSVqXCIsIHByb3AsIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBmaWVsZC50eXBlRGVmYXVsdCkpXG4gICAgICAgIChcImVsc2V7XCIpXG4gICAgICAgICAgICAoXCJkJXM9JXNcIiwgcHJvcCwgYXJyYXlEZWZhdWx0KVxuICAgICAgICAgICAgKFwiaWYoby5ieXRlcyE9PUFycmF5KWQlcz11dGlsLm5ld0J1ZmZlcihkJXMpXCIsIHByb3AsIHByb3ApXG4gICAgICAgIChcIn1cIik7XG4gICAgICAgICAgICB9IGVsc2UgZ2VuXG4gICAgICAgIChcImQlcz0lalwiLCBwcm9wLCBmaWVsZC50eXBlRGVmYXVsdCk7IC8vIGFsc28gbWVzc2FnZXMgKD1udWxsKVxuICAgICAgICB9IGdlblxuICAgIChcIn1cIik7XG4gICAgfVxuICAgIHZhciBoYXNLczIgPSBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IGZpZWxkc1tpXSxcbiAgICAgICAgICAgIGluZGV4ID0gbXR5cGUuX2ZpZWxkc0FycmF5LmluZGV4T2YoZmllbGQpLFxuICAgICAgICAgICAgcHJvcCAgPSB1dGlsLnNhZmVQcm9wKGZpZWxkLm5hbWUpO1xuICAgICAgICBpZiAoZmllbGQubWFwKSB7XG4gICAgICAgICAgICBpZiAoIWhhc0tzMikgeyBoYXNLczIgPSB0cnVlOyBnZW5cbiAgICAoXCJ2YXIga3MyXCIpO1xuICAgICAgICAgICAgfSBnZW5cbiAgICAoXCJpZihtJXMmJihrczI9T2JqZWN0LmtleXMobSVzKSkubGVuZ3RoKXtcIiwgcHJvcCwgcHJvcClcbiAgICAgICAgKFwiZCVzPXt9XCIsIHByb3ApXG4gICAgICAgIChcImZvcih2YXIgaj0wO2o8a3MyLmxlbmd0aDsrK2ope1wiKTtcbiAgICAgICAgICAgIGdlblZhbHVlUGFydGlhbF90b09iamVjdChnZW4sIGZpZWxkLCAvKiBzb3J0ZWQgKi8gaW5kZXgsIHByb3AgKyBcIltrczJbal1dXCIpXG4gICAgICAgIChcIn1cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQucmVwZWF0ZWQpIHsgZ2VuXG4gICAgKFwiaWYobSVzJiZtJXMubGVuZ3RoKXtcIiwgcHJvcCwgcHJvcClcbiAgICAgICAgKFwiZCVzPVtdXCIsIHByb3ApXG4gICAgICAgIChcImZvcih2YXIgaj0wO2o8bSVzLmxlbmd0aDsrK2ope1wiLCBwcm9wKTtcbiAgICAgICAgICAgIGdlblZhbHVlUGFydGlhbF90b09iamVjdChnZW4sIGZpZWxkLCAvKiBzb3J0ZWQgKi8gaW5kZXgsIHByb3AgKyBcIltqXVwiKVxuICAgICAgICAoXCJ9XCIpO1xuICAgICAgICB9IGVsc2UgeyBnZW5cbiAgICAoXCJpZihtJXMhPW51bGwmJm0uaGFzT3duUHJvcGVydHkoJWopKXtcIiwgcHJvcCwgZmllbGQubmFtZSk7IC8vICE9PSB1bmRlZmluZWQgJiYgIT09IG51bGxcbiAgICAgICAgZ2VuVmFsdWVQYXJ0aWFsX3RvT2JqZWN0KGdlbiwgZmllbGQsIC8qIHNvcnRlZCAqLyBpbmRleCwgcHJvcCk7XG4gICAgICAgIGlmIChmaWVsZC5wYXJ0T2YpIGdlblxuICAgICAgICAoXCJpZihvLm9uZW9mcylcIilcbiAgICAgICAgICAgIChcImQlcz0lalwiLCB1dGlsLnNhZmVQcm9wKGZpZWxkLnBhcnRPZi5uYW1lKSwgZmllbGQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2VuXG4gICAgKFwifVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGdlblxuICAgIChcInJldHVybiBkXCIpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUsIGJsb2NrLXNjb3BlZC12YXIsIG5vLXJlZGVjbGFyZSAqL1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogV3JhcHBlcnMgZm9yIGNvbW1vbiB0eXBlcy5cbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxJV3JhcHBlcj59XG4gKiBAY29uc3RcbiAqL1xudmFyIHdyYXBwZXJzID0gZXhwb3J0cztcblxudmFyIE1lc3NhZ2UgPSByZXF1aXJlKFwiLi9tZXNzYWdlXCIpO1xuXG4vKipcbiAqIEZyb20gb2JqZWN0IGNvbnZlcnRlciBwYXJ0IG9mIGFuIHtAbGluayBJV3JhcHBlcn0uXG4gKiBAdHlwZWRlZiBXcmFwcGVyRnJvbU9iamVjdENvbnZlcnRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICogQHJldHVybnMge01lc3NhZ2U8e30+fSBNZXNzYWdlIGluc3RhbmNlXG4gKiBAdGhpcyBUeXBlXG4gKi9cblxuLyoqXG4gKiBUbyBvYmplY3QgY29udmVydGVyIHBhcnQgb2YgYW4ge0BsaW5rIElXcmFwcGVyfS5cbiAqIEB0eXBlZGVmIFdyYXBwZXJUb09iamVjdENvbnZlcnRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtNZXNzYWdlPHt9Pn0gbWVzc2FnZSBNZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge0lDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAqIEB0aGlzIFR5cGVcbiAqL1xuXG4vKipcbiAqIENvbW1vbiB0eXBlIHdyYXBwZXIgcGFydCBvZiB7QGxpbmsgd3JhcHBlcnN9LlxuICogQGludGVyZmFjZSBJV3JhcHBlclxuICogQHByb3BlcnR5IHtXcmFwcGVyRnJvbU9iamVjdENvbnZlcnRlcn0gW2Zyb21PYmplY3RdIEZyb20gb2JqZWN0IGNvbnZlcnRlclxuICogQHByb3BlcnR5IHtXcmFwcGVyVG9PYmplY3RDb252ZXJ0ZXJ9IFt0b09iamVjdF0gVG8gb2JqZWN0IGNvbnZlcnRlclxuICovXG5cbi8vIEN1c3RvbSB3cmFwcGVyIGZvciBBbnlcbndyYXBwZXJzW1wiLmdvb2dsZS5wcm90b2J1Zi5BbnlcIl0gPSB7XG5cbiAgICBmcm9tT2JqZWN0OiBmdW5jdGlvbihvYmplY3QpIHtcblxuICAgICAgICAvLyB1bndyYXAgdmFsdWUgdHlwZSBpZiBtYXBwZWRcbiAgICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3RbXCJAdHlwZVwiXSkge1xuICAgICAgICAgICAgIC8vIE9ubHkgdXNlIGZ1bGx5IHF1YWxpZmllZCB0eXBlIG5hbWUgYWZ0ZXIgdGhlIGxhc3QgJy8nXG4gICAgICAgICAgICB2YXIgbmFtZSA9IG9iamVjdFtcIkB0eXBlXCJdLnN1YnN0cmluZyhvYmplY3RbXCJAdHlwZVwiXS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgICAgICAgIHZhciB0eXBlID0gdGhpcy5sb29rdXAobmFtZSk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBlX3VybCBkb2VzIG5vdCBhY2NlcHQgbGVhZGluZyBcIi5cIlxuICAgICAgICAgICAgICAgIHZhciB0eXBlX3VybCA9IG9iamVjdFtcIkB0eXBlXCJdLmNoYXJBdCgwKSA9PT0gXCIuXCIgP1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RbXCJAdHlwZVwiXS5zbGljZSgxKSA6IG9iamVjdFtcIkB0eXBlXCJdO1xuICAgICAgICAgICAgICAgIC8vIHR5cGVfdXJsIHByZWZpeCBpcyBvcHRpb25hbCwgYnV0IHBhdGggc2VwZXJhdG9yIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVfdXJsLmluZGV4T2YoXCIvXCIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlX3VybCA9IFwiL1wiICsgdHlwZV91cmw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGVfdXJsOiB0eXBlX3VybCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHR5cGUuZW5jb2RlKHR5cGUuZnJvbU9iamVjdChvYmplY3QpKS5maW5pc2goKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbU9iamVjdChvYmplY3QpO1xuICAgIH0sXG5cbiAgICB0b09iamVjdDogZnVuY3Rpb24obWVzc2FnZSwgb3B0aW9ucykge1xuXG4gICAgICAgIC8vIERlZmF1bHQgcHJlZml4XG4gICAgICAgIHZhciBnb29nbGVBcGkgPSBcInR5cGUuZ29vZ2xlYXBpcy5jb20vXCI7XG4gICAgICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgICAgICB2YXIgbmFtZSA9IFwiXCI7XG5cbiAgICAgICAgLy8gZGVjb2RlIHZhbHVlIGlmIHJlcXVlc3RlZCBhbmQgdW5tYXBwZWRcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5qc29uICYmIG1lc3NhZ2UudHlwZV91cmwgJiYgbWVzc2FnZS52YWx1ZSkge1xuICAgICAgICAgICAgLy8gT25seSB1c2UgZnVsbHkgcXVhbGlmaWVkIHR5cGUgbmFtZSBhZnRlciB0aGUgbGFzdCAnLydcbiAgICAgICAgICAgIG5hbWUgPSBtZXNzYWdlLnR5cGVfdXJsLnN1YnN0cmluZyhtZXNzYWdlLnR5cGVfdXJsLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuICAgICAgICAgICAgLy8gU2VwYXJhdGUgdGhlIHByZWZpeCB1c2VkXG4gICAgICAgICAgICBwcmVmaXggPSBtZXNzYWdlLnR5cGVfdXJsLnN1YnN0cmluZygwLCBtZXNzYWdlLnR5cGVfdXJsLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodHlwZSlcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdHlwZS5kZWNvZGUobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3cmFwIHZhbHVlIGlmIHVubWFwcGVkXG4gICAgICAgIGlmICghKG1lc3NhZ2UgaW5zdGFuY2VvZiB0aGlzLmN0b3IpICYmIG1lc3NhZ2UgaW5zdGFuY2VvZiBNZXNzYWdlKSB7XG4gICAgICAgICAgICB2YXIgb2JqZWN0ID0gbWVzc2FnZS4kdHlwZS50b09iamVjdChtZXNzYWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlTmFtZSA9IG1lc3NhZ2UuJHR5cGUuZnVsbE5hbWVbMF0gPT09IFwiLlwiID9cbiAgICAgICAgICAgICAgICBtZXNzYWdlLiR0eXBlLmZ1bGxOYW1lLnNsaWNlKDEpIDogbWVzc2FnZS4kdHlwZS5mdWxsTmFtZTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gdHlwZS5nb29nbGVhcGlzLmNvbSBwcmVmaXggaWYgbm8gcHJlZml4IGlzIHVzZWRcbiAgICAgICAgICAgIGlmIChwcmVmaXggPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBwcmVmaXggPSBnb29nbGVBcGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuYW1lID0gcHJlZml4ICsgbWVzc2FnZU5hbWU7XG4gICAgICAgICAgICBvYmplY3RbXCJAdHlwZVwiXSA9IG5hbWU7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucyk7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFR5cGU7XG5cbi8vIGV4dGVuZHMgTmFtZXNwYWNlXG52YXIgTmFtZXNwYWNlID0gcmVxdWlyZShcIi4vbmFtZXNwYWNlXCIpO1xuKChUeXBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTmFtZXNwYWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gVHlwZSkuY2xhc3NOYW1lID0gXCJUeXBlXCI7XG5cbnZhciBFbnVtICAgICAgPSByZXF1aXJlKFwiLi9lbnVtXCIpLFxuICAgIE9uZU9mICAgICA9IHJlcXVpcmUoXCIuL29uZW9mXCIpLFxuICAgIEZpZWxkICAgICA9IHJlcXVpcmUoXCIuL2ZpZWxkXCIpLFxuICAgIE1hcEZpZWxkICA9IHJlcXVpcmUoXCIuL21hcGZpZWxkXCIpLFxuICAgIFNlcnZpY2UgICA9IHJlcXVpcmUoXCIuL3NlcnZpY2VcIiksXG4gICAgTWVzc2FnZSAgID0gcmVxdWlyZShcIi4vbWVzc2FnZVwiKSxcbiAgICBSZWFkZXIgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIiksXG4gICAgV3JpdGVyICAgID0gcmVxdWlyZShcIi4vd3JpdGVyXCIpLFxuICAgIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWxcIiksXG4gICAgZW5jb2RlciAgID0gcmVxdWlyZShcIi4vZW5jb2RlclwiKSxcbiAgICBkZWNvZGVyICAgPSByZXF1aXJlKFwiLi9kZWNvZGVyXCIpLFxuICAgIHZlcmlmaWVyICA9IHJlcXVpcmUoXCIuL3ZlcmlmaWVyXCIpLFxuICAgIGNvbnZlcnRlciA9IHJlcXVpcmUoXCIuL2NvbnZlcnRlclwiKSxcbiAgICB3cmFwcGVycyAgPSByZXF1aXJlKFwiLi93cmFwcGVyc1wiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHJlZmxlY3RlZCBtZXNzYWdlIHR5cGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFJlZmxlY3RlZCBtZXNzYWdlIHR5cGUuXG4gKiBAZXh0ZW5kcyBOYW1lc3BhY2VCYXNlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE1lc3NhZ2UgbmFtZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW29wdGlvbnNdIERlY2xhcmVkIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gVHlwZShuYW1lLCBvcHRpb25zKSB7XG4gICAgTmFtZXNwYWNlLmNhbGwodGhpcywgbmFtZSwgb3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGZpZWxkcy5cbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsRmllbGQ+fVxuICAgICAqL1xuICAgIHRoaXMuZmllbGRzID0ge307ICAvLyB0b0pTT04sIG1hcmtlclxuXG4gICAgLyoqXG4gICAgICogT25lb2ZzIGRlY2xhcmVkIHdpdGhpbiB0aGlzIG5hbWVzcGFjZSwgaWYgYW55LlxuICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxPbmVPZj59XG4gICAgICovXG4gICAgdGhpcy5vbmVvZnMgPSB1bmRlZmluZWQ7IC8vIHRvSlNPTlxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5zaW9uIHJhbmdlcywgaWYgYW55LlxuICAgICAqIEB0eXBlIHtudW1iZXJbXVtdfVxuICAgICAqL1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHVuZGVmaW5lZDsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBSZXNlcnZlZCByYW5nZXMsIGlmIGFueS5cbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcltdfHN0cmluZz59XG4gICAgICovXG4gICAgdGhpcy5yZXNlcnZlZCA9IHVuZGVmaW5lZDsgLy8gdG9KU09OXG5cbiAgICAvKj9cbiAgICAgKiBXaGV0aGVyIHRoaXMgdHlwZSBpcyBhIGxlZ2FjeSBncm91cC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnx1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5ncm91cCA9IHVuZGVmaW5lZDsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBDYWNoZWQgZmllbGRzIGJ5IGlkLlxuICAgICAqIEB0eXBlIHtPYmplY3QuPG51bWJlcixGaWVsZD58bnVsbH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZpZWxkc0J5SWQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGVkIGZpZWxkcyBhcyBhbiBhcnJheS5cbiAgICAgKiBAdHlwZSB7RmllbGRbXXxudWxsfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZmllbGRzQXJyYXkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGVkIG9uZW9mcyBhcyBhbiBhcnJheS5cbiAgICAgKiBAdHlwZSB7T25lT2ZbXXxudWxsfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fb25lb2ZzQXJyYXkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGVkIGNvbnN0cnVjdG9yLlxuICAgICAqIEB0eXBlIHtDb25zdHJ1Y3Rvcjx7fT59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9jdG9yID0gbnVsbDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHlwZS5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgZmllbGRzIGJ5IGlkLlxuICAgICAqIEBuYW1lIFR5cGUjZmllbGRzQnlJZFxuICAgICAqIEB0eXBlIHtPYmplY3QuPG51bWJlcixGaWVsZD59XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZmllbGRzQnlJZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLl9maWVsZHNCeUlkKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWVsZHNCeUlkO1xuXG4gICAgICAgICAgICB0aGlzLl9maWVsZHNCeUlkID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKSwgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHRoaXMuZmllbGRzW25hbWVzW2ldXSxcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBmaWVsZC5pZDtcblxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWVsZHNCeUlkW2lkXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJkdXBsaWNhdGUgaWQgXCIgKyBpZCArIFwiIGluIFwiICsgdGhpcyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maWVsZHNCeUlkW2lkXSA9IGZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkc0J5SWQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmllbGRzIG9mIHRoaXMgbWVzc2FnZSBhcyBhbiBhcnJheSBmb3IgaXRlcmF0aW9uLlxuICAgICAqIEBuYW1lIFR5cGUjZmllbGRzQXJyYXlcbiAgICAgKiBAdHlwZSB7RmllbGRbXX1cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBmaWVsZHNBcnJheToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkc0FycmF5IHx8ICh0aGlzLl9maWVsZHNBcnJheSA9IHV0aWwudG9BcnJheSh0aGlzLmZpZWxkcykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE9uZW9mcyBvZiB0aGlzIG1lc3NhZ2UgYXMgYW4gYXJyYXkgZm9yIGl0ZXJhdGlvbi5cbiAgICAgKiBAbmFtZSBUeXBlI29uZW9mc0FycmF5XG4gICAgICogQHR5cGUge09uZU9mW119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgb25lb2ZzQXJyYXk6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vbmVvZnNBcnJheSB8fCAodGhpcy5fb25lb2ZzQXJyYXkgPSB1dGlsLnRvQXJyYXkodGhpcy5vbmVvZnMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVnaXN0ZXJlZCBjb25zdHJ1Y3RvciwgaWYgYW55IHJlZ2lzdGVyZWQsIG90aGVyd2lzZSBhIGdlbmVyaWMgY29uc3RydWN0b3IuXG4gICAgICogQXNzaWduaW5nIGEgZnVuY3Rpb24gcmVwbGFjZXMgdGhlIGludGVybmFsIGNvbnN0cnVjdG9yLiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgZXh0ZW5kIHtAbGluayBNZXNzYWdlfSB5ZXQsIGl0cyBwcm90b3R5cGUgd2lsbCBiZSBzZXR1cCBhY2NvcmRpbmdseSBhbmQgc3RhdGljIG1ldGhvZHMgd2lsbCBiZSBwb3B1bGF0ZWQuIElmIGl0IGFscmVhZHkgZXh0ZW5kcyB7QGxpbmsgTWVzc2FnZX0sIGl0IHdpbGwganVzdCByZXBsYWNlIHRoZSBpbnRlcm5hbCBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAbmFtZSBUeXBlI2N0b3JcbiAgICAgKiBAdHlwZSB7Q29uc3RydWN0b3I8e30+fVxuICAgICAqL1xuICAgIGN0b3I6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdG9yIHx8ICh0aGlzLmN0b3IgPSBUeXBlLmdlbmVyYXRlQ29uc3RydWN0b3IodGhpcykoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oY3Rvcikge1xuXG4gICAgICAgICAgICAvLyBFbnN1cmUgcHJvcGVyIHByb3RvdHlwZVxuICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IGN0b3IucHJvdG90eXBlO1xuICAgICAgICAgICAgaWYgKCEocHJvdG90eXBlIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAoY3Rvci5wcm90b3R5cGUgPSBuZXcgTWVzc2FnZSgpKS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gICAgICAgICAgICAgICAgdXRpbC5tZXJnZShjdG9yLnByb3RvdHlwZSwgcHJvdG90eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2xhc3NlcyBhbmQgbWVzc2FnZXMgcmVmZXJlbmNlIHRoZWlyIHJlZmxlY3RlZCB0eXBlXG4gICAgICAgICAgICBjdG9yLiR0eXBlID0gY3Rvci5wcm90b3R5cGUuJHR5cGUgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBNaXggaW4gc3RhdGljIG1ldGhvZHNcbiAgICAgICAgICAgIHV0aWwubWVyZ2UoY3RvciwgTWVzc2FnZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2N0b3IgPSBjdG9yO1xuXG4gICAgICAgICAgICAvLyBNZXNzYWdlcyBoYXZlIG5vbi1lbnVtZXJhYmxlIGRlZmF1bHQgdmFsdWVzIG9uIHRoZWlyIHByb3RvdHlwZVxuICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgZm9yICg7IGkgPCAvKiBpbml0aWFsaXplcyAqLyB0aGlzLmZpZWxkc0FycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc0FycmF5W2ldLnJlc29sdmUoKTsgLy8gZW5zdXJlcyBhIHByb3BlciB2YWx1ZVxuXG4gICAgICAgICAgICAvLyBNZXNzYWdlcyBoYXZlIG5vbi1lbnVtZXJhYmxlIGdldHRlcnMgYW5kIHNldHRlcnMgZm9yIGVhY2ggdmlydHVhbCBvbmVvZiBmaWVsZFxuICAgICAgICAgICAgdmFyIGN0b3JQcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgLyogaW5pdGlhbGl6ZXMgKi8gdGhpcy5vbmVvZnNBcnJheS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjdG9yUHJvcGVydGllc1t0aGlzLl9vbmVvZnNBcnJheVtpXS5yZXNvbHZlKCkubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogdXRpbC5vbmVPZkdldHRlcih0aGlzLl9vbmVvZnNBcnJheVtpXS5vbmVvZiksXG4gICAgICAgICAgICAgICAgICAgIHNldDogdXRpbC5vbmVPZlNldHRlcih0aGlzLl9vbmVvZnNBcnJheVtpXS5vbmVvZilcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGkpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY3Rvci5wcm90b3R5cGUsIGN0b3JQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gKiBAcGFyYW0ge1R5cGV9IG10eXBlIE1lc3NhZ2UgdHlwZVxuICogQHJldHVybnMge0NvZGVnZW59IENvZGVnZW4gaW5zdGFuY2VcbiAqL1xuVHlwZS5nZW5lcmF0ZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gZ2VuZXJhdGVDb25zdHJ1Y3RvcihtdHlwZSkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lICovXG4gICAgdmFyIGdlbiA9IHV0aWwuY29kZWdlbihbXCJwXCJdLCBtdHlwZS5uYW1lKTtcbiAgICAvLyBleHBsaWNpdGx5IGluaXRpYWxpemUgbXV0YWJsZSBvYmplY3QvYXJyYXkgZmllbGRzIHNvIHRoYXQgdGhlc2UgYXJlbid0IGp1c3QgaW5oZXJpdGVkIGZyb20gdGhlIHByb3RvdHlwZVxuICAgIGZvciAodmFyIGkgPSAwLCBmaWVsZDsgaSA8IG10eXBlLmZpZWxkc0FycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICBpZiAoKGZpZWxkID0gbXR5cGUuX2ZpZWxkc0FycmF5W2ldKS5tYXApIGdlblxuICAgICAgICAgICAgKFwidGhpcyVzPXt9XCIsIHV0aWwuc2FmZVByb3AoZmllbGQubmFtZSkpO1xuICAgICAgICBlbHNlIGlmIChmaWVsZC5yZXBlYXRlZCkgZ2VuXG4gICAgICAgICAgICAoXCJ0aGlzJXM9W11cIiwgdXRpbC5zYWZlUHJvcChmaWVsZC5uYW1lKSk7XG4gICAgcmV0dXJuIGdlblxuICAgIChcImlmKHApZm9yKHZhciBrcz1PYmplY3Qua2V5cyhwKSxpPTA7aTxrcy5sZW5ndGg7KytpKWlmKHBba3NbaV1dIT1udWxsKVwiKSAvLyBvbWl0IHVuZGVmaW5lZCBvciBudWxsXG4gICAgICAgIChcInRoaXNba3NbaV1dPXBba3NbaV1dXCIpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUgKi9cbn07XG5cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUodHlwZSkge1xuICAgIHR5cGUuX2ZpZWxkc0J5SWQgPSB0eXBlLl9maWVsZHNBcnJheSA9IHR5cGUuX29uZW9mc0FycmF5ID0gbnVsbDtcbiAgICBkZWxldGUgdHlwZS5lbmNvZGU7XG4gICAgZGVsZXRlIHR5cGUuZGVjb2RlO1xuICAgIGRlbGV0ZSB0eXBlLnZlcmlmeTtcbiAgICByZXR1cm4gdHlwZTtcbn1cblxuLyoqXG4gKiBNZXNzYWdlIHR5cGUgZGVzY3JpcHRvci5cbiAqIEBpbnRlcmZhY2UgSVR5cGVcbiAqIEBleHRlbmRzIElOYW1lc3BhY2VcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsSU9uZU9mPn0gW29uZW9mc10gT25lb2YgZGVzY3JpcHRvcnNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsSUZpZWxkPn0gZmllbGRzIEZpZWxkIGRlc2NyaXB0b3JzXG4gKiBAcHJvcGVydHkge251bWJlcltdW119IFtleHRlbnNpb25zXSBFeHRlbnNpb24gcmFuZ2VzXG4gKiBAcHJvcGVydHkge0FycmF5LjxudW1iZXJbXXxzdHJpbmc+fSBbcmVzZXJ2ZWRdIFJlc2VydmVkIHJhbmdlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JvdXA9ZmFsc2VdIFdoZXRoZXIgYSBsZWdhY3kgZ3JvdXAgb3Igbm90XG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVzc2FnZSB0eXBlIGZyb20gYSBtZXNzYWdlIHR5cGUgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE1lc3NhZ2UgbmFtZVxuICogQHBhcmFtIHtJVHlwZX0ganNvbiBNZXNzYWdlIHR5cGUgZGVzY3JpcHRvclxuICogQHJldHVybnMge1R5cGV9IENyZWF0ZWQgbWVzc2FnZSB0eXBlXG4gKi9cblR5cGUuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihuYW1lLCBqc29uKSB7XG4gICAgdmFyIHR5cGUgPSBuZXcgVHlwZShuYW1lLCBqc29uLm9wdGlvbnMpO1xuICAgIHR5cGUuZXh0ZW5zaW9ucyA9IGpzb24uZXh0ZW5zaW9ucztcbiAgICB0eXBlLnJlc2VydmVkID0ganNvbi5yZXNlcnZlZDtcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhqc29uLmZpZWxkcyksXG4gICAgICAgIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpXG4gICAgICAgIHR5cGUuYWRkKFxuICAgICAgICAgICAgKCB0eXBlb2YganNvbi5maWVsZHNbbmFtZXNbaV1dLmtleVR5cGUgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gTWFwRmllbGQuZnJvbUpTT05cbiAgICAgICAgICAgIDogRmllbGQuZnJvbUpTT04gKShuYW1lc1tpXSwganNvbi5maWVsZHNbbmFtZXNbaV1dKVxuICAgICAgICApO1xuICAgIGlmIChqc29uLm9uZW9mcylcbiAgICAgICAgZm9yIChuYW1lcyA9IE9iamVjdC5rZXlzKGpzb24ub25lb2ZzKSwgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIHR5cGUuYWRkKE9uZU9mLmZyb21KU09OKG5hbWVzW2ldLCBqc29uLm9uZW9mc1tuYW1lc1tpXV0pKTtcbiAgICBpZiAoanNvbi5uZXN0ZWQpXG4gICAgICAgIGZvciAobmFtZXMgPSBPYmplY3Qua2V5cyhqc29uLm5lc3RlZCksIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBuZXN0ZWQgPSBqc29uLm5lc3RlZFtuYW1lc1tpXV07XG4gICAgICAgICAgICB0eXBlLmFkZCggLy8gbW9zdCB0byBsZWFzdCBsaWtlbHlcbiAgICAgICAgICAgICAgICAoIG5lc3RlZC5pZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBGaWVsZC5mcm9tSlNPTlxuICAgICAgICAgICAgICAgIDogbmVzdGVkLmZpZWxkcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBUeXBlLmZyb21KU09OXG4gICAgICAgICAgICAgICAgOiBuZXN0ZWQudmFsdWVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IEVudW0uZnJvbUpTT05cbiAgICAgICAgICAgICAgICA6IG5lc3RlZC5tZXRob2RzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IFNlcnZpY2UuZnJvbUpTT05cbiAgICAgICAgICAgICAgICA6IE5hbWVzcGFjZS5mcm9tSlNPTiApKG5hbWVzW2ldLCBuZXN0ZWQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgaWYgKGpzb24uZXh0ZW5zaW9ucyAmJiBqc29uLmV4dGVuc2lvbnMubGVuZ3RoKVxuICAgICAgICB0eXBlLmV4dGVuc2lvbnMgPSBqc29uLmV4dGVuc2lvbnM7XG4gICAgaWYgKGpzb24ucmVzZXJ2ZWQgJiYganNvbi5yZXNlcnZlZC5sZW5ndGgpXG4gICAgICAgIHR5cGUucmVzZXJ2ZWQgPSBqc29uLnJlc2VydmVkO1xuICAgIGlmIChqc29uLmdyb3VwKVxuICAgICAgICB0eXBlLmdyb3VwID0gdHJ1ZTtcbiAgICBpZiAoanNvbi5jb21tZW50KVxuICAgICAgICB0eXBlLmNvbW1lbnQgPSBqc29uLmNvbW1lbnQ7XG4gICAgaWYgKGpzb24uZWRpdGlvbilcbiAgICAgICAgdHlwZS5fZWRpdGlvbiA9IGpzb24uZWRpdGlvbjtcbiAgICB0eXBlLl9kZWZhdWx0RWRpdGlvbiA9IFwicHJvdG8zXCI7ICAvLyBGb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuXG4gICAgcmV0dXJuIHR5cGU7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbWVzc2FnZSB0eXBlIHRvIGEgbWVzc2FnZSB0eXBlIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge0lUb0pTT05PcHRpb25zfSBbdG9KU09OT3B0aW9uc10gSlNPTiBjb252ZXJzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtJVHlwZX0gTWVzc2FnZSB0eXBlIGRlc2NyaXB0b3JcbiAqL1xuVHlwZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKHRvSlNPTk9wdGlvbnMpIHtcbiAgICB2YXIgaW5oZXJpdGVkID0gTmFtZXNwYWNlLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLCB0b0pTT05PcHRpb25zKTtcbiAgICB2YXIga2VlcENvbW1lbnRzID0gdG9KU09OT3B0aW9ucyA/IEJvb2xlYW4odG9KU09OT3B0aW9ucy5rZWVwQ29tbWVudHMpIDogZmFsc2U7XG4gICAgcmV0dXJuIHV0aWwudG9PYmplY3QoW1xuICAgICAgICBcImVkaXRpb25cIiAgICAsIHRoaXMuX2VkaXRpb25Ub0pTT04oKSxcbiAgICAgICAgXCJvcHRpb25zXCIgICAgLCBpbmhlcml0ZWQgJiYgaW5oZXJpdGVkLm9wdGlvbnMgfHwgdW5kZWZpbmVkLFxuICAgICAgICBcIm9uZW9mc1wiICAgICAsIE5hbWVzcGFjZS5hcnJheVRvSlNPTih0aGlzLm9uZW9mc0FycmF5LCB0b0pTT05PcHRpb25zKSxcbiAgICAgICAgXCJmaWVsZHNcIiAgICAgLCBOYW1lc3BhY2UuYXJyYXlUb0pTT04odGhpcy5maWVsZHNBcnJheS5maWx0ZXIoZnVuY3Rpb24ob2JqKSB7IHJldHVybiAhb2JqLmRlY2xhcmluZ0ZpZWxkOyB9KSwgdG9KU09OT3B0aW9ucykgfHwge30sXG4gICAgICAgIFwiZXh0ZW5zaW9uc1wiICwgdGhpcy5leHRlbnNpb25zICYmIHRoaXMuZXh0ZW5zaW9ucy5sZW5ndGggPyB0aGlzLmV4dGVuc2lvbnMgOiB1bmRlZmluZWQsXG4gICAgICAgIFwicmVzZXJ2ZWRcIiAgICwgdGhpcy5yZXNlcnZlZCAmJiB0aGlzLnJlc2VydmVkLmxlbmd0aCA/IHRoaXMucmVzZXJ2ZWQgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiZ3JvdXBcIiAgICAgICwgdGhpcy5ncm91cCB8fCB1bmRlZmluZWQsXG4gICAgICAgIFwibmVzdGVkXCIgICAgICwgaW5oZXJpdGVkICYmIGluaGVyaXRlZC5uZXN0ZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICBcImNvbW1lbnRcIiAgICAsIGtlZXBDb21tZW50cyA/IHRoaXMuY29tbWVudCA6IHVuZGVmaW5lZFxuICAgIF0pO1xufTtcblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuVHlwZS5wcm90b3R5cGUucmVzb2x2ZUFsbCA9IGZ1bmN0aW9uIHJlc29sdmVBbGwoKSB7XG4gICAgaWYgKCF0aGlzLl9uZWVkc1JlY3Vyc2l2ZVJlc29sdmUpIHJldHVybiB0aGlzO1xuXG4gICAgTmFtZXNwYWNlLnByb3RvdHlwZS5yZXNvbHZlQWxsLmNhbGwodGhpcyk7XG4gICAgdmFyIG9uZW9mcyA9IHRoaXMub25lb2ZzQXJyYXk7IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgb25lb2ZzLmxlbmd0aClcbiAgICAgICAgb25lb2ZzW2krK10ucmVzb2x2ZSgpO1xuICAgIHZhciBmaWVsZHMgPSB0aGlzLmZpZWxkc0FycmF5LCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGZpZWxkcy5sZW5ndGgpXG4gICAgICAgIGZpZWxkc1tpKytdLnJlc29sdmUoKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cblR5cGUucHJvdG90eXBlLl9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUgPSBmdW5jdGlvbiBfcmVzb2x2ZUZlYXR1cmVzUmVjdXJzaXZlKGVkaXRpb24pIHtcbiAgICBpZiAoIXRoaXMuX25lZWRzUmVjdXJzaXZlRmVhdHVyZVJlc29sdXRpb24pIHJldHVybiB0aGlzO1xuXG4gICAgZWRpdGlvbiA9IHRoaXMuX2VkaXRpb24gfHwgZWRpdGlvbjtcblxuICAgIE5hbWVzcGFjZS5wcm90b3R5cGUuX3Jlc29sdmVGZWF0dXJlc1JlY3Vyc2l2ZS5jYWxsKHRoaXMsIGVkaXRpb24pO1xuICAgIHRoaXMub25lb2ZzQXJyYXkuZm9yRWFjaChvbmVvZiA9PiB7XG4gICAgICAgIG9uZW9mLl9yZXNvbHZlRmVhdHVyZXMoZWRpdGlvbik7XG4gICAgfSk7XG4gICAgdGhpcy5maWVsZHNBcnJheS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgZmllbGQuX3Jlc29sdmVGZWF0dXJlcyhlZGl0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cblR5cGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzW25hbWVdXG4gICAgICAgIHx8IHRoaXMub25lb2ZzICYmIHRoaXMub25lb2ZzW25hbWVdXG4gICAgICAgIHx8IHRoaXMubmVzdGVkICYmIHRoaXMubmVzdGVkW25hbWVdXG4gICAgICAgIHx8IG51bGw7XG59O1xuXG4vKipcbiAqIEFkZHMgYSBuZXN0ZWQgb2JqZWN0IHRvIHRoaXMgdHlwZS5cbiAqIEBwYXJhbSB7UmVmbGVjdGlvbk9iamVjdH0gb2JqZWN0IE5lc3RlZCBvYmplY3QgdG8gYWRkXG4gKiBAcmV0dXJucyB7VHlwZX0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGFyZ3VtZW50cyBhcmUgaW52YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFscmVhZHkgYSBuZXN0ZWQgb2JqZWN0IHdpdGggdGhpcyBuYW1lIG9yLCBpZiBhIGZpZWxkLCB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYSBmaWVsZCB3aXRoIHRoaXMgaWRcbiAqL1xuVHlwZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKG9iamVjdCkge1xuXG4gICAgaWYgKHRoaXMuZ2V0KG9iamVjdC5uYW1lKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJkdXBsaWNhdGUgbmFtZSAnXCIgKyBvYmplY3QubmFtZSArIFwiJyBpbiBcIiArIHRoaXMpO1xuXG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEZpZWxkICYmIG9iamVjdC5leHRlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBOT1RFOiBFeHRlbnNpb24gZmllbGRzIGFyZW4ndCBhY3R1YWwgZmllbGRzIG9uIHRoZSBkZWNsYXJpbmcgdHlwZSwgYnV0IG5lc3RlZCBvYmplY3RzLlxuICAgICAgICAvLyBUaGUgcm9vdCBvYmplY3QgdGFrZXMgY2FyZSBvZiBhZGRpbmcgZGlzdGluY3Qgc2lzdGVyLWZpZWxkcyB0byB0aGUgcmVzcGVjdGl2ZSBleHRlbmRlZFxuICAgICAgICAvLyB0eXBlIGluc3RlYWQuXG5cbiAgICAgICAgLy8gYXZvaWRzIGNhbGxpbmcgdGhlIGdldHRlciBpZiBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCdzIGNhbGxlZCBxdWl0ZSBmcmVxdWVudGx5XG4gICAgICAgIGlmICh0aGlzLl9maWVsZHNCeUlkID8gLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdGhpcy5fZmllbGRzQnlJZFtvYmplY3QuaWRdIDogdGhpcy5maWVsZHNCeUlkW29iamVjdC5pZF0pXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImR1cGxpY2F0ZSBpZCBcIiArIG9iamVjdC5pZCArIFwiIGluIFwiICsgdGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWRJZChvYmplY3QuaWQpKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJpZCBcIiArIG9iamVjdC5pZCArIFwiIGlzIHJlc2VydmVkIGluIFwiICsgdGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWROYW1lKG9iamVjdC5uYW1lKSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwibmFtZSAnXCIgKyBvYmplY3QubmFtZSArIFwiJyBpcyByZXNlcnZlZCBpbiBcIiArIHRoaXMpO1xuXG4gICAgICAgIGlmIChvYmplY3QucGFyZW50KVxuICAgICAgICAgICAgb2JqZWN0LnBhcmVudC5yZW1vdmUob2JqZWN0KTtcbiAgICAgICAgdGhpcy5maWVsZHNbb2JqZWN0Lm5hbWVdID0gb2JqZWN0O1xuICAgICAgICBvYmplY3QubWVzc2FnZSA9IHRoaXM7XG4gICAgICAgIG9iamVjdC5vbkFkZCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGNsZWFyQ2FjaGUodGhpcyk7XG4gICAgfVxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBPbmVPZikge1xuICAgICAgICBpZiAoIXRoaXMub25lb2ZzKVxuICAgICAgICAgICAgdGhpcy5vbmVvZnMgPSB7fTtcbiAgICAgICAgdGhpcy5vbmVvZnNbb2JqZWN0Lm5hbWVdID0gb2JqZWN0O1xuICAgICAgICBvYmplY3Qub25BZGQodGhpcyk7XG4gICAgICAgIHJldHVybiBjbGVhckNhY2hlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gTmFtZXNwYWNlLnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCBvYmplY3QpO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgbmVzdGVkIG9iamVjdCBmcm9tIHRoaXMgdHlwZS5cbiAqIEBwYXJhbSB7UmVmbGVjdGlvbk9iamVjdH0gb2JqZWN0IE5lc3RlZCBvYmplY3QgdG8gcmVtb3ZlXG4gKiBAcmV0dXJucyB7VHlwZX0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGFyZ3VtZW50cyBhcmUgaW52YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIGBvYmplY3RgIGlzIG5vdCBhIG1lbWJlciBvZiB0aGlzIHR5cGVcbiAqL1xuVHlwZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBGaWVsZCAmJiBvYmplY3QuZXh0ZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU2VlIFR5cGUjYWRkIGZvciB0aGUgcmVhc29uIHdoeSBleHRlbnNpb24gZmllbGRzIGFyZSBleGNsdWRlZCBoZXJlLlxuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXRoaXMuZmllbGRzIHx8IHRoaXMuZmllbGRzW29iamVjdC5uYW1lXSAhPT0gb2JqZWN0KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3Iob2JqZWN0ICsgXCIgaXMgbm90IGEgbWVtYmVyIG9mIFwiICsgdGhpcyk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRzW29iamVjdC5uYW1lXTtcbiAgICAgICAgb2JqZWN0LnBhcmVudCA9IG51bGw7XG4gICAgICAgIG9iamVjdC5vblJlbW92ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGNsZWFyQ2FjaGUodGhpcyk7XG4gICAgfVxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBPbmVPZikge1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXRoaXMub25lb2ZzIHx8IHRoaXMub25lb2ZzW29iamVjdC5uYW1lXSAhPT0gb2JqZWN0KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3Iob2JqZWN0ICsgXCIgaXMgbm90IGEgbWVtYmVyIG9mIFwiICsgdGhpcyk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMub25lb2ZzW29iamVjdC5uYW1lXTtcbiAgICAgICAgb2JqZWN0LnBhcmVudCA9IG51bGw7XG4gICAgICAgIG9iamVjdC5vblJlbW92ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGNsZWFyQ2FjaGUodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBOYW1lc3BhY2UucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMsIG9iamVjdCk7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgaWQgaXMgcmVzZXJ2ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gaWQgSWQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiByZXNlcnZlZCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xuVHlwZS5wcm90b3R5cGUuaXNSZXNlcnZlZElkID0gZnVuY3Rpb24gaXNSZXNlcnZlZElkKGlkKSB7XG4gICAgcmV0dXJuIE5hbWVzcGFjZS5pc1Jlc2VydmVkSWQodGhpcy5yZXNlcnZlZCwgaWQpO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIG5hbWUgaXMgcmVzZXJ2ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcmVzZXJ2ZWQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cblR5cGUucHJvdG90eXBlLmlzUmVzZXJ2ZWROYW1lID0gZnVuY3Rpb24gaXNSZXNlcnZlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiBOYW1lc3BhY2UuaXNSZXNlcnZlZE5hbWUodGhpcy5yZXNlcnZlZCwgbmFtZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbWVzc2FnZSBvZiB0aGlzIHR5cGUgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gKiBAcmV0dXJucyB7TWVzc2FnZTx7fT59IE1lc3NhZ2UgaW5zdGFuY2VcbiAqL1xuVHlwZS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMuY3Rvcihwcm9wZXJ0aWVzKTtcbn07XG5cbi8qKlxuICogU2V0cyB1cCB7QGxpbmsgVHlwZSNlbmNvZGV8ZW5jb2RlfSwge0BsaW5rIFR5cGUjZGVjb2RlfGRlY29kZX0gYW5kIHtAbGluayBUeXBlI3ZlcmlmeXx2ZXJpZnl9LlxuICogQHJldHVybnMge1R5cGV9IGB0aGlzYFxuICovXG5UeXBlLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uIHNldHVwKCkge1xuICAgIC8vIFNldHMgdXAgZXZlcnl0aGluZyBhdCBvbmNlIHNvIHRoYXQgdGhlIHByb3RvdHlwZSBjaGFpbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlLWV2YWx1YXRlZFxuICAgIC8vIG11bHRpcGxlIHRpbWVzIChWOCwgc29mdC1kZW9wdCBwcm90b3R5cGUtY2hlY2spLlxuXG4gICAgdmFyIGZ1bGxOYW1lID0gdGhpcy5mdWxsTmFtZSxcbiAgICAgICAgdHlwZXMgICAgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IC8qIGluaXRpYWxpemVzICovIHRoaXMuZmllbGRzQXJyYXkubGVuZ3RoOyArK2kpXG4gICAgICAgIHR5cGVzLnB1c2godGhpcy5fZmllbGRzQXJyYXlbaV0ucmVzb2x2ZSgpLnJlc29sdmVkVHlwZSk7XG5cbiAgICAvLyBSZXBsYWNlIHNldHVwIG1ldGhvZHMgd2l0aCB0eXBlLXNwZWNpZmljIGdlbmVyYXRlZCBmdW5jdGlvbnNcbiAgICB0aGlzLmVuY29kZSA9IGVuY29kZXIodGhpcykoe1xuICAgICAgICBXcml0ZXIgOiBXcml0ZXIsXG4gICAgICAgIHR5cGVzICA6IHR5cGVzLFxuICAgICAgICB1dGlsICAgOiB1dGlsXG4gICAgfSk7XG4gICAgdGhpcy5kZWNvZGUgPSBkZWNvZGVyKHRoaXMpKHtcbiAgICAgICAgUmVhZGVyIDogUmVhZGVyLFxuICAgICAgICB0eXBlcyAgOiB0eXBlcyxcbiAgICAgICAgdXRpbCAgIDogdXRpbFxuICAgIH0pO1xuICAgIHRoaXMudmVyaWZ5ID0gdmVyaWZpZXIodGhpcykoe1xuICAgICAgICB0eXBlcyA6IHR5cGVzLFxuICAgICAgICB1dGlsICA6IHV0aWxcbiAgICB9KTtcbiAgICB0aGlzLmZyb21PYmplY3QgPSBjb252ZXJ0ZXIuZnJvbU9iamVjdCh0aGlzKSh7XG4gICAgICAgIHR5cGVzIDogdHlwZXMsXG4gICAgICAgIHV0aWwgIDogdXRpbFxuICAgIH0pO1xuICAgIHRoaXMudG9PYmplY3QgPSBjb252ZXJ0ZXIudG9PYmplY3QodGhpcykoe1xuICAgICAgICB0eXBlcyA6IHR5cGVzLFxuICAgICAgICB1dGlsICA6IHV0aWxcbiAgICB9KTtcblxuICAgIC8vIEluamVjdCBjdXN0b20gd3JhcHBlcnMgZm9yIGNvbW1vbiB0eXBlc1xuICAgIHZhciB3cmFwcGVyID0gd3JhcHBlcnNbZnVsbE5hbWVdO1xuICAgIGlmICh3cmFwcGVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFRoaXMgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAvLyBpZiAod3JhcHBlci5mcm9tT2JqZWN0KSB7XG4gICAgICAgICAgICBvcmlnaW5hbFRoaXMuZnJvbU9iamVjdCA9IHRoaXMuZnJvbU9iamVjdDtcbiAgICAgICAgICAgIHRoaXMuZnJvbU9iamVjdCA9IHdyYXBwZXIuZnJvbU9iamVjdC5iaW5kKG9yaWdpbmFsVGhpcyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHdyYXBwZXIudG9PYmplY3QpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsVGhpcy50b09iamVjdCA9IHRoaXMudG9PYmplY3Q7XG4gICAgICAgICAgICB0aGlzLnRvT2JqZWN0ID0gd3JhcHBlci50b09iamVjdC5iaW5kKG9yaWdpbmFsVGhpcyk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRW5jb2RlcyBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBUeXBlI3ZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICogQHBhcmFtIHtNZXNzYWdlPHt9PnxPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBNZXNzYWdlIGluc3RhbmNlIG9yIHBsYWluIG9iamVjdFxuICogQHBhcmFtIHtXcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IHdyaXRlclxuICovXG5UeXBlLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGVfc2V0dXAobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dXAoKS5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKTsgLy8gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kXG59O1xuXG4vKipcbiAqIEVuY29kZXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlwZSBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBUeXBlI3ZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICogQHBhcmFtIHtNZXNzYWdlPHt9PnxPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBNZXNzYWdlIGluc3RhbmNlIG9yIHBsYWluIG9iamVjdFxuICogQHBhcmFtIHtXcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IHdyaXRlclxuICovXG5UeXBlLnByb3RvdHlwZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlciAmJiB3cml0ZXIubGVuID8gd3JpdGVyLmZvcmsoKSA6IHdyaXRlcikubGRlbGltKCk7XG59O1xuXG4vKipcbiAqIERlY29kZXMgYSBtZXNzYWdlIG9mIHRoaXMgdHlwZS5cbiAqIEBwYXJhbSB7UmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTGVuZ3RoIG9mIHRoZSBtZXNzYWdlLCBpZiBrbm93biBiZWZvcmVoYW5kXG4gKiBAcmV0dXJucyB7TWVzc2FnZTx7fT59IERlY29kZWQgbWVzc2FnZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAqIEB0aHJvd3Mge3V0aWwuUHJvdG9jb2xFcnJvcjx7fT59IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICovXG5UeXBlLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGVfc2V0dXAocmVhZGVyLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR1cCgpLmRlY29kZShyZWFkZXIsIGxlbmd0aCk7IC8vIG92ZXJyaWRlcyB0aGlzIG1ldGhvZFxufTtcblxuLyoqXG4gKiBEZWNvZGVzIGEgbWVzc2FnZSBvZiB0aGlzIHR5cGUgcHJlY2VlZGVkIGJ5IGl0cyBieXRlIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7UmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gKiBAcmV0dXJucyB7TWVzc2FnZTx7fT59IERlY29kZWQgbWVzc2FnZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAqIEB0aHJvd3Mge3V0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gKi9cblR5cGUucHJvdG90eXBlLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiBSZWFkZXIpKVxuICAgICAgICByZWFkZXIgPSBSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbn07XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCBmaWVsZCB2YWx1ZXMgYXJlIHZhbGlkIGFuZCB0aGF0IHJlcXVpcmVkIGZpZWxkcyBhcmUgcHJlc2VudC5cbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICogQHJldHVybnMge251bGx8c3RyaW5nfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAqL1xuVHlwZS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5X3NldHVwKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR1cCgpLnZlcmlmeShtZXNzYWdlKTsgLy8gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbWVzc2FnZSBvZiB0aGlzIHR5cGUgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3QgdG8gY29udmVydFxuICogQHJldHVybnMge01lc3NhZ2U8e30+fSBNZXNzYWdlIGluc3RhbmNlXG4gKi9cblR5cGUucHJvdG90eXBlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLnNldHVwKCkuZnJvbU9iamVjdChvYmplY3QpO1xufTtcblxuLyoqXG4gKiBDb252ZXJzaW9uIG9wdGlvbnMgYXMgdXNlZCBieSB7QGxpbmsgVHlwZSN0b09iamVjdH0gYW5kIHtAbGluayBNZXNzYWdlLnRvT2JqZWN0fS5cbiAqIEBpbnRlcmZhY2UgSUNvbnZlcnNpb25PcHRpb25zXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbbG9uZ3NdIExvbmcgY29udmVyc2lvbiB0eXBlLlxuICogVmFsaWQgdmFsdWVzIGFyZSBgU3RyaW5nYCBhbmQgYE51bWJlcmAgKHRoZSBnbG9iYWwgdHlwZXMpLlxuICogRGVmYXVsdHMgdG8gY29weSB0aGUgcHJlc2VudCB2YWx1ZSwgd2hpY2ggaXMgYSBwb3NzaWJseSB1bnNhZmUgbnVtYmVyIHdpdGhvdXQgYW5kIGEge0BsaW5rIExvbmd9IHdpdGggYSBsb25nIGxpYnJhcnkuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbZW51bXNdIEVudW0gdmFsdWUgY29udmVyc2lvbiB0eXBlLlxuICogT25seSB2YWxpZCB2YWx1ZSBpcyBgU3RyaW5nYCAodGhlIGdsb2JhbCB0eXBlKS5cbiAqIERlZmF1bHRzIHRvIGNvcHkgdGhlIHByZXNlbnQgdmFsdWUsIHdoaWNoIGlzIHRoZSBudW1lcmljIGlkLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gW2J5dGVzXSBCeXRlcyB2YWx1ZSBjb252ZXJzaW9uIHR5cGUuXG4gKiBWYWxpZCB2YWx1ZXMgYXJlIGBBcnJheWAgYW5kIChhIGJhc2U2NCBlbmNvZGVkKSBgU3RyaW5nYCAodGhlIGdsb2JhbCB0eXBlcykuXG4gKiBEZWZhdWx0cyB0byBjb3B5IHRoZSBwcmVzZW50IHZhbHVlLCB3aGljaCB1c3VhbGx5IGlzIGEgQnVmZmVyIHVuZGVyIG5vZGUgYW5kIGFuIFVpbnQ4QXJyYXkgaW4gdGhlIGJyb3dzZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWZhdWx0cz1mYWxzZV0gQWxzbyBzZXRzIGRlZmF1bHQgdmFsdWVzIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthcnJheXM9ZmFsc2VdIFNldHMgZW1wdHkgYXJyYXlzIGZvciBtaXNzaW5nIHJlcGVhdGVkIGZpZWxkcyBldmVuIGlmIGBkZWZhdWx0cz1mYWxzZWBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29iamVjdHM9ZmFsc2VdIFNldHMgZW1wdHkgb2JqZWN0cyBmb3IgbWlzc2luZyBtYXAgZmllbGRzIGV2ZW4gaWYgYGRlZmF1bHRzPWZhbHNlYFxuICogQHByb3BlcnR5IHtib29sZWFufSBbb25lb2ZzPWZhbHNlXSBJbmNsdWRlcyB2aXJ0dWFsIG9uZW9mIHByb3BlcnRpZXMgc2V0IHRvIHRoZSBwcmVzZW50IGZpZWxkJ3MgbmFtZSwgaWYgYW55XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtqc29uPWZhbHNlXSBQZXJmb3JtcyBhZGRpdGlvbmFsIEpTT04gY29tcGF0aWJpbGl0eSBjb252ZXJzaW9ucywgaS5lLiBOYU4gYW5kIEluZmluaXR5IHRvIHN0cmluZ3NcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIG1lc3NhZ2Ugb2YgdGhpcyB0eXBlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gKiBAcGFyYW0ge01lc3NhZ2U8e30+fSBtZXNzYWdlIE1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7SUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICovXG5UeXBlLnByb3RvdHlwZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR1cCgpLnRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBEZWNvcmF0b3IgZnVuY3Rpb24gYXMgcmV0dXJuZWQgYnkge0BsaW5rIFR5cGUuZH0gKFR5cGVTY3JpcHQpLlxuICogQHR5cGVkZWYgVHlwZURlY29yYXRvclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUPn0gdGFyZ2V0IFRhcmdldCBjb25zdHJ1Y3RvclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICovXG5cbi8qKlxuICogVHlwZSBkZWNvcmF0b3IgKFR5cGVTY3JpcHQpLlxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlTmFtZV0gVHlwZSBuYW1lLCBkZWZhdWx0cyB0byB0aGUgY29uc3RydWN0b3IncyBuYW1lXG4gKiBAcmV0dXJucyB7VHlwZURlY29yYXRvcjxUPn0gRGVjb3JhdG9yIGZ1bmN0aW9uXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqL1xuVHlwZS5kID0gZnVuY3Rpb24gZGVjb3JhdGVUeXBlKHR5cGVOYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHR5cGVEZWNvcmF0b3IodGFyZ2V0KSB7XG4gICAgICAgIHV0aWwuZGVjb3JhdGVUeXBlKHRhcmdldCwgdHlwZU5hbWUpO1xuICAgIH07XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gUm9vdDtcblxuLy8gZXh0ZW5kcyBOYW1lc3BhY2VcbnZhciBOYW1lc3BhY2UgPSByZXF1aXJlKFwiLi9uYW1lc3BhY2VcIik7XG4oKFJvb3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOYW1lc3BhY2UucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBSb290KS5jbGFzc05hbWUgPSBcIlJvb3RcIjtcblxudmFyIEZpZWxkICAgPSByZXF1aXJlKFwiLi9maWVsZFwiKSxcbiAgICBFbnVtICAgID0gcmVxdWlyZShcIi4vZW51bVwiKSxcbiAgICBPbmVPZiAgID0gcmVxdWlyZShcIi4vb25lb2ZcIiksXG4gICAgdXRpbCAgICA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbnZhciBUeXBlLCAgIC8vIGN5Y2xpY1xuICAgIHBhcnNlLCAgLy8gbWlnaHQgYmUgZXhjbHVkZWRcbiAgICBjb21tb247IC8vIFwiXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByb290IG5hbWVzcGFjZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgUm9vdCBuYW1lc3BhY2Ugd3JhcHBpbmcgYWxsIHR5cGVzLCBlbnVtcywgc2VydmljZXMsIHN1Yi1uYW1lc3BhY2VzIGV0Yy4gdGhhdCBiZWxvbmcgdG9nZXRoZXIuXG4gKiBAZXh0ZW5kcyBOYW1lc3BhY2VCYXNlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBUb3AgbGV2ZWwgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBSb290KG9wdGlvbnMpIHtcbiAgICBOYW1lc3BhY2UuY2FsbCh0aGlzLCBcIlwiLCBvcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIERlZmVycmVkIGV4dGVuc2lvbiBmaWVsZHMuXG4gICAgICogQHR5cGUge0ZpZWxkW119XG4gICAgICovXG4gICAgdGhpcy5kZWZlcnJlZCA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZWQgZmlsZSBuYW1lcyBvZiBsb2FkZWQgZmlsZXMuXG4gICAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIHRoaXMuZmlsZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEVkaXRpb24sIGRlZmF1bHRzIHRvIHByb3RvMiBpZiB1bnNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZWRpdGlvbiA9IFwicHJvdG8yXCI7XG5cbiAgICAvKipcbiAgICAgKiBHbG9iYWwgbG9va3VwIGNhY2hlIG9mIGZ1bGx5IHF1YWxpZmllZCBuYW1lcy5cbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsUmVmbGVjdGlvbk9iamVjdD59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mdWxseVF1YWxpZmllZE9iamVjdHMgPSB7fTtcbn1cblxuLyoqXG4gKiBMb2FkcyBhIG5hbWVzcGFjZSBkZXNjcmlwdG9yIGludG8gYSByb290IG5hbWVzcGFjZS5cbiAqIEBwYXJhbSB7SU5hbWVzcGFjZX0ganNvbiBOYW1lc3BhY2UgZGVzY3JpcHRvclxuICogQHBhcmFtIHtSb290fSBbcm9vdF0gUm9vdCBuYW1lc3BhY2UsIGRlZmF1bHRzIHRvIGNyZWF0ZSBhIG5ldyBvbmUgaWYgb21pdHRlZFxuICogQHJldHVybnMge1Jvb3R9IFJvb3QgbmFtZXNwYWNlXG4gKi9cblJvb3QuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihqc29uLCByb290KSB7XG4gICAgaWYgKCFyb290KVxuICAgICAgICByb290ID0gbmV3IFJvb3QoKTtcbiAgICBpZiAoanNvbi5vcHRpb25zKVxuICAgICAgICByb290LnNldE9wdGlvbnMoanNvbi5vcHRpb25zKTtcbiAgICByZXR1cm4gcm9vdC5hZGRKU09OKGpzb24ubmVzdGVkKS5yZXNvbHZlQWxsKCk7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwYXRoIG9mIGFuIGltcG9ydGVkIGZpbGUsIHJlbGF0aXZlIHRvIHRoZSBpbXBvcnRpbmcgb3JpZ2luLlxuICogVGhpcyBtZXRob2QgZXhpc3RzIHNvIHlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93biBsb2dpYyBpbiBjYXNlIHlvdXIgaW1wb3J0cyBhcmUgc2NhdHRlcmVkIG92ZXIgbXVsdGlwbGUgZGlyZWN0b3JpZXMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW4gVGhlIGZpbGUgbmFtZSBvZiB0aGUgaW1wb3J0aW5nIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgVGhlIGZpbGUgbmFtZSBiZWluZyBpbXBvcnRlZFxuICogQHJldHVybnMge3N0cmluZ3xudWxsfSBSZXNvbHZlZCBwYXRoIHRvIGB0YXJnZXRgIG9yIGBudWxsYCB0byBza2lwIHRoZSBmaWxlXG4gKi9cblJvb3QucHJvdG90eXBlLnJlc29sdmVQYXRoID0gdXRpbC5wYXRoLnJlc29sdmU7XG5cbi8qKlxuICogRmV0Y2ggY29udGVudCBmcm9tIGZpbGUgcGF0aCBvciB1cmxcbiAqIFRoaXMgbWV0aG9kIGV4aXN0cyBzbyB5b3UgY2FuIG92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24gbG9naWMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIEZpbGUgcGF0aCBvciB1cmxcbiAqIEBwYXJhbSB7RmV0Y2hDYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblJvb3QucHJvdG90eXBlLmZldGNoID0gdXRpbC5mZXRjaDtcblxuLy8gQSBzeW1ib2wtbGlrZSBmdW5jdGlvbiB0byBzYWZlbHkgc2lnbmFsIHN5bmNocm9ub3VzIGxvYWRpbmdcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBTWU5DKCkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuXG4vKipcbiAqIExvYWRzIG9uZSBvciBtdWx0aXBsZSAucHJvdG8gb3IgcHJlcHJvY2Vzc2VkIC5qc29uIGZpbGVzIGludG8gdGhpcyByb290IG5hbWVzcGFjZSBhbmQgY2FsbHMgdGhlIGNhbGxiYWNrLlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGZpbGVuYW1lIE5hbWVzIG9mIG9uZSBvciBtdWx0aXBsZSBmaWxlcyB0byBsb2FkXG4gKiBAcGFyYW0ge0lQYXJzZU9wdGlvbnN9IG9wdGlvbnMgUGFyc2Ugb3B0aW9uc1xuICogQHBhcmFtIHtMb2FkQ2FsbGJhY2t9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5Sb290LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChmaWxlbmFtZSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB1dGlsLmFzUHJvbWlzZShsb2FkLCBzZWxmLCBmaWxlbmFtZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIHN5bmMgPSBjYWxsYmFjayA9PT0gU1lOQzsgLy8gdW5kb2N1bWVudGVkXG5cbiAgICAvLyBGaW5pc2hlcyBsb2FkaW5nIGJ5IGNhbGxpbmcgdGhlIGNhbGxiYWNrIChleGFjdGx5IG9uY2UpXG4gICAgZnVuY3Rpb24gZmluaXNoKGVyciwgcm9vdCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJvb3QucmVzb2x2ZUFsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYiA9IGNhbGxiYWNrO1xuICAgICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNiKGVyciwgcm9vdCk7XG4gICAgfVxuXG4gICAgLy8gQnVuZGxlZCBkZWZpbml0aW9uIGV4aXN0ZW5jZSBjaGVja2luZ1xuICAgIGZ1bmN0aW9uIGdldEJ1bmRsZWRGaWxlTmFtZShmaWxlbmFtZSkge1xuICAgICAgICB2YXIgaWR4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoXCJnb29nbGUvcHJvdG9idWYvXCIpO1xuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgIHZhciBhbHRuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKGlkeCk7XG4gICAgICAgICAgICBpZiAoYWx0bmFtZSBpbiBjb21tb24pIHJldHVybiBhbHRuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3NlcyBhIHNpbmdsZSBmaWxlXG4gICAgZnVuY3Rpb24gcHJvY2VzcyhmaWxlbmFtZSwgc291cmNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodXRpbC5pc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5jaGFyQXQoMCkgPT09IFwie1wiKVxuICAgICAgICAgICAgICAgIHNvdXJjZSA9IEpTT04ucGFyc2Uoc291cmNlKTtcbiAgICAgICAgICAgIGlmICghdXRpbC5pc1N0cmluZyhzb3VyY2UpKVxuICAgICAgICAgICAgICAgIHNlbGYuc2V0T3B0aW9ucyhzb3VyY2Uub3B0aW9ucykuYWRkSlNPTihzb3VyY2UubmVzdGVkKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlLmZpbGVuYW1lID0gZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHBhcnNlKHNvdXJjZSwgc2VsZiwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkLFxuICAgICAgICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkLmltcG9ydHMpXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgcGFyc2VkLmltcG9ydHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWQgPSBnZXRCdW5kbGVkRmlsZU5hbWUocGFyc2VkLmltcG9ydHNbaV0pIHx8IHNlbGYucmVzb2x2ZVBhdGgoZmlsZW5hbWUsIHBhcnNlZC5pbXBvcnRzW2ldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaChyZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC53ZWFrSW1wb3J0cylcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnNlZC53ZWFrSW1wb3J0cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZCA9IGdldEJ1bmRsZWRGaWxlTmFtZShwYXJzZWQud2Vha0ltcG9ydHNbaV0pIHx8IHNlbGYucmVzb2x2ZVBhdGgoZmlsZW5hbWUsIHBhcnNlZC53ZWFrSW1wb3J0c1tpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2gocmVzb2x2ZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGZpbmlzaChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3luYyAmJiAhcXVldWVkKSB7XG4gICAgICAgICAgICBmaW5pc2gobnVsbCwgc2VsZik7IC8vIG9ubHkgb25jZSBhbnl3YXlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZldGNoZXMgYSBzaW5nbGUgZmlsZVxuICAgIGZ1bmN0aW9uIGZldGNoKGZpbGVuYW1lLCB3ZWFrKSB7XG4gICAgICAgIGZpbGVuYW1lID0gZ2V0QnVuZGxlZEZpbGVOYW1lKGZpbGVuYW1lKSB8fCBmaWxlbmFtZTtcblxuICAgICAgICAvLyBTa2lwIGlmIGFscmVhZHkgbG9hZGVkIC8gYXR0ZW1wdGVkXG4gICAgICAgIGlmIChzZWxmLmZpbGVzLmluZGV4T2YoZmlsZW5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmZpbGVzLnB1c2goZmlsZW5hbWUpO1xuXG4gICAgICAgIC8vIFNob3J0Y3V0IGJ1bmRsZWQgZGVmaW5pdGlvbnNcbiAgICAgICAgaWYgKGZpbGVuYW1lIGluIGNvbW1vbikge1xuICAgICAgICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzKGZpbGVuYW1lLCBjb21tb25bZmlsZW5hbWVdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKytxdWV1ZWQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgLS1xdWV1ZWQ7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoZmlsZW5hbWUsIGNvbW1vbltmaWxlbmFtZV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZldGNoIGZyb20gZGlzayBvciBuZXR3b3JrXG4gICAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgICAgICB2YXIgc291cmNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSkudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3ZWFrKVxuICAgICAgICAgICAgICAgICAgICBmaW5pc2goZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9jZXNzKGZpbGVuYW1lLCBzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKytxdWV1ZWQ7XG4gICAgICAgICAgICBzZWxmLmZldGNoKGZpbGVuYW1lLCBmdW5jdGlvbihlcnIsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC0tcXVldWVkO1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyB0ZXJtaW5hdGVkIG1lYW53aGlsZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICghd2VhaylcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghcXVldWVkKSAvLyBjYW4ndCBiZSBjb3ZlcmVkIHJlbGlhYmx5XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2gobnVsbCwgc2VsZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2VzcyhmaWxlbmFtZSwgc291cmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBxdWV1ZWQgPSAwO1xuXG4gICAgLy8gQXNzZW1ibGluZyB0aGUgcm9vdCBuYW1lc3BhY2UgZG9lc24ndCByZXF1aXJlIHdvcmtpbmcgdHlwZVxuICAgIC8vIHJlZmVyZW5jZXMgYW55bW9yZSwgc28gd2UgY2FuIGxvYWQgZXZlcnl0aGluZyBpbiBwYXJhbGxlbFxuICAgIGlmICh1dGlsLmlzU3RyaW5nKGZpbGVuYW1lKSkge1xuICAgICAgICBmaWxlbmFtZSA9IFsgZmlsZW5hbWUgXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIHJlc29sdmVkOyBpIDwgZmlsZW5hbWUubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChyZXNvbHZlZCA9IHNlbGYucmVzb2x2ZVBhdGgoXCJcIiwgZmlsZW5hbWVbaV0pKVxuICAgICAgICAgICAgZmV0Y2gocmVzb2x2ZWQpO1xuICAgIGlmIChzeW5jKSB7XG4gICAgICAgIHNlbGYucmVzb2x2ZUFsbCgpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgaWYgKCFxdWV1ZWQpIHtcbiAgICAgICAgZmluaXNoKG51bGwsIHNlbGYpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmO1xufTtcbi8vIGZ1bmN0aW9uIGxvYWQoZmlsZW5hbWU6c3RyaW5nLCBvcHRpb25zOklQYXJzZU9wdGlvbnMsIGNhbGxiYWNrOkxvYWRDYWxsYmFjayk6dW5kZWZpbmVkXG5cbi8qKlxuICogTG9hZHMgb25lIG9yIG11bHRpcGxlIC5wcm90byBvciBwcmVwcm9jZXNzZWQgLmpzb24gZmlsZXMgaW50byB0aGlzIHJvb3QgbmFtZXNwYWNlIGFuZCBjYWxscyB0aGUgY2FsbGJhY2suXG4gKiBAZnVuY3Rpb24gUm9vdCNsb2FkXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gZmlsZW5hbWUgTmFtZXMgb2Ygb25lIG9yIG11bHRpcGxlIGZpbGVzIHRvIGxvYWRcbiAqIEBwYXJhbSB7TG9hZENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB2YXJpYXRpb24gMlxuICovXG4vLyBmdW5jdGlvbiBsb2FkKGZpbGVuYW1lOnN0cmluZywgY2FsbGJhY2s6TG9hZENhbGxiYWNrKTp1bmRlZmluZWRcblxuLyoqXG4gKiBMb2FkcyBvbmUgb3IgbXVsdGlwbGUgLnByb3RvIG9yIHByZXByb2Nlc3NlZCAuanNvbiBmaWxlcyBpbnRvIHRoaXMgcm9vdCBuYW1lc3BhY2UgYW5kIHJldHVybnMgYSBwcm9taXNlLlxuICogQGZ1bmN0aW9uIFJvb3QjbG9hZFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGZpbGVuYW1lIE5hbWVzIG9mIG9uZSBvciBtdWx0aXBsZSBmaWxlcyB0byBsb2FkXG4gKiBAcGFyYW0ge0lQYXJzZU9wdGlvbnN9IFtvcHRpb25zXSBQYXJzZSBvcHRpb25zLiBEZWZhdWx0cyB0byB7QGxpbmsgcGFyc2UuZGVmYXVsdHN9IHdoZW4gb21pdHRlZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFJvb3Q+fSBQcm9taXNlXG4gKiBAdmFyaWF0aW9uIDNcbiAqL1xuLy8gZnVuY3Rpb24gbG9hZChmaWxlbmFtZTpzdHJpbmcsIFtvcHRpb25zOklQYXJzZU9wdGlvbnNdKTpQcm9taXNlPFJvb3Q+XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBsb2FkcyBvbmUgb3IgbXVsdGlwbGUgLnByb3RvIG9yIHByZXByb2Nlc3NlZCAuanNvbiBmaWxlcyBpbnRvIHRoaXMgcm9vdCBuYW1lc3BhY2UgKG5vZGUgb25seSkuXG4gKiBAZnVuY3Rpb24gUm9vdCNsb2FkU3luY1xuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGZpbGVuYW1lIE5hbWVzIG9mIG9uZSBvciBtdWx0aXBsZSBmaWxlcyB0byBsb2FkXG4gKiBAcGFyYW0ge0lQYXJzZU9wdGlvbnN9IFtvcHRpb25zXSBQYXJzZSBvcHRpb25zLiBEZWZhdWx0cyB0byB7QGxpbmsgcGFyc2UuZGVmYXVsdHN9IHdoZW4gb21pdHRlZC5cbiAqIEByZXR1cm5zIHtSb290fSBSb290IG5hbWVzcGFjZVxuICogQHRocm93cyB7RXJyb3J9IElmIHN5bmNocm9ub3VzIGZldGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgKGkuZS4gaW4gYnJvd3NlcnMpIG9yIGlmIGEgZmlsZSdzIHN5bnRheCBpcyBpbnZhbGlkXG4gKi9cblJvb3QucHJvdG90eXBlLmxvYWRTeW5jID0gZnVuY3Rpb24gbG9hZFN5bmMoZmlsZW5hbWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIXV0aWwuaXNOb2RlKVxuICAgICAgICB0aHJvdyBFcnJvcihcIm5vdCBzdXBwb3J0ZWRcIik7XG4gICAgcmV0dXJuIHRoaXMubG9hZChmaWxlbmFtZSwgb3B0aW9ucywgU1lOQyk7XG59O1xuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5Sb290LnByb3RvdHlwZS5yZXNvbHZlQWxsID0gZnVuY3Rpb24gcmVzb2x2ZUFsbCgpIHtcbiAgICBpZiAoIXRoaXMuX25lZWRzUmVjdXJzaXZlUmVzb2x2ZSkgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAodGhpcy5kZWZlcnJlZC5sZW5ndGgpXG4gICAgICAgIHRocm93IEVycm9yKFwidW5yZXNvbHZhYmxlIGV4dGVuc2lvbnM6IFwiICsgdGhpcy5kZWZlcnJlZC5tYXAoZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIidleHRlbmQgXCIgKyBmaWVsZC5leHRlbmQgKyBcIicgaW4gXCIgKyBmaWVsZC5wYXJlbnQuZnVsbE5hbWU7XG4gICAgICAgIH0pLmpvaW4oXCIsIFwiKSk7XG4gICAgcmV0dXJuIE5hbWVzcGFjZS5wcm90b3R5cGUucmVzb2x2ZUFsbC5jYWxsKHRoaXMpO1xufTtcblxuLy8gb25seSB1cHBlcmNhc2VkIChhbmQgdGh1cyBjb25mbGljdC1mcmVlKSBjaGlsZHJlbiBhcmUgZXhwb3NlZCwgc2VlIGJlbG93XG52YXIgZXhwb3NlUmUgPSAvXltBLVpdLztcblxuLyoqXG4gKiBIYW5kbGVzIGEgZGVmZXJyZWQgZGVjbGFyaW5nIGV4dGVuc2lvbiBmaWVsZCBieSBjcmVhdGluZyBhIHNpc3RlciBmaWVsZCB0byByZXByZXNlbnQgaXQgd2l0aGluIGl0cyBleHRlbmRlZCB0eXBlLlxuICogQHBhcmFtIHtSb290fSByb290IFJvb3QgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RmllbGR9IGZpZWxkIERlY2xhcmluZyBleHRlbnNpb24gZmllbGQgd2l0aW4gdGhlIGRlY2xhcmluZyB0eXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgZXh0ZW5kZWQgdHlwZSwgYGZhbHNlYCBvdGhlcndpc2VcbiAqIEBpbm5lclxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiB0cnlIYW5kbGVFeHRlbnNpb24ocm9vdCwgZmllbGQpIHtcbiAgICB2YXIgZXh0ZW5kZWRUeXBlID0gZmllbGQucGFyZW50Lmxvb2t1cChmaWVsZC5leHRlbmQpO1xuICAgIGlmIChleHRlbmRlZFR5cGUpIHtcbiAgICAgICAgdmFyIHNpc3RlckZpZWxkID0gbmV3IEZpZWxkKGZpZWxkLmZ1bGxOYW1lLCBmaWVsZC5pZCwgZmllbGQudHlwZSwgZmllbGQucnVsZSwgdW5kZWZpbmVkLCBmaWVsZC5vcHRpb25zKTtcbiAgICAgICAgLy9kbyBub3QgYWxsb3cgdG8gZXh0ZW5kIHNhbWUgZmllbGQgdHdpY2UgdG8gcHJldmVudCB0aGUgZXJyb3JcbiAgICAgICAgaWYgKGV4dGVuZGVkVHlwZS5nZXQoc2lzdGVyRmllbGQubmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHNpc3RlckZpZWxkLmRlY2xhcmluZ0ZpZWxkID0gZmllbGQ7XG4gICAgICAgIGZpZWxkLmV4dGVuc2lvbkZpZWxkID0gc2lzdGVyRmllbGQ7XG4gICAgICAgIGV4dGVuZGVkVHlwZS5hZGQoc2lzdGVyRmllbGQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENhbGxlZCB3aGVuIGFueSBvYmplY3QgaXMgYWRkZWQgdG8gdGhpcyByb290IG9yIGl0cyBzdWItbmFtZXNwYWNlcy5cbiAqIEBwYXJhbSB7UmVmbGVjdGlvbk9iamVjdH0gb2JqZWN0IE9iamVjdCBhZGRlZFxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBwcml2YXRlXG4gKi9cblJvb3QucHJvdG90eXBlLl9oYW5kbGVBZGQgPSBmdW5jdGlvbiBfaGFuZGxlQWRkKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBGaWVsZCkge1xuXG4gICAgICAgIGlmICgvKiBhbiBleHRlbnNpb24gZmllbGQgKGltcGxpZXMgbm90IHBhcnQgb2YgYSBvbmVvZikgKi8gb2JqZWN0LmV4dGVuZCAhPT0gdW5kZWZpbmVkICYmIC8qIG5vdCBhbHJlYWR5IGhhbmRsZWQgKi8gIW9iamVjdC5leHRlbnNpb25GaWVsZClcbiAgICAgICAgICAgIGlmICghdHJ5SGFuZGxlRXh0ZW5zaW9uKHRoaXMsIG9iamVjdCkpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZlcnJlZC5wdXNoKG9iamVjdCk7XG5cbiAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVudW0pIHtcblxuICAgICAgICBpZiAoZXhwb3NlUmUudGVzdChvYmplY3QubmFtZSkpXG4gICAgICAgICAgICBvYmplY3QucGFyZW50W29iamVjdC5uYW1lXSA9IG9iamVjdC52YWx1ZXM7IC8vIGV4cG9zZSBlbnVtIHZhbHVlcyBhcyBwcm9wZXJ0eSBvZiBpdHMgcGFyZW50XG5cbiAgICB9IGVsc2UgaWYgKCEob2JqZWN0IGluc3RhbmNlb2YgT25lT2YpKSAvKiBldmVyeXRoaW5nIGVsc2UgaXMgYSBuYW1lc3BhY2UgKi8ge1xuXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUeXBlKSAvLyBUcnkgdG8gaGFuZGxlIGFueSBkZWZlcnJlZCBleHRlbnNpb25zXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGVmZXJyZWQubGVuZ3RoOylcbiAgICAgICAgICAgICAgICBpZiAodHJ5SGFuZGxlRXh0ZW5zaW9uKHRoaXMsIHRoaXMuZGVmZXJyZWRbaV0pKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmVycmVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAvKiBpbml0aWFsaXplcyAqLyBvYmplY3QubmVzdGVkQXJyYXkubGVuZ3RoOyArK2opIC8vIHJlY3Vyc2UgaW50byB0aGUgbmFtZXNwYWNlXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBZGQob2JqZWN0Ll9uZXN0ZWRBcnJheVtqXSk7XG4gICAgICAgIGlmIChleHBvc2VSZS50ZXN0KG9iamVjdC5uYW1lKSlcbiAgICAgICAgICAgIG9iamVjdC5wYXJlbnRbb2JqZWN0Lm5hbWVdID0gb2JqZWN0OyAvLyBleHBvc2UgbmFtZXNwYWNlIGFzIHByb3BlcnR5IG9mIGl0cyBwYXJlbnRcbiAgICB9XG5cbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgVHlwZSB8fCBvYmplY3QgaW5zdGFuY2VvZiBFbnVtIHx8IG9iamVjdCBpbnN0YW5jZW9mIEZpZWxkKSB7XG4gICAgICAgIC8vIE9ubHkgc3RvcmUgdHlwZXMgYW5kIGVudW1zIGZvciBxdWljayBsb29rdXAgZHVyaW5nIHJlc29sdmUuXG4gICAgICAgIHRoaXMuX2Z1bGx5UXVhbGlmaWVkT2JqZWN0c1tvYmplY3QuZnVsbE5hbWVdID0gb2JqZWN0O1xuICAgIH1cblxuICAgIC8vIFRoZSBhYm92ZSBhbHNvIGFkZHMgdXBwZXJjYXNlZCAoYW5kIHRodXMgY29uZmxpY3QtZnJlZSkgbmVzdGVkIHR5cGVzLCBzZXJ2aWNlcyBhbmQgZW51bXMgYXNcbiAgICAvLyBwcm9wZXJ0aWVzIG9mIG5hbWVzcGFjZXMganVzdCBsaWtlIHN0YXRpYyBjb2RlIGRvZXMuIFRoaXMgYWxsb3dzIHVzaW5nIGEgLmQudHMgZ2VuZXJhdGVkIGZvclxuICAgIC8vIGEgc3RhdGljIG1vZHVsZSB3aXRoIHJlZmxlY3Rpb24tYmFzZWQgc29sdXRpb25zIHdoZXJlIHRoZSBjb25kaXRpb24gaXMgbWV0LlxufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiBhbnkgb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSB0aGlzIHJvb3Qgb3IgaXRzIHN1Yi1uYW1lc3BhY2VzLlxuICogQHBhcmFtIHtSZWZsZWN0aW9uT2JqZWN0fSBvYmplY3QgT2JqZWN0IHJlbW92ZWRcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAcHJpdmF0ZVxuICovXG5Sb290LnByb3RvdHlwZS5faGFuZGxlUmVtb3ZlID0gZnVuY3Rpb24gX2hhbmRsZVJlbW92ZShvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRmllbGQpIHtcblxuICAgICAgICBpZiAoLyogYW4gZXh0ZW5zaW9uIGZpZWxkICovIG9iamVjdC5leHRlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKC8qIGFscmVhZHkgaGFuZGxlZCAqLyBvYmplY3QuZXh0ZW5zaW9uRmllbGQpIHsgLy8gcmVtb3ZlIGl0cyBzaXN0ZXIgZmllbGRcbiAgICAgICAgICAgICAgICBvYmplY3QuZXh0ZW5zaW9uRmllbGQucGFyZW50LnJlbW92ZShvYmplY3QuZXh0ZW5zaW9uRmllbGQpO1xuICAgICAgICAgICAgICAgIG9iamVjdC5leHRlbnNpb25GaWVsZCA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBjYW5jZWwgdGhlIGV4dGVuc2lvblxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuZGVmZXJyZWQuaW5kZXhPZihvYmplY3QpO1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmZXJyZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFbnVtKSB7XG5cbiAgICAgICAgaWYgKGV4cG9zZVJlLnRlc3Qob2JqZWN0Lm5hbWUpKVxuICAgICAgICAgICAgZGVsZXRlIG9iamVjdC5wYXJlbnRbb2JqZWN0Lm5hbWVdOyAvLyB1bmV4cG9zZSBlbnVtIHZhbHVlc1xuXG4gICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOYW1lc3BhY2UpIHtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IC8qIGluaXRpYWxpemVzICovIG9iamVjdC5uZXN0ZWRBcnJheS5sZW5ndGg7ICsraSkgLy8gcmVjdXJzZSBpbnRvIHRoZSBuYW1lc3BhY2VcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlbW92ZShvYmplY3QuX25lc3RlZEFycmF5W2ldKTtcblxuICAgICAgICBpZiAoZXhwb3NlUmUudGVzdChvYmplY3QubmFtZSkpXG4gICAgICAgICAgICBkZWxldGUgb2JqZWN0LnBhcmVudFtvYmplY3QubmFtZV07IC8vIHVuZXhwb3NlIG5hbWVzcGFjZXNcblxuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLl9mdWxseVF1YWxpZmllZE9iamVjdHNbb2JqZWN0LmZ1bGxOYW1lXTtcbn07XG5cbi8vIFNldHMgdXAgY3ljbGljIGRlcGVuZGVuY2llcyAoY2FsbGVkIGluIGluZGV4LWxpZ2h0KVxuUm9vdC5fY29uZmlndXJlID0gZnVuY3Rpb24oVHlwZV8sIHBhcnNlXywgY29tbW9uXykge1xuICAgIFR5cGUgICA9IFR5cGVfO1xuICAgIHBhcnNlICA9IHBhcnNlXztcbiAgICBjb21tb24gPSBjb21tb25fO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucy5cbiAqIEBuYW1lc3BhY2VcbiAqL1xudmFyIHV0aWwgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIHJvb3RzID0gcmVxdWlyZShcIi4vcm9vdHNcIik7XG5cbnZhciBUeXBlLCAvLyBjeWNsaWNcbiAgICBFbnVtO1xuXG51dGlsLmNvZGVnZW4gPSByZXF1aXJlKFwiQHByb3RvYnVmanMvY29kZWdlblwiKTtcbnV0aWwuZmV0Y2ggICA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9mZXRjaFwiKTtcbnV0aWwucGF0aCAgICA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9wYXRoXCIpO1xuXG4vKipcbiAqIE5vZGUncyBmcyBtb2R1bGUgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge09iamVjdC48c3RyaW5nLCo+fVxuICovXG51dGlsLmZzID0gdXRpbC5pbnF1aXJlKFwiZnNcIik7XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0J3MgdmFsdWVzIHRvIGFuIGFycmF5LlxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IE9iamVjdCB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7QXJyYXkuPCo+fSBDb252ZXJ0ZWQgYXJyYXlcbiAqL1xudXRpbC50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheShvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgIHZhciBrZXlzICA9IE9iamVjdC5rZXlzKG9iamVjdCksXG4gICAgICAgICAgICBhcnJheSA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGtleXMubGVuZ3RoKVxuICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gb2JqZWN0W2tleXNbaW5kZXgrK11dO1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2Yga2V5cyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGVpciByZXNwZWN0aXZlIHZhbHVlIHRvIGFuIG9iamVjdCwgb21pdHRpbmcgdW5kZWZpbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7QXJyYXkuPCo+fSBhcnJheSBBcnJheSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IENvbnZlcnRlZCBvYmplY3RcbiAqL1xudXRpbC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KGFycmF5KSB7XG4gICAgdmFyIG9iamVjdCA9IHt9LFxuICAgICAgICBpbmRleCAgPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gYXJyYXlbaW5kZXgrK10sXG4gICAgICAgICAgICB2YWwgPSBhcnJheVtpbmRleCsrXTtcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWw7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgc2FmZVByb3BCYWNrc2xhc2hSZSA9IC9cXFxcL2csXG4gICAgc2FmZVByb3BRdW90ZVJlICAgICA9IC9cIi9nO1xuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBuYW1lIGlzIGEgcmVzZXJ2ZWQgd29yZCBpbiBKUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiByZXNlcnZlZCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc1Jlc2VydmVkID0gZnVuY3Rpb24gaXNSZXNlcnZlZChuYW1lKSB7XG4gICAgcmV0dXJuIC9eKD86ZG98aWZ8aW58Zm9yfGxldHxuZXd8dHJ5fHZhcnxjYXNlfGVsc2V8ZW51bXxldmFsfGZhbHNlfG51bGx8dGhpc3x0cnVlfHZvaWR8d2l0aHxicmVha3xjYXRjaHxjbGFzc3xjb25zdHxzdXBlcnx0aHJvd3x3aGlsZXx5aWVsZHxkZWxldGV8ZXhwb3J0fGltcG9ydHxwdWJsaWN8cmV0dXJufHN0YXRpY3xzd2l0Y2h8dHlwZW9mfGRlZmF1bHR8ZXh0ZW5kc3xmaW5hbGx5fHBhY2thZ2V8cHJpdmF0ZXxjb250aW51ZXxkZWJ1Z2dlcnxmdW5jdGlvbnxhcmd1bWVudHN8aW50ZXJmYWNlfHByb3RlY3RlZHxpbXBsZW1lbnRzfGluc3RhbmNlb2YpJC8udGVzdChuYW1lKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNhZmUgcHJvcGVydHkgYWNjZXNzb3IgZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFNhZmUgYWNjZXNzb3JcbiAqL1xudXRpbC5zYWZlUHJvcCA9IGZ1bmN0aW9uIHNhZmVQcm9wKHByb3ApIHtcbiAgICBpZiAoIS9eWyRcXHdfXSskLy50ZXN0KHByb3ApIHx8IHV0aWwuaXNSZXNlcnZlZChwcm9wKSlcbiAgICAgICAgcmV0dXJuIFwiW1xcXCJcIiArIHByb3AucmVwbGFjZShzYWZlUHJvcEJhY2tzbGFzaFJlLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2Uoc2FmZVByb3BRdW90ZVJlLCBcIlxcXFxcXFwiXCIpICsgXCJcXFwiXVwiO1xuICAgIHJldHVybiBcIi5cIiArIHByb3A7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgdG8gdXBwZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbnZlcnRlZCBzdHJpbmdcbiAqL1xudXRpbC51Y0ZpcnN0ID0gZnVuY3Rpb24gdWNGaXJzdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn07XG5cbnZhciBjYW1lbENhc2VSZSA9IC9fKFthLXpdKS9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGNhbWVsIGNhc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb252ZXJ0ZWQgc3RyaW5nXG4gKi9cbnV0aWwuY2FtZWxDYXNlID0gZnVuY3Rpb24gY2FtZWxDYXNlKHN0cikge1xuICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpXG4gICAgICAgICArIHN0ci5zdWJzdHJpbmcoMSlcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKGNhbWVsQ2FzZVJlLCBmdW5jdGlvbigkMCwgJDEpIHsgcmV0dXJuICQxLnRvVXBwZXJDYXNlKCk7IH0pO1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyByZWZsZWN0ZWQgZmllbGRzIGJ5IGlkLlxuICogQHBhcmFtIHtGaWVsZH0gYSBGaXJzdCBmaWVsZFxuICogQHBhcmFtIHtGaWVsZH0gYiBTZWNvbmQgZmllbGRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IENvbXBhcmlzb24gdmFsdWVcbiAqL1xudXRpbC5jb21wYXJlRmllbGRzQnlJZCA9IGZ1bmN0aW9uIGNvbXBhcmVGaWVsZHNCeUlkKGEsIGIpIHtcbiAgICByZXR1cm4gYS5pZCAtIGIuaWQ7XG59O1xuXG4vKipcbiAqIERlY29yYXRvciBoZWxwZXIgZm9yIHR5cGVzIChUeXBlU2NyaXB0KS5cbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VD59IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZU5hbWVdIFR5cGUgbmFtZSwgZGVmYXVsdHMgdG8gdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZVxuICogQHJldHVybnMge1R5cGV9IFJlZmxlY3RlZCB0eXBlXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEBwcm9wZXJ0eSB7Um9vdH0gcm9vdCBEZWNvcmF0b3JzIHJvb3RcbiAqL1xudXRpbC5kZWNvcmF0ZVR5cGUgPSBmdW5jdGlvbiBkZWNvcmF0ZVR5cGUoY3RvciwgdHlwZU5hbWUpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjdG9yLiR0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlTmFtZSAmJiBjdG9yLiR0eXBlLm5hbWUgIT09IHR5cGVOYW1lKSB7XG4gICAgICAgICAgICB1dGlsLmRlY29yYXRlUm9vdC5yZW1vdmUoY3Rvci4kdHlwZSk7XG4gICAgICAgICAgICBjdG9yLiR0eXBlLm5hbWUgPSB0eXBlTmFtZTtcbiAgICAgICAgICAgIHV0aWwuZGVjb3JhdGVSb290LmFkZChjdG9yLiR0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3Rvci4kdHlwZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghVHlwZSlcbiAgICAgICAgVHlwZSA9IHJlcXVpcmUoXCIuL3R5cGVcIik7XG5cbiAgICB2YXIgdHlwZSA9IG5ldyBUeXBlKHR5cGVOYW1lIHx8IGN0b3IubmFtZSk7XG4gICAgdXRpbC5kZWNvcmF0ZVJvb3QuYWRkKHR5cGUpO1xuICAgIHR5cGUuY3RvciA9IGN0b3I7IC8vIHNldHMgdXAgLmVuY29kZSwgLmRlY29kZSBldGMuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0b3IsIFwiJHR5cGVcIiwgeyB2YWx1ZTogdHlwZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0b3IucHJvdG90eXBlLCBcIiR0eXBlXCIsIHsgdmFsdWU6IHR5cGUsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIHJldHVybiB0eXBlO1xufTtcblxudmFyIGRlY29yYXRlRW51bUluZGV4ID0gMDtcblxuLyoqXG4gKiBEZWNvcmF0b3IgaGVscGVyIGZvciBlbnVtcyAoVHlwZVNjcmlwdCkuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IEVudW0gb2JqZWN0XG4gKiBAcmV0dXJucyB7RW51bX0gUmVmbGVjdGVkIGVudW1cbiAqL1xudXRpbC5kZWNvcmF0ZUVudW0gPSBmdW5jdGlvbiBkZWNvcmF0ZUVudW0ob2JqZWN0KSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAob2JqZWN0LiR0eXBlKVxuICAgICAgICByZXR1cm4gb2JqZWN0LiR0eXBlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoIUVudW0pXG4gICAgICAgIEVudW0gPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuXG4gICAgdmFyIGVubSA9IG5ldyBFbnVtKFwiRW51bVwiICsgZGVjb3JhdGVFbnVtSW5kZXgrKywgb2JqZWN0KTtcbiAgICB1dGlsLmRlY29yYXRlUm9vdC5hZGQoZW5tKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBcIiR0eXBlXCIsIHsgdmFsdWU6IGVubSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgcmV0dXJuIGVubTtcbn07XG5cblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGJ5IHByb3BlcnR5IHBhdGguIElmIGEgdmFsdWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIHR1cm5lZCB0byBhbiBhcnJheVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gZHN0IERlc3RpbmF0aW9uIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggZG90ICcuJyBkZWxpbWl0ZWQgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgdGhlIHZhbHVlIHRvIHNldFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gW2lmTm90U2V0XSBTZXRzIHRoZSBvcHRpb24gb25seSBpZiBpdCBpc24ndCBjdXJyZW50bHkgc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IERlc3RpbmF0aW9uIG9iamVjdFxuICovXG51dGlsLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkoZHN0LCBwYXRoLCB2YWx1ZSwgaWZOb3RTZXQpIHtcbiAgICBmdW5jdGlvbiBzZXRQcm9wKGRzdCwgcGF0aCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnQgPSBwYXRoLnNoaWZ0KCk7XG4gICAgICAgIGlmIChwYXJ0ID09PSBcIl9fcHJvdG9fX1wiIHx8IHBhcnQgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgICAgICByZXR1cm4gZHN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRzdFtwYXJ0XSA9IHNldFByb3AoZHN0W3BhcnRdIHx8IHt9LCBwYXRoLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlZhbHVlID0gZHN0W3BhcnRdO1xuICAgICAgICAgICAgaWYgKHByZXZWYWx1ZSAmJiBpZk5vdFNldClcbiAgICAgICAgICAgICAgICByZXR1cm4gZHN0O1xuICAgICAgICAgICAgaWYgKHByZXZWYWx1ZSlcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFtdLmNvbmNhdChwcmV2VmFsdWUpLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgICAgICBkc3RbcGFydF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHN0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZHN0ICE9PSBcIm9iamVjdFwiKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJkc3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgaWYgKCFwYXRoKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJwYXRoIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuXG4gICAgcGF0aCA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIHJldHVybiBzZXRQcm9wKGRzdCwgcGF0aCwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBEZWNvcmF0b3Igcm9vdCAoVHlwZVNjcmlwdCkuXG4gKiBAbmFtZSB1dGlsLmRlY29yYXRlUm9vdFxuICogQHR5cGUge1Jvb3R9XG4gKiBAcmVhZG9ubHlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHV0aWwsIFwiZGVjb3JhdGVSb290XCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcm9vdHNbXCJkZWNvcmF0ZWRcIl0gfHwgKHJvb3RzW1wiZGVjb3JhdGVkXCJdID0gbmV3IChyZXF1aXJlKFwiLi9yb290XCIpKSgpKTtcbiAgICB9XG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29tbW9uIHR5cGUgY29uc3RhbnRzLlxuICogQG5hbWVzcGFjZVxuICovXG52YXIgdHlwZXMgPSBleHBvcnRzO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbnZhciBzID0gW1xuICAgIFwiZG91YmxlXCIsICAgLy8gMFxuICAgIFwiZmxvYXRcIiwgICAgLy8gMVxuICAgIFwiaW50MzJcIiwgICAgLy8gMlxuICAgIFwidWludDMyXCIsICAgLy8gM1xuICAgIFwic2ludDMyXCIsICAgLy8gNFxuICAgIFwiZml4ZWQzMlwiLCAgLy8gNVxuICAgIFwic2ZpeGVkMzJcIiwgLy8gNlxuICAgIFwiaW50NjRcIiwgICAgLy8gN1xuICAgIFwidWludDY0XCIsICAgLy8gOFxuICAgIFwic2ludDY0XCIsICAgLy8gOVxuICAgIFwiZml4ZWQ2NFwiLCAgLy8gMTBcbiAgICBcInNmaXhlZDY0XCIsIC8vIDExXG4gICAgXCJib29sXCIsICAgICAvLyAxMlxuICAgIFwic3RyaW5nXCIsICAgLy8gMTNcbiAgICBcImJ5dGVzXCIgICAgIC8vIDE0XG5dO1xuXG5mdW5jdGlvbiBiYWtlKHZhbHVlcywgb2Zmc2V0KSB7XG4gICAgdmFyIGkgPSAwLCBvID0ge307XG4gICAgb2Zmc2V0IHw9IDA7XG4gICAgd2hpbGUgKGkgPCB2YWx1ZXMubGVuZ3RoKSBvW3NbaSArIG9mZnNldF1dID0gdmFsdWVzW2krK107XG4gICAgcmV0dXJuIG87XG59XG5cbi8qKlxuICogQmFzaWMgdHlwZSB3aXJlIHR5cGVzLlxuICogQHR5cGUge09iamVjdC48c3RyaW5nLG51bWJlcj59XG4gKiBAY29uc3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkb3VibGU9MSBGaXhlZDY0IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZsb2F0PTUgRml4ZWQzMiB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnQzMj0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1aW50MzI9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2ludDMyPTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZpeGVkMzI9NSBGaXhlZDMyIHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNmaXhlZDMyPTUgRml4ZWQzMiB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnQ2ND0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1aW50NjQ9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2ludDY0PTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZpeGVkNjQ9MSBGaXhlZDY0IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNmaXhlZDY0PTEgRml4ZWQ2NCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib29sPTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN0cmluZz0yIExkZWxpbSB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBieXRlcz0yIExkZWxpbSB3aXJlIHR5cGVcbiAqL1xudHlwZXMuYmFzaWMgPSBiYWtlKFtcbiAgICAvKiBkb3VibGUgICAqLyAxLFxuICAgIC8qIGZsb2F0ICAgICovIDUsXG4gICAgLyogaW50MzIgICAgKi8gMCxcbiAgICAvKiB1aW50MzIgICAqLyAwLFxuICAgIC8qIHNpbnQzMiAgICovIDAsXG4gICAgLyogZml4ZWQzMiAgKi8gNSxcbiAgICAvKiBzZml4ZWQzMiAqLyA1LFxuICAgIC8qIGludDY0ICAgICovIDAsXG4gICAgLyogdWludDY0ICAgKi8gMCxcbiAgICAvKiBzaW50NjQgICAqLyAwLFxuICAgIC8qIGZpeGVkNjQgICovIDEsXG4gICAgLyogc2ZpeGVkNjQgKi8gMSxcbiAgICAvKiBib29sICAgICAqLyAwLFxuICAgIC8qIHN0cmluZyAgICovIDIsXG4gICAgLyogYnl0ZXMgICAgKi8gMlxuXSk7XG5cbi8qKlxuICogQmFzaWMgdHlwZSBkZWZhdWx0cy5cbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywqPn1cbiAqIEBjb25zdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRvdWJsZT0wIERvdWJsZSBkZWZhdWx0XG4gKiBAcHJvcGVydHkge251bWJlcn0gZmxvYXQ9MCBGbG9hdCBkZWZhdWx0XG4gKiBAcHJvcGVydHkge251bWJlcn0gaW50MzI9MCBJbnQzMiBkZWZhdWx0XG4gKiBAcHJvcGVydHkge251bWJlcn0gdWludDMyPTAgVWludDMyIGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaW50MzI9MCBTaW50MzIgZGVmYXVsdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZpeGVkMzI9MCBGaXhlZDMyIGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZml4ZWQzMj0wIFNmaXhlZDMyIGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnQ2ND0wIEludDY0IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1aW50NjQ9MCBVaW50NjQgZGVmYXVsdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNpbnQ2ND0wIFNpbnQzMiBkZWZhdWx0XG4gKiBAcHJvcGVydHkge251bWJlcn0gZml4ZWQ2ND0wIEZpeGVkNjQgZGVmYXVsdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNmaXhlZDY0PTAgU2ZpeGVkNjQgZGVmYXVsdFxuICogQHByb3BlcnR5IHtib29sZWFufSBib29sPWZhbHNlIEJvb2wgZGVmYXVsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0cmluZz1cIlwiIFN0cmluZyBkZWZhdWx0XG4gKiBAcHJvcGVydHkge0FycmF5LjxudW1iZXI+fSBieXRlcz1BcnJheSgwKSBCeXRlcyBkZWZhdWx0XG4gKiBAcHJvcGVydHkge251bGx9IG1lc3NhZ2U9bnVsbCBNZXNzYWdlIGRlZmF1bHRcbiAqL1xudHlwZXMuZGVmYXVsdHMgPSBiYWtlKFtcbiAgICAvKiBkb3VibGUgICAqLyAwLFxuICAgIC8qIGZsb2F0ICAgICovIDAsXG4gICAgLyogaW50MzIgICAgKi8gMCxcbiAgICAvKiB1aW50MzIgICAqLyAwLFxuICAgIC8qIHNpbnQzMiAgICovIDAsXG4gICAgLyogZml4ZWQzMiAgKi8gMCxcbiAgICAvKiBzZml4ZWQzMiAqLyAwLFxuICAgIC8qIGludDY0ICAgICovIDAsXG4gICAgLyogdWludDY0ICAgKi8gMCxcbiAgICAvKiBzaW50NjQgICAqLyAwLFxuICAgIC8qIGZpeGVkNjQgICovIDAsXG4gICAgLyogc2ZpeGVkNjQgKi8gMCxcbiAgICAvKiBib29sICAgICAqLyBmYWxzZSxcbiAgICAvKiBzdHJpbmcgICAqLyBcIlwiLFxuICAgIC8qIGJ5dGVzICAgICovIHV0aWwuZW1wdHlBcnJheSxcbiAgICAvKiBtZXNzYWdlICAqLyBudWxsXG5dKTtcblxuLyoqXG4gKiBCYXNpYyBsb25nIHR5cGUgd2lyZSB0eXBlcy5cbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxudW1iZXI+fVxuICogQGNvbnN0XG4gKiBAcHJvcGVydHkge251bWJlcn0gaW50NjQ9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gdWludDY0PTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNpbnQ2ND0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmaXhlZDY0PTEgRml4ZWQ2NCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZml4ZWQ2ND0xIEZpeGVkNjQgd2lyZSB0eXBlXG4gKi9cbnR5cGVzLmxvbmcgPSBiYWtlKFtcbiAgICAvKiBpbnQ2NCAgICAqLyAwLFxuICAgIC8qIHVpbnQ2NCAgICovIDAsXG4gICAgLyogc2ludDY0ICAgKi8gMCxcbiAgICAvKiBmaXhlZDY0ICAqLyAxLFxuICAgIC8qIHNmaXhlZDY0ICovIDFcbl0sIDcpO1xuXG4vKipcbiAqIEFsbG93ZWQgdHlwZXMgZm9yIG1hcCBrZXlzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCB3aXJlIHR5cGUuXG4gKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsbnVtYmVyPn1cbiAqIEBjb25zdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGludDMyPTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHVpbnQzMj0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaW50MzI9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gZml4ZWQzMj01IEZpeGVkMzIgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2ZpeGVkMzI9NSBGaXhlZDMyIHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGludDY0PTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHVpbnQ2ND0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaW50NjQ9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gZml4ZWQ2ND0xIEZpeGVkNjQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2ZpeGVkNjQ9MSBGaXhlZDY0IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvb2w9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RyaW5nPTIgTGRlbGltIHdpcmUgdHlwZVxuICovXG50eXBlcy5tYXBLZXkgPSBiYWtlKFtcbiAgICAvKiBpbnQzMiAgICAqLyAwLFxuICAgIC8qIHVpbnQzMiAgICovIDAsXG4gICAgLyogc2ludDMyICAgKi8gMCxcbiAgICAvKiBmaXhlZDMyICAqLyA1LFxuICAgIC8qIHNmaXhlZDMyICovIDUsXG4gICAgLyogaW50NjQgICAgKi8gMCxcbiAgICAvKiB1aW50NjQgICAqLyAwLFxuICAgIC8qIHNpbnQ2NCAgICovIDAsXG4gICAgLyogZml4ZWQ2NCAgKi8gMSxcbiAgICAvKiBzZml4ZWQ2NCAqLyAxLFxuICAgIC8qIGJvb2wgICAgICovIDAsXG4gICAgLyogc3RyaW5nICAgKi8gMlxuXSwgMik7XG5cbi8qKlxuICogQWxsb3dlZCB0eXBlcyBmb3IgcGFja2VkIHJlcGVhdGVkIGZpZWxkcyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgd2lyZSB0eXBlLlxuICogQHR5cGUge09iamVjdC48c3RyaW5nLG51bWJlcj59XG4gKiBAY29uc3RcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkb3VibGU9MSBGaXhlZDY0IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZsb2F0PTUgRml4ZWQzMiB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnQzMj0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1aW50MzI9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2ludDMyPTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZpeGVkMzI9NSBGaXhlZDMyIHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNmaXhlZDMyPTUgRml4ZWQzMiB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnQ2ND0wIFZhcmludCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1aW50NjQ9MCBWYXJpbnQgd2lyZSB0eXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2ludDY0PTAgVmFyaW50IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZpeGVkNjQ9MSBGaXhlZDY0IHdpcmUgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNmaXhlZDY0PTEgRml4ZWQ2NCB3aXJlIHR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib29sPTAgVmFyaW50IHdpcmUgdHlwZVxuICovXG50eXBlcy5wYWNrZWQgPSBiYWtlKFtcbiAgICAvKiBkb3VibGUgICAqLyAxLFxuICAgIC8qIGZsb2F0ICAgICovIDUsXG4gICAgLyogaW50MzIgICAgKi8gMCxcbiAgICAvKiB1aW50MzIgICAqLyAwLFxuICAgIC8qIHNpbnQzMiAgICovIDAsXG4gICAgLyogZml4ZWQzMiAgKi8gNSxcbiAgICAvKiBzZml4ZWQzMiAqLyA1LFxuICAgIC8qIGludDY0ICAgICovIDAsXG4gICAgLyogdWludDY0ICAgKi8gMCxcbiAgICAvKiBzaW50NjQgICAqLyAwLFxuICAgIC8qIGZpeGVkNjQgICovIDEsXG4gICAgLyogc2ZpeGVkNjQgKi8gMSxcbiAgICAvKiBib29sICAgICAqLyAwXG5dKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEZpZWxkO1xuXG4vLyBleHRlbmRzIFJlZmxlY3Rpb25PYmplY3RcbnZhciBSZWZsZWN0aW9uT2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuKChGaWVsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlZmxlY3Rpb25PYmplY3QucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBGaWVsZCkuY2xhc3NOYW1lID0gXCJGaWVsZFwiO1xuXG52YXIgRW51bSAgPSByZXF1aXJlKFwiLi9lbnVtXCIpLFxuICAgIHR5cGVzID0gcmVxdWlyZShcIi4vdHlwZXNcIiksXG4gICAgdXRpbCAgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG52YXIgVHlwZTsgLy8gY3ljbGljXG5cbnZhciBydWxlUmUgPSAvXnJlcXVpcmVkfG9wdGlvbmFsfHJlcGVhdGVkJC87XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBtZXNzYWdlIGZpZWxkIGluc3RhbmNlLiBOb3RlIHRoYXQge0BsaW5rIE1hcEZpZWxkfG1hcCBmaWVsZHN9IGhhdmUgdGhlaXIgb3duIGNsYXNzLlxuICogQG5hbWUgRmllbGRcbiAqIEBjbGFzc2Rlc2MgUmVmbGVjdGVkIG1lc3NhZ2UgZmllbGQuXG4gKiBAZXh0ZW5kcyBGaWVsZEJhc2VcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVW5pcXVlIG5hbWUgd2l0aGluIGl0cyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZCBVbmlxdWUgaWQgd2l0aGluIGl0cyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFZhbHVlIHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdC48c3RyaW5nLCo+fSBbcnVsZT1cIm9wdGlvbmFsXCJdIEZpZWxkIHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdC48c3RyaW5nLCo+fSBbZXh0ZW5kXSBFeHRlbmRlZCB0eXBlIGlmIGRpZmZlcmVudCBmcm9tIHBhcmVudFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW29wdGlvbnNdIERlY2xhcmVkIG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBmaWVsZCBmcm9tIGEgZmllbGQgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEZpZWxkIG5hbWVcbiAqIEBwYXJhbSB7SUZpZWxkfSBqc29uIEZpZWxkIGRlc2NyaXB0b3JcbiAqIEByZXR1cm5zIHtGaWVsZH0gQ3JlYXRlZCBmaWVsZFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBhcmd1bWVudHMgYXJlIGludmFsaWRcbiAqL1xuRmllbGQuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihuYW1lLCBqc29uKSB7XG4gICAgdmFyIGZpZWxkID0gbmV3IEZpZWxkKG5hbWUsIGpzb24uaWQsIGpzb24udHlwZSwganNvbi5ydWxlLCBqc29uLmV4dGVuZCwganNvbi5vcHRpb25zLCBqc29uLmNvbW1lbnQpO1xuICAgIGlmIChqc29uLmVkaXRpb24pXG4gICAgICAgIGZpZWxkLl9lZGl0aW9uID0ganNvbi5lZGl0aW9uO1xuICAgIGZpZWxkLl9kZWZhdWx0RWRpdGlvbiA9IFwicHJvdG8zXCI7ICAvLyBGb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuXG4gICAgcmV0dXJuIGZpZWxkO1xufTtcblxuLyoqXG4gKiBOb3QgYW4gYWN0dWFsIGNvbnN0cnVjdG9yLiBVc2Uge0BsaW5rIEZpZWxkfSBpbnN0ZWFkLlxuICogQGNsYXNzZGVzYyBCYXNlIGNsYXNzIG9mIGFsbCByZWZsZWN0ZWQgbWVzc2FnZSBmaWVsZHMuIFRoaXMgaXMgbm90IGFuIGFjdHVhbCBjbGFzcyBidXQgaGVyZSBmb3IgdGhlIHNha2Ugb2YgaGF2aW5nIGNvbnNpc3RlbnQgdHlwZSBkZWZpbml0aW9ucy5cbiAqIEBleHBvcnRzIEZpZWxkQmFzZVxuICogQGV4dGVuZHMgUmVmbGVjdGlvbk9iamVjdFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBVbmlxdWUgbmFtZSB3aXRoaW4gaXRzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtudW1iZXJ9IGlkIFVuaXF1ZSBpZCB3aXRoaW4gaXRzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVmFsdWUgdHlwZVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0LjxzdHJpbmcsKj59IFtydWxlPVwib3B0aW9uYWxcIl0gRmllbGQgcnVsZVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0LjxzdHJpbmcsKj59IFtleHRlbmRdIEV4dGVuZGVkIHR5cGUgaWYgZGlmZmVyZW50IGZyb20gcGFyZW50XG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBbb3B0aW9uc10gRGVjbGFyZWQgb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IFtjb21tZW50XSBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIEZpZWxkKG5hbWUsIGlkLCB0eXBlLCBydWxlLCBleHRlbmQsIG9wdGlvbnMsIGNvbW1lbnQpIHtcblxuICAgIGlmICh1dGlsLmlzT2JqZWN0KHJ1bGUpKSB7XG4gICAgICAgIGNvbW1lbnQgPSBleHRlbmQ7XG4gICAgICAgIG9wdGlvbnMgPSBydWxlO1xuICAgICAgICBydWxlID0gZXh0ZW5kID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAodXRpbC5pc09iamVjdChleHRlbmQpKSB7XG4gICAgICAgIGNvbW1lbnQgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kO1xuICAgICAgICBleHRlbmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgUmVmbGVjdGlvbk9iamVjdC5jYWxsKHRoaXMsIG5hbWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCF1dGlsLmlzSW50ZWdlcihpZCkgfHwgaWQgPCAwKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJpZCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJcIik7XG5cbiAgICBpZiAoIXV0aWwuaXNTdHJpbmcodHlwZSkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInR5cGUgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblxuICAgIGlmIChydWxlICE9PSB1bmRlZmluZWQgJiYgIXJ1bGVSZS50ZXN0KHJ1bGUgPSBydWxlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJ1bGUgbXVzdCBiZSBhIHN0cmluZyBydWxlXCIpO1xuXG4gICAgaWYgKGV4dGVuZCAhPT0gdW5kZWZpbmVkICYmICF1dGlsLmlzU3RyaW5nKGV4dGVuZCkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcImV4dGVuZCBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXG4gICAgLyoqXG4gICAgICogRmllbGQgcnVsZSwgaWYgYW55LlxuICAgICAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGlmIChydWxlID09PSBcInByb3RvM19vcHRpb25hbFwiKSB7XG4gICAgICAgIHJ1bGUgPSBcIm9wdGlvbmFsXCI7XG4gICAgfVxuICAgIHRoaXMucnVsZSA9IHJ1bGUgJiYgcnVsZSAhPT0gXCJvcHRpb25hbFwiID8gcnVsZSA6IHVuZGVmaW5lZDsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBGaWVsZCB0eXBlLlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50eXBlID0gdHlwZTsgLy8gdG9KU09OXG5cbiAgICAvKipcbiAgICAgKiBVbmlxdWUgZmllbGQgaWQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmlkID0gaWQ7IC8vIHRvSlNPTiwgbWFya2VyXG5cbiAgICAvKipcbiAgICAgKiBFeHRlbmRlZCB0eXBlIGlmIGRpZmZlcmVudCBmcm9tIHBhcmVudC5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmV4dGVuZCA9IGV4dGVuZCB8fCB1bmRlZmluZWQ7IC8vIHRvSlNPTlxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGZpZWxkIGlzIHJlcGVhdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVwZWF0ZWQgPSBydWxlID09PSBcInJlcGVhdGVkXCI7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgYSBtYXAgb3Igbm90LlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubWFwID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIHRoaXMgZmllbGQgYmVsb25ncyB0by5cbiAgICAgKiBAdHlwZSB7VHlwZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBPbmVPZiB0aGlzIGZpZWxkIGJlbG9uZ3MgdG8sIGlmIGFueSxcbiAgICAgKiBAdHlwZSB7T25lT2Z8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLnBhcnRPZiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgdHlwZSdzIGRlZmF1bHQgdmFsdWUuXG4gICAgICogQHR5cGUgeyp9XG4gICAgICovXG4gICAgdGhpcy50eXBlRGVmYXVsdCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQncyBkZWZhdWx0IHZhbHVlIG9uIHByb3RvdHlwZXMuXG4gICAgICogQHR5cGUgeyp9XG4gICAgICovXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGZpZWxkJ3MgdmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBsb25nLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMubG9uZyA9IHV0aWwuTG9uZyA/IHR5cGVzLmxvbmdbdHlwZV0gIT09IHVuZGVmaW5lZCA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGZpZWxkJ3MgdmFsdWUgaXMgYSBidWZmZXIuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5ieXRlcyA9IHR5cGUgPT09IFwiYnl0ZXNcIjtcblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVkIHR5cGUgaWYgbm90IGEgYmFzaWMgdHlwZS5cbiAgICAgKiBAdHlwZSB7VHlwZXxFbnVtfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5yZXNvbHZlZFR5cGUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2lzdGVyLWZpZWxkIHdpdGhpbiB0aGUgZXh0ZW5kZWQgdHlwZSBpZiBhIGRlY2xhcmluZyBleHRlbnNpb24gZmllbGQuXG4gICAgICogQHR5cGUge0ZpZWxkfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5leHRlbnNpb25GaWVsZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBTaXN0ZXItZmllbGQgd2l0aGluIHRoZSBkZWNsYXJpbmcgbmFtZXNwYWNlIGlmIGFuIGV4dGVuZGVkIGZpZWxkLlxuICAgICAqIEB0eXBlIHtGaWVsZHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuZGVjbGFyaW5nRmllbGQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ29tbWVudCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cbiAqIEBuYW1lIEZpZWxkI3JlcXVpcmVkXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqIEByZWFkb25seVxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmllbGQucHJvdG90eXBlLCBcInJlcXVpcmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmVhdHVyZXMuZmllbGRfcHJlc2VuY2UgPT09IFwiTEVHQUNZX1JFUVVJUkVEXCI7XG4gICAgfVxufSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkLlxuICogQG5hbWUgRmllbGQjb3B0aW9uYWxcbiAqIEB0eXBlIHtib29sZWFufVxuICogQHJlYWRvbmx5XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWVsZC5wcm90b3R5cGUsIFwib3B0aW9uYWxcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5yZXF1aXJlZDtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBmaWVsZCB1c2VzIHRhZy1kZWxpbWl0ZWQgZW5jb2RpbmcuICBJbiBwcm90bzIgdGhpc1xuICogY29ycmVzcG9uZGVkIHRvIGdyb3VwIHN5bnRheC5cbiAqIEBuYW1lIEZpZWxkI2RlbGltaXRlZFxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAcmVhZG9ubHlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpZWxkLnByb3RvdHlwZSwgXCJkZWxpbWl0ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVkVHlwZSBpbnN0YW5jZW9mIFR5cGUgJiZcbiAgICAgICAgICAgIHRoaXMuX2ZlYXR1cmVzLm1lc3NhZ2VfZW5jb2RpbmcgPT09IFwiREVMSU1JVEVEXCI7XG4gICAgfVxufSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZmllbGQgaXMgcGFja2VkLiBPbmx5IHJlbGV2YW50IHdoZW4gcmVwZWF0ZWQuXG4gKiBAbmFtZSBGaWVsZCNwYWNrZWRcbiAqIEB0eXBlIHtib29sZWFufVxuICogQHJlYWRvbmx5XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWVsZC5wcm90b3R5cGUsIFwicGFja2VkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmVhdHVyZXMucmVwZWF0ZWRfZmllbGRfZW5jb2RpbmcgPT09IFwiUEFDS0VEXCI7XG4gICAgfVxufSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZmllbGQgdHJhY2tzIHByZXNlbmNlLlxuICogQG5hbWUgRmllbGQjaGFzUHJlc2VuY2VcbiAqIEB0eXBlIHtib29sZWFufVxuICogQHJlYWRvbmx5XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWVsZC5wcm90b3R5cGUsIFwiaGFzUHJlc2VuY2VcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcGVhdGVkIHx8IHRoaXMubWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFydE9mIHx8IC8vIG9uZW9mc1xuICAgICAgICAgICAgdGhpcy5kZWNsYXJpbmdGaWVsZCB8fCB0aGlzLmV4dGVuc2lvbkZpZWxkIHx8IC8vIGV4dGVuc2lvbnNcbiAgICAgICAgICAgIHRoaXMuX2ZlYXR1cmVzLmZpZWxkX3ByZXNlbmNlICE9PSBcIklNUExJQ0lUXCI7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkZpZWxkLnByb3RvdHlwZS5zZXRPcHRpb24gPSBmdW5jdGlvbiBzZXRPcHRpb24obmFtZSwgdmFsdWUsIGlmTm90U2V0KSB7XG4gICAgcmV0dXJuIFJlZmxlY3Rpb25PYmplY3QucHJvdG90eXBlLnNldE9wdGlvbi5jYWxsKHRoaXMsIG5hbWUsIHZhbHVlLCBpZk5vdFNldCk7XG59O1xuXG4vKipcbiAqIEZpZWxkIGRlc2NyaXB0b3IuXG4gKiBAaW50ZXJmYWNlIElGaWVsZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtydWxlPVwib3B0aW9uYWxcIl0gRmllbGQgcnVsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgRmllbGQgdHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkIEZpZWxkIGlkXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLCo+fSBbb3B0aW9uc10gRmllbGQgb3B0aW9uc1xuICovXG5cbi8qKlxuICogRXh0ZW5zaW9uIGZpZWxkIGRlc2NyaXB0b3IuXG4gKiBAaW50ZXJmYWNlIElFeHRlbnNpb25GaWVsZFxuICogQGV4dGVuZHMgSUZpZWxkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0ZW5kIEV4dGVuZGVkIHR5cGVcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgZmllbGQgdG8gYSBmaWVsZCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtJVG9KU09OT3B0aW9uc30gW3RvSlNPTk9wdGlvbnNdIEpTT04gY29udmVyc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyB7SUZpZWxkfSBGaWVsZCBkZXNjcmlwdG9yXG4gKi9cbkZpZWxkLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04odG9KU09OT3B0aW9ucykge1xuICAgIHZhciBrZWVwQ29tbWVudHMgPSB0b0pTT05PcHRpb25zID8gQm9vbGVhbih0b0pTT05PcHRpb25zLmtlZXBDb21tZW50cykgOiBmYWxzZTtcbiAgICByZXR1cm4gdXRpbC50b09iamVjdChbXG4gICAgICAgIFwiZWRpdGlvblwiICwgdGhpcy5fZWRpdGlvblRvSlNPTigpLFxuICAgICAgICBcInJ1bGVcIiAgICAsIHRoaXMucnVsZSAhPT0gXCJvcHRpb25hbFwiICYmIHRoaXMucnVsZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIFwidHlwZVwiICAgICwgdGhpcy50eXBlLFxuICAgICAgICBcImlkXCIgICAgICAsIHRoaXMuaWQsXG4gICAgICAgIFwiZXh0ZW5kXCIgICwgdGhpcy5leHRlbmQsXG4gICAgICAgIFwib3B0aW9uc1wiICwgdGhpcy5vcHRpb25zLFxuICAgICAgICBcImNvbW1lbnRcIiAsIGtlZXBDb21tZW50cyA/IHRoaXMuY29tbWVudCA6IHVuZGVmaW5lZFxuICAgIF0pO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGlzIGZpZWxkJ3MgdHlwZSByZWZlcmVuY2VzLlxuICogQHJldHVybnMge0ZpZWxkfSBgdGhpc2BcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgcmVmZXJlbmNlIGNhbm5vdCBiZSByZXNvbHZlZFxuICovXG5GaWVsZC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG5cbiAgICBpZiAodGhpcy5yZXNvbHZlZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoKHRoaXMudHlwZURlZmF1bHQgPSB0eXBlcy5kZWZhdWx0c1t0aGlzLnR5cGVdKSA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBhIGJhc2ljIHR5cGUsIHJlc29sdmUgaXRcbiAgICAgICAgdGhpcy5yZXNvbHZlZFR5cGUgPSAodGhpcy5kZWNsYXJpbmdGaWVsZCA/IHRoaXMuZGVjbGFyaW5nRmllbGQucGFyZW50IDogdGhpcy5wYXJlbnQpLmxvb2t1cFR5cGVPckVudW0odGhpcy50eXBlKTtcbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZWRUeXBlIGluc3RhbmNlb2YgVHlwZSlcbiAgICAgICAgICAgIHRoaXMudHlwZURlZmF1bHQgPSBudWxsO1xuICAgICAgICBlbHNlIC8vIGluc3RhbmNlb2YgRW51bVxuICAgICAgICAgICAgdGhpcy50eXBlRGVmYXVsdCA9IHRoaXMucmVzb2x2ZWRUeXBlLnZhbHVlc1tPYmplY3Qua2V5cyh0aGlzLnJlc29sdmVkVHlwZS52YWx1ZXMpWzBdXTsgLy8gZmlyc3QgZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wcm90bzNfb3B0aW9uYWwpIHtcbiAgICAgICAgLy8gcHJvdG8zIHNjYWxhciB2YWx1ZSBtYXJrZWQgb3B0aW9uYWw7IHNob3VsZCBkZWZhdWx0IHRvIG51bGxcbiAgICAgICAgdGhpcy50eXBlRGVmYXVsdCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gdXNlIGV4cGxpY2l0bHkgc2V0IGRlZmF1bHQgdmFsdWUgaWYgcHJlc2VudFxuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zW1wiZGVmYXVsdFwiXSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMudHlwZURlZmF1bHQgPSB0aGlzLm9wdGlvbnNbXCJkZWZhdWx0XCJdO1xuICAgICAgICBpZiAodGhpcy5yZXNvbHZlZFR5cGUgaW5zdGFuY2VvZiBFbnVtICYmIHR5cGVvZiB0aGlzLnR5cGVEZWZhdWx0ID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgdGhpcy50eXBlRGVmYXVsdCA9IHRoaXMucmVzb2x2ZWRUeXBlLnZhbHVlc1t0aGlzLnR5cGVEZWZhdWx0XTtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdW5uZWNlc3Nhcnkgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYWNrZWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlc29sdmVkVHlwZSAmJiAhKHRoaXMucmVzb2x2ZWRUeXBlIGluc3RhbmNlb2YgRW51bSkpXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zLnBhY2tlZDtcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IHRvIGludGVybmFsIGRhdGEgdHlwZSBpZiBuZWNlc3NzYXJ5XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgICB0aGlzLnR5cGVEZWZhdWx0ID0gdXRpbC5Mb25nLmZyb21OdW1iZXIodGhpcy50eXBlRGVmYXVsdCwgdGhpcy50eXBlLmNoYXJBdCgwKSA9PT0gXCJ1XCIpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChPYmplY3QuZnJlZXplKVxuICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzLnR5cGVEZWZhdWx0KTsgLy8gbG9uZyBpbnN0YW5jZXMgYXJlIG1lYW50IHRvIGJlIGltbXV0YWJsZSBhbnl3YXkgKGkuZS4gdXNlIHNtYWxsIGludCBjYWNoZSB0aGF0IGV2ZW4gcmVxdWlyZXMgaXQpXG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuYnl0ZXMgJiYgdHlwZW9mIHRoaXMudHlwZURlZmF1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdmFyIGJ1ZjtcbiAgICAgICAgaWYgKHV0aWwuYmFzZTY0LnRlc3QodGhpcy50eXBlRGVmYXVsdCkpXG4gICAgICAgICAgICB1dGlsLmJhc2U2NC5kZWNvZGUodGhpcy50eXBlRGVmYXVsdCwgYnVmID0gdXRpbC5uZXdCdWZmZXIodXRpbC5iYXNlNjQubGVuZ3RoKHRoaXMudHlwZURlZmF1bHQpKSwgMCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHV0aWwudXRmOC53cml0ZSh0aGlzLnR5cGVEZWZhdWx0LCBidWYgPSB1dGlsLm5ld0J1ZmZlcih1dGlsLnV0ZjgubGVuZ3RoKHRoaXMudHlwZURlZmF1bHQpKSwgMCk7XG4gICAgICAgIHRoaXMudHlwZURlZmF1bHQgPSBidWY7XG4gICAgfVxuXG4gICAgLy8gdGFrZSBzcGVjaWFsIGNhcmUgb2YgbWFwcyBhbmQgcmVwZWF0ZWQgZmllbGRzXG4gICAgaWYgKHRoaXMubWFwKVxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHV0aWwuZW1wdHlPYmplY3Q7XG4gICAgZWxzZSBpZiAodGhpcy5yZXBlYXRlZClcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1dGlsLmVtcHR5QXJyYXk7XG4gICAgZWxzZVxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHRoaXMudHlwZURlZmF1bHQ7XG5cbiAgICAvLyBlbnN1cmUgcHJvcGVyIHZhbHVlIG9uIHByb3RvdHlwZVxuICAgIGlmICh0aGlzLnBhcmVudCBpbnN0YW5jZW9mIFR5cGUpXG4gICAgICAgIHRoaXMucGFyZW50LmN0b3IucHJvdG90eXBlW3RoaXMubmFtZV0gPSB0aGlzLmRlZmF1bHRWYWx1ZTtcblxuICAgIHJldHVybiBSZWZsZWN0aW9uT2JqZWN0LnByb3RvdHlwZS5yZXNvbHZlLmNhbGwodGhpcyk7XG59O1xuXG4vKipcbiAqIEluZmVycyBmaWVsZCBmZWF0dXJlcyBmcm9tIGxlZ2FjeSBzeW50YXggdGhhdCBtYXkgaGF2ZSBiZWVuIHNwZWNpZmllZCBkaWZmZXJlbnRseS5cbiAqIGluIG9sZGVyIGVkaXRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBlZGl0aW9uIFRoZSBlZGl0aW9uIHRoaXMgcHJvdG8gaXMgb24sIG9yIHVuZGVmaW5lZCBpZiBwcmUtZWRpdGlvbnNcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmZWF0dXJlIHZhbHVlcyB0byBvdmVycmlkZVxuICovXG5GaWVsZC5wcm90b3R5cGUuX2luZmVyTGVnYWN5UHJvdG9GZWF0dXJlcyA9IGZ1bmN0aW9uIF9pbmZlckxlZ2FjeVByb3RvRmVhdHVyZXMoZWRpdGlvbikge1xuICAgIGlmIChlZGl0aW9uICE9PSBcInByb3RvMlwiICYmIGVkaXRpb24gIT09IFwicHJvdG8zXCIpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHZhciBmZWF0dXJlcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMucnVsZSA9PT0gXCJyZXF1aXJlZFwiKSB7XG4gICAgICAgIGZlYXR1cmVzLmZpZWxkX3ByZXNlbmNlID0gXCJMRUdBQ1lfUkVRVUlSRURcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyZW50ICYmIHR5cGVzLmRlZmF1bHRzW3RoaXMudHlwZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBXZSBjYW4ndCB1c2UgcmVzb2x2ZWRUeXBlIGJlY2F1c2UgdHlwZXMgbWF5IG5vdCBoYXZlIGJlZW4gcmVzb2x2ZWQgeWV0LiAgSG93ZXZlcixcbiAgICAgICAgLy8gbGVnYWN5IGdyb3VwcyBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIHNjb3BlIGFzIHRoZSBmaWVsZCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFcbiAgICAgICAgLy8gZnVsbCBzY2FuIG9mIHRoZSB0cmVlLlxuICAgICAgICB2YXIgdHlwZSA9IHRoaXMucGFyZW50LmdldCh0aGlzLnR5cGUuc3BsaXQoXCIuXCIpLnBvcCgpKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSBpbnN0YW5jZW9mIFR5cGUgJiYgdHlwZS5ncm91cCkge1xuICAgICAgICAgICAgZmVhdHVyZXMubWVzc2FnZV9lbmNvZGluZyA9IFwiREVMSU1JVEVEXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZ2V0T3B0aW9uKFwicGFja2VkXCIpID09PSB0cnVlKSB7XG4gICAgICAgIGZlYXR1cmVzLnJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nID0gXCJQQUNLRURcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0T3B0aW9uKFwicGFja2VkXCIpID09PSBmYWxzZSkge1xuICAgICAgICBmZWF0dXJlcy5yZXBlYXRlZF9maWVsZF9lbmNvZGluZyA9IFwiRVhQQU5ERURcIjtcbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufTtcblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuRmllbGQucHJvdG90eXBlLl9yZXNvbHZlRmVhdHVyZXMgPSBmdW5jdGlvbiBfcmVzb2x2ZUZlYXR1cmVzKGVkaXRpb24pIHtcbiAgICByZXR1cm4gUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuX3Jlc29sdmVGZWF0dXJlcy5jYWxsKHRoaXMsIHRoaXMuX2VkaXRpb24gfHwgZWRpdGlvbik7XG59O1xuXG4vKipcbiAqIERlY29yYXRvciBmdW5jdGlvbiBhcyByZXR1cm5lZCBieSB7QGxpbmsgRmllbGQuZH0gYW5kIHtAbGluayBNYXBGaWVsZC5kfSAoVHlwZVNjcmlwdCkuXG4gKiBAdHlwZWRlZiBGaWVsZERlY29yYXRvclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUYXJnZXQgcHJvdG90eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIEZpZWxkIG5hbWVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuLyoqXG4gKiBGaWVsZCBkZWNvcmF0b3IgKFR5cGVTY3JpcHQpLlxuICogQG5hbWUgRmllbGQuZFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZmllbGRJZCBGaWVsZCBpZFxuICogQHBhcmFtIHtcImRvdWJsZVwifFwiZmxvYXRcInxcImludDMyXCJ8XCJ1aW50MzJcInxcInNpbnQzMlwifFwiZml4ZWQzMlwifFwic2ZpeGVkMzJcInxcImludDY0XCJ8XCJ1aW50NjRcInxcInNpbnQ2NFwifFwiZml4ZWQ2NFwifFwic2ZpeGVkNjRcInxcInN0cmluZ1wifFwiYm9vbFwifFwiYnl0ZXNcInxPYmplY3R9IGZpZWxkVHlwZSBGaWVsZCB0eXBlXG4gKiBAcGFyYW0ge1wib3B0aW9uYWxcInxcInJlcXVpcmVkXCJ8XCJyZXBlYXRlZFwifSBbZmllbGRSdWxlPVwib3B0aW9uYWxcIl0gRmllbGQgcnVsZVxuICogQHBhcmFtIHtUfSBbZGVmYXVsdFZhbHVlXSBEZWZhdWx0IHZhbHVlXG4gKiBAcmV0dXJucyB7RmllbGREZWNvcmF0b3J9IERlY29yYXRvciBmdW5jdGlvblxuICogQHRlbXBsYXRlIFQgZXh0ZW5kcyBudW1iZXIgfCBudW1iZXJbXSB8IExvbmcgfCBMb25nW10gfCBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBib29sZWFuW10gfCBVaW50OEFycmF5IHwgVWludDhBcnJheVtdIHwgQnVmZmVyIHwgQnVmZmVyW11cbiAqL1xuRmllbGQuZCA9IGZ1bmN0aW9uIGRlY29yYXRlRmllbGQoZmllbGRJZCwgZmllbGRUeXBlLCBmaWVsZFJ1bGUsIGRlZmF1bHRWYWx1ZSkge1xuXG4gICAgLy8gc3VibWVzc2FnZTogZGVjb3JhdGUgdGhlIHN1Ym1lc3NhZ2UgYW5kIHVzZSBpdHMgbmFtZSBhcyB0aGUgdHlwZVxuICAgIGlmICh0eXBlb2YgZmllbGRUeXBlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZpZWxkVHlwZSA9IHV0aWwuZGVjb3JhdGVUeXBlKGZpZWxkVHlwZSkubmFtZTtcblxuICAgIC8vIGVudW0gcmVmZXJlbmNlOiBjcmVhdGUgYSByZWZsZWN0ZWQgY29weSBvZiB0aGUgZW51bSBhbmQga2VlcCByZXVzZWluZyBpdFxuICAgIGVsc2UgaWYgKGZpZWxkVHlwZSAmJiB0eXBlb2YgZmllbGRUeXBlID09PSBcIm9iamVjdFwiKVxuICAgICAgICBmaWVsZFR5cGUgPSB1dGlsLmRlY29yYXRlRW51bShmaWVsZFR5cGUpLm5hbWU7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZmllbGREZWNvcmF0b3IocHJvdG90eXBlLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgdXRpbC5kZWNvcmF0ZVR5cGUocHJvdG90eXBlLmNvbnN0cnVjdG9yKVxuICAgICAgICAgICAgLmFkZChuZXcgRmllbGQoZmllbGROYW1lLCBmaWVsZElkLCBmaWVsZFR5cGUsIGZpZWxkUnVsZSwgeyBcImRlZmF1bHRcIjogZGVmYXVsdFZhbHVlIH0pKTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBGaWVsZCBkZWNvcmF0b3IgKFR5cGVTY3JpcHQpLlxuICogQG5hbWUgRmllbGQuZFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZmllbGRJZCBGaWVsZCBpZFxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUPnxzdHJpbmd9IGZpZWxkVHlwZSBGaWVsZCB0eXBlXG4gKiBAcGFyYW0ge1wib3B0aW9uYWxcInxcInJlcXVpcmVkXCJ8XCJyZXBlYXRlZFwifSBbZmllbGRSdWxlPVwib3B0aW9uYWxcIl0gRmllbGQgcnVsZVxuICogQHJldHVybnMge0ZpZWxkRGVjb3JhdG9yfSBEZWNvcmF0b3IgZnVuY3Rpb25cbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICogQHZhcmlhdGlvbiAyXG4gKi9cbi8vIGxpa2UgRmllbGQuZCBidXQgd2l0aG91dCBhIGRlZmF1bHQgdmFsdWVcblxuLy8gU2V0cyB1cCBjeWNsaWMgZGVwZW5kZW5jaWVzIChjYWxsZWQgaW4gaW5kZXgtbGlnaHQpXG5GaWVsZC5fY29uZmlndXJlID0gZnVuY3Rpb24gY29uZmlndXJlKFR5cGVfKSB7XG4gICAgVHlwZSA9IFR5cGVfO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IE9uZU9mO1xuXG4vLyBleHRlbmRzIFJlZmxlY3Rpb25PYmplY3RcbnZhciBSZWZsZWN0aW9uT2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuKChPbmVPZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlZmxlY3Rpb25PYmplY3QucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBPbmVPZikuY2xhc3NOYW1lID0gXCJPbmVPZlwiO1xuXG52YXIgRmllbGQgPSByZXF1aXJlKFwiLi9maWVsZFwiKSxcbiAgICB1dGlsICA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBvbmVvZiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgUmVmbGVjdGVkIG9uZW9mLlxuICogQGV4dGVuZHMgUmVmbGVjdGlvbk9iamVjdFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBPbmVvZiBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ1tdfE9iamVjdC48c3RyaW5nLCo+fSBbZmllbGROYW1lc10gRmllbGQgbmFtZXNcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBEZWNsYXJlZCBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbW1lbnRdIENvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmllbGRcbiAqL1xuZnVuY3Rpb24gT25lT2YobmFtZSwgZmllbGROYW1lcywgb3B0aW9ucywgY29tbWVudCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZE5hbWVzKSkge1xuICAgICAgICBvcHRpb25zID0gZmllbGROYW1lcztcbiAgICAgICAgZmllbGROYW1lcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgUmVmbGVjdGlvbk9iamVjdC5jYWxsKHRoaXMsIG5hbWUsIG9wdGlvbnMpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCEoZmllbGROYW1lcyA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkoZmllbGROYW1lcykpKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJmaWVsZE5hbWVzIG11c3QgYmUgYW4gQXJyYXlcIik7XG5cbiAgICAvKipcbiAgICAgKiBGaWVsZCBuYW1lcyB0aGF0IGJlbG9uZyB0byB0aGlzIG9uZW9mLlxuICAgICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICB0aGlzLm9uZW9mID0gZmllbGROYW1lcyB8fCBbXTsgLy8gdG9KU09OLCBtYXJrZXJcblxuICAgIC8qKlxuICAgICAqIEZpZWxkcyB0aGF0IGJlbG9uZyB0byB0aGlzIG9uZW9mIGFzIGFuIGFycmF5IGZvciBpdGVyYXRpb24uXG4gICAgICogQHR5cGUge0ZpZWxkW119XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgdGhpcy5maWVsZHNBcnJheSA9IFtdOyAvLyBkZWNsYXJlZCByZWFkb25seSBmb3IgY29uZm9ybWFuY2UsIHBvc3NpYmx5IG5vdCB5ZXQgYWRkZWQgdG8gcGFyZW50XG5cbiAgICAvKipcbiAgICAgKiBDb21tZW50IGZvciB0aGlzIGZpZWxkLlxuICAgICAqIEB0eXBlIHtzdHJpbmd8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50O1xufVxuXG4vKipcbiAqIE9uZW9mIGRlc2NyaXB0b3IuXG4gKiBAaW50ZXJmYWNlIElPbmVPZlxuICogQHByb3BlcnR5IHtBcnJheS48c3RyaW5nPn0gb25lb2YgT25lb2YgZmllbGQgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBPbmVvZiBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgb25lb2YgZnJvbSBhIG9uZW9mIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBPbmVvZiBuYW1lXG4gKiBAcGFyYW0ge0lPbmVPZn0ganNvbiBPbmVvZiBkZXNjcmlwdG9yXG4gKiBAcmV0dXJucyB7T25lT2Z9IENyZWF0ZWQgb25lb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYXJndW1lbnRzIGFyZSBpbnZhbGlkXG4gKi9cbk9uZU9mLmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04obmFtZSwganNvbikge1xuICAgIHJldHVybiBuZXcgT25lT2YobmFtZSwganNvbi5vbmVvZiwganNvbi5vcHRpb25zLCBqc29uLmNvbW1lbnQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIG9uZW9mIHRvIGEgb25lb2YgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7SVRvSlNPTk9wdGlvbnN9IFt0b0pTT05PcHRpb25zXSBKU09OIGNvbnZlcnNpb24gb3B0aW9uc1xuICogQHJldHVybnMge0lPbmVPZn0gT25lb2YgZGVzY3JpcHRvclxuICovXG5PbmVPZi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKHRvSlNPTk9wdGlvbnMpIHtcbiAgICB2YXIga2VlcENvbW1lbnRzID0gdG9KU09OT3B0aW9ucyA/IEJvb2xlYW4odG9KU09OT3B0aW9ucy5rZWVwQ29tbWVudHMpIDogZmFsc2U7XG4gICAgcmV0dXJuIHV0aWwudG9PYmplY3QoW1xuICAgICAgICBcIm9wdGlvbnNcIiAsIHRoaXMub3B0aW9ucyxcbiAgICAgICAgXCJvbmVvZlwiICAgLCB0aGlzLm9uZW9mLFxuICAgICAgICBcImNvbW1lbnRcIiAsIGtlZXBDb21tZW50cyA/IHRoaXMuY29tbWVudCA6IHVuZGVmaW5lZFxuICAgIF0pO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBmaWVsZHMgb2YgdGhlIHNwZWNpZmllZCBvbmVvZiB0byB0aGUgcGFyZW50IGlmIG5vdCBhbHJlYWR5IGRvbmUgc28uXG4gKiBAcGFyYW0ge09uZU9mfSBvbmVvZiBUaGUgb25lb2ZcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAaW5uZXJcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gYWRkRmllbGRzVG9QYXJlbnQob25lb2YpIHtcbiAgICBpZiAob25lb2YucGFyZW50KVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9uZW9mLmZpZWxkc0FycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgaWYgKCFvbmVvZi5maWVsZHNBcnJheVtpXS5wYXJlbnQpXG4gICAgICAgICAgICAgICAgb25lb2YucGFyZW50LmFkZChvbmVvZi5maWVsZHNBcnJheVtpXSk7XG59XG5cbi8qKlxuICogQWRkcyBhIGZpZWxkIHRvIHRoaXMgb25lb2YgYW5kIHJlbW92ZXMgaXQgZnJvbSBpdHMgY3VycmVudCBwYXJlbnQsIGlmIGFueS5cbiAqIEBwYXJhbSB7RmllbGR9IGZpZWxkIEZpZWxkIHRvIGFkZFxuICogQHJldHVybnMge09uZU9mfSBgdGhpc2BcbiAqL1xuT25lT2YucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChmaWVsZCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCEoZmllbGQgaW5zdGFuY2VvZiBGaWVsZCkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcImZpZWxkIG11c3QgYmUgYSBGaWVsZFwiKTtcblxuICAgIGlmIChmaWVsZC5wYXJlbnQgJiYgZmllbGQucGFyZW50ICE9PSB0aGlzLnBhcmVudClcbiAgICAgICAgZmllbGQucGFyZW50LnJlbW92ZShmaWVsZCk7XG4gICAgdGhpcy5vbmVvZi5wdXNoKGZpZWxkLm5hbWUpO1xuICAgIHRoaXMuZmllbGRzQXJyYXkucHVzaChmaWVsZCk7XG4gICAgZmllbGQucGFydE9mID0gdGhpczsgLy8gZmllbGQucGFyZW50IHJlbWFpbnMgbnVsbFxuICAgIGFkZEZpZWxkc1RvUGFyZW50KHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIGEgZmllbGQgZnJvbSB0aGlzIG9uZW9mIGFuZCBwdXRzIGl0IGJhY2sgdG8gdGhlIG9uZW9mJ3MgcGFyZW50LlxuICogQHBhcmFtIHtGaWVsZH0gZmllbGQgRmllbGQgdG8gcmVtb3ZlXG4gKiBAcmV0dXJucyB7T25lT2Z9IGB0aGlzYFxuICovXG5PbmVPZi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGZpZWxkKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIShmaWVsZCBpbnN0YW5jZW9mIEZpZWxkKSlcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiZmllbGQgbXVzdCBiZSBhIEZpZWxkXCIpO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5maWVsZHNBcnJheS5pbmRleE9mKGZpZWxkKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgIHRocm93IEVycm9yKGZpZWxkICsgXCIgaXMgbm90IGEgbWVtYmVyIG9mIFwiICsgdGhpcyk7XG5cbiAgICB0aGlzLmZpZWxkc0FycmF5LnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSB0aGlzLm9uZW9mLmluZGV4T2YoZmllbGQubmFtZSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpbmRleCA+IC0xKSAvLyB0aGVvcmV0aWNhbFxuICAgICAgICB0aGlzLm9uZW9mLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICBmaWVsZC5wYXJ0T2YgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuT25lT2YucHJvdG90eXBlLm9uQWRkID0gZnVuY3Rpb24gb25BZGQocGFyZW50KSB7XG4gICAgUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvLyBDb2xsZWN0IHByZXNlbnQgZmllbGRzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9uZW9mLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IHBhcmVudC5nZXQodGhpcy5vbmVvZltpXSk7XG4gICAgICAgIGlmIChmaWVsZCAmJiAhZmllbGQucGFydE9mKSB7XG4gICAgICAgICAgICBmaWVsZC5wYXJ0T2YgPSBzZWxmO1xuICAgICAgICAgICAgc2VsZi5maWVsZHNBcnJheS5wdXNoKGZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGQgbm90IHlldCBwcmVzZW50IGZpZWxkc1xuICAgIGFkZEZpZWxkc1RvUGFyZW50KHRoaXMpO1xufTtcblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuT25lT2YucHJvdG90eXBlLm9uUmVtb3ZlID0gZnVuY3Rpb24gb25SZW1vdmUocGFyZW50KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGZpZWxkOyBpIDwgdGhpcy5maWVsZHNBcnJheS5sZW5ndGg7ICsraSlcbiAgICAgICAgaWYgKChmaWVsZCA9IHRoaXMuZmllbGRzQXJyYXlbaV0pLnBhcmVudClcbiAgICAgICAgICAgIGZpZWxkLnBhcmVudC5yZW1vdmUoZmllbGQpO1xuICAgIFJlZmxlY3Rpb25PYmplY3QucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcywgcGFyZW50KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gYSBzeW50aGV0aWMgb25lb2YgY3JlYXRlZCBmb3JcbiAqIGEgcHJvdG8zIG9wdGlvbmFsIGZpZWxkLiAgTm8gYmVoYXZpb3JhbCBsb2dpYyBzaG91bGQgZGVwZW5kIG9uIHRoaXMsIGJ1dCBpdFxuICogY2FuIGJlIHJlbGV2YW50IGZvciByZWZsZWN0aW9uLlxuICogQG5hbWUgT25lT2YjaXNQcm90bzNPcHRpb25hbFxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAcmVhZG9ubHlcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9uZU9mLnByb3RvdHlwZSwgXCJpc1Byb3RvM09wdGlvbmFsXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5maWVsZHNBcnJheSA9PSBudWxsIHx8IHRoaXMuZmllbGRzQXJyYXkubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmllbGQgPSB0aGlzLmZpZWxkc0FycmF5WzBdO1xuICAgICAgICByZXR1cm4gZmllbGQub3B0aW9ucyAhPSBudWxsICYmIGZpZWxkLm9wdGlvbnNbXCJwcm90bzNfb3B0aW9uYWxcIl0gPT09IHRydWU7XG4gICAgfVxufSk7XG5cbi8qKlxuICogRGVjb3JhdG9yIGZ1bmN0aW9uIGFzIHJldHVybmVkIGJ5IHtAbGluayBPbmVPZi5kfSAoVHlwZVNjcmlwdCkuXG4gKiBAdHlwZWRlZiBPbmVPZkRlY29yYXRvclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUYXJnZXQgcHJvdG90eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gb25lb2ZOYW1lIE9uZU9mIG5hbWVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuLyoqXG4gKiBPbmVPZiBkZWNvcmF0b3IgKFR5cGVTY3JpcHQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mRGVjb3JhdG9yfSBEZWNvcmF0b3IgZnVuY3Rpb25cbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgc3RyaW5nXG4gKi9cbk9uZU9mLmQgPSBmdW5jdGlvbiBkZWNvcmF0ZU9uZU9mKCkge1xuICAgIHZhciBmaWVsZE5hbWVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLFxuICAgICAgICBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aClcbiAgICAgICAgZmllbGROYW1lc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uZU9mRGVjb3JhdG9yKHByb3RvdHlwZSwgb25lb2ZOYW1lKSB7XG4gICAgICAgIHV0aWwuZGVjb3JhdGVUeXBlKHByb3RvdHlwZS5jb25zdHJ1Y3RvcilcbiAgICAgICAgICAgIC5hZGQobmV3IE9uZU9mKG9uZW9mTmFtZSwgZmllbGROYW1lcykpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBvbmVvZk5hbWUsIHtcbiAgICAgICAgICAgIGdldDogdXRpbC5vbmVPZkdldHRlcihmaWVsZE5hbWVzKSxcbiAgICAgICAgICAgIHNldDogdXRpbC5vbmVPZlNldHRlcihmaWVsZE5hbWVzKVxuICAgICAgICB9KTtcbiAgICB9O1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3Rpb25PYmplY3Q7XG5cblJlZmxlY3Rpb25PYmplY3QuY2xhc3NOYW1lID0gXCJSZWZsZWN0aW9uT2JqZWN0XCI7XG5cbmNvbnN0IE9uZU9mID0gcmVxdWlyZShcIi4vb25lb2ZcIik7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbnZhciBSb290OyAvLyBjeWNsaWNcblxuLyogZXNsaW50LWRpc2FibGUgbm8td2FybmluZy1jb21tZW50cyAqL1xuLy8gVE9ETzogUmVwbGFjZSB3aXRoIGVtYmVkZGVkIHByb3RvLlxudmFyIGVkaXRpb25zMjAyM0RlZmF1bHRzID0ge2VudW1fdHlwZTogXCJPUEVOXCIsIGZpZWxkX3ByZXNlbmNlOiBcIkVYUExJQ0lUXCIsIGpzb25fZm9ybWF0OiBcIkFMTE9XXCIsIG1lc3NhZ2VfZW5jb2Rpbmc6IFwiTEVOR1RIX1BSRUZJWEVEXCIsIHJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nOiBcIlBBQ0tFRFwiLCB1dGY4X3ZhbGlkYXRpb246IFwiVkVSSUZZXCJ9O1xudmFyIHByb3RvMkRlZmF1bHRzID0ge2VudW1fdHlwZTogXCJDTE9TRURcIiwgZmllbGRfcHJlc2VuY2U6IFwiRVhQTElDSVRcIiwganNvbl9mb3JtYXQ6IFwiTEVHQUNZX0JFU1RfRUZGT1JUXCIsIG1lc3NhZ2VfZW5jb2Rpbmc6IFwiTEVOR1RIX1BSRUZJWEVEXCIsIHJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nOiBcIkVYUEFOREVEXCIsIHV0ZjhfdmFsaWRhdGlvbjogXCJOT05FXCJ9O1xudmFyIHByb3RvM0RlZmF1bHRzID0ge2VudW1fdHlwZTogXCJPUEVOXCIsIGZpZWxkX3ByZXNlbmNlOiBcIklNUExJQ0lUXCIsIGpzb25fZm9ybWF0OiBcIkFMTE9XXCIsIG1lc3NhZ2VfZW5jb2Rpbmc6IFwiTEVOR1RIX1BSRUZJWEVEXCIsIHJlcGVhdGVkX2ZpZWxkX2VuY29kaW5nOiBcIlBBQ0tFRFwiLCB1dGY4X3ZhbGlkYXRpb246IFwiVkVSSUZZXCJ9O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcmVmbGVjdGlvbiBvYmplY3QgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIEJhc2UgY2xhc3Mgb2YgYWxsIHJlZmxlY3Rpb24gb2JqZWN0cy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgT2JqZWN0IG5hbWVcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBEZWNsYXJlZCBvcHRpb25zXG4gKiBAYWJzdHJhY3RcbiAqL1xuZnVuY3Rpb24gUmVmbGVjdGlvbk9iamVjdChuYW1lLCBvcHRpb25zKSB7XG5cbiAgICBpZiAoIXV0aWwuaXNTdHJpbmcobmFtZSkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIm5hbWUgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblxuICAgIGlmIChvcHRpb25zICYmICF1dGlsLmlzT2JqZWN0KG9wdGlvbnMpKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9ucy5cbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsKj58dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7IC8vIHRvSlNPTlxuXG4gICAgLyoqXG4gICAgICogUGFyc2VkIE9wdGlvbnMuXG4gICAgICogQHR5cGUge0FycmF5LjxPYmplY3QuPHN0cmluZywqPj58dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VkT3B0aW9ucyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBVbmlxdWUgbmFtZSB3aXRoaW4gaXRzIG5hbWVzcGFjZS5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdGlvbiBzcGVjaWZpZWQgZm9yIHRoaXMgb2JqZWN0LiAgT25seSByZWxldmFudCBmb3IgdG9wLWxldmVsIG9iamVjdHMuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2VkaXRpb24gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgZWRpdGlvbiB0byB1c2UgZm9yIHRoaXMgb2JqZWN0IGlmIG5vbmUgaXMgc3BlY2lmaWVkLiAgRm9yIGxlZ2FjeSByZWFzb25zLFxuICAgICAqIHRoaXMgaXMgcHJvdG8yIGV4Y2VwdCBpbiB0aGUgSlNPTiBwYXJzaW5nIGNhc2Ugd2hlcmUgaXQgd2FzIHByb3RvMy5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZGVmYXVsdEVkaXRpb24gPSBcInByb3RvMlwiO1xuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZWQgRmVhdHVyZXMuXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX2ZlYXR1cmVzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBmZWF0dXJlcyBoYXZlIGJlZW4gcmVzb2x2ZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLl9mZWF0dXJlc1Jlc29sdmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQYXJlbnQgbmFtZXNwYWNlLlxuICAgICAqIEB0eXBlIHtOYW1lc3BhY2V8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGFscmVhZHkgcmVzb2x2ZWQgb3Igbm90LlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbW1lbnQgdGV4dCwgaWYgYW55LlxuICAgICAqIEB0eXBlIHtzdHJpbmd8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbW1lbnQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5pbmcgZmlsZSBuYW1lLlxuICAgICAqIEB0eXBlIHtzdHJpbmd8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmZpbGVuYW1lID0gbnVsbDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUsIHtcblxuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcm9vdCBuYW1lc3BhY2UuXG4gICAgICogQG5hbWUgUmVmbGVjdGlvbk9iamVjdCNyb290XG4gICAgICogQHR5cGUge1Jvb3R9XG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgcm9vdDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHB0ciA9IHRoaXM7XG4gICAgICAgICAgICB3aGlsZSAocHRyLnBhcmVudCAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICBwdHIgPSBwdHIucGFyZW50O1xuICAgICAgICAgICAgcmV0dXJuIHB0cjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGdWxsIG5hbWUgaW5jbHVkaW5nIGxlYWRpbmcgZG90LlxuICAgICAqIEBuYW1lIFJlZmxlY3Rpb25PYmplY3QjZnVsbE5hbWVcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGZ1bGxOYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCA9IFsgdGhpcy5uYW1lIF0sXG4gICAgICAgICAgICAgICAgcHRyID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICB3aGlsZSAocHRyKSB7XG4gICAgICAgICAgICAgICAgcGF0aC51bnNoaWZ0KHB0ci5uYW1lKTtcbiAgICAgICAgICAgICAgICBwdHIgPSBwdHIucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihcIi5cIik7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIHJlZmxlY3Rpb24gb2JqZWN0IHRvIGl0cyBkZXNjcmlwdG9yIHJlcHJlc2VudGF0aW9uLlxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBEZXNjcmlwdG9yXG4gKiBAYWJzdHJhY3RcbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUudG9KU09OID0gLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHRocm93IEVycm9yKCk7IC8vIG5vdCBpbXBsZW1lbnRlZCwgc2hvdWxkbid0IGhhcHBlblxufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGlzIG9iamVjdCBpcyBhZGRlZCB0byBhIHBhcmVudC5cbiAqIEBwYXJhbSB7UmVmbGVjdGlvbk9iamVjdH0gcGFyZW50IFBhcmVudCBhZGRlZCB0b1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUub25BZGQgPSBmdW5jdGlvbiBvbkFkZChwYXJlbnQpIHtcbiAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQgIT09IHBhcmVudClcbiAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbiAgICB2YXIgcm9vdCA9IHBhcmVudC5yb290O1xuICAgIGlmIChyb290IGluc3RhbmNlb2YgUm9vdClcbiAgICAgICAgcm9vdC5faGFuZGxlQWRkKHRoaXMpO1xufTtcblxuLyoqXG4gKiBDYWxsZWQgd2hlbiB0aGlzIG9iamVjdCBpcyByZW1vdmVkIGZyb20gYSBwYXJlbnQuXG4gKiBAcGFyYW0ge1JlZmxlY3Rpb25PYmplY3R9IHBhcmVudCBQYXJlbnQgcmVtb3ZlZCBmcm9tXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5SZWZsZWN0aW9uT2JqZWN0LnByb3RvdHlwZS5vblJlbW92ZSA9IGZ1bmN0aW9uIG9uUmVtb3ZlKHBhcmVudCkge1xuICAgIHZhciByb290ID0gcGFyZW50LnJvb3Q7XG4gICAgaWYgKHJvb3QgaW5zdGFuY2VvZiBSb290KVxuICAgICAgICByb290Ll9oYW5kbGVSZW1vdmUodGhpcyk7XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhpcyBvYmplY3RzIHR5cGUgcmVmZXJlbmNlcy5cbiAqIEByZXR1cm5zIHtSZWZsZWN0aW9uT2JqZWN0fSBgdGhpc2BcbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIGlmICh0aGlzLnJvb3QgaW5zdGFuY2VvZiBSb290KVxuICAgICAgICB0aGlzLnJlc29sdmVkID0gdHJ1ZTsgLy8gb25seSBpZiBwYXJ0IG9mIGEgcm9vdFxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGlzIG9iamVjdHMgZWRpdGlvbnMgZmVhdHVyZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZWRpdGlvbiBUaGUgZWRpdGlvbiB3ZSdyZSBjdXJyZW50bHkgcmVzb2x2aW5nIGZvci5cbiAqIEByZXR1cm5zIHtSZWZsZWN0aW9uT2JqZWN0fSBgdGhpc2BcbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuX3Jlc29sdmVGZWF0dXJlc1JlY3Vyc2l2ZSA9IGZ1bmN0aW9uIF9yZXNvbHZlRmVhdHVyZXNSZWN1cnNpdmUoZWRpdGlvbikge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRmVhdHVyZXModGhpcy5fZWRpdGlvbiB8fCBlZGl0aW9uKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgY2hpbGQgZmVhdHVyZXMgZnJvbSBwYXJlbnQgZmVhdHVyZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBlZGl0aW9uIFRoZSBlZGl0aW9uIHdlJ3JlIGN1cnJlbnRseSByZXNvbHZpbmcgZm9yLlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuX3Jlc29sdmVGZWF0dXJlcyA9IGZ1bmN0aW9uIF9yZXNvbHZlRmVhdHVyZXMoZWRpdGlvbikge1xuICAgIGlmICh0aGlzLl9mZWF0dXJlc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdHMgPSB7fTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghZWRpdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVkaXRpb24gZm9yIFwiICsgdGhpcy5mdWxsTmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvRmVhdHVyZXMgPSBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucyA/IE9iamVjdC5hc3NpZ24oe30sICB0aGlzLm9wdGlvbnMuZmVhdHVyZXMpIDoge30sXG4gICAgICAgIHRoaXMuX2luZmVyTGVnYWN5UHJvdG9GZWF0dXJlcyhlZGl0aW9uKSk7XG5cbiAgICBpZiAodGhpcy5fZWRpdGlvbikge1xuICAgICAgICAvLyBGb3IgYSBuYW1lc3BhY2UgbWFya2VkIHdpdGggYSBzcGVjaWZpYyBlZGl0aW9uLCByZXNldCBkZWZhdWx0cy5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGVkaXRpb24gPT09IFwicHJvdG8yXCIpIHtcbiAgICAgICAgICAgIGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvdG8yRGVmYXVsdHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGVkaXRpb24gPT09IFwicHJvdG8zXCIpIHtcbiAgICAgICAgICAgIGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvdG8zRGVmYXVsdHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGVkaXRpb24gPT09IFwiMjAyM1wiKSB7XG4gICAgICAgICAgICBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oe30sIGVkaXRpb25zMjAyM0RlZmF1bHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZWRpdGlvbjogXCIgKyBlZGl0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mZWF0dXJlcyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdHMsIHByb3RvRmVhdHVyZXMgfHwge30pO1xuICAgICAgICB0aGlzLl9mZWF0dXJlc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpZWxkcyBpbiBPbmVvZnMgYXJlbid0IGFjdHVhbGx5IGNoaWxkcmVuIG9mIHRoZW0sIHNvIHdlIGhhdmUgdG9cbiAgICAvLyBzcGVjaWFsLWNhc2UgaXRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnBhcnRPZiBpbnN0YW5jZW9mIE9uZU9mKSB7XG4gICAgICAgIHZhciBsZXhpY2FsUGFyZW50RmVhdHVyZXNDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJ0T2YuX2ZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5fZmVhdHVyZXMgPSBPYmplY3QuYXNzaWduKGxleGljYWxQYXJlbnRGZWF0dXJlc0NvcHksIHByb3RvRmVhdHVyZXMgfHwge30pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWNsYXJpbmdGaWVsZCkge1xuICAgICAgICAvLyBTa2lwIGZlYXR1cmUgcmVzb2x1dGlvbiBvZiBzaXN0ZXIgZmllbGRzLlxuICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgdmFyIHBhcmVudEZlYXR1cmVzQ29weSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyZW50Ll9mZWF0dXJlcyk7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmVzID0gT2JqZWN0LmFzc2lnbihwYXJlbnRGZWF0dXJlc0NvcHksIHByb3RvRmVhdHVyZXMgfHwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIGEgcGFyZW50IGZvciBcIiArIHRoaXMuZnVsbE5hbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5leHRlbnNpb25GaWVsZCkge1xuICAgICAgICAvLyBTaXN0ZXIgZmllbGRzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGZlYXR1cmVzIGFzIHRoZWlyIGV4dGVuc2lvbnMuXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uRmllbGQuX2ZlYXR1cmVzID0gdGhpcy5fZmVhdHVyZXM7XG4gICAgfVxuICAgIHRoaXMuX2ZlYXR1cmVzUmVzb2x2ZWQgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBJbmZlcnMgZmVhdHVyZXMgZnJvbSBsZWdhY3kgc3ludGF4IHRoYXQgbWF5IGhhdmUgYmVlbiBzcGVjaWZpZWQgZGlmZmVyZW50bHkuXG4gKiBpbiBvbGRlciBlZGl0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gZWRpdGlvbiBUaGUgZWRpdGlvbiB0aGlzIHByb3RvIGlzIG9uLCBvciB1bmRlZmluZWQgaWYgcHJlLWVkaXRpb25zXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgZmVhdHVyZSB2YWx1ZXMgdG8gb3ZlcnJpZGVcbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuX2luZmVyTGVnYWN5UHJvdG9GZWF0dXJlcyA9IGZ1bmN0aW9uIF9pbmZlckxlZ2FjeVByb3RvRmVhdHVyZXMoLyplZGl0aW9uKi8pIHtcbiAgICByZXR1cm4ge307XG59O1xuXG4vKipcbiAqIEdldHMgYW4gb3B0aW9uIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgT3B0aW9uIG5hbWVcbiAqIEByZXR1cm5zIHsqfSBPcHRpb24gdmFsdWUgb3IgYHVuZGVmaW5lZGAgaWYgbm90IHNldFxuICovXG5SZWZsZWN0aW9uT2JqZWN0LnByb3RvdHlwZS5nZXRPcHRpb24gPSBmdW5jdGlvbiBnZXRPcHRpb24obmFtZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMpXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbbmFtZV07XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogU2V0cyBhbiBvcHRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBPcHRpb24gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb24gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IFtpZk5vdFNldF0gU2V0cyB0aGUgb3B0aW9uIG9ubHkgaWYgaXQgaXNuJ3QgY3VycmVudGx5IHNldFxuICogQHJldHVybnMge1JlZmxlY3Rpb25PYmplY3R9IGB0aGlzYFxuICovXG5SZWZsZWN0aW9uT2JqZWN0LnByb3RvdHlwZS5zZXRPcHRpb24gPSBmdW5jdGlvbiBzZXRPcHRpb24obmFtZSwgdmFsdWUsIGlmTm90U2V0KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMpXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIGlmICgvXmZlYXR1cmVzXFwuLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHV0aWwuc2V0UHJvcGVydHkodGhpcy5vcHRpb25zLCBuYW1lLCB2YWx1ZSwgaWZOb3RTZXQpO1xuICAgIH0gZWxzZSBpZiAoIWlmTm90U2V0IHx8IHRoaXMub3B0aW9uc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmdldE9wdGlvbihuYW1lKSAhPT0gdmFsdWUpIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcHRpb25zW25hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldHMgYSBwYXJzZWQgb3B0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgcGFyc2VkIE9wdGlvbiBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BOYW1lIGRvdCAnLicgZGVsaW1pdGVkIGZ1bGwgcGF0aCBvZiBwcm9wZXJ0eSB3aXRoaW4gdGhlIG9wdGlvbiB0byBzZXQuIGlmIHVuZGVmaW5lZFxcZW1wdHksIHdpbGwgYWRkIGEgbmV3IG9wdGlvbiB3aXRoIHRoYXQgdmFsdWVcbiAqIEByZXR1cm5zIHtSZWZsZWN0aW9uT2JqZWN0fSBgdGhpc2BcbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuc2V0UGFyc2VkT3B0aW9uID0gZnVuY3Rpb24gc2V0UGFyc2VkT3B0aW9uKG5hbWUsIHZhbHVlLCBwcm9wTmFtZSkge1xuICAgIGlmICghdGhpcy5wYXJzZWRPcHRpb25zKSB7XG4gICAgICAgIHRoaXMucGFyc2VkT3B0aW9ucyA9IFtdO1xuICAgIH1cbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHRoaXMucGFyc2VkT3B0aW9ucztcbiAgICBpZiAocHJvcE5hbWUpIHtcbiAgICAgICAgLy8gSWYgc2V0dGluZyBhIHN1YiBwcm9wZXJ0eSBvZiBhbiBvcHRpb24gdGhlbiB0cnkgdG8gbWVyZ2UgaXRcbiAgICAgICAgLy8gd2l0aCBhbiBleGlzdGluZyBvcHRpb25cbiAgICAgICAgdmFyIG9wdCA9IHBhcnNlZE9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdCwgbmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhbiBleGlzdGluZyBvcHRpb24gLSBqdXN0IG1lcmdlIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICAgICAgICAgICAgLy8gKElmIGl0J3MgYSBmZWF0dXJlLCB3aWxsIGp1c3Qgd3JpdGUgb3ZlcilcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IG9wdFtuYW1lXTtcbiAgICAgICAgICAgIHV0aWwuc2V0UHJvcGVydHkobmV3VmFsdWUsIHByb3BOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIGNyZWF0ZSBhIG5ldyBvcHRpb24sIHNldCBpdHMgcHJvcGVydHkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdFxuICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICBvcHRbbmFtZV0gPSB1dGlsLnNldFByb3BlcnR5KHt9LCBwcm9wTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcGFyc2VkT3B0aW9ucy5wdXNoKG9wdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgY3JlYXRlIGEgbmV3IG9wdGlvbiB3aGVuIHNldHRpbmcgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gaXRzZWxmXG4gICAgICAgIHZhciBuZXdPcHQgPSB7fTtcbiAgICAgICAgbmV3T3B0W25hbWVdID0gdmFsdWU7XG4gICAgICAgIHBhcnNlZE9wdGlvbnMucHVzaChuZXdPcHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXRzIG11bHRpcGxlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvcHRpb25zIE9wdGlvbnMgdG8gc2V0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpZk5vdFNldF0gU2V0cyBhbiBvcHRpb24gb25seSBpZiBpdCBpc24ndCBjdXJyZW50bHkgc2V0XG4gKiBAcmV0dXJucyB7UmVmbGVjdGlvbk9iamVjdH0gYHRoaXNgXG4gKi9cblJlZmxlY3Rpb25PYmplY3QucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMsIGlmTm90U2V0KSB7XG4gICAgaWYgKG9wdGlvbnMpXG4gICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oa2V5c1tpXSwgb3B0aW9uc1trZXlzW2ldXSwgaWZOb3RTZXQpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIGluc3RhbmNlIHRvIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDbGFzcyBuYW1lWywgc3BhY2UsIGZ1bGwgbmFtZV1cbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5jbGFzc05hbWUsXG4gICAgICAgIGZ1bGxOYW1lICA9IHRoaXMuZnVsbE5hbWU7XG4gICAgaWYgKGZ1bGxOYW1lLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZSArIFwiIFwiICsgZnVsbE5hbWU7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGVkaXRpb24gdGhpcyBvYmplY3QgaXMgcGlubmVkIHRvIGZvciBKU09OIGZvcm1hdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBUaGUgZWRpdGlvbiBzdHJpbmcgZm9yIEpTT04gcmVwcmVzZW50YXRpb25cbiAqL1xuUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuX2VkaXRpb25Ub0pTT04gPSBmdW5jdGlvbiBfZWRpdGlvblRvSlNPTigpIHtcbiAgICBpZiAoIXRoaXMuX2VkaXRpb24gfHwgdGhpcy5fZWRpdGlvbiA9PT0gXCJwcm90bzNcIikge1xuICAgICAgICAvLyBBdm9pZCBlbWl0dGluZyBwcm90bzMgc2luY2Ugd2UgbmVlZCB0byBkZWZhdWx0IHRvIGl0IGZvciBiYWNrd2FyZHNcbiAgICAgICAgLy8gY29tcGF0aWJpbGl0eSBhbnl3YXkuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lZGl0aW9uO1xufTtcblxuLy8gU2V0cyB1cCBjeWNsaWMgZGVwZW5kZW5jaWVzIChjYWxsZWQgaW4gaW5kZXgtbGlnaHQpXG5SZWZsZWN0aW9uT2JqZWN0Ll9jb25maWd1cmUgPSBmdW5jdGlvbihSb290Xykge1xuICAgIFJvb3QgPSBSb290Xztcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBFbnVtO1xuXG4vLyBleHRlbmRzIFJlZmxlY3Rpb25PYmplY3RcbnZhciBSZWZsZWN0aW9uT2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuKChFbnVtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEVudW0pLmNsYXNzTmFtZSA9IFwiRW51bVwiO1xuXG52YXIgTmFtZXNwYWNlID0gcmVxdWlyZShcIi4vbmFtZXNwYWNlXCIpLFxuICAgIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgZW51bSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgUmVmbGVjdGVkIGVudW0uXG4gKiBAZXh0ZW5kcyBSZWZsZWN0aW9uT2JqZWN0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFVuaXF1ZSBuYW1lIHdpdGhpbiBpdHMgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLG51bWJlcj59IFt2YWx1ZXNdIEVudW0gdmFsdWVzIGFzIGFuIG9iamVjdCwgYnkgbmFtZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW29wdGlvbnNdIERlY2xhcmVkIG9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29tbWVudF0gVGhlIGNvbW1lbnQgZm9yIHRoaXMgZW51bVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZyxzdHJpbmc+fSBbY29tbWVudHNdIFRoZSB2YWx1ZSBjb21tZW50cyBmb3IgdGhpcyBlbnVtXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLE9iamVjdDxzdHJpbmcsKj4+fHVuZGVmaW5lZH0gW3ZhbHVlc09wdGlvbnNdIFRoZSB2YWx1ZSBvcHRpb25zIGZvciB0aGlzIGVudW1cbiAqL1xuZnVuY3Rpb24gRW51bShuYW1lLCB2YWx1ZXMsIG9wdGlvbnMsIGNvbW1lbnQsIGNvbW1lbnRzLCB2YWx1ZXNPcHRpb25zKSB7XG4gICAgUmVmbGVjdGlvbk9iamVjdC5jYWxsKHRoaXMsIG5hbWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHZhbHVlcyAmJiB0eXBlb2YgdmFsdWVzICE9PSBcIm9iamVjdFwiKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJ2YWx1ZXMgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cbiAgICAvKipcbiAgICAgKiBFbnVtIHZhbHVlcyBieSBpZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxudW1iZXIsc3RyaW5nPn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlc0J5SWQgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEVudW0gdmFsdWVzIGJ5IG5hbWUuXG4gICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLG51bWJlcj59XG4gICAgICovXG4gICAgdGhpcy52YWx1ZXMgPSBPYmplY3QuY3JlYXRlKHRoaXMudmFsdWVzQnlJZCk7IC8vIHRvSlNPTiwgbWFya2VyXG5cbiAgICAvKipcbiAgICAgKiBFbnVtIGNvbW1lbnQgdGV4dC5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5jb21tZW50ID0gY29tbWVudDtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGNvbW1lbnQgdGV4dHMsIGlmIGFueS5cbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsc3RyaW5nPn1cbiAgICAgKi9cbiAgICB0aGlzLmNvbW1lbnRzID0gY29tbWVudHMgfHwge307XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZXMgb3B0aW9ucywgaWYgYW55XG4gICAgICogQHR5cGUge09iamVjdDxzdHJpbmcsIE9iamVjdDxzdHJpbmcsICo+Pnx1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy52YWx1ZXNPcHRpb25zID0gdmFsdWVzT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVkIHZhbHVlcyBmZWF0dXJlcywgaWYgYW55XG4gICAgICogQHR5cGUge09iamVjdDxzdHJpbmcsIE9iamVjdDxzdHJpbmcsICo+Pnx1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5fdmFsdWVzRmVhdHVyZXMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFJlc2VydmVkIHJhbmdlcywgaWYgYW55LlxuICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyW118c3RyaW5nPn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc2VydmVkID0gdW5kZWZpbmVkOyAvLyB0b0pTT05cblxuICAgIC8vIE5vdGUgdGhhdCB2YWx1ZXMgaW5oZXJpdCB2YWx1ZXNCeUlkIG9uIHRoZWlyIHByb3RvdHlwZSB3aGljaCBtYWtlcyB0aGVtIGEgVHlwZVNjcmlwdC1cbiAgICAvLyBjb21wYXRpYmxlIGVudW0uIFRoaXMgaXMgdXNlZCBieSBwYnRzIHRvIHdyaXRlIGFjdHVhbCBlbnVtIGRlZmluaXRpb25zIHRoYXQgd29yayBmb3JcbiAgICAvLyBzdGF0aWMgYW5kIHJlZmxlY3Rpb24gY29kZSBhbGlrZSBpbnN0ZWFkIG9mIGVtaXR0aW5nIGdlbmVyaWMgb2JqZWN0IGRlZmluaXRpb25zLlxuXG4gICAgaWYgKHZhbHVlcylcbiAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWVzW2tleXNbaV1dID09PSBcIm51bWJlclwiKSAvLyB1c2UgZm9yd2FyZCBlbnRyaWVzIG9ubHlcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc0J5SWRbIHRoaXMudmFsdWVzW2tleXNbaV1dID0gdmFsdWVzW2tleXNbaV1dIF0gPSBrZXlzW2ldO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5FbnVtLnByb3RvdHlwZS5fcmVzb2x2ZUZlYXR1cmVzID0gZnVuY3Rpb24gX3Jlc29sdmVGZWF0dXJlcyhlZGl0aW9uKSB7XG4gICAgZWRpdGlvbiA9IHRoaXMuX2VkaXRpb24gfHwgZWRpdGlvbjtcbiAgICBSZWZsZWN0aW9uT2JqZWN0LnByb3RvdHlwZS5fcmVzb2x2ZUZlYXR1cmVzLmNhbGwodGhpcywgZWRpdGlvbik7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICB2YXIgcGFyZW50RmVhdHVyZXNDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZmVhdHVyZXMpO1xuICAgICAgICB0aGlzLl92YWx1ZXNGZWF0dXJlc1trZXldID0gT2JqZWN0LmFzc2lnbihwYXJlbnRGZWF0dXJlc0NvcHksIHRoaXMudmFsdWVzT3B0aW9ucyAmJiB0aGlzLnZhbHVlc09wdGlvbnNba2V5XSAmJiB0aGlzLnZhbHVlc09wdGlvbnNba2V5XS5mZWF0dXJlcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRW51bSBkZXNjcmlwdG9yLlxuICogQGludGVyZmFjZSBJRW51bVxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZyxudW1iZXI+fSB2YWx1ZXMgRW51bSB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsKj59IFtvcHRpb25zXSBFbnVtIG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYW4gZW51bSBmcm9tIGFuIGVudW0gZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEVudW0gbmFtZVxuICogQHBhcmFtIHtJRW51bX0ganNvbiBFbnVtIGRlc2NyaXB0b3JcbiAqIEByZXR1cm5zIHtFbnVtfSBDcmVhdGVkIGVudW1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYXJndW1lbnRzIGFyZSBpbnZhbGlkXG4gKi9cbkVudW0uZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihuYW1lLCBqc29uKSB7XG4gICAgdmFyIGVubSA9IG5ldyBFbnVtKG5hbWUsIGpzb24udmFsdWVzLCBqc29uLm9wdGlvbnMsIGpzb24uY29tbWVudCwganNvbi5jb21tZW50cyk7XG4gICAgZW5tLnJlc2VydmVkID0ganNvbi5yZXNlcnZlZDtcbiAgICBpZiAoanNvbi5lZGl0aW9uKVxuICAgICAgICBlbm0uX2VkaXRpb24gPSBqc29uLmVkaXRpb247XG4gICAgZW5tLl9kZWZhdWx0RWRpdGlvbiA9IFwicHJvdG8zXCI7ICAvLyBGb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuXG4gICAgcmV0dXJuIGVubTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBlbnVtIHRvIGFuIGVudW0gZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7SVRvSlNPTk9wdGlvbnN9IFt0b0pTT05PcHRpb25zXSBKU09OIGNvbnZlcnNpb24gb3B0aW9uc1xuICogQHJldHVybnMge0lFbnVtfSBFbnVtIGRlc2NyaXB0b3JcbiAqL1xuRW51bS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKHRvSlNPTk9wdGlvbnMpIHtcbiAgICB2YXIga2VlcENvbW1lbnRzID0gdG9KU09OT3B0aW9ucyA/IEJvb2xlYW4odG9KU09OT3B0aW9ucy5rZWVwQ29tbWVudHMpIDogZmFsc2U7XG4gICAgcmV0dXJuIHV0aWwudG9PYmplY3QoW1xuICAgICAgICBcImVkaXRpb25cIiAgICAgICAsIHRoaXMuX2VkaXRpb25Ub0pTT04oKSxcbiAgICAgICAgXCJvcHRpb25zXCIgICAgICAgLCB0aGlzLm9wdGlvbnMsXG4gICAgICAgIFwidmFsdWVzT3B0aW9uc1wiICwgdGhpcy52YWx1ZXNPcHRpb25zLFxuICAgICAgICBcInZhbHVlc1wiICAgICAgICAsIHRoaXMudmFsdWVzLFxuICAgICAgICBcInJlc2VydmVkXCIgICAgICAsIHRoaXMucmVzZXJ2ZWQgJiYgdGhpcy5yZXNlcnZlZC5sZW5ndGggPyB0aGlzLnJlc2VydmVkIDogdW5kZWZpbmVkLFxuICAgICAgICBcImNvbW1lbnRcIiAgICAgICAsIGtlZXBDb21tZW50cyA/IHRoaXMuY29tbWVudCA6IHVuZGVmaW5lZCxcbiAgICAgICAgXCJjb21tZW50c1wiICAgICAgLCBrZWVwQ29tbWVudHMgPyB0aGlzLmNvbW1lbnRzIDogdW5kZWZpbmVkXG4gICAgXSk7XG59O1xuXG4vKipcbiAqIEFkZHMgYSB2YWx1ZSB0byB0aGlzIGVudW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBWYWx1ZSBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gaWQgVmFsdWUgaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29tbWVudF0gQ29tbWVudCwgaWYgYW55XG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCAqPnx1bmRlZmluZWR9IFtvcHRpb25zXSBPcHRpb25zLCBpZiBhbnlcbiAqIEByZXR1cm5zIHtFbnVtfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYXJndW1lbnRzIGFyZSBpbnZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHZhbHVlIHdpdGggdGhpcyBuYW1lIG9yIGlkXG4gKi9cbkVudW0ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChuYW1lLCBpZCwgY29tbWVudCwgb3B0aW9ucykge1xuICAgIC8vIHV0aWxpemVkIGJ5IHRoZSBwYXJzZXIgYnV0IG5vdCBieSAuZnJvbUpTT05cblxuICAgIGlmICghdXRpbC5pc1N0cmluZyhuYW1lKSlcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwibmFtZSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXG4gICAgaWYgKCF1dGlsLmlzSW50ZWdlcihpZCkpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcImlkIG11c3QgYmUgYW4gaW50ZWdlclwiKTtcblxuICAgIGlmICh0aGlzLnZhbHVlc1tuYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBFcnJvcihcImR1cGxpY2F0ZSBuYW1lICdcIiArIG5hbWUgKyBcIicgaW4gXCIgKyB0aGlzKTtcblxuICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWRJZChpZCkpXG4gICAgICAgIHRocm93IEVycm9yKFwiaWQgXCIgKyBpZCArIFwiIGlzIHJlc2VydmVkIGluIFwiICsgdGhpcyk7XG5cbiAgICBpZiAodGhpcy5pc1Jlc2VydmVkTmFtZShuYW1lKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJuYW1lICdcIiArIG5hbWUgKyBcIicgaXMgcmVzZXJ2ZWQgaW4gXCIgKyB0aGlzKTtcblxuICAgIGlmICh0aGlzLnZhbHVlc0J5SWRbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCEodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hbGxvd19hbGlhcykpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImR1cGxpY2F0ZSBpZCBcIiArIGlkICsgXCIgaW4gXCIgKyB0aGlzKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbbmFtZV0gPSBpZDtcbiAgICB9IGVsc2VcbiAgICAgICAgdGhpcy52YWx1ZXNCeUlkW3RoaXMudmFsdWVzW25hbWVdID0gaWRdID0gbmFtZTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc09wdGlvbnMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMudmFsdWVzT3B0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLnZhbHVlc09wdGlvbnNbbmFtZV0gPSBvcHRpb25zIHx8IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb21tZW50c1tuYW1lXSA9IGNvbW1lbnQgfHwgbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhpcyBlbnVtXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBWYWx1ZSBuYW1lXG4gKiBAcmV0dXJucyB7RW51bX0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGFyZ3VtZW50cyBhcmUgaW52YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIGBuYW1lYCBpcyBub3QgYSBuYW1lIG9mIHRoaXMgZW51bVxuICovXG5FbnVtLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuXG4gICAgaWYgKCF1dGlsLmlzU3RyaW5nKG5hbWUpKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJuYW1lIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZXNbbmFtZV07XG4gICAgaWYgKHZhbCA9PSBudWxsKVxuICAgICAgICB0aHJvdyBFcnJvcihcIm5hbWUgJ1wiICsgbmFtZSArIFwiJyBkb2VzIG5vdCBleGlzdCBpbiBcIiArIHRoaXMpO1xuXG4gICAgZGVsZXRlIHRoaXMudmFsdWVzQnlJZFt2YWxdO1xuICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1tuYW1lXTtcbiAgICBkZWxldGUgdGhpcy5jb21tZW50c1tuYW1lXTtcbiAgICBpZiAodGhpcy52YWx1ZXNPcHRpb25zKVxuICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNPcHRpb25zW25hbWVdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgaWQgaXMgcmVzZXJ2ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gaWQgSWQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiByZXNlcnZlZCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xuRW51bS5wcm90b3R5cGUuaXNSZXNlcnZlZElkID0gZnVuY3Rpb24gaXNSZXNlcnZlZElkKGlkKSB7XG4gICAgcmV0dXJuIE5hbWVzcGFjZS5pc1Jlc2VydmVkSWQodGhpcy5yZXNlcnZlZCwgaWQpO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIG5hbWUgaXMgcmVzZXJ2ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcmVzZXJ2ZWQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbkVudW0ucHJvdG90eXBlLmlzUmVzZXJ2ZWROYW1lID0gZnVuY3Rpb24gaXNSZXNlcnZlZE5hbWUobmFtZSkge1xuICAgIHJldHVybiBOYW1lc3BhY2UuaXNSZXNlcnZlZE5hbWUodGhpcy5yZXNlcnZlZCwgbmFtZSk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZW5jb2RlcjtcblxudmFyIEVudW0gICAgID0gcmVxdWlyZShcIi4vZW51bVwiKSxcbiAgICB0eXBlcyAgICA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpLFxuICAgIHV0aWwgICAgID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBwYXJ0aWFsIG1lc3NhZ2UgdHlwZSBlbmNvZGVyLlxuICogQHBhcmFtIHtDb2RlZ2VufSBnZW4gQ29kZWdlbiBpbnN0YW5jZVxuICogQHBhcmFtIHtGaWVsZH0gZmllbGQgUmVmbGVjdGVkIGZpZWxkXG4gKiBAcGFyYW0ge251bWJlcn0gZmllbGRJbmRleCBGaWVsZCBpbmRleFxuICogQHBhcmFtIHtzdHJpbmd9IHJlZiBWYXJpYWJsZSByZWZlcmVuY2VcbiAqIEByZXR1cm5zIHtDb2RlZ2VufSBDb2RlZ2VuIGluc3RhbmNlXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIGdlblR5cGVQYXJ0aWFsKGdlbiwgZmllbGQsIGZpZWxkSW5kZXgsIHJlZikge1xuICAgIHJldHVybiBmaWVsZC5kZWxpbWl0ZWRcbiAgICAgICAgPyBnZW4oXCJ0eXBlc1slaV0uZW5jb2RlKCVzLHcudWludDMyKCVpKSkudWludDMyKCVpKVwiLCBmaWVsZEluZGV4LCByZWYsIChmaWVsZC5pZCA8PCAzIHwgMykgPj4+IDAsIChmaWVsZC5pZCA8PCAzIHwgNCkgPj4+IDApXG4gICAgICAgIDogZ2VuKFwidHlwZXNbJWldLmVuY29kZSglcyx3LnVpbnQzMiglaSkuZm9yaygpKS5sZGVsaW0oKVwiLCBmaWVsZEluZGV4LCByZWYsIChmaWVsZC5pZCA8PCAzIHwgMikgPj4+IDApO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBlbmNvZGVyIHNwZWNpZmljIHRvIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSB0eXBlLlxuICogQHBhcmFtIHtUeXBlfSBtdHlwZSBNZXNzYWdlIHR5cGVcbiAqIEByZXR1cm5zIHtDb2RlZ2VufSBDb2RlZ2VuIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZXIobXR5cGUpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmV4cGVjdGVkLW11bHRpbGluZSwgYmxvY2stc2NvcGVkLXZhciwgbm8tcmVkZWNsYXJlICovXG4gICAgdmFyIGdlbiA9IHV0aWwuY29kZWdlbihbXCJtXCIsIFwid1wiXSwgbXR5cGUubmFtZSArIFwiJGVuY29kZVwiKVxuICAgIChcImlmKCF3KVwiKVxuICAgICAgICAoXCJ3PVdyaXRlci5jcmVhdGUoKVwiKTtcblxuICAgIHZhciBpLCByZWY7XG5cbiAgICAvLyBcIndoZW4gYSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQgaXRzIGtub3duIGZpZWxkcyBzaG91bGQgYmUgd3JpdHRlbiBzZXF1ZW50aWFsbHkgYnkgZmllbGQgbnVtYmVyXCJcbiAgICB2YXIgZmllbGRzID0gLyogaW5pdGlhbGl6ZXMgKi8gbXR5cGUuZmllbGRzQXJyYXkuc2xpY2UoKS5zb3J0KHV0aWwuY29tcGFyZUZpZWxkc0J5SWQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGZpZWxkICAgID0gZmllbGRzW2ldLnJlc29sdmUoKSxcbiAgICAgICAgICAgIGluZGV4ICAgID0gbXR5cGUuX2ZpZWxkc0FycmF5LmluZGV4T2YoZmllbGQpLFxuICAgICAgICAgICAgdHlwZSAgICAgPSBmaWVsZC5yZXNvbHZlZFR5cGUgaW5zdGFuY2VvZiBFbnVtID8gXCJpbnQzMlwiIDogZmllbGQudHlwZSxcbiAgICAgICAgICAgIHdpcmVUeXBlID0gdHlwZXMuYmFzaWNbdHlwZV07XG4gICAgICAgICAgICByZWYgICAgICA9IFwibVwiICsgdXRpbC5zYWZlUHJvcChmaWVsZC5uYW1lKTtcblxuICAgICAgICAvLyBNYXAgZmllbGRzXG4gICAgICAgIGlmIChmaWVsZC5tYXApIHtcbiAgICAgICAgICAgIGdlblxuICAgIChcImlmKCVzIT1udWxsJiZPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtLCVqKSl7XCIsIHJlZiwgZmllbGQubmFtZSkgLy8gIT09IHVuZGVmaW5lZCAmJiAhPT0gbnVsbFxuICAgICAgICAoXCJmb3IodmFyIGtzPU9iamVjdC5rZXlzKCVzKSxpPTA7aTxrcy5sZW5ndGg7KytpKXtcIiwgcmVmKVxuICAgICAgICAgICAgKFwidy51aW50MzIoJWkpLmZvcmsoKS51aW50MzIoJWkpLiVzKGtzW2ldKVwiLCAoZmllbGQuaWQgPDwgMyB8IDIpID4+PiAwLCA4IHwgdHlwZXMubWFwS2V5W2ZpZWxkLmtleVR5cGVdLCBmaWVsZC5rZXlUeXBlKTtcbiAgICAgICAgICAgIGlmICh3aXJlVHlwZSA9PT0gdW5kZWZpbmVkKSBnZW5cbiAgICAgICAgICAgIChcInR5cGVzWyVpXS5lbmNvZGUoJXNba3NbaV1dLHcudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpLmxkZWxpbSgpXCIsIGluZGV4LCByZWYpOyAvLyBjYW4ndCBiZSBncm91cHNcbiAgICAgICAgICAgIGVsc2UgZ2VuXG4gICAgICAgICAgICAoXCIudWludDMyKCVpKS4lcyglc1trc1tpXV0pLmxkZWxpbSgpXCIsIDE2IHwgd2lyZVR5cGUsIHR5cGUsIHJlZik7XG4gICAgICAgICAgICBnZW5cbiAgICAgICAgKFwifVwiKVxuICAgIChcIn1cIik7XG5cbiAgICAgICAgICAgIC8vIFJlcGVhdGVkIGZpZWxkc1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnJlcGVhdGVkKSB7IGdlblxuICAgIChcImlmKCVzIT1udWxsJiYlcy5sZW5ndGgpe1wiLCByZWYsIHJlZik7IC8vICE9PSB1bmRlZmluZWQgJiYgIT09IG51bGxcblxuICAgICAgICAgICAgLy8gUGFja2VkIHJlcGVhdGVkXG4gICAgICAgICAgICBpZiAoZmllbGQucGFja2VkICYmIHR5cGVzLnBhY2tlZFt0eXBlXSAhPT0gdW5kZWZpbmVkKSB7IGdlblxuXG4gICAgICAgIChcIncudWludDMyKCVpKS5mb3JrKClcIiwgKGZpZWxkLmlkIDw8IDMgfCAyKSA+Pj4gMClcbiAgICAgICAgKFwiZm9yKHZhciBpPTA7aTwlcy5sZW5ndGg7KytpKVwiLCByZWYpXG4gICAgICAgICAgICAoXCJ3LiVzKCVzW2ldKVwiLCB0eXBlLCByZWYpXG4gICAgICAgIChcIncubGRlbGltKClcIik7XG5cbiAgICAgICAgICAgIC8vIE5vbi1wYWNrZWRcbiAgICAgICAgICAgIH0gZWxzZSB7IGdlblxuXG4gICAgICAgIChcImZvcih2YXIgaT0wO2k8JXMubGVuZ3RoOysraSlcIiwgcmVmKTtcbiAgICAgICAgICAgICAgICBpZiAod2lyZVR5cGUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGdlblR5cGVQYXJ0aWFsKGdlbiwgZmllbGQsIGluZGV4LCByZWYgKyBcIltpXVwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGdlblxuICAgICAgICAgICAgKFwidy51aW50MzIoJWkpLiVzKCVzW2ldKVwiLCAoZmllbGQuaWQgPDwgMyB8IHdpcmVUeXBlKSA+Pj4gMCwgdHlwZSwgcmVmKTtcblxuICAgICAgICAgICAgfSBnZW5cbiAgICAoXCJ9XCIpO1xuXG4gICAgICAgIC8vIE5vbi1yZXBlYXRlZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZpZWxkLm9wdGlvbmFsKSBnZW5cbiAgICAoXCJpZiglcyE9bnVsbCYmT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobSwlaikpXCIsIHJlZiwgZmllbGQubmFtZSk7IC8vICE9PSB1bmRlZmluZWQgJiYgIT09IG51bGxcblxuICAgICAgICAgICAgaWYgKHdpcmVUeXBlID09PSB1bmRlZmluZWQpXG4gICAgICAgIGdlblR5cGVQYXJ0aWFsKGdlbiwgZmllbGQsIGluZGV4LCByZWYpO1xuICAgICAgICAgICAgZWxzZSBnZW5cbiAgICAgICAgKFwidy51aW50MzIoJWkpLiVzKCVzKVwiLCAoZmllbGQuaWQgPDwgMyB8IHdpcmVUeXBlKSA+Pj4gMCwgdHlwZSwgcmVmKTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlblxuICAgIChcInJldHVybiB3XCIpO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUsIGJsb2NrLXNjb3BlZC12YXIsIG5vLXJlZGVjbGFyZSAqL1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBwcm90b2J1ZiA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vaW5kZXgtbWluaW1hbFwiKTtcblxucHJvdG9idWYuYnVpbGQgPSBcImxpZ2h0XCI7XG5cbi8qKlxuICogQSBub2RlLXN0eWxlIGNhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIGxvYWR9IGFuZCB7QGxpbmsgUm9vdCNsb2FkfS5cbiAqIEB0eXBlZGVmIExvYWRDYWxsYmFja1xuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55LCBvdGhlcndpc2UgYG51bGxgXG4gKiBAcGFyYW0ge1Jvb3R9IFtyb290XSBSb290LCBpZiB0aGVyZSBoYXNuJ3QgYmVlbiBhbiBlcnJvclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIExvYWRzIG9uZSBvciBtdWx0aXBsZSAucHJvdG8gb3IgcHJlcHJvY2Vzc2VkIC5qc29uIGZpbGVzIGludG8gYSBjb21tb24gcm9vdCBuYW1lc3BhY2UgYW5kIGNhbGxzIHRoZSBjYWxsYmFjay5cbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBmaWxlbmFtZSBPbmUgb3IgbXVsdGlwbGUgZmlsZXMgdG8gbG9hZFxuICogQHBhcmFtIHtSb290fSByb290IFJvb3QgbmFtZXNwYWNlLCBkZWZhdWx0cyB0byBjcmVhdGUgYSBuZXcgb25lIGlmIG9taXR0ZWQuXG4gKiBAcGFyYW0ge0xvYWRDYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAc2VlIHtAbGluayBSb290I2xvYWR9XG4gKi9cbmZ1bmN0aW9uIGxvYWQoZmlsZW5hbWUsIHJvb3QsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiByb290ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSByb290O1xuICAgICAgICByb290ID0gbmV3IHByb3RvYnVmLlJvb3QoKTtcbiAgICB9IGVsc2UgaWYgKCFyb290KVxuICAgICAgICByb290ID0gbmV3IHByb3RvYnVmLlJvb3QoKTtcbiAgICByZXR1cm4gcm9vdC5sb2FkKGZpbGVuYW1lLCBjYWxsYmFjayk7XG59XG5cbi8qKlxuICogTG9hZHMgb25lIG9yIG11bHRpcGxlIC5wcm90byBvciBwcmVwcm9jZXNzZWQgLmpzb24gZmlsZXMgaW50byBhIGNvbW1vbiByb290IG5hbWVzcGFjZSBhbmQgY2FsbHMgdGhlIGNhbGxiYWNrLlxuICogQG5hbWUgbG9hZFxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gZmlsZW5hbWUgT25lIG9yIG11bHRpcGxlIGZpbGVzIHRvIGxvYWRcbiAqIEBwYXJhbSB7TG9hZENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBzZWUge0BsaW5rIFJvb3QjbG9hZH1cbiAqIEB2YXJpYXRpb24gMlxuICovXG4vLyBmdW5jdGlvbiBsb2FkKGZpbGVuYW1lOnN0cmluZywgY2FsbGJhY2s6TG9hZENhbGxiYWNrKTp1bmRlZmluZWRcblxuLyoqXG4gKiBMb2FkcyBvbmUgb3IgbXVsdGlwbGUgLnByb3RvIG9yIHByZXByb2Nlc3NlZCAuanNvbiBmaWxlcyBpbnRvIGEgY29tbW9uIHJvb3QgbmFtZXNwYWNlIGFuZCByZXR1cm5zIGEgcHJvbWlzZS5cbiAqIEBuYW1lIGxvYWRcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGZpbGVuYW1lIE9uZSBvciBtdWx0aXBsZSBmaWxlcyB0byBsb2FkXG4gKiBAcGFyYW0ge1Jvb3R9IFtyb290XSBSb290IG5hbWVzcGFjZSwgZGVmYXVsdHMgdG8gY3JlYXRlIGEgbmV3IG9uZSBpZiBvbWl0dGVkLlxuICogQHJldHVybnMge1Byb21pc2U8Um9vdD59IFByb21pc2VcbiAqIEBzZWUge0BsaW5rIFJvb3QjbG9hZH1cbiAqIEB2YXJpYXRpb24gM1xuICovXG4vLyBmdW5jdGlvbiBsb2FkKGZpbGVuYW1lOnN0cmluZywgW3Jvb3Q6Um9vdF0pOlByb21pc2U8Um9vdD5cblxucHJvdG9idWYubG9hZCA9IGxvYWQ7XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBsb2FkcyBvbmUgb3IgbXVsdGlwbGUgLnByb3RvIG9yIHByZXByb2Nlc3NlZCAuanNvbiBmaWxlcyBpbnRvIGEgY29tbW9uIHJvb3QgbmFtZXNwYWNlIChub2RlIG9ubHkpLlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGZpbGVuYW1lIE9uZSBvciBtdWx0aXBsZSBmaWxlcyB0byBsb2FkXG4gKiBAcGFyYW0ge1Jvb3R9IFtyb290XSBSb290IG5hbWVzcGFjZSwgZGVmYXVsdHMgdG8gY3JlYXRlIGEgbmV3IG9uZSBpZiBvbWl0dGVkLlxuICogQHJldHVybnMge1Jvb3R9IFJvb3QgbmFtZXNwYWNlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc3luY2hyb25vdXMgZmV0Y2hpbmcgaXMgbm90IHN1cHBvcnRlZCAoaS5lLiBpbiBicm93c2Vycykgb3IgaWYgYSBmaWxlJ3Mgc3ludGF4IGlzIGludmFsaWRcbiAqIEBzZWUge0BsaW5rIFJvb3QjbG9hZFN5bmN9XG4gKi9cbmZ1bmN0aW9uIGxvYWRTeW5jKGZpbGVuYW1lLCByb290KSB7XG4gICAgaWYgKCFyb290KVxuICAgICAgICByb290ID0gbmV3IHByb3RvYnVmLlJvb3QoKTtcbiAgICByZXR1cm4gcm9vdC5sb2FkU3luYyhmaWxlbmFtZSk7XG59XG5cbnByb3RvYnVmLmxvYWRTeW5jID0gbG9hZFN5bmM7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLmVuY29kZXIgICAgICAgICAgPSByZXF1aXJlKFwiLi9lbmNvZGVyXCIpO1xucHJvdG9idWYuZGVjb2RlciAgICAgICAgICA9IHJlcXVpcmUoXCIuL2RlY29kZXJcIik7XG5wcm90b2J1Zi52ZXJpZmllciAgICAgICAgID0gcmVxdWlyZShcIi4vdmVyaWZpZXJcIik7XG5wcm90b2J1Zi5jb252ZXJ0ZXIgICAgICAgID0gcmVxdWlyZShcIi4vY29udmVydGVyXCIpO1xuXG4vLyBSZWZsZWN0aW9uXG5wcm90b2J1Zi5SZWZsZWN0aW9uT2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xucHJvdG9idWYuTmFtZXNwYWNlICAgICAgICA9IHJlcXVpcmUoXCIuL25hbWVzcGFjZVwiKTtcbnByb3RvYnVmLlJvb3QgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9yb290XCIpO1xucHJvdG9idWYuRW51bSAgICAgICAgICAgICA9IHJlcXVpcmUoXCIuL2VudW1cIik7XG5wcm90b2J1Zi5UeXBlICAgICAgICAgICAgID0gcmVxdWlyZShcIi4vdHlwZVwiKTtcbnByb3RvYnVmLkZpZWxkICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9maWVsZFwiKTtcbnByb3RvYnVmLk9uZU9mICAgICAgICAgICAgPSByZXF1aXJlKFwiLi9vbmVvZlwiKTtcbnByb3RvYnVmLk1hcEZpZWxkICAgICAgICAgPSByZXF1aXJlKFwiLi9tYXBmaWVsZFwiKTtcbnByb3RvYnVmLlNlcnZpY2UgICAgICAgICAgPSByZXF1aXJlKFwiLi9zZXJ2aWNlXCIpO1xucHJvdG9idWYuTWV0aG9kICAgICAgICAgICA9IHJlcXVpcmUoXCIuL21ldGhvZFwiKTtcblxuLy8gUnVudGltZVxucHJvdG9idWYuTWVzc2FnZSAgICAgICAgICA9IHJlcXVpcmUoXCIuL21lc3NhZ2VcIik7XG5wcm90b2J1Zi53cmFwcGVycyAgICAgICAgID0gcmVxdWlyZShcIi4vd3JhcHBlcnNcIik7XG5cbi8vIFV0aWxpdHlcbnByb3RvYnVmLnR5cGVzICAgICAgICAgICAgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbnByb3RvYnVmLnV0aWwgICAgICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG4vLyBTZXQgdXAgcG9zc2libHkgY3ljbGljIHJlZmxlY3Rpb24gZGVwZW5kZW5jaWVzXG5wcm90b2J1Zi5SZWZsZWN0aW9uT2JqZWN0Ll9jb25maWd1cmUocHJvdG9idWYuUm9vdCk7XG5wcm90b2J1Zi5OYW1lc3BhY2UuX2NvbmZpZ3VyZShwcm90b2J1Zi5UeXBlLCBwcm90b2J1Zi5TZXJ2aWNlLCBwcm90b2J1Zi5FbnVtKTtcbnByb3RvYnVmLlJvb3QuX2NvbmZpZ3VyZShwcm90b2J1Zi5UeXBlKTtcbnByb3RvYnVmLkZpZWxkLl9jb25maWd1cmUocHJvdG9idWYuVHlwZSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSB0b2tlbml6ZTtcblxudmFyIGRlbGltUmUgICAgICAgID0gL1tcXHN7fT07OltcXF0sJ1wiKCk8Pl0vZyxcbiAgICBzdHJpbmdEb3VibGVSZSA9IC8oPzpcIihbXlwiXFxcXF0qKD86XFxcXC5bXlwiXFxcXF0qKSopXCIpL2csXG4gICAgc3RyaW5nU2luZ2xlUmUgPSAvKD86JyhbXidcXFxcXSooPzpcXFxcLlteJ1xcXFxdKikqKScpL2c7XG5cbnZhciBzZXRDb21tZW50UmUgPSAvXiAqWyovXSsgKi8sXG4gICAgc2V0Q29tbWVudEFsdFJlID0gL15cXHMqXFwqP1xcLyovLFxuICAgIHNldENvbW1lbnRTcGxpdFJlID0gL1xcbi9nLFxuICAgIHdoaXRlc3BhY2VSZSA9IC9cXHMvLFxuICAgIHVuZXNjYXBlUmUgPSAvXFxcXCguPykvZztcblxudmFyIHVuZXNjYXBlTWFwID0ge1xuICAgIFwiMFwiOiBcIlxcMFwiLFxuICAgIFwiclwiOiBcIlxcclwiLFxuICAgIFwiblwiOiBcIlxcblwiLFxuICAgIFwidFwiOiBcIlxcdFwiXG59O1xuXG4vKipcbiAqIFVuZXNjYXBlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIHVuZXNjYXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmVzY2FwZWQgc3RyaW5nXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLHN0cmluZz59IG1hcCBTcGVjaWFsIGNoYXJhY3RlcnMgbWFwXG4gKiBAbWVtYmVyb2YgdG9rZW5pemVcbiAqL1xuZnVuY3Rpb24gdW5lc2NhcGUoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKHVuZXNjYXBlUmUsIGZ1bmN0aW9uKCQwLCAkMSkge1xuICAgICAgICBzd2l0Y2ggKCQxKSB7XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgICAgY2FzZSBcIlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAkMTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZXNjYXBlTWFwWyQxXSB8fCBcIlwiO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnRva2VuaXplLnVuZXNjYXBlID0gdW5lc2NhcGU7XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCB0b2tlbiBhbmQgYWR2YW5jZXMuXG4gKiBAdHlwZWRlZiBUb2tlbml6ZXJIYW5kbGVOZXh0XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IE5leHQgdG9rZW4gb3IgYG51bGxgIG9uIGVvZlxuICovXG5cbi8qKlxuICogUGVla3MgZm9yIHRoZSBuZXh0IHRva2VuLlxuICogQHR5cGVkZWYgVG9rZW5pemVySGFuZGxlUGVla1xuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHJldHVybnMge3N0cmluZ3xudWxsfSBOZXh0IHRva2VuIG9yIGBudWxsYCBvbiBlb2ZcbiAqL1xuXG4vKipcbiAqIFB1c2hlcyBhIHRva2VuIGJhY2sgdG8gdGhlIHN0YWNrLlxuICogQHR5cGVkZWYgVG9rZW5pemVySGFuZGxlUHVzaFxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRva2VuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgdG9rZW4uXG4gKiBAdHlwZWRlZiBUb2tlbml6ZXJIYW5kbGVTa2lwXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWQgRXhwZWN0ZWQgdG9rZW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbmFsPWZhbHNlXSBJZiBvcHRpb25hbFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHRva2VuIG1hdGNoZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdG9rZW4gZGlkbid0IG1hdGNoIGFuZCBpcyBub3Qgb3B0aW9uYWxcbiAqL1xuXG4vKipcbiAqIEdldHMgdGhlIGNvbW1lbnQgb24gdGhlIHByZXZpb3VzIGxpbmUgb3IsIGFsdGVybmF0aXZlbHksIHRoZSBsaW5lIGNvbW1lbnQgb24gdGhlIHNwZWNpZmllZCBsaW5lLlxuICogQHR5cGVkZWYgVG9rZW5pemVySGFuZGxlQ21udFxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtudW1iZXJ9IFtsaW5lXSBMaW5lIG51bWJlclxuICogQHJldHVybnMge3N0cmluZ3xudWxsfSBDb21tZW50IHRleHQgb3IgYG51bGxgIGlmIG5vbmVcbiAqL1xuXG4vKipcbiAqIEhhbmRsZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB7QGxpbmsgdG9rZW5pemV9LlxuICogQGludGVyZmFjZSBJVG9rZW5pemVySGFuZGxlXG4gKiBAcHJvcGVydHkge1Rva2VuaXplckhhbmRsZU5leHR9IG5leHQgR2V0cyB0aGUgbmV4dCB0b2tlbiBhbmQgYWR2YW5jZXMgKGBudWxsYCBvbiBlb2YpXG4gKiBAcHJvcGVydHkge1Rva2VuaXplckhhbmRsZVBlZWt9IHBlZWsgUGVla3MgZm9yIHRoZSBuZXh0IHRva2VuIChgbnVsbGAgb24gZW9mKVxuICogQHByb3BlcnR5IHtUb2tlbml6ZXJIYW5kbGVQdXNofSBwdXNoIFB1c2hlcyBhIHRva2VuIGJhY2sgdG8gdGhlIHN0YWNrXG4gKiBAcHJvcGVydHkge1Rva2VuaXplckhhbmRsZVNraXB9IHNraXAgU2tpcHMgYSB0b2tlbiwgcmV0dXJucyBpdHMgcHJlc2VuY2UgYW5kIGFkdmFuY2VzIG9yLCBpZiBub24tb3B0aW9uYWwgYW5kIG5vdCBwcmVzZW50LCB0aHJvd3NcbiAqIEBwcm9wZXJ0eSB7VG9rZW5pemVySGFuZGxlQ21udH0gY21udCBHZXRzIHRoZSBjb21tZW50IG9uIHRoZSBwcmV2aW91cyBsaW5lIG9yIHRoZSBsaW5lIGNvbW1lbnQgb24gdGhlIHNwZWNpZmllZCBsaW5lLCBpZiBhbnlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lIEN1cnJlbnQgbGluZSBudW1iZXJcbiAqL1xuXG4vKipcbiAqIFRva2VuaXplcyB0aGUgZ2l2ZW4gLnByb3RvIHNvdXJjZSBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1c2VmdWwgdXRpbGl0eSBmdW5jdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFNvdXJjZSBjb250ZW50c1xuICogQHBhcmFtIHtib29sZWFufSBhbHRlcm5hdGVDb21tZW50TW9kZSBXaGV0aGVyIHdlIHNob3VsZCBhY3RpdmF0ZSBhbHRlcm5hdGUgY29tbWVudCBwYXJzaW5nIG1vZGUuXG4gKiBAcmV0dXJucyB7SVRva2VuaXplckhhbmRsZX0gVG9rZW5pemVyIGhhbmRsZVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZShzb3VyY2UsIGFsdGVybmF0ZUNvbW1lbnRNb2RlKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FsbGJhY2stcmV0dXJuICovXG4gICAgc291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG5cbiAgICB2YXIgb2Zmc2V0ID0gMCxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aCxcbiAgICAgICAgbGluZSA9IDEsXG4gICAgICAgIGxhc3RDb21tZW50TGluZSA9IDAsXG4gICAgICAgIGNvbW1lbnRzID0ge307XG5cbiAgICB2YXIgc3RhY2sgPSBbXTtcblxuICAgIHZhciBzdHJpbmdEZWxpbSA9IG51bGw7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gZXJyb3IgZm9yIGlsbGVnYWwgc3ludGF4LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IFN1YmplY3RcbiAgICAgKiBAcmV0dXJucyB7RXJyb3J9IEVycm9yIGNyZWF0ZWRcbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbGxlZ2FsKHN1YmplY3QpIHtcbiAgICAgICAgcmV0dXJuIEVycm9yKFwiaWxsZWdhbCBcIiArIHN1YmplY3QgKyBcIiAobGluZSBcIiArIGxpbmUgKyBcIilcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZHMgYSBzdHJpbmcgdGlsbCBpdHMgZW5kLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyByZWFkXG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVhZFN0cmluZygpIHtcbiAgICAgICAgdmFyIHJlID0gc3RyaW5nRGVsaW0gPT09IFwiJ1wiID8gc3RyaW5nU2luZ2xlUmUgOiBzdHJpbmdEb3VibGVSZTtcbiAgICAgICAgcmUubGFzdEluZGV4ID0gb2Zmc2V0IC0gMTtcbiAgICAgICAgdmFyIG1hdGNoID0gcmUuZXhlYyhzb3VyY2UpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbChcInN0cmluZ1wiKTtcbiAgICAgICAgb2Zmc2V0ID0gcmUubGFzdEluZGV4O1xuICAgICAgICBwdXNoKHN0cmluZ0RlbGltKTtcbiAgICAgICAgc3RyaW5nRGVsaW0gPSBudWxsO1xuICAgICAgICByZXR1cm4gdW5lc2NhcGUobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNoYXJhY3RlciBhdCBgcG9zYCB3aXRoaW4gdGhlIHNvdXJjZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9zIFBvc2l0aW9uXG4gICAgICogQHJldHVybnMge3N0cmluZ30gQ2hhcmFjdGVyXG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2hhckF0KHBvcykge1xuICAgICAgICByZXR1cm4gc291cmNlLmNoYXJBdChwb3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgY29tbWVudCB0ZXh0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIEVuZCBvZmZzZXRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTGVhZGluZyBzZXQgaWYgYSBsZWFkaW5nIGNvbW1lbnRcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldENvbW1lbnQoc3RhcnQsIGVuZCwgaXNMZWFkaW5nKSB7XG4gICAgICAgIHZhciBjb21tZW50ID0ge1xuICAgICAgICAgICAgdHlwZTogc291cmNlLmNoYXJBdChzdGFydCsrKSxcbiAgICAgICAgICAgIGxpbmVFbXB0eTogZmFsc2UsXG4gICAgICAgICAgICBsZWFkaW5nOiBpc0xlYWRpbmcsXG4gICAgICAgIH07XG4gICAgICAgIHZhciBsb29rYmFjaztcbiAgICAgICAgaWYgKGFsdGVybmF0ZUNvbW1lbnRNb2RlKSB7XG4gICAgICAgICAgICBsb29rYmFjayA9IDI7ICAvLyBhbHRlcm5hdGUgY29tbWVudCBwYXJzaW5nOiBcIi8vXCIgb3IgXCIvKlwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb29rYmFjayA9IDM7ICAvLyBcIi8vL1wiIG9yIFwiLyoqXCJcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tbWVudE9mZnNldCA9IHN0YXJ0IC0gbG9va2JhY2ssXG4gICAgICAgICAgICBjO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoLS1jb21tZW50T2Zmc2V0IDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAoYyA9IHNvdXJjZS5jaGFyQXQoY29tbWVudE9mZnNldCkpID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgY29tbWVudC5saW5lRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiKTtcbiAgICAgICAgdmFyIGxpbmVzID0gc291cmNlXG4gICAgICAgICAgICAuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpXG4gICAgICAgICAgICAuc3BsaXQoc2V0Q29tbWVudFNwbGl0UmUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgbGluZXNbaV0gPSBsaW5lc1tpXVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGFsdGVybmF0ZUNvbW1lbnRNb2RlID8gc2V0Q29tbWVudEFsdFJlIDogc2V0Q29tbWVudFJlLCBcIlwiKVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbW1lbnQudGV4dCA9IGxpbmVzXG4gICAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICBjb21tZW50c1tsaW5lXSA9IGNvbW1lbnQ7XG4gICAgICAgIGxhc3RDb21tZW50TGluZSA9IGxpbmU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEb3VibGVTbGFzaENvbW1lbnRMaW5lKHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgIHZhciBlbmRPZmZzZXQgPSBmaW5kRW5kT2ZMaW5lKHN0YXJ0T2Zmc2V0KTtcblxuICAgICAgICAvLyBzZWUgaWYgcmVtYWluaW5nIGxpbmUgbWF0Y2hlcyBjb21tZW50IHBhdHRlcm5cbiAgICAgICAgdmFyIGxpbmVUZXh0ID0gc291cmNlLnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTtcbiAgICAgICAgdmFyIGlzQ29tbWVudCA9IC9eXFxzKlxcL1xcLy8udGVzdChsaW5lVGV4dCk7XG4gICAgICAgIHJldHVybiBpc0NvbW1lbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZEVuZE9mTGluZShjdXJzb3IpIHtcbiAgICAgICAgLy8gZmluZCBlbmQgb2YgY3Vyc29yJ3MgbGluZVxuICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gY3Vyc29yO1xuICAgICAgICB3aGlsZSAoZW5kT2Zmc2V0IDwgbGVuZ3RoICYmIGNoYXJBdChlbmRPZmZzZXQpICE9PSBcIlxcblwiKSB7XG4gICAgICAgICAgICBlbmRPZmZzZXQrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5kT2Zmc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9idGFpbnMgdGhlIG5leHQgdG9rZW4uXG4gICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBOZXh0IHRva2VuIG9yIGBudWxsYCBvbiBlb2ZcbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiBzdGFjay5zaGlmdCgpO1xuICAgICAgICBpZiAoc3RyaW5nRGVsaW0pXG4gICAgICAgICAgICByZXR1cm4gcmVhZFN0cmluZygpO1xuICAgICAgICB2YXIgcmVwZWF0LFxuICAgICAgICAgICAgcHJldixcbiAgICAgICAgICAgIGN1cnIsXG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGlzRG9jLFxuICAgICAgICAgICAgaXNMZWFkaW5nQ29tbWVudCA9IG9mZnNldCA9PT0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gbGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAod2hpdGVzcGFjZVJlLnRlc3QoY3VyciA9IGNoYXJBdChvZmZzZXQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzTGVhZGluZ0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICArK2xpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgrK29mZnNldCA9PT0gbGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoYXJBdChvZmZzZXQpID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGlmICgrK29mZnNldCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwoXCJjb21tZW50XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hhckF0KG9mZnNldCkgPT09IFwiL1wiKSB7IC8vIExpbmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGVDb21tZW50TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHRyaXBsZS1zbGFzaCBjb21tZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0RvYyA9IGNoYXJBdChzdGFydCA9IG9mZnNldCArIDEpID09PSBcIi9cIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJBdCgrK29mZnNldCkgIT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKytvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb21tZW50KHN0YXJ0LCBvZmZzZXQgLSAxLCBpc0xlYWRpbmdDb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFpbGluZyBjb21tZW50IGNhbm5vdCBub3QgYmUgbXVsdGktbGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBsZWFkaW5nIGNvbW1lbnQgc3RhdGUgc2hvdWxkIGJlIHJlc2V0IHRvIGhhbmRsZSBwb3RlbnRpYWwgbmV4dCBjb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGVhZGluZ0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKytsaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBkb3VibGUtc2xhc2ggY29tbWVudHMsIGNvbnNvbGlkYXRpbmcgY29uc2VjdXRpdmUgbGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNEb2MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RvdWJsZVNsYXNoQ29tbWVudExpbmUob2Zmc2V0IC0gMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0RvYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBmaW5kRW5kT2ZMaW5lKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNMZWFkaW5nQ29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhaWxpbmcgY29tbWVudCBjYW5ub3Qgbm90IGJlIG11bHRpLWxpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaXNEb3VibGVTbGFzaENvbW1lbnRMaW5lKG9mZnNldCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1pbihsZW5ndGgsIGZpbmRFbmRPZkxpbmUob2Zmc2V0KSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29tbWVudChzdGFydCwgb2Zmc2V0LCBpc0xlYWRpbmdDb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xlYWRpbmdDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJyID0gY2hhckF0KG9mZnNldCkpID09PSBcIipcIikgeyAvKiBCbG9jayAqL1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgLyoqIChyZWd1bGFyIGNvbW1lbnQgbW9kZSkgb3IgLyogKGFsdGVybmF0ZSBjb21tZW50IG1vZGUpXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gb2Zmc2V0ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgaXNEb2MgPSBhbHRlcm5hdGVDb21tZW50TW9kZSB8fCBjaGFyQXQoc3RhcnQpID09PSBcIipcIjtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytvZmZzZXQgPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwoXCJjb21tZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY2hhckF0KG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHByZXYgIT09IFwiKlwiIHx8IGN1cnIgIT09IFwiL1wiKTtcbiAgICAgICAgICAgICAgICAgICAgKytvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29tbWVudChzdGFydCwgb2Zmc2V0IC0gMiwgaXNMZWFkaW5nQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xlYWRpbmdDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXBlYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi9cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHJlcGVhdCk7XG5cbiAgICAgICAgLy8gb2Zmc2V0ICE9PSBsZW5ndGggaWYgd2UgZ290IGhlcmVcblxuICAgICAgICB2YXIgZW5kID0gb2Zmc2V0O1xuICAgICAgICBkZWxpbVJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHZhciBkZWxpbSA9IGRlbGltUmUudGVzdChjaGFyQXQoZW5kKyspKTtcbiAgICAgICAgaWYgKCFkZWxpbSlcbiAgICAgICAgICAgIHdoaWxlIChlbmQgPCBsZW5ndGggJiYgIWRlbGltUmUudGVzdChjaGFyQXQoZW5kKSkpXG4gICAgICAgICAgICAgICAgKytlbmQ7XG4gICAgICAgIHZhciB0b2tlbiA9IHNvdXJjZS5zdWJzdHJpbmcob2Zmc2V0LCBvZmZzZXQgPSBlbmQpO1xuICAgICAgICBpZiAodG9rZW4gPT09IFwiXFxcIlwiIHx8IHRva2VuID09PSBcIidcIilcbiAgICAgICAgICAgIHN0cmluZ0RlbGltID0gdG9rZW47XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSB0b2tlbiBiYWNrIHRvIHRoZSBzdGFjay5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVG9rZW5cbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1c2godG9rZW4pIHtcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVla3MgZm9yIHRoZSBuZXh0IHRva2VuLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gVG9rZW4gb3IgYG51bGxgIG9uIGVvZlxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgdG9rZW4gPSBuZXh0KCk7XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBwdXNoKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tbMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2tpcHMgYSB0b2tlbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWQgRXhwZWN0ZWQgdG9rZW5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25hbD1mYWxzZV0gV2hldGhlciB0aGUgdG9rZW4gaXMgb3B0aW9uYWxcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIHdoZW4gc2tpcHBlZCwgYGZhbHNlYCBpZiBub3RcbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBhIHJlcXVpcmVkIHRva2VuIGlzIG5vdCBwcmVzZW50XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2tpcChleHBlY3RlZCwgb3B0aW9uYWwpIHtcbiAgICAgICAgdmFyIGFjdHVhbCA9IHBlZWsoKSxcbiAgICAgICAgICAgIGVxdWFscyA9IGFjdHVhbCA9PT0gZXhwZWN0ZWQ7XG4gICAgICAgIGlmIChlcXVhbHMpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9uYWwpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKFwidG9rZW4gJ1wiICsgYWN0dWFsICsgXCInLCAnXCIgKyBleHBlY3RlZCArIFwiJyBleHBlY3RlZFwiKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBjb21tZW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdHJhaWxpbmdMaW5lXSBMaW5lIG51bWJlciBpZiBsb29raW5nIGZvciBhIHRyYWlsaW5nIGNvbW1lbnRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IENvbW1lbnQgdGV4dFxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNtbnQodHJhaWxpbmdMaW5lKSB7XG4gICAgICAgIHZhciByZXQgPSBudWxsO1xuICAgICAgICB2YXIgY29tbWVudDtcbiAgICAgICAgaWYgKHRyYWlsaW5nTGluZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbbGluZSAtIDFdO1xuICAgICAgICAgICAgZGVsZXRlIGNvbW1lbnRzW2xpbmUgLSAxXTtcbiAgICAgICAgICAgIGlmIChjb21tZW50ICYmIChhbHRlcm5hdGVDb21tZW50TW9kZSB8fCBjb21tZW50LnR5cGUgPT09IFwiKlwiIHx8IGNvbW1lbnQubGluZUVtcHR5KSkge1xuICAgICAgICAgICAgICAgIHJldCA9IGNvbW1lbnQubGVhZGluZyA/IGNvbW1lbnQudGV4dCA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGxhc3RDb21tZW50TGluZSA8IHRyYWlsaW5nTGluZSkge1xuICAgICAgICAgICAgICAgIHBlZWsoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1t0cmFpbGluZ0xpbmVdO1xuICAgICAgICAgICAgZGVsZXRlIGNvbW1lbnRzW3RyYWlsaW5nTGluZV07XG4gICAgICAgICAgICBpZiAoY29tbWVudCAmJiAhY29tbWVudC5saW5lRW1wdHkgJiYgKGFsdGVybmF0ZUNvbW1lbnRNb2RlIHx8IGNvbW1lbnQudHlwZSA9PT0gXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gY29tbWVudC5sZWFkaW5nID8gbnVsbCA6IGNvbW1lbnQudGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe1xuICAgICAgICBuZXh0OiBuZXh0LFxuICAgICAgICBwZWVrOiBwZWVrLFxuICAgICAgICBwdXNoOiBwdXNoLFxuICAgICAgICBza2lwOiBza2lwLFxuICAgICAgICBjbW50OiBjbW50XG4gICAgfSwgXCJsaW5lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGxpbmU7IH1cbiAgICB9KTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbGxiYWNrLXJldHVybiAqL1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG5cbnBhcnNlLmZpbGVuYW1lID0gbnVsbDtcbnBhcnNlLmRlZmF1bHRzID0geyBrZWVwQ2FzZTogZmFsc2UgfTtcblxudmFyIHRva2VuaXplICA9IHJlcXVpcmUoXCIuL3Rva2VuaXplXCIpLFxuICAgIFJvb3QgICAgICA9IHJlcXVpcmUoXCIuL3Jvb3RcIiksXG4gICAgVHlwZSAgICAgID0gcmVxdWlyZShcIi4vdHlwZVwiKSxcbiAgICBGaWVsZCAgICAgPSByZXF1aXJlKFwiLi9maWVsZFwiKSxcbiAgICBNYXBGaWVsZCAgPSByZXF1aXJlKFwiLi9tYXBmaWVsZFwiKSxcbiAgICBPbmVPZiAgICAgPSByZXF1aXJlKFwiLi9vbmVvZlwiKSxcbiAgICBFbnVtICAgICAgPSByZXF1aXJlKFwiLi9lbnVtXCIpLFxuICAgIFNlcnZpY2UgICA9IHJlcXVpcmUoXCIuL3NlcnZpY2VcIiksXG4gICAgTWV0aG9kICAgID0gcmVxdWlyZShcIi4vbWV0aG9kXCIpLFxuICAgIFJlZmxlY3Rpb25PYmplY3QgPSByZXF1aXJlKFwiLi9vYmplY3RcIiksXG4gICAgdHlwZXMgICAgID0gcmVxdWlyZShcIi4vdHlwZXNcIiksXG4gICAgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIGJhc2UxMFJlICAgID0gL15bMS05XVswLTldKiQvLFxuICAgIGJhc2UxME5lZ1JlID0gL14tP1sxLTldWzAtOV0qJC8sXG4gICAgYmFzZTE2UmUgICAgPSAvXjBbeF1bMC05YS1mQS1GXSskLyxcbiAgICBiYXNlMTZOZWdSZSA9IC9eLT8wW3hdWzAtOWEtZkEtRl0rJC8sXG4gICAgYmFzZThSZSAgICAgPSAvXjBbMC03XSskLyxcbiAgICBiYXNlOE5lZ1JlICA9IC9eLT8wWzAtN10rJC8sXG4gICAgbnVtYmVyUmUgICAgPSAvXig/IVtlRV0pWzAtOV0qKD86XFwuWzAtOV0qKT8oPzpbZUVdWystXT9bMC05XSspPyQvLFxuICAgIG5hbWVSZSAgICAgID0gL15bYS16QS1aX11bYS16QS1aXzAtOV0qJC8sXG4gICAgdHlwZVJlZlJlICAgPSAvXig/OlxcLj9bYS16QS1aX11bYS16QS1aXzAtOV0qKSg/OlxcLlthLXpBLVpfXVthLXpBLVpfMC05XSopKiQvO1xuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgZnJvbSB7QGxpbmsgcGFyc2V9LlxuICogQGludGVyZmFjZSBJUGFyc2VyUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhY2thZ2UgUGFja2FnZSBuYW1lLCBpZiBkZWNsYXJlZFxuICogQHByb3BlcnR5IHtzdHJpbmdbXXx1bmRlZmluZWR9IGltcG9ydHMgSW1wb3J0cywgaWYgYW55XG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfHVuZGVmaW5lZH0gd2Vha0ltcG9ydHMgV2VhayBpbXBvcnRzLCBpZiBhbnlcbiAqIEBwcm9wZXJ0eSB7Um9vdH0gcm9vdCBQb3B1bGF0ZWQgcm9vdCBpbnN0YW5jZVxuICovXG5cbi8qKlxuICogT3B0aW9ucyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBwYXJzZX0uXG4gKiBAaW50ZXJmYWNlIElQYXJzZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2tlZXBDYXNlPWZhbHNlXSBLZWVwcyBmaWVsZCBjYXNpbmcgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRvIGNhbWVsIGNhc2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FsdGVybmF0ZUNvbW1lbnRNb2RlPWZhbHNlXSBSZWNvZ25pemUgZG91YmxlLXNsYXNoIGNvbW1lbnRzIGluIGFkZGl0aW9uIHRvIGRvYy1ibG9jayBjb21tZW50cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3ByZWZlclRyYWlsaW5nQ29tbWVudD1mYWxzZV0gVXNlIHRyYWlsaW5nIGNvbW1lbnQgd2hlbiBib3RoIGxlYWRpbmcgY29tbWVudCBhbmQgdHJhaWxpbmcgY29tbWVudCBleGlzdC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBKU09OIHNlcmlhbGl6YXRpb24uXG4gKiBAaW50ZXJmYWNlIElUb0pTT05PcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtrZWVwQ29tbWVudHM9ZmFsc2VdIFNlcmlhbGl6ZXMgY29tbWVudHMuXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIC5wcm90byBzb3VyY2UgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHBhcnNlZCBjb250ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU291cmNlIGNvbnRlbnRzXG4gKiBAcGFyYW0ge1Jvb3R9IHJvb3QgUm9vdCB0byBwb3B1bGF0ZVxuICogQHBhcmFtIHtJUGFyc2VPcHRpb25zfSBbb3B0aW9uc10gUGFyc2Ugb3B0aW9ucy4gRGVmYXVsdHMgdG8ge0BsaW5rIHBhcnNlLmRlZmF1bHRzfSB3aGVuIG9taXR0ZWQuXG4gKiBAcmV0dXJucyB7SVBhcnNlclJlc3VsdH0gUGFyc2VyIHJlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lPW51bGwgQ3VycmVudGx5IHByb2Nlc3NpbmcgZmlsZSBuYW1lIGZvciBlcnJvciByZXBvcnRpbmcsIGlmIGtub3duXG4gKiBAcHJvcGVydHkge0lQYXJzZU9wdGlvbnN9IGRlZmF1bHRzIERlZmF1bHQge0BsaW5rIElQYXJzZU9wdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHNvdXJjZSwgcm9vdCwgb3B0aW9ucykge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbGxiYWNrLXJldHVybiAqL1xuICAgIGlmICghKHJvb3QgaW5zdGFuY2VvZiBSb290KSkge1xuICAgICAgICBvcHRpb25zID0gcm9vdDtcbiAgICAgICAgcm9vdCA9IG5ldyBSb290KCk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgb3B0aW9ucyA9IHBhcnNlLmRlZmF1bHRzO1xuXG4gICAgdmFyIHByZWZlclRyYWlsaW5nQ29tbWVudCA9IG9wdGlvbnMucHJlZmVyVHJhaWxpbmdDb21tZW50IHx8IGZhbHNlO1xuICAgIHZhciB0biA9IHRva2VuaXplKHNvdXJjZSwgb3B0aW9ucy5hbHRlcm5hdGVDb21tZW50TW9kZSB8fCBmYWxzZSksXG4gICAgICAgIG5leHQgPSB0bi5uZXh0LFxuICAgICAgICBwdXNoID0gdG4ucHVzaCxcbiAgICAgICAgcGVlayA9IHRuLnBlZWssXG4gICAgICAgIHNraXAgPSB0bi5za2lwLFxuICAgICAgICBjbW50ID0gdG4uY21udDtcblxuICAgIHZhciBoZWFkID0gdHJ1ZSxcbiAgICAgICAgcGtnLFxuICAgICAgICBpbXBvcnRzLFxuICAgICAgICB3ZWFrSW1wb3J0cyxcbiAgICAgICAgZWRpdGlvbiA9IFwicHJvdG8yXCI7XG5cbiAgICB2YXIgcHRyID0gcm9vdDtcblxuICAgIHZhciB0b3BMZXZlbE9iamVjdHMgPSBbXTtcbiAgICB2YXIgdG9wTGV2ZWxPcHRpb25zID0ge307XG5cbiAgICB2YXIgYXBwbHlDYXNlID0gb3B0aW9ucy5rZWVwQ2FzZSA/IGZ1bmN0aW9uKG5hbWUpIHsgcmV0dXJuIG5hbWU7IH0gOiB1dGlsLmNhbWVsQ2FzZTtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVGaWxlRmVhdHVyZXMoKSB7XG4gICAgICAgIHRvcExldmVsT2JqZWN0cy5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBvYmouX2VkaXRpb24gPSBlZGl0aW9uO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModG9wTGV2ZWxPcHRpb25zKS5mb3JFYWNoKG9wdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5nZXRPcHRpb24ob3B0KSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgb2JqLnNldE9wdGlvbihvcHQsIHRvcExldmVsT3B0aW9uc1tvcHRdLCB0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGZ1bmN0aW9uIGlsbGVnYWwodG9rZW4sIG5hbWUsIGluc2lkZVRyeUNhdGNoKSB7XG4gICAgICAgIHZhciBmaWxlbmFtZSA9IHBhcnNlLmZpbGVuYW1lO1xuICAgICAgICBpZiAoIWluc2lkZVRyeUNhdGNoKVxuICAgICAgICAgICAgcGFyc2UuZmlsZW5hbWUgPSBudWxsO1xuICAgICAgICByZXR1cm4gRXJyb3IoXCJpbGxlZ2FsIFwiICsgKG5hbWUgfHwgXCJ0b2tlblwiKSArIFwiICdcIiArIHRva2VuICsgXCInIChcIiArIChmaWxlbmFtZSA/IGZpbGVuYW1lICsgXCIsIFwiIDogXCJcIikgKyBcImxpbmUgXCIgKyB0bi5saW5lICsgXCIpXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRTdHJpbmcoKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXSxcbiAgICAgICAgICAgIHRva2VuO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICgodG9rZW4gPSBuZXh0KCkpICE9PSBcIlxcXCJcIiAmJiB0b2tlbiAhPT0gXCInXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG5cbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKG5leHQoKSk7XG4gICAgICAgICAgICBza2lwKHRva2VuKTtcbiAgICAgICAgICAgIHRva2VuID0gcGVlaygpO1xuICAgICAgICB9IHdoaWxlICh0b2tlbiA9PT0gXCJcXFwiXCIgfHwgdG9rZW4gPT09IFwiJ1wiKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRWYWx1ZShhY2NlcHRUeXBlUmVmKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IG5leHQoKTtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXFwiXCI6XG4gICAgICAgICAgICAgICAgcHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0cnVlXCI6IGNhc2UgXCJUUlVFXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlIFwiZmFsc2VcIjogY2FzZSBcIkZBTFNFXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIodG9rZW4sIC8qIGluc2lkZVRyeUNhdGNoICovIHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKGFjY2VwdFR5cGVSZWYgJiYgdHlwZVJlZlJlLnRlc3QodG9rZW4pKVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4sIFwidmFsdWVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkUmFuZ2VzKHRhcmdldCwgYWNjZXB0U3RyaW5ncykge1xuICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoYWNjZXB0U3RyaW5ncyAmJiAoKHRva2VuID0gcGVlaygpKSA9PT0gXCJcXFwiXCIgfHwgdG9rZW4gPT09IFwiJ1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciBzdHIgPSByZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goc3RyKTtcbiAgICAgICAgICAgICAgICBpZiAoZWRpdGlvbiA+PSAyMDIzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwoc3RyLCBcImlkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goWyBzdGFydCA9IHBhcnNlSWQobmV4dCgpKSwgc2tpcChcInRvXCIsIHRydWUpID8gcGFyc2VJZChuZXh0KCkpIDogc3RhcnQgXSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY2NlcHRTdHJpbmdzICYmIHR5cGVSZWZSZS50ZXN0KHRva2VuKSAmJiBlZGl0aW9uID49IDIwMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoc2tpcChcIixcIiwgdHJ1ZSkpO1xuICAgICAgICB2YXIgZHVtbXkgPSB7b3B0aW9uczogdW5kZWZpbmVkfTtcbiAgICAgICAgZHVtbXkuc2V0T3B0aW9uID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zID09PSB1bmRlZmluZWQpIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgICAgICAgIHRoaXMub3B0aW9uc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBpZkJsb2NrKFxuICAgICAgICAgICAgZHVtbXksXG4gICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVJhbmdlX2Jsb2NrKHRva2VuKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gXCJvcHRpb25cIikge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9uKGR1bW15LCB0b2tlbik7ICAvLyBza2lwXG4gICAgICAgICAgICAgICAgc2tpcChcIjtcIik7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlUmFuZ2VfbGluZSgpIHtcbiAgICAgICAgICAgICAgcGFyc2VJbmxpbmVPcHRpb25zKGR1bW15KTsgIC8vIHNraXBcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHRva2VuLCBpbnNpZGVUcnlDYXRjaCkge1xuICAgICAgICB2YXIgc2lnbiA9IDE7XG4gICAgICAgIGlmICh0b2tlbi5jaGFyQXQoMCkgPT09IFwiLVwiKSB7XG4gICAgICAgICAgICBzaWduID0gLTE7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgICBjYXNlIFwiaW5mXCI6IGNhc2UgXCJJTkZcIjogY2FzZSBcIkluZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduICogSW5maW5pdHk7XG4gICAgICAgICAgICBjYXNlIFwibmFuXCI6IGNhc2UgXCJOQU5cIjogY2FzZSBcIk5hblwiOiBjYXNlIFwiTmFOXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2UxMFJlLnRlc3QodG9rZW4pKVxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh0b2tlbiwgMTApO1xuICAgICAgICBpZiAoYmFzZTE2UmUudGVzdCh0b2tlbikpXG4gICAgICAgICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHRva2VuLCAxNik7XG4gICAgICAgIGlmIChiYXNlOFJlLnRlc3QodG9rZW4pKVxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh0b2tlbiwgOCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG51bWJlclJlLnRlc3QodG9rZW4pKVxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHRva2VuKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuLCBcIm51bWJlclwiLCBpbnNpZGVUcnlDYXRjaCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJZCh0b2tlbiwgYWNjZXB0TmVnYXRpdmUpIHtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgICAgY2FzZSBcIm1heFwiOiBjYXNlIFwiTUFYXCI6IGNhc2UgXCJNYXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTM2ODcwOTExO1xuICAgICAgICAgICAgY2FzZSBcIjBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWFjY2VwdE5lZ2F0aXZlICYmIHRva2VuLmNoYXJBdCgwKSA9PT0gXCItXCIpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuLCBcImlkXCIpO1xuXG4gICAgICAgIGlmIChiYXNlMTBOZWdSZS50ZXN0KHRva2VuKSlcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0b2tlbiwgMTApO1xuICAgICAgICBpZiAoYmFzZTE2TmVnUmUudGVzdCh0b2tlbikpXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodG9rZW4sIDE2KTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoYmFzZThOZWdSZS50ZXN0KHRva2VuKSlcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0b2tlbiwgOCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbiwgXCJpZFwiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBhY2thZ2UoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocGtnICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKFwicGFja2FnZVwiKTtcblxuICAgICAgICBwa2cgPSBuZXh0KCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghdHlwZVJlZlJlLnRlc3QocGtnKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwocGtnLCBcIm5hbWVcIik7XG5cbiAgICAgICAgcHRyID0gcHRyLmRlZmluZShwa2cpO1xuXG4gICAgICAgIHNraXAoXCI7XCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0KCkge1xuICAgICAgICB2YXIgdG9rZW4gPSBwZWVrKCk7XG4gICAgICAgIHZhciB3aGljaEltcG9ydHM7XG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJ3ZWFrXCI6XG4gICAgICAgICAgICAgICAgd2hpY2hJbXBvcnRzID0gd2Vha0ltcG9ydHMgfHwgKHdlYWtJbXBvcnRzID0gW10pO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJwdWJsaWNcIjpcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHdoaWNoSW1wb3J0cyA9IGltcG9ydHMgfHwgKGltcG9ydHMgPSBbXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4gPSByZWFkU3RyaW5nKCk7XG4gICAgICAgIHNraXAoXCI7XCIpO1xuICAgICAgICB3aGljaEltcG9ydHMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VTeW50YXgoKSB7XG4gICAgICAgIHNraXAoXCI9XCIpO1xuICAgICAgICBlZGl0aW9uID0gcmVhZFN0cmluZygpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZWRpdGlvbiA8IDIwMjMpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKGVkaXRpb24sIFwic3ludGF4XCIpO1xuXG4gICAgICAgIHNraXAoXCI7XCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRWRpdGlvbigpIHtcbiAgICAgICAgc2tpcChcIj1cIik7XG4gICAgICAgIGVkaXRpb24gPSByZWFkU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZEVkaXRpb25zID0gW1wiMjAyM1wiXTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFzdXBwb3J0ZWRFZGl0aW9ucy5pbmNsdWRlcyhlZGl0aW9uKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwoZWRpdGlvbiwgXCJlZGl0aW9uXCIpO1xuXG4gICAgICAgIHNraXAoXCI7XCIpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb21tb24ocGFyZW50LCB0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG5cbiAgICAgICAgICAgIGNhc2UgXCJvcHRpb25cIjpcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbihwYXJlbnQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBza2lwKFwiO1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICBwYXJzZVR5cGUocGFyZW50LCB0b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XG4gICAgICAgICAgICAgICAgcGFyc2VFbnVtKHBhcmVudCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICBjYXNlIFwic2VydmljZVwiOlxuICAgICAgICAgICAgICAgIHBhcnNlU2VydmljZShwYXJlbnQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgY2FzZSBcImV4dGVuZFwiOlxuICAgICAgICAgICAgICAgIHBhcnNlRXh0ZW5zaW9uKHBhcmVudCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpZkJsb2NrKG9iaiwgZm5JZiwgZm5FbHNlKSB7XG4gICAgICAgIHZhciB0cmFpbGluZ0xpbmUgPSB0bi5saW5lO1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBpZih0eXBlb2Ygb2JqLmNvbW1lbnQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgb2JqLmNvbW1lbnQgPSBjbW50KCk7IC8vIHRyeSBibG9jay10eXBlIGNvbW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iai5maWxlbmFtZSA9IHBhcnNlLmZpbGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChza2lwKFwie1wiLCB0cnVlKSkge1xuICAgICAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICAgICAgd2hpbGUgKCh0b2tlbiA9IG5leHQoKSkgIT09IFwifVwiKVxuICAgICAgICAgICAgICAgIGZuSWYodG9rZW4pO1xuICAgICAgICAgICAgc2tpcChcIjtcIiwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm5FbHNlKVxuICAgICAgICAgICAgICAgIGZuRWxzZSgpO1xuICAgICAgICAgICAgc2tpcChcIjtcIik7XG4gICAgICAgICAgICBpZiAob2JqICYmICh0eXBlb2Ygb2JqLmNvbW1lbnQgIT09IFwic3RyaW5nXCIgfHwgcHJlZmVyVHJhaWxpbmdDb21tZW50KSlcbiAgICAgICAgICAgICAgICBvYmouY29tbWVudCA9IGNtbnQodHJhaWxpbmdMaW5lKSB8fCBvYmouY29tbWVudDsgLy8gdHJ5IGxpbmUtdHlwZSBjb21tZW50XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVR5cGUocGFyZW50LCB0b2tlbikge1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIW5hbWVSZS50ZXN0KHRva2VuID0gbmV4dCgpKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4sIFwidHlwZSBuYW1lXCIpO1xuXG4gICAgICAgIHZhciB0eXBlID0gbmV3IFR5cGUodG9rZW4pO1xuICAgICAgICBpZkJsb2NrKHR5cGUsIGZ1bmN0aW9uIHBhcnNlVHlwZV9ibG9jayh0b2tlbikge1xuICAgICAgICAgICAgaWYgKHBhcnNlQ29tbW9uKHR5cGUsIHRva2VuKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHN3aXRjaCAodG9rZW4pIHtcblxuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VNYXBGaWVsZCh0eXBlLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0aW9uICE9PSBcInByb3RvMlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi9cbiAgICAgICAgICAgICAgICBjYXNlIFwicmVwZWF0ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGaWVsZCh0eXBlLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWRpdGlvbiA9PT0gXCJwcm90bzNcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGaWVsZCh0eXBlLCBcInByb3RvM19vcHRpb25hbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW9uICE9PSBcInByb3RvMlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmllbGQodHlwZSwgXCJvcHRpb25hbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgXCJvbmVvZlwiOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZU9uZU9mKHR5cGUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFwiZXh0ZW5zaW9uc1wiOlxuICAgICAgICAgICAgICAgICAgICByZWFkUmFuZ2VzKHR5cGUuZXh0ZW5zaW9ucyB8fCAodHlwZS5leHRlbnNpb25zID0gW10pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFwicmVzZXJ2ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgcmVhZFJhbmdlcyh0eXBlLnJlc2VydmVkIHx8ICh0eXBlLnJlc2VydmVkID0gW10pLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRpb24gPT09IFwicHJvdG8yXCIgfHwgIXR5cGVSZWZSZS50ZXN0KHRva2VuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGaWVsZCh0eXBlLCBcIm9wdGlvbmFsXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmVudC5hZGQodHlwZSk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHB0cikge1xuICAgICAgICAgICAgdG9wTGV2ZWxPYmplY3RzLnB1c2godHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUZpZWxkKHBhcmVudCwgcnVsZSwgZXh0ZW5kKSB7XG4gICAgICAgIHZhciB0eXBlID0gbmV4dCgpO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgICAgICBwYXJzZUdyb3VwKHBhcmVudCwgcnVsZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHlwZSBuYW1lcyBjYW4gY29uc3VtZSBtdWx0aXBsZSB0b2tlbnMsIGluIG11bHRpcGxlIHZhcmlhbnRzOlxuICAgICAgICAvLyAgICBwYWNrYWdlLnN1YnBhY2thZ2UgICBmaWVsZCAgICAgICB0b2tlbnM6IFwicGFja2FnZS5zdWJwYWNrYWdlXCIgW1RZUEUgTkFNRSBFTkRTIEhFUkVdIFwiZmllbGRcIlxuICAgICAgICAvLyAgICBwYWNrYWdlIC4gc3VicGFja2FnZSBmaWVsZCAgICAgICB0b2tlbnM6IFwicGFja2FnZVwiIFwiLlwiIFwic3VicGFja2FnZVwiIFtUWVBFIE5BTUUgRU5EUyBIRVJFXSBcImZpZWxkXCJcbiAgICAgICAgLy8gICAgcGFja2FnZS4gIHN1YnBhY2thZ2UgZmllbGQgICAgICAgdG9rZW5zOiBcInBhY2thZ2UuXCIgXCJzdWJwYWNrYWdlXCIgW1RZUEUgTkFNRSBFTkRTIEhFUkVdIFwiZmllbGRcIlxuICAgICAgICAvLyAgICBwYWNrYWdlICAuc3VicGFja2FnZSBmaWVsZCAgICAgICB0b2tlbnM6IFwicGFja2FnZVwiIFwiLnN1YnBhY2thZ2VcIiBbVFlQRSBOQU1FIEVORFMgSEVSRV0gXCJmaWVsZFwiXG4gICAgICAgIC8vIEtlZXAgcmVhZGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IGEgdHlwZSBuYW1lIHdpdGggbm8gcGVyaW9kIGF0IHRoZSBlbmQsXG4gICAgICAgIC8vIGFuZCB0aGUgbmV4dCB0b2tlbiBkb2VzIG5vdCBzdGFydCB3aXRoIGEgcGVyaW9kLlxuICAgICAgICB3aGlsZSAodHlwZS5lbmRzV2l0aChcIi5cIikgfHwgcGVlaygpLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICB0eXBlICs9IG5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXR5cGVSZWZSZS50ZXN0KHR5cGUpKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0eXBlLCBcInR5cGVcIik7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBuZXh0KCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cbiAgICAgICAgaWYgKCFuYW1lUmUudGVzdChuYW1lKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwobmFtZSwgXCJuYW1lXCIpO1xuXG4gICAgICAgIG5hbWUgPSBhcHBseUNhc2UobmFtZSk7XG4gICAgICAgIHNraXAoXCI9XCIpO1xuXG4gICAgICAgIHZhciBmaWVsZCA9IG5ldyBGaWVsZChuYW1lLCBwYXJzZUlkKG5leHQoKSksIHR5cGUsIHJ1bGUsIGV4dGVuZCk7XG5cbiAgICAgICAgaWZCbG9jayhmaWVsZCwgZnVuY3Rpb24gcGFyc2VGaWVsZF9ibG9jayh0b2tlbikge1xuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb24oZmllbGQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBza2lwKFwiO1wiKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuXG4gICAgICAgIH0sIGZ1bmN0aW9uIHBhcnNlRmllbGRfbGluZSgpIHtcbiAgICAgICAgICAgIHBhcnNlSW5saW5lT3B0aW9ucyhmaWVsZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChydWxlID09PSBcInByb3RvM19vcHRpb25hbFwiKSB7XG4gICAgICAgICAgICAvLyBmb3IgcHJvdG8zIG9wdGlvbmFsIGZpZWxkcywgd2UgY3JlYXRlIGEgc2luZ2xlLW1lbWJlciBPbmVvZiB0byBtaW1pYyBcIm9wdGlvbmFsXCIgYmVoYXZpb3JcbiAgICAgICAgICAgIHZhciBvbmVvZiA9IG5ldyBPbmVPZihcIl9cIiArIG5hbWUpO1xuICAgICAgICAgICAgZmllbGQuc2V0T3B0aW9uKFwicHJvdG8zX29wdGlvbmFsXCIsIHRydWUpO1xuICAgICAgICAgICAgb25lb2YuYWRkKGZpZWxkKTtcbiAgICAgICAgICAgIHBhcmVudC5hZGQob25lb2YpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50LmFkZChmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcHRyKSB7XG4gICAgICAgICAgICB0b3BMZXZlbE9iamVjdHMucHVzaChmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUdyb3VwKHBhcmVudCwgcnVsZSkge1xuICAgICAgICBpZiAoZWRpdGlvbiA+PSAyMDIzKSB7XG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKFwiZ3JvdXBcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSBuZXh0KCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghbmFtZVJlLnRlc3QobmFtZSkpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKG5hbWUsIFwibmFtZVwiKTtcblxuICAgICAgICB2YXIgZmllbGROYW1lID0gdXRpbC5sY0ZpcnN0KG5hbWUpO1xuICAgICAgICBpZiAobmFtZSA9PT0gZmllbGROYW1lKVxuICAgICAgICAgICAgbmFtZSA9IHV0aWwudWNGaXJzdChuYW1lKTtcbiAgICAgICAgc2tpcChcIj1cIik7XG4gICAgICAgIHZhciBpZCA9IHBhcnNlSWQobmV4dCgpKTtcbiAgICAgICAgdmFyIHR5cGUgPSBuZXcgVHlwZShuYW1lKTtcbiAgICAgICAgdHlwZS5ncm91cCA9IHRydWU7XG4gICAgICAgIHZhciBmaWVsZCA9IG5ldyBGaWVsZChmaWVsZE5hbWUsIGlkLCBuYW1lLCBydWxlKTtcbiAgICAgICAgZmllbGQuZmlsZW5hbWUgPSBwYXJzZS5maWxlbmFtZTtcbiAgICAgICAgaWZCbG9jayh0eXBlLCBmdW5jdGlvbiBwYXJzZUdyb3VwX2Jsb2NrKHRva2VuKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9uKHR5cGUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcChcIjtcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXF1aXJlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXBlYXRlZFwiOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZpZWxkKHR5cGUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0aW9uID09PSBcInByb3RvM1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZpZWxkKHR5cGUsIFwicHJvdG8zX29wdGlvbmFsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGaWVsZCh0eXBlLCBcIm9wdGlvbmFsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUeXBlKHR5cGUsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZUVudW0odHlwZSwgdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXNlcnZlZFwiOlxuICAgICAgICAgICAgICAgICAgICByZWFkUmFuZ2VzKHR5cGUucmVzZXJ2ZWQgfHwgKHR5cGUucmVzZXJ2ZWQgPSBbXSksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7IC8vIHRoZXJlIGFyZSBubyBncm91cHMgd2l0aCBwcm90bzMgc2VtYW50aWNzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJlbnQuYWRkKHR5cGUpXG4gICAgICAgICAgICAgIC5hZGQoZmllbGQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTWFwRmllbGQocGFyZW50KSB7XG4gICAgICAgIHNraXAoXCI8XCIpO1xuICAgICAgICB2YXIga2V5VHlwZSA9IG5leHQoKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHR5cGVzLm1hcEtleVtrZXlUeXBlXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbChrZXlUeXBlLCBcInR5cGVcIik7XG5cbiAgICAgICAgc2tpcChcIixcIik7XG4gICAgICAgIHZhciB2YWx1ZVR5cGUgPSBuZXh0KCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghdHlwZVJlZlJlLnRlc3QodmFsdWVUeXBlKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwodmFsdWVUeXBlLCBcInR5cGVcIik7XG5cbiAgICAgICAgc2tpcChcIj5cIik7XG4gICAgICAgIHZhciBuYW1lID0gbmV4dCgpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIW5hbWVSZS50ZXN0KG5hbWUpKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbChuYW1lLCBcIm5hbWVcIik7XG5cbiAgICAgICAgc2tpcChcIj1cIik7XG4gICAgICAgIHZhciBmaWVsZCA9IG5ldyBNYXBGaWVsZChhcHBseUNhc2UobmFtZSksIHBhcnNlSWQobmV4dCgpKSwga2V5VHlwZSwgdmFsdWVUeXBlKTtcbiAgICAgICAgaWZCbG9jayhmaWVsZCwgZnVuY3Rpb24gcGFyc2VNYXBGaWVsZF9ibG9jayh0b2tlbikge1xuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb24oZmllbGQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBza2lwKFwiO1wiKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuXG4gICAgICAgIH0sIGZ1bmN0aW9uIHBhcnNlTWFwRmllbGRfbGluZSgpIHtcbiAgICAgICAgICAgIHBhcnNlSW5saW5lT3B0aW9ucyhmaWVsZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJlbnQuYWRkKGZpZWxkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9uZU9mKHBhcmVudCwgdG9rZW4pIHtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFuYW1lUmUudGVzdCh0b2tlbiA9IG5leHQoKSkpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuLCBcIm5hbWVcIik7XG5cbiAgICAgICAgdmFyIG9uZW9mID0gbmV3IE9uZU9mKGFwcGx5Q2FzZSh0b2tlbikpO1xuICAgICAgICBpZkJsb2NrKG9uZW9mLCBmdW5jdGlvbiBwYXJzZU9uZU9mX2Jsb2NrKHRva2VuKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbihvbmVvZiwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIHNraXAoXCI7XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBwYXJzZUZpZWxkKG9uZW9mLCBcIm9wdGlvbmFsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcGFyZW50LmFkZChvbmVvZik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VFbnVtKHBhcmVudCwgdG9rZW4pIHtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFuYW1lUmUudGVzdCh0b2tlbiA9IG5leHQoKSkpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuLCBcIm5hbWVcIik7XG5cbiAgICAgICAgdmFyIGVubSA9IG5ldyBFbnVtKHRva2VuKTtcbiAgICAgICAgaWZCbG9jayhlbm0sIGZ1bmN0aW9uIHBhcnNlRW51bV9ibG9jayh0b2tlbikge1xuICAgICAgICAgIHN3aXRjaCh0b2tlbikge1xuICAgICAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgICAgICBwYXJzZU9wdGlvbihlbm0sIHRva2VuKTtcbiAgICAgICAgICAgICAgc2tpcChcIjtcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwicmVzZXJ2ZWRcIjpcbiAgICAgICAgICAgICAgcmVhZFJhbmdlcyhlbm0ucmVzZXJ2ZWQgfHwgKGVubS5yZXNlcnZlZCA9IFtdKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGlmKGVubS5yZXNlcnZlZCA9PT0gdW5kZWZpbmVkKSBlbm0ucmVzZXJ2ZWQgPSBbXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHBhcnNlRW51bVZhbHVlKGVubSwgdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmVudC5hZGQoZW5tKTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcHRyKSB7XG4gICAgICAgICAgICB0b3BMZXZlbE9iamVjdHMucHVzaChlbm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VFbnVtVmFsdWUocGFyZW50LCB0b2tlbikge1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIW5hbWVSZS50ZXN0KHRva2VuKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4sIFwibmFtZVwiKTtcblxuICAgICAgICBza2lwKFwiPVwiKTtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJZChuZXh0KCksIHRydWUpLFxuICAgICAgICAgICAgZHVtbXkgPSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkXG4gICAgICAgICAgICB9O1xuICAgICAgICBkdW1teS5nZXRPcHRpb24gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW25hbWVdO1xuICAgICAgICB9O1xuICAgICAgICBkdW1teS5zZXRPcHRpb24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgUmVmbGVjdGlvbk9iamVjdC5wcm90b3R5cGUuc2V0T3B0aW9uLmNhbGwoZHVtbXksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgZHVtbXkuc2V0UGFyc2VkT3B0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgICAgICBpZkJsb2NrKGR1bW15LCBmdW5jdGlvbiBwYXJzZUVudW1WYWx1ZV9ibG9jayh0b2tlbikge1xuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb24oZHVtbXksIHRva2VuKTsgLy8gc2tpcFxuICAgICAgICAgICAgICAgIHNraXAoXCI7XCIpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG5cbiAgICAgICAgfSwgZnVuY3Rpb24gcGFyc2VFbnVtVmFsdWVfbGluZSgpIHtcbiAgICAgICAgICAgIHBhcnNlSW5saW5lT3B0aW9ucyhkdW1teSk7IC8vIHNraXBcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmVudC5hZGQodG9rZW4sIHZhbHVlLCBkdW1teS5jb21tZW50LCBkdW1teS5wYXJzZWRPcHRpb25zIHx8IGR1bW15Lm9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT3B0aW9uKHBhcmVudCwgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBvcHRpb247XG4gICAgICAgICAgICB2YXIgcHJvcE5hbWU7XG4gICAgICAgICAgICB2YXIgaXNPcHRpb24gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBuZXh0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gXCI9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnNWYWx1ZSA9IG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcChcIilcIik7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gXCIoXCIgKyBwYXJlbnNWYWx1ZSArIFwiKVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNPcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaXNPcHRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKFwiLlwiKSAmJiAhdG9rZW4uaW5jbHVkZXMoXCIoXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gdG9rZW5zWzBdICsgXCIuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lID0gcHJvcE5hbWUgPyBwcm9wTmFtZSArPSB0b2tlbiA6IHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2tlbiA9IG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuYW1lID0gcHJvcE5hbWUgPyBvcHRpb24uY29uY2F0KHByb3BOYW1lKSA6IG9wdGlvbjtcbiAgICAgICAgICAgIHZhciBvcHRpb25WYWx1ZSA9IHBhcnNlT3B0aW9uVmFsdWUocGFyZW50LCBuYW1lKTtcbiAgICAgICAgICAgIHByb3BOYW1lID0gcHJvcE5hbWUgJiYgcHJvcE5hbWVbMF0gPT09IFwiLlwiID8gcHJvcE5hbWUuc2xpY2UoMSkgOiBwcm9wTmFtZTtcbiAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbiAmJiBvcHRpb25bb3B0aW9uLmxlbmd0aCAtIDFdID09PSBcIi5cIiA/IG9wdGlvbi5zbGljZSgwLCAtMSkgOiBvcHRpb247XG4gICAgICAgICAgICBzZXRQYXJzZWRPcHRpb24ocGFyZW50LCBvcHRpb24sIG9wdGlvblZhbHVlLCBwcm9wTmFtZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPcHRpb25WYWx1ZShwYXJlbnQsIG5hbWUpIHtcbiAgICAgICAgLy8geyBhOiBcImZvb1wiIGIgeyBjOiBcImJhclwiIH0gfVxuICAgICAgICBpZiAoc2tpcChcIntcIiwgdHJ1ZSkpIHtcbiAgICAgICAgICAgIHZhciBvYmplY3RSZXN1bHQgPSB7fTtcblxuICAgICAgICAgICAgd2hpbGUgKCFza2lwKFwifVwiLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghbmFtZVJlLnRlc3QodG9rZW4gPSBuZXh0KCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4sIFwibmFtZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuLCBcImVuZCBvZiBpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gdG9rZW47XG5cbiAgICAgICAgICAgICAgICBza2lwKFwiOlwiLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChwZWVrKCkgPT09IFwie1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbiAobXlfb3B0aW9uKSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJlcGVhdGVkX3ZhbHVlOiBbIFwiZm9vXCIsIFwiYmFyXCIgXVxuICAgICAgICAgICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlT3B0aW9uVmFsdWUocGFyZW50LCBuYW1lICsgXCIuXCIgKyB0b2tlbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZWVrKCkgPT09IFwiW1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChza2lwKFwiW1wiLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHJlYWRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGxhc3RWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChza2lwKFwiLFwiLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwKFwiXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3B0aW9uKHBhcmVudCwgbmFtZSArIFwiLlwiICsgdG9rZW4sIGxhc3RWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0T3B0aW9uKHBhcmVudCwgbmFtZSArIFwiLlwiICsgdG9rZW4sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJldlZhbHVlID0gb2JqZWN0UmVzdWx0W3Byb3BOYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW10uY29uY2F0KHByZXZWYWx1ZSkuY29uY2F0KHZhbHVlKTtcblxuICAgICAgICAgICAgICAgIG9iamVjdFJlc3VsdFtwcm9wTmFtZV0gPSB2YWx1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFNlbWljb2xvbnMgYW5kIGNvbW1hcyBjYW4gYmUgb3B0aW9uYWxcbiAgICAgICAgICAgICAgICBza2lwKFwiLFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBza2lwKFwiO1wiLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaW1wbGVWYWx1ZSA9IHJlYWRWYWx1ZSh0cnVlKTtcbiAgICAgICAgc2V0T3B0aW9uKHBhcmVudCwgbmFtZSwgc2ltcGxlVmFsdWUpO1xuICAgICAgICByZXR1cm4gc2ltcGxlVmFsdWU7XG4gICAgICAgIC8vIERvZXMgbm90IGVuZm9yY2UgYSBkZWxpbWl0ZXIgdG8gYmUgdW5pdmVyc2FsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T3B0aW9uKHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHB0ciA9PT0gcGFyZW50ICYmIC9eZmVhdHVyZXNcXC4vLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIHRvcExldmVsT3B0aW9uc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnQuc2V0T3B0aW9uKVxuICAgICAgICAgICAgcGFyZW50LnNldE9wdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0UGFyc2VkT3B0aW9uKHBhcmVudCwgbmFtZSwgdmFsdWUsIHByb3BOYW1lKSB7XG4gICAgICAgIGlmIChwYXJlbnQuc2V0UGFyc2VkT3B0aW9uKVxuICAgICAgICAgICAgcGFyZW50LnNldFBhcnNlZE9wdGlvbihuYW1lLCB2YWx1ZSwgcHJvcE5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSW5saW5lT3B0aW9ucyhwYXJlbnQpIHtcbiAgICAgICAgaWYgKHNraXAoXCJbXCIsIHRydWUpKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb24ocGFyZW50LCBcIm9wdGlvblwiKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHNraXAoXCIsXCIsIHRydWUpKTtcbiAgICAgICAgICAgIHNraXAoXCJdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VTZXJ2aWNlKHBhcmVudCwgdG9rZW4pIHtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFuYW1lUmUudGVzdCh0b2tlbiA9IG5leHQoKSkpXG4gICAgICAgICAgICB0aHJvdyBpbGxlZ2FsKHRva2VuLCBcInNlcnZpY2UgbmFtZVwiKTtcblxuICAgICAgICB2YXIgc2VydmljZSA9IG5ldyBTZXJ2aWNlKHRva2VuKTtcbiAgICAgICAgaWZCbG9jayhzZXJ2aWNlLCBmdW5jdGlvbiBwYXJzZVNlcnZpY2VfYmxvY2sodG9rZW4pIHtcbiAgICAgICAgICAgIGlmIChwYXJzZUNvbW1vbihzZXJ2aWNlLCB0b2tlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFwicnBjXCIpXG4gICAgICAgICAgICAgICAgcGFyc2VNZXRob2Qoc2VydmljZSwgdG9rZW4pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyZW50LmFkZChzZXJ2aWNlKTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcHRyKSB7XG4gICAgICAgICAgICB0b3BMZXZlbE9iamVjdHMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTWV0aG9kKHBhcmVudCwgdG9rZW4pIHtcbiAgICAgICAgLy8gR2V0IHRoZSBjb21tZW50IG9mIHRoZSBwcmVjZWRpbmcgbGluZSBub3cgKGlmIG9uZSBleGlzdHMpIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG1ldGhvZCBpcyBkZWZpbmVkIGFjcm9zcyBtdWx0aXBsZSBsaW5lcy5cbiAgICAgICAgdmFyIGNvbW1lbnRUZXh0ID0gY21udCgpO1xuXG4gICAgICAgIHZhciB0eXBlID0gdG9rZW47XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghbmFtZVJlLnRlc3QodG9rZW4gPSBuZXh0KCkpKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbiwgXCJuYW1lXCIpO1xuXG4gICAgICAgIHZhciBuYW1lID0gdG9rZW4sXG4gICAgICAgICAgICByZXF1ZXN0VHlwZSwgcmVxdWVzdFN0cmVhbSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZSwgcmVzcG9uc2VTdHJlYW07XG5cbiAgICAgICAgc2tpcChcIihcIik7XG4gICAgICAgIGlmIChza2lwKFwic3RyZWFtXCIsIHRydWUpKVxuICAgICAgICAgICAgcmVxdWVzdFN0cmVhbSA9IHRydWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghdHlwZVJlZlJlLnRlc3QodG9rZW4gPSBuZXh0KCkpKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG5cbiAgICAgICAgcmVxdWVzdFR5cGUgPSB0b2tlbjtcbiAgICAgICAgc2tpcChcIilcIik7IHNraXAoXCJyZXR1cm5zXCIpOyBza2lwKFwiKFwiKTtcbiAgICAgICAgaWYgKHNraXAoXCJzdHJlYW1cIiwgdHJ1ZSkpXG4gICAgICAgICAgICByZXNwb25zZVN0cmVhbSA9IHRydWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghdHlwZVJlZlJlLnRlc3QodG9rZW4gPSBuZXh0KCkpKVxuICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG5cbiAgICAgICAgcmVzcG9uc2VUeXBlID0gdG9rZW47XG4gICAgICAgIHNraXAoXCIpXCIpO1xuXG4gICAgICAgIHZhciBtZXRob2QgPSBuZXcgTWV0aG9kKG5hbWUsIHR5cGUsIHJlcXVlc3RUeXBlLCByZXNwb25zZVR5cGUsIHJlcXVlc3RTdHJlYW0sIHJlc3BvbnNlU3RyZWFtKTtcbiAgICAgICAgbWV0aG9kLmNvbW1lbnQgPSBjb21tZW50VGV4dDtcbiAgICAgICAgaWZCbG9jayhtZXRob2QsIGZ1bmN0aW9uIHBhcnNlTWV0aG9kX2Jsb2NrKHRva2VuKSB7XG5cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbihtZXRob2QsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBza2lwKFwiO1wiKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBwYXJlbnQuYWRkKG1ldGhvZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VFeHRlbnNpb24ocGFyZW50LCB0b2tlbikge1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIXR5cGVSZWZSZS50ZXN0KHRva2VuID0gbmV4dCgpKSlcbiAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4sIFwicmVmZXJlbmNlXCIpO1xuXG4gICAgICAgIHZhciByZWZlcmVuY2UgPSB0b2tlbjtcbiAgICAgICAgaWZCbG9jayhudWxsLCBmdW5jdGlvbiBwYXJzZUV4dGVuc2lvbl9ibG9jayh0b2tlbikge1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbikge1xuXG4gICAgICAgICAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlcGVhdGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRmllbGQocGFyZW50LCB0b2tlbiwgcmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0aW9uID09PSBcInByb3RvM1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZpZWxkKHBhcmVudCwgXCJwcm90bzNfb3B0aW9uYWxcIiwgcmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmllbGQocGFyZW50LCBcIm9wdGlvbmFsXCIsIHJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRpb24gPT09IFwicHJvdG8yXCIgfHwgIXR5cGVSZWZSZS50ZXN0KHRva2VuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBwdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGaWVsZChwYXJlbnQsIFwib3B0aW9uYWxcIiwgcmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciB0b2tlbjtcbiAgICB3aGlsZSAoKHRva2VuID0gbmV4dCgpKSAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG5cbiAgICAgICAgICAgIGNhc2UgXCJwYWNrYWdlXCI6XG5cbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIWhlYWQpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgcGFyc2VQYWNrYWdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcblxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghaGVhZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG5cbiAgICAgICAgICAgICAgICBwYXJzZUltcG9ydCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwic3ludGF4XCI6XG5cbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIWhlYWQpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgcGFyc2VTeW50YXgoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImVkaXRpb25cIjpcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIWhlYWQpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGlsbGVnYWwodG9rZW4pO1xuICAgICAgICAgICAgICAgIHBhcnNlRWRpdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb24ocHRyLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgc2tpcChcIjtcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG5cbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbW1vbihwdHIsIHRva2VuKSkge1xuICAgICAgICAgICAgICAgICAgICBoZWFkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgdGhyb3cgaWxsZWdhbCh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNvbHZlRmlsZUZlYXR1cmVzKCk7XG5cbiAgICBwYXJzZS5maWxlbmFtZSA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgXCJwYWNrYWdlXCIgICAgIDogcGtnLFxuICAgICAgICBcImltcG9ydHNcIiAgICAgOiBpbXBvcnRzLFxuICAgICAgICAgd2Vha0ltcG9ydHMgIDogd2Vha0ltcG9ydHMsXG4gICAgICAgICByb290ICAgICAgICAgOiByb290XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIC5wcm90byBzb3VyY2UgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHBhcnNlZCBjb250ZW50cy5cbiAqIEBuYW1lIHBhcnNlXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU291cmNlIGNvbnRlbnRzXG4gKiBAcGFyYW0ge0lQYXJzZU9wdGlvbnN9IFtvcHRpb25zXSBQYXJzZSBvcHRpb25zLiBEZWZhdWx0cyB0byB7QGxpbmsgcGFyc2UuZGVmYXVsdHN9IHdoZW4gb21pdHRlZC5cbiAqIEByZXR1cm5zIHtJUGFyc2VyUmVzdWx0fSBQYXJzZXIgcmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWU9bnVsbCBDdXJyZW50bHkgcHJvY2Vzc2luZyBmaWxlIG5hbWUgZm9yIGVycm9yIHJlcG9ydGluZywgaWYga25vd25cbiAqIEBwcm9wZXJ0eSB7SVBhcnNlT3B0aW9uc30gZGVmYXVsdHMgRGVmYXVsdCB7QGxpbmsgSVBhcnNlT3B0aW9uc31cbiAqIEB2YXJpYXRpb24gMlxuICovXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBjb21tb247XG5cbnZhciBjb21tb25SZSA9IC9cXC98XFwuLztcblxuLyoqXG4gKiBQcm92aWRlcyBjb21tb24gdHlwZSBkZWZpbml0aW9ucy5cbiAqIENhbiBhbHNvIGJlIHVzZWQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGdvb2dsZSB0eXBlcyBvciB5b3VyIG93biBjdXN0b20gdHlwZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBTaG9ydCBuYW1lIGFzIGluIGBnb29nbGUvcHJvdG9idWYvW25hbWVdLnByb3RvYCBvciBmdWxsIGZpbGUgbmFtZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0ganNvbiBKU09OIGRlZmluaXRpb24gd2l0aGluIGBnb29nbGUucHJvdG9idWZgIGlmIGEgc2hvcnQgbmFtZSwgb3RoZXJ3aXNlIHRoZSBmaWxlJ3Mgcm9vdCBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHByb3BlcnR5IHtJTmFtZXNwYWNlfSBnb29nbGUvcHJvdG9idWYvYW55LnByb3RvIEFueVxuICogQHByb3BlcnR5IHtJTmFtZXNwYWNlfSBnb29nbGUvcHJvdG9idWYvZHVyYXRpb24ucHJvdG8gRHVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7SU5hbWVzcGFjZX0gZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvIEVtcHR5XG4gKiBAcHJvcGVydHkge0lOYW1lc3BhY2V9IGdvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnByb3RvIEZpZWxkTWFza1xuICogQHByb3BlcnR5IHtJTmFtZXNwYWNlfSBnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvIFN0cnVjdCwgVmFsdWUsIE51bGxWYWx1ZSBhbmQgTGlzdFZhbHVlXG4gKiBAcHJvcGVydHkge0lOYW1lc3BhY2V9IGdvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8gVGltZXN0YW1wXG4gKiBAcHJvcGVydHkge0lOYW1lc3BhY2V9IGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byBXcmFwcGVyc1xuICogQGV4YW1wbGVcbiAqIC8vIG1hbnVhbGx5IHByb3ZpZGVzIGRlc2NyaXB0b3IucHJvdG8gKGFzc3VtZXMgZ29vZ2xlL3Byb3RvYnVmLyBuYW1lc3BhY2UgYW5kIC5wcm90byBleHRlbnNpb24pXG4gKiBwcm90b2J1Zi5jb21tb24oXCJkZXNjcmlwdG9yXCIsIGRlc2NyaXB0b3JKc29uKTtcbiAqXG4gKiAvLyBtYW51YWxseSBwcm92aWRlcyBhIGN1c3RvbSBkZWZpbml0aW9uICh1c2VzIG15LmZvbyBuYW1lc3BhY2UpXG4gKiBwcm90b2J1Zi5jb21tb24oXCJteS9mb28vYmFyLnByb3RvXCIsIG15Rm9vQmFySnNvbik7XG4gKi9cbmZ1bmN0aW9uIGNvbW1vbihuYW1lLCBqc29uKSB7XG4gICAgaWYgKCFjb21tb25SZS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIG5hbWUgPSBcImdvb2dsZS9wcm90b2J1Zi9cIiArIG5hbWUgKyBcIi5wcm90b1wiO1xuICAgICAgICBqc29uID0geyBuZXN0ZWQ6IHsgZ29vZ2xlOiB7IG5lc3RlZDogeyBwcm90b2J1ZjogeyBuZXN0ZWQ6IGpzb24gfSB9IH0gfSB9O1xuICAgIH1cbiAgICBjb21tb25bbmFtZV0gPSBqc29uO1xufVxuXG4vLyBOb3QgcHJvdmlkZWQgYmVjYXVzZSBvZiBsaW1pdGVkIHVzZSAoZmVlbCBmcmVlIHRvIGRpc2N1c3Mgb3IgdG8gcHJvdmlkZSB5b3Vyc2VsZik6XG4vL1xuLy8gZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG9cbi8vIGdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90b1xuLy8gZ29vZ2xlL3Byb3RvYnVmL3R5cGUucHJvdG9cbi8vXG4vLyBTdHJpcHBlZCBhbmQgcHJlLXBhcnNlZCB2ZXJzaW9ucyBvZiB0aGVzZSBub24tYnVuZGxlZCBmaWxlcyBhcmUgaW5zdGVhZCBhdmFpbGFibGUgYXMgcGFydCBvZlxuLy8gdGhlIHJlcG9zaXRvcnkgb3IgcGFja2FnZSB3aXRoaW4gdGhlIGdvb2dsZS9wcm90b2J1ZiBkaXJlY3RvcnkuXG5cbmNvbW1vbihcImFueVwiLCB7XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgZ29vZ2xlLnByb3RvYnVmLkFueSBtZXNzYWdlLlxuICAgICAqIEBpbnRlcmZhY2UgSUFueVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlVXJsXVxuICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheX0gW2J5dGVzXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBBbnk6IHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICB0eXBlX3VybDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYnl0ZXNcIixcbiAgICAgICAgICAgICAgICBpZDogMlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbnZhciB0aW1lVHlwZTtcblxuY29tbW9uKFwiZHVyYXRpb25cIiwge1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiBtZXNzYWdlLlxuICAgICAqIEBpbnRlcmZhY2UgSUR1cmF0aW9uXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfSBbc2Vjb25kc11cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW25hbm9zXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBEdXJhdGlvbjogdGltZVR5cGUgPSB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgc2Vjb25kczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiaW50NjRcIixcbiAgICAgICAgICAgICAgICBpZDogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbm9zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJpbnQzMlwiLFxuICAgICAgICAgICAgICAgIGlkOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuY29tbW9uKFwidGltZXN0YW1wXCIsIHtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnRpZXMgb2YgYSBnb29nbGUucHJvdG9idWYuVGltZXN0YW1wIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJVGltZXN0YW1wXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfSBbc2Vjb25kc11cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW25hbm9zXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBUaW1lc3RhbXA6IHRpbWVUeXBlXG59KTtcblxuY29tbW9uKFwiZW1wdHlcIiwge1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5FbXB0eSBtZXNzYWdlLlxuICAgICAqIEBpbnRlcmZhY2UgSUVtcHR5XG4gICAgICogQG1lbWJlcm9mIGNvbW1vblxuICAgICAqL1xuICAgIEVtcHR5OiB7XG4gICAgICAgIGZpZWxkczoge31cbiAgICB9XG59KTtcblxuY29tbW9uKFwic3RydWN0XCIsIHtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnRpZXMgb2YgYSBnb29nbGUucHJvdG9idWYuU3RydWN0IG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJU3RydWN0XG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLElWYWx1ZT59IFtmaWVsZHNdXG4gICAgICogQG1lbWJlcm9mIGNvbW1vblxuICAgICAqL1xuICAgIFN0cnVjdDoge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICAgIGtleVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJWYWx1ZVwiLFxuICAgICAgICAgICAgICAgIGlkOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5WYWx1ZSBtZXNzYWdlLlxuICAgICAqIEBpbnRlcmZhY2UgSVZhbHVlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2tpbmRdXG4gICAgICogQHByb3BlcnR5IHswfSBbbnVsbFZhbHVlXVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbnVtYmVyVmFsdWVdXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdHJpbmdWYWx1ZV1cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtib29sVmFsdWVdXG4gICAgICogQHByb3BlcnR5IHtJU3RydWN0fSBbc3RydWN0VmFsdWVdXG4gICAgICogQHByb3BlcnR5IHtJTGlzdFZhbHVlfSBbbGlzdFZhbHVlXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBWYWx1ZToge1xuICAgICAgICBvbmVvZnM6IHtcbiAgICAgICAgICAgIGtpbmQ6IHtcbiAgICAgICAgICAgICAgICBvbmVvZjogW1xuICAgICAgICAgICAgICAgICAgICBcIm51bGxWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm51bWJlclZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyaW5nVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJib29sVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJ1Y3RWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImxpc3RWYWx1ZVwiXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIG51bGxWYWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiTnVsbFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudW1iZXJWYWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZG91YmxlXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib29sVmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xcIixcbiAgICAgICAgICAgICAgICBpZDogNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cnVjdFZhbHVlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTdHJ1Y3RcIixcbiAgICAgICAgICAgICAgICBpZDogNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpc3RWYWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiTGlzdFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDZcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBOdWxsVmFsdWU6IHtcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICBOVUxMX1ZBTFVFOiAwXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWUgbWVzc2FnZS5cbiAgICAgKiBAaW50ZXJmYWNlIElMaXN0VmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPElWYWx1ZT59IFt2YWx1ZXNdXG4gICAgICogQG1lbWJlcm9mIGNvbW1vblxuICAgICAqL1xuICAgIExpc3RWYWx1ZToge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIHJ1bGU6IFwicmVwZWF0ZWRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlZhbHVlXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5jb21tb24oXCJ3cmFwcGVyc1wiLCB7XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJRG91YmxlVmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdmFsdWVdXG4gICAgICogQG1lbWJlcm9mIGNvbW1vblxuICAgICAqL1xuICAgIERvdWJsZVZhbHVlOiB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRvdWJsZVwiLFxuICAgICAgICAgICAgICAgIGlkOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5GbG9hdFZhbHVlIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJRmxvYXRWYWx1ZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFt2YWx1ZV1cbiAgICAgKiBAbWVtYmVyb2YgY29tbW9uXG4gICAgICovXG4gICAgRmxvYXRWYWx1ZToge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJmbG9hdFwiLFxuICAgICAgICAgICAgICAgIGlkOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJSW50NjRWYWx1ZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ30gW3ZhbHVlXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBJbnQ2NFZhbHVlOiB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImludDY0XCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJVUludDY0VmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd9IFt2YWx1ZV1cbiAgICAgKiBAbWVtYmVyb2YgY29tbW9uXG4gICAgICovXG4gICAgVUludDY0VmFsdWU6IHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidWludDY0XCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUgbWVzc2FnZS5cbiAgICAgKiBAaW50ZXJmYWNlIElJbnQzMlZhbHVlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3ZhbHVlXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBJbnQzMlZhbHVlOiB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImludDMyXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJVUludDMyVmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdmFsdWVdXG4gICAgICogQG1lbWJlcm9mIGNvbW1vblxuICAgICAqL1xuICAgIFVJbnQzMlZhbHVlOiB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVpbnQzMlwiLFxuICAgICAgICAgICAgICAgIGlkOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUgbWVzc2FnZS5cbiAgICAgKiBAaW50ZXJmYWNlIElCb29sVmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3ZhbHVlXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBCb29sVmFsdWU6IHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbFwiLFxuICAgICAgICAgICAgICAgIGlkOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHJvcGVydGllcyBvZiBhIGdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZSBtZXNzYWdlLlxuICAgICAqIEBpbnRlcmZhY2UgSVN0cmluZ1ZhbHVlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3ZhbHVlXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBTdHJpbmdWYWx1ZToge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBpZDogMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnRpZXMgb2YgYSBnb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZSBtZXNzYWdlLlxuICAgICAqIEBpbnRlcmZhY2UgSUJ5dGVzVmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheX0gW3ZhbHVlXVxuICAgICAqIEBtZW1iZXJvZiBjb21tb25cbiAgICAgKi9cbiAgICBCeXRlc1ZhbHVlOiB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJ5dGVzXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5jb21tb24oXCJmaWVsZF9tYXNrXCIsIHtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnRpZXMgb2YgYSBnb29nbGUucHJvdG9idWYuRmllbGRNYXNrIG1lc3NhZ2UuXG4gICAgICogQGludGVyZmFjZSBJRG91YmxlVmFsdWVcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdmFsdWVdXG4gICAgICogQG1lbWJlcm9mIGNvbW1vblxuICAgICAqL1xuICAgIEZpZWxkTWFzazoge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAgICAgcnVsZTogXCJyZXBlYXRlZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgaWQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG4vKipcbiAqIEdldHMgdGhlIHJvb3QgZGVmaW5pdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGNvbW1vbiBwcm90byBmaWxlLlxuICpcbiAqIEJ1bmRsZWQgZGVmaW5pdGlvbnMgYXJlOlxuICogLSBnb29nbGUvcHJvdG9idWYvYW55LnByb3RvXG4gKiAtIGdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90b1xuICogLSBnb29nbGUvcHJvdG9idWYvZW1wdHkucHJvdG9cbiAqIC0gZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG9cbiAqIC0gZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90b1xuICogLSBnb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvXG4gKiAtIGdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90b1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIFByb3RvIGZpbGUgbmFtZVxuICogQHJldHVybnMge0lOYW1lc3BhY2V8bnVsbH0gUm9vdCBkZWZpbml0aW9uIG9yIGBudWxsYCBpZiBub3QgZGVmaW5lZFxuICovXG5jb21tb24uZ2V0ID0gZnVuY3Rpb24gZ2V0KGZpbGUpIHtcbiAgICByZXR1cm4gY29tbW9uW2ZpbGVdIHx8IG51bGw7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBwcm90b2J1ZiA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vaW5kZXgtbGlnaHRcIik7XG5cbnByb3RvYnVmLmJ1aWxkID0gXCJmdWxsXCI7XG5cbi8vIFBhcnNlclxucHJvdG9idWYudG9rZW5pemUgICAgICAgICA9IHJlcXVpcmUoXCIuL3Rva2VuaXplXCIpO1xucHJvdG9idWYucGFyc2UgICAgICAgICAgICA9IHJlcXVpcmUoXCIuL3BhcnNlXCIpO1xucHJvdG9idWYuY29tbW9uICAgICAgICAgICA9IHJlcXVpcmUoXCIuL2NvbW1vblwiKTtcblxuLy8gQ29uZmlndXJlIHBhcnNlclxucHJvdG9idWYuUm9vdC5fY29uZmlndXJlKHByb3RvYnVmLlR5cGUsIHByb3RvYnVmLnBhcnNlLCBwcm90b2J1Zi5jb21tb24pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciAkcHJvdG9idWYgPSByZXF1aXJlKFwiLi4vLi5cIik7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSAkcHJvdG9idWYuZGVzY3JpcHRvciA9ICRwcm90b2J1Zi5Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5qc29uXCIpKS5sb29rdXAoXCIuZ29vZ2xlLnByb3RvYnVmXCIpO1xuXG52YXIgTmFtZXNwYWNlID0gJHByb3RvYnVmLk5hbWVzcGFjZSxcbiAgICBSb290ICAgICAgPSAkcHJvdG9idWYuUm9vdCxcbiAgICBFbnVtICAgICAgPSAkcHJvdG9idWYuRW51bSxcbiAgICBUeXBlICAgICAgPSAkcHJvdG9idWYuVHlwZSxcbiAgICBGaWVsZCAgICAgPSAkcHJvdG9idWYuRmllbGQsXG4gICAgTWFwRmllbGQgID0gJHByb3RvYnVmLk1hcEZpZWxkLFxuICAgIE9uZU9mICAgICA9ICRwcm90b2J1Zi5PbmVPZixcbiAgICBTZXJ2aWNlICAgPSAkcHJvdG9idWYuU2VydmljZSxcbiAgICBNZXRob2QgICAgPSAkcHJvdG9idWYuTWV0aG9kO1xuXG4vLyAtLS0gUm9vdCAtLS1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGEgRmlsZURlc2NyaXB0b3JTZXQgbWVzc2FnZS5cbiAqIEBpbnRlcmZhY2UgSUZpbGVEZXNjcmlwdG9yU2V0XG4gKiBAcHJvcGVydHkge0lGaWxlRGVzY3JpcHRvclByb3RvW119IGZpbGUgRmlsZXNcbiAqL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBGaWxlRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElGaWxlRGVzY3JpcHRvclByb3RvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIEZpbGUgbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYWNrYWdlXSBQYWNrYWdlXG4gKiBAcHJvcGVydHkgeyp9IFtkZXBlbmRlbmN5XSBOb3Qgc3VwcG9ydGVkXG4gKiBAcHJvcGVydHkgeyp9IFtwdWJsaWNEZXBlbmRlbmN5XSBOb3Qgc3VwcG9ydGVkXG4gKiBAcHJvcGVydHkgeyp9IFt3ZWFrRGVwZW5kZW5jeV0gTm90IHN1cHBvcnRlZFxuICogQHByb3BlcnR5IHtJRGVzY3JpcHRvclByb3RvW119IFttZXNzYWdlVHlwZV0gTmVzdGVkIG1lc3NhZ2UgdHlwZXNcbiAqIEBwcm9wZXJ0eSB7SUVudW1EZXNjcmlwdG9yUHJvdG9bXX0gW2VudW1UeXBlXSBOZXN0ZWQgZW51bXNcbiAqIEBwcm9wZXJ0eSB7SVNlcnZpY2VEZXNjcmlwdG9yUHJvdG9bXX0gW3NlcnZpY2VdIE5lc3RlZCBzZXJ2aWNlc1xuICogQHByb3BlcnR5IHtJRmllbGREZXNjcmlwdG9yUHJvdG9bXX0gW2V4dGVuc2lvbl0gTmVzdGVkIGV4dGVuc2lvbiBmaWVsZHNcbiAqIEBwcm9wZXJ0eSB7SUZpbGVPcHRpb25zfSBbb3B0aW9uc10gT3B0aW9uc1xuICogQHByb3BlcnR5IHsqfSBbc291cmNlQ29kZUluZm9dIE5vdCBzdXBwb3J0ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3ludGF4PVwicHJvdG8yXCJdIFN5bnRheFxuICogQHByb3BlcnR5IHtJRWRpdGlvbn0gW2VkaXRpb25dIEVkaXRpb25cbiAqL1xuXG4vKipcbiAqIFZhbHVlcyBvZiB0aGUgRWRpdGlvbiBlbnVtLlxuICogQHR5cGVkZWYgSUVkaXRpb25cbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAcHJvcGVydHkge251bWJlcn0gRURJVElPTl9VTktOT1dOPTBcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBFRElUSU9OX0xFR0FDWT05MDBcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBFRElUSU9OX1BST1RPMj05OThcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBFRElUSU9OX1BST1RPMz05OTlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBFRElUSU9OXzIwMjM9MTAwMFxuICogQHByb3BlcnR5IHtudW1iZXJ9IEVESVRJT05fMjAyND0xMDAxXG4gKiBAcHJvcGVydHkge251bWJlcn0gRURJVElPTl8xX1RFU1RfT05MWT0xXG4gKiBAcHJvcGVydHkge251bWJlcn0gRURJVElPTl8yX1RFU1RfT05MWT0yXG4gKiBAcHJvcGVydHkge251bWJlcn0gRURJVElPTl85OTk5N19URVNUX09OTFk9OTk5OTdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBFRElUSU9OXzk5OTk4X1RFU1RfT05MWT05OTk5OFxuICogQHByb3BlcnR5IHtudW1iZXJ9IEVESVRJT05fOTk5OThfVEVTVF9PTkxZPTk5OTk5XG4gKiBAcHJvcGVydHkge251bWJlcn0gRURJVElPTl9NQVg9MjE0NzQ4MzY0N1xuICovXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIEZpbGVPcHRpb25zIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElGaWxlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtqYXZhUGFja2FnZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbamF2YU91dGVyQ2xhc3NuYW1lXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbamF2YU11bHRpcGxlRmlsZXNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbamF2YVN0cmluZ0NoZWNrVXRmOF1cbiAqIEBwcm9wZXJ0eSB7SUZpbGVPcHRpb25zT3B0aW1pemVNb2RlfSBbb3B0aW1pemVGb3I9MV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZ29QYWNrYWdlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2NHZW5lcmljU2VydmljZXNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtqYXZhR2VuZXJpY1NlcnZpY2VzXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHlHZW5lcmljU2VydmljZXNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZXByZWNhdGVkXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2NFbmFibGVBcmVuYXNdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW29iamNDbGFzc1ByZWZpeF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY3NoYXJwTmFtZXNwYWNlXVxuICovXG5cbi8qKlxuICogVmFsdWVzIG9mIGhlIEZpbGVPcHRpb25zLk9wdGltaXplTW9kZSBlbnVtLlxuICogQHR5cGVkZWYgSUZpbGVPcHRpb25zT3B0aW1pemVNb2RlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFNQRUVEPTFcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBDT0RFX1NJWkU9MlxuICogQHByb3BlcnR5IHtudW1iZXJ9IExJVEVfUlVOVElNRT0zXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm9vdCBmcm9tIGEgZGVzY3JpcHRvciBzZXQuXG4gKiBAcGFyYW0ge0lGaWxlRGVzY3JpcHRvclNldHxSZWFkZXJ8VWludDhBcnJheX0gZGVzY3JpcHRvciBEZXNjcmlwdG9yXG4gKiBAcmV0dXJucyB7Um9vdH0gUm9vdCBpbnN0YW5jZVxuICovXG5Sb290LmZyb21EZXNjcmlwdG9yID0gZnVuY3Rpb24gZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcikge1xuXG4gICAgLy8gRGVjb2RlIHRoZSBkZXNjcmlwdG9yIG1lc3NhZ2UgaWYgc3BlY2lmaWVkIGFzIGEgYnVmZmVyOlxuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5sZW5ndGggPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGRlc2NyaXB0b3IgPSBleHBvcnRzLkZpbGVEZXNjcmlwdG9yU2V0LmRlY29kZShkZXNjcmlwdG9yKTtcblxuICAgIHZhciByb290ID0gbmV3IFJvb3QoKTtcblxuICAgIGlmIChkZXNjcmlwdG9yLmZpbGUpIHtcbiAgICAgICAgdmFyIGZpbGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgZmlsZVBhY2thZ2U7XG4gICAgICAgIGZvciAodmFyIGogPSAwLCBpOyBqIDwgZGVzY3JpcHRvci5maWxlLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBmaWxlUGFja2FnZSA9IHJvb3Q7XG4gICAgICAgICAgICBpZiAoKGZpbGVEZXNjcmlwdG9yID0gZGVzY3JpcHRvci5maWxlW2pdKVtcInBhY2thZ2VcIl0gJiYgZmlsZURlc2NyaXB0b3JbXCJwYWNrYWdlXCJdLmxlbmd0aClcbiAgICAgICAgICAgICAgICBmaWxlUGFja2FnZSA9IHJvb3QuZGVmaW5lKGZpbGVEZXNjcmlwdG9yW1wicGFja2FnZVwiXSk7XG4gICAgICAgICAgICB2YXIgZWRpdGlvbiA9IGVkaXRpb25Gcm9tRGVzY3JpcHRvcihmaWxlRGVzY3JpcHRvcik7XG4gICAgICAgICAgICBpZiAoZmlsZURlc2NyaXB0b3IubmFtZSAmJiBmaWxlRGVzY3JpcHRvci5uYW1lLmxlbmd0aClcbiAgICAgICAgICAgICAgICByb290LmZpbGVzLnB1c2goZmlsZVBhY2thZ2UuZmlsZW5hbWUgPSBmaWxlRGVzY3JpcHRvci5uYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlRGVzY3JpcHRvci5tZXNzYWdlVHlwZSlcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZURlc2NyaXB0b3IubWVzc2FnZVR5cGUubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgIGZpbGVQYWNrYWdlLmFkZChUeXBlLmZyb21EZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yLm1lc3NhZ2VUeXBlW2ldLCBlZGl0aW9uKSk7XG4gICAgICAgICAgICBpZiAoZmlsZURlc2NyaXB0b3IuZW51bVR5cGUpXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpbGVEZXNjcmlwdG9yLmVudW1UeXBlLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICBmaWxlUGFja2FnZS5hZGQoRW51bS5mcm9tRGVzY3JpcHRvcihmaWxlRGVzY3JpcHRvci5lbnVtVHlwZVtpXSwgZWRpdGlvbikpO1xuICAgICAgICAgICAgaWYgKGZpbGVEZXNjcmlwdG9yLmV4dGVuc2lvbilcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZURlc2NyaXB0b3IuZXh0ZW5zaW9uLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICBmaWxlUGFja2FnZS5hZGQoRmllbGQuZnJvbURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3IuZXh0ZW5zaW9uW2ldLCBlZGl0aW9uKSk7XG4gICAgICAgICAgICBpZiAoZmlsZURlc2NyaXB0b3Iuc2VydmljZSlcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZURlc2NyaXB0b3Iuc2VydmljZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgZmlsZVBhY2thZ2UuYWRkKFNlcnZpY2UuZnJvbURlc2NyaXB0b3IoZmlsZURlc2NyaXB0b3Iuc2VydmljZVtpXSwgZWRpdGlvbikpO1xuICAgICAgICAgICAgdmFyIG9wdHMgPSBmcm9tRGVzY3JpcHRvck9wdGlvbnMoZmlsZURlc2NyaXB0b3Iub3B0aW9ucywgZXhwb3J0cy5GaWxlT3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAob3B0cykge1xuICAgICAgICAgICAgICAgIHZhciBrcyA9IE9iamVjdC5rZXlzKG9wdHMpO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgZmlsZVBhY2thZ2Uuc2V0T3B0aW9uKGtzW2ldLCBvcHRzW2tzW2ldXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdC5yZXNvbHZlQWxsKCk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcm9vdCB0byBhIGRlc2NyaXB0b3Igc2V0LlxuICogQHJldHVybnMge01lc3NhZ2U8SUZpbGVEZXNjcmlwdG9yU2V0Pn0gRGVzY3JpcHRvclxuICogQHBhcmFtIHtzdHJpbmd9IFtlZGl0aW9uPVwicHJvdG8yXCJdIFRoZSBzeW50YXggb3IgZWRpdGlvbiB0byB1c2VcbiAqL1xuUm9vdC5wcm90b3R5cGUudG9EZXNjcmlwdG9yID0gZnVuY3Rpb24gdG9EZXNjcmlwdG9yKGVkaXRpb24pIHtcbiAgICB2YXIgc2V0ID0gZXhwb3J0cy5GaWxlRGVzY3JpcHRvclNldC5jcmVhdGUoKTtcbiAgICBSb290X3RvRGVzY3JpcHRvclJlY3Vyc2l2ZSh0aGlzLCBzZXQuZmlsZSwgZWRpdGlvbik7XG4gICAgcmV0dXJuIHNldDtcbn07XG5cbi8vIFRyYXZlcnNlcyBhIG5hbWVzcGFjZSBhbmQgYXNzZW1ibGVzIHRoZSBkZXNjcmlwdG9yIHNldFxuZnVuY3Rpb24gUm9vdF90b0Rlc2NyaXB0b3JSZWN1cnNpdmUobnMsIGZpbGVzLCBlZGl0aW9uKSB7XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgZmlsZVxuICAgIHZhciBmaWxlID0gZXhwb3J0cy5GaWxlRGVzY3JpcHRvclByb3RvLmNyZWF0ZSh7IG5hbWU6IG5zLmZpbGVuYW1lIHx8IChucy5mdWxsTmFtZS5zdWJzdHJpbmcoMSkucmVwbGFjZSgvXFwuL2csIFwiX1wiKSB8fCBcInJvb3RcIikgKyBcIi5wcm90b1wiIH0pO1xuICAgIGVkaXRpb25Ub0Rlc2NyaXB0b3IoZWRpdGlvbiwgZmlsZSk7XG4gICAgaWYgKCEobnMgaW5zdGFuY2VvZiBSb290KSlcbiAgICAgICAgZmlsZVtcInBhY2thZ2VcIl0gPSBucy5mdWxsTmFtZS5zdWJzdHJpbmcoMSk7XG5cbiAgICAvLyBBZGQgbmVzdGVkIHR5cGVzXG4gICAgZm9yICh2YXIgaSA9IDAsIG5lc3RlZDsgaSA8IG5zLm5lc3RlZEFycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICBpZiAoKG5lc3RlZCA9IG5zLl9uZXN0ZWRBcnJheVtpXSkgaW5zdGFuY2VvZiBUeXBlKVxuICAgICAgICAgICAgZmlsZS5tZXNzYWdlVHlwZS5wdXNoKG5lc3RlZC50b0Rlc2NyaXB0b3IoZWRpdGlvbikpO1xuICAgICAgICBlbHNlIGlmIChuZXN0ZWQgaW5zdGFuY2VvZiBFbnVtKVxuICAgICAgICAgICAgZmlsZS5lbnVtVHlwZS5wdXNoKG5lc3RlZC50b0Rlc2NyaXB0b3IoKSk7XG4gICAgICAgIGVsc2UgaWYgKG5lc3RlZCBpbnN0YW5jZW9mIEZpZWxkKVxuICAgICAgICAgICAgZmlsZS5leHRlbnNpb24ucHVzaChuZXN0ZWQudG9EZXNjcmlwdG9yKGVkaXRpb24pKTtcbiAgICAgICAgZWxzZSBpZiAobmVzdGVkIGluc3RhbmNlb2YgU2VydmljZSlcbiAgICAgICAgICAgIGZpbGUuc2VydmljZS5wdXNoKG5lc3RlZC50b0Rlc2NyaXB0b3IoKSk7XG4gICAgICAgIGVsc2UgaWYgKG5lc3RlZCBpbnN0YW5jZW9mIC8qIHBsYWluICovIE5hbWVzcGFjZSlcbiAgICAgICAgICAgIFJvb3RfdG9EZXNjcmlwdG9yUmVjdXJzaXZlKG5lc3RlZCwgZmlsZXMsIGVkaXRpb24pOyAvLyByZXF1aXJlcyBuZXcgZmlsZVxuXG4gICAgLy8gS2VlcCBwYWNrYWdlLWxldmVsIG9wdGlvbnNcbiAgICBmaWxlLm9wdGlvbnMgPSB0b0Rlc2NyaXB0b3JPcHRpb25zKG5zLm9wdGlvbnMsIGV4cG9ydHMuRmlsZU9wdGlvbnMpO1xuXG4gICAgLy8gQW5kIGtlZXAgdGhlIGZpbGUgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbmVzdGVkIG9iamVjdFxuICAgIGlmIChmaWxlLm1lc3NhZ2VUeXBlLmxlbmd0aCArIGZpbGUuZW51bVR5cGUubGVuZ3RoICsgZmlsZS5leHRlbnNpb24ubGVuZ3RoICsgZmlsZS5zZXJ2aWNlLmxlbmd0aClcbiAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbn1cblxuLy8gLS0tIFR5cGUgLS0tXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIERlc2NyaXB0b3JQcm90byBtZXNzYWdlLlxuICogQGludGVyZmFjZSBJRGVzY3JpcHRvclByb3RvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIE1lc3NhZ2UgdHlwZSBuYW1lXG4gKiBAcHJvcGVydHkge0lGaWVsZERlc2NyaXB0b3JQcm90b1tdfSBbZmllbGRdIEZpZWxkc1xuICogQHByb3BlcnR5IHtJRmllbGREZXNjcmlwdG9yUHJvdG9bXX0gW2V4dGVuc2lvbl0gRXh0ZW5zaW9uIGZpZWxkc1xuICogQHByb3BlcnR5IHtJRGVzY3JpcHRvclByb3RvW119IFtuZXN0ZWRUeXBlXSBOZXN0ZWQgbWVzc2FnZSB0eXBlc1xuICogQHByb3BlcnR5IHtJRW51bURlc2NyaXB0b3JQcm90b1tdfSBbZW51bVR5cGVdIE5lc3RlZCBlbnVtc1xuICogQHByb3BlcnR5IHtJRGVzY3JpcHRvclByb3RvRXh0ZW5zaW9uUmFuZ2VbXX0gW2V4dGVuc2lvblJhbmdlXSBFeHRlbnNpb24gcmFuZ2VzXG4gKiBAcHJvcGVydHkge0lPbmVvZkRlc2NyaXB0b3JQcm90b1tdfSBbb25lb2ZEZWNsXSBPbmVvZnNcbiAqIEBwcm9wZXJ0eSB7SU1lc3NhZ2VPcHRpb25zfSBbb3B0aW9uc10gTm90IHN1cHBvcnRlZFxuICogQHByb3BlcnR5IHtJRGVzY3JpcHRvclByb3RvUmVzZXJ2ZWRSYW5nZVtdfSBbcmVzZXJ2ZWRSYW5nZV0gUmVzZXJ2ZWQgcmFuZ2VzXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbcmVzZXJ2ZWROYW1lXSBSZXNlcnZlZCBuYW1lc1xuICovXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIE1lc3NhZ2VPcHRpb25zIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElNZXNzYWdlT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbbWFwRW50cnk9ZmFsc2VdIFdoZXRoZXIgdGhpcyBtZXNzYWdlIGlzIGEgbWFwIGVudHJ5XG4gKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEV4dGVuc2lvblJhbmdlIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElEZXNjcmlwdG9yUHJvdG9FeHRlbnNpb25SYW5nZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzdGFydF0gU3RhcnQgZmllbGQgaWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZW5kXSBFbmQgZmllbGQgaWRcbiAqL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBSZXNlcnZlZFJhbmdlIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElEZXNjcmlwdG9yUHJvdG9SZXNlcnZlZFJhbmdlXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3N0YXJ0XSBTdGFydCBmaWVsZCBpZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtlbmRdIEVuZCBmaWVsZCBpZFxuICovXG5cbnZhciB1bm5hbWVkTWVzc2FnZUluZGV4ID0gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgdHlwZSBmcm9tIGEgZGVzY3JpcHRvci5cbiAqXG4gKiBXYXJuaW5nOiB0aGlzIGlzIG5vdCBzYWZlIHRvIHVzZSB3aXRoIGVkaXRpb25zIHByb3Rvcywgc2luY2UgaXQgZGlzY2FyZHMgcmVsZXZhbnQgZmlsZSBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7SURlc2NyaXB0b3JQcm90b3xSZWFkZXJ8VWludDhBcnJheX0gZGVzY3JpcHRvciBEZXNjcmlwdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gW2VkaXRpb249XCJwcm90bzJcIl0gVGhlIHN5bnRheCBvciBlZGl0aW9uIHRvIHVzZVxuICogQHBhcmFtIHtib29sZWFufSBbbmVzdGVkPWZhbHNlXSBXaGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgbmVzdGVkIG9iamVjdFxuICogQHJldHVybnMge1R5cGV9IFR5cGUgaW5zdGFuY2VcbiAqL1xuVHlwZS5mcm9tRGVzY3JpcHRvciA9IGZ1bmN0aW9uIGZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGVkaXRpb24sIG5lc3RlZCkge1xuICAgIC8vIERlY29kZSB0aGUgZGVzY3JpcHRvciBtZXNzYWdlIGlmIHNwZWNpZmllZCBhcyBhIGJ1ZmZlcjpcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IubGVuZ3RoID09PSBcIm51bWJlclwiKVxuICAgICAgICBkZXNjcmlwdG9yID0gZXhwb3J0cy5EZXNjcmlwdG9yUHJvdG8uZGVjb2RlKGRlc2NyaXB0b3IpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBtZXNzYWdlIHR5cGVcbiAgICB2YXIgdHlwZSA9IG5ldyBUeXBlKGRlc2NyaXB0b3IubmFtZS5sZW5ndGggPyBkZXNjcmlwdG9yLm5hbWUgOiBcIlR5cGVcIiArIHVubmFtZWRNZXNzYWdlSW5kZXgrKywgZnJvbURlc2NyaXB0b3JPcHRpb25zKGRlc2NyaXB0b3Iub3B0aW9ucywgZXhwb3J0cy5NZXNzYWdlT3B0aW9ucykpLFxuICAgICAgICBpO1xuXG4gICAgaWYgKCFuZXN0ZWQpXG4gICAgICAgIHR5cGUuX2VkaXRpb24gPSBlZGl0aW9uO1xuXG4gICAgLyogT25lb2ZzICovIGlmIChkZXNjcmlwdG9yLm9uZW9mRGVjbClcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlc2NyaXB0b3Iub25lb2ZEZWNsLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdHlwZS5hZGQoT25lT2YuZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvci5vbmVvZkRlY2xbaV0pKTtcbiAgICAvKiBGaWVsZHMgKi8gaWYgKGRlc2NyaXB0b3IuZmllbGQpXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmZpZWxkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSBGaWVsZC5mcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yLmZpZWxkW2ldLCBlZGl0aW9uLCB0cnVlKTtcbiAgICAgICAgICAgIHR5cGUuYWRkKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmZpZWxkW2ldLmhhc093blByb3BlcnR5KFwib25lb2ZJbmRleFwiKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgICAgICB0eXBlLm9uZW9mc0FycmF5W2Rlc2NyaXB0b3IuZmllbGRbaV0ub25lb2ZJbmRleF0uYWRkKGZpZWxkKTtcbiAgICAgICAgfVxuICAgIC8qIEV4dGVuc2lvbiBmaWVsZHMgKi8gaWYgKGRlc2NyaXB0b3IuZXh0ZW5zaW9uKVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGVzY3JpcHRvci5leHRlbnNpb24ubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICB0eXBlLmFkZChGaWVsZC5mcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yLmV4dGVuc2lvbltpXSwgZWRpdGlvbiwgdHJ1ZSkpO1xuICAgIC8qIE5lc3RlZCB0eXBlcyAqLyBpZiAoZGVzY3JpcHRvci5uZXN0ZWRUeXBlKVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGVzY3JpcHRvci5uZXN0ZWRUeXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0eXBlLmFkZChUeXBlLmZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IubmVzdGVkVHlwZVtpXSwgZWRpdGlvbiwgdHJ1ZSkpO1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IubmVzdGVkVHlwZVtpXS5vcHRpb25zICYmIGRlc2NyaXB0b3IubmVzdGVkVHlwZVtpXS5vcHRpb25zLm1hcEVudHJ5KVxuICAgICAgICAgICAgICAgIHR5cGUuc2V0T3B0aW9uKFwibWFwX2VudHJ5XCIsIHRydWUpO1xuICAgICAgICB9XG4gICAgLyogTmVzdGVkIGVudW1zICovIGlmIChkZXNjcmlwdG9yLmVudW1UeXBlKVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGVzY3JpcHRvci5lbnVtVHlwZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIHR5cGUuYWRkKEVudW0uZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvci5lbnVtVHlwZVtpXSwgZWRpdGlvbiwgdHJ1ZSkpO1xuICAgIC8qIEV4dGVuc2lvbiByYW5nZXMgKi8gaWYgKGRlc2NyaXB0b3IuZXh0ZW5zaW9uUmFuZ2UgJiYgZGVzY3JpcHRvci5leHRlbnNpb25SYW5nZS5sZW5ndGgpIHtcbiAgICAgICAgdHlwZS5leHRlbnNpb25zID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmV4dGVuc2lvblJhbmdlLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdHlwZS5leHRlbnNpb25zLnB1c2goWyBkZXNjcmlwdG9yLmV4dGVuc2lvblJhbmdlW2ldLnN0YXJ0LCBkZXNjcmlwdG9yLmV4dGVuc2lvblJhbmdlW2ldLmVuZCBdKTtcbiAgICB9XG4gICAgLyogUmVzZXJ2ZWQuLi4gKi8gaWYgKGRlc2NyaXB0b3IucmVzZXJ2ZWRSYW5nZSAmJiBkZXNjcmlwdG9yLnJlc2VydmVkUmFuZ2UubGVuZ3RoIHx8IGRlc2NyaXB0b3IucmVzZXJ2ZWROYW1lICYmIGRlc2NyaXB0b3IucmVzZXJ2ZWROYW1lLmxlbmd0aCkge1xuICAgICAgICB0eXBlLnJlc2VydmVkID0gW107XG4gICAgICAgIC8qIFJhbmdlcyAqLyBpZiAoZGVzY3JpcHRvci5yZXNlcnZlZFJhbmdlKVxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlc2NyaXB0b3IucmVzZXJ2ZWRSYW5nZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICB0eXBlLnJlc2VydmVkLnB1c2goWyBkZXNjcmlwdG9yLnJlc2VydmVkUmFuZ2VbaV0uc3RhcnQsIGRlc2NyaXB0b3IucmVzZXJ2ZWRSYW5nZVtpXS5lbmQgXSk7XG4gICAgICAgIC8qIE5hbWVzICovIGlmIChkZXNjcmlwdG9yLnJlc2VydmVkTmFtZSlcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXNjcmlwdG9yLnJlc2VydmVkTmFtZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICB0eXBlLnJlc2VydmVkLnB1c2goZGVzY3JpcHRvci5yZXNlcnZlZE5hbWVbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHR5cGUgdG8gYSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge01lc3NhZ2U8SURlc2NyaXB0b3JQcm90bz59IERlc2NyaXB0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZWRpdGlvbj1cInByb3RvMlwiXSBUaGUgc3ludGF4IG9yIGVkaXRpb24gdG8gdXNlXG4gKi9cblR5cGUucHJvdG90eXBlLnRvRGVzY3JpcHRvciA9IGZ1bmN0aW9uIHRvRGVzY3JpcHRvcihlZGl0aW9uKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBleHBvcnRzLkRlc2NyaXB0b3JQcm90by5jcmVhdGUoeyBuYW1lOiB0aGlzLm5hbWUgfSksXG4gICAgICAgIGk7XG5cbiAgICAvKiBGaWVsZHMgKi8gZm9yIChpID0gMDsgaSA8IHRoaXMuZmllbGRzQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGZpZWxkRGVzY3JpcHRvcjtcbiAgICAgICAgZGVzY3JpcHRvci5maWVsZC5wdXNoKGZpZWxkRGVzY3JpcHRvciA9IHRoaXMuX2ZpZWxkc0FycmF5W2ldLnRvRGVzY3JpcHRvcihlZGl0aW9uKSk7XG4gICAgICAgIGlmICh0aGlzLl9maWVsZHNBcnJheVtpXSBpbnN0YW5jZW9mIE1hcEZpZWxkKSB7IC8vIG1hcCBmaWVsZHMgYXJlIHJlcGVhdGVkIEZpZWxkTmFtZUVudHJ5XG4gICAgICAgICAgICB2YXIga2V5VHlwZSA9IHRvRGVzY3JpcHRvclR5cGUodGhpcy5fZmllbGRzQXJyYXlbaV0ua2V5VHlwZSwgdGhpcy5fZmllbGRzQXJyYXlbaV0ucmVzb2x2ZWRLZXlUeXBlLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgdmFsdWVUeXBlID0gdG9EZXNjcmlwdG9yVHlwZSh0aGlzLl9maWVsZHNBcnJheVtpXS50eXBlLCB0aGlzLl9maWVsZHNBcnJheVtpXS5yZXNvbHZlZFR5cGUsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVR5cGVOYW1lID0gdmFsdWVUeXBlID09PSAvKiB0eXBlICovIDExIHx8IHZhbHVlVHlwZSA9PT0gLyogZW51bSAqLyAxNFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2ZpZWxkc0FycmF5W2ldLnJlc29sdmVkVHlwZSAmJiBzaG9ydG5hbWUodGhpcy5wYXJlbnQsIHRoaXMuX2ZpZWxkc0FycmF5W2ldLnJlc29sdmVkVHlwZSkgfHwgdGhpcy5fZmllbGRzQXJyYXlbaV0udHlwZVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IubmVzdGVkVHlwZS5wdXNoKGV4cG9ydHMuRGVzY3JpcHRvclByb3RvLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGREZXNjcmlwdG9yLnR5cGVOYW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBbXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuRmllbGREZXNjcmlwdG9yUHJvdG8uY3JlYXRlKHsgbmFtZTogXCJrZXlcIiwgbnVtYmVyOiAxLCBsYWJlbDogMSwgdHlwZToga2V5VHlwZSB9KSwgLy8gY2FuJ3QgcmVmZXJlbmNlIGEgdHlwZSBvciBlbnVtXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuRmllbGREZXNjcmlwdG9yUHJvdG8uY3JlYXRlKHsgbmFtZTogXCJ2YWx1ZVwiLCBudW1iZXI6IDIsIGxhYmVsOiAxLCB0eXBlOiB2YWx1ZVR5cGUsIHR5cGVOYW1lOiB2YWx1ZVR5cGVOYW1lIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHBvcnRzLk1lc3NhZ2VPcHRpb25zLmNyZWF0ZSh7IG1hcEVudHJ5OiB0cnVlIH0pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogT25lb2ZzICovIGZvciAoaSA9IDA7IGkgPCB0aGlzLm9uZW9mc0FycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgICBkZXNjcmlwdG9yLm9uZW9mRGVjbC5wdXNoKHRoaXMuX29uZW9mc0FycmF5W2ldLnRvRGVzY3JpcHRvcigpKTtcbiAgICAvKiBOZXN0ZWQuLi4gKi8gZm9yIChpID0gMDsgaSA8IHRoaXMubmVzdGVkQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgLyogRXh0ZW5zaW9uIGZpZWxkcyAqLyBpZiAodGhpcy5fbmVzdGVkQXJyYXlbaV0gaW5zdGFuY2VvZiBGaWVsZClcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuZmllbGQucHVzaCh0aGlzLl9uZXN0ZWRBcnJheVtpXS50b0Rlc2NyaXB0b3IoZWRpdGlvbikpO1xuICAgICAgICAvKiBUeXBlcyAqLyBlbHNlIGlmICh0aGlzLl9uZXN0ZWRBcnJheVtpXSBpbnN0YW5jZW9mIFR5cGUpXG4gICAgICAgICAgICBkZXNjcmlwdG9yLm5lc3RlZFR5cGUucHVzaCh0aGlzLl9uZXN0ZWRBcnJheVtpXS50b0Rlc2NyaXB0b3IoZWRpdGlvbikpO1xuICAgICAgICAvKiBFbnVtcyAqLyBlbHNlIGlmICh0aGlzLl9uZXN0ZWRBcnJheVtpXSBpbnN0YW5jZW9mIEVudW0pXG4gICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1UeXBlLnB1c2godGhpcy5fbmVzdGVkQXJyYXlbaV0udG9EZXNjcmlwdG9yKCkpO1xuICAgICAgICAvLyBwbGFpbiBuZXN0ZWQgbmFtZXNwYWNlcyBiZWNvbWUgcGFja2FnZXMgaW5zdGVhZCBpbiBSb290I3RvRGVzY3JpcHRvclxuICAgIH1cbiAgICAvKiBFeHRlbnNpb24gcmFuZ2VzICovIGlmICh0aGlzLmV4dGVuc2lvbnMpXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmV4dGVuc2lvbnMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBkZXNjcmlwdG9yLmV4dGVuc2lvblJhbmdlLnB1c2goZXhwb3J0cy5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2UuY3JlYXRlKHsgc3RhcnQ6IHRoaXMuZXh0ZW5zaW9uc1tpXVswXSwgZW5kOiB0aGlzLmV4dGVuc2lvbnNbaV1bMV0gfSkpO1xuICAgIC8qIFJlc2VydmVkLi4uICovIGlmICh0aGlzLnJlc2VydmVkKVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5yZXNlcnZlZC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIC8qIE5hbWVzICovIGlmICh0eXBlb2YgdGhpcy5yZXNlcnZlZFtpXSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnJlc2VydmVkTmFtZS5wdXNoKHRoaXMucmVzZXJ2ZWRbaV0pO1xuICAgICAgICAgICAgLyogUmFuZ2VzICovIGVsc2VcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnJlc2VydmVkUmFuZ2UucHVzaChleHBvcnRzLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlLmNyZWF0ZSh7IHN0YXJ0OiB0aGlzLnJlc2VydmVkW2ldWzBdLCBlbmQ6IHRoaXMucmVzZXJ2ZWRbaV1bMV0gfSkpO1xuXG4gICAgZGVzY3JpcHRvci5vcHRpb25zID0gdG9EZXNjcmlwdG9yT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGV4cG9ydHMuTWVzc2FnZU9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG4vLyAtLS0gRmllbGQgLS0tXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIEZpZWxkRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElGaWVsZERlc2NyaXB0b3JQcm90b1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSBGaWVsZCBuYW1lXG4gKiBAcHJvcGVydHkge251bWJlcn0gW251bWJlcl0gRmllbGQgaWRcbiAqIEBwcm9wZXJ0eSB7SUZpZWxkRGVzY3JpcHRvclByb3RvTGFiZWx9IFtsYWJlbF0gRmllbGQgcnVsZVxuICogQHByb3BlcnR5IHtJRmllbGREZXNjcmlwdG9yUHJvdG9UeXBlfSBbdHlwZV0gRmllbGQgYmFzaWMgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlTmFtZV0gRmllbGQgdHlwZSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2V4dGVuZGVlXSBFeHRlbmRlZCB0eXBlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVmYXVsdFZhbHVlXSBMaXRlcmFsIGRlZmF1bHQgdmFsdWVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb25lb2ZJbmRleF0gT25lb2YgaW5kZXggaWYgcGFydCBvZiBhIG9uZW9mXG4gKiBAcHJvcGVydHkgeyp9IFtqc29uTmFtZV0gTm90IHN1cHBvcnRlZFxuICogQHByb3BlcnR5IHtJRmllbGRPcHRpb25zfSBbb3B0aW9uc10gRmllbGQgb3B0aW9uc1xuICovXG5cbi8qKlxuICogVmFsdWVzIG9mIHRoZSBGaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbCBlbnVtLlxuICogQHR5cGVkZWYgSUZpZWxkRGVzY3JpcHRvclByb3RvTGFiZWxcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAcHJvcGVydHkge251bWJlcn0gTEFCRUxfT1BUSU9OQUw9MVxuICogQHByb3BlcnR5IHtudW1iZXJ9IExBQkVMX1JFUVVJUkVEPTJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBMQUJFTF9SRVBFQVRFRD0zXG4gKi9cblxuLyoqXG4gKiBWYWx1ZXMgb2YgdGhlIEZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUgZW51bS5cbiAqIEB0eXBlZGVmIElGaWVsZERlc2NyaXB0b3JQcm90b1R5cGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAcHJvcGVydHkge251bWJlcn0gVFlQRV9ET1VCTEU9MVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfRkxPQVQ9MlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfSU5UNjQ9M1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfVUlOVDY0PTRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUWVBFX0lOVDMyPTVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUWVBFX0ZJWEVENjQ9NlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfRklYRUQzMj03XG4gKiBAcHJvcGVydHkge251bWJlcn0gVFlQRV9CT09MPThcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUWVBFX1NUUklORz05XG4gKiBAcHJvcGVydHkge251bWJlcn0gVFlQRV9HUk9VUD0xMFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfTUVTU0FHRT0xMVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfQllURVM9MTJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUWVBFX1VJTlQzMj0xM1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfRU5VTT0xNFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFRZUEVfU0ZJWEVEMzI9MTVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUWVBFX1NGSVhFRDY0PTE2XG4gKiBAcHJvcGVydHkge251bWJlcn0gVFlQRV9TSU5UMzI9MTdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBUWVBFX1NJTlQ2ND0xOFxuICovXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIEZpZWxkT3B0aW9ucyBtZXNzYWdlLlxuICogQGludGVyZmFjZSBJRmllbGRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwYWNrZWRdIFdoZXRoZXIgcGFja2VkIG9yIG5vdCAoZGVmYXVsdHMgdG8gYGZhbHNlYCBmb3IgcHJvdG8yIGFuZCBgdHJ1ZWAgZm9yIHByb3RvMylcbiAqIEBwcm9wZXJ0eSB7SUZpZWxkT3B0aW9uc0pTVHlwZX0gW2pzdHlwZV0gSmF2YVNjcmlwdCB2YWx1ZSB0eXBlIChub3QgdXNlZCBieSBwcm90b2J1Zi5qcylcbiAqL1xuXG4vKipcbiAqIFZhbHVlcyBvZiB0aGUgRmllbGRPcHRpb25zLkpTVHlwZSBlbnVtLlxuICogQHR5cGVkZWYgSUZpZWxkT3B0aW9uc0pTVHlwZVxuICogQHR5cGUge251bWJlcn1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBKU19OT1JNQUw9MFxuICogQHByb3BlcnR5IHtudW1iZXJ9IEpTX1NUUklORz0xXG4gKiBAcHJvcGVydHkge251bWJlcn0gSlNfTlVNQkVSPTJcbiAqL1xuXG4vLyBjb3BpZWQgaGVyZSBmcm9tIHBhcnNlLmpzXG52YXIgbnVtYmVyUmUgPSAvXig/IVtlRV0pWzAtOV0qKD86XFwuWzAtOV0qKT8oPzpbZUVdWystXT9bMC05XSspPyQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmaWVsZCBmcm9tIGEgZGVzY3JpcHRvci5cbiAqXG4gKiBXYXJuaW5nOiB0aGlzIGlzIG5vdCBzYWZlIHRvIHVzZSB3aXRoIGVkaXRpb25zIHByb3Rvcywgc2luY2UgaXQgZGlzY2FyZHMgcmVsZXZhbnQgZmlsZSBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7SUZpZWxkRGVzY3JpcHRvclByb3RvfFJlYWRlcnxVaW50OEFycmF5fSBkZXNjcmlwdG9yIERlc2NyaXB0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZWRpdGlvbj1cInByb3RvMlwiXSBUaGUgc3ludGF4IG9yIGVkaXRpb24gdG8gdXNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtuZXN0ZWQ9ZmFsc2VdIFdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYSB0b3AtbGV2ZWwgb2JqZWN0XG4gKiBAcmV0dXJucyB7RmllbGR9IEZpZWxkIGluc3RhbmNlXG4gKi9cbkZpZWxkLmZyb21EZXNjcmlwdG9yID0gZnVuY3Rpb24gZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvciwgZWRpdGlvbiwgbmVzdGVkKSB7XG5cbiAgICAvLyBEZWNvZGUgdGhlIGRlc2NyaXB0b3IgbWVzc2FnZSBpZiBzcGVjaWZpZWQgYXMgYSBidWZmZXI6XG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmxlbmd0aCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgZGVzY3JpcHRvciA9IGV4cG9ydHMuRGVzY3JpcHRvclByb3RvLmRlY29kZShkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5udW1iZXIgIT09IFwibnVtYmVyXCIpXG4gICAgICAgIHRocm93IEVycm9yKFwibWlzc2luZyBmaWVsZCBpZFwiKTtcblxuICAgIC8vIFJld2lyZSBmaWVsZCB0eXBlXG4gICAgdmFyIGZpZWxkVHlwZTtcbiAgICBpZiAoZGVzY3JpcHRvci50eXBlTmFtZSAmJiBkZXNjcmlwdG9yLnR5cGVOYW1lLmxlbmd0aClcbiAgICAgICAgZmllbGRUeXBlID0gZGVzY3JpcHRvci50eXBlTmFtZTtcbiAgICBlbHNlXG4gICAgICAgIGZpZWxkVHlwZSA9IGZyb21EZXNjcmlwdG9yVHlwZShkZXNjcmlwdG9yLnR5cGUpO1xuXG4gICAgLy8gUmV3aXJlIGZpZWxkIHJ1bGVcbiAgICB2YXIgZmllbGRSdWxlO1xuICAgIHN3aXRjaCAoZGVzY3JpcHRvci5sYWJlbCkge1xuICAgICAgICAvLyAwIGlzIHJlc2VydmVkIGZvciBlcnJvcnNcbiAgICAgICAgY2FzZSAxOiBmaWVsZFJ1bGUgPSB1bmRlZmluZWQ7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGZpZWxkUnVsZSA9IFwicmVxdWlyZWRcIjsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogZmllbGRSdWxlID0gXCJyZXBlYXRlZFwiOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGxhYmVsOiBcIiArIGRlc2NyaXB0b3IubGFiZWwpO1xuICAgIH1cblxuXHR2YXIgZXh0ZW5kZWUgPSBkZXNjcmlwdG9yLmV4dGVuZGVlO1xuXHRpZiAoZGVzY3JpcHRvci5leHRlbmRlZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZXh0ZW5kZWUgPSBleHRlbmRlZS5sZW5ndGggPyBleHRlbmRlZSA6IHVuZGVmaW5lZDtcblx0fVxuICAgIHZhciBmaWVsZCA9IG5ldyBGaWVsZChcbiAgICAgICAgZGVzY3JpcHRvci5uYW1lLmxlbmd0aCA/IGRlc2NyaXB0b3IubmFtZSA6IFwiZmllbGRcIiArIGRlc2NyaXB0b3IubnVtYmVyLFxuICAgICAgICBkZXNjcmlwdG9yLm51bWJlcixcbiAgICAgICAgZmllbGRUeXBlLFxuICAgICAgICBmaWVsZFJ1bGUsXG4gICAgICAgIGV4dGVuZGVlXG4gICAgKTtcblxuICAgIGlmICghbmVzdGVkKVxuICAgICAgICBmaWVsZC5fZWRpdGlvbiA9IGVkaXRpb247XG5cbiAgICBmaWVsZC5vcHRpb25zID0gZnJvbURlc2NyaXB0b3JPcHRpb25zKGRlc2NyaXB0b3Iub3B0aW9ucywgZXhwb3J0cy5GaWVsZE9wdGlvbnMpO1xuICAgIGlmIChkZXNjcmlwdG9yLnByb3RvM19vcHRpb25hbClcbiAgICAgICAgZmllbGQub3B0aW9ucy5wcm90bzNfb3B0aW9uYWwgPSB0cnVlO1xuXG4gICAgaWYgKGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlICYmIGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gZGVzY3JpcHRvci5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHN3aXRjaCAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwidHJ1ZVwiOiBjYXNlIFwiVFJVRVwiOlxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZmFsc2VcIjogY2FzZSBcIkZBTFNFXCI6XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IG51bWJlclJlLmV4ZWMoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmFkaXhcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5zZXRPcHRpb24oXCJkZWZhdWx0XCIsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhY2thYmxlRGVzY3JpcHRvclR5cGUoZGVzY3JpcHRvci50eXBlKSkge1xuICAgICAgICBpZiAoZWRpdGlvbiA9PT0gXCJwcm90bzNcIikgeyAvLyBkZWZhdWx0cyB0byBwYWNrZWQ9dHJ1ZSAoaW50ZXJuYWwgcHJlc2V0IGlzIHBhY2tlZD10cnVlKVxuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iub3B0aW9ucyAmJiAhZGVzY3JpcHRvci5vcHRpb25zLnBhY2tlZClcbiAgICAgICAgICAgICAgICBmaWVsZC5zZXRPcHRpb24oXCJwYWNrZWRcIiwgZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKCghZWRpdGlvbiB8fCBlZGl0aW9uID09PSBcInByb3RvMlwiKSAmJiBkZXNjcmlwdG9yLm9wdGlvbnMgJiYgZGVzY3JpcHRvci5vcHRpb25zLnBhY2tlZCkgLy8gZGVmYXVsdHMgdG8gcGFja2VkPWZhbHNlXG4gICAgICAgICAgICBmaWVsZC5zZXRPcHRpb24oXCJwYWNrZWRcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpZWxkIHRvIGEgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtNZXNzYWdlPElGaWVsZERlc2NyaXB0b3JQcm90bz59IERlc2NyaXB0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZWRpdGlvbj1cInByb3RvMlwiXSBUaGUgc3ludGF4IG9yIGVkaXRpb24gdG8gdXNlXG4gKi9cbkZpZWxkLnByb3RvdHlwZS50b0Rlc2NyaXB0b3IgPSBmdW5jdGlvbiB0b0Rlc2NyaXB0b3IoZWRpdGlvbikge1xuICAgIHZhciBkZXNjcmlwdG9yID0gZXhwb3J0cy5GaWVsZERlc2NyaXB0b3JQcm90by5jcmVhdGUoeyBuYW1lOiB0aGlzLm5hbWUsIG51bWJlcjogdGhpcy5pZCB9KTtcblxuICAgIGlmICh0aGlzLm1hcCkge1xuXG4gICAgICAgIGRlc2NyaXB0b3IudHlwZSA9IDExOyAvLyBtZXNzYWdlXG4gICAgICAgIGRlc2NyaXB0b3IudHlwZU5hbWUgPSAkcHJvdG9idWYudXRpbC51Y0ZpcnN0KHRoaXMubmFtZSk7IC8vIGZpZWxkTmFtZSAtPiBGaWVsZE5hbWVFbnRyeSAoYnVpbHQgaW4gVHlwZSN0b0Rlc2NyaXB0b3IpXG4gICAgICAgIGRlc2NyaXB0b3IubGFiZWwgPSAzOyAvLyByZXBlYXRlZFxuXG4gICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBSZXdpcmUgZmllbGQgdHlwZVxuICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IudHlwZSA9IHRvRGVzY3JpcHRvclR5cGUodGhpcy50eXBlLCB0aGlzLnJlc29sdmUoKS5yZXNvbHZlZFR5cGUsIHRoaXMuZGVsaW1pdGVkKSkge1xuICAgICAgICAgICAgY2FzZSAxMDogLy8gZ3JvdXBcbiAgICAgICAgICAgIGNhc2UgMTE6IC8vIHR5cGVcbiAgICAgICAgICAgIGNhc2UgMTQ6IC8vIGVudW1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnR5cGVOYW1lID0gdGhpcy5yZXNvbHZlZFR5cGUgPyBzaG9ydG5hbWUodGhpcy5wYXJlbnQsIHRoaXMucmVzb2x2ZWRUeXBlKSA6IHRoaXMudHlwZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJld2lyZSBmaWVsZCBydWxlXG4gICAgICAgIGlmICh0aGlzLnJ1bGUgPT09IFwicmVwZWF0ZWRcIikge1xuICAgICAgICAgICAgZGVzY3JpcHRvci5sYWJlbCA9IDM7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXF1aXJlZCAmJiBlZGl0aW9uID09PSBcInByb3RvMlwiKSB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLmxhYmVsID0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IubGFiZWwgPSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGV4dGVuc2lvbiBmaWVsZFxuICAgIGRlc2NyaXB0b3IuZXh0ZW5kZWUgPSB0aGlzLmV4dGVuc2lvbkZpZWxkID8gdGhpcy5leHRlbnNpb25GaWVsZC5wYXJlbnQuZnVsbE5hbWUgOiB0aGlzLmV4dGVuZDtcblxuICAgIC8vIEhhbmRsZSBwYXJ0IG9mIG9uZW9mXG4gICAgaWYgKHRoaXMucGFydE9mKVxuICAgICAgICBpZiAoKGRlc2NyaXB0b3Iub25lb2ZJbmRleCA9IHRoaXMucGFyZW50Lm9uZW9mc0FycmF5LmluZGV4T2YodGhpcy5wYXJ0T2YpKSA8IDApXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIm1pc3Npbmcgb25lb2ZcIik7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICAgIGRlc2NyaXB0b3Iub3B0aW9ucyA9IHRvRGVzY3JpcHRvck9wdGlvbnModGhpcy5vcHRpb25zLCBleHBvcnRzLkZpZWxkT3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbXCJkZWZhdWx0XCJdICE9IG51bGwpXG4gICAgICAgICAgICBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZSA9IFN0cmluZyh0aGlzLm9wdGlvbnNbXCJkZWZhdWx0XCJdKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcm90bzNfb3B0aW9uYWwpXG4gICAgICAgICAgICBkZXNjcmlwdG9yLnByb3RvM19vcHRpb25hbCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGVkaXRpb24gPT09IFwicHJvdG8zXCIpIHsgLy8gZGVmYXVsdHMgdG8gcGFja2VkPXRydWVcbiAgICAgICAgaWYgKCF0aGlzLnBhY2tlZClcbiAgICAgICAgICAgIChkZXNjcmlwdG9yLm9wdGlvbnMgfHwgKGRlc2NyaXB0b3Iub3B0aW9ucyA9IGV4cG9ydHMuRmllbGRPcHRpb25zLmNyZWF0ZSgpKSkucGFja2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICgoIWVkaXRpb24gfHwgZWRpdGlvbiA9PT0gXCJwcm90bzJcIikgJiYgdGhpcy5wYWNrZWQpIC8vIGRlZmF1bHRzIHRvIHBhY2tlZD1mYWxzZVxuICAgICAgICAoZGVzY3JpcHRvci5vcHRpb25zIHx8IChkZXNjcmlwdG9yLm9wdGlvbnMgPSBleHBvcnRzLkZpZWxkT3B0aW9ucy5jcmVhdGUoKSkpLnBhY2tlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbi8vIC0tLSBFbnVtIC0tLVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYW4gRW51bURlc2NyaXB0b3JQcm90byBtZXNzYWdlLlxuICogQGludGVyZmFjZSBJRW51bURlc2NyaXB0b3JQcm90b1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSBFbnVtIG5hbWVcbiAqIEBwcm9wZXJ0eSB7SUVudW1WYWx1ZURlc2NyaXB0b3JQcm90b1tdfSBbdmFsdWVdIEVudW0gdmFsdWVzXG4gKiBAcHJvcGVydHkge0lFbnVtT3B0aW9uc30gW29wdGlvbnNdIEVudW0gb3B0aW9uc1xuICovXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8gbWVzc2FnZS5cbiAqIEBpbnRlcmZhY2UgSUVudW1WYWx1ZURlc2NyaXB0b3JQcm90b1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSBOYW1lXG4gKiBAcHJvcGVydHkge251bWJlcn0gW251bWJlcl0gVmFsdWVcbiAqIEBwcm9wZXJ0eSB7Kn0gW29wdGlvbnNdIE5vdCBzdXBwb3J0ZWRcbiAqL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYW4gRW51bU9wdGlvbnMgbWVzc2FnZS5cbiAqIEBpbnRlcmZhY2UgSUVudW1PcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthbGxvd0FsaWFzXSBXaGV0aGVyIGFsaWFzZXMgYXJlIGFsbG93ZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlcHJlY2F0ZWRdXG4gKi9cblxudmFyIHVubmFtZWRFbnVtSW5kZXggPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZW51bSBmcm9tIGEgZGVzY3JpcHRvci5cbiAqXG4gKiBXYXJuaW5nOiB0aGlzIGlzIG5vdCBzYWZlIHRvIHVzZSB3aXRoIGVkaXRpb25zIHByb3Rvcywgc2luY2UgaXQgZGlzY2FyZHMgcmVsZXZhbnQgZmlsZSBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7SUVudW1EZXNjcmlwdG9yUHJvdG98UmVhZGVyfFVpbnQ4QXJyYXl9IGRlc2NyaXB0b3IgRGVzY3JpcHRvclxuICogQHBhcmFtIHtzdHJpbmd9IFtlZGl0aW9uPVwicHJvdG8yXCJdIFRoZSBzeW50YXggb3IgZWRpdGlvbiB0byB1c2VcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW25lc3RlZD1mYWxzZV0gV2hldGhlciBvciBub3QgdGhpcyBpcyBhIHRvcC1sZXZlbCBvYmplY3RcbiAqIEByZXR1cm5zIHtFbnVtfSBFbnVtIGluc3RhbmNlXG4gKi9cbkVudW0uZnJvbURlc2NyaXB0b3IgPSBmdW5jdGlvbiBmcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yLCBlZGl0aW9uLCBuZXN0ZWQpIHtcblxuICAgIC8vIERlY29kZSB0aGUgZGVzY3JpcHRvciBtZXNzYWdlIGlmIHNwZWNpZmllZCBhcyBhIGJ1ZmZlcjpcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IubGVuZ3RoID09PSBcIm51bWJlclwiKVxuICAgICAgICBkZXNjcmlwdG9yID0gZXhwb3J0cy5FbnVtRGVzY3JpcHRvclByb3RvLmRlY29kZShkZXNjcmlwdG9yKTtcblxuICAgIC8vIENvbnN0cnVjdCB2YWx1ZXMgb2JqZWN0XG4gICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc2NyaXB0b3IudmFsdWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBuYW1lICA9IGRlc2NyaXB0b3IudmFsdWVbaV0ubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWVbaV0ubnVtYmVyIHx8IDA7XG4gICAgICAgICAgICB2YWx1ZXNbbmFtZSAmJiBuYW1lLmxlbmd0aCA/IG5hbWUgOiBcIk5BTUVcIiArIHZhbHVlXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICB2YXIgZW5tID0gbmV3IEVudW0oXG4gICAgICAgIGRlc2NyaXB0b3IubmFtZSAmJiBkZXNjcmlwdG9yLm5hbWUubGVuZ3RoID8gZGVzY3JpcHRvci5uYW1lIDogXCJFbnVtXCIgKyB1bm5hbWVkRW51bUluZGV4KyssXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZnJvbURlc2NyaXB0b3JPcHRpb25zKGRlc2NyaXB0b3Iub3B0aW9ucywgZXhwb3J0cy5FbnVtT3B0aW9ucylcbiAgICApO1xuXG4gICAgaWYgKCFuZXN0ZWQpXG4gICAgICAgIGVubS5fZWRpdGlvbiA9IGVkaXRpb247XG5cbiAgICByZXR1cm4gZW5tO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlbnVtIHRvIGEgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtNZXNzYWdlPElFbnVtRGVzY3JpcHRvclByb3RvPn0gRGVzY3JpcHRvclxuICovXG5FbnVtLnByb3RvdHlwZS50b0Rlc2NyaXB0b3IgPSBmdW5jdGlvbiB0b0Rlc2NyaXB0b3IoKSB7XG5cbiAgICAvLyBWYWx1ZXNcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGtzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpOyBpIDwga3MubGVuZ3RoOyArK2kpXG4gICAgICAgIHZhbHVlcy5wdXNoKGV4cG9ydHMuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmNyZWF0ZSh7IG5hbWU6IGtzW2ldLCBudW1iZXI6IHRoaXMudmFsdWVzW2tzW2ldXSB9KSk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5FbnVtRGVzY3JpcHRvclByb3RvLmNyZWF0ZSh7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlcyxcbiAgICAgICAgb3B0aW9uczogdG9EZXNjcmlwdG9yT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGV4cG9ydHMuRW51bU9wdGlvbnMpXG4gICAgfSk7XG59O1xuXG4vLyAtLS0gT25lT2YgLS0tXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIE9uZW9mRGVzY3JpcHRvclByb3RvIG1lc3NhZ2UuXG4gKiBAaW50ZXJmYWNlIElPbmVvZkRlc2NyaXB0b3JQcm90b1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSBPbmVvZiBuYW1lXG4gKiBAcHJvcGVydHkgeyp9IFtvcHRpb25zXSBOb3Qgc3VwcG9ydGVkXG4gKi9cblxudmFyIHVubmFtZWRPbmVvZkluZGV4ID0gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgb25lb2YgZnJvbSBhIGRlc2NyaXB0b3IuXG4gKlxuICogV2FybmluZzogdGhpcyBpcyBub3Qgc2FmZSB0byB1c2Ugd2l0aCBlZGl0aW9ucyBwcm90b3MsIHNpbmNlIGl0IGRpc2NhcmRzIHJlbGV2YW50IGZpbGUgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0ge0lPbmVvZkRlc2NyaXB0b3JQcm90b3xSZWFkZXJ8VWludDhBcnJheX0gZGVzY3JpcHRvciBEZXNjcmlwdG9yXG4gKiBAcmV0dXJucyB7T25lT2Z9IE9uZU9mIGluc3RhbmNlXG4gKi9cbk9uZU9mLmZyb21EZXNjcmlwdG9yID0gZnVuY3Rpb24gZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcikge1xuXG4gICAgLy8gRGVjb2RlIHRoZSBkZXNjcmlwdG9yIG1lc3NhZ2UgaWYgc3BlY2lmaWVkIGFzIGEgYnVmZmVyOlxuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5sZW5ndGggPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGRlc2NyaXB0b3IgPSBleHBvcnRzLk9uZW9mRGVzY3JpcHRvclByb3RvLmRlY29kZShkZXNjcmlwdG9yKTtcblxuICAgIHJldHVybiBuZXcgT25lT2YoXG4gICAgICAgIC8vIHVubmFtZWRPbmVPZkluZGV4IGlzIGdsb2JhbCwgbm90IHBlciB0eXBlLCBiZWNhdXNlIHdlIGhhdmUgbm8gcmVmIHRvIGEgdHlwZSBoZXJlXG4gICAgICAgIGRlc2NyaXB0b3IubmFtZSAmJiBkZXNjcmlwdG9yLm5hbWUubGVuZ3RoID8gZGVzY3JpcHRvci5uYW1lIDogXCJvbmVvZlwiICsgdW5uYW1lZE9uZW9mSW5kZXgrK1xuICAgICAgICAvLyBmcm9tRGVzY3JpcHRvck9wdGlvbnMoZGVzY3JpcHRvci5vcHRpb25zLCBleHBvcnRzLk9uZW9mT3B0aW9ucykgLSBvbmx5IHVuaW50ZXJwcmV0ZWRfb3B0aW9uXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBvbmVvZiB0byBhIGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7TWVzc2FnZTxJT25lb2ZEZXNjcmlwdG9yUHJvdG8+fSBEZXNjcmlwdG9yXG4gKi9cbk9uZU9mLnByb3RvdHlwZS50b0Rlc2NyaXB0b3IgPSBmdW5jdGlvbiB0b0Rlc2NyaXB0b3IoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuT25lb2ZEZXNjcmlwdG9yUHJvdG8uY3JlYXRlKHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lXG4gICAgICAgIC8vIG9wdGlvbnM6IHRvRGVzY3JpcHRvck9wdGlvbnModGhpcy5vcHRpb25zLCBleHBvcnRzLk9uZW9mT3B0aW9ucykgLSBvbmx5IHVuaW50ZXJwcmV0ZWRfb3B0aW9uXG4gICAgfSk7XG59O1xuXG4vLyAtLS0gU2VydmljZSAtLS1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGEgU2VydmljZURlc2NyaXB0b3JQcm90byBtZXNzYWdlLlxuICogQGludGVyZmFjZSBJU2VydmljZURlc2NyaXB0b3JQcm90b1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSBTZXJ2aWNlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7SU1ldGhvZERlc2NyaXB0b3JQcm90b1tdfSBbbWV0aG9kXSBNZXRob2RzXG4gKiBAcHJvcGVydHkge0lTZXJ2aWNlT3B0aW9uc30gW29wdGlvbnNdIE9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBTZXJ2aWNlT3B0aW9ucyBtZXNzYWdlLlxuICogQGludGVyZmFjZSBJU2VydmljZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlcHJlY2F0ZWRdXG4gKi9cblxudmFyIHVubmFtZWRTZXJ2aWNlSW5kZXggPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXJ2aWNlIGZyb20gYSBkZXNjcmlwdG9yLlxuICpcbiAqIFdhcm5pbmc6IHRoaXMgaXMgbm90IHNhZmUgdG8gdXNlIHdpdGggZWRpdGlvbnMgcHJvdG9zLCBzaW5jZSBpdCBkaXNjYXJkcyByZWxldmFudCBmaWxlIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHtJU2VydmljZURlc2NyaXB0b3JQcm90b3xSZWFkZXJ8VWludDhBcnJheX0gZGVzY3JpcHRvciBEZXNjcmlwdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gW2VkaXRpb249XCJwcm90bzJcIl0gVGhlIHN5bnRheCBvciBlZGl0aW9uIHRvIHVzZVxuICogQHBhcmFtIHtib29sZWFufSBbbmVzdGVkPWZhbHNlXSBXaGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgdG9wLWxldmVsIG9iamVjdFxuICogQHJldHVybnMge1NlcnZpY2V9IFNlcnZpY2UgaW5zdGFuY2VcbiAqL1xuU2VydmljZS5mcm9tRGVzY3JpcHRvciA9IGZ1bmN0aW9uIGZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGVkaXRpb24sIG5lc3RlZCkge1xuXG4gICAgLy8gRGVjb2RlIHRoZSBkZXNjcmlwdG9yIG1lc3NhZ2UgaWYgc3BlY2lmaWVkIGFzIGEgYnVmZmVyOlxuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5sZW5ndGggPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGRlc2NyaXB0b3IgPSBleHBvcnRzLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKGRlc2NyaXB0b3IpO1xuXG4gICAgdmFyIHNlcnZpY2UgPSBuZXcgU2VydmljZShkZXNjcmlwdG9yLm5hbWUgJiYgZGVzY3JpcHRvci5uYW1lLmxlbmd0aCA/IGRlc2NyaXB0b3IubmFtZSA6IFwiU2VydmljZVwiICsgdW5uYW1lZFNlcnZpY2VJbmRleCsrLCBmcm9tRGVzY3JpcHRvck9wdGlvbnMoZGVzY3JpcHRvci5vcHRpb25zLCBleHBvcnRzLlNlcnZpY2VPcHRpb25zKSk7XG4gICAgaWYgKCFuZXN0ZWQpXG4gICAgICAgIHNlcnZpY2UuX2VkaXRpb24gPSBlZGl0aW9uO1xuICAgIGlmIChkZXNjcmlwdG9yLm1ldGhvZClcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLm1ldGhvZC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIHNlcnZpY2UuYWRkKE1ldGhvZC5mcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yLm1ldGhvZFtpXSkpO1xuXG4gICAgcmV0dXJuIHNlcnZpY2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc2VydmljZSB0byBhIGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJucyB7TWVzc2FnZTxJU2VydmljZURlc2NyaXB0b3JQcm90bz59IERlc2NyaXB0b3JcbiAqL1xuU2VydmljZS5wcm90b3R5cGUudG9EZXNjcmlwdG9yID0gZnVuY3Rpb24gdG9EZXNjcmlwdG9yKCkge1xuXG4gICAgLy8gTWV0aG9kc1xuICAgIHZhciBtZXRob2RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1ldGhvZHNBcnJheS5sZW5ndGg7ICsraSlcbiAgICAgICAgbWV0aG9kcy5wdXNoKHRoaXMuX21ldGhvZHNBcnJheVtpXS50b0Rlc2NyaXB0b3IoKSk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5TZXJ2aWNlRGVzY3JpcHRvclByb3RvLmNyZWF0ZSh7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgbWV0aG9kOiBtZXRob2RzLFxuICAgICAgICBvcHRpb25zOiB0b0Rlc2NyaXB0b3JPcHRpb25zKHRoaXMub3B0aW9ucywgZXhwb3J0cy5TZXJ2aWNlT3B0aW9ucylcbiAgICB9KTtcbn07XG5cbi8vIC0tLSBNZXRob2QgLS0tXG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIE1ldGhvZERlc2NyaXB0b3JQcm90byBtZXNzYWdlLlxuICogQGludGVyZmFjZSBJTWV0aG9kRGVzY3JpcHRvclByb3RvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIE1ldGhvZCBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2lucHV0VHlwZV0gUmVxdWVzdCB0eXBlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbb3V0cHV0VHlwZV0gUmVzcG9uc2UgdHlwZSBuYW1lXG4gKiBAcHJvcGVydHkge0lNZXRob2RPcHRpb25zfSBbb3B0aW9uc10gTm90IHN1cHBvcnRlZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2xpZW50U3RyZWFtaW5nPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBzdHJlYW1lZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VydmVyU3RyZWFtaW5nPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgc3RyZWFtZWRcbiAqL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBNZXRob2RPcHRpb25zIG1lc3NhZ2UuXG4gKlxuICogV2FybmluZzogdGhpcyBpcyBub3Qgc2FmZSB0byB1c2Ugd2l0aCBlZGl0aW9ucyBwcm90b3MsIHNpbmNlIGl0IGRpc2NhcmRzIHJlbGV2YW50IGZpbGUgY29udGV4dC5cbiAqXG4gKiBAaW50ZXJmYWNlIElNZXRob2RPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZXByZWNhdGVkXVxuICovXG5cbnZhciB1bm5hbWVkTWV0aG9kSW5kZXggPSAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtZXRob2QgZnJvbSBhIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge0lNZXRob2REZXNjcmlwdG9yUHJvdG98UmVhZGVyfFVpbnQ4QXJyYXl9IGRlc2NyaXB0b3IgRGVzY3JpcHRvclxuICogQHJldHVybnMge01ldGhvZH0gUmVmbGVjdGVkIG1ldGhvZCBpbnN0YW5jZVxuICovXG5NZXRob2QuZnJvbURlc2NyaXB0b3IgPSBmdW5jdGlvbiBmcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yKSB7XG5cbiAgICAvLyBEZWNvZGUgdGhlIGRlc2NyaXB0b3IgbWVzc2FnZSBpZiBzcGVjaWZpZWQgYXMgYSBidWZmZXI6XG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmxlbmd0aCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgZGVzY3JpcHRvciA9IGV4cG9ydHMuTWV0aG9kRGVzY3JpcHRvclByb3RvLmRlY29kZShkZXNjcmlwdG9yKTtcblxuICAgIHJldHVybiBuZXcgTWV0aG9kKFxuICAgICAgICAvLyB1bm5hbWVkTWV0aG9kSW5kZXggaXMgZ2xvYmFsLCBub3QgcGVyIHNlcnZpY2UsIGJlY2F1c2Ugd2UgaGF2ZSBubyByZWYgdG8gYSBzZXJ2aWNlIGhlcmVcbiAgICAgICAgZGVzY3JpcHRvci5uYW1lICYmIGRlc2NyaXB0b3IubmFtZS5sZW5ndGggPyBkZXNjcmlwdG9yLm5hbWUgOiBcIk1ldGhvZFwiICsgdW5uYW1lZE1ldGhvZEluZGV4KyssXG4gICAgICAgIFwicnBjXCIsXG4gICAgICAgIGRlc2NyaXB0b3IuaW5wdXRUeXBlLFxuICAgICAgICBkZXNjcmlwdG9yLm91dHB1dFR5cGUsXG4gICAgICAgIEJvb2xlYW4oZGVzY3JpcHRvci5jbGllbnRTdHJlYW1pbmcpLFxuICAgICAgICBCb29sZWFuKGRlc2NyaXB0b3Iuc2VydmVyU3RyZWFtaW5nKSxcbiAgICAgICAgZnJvbURlc2NyaXB0b3JPcHRpb25zKGRlc2NyaXB0b3Iub3B0aW9ucywgZXhwb3J0cy5NZXRob2RPcHRpb25zKVxuICAgICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgbWV0aG9kIHRvIGEgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHtNZXNzYWdlPElNZXRob2REZXNjcmlwdG9yUHJvdG8+fSBEZXNjcmlwdG9yXG4gKi9cbk1ldGhvZC5wcm90b3R5cGUudG9EZXNjcmlwdG9yID0gZnVuY3Rpb24gdG9EZXNjcmlwdG9yKCkge1xuICAgIHJldHVybiBleHBvcnRzLk1ldGhvZERlc2NyaXB0b3JQcm90by5jcmVhdGUoe1xuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGlucHV0VHlwZTogdGhpcy5yZXNvbHZlZFJlcXVlc3RUeXBlID8gdGhpcy5yZXNvbHZlZFJlcXVlc3RUeXBlLmZ1bGxOYW1lIDogdGhpcy5yZXF1ZXN0VHlwZSxcbiAgICAgICAgb3V0cHV0VHlwZTogdGhpcy5yZXNvbHZlZFJlc3BvbnNlVHlwZSA/IHRoaXMucmVzb2x2ZWRSZXNwb25zZVR5cGUuZnVsbE5hbWUgOiB0aGlzLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgY2xpZW50U3RyZWFtaW5nOiB0aGlzLnJlcXVlc3RTdHJlYW0sXG4gICAgICAgIHNlcnZlclN0cmVhbWluZzogdGhpcy5yZXNwb25zZVN0cmVhbSxcbiAgICAgICAgb3B0aW9uczogdG9EZXNjcmlwdG9yT3B0aW9ucyh0aGlzLm9wdGlvbnMsIGV4cG9ydHMuTWV0aG9kT3B0aW9ucylcbiAgICB9KTtcbn07XG5cbi8vIC0tLSB1dGlsaXR5IC0tLVxuXG4vLyBDb252ZXJ0cyBhIGRlc2NyaXB0b3IgdHlwZSB0byBhIHByb3RvYnVmLmpzIGJhc2ljIHR5cGVcbmZ1bmN0aW9uIGZyb21EZXNjcmlwdG9yVHlwZSh0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIC8vIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9yc1xuICAgICAgICBjYXNlIDE6IHJldHVybiBcImRvdWJsZVwiO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBcImZsb2F0XCI7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIFwiaW50NjRcIjtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gXCJ1aW50NjRcIjtcbiAgICAgICAgY2FzZSA1OiByZXR1cm4gXCJpbnQzMlwiO1xuICAgICAgICBjYXNlIDY6IHJldHVybiBcImZpeGVkNjRcIjtcbiAgICAgICAgY2FzZSA3OiByZXR1cm4gXCJmaXhlZDMyXCI7XG4gICAgICAgIGNhc2UgODogcmV0dXJuIFwiYm9vbFwiO1xuICAgICAgICBjYXNlIDk6IHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgICBjYXNlIDEyOiByZXR1cm4gXCJieXRlc1wiO1xuICAgICAgICBjYXNlIDEzOiByZXR1cm4gXCJ1aW50MzJcIjtcbiAgICAgICAgY2FzZSAxNTogcmV0dXJuIFwic2ZpeGVkMzJcIjtcbiAgICAgICAgY2FzZSAxNjogcmV0dXJuIFwic2ZpeGVkNjRcIjtcbiAgICAgICAgY2FzZSAxNzogcmV0dXJuIFwic2ludDMyXCI7XG4gICAgICAgIGNhc2UgMTg6IHJldHVybiBcInNpbnQ2NFwiO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0eXBlKTtcbn1cblxuLy8gVGVzdHMgaWYgYSBkZXNjcmlwdG9yIHR5cGUgaXMgcGFja2FibGVcbmZ1bmN0aW9uIHBhY2thYmxlRGVzY3JpcHRvclR5cGUodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIDE6IC8vIGRvdWJsZVxuICAgICAgICBjYXNlIDI6IC8vIGZsb2F0XG4gICAgICAgIGNhc2UgMzogLy8gaW50NjRcbiAgICAgICAgY2FzZSA0OiAvLyB1aW50NjRcbiAgICAgICAgY2FzZSA1OiAvLyBpbnQzMlxuICAgICAgICBjYXNlIDY6IC8vIGZpeGVkNjRcbiAgICAgICAgY2FzZSA3OiAvLyBmaXhlZDMyXG4gICAgICAgIGNhc2UgODogLy8gYm9vbFxuICAgICAgICBjYXNlIDEzOiAvLyB1aW50MzJcbiAgICAgICAgY2FzZSAxNDogLy8gZW51bSAoISlcbiAgICAgICAgY2FzZSAxNTogLy8gc2ZpeGVkMzJcbiAgICAgICAgY2FzZSAxNjogLy8gc2ZpeGVkNjRcbiAgICAgICAgY2FzZSAxNzogLy8gc2ludDMyXG4gICAgICAgIGNhc2UgMTg6IC8vIHNpbnQ2NFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQ29udmVydHMgYSBwcm90b2J1Zi5qcyBiYXNpYyB0eXBlIHRvIGEgZGVzY3JpcHRvciB0eXBlXG5mdW5jdGlvbiB0b0Rlc2NyaXB0b3JUeXBlKHR5cGUsIHJlc29sdmVkVHlwZSwgZGVsaW1pdGVkKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIC8vIDAgaXMgcmVzZXJ2ZWQgZm9yIGVycm9yc1xuICAgICAgICBjYXNlIFwiZG91YmxlXCI6IHJldHVybiAxO1xuICAgICAgICBjYXNlIFwiZmxvYXRcIjogcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgXCJpbnQ2NFwiOiByZXR1cm4gMztcbiAgICAgICAgY2FzZSBcInVpbnQ2NFwiOiByZXR1cm4gNDtcbiAgICAgICAgY2FzZSBcImludDMyXCI6IHJldHVybiA1O1xuICAgICAgICBjYXNlIFwiZml4ZWQ2NFwiOiByZXR1cm4gNjtcbiAgICAgICAgY2FzZSBcImZpeGVkMzJcIjogcmV0dXJuIDc7XG4gICAgICAgIGNhc2UgXCJib29sXCI6IHJldHVybiA4O1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6IHJldHVybiA5O1xuICAgICAgICBjYXNlIFwiYnl0ZXNcIjogcmV0dXJuIDEyO1xuICAgICAgICBjYXNlIFwidWludDMyXCI6IHJldHVybiAxMztcbiAgICAgICAgY2FzZSBcInNmaXhlZDMyXCI6IHJldHVybiAxNTtcbiAgICAgICAgY2FzZSBcInNmaXhlZDY0XCI6IHJldHVybiAxNjtcbiAgICAgICAgY2FzZSBcInNpbnQzMlwiOiByZXR1cm4gMTc7XG4gICAgICAgIGNhc2UgXCJzaW50NjRcIjogcmV0dXJuIDE4O1xuICAgIH1cbiAgICBpZiAocmVzb2x2ZWRUeXBlIGluc3RhbmNlb2YgRW51bSlcbiAgICAgICAgcmV0dXJuIDE0O1xuICAgIGlmIChyZXNvbHZlZFR5cGUgaW5zdGFuY2VvZiBUeXBlKVxuICAgICAgICByZXR1cm4gZGVsaW1pdGVkID8gMTAgOiAxMTtcbiAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0eXBlKTtcbn1cblxuZnVuY3Rpb24gZnJvbURlc2NyaXB0b3JPcHRpb25zUmVjdXJzaXZlKG9iaiwgdHlwZSkge1xuICAgIHZhciB2YWwgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgZmllbGQsIGtleTsgaSA8IHR5cGUuZmllbGRzQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKChrZXkgPSAoZmllbGQgPSB0eXBlLl9maWVsZHNBcnJheVtpXSkubmFtZSkgPT09IFwidW5pbnRlcnByZXRlZE9wdGlvblwiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBjb250aW51ZTtcblxuICAgICAgICB2YXIgbmV3S2V5ID0gdW5kZXJTY29yZShrZXkpO1xuICAgICAgICBpZiAoZmllbGQucmVzb2x2ZWRUeXBlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICAgICAgdmFsW25ld0tleV0gPSBmcm9tRGVzY3JpcHRvck9wdGlvbnNSZWN1cnNpdmUob2JqW2tleV0sIGZpZWxkLnJlc29sdmVkVHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZihmaWVsZC5yZXNvbHZlZFR5cGUgaW5zdGFuY2VvZiBFbnVtKSB7XG4gICAgICAgICAgICB2YWxbbmV3S2V5XSA9IGZpZWxkLnJlc29sdmVkVHlwZS52YWx1ZXNCeUlkW29ialtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbFtuZXdLZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLy8gQ29udmVydHMgZGVzY3JpcHRvciBvcHRpb25zIHRvIGFuIG9wdGlvbnMgb2JqZWN0XG5mdW5jdGlvbiBmcm9tRGVzY3JpcHRvck9wdGlvbnMob3B0aW9ucywgdHlwZSkge1xuICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZnJvbURlc2NyaXB0b3JPcHRpb25zUmVjdXJzaXZlKHR5cGUudG9PYmplY3Qob3B0aW9ucyksIHR5cGUpO1xufVxuXG5mdW5jdGlvbiB0b0Rlc2NyaXB0b3JPcHRpb25zUmVjdXJzaXZlKG9iaiwgdHlwZSkge1xuICAgIHZhciB2YWwgPSB7fTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3S2V5ID0gJHByb3RvYnVmLnV0aWwuY2FtZWxDYXNlKGtleSk7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUuZmllbGRzLCBuZXdLZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFyIGZpZWxkID0gdHlwZS5maWVsZHNbbmV3S2V5XTtcbiAgICAgICAgaWYgKGZpZWxkLnJlc29sdmVkVHlwZSBpbnN0YW5jZW9mIFR5cGUpIHtcbiAgICAgICAgICAgIHZhbFtuZXdLZXldID0gdG9EZXNjcmlwdG9yT3B0aW9uc1JlY3Vyc2l2ZShvYmpba2V5XSwgZmllbGQucmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbFtuZXdLZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbFtuZXdLZXldKSkge1xuICAgICAgICAgICAgdmFsW25ld0tleV0gPSBbdmFsW25ld0tleV1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8vIENvbnZlcnRzIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGRlc2NyaXB0b3Igb3B0aW9uc1xuZnVuY3Rpb24gdG9EZXNjcmlwdG9yT3B0aW9ucyhvcHRpb25zLCB0eXBlKSB7XG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0eXBlLmZyb21PYmplY3QodG9EZXNjcmlwdG9yT3B0aW9uc1JlY3Vyc2l2ZShvcHRpb25zLCB0eXBlKSk7XG59XG5cbi8vIENhbGN1bGF0ZXMgdGhlIHNob3J0ZXN0IHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYC5cbmZ1bmN0aW9uIHNob3J0bmFtZShmcm9tLCB0bykge1xuICAgIHZhciBmcm9tUGF0aCA9IGZyb20uZnVsbE5hbWUuc3BsaXQoXCIuXCIpLFxuICAgICAgICB0b1BhdGggPSB0by5mdWxsTmFtZS5zcGxpdChcIi5cIiksXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgayA9IHRvUGF0aC5sZW5ndGggLSAxO1xuICAgIGlmICghKGZyb20gaW5zdGFuY2VvZiBSb290KSAmJiB0byBpbnN0YW5jZW9mIE5hbWVzcGFjZSlcbiAgICAgICAgd2hpbGUgKGkgPCBmcm9tUGF0aC5sZW5ndGggJiYgaiA8IGsgJiYgZnJvbVBhdGhbaV0gPT09IHRvUGF0aFtqXSkge1xuICAgICAgICAgICAgdmFyIG90aGVyID0gdG8ubG9va3VwKGZyb21QYXRoW2krK10sIHRydWUpO1xuICAgICAgICAgICAgaWYgKG90aGVyICE9PSBudWxsICYmIG90aGVyICE9PSB0bylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgIGVsc2VcbiAgICAgICAgZm9yICg7IGkgPCBmcm9tUGF0aC5sZW5ndGggJiYgaiA8IGsgJiYgZnJvbVBhdGhbaV0gPT09IHRvUGF0aFtqXTsgKytpLCArK2opO1xuICAgIHJldHVybiB0b1BhdGguc2xpY2Uoaikuam9pbihcIi5cIik7XG59XG5cbi8vIGNvcGllZCBoZXJlIGZyb20gY2xpL3RhcmdldHMvcHJvdG8uanNcbmZ1bmN0aW9uIHVuZGVyU2NvcmUoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwxKVxuICAgICAgICAgKyBzdHIuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgICAgICAucmVwbGFjZSgvKFtBLVpdKSg/PVthLXpdfCQpL2csIGZ1bmN0aW9uKCQwLCAkMSkgeyByZXR1cm4gXCJfXCIgKyAkMS50b0xvd2VyQ2FzZSgpOyB9KTtcbn1cblxuZnVuY3Rpb24gZWRpdGlvbkZyb21EZXNjcmlwdG9yKGZpbGVEZXNjcmlwdG9yKSB7XG4gICAgaWYgKGZpbGVEZXNjcmlwdG9yLnN5bnRheCA9PT0gXCJlZGl0aW9uc1wiKSB7XG4gICAgICAgIHN3aXRjaChmaWxlRGVzY3JpcHRvci5lZGl0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIGV4cG9ydHMuRWRpdGlvbi5FRElUSU9OXzIwMjM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiMjAyM1wiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBlZGl0aW9uIFwiICsgZmlsZURlc2NyaXB0b3IuZWRpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVEZXNjcmlwdG9yLnN5bnRheCA9PT0gXCJwcm90bzNcIikge1xuICAgICAgICByZXR1cm4gXCJwcm90bzNcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwicHJvdG8yXCI7XG59XG5cbmZ1bmN0aW9uIGVkaXRpb25Ub0Rlc2NyaXB0b3IoZWRpdGlvbiwgZmlsZURlc2NyaXB0b3IpIHtcbiAgICBpZiAoIWVkaXRpb24pIHJldHVybjtcbiAgICBpZiAoZWRpdGlvbiA9PT0gXCJwcm90bzJcIiB8fCBlZGl0aW9uID09PSBcInByb3RvM1wiKSB7XG4gICAgICAgIGZpbGVEZXNjcmlwdG9yLnN5bnRheCA9IGVkaXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZURlc2NyaXB0b3Iuc3ludGF4ID0gXCJlZGl0aW9uc1wiO1xuICAgICAgICBzd2l0Y2goZWRpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBcIjIwMjNcIjpcbiAgICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRvci5lZGl0aW9uID0gZXhwb3J0cy5FZGl0aW9uLkVESVRJT05fMjAyMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgZWRpdGlvbiBcIiArIGVkaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAtLS0gZXhwb3J0cyAtLS1cblxuLyoqXG4gKiBSZWZsZWN0ZWQgZmlsZSBkZXNjcmlwdG9yIHNldC5cbiAqIEBuYW1lIEZpbGVEZXNjcmlwdG9yU2V0XG4gKiBAdHlwZSB7VHlwZX1cbiAqIEBjb25zdFxuICogQHRzdHlwZSAkcHJvdG9idWYuVHlwZVxuICovXG5cbi8qKlxuICogUmVmbGVjdGVkIGZpbGUgZGVzY3JpcHRvciBwcm90by5cbiAqIEBuYW1lIEZpbGVEZXNjcmlwdG9yUHJvdG9cbiAqIEB0eXBlIHtUeXBlfVxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlXG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgZGVzY3JpcHRvciBwcm90by5cbiAqIEBuYW1lIERlc2NyaXB0b3JQcm90b1xuICogQHR5cGUge1R5cGV9XG4gKiBAcHJvcGVydHkge1R5cGV9IEV4dGVuc2lvblJhbmdlXG4gKiBAcHJvcGVydHkge1R5cGV9IFJlc2VydmVkUmFuZ2VcbiAqIEBjb25zdFxuICogQHRzdHlwZSAkcHJvdG9idWYuVHlwZSAmIHtcbiAqICAgICBFeHRlbnNpb25SYW5nZTogJHByb3RvYnVmLlR5cGUsXG4gKiAgICAgUmVzZXJ2ZWRSYW5nZTogJHByb3RvYnVmLlR5cGVcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJlZmxlY3RlZCBmaWVsZCBkZXNjcmlwdG9yIHByb3RvLlxuICogQG5hbWUgRmllbGREZXNjcmlwdG9yUHJvdG9cbiAqIEB0eXBlIHtUeXBlfVxuICogQHByb3BlcnR5IHtFbnVtfSBMYWJlbFxuICogQHByb3BlcnR5IHtFbnVtfSBUeXBlXG4gKiBAY29uc3RcbiAqIEB0c3R5cGUgJHByb3RvYnVmLlR5cGUgJiB7XG4gKiAgICAgTGFiZWw6ICRwcm90b2J1Zi5FbnVtLFxuICogICAgIFR5cGU6ICRwcm90b2J1Zi5FbnVtXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgb25lb2YgZGVzY3JpcHRvciBwcm90by5cbiAqIEBuYW1lIE9uZW9mRGVzY3JpcHRvclByb3RvXG4gKiBAdHlwZSB7VHlwZX1cbiAqIEBjb25zdFxuICogQHRzdHlwZSAkcHJvdG9idWYuVHlwZVxuICovXG5cbi8qKlxuICogUmVmbGVjdGVkIGVudW0gZGVzY3JpcHRvciBwcm90by5cbiAqIEBuYW1lIEVudW1EZXNjcmlwdG9yUHJvdG9cbiAqIEB0eXBlIHtUeXBlfVxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlXG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgc2VydmljZSBkZXNjcmlwdG9yIHByb3RvLlxuICogQG5hbWUgU2VydmljZURlc2NyaXB0b3JQcm90b1xuICogQHR5cGUge1R5cGV9XG4gKiBAY29uc3RcbiAqIEB0c3R5cGUgJHByb3RvYnVmLlR5cGVcbiAqL1xuXG4vKipcbiAqIFJlZmxlY3RlZCBlbnVtIHZhbHVlIGRlc2NyaXB0b3IgcHJvdG8uXG4gKiBAbmFtZSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG9cbiAqIEB0eXBlIHtUeXBlfVxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlXG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgbWV0aG9kIGRlc2NyaXB0b3IgcHJvdG8uXG4gKiBAbmFtZSBNZXRob2REZXNjcmlwdG9yUHJvdG9cbiAqIEB0eXBlIHtUeXBlfVxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlXG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgZmlsZSBvcHRpb25zLlxuICogQG5hbWUgRmlsZU9wdGlvbnNcbiAqIEB0eXBlIHtUeXBlfVxuICogQHByb3BlcnR5IHtFbnVtfSBPcHRpbWl6ZU1vZGVcbiAqIEBjb25zdFxuICogQHRzdHlwZSAkcHJvdG9idWYuVHlwZSAmIHtcbiAqICAgICBPcHRpbWl6ZU1vZGU6ICRwcm90b2J1Zi5FbnVtXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgbWVzc2FnZSBvcHRpb25zLlxuICogQG5hbWUgTWVzc2FnZU9wdGlvbnNcbiAqIEB0eXBlIHtUeXBlfVxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlXG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgZmllbGQgb3B0aW9ucy5cbiAqIEBuYW1lIEZpZWxkT3B0aW9uc1xuICogQHR5cGUge1R5cGV9XG4gKiBAcHJvcGVydHkge0VudW19IENUeXBlXG4gKiBAcHJvcGVydHkge0VudW19IEpTVHlwZVxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlICYge1xuICogICAgIENUeXBlOiAkcHJvdG9idWYuRW51bSxcbiAqICAgICBKU1R5cGU6ICRwcm90b2J1Zi5FbnVtXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgb25lb2Ygb3B0aW9ucy5cbiAqIEBuYW1lIE9uZW9mT3B0aW9uc1xuICogQHR5cGUge1R5cGV9XG4gKiBAY29uc3RcbiAqIEB0c3R5cGUgJHByb3RvYnVmLlR5cGVcbiAqL1xuXG4vKipcbiAqIFJlZmxlY3RlZCBlbnVtIG9wdGlvbnMuXG4gKiBAbmFtZSBFbnVtT3B0aW9uc1xuICogQHR5cGUge1R5cGV9XG4gKiBAY29uc3RcbiAqIEB0c3R5cGUgJHByb3RvYnVmLlR5cGVcbiAqL1xuXG4vKipcbiAqIFJlZmxlY3RlZCBlbnVtIHZhbHVlIG9wdGlvbnMuXG4gKiBAbmFtZSBFbnVtVmFsdWVPcHRpb25zXG4gKiBAdHlwZSB7VHlwZX1cbiAqIEBjb25zdFxuICogQHRzdHlwZSAkcHJvdG9idWYuVHlwZVxuICovXG5cbi8qKlxuICogUmVmbGVjdGVkIHNlcnZpY2Ugb3B0aW9ucy5cbiAqIEBuYW1lIFNlcnZpY2VPcHRpb25zXG4gKiBAdHlwZSB7VHlwZX1cbiAqIEBjb25zdFxuICogQHRzdHlwZSAkcHJvdG9idWYuVHlwZVxuICovXG5cbi8qKlxuICogUmVmbGVjdGVkIG1ldGhvZCBvcHRpb25zLlxuICogQG5hbWUgTWV0aG9kT3B0aW9uc1xuICogQHR5cGUge1R5cGV9XG4gKiBAY29uc3RcbiAqIEB0c3R5cGUgJHByb3RvYnVmLlR5cGVcbiAqL1xuXG4vKipcbiAqIFJlZmxlY3RlZCB1bmludGVycHJldGV0IG9wdGlvbi5cbiAqIEBuYW1lIFVuaW50ZXJwcmV0ZWRPcHRpb25cbiAqIEB0eXBlIHtUeXBlfVxuICogQHByb3BlcnR5IHtUeXBlfSBOYW1lUGFydFxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlICYge1xuICogICAgIE5hbWVQYXJ0OiAkcHJvdG9idWYuVHlwZVxuICogfVxuICovXG5cbi8qKlxuICogUmVmbGVjdGVkIHNvdXJjZSBjb2RlIGluZm8uXG4gKiBAbmFtZSBTb3VyY2VDb2RlSW5mb1xuICogQHR5cGUge1R5cGV9XG4gKiBAcHJvcGVydHkge1R5cGV9IExvY2F0aW9uXG4gKiBAY29uc3RcbiAqIEB0c3R5cGUgJHByb3RvYnVmLlR5cGUgJiB7XG4gKiAgICAgTG9jYXRpb246ICRwcm90b2J1Zi5UeXBlXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZWZsZWN0ZWQgZ2VuZXJhdGVkIGNvZGUgaW5mby5cbiAqIEBuYW1lIEdlbmVyYXRlZENvZGVJbmZvXG4gKiBAdHlwZSB7VHlwZX1cbiAqIEBwcm9wZXJ0eSB7VHlwZX0gQW5ub3RhdGlvblxuICogQGNvbnN0XG4gKiBAdHN0eXBlICRwcm90b2J1Zi5UeXBlICYge1xuICogICAgIEFubm90YXRpb246ICRwcm90b2J1Zi5UeXBlXG4gKiB9XG4gKi9cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hZGRDb21tb25Qcm90b3MgPSBleHBvcnRzLmxvYWRQcm90b3NXaXRoT3B0aW9uc1N5bmMgPSBleHBvcnRzLmxvYWRQcm90b3NXaXRoT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgUHJvdG9idWYgPSByZXF1aXJlKFwicHJvdG9idWZqc1wiKTtcbmZ1bmN0aW9uIGFkZEluY2x1ZGVQYXRoUmVzb2x2ZXIocm9vdCwgaW5jbHVkZVBhdGhzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxSZXNvbHZlUGF0aCA9IHJvb3QucmVzb2x2ZVBhdGg7XG4gICAgcm9vdC5yZXNvbHZlUGF0aCA9IChvcmlnaW4sIHRhcmdldCkgPT4ge1xuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgaW5jbHVkZVBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXJlY3RvcnksIHRhcmdldCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZzLmFjY2Vzc1N5bmMoZnVsbFBhdGgsIGZzLmNvbnN0YW50cy5SX09LKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVsbFBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhgJHt0YXJnZXR9IG5vdCBmb3VuZCBpbiBhbnkgb2YgdGhlIGluY2x1ZGUgcGF0aHMgJHtpbmNsdWRlUGF0aHN9YCk7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlc29sdmVQYXRoKG9yaWdpbiwgdGFyZ2V0KTtcbiAgICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gbG9hZFByb3Rvc1dpdGhPcHRpb25zKGZpbGVuYW1lLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBQcm90b2J1Zi5Sb290KCk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCEhb3B0aW9ucy5pbmNsdWRlRGlycykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlRGlycykpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1RoZSBpbmNsdWRlRGlycyBvcHRpb24gbXVzdCBiZSBhbiBhcnJheScpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbmNsdWRlUGF0aFJlc29sdmVyKHJvb3QsIG9wdGlvbnMuaW5jbHVkZURpcnMpO1xuICAgIH1cbiAgICBjb25zdCBsb2FkZWRSb290ID0gYXdhaXQgcm9vdC5sb2FkKGZpbGVuYW1lLCBvcHRpb25zKTtcbiAgICBsb2FkZWRSb290LnJlc29sdmVBbGwoKTtcbiAgICByZXR1cm4gbG9hZGVkUm9vdDtcbn1cbmV4cG9ydHMubG9hZFByb3Rvc1dpdGhPcHRpb25zID0gbG9hZFByb3Rvc1dpdGhPcHRpb25zO1xuZnVuY3Rpb24gbG9hZFByb3Rvc1dpdGhPcHRpb25zU3luYyhmaWxlbmFtZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgUHJvdG9idWYuUm9vdCgpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghIW9wdGlvbnMuaW5jbHVkZURpcnMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZURpcnMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNsdWRlRGlycyBvcHRpb24gbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEluY2x1ZGVQYXRoUmVzb2x2ZXIocm9vdCwgb3B0aW9ucy5pbmNsdWRlRGlycyk7XG4gICAgfVxuICAgIGNvbnN0IGxvYWRlZFJvb3QgPSByb290LmxvYWRTeW5jKGZpbGVuYW1lLCBvcHRpb25zKTtcbiAgICBsb2FkZWRSb290LnJlc29sdmVBbGwoKTtcbiAgICByZXR1cm4gbG9hZGVkUm9vdDtcbn1cbmV4cG9ydHMubG9hZFByb3Rvc1dpdGhPcHRpb25zU3luYyA9IGxvYWRQcm90b3NXaXRoT3B0aW9uc1N5bmM7XG4vKipcbiAqIExvYWQgR29vZ2xlJ3Mgd2VsbC1rbm93biBwcm90byBmaWxlcyB0aGF0IGFyZW4ndCBleHBvc2VkIGJ5IFByb3RvYnVmLmpzLlxuICovXG5mdW5jdGlvbiBhZGRDb21tb25Qcm90b3MoKSB7XG4gICAgLy8gUHJvdG9idWYuanMgZXhwb3NlczogYW55LCBkdXJhdGlvbiwgZW1wdHksIGZpZWxkX21hc2ssIHN0cnVjdCwgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3cmFwcGVycy4gY29tcGlsZXIvcGx1Z2luIGlzIGV4Y2x1ZGVkIGluIFByb3RvYnVmLmpzIGFuZCBoZXJlLlxuICAgIC8vIFVzaW5nIGNvbnN0YW50IHN0cmluZ3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0b29scyBsaWtlIFdlYnBhY2tcbiAgICBjb25zdCBhcGlEZXNjcmlwdG9yID0gcmVxdWlyZSgncHJvdG9idWZqcy9nb29nbGUvcHJvdG9idWYvYXBpLmpzb24nKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yRGVzY3JpcHRvciA9IHJlcXVpcmUoJ3Byb3RvYnVmanMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuanNvbicpO1xuICAgIGNvbnN0IHNvdXJjZUNvbnRleHREZXNjcmlwdG9yID0gcmVxdWlyZSgncHJvdG9idWZqcy9nb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQuanNvbicpO1xuICAgIGNvbnN0IHR5cGVEZXNjcmlwdG9yID0gcmVxdWlyZSgncHJvdG9idWZqcy9nb29nbGUvcHJvdG9idWYvdHlwZS5qc29uJyk7XG4gICAgUHJvdG9idWYuY29tbW9uKCdhcGknLCBhcGlEZXNjcmlwdG9yLm5lc3RlZC5nb29nbGUubmVzdGVkLnByb3RvYnVmLm5lc3RlZCk7XG4gICAgUHJvdG9idWYuY29tbW9uKCdkZXNjcmlwdG9yJywgZGVzY3JpcHRvckRlc2NyaXB0b3IubmVzdGVkLmdvb2dsZS5uZXN0ZWQucHJvdG9idWYubmVzdGVkKTtcbiAgICBQcm90b2J1Zi5jb21tb24oJ3NvdXJjZV9jb250ZXh0Jywgc291cmNlQ29udGV4dERlc2NyaXB0b3IubmVzdGVkLmdvb2dsZS5uZXN0ZWQucHJvdG9idWYubmVzdGVkKTtcbiAgICBQcm90b2J1Zi5jb21tb24oJ3R5cGUnLCB0eXBlRGVzY3JpcHRvci5uZXN0ZWQuZ29vZ2xlLm5lc3RlZC5wcm90b2J1Zi5uZXN0ZWQpO1xufVxuZXhwb3J0cy5hZGRDb21tb25Qcm90b3MgPSBhZGRDb21tb25Qcm90b3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCIsCiAgICAiLy8gR0VORVJBVEVEIEZJTEUuIERPIE5PVCBFRElULlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgZnVuY3Rpb24gcHJlZmVyRGVmYXVsdChleHBvcnRzKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuZGVmYXVsdCB8fCBleHBvcnRzO1xuICB9XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV4cG9ydHMgPSB7fTtcbiAgICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gICAgICByZXR1cm4gcHJlZmVyRGVmYXVsdChleHBvcnRzKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIG1vZHVsZS5leHBvcnRzID0gcHJlZmVyRGVmYXVsdChleHBvcnRzKTtcbiAgfSBlbHNlIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV4cG9ydHMgPSB7fTtcbiAgICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gICAgICBnbG9iYWwuTG9uZyA9IHByZWZlckRlZmF1bHQoZXhwb3J0cyk7XG4gICAgfSkoKTtcbiAgfVxufSkoXG4gIHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyBnbG9iYWxUaGlzXG4gICAgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgPyBzZWxmXG4gICAgICA6IHRoaXMsXG4gIGZ1bmN0aW9uIChfZXhwb3J0cykge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9leHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgdmFsdWU6IHRydWUsXG4gICAgfSk7XG4gICAgX2V4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbiAgICAvKipcbiAgICAgKiBAbGljZW5zZVxuICAgICAqIENvcHlyaWdodCAyMDA5IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9yc1xuICAgICAqIENvcHlyaWdodCAyMDIwIERhbmllbCBXaXJ0eiAvIFRoZSBsb25nLmpzIEF1dGhvcnMuXG4gICAgICpcbiAgICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAgKlxuICAgICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgICAgKlxuICAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICAqXG4gICAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAgICAgKi9cblxuICAgIC8vIFdlYkFzc2VtYmx5IG9wdGltaXphdGlvbnMgdG8gZG8gbmF0aXZlIGk2NCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aWRlXG4gICAgdmFyIHdhc20gPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICB3YXNtID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKFxuICAgICAgICBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgICAgIC8vIFxcMGFzbVxuICAgICAgICAgICAgMCwgOTcsIDExNSwgMTA5LFxuICAgICAgICAgICAgLy8gdmVyc2lvbiAxXG4gICAgICAgICAgICAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgLy8gc2VjdGlvbiBcInR5cGVcIlxuICAgICAgICAgICAgMSwgMTMsIDIsXG4gICAgICAgICAgICAvLyAwLCAoKSA9PiBpMzJcbiAgICAgICAgICAgIDk2LCAwLCAxLCAxMjcsXG4gICAgICAgICAgICAvLyAxLCAoaTMyLCBpMzIsIGkzMiwgaTMyKSA9PiBpMzJcbiAgICAgICAgICAgIDk2LCA0LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEsIDEyNyxcbiAgICAgICAgICAgIC8vIHNlY3Rpb24gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAzLCA3LCA2LFxuICAgICAgICAgICAgLy8gMCwgdHlwZSAwXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgLy8gMSwgdHlwZSAxXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgLy8gMiwgdHlwZSAxXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgLy8gMywgdHlwZSAxXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgLy8gNCwgdHlwZSAxXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgLy8gNSwgdHlwZSAxXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgLy8gc2VjdGlvbiBcImdsb2JhbFwiXG4gICAgICAgICAgICA2LCA2LCAxLFxuICAgICAgICAgICAgLy8gMCwgXCJoaWdoXCIsIG11dGFibGUgaTMyXG4gICAgICAgICAgICAxMjcsIDEsIDY1LCAwLCAxMSxcbiAgICAgICAgICAgIC8vIHNlY3Rpb24gXCJleHBvcnRcIlxuICAgICAgICAgICAgNywgNTAsIDYsXG4gICAgICAgICAgICAvLyAwLCBcIm11bFwiXG4gICAgICAgICAgICAzLCAxMDksIDExNywgMTA4LCAwLCAxLFxuICAgICAgICAgICAgLy8gMSwgXCJkaXZfc1wiXG4gICAgICAgICAgICA1LCAxMDAsIDEwNSwgMTE4LCA5NSwgMTE1LCAwLCAyLFxuICAgICAgICAgICAgLy8gMiwgXCJkaXZfdVwiXG4gICAgICAgICAgICA1LCAxMDAsIDEwNSwgMTE4LCA5NSwgMTE3LCAwLCAzLFxuICAgICAgICAgICAgLy8gMywgXCJyZW1fc1wiXG4gICAgICAgICAgICA1LCAxMTQsIDEwMSwgMTA5LCA5NSwgMTE1LCAwLCA0LFxuICAgICAgICAgICAgLy8gNCwgXCJyZW1fdVwiXG4gICAgICAgICAgICA1LCAxMTQsIDEwMSwgMTA5LCA5NSwgMTE3LCAwLCA1LFxuICAgICAgICAgICAgLy8gNSwgXCJnZXRfaGlnaFwiXG4gICAgICAgICAgICA4LCAxMDMsIDEwMSwgMTE2LCA5NSwgMTA0LCAxMDUsIDEwMywgMTA0LCAwLCAwLFxuICAgICAgICAgICAgLy8gc2VjdGlvbiBcImNvZGVcIlxuICAgICAgICAgICAgMTAsIDE5MSwgMSwgNixcbiAgICAgICAgICAgIC8vIDAsIFwiZ2V0X2hpZ2hcIlxuICAgICAgICAgICAgNCwgMCwgMzUsIDAsIDExLFxuICAgICAgICAgICAgLy8gMSwgXCJtdWxcIlxuICAgICAgICAgICAgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MyxcbiAgICAgICAgICAgIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyNiwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLFxuICAgICAgICAgICAgMzIsIDQsIDE2NywgMTEsXG4gICAgICAgICAgICAvLyAyLCBcImRpdl9zXCJcbiAgICAgICAgICAgIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsXG4gICAgICAgICAgICAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjcsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCxcbiAgICAgICAgICAgIDMyLCA0LCAxNjcsIDExLFxuICAgICAgICAgICAgLy8gMywgXCJkaXZfdVwiXG4gICAgICAgICAgICAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLFxuICAgICAgICAgICAgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI4LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsXG4gICAgICAgICAgICAzMiwgNCwgMTY3LCAxMSxcbiAgICAgICAgICAgIC8vIDQsIFwicmVtX3NcIlxuICAgICAgICAgICAgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MyxcbiAgICAgICAgICAgIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyOSwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLFxuICAgICAgICAgICAgMzIsIDQsIDE2NywgMTEsXG4gICAgICAgICAgICAvLyA1LCBcInJlbV91XCJcbiAgICAgICAgICAgIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsXG4gICAgICAgICAgICAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMzAsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCxcbiAgICAgICAgICAgIDMyLCA0LCAxNjcsIDExLFxuICAgICAgICAgIF0pLFxuICAgICAgICApLFxuICAgICAgICB7fSxcbiAgICAgICkuZXhwb3J0cztcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vIHdhc20gc3VwcG9ydCA6KFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyLCBnaXZlbiBpdHMgbG93IGFuZCBoaWdoIDMyIGJpdCB2YWx1ZXMgYXMgKnNpZ25lZCogaW50ZWdlcnMuXG4gICAgICogIFNlZSB0aGUgZnJvbSogZnVuY3Rpb25zIGJlbG93IGZvciBtb3JlIGNvbnZlbmllbnQgd2F5cyBvZiBjb25zdHJ1Y3RpbmcgTG9uZ3MuXG4gICAgICogQGV4cG9ydHMgTG9uZ1xuICAgICAqIEBjbGFzcyBBIExvbmcgY2xhc3MgZm9yIHJlcHJlc2VudGluZyBhIDY0IGJpdCB0d28ncy1jb21wbGVtZW50IGludGVnZXIgdmFsdWUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXG4gICAgICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExvbmcobG93LCBoaWdoLCB1bnNpZ25lZCkge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXG4gICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICovXG4gICAgICB0aGlzLmxvdyA9IGxvdyB8IDA7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cbiAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggfCAwO1xuXG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LlxuICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgKi9cbiAgICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkO1xuICAgIH1cblxuICAgIC8vIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGxvbmcgaXMgdGhlIHR3byBnaXZlbiBzaWduZWQsIDMyLWJpdCB2YWx1ZXMuXG4gICAgLy8gV2UgdXNlIDMyLWJpdCBwaWVjZXMgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIHNpemUgb2YgaW50ZWdlcnMgb24gd2hpY2hcbiAgICAvLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcbiAgICAvLyBtdWx0aXBsaWNhdGlvbiwgd2Ugc3BsaXQgZWFjaCBudW1iZXIgaW50byAxNiBiaXQgcGllY2VzLCB3aGljaCBjYW4gZWFzaWx5IGJlXG4gICAgLy8gbXVsdGlwbGllZCB3aXRoaW4gSmF2YXNjcmlwdCdzIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgb3ZlcmZsb3dcbiAgICAvLyBvciBjaGFuZ2UgaW4gc2lnbi5cbiAgICAvL1xuICAgIC8vIEluIHRoZSBhbGdvcml0aG1zIGJlbG93LCB3ZSBmcmVxdWVudGx5IHJlZHVjZSB0aGUgbmVnYXRpdmUgY2FzZSB0byB0aGVcbiAgICAvLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cbiAgICAvLyBOb3RlIHRoYXQgd2UgbXVzdCBBTFdBWVMgY2hlY2sgc3BlY2lhbGx5IHdoZXRoZXIgdGhvc2UgdmFsdWVzIGFyZSBNSU5fVkFMVUVcbiAgICAvLyAoLTJeNjMpIGJlY2F1c2UgLU1JTl9WQUxVRSA9PSBNSU5fVkFMVUUgKHNpbmNlIDJeNjMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzXG4gICAgLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xuICAgIC8vIGNhc2Ugd291bGQgb2Z0ZW4gcmVzdWx0IGluIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAvL1xuICAgIC8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxuICAgIC8vIG1ldGhvZHMgb24gd2hpY2ggdGhleSBkZXBlbmQuXG5cbiAgICAvKipcbiAgICAgKiBBbiBpbmRpY2F0b3IgdXNlZCB0byByZWxpYWJseSBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgTG9uZyBvciBub3QuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGNvbnN0XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBMb25nLnByb3RvdHlwZS5fX2lzTG9uZ19fO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nLnByb3RvdHlwZSwgXCJfX2lzTG9uZ19fXCIsIHtcbiAgICAgIHZhbHVlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNMb25nKG9iaikge1xuICAgICAgcmV0dXJuIChvYmogJiYgb2JqW1wiX19pc0xvbmdfX1wiXSkgPT09IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN0ejMyKHZhbHVlKSB7XG4gICAgICB2YXIgYyA9IE1hdGguY2x6MzIodmFsdWUgJiAtdmFsdWUpO1xuICAgICAgcmV0dXJuIHZhbHVlID8gMzEgLSBjIDogYztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIExvbmcuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZy5pc0xvbmcgPSBpc0xvbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBMb25nIHJlcHJlc2VudGF0aW9ucyBvZiBzbWFsbCBpbnRlZ2VyIHZhbHVlcy5cbiAgICAgKiBAdHlwZSB7IU9iamVjdH1cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgSU5UX0NBQ0hFID0ge307XG5cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIHRoZSBMb25nIHJlcHJlc2VudGF0aW9ucyBvZiBzbWFsbCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy5cbiAgICAgKiBAdHlwZSB7IU9iamVjdH1cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgVUlOVF9DQUNIRSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAgICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbUludCh2YWx1ZSwgdW5zaWduZWQpIHtcbiAgICAgIHZhciBvYmosIGNhY2hlZE9iaiwgY2FjaGU7XG4gICAgICBpZiAodW5zaWduZWQpIHtcbiAgICAgICAgdmFsdWUgPj4+PSAwO1xuICAgICAgICBpZiAoKGNhY2hlID0gMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikpIHtcbiAgICAgICAgICBjYWNoZWRPYmogPSBVSU5UX0NBQ0hFW3ZhbHVlXTtcbiAgICAgICAgICBpZiAoY2FjaGVkT2JqKSByZXR1cm4gY2FjaGVkT2JqO1xuICAgICAgICB9XG4gICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCAwLCB0cnVlKTtcbiAgICAgICAgaWYgKGNhY2hlKSBVSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlIHw9IDA7XG4gICAgICAgIGlmICgoY2FjaGUgPSAtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSkge1xuICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07XG4gICAgICAgICAgaWYgKGNhY2hlZE9iaikgcmV0dXJuIGNhY2hlZE9iajtcbiAgICAgICAgfVxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgdmFsdWUgPCAwID8gLTEgOiAwLCBmYWxzZSk7XG4gICAgICAgIGlmIChjYWNoZSkgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgMzIgYml0IGludGVnZXIgaW4gcXVlc3Rpb25cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXG4gICAgICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXG4gICAgICovXG4gICAgTG9uZy5mcm9tSW50ID0gZnJvbUludDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXG4gICAgICogQHJldHVybnMgeyFMb25nfVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm4gdW5zaWduZWQgPyBVWkVSTyA6IFpFUk87XG4gICAgICBpZiAodW5zaWduZWQpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkgcmV0dXJuIFVaRVJPO1xuICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUgPD0gLVRXT19QV1JfNjNfREJMKSByZXR1cm4gTUlOX1ZBTFVFO1xuICAgICAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKSByZXR1cm4gTUFYX1ZBTFVFO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlIDwgMCkgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7XG4gICAgICByZXR1cm4gZnJvbUJpdHMoXG4gICAgICAgIHZhbHVlICUgVFdPX1BXUl8zMl9EQkwgfCAwLFxuICAgICAgICAodmFsdWUgLyBUV09fUFdSXzMyX0RCTCkgfCAwLFxuICAgICAgICB1bnNpZ25lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB2YWx1ZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyBhIGZpbml0ZSBudW1iZXIuIE90aGVyd2lzZSwgemVybyBpcyByZXR1cm5lZC5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIG51bWJlciBpbiBxdWVzdGlvblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcbiAgICAgKi9cbiAgICBMb25nLmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxvd0JpdHNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxuICAgICAqIEByZXR1cm5zIHshTG9uZ31cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tQml0cyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpIHtcbiAgICAgIHJldHVybiBuZXcgTG9uZyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xuICAgICAqICBhc3N1bWVkIHRvIHVzZSAzMiBiaXRzLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0cyBUaGUgaGlnaCAzMiBiaXRzXG4gICAgICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxuICAgICAqL1xuICAgIExvbmcuZnJvbUJpdHMgPSBmcm9tQml0cztcblxuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV4cG9uZW50XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgcG93X2RibCA9IE1hdGgucG93OyAvLyBVc2VkIDQgdGltZXMgKDQqOCB0byAxNSs0KVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgICAqIEBwYXJhbSB7KGJvb2xlYW58bnVtYmVyKT19IHVuc2lnbmVkXG4gICAgICogQHBhcmFtIHtudW1iZXI9fSByYWRpeFxuICAgICAqIEByZXR1cm5zIHshTG9uZ31cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0ciwgdW5zaWduZWQsIHJhZGl4KSB7XG4gICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgdGhyb3cgRXJyb3IoXCJlbXB0eSBzdHJpbmdcIik7XG4gICAgICBpZiAodHlwZW9mIHVuc2lnbmVkID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIC8vIEZvciBnb29nLm1hdGgubG9uZyBjb21wYXRpYmlsaXR5XG4gICAgICAgIHJhZGl4ID0gdW5zaWduZWQ7XG4gICAgICAgIHVuc2lnbmVkID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnNpZ25lZCA9ICEhdW5zaWduZWQ7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHN0ciA9PT0gXCJOYU5cIiB8fFxuICAgICAgICBzdHIgPT09IFwiSW5maW5pdHlcIiB8fFxuICAgICAgICBzdHIgPT09IFwiK0luZmluaXR5XCIgfHxcbiAgICAgICAgc3RyID09PSBcIi1JbmZpbml0eVwiXG4gICAgICApXG4gICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcbiAgICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XG4gICAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpIHRocm93IFJhbmdlRXJyb3IoXCJyYWRpeFwiKTtcbiAgICAgIHZhciBwO1xuICAgICAgaWYgKChwID0gc3RyLmluZGV4T2YoXCItXCIpKSA+IDApIHRocm93IEVycm9yKFwiaW50ZXJpb3IgaHlwaGVuXCIpO1xuICAgICAgZWxzZSBpZiAocCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZnJvbVN0cmluZyhzdHIuc3Vic3RyaW5nKDEpLCB1bnNpZ25lZCwgcmFkaXgpLm5lZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXG4gICAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cbiAgICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTtcbiAgICAgIHZhciByZXN1bHQgPSBaRVJPO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDgpIHtcbiAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksXG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUludChzdHIuc3Vic3RyaW5nKGksIGkgKyBzaXplKSwgcmFkaXgpO1xuICAgICAgICBpZiAoc2l6ZSA8IDgpIHtcbiAgICAgICAgICB2YXIgcG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIHNpemUpKTtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQubXVsKHBvd2VyKS5hZGQoZnJvbU51bWJlcih2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocmFkaXhUb1Bvd2VyKTtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnVuc2lnbmVkID0gdW5zaWduZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBzdHJpbmcsIHdyaXR0ZW4gdXNpbmcgdGhlIHNwZWNpZmllZCByYWRpeC5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nXG4gICAgICogQHBhcmFtIHsoYm9vbGVhbnxudW1iZXIpPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggVGhlIHJhZGl4IGluIHdoaWNoIHRoZSB0ZXh0IGlzIHdyaXR0ZW4gKDItMzYpLCBkZWZhdWx0cyB0byAxMFxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxuICAgICAqL1xuICAgIExvbmcuZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXG4gICAgICogQHJldHVybnMgeyFMb25nfVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7XG4gICAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBMb25nOlxuICAgICAgcmV0dXJuIGZyb21CaXRzKFxuICAgICAgICB2YWwubG93LFxuICAgICAgICB2YWwuaGlnaCxcbiAgICAgICAgdHlwZW9mIHVuc2lnbmVkID09PSBcImJvb2xlYW5cIiA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIHRvIGEgTG9uZyB1c2luZyB0aGUgYXBwcm9wcmlhdGUgZnJvbSogZnVuY3Rpb24gZm9yIGl0cyB0eXBlLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbCBWYWx1ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9XG4gICAgICovXG4gICAgTG9uZy5mcm9tVmFsdWUgPSBmcm9tVmFsdWU7XG5cbiAgICAvLyBOT1RFOiB0aGUgY29tcGlsZXIgc2hvdWxkIGlubGluZSB0aGVzZSBjb25zdGFudCB2YWx1ZXMgYmVsb3cgYW5kIHRoZW4gcmVtb3ZlIHRoZXNlIHZhcmlhYmxlcywgc28gdGhlcmUgc2hvdWxkIGJlXG4gICAgLy8gbm8gcnVudGltZSBwZW5hbHR5IGZvciB0aGVzZS5cblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGNvbnN0XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFRXT19QV1JfMTZfREJMID0gMSA8PCAxNjtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGNvbnN0XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGNvbnN0XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGNvbnN0XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFRXT19QV1JfNjRfREJMID0gVFdPX1BXUl8zMl9EQkwgKiBUV09fUFdSXzMyX0RCTDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGNvbnN0XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUgeyFMb25nfVxuICAgICAqIEBjb25zdFxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIHZhciBUV09fUFdSXzI0ID0gZnJvbUludChUV09fUFdSXzI0X0RCTCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7IUxvbmd9XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFpFUk8gPSBmcm9tSW50KDApO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmVkIHplcm8uXG4gICAgICogQHR5cGUgeyFMb25nfVxuICAgICAqL1xuICAgIExvbmcuWkVSTyA9IFpFUk87XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7IUxvbmd9XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIFVaRVJPID0gZnJvbUludCgwLCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFVuc2lnbmVkIHplcm8uXG4gICAgICogQHR5cGUgeyFMb25nfVxuICAgICAqL1xuICAgIExvbmcuVVpFUk8gPSBVWkVSTztcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHshTG9uZ31cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgT05FID0gZnJvbUludCgxKTtcblxuICAgIC8qKlxuICAgICAqIFNpZ25lZCBvbmUuXG4gICAgICogQHR5cGUgeyFMb25nfVxuICAgICAqL1xuICAgIExvbmcuT05FID0gT05FO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUgeyFMb25nfVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIHZhciBVT05FID0gZnJvbUludCgxLCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFVuc2lnbmVkIG9uZS5cbiAgICAgKiBAdHlwZSB7IUxvbmd9XG4gICAgICovXG4gICAgTG9uZy5VT05FID0gVU9ORTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHshTG9uZ31cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgTkVHX09ORSA9IGZyb21JbnQoLTEpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmVkIG5lZ2F0aXZlIG9uZS5cbiAgICAgKiBAdHlwZSB7IUxvbmd9XG4gICAgICovXG4gICAgTG9uZy5ORUdfT05FID0gTkVHX09ORTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHshTG9uZ31cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgTUFYX1ZBTFVFID0gZnJvbUJpdHMoMHhmZmZmZmZmZiB8IDAsIDB4N2ZmZmZmZmYgfCAwLCBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIHNpZ25lZCB2YWx1ZS5cbiAgICAgKiBAdHlwZSB7IUxvbmd9XG4gICAgICovXG4gICAgTG9uZy5NQVhfVkFMVUUgPSBNQVhfVkFMVUU7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7IUxvbmd9XG4gICAgICogQGlubmVyXG4gICAgICovXG4gICAgdmFyIE1BWF9VTlNJR05FRF9WQUxVRSA9IGZyb21CaXRzKDB4ZmZmZmZmZmYgfCAwLCAweGZmZmZmZmZmIHwgMCwgdHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIHVuc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHshTG9uZ31cbiAgICAgKi9cbiAgICBMb25nLk1BWF9VTlNJR05FRF9WQUxVRSA9IE1BWF9VTlNJR05FRF9WQUxVRTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHshTG9uZ31cbiAgICAgKiBAaW5uZXJcbiAgICAgKi9cbiAgICB2YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMHg4MDAwMDAwMCB8IDAsIGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIE1pbmltdW0gc2lnbmVkIHZhbHVlLlxuICAgICAqIEB0eXBlIHshTG9uZ31cbiAgICAgKi9cbiAgICBMb25nLk1JTl9WQUxVRSA9IE1JTl9WQUxVRTtcblxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBMb25nLnByb3RvdHlwZVxuICAgICAqIEBpbm5lclxuICAgICAqL1xuICAgIHZhciBMb25nUHJvdG90eXBlID0gTG9uZy5wcm90b3R5cGU7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIDMyIGJpdCBpbnRlZ2VyLCBhc3N1bWluZyBpdCBpcyBhIDMyIGJpdCBpbnRlZ2VyLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiB0b0ludCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIExvbmcgdG8gYSB0aGUgbmVhcmVzdCBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHZhbHVlIChkb3VibGUsIDUzIGJpdCBtYW50aXNzYSkuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKCkge1xuICAgICAgaWYgKHRoaXMudW5zaWduZWQpXG4gICAgICAgIHJldHVybiAodGhpcy5oaWdoID4+PiAwKSAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBMb25nIHRvIGEgc3RyaW5nIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCByYWRpeC5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBSYWRpeCAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiBAb3ZlcnJpZGVcbiAgICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBJZiBgcmFkaXhgIGlzIG91dCBvZiByYW5nZVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkge1xuICAgICAgcmFkaXggPSByYWRpeCB8fCAxMDtcbiAgICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkgdGhyb3cgUmFuZ2VFcnJvcihcInJhZGl4XCIpO1xuICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiBcIjBcIjtcbiAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcbiAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkge1xuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBMb25nIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgbmVnYXRlZCwgc28gd2UgcmVtb3ZlXG4gICAgICAgICAgLy8gdGhlIGJvdHRvbS1tb3N0IGRpZ2l0IGluIHRoaXMgYmFzZSBhbmQgdGhlbiByZWN1cnNlIHRvIGRvIHRoZSByZXN0LlxuICAgICAgICAgIHZhciByYWRpeExvbmcgPSBmcm9tTnVtYmVyKHJhZGl4KSxcbiAgICAgICAgICAgIGRpdiA9IHRoaXMuZGl2KHJhZGl4TG9uZyksXG4gICAgICAgICAgICByZW0xID0gZGl2Lm11bChyYWRpeExvbmcpLnN1Yih0aGlzKTtcbiAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gXCItXCIgKyB0aGlzLm5lZygpLnRvU3RyaW5nKHJhZGl4KTtcbiAgICAgIH1cblxuICAgICAgLy8gRG8gc2V2ZXJhbCAoNikgZGlnaXRzIGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wLCBzbyBhcyB0b1xuICAgICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXG4gICAgICB2YXIgcmFkaXhUb1Bvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCA2KSwgdGhpcy51bnNpZ25lZCksXG4gICAgICAgIHJlbSA9IHRoaXM7XG4gICAgICB2YXIgcmVzdWx0ID0gXCJcIjtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksXG4gICAgICAgICAgaW50dmFsID0gcmVtLnN1YihyZW1EaXYubXVsKHJhZGl4VG9Qb3dlcikpLnRvSW50KCkgPj4+IDAsXG4gICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcbiAgICAgICAgcmVtID0gcmVtRGl2O1xuICAgICAgICBpZiAocmVtLmlzWmVybygpKSByZXR1cm4gZGlnaXRzICsgcmVzdWx0O1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDYpIGRpZ2l0cyA9IFwiMFwiICsgZGlnaXRzO1xuICAgICAgICAgIHJlc3VsdCA9IFwiXCIgKyBkaWdpdHMgKyByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBoaWdoIGJpdHNcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaWdoO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBoaWdoIDMyIGJpdHMgYXMgYW4gdW5zaWduZWQgaW50ZWdlci5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMge251bWJlcn0gVW5zaWduZWQgaGlnaCBiaXRzXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBsb3cgYml0c1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuZ2V0TG93Qml0cyA9IGZ1bmN0aW9uIGdldExvd0JpdHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb3c7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGxvdyBiaXRzXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5nZXRMb3dCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRMb3dCaXRzVW5zaWduZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb3cgPj4+IDA7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgTG9uZy5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkge1xuICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKVxuICAgICAgICAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoTUlOX1ZBTFVFKSA/IDY0IDogdGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7XG4gICAgICB2YXIgdmFsID0gdGhpcy5oaWdoICE9IDAgPyB0aGlzLmhpZ2ggOiB0aGlzLmxvdztcbiAgICAgIGZvciAodmFyIGJpdCA9IDMxOyBiaXQgPiAwOyBiaXQtLSkgaWYgKCh2YWwgJiAoMSA8PCBiaXQpKSAhPSAwKSBicmVhaztcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggIT0gMCA/IGJpdCArIDMzIDogYml0ICsgMTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nIGNhbiBiZSBzYWZlbHkgcmVwcmVzZW50ZWQgYXMgYSBKYXZhU2NyaXB0IG51bWJlci5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5pc1NhZmVJbnRlZ2VyID0gZnVuY3Rpb24gaXNTYWZlSW50ZWdlcigpIHtcbiAgICAgIC8vIDJeNTMtMSBpcyB0aGUgbWF4aW11bSBzYWZlIHZhbHVlXG4gICAgICB2YXIgdG9wMTFCaXRzID0gdGhpcy5oaWdoID4+IDIxO1xuICAgICAgLy8gWzAsIDJeNTMtMV1cbiAgICAgIGlmICghdG9wMTFCaXRzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIC8vID4gMl41My0xXG4gICAgICBpZiAodGhpcy51bnNpZ25lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gWy0yXjUzLCAtMV0gZXhjZXB0IC0yXjUzXG4gICAgICByZXR1cm4gdG9wMTFCaXRzID09PSAtMSAmJiAhKHRoaXMubG93ID09PSAwICYmIHRoaXMuaGlnaCA9PT0gLTB4MjAwMDAwKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gaXNaZXJvKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gMCAmJiB0aGlzLmxvdyA9PT0gMDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjaXNaZXJvfS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmVxeiA9IExvbmdQcm90b3R5cGUuaXNaZXJvO1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbmVnYXRpdmUuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuaXNOZWdhdGl2ZSA9IGZ1bmN0aW9uIGlzTmVnYXRpdmUoKSB7XG4gICAgICByZXR1cm4gIXRoaXMudW5zaWduZWQgJiYgdGhpcy5oaWdoIDwgMDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgcG9zaXRpdmUgb3IgemVyby5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBvZGQuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuaXNPZGQgPSBmdW5jdGlvbiBpc09kZCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZXZlbi5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4oKSB7XG4gICAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcbiAgICAgIGlmICghaXNMb25nKG90aGVyKSkgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnVuc2lnbmVkICE9PSBvdGhlci51bnNpZ25lZCAmJlxuICAgICAgICB0aGlzLmhpZ2ggPj4+IDMxID09PSAxICYmXG4gICAgICAgIG90aGVyLmhpZ2ggPj4+IDMxID09PSAxXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNlcXVhbHN9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5lcSA9IExvbmdQcm90b3R5cGUuZXF1YWxzO1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLm5vdEVxdWFscyA9IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikge1xuICAgICAgcmV0dXJuICF0aGlzLmVxKC8qIHZhbGlkYXRlcyAqLyBvdGhlcik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbm90RXF1YWxzfS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUubmVxID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLm5lID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUubGVzc1RoYW4gPSBmdW5jdGlvbiBsZXNzVGhhbihvdGhlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcCgvKiB2YWxpZGF0ZXMgKi8gb3RoZXIpIDwgMDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbn0uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmx0ID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbjtcblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBsZXNzVGhhbk9yRXF1YWwob3RoZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA8PSAwO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmx0ZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbk9yRXF1YWx9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA+IDA7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZ3JlYXRlclRoYW59LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47XG5cbiAgICAvKipcbiAgICAgKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbk9yRXF1YWx9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcblxuICAgIC8qKlxuICAgICAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZ3JlYXRlclRoYW5PckVxdWFsfS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuZ2UgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIDEgaWYgdGhlIHRoaXMgaXMgZ3JlYXRlciBhbmQgLTFcbiAgICAgKiAgaWYgdGhlIGdpdmVuIG9uZSBpcyBncmVhdGVyXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikge1xuICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKSBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XG4gICAgICBpZiAodGhpcy5lcShvdGhlcikpIHJldHVybiAwO1xuICAgICAgdmFyIHRoaXNOZWcgPSB0aGlzLmlzTmVnYXRpdmUoKSxcbiAgICAgICAgb3RoZXJOZWcgPSBvdGhlci5pc05lZ2F0aXZlKCk7XG4gICAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpIHJldHVybiAtMTtcbiAgICAgIGlmICghdGhpc05lZyAmJiBvdGhlck5lZykgcmV0dXJuIDE7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBzaWduIGJpdHMgYXJlIHRoZSBzYW1lXG4gICAgICBpZiAoIXRoaXMudW5zaWduZWQpIHJldHVybiB0aGlzLnN1YihvdGhlcikuaXNOZWdhdGl2ZSgpID8gLTEgOiAxO1xuICAgICAgLy8gQm90aCBhcmUgcG9zaXRpdmUgaWYgYXQgbGVhc3Qgb25lIGlzIHVuc2lnbmVkXG4gICAgICByZXR1cm4gb3RoZXIuaGlnaCA+Pj4gMCA+IHRoaXMuaGlnaCA+Pj4gMCB8fFxuICAgICAgICAob3RoZXIuaGlnaCA9PT0gdGhpcy5oaWdoICYmIG90aGVyLmxvdyA+Pj4gMCA+IHRoaXMubG93ID4+PiAwKVxuICAgICAgICA/IC0xXG4gICAgICAgIDogMTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZXMgdGhpcyBMb25nJ3MgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjY29tcGFyZX0uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXG4gICAgICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTtcblxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZXMgdGhpcyBMb25nJ3MgdmFsdWUuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gTmVnYXRlZCBMb25nXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMudW5zaWduZWQgJiYgdGhpcy5lcShNSU5fVkFMVUUpKSByZXR1cm4gTUlOX1ZBTFVFO1xuICAgICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKE9ORSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZXMgdGhpcyBMb25nJ3MgdmFsdWUuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbmVnYXRlfS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUubmVnID0gTG9uZ1Byb3RvdHlwZS5uZWdhdGU7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBhZGRlbmQgQWRkZW5kXG4gICAgICogQHJldHVybnMgeyFMb25nfSBTdW1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChhZGRlbmQpIHtcbiAgICAgIGlmICghaXNMb25nKGFkZGVuZCkpIGFkZGVuZCA9IGZyb21WYWx1ZShhZGRlbmQpO1xuXG4gICAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cblxuICAgICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XG4gICAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhmZmZmO1xuICAgICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcbiAgICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4ZmZmZjtcbiAgICAgIHZhciBiNDggPSBhZGRlbmQuaGlnaCA+Pj4gMTY7XG4gICAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiAweGZmZmY7XG4gICAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XG4gICAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDB4ZmZmZjtcbiAgICAgIHZhciBjNDggPSAwLFxuICAgICAgICBjMzIgPSAwLFxuICAgICAgICBjMTYgPSAwLFxuICAgICAgICBjMDAgPSAwO1xuICAgICAgYzAwICs9IGEwMCArIGIwMDtcbiAgICAgIGMxNiArPSBjMDAgPj4+IDE2O1xuICAgICAgYzAwICY9IDB4ZmZmZjtcbiAgICAgIGMxNiArPSBhMTYgKyBiMTY7XG4gICAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICAgIGMxNiAmPSAweGZmZmY7XG4gICAgICBjMzIgKz0gYTMyICsgYjMyO1xuICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgICBjMzIgJj0gMHhmZmZmO1xuICAgICAgYzQ4ICs9IGE0OCArIGI0ODtcbiAgICAgIGM0OCAmPSAweGZmZmY7XG4gICAgICByZXR1cm4gZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyLCB0aGlzLnVuc2lnbmVkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IHN1YnRyYWhlbmQgU3VidHJhaGVuZFxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChzdWJ0cmFoZW5kKSB7XG4gICAgICBpZiAoIWlzTG9uZyhzdWJ0cmFoZW5kKSkgc3VidHJhaGVuZCA9IGZyb21WYWx1ZShzdWJ0cmFoZW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZygpKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc3VidHJhY3R9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IHN1YnRyYWhlbmQgU3VidHJhaGVuZFxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuc3ViID0gTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBtdWx0aXBsaWVyIE11bHRpcGxpZXJcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFByb2R1Y3RcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gbXVsdGlwbHkobXVsdGlwbGllcikge1xuICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiB0aGlzO1xuICAgICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpIG11bHRpcGxpZXIgPSBmcm9tVmFsdWUobXVsdGlwbGllcik7XG5cbiAgICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxuICAgICAgaWYgKHdhc20pIHtcbiAgICAgICAgdmFyIGxvdyA9IHdhc21bXCJtdWxcIl0oXG4gICAgICAgICAgdGhpcy5sb3csXG4gICAgICAgICAgdGhpcy5oaWdoLFxuICAgICAgICAgIG11bHRpcGxpZXIubG93LFxuICAgICAgICAgIG11bHRpcGxpZXIuaGlnaCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbVtcImdldF9oaWdoXCJdKCksIHRoaXMudW5zaWduZWQpO1xuICAgICAgfVxuICAgICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPO1xuICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkgcmV0dXJuIG11bHRpcGxpZXIuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87XG4gICAgICBpZiAobXVsdGlwbGllci5lcShNSU5fVkFMVUUpKSByZXR1cm4gdGhpcy5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTztcbiAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTtcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5uZWcoKS5tdWwobXVsdGlwbGllcikubmVnKCk7XG4gICAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKVxuICAgICAgICByZXR1cm4gdGhpcy5tdWwobXVsdGlwbGllci5uZWcoKSkubmVnKCk7XG5cbiAgICAgIC8vIElmIGJvdGggbG9uZ3MgYXJlIHNtYWxsLCB1c2UgZmxvYXQgbXVsdGlwbGljYXRpb25cbiAgICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpXG4gICAgICAgIHJldHVybiBmcm9tTnVtYmVyKFxuICAgICAgICAgIHRoaXMudG9OdW1iZXIoKSAqIG11bHRpcGxpZXIudG9OdW1iZXIoKSxcbiAgICAgICAgICB0aGlzLnVuc2lnbmVkLFxuICAgICAgICApO1xuXG4gICAgICAvLyBEaXZpZGUgZWFjaCBsb25nIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gYWRkIHVwIDR4NCBwcm9kdWN0cy5cbiAgICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXG5cbiAgICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2O1xuICAgICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDB4ZmZmZjtcbiAgICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7XG4gICAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiAweGZmZmY7XG4gICAgICB2YXIgYjQ4ID0gbXVsdGlwbGllci5oaWdoID4+PiAxNjtcbiAgICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiAweGZmZmY7XG4gICAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xuICAgICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgMHhmZmZmO1xuICAgICAgdmFyIGM0OCA9IDAsXG4gICAgICAgIGMzMiA9IDAsXG4gICAgICAgIGMxNiA9IDAsXG4gICAgICAgIGMwMCA9IDA7XG4gICAgICBjMDAgKz0gYTAwICogYjAwO1xuICAgICAgYzE2ICs9IGMwMCA+Pj4gMTY7XG4gICAgICBjMDAgJj0gMHhmZmZmO1xuICAgICAgYzE2ICs9IGExNiAqIGIwMDtcbiAgICAgIGMzMiArPSBjMTYgPj4+IDE2O1xuICAgICAgYzE2ICY9IDB4ZmZmZjtcbiAgICAgIGMxNiArPSBhMDAgKiBiMTY7XG4gICAgICBjMzIgKz0gYzE2ID4+PiAxNjtcbiAgICAgIGMxNiAmPSAweGZmZmY7XG4gICAgICBjMzIgKz0gYTMyICogYjAwO1xuICAgICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XG4gICAgICBjMzIgJj0gMHhmZmZmO1xuICAgICAgYzMyICs9IGExNiAqIGIxNjtcbiAgICAgIGM0OCArPSBjMzIgPj4+IDE2O1xuICAgICAgYzMyICY9IDB4ZmZmZjtcbiAgICAgIGMzMiArPSBhMDAgKiBiMzI7XG4gICAgICBjNDggKz0gYzMyID4+PiAxNjtcbiAgICAgIGMzMiAmPSAweGZmZmY7XG4gICAgICBjNDggKz0gYTQ4ICogYjAwICsgYTMyICogYjE2ICsgYTE2ICogYjMyICsgYTAwICogYjQ4O1xuICAgICAgYzQ4ICY9IDB4ZmZmZjtcbiAgICAgIHJldHVybiBmcm9tQml0cygoYzE2IDw8IDE2KSB8IGMwMCwgKGM0OCA8PCAxNikgfCBjMzIsIHRoaXMudW5zaWduZWQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtdWx0aXBseX0uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXG4gICAgICogQHJldHVybnMgeyFMb25nfSBQcm9kdWN0XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5tdWwgPSBMb25nUHJvdG90eXBlLm11bHRpcGx5O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgZGl2aWRlZCBieSB0aGUgc3BlY2lmaWVkLiBUaGUgcmVzdWx0IGlzIHNpZ25lZCBpZiB0aGlzIExvbmcgaXMgc2lnbmVkIG9yXG4gICAgICogIHVuc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyB1bnNpZ25lZC5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gZGl2aXNvciBEaXZpc29yXG4gICAgICogQHJldHVybnMgeyFMb25nfSBRdW90aWVudFxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuZGl2aWRlID0gZnVuY3Rpb24gZGl2aWRlKGRpdmlzb3IpIHtcbiAgICAgIGlmICghaXNMb25nKGRpdmlzb3IpKSBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpO1xuICAgICAgaWYgKGRpdmlzb3IuaXNaZXJvKCkpIHRocm93IEVycm9yKFwiZGl2aXNpb24gYnkgemVyb1wiKTtcblxuICAgICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XG4gICAgICBpZiAod2FzbSkge1xuICAgICAgICAvLyBndWFyZCBhZ2FpbnN0IHNpZ25lZCBkaXZpc2lvbiBvdmVyZmxvdzogdGhlIGxhcmdlc3RcbiAgICAgICAgLy8gbmVnYXRpdmUgbnVtYmVyIC8gLTEgd291bGQgYmUgMSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdFxuICAgICAgICAvLyBwb3NpdGl2ZSBudW1iZXIsIGR1ZSB0byB0d28ncyBjb21wbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMudW5zaWduZWQgJiZcbiAgICAgICAgICB0aGlzLmhpZ2ggPT09IC0weDgwMDAwMDAwICYmXG4gICAgICAgICAgZGl2aXNvci5sb3cgPT09IC0xICYmXG4gICAgICAgICAgZGl2aXNvci5oaWdoID09PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBiZSBjb25zaXN0ZW50IHdpdGggbm9uLXdhc20gY29kZSBwYXRoXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbVtcImRpdl91XCJdIDogd2FzbVtcImRpdl9zXCJdKShcbiAgICAgICAgICB0aGlzLmxvdyxcbiAgICAgICAgICB0aGlzLmhpZ2gsXG4gICAgICAgICAgZGl2aXNvci5sb3csXG4gICAgICAgICAgZGl2aXNvci5oaWdoLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtW1wiZ2V0X2hpZ2hcIl0oKSwgdGhpcy51bnNpZ25lZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIHRoaXMudW5zaWduZWQgPyBVWkVSTyA6IFpFUk87XG4gICAgICB2YXIgYXBwcm94LCByZW0sIHJlcztcbiAgICAgIGlmICghdGhpcy51bnNpZ25lZCkge1xuICAgICAgICAvLyBUaGlzIHNlY3Rpb24gaXMgb25seSByZWxldmFudCBmb3Igc2lnbmVkIGxvbmdzIGFuZCBpcyBkZXJpdmVkIGZyb20gdGhlXG4gICAgICAgIC8vIGNsb3N1cmUgbGlicmFyeSBhcyBhIHdob2xlLlxuICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7XG4gICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKVxuICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsgLy8gcmVjYWxsIHRoYXQgLU1JTl9WQUxVRSA9PSBNSU5fVkFMVUVcbiAgICAgICAgICBlbHNlIGlmIChkaXZpc29yLmVxKE1JTl9WQUxVRSkpIHJldHVybiBPTkU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHxvdGhlcnwgPj0gMiwgc28gfHRoaXMvb3RoZXJ8IDwgfE1JTl9WQUxVRXwuXG4gICAgICAgICAgICB2YXIgaGFsZlRoaXMgPSB0aGlzLnNocigxKTtcbiAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGwoMSk7XG4gICAgICAgICAgICBpZiAoYXBwcm94LmVxKFpFUk8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW0gPSB0aGlzLnN1YihkaXZpc29yLm11bChhcHByb3gpKTtcbiAgICAgICAgICAgICAgcmVzID0gYXBwcm94LmFkZChyZW0uZGl2KGRpdmlzb3IpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKSByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcbiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvci5uZWcoKSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IpLm5lZygpO1xuICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKSByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWcoKSkubmVnKCk7XG4gICAgICAgIHJlcyA9IFpFUk87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgYWxnb3JpdGhtIGJlbG93IGhhcyBub3QgYmVlbiBtYWRlIGZvciB1bnNpZ25lZCBsb25ncy4gSXQncyB0aGVyZWZvcmVcbiAgICAgICAgLy8gcmVxdWlyZWQgdG8gdGFrZSBzcGVjaWFsIGNhcmUgb2YgdGhlIE1TQiBwcmlvciB0byBydW5uaW5nIGl0LlxuICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTtcbiAgICAgICAgaWYgKGRpdmlzb3IuZ3QodGhpcykpIHJldHVybiBVWkVSTztcbiAgICAgICAgaWYgKGRpdmlzb3IuZ3QodGhpcy5zaHJ1KDEpKSlcbiAgICAgICAgICAvLyAxNSA+Pj4gMSA9IDcgOyB3aXRoIGRpdmlzb3IgPSA4IDsgdHJ1ZVxuICAgICAgICAgIHJldHVybiBVT05FO1xuICAgICAgICByZXMgPSBVWkVSTztcbiAgICAgIH1cblxuICAgICAgLy8gUmVwZWF0IHRoZSBmb2xsb3dpbmcgdW50aWwgdGhlIHJlbWFpbmRlciBpcyBsZXNzIHRoYW4gb3RoZXI6ICBmaW5kIGFcbiAgICAgIC8vIGZsb2F0aW5nLXBvaW50IHRoYXQgYXBwcm94aW1hdGVzIHJlbWFpbmRlciAvIG90aGVyICpmcm9tIGJlbG93KiwgYWRkIHRoaXNcbiAgICAgIC8vIGludG8gdGhlIHJlc3VsdCwgYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIHJlbWFpbmRlci4gIEl0IGlzIGNyaXRpY2FsIHRoYXRcbiAgICAgIC8vIHRoZSBhcHByb3hpbWF0ZSB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlYWwgdmFsdWUgc28gdGhhdCB0aGVcbiAgICAgIC8vIHJlbWFpbmRlciBuZXZlciBiZWNvbWVzIG5lZ2F0aXZlLlxuICAgICAgcmVtID0gdGhpcztcbiAgICAgIHdoaWxlIChyZW0uZ3RlKGRpdmlzb3IpKSB7XG4gICAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcbiAgICAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgdmFsdWUuXG4gICAgICAgIGFwcHJveCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IocmVtLnRvTnVtYmVyKCkgLyBkaXZpc29yLnRvTnVtYmVyKCkpKTtcblxuICAgICAgICAvLyBXZSB3aWxsIHR3ZWFrIHRoZSBhcHByb3hpbWF0ZSByZXN1bHQgYnkgY2hhbmdpbmcgaXQgaW4gdGhlIDQ4LXRoIGRpZ2l0IG9yXG4gICAgICAgIC8vIHRoZSBzbWFsbGVzdCBub24tZnJhY3Rpb25hbCBkaWdpdCwgd2hpY2hldmVyIGlzIGxhcmdlci5cbiAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSxcbiAgICAgICAgICBkZWx0YSA9IGxvZzIgPD0gNDggPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLFxuICAgICAgICAgIC8vIERlY3JlYXNlIHRoZSBhcHByb3hpbWF0aW9uIHVudGlsIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVtYWluZGVyLiAgTm90ZVxuICAgICAgICAgIC8vIHRoYXQgaWYgaXQgaXMgdG9vIGxhcmdlLCB0aGUgcHJvZHVjdCBvdmVyZmxvd3MgYW5kIGlzIG5lZ2F0aXZlLlxuICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94KSxcbiAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xuICAgICAgICB3aGlsZSAoYXBwcm94UmVtLmlzTmVnYXRpdmUoKSB8fCBhcHByb3hSZW0uZ3QocmVtKSkge1xuICAgICAgICAgIGFwcHJveCAtPSBkZWx0YTtcbiAgICAgICAgICBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCwgdGhpcy51bnNpZ25lZCk7XG4gICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGtub3cgdGhlIGFuc3dlciBjYW4ndCBiZSB6ZXJvLi4uIGFuZCBhY3R1YWxseSwgemVybyB3b3VsZCBjYXVzZVxuICAgICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24gc2luY2Ugd2Ugd291bGQgbWFrZSBubyBwcm9ncmVzcy5cbiAgICAgICAgaWYgKGFwcHJveFJlcy5pc1plcm8oKSkgYXBwcm94UmVzID0gT05FO1xuICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XG4gICAgICAgIHJlbSA9IHJlbS5zdWIoYXBwcm94UmVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBMb25nIGRpdmlkZWQgYnkgdGhlIHNwZWNpZmllZC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNkaXZpZGV9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gUXVvdGllbnRcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmRpdiA9IExvbmdQcm90b3R5cGUuZGl2aWRlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5tb2R1bG8gPSBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikge1xuICAgICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpIGRpdmlzb3IgPSBmcm9tVmFsdWUoZGl2aXNvcik7XG5cbiAgICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxuICAgICAgaWYgKHdhc20pIHtcbiAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbVtcInJlbV91XCJdIDogd2FzbVtcInJlbV9zXCJdKShcbiAgICAgICAgICB0aGlzLmxvdyxcbiAgICAgICAgICB0aGlzLmhpZ2gsXG4gICAgICAgICAgZGl2aXNvci5sb3csXG4gICAgICAgICAgZGl2aXNvci5oaWdoLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtW1wiZ2V0X2hpZ2hcIl0oKSwgdGhpcy51bnNpZ25lZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zdWIodGhpcy5kaXYoZGl2aXNvcikubXVsKGRpdmlzb3IpKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbW9kdWxvfS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUubW9kID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgTG9uZyBtb2R1bG8gdGhlIHNwZWNpZmllZC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtb2R1bG99LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfGJpZ2ludHxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5yZW0gPSBMb25nUHJvdG90eXBlLm1vZHVsbztcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2UgTk9UIG9mIHRoaXMgTG9uZy5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMgeyFMb25nfVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xuICAgICAgcmV0dXJuIGZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCwgdGhpcy51bnNpZ25lZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY291bnQgbGVhZGluZyB6ZXJvcyBvZiB0aGlzIExvbmcuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshbnVtYmVyfVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuY291bnRMZWFkaW5nWmVyb3MgPSBmdW5jdGlvbiBjb3VudExlYWRpbmdaZXJvcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhpZ2ggPyBNYXRoLmNsejMyKHRoaXMuaGlnaCkgOiBNYXRoLmNsejMyKHRoaXMubG93KSArIDMyO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGNvdW50IGxlYWRpbmcgemVyb3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjY291bnRMZWFkaW5nWmVyb3N9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7IUxvbmd9XG4gICAgICogQHJldHVybnMgeyFudW1iZXJ9XG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5jbHogPSBMb25nUHJvdG90eXBlLmNvdW50TGVhZGluZ1plcm9zO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBjb3VudCB0cmFpbGluZyB6ZXJvcyBvZiB0aGlzIExvbmcuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshbnVtYmVyfVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuY291bnRUcmFpbGluZ1plcm9zID0gZnVuY3Rpb24gY291bnRUcmFpbGluZ1plcm9zKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG93ID8gY3R6MzIodGhpcy5sb3cpIDogY3R6MzIodGhpcy5oaWdoKSArIDMyO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGNvdW50IHRyYWlsaW5nIHplcm9zLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2NvdW50VHJhaWxpbmdaZXJvc30uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHshTG9uZ31cbiAgICAgKiBAcmV0dXJucyB7IW51bWJlcn1cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLmN0eiA9IExvbmdQcm90b3R5cGUuY291bnRUcmFpbGluZ1plcm9zO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0geyFMb25nfG51bWJlcnxiaWdpbnR8c3RyaW5nfSBvdGhlciBPdGhlciBMb25nXG4gICAgICogQHJldHVybnMgeyFMb25nfVxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gYW5kKG90aGVyKSB7XG4gICAgICBpZiAoIWlzTG9uZyhvdGhlcikpIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcbiAgICAgIHJldHVybiBmcm9tQml0cyhcbiAgICAgICAgdGhpcy5sb3cgJiBvdGhlci5sb3csXG4gICAgICAgIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsXG4gICAgICAgIHRoaXMudW5zaWduZWQsXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE9SIG9mIHRoaXMgTG9uZyBhbmQgdGhlIHNwZWNpZmllZC5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xuICAgICAqIEByZXR1cm5zIHshTG9uZ31cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3Iob3RoZXIpIHtcbiAgICAgIGlmICghaXNMb25nKG90aGVyKSkgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xuICAgICAgcmV0dXJuIGZyb21CaXRzKFxuICAgICAgICB0aGlzLmxvdyB8IG90aGVyLmxvdyxcbiAgICAgICAgdGhpcy5oaWdoIHwgb3RoZXIuaGlnaCxcbiAgICAgICAgdGhpcy51bnNpZ25lZCxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJpdHdpc2UgWE9SIG9mIHRoaXMgTG9uZyBhbmQgdGhlIGdpdmVuIG9uZS5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8YmlnaW50fHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xuICAgICAqIEByZXR1cm5zIHshTG9uZ31cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcihvdGhlcikge1xuICAgICAgaWYgKCFpc0xvbmcob3RoZXIpKSBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XG4gICAgICByZXR1cm4gZnJvbUJpdHMoXG4gICAgICAgIHRoaXMubG93IF4gb3RoZXIubG93LFxuICAgICAgICB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoLFxuICAgICAgICB0aGlzLnVuc2lnbmVkLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgdGhlIGdpdmVuIGFtb3VudC5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHtcbiAgICAgIGlmIChpc0xvbmcobnVtQml0cykpIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XG4gICAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKSByZXR1cm4gdGhpcztcbiAgICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKFxuICAgICAgICAgIHRoaXMubG93IDw8IG51bUJpdHMsXG4gICAgICAgICAgKHRoaXMuaGlnaCA8PCBudW1CaXRzKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbnVtQml0cykpLFxuICAgICAgICAgIHRoaXMudW5zaWduZWQsXG4gICAgICAgICk7XG4gICAgICBlbHNlIHJldHVybiBmcm9tQml0cygwLCB0aGlzLmxvdyA8PCAobnVtQml0cyAtIDMyKSwgdGhpcy51bnNpZ25lZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc2hpZnRMZWZ0fS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xuICAgICAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LlxuICAgICAqIEB0aGlzIHshTG9uZ31cbiAgICAgKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xuICAgICAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gc2hpZnRSaWdodChudW1CaXRzKSB7XG4gICAgICBpZiAoaXNMb25nKG51bUJpdHMpKSBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xuICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhcbiAgICAgICAgICAodGhpcy5sb3cgPj4+IG51bUJpdHMpIHwgKHRoaXMuaGlnaCA8PCAoMzIgLSBudW1CaXRzKSksXG4gICAgICAgICAgdGhpcy5oaWdoID4+IG51bUJpdHMsXG4gICAgICAgICAgdGhpcy51bnNpZ25lZCxcbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKFxuICAgICAgICAgIHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSxcbiAgICAgICAgICB0aGlzLmhpZ2ggPj0gMCA/IDAgOiAtMSxcbiAgICAgICAgICB0aGlzLnVuc2lnbmVkLFxuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgYXJpdGhtZXRpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNzaGlmdFJpZ2h0fS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xuICAgICAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXG4gICAgICovXG4gICAgTG9uZ1Byb3RvdHlwZS5zaHIgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgbG9naWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAgICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHRVbnNpZ25lZChudW1CaXRzKSB7XG4gICAgICBpZiAoaXNMb25nKG51bUJpdHMpKSBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xuICAgICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgICBpZiAobnVtQml0cyA8IDMyKVxuICAgICAgICByZXR1cm4gZnJvbUJpdHMoXG4gICAgICAgICAgKHRoaXMubG93ID4+PiBudW1CaXRzKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbnVtQml0cykpLFxuICAgICAgICAgIHRoaXMuaGlnaCA+Pj4gbnVtQml0cyxcbiAgICAgICAgICB0aGlzLnVuc2lnbmVkLFxuICAgICAgICApO1xuICAgICAgaWYgKG51bUJpdHMgPT09IDMyKSByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoLCAwLCB0aGlzLnVuc2lnbmVkKTtcbiAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmhpZ2ggPj4+IChudW1CaXRzIC0gMzIpLCAwLCB0aGlzLnVuc2lnbmVkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuc2hydSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUuc2hyX3UgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyByb3RhdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAgICogQHJldHVybnMgeyFMb25nfSBSb3RhdGVkIExvbmdcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLnJvdGF0ZUxlZnQgPSBmdW5jdGlvbiByb3RhdGVMZWZ0KG51bUJpdHMpIHtcbiAgICAgIHZhciBiO1xuICAgICAgaWYgKGlzTG9uZyhudW1CaXRzKSkgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcbiAgICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApIHJldHVybiB0aGlzO1xuICAgICAgaWYgKG51bUJpdHMgPT09IDMyKSByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoLCB0aGlzLmxvdywgdGhpcy51bnNpZ25lZCk7XG4gICAgICBpZiAobnVtQml0cyA8IDMyKSB7XG4gICAgICAgIGIgPSAzMiAtIG51bUJpdHM7XG4gICAgICAgIHJldHVybiBmcm9tQml0cyhcbiAgICAgICAgICAodGhpcy5sb3cgPDwgbnVtQml0cykgfCAodGhpcy5oaWdoID4+PiBiKSxcbiAgICAgICAgICAodGhpcy5oaWdoIDw8IG51bUJpdHMpIHwgKHRoaXMubG93ID4+PiBiKSxcbiAgICAgICAgICB0aGlzLnVuc2lnbmVkLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbnVtQml0cyAtPSAzMjtcbiAgICAgIGIgPSAzMiAtIG51bUJpdHM7XG4gICAgICByZXR1cm4gZnJvbUJpdHMoXG4gICAgICAgICh0aGlzLmhpZ2ggPDwgbnVtQml0cykgfCAodGhpcy5sb3cgPj4+IGIpLFxuICAgICAgICAodGhpcy5sb3cgPDwgbnVtQml0cykgfCAodGhpcy5oaWdoID4+PiBiKSxcbiAgICAgICAgdGhpcy51bnNpZ25lZCxcbiAgICAgICk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgcm90YXRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3JvdGF0ZUxlZnR9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAgICogQHJldHVybnMgeyFMb25nfSBSb3RhdGVkIExvbmdcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLnJvdGwgPSBMb25nUHJvdG90eXBlLnJvdGF0ZUxlZnQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgcm90YXRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcbiAgICAgKiBAcmV0dXJucyB7IUxvbmd9IFJvdGF0ZWQgTG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUucm90YXRlUmlnaHQgPSBmdW5jdGlvbiByb3RhdGVSaWdodChudW1CaXRzKSB7XG4gICAgICB2YXIgYjtcbiAgICAgIGlmIChpc0xvbmcobnVtQml0cykpIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XG4gICAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKSByZXR1cm4gdGhpcztcbiAgICAgIGlmIChudW1CaXRzID09PSAzMikgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCwgdGhpcy5sb3csIHRoaXMudW5zaWduZWQpO1xuICAgICAgaWYgKG51bUJpdHMgPCAzMikge1xuICAgICAgICBiID0gMzIgLSBudW1CaXRzO1xuICAgICAgICByZXR1cm4gZnJvbUJpdHMoXG4gICAgICAgICAgKHRoaXMuaGlnaCA8PCBiKSB8ICh0aGlzLmxvdyA+Pj4gbnVtQml0cyksXG4gICAgICAgICAgKHRoaXMubG93IDw8IGIpIHwgKHRoaXMuaGlnaCA+Pj4gbnVtQml0cyksXG4gICAgICAgICAgdGhpcy51bnNpZ25lZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG51bUJpdHMgLT0gMzI7XG4gICAgICBiID0gMzIgLSBudW1CaXRzO1xuICAgICAgcmV0dXJuIGZyb21CaXRzKFxuICAgICAgICAodGhpcy5sb3cgPDwgYikgfCAodGhpcy5oaWdoID4+PiBudW1CaXRzKSxcbiAgICAgICAgKHRoaXMuaGlnaCA8PCBiKSB8ICh0aGlzLmxvdyA+Pj4gbnVtQml0cyksXG4gICAgICAgIHRoaXMudW5zaWduZWQsXG4gICAgICApO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHJvdGF0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjcm90YXRlUmlnaHR9LlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXG4gICAgICogQHJldHVybnMgeyFMb25nfSBSb3RhdGVkIExvbmdcbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLnJvdHIgPSBMb25nUHJvdG90eXBlLnJvdGF0ZVJpZ2h0O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhpcyBMb25nIHRvIHNpZ25lZC5cbiAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICogQHJldHVybnMgeyFMb25nfSBTaWduZWQgbG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHtcbiAgICAgIGlmICghdGhpcy51bnNpZ25lZCkgcmV0dXJuIHRoaXM7XG4gICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgZmFsc2UpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gdW5zaWduZWQuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshTG9uZ30gVW5zaWduZWQgbG9uZ1xuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7XG4gICAgICBpZiAodGhpcy51bnNpZ25lZCkgcmV0dXJuIHRoaXM7XG4gICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBpdHMgYnl0ZSByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBsZSBXaGV0aGVyIGxpdHRsZSBvciBiaWcgZW5kaWFuLCBkZWZhdWx0cyB0byBiaWcgZW5kaWFuXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJ5dGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBMb25nUHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKGxlKSB7XG4gICAgICByZXR1cm4gbGUgPyB0aGlzLnRvQnl0ZXNMRSgpIDogdGhpcy50b0J5dGVzQkUoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBsaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0xFID0gZnVuY3Rpb24gdG9CeXRlc0xFKCkge1xuICAgICAgdmFyIGhpID0gdGhpcy5oaWdoLFxuICAgICAgICBsbyA9IHRoaXMubG93O1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbG8gJiAweGZmLFxuICAgICAgICAobG8gPj4+IDgpICYgMHhmZixcbiAgICAgICAgKGxvID4+PiAxNikgJiAweGZmLFxuICAgICAgICBsbyA+Pj4gMjQsXG4gICAgICAgIGhpICYgMHhmZixcbiAgICAgICAgKGhpID4+PiA4KSAmIDB4ZmYsXG4gICAgICAgIChoaSA+Pj4gMTYpICYgMHhmZixcbiAgICAgICAgaGkgPj4+IDI0LFxuICAgICAgXTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBiaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXG4gICAgICogQHRoaXMgeyFMb25nfVxuICAgICAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIExvbmdQcm90b3R5cGUudG9CeXRlc0JFID0gZnVuY3Rpb24gdG9CeXRlc0JFKCkge1xuICAgICAgdmFyIGhpID0gdGhpcy5oaWdoLFxuICAgICAgICBsbyA9IHRoaXMubG93O1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgaGkgPj4+IDI0LFxuICAgICAgICAoaGkgPj4+IDE2KSAmIDB4ZmYsXG4gICAgICAgIChoaSA+Pj4gOCkgJiAweGZmLFxuICAgICAgICBoaSAmIDB4ZmYsXG4gICAgICAgIGxvID4+PiAyNCxcbiAgICAgICAgKGxvID4+PiAxNikgJiAweGZmLFxuICAgICAgICAobG8gPj4+IDgpICYgMHhmZixcbiAgICAgICAgbG8gJiAweGZmLFxuICAgICAgXTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgYnl0ZSByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQnl0ZSByZXByZXNlbnRhdGlvblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBsZSBXaGV0aGVyIGxpdHRsZSBvciBiaWcgZW5kaWFuLCBkZWZhdWx0cyB0byBiaWcgZW5kaWFuXG4gICAgICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcbiAgICAgKi9cbiAgICBMb25nLmZyb21CeXRlcyA9IGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlcywgdW5zaWduZWQsIGxlKSB7XG4gICAgICByZXR1cm4gbGVcbiAgICAgICAgPyBMb25nLmZyb21CeXRlc0xFKGJ5dGVzLCB1bnNpZ25lZClcbiAgICAgICAgOiBMb25nLmZyb21CeXRlc0JFKGJ5dGVzLCB1bnNpZ25lZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGxpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgTGl0dGxlIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXG4gICAgICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxuICAgICAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXG4gICAgICovXG4gICAgTG9uZy5mcm9tQnl0ZXNMRSA9IGZ1bmN0aW9uIGZyb21CeXRlc0xFKGJ5dGVzLCB1bnNpZ25lZCkge1xuICAgICAgcmV0dXJuIG5ldyBMb25nKFxuICAgICAgICBieXRlc1swXSB8IChieXRlc1sxXSA8PCA4KSB8IChieXRlc1syXSA8PCAxNikgfCAoYnl0ZXNbM10gPDwgMjQpLFxuICAgICAgICBieXRlc1s0XSB8IChieXRlc1s1XSA8PCA4KSB8IChieXRlc1s2XSA8PCAxNikgfCAoYnl0ZXNbN10gPDwgMjQpLFxuICAgICAgICB1bnNpZ25lZCxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXG4gICAgICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxuICAgICAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXG4gICAgICovXG4gICAgTG9uZy5mcm9tQnl0ZXNCRSA9IGZ1bmN0aW9uIGZyb21CeXRlc0JFKGJ5dGVzLCB1bnNpZ25lZCkge1xuICAgICAgcmV0dXJuIG5ldyBMb25nKFxuICAgICAgICAoYnl0ZXNbNF0gPDwgMjQpIHwgKGJ5dGVzWzVdIDw8IDE2KSB8IChieXRlc1s2XSA8PCA4KSB8IGJ5dGVzWzddLFxuICAgICAgICAoYnl0ZXNbMF0gPDwgMjQpIHwgKGJ5dGVzWzFdIDw8IDE2KSB8IChieXRlc1syXSA8PCA4KSB8IGJ5dGVzWzNdLFxuICAgICAgICB1bnNpZ25lZCxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFN1cHBvcnQgY29udmVyc2lvbiB0by9mcm9tIEJpZ0ludCB3aGVyZSBhdmFpbGFibGVcbiAgICBpZiAodHlwZW9mIEJpZ0ludCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvKipcbiAgICAgICAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gYmlnIGludGVnZXIuXG4gICAgICAgKiBAZnVuY3Rpb25cbiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgYmlnIGludGVnZXIgdmFsdWVcbiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcbiAgICAgICAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxuICAgICAgICovXG4gICAgICBMb25nLmZyb21CaWdJbnQgPSBmdW5jdGlvbiBmcm9tQmlnSW50KHZhbHVlLCB1bnNpZ25lZCkge1xuICAgICAgICB2YXIgbG93Qml0cyA9IE51bWJlcihCaWdJbnQuYXNJbnROKDMyLCB2YWx1ZSkpO1xuICAgICAgICB2YXIgaGlnaEJpdHMgPSBOdW1iZXIoQmlnSW50LmFzSW50TigzMiwgdmFsdWUgPj4gQmlnSW50KDMyKSkpO1xuICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIE92ZXJyaWRlXG4gICAgICBMb25nLmZyb21WYWx1ZSA9IGZ1bmN0aW9uIGZyb21WYWx1ZVdpdGhCaWdJbnQodmFsdWUsIHVuc2lnbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpIHJldHVybiBMb25nLmZyb21CaWdJbnQodmFsdWUsIHVuc2lnbmVkKTtcbiAgICAgICAgcmV0dXJuIGZyb21WYWx1ZSh2YWx1ZSwgdW5zaWduZWQpO1xuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBpdHMgYmlnIGludGVnZXIgcmVwcmVzZW50YXRpb24uXG4gICAgICAgKiBAdGhpcyB7IUxvbmd9XG4gICAgICAgKiBAcmV0dXJucyB7YmlnaW50fVxuICAgICAgICovXG4gICAgICBMb25nUHJvdG90eXBlLnRvQmlnSW50ID0gZnVuY3Rpb24gdG9CaWdJbnQoKSB7XG4gICAgICAgIHZhciBsb3dCaWdJbnQgPSBCaWdJbnQodGhpcy5sb3cgPj4+IDApO1xuICAgICAgICB2YXIgaGlnaEJpZ0ludCA9IEJpZ0ludCh0aGlzLnVuc2lnbmVkID8gdGhpcy5oaWdoID4+PiAwIDogdGhpcy5oaWdoKTtcbiAgICAgICAgcmV0dXJuIChoaWdoQmlnSW50IDw8IEJpZ0ludCgzMikpIHwgbG93QmlnSW50O1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIF9kZWZhdWx0ID0gKF9leHBvcnRzLmRlZmF1bHQgPSBMb25nKTtcbiAgfSxcbik7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubG9hZEZpbGVEZXNjcmlwdG9yU2V0RnJvbU9iamVjdCA9IGV4cG9ydHMubG9hZEZpbGVEZXNjcmlwdG9yU2V0RnJvbUJ1ZmZlciA9IGV4cG9ydHMuZnJvbUpTT04gPSBleHBvcnRzLmxvYWRTeW5jID0gZXhwb3J0cy5sb2FkID0gZXhwb3J0cy5JZGVtcG90ZW5jeUxldmVsID0gZXhwb3J0cy5pc0FueUV4dGVuc2lvbiA9IGV4cG9ydHMuTG9uZyA9IHZvaWQgMDtcbmNvbnN0IGNhbWVsQ2FzZSA9IHJlcXVpcmUoXCJsb2Rhc2guY2FtZWxjYXNlXCIpO1xuY29uc3QgUHJvdG9idWYgPSByZXF1aXJlKFwicHJvdG9idWZqc1wiKTtcbmNvbnN0IGRlc2NyaXB0b3IgPSByZXF1aXJlKFwicHJvdG9idWZqcy9leHQvZGVzY3JpcHRvclwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBMb25nID0gcmVxdWlyZShcImxvbmdcIik7XG5leHBvcnRzLkxvbmcgPSBMb25nO1xuZnVuY3Rpb24gaXNBbnlFeHRlbnNpb24ob2JqKSB7XG4gICAgcmV0dXJuICgnQHR5cGUnIGluIG9iaikgJiYgKHR5cGVvZiBvYmpbJ0B0eXBlJ10gPT09ICdzdHJpbmcnKTtcbn1cbmV4cG9ydHMuaXNBbnlFeHRlbnNpb24gPSBpc0FueUV4dGVuc2lvbjtcbnZhciBJZGVtcG90ZW5jeUxldmVsO1xuKGZ1bmN0aW9uIChJZGVtcG90ZW5jeUxldmVsKSB7XG4gICAgSWRlbXBvdGVuY3lMZXZlbFtcIklERU1QT1RFTkNZX1VOS05PV05cIl0gPSBcIklERU1QT1RFTkNZX1VOS05PV05cIjtcbiAgICBJZGVtcG90ZW5jeUxldmVsW1wiTk9fU0lERV9FRkZFQ1RTXCJdID0gXCJOT19TSURFX0VGRkVDVFNcIjtcbiAgICBJZGVtcG90ZW5jeUxldmVsW1wiSURFTVBPVEVOVFwiXSA9IFwiSURFTVBPVEVOVFwiO1xufSkoSWRlbXBvdGVuY3lMZXZlbCA9IGV4cG9ydHMuSWRlbXBvdGVuY3lMZXZlbCB8fCAoZXhwb3J0cy5JZGVtcG90ZW5jeUxldmVsID0ge30pKTtcbmNvbnN0IGRlc2NyaXB0b3JPcHRpb25zID0ge1xuICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgZW51bXM6IFN0cmluZyxcbiAgICBieXRlczogU3RyaW5nLFxuICAgIGRlZmF1bHRzOiB0cnVlLFxuICAgIG9uZW9mczogdHJ1ZSxcbiAgICBqc29uOiB0cnVlLFxufTtcbmZ1bmN0aW9uIGpvaW5OYW1lKGJhc2VOYW1lLCBuYW1lKSB7XG4gICAgaWYgKGJhc2VOYW1lID09PSAnJykge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBiYXNlTmFtZSArICcuJyArIG5hbWU7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNIYW5kbGVkUmVmbGVjdGlvbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gKG9iaiBpbnN0YW5jZW9mIFByb3RvYnVmLlNlcnZpY2UgfHxcbiAgICAgICAgb2JqIGluc3RhbmNlb2YgUHJvdG9idWYuVHlwZSB8fFxuICAgICAgICBvYmogaW5zdGFuY2VvZiBQcm90b2J1Zi5FbnVtKTtcbn1cbmZ1bmN0aW9uIGlzTmFtZXNwYWNlQmFzZShvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUHJvdG9idWYuTmFtZXNwYWNlIHx8IG9iaiBpbnN0YW5jZW9mIFByb3RvYnVmLlJvb3Q7XG59XG5mdW5jdGlvbiBnZXRBbGxIYW5kbGVkUmVmbGVjdGlvbk9iamVjdHMob2JqLCBwYXJlbnROYW1lKSB7XG4gICAgY29uc3Qgb2JqTmFtZSA9IGpvaW5OYW1lKHBhcmVudE5hbWUsIG9iai5uYW1lKTtcbiAgICBpZiAoaXNIYW5kbGVkUmVmbGVjdGlvbk9iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBbW29iak5hbWUsIG9ial1dO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGlzTmFtZXNwYWNlQmFzZShvYmopICYmIHR5cGVvZiBvYmoubmVzdGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iai5uZXN0ZWQpXG4gICAgICAgICAgICAgICAgLm1hcChuYW1lID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0QWxsSGFuZGxlZFJlZmxlY3Rpb25PYmplY3RzKG9iai5uZXN0ZWRbbmFtZV0sIG9iak5hbWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvci5jb25jYXQoY3VycmVudFZhbHVlKSwgW10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlc2VyaWFsaXplcihjbHMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVzZXJpYWxpemUoYXJnQnVmKSB7XG4gICAgICAgIHJldHVybiBjbHMudG9PYmplY3QoY2xzLmRlY29kZShhcmdCdWYpLCBvcHRpb25zKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXplcihjbHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc2VyaWFsaXplKGFyZykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXJpYWxpemUgbWVzc2FnZTogZXhwZWN0ZWQgb2JqZWN0IHdpdGggJHtjbHMubmFtZX0gc3RydWN0dXJlLCBnb3QgYXJyYXkgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBjbHMuZnJvbU9iamVjdChhcmcpO1xuICAgICAgICByZXR1cm4gY2xzLmVuY29kZShtZXNzYWdlKS5maW5pc2goKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWFwTWV0aG9kT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIChvcHRpb25zIHx8IFtdKS5yZWR1Y2UoKG9iaiwgaXRlbSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpdGVtKSkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmludGVycHJldGVkX29wdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIG9iai51bmludGVycHJldGVkX29wdGlvbi5wdXNoKGl0ZW0udW5pbnRlcnByZXRlZF9vcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge1xuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgaWRlbXBvdGVuY3lfbGV2ZWw6IElkZW1wb3RlbmN5TGV2ZWwuSURFTVBPVEVOQ1lfVU5LTk9XTixcbiAgICAgICAgdW5pbnRlcnByZXRlZF9vcHRpb246IFtdLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlTWV0aG9kRGVmaW5pdGlvbihtZXRob2QsIHNlcnZpY2VOYW1lLCBvcHRpb25zLCBmaWxlRGVzY3JpcHRvcnMpIHtcbiAgICAvKiBUaGlzIGlzIG9ubHkgZXZlciBjYWxsZWQgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgcm9vdC5yZXNvbHZlQWxsKCksIHNvIHdlXG4gICAgICogY2FuIGFzc3VtZSB0aGF0IHRoZSByZXNvbHZlZCByZXF1ZXN0IGFuZCByZXNwb25zZSB0eXBlcyBhcmUgbm9uLW51bGwgKi9cbiAgICBjb25zdCByZXF1ZXN0VHlwZSA9IG1ldGhvZC5yZXNvbHZlZFJlcXVlc3RUeXBlO1xuICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IG1ldGhvZC5yZXNvbHZlZFJlc3BvbnNlVHlwZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiAnLycgKyBzZXJ2aWNlTmFtZSArICcvJyArIG1ldGhvZC5uYW1lLFxuICAgICAgICByZXF1ZXN0U3RyZWFtOiAhIW1ldGhvZC5yZXF1ZXN0U3RyZWFtLFxuICAgICAgICByZXNwb25zZVN0cmVhbTogISFtZXRob2QucmVzcG9uc2VTdHJlYW0sXG4gICAgICAgIHJlcXVlc3RTZXJpYWxpemU6IGNyZWF0ZVNlcmlhbGl6ZXIocmVxdWVzdFR5cGUpLFxuICAgICAgICByZXF1ZXN0RGVzZXJpYWxpemU6IGNyZWF0ZURlc2VyaWFsaXplcihyZXF1ZXN0VHlwZSwgb3B0aW9ucyksXG4gICAgICAgIHJlc3BvbnNlU2VyaWFsaXplOiBjcmVhdGVTZXJpYWxpemVyKHJlc3BvbnNlVHlwZSksXG4gICAgICAgIHJlc3BvbnNlRGVzZXJpYWxpemU6IGNyZWF0ZURlc2VyaWFsaXplcihyZXNwb25zZVR5cGUsIG9wdGlvbnMpLFxuICAgICAgICAvLyBUT0RPKG11cmdhdHJvaWQ5OSk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzXG4gICAgICAgIG9yaWdpbmFsTmFtZTogY2FtZWxDYXNlKG1ldGhvZC5uYW1lKSxcbiAgICAgICAgcmVxdWVzdFR5cGU6IGNyZWF0ZU1lc3NhZ2VEZWZpbml0aW9uKHJlcXVlc3RUeXBlLCBvcHRpb25zLCBmaWxlRGVzY3JpcHRvcnMpLFxuICAgICAgICByZXNwb25zZVR5cGU6IGNyZWF0ZU1lc3NhZ2VEZWZpbml0aW9uKHJlc3BvbnNlVHlwZSwgb3B0aW9ucywgZmlsZURlc2NyaXB0b3JzKSxcbiAgICAgICAgb3B0aW9uczogbWFwTWV0aG9kT3B0aW9ucyhtZXRob2QucGFyc2VkT3B0aW9ucyksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VEZWZpbml0aW9uKHNlcnZpY2UsIG5hbWUsIG9wdGlvbnMsIGZpbGVEZXNjcmlwdG9ycykge1xuICAgIGNvbnN0IGRlZiA9IHt9O1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIHNlcnZpY2UubWV0aG9kc0FycmF5KSB7XG4gICAgICAgIGRlZlttZXRob2QubmFtZV0gPSBjcmVhdGVNZXRob2REZWZpbml0aW9uKG1ldGhvZCwgbmFtZSwgb3B0aW9ucywgZmlsZURlc2NyaXB0b3JzKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU1lc3NhZ2VEZWZpbml0aW9uKG1lc3NhZ2UsIG9wdGlvbnMsIGZpbGVEZXNjcmlwdG9ycykge1xuICAgIGNvbnN0IG1lc3NhZ2VEZXNjcmlwdG9yID0gbWVzc2FnZS50b0Rlc2NyaXB0b3IoJ3Byb3RvMycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdDogJ1Byb3RvY29sIEJ1ZmZlciAzIERlc2NyaXB0b3JQcm90bycsXG4gICAgICAgIHR5cGU6IG1lc3NhZ2VEZXNjcmlwdG9yLiR0eXBlLnRvT2JqZWN0KG1lc3NhZ2VEZXNjcmlwdG9yLCBkZXNjcmlwdG9yT3B0aW9ucyksXG4gICAgICAgIGZpbGVEZXNjcmlwdG9yUHJvdG9zOiBmaWxlRGVzY3JpcHRvcnMsXG4gICAgICAgIHNlcmlhbGl6ZTogY3JlYXRlU2VyaWFsaXplcihtZXNzYWdlKSxcbiAgICAgICAgZGVzZXJpYWxpemU6IGNyZWF0ZURlc2VyaWFsaXplcihtZXNzYWdlLCBvcHRpb25zKVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVFbnVtRGVmaW5pdGlvbihlbnVtVHlwZSwgZmlsZURlc2NyaXB0b3JzKSB7XG4gICAgY29uc3QgZW51bURlc2NyaXB0b3IgPSBlbnVtVHlwZS50b0Rlc2NyaXB0b3IoJ3Byb3RvMycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdDogJ1Byb3RvY29sIEJ1ZmZlciAzIEVudW1EZXNjcmlwdG9yUHJvdG8nLFxuICAgICAgICB0eXBlOiBlbnVtRGVzY3JpcHRvci4kdHlwZS50b09iamVjdChlbnVtRGVzY3JpcHRvciwgZGVzY3JpcHRvck9wdGlvbnMpLFxuICAgICAgICBmaWxlRGVzY3JpcHRvclByb3RvczogZmlsZURlc2NyaXB0b3JzLFxuICAgIH07XG59XG4vKipcbiAqIGZ1bmN0aW9uIGNyZWF0ZURlZmluaXRpb24ob2JqOiBQcm90b2J1Zi5TZXJ2aWNlLCBuYW1lOiBzdHJpbmcsIG9wdGlvbnM6XG4gKiBPcHRpb25zKTogU2VydmljZURlZmluaXRpb247IGZ1bmN0aW9uIGNyZWF0ZURlZmluaXRpb24ob2JqOiBQcm90b2J1Zi5UeXBlLFxuICogbmFtZTogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKTogTWVzc2FnZVR5cGVEZWZpbml0aW9uOyBmdW5jdGlvblxuICogY3JlYXRlRGVmaW5pdGlvbihvYmo6IFByb3RvYnVmLkVudW0sIG5hbWU6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucyk6XG4gKiBFbnVtVHlwZURlZmluaXRpb247XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURlZmluaXRpb24ob2JqLCBuYW1lLCBvcHRpb25zLCBmaWxlRGVzY3JpcHRvcnMpIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgUHJvdG9idWYuU2VydmljZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlU2VydmljZURlZmluaXRpb24ob2JqLCBuYW1lLCBvcHRpb25zLCBmaWxlRGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBQcm90b2J1Zi5UeXBlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlRGVmaW5pdGlvbihvYmosIG9wdGlvbnMsIGZpbGVEZXNjcmlwdG9ycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFByb3RvYnVmLkVudW0pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVudW1EZWZpbml0aW9uKG9iaiwgZmlsZURlc2NyaXB0b3JzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSBtaXNtYXRjaCBpbiByZWZsZWN0aW9uIG9iamVjdCBoYW5kbGluZycpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhY2thZ2VEZWZpbml0aW9uKHJvb3QsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWYgPSB7fTtcbiAgICByb290LnJlc29sdmVBbGwoKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yTGlzdCA9IHJvb3QudG9EZXNjcmlwdG9yKCdwcm90bzMnKS5maWxlO1xuICAgIGNvbnN0IGJ1ZmZlckxpc3QgPSBkZXNjcmlwdG9yTGlzdC5tYXAodmFsdWUgPT4gQnVmZmVyLmZyb20oZGVzY3JpcHRvci5GaWxlRGVzY3JpcHRvclByb3RvLmVuY29kZSh2YWx1ZSkuZmluaXNoKCkpKTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBvYmpdIG9mIGdldEFsbEhhbmRsZWRSZWZsZWN0aW9uT2JqZWN0cyhyb290LCAnJykpIHtcbiAgICAgICAgZGVmW25hbWVdID0gY3JlYXRlRGVmaW5pdGlvbihvYmosIG5hbWUsIG9wdGlvbnMsIGJ1ZmZlckxpc3QpO1xuICAgIH1cbiAgICByZXR1cm4gZGVmO1xufVxuZnVuY3Rpb24gY3JlYXRlUGFja2FnZURlZmluaXRpb25Gcm9tRGVzY3JpcHRvclNldChkZWNvZGVkRGVzY3JpcHRvclNldCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJvb3QgPSBQcm90b2J1Zi5Sb290LmZyb21EZXNjcmlwdG9yKGRlY29kZWREZXNjcmlwdG9yU2V0KTtcbiAgICByb290LnJlc29sdmVBbGwoKTtcbiAgICByZXR1cm4gY3JlYXRlUGFja2FnZURlZmluaXRpb24ocm9vdCwgb3B0aW9ucyk7XG59XG4vKipcbiAqIExvYWQgYSAucHJvdG8gZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy5cbiAqIEBwYXJhbSBmaWxlbmFtZSBPbmUgb3IgbXVsdGlwbGUgZmlsZSBwYXRocyB0byBsb2FkLiBDYW4gYmUgYW4gYWJzb2x1dGUgcGF0aFxuICogICAgIG9yIHJlbGF0aXZlIHRvIGFuIGluY2x1ZGUgcGF0aC5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBDYXNlIFByZXNlcnZlIGZpZWxkIG5hbWVzLiBUaGUgZGVmYXVsdCBpcyB0byBjaGFuZ2UgdGhlbVxuICogICAgIHRvIGNhbWVsIGNhc2UuXG4gKiBAcGFyYW0gb3B0aW9ucy5sb25ncyBUaGUgdHlwZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHJlcHJlc2VudCBgbG9uZ2AgdmFsdWVzLlxuICogICAgIFZhbGlkIG9wdGlvbnMgYXJlIGBOdW1iZXJgIGFuZCBgU3RyaW5nYC4gRGVmYXVsdHMgdG8gYSBgTG9uZ2Agb2JqZWN0IHR5cGVcbiAqICAgICBmcm9tIGEgbGlicmFyeS5cbiAqIEBwYXJhbSBvcHRpb25zLmVudW1zIFRoZSB0eXBlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcmVwcmVzZW50IGBlbnVtYCB2YWx1ZXMuXG4gKiAgICAgVGhlIG9ubHkgdmFsaWQgb3B0aW9uIGlzIGBTdHJpbmdgLiBEZWZhdWx0cyB0byB0aGUgbnVtZXJpYyB2YWx1ZS5cbiAqIEBwYXJhbSBvcHRpb25zLmJ5dGVzIFRoZSB0eXBlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcmVwcmVzZW50IGBieXRlc2BcbiAqICAgICB2YWx1ZXMuIFZhbGlkIG9wdGlvbnMgYXJlIGBBcnJheWAgYW5kIGBTdHJpbmdgLiBUaGUgZGVmYXVsdCBpcyB0byB1c2VcbiAqICAgICBgQnVmZmVyYC5cbiAqIEBwYXJhbSBvcHRpb25zLmRlZmF1bHRzIFNldCBkZWZhdWx0IHZhbHVlcyBvbiBvdXRwdXQgb2JqZWN0cy4gRGVmYXVsdHMgdG9cbiAqICAgICBgZmFsc2VgLlxuICogQHBhcmFtIG9wdGlvbnMuYXJyYXlzIFNldCBlbXB0eSBhcnJheXMgZm9yIG1pc3NpbmcgYXJyYXkgdmFsdWVzIGV2ZW4gaWZcbiAqICAgICBgZGVmYXVsdHNgIGlzIGBmYWxzZWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gKiBAcGFyYW0gb3B0aW9ucy5vYmplY3RzIFNldCBlbXB0eSBvYmplY3RzIGZvciBtaXNzaW5nIG9iamVjdCB2YWx1ZXMgZXZlbiBpZlxuICogICAgIGBkZWZhdWx0c2AgaXMgYGZhbHNlYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqIEBwYXJhbSBvcHRpb25zLm9uZW9mcyBTZXQgdmlydHVhbCBvbmVvZiBwcm9wZXJ0aWVzIHRvIHRoZSBwcmVzZW50IGZpZWxkJ3NcbiAqICAgICBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucy5qc29uIFJlcHJlc2VudCBJbmZpbml0eSBhbmQgTmFOIGFzIHN0cmluZ3MgaW4gZmxvYXQgZmllbGRzLFxuICogICAgIGFuZCBhdXRvbWF0aWNhbGx5IGRlY29kZSBnb29nbGUucHJvdG9idWYuQW55IHZhbHVlcy5cbiAqIEBwYXJhbSBvcHRpb25zLmluY2x1ZGVEaXJzIFBhdGhzIHRvIHNlYXJjaCBmb3IgaW1wb3J0ZWQgYC5wcm90b2AgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIGxvYWQoZmlsZW5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIHV0aWxfMS5sb2FkUHJvdG9zV2l0aE9wdGlvbnMpKGZpbGVuYW1lLCBvcHRpb25zKS50aGVuKGxvYWRlZFJvb3QgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlUGFja2FnZURlZmluaXRpb24obG9hZGVkUm9vdCwgb3B0aW9ucyk7XG4gICAgfSk7XG59XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZnVuY3Rpb24gbG9hZFN5bmMoZmlsZW5hbWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBsb2FkZWRSb290ID0gKDAsIHV0aWxfMS5sb2FkUHJvdG9zV2l0aE9wdGlvbnNTeW5jKShmaWxlbmFtZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGNyZWF0ZVBhY2thZ2VEZWZpbml0aW9uKGxvYWRlZFJvb3QsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5sb2FkU3luYyA9IGxvYWRTeW5jO1xuZnVuY3Rpb24gZnJvbUpTT04oanNvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGxvYWRlZFJvb3QgPSBQcm90b2J1Zi5Sb290LmZyb21KU09OKGpzb24pO1xuICAgIGxvYWRlZFJvb3QucmVzb2x2ZUFsbCgpO1xuICAgIHJldHVybiBjcmVhdGVQYWNrYWdlRGVmaW5pdGlvbihsb2FkZWRSb290LCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuZnJvbUpTT04gPSBmcm9tSlNPTjtcbmZ1bmN0aW9uIGxvYWRGaWxlRGVzY3JpcHRvclNldEZyb21CdWZmZXIoZGVzY3JpcHRvclNldCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlY29kZWREZXNjcmlwdG9yU2V0ID0gZGVzY3JpcHRvci5GaWxlRGVzY3JpcHRvclNldC5kZWNvZGUoZGVzY3JpcHRvclNldCk7XG4gICAgcmV0dXJuIGNyZWF0ZVBhY2thZ2VEZWZpbml0aW9uRnJvbURlc2NyaXB0b3JTZXQoZGVjb2RlZERlc2NyaXB0b3JTZXQsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5sb2FkRmlsZURlc2NyaXB0b3JTZXRGcm9tQnVmZmVyID0gbG9hZEZpbGVEZXNjcmlwdG9yU2V0RnJvbUJ1ZmZlcjtcbmZ1bmN0aW9uIGxvYWRGaWxlRGVzY3JpcHRvclNldEZyb21PYmplY3QoZGVzY3JpcHRvclNldCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlY29kZWREZXNjcmlwdG9yU2V0ID0gZGVzY3JpcHRvci5GaWxlRGVzY3JpcHRvclNldC5mcm9tT2JqZWN0KGRlc2NyaXB0b3JTZXQpO1xuICAgIHJldHVybiBjcmVhdGVQYWNrYWdlRGVmaW5pdGlvbkZyb21EZXNjcmlwdG9yU2V0KGRlY29kZWREZXNjcmlwdG9yU2V0LCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubG9hZEZpbGVEZXNjcmlwdG9yU2V0RnJvbU9iamVjdCA9IGxvYWRGaWxlRGVzY3JpcHRvclNldEZyb21PYmplY3Q7XG4oMCwgdXRpbF8xLmFkZENvbW1vblByb3RvcykoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjEgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnaXN0ZXJDaGFubmVselNvY2tldCA9IGV4cG9ydHMucmVnaXN0ZXJDaGFubmVselNlcnZlciA9IGV4cG9ydHMucmVnaXN0ZXJDaGFubmVselN1YmNoYW5uZWwgPSBleHBvcnRzLnJlZ2lzdGVyQ2hhbm5lbHpDaGFubmVsID0gZXhwb3J0cy5DaGFubmVsekNhbGxUcmFja2VyU3R1YiA9IGV4cG9ydHMuQ2hhbm5lbHpDYWxsVHJhY2tlciA9IGV4cG9ydHMuQ2hhbm5lbHpDaGlsZHJlblRyYWNrZXJTdHViID0gZXhwb3J0cy5DaGFubmVsekNoaWxkcmVuVHJhY2tlciA9IGV4cG9ydHMuQ2hhbm5lbHpUcmFjZSA9IGV4cG9ydHMuQ2hhbm5lbHpUcmFjZVN0dWIgPSB2b2lkIDA7XG5leHBvcnRzLnVucmVnaXN0ZXJDaGFubmVselJlZiA9IHVucmVnaXN0ZXJDaGFubmVselJlZjtcbmV4cG9ydHMuZ2V0Q2hhbm5lbHpIYW5kbGVycyA9IGdldENoYW5uZWx6SGFuZGxlcnM7XG5leHBvcnRzLmdldENoYW5uZWx6U2VydmljZURlZmluaXRpb24gPSBnZXRDaGFubmVselNlcnZpY2VEZWZpbml0aW9uO1xuZXhwb3J0cy5zZXR1cCA9IHNldHVwO1xuY29uc3QgbmV0XzEgPSByZXF1aXJlKFwibmV0XCIpO1xuY29uc3Qgb3JkZXJlZF9tYXBfMSA9IHJlcXVpcmUoXCJAanMtc2RzbC9vcmRlcmVkLW1hcFwiKTtcbmNvbnN0IGNvbm5lY3Rpdml0eV9zdGF0ZV8xID0gcmVxdWlyZShcIi4vY29ubmVjdGl2aXR5LXN0YXRlXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBzdWJjaGFubmVsX2FkZHJlc3NfMSA9IHJlcXVpcmUoXCIuL3N1YmNoYW5uZWwtYWRkcmVzc1wiKTtcbmNvbnN0IGFkbWluXzEgPSByZXF1aXJlKFwiLi9hZG1pblwiKTtcbmNvbnN0IG1ha2VfY2xpZW50XzEgPSByZXF1aXJlKFwiLi9tYWtlLWNsaWVudFwiKTtcbmZ1bmN0aW9uIGNoYW5uZWxSZWZUb01lc3NhZ2UocmVmKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbm5lbF9pZDogcmVmLmlkLFxuICAgICAgICBuYW1lOiByZWYubmFtZSxcbiAgICB9O1xufVxuZnVuY3Rpb24gc3ViY2hhbm5lbFJlZlRvTWVzc2FnZShyZWYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdWJjaGFubmVsX2lkOiByZWYuaWQsXG4gICAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgIH07XG59XG5mdW5jdGlvbiBzZXJ2ZXJSZWZUb01lc3NhZ2UocmVmKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmVyX2lkOiByZWYuaWQsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNvY2tldFJlZlRvTWVzc2FnZShyZWYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzb2NrZXRfaWQ6IHJlZi5pZCxcbiAgICAgICAgbmFtZTogcmVmLm5hbWUsXG4gICAgfTtcbn1cbi8qKlxuICogVGhlIGxvb3NlIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIHJldGFpbmVkIGluIGFcbiAqIHRyYWNlLiBUaGlzIG1heSBiZSBleGNlZWRlZCBieSB1cCB0byBhIGZhY3RvciBvZiAyLiBBcmJpdHJhcmlseSBjaG9zZW4gYXMgYVxuICogbnVtYmVyIHRoYXQgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSByZWNlbnQgcmVsZXZhbnRcbiAqIGluZm9ybWF0aW9uLCBidXQgc21hbGwgZW5vdWdoIHRvIG5vdCB1c2UgZXhjZXNzaXZlIG1lbW9yeS5cbiAqL1xuY29uc3QgVEFSR0VUX1JFVEFJTkVEX1RSQUNFUyA9IDMyO1xuLyoqXG4gKiBEZWZhdWx0IG51bWJlciBvZiBzb2NrZXRzL3NlcnZlcnMvY2hhbm5lbHMvc3ViY2hhbm5lbHMgdG8gcmV0dXJuXG4gKi9cbmNvbnN0IERFRkFVTFRfTUFYX1JFU1VMVFMgPSAxMDA7XG5jbGFzcyBDaGFubmVselRyYWNlU3R1YiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuY3JlYXRpb25UaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmV2ZW50c0xvZ2dlZCA9IDA7XG4gICAgfVxuICAgIGFkZFRyYWNlKCkgeyB9XG4gICAgZ2V0VHJhY2VNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3JlYXRpb25fdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcCh0aGlzLmNyZWF0aW9uVGltZXN0YW1wKSxcbiAgICAgICAgICAgIG51bV9ldmVudHNfbG9nZ2VkOiB0aGlzLmV2ZW50c0xvZ2dlZCxcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5DaGFubmVselRyYWNlU3R1YiA9IENoYW5uZWx6VHJhY2VTdHViO1xuY2xhc3MgQ2hhbm5lbHpUcmFjZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuZXZlbnRzTG9nZ2VkID0gMDtcbiAgICAgICAgdGhpcy5jcmVhdGlvblRpbWVzdGFtcCA9IG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIGFkZFRyYWNlKHNldmVyaXR5LCBkZXNjcmlwdGlvbiwgY2hpbGQpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHksXG4gICAgICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgIGNoaWxkQ2hhbm5lbDogKGNoaWxkID09PSBudWxsIHx8IGNoaWxkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGlsZC5raW5kKSA9PT0gJ2NoYW5uZWwnID8gY2hpbGQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjaGlsZFN1YmNoYW5uZWw6IChjaGlsZCA9PT0gbnVsbCB8fCBjaGlsZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hpbGQua2luZCkgPT09ICdzdWJjaGFubmVsJyA/IGNoaWxkIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHRyYWNlIGFycmF5IGdldHMgdG9vIGxhcmdlLCBkaXNjYXJkIHRoZSBmaXJzdCBoYWxmXG4gICAgICAgIGlmICh0aGlzLmV2ZW50cy5sZW5ndGggPj0gVEFSR0VUX1JFVEFJTkVEX1RSQUNFUyAqIDIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMuc2xpY2UoVEFSR0VUX1JFVEFJTkVEX1RSQUNFUyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudHNMb2dnZWQgKz0gMTtcbiAgICB9XG4gICAgZ2V0VHJhY2VNZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3JlYXRpb25fdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcCh0aGlzLmNyZWF0aW9uVGltZXN0YW1wKSxcbiAgICAgICAgICAgIG51bV9ldmVudHNfbG9nZ2VkOiB0aGlzLmV2ZW50c0xvZ2dlZCxcbiAgICAgICAgICAgIGV2ZW50czogdGhpcy5ldmVudHMubWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiBldmVudC5zZXZlcml0eSxcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcChldmVudC50aW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsX3JlZjogZXZlbnQuY2hpbGRDaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoYW5uZWxSZWZUb01lc3NhZ2UoZXZlbnQuY2hpbGRDaGFubmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzdWJjaGFubmVsX3JlZjogZXZlbnQuY2hpbGRTdWJjaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN1YmNoYW5uZWxSZWZUb01lc3NhZ2UoZXZlbnQuY2hpbGRTdWJjaGFubmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkNoYW5uZWx6VHJhY2UgPSBDaGFubmVselRyYWNlO1xuY2xhc3MgQ2hhbm5lbHpDaGlsZHJlblRyYWNrZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoYW5uZWxDaGlsZHJlbiA9IG5ldyBvcmRlcmVkX21hcF8xLk9yZGVyZWRNYXAoKTtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsQ2hpbGRyZW4gPSBuZXcgb3JkZXJlZF9tYXBfMS5PcmRlcmVkTWFwKCk7XG4gICAgICAgIHRoaXMuc29ja2V0Q2hpbGRyZW4gPSBuZXcgb3JkZXJlZF9tYXBfMS5PcmRlcmVkTWFwKCk7XG4gICAgICAgIHRoaXMudHJhY2tlck1hcCA9IHtcbiAgICAgICAgICAgIFtcImNoYW5uZWxcIiAvKiBFbnRpdHlUeXBlcy5jaGFubmVsICovXTogdGhpcy5jaGFubmVsQ2hpbGRyZW4sXG4gICAgICAgICAgICBbXCJzdWJjaGFubmVsXCIgLyogRW50aXR5VHlwZXMuc3ViY2hhbm5lbCAqL106IHRoaXMuc3ViY2hhbm5lbENoaWxkcmVuLFxuICAgICAgICAgICAgW1wic29ja2V0XCIgLyogRW50aXR5VHlwZXMuc29ja2V0ICovXTogdGhpcy5zb2NrZXRDaGlsZHJlbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVmQ2hpbGQoY2hpbGQpIHtcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IHRoaXMudHJhY2tlck1hcFtjaGlsZC5raW5kXTtcbiAgICAgICAgY29uc3QgdHJhY2tlZENoaWxkID0gdHJhY2tlci5maW5kKGNoaWxkLmlkKTtcbiAgICAgICAgaWYgKHRyYWNrZWRDaGlsZC5lcXVhbHModHJhY2tlci5lbmQoKSkpIHtcbiAgICAgICAgICAgIHRyYWNrZXIuc2V0RWxlbWVudChjaGlsZC5pZCwge1xuICAgICAgICAgICAgICAgIHJlZjogY2hpbGQsXG4gICAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICB9LCB0cmFja2VkQ2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHJhY2tlZENoaWxkLnBvaW50ZXJbMV0uY291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bnJlZkNoaWxkKGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSB0aGlzLnRyYWNrZXJNYXBbY2hpbGQua2luZF07XG4gICAgICAgIGNvbnN0IHRyYWNrZWRDaGlsZCA9IHRyYWNrZXIuZ2V0RWxlbWVudEJ5S2V5KGNoaWxkLmlkKTtcbiAgICAgICAgaWYgKHRyYWNrZWRDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0cmFja2VkQ2hpbGQuY291bnQgLT0gMTtcbiAgICAgICAgICAgIGlmICh0cmFja2VkQ2hpbGQuY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0cmFja2VyLmVyYXNlRWxlbWVudEJ5S2V5KGNoaWxkLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDaGlsZExpc3RzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hhbm5lbHM6IHRoaXMuY2hhbm5lbENoaWxkcmVuLFxuICAgICAgICAgICAgc3ViY2hhbm5lbHM6IHRoaXMuc3ViY2hhbm5lbENoaWxkcmVuLFxuICAgICAgICAgICAgc29ja2V0czogdGhpcy5zb2NrZXRDaGlsZHJlbixcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkNoYW5uZWx6Q2hpbGRyZW5UcmFja2VyID0gQ2hhbm5lbHpDaGlsZHJlblRyYWNrZXI7XG5jbGFzcyBDaGFubmVsekNoaWxkcmVuVHJhY2tlclN0dWIgZXh0ZW5kcyBDaGFubmVsekNoaWxkcmVuVHJhY2tlciB7XG4gICAgcmVmQ2hpbGQoKSB7IH1cbiAgICB1bnJlZkNoaWxkKCkgeyB9XG59XG5leHBvcnRzLkNoYW5uZWx6Q2hpbGRyZW5UcmFja2VyU3R1YiA9IENoYW5uZWx6Q2hpbGRyZW5UcmFja2VyU3R1YjtcbmNsYXNzIENoYW5uZWx6Q2FsbFRyYWNrZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNhbGxzU3RhcnRlZCA9IDA7XG4gICAgICAgIHRoaXMuY2FsbHNTdWNjZWVkZWQgPSAwO1xuICAgICAgICB0aGlzLmNhbGxzRmFpbGVkID0gMDtcbiAgICAgICAgdGhpcy5sYXN0Q2FsbFN0YXJ0ZWRUaW1lc3RhbXAgPSBudWxsO1xuICAgIH1cbiAgICBhZGRDYWxsU3RhcnRlZCgpIHtcbiAgICAgICAgdGhpcy5jYWxsc1N0YXJ0ZWQgKz0gMTtcbiAgICAgICAgdGhpcy5sYXN0Q2FsbFN0YXJ0ZWRUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBhZGRDYWxsU3VjY2VlZGVkKCkge1xuICAgICAgICB0aGlzLmNhbGxzU3VjY2VlZGVkICs9IDE7XG4gICAgfVxuICAgIGFkZENhbGxGYWlsZWQoKSB7XG4gICAgICAgIHRoaXMuY2FsbHNGYWlsZWQgKz0gMTtcbiAgICB9XG59XG5leHBvcnRzLkNoYW5uZWx6Q2FsbFRyYWNrZXIgPSBDaGFubmVsekNhbGxUcmFja2VyO1xuY2xhc3MgQ2hhbm5lbHpDYWxsVHJhY2tlclN0dWIgZXh0ZW5kcyBDaGFubmVsekNhbGxUcmFja2VyIHtcbiAgICBhZGRDYWxsU3RhcnRlZCgpIHsgfVxuICAgIGFkZENhbGxTdWNjZWVkZWQoKSB7IH1cbiAgICBhZGRDYWxsRmFpbGVkKCkgeyB9XG59XG5leHBvcnRzLkNoYW5uZWx6Q2FsbFRyYWNrZXJTdHViID0gQ2hhbm5lbHpDYWxsVHJhY2tlclN0dWI7XG5jb25zdCBlbnRpdHlNYXBzID0ge1xuICAgIFtcImNoYW5uZWxcIiAvKiBFbnRpdHlUeXBlcy5jaGFubmVsICovXTogbmV3IG9yZGVyZWRfbWFwXzEuT3JkZXJlZE1hcCgpLFxuICAgIFtcInN1YmNoYW5uZWxcIiAvKiBFbnRpdHlUeXBlcy5zdWJjaGFubmVsICovXTogbmV3IG9yZGVyZWRfbWFwXzEuT3JkZXJlZE1hcCgpLFxuICAgIFtcInNlcnZlclwiIC8qIEVudGl0eVR5cGVzLnNlcnZlciAqL106IG5ldyBvcmRlcmVkX21hcF8xLk9yZGVyZWRNYXAoKSxcbiAgICBbXCJzb2NrZXRcIiAvKiBFbnRpdHlUeXBlcy5zb2NrZXQgKi9dOiBuZXcgb3JkZXJlZF9tYXBfMS5PcmRlcmVkTWFwKCksXG59O1xuY29uc3QgZ2VuZXJhdGVSZWdpc3RlckZuID0gKGtpbmQpID0+IHtcbiAgICBsZXQgbmV4dElkID0gMTtcbiAgICBmdW5jdGlvbiBnZXROZXh0SWQoKSB7XG4gICAgICAgIHJldHVybiBuZXh0SWQrKztcbiAgICB9XG4gICAgY29uc3QgZW50aXR5TWFwID0gZW50aXR5TWFwc1traW5kXTtcbiAgICByZXR1cm4gKG5hbWUsIGdldEluZm8sIGNoYW5uZWx6RW5hYmxlZCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdldE5leHRJZCgpO1xuICAgICAgICBjb25zdCByZWYgPSB7IGlkLCBuYW1lLCBraW5kIH07XG4gICAgICAgIGlmIChjaGFubmVsekVuYWJsZWQpIHtcbiAgICAgICAgICAgIGVudGl0eU1hcC5zZXRFbGVtZW50KGlkLCB7IHJlZiwgZ2V0SW5mbyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmO1xuICAgIH07XG59O1xuZXhwb3J0cy5yZWdpc3RlckNoYW5uZWx6Q2hhbm5lbCA9IGdlbmVyYXRlUmVnaXN0ZXJGbihcImNoYW5uZWxcIiAvKiBFbnRpdHlUeXBlcy5jaGFubmVsICovKTtcbmV4cG9ydHMucmVnaXN0ZXJDaGFubmVselN1YmNoYW5uZWwgPSBnZW5lcmF0ZVJlZ2lzdGVyRm4oXCJzdWJjaGFubmVsXCIgLyogRW50aXR5VHlwZXMuc3ViY2hhbm5lbCAqLyk7XG5leHBvcnRzLnJlZ2lzdGVyQ2hhbm5lbHpTZXJ2ZXIgPSBnZW5lcmF0ZVJlZ2lzdGVyRm4oXCJzZXJ2ZXJcIiAvKiBFbnRpdHlUeXBlcy5zZXJ2ZXIgKi8pO1xuZXhwb3J0cy5yZWdpc3RlckNoYW5uZWx6U29ja2V0ID0gZ2VuZXJhdGVSZWdpc3RlckZuKFwic29ja2V0XCIgLyogRW50aXR5VHlwZXMuc29ja2V0ICovKTtcbmZ1bmN0aW9uIHVucmVnaXN0ZXJDaGFubmVselJlZihyZWYpIHtcbiAgICBlbnRpdHlNYXBzW3JlZi5raW5kXS5lcmFzZUVsZW1lbnRCeUtleShyZWYuaWQpO1xufVxuLyoqXG4gKiBQYXJzZSBhIHNpbmdsZSBzZWN0aW9uIG9mIGFuIElQdjYgYWRkcmVzcyBhcyB0d28gYnl0ZXNcbiAqIEBwYXJhbSBhZGRyZXNzU2VjdGlvbiBBIGhleGFkZWNpbWFsIHN0cmluZyBvZiBsZW5ndGggdXAgdG8gNFxuICogQHJldHVybnMgVGhlIHBhaXIgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIHRoaXMgYWRkcmVzcyBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSVB2NlNlY3Rpb24oYWRkcmVzc1NlY3Rpb24pIHtcbiAgICBjb25zdCBudW1iZXJWYWx1ZSA9IE51bWJlci5wYXJzZUludChhZGRyZXNzU2VjdGlvbiwgMTYpO1xuICAgIHJldHVybiBbKG51bWJlclZhbHVlIC8gMjU2KSB8IDAsIG51bWJlclZhbHVlICUgMjU2XTtcbn1cbi8qKlxuICogUGFyc2UgYSBjaHVuayBvZiBhbiBJUHY2IGFkZHJlc3Mgc3RyaW5nIHRvIHNvbWUgbnVtYmVyIG9mIGJ5dGVzXG4gKiBAcGFyYW0gYWRkcmVzc0NodW5rIFNvbWUgbnVtYmVyIG9mIHNlZ21lbnRzIG9mIHVwIHRvIDQgaGV4YWRlY2ltYWxcbiAqICAgY2hhcmFjdGVycyBlYWNoLCBqb2luZWQgYnkgY29sb25zLlxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIHRoaXMgYWRkcmVzcyBjaHVua1xuICovXG5mdW5jdGlvbiBwYXJzZUlQdjZDaHVuayhhZGRyZXNzQ2h1bmspIHtcbiAgICBpZiAoYWRkcmVzc0NodW5rID09PSAnJykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVQYWlycyA9IGFkZHJlc3NDaHVua1xuICAgICAgICAuc3BsaXQoJzonKVxuICAgICAgICAubWFwKHNlY3Rpb24gPT4gcGFyc2VJUHY2U2VjdGlvbihzZWN0aW9uKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoLi4uYnl0ZVBhaXJzKTtcbn1cbmZ1bmN0aW9uIGlzSVB2Nk1hcHBlZElQdjQoaXBBZGRyZXNzKSB7XG4gICAgcmV0dXJuICgwLCBuZXRfMS5pc0lQdjYpKGlwQWRkcmVzcykgJiYgaXBBZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnOjpmZmZmOicpICYmICgwLCBuZXRfMS5pc0lQdjQpKGlwQWRkcmVzcy5zdWJzdHJpbmcoNykpO1xufVxuLyoqXG4gKiBQcmVyZXF1aXNpdGU6IGlzSVB2NChpcEFkZHJlc3MpXG4gKiBAcGFyYW0gaXBBZGRyZXNzXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBpcHY0QWRkcmVzc1N0cmluZ1RvQnVmZmVyKGlwQWRkcmVzcykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShVaW50OEFycmF5LmZyb20oaXBBZGRyZXNzLnNwbGl0KCcuJykubWFwKHNlZ21lbnQgPT4gTnVtYmVyLnBhcnNlSW50KHNlZ21lbnQpKSkpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcyBmcm9tIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBiaW5hcnlcbiAqIHJlcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0gaXBBZGRyZXNzIGFuIElQIGFkZHJlc3MgaW4gc3RhbmRhcmQgSVB2NCBvciBJUHY2IHRleHQgZm9ybWF0XG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBpcEFkZHJlc3NTdHJpbmdUb0J1ZmZlcihpcEFkZHJlc3MpIHtcbiAgICBpZiAoKDAsIG5ldF8xLmlzSVB2NCkoaXBBZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gaXB2NEFkZHJlc3NTdHJpbmdUb0J1ZmZlcihpcEFkZHJlc3MpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0lQdjZNYXBwZWRJUHY0KGlwQWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIGlwdjRBZGRyZXNzU3RyaW5nVG9CdWZmZXIoaXBBZGRyZXNzLnN1YnN0cmluZyg3KSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCBuZXRfMS5pc0lQdjYpKGlwQWRkcmVzcykpIHtcbiAgICAgICAgbGV0IGxlZnRTZWN0aW9uO1xuICAgICAgICBsZXQgcmlnaHRTZWN0aW9uO1xuICAgICAgICBjb25zdCBkb3VibGVDb2xvbkluZGV4ID0gaXBBZGRyZXNzLmluZGV4T2YoJzo6Jyk7XG4gICAgICAgIGlmIChkb3VibGVDb2xvbkluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgbGVmdFNlY3Rpb24gPSBpcEFkZHJlc3M7XG4gICAgICAgICAgICByaWdodFNlY3Rpb24gPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxlZnRTZWN0aW9uID0gaXBBZGRyZXNzLnN1YnN0cmluZygwLCBkb3VibGVDb2xvbkluZGV4KTtcbiAgICAgICAgICAgIHJpZ2h0U2VjdGlvbiA9IGlwQWRkcmVzcy5zdWJzdHJpbmcoZG91YmxlQ29sb25JbmRleCArIDIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlZnRCdWZmZXIgPSBCdWZmZXIuZnJvbShwYXJzZUlQdjZDaHVuayhsZWZ0U2VjdGlvbikpO1xuICAgICAgICBjb25zdCByaWdodEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHBhcnNlSVB2NkNodW5rKHJpZ2h0U2VjdGlvbikpO1xuICAgICAgICBjb25zdCBtaWRkbGVCdWZmZXIgPSBCdWZmZXIuYWxsb2MoMTYgLSBsZWZ0QnVmZmVyLmxlbmd0aCAtIHJpZ2h0QnVmZmVyLmxlbmd0aCwgMCk7XG4gICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtsZWZ0QnVmZmVyLCBtaWRkbGVCdWZmZXIsIHJpZ2h0QnVmZmVyXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5mdW5jdGlvbiBjb25uZWN0aXZpdHlTdGF0ZVRvTWVzc2FnZShzdGF0ZSkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgY2FzZSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5DT05ORUNUSU5HOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ0NPTk5FQ1RJTkcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ0lETEUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWTpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdSRUFEWScsXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlNIVVRET1dOOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ1NIVVRET1dOJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkU6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnVFJBTlNJRU5UX0ZBSUxVUkUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdVTktOT1dOJyxcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gZGF0ZVRvUHJvdG9UaW1lc3RhbXAoZGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWlsbGlzU2luY2VFcG9jaCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNlY29uZHM6IChtaWxsaXNTaW5jZUVwb2NoIC8gMTAwMCkgfCAwLFxuICAgICAgICBuYW5vczogKG1pbGxpc1NpbmNlRXBvY2ggJSAxMDAwKSAqIDEwMDAwMDAsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldENoYW5uZWxNZXNzYWdlKGNoYW5uZWxFbnRyeSkge1xuICAgIGNvbnN0IHJlc29sdmVkSW5mbyA9IGNoYW5uZWxFbnRyeS5nZXRJbmZvKCk7XG4gICAgY29uc3QgY2hhbm5lbFJlZiA9IFtdO1xuICAgIGNvbnN0IHN1YmNoYW5uZWxSZWYgPSBbXTtcbiAgICByZXNvbHZlZEluZm8uY2hpbGRyZW4uY2hhbm5lbHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGNoYW5uZWxSZWYucHVzaChjaGFubmVsUmVmVG9NZXNzYWdlKGVsWzFdLnJlZikpO1xuICAgIH0pO1xuICAgIHJlc29sdmVkSW5mby5jaGlsZHJlbi5zdWJjaGFubmVscy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgc3ViY2hhbm5lbFJlZi5wdXNoKHN1YmNoYW5uZWxSZWZUb01lc3NhZ2UoZWxbMV0ucmVmKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVmOiBjaGFubmVsUmVmVG9NZXNzYWdlKGNoYW5uZWxFbnRyeS5yZWYpLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0YXJnZXQ6IHJlc29sdmVkSW5mby50YXJnZXQsXG4gICAgICAgICAgICBzdGF0ZTogY29ubmVjdGl2aXR5U3RhdGVUb01lc3NhZ2UocmVzb2x2ZWRJbmZvLnN0YXRlKSxcbiAgICAgICAgICAgIGNhbGxzX3N0YXJ0ZWQ6IHJlc29sdmVkSW5mby5jYWxsVHJhY2tlci5jYWxsc1N0YXJ0ZWQsXG4gICAgICAgICAgICBjYWxsc19zdWNjZWVkZWQ6IHJlc29sdmVkSW5mby5jYWxsVHJhY2tlci5jYWxsc1N1Y2NlZWRlZCxcbiAgICAgICAgICAgIGNhbGxzX2ZhaWxlZDogcmVzb2x2ZWRJbmZvLmNhbGxUcmFja2VyLmNhbGxzRmFpbGVkLFxuICAgICAgICAgICAgbGFzdF9jYWxsX3N0YXJ0ZWRfdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcChyZXNvbHZlZEluZm8uY2FsbFRyYWNrZXIubGFzdENhbGxTdGFydGVkVGltZXN0YW1wKSxcbiAgICAgICAgICAgIHRyYWNlOiByZXNvbHZlZEluZm8udHJhY2UuZ2V0VHJhY2VNZXNzYWdlKCksXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5uZWxfcmVmOiBjaGFubmVsUmVmLFxuICAgICAgICBzdWJjaGFubmVsX3JlZjogc3ViY2hhbm5lbFJlZixcbiAgICB9O1xufVxuZnVuY3Rpb24gR2V0Q2hhbm5lbChjYWxsLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGNoYW5uZWxJZCA9IHBhcnNlSW50KGNhbGwucmVxdWVzdC5jaGFubmVsX2lkLCAxMCk7XG4gICAgY29uc3QgY2hhbm5lbEVudHJ5ID0gZW50aXR5TWFwc1tcImNoYW5uZWxcIiAvKiBFbnRpdHlUeXBlcy5jaGFubmVsICovXS5nZXRFbGVtZW50QnlLZXkoY2hhbm5lbElkKTtcbiAgICBpZiAoY2hhbm5lbEVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLk5PVF9GT1VORCxcbiAgICAgICAgICAgIGRldGFpbHM6ICdObyBjaGFubmVsIGRhdGEgZm91bmQgZm9yIGlkICcgKyBjaGFubmVsSWQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKG51bGwsIHsgY2hhbm5lbDogZ2V0Q2hhbm5lbE1lc3NhZ2UoY2hhbm5lbEVudHJ5KSB9KTtcbn1cbmZ1bmN0aW9uIEdldFRvcENoYW5uZWxzKGNhbGwsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbWF4UmVzdWx0cyA9IHBhcnNlSW50KGNhbGwucmVxdWVzdC5tYXhfcmVzdWx0cywgMTApIHx8IERFRkFVTFRfTUFYX1JFU1VMVFM7XG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdO1xuICAgIGNvbnN0IHN0YXJ0SWQgPSBwYXJzZUludChjYWxsLnJlcXVlc3Quc3RhcnRfY2hhbm5lbF9pZCwgMTApO1xuICAgIGNvbnN0IGNoYW5uZWxFbnRyaWVzID0gZW50aXR5TWFwc1tcImNoYW5uZWxcIiAvKiBFbnRpdHlUeXBlcy5jaGFubmVsICovXTtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSBjaGFubmVsRW50cmllcy5sb3dlckJvdW5kKHN0YXJ0SWQpOyAhaS5lcXVhbHMoY2hhbm5lbEVudHJpZXMuZW5kKCkpICYmIHJlc3VsdExpc3QubGVuZ3RoIDwgbWF4UmVzdWx0czsgaSA9IGkubmV4dCgpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChnZXRDaGFubmVsTWVzc2FnZShpLnBvaW50ZXJbMV0pKTtcbiAgICB9XG4gICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICBjaGFubmVsOiByZXN1bHRMaXN0LFxuICAgICAgICBlbmQ6IGkuZXF1YWxzKGNoYW5uZWxFbnRyaWVzLmVuZCgpKSxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldFNlcnZlck1lc3NhZ2Uoc2VydmVyRW50cnkpIHtcbiAgICBjb25zdCByZXNvbHZlZEluZm8gPSBzZXJ2ZXJFbnRyeS5nZXRJbmZvKCk7XG4gICAgY29uc3QgbGlzdGVuU29ja2V0ID0gW107XG4gICAgcmVzb2x2ZWRJbmZvLmxpc3RlbmVyQ2hpbGRyZW4uc29ja2V0cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgbGlzdGVuU29ja2V0LnB1c2goc29ja2V0UmVmVG9NZXNzYWdlKGVsWzFdLnJlZikpO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlZjogc2VydmVyUmVmVG9NZXNzYWdlKHNlcnZlckVudHJ5LnJlZiksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNhbGxzX3N0YXJ0ZWQ6IHJlc29sdmVkSW5mby5jYWxsVHJhY2tlci5jYWxsc1N0YXJ0ZWQsXG4gICAgICAgICAgICBjYWxsc19zdWNjZWVkZWQ6IHJlc29sdmVkSW5mby5jYWxsVHJhY2tlci5jYWxsc1N1Y2NlZWRlZCxcbiAgICAgICAgICAgIGNhbGxzX2ZhaWxlZDogcmVzb2x2ZWRJbmZvLmNhbGxUcmFja2VyLmNhbGxzRmFpbGVkLFxuICAgICAgICAgICAgbGFzdF9jYWxsX3N0YXJ0ZWRfdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcChyZXNvbHZlZEluZm8uY2FsbFRyYWNrZXIubGFzdENhbGxTdGFydGVkVGltZXN0YW1wKSxcbiAgICAgICAgICAgIHRyYWNlOiByZXNvbHZlZEluZm8udHJhY2UuZ2V0VHJhY2VNZXNzYWdlKCksXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Rlbl9zb2NrZXQ6IGxpc3RlblNvY2tldCxcbiAgICB9O1xufVxuZnVuY3Rpb24gR2V0U2VydmVyKGNhbGwsIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2VydmVySWQgPSBwYXJzZUludChjYWxsLnJlcXVlc3Quc2VydmVyX2lkLCAxMCk7XG4gICAgY29uc3Qgc2VydmVyRW50cmllcyA9IGVudGl0eU1hcHNbXCJzZXJ2ZXJcIiAvKiBFbnRpdHlUeXBlcy5zZXJ2ZXIgKi9dO1xuICAgIGNvbnN0IHNlcnZlckVudHJ5ID0gc2VydmVyRW50cmllcy5nZXRFbGVtZW50QnlLZXkoc2VydmVySWQpO1xuICAgIGlmIChzZXJ2ZXJFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5OT1RfRk9VTkQsXG4gICAgICAgICAgICBkZXRhaWxzOiAnTm8gc2VydmVyIGRhdGEgZm91bmQgZm9yIGlkICcgKyBzZXJ2ZXJJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGJhY2sobnVsbCwgeyBzZXJ2ZXI6IGdldFNlcnZlck1lc3NhZ2Uoc2VydmVyRW50cnkpIH0pO1xufVxuZnVuY3Rpb24gR2V0U2VydmVycyhjYWxsLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1heFJlc3VsdHMgPSBwYXJzZUludChjYWxsLnJlcXVlc3QubWF4X3Jlc3VsdHMsIDEwKSB8fCBERUZBVUxUX01BWF9SRVNVTFRTO1xuICAgIGNvbnN0IHN0YXJ0SWQgPSBwYXJzZUludChjYWxsLnJlcXVlc3Quc3RhcnRfc2VydmVyX2lkLCAxMCk7XG4gICAgY29uc3Qgc2VydmVyRW50cmllcyA9IGVudGl0eU1hcHNbXCJzZXJ2ZXJcIiAvKiBFbnRpdHlUeXBlcy5zZXJ2ZXIgKi9dO1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXTtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSBzZXJ2ZXJFbnRyaWVzLmxvd2VyQm91bmQoc3RhcnRJZCk7ICFpLmVxdWFscyhzZXJ2ZXJFbnRyaWVzLmVuZCgpKSAmJiByZXN1bHRMaXN0Lmxlbmd0aCA8IG1heFJlc3VsdHM7IGkgPSBpLm5leHQoKSkge1xuICAgICAgICByZXN1bHRMaXN0LnB1c2goZ2V0U2VydmVyTWVzc2FnZShpLnBvaW50ZXJbMV0pKTtcbiAgICB9XG4gICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICBzZXJ2ZXI6IHJlc3VsdExpc3QsXG4gICAgICAgIGVuZDogaS5lcXVhbHMoc2VydmVyRW50cmllcy5lbmQoKSksXG4gICAgfSk7XG59XG5mdW5jdGlvbiBHZXRTdWJjaGFubmVsKGNhbGwsIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc3ViY2hhbm5lbElkID0gcGFyc2VJbnQoY2FsbC5yZXF1ZXN0LnN1YmNoYW5uZWxfaWQsIDEwKTtcbiAgICBjb25zdCBzdWJjaGFubmVsRW50cnkgPSBlbnRpdHlNYXBzW1wic3ViY2hhbm5lbFwiIC8qIEVudGl0eVR5cGVzLnN1YmNoYW5uZWwgKi9dLmdldEVsZW1lbnRCeUtleShzdWJjaGFubmVsSWQpO1xuICAgIGlmIChzdWJjaGFubmVsRW50cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuTk9UX0ZPVU5ELFxuICAgICAgICAgICAgZGV0YWlsczogJ05vIHN1YmNoYW5uZWwgZGF0YSBmb3VuZCBmb3IgaWQgJyArIHN1YmNoYW5uZWxJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRJbmZvID0gc3ViY2hhbm5lbEVudHJ5LmdldEluZm8oKTtcbiAgICBjb25zdCBsaXN0ZW5Tb2NrZXQgPSBbXTtcbiAgICByZXNvbHZlZEluZm8uY2hpbGRyZW4uc29ja2V0cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgbGlzdGVuU29ja2V0LnB1c2goc29ja2V0UmVmVG9NZXNzYWdlKGVsWzFdLnJlZikpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1YmNoYW5uZWxNZXNzYWdlID0ge1xuICAgICAgICByZWY6IHN1YmNoYW5uZWxSZWZUb01lc3NhZ2Uoc3ViY2hhbm5lbEVudHJ5LnJlZiksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHRhcmdldDogcmVzb2x2ZWRJbmZvLnRhcmdldCxcbiAgICAgICAgICAgIHN0YXRlOiBjb25uZWN0aXZpdHlTdGF0ZVRvTWVzc2FnZShyZXNvbHZlZEluZm8uc3RhdGUpLFxuICAgICAgICAgICAgY2FsbHNfc3RhcnRlZDogcmVzb2x2ZWRJbmZvLmNhbGxUcmFja2VyLmNhbGxzU3RhcnRlZCxcbiAgICAgICAgICAgIGNhbGxzX3N1Y2NlZWRlZDogcmVzb2x2ZWRJbmZvLmNhbGxUcmFja2VyLmNhbGxzU3VjY2VlZGVkLFxuICAgICAgICAgICAgY2FsbHNfZmFpbGVkOiByZXNvbHZlZEluZm8uY2FsbFRyYWNrZXIuY2FsbHNGYWlsZWQsXG4gICAgICAgICAgICBsYXN0X2NhbGxfc3RhcnRlZF90aW1lc3RhbXA6IGRhdGVUb1Byb3RvVGltZXN0YW1wKHJlc29sdmVkSW5mby5jYWxsVHJhY2tlci5sYXN0Q2FsbFN0YXJ0ZWRUaW1lc3RhbXApLFxuICAgICAgICAgICAgdHJhY2U6IHJlc29sdmVkSW5mby50cmFjZS5nZXRUcmFjZU1lc3NhZ2UoKSxcbiAgICAgICAgfSxcbiAgICAgICAgc29ja2V0X3JlZjogbGlzdGVuU29ja2V0LFxuICAgIH07XG4gICAgY2FsbGJhY2sobnVsbCwgeyBzdWJjaGFubmVsOiBzdWJjaGFubmVsTWVzc2FnZSB9KTtcbn1cbmZ1bmN0aW9uIHN1YmNoYW5uZWxBZGRyZXNzVG9BZGRyZXNzTWVzc2FnZShzdWJjaGFubmVsQWRkcmVzcykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKDAsIHN1YmNoYW5uZWxfYWRkcmVzc18xLmlzVGNwU3ViY2hhbm5lbEFkZHJlc3MpKHN1YmNoYW5uZWxBZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogJ3RjcGlwX2FkZHJlc3MnLFxuICAgICAgICAgICAgdGNwaXBfYWRkcmVzczoge1xuICAgICAgICAgICAgICAgIGlwX2FkZHJlc3M6IChfYSA9IGlwQWRkcmVzc1N0cmluZ1RvQnVmZmVyKHN1YmNoYW5uZWxBZGRyZXNzLmhvc3QpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcG9ydDogc3ViY2hhbm5lbEFkZHJlc3MucG9ydCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogJ3Vkc19hZGRyZXNzJyxcbiAgICAgICAgICAgIHVkc19hZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWU6IHN1YmNoYW5uZWxBZGRyZXNzLnBhdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIEdldFNvY2tldChjYWxsLCBjYWxsYmFjaykge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgY29uc3Qgc29ja2V0SWQgPSBwYXJzZUludChjYWxsLnJlcXVlc3Quc29ja2V0X2lkLCAxMCk7XG4gICAgY29uc3Qgc29ja2V0RW50cnkgPSBlbnRpdHlNYXBzW1wic29ja2V0XCIgLyogRW50aXR5VHlwZXMuc29ja2V0ICovXS5nZXRFbGVtZW50QnlLZXkoc29ja2V0SWQpO1xuICAgIGlmIChzb2NrZXRFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5OT1RfRk9VTkQsXG4gICAgICAgICAgICBkZXRhaWxzOiAnTm8gc29ja2V0IGRhdGEgZm91bmQgZm9yIGlkICcgKyBzb2NrZXRJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRJbmZvID0gc29ja2V0RW50cnkuZ2V0SW5mbygpO1xuICAgIGNvbnN0IHNlY3VyaXR5TWVzc2FnZSA9IHJlc29sdmVkSW5mby5zZWN1cml0eVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG1vZGVsOiAndGxzJyxcbiAgICAgICAgICAgIHRsczoge1xuICAgICAgICAgICAgICAgIGNpcGhlcl9zdWl0ZTogcmVzb2x2ZWRJbmZvLnNlY3VyaXR5LmNpcGhlclN1aXRlU3RhbmRhcmROYW1lXG4gICAgICAgICAgICAgICAgICAgID8gJ3N0YW5kYXJkX25hbWUnXG4gICAgICAgICAgICAgICAgICAgIDogJ290aGVyX25hbWUnLFxuICAgICAgICAgICAgICAgIHN0YW5kYXJkX25hbWU6IChfYSA9IHJlc29sdmVkSW5mby5zZWN1cml0eS5jaXBoZXJTdWl0ZVN0YW5kYXJkTmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG90aGVyX25hbWU6IChfYiA9IHJlc29sdmVkSW5mby5zZWN1cml0eS5jaXBoZXJTdWl0ZU90aGVyTmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGxvY2FsX2NlcnRpZmljYXRlOiAoX2MgPSByZXNvbHZlZEluZm8uc2VjdXJpdHkubG9jYWxDZXJ0aWZpY2F0ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlbW90ZV9jZXJ0aWZpY2F0ZTogKF9kID0gcmVzb2x2ZWRJbmZvLnNlY3VyaXR5LnJlbW90ZUNlcnRpZmljYXRlKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzb2NrZXRNZXNzYWdlID0ge1xuICAgICAgICByZWY6IHNvY2tldFJlZlRvTWVzc2FnZShzb2NrZXRFbnRyeS5yZWYpLFxuICAgICAgICBsb2NhbDogcmVzb2x2ZWRJbmZvLmxvY2FsQWRkcmVzc1xuICAgICAgICAgICAgPyBzdWJjaGFubmVsQWRkcmVzc1RvQWRkcmVzc01lc3NhZ2UocmVzb2x2ZWRJbmZvLmxvY2FsQWRkcmVzcylcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcmVtb3RlOiByZXNvbHZlZEluZm8ucmVtb3RlQWRkcmVzc1xuICAgICAgICAgICAgPyBzdWJjaGFubmVsQWRkcmVzc1RvQWRkcmVzc01lc3NhZ2UocmVzb2x2ZWRJbmZvLnJlbW90ZUFkZHJlc3MpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHJlbW90ZV9uYW1lOiAoX2UgPSByZXNvbHZlZEluZm8ucmVtb3RlTmFtZSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogdW5kZWZpbmVkLFxuICAgICAgICBzZWN1cml0eTogc2VjdXJpdHlNZXNzYWdlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBrZWVwX2FsaXZlc19zZW50OiByZXNvbHZlZEluZm8ua2VlcEFsaXZlc1NlbnQsXG4gICAgICAgICAgICBzdHJlYW1zX3N0YXJ0ZWQ6IHJlc29sdmVkSW5mby5zdHJlYW1zU3RhcnRlZCxcbiAgICAgICAgICAgIHN0cmVhbXNfc3VjY2VlZGVkOiByZXNvbHZlZEluZm8uc3RyZWFtc1N1Y2NlZWRlZCxcbiAgICAgICAgICAgIHN0cmVhbXNfZmFpbGVkOiByZXNvbHZlZEluZm8uc3RyZWFtc0ZhaWxlZCxcbiAgICAgICAgICAgIGxhc3RfbG9jYWxfc3RyZWFtX2NyZWF0ZWRfdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcChyZXNvbHZlZEluZm8ubGFzdExvY2FsU3RyZWFtQ3JlYXRlZFRpbWVzdGFtcCksXG4gICAgICAgICAgICBsYXN0X3JlbW90ZV9zdHJlYW1fY3JlYXRlZF90aW1lc3RhbXA6IGRhdGVUb1Byb3RvVGltZXN0YW1wKHJlc29sdmVkSW5mby5sYXN0UmVtb3RlU3RyZWFtQ3JlYXRlZFRpbWVzdGFtcCksXG4gICAgICAgICAgICBtZXNzYWdlc19yZWNlaXZlZDogcmVzb2x2ZWRJbmZvLm1lc3NhZ2VzUmVjZWl2ZWQsXG4gICAgICAgICAgICBtZXNzYWdlc19zZW50OiByZXNvbHZlZEluZm8ubWVzc2FnZXNTZW50LFxuICAgICAgICAgICAgbGFzdF9tZXNzYWdlX3JlY2VpdmVkX3RpbWVzdGFtcDogZGF0ZVRvUHJvdG9UaW1lc3RhbXAocmVzb2x2ZWRJbmZvLmxhc3RNZXNzYWdlUmVjZWl2ZWRUaW1lc3RhbXApLFxuICAgICAgICAgICAgbGFzdF9tZXNzYWdlX3NlbnRfdGltZXN0YW1wOiBkYXRlVG9Qcm90b1RpbWVzdGFtcChyZXNvbHZlZEluZm8ubGFzdE1lc3NhZ2VTZW50VGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxvY2FsX2Zsb3dfY29udHJvbF93aW5kb3c6IHJlc29sdmVkSW5mby5sb2NhbEZsb3dDb250cm9sV2luZG93XG4gICAgICAgICAgICAgICAgPyB7IHZhbHVlOiByZXNvbHZlZEluZm8ubG9jYWxGbG93Q29udHJvbFdpbmRvdyB9XG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgcmVtb3RlX2Zsb3dfY29udHJvbF93aW5kb3c6IHJlc29sdmVkSW5mby5yZW1vdGVGbG93Q29udHJvbFdpbmRvd1xuICAgICAgICAgICAgICAgID8geyB2YWx1ZTogcmVzb2x2ZWRJbmZvLnJlbW90ZUZsb3dDb250cm9sV2luZG93IH1cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjYWxsYmFjayhudWxsLCB7IHNvY2tldDogc29ja2V0TWVzc2FnZSB9KTtcbn1cbmZ1bmN0aW9uIEdldFNlcnZlclNvY2tldHMoY2FsbCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzZXJ2ZXJJZCA9IHBhcnNlSW50KGNhbGwucmVxdWVzdC5zZXJ2ZXJfaWQsIDEwKTtcbiAgICBjb25zdCBzZXJ2ZXJFbnRyeSA9IGVudGl0eU1hcHNbXCJzZXJ2ZXJcIiAvKiBFbnRpdHlUeXBlcy5zZXJ2ZXIgKi9dLmdldEVsZW1lbnRCeUtleShzZXJ2ZXJJZCk7XG4gICAgaWYgKHNlcnZlckVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLk5PVF9GT1VORCxcbiAgICAgICAgICAgIGRldGFpbHM6ICdObyBzZXJ2ZXIgZGF0YSBmb3VuZCBmb3IgaWQgJyArIHNlcnZlcklkLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydElkID0gcGFyc2VJbnQoY2FsbC5yZXF1ZXN0LnN0YXJ0X3NvY2tldF9pZCwgMTApO1xuICAgIGNvbnN0IG1heFJlc3VsdHMgPSBwYXJzZUludChjYWxsLnJlcXVlc3QubWF4X3Jlc3VsdHMsIDEwKSB8fCBERUZBVUxUX01BWF9SRVNVTFRTO1xuICAgIGNvbnN0IHJlc29sdmVkSW5mbyA9IHNlcnZlckVudHJ5LmdldEluZm8oKTtcbiAgICAvLyBJZiB3ZSB3YW50ZWQgdG8gaW5jbHVkZSBsaXN0ZW5lciBzb2NrZXRzIGluIHRoZSByZXN1bHQsIHRoaXMgbGluZSB3b3VsZFxuICAgIC8vIGluc3RlYWQgc2F5XG4gICAgLy8gY29uc3QgYWxsU29ja2V0cyA9IHJlc29sdmVkSW5mby5saXN0ZW5lckNoaWxkcmVuLnNvY2tldHMuY29uY2F0KHJlc29sdmVkSW5mby5zZXNzaW9uQ2hpbGRyZW4uc29ja2V0cykuc29ydCgocmVmMSwgcmVmMikgPT4gcmVmMS5pZCAtIHJlZjIuaWQpO1xuICAgIGNvbnN0IGFsbFNvY2tldHMgPSByZXNvbHZlZEluZm8uc2Vzc2lvbkNoaWxkcmVuLnNvY2tldHM7XG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IGFsbFNvY2tldHMubG93ZXJCb3VuZChzdGFydElkKTsgIWkuZXF1YWxzKGFsbFNvY2tldHMuZW5kKCkpICYmIHJlc3VsdExpc3QubGVuZ3RoIDwgbWF4UmVzdWx0czsgaSA9IGkubmV4dCgpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChzb2NrZXRSZWZUb01lc3NhZ2UoaS5wb2ludGVyWzFdLnJlZikpO1xuICAgIH1cbiAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgIHNvY2tldF9yZWY6IHJlc3VsdExpc3QsXG4gICAgICAgIGVuZDogaS5lcXVhbHMoYWxsU29ja2V0cy5lbmQoKSksXG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRDaGFubmVsekhhbmRsZXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIEdldENoYW5uZWwsXG4gICAgICAgIEdldFRvcENoYW5uZWxzLFxuICAgICAgICBHZXRTZXJ2ZXIsXG4gICAgICAgIEdldFNlcnZlcnMsXG4gICAgICAgIEdldFN1YmNoYW5uZWwsXG4gICAgICAgIEdldFNvY2tldCxcbiAgICAgICAgR2V0U2VydmVyU29ja2V0cyxcbiAgICB9O1xufVxubGV0IGxvYWRlZENoYW5uZWx6RGVmaW5pdGlvbiA9IG51bGw7XG5mdW5jdGlvbiBnZXRDaGFubmVselNlcnZpY2VEZWZpbml0aW9uKCkge1xuICAgIGlmIChsb2FkZWRDaGFubmVsekRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGxvYWRlZENoYW5uZWx6RGVmaW5pdGlvbjtcbiAgICB9XG4gICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjb21wbGV4aXR5IGlzIHRvIGF2b2lkIGxvYWRpbmcgQGdycGMvcHJvdG8tbG9hZGVyIGF0XG4gICAgICogcnVudGltZSBmb3IgdXNlcnMgd2hvIHdpbGwgbm90IHVzZS9lbmFibGUgY2hhbm5lbHouICovXG4gICAgY29uc3QgbG9hZGVyTG9hZFN5bmMgPSByZXF1aXJlKCdAZ3JwYy9wcm90by1sb2FkZXInKVxuICAgICAgICAubG9hZFN5bmM7XG4gICAgY29uc3QgbG9hZGVkUHJvdG8gPSBsb2FkZXJMb2FkU3luYygnY2hhbm5lbHoucHJvdG8nLCB7XG4gICAgICAgIGtlZXBDYXNlOiB0cnVlLFxuICAgICAgICBsb25nczogU3RyaW5nLFxuICAgICAgICBlbnVtczogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0czogdHJ1ZSxcbiAgICAgICAgb25lb2ZzOiB0cnVlLFxuICAgICAgICBpbmNsdWRlRGlyczogW2Ake19fZGlybmFtZX0vLi4vLi4vcHJvdG9gXSxcbiAgICB9KTtcbiAgICBjb25zdCBjaGFubmVsekdycGNPYmplY3QgPSAoMCwgbWFrZV9jbGllbnRfMS5sb2FkUGFja2FnZURlZmluaXRpb24pKGxvYWRlZFByb3RvKTtcbiAgICBsb2FkZWRDaGFubmVsekRlZmluaXRpb24gPVxuICAgICAgICBjaGFubmVsekdycGNPYmplY3QuZ3JwYy5jaGFubmVsei52MS5DaGFubmVsei5zZXJ2aWNlO1xuICAgIHJldHVybiBsb2FkZWRDaGFubmVsekRlZmluaXRpb247XG59XG5mdW5jdGlvbiBzZXR1cCgpIHtcbiAgICAoMCwgYWRtaW5fMS5yZWdpc3RlckFkbWluU2VydmljZSkoZ2V0Q2hhbm5lbHpTZXJ2aWNlRGVmaW5pdGlvbiwgZ2V0Q2hhbm5lbHpIYW5kbGVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFubmVsei5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDIyIGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE5leHRDYWxsTnVtYmVyID0gZ2V0TmV4dENhbGxOdW1iZXI7XG5sZXQgbmV4dENhbGxOdW1iZXIgPSAwO1xuZnVuY3Rpb24gZ2V0TmV4dENhbGxOdW1iZXIoKSB7XG4gICAgcmV0dXJuIG5leHRDYWxsTnVtYmVyKys7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYWxsLW51bWJlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDIxIGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNvbXByZXNzaW9uQWxnb3JpdGhtcyA9IHZvaWQgMDtcbnZhciBDb21wcmVzc2lvbkFsZ29yaXRobXM7XG4oZnVuY3Rpb24gKENvbXByZXNzaW9uQWxnb3JpdGhtcykge1xuICAgIENvbXByZXNzaW9uQWxnb3JpdGhtc1tDb21wcmVzc2lvbkFsZ29yaXRobXNbXCJpZGVudGl0eVwiXSA9IDBdID0gXCJpZGVudGl0eVwiO1xuICAgIENvbXByZXNzaW9uQWxnb3JpdGhtc1tDb21wcmVzc2lvbkFsZ29yaXRobXNbXCJkZWZsYXRlXCJdID0gMV0gPSBcImRlZmxhdGVcIjtcbiAgICBDb21wcmVzc2lvbkFsZ29yaXRobXNbQ29tcHJlc3Npb25BbGdvcml0aG1zW1wiZ3ppcFwiXSA9IDJdID0gXCJnemlwXCI7XG59KShDb21wcmVzc2lvbkFsZ29yaXRobXMgfHwgKGV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG1zID0gQ29tcHJlc3Npb25BbGdvcml0aG1zID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXByZXNzaW9uLWFsZ29yaXRobXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXNlRmlsdGVyID0gdm9pZCAwO1xuY2xhc3MgQmFzZUZpbHRlciB7XG4gICAgYXN5bmMgc2VuZE1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICB9XG4gICAgcmVjZWl2ZU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgYXN5bmMgcmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgcmVjZWl2ZVRyYWlsZXJzKHN0YXR1cykge1xuICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzZUZpbHRlciA9IEJhc2VGaWx0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWx0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db21wcmVzc2lvbkZpbHRlckZhY3RvcnkgPSBleHBvcnRzLkNvbXByZXNzaW9uRmlsdGVyID0gdm9pZCAwO1xuY29uc3QgemxpYiA9IHJlcXVpcmUoXCJ6bGliXCIpO1xuY29uc3QgY29tcHJlc3Npb25fYWxnb3JpdGhtc18xID0gcmVxdWlyZShcIi4vY29tcHJlc3Npb24tYWxnb3JpdGhtc1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGlzQ29tcHJlc3Npb25BbGdvcml0aG1LZXkgPSAoa2V5KSA9PiB7XG4gICAgcmV0dXJuICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgY29tcHJlc3Npb25fYWxnb3JpdGhtc18xLkNvbXByZXNzaW9uQWxnb3JpdGhtc1trZXldID09PSAnc3RyaW5nJyk7XG59O1xuY2xhc3MgQ29tcHJlc3Npb25IYW5kbGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBSYXcgdW5jb21wcmVzc2VkIG1lc3NhZ2UgYnl0ZXNcbiAgICAgKiBAcGFyYW0gY29tcHJlc3MgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWRcbiAgICAgKiBAcmV0dXJuIEZyYW1lZCBtZXNzYWdlLCBjb21wcmVzc2VkIGlmIGFwcGxpY2FibGVcbiAgICAgKi9cbiAgICBhc3luYyB3cml0ZU1lc3NhZ2UobWVzc2FnZSwgY29tcHJlc3MpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlO1xuICAgICAgICBpZiAoY29tcHJlc3MpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXIgPSBhd2FpdCB0aGlzLmNvbXByZXNzTWVzc2FnZShtZXNzYWdlQnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobWVzc2FnZUJ1ZmZlci5sZW5ndGggKyA1KTtcbiAgICAgICAgb3V0cHV0LndyaXRlVUludDgoY29tcHJlc3MgPyAxIDogMCwgMCk7XG4gICAgICAgIG91dHB1dC53cml0ZVVJbnQzMkJFKG1lc3NhZ2VCdWZmZXIubGVuZ3RoLCAxKTtcbiAgICAgICAgbWVzc2FnZUJ1ZmZlci5jb3B5KG91dHB1dCwgNSk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBkYXRhIEZyYW1lZCBtZXNzYWdlLCBwb3NzaWJseSBjb21wcmVzc2VkXG4gICAgICogQHJldHVybiBVbmNvbXByZXNzZWQgbWVzc2FnZVxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRNZXNzYWdlKGRhdGEpIHtcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZCA9IGRhdGEucmVhZFVJbnQ4KDApID09PSAxO1xuICAgICAgICBsZXQgbWVzc2FnZUJ1ZmZlciA9IGRhdGEuc2xpY2UoNSk7XG4gICAgICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICAgICAgICBtZXNzYWdlQnVmZmVyID0gYXdhaXQgdGhpcy5kZWNvbXByZXNzTWVzc2FnZShtZXNzYWdlQnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZUJ1ZmZlcjtcbiAgICB9XG59XG5jbGFzcyBJZGVudGl0eUhhbmRsZXIgZXh0ZW5kcyBDb21wcmVzc2lvbkhhbmRsZXIge1xuICAgIGFzeW5jIGNvbXByZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBhc3luYyB3cml0ZU1lc3NhZ2UobWVzc2FnZSwgY29tcHJlc3MpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG1lc3NhZ2UubGVuZ3RoICsgNSk7XG4gICAgICAgIC8qIFdpdGggXCJpZGVudGl0eVwiIGNvbXByZXNzaW9uLCBtZXNzYWdlcyBzaG91bGQgYWx3YXlzIGJlIG1hcmtlZCBhc1xuICAgICAgICAgKiB1bmNvbXByZXNzZWQgKi9cbiAgICAgICAgb3V0cHV0LndyaXRlVUludDgoMCwgMCk7XG4gICAgICAgIG91dHB1dC53cml0ZVVJbnQzMkJFKG1lc3NhZ2UubGVuZ3RoLCAxKTtcbiAgICAgICAgbWVzc2FnZS5jb3B5KG91dHB1dCwgNSk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGRlY29tcHJlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignUmVjZWl2ZWQgY29tcHJlc3NlZCBtZXNzYWdlIGJ1dCBcImdycGMtZW5jb2RpbmdcIiBoZWFkZXIgd2FzIGlkZW50aXR5JykpO1xuICAgIH1cbn1cbmNsYXNzIERlZmxhdGVIYW5kbGVyIGV4dGVuZHMgQ29tcHJlc3Npb25IYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhSZWN2TWVzc2FnZUxlbmd0aCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm1heFJlY3ZNZXNzYWdlTGVuZ3RoID0gbWF4UmVjdk1lc3NhZ2VMZW5ndGg7XG4gICAgfVxuICAgIGNvbXByZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB6bGliLmRlZmxhdGUobWVzc2FnZSwgKGVyciwgb3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3V0cHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlY29tcHJlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCB0b3RhbExlbmd0aCA9IDA7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlUGFydHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGRlY29tcHJlc3NlciA9IHpsaWIuY3JlYXRlSW5mbGF0ZSgpO1xuICAgICAgICAgICAgZGVjb21wcmVzc2VyLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4UmVjdk1lc3NhZ2VMZW5ndGggIT09IC0xICYmIHRvdGFsTGVuZ3RoID4gdGhpcy5tYXhSZWN2TWVzc2FnZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlJFU09VUkNFX0VYSEFVU1RFRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBSZWNlaXZlZCBtZXNzYWdlIHRoYXQgZGVjb21wcmVzc2VzIHRvIGEgc2l6ZSBsYXJnZXIgdGhhbiAke3RoaXMubWF4UmVjdk1lc3NhZ2VMZW5ndGh9YFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY29tcHJlc3Nlci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChtZXNzYWdlUGFydHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVjb21wcmVzc2VyLndyaXRlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgZGVjb21wcmVzc2VyLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBHemlwSGFuZGxlciBleHRlbmRzIENvbXByZXNzaW9uSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IobWF4UmVjdk1lc3NhZ2VMZW5ndGgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5tYXhSZWN2TWVzc2FnZUxlbmd0aCA9IG1heFJlY3ZNZXNzYWdlTGVuZ3RoO1xuICAgIH1cbiAgICBjb21wcmVzc01lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgemxpYi5nemlwKG1lc3NhZ2UsIChlcnIsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG91dHB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWNvbXByZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgdG90YWxMZW5ndGggPSAwO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZVBhcnRzID0gW107XG4gICAgICAgICAgICBjb25zdCBkZWNvbXByZXNzZXIgPSB6bGliLmNyZWF0ZUd1bnppcCgpO1xuICAgICAgICAgICAgZGVjb21wcmVzc2VyLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4UmVjdk1lc3NhZ2VMZW5ndGggIT09IC0xICYmIHRvdGFsTGVuZ3RoID4gdGhpcy5tYXhSZWN2TWVzc2FnZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlJFU09VUkNFX0VYSEFVU1RFRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBSZWNlaXZlZCBtZXNzYWdlIHRoYXQgZGVjb21wcmVzc2VzIHRvIGEgc2l6ZSBsYXJnZXIgdGhhbiAke3RoaXMubWF4UmVjdk1lc3NhZ2VMZW5ndGh9YFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY29tcHJlc3Nlci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChtZXNzYWdlUGFydHMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVjb21wcmVzc2VyLndyaXRlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgZGVjb21wcmVzc2VyLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBVbmtub3duSGFuZGxlciBleHRlbmRzIENvbXByZXNzaW9uSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoY29tcHJlc3Npb25OYW1lKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29tcHJlc3Npb25OYW1lID0gY29tcHJlc3Npb25OYW1lO1xuICAgIH1cbiAgICBjb21wcmVzc01lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBSZWNlaXZlZCBtZXNzYWdlIGNvbXByZXNzZWQgd2l0aCB1bnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2QgJHt0aGlzLmNvbXByZXNzaW9uTmFtZX1gKSk7XG4gICAgfVxuICAgIGRlY29tcHJlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgdW5yZWFjaGFibGVcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgQ29tcHJlc3Npb24gbWV0aG9kIG5vdCBzdXBwb3J0ZWQ6ICR7dGhpcy5jb21wcmVzc2lvbk5hbWV9YCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldENvbXByZXNzaW9uSGFuZGxlcihjb21wcmVzc2lvbk5hbWUsIG1heFJlY2VpdmVNZXNzYWdlU2l6ZSkge1xuICAgIHN3aXRjaCAoY29tcHJlc3Npb25OYW1lKSB7XG4gICAgICAgIGNhc2UgJ2lkZW50aXR5JzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWRlbnRpdHlIYW5kbGVyKCk7XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWZsYXRlSGFuZGxlcihtYXhSZWNlaXZlTWVzc2FnZVNpemUpO1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgR3ppcEhhbmRsZXIobWF4UmVjZWl2ZU1lc3NhZ2VTaXplKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVW5rbm93bkhhbmRsZXIoY29tcHJlc3Npb25OYW1lKTtcbiAgICB9XG59XG5jbGFzcyBDb21wcmVzc2lvbkZpbHRlciBleHRlbmRzIGZpbHRlcl8xLkJhc2VGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWxPcHRpb25zLCBzaGFyZWRGaWx0ZXJDb25maWcpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2hhcmVkRmlsdGVyQ29uZmlnID0gc2hhcmVkRmlsdGVyQ29uZmlnO1xuICAgICAgICB0aGlzLnNlbmRDb21wcmVzc2lvbiA9IG5ldyBJZGVudGl0eUhhbmRsZXIoKTtcbiAgICAgICAgdGhpcy5yZWNlaXZlQ29tcHJlc3Npb24gPSBuZXcgSWRlbnRpdHlIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuY3VycmVudENvbXByZXNzaW9uQWxnb3JpdGhtID0gJ2lkZW50aXR5JztcbiAgICAgICAgY29uc3QgY29tcHJlc3Npb25BbGdvcml0aG1LZXkgPSBjaGFubmVsT3B0aW9uc1snZ3JwYy5kZWZhdWx0X2NvbXByZXNzaW9uX2FsZ29yaXRobSddO1xuICAgICAgICB0aGlzLm1heFJlY2VpdmVNZXNzYWdlTGVuZ3RoID0gKF9hID0gY2hhbm5lbE9wdGlvbnNbJ2dycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGgnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29uc3RhbnRzXzEuREVGQVVMVF9NQVhfUkVDRUlWRV9NRVNTQUdFX0xFTkdUSDtcbiAgICAgICAgdGhpcy5tYXhTZW5kTWVzc2FnZUxlbmd0aCA9IChfYiA9IGNoYW5uZWxPcHRpb25zWydncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoJ10pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbnN0YW50c18xLkRFRkFVTFRfTUFYX1NFTkRfTUVTU0FHRV9MRU5HVEg7XG4gICAgICAgIGlmIChjb21wcmVzc2lvbkFsZ29yaXRobUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoaXNDb21wcmVzc2lvbkFsZ29yaXRobUtleShjb21wcmVzc2lvbkFsZ29yaXRobUtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRTZWxlY3RlZEVuY29kaW5nID0gY29tcHJlc3Npb25fYWxnb3JpdGhtc18xLkNvbXByZXNzaW9uQWxnb3JpdGhtc1tjb21wcmVzc2lvbkFsZ29yaXRobUtleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyU3VwcG9ydGVkRW5jb2RpbmdzID0gKF9jID0gc2hhcmVkRmlsdGVyQ29uZmlnLnNlcnZlclN1cHBvcnRlZEVuY29kaW5nSGVhZGVyKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHNpdHVhdGlvbnMgaGVyZTpcbiAgICAgICAgICAgICAgICAgKiAxKSBXZSBkb24ndCBoYXZlIGFueSBpbmZvIHlldCBmcm9tIHRoZSBzZXJ2ZXIgYWJvdXQgd2hhdCBjb21wcmVzc2lvbiBpdCBzdXBwb3J0c1xuICAgICAgICAgICAgICAgICAqICAgIEluIHRoYXQgY2FzZSB3ZSBzaG91bGQganVzdCB1c2Ugd2hhdCB0aGUgY2xpZW50IHRlbGxzIHVzIHRvIHVzZVxuICAgICAgICAgICAgICAgICAqIDIpIFdlJ3ZlIHByZXZpb3VzbHkgcmVjZWl2ZWQgYSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgaW5jbHVkaW5nIGEgZ3JwYy1hY2NlcHQtZW5jb2RpbmcgaGVhZGVyXG4gICAgICAgICAgICAgICAgICogICAgSW4gdGhhdCBjYXNlIHdlIG9ubHkgd2FudCB0byB1c2UgdGhlIGVuY29kaW5nIGNob3NlbiBieSB0aGUgY2xpZW50IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXRcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXNlcnZlclN1cHBvcnRlZEVuY29kaW5ncyB8fFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTdXBwb3J0ZWRFbmNvZGluZ3MuaW5jbHVkZXMoY2xpZW50U2VsZWN0ZWRFbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29tcHJlc3Npb25BbGdvcml0aG0gPSBjbGllbnRTZWxlY3RlZEVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb21wcmVzc2lvbiA9IGdldENvbXByZXNzaW9uSGFuZGxlcih0aGlzLmN1cnJlbnRDb21wcmVzc2lvbkFsZ29yaXRobSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ2dpbmcubG9nKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5FUlJPUiwgYEludmFsaWQgdmFsdWUgcHJvdmlkZWQgZm9yIGdycGMuZGVmYXVsdF9jb21wcmVzc2lvbl9hbGdvcml0aG0gb3B0aW9uOiAke2NvbXByZXNzaW9uQWxnb3JpdGhtS2V5fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHNlbmRNZXRhZGF0YShtZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgbWV0YWRhdGE7XG4gICAgICAgIGhlYWRlcnMuc2V0KCdncnBjLWFjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eSxkZWZsYXRlLGd6aXAnKTtcbiAgICAgICAgaGVhZGVycy5zZXQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScpO1xuICAgICAgICAvLyBObyBuZWVkIHRvIHNlbmQgdGhlIGhlYWRlciBpZiBpdCdzIFwiaWRlbnRpdHlcIiAtICBiZWhhdmlvciBpcyBpZGVudGljYWw7IHNhdmUgdGhlIGJhbmR3aWR0aFxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29tcHJlc3Npb25BbGdvcml0aG0gPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgICAgIGhlYWRlcnMucmVtb3ZlKCdncnBjLWVuY29kaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoZWFkZXJzLnNldCgnZ3JwYy1lbmNvZGluZycsIHRoaXMuY3VycmVudENvbXByZXNzaW9uQWxnb3JpdGhtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICB9XG4gICAgcmVjZWl2ZU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVFbmNvZGluZyA9IG1ldGFkYXRhLmdldCgnZ3JwYy1lbmNvZGluZycpO1xuICAgICAgICBpZiAocmVjZWl2ZUVuY29kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVuY29kaW5nID0gcmVjZWl2ZUVuY29kaW5nWzBdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVDb21wcmVzc2lvbiA9IGdldENvbXByZXNzaW9uSGFuZGxlcihlbmNvZGluZywgdGhpcy5tYXhSZWNlaXZlTWVzc2FnZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWV0YWRhdGEucmVtb3ZlKCdncnBjLWVuY29kaW5nJyk7XG4gICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgY29tcHJlc3Npb24gd2UncmUgdXNpbmcgdG8gc2VuZCBtZXNzYWdlcyBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlclxuICAgICAgICAgKiBJZiBub3QsIHJlc2V0IHRoZSBzZW5kQ29tcHJlc3Npb24gZmlsdGVyIGFuZCBoYXZlIGl0IHVzZSB0aGUgZGVmYXVsdCBJZGVudGl0eUhhbmRsZXIgKi9cbiAgICAgICAgY29uc3Qgc2VydmVyU3VwcG9ydGVkRW5jb2RpbmdzSGVhZGVyID0gbWV0YWRhdGEuZ2V0KCdncnBjLWFjY2VwdC1lbmNvZGluZycpWzBdO1xuICAgICAgICBpZiAoc2VydmVyU3VwcG9ydGVkRW5jb2RpbmdzSGVhZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNoYXJlZEZpbHRlckNvbmZpZy5zZXJ2ZXJTdXBwb3J0ZWRFbmNvZGluZ0hlYWRlciA9XG4gICAgICAgICAgICAgICAgc2VydmVyU3VwcG9ydGVkRW5jb2RpbmdzSGVhZGVyO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVyU3VwcG9ydGVkRW5jb2RpbmdzID0gc2VydmVyU3VwcG9ydGVkRW5jb2RpbmdzSGVhZGVyLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBpZiAoIXNlcnZlclN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRDb21wcmVzc2lvbkFsZ29yaXRobSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb21wcmVzc2lvbiA9IG5ldyBJZGVudGl0eUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDb21wcmVzc2lvbkFsZ29yaXRobSA9ICdpZGVudGl0eSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWV0YWRhdGEucmVtb3ZlKCdncnBjLWFjY2VwdC1lbmNvZGluZycpO1xuICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgfVxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvKiBUaGlzIGZpbHRlciBpcyBzcGVjaWFsLiBUaGUgaW5wdXQgbWVzc2FnZSBpcyB0aGUgYmFyZSBtZXNzYWdlIGJ5dGVzLFxuICAgICAgICAgKiBhbmQgdGhlIG91dHB1dCBpcyBhIGZyYW1lZCBhbmQgcG9zc2libHkgY29tcHJlc3NlZCBtZXNzYWdlLiBGb3IgdGhpc1xuICAgICAgICAgKiByZWFzb24sIHRoaXMgZmlsdGVyIHNob3VsZCBiZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWx0ZXIgc3RhY2sgKi9cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRNZXNzYWdlID0gYXdhaXQgbWVzc2FnZTtcbiAgICAgICAgaWYgKHRoaXMubWF4U2VuZE1lc3NhZ2VMZW5ndGggIT09IC0xICYmIHJlc29sdmVkTWVzc2FnZS5tZXNzYWdlLmxlbmd0aCA+IHRoaXMubWF4U2VuZE1lc3NhZ2VMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuUkVTT1VSQ0VfRVhIQVVTVEVELFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IGBBdHRlbXB0ZWQgdG8gc2VuZCBtZXNzYWdlIHdpdGggYSBzaXplIGxhcmdlciB0aGFuICR7dGhpcy5tYXhTZW5kTWVzc2FnZUxlbmd0aH1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb21wcmVzcztcbiAgICAgICAgaWYgKHRoaXMuc2VuZENvbXByZXNzaW9uIGluc3RhbmNlb2YgSWRlbnRpdHlIYW5kbGVyKSB7XG4gICAgICAgICAgICBjb21wcmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tcHJlc3MgPSAoKChfYSA9IHJlc29sdmVkTWVzc2FnZS5mbGFncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMCkgJiAyIC8qIFdyaXRlRmxhZ3MuTm9Db21wcmVzcyAqLykgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGF3YWl0IHRoaXMuc2VuZENvbXByZXNzaW9uLndyaXRlTWVzc2FnZShyZXNvbHZlZE1lc3NhZ2UubWVzc2FnZSwgY29tcHJlc3MpLFxuICAgICAgICAgICAgZmxhZ3M6IHJlc29sdmVkTWVzc2FnZS5mbGFncyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgcmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAvKiBUaGlzIGZpbHRlciBpcyBhbHNvIHNwZWNpYWwuIFRoZSBpbnB1dCBtZXNzYWdlIGlzIGZyYW1lZCBhbmQgcG9zc2libHlcbiAgICAgICAgICogY29tcHJlc3NlZCwgYW5kIHRoZSBvdXRwdXQgbWVzc2FnZSBpcyBkZWZyYW1lZCBhbmQgdW5jb21wcmVzc2VkLiBTb1xuICAgICAgICAgKiB0aGlzIGlzIGFub3RoZXIgcmVhc29uIHRoYXQgdGhpcyBmaWx0ZXIgc2hvdWxkIGJlIGF0IHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAgICAqIGZpbHRlciBzdGFjay4gKi9cbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWl2ZUNvbXByZXNzaW9uLnJlYWRNZXNzYWdlKGF3YWl0IG1lc3NhZ2UpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ29tcHJlc3Npb25GaWx0ZXIgPSBDb21wcmVzc2lvbkZpbHRlcjtcbmNsYXNzIENvbXByZXNzaW9uRmlsdGVyRmFjdG9yeSB7XG4gICAgY29uc3RydWN0b3IoY2hhbm5lbCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnNoYXJlZEZpbHRlckNvbmZpZyA9IHt9O1xuICAgIH1cbiAgICBjcmVhdGVGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcHJlc3Npb25GaWx0ZXIodGhpcy5vcHRpb25zLCB0aGlzLnNoYXJlZEZpbHRlckNvbmZpZyk7XG4gICAgfVxufVxuZXhwb3J0cy5Db21wcmVzc2lvbkZpbHRlckZhY3RvcnkgPSBDb21wcmVzc2lvbkZpbHRlckZhY3Rvcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wcmVzc2lvbi1maWx0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXN0cmljdENvbnRyb2xQbGFuZVN0YXR1c0NvZGUgPSByZXN0cmljdENvbnRyb2xQbGFuZVN0YXR1c0NvZGU7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IElOQVBQUk9QUklBVEVfQ09OVFJPTF9QTEFORV9DT0RFUyA9IFtcbiAgICBjb25zdGFudHNfMS5TdGF0dXMuT0ssXG4gICAgY29uc3RhbnRzXzEuU3RhdHVzLklOVkFMSURfQVJHVU1FTlQsXG4gICAgY29uc3RhbnRzXzEuU3RhdHVzLk5PVF9GT1VORCxcbiAgICBjb25zdGFudHNfMS5TdGF0dXMuQUxSRUFEWV9FWElTVFMsXG4gICAgY29uc3RhbnRzXzEuU3RhdHVzLkZBSUxFRF9QUkVDT05ESVRJT04sXG4gICAgY29uc3RhbnRzXzEuU3RhdHVzLkFCT1JURUQsXG4gICAgY29uc3RhbnRzXzEuU3RhdHVzLk9VVF9PRl9SQU5HRSxcbiAgICBjb25zdGFudHNfMS5TdGF0dXMuREFUQV9MT1NTLFxuXTtcbmZ1bmN0aW9uIHJlc3RyaWN0Q29udHJvbFBsYW5lU3RhdHVzQ29kZShjb2RlLCBkZXRhaWxzKSB7XG4gICAgaWYgKElOQVBQUk9QUklBVEVfQ09OVFJPTF9QTEFORV9DT0RFUy5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLklOVEVSTkFMLFxuICAgICAgICAgICAgZGV0YWlsczogYEludmFsaWQgc3RhdHVzIGZyb20gY29udHJvbCBwbGFuZTogJHtjb2RlfSAke2NvbnN0YW50c18xLlN0YXR1c1tjb2RlXX0gJHtkZXRhaWxzfWAsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geyBjb2RlLCBkZXRhaWxzIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udHJvbC1wbGFuZS1zdGF0dXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5taW5EZWFkbGluZSA9IG1pbkRlYWRsaW5lO1xuZXhwb3J0cy5nZXREZWFkbGluZVRpbWVvdXRTdHJpbmcgPSBnZXREZWFkbGluZVRpbWVvdXRTdHJpbmc7XG5leHBvcnRzLmdldFJlbGF0aXZlVGltZW91dCA9IGdldFJlbGF0aXZlVGltZW91dDtcbmV4cG9ydHMuZGVhZGxpbmVUb1N0cmluZyA9IGRlYWRsaW5lVG9TdHJpbmc7XG5leHBvcnRzLmZvcm1hdERhdGVEaWZmZXJlbmNlID0gZm9ybWF0RGF0ZURpZmZlcmVuY2U7XG5mdW5jdGlvbiBtaW5EZWFkbGluZSguLi5kZWFkbGluZUxpc3QpIHtcbiAgICBsZXQgbWluVmFsdWUgPSBJbmZpbml0eTtcbiAgICBmb3IgKGNvbnN0IGRlYWRsaW5lIG9mIGRlYWRsaW5lTGlzdCkge1xuICAgICAgICBjb25zdCBkZWFkbGluZU1zZWNzID0gZGVhZGxpbmUgaW5zdGFuY2VvZiBEYXRlID8gZGVhZGxpbmUuZ2V0VGltZSgpIDogZGVhZGxpbmU7XG4gICAgICAgIGlmIChkZWFkbGluZU1zZWNzIDwgbWluVmFsdWUpIHtcbiAgICAgICAgICAgIG1pblZhbHVlID0gZGVhZGxpbmVNc2VjcztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWluVmFsdWU7XG59XG5jb25zdCB1bml0cyA9IFtcbiAgICBbJ20nLCAxXSxcbiAgICBbJ1MnLCAxMDAwXSxcbiAgICBbJ00nLCA2MCAqIDEwMDBdLFxuICAgIFsnSCcsIDYwICogNjAgKiAxMDAwXSxcbl07XG5mdW5jdGlvbiBnZXREZWFkbGluZVRpbWVvdXRTdHJpbmcoZGVhZGxpbmUpIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZiAoZGVhZGxpbmUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIGRlYWRsaW5lID0gZGVhZGxpbmUuZ2V0VGltZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lb3V0TXMgPSBNYXRoLm1heChkZWFkbGluZSAtIG5vdywgMCk7XG4gICAgZm9yIChjb25zdCBbdW5pdCwgZmFjdG9yXSBvZiB1bml0cykge1xuICAgICAgICBjb25zdCBhbW91bnQgPSB0aW1lb3V0TXMgLyBmYWN0b3I7XG4gICAgICAgIGlmIChhbW91bnQgPCAxZTgpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoTWF0aC5jZWlsKGFtb3VudCkpICsgdW5pdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlYWRsaW5lIGlzIHRvbyBmYXIgaW4gdGhlIGZ1dHVyZScpO1xufVxuLyoqXG4gKiBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS90aW1lcnMuaHRtbCNzZXR0aW1lb3V0Y2FsbGJhY2stZGVsYXktYXJnc1xuICogSW4gcGFydGljdWxhciwgXCJXaGVuIGRlbGF5IGlzIGxhcmdlciB0aGFuIDIxNDc0ODM2NDcgb3IgbGVzcyB0aGFuIDEsIHRoZVxuICogZGVsYXkgd2lsbCBiZSBzZXQgdG8gMS4gTm9uLWludGVnZXIgZGVsYXlzIGFyZSB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cIlxuICogVGhpcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGlzIGFsbW9zdCAyNSBkYXlzLlxuICovXG5jb25zdCBNQVhfVElNRU9VVF9USU1FID0gMjE0NzQ4MzY0Nztcbi8qKlxuICogR2V0IHRoZSB0aW1lb3V0IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBzZXRUaW1lb3V0IG5vdyBmb3IgdGhlIHRpbWVyXG4gKiB0byBlbmQgYXQgdGhlIGRlYWRsaW5lLiBGb3IgYW55IGRlYWRsaW5lIGJlZm9yZSBub3csIHRoZSB0aW1lciBzaG91bGQgZW5kXG4gKiBpbW1lZGlhdGVseSwgcmVwcmVzZW50ZWQgYnkgYSB2YWx1ZSBvZiAwLiBGb3IgYW55IGRlYWRsaW5lIG1vcmUgdGhhblxuICogTUFYX1RJTUVPVVRfVElNRSBtaWxsaXNlY29uZHMgaW4gdGhlIGZ1dHVyZSwgYSB0aW1lciBjYW5ub3QgYmUgc2V0IHRoYXQgd2lsbFxuICogZW5kIGF0IHRoYXQgdGltZSwgc28gaXQgaXMgdHJlYXRlZCBhcyBpbmZpbml0ZWx5IGZhciBpbiB0aGUgZnV0dXJlLlxuICogQHBhcmFtIGRlYWRsaW5lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVRpbWVvdXQoZGVhZGxpbmUpIHtcbiAgICBjb25zdCBkZWFkbGluZU1zID0gZGVhZGxpbmUgaW5zdGFuY2VvZiBEYXRlID8gZGVhZGxpbmUuZ2V0VGltZSgpIDogZGVhZGxpbmU7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdGltZW91dCA9IGRlYWRsaW5lTXMgLSBub3c7XG4gICAgaWYgKHRpbWVvdXQgPCAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lb3V0ID4gTUFYX1RJTUVPVVRfVElNRSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGltZW91dDtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWFkbGluZVRvU3RyaW5nKGRlYWRsaW5lKSB7XG4gICAgaWYgKGRlYWRsaW5lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gZGVhZGxpbmUudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGVEZWFkbGluZSA9IG5ldyBEYXRlKGRlYWRsaW5lKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihkYXRlRGVhZGxpbmUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnICsgZGVhZGxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZURlYWRsaW5lLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlcyBhcyBhIG51bWJlciBvZiBzZWNvbmRzIGFuZCBmb3JtYXRcbiAqIGl0IGFzIGEgc3RyaW5nLlxuICogQHBhcmFtIHN0YXJ0RGF0ZVxuICogQHBhcmFtIGVuZERhdGVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdERhdGVEaWZmZXJlbmNlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkge1xuICAgIHJldHVybiAoKGVuZERhdGUuZ2V0VGltZSgpIC0gc3RhcnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKS50b0ZpeGVkKDMpICsgJ3MnO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVhZGxpbmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5GaWx0ZXJTdGFja0ZhY3RvcnkgPSBleHBvcnRzLkZpbHRlclN0YWNrID0gdm9pZCAwO1xuY2xhc3MgRmlsdGVyU3RhY2sge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlcnMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICB9XG4gICAgc2VuZE1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBtZXRhZGF0YTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmlsdGVyc1tpXS5zZW5kTWV0YWRhdGEocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG1ldGFkYXRhO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5maWx0ZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbHRlcnNbaV0ucmVjZWl2ZU1ldGFkYXRhKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc2VuZE1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbWVzc2FnZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmlsdGVyc1tpXS5zZW5kTWVzc2FnZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG1lc3NhZ2U7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmZpbHRlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmlsdGVyc1tpXS5yZWNlaXZlTWVzc2FnZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJlY2VpdmVUcmFpbGVycyhzdGF0dXMpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHN0YXR1cztcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZmlsdGVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5maWx0ZXJzW2ldLnJlY2VpdmVUcmFpbGVycyhyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHB1c2goZmlsdGVycykge1xuICAgICAgICB0aGlzLmZpbHRlcnMudW5zaGlmdCguLi5maWx0ZXJzKTtcbiAgICB9XG4gICAgZ2V0RmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycztcbiAgICB9XG59XG5leHBvcnRzLkZpbHRlclN0YWNrID0gRmlsdGVyU3RhY2s7XG5jbGFzcyBGaWx0ZXJTdGFja0ZhY3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKGZhY3Rvcmllcykge1xuICAgICAgICB0aGlzLmZhY3RvcmllcyA9IGZhY3RvcmllcztcbiAgICB9XG4gICAgcHVzaChmaWx0ZXJGYWN0b3JpZXMpIHtcbiAgICAgICAgdGhpcy5mYWN0b3JpZXMudW5zaGlmdCguLi5maWx0ZXJGYWN0b3JpZXMpO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJTdGFja0ZhY3RvcnkoWy4uLnRoaXMuZmFjdG9yaWVzXSk7XG4gICAgfVxuICAgIGNyZWF0ZUZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJTdGFjayh0aGlzLmZhY3Rvcmllcy5tYXAoZmFjdG9yeSA9PiBmYWN0b3J5LmNyZWF0ZUZpbHRlcigpKSk7XG4gICAgfVxufVxuZXhwb3J0cy5GaWx0ZXJTdGFja0ZhY3RvcnkgPSBGaWx0ZXJTdGFja0ZhY3Rvcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWx0ZXItc3RhY2suanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyNSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TaW5nbGVTdWJjaGFubmVsQ2hhbm5lbCA9IHZvaWQgMDtcbmNvbnN0IGNhbGxfbnVtYmVyXzEgPSByZXF1aXJlKFwiLi9jYWxsLW51bWJlclwiKTtcbmNvbnN0IGNoYW5uZWx6XzEgPSByZXF1aXJlKFwiLi9jaGFubmVselwiKTtcbmNvbnN0IGNvbXByZXNzaW9uX2ZpbHRlcl8xID0gcmVxdWlyZShcIi4vY29tcHJlc3Npb24tZmlsdGVyXCIpO1xuY29uc3QgY29ubmVjdGl2aXR5X3N0YXRlXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHktc3RhdGVcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGNvbnRyb2xfcGxhbmVfc3RhdHVzXzEgPSByZXF1aXJlKFwiLi9jb250cm9sLXBsYW5lLXN0YXR1c1wiKTtcbmNvbnN0IGRlYWRsaW5lXzEgPSByZXF1aXJlKFwiLi9kZWFkbGluZVwiKTtcbmNvbnN0IGZpbHRlcl9zdGFja18xID0gcmVxdWlyZShcIi4vZmlsdGVyLXN0YWNrXCIpO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVyXCIpO1xuY29uc3QgdXJpX3BhcnNlcl8xID0gcmVxdWlyZShcIi4vdXJpLXBhcnNlclwiKTtcbmNsYXNzIFN1YmNoYW5uZWxDYWxsV3JhcHBlciB7XG4gICAgY29uc3RydWN0b3Ioc3ViY2hhbm5lbCwgbWV0aG9kLCBmaWx0ZXJTdGFja0ZhY3RvcnksIG9wdGlvbnMsIGNhbGxOdW1iZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsID0gc3ViY2hhbm5lbDtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuY2FsbE51bWJlciA9IGNhbGxOdW1iZXI7XG4gICAgICAgIHRoaXMuY2hpbGRDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIHRoaXMucmVhZFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYWxmQ2xvc2VQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGVuZGluZ1N0YXR1cyA9IG51bGw7XG4gICAgICAgIHRoaXMucmVhZEZpbHRlclBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy53cml0ZUZpbHRlclBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc3BsaXRQYXRoID0gdGhpcy5tZXRob2Quc3BsaXQoJy8nKTtcbiAgICAgICAgbGV0IHNlcnZpY2VOYW1lID0gJyc7XG4gICAgICAgIC8qIFRoZSBzdGFuZGFyZCBwYXRoIGZvcm1hdCBpcyBcIi97c2VydmljZU5hbWV9L3ttZXRob2ROYW1lfVwiLCBzbyBpZiB3ZSBzcGxpdFxuICAgICAgICAgICogYnkgJy8nLCB0aGUgZmlyc3QgaXRlbSBzaG91bGQgYmUgZW1wdHkgYW5kIHRoZSBzZWNvbmQgc2hvdWxkIGJlIHRoZVxuICAgICAgICAgICogc2VydmljZSBuYW1lICovXG4gICAgICAgIGlmIChzcGxpdFBhdGgubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gc3BsaXRQYXRoWzFdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvc3RuYW1lID0gKF9iID0gKF9hID0gKDAsIHVyaV9wYXJzZXJfMS5zcGxpdEhvc3RQb3J0KSh0aGlzLm9wdGlvbnMuaG9zdCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ob3N0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnbG9jYWxob3N0JztcbiAgICAgICAgLyogQ3VycmVudGx5LCBjYWxsIGNyZWRlbnRpYWxzIGFyZSBvbmx5IGFsbG93ZWQgb24gSFRUUFMgY29ubmVjdGlvbnMsIHNvIHdlXG4gICAgICAgICAgKiBjYW4gYXNzdW1lIHRoYXQgdGhlIHNjaGVtZSBpcyBcImh0dHBzXCIgKi9cbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJsID0gYGh0dHBzOi8vJHtob3N0bmFtZX0vJHtzZXJ2aWNlTmFtZX1gO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gKDAsIGRlYWRsaW5lXzEuZ2V0UmVsYXRpdmVUaW1lb3V0KShvcHRpb25zLmRlYWRsaW5lKTtcbiAgICAgICAgaWYgKHRpbWVvdXQgIT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxXaXRoU3RhdHVzKGNvbnN0YW50c18xLlN0YXR1cy5ERUFETElORV9FWENFRURFRCwgJ0RlYWRsaW5lIGV4Y2VlZGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxXaXRoU3RhdHVzKGNvbnN0YW50c18xLlN0YXR1cy5ERUFETElORV9FWENFRURFRCwgJ0RlYWRsaW5lIGV4Y2VlZGVkJyk7XG4gICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjayA9IGZpbHRlclN0YWNrRmFjdG9yeS5jcmVhdGVGaWx0ZXIoKTtcbiAgICB9XG4gICAgY2FuY2VsV2l0aFN0YXR1cyhzdGF0dXMsIGRldGFpbHMpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRDYWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkQ2FsbC5jYW5jZWxXaXRoU3RhdHVzKHN0YXR1cywgZGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSB7XG4gICAgICAgICAgICAgICAgY29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IGRldGFpbHMsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY2hpbGRDYWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UGVlcigpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0aGlzLnN1YmNoYW5uZWwuZ2V0QWRkcmVzcygpO1xuICAgIH1cbiAgICBhc3luYyBzdGFydChtZXRhZGF0YSwgbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1N0YXR1cykge1xuICAgICAgICAgICAgbGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKHRoaXMucGVuZGluZ1N0YXR1cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3ViY2hhbm5lbC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpICE9PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkge1xuICAgICAgICAgICAgbGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogJ1N1YmNoYW5uZWwgbm90IHJlYWR5JyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWRNZXRhZGF0YSA9IGF3YWl0IHRoaXMuZmlsdGVyU3RhY2suc2VuZE1ldGFkYXRhKFByb21pc2UucmVzb2x2ZShtZXRhZGF0YSkpO1xuICAgICAgICBsZXQgY3JlZHNNZXRhZGF0YTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNyZWRzTWV0YWRhdGEgPSBhd2FpdCB0aGlzLnN1YmNoYW5uZWwuZ2V0Q2FsbENyZWRlbnRpYWxzKClcbiAgICAgICAgICAgICAgICAuZ2VuZXJhdGVNZXRhZGF0YSh7IG1ldGhvZF9uYW1lOiB0aGlzLm1ldGhvZCwgc2VydmljZV91cmw6IHRoaXMuc2VydmljZVVybCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlO1xuICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkZXRhaWxzIH0gPSAoMCwgY29udHJvbF9wbGFuZV9zdGF0dXNfMS5yZXN0cmljdENvbnRyb2xQbGFuZVN0YXR1c0NvZGUpKHR5cGVvZiBlcnJvci5jb2RlID09PSAnbnVtYmVyJyA/IGVycm9yLmNvZGUgOiBjb25zdGFudHNfMS5TdGF0dXMuVU5LTk9XTiwgYEdldHRpbmcgbWV0YWRhdGEgZnJvbSBwbHVnaW4gZmFpbGVkIHdpdGggZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIGxpc3RlbmVyLm9uUmVjZWl2ZVN0YXR1cyh7XG4gICAgICAgICAgICAgICAgY29kZTogY29kZSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBkZXRhaWxzLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3JlZHNNZXRhZGF0YS5tZXJnZShmaWx0ZXJlZE1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgY2hpbGRMaXN0ZW5lciA9IHtcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiBhc3luYyAobWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YShhd2FpdCB0aGlzLmZpbHRlclN0YWNrLnJlY2VpdmVNZXRhZGF0YShtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2U6IGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkRmlsdGVyUGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRNZXNzYWdlID0gYXdhaXQgdGhpcy5maWx0ZXJTdGFjay5yZWNlaXZlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRGaWx0ZXJQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZShmaWx0ZXJlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIub25SZWNlaXZlU3RhdHVzKHRoaXMucGVuZGluZ1N0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVjZWl2ZVN0YXR1czogYXN5bmMgKHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3RhdHVzID0gYXdhaXQgdGhpcy5maWx0ZXJTdGFjay5yZWNlaXZlVHJhaWxlcnMoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkRmlsdGVyUGVuZGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBmaWx0ZXJlZFN0YXR1cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uUmVjZWl2ZVN0YXR1cyhmaWx0ZXJlZFN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNoaWxkQ2FsbCA9IHRoaXMuc3ViY2hhbm5lbC5jcmVhdGVDYWxsKGNyZWRzTWV0YWRhdGEsIHRoaXMub3B0aW9ucy5ob3N0LCB0aGlzLm1ldGhvZCwgY2hpbGRMaXN0ZW5lcik7XG4gICAgICAgIGlmICh0aGlzLnJlYWRQZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkQ2FsbC5zdGFydFJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nTWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZENhbGwuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dCh0aGlzLnBlbmRpbmdNZXNzYWdlLmNvbnRleHQsIHRoaXMucGVuZGluZ01lc3NhZ2UubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFsZkNsb3NlUGVuZGluZyAmJiAhdGhpcy53cml0ZUZpbHRlclBlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRDYWxsLmhhbGZDbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHNlbmRNZXNzYWdlV2l0aENvbnRleHQoY29udGV4dCwgbWVzc2FnZSkge1xuICAgICAgICB0aGlzLndyaXRlRmlsdGVyUGVuZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkTWVzc2FnZSA9IGF3YWl0IHRoaXMuZmlsdGVyU3RhY2suc2VuZE1lc3NhZ2UoUHJvbWlzZS5yZXNvbHZlKHsgbWVzc2FnZTogbWVzc2FnZSwgZmxhZ3M6IGNvbnRleHQuZmxhZ3MgfSkpO1xuICAgICAgICB0aGlzLndyaXRlRmlsdGVyUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jaGlsZENhbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRDYWxsLnNlbmRNZXNzYWdlV2l0aENvbnRleHQoY29udGV4dCwgZmlsdGVyZWRNZXNzYWdlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFsZkNsb3NlUGVuZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRDYWxsLmhhbGZDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IHsgY29udGV4dCwgbWVzc2FnZTogZmlsdGVyZWRNZXNzYWdlLm1lc3NhZ2UgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydFJlYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkQ2FsbCkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZENhbGwuc3RhcnRSZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYWxmQ2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkQ2FsbCAmJiAhdGhpcy53cml0ZUZpbHRlclBlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRDYWxsLmhhbGZDbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYWxmQ2xvc2VQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDYWxsTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTnVtYmVyO1xuICAgIH1cbiAgICBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkQ2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRDYWxsLmdldEF1dGhDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNsYXNzIFNpbmdsZVN1YmNoYW5uZWxDaGFubmVsIHtcbiAgICBjb25zdHJ1Y3RvcihzdWJjaGFubmVsLCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsID0gc3ViY2hhbm5lbDtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMuY2hhbm5lbHpFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZSA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6VHJhY2UoKTtcbiAgICAgICAgdGhpcy5jYWxsVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2FsbFRyYWNrZXIoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlblRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNoaWxkcmVuVHJhY2tlcigpO1xuICAgICAgICB0aGlzLmNoYW5uZWx6RW5hYmxlZCA9IG9wdGlvbnNbJ2dycGMuZW5hYmxlX2NoYW5uZWx6J10gIT09IDA7XG4gICAgICAgIHRoaXMuY2hhbm5lbHpSZWYgPSAoMCwgY2hhbm5lbHpfMS5yZWdpc3RlckNoYW5uZWx6Q2hhbm5lbCkoKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGFyZ2V0KSwgKCkgPT4gKHtcbiAgICAgICAgICAgIHRhcmdldDogYCR7KDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGFyZ2V0KX0gKCR7c3ViY2hhbm5lbC5nZXRBZGRyZXNzKCl9KWAsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5zdWJjaGFubmVsLmdldENvbm5lY3Rpdml0eVN0YXRlKCksXG4gICAgICAgICAgICB0cmFjZTogdGhpcy5jaGFubmVselRyYWNlLFxuICAgICAgICAgICAgY2FsbFRyYWNrZXI6IHRoaXMuY2FsbFRyYWNrZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlblRyYWNrZXIuZ2V0Q2hpbGRMaXN0cygpXG4gICAgICAgIH0pLCB0aGlzLmNoYW5uZWx6RW5hYmxlZCk7XG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWx6RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblRyYWNrZXIucmVmQ2hpbGQoc3ViY2hhbm5lbC5nZXRDaGFubmVselJlZigpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlclN0YWNrRmFjdG9yeSA9IG5ldyBmaWx0ZXJfc3RhY2tfMS5GaWx0ZXJTdGFja0ZhY3RvcnkoW25ldyBjb21wcmVzc2lvbl9maWx0ZXJfMS5Db21wcmVzc2lvbkZpbHRlckZhY3RvcnkodGhpcywgb3B0aW9ucyldKTtcbiAgICB9XG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWx6RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblRyYWNrZXIudW5yZWZDaGlsZCh0aGlzLnN1YmNoYW5uZWwuZ2V0Q2hhbm5lbHpSZWYoKSk7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIGNoYW5uZWx6XzEudW5yZWdpc3RlckNoYW5uZWx6UmVmKSh0aGlzLmNoYW5uZWx6UmVmKTtcbiAgICB9XG4gICAgZ2V0VGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGhpcy50YXJnZXQpO1xuICAgIH1cbiAgICBnZXRDb25uZWN0aXZpdHlTdGF0ZSh0cnlUb0Nvbm5lY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHdhdGNoQ29ubmVjdGl2aXR5U3RhdGUoY3VycmVudFN0YXRlLCBkZWFkbGluZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIGdldENoYW5uZWx6UmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVselJlZjtcbiAgICB9XG4gICAgY3JlYXRlQ2FsbChtZXRob2QsIGRlYWRsaW5lKSB7XG4gICAgICAgIGNvbnN0IGNhbGxPcHRpb25zID0ge1xuICAgICAgICAgICAgZGVhZGxpbmU6IGRlYWRsaW5lLFxuICAgICAgICAgICAgaG9zdDogKDAsIHJlc29sdmVyXzEuZ2V0RGVmYXVsdEF1dGhvcml0eSkodGhpcy50YXJnZXQpLFxuICAgICAgICAgICAgZmxhZ3M6IGNvbnN0YW50c18xLlByb3BhZ2F0ZS5ERUZBVUxUUyxcbiAgICAgICAgICAgIHBhcmVudENhbGw6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJjaGFubmVsQ2FsbFdyYXBwZXIodGhpcy5zdWJjaGFubmVsLCBtZXRob2QsIHRoaXMuZmlsdGVyU3RhY2tGYWN0b3J5LCBjYWxsT3B0aW9ucywgKDAsIGNhbGxfbnVtYmVyXzEuZ2V0TmV4dENhbGxOdW1iZXIpKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuU2luZ2xlU3ViY2hhbm5lbENoYW5uZWwgPSBTaW5nbGVTdWJjaGFubmVsQ2hhbm5lbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpbmdsZS1zdWJjaGFubmVsLWNoYW5uZWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdWJjaGFubmVsID0gdm9pZCAwO1xuY29uc3QgY29ubmVjdGl2aXR5X3N0YXRlXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHktc3RhdGVcIik7XG5jb25zdCBiYWNrb2ZmX3RpbWVvdXRfMSA9IHJlcXVpcmUoXCIuL2JhY2tvZmYtdGltZW91dFwiKTtcbmNvbnN0IGxvZ2dpbmcgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCB1cmlfcGFyc2VyXzEgPSByZXF1aXJlKFwiLi91cmktcGFyc2VyXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9hZGRyZXNzXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWFkZHJlc3NcIik7XG5jb25zdCBjaGFubmVsel8xID0gcmVxdWlyZShcIi4vY2hhbm5lbHpcIik7XG5jb25zdCBzaW5nbGVfc3ViY2hhbm5lbF9jaGFubmVsXzEgPSByZXF1aXJlKFwiLi9zaW5nbGUtc3ViY2hhbm5lbC1jaGFubmVsXCIpO1xuY29uc3QgVFJBQ0VSX05BTUUgPSAnc3ViY2hhbm5lbCc7XG4vKiBzZXRJbnRlcnZhbCBhbmQgc2V0VGltZW91dCBvbmx5IGFjY2VwdCBzaWduZWQgMzIgYml0IGludGVnZXJzLiBKUyBkb2Vzbid0XG4gKiBoYXZlIGEgY29uc3RhbnQgZm9yIHRoZSBtYXggc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLCBzbyB0aGlzIGlzIGEgc2ltcGxlIHdheVxuICogdG8gY2FsY3VsYXRlIGl0ICovXG5jb25zdCBLRUVQQUxJVkVfTUFYX1RJTUVfTVMgPSB+KDEgPDwgMzEpO1xuY2xhc3MgU3ViY2hhbm5lbCB7XG4gICAgLyoqXG4gICAgICogQSBjbGFzcyByZXByZXNlbnRpbmcgYSBjb25uZWN0aW9uIHRvIGEgc2luZ2xlIGJhY2tlbmQuXG4gICAgICogQHBhcmFtIGNoYW5uZWxUYXJnZXQgVGhlIHRhcmdldCBzdHJpbmcgZm9yIHRoZSBjaGFubmVsIGFzIGEgd2hvbGVcbiAgICAgKiBAcGFyYW0gc3ViY2hhbm5lbEFkZHJlc3MgVGhlIGFkZHJlc3MgZm9yIHRoZSBiYWNrZW5kIHRoYXQgdGhpcyBzdWJjaGFubmVsXG4gICAgICogICAgIHdpbGwgY29ubmVjdCB0b1xuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBjaGFubmVsIG9wdGlvbnMsIHBsdXMgYW55IHNwZWNpZmljIHN1YmNoYW5uZWwgb3B0aW9uc1xuICAgICAqICAgICBmb3IgdGhpcyBzdWJjaGFubmVsXG4gICAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjaGFubmVsIGNyZWRlbnRpYWxzIHVzZWQgdG8gZXN0YWJsaXNoIHRoaXNcbiAgICAgKiAgICAgY29ubmVjdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWxUYXJnZXQsIHN1YmNoYW5uZWxBZGRyZXNzLCBvcHRpb25zLCBjcmVkZW50aWFscywgY29ubmVjdG9yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jaGFubmVsVGFyZ2V0ID0gY2hhbm5lbFRhcmdldDtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsQWRkcmVzcyA9IHN1YmNoYW5uZWxBZGRyZXNzO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmNvbm5lY3RvciA9IGNvbm5lY3RvcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBzdWJjaGFubmVsJ3MgY3VycmVudCBjb25uZWN0aXZpdHkgc3RhdGUuIEludmFyaWFudDogYHNlc3Npb25gID09PSBgbnVsbGBcbiAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgYGNvbm5lY3Rpdml0eVN0YXRlYCBpcyBJRExFIG9yIFRSQU5TSUVOVF9GQUlMVVJFLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb25uZWN0aXZpdHlTdGF0ZSA9IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdW5kZXJseWluZyBodHRwMiBzZXNzaW9uIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHJhbnNwb3J0ID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBzdWJjaGFubmVsIHNob3VsZCB0cmFuc2l0aW9uIGZyb20gVFJBTlNJRU5UX0ZBSUxVUkUgdG9cbiAgICAgICAgICogQ09OTkVDVElORyBpbnN0ZWFkIG9mIElETEUgd2hlbiB0aGUgYmFja29mZiB0aW1lb3V0IGVuZHMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbnRpbnVlQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBsaXN0IG9mIGxpc3RlbmVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBjb25uZWN0aXZpdHlcbiAgICAgICAgICogc3RhdGUgY2hhbmdlcy4gV2lsbCBiZSBtb2RpZmllZCBieSBgYWRkQ29ubmVjdGl2aXR5U3RhdGVMaXN0ZW5lcmAgYW5kXG4gICAgICAgICAqIGByZW1vdmVDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGF0ZUxpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRyYWNrcyBjaGFubmVscyBhbmQgc3ViY2hhbm5lbCBwb29scyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhpcyBzdWJjaGFubmVsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlZmNvdW50ID0gMDtcbiAgICAgICAgLy8gQ2hhbm5lbHogaW5mb1xuICAgICAgICB0aGlzLmNoYW5uZWx6RW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YVByb2R1Y2VycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsQ2hhbm5lbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGJhY2tvZmZPcHRpb25zID0ge1xuICAgICAgICAgICAgaW5pdGlhbERlbGF5OiBvcHRpb25zWydncnBjLmluaXRpYWxfcmVjb25uZWN0X2JhY2tvZmZfbXMnXSxcbiAgICAgICAgICAgIG1heERlbGF5OiBvcHRpb25zWydncnBjLm1heF9yZWNvbm5lY3RfYmFja29mZl9tcyddLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0ID0gbmV3IGJhY2tvZmZfdGltZW91dF8xLkJhY2tvZmZUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja29mZlRpbWVyKCk7XG4gICAgICAgIH0sIGJhY2tvZmZPcHRpb25zKTtcbiAgICAgICAgdGhpcy5iYWNrb2ZmVGltZW91dC51bnJlZigpO1xuICAgICAgICB0aGlzLnN1YmNoYW5uZWxBZGRyZXNzU3RyaW5nID0gKDAsIHN1YmNoYW5uZWxfYWRkcmVzc18xLnN1YmNoYW5uZWxBZGRyZXNzVG9TdHJpbmcpKHN1YmNoYW5uZWxBZGRyZXNzKTtcbiAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lID0gKF9hID0gb3B0aW9uc1snZ3JwYy5rZWVwYWxpdmVfdGltZV9tcyddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAtMTtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2dycGMuZW5hYmxlX2NoYW5uZWx6J10gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6VHJhY2UgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVselRyYWNlU3R1YigpO1xuICAgICAgICAgICAgdGhpcy5jYWxsVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2FsbFRyYWNrZXJTdHViKCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2hpbGRyZW5UcmFja2VyU3R1YigpO1xuICAgICAgICAgICAgdGhpcy5zdHJlYW1UcmFja2VyID0gbmV3IGNoYW5uZWx6XzEuQ2hhbm5lbHpDYWxsVHJhY2tlclN0dWIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZSA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6VHJhY2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbFRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNhbGxUcmFja2VyKCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2hpbGRyZW5UcmFja2VyKCk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbVRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNhbGxUcmFja2VyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFubmVselJlZiA9ICgwLCBjaGFubmVsel8xLnJlZ2lzdGVyQ2hhbm5lbHpTdWJjaGFubmVsKSh0aGlzLnN1YmNoYW5uZWxBZGRyZXNzU3RyaW5nLCAoKSA9PiB0aGlzLmdldENoYW5uZWx6SW5mbygpLCB0aGlzLmNoYW5uZWx6RW5hYmxlZCk7XG4gICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdTdWJjaGFubmVsIGNyZWF0ZWQnKTtcbiAgICAgICAgdGhpcy50cmFjZSgnU3ViY2hhbm5lbCBjb25zdHJ1Y3RlZCB3aXRoIG9wdGlvbnMgJyArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgICAgdGhpcy5zZWN1cmVDb25uZWN0b3IgPSBjcmVkZW50aWFscy5fY3JlYXRlU2VjdXJlQ29ubmVjdG9yKGNoYW5uZWxUYXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBnZXRDaGFubmVsekluZm8oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5jb25uZWN0aXZpdHlTdGF0ZSxcbiAgICAgICAgICAgIHRyYWNlOiB0aGlzLmNoYW5uZWx6VHJhY2UsXG4gICAgICAgICAgICBjYWxsVHJhY2tlcjogdGhpcy5jYWxsVHJhY2tlcixcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuVHJhY2tlci5nZXRDaGlsZExpc3RzKCksXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuc3ViY2hhbm5lbEFkZHJlc3NTdHJpbmcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRyYWNlKHRleHQpIHtcbiAgICAgICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCAnKCcgK1xuICAgICAgICAgICAgdGhpcy5jaGFubmVselJlZi5pZCArXG4gICAgICAgICAgICAnKSAnICtcbiAgICAgICAgICAgIHRoaXMuc3ViY2hhbm5lbEFkZHJlc3NTdHJpbmcgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIHRleHQpO1xuICAgIH1cbiAgICByZWZUcmFjZSh0ZXh0KSB7XG4gICAgICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCAnc3ViY2hhbm5lbF9yZWZjb3VudCcsICcoJyArXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6UmVmLmlkICtcbiAgICAgICAgICAgICcpICcgK1xuICAgICAgICAgICAgdGhpcy5zdWJjaGFubmVsQWRkcmVzc1N0cmluZyArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgdGV4dCk7XG4gICAgfVxuICAgIGhhbmRsZUJhY2tvZmZUaW1lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGludWVDb25uZWN0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ub1N0YXRlKFtjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRV0sIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLkNPTk5FQ1RJTkcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG9TdGF0ZShbY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkVdLCBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCBhIGJhY2tvZmYgdGltZXIgd2l0aCB0aGUgY3VycmVudCBuZXh0QmFja29mZiB0aW1lb3V0XG4gICAgICovXG4gICAgc3RhcnRCYWNrb2ZmKCkge1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0LnJ1bk9uY2UoKTtcbiAgICB9XG4gICAgc3RvcEJhY2tvZmYoKSB7XG4gICAgICAgIHRoaXMuYmFja29mZlRpbWVvdXQuc3RvcCgpO1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0LnJlc2V0KCk7XG4gICAgfVxuICAgIHN0YXJ0Q29ubmVjdGluZ0ludGVybmFsKCkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnXSkge1xuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRLZWVwYWxpdmVUaW1lID0gTWF0aC5taW4odGhpcy5rZWVwYWxpdmVUaW1lLCBLRUVQQUxJVkVfTUFYX1RJTUVfTVMpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnOiBhZGp1c3RlZEtlZXBhbGl2ZVRpbWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25uZWN0b3JcbiAgICAgICAgICAgIC5jb25uZWN0KHRoaXMuc3ViY2hhbm5lbEFkZHJlc3MsIHRoaXMuc2VjdXJlQ29ubmVjdG9yLCBvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4odHJhbnNwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zaXRpb25Ub1N0YXRlKFtjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5DT05ORUNUSU5HXSwgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5UcmFja2VyLnJlZkNoaWxkKHRyYW5zcG9ydC5nZXRDaGFubmVselJlZigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFkZERpc2Nvbm5lY3RMaXN0ZW5lcih0b29NYW55UGluZ3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ub1N0YXRlKFtjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWV0sIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vTWFueVBpbmdzICYmIHRoaXMua2VlcGFsaXZlVGltZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVGltZSAqPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5sb2coY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SLCBgQ29ubmVjdGlvbiB0byAkeygwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHRoaXMuY2hhbm5lbFRhcmdldCl9IGF0ICR7dGhpcy5zdWJjaGFubmVsQWRkcmVzc1N0cmluZ30gcmVqZWN0ZWQgYnkgc2VydmVyIGJlY2F1c2Ugb2YgZXhjZXNzIHBpbmdzLiBJbmNyZWFzaW5nIHBpbmcgaW50ZXJ2YWwgdG8gJHt0aGlzLmtlZXBhbGl2ZVRpbWV9IG1zYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qIElmIHdlIGNhbid0IHRyYW5zaXRpb24gZnJvbSBDT05ORUNUSU5HIHRvIFJFQURZIGhlcmUsIHdlIHdpbGxcbiAgICAgICAgICAgICAgICAgKiBub3QgYmUgdXNpbmcgdGhpcyB0cmFuc3BvcnQsIHNvIHJlbGVhc2UgaXRzIHJlc291cmNlcy4gKi9cbiAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2h1dGRvd24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG9TdGF0ZShbY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuQ09OTkVDVElOR10sIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlRSQU5TSUVOVF9GQUlMVVJFLCBgJHtlcnJvcn1gKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYXRlIGEgc3RhdGUgdHJhbnNpdGlvbiBmcm9tIGFueSBlbGVtZW50IG9mIG9sZFN0YXRlcyB0byB0aGUgbmV3XG4gICAgICogc3RhdGUuIElmIHRoZSBjdXJyZW50IGNvbm5lY3Rpdml0eVN0YXRlIGlzIG5vdCBpbiBvbGRTdGF0ZXMsIGRvIG5vdGhpbmcuXG4gICAgICogQHBhcmFtIG9sZFN0YXRlcyBUaGUgc2V0IG9mIHN0YXRlcyB0byB0cmFuc2l0aW9uIGZyb21cbiAgICAgKiBAcGFyYW0gbmV3U3RhdGUgVGhlIHN0YXRlIHRvIHRyYW5zaXRpb24gdG9cbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICB0cmFuc2l0aW9uVG9TdGF0ZShvbGRTdGF0ZXMsIG5ld1N0YXRlLCBlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKG9sZFN0YXRlcy5pbmRleE9mKHRoaXMuY29ubmVjdGl2aXR5U3RhdGUpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2UoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbdGhpcy5jb25uZWN0aXZpdHlTdGF0ZV0gK1xuICAgICAgICAgICAgICAgICcgLT4gJyArXG4gICAgICAgICAgICAgICAgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbbmV3U3RhdGVdICtcbiAgICAgICAgICAgICAgICAnIHdpdGggZXJyb3IgXCInICsgZXJyb3JNZXNzYWdlICsgJ1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW3RoaXMuY29ubmVjdGl2aXR5U3RhdGVdICtcbiAgICAgICAgICAgICAgICAnIC0+ICcgK1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW25ld1N0YXRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6VHJhY2UuYWRkVHJhY2UoJ0NUX0lORk8nLCAnQ29ubmVjdGl2aXR5IHN0YXRlIGNoYW5nZSB0byAnICsgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbbmV3U3RhdGVdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gdGhpcy5jb25uZWN0aXZpdHlTdGF0ZTtcbiAgICAgICAgdGhpcy5jb25uZWN0aXZpdHlTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEJhY2tvZmYoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuQ09OTkVDVElORzpcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QmFja29mZigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRDb25uZWN0aW5nSW50ZXJuYWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRpbnVlQ29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRTpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFubmVsekVuYWJsZWQgJiYgdGhpcy50cmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlblRyYWNrZXIudW5yZWZDaGlsZCh0aGlzLnRyYW5zcG9ydC5nZXRDaGFubmVselJlZigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKF9hID0gdGhpcy50cmFuc3BvcnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaHV0ZG93bigpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvKiBJZiB0aGUgYmFja29mZiB0aW1lciBoYXMgYWxyZWFkeSBlbmRlZCBieSB0aGUgdGltZSB3ZSBnZXQgdG8gdGhlXG4gICAgICAgICAgICAgICAgICogVFJBTlNJRU5UX0ZBSUxVUkUgc3RhdGUsIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgdHJhbnNpdGlvbiBvdXQgb2ZcbiAgICAgICAgICAgICAgICAgKiBUUkFOU0lFTlRfRkFJTFVSRSBhcyB0aG91Z2ggdGhlIGJhY2tvZmYgdGltZXIgaXMgZW5kaW5nIHJpZ2h0IG5vdyAqL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5iYWNrb2ZmVGltZW91dC5pc1J1bm5pbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja29mZlRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRTpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFubmVsekVuYWJsZWQgJiYgdGhpcy50cmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlblRyYWNrZXIudW5yZWZDaGlsZCh0aGlzLnRyYW5zcG9ydC5nZXRDaGFubmVselJlZigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKF9iID0gdGhpcy50cmFuc3BvcnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zaHV0ZG93bigpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiB1bmtub3duIENvbm5lY3Rpdml0eVN0YXRlICR7bmV3U3RhdGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLnN0YXRlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcih0aGlzLCBwcmV2aW91c1N0YXRlLCBuZXdTdGF0ZSwgdGhpcy5rZWVwYWxpdmVUaW1lLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZWYoKSB7XG4gICAgICAgIHRoaXMucmVmVHJhY2UoJ3JlZmNvdW50ICcgKyB0aGlzLnJlZmNvdW50ICsgJyAtPiAnICsgKHRoaXMucmVmY291bnQgKyAxKSk7XG4gICAgICAgIHRoaXMucmVmY291bnQgKz0gMTtcbiAgICB9XG4gICAgdW5yZWYoKSB7XG4gICAgICAgIHRoaXMucmVmVHJhY2UoJ3JlZmNvdW50ICcgKyB0aGlzLnJlZmNvdW50ICsgJyAtPiAnICsgKHRoaXMucmVmY291bnQgLSAxKSk7XG4gICAgICAgIHRoaXMucmVmY291bnQgLT0gMTtcbiAgICAgICAgaWYgKHRoaXMucmVmY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdTaHV0dGluZyBkb3duJyk7XG4gICAgICAgICAgICAoMCwgY2hhbm5lbHpfMS51bnJlZ2lzdGVyQ2hhbm5lbHpSZWYpKHRoaXMuY2hhbm5lbHpSZWYpO1xuICAgICAgICAgICAgdGhpcy5zZWN1cmVDb25uZWN0b3IuZGVzdHJveSgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG9TdGF0ZShbY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuQ09OTkVDVElORywgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFldLCBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVucmVmSWZPbmVSZWYoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZmNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnVucmVmKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNyZWF0ZUNhbGwobWV0YWRhdGEsIGhvc3QsIG1ldGhvZCwgbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyYW5zcG9ydCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGNhbGwsIHN1YmNoYW5uZWwgbm90IFJFQURZJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXRzVHJhY2tlcjtcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxUcmFja2VyLmFkZENhbGxTdGFydGVkKCk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbVRyYWNrZXIuYWRkQ2FsbFN0YXJ0ZWQoKTtcbiAgICAgICAgICAgIHN0YXRzVHJhY2tlciA9IHtcbiAgICAgICAgICAgICAgICBvbkNhbGxFbmQ6IHN0YXR1cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxUcmFja2VyLmFkZENhbGxTdWNjZWVkZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFRyYWNrZXIuYWRkQ2FsbEZhaWxlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0c1RyYWNrZXIgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuY3JlYXRlQ2FsbChtZXRhZGF0YSwgaG9zdCwgbWV0aG9kLCBsaXN0ZW5lciwgc3RhdHNUcmFja2VyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHN1YmNoYW5uZWwgaXMgY3VycmVudGx5IElETEUsIHN0YXJ0IGNvbm5lY3RpbmcgYW5kIHN3aXRjaCB0byB0aGVcbiAgICAgKiBDT05ORUNUSU5HIHN0YXRlLiBJZiB0aGUgc3ViY2hhbm5lbCBpcyBjdXJyZW50IGluIFRSQU5TSUVOVF9GQUlMVVJFLFxuICAgICAqIHRoZSBuZXh0IHRpbWUgaXQgd291bGQgdHJhbnNpdGlvbiB0byBJRExFLCBzdGFydCBjb25uZWN0aW5nIGFnYWluIGluc3RlYWQuXG4gICAgICogT3RoZXJ3aXNlLCBkbyBub3RoaW5nLlxuICAgICAqL1xuICAgIHN0YXJ0Q29ubmVjdGluZygpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAvKiBGaXJzdCwgdHJ5IHRvIHRyYW5zaXRpb24gZnJvbSBJRExFIHRvIGNvbm5lY3RpbmcuIElmIHRoYXQgZG9lc24ndCBoYXBwZW5cbiAgICAgICAgICAgICAqIGJlY2F1c2UgdGhlIHN0YXRlIGlzIG5vdCBjdXJyZW50bHkgSURMRSwgY2hlY2sgaWYgaXQgaXNcbiAgICAgICAgICAgICAqIFRSQU5TSUVOVF9GQUlMVVJFLCBhbmQgaWYgc28gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQgZ28gYmFjayB0b1xuICAgICAgICAgICAgICogY29ubmVjdGluZyBhZnRlciB0aGUgYmFja29mZiB0aW1lciBlbmRzLiBPdGhlcndpc2UgZG8gbm90aGluZyAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRyYW5zaXRpb25Ub1N0YXRlKFtjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFXSwgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuQ09OTkVDVElORykpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250aW51ZUNvbm5lY3RpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc3ViY2hhbm5lbCdzIGN1cnJlbnQgY29ubmVjdGl2aXR5IHN0YXRlLlxuICAgICAqL1xuICAgIGdldENvbm5lY3Rpdml0eVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aXZpdHlTdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgbGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzdWJjaGFubmVsJ3NcbiAgICAgKiBjb25uZWN0aXZpdHkgc3RhdGUgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0gbGlzdGVuZXJcbiAgICAgKi9cbiAgICBhZGRDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuc3RhdGVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgbGlzdGVuZXIgcHJldmlvdXNseSBhZGRlZCB3aXRoIGBhZGRDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyYFxuICAgICAqIEBwYXJhbSBsaXN0ZW5lciBBIHJlZmVyZW5jZSB0byBhIGZ1bmN0aW9uIHByZXZpb3VzbHkgcGFzc2VkIHRvXG4gICAgICogICAgIGBhZGRDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyYFxuICAgICAqL1xuICAgIHJlbW92ZUNvbm5lY3Rpdml0eVN0YXRlTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZUxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgYmFja29mZiB0aW1lb3V0LCBhbmQgaW1tZWRpYXRlbHkgc3RhcnQgY29ubmVjdGluZyBpZiBpbiBiYWNrb2ZmLlxuICAgICAqL1xuICAgIHJlc2V0QmFja29mZigpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJhY2tvZmZUaW1lb3V0LnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ub1N0YXRlKFtjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRV0sIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLkNPTk5FQ1RJTkcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0QWRkcmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViY2hhbm5lbEFkZHJlc3NTdHJpbmc7XG4gICAgfVxuICAgIGdldENoYW5uZWx6UmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVselJlZjtcbiAgICB9XG4gICAgaXNIZWFsdGh5KCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYWRkSGVhbHRoU3RhdGVXYXRjaGVyKGxpc3RlbmVyKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgd2l0aCB0aGUgbGlzdGVuZXJcbiAgICB9XG4gICAgcmVtb3ZlSGVhbHRoU3RhdGVXYXRjaGVyKGxpc3RlbmVyKSB7XG4gICAgICAgIC8vIERvIG5vdGhpbmcgd2l0aCB0aGUgbGlzdGVuZXJcbiAgICB9XG4gICAgZ2V0UmVhbFN1YmNoYW5uZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZWFsU3ViY2hhbm5lbEVxdWFscyhvdGhlcikge1xuICAgICAgICByZXR1cm4gb3RoZXIuZ2V0UmVhbFN1YmNoYW5uZWwoKSA9PT0gdGhpcztcbiAgICB9XG4gICAgdGhyb3R0bGVLZWVwYWxpdmUobmV3S2VlcGFsaXZlVGltZSkge1xuICAgICAgICBpZiAobmV3S2VlcGFsaXZlVGltZSA+IHRoaXMua2VlcGFsaXZlVGltZSkge1xuICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lID0gbmV3S2VlcGFsaXZlVGltZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDYWxsQ3JlZGVudGlhbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3VyZUNvbm5lY3Rvci5nZXRDYWxsQ3JlZGVudGlhbHMoKTtcbiAgICB9XG4gICAgZ2V0Q2hhbm5lbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YmNoYW5uZWxDaGFubmVsKSB7XG4gICAgICAgICAgICB0aGlzLnN1YmNoYW5uZWxDaGFubmVsID0gbmV3IHNpbmdsZV9zdWJjaGFubmVsX2NoYW5uZWxfMS5TaW5nbGVTdWJjaGFubmVsQ2hhbm5lbCh0aGlzLCB0aGlzLmNoYW5uZWxUYXJnZXQsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViY2hhbm5lbENoYW5uZWw7XG4gICAgfVxuICAgIGFkZERhdGFXYXRjaGVyKGRhdGFXYXRjaGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuICAgIGdldE9yQ3JlYXRlRGF0YVByb2R1Y2VyKG5hbWUsIGNyZWF0ZURhdGFQcm9kdWNlcikge1xuICAgICAgICBjb25zdCBleGlzdGluZ1Byb2R1Y2VyID0gdGhpcy5kYXRhUHJvZHVjZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1Byb2R1Y2VyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1Byb2R1Y2VyID0gY3JlYXRlRGF0YVByb2R1Y2VyKHRoaXMpO1xuICAgICAgICB0aGlzLmRhdGFQcm9kdWNlcnMuc2V0KG5hbWUsIG5ld1Byb2R1Y2VyKTtcbiAgICAgICAgcmV0dXJuIG5ld1Byb2R1Y2VyO1xuICAgIH1cbiAgICByZW1vdmVEYXRhUHJvZHVjZXIobmFtZSkge1xuICAgICAgICB0aGlzLmRhdGFQcm9kdWNlcnMuZGVsZXRlKG5hbWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuU3ViY2hhbm5lbCA9IFN1YmNoYW5uZWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJjaGFubmVsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjQgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR1JQQ19OT0RFX1VTRV9BTFRFUk5BVElWRV9SRVNPTFZFUiA9IHZvaWQgMDtcbmV4cG9ydHMuR1JQQ19OT0RFX1VTRV9BTFRFUk5BVElWRV9SRVNPTFZFUiA9ICgoX2EgPSBwcm9jZXNzLmVudi5HUlBDX05PREVfVVNFX0FMVEVSTkFUSVZFX1JFU09MVkVSKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnZmFsc2UnKSA9PT0gJ3RydWUnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW52aXJvbm1lbnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRFRkFVTFRfUE9SVCA9IHZvaWQgMDtcbmV4cG9ydHMuc2V0dXAgPSBzZXR1cDtcbmNvbnN0IHJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlclwiKTtcbmNvbnN0IGRuc18xID0gcmVxdWlyZShcImRuc1wiKTtcbmNvbnN0IHNlcnZpY2VfY29uZmlnXzEgPSByZXF1aXJlKFwiLi9zZXJ2aWNlLWNvbmZpZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgY2FsbF9pbnRlcmZhY2VfMSA9IHJlcXVpcmUoXCIuL2NhbGwtaW50ZXJmYWNlXCIpO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgbG9nZ2luZyA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCBjb25zdGFudHNfMiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IHVyaV9wYXJzZXJfMSA9IHJlcXVpcmUoXCIuL3VyaS1wYXJzZXJcIik7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5jb25zdCBiYWNrb2ZmX3RpbWVvdXRfMSA9IHJlcXVpcmUoXCIuL2JhY2tvZmYtdGltZW91dFwiKTtcbmNvbnN0IGVudmlyb25tZW50XzEgPSByZXF1aXJlKFwiLi9lbnZpcm9ubWVudFwiKTtcbmNvbnN0IFRSQUNFUl9OQU1FID0gJ2Ruc19yZXNvbHZlcic7XG5mdW5jdGlvbiB0cmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMi5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCB0ZXh0KTtcbn1cbi8qKlxuICogVGhlIGRlZmF1bHQgVENQIHBvcnQgdG8gY29ubmVjdCB0byBpZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gdGhlIHRhcmdldC5cbiAqL1xuZXhwb3J0cy5ERUZBVUxUX1BPUlQgPSA0NDM7XG5jb25zdCBERUZBVUxUX01JTl9USU1FX0JFVFdFRU5fUkVTT0xVVElPTlNfTVMgPSAzMDAwMDtcbi8qKlxuICogUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gdGhhdCBoYW5kbGVzIEROUyBuYW1lcyBhbmQgSVAgYWRkcmVzc2VzLlxuICovXG5jbGFzcyBEbnNSZXNvbHZlciB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0LCBsaXN0ZW5lciwgY2hhbm5lbE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgIHRoaXMucGVuZGluZ0xvb2t1cFByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzLnBlbmRpbmdUeHRQcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXRlc3RMb29rdXBSZXN1bHQgPSBudWxsO1xuICAgICAgICB0aGlzLmxhdGVzdFNlcnZpY2VDb25maWdSZXN1bHQgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbnRpbnVlUmVzb2x2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNOZXh0UmVzb2x1dGlvblRpbWVyUnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU2VydmljZUNvbmZpZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJldHVybmVkSXBSZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbHRlcm5hdGl2ZVJlc29sdmVyID0gbmV3IGRuc18xLnByb21pc2VzLlJlc29sdmVyKCk7XG4gICAgICAgIHRyYWNlKCdSZXNvbHZlciBjb25zdHJ1Y3RlZCBmb3IgdGFyZ2V0ICcgKyAoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0YXJnZXQpKTtcbiAgICAgICAgaWYgKHRhcmdldC5hdXRob3JpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRpdmVSZXNvbHZlci5zZXRTZXJ2ZXJzKFt0YXJnZXQuYXV0aG9yaXR5XSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdFBvcnQgPSAoMCwgdXJpX3BhcnNlcl8xLnNwbGl0SG9zdFBvcnQpKHRhcmdldC5wYXRoKTtcbiAgICAgICAgaWYgKGhvc3RQb3J0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlwUmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZG5zSG9zdG5hbWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoMCwgbmV0XzEuaXNJUHY0KShob3N0UG9ydC5ob3N0KSB8fCAoMCwgbmV0XzEuaXNJUHY2KShob3N0UG9ydC5ob3N0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXBSZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDogaG9zdFBvcnQuaG9zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogKF9hID0gaG9zdFBvcnQucG9ydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXhwb3J0cy5ERUZBVUxUX1BPUlQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRuc0hvc3RuYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pcFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kbnNIb3N0bmFtZSA9IGhvc3RQb3J0Lmhvc3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0ID0gKF9iID0gaG9zdFBvcnQucG9ydCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZXhwb3J0cy5ERUZBVUxUX1BPUlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZXJjZW50YWdlID0gTWF0aC5yYW5kb20oKSAqIDEwMDtcbiAgICAgICAgaWYgKGNoYW5uZWxPcHRpb25zWydncnBjLnNlcnZpY2VfY29uZmlnX2Rpc2FibGVfcmVzb2x1dGlvbiddID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VydmljZUNvbmZpZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlZmF1bHRSZXNvbHV0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICBkZXRhaWxzOiBgTmFtZSByZXNvbHV0aW9uIGZhaWxlZCBmb3IgdGFyZ2V0ICR7KDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGhpcy50YXJnZXQpfWAsXG4gICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYmFja29mZk9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpbml0aWFsRGVsYXk6IGNoYW5uZWxPcHRpb25zWydncnBjLmluaXRpYWxfcmVjb25uZWN0X2JhY2tvZmZfbXMnXSxcbiAgICAgICAgICAgIG1heERlbGF5OiBjaGFubmVsT3B0aW9uc1snZ3JwYy5tYXhfcmVjb25uZWN0X2JhY2tvZmZfbXMnXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5iYWNrb2ZmID0gbmV3IGJhY2tvZmZfdGltZW91dF8xLkJhY2tvZmZUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRpbnVlUmVzb2x2aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFJlc29sdXRpb25XaXRoQmFja29mZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBiYWNrb2ZmT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYmFja29mZi51bnJlZigpO1xuICAgICAgICB0aGlzLm1pblRpbWVCZXR3ZWVuUmVzb2x1dGlvbnNNcyA9XG4gICAgICAgICAgICAoX2MgPSBjaGFubmVsT3B0aW9uc1snZ3JwYy5kbnNfbWluX3RpbWVfYmV0d2Vlbl9yZXNvbHV0aW9uc19tcyddKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBERUZBVUxUX01JTl9USU1FX0JFVFdFRU5fUkVTT0xVVElPTlNfTVM7XG4gICAgICAgIHRoaXMubmV4dFJlc29sdXRpb25UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB9LCAwKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubmV4dFJlc29sdXRpb25UaW1lcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSB0YXJnZXQgaXMgYW4gSVAgYWRkcmVzcywganVzdCBwcm92aWRlIHRoYXQgYWRkcmVzcyBhcyBhIHJlc3VsdC5cbiAgICAgKiBPdGhlcndpc2UsIGluaXRpYXRlIEEsIEFBQUEsIGFuZCBUWFQgbG9va3Vwc1xuICAgICAqL1xuICAgIHN0YXJ0UmVzb2x1dGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXBSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXR1cm5lZElwUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdHJhY2UoJ1JldHVybmluZyBJUCBhZGRyZXNzIGZvciB0YXJnZXQgJyArICgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHRoaXMudGFyZ2V0KSk7XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcigoMCwgY2FsbF9pbnRlcmZhY2VfMS5zdGF0dXNPckZyb21WYWx1ZSkodGhpcy5pcFJlc3VsdCksIHt9LCBudWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5lZElwUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYmFja29mZi5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tvZmYucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcE5leHRSZXNvbHV0aW9uVGltZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kbnNIb3N0bmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdHJhY2UoJ0ZhaWxlZCB0byBwYXJzZSBETlMgYWRkcmVzcyAnICsgKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGhpcy50YXJnZXQpKTtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcigoMCwgY2FsbF9pbnRlcmZhY2VfMS5zdGF0dXNPckZyb21FcnJvcikoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gcGFyc2UgRE5TIGFkZHJlc3MgJHsoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0aGlzLnRhcmdldCl9YFxuICAgICAgICAgICAgICAgIH0pLCB7fSwgbnVsbCwgJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN0b3BOZXh0UmVzb2x1dGlvblRpbWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nTG9va3VwUHJvbWlzZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYWNlKCdMb29raW5nIHVwIEROUyBob3N0bmFtZSAnICsgdGhpcy5kbnNIb3N0bmFtZSk7XG4gICAgICAgICAgICAvKiBXZSBjbGVhciBvdXQgbGF0ZXN0TG9va3VwUmVzdWx0IGhlcmUgdG8gZW5zdXJlIHRoYXQgaXQgY29udGFpbnMgdGhlXG4gICAgICAgICAgICAgKiBsYXRlc3QgcmVzdWx0IHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc3RhcnRlZCByZXNvbHZpbmcuIFRoYXQgd2F5LCB0aGVcbiAgICAgICAgICAgICAqIFRYVCByZXNvbHV0aW9uIGhhbmRsZXIgY2FuIHVzZSBpdCwgYnV0IG9ubHkgaWYgaXQgZmluaXNoZXMgc2Vjb25kLiBXZVxuICAgICAgICAgICAgICogZG9uJ3QgY2xlYXIgb3V0IGFueSBwcmV2aW91cyBzZXJ2aWNlIGNvbmZpZyByZXN1bHRzIGJlY2F1c2UgaXQnc1xuICAgICAgICAgICAgICogYmV0dGVyIHRvIHVzZSBhIHNlcnZpY2UgY29uZmlnIHRoYXQncyBzbGlnaHRseSBvdXQgb2YgZGF0ZSB0aGFuIHRvXG4gICAgICAgICAgICAgKiByZXZlcnQgdG8gYW4gZWZmZWN0aXZlbHkgYmxhbmsgb25lLiAqL1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RMb29rdXBSZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLmRuc0hvc3RuYW1lO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTG9va3VwUHJvbWlzZSA9IHRoaXMubG9va3VwKGhvc3RuYW1lKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0xvb2t1cFByb21pc2UudGhlbihhZGRyZXNzTGlzdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0xvb2t1cFByb21pc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdMb29rdXBQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdExvb2t1cFJlc3VsdCA9ICgwLCBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbVZhbHVlKShhZGRyZXNzTGlzdC5tYXAoYWRkcmVzcyA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXM6IFthZGRyZXNzXSxcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsbEFkZHJlc3Nlc1N0cmluZyA9ICdbJyArXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3NMaXN0Lm1hcChhZGRyID0+IGFkZHIuaG9zdCArICc6JyArIGFkZHIucG9ydCkuam9pbignLCcpICtcbiAgICAgICAgICAgICAgICAgICAgJ10nO1xuICAgICAgICAgICAgICAgIHRyYWNlKCdSZXNvbHZlZCBhZGRyZXNzZXMgZm9yIHRhcmdldCAnICtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGhpcy50YXJnZXQpICtcbiAgICAgICAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgICAgICAgIGFsbEFkZHJlc3Nlc1N0cmluZyk7XG4gICAgICAgICAgICAgICAgLyogSWYgdGhlIFRYVCBsb29rdXAgaGFzIG5vdCB5ZXQgZmluaXNoZWQsIGJvdGggb2YgdGhlIGxhc3QgdHdvXG4gICAgICAgICAgICAgICAgICogYXJndW1lbnRzIHdpbGwgYmUgbnVsbCwgd2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgZ2V0dGluZyBhblxuICAgICAgICAgICAgICAgICAqIGVtcHR5IFRYVCByZXNwb25zZS4gV2hlbiB0aGUgVFhUIGxvb2t1cCBkb2VzIGZpbmlzaCwgaXRzIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgKiBjYW4gdXBkYXRlIHRoZSBzZXJ2aWNlIGNvbmZpZyBieSB1c2luZyB0aGUgc2FtZSBhZGRyZXNzIGxpc3QgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBoZWFsdGhTdGF0dXMgPSB0aGlzLmxpc3RlbmVyKHRoaXMubGF0ZXN0TG9va3VwUmVzdWx0LCB7fSwgdGhpcy5sYXRlc3RTZXJ2aWNlQ29uZmlnUmVzdWx0LCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVIZWFsdGhTdGF0dXMoaGVhbHRoU3RhdHVzKTtcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0xvb2t1cFByb21pc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmFjZSgnUmVzb2x1dGlvbiBlcnJvciBmb3IgdGFyZ2V0ICcgK1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0aGlzLnRhcmdldCkgK1xuICAgICAgICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0xvb2t1cFByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcE5leHRSZXNvbHV0aW9uVGltZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyKCgwLCBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbUVycm9yKSh0aGlzLmRlZmF1bHRSZXNvbHV0aW9uRXJyb3IpLCB7fSwgdGhpcy5sYXRlc3RTZXJ2aWNlQ29uZmlnUmVzdWx0LCAnJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8qIElmIHRoZXJlIGFscmVhZHkgaXMgYSBzdGlsbC1wZW5kaW5nIFRYVCByZXNvbHV0aW9uLCB3ZSBjYW4ganVzdCB1c2VcbiAgICAgICAgICAgICAqIHRoYXQgcmVzdWx0IHdoZW4gaXQgY29tZXMgaW4gKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VydmljZUNvbmZpZ0VuYWJsZWQgJiYgdGhpcy5wZW5kaW5nVHh0UHJvbWlzZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8qIFdlIGhhbmRsZSB0aGUgVFhUIHF1ZXJ5IHByb21pc2UgZGlmZmVyZW50bHkgdGhhbiB0aGUgb3RoZXJzIGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgKiB0aGUgbmFtZSByZXNvbHV0aW9uIGF0dGVtcHQgYXMgYSB3aG9sZSBpcyBhIHN1Y2Nlc3MgZXZlbiBpZiB0aGUgVFhUXG4gICAgICAgICAgICAgICAgICogbG9va3VwIGZhaWxzICovXG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVHh0UHJvbWlzZSA9IHRoaXMucmVzb2x2ZVR4dChob3N0bmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVHh0UHJvbWlzZS50aGVuKHR4dFJlY29yZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdUeHRQcm9taXNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVHh0UHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJ2aWNlQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUNvbmZpZyA9ICgwLCBzZXJ2aWNlX2NvbmZpZ18xLmV4dHJhY3RBbmRTZWxlY3RTZXJ2aWNlQ29uZmlnKSh0eHRSZWNvcmQsIHRoaXMucGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZUNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0U2VydmljZUNvbmZpZ1Jlc3VsdCA9ICgwLCBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbVZhbHVlKShzZXJ2aWNlQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0U2VydmljZUNvbmZpZ1Jlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RTZXJ2aWNlQ29uZmlnUmVzdWx0ID0gKDAsIGNhbGxfaW50ZXJmYWNlXzEuc3RhdHVzT3JGcm9tRXJyb3IpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYFBhcnNpbmcgc2VydmljZSBjb25maWcgZmFpbGVkIHdpdGggZXJyb3IgJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXRlc3RMb29rdXBSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIHJlbHkgaGVyZSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBpZGVudGljYWwgcGFyYW1ldGVycyB3aWxsIGJlIGVzc2VudGlhbHkgaWRlbXBvdGVudCwgYW5kIGNhbGxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0IHdpdGggdGhlIHNhbWUgYWRkcmVzcyBsaXN0IGFuZCBhIGRpZmZlcmVudCBzZXJ2aWNlIGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICogc2hvdWxkIHJlc3VsdCBpbiBhIGZhc3QgYW5kIHNlYW1sZXNzIHN3aXRjaG92ZXIuICovXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyKHRoaXMubGF0ZXN0TG9va3VwUmVzdWx0LCB7fSwgdGhpcy5sYXRlc3RTZXJ2aWNlQ29uZmlnUmVzdWx0LCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvKiBJZiBUWFQgbG9va3VwIGZhaWxzIHdlIHNob3VsZCBkbyBub3RoaW5nLCB3aGljaCBtZWFucyB0aGF0IHdlXG4gICAgICAgICAgICAgICAgICAgICAqIGNvbnRpbnVlIHRvIHVzZSB0aGUgcmVzdWx0IG9mIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGxvb2t1cCxcbiAgICAgICAgICAgICAgICAgICAgICogb3IgdGhlIGRlZmF1bHQgbnVsbCBjb25maWcgb2JqZWN0IGlmIHRoZXJlIGhhcyBuZXZlciBiZWVuIGFcbiAgICAgICAgICAgICAgICAgICAgICogc3VjY2Vzc2Z1bCBsb29rdXAuIFdlIGRvIG5vdCBzZXQgdGhlIGxhdGVzdFNlcnZpY2VDb25maWdFcnJvclxuICAgICAgICAgICAgICAgICAgICAgKiBoZXJlIGJlY2F1c2UgdGhhdCBpcyBzcGVjaWZpY2FsbHkgdXNlZCBmb3IgcmVzcG9uc2UgdmFsaWRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgKiBlcnJvcnMuIFdlIHN0aWxsIG5lZWQgdG8gaGFuZGxlIHRoaXMgZXJyb3Igc28gdGhhdCBpdCBkb2VzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKiBidWJibGUgdXAgYXMgYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uLiAqL1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBSZXNvbHZlckxpc3RlbmVyIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgTEIgcG9saWN5XG4gICAgICogYWNjZXB0ZWQgdGhlIHJlc29sdXRpb24gcmVzdWx0LiBBIGZhbHNlIHJlc3VsdCBvbiBhbiBvdGhlcndpc2Ugc3VjY2Vzc2Z1bFxuICAgICAqIHJlc29sdXRpb24gc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSByZXNvbHV0aW9uIGZhaWx1cmUuXG4gICAgICogQHBhcmFtIGhlYWx0aFN0YXR1c1xuICAgICAqL1xuICAgIGhhbmRsZUhlYWx0aFN0YXR1cyhoZWFsdGhTdGF0dXMpIHtcbiAgICAgICAgaWYgKGhlYWx0aFN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5iYWNrb2ZmLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuYmFja29mZi5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250aW51ZVJlc29sdmluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbG9va3VwKGhvc3RuYW1lKSB7XG4gICAgICAgIGlmIChlbnZpcm9ubWVudF8xLkdSUENfTk9ERV9VU0VfQUxURVJOQVRJVkVfUkVTT0xWRVIpIHtcbiAgICAgICAgICAgIHRyYWNlKCdVc2luZyBhbHRlcm5hdGl2ZSBETlMgcmVzb2x2ZXIuJyk7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgICB0aGlzLmFsdGVybmF0aXZlUmVzb2x2ZXIucmVzb2x2ZTQoaG9zdG5hbWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRpdmVSZXNvbHZlci5yZXNvbHZlNihob3N0bmFtZSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGlmIChyZWNvcmRzLmV2ZXJ5KHJlc3VsdCA9PiByZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZWNvcmRzWzBdLnJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVjb3Jkc1xuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnXG4gICAgICAgICAgICAgICAgICAgID8gWy4uLmFjYywgLi4ucmVzdWx0LnZhbHVlXVxuICAgICAgICAgICAgICAgICAgICA6IGFjYztcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoYWRkciA9PiAoe1xuICAgICAgICAgICAgICAgIGhvc3Q6IGFkZHIsXG4gICAgICAgICAgICAgICAgcG9ydDogK3RoaXMucG9ydCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBXZSBsb29rdXAgYm90aCBhZGRyZXNzIGZhbWlsaWVzIGhlcmUgYW5kIHRoZW4gc3BsaXQgdGhlbSB1cCBsYXRlclxuICAgICAgICAgKiBiZWNhdXNlIHdoZW4gbG9va2luZyB1cCBhIHNpbmdsZSBmYW1pbHksIGRucy5sb29rdXAgb3V0cHV0cyBhbiBlcnJvclxuICAgICAgICAgKiBpZiB0aGUgbmFtZSBleGlzdHMgYnV0IHRoZXJlIGFyZSBubyByZWNvcmRzIGZvciB0aGF0IGZhbWlseSwgYW5kIHRoYXRcbiAgICAgICAgICogZXJyb3IgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvdGhlciBraW5kcyBvZiBlcnJvcnMgKi9cbiAgICAgICAgY29uc3QgYWRkcmVzc0xpc3QgPSBhd2FpdCBkbnNfMS5wcm9taXNlcy5sb29rdXAoaG9zdG5hbWUsIHsgYWxsOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gYWRkcmVzc0xpc3QubWFwKGFkZHIgPT4gKHsgaG9zdDogYWRkci5hZGRyZXNzLCBwb3J0OiArdGhpcy5wb3J0IH0pKTtcbiAgICB9XG4gICAgYXN5bmMgcmVzb2x2ZVR4dChob3N0bmFtZSkge1xuICAgICAgICBpZiAoZW52aXJvbm1lbnRfMS5HUlBDX05PREVfVVNFX0FMVEVSTkFUSVZFX1JFU09MVkVSKSB7XG4gICAgICAgICAgICB0cmFjZSgnVXNpbmcgYWx0ZXJuYXRpdmUgRE5TIHJlc29sdmVyLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWx0ZXJuYXRpdmVSZXNvbHZlci5yZXNvbHZlVHh0KGhvc3RuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG5zXzEucHJvbWlzZXMucmVzb2x2ZVR4dChob3N0bmFtZSk7XG4gICAgfVxuICAgIHN0YXJ0TmV4dFJlc29sdXRpb25UaW1lcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubmV4dFJlc29sdXRpb25UaW1lcik7XG4gICAgICAgIHRoaXMubmV4dFJlc29sdXRpb25UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9wTmV4dFJlc29sdXRpb25UaW1lcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGludWVSZXNvbHZpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UmVzb2x1dGlvbldpdGhCYWNrb2ZmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMubWluVGltZUJldHdlZW5SZXNvbHV0aW9uc01zKTtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5uZXh0UmVzb2x1dGlvblRpbWVyKS51bnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICB0aGlzLmlzTmV4dFJlc29sdXRpb25UaW1lclJ1bm5pbmcgPSB0cnVlO1xuICAgIH1cbiAgICBzdG9wTmV4dFJlc29sdXRpb25UaW1lcigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubmV4dFJlc29sdXRpb25UaW1lcik7XG4gICAgICAgIHRoaXMuaXNOZXh0UmVzb2x1dGlvblRpbWVyUnVubmluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGFydFJlc29sdXRpb25XaXRoQmFja29mZigpIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0xvb2t1cFByb21pc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGludWVSZXNvbHZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYmFja29mZi5ydW5PbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0TmV4dFJlc29sdXRpb25UaW1lcigpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFJlc29sdXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVSZXNvbHV0aW9uKCkge1xuICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgbG9va3VwLCBqdXN0IGxldCBpdCBmaW5pc2guIE90aGVyd2lzZSwgaWYgdGhlXG4gICAgICAgICAqIG5leHRSZXNvbHV0aW9uVGltZXIgb3IgYmFja29mZiB0aW1lciBpcyBydW5uaW5nLCBzZXQgdGhlXG4gICAgICAgICAqIGNvbnRpbnVlUmVzb2x2aW5nIGZsYWcgdG8gcmVzb2x2ZSB3aGVuIHdoaWNoZXZlciBvZiB0aG9zZSB0aW1lcnNcbiAgICAgICAgICogZmlyZXMuIE90aGVyd2lzZSwgc3RhcnQgcmVzb2x2aW5nIGltbWVkaWF0ZWx5LiAqL1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nTG9va3VwUHJvbWlzZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOZXh0UmVzb2x1dGlvblRpbWVyUnVubmluZyB8fCB0aGlzLmJhY2tvZmYuaXNSdW5uaW5nKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc05leHRSZXNvbHV0aW9uVGltZXJSdW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNlKCdyZXNvbHV0aW9uIHVwZGF0ZSBkZWxheWVkIGJ5IFwibWluIHRpbWUgYmV0d2VlbiByZXNvbHV0aW9uc1wiIHJhdGUgbGltaXQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNlKCdyZXNvbHV0aW9uIHVwZGF0ZSBkZWxheWVkIGJ5IGJhY2tvZmYgdGltZXIgdW50aWwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhY2tvZmYuZ2V0RW5kVGltZSgpLnRvSVNPU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRpbnVlUmVzb2x2aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSZXNvbHV0aW9uV2l0aEJhY2tvZmYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgcmVzb2x2ZXIgdG8gdGhlIHNhbWUgc3RhdGUgaXQgaGFkIHdoZW4gaXQgd2FzIGNyZWF0ZWQuIEluLWZsaWdodFxuICAgICAqIEROUyByZXF1ZXN0cyBjYW5ub3QgYmUgY2FuY2VsbGVkLCBidXQgdGhleSBhcmUgZGlzY2FyZGVkIGFuZCB0aGVpciByZXN1bHRzXG4gICAgICogd2lsbCBiZSBpZ25vcmVkLlxuICAgICAqL1xuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29udGludWVSZXNvbHZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYWNrb2ZmLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuYmFja29mZi5zdG9wKCk7XG4gICAgICAgIHRoaXMuc3RvcE5leHRSZXNvbHV0aW9uVGltZXIoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nTG9va3VwUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIHRoaXMucGVuZGluZ1R4dFByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzLmxhdGVzdExvb2t1cFJlc3VsdCA9IG51bGw7XG4gICAgICAgIHRoaXMubGF0ZXN0U2VydmljZUNvbmZpZ1Jlc3VsdCA9IG51bGw7XG4gICAgICAgIHRoaXMucmV0dXJuZWRJcFJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlZmF1bHQgYXV0aG9yaXR5IGZvciB0aGUgZ2l2ZW4gdGFyZ2V0LiBGb3IgSVAgdGFyZ2V0cywgdGhhdCBpc1xuICAgICAqIHRoZSBJUCBhZGRyZXNzLiBGb3IgRE5TIHRhcmdldHMsIGl0IGlzIHRoZSBob3N0bmFtZS5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0XG4gICAgICovXG4gICAgc3RhdGljIGdldERlZmF1bHRBdXRob3JpdHkodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQucGF0aDtcbiAgICB9XG59XG4vKipcbiAqIFNldCB1cCB0aGUgRE5TIHJlc29sdmVyIGNsYXNzIGJ5IHJlZ2lzdGVyaW5nIGl0IGFzIHRoZSBoYW5kbGVyIGZvciB0aGVcbiAqIFwiZG5zOlwiIHByZWZpeCBhbmQgYXMgdGhlIGRlZmF1bHQgcmVzb2x2ZXIuXG4gKi9cbmZ1bmN0aW9uIHNldHVwKCkge1xuICAgICgwLCByZXNvbHZlcl8xLnJlZ2lzdGVyUmVzb2x2ZXIpKCdkbnMnLCBEbnNSZXNvbHZlcik7XG4gICAgKDAsIHJlc29sdmVyXzEucmVnaXN0ZXJEZWZhdWx0U2NoZW1lKSgnZG5zJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXNvbHZlci1kbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUNJRFIgPSBwYXJzZUNJRFI7XG5leHBvcnRzLm1hcFByb3h5TmFtZSA9IG1hcFByb3h5TmFtZTtcbmV4cG9ydHMuZ2V0UHJveGllZENvbm5lY3Rpb24gPSBnZXRQcm94aWVkQ29ubmVjdGlvbjtcbmNvbnN0IGxvZ2dpbmdfMSA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IG5ldF8xID0gcmVxdWlyZShcIm5ldFwiKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbmNvbnN0IGxvZ2dpbmcgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9hZGRyZXNzXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWFkZHJlc3NcIik7XG5jb25zdCB1cmlfcGFyc2VyXzEgPSByZXF1aXJlKFwiLi91cmktcGFyc2VyXCIpO1xuY29uc3QgdXJsXzEgPSByZXF1aXJlKFwidXJsXCIpO1xuY29uc3QgcmVzb2x2ZXJfZG5zXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlci1kbnNcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdwcm94eSc7XG5mdW5jdGlvbiB0cmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldFByb3h5SW5mbygpIHtcbiAgICBsZXQgcHJveHlFbnYgPSAnJztcbiAgICBsZXQgZW52VmFyID0gJyc7XG4gICAgLyogUHJlZmVyIHVzaW5nICdncnBjX3Byb3h5Jy4gRmFsbGJhY2sgb24gJ2h0dHBfcHJveHknIGlmIGl0IGlzIG5vdCBzZXQuXG4gICAgICogQWxzbyBwcmVmZXIgdXNpbmcgJ2h0dHBzX3Byb3h5JyB3aXRoIGZhbGxiYWNrIG9uICdodHRwX3Byb3h5Jy4gVGhlXG4gICAgICogZmFsbGJhY2sgYmVoYXZpb3IgY2FuIGJlIHJlbW92ZWQgaWYgdGhlcmUncyBhIGRlbWFuZCBmb3IgaXQuXG4gICAgICovXG4gICAgaWYgKHByb2Nlc3MuZW52LmdycGNfcHJveHkpIHtcbiAgICAgICAgZW52VmFyID0gJ2dycGNfcHJveHknO1xuICAgICAgICBwcm94eUVudiA9IHByb2Nlc3MuZW52LmdycGNfcHJveHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5KSB7XG4gICAgICAgIGVudlZhciA9ICdodHRwc19wcm94eSc7XG4gICAgICAgIHByb3h5RW52ID0gcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lmh0dHBfcHJveHkpIHtcbiAgICAgICAgZW52VmFyID0gJ2h0dHBfcHJveHknO1xuICAgICAgICBwcm94eUVudiA9IHByb2Nlc3MuZW52Lmh0dHBfcHJveHk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGxldCBwcm94eVVybDtcbiAgICB0cnkge1xuICAgICAgICBwcm94eVVybCA9IG5ldyB1cmxfMS5VUkwocHJveHlFbnYpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgbG9nZ2luZ18xLmxvZykoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SLCBgY2Fubm90IHBhcnNlIHZhbHVlIG9mIFwiJHtlbnZWYXJ9XCIgZW52IHZhcmApO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChwcm94eVVybC5wcm90b2NvbCAhPT0gJ2h0dHA6Jykge1xuICAgICAgICAoMCwgbG9nZ2luZ18xLmxvZykoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SLCBgXCIke3Byb3h5VXJsLnByb3RvY29sfVwiIHNjaGVtZSBub3Qgc3VwcG9ydGVkIGluIHByb3h5IFVSSWApO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGxldCB1c2VyQ3JlZCA9IG51bGw7XG4gICAgaWYgKHByb3h5VXJsLnVzZXJuYW1lKSB7XG4gICAgICAgIGlmIChwcm94eVVybC5wYXNzd29yZCkge1xuICAgICAgICAgICAgKDAsIGxvZ2dpbmdfMS5sb2cpKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5JTkZPLCAndXNlcmluZm8gZm91bmQgaW4gcHJveHkgVVJJJyk7XG4gICAgICAgICAgICB1c2VyQ3JlZCA9IGRlY29kZVVSSUNvbXBvbmVudChgJHtwcm94eVVybC51c2VybmFtZX06JHtwcm94eVVybC5wYXNzd29yZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVzZXJDcmVkID0gcHJveHlVcmwudXNlcm5hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaG9zdG5hbWUgPSBwcm94eVVybC5ob3N0bmFtZTtcbiAgICBsZXQgcG9ydCA9IHByb3h5VXJsLnBvcnQ7XG4gICAgLyogVGhlIHByb3h5IFVSTCB1c2VzIHRoZSBzY2hlbWUgXCJodHRwOlwiLCB3aGljaCBoYXMgYSBkZWZhdWx0IHBvcnQgbnVtYmVyIG9mXG4gICAgICogODAuIFdlIG5lZWQgdG8gc2V0IHRoYXQgZXhwbGljaXRseSBoZXJlIGlmIGl0IGlzIG9taXR0ZWQgYmVjYXVzZSBvdGhlcndpc2VcbiAgICAgKiBpdCB3aWxsIHVzZSBnUlBDJ3MgZGVmYXVsdCBwb3J0IDQ0My4gKi9cbiAgICBpZiAocG9ydCA9PT0gJycpIHtcbiAgICAgICAgcG9ydCA9ICc4MCc7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgYWRkcmVzczogYCR7aG9zdG5hbWV9OiR7cG9ydH1gLFxuICAgIH07XG4gICAgaWYgKHVzZXJDcmVkKSB7XG4gICAgICAgIHJlc3VsdC5jcmVkcyA9IHVzZXJDcmVkO1xuICAgIH1cbiAgICB0cmFjZSgnUHJveHkgc2VydmVyICcgKyByZXN1bHQuYWRkcmVzcyArICcgc2V0IGJ5IGVudmlyb25tZW50IHZhcmlhYmxlICcgKyBlbnZWYXIpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROb1Byb3h5SG9zdExpc3QoKSB7XG4gICAgLyogUHJlZmVyIHVzaW5nICdub19ncnBjX3Byb3h5Jy4gRmFsbGJhY2sgb24gJ25vX3Byb3h5JyBpZiBpdCBpcyBub3Qgc2V0LiAqL1xuICAgIGxldCBub1Byb3h5U3RyID0gcHJvY2Vzcy5lbnYubm9fZ3JwY19wcm94eTtcbiAgICBsZXQgZW52VmFyID0gJ25vX2dycGNfcHJveHknO1xuICAgIGlmICghbm9Qcm94eVN0cikge1xuICAgICAgICBub1Byb3h5U3RyID0gcHJvY2Vzcy5lbnYubm9fcHJveHk7XG4gICAgICAgIGVudlZhciA9ICdub19wcm94eSc7XG4gICAgfVxuICAgIGlmIChub1Byb3h5U3RyKSB7XG4gICAgICAgIHRyYWNlKCdObyBwcm94eSBzZXJ2ZXIgbGlzdCBzZXQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgJyArIGVudlZhcik7XG4gICAgICAgIHJldHVybiBub1Byb3h5U3RyLnNwbGl0KCcsJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuLypcbiAqIFRoZSBncm91cHMgY29ycmVzcG9uZCB0byBDSURSIHBhcnRzIGFzIGZvbGxvd3M6XG4gKiAxLiBpcFxuICogMi4gcHJlZml4TGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ0lEUihjaWRyU3RyaW5nKSB7XG4gICAgY29uc3Qgc3BsaXRSYW5nZSA9IGNpZHJTdHJpbmcuc3BsaXQoJy8nKTtcbiAgICBpZiAoc3BsaXRSYW5nZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeExlbmd0aCA9IHBhcnNlSW50KHNwbGl0UmFuZ2VbMV0sIDEwKTtcbiAgICBpZiAoISgwLCBuZXRfMS5pc0lQdjQpKHNwbGl0UmFuZ2VbMF0pIHx8IE51bWJlci5pc05hTihwcmVmaXhMZW5ndGgpIHx8IHByZWZpeExlbmd0aCA8IDAgfHwgcHJlZml4TGVuZ3RoID4gMzIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGlwOiBpcFRvSW50KHNwbGl0UmFuZ2VbMF0pLFxuICAgICAgICBwcmVmaXhMZW5ndGg6IHByZWZpeExlbmd0aFxuICAgIH07XG59XG5mdW5jdGlvbiBpcFRvSW50KGlwKSB7XG4gICAgcmV0dXJuIGlwLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKGFjYywgb2N0ZXQpID0+IChhY2MgPDwgOCkgKyBwYXJzZUludChvY3RldCwgMTApLCAwKTtcbn1cbmZ1bmN0aW9uIGlzSXBJbkNJRFIoY2lkciwgc2VydmVySG9zdCkge1xuICAgIGNvbnN0IGlwID0gY2lkci5pcDtcbiAgICBjb25zdCBtYXNrID0gLTEgPDwgKDMyIC0gY2lkci5wcmVmaXhMZW5ndGgpO1xuICAgIGNvbnN0IGhvc3RJUCA9IGlwVG9JbnQoc2VydmVySG9zdCk7XG4gICAgcmV0dXJuIChob3N0SVAgJiBtYXNrKSA9PT0gKGlwICYgbWFzayk7XG59XG5mdW5jdGlvbiBob3N0TWF0Y2hlc05vUHJveHlMaXN0KHNlcnZlckhvc3QpIHtcbiAgICBmb3IgKGNvbnN0IGhvc3Qgb2YgZ2V0Tm9Qcm94eUhvc3RMaXN0KCkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkQ0lEUiA9IHBhcnNlQ0lEUihob3N0KTtcbiAgICAgICAgLy8gaG9zdCBpcyBhIENJRFIgYW5kIHNlcnZlckhvc3QgaXMgYW4gSVAgYWRkcmVzc1xuICAgICAgICBpZiAoKDAsIG5ldF8xLmlzSVB2NCkoc2VydmVySG9zdCkgJiYgcGFyc2VkQ0lEUiAmJiBpc0lwSW5DSURSKHBhcnNlZENJRFIsIHNlcnZlckhvc3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZXJ2ZXJIb3N0LmVuZHNXaXRoKGhvc3QpKSB7XG4gICAgICAgICAgICAvLyBob3N0IGlzIGEgc2luZ2xlIElQIG9yIGEgZG9tYWluIG5hbWUgc3VmZml4XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBtYXBQcm94eU5hbWUodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG5vUHJveHlSZXN1bHQgPSB7XG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICBleHRyYU9wdGlvbnM6IHt9LFxuICAgIH07XG4gICAgaWYgKCgoX2EgPSBvcHRpb25zWydncnBjLmVuYWJsZV9odHRwX3Byb3h5J10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEpID09PSAwKSB7XG4gICAgICAgIHJldHVybiBub1Byb3h5UmVzdWx0O1xuICAgIH1cbiAgICBpZiAodGFyZ2V0LnNjaGVtZSA9PT0gJ3VuaXgnKSB7XG4gICAgICAgIHJldHVybiBub1Byb3h5UmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBwcm94eUluZm8gPSBnZXRQcm94eUluZm8oKTtcbiAgICBpZiAoIXByb3h5SW5mby5hZGRyZXNzKSB7XG4gICAgICAgIHJldHVybiBub1Byb3h5UmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBob3N0UG9ydCA9ICgwLCB1cmlfcGFyc2VyXzEuc3BsaXRIb3N0UG9ydCkodGFyZ2V0LnBhdGgpO1xuICAgIGlmICghaG9zdFBvcnQpIHtcbiAgICAgICAgcmV0dXJuIG5vUHJveHlSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHNlcnZlckhvc3QgPSBob3N0UG9ydC5ob3N0O1xuICAgIGlmIChob3N0TWF0Y2hlc05vUHJveHlMaXN0KHNlcnZlckhvc3QpKSB7XG4gICAgICAgIHRyYWNlKCdOb3QgdXNpbmcgcHJveHkgZm9yIHRhcmdldCBpbiBub19wcm94eSBsaXN0OiAnICsgKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGFyZ2V0KSk7XG4gICAgICAgIHJldHVybiBub1Byb3h5UmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBleHRyYU9wdGlvbnMgPSB7XG4gICAgICAgICdncnBjLmh0dHBfY29ubmVjdF90YXJnZXQnOiAoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0YXJnZXQpLFxuICAgIH07XG4gICAgaWYgKHByb3h5SW5mby5jcmVkcykge1xuICAgICAgICBleHRyYU9wdGlvbnNbJ2dycGMuaHR0cF9jb25uZWN0X2NyZWRzJ10gPSBwcm94eUluZm8uY3JlZHM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgc2NoZW1lOiAnZG5zJyxcbiAgICAgICAgICAgIHBhdGg6IHByb3h5SW5mby5hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgICBleHRyYU9wdGlvbnM6IGV4dHJhT3B0aW9ucyxcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0UHJveGllZENvbm5lY3Rpb24oYWRkcmVzcywgY2hhbm5lbE9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCEoJ2dycGMuaHR0cF9jb25uZWN0X3RhcmdldCcgaW4gY2hhbm5lbE9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICAgIGNvbnN0IHJlYWxUYXJnZXQgPSBjaGFubmVsT3B0aW9uc1snZ3JwYy5odHRwX2Nvbm5lY3RfdGFyZ2V0J107XG4gICAgY29uc3QgcGFyc2VkVGFyZ2V0ID0gKDAsIHVyaV9wYXJzZXJfMS5wYXJzZVVyaSkocmVhbFRhcmdldCk7XG4gICAgaWYgKHBhcnNlZFRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCBzcGxpdEhvc3RQb3N0ID0gKDAsIHVyaV9wYXJzZXJfMS5zcGxpdEhvc3RQb3J0KShwYXJzZWRUYXJnZXQucGF0aCk7XG4gICAgaWYgKHNwbGl0SG9zdFBvc3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG4gICAgY29uc3QgaG9zdFBvcnQgPSBgJHtzcGxpdEhvc3RQb3N0Lmhvc3R9OiR7KF9hID0gc3BsaXRIb3N0UG9zdC5wb3J0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZXNvbHZlcl9kbnNfMS5ERUZBVUxUX1BPUlR9YDtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdDT05ORUNUJyxcbiAgICAgICAgcGF0aDogaG9zdFBvcnQsXG4gICAgfTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICBIb3N0OiBob3N0UG9ydCxcbiAgICB9O1xuICAgIC8vIENvbm5lY3QgdG8gdGhlIHN1YmNoYW5uZWwgYWRkcmVzcyBhcyBhIHByb3h5XG4gICAgaWYgKCgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5pc1RjcFN1YmNoYW5uZWxBZGRyZXNzKShhZGRyZXNzKSkge1xuICAgICAgICBvcHRpb25zLmhvc3QgPSBhZGRyZXNzLmhvc3Q7XG4gICAgICAgIG9wdGlvbnMucG9ydCA9IGFkZHJlc3MucG9ydDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IGFkZHJlc3MucGF0aDtcbiAgICB9XG4gICAgaWYgKCdncnBjLmh0dHBfY29ubmVjdF9jcmVkcycgaW4gY2hhbm5lbE9wdGlvbnMpIHtcbiAgICAgICAgaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID1cbiAgICAgICAgICAgICdCYXNpYyAnICtcbiAgICAgICAgICAgICAgICBCdWZmZXIuZnJvbShjaGFubmVsT3B0aW9uc1snZ3JwYy5odHRwX2Nvbm5lY3RfY3JlZHMnXSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIH1cbiAgICBvcHRpb25zLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIGNvbnN0IHByb3h5QWRkcmVzc1N0cmluZyA9ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKShhZGRyZXNzKTtcbiAgICB0cmFjZSgnVXNpbmcgcHJveHkgJyArIHByb3h5QWRkcmVzc1N0cmluZyArICcgdG8gY29ubmVjdCB0byAnICsgb3B0aW9ucy5wYXRoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMpO1xuICAgICAgICByZXF1ZXN0Lm9uY2UoJ2Nvbm5lY3QnLCAocmVzLCBzb2NrZXQsIGhlYWQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHRyYWNlKCdTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnIHRocm91Z2ggcHJveHkgJyArXG4gICAgICAgICAgICAgICAgICAgIHByb3h5QWRkcmVzc1N0cmluZyk7XG4gICAgICAgICAgICAgICAgLy8gVGhlIEhUVFAgY2xpZW50IG1heSBoYXZlIGFscmVhZHkgcmVhZCBhIGZldyBieXRlcyBvZiB0aGUgcHJveGllZFxuICAgICAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24uIElmIHRoYXQncyB0aGUgY2FzZSwgcHV0IHRoZW0gYmFjayBpbnRvIHRoZSBzb2NrZXQuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL2dycGMtbm9kZS9pc3N1ZXMvMjc0NC5cbiAgICAgICAgICAgICAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC51bnNoaWZ0KGhlYWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmFjZSgnU3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkIGEgcGxhaW50ZXh0IGNvbm5lY3Rpb24gdG8gJyArXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGF0aCArXG4gICAgICAgICAgICAgICAgICAgICcgdGhyb3VnaCBwcm94eSAnICtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNvY2tldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAoMCwgbG9nZ2luZ18xLmxvZykoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkVSUk9SLCAnRmFpbGVkIHRvIGNvbm5lY3QgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGF0aCArXG4gICAgICAgICAgICAgICAgICAgICcgdGhyb3VnaCBwcm94eSAnICtcbiAgICAgICAgICAgICAgICAgICAgcHJveHlBZGRyZXNzU3RyaW5nICtcbiAgICAgICAgICAgICAgICAgICAgJyB3aXRoIHN0YXR1cyAnICtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVxdWVzdC5vbmNlKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgKDAsIGxvZ2dpbmdfMS5sb2cpKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5FUlJPUiwgJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHByb3h5ICcgK1xuICAgICAgICAgICAgICAgIHByb3h5QWRkcmVzc1N0cmluZyArXG4gICAgICAgICAgICAgICAgJyB3aXRoIGVycm9yICcgK1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHBfcHJveHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdHJlYW1EZWNvZGVyID0gdm9pZCAwO1xudmFyIFJlYWRTdGF0ZTtcbihmdW5jdGlvbiAoUmVhZFN0YXRlKSB7XG4gICAgUmVhZFN0YXRlW1JlYWRTdGF0ZVtcIk5PX0RBVEFcIl0gPSAwXSA9IFwiTk9fREFUQVwiO1xuICAgIFJlYWRTdGF0ZVtSZWFkU3RhdGVbXCJSRUFESU5HX1NJWkVcIl0gPSAxXSA9IFwiUkVBRElOR19TSVpFXCI7XG4gICAgUmVhZFN0YXRlW1JlYWRTdGF0ZVtcIlJFQURJTkdfTUVTU0FHRVwiXSA9IDJdID0gXCJSRUFESU5HX01FU1NBR0VcIjtcbn0pKFJlYWRTdGF0ZSB8fCAoUmVhZFN0YXRlID0ge30pKTtcbmNsYXNzIFN0cmVhbURlY29kZXIge1xuICAgIGNvbnN0cnVjdG9yKG1heFJlYWRNZXNzYWdlTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWF4UmVhZE1lc3NhZ2VMZW5ndGggPSBtYXhSZWFkTWVzc2FnZUxlbmd0aDtcbiAgICAgICAgdGhpcy5yZWFkU3RhdGUgPSBSZWFkU3RhdGUuTk9fREFUQTtcbiAgICAgICAgdGhpcy5yZWFkQ29tcHJlc3NGbGFnID0gQnVmZmVyLmFsbG9jKDEpO1xuICAgICAgICB0aGlzLnJlYWRQYXJ0aWFsU2l6ZSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgICAgdGhpcy5yZWFkU2l6ZVJlbWFpbmluZyA9IDQ7XG4gICAgICAgIHRoaXMucmVhZE1lc3NhZ2VTaXplID0gMDtcbiAgICAgICAgdGhpcy5yZWFkUGFydGlhbE1lc3NhZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5yZWFkTWVzc2FnZVJlbWFpbmluZyA9IDA7XG4gICAgfVxuICAgIHdyaXRlKGRhdGEpIHtcbiAgICAgICAgbGV0IHJlYWRIZWFkID0gMDtcbiAgICAgICAgbGV0IHRvUmVhZDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIHdoaWxlIChyZWFkSGVhZCA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucmVhZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWFkU3RhdGUuTk9fREFUQTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkQ29tcHJlc3NGbGFnID0gZGF0YS5zbGljZShyZWFkSGVhZCwgcmVhZEhlYWQgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmVhZEhlYWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkU3RhdGUgPSBSZWFkU3RhdGUuUkVBRElOR19TSVpFO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRQYXJ0aWFsU2l6ZS5maWxsKDApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRTaXplUmVtYWluaW5nID0gNDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkTWVzc2FnZVNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRNZXNzYWdlUmVtYWluaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkUGFydGlhbE1lc3NhZ2UgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWFkU3RhdGUuUkVBRElOR19TSVpFOlxuICAgICAgICAgICAgICAgICAgICB0b1JlYWQgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIHJlYWRIZWFkLCB0aGlzLnJlYWRTaXplUmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5jb3B5KHRoaXMucmVhZFBhcnRpYWxTaXplLCA0IC0gdGhpcy5yZWFkU2l6ZVJlbWFpbmluZywgcmVhZEhlYWQsIHJlYWRIZWFkICsgdG9SZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkU2l6ZVJlbWFpbmluZyAtPSB0b1JlYWQ7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRIZWFkICs9IHRvUmVhZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZFNpemVSZW1haW5pbmcgPj0wIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZFNpemVSZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZE1lc3NhZ2VTaXplID0gdGhpcy5yZWFkUGFydGlhbFNpemUucmVhZFVJbnQzMkJFKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4UmVhZE1lc3NhZ2VMZW5ndGggIT09IC0xICYmIHRoaXMucmVhZE1lc3NhZ2VTaXplID4gdGhpcy5tYXhSZWFkTWVzc2FnZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjZWl2ZWQgbWVzc2FnZSBsYXJnZXIgdGhhbiBtYXggKCR7dGhpcy5yZWFkTWVzc2FnZVNpemV9IHZzICR7dGhpcy5tYXhSZWFkTWVzc2FnZUxlbmd0aH0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRNZXNzYWdlUmVtYWluaW5nID0gdGhpcy5yZWFkTWVzc2FnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkTWVzc2FnZVJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRTdGF0ZSA9IFJlYWRTdGF0ZS5SRUFESU5HX01FU1NBR0U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5yZWFkQ29tcHJlc3NGbGFnLCB0aGlzLnJlYWRQYXJ0aWFsU2l6ZV0sIDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZFN0YXRlID0gUmVhZFN0YXRlLk5PX0RBVEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWFkU3RhdGUuUkVBRElOR19NRVNTQUdFOlxuICAgICAgICAgICAgICAgICAgICB0b1JlYWQgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIHJlYWRIZWFkLCB0aGlzLnJlYWRNZXNzYWdlUmVtYWluaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkUGFydGlhbE1lc3NhZ2UucHVzaChkYXRhLnNsaWNlKHJlYWRIZWFkLCByZWFkSGVhZCArIHRvUmVhZCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRNZXNzYWdlUmVtYWluaW5nIC09IHRvUmVhZDtcbiAgICAgICAgICAgICAgICAgICAgcmVhZEhlYWQgKz0gdG9SZWFkO1xuICAgICAgICAgICAgICAgICAgICAvLyByZWFkTWVzc2FnZVJlbWFpbmluZyA+PTAgaGVyZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkTWVzc2FnZVJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSByZWFkIGEgZnVsbCBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmFtZWRNZXNzYWdlQnVmZmVycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRDb21wcmVzc0ZsYWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkUGFydGlhbFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmNvbmNhdCh0aGlzLnJlYWRQYXJ0aWFsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmcmFtZWRNZXNzYWdlID0gQnVmZmVyLmNvbmNhdChmcmFtZWRNZXNzYWdlQnVmZmVycywgdGhpcy5yZWFkTWVzc2FnZVNpemUgKyA1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZFN0YXRlID0gUmVhZFN0YXRlLk5PX0RBVEE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmcmFtZWRNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgcmVhZCBzdGF0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5TdHJlYW1EZWNvZGVyID0gU3RyZWFtRGVjb2Rlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmVhbS1kZWNvZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSHR0cDJTdWJjaGFubmVsQ2FsbCA9IHZvaWQgMDtcbmNvbnN0IGh0dHAyID0gcmVxdWlyZShcImh0dHAyXCIpO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IHN0cmVhbV9kZWNvZGVyXzEgPSByZXF1aXJlKFwiLi9zdHJlYW0tZGVjb2RlclwiKTtcbmNvbnN0IGxvZ2dpbmcgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3QgY29uc3RhbnRzXzIgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdzdWJjaGFubmVsX2NhbGwnO1xuLyoqXG4gKiBTaG91bGQgZG8gYXBwcm94aW1hdGVseSB0aGUgc2FtZSB0aGluZyBhcyB1dGlsLmdldFN5c3RlbUVycm9yTmFtZSBidXQgdGhlXG4gKiBUeXBlU2NyaXB0IHR5cGVzIGRvbid0IGhhdmUgdGhhdCBmdW5jdGlvbiBmb3Igc29tZSByZWFzb24gc28gSSBqdXN0IG1hZGUgbXlcbiAqIG93bi5cbiAqIEBwYXJhbSBlcnJub1xuICovXG5mdW5jdGlvbiBnZXRTeXN0ZW1FcnJvck5hbWUoZXJybm8pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBudW1dIG9mIE9iamVjdC5lbnRyaWVzKG9zLmNvbnN0YW50cy5lcnJubykpIHtcbiAgICAgICAgaWYgKG51bSA9PT0gZXJybm8pIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnVW5rbm93biBzeXN0ZW0gZXJyb3IgJyArIGVycm5vO1xufVxuZnVuY3Rpb24gbWFwSHR0cFN0YXR1c0NvZGUoY29kZSkge1xuICAgIGNvbnN0IGRldGFpbHMgPSBgUmVjZWl2ZWQgSFRUUCBzdGF0dXMgY29kZSAke2NvZGV9YDtcbiAgICBsZXQgbWFwcGVkU3RhdHVzQ29kZTtcbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgLy8gVE9ETyhtdXJnYXRyb2lkOTkpOiBoYW5kbGUgMTAwIGFuZCAxMDFcbiAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICBtYXBwZWRTdGF0dXNDb2RlID0gY29uc3RhbnRzXzEuU3RhdHVzLklOVEVSTkFMO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgbWFwcGVkU3RhdHVzQ29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5VTkFVVEhFTlRJQ0FURUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBtYXBwZWRTdGF0dXNDb2RlID0gY29uc3RhbnRzXzEuU3RhdHVzLlBFUk1JU1NJT05fREVOSUVEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgbWFwcGVkU3RhdHVzQ29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI5OlxuICAgICAgICBjYXNlIDUwMjpcbiAgICAgICAgY2FzZSA1MDM6XG4gICAgICAgIGNhc2UgNTA0OlxuICAgICAgICAgICAgbWFwcGVkU3RhdHVzQ29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5VTkFWQUlMQUJMRTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbWFwcGVkU3RhdHVzQ29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5VTktOT1dOO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBtYXBwZWRTdGF0dXNDb2RlLFxuICAgICAgICBkZXRhaWxzOiBkZXRhaWxzLFxuICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKVxuICAgIH07XG59XG5jbGFzcyBIdHRwMlN1YmNoYW5uZWxDYWxsIHtcbiAgICBjb25zdHJ1Y3RvcihodHRwMlN0cmVhbSwgY2FsbEV2ZW50VHJhY2tlciwgbGlzdGVuZXIsIHRyYW5zcG9ydCwgY2FsbElkKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5odHRwMlN0cmVhbSA9IGh0dHAyU3RyZWFtO1xuICAgICAgICB0aGlzLmNhbGxFdmVudFRyYWNrZXIgPSBjYWxsRXZlbnRUcmFja2VyO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgICAgICB0aGlzLmNhbGxJZCA9IGNhbGxJZDtcbiAgICAgICAgdGhpcy5pc1JlYWRGaWx0ZXJQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQdXNoUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhblB1c2ggPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB0aGF0IGFuICdlbmQnIGV2ZW50IGhhcyBjb21lIGZyb20gdGhlIGh0dHAyIHN0cmVhbSwgc28gdGhlcmVcbiAgICAgICAgICogd2lsbCBiZSBubyBtb3JlIGRhdGEgZXZlbnRzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkc0Nsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXR1c091dHB1dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVucHVzaGVkUmVhZE1lc3NhZ2VzID0gW107XG4gICAgICAgIC8vIFRoaXMgaXMgcG9wdWxhdGVkIChub24tbnVsbCkgaWYgYW5kIG9ubHkgaWYgdGhlIGNhbGwgaGFzIGVuZGVkXG4gICAgICAgIHRoaXMuZmluYWxTdGF0dXMgPSBudWxsO1xuICAgICAgICB0aGlzLmludGVybmFsRXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLnNlcnZlckVuZGVkQ2FsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Ecm9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1heFJlY2VpdmVNZXNzYWdlTGVuZ3RoID0gKF9hID0gdHJhbnNwb3J0LmdldE9wdGlvbnMoKVsnZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb25zdGFudHNfMS5ERUZBVUxUX01BWF9SRUNFSVZFX01FU1NBR0VfTEVOR1RIO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSBuZXcgc3RyZWFtX2RlY29kZXJfMS5TdHJlYW1EZWNvZGVyKG1heFJlY2VpdmVNZXNzYWdlTGVuZ3RoKTtcbiAgICAgICAgaHR0cDJTdHJlYW0ub24oJ3Jlc3BvbnNlJywgKGhlYWRlcnMsIGZsYWdzKSA9PiB7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc1N0cmluZyA9ICcnO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzU3RyaW5nICs9ICdcXHRcXHQnICsgaGVhZGVyICsgJzogJyArIGhlYWRlcnNbaGVhZGVyXSArICdcXG4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmFjZSgnUmVjZWl2ZWQgc2VydmVyIGhlYWRlcnM6XFxuJyArIGhlYWRlcnNTdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5odHRwU3RhdHVzQ29kZSA9IGhlYWRlcnNbJzpzdGF0dXMnXTtcbiAgICAgICAgICAgIGlmIChmbGFncyAmIGh0dHAyLmNvbnN0YW50cy5OR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVHJhaWxlcnMoaGVhZGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgbWV0YWRhdGE7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgPSBtZXRhZGF0YV8xLk1ldGFkYXRhLmZyb21IdHRwMkhlYWRlcnMoaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZENhbGwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlVOS05PV04sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaHR0cDJTdHJlYW0ub24oJ3RyYWlsZXJzJywgKGhlYWRlcnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVHJhaWxlcnMoaGVhZGVycyk7XG4gICAgICAgIH0pO1xuICAgICAgICBodHRwMlN0cmVhbS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAvKiBJZiB0aGUgc3RhdHVzIGhhcyBhbHJlYWR5IGJlZW4gb3V0cHV0LCBhbGxvdyB0aGUgaHR0cDIgc3RyZWFtIHRvXG4gICAgICAgICAgICAgKiBkcmFpbiB3aXRob3V0IHByb2Nlc3NpbmcgdGhlIGRhdGEuICovXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXNPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyYWNlKCdyZWNlaXZlIEhUVFAvMiBkYXRhIGZyYW1lIG9mIGxlbmd0aCAnICsgZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2VzO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlcyA9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLyogU29tZSBzZXJ2ZXJzIHNlbmQgSFRNTCBlcnJvciBwYWdlcyBhbG9uZyB3aXRoIEhUVFAgc3RhdHVzIGNvZGVzLlxuICAgICAgICAgICAgICAgICAqIFdoZW4gdGhlIGNsaWVudCBhdHRlbXB0cyB0byBwYXJzZSB0aGlzIGFzIGEgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAqIG1lc3NhZ2UsIHRoZSBwYXJzZWQgbWVzc2FnZSBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZGVmYXVsdCBsaW1pdCxcbiAgICAgICAgICAgICAgICAgKiByZXN1bHRpbmcgaW4gYSBtZXNzYWdlIGRlY29kaW5nIGVycm9yLiBJbiB0aGF0IHNpdHVhdGlvbiwgdGhlIEhUVFBcbiAgICAgICAgICAgICAgICAgKiBlcnJvciBjb2RlIGluZm9ybWF0aW9uIGlzIG1vcmUgdXNlZnVsIHRvIHRoZSB1c2VyIHRoYW4gdGhlXG4gICAgICAgICAgICAgICAgICogUkVTT1VSQ0VfRVhIQVVTVEVEIGVycm9yIGlzLCBzbyB3ZSByZXBvcnQgdGhhdCBpbnN0ZWFkLiBOb3JtYWxseSxcbiAgICAgICAgICAgICAgICAgKiB3ZSBkZWxheSBwcm9jZXNzaW5nIHRoZSBIVFRQIHN0YXR1cyB1bnRpbCBhZnRlciB0aGUgc3RyZWFtIGVuZHMsIHRvXG4gICAgICAgICAgICAgICAgICogcHJpb3JpdGl6ZSByZXBvcnRpbmcgdGhlIGdSUEMgc3RhdHVzIGZyb20gdHJhaWxlcnMgaWYgaXQgaXMgcHJlc2VudCxcbiAgICAgICAgICAgICAgICAgKiBidXQgd2hlbiB0aGVyZSBpcyBhIG1lc3NhZ2UgcGFyc2luZyBlcnJvciB3ZSBlbmQgdGhlIHN0cmVhbSBlYXJseVxuICAgICAgICAgICAgICAgICAqIGJlZm9yZSBwcm9jZXNzaW5nIHRyYWlsZXJzLiAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmh0dHBTdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5odHRwU3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFN0YXR1cyA9IG1hcEh0dHBTdGF0dXNDb2RlKHRoaXMuaHR0cFN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFdpdGhTdGF0dXMobWFwcGVkU3RhdHVzLmNvZGUsIG1hcHBlZFN0YXR1cy5kZXRhaWxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsV2l0aFN0YXR1cyhjb25zdGFudHNfMS5TdGF0dXMuUkVTT1VSQ0VfRVhIQVVTVEVELCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdwYXJzZWQgbWVzc2FnZSBvZiBsZW5ndGggJyArIG1lc3NhZ2UubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFdmVudFRyYWNrZXIuYWRkTWVzc2FnZVJlY2VpdmVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50cnlQdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaHR0cDJTdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZHNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXliZU91dHB1dFN0YXR1cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgaHR0cDJTdHJlYW0ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJFbmRlZENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgLyogVXNlIHByb2Nlc3MubmV4dCB0aWNrIHRvIGVuc3VyZSB0aGF0IHRoaXMgY29kZSBoYXBwZW5zIGFmdGVyIGFueVxuICAgICAgICAgICAgICogXCJlcnJvclwiIGV2ZW50IHRoYXQgbWF5IGJlIGVtaXR0ZWQgYXQgYWJvdXQgdGhlIHNhbWUgdGltZSwgc28gdGhhdFxuICAgICAgICAgICAgICogd2UgY2FuIGJ1YmJsZSB1cCB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoYXQgZXZlbnQuICovXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnSFRUUC8yIHN0cmVhbSBjbG9zZWQgd2l0aCBjb2RlICcgKyBodHRwMlN0cmVhbS5yc3RDb2RlKTtcbiAgICAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGEgZmluYWwgc3RhdHVzIHdpdGggYW4gT0sgc3RhdHVzIGNvZGUsIHRoYXQgbWVhbnMgdGhhdFxuICAgICAgICAgICAgICAgICAqIHdlIGhhdmUgcmVjZWl2ZWQgYWxsIG9mIHRoZSBtZXNzYWdlcyBhbmQgd2UgaGF2ZSBwcm9jZXNzZWQgdGhlXG4gICAgICAgICAgICAgICAgICogdHJhaWxlcnMgYW5kIHRoZSBjYWxsIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHNvIGl0IGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgICAgICAgICAgICogaG93IHRoZSBzdHJlYW0gZW5kcyBhZnRlciB0aGF0ICovXG4gICAgICAgICAgICAgICAgaWYgKCgoX2EgPSB0aGlzLmZpbmFsU3RhdHVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29kZSkgPT09IGNvbnN0YW50c18xLlN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb2RlO1xuICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJyc7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChodHRwMlN0cmVhbS5yc3RDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgaHR0cDIuY29uc3RhbnRzLk5HSFRUUDJfTk9fRVJST1I6XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgYSBOT19FUlJPUiBjb2RlIGFuZCB3ZSBhbHJlYWR5IGhhdmUgYSBzdGF0dXMsIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogc3RyZWFtIGNvbXBsZXRlZCBwcm9wZXJseSBhbmQgd2UganVzdCBoYXZlbid0IGZ1bGx5IHByb2Nlc3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogaXQgeWV0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maW5hbFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmh0dHBTdGF0dXNDb2RlICYmIHRoaXMuaHR0cFN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFN0YXR1cyA9IG1hcEh0dHBTdGF0dXNDb2RlKHRoaXMuaHR0cFN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBtYXBwZWRTdGF0dXMuY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gbWFwcGVkU3RhdHVzLmRldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29uc3RhbnRzXzEuU3RhdHVzLklOVEVSTkFMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgPSBgUmVjZWl2ZWQgUlNUX1NUUkVBTSB3aXRoIGNvZGUgJHtodHRwMlN0cmVhbS5yc3RDb2RlfSAoQ2FsbCBlbmRlZCB3aXRob3V0IGdSUEMgc3RhdHVzKWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBodHRwMi5jb25zdGFudHMuTkdIVFRQMl9SRUZVU0VEX1NUUkVBTTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gJ1N0cmVhbSByZWZ1c2VkIGJ5IHNlcnZlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBodHRwMi5jb25zdGFudHMuTkdIVFRQMl9DQU5DRUw6XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWcgcmVwb3J0cyBpbmRpY2F0ZSB0aGF0IE5vZGUgc3ludGhlc2l6ZXMgYSBOR0hUVFAyX0NBTkNFTFxuICAgICAgICAgICAgICAgICAgICAgICAgICogY29kZSBmcm9tIGNvbm5lY3Rpb24gZHJvcHMuIFdlIHdhbnQgdG8gcHJpb3JpdGl6ZSByZXBvcnRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuIHVuYXZhaWxhYmxlIHN0YXR1cyB3aGVuIHRoYXQgaGFwcGVucy4gKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25Ecm9wcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5VTkFWQUlMQUJMRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gJ0Nvbm5lY3Rpb24gZHJvcHBlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29uc3RhbnRzXzEuU3RhdHVzLkNBTkNFTExFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gJ0NhbGwgY2FuY2VsbGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGh0dHAyLmNvbnN0YW50cy5OR0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5SRVNPVVJDRV9FWEhBVVNURUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gJ0JhbmR3aWR0aCBleGhhdXN0ZWQgb3IgbWVtb3J5IGxpbWl0IGV4Y2VlZGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGh0dHAyLmNvbnN0YW50cy5OR0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFk6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29uc3RhbnRzXzEuU3RhdHVzLlBFUk1JU1NJT05fREVOSUVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9ICdQcm90b2NvbCBub3Qgc2VjdXJlIGVub3VnaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBodHRwMi5jb25zdGFudHMuTkdIVFRQMl9JTlRFUk5BTF9FUlJPUjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbEVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBlcnJvciBjb2RlIHdhcyBwcmV2aW91c2x5IGhhbmRsZWQgaW4gdGhlIGRlZmF1bHQgY2FzZSwgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlcmUgYXJlIHNldmVyYWwgaW5zdGFuY2VzIG9mIGl0IG9ubGluZSwgc28gSSB3YW50ZWQgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBzbyB0aGF0IHBlb3BsZSBmaW5kIGV4aXN0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW5mb3JtYXRpb24gaW4gc2VhcmNoZXMsIGJ1dCBhbHNvIGluY2x1ZGUgdGhlIG1vcmUgcmVjb2duaXphYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIiBtZXNzYWdlLiAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgPSBgUmVjZWl2ZWQgUlNUX1NUUkVBTSB3aXRoIGNvZGUgJHtodHRwMlN0cmVhbS5yc3RDb2RlfSAoSW50ZXJuYWwgc2VydmVyIGVycm9yKWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbEVycm9yLmNvZGUgPT09ICdFQ09OTlJFU0VUJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsRXJyb3IuY29kZSA9PT0gJ0VUSU1FRE9VVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5VTkFWQUlMQUJMRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9IHRoaXMuaW50ZXJuYWxFcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIFwiUmVjZWl2ZWQgUlNUX1NUUkVBTSB3aXRoIGNvZGUgLi4uXCIgZXJyb3IgaXMgcHJlc2VydmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhlcmUgZm9yIGNvbnRpbnVpdHkgd2l0aCBlcnJvcnMgcmVwb3J0ZWQgb25saW5lLCBidXQgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVycm9yIG1lc3NhZ2UgYXQgdGhlIGVuZCB3aWxsIHByb2JhYmx5IGJlIG1vcmUgcmVsZXZhbnQgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbW9zdCBjYXNlcy4gKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9IGBSZWNlaXZlZCBSU1RfU1RSRUFNIHdpdGggY29kZSAke2h0dHAyU3RyZWFtLnJzdENvZGV9IHRyaWdnZXJlZCBieSBpbnRlcm5hbCBjbGllbnQgZXJyb3I6ICR7dGhpcy5pbnRlcm5hbEVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gYFJlY2VpdmVkIFJTVF9TVFJFQU0gd2l0aCBjb2RlICR7aHR0cDJTdHJlYW0ucnN0Q29kZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgaWYgdHJhaWxlcnMgd2VyZSByZWNlaXZlZCBhdCBhbGwuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBPSywgYmVjYXVzZSBzdGF0dXMgY29kZXMgZW1pdHRlZCBoZXJlIGNvcnJlc3BvbmQgdG8gbW9yZVxuICAgICAgICAgICAgICAgIC8vIGNhdGFzdHJvcGhpYyBpc3N1ZXMgdGhhdCBwcmV2ZW50IHVzIGZyb20gcmVjZWl2aW5nIHRyYWlsZXJzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBsYWNlLlxuICAgICAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHMsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICByc3RDb2RlOiBodHRwMlN0cmVhbS5yc3RDb2RlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBodHRwMlN0cmVhbS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAvKiBXZSBuZWVkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBzdG9wIFwiVW5jYXVnaHQgRXJyb3JcIiBleGNlcHRpb25zXG4gICAgICAgICAgICAgKiBmcm9tIGJ1YmJsaW5nIHVwLiBIb3dldmVyLCBlcnJvcnMgaGVyZSBzaG91bGQgYWxsIGNvcnJlc3BvbmQgdG9cbiAgICAgICAgICAgICAqIFwiY2xvc2VcIiBldmVudHMsIHdoZXJlIHdlIHdpbGwgaGFuZGxlIHRoZSBlcnJvciBtb3JlIGdyYW51bGFybHkgKi9cbiAgICAgICAgICAgIC8qIFNwZWNpZmljYWxseSBsb29raW5nIGZvciBzdHJlYW0gZXJyb3JzIHRoYXQgd2VyZSAqbm90KiBjb25zdHJ1Y3RlZFxuICAgICAgICAgICAgICogZnJvbSBhIFJTVF9TVFJFQU0gcmVzcG9uc2UgaGVyZTpcbiAgICAgICAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzhiODYyMGQ1ODAzMTQwNTAxNzU5ODM0MDJkZmRkZjI2NzRlOGUyMmEvbGliL2ludGVybmFsL2h0dHAyL2NvcmUuanMjTDIyNjdcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRVJSX0hUVFAyX1NUUkVBTV9FUlJPUicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdOb2RlIGVycm9yIGV2ZW50OiBtZXNzYWdlPScgK1xuICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSArXG4gICAgICAgICAgICAgICAgICAgICcgY29kZT0nICtcbiAgICAgICAgICAgICAgICAgICAgZXJyLmNvZGUgK1xuICAgICAgICAgICAgICAgICAgICAnIGVycm5vPScgK1xuICAgICAgICAgICAgICAgICAgICBnZXRTeXN0ZW1FcnJvck5hbWUoZXJyLmVycm5vKSArXG4gICAgICAgICAgICAgICAgICAgICcgc3lzY2FsbD0nICtcbiAgICAgICAgICAgICAgICAgICAgZXJyLnN5c2NhbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxFcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2FsbEV2ZW50VHJhY2tlci5vblN0cmVhbUVuZChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXREZWFkbGluZUluZm8oKSB7XG4gICAgICAgIHJldHVybiBbYHJlbW90ZV9hZGRyPSR7dGhpcy5nZXRQZWVyKCl9YF07XG4gICAgfVxuICAgIG9uRGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uRHJvcHBlZCA9IHRydWU7XG4gICAgICAgIC8qIEdpdmUgdGhlIGNhbGwgYW4gZXZlbnQgbG9vcCBjeWNsZSB0byBmaW5pc2ggbmF0dXJhbGx5IGJlZm9yZSByZXBvcnRpbmdcbiAgICAgICAgICogdGhlIGRpc2Nvbm5lY3Rpb24gYXMgYW4gZXJyb3IuICovXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVuZENhbGwoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5VTkFWQUlMQUJMRSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAnQ29ubmVjdGlvbiBkcm9wcGVkJyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3V0cHV0U3RhdHVzKCkge1xuICAgICAgICAvKiBQcmVjb25kaXRpb246IHRoaXMuZmluYWxTdGF0dXMgIT09IG51bGwgKi9cbiAgICAgICAgaWYgKCF0aGlzLnN0YXR1c091dHB1dCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFjZSgnZW5kZWQgd2l0aCBzdGF0dXM6IGNvZGU9JyArXG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbFN0YXR1cy5jb2RlICtcbiAgICAgICAgICAgICAgICAnIGRldGFpbHM9XCInICtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmFsU3RhdHVzLmRldGFpbHMgK1xuICAgICAgICAgICAgICAgICdcIicpO1xuICAgICAgICAgICAgdGhpcy5jYWxsRXZlbnRUcmFja2VyLm9uQ2FsbEVuZCh0aGlzLmZpbmFsU3RhdHVzKTtcbiAgICAgICAgICAgIC8qIFdlIGRlbGF5IHRoZSBhY3R1YWwgYWN0aW9uIG9mIGJ1YmJsaW5nIHVwIHRoZSBzdGF0dXMgdG8gaW5zdWxhdGUgdGhlXG4gICAgICAgICAgICAgKiBjbGVhbnVwIGNvZGUgaW4gdGhpcyBjbGFzcyBmcm9tIGFueSBlcnJvcnMgdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZVxuICAgICAgICAgICAgICogdXBwZXIgbGF5ZXJzIGFzIGEgcmVzdWx0IG9mIGJ1YmJsaW5nIHVwIHRoZSBzdGF0dXMuIEluIHBhcnRpY3VsYXIsXG4gICAgICAgICAgICAgKiBpZiB0aGUgc3RhdHVzIGlzIG5vdCBPSywgdGhlIFwiZXJyb3JcIiBldmVudCBtYXkgYmUgZW1pdHRlZFxuICAgICAgICAgICAgICogc3luY2hyb25vdXNseSBhdCB0aGUgdG9wIGxldmVsLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHRocm93biBlcnJvciBpZlxuICAgICAgICAgICAgICogdGhlIHVzZXIgZG9lcyBub3QgaGFuZGxlIHRoYXQgZXZlbnQuICovXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLm9uUmVjZWl2ZVN0YXR1cyh0aGlzLmZpbmFsU3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLyogTGVhdmUgdGhlIGh0dHAyIHN0cmVhbSBpbiBmbG93aW5nIHN0YXRlIHRvIGRyYWluIGluY29taW5nIG1lc3NhZ2VzLCB0b1xuICAgICAgICAgICAgICogZW5zdXJlIHRoYXQgdGhlIHN0cmVhbSBjbG9zdXJlIGNvbXBsZXRlcy4gVGhlIGNhbGwgc3RyZWFtIGFscmVhZHkgZG9lc1xuICAgICAgICAgICAgICogbm90IHB1c2ggbW9yZSBtZXNzYWdlcyBhZnRlciB0aGUgc3RhdHVzIGlzIG91dHB1dCwgc28gdGhlIG1lc3NhZ2VzIGdvXG4gICAgICAgICAgICAgKiBub3doZXJlIGVpdGhlciB3YXkuICovXG4gICAgICAgICAgICB0aGlzLmh0dHAyU3RyZWFtLnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyYWNlKHRleHQpIHtcbiAgICAgICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMi5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCAnWycgKyB0aGlzLmNhbGxJZCArICddICcgKyB0ZXh0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gZmlyc3QgY2FsbCwgZW1pdHMgYSAnc3RhdHVzJyBldmVudCB3aXRoIHRoZSBnaXZlbiBTdGF0dXNPYmplY3QuXG4gICAgICogU3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLlxuICAgICAqIEBwYXJhbSBzdGF0dXMgVGhlIHN0YXR1cyBvZiB0aGUgY2FsbC5cbiAgICAgKi9cbiAgICBlbmRDYWxsKHN0YXR1cykge1xuICAgICAgICAvKiBJZiB0aGUgc3RhdHVzIGlzIE9LIGFuZCBhIG5ldyBzdGF0dXMgY29tZXMgaW4gKGUuZy4gZnJvbSBhXG4gICAgICAgICAqIGRlc2VyaWFsaXphdGlvbiBmYWlsdXJlKSwgdGhhdCBuZXcgc3RhdHVzIHRha2VzIHByaW9yaXR5ICovXG4gICAgICAgIGlmICh0aGlzLmZpbmFsU3RhdHVzID09PSBudWxsIHx8IHRoaXMuZmluYWxTdGF0dXMuY29kZSA9PT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmFsU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgdGhpcy5tYXliZU91dHB1dFN0YXR1cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdHJveUh0dHAyU3RyZWFtKCk7XG4gICAgfVxuICAgIG1heWJlT3V0cHV0U3RhdHVzKCkge1xuICAgICAgICBpZiAodGhpcy5maW5hbFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLyogVGhlIGNvbWJpbmF0aW9uIGNoZWNrIG9mIHJlYWRzQ2xvc2VkIGFuZCB0aGF0IHRoZSB0d28gbWVzc2FnZSBidWZmZXJcbiAgICAgICAgICAgICAqIGFycmF5cyBhcmUgZW1wdHkgY2hlY2tzIHRoYXQgdGhlcmUgYWxsIGluY29taW5nIGRhdGEgaGFzIGJlZW4gZnVsbHlcbiAgICAgICAgICAgICAqIHByb2Nlc3NlZCAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuZmluYWxTdGF0dXMuY29kZSAhPT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMucmVhZHNDbG9zZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnB1c2hlZFJlYWRNZXNzYWdlcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaXNSZWFkRmlsdGVyUGVuZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc1B1c2hQZW5kaW5nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RhdHVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVzaChtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3B1c2hpbmcgdG8gcmVhZGVyIG1lc3NhZ2Ugb2YgbGVuZ3RoICcgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgaW5zdGFuY2VvZiBCdWZmZXIgPyBtZXNzYWdlLmxlbmd0aCA6IG51bGwpKTtcbiAgICAgICAgdGhpcy5jYW5QdXNoID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQdXNoUGVuZGluZyA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1B1c2hQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGFscmVhZHkgb3V0cHV0IHRoZSBzdGF0dXMgYW55IGxhdGVyIG1lc3NhZ2VzIHNob3VsZCBiZVxuICAgICAgICAgICAgICogaWdub3JlZCwgYW5kIGNhbiBjYXVzZSBvdXQtb2Ytb3JkZXIgb3BlcmF0aW9uIGVycm9ycyBoaWdoZXIgdXAgaW4gdGhlXG4gICAgICAgICAgICAgKiBzdGFjay4gQ2hlY2tpbmcgYXMgbGF0ZSBhcyBwb3NzaWJsZSBoZXJlIHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1c091dHB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubWF5YmVPdXRwdXRTdGF0dXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeVB1c2gobWVzc2FnZUJ5dGVzKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblB1c2gpIHtcbiAgICAgICAgICAgIHRoaXMuaHR0cDJTdHJlYW0ucGF1c2UoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaChtZXNzYWdlQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFjZSgndW5wdXNoZWRSZWFkTWVzc2FnZXMucHVzaCBtZXNzYWdlIG9mIGxlbmd0aCAnICsgbWVzc2FnZUJ5dGVzLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnVucHVzaGVkUmVhZE1lc3NhZ2VzLnB1c2gobWVzc2FnZUJ5dGVzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVUcmFpbGVycyhoZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuc2VydmVyRW5kZWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jYWxsRXZlbnRUcmFja2VyLm9uU3RyZWFtRW5kKHRydWUpO1xuICAgICAgICBsZXQgaGVhZGVyc1N0cmluZyA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgICAgICAgaGVhZGVyc1N0cmluZyArPSAnXFx0XFx0JyArIGhlYWRlciArICc6ICcgKyBoZWFkZXJzW2hlYWRlcl0gKyAnXFxuJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYWNlKCdSZWNlaXZlZCBzZXJ2ZXIgdHJhaWxlcnM6XFxuJyArIGhlYWRlcnNTdHJpbmcpO1xuICAgICAgICBsZXQgbWV0YWRhdGE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhXzEuTWV0YWRhdGEuZnJvbUh0dHAySGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbWV0YWRhdGEgPSBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhTWFwID0gbWV0YWRhdGEuZ2V0TWFwKCk7XG4gICAgICAgIGxldCBzdGF0dXM7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGFNYXBbJ2dycGMtc3RhdHVzJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlZFN0YXR1cyA9IE51bWJlcihtZXRhZGF0YU1hcFsnZ3JwYy1zdGF0dXMnXSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKCdyZWNlaXZlZCBzdGF0dXMgY29kZSAnICsgcmVjZWl2ZWRTdGF0dXMgKyAnIGZyb20gc2VydmVyJyk7XG4gICAgICAgICAgICBtZXRhZGF0YS5yZW1vdmUoJ2dycGMtc3RhdHVzJyk7XG4gICAgICAgICAgICBsZXQgZGV0YWlscyA9ICcnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRhZGF0YU1hcFsnZ3JwYy1tZXNzYWdlJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9IGRlY29kZVVSSShtZXRhZGF0YU1hcFsnZ3JwYy1tZXNzYWdlJ10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gbWV0YWRhdGFNYXBbJ2dycGMtbWVzc2FnZSddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5yZW1vdmUoJ2dycGMtbWVzc2FnZScpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ3JlY2VpdmVkIHN0YXR1cyBkZXRhaWxzIHN0cmluZyBcIicgKyBkZXRhaWxzICsgJ1wiIGZyb20gc2VydmVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0dXMgPSB7XG4gICAgICAgICAgICAgICAgY29kZTogcmVjZWl2ZWRTdGF0dXMsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogZGV0YWlscyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5odHRwU3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgc3RhdHVzID0gbWFwSHR0cFN0YXR1c0NvZGUodGhpcy5odHRwU3RhdHVzQ29kZSk7XG4gICAgICAgICAgICBzdGF0dXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5LTk9XTixcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAnTm8gc3RhdHVzIGluZm9ybWF0aW9uIHJlY2VpdmVkJyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGlmIHRoZSBjYWxsIHdhcyBhbHJlYWR5IGVuZGVkIHdoZW4gaGFuZGxpbmcgaGVhZGVycy5cbiAgICAgICAgdGhpcy5lbmRDYWxsKHN0YXR1cyk7XG4gICAgfVxuICAgIGRlc3Ryb3lIdHRwMlN0cmVhbSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvLyBUaGUgaHR0cDIgc3RyZWFtIGNvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGRlc3Ryb3llZCBpZiBjYW5jZWxXaXRoU3RhdHVzXG4gICAgICAgIC8vIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byBhbiBpbnRlcm5hbCBodHRwMiBlcnJvci5cbiAgICAgICAgaWYgKHRoaXMuaHR0cDJTdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyogSWYgdGhlIHNlcnZlciBlbmRlZCB0aGUgY2FsbCwgc2VuZGluZyBhbiBSU1RfU1RSRUFNIGlzIHJlZHVuZGFudCwgc28gd2VcbiAgICAgICAgICoganVzdCBoYWxmIGNsb3NlIG9uIHRoZSBjbGllbnQgc2lkZSBpbnN0ZWFkIHRvIGZpbmlzaCBjbG9zaW5nIHRoZSBzdHJlYW0uXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5zZXJ2ZXJFbmRlZENhbGwpIHtcbiAgICAgICAgICAgIHRoaXMuaHR0cDJTdHJlYW0uZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvKiBJZiB0aGUgY2FsbCBoYXMgZW5kZWQgd2l0aCBhbiBPSyBzdGF0dXMsIGNvbW11bmljYXRlIHRoYXQgd2hlbiBjbG9zaW5nXG4gICAgICAgICAgICAgKiB0aGUgc3RyZWFtLCBwYXJ0bHkgdG8gYXZvaWQgYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UgZGV0ZWN0IGFuIGVycm9yXG4gICAgICAgICAgICAgKiBSU1RfU1RSRUFNIGFzIGEgcmVzdWx0IGFmdGVyIHdlIGhhdmUgdGhlIHN0YXR1cyAqL1xuICAgICAgICAgICAgbGV0IGNvZGU7XG4gICAgICAgICAgICBpZiAoKChfYSA9IHRoaXMuZmluYWxTdGF0dXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb2RlKSA9PT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGh0dHAyLmNvbnN0YW50cy5OR0hUVFAyX05PX0VSUk9SO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGh0dHAyLmNvbnN0YW50cy5OR0hUVFAyX0NBTkNFTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJhY2UoJ2Nsb3NlIGh0dHAyIHN0cmVhbSB3aXRoIGNvZGUgJyArIGNvZGUpO1xuICAgICAgICAgICAgdGhpcy5odHRwMlN0cmVhbS5jbG9zZShjb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYW5jZWxXaXRoU3RhdHVzKHN0YXR1cywgZGV0YWlscykge1xuICAgICAgICB0aGlzLnRyYWNlKCdjYW5jZWxXaXRoU3RhdHVzIGNvZGU6ICcgKyBzdGF0dXMgKyAnIGRldGFpbHM6IFwiJyArIGRldGFpbHMgKyAnXCInKTtcbiAgICAgICAgdGhpcy5lbmRDYWxsKHsgY29kZTogc3RhdHVzLCBkZXRhaWxzLCBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSB9KTtcbiAgICB9XG4gICAgZ2V0U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5hbFN0YXR1cztcbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldFBlZXJOYW1lKCk7XG4gICAgfVxuICAgIGdldENhbGxOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxJZDtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH1cbiAgICBzdGFydFJlYWQoKSB7XG4gICAgICAgIC8qIElmIHRoZSBzdHJlYW0gaGFzIGVuZGVkIHdpdGggYW4gZXJyb3IsIHdlIHNob3VsZCBub3QgZW1pdCBhbnkgbW9yZVxuICAgICAgICAgKiBtZXNzYWdlcyBhbmQgd2Ugc2hvdWxkIGNvbW11bmljYXRlIHRoYXQgdGhlIHN0cmVhbSBoYXMgZW5kZWQgKi9cbiAgICAgICAgaWYgKHRoaXMuZmluYWxTdGF0dXMgIT09IG51bGwgJiYgdGhpcy5maW5hbFN0YXR1cy5jb2RlICE9PSBjb25zdGFudHNfMS5TdGF0dXMuT0spIHtcbiAgICAgICAgICAgIHRoaXMucmVhZHNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXliZU91dHB1dFN0YXR1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FuUHVzaCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnVucHVzaGVkUmVhZE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRNZXNzYWdlID0gdGhpcy51bnB1c2hlZFJlYWRNZXNzYWdlcy5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoKG5leHRNZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvKiBPbmx5IHJlc3VtZSByZWFkaW5nIGZyb20gdGhlIGh0dHAyU3RyZWFtIGlmIHdlIGRvbid0IGhhdmUgYW55IHBlbmRpbmdcbiAgICAgICAgICogbWVzc2FnZXMgdG8gZW1pdCAqL1xuICAgICAgICB0aGlzLmh0dHAyU3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgICBzZW5kTWVzc2FnZVdpdGhDb250ZXh0KGNvbnRleHQsIG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy50cmFjZSgnd3JpdGUoKSBjYWxsZWQgd2l0aCBtZXNzYWdlIG9mIGxlbmd0aCAnICsgbWVzc2FnZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBjYiA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgLyogbmV4dFRpY2sgaGVyZSBlbnN1cmVzIHRoYXQgbm8gc3RyZWFtIGFjdGlvbiBjYW4gYmUgdGFrZW4gaW4gdGhlIGNhbGxcbiAgICAgICAgICAgICAqIHN0YWNrIG9mIHRoZSB3cml0ZSBjYWxsYmFjaywgaW4gb3JkZXIgdG8gaG9wZWZ1bGx5IHdvcmsgYXJvdW5kXG4gICAgICAgICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MTQ3ICovXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEU7XG4gICAgICAgICAgICAgICAgaWYgKChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IuY29kZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICdFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvbnN0YW50c18xLlN0YXR1cy5JTlRFUk5BTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsV2l0aFN0YXR1cyhjb2RlLCBgV3JpdGUgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKF9hID0gY29udGV4dC5jYWxsYmFjaykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoY29udGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmFjZSgnc2VuZGluZyBkYXRhIGNodW5rIG9mIGxlbmd0aCAnICsgbWVzc2FnZS5sZW5ndGgpO1xuICAgICAgICB0aGlzLmNhbGxFdmVudFRyYWNrZXIuYWRkTWVzc2FnZVNlbnQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaHR0cDJTdHJlYW0ud3JpdGUobWVzc2FnZSwgY2IpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lbmRDYWxsKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogYFdyaXRlIGZhaWxlZCB3aXRoIGVycm9yICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFsZkNsb3NlKCkge1xuICAgICAgICB0aGlzLnRyYWNlKCdlbmQoKSBjYWxsZWQnKTtcbiAgICAgICAgdGhpcy50cmFjZSgnY2FsbGluZyBlbmQoKSBvbiBIVFRQLzIgc3RyZWFtJyk7XG4gICAgICAgIHRoaXMuaHR0cDJTdHJlYW0uZW5kKCk7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwMlN1YmNoYW5uZWxDYWxsID0gSHR0cDJTdWJjaGFubmVsQ2FsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YmNoYW5uZWwtY2FsbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDIzIGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkh0dHAyU3ViY2hhbm5lbENvbm5lY3RvciA9IHZvaWQgMDtcbmNvbnN0IGh0dHAyID0gcmVxdWlyZShcImh0dHAyXCIpO1xuY29uc3QgdGxzXzEgPSByZXF1aXJlKFwidGxzXCIpO1xuY29uc3QgY2hhbm5lbHpfMSA9IHJlcXVpcmUoXCIuL2NoYW5uZWx6XCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBodHRwX3Byb3h5XzEgPSByZXF1aXJlKFwiLi9odHRwX3Byb3h5XCIpO1xuY29uc3QgbG9nZ2luZyA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCByZXNvbHZlcl8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZXJcIik7XG5jb25zdCBzdWJjaGFubmVsX2FkZHJlc3NfMSA9IHJlcXVpcmUoXCIuL3N1YmNoYW5uZWwtYWRkcmVzc1wiKTtcbmNvbnN0IHVyaV9wYXJzZXJfMSA9IHJlcXVpcmUoXCIuL3VyaS1wYXJzZXJcIik7XG5jb25zdCBuZXQgPSByZXF1aXJlKFwibmV0XCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9jYWxsXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWNhbGxcIik7XG5jb25zdCBjYWxsX251bWJlcl8xID0gcmVxdWlyZShcIi4vY2FsbC1udW1iZXJcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICd0cmFuc3BvcnQnO1xuY29uc3QgRkxPV19DT05UUk9MX1RSQUNFUl9OQU1FID0gJ3RyYW5zcG9ydF9mbG93Y3RybCc7XG5jb25zdCBjbGllbnRWZXJzaW9uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IHsgSFRUUDJfSEVBREVSX0FVVEhPUklUWSwgSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRSwgSFRUUDJfSEVBREVSX01FVEhPRCwgSFRUUDJfSEVBREVSX1BBVEgsIEhUVFAyX0hFQURFUl9URSwgSFRUUDJfSEVBREVSX1VTRVJfQUdFTlQsIH0gPSBodHRwMi5jb25zdGFudHM7XG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9NUyA9IDIwMDAwO1xuY29uc3QgdG9vTWFueVBpbmdzRGF0YSA9IEJ1ZmZlci5mcm9tKCd0b29fbWFueV9waW5ncycsICdhc2NpaScpO1xuY2xhc3MgSHR0cDJUcmFuc3BvcnQge1xuICAgIGNvbnN0cnVjdG9yKHNlc3Npb24sIHN1YmNoYW5uZWxBZGRyZXNzLCBvcHRpb25zLCBcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSByZW1vdGUgc2VydmVyLCBpZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHN1YmNoYW5uZWxcbiAgICAgKiBhZGRyZXNzLCBpLmUuIGlmIGNvbm5lY3RpbmcgdGhyb3VnaCBhbiBIVFRQIENPTk5FQ1QgcHJveHkuXG4gICAgICovXG4gICAgcmVtb3RlTmFtZSkge1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnJlbW90ZU5hbWUgPSByZW1vdGVOYW1lO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGltZXIgcmVmZXJlbmNlIGluZGljYXRpbmcgd2hlbiB0byBzZW5kIHRoZSBuZXh0IHBpbmcgb3Igd2hlbiB0aGUgbW9zdCByZWNlbnQgcGluZyB3aWxsIGJlIGNvbnNpZGVyZWQgbG9zdC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMua2VlcGFsaXZlVGltZXIgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGtlZXBhbGl2ZSB0aW1lciByYW4gb3V0IHdoaWxlIHRoZXJlIHdlcmUgbm8gYWN0aXZlXG4gICAgICAgICAqIGNhbGxzLCBhbmQgYSBwaW5nIHNob3VsZCBiZSBzZW50IHRoZSBuZXh0IHRpbWUgYSBjYWxsIHN0YXJ0cy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbmRLZWVwYWxpdmVQaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2FsbHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdExpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RIYW5kbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbm5lbHpFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5rZWVwYWxpdmVzU2VudCA9IDA7XG4gICAgICAgIHRoaXMubWVzc2FnZXNTZW50ID0gMDtcbiAgICAgICAgdGhpcy5tZXNzYWdlc1JlY2VpdmVkID0gMDtcbiAgICAgICAgdGhpcy5sYXN0TWVzc2FnZVNlbnRUaW1lc3RhbXAgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RNZXNzYWdlUmVjZWl2ZWRUaW1lc3RhbXAgPSBudWxsO1xuICAgICAgICAvKiBQb3B1bGF0ZSBzdWJjaGFubmVsQWRkcmVzc1N0cmluZyBhbmQgY2hhbm5lbHpSZWYgYmVmb3JlIGRvaW5nIGFueXRoaW5nXG4gICAgICAgICAqIGVsc2UsIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBpbiB0aGUgdHJhY2UgbWV0aG9kcy4gKi9cbiAgICAgICAgdGhpcy5zdWJjaGFubmVsQWRkcmVzc1N0cmluZyA9ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKShzdWJjaGFubmVsQWRkcmVzcyk7XG4gICAgICAgIGlmIChvcHRpb25zWydncnBjLmVuYWJsZV9jaGFubmVseiddID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6RW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdHJlYW1UcmFja2VyID0gbmV3IGNoYW5uZWx6XzEuQ2hhbm5lbHpDYWxsVHJhY2tlclN0dWIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2FsbFRyYWNrZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5uZWx6UmVmID0gKDAsIGNoYW5uZWx6XzEucmVnaXN0ZXJDaGFubmVselNvY2tldCkodGhpcy5zdWJjaGFubmVsQWRkcmVzc1N0cmluZywgKCkgPT4gdGhpcy5nZXRDaGFubmVsekluZm8oKSwgdGhpcy5jaGFubmVsekVuYWJsZWQpO1xuICAgICAgICAvLyBCdWlsZCB1c2VyLWFnZW50IHN0cmluZy5cbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSBbXG4gICAgICAgICAgICBvcHRpb25zWydncnBjLnByaW1hcnlfdXNlcl9hZ2VudCddLFxuICAgICAgICAgICAgYGdycGMtbm9kZS1qcy8ke2NsaWVudFZlcnNpb259YCxcbiAgICAgICAgICAgIG9wdGlvbnNbJ2dycGMuc2Vjb25kYXJ5X3VzZXJfYWdlbnQnXSxcbiAgICAgICAgXVxuICAgICAgICAgICAgLmZpbHRlcihlID0+IGUpXG4gICAgICAgICAgICAuam9pbignICcpOyAvLyByZW1vdmUgZmFsc2V5IHZhbHVlcyBmaXJzdFxuICAgICAgICBpZiAoJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVGltZU1zID0gb3B0aW9uc1snZ3JwYy5rZWVwYWxpdmVfdGltZV9tcyddO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lTXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVGltZW91dE1zID0gb3B0aW9uc1snZ3JwYy5rZWVwYWxpdmVfdGltZW91dF9tcyddO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lb3V0TXMgPSBLRUVQQUxJVkVfVElNRU9VVF9NUztcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2dycGMua2VlcGFsaXZlX3Blcm1pdF93aXRob3V0X2NhbGxzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVdpdGhvdXRDYWxscyA9XG4gICAgICAgICAgICAgICAgb3B0aW9uc1snZ3JwYy5rZWVwYWxpdmVfcGVybWl0X3dpdGhvdXRfY2FsbHMnXSA9PT0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlV2l0aG91dENhbGxzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbi5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhY2UoJ3Nlc3Npb24gY2xvc2VkJyk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURpc2Nvbm5lY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlc3Npb24ub25jZSgnZ29hd2F5JywgKGVycm9yQ29kZSwgbGFzdFN0cmVhbUlELCBvcGFxdWVEYXRhKSA9PiB7XG4gICAgICAgICAgICBsZXQgdG9vTWFueVBpbmdzID0gZmFsc2U7XG4gICAgICAgICAgICAvKiBTZWUgdGhlIGxhc3QgcGFyYWdyYXBoIG9mXG4gICAgICAgICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vZ3JwYy9wcm9wb3NhbC9ibG9iL21hc3Rlci9BOC1jbGllbnQtc2lkZS1rZWVwYWxpdmUubWQjYmFzaWMta2VlcGFsaXZlICovXG4gICAgICAgICAgICBpZiAoZXJyb3JDb2RlID09PSBodHRwMi5jb25zdGFudHMuTkdIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTSAmJlxuICAgICAgICAgICAgICAgIG9wYXF1ZURhdGEgJiZcbiAgICAgICAgICAgICAgICBvcGFxdWVEYXRhLmVxdWFscyh0b29NYW55UGluZ3NEYXRhKSkge1xuICAgICAgICAgICAgICAgIHRvb01hbnlQaW5ncyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyYWNlKCdjb25uZWN0aW9uIGNsb3NlZCBieSBHT0FXQVkgd2l0aCBjb2RlICcgK1xuICAgICAgICAgICAgICAgIGVycm9yQ29kZSArXG4gICAgICAgICAgICAgICAgJyBhbmQgZGF0YSAnICtcbiAgICAgICAgICAgICAgICAob3BhcXVlRGF0YSA9PT0gbnVsbCB8fCBvcGFxdWVEYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcGFxdWVEYXRhLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0RGlzY29ubmVjdFRvT3duZXIodG9vTWFueVBpbmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlc3Npb24ub25jZSgnZXJyb3InLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKCdjb25uZWN0aW9uIGNsb3NlZCB3aXRoIGVycm9yICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGlzY29ubmVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2Vzc2lvbi5zb2NrZXQub25jZSgnY2xvc2UnLCAoaGFkRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhY2UoJ2Nvbm5lY3Rpb24gY2xvc2VkLiBoYWRFcnJvcj0nICsgaGFkRXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobG9nZ2luZy5pc1RyYWNlckVuYWJsZWQoVFJBQ0VSX05BTUUpKSB7XG4gICAgICAgICAgICBzZXNzaW9uLm9uKCdyZW1vdGVTZXR0aW5ncycsIChzZXR0aW5ncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ25ldyBzZXR0aW5ncyByZWNlaXZlZCcgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5zZXNzaW9uICE9PSBzZXNzaW9uID8gJyBvbiB0aGUgb2xkIGNvbm5lY3Rpb24nIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlc3Npb24ub24oJ2xvY2FsU2V0dGluZ3MnLCAoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdsb2NhbCBzZXR0aW5ncyBhY2tub3dsZWRnZWQgYnkgcmVtb3RlJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnNlc3Npb24gIT09IHNlc3Npb24gPyAnIG9uIHRoZSBvbGQgY29ubmVjdGlvbicgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qIFN0YXJ0IHRoZSBrZWVwYWxpdmUgdGltZXIgbGFzdCwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyIHRyYWNlIGxvZ3MsXG4gICAgICAgICAqIHdoaWNoIHNob3VsZCBvbmx5IGhhcHBlbiBhZnRlciBldmVyeXRoaW5nIGVsc2UgaXMgc2V0IHVwLiAqL1xuICAgICAgICBpZiAodGhpcy5rZWVwYWxpdmVXaXRob3V0Q2FsbHMpIHtcbiAgICAgICAgICAgIHRoaXMubWF5YmVTdGFydEtlZXBhbGl2ZVBpbmdUaW1lcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXNzaW9uLnNvY2tldCBpbnN0YW5jZW9mIHRsc18xLlRMU1NvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5hdXRoQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICB0cmFuc3BvcnRTZWN1cml0eVR5cGU6ICdzc2wnLFxuICAgICAgICAgICAgICAgIHNzbFBlZXJDZXJ0aWZpY2F0ZTogc2Vzc2lvbi5zb2NrZXQuZ2V0UGVlckNlcnRpZmljYXRlKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhDb250ZXh0ID0ge307XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q2hhbm5lbHpJbmZvKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3Qgc2Vzc2lvblNvY2tldCA9IHRoaXMuc2Vzc2lvbi5zb2NrZXQ7XG4gICAgICAgIGNvbnN0IHJlbW90ZUFkZHJlc3MgPSBzZXNzaW9uU29ja2V0LnJlbW90ZUFkZHJlc3NcbiAgICAgICAgICAgID8gKDAsIHN1YmNoYW5uZWxfYWRkcmVzc18xLnN0cmluZ1RvU3ViY2hhbm5lbEFkZHJlc3MpKHNlc3Npb25Tb2NrZXQucmVtb3RlQWRkcmVzcywgc2Vzc2lvblNvY2tldC5yZW1vdGVQb3J0KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBsb2NhbEFkZHJlc3MgPSBzZXNzaW9uU29ja2V0LmxvY2FsQWRkcmVzc1xuICAgICAgICAgICAgPyAoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuc3RyaW5nVG9TdWJjaGFubmVsQWRkcmVzcykoc2Vzc2lvblNvY2tldC5sb2NhbEFkZHJlc3MsIHNlc3Npb25Tb2NrZXQubG9jYWxQb3J0KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBsZXQgdGxzSW5mbztcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5lbmNyeXB0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRsc1NvY2tldCA9IHNlc3Npb25Tb2NrZXQ7XG4gICAgICAgICAgICBjb25zdCBjaXBoZXJJbmZvID0gdGxzU29ja2V0LmdldENpcGhlcigpO1xuICAgICAgICAgICAgY29uc3QgY2VydGlmaWNhdGUgPSB0bHNTb2NrZXQuZ2V0Q2VydGlmaWNhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBlZXJDZXJ0aWZpY2F0ZSA9IHRsc1NvY2tldC5nZXRQZWVyQ2VydGlmaWNhdGUoKTtcbiAgICAgICAgICAgIHRsc0luZm8gPSB7XG4gICAgICAgICAgICAgICAgY2lwaGVyU3VpdGVTdGFuZGFyZE5hbWU6IChfYSA9IGNpcGhlckluZm8uc3RhbmRhcmROYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsLFxuICAgICAgICAgICAgICAgIGNpcGhlclN1aXRlT3RoZXJOYW1lOiBjaXBoZXJJbmZvLnN0YW5kYXJkTmFtZSA/IG51bGwgOiBjaXBoZXJJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgbG9jYWxDZXJ0aWZpY2F0ZTogY2VydGlmaWNhdGUgJiYgJ3JhdycgaW4gY2VydGlmaWNhdGUgPyBjZXJ0aWZpY2F0ZS5yYXcgOiBudWxsLFxuICAgICAgICAgICAgICAgIHJlbW90ZUNlcnRpZmljYXRlOiBwZWVyQ2VydGlmaWNhdGUgJiYgJ3JhdycgaW4gcGVlckNlcnRpZmljYXRlXG4gICAgICAgICAgICAgICAgICAgID8gcGVlckNlcnRpZmljYXRlLnJhd1xuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGxzSW5mbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc29ja2V0SW5mbyA9IHtcbiAgICAgICAgICAgIHJlbW90ZUFkZHJlc3M6IHJlbW90ZUFkZHJlc3MsXG4gICAgICAgICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzcyxcbiAgICAgICAgICAgIHNlY3VyaXR5OiB0bHNJbmZvLFxuICAgICAgICAgICAgcmVtb3RlTmFtZTogdGhpcy5yZW1vdGVOYW1lLFxuICAgICAgICAgICAgc3RyZWFtc1N0YXJ0ZWQ6IHRoaXMuc3RyZWFtVHJhY2tlci5jYWxsc1N0YXJ0ZWQsXG4gICAgICAgICAgICBzdHJlYW1zU3VjY2VlZGVkOiB0aGlzLnN0cmVhbVRyYWNrZXIuY2FsbHNTdWNjZWVkZWQsXG4gICAgICAgICAgICBzdHJlYW1zRmFpbGVkOiB0aGlzLnN0cmVhbVRyYWNrZXIuY2FsbHNGYWlsZWQsXG4gICAgICAgICAgICBtZXNzYWdlc1NlbnQ6IHRoaXMubWVzc2FnZXNTZW50LFxuICAgICAgICAgICAgbWVzc2FnZXNSZWNlaXZlZDogdGhpcy5tZXNzYWdlc1JlY2VpdmVkLFxuICAgICAgICAgICAga2VlcEFsaXZlc1NlbnQ6IHRoaXMua2VlcGFsaXZlc1NlbnQsXG4gICAgICAgICAgICBsYXN0TG9jYWxTdHJlYW1DcmVhdGVkVGltZXN0YW1wOiB0aGlzLnN0cmVhbVRyYWNrZXIubGFzdENhbGxTdGFydGVkVGltZXN0YW1wLFxuICAgICAgICAgICAgbGFzdFJlbW90ZVN0cmVhbUNyZWF0ZWRUaW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICBsYXN0TWVzc2FnZVNlbnRUaW1lc3RhbXA6IHRoaXMubGFzdE1lc3NhZ2VTZW50VGltZXN0YW1wLFxuICAgICAgICAgICAgbGFzdE1lc3NhZ2VSZWNlaXZlZFRpbWVzdGFtcDogdGhpcy5sYXN0TWVzc2FnZVJlY2VpdmVkVGltZXN0YW1wLFxuICAgICAgICAgICAgbG9jYWxGbG93Q29udHJvbFdpbmRvdzogKF9iID0gdGhpcy5zZXNzaW9uLnN0YXRlLmxvY2FsV2luZG93U2l6ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbCxcbiAgICAgICAgICAgIHJlbW90ZUZsb3dDb250cm9sV2luZG93OiAoX2MgPSB0aGlzLnNlc3Npb24uc3RhdGUucmVtb3RlV2luZG93U2l6ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNvY2tldEluZm87XG4gICAgfVxuICAgIHRyYWNlKHRleHQpIHtcbiAgICAgICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCAnKCcgK1xuICAgICAgICAgICAgdGhpcy5jaGFubmVselJlZi5pZCArXG4gICAgICAgICAgICAnKSAnICtcbiAgICAgICAgICAgIHRoaXMuc3ViY2hhbm5lbEFkZHJlc3NTdHJpbmcgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIHRleHQpO1xuICAgIH1cbiAgICBrZWVwYWxpdmVUcmFjZSh0ZXh0KSB7XG4gICAgICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCAna2VlcGFsaXZlJywgJygnICtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpSZWYuaWQgK1xuICAgICAgICAgICAgJykgJyArXG4gICAgICAgICAgICB0aGlzLnN1YmNoYW5uZWxBZGRyZXNzU3RyaW5nICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICB0ZXh0KTtcbiAgICB9XG4gICAgZmxvd0NvbnRyb2xUcmFjZSh0ZXh0KSB7XG4gICAgICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCBGTE9XX0NPTlRST0xfVFJBQ0VSX05BTUUsICcoJyArXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6UmVmLmlkICtcbiAgICAgICAgICAgICcpICcgK1xuICAgICAgICAgICAgdGhpcy5zdWJjaGFubmVsQWRkcmVzc1N0cmluZyArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgdGV4dCk7XG4gICAgfVxuICAgIGludGVybmFsc1RyYWNlKHRleHQpIHtcbiAgICAgICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsICd0cmFuc3BvcnRfaW50ZXJuYWxzJywgJygnICtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpSZWYuaWQgK1xuICAgICAgICAgICAgJykgJyArXG4gICAgICAgICAgICB0aGlzLnN1YmNoYW5uZWxBZGRyZXNzU3RyaW5nICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICB0ZXh0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGUgdG8gdGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0IHRoYXQgdGhpcyB0cmFuc3BvcnQgc2hvdWxkIG5vIGxvbmdlclxuICAgICAqIGJlIHVzZWQuIFRoYXQgaGFwcGVucyBpZiB0aGUgY29ubmVjdGlvbiBkcm9wcywgb3IgaWYgdGhlIHNlcnZlciBzZW5kcyBhXG4gICAgICogR09BV0FZLlxuICAgICAqIEBwYXJhbSB0b29NYW55UGluZ3MgSWYgdHJ1ZSwgdGhpcyB3YXMgdHJpZ2dlcmVkIGJ5IGEgR09BV0FZIHdpdGggZGF0YVxuICAgICAqIGluZGljYXRpbmcgdGhhdCB0aGUgc2Vzc2lvbiB3YXMgY2xvc2VkIGJlY2F1ZXMgdGhlIGNsaWVudCBzZW50IHRvbyBtYW55XG4gICAgICogcGluZ3MuXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICByZXBvcnREaXNjb25uZWN0VG9Pd25lcih0b29NYW55UGluZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzY29ubmVjdEhhbmRsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RIYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0TGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIodG9vTWFueVBpbmdzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBjb25uZWN0aW9uIGRyb3BzLCBidXQgbm90IEdPQVdBWXMuXG4gICAgICovXG4gICAgaGFuZGxlRGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5jbGVhcktlZXBhbGl2ZVRpbWVvdXQoKTtcbiAgICAgICAgdGhpcy5yZXBvcnREaXNjb25uZWN0VG9Pd25lcihmYWxzZSk7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbCBvZiB0aGlzLmFjdGl2ZUNhbGxzKSB7XG4gICAgICAgICAgICBjYWxsLm9uRGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdhaXQgYW4gZXZlbnQgbG9vcCBjeWNsZSBiZWZvcmUgZGVzdHJveWluZyB0aGUgY29ubmVjdGlvblxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZERpc2Nvbm5lY3RMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuICAgIGNhblNlbmRQaW5nKCkge1xuICAgICAgICByZXR1cm4gKCF0aGlzLnNlc3Npb24uZGVzdHJveWVkICYmXG4gICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWVNcyA+IDAgJiZcbiAgICAgICAgICAgICh0aGlzLmtlZXBhbGl2ZVdpdGhvdXRDYWxscyB8fCB0aGlzLmFjdGl2ZUNhbGxzLnNpemUgPiAwKSk7XG4gICAgfVxuICAgIG1heWJlU2VuZFBpbmcoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICghdGhpcy5jYW5TZW5kUGluZygpKSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdTZW5kS2VlcGFsaXZlUGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMua2VlcGFsaXZlVGltZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2tlZXBhbGl2ZVRpbWVvdXQgaXMgbm90IG51bGwnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaGFubmVsekVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlc1NlbnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtlZXBhbGl2ZVRyYWNlKCdTZW5kaW5nIHBpbmcgd2l0aCB0aW1lb3V0ICcgKyB0aGlzLmtlZXBhbGl2ZVRpbWVvdXRNcyArICdtcycpO1xuICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1BpbmcgdGltZW91dCBwYXNzZWQgd2l0aG91dCByZXNwb25zZScpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7XG4gICAgICAgIH0sIHRoaXMua2VlcGFsaXZlVGltZW91dE1zKTtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5rZWVwYWxpdmVUaW1lcikudW5yZWYpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgbGV0IHBpbmdTZW5kRXJyb3IgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBpbmdTZW50U3VjY2Vzc2Z1bGx5ID0gdGhpcy5zZXNzaW9uLnBpbmcoKGVyciwgZHVyYXRpb24sIHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyS2VlcGFsaXZlVGltZW91dCgpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUcmFjZSgnUGluZyBmYWlsZWQgd2l0aCBlcnJvciAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1JlY2VpdmVkIHBpbmcgcmVzcG9uc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXliZVN0YXJ0S2VlcGFsaXZlUGluZ1RpbWVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXBpbmdTZW50U3VjY2Vzc2Z1bGx5KSB7XG4gICAgICAgICAgICAgICAgcGluZ1NlbmRFcnJvciA9ICdQaW5nIHJldHVybmVkIGZhbHNlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZ3JwYy9ncnBjLW5vZGUjMjEzOVxuICAgICAgICAgICAgcGluZ1NlbmRFcnJvciA9IChlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnJykgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwaW5nU2VuZEVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRyYWNlKCdQaW5nIHNlbmQgZmFpbGVkOiAnICsgcGluZ1NlbmRFcnJvcik7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgdGhlIGtlZXBhbGl2ZSBwaW5nIHRpbWVyIGlmIGFwcHJvcHJpYXRlLiBJZiB0aGUgdGltZXIgYWxyZWFkeSByYW5cbiAgICAgKiBvdXQgd2hpbGUgdGhlcmUgd2VyZSBubyBhY3RpdmUgcmVxdWVzdHMsIGluc3RlYWQgc2VuZCBhIHBpbmcgaW1tZWRpYXRlbHkuXG4gICAgICogSWYgdGhlIHBpbmcgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIG9yIGEgcGluZyBpcyBjdXJyZW50bHkgaW4gZmxpZ2h0LFxuICAgICAqIGluc3RlYWQgZG8gbm90aGluZyBhbmQgd2FpdCBmb3IgdGhlbSB0byByZXNvbHZlLlxuICAgICAqL1xuICAgIG1heWJlU3RhcnRLZWVwYWxpdmVQaW5nVGltZXIoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICghdGhpcy5jYW5TZW5kUGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1NlbmRLZWVwYWxpdmVQaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdTZW5kS2VlcGFsaXZlUGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5tYXliZVNlbmRQaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMua2VlcGFsaXZlVGltZXIpIHtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1N0YXJ0aW5nIGtlZXBhbGl2ZSB0aW1lciBmb3IgJyArIHRoaXMua2VlcGFsaXZlVGltZU1zICsgJ21zJyk7XG4gICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXliZVNlbmRQaW5nKCk7XG4gICAgICAgICAgICB9LCB0aGlzLmtlZXBhbGl2ZVRpbWVNcyk7XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmtlZXBhbGl2ZVRpbWVyKS51bnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICB9XG4gICAgICAgIC8qIE90aGVyd2lzZSwgdGhlcmUgaXMgYWxyZWFkeSBlaXRoZXIgYSBrZWVwYWxpdmUgdGltZXIgb3IgYSBwaW5nIHBlbmRpbmcsXG4gICAgICAgICAqIHdhaXQgZm9yIHRob3NlIHRvIHJlc29sdmUuICovXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyB3aGljaGV2ZXIga2VlcGFsaXZlIHRpbWVvdXQgaXMgY3VycmVudGx5IGFjdGl2ZSwgaWYgYW55LlxuICAgICAqL1xuICAgIGNsZWFyS2VlcGFsaXZlVGltZW91dCgpIHtcbiAgICAgICAgaWYgKHRoaXMua2VlcGFsaXZlVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmtlZXBhbGl2ZVRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUFjdGl2ZUNhbGwoY2FsbCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUNhbGxzLmRlbGV0ZShjYWxsKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FsbHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnVucmVmKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkQWN0aXZlQ2FsbChjYWxsKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2FsbHMuYWRkKGNhbGwpO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVDYWxscy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVmKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMua2VlcGFsaXZlV2l0aG91dENhbGxzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXliZVN0YXJ0S2VlcGFsaXZlUGluZ1RpbWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlQ2FsbChtZXRhZGF0YSwgaG9zdCwgbWV0aG9kLCBsaXN0ZW5lciwgc3ViY2hhbm5lbENhbGxTdGF0c1RyYWNrZXIpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG1ldGFkYXRhLnRvSHR0cDJIZWFkZXJzKCk7XG4gICAgICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0O1xuICAgICAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9VU0VSX0FHRU5UXSA9IHRoaXMudXNlckFnZW50O1xuICAgICAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdID0gJ2FwcGxpY2F0aW9uL2dycGMnO1xuICAgICAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9NRVRIT0RdID0gJ1BPU1QnO1xuICAgICAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9QQVRIXSA9IG1ldGhvZDtcbiAgICAgICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfVEVdID0gJ3RyYWlsZXJzJztcbiAgICAgICAgbGV0IGh0dHAyU3RyZWFtO1xuICAgICAgICAvKiBJbiB0aGVvcnksIGlmIGFuIGVycm9yIGlzIHRocm93biBieSBzZXNzaW9uLnJlcXVlc3QgYmVjYXVzZSBzZXNzaW9uIGhhc1xuICAgICAgICAgKiBiZWNvbWUgdW51c2FibGUgKGUuZy4gYmVjYXVzZSBpdCBoYXMgcmVjZWl2ZWQgYSBnb2F3YXkpLCB0aGlzIHN1YmNoYW5uZWxcbiAgICAgICAgICogc2hvdWxkIHNvb24gc2VlIHRoZSBjb3JyZXNwb25kaW5nIGNsb3NlIG9yIGdvYXdheSBldmVudCBhbnl3YXkgYW5kIGxlYXZlXG4gICAgICAgICAqIFJFQURZLiBCdXQgd2UgaGF2ZSBzZWVuIHJlcG9ydHMgdGhhdCB0aGlzIGRvZXMgbm90IGhhcHBlblxuICAgICAgICAgKiAoaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWFwaXMvbm9kZWpzLWZpcmVzdG9yZS9pc3N1ZXMvMTAyMyNpc3N1ZWNvbW1lbnQtNjUzMjA0MDk2KVxuICAgICAgICAgKiBzbyBmb3IgZGVmZW5zZSBpbiBkZXB0aCwgd2UganVzdCBkaXNjYXJkIHRoZSBzZXNzaW9uIHdoZW4gd2Ugc2VlIGFuXG4gICAgICAgICAqIGVycm9yIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaHR0cDJTdHJlYW0gPSB0aGlzLnNlc3Npb24ucmVxdWVzdChoZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmxvd0NvbnRyb2xUcmFjZSgnbG9jYWwgd2luZG93IHNpemU6ICcgK1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnN0YXRlLmxvY2FsV2luZG93U2l6ZSArXG4gICAgICAgICAgICAnIHJlbW90ZSB3aW5kb3cgc2l6ZTogJyArXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc3RhdGUucmVtb3RlV2luZG93U2l6ZSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxzVHJhY2UoJ3Nlc3Npb24uY2xvc2VkPScgK1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsb3NlZCArXG4gICAgICAgICAgICAnIHNlc3Npb24uZGVzdHJveWVkPScgK1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRlc3Ryb3llZCArXG4gICAgICAgICAgICAnIHNlc3Npb24uc29ja2V0LmRlc3Ryb3llZD0nICtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zb2NrZXQuZGVzdHJveWVkKTtcbiAgICAgICAgbGV0IGV2ZW50VHJhY2tlcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgICBsZXQgY2FsbDtcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbVRyYWNrZXIuYWRkQ2FsbFN0YXJ0ZWQoKTtcbiAgICAgICAgICAgIGV2ZW50VHJhY2tlciA9IHtcbiAgICAgICAgICAgICAgICBhZGRNZXNzYWdlU2VudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXNTZW50ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lc3NhZ2VTZW50VGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gc3ViY2hhbm5lbENhbGxTdGF0c1RyYWNrZXIuYWRkTWVzc2FnZVNlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN1YmNoYW5uZWxDYWxsU3RhdHNUcmFja2VyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2VSZWNlaXZlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXNSZWNlaXZlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZXNzYWdlUmVjZWl2ZWRUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlci5hZGRNZXNzYWdlUmVjZWl2ZWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN1YmNoYW5uZWxDYWxsU3RhdHNUcmFja2VyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQ2FsbEVuZDogc3RhdHVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlci5vbkNhbGxFbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHN1YmNoYW5uZWxDYWxsU3RhdHNUcmFja2VyLCBzdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUFjdGl2ZUNhbGwoY2FsbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblN0cmVhbUVuZDogc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtVHJhY2tlci5hZGRDYWxsU3VjY2VlZGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVRyYWNrZXIuYWRkQ2FsbEZhaWxlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHN1YmNoYW5uZWxDYWxsU3RhdHNUcmFja2VyLm9uU3RyZWFtRW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlciwgc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBldmVudFRyYWNrZXIgPSB7XG4gICAgICAgICAgICAgICAgYWRkTWVzc2FnZVNlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlci5hZGRNZXNzYWdlU2VudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoc3ViY2hhbm5lbENhbGxTdGF0c1RyYWNrZXIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWRkTWVzc2FnZVJlY2VpdmVkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gc3ViY2hhbm5lbENhbGxTdGF0c1RyYWNrZXIuYWRkTWVzc2FnZVJlY2VpdmVkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkNhbGxFbmQ6IHN0YXR1cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gc3ViY2hhbm5lbENhbGxTdGF0c1RyYWNrZXIub25DYWxsRW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlciwgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBY3RpdmVDYWxsKGNhbGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25TdHJlYW1FbmQ6IHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHN1YmNoYW5uZWxDYWxsU3RhdHNUcmFja2VyLm9uU3RyZWFtRW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChzdWJjaGFubmVsQ2FsbFN0YXRzVHJhY2tlciwgc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FsbCA9IG5ldyBzdWJjaGFubmVsX2NhbGxfMS5IdHRwMlN1YmNoYW5uZWxDYWxsKGh0dHAyU3RyZWFtLCBldmVudFRyYWNrZXIsIGxpc3RlbmVyLCB0aGlzLCAoMCwgY2FsbF9udW1iZXJfMS5nZXROZXh0Q2FsbE51bWJlcikoKSk7XG4gICAgICAgIHRoaXMuYWRkQWN0aXZlQ2FsbChjYWxsKTtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIGdldENoYW5uZWx6UmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVselJlZjtcbiAgICB9XG4gICAgZ2V0UGVlck5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YmNoYW5uZWxBZGRyZXNzU3RyaW5nO1xuICAgIH1cbiAgICBnZXRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICAgIH1cbiAgICBnZXRBdXRoQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aENvbnRleHQ7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLnNlc3Npb24uY2xvc2UoKTtcbiAgICAgICAgKDAsIGNoYW5uZWx6XzEudW5yZWdpc3RlckNoYW5uZWx6UmVmKSh0aGlzLmNoYW5uZWx6UmVmKTtcbiAgICB9XG59XG5jbGFzcyBIdHRwMlN1YmNoYW5uZWxDb25uZWN0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWxUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsVGFyZ2V0ID0gY2hhbm5lbFRhcmdldDtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc1NodXRkb3duID0gZmFsc2U7XG4gICAgfVxuICAgIHRyYWNlKHRleHQpIHtcbiAgICAgICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCAoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0aGlzLmNoYW5uZWxUYXJnZXQpICsgJyAnICsgdGV4dCk7XG4gICAgfVxuICAgIGNyZWF0ZVNlc3Npb24oc2VjdXJlQ29ubmVjdFJlc3VsdCwgYWRkcmVzcywgb3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5pc1NodXRkb3duKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VjdXJlQ29ubmVjdFJlc3VsdC5zb2NrZXQuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBzdGFydGluZyBIVFRQLzIgaGFuZHNoYWtlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2g7XG4gICAgICAgICAgICBsZXQgcmVtb3RlTmFtZSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVhbFRhcmdldCA9IHRoaXMuY2hhbm5lbFRhcmdldDtcbiAgICAgICAgICAgIGlmICgnZ3JwYy5odHRwX2Nvbm5lY3RfdGFyZ2V0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkVGFyZ2V0ID0gKDAsIHVyaV9wYXJzZXJfMS5wYXJzZVVyaSkob3B0aW9uc1snZ3JwYy5odHRwX2Nvbm5lY3RfdGFyZ2V0J10pO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbFRhcmdldCA9IHBhcnNlZFRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlTmFtZSA9ICgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHBhcnNlZFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1lID0gc2VjdXJlQ29ubmVjdFJlc3VsdC5zZWN1cmUgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9ICgwLCByZXNvbHZlcl8xLmdldERlZmF1bHRBdXRob3JpdHkpKHJlYWxUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aW1lIGZvciBlcnJvciBldmVudCB0byBoYXBwZW4gYmVmb3JlIHJlamVjdGluZ1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVwb3J0ZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYCR7ZXJyb3JNZXNzYWdlLnRyaW0oKX0gKCR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdjb25uZWN0aW9uIGZhaWxlZCB3aXRoIGVycm9yICcgKyBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVwb3J0ZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnRlZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGAke2Vycm9yTWVzc2FnZX0gKCR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlQ29ubmVjdGlvbjogKGF1dGhvcml0eSwgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWN1cmVDb25uZWN0UmVzdWx0LnNvY2tldDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxXaW5kb3dTaXplOiAoX2QgPSAoX2EgPSBvcHRpb25zWydncnBjLW5vZGUuZmxvd19jb250cm9sX3dpbmRvdyddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2MgPSAoX2IgPSBodHRwMi5nZXREZWZhdWx0U2V0dGluZ3MpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGh0dHAyKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmluaXRpYWxXaW5kb3dTaXplKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiA2NTUzNSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heFNlbmRIZWFkZXJCbG9ja0xlbmd0aDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICAgICAgLyogQnkgZGVmYXVsdCwgc2V0IGEgdmVyeSBsYXJnZSBtYXggc2Vzc2lvbiBtZW1vcnkgbGltaXQsIHRvIGVmZmVjdGl2ZWx5XG4gICAgICAgICAgICAgICAgICogZGlzYWJsZSBlbmZvcmNlbWVudCBvZiB0aGUgbGltaXQuIFNvbWUgdGVzdGluZyBpbmRpY2F0ZXMgdGhhdCBOb2RlJ3NcbiAgICAgICAgICAgICAgICAgKiBiZWhhdmlvciBkZWdyYWRlcyBiYWRseSB3aGVuIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwgc28gd2Ugc29sdmUgdGhhdFxuICAgICAgICAgICAgICAgICAqIGJ5IGRpc2FibGluZyB0aGUgY2hlY2sgZW50aXJlbHkuICovXG4gICAgICAgICAgICAgICAgbWF4U2Vzc2lvbk1lbW9yeTogKF9lID0gb3B0aW9uc1snZ3JwYy1ub2RlLm1heF9zZXNzaW9uX21lbW9yeSddKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBodHRwMi5jb25uZWN0KGAke3NjaGVtZX06Ly8ke3RhcmdldFBhdGh9YCwgc2Vzc2lvbk9wdGlvbnMpO1xuICAgICAgICAgICAgLy8gUHJlcGFyZSB3aW5kb3cgc2l6ZSBjb25maWd1cmF0aW9uIGZvciByZW1vdGVTZXR0aW5ncyBoYW5kbGVyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0V2luID0gKF9oID0gKF9nID0gKF9mID0gaHR0cDIuZ2V0RGVmYXVsdFNldHRpbmdzKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuY2FsbChodHRwMikpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5pbml0aWFsV2luZG93U2l6ZSkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogNjU1MzU7IC8vIDY1IDUzNSBCXG4gICAgICAgICAgICBjb25zdCBjb25uV2luID0gb3B0aW9uc1snZ3JwYy1ub2RlLmZsb3dfY29udHJvbF93aW5kb3cnXTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBjb25uZWN0JztcbiAgICAgICAgICAgIGxldCByZXBvcnRlZEVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICBzZXNzaW9uLnVucmVmKCk7XG4gICAgICAgICAgICBzZXNzaW9uLm9uY2UoJ3JlbW90ZVNldHRpbmdzJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAvLyBTZW5kIFdJTkRPV19VUERBVEUgbm93IHRvIGF2b2lkIDY1IEtCIHN0YXJ0LXdpbmRvdyBzdGFsbC5cbiAgICAgICAgICAgICAgICBpZiAoY29ubldpbiAmJiBjb25uV2luID4gZGVmYXVsdFdpbikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSDiiaUgMTQuMThcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uc2V0TG9jYWxXaW5kb3dTaXplKGNvbm5XaW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2xkZXIgTm9kZTogYnVtcCBieSB0aGUgZGVsdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gY29ubldpbiAtICgoX2EgPSBzZXNzaW9uLnN0YXRlLmxvY2FsV2luZG93U2l6ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdFdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uaW5jcmVtZW50V2luZG93U2l6ZShkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBzZWN1cmVDb25uZWN0UmVzdWx0LnNvY2tldC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbG9zZUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHNlY3VyZUNvbm5lY3RSZXN1bHQuc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9ySGFuZGxlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cDJUcmFuc3BvcnQoc2Vzc2lvbiwgYWRkcmVzcywgb3B0aW9ucywgcmVtb3RlTmFtZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlc3Npb24ub25jZSgnY2xvc2UnLCBjbG9zZUhhbmRsZXIpO1xuICAgICAgICAgICAgc2Vzc2lvbi5vbmNlKCdlcnJvcicsIGVycm9ySGFuZGxlcik7XG4gICAgICAgICAgICBzZWN1cmVDb25uZWN0UmVzdWx0LnNvY2tldC5vbmNlKCdjbG9zZScsIGNsb3NlSGFuZGxlcik7XG4gICAgICAgICAgICBzZWN1cmVDb25uZWN0UmVzdWx0LnNvY2tldC5vbmNlKCdlcnJvcicsIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0Y3BDb25uZWN0KGFkZHJlc3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuICgwLCBodHRwX3Byb3h5XzEuZ2V0UHJveGllZENvbm5lY3Rpb24pKGFkZHJlc3MsIG9wdGlvbnMpLnRoZW4ocHJveGllZFNvY2tldCA9PiB7XG4gICAgICAgICAgICBpZiAocHJveGllZFNvY2tldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm94aWVkU29ja2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xvc2VDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1NvY2tldCBjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ2FsbGJhY2sgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldC5jb25uZWN0KGFkZHJlc3MsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbG9zZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc29ja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC5vbmNlKCdjbG9zZScsIGNsb3NlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQub25jZSgnZXJyb3InLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGNvbm5lY3QoYWRkcmVzcywgc2VjdXJlQ29ubmVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2h1dGRvd24pIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0Y3BDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgbGV0IHNlY3VyZUNvbm5lY3RSZXN1bHQgPSBudWxsO1xuICAgICAgICBjb25zdCBhZGRyZXNzU3RyaW5nID0gKDAsIHN1YmNoYW5uZWxfYWRkcmVzc18xLnN1YmNoYW5uZWxBZGRyZXNzVG9TdHJpbmcpKGFkZHJlc3MpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy50cmFjZShhZGRyZXNzU3RyaW5nICsgJyBXYWl0aW5nIGZvciBzZWN1cmVDb25uZWN0b3IgdG8gYmUgcmVhZHknKTtcbiAgICAgICAgICAgIGF3YWl0IHNlY3VyZUNvbm5lY3Rvci53YWl0Rm9yUmVhZHkoKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2UoYWRkcmVzc1N0cmluZyArICcgc2VjdXJlQ29ubmVjdG9yIGlzIHJlYWR5Jyk7XG4gICAgICAgICAgICB0Y3BDb25uZWN0aW9uID0gYXdhaXQgdGhpcy50Y3BDb25uZWN0KGFkZHJlc3MsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGNwQ29ubmVjdGlvbi5zZXROb0RlbGF5KCk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKGFkZHJlc3NTdHJpbmcgKyAnIEVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uJyk7XG4gICAgICAgICAgICBzZWN1cmVDb25uZWN0UmVzdWx0ID0gYXdhaXQgc2VjdXJlQ29ubmVjdG9yLmNvbm5lY3QodGNwQ29ubmVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKGFkZHJlc3NTdHJpbmcgKyAnIEVzdGFibGlzaGVkIHNlY3VyZSBjb25uZWN0aW9uJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZXNzaW9uKHNlY3VyZUNvbm5lY3RSZXN1bHQsIGFkZHJlc3MsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0Y3BDb25uZWN0aW9uID09PSBudWxsIHx8IHRjcENvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRjcENvbm5lY3Rpb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgc2VjdXJlQ29ubmVjdFJlc3VsdCA9PT0gbnVsbCB8fCBzZWN1cmVDb25uZWN0UmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWN1cmVDb25uZWN0UmVzdWx0LnNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuaXNTaHV0ZG93biA9IHRydWU7XG4gICAgICAgIChfYSA9IHRoaXMuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbiA9IG51bGw7XG4gICAgfVxufVxuZXhwb3J0cy5IdHRwMlN1YmNoYW5uZWxDb25uZWN0b3IgPSBIdHRwMlN1YmNoYW5uZWxDb25uZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc3BvcnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdWJjaGFubmVsUG9vbCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0U3ViY2hhbm5lbFBvb2wgPSBnZXRTdWJjaGFubmVsUG9vbDtcbmNvbnN0IGNoYW5uZWxfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vY2hhbm5lbC1vcHRpb25zXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF8xID0gcmVxdWlyZShcIi4vc3ViY2hhbm5lbFwiKTtcbmNvbnN0IHN1YmNoYW5uZWxfYWRkcmVzc18xID0gcmVxdWlyZShcIi4vc3ViY2hhbm5lbC1hZGRyZXNzXCIpO1xuY29uc3QgdXJpX3BhcnNlcl8xID0gcmVxdWlyZShcIi4vdXJpLXBhcnNlclwiKTtcbmNvbnN0IHRyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vdHJhbnNwb3J0XCIpO1xuLy8gMTAgc2Vjb25kcyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgdmFsdWUgaXMgYXJiaXRyYXJ5LlxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gYmV0d2VlbiBjaGVja3MgZm9yIGRyb3BwaW5nIHN1YmNoYW5uZWxzIHRoYXQgaGF2ZSBub1xuICogb3RoZXIgcmVmZXJlbmNlc1xuICovXG5jb25zdCBSRUZfQ0hFQ0tfSU5URVJWQUwgPSAxMDAwMDtcbmNsYXNzIFN1YmNoYW5uZWxQb29sIHtcbiAgICAvKipcbiAgICAgKiBBIHBvb2wgb2Ygc3ViY2hhbm5lbHMgdXNlIGZvciBtYWtpbmcgY29ubmVjdGlvbnMuIFN1YmNoYW5uZWxzIHdpdGggdGhlXG4gICAgICogZXhhY3Qgc2FtZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV1c2VkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBvb2wgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSB0aW1lciBvZiBhIHRhc2sgcGVyZm9ybWluZyBhIHBlcmlvZGljIHN1YmNoYW5uZWwgY2xlYW51cC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xlYW51cFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5yZWZzIGFsbCB1bnVzZWQgc3ViY2hhbm5lbHMgYW5kIGNhbmNlbHMgdGhlIGNsZWFudXAgdGFzayBpZiBhbGxcbiAgICAgKiBzdWJjaGFubmVscyBoYXZlIGJlZW4gdW5yZWZlZC5cbiAgICAgKi9cbiAgICB1bnJlZlVudXNlZFN1YmNoYW5uZWxzKCkge1xuICAgICAgICBsZXQgYWxsU3ViY2hhbm5lbHNVbnJlZmVkID0gdHJ1ZTtcbiAgICAgICAgLyogVGhlc2Ugb2JqZWN0cyBhcmUgY3JlYXRlZCB3aXRoIE9iamVjdC5jcmVhdGUobnVsbCksIHNvIHRoZXkgZG8gbm90XG4gICAgICAgICAqIGhhdmUgYSBwcm90b3R5cGUsIHdoaWNoIG1lYW5zIHRoYXQgZm9yICguLi4gaW4gLi4uKSBsb29wcyBvdmVyIHRoZW1cbiAgICAgICAgICogZG8gbm90IG5lZWQgdG8gYmUgZmlsdGVyZWQgKi9cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICAgICAgZm9yIChjb25zdCBjaGFubmVsVGFyZ2V0IGluIHRoaXMucG9vbCkge1xuICAgICAgICAgICAgY29uc3Qgc3ViY2hhbm5lbE9iakFycmF5ID0gdGhpcy5wb29sW2NoYW5uZWxUYXJnZXRdO1xuICAgICAgICAgICAgY29uc3QgcmVmZWRTdWJjaGFubmVscyA9IHN1YmNoYW5uZWxPYmpBcnJheS5maWx0ZXIodmFsdWUgPT4gIXZhbHVlLnN1YmNoYW5uZWwudW5yZWZJZk9uZVJlZigpKTtcbiAgICAgICAgICAgIGlmIChyZWZlZFN1YmNoYW5uZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhbGxTdWJjaGFubmVsc1VucmVmZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIEZvciBlYWNoIHN1YmNoYW5uZWwgaW4gdGhlIHBvb2wsIHRyeSB0byB1bnJlZiBpdCBpZiBpdCBoYXNcbiAgICAgICAgICAgICAqIGV4YWN0bHkgb25lIHJlZiAod2hpY2ggaXMgdGhlIHJlZiBmcm9tIHRoZSBwb29sIGl0c2VsZikuIElmIHRoYXRcbiAgICAgICAgICAgICAqIGRvZXMgaGFwcGVuLCByZW1vdmUgdGhlIHN1YmNoYW5uZWwgZnJvbSB0aGUgcG9vbCAqL1xuICAgICAgICAgICAgdGhpcy5wb29sW2NoYW5uZWxUYXJnZXRdID0gcmVmZWRTdWJjaGFubmVscztcbiAgICAgICAgfVxuICAgICAgICAvKiBDdXJyZW50bHkgd2UgZG8gbm90IGRlbGV0ZSBrZXlzIHdpdGggZW1wdHkgdmFsdWVzLiBJZiB0aGF0IHJlc3VsdHNcbiAgICAgICAgICogaW4gc2lnbmlmaWNhbnQgbWVtb3J5IHVzYWdlIHdlIHNob3VsZCBjaGFuZ2UgaXQuICovXG4gICAgICAgIC8vIENhbmNlbCB0aGUgY2xlYW51cCB0YXNrIGlmIGFsbCBzdWJjaGFubmVscyBoYXZlIGJlZW4gdW5yZWZlZC5cbiAgICAgICAgaWYgKGFsbFN1YmNoYW5uZWxzVW5yZWZlZCAmJiB0aGlzLmNsZWFudXBUaW1lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5zdXJlcyB0aGF0IHRoZSBjbGVhbnVwIHRhc2sgaXMgc3Bhd25lZC5cbiAgICAgKi9cbiAgICBlbnN1cmVDbGVhbnVwVGFzaygpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cFRpbWVyID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVucmVmVW51c2VkU3ViY2hhbm5lbHMoKTtcbiAgICAgICAgICAgIH0sIFJFRl9DSEVDS19JTlRFUlZBTCk7XG4gICAgICAgICAgICAvLyBVbnJlZiBiZWNhdXNlIHRoaXMgdGltZXIgc2hvdWxkIG5vdCBrZWVwIHRoZSBldmVudCBsb29wIHJ1bm5pbmcuXG4gICAgICAgICAgICAvLyBDYWxsIHVucmVmIG9ubHkgaWYgaXQgZXhpc3RzIHRvIGFkZHJlc3MgZWxlY3Ryb24vZWxlY3Ryb24jMjExNjJcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY2xlYW51cFRpbWVyKS51bnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHN1YmNoYW5uZWwgaWYgb25lIGFscmVhZHkgZXhpc3RzIHdpdGggZXhhY3RseSBtYXRjaGluZyBwYXJhbWV0ZXJzLlxuICAgICAqIE90aGVyd2lzZSwgY3JlYXRlIGFuZCBzYXZlIGEgc3ViY2hhbm5lbCB3aXRoIHRob3NlIHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIGNoYW5uZWxUYXJnZXRcbiAgICAgKiBAcGFyYW0gc3ViY2hhbm5lbFRhcmdldFxuICAgICAqIEBwYXJhbSBjaGFubmVsQXJndW1lbnRzXG4gICAgICogQHBhcmFtIGNoYW5uZWxDcmVkZW50aWFsc1xuICAgICAqL1xuICAgIGdldE9yQ3JlYXRlU3ViY2hhbm5lbChjaGFubmVsVGFyZ2V0VXJpLCBzdWJjaGFubmVsVGFyZ2V0LCBjaGFubmVsQXJndW1lbnRzLCBjaGFubmVsQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVDbGVhbnVwVGFzaygpO1xuICAgICAgICBjb25zdCBjaGFubmVsVGFyZ2V0ID0gKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykoY2hhbm5lbFRhcmdldFVyaSk7XG4gICAgICAgIGlmIChjaGFubmVsVGFyZ2V0IGluIHRoaXMucG9vbCkge1xuICAgICAgICAgICAgY29uc3Qgc3ViY2hhbm5lbE9iakFycmF5ID0gdGhpcy5wb29sW2NoYW5uZWxUYXJnZXRdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJjaGFubmVsT2JqIG9mIHN1YmNoYW5uZWxPYmpBcnJheSkge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuc3ViY2hhbm5lbEFkZHJlc3NFcXVhbCkoc3ViY2hhbm5lbFRhcmdldCwgc3ViY2hhbm5lbE9iai5zdWJjaGFubmVsQWRkcmVzcykgJiZcbiAgICAgICAgICAgICAgICAgICAgKDAsIGNoYW5uZWxfb3B0aW9uc18xLmNoYW5uZWxPcHRpb25zRXF1YWwpKGNoYW5uZWxBcmd1bWVudHMsIHN1YmNoYW5uZWxPYmouY2hhbm5lbEFyZ3VtZW50cykgJiZcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENyZWRlbnRpYWxzLl9lcXVhbHMoc3ViY2hhbm5lbE9iai5jaGFubmVsQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJjaGFubmVsT2JqLnN1YmNoYW5uZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCBubyBtYXRjaGluZyBzdWJjaGFubmVsIHdhcyBmb3VuZFxuICAgICAgICBjb25zdCBzdWJjaGFubmVsID0gbmV3IHN1YmNoYW5uZWxfMS5TdWJjaGFubmVsKGNoYW5uZWxUYXJnZXRVcmksIHN1YmNoYW5uZWxUYXJnZXQsIGNoYW5uZWxBcmd1bWVudHMsIGNoYW5uZWxDcmVkZW50aWFscywgbmV3IHRyYW5zcG9ydF8xLkh0dHAyU3ViY2hhbm5lbENvbm5lY3RvcihjaGFubmVsVGFyZ2V0VXJpKSk7XG4gICAgICAgIGlmICghKGNoYW5uZWxUYXJnZXQgaW4gdGhpcy5wb29sKSkge1xuICAgICAgICAgICAgdGhpcy5wb29sW2NoYW5uZWxUYXJnZXRdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb29sW2NoYW5uZWxUYXJnZXRdLnB1c2goe1xuICAgICAgICAgICAgc3ViY2hhbm5lbEFkZHJlc3M6IHN1YmNoYW5uZWxUYXJnZXQsXG4gICAgICAgICAgICBjaGFubmVsQXJndW1lbnRzLFxuICAgICAgICAgICAgY2hhbm5lbENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgc3ViY2hhbm5lbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHN1YmNoYW5uZWwucmVmKCk7XG4gICAgICAgIHJldHVybiBzdWJjaGFubmVsO1xuICAgIH1cbn1cbmV4cG9ydHMuU3ViY2hhbm5lbFBvb2wgPSBTdWJjaGFubmVsUG9vbDtcbmNvbnN0IGdsb2JhbFN1YmNoYW5uZWxQb29sID0gbmV3IFN1YmNoYW5uZWxQb29sKCk7XG4vKipcbiAqIEdldCBlaXRoZXIgdGhlIGdsb2JhbCBzdWJjaGFubmVsIHBvb2wsIG9yIGEgbmV3IHN1YmNoYW5uZWwgcG9vbC5cbiAqIEBwYXJhbSBnbG9iYWxcbiAqL1xuZnVuY3Rpb24gZ2V0U3ViY2hhbm5lbFBvb2woZ2xvYmFsKSB7XG4gICAgaWYgKGdsb2JhbCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsU3ViY2hhbm5lbFBvb2w7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFN1YmNoYW5uZWxQb29sKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3ViY2hhbm5lbC1wb29sLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjIgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9hZEJhbGFuY2luZ0NhbGwgPSB2b2lkIDA7XG5jb25zdCBjb25uZWN0aXZpdHlfc3RhdGVfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eS1zdGF0ZVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZGVhZGxpbmVfMSA9IHJlcXVpcmUoXCIuL2RlYWRsaW5lXCIpO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgcGlja2VyXzEgPSByZXF1aXJlKFwiLi9waWNrZXJcIik7XG5jb25zdCB1cmlfcGFyc2VyXzEgPSByZXF1aXJlKFwiLi91cmktcGFyc2VyXCIpO1xuY29uc3QgbG9nZ2luZyA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCBjb250cm9sX3BsYW5lX3N0YXR1c18xID0gcmVxdWlyZShcIi4vY29udHJvbC1wbGFuZS1zdGF0dXNcIik7XG5jb25zdCBodHRwMiA9IHJlcXVpcmUoXCJodHRwMlwiKTtcbmNvbnN0IFRSQUNFUl9OQU1FID0gJ2xvYWRfYmFsYW5jaW5nX2NhbGwnO1xuY2xhc3MgTG9hZEJhbGFuY2luZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWwsIGNhbGxDb25maWcsIG1ldGhvZE5hbWUsIGhvc3QsIGNyZWRlbnRpYWxzLCBkZWFkbGluZSwgY2FsbE51bWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgICAgICB0aGlzLmNhbGxDb25maWcgPSBjYWxsQ29uZmlnO1xuICAgICAgICB0aGlzLm1ldGhvZE5hbWUgPSBtZXRob2ROYW1lO1xuICAgICAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG4gICAgICAgIHRoaXMuZGVhZGxpbmUgPSBkZWFkbGluZTtcbiAgICAgICAgdGhpcy5jYWxsTnVtYmVyID0gY2FsbE51bWJlcjtcbiAgICAgICAgdGhpcy5jaGlsZCA9IG51bGw7XG4gICAgICAgIHRoaXMucmVhZFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIHRoaXMucGVuZGluZ0hhbGZDbG9zZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbkNhbGxFbmRlZCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRTdGFydFRpbWUgPSBudWxsO1xuICAgICAgICBjb25zdCBzcGxpdFBhdGggPSB0aGlzLm1ldGhvZE5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgbGV0IHNlcnZpY2VOYW1lID0gJyc7XG4gICAgICAgIC8qIFRoZSBzdGFuZGFyZCBwYXRoIGZvcm1hdCBpcyBcIi97c2VydmljZU5hbWV9L3ttZXRob2ROYW1lfVwiLCBzbyBpZiB3ZSBzcGxpdFxuICAgICAgICAgKiBieSAnLycsIHRoZSBmaXJzdCBpdGVtIHNob3VsZCBiZSBlbXB0eSBhbmQgdGhlIHNlY29uZCBzaG91bGQgYmUgdGhlXG4gICAgICAgICAqIHNlcnZpY2UgbmFtZSAqL1xuICAgICAgICBpZiAoc3BsaXRQYXRoLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBzZXJ2aWNlTmFtZSA9IHNwbGl0UGF0aFsxXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob3N0bmFtZSA9IChfYiA9IChfYSA9ICgwLCB1cmlfcGFyc2VyXzEuc3BsaXRIb3N0UG9ydCkodGhpcy5ob3N0KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhvc3QpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICdsb2NhbGhvc3QnO1xuICAgICAgICAvKiBDdXJyZW50bHksIGNhbGwgY3JlZGVudGlhbHMgYXJlIG9ubHkgYWxsb3dlZCBvbiBIVFRQUyBjb25uZWN0aW9ucywgc28gd2VcbiAgICAgICAgICogY2FuIGFzc3VtZSB0aGF0IHRoZSBzY2hlbWUgaXMgXCJodHRwc1wiICovXG4gICAgICAgIHRoaXMuc2VydmljZVVybCA9IGBodHRwczovLyR7aG9zdG5hbWV9LyR7c2VydmljZU5hbWV9YDtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBnZXREZWFkbGluZUluZm8oKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IGRlYWRsaW5lSW5mbyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jaGlsZFN0YXJ0VGltZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRTdGFydFRpbWUgPiB0aGlzLnN0YXJ0VGltZSkge1xuICAgICAgICAgICAgICAgIGlmICgoX2EgPSB0aGlzLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0T3B0aW9ucygpLndhaXRGb3JSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICBkZWFkbGluZUluZm8ucHVzaCgnd2FpdF9mb3JfcmVhZHknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVhZGxpbmVJbmZvLnB1c2goYExCIHBpY2s6ICR7KDAsIGRlYWRsaW5lXzEuZm9ybWF0RGF0ZURpZmZlcmVuY2UpKHRoaXMuc3RhcnRUaW1lLCB0aGlzLmNoaWxkU3RhcnRUaW1lKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlYWRsaW5lSW5mby5wdXNoKC4uLnRoaXMuY2hpbGQuZ2V0RGVhZGxpbmVJbmZvKCkpO1xuICAgICAgICAgICAgcmV0dXJuIGRlYWRsaW5lSW5mbztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoX2IgPSB0aGlzLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0T3B0aW9ucygpLndhaXRGb3JSZWFkeSkge1xuICAgICAgICAgICAgICAgIGRlYWRsaW5lSW5mby5wdXNoKCd3YWl0X2Zvcl9yZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVhZGxpbmVJbmZvLnB1c2goJ1dhaXRpbmcgZm9yIExCIHBpY2snKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVhZGxpbmVJbmZvO1xuICAgIH1cbiAgICB0cmFjZSh0ZXh0KSB7XG4gICAgICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCBUUkFDRVJfTkFNRSwgJ1snICsgdGhpcy5jYWxsTnVtYmVyICsgJ10gJyArIHRleHQpO1xuICAgIH1cbiAgICBvdXRwdXRTdGF0dXMoc3RhdHVzLCBwcm9ncmVzcykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoIXRoaXMuZW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy50cmFjZSgnZW5kZWQgd2l0aCBzdGF0dXM6IGNvZGU9JyArXG4gICAgICAgICAgICAgICAgc3RhdHVzLmNvZGUgK1xuICAgICAgICAgICAgICAgICcgZGV0YWlscz1cIicgK1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kZXRhaWxzICtcbiAgICAgICAgICAgICAgICAnXCIgc3RhcnQgdGltZT0nICtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZS50b0lTT1N0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdGF0dXMpLCB7IHByb2dyZXNzIH0pO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5saXN0ZW5lcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uUmVjZWl2ZVN0YXR1cyhmaW5hbFN0YXR1cyk7XG4gICAgICAgICAgICAoX2IgPSB0aGlzLm9uQ2FsbEVuZGVkKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0aGlzLCBmaW5hbFN0YXR1cy5jb2RlLCBmaW5hbFN0YXR1cy5kZXRhaWxzLCBmaW5hbFN0YXR1cy5tZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZG9QaWNrKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcy5lbmRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb1BpY2sgY2FsbGVkIGJlZm9yZSBzdGFydCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2UoJ1BpY2sgY2FsbGVkJyk7XG4gICAgICAgIGNvbnN0IGZpbmFsTWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhLmNsb25lKCk7XG4gICAgICAgIGNvbnN0IHBpY2tSZXN1bHQgPSB0aGlzLmNoYW5uZWwuZG9QaWNrKGZpbmFsTWV0YWRhdGEsIHRoaXMuY2FsbENvbmZpZy5waWNrSW5mb3JtYXRpb24pO1xuICAgICAgICBjb25zdCBzdWJjaGFubmVsU3RyaW5nID0gcGlja1Jlc3VsdC5zdWJjaGFubmVsXG4gICAgICAgICAgICA/ICcoJyArXG4gICAgICAgICAgICAgICAgcGlja1Jlc3VsdC5zdWJjaGFubmVsLmdldENoYW5uZWx6UmVmKCkuaWQgK1xuICAgICAgICAgICAgICAgICcpICcgK1xuICAgICAgICAgICAgICAgIHBpY2tSZXN1bHQuc3ViY2hhbm5lbC5nZXRBZGRyZXNzKClcbiAgICAgICAgICAgIDogJycgKyBwaWNrUmVzdWx0LnN1YmNoYW5uZWw7XG4gICAgICAgIHRoaXMudHJhY2UoJ1BpY2sgcmVzdWx0OiAnICtcbiAgICAgICAgICAgIHBpY2tlcl8xLlBpY2tSZXN1bHRUeXBlW3BpY2tSZXN1bHQucGlja1Jlc3VsdFR5cGVdICtcbiAgICAgICAgICAgICcgc3ViY2hhbm5lbDogJyArXG4gICAgICAgICAgICBzdWJjaGFubmVsU3RyaW5nICtcbiAgICAgICAgICAgICcgc3RhdHVzOiAnICtcbiAgICAgICAgICAgICgoX2EgPSBwaWNrUmVzdWx0LnN0YXR1cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvZGUpICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAoKF9iID0gcGlja1Jlc3VsdC5zdGF0dXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kZXRhaWxzKSk7XG4gICAgICAgIHN3aXRjaCAocGlja1Jlc3VsdC5waWNrUmVzdWx0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBwaWNrZXJfMS5QaWNrUmVzdWx0VHlwZS5DT01QTEVURTpcbiAgICAgICAgICAgICAgICBjb25zdCBjb21iaW5lZENhbGxDcmVkZW50aWFscyA9IHRoaXMuY3JlZGVudGlhbHMuY29tcG9zZShwaWNrUmVzdWx0LnN1YmNoYW5uZWwuZ2V0Q2FsbENyZWRlbnRpYWxzKCkpO1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkQ2FsbENyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgICAgIC5nZW5lcmF0ZU1ldGFkYXRhKHsgbWV0aG9kX25hbWU6IHRoaXMubWV0aG9kTmFtZSwgc2VydmljZV91cmw6IHRoaXMuc2VydmljZVVybCB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihjcmVkc01ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGNhbGwgd2FzIGNhbmNlbGxlZCAoZS5nLiBieSB0aGUgZGVhZGxpbmUpIGJlZm9yZVxuICAgICAgICAgICAgICAgICAgICAgKiBtZXRhZGF0YSBnZW5lcmF0aW9uIGZpbmlzaGVkLCB3ZSBzaG91bGRuJ3QgZG8gYW55dGhpbmcgd2l0aFxuICAgICAgICAgICAgICAgICAgICAgKiBpdC4gKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0NyZWRlbnRpYWxzIG1ldGFkYXRhIGdlbmVyYXRpb24gZmluaXNoZWQgYWZ0ZXIgY2FsbCBlbmRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsTWV0YWRhdGEubWVyZ2UoY3JlZHNNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbE1ldGFkYXRhLmdldCgnYXV0aG9yaXphdGlvbicpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogJ1wiYXV0aG9yaXphdGlvblwiIG1ldGFkYXRhIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZhbHVlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAnUFJPQ0VTU0VEJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQuc3ViY2hhbm5lbC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1BpY2tlZCBzdWJjaGFubmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmNoYW5uZWxTdHJpbmcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaGFzIHN0YXRlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW3BpY2tSZXN1bHQuc3ViY2hhbm5lbC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpXSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBhZnRlciBnZXR0aW5nIGNyZWRlbnRpYWxzIG1ldGFkYXRhLiBSZXRyeWluZyBwaWNrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvUGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYWRsaW5lICE9PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxNZXRhZGF0YS5zZXQoJ2dycGMtdGltZW91dCcsICgwLCBkZWFkbGluZV8xLmdldERlYWRsaW5lVGltZW91dFN0cmluZykodGhpcy5kZWFkbGluZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkID0gcGlja1Jlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJjaGFubmVsLmdldFJlYWxTdWJjaGFubmVsKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlQ2FsbChmaW5hbE1ldGFkYXRhLCB0aGlzLmhvc3QsIHRoaXMubWV0aG9kTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiBtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1JlY2VpdmVkIG1ldGFkYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZWNlaXZlTWVzc2FnZTogbWVzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1JlY2VpdmVkIG1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZWNlaXZlU3RhdHVzOiBzdGF0dXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdSZWNlaXZlZCBzdGF0dXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5yc3RDb2RlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDIuY29uc3RhbnRzLk5HSFRUUDJfUkVGVVNFRF9TVFJFQU0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RhdHVzKHN0YXR1cywgJ1JFRlVTRUQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RhdHVzKHN0YXR1cywgJ1BST0NFU1NFRCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZFN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdGYWlsZWQgdG8gc3RhcnQgY2FsbCBvbiBwaWNrZWQgc3ViY2hhbm5lbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjaGFubmVsU3RyaW5nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHdpdGggZXJyb3IgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLklOVEVSTkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6ICdGYWlsZWQgdG8gc3RhcnQgSFRUUC8yIHN0cmVhbSB3aXRoIGVycm9yICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgJ05PVF9TVEFSVEVEJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKF9hID0gcGlja1Jlc3VsdC5vbkNhbGxTdGFydGVkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChwaWNrUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNhbGxFbmRlZCA9IHBpY2tSZXN1bHQub25DYWxsRW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0NyZWF0ZWQgY2hpbGQgY2FsbCBbJyArIHRoaXMuY2hpbGQuZ2V0Q2FsbE51bWJlcigpICsgJ10nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZFBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGQuc3RhcnRSZWFkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGQuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dCh0aGlzLnBlbmRpbmdNZXNzYWdlLmNvbnRleHQsIHRoaXMucGVuZGluZ01lc3NhZ2UubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0hhbGZDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZC5oYWxmQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhlIGVycm9yIGNvZGUgaXNuJ3QgMCAoU3RhdHVzLk9LKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRldGFpbHMgfSA9ICgwLCBjb250cm9sX3BsYW5lX3N0YXR1c18xLnJlc3RyaWN0Q29udHJvbFBsYW5lU3RhdHVzQ29kZSkodHlwZW9mIGVycm9yLmNvZGUgPT09ICdudW1iZXInID8gZXJyb3IuY29kZSA6IGNvbnN0YW50c18xLlN0YXR1cy5VTktOT1dOLCBgR2V0dGluZyBtZXRhZGF0YSBmcm9tIHBsdWdpbiBmYWlsZWQgd2l0aCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogZGV0YWlscyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICB9LCAnUFJPQ0VTU0VEJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHBpY2tlcl8xLlBpY2tSZXN1bHRUeXBlLkRST1A6XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkZXRhaWxzIH0gPSAoMCwgY29udHJvbF9wbGFuZV9zdGF0dXNfMS5yZXN0cmljdENvbnRyb2xQbGFuZVN0YXR1c0NvZGUpKHBpY2tSZXN1bHQuc3RhdHVzLmNvZGUsIHBpY2tSZXN1bHQuc3RhdHVzLmRldGFpbHMpO1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0U3RhdHVzKHsgY29kZSwgZGV0YWlscywgbWV0YWRhdGE6IHBpY2tSZXN1bHQuc3RhdHVzLm1ldGFkYXRhIH0sICdEUk9QJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHBpY2tlcl8xLlBpY2tSZXN1bHRUeXBlLlRSQU5TSUVOVF9GQUlMVVJFOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLmdldE9wdGlvbnMoKS53YWl0Rm9yUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsLnF1ZXVlQ2FsbEZvclBpY2sodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRldGFpbHMgfSA9ICgwLCBjb250cm9sX3BsYW5lX3N0YXR1c18xLnJlc3RyaWN0Q29udHJvbFBsYW5lU3RhdHVzQ29kZSkocGlja1Jlc3VsdC5zdGF0dXMuY29kZSwgcGlja1Jlc3VsdC5zdGF0dXMuZGV0YWlscyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyh7IGNvZGUsIGRldGFpbHMsIG1ldGFkYXRhOiBwaWNrUmVzdWx0LnN0YXR1cy5tZXRhZGF0YSB9LCAnUFJPQ0VTU0VEJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgcGlja2VyXzEuUGlja1Jlc3VsdFR5cGUuUVVFVUU6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsLnF1ZXVlQ2FsbEZvclBpY2sodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FuY2VsV2l0aFN0YXR1cyhzdGF0dXMsIGRldGFpbHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLnRyYWNlKCdjYW5jZWxXaXRoU3RhdHVzIGNvZGU6ICcgKyBzdGF0dXMgKyAnIGRldGFpbHM6IFwiJyArIGRldGFpbHMgKyAnXCInKTtcbiAgICAgICAgKF9hID0gdGhpcy5jaGlsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLCBkZXRhaWxzKTtcbiAgICAgICAgdGhpcy5vdXRwdXRTdGF0dXMoeyBjb2RlOiBzdGF0dXMsIGRldGFpbHM6IGRldGFpbHMsIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpIH0sICdQUk9DRVNTRUQnKTtcbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY2hpbGQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRQZWVyKCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRoaXMuY2hhbm5lbC5nZXRUYXJnZXQoKTtcbiAgICB9XG4gICAgc3RhcnQobWV0YWRhdGEsIGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3N0YXJ0IGNhbGxlZCcpO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy5kb1BpY2soKTtcbiAgICB9XG4gICAgc2VuZE1lc3NhZ2VXaXRoQ29udGV4dChjb250ZXh0LCBtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3dyaXRlKCkgY2FsbGVkIHdpdGggbWVzc2FnZSBvZiBsZW5ndGggJyArIG1lc3NhZ2UubGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGQuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dChjb250ZXh0LCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ01lc3NhZ2UgPSB7IGNvbnRleHQsIG1lc3NhZ2UgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydFJlYWQoKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3N0YXJ0UmVhZCBjYWxsZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGQuc3RhcnRSZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYWxmQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ2hhbGZDbG9zZSBjYWxsZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGQuaGFsZkNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdIYWxmQ2xvc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgZ2V0Q2FsbE51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE51bWJlcjtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZC5nZXRBdXRoQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkxvYWRCYWxhbmNpbmdDYWxsID0gTG9hZEJhbGFuY2luZ0NhbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2FkLWJhbGFuY2luZy1jYWxsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjIgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVzb2x2aW5nQ2FsbCA9IHZvaWQgMDtcbmNvbnN0IGNhbGxfY3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL2NhbGwtY3JlZGVudGlhbHNcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGRlYWRsaW5lXzEgPSByZXF1aXJlKFwiLi9kZWFkbGluZVwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGxvZ2dpbmcgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3QgY29udHJvbF9wbGFuZV9zdGF0dXNfMSA9IHJlcXVpcmUoXCIuL2NvbnRyb2wtcGxhbmUtc3RhdHVzXCIpO1xuY29uc3QgVFJBQ0VSX05BTUUgPSAncmVzb2x2aW5nX2NhbGwnO1xuY2xhc3MgUmVzb2x2aW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IoY2hhbm5lbCwgbWV0aG9kLCBvcHRpb25zLCBmaWx0ZXJTdGFja0ZhY3RvcnksIGNhbGxOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2tGYWN0b3J5ID0gZmlsdGVyU3RhY2tGYWN0b3J5O1xuICAgICAgICB0aGlzLmNhbGxOdW1iZXIgPSBjYWxsTnVtYmVyO1xuICAgICAgICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWFkUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nSGFsZkNsb3NlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWFkRmlsdGVyUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLndyaXRlRmlsdGVyUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBlbmRpbmdDaGlsZFN0YXR1cyA9IG51bGw7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0dXNXYXRjaGVycyA9IFtdO1xuICAgICAgICB0aGlzLmRlYWRsaW5lVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgfSwgMCk7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sgPSBudWxsO1xuICAgICAgICB0aGlzLmRlYWRsaW5lU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb25maWdSZWNlaXZlZFRpbWUgPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWRlbnRpYWxzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3BlY2lmaWMgY2FsbC4gRG9lcyBub3QgaW5jbHVkZVxuICAgICAgICAgKiBjYWxsIGNyZWRlbnRpYWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhbm5lbCBjcmVkZW50aWFscyB1c2VkIHRvIGNyZWF0ZVxuICAgICAgICAgKiB0aGUgY2hhbm5lbC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjYWxsX2NyZWRlbnRpYWxzXzEuQ2FsbENyZWRlbnRpYWxzLmNyZWF0ZUVtcHR5KCk7XG4gICAgICAgIHRoaXMuZGVhZGxpbmUgPSBvcHRpb25zLmRlYWRsaW5lO1xuICAgICAgICB0aGlzLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gICAgICAgIGlmIChvcHRpb25zLnBhcmVudENhbGwpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZsYWdzICYgY29uc3RhbnRzXzEuUHJvcGFnYXRlLkNBTkNFTExBVElPTikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyZW50Q2FsbC5vbignY2FuY2VsbGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFdpdGhTdGF0dXMoY29uc3RhbnRzXzEuU3RhdHVzLkNBTkNFTExFRCwgJ0NhbmNlbGxlZCBieSBwYXJlbnQgY2FsbCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmxhZ3MgJiBjb25zdGFudHNfMS5Qcm9wYWdhdGUuREVBRExJTkUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdQcm9wYWdhdGluZyBkZWFkbGluZSBmcm9tIHBhcmVudDogJyArXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyZW50Q2FsbC5nZXREZWFkbGluZSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWRsaW5lID0gKDAsIGRlYWRsaW5lXzEubWluRGVhZGxpbmUpKHRoaXMuZGVhZGxpbmUsIG9wdGlvbnMucGFyZW50Q2FsbC5nZXREZWFkbGluZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYWNlKCdDcmVhdGVkJyk7XG4gICAgICAgIHRoaXMucnVuRGVhZGxpbmVUaW1lcigpO1xuICAgIH1cbiAgICB0cmFjZSh0ZXh0KSB7XG4gICAgICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCBUUkFDRVJfTkFNRSwgJ1snICsgdGhpcy5jYWxsTnVtYmVyICsgJ10gJyArIHRleHQpO1xuICAgIH1cbiAgICBydW5EZWFkbGluZVRpbWVyKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWFkbGluZVRpbWVyKTtcbiAgICAgICAgdGhpcy5kZWFkbGluZVN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMudHJhY2UoJ0RlYWRsaW5lOiAnICsgKDAsIGRlYWRsaW5lXzEuZGVhZGxpbmVUb1N0cmluZykodGhpcy5kZWFkbGluZSkpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gKDAsIGRlYWRsaW5lXzEuZ2V0UmVsYXRpdmVUaW1lb3V0KSh0aGlzLmRlYWRsaW5lKTtcbiAgICAgICAgaWYgKHRpbWVvdXQgIT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKCdEZWFkbGluZSB3aWxsIGJlIHJlYWNoZWQgaW4gJyArIHRpbWVvdXQgKyAnbXMnKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlYWRsaW5lID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZWFkbGluZVN0YXJ0VGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFdpdGhTdGF0dXMoY29uc3RhbnRzXzEuU3RhdHVzLkRFQURMSU5FX0VYQ0VFREVELCAnRGVhZGxpbmUgZXhjZWVkZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZWFkbGluZUluZm8gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWFkbGluZUVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRlYWRsaW5lSW5mby5wdXNoKGBEZWFkbGluZSBleGNlZWRlZCBhZnRlciAkeygwLCBkZWFkbGluZV8xLmZvcm1hdERhdGVEaWZmZXJlbmNlKSh0aGlzLmRlYWRsaW5lU3RhcnRUaW1lLCBkZWFkbGluZUVuZFRpbWUpfWApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1JlY2VpdmVkVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWdSZWNlaXZlZFRpbWUgPiB0aGlzLmRlYWRsaW5lU3RhcnRUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZUluZm8ucHVzaChgbmFtZSByZXNvbHV0aW9uOiAkeygwLCBkZWFkbGluZV8xLmZvcm1hdERhdGVEaWZmZXJlbmNlKSh0aGlzLmRlYWRsaW5lU3RhcnRUaW1lLCB0aGlzLmNvbmZpZ1JlY2VpdmVkVGltZSl9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRTdGFydFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkU3RhcnRUaW1lID4gdGhpcy5jb25maWdSZWNlaXZlZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZUluZm8ucHVzaChgbWV0YWRhdGEgZmlsdGVyczogJHsoMCwgZGVhZGxpbmVfMS5mb3JtYXREYXRlRGlmZmVyZW5jZSkodGhpcy5jb25maWdSZWNlaXZlZFRpbWUsIHRoaXMuY2hpbGRTdGFydFRpbWUpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmVJbmZvLnB1c2goJ3dhaXRpbmcgZm9yIG1ldGFkYXRhIGZpbHRlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmVJbmZvLnB1c2goJ3dhaXRpbmcgZm9yIG5hbWUgcmVzb2x1dGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBkZWFkbGluZUluZm8ucHVzaCguLi50aGlzLmNoaWxkLmdldERlYWRsaW5lSW5mbygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxXaXRoU3RhdHVzKGNvbnN0YW50c18xLlN0YXR1cy5ERUFETElORV9FWENFRURFRCwgZGVhZGxpbmVJbmZvLmpvaW4oJywnKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soaGFuZGxlRGVhZGxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFkbGluZVRpbWVyID0gc2V0VGltZW91dChoYW5kbGVEZWFkbGluZSwgdGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3V0cHV0U3RhdHVzKHN0YXR1cykge1xuICAgICAgICBpZiAoIXRoaXMuZW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlclN0YWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTdGFjayA9IHRoaXMuZmlsdGVyU3RhY2tGYWN0b3J5LmNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVhZGxpbmVUaW1lcik7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN0YXR1cyA9IHRoaXMuZmlsdGVyU3RhY2sucmVjZWl2ZVRyYWlsZXJzKHN0YXR1cyk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlKCdlbmRlZCB3aXRoIHN0YXR1czogY29kZT0nICtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFN0YXR1cy5jb2RlICtcbiAgICAgICAgICAgICAgICAnIGRldGFpbHM9XCInICtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFN0YXR1cy5kZXRhaWxzICtcbiAgICAgICAgICAgICAgICAnXCInKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzV2F0Y2hlcnMuZm9yRWFjaCh3YXRjaGVyID0+IHdhdGNoZXIoZmlsdGVyZWRTdGF0dXMpKTtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLmxpc3RlbmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25SZWNlaXZlU3RhdHVzKGZpbHRlcmVkU3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbmRNZXNzYWdlT25DaGlsZChjb250ZXh0LCBtZXNzYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZW5kTWVzc2FnZW9uQ2hpbGQgY2FsbGVkIHdpdGggY2hpbGQgbm90IHBvcHVsYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZDtcbiAgICAgICAgdGhpcy53cml0ZUZpbHRlclBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnNlbmRNZXNzYWdlKFByb21pc2UucmVzb2x2ZSh7IG1lc3NhZ2U6IG1lc3NhZ2UsIGZsYWdzOiBjb250ZXh0LmZsYWdzIH0pKS50aGVuKGZpbHRlcmVkTWVzc2FnZSA9PiB7XG4gICAgICAgICAgICB0aGlzLndyaXRlRmlsdGVyUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgY2hpbGQuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dChjb250ZXh0LCBmaWx0ZXJlZE1lc3NhZ2UubWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nSGFsZkNsb3NlKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQuaGFsZkNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsV2l0aFN0YXR1cyhzdGF0dXMuY29kZSwgc3RhdHVzLmRldGFpbHMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Q29uZmlnKCkge1xuICAgICAgICBpZiAodGhpcy5lbmRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YSB8fCAhdGhpcy5saXN0ZW5lcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRDb25maWcgY2FsbGVkIGJlZm9yZSBzdGFydCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IHRoaXMuY2hhbm5lbC5nZXRDb25maWcodGhpcy5tZXRob2QsIHRoaXMubWV0YWRhdGEpO1xuICAgICAgICBpZiAoY29uZmlnUmVzdWx0LnR5cGUgPT09ICdOT05FJykge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsLnF1ZXVlQ2FsbEZvckNvbmZpZyh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWdSZXN1bHQudHlwZSA9PT0gJ0VSUk9SJykge1xuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEuZ2V0T3B0aW9ucygpLndhaXRGb3JSZWFkeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbC5xdWV1ZUNhbGxGb3JDb25maWcodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyhjb25maWdSZXN1bHQuZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbmZpZ1Jlc3VsdC50eXBlID09PSAnU1VDQ0VTUydcbiAgICAgICAgdGhpcy5jb25maWdSZWNlaXZlZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjb25maWdSZXN1bHQuY29uZmlnO1xuICAgICAgICBpZiAoY29uZmlnLnN0YXR1cyAhPT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRldGFpbHMgfSA9ICgwLCBjb250cm9sX3BsYW5lX3N0YXR1c18xLnJlc3RyaWN0Q29udHJvbFBsYW5lU3RhdHVzQ29kZSkoY29uZmlnLnN0YXR1cywgJ0ZhaWxlZCB0byByb3V0ZSBjYWxsIHRvIG1ldGhvZCAnICsgdGhpcy5tZXRob2QpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvZGUsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogZGV0YWlscyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcubWV0aG9kQ29uZmlnLnRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0RlYWRsaW5lID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbmZpZ0RlYWRsaW5lLnNldFNlY29uZHMoY29uZmlnRGVhZGxpbmUuZ2V0U2Vjb25kcygpICsgY29uZmlnLm1ldGhvZENvbmZpZy50aW1lb3V0LnNlY29uZHMpO1xuICAgICAgICAgICAgY29uZmlnRGVhZGxpbmUuc2V0TWlsbGlzZWNvbmRzKGNvbmZpZ0RlYWRsaW5lLmdldE1pbGxpc2Vjb25kcygpICtcbiAgICAgICAgICAgICAgICBjb25maWcubWV0aG9kQ29uZmlnLnRpbWVvdXQubmFub3MgLyAxMDAwMDAwKTtcbiAgICAgICAgICAgIHRoaXMuZGVhZGxpbmUgPSAoMCwgZGVhZGxpbmVfMS5taW5EZWFkbGluZSkodGhpcy5kZWFkbGluZSwgY29uZmlnRGVhZGxpbmUpO1xuICAgICAgICAgICAgdGhpcy5ydW5EZWFkbGluZVRpbWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJTdGFja0ZhY3RvcnkucHVzaChjb25maWcuZHluYW1pY0ZpbHRlckZhY3Rvcmllcyk7XG4gICAgICAgIHRoaXMuZmlsdGVyU3RhY2sgPSB0aGlzLmZpbHRlclN0YWNrRmFjdG9yeS5jcmVhdGVGaWx0ZXIoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJTdGFjay5zZW5kTWV0YWRhdGEoUHJvbWlzZS5yZXNvbHZlKHRoaXMubWV0YWRhdGEpKS50aGVuKGZpbHRlcmVkTWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGlsZCA9IHRoaXMuY2hhbm5lbC5jcmVhdGVSZXRyeWluZ0NhbGwoY29uZmlnLCB0aGlzLm1ldGhvZCwgdGhpcy5ob3N0LCB0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLmRlYWRsaW5lKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2UoJ0NyZWF0ZWQgY2hpbGQgWycgKyB0aGlzLmNoaWxkLmdldENhbGxOdW1iZXIoKSArICddJyk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkU3RhcnRUaW1lID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGQuc3RhcnQoZmlsdGVyZWRNZXRhZGF0YSwge1xuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiBtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1JlY2VpdmVkIG1ldGFkYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlTWV0YWRhdGEodGhpcy5maWx0ZXJTdGFjay5yZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2U6IG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdSZWNlaXZlZCBtZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEZpbHRlclBlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclN0YWNrLnJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpLnRoZW4oZmlsdGVyZWRNZXNzc2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdGaW5pc2hlZCBmaWx0ZXJpbmcgcmVjZWl2ZWQgbWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkRmlsdGVyUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKGZpbHRlcmVkTWVzc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NoaWxkU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRTdGF0dXModGhpcy5wZW5kaW5nQ2hpbGRTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLmNvZGUsIHN0YXR1cy5kZXRhaWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblJlY2VpdmVTdGF0dXM6IHN0YXR1cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1JlY2VpdmVkIHN0YXR1cycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkRmlsdGVyUGVuZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2hpbGRTdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZFBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLnN0YXJ0UmVhZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT25DaGlsZCh0aGlzLnBlbmRpbmdNZXNzYWdlLmNvbnRleHQsIHRoaXMucGVuZGluZ01lc3NhZ2UubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmdIYWxmQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLmhhbGZDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVwb3J0UmVzb2x2ZXJFcnJvcihzdGF0dXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gdGhpcy5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldE9wdGlvbnMoKS53YWl0Rm9yUmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbC5xdWV1ZUNhbGxGb3JDb25maWcodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLCBkZXRhaWxzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy50cmFjZSgnY2FuY2VsV2l0aFN0YXR1cyBjb2RlOiAnICsgc3RhdHVzICsgJyBkZXRhaWxzOiBcIicgKyBkZXRhaWxzICsgJ1wiJyk7XG4gICAgICAgIChfYSA9IHRoaXMuY2hpbGQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYW5jZWxXaXRoU3RhdHVzKHN0YXR1cywgZGV0YWlscyk7XG4gICAgICAgIHRoaXMub3V0cHV0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IHN0YXR1cyxcbiAgICAgICAgICAgIGRldGFpbHM6IGRldGFpbHMsXG4gICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFBlZXIoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmNoaWxkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UGVlcigpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0aGlzLmNoYW5uZWwuZ2V0VGFyZ2V0KCk7XG4gICAgfVxuICAgIHN0YXJ0KG1ldGFkYXRhLCBsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLnRyYWNlKCdzdGFydCBjYWxsZWQnKTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhLmNsb25lKCk7XG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICAgICAgdGhpcy5nZXRDb25maWcoKTtcbiAgICB9XG4gICAgc2VuZE1lc3NhZ2VXaXRoQ29udGV4dChjb250ZXh0LCBtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3dyaXRlKCkgY2FsbGVkIHdpdGggbWVzc2FnZSBvZiBsZW5ndGggJyArIG1lc3NhZ2UubGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPbkNoaWxkKGNvbnRleHQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IHsgY29udGV4dCwgbWVzc2FnZSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0UmVhZCgpIHtcbiAgICAgICAgdGhpcy50cmFjZSgnc3RhcnRSZWFkIGNhbGxlZCcpO1xuICAgICAgICBpZiAodGhpcy5jaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZC5zdGFydFJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVhZFBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbGZDbG9zZSgpIHtcbiAgICAgICAgdGhpcy50cmFjZSgnaGFsZkNsb3NlIGNhbGxlZCcpO1xuICAgICAgICBpZiAodGhpcy5jaGlsZCAmJiAhdGhpcy53cml0ZUZpbHRlclBlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGQuaGFsZkNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdIYWxmQ2xvc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICB9XG4gICAgYWRkU3RhdHVzV2F0Y2hlcih3YXRjaGVyKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzV2F0Y2hlcnMucHVzaCh3YXRjaGVyKTtcbiAgICB9XG4gICAgZ2V0Q2FsbE51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE51bWJlcjtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZC5nZXRBdXRoQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlJlc29sdmluZ0NhbGwgPSBSZXNvbHZpbmdDYWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2aW5nLWNhbGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZXRyeWluZ0NhbGwgPSBleHBvcnRzLk1lc3NhZ2VCdWZmZXJUcmFja2VyID0gZXhwb3J0cy5SZXRyeVRocm90dGxlciA9IHZvaWQgMDtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZGVhZGxpbmVfMSA9IHJlcXVpcmUoXCIuL2RlYWRsaW5lXCIpO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgbG9nZ2luZyA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdyZXRyeWluZ19jYWxsJztcbmNsYXNzIFJldHJ5VGhyb3R0bGVyIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhUb2tlbnMsIHRva2VuUmF0aW8sIHByZXZpb3VzUmV0cnlUaHJvdHRsZXIpIHtcbiAgICAgICAgdGhpcy5tYXhUb2tlbnMgPSBtYXhUb2tlbnM7XG4gICAgICAgIHRoaXMudG9rZW5SYXRpbyA9IHRva2VuUmF0aW87XG4gICAgICAgIGlmIChwcmV2aW91c1JldHJ5VGhyb3R0bGVyKSB7XG4gICAgICAgICAgICAvKiBXaGVuIGNhcnJ5aW5nIG92ZXIgdG9rZW5zIGZyb20gYSBwcmV2aW91cyBjb25maWcsIHJlc2NhbGUgdGhlbSB0byB0aGVcbiAgICAgICAgICAgICAqIG5ldyBtYXggdmFsdWUgKi9cbiAgICAgICAgICAgIHRoaXMudG9rZW5zID1cbiAgICAgICAgICAgICAgICBwcmV2aW91c1JldHJ5VGhyb3R0bGVyLnRva2VucyAqXG4gICAgICAgICAgICAgICAgICAgIChtYXhUb2tlbnMgLyBwcmV2aW91c1JldHJ5VGhyb3R0bGVyLm1heFRva2Vucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRva2VucyA9IG1heFRva2VucztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRDYWxsU3VjY2VlZGVkKCkge1xuICAgICAgICB0aGlzLnRva2VucyA9IE1hdGgubWluKHRoaXMudG9rZW5zICsgdGhpcy50b2tlblJhdGlvLCB0aGlzLm1heFRva2Vucyk7XG4gICAgfVxuICAgIGFkZENhbGxGYWlsZWQoKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gTWF0aC5tYXgodGhpcy50b2tlbnMgLSAxLCAwKTtcbiAgICB9XG4gICAgY2FuUmV0cnlDYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMgPiAodGhpcy5tYXhUb2tlbnMgLyAyKTtcbiAgICB9XG59XG5leHBvcnRzLlJldHJ5VGhyb3R0bGVyID0gUmV0cnlUaHJvdHRsZXI7XG5jbGFzcyBNZXNzYWdlQnVmZmVyVHJhY2tlciB7XG4gICAgY29uc3RydWN0b3IodG90YWxMaW1pdCwgbGltaXRQZXJDYWxsKSB7XG4gICAgICAgIHRoaXMudG90YWxMaW1pdCA9IHRvdGFsTGltaXQ7XG4gICAgICAgIHRoaXMubGltaXRQZXJDYWxsID0gbGltaXRQZXJDYWxsO1xuICAgICAgICB0aGlzLnRvdGFsQWxsb2NhdGVkID0gMDtcbiAgICAgICAgdGhpcy5hbGxvY2F0ZWRQZXJDYWxsID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBhbGxvY2F0ZShzaXplLCBjYWxsSWQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjdXJyZW50UGVyQ2FsbCA9IChfYSA9IHRoaXMuYWxsb2NhdGVkUGVyQ2FsbC5nZXQoY2FsbElkKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgaWYgKHRoaXMubGltaXRQZXJDYWxsIC0gY3VycmVudFBlckNhbGwgPCBzaXplIHx8XG4gICAgICAgICAgICB0aGlzLnRvdGFsTGltaXQgLSB0aGlzLnRvdGFsQWxsb2NhdGVkIDwgc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb2NhdGVkUGVyQ2FsbC5zZXQoY2FsbElkLCBjdXJyZW50UGVyQ2FsbCArIHNpemUpO1xuICAgICAgICB0aGlzLnRvdGFsQWxsb2NhdGVkICs9IHNpemU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmcmVlKHNpemUsIGNhbGxJZCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLnRvdGFsQWxsb2NhdGVkIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJ1ZmZlciBhbGxvY2F0aW9uIHN0YXRlOiBjYWxsICR7Y2FsbElkfSBmcmVlZCAke3NpemV9ID4gdG90YWwgYWxsb2NhdGVkICR7dGhpcy50b3RhbEFsbG9jYXRlZH1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvdGFsQWxsb2NhdGVkIC09IHNpemU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQZXJDYWxsID0gKF9hID0gdGhpcy5hbGxvY2F0ZWRQZXJDYWxsLmdldChjYWxsSWQpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBpZiAoY3VycmVudFBlckNhbGwgPCBzaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYnVmZmVyIGFsbG9jYXRpb24gc3RhdGU6IGNhbGwgJHtjYWxsSWR9IGZyZWVkICR7c2l6ZX0gPiBhbGxvY2F0ZWQgZm9yIGNhbGwgJHtjdXJyZW50UGVyQ2FsbH1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFsbG9jYXRlZFBlckNhbGwuc2V0KGNhbGxJZCwgY3VycmVudFBlckNhbGwgLSBzaXplKTtcbiAgICB9XG4gICAgZnJlZUFsbChjYWxsSWQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjdXJyZW50UGVyQ2FsbCA9IChfYSA9IHRoaXMuYWxsb2NhdGVkUGVyQ2FsbC5nZXQoY2FsbElkKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgaWYgKHRoaXMudG90YWxBbGxvY2F0ZWQgPCBjdXJyZW50UGVyQ2FsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJ1ZmZlciBhbGxvY2F0aW9uIHN0YXRlOiBjYWxsICR7Y2FsbElkfSBhbGxvY2F0ZWQgJHtjdXJyZW50UGVyQ2FsbH0gPiB0b3RhbCBhbGxvY2F0ZWQgJHt0aGlzLnRvdGFsQWxsb2NhdGVkfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxBbGxvY2F0ZWQgLT0gY3VycmVudFBlckNhbGw7XG4gICAgICAgIHRoaXMuYWxsb2NhdGVkUGVyQ2FsbC5kZWxldGUoY2FsbElkKTtcbiAgICB9XG59XG5leHBvcnRzLk1lc3NhZ2VCdWZmZXJUcmFja2VyID0gTWVzc2FnZUJ1ZmZlclRyYWNrZXI7XG5jb25zdCBQUkVWSU9OU19SUENfQVRURU1QVFNfTUVUQURBVEFfS0VZID0gJ2dycGMtcHJldmlvdXMtcnBjLWF0dGVtcHRzJztcbmNvbnN0IERFRkFVTFRfTUFYX0FUVEVNUFRTX0xJTUlUID0gNTtcbmNsYXNzIFJldHJ5aW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IoY2hhbm5lbCwgY2FsbENvbmZpZywgbWV0aG9kTmFtZSwgaG9zdCwgY3JlZGVudGlhbHMsIGRlYWRsaW5lLCBjYWxsTnVtYmVyLCBidWZmZXJUcmFja2VyLCByZXRyeVRocm90dGxlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgICAgIHRoaXMuY2FsbENvbmZpZyA9IGNhbGxDb25maWc7XG4gICAgICAgIHRoaXMubWV0aG9kTmFtZSA9IG1ldGhvZE5hbWU7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICAgICAgdGhpcy5kZWFkbGluZSA9IGRlYWRsaW5lO1xuICAgICAgICB0aGlzLmNhbGxOdW1iZXIgPSBjYWxsTnVtYmVyO1xuICAgICAgICB0aGlzLmJ1ZmZlclRyYWNrZXIgPSBidWZmZXJUcmFja2VyO1xuICAgICAgICB0aGlzLnJldHJ5VGhyb3R0bGVyID0gcmV0cnlUaHJvdHRsZXI7XG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxNZXRhZGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMudW5kZXJseWluZ0NhbGxzID0gW107XG4gICAgICAgIHRoaXMud3JpdGVCdWZmZXIgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBvZmZzZXQgb2YgbWVzc2FnZSBpbmRpY2VzIGluIHRoZSB3cml0ZUJ1ZmZlci4gRm9yIGV4YW1wbGUsIGlmXG4gICAgICAgICAqIHdyaXRlQnVmZmVyT2Zmc2V0IGlzIDEwLCBtZXNzYWdlIDEwIGlzIGluIHdyaXRlQnVmZmVyWzBdIGFuZCBtZXNzYWdlIDE1XG4gICAgICAgICAqIGlzIGluIHdyaXRlQnVmZmVyWzVdLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlck9mZnNldCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUcmFja3Mgd2hldGhlciBhIHJlYWQgaGFzIGJlZW4gc3RhcnRlZCwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgdG8gc3RhcnRcbiAgICAgICAgICogcmVhZHMgb24gbmV3IGNoaWxkIGNhbGxzLiBUaGlzIG9ubHkgbWF0dGVycyBmb3IgdGhlIGZpcnN0IHJlYWQsIGJlY2F1c2VcbiAgICAgICAgICogb25jZSBhIG1lc3NhZ2UgY29tZXMgaW4gdGhlIGNoaWxkIGNhbGwgYmVjb21lcyBjb21taXR0ZWQgYW5kIHRoZXJlIHdpbGxcbiAgICAgICAgICogYmUgbm8gbmV3IGNoaWxkIGNhbGxzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRyYW5zcGFyZW50UmV0cnlVc2VkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOdW1iZXIgb2YgYXR0ZW1wdHMgc28gZmFyXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmF0dGVtcHRzID0gMDtcbiAgICAgICAgdGhpcy5oZWRnaW5nVGltZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbW1pdHRlZENhbGxJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdGlhbFJldHJ5QmFja29mZlNlYyA9IDA7XG4gICAgICAgIHRoaXMubmV4dFJldHJ5QmFja29mZlNlYyA9IDA7XG4gICAgICAgIGNvbnN0IG1heEF0dGVtcHRzTGltaXQgPSAoX2EgPSBjaGFubmVsLmdldE9wdGlvbnMoKVsnZ3JwYy1ub2RlLnJldHJ5X21heF9hdHRlbXB0c19saW1pdCddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX01BWF9BVFRFTVBUU19MSU1JVDtcbiAgICAgICAgaWYgKGNoYW5uZWwuZ2V0T3B0aW9ucygpWydncnBjLmVuYWJsZV9yZXRyaWVzJ10gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnTk9fUkVUUlknO1xuICAgICAgICAgICAgdGhpcy5tYXhBdHRlbXB0cyA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FsbENvbmZpZy5tZXRob2RDb25maWcucmV0cnlQb2xpY3kpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnUkVUUlknO1xuICAgICAgICAgICAgY29uc3QgcmV0cnlQb2xpY3kgPSBjYWxsQ29uZmlnLm1ldGhvZENvbmZpZy5yZXRyeVBvbGljeTtcbiAgICAgICAgICAgIHRoaXMubmV4dFJldHJ5QmFja29mZlNlYyA9IHRoaXMuaW5pdGlhbFJldHJ5QmFja29mZlNlYyA9IE51bWJlcihyZXRyeVBvbGljeS5pbml0aWFsQmFja29mZi5zdWJzdHJpbmcoMCwgcmV0cnlQb2xpY3kuaW5pdGlhbEJhY2tvZmYubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgdGhpcy5tYXhBdHRlbXB0cyA9IE1hdGgubWluKHJldHJ5UG9saWN5Lm1heEF0dGVtcHRzLCBtYXhBdHRlbXB0c0xpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYWxsQ29uZmlnLm1ldGhvZENvbmZpZy5oZWRnaW5nUG9saWN5KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gJ0hFREdJTkcnO1xuICAgICAgICAgICAgdGhpcy5tYXhBdHRlbXB0cyA9IE1hdGgubWluKGNhbGxDb25maWcubWV0aG9kQ29uZmlnLmhlZGdpbmdQb2xpY3kubWF4QXR0ZW1wdHMsIG1heEF0dGVtcHRzTGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdUUkFOU1BBUkVOVF9PTkxZJztcbiAgICAgICAgICAgIHRoaXMubWF4QXR0ZW1wdHMgPSAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgZ2V0RGVhZGxpbmVJbmZvKCkge1xuICAgICAgICBpZiAodGhpcy51bmRlcmx5aW5nQ2FsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVhZGxpbmVJbmZvID0gW107XG4gICAgICAgIGNvbnN0IGxhdGVzdENhbGwgPSB0aGlzLnVuZGVybHlpbmdDYWxsc1t0aGlzLnVuZGVybHlpbmdDYWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMudW5kZXJseWluZ0NhbGxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGRlYWRsaW5lSW5mby5wdXNoKGBwcmV2aW91cyBhdHRlbXB0czogJHt0aGlzLnVuZGVybHlpbmdDYWxscy5sZW5ndGggLSAxfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXRlc3RDYWxsLnN0YXJ0VGltZSA+IHRoaXMuc3RhcnRUaW1lKSB7XG4gICAgICAgICAgICBkZWFkbGluZUluZm8ucHVzaChgdGltZSB0byBjdXJyZW50IGF0dGVtcHQgc3RhcnQ6ICR7KDAsIGRlYWRsaW5lXzEuZm9ybWF0RGF0ZURpZmZlcmVuY2UpKHRoaXMuc3RhcnRUaW1lLCBsYXRlc3RDYWxsLnN0YXJ0VGltZSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVhZGxpbmVJbmZvLnB1c2goLi4ubGF0ZXN0Q2FsbC5jYWxsLmdldERlYWRsaW5lSW5mbygpKTtcbiAgICAgICAgcmV0dXJuIGRlYWRsaW5lSW5mbztcbiAgICB9XG4gICAgZ2V0Q2FsbE51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE51bWJlcjtcbiAgICB9XG4gICAgdHJhY2UodGV4dCkge1xuICAgICAgICBsb2dnaW5nLnRyYWNlKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgVFJBQ0VSX05BTUUsICdbJyArIHRoaXMuY2FsbE51bWJlciArICddICcgKyB0ZXh0KTtcbiAgICB9XG4gICAgcmVwb3J0U3RhdHVzKHN0YXR1c09iamVjdCkge1xuICAgICAgICB0aGlzLnRyYWNlKCdlbmRlZCB3aXRoIHN0YXR1czogY29kZT0nICtcbiAgICAgICAgICAgIHN0YXR1c09iamVjdC5jb2RlICtcbiAgICAgICAgICAgICcgZGV0YWlscz1cIicgK1xuICAgICAgICAgICAgc3RhdHVzT2JqZWN0LmRldGFpbHMgK1xuICAgICAgICAgICAgJ1wiIHN0YXJ0IHRpbWU9JyArXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGltZS50b0lTT1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5idWZmZXJUcmFja2VyLmZyZWVBbGwodGhpcy5jYWxsTnVtYmVyKTtcbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlck9mZnNldCA9IHRoaXMud3JpdGVCdWZmZXJPZmZzZXQgKyB0aGlzLndyaXRlQnVmZmVyLmxlbmd0aDtcbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlciA9IFtdO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgY29uc3RydWN0IHN0YXR1cyBvYmplY3QgdG8gcmVtb3ZlIHByb2dyZXNzIGZpZWxkXG4gICAgICAgICAgICAoX2EgPSB0aGlzLmxpc3RlbmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25SZWNlaXZlU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBzdGF0dXNPYmplY3QuY29kZSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBzdGF0dXNPYmplY3QuZGV0YWlscyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogc3RhdHVzT2JqZWN0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYW5jZWxXaXRoU3RhdHVzKHN0YXR1cywgZGV0YWlscykge1xuICAgICAgICB0aGlzLnRyYWNlKCdjYW5jZWxXaXRoU3RhdHVzIGNvZGU6ICcgKyBzdGF0dXMgKyAnIGRldGFpbHM6IFwiJyArIGRldGFpbHMgKyAnXCInKTtcbiAgICAgICAgdGhpcy5yZXBvcnRTdGF0dXMoeyBjb2RlOiBzdGF0dXMsIGRldGFpbHMsIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHsgY2FsbCB9IG9mIHRoaXMudW5kZXJseWluZ0NhbGxzKSB7XG4gICAgICAgICAgICBjYWxsLmNhbmNlbFdpdGhTdGF0dXMoc3RhdHVzLCBkZXRhaWxzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRQZWVyKCkge1xuICAgICAgICBpZiAodGhpcy5jb21taXR0ZWRDYWxsSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuZGVybHlpbmdDYWxsc1t0aGlzLmNvbW1pdHRlZENhbGxJbmRleF0uY2FsbC5nZXRQZWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEJ1ZmZlckVudHJ5KG1lc3NhZ2VJbmRleCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy53cml0ZUJ1ZmZlclttZXNzYWdlSW5kZXggLSB0aGlzLndyaXRlQnVmZmVyT2Zmc2V0XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge1xuICAgICAgICAgICAgZW50cnlUeXBlOiAnRlJFRUQnLFxuICAgICAgICAgICAgYWxsb2NhdGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldE5leHRCdWZmZXJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXJPZmZzZXQgKyB0aGlzLndyaXRlQnVmZmVyLmxlbmd0aDtcbiAgICB9XG4gICAgY2xlYXJTZW50TWVzc2FnZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSAnQ09NTUlUVEVEJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlYXJsaWVzdE5lZWRlZE1lc3NhZ2VJbmRleDtcbiAgICAgICAgaWYgKHRoaXMudW5kZXJseWluZ0NhbGxzW3RoaXMuY29tbWl0dGVkQ2FsbEluZGV4XS5zdGF0ZSA9PT0gJ0NPTVBMRVRFRCcpIHtcbiAgICAgICAgICAgIC8qIElmIHRoZSBjb21taXR0ZWQgY2FsbCBpcyBjb21wbGV0ZWQsIGNsZWFyIGFsbCBtZXNzYWdlcywgZXZlbiBpZiBzb21lXG4gICAgICAgICAgICAgKiBoYXZlIG5vdCBiZWVuIHNlbnQuICovXG4gICAgICAgICAgICBlYXJsaWVzdE5lZWRlZE1lc3NhZ2VJbmRleCA9IHRoaXMuZ2V0TmV4dEJ1ZmZlckluZGV4KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlYXJsaWVzdE5lZWRlZE1lc3NhZ2VJbmRleCA9XG4gICAgICAgICAgICAgICAgdGhpcy51bmRlcmx5aW5nQ2FsbHNbdGhpcy5jb21taXR0ZWRDYWxsSW5kZXhdLm5leHRNZXNzYWdlVG9TZW5kO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IG1lc3NhZ2VJbmRleCA9IHRoaXMud3JpdGVCdWZmZXJPZmZzZXQ7IG1lc3NhZ2VJbmRleCA8IGVhcmxpZXN0TmVlZGVkTWVzc2FnZUluZGV4OyBtZXNzYWdlSW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyRW50cnkgPSB0aGlzLmdldEJ1ZmZlckVudHJ5KG1lc3NhZ2VJbmRleCk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyRW50cnkuYWxsb2NhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJUcmFja2VyLmZyZWUoYnVmZmVyRW50cnkubWVzc2FnZS5tZXNzYWdlLmxlbmd0aCwgdGhpcy5jYWxsTnVtYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLndyaXRlQnVmZmVyID0gdGhpcy53cml0ZUJ1ZmZlci5zbGljZShlYXJsaWVzdE5lZWRlZE1lc3NhZ2VJbmRleCAtIHRoaXMud3JpdGVCdWZmZXJPZmZzZXQpO1xuICAgICAgICB0aGlzLndyaXRlQnVmZmVyT2Zmc2V0ID0gZWFybGllc3ROZWVkZWRNZXNzYWdlSW5kZXg7XG4gICAgfVxuICAgIGNvbW1pdENhbGwoaW5kZXgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdDT01NSVRURUQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmFjZSgnQ29tbWl0dGluZyBjYWxsIFsnICtcbiAgICAgICAgICAgIHRoaXMudW5kZXJseWluZ0NhbGxzW2luZGV4XS5jYWxsLmdldENhbGxOdW1iZXIoKSArXG4gICAgICAgICAgICAnXSBhdCBpbmRleCAnICtcbiAgICAgICAgICAgIGluZGV4KTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdDT01NSVRURUQnO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmNhbGxDb25maWcpLm9uQ29tbWl0dGVkKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgIHRoaXMuY29tbWl0dGVkQ2FsbEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy51bmRlcmx5aW5nQ2FsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudW5kZXJseWluZ0NhbGxzW2ldLnN0YXRlID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51bmRlcmx5aW5nQ2FsbHNbaV0uc3RhdGUgPSAnQ09NUExFVEVEJztcbiAgICAgICAgICAgIHRoaXMudW5kZXJseWluZ0NhbGxzW2ldLmNhbGwuY2FuY2VsV2l0aFN0YXR1cyhjb25zdGFudHNfMS5TdGF0dXMuQ0FOQ0VMTEVELCAnRGlzY2FyZGVkIGluIGZhdm9yIG9mIG90aGVyIGhlZGdlZCBhdHRlbXB0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclNlbnRNZXNzYWdlcygpO1xuICAgIH1cbiAgICBjb21taXRDYWxsV2l0aE1vc3RNZXNzYWdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdDT01NSVRURUQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1vc3RNZXNzYWdlcyA9IC0xO1xuICAgICAgICBsZXQgY2FsbFdpdGhNb3N0TWVzc2FnZXMgPSAtMTtcbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGNoaWxkQ2FsbF0gb2YgdGhpcy51bmRlcmx5aW5nQ2FsbHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRDYWxsLnN0YXRlID09PSAnQUNUSVZFJyAmJlxuICAgICAgICAgICAgICAgIGNoaWxkQ2FsbC5uZXh0TWVzc2FnZVRvU2VuZCA+IG1vc3RNZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIG1vc3RNZXNzYWdlcyA9IGNoaWxkQ2FsbC5uZXh0TWVzc2FnZVRvU2VuZDtcbiAgICAgICAgICAgICAgICBjYWxsV2l0aE1vc3RNZXNzYWdlcyA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsV2l0aE1vc3RNZXNzYWdlcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8qIFRoZXJlIGFyZSBubyBhY3RpdmUgY2FsbHMsIGRpc2FibGUgcmV0cmllcyB0byBmb3JjZSB0aGUgbmV4dCBjYWxsIHRoYXRcbiAgICAgICAgICAgICAqIGlzIHN0YXJ0ZWQgdG8gYmUgY29tbWl0dGVkLiAqL1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdUUkFOU1BBUkVOVF9PTkxZJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0Q2FsbChjYWxsV2l0aE1vc3RNZXNzYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNTdGF0dXNDb2RlSW5MaXN0KGxpc3QsIGNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Quc29tZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IGNvZGUgfHxcbiAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICgoX2EgPSBjb25zdGFudHNfMS5TdGF0dXNbY29kZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldE5leHRSZXRyeUppdHRlcigpIHtcbiAgICAgICAgLyogSml0dGVyIG9mICstMjAlIGlzIGFwcGxpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9ncnBjL3Byb3Bvc2FsL2Jsb2IvbWFzdGVyL0E2LWNsaWVudC1yZXRyaWVzLm1kI2V4cG9uZW50aWFsLWJhY2tvZmYgKi9cbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAoMS4yIC0gMC44KSArIDAuODtcbiAgICB9XG4gICAgZ2V0TmV4dFJldHJ5QmFja29mZk1zKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJldHJ5UG9saWN5ID0gKF9hID0gdGhpcy5jYWxsQ29uZmlnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWV0aG9kQ29uZmlnLnJldHJ5UG9saWN5O1xuICAgICAgICBpZiAoIXJldHJ5UG9saWN5KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqaXR0ZXIgPSB0aGlzLmdldE5leHRSZXRyeUppdHRlcigpO1xuICAgICAgICBjb25zdCBuZXh0QmFja29mZk1zID0gaml0dGVyICogdGhpcy5uZXh0UmV0cnlCYWNrb2ZmU2VjICogMTAwMDtcbiAgICAgICAgY29uc3QgbWF4QmFja29mZlNlYyA9IE51bWJlcihyZXRyeVBvbGljeS5tYXhCYWNrb2ZmLnN1YnN0cmluZygwLCByZXRyeVBvbGljeS5tYXhCYWNrb2ZmLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgdGhpcy5uZXh0UmV0cnlCYWNrb2ZmU2VjID0gTWF0aC5taW4odGhpcy5uZXh0UmV0cnlCYWNrb2ZmU2VjICogcmV0cnlQb2xpY3kuYmFja29mZk11bHRpcGxpZXIsIG1heEJhY2tvZmZTZWMpO1xuICAgICAgICByZXR1cm4gbmV4dEJhY2tvZmZNcztcbiAgICB9XG4gICAgbWF5YmVSZXRyeUNhbGwocHVzaGJhY2ssIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSAnUkVUUlknKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXR0ZW1wdHMgPj0gdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXRyeURlbGF5TXM7XG4gICAgICAgIGlmIChwdXNoYmFjayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0cnlEZWxheU1zID0gdGhpcy5nZXROZXh0UmV0cnlCYWNrb2ZmTXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwdXNoYmFjayA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnVFJBTlNQQVJFTlRfT05MWSc7XG4gICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXRyeURlbGF5TXMgPSBwdXNoYmFjaztcbiAgICAgICAgICAgIHRoaXMubmV4dFJldHJ5QmFja29mZlNlYyA9IHRoaXMuaW5pdGlhbFJldHJ5QmFja29mZlNlYztcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ1JFVFJZJykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKF9iID0gKF9hID0gdGhpcy5yZXRyeVRocm90dGxlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhblJldHJ5Q2FsbCgpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRlbXB0cyArPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnROZXdBdHRlbXB0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdSZXRyeSBhdHRlbXB0IGRlbmllZCBieSB0aHJvdHRsaW5nIHBvbGljeScpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgcmV0cnlEZWxheU1zKTtcbiAgICB9XG4gICAgY291bnRBY3RpdmVDYWxscygpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsIG9mIHRoaXMudW5kZXJseWluZ0NhbGxzKSB7XG4gICAgICAgICAgICBpZiAoKGNhbGwgPT09IG51bGwgfHwgY2FsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbC5zdGF0ZSkgPT09ICdBQ1RJVkUnKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICAgIGhhbmRsZVByb2Nlc3NlZFN0YXR1cyhzdGF0dXMsIGNhbGxJbmRleCwgcHVzaGJhY2spIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnQ09NTUlUVEVEJzpcbiAgICAgICAgICAgIGNhc2UgJ05PX1JFVFJZJzpcbiAgICAgICAgICAgIGNhc2UgJ1RSQU5TUEFSRU5UX09OTFknOlxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0Q2FsbChjYWxsSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0U3RhdHVzKHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdIRURHSU5HJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0YXR1c0NvZGVJbkxpc3QoKF9hID0gdGhpcy5jYWxsQ29uZmlnLm1ldGhvZENvbmZpZy5oZWRnaW5nUG9saWN5Lm5vbkZhdGFsU3RhdHVzQ29kZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLCBzdGF0dXMuY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9iID0gdGhpcy5yZXRyeVRocm90dGxlcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFkZENhbGxGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlbGF5TXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwdXNoYmFjayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlNcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHVzaGJhY2sgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gJ1RSQU5TUEFSRU5UX09OTFknO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21taXRDYWxsKGNhbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlNcyA9IHB1c2hiYWNrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXliZVN0YXJ0SGVkZ2luZ0F0dGVtcHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFmdGVyIHRyeWluZyB0byBzdGFydCBhIGNhbGwgdGhlcmUgYXJlIG5vIGFjdGl2ZSBjYWxscywgdGhpcyB3YXMgdGhlIGxhc3Qgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudEFjdGl2ZUNhbGxzKCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdENhbGwoY2FsbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBkZWxheU1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0Q2FsbChjYWxsSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JFVFJZJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0YXR1c0NvZGVJbkxpc3QodGhpcy5jYWxsQ29uZmlnLm1ldGhvZENvbmZpZy5yZXRyeVBvbGljeS5yZXRyeWFibGVTdGF0dXNDb2Rlcywgc3RhdHVzLmNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYyA9IHRoaXMucmV0cnlUaHJvdHRsZXIpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hZGRDYWxsRmFpbGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF5YmVSZXRyeUNhbGwocHVzaGJhY2ssIHJldHJpZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXRyaWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21taXRDYWxsKGNhbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdENhbGwoY2FsbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UHVzaGJhY2sobWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgbWRWYWx1ZSA9IG1ldGFkYXRhLmdldCgnZ3JwYy1yZXRyeS1wdXNoYmFjay1tcycpO1xuICAgICAgICBpZiAobWRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobWRWYWx1ZVswXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDaGlsZFN0YXR1cyhzdGF0dXMsIGNhbGxJbmRleCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLnVuZGVybHlpbmdDYWxsc1tjYWxsSW5kZXhdLnN0YXRlID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2UoJ3N0YXRlPScgK1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSArXG4gICAgICAgICAgICAnIGhhbmRsaW5nIHN0YXR1cyB3aXRoIHByb2dyZXNzICcgK1xuICAgICAgICAgICAgc3RhdHVzLnByb2dyZXNzICtcbiAgICAgICAgICAgICcgZnJvbSBjaGlsZCBbJyArXG4gICAgICAgICAgICB0aGlzLnVuZGVybHlpbmdDYWxsc1tjYWxsSW5kZXhdLmNhbGwuZ2V0Q2FsbE51bWJlcigpICtcbiAgICAgICAgICAgICddIGluIHN0YXRlICcgK1xuICAgICAgICAgICAgdGhpcy51bmRlcmx5aW5nQ2FsbHNbY2FsbEluZGV4XS5zdGF0ZSk7XG4gICAgICAgIHRoaXMudW5kZXJseWluZ0NhbGxzW2NhbGxJbmRleF0uc3RhdGUgPSAnQ09NUExFVEVEJztcbiAgICAgICAgaWYgKHN0YXR1cy5jb2RlID09PSBjb25zdGFudHNfMS5TdGF0dXMuT0spIHtcbiAgICAgICAgICAgIChfYSA9IHRoaXMucmV0cnlUaHJvdHRsZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRDYWxsU3VjY2VlZGVkKCk7XG4gICAgICAgICAgICB0aGlzLmNvbW1pdENhbGwoY2FsbEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0U3RhdHVzKHN0YXR1cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICdOT19SRVRSWScpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0Q2FsbChjYWxsSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5yZXBvcnRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ0NPTU1JVFRFRCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0U3RhdHVzKHN0YXR1cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVzaGJhY2sgPSB0aGlzLmdldFB1c2hiYWNrKHN0YXR1cy5tZXRhZGF0YSk7XG4gICAgICAgIHN3aXRjaCAoc3RhdHVzLnByb2dyZXNzKSB7XG4gICAgICAgICAgICBjYXNlICdOT1RfU1RBUlRFRCc6XG4gICAgICAgICAgICAgICAgLy8gUlBDIG5ldmVyIGxlYXZlcyB0aGUgY2xpZW50LCBhbHdheXMgc2FmZSB0byByZXRyeVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnROZXdBdHRlbXB0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSRUZVU0VEJzpcbiAgICAgICAgICAgICAgICAvLyBSUEMgcmVhY2hlcyB0aGUgc2VydmVyIGxpYnJhcnksIGJ1dCBub3QgdGhlIHNlcnZlciBhcHBsaWNhdGlvbiBsb2dpY1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50UmV0cnlVc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvY2Vzc2VkU3RhdHVzKHN0YXR1cywgY2FsbEluZGV4LCBwdXNoYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50UmV0cnlVc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydE5ld0F0dGVtcHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdEUk9QJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdENhbGwoY2FsbEluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUFJPQ0VTU0VEJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZFN0YXR1cyhzdGF0dXMsIGNhbGxJbmRleCwgcHVzaGJhY2spO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1heWJlU3RhcnRIZWRnaW5nQXR0ZW1wdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdIRURHSU5HJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYWxsQ29uZmlnLm1ldGhvZENvbmZpZy5oZWRnaW5nUG9saWN5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXR0ZW1wdHMgPj0gdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXR0ZW1wdHMgKz0gMTtcbiAgICAgICAgdGhpcy5zdGFydE5ld0F0dGVtcHQoKTtcbiAgICAgICAgdGhpcy5tYXliZVN0YXJ0SGVkZ2luZ1RpbWVyKCk7XG4gICAgfVxuICAgIG1heWJlU3RhcnRIZWRnaW5nVGltZXIoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBpZiAodGhpcy5oZWRnaW5nVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmhlZGdpbmdUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdIRURHSU5HJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYWxsQ29uZmlnLm1ldGhvZENvbmZpZy5oZWRnaW5nUG9saWN5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVkZ2luZ1BvbGljeSA9IHRoaXMuY2FsbENvbmZpZy5tZXRob2RDb25maWcuaGVkZ2luZ1BvbGljeTtcbiAgICAgICAgaWYgKHRoaXMuYXR0ZW1wdHMgPj0gdGhpcy5tYXhBdHRlbXB0cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlZGdpbmdEZWxheVN0cmluZyA9IChfYSA9IGhlZGdpbmdQb2xpY3kuaGVkZ2luZ0RlbGF5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnMHMnO1xuICAgICAgICBjb25zdCBoZWRnaW5nRGVsYXlTZWMgPSBOdW1iZXIoaGVkZ2luZ0RlbGF5U3RyaW5nLnN1YnN0cmluZygwLCBoZWRnaW5nRGVsYXlTdHJpbmcubGVuZ3RoIC0gMSkpO1xuICAgICAgICB0aGlzLmhlZGdpbmdUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYXliZVN0YXJ0SGVkZ2luZ0F0dGVtcHQoKTtcbiAgICAgICAgfSwgaGVkZ2luZ0RlbGF5U2VjICogMTAwMCk7XG4gICAgICAgIChfYyA9IChfYiA9IHRoaXMuaGVkZ2luZ1RpbWVyKS51bnJlZikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwoX2IpO1xuICAgIH1cbiAgICBzdGFydE5ld0F0dGVtcHQoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGFubmVsLmNyZWF0ZUxvYWRCYWxhbmNpbmdDYWxsKHRoaXMuY2FsbENvbmZpZywgdGhpcy5tZXRob2ROYW1lLCB0aGlzLmhvc3QsIHRoaXMuY3JlZGVudGlhbHMsIHRoaXMuZGVhZGxpbmUpO1xuICAgICAgICB0aGlzLnRyYWNlKCdDcmVhdGVkIGNoaWxkIGNhbGwgWycgK1xuICAgICAgICAgICAgY2hpbGQuZ2V0Q2FsbE51bWJlcigpICtcbiAgICAgICAgICAgICddIGZvciBhdHRlbXB0ICcgK1xuICAgICAgICAgICAgdGhpcy5hdHRlbXB0cyk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy51bmRlcmx5aW5nQ2FsbHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnVuZGVybHlpbmdDYWxscy5wdXNoKHtcbiAgICAgICAgICAgIHN0YXRlOiAnQUNUSVZFJyxcbiAgICAgICAgICAgIGNhbGw6IGNoaWxkLFxuICAgICAgICAgICAgbmV4dE1lc3NhZ2VUb1NlbmQ6IDAsXG4gICAgICAgICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcmV2aW91c0F0dGVtcHRzID0gdGhpcy5hdHRlbXB0cyAtIDE7XG4gICAgICAgIGNvbnN0IGluaXRpYWxNZXRhZGF0YSA9IHRoaXMuaW5pdGlhbE1ldGFkYXRhLmNsb25lKCk7XG4gICAgICAgIGlmIChwcmV2aW91c0F0dGVtcHRzID4gMCkge1xuICAgICAgICAgICAgaW5pdGlhbE1ldGFkYXRhLnNldChQUkVWSU9OU19SUENfQVRURU1QVFNfTUVUQURBVEFfS0VZLCBgJHtwcmV2aW91c0F0dGVtcHRzfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWNlaXZlZE1ldGFkYXRhID0gZmFsc2U7XG4gICAgICAgIGNoaWxkLnN0YXJ0KGluaXRpYWxNZXRhZGF0YSwge1xuICAgICAgICAgICAgb25SZWNlaXZlTWV0YWRhdGE6IG1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdSZWNlaXZlZCBtZXRhZGF0YSBmcm9tIGNoaWxkIFsnICsgY2hpbGQuZ2V0Q2FsbE51bWJlcigpICsgJ10nKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdENhbGwoaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkTWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0F0dGVtcHRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5zZXQoUFJFVklPTlNfUlBDX0FUVEVNUFRTX01FVEFEQVRBX0tFWSwgYCR7cHJldmlvdXNBdHRlbXB0c31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZXJseWluZ0NhbGxzW2luZGV4XS5zdGF0ZSA9PT0gJ0FDVElWRScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2U6IG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1JlY2VpdmVkIG1lc3NhZ2UgZnJvbSBjaGlsZCBbJyArIGNoaWxkLmdldENhbGxOdW1iZXIoKSArICddJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21taXRDYWxsKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bmRlcmx5aW5nQ2FsbHNbaW5kZXhdLnN0YXRlID09PSAnQUNUSVZFJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLm9uUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVjZWl2ZVN0YXR1czogc3RhdHVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdSZWNlaXZlZCBzdGF0dXMgZnJvbSBjaGlsZCBbJyArIGNoaWxkLmdldENhbGxOdW1iZXIoKSArICddJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNlaXZlZE1ldGFkYXRhICYmIHByZXZpb3VzQXR0ZW1wdHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5tZXRhZGF0YS5zZXQoUFJFVklPTlNfUlBDX0FUVEVNUFRTX01FVEFEQVRBX0tFWSwgYCR7cHJldmlvdXNBdHRlbXB0c31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGlsZFN0YXR1cyhzdGF0dXMsIGluZGV4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbmROZXh0Q2hpbGRNZXNzYWdlKGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucmVhZFN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGNoaWxkLnN0YXJ0UmVhZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0KG1ldGFkYXRhLCBsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLnRyYWNlKCdzdGFydCBjYWxsZWQnKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICAgICAgICB0aGlzLmluaXRpYWxNZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICB0aGlzLmF0dGVtcHRzICs9IDE7XG4gICAgICAgIHRoaXMuc3RhcnROZXdBdHRlbXB0KCk7XG4gICAgICAgIHRoaXMubWF5YmVTdGFydEhlZGdpbmdUaW1lcigpO1xuICAgIH1cbiAgICBoYW5kbGVDaGlsZFdyaXRlQ29tcGxldGVkKGNoaWxkSW5kZXgsIG1lc3NhZ2VJbmRleCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmdldEJ1ZmZlckVudHJ5KG1lc3NhZ2VJbmRleCkpLmNhbGxiYWNrKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgIHRoaXMuY2xlYXJTZW50TWVzc2FnZXMoKTtcbiAgICAgICAgY29uc3QgY2hpbGRDYWxsID0gdGhpcy51bmRlcmx5aW5nQ2FsbHNbY2hpbGRJbmRleF07XG4gICAgICAgIGNoaWxkQ2FsbC5uZXh0TWVzc2FnZVRvU2VuZCArPSAxO1xuICAgICAgICB0aGlzLnNlbmROZXh0Q2hpbGRNZXNzYWdlKGNoaWxkSW5kZXgpO1xuICAgIH1cbiAgICBzZW5kTmV4dENoaWxkTWVzc2FnZShjaGlsZEluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ2FsbCA9IHRoaXMudW5kZXJseWluZ0NhbGxzW2NoaWxkSW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGRDYWxsLnN0YXRlID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJbmRleCA9IGNoaWxkQ2FsbC5uZXh0TWVzc2FnZVRvU2VuZDtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QnVmZmVyRW50cnkobWVzc2FnZUluZGV4KSkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyRW50cnkgPSB0aGlzLmdldEJ1ZmZlckVudHJ5KG1lc3NhZ2VJbmRleCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlckVudHJ5LmVudHJ5VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ01FU1NBR0UnOlxuICAgICAgICAgICAgICAgICAgICBjaGlsZENhbGwuY2FsbC5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGlsZFdyaXRlQ29tcGxldGVkKGNoaWxkSW5kZXgsIG1lc3NhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LCBidWZmZXJFbnRyeS5tZXNzYWdlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IGlmIHRoZSBuZXh0IGVudHJ5IGlzIEhBTEZfQ0xPU0UsIHNlbmQgaXQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSBjYWxsYmFjay4gVGhpcyBpcyBzYWZlIGJlY2F1c2UgdGhlIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0LlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RW50cnkgPSB0aGlzLmdldEJ1ZmZlckVudHJ5KG1lc3NhZ2VJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVudHJ5LmVudHJ5VHlwZSA9PT0gJ0hBTEZfQ0xPU0UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdTZW5kaW5nIGhhbGZDbG9zZSBpbW1lZGlhdGVseSBhZnRlciBtZXNzYWdlIHRvIGNoaWxkIFsnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZENhbGwuY2FsbC5nZXRDYWxsTnVtYmVyKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICddIC0gb3B0aW1pemluZyBmb3IgdW5hcnkvZmluYWwgbWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDYWxsLm5leHRNZXNzYWdlVG9TZW5kICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZENhbGwuY2FsbC5oYWxmQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdIQUxGX0NMT1NFJzpcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDYWxsLm5leHRNZXNzYWdlVG9TZW5kICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkQ2FsbC5jYWxsLmhhbGZDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdGUkVFRCc6XG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBub3QgYmUgcG9zc2libGVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VuZE1lc3NhZ2VXaXRoQ29udGV4dChjb250ZXh0LCBtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMudHJhY2UoJ3dyaXRlKCkgY2FsbGVkIHdpdGggbWVzc2FnZSBvZiBsZW5ndGggJyArIG1lc3NhZ2UubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVPYmogPSB7XG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZmxhZ3M6IGNvbnRleHQuZmxhZ3MsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJbmRleCA9IHRoaXMuZ2V0TmV4dEJ1ZmZlckluZGV4KCk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckVudHJ5ID0ge1xuICAgICAgICAgICAgZW50cnlUeXBlOiAnTUVTU0FHRScsXG4gICAgICAgICAgICBtZXNzYWdlOiB3cml0ZU9iaixcbiAgICAgICAgICAgIGFsbG9jYXRlZDogdGhpcy5idWZmZXJUcmFja2VyLmFsbG9jYXRlKG1lc3NhZ2UubGVuZ3RoLCB0aGlzLmNhbGxOdW1iZXIpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLndyaXRlQnVmZmVyLnB1c2goYnVmZmVyRW50cnkpO1xuICAgICAgICBpZiAoYnVmZmVyRW50cnkuYWxsb2NhdGVkKSB7XG4gICAgICAgICAgICAvLyBSdW4gdGhpcyBpbiBuZXh0IHRpY2sgdG8gYXZvaWQgc3VzcGVuZGluZyB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IG1pZ2h0IGNhdXNlIGhhbGYgY2xvc2luZyB0aGUgY2FsbCBiZWZvcmUgc2VuZGluZyBtZXNzYWdlXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgKF9hID0gY29udGV4dC5jYWxsYmFjaykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoY29udGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NhbGxJbmRleCwgY2FsbF0gb2YgdGhpcy51bmRlcmx5aW5nQ2FsbHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGwuc3RhdGUgPT09ICdBQ1RJVkUnICYmXG4gICAgICAgICAgICAgICAgICAgIGNhbGwubmV4dE1lc3NhZ2VUb1NlbmQgPT09IG1lc3NhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsLmNhbGwuc2VuZE1lc3NhZ2VXaXRoQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hpbGRXcml0ZUNvbXBsZXRlZChjYWxsSW5kZXgsIG1lc3NhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1pdENhbGxXaXRoTW9zdE1lc3NhZ2VzKCk7XG4gICAgICAgICAgICAvLyBjb21taXRDYWxsV2l0aE1vc3RNZXNzYWdlcyBjYW4gZmFpbCBpZiB3ZSBhcmUgYmV0d2VlbiBwaW5nIGF0dGVtcHRzXG4gICAgICAgICAgICBpZiAodGhpcy5jb21taXR0ZWRDYWxsSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYWxsID0gdGhpcy51bmRlcmx5aW5nQ2FsbHNbdGhpcy5jb21taXR0ZWRDYWxsSW5kZXhdO1xuICAgICAgICAgICAgYnVmZmVyRW50cnkuY2FsbGJhY2sgPSBjb250ZXh0LmNhbGxiYWNrO1xuICAgICAgICAgICAgaWYgKGNhbGwuc3RhdGUgPT09ICdBQ1RJVkUnICYmIGNhbGwubmV4dE1lc3NhZ2VUb1NlbmQgPT09IG1lc3NhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgIGNhbGwuY2FsbC5zZW5kTWVzc2FnZVdpdGhDb250ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGlsZFdyaXRlQ29tcGxldGVkKHRoaXMuY29tbWl0dGVkQ2FsbEluZGV4LCBtZXNzYWdlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sIG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0UmVhZCgpIHtcbiAgICAgICAgdGhpcy50cmFjZSgnc3RhcnRSZWFkIGNhbGxlZCcpO1xuICAgICAgICB0aGlzLnJlYWRTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCB1bmRlcmx5aW5nQ2FsbCBvZiB0aGlzLnVuZGVybHlpbmdDYWxscykge1xuICAgICAgICAgICAgaWYgKCh1bmRlcmx5aW5nQ2FsbCA9PT0gbnVsbCB8fCB1bmRlcmx5aW5nQ2FsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdW5kZXJseWluZ0NhbGwuc3RhdGUpID09PSAnQUNUSVZFJykge1xuICAgICAgICAgICAgICAgIHVuZGVybHlpbmdDYWxsLmNhbGwuc3RhcnRSZWFkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFsZkNsb3NlKCkge1xuICAgICAgICB0aGlzLnRyYWNlKCdoYWxmQ2xvc2UgY2FsbGVkJyk7XG4gICAgICAgIGNvbnN0IGhhbGZDbG9zZUluZGV4ID0gdGhpcy5nZXROZXh0QnVmZmVySW5kZXgoKTtcbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlci5wdXNoKHtcbiAgICAgICAgICAgIGVudHJ5VHlwZTogJ0hBTEZfQ0xPU0UnLFxuICAgICAgICAgICAgYWxsb2NhdGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbCBvZiB0aGlzLnVuZGVybHlpbmdDYWxscykge1xuICAgICAgICAgICAgaWYgKChjYWxsID09PSBudWxsIHx8IGNhbGwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGwuc3RhdGUpID09PSAnQUNUSVZFJykge1xuICAgICAgICAgICAgICAgIC8vIFNlbmQgaGFsZkNsb3NlIHRvIGNhbGwgd2hlbiBlaXRoZXI6XG4gICAgICAgICAgICAgICAgLy8gLSBuZXh0TWVzc2FnZVRvU2VuZCA9PT0gaGFsZkNsb3NlSW5kZXggLSAxOiBsYXN0IG1lc3NhZ2Ugc2VudCwgY2FsbGJhY2sgcGVuZGluZyAob3B0aW1pemF0aW9uKVxuICAgICAgICAgICAgICAgIC8vIC0gbmV4dE1lc3NhZ2VUb1NlbmQgPT09IGhhbGZDbG9zZUluZGV4OiBhbGwgbWVzc2FnZXMgc2VudCBhbmQgYWNrbm93bGVkZ2VkXG4gICAgICAgICAgICAgICAgaWYgKGNhbGwubmV4dE1lc3NhZ2VUb1NlbmQgPT09IGhhbGZDbG9zZUluZGV4XG4gICAgICAgICAgICAgICAgICAgIHx8IGNhbGwubmV4dE1lc3NhZ2VUb1NlbmQgPT09IGhhbGZDbG9zZUluZGV4IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdTZW5kaW5nIGhhbGZDbG9zZSBpbW1lZGlhdGVseSB0byBjaGlsZCBbJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsLmNhbGwuZ2V0Q2FsbE51bWJlcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICddIC0gYWxsIG1lc3NhZ2VzIGFscmVhZHkgc2VudCcpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsLm5leHRNZXNzYWdlVG9TZW5kICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhbGwuY2FsbC5oYWxmQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBoYWxmQ2xvc2Ugd2lsbCBiZSBzZW50IGJ5IHNlbmROZXh0Q2hpbGRNZXNzYWdlIHdoZW4gbWVzc2FnZSBjYWxsYmFja3MgY29tcGxldGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIGdldE1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kTmFtZTtcbiAgICB9XG4gICAgZ2V0SG9zdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9zdDtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbW1pdHRlZENhbGxJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5kZXJseWluZ0NhbGxzW3RoaXMuY29tbWl0dGVkQ2FsbEluZGV4XS5jYWxsLmdldEF1dGhDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuUmV0cnlpbmdDYWxsID0gUmV0cnlpbmdDYWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnlpbmctY2FsbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDIyIGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhc2VTdWJjaGFubmVsV3JhcHBlciA9IHZvaWQgMDtcbmNsYXNzIEJhc2VTdWJjaGFubmVsV3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IoY2hpbGQpIHtcbiAgICAgICAgdGhpcy5jaGlsZCA9IGNoaWxkO1xuICAgICAgICB0aGlzLmhlYWx0aHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmhlYWx0aExpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5yZWZjb3VudCA9IDA7XG4gICAgICAgIHRoaXMuZGF0YVdhdGNoZXJzID0gbmV3IFNldCgpO1xuICAgICAgICBjaGlsZC5hZGRIZWFsdGhTdGF0ZVdhdGNoZXIoY2hpbGRIZWFsdGh5ID0+IHtcbiAgICAgICAgICAgIC8qIEEgY2hhbmdlIHRvIHRoZSBjaGlsZCBoZWFsdGggc3RhdGUgb25seSBhZmZlY3RzIHRoaXMgd3JhcHBlcidzIG92ZXJhbGxcbiAgICAgICAgICAgICAqIGhlYWx0aCBzdGF0ZSBpZiB0aGlzIHdyYXBwZXIgaXMgcmVwb3J0aW5nIGhlYWx0aHkuICovXG4gICAgICAgICAgICBpZiAodGhpcy5oZWFsdGh5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVIZWFsdGhMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZUhlYWx0aExpc3RlbmVycygpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmhlYWx0aExpc3RlbmVycykge1xuICAgICAgICAgICAgbGlzdGVuZXIodGhpcy5pc0hlYWx0aHkoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29ubmVjdGl2aXR5U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkLmdldENvbm5lY3Rpdml0eVN0YXRlKCk7XG4gICAgfVxuICAgIGFkZENvbm5lY3Rpdml0eVN0YXRlTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5jaGlsZC5hZGRDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICB9XG4gICAgcmVtb3ZlQ29ubmVjdGl2aXR5U3RhdGVMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmNoaWxkLnJlbW92ZUNvbm5lY3Rpdml0eVN0YXRlTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIH1cbiAgICBzdGFydENvbm5lY3RpbmcoKSB7XG4gICAgICAgIHRoaXMuY2hpbGQuc3RhcnRDb25uZWN0aW5nKCk7XG4gICAgfVxuICAgIGdldEFkZHJlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkLmdldEFkZHJlc3MoKTtcbiAgICB9XG4gICAgdGhyb3R0bGVLZWVwYWxpdmUobmV3S2VlcGFsaXZlVGltZSkge1xuICAgICAgICB0aGlzLmNoaWxkLnRocm90dGxlS2VlcGFsaXZlKG5ld0tlZXBhbGl2ZVRpbWUpO1xuICAgIH1cbiAgICByZWYoKSB7XG4gICAgICAgIHRoaXMuY2hpbGQucmVmKCk7XG4gICAgICAgIHRoaXMucmVmY291bnQgKz0gMTtcbiAgICB9XG4gICAgdW5yZWYoKSB7XG4gICAgICAgIHRoaXMuY2hpbGQudW5yZWYoKTtcbiAgICAgICAgdGhpcy5yZWZjb3VudCAtPSAxO1xuICAgICAgICBpZiAodGhpcy5yZWZjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCB3YXRjaGVyIG9mIHRoaXMuZGF0YVdhdGNoZXJzKSB7XG4gICAgICAgICAgICB3YXRjaGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDaGFubmVselJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGQuZ2V0Q2hhbm5lbHpSZWYoKTtcbiAgICB9XG4gICAgaXNIZWFsdGh5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGh5ICYmIHRoaXMuY2hpbGQuaXNIZWFsdGh5KCk7XG4gICAgfVxuICAgIGFkZEhlYWx0aFN0YXRlV2F0Y2hlcihsaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmhlYWx0aExpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIH1cbiAgICByZW1vdmVIZWFsdGhTdGF0ZVdhdGNoZXIobGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5oZWFsdGhMaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICB9XG4gICAgYWRkRGF0YVdhdGNoZXIoZGF0YVdhdGNoZXIpIHtcbiAgICAgICAgZGF0YVdhdGNoZXIuc2V0U3ViY2hhbm5lbCh0aGlzLmdldFJlYWxTdWJjaGFubmVsKCkpO1xuICAgICAgICB0aGlzLmRhdGFXYXRjaGVycy5hZGQoZGF0YVdhdGNoZXIpO1xuICAgIH1cbiAgICBzZXRIZWFsdGh5KGhlYWx0aHkpIHtcbiAgICAgICAgaWYgKGhlYWx0aHkgIT09IHRoaXMuaGVhbHRoeSkge1xuICAgICAgICAgICAgdGhpcy5oZWFsdGh5ID0gaGVhbHRoeTtcbiAgICAgICAgICAgIC8qIEEgY2hhbmdlIHRvIHRoaXMgd3JhcHBlcidzIGhlYWx0aCBzdGF0ZSBvbmx5IGFmZmVjdHMgdGhlIG92ZXJhbGxcbiAgICAgICAgICAgICAqIHJlcG9ydGVkIGhlYWx0aCBzdGF0ZSBpZiB0aGUgY2hpbGQgaXMgaGVhbHRoeS4gKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkLmlzSGVhbHRoeSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVIZWFsdGhMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRSZWFsU3ViY2hhbm5lbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGQuZ2V0UmVhbFN1YmNoYW5uZWwoKTtcbiAgICB9XG4gICAgcmVhbFN1YmNoYW5uZWxFcXVhbHMob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVhbFN1YmNoYW5uZWwoKSA9PT0gb3RoZXIuZ2V0UmVhbFN1YmNoYW5uZWwoKTtcbiAgICB9XG4gICAgZ2V0Q2FsbENyZWRlbnRpYWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZC5nZXRDYWxsQ3JlZGVudGlhbHMoKTtcbiAgICB9XG4gICAgZ2V0Q2hhbm5lbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGQuZ2V0Q2hhbm5lbCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzZVN1YmNoYW5uZWxXcmFwcGVyID0gQmFzZVN1YmNoYW5uZWxXcmFwcGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3ViY2hhbm5lbC1pbnRlcmZhY2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnRlcm5hbENoYW5uZWwgPSBleHBvcnRzLlNVQkNIQU5ORUxfQVJHU19FWENMVURFX0tFWV9QUkVGSVggPSB2b2lkIDA7XG5jb25zdCBjaGFubmVsX2NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9jaGFubmVsLWNyZWRlbnRpYWxzXCIpO1xuY29uc3QgcmVzb2x2aW5nX2xvYWRfYmFsYW5jZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmluZy1sb2FkLWJhbGFuY2VyXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9wb29sXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLXBvb2xcIik7XG5jb25zdCBwaWNrZXJfMSA9IHJlcXVpcmUoXCIuL3BpY2tlclwiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZmlsdGVyX3N0YWNrXzEgPSByZXF1aXJlKFwiLi9maWx0ZXItc3RhY2tcIik7XG5jb25zdCBjb21wcmVzc2lvbl9maWx0ZXJfMSA9IHJlcXVpcmUoXCIuL2NvbXByZXNzaW9uLWZpbHRlclwiKTtcbmNvbnN0IHJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlclwiKTtcbmNvbnN0IGxvZ2dpbmdfMSA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCBodHRwX3Byb3h5XzEgPSByZXF1aXJlKFwiLi9odHRwX3Byb3h5XCIpO1xuY29uc3QgdXJpX3BhcnNlcl8xID0gcmVxdWlyZShcIi4vdXJpLXBhcnNlclwiKTtcbmNvbnN0IGNvbm5lY3Rpdml0eV9zdGF0ZV8xID0gcmVxdWlyZShcIi4vY29ubmVjdGl2aXR5LXN0YXRlXCIpO1xuY29uc3QgY2hhbm5lbHpfMSA9IHJlcXVpcmUoXCIuL2NoYW5uZWx6XCIpO1xuY29uc3QgbG9hZF9iYWxhbmNpbmdfY2FsbF8xID0gcmVxdWlyZShcIi4vbG9hZC1iYWxhbmNpbmctY2FsbFwiKTtcbmNvbnN0IGRlYWRsaW5lXzEgPSByZXF1aXJlKFwiLi9kZWFkbGluZVwiKTtcbmNvbnN0IHJlc29sdmluZ19jYWxsXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZpbmctY2FsbFwiKTtcbmNvbnN0IGNhbGxfbnVtYmVyXzEgPSByZXF1aXJlKFwiLi9jYWxsLW51bWJlclwiKTtcbmNvbnN0IGNvbnRyb2xfcGxhbmVfc3RhdHVzXzEgPSByZXF1aXJlKFwiLi9jb250cm9sLXBsYW5lLXN0YXR1c1wiKTtcbmNvbnN0IHJldHJ5aW5nX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3JldHJ5aW5nLWNhbGxcIik7XG5jb25zdCBzdWJjaGFubmVsX2ludGVyZmFjZV8xID0gcmVxdWlyZShcIi4vc3ViY2hhbm5lbC1pbnRlcmZhY2VcIik7XG4vKipcbiAqIFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL3RpbWVycy5odG1sI3RpbWVyc19zZXRpbnRlcnZhbF9jYWxsYmFja19kZWxheV9hcmdzXG4gKi9cbmNvbnN0IE1BWF9USU1FT1VUX1RJTUUgPSAyMTQ3NDgzNjQ3O1xuY29uc3QgTUlOX0lETEVfVElNRU9VVF9NUyA9IDEwMDA7XG4vLyAzMCBtaW51dGVzXG5jb25zdCBERUZBVUxUX0lETEVfVElNRU9VVF9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgUkVUUllfVEhST1RUTEVSX01BUCA9IG5ldyBNYXAoKTtcbmNvbnN0IERFRkFVTFRfUkVUUllfQlVGRkVSX1NJWkVfQllURVMgPSAxIDw8IDI0OyAvLyAxNiBNQlxuY29uc3QgREVGQVVMVF9QRVJfUlBDX1JFVFJZX0JVRkZFUl9TSVpFX0JZVEVTID0gMSA8PCAyMDsgLy8gMSBNQlxuY2xhc3MgQ2hhbm5lbFN1YmNoYW5uZWxXcmFwcGVyIGV4dGVuZHMgc3ViY2hhbm5lbF9pbnRlcmZhY2VfMS5CYXNlU3ViY2hhbm5lbFdyYXBwZXIge1xuICAgIGNvbnN0cnVjdG9yKGNoaWxkU3ViY2hhbm5lbCwgY2hhbm5lbCkge1xuICAgICAgICBzdXBlcihjaGlsZFN1YmNoYW5uZWwpO1xuICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgICAgICB0aGlzLnJlZkNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsU3RhdGVMaXN0ZW5lciA9IChzdWJjaGFubmVsLCBwcmV2aW91c1N0YXRlLCBuZXdTdGF0ZSwga2VlcGFsaXZlVGltZSkgPT4ge1xuICAgICAgICAgICAgY2hhbm5lbC50aHJvdHRsZUtlZXBhbGl2ZShrZWVwYWxpdmVUaW1lKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVmKCkge1xuICAgICAgICBpZiAodGhpcy5yZWZDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZC5hZGRDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyKHRoaXMuc3ViY2hhbm5lbFN0YXRlTGlzdGVuZXIpO1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsLmFkZFdyYXBwZWRTdWJjaGFubmVsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbGQucmVmKCk7XG4gICAgICAgIHRoaXMucmVmQ291bnQgKz0gMTtcbiAgICB9XG4gICAgdW5yZWYoKSB7XG4gICAgICAgIHRoaXMuY2hpbGQudW5yZWYoKTtcbiAgICAgICAgdGhpcy5yZWZDb3VudCAtPSAxO1xuICAgICAgICBpZiAodGhpcy5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkLnJlbW92ZUNvbm5lY3Rpdml0eVN0YXRlTGlzdGVuZXIodGhpcy5zdWJjaGFubmVsU3RhdGVMaXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwucmVtb3ZlV3JhcHBlZFN1YmNoYW5uZWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBTaHV0ZG93blBpY2tlciB7XG4gICAgcGljayhwaWNrQXJncykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGlja1Jlc3VsdFR5cGU6IHBpY2tlcl8xLlBpY2tSZXN1bHRUeXBlLkRST1AsXG4gICAgICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogJ0NoYW5uZWwgY2xvc2VkIGJlZm9yZSBjYWxsIHN0YXJ0ZWQnLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ViY2hhbm5lbDogbnVsbCxcbiAgICAgICAgICAgIG9uQ2FsbFN0YXJ0ZWQ6IG51bGwsXG4gICAgICAgICAgICBvbkNhbGxFbmRlZDogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU1VCQ0hBTk5FTF9BUkdTX0VYQ0xVREVfS0VZX1BSRUZJWCA9ICdncnBjLmludGVybmFsLm5vX3N1YmNoYW5uZWwnO1xuY2xhc3MgQ2hhbm5lbHpJbmZvVHJhY2tlciB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLnRyYWNlID0gbmV3IGNoYW5uZWx6XzEuQ2hhbm5lbHpUcmFjZSgpO1xuICAgICAgICB0aGlzLmNhbGxUcmFja2VyID0gbmV3IGNoYW5uZWx6XzEuQ2hhbm5lbHpDYWxsVHJhY2tlcigpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2hpbGRyZW5UcmFja2VyKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFO1xuICAgIH1cbiAgICBnZXRDaGFubmVsekluZm9DYWxsYmFjaygpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICB0cmFjZTogdGhpcy50cmFjZSxcbiAgICAgICAgICAgICAgICBjYWxsVHJhY2tlcjogdGhpcy5jYWxsVHJhY2tlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlblRyYWNrZXIuZ2V0Q2hpbGRMaXN0cygpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbn1cbmNsYXNzIEludGVybmFsQ2hhbm5lbCB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0LCBjcmVkZW50aWFscywgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZjtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpdml0eVN0YXRlID0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGlja2VyID0gbmV3IHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYWxscyBxdWV1ZWQgdXAgdG8gZ2V0IGEgY2FsbCBjb25maWcuIFNob3VsZCBvbmx5IGJlIHBvcHVsYXRlZCBiZWZvcmUgdGhlXG4gICAgICAgICAqIGZpcnN0IHRpbWUgdGhlIHJlc29sdmVyIHJldHVybnMgYSByZXN1bHQsIHdoaWNoIGluY2x1ZGVzIHRoZSBDb25maWdTZWxlY3Rvci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29uZmlnU2VsZWN0aW9uUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5waWNrUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5jb25uZWN0aXZpdHlTdGF0ZVdhdGNoZXJzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIHRpbWVyIGRvZXMgbm90IGRvIGFueXRoaW5nIG9uIGl0cyBvd24uIEl0cyBwdXJwb3NlIGlzIHRvIGhvbGQgdGhlXG4gICAgICAgICAqIGV2ZW50IGxvb3Agb3BlbiB3aGlsZSB0aGVyZSBhcmUgYW55IHBlbmRpbmcgY2FsbHMgZm9yIHRoZSBjaGFubmVsIHRoYXRcbiAgICAgICAgICogaGF2ZSBub3QgeWV0IGJlZW4gYXNzaWduZWQgdG8gc3BlY2lmaWMgc3ViY2hhbm5lbHMuIEluIG90aGVyIHdvcmRzLFxuICAgICAgICAgKiB0aGUgaW52YXJpYW50IGlzIHRoYXQgY2FsbFJlZlRpbWVyIGlzIHJlZmZlZCBpZiBhbmQgb25seSBpZiBwaWNrUXVldWVcbiAgICAgICAgICogaXMgbm9uLWVtcHR5LiBJbiBhZGRpdGlvbiwgdGhlIHRpbWVyIGlzIG51bGwgd2hpbGUgdGhlIHN0YXRlIGlzIElETEUgb3JcbiAgICAgICAgICogU0hVVERPV04gYW5kIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNhbGxzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYWxsUmVmVGltZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbmZpZ1NlbGVjdG9yID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgdGhlIGVycm9yIGZyb20gdGhlIG5hbWUgcmVzb2x2ZXIgaWYgaXQgZmFpbGVkIG1vc3QgcmVjZW50bHkuIEl0XG4gICAgICAgICAqIGlzIG9ubHkgdXNlZCB0byBlbmQgY2FsbHMgdGhhdCBzdGFydCB3aGlsZSB0aGVyZSBpcyBubyBjb25maWcgc2VsZWN0b3JcbiAgICAgICAgICogYW5kIHRoZSBuYW1lIHJlc29sdmVyIGlzIGluIGJhY2tvZmYsIHNvIGl0IHNob3VsZCBiZSBudWxsZWQgaWZcbiAgICAgICAgICogY29uZmlnU2VsZWN0b3IgYmVjb21lcyBzZXQgb3IgdGhlIGNoYW5uZWwgc3RhdGUgYmVjb21lcyBhbnl0aGluZyBvdGhlclxuICAgICAgICAgKiB0aGFuIFRSQU5TSUVOVF9GQUlMVVJFLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb2x1dGlvbkVycm9yID0gbnVsbDtcbiAgICAgICAgdGhpcy53cmFwcGVkU3ViY2hhbm5lbHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuY2FsbENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5pZGxlVGltZXIgPSBudWxsO1xuICAgICAgICAvLyBDaGFubmVseiBpbmZvXG4gICAgICAgIHRoaXMuY2hhbm5lbHpFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJhbmRvbWx5IGdlbmVyYXRlZCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbmZpZyBzZWxlY3RvciwgZm9yIHVzZSBieVxuICAgICAgICAgKiByaW5nX2hhc2ggaW4geERTLiBBbiBpbnRlZ2VyIGRpc3RyaWJ1dGVkIGFwcHJveGltYXRlbHkgdW5pZm9ybWx5IGJldHdlZW5cbiAgICAgICAgICogMCBhbmQgTUFYX1NBRkVfSU5URUdFUi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmFuZG9tQ2hhbm5lbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NoYW5uZWwgdGFyZ2V0IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShjcmVkZW50aWFscyBpbnN0YW5jZW9mIGNoYW5uZWxfY3JlZGVudGlhbHNfMS5DaGFubmVsQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDaGFubmVsIGNyZWRlbnRpYWxzIG11c3QgYmUgYSBDaGFubmVsQ3JlZGVudGlhbHMgb2JqZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDaGFubmVsIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5uZWx6SW5mb1RyYWNrZXIgPSBuZXcgQ2hhbm5lbHpJbmZvVHJhY2tlcih0YXJnZXQpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFRhcmdldFVyaSA9ICgwLCB1cmlfcGFyc2VyXzEucGFyc2VVcmkpKHRhcmdldCk7XG4gICAgICAgIGlmIChvcmlnaW5hbFRhcmdldFVyaSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgdGFyZ2V0IG5hbWUgXCIke3RhcmdldH1cImApO1xuICAgICAgICB9XG4gICAgICAgIC8qIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB0YXJnZXQgaGFzIGEgc2NoZW1lIHRoYXQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZVxuICAgICAgICAgKiByZXNvbHZlciAqL1xuICAgICAgICBjb25zdCBkZWZhdWx0U2NoZW1lTWFwUmVzdWx0ID0gKDAsIHJlc29sdmVyXzEubWFwVXJpRGVmYXVsdFNjaGVtZSkob3JpZ2luYWxUYXJnZXRVcmkpO1xuICAgICAgICBpZiAoZGVmYXVsdFNjaGVtZU1hcFJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGRlZmF1bHQgc2NoZW1lIGZvciB0YXJnZXQgbmFtZSBcIiR7dGFyZ2V0fVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1snZ3JwYy5lbmFibGVfY2hhbm5lbHonXSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsekVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5uZWx6UmVmID0gKDAsIGNoYW5uZWx6XzEucmVnaXN0ZXJDaGFubmVsekNoYW5uZWwpKHRhcmdldCwgdGhpcy5jaGFubmVsekluZm9UcmFja2VyLmdldENoYW5uZWx6SW5mb0NhbGxiYWNrKCksIHRoaXMuY2hhbm5lbHpFbmFibGVkKTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6SW5mb1RyYWNrZXIudHJhY2UuYWRkVHJhY2UoJ0NUX0lORk8nLCAnQ2hhbm5lbCBjcmVhdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1snZ3JwYy5kZWZhdWx0X2F1dGhvcml0eSddKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRBdXRob3JpdHkgPSB0aGlzLm9wdGlvbnNbJ2dycGMuZGVmYXVsdF9hdXRob3JpdHknXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEF1dGhvcml0eSA9ICgwLCByZXNvbHZlcl8xLmdldERlZmF1bHRBdXRob3JpdHkpKGRlZmF1bHRTY2hlbWVNYXBSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3h5TWFwUmVzdWx0ID0gKDAsIGh0dHBfcHJveHlfMS5tYXBQcm94eU5hbWUpKGRlZmF1bHRTY2hlbWVNYXBSZXN1bHQsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHByb3h5TWFwUmVzdWx0LnRhcmdldDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCBwcm94eU1hcFJlc3VsdC5leHRyYU9wdGlvbnMpO1xuICAgICAgICAvKiBUaGUgZ2xvYmFsIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGdldFN1YmNoYW5uZWxQb29sIGhhcyB0aGUgaW52ZXJzZSBtZWFuaW5nIHRvIHdoYXRcbiAgICAgICAgICogdGhlIGdycGMudXNlX2xvY2FsX3N1YmNoYW5uZWxfcG9vbCBjaGFubmVsIG9wdGlvbiBtZWFucy4gKi9cbiAgICAgICAgdGhpcy5zdWJjaGFubmVsUG9vbCA9ICgwLCBzdWJjaGFubmVsX3Bvb2xfMS5nZXRTdWJjaGFubmVsUG9vbCkoKChfYSA9IHRoaXMub3B0aW9uc1snZ3JwYy51c2VfbG9jYWxfc3ViY2hhbm5lbF9wb29sJ10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApID09PSAwKTtcbiAgICAgICAgdGhpcy5yZXRyeUJ1ZmZlclRyYWNrZXIgPSBuZXcgcmV0cnlpbmdfY2FsbF8xLk1lc3NhZ2VCdWZmZXJUcmFja2VyKChfYiA9IHRoaXMub3B0aW9uc1snZ3JwYy5yZXRyeV9idWZmZXJfc2l6ZSddKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBERUZBVUxUX1JFVFJZX0JVRkZFUl9TSVpFX0JZVEVTLCAoX2MgPSB0aGlzLm9wdGlvbnNbJ2dycGMucGVyX3JwY19yZXRyeV9idWZmZXJfc2l6ZSddKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBERUZBVUxUX1BFUl9SUENfUkVUUllfQlVGRkVSX1NJWkVfQllURVMpO1xuICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWUgPSAoX2QgPSB0aGlzLm9wdGlvbnNbJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnXSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogLTE7XG4gICAgICAgIHRoaXMuaWRsZVRpbWVvdXRNcyA9IE1hdGgubWF4KChfZSA9IHRoaXMub3B0aW9uc1snZ3JwYy5jbGllbnRfaWRsZV90aW1lb3V0X21zJ10pICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IERFRkFVTFRfSURMRV9USU1FT1VUX01TLCBNSU5fSURMRV9USU1FT1VUX01TKTtcbiAgICAgICAgY29uc3QgY2hhbm5lbENvbnRyb2xIZWxwZXIgPSB7XG4gICAgICAgICAgICBjcmVhdGVTdWJjaGFubmVsOiAoc3ViY2hhbm5lbEFkZHJlc3MsIHN1YmNoYW5uZWxBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmluYWxTdWJjaGFubmVsQXJncyA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmNoYW5uZWxBcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGV4cG9ydHMuU1VCQ0hBTk5FTF9BUkdTX0VYQ0xVREVfS0VZX1BSRUZJWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsU3ViY2hhbm5lbEFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YmNoYW5uZWwgPSB0aGlzLnN1YmNoYW5uZWxQb29sLmdldE9yQ3JlYXRlU3ViY2hhbm5lbCh0aGlzLnRhcmdldCwgc3ViY2hhbm5lbEFkZHJlc3MsIGZpbmFsU3ViY2hhbm5lbEFyZ3MsIHRoaXMuY3JlZGVudGlhbHMpO1xuICAgICAgICAgICAgICAgIHN1YmNoYW5uZWwudGhyb3R0bGVLZWVwYWxpdmUodGhpcy5rZWVwYWxpdmVUaW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFubmVsekVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsekluZm9UcmFja2VyLnRyYWNlLmFkZFRyYWNlKCdDVF9JTkZPJywgJ0NyZWF0ZWQgc3ViY2hhbm5lbCBvciB1c2VkIGV4aXN0aW5nIHN1YmNoYW5uZWwnLCBzdWJjaGFubmVsLmdldENoYW5uZWx6UmVmKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkU3ViY2hhbm5lbCA9IG5ldyBDaGFubmVsU3ViY2hhbm5lbFdyYXBwZXIoc3ViY2hhbm5lbCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRTdWJjaGFubmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiAoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBpY2tlciA9IHBpY2tlcjtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZUNvcHkgPSB0aGlzLnBpY2tRdWV1ZS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja1F1ZXVlID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXVlQ29weS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFJlZlRpbWVyVW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsIG9mIHF1ZXVlQ29weSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsLmRvUGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eVN0YXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0UmVyZXNvbHV0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzb2x2aW5nIGxvYWQgYmFsYW5jZXIgc2hvdWxkIG5ldmVyIGNhbGwgcmVxdWVzdFJlcmVzb2x1dGlvbicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZENoYW5uZWx6Q2hpbGQ6IChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYW5uZWx6RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWx6SW5mb1RyYWNrZXIuY2hpbGRyZW5UcmFja2VyLnJlZkNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlQ2hhbm5lbHpDaGlsZDogKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpJbmZvVHJhY2tlci5jaGlsZHJlblRyYWNrZXIudW5yZWZDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXNvbHZpbmdMb2FkQmFsYW5jZXIgPSBuZXcgcmVzb2x2aW5nX2xvYWRfYmFsYW5jZXJfMS5SZXNvbHZpbmdMb2FkQmFsYW5jZXIodGhpcy50YXJnZXQsIGNoYW5uZWxDb250cm9sSGVscGVyLCB0aGlzLm9wdGlvbnMsIChzZXJ2aWNlQ29uZmlnLCBjb25maWdTZWxlY3RvcikgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VDb25maWcucmV0cnlUaHJvdHRsaW5nKSB7XG4gICAgICAgICAgICAgICAgUkVUUllfVEhST1RUTEVSX01BUC5zZXQodGhpcy5nZXRUYXJnZXQoKSwgbmV3IHJldHJ5aW5nX2NhbGxfMS5SZXRyeVRocm90dGxlcihzZXJ2aWNlQ29uZmlnLnJldHJ5VGhyb3R0bGluZy5tYXhUb2tlbnMsIHNlcnZpY2VDb25maWcucmV0cnlUaHJvdHRsaW5nLnRva2VuUmF0aW8sIFJFVFJZX1RIUk9UVExFUl9NQVAuZ2V0KHRoaXMuZ2V0VGFyZ2V0KCkpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBSRVRSWV9USFJPVFRMRVJfTUFQLmRlbGV0ZSh0aGlzLmdldFRhcmdldCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5uZWx6RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpJbmZvVHJhY2tlci50cmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdBZGRyZXNzIHJlc29sdXRpb24gc3VjY2VlZGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSB0aGlzLmNvbmZpZ1NlbGVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudW5yZWYoKTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VsZWN0b3IgPSBjb25maWdTZWxlY3RvcjtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdXRpb25FcnJvciA9IG51bGw7XG4gICAgICAgICAgICAvKiBXZSBwcm9jZXNzIHRoZSBxdWV1ZSBhc3luY2hyb25vdXNseSB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAgICAgICAgICogbG9hZCBiYWxhbmNlciB1cGRhdGUgaGFzIGNvbXBsZXRlZC4gKi9cbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsUXVldWUgPSB0aGlzLmNvbmZpZ1NlbGVjdGlvblF1ZXVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnU2VsZWN0aW9uUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFJlZlRpbWVyVW5yZWYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsIG9mIGxvY2FsUXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbC5nZXRDb25maWcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5uZWx6RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpJbmZvVHJhY2tlci50cmFjZS5hZGRUcmFjZSgnQ1RfV0FSTklORycsICdBZGRyZXNzIHJlc29sdXRpb24gZmFpbGVkIHdpdGggY29kZSAnICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNvZGUgK1xuICAgICAgICAgICAgICAgICAgICAnIGFuZCBkZXRhaWxzIFwiJyArXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kZXRhaWxzICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWdTZWxlY3Rpb25RdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnTmFtZSByZXNvbHV0aW9uIGZhaWxlZCB3aXRoIGNhbGxzIHF1ZXVlZCBmb3IgY29uZmlnIHNlbGVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnU2VsZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNvbHV0aW9uRXJyb3IgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgwLCBjb250cm9sX3BsYW5lX3N0YXR1c18xLnJlc3RyaWN0Q29udHJvbFBsYW5lU3RhdHVzQ29kZSkoc3RhdHVzLmNvZGUsIHN0YXR1cy5kZXRhaWxzKSksIHsgbWV0YWRhdGE6IHN0YXR1cy5tZXRhZGF0YSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsUXVldWUgPSB0aGlzLmNvbmZpZ1NlbGVjdGlvblF1ZXVlO1xuICAgICAgICAgICAgdGhpcy5jb25maWdTZWxlY3Rpb25RdWV1ZSA9IFtdO1xuICAgICAgICAgICAgaWYgKGxvY2FsUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbFJlZlRpbWVyVW5yZWYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBsb2NhbFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY2FsbC5yZXBvcnRSZXNvbHZlckVycm9yKHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbHRlclN0YWNrRmFjdG9yeSA9IG5ldyBmaWx0ZXJfc3RhY2tfMS5GaWx0ZXJTdGFja0ZhY3RvcnkoW1xuICAgICAgICAgICAgbmV3IGNvbXByZXNzaW9uX2ZpbHRlcl8xLkNvbXByZXNzaW9uRmlsdGVyRmFjdG9yeSh0aGlzLCB0aGlzLm9wdGlvbnMpLFxuICAgICAgICBdKTtcbiAgICAgICAgdGhpcy50cmFjZSgnQ2hhbm5lbCBjb25zdHJ1Y3RlZCB3aXRoIG9wdGlvbnMgJyArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgaWYgKCgwLCBsb2dnaW5nXzEuaXNUcmFjZXJFbmFibGVkKSgnY2hhbm5lbF9zdGFja3RyYWNlJykpIHtcbiAgICAgICAgICAgICgwLCBsb2dnaW5nXzEudHJhY2UpKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgJ2NoYW5uZWxfc3RhY2t0cmFjZScsICcoJyArXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFubmVselJlZi5pZCArXG4gICAgICAgICAgICAgICAgJykgJyArXG4gICAgICAgICAgICAgICAgJ0NoYW5uZWwgY29uc3RydWN0ZWQgXFxuJyArXG4gICAgICAgICAgICAgICAgKChfZiA9IGVycm9yLnN0YWNrKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Yuc3Vic3RyaW5nKGVycm9yLnN0YWNrLmluZGV4T2YoJ1xcbicpICsgMSkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWVzdGFtcCA9IG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIHRyYWNlKHRleHQsIHZlcmJvc2l0eU92ZXJyaWRlKSB7XG4gICAgICAgICgwLCBsb2dnaW5nXzEudHJhY2UpKHZlcmJvc2l0eU92ZXJyaWRlICE9PSBudWxsICYmIHZlcmJvc2l0eU92ZXJyaWRlICE9PSB2b2lkIDAgPyB2ZXJib3NpdHlPdmVycmlkZSA6IGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgJ2NoYW5uZWwnLCAnKCcgKyB0aGlzLmNoYW5uZWx6UmVmLmlkICsgJykgJyArICgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHRoaXMudGFyZ2V0KSArICcgJyArIHRleHQpO1xuICAgIH1cbiAgICBjYWxsUmVmVGltZXJSZWYoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGxSZWZUaW1lcikge1xuICAgICAgICAgICAgdGhpcy5jYWxsUmVmVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IH0sIE1BWF9USU1FT1VUX1RJTUUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBoYXNSZWYgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QsIGFsd2F5cyBydW4gdGhlIGNvZGVcbiAgICAgICAgaWYgKCEoKF9iID0gKF9hID0gdGhpcy5jYWxsUmVmVGltZXIpLmhhc1JlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpKSkge1xuICAgICAgICAgICAgdGhpcy50cmFjZSgnY2FsbFJlZlRpbWVyLnJlZiB8IGNvbmZpZ1NlbGVjdGlvblF1ZXVlLmxlbmd0aD0nICtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1NlbGVjdGlvblF1ZXVlLmxlbmd0aCArXG4gICAgICAgICAgICAgICAgJyBwaWNrUXVldWUubGVuZ3RoPScgK1xuICAgICAgICAgICAgICAgIHRoaXMucGlja1F1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICAoX2QgPSAoX2MgPSB0aGlzLmNhbGxSZWZUaW1lcikucmVmKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FsbFJlZlRpbWVyVW5yZWYoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAvLyBJZiB0aGUgdGltZXIgb3IgdGhlIGhhc1JlZiBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCwgYWx3YXlzIHJ1biB0aGUgY29kZVxuICAgICAgICBpZiAoISgoX2EgPSB0aGlzLmNhbGxSZWZUaW1lcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhhc1JlZikgfHwgdGhpcy5jYWxsUmVmVGltZXIuaGFzUmVmKCkpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2UoJ2NhbGxSZWZUaW1lci51bnJlZiB8IGNvbmZpZ1NlbGVjdGlvblF1ZXVlLmxlbmd0aD0nICtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1NlbGVjdGlvblF1ZXVlLmxlbmd0aCArXG4gICAgICAgICAgICAgICAgJyBwaWNrUXVldWUubGVuZ3RoPScgK1xuICAgICAgICAgICAgICAgIHRoaXMucGlja1F1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICAoX2MgPSAoX2IgPSB0aGlzLmNhbGxSZWZUaW1lcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnVucmVmKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChfYik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ29ubmVjdGl2aXR5U3RhdGVXYXRjaGVyKHdhdGNoZXJPYmplY3QpIHtcbiAgICAgICAgY29uc3Qgd2F0Y2hlckluZGV4ID0gdGhpcy5jb25uZWN0aXZpdHlTdGF0ZVdhdGNoZXJzLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZSA9PT0gd2F0Y2hlck9iamVjdCk7XG4gICAgICAgIGlmICh3YXRjaGVySW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aXZpdHlTdGF0ZVdhdGNoZXJzLnNwbGljZSh3YXRjaGVySW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZVN0YXRlKG5ld1N0YXRlKSB7XG4gICAgICAgICgwLCBsb2dnaW5nXzEudHJhY2UpKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgJ2Nvbm5lY3Rpdml0eV9zdGF0ZScsICcoJyArXG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6UmVmLmlkICtcbiAgICAgICAgICAgICcpICcgK1xuICAgICAgICAgICAgKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykodGhpcy50YXJnZXQpICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZVt0aGlzLmNvbm5lY3Rpdml0eVN0YXRlXSArXG4gICAgICAgICAgICAnIC0+ICcgK1xuICAgICAgICAgICAgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbbmV3U3RhdGVdKTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWx6SW5mb1RyYWNrZXIudHJhY2UuYWRkVHJhY2UoJ0NUX0lORk8nLCAnQ29ubmVjdGl2aXR5IHN0YXRlIGNoYW5nZSB0byAnICsgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbbmV3U3RhdGVdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbm5lY3Rpdml0eVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIHRoaXMuY2hhbm5lbHpJbmZvVHJhY2tlci5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICBjb25zdCB3YXRjaGVyc0NvcHkgPSB0aGlzLmNvbm5lY3Rpdml0eVN0YXRlV2F0Y2hlcnMuc2xpY2UoKTtcbiAgICAgICAgZm9yIChjb25zdCB3YXRjaGVyT2JqZWN0IG9mIHdhdGNoZXJzQ29weSkge1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlICE9PSB3YXRjaGVyT2JqZWN0LmN1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh3YXRjaGVyT2JqZWN0LnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh3YXRjaGVyT2JqZWN0LnRpbWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb25uZWN0aXZpdHlTdGF0ZVdhdGNoZXIod2F0Y2hlck9iamVjdCk7XG4gICAgICAgICAgICAgICAgd2F0Y2hlck9iamVjdC5jYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdTdGF0ZSAhPT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdXRpb25FcnJvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3R0bGVLZWVwYWxpdmUobmV3S2VlcGFsaXZlVGltZSkge1xuICAgICAgICBpZiAobmV3S2VlcGFsaXZlVGltZSA+IHRoaXMua2VlcGFsaXZlVGltZSkge1xuICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lID0gbmV3S2VlcGFsaXZlVGltZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgd3JhcHBlZFN1YmNoYW5uZWwgb2YgdGhpcy53cmFwcGVkU3ViY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkU3ViY2hhbm5lbC50aHJvdHRsZUtlZXBhbGl2ZShuZXdLZWVwYWxpdmVUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRXcmFwcGVkU3ViY2hhbm5lbCh3cmFwcGVkU3ViY2hhbm5lbCkge1xuICAgICAgICB0aGlzLndyYXBwZWRTdWJjaGFubmVscy5hZGQod3JhcHBlZFN1YmNoYW5uZWwpO1xuICAgIH1cbiAgICByZW1vdmVXcmFwcGVkU3ViY2hhbm5lbCh3cmFwcGVkU3ViY2hhbm5lbCkge1xuICAgICAgICB0aGlzLndyYXBwZWRTdWJjaGFubmVscy5kZWxldGUod3JhcHBlZFN1YmNoYW5uZWwpO1xuICAgIH1cbiAgICBkb1BpY2sobWV0YWRhdGEsIGV4dHJhUGlja0luZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBpY2tlci5waWNrKHtcbiAgICAgICAgICAgIG1ldGFkYXRhOiBtZXRhZGF0YSxcbiAgICAgICAgICAgIGV4dHJhUGlja0luZm86IGV4dHJhUGlja0luZm8sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBxdWV1ZUNhbGxGb3JQaWNrKGNhbGwpIHtcbiAgICAgICAgdGhpcy5waWNrUXVldWUucHVzaChjYWxsKTtcbiAgICAgICAgdGhpcy5jYWxsUmVmVGltZXJSZWYoKTtcbiAgICB9XG4gICAgZ2V0Q29uZmlnKG1ldGhvZCwgbWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGl2aXR5U3RhdGUgIT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlNIVVRET1dOKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmluZ0xvYWRCYWxhbmNlci5leGl0SWRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ1NlbGVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnU2VsZWN0b3IuaW52b2tlKG1ldGhvZCwgbWV0YWRhdGEsIHRoaXMucmFuZG9tQ2hhbm5lbElkKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVzb2x1dGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHRoaXMuY3VycmVudFJlc29sdXRpb25FcnJvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05PTkUnLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWVDYWxsRm9yQ29uZmlnKGNhbGwpIHtcbiAgICAgICAgdGhpcy5jb25maWdTZWxlY3Rpb25RdWV1ZS5wdXNoKGNhbGwpO1xuICAgICAgICB0aGlzLmNhbGxSZWZUaW1lclJlZigpO1xuICAgIH1cbiAgICBlbnRlcklkbGUoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2aW5nTG9hZEJhbGFuY2VyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGlja2VyID0gbmV3IHBpY2tlcl8xLlF1ZXVlUGlja2VyKHRoaXMucmVzb2x2aW5nTG9hZEJhbGFuY2VyKTtcbiAgICAgICAgaWYgKHRoaXMuaWRsZVRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pZGxlVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5pZGxlVGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhbGxSZWZUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNhbGxSZWZUaW1lcik7XG4gICAgICAgICAgICB0aGlzLmNhbGxSZWZUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhcnRJZGxlVGltZW91dCh0aW1lb3V0TXMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5pZGxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBjYWxsLCB0aGUgY2hhbm5lbCB3aWxsIG5vdCBnbyBpZGxlIGZvciBhXG4gICAgICAgICAgICAgICAgICogcGVyaW9kIG9mIGF0IGxlYXN0IGlkbGVUaW1lb3V0TXMsIHNvIGNoZWNrIGFnYWluIGFmdGVyIHRoYXQgdGltZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0SWRsZVRpbWVvdXQodGhpcy5pZGxlVGltZW91dE1zKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgdGltZVNpbmNlTGFzdEFjdGl2aXR5ID0gbm93LnZhbHVlT2YoKSAtIHRoaXMubGFzdEFjdGl2aXR5VGltZXN0YW1wLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0QWN0aXZpdHkgPj0gdGhpcy5pZGxlVGltZW91dE1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnSWRsZSB0aW1lciB0cmlnZ2VyZWQgYWZ0ZXIgJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWRsZVRpbWVvdXRNcyArXG4gICAgICAgICAgICAgICAgICAgICdtcyBvZiBpbmFjdGl2aXR5Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRlcklkbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qIFdoZW5ldmVyIHRoZSB0aW1lciBmaXJlcyB3aXRoIHRoZSBsYXRlc3QgYWN0aXZpdHkgYmVpbmcgdG9vIHJlY2VudCxcbiAgICAgICAgICAgICAgICAgKiBzZXQgdGhlIHRpbWVyIGFnYWluIGZvciB0aGUgdGltZSB3aGVuIHRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgICogYWN0aXZpdHkgaXMgZXF1YWwgdG8gdGhlIHRpbWVvdXQuIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiB0aGUgdGltZXJcbiAgICAgICAgICAgICAgICAgKiBmaXJpbmcgbm8gbW9yZSB0aGFuIG9uY2UgZXZlcnkgaWRsZVRpbWVvdXRNcy8yIG9uIGF2ZXJhZ2UuICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydElkbGVUaW1lb3V0KHRoaXMuaWRsZVRpbWVvdXRNcyAtIHRpbWVTaW5jZUxhc3RBY3Rpdml0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuaWRsZVRpbWVyKS51bnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH1cbiAgICBtYXliZVN0YXJ0SWRsZVRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlTdGF0ZSAhPT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuU0hVVERPV04gJiZcbiAgICAgICAgICAgICF0aGlzLmlkbGVUaW1lcikge1xuICAgICAgICAgICAgdGhpcy5zdGFydElkbGVUaW1lb3V0KHRoaXMuaWRsZVRpbWVvdXRNcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DYWxsU3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWx6RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsekluZm9UcmFja2VyLmNhbGxUcmFja2VyLmFkZENhbGxTdGFydGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsQ291bnQgKz0gMTtcbiAgICB9XG4gICAgb25DYWxsRW5kKHN0YXR1cykge1xuICAgICAgICBpZiAodGhpcy5jaGFubmVsekVuYWJsZWQpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsekluZm9UcmFja2VyLmNhbGxUcmFja2VyLmFkZENhbGxTdWNjZWVkZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpJbmZvVHJhY2tlci5jYWxsVHJhY2tlci5hZGRDYWxsRmFpbGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsQ291bnQgLT0gMTtcbiAgICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLm1heWJlU3RhcnRJZGxlVGltZXIoKTtcbiAgICB9XG4gICAgY3JlYXRlTG9hZEJhbGFuY2luZ0NhbGwoY2FsbENvbmZpZywgbWV0aG9kLCBob3N0LCBjcmVkZW50aWFscywgZGVhZGxpbmUpIHtcbiAgICAgICAgY29uc3QgY2FsbE51bWJlciA9ICgwLCBjYWxsX251bWJlcl8xLmdldE5leHRDYWxsTnVtYmVyKSgpO1xuICAgICAgICB0aGlzLnRyYWNlKCdjcmVhdGVMb2FkQmFsYW5jaW5nQ2FsbCBbJyArIGNhbGxOdW1iZXIgKyAnXSBtZXRob2Q9XCInICsgbWV0aG9kICsgJ1wiJyk7XG4gICAgICAgIHJldHVybiBuZXcgbG9hZF9iYWxhbmNpbmdfY2FsbF8xLkxvYWRCYWxhbmNpbmdDYWxsKHRoaXMsIGNhbGxDb25maWcsIG1ldGhvZCwgaG9zdCwgY3JlZGVudGlhbHMsIGRlYWRsaW5lLCBjYWxsTnVtYmVyKTtcbiAgICB9XG4gICAgY3JlYXRlUmV0cnlpbmdDYWxsKGNhbGxDb25maWcsIG1ldGhvZCwgaG9zdCwgY3JlZGVudGlhbHMsIGRlYWRsaW5lKSB7XG4gICAgICAgIGNvbnN0IGNhbGxOdW1iZXIgPSAoMCwgY2FsbF9udW1iZXJfMS5nZXROZXh0Q2FsbE51bWJlcikoKTtcbiAgICAgICAgdGhpcy50cmFjZSgnY3JlYXRlUmV0cnlpbmdDYWxsIFsnICsgY2FsbE51bWJlciArICddIG1ldGhvZD1cIicgKyBtZXRob2QgKyAnXCInKTtcbiAgICAgICAgcmV0dXJuIG5ldyByZXRyeWluZ19jYWxsXzEuUmV0cnlpbmdDYWxsKHRoaXMsIGNhbGxDb25maWcsIG1ldGhvZCwgaG9zdCwgY3JlZGVudGlhbHMsIGRlYWRsaW5lLCBjYWxsTnVtYmVyLCB0aGlzLnJldHJ5QnVmZmVyVHJhY2tlciwgUkVUUllfVEhST1RUTEVSX01BUC5nZXQodGhpcy5nZXRUYXJnZXQoKSkpO1xuICAgIH1cbiAgICBjcmVhdGVSZXNvbHZpbmdDYWxsKG1ldGhvZCwgZGVhZGxpbmUsIGhvc3QsIHBhcmVudENhbGwsIHByb3BhZ2F0ZUZsYWdzKSB7XG4gICAgICAgIGNvbnN0IGNhbGxOdW1iZXIgPSAoMCwgY2FsbF9udW1iZXJfMS5nZXROZXh0Q2FsbE51bWJlcikoKTtcbiAgICAgICAgdGhpcy50cmFjZSgnY3JlYXRlUmVzb2x2aW5nQ2FsbCBbJyArXG4gICAgICAgICAgICBjYWxsTnVtYmVyICtcbiAgICAgICAgICAgICddIG1ldGhvZD1cIicgK1xuICAgICAgICAgICAgbWV0aG9kICtcbiAgICAgICAgICAgICdcIiwgZGVhZGxpbmU9JyArXG4gICAgICAgICAgICAoMCwgZGVhZGxpbmVfMS5kZWFkbGluZVRvU3RyaW5nKShkZWFkbGluZSkpO1xuICAgICAgICBjb25zdCBmaW5hbE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkZWFkbGluZTogZGVhZGxpbmUsXG4gICAgICAgICAgICBmbGFnczogcHJvcGFnYXRlRmxhZ3MgIT09IG51bGwgJiYgcHJvcGFnYXRlRmxhZ3MgIT09IHZvaWQgMCA/IHByb3BhZ2F0ZUZsYWdzIDogY29uc3RhbnRzXzEuUHJvcGFnYXRlLkRFRkFVTFRTLFxuICAgICAgICAgICAgaG9zdDogaG9zdCAhPT0gbnVsbCAmJiBob3N0ICE9PSB2b2lkIDAgPyBob3N0IDogdGhpcy5kZWZhdWx0QXV0aG9yaXR5LFxuICAgICAgICAgICAgcGFyZW50Q2FsbDogcGFyZW50Q2FsbCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FsbCA9IG5ldyByZXNvbHZpbmdfY2FsbF8xLlJlc29sdmluZ0NhbGwodGhpcywgbWV0aG9kLCBmaW5hbE9wdGlvbnMsIHRoaXMuZmlsdGVyU3RhY2tGYWN0b3J5LmNsb25lKCksIGNhbGxOdW1iZXIpO1xuICAgICAgICB0aGlzLm9uQ2FsbFN0YXJ0KCk7XG4gICAgICAgIGNhbGwuYWRkU3RhdHVzV2F0Y2hlcihzdGF0dXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNhbGxFbmQoc3RhdHVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLnJlc29sdmluZ0xvYWRCYWxhbmNlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuU0hVVERPV04pO1xuICAgICAgICB0aGlzLmN1cnJlbnRQaWNrZXIgPSBuZXcgU2h1dGRvd25QaWNrZXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsIG9mIHRoaXMuY29uZmlnU2VsZWN0aW9uUXVldWUpIHtcbiAgICAgICAgICAgIGNhbGwuY2FuY2VsV2l0aFN0YXR1cyhjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsICdDaGFubmVsIGNsb3NlZCBiZWZvcmUgY2FsbCBzdGFydGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWdTZWxlY3Rpb25RdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGwgb2YgdGhpcy5waWNrUXVldWUpIHtcbiAgICAgICAgICAgIGNhbGwuY2FuY2VsV2l0aFN0YXR1cyhjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsICdDaGFubmVsIGNsb3NlZCBiZWZvcmUgY2FsbCBzdGFydGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waWNrUXVldWUgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbFJlZlRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuY2FsbFJlZlRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pZGxlVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmlkbGVUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICAoMCwgY2hhbm5lbHpfMS51bnJlZ2lzdGVyQ2hhbm5lbHpSZWYpKHRoaXMuY2hhbm5lbHpSZWYpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3ViY2hhbm5lbFBvb2wudW5yZWZVbnVzZWRTdWJjaGFubmVscygpO1xuICAgICAgICAoX2EgPSB0aGlzLmNvbmZpZ1NlbGVjdG9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudW5yZWYoKTtcbiAgICAgICAgdGhpcy5jb25maWdTZWxlY3RvciA9IG51bGw7XG4gICAgfVxuICAgIGdldFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHRoaXMudGFyZ2V0KTtcbiAgICB9XG4gICAgZ2V0Q29ubmVjdGl2aXR5U3RhdGUodHJ5VG9Db25uZWN0KSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpdml0eVN0YXRlID0gdGhpcy5jb25uZWN0aXZpdHlTdGF0ZTtcbiAgICAgICAgaWYgKHRyeVRvQ29ubmVjdCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZpbmdMb2FkQmFsYW5jZXIuZXhpdElkbGUoKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMubWF5YmVTdGFydElkbGVUaW1lcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aXZpdHlTdGF0ZTtcbiAgICB9XG4gICAgd2F0Y2hDb25uZWN0aXZpdHlTdGF0ZShjdXJyZW50U3RhdGUsIGRlYWRsaW5lLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuU0hVVERPV04pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCBoYXMgYmVlbiBzaHV0IGRvd24nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgICBpZiAoZGVhZGxpbmUgIT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICBjb25zdCBkZWFkbGluZURhdGUgPSBkZWFkbGluZSBpbnN0YW5jZW9mIERhdGUgPyBkZWFkbGluZSA6IG5ldyBEYXRlKGRlYWRsaW5lKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBpZiAoZGVhZGxpbmUgPT09IC1JbmZpbml0eSB8fCBkZWFkbGluZURhdGUgPD0gbm93KSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IEVycm9yKCdEZWFkbGluZSBwYXNzZWQgd2l0aG91dCBjb25uZWN0aXZpdHkgc3RhdGUgY2hhbmdlJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb25uZWN0aXZpdHlTdGF0ZVdhdGNoZXIod2F0Y2hlck9iamVjdCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCdEZWFkbGluZSBwYXNzZWQgd2l0aG91dCBjb25uZWN0aXZpdHkgc3RhdGUgY2hhbmdlJykpO1xuICAgICAgICAgICAgfSwgZGVhZGxpbmVEYXRlLmdldFRpbWUoKSAtIG5vdy5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdhdGNoZXJPYmplY3QgPSB7XG4gICAgICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRpbWVyLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbm5lY3Rpdml0eVN0YXRlV2F0Y2hlcnMucHVzaCh3YXRjaGVyT2JqZWN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjaGFubmVseiByZWZlcmVuY2Ugb2JqZWN0IGZvciB0aGlzIGNoYW5uZWwuIFRoZSByZXR1cm5lZCB2YWx1ZSBpc1xuICAgICAqIGdhcmJhZ2UgaWYgY2hhbm5lbHogaXMgZGlzYWJsZWQgZm9yIHRoaXMgY2hhbm5lbC5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldENoYW5uZWx6UmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVselJlZjtcbiAgICB9XG4gICAgY3JlYXRlQ2FsbChtZXRob2QsIGRlYWRsaW5lLCBob3N0LCBwYXJlbnRDYWxsLCBwcm9wYWdhdGVGbGFncykge1xuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NoYW5uZWwjY3JlYXRlQ2FsbDogbWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh0eXBlb2YgZGVhZGxpbmUgPT09ICdudW1iZXInIHx8IGRlYWRsaW5lIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NoYW5uZWwjY3JlYXRlQ2FsbDogZGVhZGxpbmUgbXVzdCBiZSBhIG51bWJlciBvciBEYXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGl2aXR5U3RhdGUgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlNIVVRET1dOKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgaGFzIGJlZW4gc2h1dCBkb3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVzb2x2aW5nQ2FsbChtZXRob2QsIGRlYWRsaW5lLCBob3N0LCBwYXJlbnRDYWxsLCBwcm9wYWdhdGVGbGFncyk7XG4gICAgfVxuICAgIGdldE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnM7XG4gICAgfVxufVxuZXhwb3J0cy5JbnRlcm5hbENoYW5uZWwgPSBJbnRlcm5hbENoYW5uZWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC1jaGFubmVsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2hhbm5lbEltcGxlbWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgY2hhbm5lbF9jcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vY2hhbm5lbC1jcmVkZW50aWFsc1wiKTtcbmNvbnN0IGludGVybmFsX2NoYW5uZWxfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsLWNoYW5uZWxcIik7XG5jbGFzcyBDaGFubmVsSW1wbGVtZW50YXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgY3JlZGVudGlhbHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDaGFubmVsIHRhcmdldCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoY3JlZGVudGlhbHMgaW5zdGFuY2VvZiBjaGFubmVsX2NyZWRlbnRpYWxzXzEuQ2hhbm5lbENyZWRlbnRpYWxzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2hhbm5lbCBjcmVkZW50aWFscyBtdXN0IGJlIGEgQ2hhbm5lbENyZWRlbnRpYWxzIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2hhbm5lbCBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnRlcm5hbENoYW5uZWwgPSBuZXcgaW50ZXJuYWxfY2hhbm5lbF8xLkludGVybmFsQ2hhbm5lbCh0YXJnZXQsIGNyZWRlbnRpYWxzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDaGFubmVsLmNsb3NlKCk7XG4gICAgfVxuICAgIGdldFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDaGFubmVsLmdldFRhcmdldCgpO1xuICAgIH1cbiAgICBnZXRDb25uZWN0aXZpdHlTdGF0ZSh0cnlUb0Nvbm5lY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDaGFubmVsLmdldENvbm5lY3Rpdml0eVN0YXRlKHRyeVRvQ29ubmVjdCk7XG4gICAgfVxuICAgIHdhdGNoQ29ubmVjdGl2aXR5U3RhdGUoY3VycmVudFN0YXRlLCBkZWFkbGluZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbENoYW5uZWwud2F0Y2hDb25uZWN0aXZpdHlTdGF0ZShjdXJyZW50U3RhdGUsIGRlYWRsaW5lLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY2hhbm5lbHogcmVmZXJlbmNlIG9iamVjdCBmb3IgdGhpcyBjaGFubmVsLiBUaGUgcmV0dXJuZWQgdmFsdWUgaXNcbiAgICAgKiBnYXJiYWdlIGlmIGNoYW5uZWx6IGlzIGRpc2FibGVkIGZvciB0aGlzIGNoYW5uZWwuXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRDaGFubmVselJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDaGFubmVsLmdldENoYW5uZWx6UmVmKCk7XG4gICAgfVxuICAgIGNyZWF0ZUNhbGwobWV0aG9kLCBkZWFkbGluZSwgaG9zdCwgcGFyZW50Q2FsbCwgcHJvcGFnYXRlRmxhZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDaGFubmVsI2NyZWF0ZUNhbGw6IG1ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEodHlwZW9mIGRlYWRsaW5lID09PSAnbnVtYmVyJyB8fCBkZWFkbGluZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDaGFubmVsI2NyZWF0ZUNhbGw6IGRlYWRsaW5lIG11c3QgYmUgYSBudW1iZXIgb3IgRGF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQ2hhbm5lbC5jcmVhdGVDYWxsKG1ldGhvZCwgZGVhZGxpbmUsIGhvc3QsIHBhcmVudENhbGwsIHByb3BhZ2F0ZUZsYWdzKTtcbiAgICB9XG59XG5leHBvcnRzLkNoYW5uZWxJbXBsZW1lbnRhdGlvbiA9IENoYW5uZWxJbXBsZW1lbnRhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYW5uZWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJEdXBsZXhTdHJlYW1JbXBsID0gZXhwb3J0cy5TZXJ2ZXJXcml0YWJsZVN0cmVhbUltcGwgPSBleHBvcnRzLlNlcnZlclJlYWRhYmxlU3RyZWFtSW1wbCA9IGV4cG9ydHMuU2VydmVyVW5hcnlDYWxsSW1wbCA9IHZvaWQgMDtcbmV4cG9ydHMuc2VydmVyRXJyb3JUb1N0YXR1cyA9IHNlcnZlckVycm9yVG9TdGF0dXM7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmZ1bmN0aW9uIHNlcnZlckVycm9yVG9TdGF0dXMoZXJyb3IsIG92ZXJyaWRlVHJhaWxlcnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgc3RhdHVzID0ge1xuICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5LTk9XTixcbiAgICAgICAgZGV0YWlsczogJ21lc3NhZ2UnIGluIGVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIEVycm9yJyxcbiAgICAgICAgbWV0YWRhdGE6IChfYSA9IG92ZXJyaWRlVHJhaWxlcnMgIT09IG51bGwgJiYgb3ZlcnJpZGVUcmFpbGVycyAhPT0gdm9pZCAwID8gb3ZlcnJpZGVUcmFpbGVycyA6IGVycm9yLm1ldGFkYXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsLFxuICAgIH07XG4gICAgaWYgKCdjb2RlJyBpbiBlcnJvciAmJlxuICAgICAgICB0eXBlb2YgZXJyb3IuY29kZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgTnVtYmVyLmlzSW50ZWdlcihlcnJvci5jb2RlKSkge1xuICAgICAgICBzdGF0dXMuY29kZSA9IGVycm9yLmNvZGU7XG4gICAgICAgIGlmICgnZGV0YWlscycgaW4gZXJyb3IgJiYgdHlwZW9mIGVycm9yLmRldGFpbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdGF0dXMuZGV0YWlscyA9IGVycm9yLmRldGFpbHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbn1cbmNsYXNzIFNlcnZlclVuYXJ5Q2FsbEltcGwgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHBhdGgsIGNhbGwsIG1ldGFkYXRhLCByZXF1ZXN0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuY2FsbCA9IGNhbGw7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbC5nZXRQZWVyKCk7XG4gICAgfVxuICAgIHNlbmRNZXRhZGF0YShyZXNwb25zZU1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMuY2FsbC5zZW5kTWV0YWRhdGEocmVzcG9uc2VNZXRhZGF0YSk7XG4gICAgfVxuICAgIGdldERlYWRsaW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsLmdldERlYWRsaW5lKCk7XG4gICAgfVxuICAgIGdldFBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGg7XG4gICAgfVxuICAgIGdldEhvc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0SG9zdCgpO1xuICAgIH1cbiAgICBnZXRBdXRoQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbC5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH1cbiAgICBnZXRNZXRyaWNzUmVjb3JkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0TWV0cmljc1JlY29yZGVyKCk7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2ZXJVbmFyeUNhbGxJbXBsID0gU2VydmVyVW5hcnlDYWxsSW1wbDtcbmNsYXNzIFNlcnZlclJlYWRhYmxlU3RyZWFtSW1wbCBleHRlbmRzIHN0cmVhbV8xLlJlYWRhYmxlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXRoLCBjYWxsLCBtZXRhZGF0YSkge1xuICAgICAgICBzdXBlcih7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuY2FsbCA9IGNhbGw7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgX3JlYWQoc2l6ZSkge1xuICAgICAgICB0aGlzLmNhbGwuc3RhcnRSZWFkKCk7XG4gICAgfVxuICAgIGdldFBlZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0UGVlcigpO1xuICAgIH1cbiAgICBzZW5kTWV0YWRhdGEocmVzcG9uc2VNZXRhZGF0YSkge1xuICAgICAgICB0aGlzLmNhbGwuc2VuZE1ldGFkYXRhKHJlc3BvbnNlTWV0YWRhdGEpO1xuICAgIH1cbiAgICBnZXREZWFkbGluZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbC5nZXREZWFkbGluZSgpO1xuICAgIH1cbiAgICBnZXRQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoO1xuICAgIH1cbiAgICBnZXRIb3N0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsLmdldEhvc3QoKTtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9XG4gICAgZ2V0TWV0cmljc1JlY29yZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsLmdldE1ldHJpY3NSZWNvcmRlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVyUmVhZGFibGVTdHJlYW1JbXBsID0gU2VydmVyUmVhZGFibGVTdHJlYW1JbXBsO1xuY2xhc3MgU2VydmVyV3JpdGFibGVTdHJlYW1JbXBsIGV4dGVuZHMgc3RyZWFtXzEuV3JpdGFibGUge1xuICAgIGNvbnN0cnVjdG9yKHBhdGgsIGNhbGwsIG1ldGFkYXRhLCByZXF1ZXN0KSB7XG4gICAgICAgIHN1cGVyKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5jYWxsID0gY2FsbDtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSB7XG4gICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuT0ssXG4gICAgICAgICAgICBkZXRhaWxzOiAnT0snLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRyYWlsaW5nTWV0YWRhdGEgPSBuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpO1xuICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBzZXJ2ZXJFcnJvclRvU3RhdHVzKGVycik7XG4gICAgICAgICAgICB0aGlzLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0UGVlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbC5nZXRQZWVyKCk7XG4gICAgfVxuICAgIHNlbmRNZXRhZGF0YShyZXNwb25zZU1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMuY2FsbC5zZW5kTWV0YWRhdGEocmVzcG9uc2VNZXRhZGF0YSk7XG4gICAgfVxuICAgIGdldERlYWRsaW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsLmdldERlYWRsaW5lKCk7XG4gICAgfVxuICAgIGdldFBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGg7XG4gICAgfVxuICAgIGdldEhvc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0SG9zdCgpO1xuICAgIH1cbiAgICBnZXRBdXRoQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbC5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH1cbiAgICBnZXRNZXRyaWNzUmVjb3JkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0TWV0cmljc1JlY29yZGVyKCk7XG4gICAgfVxuICAgIF93cml0ZShjaHVuaywgZW5jb2RpbmcsIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jYWxsLnNlbmRNZXNzYWdlKGNodW5rLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIF9maW5hbChjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB0aGlzLmNhbGwuc2VuZFN0YXR1cyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGVuZGluZ1N0YXR1cyksIHsgbWV0YWRhdGE6IChfYSA9IHRoaXMucGVuZGluZ1N0YXR1cy5tZXRhZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy50cmFpbGluZ01ldGFkYXRhIH0pKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBlbmQobWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWlsaW5nTWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZW5kKCk7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2ZXJXcml0YWJsZVN0cmVhbUltcGwgPSBTZXJ2ZXJXcml0YWJsZVN0cmVhbUltcGw7XG5jbGFzcyBTZXJ2ZXJEdXBsZXhTdHJlYW1JbXBsIGV4dGVuZHMgc3RyZWFtXzEuRHVwbGV4IHtcbiAgICBjb25zdHJ1Y3RvcihwYXRoLCBjYWxsLCBtZXRhZGF0YSkge1xuICAgICAgICBzdXBlcih7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuY2FsbCA9IGNhbGw7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy5wZW5kaW5nU3RhdHVzID0ge1xuICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLk9LLFxuICAgICAgICAgICAgZGV0YWlsczogJ09LJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50cmFpbGluZ01ldGFkYXRhID0gbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKTtcbiAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gc2VydmVyRXJyb3JUb1N0YXR1cyhlcnIpO1xuICAgICAgICAgICAgdGhpcy5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFBlZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0UGVlcigpO1xuICAgIH1cbiAgICBzZW5kTWV0YWRhdGEocmVzcG9uc2VNZXRhZGF0YSkge1xuICAgICAgICB0aGlzLmNhbGwuc2VuZE1ldGFkYXRhKHJlc3BvbnNlTWV0YWRhdGEpO1xuICAgIH1cbiAgICBnZXREZWFkbGluZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbC5nZXREZWFkbGluZSgpO1xuICAgIH1cbiAgICBnZXRQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoO1xuICAgIH1cbiAgICBnZXRIb3N0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsLmdldEhvc3QoKTtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9XG4gICAgZ2V0TWV0cmljc1JlY29yZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsLmdldE1ldHJpY3NSZWNvcmRlcigpO1xuICAgIH1cbiAgICBfcmVhZChzaXplKSB7XG4gICAgICAgIHRoaXMuY2FsbC5zdGFydFJlYWQoKTtcbiAgICB9XG4gICAgX3dyaXRlKGNodW5rLCBlbmNvZGluZywgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGwuc2VuZE1lc3NhZ2UoY2h1bmssIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgX2ZpbmFsKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIHRoaXMuY2FsbC5zZW5kU3RhdHVzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wZW5kaW5nU3RhdHVzKSwgeyBtZXRhZGF0YTogKF9hID0gdGhpcy5wZW5kaW5nU3RhdHVzLm1ldGFkYXRhKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnRyYWlsaW5nTWV0YWRhdGEgfSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGVuZChtZXRhZGF0YSkge1xuICAgICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudHJhaWxpbmdNZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5lbmQoKTtcbiAgICB9XG59XG5leHBvcnRzLlNlcnZlckR1cGxleFN0cmVhbUltcGwgPSBTZXJ2ZXJEdXBsZXhTdHJlYW1JbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyLWNhbGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXJDcmVkZW50aWFscyA9IHZvaWQgMDtcbmV4cG9ydHMuY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlclNlcnZlckNyZWRlbnRpYWxzID0gY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlclNlcnZlckNyZWRlbnRpYWxzO1xuZXhwb3J0cy5jcmVhdGVTZXJ2ZXJDcmVkZW50aWFsc1dpdGhJbnRlcmNlcHRvcnMgPSBjcmVhdGVTZXJ2ZXJDcmVkZW50aWFsc1dpdGhJbnRlcmNlcHRvcnM7XG5jb25zdCB0bHNfaGVscGVyc18xID0gcmVxdWlyZShcIi4vdGxzLWhlbHBlcnNcIik7XG5jbGFzcyBTZXJ2ZXJDcmVkZW50aWFscyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmVyQ29uc3RydWN0b3JPcHRpb25zLCBjb250ZXh0T3B0aW9ucykge1xuICAgICAgICB0aGlzLnNlcnZlckNvbnN0cnVjdG9yT3B0aW9ucyA9IHNlcnZlckNvbnN0cnVjdG9yT3B0aW9ucztcbiAgICAgICAgdGhpcy53YXRjaGVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5sYXRlc3RDb250ZXh0T3B0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMubGF0ZXN0Q29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0aW9ucyAhPT0gbnVsbCAmJiBjb250ZXh0T3B0aW9ucyAhPT0gdm9pZCAwID8gY29udGV4dE9wdGlvbnMgOiBudWxsO1xuICAgIH1cbiAgICBfYWRkV2F0Y2hlcih3YXRjaGVyKSB7XG4gICAgICAgIHRoaXMud2F0Y2hlcnMuYWRkKHdhdGNoZXIpO1xuICAgIH1cbiAgICBfcmVtb3ZlV2F0Y2hlcih3YXRjaGVyKSB7XG4gICAgICAgIHRoaXMud2F0Y2hlcnMuZGVsZXRlKHdhdGNoZXIpO1xuICAgIH1cbiAgICBnZXRXYXRjaGVyQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoZXJzLnNpemU7XG4gICAgfVxuICAgIHVwZGF0ZVNlY3VyZUNvbnRleHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5sYXRlc3RDb250ZXh0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGZvciAoY29uc3Qgd2F0Y2hlciBvZiB0aGlzLndhdGNoZXJzKSB7XG4gICAgICAgICAgICB3YXRjaGVyKHRoaXMubGF0ZXN0Q29udGV4dE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9pc1NlY3VyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVyQ29uc3RydWN0b3JPcHRpb25zICE9PSBudWxsO1xuICAgIH1cbiAgICBfZ2V0U2VjdXJlQ29udGV4dE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhdGVzdENvbnRleHRPcHRpb25zO1xuICAgIH1cbiAgICBfZ2V0Q29uc3RydWN0b3JPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJDb25zdHJ1Y3Rvck9wdGlvbnM7XG4gICAgfVxuICAgIF9nZXRJbnRlcmNlcHRvcnMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUluc2VjdXJlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VjdXJlU2VydmVyQ3JlZGVudGlhbHMoKTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZVNzbChyb290Q2VydHMsIGtleUNlcnRQYWlycywgY2hlY2tDbGllbnRDZXJ0aWZpY2F0ZSA9IGZhbHNlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHJvb3RDZXJ0cyAhPT0gbnVsbCAmJiAhQnVmZmVyLmlzQnVmZmVyKHJvb3RDZXJ0cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jvb3RDZXJ0cyBtdXN0IGJlIG51bGwgb3IgYSBCdWZmZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2V5Q2VydFBhaXJzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2V5Q2VydFBhaXJzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNoZWNrQ2xpZW50Q2VydGlmaWNhdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2hlY2tDbGllbnRDZXJ0aWZpY2F0ZSBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlcnQgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5Q2VydFBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYWlyID0ga2V5Q2VydFBhaXJzW2ldO1xuICAgICAgICAgICAgaWYgKHBhaXIgPT09IG51bGwgfHwgdHlwZW9mIHBhaXIgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihga2V5Q2VydFBhaXJbJHtpfV0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhaXIucHJpdmF0ZV9rZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihga2V5Q2VydFBhaXJbJHtpfV0ucHJpdmF0ZV9rZXkgbXVzdCBiZSBhIEJ1ZmZlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocGFpci5jZXJ0X2NoYWluKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGtleUNlcnRQYWlyWyR7aX1dLmNlcnRfY2hhaW4gbXVzdCBiZSBhIEJ1ZmZlcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VydC5wdXNoKHBhaXIuY2VydF9jaGFpbik7XG4gICAgICAgICAgICBrZXkucHVzaChwYWlyLnByaXZhdGVfa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFNlY3VyZVNlcnZlckNyZWRlbnRpYWxzKHtcbiAgICAgICAgICAgIHJlcXVlc3RDZXJ0OiBjaGVja0NsaWVudENlcnRpZmljYXRlLFxuICAgICAgICAgICAgY2lwaGVyczogdGxzX2hlbHBlcnNfMS5DSVBIRVJfU1VJVEVTLFxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBjYTogKF9hID0gcm9vdENlcnRzICE9PSBudWxsICYmIHJvb3RDZXJ0cyAhPT0gdm9pZCAwID8gcm9vdENlcnRzIDogKDAsIHRsc19oZWxwZXJzXzEuZ2V0RGVmYXVsdFJvb3RzRGF0YSkoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2VydCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TZXJ2ZXJDcmVkZW50aWFscyA9IFNlcnZlckNyZWRlbnRpYWxzO1xuY2xhc3MgSW5zZWN1cmVTZXJ2ZXJDcmVkZW50aWFscyBleHRlbmRzIFNlcnZlckNyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIobnVsbCk7XG4gICAgfVxuICAgIF9nZXRTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIF9lcXVhbHMob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgSW5zZWN1cmVTZXJ2ZXJDcmVkZW50aWFscztcbiAgICB9XG59XG5jbGFzcyBTZWN1cmVTZXJ2ZXJDcmVkZW50aWFscyBleHRlbmRzIFNlcnZlckNyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvck9wdGlvbnMsIGNvbnRleHRPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKGNvbnN0cnVjdG9yT3B0aW9ucywgY29udGV4dE9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbnN0cnVjdG9yT3B0aW9ucyksIGNvbnRleHRPcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGVxdWFsaXR5IGJ5IGNoZWNraW5nIHRoZSBvcHRpb25zIHRoYXQgYXJlIGFjdHVhbGx5IHNldCBieVxuICAgICAqIGNyZWF0ZVNzbC5cbiAgICAgKiBAcGFyYW0gb3RoZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIF9lcXVhbHMob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlY3VyZVNlcnZlckNyZWRlbnRpYWxzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9wdGlvbnMuY2EgZXF1YWxpdHkgY2hlY2tcbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLm9wdGlvbnMuY2EpICYmIEJ1ZmZlci5pc0J1ZmZlcihvdGhlci5vcHRpb25zLmNhKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuY2EuZXF1YWxzKG90aGVyLm9wdGlvbnMuY2EpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYSAhPT0gb3RoZXIub3B0aW9ucy5jYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvcHRpb25zLmNlcnQgZXF1YWxpdHkgY2hlY2tcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmNlcnQpICYmIEFycmF5LmlzQXJyYXkob3RoZXIub3B0aW9ucy5jZXJ0KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jZXJ0Lmxlbmd0aCAhPT0gb3RoZXIub3B0aW9ucy5jZXJ0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcHRpb25zLmNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzQ2VydCA9IHRoaXMub3B0aW9ucy5jZXJ0W2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyQ2VydCA9IG90aGVyLm9wdGlvbnMuY2VydFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHRoaXNDZXJ0KSAmJiBCdWZmZXIuaXNCdWZmZXIob3RoZXJDZXJ0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXNDZXJ0LmVxdWFscyhvdGhlckNlcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzQ2VydCAhPT0gb3RoZXJDZXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNlcnQgIT09IG90aGVyLm9wdGlvbnMuY2VydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvcHRpb25zLmtleSBlcXVhbGl0eSBjaGVja1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMua2V5KSAmJiBBcnJheS5pc0FycmF5KG90aGVyLm9wdGlvbnMua2V5KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZXkubGVuZ3RoICE9PSBvdGhlci5vcHRpb25zLmtleS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5rZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzS2V5ID0gdGhpcy5vcHRpb25zLmtleVtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcktleSA9IG90aGVyLm9wdGlvbnMua2V5W2ldO1xuICAgICAgICAgICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodGhpc0tleSkgJiYgQnVmZmVyLmlzQnVmZmVyKG90aGVyS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXNLZXkuZXF1YWxzKG90aGVyS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0tleSAhPT0gb3RoZXJLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2V5ICE9PSBvdGhlci5vcHRpb25zLmtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvcHRpb25zLnJlcXVlc3RDZXJ0IGVxdWFsaXR5IGNoZWNrXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWVzdENlcnQgIT09IG90aGVyLm9wdGlvbnMucmVxdWVzdENlcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjaXBoZXJzIGlzIGRlcml2ZWQgZnJvbSBhIHZhbHVlIHRoYXQgaXMgY29uc3RhbnQgZm9yIHRoZSBwcm9jZXNzLCBzbyBub1xuICAgICAgICAgKiBlcXVhbGl0eSBjaGVjayBpcyBuZWVkZWQuICovXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmNsYXNzIENlcnRpZmljYXRlUHJvdmlkZXJTZXJ2ZXJDcmVkZW50aWFscyBleHRlbmRzIFNlcnZlckNyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3RvcihpZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIsIGNhQ2VydGlmaWNhdGVQcm92aWRlciwgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHJlcXVlc3RDZXJ0OiBjYUNlcnRpZmljYXRlUHJvdmlkZXIgIT09IG51bGwsXG4gICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSxcbiAgICAgICAgICAgIGNpcGhlcnM6IHRsc19oZWxwZXJzXzEuQ0lQSEVSX1NVSVRFU1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIgPSBpZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXI7XG4gICAgICAgIHRoaXMuY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyID0gY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyO1xuICAgICAgICB0aGlzLnJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSA9IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTtcbiAgICAgICAgdGhpcy5sYXRlc3RDYVVwZGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmNhQ2VydGlmaWNhdGVVcGRhdGVMaXN0ZW5lciA9IHRoaXMuaGFuZGxlQ2FDZXJ0aWZpY2F0ZVVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlkZW50aXR5Q2VydGlmaWNhdGVVcGRhdGVMaXN0ZW5lciA9IHRoaXMuaGFuZGxlSWRlbnRpdHlDZXJ0aXRpZmljYXRlVXBkYXRlLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIF9hZGRXYXRjaGVyKHdhdGNoZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5nZXRXYXRjaGVyQ291bnQoKSA9PT0gMCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5jYUNlcnRpZmljYXRlUHJvdmlkZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRDYUNlcnRpZmljYXRlTGlzdGVuZXIodGhpcy5jYUNlcnRpZmljYXRlVXBkYXRlTGlzdGVuZXIpO1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIuYWRkSWRlbnRpdHlDZXJ0aWZpY2F0ZUxpc3RlbmVyKHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVVwZGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5fYWRkV2F0Y2hlcih3YXRjaGVyKTtcbiAgICB9XG4gICAgX3JlbW92ZVdhdGNoZXIod2F0Y2hlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyLl9yZW1vdmVXYXRjaGVyKHdhdGNoZXIpO1xuICAgICAgICBpZiAodGhpcy5nZXRXYXRjaGVyQ291bnQoKSA9PT0gMCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5jYUNlcnRpZmljYXRlUHJvdmlkZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVDYUNlcnRpZmljYXRlTGlzdGVuZXIodGhpcy5jYUNlcnRpZmljYXRlVXBkYXRlTGlzdGVuZXIpO1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIucmVtb3ZlSWRlbnRpdHlDZXJ0aWZpY2F0ZUxpc3RlbmVyKHRoaXMuaWRlbnRpdHlDZXJ0aWZpY2F0ZVVwZGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZXF1YWxzKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBDZXJ0aWZpY2F0ZVByb3ZpZGVyU2VydmVyQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLmNhQ2VydGlmaWNhdGVQcm92aWRlciA9PT0gb3RoZXIuY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyICYmXG4gICAgICAgICAgICB0aGlzLmlkZW50aXR5Q2VydGlmaWNhdGVQcm92aWRlciA9PT0gb3RoZXIuaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyICYmXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSA9PT0gb3RoZXIucmVxdWlyZUNsaWVudENlcnRpZmljYXRlKTtcbiAgICB9XG4gICAgY2FsY3VsYXRlU2VjdXJlQ29udGV4dE9wdGlvbnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhQ2VydGlmaWNhdGVQcm92aWRlciAhPT0gbnVsbCAmJiB0aGlzLmxhdGVzdENhVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2E6IChfYSA9IHRoaXMubGF0ZXN0Q2FVcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYUNlcnRpZmljYXRlLFxuICAgICAgICAgICAgY2VydDogW3RoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUuY2VydGlmaWNhdGVdLFxuICAgICAgICAgICAga2V5OiBbdGhpcy5sYXRlc3RJZGVudGl0eVVwZGF0ZS5wcml2YXRlS2V5XSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZmluYWxpemVVcGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IHNlY3VyZUNvbnRleHRPcHRpb25zID0gdGhpcy5jYWxjdWxhdGVTZWN1cmVDb250ZXh0T3B0aW9ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlY3VyZUNvbnRleHRPcHRpb25zKHNlY3VyZUNvbnRleHRPcHRpb25zKTtcbiAgICB9XG4gICAgaGFuZGxlQ2FDZXJ0aWZpY2F0ZVVwZGF0ZSh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy5sYXRlc3RDYVVwZGF0ZSA9IHVwZGF0ZTtcbiAgICAgICAgdGhpcy5maW5hbGl6ZVVwZGF0ZSgpO1xuICAgIH1cbiAgICBoYW5kbGVJZGVudGl0eUNlcnRpdGlmaWNhdGVVcGRhdGUodXBkYXRlKSB7XG4gICAgICAgIHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUgPSB1cGRhdGU7XG4gICAgICAgIHRoaXMuZmluYWxpemVVcGRhdGUoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVDZXJ0aWZpY2F0ZVByb3ZpZGVyU2VydmVyQ3JlZGVudGlhbHMoY2FDZXJ0aWZpY2F0ZVByb3ZpZGVyLCBpZGVudGl0eUNlcnRpZmljYXRlUHJvdmlkZXIsIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSkge1xuICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVQcm92aWRlclNlcnZlckNyZWRlbnRpYWxzKGNhQ2VydGlmaWNhdGVQcm92aWRlciwgaWRlbnRpdHlDZXJ0aWZpY2F0ZVByb3ZpZGVyLCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUpO1xufVxuY2xhc3MgSW50ZXJjZXB0b3JTZXJ2ZXJDcmVkZW50aWFscyBleHRlbmRzIFNlcnZlckNyZWRlbnRpYWxzIHtcbiAgICBjb25zdHJ1Y3RvcihjaGlsZENyZWRlbnRpYWxzLCBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgc3VwZXIoe30pO1xuICAgICAgICB0aGlzLmNoaWxkQ3JlZGVudGlhbHMgPSBjaGlsZENyZWRlbnRpYWxzO1xuICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IGludGVyY2VwdG9ycztcbiAgICB9XG4gICAgX2lzU2VjdXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENyZWRlbnRpYWxzLl9pc1NlY3VyZSgpO1xuICAgIH1cbiAgICBfZXF1YWxzKG90aGVyKSB7XG4gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgSW50ZXJjZXB0b3JTZXJ2ZXJDcmVkZW50aWFscykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh0aGlzLmNoaWxkQ3JlZGVudGlhbHMuX2VxdWFscyhvdGhlci5jaGlsZENyZWRlbnRpYWxzKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnRlcmNlcHRvcnMubGVuZ3RoICE9PSBvdGhlci5pbnRlcmNlcHRvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmludGVyY2VwdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJjZXB0b3JzW2ldICE9PSBvdGhlci5pbnRlcmNlcHRvcnNbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIF9nZXRJbnRlcmNlcHRvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyY2VwdG9ycztcbiAgICB9XG4gICAgX2FkZFdhdGNoZXIod2F0Y2hlcikge1xuICAgICAgICB0aGlzLmNoaWxkQ3JlZGVudGlhbHMuX2FkZFdhdGNoZXIod2F0Y2hlcik7XG4gICAgfVxuICAgIF9yZW1vdmVXYXRjaGVyKHdhdGNoZXIpIHtcbiAgICAgICAgdGhpcy5jaGlsZENyZWRlbnRpYWxzLl9yZW1vdmVXYXRjaGVyKHdhdGNoZXIpO1xuICAgIH1cbiAgICBfZ2V0Q29uc3RydWN0b3JPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENyZWRlbnRpYWxzLl9nZXRDb25zdHJ1Y3Rvck9wdGlvbnMoKTtcbiAgICB9XG4gICAgX2dldFNlY3VyZUNvbnRleHRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENyZWRlbnRpYWxzLl9nZXRTZWN1cmVDb250ZXh0T3B0aW9ucygpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVNlcnZlckNyZWRlbnRpYWxzV2l0aEludGVyY2VwdG9ycyhjcmVkZW50aWFscywgaW50ZXJjZXB0b3JzKSB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmNlcHRvclNlcnZlckNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCBpbnRlcmNlcHRvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyLWNyZWRlbnRpYWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjIgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZHVyYXRpb25NZXNzYWdlVG9EdXJhdGlvbiA9IGR1cmF0aW9uTWVzc2FnZVRvRHVyYXRpb247XG5leHBvcnRzLm1zVG9EdXJhdGlvbiA9IG1zVG9EdXJhdGlvbjtcbmV4cG9ydHMuZHVyYXRpb25Ub01zID0gZHVyYXRpb25Ub01zO1xuZXhwb3J0cy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbmV4cG9ydHMuaXNEdXJhdGlvbk1lc3NhZ2UgPSBpc0R1cmF0aW9uTWVzc2FnZTtcbmV4cG9ydHMucGFyc2VEdXJhdGlvbiA9IHBhcnNlRHVyYXRpb247XG5leHBvcnRzLmR1cmF0aW9uVG9TdHJpbmcgPSBkdXJhdGlvblRvU3RyaW5nO1xuZnVuY3Rpb24gZHVyYXRpb25NZXNzYWdlVG9EdXJhdGlvbihtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2Vjb25kczogTnVtYmVyLnBhcnNlSW50KG1lc3NhZ2Uuc2Vjb25kcyksXG4gICAgICAgIG5hbm9zOiBtZXNzYWdlLm5hbm9zXG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1zVG9EdXJhdGlvbihtaWxsaXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZWNvbmRzOiAobWlsbGlzIC8gMTAwMCkgfCAwLFxuICAgICAgICBuYW5vczogKChtaWxsaXMgJSAxMDAwKSAqIDEwMDAwMDApIHwgMCxcbiAgICB9O1xufVxuZnVuY3Rpb24gZHVyYXRpb25Ub01zKGR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIChkdXJhdGlvbi5zZWNvbmRzICogMTAwMCArIGR1cmF0aW9uLm5hbm9zIC8gMTAwMDAwMCkgfCAwO1xufVxuZnVuY3Rpb24gaXNEdXJhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUuc2Vjb25kcyA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLm5hbm9zID09PSAnbnVtYmVyJztcbn1cbmZ1bmN0aW9uIGlzRHVyYXRpb25NZXNzYWdlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZS5zZWNvbmRzID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFub3MgPT09ICdudW1iZXInO1xufVxuY29uc3QgZHVyYXRpb25SZWdleCA9IC9eKFxcZCspKD86XFwuKFxcZCspKT9zJC87XG5mdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHZhbHVlKSB7XG4gICAgY29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaChkdXJhdGlvblJlZ2V4KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzZWNvbmRzOiBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMV0sIDEwKSxcbiAgICAgICAgbmFub3M6IG1hdGNoWzJdID8gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzJdLnBhZEVuZCg5LCAnMCcpLCAxMCkgOiAwXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGR1cmF0aW9uVG9TdHJpbmcoZHVyYXRpb24pIHtcbiAgICBpZiAoZHVyYXRpb24ubmFub3MgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGAke2R1cmF0aW9uLnNlY29uZHN9c2A7XG4gICAgfVxuICAgIGxldCBzY2FsZUZhY3RvcjtcbiAgICBpZiAoZHVyYXRpb24ubmFub3MgJSAxMDAwMDAwID09PSAwKSB7XG4gICAgICAgIHNjYWxlRmFjdG9yID0gMTAwMDAwMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZHVyYXRpb24ubmFub3MgJSAxMDAwID09PSAwKSB7XG4gICAgICAgIHNjYWxlRmFjdG9yID0gMTAwMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjYWxlRmFjdG9yID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2R1cmF0aW9uLnNlY29uZHN9LiR7ZHVyYXRpb24ubmFub3MgLyBzY2FsZUZhY3Rvcn1zYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR1cmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjUgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT3JjYU9vYk1ldHJpY3NTdWJjaGFubmVsV3JhcHBlciA9IGV4cG9ydHMuR1JQQ19NRVRSSUNTX0hFQURFUiA9IGV4cG9ydHMuU2VydmVyTWV0cmljUmVjb3JkZXIgPSBleHBvcnRzLlBlclJlcXVlc3RNZXRyaWNSZWNvcmRlciA9IHZvaWQgMDtcbmV4cG9ydHMuY3JlYXRlT3JjYUNsaWVudCA9IGNyZWF0ZU9yY2FDbGllbnQ7XG5leHBvcnRzLmNyZWF0ZU1ldHJpY3NSZWFkZXIgPSBjcmVhdGVNZXRyaWNzUmVhZGVyO1xuY29uc3QgbWFrZV9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL21ha2UtY2xpZW50XCIpO1xuY29uc3QgZHVyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uXCIpO1xuY29uc3QgY2hhbm5lbF9jcmVkZW50aWFsc18xID0gcmVxdWlyZShcIi4vY2hhbm5lbC1jcmVkZW50aWFsc1wiKTtcbmNvbnN0IHN1YmNoYW5uZWxfaW50ZXJmYWNlXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWludGVyZmFjZVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgYmFja29mZl90aW1lb3V0XzEgPSByZXF1aXJlKFwiLi9iYWNrb2ZmLXRpbWVvdXRcIik7XG5jb25zdCBjb25uZWN0aXZpdHlfc3RhdGVfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eS1zdGF0ZVwiKTtcbmNvbnN0IGxvYWRlZE9yY2FQcm90byA9IG51bGw7XG5mdW5jdGlvbiBsb2FkT3JjYVByb3RvKCkge1xuICAgIGlmIChsb2FkZWRPcmNhUHJvdG8pIHtcbiAgICAgICAgcmV0dXJuIGxvYWRlZE9yY2FQcm90bztcbiAgICB9XG4gICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjb21wbGV4aXR5IGlzIHRvIGF2b2lkIGxvYWRpbmcgQGdycGMvcHJvdG8tbG9hZGVyIGF0XG4gICAgICogcnVudGltZSBmb3IgdXNlcnMgd2hvIHdpbGwgbm90IHVzZS9lbmFibGUgT1JDQS4gKi9cbiAgICBjb25zdCBsb2FkZXJMb2FkU3luYyA9IHJlcXVpcmUoJ0BncnBjL3Byb3RvLWxvYWRlcicpXG4gICAgICAgIC5sb2FkU3luYztcbiAgICBjb25zdCBsb2FkZWRQcm90byA9IGxvYWRlckxvYWRTeW5jKCd4ZHMvc2VydmljZS9vcmNhL3YzL29yY2EucHJvdG8nLCB7XG4gICAgICAgIGtlZXBDYXNlOiB0cnVlLFxuICAgICAgICBsb25nczogU3RyaW5nLFxuICAgICAgICBlbnVtczogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0czogdHJ1ZSxcbiAgICAgICAgb25lb2ZzOiB0cnVlLFxuICAgICAgICBpbmNsdWRlRGlyczogW1xuICAgICAgICAgICAgYCR7X19kaXJuYW1lfS8uLi8uLi9wcm90by94ZHNgLFxuICAgICAgICAgICAgYCR7X19kaXJuYW1lfS8uLi8uLi9wcm90by9wcm90b2MtZ2VuLXZhbGlkYXRlYFxuICAgICAgICBdLFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgbWFrZV9jbGllbnRfMS5sb2FkUGFja2FnZURlZmluaXRpb24pKGxvYWRlZFByb3RvKTtcbn1cbi8qKlxuICogT1JDQSBtZXRyaWNzIHJlY29yZGVyIGZvciBhIHNpbmdsZSByZXF1ZXN0XG4gKi9cbmNsYXNzIFBlclJlcXVlc3RNZXRyaWNSZWNvcmRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIGEgcmVxdWVzdCBjb3N0IG1ldHJpYyBtZWFzdXJlbWVudCBmb3IgdGhlIGNhbGwuXG4gICAgICogQHBhcmFtIG5hbWVcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICByZWNvcmRSZXF1ZXN0Q29zdE1ldHJpYyhuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZS5yZXF1ZXN0X2Nvc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZS5yZXF1ZXN0X2Nvc3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lc3NhZ2UucmVxdWVzdF9jb3N0W25hbWVdID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgYSByZXF1ZXN0IGNvc3QgbWV0cmljIG1lYXN1cmVtZW50IGZvciB0aGUgY2FsbC5cbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZFV0aWxpemF0aW9uTWV0cmljKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlLnV0aWxpemF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UudXRpbGl6YXRpb24gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lc3NhZ2UudXRpbGl6YXRpb25bbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVjb3JkcyBhbiBvcGFxdWUgbmFtZWQgbWV0cmljIG1lYXN1cmVtZW50IGZvciB0aGUgY2FsbC5cbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZE5hbWVkTWV0cmljKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlLm5hbWVkX21ldHJpY3MpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZS5uYW1lZF9tZXRyaWNzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXNzYWdlLm5hbWVkX21ldHJpY3NbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVjb3JkcyB0aGUgQ1BVIHV0aWxpemF0aW9uIG1ldHJpYyBtZWFzdXJlbWVudCBmb3IgdGhlIGNhbGwuXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgcmVjb3JkQ1BVVXRpbGl6YXRpb25NZXRyaWModmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmNwdV91dGlsaXphdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIHRoZSBtZW1vcnkgdXRpbGl6YXRpb24gbWV0cmljIG1lYXN1cmVtZW50IGZvciB0aGUgY2FsbC5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICByZWNvcmRNZW1vcnlVdGlsaXphdGlvbk1ldHJpYyh2YWx1ZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UubWVtX3V0aWxpemF0aW9uID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgdGhlIG1lbW9yeSB1dGlsaXphdGlvbiBtZXRyaWMgbWVhc3VyZW1lbnQgZm9yIHRoZSBjYWxsLlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZEFwcGxpY2F0aW9uVXRpbGl6YXRpb25NZXRyaWModmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmFwcGxpY2F0aW9uX3V0aWxpemF0aW9uID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgdGhlIHF1ZXJpZXMgcGVyIHNlY29uZCBtZWFzdXJlbWVudC5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICByZWNvcmRRcHNNZXRyaWModmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLnJwc19mcmFjdGlvbmFsID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgdGhlIGVycm9ycyBwZXIgc2Vjb25kIG1lYXN1cmVtZW50LlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZEVwc01ldHJpYyh2YWx1ZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UuZXBzID0gdmFsdWU7XG4gICAgfVxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3JjYVByb3RvID0gbG9hZE9yY2FQcm90bygpO1xuICAgICAgICByZXR1cm4gb3JjYVByb3RvLnhkcy5kYXRhLm9yY2EudjMuT3JjYUxvYWRSZXBvcnQuc2VyaWFsaXplKHRoaXMubWVzc2FnZSk7XG4gICAgfVxufVxuZXhwb3J0cy5QZXJSZXF1ZXN0TWV0cmljUmVjb3JkZXIgPSBQZXJSZXF1ZXN0TWV0cmljUmVjb3JkZXI7XG5jb25zdCBERUZBVUxUX1JFUE9SVF9JTlRFUlZBTF9NUyA9IDMwMDAwO1xuY2xhc3MgU2VydmVyTWV0cmljUmVjb3JkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB7fTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlSW1wbGVtZW50YXRpb24gPSB7XG4gICAgICAgICAgICBTdHJlYW1Db3JlTWV0cmljczogY2FsbCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVwb3J0SW50ZXJ2YWwgPSBjYWxsLnJlcXVlc3QucmVwb3J0X2ludGVydmFsID9cbiAgICAgICAgICAgICAgICAgICAgKDAsIGR1cmF0aW9uXzEuZHVyYXRpb25Ub01zKSgoMCwgZHVyYXRpb25fMS5kdXJhdGlvbk1lc3NhZ2VUb0R1cmF0aW9uKShjYWxsLnJlcXVlc3QucmVwb3J0X2ludGVydmFsKSkgOlxuICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1JFUE9SVF9JTlRFUlZBTF9NUztcbiAgICAgICAgICAgICAgICBjb25zdCByZXBvcnRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbC53cml0ZSh0aGlzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0sIHJlcG9ydEludGVydmFsKTtcbiAgICAgICAgICAgICAgICBjYWxsLm9uKCdjYW5jZWxsZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocmVwb3J0VGltZXIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBwdXRVdGlsaXphdGlvbk1ldHJpYyhuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZS51dGlsaXphdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlLnV0aWxpemF0aW9uID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXNzYWdlLnV0aWxpemF0aW9uW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICAgIHNldEFsbFV0aWxpemF0aW9uTWV0cmljcyhtZXRyaWNzKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZS51dGlsaXphdGlvbiA9IE9iamVjdC5hc3NpZ24oe30sIG1ldHJpY3MpO1xuICAgIH1cbiAgICBkZWxldGVVdGlsaXphdGlvbk1ldHJpYyhuYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5tZXNzYWdlLnV0aWxpemF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IGRlbGV0ZSBfYVtuYW1lXTtcbiAgICB9XG4gICAgc2V0Q3B1VXRpbGl6YXRpb25NZXRyaWModmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmNwdV91dGlsaXphdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgICBkZWxldGVDcHVVdGlsaXphdGlvbk1ldHJpYygpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubWVzc2FnZS5jcHVfdXRpbGl6YXRpb247XG4gICAgfVxuICAgIHNldEFwcGxpY2F0aW9uVXRpbGl6YXRpb25NZXRyaWModmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmFwcGxpY2F0aW9uX3V0aWxpemF0aW9uID0gdmFsdWU7XG4gICAgfVxuICAgIGRlbGV0ZUFwcGxpY2F0aW9uVXRpbGl6YXRpb25NZXRyaWMoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1lc3NhZ2UuYXBwbGljYXRpb25fdXRpbGl6YXRpb247XG4gICAgfVxuICAgIHNldFFwc01ldHJpYyh2YWx1ZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UucnBzX2ZyYWN0aW9uYWwgPSB2YWx1ZTtcbiAgICB9XG4gICAgZGVsZXRlUXBzTWV0cmljKCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tZXNzYWdlLnJwc19mcmFjdGlvbmFsO1xuICAgIH1cbiAgICBzZXRFcHNNZXRyaWModmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlLmVwcyA9IHZhbHVlO1xuICAgIH1cbiAgICBkZWxldGVFcHNNZXRyaWMoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1lc3NhZ2UuZXBzO1xuICAgIH1cbiAgICBhZGRUb1NlcnZlcihzZXJ2ZXIpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZURlZmluaXRpb24gPSBsb2FkT3JjYVByb3RvKCkueGRzLnNlcnZpY2Uub3JjYS52My5PcGVuUmNhU2VydmljZS5zZXJ2aWNlO1xuICAgICAgICBzZXJ2ZXIuYWRkU2VydmljZShzZXJ2aWNlRGVmaW5pdGlvbiwgdGhpcy5zZXJ2aWNlSW1wbGVtZW50YXRpb24pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVyTWV0cmljUmVjb3JkZXIgPSBTZXJ2ZXJNZXRyaWNSZWNvcmRlcjtcbmZ1bmN0aW9uIGNyZWF0ZU9yY2FDbGllbnQoY2hhbm5lbCkge1xuICAgIGNvbnN0IENsaWVudENsYXNzID0gbG9hZE9yY2FQcm90bygpLnhkcy5zZXJ2aWNlLm9yY2EudjMuT3BlblJjYVNlcnZpY2U7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRDbGFzcygndW51c2VkJywgY2hhbm5lbF9jcmVkZW50aWFsc18xLkNoYW5uZWxDcmVkZW50aWFscy5jcmVhdGVJbnNlY3VyZSgpLCB7IGNoYW5uZWxPdmVycmlkZTogY2hhbm5lbCB9KTtcbn1cbmV4cG9ydHMuR1JQQ19NRVRSSUNTX0hFQURFUiA9ICdlbmRwb2ludC1sb2FkLW1ldHJpY3MtYmluJztcbmNvbnN0IFBBUlNFRF9MT0FEX1JFUE9SVF9LRVkgPSAnZ3JwY19vcmNhX2xvYWRfcmVwb3J0Jztcbi8qKlxuICogQ3JlYXRlIGFuIG9uQ2FsbEVuZGVkIGNhbGxiYWNrIGZvciB1c2UgaW4gYSBwaWNrZXIuXG4gKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHRvIGhhbmRsZSBtZXRyaWNzLCB3aGVuZXZlciB0aGV5IGFyZSBwcm92aWRlZC5cbiAqIEBwYXJhbSBwcmV2aW91c09uQ2FsbEVuZGVkIFRoZSBwcmV2aW91cyBvbkNhbGxFbmRlZCBjYWxsYmFjayB0byBwcm9wYWdhdGVcbiAqIHRvLCBpZiBhcHBsaWNhYmxlLlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWV0cmljc1JlYWRlcihsaXN0ZW5lciwgcHJldmlvdXNPbkNhbGxFbmRlZCkge1xuICAgIHJldHVybiAoY29kZSwgZGV0YWlscywgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgbGV0IHBhcnNlZExvYWRSZXBvcnQgPSBtZXRhZGF0YS5nZXRPcGFxdWUoUEFSU0VEX0xPQURfUkVQT1JUX0tFWSk7XG4gICAgICAgIGlmIChwYXJzZWRMb2FkUmVwb3J0KSB7XG4gICAgICAgICAgICBsaXN0ZW5lcihwYXJzZWRMb2FkUmVwb3J0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2FkUmVwb3J0ID0gbWV0YWRhdGEuZ2V0KGV4cG9ydHMuR1JQQ19NRVRSSUNTX0hFQURFUik7XG4gICAgICAgICAgICBpZiAoc2VyaWFsaXplZExvYWRSZXBvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yY2FQcm90byA9IGxvYWRPcmNhUHJvdG8oKTtcbiAgICAgICAgICAgICAgICBwYXJzZWRMb2FkUmVwb3J0ID0gb3JjYVByb3RvLnhkcy5kYXRhLm9yY2EudjMuT3JjYUxvYWRSZXBvcnQuZGVzZXJpYWxpemUoc2VyaWFsaXplZExvYWRSZXBvcnRbMF0pO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyKHBhcnNlZExvYWRSZXBvcnQpO1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhLnNldE9wYXF1ZShQQVJTRURfTE9BRF9SRVBPUlRfS0VZLCBwYXJzZWRMb2FkUmVwb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldmlvdXNPbkNhbGxFbmRlZCkge1xuICAgICAgICAgICAgcHJldmlvdXNPbkNhbGxFbmRlZChjb2RlLCBkZXRhaWxzLCBtZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuY29uc3QgREFUQV9QUk9EVUNFUl9LRVkgPSAnb3JjYV9vb2JfbWV0cmljcyc7XG5jbGFzcyBPb2JNZXRyaWNzRGF0YVdhdGNoZXIge1xuICAgIGNvbnN0cnVjdG9yKG1ldHJpY3NMaXN0ZW5lciwgaW50ZXJ2YWxNcykge1xuICAgICAgICB0aGlzLm1ldHJpY3NMaXN0ZW5lciA9IG1ldHJpY3NMaXN0ZW5lcjtcbiAgICAgICAgdGhpcy5pbnRlcnZhbE1zID0gaW50ZXJ2YWxNcztcbiAgICAgICAgdGhpcy5kYXRhUHJvZHVjZXIgPSBudWxsO1xuICAgIH1cbiAgICBzZXRTdWJjaGFubmVsKHN1YmNoYW5uZWwpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjZXIgPSBzdWJjaGFubmVsLmdldE9yQ3JlYXRlRGF0YVByb2R1Y2VyKERBVEFfUFJPRFVDRVJfS0VZLCBjcmVhdGVPb2JNZXRyaWNzRGF0YVByb2R1Y2VyKTtcbiAgICAgICAgdGhpcy5kYXRhUHJvZHVjZXIgPSBwcm9kdWNlcjtcbiAgICAgICAgcHJvZHVjZXIuYWRkRGF0YVdhdGNoZXIodGhpcyk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gdGhpcy5kYXRhUHJvZHVjZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmVEYXRhV2F0Y2hlcih0aGlzKTtcbiAgICB9XG4gICAgZ2V0SW50ZXJ2YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVydmFsTXM7XG4gICAgfVxuICAgIG9uTWV0cmljc1VwZGF0ZShtZXRyaWNzKSB7XG4gICAgICAgIHRoaXMubWV0cmljc0xpc3RlbmVyKG1ldHJpY3MpO1xuICAgIH1cbn1cbmNsYXNzIE9vYk1ldHJpY3NEYXRhUHJvZHVjZXIge1xuICAgIGNvbnN0cnVjdG9yKHN1YmNoYW5uZWwpIHtcbiAgICAgICAgdGhpcy5zdWJjaGFubmVsID0gc3ViY2hhbm5lbDtcbiAgICAgICAgdGhpcy5kYXRhV2F0Y2hlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMub3JjYVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubWV0cmljc0NhbGwgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbnRlcnZhbCA9IEluZmluaXR5O1xuICAgICAgICB0aGlzLmJhY2tvZmZUaW1lciA9IG5ldyBiYWNrb2ZmX3RpbWVvdXRfMS5CYWNrb2ZmVGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZU1ldHJpY3NTdWJzY3JpcHRpb24oKSk7XG4gICAgICAgIHRoaXMuc3ViY2hhbm5lbFN0YXRlTGlzdGVuZXIgPSAoKSA9PiB0aGlzLnVwZGF0ZU1ldHJpY3NTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IHN1YmNoYW5uZWwuZ2V0Q2hhbm5lbCgpO1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNyZWF0ZU9yY2FDbGllbnQoY2hhbm5lbCk7XG4gICAgICAgIHN1YmNoYW5uZWwuYWRkQ29ubmVjdGl2aXR5U3RhdGVMaXN0ZW5lcih0aGlzLnN1YmNoYW5uZWxTdGF0ZUxpc3RlbmVyKTtcbiAgICB9XG4gICAgYWRkRGF0YVdhdGNoZXIoZGF0YVdhdGNoZXIpIHtcbiAgICAgICAgdGhpcy5kYXRhV2F0Y2hlcnMuYWRkKGRhdGFXYXRjaGVyKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIHJlbW92ZURhdGFXYXRjaGVyKGRhdGFXYXRjaGVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5kYXRhV2F0Y2hlcnMuZGVsZXRlKGRhdGFXYXRjaGVyKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVdhdGNoZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3ViY2hhbm5lbC5yZW1vdmVEYXRhUHJvZHVjZXIoREFUQV9QUk9EVUNFUl9LRVkpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5tZXRyaWNzQ2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNzQ2FsbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNsaWVudC5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJjaGFubmVsLnJlbW92ZUNvbm5lY3Rpdml0eVN0YXRlTGlzdGVuZXIodGhpcy5zdWJjaGFubmVsU3RhdGVMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1ldHJpY3NTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVNZXRyaWNzU3Vic2NyaXB0aW9uKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLmRhdGFXYXRjaGVycy5zaXplID09PSAwIHx8ICF0aGlzLm9yY2FTdXBwb3J0ZWQgfHwgdGhpcy5zdWJjaGFubmVsLmdldENvbm5lY3Rpdml0eVN0YXRlKCkgIT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3SW50ZXJ2YWwgPSBNYXRoLm1pbiguLi5BcnJheS5mcm9tKHRoaXMuZGF0YVdhdGNoZXJzKS5tYXAod2F0Y2hlciA9PiB3YXRjaGVyLmdldEludGVydmFsKCkpKTtcbiAgICAgICAgaWYgKCF0aGlzLm1ldHJpY3NDYWxsIHx8IG5ld0ludGVydmFsICE9PSB0aGlzLmN1cnJlbnRJbnRlcnZhbCkge1xuICAgICAgICAgICAgKF9hID0gdGhpcy5tZXRyaWNzQ2FsbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW50ZXJ2YWwgPSBuZXdJbnRlcnZhbDtcbiAgICAgICAgICAgIGNvbnN0IG1ldHJpY3NDYWxsID0gdGhpcy5jbGllbnQuc3RyZWFtQ29yZU1ldHJpY3MoeyByZXBvcnRfaW50ZXJ2YWw6ICgwLCBkdXJhdGlvbl8xLm1zVG9EdXJhdGlvbikobmV3SW50ZXJ2YWwpIH0pO1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNzQ2FsbCA9IG1ldHJpY3NDYWxsO1xuICAgICAgICAgICAgbWV0cmljc0NhbGwub24oJ2RhdGEnLCAocmVwb3J0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhV2F0Y2hlcnMuZm9yRWFjaCh3YXRjaGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5vbk1ldHJpY3NVcGRhdGUocmVwb3J0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWV0cmljc0NhbGwub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzQ2FsbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JjYVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSBjb25zdGFudHNfMS5TdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrb2ZmVGltZXIucnVuT25jZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBPcmNhT29iTWV0cmljc1N1YmNoYW5uZWxXcmFwcGVyIGV4dGVuZHMgc3ViY2hhbm5lbF9pbnRlcmZhY2VfMS5CYXNlU3ViY2hhbm5lbFdyYXBwZXIge1xuICAgIGNvbnN0cnVjdG9yKGNoaWxkLCBtZXRyaWNzTGlzdGVuZXIsIGludGVydmFsTXMpIHtcbiAgICAgICAgc3VwZXIoY2hpbGQpO1xuICAgICAgICB0aGlzLmFkZERhdGFXYXRjaGVyKG5ldyBPb2JNZXRyaWNzRGF0YVdhdGNoZXIobWV0cmljc0xpc3RlbmVyLCBpbnRlcnZhbE1zKSk7XG4gICAgfVxuICAgIGdldFdyYXBwZWRTdWJjaGFubmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZDtcbiAgICB9XG59XG5leHBvcnRzLk9yY2FPb2JNZXRyaWNzU3ViY2hhbm5lbFdyYXBwZXIgPSBPcmNhT29iTWV0cmljc1N1YmNoYW5uZWxXcmFwcGVyO1xuZnVuY3Rpb24gY3JlYXRlT29iTWV0cmljc0RhdGFQcm9kdWNlcihzdWJjaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ldyBPb2JNZXRyaWNzRGF0YVByb2R1Y2VyKHN1YmNoYW5uZWwpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3JjYS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDI0IGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhc2VTZXJ2ZXJJbnRlcmNlcHRpbmdDYWxsID0gZXhwb3J0cy5TZXJ2ZXJJbnRlcmNlcHRpbmdDYWxsID0gZXhwb3J0cy5SZXNwb25kZXJCdWlsZGVyID0gZXhwb3J0cy5TZXJ2ZXJMaXN0ZW5lckJ1aWxkZXIgPSB2b2lkIDA7XG5leHBvcnRzLmlzSW50ZXJjZXB0aW5nU2VydmVyTGlzdGVuZXIgPSBpc0ludGVyY2VwdGluZ1NlcnZlckxpc3RlbmVyO1xuZXhwb3J0cy5nZXRTZXJ2ZXJJbnRlcmNlcHRpbmdDYWxsID0gZ2V0U2VydmVySW50ZXJjZXB0aW5nQ2FsbDtcbmNvbnN0IG1ldGFkYXRhXzEgPSByZXF1aXJlKFwiLi9tZXRhZGF0YVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgaHR0cDIgPSByZXF1aXJlKFwiaHR0cDJcIik7XG5jb25zdCBlcnJvcl8xID0gcmVxdWlyZShcIi4vZXJyb3JcIik7XG5jb25zdCB6bGliID0gcmVxdWlyZShcInpsaWJcIik7XG5jb25zdCBzdHJlYW1fZGVjb2Rlcl8xID0gcmVxdWlyZShcIi4vc3RyZWFtLWRlY29kZXJcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IHRsc18xID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IG9yY2FfMSA9IHJlcXVpcmUoXCIuL29yY2FcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdzZXJ2ZXJfY2FsbCc7XG5mdW5jdGlvbiB0cmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCB0ZXh0KTtcbn1cbmNsYXNzIFNlcnZlckxpc3RlbmVyQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oYWxmQ2xvc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2FuY2VsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB3aXRoT25SZWNlaXZlTWV0YWRhdGEob25SZWNlaXZlTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG9uUmVjZWl2ZU1ldGFkYXRhO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd2l0aE9uUmVjZWl2ZU1lc3NhZ2Uob25SZWNlaXZlTWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBvblJlY2VpdmVNZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd2l0aE9uUmVjZWl2ZUhhbGZDbG9zZShvblJlY2VpdmVIYWxmQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5oYWxmQ2xvc2UgPSBvblJlY2VpdmVIYWxmQ2xvc2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB3aXRoT25DYW5jZWwob25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvbkNhbmNlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGJ1aWxkKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb25SZWNlaXZlTWV0YWRhdGE6IHRoaXMubWV0YWRhdGEsXG4gICAgICAgICAgICBvblJlY2VpdmVNZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgICAgICBvblJlY2VpdmVIYWxmQ2xvc2U6IHRoaXMuaGFsZkNsb3NlLFxuICAgICAgICAgICAgb25DYW5jZWw6IHRoaXMuY2FuY2VsLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVyTGlzdGVuZXJCdWlsZGVyID0gU2VydmVyTGlzdGVuZXJCdWlsZGVyO1xuZnVuY3Rpb24gaXNJbnRlcmNlcHRpbmdTZXJ2ZXJMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHJldHVybiAobGlzdGVuZXIub25SZWNlaXZlTWV0YWRhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBsaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YS5sZW5ndGggPT09IDEpO1xufVxuY2xhc3MgSW50ZXJjZXB0aW5nU2VydmVyTGlzdGVuZXJJbXBsIHtcbiAgICBjb25zdHJ1Y3RvcihsaXN0ZW5lciwgbmV4dExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICAgICAgdGhpcy5uZXh0TGlzdGVuZXIgPSBuZXh0TGlzdGVuZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPbmNlIHRoZSBjYWxsIGlzIGNhbmNlbGxlZCwgaWdub3JlIGFsbCBvdGhlciBldmVudHMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdNZXRhZGF0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc1BlbmRpbmdNZXNzYWdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGVuZGluZ01lc3NhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdNZXNzYWdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzUGVuZGluZ0hhbGZDbG9zZSA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9jZXNzUGVuZGluZ01lc3NhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1BlbmRpbmdNZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRMaXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKHRoaXMucGVuZGluZ01lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhc1BlbmRpbmdNZXNzYWdlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc1BlbmRpbmdIYWxmQ2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1BlbmRpbmdIYWxmQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dExpc3RlbmVyLm9uUmVjZWl2ZUhhbGZDbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5oYXNQZW5kaW5nSGFsZkNsb3NlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhKG1ldGFkYXRhLCBpbnRlcmNlcHRlZE1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5leHRMaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YShpbnRlcmNlcHRlZE1ldGFkYXRhKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmdNZXNzYWdlKCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NQZW5kaW5nSGFsZkNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZShtZXNzYWdlLCBtc2cgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1BlbmRpbmdNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dExpc3RlbmVyLm9uUmVjZWl2ZU1lc3NhZ2UobXNnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NQZW5kaW5nSGFsZkNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblJlY2VpdmVIYWxmQ2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuZXIub25SZWNlaXZlSGFsZkNsb3NlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnByb2Nlc3NpbmdNZXRhZGF0YSB8fCB0aGlzLnByb2Nlc3NpbmdNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNQZW5kaW5nSGFsZkNsb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dExpc3RlbmVyLm9uUmVjZWl2ZUhhbGZDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0ZW5lci5vbkNhbmNlbCgpO1xuICAgICAgICB0aGlzLm5leHRMaXN0ZW5lci5vbkNhbmNlbCgpO1xuICAgIH1cbn1cbmNsYXNzIFJlc3BvbmRlckJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB3aXRoU3RhcnQoc3RhcnQpIHtcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd2l0aFNlbmRNZXRhZGF0YShzZW5kTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IHNlbmRNZXRhZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHdpdGhTZW5kTWVzc2FnZShzZW5kTWVzc2FnZSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBzZW5kTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHdpdGhTZW5kU3RhdHVzKHNlbmRTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzZW5kU3RhdHVzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYnVpbGQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgICAgICAgIHNlbmRNZXRhZGF0YTogdGhpcy5tZXRhZGF0YSxcbiAgICAgICAgICAgIHNlbmRNZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgICAgICBzZW5kU3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlJlc3BvbmRlckJ1aWxkZXIgPSBSZXNwb25kZXJCdWlsZGVyO1xuY29uc3QgZGVmYXVsdFNlcnZlckxpc3RlbmVyID0ge1xuICAgIG9uUmVjZWl2ZU1ldGFkYXRhOiAobWV0YWRhdGEsIG5leHQpID0+IHtcbiAgICAgICAgbmV4dChtZXRhZGF0YSk7XG4gICAgfSxcbiAgICBvblJlY2VpdmVNZXNzYWdlOiAobWVzc2FnZSwgbmV4dCkgPT4ge1xuICAgICAgICBuZXh0KG1lc3NhZ2UpO1xuICAgIH0sXG4gICAgb25SZWNlaXZlSGFsZkNsb3NlOiBuZXh0ID0+IHtcbiAgICAgICAgbmV4dCgpO1xuICAgIH0sXG4gICAgb25DYW5jZWw6ICgpID0+IHsgfSxcbn07XG5jb25zdCBkZWZhdWx0UmVzcG9uZGVyID0ge1xuICAgIHN0YXJ0OiBuZXh0ID0+IHtcbiAgICAgICAgbmV4dCgpO1xuICAgIH0sXG4gICAgc2VuZE1ldGFkYXRhOiAobWV0YWRhdGEsIG5leHQpID0+IHtcbiAgICAgICAgbmV4dChtZXRhZGF0YSk7XG4gICAgfSxcbiAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2UsIG5leHQpID0+IHtcbiAgICAgICAgbmV4dChtZXNzYWdlKTtcbiAgICB9LFxuICAgIHNlbmRTdGF0dXM6IChzdGF0dXMsIG5leHQpID0+IHtcbiAgICAgICAgbmV4dChzdGF0dXMpO1xuICAgIH0sXG59O1xuY2xhc3MgU2VydmVySW50ZXJjZXB0aW5nQ2FsbCB7XG4gICAgY29uc3RydWN0b3IobmV4dENhbGwsIHJlc3BvbmRlcikge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIHRoaXMubmV4dENhbGwgPSBuZXh0Q2FsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWV0YWRhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZW50TWV0YWRhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZUNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXNwb25kZXIgPSB7XG4gICAgICAgICAgICBzdGFydDogKF9hID0gcmVzcG9uZGVyID09PSBudWxsIHx8IHJlc3BvbmRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uZGVyLnN0YXJ0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBkZWZhdWx0UmVzcG9uZGVyLnN0YXJ0LFxuICAgICAgICAgICAgc2VuZE1ldGFkYXRhOiAoX2IgPSByZXNwb25kZXIgPT09IG51bGwgfHwgcmVzcG9uZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25kZXIuc2VuZE1ldGFkYXRhKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0UmVzcG9uZGVyLnNlbmRNZXRhZGF0YSxcbiAgICAgICAgICAgIHNlbmRNZXNzYWdlOiAoX2MgPSByZXNwb25kZXIgPT09IG51bGwgfHwgcmVzcG9uZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25kZXIuc2VuZE1lc3NhZ2UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRSZXNwb25kZXIuc2VuZE1lc3NhZ2UsXG4gICAgICAgICAgICBzZW5kU3RhdHVzOiAoX2QgPSByZXNwb25kZXIgPT09IG51bGwgfHwgcmVzcG9uZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXNwb25kZXIuc2VuZFN0YXR1cykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZGVmYXVsdFJlc3BvbmRlci5zZW5kU3RhdHVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm9jZXNzUGVuZGluZ01lc3NhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdNZXNzYWdlQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMubmV4dENhbGwuc2VuZE1lc3NhZ2UodGhpcy5wZW5kaW5nTWVzc2FnZSwgdGhpcy5wZW5kaW5nTWVzc2FnZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ01lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZUNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzUGVuZGluZ1N0YXR1cygpIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1N0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5uZXh0Q2FsbC5zZW5kU3RhdHVzKHRoaXMucGVuZGluZ1N0YXR1cyk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0KGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMucmVzcG9uZGVyLnN0YXJ0KGludGVyY2VwdGVkTGlzdGVuZXIgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgY29uc3QgZnVsbEludGVyY2VwdGVkTGlzdGVuZXIgPSB7XG4gICAgICAgICAgICAgICAgb25SZWNlaXZlTWV0YWRhdGE6IChfYSA9IGludGVyY2VwdGVkTGlzdGVuZXIgPT09IG51bGwgfHwgaW50ZXJjZXB0ZWRMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0ZWRMaXN0ZW5lci5vblJlY2VpdmVNZXRhZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdFNlcnZlckxpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2U6IChfYiA9IGludGVyY2VwdGVkTGlzdGVuZXIgPT09IG51bGwgfHwgaW50ZXJjZXB0ZWRMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0ZWRMaXN0ZW5lci5vblJlY2VpdmVNZXNzYWdlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0U2VydmVyTGlzdGVuZXIub25SZWNlaXZlTWVzc2FnZSxcbiAgICAgICAgICAgICAgICBvblJlY2VpdmVIYWxmQ2xvc2U6IChfYyA9IGludGVyY2VwdGVkTGlzdGVuZXIgPT09IG51bGwgfHwgaW50ZXJjZXB0ZWRMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0ZWRMaXN0ZW5lci5vblJlY2VpdmVIYWxmQ2xvc2UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRTZXJ2ZXJMaXN0ZW5lci5vblJlY2VpdmVIYWxmQ2xvc2UsXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6IChfZCA9IGludGVyY2VwdGVkTGlzdGVuZXIgPT09IG51bGwgfHwgaW50ZXJjZXB0ZWRMaXN0ZW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW50ZXJjZXB0ZWRMaXN0ZW5lci5vbkNhbmNlbCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZGVmYXVsdFNlcnZlckxpc3RlbmVyLm9uQ2FuY2VsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsSW50ZXJjZXB0aW5nTGlzdGVuZXIgPSBuZXcgSW50ZXJjZXB0aW5nU2VydmVyTGlzdGVuZXJJbXBsKGZ1bGxJbnRlcmNlcHRlZExpc3RlbmVyLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLm5leHRDYWxsLnN0YXJ0KGZpbmFsSW50ZXJjZXB0aW5nTGlzdGVuZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2VuZE1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZW50TWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc3BvbmRlci5zZW5kTWV0YWRhdGEobWV0YWRhdGEsIGludGVyY2VwdGVkTWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWV0YWRhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubmV4dENhbGwuc2VuZE1ldGFkYXRhKGludGVyY2VwdGVkTWV0YWRhdGEpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUGVuZGluZ01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BlbmRpbmdTdGF0dXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ01lc3NhZ2UgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuc2VudE1ldGFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXRhZGF0YShuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3BvbmRlci5zZW5kTWVzc2FnZShtZXNzYWdlLCBpbnRlcmNlcHRlZE1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTWVzc2FnZSA9IGludGVyY2VwdGVkTWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdNZXNzYWdlQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dENhbGwuc2VuZE1lc3NhZ2UoaW50ZXJjZXB0ZWRNZXNzYWdlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RhdHVzKHN0YXR1cykge1xuICAgICAgICB0aGlzLnJlc3BvbmRlci5zZW5kU3RhdHVzKHN0YXR1cywgaW50ZXJjZXB0ZWRTdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ01ldGFkYXRhIHx8IHRoaXMucHJvY2Vzc2luZ01lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBpbnRlcmNlcHRlZFN0YXR1cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dENhbGwuc2VuZFN0YXR1cyhpbnRlcmNlcHRlZFN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGFydFJlYWQoKSB7XG4gICAgICAgIHRoaXMubmV4dENhbGwuc3RhcnRSZWFkKCk7XG4gICAgfVxuICAgIGdldFBlZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRDYWxsLmdldFBlZXIoKTtcbiAgICB9XG4gICAgZ2V0RGVhZGxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRDYWxsLmdldERlYWRsaW5lKCk7XG4gICAgfVxuICAgIGdldEhvc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRDYWxsLmdldEhvc3QoKTtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRDYWxsLmdldEF1dGhDb250ZXh0KCk7XG4gICAgfVxuICAgIGdldENvbm5lY3Rpb25JbmZvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbC5nZXRDb25uZWN0aW9uSW5mbygpO1xuICAgIH1cbiAgICBnZXRNZXRyaWNzUmVjb3JkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRDYWxsLmdldE1ldHJpY3NSZWNvcmRlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuU2VydmVySW50ZXJjZXB0aW5nQ2FsbCA9IFNlcnZlckludGVyY2VwdGluZ0NhbGw7XG5jb25zdCBHUlBDX0FDQ0VQVF9FTkNPRElOR19IRUFERVIgPSAnZ3JwYy1hY2NlcHQtZW5jb2RpbmcnO1xuY29uc3QgR1JQQ19FTkNPRElOR19IRUFERVIgPSAnZ3JwYy1lbmNvZGluZyc7XG5jb25zdCBHUlBDX01FU1NBR0VfSEVBREVSID0gJ2dycGMtbWVzc2FnZSc7XG5jb25zdCBHUlBDX1NUQVRVU19IRUFERVIgPSAnZ3JwYy1zdGF0dXMnO1xuY29uc3QgR1JQQ19USU1FT1VUX0hFQURFUiA9ICdncnBjLXRpbWVvdXQnO1xuY29uc3QgREVBRExJTkVfUkVHRVggPSAvKFxcZHsxLDh9KVxccyooW0hNU211bl0pLztcbmNvbnN0IGRlYWRsaW5lVW5pdHNUb01zID0ge1xuICAgIEg6IDM2MDAwMDAsXG4gICAgTTogNjAwMDAsXG4gICAgUzogMTAwMCxcbiAgICBtOiAxLFxuICAgIHU6IDAuMDAxLFxuICAgIG46IDAuMDAwMDAxLFxufTtcbmNvbnN0IGRlZmF1bHRDb21wcmVzc2lvbkhlYWRlcnMgPSB7XG4gICAgLy8gVE9ETyhjamlocmlnKTogUmVtb3ZlIHRoZXNlIGVuY29kaW5nIGhlYWRlcnMgZnJvbSB0aGUgZGVmYXVsdCByZXNwb25zZVxuICAgIC8vIG9uY2UgY29tcHJlc3Npb24gaXMgaW50ZWdyYXRlZC5cbiAgICBbR1JQQ19BQ0NFUFRfRU5DT0RJTkdfSEVBREVSXTogJ2lkZW50aXR5LGRlZmxhdGUsZ3ppcCcsXG4gICAgW0dSUENfRU5DT0RJTkdfSEVBREVSXTogJ2lkZW50aXR5Jyxcbn07XG5jb25zdCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzID0ge1xuICAgIFtodHRwMi5jb25zdGFudHMuSFRUUDJfSEVBREVSX1NUQVRVU106IGh0dHAyLmNvbnN0YW50cy5IVFRQX1NUQVRVU19PSyxcbiAgICBbaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdOiAnYXBwbGljYXRpb24vZ3JwYytwcm90bycsXG59O1xuY29uc3QgZGVmYXVsdFJlc3BvbnNlT3B0aW9ucyA9IHtcbiAgICB3YWl0Rm9yVHJhaWxlcnM6IHRydWUsXG59O1xuY2xhc3MgQmFzZVNlcnZlckludGVyY2VwdGluZ0NhbGwge1xuICAgIGNvbnN0cnVjdG9yKHN0cmVhbSwgaGVhZGVycywgY2FsbEV2ZW50VHJhY2tlciwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5jYWxsRXZlbnRUcmFja2VyID0gY2FsbEV2ZW50VHJhY2tlcjtcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IG51bGw7XG4gICAgICAgIHRoaXMuZGVhZGxpbmVUaW1lciA9IG51bGw7XG4gICAgICAgIHRoaXMuZGVhZGxpbmUgPSBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5tYXhTZW5kTWVzc2FnZVNpemUgPSBjb25zdGFudHNfMS5ERUZBVUxUX01BWF9TRU5EX01FU1NBR0VfTEVOR1RIO1xuICAgICAgICB0aGlzLm1heFJlY2VpdmVNZXNzYWdlU2l6ZSA9IGNvbnN0YW50c18xLkRFRkFVTFRfTUFYX1JFQ0VJVkVfTUVTU0FHRV9MRU5HVEg7XG4gICAgICAgIHRoaXMuY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWV0YWRhdGFTZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMud2FudFRyYWlsZXJzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FuY2VsTm90aWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbmNvbWluZ0VuY29kaW5nID0gJ2lkZW50aXR5JztcbiAgICAgICAgdGhpcy5yZWFkUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5pc1JlYWRQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjZWl2ZWRIYWxmQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW1FbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1ldHJpY3NSZWNvcmRlciA9IG5ldyBvcmNhXzEuUGVyUmVxdWVzdE1ldHJpY1JlY29yZGVyKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtLm9uY2UoJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgLyogV2UgbmVlZCBhbiBlcnJvciBoYW5kbGVyIHRvIGF2b2lkIHVuY2F1Z2h0IGVycm9yIGV2ZW50IGV4Y2VwdGlvbnMsIGJ1dFxuICAgICAgICAgICAgICogdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gcmVhc29uYWJseSBkbyBoZXJlLiBBbnkgZXJyb3IgZXZlbnQgc2hvdWxkXG4gICAgICAgICAgICAgKiBoYXZlIGEgY29ycmVzcG9uZGluZyBjbG9zZSBldmVudCwgd2hpY2ggaGFuZGxlcyBlbWl0dGluZyB0aGUgY2FuY2VsbGVkXG4gICAgICAgICAgICAgKiBldmVudC4gQW5kIHRoZSBzdHJlYW0gaXMgbm93IGluIGEgYmFkIHN0YXRlLCBzbyB3ZSBjYW4ndCByZWFzb25hYmx5XG4gICAgICAgICAgICAgKiBleHBlY3QgdG8gYmUgYWJsZSB0byBzZW5kIGFuIGVycm9yIG92ZXIgaXQuICovXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRyYWNlKCdSZXF1ZXN0IHRvIG1ldGhvZCAnICtcbiAgICAgICAgICAgICAgICAoKF9hID0gdGhpcy5oYW5kbGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucGF0aCkgK1xuICAgICAgICAgICAgICAgICcgc3RyZWFtIGNsb3NlZCB3aXRoIHJzdENvZGUgJyArXG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ucnN0Q29kZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsRXZlbnRUcmFja2VyICYmICF0aGlzLnN0cmVhbUVuZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1FbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRXZlbnRUcmFja2VyLm9uU3RyZWFtRW5kKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFdmVudFRyYWNrZXIub25DYWxsRW5kKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLkNBTkNFTExFRCxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogJ1N0cmVhbSBjbG9zZWQgYmVmb3JlIHNlbmRpbmcgc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5vdGlmeU9uQ2FuY2VsKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0cmVhbS5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFGcmFtZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RyZWFtLnBhdXNlKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVuZEV2ZW50KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoJ2dycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWF4U2VuZE1lc3NhZ2VTaXplID0gb3B0aW9uc1snZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCddO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tYXhSZWNlaXZlTWVzc2FnZVNpemUgPSBvcHRpb25zWydncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoJ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3N0ID0gKF9hID0gaGVhZGVyc1snOmF1dGhvcml0eSddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBoZWFkZXJzLmhvc3Q7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IG5ldyBzdHJlYW1fZGVjb2Rlcl8xLlN0cmVhbURlY29kZXIodGhpcy5tYXhSZWNlaXZlTWVzc2FnZVNpemUpO1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhXzEuTWV0YWRhdGEuZnJvbUh0dHAySGVhZGVycyhoZWFkZXJzKTtcbiAgICAgICAgaWYgKGxvZ2dpbmcuaXNUcmFjZXJFbmFibGVkKFRSQUNFUl9OQU1FKSkge1xuICAgICAgICAgICAgdHJhY2UoJ1JlcXVlc3QgdG8gJyArXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnBhdGggK1xuICAgICAgICAgICAgICAgICcgcmVjZWl2ZWQgaGVhZGVycyAnICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShtZXRhZGF0YS50b0pTT04oKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVvdXRIZWFkZXIgPSBtZXRhZGF0YS5nZXQoR1JQQ19USU1FT1VUX0hFQURFUik7XG4gICAgICAgIGlmICh0aW1lb3V0SGVhZGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVGltZW91dEhlYWRlcih0aW1lb3V0SGVhZGVyWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmNvZGluZ0hlYWRlciA9IG1ldGFkYXRhLmdldChHUlBDX0VOQ09ESU5HX0hFQURFUik7XG4gICAgICAgIGlmIChlbmNvZGluZ0hlYWRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nRW5jb2RpbmcgPSBlbmNvZGluZ0hlYWRlclswXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgc2V2ZXJhbCBoZWFkZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBhcHBsaWNhdGlvblxuICAgICAgICBtZXRhZGF0YS5yZW1vdmUoR1JQQ19USU1FT1VUX0hFQURFUik7XG4gICAgICAgIG1ldGFkYXRhLnJlbW92ZShHUlBDX0VOQ09ESU5HX0hFQURFUik7XG4gICAgICAgIG1ldGFkYXRhLnJlbW92ZShHUlBDX0FDQ0VQVF9FTkNPRElOR19IRUFERVIpO1xuICAgICAgICBtZXRhZGF0YS5yZW1vdmUoaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9BQ0NFUFRfRU5DT0RJTkcpO1xuICAgICAgICBtZXRhZGF0YS5yZW1vdmUoaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9URSk7XG4gICAgICAgIG1ldGFkYXRhLnJlbW92ZShodHRwMi5jb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRSk7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gKF9iID0gc3RyZWFtLnNlc3Npb24pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zb2NrZXQ7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbkluZm8gPSB7XG4gICAgICAgICAgICBsb2NhbEFkZHJlc3M6IHNvY2tldCA9PT0gbnVsbCB8fCBzb2NrZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgICAgICAgICBsb2NhbFBvcnQ6IHNvY2tldCA9PT0gbnVsbCB8fCBzb2NrZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgICAgICAgICByZW1vdGVBZGRyZXNzOiBzb2NrZXQgPT09IG51bGwgfHwgc29ja2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICAgICAgICAgIHJlbW90ZVBvcnQ6IHNvY2tldCA9PT0gbnVsbCB8fCBzb2NrZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvY2tldC5yZW1vdGVQb3J0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2hvdWxkU2VuZE1ldHJpY3MgPSAhIW9wdGlvbnNbJ2dycGMuc2VydmVyX2NhbGxfbWV0cmljX3JlY29yZGluZyddO1xuICAgIH1cbiAgICBoYW5kbGVUaW1lb3V0SGVhZGVyKHRpbWVvdXRIZWFkZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aW1lb3V0SGVhZGVyLnRvU3RyaW5nKCkubWF0Y2goREVBRExJTkVfUkVHRVgpO1xuICAgICAgICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogYEludmFsaWQgJHtHUlBDX1RJTUVPVVRfSEVBREVSfSB2YWx1ZSBcIiR7dGltZW91dEhlYWRlcn1cImAsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGNvbnN0cnVjdG9yIHRvIGNvbXBsZXRlIGJlZm9yZSBzZW5kaW5nIHRoZSBlcnJvci5cbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZW91dCA9ICgrbWF0Y2hbMV0gKiBkZWFkbGluZVVuaXRzVG9Nc1ttYXRjaFsyXV0pIHwgMDtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5kZWFkbGluZSA9IG5vdy5zZXRNaWxsaXNlY29uZHMobm93LmdldE1pbGxpc2Vjb25kcygpICsgdGltZW91dCk7XG4gICAgICAgIHRoaXMuZGVhZGxpbmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0ge1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5ERUFETElORV9FWENFRURFRCxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAnRGVhZGxpbmUgZXhjZWVkZWQnLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc2VuZFN0YXR1cyhzdGF0dXMpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9XG4gICAgY2hlY2tDYW5jZWxsZWQoKSB7XG4gICAgICAgIC8qIEluIHNvbWUgY2FzZXMgdGhlIHN0cmVhbSBjYW4gYmVjb21lIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNsb3NlIGV2ZW50XG4gICAgICAgICAqIGZpcmVzLiBUaGF0IGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IHRoaXMgY2hlY2sgd29ya3MgYXJvdW5kICovXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxsZWQgJiYgKHRoaXMuc3RyZWFtLmRlc3Ryb3llZCB8fCB0aGlzLnN0cmVhbS5jbG9zZWQpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeU9uQ2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsbGVkO1xuICAgIH1cbiAgICBub3RpZnlPbkNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsTm90aWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbmNlbE5vdGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMubGlzdGVuZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNhbmNlbCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZGVhZGxpbmVUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVhZGxpbmVUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmx1c2ggaW5jb21pbmcgZGF0YSBmcmFtZXNcbiAgICAgICAgdGhpcy5zdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgc2VydmVyIGhhbmRsZXIgY2FuIHN0YXJ0IHNlbmRpbmcgbWVzc2FnZXMgd2l0aG91dCBleHBsaWNpdGx5IHNlbmRpbmdcbiAgICAgKiBtZXRhZGF0YS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHNlbmQgaGVhZGVycyBiZWZvcmUgc2VuZGluZyBhbnlcbiAgICAgKiBtZXNzYWdlcy4gVGhpcyBmdW5jdGlvbiBkb2VzIHRoYXQgaWYgbmVjZXNzYXJ5LlxuICAgICAqL1xuICAgIG1heWJlU2VuZE1ldGFkYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFTZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXRhZGF0YShuZXcgbWV0YWRhdGFfMS5NZXRhZGF0YSgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBtZXNzYWdlIHRvIGEgbGVuZ3RoLWRlbGltaXRlZCBieXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHNlcmlhbGl6ZU1lc3NhZ2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IHRoaXMuaGFuZGxlci5zZXJpYWxpemUodmFsdWUpO1xuICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gbWVzc2FnZUJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYnl0ZUxlbmd0aCArIDUpO1xuICAgICAgICAvKiBOb3RlOiByZXNwb25zZSBjb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCwgc28gdGhpc1xuICAgICAgICAgKiBjb21wcmVzc2VkIGJpdCBpcyBhbHdheXMgMC4gKi9cbiAgICAgICAgb3V0cHV0LndyaXRlVUludDgoMCwgMCk7XG4gICAgICAgIG91dHB1dC53cml0ZVVJbnQzMkJFKGJ5dGVMZW5ndGgsIDEpO1xuICAgICAgICBtZXNzYWdlQnVmZmVyLmNvcHkob3V0cHV0LCA1KTtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gICAgZGVjb21wcmVzc01lc3NhZ2UobWVzc2FnZSwgZW5jb2RpbmcpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnRzID0gbWVzc2FnZS5zdWJhcnJheSg1KTtcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZUNvbnRlbnRzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVuY29kaW5nID09PSAnZGVmbGF0ZScgfHwgZW5jb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgbGV0IGRlY29tcHJlc3NlcjtcbiAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb21wcmVzc2VyID0gemxpYi5jcmVhdGVJbmZsYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWNvbXByZXNzZXIgPSB6bGliLmNyZWF0ZUd1bnppcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWxMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VQYXJ0cyA9IFtdO1xuICAgICAgICAgICAgICAgIGRlY29tcHJlc3Nlci5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUGFydHMucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heFJlY2VpdmVNZXNzYWdlU2l6ZSAhPT0gLTEgJiYgdG90YWxMZW5ndGggPiB0aGlzLm1heFJlY2VpdmVNZXNzYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc2VyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlJFU09VUkNFX0VYSEFVU1RFRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgUmVjZWl2ZWQgbWVzc2FnZSB0aGF0IGRlY29tcHJlc3NlcyB0byBhIHNpemUgbGFyZ2VyIHRoYW4gJHt0aGlzLm1heFJlY2VpdmVNZXNzYWdlU2l6ZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlY29tcHJlc3Nlci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQobWVzc2FnZVBhcnRzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVjb21wcmVzc2VyLndyaXRlKG1lc3NhZ2VDb250ZW50cyk7XG4gICAgICAgICAgICAgICAgZGVjb21wcmVzc2VyLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVELFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IGBSZWNlaXZlZCBtZXNzYWdlIGNvbXByZXNzZWQgd2l0aCB1bnN1cHBvcnRlZCBlbmNvZGluZyBcIiR7ZW5jb2Rpbmd9XCJgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVjb21wcmVzc0FuZE1heWJlUHVzaChxdWV1ZUVudHJ5KSB7XG4gICAgICAgIGlmIChxdWV1ZUVudHJ5LnR5cGUgIT09ICdDT01QUkVTU0VEJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHF1ZXVlIGVudHJ5IHR5cGU6ICR7cXVldWVFbnRyeS50eXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWQgPSBxdWV1ZUVudHJ5LmNvbXByZXNzZWRNZXNzYWdlLnJlYWRVSW50OCgwKSA9PT0gMTtcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZE1lc3NhZ2VFbmNvZGluZyA9IGNvbXByZXNzZWRcbiAgICAgICAgICAgID8gdGhpcy5pbmNvbWluZ0VuY29kaW5nXG4gICAgICAgICAgICA6ICdpZGVudGl0eSc7XG4gICAgICAgIGxldCBkZWNvbXByZXNzZWRNZXNzYWdlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVjb21wcmVzc2VkTWVzc2FnZSA9IGF3YWl0IHRoaXMuZGVjb21wcmVzc01lc3NhZ2UocXVldWVFbnRyeS5jb21wcmVzc2VkTWVzc2FnZSwgY29tcHJlc3NlZE1lc3NhZ2VFbmNvZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5zZW5kU3RhdHVzKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHF1ZXVlRW50cnkucGFyc2VkTWVzc2FnZSA9IHRoaXMuaGFuZGxlci5kZXNlcmlhbGl6ZShkZWNvbXByZXNzZWRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRTdGF0dXMoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5JTlRFUk5BTCxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBgRXJyb3IgZGVzZXJpYWxpemluZyByZXF1ZXN0OiAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUVudHJ5LnR5cGUgPSAnUkVBREFCTEUnO1xuICAgICAgICB0aGlzLm1heWJlUHVzaE5leHRNZXNzYWdlKCk7XG4gICAgfVxuICAgIG1heWJlUHVzaE5leHRNZXNzYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAmJlxuICAgICAgICAgICAgdGhpcy5pc1JlYWRQZW5kaW5nICYmXG4gICAgICAgICAgICB0aGlzLnJlYWRRdWV1ZS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICB0aGlzLnJlYWRRdWV1ZVswXS50eXBlICE9PSAnQ09NUFJFU1NFRCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbmV4dFF1ZXVlRW50cnkgPSB0aGlzLnJlYWRRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKG5leHRRdWV1ZUVudHJ5LnR5cGUgPT09ICdSRUFEQUJMRScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLm9uUmVjZWl2ZU1lc3NhZ2UobmV4dFF1ZXVlRW50cnkucGFyc2VkTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBuZXh0UXVldWVFbnRyeS50eXBlID09PSAnSEFMRl9DTE9TRSdcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyLm9uUmVjZWl2ZUhhbGZDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZURhdGFGcmFtZShkYXRhKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tDYW5jZWxsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNlKCdSZXF1ZXN0IHRvICcgK1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnBhdGggK1xuICAgICAgICAgICAgJyByZWNlaXZlZCBkYXRhIGZyYW1lIG9mIHNpemUgJyArXG4gICAgICAgICAgICBkYXRhLmxlbmd0aCk7XG4gICAgICAgIGxldCByYXdNZXNzYWdlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJhd01lc3NhZ2VzID0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRTdGF0dXMoeyBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuUkVTT1VSQ0VfRVhIQVVTVEVELCBkZXRhaWxzOiBlLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtZXNzYWdlQnl0ZXMgb2YgcmF3TWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtLnBhdXNlKCk7XG4gICAgICAgICAgICBjb25zdCBxdWV1ZUVudHJ5ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdDT01QUkVTU0VEJyxcbiAgICAgICAgICAgICAgICBjb21wcmVzc2VkTWVzc2FnZTogbWVzc2FnZUJ5dGVzLFxuICAgICAgICAgICAgICAgIHBhcnNlZE1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZWFkUXVldWUucHVzaChxdWV1ZUVudHJ5KTtcbiAgICAgICAgICAgIHRoaXMuZGVjb21wcmVzc0FuZE1heWJlUHVzaChxdWV1ZUVudHJ5KTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuY2FsbEV2ZW50VHJhY2tlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZE1lc3NhZ2VSZWNlaXZlZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUVuZEV2ZW50KCkge1xuICAgICAgICB0aGlzLnJlYWRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdIQUxGX0NMT1NFJyxcbiAgICAgICAgICAgIGNvbXByZXNzZWRNZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgcGFyc2VkTWVzc2FnZTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVjZWl2ZWRIYWxmQ2xvc2UgPSB0cnVlO1xuICAgICAgICB0aGlzLm1heWJlUHVzaE5leHRNZXNzYWdlKCk7XG4gICAgfVxuICAgIHN0YXJ0KGxpc3RlbmVyKSB7XG4gICAgICAgIHRyYWNlKCdSZXF1ZXN0IHRvICcgKyB0aGlzLmhhbmRsZXIucGF0aCArICcgc3RhcnQgY2FsbGVkJyk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgIGxpc3RlbmVyLm9uUmVjZWl2ZU1ldGFkYXRhKHRoaXMubWV0YWRhdGEpO1xuICAgIH1cbiAgICBzZW5kTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tDYW5jZWxsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhU2VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YWRhdGFTZW50ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY3VzdG9tID0gbWV0YWRhdGEgPyBtZXRhZGF0YS50b0h0dHAySGVhZGVycygpIDogbnVsbDtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSwgZGVmYXVsdENvbXByZXNzaW9uSGVhZGVycyksIGN1c3RvbSk7XG4gICAgICAgIHRoaXMuc3RyZWFtLnJlc3BvbmQoaGVhZGVycywgZGVmYXVsdFJlc3BvbnNlT3B0aW9ucyk7XG4gICAgfVxuICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHRoaXMuc2VyaWFsaXplTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogYEVycm9yIHNlcmlhbGl6aW5nIHJlc3BvbnNlOiAkeygwLCBlcnJvcl8xLmdldEVycm9yTWVzc2FnZSkoZSl9YCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heFNlbmRNZXNzYWdlU2l6ZSAhPT0gLTEgJiZcbiAgICAgICAgICAgIHJlc3BvbnNlLmxlbmd0aCAtIDUgPiB0aGlzLm1heFNlbmRNZXNzYWdlU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZW5kU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuUkVTT1VSQ0VfRVhIQVVTVEVELFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IGBTZW50IG1lc3NhZ2UgbGFyZ2VyIHRoYW4gbWF4ICgke3Jlc3BvbnNlLmxlbmd0aH0gdnMuICR7dGhpcy5tYXhTZW5kTWVzc2FnZVNpemV9KWAsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heWJlU2VuZE1ldGFkYXRhKCk7XG4gICAgICAgIHRyYWNlKCdSZXF1ZXN0IHRvICcgK1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyLnBhdGggK1xuICAgICAgICAgICAgJyBzZW50IGRhdGEgZnJhbWUgb2Ygc2l6ZSAnICtcbiAgICAgICAgICAgIHJlc3BvbnNlLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHJlc3BvbnNlLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBFcnJvciB3cml0aW5nIG1lc3NhZ2U6ICR7KDAsIGVycm9yXzEuZ2V0RXJyb3JNZXNzYWdlKShlcnJvcil9YCxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF9hID0gdGhpcy5jYWxsRXZlbnRUcmFja2VyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWRkTWVzc2FnZVNlbnQoKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZW5kU3RhdHVzKHN0YXR1cykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tDYW5jZWxsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNlKCdSZXF1ZXN0IHRvIG1ldGhvZCAnICtcbiAgICAgICAgICAgICgoX2EgPSB0aGlzLmhhbmRsZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wYXRoKSArXG4gICAgICAgICAgICAnIGVuZGVkIHdpdGggc3RhdHVzIGNvZGU6ICcgK1xuICAgICAgICAgICAgY29uc3RhbnRzXzEuU3RhdHVzW3N0YXR1cy5jb2RlXSArXG4gICAgICAgICAgICAnIGRldGFpbHM6ICcgK1xuICAgICAgICAgICAgc3RhdHVzLmRldGFpbHMpO1xuICAgICAgICBjb25zdCBzdGF0dXNNZXRhZGF0YSA9IChfYyA9IChfYiA9IHN0YXR1cy5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNsb25lKCkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZFNlbmRNZXRyaWNzKSB7XG4gICAgICAgICAgICBzdGF0dXNNZXRhZGF0YS5zZXQob3JjYV8xLkdSUENfTUVUUklDU19IRUFERVIsIHRoaXMubWV0cmljc1JlY29yZGVyLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YVNlbnQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy53YW50VHJhaWxlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhbnRUcmFpbGVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0ub25jZSgnd2FudFRyYWlsZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsRXZlbnRUcmFja2VyICYmICF0aGlzLnN0cmVhbUVuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbUVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbEV2ZW50VHJhY2tlci5vblN0cmVhbUVuZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbEV2ZW50VHJhY2tlci5vbkNhbGxFbmQoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFpbGVyc1RvU2VuZCA9IE9iamVjdC5hc3NpZ24oeyBbR1JQQ19TVEFUVVNfSEVBREVSXTogc3RhdHVzLmNvZGUsIFtHUlBDX01FU1NBR0VfSEVBREVSXTogZW5jb2RlVVJJKHN0YXR1cy5kZXRhaWxzKSB9LCBzdGF0dXNNZXRhZGF0YS50b0h0dHAySGVhZGVycygpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0uc2VuZFRyYWlsZXJzKHRyYWlsZXJzVG9TZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlPbkNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlPbkNhbmNlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbEV2ZW50VHJhY2tlciAmJiAhdGhpcy5zdHJlYW1FbmRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtRW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbEV2ZW50VHJhY2tlci5vblN0cmVhbUVuZCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxFdmVudFRyYWNrZXIub25DYWxsRW5kKHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUcmFpbGVycy1vbmx5IHJlc3BvbnNlXG4gICAgICAgICAgICBjb25zdCB0cmFpbGVyc1RvU2VuZCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IFtHUlBDX1NUQVRVU19IRUFERVJdOiBzdGF0dXMuY29kZSwgW0dSUENfTUVTU0FHRV9IRUFERVJdOiBlbmNvZGVVUkkoc3RhdHVzLmRldGFpbHMpIH0sIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMpLCBzdGF0dXNNZXRhZGF0YS50b0h0dHAySGVhZGVycygpKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtLnJlc3BvbmQodHJhaWxlcnNUb1NlbmQsIHsgZW5kU3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlPbkNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0UmVhZCgpIHtcbiAgICAgICAgdHJhY2UoJ1JlcXVlc3QgdG8gJyArIHRoaXMuaGFuZGxlci5wYXRoICsgJyBzdGFydFJlYWQgY2FsbGVkJyk7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUmVhZFBlbmRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5yZWFkUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVjZWl2ZWRIYWxmQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5yZXN1bWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWF5YmVQdXNoTmV4dE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRQZWVyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IChfYSA9IHRoaXMuc3RyZWFtLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zb2NrZXQ7XG4gICAgICAgIGlmIChzb2NrZXQgPT09IG51bGwgfHwgc29ja2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb2NrZXQucmVtb3RlQWRkcmVzcykge1xuICAgICAgICAgICAgaWYgKHNvY2tldC5yZW1vdGVQb3J0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3NvY2tldC5yZW1vdGVBZGRyZXNzfToke3NvY2tldC5yZW1vdGVQb3J0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldERlYWRsaW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWFkbGluZTtcbiAgICB9XG4gICAgZ2V0SG9zdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9zdDtcbiAgICB9XG4gICAgZ2V0QXV0aENvbnRleHQoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCgoX2EgPSB0aGlzLnN0cmVhbS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29ja2V0KSBpbnN0YW5jZW9mIHRsc18xLlRMU1NvY2tldCkge1xuICAgICAgICAgICAgY29uc3QgcGVlckNlcnRpZmljYXRlID0gdGhpcy5zdHJlYW0uc2Vzc2lvbi5zb2NrZXQuZ2V0UGVlckNlcnRpZmljYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRyYW5zcG9ydFNlY3VyaXR5VHlwZTogJ3NzbCcsXG4gICAgICAgICAgICAgICAgc3NsUGVlckNlcnRpZmljYXRlOiBwZWVyQ2VydGlmaWNhdGUucmF3ID8gcGVlckNlcnRpZmljYXRlIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbm5lY3Rpb25JbmZvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uSW5mbztcbiAgICB9XG4gICAgZ2V0TWV0cmljc1JlY29yZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRyaWNzUmVjb3JkZXI7XG4gICAgfVxufVxuZXhwb3J0cy5CYXNlU2VydmVySW50ZXJjZXB0aW5nQ2FsbCA9IEJhc2VTZXJ2ZXJJbnRlcmNlcHRpbmdDYWxsO1xuZnVuY3Rpb24gZ2V0U2VydmVySW50ZXJjZXB0aW5nQ2FsbChpbnRlcmNlcHRvcnMsIHN0cmVhbSwgaGVhZGVycywgY2FsbEV2ZW50VHJhY2tlciwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSB7XG4gICAgICAgIHBhdGg6IGhhbmRsZXIucGF0aCxcbiAgICAgICAgcmVxdWVzdFN0cmVhbTogaGFuZGxlci50eXBlID09PSAnY2xpZW50U3RyZWFtJyB8fCBoYW5kbGVyLnR5cGUgPT09ICdiaWRpJyxcbiAgICAgICAgcmVzcG9uc2VTdHJlYW06IGhhbmRsZXIudHlwZSA9PT0gJ3NlcnZlclN0cmVhbScgfHwgaGFuZGxlci50eXBlID09PSAnYmlkaScsXG4gICAgICAgIHJlcXVlc3REZXNlcmlhbGl6ZTogaGFuZGxlci5kZXNlcmlhbGl6ZSxcbiAgICAgICAgcmVzcG9uc2VTZXJpYWxpemU6IGhhbmRsZXIuc2VyaWFsaXplLFxuICAgIH07XG4gICAgY29uc3QgYmFzZUNhbGwgPSBuZXcgQmFzZVNlcnZlckludGVyY2VwdGluZ0NhbGwoc3RyZWFtLCBoZWFkZXJzLCBjYWxsRXZlbnRUcmFja2VyLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gaW50ZXJjZXB0b3JzLnJlZHVjZSgoY2FsbCwgaW50ZXJjZXB0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yKG1ldGhvZERlZmluaXRpb24sIGNhbGwpO1xuICAgIH0sIGJhc2VDYWxsKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZlci1pbnRlcmNlcHRvcnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xudmFyIF9fcnVuSW5pdGlhbGl6ZXJzID0gKHRoaXMgJiYgdGhpcy5fX3J1bkluaXRpYWxpemVycykgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gICAgfVxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcbnZhciBfX2VzRGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZXNEZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gICAgZG9uZSA9IHRydWU7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZXJ2ZXIgPSB2b2lkIDA7XG5jb25zdCBodHRwMiA9IHJlcXVpcmUoXCJodHRwMlwiKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3Qgc2VydmVyX2NhbGxfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1jYWxsXCIpO1xuY29uc3Qgc2VydmVyX2NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXItY3JlZGVudGlhbHNcIik7XG5jb25zdCByZXNvbHZlcl8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZXJcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IHN1YmNoYW5uZWxfYWRkcmVzc18xID0gcmVxdWlyZShcIi4vc3ViY2hhbm5lbC1hZGRyZXNzXCIpO1xuY29uc3QgdXJpX3BhcnNlcl8xID0gcmVxdWlyZShcIi4vdXJpLXBhcnNlclwiKTtcbmNvbnN0IGNoYW5uZWx6XzEgPSByZXF1aXJlKFwiLi9jaGFubmVselwiKTtcbmNvbnN0IHNlcnZlcl9pbnRlcmNlcHRvcnNfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1pbnRlcmNlcHRvcnNcIik7XG5jb25zdCBVTkxJTUlURURfQ09OTkVDVElPTl9BR0VfTVMgPSB+KDEgPDwgMzEpO1xuY29uc3QgS0VFUEFMSVZFX01BWF9USU1FX01TID0gfigxIDw8IDMxKTtcbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX01TID0gMjAwMDA7XG5jb25zdCBNQVhfQ09OTkVDVElPTl9JRExFX01TID0gfigxIDw8IDMxKTtcbmNvbnN0IHsgSFRUUDJfSEVBREVSX1BBVEggfSA9IGh0dHAyLmNvbnN0YW50cztcbmNvbnN0IFRSQUNFUl9OQU1FID0gJ3NlcnZlcic7XG5jb25zdCBrTWF4QWdlID0gQnVmZmVyLmZyb20oJ21heF9hZ2UnKTtcbmZ1bmN0aW9uIHNlcnZlckNhbGxUcmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsICdzZXJ2ZXJfY2FsbCcsIHRleHQpO1xufVxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuLyoqXG4gKiBEZWNvcmF0b3IgdG8gd3JhcCBhIGNsYXNzIG1ldGhvZCB3aXRoIHV0aWwuZGVwcmVjYXRlXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBvdXRwdXQgaWYgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kIGlzIGNhbGxlZFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdXRpbC5kZXByZWNhdGUodGFyZ2V0LCBtZXNzYWdlKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0VW5pbXBsZW1lbnRlZFN0YXR1c1Jlc3BvbnNlKG1ldGhvZE5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5JTVBMRU1FTlRFRCxcbiAgICAgICAgZGV0YWlsczogYFRoZSBzZXJ2ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBtZXRob2QgJHttZXRob2ROYW1lfWAsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRIYW5kbGVyKGhhbmRsZXJUeXBlLCBtZXRob2ROYW1lKSB7XG4gICAgY29uc3QgdW5pbXBsZW1lbnRlZFN0YXR1c1Jlc3BvbnNlID0gZ2V0VW5pbXBsZW1lbnRlZFN0YXR1c1Jlc3BvbnNlKG1ldGhvZE5hbWUpO1xuICAgIHN3aXRjaCAoaGFuZGxlclR5cGUpIHtcbiAgICAgICAgY2FzZSAndW5hcnknOlxuICAgICAgICAgICAgcmV0dXJuIChjYWxsLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuaW1wbGVtZW50ZWRTdGF0dXNSZXNwb25zZSwgbnVsbCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdjbGllbnRTdHJlYW0nOlxuICAgICAgICAgICAgcmV0dXJuIChjYWxsLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuaW1wbGVtZW50ZWRTdGF0dXNSZXNwb25zZSwgbnVsbCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdzZXJ2ZXJTdHJlYW0nOlxuICAgICAgICAgICAgcmV0dXJuIChjYWxsKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbC5lbWl0KCdlcnJvcicsIHVuaW1wbGVtZW50ZWRTdGF0dXNSZXNwb25zZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlICdiaWRpJzpcbiAgICAgICAgICAgIHJldHVybiAoY2FsbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGwuZW1pdCgnZXJyb3InLCB1bmltcGxlbWVudGVkU3RhdHVzUmVzcG9uc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBoYW5kbGVyVHlwZSAke2hhbmRsZXJUeXBlfWApO1xuICAgIH1cbn1cbmxldCBTZXJ2ZXIgPSAoKCkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBsZXQgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMgPSBbXTtcbiAgICBsZXQgX3N0YXJ0X2RlY29yYXRvcnM7XG4gICAgcmV0dXJuIF9hID0gY2xhc3MgU2VydmVyIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kUG9ydHMgPSAoX19ydW5Jbml0aWFsaXplcnModGhpcywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpLCBuZXcgTWFwKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cDJTZXJ2ZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkbGVUaW1lb3V0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbnMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogVGhpcyBmaWVsZCBvbmx5IGV4aXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgc3RhcnQgbWV0aG9kIHRocm93cyBhbiBlcnJvciBpZlxuICAgICAgICAgICAgICAgICAqIGl0IGlzIGNhbGxlZCB0d2ljZSwgYXMgaXQgZGlkIHByZXZpb3VzbHkuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zaHV0ZG93biA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyQWRkcmVzc1N0cmluZyA9ICdudWxsJztcbiAgICAgICAgICAgICAgICAvLyBDaGFubmVseiBJbmZvXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsekVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbJ2dycGMuZW5hYmxlX2NoYW5uZWx6J10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsekVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVselRyYWNlID0gbmV3IGNoYW5uZWx6XzEuQ2hhbm5lbHpUcmFjZVN0dWIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsVHJhY2tlciA9IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2FsbFRyYWNrZXJTdHViKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJDaGlsZHJlblRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNoaWxkcmVuVHJhY2tlclN0dWIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ2hpbGRyZW5UcmFja2VyID0gbmV3IGNoYW5uZWx6XzEuQ2hhbm5lbHpDaGlsZHJlblRyYWNrZXJTdHViKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWx6VHJhY2UgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVselRyYWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNhbGxUcmFja2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJDaGlsZHJlblRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNoaWxkcmVuVHJhY2tlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25DaGlsZHJlblRyYWNrZXIgPSBuZXcgY2hhbm5lbHpfMS5DaGFubmVsekNoaWxkcmVuVHJhY2tlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWx6UmVmID0gKDAsIGNoYW5uZWx6XzEucmVnaXN0ZXJDaGFubmVselNlcnZlcikoJ3NlcnZlcicsICgpID0+IHRoaXMuZ2V0Q2hhbm5lbHpJbmZvKCksIHRoaXMuY2hhbm5lbHpFbmFibGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWx6VHJhY2UuYWRkVHJhY2UoJ0NUX0lORk8nLCAnU2VydmVyIGNyZWF0ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1heENvbm5lY3Rpb25BZ2VNcyA9XG4gICAgICAgICAgICAgICAgICAgIChfYiA9IHRoaXMub3B0aW9uc1snZ3JwYy5tYXhfY29ubmVjdGlvbl9hZ2VfbXMnXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogVU5MSU1JVEVEX0NPTk5FQ1RJT05fQUdFX01TO1xuICAgICAgICAgICAgICAgIHRoaXMubWF4Q29ubmVjdGlvbkFnZUdyYWNlTXMgPVxuICAgICAgICAgICAgICAgICAgICAoX2MgPSB0aGlzLm9wdGlvbnNbJ2dycGMubWF4X2Nvbm5lY3Rpb25fYWdlX2dyYWNlX21zJ10pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IFVOTElNSVRFRF9DT05ORUNUSU9OX0FHRV9NUztcbiAgICAgICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWVNcyA9XG4gICAgICAgICAgICAgICAgICAgIChfZCA9IHRoaXMub3B0aW9uc1snZ3JwYy5rZWVwYWxpdmVfdGltZV9tcyddKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBLRUVQQUxJVkVfTUFYX1RJTUVfTVM7XG4gICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lb3V0TXMgPVxuICAgICAgICAgICAgICAgICAgICAoX2UgPSB0aGlzLm9wdGlvbnNbJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnXSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogS0VFUEFMSVZFX1RJTUVPVVRfTVM7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWRsZVRpbWVvdXQgPVxuICAgICAgICAgICAgICAgICAgICAoX2YgPSB0aGlzLm9wdGlvbnNbJ2dycGMubWF4X2Nvbm5lY3Rpb25faWRsZV9tcyddKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiBNQVhfQ09OTkVDVElPTl9JRExFX01TO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmVyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWF4U2VuZEhlYWRlckJsb2NrTGVuZ3RoOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICgnZ3JwYy1ub2RlLm1heF9zZXNzaW9uX21lbW9yeScgaW4gdGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmVyT3B0aW9ucy5tYXhTZXNzaW9uTWVtb3J5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1snZ3JwYy1ub2RlLm1heF9zZXNzaW9uX21lbW9yeSddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLyogQnkgZGVmYXVsdCwgc2V0IGEgdmVyeSBsYXJnZSBtYXggc2Vzc2lvbiBtZW1vcnkgbGltaXQsIHRvIGVmZmVjdGl2ZWx5XG4gICAgICAgICAgICAgICAgICAgICAqIGRpc2FibGUgZW5mb3JjZW1lbnQgb2YgdGhlIGxpbWl0LiBTb21lIHRlc3RpbmcgaW5kaWNhdGVzIHRoYXQgTm9kZSdzXG4gICAgICAgICAgICAgICAgICAgICAqIGJlaGF2aW9yIGRlZ3JhZGVzIGJhZGx5IHdoZW4gdGhpcyBsaW1pdCBpcyByZWFjaGVkLCBzbyB3ZSBzb2x2ZSB0aGF0XG4gICAgICAgICAgICAgICAgICAgICAqIGJ5IGRpc2FibGluZyB0aGUgY2hlY2sgZW50aXJlbHkuICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmVyT3B0aW9ucy5tYXhTZXNzaW9uTWVtb3J5ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgnZ3JwYy5tYXhfY29uY3VycmVudF9zdHJlYW1zJyBpbiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2ZXJPcHRpb25zLnNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29uY3VycmVudFN0cmVhbXM6IHRoaXMub3B0aW9uc1snZ3JwYy5tYXhfY29uY3VycmVudF9zdHJlYW1zJ10sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3JzID0gKF9nID0gdGhpcy5vcHRpb25zLmludGVyY2VwdG9ycykgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogW107XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnU2VydmVyIGNvbnN0cnVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZXRDaGFubmVsekluZm8oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2U6IHRoaXMuY2hhbm5lbHpUcmFjZSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbFRyYWNrZXI6IHRoaXMuY2FsbFRyYWNrZXIsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQ2hpbGRyZW46IHRoaXMubGlzdGVuZXJDaGlsZHJlblRyYWNrZXIuZ2V0Q2hpbGRMaXN0cygpLFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uQ2hpbGRyZW46IHRoaXMuc2Vzc2lvbkNoaWxkcmVuVHJhY2tlci5nZXRDaGlsZExpc3RzKCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldENoYW5uZWx6U2Vzc2lvbkluZm8oc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIHZhciBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gdGhpcy5zZXNzaW9ucy5nZXQoc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvblNvY2tldCA9IHNlc3Npb24uc29ja2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW90ZUFkZHJlc3MgPSBzZXNzaW9uU29ja2V0LnJlbW90ZUFkZHJlc3NcbiAgICAgICAgICAgICAgICAgICAgPyAoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuc3RyaW5nVG9TdWJjaGFubmVsQWRkcmVzcykoc2Vzc2lvblNvY2tldC5yZW1vdGVBZGRyZXNzLCBzZXNzaW9uU29ja2V0LnJlbW90ZVBvcnQpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEFkZHJlc3MgPSBzZXNzaW9uU29ja2V0LmxvY2FsQWRkcmVzc1xuICAgICAgICAgICAgICAgICAgICA/ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdHJpbmdUb1N1YmNoYW5uZWxBZGRyZXNzKShzZXNzaW9uU29ja2V0LmxvY2FsQWRkcmVzcywgc2Vzc2lvblNvY2tldC5sb2NhbFBvcnQpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgdGxzSW5mbztcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5lbmNyeXB0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGxzU29ja2V0ID0gc2Vzc2lvblNvY2tldDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2lwaGVySW5mbyA9IHRsc1NvY2tldC5nZXRDaXBoZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VydGlmaWNhdGUgPSB0bHNTb2NrZXQuZ2V0Q2VydGlmaWNhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVlckNlcnRpZmljYXRlID0gdGxzU29ja2V0LmdldFBlZXJDZXJ0aWZpY2F0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0bHNJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyU3VpdGVTdGFuZGFyZE5hbWU6IChfYiA9IGNpcGhlckluZm8uc3RhbmRhcmROYW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyU3VpdGVPdGhlck5hbWU6IGNpcGhlckluZm8uc3RhbmRhcmROYW1lID8gbnVsbCA6IGNpcGhlckluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2VydGlmaWNhdGU6IGNlcnRpZmljYXRlICYmICdyYXcnIGluIGNlcnRpZmljYXRlID8gY2VydGlmaWNhdGUucmF3IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUNlcnRpZmljYXRlOiBwZWVyQ2VydGlmaWNhdGUgJiYgJ3JhdycgaW4gcGVlckNlcnRpZmljYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwZWVyQ2VydGlmaWNhdGUucmF3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGxzSW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNvY2tldEluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZUFkZHJlc3M6IHJlbW90ZUFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxBZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICBzZWN1cml0eTogdGxzSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtc1N0YXJ0ZWQ6IHNlc3Npb25JbmZvLnN0cmVhbVRyYWNrZXIuY2FsbHNTdGFydGVkLFxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1zU3VjY2VlZGVkOiBzZXNzaW9uSW5mby5zdHJlYW1UcmFja2VyLmNhbGxzU3VjY2VlZGVkLFxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1zRmFpbGVkOiBzZXNzaW9uSW5mby5zdHJlYW1UcmFja2VyLmNhbGxzRmFpbGVkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1NlbnQ6IHNlc3Npb25JbmZvLm1lc3NhZ2VzU2VudCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNSZWNlaXZlZDogc2Vzc2lvbkluZm8ubWVzc2FnZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAga2VlcEFsaXZlc1NlbnQ6IHNlc3Npb25JbmZvLmtlZXBBbGl2ZXNTZW50LFxuICAgICAgICAgICAgICAgICAgICBsYXN0TG9jYWxTdHJlYW1DcmVhdGVkVGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsYXN0UmVtb3RlU3RyZWFtQ3JlYXRlZFRpbWVzdGFtcDogc2Vzc2lvbkluZm8uc3RyZWFtVHJhY2tlci5sYXN0Q2FsbFN0YXJ0ZWRUaW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNZXNzYWdlU2VudFRpbWVzdGFtcDogc2Vzc2lvbkluZm8ubGFzdE1lc3NhZ2VTZW50VGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgICBsYXN0TWVzc2FnZVJlY2VpdmVkVGltZXN0YW1wOiBzZXNzaW9uSW5mby5sYXN0TWVzc2FnZVJlY2VpdmVkVGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEZsb3dDb250cm9sV2luZG93OiAoX2MgPSBzZXNzaW9uLnN0YXRlLmxvY2FsV2luZG93U2l6ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlRmxvd0NvbnRyb2xXaW5kb3c6IChfZCA9IHNlc3Npb24uc3RhdGUucmVtb3RlV2luZG93U2l6ZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXRJbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhY2UodGV4dCkge1xuICAgICAgICAgICAgICAgIGxvZ2dpbmcudHJhY2UoY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LkRFQlVHLCBUUkFDRVJfTkFNRSwgJygnICsgdGhpcy5jaGFubmVselJlZi5pZCArICcpICcgKyB0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtlZXBhbGl2ZVRyYWNlKHRleHQpIHtcbiAgICAgICAgICAgICAgICBsb2dnaW5nLnRyYWNlKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgJ2tlZXBhbGl2ZScsICcoJyArIHRoaXMuY2hhbm5lbHpSZWYuaWQgKyAnKSAnICsgdGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRQcm90b1NlcnZpY2UoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQuIFVzZSBhZGRTZXJ2aWNlKCkgaW5zdGVhZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkU2VydmljZShzZXJ2aWNlLCBpbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzZXJ2aWNlICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW1wbGVtZW50YXRpb24gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYWRkU2VydmljZSgpIHJlcXVpcmVzIHR3byBvYmplY3RzIGFzIGFyZ3VtZW50cycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlS2V5cyA9IE9iamVjdC5rZXlzKHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIGFuIGVtcHR5IHNlcnZpY2UgdG8gYSBzZXJ2ZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VydmljZUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBzZXJ2aWNlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWV0aG9kVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzLnJlcXVlc3RTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRycy5yZXNwb25zZVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZFR5cGUgPSAnYmlkaSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RUeXBlID0gJ2NsaWVudFN0cmVhbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnMucmVzcG9uc2VTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RUeXBlID0gJ3NlcnZlclN0cmVhbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RUeXBlID0gJ3VuYXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgaW1wbEZuID0gaW1wbGVtZW50YXRpb25bbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbXBsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1wbEZuID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIGF0dHJzLm9yaWdpbmFsTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGltcGxGbiA9IGltcGxlbWVudGF0aW9uW2F0dHJzLm9yaWdpbmFsTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGltcGxGbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBsID0gaW1wbEZuLmJpbmQoaW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1wbCA9IGdldERlZmF1bHRIYW5kbGVyKG1ldGhvZFR5cGUsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLnJlZ2lzdGVyKGF0dHJzLnBhdGgsIGltcGwsIGF0dHJzLnJlc3BvbnNlU2VyaWFsaXplLCBhdHRycy5yZXF1ZXN0RGVzZXJpYWxpemUsIG1ldGhvZFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWV0aG9kIGhhbmRsZXIgZm9yICR7YXR0cnMucGF0aH0gYWxyZWFkeSBwcm92aWRlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlU2VydmljZShzZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UgPT09IG51bGwgfHwgdHlwZW9mIHNlcnZpY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVtb3ZlU2VydmljZSgpIHJlcXVpcmVzIG9iamVjdCBhcyBhcmd1bWVudCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlS2V5cyA9IE9iamVjdC5rZXlzKHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIHNlcnZpY2VLZXlzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gc2VydmljZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnJlZ2lzdGVyKGF0dHJzLnBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmluZChwb3J0LCBjcmVkcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkLiBVc2UgYmluZEFzeW5jKCkgaW5zdGVhZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIEFQSSBpcyBleHBlcmltZW50YWwsIHNvIEFQSSBzdGFiaWxpdHkgaXMgbm90IGd1YXJhbnRlZWQgYWNyb3NzIG1pbm9yIHZlcnNpb25zLlxuICAgICAgICAgICAgICogQHBhcmFtIGJvdW5kQWRkcmVzc1xuICAgICAgICAgICAgICogQHJldHVybnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZXJpbWVudGFsUmVnaXN0ZXJMaXN0ZW5lclRvQ2hhbm5lbHooYm91bmRBZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjaGFubmVsel8xLnJlZ2lzdGVyQ2hhbm5lbHpTb2NrZXQpKCgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKShib3VuZEFkZHJlc3MpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbEFkZHJlc3M6IGJvdW5kQWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUFkZHJlc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZU5hbWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zU3RhcnRlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXNTdWNjZWVkZWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zRmFpbGVkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNTZW50OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNSZWNlaXZlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBBbGl2ZXNTZW50OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExvY2FsU3RyZWFtQ3JlYXRlZFRpbWVzdGFtcDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSZW1vdGVTdHJlYW1DcmVhdGVkVGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1lc3NhZ2VTZW50VGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1lc3NhZ2VSZWNlaXZlZFRpbWVzdGFtcDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsRmxvd0NvbnRyb2xXaW5kb3c6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVGbG93Q29udHJvbFdpbmRvdzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzLmNoYW5uZWx6RW5hYmxlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlcmltZW50YWxVbnJlZ2lzdGVyTGlzdGVuZXJGcm9tQ2hhbm5lbHooY2hhbm5lbHpSZWYpIHtcbiAgICAgICAgICAgICAgICAoMCwgY2hhbm5lbHpfMS51bnJlZ2lzdGVyQ2hhbm5lbHpSZWYpKGNoYW5uZWx6UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNyZWF0ZUh0dHAyU2VydmVyKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0dHAyU2VydmVyO1xuICAgICAgICAgICAgICAgIGlmIChjcmVkZW50aWFscy5faXNTZWN1cmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25zdHJ1Y3Rvck9wdGlvbnMgPSBjcmVkZW50aWFscy5fZ2V0Q29uc3RydWN0b3JPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHRPcHRpb25zID0gY3JlZGVudGlhbHMuX2dldFNlY3VyZUNvbnRleHRPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3VyZVNlcnZlck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbW1vblNlcnZlck9wdGlvbnMpLCBjb25zdHJ1Y3Rvck9wdGlvbnMpLCBjb250ZXh0T3B0aW9ucyksIHsgZW5hYmxlVHJhY2U6IHRoaXMub3B0aW9uc1snZ3JwYy1ub2RlLnRsc19lbmFibGVfdHJhY2UnXSA9PT0gMSB9KTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZUNyZWRlbnRpYWxzVmFsaWQgPSBjb250ZXh0T3B0aW9ucyAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnSW5pdGlhbCBjcmVkZW50aWFscyB2YWxpZDogJyArIGFyZUNyZWRlbnRpYWxzVmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICBodHRwMlNlcnZlciA9IGh0dHAyLmNyZWF0ZVNlY3VyZVNlcnZlcihzZWN1cmVTZXJ2ZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaHR0cDJTZXJ2ZXIucHJlcGVuZExpc3RlbmVyKCdjb25uZWN0aW9uJywgKHNvY2tldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmVDcmVkZW50aWFsc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnRHJvcHBlZCBjb25uZWN0aW9uIGZyb20gJyArIEpTT04uc3RyaW5naWZ5KHNvY2tldC5hZGRyZXNzKCkpICsgJyBkdWUgdG8gdW5sb2FkZWQgY3JlZGVudGlhbHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaHR0cDJTZXJ2ZXIub24oJ3NlY3VyZUNvbm5lY3Rpb24nLCAoc29ja2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBlcnJvcnMgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZSB1c2VyIG9mIEh0dHAyU2VjdXJlU2VydmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICogYWNjb3JkaW5nIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMzU4MjQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0FuIGluY29taW5nIFRMUyBjb25uZWN0aW9uIGNsb3NlZCB3aXRoIGVycm9yOiAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3JlZHNXYXRjaGVyID0gb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3VyZVNlcnZlciA9IGh0dHAyU2VydmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZVNlcnZlci5zZXRTZWN1cmVDb250ZXh0KG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmxvZyhjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuRVJST1IsICdGYWlsZWQgdG8gc2V0IHNlY3VyZSBjb250ZXh0IHdpdGggZXJyb3IgJyArIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZUNyZWRlbnRpYWxzVmFsaWQgPSBvcHRpb25zICE9PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnUG9zdC11cGRhdGUgY3JlZGVudGlhbHMgdmFsaWQ6ICcgKyBhcmVDcmVkZW50aWFsc1ZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHMuX2FkZFdhdGNoZXIoY3JlZHNXYXRjaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgaHR0cDJTZXJ2ZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHMuX3JlbW92ZVdhdGNoZXIoY3JlZHNXYXRjaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBodHRwMlNlcnZlciA9IGh0dHAyLmNyZWF0ZVNlcnZlcih0aGlzLmNvbW1vblNlcnZlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBodHRwMlNlcnZlci5zZXRUaW1lb3V0KDAsIG5vb3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwSGFuZGxlcnMoaHR0cDJTZXJ2ZXIsIGNyZWRlbnRpYWxzLl9nZXRJbnRlcmNlcHRvcnMoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAyU2VydmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmluZE9uZUFkZHJlc3MoYWRkcmVzcywgYm91bmRQb3J0T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnQXR0ZW1wdGluZyB0byBiaW5kICcgKyAoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuc3ViY2hhbm5lbEFkZHJlc3NUb1N0cmluZykoYWRkcmVzcykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHAyU2VydmVyID0gdGhpcy5jcmVhdGVIdHRwMlNlcnZlcihib3VuZFBvcnRPYmplY3QuY3JlZGVudGlhbHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdGYWlsZWQgdG8gYmluZCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuc3ViY2hhbm5lbEFkZHJlc3NUb1N0cmluZykoYWRkcmVzcykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgd2l0aCBlcnJvciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiAncG9ydCcgaW4gYWRkcmVzcyA/IGFkZHJlc3MucG9ydCA6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGh0dHAyU2VydmVyLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIGh0dHAyU2VydmVyLmxpc3RlbihhZGRyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZEFkZHJlc3MgPSBodHRwMlNlcnZlci5hZGRyZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYm91bmRTdWJjaGFubmVsQWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYm91bmRBZGRyZXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kU3ViY2hhbm5lbEFkZHJlc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGJvdW5kQWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRTdWJjaGFubmVsQWRkcmVzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDogYm91bmRBZGRyZXNzLmFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IGJvdW5kQWRkcmVzcy5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVselJlZiA9IHRoaXMuZXhwZXJpbWVudGFsUmVnaXN0ZXJMaXN0ZW5lclRvQ2hhbm5lbHooYm91bmRTdWJjaGFubmVsQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyQ2hpbGRyZW5UcmFja2VyLnJlZkNoaWxkKGNoYW5uZWx6UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaHR0cDJTZXJ2ZXJzLnNldChodHRwMlNlcnZlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWx6UmVmOiBjaGFubmVselJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uczogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bnNDaGFubmVselJlZjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZFBvcnRPYmplY3QubGlzdGVuaW5nU2VydmVycy5hZGQoaHR0cDJTZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnU3VjY2Vzc2Z1bGx5IGJvdW5kICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKShib3VuZFN1YmNoYW5uZWxBZGRyZXNzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiAncG9ydCcgaW4gYm91bmRTdWJjaGFubmVsQWRkcmVzcyA/IGJvdW5kU3ViY2hhbm5lbEFkZHJlc3MucG9ydCA6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAyU2VydmVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jIGJpbmRNYW55UG9ydHMoYWRkcmVzc0xpc3QsIGJvdW5kUG9ydE9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuaXNUY3BTdWJjaGFubmVsQWRkcmVzcykoYWRkcmVzc0xpc3RbMF0pICYmIGFkZHJlc3NMaXN0WzBdLnBvcnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLyogSWYgYmluZGluZyB0byBwb3J0IDAsIGZpcnN0IHRyeSB0byBiaW5kIHRoZSBmaXJzdCBhZGRyZXNzLCB0aGVuIGJpbmRcbiAgICAgICAgICAgICAgICAgICAgICogdGhlIHJlc3Qgb2YgdGhlIGFkZHJlc3MgbGlzdCB0byB0aGUgc3BlY2lmaWMgcG9ydCB0aGF0IGl0IGJpbmRzLiAqL1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEFkZHJlc3NSZXN1bHQgPSBhd2FpdCB0aGlzLmJpbmRPbmVBZGRyZXNzKGFkZHJlc3NMaXN0WzBdLCBib3VuZFBvcnRPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RBZGRyZXNzUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGUgZmlyc3QgYWRkcmVzcyBmYWlscyB0byBiaW5kLCB0cnkgdGhlIHNhbWUgb3BlcmF0aW9uIHN0YXJ0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIHRoZSBzZWNvbmQgaXRlbSBpbiB0aGUgbGlzdC4gKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RBZGRyZXNzUmVzdWx0ID0gYXdhaXQgdGhpcy5iaW5kTWFueVBvcnRzKGFkZHJlc3NMaXN0LnNsaWNlKDEpLCBib3VuZFBvcnRPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdEFkZHJlc3NSZXN1bHQpLCB7IGVycm9yczogW2ZpcnN0QWRkcmVzc1Jlc3VsdC5lcnJvciwgLi4ucmVzdEFkZHJlc3NSZXN1bHQuZXJyb3JzXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RBZGRyZXNzZXMgPSBhZGRyZXNzTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYWRkcmVzcyA9PiAoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzEuaXNUY3BTdWJjaGFubmVsQWRkcmVzcykoYWRkcmVzcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgaG9zdDogYWRkcmVzcy5ob3N0LCBwb3J0OiBmaXJzdEFkZHJlc3NSZXN1bHQucG9ydCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RBZGRyZXNzUmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocmVzdEFkZHJlc3Nlcy5tYXAoYWRkcmVzcyA9PiB0aGlzLmJpbmRPbmVBZGRyZXNzKGFkZHJlc3MsIGJvdW5kUG9ydE9iamVjdCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbFJlc3VsdHMgPSBbZmlyc3RBZGRyZXNzUmVzdWx0LCAuLi5yZXN0QWRkcmVzc1Jlc3VsdF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBhbGxSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LmVycm9yID09PSB1bmRlZmluZWQpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBmaXJzdEFkZHJlc3NSZXN1bHQucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IGFsbFJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LmVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKHJlc3VsdCA9PiByZXN1bHQuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGFkZHJlc3NMaXN0Lm1hcChhZGRyZXNzID0+IHRoaXMuYmluZE9uZUFkZHJlc3MoYWRkcmVzcywgYm91bmRQb3J0T2JqZWN0KSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IGFsbFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQuZXJyb3IgPT09IHVuZGVmaW5lZCkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogYWxsUmVzdWx0c1swXS5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBhbGxSZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LmVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAocmVzdWx0ID0+IHJlc3VsdC5lcnJvciksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN5bmMgYmluZEFkZHJlc3NMaXN0KGFkZHJlc3NMaXN0LCBib3VuZFBvcnRPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5kUmVzdWx0ID0gYXdhaXQgdGhpcy5iaW5kTWFueVBvcnRzKGFkZHJlc3NMaXN0LCBib3VuZFBvcnRPYmplY3QpO1xuICAgICAgICAgICAgICAgIGlmIChiaW5kUmVzdWx0LmNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmluZFJlc3VsdC5jb3VudCA8IGFkZHJlc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5sb2coY29uc3RhbnRzXzEuTG9nVmVyYm9zaXR5LklORk8sIGBXQVJOSU5HIE9ubHkgJHtiaW5kUmVzdWx0LmNvdW50fSBhZGRyZXNzZXMgYWRkZWQgb3V0IG9mIHRvdGFsICR7YWRkcmVzc0xpc3QubGVuZ3RofSByZXNvbHZlZGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kUmVzdWx0LnBvcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclN0cmluZyA9IGBObyBhZGRyZXNzIGFkZGVkIG91dCBvZiB0b3RhbCAke2FkZHJlc3NMaXN0Lmxlbmd0aH0gcmVzb2x2ZWRgO1xuICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmxvZyhjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuRVJST1IsIGVycm9yU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yU3RyaW5nfSBlcnJvcnM6IFske2JpbmRSZXN1bHQuZXJyb3JzLmpvaW4oJywnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZVBvcnQocG9ydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWVuUmVzb2x1dGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlckxpc3RlbmVyID0gKGVuZHBvaW50TGlzdCwgYXR0cmlidXRlcywgc2VydmljZUNvbmZpZywgcmVzb2x1dGlvbk5vdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuUmVzb2x1dGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VlblJlc29sdXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRwb2ludExpc3Qub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVuZHBvaW50TGlzdC5lcnJvci5kZXRhaWxzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzTGlzdCA9IFtdLmNvbmNhdCguLi5lbmRwb2ludExpc3QudmFsdWUubWFwKGVuZHBvaW50ID0+IGVuZHBvaW50LmFkZHJlc3NlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE5vIGFkZHJlc3NlcyByZXNvbHZlZCBmb3IgcG9ydCAke3BvcnR9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhZGRyZXNzTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSAoMCwgcmVzb2x2ZXJfMS5jcmVhdGVSZXNvbHZlcikocG9ydCwgcmVzb2x2ZXJMaXN0ZW5lciwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIudXBkYXRlUmVzb2x1dGlvbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXN5bmMgYmluZFBvcnQocG9ydCwgYm91bmRQb3J0T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzc0xpc3QgPSBhd2FpdCB0aGlzLnJlc29sdmVQb3J0KHBvcnQpO1xuICAgICAgICAgICAgICAgIGlmIChib3VuZFBvcnRPYmplY3QuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVVbmJpbmQoYm91bmRQb3J0T2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiaW5kQXN5bmMgb3BlcmF0aW9uIGNhbmNlbGxlZCBieSB1bmJpbmQgY2FsbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0TnVtYmVyID0gYXdhaXQgdGhpcy5iaW5kQWRkcmVzc0xpc3QoYWRkcmVzc0xpc3QsIGJvdW5kUG9ydE9iamVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKGJvdW5kUG9ydE9iamVjdC5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVVuYmluZChib3VuZFBvcnRPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBc3luYyBvcGVyYXRpb24gY2FuY2VsbGVkIGJ5IHVuYmluZCBjYWxsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwb3J0TnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9ybWFsaXplUG9ydChwb3J0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbFBvcnRVcmkgPSAoMCwgdXJpX3BhcnNlcl8xLnBhcnNlVXJpKShwb3J0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbFBvcnRVcmkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgcG9ydCBcIiR7cG9ydH1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0VXJpID0gKDAsIHJlc29sdmVyXzEubWFwVXJpRGVmYXVsdFNjaGVtZSkoaW5pdGlhbFBvcnRVcmkpO1xuICAgICAgICAgICAgICAgIGlmIChwb3J0VXJpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGdldCBhIGRlZmF1bHQgc2NoZW1lIGZvciBwb3J0IFwiJHtwb3J0fVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwb3J0VXJpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmluZEFzeW5jKHBvcnQsIGNyZWRzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNodXRkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmluZEFzeW5jIGNhbGxlZCBhZnRlciBzaHV0ZG93bicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvcnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BvcnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3JlZHMgPT09IG51bGwgfHwgIShjcmVkcyBpbnN0YW5jZW9mIHNlcnZlcl9jcmVkZW50aWFsc18xLlNlcnZlckNyZWRlbnRpYWxzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjcmVkcyBtdXN0IGJlIGEgU2VydmVyQ3JlZGVudGlhbHMgb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ2JpbmRBc3luYyBwb3J0PScgKyBwb3J0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0VXJpID0gdGhpcy5ub3JtYWxpemVQb3J0KHBvcnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmVycmVkQ2FsbGJhY2sgPSAoZXJyb3IsIHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiBjYWxsYmFjayhlcnJvciwgcG9ydCkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLyogRmlyc3QsIGlmIHRoaXMgcG9ydCBpcyBhbHJlYWR5IGJvdW5kIG9yIHRoYXQgYmluZCBvcGVyYXRpb24gaXMgaW5cbiAgICAgICAgICAgICAgICAgKiBwcm9ncmVzcywgdXNlIHRoYXQgcmVzdWx0LiAqL1xuICAgICAgICAgICAgICAgIGxldCBib3VuZFBvcnRPYmplY3QgPSB0aGlzLmJvdW5kUG9ydHMuZ2V0KCgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHBvcnRVcmkpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRQb3J0T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3JlZHMuX2VxdWFscyhib3VuZFBvcnRPYmplY3QuY3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZENhbGxiYWNrKG5ldyBFcnJvcihgJHtwb3J0fSBhbHJlYWR5IGJvdW5kIHdpdGggaW5jb21wYXRpYmxlIGNyZWRlbnRpYWxzYCksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qIElmIHRoYXQgb3BlcmF0aW9uIGhhcyBwcmV2aW91c2x5IGJlZW4gY2FuY2VsbGVkIGJ5IGFuIHVuYmluZCBjYWxsLFxuICAgICAgICAgICAgICAgICAgICAgKiB1bmNhbmNlbCBpdC4gKi9cbiAgICAgICAgICAgICAgICAgICAgYm91bmRQb3J0T2JqZWN0LmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRQb3J0T2JqZWN0LmNvbXBsZXRpb25Qcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZFBvcnRPYmplY3QuY29tcGxldGlvblByb21pc2UudGhlbihwb3J0TnVtID0+IGNhbGxiYWNrKG51bGwsIHBvcnROdW0pLCBlcnJvciA9PiBjYWxsYmFjayhlcnJvciwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRDYWxsYmFjayhudWxsLCBib3VuZFBvcnRPYmplY3QucG9ydE51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBib3VuZFBvcnRPYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcEtleTogKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykocG9ydFVyaSksXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXJpOiBwb3J0VXJpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uUHJvbWlzZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcG9ydE51bWJlcjogMCxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGNyZWRzLFxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmdTZXJ2ZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBvcnQgPSAoMCwgdXJpX3BhcnNlcl8xLnNwbGl0SG9zdFBvcnQpKHBvcnRVcmkucGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGlvblByb21pc2UgPSB0aGlzLmJpbmRQb3J0KHBvcnRVcmksIGJvdW5kUG9ydE9iamVjdCk7XG4gICAgICAgICAgICAgICAgYm91bmRQb3J0T2JqZWN0LmNvbXBsZXRpb25Qcm9taXNlID0gY29tcGxldGlvblByb21pc2U7XG4gICAgICAgICAgICAgICAgLyogSWYgdGhlIHBvcnQgbnVtYmVyIGlzIDAsIGRlZmVyIHBvcHVsYXRpbmcgdGhlIG1hcCBlbnRyeSB1bnRpbCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgKiBiaW5kIG9wZXJhdGlvbiBjb21wbGV0ZXMgYW5kIHdlIGhhdmUgYSBzcGVjaWZpYyBwb3J0IG51bWJlci4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgICAgICAqIHBvcHVsYXRlIGl0IGltbWVkaWF0ZWx5LiAqL1xuICAgICAgICAgICAgICAgIGlmICgoc3BsaXRQb3J0ID09PSBudWxsIHx8IHNwbGl0UG9ydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3BsaXRQb3J0LnBvcnQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25Qcm9taXNlLnRoZW4ocG9ydE51bSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFVyaSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWU6IHBvcnRVcmkuc2NoZW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eTogcG9ydFVyaS5hdXRob3JpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogKDAsIHVyaV9wYXJzZXJfMS5jb21iaW5lSG9zdFBvcnQpKHsgaG9zdDogc3BsaXRQb3J0Lmhvc3QsIHBvcnQ6IHBvcnROdW0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRQb3J0T2JqZWN0Lm1hcEtleSA9ICgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKGZpbmFsVXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUG9ydE9iamVjdC5jb21wbGV0aW9uUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZFBvcnRPYmplY3QucG9ydE51bWJlciA9IHBvcnROdW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kUG9ydHMuc2V0KGJvdW5kUG9ydE9iamVjdC5tYXBLZXksIGJvdW5kUG9ydE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwb3J0TnVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm91bmRQb3J0cy5zZXQoYm91bmRQb3J0T2JqZWN0Lm1hcEtleSwgYm91bmRQb3J0T2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvblByb21pc2UudGhlbihwb3J0TnVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUG9ydE9iamVjdC5jb21wbGV0aW9uUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZFBvcnRPYmplY3QucG9ydE51bWJlciA9IHBvcnROdW07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwb3J0TnVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWdpc3RlckluamVjdG9yVG9DaGFubmVseigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNoYW5uZWx6XzEucmVnaXN0ZXJDaGFubmVselNvY2tldCkoJ2luamVjdG9yJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxBZGRyZXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlQWRkcmVzczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXNTdGFydGVkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtc1N1Y2NlZWRlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXNGYWlsZWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1NlbnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1JlY2VpdmVkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAga2VlcEFsaXZlc1NlbnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TG9jYWxTdHJlYW1DcmVhdGVkVGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJlbW90ZVN0cmVhbUNyZWF0ZWRUaW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TWVzc2FnZVNlbnRUaW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TWVzc2FnZVJlY2VpdmVkVGltZXN0YW1wOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxGbG93Q29udHJvbFdpbmRvdzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUZsb3dDb250cm9sV2luZG93OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIHRoaXMuY2hhbm5lbHpFbmFibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBBUEkgaXMgZXhwZXJpbWVudGFsLCBzbyBBUEkgc3RhYmlsaXR5IGlzIG5vdCBndWFyYW50ZWVkIGFjcm9zcyBtaW5vciB2ZXJzaW9ucy5cbiAgICAgICAgICAgICAqIEBwYXJhbSBjcmVkZW50aWFsc1xuICAgICAgICAgICAgICogQHBhcmFtIGNoYW5uZWx6UmVmXG4gICAgICAgICAgICAgKiBAcmV0dXJuc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlcmltZW50YWxDcmVhdGVDb25uZWN0aW9uSW5qZWN0b3JXaXRoQ2hhbm5lbHpSZWYoY3JlZGVudGlhbHMsIGNoYW5uZWx6UmVmLCBvd25zQ2hhbm5lbHpSZWYgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGlmIChjcmVkZW50aWFscyA9PT0gbnVsbCB8fCAhKGNyZWRlbnRpYWxzIGluc3RhbmNlb2Ygc2VydmVyX2NyZWRlbnRpYWxzXzEuU2VydmVyQ3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NyZWRzIG11c3QgYmUgYSBTZXJ2ZXJDcmVkZW50aWFscyBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHpFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJDaGlsZHJlblRyYWNrZXIucmVmQ2hpbGQoY2hhbm5lbHpSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmNyZWF0ZUh0dHAyU2VydmVyKGNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uc1NldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHAyU2VydmVycy5zZXQoc2VydmVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWx6UmVmOiBjaGFubmVselJlZixcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbnM6IHNlc3Npb25zU2V0LFxuICAgICAgICAgICAgICAgICAgICBvd25zQ2hhbm5lbHpSZWZcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RDb25uZWN0aW9uOiAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmVtaXQoJ2Nvbm5lY3Rpb24nLCBjb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZHJhaW46IChncmFjZVRpbWVNcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9iLCBfYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2Vzc2lvbiBvZiBzZXNzaW9uc1NldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKF9jID0gKF9iID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHNlc3Npb25zU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveShodHRwMi5jb25zdGFudHMuTkdIVFRQMl9DQU5DRUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGdyYWNlVGltZU1zKSkudW5yZWYpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNlcnZlcihzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHNlc3Npb25zU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlQ29ubmVjdGlvbkluamVjdG9yKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWxzID09PSBudWxsIHx8ICEoY3JlZGVudGlhbHMgaW5zdGFuY2VvZiBzZXJ2ZXJfY3JlZGVudGlhbHNfMS5TZXJ2ZXJDcmVkZW50aWFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY3JlZHMgbXVzdCBiZSBhIFNlcnZlckNyZWRlbnRpYWxzIG9iamVjdCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVselJlZiA9IHRoaXMucmVnaXN0ZXJJbmplY3RvclRvQ2hhbm5lbHooKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBlcmltZW50YWxDcmVhdGVDb25uZWN0aW9uSW5qZWN0b3JXaXRoQ2hhbm5lbHpSZWYoY3JlZGVudGlhbHMsIGNoYW5uZWx6UmVmLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsb3NlU2VydmVyKHNlcnZlciwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdDbG9zaW5nIHNlcnZlciB3aXRoIGFkZHJlc3MgJyArIEpTT04uc3RyaW5naWZ5KHNlcnZlci5hZGRyZXNzKCkpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2ZXJJbmZvID0gdGhpcy5odHRwMlNlcnZlcnMuZ2V0KHNlcnZlcik7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNsb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlckluZm8gJiYgc2VydmVySW5mby5vd25zQ2hhbm5lbHpSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJDaGlsZHJlblRyYWNrZXIudW5yZWZDaGlsZChzZXJ2ZXJJbmZvLmNoYW5uZWx6UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjaGFubmVsel8xLnVucmVnaXN0ZXJDaGFubmVselJlZikoc2VydmVySW5mby5jaGFubmVselJlZik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odHRwMlNlcnZlcnMuZGVsZXRlKHNlcnZlcik7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xvc2VTZXNzaW9uKHNlc3Npb24sIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0Nsb3Npbmcgc2Vzc2lvbiBpbml0aWF0ZWQgYnkgJyArICgoX2IgPSBzZXNzaW9uLnNvY2tldCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlbW90ZUFkZHJlc3MpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ2hpbGRyZW5UcmFja2VyLnVucmVmQ2hpbGQoc2Vzc2lvbkluZm8ucmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBjaGFubmVsel8xLnVucmVnaXN0ZXJDaGFubmVselJlZikoc2Vzc2lvbkluZm8ucmVmKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzayhjbG9zZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoY2xvc2VDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVVbmJpbmQoYm91bmRQb3J0T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2ZXIgb2YgYm91bmRQb3J0T2JqZWN0Lmxpc3RlbmluZ1NlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmVySW5mbyA9IHRoaXMuaHR0cDJTZXJ2ZXJzLmdldChzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2VydmVyKHNlcnZlciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRQb3J0T2JqZWN0Lmxpc3RlbmluZ1NlcnZlcnMuZGVsZXRlKHNlcnZlcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmVySW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHNlcnZlckluZm8uc2Vzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kUG9ydHMuZGVsZXRlKGJvdW5kUG9ydE9iamVjdC5tYXBLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVbmJpbmQgYSBwcmV2aW91c2x5IGJvdW5kIHBvcnQsIG9yIGNhbmNlbCBhbiBpbi1wcm9ncmVzcyBiaW5kQXN5bmNcbiAgICAgICAgICAgICAqIG9wZXJhdGlvbi4gSWYgcG9ydCAwIHdhcyBib3VuZCwgb25seSB0aGUgYWN0dWFsIGJvdW5kIHBvcnQgY2FuIGJlXG4gICAgICAgICAgICAgKiB1bmJvdW5kLiBGb3IgZXhhbXBsZSwgaWYgYmluZEFzeW5jIHdhcyBjYWxsZWQgd2l0aCBcImxvY2FsaG9zdDowXCIgYW5kIHRoZVxuICAgICAgICAgICAgICogYm91bmQgcG9ydCByZXN1bHQgd2FzIDU0MzIxLCBpdCBjYW4gYmUgdW5ib3VuZCBhcyBcImxvY2FsaG9zdDo1NDMyMVwiLlxuICAgICAgICAgICAgICogQHBhcmFtIHBvcnRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdW5iaW5kKHBvcnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCd1bmJpbmQgcG9ydD0nICsgcG9ydCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydFVyaSA9IHRoaXMubm9ybWFsaXplUG9ydChwb3J0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBvcnQgPSAoMCwgdXJpX3BhcnNlcl8xLnNwbGl0SG9zdFBvcnQpKHBvcnRVcmkucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKChzcGxpdFBvcnQgPT09IG51bGwgfHwgc3BsaXRQb3J0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzcGxpdFBvcnQucG9ydCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdW5iaW5kIHBvcnQgMCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZFBvcnRPYmplY3QgPSB0aGlzLmJvdW5kUG9ydHMuZ2V0KCgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHBvcnRVcmkpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRQb3J0T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ3VuYmluZGluZyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kUG9ydE9iamVjdC5tYXBLZXkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyBvcmlnaW5hbGx5IGJvdW5kIGFzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIHVyaV9wYXJzZXJfMS51cmlUb1N0cmluZykoYm91bmRQb3J0T2JqZWN0Lm9yaWdpbmFsVXJpKSk7XG4gICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBiaW5kIG9wZXJhdGlvbiBpcyBwZW5kaW5nLCB0aGUgY2FuY2VsbGVkIGZsYWcgd2lsbCB0cmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgICAqIHRoZSB1bmJpbmQgb3BlcmF0aW9uIGxhdGVyLiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRQb3J0T2JqZWN0LmNvbXBsZXRpb25Qcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZFBvcnRPYmplY3QuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVVbmJpbmQoYm91bmRQb3J0T2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR3JhY2VmdWxseSBjbG9zZSBhbGwgY29ubmVjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgcHJldmlvdXNseSBib3VuZCBwb3J0LlxuICAgICAgICAgICAgICogQWZ0ZXIgdGhlIGdyYWNlIHRpbWUsIGZvcmNlZnVsbHkgY2xvc2UgYWxsIHJlbWFpbmluZyBvcGVuIGNvbm5lY3Rpb25zLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIElmIHBvcnQgMCB3YXMgYm91bmQsIG9ubHkgdGhlIGFjdHVhbCBib3VuZCBwb3J0IGNhbiBiZVxuICAgICAgICAgICAgICogZHJhaW5lZC4gRm9yIGV4YW1wbGUsIGlmIGJpbmRBc3luYyB3YXMgY2FsbGVkIHdpdGggXCJsb2NhbGhvc3Q6MFwiIGFuZCB0aGVcbiAgICAgICAgICAgICAqIGJvdW5kIHBvcnQgcmVzdWx0IHdhcyA1NDMyMSwgaXQgY2FuIGJlIGRyYWluZWQgYXMgXCJsb2NhbGhvc3Q6NTQzMjFcIi5cbiAgICAgICAgICAgICAqIEBwYXJhbSBwb3J0XG4gICAgICAgICAgICAgKiBAcGFyYW0gZ3JhY2VUaW1lTXNcbiAgICAgICAgICAgICAqIEByZXR1cm5zXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRyYWluKHBvcnQsIGdyYWNlVGltZU1zKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iLCBfYztcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdkcmFpbiBwb3J0PScgKyBwb3J0ICsgJyBncmFjZVRpbWVNcz0nICsgZ3JhY2VUaW1lTXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnRVcmkgPSB0aGlzLm5vcm1hbGl6ZVBvcnQocG9ydCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRQb3J0ID0gKDAsIHVyaV9wYXJzZXJfMS5zcGxpdEhvc3RQb3J0KShwb3J0VXJpLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICgoc3BsaXRQb3J0ID09PSBudWxsIHx8IHNwbGl0UG9ydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3BsaXRQb3J0LnBvcnQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRyYWluIHBvcnQgMCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZFBvcnRPYmplY3QgPSB0aGlzLmJvdW5kUG9ydHMuZ2V0KCgwLCB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmcpKHBvcnRVcmkpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJvdW5kUG9ydE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbFNlc3Npb25zID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaHR0cDJTZXJ2ZXIgb2YgYm91bmRQb3J0T2JqZWN0Lmxpc3RlbmluZ1NlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyRW50cnkgPSB0aGlzLmh0dHAyU2VydmVycy5nZXQoaHR0cDJTZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmVyRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2Vzc2lvbiBvZiBzZXJ2ZXJFbnRyeS5zZXNzaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFNlc3Npb25zLmFkZChzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2Vzc2lvbihzZXNzaW9uLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFNlc3Npb25zLmRlbGV0ZShzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBBZnRlciB0aGUgZ3JhY2UgdGltZSBlbmRzLCBzZW5kIGFub3RoZXIgZ29hd2F5IHRvIGFsbCByZW1haW5pbmcgc2Vzc2lvbnNcbiAgICAgICAgICAgICAgICAgKiB3aXRoIHRoZSBDQU5DRUwgY29kZS4gKi9cbiAgICAgICAgICAgICAgICAoX2MgPSAoX2IgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIGFsbFNlc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koaHR0cDIuY29uc3RhbnRzLk5HSFRUUDJfQ0FOQ0VMKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGdyYWNlVGltZU1zKSkudW5yZWYpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKF9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcmNlU2h1dGRvd24oKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBib3VuZFBvcnRPYmplY3Qgb2YgdGhpcy5ib3VuZFBvcnRzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdW5kUG9ydE9iamVjdC5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kUG9ydHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgc2VydmVyIGlmIGl0IGlzIHN0aWxsIHJ1bm5pbmcuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2ZXIgb2YgdGhpcy5odHRwMlNlcnZlcnMua2V5cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VTZXJ2ZXIoc2VydmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQWx3YXlzIGRlc3Ryb3kgYW55IGF2YWlsYWJsZSBzZXNzaW9ucy4gSXQncyBwb3NzaWJsZSB0aGF0IG9uZSBvciBtb3JlXG4gICAgICAgICAgICAgICAgLy8gdHJ5U2h1dGRvd24oKSBjYWxscyBhcmUgaW4gcHJvZ3Jlc3MuIERvbid0IHdhaXQgb24gdGhlbSB0byBmaW5pc2guXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9ucy5mb3JFYWNoKChjaGFubmVsekluZm8sIHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc3QgTkdIVFRQMl9DQU5DRUwgdG8gYW55IGJlY2F1c2UgVHlwZVNjcmlwdCBkb2Vzbid0IHNlZW0gdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVjb2duaXplIGRlc3Ryb3koY29kZSkgYXMgYSB2YWxpZCBzaWduYXR1cmUuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveShodHRwMi5jb25zdGFudHMuTkdIVFRQMl9DQU5DRUwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbnMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAoMCwgY2hhbm5lbHpfMS51bnJlZ2lzdGVyQ2hhbm5lbHpSZWYpKHRoaXMuY2hhbm5lbHpSZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2h1dGRvd24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVnaXN0ZXIobmFtZSwgaGFuZGxlciwgc2VyaWFsaXplLCBkZXNlcmlhbGl6ZSwgdHlwZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhbmRsZXJzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMuc2V0KG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuYzogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogbmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVucmVnaXN0ZXIobmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgTm8gbG9uZ2VyIG5lZWRlZCBhcyBvZiB2ZXJzaW9uIDEuMTAueFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzdGFydCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5odHRwMlNlcnZlcnMuc2l6ZSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICBbLi4udGhpcy5odHRwMlNlcnZlcnMua2V5cygpXS5ldmVyeShzZXJ2ZXIgPT4gIXNlcnZlci5saXN0ZW5pbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2VydmVyIG11c3QgYmUgYm91bmQgaW4gb3JkZXIgdG8gc3RhcnQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlcnZlciBpcyBhbHJlYWR5IHN0YXJ0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeVNodXRkb3duKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY2hhbm5lbHpfMS51bnJlZ2lzdGVyQ2hhbm5lbHpSZWYpKHRoaXMuY2hhbm5lbHpSZWYpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsZXQgcGVuZGluZ0NoZWNrcyA9IDA7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsYmFjaygpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0NoZWNrcy0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZ0NoZWNrcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zaHV0ZG93biA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbc2VydmVyS2V5LCBzZXJ2ZXJdIG9mIHRoaXMuaHR0cDJTZXJ2ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQ2hlY2tzKys7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZlclN0cmluZyA9IHNlcnZlci5jaGFubmVselJlZi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKCdXYWl0aW5nIGZvciBzZXJ2ZXIgJyArIHNlcnZlclN0cmluZyArICcgdG8gY2xvc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNlcnZlcihzZXJ2ZXJLZXksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1NlcnZlciAnICsgc2VydmVyU3RyaW5nICsgJyBmaW5pc2hlZCBjbG9zaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXliZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlc3Npb24gb2Ygc2VydmVyLnNlc3Npb25zLmtleXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0NoZWNrcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvblN0cmluZyA9IChfYiA9IHNlc3Npb24uc29ja2V0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3RlQWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ1dhaXRpbmcgZm9yIHNlc3Npb24gJyArIHNlc3Npb25TdHJpbmcgKyAnIHRvIGNsb3NlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2Vzc2lvbihzZXNzaW9uLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnU2Vzc2lvbiAnICsgc2Vzc2lvblN0cmluZyArICcgZmluaXNoZWQgY2xvc2luZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nQ2hlY2tzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEh0dHAyUG9ydCgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0IHRoZSBjaGFubmVseiByZWZlcmVuY2Ugb2JqZWN0IGZvciB0aGlzIHNlcnZlci4gVGhlIHJldHVybmVkIHZhbHVlIGlzXG4gICAgICAgICAgICAgKiBnYXJiYWdlIGlmIGNoYW5uZWx6IGlzIGRpc2FibGVkIGZvciB0aGlzIHNlcnZlci5cbiAgICAgICAgICAgICAqIEByZXR1cm5zXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldENoYW5uZWx6UmVmKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWx6UmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3ZlcmlmeUNvbnRlbnRUeXBlKHN0cmVhbSwgaGVhZGVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc1todHRwMi5jb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50VHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICAgICAgIWNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2dycGMnKSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVzcG9uZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBbaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9TVEFUVVNdOiBodHRwMi5jb25zdGFudHMuSFRUUF9TVEFUVVNfVU5TVVBQT1JURURfTUVESUFfVFlQRSxcbiAgICAgICAgICAgICAgICAgICAgfSwgeyBlbmRTdHJlYW06IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfcmV0cmlldmVIYW5kbGVyKHBhdGgpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJDYWxsVHJhY2UoJ1JlY2VpdmVkIGNhbGwgdG8gbWV0aG9kICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJyBhdCBhZGRyZXNzICcgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlckFkZHJlc3NTdHJpbmcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXJzLmdldChwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckNhbGxUcmFjZSgnTm8gaGFuZGxlciByZWdpc3RlcmVkIGZvciBtZXRob2QgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcuIFNlbmRpbmcgVU5JTVBMRU1FTlRFRCBzdGF0dXMuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9yZXNwb25kV2l0aEVycm9yKGVyciwgc3RyZWFtLCBjaGFubmVselNlc3Npb25JbmZvID0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBfYiwgX2M7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhaWxlcnNUb1NlbmQgPSBPYmplY3QuYXNzaWduKHsgJ2dycGMtc3RhdHVzJzogKF9iID0gZXJyLmNvZGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbnN0YW50c18xLlN0YXR1cy5JTlRFUk5BTCwgJ2dycGMtbWVzc2FnZSc6IGVyci5kZXRhaWxzLCBbaHR0cDIuY29uc3RhbnRzLkhUVFAyX0hFQURFUl9TVEFUVVNdOiBodHRwMi5jb25zdGFudHMuSFRUUF9TVEFUVVNfT0ssIFtodHRwMi5jb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV06ICdhcHBsaWNhdGlvbi9ncnBjK3Byb3RvJyB9LCAoX2MgPSBlcnIubWV0YWRhdGEpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b0h0dHAySGVhZGVycygpKTtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVzcG9uZCh0cmFpbGVyc1RvU2VuZCwgeyBlbmRTdHJlYW06IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsVHJhY2tlci5hZGRDYWxsRmFpbGVkKCk7XG4gICAgICAgICAgICAgICAgY2hhbm5lbHpTZXNzaW9uSW5mbyA9PT0gbnVsbCB8fCBjaGFubmVselNlc3Npb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFubmVselNlc3Npb25JbmZvLnN0cmVhbVRyYWNrZXIuYWRkQ2FsbEZhaWxlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NoYW5uZWx6SGFuZGxlcihleHRyYUludGVyY2VwdG9ycywgc3RyZWFtLCBoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIGhhbmRsaW5nIGlkbGUgdGltZW91dFxuICAgICAgICAgICAgICAgIHRoaXMub25TdHJlYW1PcGVuZWQoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVselNlc3Npb25JbmZvID0gdGhpcy5zZXNzaW9ucy5nZXQoc3RyZWFtLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbFRyYWNrZXIuYWRkQ2FsbFN0YXJ0ZWQoKTtcbiAgICAgICAgICAgICAgICBjaGFubmVselNlc3Npb25JbmZvID09PSBudWxsIHx8IGNoYW5uZWx6U2Vzc2lvbkluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNoYW5uZWx6U2Vzc2lvbkluZm8uc3RyZWFtVHJhY2tlci5hZGRDYWxsU3RhcnRlZCgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmVyaWZ5Q29udGVudFR5cGUoc3RyZWFtLCBoZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxUcmFja2VyLmFkZENhbGxGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHpTZXNzaW9uSW5mbyA9PT0gbnVsbCB8fCBjaGFubmVselNlc3Npb25JbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFubmVselNlc3Npb25JbmZvLnN0cmVhbVRyYWNrZXIuYWRkQ2FsbEZhaWxlZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBoZWFkZXJzW0hUVFAyX0hFQURFUl9QQVRIXTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5fcmV0cmlldmVIYW5kbGVyKHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNwb25kV2l0aEVycm9yKGdldFVuaW1wbGVtZW50ZWRTdGF0dXNSZXNwb25zZShwYXRoKSwgc3RyZWFtLCBjaGFubmVselNlc3Npb25JbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsRXZlbnRUcmFja2VyID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRNZXNzYWdlU2VudDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5uZWx6U2Vzc2lvbkluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVselNlc3Npb25JbmZvLm1lc3NhZ2VzU2VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWx6U2Vzc2lvbkluZm8ubGFzdE1lc3NhZ2VTZW50VGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWRkTWVzc2FnZVJlY2VpdmVkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbHpTZXNzaW9uSW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWx6U2Vzc2lvbkluZm8ubWVzc2FnZXNSZWNlaXZlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWx6U2Vzc2lvbkluZm8ubGFzdE1lc3NhZ2VSZWNlaXZlZFRpbWVzdGFtcCA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uQ2FsbEVuZDogc3RhdHVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PT0gY29uc3RhbnRzXzEuU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsVHJhY2tlci5hZGRDYWxsU3VjY2VlZGVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxUcmFja2VyLmFkZENhbGxGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25TdHJlYW1FbmQ6IHN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5uZWx6U2Vzc2lvbkluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVselNlc3Npb25JbmZvLnN0cmVhbVRyYWNrZXIuYWRkQ2FsbFN1Y2NlZWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHpTZXNzaW9uSW5mby5zdHJlYW1UcmFja2VyLmFkZENhbGxGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsID0gKDAsIHNlcnZlcl9pbnRlcmNlcHRvcnNfMS5nZXRTZXJ2ZXJJbnRlcmNlcHRpbmdDYWxsKShbLi4uZXh0cmFJbnRlcmNlcHRvcnMsIC4uLnRoaXMuaW50ZXJjZXB0b3JzXSwgc3RyZWFtLCBoZWFkZXJzLCBjYWxsRXZlbnRUcmFja2VyLCBoYW5kbGVyLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcnVuSGFuZGxlckZvckNhbGwoY2FsbCwgaGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsVHJhY2tlci5hZGRDYWxsRmFpbGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWx6U2Vzc2lvbkluZm8gPT09IG51bGwgfHwgY2hhbm5lbHpTZXNzaW9uSW5mbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hhbm5lbHpTZXNzaW9uSW5mby5zdHJlYW1UcmFja2VyLmFkZENhbGxGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbC5zZW5kU3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5JTlRFUk5BTCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBVbmtub3duIGhhbmRsZXIgdHlwZTogJHtoYW5kbGVyLnR5cGV9YCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3N0cmVhbUhhbmRsZXIoZXh0cmFJbnRlcmNlcHRvcnMsIHN0cmVhbSwgaGVhZGVycykge1xuICAgICAgICAgICAgICAgIC8vIGZvciBoYW5kbGluZyBpZGxlIHRpbWVvdXRcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3RyZWFtT3BlbmVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZlcmlmeUNvbnRlbnRUeXBlKHN0cmVhbSwgaGVhZGVycykgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gaGVhZGVyc1tIVFRQMl9IRUFERVJfUEFUSF07XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX3JldHJpZXZlSGFuZGxlcihwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uZFdpdGhFcnJvcihnZXRVbmltcGxlbWVudGVkU3RhdHVzUmVzcG9uc2UocGF0aCksIHN0cmVhbSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbCA9ICgwLCBzZXJ2ZXJfaW50ZXJjZXB0b3JzXzEuZ2V0U2VydmVySW50ZXJjZXB0aW5nQ2FsbCkoWy4uLmV4dHJhSW50ZXJjZXB0b3JzLCAuLi50aGlzLmludGVyY2VwdG9yc10sIHN0cmVhbSwgaGVhZGVycywgbnVsbCwgaGFuZGxlciwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3J1bkhhbmRsZXJGb3JDYWxsKGNhbGwsIGhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGwuc2VuZFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgVW5rbm93biBoYW5kbGVyIHR5cGU6ICR7aGFuZGxlci50eXBlfWAsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9ydW5IYW5kbGVyRm9yQ2FsbChjYWxsLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAndW5hcnknKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVVuYXJ5KGNhbGwsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnY2xpZW50U3RyZWFtJykge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbGllbnRTdHJlYW1pbmcoY2FsbCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzZXJ2ZXJTdHJlYW0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlcnZlclN0cmVhbWluZyhjYWxsLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2JpZGknKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUJpZGlTdHJlYW1pbmcoY2FsbCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3NldHVwSGFuZGxlcnMoaHR0cDJTZXJ2ZXIsIGV4dHJhSW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGh0dHAyU2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyQWRkcmVzcyA9IGh0dHAyU2VydmVyLmFkZHJlc3MoKTtcbiAgICAgICAgICAgICAgICBsZXQgc2VydmVyQWRkcmVzc1N0cmluZyA9ICdudWxsJztcbiAgICAgICAgICAgICAgICBpZiAoc2VydmVyQWRkcmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNlcnZlckFkZHJlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJBZGRyZXNzU3RyaW5nID0gc2VydmVyQWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckFkZHJlc3NTdHJpbmcgPSBzZXJ2ZXJBZGRyZXNzLmFkZHJlc3MgKyAnOicgKyBzZXJ2ZXJBZGRyZXNzLnBvcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJBZGRyZXNzU3RyaW5nID0gc2VydmVyQWRkcmVzc1N0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5jaGFubmVsekVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jaGFubmVsekhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9zdHJlYW1IYW5kbGVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25IYW5kbGVyID0gdGhpcy5jaGFubmVsekVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jaGFubmVselNlc3Npb25IYW5kbGVyKGh0dHAyU2VydmVyKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3Nlc3Npb25IYW5kbGVyKGh0dHAyU2VydmVyKTtcbiAgICAgICAgICAgICAgICBodHRwMlNlcnZlci5vbignc3RyZWFtJywgaGFuZGxlci5iaW5kKHRoaXMsIGV4dHJhSW50ZXJjZXB0b3JzKSk7XG4gICAgICAgICAgICAgICAgaHR0cDJTZXJ2ZXIub24oJ3Nlc3Npb24nLCBzZXNzaW9uSGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfc2Vzc2lvbkhhbmRsZXIoaHR0cDJTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9iLCBfYztcbiAgICAgICAgICAgICAgICAgICAgKF9iID0gdGhpcy5odHRwMlNlcnZlcnMuZ2V0KGh0dHAyU2VydmVyKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNlc3Npb25zLmFkZChzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5lY3Rpb25BZ2VUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25uZWN0aW9uQWdlR3JhY2VUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZWVwYWxpdmVUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXNzaW9uQ2xvc2VkQnlTZXJ2ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRsZVRpbWVvdXRPYmogPSB0aGlzLmVuYWJsZUlkbGVUaW1lb3V0KHNlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhDb25uZWN0aW9uQWdlTXMgIT09IFVOTElNSVRFRF9DT05ORUNUSU9OX0FHRV9NUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgYSByYW5kb20gaml0dGVyIHdpdGhpbiBhICsvLTEwJSByYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyTWFnbml0dWRlID0gdGhpcy5tYXhDb25uZWN0aW9uQWdlTXMgLyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGppdHRlciA9IE1hdGgucmFuZG9tKCkgKiBqaXR0ZXJNYWduaXR1ZGUgKiAyIC0gaml0dGVyTWFnbml0dWRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkFnZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9iLCBfYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uQ2xvc2VkQnlTZXJ2ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0Nvbm5lY3Rpb24gZHJvcHBlZCBieSBtYXggY29ubmVjdGlvbiBhZ2U6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9iID0gc2Vzc2lvbi5zb2NrZXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZW1vdGVBZGRyZXNzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nb2F3YXkoaHR0cDIuY29uc3RhbnRzLk5HSFRUUDJfTk9fRVJST1IsIH4oMSA8PCAzMSksIGtNYXhBZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZ29hd2F5IGNhbid0IGJlIHNlbnQgYmVjYXVzZSB0aGUgc2Vzc2lvbiBpcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb3cgYSBncmFjZSBwZXJpb2QgYWZ0ZXIgc2VuZGluZyB0aGUgR09BV0FZIGJlZm9yZSBmb3JjaWJseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4Q29ubmVjdGlvbkFnZUdyYWNlTXMgIT09IFVOTElNSVRFRF9DT05ORUNUSU9OX0FHRV9NUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQWdlR3JhY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMubWF4Q29ubmVjdGlvbkFnZUdyYWNlTXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2MgPSBjb25uZWN0aW9uQWdlR3JhY2VUaW1lci51bnJlZikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwoY29ubmVjdGlvbkFnZUdyYWNlVGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMubWF4Q29ubmVjdGlvbkFnZU1zICsgaml0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYyA9IGNvbm5lY3Rpb25BZ2VUaW1lci51bnJlZikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwoY29ubmVjdGlvbkFnZVRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGVhcktlZXBhbGl2ZVRpbWVvdXQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcGFsaXZlVGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoa2VlcGFsaXZlVGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBhbGl2ZVRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuU2VuZFBpbmcgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCFzZXNzaW9uLmRlc3Ryb3llZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVGltZU1zIDwgS0VFUEFMSVZFX01BWF9USU1FX01TICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lTXMgPiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2VuZFBpbmc7IC8vIGhvaXN0ZWQgZm9yIHVzZSBpbiBtYXliZVN0YXJ0S2VlcGFsaXZlUGluZ1RpbWVyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlU3RhcnRLZWVwYWxpdmVQaW5nVGltZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhblNlbmRQaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRyYWNlKCdTdGFydGluZyBrZWVwYWxpdmUgdGltZXIgZm9yICcgKyB0aGlzLmtlZXBhbGl2ZVRpbWVNcyArICdtcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2VlcGFsaXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcktlZXBhbGl2ZVRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUGluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5rZWVwYWxpdmVUaW1lTXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9iID0ga2VlcGFsaXZlVGltZXIudW5yZWYpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGtlZXBhbGl2ZVRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFBpbmcgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhblNlbmRQaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRyYWNlKCdTZW5kaW5nIHBpbmcgd2l0aCB0aW1lb3V0ICcgKyB0aGlzLmtlZXBhbGl2ZVRpbWVvdXRNcyArICdtcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBpbmdTZW5kRXJyb3IgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGluZ1NlbnRTdWNjZXNzZnVsbHkgPSBzZXNzaW9uLnBpbmcoKGVyciwgZHVyYXRpb24sIHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJLZWVwYWxpdmVUaW1lb3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1BpbmcgZmFpbGVkIHdpdGggZXJyb3I6ICcgKyBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uQ2xvc2VkQnlTZXJ2ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRyYWNlKCdSZWNlaXZlZCBwaW5nIHJlc3BvbnNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZVN0YXJ0S2VlcGFsaXZlUGluZ1RpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBpbmdTZW50U3VjY2Vzc2Z1bGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbmdTZW5kRXJyb3IgPSAnUGluZyByZXR1cm5lZCBmYWxzZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBncnBjL2dycGMtbm9kZSMyMTM5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGluZ1NlbmRFcnJvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnJykgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbmdTZW5kRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRyYWNlKCdQaW5nIHNlbmQgZmFpbGVkOiAnICsgcGluZ1NlbmRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnQ29ubmVjdGlvbiBkcm9wcGVkIGR1ZSB0byBwaW5nIHNlbmQgZXJyb3I6ICcgKyBwaW5nU2VuZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uQ2xvc2VkQnlTZXJ2ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBhbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJLZWVwYWxpdmVUaW1lb3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUcmFjZSgnUGluZyB0aW1lb3V0IHBhc3NlZCB3aXRob3V0IHJlc3BvbnNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnQ29ubmVjdGlvbiBkcm9wcGVkIGJ5IGtlZXBhbGl2ZSB0aW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkNsb3NlZEJ5U2VydmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMua2VlcGFsaXZlVGltZW91dE1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGtlZXBhbGl2ZVRpbWVyLnVucmVmKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChrZWVwYWxpdmVUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG1heWJlU3RhcnRLZWVwYWxpdmVQaW5nVGltZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2IsIF9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uQ2xvc2VkQnlTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWNlKGBDb25uZWN0aW9uIGRyb3BwZWQgYnkgY2xpZW50ICR7KF9iID0gc2Vzc2lvbi5zb2NrZXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZW1vdGVBZGRyZXNzfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25BZ2VUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uQWdlVGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25BZ2VHcmFjZVRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3Rpb25BZ2VHcmFjZVRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyS2VlcGFsaXZlVGltZW91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkbGVUaW1lb3V0T2JqICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGlkbGVUaW1lb3V0T2JqLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkbGVUaW1lb3V0cy5kZWxldGUoc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2MgPSB0aGlzLmh0dHAyU2VydmVycy5nZXQoaHR0cDJTZXJ2ZXIpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc2Vzc2lvbnMuZGVsZXRlKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NoYW5uZWx6U2Vzc2lvbkhhbmRsZXIoaHR0cDJTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVselJlZiA9ICgwLCBjaGFubmVsel8xLnJlZ2lzdGVyQ2hhbm5lbHpTb2NrZXQpKChfYyA9IChfYiA9IHNlc3Npb24uc29ja2V0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3RlQWRkcmVzcykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJ3Vua25vd24nLCB0aGlzLmdldENoYW5uZWx6U2Vzc2lvbkluZm8uYmluZCh0aGlzLCBzZXNzaW9uKSwgdGhpcy5jaGFubmVsekVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVselNlc3Npb25JbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBjaGFubmVselJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVRyYWNrZXI6IG5ldyBjaGFubmVsel8xLkNoYW5uZWx6Q2FsbFRyYWNrZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzU2VudDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzUmVjZWl2ZWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZWVwQWxpdmVzU2VudDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNZXNzYWdlU2VudFRpbWVzdGFtcDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNZXNzYWdlUmVjZWl2ZWRUaW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIChfZCA9IHRoaXMuaHR0cDJTZXJ2ZXJzLmdldChodHRwMlNlcnZlcikpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5zZXNzaW9ucy5hZGQoc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbnMuc2V0KHNlc3Npb24sIGNoYW5uZWx6U2Vzc2lvbkluZm8pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRBZGRyZXNzID0gYCR7c2Vzc2lvbi5zb2NrZXQucmVtb3RlQWRkcmVzc306JHtzZXNzaW9uLnNvY2tldC5yZW1vdGVQb3J0fWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdDb25uZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGNsaWVudCAnICsgY2xpZW50QWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0Nvbm5lY3Rpb24gZXN0YWJsaXNoZWQgYnkgY2xpZW50ICcgKyBjbGllbnRBZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uQ2hpbGRyZW5UcmFja2VyLnJlZkNoaWxkKGNoYW5uZWx6UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5lY3Rpb25BZ2VUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25uZWN0aW9uQWdlR3JhY2VUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZWVwYWxpdmVUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlc3Npb25DbG9zZWRCeVNlcnZlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZGxlVGltZW91dE9iaiA9IHRoaXMuZW5hYmxlSWRsZVRpbWVvdXQoc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heENvbm5lY3Rpb25BZ2VNcyAhPT0gVU5MSU1JVEVEX0NPTk5FQ1RJT05fQUdFX01TKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBhIHJhbmRvbSBqaXR0ZXIgd2l0aGluIGEgKy8tMTAlIHJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqaXR0ZXJNYWduaXR1ZGUgPSB0aGlzLm1heENvbm5lY3Rpb25BZ2VNcyAvIDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5yYW5kb20oKSAqIGppdHRlck1hZ25pdHVkZSAqIDIgLSBqaXR0ZXJNYWduaXR1ZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQWdlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkNsb3NlZEJ5U2VydmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWx6VHJhY2UuYWRkVHJhY2UoJ0NUX0lORk8nLCAnQ29ubmVjdGlvbiBkcm9wcGVkIGJ5IG1heCBjb25uZWN0aW9uIGFnZSBmcm9tICcgKyBjbGllbnRBZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdvYXdheShodHRwMi5jb25zdGFudHMuTkdIVFRQMl9OT19FUlJPUiwgfigxIDw8IDMxKSwga01heEFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBnb2F3YXkgY2FuJ3QgYmUgc2VudCBiZWNhdXNlIHRoZSBzZXNzaW9uIGlzIGFscmVhZHkgY2xvc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvdyBhIGdyYWNlIHBlcmlvZCBhZnRlciBzZW5kaW5nIHRoZSBHT0FXQVkgYmVmb3JlIGZvcmNpYmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2xvc2luZyB0aGUgY29ubmVjdGlvbi4gKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhDb25uZWN0aW9uQWdlR3JhY2VNcyAhPT0gVU5MSU1JVEVEX0NPTk5FQ1RJT05fQUdFX01TKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25BZ2VHcmFjZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5tYXhDb25uZWN0aW9uQWdlR3JhY2VNcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGNvbm5lY3Rpb25BZ2VHcmFjZVRpbWVyLnVucmVmKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChjb25uZWN0aW9uQWdlR3JhY2VUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5tYXhDb25uZWN0aW9uQWdlTXMgKyBqaXR0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9lID0gY29ubmVjdGlvbkFnZVRpbWVyLnVucmVmKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY2FsbChjb25uZWN0aW9uQWdlVGltZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyS2VlcGFsaXZlVGltZW91dCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZWVwYWxpdmVUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGtlZXBhbGl2ZVRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBhbGl2ZVRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5TZW5kUGluZyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIXNlc3Npb24uZGVzdHJveWVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUaW1lTXMgPCBLRUVQQUxJVkVfTUFYX1RJTUVfTVMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtlZXBhbGl2ZVRpbWVNcyA+IDApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZW5kUGluZzsgLy8gaG9pc3RlZCBmb3IgdXNlIGluIG1heWJlU3RhcnRLZWVwYWxpdmVQaW5nVGltZXJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF5YmVTdGFydEtlZXBhbGl2ZVBpbmdUaW1lciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuU2VuZFBpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1N0YXJ0aW5nIGtlZXBhbGl2ZSB0aW1lciBmb3IgJyArIHRoaXMua2VlcGFsaXZlVGltZU1zICsgJ21zJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZWVwYWxpdmVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJLZWVwYWxpdmVUaW1lb3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMua2VlcGFsaXZlVGltZU1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGtlZXBhbGl2ZVRpbWVvdXQudW5yZWYpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGtlZXBhbGl2ZVRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZW5kUGluZyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuU2VuZFBpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1NlbmRpbmcgcGluZyB3aXRoIHRpbWVvdXQgJyArIHRoaXMua2VlcGFsaXZlVGltZW91dE1zICsgJ21zJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGluZ1NlbmRFcnJvciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaW5nU2VudFN1Y2Nlc3NmdWxseSA9IHNlc3Npb24ucGluZygoZXJyLCBkdXJhdGlvbiwgcGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcktlZXBhbGl2ZVRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUcmFjZSgnUGluZyBmYWlsZWQgd2l0aCBlcnJvcjogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdDb25uZWN0aW9uIGRyb3BwZWQgZHVlIHRvIGVycm9yIG9mIGEgcGluZyBmcmFtZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm4gaW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkNsb3NlZEJ5U2VydmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUcmFjZSgnUmVjZWl2ZWQgcGluZyByZXNwb25zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVTdGFydEtlZXBhbGl2ZVBpbmdUaW1lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaW5nU2VudFN1Y2Nlc3NmdWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5nU2VuZEVycm9yID0gJ1BpbmcgcmV0dXJuZWQgZmFsc2UnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ3JwYy9ncnBjLW5vZGUjMjEzOVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbmdTZW5kRXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogJycpIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaW5nU2VuZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZWVwYWxpdmVUcmFjZSgnUGluZyBzZW5kIGZhaWxlZDogJyArIHBpbmdTZW5kRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdDb25uZWN0aW9uIGRyb3BwZWQgZHVlIHRvIHBpbmcgc2VuZCBlcnJvcjogJyArIHBpbmdTZW5kRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25DbG9zZWRCeVNlcnZlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHpTZXNzaW9uSW5mby5rZWVwQWxpdmVzU2VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAga2VlcGFsaXZlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyS2VlcGFsaXZlVGltZW91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2VlcGFsaXZlVHJhY2UoJ1BpbmcgdGltZW91dCBwYXNzZWQgd2l0aG91dCByZXNwb25zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbHpUcmFjZS5hZGRUcmFjZSgnQ1RfSU5GTycsICdDb25uZWN0aW9uIGRyb3BwZWQgYnkga2VlcGFsaXZlIHRpbWVvdXQgZnJvbSAnICsgY2xpZW50QWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkNsb3NlZEJ5U2VydmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMua2VlcGFsaXZlVGltZW91dE1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGtlZXBhbGl2ZVRpbWVvdXQudW5yZWYpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGtlZXBhbGl2ZVRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVN0YXJ0S2VlcGFsaXZlUGluZ1RpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uQ2xvc2VkQnlTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5uZWx6VHJhY2UuYWRkVHJhY2UoJ0NUX0lORk8nLCAnQ29ubmVjdGlvbiBkcm9wcGVkIGJ5IGNsaWVudCAnICsgY2xpZW50QWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25DaGlsZHJlblRyYWNrZXIudW5yZWZDaGlsZChjaGFubmVselJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgY2hhbm5lbHpfMS51bnJlZ2lzdGVyQ2hhbm5lbHpSZWYpKGNoYW5uZWx6UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uQWdlVGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoY29ubmVjdGlvbkFnZVRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uQWdlR3JhY2VUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uQWdlR3JhY2VUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhcktlZXBhbGl2ZVRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGxlVGltZW91dE9iaiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChpZGxlVGltZW91dE9iai50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25JZGxlVGltZW91dHMuZGVsZXRlKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKF9iID0gdGhpcy5odHRwMlNlcnZlcnMuZ2V0KGh0dHAyU2VydmVyKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNlc3Npb25zLmRlbGV0ZShzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5hYmxlSWRsZVRpbWVvdXQoc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIHZhciBfYiwgX2M7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkbGVUaW1lb3V0ID49IE1BWF9DT05ORUNUSU9OX0lETEVfTVMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlkbGVUaW1lb3V0T2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVTdHJlYW1zOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYXN0SWRsZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgb25DbG9zZTogdGhpcy5vblN0cmVhbUNsb3NlLmJpbmQodGhpcywgc2Vzc2lvbiksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQodGhpcy5vbklkbGVUaW1lb3V0LCB0aGlzLnNlc3Npb25JZGxlVGltZW91dCwgdGhpcywgc2Vzc2lvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAoX2MgPSAoX2IgPSBpZGxlVGltZW91dE9iai50aW1lb3V0KS51bnJlZikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkbGVUaW1lb3V0cy5zZXQoc2Vzc2lvbiwgaWRsZVRpbWVvdXRPYmopO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc29ja2V0IH0gPSBzZXNzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoJ0VuYWJsZSBpZGxlIHRpbWVvdXQgZm9yICcgK1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQucmVtb3RlQWRkcmVzcyArXG4gICAgICAgICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC5yZW1vdGVQb3J0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRsZVRpbWVvdXRPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbklkbGVUaW1lb3V0KGN0eCwgc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc29ja2V0IH0gPSBzZXNzaW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gY3R4LnNlc3Npb25JZGxlVGltZW91dHMuZ2V0KHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIC8vIGlmIGl0IGlzIGNhbGxlZCB3aGlsZSB3ZSBoYXZlIGFjdGl2ZVN0cmVhbXMgLSB0aW1lciB3aWxsIG5vdCBiZSByZXNjaGVkdWxlZFxuICAgICAgICAgICAgICAgIC8vIHVudGlsIGxhc3QgYWN0aXZlIHN0cmVhbSBpcyBjbG9zZWQsIHRoZW4gaXQgd2lsbCBjYWxsIC5yZWZyZXNoKCkgb24gdGhlIHRpbWVyXG4gICAgICAgICAgICAgICAgLy8gaW1wb3J0YW50IHBhcnQgaXMgdG8gbm90IGNsZWFyVGltZW91dCh0aW1lcikgb3IgaXQgYmVjb21lcyB1bnVzYWJsZVxuICAgICAgICAgICAgICAgIC8vIGZvciBmdXR1cmUgcmVmcmVzaGVzXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25JbmZvICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkluZm8uYWN0aXZlU3RyZWFtcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHNlc3Npb25JbmZvLmxhc3RJZGxlID49IGN0eC5zZXNzaW9uSWRsZVRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFjZSgnU2Vzc2lvbiBpZGxlIHRpbWVvdXQgdHJpZ2dlcmVkIGZvciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2V0ID09PSBudWxsIHx8IHNvY2tldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc29ja2V0LnJlbW90ZUFkZHJlc3MpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrZXQgPT09IG51bGwgfHwgc29ja2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb2NrZXQucmVtb3RlUG9ydCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgbGFzdCBpZGxlIGF0ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25JbmZvLmxhc3RJZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jbG9zZVNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSW5mby50aW1lb3V0LnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3RyZWFtT3BlbmVkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBzdHJlYW0uc2Vzc2lvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBpZGxlVGltZW91dE9iaiA9IHRoaXMuc2Vzc2lvbklkbGVUaW1lb3V0cy5nZXQoc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgaWYgKGlkbGVUaW1lb3V0T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkbGVUaW1lb3V0T2JqLmFjdGl2ZVN0cmVhbXMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm9uY2UoJ2Nsb3NlJywgaWRsZVRpbWVvdXRPYmoub25DbG9zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdHJlYW1DbG9zZShzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iLCBfYztcbiAgICAgICAgICAgICAgICBjb25zdCBpZGxlVGltZW91dE9iaiA9IHRoaXMuc2Vzc2lvbklkbGVUaW1lb3V0cy5nZXQoc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgaWYgKGlkbGVUaW1lb3V0T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkbGVUaW1lb3V0T2JqLmFjdGl2ZVN0cmVhbXMgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkbGVUaW1lb3V0T2JqLmFjdGl2ZVN0cmVhbXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkbGVUaW1lb3V0T2JqLmxhc3RJZGxlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkbGVUaW1lb3V0T2JqLnRpbWVvdXQucmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZSgnU2Vzc2lvbiBvblN0cmVhbUNsb3NlJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfYiA9IHNlc3Npb24uc29ja2V0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVtb3RlQWRkcmVzcykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfYyA9IHNlc3Npb24uc29ja2V0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucmVtb3RlUG9ydCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgYXQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZVRpbWVvdXRPYmoubGFzdElkbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB2b2lkIDA7XG4gICAgICAgICAgICBfc3RhcnRfZGVjb3JhdG9ycyA9IFtkZXByZWNhdGUoJ0NhbGxpbmcgc3RhcnQoKSBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LiBJdCBjYW4gYmUgc2FmZWx5IG9taXR0ZWQuJyldO1xuICAgICAgICAgICAgX19lc0RlY29yYXRlKF9hLCBudWxsLCBfc3RhcnRfZGVjb3JhdG9ycywgeyBraW5kOiBcIm1ldGhvZFwiLCBuYW1lOiBcInN0YXJ0XCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gXCJzdGFydFwiIGluIG9iaiwgZ2V0OiBvYmogPT4gb2JqLnN0YXJ0IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpO1xuICAgICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTtcbiAgICAgICAgfSkoKSxcbiAgICAgICAgX2E7XG59KSgpO1xuZXhwb3J0cy5TZXJ2ZXIgPSBTZXJ2ZXI7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVVbmFyeShjYWxsLCBoYW5kbGVyKSB7XG4gICAgbGV0IHN0cmVhbTtcbiAgICBmdW5jdGlvbiByZXNwb25kKGVyciwgdmFsdWUsIHRyYWlsZXIsIGZsYWdzKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGwuc2VuZFN0YXR1cygoMCwgc2VydmVyX2NhbGxfMS5zZXJ2ZXJFcnJvclRvU3RhdHVzKShlcnIsIHRyYWlsZXIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYWxsLnNlbmRNZXNzYWdlKHZhbHVlLCAoKSA9PiB7XG4gICAgICAgICAgICBjYWxsLnNlbmRTdGF0dXMoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5PSyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAnT0snLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB0cmFpbGVyICE9PSBudWxsICYmIHRyYWlsZXIgIT09IHZvaWQgMCA/IHRyYWlsZXIgOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdE1ldGFkYXRhO1xuICAgIGxldCByZXF1ZXN0TWVzc2FnZSA9IG51bGw7XG4gICAgY2FsbC5zdGFydCh7XG4gICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICByZXF1ZXN0TWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgICAgIGNhbGwuc3RhcnRSZWFkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgY2FsbC5zZW5kU3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlVOSU1QTEVNRU5URUQsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBSZWNlaXZlZCBhIHNlY29uZCByZXF1ZXN0IG1lc3NhZ2UgZm9yIHNlcnZlciBzdHJlYW1pbmcgbWV0aG9kICR7aGFuZGxlci5wYXRofWAsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIGNhbGwuc3RhcnRSZWFkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVjZWl2ZUhhbGZDbG9zZSgpIHtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBjYWxsLnNlbmRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5JTVBMRU1FTlRFRCxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYFJlY2VpdmVkIG5vIHJlcXVlc3QgbWVzc2FnZSBmb3Igc2VydmVyIHN0cmVhbWluZyBtZXRob2QgJHtoYW5kbGVyLnBhdGh9YCxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtID0gbmV3IHNlcnZlcl9jYWxsXzEuU2VydmVyV3JpdGFibGVTdHJlYW1JbXBsKGhhbmRsZXIucGF0aCwgY2FsbCwgcmVxdWVzdE1ldGFkYXRhLCByZXF1ZXN0TWVzc2FnZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuZnVuYyhzdHJlYW0sIHJlc3BvbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGwuc2VuZFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5VTktOT1dOLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgU2VydmVyIG1ldGhvZCBoYW5kbGVyIHRocmV3IGVycm9yICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2FuY2VsKCkge1xuICAgICAgICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5lbWl0KCdjYW5jZWxsZWQnLCAnY2FuY2VsbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYW5kbGVDbGllbnRTdHJlYW1pbmcoY2FsbCwgaGFuZGxlcikge1xuICAgIGxldCBzdHJlYW07XG4gICAgZnVuY3Rpb24gcmVzcG9uZChlcnIsIHZhbHVlLCB0cmFpbGVyLCBmbGFncykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsLnNlbmRTdGF0dXMoKDAsIHNlcnZlcl9jYWxsXzEuc2VydmVyRXJyb3JUb1N0YXR1cykoZXJyLCB0cmFpbGVyKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FsbC5zZW5kTWVzc2FnZSh2YWx1ZSwgKCkgPT4ge1xuICAgICAgICAgICAgY2FsbC5zZW5kU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuT0ssXG4gICAgICAgICAgICAgICAgZGV0YWlsczogJ09LJyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogdHJhaWxlciAhPT0gbnVsbCAmJiB0cmFpbGVyICE9PSB2b2lkIDAgPyB0cmFpbGVyIDogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2FsbC5zdGFydCh7XG4gICAgICAgIG9uUmVjZWl2ZU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICBzdHJlYW0gPSBuZXcgc2VydmVyX2NhbGxfMS5TZXJ2ZXJEdXBsZXhTdHJlYW1JbXBsKGhhbmRsZXIucGF0aCwgY2FsbCwgbWV0YWRhdGEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmZ1bmMoc3RyZWFtLCByZXNwb25kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsLnNlbmRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5LTk9XTixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYFNlcnZlciBtZXRob2QgaGFuZGxlciB0aHJldyBlcnJvciAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHN0cmVhbS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB9LFxuICAgICAgICBvblJlY2VpdmVIYWxmQ2xvc2UoKSB7XG4gICAgICAgICAgICBzdHJlYW0ucHVzaChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DYW5jZWwoKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmVtaXQoJ2NhbmNlbGxlZCcsICdjYW5jZWxsZWQnKTtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlU2VydmVyU3RyZWFtaW5nKGNhbGwsIGhhbmRsZXIpIHtcbiAgICBsZXQgc3RyZWFtO1xuICAgIGxldCByZXF1ZXN0TWV0YWRhdGE7XG4gICAgbGV0IHJlcXVlc3RNZXNzYWdlID0gbnVsbDtcbiAgICBjYWxsLnN0YXJ0KHtcbiAgICAgICAgb25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHJlcXVlc3RNZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICAgICAgY2FsbC5zdGFydFJlYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWNlaXZlTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBjYWxsLnNlbmRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5JTVBMRU1FTlRFRCxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYFJlY2VpdmVkIGEgc2Vjb25kIHJlcXVlc3QgbWVzc2FnZSBmb3Igc2VydmVyIHN0cmVhbWluZyBtZXRob2QgJHtoYW5kbGVyLnBhdGh9YCxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICAgICAgY2FsbC5zdGFydFJlYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWNlaXZlSGFsZkNsb3NlKCkge1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGNhbGwuc2VuZFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5VTklNUExFTUVOVEVELFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgUmVjZWl2ZWQgbm8gcmVxdWVzdCBtZXNzYWdlIGZvciBzZXJ2ZXIgc3RyZWFtaW5nIG1ldGhvZCAke2hhbmRsZXIucGF0aH1gLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJlYW0gPSBuZXcgc2VydmVyX2NhbGxfMS5TZXJ2ZXJXcml0YWJsZVN0cmVhbUltcGwoaGFuZGxlci5wYXRoLCBjYWxsLCByZXF1ZXN0TWV0YWRhdGEsIHJlcXVlc3RNZXNzYWdlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5mdW5jKHN0cmVhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbC5zZW5kU3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlVOS05PV04sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBTZXJ2ZXIgbWV0aG9kIGhhbmRsZXIgdGhyZXcgZXJyb3IgJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25DYW5jZWwoKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RyZWFtLmVtaXQoJ2NhbmNlbGxlZCcsICdjYW5jZWxsZWQnKTtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFuZGxlQmlkaVN0cmVhbWluZyhjYWxsLCBoYW5kbGVyKSB7XG4gICAgbGV0IHN0cmVhbTtcbiAgICBjYWxsLnN0YXJ0KHtcbiAgICAgICAgb25SZWNlaXZlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBzZXJ2ZXJfY2FsbF8xLlNlcnZlckR1cGxleFN0cmVhbUltcGwoaGFuZGxlci5wYXRoLCBjYWxsLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuZnVuYyhzdHJlYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGwuc2VuZFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvbnN0YW50c18xLlN0YXR1cy5VTktOT1dOLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgU2VydmVyIG1ldGhvZCBoYW5kbGVyIHRocmV3IGVycm9yICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICAgICAgc3RyZWFtLnB1c2gobWVzc2FnZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVjZWl2ZUhhbGZDbG9zZSgpIHtcbiAgICAgICAgICAgIHN0cmVhbS5wdXNoKG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNhbmNlbCgpIHtcbiAgICAgICAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzdHJlYW0uZW1pdCgnY2FuY2VsbGVkJywgJ2NhbmNlbGxlZCcpO1xuICAgICAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdGF0dXNCdWlsZGVyID0gdm9pZCAwO1xuLyoqXG4gKiBBIGJ1aWxkZXIgZm9yIGdSUEMgc3RhdHVzIG9iamVjdHMuXG4gKi9cbmNsYXNzIFN0YXR1c0J1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBudWxsO1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHN0YXR1cyBjb2RlIHRvIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhDb2RlKGNvZGUpIHtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgZGV0YWlscyB0byB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoRGV0YWlscyhkZXRhaWxzKSB7XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIG1ldGFkYXRhIHRvIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhNZXRhZGF0YShtZXRhZGF0YSkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgdGhlIHN0YXR1cyBvYmplY3QuXG4gICAgICovXG4gICAgYnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5jb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0dXMuY29kZSA9IHRoaXMuY29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXRhaWxzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0dXMuZGV0YWlscyA9IHRoaXMuZGV0YWlscztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdHVzLm1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgIH1cbn1cbmV4cG9ydHMuU3RhdHVzQnVpbGRlciA9IFN0YXR1c0J1aWxkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0dXMtYnVpbGRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDE5IGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxlYWZMb2FkQmFsYW5jZXIgPSBleHBvcnRzLlBpY2tGaXJzdExvYWRCYWxhbmNlciA9IGV4cG9ydHMuUGlja0ZpcnN0TG9hZEJhbGFuY2luZ0NvbmZpZyA9IHZvaWQgMDtcbmV4cG9ydHMuc2h1ZmZsZWQgPSBzaHVmZmxlZDtcbmV4cG9ydHMuc2V0dXAgPSBzZXR1cDtcbmNvbnN0IGxvYWRfYmFsYW5jZXJfMSA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXJcIik7XG5jb25zdCBjb25uZWN0aXZpdHlfc3RhdGVfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eS1zdGF0ZVwiKTtcbmNvbnN0IHBpY2tlcl8xID0gcmVxdWlyZShcIi4vcGlja2VyXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9hZGRyZXNzXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWFkZHJlc3NcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9hZGRyZXNzXzIgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWFkZHJlc3NcIik7XG5jb25zdCBuZXRfMSA9IHJlcXVpcmUoXCJuZXRcIik7XG5jb25zdCBjYWxsX2ludGVyZmFjZV8xID0gcmVxdWlyZShcIi4vY2FsbC1pbnRlcmZhY2VcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdwaWNrX2ZpcnN0JztcbmZ1bmN0aW9uIHRyYWNlKHRleHQpIHtcbiAgICBsb2dnaW5nLnRyYWNlKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgVFJBQ0VSX05BTUUsIHRleHQpO1xufVxuY29uc3QgVFlQRV9OQU1FID0gJ3BpY2tfZmlyc3QnO1xuLyoqXG4gKiBEZWxheSBhZnRlciBzdGFydGluZyBhIGNvbm5lY3Rpb24gb24gYSBzdWJjaGFubmVsIGJlZm9yZSBzdGFydGluZyBhXG4gKiBjb25uZWN0aW9uIG9uIHRoZSBuZXh0IHN1YmNoYW5uZWwgaW4gdGhlIGxpc3QsIGZvciBIYXBweSBFeWViYWxscyBhbGdvcml0aG0uXG4gKi9cbmNvbnN0IENPTk5FQ1RJT05fREVMQVlfSU5URVJWQUxfTVMgPSAyNTA7XG5jbGFzcyBQaWNrRmlyc3RMb2FkQmFsYW5jaW5nQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3RvcihzaHVmZmxlQWRkcmVzc0xpc3QpIHtcbiAgICAgICAgdGhpcy5zaHVmZmxlQWRkcmVzc0xpc3QgPSBzaHVmZmxlQWRkcmVzc0xpc3Q7XG4gICAgfVxuICAgIGdldExvYWRCYWxhbmNlck5hbWUoKSB7XG4gICAgICAgIHJldHVybiBUWVBFX05BTUU7XG4gICAgfVxuICAgIHRvSnNvbk9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtUWVBFX05BTUVdOiB7XG4gICAgICAgICAgICAgICAgc2h1ZmZsZUFkZHJlc3NMaXN0OiB0aGlzLnNodWZmbGVBZGRyZXNzTGlzdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldFNodWZmbGVBZGRyZXNzTGlzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2h1ZmZsZUFkZHJlc3NMaXN0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0YXRpYyBjcmVhdGVGcm9tSnNvbihvYmopIHtcbiAgICAgICAgaWYgKCdzaHVmZmxlQWRkcmVzc0xpc3QnIGluIG9iaiAmJlxuICAgICAgICAgICAgISh0eXBlb2Ygb2JqLnNodWZmbGVBZGRyZXNzTGlzdCA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwaWNrX2ZpcnN0IGNvbmZpZyBmaWVsZCBzaHVmZmxlQWRkcmVzc0xpc3QgbXVzdCBiZSBhIGJvb2xlYW4gaWYgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFBpY2tGaXJzdExvYWRCYWxhbmNpbmdDb25maWcob2JqLnNodWZmbGVBZGRyZXNzTGlzdCA9PT0gdHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5QaWNrRmlyc3RMb2FkQmFsYW5jaW5nQ29uZmlnID0gUGlja0ZpcnN0TG9hZEJhbGFuY2luZ0NvbmZpZztcbi8qKlxuICogUGlja2VyIGZvciBhIGBQaWNrRmlyc3RMb2FkQmFsYW5jZXJgIGluIHRoZSBSRUFEWSBzdGF0ZS4gQWx3YXlzIHJldHVybnMgdGhlXG4gKiBwaWNrZWQgc3ViY2hhbm5lbC5cbiAqL1xuY2xhc3MgUGlja0ZpcnN0UGlja2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdWJjaGFubmVsKSB7XG4gICAgICAgIHRoaXMuc3ViY2hhbm5lbCA9IHN1YmNoYW5uZWw7XG4gICAgfVxuICAgIHBpY2socGlja0FyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBpY2tSZXN1bHRUeXBlOiBwaWNrZXJfMS5QaWNrUmVzdWx0VHlwZS5DT01QTEVURSxcbiAgICAgICAgICAgIHN1YmNoYW5uZWw6IHRoaXMuc3ViY2hhbm5lbCxcbiAgICAgICAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgICAgICAgIG9uQ2FsbFN0YXJ0ZWQ6IG51bGwsXG4gICAgICAgICAgICBvbkNhbGxFbmRlZDogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybiBhIG5ldyBhcnJheSB3aXRoIHRoZSBlbGVtZW50cyBvZiB0aGUgaW5wdXQgYXJyYXkgaW4gYSByYW5kb20gb3JkZXJcbiAqIEBwYXJhbSBsaXN0IFRoZSBpbnB1dCBhcnJheVxuICogQHJldHVybnMgQSBzaHVmZmxlZCBhcnJheSBvZiB0aGUgZWxlbWVudHMgb2YgbGlzdFxuICovXG5mdW5jdGlvbiBzaHVmZmxlZChsaXN0KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbGlzdC5zbGljZSgpO1xuICAgIGZvciAobGV0IGkgPSByZXN1bHQubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSByZXN1bHRbaV07XG4gICAgICAgIHJlc3VsdFtpXSA9IHJlc3VsdFtqXTtcbiAgICAgICAgcmVzdWx0W2pdID0gdGVtcDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogSW50ZXJsZWF2ZSBhZGRyZXNzZXMgaW4gYWRkcmVzc0xpc3QgYnkgZmFtaWx5IGluIGFjY29yZGFuY2Ugd2l0aCBSRkMtODMwNCBzZWN0aW9uIDRcbiAqIEBwYXJhbSBhZGRyZXNzTGlzdFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gaW50ZXJsZWF2ZUFkZHJlc3NGYW1pbGllcyhhZGRyZXNzTGlzdCkge1xuICAgIGlmIChhZGRyZXNzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBpcHY2QWRkcmVzc2VzID0gW107XG4gICAgY29uc3QgaXB2NEFkZHJlc3NlcyA9IFtdO1xuICAgIGNvbnN0IGlwdjZGaXJzdCA9ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMi5pc1RjcFN1YmNoYW5uZWxBZGRyZXNzKShhZGRyZXNzTGlzdFswXSkgJiYgKDAsIG5ldF8xLmlzSVB2NikoYWRkcmVzc0xpc3RbMF0uaG9zdCk7XG4gICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3NMaXN0KSB7XG4gICAgICAgIGlmICgoMCwgc3ViY2hhbm5lbF9hZGRyZXNzXzIuaXNUY3BTdWJjaGFubmVsQWRkcmVzcykoYWRkcmVzcykgJiYgKDAsIG5ldF8xLmlzSVB2NikoYWRkcmVzcy5ob3N0KSkge1xuICAgICAgICAgICAgaXB2NkFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXB2NEFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0TGlzdCA9IGlwdjZGaXJzdCA/IGlwdjZBZGRyZXNzZXMgOiBpcHY0QWRkcmVzc2VzO1xuICAgIGNvbnN0IHNlY29uZExpc3QgPSBpcHY2Rmlyc3QgPyBpcHY0QWRkcmVzc2VzIDogaXB2NkFkZHJlc3NlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KGZpcnN0TGlzdC5sZW5ndGgsIHNlY29uZExpc3QubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgZmlyc3RMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZmlyc3RMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IHNlY29uZExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChzZWNvbmRMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgUkVQT1JUX0hFQUxUSF9TVEFUVVNfT1BUSU9OX05BTUUgPSAnZ3JwYy1ub2RlLmludGVybmFsLnBpY2stZmlyc3QucmVwb3J0X2hlYWx0aF9zdGF0dXMnO1xuY2xhc3MgUGlja0ZpcnN0TG9hZEJhbGFuY2VyIHtcbiAgICAvKipcbiAgICAgKiBMb2FkIGJhbGFuY2VyIHRoYXQgYXR0ZW1wdHMgdG8gY29ubmVjdCB0byBlYWNoIGJhY2tlbmQgaW4gdGhlIGFkZHJlc3MgbGlzdFxuICAgICAqIGluIG9yZGVyLCBhbmQgcGlja3MgdGhlIGZpcnN0IG9uZSB0aGF0IGNvbm5lY3RzLCB1c2luZyBpdCBmb3IgZXZlcnlcbiAgICAgKiByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBjaGFubmVsQ29udHJvbEhlbHBlciBgQ2hhbm5lbENvbnRyb2xIZWxwZXJgIGluc3RhbmNlIHByb3ZpZGVkIGJ5XG4gICAgICogICAgIHRoaXMgbG9hZCBiYWxhbmNlcidzIG93bmVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250cm9sSGVscGVyKSB7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIgPSBjaGFubmVsQ29udHJvbEhlbHBlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBsaXN0IG9mIHN1YmNoYW5uZWxzIHRoaXMgbG9hZCBiYWxhbmNlciBpcyBjdXJyZW50bHkgYXR0ZW1wdGluZyB0b1xuICAgICAgICAgKiBjb25uZWN0IHRvLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGN1cnJlbnQgY29ubmVjdGl2aXR5IHN0YXRlIG9mIHRoZSBsb2FkIGJhbGFuY2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGluZGV4IHdpdGhpbiB0aGUgYHN1YmNoYW5uZWxzYCBhcnJheSBvZiB0aGUgc3ViY2hhbm5lbCB3aXRoIHRoZSBtb3N0XG4gICAgICAgICAqIHJlY2VudGx5IHN0YXJ0ZWQgY29ubmVjdGlvbiBhdHRlbXB0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdXJyZW50U3ViY2hhbm5lbEluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBjdXJyZW50bHkgcGlja2VkIHN1YmNoYW5uZWwgdXNlZCBmb3IgbWFraW5nIGNhbGxzLiBQb3B1bGF0ZWQgaWZcbiAgICAgICAgICogYW5kIG9ubHkgaWYgdGhlIGxvYWQgYmFsYW5jZXIncyBjdXJyZW50IHN0YXRlIGlzIFJFQURZLiBJbiB0aGF0IGNhc2UsXG4gICAgICAgICAqIHRoZSBzdWJjaGFubmVsJ3MgY3VycmVudCBzdGF0ZSBpcyBhbHNvIFJFQURZLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdXJyZW50UGljayA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0ZW5lciBjYWxsYmFjayBhdHRhY2hlZCB0byBlYWNoIHN1YmNoYW5uZWwgaW4gdGhlIGBzdWJjaGFubmVsc2AgbGlzdFxuICAgICAgICAgKiB3aGlsZSBlc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdWJjaGFubmVsU3RhdGVMaXN0ZW5lciA9IChzdWJjaGFubmVsLCBwcmV2aW91c1N0YXRlLCBuZXdTdGF0ZSwga2VlcGFsaXZlVGltZSwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3ViY2hhbm5lbFN0YXRlVXBkYXRlKHN1YmNoYW5uZWwsIHByZXZpb3VzU3RhdGUsIG5ld1N0YXRlLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBpY2tlZFN1YmNoYW5uZWxIZWFsdGhMaXN0ZW5lciA9ICgpID0+IHRoaXMuY2FsY3VsYXRlQW5kUmVwb3J0TmV3U3RhdGUoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBMQiBwb2xpY3kgZW50ZXJzIHN0aWNreSBUUkFOU0lFTlRfRkFJTFVSRSBtb2RlIHdoZW4gYWxsXG4gICAgICAgICAqIHN1YmNoYW5uZWxzIGhhdmUgZmFpbGVkIHRvIGNvbm5lY3QgYXQgbGVhc3Qgb25jZSwgYW5kIGl0IHN0YXlzIGluIHRoYXRcbiAgICAgICAgICogbW9kZSB1bnRpbCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBpcyBzdWNjZXNzZnVsLiBXaGlsZSBpbiBzdGlja3kgVEYgbW9kZSxcbiAgICAgICAgICogdGhlIExCIHBvbGljeSBjb250aW51b3VzbHkgYXR0ZW1wdHMgdG8gY29ubmVjdCB0byBhbGwgb2YgaXRzIHN1YmNoYW5uZWxzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGlja3lUcmFuc2llbnRGYWlsdXJlTW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlcG9ydEhlYWx0aFN0YXR1cyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1vc3QgcmVjZW50IGVycm9yIHJlcG9ydGVkIGJ5IGFueSBzdWJjaGFubmVsIGFzIGl0IHRyYW5zaXRpb25lZCB0b1xuICAgICAgICAgKiBUUkFOU0lFTlRfRkFJTFVSRS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGFzdEVycm9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXRlc3RBZGRyZXNzTGlzdCA9IG51bGw7XG4gICAgICAgIHRoaXMubGF0ZXN0T3B0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmxhdGVzdFJlc29sdXRpb25Ob3RlID0gJyc7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbkRlbGF5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4geyB9LCAwKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY29ubmVjdGlvbkRlbGF5VGltZW91dCk7XG4gICAgfVxuICAgIGFsbENoaWxkcmVuSGF2ZVJlcG9ydGVkVEYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLmhhc1JlcG9ydGVkVHJhbnNpZW50RmFpbHVyZSk7XG4gICAgfVxuICAgIHJlc2V0Q2hpbGRyZW5SZXBvcnRlZFRGKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLmhhc1JlcG9ydGVkVHJhbnNpZW50RmFpbHVyZSA9IGZhbHNlKTtcbiAgICB9XG4gICAgY2FsY3VsYXRlQW5kUmVwb3J0TmV3U3RhdGUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBpY2spIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcG9ydEhlYWx0aFN0YXR1cyAmJiAhdGhpcy5jdXJyZW50UGljay5pc0hlYWx0aHkoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBQaWNrZWQgc3ViY2hhbm5lbCAke3RoaXMuY3VycmVudFBpY2suZ2V0QWRkcmVzcygpfSBpcyB1bmhlYWx0aHlgO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkUsIG5ldyBwaWNrZXJfMS5VbmF2YWlsYWJsZVBpY2tlcih7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFksIG5ldyBQaWNrRmlyc3RQaWNrZXIodGhpcy5jdXJyZW50UGljayksIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoX2EgPSB0aGlzLmxhdGVzdEFkZHJlc3NMaXN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYE5vIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIExhc3QgZXJyb3I6ICR7dGhpcy5sYXN0RXJyb3J9LiBSZXNvbHV0aW9uIG5vdGU6ICR7dGhpcy5sYXRlc3RSZXNvbHV0aW9uTm90ZX1gO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSwgbmV3IHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyKHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICB9KSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFLCBuZXcgcGlja2VyXzEuUXVldWVQaWNrZXIodGhpcyksIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RpY2t5VHJhbnNpZW50RmFpbHVyZU1vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgTm8gY29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gTGFzdCBlcnJvcjogJHt0aGlzLmxhc3RFcnJvcn0uIFJlc29sdXRpb24gbm90ZTogJHt0aGlzLmxhdGVzdFJlc29sdXRpb25Ob3RlfWA7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSwgbmV3IHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyKHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5DT05ORUNUSU5HLCBuZXcgcGlja2VyXzEuUXVldWVQaWNrZXIodGhpcyksIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RSZXJlc29sdXRpb24oKSB7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIucmVxdWVzdFJlcmVzb2x1dGlvbigpO1xuICAgIH1cbiAgICBtYXliZUVudGVyU3RpY2t5VHJhbnNpZW50RmFpbHVyZU1vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxDaGlsZHJlbkhhdmVSZXBvcnRlZFRGKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3RSZXJlc29sdXRpb24oKTtcbiAgICAgICAgdGhpcy5yZXNldENoaWxkcmVuUmVwb3J0ZWRURigpO1xuICAgICAgICBpZiAodGhpcy5zdGlja3lUcmFuc2llbnRGYWlsdXJlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbmRSZXBvcnROZXdTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RpY2t5VHJhbnNpZW50RmFpbHVyZU1vZGUgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHsgc3ViY2hhbm5lbCB9IG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHN1YmNoYW5uZWwuc3RhcnRDb25uZWN0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBbmRSZXBvcnROZXdTdGF0ZSgpO1xuICAgIH1cbiAgICByZW1vdmVDdXJyZW50UGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBpY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBpY2sucmVtb3ZlQ29ubmVjdGl2aXR5U3RhdGVMaXN0ZW5lcih0aGlzLnN1YmNoYW5uZWxTdGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIucmVtb3ZlQ2hhbm5lbHpDaGlsZCh0aGlzLmN1cnJlbnRQaWNrLmdldENoYW5uZWx6UmVmKCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGljay5yZW1vdmVIZWFsdGhTdGF0ZVdhdGNoZXIodGhpcy5waWNrZWRTdWJjaGFubmVsSGVhbHRoTGlzdGVuZXIpO1xuICAgICAgICAgICAgLy8gVW5yZWYgbGFzdCwgdG8gYXZvaWQgdHJpZ2dlcmluZyBsaXN0ZW5lcnNcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBpY2sudW5yZWYoKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBpY2sgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uU3ViY2hhbm5lbFN0YXRlVXBkYXRlKHN1YmNoYW5uZWwsIHByZXZpb3VzU3RhdGUsIG5ld1N0YXRlLCBlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKF9hID0gdGhpcy5jdXJyZW50UGljaykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlYWxTdWJjaGFubmVsRXF1YWxzKHN1YmNoYW5uZWwpKSB7XG4gICAgICAgICAgICBpZiAobmV3U3RhdGUgIT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDdXJyZW50UGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW5kUmVwb3J0TmV3U3RhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2hpbGRdIG9mIHRoaXMuY2hpbGRyZW4uZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoc3ViY2hhbm5lbC5yZWFsU3ViY2hhbm5lbEVxdWFscyhjaGlsZC5zdWJjaGFubmVsKSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waWNrU3ViY2hhbm5lbChjaGlsZC5zdWJjaGFubmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5oYXNSZXBvcnRlZFRyYW5zaWVudEZhaWx1cmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heWJlRW50ZXJTdGlja3lUcmFuc2llbnRGYWlsdXJlTW9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuY3VycmVudFN1YmNoYW5uZWxJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydE5leHRTdWJjaGFubmVsQ29ubmVjdGluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoaWxkLnN1YmNoYW5uZWwuc3RhcnRDb25uZWN0aW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0TmV4dFN1YmNoYW5uZWxDb25uZWN0aW5nKHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY29ubmVjdGlvbkRlbGF5VGltZW91dCk7XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBjaGlsZF0gb2YgdGhpcy5jaGlsZHJlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViY2hhbm5lbFN0YXRlID0gY2hpbGQuc3ViY2hhbm5lbC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJjaGFubmVsU3RhdGUgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEUgfHxcbiAgICAgICAgICAgICAgICAgICAgc3ViY2hhbm5lbFN0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5DT05ORUNUSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRDb25uZWN0aW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heWJlRW50ZXJTdGlja3lUcmFuc2llbnRGYWlsdXJlTW9kZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYXZlIGEgc2luZ2xlIHN1YmNoYW5uZWwgaW4gdGhlIGBzdWJjaGFubmVsc2AgbGlzdCBzdGFydCBjb25uZWN0aW5nLlxuICAgICAqIEBwYXJhbSBzdWJjaGFubmVsSW5kZXggVGhlIGluZGV4IGludG8gdGhlIGBzdWJjaGFubmVsc2AgbGlzdC5cbiAgICAgKi9cbiAgICBzdGFydENvbm5lY3Rpbmcoc3ViY2hhbm5lbEluZGV4KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbm5lY3Rpb25EZWxheVRpbWVvdXQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdWJjaGFubmVsSW5kZXggPSBzdWJjaGFubmVsSW5kZXg7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuW3N1YmNoYW5uZWxJbmRleF0uc3ViY2hhbm5lbC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpID09PVxuICAgICAgICAgICAgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRSkge1xuICAgICAgICAgICAgdHJhY2UoJ1N0YXJ0IGNvbm5lY3RpbmcgdG8gc3ViY2hhbm5lbCB3aXRoIGFkZHJlc3MgJyArXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWJjaGFubmVsSW5kZXhdLnN1YmNoYW5uZWwuZ2V0QWRkcmVzcygpKTtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLmNoaWxkcmVuW3N1YmNoYW5uZWxJbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJjaGFubmVsLnN0YXJ0Q29ubmVjdGluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uRGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0TmV4dFN1YmNoYW5uZWxDb25uZWN0aW5nKHN1YmNoYW5uZWxJbmRleCArIDEpO1xuICAgICAgICB9LCBDT05ORUNUSU9OX0RFTEFZX0lOVEVSVkFMX01TKTtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5jb25uZWN0aW9uRGVsYXlUaW1lb3V0KS51bnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNsYXJlIHRoYXQgdGhlIHNwZWNpZmllZCBzdWJjaGFubmVsIHNob3VsZCBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuXG4gICAgICogVGhpcyBmdW5jdGlvbnMgdGhlIHNhbWUgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBzdWJjaGFubmVsIGlzIGEgbWVtYmVyIG9mXG4gICAgICogdGhpcy5jaGlsZHJlbiBhbmQgd2hldGhlciBpdCBpcyBlcXVhbCB0byB0aGlzLmN1cnJlbnRQaWNrLlxuICAgICAqIFByZXJlcXVpc2l0ZTogc3ViY2hhbm5lbC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpID09PSBSRUFEWS5cbiAgICAgKiBAcGFyYW0gc3ViY2hhbm5lbFxuICAgICAqL1xuICAgIHBpY2tTdWJjaGFubmVsKHN1YmNoYW5uZWwpIHtcbiAgICAgICAgdHJhY2UoJ1BpY2sgc3ViY2hhbm5lbCB3aXRoIGFkZHJlc3MgJyArIHN1YmNoYW5uZWwuZ2V0QWRkcmVzcygpKTtcbiAgICAgICAgdGhpcy5zdGlja3lUcmFuc2llbnRGYWlsdXJlTW9kZSA9IGZhbHNlO1xuICAgICAgICAvKiBSZWYgYmVmb3JlIHJlbW92ZUN1cnJlbnRQaWNrIGFuZCByZXNldFN1YmNoYW5uZWxMaXN0IHRvIGF2b2lkIHRoZVxuICAgICAgICAgKiByZWZjb3VudCBkcm9wcGluZyB0byAwIGR1cmluZyB0aGlzIHByb2Nlc3MuICovXG4gICAgICAgIHN1YmNoYW5uZWwucmVmKCk7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIuYWRkQ2hhbm5lbHpDaGlsZChzdWJjaGFubmVsLmdldENoYW5uZWx6UmVmKCkpO1xuICAgICAgICB0aGlzLnJlbW92ZUN1cnJlbnRQaWNrKCk7XG4gICAgICAgIHRoaXMucmVzZXRTdWJjaGFubmVsTGlzdCgpO1xuICAgICAgICBzdWJjaGFubmVsLmFkZENvbm5lY3Rpdml0eVN0YXRlTGlzdGVuZXIodGhpcy5zdWJjaGFubmVsU3RhdGVMaXN0ZW5lcik7XG4gICAgICAgIHN1YmNoYW5uZWwuYWRkSGVhbHRoU3RhdGVXYXRjaGVyKHRoaXMucGlja2VkU3ViY2hhbm5lbEhlYWx0aExpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGljayA9IHN1YmNoYW5uZWw7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbm5lY3Rpb25EZWxheVRpbWVvdXQpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFuZFJlcG9ydE5ld1N0YXRlKCk7XG4gICAgfVxuICAgIHVwZGF0ZVN0YXRlKG5ld1N0YXRlLCBwaWNrZXIsIGVycm9yTWVzc2FnZSkge1xuICAgICAgICB0cmFjZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZVt0aGlzLmN1cnJlbnRTdGF0ZV0gK1xuICAgICAgICAgICAgJyAtPiAnICtcbiAgICAgICAgICAgIGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW25ld1N0YXRlXSk7XG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIudXBkYXRlU3RhdGUobmV3U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgcmVzZXRTdWJjaGFubmVsTGlzdCgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAvKiBBbHdheXMgcmVtb2V2IHRoZSBjb25uZWN0aXZpdHkgc3RhdGUgbGlzdGVuZXIuIElmIHRoZSBzdWJjaGFubmVsIGlzXG4gICAgICAgICAgICAgICBnZXR0aW5nIHBpY2tlZCwgaXQgd2lsbCBiZSByZS1hZGRlZCB0aGVuLiAqL1xuICAgICAgICAgICAgY2hpbGQuc3ViY2hhbm5lbC5yZW1vdmVDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyKHRoaXMuc3ViY2hhbm5lbFN0YXRlTGlzdGVuZXIpO1xuICAgICAgICAgICAgLyogUmVmcyBhcmUgY291bnRlZCBpbmRlcGVuZGVudGx5IGZvciB0aGUgY2hpbGRyZW4gbGlzdCBhbmQgdGhlXG4gICAgICAgICAgICAgKiBjdXJyZW50UGljaywgc28gd2UgY2FsbCB1bnJlZiB3aGV0aGVyIG9yIG5vdCB0aGUgY2hpbGQgaXMgdGhlXG4gICAgICAgICAgICAgKiBjdXJyZW50UGljay4gQ2hhbm5lbHogY2hpbGQgcmVmZXJlbmNlcyBhcmUgYWxzbyByZWZjb3VudGVkLCBzb1xuICAgICAgICAgICAgICogcmVtb3ZlQ2hhbm5lbHpDaGlsZCBjYW4gYmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkuICovXG4gICAgICAgICAgICBjaGlsZC5zdWJjaGFubmVsLnVucmVmKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWxDb250cm9sSGVscGVyLnJlbW92ZUNoYW5uZWx6Q2hpbGQoY2hpbGQuc3ViY2hhbm5lbC5nZXRDaGFubmVselJlZigpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRTdWJjaGFubmVsSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGNvbm5lY3RUb0FkZHJlc3NMaXN0KGFkZHJlc3NMaXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHRyYWNlKCdjb25uZWN0VG9BZGRyZXNzTGlzdChbJyArIGFkZHJlc3NMaXN0Lm1hcChhZGRyZXNzID0+ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKShhZGRyZXNzKSkgKyAnXSknKTtcbiAgICAgICAgY29uc3QgbmV3Q2hpbGRyZW5MaXN0ID0gYWRkcmVzc0xpc3QubWFwKGFkZHJlc3MgPT4gKHtcbiAgICAgICAgICAgIHN1YmNoYW5uZWw6IHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIuY3JlYXRlU3ViY2hhbm5lbChhZGRyZXNzLCBvcHRpb25zKSxcbiAgICAgICAgICAgIGhhc1JlcG9ydGVkVHJhbnNpZW50RmFpbHVyZTogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICAgICAgZm9yIChjb25zdCB7IHN1YmNoYW5uZWwgfSBvZiBuZXdDaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgICAgIGlmIChzdWJjaGFubmVsLmdldENvbm5lY3Rpdml0eVN0YXRlKCkgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrU3ViY2hhbm5lbChzdWJjaGFubmVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyogUmVmIGVhY2ggc3ViY2hhbm5lbCBiZWZvcmUgcmVzZXR0aW5nIHRoZSBsaXN0LCB0byBlbnN1cmUgdGhhdFxuICAgICAgICAgKiBzdWJjaGFubmVscyBzaGFyZWQgYmV0d2VlbiB0aGUgbGlzdCBkb24ndCBkcm9wIHRvIDAgcmVmcyBkdXJpbmcgdGhlXG4gICAgICAgICAqIHRyYW5zaXRpb24uICovXG4gICAgICAgIGZvciAoY29uc3QgeyBzdWJjaGFubmVsIH0gb2YgbmV3Q2hpbGRyZW5MaXN0KSB7XG4gICAgICAgICAgICBzdWJjaGFubmVsLnJlZigpO1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsQ29udHJvbEhlbHBlci5hZGRDaGFubmVsekNoaWxkKHN1YmNoYW5uZWwuZ2V0Q2hhbm5lbHpSZWYoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFN1YmNoYW5uZWxMaXN0KCk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXdDaGlsZHJlbkxpc3Q7XG4gICAgICAgIGZvciAoY29uc3QgeyBzdWJjaGFubmVsIH0gb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgc3ViY2hhbm5lbC5hZGRDb25uZWN0aXZpdHlTdGF0ZUxpc3RlbmVyKHRoaXMuc3ViY2hhbm5lbFN0YXRlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGNoaWxkLnN1YmNoYW5uZWwuZ2V0Q29ubmVjdGl2aXR5U3RhdGUoKSA9PT1cbiAgICAgICAgICAgICAgICBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSkge1xuICAgICAgICAgICAgICAgIGNoaWxkLmhhc1JlcG9ydGVkVHJhbnNpZW50RmFpbHVyZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFydE5leHRTdWJjaGFubmVsQ29ubmVjdGluZygwKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBbmRSZXBvcnROZXdTdGF0ZSgpO1xuICAgIH1cbiAgICB1cGRhdGVBZGRyZXNzTGlzdChtYXliZUVuZHBvaW50TGlzdCwgbGJDb25maWcsIG9wdGlvbnMsIHJlc29sdXRpb25Ob3RlKSB7XG4gICAgICAgIGlmICghKGxiQ29uZmlnIGluc3RhbmNlb2YgUGlja0ZpcnN0TG9hZEJhbGFuY2luZ0NvbmZpZykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1heWJlRW5kcG9pbnRMaXN0Lm9rKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgdGhpcy5jdXJyZW50UGljayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkUsIG5ldyBwaWNrZXJfMS5VbmF2YWlsYWJsZVBpY2tlcihtYXliZUVuZHBvaW50TGlzdC5lcnJvciksIG1heWJlRW5kcG9pbnRMaXN0LmVycm9yLmRldGFpbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuZHBvaW50TGlzdCA9IG1heWJlRW5kcG9pbnRMaXN0LnZhbHVlO1xuICAgICAgICB0aGlzLnJlcG9ydEhlYWx0aFN0YXR1cyA9IG9wdGlvbnNbUkVQT1JUX0hFQUxUSF9TVEFUVVNfT1BUSU9OX05BTUVdO1xuICAgICAgICAvKiBQcmV2aW91c2x5LCBhbiB1cGRhdGUgd291bGQgYmUgZGlzY2FyZGVkIGlmIGl0IHdhcyBpZGVudGljYWwgdG8gdGhlXG4gICAgICAgICAqIHByZXZpb3VzIHVwZGF0ZSwgdG8gbWluaW1pemUgY2h1cm4uIE5vdyB0aGUgRE5TIHJlc29sdmVyIGlzXG4gICAgICAgICAqIHJhdGUtbGltaXRlZCwgc28gdGhhdCBpcyBsZXNzIG9mIGEgY29uY2Vybi4gKi9cbiAgICAgICAgaWYgKGxiQ29uZmlnLmdldFNodWZmbGVBZGRyZXNzTGlzdCgpKSB7XG4gICAgICAgICAgICBlbmRwb2ludExpc3QgPSBzaHVmZmxlZChlbmRwb2ludExpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhd0FkZHJlc3NMaXN0ID0gW10uY29uY2F0KC4uLmVuZHBvaW50TGlzdC5tYXAoZW5kcG9pbnQgPT4gZW5kcG9pbnQuYWRkcmVzc2VzKSk7XG4gICAgICAgIHRyYWNlKCd1cGRhdGVBZGRyZXNzTGlzdChbJyArIHJhd0FkZHJlc3NMaXN0Lm1hcChhZGRyZXNzID0+ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKShhZGRyZXNzKSkgKyAnXSknKTtcbiAgICAgICAgY29uc3QgYWRkcmVzc0xpc3QgPSBpbnRlcmxlYXZlQWRkcmVzc0ZhbWlsaWVzKHJhd0FkZHJlc3NMaXN0KTtcbiAgICAgICAgdGhpcy5sYXRlc3RBZGRyZXNzTGlzdCA9IGFkZHJlc3NMaXN0O1xuICAgICAgICB0aGlzLmxhdGVzdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmNvbm5lY3RUb0FkZHJlc3NMaXN0KGFkZHJlc3NMaXN0LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5sYXRlc3RSZXNvbHV0aW9uTm90ZSA9IHJlc29sdXRpb25Ob3RlO1xuICAgICAgICBpZiAocmF3QWRkcmVzc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9ICdObyBhZGRyZXNzZXMgcmVzb2x2ZWQnO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXRJZGxlKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGUgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEUgJiZcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0QWRkcmVzc0xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdFRvQWRkcmVzc0xpc3QodGhpcy5sYXRlc3RBZGRyZXNzTGlzdCwgdGhpcy5sYXRlc3RPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNldEJhY2tvZmYoKSB7XG4gICAgICAgIC8qIFRoZSBwaWNrIGZpcnN0IGxvYWQgYmFsYW5jZXIgZG9lcyBub3QgaGF2ZSBhIGNvbm5lY3Rpb24gYmFja29mZiwgc28gdGhpc1xuICAgICAgICAgKiBkb2VzIG5vdGhpbmcgKi9cbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yZXNldFN1YmNoYW5uZWxMaXN0KCk7XG4gICAgICAgIHRoaXMucmVtb3ZlQ3VycmVudFBpY2soKTtcbiAgICB9XG4gICAgZ2V0VHlwZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBUWVBFX05BTUU7XG4gICAgfVxufVxuZXhwb3J0cy5QaWNrRmlyc3RMb2FkQmFsYW5jZXIgPSBQaWNrRmlyc3RMb2FkQmFsYW5jZXI7XG5jb25zdCBMRUFGX0NPTkZJRyA9IG5ldyBQaWNrRmlyc3RMb2FkQmFsYW5jaW5nQ29uZmlnKGZhbHNlKTtcbi8qKlxuICogVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBsZWFmIGxvYWQgYmFsYW5jaW5nIG9wZXJhdGlvbnMgZm9yIGEgc2luZ2xlIGVuZHBvaW50LlxuICogSXQgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgUGlja0ZpcnN0TG9hZEJhbGFuY2VyIHdpdGggYSBkaWZmZXJlbnQgQVBJXG4gKiB0aGF0IG1vcmUgY2xvc2VseSByZWZsZWN0cyBob3cgaXQgd2lsbCBiZSB1c2VkIGFzIGEgbGVhZiBiYWxhbmNlci5cbiAqL1xuY2xhc3MgTGVhZkxvYWRCYWxhbmNlciB7XG4gICAgY29uc3RydWN0b3IoZW5kcG9pbnQsIGNoYW5uZWxDb250cm9sSGVscGVyLCBvcHRpb25zLCByZXNvbHV0aW9uTm90ZSkge1xuICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucmVzb2x1dGlvbk5vdGUgPSByZXNvbHV0aW9uTm90ZTtcbiAgICAgICAgdGhpcy5sYXRlc3RTdGF0ZSA9IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEU7XG4gICAgICAgIGNvbnN0IGNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXIgPSAoMCwgbG9hZF9iYWxhbmNlcl8xLmNyZWF0ZUNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXIpKGNoYW5uZWxDb250cm9sSGVscGVyLCB7XG4gICAgICAgICAgICB1cGRhdGVTdGF0ZTogKGNvbm5lY3Rpdml0eVN0YXRlLCBwaWNrZXIsIGVycm9yTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0U3RhdGUgPSBjb25uZWN0aXZpdHlTdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdFBpY2tlciA9IHBpY2tlcjtcbiAgICAgICAgICAgICAgICBjaGFubmVsQ29udHJvbEhlbHBlci51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlTdGF0ZSwgcGlja2VyLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGlja0ZpcnN0QmFsYW5jZXIgPSBuZXcgUGlja0ZpcnN0TG9hZEJhbGFuY2VyKGNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXIpO1xuICAgICAgICB0aGlzLmxhdGVzdFBpY2tlciA9IG5ldyBwaWNrZXJfMS5RdWV1ZVBpY2tlcih0aGlzLnBpY2tGaXJzdEJhbGFuY2VyKTtcbiAgICB9XG4gICAgc3RhcnRDb25uZWN0aW5nKCkge1xuICAgICAgICB0aGlzLnBpY2tGaXJzdEJhbGFuY2VyLnVwZGF0ZUFkZHJlc3NMaXN0KCgwLCBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbVZhbHVlKShbdGhpcy5lbmRwb2ludF0pLCBMRUFGX0NPTkZJRywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMpLCB7IFtSRVBPUlRfSEVBTFRIX1NUQVRVU19PUFRJT05fTkFNRV06IHRydWUgfSksIHRoaXMucmVzb2x1dGlvbk5vdGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIGVuZHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIExlYWZMb2FkQmFsYW5jZXIgdG8gYSBuZXdcbiAgICAgKiBlbmRwb2ludC4gRG9lcyBub3QgdHJpZ2dlciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgaWYgYSBjb25uZWN0aW9uXG4gICAgICogYXR0ZW1wdCBpcyBub3QgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiAgICAgKiBAcGFyYW0gbmV3RW5kcG9pbnRcbiAgICAgKi9cbiAgICB1cGRhdGVFbmRwb2ludChuZXdFbmRwb2ludCwgbmV3T3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmVuZHBvaW50ID0gbmV3RW5kcG9pbnQ7XG4gICAgICAgIGlmICh0aGlzLmxhdGVzdFN0YXRlICE9PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q29ubmVjdGluZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbm5lY3Rpdml0eVN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RTdGF0ZTtcbiAgICB9XG4gICAgZ2V0UGlja2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RQaWNrZXI7XG4gICAgfVxuICAgIGdldEVuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmRwb2ludDtcbiAgICB9XG4gICAgZXhpdElkbGUoKSB7XG4gICAgICAgIHRoaXMucGlja0ZpcnN0QmFsYW5jZXIuZXhpdElkbGUoKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5waWNrRmlyc3RCYWxhbmNlci5kZXN0cm95KCk7XG4gICAgfVxufVxuZXhwb3J0cy5MZWFmTG9hZEJhbGFuY2VyID0gTGVhZkxvYWRCYWxhbmNlcjtcbmZ1bmN0aW9uIHNldHVwKCkge1xuICAgICgwLCBsb2FkX2JhbGFuY2VyXzEucmVnaXN0ZXJMb2FkQmFsYW5jZXJUeXBlKShUWVBFX05BTUUsIFBpY2tGaXJzdExvYWRCYWxhbmNlciwgUGlja0ZpcnN0TG9hZEJhbGFuY2luZ0NvbmZpZyk7XG4gICAgKDAsIGxvYWRfYmFsYW5jZXJfMS5yZWdpc3RlckRlZmF1bHRMb2FkQmFsYW5jZXJUeXBlKShUWVBFX05BTUUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9hZC1iYWxhbmNlci1waWNrLWZpcnN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjQgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmlsZVdhdGNoZXJDZXJ0aWZpY2F0ZVByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcInV0aWxcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdjZXJ0aWZpY2F0ZV9wcm92aWRlcic7XG5mdW5jdGlvbiB0cmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCB0ZXh0KTtcbn1cbmNvbnN0IHJlYWRGaWxlUHJvbWlzZSA9ICgwLCB1dGlsXzEucHJvbWlzaWZ5KShmcy5yZWFkRmlsZSk7XG5jbGFzcyBGaWxlV2F0Y2hlckNlcnRpZmljYXRlUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5yZWZyZXNoVGltZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGVSZXN1bHRQcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXRlc3RDYVVwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jYUxpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5sYXRlc3RJZGVudGl0eVVwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pZGVudGl0eUxpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IG51bGw7XG4gICAgICAgIGlmICgoY29uZmlnLmNlcnRpZmljYXRlRmlsZSA9PT0gdW5kZWZpbmVkKSAhPT0gKGNvbmZpZy5wcml2YXRlS2V5RmlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjZXJ0aWZpY2F0ZUZpbGUgYW5kIHByaXZhdGVLZXlGaWxlIG11c3QgYmUgc2V0IG9yIHVuc2V0IHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5jZXJ0aWZpY2F0ZUZpbGUgPT09IHVuZGVmaW5lZCAmJiBjb25maWcuY2FDZXJ0aWZpY2F0ZUZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgb2YgY2VydGlmaWNhdGVGaWxlIGFuZCBjYUNlcnRpZmljYXRlRmlsZSBtdXN0IGJlIHNldCcpO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNlKCdGaWxlIHdhdGNoZXIgY29uc3RydWN0ZWQgd2l0aCBjb25maWcgJyArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xuICAgIH1cbiAgICB1cGRhdGVDZXJ0aWZpY2F0ZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbGVSZXN1bHRQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlUmVzdWx0UHJvbWlzZSA9IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5jZXJ0aWZpY2F0ZUZpbGUgPyByZWFkRmlsZVByb21pc2UodGhpcy5jb25maWcuY2VydGlmaWNhdGVGaWxlKSA6IFByb21pc2UucmVqZWN0KCksXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5wcml2YXRlS2V5RmlsZSA/IHJlYWRGaWxlUHJvbWlzZSh0aGlzLmNvbmZpZy5wcml2YXRlS2V5RmlsZSkgOiBQcm9taXNlLnJlamVjdCgpLFxuICAgICAgICAgICAgdGhpcy5jb25maWcuY2FDZXJ0aWZpY2F0ZUZpbGUgPyByZWFkRmlsZVByb21pc2UodGhpcy5jb25maWcuY2FDZXJ0aWZpY2F0ZUZpbGUpIDogUHJvbWlzZS5yZWplY3QoKVxuICAgICAgICBdKTtcbiAgICAgICAgdGhpcy5maWxlUmVzdWx0UHJvbWlzZS50aGVuKChbY2VydGlmaWNhdGVSZXN1bHQsIHByaXZhdGVLZXlSZXN1bHQsIGNhQ2VydGlmaWNhdGVSZXN1bHRdKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmcmVzaFRpbWVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhY2UoJ0ZpbGUgd2F0Y2hlciByZWFkIGNlcnRpZmljYXRlcyBjZXJ0aWZpY2F0ZSAnICsgY2VydGlmaWNhdGVSZXN1bHQuc3RhdHVzICsgJywgcHJpdmF0ZUtleSAnICsgcHJpdmF0ZUtleVJlc3VsdC5zdGF0dXMgKyAnLCBDQSBjZXJ0aWZpY2F0ZSAnICsgY2FDZXJ0aWZpY2F0ZVJlc3VsdC5zdGF0dXMpO1xuICAgICAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmZpbGVSZXN1bHRQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChjZXJ0aWZpY2F0ZVJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHByaXZhdGVLZXlSZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0SWRlbnRpdHlVcGRhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlOiBjZXJ0aWZpY2F0ZVJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZUtleTogcHJpdmF0ZUtleVJlc3VsdC52YWx1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdElkZW50aXR5VXBkYXRlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYUNlcnRpZmljYXRlUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdENhVXBkYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBjYUNlcnRpZmljYXRlOiBjYUNlcnRpZmljYXRlUmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0Q2FVcGRhdGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmlkZW50aXR5TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIodGhpcy5sYXRlc3RJZGVudGl0eVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuY2FMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcih0aGlzLmxhdGVzdENhVXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRyYWNlKCdGaWxlIHdhdGNoZXIgaW5pdGlhdGVkIGNlcnRpZmljYXRlIHVwZGF0ZScpO1xuICAgIH1cbiAgICBtYXliZVN0YXJ0V2F0Y2hpbmdGaWxlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlZnJlc2hUaW1lcikge1xuICAgICAgICAgICAgLyogUGVyZm9ybSB0aGUgZmlyc3QgcmVhZCBpbW1lZGlhdGVseSwgYnV0IG9ubHkgaWYgdGhlcmUgd2FzIG5vdCBhbHJlYWR5XG4gICAgICAgICAgICAgKiBhIHJlY2VudCByZWFkLCB0byBhdm9pZCByZWFkaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0gc2lnbmlmaWNhbnRseSBtb3JlXG4gICAgICAgICAgICAgKiBmcmVxdWVudGx5IHRoYW4gY29uZmlndXJlZCBpZiB0aGUgcHJvdmlkZXIgcXVpY2tseSBzd2l0Y2hlcyBiZXR3ZWVuXG4gICAgICAgICAgICAgKiB1c2VkIGFuZCB1bnVzZWQuICovXG4gICAgICAgICAgICBjb25zdCB0aW1lU2luY2VMYXN0VXBkYXRlID0gdGhpcy5sYXN0VXBkYXRlVGltZSA/IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSB0aGlzLmxhc3RVcGRhdGVUaW1lLmdldFRpbWUoKSA6IEluZmluaXR5O1xuICAgICAgICAgICAgaWYgKHRpbWVTaW5jZUxhc3RVcGRhdGUgPiB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWxNcykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2VydGlmaWNhdGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZVNpbmNlTGFzdFVwZGF0ZSA+IHRoaXMuY29uZmlnLnJlZnJlc2hJbnRlcnZhbE1zICogMikge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIG91dCBvbGQgdXBkYXRlcyBpZiB0aGV5IGFyZSBkZWZpbml0ZWx5IHN0YWxlXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RDYVVwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdElkZW50aXR5VXBkYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnVwZGF0ZUNlcnRpZmljYXRlcygpLCB0aGlzLmNvbmZpZy5yZWZyZXNoSW50ZXJ2YWxNcyk7XG4gICAgICAgICAgICB0cmFjZSgnRmlsZSB3YXRjaGVyIHN0YXJ0ZWQgd2F0Y2hpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXliZVN0b3BXYXRjaGluZ0ZpbGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jYUxpc3RlbmVycy5zaXplID09PSAwICYmIHRoaXMuaWRlbnRpdHlMaXN0ZW5lcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5maWxlUmVzdWx0UHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVmcmVzaFRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkQ2FDZXJ0aWZpY2F0ZUxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuY2FMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5tYXliZVN0YXJ0V2F0Y2hpbmdGaWxlcygpO1xuICAgICAgICBpZiAodGhpcy5sYXRlc3RDYVVwZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGxpc3RlbmVyLCB0aGlzLmxhdGVzdENhVXBkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVDYUNlcnRpZmljYXRlTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5jYUxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgICAgICB0aGlzLm1heWJlU3RvcFdhdGNoaW5nRmlsZXMoKTtcbiAgICB9XG4gICAgYWRkSWRlbnRpdHlDZXJ0aWZpY2F0ZUxpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuaWRlbnRpdHlMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy5tYXliZVN0YXJ0V2F0Y2hpbmdGaWxlcygpO1xuICAgICAgICBpZiAodGhpcy5sYXRlc3RJZGVudGl0eVVwZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGxpc3RlbmVyLCB0aGlzLmxhdGVzdElkZW50aXR5VXBkYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVJZGVudGl0eUNlcnRpZmljYXRlTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5pZGVudGl0eUxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgICAgICB0aGlzLm1heWJlU3RvcFdhdGNoaW5nRmlsZXMoKTtcbiAgICB9XG59XG5leHBvcnRzLkZpbGVXYXRjaGVyQ2VydGlmaWNhdGVQcm92aWRlciA9IEZpbGVXYXRjaGVyQ2VydGlmaWNhdGVQcm92aWRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNlcnRpZmljYXRlLXByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNVQkNIQU5ORUxfQVJHU19FWENMVURFX0tFWV9QUkVGSVggPSBleHBvcnRzLmNyZWF0ZUNlcnRpZmljYXRlUHJvdmlkZXJDaGFubmVsQ3JlZGVudGlhbHMgPSBleHBvcnRzLkZpbGVXYXRjaGVyQ2VydGlmaWNhdGVQcm92aWRlciA9IGV4cG9ydHMuY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlclNlcnZlckNyZWRlbnRpYWxzID0gZXhwb3J0cy5jcmVhdGVTZXJ2ZXJDcmVkZW50aWFsc1dpdGhJbnRlcmNlcHRvcnMgPSBleHBvcnRzLkJhc2VTdWJjaGFubmVsV3JhcHBlciA9IGV4cG9ydHMucmVnaXN0ZXJBZG1pblNlcnZpY2UgPSBleHBvcnRzLkZpbHRlclN0YWNrRmFjdG9yeSA9IGV4cG9ydHMuQmFzZUZpbHRlciA9IGV4cG9ydHMuc3RhdHVzT3JGcm9tRXJyb3IgPSBleHBvcnRzLnN0YXR1c09yRnJvbVZhbHVlID0gZXhwb3J0cy5QaWNrUmVzdWx0VHlwZSA9IGV4cG9ydHMuUXVldWVQaWNrZXIgPSBleHBvcnRzLlVuYXZhaWxhYmxlUGlja2VyID0gZXhwb3J0cy5DaGlsZExvYWRCYWxhbmNlckhhbmRsZXIgPSBleHBvcnRzLkVuZHBvaW50TWFwID0gZXhwb3J0cy5lbmRwb2ludEhhc0FkZHJlc3MgPSBleHBvcnRzLmVuZHBvaW50VG9TdHJpbmcgPSBleHBvcnRzLnN1YmNoYW5uZWxBZGRyZXNzVG9TdHJpbmcgPSBleHBvcnRzLkxlYWZMb2FkQmFsYW5jZXIgPSBleHBvcnRzLmlzTG9hZEJhbGFuY2VyTmFtZVJlZ2lzdGVyZWQgPSBleHBvcnRzLnBhcnNlTG9hZEJhbGFuY2luZ0NvbmZpZyA9IGV4cG9ydHMuc2VsZWN0TGJDb25maWdGcm9tTGlzdCA9IGV4cG9ydHMucmVnaXN0ZXJMb2FkQmFsYW5jZXJUeXBlID0gZXhwb3J0cy5jcmVhdGVDaGlsZENoYW5uZWxDb250cm9sSGVscGVyID0gZXhwb3J0cy5CYWNrb2ZmVGltZW91dCA9IGV4cG9ydHMucGFyc2VEdXJhdGlvbiA9IGV4cG9ydHMuZHVyYXRpb25Ub01zID0gZXhwb3J0cy5zcGxpdEhvc3RQb3J0ID0gZXhwb3J0cy51cmlUb1N0cmluZyA9IGV4cG9ydHMuQ0hBTk5FTF9BUkdTX0NPTkZJR19TRUxFQ1RPUl9LRVkgPSBleHBvcnRzLmNyZWF0ZVJlc29sdmVyID0gZXhwb3J0cy5yZWdpc3RlclJlc29sdmVyID0gZXhwb3J0cy5sb2cgPSBleHBvcnRzLnRyYWNlID0gdm9pZCAwO1xudmFyIGxvZ2dpbmdfMSA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9nZ2luZ18xLnRyYWNlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2dnaW5nXzEubG9nOyB9IH0pO1xudmFyIHJlc29sdmVyXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZ2lzdGVyUmVzb2x2ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmVyXzEucmVnaXN0ZXJSZXNvbHZlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlc29sdmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlcl8xLmNyZWF0ZVJlc29sdmVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ0hBTk5FTF9BUkdTX0NPTkZJR19TRUxFQ1RPUl9LRVlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmVyXzEuQ0hBTk5FTF9BUkdTX0NPTkZJR19TRUxFQ1RPUl9LRVk7IH0gfSk7XG52YXIgdXJpX3BhcnNlcl8xID0gcmVxdWlyZShcIi4vdXJpLXBhcnNlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVyaVRvU3RyaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1cmlfcGFyc2VyXzEudXJpVG9TdHJpbmc7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcGxpdEhvc3RQb3J0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1cmlfcGFyc2VyXzEuc3BsaXRIb3N0UG9ydDsgfSB9KTtcbnZhciBkdXJhdGlvbl8xID0gcmVxdWlyZShcIi4vZHVyYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkdXJhdGlvblRvTXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGR1cmF0aW9uXzEuZHVyYXRpb25Ub01zOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VEdXJhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZHVyYXRpb25fMS5wYXJzZUR1cmF0aW9uOyB9IH0pO1xudmFyIGJhY2tvZmZfdGltZW91dF8xID0gcmVxdWlyZShcIi4vYmFja29mZi10aW1lb3V0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmFja29mZlRpbWVvdXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhY2tvZmZfdGltZW91dF8xLkJhY2tvZmZUaW1lb3V0OyB9IH0pO1xudmFyIGxvYWRfYmFsYW5jZXJfMSA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDaGlsZENoYW5uZWxDb250cm9sSGVscGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2FkX2JhbGFuY2VyXzEuY3JlYXRlQ2hpbGRDaGFubmVsQ29udHJvbEhlbHBlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZ2lzdGVyTG9hZEJhbGFuY2VyVHlwZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9hZF9iYWxhbmNlcl8xLnJlZ2lzdGVyTG9hZEJhbGFuY2VyVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlbGVjdExiQ29uZmlnRnJvbUxpc3RcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvYWRfYmFsYW5jZXJfMS5zZWxlY3RMYkNvbmZpZ0Zyb21MaXN0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VMb2FkQmFsYW5jaW5nQ29uZmlnXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2FkX2JhbGFuY2VyXzEucGFyc2VMb2FkQmFsYW5jaW5nQ29uZmlnOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNMb2FkQmFsYW5jZXJOYW1lUmVnaXN0ZXJlZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9hZF9iYWxhbmNlcl8xLmlzTG9hZEJhbGFuY2VyTmFtZVJlZ2lzdGVyZWQ7IH0gfSk7XG52YXIgbG9hZF9iYWxhbmNlcl9waWNrX2ZpcnN0XzEgPSByZXF1aXJlKFwiLi9sb2FkLWJhbGFuY2VyLXBpY2stZmlyc3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMZWFmTG9hZEJhbGFuY2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsb2FkX2JhbGFuY2VyX3BpY2tfZmlyc3RfMS5MZWFmTG9hZEJhbGFuY2VyOyB9IH0pO1xudmFyIHN1YmNoYW5uZWxfYWRkcmVzc18xID0gcmVxdWlyZShcIi4vc3ViY2hhbm5lbC1hZGRyZXNzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3ViY2hhbm5lbEFkZHJlc3NUb1N0cmluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViY2hhbm5lbF9hZGRyZXNzXzEuc3ViY2hhbm5lbEFkZHJlc3NUb1N0cmluZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVuZHBvaW50VG9TdHJpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmNoYW5uZWxfYWRkcmVzc18xLmVuZHBvaW50VG9TdHJpbmc7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbmRwb2ludEhhc0FkZHJlc3NcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmNoYW5uZWxfYWRkcmVzc18xLmVuZHBvaW50SGFzQWRkcmVzczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkVuZHBvaW50TWFwXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJjaGFubmVsX2FkZHJlc3NfMS5FbmRwb2ludE1hcDsgfSB9KTtcbnZhciBsb2FkX2JhbGFuY2VyX2NoaWxkX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXItY2hpbGQtaGFuZGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNoaWxkTG9hZEJhbGFuY2VySGFuZGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9hZF9iYWxhbmNlcl9jaGlsZF9oYW5kbGVyXzEuQ2hpbGRMb2FkQmFsYW5jZXJIYW5kbGVyOyB9IH0pO1xudmFyIHBpY2tlcl8xID0gcmVxdWlyZShcIi4vcGlja2VyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5hdmFpbGFibGVQaWNrZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUXVldWVQaWNrZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBpY2tlcl8xLlF1ZXVlUGlja2VyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGlja1Jlc3VsdFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBpY2tlcl8xLlBpY2tSZXN1bHRUeXBlOyB9IH0pO1xudmFyIGNhbGxfaW50ZXJmYWNlXzEgPSByZXF1aXJlKFwiLi9jYWxsLWludGVyZmFjZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YXR1c09yRnJvbVZhbHVlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbVZhbHVlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RhdHVzT3JGcm9tRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxfaW50ZXJmYWNlXzEuc3RhdHVzT3JGcm9tRXJyb3I7IH0gfSk7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKFwiLi9maWx0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNlRmlsdGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmaWx0ZXJfMS5CYXNlRmlsdGVyOyB9IH0pO1xudmFyIGZpbHRlcl9zdGFja18xID0gcmVxdWlyZShcIi4vZmlsdGVyLXN0YWNrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlsdGVyU3RhY2tGYWN0b3J5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmaWx0ZXJfc3RhY2tfMS5GaWx0ZXJTdGFja0ZhY3Rvcnk7IH0gfSk7XG52YXIgYWRtaW5fMSA9IHJlcXVpcmUoXCIuL2FkbWluXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnaXN0ZXJBZG1pblNlcnZpY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFkbWluXzEucmVnaXN0ZXJBZG1pblNlcnZpY2U7IH0gfSk7XG52YXIgc3ViY2hhbm5lbF9pbnRlcmZhY2VfMSA9IHJlcXVpcmUoXCIuL3N1YmNoYW5uZWwtaW50ZXJmYWNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmFzZVN1YmNoYW5uZWxXcmFwcGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJjaGFubmVsX2ludGVyZmFjZV8xLkJhc2VTdWJjaGFubmVsV3JhcHBlcjsgfSB9KTtcbnZhciBzZXJ2ZXJfY3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1jcmVkZW50aWFsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlcnZlckNyZWRlbnRpYWxzV2l0aEludGVyY2VwdG9yc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmVyX2NyZWRlbnRpYWxzXzEuY3JlYXRlU2VydmVyQ3JlZGVudGlhbHNXaXRoSW50ZXJjZXB0b3JzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlclNlcnZlckNyZWRlbnRpYWxzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfY3JlZGVudGlhbHNfMS5jcmVhdGVDZXJ0aWZpY2F0ZVByb3ZpZGVyU2VydmVyQ3JlZGVudGlhbHM7IH0gfSk7XG52YXIgY2VydGlmaWNhdGVfcHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL2NlcnRpZmljYXRlLXByb3ZpZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlsZVdhdGNoZXJDZXJ0aWZpY2F0ZVByb3ZpZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjZXJ0aWZpY2F0ZV9wcm92aWRlcl8xLkZpbGVXYXRjaGVyQ2VydGlmaWNhdGVQcm92aWRlcjsgfSB9KTtcbnZhciBjaGFubmVsX2NyZWRlbnRpYWxzXzEgPSByZXF1aXJlKFwiLi9jaGFubmVsLWNyZWRlbnRpYWxzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2VydGlmaWNhdGVQcm92aWRlckNoYW5uZWxDcmVkZW50aWFsc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hhbm5lbF9jcmVkZW50aWFsc18xLmNyZWF0ZUNlcnRpZmljYXRlUHJvdmlkZXJDaGFubmVsQ3JlZGVudGlhbHM7IH0gfSk7XG52YXIgaW50ZXJuYWxfY2hhbm5lbF8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtY2hhbm5lbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNVQkNIQU5ORUxfQVJHU19FWENMVURFX0tFWV9QUkVGSVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVybmFsX2NoYW5uZWxfMS5TVUJDSEFOTkVMX0FSR1NfRVhDTFVERV9LRVlfUFJFRklYOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwZXJpbWVudGFsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMTkgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cCA9IHNldHVwO1xuY29uc3QgcmVzb2x2ZXJfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVyXCIpO1xuY29uc3QgY2FsbF9pbnRlcmZhY2VfMSA9IHJlcXVpcmUoXCIuL2NhbGwtaW50ZXJmYWNlXCIpO1xuY2xhc3MgVWRzUmVzb2x2ZXIge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgbGlzdGVuZXIsIGNoYW5uZWxPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICAgICAgdGhpcy5oYXNSZXR1cm5lZFJlc3VsdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IFtdO1xuICAgICAgICBsZXQgcGF0aDtcbiAgICAgICAgaWYgKHRhcmdldC5hdXRob3JpdHkgPT09ICcnKSB7XG4gICAgICAgICAgICBwYXRoID0gJy8nICsgdGFyZ2V0LnBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoID0gdGFyZ2V0LnBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPSBbeyBhZGRyZXNzZXM6IFt7IHBhdGggfV0gfV07XG4gICAgfVxuICAgIHVwZGF0ZVJlc29sdXRpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZXR1cm5lZFJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXR1cm5lZFJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKHRoaXMubGlzdGVuZXIsICgwLCBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbVZhbHVlKSh0aGlzLmVuZHBvaW50cyksIHt9LCBudWxsLCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oYXNSZXR1cm5lZFJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RGVmYXVsdEF1dGhvcml0eSh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuICdsb2NhbGhvc3QnO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldHVwKCkge1xuICAgICgwLCByZXNvbHZlcl8xLnJlZ2lzdGVyUmVzb2x2ZXIpKCd1bml4JywgVWRzUmVzb2x2ZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZXItdWRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjEgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cCA9IHNldHVwO1xuY29uc3QgbmV0XzEgPSByZXF1aXJlKFwibmV0XCIpO1xuY29uc3QgY2FsbF9pbnRlcmZhY2VfMSA9IHJlcXVpcmUoXCIuL2NhbGwtaW50ZXJmYWNlXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5jb25zdCByZXNvbHZlcl8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZXJcIik7XG5jb25zdCBzdWJjaGFubmVsX2FkZHJlc3NfMSA9IHJlcXVpcmUoXCIuL3N1YmNoYW5uZWwtYWRkcmVzc1wiKTtcbmNvbnN0IHVyaV9wYXJzZXJfMSA9IHJlcXVpcmUoXCIuL3VyaS1wYXJzZXJcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IFRSQUNFUl9OQU1FID0gJ2lwX3Jlc29sdmVyJztcbmZ1bmN0aW9uIHRyYWNlKHRleHQpIHtcbiAgICBsb2dnaW5nLnRyYWNlKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgVFJBQ0VSX05BTUUsIHRleHQpO1xufVxuY29uc3QgSVBWNF9TQ0hFTUUgPSAnaXB2NCc7XG5jb25zdCBJUFY2X1NDSEVNRSA9ICdpcHY2Jztcbi8qKlxuICogVGhlIGRlZmF1bHQgVENQIHBvcnQgdG8gY29ubmVjdCB0byBpZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gdGhlIHRhcmdldC5cbiAqL1xuY29uc3QgREVGQVVMVF9QT1JUID0gNDQzO1xuY2xhc3MgSXBSZXNvbHZlciB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0LCBsaXN0ZW5lciwgY2hhbm5lbE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgICAgIHRoaXMuZW5kcG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmhhc1JldHVybmVkUmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIHRyYWNlKCdSZXNvbHZlciBjb25zdHJ1Y3RlZCBmb3IgdGFyZ2V0ICcgKyAoMCwgdXJpX3BhcnNlcl8xLnVyaVRvU3RyaW5nKSh0YXJnZXQpKTtcbiAgICAgICAgY29uc3QgYWRkcmVzc2VzID0gW107XG4gICAgICAgIGlmICghKHRhcmdldC5zY2hlbWUgPT09IElQVjRfU0NIRU1FIHx8IHRhcmdldC5zY2hlbWUgPT09IElQVjZfU0NIRU1FKSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogYFVucmVjb2duaXplZCBzY2hlbWUgJHt0YXJnZXQuc2NoZW1lfSBpbiBJUCByZXNvbHZlcmAsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGhMaXN0ID0gdGFyZ2V0LnBhdGguc3BsaXQoJywnKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBob3N0UG9ydCA9ICgwLCB1cmlfcGFyc2VyXzEuc3BsaXRIb3N0UG9ydCkocGF0aCk7XG4gICAgICAgICAgICBpZiAoaG9zdFBvcnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb25zdGFudHNfMS5TdGF0dXMuVU5BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gcGFyc2UgJHt0YXJnZXQuc2NoZW1lfSBhZGRyZXNzICR7cGF0aH1gLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbmV3IG1ldGFkYXRhXzEuTWV0YWRhdGEoKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGFyZ2V0LnNjaGVtZSA9PT0gSVBWNF9TQ0hFTUUgJiYgISgwLCBuZXRfMS5pc0lQdjQpKGhvc3RQb3J0Lmhvc3QpKSB8fFxuICAgICAgICAgICAgICAgICh0YXJnZXQuc2NoZW1lID09PSBJUFY2X1NDSEVNRSAmJiAhKDAsIG5ldF8xLmlzSVB2NikoaG9zdFBvcnQuaG9zdCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29uc3RhbnRzXzEuU3RhdHVzLlVOQVZBSUxBQkxFLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHBhcnNlICR7dGFyZ2V0LnNjaGVtZX0gYWRkcmVzcyAke3BhdGh9YCxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5ldyBtZXRhZGF0YV8xLk1ldGFkYXRhKCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRyZXNzZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdFBvcnQuaG9zdCxcbiAgICAgICAgICAgICAgICBwb3J0OiAoX2EgPSBob3N0UG9ydC5wb3J0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1BPUlQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IGFkZHJlc3Nlcy5tYXAoYWRkcmVzcyA9PiAoeyBhZGRyZXNzZXM6IFthZGRyZXNzXSB9KSk7XG4gICAgICAgIHRyYWNlKCdQYXJzZWQgJyArIHRhcmdldC5zY2hlbWUgKyAnIGFkZHJlc3MgbGlzdCAnICsgYWRkcmVzc2VzLm1hcChzdWJjaGFubmVsX2FkZHJlc3NfMS5zdWJjaGFubmVsQWRkcmVzc1RvU3RyaW5nKSk7XG4gICAgfVxuICAgIHVwZGF0ZVJlc29sdXRpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZXR1cm5lZFJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXR1cm5lZFJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyKCgwLCBjYWxsX2ludGVyZmFjZV8xLnN0YXR1c09yRnJvbUVycm9yKSh0aGlzLmVycm9yKSwge30sIG51bGwsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIoKDAsIGNhbGxfaW50ZXJmYWNlXzEuc3RhdHVzT3JGcm9tVmFsdWUpKHRoaXMuZW5kcG9pbnRzKSwge30sIG51bGwsICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmhhc1JldHVybmVkUmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZWZhdWx0QXV0aG9yaXR5KHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnBhdGguc3BsaXQoJywnKVswXTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZXR1cCgpIHtcbiAgICAoMCwgcmVzb2x2ZXJfMS5yZWdpc3RlclJlc29sdmVyKShJUFY0X1NDSEVNRSwgSXBSZXNvbHZlcik7XG4gICAgKDAsIHJlc29sdmVyXzEucmVnaXN0ZXJSZXNvbHZlcikoSVBWNl9TQ0hFTUUsIElwUmVzb2x2ZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZXItaXAuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAxOSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Sb3VuZFJvYmluTG9hZEJhbGFuY2VyID0gdm9pZCAwO1xuZXhwb3J0cy5zZXR1cCA9IHNldHVwO1xuY29uc3QgbG9hZF9iYWxhbmNlcl8xID0gcmVxdWlyZShcIi4vbG9hZC1iYWxhbmNlclwiKTtcbmNvbnN0IGNvbm5lY3Rpdml0eV9zdGF0ZV8xID0gcmVxdWlyZShcIi4vY29ubmVjdGl2aXR5LXN0YXRlXCIpO1xuY29uc3QgcGlja2VyXzEgPSByZXF1aXJlKFwiLi9waWNrZXJcIik7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9hZGRyZXNzXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWFkZHJlc3NcIik7XG5jb25zdCBsb2FkX2JhbGFuY2VyX3BpY2tfZmlyc3RfMSA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXItcGljay1maXJzdFwiKTtcbmNvbnN0IFRSQUNFUl9OQU1FID0gJ3JvdW5kX3JvYmluJztcbmZ1bmN0aW9uIHRyYWNlKHRleHQpIHtcbiAgICBsb2dnaW5nLnRyYWNlKGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eS5ERUJVRywgVFJBQ0VSX05BTUUsIHRleHQpO1xufVxuY29uc3QgVFlQRV9OQU1FID0gJ3JvdW5kX3JvYmluJztcbmNsYXNzIFJvdW5kUm9iaW5Mb2FkQmFsYW5jaW5nQ29uZmlnIHtcbiAgICBnZXRMb2FkQmFsYW5jZXJOYW1lKCkge1xuICAgICAgICByZXR1cm4gVFlQRV9OQU1FO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIHRvSnNvbk9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtUWVBFX05BTUVdOiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzdGF0aWMgY3JlYXRlRnJvbUpzb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBuZXcgUm91bmRSb2JpbkxvYWRCYWxhbmNpbmdDb25maWcoKTtcbiAgICB9XG59XG5jbGFzcyBSb3VuZFJvYmluUGlja2VyIHtcbiAgICBjb25zdHJ1Y3RvcihjaGlsZHJlbiwgbmV4dEluZGV4ID0gMCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIHRoaXMubmV4dEluZGV4ID0gbmV4dEluZGV4O1xuICAgIH1cbiAgICBwaWNrKHBpY2tBcmdzKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkUGlja2VyID0gdGhpcy5jaGlsZHJlblt0aGlzLm5leHRJbmRleF0ucGlja2VyO1xuICAgICAgICB0aGlzLm5leHRJbmRleCA9ICh0aGlzLm5leHRJbmRleCArIDEpICUgdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHJldHVybiBjaGlsZFBpY2tlci5waWNrKHBpY2tBcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgd2hhdCB0aGUgbmV4dCBzdWJjaGFubmVsIHJldHVybmVkIHdvdWxkIGJlLiBVc2VkIGJ5IHRoZSBsb2FkXG4gICAgICogYmFsYW5jZXIgaW1wbGVtZW50YXRpb24gdG8gcHJlc2VydmUgdGhpcyBwYXJ0IG9mIHRoZSBwaWNrZXIgc3RhdGUgaWZcbiAgICAgKiBwb3NzaWJsZSB3aGVuIGEgc3ViY2hhbm5lbCBjb25uZWN0cyBvciBkaXNjb25uZWN0cy5cbiAgICAgKi9cbiAgICBwZWVrTmV4dEVuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLm5leHRJbmRleF0uZW5kcG9pbnQ7XG4gICAgfVxufVxuZnVuY3Rpb24gcm90YXRlQXJyYXkobGlzdCwgc3RhcnRJbmRleCkge1xuICAgIHJldHVybiBbLi4ubGlzdC5zbGljZShzdGFydEluZGV4KSwgLi4ubGlzdC5zbGljZSgwLCBzdGFydEluZGV4KV07XG59XG5jbGFzcyBSb3VuZFJvYmluTG9hZEJhbGFuY2VyIHtcbiAgICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udHJvbEhlbHBlcikge1xuICAgICAgICB0aGlzLmNoYW5uZWxDb250cm9sSGVscGVyID0gY2hhbm5lbENvbnRyb2xIZWxwZXI7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5JRExFO1xuICAgICAgICB0aGlzLmN1cnJlbnRSZWFkeVBpY2tlciA9IG51bGw7XG4gICAgICAgIHRoaXMudXBkYXRlc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRDaGFubmVsQ29udHJvbEhlbHBlciA9ICgwLCBsb2FkX2JhbGFuY2VyXzEuY3JlYXRlQ2hpbGRDaGFubmVsQ29udHJvbEhlbHBlcikoY2hhbm5lbENvbnRyb2xIZWxwZXIsIHtcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiAoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgbmFtZSByZXNvbHV0aW9uIGlzIHJlcXVlc3RlZCBhZ2FpbiBhZnRlciBhY3RpdmVcbiAgICAgICAgICAgICAgICAgKiBjb25uZWN0aW9ucyBhcmUgZHJvcHBlZC4gVGhpcyBpcyBtb3JlIGFnZ3Jlc3NpdmUgdGhhbiBuZWNlc3NhcnkgdG9cbiAgICAgICAgICAgICAgICAgKiBhY2NvbXBsaXNoIHRoYXQsIHNvIHdlIGFyZSBjb3VudGluZyBvbiByZXNvbHZlcnMgdG8gaGF2ZVxuICAgICAgICAgICAgICAgICAqIHJlYXNvbmFibGUgcmF0ZSBsaW1pdHMuICovXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSAmJiBjb25uZWN0aXZpdHlTdGF0ZSAhPT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsQ29udHJvbEhlbHBlci5yZXF1ZXN0UmVyZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb3VudENoaWxkcmVuV2l0aFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpID09PSBzdGF0ZSlcbiAgICAgICAgICAgIC5sZW5ndGg7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUFuZFVwZGF0ZVN0YXRlKCkge1xuICAgICAgICBpZiAodGhpcy51cGRhdGVzUGF1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY291bnRDaGlsZHJlbldpdGhTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCByZWFkeUNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gY2hpbGQuZ2V0Q29ubmVjdGl2aXR5U3RhdGUoKSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpO1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRSZWFkeVBpY2tlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQaWNrZWRFbmRwb2ludCA9IHRoaXMuY3VycmVudFJlYWR5UGlja2VyLnBlZWtOZXh0RW5kcG9pbnQoKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHJlYWR5Q2hpbGRyZW4uZmluZEluZGV4KGNoaWxkID0+ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5lbmRwb2ludEVxdWFsKShjaGlsZC5nZXRFbmRwb2ludCgpLCBuZXh0UGlja2VkRW5kcG9pbnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZLCBuZXcgUm91bmRSb2JpblBpY2tlcihyZWFkeUNoaWxkcmVuLm1hcChjaGlsZCA9PiAoe1xuICAgICAgICAgICAgICAgIGVuZHBvaW50OiBjaGlsZC5nZXRFbmRwb2ludCgpLFxuICAgICAgICAgICAgICAgIHBpY2tlcjogY2hpbGQuZ2V0UGlja2VyKCksXG4gICAgICAgICAgICB9KSksIGluZGV4KSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb3VudENoaWxkcmVuV2l0aFN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLkNPTk5FQ1RJTkcpID4gMCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5DT05ORUNUSU5HLCBuZXcgcGlja2VyXzEuUXVldWVQaWNrZXIodGhpcyksIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY291bnRDaGlsZHJlbldpdGhTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgcm91bmRfcm9iaW46IE5vIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIExhc3QgZXJyb3I6ICR7dGhpcy5sYXN0RXJyb3J9YDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkUsIG5ldyBwaWNrZXJfMS5VbmF2YWlsYWJsZVBpY2tlcih7XG4gICAgICAgICAgICAgICAgZGV0YWlsczogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgfSksIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEUsIG5ldyBwaWNrZXJfMS5RdWV1ZVBpY2tlcih0aGlzKSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogcm91bmRfcm9iaW4gc2hvdWxkIGtlZXAgYWxsIGNoaWxkcmVuIGNvbm5lY3RlZCwgdGhpcyBpcyBob3cgd2UgZG8gdGhhdC5cbiAgICAgICAgICogV2UgY2FuJ3QgZG8gdGhpcyBtb3JlIGVmZmljaWVudGx5IGluIHRoZSBpbmRpdmlkdWFsIGNoaWxkJ3MgdXBkYXRlU3RhdGVcbiAgICAgICAgICogY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB3aGljaCBjaGlsZCB0aGUgc3RhdGVcbiAgICAgICAgICogY2hhbmdlIGlzIGFzc29jaWF0ZWQgd2l0aC4gKi9cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuZ2V0Q29ubmVjdGl2aXR5U3RhdGUoKSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRSkge1xuICAgICAgICAgICAgICAgIGNoaWxkLmV4aXRJZGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlU3RhdGUobmV3U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRyYWNlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW3RoaXMuY3VycmVudFN0YXRlXSArXG4gICAgICAgICAgICAnIC0+ICcgK1xuICAgICAgICAgICAgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbbmV3U3RhdGVdKTtcbiAgICAgICAgaWYgKG5ld1N0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVhZHlQaWNrZXIgPSBwaWNrZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWFkeVBpY2tlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29udHJvbEhlbHBlci51cGRhdGVTdGF0ZShuZXdTdGF0ZSwgcGlja2VyLCBlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXNldFN1YmNoYW5uZWxMaXN0KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNoaWxkLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIHVwZGF0ZUFkZHJlc3NMaXN0KG1heWJlRW5kcG9pbnRMaXN0LCBsYkNvbmZpZywgb3B0aW9ucywgcmVzb2x1dGlvbk5vdGUpIHtcbiAgICAgICAgaWYgKCEobGJDb25maWcgaW5zdGFuY2VvZiBSb3VuZFJvYmluTG9hZEJhbGFuY2luZ0NvbmZpZykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1heWJlRW5kcG9pbnRMaXN0Lm9rKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlRSQU5TSUVOVF9GQUlMVVJFLCBuZXcgcGlja2VyXzEuVW5hdmFpbGFibGVQaWNrZXIobWF5YmVFbmRwb2ludExpc3QuZXJyb3IpLCBtYXliZUVuZHBvaW50TGlzdC5lcnJvci5kZXRhaWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAoTWF0aC5yYW5kb20oKSAqIG1heWJlRW5kcG9pbnRMaXN0LnZhbHVlLmxlbmd0aCkgfCAwO1xuICAgICAgICBjb25zdCBlbmRwb2ludExpc3QgPSByb3RhdGVBcnJheShtYXliZUVuZHBvaW50TGlzdC52YWx1ZSwgc3RhcnRJbmRleCk7XG4gICAgICAgIHRoaXMucmVzZXRTdWJjaGFubmVsTGlzdCgpO1xuICAgICAgICBpZiAoZW5kcG9pbnRMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYE5vIGFkZHJlc3NlcyByZXNvbHZlZC4gUmVzb2x1dGlvbiBub3RlOiAke3Jlc29sdXRpb25Ob3RlfWA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlRSQU5TSUVOVF9GQUlMVVJFLCBuZXcgcGlja2VyXzEuVW5hdmFpbGFibGVQaWNrZXIoeyBkZXRhaWxzOiBlcnJvck1lc3NhZ2UgfSksIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2UoJ0Nvbm5lY3QgdG8gZW5kcG9pbnQgbGlzdCAnICsgZW5kcG9pbnRMaXN0Lm1hcChzdWJjaGFubmVsX2FkZHJlc3NfMS5lbmRwb2ludFRvU3RyaW5nKSk7XG4gICAgICAgIHRoaXMudXBkYXRlc1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBlbmRwb2ludExpc3QubWFwKGVuZHBvaW50ID0+IG5ldyBsb2FkX2JhbGFuY2VyX3BpY2tfZmlyc3RfMS5MZWFmTG9hZEJhbGFuY2VyKGVuZHBvaW50LCB0aGlzLmNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXIsIG9wdGlvbnMsIHJlc29sdXRpb25Ob3RlKSk7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgY2hpbGQuc3RhcnRDb25uZWN0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVzUGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGV4aXRJZGxlKCkge1xuICAgICAgICAvKiBUaGUgcm91bmRfcm9iaW4gTEIgcG9saWN5IGlzIG9ubHkgaW4gdGhlIElETEUgc3RhdGUgaWYgaXQgaGFzIG5vXG4gICAgICAgICAqIGFkZHJlc3NlcyB0byB0cnkgdG8gY29ubmVjdCB0byBhbmQgaXQgaGFzIG5vIHBpY2tlZCBzdWJjaGFubmVsLlxuICAgICAgICAgKiBJbiB0aGF0IGNhc2UsIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgYWN0aW9uIHRoYXQgY2FuIGJlIHRha2VuIGhlcmUuICovXG4gICAgfVxuICAgIHJlc2V0QmFja29mZigpIHtcbiAgICAgICAgLy8gVGhpcyBMQiBwb2xpY3kgaGFzIG5vIGJhY2tvZmYgdG8gcmVzZXRcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yZXNldFN1YmNoYW5uZWxMaXN0KCk7XG4gICAgfVxuICAgIGdldFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gVFlQRV9OQU1FO1xuICAgIH1cbn1cbmV4cG9ydHMuUm91bmRSb2JpbkxvYWRCYWxhbmNlciA9IFJvdW5kUm9iaW5Mb2FkQmFsYW5jZXI7XG5mdW5jdGlvbiBzZXR1cCgpIHtcbiAgICAoMCwgbG9hZF9iYWxhbmNlcl8xLnJlZ2lzdGVyTG9hZEJhbGFuY2VyVHlwZSkoVFlQRV9OQU1FLCBSb3VuZFJvYmluTG9hZEJhbGFuY2VyLCBSb3VuZFJvYmluTG9hZEJhbGFuY2luZ0NvbmZpZyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2FkLWJhbGFuY2VyLXJvdW5kLXJvYmluLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IDIwMjIgZ1JQQyBhdXRob3JzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNlciA9IGV4cG9ydHMuT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNpbmdDb25maWcgPSB2b2lkIDA7XG5leHBvcnRzLnNldHVwID0gc2V0dXA7XG5jb25zdCBjb25uZWN0aXZpdHlfc3RhdGVfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eS1zdGF0ZVwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgZHVyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uXCIpO1xuY29uc3QgZXhwZXJpbWVudGFsXzEgPSByZXF1aXJlKFwiLi9leHBlcmltZW50YWxcIik7XG5jb25zdCBsb2FkX2JhbGFuY2VyXzEgPSByZXF1aXJlKFwiLi9sb2FkLWJhbGFuY2VyXCIpO1xuY29uc3QgbG9hZF9iYWxhbmNlcl9jaGlsZF9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9sb2FkLWJhbGFuY2VyLWNoaWxkLWhhbmRsZXJcIik7XG5jb25zdCBwaWNrZXJfMSA9IHJlcXVpcmUoXCIuL3BpY2tlclwiKTtcbmNvbnN0IHN1YmNoYW5uZWxfYWRkcmVzc18xID0gcmVxdWlyZShcIi4vc3ViY2hhbm5lbC1hZGRyZXNzXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9pbnRlcmZhY2VfMSA9IHJlcXVpcmUoXCIuL3N1YmNoYW5uZWwtaW50ZXJmYWNlXCIpO1xuY29uc3QgbG9nZ2luZyA9IHJlcXVpcmUoXCIuL2xvZ2dpbmdcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICdvdXRsaWVyX2RldGVjdGlvbic7XG5mdW5jdGlvbiB0cmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCB0ZXh0KTtcbn1cbmNvbnN0IFRZUEVfTkFNRSA9ICdvdXRsaWVyX2RldGVjdGlvbic7XG5jb25zdCBPVVRMSUVSX0RFVEVDVElPTl9FTkFCTEVEID0gKChfYSA9IHByb2Nlc3MuZW52LkdSUENfRVhQRVJJTUVOVEFMX0VOQUJMRV9PVVRMSUVSX0RFVEVDVElPTikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ3RydWUnKSA9PT0gJ3RydWUnO1xuY29uc3QgZGVmYXVsdFN1Y2Nlc3NSYXRlRWplY3Rpb25Db25maWcgPSB7XG4gICAgc3RkZXZfZmFjdG9yOiAxOTAwLFxuICAgIGVuZm9yY2VtZW50X3BlcmNlbnRhZ2U6IDEwMCxcbiAgICBtaW5pbXVtX2hvc3RzOiA1LFxuICAgIHJlcXVlc3Rfdm9sdW1lOiAxMDAsXG59O1xuY29uc3QgZGVmYXVsdEZhaWx1cmVQZXJjZW50YWdlRWplY3Rpb25Db25maWcgPSB7XG4gICAgdGhyZXNob2xkOiA4NSxcbiAgICBlbmZvcmNlbWVudF9wZXJjZW50YWdlOiAxMDAsXG4gICAgbWluaW11bV9ob3N0czogNSxcbiAgICByZXF1ZXN0X3ZvbHVtZTogNTAsXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVGaWVsZFR5cGUob2JqLCBmaWVsZE5hbWUsIGV4cGVjdGVkVHlwZSwgb2JqZWN0TmFtZSkge1xuICAgIGlmIChmaWVsZE5hbWUgaW4gb2JqICYmXG4gICAgICAgIG9ialtmaWVsZE5hbWVdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIG9ialtmaWVsZE5hbWVdICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgY29uc3QgZnVsbEZpZWxkTmFtZSA9IG9iamVjdE5hbWUgPyBgJHtvYmplY3ROYW1lfS4ke2ZpZWxkTmFtZX1gIDogZmllbGROYW1lO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG91dGxpZXIgZGV0ZWN0aW9uIGNvbmZpZyAke2Z1bGxGaWVsZE5hbWV9IHBhcnNlIGVycm9yOiBleHBlY3RlZCAke2V4cGVjdGVkVHlwZX0sIGdvdCAke3R5cGVvZiBvYmpbZmllbGROYW1lXX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVBvc2l0aXZlRHVyYXRpb24ob2JqLCBmaWVsZE5hbWUsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBmdWxsRmllbGROYW1lID0gb2JqZWN0TmFtZSA/IGAke29iamVjdE5hbWV9LiR7ZmllbGROYW1lfWAgOiBmaWVsZE5hbWU7XG4gICAgaWYgKGZpZWxkTmFtZSBpbiBvYmogJiYgb2JqW2ZpZWxkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoISgwLCBkdXJhdGlvbl8xLmlzRHVyYXRpb24pKG9ialtmaWVsZE5hbWVdKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvdXRsaWVyIGRldGVjdGlvbiBjb25maWcgJHtmdWxsRmllbGROYW1lfSBwYXJzZSBlcnJvcjogZXhwZWN0ZWQgRHVyYXRpb24sIGdvdCAke3R5cGVvZiBvYmpbZmllbGROYW1lXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShvYmpbZmllbGROYW1lXS5zZWNvbmRzID49IDAgJiZcbiAgICAgICAgICAgIG9ialtmaWVsZE5hbWVdLnNlY29uZHMgPD0gMzE1NTc2MDAwMDAwICYmXG4gICAgICAgICAgICBvYmpbZmllbGROYW1lXS5uYW5vcyA+PSAwICYmXG4gICAgICAgICAgICBvYmpbZmllbGROYW1lXS5uYW5vcyA8PSA5OTk5OTk5OTkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG91dGxpZXIgZGV0ZWN0aW9uIGNvbmZpZyAke2Z1bGxGaWVsZE5hbWV9IHBhcnNlIGVycm9yOiB2YWx1ZXMgb3V0IG9mIHJhbmdlIGZvciBub24tbmVnYXRpdmUgRHVhcmF0aW9uYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVBlcmNlbnRhZ2Uob2JqLCBmaWVsZE5hbWUsIG9iamVjdE5hbWUpIHtcbiAgICBjb25zdCBmdWxsRmllbGROYW1lID0gb2JqZWN0TmFtZSA/IGAke29iamVjdE5hbWV9LiR7ZmllbGROYW1lfWAgOiBmaWVsZE5hbWU7XG4gICAgdmFsaWRhdGVGaWVsZFR5cGUob2JqLCBmaWVsZE5hbWUsICdudW1iZXInLCBvYmplY3ROYW1lKTtcbiAgICBpZiAoZmllbGROYW1lIGluIG9iaiAmJlxuICAgICAgICBvYmpbZmllbGROYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICEob2JqW2ZpZWxkTmFtZV0gPj0gMCAmJiBvYmpbZmllbGROYW1lXSA8PSAxMDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgb3V0bGllciBkZXRlY3Rpb24gY29uZmlnICR7ZnVsbEZpZWxkTmFtZX0gcGFyc2UgZXJyb3I6IHZhbHVlIG91dCBvZiByYW5nZSBmb3IgcGVyY2VudGFnZSAoMC0xMDApYCk7XG4gICAgfVxufVxuY2xhc3MgT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNpbmdDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGludGVydmFsTXMsIGJhc2VFamVjdGlvblRpbWVNcywgbWF4RWplY3Rpb25UaW1lTXMsIG1heEVqZWN0aW9uUGVyY2VudCwgc3VjY2Vzc1JhdGVFamVjdGlvbiwgZmFpbHVyZVBlcmNlbnRhZ2VFamVjdGlvbiwgY2hpbGRQb2xpY3kpIHtcbiAgICAgICAgdGhpcy5jaGlsZFBvbGljeSA9IGNoaWxkUG9saWN5O1xuICAgICAgICBpZiAoY2hpbGRQb2xpY3kuZ2V0TG9hZEJhbGFuY2VyTmFtZSgpID09PSAncGlja19maXJzdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb3V0bGllcl9kZXRlY3Rpb24gTEIgcG9saWN5IGNhbm5vdCBoYXZlIGEgcGlja19maXJzdCBjaGlsZCBwb2xpY3knKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsTXMgPSBpbnRlcnZhbE1zICE9PSBudWxsICYmIGludGVydmFsTXMgIT09IHZvaWQgMCA/IGludGVydmFsTXMgOiAxMDAwMDtcbiAgICAgICAgdGhpcy5iYXNlRWplY3Rpb25UaW1lTXMgPSBiYXNlRWplY3Rpb25UaW1lTXMgIT09IG51bGwgJiYgYmFzZUVqZWN0aW9uVGltZU1zICE9PSB2b2lkIDAgPyBiYXNlRWplY3Rpb25UaW1lTXMgOiAzMDAwMDtcbiAgICAgICAgdGhpcy5tYXhFamVjdGlvblRpbWVNcyA9IG1heEVqZWN0aW9uVGltZU1zICE9PSBudWxsICYmIG1heEVqZWN0aW9uVGltZU1zICE9PSB2b2lkIDAgPyBtYXhFamVjdGlvblRpbWVNcyA6IDMwMDAwMDtcbiAgICAgICAgdGhpcy5tYXhFamVjdGlvblBlcmNlbnQgPSBtYXhFamVjdGlvblBlcmNlbnQgIT09IG51bGwgJiYgbWF4RWplY3Rpb25QZXJjZW50ICE9PSB2b2lkIDAgPyBtYXhFamVjdGlvblBlcmNlbnQgOiAxMDtcbiAgICAgICAgdGhpcy5zdWNjZXNzUmF0ZUVqZWN0aW9uID0gc3VjY2Vzc1JhdGVFamVjdGlvblxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTdWNjZXNzUmF0ZUVqZWN0aW9uQ29uZmlnKSwgc3VjY2Vzc1JhdGVFamVjdGlvbikgOiBudWxsO1xuICAgICAgICB0aGlzLmZhaWx1cmVQZXJjZW50YWdlRWplY3Rpb24gPSBmYWlsdXJlUGVyY2VudGFnZUVqZWN0aW9uXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEZhaWx1cmVQZXJjZW50YWdlRWplY3Rpb25Db25maWcpLCBmYWlsdXJlUGVyY2VudGFnZUVqZWN0aW9uKSA6IG51bGw7XG4gICAgfVxuICAgIGdldExvYWRCYWxhbmNlck5hbWUoKSB7XG4gICAgICAgIHJldHVybiBUWVBFX05BTUU7XG4gICAgfVxuICAgIHRvSnNvbk9iamVjdCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxpZXJfZGV0ZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6ICgwLCBkdXJhdGlvbl8xLm1zVG9EdXJhdGlvbikodGhpcy5pbnRlcnZhbE1zKSxcbiAgICAgICAgICAgICAgICBiYXNlX2VqZWN0aW9uX3RpbWU6ICgwLCBkdXJhdGlvbl8xLm1zVG9EdXJhdGlvbikodGhpcy5iYXNlRWplY3Rpb25UaW1lTXMpLFxuICAgICAgICAgICAgICAgIG1heF9lamVjdGlvbl90aW1lOiAoMCwgZHVyYXRpb25fMS5tc1RvRHVyYXRpb24pKHRoaXMubWF4RWplY3Rpb25UaW1lTXMpLFxuICAgICAgICAgICAgICAgIG1heF9lamVjdGlvbl9wZXJjZW50OiB0aGlzLm1heEVqZWN0aW9uUGVyY2VudCxcbiAgICAgICAgICAgICAgICBzdWNjZXNzX3JhdGVfZWplY3Rpb246IChfYSA9IHRoaXMuc3VjY2Vzc1JhdGVFamVjdGlvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbjogKF9iID0gdGhpcy5mYWlsdXJlUGVyY2VudGFnZUVqZWN0aW9uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY2hpbGRfcG9saWN5OiBbdGhpcy5jaGlsZFBvbGljeS50b0pzb25PYmplY3QoKV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRJbnRlcnZhbE1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnZhbE1zO1xuICAgIH1cbiAgICBnZXRCYXNlRWplY3Rpb25UaW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VFamVjdGlvblRpbWVNcztcbiAgICB9XG4gICAgZ2V0TWF4RWplY3Rpb25UaW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heEVqZWN0aW9uVGltZU1zO1xuICAgIH1cbiAgICBnZXRNYXhFamVjdGlvblBlcmNlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heEVqZWN0aW9uUGVyY2VudDtcbiAgICB9XG4gICAgZ2V0U3VjY2Vzc1JhdGVFamVjdGlvbkNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VjY2Vzc1JhdGVFamVjdGlvbjtcbiAgICB9XG4gICAgZ2V0RmFpbHVyZVBlcmNlbnRhZ2VFamVjdGlvbkNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbHVyZVBlcmNlbnRhZ2VFamVjdGlvbjtcbiAgICB9XG4gICAgZ2V0Q2hpbGRQb2xpY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkUG9saWN5O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlRnJvbUpzb24ob2JqKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFsaWRhdGVQb3NpdGl2ZUR1cmF0aW9uKG9iaiwgJ2ludGVydmFsJyk7XG4gICAgICAgIHZhbGlkYXRlUG9zaXRpdmVEdXJhdGlvbihvYmosICdiYXNlX2VqZWN0aW9uX3RpbWUnKTtcbiAgICAgICAgdmFsaWRhdGVQb3NpdGl2ZUR1cmF0aW9uKG9iaiwgJ21heF9lamVjdGlvbl90aW1lJyk7XG4gICAgICAgIHZhbGlkYXRlUGVyY2VudGFnZShvYmosICdtYXhfZWplY3Rpb25fcGVyY2VudCcpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3NfcmF0ZV9lamVjdGlvbicgaW4gb2JqICYmXG4gICAgICAgICAgICBvYmouc3VjY2Vzc19yYXRlX2VqZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3NfcmF0ZV9lamVjdGlvbiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ291dGxpZXIgZGV0ZWN0aW9uIGNvbmZpZyBzdWNjZXNzX3JhdGVfZWplY3Rpb24gbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRlRmllbGRUeXBlKG9iai5zdWNjZXNzX3JhdGVfZWplY3Rpb24sICdzdGRldl9mYWN0b3InLCAnbnVtYmVyJywgJ3N1Y2Nlc3NfcmF0ZV9lamVjdGlvbicpO1xuICAgICAgICAgICAgdmFsaWRhdGVQZXJjZW50YWdlKG9iai5zdWNjZXNzX3JhdGVfZWplY3Rpb24sICdlbmZvcmNlbWVudF9wZXJjZW50YWdlJywgJ3N1Y2Nlc3NfcmF0ZV9lamVjdGlvbicpO1xuICAgICAgICAgICAgdmFsaWRhdGVGaWVsZFR5cGUob2JqLnN1Y2Nlc3NfcmF0ZV9lamVjdGlvbiwgJ21pbmltdW1faG9zdHMnLCAnbnVtYmVyJywgJ3N1Y2Nlc3NfcmF0ZV9lamVjdGlvbicpO1xuICAgICAgICAgICAgdmFsaWRhdGVGaWVsZFR5cGUob2JqLnN1Y2Nlc3NfcmF0ZV9lamVjdGlvbiwgJ3JlcXVlc3Rfdm9sdW1lJywgJ251bWJlcicsICdzdWNjZXNzX3JhdGVfZWplY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2ZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbicgaW4gb2JqICYmXG4gICAgICAgICAgICBvYmouZmFpbHVyZV9wZXJjZW50YWdlX2VqZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ291dGxpZXIgZGV0ZWN0aW9uIGNvbmZpZyBmYWlsdXJlX3BlcmNlbnRhZ2VfZWplY3Rpb24gbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRlUGVyY2VudGFnZShvYmouZmFpbHVyZV9wZXJjZW50YWdlX2VqZWN0aW9uLCAndGhyZXNob2xkJywgJ2ZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbicpO1xuICAgICAgICAgICAgdmFsaWRhdGVQZXJjZW50YWdlKG9iai5mYWlsdXJlX3BlcmNlbnRhZ2VfZWplY3Rpb24sICdlbmZvcmNlbWVudF9wZXJjZW50YWdlJywgJ2ZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbicpO1xuICAgICAgICAgICAgdmFsaWRhdGVGaWVsZFR5cGUob2JqLmZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbiwgJ21pbmltdW1faG9zdHMnLCAnbnVtYmVyJywgJ2ZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbicpO1xuICAgICAgICAgICAgdmFsaWRhdGVGaWVsZFR5cGUob2JqLmZhaWx1cmVfcGVyY2VudGFnZV9lamVjdGlvbiwgJ3JlcXVlc3Rfdm9sdW1lJywgJ251bWJlcicsICdmYWlsdXJlX3BlcmNlbnRhZ2VfZWplY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgnY2hpbGRfcG9saWN5JyBpbiBvYmopIHx8ICFBcnJheS5pc0FycmF5KG9iai5jaGlsZF9wb2xpY3kpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ291dGxpZXIgZGV0ZWN0aW9uIGNvbmZpZyBjaGlsZF9wb2xpY3kgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkUG9saWN5ID0gKDAsIGxvYWRfYmFsYW5jZXJfMS5zZWxlY3RMYkNvbmZpZ0Zyb21MaXN0KShvYmouY2hpbGRfcG9saWN5KTtcbiAgICAgICAgaWYgKCFjaGlsZFBvbGljeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRsaWVyIGRldGVjdGlvbiBjb25maWcgY2hpbGRfcG9saWN5OiBubyB2YWxpZCByZWNvZ25pemVkIHBvbGljeSBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNpbmdDb25maWcob2JqLmludGVydmFsID8gKDAsIGR1cmF0aW9uXzEuZHVyYXRpb25Ub01zKShvYmouaW50ZXJ2YWwpIDogbnVsbCwgb2JqLmJhc2VfZWplY3Rpb25fdGltZSA/ICgwLCBkdXJhdGlvbl8xLmR1cmF0aW9uVG9Ncykob2JqLmJhc2VfZWplY3Rpb25fdGltZSkgOiBudWxsLCBvYmoubWF4X2VqZWN0aW9uX3RpbWUgPyAoMCwgZHVyYXRpb25fMS5kdXJhdGlvblRvTXMpKG9iai5tYXhfZWplY3Rpb25fdGltZSkgOiBudWxsLCAoX2EgPSBvYmoubWF4X2VqZWN0aW9uX3BlcmNlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwsIG9iai5zdWNjZXNzX3JhdGVfZWplY3Rpb24sIG9iai5mYWlsdXJlX3BlcmNlbnRhZ2VfZWplY3Rpb24sIGNoaWxkUG9saWN5KTtcbiAgICB9XG59XG5leHBvcnRzLk91dGxpZXJEZXRlY3Rpb25Mb2FkQmFsYW5jaW5nQ29uZmlnID0gT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNpbmdDb25maWc7XG5jbGFzcyBPdXRsaWVyRGV0ZWN0aW9uU3ViY2hhbm5lbFdyYXBwZXIgZXh0ZW5kcyBzdWJjaGFubmVsX2ludGVyZmFjZV8xLkJhc2VTdWJjaGFubmVsV3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IoY2hpbGRTdWJjaGFubmVsLCBtYXBFbnRyeSkge1xuICAgICAgICBzdXBlcihjaGlsZFN1YmNoYW5uZWwpO1xuICAgICAgICB0aGlzLm1hcEVudHJ5ID0gbWFwRW50cnk7XG4gICAgICAgIHRoaXMucmVmQ291bnQgPSAwO1xuICAgIH1cbiAgICByZWYoKSB7XG4gICAgICAgIHRoaXMuY2hpbGQucmVmKCk7XG4gICAgICAgIHRoaXMucmVmQ291bnQgKz0gMTtcbiAgICB9XG4gICAgdW5yZWYoKSB7XG4gICAgICAgIHRoaXMuY2hpbGQudW5yZWYoKTtcbiAgICAgICAgdGhpcy5yZWZDb3VudCAtPSAxO1xuICAgICAgICBpZiAodGhpcy5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXBFbnRyeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tYXBFbnRyeS5zdWJjaGFubmVsV3JhcHBlcnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcEVudHJ5LnN1YmNoYW5uZWxXcmFwcGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlamVjdCgpIHtcbiAgICAgICAgdGhpcy5zZXRIZWFsdGh5KGZhbHNlKTtcbiAgICB9XG4gICAgdW5lamVjdCgpIHtcbiAgICAgICAgdGhpcy5zZXRIZWFsdGh5KHRydWUpO1xuICAgIH1cbiAgICBnZXRNYXBFbnRyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRW50cnk7XG4gICAgfVxuICAgIGdldFdyYXBwZWRTdWJjaGFubmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZDtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbXB0eUJ1Y2tldCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiAwLFxuICAgICAgICBmYWlsdXJlOiAwLFxuICAgIH07XG59XG5jbGFzcyBDYWxsQ291bnRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQnVja2V0ID0gY3JlYXRlRW1wdHlCdWNrZXQoKTtcbiAgICAgICAgdGhpcy5pbmFjdGl2ZUJ1Y2tldCA9IGNyZWF0ZUVtcHR5QnVja2V0KCk7XG4gICAgfVxuICAgIGFkZFN1Y2Nlc3MoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQnVja2V0LnN1Y2Nlc3MgKz0gMTtcbiAgICB9XG4gICAgYWRkRmFpbHVyZSgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVCdWNrZXQuZmFpbHVyZSArPSAxO1xuICAgIH1cbiAgICBzd2l0Y2hCdWNrZXRzKCkge1xuICAgICAgICB0aGlzLmluYWN0aXZlQnVja2V0ID0gdGhpcy5hY3RpdmVCdWNrZXQ7XG4gICAgICAgIHRoaXMuYWN0aXZlQnVja2V0ID0gY3JlYXRlRW1wdHlCdWNrZXQoKTtcbiAgICB9XG4gICAgZ2V0TGFzdFN1Y2Nlc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5hY3RpdmVCdWNrZXQuc3VjY2VzcztcbiAgICB9XG4gICAgZ2V0TGFzdEZhaWx1cmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmFjdGl2ZUJ1Y2tldC5mYWlsdXJlO1xuICAgIH1cbn1cbmNsYXNzIE91dGxpZXJEZXRlY3Rpb25QaWNrZXIge1xuICAgIGNvbnN0cnVjdG9yKHdyYXBwZWRQaWNrZXIsIGNvdW50Q2FsbHMpIHtcbiAgICAgICAgdGhpcy53cmFwcGVkUGlja2VyID0gd3JhcHBlZFBpY2tlcjtcbiAgICAgICAgdGhpcy5jb3VudENhbGxzID0gY291bnRDYWxscztcbiAgICB9XG4gICAgcGljayhwaWNrQXJncykge1xuICAgICAgICBjb25zdCB3cmFwcGVkUGljayA9IHRoaXMud3JhcHBlZFBpY2tlci5waWNrKHBpY2tBcmdzKTtcbiAgICAgICAgaWYgKHdyYXBwZWRQaWNrLnBpY2tSZXN1bHRUeXBlID09PSBwaWNrZXJfMS5QaWNrUmVzdWx0VHlwZS5DT01QTEVURSkge1xuICAgICAgICAgICAgY29uc3Qgc3ViY2hhbm5lbFdyYXBwZXIgPSB3cmFwcGVkUGljay5zdWJjaGFubmVsO1xuICAgICAgICAgICAgY29uc3QgbWFwRW50cnkgPSBzdWJjaGFubmVsV3JhcHBlci5nZXRNYXBFbnRyeSgpO1xuICAgICAgICAgICAgaWYgKG1hcEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgbGV0IG9uQ2FsbEVuZGVkID0gd3JhcHBlZFBpY2sub25DYWxsRW5kZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRDYWxscykge1xuICAgICAgICAgICAgICAgICAgICBvbkNhbGxFbmRlZCA9IChzdGF0dXNDb2RlLCBkZXRhaWxzLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IGNvbnN0YW50c18xLlN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEVudHJ5LmNvdW50ZXIuYWRkU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwRW50cnkuY291bnRlci5hZGRGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSB3cmFwcGVkUGljay5vbkNhbGxFbmRlZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwod3JhcHBlZFBpY2ssIHN0YXR1c0NvZGUsIGRldGFpbHMsIG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgd3JhcHBlZFBpY2spLCB7IHN1YmNoYW5uZWw6IHN1YmNoYW5uZWxXcmFwcGVyLmdldFdyYXBwZWRTdWJjaGFubmVsKCksIG9uQ2FsbEVuZGVkOiBvbkNhbGxFbmRlZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdyYXBwZWRQaWNrKSwgeyBzdWJjaGFubmVsOiBzdWJjaGFubmVsV3JhcHBlci5nZXRXcmFwcGVkU3ViY2hhbm5lbCgpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRQaWNrO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNlciB7XG4gICAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRyb2xIZWxwZXIpIHtcbiAgICAgICAgdGhpcy5lbnRyeU1hcCA9IG5ldyBzdWJjaGFubmVsX2FkZHJlc3NfMS5FbmRwb2ludE1hcCgpO1xuICAgICAgICB0aGlzLmxhdGVzdENvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMudGltZXJTdGFydFRpbWUgPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkQmFsYW5jZXIgPSBuZXcgbG9hZF9iYWxhbmNlcl9jaGlsZF9oYW5kbGVyXzEuQ2hpbGRMb2FkQmFsYW5jZXJIYW5kbGVyKCgwLCBleHBlcmltZW50YWxfMS5jcmVhdGVDaGlsZENoYW5uZWxDb250cm9sSGVscGVyKShjaGFubmVsQ29udHJvbEhlbHBlciwge1xuICAgICAgICAgICAgY3JlYXRlU3ViY2hhbm5lbDogKHN1YmNoYW5uZWxBZGRyZXNzLCBzdWJjaGFubmVsQXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU3ViY2hhbm5lbCA9IGNoYW5uZWxDb250cm9sSGVscGVyLmNyZWF0ZVN1YmNoYW5uZWwoc3ViY2hhbm5lbEFkZHJlc3MsIHN1YmNoYW5uZWxBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBFbnRyeSA9IHRoaXMuZW50cnlNYXAuZ2V0Rm9yU3ViY2hhbm5lbEFkZHJlc3Moc3ViY2hhbm5lbEFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YmNoYW5uZWxXcmFwcGVyID0gbmV3IE91dGxpZXJEZXRlY3Rpb25TdWJjaGFubmVsV3JhcHBlcihvcmlnaW5hbFN1YmNoYW5uZWwsIG1hcEVudHJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoKG1hcEVudHJ5ID09PSBudWxsIHx8IG1hcEVudHJ5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXBFbnRyeS5jdXJyZW50RWplY3Rpb25UaW1lc3RhbXApICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhZGRyZXNzIGlzIGVqZWN0ZWQsIHByb3BhZ2F0ZSB0aGF0IHRvIHRoZSBuZXcgc3ViY2hhbm5lbCB3cmFwcGVyXG4gICAgICAgICAgICAgICAgICAgIHN1YmNoYW5uZWxXcmFwcGVyLmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hcEVudHJ5ID09PSBudWxsIHx8IG1hcEVudHJ5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXBFbnRyeS5zdWJjaGFubmVsV3JhcHBlcnMucHVzaChzdWJjaGFubmVsV3JhcHBlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YmNoYW5uZWxXcmFwcGVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiAoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpdml0eVN0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29udHJvbEhlbHBlci51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlTdGF0ZSwgbmV3IE91dGxpZXJEZXRlY3Rpb25QaWNrZXIocGlja2VyLCB0aGlzLmlzQ291bnRpbmdFbmFibGVkKCkpLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENvbnRyb2xIZWxwZXIudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuZWplY3Rpb25UaW1lciA9IHNldEludGVydmFsKCgpID0+IHsgfSwgMCk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5lamVjdGlvblRpbWVyKTtcbiAgICB9XG4gICAgaXNDb3VudGluZ0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5sYXRlc3RDb25maWcgIT09IG51bGwgJiZcbiAgICAgICAgICAgICh0aGlzLmxhdGVzdENvbmZpZy5nZXRTdWNjZXNzUmF0ZUVqZWN0aW9uQ29uZmlnKCkgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdENvbmZpZy5nZXRGYWlsdXJlUGVyY2VudGFnZUVqZWN0aW9uQ29uZmlnKCkgIT09IG51bGwpKTtcbiAgICB9XG4gICAgZ2V0Q3VycmVudEVqZWN0aW9uUGVyY2VudCgpIHtcbiAgICAgICAgbGV0IGVqZWN0aW9uQ291bnQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IG1hcEVudHJ5IG9mIHRoaXMuZW50cnlNYXAudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChtYXBFbnRyeS5jdXJyZW50RWplY3Rpb25UaW1lc3RhbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlamVjdGlvbkNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChlamVjdGlvbkNvdW50ICogMTAwKSAvIHRoaXMuZW50cnlNYXAuc2l6ZTtcbiAgICB9XG4gICAgcnVuU3VjY2Vzc1JhdGVDaGVjayhlamVjdGlvblRpbWVzdGFtcCkge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0Q29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VjY2Vzc1JhdGVDb25maWcgPSB0aGlzLmxhdGVzdENvbmZpZy5nZXRTdWNjZXNzUmF0ZUVqZWN0aW9uQ29uZmlnKCk7XG4gICAgICAgIGlmICghc3VjY2Vzc1JhdGVDb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cmFjZSgnUnVubmluZyBzdWNjZXNzIHJhdGUgY2hlY2snKTtcbiAgICAgICAgLy8gU3RlcCAxXG4gICAgICAgIGNvbnN0IHRhcmdldFJlcXVlc3RWb2x1bWUgPSBzdWNjZXNzUmF0ZUNvbmZpZy5yZXF1ZXN0X3ZvbHVtZTtcbiAgICAgICAgbGV0IGFkZHJlc2VzV2l0aFRhcmdldFZvbHVtZSA9IDA7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtlbmRwb2ludCwgbWFwRW50cnldIG9mIHRoaXMuZW50cnlNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBtYXBFbnRyeS5jb3VudGVyLmdldExhc3RTdWNjZXNzZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGZhaWx1cmVzID0gbWFwRW50cnkuY291bnRlci5nZXRMYXN0RmFpbHVyZXMoKTtcbiAgICAgICAgICAgIHRyYWNlKCdTdGF0cyBmb3IgJyArXG4gICAgICAgICAgICAgICAgKDAsIHN1YmNoYW5uZWxfYWRkcmVzc18xLmVuZHBvaW50VG9TdHJpbmcpKGVuZHBvaW50KSArXG4gICAgICAgICAgICAgICAgJzogc3VjY2Vzc2VzPScgK1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3NlcyArXG4gICAgICAgICAgICAgICAgJyBmYWlsdXJlcz0nICtcbiAgICAgICAgICAgICAgICBmYWlsdXJlcyArXG4gICAgICAgICAgICAgICAgJyB0YXJnZXRSZXF1ZXN0Vm9sdW1lPScgK1xuICAgICAgICAgICAgICAgIHRhcmdldFJlcXVlc3RWb2x1bWUpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3NlcyArIGZhaWx1cmVzID49IHRhcmdldFJlcXVlc3RWb2x1bWUpIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNlc1dpdGhUYXJnZXRWb2x1bWUgKz0gMTtcbiAgICAgICAgICAgICAgICBzdWNjZXNzUmF0ZXMucHVzaChzdWNjZXNzZXMgLyAoc3VjY2Vzc2VzICsgZmFpbHVyZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmFjZSgnRm91bmQgJyArXG4gICAgICAgICAgICBhZGRyZXNlc1dpdGhUYXJnZXRWb2x1bWUgK1xuICAgICAgICAgICAgJyBzdWNjZXNzIHJhdGUgY2FuZGlkYXRlczsgY3VycmVudEVqZWN0aW9uUGVyY2VudD0nICtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q3VycmVudEVqZWN0aW9uUGVyY2VudCgpICtcbiAgICAgICAgICAgICcgc3VjY2Vzc1JhdGVzPVsnICtcbiAgICAgICAgICAgIHN1Y2Nlc3NSYXRlcyArXG4gICAgICAgICAgICAnXScpO1xuICAgICAgICBpZiAoYWRkcmVzZXNXaXRoVGFyZ2V0Vm9sdW1lIDwgc3VjY2Vzc1JhdGVDb25maWcubWluaW11bV9ob3N0cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN0ZXAgMlxuICAgICAgICBjb25zdCBzdWNjZXNzUmF0ZU1lYW4gPSBzdWNjZXNzUmF0ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYikgLyBzdWNjZXNzUmF0ZXMubGVuZ3RoO1xuICAgICAgICBsZXQgc3VjY2Vzc1JhdGVEZXZpYXRpb25TdW0gPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHJhdGUgb2Ygc3VjY2Vzc1JhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpYXRpb24gPSByYXRlIC0gc3VjY2Vzc1JhdGVNZWFuO1xuICAgICAgICAgICAgc3VjY2Vzc1JhdGVEZXZpYXRpb25TdW0gKz0gZGV2aWF0aW9uICogZGV2aWF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlVmFyaWFuY2UgPSBzdWNjZXNzUmF0ZURldmlhdGlvblN1bSAvIHN1Y2Nlc3NSYXRlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlU3RkZXYgPSBNYXRoLnNxcnQoc3VjY2Vzc1JhdGVWYXJpYW5jZSk7XG4gICAgICAgIGNvbnN0IGVqZWN0aW9uVGhyZXNob2xkID0gc3VjY2Vzc1JhdGVNZWFuIC1cbiAgICAgICAgICAgIHN1Y2Nlc3NSYXRlU3RkZXYgKiAoc3VjY2Vzc1JhdGVDb25maWcuc3RkZXZfZmFjdG9yIC8gMTAwMCk7XG4gICAgICAgIHRyYWNlKCdzdGRldj0nICsgc3VjY2Vzc1JhdGVTdGRldiArICcgZWplY3Rpb25UaHJlc2hvbGQ9JyArIGVqZWN0aW9uVGhyZXNob2xkKTtcbiAgICAgICAgLy8gU3RlcCAzXG4gICAgICAgIGZvciAoY29uc3QgW2FkZHJlc3MsIG1hcEVudHJ5XSBvZiB0aGlzLmVudHJ5TWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgLy8gU3RlcCAzLmlcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEN1cnJlbnRFamVjdGlvblBlcmNlbnQoKSA+PVxuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0Q29uZmlnLmdldE1heEVqZWN0aW9uUGVyY2VudCgpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGVwIDMuaWlcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NlcyA9IG1hcEVudHJ5LmNvdW50ZXIuZ2V0TGFzdFN1Y2Nlc3NlcygpO1xuICAgICAgICAgICAgY29uc3QgZmFpbHVyZXMgPSBtYXBFbnRyeS5jb3VudGVyLmdldExhc3RGYWlsdXJlcygpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3NlcyArIGZhaWx1cmVzIDwgdGFyZ2V0UmVxdWVzdFZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RlcCAzLmlpaVxuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc1JhdGUgPSBzdWNjZXNzZXMgLyAoc3VjY2Vzc2VzICsgZmFpbHVyZXMpO1xuICAgICAgICAgICAgdHJhY2UoJ0NoZWNraW5nIGNhbmRpZGF0ZSAnICsgYWRkcmVzcyArICcgc3VjY2Vzc1JhdGU9JyArIHN1Y2Nlc3NSYXRlKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzUmF0ZSA8IGVqZWN0aW9uVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5yYW5kb20oKSAqIDEwMDtcbiAgICAgICAgICAgICAgICB0cmFjZSgnQ2FuZGlkYXRlICcgK1xuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzICtcbiAgICAgICAgICAgICAgICAgICAgJyByYW5kb21OdW1iZXI9JyArXG4gICAgICAgICAgICAgICAgICAgIHJhbmRvbU51bWJlciArXG4gICAgICAgICAgICAgICAgICAgICcgZW5mb3JjZW1lbnRfcGVyY2VudGFnZT0nICtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc1JhdGVDb25maWcuZW5mb3JjZW1lbnRfcGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmRvbU51bWJlciA8IHN1Y2Nlc3NSYXRlQ29uZmlnLmVuZm9yY2VtZW50X3BlcmNlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2UoJ0VqZWN0aW5nIGNhbmRpZGF0ZSAnICsgYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWplY3QobWFwRW50cnksIGVqZWN0aW9uVGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcnVuRmFpbHVyZVBlcmNlbnRhZ2VDaGVjayhlamVjdGlvblRpbWVzdGFtcCkge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0Q29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmFpbHVyZVBlcmNlbnRhZ2VDb25maWcgPSB0aGlzLmxhdGVzdENvbmZpZy5nZXRGYWlsdXJlUGVyY2VudGFnZUVqZWN0aW9uQ29uZmlnKCk7XG4gICAgICAgIGlmICghZmFpbHVyZVBlcmNlbnRhZ2VDb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cmFjZSgnUnVubmluZyBmYWlsdXJlIHBlcmNlbnRhZ2UgY2hlY2suIHRocmVzaG9sZD0nICtcbiAgICAgICAgICAgIGZhaWx1cmVQZXJjZW50YWdlQ29uZmlnLnRocmVzaG9sZCArXG4gICAgICAgICAgICAnIHJlcXVlc3Qgdm9sdW1lIHRocmVzaG9sZD0nICtcbiAgICAgICAgICAgIGZhaWx1cmVQZXJjZW50YWdlQ29uZmlnLnJlcXVlc3Rfdm9sdW1lKTtcbiAgICAgICAgLy8gU3RlcCAxXG4gICAgICAgIGxldCBhZGRyZXNzZXNXaXRoVGFyZ2V0Vm9sdW1lID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBtYXBFbnRyeSBvZiB0aGlzLmVudHJ5TWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzZXMgPSBtYXBFbnRyeS5jb3VudGVyLmdldExhc3RTdWNjZXNzZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGZhaWx1cmVzID0gbWFwRW50cnkuY291bnRlci5nZXRMYXN0RmFpbHVyZXMoKTtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzZXMgKyBmYWlsdXJlcyA+PSBmYWlsdXJlUGVyY2VudGFnZUNvbmZpZy5yZXF1ZXN0X3ZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGFkZHJlc3Nlc1dpdGhUYXJnZXRWb2x1bWUgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWRkcmVzc2VzV2l0aFRhcmdldFZvbHVtZSA8IGZhaWx1cmVQZXJjZW50YWdlQ29uZmlnLm1pbmltdW1faG9zdHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdGVwIDJcbiAgICAgICAgZm9yIChjb25zdCBbYWRkcmVzcywgbWFwRW50cnldIG9mIHRoaXMuZW50cnlNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICAvLyBTdGVwIDIuaVxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q3VycmVudEVqZWN0aW9uUGVyY2VudCgpID49XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RDb25maWcuZ2V0TWF4RWplY3Rpb25QZXJjZW50KCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0ZXAgMi5paVxuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc2VzID0gbWFwRW50cnkuY291bnRlci5nZXRMYXN0U3VjY2Vzc2VzKCk7XG4gICAgICAgICAgICBjb25zdCBmYWlsdXJlcyA9IG1hcEVudHJ5LmNvdW50ZXIuZ2V0TGFzdEZhaWx1cmVzKCk7XG4gICAgICAgICAgICB0cmFjZSgnQ2FuZGlkYXRlIHN1Y2Nlc3Nlcz0nICsgc3VjY2Vzc2VzICsgJyBmYWlsdXJlcz0nICsgZmFpbHVyZXMpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3NlcyArIGZhaWx1cmVzIDwgZmFpbHVyZVBlcmNlbnRhZ2VDb25maWcucmVxdWVzdF92b2x1bWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0ZXAgMi5paWlcbiAgICAgICAgICAgIGNvbnN0IGZhaWx1cmVQZXJjZW50YWdlID0gKGZhaWx1cmVzICogMTAwKSAvIChmYWlsdXJlcyArIHN1Y2Nlc3Nlcyk7XG4gICAgICAgICAgICBpZiAoZmFpbHVyZVBlcmNlbnRhZ2UgPiBmYWlsdXJlUGVyY2VudGFnZUNvbmZpZy50aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLnJhbmRvbSgpICogMTAwO1xuICAgICAgICAgICAgICAgIHRyYWNlKCdDYW5kaWRhdGUgJyArXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgK1xuICAgICAgICAgICAgICAgICAgICAnIHJhbmRvbU51bWJlcj0nICtcbiAgICAgICAgICAgICAgICAgICAgcmFuZG9tTnVtYmVyICtcbiAgICAgICAgICAgICAgICAgICAgJyBlbmZvcmNlbWVudF9wZXJjZW50YWdlPScgK1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlUGVyY2VudGFnZUNvbmZpZy5lbmZvcmNlbWVudF9wZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZG9tTnVtYmVyIDwgZmFpbHVyZVBlcmNlbnRhZ2VDb25maWcuZW5mb3JjZW1lbnRfcGVyY2VudGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0cmFjZSgnRWplY3RpbmcgY2FuZGlkYXRlICcgKyBhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lamVjdChtYXBFbnRyeSwgZWplY3Rpb25UaW1lc3RhbXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlamVjdChtYXBFbnRyeSwgZWplY3Rpb25UaW1lc3RhbXApIHtcbiAgICAgICAgbWFwRW50cnkuY3VycmVudEVqZWN0aW9uVGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgbWFwRW50cnkuZWplY3Rpb25UaW1lTXVsdGlwbGllciArPSAxO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YmNoYW5uZWxXcmFwcGVyIG9mIG1hcEVudHJ5LnN1YmNoYW5uZWxXcmFwcGVycykge1xuICAgICAgICAgICAgc3ViY2hhbm5lbFdyYXBwZXIuZWplY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bmVqZWN0KG1hcEVudHJ5KSB7XG4gICAgICAgIG1hcEVudHJ5LmN1cnJlbnRFamVjdGlvblRpbWVzdGFtcCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qgc3ViY2hhbm5lbFdyYXBwZXIgb2YgbWFwRW50cnkuc3ViY2hhbm5lbFdyYXBwZXJzKSB7XG4gICAgICAgICAgICBzdWJjaGFubmVsV3JhcHBlci51bmVqZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3dpdGNoQWxsQnVja2V0cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXBFbnRyeSBvZiB0aGlzLmVudHJ5TWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBtYXBFbnRyeS5jb3VudGVyLnN3aXRjaEJ1Y2tldHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydFRpbWVyKGRlbGF5TXMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5lamVjdGlvblRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJ1bkNoZWNrcygpLCBkZWxheU1zKTtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5lamVjdGlvblRpbWVyKS51bnJlZikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH1cbiAgICBydW5DaGVja3MoKSB7XG4gICAgICAgIGNvbnN0IGVqZWN0aW9uVGltZXN0YW1wID0gbmV3IERhdGUoKTtcbiAgICAgICAgdHJhY2UoJ0VqZWN0aW9uIHRpbWVyIHJ1bm5pbmcnKTtcbiAgICAgICAgdGhpcy5zd2l0Y2hBbGxCdWNrZXRzKCk7XG4gICAgICAgIGlmICghdGhpcy5sYXRlc3RDb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyU3RhcnRUaW1lID0gZWplY3Rpb25UaW1lc3RhbXA7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmxhdGVzdENvbmZpZy5nZXRJbnRlcnZhbE1zKCkpO1xuICAgICAgICB0aGlzLnJ1blN1Y2Nlc3NSYXRlQ2hlY2soZWplY3Rpb25UaW1lc3RhbXApO1xuICAgICAgICB0aGlzLnJ1bkZhaWx1cmVQZXJjZW50YWdlQ2hlY2soZWplY3Rpb25UaW1lc3RhbXApO1xuICAgICAgICBmb3IgKGNvbnN0IFthZGRyZXNzLCBtYXBFbnRyeV0gb2YgdGhpcy5lbnRyeU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChtYXBFbnRyeS5jdXJyZW50RWplY3Rpb25UaW1lc3RhbXAgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwRW50cnkuZWplY3Rpb25UaW1lTXVsdGlwbGllciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwRW50cnkuZWplY3Rpb25UaW1lTXVsdGlwbGllciAtPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VFamVjdGlvblRpbWVNcyA9IHRoaXMubGF0ZXN0Q29uZmlnLmdldEJhc2VFamVjdGlvblRpbWVNcygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heEVqZWN0aW9uVGltZU1zID0gdGhpcy5sYXRlc3RDb25maWcuZ2V0TWF4RWplY3Rpb25UaW1lTXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5UaW1lID0gbmV3IERhdGUobWFwRW50cnkuY3VycmVudEVqZWN0aW9uVGltZXN0YW1wLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuVGltZS5zZXRNaWxsaXNlY29uZHMocmV0dXJuVGltZS5nZXRNaWxsaXNlY29uZHMoKSArXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKGJhc2VFamVjdGlvblRpbWVNcyAqIG1hcEVudHJ5LmVqZWN0aW9uVGltZU11bHRpcGxpZXIsIE1hdGgubWF4KGJhc2VFamVjdGlvblRpbWVNcywgbWF4RWplY3Rpb25UaW1lTXMpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblRpbWUgPCBuZXcgRGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNlKCdVbmVqZWN0aW5nICcgKyBhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmVqZWN0KG1hcEVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQWRkcmVzc0xpc3QoZW5kcG9pbnRMaXN0LCBsYkNvbmZpZywgb3B0aW9ucywgcmVzb2x1dGlvbk5vdGUpIHtcbiAgICAgICAgaWYgKCEobGJDb25maWcgaW5zdGFuY2VvZiBPdXRsaWVyRGV0ZWN0aW9uTG9hZEJhbGFuY2luZ0NvbmZpZykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0cmFjZSgnUmVjZWl2ZWQgdXBkYXRlIHdpdGggY29uZmlnOiAnICsgSlNPTi5zdHJpbmdpZnkobGJDb25maWcudG9Kc29uT2JqZWN0KCksIHVuZGVmaW5lZCwgMikpO1xuICAgICAgICBpZiAoZW5kcG9pbnRMaXN0Lm9rKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIGVuZHBvaW50TGlzdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnRyeU1hcC5oYXMoZW5kcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNlKCdBZGRpbmcgbWFwIGVudHJ5IGZvciAnICsgKDAsIHN1YmNoYW5uZWxfYWRkcmVzc18xLmVuZHBvaW50VG9TdHJpbmcpKGVuZHBvaW50KSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnlNYXAuc2V0KGVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyOiBuZXcgQ2FsbENvdW50ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFamVjdGlvblRpbWVzdGFtcDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVqZWN0aW9uVGltZU11bHRpcGxpZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJjaGFubmVsV3JhcHBlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVudHJ5TWFwLmRlbGV0ZU1pc3NpbmcoZW5kcG9pbnRMaXN0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZFBvbGljeSA9IGxiQ29uZmlnLmdldENoaWxkUG9saWN5KCk7XG4gICAgICAgIHRoaXMuY2hpbGRCYWxhbmNlci51cGRhdGVBZGRyZXNzTGlzdChlbmRwb2ludExpc3QsIGNoaWxkUG9saWN5LCBvcHRpb25zLCByZXNvbHV0aW9uTm90ZSk7XG4gICAgICAgIGlmIChsYkNvbmZpZy5nZXRTdWNjZXNzUmF0ZUVqZWN0aW9uQ29uZmlnKCkgfHxcbiAgICAgICAgICAgIGxiQ29uZmlnLmdldEZhaWx1cmVQZXJjZW50YWdlRWplY3Rpb25Db25maWcoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXJTdGFydFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0cmFjZSgnUHJldmlvdXMgdGltZXIgZXhpc3RlZC4gUmVwbGFjaW5nIHRpbWVyJyk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZWplY3Rpb25UaW1lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nRGVsYXkgPSBsYkNvbmZpZy5nZXRJbnRlcnZhbE1zKCkgLVxuICAgICAgICAgICAgICAgICAgICAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSB0aGlzLnRpbWVyU3RhcnRUaW1lLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKHJlbWFpbmluZ0RlbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYWNlKCdTdGFydGluZyBuZXcgdGltZXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVyU3RhcnRUaW1lID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIobGJDb25maWcuZ2V0SW50ZXJ2YWxNcygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXRjaEFsbEJ1Y2tldHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyYWNlKCdDb3VudGluZyBkaXNhYmxlZC4gQ2FuY2VsbGluZyB0aW1lci4nKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJTdGFydFRpbWUgPSBudWxsO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZWplY3Rpb25UaW1lcik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hcEVudHJ5IG9mIHRoaXMuZW50cnlNYXAudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuZWplY3QobWFwRW50cnkpO1xuICAgICAgICAgICAgICAgIG1hcEVudHJ5LmVqZWN0aW9uVGltZU11bHRpcGxpZXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubGF0ZXN0Q29uZmlnID0gbGJDb25maWc7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBleGl0SWRsZSgpIHtcbiAgICAgICAgdGhpcy5jaGlsZEJhbGFuY2VyLmV4aXRJZGxlKCk7XG4gICAgfVxuICAgIHJlc2V0QmFja29mZigpIHtcbiAgICAgICAgdGhpcy5jaGlsZEJhbGFuY2VyLnJlc2V0QmFja29mZigpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5lamVjdGlvblRpbWVyKTtcbiAgICAgICAgdGhpcy5jaGlsZEJhbGFuY2VyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgZ2V0VHlwZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBUWVBFX05BTUU7XG4gICAgfVxufVxuZXhwb3J0cy5PdXRsaWVyRGV0ZWN0aW9uTG9hZEJhbGFuY2VyID0gT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNlcjtcbmZ1bmN0aW9uIHNldHVwKCkge1xuICAgIGlmIChPVVRMSUVSX0RFVEVDVElPTl9FTkFCTEVEKSB7XG4gICAgICAgICgwLCBleHBlcmltZW50YWxfMS5yZWdpc3RlckxvYWRCYWxhbmNlclR5cGUpKFRZUEVfTkFNRSwgT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNlciwgT3V0bGllckRldGVjdGlvbkxvYWRCYWxhbmNpbmdDb25maWcpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvYWQtYmFsYW5jZXItb3V0bGllci1kZXRlY3Rpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyNSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcmlvcml0eVF1ZXVlID0gdm9pZCAwO1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHBhcmVudCA9IChpKSA9PiBNYXRoLmZsb29yKGkgLyAyKTtcbmNvbnN0IGxlZnQgPSAoaSkgPT4gaSAqIDIgKyAxO1xuY29uc3QgcmlnaHQgPSAoaSkgPT4gaSAqIDIgKyAyO1xuLyoqXG4gKiBBIGdlbmVyaWMgcHJpb3JpdHkgcXVldWUgaW1wbGVtZW50ZWQgYXMgYW4gYXJyYXktYmFzZWQgYmluYXJ5IGhlYXAuXG4gKiBBZGFwdGVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyOTE5NzUyLzE1OTM4OFxuICovXG5jbGFzcyBQcmlvcml0eVF1ZXVlIHtcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wYXJhdG9yIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgc2hvdWxkIHByZWNlZGUgdGhlXG4gICAgICogICBzZWNvbmQgaW4gdGhlIHF1ZXVlLiBEZWZhdWx0cyB0byBgKGEsIGIpID0+IGEgPiBiYFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbXBhcmF0b3IgPSAoYSwgYikgPT4gYSA+IGIpIHtcbiAgICAgICAgdGhpcy5jb21wYXJhdG9yID0gY29tcGFyYXRvcjtcbiAgICAgICAgdGhpcy5oZWFwID0gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IGluIHRoZSBxdWV1ZVxuICAgICAqL1xuICAgIHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYXAubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZXJlIGFyZSBubyBpdGVtcyBpbiB0aGUgcXVldWUsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUoKSA9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb29rIGF0IHRoZSBmcm9udCBpdGVtIHRoYXQgd291bGQgYmUgcG9wcGVkLCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29udGVudHNcbiAgICAgKiBvZiB0aGUgcXVldWVcbiAgICAgKiBAcmV0dXJucyBUaGUgZnJvbnQgaXRlbSBpbiB0aGUgcXVldWUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgcXVldWUgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBwZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFwW3RvcF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgaXRlbXMgdG8gdGhlIHF1ZXVlXG4gICAgICogQHBhcmFtIHZhbHVlcyBUaGUgaXRlbXMgdG8gYWRkXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBzaXplIG9mIHRoZSBxdWV1ZSBhZnRlciBhZGRpbmcgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHVzaCguLi52YWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgdGhpcy5oZWFwLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zaWZ0VXAoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBmcm9udCBpdGVtIGluIHRoZSBxdWV1ZSBhbmQgcmV0dXJuIGl0XG4gICAgICogQHJldHVybnMgVGhlIGZyb250IGl0ZW0gaW4gdGhlIHF1ZXVlLCBvciB1bmRlZmluZWQgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5XG4gICAgICovXG4gICAgcG9wKCkge1xuICAgICAgICBjb25zdCBwb3BwZWRWYWx1ZSA9IHRoaXMucGVlaygpO1xuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLnNpemUoKSAtIDE7XG4gICAgICAgIGlmIChib3R0b20gPiB0b3ApIHtcbiAgICAgICAgICAgIHRoaXMuc3dhcCh0b3AsIGJvdHRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oZWFwLnBvcCgpO1xuICAgICAgICB0aGlzLnNpZnREb3duKCk7XG4gICAgICAgIHJldHVybiBwb3BwZWRWYWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltdWx0YW5lb3VzbHkgcmVtb3ZlIHRoZSBmcm9udCBpdGVtIGluIHRoZSBxdWV1ZSBhbmQgYWRkIHRoZSBwcm92aWRlZFxuICAgICAqIGl0ZW0uXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBpdGVtIHRvIGFkZFxuICAgICAqIEByZXR1cm5zIFRoZSBmcm9udCBpdGVtIGluIHRoZSBxdWV1ZSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eVxuICAgICAqL1xuICAgIHJlcGxhY2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucGVlaygpO1xuICAgICAgICB0aGlzLmhlYXBbdG9wXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNpZnREb3duKCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlZFZhbHVlO1xuICAgIH1cbiAgICBncmVhdGVyKGksIGopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyYXRvcih0aGlzLmhlYXBbaV0sIHRoaXMuaGVhcFtqXSk7XG4gICAgfVxuICAgIHN3YXAoaSwgaikge1xuICAgICAgICBbdGhpcy5oZWFwW2ldLCB0aGlzLmhlYXBbal1dID0gW3RoaXMuaGVhcFtqXSwgdGhpcy5oZWFwW2ldXTtcbiAgICB9XG4gICAgc2lmdFVwKCkge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuc2l6ZSgpIC0gMTtcbiAgICAgICAgd2hpbGUgKG5vZGUgPiB0b3AgJiYgdGhpcy5ncmVhdGVyKG5vZGUsIHBhcmVudChub2RlKSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3dhcChub2RlLCBwYXJlbnQobm9kZSkpO1xuICAgICAgICAgICAgbm9kZSA9IHBhcmVudChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaWZ0RG93bigpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0b3A7XG4gICAgICAgIHdoaWxlICgobGVmdChub2RlKSA8IHRoaXMuc2l6ZSgpICYmIHRoaXMuZ3JlYXRlcihsZWZ0KG5vZGUpLCBub2RlKSkgfHxcbiAgICAgICAgICAgIChyaWdodChub2RlKSA8IHRoaXMuc2l6ZSgpICYmIHRoaXMuZ3JlYXRlcihyaWdodChub2RlKSwgbm9kZSkpKSB7XG4gICAgICAgICAgICBsZXQgbWF4Q2hpbGQgPSAocmlnaHQobm9kZSkgPCB0aGlzLnNpemUoKSAmJiB0aGlzLmdyZWF0ZXIocmlnaHQobm9kZSksIGxlZnQobm9kZSkpKSA/IHJpZ2h0KG5vZGUpIDogbGVmdChub2RlKTtcbiAgICAgICAgICAgIHRoaXMuc3dhcChub2RlLCBtYXhDaGlsZCk7XG4gICAgICAgICAgICBub2RlID0gbWF4Q2hpbGQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlByaW9yaXR5UXVldWUgPSBQcmlvcml0eVF1ZXVlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJpb3JpdHktcXVldWUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgMjAyNSBnUlBDIGF1dGhvcnMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5XZWlnaHRlZFJvdW5kUm9iaW5Mb2FkQmFsYW5jaW5nQ29uZmlnID0gdm9pZCAwO1xuZXhwb3J0cy5zZXR1cCA9IHNldHVwO1xuY29uc3QgY29ubmVjdGl2aXR5X3N0YXRlXzEgPSByZXF1aXJlKFwiLi9jb25uZWN0aXZpdHktc3RhdGVcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IGR1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblwiKTtcbmNvbnN0IGxvYWRfYmFsYW5jZXJfMSA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXJcIik7XG5jb25zdCBsb2FkX2JhbGFuY2VyX3BpY2tfZmlyc3RfMSA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXItcGljay1maXJzdFwiKTtcbmNvbnN0IGxvZ2dpbmcgPSByZXF1aXJlKFwiLi9sb2dnaW5nXCIpO1xuY29uc3Qgb3JjYV8xID0gcmVxdWlyZShcIi4vb3JjYVwiKTtcbmNvbnN0IHBpY2tlcl8xID0gcmVxdWlyZShcIi4vcGlja2VyXCIpO1xuY29uc3QgcHJpb3JpdHlfcXVldWVfMSA9IHJlcXVpcmUoXCIuL3ByaW9yaXR5LXF1ZXVlXCIpO1xuY29uc3Qgc3ViY2hhbm5lbF9hZGRyZXNzXzEgPSByZXF1aXJlKFwiLi9zdWJjaGFubmVsLWFkZHJlc3NcIik7XG5jb25zdCBUUkFDRVJfTkFNRSA9ICd3ZWlnaHRlZF9yb3VuZF9yb2Jpbic7XG5mdW5jdGlvbiB0cmFjZSh0ZXh0KSB7XG4gICAgbG9nZ2luZy50cmFjZShjb25zdGFudHNfMS5Mb2dWZXJib3NpdHkuREVCVUcsIFRSQUNFUl9OQU1FLCB0ZXh0KTtcbn1cbmNvbnN0IFRZUEVfTkFNRSA9ICd3ZWlnaHRlZF9yb3VuZF9yb2Jpbic7XG5jb25zdCBERUZBVUxUX09PQl9SRVBPUlRJTkdfUEVSSU9EX01TID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX0JMQUNLT1VUX1BFUklPRF9NUyA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9XRUlHSFRfRVhQSVJBVElPTl9QRVJJT0RfTVMgPSAzICogNjAwMDA7XG5jb25zdCBERUZBVUxUX1dFSUdIVF9VUERBVEVfUEVSSU9EX01TID0gMTAwMDtcbmNvbnN0IERFRkFVTFRfRVJST1JfVVRJTElaQVRJT05fUEVOQUxUWSA9IDE7XG5mdW5jdGlvbiB2YWxpZGF0ZUZpZWxkVHlwZShvYmosIGZpZWxkTmFtZSwgZXhwZWN0ZWRUeXBlKSB7XG4gICAgaWYgKGZpZWxkTmFtZSBpbiBvYmogJiZcbiAgICAgICAgb2JqW2ZpZWxkTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2Ygb2JqW2ZpZWxkTmFtZV0gIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdlaWdodGVkIHJvdW5kIHJvYmluIGNvbmZpZyAke2ZpZWxkTmFtZX0gcGFyc2UgZXJyb3I6IGV4cGVjdGVkICR7ZXhwZWN0ZWRUeXBlfSwgZ290ICR7dHlwZW9mIG9ialtmaWVsZE5hbWVdfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlRHVyYXRpb25GaWVsZChvYmosIGZpZWxkTmFtZSkge1xuICAgIGlmIChmaWVsZE5hbWUgaW4gb2JqICYmIG9ialtmaWVsZE5hbWVdICE9PSB1bmRlZmluZWQgJiYgb2JqW2ZpZWxkTmFtZV0gIT09IG51bGwpIHtcbiAgICAgICAgbGV0IGR1cmF0aW9uT2JqZWN0O1xuICAgICAgICBpZiAoKDAsIGR1cmF0aW9uXzEuaXNEdXJhdGlvbikob2JqW2ZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICBkdXJhdGlvbk9iamVjdCA9IG9ialtmaWVsZE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgwLCBkdXJhdGlvbl8xLmlzRHVyYXRpb25NZXNzYWdlKShvYmpbZmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uT2JqZWN0ID0gKDAsIGR1cmF0aW9uXzEuZHVyYXRpb25NZXNzYWdlVG9EdXJhdGlvbikob2JqW2ZpZWxkTmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmpbZmllbGROYW1lXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZER1cmF0aW9uID0gKDAsIGR1cmF0aW9uXzEucGFyc2VEdXJhdGlvbikob2JqW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgaWYgKCFwYXJzZWREdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2VpZ2h0ZWQgcm91bmQgcm9iaW4gY29uZmlnICR7ZmllbGROYW1lfTogZmFpbGVkIHRvIHBhcnNlIGR1cmF0aW9uIHN0cmluZyAke29ialtmaWVsZE5hbWVdfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHVyYXRpb25PYmplY3QgPSBwYXJzZWREdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2VpZ2h0ZWQgcm91bmQgcm9iaW4gY29uZmlnICR7ZmllbGROYW1lfTogZXhwZWN0ZWQgZHVyYXRpb24sIGdvdCAke3R5cGVvZiBvYmpbZmllbGROYW1lXX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIGR1cmF0aW9uXzEuZHVyYXRpb25Ub01zKShkdXJhdGlvbk9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuY2xhc3MgV2VpZ2h0ZWRSb3VuZFJvYmluTG9hZEJhbGFuY2luZ0NvbmZpZyB7XG4gICAgY29uc3RydWN0b3IoZW5hYmxlT29iTG9hZFJlcG9ydCwgb29iTG9hZFJlcG9ydGluZ1BlcmlvZE1zLCBibGFja291dFBlcmlvZE1zLCB3ZWlnaHRFeHBpcmF0aW9uUGVyaW9kTXMsIHdlaWdodFVwZGF0ZVBlcmlvZE1zLCBlcnJvclV0aWxpemF0aW9uUGVuYWx0eSkge1xuICAgICAgICB0aGlzLmVuYWJsZU9vYkxvYWRSZXBvcnQgPSBlbmFibGVPb2JMb2FkUmVwb3J0ICE9PSBudWxsICYmIGVuYWJsZU9vYkxvYWRSZXBvcnQgIT09IHZvaWQgMCA/IGVuYWJsZU9vYkxvYWRSZXBvcnQgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5vb2JMb2FkUmVwb3J0aW5nUGVyaW9kTXMgPSBvb2JMb2FkUmVwb3J0aW5nUGVyaW9kTXMgIT09IG51bGwgJiYgb29iTG9hZFJlcG9ydGluZ1BlcmlvZE1zICE9PSB2b2lkIDAgPyBvb2JMb2FkUmVwb3J0aW5nUGVyaW9kTXMgOiBERUZBVUxUX09PQl9SRVBPUlRJTkdfUEVSSU9EX01TO1xuICAgICAgICB0aGlzLmJsYWNrb3V0UGVyaW9kTXMgPSBibGFja291dFBlcmlvZE1zICE9PSBudWxsICYmIGJsYWNrb3V0UGVyaW9kTXMgIT09IHZvaWQgMCA/IGJsYWNrb3V0UGVyaW9kTXMgOiBERUZBVUxUX0JMQUNLT1VUX1BFUklPRF9NUztcbiAgICAgICAgdGhpcy53ZWlnaHRFeHBpcmF0aW9uUGVyaW9kTXMgPSB3ZWlnaHRFeHBpcmF0aW9uUGVyaW9kTXMgIT09IG51bGwgJiYgd2VpZ2h0RXhwaXJhdGlvblBlcmlvZE1zICE9PSB2b2lkIDAgPyB3ZWlnaHRFeHBpcmF0aW9uUGVyaW9kTXMgOiBERUZBVUxUX1dFSUdIVF9FWFBJUkFUSU9OX1BFUklPRF9NUztcbiAgICAgICAgdGhpcy53ZWlnaHRVcGRhdGVQZXJpb2RNcyA9IE1hdGgubWF4KHdlaWdodFVwZGF0ZVBlcmlvZE1zICE9PSBudWxsICYmIHdlaWdodFVwZGF0ZVBlcmlvZE1zICE9PSB2b2lkIDAgPyB3ZWlnaHRVcGRhdGVQZXJpb2RNcyA6IERFRkFVTFRfV0VJR0hUX1VQREFURV9QRVJJT0RfTVMsIDEwMCk7XG4gICAgICAgIHRoaXMuZXJyb3JVdGlsaXphdGlvblBlbmFsdHkgPSBlcnJvclV0aWxpemF0aW9uUGVuYWx0eSAhPT0gbnVsbCAmJiBlcnJvclV0aWxpemF0aW9uUGVuYWx0eSAhPT0gdm9pZCAwID8gZXJyb3JVdGlsaXphdGlvblBlbmFsdHkgOiBERUZBVUxUX0VSUk9SX1VUSUxJWkFUSU9OX1BFTkFMVFk7XG4gICAgfVxuICAgIGdldExvYWRCYWxhbmNlck5hbWUoKSB7XG4gICAgICAgIHJldHVybiBUWVBFX05BTUU7XG4gICAgfVxuICAgIHRvSnNvbk9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVuYWJsZV9vb2JfbG9hZF9yZXBvcnQ6IHRoaXMuZW5hYmxlT29iTG9hZFJlcG9ydCxcbiAgICAgICAgICAgIG9vYl9sb2FkX3JlcG9ydGluZ19wZXJpb2Q6ICgwLCBkdXJhdGlvbl8xLmR1cmF0aW9uVG9TdHJpbmcpKCgwLCBkdXJhdGlvbl8xLm1zVG9EdXJhdGlvbikodGhpcy5vb2JMb2FkUmVwb3J0aW5nUGVyaW9kTXMpKSxcbiAgICAgICAgICAgIGJsYWNrb3V0X3BlcmlvZDogKDAsIGR1cmF0aW9uXzEuZHVyYXRpb25Ub1N0cmluZykoKDAsIGR1cmF0aW9uXzEubXNUb0R1cmF0aW9uKSh0aGlzLmJsYWNrb3V0UGVyaW9kTXMpKSxcbiAgICAgICAgICAgIHdlaWdodF9leHBpcmF0aW9uX3BlcmlvZDogKDAsIGR1cmF0aW9uXzEuZHVyYXRpb25Ub1N0cmluZykoKDAsIGR1cmF0aW9uXzEubXNUb0R1cmF0aW9uKSh0aGlzLndlaWdodEV4cGlyYXRpb25QZXJpb2RNcykpLFxuICAgICAgICAgICAgd2VpZ2h0X3VwZGF0ZV9wZXJpb2Q6ICgwLCBkdXJhdGlvbl8xLmR1cmF0aW9uVG9TdHJpbmcpKCgwLCBkdXJhdGlvbl8xLm1zVG9EdXJhdGlvbikodGhpcy53ZWlnaHRVcGRhdGVQZXJpb2RNcykpLFxuICAgICAgICAgICAgZXJyb3JfdXRpbGl6YXRpb25fcGVuYWx0eTogdGhpcy5lcnJvclV0aWxpemF0aW9uUGVuYWx0eVxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlRnJvbUpzb24ob2JqKSB7XG4gICAgICAgIHZhbGlkYXRlRmllbGRUeXBlKG9iaiwgJ2VuYWJsZV9vb2JfbG9hZF9yZXBvcnQnLCAnYm9vbGVhbicpO1xuICAgICAgICB2YWxpZGF0ZUZpZWxkVHlwZShvYmosICdlcnJvcl91dGlsaXphdGlvbl9wZW5hbHR5JywgJ251bWJlcicpO1xuICAgICAgICBpZiAob2JqLmVycm9yX3V0aWxpemF0aW9uX3BlbmFsdHkgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dlaWdodGVkIHJvdW5kIHJvYmluIGNvbmZpZyBlcnJvcl91dGlsaXphdGlvbl9wZW5hbHR5IDwgMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgV2VpZ2h0ZWRSb3VuZFJvYmluTG9hZEJhbGFuY2luZ0NvbmZpZyhvYmouZW5hYmxlX29vYl9sb2FkX3JlcG9ydCwgcGFyc2VEdXJhdGlvbkZpZWxkKG9iaiwgJ29vYl9sb2FkX3JlcG9ydGluZ19wZXJpb2QnKSwgcGFyc2VEdXJhdGlvbkZpZWxkKG9iaiwgJ2JsYWNrb3V0X3BlcmlvZCcpLCBwYXJzZUR1cmF0aW9uRmllbGQob2JqLCAnd2VpZ2h0X2V4cGlyYXRpb25fcGVyaW9kJyksIHBhcnNlRHVyYXRpb25GaWVsZChvYmosICd3ZWlnaHRfdXBkYXRlX3BlcmlvZCcpLCBvYmouZXJyb3JfdXRpbGl6YXRpb25fcGVuYWx0eSk7XG4gICAgfVxuICAgIGdldEVuYWJsZU9vYkxvYWRSZXBvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZU9vYkxvYWRSZXBvcnQ7XG4gICAgfVxuICAgIGdldE9vYkxvYWRSZXBvcnRpbmdQZXJpb2RNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub29iTG9hZFJlcG9ydGluZ1BlcmlvZE1zO1xuICAgIH1cbiAgICBnZXRCbGFja291dFBlcmlvZE1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ibGFja291dFBlcmlvZE1zO1xuICAgIH1cbiAgICBnZXRXZWlnaHRFeHBpcmF0aW9uUGVyaW9kTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlaWdodEV4cGlyYXRpb25QZXJpb2RNcztcbiAgICB9XG4gICAgZ2V0V2VpZ2h0VXBkYXRlUGVyaW9kTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlaWdodFVwZGF0ZVBlcmlvZE1zO1xuICAgIH1cbiAgICBnZXRFcnJvclV0aWxpemF0aW9uUGVuYWx0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JVdGlsaXphdGlvblBlbmFsdHk7XG4gICAgfVxufVxuZXhwb3J0cy5XZWlnaHRlZFJvdW5kUm9iaW5Mb2FkQmFsYW5jaW5nQ29uZmlnID0gV2VpZ2h0ZWRSb3VuZFJvYmluTG9hZEJhbGFuY2luZ0NvbmZpZztcbmNsYXNzIFdlaWdodGVkUm91bmRSb2JpblBpY2tlciB7XG4gICAgY29uc3RydWN0b3IoY2hpbGRyZW4sIG1ldHJpY3NIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMubWV0cmljc0hhbmRsZXIgPSBtZXRyaWNzSGFuZGxlcjtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IG5ldyBwcmlvcml0eV9xdWV1ZV8xLlByaW9yaXR5UXVldWUoKGEsIGIpID0+IGEuZGVhZGxpbmUgPCBiLmRlYWRsaW5lKTtcbiAgICAgICAgY29uc3QgcG9zaXRpdmVXZWlnaHQgPSBjaGlsZHJlbi5maWx0ZXIocGlja2VyID0+IHBpY2tlci53ZWlnaHQgPiAwKTtcbiAgICAgICAgbGV0IGF2ZXJhZ2VXZWlnaHQ7XG4gICAgICAgIGlmIChwb3NpdGl2ZVdlaWdodC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBhdmVyYWdlV2VpZ2h0ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCB3ZWlnaHRTdW0gPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHdlaWdodCB9IG9mIHBvc2l0aXZlV2VpZ2h0KSB7XG4gICAgICAgICAgICAgICAgd2VpZ2h0U3VtICs9IHdlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF2ZXJhZ2VXZWlnaHQgPSB3ZWlnaHRTdW0gLyBwb3NpdGl2ZVdlaWdodC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgcGVyaW9kID0gY2hpbGQud2VpZ2h0ID4gMCA/IDEgLyBjaGlsZC53ZWlnaHQgOiBhdmVyYWdlV2VpZ2h0O1xuICAgICAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IGNoaWxkLmVuZHBvaW50TmFtZSxcbiAgICAgICAgICAgICAgICBwaWNrZXI6IGNoaWxkLnBpY2tlcixcbiAgICAgICAgICAgICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgICAgICAgICAgICBkZWFkbGluZTogTWF0aC5yYW5kb20oKSAqIHBlcmlvZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGljayhwaWNrQXJncykge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMucXVldWUucG9wKCk7XG4gICAgICAgIHRoaXMucXVldWUucHVzaChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGVudHJ5KSwgeyBkZWFkbGluZTogZW50cnkuZGVhZGxpbmUgKyBlbnRyeS5wZXJpb2QgfSkpO1xuICAgICAgICBjb25zdCBjaGlsZFBpY2sgPSBlbnRyeS5waWNrZXIucGljayhwaWNrQXJncyk7XG4gICAgICAgIGlmIChjaGlsZFBpY2sucGlja1Jlc3VsdFR5cGUgPT09IHBpY2tlcl8xLlBpY2tSZXN1bHRUeXBlLkNPTVBMRVRFKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRyaWNzSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNoaWxkUGljayksIHsgb25DYWxsRW5kZWQ6ICgwLCBvcmNhXzEuY3JlYXRlTWV0cmljc1JlYWRlcikobG9hZFJlcG9ydCA9PiB0aGlzLm1ldHJpY3NIYW5kbGVyKGxvYWRSZXBvcnQsIGVudHJ5LmVuZHBvaW50TmFtZSksIGNoaWxkUGljay5vbkNhbGxFbmRlZCkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJjaGFubmVsV3JhcHBlciA9IGNoaWxkUGljay5zdWJjaGFubmVsO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNoaWxkUGljayksIHsgc3ViY2hhbm5lbDogc3ViY2hhbm5lbFdyYXBwZXIuZ2V0V3JhcHBlZFN1YmNoYW5uZWwoKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZFBpY2s7XG4gICAgICAgIH1cbiAgICB9XG59XG5jbGFzcyBXZWlnaHRlZFJvdW5kUm9iaW5Mb2FkQmFsYW5jZXIge1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250cm9sSGVscGVyKSB7XG4gICAgICAgIHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIgPSBjaGFubmVsQ29udHJvbEhlbHBlcjtcbiAgICAgICAgdGhpcy5sYXRlc3RDb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLklETEU7XG4gICAgICAgIHRoaXMudXBkYXRlc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG51bGw7XG4gICAgICAgIHRoaXMud2VpZ2h0VXBkYXRlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBjb3VudENoaWxkcmVuV2l0aFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmNoaWxkLmdldENvbm5lY3Rpdml0eVN0YXRlKCkgPT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICAgIHVwZGF0ZVdlaWdodChlbnRyeSwgbG9hZFJlcG9ydCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBxcHMgPSBsb2FkUmVwb3J0LnJwc19mcmFjdGlvbmFsO1xuICAgICAgICBsZXQgdXRpbGl6YXRpb24gPSBsb2FkUmVwb3J0LmFwcGxpY2F0aW9uX3V0aWxpemF0aW9uO1xuICAgICAgICBpZiAodXRpbGl6YXRpb24gPiAwICYmIHFwcyA+IDApIHtcbiAgICAgICAgICAgIHV0aWxpemF0aW9uICs9IChsb2FkUmVwb3J0LmVwcyAvIHFwcykgKiAoKF9iID0gKF9hID0gdGhpcy5sYXRlc3RDb25maWcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRFcnJvclV0aWxpemF0aW9uUGVuYWx0eSgpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdXZWlnaHQgPSB1dGlsaXphdGlvbiA9PT0gMCA/IDAgOiBxcHMgLyB1dGlsaXphdGlvbjtcbiAgICAgICAgaWYgKG5ld1dlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChlbnRyeS5ub25FbXB0eVNpbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbnRyeS5ub25FbXB0eVNpbmNlID0gbm93O1xuICAgICAgICB9XG4gICAgICAgIGVudHJ5Lmxhc3RVcGRhdGVkID0gbm93O1xuICAgICAgICBlbnRyeS53ZWlnaHQgPSBuZXdXZWlnaHQ7XG4gICAgfVxuICAgIGdldFdlaWdodChlbnRyeSkge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0Q29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgaWYgKG5vdyAtIGVudHJ5Lmxhc3RVcGRhdGVkLmdldFRpbWUoKSA+PSB0aGlzLmxhdGVzdENvbmZpZy5nZXRXZWlnaHRFeHBpcmF0aW9uUGVyaW9kTXMoKSkge1xuICAgICAgICAgICAgZW50cnkubm9uRW1wdHlTaW5jZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibGFja291dFBlcmlvZCA9IHRoaXMubGF0ZXN0Q29uZmlnLmdldEJsYWNrb3V0UGVyaW9kTXMoKTtcbiAgICAgICAgaWYgKGJsYWNrb3V0UGVyaW9kID4gMCAmJiAoZW50cnkubm9uRW1wdHlTaW5jZSA9PT0gbnVsbCB8fCBub3cgLSBlbnRyeS5ub25FbXB0eVNpbmNlLmdldFRpbWUoKSA8IGJsYWNrb3V0UGVyaW9kKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LndlaWdodDtcbiAgICB9XG4gICAgY2FsY3VsYXRlQW5kVXBkYXRlU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZXNQYXVzZWQgfHwgIXRoaXMubGF0ZXN0Q29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY291bnRDaGlsZHJlbldpdGhTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB3ZWlnaHRlZFBpY2tlcnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2VuZHBvaW50LCBlbnRyeV0gb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5jaGlsZC5nZXRDb25uZWN0aXZpdHlTdGF0ZSgpICE9PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2VpZ2h0ZWRQaWNrZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IGVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICBwaWNrZXI6IGVudHJ5LmNoaWxkLmdldFBpY2tlcigpLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IHRoaXMuZ2V0V2VpZ2h0KGVudHJ5KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhY2UoJ0NyZWF0ZWQgcGlja2VyIHdpdGggd2VpZ2h0czogJyArIHdlaWdodGVkUGlja2Vycy5tYXAoZW50cnkgPT4gZW50cnkuZW5kcG9pbnROYW1lICsgJzonICsgZW50cnkud2VpZ2h0KS5qb2luKCcsJykpO1xuICAgICAgICAgICAgbGV0IG1ldHJpY3NIYW5kbGVyO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxhdGVzdENvbmZpZy5nZXRFbmFibGVPb2JMb2FkUmVwb3J0KCkpIHtcbiAgICAgICAgICAgICAgICBtZXRyaWNzSGFuZGxlciA9IChsb2FkUmVwb3J0LCBlbmRwb2ludE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRFbnRyeSA9IHRoaXMuY2hpbGRyZW4uZ2V0KGVuZHBvaW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVdlaWdodChjaGlsZEVudHJ5LCBsb2FkUmVwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXRyaWNzSGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZLCBuZXcgV2VpZ2h0ZWRSb3VuZFJvYmluUGlja2VyKHdlaWdodGVkUGlja2VycywgbWV0cmljc0hhbmRsZXIpLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvdW50Q2hpbGRyZW5XaXRoU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuQ09OTkVDVElORykgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLkNPTk5FQ1RJTkcsIG5ldyBwaWNrZXJfMS5RdWV1ZVBpY2tlcih0aGlzKSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb3VudENoaWxkcmVuV2l0aFN0YXRlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlRSQU5TSUVOVF9GQUlMVVJFKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGB3ZWlnaHRlZF9yb3VuZF9yb2JpbjogTm8gY29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gTGFzdCBlcnJvcjogJHt0aGlzLmxhc3RFcnJvcn1gO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSwgbmV3IHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyKHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICB9KSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRSwgbmV3IHBpY2tlcl8xLlF1ZXVlUGlja2VyKHRoaXMpLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICAvKiByb3VuZF9yb2JpbiBzaG91bGQga2VlcCBhbGwgY2hpbGRyZW4gY29ubmVjdGVkLCB0aGlzIGlzIGhvdyB3ZSBkbyB0aGF0LlxuICAgICAgICAgICogV2UgY2FuJ3QgZG8gdGhpcyBtb3JlIGVmZmljaWVudGx5IGluIHRoZSBpbmRpdmlkdWFsIGNoaWxkJ3MgdXBkYXRlU3RhdGVcbiAgICAgICAgICAqIGNhbGxiYWNrIGJlY2F1c2UgdGhhdCBkb2Vzbid0IGhhdmUgYSByZWZlcmVuY2UgdG8gd2hpY2ggY2hpbGQgdGhlIHN0YXRlXG4gICAgICAgICAgKiBjaGFuZ2UgaXMgYXNzb2NpYXRlZCB3aXRoLiAqL1xuICAgICAgICBmb3IgKGNvbnN0IHsgY2hpbGQgfSBvZiB0aGlzLmNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuZ2V0Q29ubmVjdGl2aXR5U3RhdGUoKSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuSURMRSkge1xuICAgICAgICAgICAgICAgIGNoaWxkLmV4aXRJZGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlU3RhdGUobmV3U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRyYWNlKGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlW3RoaXMuY3VycmVudFN0YXRlXSArXG4gICAgICAgICAgICAnIC0+ICcgK1xuICAgICAgICAgICAgY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGVbbmV3U3RhdGVdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgdGhpcy5jaGFubmVsQ29udHJvbEhlbHBlci51cGRhdGVTdGF0ZShuZXdTdGF0ZSwgcGlja2VyLCBlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICB1cGRhdGVBZGRyZXNzTGlzdChtYXliZUVuZHBvaW50TGlzdCwgbGJDb25maWcsIG9wdGlvbnMsIHJlc29sdXRpb25Ob3RlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICghKGxiQ29uZmlnIGluc3RhbmNlb2YgV2VpZ2h0ZWRSb3VuZFJvYmluTG9hZEJhbGFuY2luZ0NvbmZpZykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1heWJlRW5kcG9pbnRMaXN0Lm9rKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5UUkFOU0lFTlRfRkFJTFVSRSwgbmV3IHBpY2tlcl8xLlVuYXZhaWxhYmxlUGlja2VyKG1heWJlRW5kcG9pbnRMaXN0LmVycm9yKSwgbWF5YmVFbmRwb2ludExpc3QuZXJyb3IuZGV0YWlscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF5YmVFbmRwb2ludExpc3QudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgTm8gYWRkcmVzc2VzIHJlc29sdmVkLiBSZXNvbHV0aW9uIG5vdGU6ICR7cmVzb2x1dGlvbk5vdGV9YDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuVFJBTlNJRU5UX0ZBSUxVUkUsIG5ldyBwaWNrZXJfMS5VbmF2YWlsYWJsZVBpY2tlcih7IGRldGFpbHM6IGVycm9yTWVzc2FnZSB9KSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0cmFjZSgnQ29ubmVjdCB0byBlbmRwb2ludCBsaXN0ICcgKyBtYXliZUVuZHBvaW50TGlzdC52YWx1ZS5tYXAoc3ViY2hhbm5lbF9hZGRyZXNzXzEuZW5kcG9pbnRUb1N0cmluZykpO1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzZWVuRW5kcG9pbnROYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVzUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sYXRlc3RDb25maWcgPSBsYkNvbmZpZztcbiAgICAgICAgZm9yIChjb25zdCBlbmRwb2ludCBvZiBtYXliZUVuZHBvaW50TGlzdC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9ICgwLCBzdWJjaGFubmVsX2FkZHJlc3NfMS5lbmRwb2ludFRvU3RyaW5nKShlbmRwb2ludCk7XG4gICAgICAgICAgICBzZWVuRW5kcG9pbnROYW1lcy5hZGQobmFtZSk7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmNoaWxkcmVuLmdldChuYW1lKTtcbiAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQ6IG5ldyBsb2FkX2JhbGFuY2VyX3BpY2tfZmlyc3RfMS5MZWFmTG9hZEJhbGFuY2VyKGVuZHBvaW50LCAoMCwgbG9hZF9iYWxhbmNlcl8xLmNyZWF0ZUNoaWxkQ2hhbm5lbENvbnRyb2xIZWxwZXIpKHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlOiAoY29ubmVjdGl2aXR5U3RhdGUsIHBpY2tlciwgZXJyb3JNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgbmFtZSByZXNvbHV0aW9uIGlzIHJlcXVlc3RlZCBhZ2FpbiBhZnRlciBhY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY29ubmVjdGlvbnMgYXJlIGRyb3BwZWQuIFRoaXMgaXMgbW9yZSBhZ2dyZXNzaXZlIHRoYW4gbmVjZXNzYXJ5IHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFjY29tcGxpc2ggdGhhdCwgc28gd2UgYXJlIGNvdW50aW5nIG9uIHJlc29sdmVycyB0byBoYXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlYXNvbmFibGUgcmF0ZSBsaW1pdHMuICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YXRlID09PSBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZS5SRUFEWSAmJiBjb25uZWN0aXZpdHlTdGF0ZSAhPT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFubmVsQ29udHJvbEhlbHBlci5yZXF1ZXN0UmVyZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aXZpdHlTdGF0ZSA9PT0gY29ubmVjdGl2aXR5X3N0YXRlXzEuQ29ubmVjdGl2aXR5U3RhdGUuUkVBRFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkubm9uRW1wdHlTaW5jZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdWJjaGFubmVsOiAoc3ViY2hhbm5lbEFkZHJlc3MsIHN1YmNoYW5uZWxBcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViY2hhbm5lbCA9IHRoaXMuY2hhbm5lbENvbnRyb2xIZWxwZXIuY3JlYXRlU3ViY2hhbm5lbChzdWJjaGFubmVsQWRkcmVzcywgc3ViY2hhbm5lbEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSA9PT0gbnVsbCB8fCBlbnRyeSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZW50cnkub29iTWV0cmljc0xpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgb3JjYV8xLk9yY2FPb2JNZXRyaWNzU3ViY2hhbm5lbFdyYXBwZXIoc3ViY2hhbm5lbCwgZW50cnkub29iTWV0cmljc0xpc3RlbmVyLCB0aGlzLmxhdGVzdENvbmZpZy5nZXRPb2JMb2FkUmVwb3J0aW5nUGVyaW9kTXMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViY2hhbm5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLCBvcHRpb25zLCByZXNvbHV0aW9uTm90ZSksXG4gICAgICAgICAgICAgICAgICAgIGxhc3RVcGRhdGVkOiBub3csXG4gICAgICAgICAgICAgICAgICAgIG5vbkVtcHR5U2luY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgb29iTWV0cmljc0xpc3RlbmVyOiBudWxsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNldChuYW1lLCBlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGJDb25maWcuZ2V0RW5hYmxlT29iTG9hZFJlcG9ydCgpKSB7XG4gICAgICAgICAgICAgICAgZW50cnkub29iTWV0cmljc0xpc3RlbmVyID0gbG9hZFJlcG9ydCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlV2VpZ2h0KGVudHJ5LCBsb2FkUmVwb3J0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZW50cnkub29iTWV0cmljc0xpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtlbmRwb2ludE5hbWUsIGVudHJ5XSBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoc2VlbkVuZHBvaW50TmFtZXMuaGFzKGVuZHBvaW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5jaGlsZC5zdGFydENvbm5lY3RpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVudHJ5LmNoaWxkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmRlbGV0ZShlbmRwb2ludE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIGlmICh0aGlzLndlaWdodFVwZGF0ZVRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMud2VpZ2h0VXBkYXRlVGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2VpZ2h0VXBkYXRlVGltZXIgPSAoX2IgPSAoX2EgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGUgPT09IGNvbm5lY3Rpdml0eV9zdGF0ZV8xLkNvbm5lY3Rpdml0eVN0YXRlLlJFQURZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBsYkNvbmZpZy5nZXRXZWlnaHRVcGRhdGVQZXJpb2RNcygpKSkudW5yZWYpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGV4aXRJZGxlKCkge1xuICAgICAgICAvKiBUaGUgd2VpZ2h0ZWRfcm91bmRfcm9iaW4gTEIgcG9saWN5IGlzIG9ubHkgaW4gdGhlIElETEUgc3RhdGUgaWYgaXQgaGFzXG4gICAgICAgICAqIG5vIGFkZHJlc3NlcyB0byB0cnkgdG8gY29ubmVjdCB0byBhbmQgaXQgaGFzIG5vIHBpY2tlZCBzdWJjaGFubmVsLlxuICAgICAgICAgKiBJbiB0aGF0IGNhc2UsIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgYWN0aW9uIHRoYXQgY2FuIGJlIHRha2VuIGhlcmUuICovXG4gICAgfVxuICAgIHJlc2V0QmFja29mZigpIHtcbiAgICAgICAgLy8gVGhpcyBMQiBwb2xpY3kgaGFzIG5vIGJhY2tvZmYgdG8gcmVzZXRcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmNoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBlbnRyeS5jaGlsZC5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy53ZWlnaHRVcGRhdGVUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLndlaWdodFVwZGF0ZVRpbWVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIFRZUEVfTkFNRTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZXR1cCgpIHtcbiAgICAoMCwgbG9hZF9iYWxhbmNlcl8xLnJlZ2lzdGVyTG9hZEJhbGFuY2VyVHlwZSkoVFlQRV9OQU1FLCBXZWlnaHRlZFJvdW5kUm9iaW5Mb2FkQmFsYW5jZXIsIFdlaWdodGVkUm91bmRSb2JpbkxvYWRCYWxhbmNpbmdDb25maWcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9hZC1iYWxhbmNlci13ZWlnaHRlZC1yb3VuZC1yb2Jpbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCAyMDE5IGdSUEMgYXV0aG9ycy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmV4cGVyaW1lbnRhbCA9IGV4cG9ydHMuU2VydmVyTWV0cmljUmVjb3JkZXIgPSBleHBvcnRzLlNlcnZlckludGVyY2VwdGluZ0NhbGwgPSBleHBvcnRzLlJlc3BvbmRlckJ1aWxkZXIgPSBleHBvcnRzLlNlcnZlckxpc3RlbmVyQnVpbGRlciA9IGV4cG9ydHMuYWRkQWRtaW5TZXJ2aWNlc1RvU2VydmVyID0gZXhwb3J0cy5nZXRDaGFubmVsekhhbmRsZXJzID0gZXhwb3J0cy5nZXRDaGFubmVselNlcnZpY2VEZWZpbml0aW9uID0gZXhwb3J0cy5JbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25FcnJvciA9IGV4cG9ydHMuSW50ZXJjZXB0aW5nQ2FsbCA9IGV4cG9ydHMuUmVxdWVzdGVyQnVpbGRlciA9IGV4cG9ydHMuTGlzdGVuZXJCdWlsZGVyID0gZXhwb3J0cy5TdGF0dXNCdWlsZGVyID0gZXhwb3J0cy5nZXRDbGllbnRDaGFubmVsID0gZXhwb3J0cy5TZXJ2ZXJDcmVkZW50aWFscyA9IGV4cG9ydHMuU2VydmVyID0gZXhwb3J0cy5zZXRMb2dWZXJib3NpdHkgPSBleHBvcnRzLnNldExvZ2dlciA9IGV4cG9ydHMubG9hZCA9IGV4cG9ydHMubG9hZE9iamVjdCA9IGV4cG9ydHMuQ2FsbENyZWRlbnRpYWxzID0gZXhwb3J0cy5DaGFubmVsQ3JlZGVudGlhbHMgPSBleHBvcnRzLndhaXRGb3JDbGllbnRSZWFkeSA9IGV4cG9ydHMuY2xvc2VDbGllbnQgPSBleHBvcnRzLkNoYW5uZWwgPSBleHBvcnRzLm1ha2VHZW5lcmljQ2xpZW50Q29uc3RydWN0b3IgPSBleHBvcnRzLm1ha2VDbGllbnRDb25zdHJ1Y3RvciA9IGV4cG9ydHMubG9hZFBhY2thZ2VEZWZpbml0aW9uID0gZXhwb3J0cy5DbGllbnQgPSBleHBvcnRzLmNvbXByZXNzaW9uQWxnb3JpdGhtcyA9IGV4cG9ydHMucHJvcGFnYXRlID0gZXhwb3J0cy5jb25uZWN0aXZpdHlTdGF0ZSA9IGV4cG9ydHMuc3RhdHVzID0gZXhwb3J0cy5sb2dWZXJib3NpdHkgPSBleHBvcnRzLk1ldGFkYXRhID0gZXhwb3J0cy5jcmVkZW50aWFscyA9IHZvaWQgMDtcbmNvbnN0IGNhbGxfY3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL2NhbGwtY3JlZGVudGlhbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDYWxsQ3JlZGVudGlhbHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxfY3JlZGVudGlhbHNfMS5DYWxsQ3JlZGVudGlhbHM7IH0gfSk7XG5jb25zdCBjaGFubmVsXzEgPSByZXF1aXJlKFwiLi9jaGFubmVsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhbm5lbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hhbm5lbF8xLkNoYW5uZWxJbXBsZW1lbnRhdGlvbjsgfSB9KTtcbmNvbnN0IGNvbXByZXNzaW9uX2FsZ29yaXRobXNfMSA9IHJlcXVpcmUoXCIuL2NvbXByZXNzaW9uLWFsZ29yaXRobXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wcmVzc2lvbkFsZ29yaXRobXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfMS5Db21wcmVzc2lvbkFsZ29yaXRobXM7IH0gfSk7XG5jb25zdCBjb25uZWN0aXZpdHlfc3RhdGVfMSA9IHJlcXVpcmUoXCIuL2Nvbm5lY3Rpdml0eS1zdGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbm5lY3Rpdml0eVN0YXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25uZWN0aXZpdHlfc3RhdGVfMS5Db25uZWN0aXZpdHlTdGF0ZTsgfSB9KTtcbmNvbnN0IGNoYW5uZWxfY3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL2NoYW5uZWwtY3JlZGVudGlhbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDaGFubmVsQ3JlZGVudGlhbHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoYW5uZWxfY3JlZGVudGlhbHNfMS5DaGFubmVsQ3JlZGVudGlhbHM7IH0gfSk7XG5jb25zdCBjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xpZW50XzEuQ2xpZW50OyB9IH0pO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2dWZXJib3NpdHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnN0YW50c18xLkxvZ1ZlcmJvc2l0eTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0YXR1c1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuU3RhdHVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvcGFnYXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5Qcm9wYWdhdGU7IH0gfSk7XG5jb25zdCBsb2dnaW5nID0gcmVxdWlyZShcIi4vbG9nZ2luZ1wiKTtcbmNvbnN0IG1ha2VfY2xpZW50XzEgPSByZXF1aXJlKFwiLi9tYWtlLWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvYWRQYWNrYWdlRGVmaW5pdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFrZV9jbGllbnRfMS5sb2FkUGFja2FnZURlZmluaXRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWtlQ2xpZW50Q29uc3RydWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ha2VfY2xpZW50XzEubWFrZUNsaWVudENvbnN0cnVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFrZUdlbmVyaWNDbGllbnRDb25zdHJ1Y3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFrZV9jbGllbnRfMS5tYWtlQ2xpZW50Q29uc3RydWN0b3I7IH0gfSk7XG5jb25zdCBtZXRhZGF0YV8xID0gcmVxdWlyZShcIi4vbWV0YWRhdGFcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0YWRhdGFfMS5NZXRhZGF0YTsgfSB9KTtcbmNvbnN0IHNlcnZlcl8xID0gcmVxdWlyZShcIi4vc2VydmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfMS5TZXJ2ZXI7IH0gfSk7XG5jb25zdCBzZXJ2ZXJfY3JlZGVudGlhbHNfMSA9IHJlcXVpcmUoXCIuL3NlcnZlci1jcmVkZW50aWFsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNlcnZlckNyZWRlbnRpYWxzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfY3JlZGVudGlhbHNfMS5TZXJ2ZXJDcmVkZW50aWFsczsgfSB9KTtcbmNvbnN0IHN0YXR1c19idWlsZGVyXzEgPSByZXF1aXJlKFwiLi9zdGF0dXMtYnVpbGRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlN0YXR1c0J1aWxkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0YXR1c19idWlsZGVyXzEuU3RhdHVzQnVpbGRlcjsgfSB9KTtcbi8qKioqIENsaWVudCBDcmVkZW50aWFscyAqKioqL1xuLy8gVXNpbmcgYXNzaWduIG9ubHkgY29waWVzIGVudW1lcmFibGUgcHJvcGVydGllcywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50XG5leHBvcnRzLmNyZWRlbnRpYWxzID0ge1xuICAgIC8qKlxuICAgICAqIENvbWJpbmUgYSBDaGFubmVsQ3JlZGVudGlhbHMgd2l0aCBhbnkgbnVtYmVyIG9mIENhbGxDcmVkZW50aWFscyBpbnRvIGFcbiAgICAgKiBzaW5nbGUgQ2hhbm5lbENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gY2hhbm5lbENyZWRlbnRpYWxzIFRoZSBDaGFubmVsQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBjYWxsQ3JlZGVudGlhbHMgQW55IG51bWJlciBvZiBDYWxsQ3JlZGVudGlhbHMgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJuIFRoZSByZXN1bHRpbmcgQ2hhbm5lbENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb21iaW5lQ2hhbm5lbENyZWRlbnRpYWxzOiAoY2hhbm5lbENyZWRlbnRpYWxzLCAuLi5jYWxsQ3JlZGVudGlhbHMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxDcmVkZW50aWFscy5yZWR1Y2UoKGFjYywgb3RoZXIpID0+IGFjYy5jb21wb3NlKG90aGVyKSwgY2hhbm5lbENyZWRlbnRpYWxzKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENvbWJpbmUgYW55IG51bWJlciBvZiBDYWxsQ3JlZGVudGlhbHMgaW50byBhIHNpbmdsZSBDYWxsQ3JlZGVudGlhbHNcbiAgICAgKiBvYmplY3QuXG4gICAgICogQHBhcmFtIGZpcnN0IFRoZSBmaXJzdCBDYWxsQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsIEFueSBudW1iZXIgb2YgYWRkaXRpb25hbCBDYWxsQ3JlZGVudGlhbHMgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJuIFRoZSByZXN1bHRpbmcgQ2FsbENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb21iaW5lQ2FsbENyZWRlbnRpYWxzOiAoZmlyc3QsIC4uLmFkZGl0aW9uYWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFkZGl0aW9uYWwucmVkdWNlKChhY2MsIG90aGVyKSA9PiBhY2MuY29tcG9zZShvdGhlciksIGZpcnN0KTtcbiAgICB9LFxuICAgIC8vIGZyb20gY2hhbm5lbC1jcmVkZW50aWFscy50c1xuICAgIGNyZWF0ZUluc2VjdXJlOiBjaGFubmVsX2NyZWRlbnRpYWxzXzEuQ2hhbm5lbENyZWRlbnRpYWxzLmNyZWF0ZUluc2VjdXJlLFxuICAgIGNyZWF0ZVNzbDogY2hhbm5lbF9jcmVkZW50aWFsc18xLkNoYW5uZWxDcmVkZW50aWFscy5jcmVhdGVTc2wsXG4gICAgY3JlYXRlRnJvbVNlY3VyZUNvbnRleHQ6IGNoYW5uZWxfY3JlZGVudGlhbHNfMS5DaGFubmVsQ3JlZGVudGlhbHMuY3JlYXRlRnJvbVNlY3VyZUNvbnRleHQsXG4gICAgLy8gZnJvbSBjYWxsLWNyZWRlbnRpYWxzLnRzXG4gICAgY3JlYXRlRnJvbU1ldGFkYXRhR2VuZXJhdG9yOiBjYWxsX2NyZWRlbnRpYWxzXzEuQ2FsbENyZWRlbnRpYWxzLmNyZWF0ZUZyb21NZXRhZGF0YUdlbmVyYXRvcixcbiAgICBjcmVhdGVGcm9tR29vZ2xlQ3JlZGVudGlhbDogY2FsbF9jcmVkZW50aWFsc18xLkNhbGxDcmVkZW50aWFscy5jcmVhdGVGcm9tR29vZ2xlQ3JlZGVudGlhbCxcbiAgICBjcmVhdGVFbXB0eTogY2FsbF9jcmVkZW50aWFsc18xLkNhbGxDcmVkZW50aWFscy5jcmVhdGVFbXB0eSxcbn07XG4vKipcbiAqIENsb3NlIGEgQ2xpZW50IG9iamVjdC5cbiAqIEBwYXJhbSBjbGllbnQgVGhlIGNsaWVudCB0byBjbG9zZS5cbiAqL1xuY29uc3QgY2xvc2VDbGllbnQgPSAoY2xpZW50KSA9PiBjbGllbnQuY2xvc2UoKTtcbmV4cG9ydHMuY2xvc2VDbGllbnQgPSBjbG9zZUNsaWVudDtcbmNvbnN0IHdhaXRGb3JDbGllbnRSZWFkeSA9IChjbGllbnQsIGRlYWRsaW5lLCBjYWxsYmFjaykgPT4gY2xpZW50LndhaXRGb3JSZWFkeShkZWFkbGluZSwgY2FsbGJhY2spO1xuZXhwb3J0cy53YWl0Rm9yQ2xpZW50UmVhZHkgPSB3YWl0Rm9yQ2xpZW50UmVhZHk7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qKioqIFVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gc3R1YnMgKioqKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmNvbnN0IGxvYWRPYmplY3QgPSAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdmFpbGFibGUgaW4gdGhpcyBsaWJyYXJ5LiBVc2UgQGdycGMvcHJvdG8tbG9hZGVyIGFuZCBsb2FkUGFja2FnZURlZmluaXRpb24gaW5zdGVhZCcpO1xufTtcbmV4cG9ydHMubG9hZE9iamVjdCA9IGxvYWRPYmplY3Q7XG5jb25zdCBsb2FkID0gKGZpbGVuYW1lLCBmb3JtYXQsIG9wdGlvbnMpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdmFpbGFibGUgaW4gdGhpcyBsaWJyYXJ5LiBVc2UgQGdycGMvcHJvdG8tbG9hZGVyIGFuZCBsb2FkUGFja2FnZURlZmluaXRpb24gaW5zdGVhZCcpO1xufTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5jb25zdCBzZXRMb2dnZXIgPSAobG9nZ2VyKSA9PiB7XG4gICAgbG9nZ2luZy5zZXRMb2dnZXIobG9nZ2VyKTtcbn07XG5leHBvcnRzLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbmNvbnN0IHNldExvZ1ZlcmJvc2l0eSA9ICh2ZXJib3NpdHkpID0+IHtcbiAgICBsb2dnaW5nLnNldExvZ2dlclZlcmJvc2l0eSh2ZXJib3NpdHkpO1xufTtcbmV4cG9ydHMuc2V0TG9nVmVyYm9zaXR5ID0gc2V0TG9nVmVyYm9zaXR5O1xuY29uc3QgZ2V0Q2xpZW50Q2hhbm5lbCA9IChjbGllbnQpID0+IHtcbiAgICByZXR1cm4gY2xpZW50XzEuQ2xpZW50LnByb3RvdHlwZS5nZXRDaGFubmVsLmNhbGwoY2xpZW50KTtcbn07XG5leHBvcnRzLmdldENsaWVudENoYW5uZWwgPSBnZXRDbGllbnRDaGFubmVsO1xudmFyIGNsaWVudF9pbnRlcmNlcHRvcnNfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC1pbnRlcmNlcHRvcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMaXN0ZW5lckJ1aWxkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWVudF9pbnRlcmNlcHRvcnNfMS5MaXN0ZW5lckJ1aWxkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXF1ZXN0ZXJCdWlsZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjbGllbnRfaW50ZXJjZXB0b3JzXzEuUmVxdWVzdGVyQnVpbGRlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkludGVyY2VwdGluZ0NhbGxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWVudF9pbnRlcmNlcHRvcnNfMS5JbnRlcmNlcHRpbmdDYWxsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW50ZXJjZXB0b3JDb25maWd1cmF0aW9uRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWVudF9pbnRlcmNlcHRvcnNfMS5JbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25FcnJvcjsgfSB9KTtcbnZhciBjaGFubmVsel8xID0gcmVxdWlyZShcIi4vY2hhbm5lbHpcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRDaGFubmVselNlcnZpY2VEZWZpbml0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGFubmVsel8xLmdldENoYW5uZWx6U2VydmljZURlZmluaXRpb247IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRDaGFubmVsekhhbmRsZXJzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjaGFubmVsel8xLmdldENoYW5uZWx6SGFuZGxlcnM7IH0gfSk7XG52YXIgYWRtaW5fMSA9IHJlcXVpcmUoXCIuL2FkbWluXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkQWRtaW5TZXJ2aWNlc1RvU2VydmVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhZG1pbl8xLmFkZEFkbWluU2VydmljZXNUb1NlcnZlcjsgfSB9KTtcbnZhciBzZXJ2ZXJfaW50ZXJjZXB0b3JzXzEgPSByZXF1aXJlKFwiLi9zZXJ2ZXItaW50ZXJjZXB0b3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmVyTGlzdGVuZXJCdWlsZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfaW50ZXJjZXB0b3JzXzEuU2VydmVyTGlzdGVuZXJCdWlsZGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVzcG9uZGVyQnVpbGRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VydmVyX2ludGVyY2VwdG9yc18xLlJlc3BvbmRlckJ1aWxkZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXJ2ZXJJbnRlcmNlcHRpbmdDYWxsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXJ2ZXJfaW50ZXJjZXB0b3JzXzEuU2VydmVySW50ZXJjZXB0aW5nQ2FsbDsgfSB9KTtcbnZhciBvcmNhXzEgPSByZXF1aXJlKFwiLi9vcmNhXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2VydmVyTWV0cmljUmVjb3JkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yY2FfMS5TZXJ2ZXJNZXRyaWNSZWNvcmRlcjsgfSB9KTtcbmNvbnN0IGV4cGVyaW1lbnRhbCA9IHJlcXVpcmUoXCIuL2V4cGVyaW1lbnRhbFwiKTtcbmV4cG9ydHMuZXhwZXJpbWVudGFsID0gZXhwZXJpbWVudGFsO1xuY29uc3QgcmVzb2x2ZXJfZG5zID0gcmVxdWlyZShcIi4vcmVzb2x2ZXItZG5zXCIpO1xuY29uc3QgcmVzb2x2ZXJfdWRzID0gcmVxdWlyZShcIi4vcmVzb2x2ZXItdWRzXCIpO1xuY29uc3QgcmVzb2x2ZXJfaXAgPSByZXF1aXJlKFwiLi9yZXNvbHZlci1pcFwiKTtcbmNvbnN0IGxvYWRfYmFsYW5jZXJfcGlja19maXJzdCA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXItcGljay1maXJzdFwiKTtcbmNvbnN0IGxvYWRfYmFsYW5jZXJfcm91bmRfcm9iaW4gPSByZXF1aXJlKFwiLi9sb2FkLWJhbGFuY2VyLXJvdW5kLXJvYmluXCIpO1xuY29uc3QgbG9hZF9iYWxhbmNlcl9vdXRsaWVyX2RldGVjdGlvbiA9IHJlcXVpcmUoXCIuL2xvYWQtYmFsYW5jZXItb3V0bGllci1kZXRlY3Rpb25cIik7XG5jb25zdCBsb2FkX2JhbGFuY2VyX3dlaWdodGVkX3JvdW5kX3JvYmluID0gcmVxdWlyZShcIi4vbG9hZC1iYWxhbmNlci13ZWlnaHRlZC1yb3VuZC1yb2JpblwiKTtcbmNvbnN0IGNoYW5uZWx6ID0gcmVxdWlyZShcIi4vY2hhbm5lbHpcIik7XG4oKCkgPT4ge1xuICAgIHJlc29sdmVyX2Rucy5zZXR1cCgpO1xuICAgIHJlc29sdmVyX3Vkcy5zZXR1cCgpO1xuICAgIHJlc29sdmVyX2lwLnNldHVwKCk7XG4gICAgbG9hZF9iYWxhbmNlcl9waWNrX2ZpcnN0LnNldHVwKCk7XG4gICAgbG9hZF9iYWxhbmNlcl9yb3VuZF9yb2Jpbi5zZXR1cCgpO1xuICAgIGxvYWRfYmFsYW5jZXJfb3V0bGllcl9kZXRlY3Rpb24uc2V0dXAoKTtcbiAgICBsb2FkX2JhbGFuY2VyX3dlaWdodGVkX3JvdW5kX3JvYmluLnNldHVwKCk7XG4gICAgY2hhbm5lbHouc2V0dXAoKTtcbn0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlU2VydmljZUNsaWVudENvbnN0cnVjdG9yID0gdm9pZCAwO1xuY29uc3QgZ3JwYyA9IHJlcXVpcmUoXCJAZ3JwYy9ncnBjLWpzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgc2VydmljZSBjbGllbnQgY29uc3RydWN0b3IgdGhhdCwgd2hlbiBpbnN0YW50aWF0ZWQsIGRvZXMgbm90IHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBhbnl0aGluZy5cbiAqIEFsbG93cyBmb3IgcGFzc2luZyBpbiB7QGxpbmsgQnVmZmVyfSBkaXJlY3RseSwgc2VyaWFsaXphdGlvbiBjYW4gYmUgaGFuZGxlZCB2aWEgcHJvdG9idWZqcyBvciBjdXN0b20gaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIEBwYXJhbSBwYXRoIHNlcnZpY2UgcGF0aFxuICogQHBhcmFtIG5hbWUgc2VydmljZSBuYW1lXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VDbGllbnRDb25zdHJ1Y3RvcihwYXRoLCBuYW1lKSB7XG4gICAgY29uc3Qgc2VydmljZURlZmluaXRpb24gPSB7XG4gICAgICAgIGV4cG9ydDoge1xuICAgICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgICAgICAgcmVxdWVzdFNlcmlhbGl6ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdERlc2VyaWFsaXplOiAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZVNlcmlhbGl6ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VEZXNlcmlhbGl6ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIGdycGMubWFrZUdlbmVyaWNDbGllbnRDb25zdHJ1Y3RvcihzZXJ2aWNlRGVmaW5pdGlvbiwgbmFtZSk7XG59XG5leHBvcnRzLmNyZWF0ZVNlcnZpY2VDbGllbnRDb25zdHJ1Y3RvciA9IGNyZWF0ZVNlcnZpY2VDbGllbnRDb25zdHJ1Y3Rvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS1zZXJ2aWNlLWNsaWVudC1jb25zdHJ1Y3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlT3RscEdycGNFeHBvcnRlclRyYW5zcG9ydCA9IGV4cG9ydHMuR3JwY0V4cG9ydGVyVHJhbnNwb3J0ID0gZXhwb3J0cy5jcmVhdGVFbXB0eU1ldGFkYXRhID0gZXhwb3J0cy5jcmVhdGVTc2xDcmVkZW50aWFscyA9IGV4cG9ydHMuY3JlYXRlSW5zZWN1cmVDcmVkZW50aWFscyA9IHZvaWQgMDtcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5jb25zdCBERUZBVUxUX1VTRVJfQUdFTlQgPSBgT1RlbC1PVExQLUV4cG9ydGVyLUphdmFTY3JpcHQvJHt2ZXJzaW9uXzEuVkVSU0lPTn1gO1xuZnVuY3Rpb24gY3JlYXRlVXNlckFnZW50KHVzZXJBZ2VudCkge1xuICAgIGlmICh1c2VyQWdlbnQpIHtcbiAgICAgICAgcmV0dXJuIGAke3VzZXJBZ2VudH0gJHtERUZBVUxUX1VTRVJfQUdFTlR9YDtcbiAgICB9XG4gICAgcmV0dXJuIERFRkFVTFRfVVNFUl9BR0VOVDtcbn1cbi8vIHZhbHVlcyB0YWtlbiBmcm9tICdAZ3JwYy9ncnBjLWpzYCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gcmVxdWlyZS9pbXBvcnQgaXQuXG5jb25zdCBHUlBDX0NPTVBSRVNTSU9OX05PTkUgPSAwO1xuY29uc3QgR1JQQ19DT01QUkVTU0lPTl9HWklQID0gMjtcbmZ1bmN0aW9uIHRvR3JwY0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKSB7XG4gICAgcmV0dXJuIGNvbXByZXNzaW9uID09PSAnZ3ppcCcgPyBHUlBDX0NPTVBSRVNTSU9OX0daSVAgOiBHUlBDX0NPTVBSRVNTSU9OX05PTkU7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnNlY3VyZUNyZWRlbnRpYWxzKCkge1xuICAgIC8vIExhenktbG9hZCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gcmVxdWlyZS9pbXBvcnQgJ0BncnBjL2dycGMtanMnIGJlZm9yZSBpdCBjYW4gYmUgd3JhcHBlZCBieSBpbnN0cnVtZW50YXRpb24uXG4gICAgY29uc3QgeyBjcmVkZW50aWFscyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICB9ID0gcmVxdWlyZSgnQGdycGMvZ3JwYy1qcycpO1xuICAgIHJldHVybiBjcmVkZW50aWFscy5jcmVhdGVJbnNlY3VyZSgpO1xufVxuZXhwb3J0cy5jcmVhdGVJbnNlY3VyZUNyZWRlbnRpYWxzID0gY3JlYXRlSW5zZWN1cmVDcmVkZW50aWFscztcbmZ1bmN0aW9uIGNyZWF0ZVNzbENyZWRlbnRpYWxzKHJvb3RDZXJ0LCBwcml2YXRlS2V5LCBjZXJ0Q2hhaW4pIHtcbiAgICAvLyBMYXp5LWxvYWQgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlcXVpcmUvaW1wb3J0ICdAZ3JwYy9ncnBjLWpzJyBiZWZvcmUgaXQgY2FuIGJlIHdyYXBwZWQgYnkgaW5zdHJ1bWVudGF0aW9uLlxuICAgIGNvbnN0IHsgY3JlZGVudGlhbHMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgfSA9IHJlcXVpcmUoJ0BncnBjL2dycGMtanMnKTtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMuY3JlYXRlU3NsKHJvb3RDZXJ0LCBwcml2YXRlS2V5LCBjZXJ0Q2hhaW4pO1xufVxuZXhwb3J0cy5jcmVhdGVTc2xDcmVkZW50aWFscyA9IGNyZWF0ZVNzbENyZWRlbnRpYWxzO1xuZnVuY3Rpb24gY3JlYXRlRW1wdHlNZXRhZGF0YSgpIHtcbiAgICAvLyBMYXp5LWxvYWQgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlcXVpcmUvaW1wb3J0ICdAZ3JwYy9ncnBjLWpzJyBiZWZvcmUgaXQgY2FuIGJlIHdyYXBwZWQgYnkgaW5zdHJ1bWVudGF0aW9uLlxuICAgIGNvbnN0IHsgTWV0YWRhdGEsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgfSA9IHJlcXVpcmUoJ0BncnBjL2dycGMtanMnKTtcbiAgICByZXR1cm4gbmV3IE1ldGFkYXRhKCk7XG59XG5leHBvcnRzLmNyZWF0ZUVtcHR5TWV0YWRhdGEgPSBjcmVhdGVFbXB0eU1ldGFkYXRhO1xuY2xhc3MgR3JwY0V4cG9ydGVyVHJhbnNwb3J0IHtcbiAgICBfcGFyYW1ldGVycztcbiAgICBfY2xpZW50O1xuICAgIF9tZXRhZGF0YTtcbiAgICBjb25zdHJ1Y3RvcihfcGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gX3BhcmFtZXRlcnM7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9jbGllbnQ/LmNsb3NlKCk7XG4gICAgfVxuICAgIHNlbmQoZGF0YSwgdGltZW91dE1pbGxpcykge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBmb3IgZ1JQQ1xuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBMYXp5IHJlcXVpcmUgdG8gZW5zdXJlIHRoYXQgZ3JwYyBpcyBub3QgbG9hZGVkIGJlZm9yZSBpbnN0cnVtZW50YXRpb25zIGNhbiB3cmFwIGl0XG4gICAgICAgICAgICBjb25zdCB7IGNyZWF0ZVNlcnZpY2VDbGllbnRDb25zdHJ1Y3RvcixcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgICAgICAgfSA9IHJlcXVpcmUoJy4vY3JlYXRlLXNlcnZpY2UtY2xpZW50LWNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhID0gdGhpcy5fcGFyYW1ldGVycy5tZXRhZGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjbGllbnRDb25zdHJ1Y3RvciA9IGNyZWF0ZVNlcnZpY2VDbGllbnRDb25zdHJ1Y3Rvcih0aGlzLl9wYXJhbWV0ZXJzLmdycGNQYXRoLCB0aGlzLl9wYXJhbWV0ZXJzLmdycGNOYW1lKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gbmV3IGNsaWVudENvbnN0cnVjdG9yKHRoaXMuX3BhcmFtZXRlcnMuYWRkcmVzcywgdGhpcy5fcGFyYW1ldGVycy5jcmVkZW50aWFscygpLCB7XG4gICAgICAgICAgICAgICAgICAgICdncnBjLmRlZmF1bHRfY29tcHJlc3Npb25fYWxnb3JpdGhtJzogdG9HcnBjQ29tcHJlc3Npb24odGhpcy5fcGFyYW1ldGVycy5jb21wcmVzc2lvbiksXG4gICAgICAgICAgICAgICAgICAgICdncnBjLnByaW1hcnlfdXNlcl9hZ2VudCc6IGNyZWF0ZVVzZXJBZ2VudCh0aGlzLl9wYXJhbWV0ZXJzLnVzZXJBZ2VudCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TWlsbGlzO1xuICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignbWV0YWRhdGEgd2FzIG51bGwnKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIFRoZSBnUlBDIGNsaWVudCBjb25zdHJ1Y3RvciBpcyBjcmVhdGVkIG9uIHJ1bnRpbWUsIHNvIHdlIGRvbid0IGhhdmUgYW55IHR5cGVzIGZvciB0aGUgcmVzdWx0aW5nIGNsaWVudC5cbiAgICAgICAgICAgIHRoaXMuX2NsaWVudC5leHBvcnQoYnVmZmVyLCB0aGlzLl9tZXRhZGF0YSwgeyBkZWFkbGluZTogZGVhZGxpbmUgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuR3JwY0V4cG9ydGVyVHJhbnNwb3J0ID0gR3JwY0V4cG9ydGVyVHJhbnNwb3J0O1xuZnVuY3Rpb24gY3JlYXRlT3RscEdycGNFeHBvcnRlclRyYW5zcG9ydChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHcnBjRXhwb3J0ZXJUcmFuc3BvcnQob3B0aW9ucyk7XG59XG5leHBvcnRzLmNyZWF0ZU90bHBHcnBjRXhwb3J0ZXJUcmFuc3BvcnQgPSBjcmVhdGVPdGxwR3JwY0V4cG9ydGVyVHJhbnNwb3J0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JwYy1leHBvcnRlci10cmFuc3BvcnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE90bHBHcnBjRGVmYXVsdENvbmZpZ3VyYXRpb24gPSBleHBvcnRzLm1lcmdlT3RscEdycGNDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gZXhwb3J0cy52YWxpZGF0ZUFuZE5vcm1hbGl6ZVVybCA9IHZvaWQgMDtcbmNvbnN0IG90bHBfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZVwiKTtcbmNvbnN0IGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEgPSByZXF1aXJlKFwiLi4vZ3JwYy1leHBvcnRlci10cmFuc3BvcnRcIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5mdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVVybCh1cmwpIHtcbiAgICB1cmwgPSB1cmwudHJpbSgpO1xuICAgIGNvbnN0IGhhc1Byb3RvY29sID0gdXJsLm1hdGNoKC9eKFtcXHddezEsOH0pOlxcL1xcLy8pO1xuICAgIGlmICghaGFzUHJvdG9jb2wpIHtcbiAgICAgICAgdXJsID0gYGh0dHBzOi8vJHt1cmx9YDtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IHVybF8xLlVSTCh1cmwpO1xuICAgIGlmICh0YXJnZXQucHJvdG9jb2wgPT09ICd1bml4OicpIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5wYXRobmFtZSAmJiB0YXJnZXQucGF0aG5hbWUgIT09ICcvJykge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ1VSTCBwYXRoIHNob3VsZCBub3QgYmUgc2V0IHdoZW4gdXNpbmcgZ3JwYywgdGhlIHBhdGggcGFydCBvZiB0aGUgVVJMIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5wcm90b2NvbCAhPT0gJycgJiYgIXRhcmdldC5wcm90b2NvbD8ubWF0Y2goL14oaHR0cClzPzokLykpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdVUkwgcHJvdG9jb2wgc2hvdWxkIGJlIGh0dHAocyk6Ly8uIFVzaW5nIGh0dHA6Ly8uJyk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQuaG9zdDtcbn1cbmV4cG9ydHMudmFsaWRhdGVBbmROb3JtYWxpemVVcmwgPSB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVVybDtcbmZ1bmN0aW9uIG92ZXJyaWRlTWV0YWRhdGFFbnRyaWVzSWZOb3RQcmVzZW50KG1ldGFkYXRhLCBhZGRpdGlvbmFsTWV0YWRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsTWV0YWRhdGEuZ2V0TWFwKCkpKSB7XG4gICAgICAgIC8vIG9ubHkgb3ZlcnJpZGUgd2l0aCBlbnYgdmFyIGRhdGEgaWYgdGhlIGtleSBoYXMgbm8gdmFsdWVzLlxuICAgICAgICAvLyBub3QgdXNpbmcgTWV0YWRhdGEubWVyZ2UoKSBhcyBpdCB3aWxsIGtlZXAgYm90aCB2YWx1ZXMuXG4gICAgICAgIGlmIChtZXRhZGF0YS5nZXQoa2V5KS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZU90bHBHcnBjQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cyh1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLCBmYWxsYmFja0NvbmZpZ3VyYXRpb24sIGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgcmF3VXJsID0gdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi51cmwgPz9cbiAgICAgICAgZmFsbGJhY2tDb25maWd1cmF0aW9uLnVybCA/P1xuICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbi51cmw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKDAsIG90bHBfZXhwb3J0ZXJfYmFzZV8xLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMpKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24sIGZhbGxiYWNrQ29uZmlndXJhdGlvbiwgZGVmYXVsdENvbmZpZ3VyYXRpb24pLFxuICAgICAgICBtZXRhZGF0YTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5tZXRhZGF0YSgpO1xuICAgICAgICAgICAgb3ZlcnJpZGVNZXRhZGF0YUVudHJpZXNJZk5vdFByZXNlbnQobWV0YWRhdGEsIFxuICAgICAgICAgICAgLy8gY2xvbmUgdG8gZW5zdXJlIHdlIGRvbid0IG1vZGlmeSB3aGF0IHRoZSB1c2VyIGdhdmUgdXMgaW4gY2FzZSB0aGV5IGhvbGQgb24gdG8gdGhlIHJldHVybmVkIHJlZmVyZW5jZVxuICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi5tZXRhZGF0YT8uKCkuY2xvbmUoKSA/PyAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVFbXB0eU1ldGFkYXRhKSgpKTtcbiAgICAgICAgICAgIG92ZXJyaWRlTWV0YWRhdGFFbnRyaWVzSWZOb3RQcmVzZW50KG1ldGFkYXRhLCBmYWxsYmFja0NvbmZpZ3VyYXRpb24ubWV0YWRhdGE/LigpID8/ICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUVtcHR5TWV0YWRhdGEpKCkpO1xuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICB9LFxuICAgICAgICB1cmw6IHZhbGlkYXRlQW5kTm9ybWFsaXplVXJsKHJhd1VybCksXG4gICAgICAgIGNyZWRlbnRpYWxzOiB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLmNyZWRlbnRpYWxzID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24uY3JlZGVudGlhbHM/LihyYXdVcmwpID8/XG4gICAgICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbi5jcmVkZW50aWFscyhyYXdVcmwpLFxuICAgICAgICB1c2VyQWdlbnQ6IHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24udXNlckFnZW50LFxuICAgIH07XG59XG5leHBvcnRzLm1lcmdlT3RscEdycGNDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gbWVyZ2VPdGxwR3JwY0NvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHM7XG5mdW5jdGlvbiBnZXRPdGxwR3JwY0RlZmF1bHRDb25maWd1cmF0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLigwLCBvdGxwX2V4cG9ydGVyX2Jhc2VfMS5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMpKCksXG4gICAgICAgIG1ldGFkYXRhOiAoKSA9PiAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVFbXB0eU1ldGFkYXRhKSgpLFxuICAgICAgICB1cmw6ICdodHRwOi8vbG9jYWxob3N0OjQzMTcnLFxuICAgICAgICBjcmVkZW50aWFsczogKHVybCkgPT4ge1xuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gKDAsIGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlSW5zZWN1cmVDcmVkZW50aWFscykoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVTc2xDcmVkZW50aWFscykoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRPdGxwR3JwY0RlZmF1bHRDb25maWd1cmF0aW9uID0gZ2V0T3RscEdycGNEZWZhdWx0Q29uZmlndXJhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtZ3JwYy1jb25maWd1cmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE90bHBHcnBjQ29uZmlndXJhdGlvbkZyb21FbnYgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEgPSByZXF1aXJlKFwiLi4vZ3JwYy1leHBvcnRlci10cmFuc3BvcnRcIik7XG5jb25zdCBub2RlX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2Uvbm9kZS1odHRwXCIpO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5mdW5jdGlvbiBmYWxsYmFja0lmTnVsbGlzaE9yQmxhbmsoc2lnbmFsU3BlY2lmaWMsIG5vblNpZ25hbFNwZWNpZmljKSB7XG4gICAgaWYgKHNpZ25hbFNwZWNpZmljICE9IG51bGwgJiYgc2lnbmFsU3BlY2lmaWMgIT09ICcnKSB7XG4gICAgICAgIHJldHVybiBzaWduYWxTcGVjaWZpYztcbiAgICB9XG4gICAgaWYgKG5vblNpZ25hbFNwZWNpZmljICE9IG51bGwgJiYgbm9uU2lnbmFsU3BlY2lmaWMgIT09ICcnKSB7XG4gICAgICAgIHJldHVybiBub25TaWduYWxTcGVjaWZpYztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldE1ldGFkYXRhRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzID0gcHJvY2Vzcy5lbnZbYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0hFQURFUlNgXT8udHJpbSgpO1xuICAgIGNvbnN0IG5vblNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyA9IHByb2Nlc3MuZW52WydPVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSUyddPy50cmltKCk7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNIZWFkZXJzID0gKDAsIGNvcmVfMS5wYXJzZUtleVBhaXJzSW50b1JlY29yZCkoc2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzKTtcbiAgICBjb25zdCBub25TaWduYWxTcGVjaWZpY0hlYWRlcnMgPSAoMCwgY29yZV8xLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkKShub25TaWduYWxTcGVjaWZpY1Jhd0hlYWRlcnMpO1xuICAgIGlmIChPYmplY3Qua2V5cyhzaWduYWxTcGVjaWZpY0hlYWRlcnMpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBPYmplY3Qua2V5cyhub25TaWduYWxTcGVjaWZpY0hlYWRlcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtZXJnZUhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBub25TaWduYWxTcGVjaWZpY0hlYWRlcnMsIHNpZ25hbFNwZWNpZmljSGVhZGVycyk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVFbXB0eU1ldGFkYXRhKSgpO1xuICAgIC8vIGZvciB0aGlzIHRvIHdvcmssIG1ldGFkYXRhIE1VU1QgYmUgZW1wdHkgLSBvdGhlcndpc2UgYE1ldGFkYXRhI3NldCgpYCB3aWxsIG1lcmdlIGl0ZW1zLlxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlSGVhZGVycykpIHtcbiAgICAgICAgbWV0YWRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0YWRhdGE7XG59XG5mdW5jdGlvbiBnZXRNZXRhZGF0YVByb3ZpZGVyRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBnZXRNZXRhZGF0YUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcik7XG4gICAgaWYgKG1ldGFkYXRhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IG1ldGFkYXRhO1xufVxuZnVuY3Rpb24gZ2V0VXJsRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgLy8gVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHN0cmluZyBiZXlvbmQgdHJpbW1pbmcgb24gcHVycG9zZS5cbiAgICAvLyBOb3JtYWxseSBhIHVzZXIgd291bGQganVzdCB1c2UgYSBob3N0IGFuZCBwb3J0IGZvciBnUlBDLCBidXQgdGhlIE9UTFAgRXhwb3J0ZXIgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB1cyB0b1xuICAgIC8vIHVzZSB0aGUgcmF3IHByb3ZpZGVkIGVuZHBvaW50IHRvIGRlcml2ZSBjcmVkZW50aWFsIHNldHRpbmdzLiBUaGVyZWZvcmUsIHdlIG9ubHkgbm9ybWFsaXplIHJpZ2h0IHdoZW5cbiAgICAvLyB3ZSBtZXJnZSB1c2VyLXByb3ZpZGVkLCBlbnYtcHJvdmlkZWQgYW5kIGRlZmF1bHRzIHRvZ2V0aGVyLCBhbmQgd2UgaGF2ZSBkZXRlcm1pbmVkIHdoaWNoIGNyZWRlbnRpYWxzIHRvIHVzZS5cbiAgICAvL1xuICAgIC8vIEV4YW1wbGVzOlxuICAgIC8vIC0gZXhhbXBsZS50ZXN0OjQzMTcgLT4gdXNlIHNlY3VyZSBjcmVkZW50aWFscyBmcm9tIGVudmlyb25tZW50IChvciBwcm92aWRlZCB2aWEgY29kZSlcbiAgICAvLyAtIGh0dHA6Ly9leGFtcGxlLnRlc3Q6NDMxNyAtPiB1c2UgaW5zZWN1cmUgY3JlZGVudGlhbHMgaWYgbm90aGluZyBlbHNlIGlzIHByb3ZpZGVkXG4gICAgLy8gLSBodHRwczovL2V4YW1wbGUudGVzdDo0MzE3IC0+IHVzZSBzZWN1cmUgY3JlZGVudGlhbHMgZnJvbSBlbnZpcm9ubWVudCAob3IgcHJvdmlkZWQgdmlhIGNvZGUpXG4gICAgY29uc3Qgc3BlY2lmaWNFbmRwb2ludCA9IHByb2Nlc3MuZW52W2BPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9FTkRQT0lOVGBdPy50cmltKCk7XG4gICAgY29uc3Qgbm9uU3BlY2lmaWNFbmRwb2ludCA9IHByb2Nlc3MuZW52W2BPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgXT8udHJpbSgpO1xuICAgIHJldHVybiBmYWxsYmFja0lmTnVsbGlzaE9yQmxhbmsoc3BlY2lmaWNFbmRwb2ludCwgbm9uU3BlY2lmaWNFbmRwb2ludCk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZW52IHZhciBmb3IgaW5zZWN1cmUgY3JlZGVudGlhbHMgaXMgc2V0IHRvIHtAY29kZSB0cnVlfS5cbiAqXG4gKiBJdCB3aWxsIGFsbG93IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFzIHtAY29kZSB0cnVlfVxuICogLSAndHJ1ZSdcbiAqIC0gJ3RydWUgICAnXG4gKiAtICcgICB0cnVlJ1xuICogLSAnVHJVRSdcbiAqIC0gJ1RSVUUnXG4gKlxuICogSXQgd2lsbCBub3QgYWxsb3c6XG4gKiAtICd0cnVlIGZhbHNlJ1xuICogLSAnZmFsc2UgdHJ1ZSdcbiAqIC0gJ3RydWUhJ1xuICogLSAndHJ1ZSx0cnVlJ1xuICogLSAnMSdcbiAqIC0gJyAnXG4gKlxuICogQHBhcmFtIHNpZ25hbElkZW50aWZpZXJcbiAqL1xuZnVuY3Rpb24gZ2V0SW5zZWN1cmVTZXR0aW5nRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNJbnNlY3VyZVZhbHVlID0gcHJvY2Vzcy5lbnZbYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0lOU0VDVVJFYF1cbiAgICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC50cmltKCk7XG4gICAgY29uc3Qgbm9uU2lnbmFsU3BlY2lmaWNJbnNlY3VyZVZhbHVlID0gcHJvY2Vzcy5lbnZbYE9URUxfRVhQT1JURVJfT1RMUF9JTlNFQ1VSRWBdXG4gICAgICAgID8udG9Mb3dlckNhc2UoKVxuICAgICAgICAudHJpbSgpO1xuICAgIHJldHVybiAoZmFsbGJhY2tJZk51bGxpc2hPckJsYW5rKHNpZ25hbFNwZWNpZmljSW5zZWN1cmVWYWx1ZSwgbm9uU2lnbmFsU3BlY2lmaWNJbnNlY3VyZVZhbHVlKSA9PT0gJ3RydWUnKTtcbn1cbmZ1bmN0aW9uIHJlYWRGaWxlRnJvbUVudihzaWduYWxTcGVjaWZpY0VudlZhciwgbm9uU2lnbmFsU3BlY2lmaWNFbnZWYXIsIHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNQYXRoID0gcHJvY2Vzcy5lbnZbc2lnbmFsU3BlY2lmaWNFbnZWYXJdPy50cmltKCk7XG4gICAgY29uc3Qgbm9uU2lnbmFsU3BlY2lmaWNQYXRoID0gcHJvY2Vzcy5lbnZbbm9uU2lnbmFsU3BlY2lmaWNFbnZWYXJdPy50cmltKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBmYWxsYmFja0lmTnVsbGlzaE9yQmxhbmsoc2lnbmFsU3BlY2lmaWNQYXRoLCBub25TaWduYWxTcGVjaWZpY1BhdGgpO1xuICAgIGlmIChmaWxlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlUGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2Fybih3YXJuaW5nTWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldENsaWVudENlcnRpZmljYXRlRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgcmV0dXJuIHJlYWRGaWxlRnJvbUVudihgT1RFTF9FWFBPUlRFUl9PVExQXyR7c2lnbmFsSWRlbnRpZmllcn1fQ0xJRU5UX0NFUlRJRklDQVRFYCwgJ09URUxfRVhQT1JURVJfT1RMUF9DTElFTlRfQ0VSVElGSUNBVEUnLCAnRmFpbGVkIHRvIHJlYWQgY2xpZW50IGNlcnRpZmljYXRlIGNoYWluIGZpbGUnKTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudEtleUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIHJldHVybiByZWFkRmlsZUZyb21FbnYoYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0NMSUVOVF9LRVlgLCAnT1RFTF9FWFBPUlRFUl9PVExQX0NMSUVOVF9LRVknLCAnRmFpbGVkIHRvIHJlYWQgY2xpZW50IGNlcnRpZmljYXRlIHByaXZhdGUga2V5IGZpbGUnKTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RDZXJ0aWZpY2F0ZUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIHJldHVybiByZWFkRmlsZUZyb21FbnYoYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0NFUlRJRklDQVRFYCwgJ09URUxfRVhQT1JURVJfT1RMUF9DRVJUSUZJQ0FURScsICdGYWlsZWQgdG8gcmVhZCByb290IGNlcnRpZmljYXRlIGZpbGUnKTtcbn1cbmZ1bmN0aW9uIGdldENyZWRlbnRpYWxzRnJvbUVudklnbm9yZUluc2VjdXJlKHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICBjb25zdCBjbGllbnRLZXkgPSBnZXRDbGllbnRLZXlGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpO1xuICAgIGNvbnN0IGNsaWVudENlcnRpZmljYXRlID0gZ2V0Q2xpZW50Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpO1xuICAgIGNvbnN0IHJvb3RDZXJ0aWZpY2F0ZSA9IGdldFJvb3RDZXJ0aWZpY2F0ZUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcik7XG4gICAgLy8gaWYgdGhlIGNoYWluIGlzIG5vdCBpbnRhY3QsIEBncnBjL2dycGMtanMgd2lsbCB0aHJvdy4gVGhpcyBpcyBmaW5lIHdoZW4gYSB1c2VyIHByb3ZpZGVzIGl0IGluIGNvZGUsIGJ1dCBlbnYgdmFyXG4gICAgLy8gY29uZmlnIGlzIG5vdCBhbGxvd2VkIHRvIHRocm93LCBzbyB3ZSBhZGQgdGhpcyBzYWZlZ3VhcmQgYW5kIHRyeSB0byBtYWtlIHRoZSBiZXN0IG9mIGl0IGhlcmUuXG4gICAgY29uc3QgY2xpZW50Q2hhaW5JbnRhY3QgPSBjbGllbnRLZXkgIT0gbnVsbCAmJiBjbGllbnRDZXJ0aWZpY2F0ZSAhPSBudWxsO1xuICAgIGlmIChyb290Q2VydGlmaWNhdGUgIT0gbnVsbCAmJiAhY2xpZW50Q2hhaW5JbnRhY3QpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdDbGllbnQga2V5IGFuZCBjZXJ0aWZpY2F0ZSBtdXN0IGJvdGggYmUgcHJvdmlkZWQsIGJ1dCBvbmUgd2FzIG1pc3NpbmcgLSBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBjcmVkZW50aWFscyBmcm9tIGp1c3QgdGhlIHJvb3QgY2VydGlmaWNhdGUnKTtcbiAgICAgICAgcmV0dXJuICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZVNzbENyZWRlbnRpYWxzKShnZXRSb290Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZVNzbENyZWRlbnRpYWxzKShyb290Q2VydGlmaWNhdGUsIGNsaWVudEtleSwgY2xpZW50Q2VydGlmaWNhdGUpO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbHNGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICBpZiAoZ2V0SW5zZWN1cmVTZXR0aW5nRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSkge1xuICAgICAgICByZXR1cm4gKDAsIGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlSW5zZWN1cmVDcmVkZW50aWFscykoKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldENyZWRlbnRpYWxzRnJvbUVudklnbm9yZUluc2VjdXJlKHNpZ25hbElkZW50aWZpZXIpO1xufVxuZnVuY3Rpb24gZ2V0T3RscEdycGNDb25maWd1cmF0aW9uRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKDAsIG5vZGVfaHR0cF8xLmdldFNoYXJlZENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnQpKHNpZ25hbElkZW50aWZpZXIpLFxuICAgICAgICBtZXRhZGF0YTogZ2V0TWV0YWRhdGFQcm92aWRlckZyb21FbnYoc2lnbmFsSWRlbnRpZmllciksXG4gICAgICAgIHVybDogZ2V0VXJsRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSxcbiAgICAgICAgY3JlZGVudGlhbHM6IChmaW5hbFJlc29sdmVkVXJsKSA9PiB7XG4gICAgICAgICAgICAvLyBBbHdheXMgYXNzdW1lIGluc2VjdXJlIG9uIGh0dHA6Ly8gYW5kIHNlY3VyZSBvbiBodHRwczovLywgdGhlIHByb3RvY29sIGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGluc2VjdXJlIHNldHRpbmcuXG4gICAgICAgICAgICAvLyBub3RlOiB0aGUgc3BlYyBkb2VzIG5vdCBtYWtlIGFueSBleGNlcHRpb24gZm9yXG4gICAgICAgICAgICAvLyAtIFwibG9jYWxob3N0OjQzMTdcIi4gSWYgdGhlIHByb3RvY29sIGlzIG9taXR0ZWQsIGNyZWRlbnRpYWxzIGFyZSByZXF1aXJlZCB1bmxlc3MgaW5zZWN1cmUgaXMgc2V0XG4gICAgICAgICAgICAvLyAtIFwidW5peDovL1wiLCBhcyBpdCdzIG5laXRoZXIgaHR0cDovLyBub3IgaHR0cHM6Ly8gYW5kIHRoZXJlZm9yZSBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQgdW5sZXNzIGluc2VjdXJlIGlzIHNldFxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzb2x2ZWRVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUluc2VjdXJlQ3JlZGVudGlhbHMpKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbmFsUmVzb2x2ZWRVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDcmVkZW50aWFsc0Zyb21FbnZJZ25vcmVJbnNlY3VyZShzaWduYWxJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVmZXIgdG8gZW52IHNldHRpbmdzIGluIHRoaXMgY2FzZVxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbHNGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRPdGxwR3JwY0NvbmZpZ3VyYXRpb25Gcm9tRW52ID0gZ2V0T3RscEdycGNDb25maWd1cmF0aW9uRnJvbUVudjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtZ3JwYy1lbnYtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgb3RscF9ncnBjX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL290bHAtZ3JwYy1jb25maWd1cmF0aW9uXCIpO1xuY29uc3QgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMSA9IHJlcXVpcmUoXCIuLi9ncnBjLWV4cG9ydGVyLXRyYW5zcG9ydFwiKTtcbmNvbnN0IG90bHBfZ3JwY19lbnZfY29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vb3RscC1ncnBjLWVudi1jb25maWd1cmF0aW9uXCIpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogQHBhcmFtIGNvbmZpZ1xuICogQHBhcmFtIHNpZ25hbElkZW50aWZpZXJcbiAqL1xuZnVuY3Rpb24gY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucyhjb25maWcsIHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICBpZiAoY29uZmlnLmhlYWRlcnMpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdIZWFkZXJzIGNhbm5vdCBiZSBzZXQgd2hlbiB1c2luZyBncnBjJyk7XG4gICAgfVxuICAgIC8vIGtlZXAgY3JlZGVudGlhbHMgbG9jYWxseSBpbiBjYXNlIHVzZXIgdXBkYXRlcyB0aGUgcmVmZXJlbmNlIG9uIHRoZSBjb25maWcgb2JqZWN0XG4gICAgY29uc3QgdXNlclByb3ZpZGVkQ3JlZGVudGlhbHMgPSBjb25maWcuY3JlZGVudGlhbHM7XG4gICAgcmV0dXJuICgwLCBvdGxwX2dycGNfY29uZmlndXJhdGlvbl8xLm1lcmdlT3RscEdycGNDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzKSh7XG4gICAgICAgIHVybDogY29uZmlnLnVybCxcbiAgICAgICAgbWV0YWRhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIG1ldGFkYXRhIHJlc29sdXRpb24gc3RyYXRlZ3kgaXMgbWVyZ2UsIHNvIHdlIGNhbiByZXR1cm4gZW1wdHkgaGVyZSwgYW5kIGl0IHdpbGwgbm90IG92ZXJyaWRlIHRoZSByZXN0IG9mIHRoZSBzZXR0aW5ncy5cbiAgICAgICAgICAgIHJldHVybiBjb25maWcubWV0YWRhdGEgPz8gKDAsIGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlRW1wdHlNZXRhZGF0YSkoKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcHJlc3Npb246IGNvbmZpZy5jb21wcmVzc2lvbixcbiAgICAgICAgdGltZW91dE1pbGxpczogY29uZmlnLnRpbWVvdXRNaWxsaXMsXG4gICAgICAgIGNvbmN1cnJlbmN5TGltaXQ6IGNvbmZpZy5jb25jdXJyZW5jeUxpbWl0LFxuICAgICAgICBjcmVkZW50aWFsczogdXNlclByb3ZpZGVkQ3JlZGVudGlhbHMgIT0gbnVsbFxuICAgICAgICAgICAgPyAoKSA9PiB1c2VyUHJvdmlkZWRDcmVkZW50aWFsc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHVzZXJBZ2VudDogY29uZmlnLnVzZXJBZ2VudCxcbiAgICB9LCAoMCwgb3RscF9ncnBjX2Vudl9jb25maWd1cmF0aW9uXzEuZ2V0T3RscEdycGNDb25maWd1cmF0aW9uRnJvbUVudikoc2lnbmFsSWRlbnRpZmllciksICgwLCBvdGxwX2dycGNfY29uZmlndXJhdGlvbl8xLmdldE90bHBHcnBjRGVmYXVsdENvbmZpZ3VyYXRpb24pKCkpO1xufVxuZXhwb3J0cy5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zID0gY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnZlcnQtbGVnYWN5LW90bHAtZ3JwYy1vcHRpb25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlID0gdm9pZCAwO1xuY29uc3Qgb3RscF9leHBvcnRlcl9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlXCIpO1xuY29uc3QgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMSA9IHJlcXVpcmUoXCIuL2dycGMtZXhwb3J0ZXItdHJhbnNwb3J0XCIpO1xuZnVuY3Rpb24gY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZShvcHRpb25zLCBzZXJpYWxpemVyLCBncnBjTmFtZSwgZ3JwY1BhdGgpIHtcbiAgICByZXR1cm4gKDAsIG90bHBfZXhwb3J0ZXJfYmFzZV8xLmNyZWF0ZU90bHBOZXR3b3JrRXhwb3J0RGVsZWdhdGUpKG9wdGlvbnMsIHNlcmlhbGl6ZXIsICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZU90bHBHcnBjRXhwb3J0ZXJUcmFuc3BvcnQpKHtcbiAgICAgICAgYWRkcmVzczogb3B0aW9ucy51cmwsXG4gICAgICAgIGNvbXByZXNzaW9uOiBvcHRpb25zLmNvbXByZXNzaW9uLFxuICAgICAgICBjcmVkZW50aWFsczogb3B0aW9ucy5jcmVkZW50aWFscyxcbiAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICAgIHVzZXJBZ2VudDogb3B0aW9ucy51c2VyQWdlbnQsXG4gICAgICAgIGdycGNOYW1lLFxuICAgICAgICBncnBjUGF0aCxcbiAgICB9KSk7XG59XG5leHBvcnRzLmNyZWF0ZU90bHBHcnBjRXhwb3J0RGVsZWdhdGUgPSBjcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3RscC1ncnBjLWV4cG9ydC1kZWxlZ2F0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZSA9IGV4cG9ydHMuY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucyA9IHZvaWQgMDtcbnZhciBjb252ZXJ0X2xlZ2FjeV9vdGxwX2dycGNfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vY29uZmlndXJhdGlvbi9jb252ZXJ0LWxlZ2FjeS1vdGxwLWdycGMtb3B0aW9uc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbnZlcnRMZWdhY3lPdGxwR3JwY09wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnZlcnRfbGVnYWN5X290bHBfZ3JwY19vcHRpb25zXzEuY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9uczsgfSB9KTtcbnZhciBvdGxwX2dycGNfZXhwb3J0X2RlbGVnYXRlXzEgPSByZXF1aXJlKFwiLi9vdGxwLWdycGMtZXhwb3J0LWRlbGVnYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb3RscF9ncnBjX2V4cG9ydF9kZWxlZ2F0ZV8xLmNyZWF0ZU90bHBHcnBjRXhwb3J0RGVsZWdhdGU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gdm9pZCAwO1xuY29uc3Qgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZVwiKTtcbmNvbnN0IG90bHBfdHJhbnNmb3JtZXJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyXCIpO1xuY29uc3Qgb3RscF9leHBvcnRlcl9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlXCIpO1xuLyoqXG4gKiBPVExQIExvZ3MgRXhwb3J0ZXIgZm9yIE5vZGVcbiAqL1xuY2xhc3MgT1RMUExvZ0V4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEuY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZSkoKDAsIG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEuY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucykoY29uZmlnLCAnTE9HUycpLCBvdGxwX3RyYW5zZm9ybWVyXzEuUHJvdG9idWZMb2dzU2VyaWFsaXplciwgJ0xvZ3NFeHBvcnRTZXJ2aWNlJywgJy9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkxvZ3NTZXJ2aWNlL0V4cG9ydCcpKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IE9UTFBMb2dFeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBMb2dFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gdm9pZCAwO1xudmFyIE9UTFBMb2dFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vT1RMUExvZ0V4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUExvZ0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBPVExQTG9nRXhwb3J0ZXJfMS5PVExQTG9nRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gdm9pZCAwO1xuY29uc3Qgb3RscF9leHBvcnRlcl9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlXCIpO1xuY29uc3Qgb3RscF90cmFuc2Zvcm1lcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXJcIik7XG5jb25zdCBub2RlX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2Uvbm9kZS1odHRwXCIpO1xuLyoqXG4gKiBPVExQIExvZyBQcm90b2J1ZiBFeHBvcnRlciBmb3IgTm9kZS5qc1xuICovXG5jbGFzcyBPVExQTG9nRXhwb3J0ZXIgZXh0ZW5kcyBvdGxwX2V4cG9ydGVyX2Jhc2VfMS5PVExQRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcigoMCwgbm9kZV9odHRwXzEuY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZSkoKDAsIG5vZGVfaHR0cF8xLmNvbnZlcnRMZWdhY3lIdHRwT3B0aW9ucykoY29uZmlnLCAnTE9HUycsICd2MS9sb2dzJywge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXByb3RvYnVmJyxcbiAgICAgICAgfSksIG90bHBfdHJhbnNmb3JtZXJfMS5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyKSk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSBPVExQTG9nRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTG9nRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQTG9nRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBMb2dFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBMb2dFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUExvZ0V4cG9ydGVyXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUExvZ0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTG9nRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IGV4cG9ydGVyX21ldHJpY3Nfb3RscF9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHBcIik7XG5jb25zdCBvdGxwX2dycGNfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZ3JwYy1leHBvcnRlci1iYXNlXCIpO1xuY29uc3Qgb3RscF90cmFuc2Zvcm1lcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXJcIik7XG4vKipcbiAqIE9UTFAtZ1JQQyBtZXRyaWMgZXhwb3J0ZXJcbiAqL1xuY2xhc3MgT1RMUE1ldHJpY0V4cG9ydGVyIGV4dGVuZHMgZXhwb3J0ZXJfbWV0cmljc19vdGxwX2h0dHBfMS5PVExQTWV0cmljRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgc3VwZXIoKDAsIG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEuY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZSkoKDAsIG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEuY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucykoY29uZmlnID8/IHt9LCAnTUVUUklDUycpLCBvdGxwX3RyYW5zZm9ybWVyXzEuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciwgJ01ldHJpY3NFeHBvcnRTZXJ2aWNlJywgJy9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLk1ldHJpY3NTZXJ2aWNlL0V4cG9ydCcpLCBjb25maWcpO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyID0gT1RMUE1ldHJpY0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T1RMUE1ldHJpY0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUE1ldHJpY0V4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9PVExQTWV0cmljRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBNZXRyaWNFeHBvcnRlcl8xLk9UTFBNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBleHBvcnRlcl9tZXRyaWNzX290bHBfaHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwXCIpO1xuY29uc3Qgb3RscF90cmFuc2Zvcm1lcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXJcIik7XG5jb25zdCBub2RlX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2Uvbm9kZS1odHRwXCIpO1xuY2xhc3MgT1RMUE1ldHJpY0V4cG9ydGVyIGV4dGVuZHMgZXhwb3J0ZXJfbWV0cmljc19vdGxwX2h0dHBfMS5PVExQTWV0cmljRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZyA/PyB7fSwgJ01FVFJJQ1MnLCAndjEvbWV0cmljcycsIHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC1wcm90b2J1ZicsXG4gICAgICAgIH0pLCBvdGxwX3RyYW5zZm9ybWVyXzEuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciksIGNvbmZpZyk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSBPVExQTWV0cmljRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTWV0cmljRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQTWV0cmljRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBNZXRyaWNFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBNZXRyaWNFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUE1ldHJpY0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb21ldGhldXNTZXJpYWxpemVyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc2RrX21ldHJpY3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZGstbWV0cmljc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyk7XG59XG4vKipcbiAqIFN0cmluZyBBdHRyaWJ1dGUgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgZGlyZWN0bHkgdG8gUHJvbWV0aGV1cyBhdHRyaWJ1dGUgdmFsdWVzLlxuICogTm9uLXN0cmluZyB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIEpTT04tZW5jb2RlZCBzdHJpbmdzLlxuICpcbiAqIGB1bmRlZmluZWRgIGlzIGNvbnZlcnRlZCB0byBhbiBlbXB0eSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUF0dHJpYnV0ZVZhbHVlKHN0ciA9ICcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KHN0cik7XG4gICAgfVxuICAgIHJldHVybiBlc2NhcGVTdHJpbmcoc3RyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyk7XG59XG5jb25zdCBpbnZhbGlkQ2hhcmFjdGVyUmVnZXggPSAvW15hLXowLTlfXS9naTtcbmNvbnN0IG11bHRpcGxlVW5kZXJzY29yZVJlZ2V4ID0gL197Mix9L2c7XG4vKipcbiAqIEVuc3VyZXMgbWV0cmljIG5hbWVzIGFyZSB2YWxpZCBQcm9tZXRoZXVzIG1ldHJpYyBuYW1lcyBieSByZW1vdmluZ1xuICogY2hhcmFjdGVycyBhbGxvd2VkIGJ5IE9wZW5UZWxlbWV0cnkgYnV0IGRpc2FsbG93ZWQgYnkgUHJvbWV0aGV1cy5cbiAqXG4gKiBodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9jb25jZXB0cy9kYXRhX21vZGVsLyNtZXRyaWMtbmFtZXMtYW5kLWF0dHJpYnV0ZXNcbiAqXG4gKiAxLiBOYW1lcyBtdXN0IG1hdGNoIGBbYS16QS1aXzpdW2EtekEtWjAtOV86XSpgXG4gKlxuICogMi4gQ29sb25zIGFyZSByZXNlcnZlZCBmb3IgdXNlciBkZWZpbmVkIHJlY29yZGluZyBydWxlcy5cbiAqIFRoZXkgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGV4cG9ydGVycyBvciBkaXJlY3QgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIE9wZW5UZWxlbWV0cnkgbWV0cmljIG5hbWVzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCBpbiB0aGUgTWV0ZXIgd2hlbiB0aGV5IGFyZSBjcmVhdGVkLFxuICogYW5kIHRoZXkgbWF0Y2ggdGhlIGZvcm1hdCBgW2EtekEtWl1bYS16QS1aMC05Xy5cXC1dKmAgd2hpY2ggaXMgdmVyeSBjbG9zZSB0byBhIHZhbGlkXG4gKiBwcm9tZXRoZXVzIG1ldHJpYyBuYW1lLCBzbyB3ZSBvbmx5IG5lZWQgdG8gc3RyaXAgY2hhcmFjdGVycyB2YWxpZCBpbiBPcGVuVGVsZW1ldHJ5XG4gKiBidXQgbm90IHZhbGlkIGluIHByb21ldGhldXMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoICdfJy5cbiAqXG4gKiBAcGFyYW0gbmFtZSBuYW1lIHRvIGJlIHNhbml0aXplZFxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZVByb21ldGhldXNNZXRyaWNOYW1lKG5hbWUpIHtcbiAgICAvLyByZXBsYWNlIGFsbCBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCAnXydcbiAgICByZXR1cm4gbmFtZVxuICAgICAgICAucmVwbGFjZShpbnZhbGlkQ2hhcmFjdGVyUmVnZXgsICdfJylcbiAgICAgICAgLnJlcGxhY2UobXVsdGlwbGVVbmRlcnNjb3JlUmVnZXgsICdfJyk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKlxuICogSGVscGVyIG1ldGhvZCB3aGljaCBhc3Npc3RzIGluIGVuZm9yY2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGZvciBtZXRyaWNcbiAqIG5hbWVzIGluIFByb21ldGhldXNcbiAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBtZXRyaWNcbiAqIEBwYXJhbSB0eXBlIHRoZSBraW5kIG9mIG1ldHJpY1xuICogQHJldHVybnMgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVuZm9yY2VQcm9tZXRoZXVzTmFtaW5nQ29udmVudGlvbihuYW1lLCBkYXRhKSB7XG4gICAgLy8gUHJvbWV0aGV1cyByZXF1aXJlcyB0aGF0IG1ldHJpY3Mgb2YgdGhlIENvdW50ZXIga2luZCBoYXZlIFwiX3RvdGFsXCIgc3VmZml4XG4gICAgaWYgKCFuYW1lLmVuZHNXaXRoKCdfdG90YWwnKSAmJlxuICAgICAgICBkYXRhLmRhdGFQb2ludFR5cGUgPT09IHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5TVU0gJiZcbiAgICAgICAgZGF0YS5pc01vbm90b25pYykge1xuICAgICAgICBuYW1lID0gbmFtZSArICdfdG90YWwnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbn1cbmZ1bmN0aW9uIHZhbHVlU3RyaW5nKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gJytJbmYnO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiAnLUluZic7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBIYW5kbGUgZmluaXRlIG51bWJlcnMgYW5kIE5hTi5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9Qcm9tZXRoZXVzVHlwZShtZXRyaWNEYXRhKSB7XG4gICAgc3dpdGNoIChtZXRyaWNEYXRhLmRhdGFQb2ludFR5cGUpIHtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkRhdGFQb2ludFR5cGUuU1VNOlxuICAgICAgICAgICAgaWYgKG1ldHJpY0RhdGEuaXNNb25vdG9uaWMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvdW50ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdnYXVnZSc7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLkdBVUdFOlxuICAgICAgICAgICAgcmV0dXJuICdnYXVnZSc7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLkhJU1RPR1JBTTpcbiAgICAgICAgICAgIHJldHVybiAnaGlzdG9ncmFtJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAndW50eXBlZCc7XG4gICAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5KG1ldHJpY05hbWUsIGF0dHJpYnV0ZXMsIHZhbHVlLCB0aW1lc3RhbXAsIGFkZGl0aW9uYWxBdHRyaWJ1dGVzKSB7XG4gICAgbGV0IGhhc0F0dHJpYnV0ZSA9IGZhbHNlO1xuICAgIGxldCBhdHRyaWJ1dGVzU3RyID0gJyc7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZEF0dHJpYnV0ZU5hbWUgPSBzYW5pdGl6ZVByb21ldGhldXNNZXRyaWNOYW1lKGtleSk7XG4gICAgICAgIGhhc0F0dHJpYnV0ZSA9IHRydWU7XG4gICAgICAgIGF0dHJpYnV0ZXNTdHIgKz0gYCR7YXR0cmlidXRlc1N0ci5sZW5ndGggPiAwID8gJywnIDogJyd9JHtzYW5pdGl6ZWRBdHRyaWJ1dGVOYW1lfT1cIiR7ZXNjYXBlQXR0cmlidXRlVmFsdWUodmFsKX1cImA7XG4gICAgfVxuICAgIGlmIChhZGRpdGlvbmFsQXR0cmlidXRlcykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRBdHRyaWJ1dGVOYW1lID0gc2FuaXRpemVQcm9tZXRoZXVzTWV0cmljTmFtZShrZXkpO1xuICAgICAgICAgICAgaGFzQXR0cmlidXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNTdHIgKz0gYCR7YXR0cmlidXRlc1N0ci5sZW5ndGggPiAwID8gJywnIDogJyd9JHtzYW5pdGl6ZWRBdHRyaWJ1dGVOYW1lfT1cIiR7ZXNjYXBlQXR0cmlidXRlVmFsdWUodmFsKX1cImA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0F0dHJpYnV0ZSkge1xuICAgICAgICBtZXRyaWNOYW1lICs9IGB7JHthdHRyaWJ1dGVzU3RyfX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bWV0cmljTmFtZX0gJHt2YWx1ZVN0cmluZyh2YWx1ZSl9JHt0aW1lc3RhbXAgIT09IHVuZGVmaW5lZCA/ICcgJyArIFN0cmluZyh0aW1lc3RhbXApIDogJyd9XFxuYDtcbn1cbmNvbnN0IE5PX1JFR0lTVEVSRURfTUVUUklDUyA9ICcjIG5vIHJlZ2lzdGVyZWQgbWV0cmljcyc7XG5jbGFzcyBQcm9tZXRoZXVzU2VyaWFsaXplciB7XG4gICAgX3ByZWZpeDtcbiAgICBfYXBwZW5kVGltZXN0YW1wO1xuICAgIF9hZGRpdGlvbmFsQXR0cmlidXRlcztcbiAgICBfd2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHM7XG4gICAgX3dpdGhvdXRUYXJnZXRJbmZvO1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgYXBwZW5kVGltZXN0YW1wID0gZmFsc2UsIHdpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzLCB3aXRob3V0VGFyZ2V0SW5mbykge1xuICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXggKyAnXyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwZW5kVGltZXN0YW1wID0gYXBwZW5kVGltZXN0YW1wO1xuICAgICAgICB0aGlzLl93aXRoUmVzb3VyY2VDb25zdGFudExhYmVscyA9IHdpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzO1xuICAgICAgICB0aGlzLl93aXRob3V0VGFyZ2V0SW5mbyA9ICEhd2l0aG91dFRhcmdldEluZm87XG4gICAgfVxuICAgIHNlcmlhbGl6ZShyZXNvdXJjZU1ldHJpY3MpIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICB0aGlzLl9hZGRpdGlvbmFsQXR0cmlidXRlcyA9IHRoaXMuX2ZpbHRlclJlc291cmNlQ29uc3RhbnRMYWJlbHMocmVzb3VyY2VNZXRyaWNzLnJlc291cmNlLmF0dHJpYnV0ZXMsIHRoaXMuX3dpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzKTtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZU1ldHJpY3Mgb2YgcmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljcykge1xuICAgICAgICAgICAgc3RyICs9IHRoaXMuX3NlcmlhbGl6ZVNjb3BlTWV0cmljcyhzY29wZU1ldHJpY3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHIgPT09ICcnKSB7XG4gICAgICAgICAgICBzdHIgKz0gTk9fUkVHSVNURVJFRF9NRVRSSUNTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVSZXNvdXJjZShyZXNvdXJjZU1ldHJpY3MucmVzb3VyY2UpICsgc3RyO1xuICAgIH1cbiAgICBfZmlsdGVyUmVzb3VyY2VDb25zdGFudExhYmVscyhhdHRyaWJ1dGVzLCBwYXR0ZXJuKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5tYXRjaChwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEF0dHJpYnV0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfc2VyaWFsaXplU2NvcGVNZXRyaWNzKHNjb3BlTWV0cmljcykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgbWV0cmljIG9mIHNjb3BlTWV0cmljcy5tZXRyaWNzKSB7XG4gICAgICAgICAgICBzdHIgKz0gdGhpcy5fc2VyaWFsaXplTWV0cmljRGF0YShtZXRyaWMpICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgX3NlcmlhbGl6ZU1ldHJpY0RhdGEobWV0cmljRGF0YSkge1xuICAgICAgICBsZXQgbmFtZSA9IHNhbml0aXplUHJvbWV0aGV1c01ldHJpY05hbWUoZXNjYXBlU3RyaW5nKG1ldHJpY0RhdGEuZGVzY3JpcHRvci5uYW1lKSk7XG4gICAgICAgIGlmICh0aGlzLl9wcmVmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHt0aGlzLl9wcmVmaXh9JHtuYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVBvaW50VHlwZSA9IG1ldHJpY0RhdGEuZGF0YVBvaW50VHlwZTtcbiAgICAgICAgbmFtZSA9IGVuZm9yY2VQcm9tZXRoZXVzTmFtaW5nQ29udmVudGlvbihuYW1lLCBtZXRyaWNEYXRhKTtcbiAgICAgICAgY29uc3QgaGVscCA9IGAjIEhFTFAgJHtuYW1lfSAke2VzY2FwZVN0cmluZyhtZXRyaWNEYXRhLmRlc2NyaXB0b3IuZGVzY3JpcHRpb24gfHwgJ2Rlc2NyaXB0aW9uIG1pc3NpbmcnKX1gO1xuICAgICAgICBjb25zdCB1bml0ID0gbWV0cmljRGF0YS5kZXNjcmlwdG9yLnVuaXRcbiAgICAgICAgICAgID8gYFxcbiMgVU5JVCAke25hbWV9ICR7ZXNjYXBlU3RyaW5nKG1ldHJpY0RhdGEuZGVzY3JpcHRvci51bml0KX1gXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICBjb25zdCB0eXBlID0gYCMgVFlQRSAke25hbWV9ICR7dG9Qcm9tZXRoZXVzVHlwZShtZXRyaWNEYXRhKX1gO1xuICAgICAgICBsZXQgcmVzdWx0cyA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGRhdGFQb2ludFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLlNVTTpcbiAgICAgICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLkdBVUdFOiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IG1ldHJpY0RhdGEuZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAubWFwKGl0ID0+IHRoaXMuX3NlcmlhbGl6ZVNpbmd1bGFyRGF0YVBvaW50KG5hbWUsIG1ldHJpY0RhdGEsIGl0KSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkRhdGFQb2ludFR5cGUuSElTVE9HUkFNOiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IG1ldHJpY0RhdGEuZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAubWFwKGl0ID0+IHRoaXMuX3NlcmlhbGl6ZUhpc3RvZ3JhbURhdGFQb2ludChuYW1lLCBtZXRyaWNEYXRhLCBpdCkpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBVbnJlY29nbml6YWJsZSBEYXRhUG9pbnRUeXBlOiAke2RhdGFQb2ludFR5cGV9IGZvciBtZXRyaWMgXCIke25hbWV9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7aGVscH0ke3VuaXR9XFxuJHt0eXBlfVxcbiR7cmVzdWx0c31gLnRyaW0oKTtcbiAgICB9XG4gICAgX3NlcmlhbGl6ZVNpbmd1bGFyRGF0YVBvaW50KG5hbWUsIGRhdGEsIGRhdGFQb2ludCkge1xuICAgICAgICBsZXQgcmVzdWx0cyA9ICcnO1xuICAgICAgICBuYW1lID0gZW5mb3JjZVByb21ldGhldXNOYW1pbmdDb252ZW50aW9uKG5hbWUsIGRhdGEpO1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBhdHRyaWJ1dGVzIH0gPSBkYXRhUG9pbnQ7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWxsaXNlY29uZHMpKGRhdGFQb2ludC5lbmRUaW1lKTtcbiAgICAgICAgcmVzdWx0cyArPSBzdHJpbmdpZnkobmFtZSwgYXR0cmlidXRlcywgdmFsdWUsIHRoaXMuX2FwcGVuZFRpbWVzdGFtcCA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCwgdGhpcy5fYWRkaXRpb25hbEF0dHJpYnV0ZXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgX3NlcmlhbGl6ZUhpc3RvZ3JhbURhdGFQb2ludChuYW1lLCBkYXRhLCBkYXRhUG9pbnQpIHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSAnJztcbiAgICAgICAgbmFtZSA9IGVuZm9yY2VQcm9tZXRoZXVzTmFtaW5nQ29udmVudGlvbihuYW1lLCBkYXRhKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGRhdGFQb2ludC5hdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBoaXN0b2dyYW0gPSBkYXRhUG9pbnQudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWxsaXNlY29uZHMpKGRhdGFQb2ludC5lbmRUaW1lKTtcbiAgICAgICAgLyoqIEhpc3RvZ3JhbVtcImJ1Y2tldFwiXSBpcyBub3QgdHlwZWQgd2l0aCBgbnVtYmVyYCAqL1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ2NvdW50JywgJ3N1bSddKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhpc3RvZ3JhbVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgcmVzdWx0cyArPSBzdHJpbmdpZnkobmFtZSArICdfJyArIGtleSwgYXR0cmlidXRlcywgdmFsdWUsIHRoaXMuX2FwcGVuZFRpbWVzdGFtcCA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCwgdGhpcy5fYWRkaXRpb25hbEF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdW11bGF0aXZlU3VtID0gMDtcbiAgICAgICAgY29uc3QgY291bnRFbnRyaWVzID0gaGlzdG9ncmFtLmJ1Y2tldHMuY291bnRzLmVudHJpZXMoKTtcbiAgICAgICAgbGV0IGluZmluaXRlQm91bmRhcnlEZWZpbmVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2lkeCwgdmFsXSBvZiBjb3VudEVudHJpZXMpIHtcbiAgICAgICAgICAgIGN1bXVsYXRpdmVTdW0gKz0gdmFsO1xuICAgICAgICAgICAgY29uc3QgdXBwZXJCb3VuZCA9IGhpc3RvZ3JhbS5idWNrZXRzLmJvdW5kYXJpZXNbaWR4XTtcbiAgICAgICAgICAgIC8qKiBIaXN0b2dyYW1BZ2dyZWdhdG9yIGlzIHByb2R1Y2luZyBkaWZmZXJlbnQgYm91bmRhcnkgb3V0cHV0IC1cbiAgICAgICAgICAgICAqIGluIG9uZSBjYXNlIG5vdCBpbmNsdWRpbmcgaW5maW5pdHkgdmFsdWVzLCBpbiBvdGhlciAtXG4gICAgICAgICAgICAgKiBmdWxsLCBlLmcuIFswLCAxMDBdIGFuZCBbMCwgMTAwLCBJbmZpbml0eV1cbiAgICAgICAgICAgICAqIHdlIHNob3VsZCBjb25zaWRlciB0aGF0IGluIGV4cG9ydCwgaWYgSW5maW5pdHkgaXMgZGVmaW5lZCwgdXNlIGl0XG4gICAgICAgICAgICAgKiBhcyBib3VuZGFyeVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodXBwZXJCb3VuZCA9PT0gdW5kZWZpbmVkICYmIGluZmluaXRlQm91bmRhcnlEZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXBwZXJCb3VuZCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICBpbmZpbml0ZUJvdW5kYXJ5RGVmaW5lZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzICs9IHN0cmluZ2lmeShuYW1lICsgJ19idWNrZXQnLCBhdHRyaWJ1dGVzLCBjdW11bGF0aXZlU3VtLCB0aGlzLl9hcHBlbmRUaW1lc3RhbXAgPyB0aW1lc3RhbXAgOiB1bmRlZmluZWQsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2FkZGl0aW9uYWxBdHRyaWJ1dGVzID8/IHt9LCB7XG4gICAgICAgICAgICAgICAgbGU6IHVwcGVyQm91bmQgPT09IHVuZGVmaW5lZCB8fCB1cHBlckJvdW5kID09PSBJbmZpbml0eVxuICAgICAgICAgICAgICAgICAgICA/ICcrSW5mJ1xuICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyh1cHBlckJvdW5kKSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgX3NlcmlhbGl6ZVJlc291cmNlKHJlc291cmNlKSB7XG4gICAgICAgIGlmICh0aGlzLl93aXRob3V0VGFyZ2V0SW5mbyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSAndGFyZ2V0X2luZm8nO1xuICAgICAgICBjb25zdCBoZWxwID0gYCMgSEVMUCAke25hbWV9IFRhcmdldCBtZXRhZGF0YWA7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBgIyBUWVBFICR7bmFtZX0gZ2F1Z2VgO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gc3RyaW5naWZ5KG5hbWUsIHJlc291cmNlLmF0dHJpYnV0ZXMsIDEpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIGAke2hlbHB9XFxuJHt0eXBlfVxcbiR7cmVzdWx0c31cXG5gO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJvbWV0aGV1c1NlcmlhbGl6ZXIgPSBQcm9tZXRoZXVzU2VyaWFsaXplcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb21ldGhldXNTZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9tZXRoZXVzRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IHNka19tZXRyaWNzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3NcIik7XG5jb25zdCBodHRwXzEgPSByZXF1aXJlKFwiaHR0cFwiKTtcbmNvbnN0IFByb21ldGhldXNTZXJpYWxpemVyXzEgPSByZXF1aXJlKFwiLi9Qcm9tZXRoZXVzU2VyaWFsaXplclwiKTtcbi8qKiBOb2RlLmpzIHY4LnggY29tcGF0ICovXG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jbGFzcyBQcm9tZXRoZXVzRXhwb3J0ZXIgZXh0ZW5kcyBzZGtfbWV0cmljc18xLk1ldHJpY1JlYWRlciB7XG4gICAgc3RhdGljIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgICAgICAgaG9zdDogdW5kZWZpbmVkLFxuICAgICAgICBwb3J0OiA5NDY0LFxuICAgICAgICBlbmRwb2ludDogJy9tZXRyaWNzJyxcbiAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgYXBwZW5kVGltZXN0YW1wOiBmYWxzZSxcbiAgICAgICAgd2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHM6IHVuZGVmaW5lZCxcbiAgICAgICAgd2l0aG91dFRhcmdldEluZm86IGZhbHNlLFxuICAgIH07XG4gICAgX2hvc3Q7XG4gICAgX3BvcnQ7XG4gICAgX2Jhc2VVcmw7XG4gICAgX2VuZHBvaW50O1xuICAgIF9zZXJ2ZXI7XG4gICAgX3ByZWZpeDtcbiAgICBfYXBwZW5kVGltZXN0YW1wO1xuICAgIF9zZXJpYWxpemVyO1xuICAgIF9zdGFydFNlcnZlclByb21pc2U7XG4gICAgLy8gVGhpcyB3aWxsIGJlIHJlcXVpcmVkIHdoZW4gaGlzdG9ncmFtIGlzIGltcGxlbWVudGVkLiBMZWF2aW5nIGhlcmUgc28gaXQgaXMgbm90IGZvcmdvdHRlblxuICAgIC8vIEhpc3RvZ3JhbSBjYW5ub3QgaGF2ZSBhIGF0dHJpYnV0ZSBuYW1lZCAnbGUnXG4gICAgLy8gcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUkVTRVJWRURfSElTVE9HUkFNX0xBQkVMID0gJ2xlJztcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBjb25maWcgRXhwb3J0ZXIgY29uZmlndXJhdGlvblxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYWZ0ZXIgYSBzZXJ2ZXIgd2FzIHN0YXJ0ZWRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSwgY2FsbGJhY2sgPSAoKSA9PiB7IH0pIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgYWdncmVnYXRpb25TZWxlY3RvcjogX2luc3RydW1lbnRUeXBlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVHlwZS5ERUZBVUxULFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eVNlbGVjdG9yOiBfaW5zdHJ1bWVudFR5cGUgPT4gc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkNVTVVMQVRJVkUsXG4gICAgICAgICAgICBtZXRyaWNQcm9kdWNlcnM6IGNvbmZpZy5tZXRyaWNQcm9kdWNlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9ob3N0ID1cbiAgICAgICAgICAgIGNvbmZpZy5ob3N0IHx8XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9QUk9NRVRIRVVTX0hPU1QgfHxcbiAgICAgICAgICAgICAgICBQcm9tZXRoZXVzRXhwb3J0ZXIuREVGQVVMVF9PUFRJT05TLmhvc3Q7XG4gICAgICAgIHRoaXMuX3BvcnQgPVxuICAgICAgICAgICAgY29uZmlnLnBvcnQgfHxcbiAgICAgICAgICAgICAgICBOdW1iZXIocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9QUk9NRVRIRVVTX1BPUlQpIHx8XG4gICAgICAgICAgICAgICAgUHJvbWV0aGV1c0V4cG9ydGVyLkRFRkFVTFRfT1BUSU9OUy5wb3J0O1xuICAgICAgICB0aGlzLl9wcmVmaXggPSBjb25maWcucHJlZml4IHx8IFByb21ldGhldXNFeHBvcnRlci5ERUZBVUxUX09QVElPTlMucHJlZml4O1xuICAgICAgICB0aGlzLl9hcHBlbmRUaW1lc3RhbXAgPVxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5hcHBlbmRUaW1lc3RhbXAgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICAgID8gY29uZmlnLmFwcGVuZFRpbWVzdGFtcFxuICAgICAgICAgICAgICAgIDogUHJvbWV0aGV1c0V4cG9ydGVyLkRFRkFVTFRfT1BUSU9OUy5hcHBlbmRUaW1lc3RhbXA7XG4gICAgICAgIGNvbnN0IF93aXRoUmVzb3VyY2VDb25zdGFudExhYmVscyA9IGNvbmZpZy53aXRoUmVzb3VyY2VDb25zdGFudExhYmVscyB8fFxuICAgICAgICAgICAgUHJvbWV0aGV1c0V4cG9ydGVyLkRFRkFVTFRfT1BUSU9OUy53aXRoUmVzb3VyY2VDb25zdGFudExhYmVscztcbiAgICAgICAgY29uc3QgX3dpdGhvdXRUYXJnZXRJbmZvID0gY29uZmlnLndpdGhvdXRUYXJnZXRJbmZvIHx8XG4gICAgICAgICAgICBQcm9tZXRoZXVzRXhwb3J0ZXIuREVGQVVMVF9PUFRJT05TLndpdGhvdXRUYXJnZXRJbmZvO1xuICAgICAgICAvLyB1bnJlZiB0byBwcmV2ZW50IHByb21ldGhldXMgZXhwb3J0ZXIgZnJvbSBob2xkaW5nIHRoZSBwcm9jZXNzIG9wZW4gb24gZXhpdFxuICAgICAgICB0aGlzLl9zZXJ2ZXIgPSAoMCwgaHR0cF8xLmNyZWF0ZVNlcnZlcikodGhpcy5fcmVxdWVzdEhhbmRsZXIpLnVucmVmKCk7XG4gICAgICAgIHRoaXMuX3NlcmlhbGl6ZXIgPSBuZXcgUHJvbWV0aGV1c1NlcmlhbGl6ZXJfMS5Qcm9tZXRoZXVzU2VyaWFsaXplcih0aGlzLl9wcmVmaXgsIHRoaXMuX2FwcGVuZFRpbWVzdGFtcCwgX3dpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzLCBfd2l0aG91dFRhcmdldEluZm8pO1xuICAgICAgICB0aGlzLl9iYXNlVXJsID0gYGh0dHA6Ly8ke3RoaXMuX2hvc3R9OiR7dGhpcy5fcG9ydH0vYDtcbiAgICAgICAgdGhpcy5fZW5kcG9pbnQgPSAoY29uZmlnLmVuZHBvaW50IHx8IFByb21ldGhldXNFeHBvcnRlci5ERUZBVUxUX09QVElPTlMuZW5kcG9pbnQpLnJlcGxhY2UoL14oW14vXSkvLCAnLyQxJyk7XG4gICAgICAgIGlmIChjb25maWcucHJldmVudFNlcnZlclN0YXJ0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2VydmVyKCkudGhlbihjYWxsYmFjaywgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBEbyBub3QgaW52b2tlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHphbGdvIHByb2JsZW0uXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25Gb3JjZUZsdXNoKCkge1xuICAgICAgICAvKiogZG8gbm90aGluZyAqL1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0cyBkb3duIHRoZSBleHBvcnQgc2VydmVyIGFuZCBjbGVhcnMgdGhlIHJlZ2lzdHJ5XG4gICAgICovXG4gICAgb25TaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcFNlcnZlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wcyB0aGUgUHJvbWV0aGV1cyBleHBvcnQgc2VydmVyXG4gICAgICovXG4gICAgc3RvcFNlcnZlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ1Byb21ldGhldXMgc3RvcFNlcnZlcigpIHdhcyBjYWxsZWQgYnV0IHNlcnZlciB3YXMgbmV2ZXIgc3RhcnRlZC4nKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2ZXIuY2xvc2UoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ1Byb21ldGhldXMgZXhwb3J0ZXIgd2FzIHN0b3BwZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRVJSX1NFUlZFUl9OT1RfUlVOTklORycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgdGhlIFByb21ldGhldXMgZXhwb3J0IHNlcnZlclxuICAgICAqL1xuICAgIHN0YXJ0U2VydmVyKCkge1xuICAgICAgICB0aGlzLl9zdGFydFNlcnZlclByb21pc2UgPz89IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlcnZlci5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgICB0aGlzLl9zZXJ2ZXIubGlzdGVuKHtcbiAgICAgICAgICAgICAgICBwb3J0OiB0aGlzLl9wb3J0LFxuICAgICAgICAgICAgICAgIGhvc3Q6IHRoaXMuX2hvc3QsXG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgUHJvbWV0aGV1cyBleHBvcnRlciBzZXJ2ZXIgc3RhcnRlZDogJHt0aGlzLl9ob3N0fToke3RoaXMuX3BvcnR9LyR7dGhpcy5fZW5kcG9pbnR9YCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZXJ2ZXJQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0IGhhbmRsZXIgdGhhdCByZXNwb25kcyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIG1ldHJpY3NcbiAgICAgKiBAcGFyYW0gX3JlcXVlc3QgSW5jb21pbmcgSFRUUCByZXF1ZXN0IG9mIHNlcnZlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSByZXNwb25zZSBIVFRQIHJlc3BvbnNlIG9iamVjdCB1c2VkIHRvIHJlc3BvbnNlIHRvIHJlcXVlc3RcbiAgICAgKi9cbiAgICBnZXRNZXRyaWNzUmVxdWVzdEhhbmRsZXIoX3JlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydE1ldHJpY3MocmVzcG9uc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0IGhhbmRsZXIgdXNlZCBieSBodHRwIGxpYnJhcnkgdG8gcmVzcG9uZCB0byBpbmNvbWluZyByZXF1ZXN0c1xuICAgICAqIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiBtZXRyaWNzIGJ5IHRoZSBQcm9tZXRoZXVzIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCBJbmNvbWluZyBIVFRQIHJlcXVlc3QgdG8gZXhwb3J0IHNlcnZlclxuICAgICAqIEBwYXJhbSByZXNwb25zZSBIVFRQIHJlc3BvbnNlIG9iamVjdCB1c2VkIHRvIHJlc3BvbmQgdG8gcmVxdWVzdFxuICAgICAqL1xuICAgIF9yZXF1ZXN0SGFuZGxlciA9IChyZXF1ZXN0LCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgbmV3IHVybF8xLlVSTChyZXF1ZXN0LnVybCwgdGhpcy5fYmFzZVVybCkucGF0aG5hbWUgPT09IHRoaXMuX2VuZHBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLl9leHBvcnRNZXRyaWNzKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25vdEZvdW5kKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVzcG9uZHMgdG8gaW5jb21pbmcgbWVzc2FnZSB3aXRoIGN1cnJlbnQgc3RhdGUgb2YgYWxsIG1ldHJpY3MuXG4gICAgICovXG4gICAgX2V4cG9ydE1ldHJpY3MgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICB0aGlzLmNvbGxlY3QoKS50aGVuKGNvbGxlY3Rpb25SZXN1bHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZXNvdXJjZU1ldHJpY3MsIGVycm9ycyB9ID0gY29sbGVjdGlvblJlc3VsdDtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignUHJvbWV0aGV1c0V4cG9ydGVyOiBtZXRyaWNzIGNvbGxlY3Rpb24gZXJyb3JzJywgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZCh0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShyZXNvdXJjZU1ldHJpY3MpKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZChgIyBmYWlsZWQgdG8gZXhwb3J0IG1ldHJpY3M6ICR7ZXJyfWApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlc3BvbmRzIHdpdGggNDA0IHN0YXR1cyBjb2RlIHRvIGFsbCByZXF1ZXN0cyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgY29uZmlndXJlZCBlbmRwb2ludC5cbiAgICAgKi9cbiAgICBfbm90Rm91bmQgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgfTtcbn1cbmV4cG9ydHMuUHJvbWV0aGV1c0V4cG9ydGVyID0gUHJvbWV0aGV1c0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvbWV0aGV1c0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9tZXRoZXVzU2VyaWFsaXplciA9IGV4cG9ydHMuUHJvbWV0aGV1c0V4cG9ydGVyID0gdm9pZCAwO1xudmFyIFByb21ldGhldXNFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vUHJvbWV0aGV1c0V4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvbWV0aGV1c0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9tZXRoZXVzRXhwb3J0ZXJfMS5Qcm9tZXRoZXVzRXhwb3J0ZXI7IH0gfSk7XG52YXIgUHJvbWV0aGV1c1NlcmlhbGl6ZXJfMSA9IHJlcXVpcmUoXCIuL1Byb21ldGhldXNTZXJpYWxpemVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvbWV0aGV1c1NlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21ldGhldXNTZXJpYWxpemVyXzEuUHJvbWV0aGV1c1NlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbmNvbnN0IG5vZGVfaHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9ub2RlLWh0dHBcIik7XG4vKipcbiAqIENvbGxlY3RvciBUcmFjZSBFeHBvcnRlciBmb3IgTm9kZSB3aXRoIHByb3RvYnVmXG4gKi9cbmNsYXNzIE9UTFBUcmFjZUV4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZywgJ1RSQUNFUycsICd2MS90cmFjZXMnLCB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtcHJvdG9idWYnLFxuICAgICAgICB9KSwgb3RscF90cmFuc2Zvcm1lcl8xLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyKSk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQVHJhY2VFeHBvcnRlciA9IE9UTFBUcmFjZUV4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T1RMUFRyYWNlRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBUcmFjZUV4cG9ydGVyID0gdm9pZCAwO1xudmFyIE9UTFBUcmFjZUV4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9PVExQVHJhY2VFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBUcmFjZUV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBPVExQVHJhY2VFeHBvcnRlcl8xLk9UTFBUcmFjZUV4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQVHJhY2VFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLk9UTFBUcmFjZUV4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBUcmFjZUV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLk9UTFBUcmFjZUV4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBUcmFjZUV4cG9ydGVyID0gdm9pZCAwO1xuY29uc3Qgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWdycGMtZXhwb3J0ZXItYmFzZVwiKTtcbmNvbnN0IG90bHBfdHJhbnNmb3JtZXJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyXCIpO1xuY29uc3Qgb3RscF9leHBvcnRlcl9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlXCIpO1xuLyoqXG4gKiBPVExQIFRyYWNlIEV4cG9ydGVyIGZvciBOb2RlXG4gKi9cbmNsYXNzIE9UTFBUcmFjZUV4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEuY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZSkoKDAsIG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEuY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucykoY29uZmlnLCAnVFJBQ0VTJyksIG90bHBfdHJhbnNmb3JtZXJfMS5Qcm90b2J1ZlRyYWNlU2VyaWFsaXplciwgJ1RyYWNlRXhwb3J0U2VydmljZScsICcvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuVHJhY2VTZXJ2aWNlL0V4cG9ydCcpKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBUcmFjZUV4cG9ydGVyID0gT1RMUFRyYWNlRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQVHJhY2VFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUFRyYWNlRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBUcmFjZUV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBUcmFjZUV4cG9ydGVyXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHJlcGFyZVNlbmQgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbmNvbnN0IGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xuLyoqXG4gKiBQcmVwYXJlcyBzZW5kIGZ1bmN0aW9uIHRoYXQgd2lsbCBzZW5kIHNwYW5zIHRvIHRoZSByZW1vdGUgWmlwa2luIHNlcnZpY2UuXG4gKiBAcGFyYW0gdXJsU3RyIC0gdXJsIHRvIHNlbmQgc3BhbnNcbiAqIEBwYXJhbSBoZWFkZXJzIC0gaGVhZGVyc1xuICogc2VuZFxuICovXG5mdW5jdGlvbiBwcmVwYXJlU2VuZCh1cmxTdHIsIGhlYWRlcnMpIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVybFN0cik7XG4gICAgY29uc3QgcmVxT3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogU2VuZCBzcGFucyB0byB0aGUgcmVtb3RlIFppcGtpbiBzZXJ2aWNlLlxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBzZW5kKHppcGtpblNwYW5zLCBkb25lKSB7XG4gICAgICAgIGlmICh6aXBraW5TcGFucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ1ppcGtpbiBzZW5kIHdpdGggZW1wdHkgc3BhbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBkb25lKHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJlcXVlc3QgfSA9IHVybC5wcm90b2NvbCA9PT0gJ2h0dHA6JyA/IGh0dHAgOiBodHRwcztcbiAgICAgICAgY29uc3QgcmVxID0gcmVxdWVzdCh1cmwsIHJlcU9wdHMsIChyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByYXdEYXRhID0gJyc7XG4gICAgICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICAgICAgICAgICAgcmF3RGF0YSArPSBjaHVuaztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlcy5zdGF0dXNDb2RlIHx8IDA7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgWmlwa2luIHJlc3BvbnNlIHN0YXR1cyBjb2RlOiAke3N0YXR1c0NvZGV9LCBib2R5OiAke3Jhd0RhdGF9YCk7XG4gICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgMnh4IGFuZCAzeHggYXMgc3VjY2Vzcy5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSA8IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZSh7IGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIDR4eCBhcyBmYWlsZWQgbm9uLXJldHJ5YWJsZS5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoYEdvdCB1bmV4cGVjdGVkIHN0YXR1cyBjb2RlIGZyb20gemlwa2luOiAke3N0YXR1c0NvZGV9YCksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsIGVycm9yID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkb25lKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElzc3VlIHJlcXVlc3QgdG8gcmVtb3RlIHNlcnZpY2VcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHppcGtpblNwYW5zKTtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgWmlwa2luIHJlcXVlc3QgcGF5bG9hZDogJHtwYXlsb2FkfWApO1xuICAgICAgICByZXEud3JpdGUocGF5bG9hZCwgJ3V0ZjgnKTtcbiAgICAgICAgcmVxLmVuZCgpO1xuICAgIH07XG59XG5leHBvcnRzLnByZXBhcmVTZW5kID0gcHJlcGFyZVNlbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlU2VuZCA9IHZvaWQgMDtcbnZhciB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJlcGFyZVNlbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxfMS5wcmVwYXJlU2VuZDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlU2VuZCA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJlcGFyZVNlbmRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5wcmVwYXJlU2VuZDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFuS2luZCA9IHZvaWQgMDtcbi8qKlxuICogV2hlbiBwcmVzZW50LCBraW5kIGNsYXJpZmllcyB0aW1lc3RhbXAsIGR1cmF0aW9uIGFuZCByZW1vdGVFbmRwb2ludC4gV2hlblxuICogYWJzZW50LCB0aGUgc3BhbiBpcyBsb2NhbCBvciBpbmNvbXBsZXRlLiBVbmxpa2UgY2xpZW50IGFuZCBzZXJ2ZXIsIHRoZXJlXG4gKiBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZFxuICogY29uc3VtZXIgc3BhbnMuXG4gKiBgQ0xJRU5UYFxuICogICB0aW1lc3RhbXAgaXMgdGhlIG1vbWVudCBhIHJlcXVlc3Qgd2FzIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAqICAgZHVyYXRpb24gaXMgdGhlIGRlbGF5IHVudGlsIGEgcmVzcG9uc2Ugb3IgYW4gZXJyb3Igd2FzIHJlY2VpdmVkLlxuICogICByZW1vdGVFbmRwb2ludCBpcyB0aGUgc2VydmVyLlxuICogYFNFUlZFUmBcbiAqICAgdGltZXN0YW1wIGlzIHRoZSBtb21lbnQgYSBjbGllbnQgcmVxdWVzdCB3YXMgcmVjZWl2ZWQuXG4gKiAgIGR1cmF0aW9uIGlzIHRoZSBkZWxheSB1bnRpbCBhIHJlc3BvbnNlIHdhcyBzZW50IG9yIGFuIGVycm9yLlxuICogICByZW1vdGVFbmRwb2ludCBpcyB0aGUgY2xpZW50LlxuICogYFBST0RVQ0VSYFxuICogICB0aW1lc3RhbXAgaXMgdGhlIG1vbWVudCBhIG1lc3NhZ2Ugd2FzIHNlbnQgdG8gYSBkZXN0aW5hdGlvbi5cbiAqICAgZHVyYXRpb24gaXMgdGhlIGRlbGF5IHNlbmRpbmcgdGhlIG1lc3NhZ2UsIHN1Y2ggYXMgYmF0Y2hpbmcuXG4gKiAgIHJlbW90ZUVuZHBvaW50IGlzIHRoZSBicm9rZXIuXG4gKiBgQ09OU1VNRVJgXG4gKiAgIHRpbWVzdGFtcCBpcyB0aGUgbW9tZW50IGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBhbiBvcmlnaW4uXG4gKiAgIGR1cmF0aW9uIGlzIHRoZSBkZWxheSBjb25zdW1pbmcgdGhlIG1lc3NhZ2UsIHN1Y2ggYXMgZnJvbSBiYWNrbG9nLlxuICogICByZW1vdGVFbmRwb2ludCAtIFJlcHJlc2VudHMgdGhlIGJyb2tlci4gTGVhdmUgc2VydmljZU5hbWUgYWJzZW50IGlmIHVua25vd24uXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICBTcGFuS2luZFtcIkNMSUVOVFwiXSA9IFwiQ0xJRU5UXCI7XG4gICAgU3BhbktpbmRbXCJTRVJWRVJcIl0gPSBcIlNFUlZFUlwiO1xuICAgIFNwYW5LaW5kW1wiQ09OU1VNRVJcIl0gPSBcIkNPTlNVTUVSXCI7XG4gICAgU3BhbktpbmRbXCJQUk9EVUNFUlwiXSA9IFwiUFJPRFVDRVJcIjtcbn0pKFNwYW5LaW5kID0gZXhwb3J0cy5TcGFuS2luZCB8fCAoZXhwb3J0cy5TcGFuS2luZCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX3RvWmlwa2luQW5ub3RhdGlvbnMgPSBleHBvcnRzLl90b1ppcGtpblRhZ3MgPSBleHBvcnRzLnRvWmlwa2luU3BhbiA9IGV4cG9ydHMuZGVmYXVsdFN0YXR1c0Vycm9yVGFnTmFtZSA9IGV4cG9ydHMuZGVmYXVsdFN0YXR1c0NvZGVUYWdOYW1lID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgemlwa2luVHlwZXMgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbmNvbnN0IFpJUEtJTl9TUEFOX0tJTkRfTUFQUElORyA9IHtcbiAgICBbYXBpLlNwYW5LaW5kLkNMSUVOVF06IHppcGtpblR5cGVzLlNwYW5LaW5kLkNMSUVOVCxcbiAgICBbYXBpLlNwYW5LaW5kLlNFUlZFUl06IHppcGtpblR5cGVzLlNwYW5LaW5kLlNFUlZFUixcbiAgICBbYXBpLlNwYW5LaW5kLkNPTlNVTUVSXTogemlwa2luVHlwZXMuU3BhbktpbmQuQ09OU1VNRVIsXG4gICAgW2FwaS5TcGFuS2luZC5QUk9EVUNFUl06IHppcGtpblR5cGVzLlNwYW5LaW5kLlBST0RVQ0VSLFxuICAgIC8vIFdoZW4gYWJzZW50LCB0aGUgc3BhbiBpcyBsb2NhbC5cbiAgICBbYXBpLlNwYW5LaW5kLklOVEVSTkFMXTogdW5kZWZpbmVkLFxufTtcbmV4cG9ydHMuZGVmYXVsdFN0YXR1c0NvZGVUYWdOYW1lID0gJ290ZWwuc3RhdHVzX2NvZGUnO1xuZXhwb3J0cy5kZWZhdWx0U3RhdHVzRXJyb3JUYWdOYW1lID0gJ2Vycm9yJztcbi8qKlxuICogVHJhbnNsYXRlIE9wZW5UZWxlbWV0cnkgUmVhZGFibGVTcGFuIHRvIFppcGtpblNwYW4gZm9ybWF0XG4gKiBAcGFyYW0gc3BhbiBTcGFuIHRvIGJlIHRyYW5zbGF0ZWRcbiAqL1xuZnVuY3Rpb24gdG9aaXBraW5TcGFuKHNwYW4sIHNlcnZpY2VOYW1lLCBzdGF0dXNDb2RlVGFnTmFtZSwgc3RhdHVzRXJyb3JUYWdOYW1lKSB7XG4gICAgY29uc3Qgemlwa2luU3BhbiA9IHtcbiAgICAgICAgdHJhY2VJZDogc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAgIHBhcmVudElkOiBzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5zcGFuSWQsXG4gICAgICAgIG5hbWU6IHNwYW4ubmFtZSxcbiAgICAgICAgaWQ6IHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQsXG4gICAgICAgIGtpbmQ6IFpJUEtJTl9TUEFOX0tJTkRfTUFQUElOR1tzcGFuLmtpbmRdLFxuICAgICAgICB0aW1lc3RhbXA6ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKHNwYW4uc3RhcnRUaW1lKSxcbiAgICAgICAgZHVyYXRpb246IE1hdGgucm91bmQoKDAsIGNvcmVfMS5oclRpbWVUb01pY3Jvc2Vjb25kcykoc3Bhbi5kdXJhdGlvbikpLFxuICAgICAgICBsb2NhbEVuZHBvaW50OiB7IHNlcnZpY2VOYW1lIH0sXG4gICAgICAgIHRhZ3M6IF90b1ppcGtpblRhZ3Moc3Bhbiwgc3RhdHVzQ29kZVRhZ05hbWUsIHN0YXR1c0Vycm9yVGFnTmFtZSksXG4gICAgICAgIGFubm90YXRpb25zOiBzcGFuLmV2ZW50cy5sZW5ndGhcbiAgICAgICAgICAgID8gX3RvWmlwa2luQW5ub3RhdGlvbnMoc3Bhbi5ldmVudHMpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHJldHVybiB6aXBraW5TcGFuO1xufVxuZXhwb3J0cy50b1ppcGtpblNwYW4gPSB0b1ppcGtpblNwYW47XG4vKiogQ29udmVydHMgT3BlblRlbGVtZXRyeSBTcGFuIHByb3BlcnRpZXMgdG8gWmlwa2luIFRhZ3MgZm9ybWF0LiAqL1xuZnVuY3Rpb24gX3RvWmlwa2luVGFncyh7IGF0dHJpYnV0ZXMsIHJlc291cmNlLCBzdGF0dXMsIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQsIGRyb3BwZWRFdmVudHNDb3VudCwgZHJvcHBlZExpbmtzQ291bnQsIH0sIHN0YXR1c0NvZGVUYWdOYW1lLCBzdGF0dXNFcnJvclRhZ05hbWUpIHtcbiAgICBjb25zdCB0YWdzID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYXR0cmlidXRlcykpIHtcbiAgICAgICAgdGFnc1trZXldID0gU3RyaW5nKGF0dHJpYnV0ZXNba2V5XSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMuY29kZSAhPT0gYXBpLlNwYW5TdGF0dXNDb2RlLlVOU0VUKSB7XG4gICAgICAgIHRhZ3Nbc3RhdHVzQ29kZVRhZ05hbWVdID0gU3RyaW5nKGFwaS5TcGFuU3RhdHVzQ29kZVtzdGF0dXMuY29kZV0pO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzLmNvZGUgPT09IGFwaS5TcGFuU3RhdHVzQ29kZS5FUlJPUiAmJiBzdGF0dXMubWVzc2FnZSkge1xuICAgICAgICB0YWdzW3N0YXR1c0Vycm9yVGFnTmFtZV0gPSBzdGF0dXMubWVzc2FnZTtcbiAgICB9XG4gICAgLyogQWRkIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgYXMgYSB0YWcgKi9cbiAgICBpZiAoZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkge1xuICAgICAgICB0YWdzWydvdGVsLmRyb3BwZWRfYXR0cmlidXRlc19jb3VudCddID0gU3RyaW5nKGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpO1xuICAgIH1cbiAgICAvKiBBZGQgZHJvcHBlZEV2ZW50c0NvdW50IGFzIGEgdGFnICovXG4gICAgaWYgKGRyb3BwZWRFdmVudHNDb3VudCkge1xuICAgICAgICB0YWdzWydvdGVsLmRyb3BwZWRfZXZlbnRzX2NvdW50J10gPSBTdHJpbmcoZHJvcHBlZEV2ZW50c0NvdW50KTtcbiAgICB9XG4gICAgLyogQWRkIGRyb3BwZWRMaW5rc0NvdW50IGFzIGEgdGFnICovXG4gICAgaWYgKGRyb3BwZWRMaW5rc0NvdW50KSB7XG4gICAgICAgIHRhZ3NbJ290ZWwuZHJvcHBlZF9saW5rc19jb3VudCddID0gU3RyaW5nKGRyb3BwZWRMaW5rc0NvdW50KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocmVzb3VyY2UuYXR0cmlidXRlcykuZm9yRWFjaChuYW1lID0+ICh0YWdzW25hbWVdID0gU3RyaW5nKHJlc291cmNlLmF0dHJpYnV0ZXNbbmFtZV0pKSk7XG4gICAgcmV0dXJuIHRhZ3M7XG59XG5leHBvcnRzLl90b1ppcGtpblRhZ3MgPSBfdG9aaXBraW5UYWdzO1xuLyoqXG4gKiBDb252ZXJ0cyBPcGVuVGVsZW1ldHJ5IEV2ZW50cyB0byBaaXBraW4gQW5ub3RhdGlvbnMgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBfdG9aaXBraW5Bbm5vdGF0aW9ucyhldmVudHMpIHtcbiAgICByZXR1cm4gZXZlbnRzLm1hcChldmVudCA9PiAoe1xuICAgICAgICB0aW1lc3RhbXA6IE1hdGgucm91bmQoKDAsIGNvcmVfMS5oclRpbWVUb01pY3Jvc2Vjb25kcykoZXZlbnQudGltZSkpLFxuICAgICAgICB2YWx1ZTogZXZlbnQubmFtZSxcbiAgICB9KSk7XG59XG5leHBvcnRzLl90b1ppcGtpbkFubm90YXRpb25zID0gX3RvWmlwa2luQW5ub3RhdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc2Zvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHJlcGFyZUdldEhlYWRlcnMgPSB2b2lkIDA7XG5mdW5jdGlvbiBwcmVwYXJlR2V0SGVhZGVycyhnZXRFeHBvcnRSZXF1ZXN0SGVhZGVycykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRFeHBvcnRSZXF1ZXN0SGVhZGVycygpO1xuICAgIH07XG59XG5leHBvcnRzLnByZXBhcmVHZXRIZWFkZXJzID0gcHJlcGFyZUdldEhlYWRlcnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWmlwa2luRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IGluZGV4XzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9pbmRleFwiKTtcbmNvbnN0IHRyYW5zZm9ybV8xID0gcmVxdWlyZShcIi4vdHJhbnNmb3JtXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbi8qKlxuICogWmlwa2luIEV4cG9ydGVyXG4gKi9cbmNsYXNzIFppcGtpbkV4cG9ydGVyIHtcbiAgICBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9ICdPcGVuVGVsZW1ldHJ5IFNlcnZpY2UnO1xuICAgIF9zdGF0dXNDb2RlVGFnTmFtZTtcbiAgICBfc3RhdHVzRGVzY3JpcHRpb25UYWdOYW1lO1xuICAgIF91cmxTdHI7XG4gICAgX3NlbmQ7XG4gICAgX2dldEhlYWRlcnM7XG4gICAgX3NlcnZpY2VOYW1lO1xuICAgIF9pc1NodXRkb3duO1xuICAgIF9zZW5kaW5nUHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICB0aGlzLl91cmxTdHIgPVxuICAgICAgICAgICAgY29uZmlnLnVybCB8fFxuICAgICAgICAgICAgICAgICgoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX0VYUE9SVEVSX1pJUEtJTl9FTkRQT0lOVCcpID8/XG4gICAgICAgICAgICAgICAgICAgICdodHRwOi8vbG9jYWxob3N0Ojk0MTEvYXBpL3YyL3NwYW5zJyk7XG4gICAgICAgIHRoaXMuX3NlbmQgPSAoMCwgaW5kZXhfMS5wcmVwYXJlU2VuZCkodGhpcy5fdXJsU3RyLCBjb25maWcuaGVhZGVycyk7XG4gICAgICAgIHRoaXMuX3NlcnZpY2VOYW1lID0gY29uZmlnLnNlcnZpY2VOYW1lO1xuICAgICAgICB0aGlzLl9zdGF0dXNDb2RlVGFnTmFtZSA9XG4gICAgICAgICAgICBjb25maWcuc3RhdHVzQ29kZVRhZ05hbWUgfHwgdHJhbnNmb3JtXzEuZGVmYXVsdFN0YXR1c0NvZGVUYWdOYW1lO1xuICAgICAgICB0aGlzLl9zdGF0dXNEZXNjcmlwdGlvblRhZ05hbWUgPVxuICAgICAgICAgICAgY29uZmlnLnN0YXR1c0Rlc2NyaXB0aW9uVGFnTmFtZSB8fCB0cmFuc2Zvcm1fMS5kZWZhdWx0U3RhdHVzRXJyb3JUYWdOYW1lO1xuICAgICAgICB0aGlzLl9pc1NodXRkb3duID0gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmdldEV4cG9ydFJlcXVlc3RIZWFkZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRIZWFkZXJzID0gKDAsIHV0aWxzXzEucHJlcGFyZUdldEhlYWRlcnMpKGNvbmZpZy5nZXRFeHBvcnRSZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICB0aGlzLl9iZWZvcmVTZW5kID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydCBzcGFucy5cbiAgICAgKi9cbiAgICBleHBvcnQoc3BhbnMsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gU3RyaW5nKHRoaXMuX3NlcnZpY2VOYW1lIHx8XG4gICAgICAgICAgICBzcGFuc1swXS5yZXNvdXJjZS5hdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdIHx8XG4gICAgICAgICAgICB0aGlzLkRFRkFVTFRfU0VSVklDRV9OQU1FKTtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnWmlwa2luIGV4cG9ydGVyIGV4cG9ydCcpO1xuICAgICAgICBpZiAodGhpcy5faXNTaHV0ZG93bikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZXN1bHRDYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELFxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ0V4cG9ydGVyIGhhcyBiZWVuIHNodXRkb3duJyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VuZFNwYW5zKHNwYW5zLCBzZXJ2aWNlTmFtZSwgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc2VuZGluZ1Byb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIGNvbnN0IHBvcFByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbmRpbmdQcm9taXNlcy5pbmRleE9mKHByb21pc2UpO1xuICAgICAgICAgICAgdm9pZCB0aGlzLl9zZW5kaW5nUHJvbWlzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvbWlzZS50aGVuKHBvcFByb21pc2UsIHBvcFByb21pc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0ZG93biBleHBvcnRlci4gTm9vcCBvcGVyYXRpb24gaW4gdGhpcyBleHBvcnRlci5cbiAgICAgKi9cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnWmlwa2luIGV4cG9ydGVyIHNodXRkb3duJyk7XG4gICAgICAgIHRoaXMuX2lzU2h1dGRvd24gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydHMgYW55IHBlbmRpbmcgc3BhbnMgaW4gZXhwb3J0ZXJcbiAgICAgKi9cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgUHJvbWlzZS5hbGwodGhpcy5fc2VuZGluZ1Byb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogaWYgdXNlciBkZWZpbmVzIGdldEV4cG9ydFJlcXVlc3RIZWFkZXJzIGluIGNvbmZpZyB0aGVuIHRoaXMgd2lsbCBiZSBjYWxsZWRcbiAgICAgKiBldmVyeSB0aW1lIGJlZm9yZSBzZW5kLCBvdGhlcndpc2UgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG5vb3AgaW5cbiAgICAgKiBjb25zdHJ1Y3RvclxuICAgICAqIEBkZWZhdWx0IG5vb3BcbiAgICAgKi9cbiAgICBfYmVmb3JlU2VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2dldEhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbmQgPSAoMCwgaW5kZXhfMS5wcmVwYXJlU2VuZCkodGhpcy5fdXJsU3RyLCB0aGlzLl9nZXRIZWFkZXJzKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzcGFucyBhbmQgc2VuZHMgdG8gWmlwa2luIHNlcnZpY2UuXG4gICAgICovXG4gICAgX3NlbmRTcGFucyhzcGFucywgc2VydmljZU5hbWUsIGRvbmUpIHtcbiAgICAgICAgY29uc3Qgemlwa2luU3BhbnMgPSBzcGFucy5tYXAoc3BhbiA9PiAoMCwgdHJhbnNmb3JtXzEudG9aaXBraW5TcGFuKShzcGFuLCBTdHJpbmcoc3Bhbi5hdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdIHx8XG4gICAgICAgICAgICBzcGFuLnJlc291cmNlLmF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV0gfHxcbiAgICAgICAgICAgIHNlcnZpY2VOYW1lKSwgdGhpcy5fc3RhdHVzQ29kZVRhZ05hbWUsIHRoaXMuX3N0YXR1c0Rlc2NyaXB0aW9uVGFnTmFtZSkpO1xuICAgICAgICB0aGlzLl9iZWZvcmVTZW5kKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kKHppcGtpblNwYW5zLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuWmlwa2luRXhwb3J0ZXIgPSBaaXBraW5FeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcGtpbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWmlwa2luRXhwb3J0ZXIgPSBleHBvcnRzLnByZXBhcmVTZW5kID0gdm9pZCAwO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByZXBhcmVTZW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLnByZXBhcmVTZW5kOyB9IH0pO1xudmFyIHppcGtpbl8xID0gcmVxdWlyZShcIi4vemlwa2luXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWmlwa2luRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcGtpbl8xLlppcGtpbkV4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzX0RFQlVHX0ZMQUdfS0VZID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLyoqIHNoYXJlZCBjb250ZXh0IGZvciBzdG9yaW5nIGFuIGV4dHJhY3RlZCBiMyBkZWJ1ZyBmbGFnICovXG5leHBvcnRzLkIzX0RFQlVHX0ZMQUdfS0VZID0gKDAsIGFwaV8xLmNyZWF0ZUNvbnRleHRLZXkpKCdPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IEIzIERlYnVnIEZsYWcnKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbW1vbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWF9CM19GTEFHUyA9IGV4cG9ydHMuWF9CM19QQVJFTlRfU1BBTl9JRCA9IGV4cG9ydHMuWF9CM19TQU1QTEVEID0gZXhwb3J0cy5YX0IzX1NQQU5fSUQgPSBleHBvcnRzLlhfQjNfVFJBQ0VfSUQgPSBleHBvcnRzLkIzX0NPTlRFWFRfSEVBREVSID0gdm9pZCAwO1xuLyoqIEIzIHNpbmdsZS1oZWFkZXIga2V5ICovXG5leHBvcnRzLkIzX0NPTlRFWFRfSEVBREVSID0gJ2IzJztcbi8qIGIzIG11bHRpLWhlYWRlciBrZXlzICovXG5leHBvcnRzLlhfQjNfVFJBQ0VfSUQgPSAneC1iMy10cmFjZWlkJztcbmV4cG9ydHMuWF9CM19TUEFOX0lEID0gJ3gtYjMtc3BhbmlkJztcbmV4cG9ydHMuWF9CM19TQU1QTEVEID0gJ3gtYjMtc2FtcGxlZCc7XG5leHBvcnRzLlhfQjNfUEFSRU5UX1NQQU5fSUQgPSAneC1iMy1wYXJlbnRzcGFuaWQnO1xuZXhwb3J0cy5YX0IzX0ZMQUdTID0gJ3gtYjMtZmxhZ3MnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CM011bHRpUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgY29tbW9uXzEgPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IFZBTElEX1NBTVBMRURfVkFMVUVTID0gbmV3IFNldChbdHJ1ZSwgJ3RydWUnLCAnVHJ1ZScsICcxJywgMV0pO1xuY29uc3QgVkFMSURfVU5TQU1QTEVEX1ZBTFVFUyA9IG5ldyBTZXQoW2ZhbHNlLCAnZmFsc2UnLCAnRmFsc2UnLCAnMCcsIDBdKTtcbmZ1bmN0aW9uIGlzVmFsaWRTYW1wbGVkVmFsdWUoc2FtcGxlZCkge1xuICAgIHJldHVybiBzYW1wbGVkID09PSBhcGlfMS5UcmFjZUZsYWdzLlNBTVBMRUQgfHwgc2FtcGxlZCA9PT0gYXBpXzEuVHJhY2VGbGFncy5OT05FO1xufVxuZnVuY3Rpb24gcGFyc2VIZWFkZXIoaGVhZGVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlclswXSA6IGhlYWRlcjtcbn1cbmZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGNhcnJpZXIsIGdldHRlciwga2V5KSB7XG4gICAgY29uc3QgaGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBrZXkpO1xuICAgIHJldHVybiBwYXJzZUhlYWRlcihoZWFkZXIpO1xufVxuZnVuY3Rpb24gZ2V0VHJhY2VJZChjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICBjb25zdCB0cmFjZUlkID0gZ2V0SGVhZGVyVmFsdWUoY2FycmllciwgZ2V0dGVyLCBjb25zdGFudHNfMS5YX0IzX1RSQUNFX0lEKTtcbiAgICBpZiAodHlwZW9mIHRyYWNlSWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0cmFjZUlkLnBhZFN0YXJ0KDMyLCAnMCcpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBnZXRTcGFuSWQoY2FycmllciwgZ2V0dGVyKSB7XG4gICAgY29uc3Qgc3BhbklkID0gZ2V0SGVhZGVyVmFsdWUoY2FycmllciwgZ2V0dGVyLCBjb25zdGFudHNfMS5YX0IzX1NQQU5fSUQpO1xuICAgIGlmICh0eXBlb2Ygc3BhbklkID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gc3BhbklkO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBnZXREZWJ1ZyhjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IGdldEhlYWRlclZhbHVlKGNhcnJpZXIsIGdldHRlciwgY29uc3RhbnRzXzEuWF9CM19GTEFHUyk7XG4gICAgcmV0dXJuIGRlYnVnID09PSAnMScgPyAnMScgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRUcmFjZUZsYWdzKGNhcnJpZXIsIGdldHRlcikge1xuICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBnZXRIZWFkZXJWYWx1ZShjYXJyaWVyLCBnZXR0ZXIsIGNvbnN0YW50c18xLlhfQjNfU0FNUExFRCk7XG4gICAgY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhjYXJyaWVyLCBnZXR0ZXIpO1xuICAgIGlmIChkZWJ1ZyA9PT0gJzEnIHx8IFZBTElEX1NBTVBMRURfVkFMVUVTLmhhcyh0cmFjZUZsYWdzKSkge1xuICAgICAgICByZXR1cm4gYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEO1xuICAgIH1cbiAgICBpZiAodHJhY2VGbGFncyA9PT0gdW5kZWZpbmVkIHx8IFZBTElEX1VOU0FNUExFRF9WQUxVRVMuaGFzKHRyYWNlRmxhZ3MpKSB7XG4gICAgICAgIHJldHVybiBhcGlfMS5UcmFjZUZsYWdzLk5PTkU7XG4gICAgfVxuICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRvIGlzVmFsaWRTYW1wbGVkVmFsdWUgdGhhdCB0aGlzIGlzIG5vdCB2YWxpZFxuICAgIHJldHVybjtcbn1cbi8qKlxuICogUHJvcGFnYXRvciBmb3IgdGhlIEIzIG11bHRpcGxlLWhlYWRlciBIVFRQIGZvcm1hdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnppcGtpbi9iMy1wcm9wYWdhdGlvblxuICovXG5jbGFzcyBCM011bHRpUHJvcGFnYXRvciB7XG4gICAgaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcikge1xuICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IGFwaV8xLnRyYWNlLmdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICBpZiAoIXNwYW5Db250ZXh0IHx8XG4gICAgICAgICAgICAhKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkoc3BhbkNvbnRleHQpIHx8XG4gICAgICAgICAgICAoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBkZWJ1ZyA9IGNvbnRleHQuZ2V0VmFsdWUoY29tbW9uXzEuQjNfREVCVUdfRkxBR19LRVkpO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGNvbnN0YW50c18xLlhfQjNfVFJBQ0VfSUQsIHNwYW5Db250ZXh0LnRyYWNlSWQpO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGNvbnN0YW50c18xLlhfQjNfU1BBTl9JRCwgc3BhbkNvbnRleHQuc3BhbklkKTtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBCMyBzcGVjLCBpZiB0aGUgZGVidWcgZmxhZyBpcyBzZXQsXG4gICAgICAgIC8vIHRoZSBzYW1wbGVkIGZsYWcgc2hvdWxkbid0IGJlIHByb3BhZ2F0ZWQgYXMgd2VsbC5cbiAgICAgICAgaWYgKGRlYnVnID09PSAnMScpIHtcbiAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgY29uc3RhbnRzXzEuWF9CM19GTEFHUywgZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBoZWFkZXIgb25seSBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBzYW1wbGluZyBkZWNpc2lvbi5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIG9taXQgaXQgPT4gQWJzZW50LlxuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBjb25zdGFudHNfMS5YX0IzX1NBTVBMRUQsIChhcGlfMS5UcmFjZUZsYWdzLlNBTVBMRUQgJiBzcGFuQ29udGV4dC50cmFjZUZsYWdzKSA9PT0gYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEXG4gICAgICAgICAgICAgICAgPyAnMSdcbiAgICAgICAgICAgICAgICA6ICcwJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICAgICAgY29uc3QgdHJhY2VJZCA9IGdldFRyYWNlSWQoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgY29uc3Qgc3BhbklkID0gZ2V0U3BhbklkKGNhcnJpZXIsIGdldHRlcik7XG4gICAgICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBnZXRUcmFjZUZsYWdzKGNhcnJpZXIsIGdldHRlcik7XG4gICAgICAgIGNvbnN0IGRlYnVnID0gZ2V0RGVidWcoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgaWYgKCgwLCBhcGlfMS5pc1ZhbGlkVHJhY2VJZCkodHJhY2VJZCkgJiZcbiAgICAgICAgICAgICgwLCBhcGlfMS5pc1ZhbGlkU3BhbklkKShzcGFuSWQpICYmXG4gICAgICAgICAgICBpc1ZhbGlkU2FtcGxlZFZhbHVlKHRyYWNlRmxhZ3MpKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShjb21tb25fMS5CM19ERUJVR19GTEFHX0tFWSwgZGVidWcpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaV8xLnRyYWNlLnNldFNwYW5Db250ZXh0KGNvbnRleHQsIHtcbiAgICAgICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgICAgIHNwYW5JZCxcbiAgICAgICAgICAgICAgICBpc1JlbW90ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cmFjZUZsYWdzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGNvbnN0YW50c18xLlhfQjNfVFJBQ0VfSUQsXG4gICAgICAgICAgICBjb25zdGFudHNfMS5YX0IzX1NQQU5fSUQsXG4gICAgICAgICAgICBjb25zdGFudHNfMS5YX0IzX0ZMQUdTLFxuICAgICAgICAgICAgY29uc3RhbnRzXzEuWF9CM19TQU1QTEVELFxuICAgICAgICAgICAgY29uc3RhbnRzXzEuWF9CM19QQVJFTlRfU1BBTl9JRCxcbiAgICAgICAgXTtcbiAgICB9XG59XG5leHBvcnRzLkIzTXVsdGlQcm9wYWdhdG9yID0gQjNNdWx0aVByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CM011bHRpUHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQjNTaW5nbGVQcm9wYWdhdG9yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBjb21tb25fMSA9IHJlcXVpcmUoXCIuL2NvbW1vblwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgQjNfQ09OVEVYVF9SRUdFWCA9IC8oKD86WzAtOWEtZl17MTZ9KXsxLDJ9KS0oWzAtOWEtZl17MTZ9KSg/Oi0oWzAxZF0oPyFbMC05YS1mXSkpKT8oPzotKFswLTlhLWZdezE2fSkpPy87XG5jb25zdCBQQURESU5HID0gJzAnLnJlcGVhdCgxNik7XG5jb25zdCBTQU1QTEVEX1ZBTFVFUyA9IG5ldyBTZXQoWydkJywgJzEnXSk7XG5jb25zdCBERUJVR19TVEFURSA9ICdkJztcbmZ1bmN0aW9uIGNvbnZlcnRUb1RyYWNlSWQxMjgodHJhY2VJZCkge1xuICAgIHJldHVybiB0cmFjZUlkLmxlbmd0aCA9PT0gMzIgPyB0cmFjZUlkIDogYCR7UEFERElOR30ke3RyYWNlSWR9YDtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb1RyYWNlRmxhZ3Moc2FtcGxpbmdTdGF0ZSkge1xuICAgIGlmIChzYW1wbGluZ1N0YXRlICYmIFNBTVBMRURfVkFMVUVTLmhhcyhzYW1wbGluZ1N0YXRlKSkge1xuICAgICAgICByZXR1cm4gYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEO1xuICAgIH1cbiAgICByZXR1cm4gYXBpXzEuVHJhY2VGbGFncy5OT05FO1xufVxuLyoqXG4gKiBQcm9wYWdhdG9yIGZvciB0aGUgQjMgc2luZ2xlLWhlYWRlciBIVFRQIGZvcm1hdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnppcGtpbi9iMy1wcm9wYWdhdGlvblxuICovXG5jbGFzcyBCM1NpbmdsZVByb3BhZ2F0b3Ige1xuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGlfMS50cmFjZS5nZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcGFuQ29udGV4dCB8fFxuICAgICAgICAgICAgISgwLCBhcGlfMS5pc1NwYW5Db250ZXh0VmFsaWQpKHNwYW5Db250ZXh0KSB8fFxuICAgICAgICAgICAgKDAsIGNvcmVfMS5pc1RyYWNpbmdTdXBwcmVzc2VkKShjb250ZXh0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2FtcGxpbmdTdGF0ZSA9IGNvbnRleHQuZ2V0VmFsdWUoY29tbW9uXzEuQjNfREVCVUdfRkxBR19LRVkpIHx8IHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgJiAweDE7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7c3BhbkNvbnRleHQudHJhY2VJZH0tJHtzcGFuQ29udGV4dC5zcGFuSWR9LSR7c2FtcGxpbmdTdGF0ZX1gO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGNvbnN0YW50c18xLkIzX0NPTlRFWFRfSEVBREVSLCB2YWx1ZSk7XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgY29uc3RhbnRzXzEuQjNfQ09OVEVYVF9IRUFERVIpO1xuICAgICAgICBjb25zdCBiM0NvbnRleHQgPSBBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXI7XG4gICAgICAgIGlmICh0eXBlb2YgYjNDb250ZXh0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCBtYXRjaCA9IGIzQ29udGV4dC5tYXRjaChCM19DT05URVhUX1JFR0VYKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCBbLCBleHRyYWN0ZWRUcmFjZUlkLCBzcGFuSWQsIHNhbXBsaW5nU3RhdGVdID0gbWF0Y2g7XG4gICAgICAgIGNvbnN0IHRyYWNlSWQgPSBjb252ZXJ0VG9UcmFjZUlkMTI4KGV4dHJhY3RlZFRyYWNlSWQpO1xuICAgICAgICBpZiAoISgwLCBhcGlfMS5pc1ZhbGlkVHJhY2VJZCkodHJhY2VJZCkgfHwgISgwLCBhcGlfMS5pc1ZhbGlkU3BhbklkKShzcGFuSWQpKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBjb252ZXJ0VG9UcmFjZUZsYWdzKHNhbXBsaW5nU3RhdGUpO1xuICAgICAgICBpZiAoc2FtcGxpbmdTdGF0ZSA9PT0gREVCVUdfU1RBVEUpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKGNvbW1vbl8xLkIzX0RFQlVHX0ZMQUdfS0VZLCBzYW1wbGluZ1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpXzEudHJhY2Uuc2V0U3BhbkNvbnRleHQoY29udGV4dCwge1xuICAgICAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgICAgIHNwYW5JZCxcbiAgICAgICAgICAgIGlzUmVtb3RlOiB0cnVlLFxuICAgICAgICAgICAgdHJhY2VGbGFncyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtjb25zdGFudHNfMS5CM19DT05URVhUX0hFQURFUl07XG4gICAgfVxufVxuZXhwb3J0cy5CM1NpbmdsZVByb3BhZ2F0b3IgPSBCM1NpbmdsZVByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CM1NpbmdsZVByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzSW5qZWN0RW5jb2RpbmcgPSB2b2lkIDA7XG4vKiogRW51bWVyYXRpb24gb2YgQjMgaW5qZWN0IGVuY29kaW5ncyAqL1xudmFyIEIzSW5qZWN0RW5jb2Rpbmc7XG4oZnVuY3Rpb24gKEIzSW5qZWN0RW5jb2RpbmcpIHtcbiAgICBCM0luamVjdEVuY29kaW5nW0IzSW5qZWN0RW5jb2RpbmdbXCJTSU5HTEVfSEVBREVSXCJdID0gMF0gPSBcIlNJTkdMRV9IRUFERVJcIjtcbiAgICBCM0luamVjdEVuY29kaW5nW0IzSW5qZWN0RW5jb2RpbmdbXCJNVUxUSV9IRUFERVJcIl0gPSAxXSA9IFwiTVVMVElfSEVBREVSXCI7XG59KShCM0luamVjdEVuY29kaW5nID0gZXhwb3J0cy5CM0luamVjdEVuY29kaW5nIHx8IChleHBvcnRzLkIzSW5qZWN0RW5jb2RpbmcgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgQjNNdWx0aVByb3BhZ2F0b3JfMSA9IHJlcXVpcmUoXCIuL0IzTXVsdGlQcm9wYWdhdG9yXCIpO1xuY29uc3QgQjNTaW5nbGVQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9CM1NpbmdsZVByb3BhZ2F0b3JcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogUHJvcGFnYXRvciB0aGF0IGV4dHJhY3RzIEIzIGNvbnRleHQgaW4gYm90aCBzaW5nbGUgYW5kIG11bHRpLWhlYWRlciB2YXJpYW50cyxcbiAqIHdpdGggY29uZmlndXJhYmxlIGluamVjdGlvbiBmb3JtYXQgZGVmYXVsdGluZyB0byBCMyBzaW5nbGUtaGVhZGVyLiBEdWUgdG9cbiAqIHRoZSBhc3ltbWV0cnkgaW4gaW5qZWN0aW9uIGFuZCBleHRyYWN0aW9uIGZvcm1hdHMgdGhpcyBpcyBub3Qgc3VpdGFibGUgdG9cbiAqIGJlIGltcGxlbWVudGVkIGFzIGEgY29tcG9zaXRlIHByb3BhZ2F0b3IuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL29wZW56aXBraW4vYjMtcHJvcGFnYXRpb25cbiAqL1xuY2xhc3MgQjNQcm9wYWdhdG9yIHtcbiAgICBfYjNNdWx0aVByb3BhZ2F0b3IgPSBuZXcgQjNNdWx0aVByb3BhZ2F0b3JfMS5CM011bHRpUHJvcGFnYXRvcigpO1xuICAgIF9iM1NpbmdsZVByb3BhZ2F0b3IgPSBuZXcgQjNTaW5nbGVQcm9wYWdhdG9yXzEuQjNTaW5nbGVQcm9wYWdhdG9yKCk7XG4gICAgX2luamVjdDtcbiAgICBfZmllbGRzO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIGlmIChjb25maWcuaW5qZWN0RW5jb2RpbmcgPT09IHR5cGVzXzEuQjNJbmplY3RFbmNvZGluZy5NVUxUSV9IRUFERVIpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdCA9IHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmluamVjdDtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyA9IHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmZpZWxkcygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0ID0gdGhpcy5fYjNTaW5nbGVQcm9wYWdhdG9yLmluamVjdDtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyA9IHRoaXMuX2IzU2luZ2xlUHJvcGFnYXRvci5maWVsZHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGlmICgoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcik7XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgY29uc3RhbnRzXzEuQjNfQ09OVEVYVF9IRUFERVIpO1xuICAgICAgICBjb25zdCBiM0NvbnRleHQgPSBBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXI7XG4gICAgICAgIGlmIChiM0NvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9iM1NpbmdsZVByb3BhZ2F0b3IuZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxufVxuZXhwb3J0cy5CM1Byb3BhZ2F0b3IgPSBCM1Byb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CM1Byb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzSW5qZWN0RW5jb2RpbmcgPSBleHBvcnRzLlhfQjNfVFJBQ0VfSUQgPSBleHBvcnRzLlhfQjNfU1BBTl9JRCA9IGV4cG9ydHMuWF9CM19TQU1QTEVEID0gZXhwb3J0cy5YX0IzX1BBUkVOVF9TUEFOX0lEID0gZXhwb3J0cy5YX0IzX0ZMQUdTID0gZXhwb3J0cy5CM19DT05URVhUX0hFQURFUiA9IGV4cG9ydHMuQjNQcm9wYWdhdG9yID0gdm9pZCAwO1xudmFyIEIzUHJvcGFnYXRvcl8xID0gcmVxdWlyZShcIi4vQjNQcm9wYWdhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQjNQcm9wYWdhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCM1Byb3BhZ2F0b3JfMS5CM1Byb3BhZ2F0b3I7IH0gfSk7XG52YXIgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCM19DT05URVhUX0hFQURFUlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuQjNfQ09OVEVYVF9IRUFERVI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYX0IzX0ZMQUdTXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5YX0IzX0ZMQUdTOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWF9CM19QQVJFTlRfU1BBTl9JRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuWF9CM19QQVJFTlRfU1BBTl9JRDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhfQjNfU0FNUExFRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuWF9CM19TQU1QTEVEOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWF9CM19TUEFOX0lEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5YX0IzX1NQQU5fSUQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYX0IzX1RSQUNFX0lEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5YX0IzX1RSQUNFX0lEOyB9IH0pO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkIzSW5qZWN0RW5jb2RpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuQjNJbmplY3RFbmNvZGluZzsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5KYWVnZXJQcm9wYWdhdG9yID0gZXhwb3J0cy5VQkVSX0JBR0dBR0VfSEVBREVSX1BSRUZJWCA9IGV4cG9ydHMuVUJFUl9UUkFDRV9JRF9IRUFERVIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmV4cG9ydHMuVUJFUl9UUkFDRV9JRF9IRUFERVIgPSAndWJlci10cmFjZS1pZCc7XG5leHBvcnRzLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYID0gJ3ViZXJjdHgnO1xuLyoqXG4gKiBQcm9wYWdhdGVzIHtAbGluayBTcGFuQ29udGV4dH0gdGhyb3VnaCBUcmFjZSBDb250ZXh0IGZvcm1hdCBwcm9wYWdhdGlvbi5cbiAqIHt0cmFjZS1pZH06e3NwYW4taWR9OntwYXJlbnQtc3Bhbi1pZH06e2ZsYWdzfVxuICoge3RyYWNlLWlkfVxuICogNjQtYml0IG9yIDEyOC1iaXQgcmFuZG9tIG51bWJlciBpbiBiYXNlMTYgZm9ybWF0LlxuICogQ2FuIGJlIHZhcmlhYmxlIGxlbmd0aCwgc2hvcnRlciB2YWx1ZXMgYXJlIDAtcGFkZGVkIG9uIHRoZSBsZWZ0LlxuICogVmFsdWUgb2YgMCBpcyBpbnZhbGlkLlxuICoge3NwYW4taWR9XG4gKiA2NC1iaXQgcmFuZG9tIG51bWJlciBpbiBiYXNlMTYgZm9ybWF0LlxuICoge3BhcmVudC1zcGFuLWlkfVxuICogU2V0IHRvIDAgYmVjYXVzZSB0aGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuXG4gKiB7ZmxhZ3N9XG4gKiBPbmUgYnl0ZSBiaXRtYXAsIGFzIHR3byBoZXggZGlnaXRzLlxuICogSW5zcGlyZWQgYnkgamFlZ2VyLWNsaWVudC1ub2RlIHByb2plY3QuXG4gKi9cbmNsYXNzIEphZWdlclByb3BhZ2F0b3Ige1xuICAgIF9qYWVnZXJUcmFjZUhlYWRlcjtcbiAgICBfamFlZ2VyQmFnZ2FnZUhlYWRlclByZWZpeDtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9qYWVnZXJUcmFjZUhlYWRlciA9IGNvbmZpZztcbiAgICAgICAgICAgIHRoaXMuX2phZWdlckJhZ2dhZ2VIZWFkZXJQcmVmaXggPSBleHBvcnRzLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5famFlZ2VyVHJhY2VIZWFkZXIgPVxuICAgICAgICAgICAgICAgIGNvbmZpZz8uY3VzdG9tVHJhY2VIZWFkZXIgfHwgZXhwb3J0cy5VQkVSX1RSQUNFX0lEX0hFQURFUjtcbiAgICAgICAgICAgIHRoaXMuX2phZWdlckJhZ2dhZ2VIZWFkZXJQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNvbmZpZz8uY3VzdG9tQmFnZ2FnZUhlYWRlclByZWZpeCB8fCBleHBvcnRzLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGlfMS50cmFjZS5nZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZSA9IGFwaV8xLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2UoY29udGV4dCk7XG4gICAgICAgIGlmIChzcGFuQ29udGV4dCAmJiAoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgdHJhY2VGbGFncyA9IGAwJHsoc3BhbkNvbnRleHQudHJhY2VGbGFncyB8fCBhcGlfMS5UcmFjZUZsYWdzLk5PTkUpLnRvU3RyaW5nKDE2KX1gO1xuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCB0aGlzLl9qYWVnZXJUcmFjZUhlYWRlciwgYCR7c3BhbkNvbnRleHQudHJhY2VJZH06JHtzcGFuQ29udGV4dC5zcGFuSWR9OjA6JHt0cmFjZUZsYWdzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYWdnYWdlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBiYWdnYWdlLmdldEFsbEVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgYCR7dGhpcy5famFlZ2VyQmFnZ2FnZUhlYWRlclByZWZpeH0tJHtrZXl9YCwgZW5jb2RlVVJJQ29tcG9uZW50KGVudHJ5LnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICAgICAgY29uc3QgdWJlclRyYWNlSWRIZWFkZXIgPSBnZXR0ZXIuZ2V0KGNhcnJpZXIsIHRoaXMuX2phZWdlclRyYWNlSGVhZGVyKTtcbiAgICAgICAgY29uc3QgdWJlclRyYWNlSWQgPSBBcnJheS5pc0FycmF5KHViZXJUcmFjZUlkSGVhZGVyKVxuICAgICAgICAgICAgPyB1YmVyVHJhY2VJZEhlYWRlclswXVxuICAgICAgICAgICAgOiB1YmVyVHJhY2VJZEhlYWRlcjtcbiAgICAgICAgY29uc3QgYmFnZ2FnZVZhbHVlcyA9IGdldHRlclxuICAgICAgICAgICAgLmtleXMoY2FycmllcilcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKGAke3RoaXMuX2phZWdlckJhZ2dhZ2VIZWFkZXJQcmVmaXh9LWApKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXR0ZXIuZ2V0KGNhcnJpZXIsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleToga2V5LnN1YnN0cmluZyh0aGlzLl9qYWVnZXJCYWdnYWdlSGVhZGVyUHJlZml4Lmxlbmd0aCArIDEpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG5ld0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAvLyBpZiB0aGUgdHJhY2UgaWQgaGVhZGVyIGlzIHByZXNlbnQgYW5kIHZhbGlkLCBpbmplY3QgaXQgaW50byB0aGUgY29udGV4dFxuICAgICAgICBpZiAodHlwZW9mIHViZXJUcmFjZUlkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBkZXNlcmlhbGl6ZVNwYW5Db250ZXh0KHViZXJUcmFjZUlkKTtcbiAgICAgICAgICAgIGlmIChzcGFuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSBhcGlfMS50cmFjZS5zZXRTcGFuQ29udGV4dChuZXdDb250ZXh0LCBzcGFuQ29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhZ2dhZ2VWYWx1ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG5ld0NvbnRleHQ7XG4gICAgICAgIC8vIGlmIGJhZ2dhZ2UgdmFsdWVzIGFyZSBwcmVzZW50LCBpbmplY3QgaXQgaW50byB0aGUgY3VycmVudCBiYWdnYWdlXG4gICAgICAgIGxldCBjdXJyZW50QmFnZ2FnZSA9IGFwaV8xLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2UoY29udGV4dCkgPz8gYXBpXzEucHJvcGFnYXRpb24uY3JlYXRlQmFnZ2FnZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGJhZ2dhZ2VFbnRyeSBvZiBiYWdnYWdlVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoYmFnZ2FnZUVudHJ5LnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjdXJyZW50QmFnZ2FnZSA9IGN1cnJlbnRCYWdnYWdlLnNldEVudHJ5KGJhZ2dhZ2VFbnRyeS5rZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGVjb2RlVVJJQ29tcG9uZW50KGJhZ2dhZ2VFbnRyeS52YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdDb250ZXh0ID0gYXBpXzEucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShuZXdDb250ZXh0LCBjdXJyZW50QmFnZ2FnZSk7XG4gICAgICAgIHJldHVybiBuZXdDb250ZXh0O1xuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5famFlZ2VyVHJhY2VIZWFkZXJdO1xuICAgIH1cbn1cbmV4cG9ydHMuSmFlZ2VyUHJvcGFnYXRvciA9IEphZWdlclByb3BhZ2F0b3I7XG5jb25zdCBWQUxJRF9IRVhfUkUgPSAvXlswLTlhLWZdezEsMn0kL2k7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXJpYWxpemVkU3RyaW5nIC0gYSBzZXJpYWxpemVkIHNwYW4gY29udGV4dC5cbiAqIEByZXR1cm4ge1NwYW5Db250ZXh0fSAtIHJldHVybnMgYSBzcGFuIGNvbnRleHQgcmVwcmVzZW50ZWQgYnkgdGhlIHNlcmlhbGl6ZWRTdHJpbmcuXG4gKiovXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVNwYW5Db250ZXh0KHNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gZGVjb2RlVVJJQ29tcG9uZW50KHNlcmlhbGl6ZWRTdHJpbmcpLnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhlYWRlcnMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBbX3RyYWNlSWQsIF9zcGFuSWQsICwgZmxhZ3NdID0gaGVhZGVycztcbiAgICBjb25zdCB0cmFjZUlkID0gX3RyYWNlSWQucGFkU3RhcnQoMzIsICcwJyk7XG4gICAgY29uc3Qgc3BhbklkID0gX3NwYW5JZC5wYWRTdGFydCgxNiwgJzAnKTtcbiAgICBjb25zdCB0cmFjZUZsYWdzID0gVkFMSURfSEVYX1JFLnRlc3QoZmxhZ3MpID8gcGFyc2VJbnQoZmxhZ3MsIDE2KSAmIDEgOiAxO1xuICAgIHJldHVybiB7IHRyYWNlSWQsIHNwYW5JZCwgaXNSZW1vdGU6IHRydWUsIHRyYWNlRmxhZ3MgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUphZWdlclByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVCRVJfVFJBQ0VfSURfSEVBREVSID0gZXhwb3J0cy5VQkVSX0JBR0dBR0VfSEVBREVSX1BSRUZJWCA9IGV4cG9ydHMuSmFlZ2VyUHJvcGFnYXRvciA9IHZvaWQgMDtcbnZhciBKYWVnZXJQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9KYWVnZXJQcm9wYWdhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSmFlZ2VyUHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSmFlZ2VyUHJvcGFnYXRvcl8xLkphZWdlclByb3BhZ2F0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVQkVSX0JBR0dBR0VfSEVBREVSX1BSRUZJWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSmFlZ2VyUHJvcGFnYXRvcl8xLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVUJFUl9UUkFDRV9JRF9IRUFERVJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEphZWdlclByb3BhZ2F0b3JfMS5VQkVSX1RSQUNFX0lEX0hFQURFUjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXR1cFByb3BhZ2F0b3IgPSBleHBvcnRzLnNldHVwQ29udGV4dE1hbmFnZXIgPSBleHBvcnRzLmdldFByb3BhZ2F0b3JGcm9tRW52ID0gZXhwb3J0cy5nZXRTcGFuUHJvY2Vzc29yc0Zyb21FbnYgPSBleHBvcnRzLmdldE90bHBQcm90b2NvbEZyb21FbnYgPSBleHBvcnRzLmZpbHRlckJsYW5rc0FuZE51bGxzID0gZXhwb3J0cy5nZXRSZXNvdXJjZURldGVjdG9yc0Zyb21FbnYgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IGV4cG9ydGVyX3RyYWNlX290bHBfcHJvdG9fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLXByb3RvXCIpO1xuY29uc3QgZXhwb3J0ZXJfdHJhY2Vfb3RscF9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwXCIpO1xuY29uc3QgZXhwb3J0ZXJfdHJhY2Vfb3RscF9ncnBjXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1ncnBjXCIpO1xuY29uc3QgZXhwb3J0ZXJfemlwa2luXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItemlwa2luXCIpO1xuY29uc3QgcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzXCIpO1xuY29uc3Qgc2RrX3RyYWNlX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZVwiKTtcbmNvbnN0IHByb3BhZ2F0b3JfYjNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWIzXCIpO1xuY29uc3QgcHJvcGFnYXRvcl9qYWVnZXJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9wcm9wYWdhdG9yLWphZWdlclwiKTtcbmNvbnN0IGNvbnRleHRfYXN5bmNfaG9va3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb250ZXh0LWFzeW5jLWhvb2tzXCIpO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfRU5WSVJPTk1FTlQgPSAnZW52JztcbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SX0hPU1QgPSAnaG9zdCc7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9PUyA9ICdvcyc7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9QUk9DRVNTID0gJ3Byb2Nlc3MnO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfU0VSVklDRV9JTlNUQU5DRV9JRCA9ICdzZXJ2aWNlaW5zdGFuY2UnO1xuZnVuY3Rpb24gZ2V0UmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52KCkge1xuICAgIC8vIFdoZW4gdXBkYXRpbmcgdGhpcyBsaXN0LCBtYWtlIHN1cmUgdG8gYWxzbyB1cGRhdGUgdGhlIHNlY3Rpb24gYHJlc291cmNlRGV0ZWN0b3JzYCBvbiBSRUFETUUuXG4gICAgY29uc3QgcmVzb3VyY2VEZXRlY3RvcnMgPSBuZXcgTWFwKFtcbiAgICAgICAgW1JFU09VUkNFX0RFVEVDVE9SX0VOVklST05NRU5ULCByZXNvdXJjZXNfMS5lbnZEZXRlY3Rvcl0sXG4gICAgICAgIFtSRVNPVVJDRV9ERVRFQ1RPUl9IT1NULCByZXNvdXJjZXNfMS5ob3N0RGV0ZWN0b3JdLFxuICAgICAgICBbUkVTT1VSQ0VfREVURUNUT1JfT1MsIHJlc291cmNlc18xLm9zRGV0ZWN0b3JdLFxuICAgICAgICBbUkVTT1VSQ0VfREVURUNUT1JfU0VSVklDRV9JTlNUQU5DRV9JRCwgcmVzb3VyY2VzXzEuc2VydmljZUluc3RhbmNlSWREZXRlY3Rvcl0sXG4gICAgICAgIFtSRVNPVVJDRV9ERVRFQ1RPUl9QUk9DRVNTLCByZXNvdXJjZXNfMS5wcm9jZXNzRGV0ZWN0b3JdLFxuICAgIF0pO1xuICAgIGNvbnN0IHJlc291cmNlRGV0ZWN0b3JzRnJvbUVudiA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnYpKCdPVEVMX05PREVfUkVTT1VSQ0VfREVURUNUT1JTJykgPz8gWydhbGwnXTtcbiAgICBpZiAocmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52LmluY2x1ZGVzKCdhbGwnKSkge1xuICAgICAgICByZXR1cm4gWy4uLnJlc291cmNlRGV0ZWN0b3JzLnZhbHVlcygpXS5mbGF0KCk7XG4gICAgfVxuICAgIGlmIChyZXNvdXJjZURldGVjdG9yc0Zyb21FbnYuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiByZXNvdXJjZURldGVjdG9yc0Zyb21FbnYuZmxhdE1hcChkZXRlY3RvciA9PiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlRGV0ZWN0b3IgPSByZXNvdXJjZURldGVjdG9ycy5nZXQoZGV0ZWN0b3IpO1xuICAgICAgICBpZiAoIXJlc291cmNlRGV0ZWN0b3IpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgSW52YWxpZCByZXNvdXJjZSBkZXRlY3RvciBcIiR7ZGV0ZWN0b3J9XCIgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBPVEVMX05PREVfUkVTT1VSQ0VfREVURUNUT1JTYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlRGV0ZWN0b3IgfHwgW107XG4gICAgfSk7XG59XG5leHBvcnRzLmdldFJlc291cmNlRGV0ZWN0b3JzRnJvbUVudiA9IGdldFJlc291cmNlRGV0ZWN0b3JzRnJvbUVudjtcbmZ1bmN0aW9uIGZpbHRlckJsYW5rc0FuZE51bGxzKGxpc3QpIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyAhPT0gJ251bGwnICYmIHMgIT09ICcnKTtcbn1cbmV4cG9ydHMuZmlsdGVyQmxhbmtzQW5kTnVsbHMgPSBmaWx0ZXJCbGFua3NBbmROdWxscztcbmZ1bmN0aW9uIGdldE90bHBQcm90b2NvbEZyb21FbnYoKSB7XG4gICAgcmV0dXJuICgoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX1BST1RPQ09MJykgPz9cbiAgICAgICAgKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KSgnT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MJykgPz9cbiAgICAgICAgJ2h0dHAvcHJvdG9idWYnKTtcbn1cbmV4cG9ydHMuZ2V0T3RscFByb3RvY29sRnJvbUVudiA9IGdldE90bHBQcm90b2NvbEZyb21FbnY7XG5mdW5jdGlvbiBnZXRPdGxwRXhwb3J0ZXJGcm9tRW52KCkge1xuICAgIGNvbnN0IHByb3RvY29sID0gZ2V0T3RscFByb3RvY29sRnJvbUVudigpO1xuICAgIHN3aXRjaCAocHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnZ3JwYyc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGV4cG9ydGVyX3RyYWNlX290bHBfZ3JwY18xLk9UTFBUcmFjZUV4cG9ydGVyKCk7XG4gICAgICAgIGNhc2UgJ2h0dHAvanNvbic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGV4cG9ydGVyX3RyYWNlX290bHBfaHR0cF8xLk9UTFBUcmFjZUV4cG9ydGVyKCk7XG4gICAgICAgIGNhc2UgJ2h0dHAvcHJvdG9idWYnOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBleHBvcnRlcl90cmFjZV9vdGxwX3Byb3RvXzEuT1RMUFRyYWNlRXhwb3J0ZXIoKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgVW5zdXBwb3J0ZWQgT1RMUCB0cmFjZXMgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LiBVc2luZyBodHRwL3Byb3RvYnVmLmApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBleHBvcnRlcl90cmFjZV9vdGxwX3Byb3RvXzEuT1RMUFRyYWNlRXhwb3J0ZXIoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTcGFuUHJvY2Vzc29yc0Zyb21FbnYoKSB7XG4gICAgY29uc3QgZXhwb3J0ZXJzTWFwID0gbmV3IE1hcChbXG4gICAgICAgIFsnb3RscCcsICgpID0+IGdldE90bHBFeHBvcnRlckZyb21FbnYoKV0sXG4gICAgICAgIFsnemlwa2luJywgKCkgPT4gbmV3IGV4cG9ydGVyX3ppcGtpbl8xLlppcGtpbkV4cG9ydGVyKCldLFxuICAgICAgICBbJ2NvbnNvbGUnLCAoKSA9PiBuZXcgc2RrX3RyYWNlX2Jhc2VfMS5Db25zb2xlU3BhbkV4cG9ydGVyKCldLFxuICAgIF0pO1xuICAgIGNvbnN0IGV4cG9ydGVycyA9IFtdO1xuICAgIGNvbnN0IHByb2Nlc3NvcnMgPSBbXTtcbiAgICBsZXQgdHJhY2VFeHBvcnRlcnNMaXN0ID0gZmlsdGVyQmxhbmtzQW5kTnVsbHMoQXJyYXkuZnJvbShuZXcgU2V0KCgwLCBjb3JlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnYpKCdPVEVMX1RSQUNFU19FWFBPUlRFUicpKSkpO1xuICAgIGlmICh0cmFjZUV4cG9ydGVyc0xpc3RbMF0gPT09ICdub25lJykge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ09URUxfVFJBQ0VTX0VYUE9SVEVSIGNvbnRhaW5zIFwibm9uZVwiLiBTREsgd2lsbCBub3QgYmUgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHRyYWNlRXhwb3J0ZXJzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnT1RFTF9UUkFDRVNfRVhQT1JURVIgaXMgZW1wdHkuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICAgICAgdHJhY2VFeHBvcnRlcnNMaXN0ID0gWydvdGxwJ107XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyYWNlRXhwb3J0ZXJzTGlzdC5sZW5ndGggPiAxICYmXG4gICAgICAgIHRyYWNlRXhwb3J0ZXJzTGlzdC5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignT1RFTF9UUkFDRVNfRVhQT1JURVIgY29udGFpbnMgXCJub25lXCIgYWxvbmcgd2l0aCBvdGhlciBleHBvcnRlcnMuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICAgICAgdHJhY2VFeHBvcnRlcnNMaXN0ID0gWydvdGxwJ107XG4gICAgfVxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0cmFjZUV4cG9ydGVyc0xpc3QpIHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZXIgPSBleHBvcnRlcnNNYXAuZ2V0KG5hbWUpPy4oKTtcbiAgICAgICAgaWYgKGV4cG9ydGVyKSB7XG4gICAgICAgICAgICBleHBvcnRlcnMucHVzaChleHBvcnRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVucmVjb2duaXplZCBPVEVMX1RSQUNFU19FWFBPUlRFUiB2YWx1ZTogJHtuYW1lfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGV4cCBvZiBleHBvcnRlcnMpIHtcbiAgICAgICAgaWYgKGV4cCBpbnN0YW5jZW9mIHNka190cmFjZV9iYXNlXzEuQ29uc29sZVNwYW5FeHBvcnRlcikge1xuICAgICAgICAgICAgcHJvY2Vzc29ycy5wdXNoKG5ldyBzZGtfdHJhY2VfYmFzZV8xLlNpbXBsZVNwYW5Qcm9jZXNzb3IoZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzb3JzLnB1c2gobmV3IHNka190cmFjZV9iYXNlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChleHBvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignVW5hYmxlIHRvIHNldCB1cCB0cmFjZSBleHBvcnRlcihzKSBkdWUgdG8gaW52YWxpZCBleHBvcnRlciBhbmQvb3IgcHJvdG9jb2wgdmFsdWVzLicpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzc29ycztcbn1cbmV4cG9ydHMuZ2V0U3BhblByb2Nlc3NvcnNGcm9tRW52ID0gZ2V0U3BhblByb2Nlc3NvcnNGcm9tRW52O1xuLyoqXG4gKiBHZXQgYSBwcm9wYWdhdG9yIGFzIGRlZmluZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BhZ2F0b3JGcm9tRW52KCkge1xuICAgIC8vIEVtcHR5IGFuZCB1bmRlZmluZWQgTVVTVCBiZSB0cmVhdGVkIGVxdWFsLlxuICAgIGNvbnN0IHByb3BhZ2F0b3JzRW52VmFyVmFsdWUgPSAoMCwgY29yZV8xLmdldFN0cmluZ0xpc3RGcm9tRW52KSgnT1RFTF9QUk9QQUdBVE9SUycpO1xuICAgIGlmIChwcm9wYWdhdG9yc0VudlZhclZhbHVlID09IG51bGwpIHtcbiAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCB0byBmYWxsIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocHJvcGFnYXRvcnNFbnZWYXJWYWx1ZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBub3RlOiB0aGlzIG9ubHkgY29udGFpbnMgc3BlY2lmaWNhdGlvbiByZXF1aXJlZCBwcm9wYWdhdG9ycyB0aGF0IGFyZSBhY3R1YWxseSBob3N0ZWQgaW4gdGhpcyByZXBvLlxuICAgIC8vIEFueSBvdGhlciBwcm9wYWdhdG9ycyAobGlrZSBhd3MsIGF3cy1sYW1iZGEsIHNob3VsZCBnbyBpbnRvIGBAb3BlbnRlbGVtZXRyeS9hdXRvLWNvbmZpZ3VyYXRpb24tcHJvcGFnYXRvcnNgIGluc3RlYWQpLlxuICAgIGNvbnN0IHByb3BhZ2F0b3JzRmFjdG9yeSA9IG5ldyBNYXAoW1xuICAgICAgICBbJ3RyYWNlY29udGV4dCcsICgpID0+IG5ldyBjb3JlXzEuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcigpXSxcbiAgICAgICAgWydiYWdnYWdlJywgKCkgPT4gbmV3IGNvcmVfMS5XM0NCYWdnYWdlUHJvcGFnYXRvcigpXSxcbiAgICAgICAgWydiMycsICgpID0+IG5ldyBwcm9wYWdhdG9yX2IzXzEuQjNQcm9wYWdhdG9yKCldLFxuICAgICAgICBbXG4gICAgICAgICAgICAnYjNtdWx0aScsXG4gICAgICAgICAgICAoKSA9PiBuZXcgcHJvcGFnYXRvcl9iM18xLkIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBwcm9wYWdhdG9yX2IzXzEuQjNJbmplY3RFbmNvZGluZy5NVUxUSV9IRUFERVIgfSksXG4gICAgICAgIF0sXG4gICAgICAgIFsnamFlZ2VyJywgKCkgPT4gbmV3IHByb3BhZ2F0b3JfamFlZ2VyXzEuSmFlZ2VyUHJvcGFnYXRvcigpXSxcbiAgICBdKTtcbiAgICAvLyBWYWx1ZXMgTVVTVCBiZSBkZWR1cGxpY2F0ZWQgaW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSBQcm9wYWdhdG9yIG9ubHkgb25jZS5cbiAgICBjb25zdCB1bmlxdWVQcm9wYWdhdG9yTmFtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQocHJvcGFnYXRvcnNFbnZWYXJWYWx1ZSkpO1xuICAgIGNvbnN0IHByb3BhZ2F0b3JzID0gdW5pcXVlUHJvcGFnYXRvck5hbWVzLm1hcChuYW1lID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGFnYXRvciA9IHByb3BhZ2F0b3JzRmFjdG9yeS5nZXQobmFtZSk/LigpO1xuICAgICAgICBpZiAoIXByb3BhZ2F0b3IpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgUHJvcGFnYXRvciBcIiR7bmFtZX1cIiByZXF1ZXN0ZWQgdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bmF2YWlsYWJsZS5gKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0b3I7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRQcm9wYWdhdG9ycyA9IHByb3BhZ2F0b3JzLnJlZHVjZSgobGlzdCwgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sIFtdKTtcbiAgICBpZiAodmFsaWRQcm9wYWdhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gbnVsbCB0byBzaWduYWwgdGhhdCB0aGUgZGVmYXVsdCBzaG91bGQgKipub3QqKiBiZSB1c2VkIGluIGl0cyBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHVuaXF1ZVByb3BhZ2F0b3JOYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkUHJvcGFnYXRvcnNbMF07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IGNvcmVfMS5Db21wb3NpdGVQcm9wYWdhdG9yKHtcbiAgICAgICAgICAgIHByb3BhZ2F0b3JzOiB2YWxpZFByb3BhZ2F0b3JzLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmdldFByb3BhZ2F0b3JGcm9tRW52ID0gZ2V0UHJvcGFnYXRvckZyb21FbnY7XG5mdW5jdGlvbiBzZXR1cENvbnRleHRNYW5hZ2VyKGNvbnRleHRNYW5hZ2VyKSB7XG4gICAgLy8gbnVsbCBtZWFucyAnZG8gbm90IHJlZ2lzdGVyJ1xuICAgIGlmIChjb250ZXh0TWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHVuZGVmaW5lZCBtZWFucyAncmVnaXN0ZXIgZGVmYXVsdCdcbiAgICBpZiAoY29udGV4dE1hbmFnZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29udGV4dE1hbmFnZXIgPSBuZXcgY29udGV4dF9hc3luY19ob29rc18xLkFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXIoKTtcbiAgICAgICAgZGVmYXVsdENvbnRleHRNYW5hZ2VyLmVuYWJsZSgpO1xuICAgICAgICBhcGlfMS5jb250ZXh0LnNldEdsb2JhbENvbnRleHRNYW5hZ2VyKGRlZmF1bHRDb250ZXh0TWFuYWdlcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGV4dE1hbmFnZXIuZW5hYmxlKCk7XG4gICAgYXBpXzEuY29udGV4dC5zZXRHbG9iYWxDb250ZXh0TWFuYWdlcihjb250ZXh0TWFuYWdlcik7XG59XG5leHBvcnRzLnNldHVwQ29udGV4dE1hbmFnZXIgPSBzZXR1cENvbnRleHRNYW5hZ2VyO1xuZnVuY3Rpb24gc2V0dXBQcm9wYWdhdG9yKHByb3BhZ2F0b3IpIHtcbiAgICAvLyBudWxsIG1lYW5zICdkbyBub3QgcmVnaXN0ZXInXG4gICAgaWYgKHByb3BhZ2F0b3IgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB1bmRlZmluZWQgbWVhbnMgJ3JlZ2lzdGVyIGRlZmF1bHQnXG4gICAgaWYgKHByb3BhZ2F0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcGlfMS5wcm9wYWdhdGlvbi5zZXRHbG9iYWxQcm9wYWdhdG9yKG5ldyBjb3JlXzEuQ29tcG9zaXRlUHJvcGFnYXRvcih7XG4gICAgICAgICAgICBwcm9wYWdhdG9yczogW1xuICAgICAgICAgICAgICAgIG5ldyBjb3JlXzEuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcigpLFxuICAgICAgICAgICAgICAgIG5ldyBjb3JlXzEuVzNDQmFnZ2FnZVByb3BhZ2F0b3IoKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcGlfMS5wcm9wYWdhdGlvbi5zZXRHbG9iYWxQcm9wYWdhdG9yKHByb3BhZ2F0b3IpO1xufVxuZXhwb3J0cy5zZXR1cFByb3BhZ2F0b3IgPSBzZXR1cFByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9kZVNESyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGFwaV9sb2dzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3NcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCByZXNvdXJjZXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXNcIik7XG5jb25zdCBzZGtfbG9nc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay1sb2dzXCIpO1xuY29uc3QgZXhwb3J0ZXJfbG9nc19vdGxwX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtaHR0cFwiKTtcbmNvbnN0IGV4cG9ydGVyX2xvZ3Nfb3RscF9ncnBjXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWdycGNcIik7XG5jb25zdCBleHBvcnRlcl9sb2dzX290bHBfcHJvdG9fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtcHJvdG9cIik7XG5jb25zdCBleHBvcnRlcl9tZXRyaWNzX290bHBfZ3JwY18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1ncnBjXCIpO1xuY29uc3QgZXhwb3J0ZXJfbWV0cmljc19vdGxwX3Byb3RvXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvXCIpO1xuY29uc3QgZXhwb3J0ZXJfbWV0cmljc19vdGxwX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cFwiKTtcbmNvbnN0IGV4cG9ydGVyX3Byb21ldGhldXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1wcm9tZXRoZXVzXCIpO1xuY29uc3Qgc2RrX21ldHJpY3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZGstbWV0cmljc1wiKTtcbmNvbnN0IHNka190cmFjZV9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2VcIik7XG5jb25zdCBzZGtfdHJhY2Vfbm9kZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBAUmV0dXJucyBwYXJhbSB2YWx1ZSwgaWYgc2V0IGVsc2UgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUluTWlsbGlzKGVudk5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUludChwcm9jZXNzLmVudltlbnZOYW1lXSB8fCAnJykgfHwgZGVmYXVsdFZhbHVlO1xufVxuLyoqXG4gKlxuICogQHJldHVybnMgTWV0cmljUmVhZGVyW10gaWYgYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjb25maWd1cmVkXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZU1ldHJpY1Byb3ZpZGVyRnJvbUVudigpIHtcbiAgICBjb25zdCBtZXRyaWNSZWFkZXJzID0gW107XG4gICAgY29uc3QgZW5hYmxlZEV4cG9ydGVycyA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnYpKCdPVEVMX01FVFJJQ1NfRVhQT1JURVInKTtcbiAgICBpZiAoIWVuYWJsZWRFeHBvcnRlcnMpIHtcbiAgICAgICAgcmV0dXJuIG1ldHJpY1JlYWRlcnM7XG4gICAgfVxuICAgIGlmIChlbmFibGVkRXhwb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdPVEVMX01FVFJJQ1NfRVhQT1JURVIgaXMgZW1wdHkuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICB9XG4gICAgaWYgKGVuYWJsZWRFeHBvcnRlcnMuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICBhcGlfMS5kaWFnLmluZm8oYE9URUxfTUVUUklDU19FWFBPUlRFUiBjb250YWlucyBcIm5vbmVcIi4gTWV0cmljIHByb3ZpZGVyIHdpbGwgbm90IGJlIGluaXRpYWxpemVkLmApO1xuICAgICAgICByZXR1cm4gbWV0cmljUmVhZGVycztcbiAgICB9XG4gICAgZW5hYmxlZEV4cG9ydGVycy5mb3JFYWNoKGV4cG9ydGVyID0+IHtcbiAgICAgICAgaWYgKGV4cG9ydGVyID09PSAnb3RscCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX01FVFJJQ1NfUFJPVE9DT0w/LnRyaW0oKSB8fFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9QUk9UT0NPTD8udHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0SW50ZXJ2YWxNaWxsaXMgPSBnZXRWYWx1ZUluTWlsbGlzKCdPVEVMX01FVFJJQ19FWFBPUlRfSU5URVJWQUwnLCA2MDAwMCk7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRUaW1lb3V0TWlsbGlzID0gZ2V0VmFsdWVJbk1pbGxpcygnT1RFTF9NRVRSSUNfRVhQT1JUX1RJTUVPVVQnLCAzMDAwMCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZ3JwYyc6XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY1JlYWRlcnMucHVzaChuZXcgc2RrX21ldHJpY3NfMS5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogbmV3IGV4cG9ydGVyX21ldHJpY3Nfb3RscF9ncnBjXzEuT1RMUE1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZXhwb3J0SW50ZXJ2YWxNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRUaW1lb3V0TWlsbGlzOiBleHBvcnRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHAvanNvbic6XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY1JlYWRlcnMucHVzaChuZXcgc2RrX21ldHJpY3NfMS5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogbmV3IGV4cG9ydGVyX21ldHJpY3Nfb3RscF9odHRwXzEuT1RMUE1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZXhwb3J0SW50ZXJ2YWxNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRUaW1lb3V0TWlsbGlzOiBleHBvcnRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHAvcHJvdG9idWYnOlxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNSZWFkZXJzLnB1c2gobmV3IHNka19tZXRyaWNzXzEuUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG5ldyBleHBvcnRlcl9tZXRyaWNzX290bHBfcHJvdG9fMS5PVExQTWV0cmljRXhwb3J0ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEludGVydmFsTWlsbGlzOiBleHBvcnRJbnRlcnZhbE1pbGxpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydFRpbWVvdXRNaWxsaXM6IGV4cG9ydFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbnN1cHBvcnRlZCBPVExQIG1ldHJpY3MgcHJvdG9jb2w6IFwiJHtwcm90b2NvbH1cIi4gVXNpbmcgaHR0cC9wcm90b2J1Zi5gKTtcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljUmVhZGVycy5wdXNoKG5ldyBzZGtfbWV0cmljc18xLlBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBuZXcgZXhwb3J0ZXJfbWV0cmljc19vdGxwX3Byb3RvXzEuT1RMUE1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZXhwb3J0SW50ZXJ2YWxNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRUaW1lb3V0TWlsbGlzOiBleHBvcnRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhwb3J0ZXIgPT09ICdjb25zb2xlJykge1xuICAgICAgICAgICAgbWV0cmljUmVhZGVycy5wdXNoKG5ldyBzZGtfbWV0cmljc18xLlBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyKHtcbiAgICAgICAgICAgICAgICBleHBvcnRlcjogbmV3IHNka19tZXRyaWNzXzEuQ29uc29sZU1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhwb3J0ZXIgPT09ICdwcm9tZXRoZXVzJykge1xuICAgICAgICAgICAgbWV0cmljUmVhZGVycy5wdXNoKG5ldyBleHBvcnRlcl9wcm9tZXRoZXVzXzEuUHJvbWV0aGV1c0V4cG9ydGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbnN1cHBvcnRlZCBPVEVMX01FVFJJQ1NfRVhQT1JURVIgdmFsdWU6IFwiJHtleHBvcnRlcn1cIi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6IG90bHAsIGNvbnNvbGUsIHByb21ldGhldXMsIG5vbmUuYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWV0cmljUmVhZGVycztcbn1cbi8qKlxuICogQSBzZXR1cCBoZWxwZXIgZm9yIHRoZSBPcGVuVGVsZW1ldHJ5IFNES3MgKGxvZ3MsIG1ldHJpY3MsIHRyYWNlcykuXG4gKiA8cD4gQWZ0ZXIgc3VjY2Vzc2Z1bCBzZXR1cCB1c2luZyB7QGxpbmsgTm9kZVNESyNzdGFydCgpfSwgdXNlIGBAb3BlbnRlbGVtZXRyeS9hcGlgIHRvIG9idGFpbiB0aGUgcmVnaXN0ZXJlZCBjb21wb25lbnRzLlxuICogPHA+IFVzZSB0aGUgc2h1dGRvd24gaGFuZGxlciB7QGxpbmsgTm9kZVNESyNzaHV0ZG93bigpfSB0byBlbnN1cmUgeW91ciB0ZWxlbWV0cnkgaXMgZXhwb3J0ZWQgYmVmb3JlIHRoZSBwcm9jZXNzIGV4aXRzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPiBSZWdpc3RlciBTREsgYnkgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIDwvY2FwdGlvbj5cbiAqICAgIGNvbnN0IG5vZGVTZGsgPSBuZXcgTm9kZVNESygpOyAvLyBwcm92aWRpbmcgbm8gb3B0aW9ucyB1c2VzIE9URUxfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFNESyBzZXR1cC5cbiAqICAgIG5vZGVTZGsuc3RhcnQoKTsgLy8gcmVnaXN0ZXJzIGFsbCBjb25maWd1cmVkIFNESyBjb21wb25lbnRzXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj4gT3ZlcnJpZGUgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlnIHdpdGggeW91ciBvd24gY29tcG9uZW50cyA8L2NhcHRpb24+XG4gKiAgICBjb25zdCBub2RlU2RrID0gbmV3IE5vZGVTREsoe1xuICogICAgICAvLyBvdmVycmlkZSB0aGUgbGlzdCBvZiBtZXRyaWMgcmVhZGVyIHdpdGggeW91ciBvd24gb3B0aW9ucyBhbmQgaWdub3JlIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbmZpZ1xuICogICAgICAvLyBleHBsb3JlIHRoZSBkb2NzIG9mIG90aGVyIG9wdGlvbnMgdG8gbGVhcm4gbW9yZSFcbiAqICAgICAgbWV0cmljUmVhZGVyczogWyBuZXcgUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIoe1xuICogICAgICAgIGV4cG9ydGVyOiBuZXcgT1RMUE1ldHJpY3NFeHBvcnRlcigpXG4gKiAgICAgICAgfSldXG4gKiAgICB9KTtcbiAqICAgIG5vZGVTZGsuc3RhcnQoKTsgLy8gcmVnaXN0ZXJzIGFsbCBjb25maWd1cmVkIFNESyBjb21wb25lbnRzXG4gKi9cbmNsYXNzIE5vZGVTREsge1xuICAgIF90cmFjZXJQcm92aWRlckNvbmZpZztcbiAgICBfbG9nZ2VyUHJvdmlkZXJDb25maWc7XG4gICAgX21ldGVyUHJvdmlkZXJDb25maWc7XG4gICAgX2luc3RydW1lbnRhdGlvbnM7XG4gICAgX3Jlc291cmNlO1xuICAgIF9yZXNvdXJjZURldGVjdG9ycztcbiAgICBfYXV0b0RldGVjdFJlc291cmNlcztcbiAgICBfdHJhY2VyUHJvdmlkZXI7XG4gICAgX2xvZ2dlclByb3ZpZGVyO1xuICAgIF9tZXRlclByb3ZpZGVyO1xuICAgIF9zZXJ2aWNlTmFtZTtcbiAgICBfY29uZmlndXJhdGlvbjtcbiAgICBfZGlzYWJsZWQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IE5vZGVKUyBTREsgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uID0ge30pIHtcbiAgICAgICAgaWYgKCgwLCBjb3JlXzEuZ2V0Qm9vbGVhbkZyb21FbnYpKCdPVEVMX1NES19ESVNBQkxFRCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBGdW5jdGlvbnMgd2l0aCBwb3NzaWJsZSBzaWRlLWVmZmVjdHMgYXJlIHNldFxuICAgICAgICAgICAgLy8gdG8gbm8tb3AgdmlhIHRoZSBfZGlzYWJsZWQgZmxhZ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvZ0xldmVsID0gKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KSgnT1RFTF9MT0dfTEVWRUwnKTtcbiAgICAgICAgaWYgKGxvZ0xldmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuc2V0TG9nZ2VyKG5ldyBhcGlfMS5EaWFnQ29uc29sZUxvZ2dlcigpLCB7XG4gICAgICAgICAgICAgICAgbG9nTGV2ZWw6ICgwLCBjb3JlXzEuZGlhZ0xvZ0xldmVsRnJvbVN0cmluZykobG9nTGV2ZWwpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gY29uZmlndXJhdGlvbi5yZXNvdXJjZSA/PyAoMCwgcmVzb3VyY2VzXzEuZGVmYXVsdFJlc291cmNlKSgpO1xuICAgICAgICB0aGlzLl9hdXRvRGV0ZWN0UmVzb3VyY2VzID0gY29uZmlndXJhdGlvbi5hdXRvRGV0ZWN0UmVzb3VyY2VzID8/IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5fYXV0b0RldGVjdFJlc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VEZXRlY3RvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uLnJlc291cmNlRGV0ZWN0b3JzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlRGV0ZWN0b3JzID0gY29uZmlndXJhdGlvbi5yZXNvdXJjZURldGVjdG9ycztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX05PREVfUkVTT1VSQ0VfREVURUNUT1JTJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlRGV0ZWN0b3JzID0gKDAsIHV0aWxzXzEuZ2V0UmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52KSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VEZXRlY3RvcnMgPSBbcmVzb3VyY2VzXzEuZW52RGV0ZWN0b3IsIHJlc291cmNlc18xLnByb2Nlc3NEZXRlY3RvciwgcmVzb3VyY2VzXzEuaG9zdERldGVjdG9yXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXJ2aWNlTmFtZSA9IGNvbmZpZ3VyYXRpb24uc2VydmljZU5hbWU7XG4gICAgICAgIC8vIElmIGEgdHJhY2VyIHByb3ZpZGVyIGNhbiBiZSBjcmVhdGVkIGZyb20gbWFudWFsIGNvbmZpZ3VyYXRpb24sIGNyZWF0ZSBpdFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi50cmFjZUV4cG9ydGVyIHx8XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnNwYW5Qcm9jZXNzb3IgfHxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uc3BhblByb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNlclByb3ZpZGVyQ29uZmlnID0ge307XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5zYW1wbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJhY2VyUHJvdmlkZXJDb25maWcuc2FtcGxlciA9IGNvbmZpZ3VyYXRpb24uc2FtcGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uLnNwYW5MaW1pdHMpIHtcbiAgICAgICAgICAgICAgICB0cmFjZXJQcm92aWRlckNvbmZpZy5zcGFuTGltaXRzID0gY29uZmlndXJhdGlvbi5zcGFuTGltaXRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24uaWRHZW5lcmF0b3IpIHtcbiAgICAgICAgICAgICAgICB0cmFjZXJQcm92aWRlckNvbmZpZy5pZEdlbmVyYXRvciA9IGNvbmZpZ3VyYXRpb24uaWRHZW5lcmF0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5zcGFuUHJvY2Vzc29yKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKFwiVGhlICdzcGFuUHJvY2Vzc29yJyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnc3BhblByb2Nlc3NvcnMnIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BhblByb2Nlc3NvciA9IGNvbmZpZ3VyYXRpb24uc3BhblByb2Nlc3NvciA/P1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgbmV3IHNka190cmFjZV9iYXNlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yKGNvbmZpZ3VyYXRpb24udHJhY2VFeHBvcnRlcik7XG4gICAgICAgICAgICBjb25zdCBzcGFuUHJvY2Vzc29ycyA9IGNvbmZpZ3VyYXRpb24uc3BhblByb2Nlc3NvcnMgPz8gW3NwYW5Qcm9jZXNzb3JdO1xuICAgICAgICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2VyQ29uZmlnOiB0cmFjZXJQcm92aWRlckNvbmZpZyxcbiAgICAgICAgICAgICAgICBzcGFuUHJvY2Vzc29ycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24ubG9nUmVjb3JkUHJvY2Vzc29ycykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbG9nUmVjb3JkUHJvY2Vzc29yczogY29uZmlndXJhdGlvbi5sb2dSZWNvcmRQcm9jZXNzb3JzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uLmxvZ1JlY29yZFByb2Nlc3Nvcikge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbG9nUmVjb3JkUHJvY2Vzc29yczogW2NvbmZpZ3VyYXRpb24ubG9nUmVjb3JkUHJvY2Vzc29yXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oXCJUaGUgJ2xvZ1JlY29yZFByb2Nlc3Nvcicgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2xvZ1JlY29yZFByb2Nlc3NvcnMnIGluc3RlYWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVMb2dnZXJQcm92aWRlckZyb21FbnYoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5tZXRyaWNSZWFkZXJzIHx8XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLm1ldHJpY1JlYWRlciB8fFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi52aWV3cykge1xuICAgICAgICAgICAgY29uc3QgbWV0ZXJQcm92aWRlckNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24ubWV0cmljUmVhZGVycykge1xuICAgICAgICAgICAgICAgIG1ldGVyUHJvdmlkZXJDb25maWcucmVhZGVycyA9IGNvbmZpZ3VyYXRpb24ubWV0cmljUmVhZGVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24ubWV0cmljUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgbWV0ZXJQcm92aWRlckNvbmZpZy5yZWFkZXJzID0gW2NvbmZpZ3VyYXRpb24ubWV0cmljUmVhZGVyXTtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oXCJUaGUgJ21ldHJpY1JlYWRlcicgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ21ldHJpY1JlYWRlcnMnIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24udmlld3MpIHtcbiAgICAgICAgICAgICAgICBtZXRlclByb3ZpZGVyQ29uZmlnLnZpZXdzID0gY29uZmlndXJhdGlvbi52aWV3cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21ldGVyUHJvdmlkZXJDb25maWcgPSBtZXRlclByb3ZpZGVyQ29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luc3RydW1lbnRhdGlvbnMgPSBjb25maWd1cmF0aW9uLmluc3RydW1lbnRhdGlvbnM/LmZsYXQoKSA/PyBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBjb25zdHJ1Y3QgU0RLIGNvbXBvbmVudHMgYW5kIHJlZ2lzdGVyIHRoZW0gd2l0aCB0aGUgT3BlblRlbGVtZXRyeSBBUEkuXG4gICAgICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICgwLCBpbnN0cnVtZW50YXRpb25fMS5yZWdpc3Rlckluc3RydW1lbnRhdGlvbnMpKHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbnM6IHRoaXMuX2luc3RydW1lbnRhdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgdXRpbHNfMS5zZXR1cENvbnRleHRNYW5hZ2VyKSh0aGlzLl9jb25maWd1cmF0aW9uPy5jb250ZXh0TWFuYWdlcik7XG4gICAgICAgICgwLCB1dGlsc18xLnNldHVwUHJvcGFnYXRvcikodGhpcy5fY29uZmlndXJhdGlvbj8udGV4dE1hcFByb3BhZ2F0b3IgPT09IG51bGxcbiAgICAgICAgICAgID8gbnVsbCAvLyBudWxsIG1lYW5zIGRvbid0IHNldCwgc28gd2UgY2Fubm90IGZhbGwgYmFjayB0byBlbnYgY29uZmlnLlxuICAgICAgICAgICAgOiAodGhpcy5fY29uZmlndXJhdGlvbj8udGV4dE1hcFByb3BhZ2F0b3IgPz8gKDAsIHV0aWxzXzEuZ2V0UHJvcGFnYXRvckZyb21FbnYpKCkpKTtcbiAgICAgICAgaWYgKHRoaXMuX2F1dG9EZXRlY3RSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRldGVjdG9yczogdGhpcy5fcmVzb3VyY2VEZXRlY3RvcnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZS5tZXJnZSgoMCwgcmVzb3VyY2VzXzEuZGV0ZWN0UmVzb3VyY2VzKShpbnRlcm5hbENvbmZpZykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc291cmNlID1cbiAgICAgICAgICAgIHRoaXMuX3NlcnZpY2VOYW1lID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3Jlc291cmNlXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9yZXNvdXJjZS5tZXJnZSgoMCwgcmVzb3VyY2VzXzEucmVzb3VyY2VGcm9tQXR0cmlidXRlcykoe1xuICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV06IHRoaXMuX3NlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgY29uc3Qgc3BhblByb2Nlc3NvcnMgPSB0aGlzLl90cmFjZXJQcm92aWRlckNvbmZpZ1xuICAgICAgICAgICAgPyB0aGlzLl90cmFjZXJQcm92aWRlckNvbmZpZy5zcGFuUHJvY2Vzc29yc1xuICAgICAgICAgICAgOiAoMCwgdXRpbHNfMS5nZXRTcGFuUHJvY2Vzc29yc0Zyb21FbnYpKCk7XG4gICAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgaWYgdGhlcmUgaXMgYSBzcGFuIHByb2Nlc3NvclxuICAgICAgICBpZiAoc3BhblByb2Nlc3NvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXIgPSBuZXcgc2RrX3RyYWNlX25vZGVfMS5Ob2RlVHJhY2VyUHJvdmlkZXIoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHNwYW5Qcm9jZXNzb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGlfMS50cmFjZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlcih0aGlzLl90cmFjZXJQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2xvZ2dlclByb3ZpZGVyQ29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dnZXJQcm92aWRlciA9IG5ldyBzZGtfbG9nc18xLkxvZ2dlclByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc29yczogdGhpcy5fbG9nZ2VyUHJvdmlkZXJDb25maWcubG9nUmVjb3JkUHJvY2Vzc29ycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyUHJvdmlkZXIgPSBsb2dnZXJQcm92aWRlcjtcbiAgICAgICAgICAgIGFwaV9sb2dzXzEubG9ncy5zZXRHbG9iYWxMb2dnZXJQcm92aWRlcihsb2dnZXJQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0cmljUmVhZGVyc0Zyb21FbnYgPSBjb25maWd1cmVNZXRyaWNQcm92aWRlckZyb21FbnYoKTtcbiAgICAgICAgaWYgKHRoaXMuX21ldGVyUHJvdmlkZXJDb25maWcgfHwgbWV0cmljUmVhZGVyc0Zyb21FbnYubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVycyA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGVyUHJvdmlkZXJDb25maWc/LnJlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICByZWFkZXJzLnB1c2goLi4udGhpcy5fbWV0ZXJQcm92aWRlckNvbmZpZy5yZWFkZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWFkZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG1ldHJpY1JlYWRlcnNGcm9tRW52LmZvckVhY2goKHIpID0+IHJlYWRlcnMucHVzaChyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtZXRlclByb3ZpZGVyID0gbmV3IHNka19tZXRyaWNzXzEuTWV0ZXJQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHZpZXdzOiB0aGlzLl9tZXRlclByb3ZpZGVyQ29uZmlnPy52aWV3cyA/PyBbXSxcbiAgICAgICAgICAgICAgICByZWFkZXJzOiByZWFkZXJzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9tZXRlclByb3ZpZGVyID0gbWV0ZXJQcm92aWRlcjtcbiAgICAgICAgICAgIGFwaV8xLm1ldHJpY3Muc2V0R2xvYmFsTWV0ZXJQcm92aWRlcihtZXRlclByb3ZpZGVyKTtcbiAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGZpeCBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9pc3N1ZXMvMzYwOVxuICAgICAgICAgICAgLy8gSWYgdGhlIE1ldGVyUHJvdmlkZXIgaXMgbm90IHlldCByZWdpc3RlcmVkIHdoZW4gaW5zdHJ1bWVudGF0aW9ucyBhcmUgcmVnaXN0ZXJlZCwgYWxsIG1ldHJpY3MgYXJlIGRyb3BwZWQuXG4gICAgICAgICAgICAvLyBUaGlzIGNvZGUgaXMgb2Jzb2xldGUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy9pc3N1ZXMvMzYyMiBpcyBpbXBsZW1lbnRlZC5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaW5zdHJ1bWVudGF0aW9uIG9mIHRoaXMuX2luc3RydW1lbnRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uc2V0TWV0ZXJQcm92aWRlcihhcGlfMS5tZXRyaWNzLmdldE1ldGVyUHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGlmICh0aGlzLl90cmFjZXJQcm92aWRlcikge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl90cmFjZXJQcm92aWRlci5zaHV0ZG93bigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbG9nZ2VyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fbG9nZ2VyUHJvdmlkZXIuc2h1dGRvd24oKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fbWV0ZXJQcm92aWRlci5zaHV0ZG93bigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgICAgLy8gcmV0dXJuIHZvaWQgaW5zdGVhZCBvZiB0aGUgYXJyYXkgZnJvbSBQcm9taXNlLmFsbFxuICAgICAgICAgICAgLnRoZW4oKCkgPT4geyB9KSk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZUxvZ2dlclByb3ZpZGVyRnJvbUVudigpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlZEV4cG9ydGVycyA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnYpKCdPVEVMX0xPR1NfRVhQT1JURVInKSA/PyBbXTtcbiAgICAgICAgaWYgKGVuYWJsZWRFeHBvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdPVEVMX0xPR1NfRVhQT1JURVIgaXMgZW1wdHkuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICAgICAgICAgIGVuYWJsZWRFeHBvcnRlcnMucHVzaCgnb3RscCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmFibGVkRXhwb3J0ZXJzLmluY2x1ZGVzKCdub25lJykpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuaW5mbyhgT1RFTF9MT0dTX0VYUE9SVEVSIGNvbnRhaW5zIFwibm9uZVwiLiBMb2dnZXIgcHJvdmlkZXIgd2lsbCBub3QgYmUgaW5pdGlhbGl6ZWQuYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwb3J0ZXJzID0gW107XG4gICAgICAgIGVuYWJsZWRFeHBvcnRlcnMuZm9yRWFjaChleHBvcnRlciA9PiB7XG4gICAgICAgICAgICBpZiAoZXhwb3J0ZXIgPT09ICdvdGxwJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gKCgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfRVhQT1JURVJfT1RMUF9MT0dTX1BST1RPQ09MJykgPz9cbiAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KSgnT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MJykpPy50cmltKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdncnBjJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVycy5wdXNoKG5ldyBleHBvcnRlcl9sb2dzX290bHBfZ3JwY18xLk9UTFBMb2dFeHBvcnRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdodHRwL2pzb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXJzLnB1c2gobmV3IGV4cG9ydGVyX2xvZ3Nfb3RscF9odHRwXzEuT1RMUExvZ0V4cG9ydGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHAvcHJvdG9idWYnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXJzLnB1c2gobmV3IGV4cG9ydGVyX2xvZ3Nfb3RscF9wcm90b18xLk9UTFBMb2dFeHBvcnRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVycy5wdXNoKG5ldyBleHBvcnRlcl9sb2dzX290bHBfcHJvdG9fMS5PVExQTG9nRXhwb3J0ZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgVW5zdXBwb3J0ZWQgT1RMUCBsb2dzIHByb3RvY29sOiBcIiR7cHJvdG9jb2x9XCIuIFVzaW5nIGh0dHAvcHJvdG9idWYuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcnMucHVzaChuZXcgZXhwb3J0ZXJfbG9nc19vdGxwX3Byb3RvXzEuT1RMUExvZ0V4cG9ydGVyKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4cG9ydGVyID09PSAnY29uc29sZScpIHtcbiAgICAgICAgICAgICAgICBleHBvcnRlcnMucHVzaChuZXcgc2RrX2xvZ3NfMS5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVuc3VwcG9ydGVkIE9URUxfTE9HU19FWFBPUlRFUiB2YWx1ZTogXCIke2V4cG9ydGVyfVwiLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZTogb3RscCwgY29uc29sZSwgbm9uZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChleHBvcnRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbG9nUmVjb3JkUHJvY2Vzc29yczogZXhwb3J0ZXJzLm1hcChleHBvcnRlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBvcnRlciBpbnN0YW5jZW9mIHNka19sb2dzXzEuQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNka19sb2dzXzEuU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yKGV4cG9ydGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc2RrX2xvZ3NfMS5CYXRjaExvZ1JlY29yZFByb2Nlc3NvcihleHBvcnRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLk5vZGVTREsgPSBOb2RlU0RLO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2RrLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob2RlU0RLID0gZXhwb3J0cy50cmFjaW5nID0gZXhwb3J0cy5yZXNvdXJjZXMgPSBleHBvcnRzLm5vZGUgPSBleHBvcnRzLm1ldHJpY3MgPSBleHBvcnRzLmxvZ3MgPSBleHBvcnRzLmNvcmUgPSBleHBvcnRzLmNvbnRleHRCYXNlID0gZXhwb3J0cy5hcGkgPSB2b2lkIDA7XG4vLyBUaGlzIGlzIGEgbWV0YS1wYWNrYWdlLCBhbmQgdGhlc2UgZXhpc3QgaW4gdG8gcmUtZXhwb3J0ICphbGwqIGl0ZW1zIGZyb21cbi8vIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIGFzIGluZGl2aWR1YWwgX25hbWVzcGFjZXNfLCBzbyB3aWxkY2FyZCBleHBvcnRzIGFyZVxuLy8gYXBwcm9wcmlhdGUgaGVyZS4gT3RoZXJ3aXNlLCBpdCdkIGJlIGEgcGFpbiB0byBlbnVtZXJhdGUgYW5kIGtlZXAgdGhpbmdzXG4vLyBpbi1zeW5jIHdpdGggYWxsIHRoZSB1cHN0cmVhbSBwYWNrYWdlcy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG5leHBvcnRzLmFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5leHBvcnRzLmNvbnRleHRCYXNlID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmV4cG9ydHMuY29yZSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuZXhwb3J0cy5sb2dzID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay1sb2dzXCIpO1xuZXhwb3J0cy5tZXRyaWNzID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzXCIpO1xuZXhwb3J0cy5ub2RlID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlXCIpO1xuZXhwb3J0cy5yZXNvdXJjZXMgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzXCIpO1xuZXhwb3J0cy50cmFjaW5nID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlXCIpO1xuLyogZXNsaW50LWVuYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xudmFyIHNka18xID0gcmVxdWlyZShcIi4vc2RrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm9kZVNES1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrXzEuTm9kZVNESzsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyogQGxpY2Vuc2VcblBhcGEgUGFyc2VcbnY1LjUuM1xuaHR0cHM6Ly9naXRodWIuY29tL21ob2x0L1BhcGFQYXJzZVxuTGljZW5zZTogTUlUXG4qL1xuXG4oZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSlcbntcblx0LyogZ2xvYmFscyBkZWZpbmUgKi9cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0e1xuXHRcdC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJylcblx0e1xuXHRcdC8vIE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxuXHRcdC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLFxuXHRcdC8vIGxpa2UgTm9kZS5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0fVxuXHRlbHNlXG5cdHtcblx0XHQvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KVxuXHRcdHJvb3QuUGFwYSA9IGZhY3RvcnkoKTtcblx0fVxuXHQvLyBpbiBzdHJpY3QgbW9kZSB3ZSBjYW5ub3QgYWNjZXNzIGFyZ3VtZW50cy5jYWxsZWUsIHNvIHdlIG5lZWQgYSBuYW1lZCByZWZlcmVuY2UgdG9cblx0Ly8gc3RyaW5naWZ5IHRoZSBmYWN0b3J5IG1ldGhvZCBmb3IgdGhlIGJsb2Igd29ya2VyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVcbn0odGhpcywgZnVuY3Rpb24gbW9kdWxlRmFjdG9yeSgpXG57XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkge1xuXHRcdC8vIGFsdGVybmF0aXZlIG1ldGhvZCwgc2ltaWxhciB0byBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcblx0XHQvLyBidXQgd2l0aG91dCB1c2luZyBgZXZhbGAgKHdoaWNoIGlzIGRpc2FibGVkIHdoZW5cblx0XHQvLyB1c2luZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG5cblx0XHRpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cblx0XHRpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuXG5cdFx0Ly8gV2hlbiBydW5uaW5nIHRlc3RzIG5vbmUgb2YgdGhlIGFib3ZlIGhhdmUgYmVlbiBkZWZpbmVkXG5cdFx0cmV0dXJuIHt9O1xuXHR9KSgpO1xuXG5cblx0ZnVuY3Rpb24gZ2V0V29ya2VyQmxvYigpIHtcblx0XHR2YXIgVVJMID0gZ2xvYmFsLlVSTCB8fCBnbG9iYWwud2Via2l0VVJMIHx8IG51bGw7XG5cdFx0dmFyIGNvZGUgPSBtb2R1bGVGYWN0b3J5LnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuIFBhcGEuQkxPQl9VUkwgfHwgKFBhcGEuQkxPQl9VUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtcInZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7IGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH0gaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH0gaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH0gcmV0dXJuIHt9OyB9KSgpOyBnbG9iYWwuSVNfUEFQQV9XT1JLRVI9dHJ1ZTsgXCIsICcoJywgY29kZSwgJykoKTsnXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSkpKTtcblx0fVxuXG5cdHZhciBJU19XT1JLRVIgPSAhZ2xvYmFsLmRvY3VtZW50ICYmICEhZ2xvYmFsLnBvc3RNZXNzYWdlLFxuXHRcdElTX1BBUEFfV09SS0VSID0gZ2xvYmFsLklTX1BBUEFfV09SS0VSIHx8IGZhbHNlO1xuXG5cdHZhciB3b3JrZXJzID0ge30sIHdvcmtlcklkQ291bnRlciA9IDA7XG5cblx0dmFyIFBhcGEgPSB7fTtcblxuXHRQYXBhLnBhcnNlID0gQ3N2VG9Kc29uO1xuXHRQYXBhLnVucGFyc2UgPSBKc29uVG9Dc3Y7XG5cblx0UGFwYS5SRUNPUkRfU0VQID0gU3RyaW5nLmZyb21DaGFyQ29kZSgzMCk7XG5cdFBhcGEuVU5JVF9TRVAgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDMxKTtcblx0UGFwYS5CWVRFX09SREVSX01BUksgPSAnXFx1ZmVmZic7XG5cdFBhcGEuQkFEX0RFTElNSVRFUlMgPSBbJ1xccicsICdcXG4nLCAnXCInLCBQYXBhLkJZVEVfT1JERVJfTUFSS107XG5cdFBhcGEuV09SS0VSU19TVVBQT1JURUQgPSAhSVNfV09SS0VSICYmICEhZ2xvYmFsLldvcmtlcjtcblx0UGFwYS5OT0RFX1NUUkVBTV9JTlBVVCA9IDE7XG5cblx0Ly8gQ29uZmlndXJhYmxlIGNodW5rIHNpemVzIGZvciBsb2NhbCBhbmQgcmVtb3RlIGZpbGVzLCByZXNwZWN0aXZlbHlcblx0UGFwYS5Mb2NhbENodW5rU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTA7XHQvLyAxMCBNQlxuXHRQYXBhLlJlbW90ZUNodW5rU2l6ZSA9IDEwMjQgKiAxMDI0ICogNTtcdC8vIDUgTUJcblx0UGFwYS5EZWZhdWx0RGVsaW1pdGVyID0gJywnO1x0XHRcdC8vIFVzZWQgaWYgbm90IHNwZWNpZmllZCBhbmQgZGV0ZWN0aW9uIGZhaWxzXG5cblx0Ly8gRXhwb3NlZCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgb25seVxuXHRQYXBhLlBhcnNlciA9IFBhcnNlcjtcblx0UGFwYS5QYXJzZXJIYW5kbGUgPSBQYXJzZXJIYW5kbGU7XG5cdFBhcGEuTmV0d29ya1N0cmVhbWVyID0gTmV0d29ya1N0cmVhbWVyO1xuXHRQYXBhLkZpbGVTdHJlYW1lciA9IEZpbGVTdHJlYW1lcjtcblx0UGFwYS5TdHJpbmdTdHJlYW1lciA9IFN0cmluZ1N0cmVhbWVyO1xuXHRQYXBhLlJlYWRhYmxlU3RyZWFtU3RyZWFtZXIgPSBSZWFkYWJsZVN0cmVhbVN0cmVhbWVyO1xuXHRpZiAodHlwZW9mIFBBUEFfQlJPV1NFUl9DT05URVhUID09PSAndW5kZWZpbmVkJykge1xuXHRcdFBhcGEuRHVwbGV4U3RyZWFtU3RyZWFtZXIgPSBEdXBsZXhTdHJlYW1TdHJlYW1lcjtcblx0fVxuXG5cdGlmIChnbG9iYWwualF1ZXJ5KVxuXHR7XG5cdFx0dmFyICQgPSBnbG9iYWwualF1ZXJ5O1xuXHRcdCQuZm4ucGFyc2UgPSBmdW5jdGlvbihvcHRpb25zKVxuXHRcdHtcblx0XHRcdHZhciBjb25maWcgPSBvcHRpb25zLmNvbmZpZyB8fCB7fTtcblx0XHRcdHZhciBxdWV1ZSA9IFtdO1xuXG5cdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oaWR4KVxuXHRcdFx0e1xuXHRcdFx0XHR2YXIgc3VwcG9ydGVkID0gJCh0aGlzKS5wcm9wKCd0YWdOYW1lJykudG9VcHBlckNhc2UoKSA9PT0gJ0lOUFVUJ1xuXHRcdFx0XHRcdFx0XHRcdCYmICQodGhpcykuYXR0cigndHlwZScpLnRvTG93ZXJDYXNlKCkgPT09ICdmaWxlJ1xuXHRcdFx0XHRcdFx0XHRcdCYmIGdsb2JhbC5GaWxlUmVhZGVyO1xuXG5cdFx0XHRcdGlmICghc3VwcG9ydGVkIHx8ICF0aGlzLmZpbGVzIHx8IHRoaXMuZmlsZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1x0Ly8gY29udGludWUgdG8gbmV4dCBpbnB1dCBlbGVtZW50XG5cblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cXVldWUucHVzaCh7XG5cdFx0XHRcdFx0XHRmaWxlOiB0aGlzLmZpbGVzW2ldLFxuXHRcdFx0XHRcdFx0aW5wdXRFbGVtOiB0aGlzLFxuXHRcdFx0XHRcdFx0aW5zdGFuY2VDb25maWc6ICQuZXh0ZW5kKHt9LCBjb25maWcpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRwYXJzZU5leHRGaWxlKCk7XHQvLyBiZWdpbiBwYXJzaW5nXG5cdFx0XHRyZXR1cm4gdGhpcztcdFx0Ly8gbWFpbnRhaW5zIGNoYWluYWJpbGl0eVxuXG5cblx0XHRcdGZ1bmN0aW9uIHBhcnNlTmV4dEZpbGUoKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAocXVldWUubGVuZ3RoID09PSAwKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKGlzRnVuY3Rpb24ob3B0aW9ucy5jb21wbGV0ZSkpXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbXBsZXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGYgPSBxdWV1ZVswXTtcblxuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvcHRpb25zLmJlZm9yZSkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBvcHRpb25zLmJlZm9yZShmLmZpbGUsIGYuaW5wdXRFbGVtKTtcblxuXHRcdFx0XHRcdGlmICh0eXBlb2YgcmV0dXJuZWQgPT09ICdvYmplY3QnKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlmIChyZXR1cm5lZC5hY3Rpb24gPT09ICdhYm9ydCcpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGVycm9yKCdBYm9ydEVycm9yJywgZi5maWxlLCBmLmlucHV0RWxlbSwgcmV0dXJuZWQucmVhc29uKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1x0Ly8gQWJvcnRzIGFsbCBxdWV1ZWQgZmlsZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHJldHVybmVkLmFjdGlvbiA9PT0gJ3NraXAnKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaWxlQ29tcGxldGUoKTtcdC8vIHBhcnNlIHRoZSBuZXh0IGZpbGUgaW4gdGhlIHF1ZXVlLCBpZiBhbnlcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIHJldHVybmVkLmNvbmZpZyA9PT0gJ29iamVjdCcpXG5cdFx0XHRcdFx0XHRcdGYuaW5zdGFuY2VDb25maWcgPSAkLmV4dGVuZChmLmluc3RhbmNlQ29uZmlnLCByZXR1cm5lZC5jb25maWcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmIChyZXR1cm5lZCA9PT0gJ3NraXAnKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGZpbGVDb21wbGV0ZSgpO1x0Ly8gcGFyc2UgdGhlIG5leHQgZmlsZSBpbiB0aGUgcXVldWUsIGlmIGFueVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdyYXAgdXAgdGhlIHVzZXIncyBjb21wbGV0ZSBjYWxsYmFjaywgaWYgYW55LCBzbyB0aGF0IG91cnMgYWxzbyBnZXRzIGV4ZWN1dGVkXG5cdFx0XHRcdHZhciB1c2VyQ29tcGxldGVGdW5jID0gZi5pbnN0YW5jZUNvbmZpZy5jb21wbGV0ZTtcblx0XHRcdFx0Zi5pbnN0YW5jZUNvbmZpZy5jb21wbGV0ZSA9IGZ1bmN0aW9uKHJlc3VsdHMpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZiAoaXNGdW5jdGlvbih1c2VyQ29tcGxldGVGdW5jKSlcblx0XHRcdFx0XHRcdHVzZXJDb21wbGV0ZUZ1bmMocmVzdWx0cywgZi5maWxlLCBmLmlucHV0RWxlbSk7XG5cdFx0XHRcdFx0ZmlsZUNvbXBsZXRlKCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0UGFwYS5wYXJzZShmLmZpbGUsIGYuaW5zdGFuY2VDb25maWcpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBlcnJvcihuYW1lLCBmaWxlLCBlbGVtLCByZWFzb24pXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMuZXJyb3IpKVxuXHRcdFx0XHRcdG9wdGlvbnMuZXJyb3Ioe25hbWU6IG5hbWV9LCBmaWxlLCBlbGVtLCByZWFzb24pO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmaWxlQ29tcGxldGUoKVxuXHRcdFx0e1xuXHRcdFx0XHRxdWV1ZS5zcGxpY2UoMCwgMSk7XG5cdFx0XHRcdHBhcnNlTmV4dEZpbGUoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblxuXHRpZiAoSVNfUEFQQV9XT1JLRVIpXG5cdHtcblx0XHRnbG9iYWwub25tZXNzYWdlID0gd29ya2VyVGhyZWFkUmVjZWl2ZWRNZXNzYWdlO1xuXHR9XG5cblxuXG5cblx0ZnVuY3Rpb24gQ3N2VG9Kc29uKF9pbnB1dCwgX2NvbmZpZylcblx0e1xuXHRcdF9jb25maWcgPSBfY29uZmlnIHx8IHt9O1xuXHRcdHZhciBkeW5hbWljVHlwaW5nID0gX2NvbmZpZy5keW5hbWljVHlwaW5nIHx8IGZhbHNlO1xuXHRcdGlmIChpc0Z1bmN0aW9uKGR5bmFtaWNUeXBpbmcpKSB7XG5cdFx0XHRfY29uZmlnLmR5bmFtaWNUeXBpbmdGdW5jdGlvbiA9IGR5bmFtaWNUeXBpbmc7XG5cdFx0XHQvLyBXaWxsIGJlIGZpbGxlZCBvbiBmaXJzdCByb3cgY2FsbFxuXHRcdFx0ZHluYW1pY1R5cGluZyA9IHt9O1xuXHRcdH1cblx0XHRfY29uZmlnLmR5bmFtaWNUeXBpbmcgPSBkeW5hbWljVHlwaW5nO1xuXG5cdFx0X2NvbmZpZy50cmFuc2Zvcm0gPSBpc0Z1bmN0aW9uKF9jb25maWcudHJhbnNmb3JtKSA/IF9jb25maWcudHJhbnNmb3JtIDogZmFsc2U7XG5cblx0XHRpZiAoX2NvbmZpZy53b3JrZXIgJiYgUGFwYS5XT1JLRVJTX1NVUFBPUlRFRClcblx0XHR7XG5cdFx0XHR2YXIgdyA9IG5ld1dvcmtlcigpO1xuXG5cdFx0XHR3LnVzZXJTdGVwID0gX2NvbmZpZy5zdGVwO1xuXHRcdFx0dy51c2VyQ2h1bmsgPSBfY29uZmlnLmNodW5rO1xuXHRcdFx0dy51c2VyQ29tcGxldGUgPSBfY29uZmlnLmNvbXBsZXRlO1xuXHRcdFx0dy51c2VyRXJyb3IgPSBfY29uZmlnLmVycm9yO1xuXG5cdFx0XHRfY29uZmlnLnN0ZXAgPSBpc0Z1bmN0aW9uKF9jb25maWcuc3RlcCk7XG5cdFx0XHRfY29uZmlnLmNodW5rID0gaXNGdW5jdGlvbihfY29uZmlnLmNodW5rKTtcblx0XHRcdF9jb25maWcuY29tcGxldGUgPSBpc0Z1bmN0aW9uKF9jb25maWcuY29tcGxldGUpO1xuXHRcdFx0X2NvbmZpZy5lcnJvciA9IGlzRnVuY3Rpb24oX2NvbmZpZy5lcnJvcik7XG5cdFx0XHRkZWxldGUgX2NvbmZpZy53b3JrZXI7XHQvLyBwcmV2ZW50IGluZmluaXRlIGxvb3BcblxuXHRcdFx0dy5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdGlucHV0OiBfaW5wdXQsXG5cdFx0XHRcdGNvbmZpZzogX2NvbmZpZyxcblx0XHRcdFx0d29ya2VySWQ6IHcuaWRcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIHN0cmVhbWVyID0gbnVsbDtcblx0XHRpZiAoX2lucHV0ID09PSBQYXBhLk5PREVfU1RSRUFNX0lOUFVUICYmIHR5cGVvZiBQQVBBX0JST1dTRVJfQ09OVEVYVCA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0e1xuXHRcdFx0Ly8gY3JlYXRlIGEgbm9kZSBEdXBsZXggc3RyZWFtIGZvciB1c2Vcblx0XHRcdC8vIHdpdGggLnBpcGVcblx0XHRcdHN0cmVhbWVyID0gbmV3IER1cGxleFN0cmVhbVN0cmVhbWVyKF9jb25maWcpO1xuXHRcdFx0cmV0dXJuIHN0cmVhbWVyLmdldFN0cmVhbSgpO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0eXBlb2YgX2lucHV0ID09PSAnc3RyaW5nJylcblx0XHR7XG5cdFx0XHRfaW5wdXQgPSBzdHJpcEJvbShfaW5wdXQpO1xuXHRcdFx0aWYgKF9jb25maWcuZG93bmxvYWQpXG5cdFx0XHRcdHN0cmVhbWVyID0gbmV3IE5ldHdvcmtTdHJlYW1lcihfY29uZmlnKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0c3RyZWFtZXIgPSBuZXcgU3RyaW5nU3RyZWFtZXIoX2NvbmZpZyk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKF9pbnB1dC5yZWFkYWJsZSA9PT0gdHJ1ZSAmJiBpc0Z1bmN0aW9uKF9pbnB1dC5yZWFkKSAmJiBpc0Z1bmN0aW9uKF9pbnB1dC5vbikpXG5cdFx0e1xuXHRcdFx0c3RyZWFtZXIgPSBuZXcgUmVhZGFibGVTdHJlYW1TdHJlYW1lcihfY29uZmlnKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoKGdsb2JhbC5GaWxlICYmIF9pbnB1dCBpbnN0YW5jZW9mIEZpbGUpIHx8IF9pbnB1dCBpbnN0YW5jZW9mIE9iamVjdClcdC8vIC4uLlNhZmFyaS4gKHNlZSBpc3N1ZSAjMTA2KVxuXHRcdFx0c3RyZWFtZXIgPSBuZXcgRmlsZVN0cmVhbWVyKF9jb25maWcpO1xuXG5cdFx0cmV0dXJuIHN0cmVhbWVyLnN0cmVhbShfaW5wdXQpO1xuXG5cdFx0Ly8gU3RyaXAgY2hhcmFjdGVyIGZyb20gVVRGLTggQk9NIGVuY29kZWQgZmlsZXMgdGhhdCBjYXVzZSBpc3N1ZSBwYXJzaW5nIHRoZSBmaWxlXG5cdFx0ZnVuY3Rpb24gc3RyaXBCb20oc3RyaW5nKSB7XG5cdFx0XHRpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDB4ZmVmZikge1xuXHRcdFx0XHRyZXR1cm4gc3RyaW5nLnNsaWNlKDEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN0cmluZztcblx0XHR9XG5cdH1cblxuXG5cblxuXG5cblx0ZnVuY3Rpb24gSnNvblRvQ3N2KF9pbnB1dCwgX2NvbmZpZylcblx0e1xuXHRcdC8vIERlZmF1bHQgY29uZmlndXJhdGlvblxuXG5cdFx0LyoqIHdoZXRoZXIgdG8gc3Vycm91bmQgZXZlcnkgZGF0dW0gd2l0aCBxdW90ZXMgKi9cblx0XHR2YXIgX3F1b3RlcyA9IGZhbHNlO1xuXG5cdFx0LyoqIHdoZXRoZXIgdG8gd3JpdGUgaGVhZGVycyAqL1xuXHRcdHZhciBfd3JpdGVIZWFkZXIgPSB0cnVlO1xuXG5cdFx0LyoqIGRlbGltaXRpbmcgY2hhcmFjdGVyKHMpICovXG5cdFx0dmFyIF9kZWxpbWl0ZXIgPSAnLCc7XG5cblx0XHQvKiogbmV3bGluZSBjaGFyYWN0ZXIocykgKi9cblx0XHR2YXIgX25ld2xpbmUgPSAnXFxyXFxuJztcblxuXHRcdC8qKiBxdW90ZSBjaGFyYWN0ZXIgKi9cblx0XHR2YXIgX3F1b3RlQ2hhciA9ICdcIic7XG5cblx0XHQvKiogZXNjYXBlZCBxdW90ZSBjaGFyYWN0ZXIsIGVpdGhlciBcIlwiIG9yIDxjb25maWcuZXNjYXBlQ2hhcj5cIiAqL1xuXHRcdHZhciBfZXNjYXBlZFF1b3RlID0gX3F1b3RlQ2hhciArIF9xdW90ZUNoYXI7XG5cblx0XHQvKiogd2hldGhlciB0byBza2lwIGVtcHR5IGxpbmVzICovXG5cdFx0dmFyIF9za2lwRW1wdHlMaW5lcyA9IGZhbHNlO1xuXG5cdFx0LyoqIHRoZSBjb2x1bW5zIChrZXlzKSB3ZSBleHBlY3Qgd2hlbiB3ZSB1bnBhcnNlIG9iamVjdHMgKi9cblx0XHR2YXIgX2NvbHVtbnMgPSBudWxsO1xuXG5cdFx0LyoqIHdoZXRoZXIgdG8gcHJldmVudCBvdXRwdXR0aW5nIGNlbGxzIHRoYXQgY2FuIGJlIHBhcnNlZCBhcyBmb3JtdWxhZSBieSBzcHJlYWRzaGVldCBzb2Z0d2FyZSAoRXhjZWwgYW5kIExpYnJlT2ZmaWNlKSAqL1xuXHRcdHZhciBfZXNjYXBlRm9ybXVsYWUgPSBmYWxzZTtcblxuXHRcdHVucGFja0NvbmZpZygpO1xuXG5cdFx0dmFyIHF1b3RlQ2hhclJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoX3F1b3RlQ2hhciksICdnJyk7XG5cblx0XHRpZiAodHlwZW9mIF9pbnB1dCA9PT0gJ3N0cmluZycpXG5cdFx0XHRfaW5wdXQgPSBKU09OLnBhcnNlKF9pbnB1dCk7XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShfaW5wdXQpKVxuXHRcdHtcblx0XHRcdGlmICghX2lucHV0Lmxlbmd0aCB8fCBBcnJheS5pc0FycmF5KF9pbnB1dFswXSkpXG5cdFx0XHRcdHJldHVybiBzZXJpYWxpemUobnVsbCwgX2lucHV0LCBfc2tpcEVtcHR5TGluZXMpO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIF9pbnB1dFswXSA9PT0gJ29iamVjdCcpXG5cdFx0XHRcdHJldHVybiBzZXJpYWxpemUoX2NvbHVtbnMgfHwgT2JqZWN0LmtleXMoX2lucHV0WzBdKSwgX2lucHV0LCBfc2tpcEVtcHR5TGluZXMpO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0eXBlb2YgX2lucHV0ID09PSAnb2JqZWN0Jylcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mIF9pbnB1dC5kYXRhID09PSAnc3RyaW5nJylcblx0XHRcdFx0X2lucHV0LmRhdGEgPSBKU09OLnBhcnNlKF9pbnB1dC5kYXRhKTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoX2lucHV0LmRhdGEpKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoIV9pbnB1dC5maWVsZHMpXG5cdFx0XHRcdFx0X2lucHV0LmZpZWxkcyA9IF9pbnB1dC5tZXRhICYmIF9pbnB1dC5tZXRhLmZpZWxkcyB8fCBfY29sdW1ucztcblxuXHRcdFx0XHRpZiAoIV9pbnB1dC5maWVsZHMpXG5cdFx0XHRcdFx0X2lucHV0LmZpZWxkcyA9ICBBcnJheS5pc0FycmF5KF9pbnB1dC5kYXRhWzBdKVxuXHRcdFx0XHRcdFx0PyBfaW5wdXQuZmllbGRzXG5cdFx0XHRcdFx0XHQ6IHR5cGVvZiBfaW5wdXQuZGF0YVswXSA9PT0gJ29iamVjdCdcblx0XHRcdFx0XHRcdFx0PyBPYmplY3Qua2V5cyhfaW5wdXQuZGF0YVswXSlcblx0XHRcdFx0XHRcdFx0OiBbXTtcblxuXHRcdFx0XHRpZiAoIShBcnJheS5pc0FycmF5KF9pbnB1dC5kYXRhWzBdKSkgJiYgdHlwZW9mIF9pbnB1dC5kYXRhWzBdICE9PSAnb2JqZWN0Jylcblx0XHRcdFx0XHRfaW5wdXQuZGF0YSA9IFtfaW5wdXQuZGF0YV07XHQvLyBoYW5kbGVzIGlucHV0IGxpa2UgWzEsMiwzXSBvciBbJ2FzZGYnXVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VyaWFsaXplKF9pbnB1dC5maWVsZHMgfHwgW10sIF9pbnB1dC5kYXRhIHx8IFtdLCBfc2tpcEVtcHR5TGluZXMpO1xuXHRcdH1cblxuXHRcdC8vIERlZmF1bHQgKGFueSB2YWxpZCBwYXRocyBzaG91bGQgcmV0dXJuIGJlZm9yZSB0aGlzKVxuXHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHNlcmlhbGl6ZSB1bnJlY29nbml6ZWQgaW5wdXQnKTtcblxuXG5cdFx0ZnVuY3Rpb24gdW5wYWNrQ29uZmlnKClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mIF9jb25maWcgIT09ICdvYmplY3QnKVxuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdGlmICh0eXBlb2YgX2NvbmZpZy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgJiYgIVBhcGEuQkFEX0RFTElNSVRFUlMuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBfY29uZmlnLmRlbGltaXRlci5pbmRleE9mKHZhbHVlKSAhPT0gLTE7IH0pLmxlbmd0aClcblx0XHRcdHtcblx0XHRcdFx0X2RlbGltaXRlciA9IF9jb25maWcuZGVsaW1pdGVyO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIF9jb25maWcucXVvdGVzID09PSAnYm9vbGVhbidcblx0XHRcdFx0fHwgdHlwZW9mIF9jb25maWcucXVvdGVzID09PSAnZnVuY3Rpb24nXG5cdFx0XHRcdHx8IEFycmF5LmlzQXJyYXkoX2NvbmZpZy5xdW90ZXMpKVxuXHRcdFx0XHRfcXVvdGVzID0gX2NvbmZpZy5xdW90ZXM7XG5cblx0XHRcdGlmICh0eXBlb2YgX2NvbmZpZy5za2lwRW1wdHlMaW5lcyA9PT0gJ2Jvb2xlYW4nXG5cdFx0XHRcdHx8IHR5cGVvZiBfY29uZmlnLnNraXBFbXB0eUxpbmVzID09PSAnc3RyaW5nJylcblx0XHRcdFx0X3NraXBFbXB0eUxpbmVzID0gX2NvbmZpZy5za2lwRW1wdHlMaW5lcztcblxuXHRcdFx0aWYgKHR5cGVvZiBfY29uZmlnLm5ld2xpbmUgPT09ICdzdHJpbmcnKVxuXHRcdFx0XHRfbmV3bGluZSA9IF9jb25maWcubmV3bGluZTtcblxuXHRcdFx0aWYgKHR5cGVvZiBfY29uZmlnLnF1b3RlQ2hhciA9PT0gJ3N0cmluZycpXG5cdFx0XHRcdF9xdW90ZUNoYXIgPSBfY29uZmlnLnF1b3RlQ2hhcjtcblxuXHRcdFx0aWYgKHR5cGVvZiBfY29uZmlnLmhlYWRlciA9PT0gJ2Jvb2xlYW4nKVxuXHRcdFx0XHRfd3JpdGVIZWFkZXIgPSBfY29uZmlnLmhlYWRlcjtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoX2NvbmZpZy5jb2x1bW5zKSkge1xuXG5cdFx0XHRcdGlmIChfY29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbiBjb2x1bW5zIGlzIGVtcHR5Jyk7XG5cblx0XHRcdFx0X2NvbHVtbnMgPSBfY29uZmlnLmNvbHVtbnM7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChfY29uZmlnLmVzY2FwZUNoYXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRfZXNjYXBlZFF1b3RlID0gX2NvbmZpZy5lc2NhcGVDaGFyICsgX3F1b3RlQ2hhcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKF9jb25maWcuZXNjYXBlRm9ybXVsYWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRcdFx0X2VzY2FwZUZvcm11bGFlID0gX2NvbmZpZy5lc2NhcGVGb3JtdWxhZTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIF9jb25maWcuZXNjYXBlRm9ybXVsYWUgPT09ICdib29sZWFuJyAmJiBfY29uZmlnLmVzY2FwZUZvcm11bGFlKSB7XG5cdFx0XHRcdF9lc2NhcGVGb3JtdWxhZSA9ICAvXls9K1xcLUBcXHRcXHJdLiokLztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKiogVGhlIGRvdWJsZSBmb3IgbG9vcCB0aGF0IGl0ZXJhdGVzIHRoZSBkYXRhIGFuZCB3cml0ZXMgb3V0IGEgQ1NWIHN0cmluZyBpbmNsdWRpbmcgaGVhZGVyIHJvdyAqL1xuXHRcdGZ1bmN0aW9uIHNlcmlhbGl6ZShmaWVsZHMsIGRhdGEsIHNraXBFbXB0eUxpbmVzKVxuXHRcdHtcblx0XHRcdHZhciBjc3YgPSAnJztcblxuXHRcdFx0aWYgKHR5cGVvZiBmaWVsZHMgPT09ICdzdHJpbmcnKVxuXHRcdFx0XHRmaWVsZHMgPSBKU09OLnBhcnNlKGZpZWxkcyk7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxuXHRcdFx0XHRkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcblxuXHRcdFx0dmFyIGhhc0hlYWRlciA9IEFycmF5LmlzQXJyYXkoZmllbGRzKSAmJiBmaWVsZHMubGVuZ3RoID4gMDtcblx0XHRcdHZhciBkYXRhS2V5ZWRCeUZpZWxkID0gIShBcnJheS5pc0FycmF5KGRhdGFbMF0pKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUgYSBoZWFkZXIgcm93LCB3cml0ZSBpdCBmaXJzdFxuXHRcdFx0aWYgKGhhc0hlYWRlciAmJiBfd3JpdGVIZWFkZXIpXG5cdFx0XHR7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKGkgPiAwKVxuXHRcdFx0XHRcdFx0Y3N2ICs9IF9kZWxpbWl0ZXI7XG5cdFx0XHRcdFx0Y3N2ICs9IHNhZmUoZmllbGRzW2ldLCBpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YS5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdGNzdiArPSBfbmV3bGluZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlbiB3cml0ZSBvdXQgdGhlIGRhdGFcblx0XHRcdGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IGRhdGEubGVuZ3RoOyByb3crKylcblx0XHRcdHtcblx0XHRcdFx0dmFyIG1heENvbCA9IGhhc0hlYWRlciA/IGZpZWxkcy5sZW5ndGggOiBkYXRhW3Jvd10ubGVuZ3RoO1xuXG5cdFx0XHRcdHZhciBlbXB0eUxpbmUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIG51bGxMaW5lID0gaGFzSGVhZGVyID8gT2JqZWN0LmtleXMoZGF0YVtyb3ddKS5sZW5ndGggPT09IDAgOiBkYXRhW3Jvd10ubGVuZ3RoID09PSAwO1xuXHRcdFx0XHRpZiAoc2tpcEVtcHR5TGluZXMgJiYgIWhhc0hlYWRlcilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGVtcHR5TGluZSA9IHNraXBFbXB0eUxpbmVzID09PSAnZ3JlZWR5JyA/IGRhdGFbcm93XS5qb2luKCcnKS50cmltKCkgPT09ICcnIDogZGF0YVtyb3ddLmxlbmd0aCA9PT0gMSAmJiBkYXRhW3Jvd11bMF0ubGVuZ3RoID09PSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChza2lwRW1wdHlMaW5lcyA9PT0gJ2dyZWVkeScgJiYgaGFzSGVhZGVyKSB7XG5cdFx0XHRcdFx0dmFyIGxpbmUgPSBbXTtcblx0XHRcdFx0XHRmb3IgKHZhciBjID0gMDsgYyA8IG1heENvbDsgYysrKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3ggPSBkYXRhS2V5ZWRCeUZpZWxkID8gZmllbGRzW2NdIDogYztcblx0XHRcdFx0XHRcdGxpbmUucHVzaChkYXRhW3Jvd11bY3hdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZW1wdHlMaW5lID0gbGluZS5qb2luKCcnKS50cmltKCkgPT09ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghZW1wdHlMaW5lKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Zm9yICh2YXIgY29sID0gMDsgY29sIDwgbWF4Q29sOyBjb2wrKylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAoY29sID4gMCAmJiAhbnVsbExpbmUpXG5cdFx0XHRcdFx0XHRcdGNzdiArPSBfZGVsaW1pdGVyO1xuXHRcdFx0XHRcdFx0dmFyIGNvbElkeCA9IGhhc0hlYWRlciAmJiBkYXRhS2V5ZWRCeUZpZWxkID8gZmllbGRzW2NvbF0gOiBjb2w7XG5cdFx0XHRcdFx0XHRjc3YgKz0gc2FmZShkYXRhW3Jvd11bY29sSWR4XSwgY29sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHJvdyA8IGRhdGEubGVuZ3RoIC0gMSAmJiAoIXNraXBFbXB0eUxpbmVzIHx8IChtYXhDb2wgPiAwICYmICFudWxsTGluZSkpKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNzdiArPSBfbmV3bGluZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBjc3Y7XG5cdFx0fVxuXG5cdFx0LyoqIEVuY2xvc2VzIGEgdmFsdWUgYXJvdW5kIHF1b3RlcyBpZiBuZWVkZWQgKG1ha2VzIGEgdmFsdWUgc2FmZSBmb3IgQ1NWIGluc2VydGlvbikgKi9cblx0XHRmdW5jdGlvbiBzYWZlKHN0ciwgY29sKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJyB8fCBzdHIgPT09IG51bGwpXG5cdFx0XHRcdHJldHVybiAnJztcblxuXHRcdFx0aWYgKHN0ci5jb25zdHJ1Y3RvciA9PT0gRGF0ZSlcblx0XHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0cikuc2xpY2UoMSwgMjUpO1xuXG5cdFx0XHR2YXIgbmVlZHNRdW90ZXMgPSBmYWxzZTtcblxuXHRcdFx0aWYgKF9lc2NhcGVGb3JtdWxhZSAmJiB0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiICYmIF9lc2NhcGVGb3JtdWxhZS50ZXN0KHN0cikpIHtcblx0XHRcdFx0c3RyID0gXCInXCIgKyBzdHI7XG5cdFx0XHRcdG5lZWRzUXVvdGVzID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGVzY2FwZWRRdW90ZVN0ciA9IHN0ci50b1N0cmluZygpLnJlcGxhY2UocXVvdGVDaGFyUmVnZXgsIF9lc2NhcGVkUXVvdGUpO1xuXG5cdFx0XHRuZWVkc1F1b3RlcyA9IG5lZWRzUXVvdGVzXG5cdFx0XHRcdFx0XHRcdHx8IF9xdW90ZXMgPT09IHRydWVcblx0XHRcdFx0XHRcdFx0fHwgKHR5cGVvZiBfcXVvdGVzID09PSAnZnVuY3Rpb24nICYmIF9xdW90ZXMoc3RyLCBjb2wpKVxuXHRcdFx0XHRcdFx0XHR8fCAoQXJyYXkuaXNBcnJheShfcXVvdGVzKSAmJiBfcXVvdGVzW2NvbF0pXG5cdFx0XHRcdFx0XHRcdHx8IGhhc0FueShlc2NhcGVkUXVvdGVTdHIsIFBhcGEuQkFEX0RFTElNSVRFUlMpXG5cdFx0XHRcdFx0XHRcdHx8IGVzY2FwZWRRdW90ZVN0ci5pbmRleE9mKF9kZWxpbWl0ZXIpID4gLTFcblx0XHRcdFx0XHRcdFx0fHwgZXNjYXBlZFF1b3RlU3RyLmNoYXJBdCgwKSA9PT0gJyAnXG5cdFx0XHRcdFx0XHRcdHx8IGVzY2FwZWRRdW90ZVN0ci5jaGFyQXQoZXNjYXBlZFF1b3RlU3RyLmxlbmd0aCAtIDEpID09PSAnICc7XG5cblx0XHRcdHJldHVybiBuZWVkc1F1b3RlcyA/IF9xdW90ZUNoYXIgKyBlc2NhcGVkUXVvdGVTdHIgKyBfcXVvdGVDaGFyIDogZXNjYXBlZFF1b3RlU3RyO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhc0FueShzdHIsIHN1YnN0cmluZ3MpXG5cdFx0e1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzdHJpbmdzLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHRpZiAoc3RyLmluZGV4T2Yoc3Vic3RyaW5nc1tpXSkgPiAtMSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXG5cdC8qKiBDaHVua1N0cmVhbWVyIGlzIHRoZSBiYXNlIHByb3RvdHlwZSBmb3IgdmFyaW91cyBzdHJlYW1lciBpbXBsZW1lbnRhdGlvbnMuICovXG5cdGZ1bmN0aW9uIENodW5rU3RyZWFtZXIoY29uZmlnKVxuXHR7XG5cdFx0dGhpcy5faGFuZGxlID0gbnVsbDtcblx0XHR0aGlzLl9maW5pc2hlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX2NvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX2hhbHRlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0XHR0aGlzLl9iYXNlSW5kZXggPSAwO1xuXHRcdHRoaXMuX3BhcnRpYWxMaW5lID0gJyc7XG5cdFx0dGhpcy5fcm93Q291bnQgPSAwO1xuXHRcdHRoaXMuX3N0YXJ0ID0gMDtcblx0XHR0aGlzLl9uZXh0Q2h1bmsgPSBudWxsO1xuXHRcdHRoaXMuaXNGaXJzdENodW5rID0gdHJ1ZTtcblx0XHR0aGlzLl9jb21wbGV0ZVJlc3VsdHMgPSB7XG5cdFx0XHRkYXRhOiBbXSxcblx0XHRcdGVycm9yczogW10sXG5cdFx0XHRtZXRhOiB7fVxuXHRcdH07XG5cdFx0cmVwbGFjZUNvbmZpZy5jYWxsKHRoaXMsIGNvbmZpZyk7XG5cblx0XHR0aGlzLnBhcnNlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaywgaXNGYWtlQ2h1bmspXG5cdFx0e1xuXHRcdFx0Ly8gRmlyc3QgY2h1bmsgcHJlLXByb2Nlc3Npbmdcblx0XHRcdGNvbnN0IHNraXBGaXJzdE5MaW5lcyA9IHBhcnNlSW50KHRoaXMuX2NvbmZpZy5za2lwRmlyc3ROTGluZXMpIHx8IDA7XG5cdFx0XHRpZiAodGhpcy5pc0ZpcnN0Q2h1bmsgJiYgc2tpcEZpcnN0TkxpbmVzID4gMCkge1xuXHRcdFx0XHRsZXQgX25ld2xpbmUgPSB0aGlzLl9jb25maWcubmV3bGluZTtcblx0XHRcdFx0aWYgKCFfbmV3bGluZSkge1xuXHRcdFx0XHRcdGNvbnN0IHF1b3RlQ2hhciA9IHRoaXMuX2NvbmZpZy5xdW90ZUNoYXIgfHwgJ1wiJztcblx0XHRcdFx0XHRfbmV3bGluZSA9IHRoaXMuX2hhbmRsZS5ndWVzc0xpbmVFbmRpbmdzKGNodW5rLCBxdW90ZUNoYXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNwbGl0Q2h1bmsgPSBjaHVuay5zcGxpdChfbmV3bGluZSk7XG5cdFx0XHRcdGNodW5rID0gWy4uLnNwbGl0Q2h1bmsuc2xpY2Uoc2tpcEZpcnN0TkxpbmVzKV0uam9pbihfbmV3bGluZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5pc0ZpcnN0Q2h1bmsgJiYgaXNGdW5jdGlvbih0aGlzLl9jb25maWcuYmVmb3JlRmlyc3RDaHVuaykpXG5cdFx0XHR7XG5cdFx0XHRcdHZhciBtb2RpZmllZENodW5rID0gdGhpcy5fY29uZmlnLmJlZm9yZUZpcnN0Q2h1bmsoY2h1bmspO1xuXHRcdFx0XHRpZiAobW9kaWZpZWRDaHVuayAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNodW5rID0gbW9kaWZpZWRDaHVuaztcblx0XHRcdH1cblx0XHRcdHRoaXMuaXNGaXJzdENodW5rID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9oYWx0ZWQgPSBmYWxzZTtcblxuXHRcdFx0Ly8gUmVqb2luIHRoZSBsaW5lIHdlIGxpa2VseSBqdXN0IHNwbGl0IGluIHR3byBieSBjaHVua2luZyB0aGUgZmlsZVxuXHRcdFx0dmFyIGFnZ3JlZ2F0ZSA9IHRoaXMuX3BhcnRpYWxMaW5lICsgY2h1bms7XG5cdFx0XHR0aGlzLl9wYXJ0aWFsTGluZSA9ICcnO1xuXHRcdFx0dmFyIHJlc3VsdHMgPSB0aGlzLl9oYW5kbGUucGFyc2UoYWdncmVnYXRlLCB0aGlzLl9iYXNlSW5kZXgsICF0aGlzLl9maW5pc2hlZCk7XG5cblx0XHRcdGlmICh0aGlzLl9oYW5kbGUucGF1c2VkKCkgfHwgdGhpcy5faGFuZGxlLmFib3J0ZWQoKSkge1xuXHRcdFx0XHR0aGlzLl9oYWx0ZWQgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsYXN0SW5kZXggPSByZXN1bHRzLm1ldGEuY3Vyc29yO1xuXG5cdFx0XHRpZiAoIXRoaXMuX2ZpbmlzaGVkKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9wYXJ0aWFsTGluZSA9IGFnZ3JlZ2F0ZS5zdWJzdHJpbmcobGFzdEluZGV4IC0gdGhpcy5fYmFzZUluZGV4KTtcblx0XHRcdFx0dGhpcy5fYmFzZUluZGV4ID0gbGFzdEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0cyAmJiByZXN1bHRzLmRhdGEpXG5cdFx0XHRcdHRoaXMuX3Jvd0NvdW50ICs9IHJlc3VsdHMuZGF0YS5sZW5ndGg7XG5cblx0XHRcdHZhciBmaW5pc2hlZEluY2x1ZGluZ1ByZXZpZXcgPSB0aGlzLl9maW5pc2hlZCB8fCAodGhpcy5fY29uZmlnLnByZXZpZXcgJiYgdGhpcy5fcm93Q291bnQgPj0gdGhpcy5fY29uZmlnLnByZXZpZXcpO1xuXG5cdFx0XHRpZiAoSVNfUEFQQV9XT1JLRVIpXG5cdFx0XHR7XG5cdFx0XHRcdGdsb2JhbC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0cmVzdWx0czogcmVzdWx0cyxcblx0XHRcdFx0XHR3b3JrZXJJZDogUGFwYS5XT1JLRVJfSUQsXG5cdFx0XHRcdFx0ZmluaXNoZWQ6IGZpbmlzaGVkSW5jbHVkaW5nUHJldmlld1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fY29uZmlnLmNodW5rKSAmJiAhaXNGYWtlQ2h1bmspXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuX2NvbmZpZy5jaHVuayhyZXN1bHRzLCB0aGlzLl9oYW5kbGUpO1xuXHRcdFx0XHRpZiAodGhpcy5faGFuZGxlLnBhdXNlZCgpIHx8IHRoaXMuX2hhbmRsZS5hYm9ydGVkKCkpIHtcblx0XHRcdFx0XHR0aGlzLl9oYWx0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHRzID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR0aGlzLl9jb21wbGV0ZVJlc3VsdHMgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghdGhpcy5fY29uZmlnLnN0ZXAgJiYgIXRoaXMuX2NvbmZpZy5jaHVuaykge1xuXHRcdFx0XHR0aGlzLl9jb21wbGV0ZVJlc3VsdHMuZGF0YSA9IHRoaXMuX2NvbXBsZXRlUmVzdWx0cy5kYXRhLmNvbmNhdChyZXN1bHRzLmRhdGEpO1xuXHRcdFx0XHR0aGlzLl9jb21wbGV0ZVJlc3VsdHMuZXJyb3JzID0gdGhpcy5fY29tcGxldGVSZXN1bHRzLmVycm9ycy5jb25jYXQocmVzdWx0cy5lcnJvcnMpO1xuXHRcdFx0XHR0aGlzLl9jb21wbGV0ZVJlc3VsdHMubWV0YSA9IHJlc3VsdHMubWV0YTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCF0aGlzLl9jb21wbGV0ZWQgJiYgZmluaXNoZWRJbmNsdWRpbmdQcmV2aWV3ICYmIGlzRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbXBsZXRlKSAmJiAoIXJlc3VsdHMgfHwgIXJlc3VsdHMubWV0YS5hYm9ydGVkKSkge1xuXHRcdFx0XHR0aGlzLl9jb25maWcuY29tcGxldGUodGhpcy5fY29tcGxldGVSZXN1bHRzLCB0aGlzLl9pbnB1dCk7XG5cdFx0XHRcdHRoaXMuX2NvbXBsZXRlZCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghZmluaXNoZWRJbmNsdWRpbmdQcmV2aWV3ICYmICghcmVzdWx0cyB8fCAhcmVzdWx0cy5tZXRhLnBhdXNlZCkpXG5cdFx0XHRcdHRoaXMuX25leHRDaHVuaygpO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdFx0dGhpcy5fc2VuZEVycm9yID0gZnVuY3Rpb24oZXJyb3IpXG5cdFx0e1xuXHRcdFx0aWYgKGlzRnVuY3Rpb24odGhpcy5fY29uZmlnLmVycm9yKSlcblx0XHRcdFx0dGhpcy5fY29uZmlnLmVycm9yKGVycm9yKTtcblx0XHRcdGVsc2UgaWYgKElTX1BBUEFfV09SS0VSICYmIHRoaXMuX2NvbmZpZy5lcnJvcilcblx0XHRcdHtcblx0XHRcdFx0Z2xvYmFsLnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0XHR3b3JrZXJJZDogUGFwYS5XT1JLRVJfSUQsXG5cdFx0XHRcdFx0ZXJyb3I6IGVycm9yLFxuXHRcdFx0XHRcdGZpbmlzaGVkOiBmYWxzZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0ZnVuY3Rpb24gcmVwbGFjZUNvbmZpZyhjb25maWcpXG5cdFx0e1xuXHRcdFx0Ly8gRGVlcC1jb3B5IHRoZSBjb25maWcgc28gd2UgY2FuIGVkaXQgaXRcblx0XHRcdHZhciBjb25maWdDb3B5ID0gY29weShjb25maWcpO1xuXHRcdFx0Y29uZmlnQ29weS5jaHVua1NpemUgPSBwYXJzZUludChjb25maWdDb3B5LmNodW5rU2l6ZSk7XHQvLyBwYXJzZUludCBWRVJZIGltcG9ydGFudCBzbyB3ZSBkb24ndCBjb25jYXRlbmF0ZSBzdHJpbmdzIVxuXHRcdFx0aWYgKCFjb25maWcuc3RlcCAmJiAhY29uZmlnLmNodW5rKVxuXHRcdFx0XHRjb25maWdDb3B5LmNodW5rU2l6ZSA9IG51bGw7ICAvLyBkaXNhYmxlIFJhbmdlIGhlYWRlciBpZiBub3Qgc3RyZWFtaW5nOyBiYWQgdmFsdWVzIGJyZWFrIElJUyAtIHNlZSBpc3N1ZSAjMTk2XG5cdFx0XHR0aGlzLl9oYW5kbGUgPSBuZXcgUGFyc2VySGFuZGxlKGNvbmZpZ0NvcHkpO1xuXHRcdFx0dGhpcy5faGFuZGxlLnN0cmVhbWVyID0gdGhpcztcblx0XHRcdHRoaXMuX2NvbmZpZyA9IGNvbmZpZ0NvcHk7XHQvLyBwZXJzaXN0IHRoZSBjb3B5IHRvIHRoZSBjYWxsZXJcblx0XHR9XG5cdH1cblxuXG5cdGZ1bmN0aW9uIE5ldHdvcmtTdHJlYW1lcihjb25maWcpXG5cdHtcblx0XHRjb25maWcgPSBjb25maWcgfHwge307XG5cdFx0aWYgKCFjb25maWcuY2h1bmtTaXplKVxuXHRcdFx0Y29uZmlnLmNodW5rU2l6ZSA9IFBhcGEuUmVtb3RlQ2h1bmtTaXplO1xuXHRcdENodW5rU3RyZWFtZXIuY2FsbCh0aGlzLCBjb25maWcpO1xuXG5cdFx0dmFyIHhocjtcblxuXHRcdGlmIChJU19XT1JLRVIpXG5cdFx0e1xuXHRcdFx0dGhpcy5fbmV4dENodW5rID0gZnVuY3Rpb24oKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9yZWFkQ2h1bmsoKTtcblx0XHRcdFx0dGhpcy5fY2h1bmtMb2FkZWQoKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLl9uZXh0Q2h1bmsgPSBmdW5jdGlvbigpXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuX3JlYWRDaHVuaygpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLnN0cmVhbSA9IGZ1bmN0aW9uKHVybClcblx0XHR7XG5cdFx0XHR0aGlzLl9pbnB1dCA9IHVybDtcblx0XHRcdHRoaXMuX25leHRDaHVuaygpO1x0Ly8gU3RhcnRzIHN0cmVhbWluZ1xuXHRcdH07XG5cblx0XHR0aGlzLl9yZWFkQ2h1bmsgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0aWYgKHRoaXMuX2ZpbmlzaGVkKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLl9jaHVua0xvYWRlZCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG5cdFx0XHRpZiAodGhpcy5fY29uZmlnLndpdGhDcmVkZW50aWFscylcblx0XHRcdHtcblx0XHRcdFx0eGhyLndpdGhDcmVkZW50aWFscyA9IHRoaXMuX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghSVNfV09SS0VSKVxuXHRcdFx0e1xuXHRcdFx0XHR4aHIub25sb2FkID0gYmluZEZ1bmN0aW9uKHRoaXMuX2NodW5rTG9hZGVkLCB0aGlzKTtcblx0XHRcdFx0eGhyLm9uZXJyb3IgPSBiaW5kRnVuY3Rpb24odGhpcy5fY2h1bmtFcnJvciwgdGhpcyk7XG5cdFx0XHR9XG5cblx0XHRcdHhoci5vcGVuKHRoaXMuX2NvbmZpZy5kb3dubG9hZFJlcXVlc3RCb2R5ID8gJ1BPU1QnIDogJ0dFVCcsIHRoaXMuX2lucHV0LCAhSVNfV09SS0VSKTtcblx0XHRcdC8vIEhlYWRlcnMgY2FuIG9ubHkgYmUgc2V0IHdoZW4gb25jZSB0aGUgcmVxdWVzdCBzdGF0ZSBpcyBPUEVORURcblx0XHRcdGlmICh0aGlzLl9jb25maWcuZG93bmxvYWRSZXF1ZXN0SGVhZGVycylcblx0XHRcdHtcblx0XHRcdFx0dmFyIGhlYWRlcnMgPSB0aGlzLl9jb25maWcuZG93bmxvYWRSZXF1ZXN0SGVhZGVycztcblxuXHRcdFx0XHRmb3IgKHZhciBoZWFkZXJOYW1lIGluIGhlYWRlcnMpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXJOYW1lLCBoZWFkZXJzW2hlYWRlck5hbWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fY29uZmlnLmNodW5rU2l6ZSlcblx0XHRcdHtcblx0XHRcdFx0dmFyIGVuZCA9IHRoaXMuX3N0YXJ0ICsgdGhpcy5fY29uZmlnLmNodW5rU2l6ZSAtIDE7XHQvLyBtaW51cyBvbmUgYmVjYXVzZSBieXRlIHJhbmdlIGlzIGluY2x1c2l2ZVxuXHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcignUmFuZ2UnLCAnYnl0ZXM9JyArIHRoaXMuX3N0YXJ0ICsgJy0nICsgZW5kKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0eGhyLnNlbmQodGhpcy5fY29uZmlnLmRvd25sb2FkUmVxdWVzdEJvZHkpO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2ggKGVycikge1xuXHRcdFx0XHR0aGlzLl9jaHVua0Vycm9yKGVyci5tZXNzYWdlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKElTX1dPUktFUiAmJiB4aHIuc3RhdHVzID09PSAwKVxuXHRcdFx0XHR0aGlzLl9jaHVua0Vycm9yKCk7XG5cdFx0fTtcblxuXHRcdHRoaXMuX2NodW5rTG9hZGVkID0gZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNClcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRpZiAoeGhyLnN0YXR1cyA8IDIwMCB8fCB4aHIuc3RhdHVzID49IDQwMClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5fY2h1bmtFcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBjaHVuY2tTaXplIGFzIGl0IG1heSBiZSBhIGRpZmVyZW5jZSBvbiByZXBvbnNlIGxlbnRnaCBkdWUgdG8gY2hhcmFjdGVycyB3aXRoIG1vcmUgdGhhbiAxIGJ5dGVcblx0XHRcdHRoaXMuX3N0YXJ0ICs9IHRoaXMuX2NvbmZpZy5jaHVua1NpemUgPyB0aGlzLl9jb25maWcuY2h1bmtTaXplIDogeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGg7XG5cdFx0XHR0aGlzLl9maW5pc2hlZCA9ICF0aGlzLl9jb25maWcuY2h1bmtTaXplIHx8IHRoaXMuX3N0YXJ0ID49IGdldEZpbGVTaXplKHhocik7XG5cdFx0XHR0aGlzLnBhcnNlQ2h1bmsoeGhyLnJlc3BvbnNlVGV4dCk7XG5cdFx0fTtcblxuXHRcdHRoaXMuX2NodW5rRXJyb3IgPSBmdW5jdGlvbihlcnJvck1lc3NhZ2UpXG5cdFx0e1xuXHRcdFx0dmFyIGVycm9yVGV4dCA9IHhoci5zdGF0dXNUZXh0IHx8IGVycm9yTWVzc2FnZTtcblx0XHRcdHRoaXMuX3NlbmRFcnJvcihuZXcgRXJyb3IoZXJyb3JUZXh0KSk7XG5cdFx0fTtcblxuXHRcdGZ1bmN0aW9uIGdldEZpbGVTaXplKHhocilcblx0XHR7XG5cdFx0XHR2YXIgY29udGVudFJhbmdlID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LVJhbmdlJyk7XG5cdFx0XHRpZiAoY29udGVudFJhbmdlID09PSBudWxsKSB7IC8vIG5vIGNvbnRlbnQgcmFuZ2UsIHRoZW4gZmluaXNoIVxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQoY29udGVudFJhbmdlLnN1YnN0cmluZyhjb250ZW50UmFuZ2UubGFzdEluZGV4T2YoJy8nKSArIDEpKTtcblx0XHR9XG5cdH1cblx0TmV0d29ya1N0cmVhbWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2h1bmtTdHJlYW1lci5wcm90b3R5cGUpO1xuXHROZXR3b3JrU3RyZWFtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTmV0d29ya1N0cmVhbWVyO1xuXG5cblx0ZnVuY3Rpb24gRmlsZVN0cmVhbWVyKGNvbmZpZylcblx0e1xuXHRcdGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblx0XHRpZiAoIWNvbmZpZy5jaHVua1NpemUpXG5cdFx0XHRjb25maWcuY2h1bmtTaXplID0gUGFwYS5Mb2NhbENodW5rU2l6ZTtcblx0XHRDaHVua1N0cmVhbWVyLmNhbGwodGhpcywgY29uZmlnKTtcblxuXHRcdHZhciByZWFkZXIsIHNsaWNlO1xuXG5cdFx0Ly8gRmlsZVJlYWRlciBpcyBiZXR0ZXIgdGhhbiBGaWxlUmVhZGVyU3luYyAoZXZlbiBpbiB3b3JrZXIpIC0gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzI0NzA4NjQ5LzEwNDg4NjJcblx0XHQvLyBCdXQgRmlyZWZveCBpcyBhIHBpbGwsIHRvbyAtIHNlZSBpc3N1ZSAjNzY6IGh0dHBzOi8vZ2l0aHViLmNvbS9taG9sdC9QYXBhUGFyc2UvaXNzdWVzLzc2XG5cdFx0dmFyIHVzaW5nQXN5bmNSZWFkZXIgPSB0eXBlb2YgRmlsZVJlYWRlciAhPT0gJ3VuZGVmaW5lZCc7XHQvLyBTYWZhcmkgZG9lc24ndCBjb25zaWRlciBpdCBhIGZ1bmN0aW9uIC0gc2VlIGlzc3VlICMxMDVcblxuXHRcdHRoaXMuc3RyZWFtID0gZnVuY3Rpb24oZmlsZSlcblx0XHR7XG5cdFx0XHR0aGlzLl9pbnB1dCA9IGZpbGU7XG5cdFx0XHRzbGljZSA9IGZpbGUuc2xpY2UgfHwgZmlsZS53ZWJraXRTbGljZSB8fCBmaWxlLm1velNsaWNlO1xuXG5cdFx0XHRpZiAodXNpbmdBc3luY1JlYWRlcilcblx0XHRcdHtcblx0XHRcdFx0cmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcdFx0Ly8gUHJlZmVycmVkIG1ldGhvZCBvZiByZWFkaW5nIGZpbGVzLCBldmVuIGluIHdvcmtlcnNcblx0XHRcdFx0cmVhZGVyLm9ubG9hZCA9IGJpbmRGdW5jdGlvbih0aGlzLl9jaHVua0xvYWRlZCwgdGhpcyk7XG5cdFx0XHRcdHJlYWRlci5vbmVycm9yID0gYmluZEZ1bmN0aW9uKHRoaXMuX2NodW5rRXJyb3IsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZWFkZXIgPSBuZXcgRmlsZVJlYWRlclN5bmMoKTtcdC8vIEhhY2sgZm9yIHJ1bm5pbmcgaW4gYSB3ZWIgd29ya2VyIGluIEZpcmVmb3hcblxuXHRcdFx0dGhpcy5fbmV4dENodW5rKCk7XHQvLyBTdGFydHMgc3RyZWFtaW5nXG5cdFx0fTtcblxuXHRcdHRoaXMuX25leHRDaHVuayA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRpZiAoIXRoaXMuX2ZpbmlzaGVkICYmICghdGhpcy5fY29uZmlnLnByZXZpZXcgfHwgdGhpcy5fcm93Q291bnQgPCB0aGlzLl9jb25maWcucHJldmlldykpXG5cdFx0XHRcdHRoaXMuX3JlYWRDaHVuaygpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9yZWFkQ2h1bmsgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0dmFyIGlucHV0ID0gdGhpcy5faW5wdXQ7XG5cdFx0XHRpZiAodGhpcy5fY29uZmlnLmNodW5rU2l6ZSlcblx0XHRcdHtcblx0XHRcdFx0dmFyIGVuZCA9IE1hdGgubWluKHRoaXMuX3N0YXJ0ICsgdGhpcy5fY29uZmlnLmNodW5rU2l6ZSwgdGhpcy5faW5wdXQuc2l6ZSk7XG5cdFx0XHRcdGlucHV0ID0gc2xpY2UuY2FsbChpbnB1dCwgdGhpcy5fc3RhcnQsIGVuZCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgdHh0ID0gcmVhZGVyLnJlYWRBc1RleHQoaW5wdXQsIHRoaXMuX2NvbmZpZy5lbmNvZGluZyk7XG5cdFx0XHRpZiAoIXVzaW5nQXN5bmNSZWFkZXIpXG5cdFx0XHRcdHRoaXMuX2NodW5rTG9hZGVkKHsgdGFyZ2V0OiB7IHJlc3VsdDogdHh0IH0gfSk7XHQvLyBtaW1pYyB0aGUgYXN5bmMgc2lnbmF0dXJlXG5cdFx0fTtcblxuXHRcdHRoaXMuX2NodW5rTG9hZGVkID0gZnVuY3Rpb24oZXZlbnQpXG5cdFx0e1xuXHRcdFx0Ly8gVmVyeSBpbXBvcnRhbnQgdG8gaW5jcmVtZW50IHN0YXJ0IGVhY2ggdGltZSBiZWZvcmUgaGFuZGxpbmcgcmVzdWx0c1xuXHRcdFx0dGhpcy5fc3RhcnQgKz0gdGhpcy5fY29uZmlnLmNodW5rU2l6ZTtcblx0XHRcdHRoaXMuX2ZpbmlzaGVkID0gIXRoaXMuX2NvbmZpZy5jaHVua1NpemUgfHwgdGhpcy5fc3RhcnQgPj0gdGhpcy5faW5wdXQuc2l6ZTtcblx0XHRcdHRoaXMucGFyc2VDaHVuayhldmVudC50YXJnZXQucmVzdWx0KTtcblx0XHR9O1xuXG5cdFx0dGhpcy5fY2h1bmtFcnJvciA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHR0aGlzLl9zZW5kRXJyb3IocmVhZGVyLmVycm9yKTtcblx0XHR9O1xuXG5cdH1cblx0RmlsZVN0cmVhbWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2h1bmtTdHJlYW1lci5wcm90b3R5cGUpO1xuXHRGaWxlU3RyZWFtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmlsZVN0cmVhbWVyO1xuXG5cblx0ZnVuY3Rpb24gU3RyaW5nU3RyZWFtZXIoY29uZmlnKVxuXHR7XG5cdFx0Y29uZmlnID0gY29uZmlnIHx8IHt9O1xuXHRcdENodW5rU3RyZWFtZXIuY2FsbCh0aGlzLCBjb25maWcpO1xuXG5cdFx0dmFyIHJlbWFpbmluZztcblx0XHR0aGlzLnN0cmVhbSA9IGZ1bmN0aW9uKHMpXG5cdFx0e1xuXHRcdFx0cmVtYWluaW5nID0gcztcblx0XHRcdHJldHVybiB0aGlzLl9uZXh0Q2h1bmsoKTtcblx0XHR9O1xuXHRcdHRoaXMuX25leHRDaHVuayA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRpZiAodGhpcy5fZmluaXNoZWQpIHJldHVybjtcblx0XHRcdHZhciBzaXplID0gdGhpcy5fY29uZmlnLmNodW5rU2l6ZTtcblx0XHRcdHZhciBjaHVuaztcblx0XHRcdGlmKHNpemUpIHtcblx0XHRcdFx0Y2h1bmsgPSByZW1haW5pbmcuc3Vic3RyaW5nKDAsIHNpemUpO1xuXHRcdFx0XHRyZW1haW5pbmcgPSByZW1haW5pbmcuc3Vic3RyaW5nKHNpemUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2h1bmsgPSByZW1haW5pbmc7XG5cdFx0XHRcdHJlbWFpbmluZyA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZmluaXNoZWQgPSAhcmVtYWluaW5nO1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDaHVuayhjaHVuayk7XG5cdFx0fTtcblx0fVxuXHRTdHJpbmdTdHJlYW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0cmluZ1N0cmVhbWVyLnByb3RvdHlwZSk7XG5cdFN0cmluZ1N0cmVhbWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0cmluZ1N0cmVhbWVyO1xuXG5cblx0ZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1TdHJlYW1lcihjb25maWcpXG5cdHtcblx0XHRjb25maWcgPSBjb25maWcgfHwge307XG5cblx0XHRDaHVua1N0cmVhbWVyLmNhbGwodGhpcywgY29uZmlnKTtcblxuXHRcdHZhciBxdWV1ZSA9IFtdO1xuXHRcdHZhciBwYXJzZU9uRGF0YSA9IHRydWU7XG5cdFx0dmFyIHN0cmVhbUhhc0VuZGVkID0gZmFsc2U7XG5cblx0XHR0aGlzLnBhdXNlID0gZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdENodW5rU3RyZWFtZXIucHJvdG90eXBlLnBhdXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHR0aGlzLl9pbnB1dC5wYXVzZSgpO1xuXHRcdH07XG5cblx0XHR0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRDaHVua1N0cmVhbWVyLnByb3RvdHlwZS5yZXN1bWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdHRoaXMuX2lucHV0LnJlc3VtZSgpO1xuXHRcdH07XG5cblx0XHR0aGlzLnN0cmVhbSA9IGZ1bmN0aW9uKHN0cmVhbSlcblx0XHR7XG5cdFx0XHR0aGlzLl9pbnB1dCA9IHN0cmVhbTtcblxuXHRcdFx0dGhpcy5faW5wdXQub24oJ2RhdGEnLCB0aGlzLl9zdHJlYW1EYXRhKTtcblx0XHRcdHRoaXMuX2lucHV0Lm9uKCdlbmQnLCB0aGlzLl9zdHJlYW1FbmQpO1xuXHRcdFx0dGhpcy5faW5wdXQub24oJ2Vycm9yJywgdGhpcy5fc3RyZWFtRXJyb3IpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9jaGVja0lzRmluaXNoZWQgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0aWYgKHN0cmVhbUhhc0VuZGVkICYmIHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHR0aGlzLl9maW5pc2hlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuX25leHRDaHVuayA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHR0aGlzLl9jaGVja0lzRmluaXNoZWQoKTtcblx0XHRcdGlmIChxdWV1ZS5sZW5ndGgpXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMucGFyc2VDaHVuayhxdWV1ZS5zaGlmdCgpKTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0cGFyc2VPbkRhdGEgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLl9zdHJlYW1EYXRhID0gYmluZEZ1bmN0aW9uKGZ1bmN0aW9uKGNodW5rKVxuXHRcdHtcblx0XHRcdHRyeVxuXHRcdFx0e1xuXHRcdFx0XHRxdWV1ZS5wdXNoKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBjaHVuayA6IGNodW5rLnRvU3RyaW5nKHRoaXMuX2NvbmZpZy5lbmNvZGluZykpO1xuXG5cdFx0XHRcdGlmIChwYXJzZU9uRGF0YSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhcnNlT25EYXRhID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5fY2hlY2tJc0ZpbmlzaGVkKCk7XG5cdFx0XHRcdFx0dGhpcy5wYXJzZUNodW5rKHF1ZXVlLnNoaWZ0KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjYXRjaCAoZXJyb3IpXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuX3N0cmVhbUVycm9yKGVycm9yKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzKTtcblxuXHRcdHRoaXMuX3N0cmVhbUVycm9yID0gYmluZEZ1bmN0aW9uKGZ1bmN0aW9uKGVycm9yKVxuXHRcdHtcblx0XHRcdHRoaXMuX3N0cmVhbUNsZWFuVXAoKTtcblx0XHRcdHRoaXMuX3NlbmRFcnJvcihlcnJvcik7XG5cdFx0fSwgdGhpcyk7XG5cblx0XHR0aGlzLl9zdHJlYW1FbmQgPSBiaW5kRnVuY3Rpb24oZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdHRoaXMuX3N0cmVhbUNsZWFuVXAoKTtcblx0XHRcdHN0cmVhbUhhc0VuZGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuX3N0cmVhbURhdGEoJycpO1xuXHRcdH0sIHRoaXMpO1xuXG5cdFx0dGhpcy5fc3RyZWFtQ2xlYW5VcCA9IGJpbmRGdW5jdGlvbihmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0dGhpcy5faW5wdXQucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCB0aGlzLl9zdHJlYW1EYXRhKTtcblx0XHRcdHRoaXMuX2lucHV0LnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB0aGlzLl9zdHJlYW1FbmQpO1xuXHRcdFx0dGhpcy5faW5wdXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5fc3RyZWFtRXJyb3IpO1xuXHRcdH0sIHRoaXMpO1xuXHR9XG5cdFJlYWRhYmxlU3RyZWFtU3RyZWFtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDaHVua1N0cmVhbWVyLnByb3RvdHlwZSk7XG5cdFJlYWRhYmxlU3RyZWFtU3RyZWFtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVhZGFibGVTdHJlYW1TdHJlYW1lcjtcblxuXG5cdGZ1bmN0aW9uIER1cGxleFN0cmVhbVN0cmVhbWVyKF9jb25maWcpIHtcblx0XHR2YXIgRHVwbGV4ID0gcmVxdWlyZSgnc3RyZWFtJykuRHVwbGV4O1xuXHRcdHZhciBjb25maWcgPSBjb3B5KF9jb25maWcpO1xuXHRcdHZhciBwYXJzZU9uV3JpdGUgPSB0cnVlO1xuXHRcdHZhciB3cml0ZVN0cmVhbUhhc0ZpbmlzaGVkID0gZmFsc2U7XG5cdFx0dmFyIHBhcnNlQ2FsbGJhY2tRdWV1ZSA9IFtdO1xuXHRcdHZhciBzdHJlYW0gPSBudWxsO1xuXG5cdFx0dGhpcy5fb25Dc3ZEYXRhID0gZnVuY3Rpb24ocmVzdWx0cylcblx0XHR7XG5cdFx0XHR2YXIgZGF0YSA9IHJlc3VsdHMuZGF0YTtcblx0XHRcdGlmICghc3RyZWFtLnB1c2goZGF0YSkgJiYgIXRoaXMuX2hhbmRsZS5wYXVzZWQoKSkge1xuXHRcdFx0XHQvLyB0aGUgd3JpdGVhYmxlIGNvbnN1bWVyIGJ1ZmZlciBoYXMgZmlsbGVkIHVwXG5cdFx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gcGF1c2UgdW50aWwgbW9yZSBpdGVtc1xuXHRcdFx0XHQvLyBjYW4gYmUgcHJvY2Vzc2VkXG5cdFx0XHRcdHRoaXMuX2hhbmRsZS5wYXVzZSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLl9vbkNzdkNvbXBsZXRlID0gZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdC8vIG5vZGUgd2lsbCBmaW5pc2ggdGhlIHJlYWQgc3RyZWFtIHdoZW5cblx0XHRcdC8vIG51bGwgaXMgcHVzaGVkXG5cdFx0XHRzdHJlYW0ucHVzaChudWxsKTtcblx0XHR9O1xuXG5cdFx0Y29uZmlnLnN0ZXAgPSBiaW5kRnVuY3Rpb24odGhpcy5fb25Dc3ZEYXRhLCB0aGlzKTtcblx0XHRjb25maWcuY29tcGxldGUgPSBiaW5kRnVuY3Rpb24odGhpcy5fb25Dc3ZDb21wbGV0ZSwgdGhpcyk7XG5cdFx0Q2h1bmtTdHJlYW1lci5jYWxsKHRoaXMsIGNvbmZpZyk7XG5cblx0XHR0aGlzLl9uZXh0Q2h1bmsgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0aWYgKHdyaXRlU3RyZWFtSGFzRmluaXNoZWQgJiYgcGFyc2VDYWxsYmFja1F1ZXVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHR0aGlzLl9maW5pc2hlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyc2VDYWxsYmFja1F1ZXVlLmxlbmd0aCkge1xuXHRcdFx0XHRwYXJzZUNhbGxiYWNrUXVldWUuc2hpZnQoKSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VPbldyaXRlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5fYWRkVG9QYXJzZVF1ZXVlID0gZnVuY3Rpb24oY2h1bmssIGNhbGxiYWNrKVxuXHRcdHtcblx0XHRcdC8vIGFkZCB0byBxdWV1ZSBzbyB0aGF0IHdlIGNhbiBpbmRpY2F0ZVxuXHRcdFx0Ly8gY29tcGxldGlvbiB2aWEgY2FsbGJhY2tcblx0XHRcdC8vIG5vZGUgd2lsbCBhdXRvbWF0aWNhbGx5IHBhdXNlIHRoZSBpbmNvbWluZyBzdHJlYW1cblx0XHRcdC8vIHdoZW4gdG9vIG1hbnkgaXRlbXMgaGF2ZSBiZWVuIGFkZGVkIHdpdGhvdXQgdGhlaXJcblx0XHRcdC8vIGNhbGxiYWNrIGJlaW5nIGludm9rZWRcblx0XHRcdHBhcnNlQ2FsbGJhY2tRdWV1ZS5wdXNoKGJpbmRGdW5jdGlvbihmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5wYXJzZUNodW5rKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBjaHVuayA6IGNodW5rLnRvU3RyaW5nKGNvbmZpZy5lbmNvZGluZykpO1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGhpcykpO1xuXHRcdFx0aWYgKHBhcnNlT25Xcml0ZSkge1xuXHRcdFx0XHRwYXJzZU9uV3JpdGUgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5fbmV4dENodW5rKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuX29uUmVhZCA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRpZiAodGhpcy5faGFuZGxlLnBhdXNlZCgpKSB7XG5cdFx0XHRcdC8vIHRoZSB3cml0ZWFibGUgY29uc3VtZXIgY2FuIGhhbmRsZSBtb3JlIGRhdGFcblx0XHRcdFx0Ly8gc28gcmVzdW1lIHRoZSBjaHVuayBwYXJzaW5nXG5cdFx0XHRcdHRoaXMuX2hhbmRsZS5yZXN1bWUoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5fb25Xcml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spXG5cdFx0e1xuXHRcdFx0dGhpcy5fYWRkVG9QYXJzZVF1ZXVlKGNodW5rLCBjYWxsYmFjayk7XG5cdFx0fTtcblxuXHRcdHRoaXMuX29uV3JpdGVDb21wbGV0ZSA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHR3cml0ZVN0cmVhbUhhc0ZpbmlzaGVkID0gdHJ1ZTtcblx0XHRcdC8vIGhhdmUgdG8gd3JpdGUgZW1wdHkgc3RyaW5nXG5cdFx0XHQvLyBzbyBwYXJzZXIga25vd3MgaXRzIGRvbmVcblx0XHRcdHRoaXMuX2FkZFRvUGFyc2VRdWV1ZSgnJyk7XG5cdFx0fTtcblxuXHRcdHRoaXMuZ2V0U3RyZWFtID0gZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdHJldHVybiBzdHJlYW07XG5cdFx0fTtcblx0XHRzdHJlYW0gPSBuZXcgRHVwbGV4KHtcblx0XHRcdHJlYWRhYmxlT2JqZWN0TW9kZTogdHJ1ZSxcblx0XHRcdGRlY29kZVN0cmluZ3M6IGZhbHNlLFxuXHRcdFx0cmVhZDogYmluZEZ1bmN0aW9uKHRoaXMuX29uUmVhZCwgdGhpcyksXG5cdFx0XHR3cml0ZTogYmluZEZ1bmN0aW9uKHRoaXMuX29uV3JpdGUsIHRoaXMpXG5cdFx0fSk7XG5cdFx0c3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGJpbmRGdW5jdGlvbih0aGlzLl9vbldyaXRlQ29tcGxldGUsIHRoaXMpKTtcblx0fVxuXHRpZiAodHlwZW9mIFBBUEFfQlJPV1NFUl9DT05URVhUID09PSAndW5kZWZpbmVkJykge1xuXHRcdER1cGxleFN0cmVhbVN0cmVhbWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2h1bmtTdHJlYW1lci5wcm90b3R5cGUpO1xuXHRcdER1cGxleFN0cmVhbVN0cmVhbWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IER1cGxleFN0cmVhbVN0cmVhbWVyO1xuXHR9XG5cblxuXHQvLyBVc2Ugb25lIFBhcnNlckhhbmRsZSBwZXIgZW50aXJlIENTViBmaWxlIG9yIHN0cmluZ1xuXHRmdW5jdGlvbiBQYXJzZXJIYW5kbGUoX2NvbmZpZylcblx0e1xuXHRcdC8vIE9uZSBnb2FsIGlzIHRvIG1pbmltaXplIHRoZSB1c2Ugb2YgcmVndWxhciBleHByZXNzaW9ucy4uLlxuXHRcdHZhciBNQVhfRkxPQVQgPSBNYXRoLnBvdygyLCA1Myk7XG5cdFx0dmFyIE1JTl9GTE9BVCA9IC1NQVhfRkxPQVQ7XG5cdFx0dmFyIEZMT0FUID0gL15cXHMqLT8oXFxkK1xcLj98XFwuXFxkK3xcXGQrXFwuXFxkKykoW2VFXVstK10/XFxkKyk/XFxzKiQvO1xuXHRcdHZhciBJU09fREFURSA9IC9eKChcXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZFxcLlxcZCsoWystXVswLTJdXFxkOlswLTVdXFxkfFopKXwoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQoWystXVswLTJdXFxkOlswLTVdXFxkfFopKXwoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQoWystXVswLTJdXFxkOlswLTVdXFxkfFopKSkkLztcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0dmFyIF9zdGVwQ291bnRlciA9IDA7XHQvLyBOdW1iZXIgb2YgdGltZXMgc3RlcCB3YXMgY2FsbGVkIChudW1iZXIgb2Ygcm93cyBwYXJzZWQpXG5cdFx0dmFyIF9yb3dDb3VudGVyID0gMDtcdC8vIE51bWJlciBvZiByb3dzIHRoYXQgaGF2ZSBiZWVuIHBhcnNlZCBzbyBmYXJcblx0XHR2YXIgX2lucHV0O1x0XHRcdFx0Ly8gVGhlIGlucHV0IGJlaW5nIHBhcnNlZFxuXHRcdHZhciBfcGFyc2VyO1x0XHRcdC8vIFRoZSBjb3JlIHBhcnNlciBiZWluZyB1c2VkXG5cdFx0dmFyIF9wYXVzZWQgPSBmYWxzZTtcdC8vIFdoZXRoZXIgd2UgYXJlIHBhdXNlZCBvciBub3Rcblx0XHR2YXIgX2Fib3J0ZWQgPSBmYWxzZTtcdC8vIFdoZXRoZXIgdGhlIHBhcnNlciBoYXMgYWJvcnRlZCBvciBub3Rcblx0XHR2YXIgX2RlbGltaXRlckVycm9yO1x0Ly8gVGVtcG9yYXJ5IHN0YXRlIGJldHdlZW4gZGVsaW1pdGVyIGRldGVjdGlvbiBhbmQgcHJvY2Vzc2luZyByZXN1bHRzXG5cdFx0dmFyIF9maWVsZHMgPSBbXTtcdFx0Ly8gRmllbGRzIGFyZSBmcm9tIHRoZSBoZWFkZXIgcm93IG9mIHRoZSBpbnB1dCwgaWYgdGhlcmUgaXMgb25lXG5cdFx0dmFyIF9yZXN1bHRzID0ge1x0XHQvLyBUaGUgbGFzdCByZXN1bHRzIHJldHVybmVkIGZyb20gdGhlIHBhcnNlclxuXHRcdFx0ZGF0YTogW10sXG5cdFx0XHRlcnJvcnM6IFtdLFxuXHRcdFx0bWV0YToge31cblx0XHR9O1xuXG5cdFx0aWYgKGlzRnVuY3Rpb24oX2NvbmZpZy5zdGVwKSlcblx0XHR7XG5cdFx0XHR2YXIgdXNlclN0ZXAgPSBfY29uZmlnLnN0ZXA7XG5cdFx0XHRfY29uZmlnLnN0ZXAgPSBmdW5jdGlvbihyZXN1bHRzKVxuXHRcdFx0e1xuXHRcdFx0XHRfcmVzdWx0cyA9IHJlc3VsdHM7XG5cblx0XHRcdFx0aWYgKG5lZWRzSGVhZGVyUm93KCkpXG5cdFx0XHRcdFx0cHJvY2Vzc1Jlc3VsdHMoKTtcblx0XHRcdFx0ZWxzZVx0Ly8gb25seSBjYWxsIHVzZXIncyBzdGVwIGZ1bmN0aW9uIGFmdGVyIGhlYWRlciByb3dcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHByb2Nlc3NSZXN1bHRzKCk7XG5cblx0XHRcdFx0XHQvLyBJdCdzIHBvc3NiaWxlIHRoYXQgdGhpcyBsaW5lIHdhcyBlbXB0eSBhbmQgdGhlcmUncyBubyByb3cgaGVyZSBhZnRlciBhbGxcblx0XHRcdFx0XHRpZiAoX3Jlc3VsdHMuZGF0YS5sZW5ndGggPT09IDApXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHRfc3RlcENvdW50ZXIgKz0gcmVzdWx0cy5kYXRhLmxlbmd0aDtcblx0XHRcdFx0XHRpZiAoX2NvbmZpZy5wcmV2aWV3ICYmIF9zdGVwQ291bnRlciA+IF9jb25maWcucHJldmlldylcblx0XHRcdFx0XHRcdF9wYXJzZXIuYWJvcnQoKTtcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdF9yZXN1bHRzLmRhdGEgPSBfcmVzdWx0cy5kYXRhWzBdO1xuXHRcdFx0XHRcdFx0dXNlclN0ZXAoX3Jlc3VsdHMsIHNlbGYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBQYXJzZXMgaW5wdXQuIE1vc3QgdXNlcnMgd29uJ3QgbmVlZCwgYW5kIHNob3VsZG4ndCBtZXNzIHdpdGgsIHRoZSBiYXNlSW5kZXhcblx0XHQgKiBhbmQgaWdub3JlTGFzdFJvdyBwYXJhbWV0ZXJzLiBUaGV5IGFyZSB1c2VkIGJ5IHN0cmVhbWVycyAod3JhcHBlciBmdW5jdGlvbnMpXG5cdFx0ICogd2hlbiBhbiBpbnB1dCBjb21lcyBpbiBtdWx0aXBsZSBjaHVua3MsIGxpa2UgZnJvbSBhIGZpbGUuXG5cdFx0ICovXG5cdFx0dGhpcy5wYXJzZSA9IGZ1bmN0aW9uKGlucHV0LCBiYXNlSW5kZXgsIGlnbm9yZUxhc3RSb3cpXG5cdFx0e1xuXHRcdFx0dmFyIHF1b3RlQ2hhciA9IF9jb25maWcucXVvdGVDaGFyIHx8ICdcIic7XG5cdFx0XHRpZiAoIV9jb25maWcubmV3bGluZSlcblx0XHRcdFx0X2NvbmZpZy5uZXdsaW5lID0gdGhpcy5ndWVzc0xpbmVFbmRpbmdzKGlucHV0LCBxdW90ZUNoYXIpO1xuXG5cdFx0XHRfZGVsaW1pdGVyRXJyb3IgPSBmYWxzZTtcblx0XHRcdGlmICghX2NvbmZpZy5kZWxpbWl0ZXIpXG5cdFx0XHR7XG5cdFx0XHRcdHZhciBkZWxpbUd1ZXNzID0gZ3Vlc3NEZWxpbWl0ZXIoaW5wdXQsIF9jb25maWcubmV3bGluZSwgX2NvbmZpZy5za2lwRW1wdHlMaW5lcywgX2NvbmZpZy5jb21tZW50cywgX2NvbmZpZy5kZWxpbWl0ZXJzVG9HdWVzcyk7XG5cdFx0XHRcdGlmIChkZWxpbUd1ZXNzLnN1Y2Nlc3NmdWwpXG5cdFx0XHRcdFx0X2NvbmZpZy5kZWxpbWl0ZXIgPSBkZWxpbUd1ZXNzLmJlc3REZWxpbWl0ZXI7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdF9kZWxpbWl0ZXJFcnJvciA9IHRydWU7XHQvLyBhZGQgZXJyb3IgYWZ0ZXIgcGFyc2luZyAob3RoZXJ3aXNlIGl0IHdvdWxkIGJlIG92ZXJ3cml0dGVuKVxuXHRcdFx0XHRcdF9jb25maWcuZGVsaW1pdGVyID0gUGFwYS5EZWZhdWx0RGVsaW1pdGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF9yZXN1bHRzLm1ldGEuZGVsaW1pdGVyID0gX2NvbmZpZy5kZWxpbWl0ZXI7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGlzRnVuY3Rpb24oX2NvbmZpZy5kZWxpbWl0ZXIpKVxuXHRcdFx0e1xuXHRcdFx0XHRfY29uZmlnLmRlbGltaXRlciA9IF9jb25maWcuZGVsaW1pdGVyKGlucHV0KTtcblx0XHRcdFx0X3Jlc3VsdHMubWV0YS5kZWxpbWl0ZXIgPSBfY29uZmlnLmRlbGltaXRlcjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBhcnNlckNvbmZpZyA9IGNvcHkoX2NvbmZpZyk7XG5cdFx0XHRpZiAoX2NvbmZpZy5wcmV2aWV3ICYmIF9jb25maWcuaGVhZGVyKVxuXHRcdFx0XHRwYXJzZXJDb25maWcucHJldmlldysrO1x0Ly8gdG8gY29tcGVuc2F0ZSBmb3IgaGVhZGVyIHJvd1xuXG5cdFx0XHRfaW5wdXQgPSBpbnB1dDtcblx0XHRcdF9wYXJzZXIgPSBuZXcgUGFyc2VyKHBhcnNlckNvbmZpZyk7XG5cdFx0XHRfcmVzdWx0cyA9IF9wYXJzZXIucGFyc2UoX2lucHV0LCBiYXNlSW5kZXgsIGlnbm9yZUxhc3RSb3cpO1xuXHRcdFx0cHJvY2Vzc1Jlc3VsdHMoKTtcblx0XHRcdHJldHVybiBfcGF1c2VkID8geyBtZXRhOiB7IHBhdXNlZDogdHJ1ZSB9IH0gOiAoX3Jlc3VsdHMgfHwgeyBtZXRhOiB7IHBhdXNlZDogZmFsc2UgfSB9KTtcblx0XHR9O1xuXG5cdFx0dGhpcy5wYXVzZWQgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0cmV0dXJuIF9wYXVzZWQ7XG5cdFx0fTtcblxuXHRcdHRoaXMucGF1c2UgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0X3BhdXNlZCA9IHRydWU7XG5cdFx0XHRfcGFyc2VyLmFib3J0KCk7XG5cblx0XHRcdC8vIElmIGl0IGlzIHN0cmVhbWluZyB2aWEgXCJjaHVua2luZ1wiLCB0aGUgcmVhZGVyIHdpbGwgc3RhcnQgYXBwZW5kaW5nIGNvcnJlY3RseSBhbHJlYWR5IHNvIG5vIG5lZWQgdG8gc3Vic3RyaW5nLFxuXHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIGNhbiBnZXQgZHVwbGljYXRlIGNvbnRlbnQgd2l0aGluIGEgcm93XG5cdFx0XHRfaW5wdXQgPSBpc0Z1bmN0aW9uKF9jb25maWcuY2h1bmspID8gXCJcIiA6IF9pbnB1dC5zdWJzdHJpbmcoX3BhcnNlci5nZXRDaGFySW5kZXgoKSk7XG5cdFx0fTtcblxuXHRcdHRoaXMucmVzdW1lID0gZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdGlmKHNlbGYuc3RyZWFtZXIuX2hhbHRlZCkge1xuXHRcdFx0XHRfcGF1c2VkID0gZmFsc2U7XG5cdFx0XHRcdHNlbGYuc3RyZWFtZXIucGFyc2VDaHVuayhfaW5wdXQsIHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQnVnZml4OiAjNjM2IEluIGNhc2UgdGhlIHByb2Nlc3NpbmcgaGFzbid0IGhhbHRlZCB5ZXRcblx0XHRcdFx0Ly8gd2FpdCBmb3IgaXQgdG8gaGFsdCBpbiBvcmRlciB0byByZXN1bWVcblx0XHRcdFx0c2V0VGltZW91dChzZWxmLnJlc3VtZSwgMyk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuYWJvcnRlZCA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRyZXR1cm4gX2Fib3J0ZWQ7XG5cdFx0fTtcblxuXHRcdHRoaXMuYWJvcnQgPSBmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0X2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0X3BhcnNlci5hYm9ydCgpO1xuXHRcdFx0X3Jlc3VsdHMubWV0YS5hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKF9jb25maWcuY29tcGxldGUpKVxuXHRcdFx0XHRfY29uZmlnLmNvbXBsZXRlKF9yZXN1bHRzKTtcblx0XHRcdF9pbnB1dCA9ICcnO1xuXHRcdH07XG5cblx0XHR0aGlzLmd1ZXNzTGluZUVuZGluZ3MgPSBmdW5jdGlvbihpbnB1dCwgcXVvdGVDaGFyKVxuXHRcdHtcblx0XHRcdGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDAsIDEwMjQgKiAxMDI0KTtcdC8vIG1heCBsZW5ndGggMSBNQlxuXHRcdFx0Ly8gUmVwbGFjZSBhbGwgdGhlIHRleHQgaW5zaWRlIHF1b3Rlc1xuXHRcdFx0dmFyIHJlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAocXVvdGVDaGFyKSArICcoW15dKj8pJyArIGVzY2FwZVJlZ0V4cChxdW90ZUNoYXIpLCAnZ20nKTtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShyZSwgJycpO1xuXG5cdFx0XHR2YXIgciA9IGlucHV0LnNwbGl0KCdcXHInKTtcblxuXHRcdFx0dmFyIG4gPSBpbnB1dC5zcGxpdCgnXFxuJyk7XG5cblx0XHRcdHZhciBuQXBwZWFyc0ZpcnN0ID0gKG4ubGVuZ3RoID4gMSAmJiBuWzBdLmxlbmd0aCA8IHJbMF0ubGVuZ3RoKTtcblxuXHRcdFx0aWYgKHIubGVuZ3RoID09PSAxIHx8IG5BcHBlYXJzRmlyc3QpXG5cdFx0XHRcdHJldHVybiAnXFxuJztcblxuXHRcdFx0dmFyIG51bVdpdGhOID0gMDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKylcblx0XHRcdHtcblx0XHRcdFx0aWYgKHJbaV1bMF0gPT09ICdcXG4nKVxuXHRcdFx0XHRcdG51bVdpdGhOKys7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudW1XaXRoTiA+PSByLmxlbmd0aCAvIDIgPyAnXFxyXFxuJyA6ICdcXHInO1xuXHRcdH07XG5cblx0XHRmdW5jdGlvbiB0ZXN0RW1wdHlMaW5lKHMpIHtcblx0XHRcdHJldHVybiBfY29uZmlnLnNraXBFbXB0eUxpbmVzID09PSAnZ3JlZWR5JyA/IHMuam9pbignJykudHJpbSgpID09PSAnJyA6IHMubGVuZ3RoID09PSAxICYmIHNbMF0ubGVuZ3RoID09PSAwO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRlc3RGbG9hdChzKSB7XG5cdFx0XHRpZiAoRkxPQVQudGVzdChzKSkge1xuXHRcdFx0XHR2YXIgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQocyk7XG5cdFx0XHRcdGlmIChmbG9hdFZhbHVlID4gTUlOX0ZMT0FUICYmIGZsb2F0VmFsdWUgPCBNQVhfRkxPQVQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHByb2Nlc3NSZXN1bHRzKClcblx0XHR7XG5cdFx0XHRpZiAoX3Jlc3VsdHMgJiYgX2RlbGltaXRlckVycm9yKVxuXHRcdFx0e1xuXHRcdFx0XHRhZGRFcnJvcignRGVsaW1pdGVyJywgJ1VuZGV0ZWN0YWJsZURlbGltaXRlcicsICdVbmFibGUgdG8gYXV0by1kZXRlY3QgZGVsaW1pdGluZyBjaGFyYWN0ZXI7IGRlZmF1bHRlZCB0byBcXCcnICsgUGFwYS5EZWZhdWx0RGVsaW1pdGVyICsgJ1xcJycpO1xuXHRcdFx0XHRfZGVsaW1pdGVyRXJyb3IgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKF9jb25maWcuc2tpcEVtcHR5TGluZXMpXG5cdFx0XHR7XG5cdFx0XHRcdF9yZXN1bHRzLmRhdGEgPSBfcmVzdWx0cy5kYXRhLmZpbHRlcihmdW5jdGlvbihkKSB7XG5cdFx0XHRcdFx0cmV0dXJuICF0ZXN0RW1wdHlMaW5lKGQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5lZWRzSGVhZGVyUm93KCkpXG5cdFx0XHRcdGZpbGxIZWFkZXJGaWVsZHMoKTtcblxuXHRcdFx0cmV0dXJuIGFwcGx5SGVhZGVyQW5kRHluYW1pY1R5cGluZ0FuZFRyYW5zZm9ybWF0aW9uKCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbmVlZHNIZWFkZXJSb3coKVxuXHRcdHtcblx0XHRcdHJldHVybiBfY29uZmlnLmhlYWRlciAmJiBfZmllbGRzLmxlbmd0aCA9PT0gMDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaWxsSGVhZGVyRmllbGRzKClcblx0XHR7XG5cdFx0XHRpZiAoIV9yZXN1bHRzKVxuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdGZ1bmN0aW9uIGFkZEhlYWRlcihoZWFkZXIsIGkpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKF9jb25maWcudHJhbnNmb3JtSGVhZGVyKSlcblx0XHRcdFx0XHRoZWFkZXIgPSBfY29uZmlnLnRyYW5zZm9ybUhlYWRlcihoZWFkZXIsIGkpO1xuXG5cdFx0XHRcdF9maWVsZHMucHVzaChoZWFkZXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShfcmVzdWx0cy5kYXRhWzBdKSlcblx0XHRcdHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IG5lZWRzSGVhZGVyUm93KCkgJiYgaSA8IF9yZXN1bHRzLmRhdGEubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0X3Jlc3VsdHMuZGF0YVtpXS5mb3JFYWNoKGFkZEhlYWRlcik7XG5cblx0XHRcdFx0X3Jlc3VsdHMuZGF0YS5zcGxpY2UoMCwgMSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiBfcmVzdWx0cy5kYXRhWzBdIGlzIG5vdCBhbiBhcnJheSwgd2UgYXJlIGluIGEgc3RlcCB3aGVyZSBfcmVzdWx0cy5kYXRhIGlzIHRoZSByb3cuXG5cdFx0XHRlbHNlXG5cdFx0XHRcdF9yZXN1bHRzLmRhdGEuZm9yRWFjaChhZGRIZWFkZXIpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNob3VsZEFwcGx5RHluYW1pY1R5cGluZyhmaWVsZCkge1xuXHRcdFx0Ly8gQ2FjaGUgZnVuY3Rpb24gdmFsdWVzIHRvIGF2b2lkIGNhbGxpbmcgaXQgZm9yIGVhY2ggcm93XG5cdFx0XHRpZiAoX2NvbmZpZy5keW5hbWljVHlwaW5nRnVuY3Rpb24gJiYgX2NvbmZpZy5keW5hbWljVHlwaW5nW2ZpZWxkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdF9jb25maWcuZHluYW1pY1R5cGluZ1tmaWVsZF0gPSBfY29uZmlnLmR5bmFtaWNUeXBpbmdGdW5jdGlvbihmaWVsZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKF9jb25maWcuZHluYW1pY1R5cGluZ1tmaWVsZF0gfHwgX2NvbmZpZy5keW5hbWljVHlwaW5nKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwYXJzZUR5bmFtaWMoZmllbGQsIHZhbHVlKVxuXHRcdHtcblx0XHRcdGlmIChzaG91bGRBcHBseUR5bmFtaWNUeXBpbmcoZmllbGQpKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAodmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJ1RSVUUnKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ0ZBTFNFJylcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGVsc2UgaWYgKHRlc3RGbG9hdCh2YWx1ZSkpXG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuXHRcdFx0XHRlbHNlIGlmIChJU09fREFURS50ZXN0KHZhbHVlKSlcblx0XHRcdFx0XHRyZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0cmV0dXJuICh2YWx1ZSA9PT0gJycgPyBudWxsIDogdmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFwcGx5SGVhZGVyQW5kRHluYW1pY1R5cGluZ0FuZFRyYW5zZm9ybWF0aW9uKClcblx0XHR7XG5cdFx0XHRpZiAoIV9yZXN1bHRzIHx8ICghX2NvbmZpZy5oZWFkZXIgJiYgIV9jb25maWcuZHluYW1pY1R5cGluZyAmJiAhX2NvbmZpZy50cmFuc2Zvcm0pKVxuXHRcdFx0XHRyZXR1cm4gX3Jlc3VsdHM7XG5cblx0XHRcdGZ1bmN0aW9uIHByb2Nlc3NSb3cocm93U291cmNlLCBpKVxuXHRcdFx0e1xuXHRcdFx0XHR2YXIgcm93ID0gX2NvbmZpZy5oZWFkZXIgPyB7fSA6IFtdO1xuXG5cdFx0XHRcdHZhciBqO1xuXHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgcm93U291cmNlLmxlbmd0aDsgaisrKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dmFyIGZpZWxkID0gajtcblx0XHRcdFx0XHR2YXIgdmFsdWUgPSByb3dTb3VyY2Vbal07XG5cblx0XHRcdFx0XHRpZiAoX2NvbmZpZy5oZWFkZXIpXG5cdFx0XHRcdFx0XHRmaWVsZCA9IGogPj0gX2ZpZWxkcy5sZW5ndGggPyAnX19wYXJzZWRfZXh0cmEnIDogX2ZpZWxkc1tqXTtcblxuXHRcdFx0XHRcdGlmIChfY29uZmlnLnRyYW5zZm9ybSlcblx0XHRcdFx0XHRcdHZhbHVlID0gX2NvbmZpZy50cmFuc2Zvcm0odmFsdWUsZmllbGQpO1xuXG5cdFx0XHRcdFx0dmFsdWUgPSBwYXJzZUR5bmFtaWMoZmllbGQsIHZhbHVlKTtcblxuXHRcdFx0XHRcdGlmIChmaWVsZCA9PT0gJ19fcGFyc2VkX2V4dHJhJylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRyb3dbZmllbGRdID0gcm93W2ZpZWxkXSB8fCBbXTtcblx0XHRcdFx0XHRcdHJvd1tmaWVsZF0ucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJvd1tmaWVsZF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0aWYgKF9jb25maWcuaGVhZGVyKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKGogPiBfZmllbGRzLmxlbmd0aClcblx0XHRcdFx0XHRcdGFkZEVycm9yKCdGaWVsZE1pc21hdGNoJywgJ1Rvb01hbnlGaWVsZHMnLCAnVG9vIG1hbnkgZmllbGRzOiBleHBlY3RlZCAnICsgX2ZpZWxkcy5sZW5ndGggKyAnIGZpZWxkcyBidXQgcGFyc2VkICcgKyBqLCBfcm93Q291bnRlciArIGkpO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGogPCBfZmllbGRzLmxlbmd0aClcblx0XHRcdFx0XHRcdGFkZEVycm9yKCdGaWVsZE1pc21hdGNoJywgJ1Rvb0Zld0ZpZWxkcycsICdUb28gZmV3IGZpZWxkczogZXhwZWN0ZWQgJyArIF9maWVsZHMubGVuZ3RoICsgJyBmaWVsZHMgYnV0IHBhcnNlZCAnICsgaiwgX3Jvd0NvdW50ZXIgKyBpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByb3c7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpbmNyZW1lbnRCeSA9IDE7XG5cdFx0XHRpZiAoIV9yZXN1bHRzLmRhdGEubGVuZ3RoIHx8IEFycmF5LmlzQXJyYXkoX3Jlc3VsdHMuZGF0YVswXSkpXG5cdFx0XHR7XG5cdFx0XHRcdF9yZXN1bHRzLmRhdGEgPSBfcmVzdWx0cy5kYXRhLm1hcChwcm9jZXNzUm93KTtcblx0XHRcdFx0aW5jcmVtZW50QnkgPSBfcmVzdWx0cy5kYXRhLmxlbmd0aDtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdFx0X3Jlc3VsdHMuZGF0YSA9IHByb2Nlc3NSb3coX3Jlc3VsdHMuZGF0YSwgMCk7XG5cblxuXHRcdFx0aWYgKF9jb25maWcuaGVhZGVyICYmIF9yZXN1bHRzLm1ldGEpXG5cdFx0XHRcdF9yZXN1bHRzLm1ldGEuZmllbGRzID0gX2ZpZWxkcztcblxuXHRcdFx0X3Jvd0NvdW50ZXIgKz0gaW5jcmVtZW50Qnk7XG5cdFx0XHRyZXR1cm4gX3Jlc3VsdHM7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ3Vlc3NEZWxpbWl0ZXIoaW5wdXQsIG5ld2xpbmUsIHNraXBFbXB0eUxpbmVzLCBjb21tZW50cywgZGVsaW1pdGVyc1RvR3Vlc3MpIHtcblx0XHRcdHZhciBiZXN0RGVsaW0sIGJlc3REZWx0YSwgZmllbGRDb3VudFByZXZSb3csIG1heEZpZWxkQ291bnQ7XG5cblx0XHRcdGRlbGltaXRlcnNUb0d1ZXNzID0gZGVsaW1pdGVyc1RvR3Vlc3MgfHwgWycsJywgJ1xcdCcsICd8JywgJzsnLCBQYXBhLlJFQ09SRF9TRVAsIFBhcGEuVU5JVF9TRVBdO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlbGltaXRlcnNUb0d1ZXNzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBkZWxpbSA9IGRlbGltaXRlcnNUb0d1ZXNzW2ldO1xuXHRcdFx0XHR2YXIgZGVsdGEgPSAwLCBhdmdGaWVsZENvdW50ID0gMCwgZW1wdHlMaW5lc0NvdW50ID0gMDtcblx0XHRcdFx0ZmllbGRDb3VudFByZXZSb3cgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0dmFyIHByZXZpZXcgPSBuZXcgUGFyc2VyKHtcblx0XHRcdFx0XHRjb21tZW50czogY29tbWVudHMsXG5cdFx0XHRcdFx0ZGVsaW1pdGVyOiBkZWxpbSxcblx0XHRcdFx0XHRuZXdsaW5lOiBuZXdsaW5lLFxuXHRcdFx0XHRcdHByZXZpZXc6IDEwXG5cdFx0XHRcdH0pLnBhcnNlKGlucHV0KTtcblxuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHByZXZpZXcuZGF0YS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGlmIChza2lwRW1wdHlMaW5lcyAmJiB0ZXN0RW1wdHlMaW5lKHByZXZpZXcuZGF0YVtqXSkpIHtcblx0XHRcdFx0XHRcdGVtcHR5TGluZXNDb3VudCsrO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBmaWVsZENvdW50ID0gcHJldmlldy5kYXRhW2pdLmxlbmd0aDtcblx0XHRcdFx0XHRhdmdGaWVsZENvdW50ICs9IGZpZWxkQ291bnQ7XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIGZpZWxkQ291bnRQcmV2Um93ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdFx0ZmllbGRDb3VudFByZXZSb3cgPSBmaWVsZENvdW50O1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKGZpZWxkQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRkZWx0YSArPSBNYXRoLmFicyhmaWVsZENvdW50IC0gZmllbGRDb3VudFByZXZSb3cpO1xuXHRcdFx0XHRcdFx0ZmllbGRDb3VudFByZXZSb3cgPSBmaWVsZENvdW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwcmV2aWV3LmRhdGEubGVuZ3RoID4gMClcblx0XHRcdFx0XHRhdmdGaWVsZENvdW50IC89IChwcmV2aWV3LmRhdGEubGVuZ3RoIC0gZW1wdHlMaW5lc0NvdW50KTtcblxuXHRcdFx0XHRpZiAoKHR5cGVvZiBiZXN0RGVsdGEgPT09ICd1bmRlZmluZWQnIHx8IGRlbHRhIDw9IGJlc3REZWx0YSlcblx0XHRcdFx0XHQmJiAodHlwZW9mIG1heEZpZWxkQ291bnQgPT09ICd1bmRlZmluZWQnIHx8IGF2Z0ZpZWxkQ291bnQgPiBtYXhGaWVsZENvdW50KSAmJiBhdmdGaWVsZENvdW50ID4gMS45OSkge1xuXHRcdFx0XHRcdGJlc3REZWx0YSA9IGRlbHRhO1xuXHRcdFx0XHRcdGJlc3REZWxpbSA9IGRlbGltO1xuXHRcdFx0XHRcdG1heEZpZWxkQ291bnQgPSBhdmdGaWVsZENvdW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF9jb25maWcuZGVsaW1pdGVyID0gYmVzdERlbGltO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdWNjZXNzZnVsOiAhIWJlc3REZWxpbSxcblx0XHRcdFx0YmVzdERlbGltaXRlcjogYmVzdERlbGltXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZEVycm9yKHR5cGUsIGNvZGUsIG1zZywgcm93KVxuXHRcdHtcblx0XHRcdHZhciBlcnJvciA9IHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0Y29kZTogY29kZSxcblx0XHRcdFx0bWVzc2FnZTogbXNnXG5cdFx0XHR9O1xuXHRcdFx0aWYocm93ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXJyb3Iucm93ID0gcm93O1xuXHRcdFx0fVxuXHRcdFx0X3Jlc3VsdHMuZXJyb3JzLnB1c2goZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0d1aWRlL1JlZ3VsYXJfRXhwcmVzc2lvbnMgKi9cblx0ZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZylcblx0e1xuXHRcdHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTsgLy8gJCYgbWVhbnMgdGhlIHdob2xlIG1hdGNoZWQgc3RyaW5nXG5cdH1cblxuXHQvKiogVGhlIGNvcmUgcGFyc2VyIGltcGxlbWVudHMgc3BlZWR5IGFuZCBjb3JyZWN0IENTViBwYXJzaW5nICovXG5cdGZ1bmN0aW9uIFBhcnNlcihjb25maWcpXG5cdHtcblx0XHQvLyBVbnBhY2sgdGhlIGNvbmZpZyBvYmplY3Rcblx0XHRjb25maWcgPSBjb25maWcgfHwge307XG5cdFx0dmFyIGRlbGltID0gY29uZmlnLmRlbGltaXRlcjtcblx0XHR2YXIgbmV3bGluZSA9IGNvbmZpZy5uZXdsaW5lO1xuXHRcdHZhciBjb21tZW50cyA9IGNvbmZpZy5jb21tZW50cztcblx0XHR2YXIgc3RlcCA9IGNvbmZpZy5zdGVwO1xuXHRcdHZhciBwcmV2aWV3ID0gY29uZmlnLnByZXZpZXc7XG5cdFx0dmFyIGZhc3RNb2RlID0gY29uZmlnLmZhc3RNb2RlO1xuXHRcdHZhciBxdW90ZUNoYXI7XG5cdFx0dmFyIHJlbmFtZWRIZWFkZXJzID0gbnVsbDtcblx0XHR2YXIgaGVhZGVyUGFyc2VkID0gZmFsc2U7XG5cblx0XHRpZiAoY29uZmlnLnF1b3RlQ2hhciA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5xdW90ZUNoYXIgPT09IG51bGwpIHtcblx0XHRcdHF1b3RlQ2hhciA9ICdcIic7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHF1b3RlQ2hhciA9IGNvbmZpZy5xdW90ZUNoYXI7XG5cdFx0fVxuXHRcdHZhciBlc2NhcGVDaGFyID0gcXVvdGVDaGFyO1xuXHRcdGlmIChjb25maWcuZXNjYXBlQ2hhciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlc2NhcGVDaGFyID0gY29uZmlnLmVzY2FwZUNoYXI7XG5cdFx0fVxuXG5cdFx0Ly8gRGVsaW1pdGVyIG11c3QgYmUgdmFsaWRcblx0XHRpZiAodHlwZW9mIGRlbGltICE9PSAnc3RyaW5nJ1xuXHRcdFx0fHwgUGFwYS5CQURfREVMSU1JVEVSUy5pbmRleE9mKGRlbGltKSA+IC0xKVxuXHRcdFx0ZGVsaW0gPSAnLCc7XG5cblx0XHQvLyBDb21tZW50IGNoYXJhY3RlciBtdXN0IGJlIHZhbGlkXG5cdFx0aWYgKGNvbW1lbnRzID09PSBkZWxpbSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ29tbWVudCBjaGFyYWN0ZXIgc2FtZSBhcyBkZWxpbWl0ZXInKTtcblx0XHRlbHNlIGlmIChjb21tZW50cyA9PT0gdHJ1ZSlcblx0XHRcdGNvbW1lbnRzID0gJyMnO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBjb21tZW50cyAhPT0gJ3N0cmluZydcblx0XHRcdHx8IFBhcGEuQkFEX0RFTElNSVRFUlMuaW5kZXhPZihjb21tZW50cykgPiAtMSlcblx0XHRcdGNvbW1lbnRzID0gZmFsc2U7XG5cblx0XHQvLyBOZXdsaW5lIG11c3QgYmUgdmFsaWQ6IFxcciwgXFxuLCBvciBcXHJcXG5cblx0XHRpZiAobmV3bGluZSAhPT0gJ1xcbicgJiYgbmV3bGluZSAhPT0gJ1xccicgJiYgbmV3bGluZSAhPT0gJ1xcclxcbicpXG5cdFx0XHRuZXdsaW5lID0gJ1xcbic7XG5cblx0XHQvLyBXZSdyZSBnb25uYSBuZWVkIHRoZXNlIGF0IHRoZSBQYXJzZXIgc2NvcGVcblx0XHR2YXIgY3Vyc29yID0gMDtcblx0XHR2YXIgYWJvcnRlZCA9IGZhbHNlO1xuXG5cdFx0dGhpcy5wYXJzZSA9IGZ1bmN0aW9uKGlucHV0LCBiYXNlSW5kZXgsIGlnbm9yZUxhc3RSb3cpXG5cdFx0e1xuXHRcdFx0Ly8gRm9yIHNvbWUgcmVhc29uLCBpbiBDaHJvbWUsIHRoaXMgc3BlZWRzIHRoaW5ncyB1cCAoIT8pXG5cdFx0XHRpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJylcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cblx0XHRcdC8vIFdlIGRvbid0IG5lZWQgdG8gY29tcHV0ZSBzb21lIG9mIHRoZXNlIGV2ZXJ5IHRpbWUgcGFyc2UoKSBpcyBjYWxsZWQsXG5cdFx0XHQvLyBidXQgaGF2aW5nIHRoZW0gaW4gYSBtb3JlIGxvY2FsIHNjb3BlIHNlZW1zIHRvIHBlcmZvcm0gYmV0dGVyXG5cdFx0XHR2YXIgaW5wdXRMZW4gPSBpbnB1dC5sZW5ndGgsXG5cdFx0XHRcdGRlbGltTGVuID0gZGVsaW0ubGVuZ3RoLFxuXHRcdFx0XHRuZXdsaW5lTGVuID0gbmV3bGluZS5sZW5ndGgsXG5cdFx0XHRcdGNvbW1lbnRzTGVuID0gY29tbWVudHMubGVuZ3RoO1xuXHRcdFx0dmFyIHN0ZXBJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbihzdGVwKTtcblxuXHRcdFx0Ly8gRXN0YWJsaXNoIHN0YXJ0aW5nIHN0YXRlXG5cdFx0XHRjdXJzb3IgPSAwO1xuXHRcdFx0dmFyIGRhdGEgPSBbXSwgZXJyb3JzID0gW10sIHJvdyA9IFtdLCBsYXN0Q3Vyc29yID0gMDtcblxuXHRcdFx0aWYgKCFpbnB1dClcblx0XHRcdFx0cmV0dXJuIHJldHVybmFibGUoKTtcblxuXHRcdFx0aWYgKGZhc3RNb2RlIHx8IChmYXN0TW9kZSAhPT0gZmFsc2UgJiYgaW5wdXQuaW5kZXhPZihxdW90ZUNoYXIpID09PSAtMSkpXG5cdFx0XHR7XG5cdFx0XHRcdHZhciByb3dzID0gaW5wdXQuc3BsaXQobmV3bGluZSk7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKylcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHJvdyA9IHJvd3NbaV07XG5cdFx0XHRcdFx0Y3Vyc29yICs9IHJvdy5sZW5ndGg7XG5cblx0XHRcdFx0XHRpZiAoaSAhPT0gcm93cy5sZW5ndGggLSAxKVxuXHRcdFx0XHRcdFx0Y3Vyc29yICs9IG5ld2xpbmUubGVuZ3RoO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGlnbm9yZUxhc3RSb3cpXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuYWJsZSgpO1xuXHRcdFx0XHRcdGlmIChjb21tZW50cyAmJiByb3cuc3Vic3RyaW5nKDAsIGNvbW1lbnRzTGVuKSA9PT0gY29tbWVudHMpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRpZiAoc3RlcElzRnVuY3Rpb24pXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZGF0YSA9IFtdO1xuXHRcdFx0XHRcdFx0cHVzaFJvdyhyb3cuc3BsaXQoZGVsaW0pKTtcblx0XHRcdFx0XHRcdGRvU3RlcCgpO1xuXHRcdFx0XHRcdFx0aWYgKGFib3J0ZWQpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXR1cm5hYmxlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHB1c2hSb3cocm93LnNwbGl0KGRlbGltKSk7XG5cdFx0XHRcdFx0aWYgKHByZXZpZXcgJiYgaSA+PSBwcmV2aWV3KVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGRhdGEgPSBkYXRhLnNsaWNlKDAsIHByZXZpZXcpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJldHVybmFibGUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXR1cm5hYmxlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBuZXh0RGVsaW0gPSBpbnB1dC5pbmRleE9mKGRlbGltLCBjdXJzb3IpO1xuXHRcdFx0dmFyIG5leHROZXdsaW5lID0gaW5wdXQuaW5kZXhPZihuZXdsaW5lLCBjdXJzb3IpO1xuXHRcdFx0dmFyIHF1b3RlQ2hhclJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoZXNjYXBlQ2hhcikgKyBlc2NhcGVSZWdFeHAocXVvdGVDaGFyKSwgJ2cnKTtcblx0XHRcdHZhciBxdW90ZVNlYXJjaCA9IGlucHV0LmluZGV4T2YocXVvdGVDaGFyLCBjdXJzb3IpO1xuXG5cdFx0XHQvLyBQYXJzZXIgbG9vcFxuXHRcdFx0Zm9yICg7Oylcblx0XHRcdHtcblx0XHRcdFx0Ly8gRmllbGQgaGFzIG9wZW5pbmcgcXVvdGVcblx0XHRcdFx0aWYgKGlucHV0W2N1cnNvcl0gPT09IHF1b3RlQ2hhcilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIFN0YXJ0IG91ciBzZWFyY2ggZm9yIHRoZSBjbG9zaW5nIHF1b3RlIHdoZXJlIHRoZSBjdXJzb3IgaXNcblx0XHRcdFx0XHRxdW90ZVNlYXJjaCA9IGN1cnNvcjtcblxuXHRcdFx0XHRcdC8vIFNraXAgdGhlIG9wZW5pbmcgcXVvdGVcblx0XHRcdFx0XHRjdXJzb3IrKztcblxuXHRcdFx0XHRcdGZvciAoOzspXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gRmluZCBjbG9zaW5nIHF1b3RlXG5cdFx0XHRcdFx0XHRxdW90ZVNlYXJjaCA9IGlucHV0LmluZGV4T2YocXVvdGVDaGFyLCBxdW90ZVNlYXJjaCArIDEpO1xuXG5cdFx0XHRcdFx0XHQvL05vIG90aGVyIHF1b3RlcyBhcmUgZm91bmQgLSBubyBvdGhlciBkZWxpbWl0ZXJzXG5cdFx0XHRcdFx0XHRpZiAocXVvdGVTZWFyY2ggPT09IC0xKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAoIWlnbm9yZUxhc3RSb3cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBObyBjbG9zaW5nIHF1b3RlLi4uIHdoYXQgYSBwaXR5XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3JzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ1F1b3RlcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOiAnTWlzc2luZ1F1b3RlcycsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnUXVvdGVkIGZpZWxkIHVudGVybWluYXRlZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3c6IGRhdGEubGVuZ3RoLFx0Ly8gcm93IGhhcyB5ZXQgdG8gYmUgaW5zZXJ0ZWRcblx0XHRcdFx0XHRcdFx0XHRcdGluZGV4OiBjdXJzb3Jcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmluaXNoKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIENsb3NpbmcgcXVvdGUgYXQgRU9GXG5cdFx0XHRcdFx0XHRpZiAocXVvdGVTZWFyY2ggPT09IGlucHV0TGVuIC0gMSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaW5wdXQuc3Vic3RyaW5nKGN1cnNvciwgcXVvdGVTZWFyY2gpLnJlcGxhY2UocXVvdGVDaGFyUmVnZXgsIHF1b3RlQ2hhcik7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmaW5pc2godmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGlzIHF1b3RlIGlzIGVzY2FwZWQsIGl0J3MgcGFydCBvZiB0aGUgZGF0YTsgc2tpcCBpdFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHF1b3RlIGNoYXJhY3RlciBpcyB0aGUgZXNjYXBlIGNoYXJhY3RlciwgdGhlbiBjaGVjayBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXJcblx0XHRcdFx0XHRcdGlmIChxdW90ZUNoYXIgPT09IGVzY2FwZUNoYXIgJiYgIGlucHV0W3F1b3RlU2VhcmNoICsgMV0gPT09IGVzY2FwZUNoYXIpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHF1b3RlU2VhcmNoKys7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcXVvdGUgY2hhcmFjdGVyIGlzIG5vdCB0aGUgZXNjYXBlIGNoYXJhY3RlciwgdGhlbiBjaGVjayBpZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyB0aGUgZXNjYXBlIGNoYXJhY3RlclxuXHRcdFx0XHRcdFx0aWYgKHF1b3RlQ2hhciAhPT0gZXNjYXBlQ2hhciAmJiBxdW90ZVNlYXJjaCAhPT0gMCAmJiBpbnB1dFtxdW90ZVNlYXJjaCAtIDFdID09PSBlc2NhcGVDaGFyKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYobmV4dERlbGltICE9PSAtMSAmJiBuZXh0RGVsaW0gPCAocXVvdGVTZWFyY2ggKyAxKSkge1xuXHRcdFx0XHRcdFx0XHRuZXh0RGVsaW0gPSBpbnB1dC5pbmRleE9mKGRlbGltLCAocXVvdGVTZWFyY2ggKyAxKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihuZXh0TmV3bGluZSAhPT0gLTEgJiYgbmV4dE5ld2xpbmUgPCAocXVvdGVTZWFyY2ggKyAxKSkge1xuXHRcdFx0XHRcdFx0XHRuZXh0TmV3bGluZSA9IGlucHV0LmluZGV4T2YobmV3bGluZSwgKHF1b3RlU2VhcmNoICsgMSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgdXAgdG8gbmV4dERlbGltIG9yIG5leHROZXdsaW5lLCB3aGljaGV2ZXIgaXMgY2xvc2VzdFxuXHRcdFx0XHRcdFx0dmFyIGNoZWNrVXBUbyA9IG5leHROZXdsaW5lID09PSAtMSA/IG5leHREZWxpbSA6IE1hdGgubWluKG5leHREZWxpbSwgbmV4dE5ld2xpbmUpO1xuXHRcdFx0XHRcdFx0dmFyIHNwYWNlc0JldHdlZW5RdW90ZUFuZERlbGltaXRlciA9IGV4dHJhU3BhY2VzKGNoZWNrVXBUbyk7XG5cblx0XHRcdFx0XHRcdC8vIENsb3NpbmcgcXVvdGUgZm9sbG93ZWQgYnkgZGVsaW1pdGVyIG9yICd1bm5lY2Vzc2FyeSBzcGFjZXMgKyBkZWxpbWl0ZXInXG5cdFx0XHRcdFx0XHRpZiAoaW5wdXQuc3Vic3RyKHF1b3RlU2VhcmNoICsgMSArIHNwYWNlc0JldHdlZW5RdW90ZUFuZERlbGltaXRlciwgZGVsaW1MZW4pID09PSBkZWxpbSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0cm93LnB1c2goaW5wdXQuc3Vic3RyaW5nKGN1cnNvciwgcXVvdGVTZWFyY2gpLnJlcGxhY2UocXVvdGVDaGFyUmVnZXgsIHF1b3RlQ2hhcikpO1xuXHRcdFx0XHRcdFx0XHRjdXJzb3IgPSBxdW90ZVNlYXJjaCArIDEgKyBzcGFjZXNCZXR3ZWVuUXVvdGVBbmREZWxpbWl0ZXIgKyBkZWxpbUxlbjtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBjaGFyIGFmdGVyIGZvbGxvd2luZyBkZWxpbWl0ZXIgaXMgbm90IHF1b3RlQ2hhciwgd2UgZmluZCBuZXh0IHF1b3RlIGNoYXIgcG9zaXRpb25cblx0XHRcdFx0XHRcdFx0aWYgKGlucHV0W3F1b3RlU2VhcmNoICsgMSArIHNwYWNlc0JldHdlZW5RdW90ZUFuZERlbGltaXRlciArIGRlbGltTGVuXSAhPT0gcXVvdGVDaGFyKVxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cXVvdGVTZWFyY2ggPSBpbnB1dC5pbmRleE9mKHF1b3RlQ2hhciwgY3Vyc29yKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRuZXh0RGVsaW0gPSBpbnB1dC5pbmRleE9mKGRlbGltLCBjdXJzb3IpO1xuXHRcdFx0XHRcdFx0XHRuZXh0TmV3bGluZSA9IGlucHV0LmluZGV4T2YobmV3bGluZSwgY3Vyc29yKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBzcGFjZXNCZXR3ZWVuUXVvdGVBbmROZXdMaW5lID0gZXh0cmFTcGFjZXMobmV4dE5ld2xpbmUpO1xuXG5cdFx0XHRcdFx0XHQvLyBDbG9zaW5nIHF1b3RlIGZvbGxvd2VkIGJ5IG5ld2xpbmUgb3IgJ3VubmVjZXNzYXJ5IHNwYWNlcyArIG5ld0xpbmUnXG5cdFx0XHRcdFx0XHRpZiAoaW5wdXQuc3Vic3RyaW5nKHF1b3RlU2VhcmNoICsgMSArIHNwYWNlc0JldHdlZW5RdW90ZUFuZE5ld0xpbmUsIHF1b3RlU2VhcmNoICsgMSArIHNwYWNlc0JldHdlZW5RdW90ZUFuZE5ld0xpbmUgKyBuZXdsaW5lTGVuKSA9PT0gbmV3bGluZSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0cm93LnB1c2goaW5wdXQuc3Vic3RyaW5nKGN1cnNvciwgcXVvdGVTZWFyY2gpLnJlcGxhY2UocXVvdGVDaGFyUmVnZXgsIHF1b3RlQ2hhcikpO1xuXHRcdFx0XHRcdFx0XHRzYXZlUm93KHF1b3RlU2VhcmNoICsgMSArIHNwYWNlc0JldHdlZW5RdW90ZUFuZE5ld0xpbmUgKyBuZXdsaW5lTGVuKTtcblx0XHRcdFx0XHRcdFx0bmV4dERlbGltID0gaW5wdXQuaW5kZXhPZihkZWxpbSwgY3Vyc29yKTtcdC8vIGJlY2F1c2Ugd2UgbWF5IGhhdmUgc2tpcHBlZCB0aGUgbmV4dERlbGltIGluIHRoZSBxdW90ZWQgZmllbGRcblx0XHRcdFx0XHRcdFx0cXVvdGVTZWFyY2ggPSBpbnB1dC5pbmRleE9mKHF1b3RlQ2hhciwgY3Vyc29yKTtcdC8vIHdlIHNlYXJjaCBmb3IgZmlyc3QgcXVvdGUgaW4gbmV4dCBsaW5lXG5cblx0XHRcdFx0XHRcdFx0aWYgKHN0ZXBJc0Z1bmN0aW9uKVxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZG9TdGVwKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFib3J0ZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuYWJsZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKHByZXZpZXcgJiYgZGF0YS5sZW5ndGggPj0gcHJldmlldylcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuYWJsZSh0cnVlKTtcblxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0XHQvLyBDaGVja3MgZm9yIHZhbGlkIGNsb3NpbmcgcXVvdGVzIGFyZSBjb21wbGV0ZSAoZXNjYXBlZCBxdW90ZXMgb3IgcXVvdGUgZm9sbG93ZWQgYnkgRU9GL2RlbGltaXRlci9uZXdsaW5lKSAtLSBhc3N1bWUgdGhlc2UgcXVvdGVzIGFyZSBwYXJ0IG9mIGFuIGludmFsaWQgdGV4dCBzdHJpbmdcblx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogJ1F1b3RlcycsXG5cdFx0XHRcdFx0XHRcdGNvZGU6ICdJbnZhbGlkUXVvdGVzJyxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1RyYWlsaW5nIHF1b3RlIG9uIHF1b3RlZCBmaWVsZCBpcyBtYWxmb3JtZWQnLFxuXHRcdFx0XHRcdFx0XHRyb3c6IGRhdGEubGVuZ3RoLFx0Ly8gcm93IGhhcyB5ZXQgdG8gYmUgaW5zZXJ0ZWRcblx0XHRcdFx0XHRcdFx0aW5kZXg6IGN1cnNvclxuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdHF1b3RlU2VhcmNoKys7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ29tbWVudCBmb3VuZCBhdCBzdGFydCBvZiBuZXcgbGluZVxuXHRcdFx0XHRpZiAoY29tbWVudHMgJiYgcm93Lmxlbmd0aCA9PT0gMCAmJiBpbnB1dC5zdWJzdHJpbmcoY3Vyc29yLCBjdXJzb3IgKyBjb21tZW50c0xlbikgPT09IGNvbW1lbnRzKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKG5leHROZXdsaW5lID09PSAtMSlcdC8vIENvbW1lbnQgZW5kcyBhdCBFT0Zcblx0XHRcdFx0XHRcdHJldHVybiByZXR1cm5hYmxlKCk7XG5cdFx0XHRcdFx0Y3Vyc29yID0gbmV4dE5ld2xpbmUgKyBuZXdsaW5lTGVuO1xuXHRcdFx0XHRcdG5leHROZXdsaW5lID0gaW5wdXQuaW5kZXhPZihuZXdsaW5lLCBjdXJzb3IpO1xuXHRcdFx0XHRcdG5leHREZWxpbSA9IGlucHV0LmluZGV4T2YoZGVsaW0sIGN1cnNvcik7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOZXh0IGRlbGltaXRlciBjb21lcyBiZWZvcmUgbmV4dCBuZXdsaW5lLCBzbyB3ZSd2ZSByZWFjaGVkIGVuZCBvZiBmaWVsZFxuXHRcdFx0XHRpZiAobmV4dERlbGltICE9PSAtMSAmJiAobmV4dERlbGltIDwgbmV4dE5ld2xpbmUgfHwgbmV4dE5ld2xpbmUgPT09IC0xKSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHJvdy5wdXNoKGlucHV0LnN1YnN0cmluZyhjdXJzb3IsIG5leHREZWxpbSkpO1xuXHRcdFx0XHRcdGN1cnNvciA9IG5leHREZWxpbSArIGRlbGltTGVuO1xuXHRcdFx0XHRcdC8vIHdlIGxvb2sgZm9yIG5leHQgZGVsaW1pdGVyIGNoYXJcblx0XHRcdFx0XHRuZXh0RGVsaW0gPSBpbnB1dC5pbmRleE9mKGRlbGltLCBjdXJzb3IpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRW5kIG9mIHJvd1xuXHRcdFx0XHRpZiAobmV4dE5ld2xpbmUgIT09IC0xKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cm93LnB1c2goaW5wdXQuc3Vic3RyaW5nKGN1cnNvciwgbmV4dE5ld2xpbmUpKTtcblx0XHRcdFx0XHRzYXZlUm93KG5leHROZXdsaW5lICsgbmV3bGluZUxlbik7XG5cblx0XHRcdFx0XHRpZiAoc3RlcElzRnVuY3Rpb24pXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZG9TdGVwKCk7XG5cdFx0XHRcdFx0XHRpZiAoYWJvcnRlZClcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJldHVybmFibGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJldmlldyAmJiBkYXRhLmxlbmd0aCA+PSBwcmV2aWV3KVxuXHRcdFx0XHRcdFx0cmV0dXJuIHJldHVybmFibGUodHJ1ZSk7XG5cblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmluaXNoKCk7XG5cblxuXHRcdFx0ZnVuY3Rpb24gcHVzaFJvdyhyb3cpXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGEucHVzaChyb3cpO1xuXHRcdFx0XHRsYXN0Q3Vyc29yID0gY3Vyc29yO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcbiAgICAgICAgICAgICAqIGNoZWNrcyBpZiB0aGVyZSBhcmUgZXh0cmEgc3BhY2VzIGFmdGVyIGNsb3NpbmcgcXVvdGUgYW5kIGdpdmVuIGluZGV4IHdpdGhvdXQgYW55IHRleHRcbiAgICAgICAgICAgICAqIGlmIFllcywgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlc1xuICAgICAgICAgICAgICovXG5cdFx0XHRmdW5jdGlvbiBleHRyYVNwYWNlcyhpbmRleCkge1xuXHRcdFx0XHR2YXIgc3BhY2VMZW5ndGggPSAwO1xuXHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0dmFyIHRleHRCZXR3ZWVuQ2xvc2luZ1F1b3RlQW5kSW5kZXggPSBpbnB1dC5zdWJzdHJpbmcocXVvdGVTZWFyY2ggKyAxLCBpbmRleCk7XG5cdFx0XHRcdFx0aWYgKHRleHRCZXR3ZWVuQ2xvc2luZ1F1b3RlQW5kSW5kZXggJiYgdGV4dEJldHdlZW5DbG9zaW5nUXVvdGVBbmRJbmRleC50cmltKCkgPT09ICcnKSB7XG5cdFx0XHRcdFx0XHRzcGFjZUxlbmd0aCA9IHRleHRCZXR3ZWVuQ2xvc2luZ1F1b3RlQW5kSW5kZXgubGVuZ3RoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3BhY2VMZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQXBwZW5kcyB0aGUgcmVtYWluaW5nIGlucHV0IGZyb20gY3Vyc29yIHRvIHRoZSBlbmQgaW50b1xuXHRcdFx0ICogcm93LCBzYXZlcyB0aGUgcm93LCBjYWxscyBzdGVwLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy5cblx0XHRcdCAqL1xuXHRcdFx0ZnVuY3Rpb24gZmluaXNoKHZhbHVlKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoaWdub3JlTGFzdFJvdylcblx0XHRcdFx0XHRyZXR1cm4gcmV0dXJuYWJsZSgpO1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJylcblx0XHRcdFx0XHR2YWx1ZSA9IGlucHV0LnN1YnN0cmluZyhjdXJzb3IpO1xuXHRcdFx0XHRyb3cucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdGN1cnNvciA9IGlucHV0TGVuO1x0Ly8gaW1wb3J0YW50IGluIGNhc2UgcGFyc2luZyBpcyBwYXVzZWRcblx0XHRcdFx0cHVzaFJvdyhyb3cpO1xuXHRcdFx0XHRpZiAoc3RlcElzRnVuY3Rpb24pXG5cdFx0XHRcdFx0ZG9TdGVwKCk7XG5cdFx0XHRcdHJldHVybiByZXR1cm5hYmxlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQXBwZW5kcyB0aGUgY3VycmVudCByb3cgdG8gdGhlIHJlc3VsdHMuIEl0IHNldHMgdGhlIGN1cnNvclxuXHRcdFx0ICogdG8gbmV3Q3Vyc29yIGFuZCBmaW5kcyB0aGUgbmV4dE5ld2xpbmUuIFRoZSBjYWxsZXIgc2hvdWxkXG5cdFx0XHQgKiB0YWtlIGNhcmUgdG8gZXhlY3V0ZSB1c2VyJ3Mgc3RlcCBmdW5jdGlvbiBhbmQgY2hlY2sgZm9yXG5cdFx0XHQgKiBwcmV2aWV3IGFuZCBlbmQgcGFyc2luZyBpZiBuZWNlc3NhcnkuXG5cdFx0XHQgKi9cblx0XHRcdGZ1bmN0aW9uIHNhdmVSb3cobmV3Q3Vyc29yKVxuXHRcdFx0e1xuXHRcdFx0XHRjdXJzb3IgPSBuZXdDdXJzb3I7XG5cdFx0XHRcdHB1c2hSb3cocm93KTtcblx0XHRcdFx0cm93ID0gW107XG5cdFx0XHRcdG5leHROZXdsaW5lID0gaW5wdXQuaW5kZXhPZihuZXdsaW5lLCBjdXJzb3IpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgcmVzdWx0cywgZXJyb3JzLCBhbmQgbWV0YS4gKi9cblx0XHRcdGZ1bmN0aW9uIHJldHVybmFibGUoc3RvcHBlZClcblx0XHRcdHtcblx0XHRcdFx0aWYgKGNvbmZpZy5oZWFkZXIgJiYgIWJhc2VJbmRleCAmJiBkYXRhLmxlbmd0aCAmJiAhaGVhZGVyUGFyc2VkKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gZGF0YVswXTtcblx0XHRcdFx0XHRjb25zdCBoZWFkZXJDb3VudCA9IE9iamVjdC5jcmVhdGUobnVsbCk7IC8vIFRvIHRyYWNrIHRoZSBjb3VudCBvZiBlYWNoIGJhc2UgaGVhZGVyXG5cdFx0XHRcdFx0Y29uc3QgdXNlZEhlYWRlcnMgPSBuZXcgU2V0KHJlc3VsdCk7IC8vIFRvIHRyYWNrIHVzZWQgaGVhZGVycyBhbmQgYXZvaWQgZHVwbGljYXRlc1xuXHRcdFx0XHRcdGxldCBkdXBsaWNhdGVIZWFkZXJzID0gZmFsc2U7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IHJlc3VsdFtpXTtcblx0XHRcdFx0XHRcdGlmIChpc0Z1bmN0aW9uKGNvbmZpZy50cmFuc2Zvcm1IZWFkZXIpKVxuXHRcdFx0XHRcdFx0XHRoZWFkZXIgPSBjb25maWcudHJhbnNmb3JtSGVhZGVyKGhlYWRlciwgaSk7XG5cblx0XHRcdFx0XHRcdGlmICghaGVhZGVyQ291bnRbaGVhZGVyXSkge1xuXHRcdFx0XHRcdFx0XHRoZWFkZXJDb3VudFtoZWFkZXJdID0gMTtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W2ldID0gaGVhZGVyO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bGV0IG5ld0hlYWRlcjtcblx0XHRcdFx0XHRcdFx0bGV0IHN1ZmZpeENvdW50ID0gaGVhZGVyQ291bnRbaGVhZGVyXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBGaW5kIGEgdW5pcXVlIG5ldyBoZWFkZXJcblx0XHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRcdG5ld0hlYWRlciA9IGAke2hlYWRlcn1fJHtzdWZmaXhDb3VudH1gO1xuXHRcdFx0XHRcdFx0XHRcdHN1ZmZpeENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH0gd2hpbGUgKHVzZWRIZWFkZXJzLmhhcyhuZXdIZWFkZXIpKTtcblxuXHRcdFx0XHRcdFx0XHR1c2VkSGVhZGVycy5hZGQobmV3SGVhZGVyKTsgLy8gTWFyayB0aGlzIG5ldyBIZWFkZXIgYXMgdXNlZFxuXHRcdFx0XHRcdFx0XHRyZXN1bHRbaV0gPSBuZXdIZWFkZXI7XG5cdFx0XHRcdFx0XHRcdGhlYWRlckNvdW50W2hlYWRlcl0rKztcblx0XHRcdFx0XHRcdFx0ZHVwbGljYXRlSGVhZGVycyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGlmIChyZW5hbWVkSGVhZGVycyA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlbmFtZWRIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmVuYW1lZEhlYWRlcnNbbmV3SGVhZGVyXSA9IGhlYWRlcjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dXNlZEhlYWRlcnMuYWRkKGhlYWRlcik7IC8vIEVuc3VyZSB0aGUgb3JpZ2luYWwgaGVhZGVyIGlzIG1hcmtlZCBhcyB1c2VkXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChkdXBsaWNhdGVIZWFkZXJzKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0R1cGxpY2F0ZSBoZWFkZXJzIGZvdW5kIGFuZCByZW5hbWVkLicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRoZWFkZXJQYXJzZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0XHRlcnJvcnM6IGVycm9ycyxcblx0XHRcdFx0XHRtZXRhOiB7XG5cdFx0XHRcdFx0XHRkZWxpbWl0ZXI6IGRlbGltLFxuXHRcdFx0XHRcdFx0bGluZWJyZWFrOiBuZXdsaW5lLFxuXHRcdFx0XHRcdFx0YWJvcnRlZDogYWJvcnRlZCxcblx0XHRcdFx0XHRcdHRydW5jYXRlZDogISFzdG9wcGVkLFxuXHRcdFx0XHRcdFx0Y3Vyc29yOiBsYXN0Q3Vyc29yICsgKGJhc2VJbmRleCB8fCAwKSxcblx0XHRcdFx0XHRcdHJlbmFtZWRIZWFkZXJzOiByZW5hbWVkSGVhZGVyc1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIEV4ZWN1dGVzIHRoZSB1c2VyJ3Mgc3RlcCBmdW5jdGlvbiBhbmQgcmVzZXRzIGRhdGEgJiBlcnJvcnMuICovXG5cdFx0XHRmdW5jdGlvbiBkb1N0ZXAoKVxuXHRcdFx0e1xuXHRcdFx0XHRzdGVwKHJldHVybmFibGUoKSk7XG5cdFx0XHRcdGRhdGEgPSBbXTtcblx0XHRcdFx0ZXJyb3JzID0gW107XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKiBTZXRzIHRoZSBhYm9ydCBmbGFnICovXG5cdFx0dGhpcy5hYm9ydCA9IGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRhYm9ydGVkID0gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0LyoqIEdldHMgdGhlIGN1cnNvciBwb3NpdGlvbiAqL1xuXHRcdHRoaXMuZ2V0Q2hhckluZGV4ID0gZnVuY3Rpb24oKVxuXHRcdHtcblx0XHRcdHJldHVybiBjdXJzb3I7XG5cdFx0fTtcblx0fVxuXG5cblx0ZnVuY3Rpb24gbmV3V29ya2VyKClcblx0e1xuXHRcdGlmICghUGFwYS5XT1JLRVJTX1NVUFBPUlRFRClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHZhciB3b3JrZXJVcmwgPSBnZXRXb3JrZXJCbG9iKCk7XG5cdFx0dmFyIHcgPSBuZXcgZ2xvYmFsLldvcmtlcih3b3JrZXJVcmwpO1xuXHRcdHcub25tZXNzYWdlID0gbWFpblRocmVhZFJlY2VpdmVkTWVzc2FnZTtcblx0XHR3LmlkID0gd29ya2VySWRDb3VudGVyKys7XG5cdFx0d29ya2Vyc1t3LmlkXSA9IHc7XG5cdFx0cmV0dXJuIHc7XG5cdH1cblxuXHQvKiogQ2FsbGJhY2sgd2hlbiBtYWluIHRocmVhZCByZWNlaXZlcyBhIG1lc3NhZ2UgKi9cblx0ZnVuY3Rpb24gbWFpblRocmVhZFJlY2VpdmVkTWVzc2FnZShlKVxuXHR7XG5cdFx0dmFyIG1zZyA9IGUuZGF0YTtcblx0XHR2YXIgd29ya2VyID0gd29ya2Vyc1ttc2cud29ya2VySWRdO1xuXHRcdHZhciBhYm9ydGVkID0gZmFsc2U7XG5cblx0XHRpZiAobXNnLmVycm9yKVxuXHRcdFx0d29ya2VyLnVzZXJFcnJvcihtc2cuZXJyb3IsIG1zZy5maWxlKTtcblx0XHRlbHNlIGlmIChtc2cucmVzdWx0cyAmJiBtc2cucmVzdWx0cy5kYXRhKVxuXHRcdHtcblx0XHRcdHZhciBhYm9ydCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRhYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0Y29tcGxldGVXb3JrZXIobXNnLndvcmtlcklkLCB7IGRhdGE6IFtdLCBlcnJvcnM6IFtdLCBtZXRhOiB7IGFib3J0ZWQ6IHRydWUgfSB9KTtcblx0XHRcdH07XG5cblx0XHRcdHZhciBoYW5kbGUgPSB7XG5cdFx0XHRcdGFib3J0OiBhYm9ydCxcblx0XHRcdFx0cGF1c2U6IG5vdEltcGxlbWVudGVkLFxuXHRcdFx0XHRyZXN1bWU6IG5vdEltcGxlbWVudGVkXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoaXNGdW5jdGlvbih3b3JrZXIudXNlclN0ZXApKVxuXHRcdFx0e1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5yZXN1bHRzLmRhdGEubGVuZ3RoOyBpKyspXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR3b3JrZXIudXNlclN0ZXAoe1xuXHRcdFx0XHRcdFx0ZGF0YTogbXNnLnJlc3VsdHMuZGF0YVtpXSxcblx0XHRcdFx0XHRcdGVycm9yczogbXNnLnJlc3VsdHMuZXJyb3JzLFxuXHRcdFx0XHRcdFx0bWV0YTogbXNnLnJlc3VsdHMubWV0YVxuXHRcdFx0XHRcdH0sIGhhbmRsZSk7XG5cdFx0XHRcdFx0aWYgKGFib3J0ZWQpXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgbXNnLnJlc3VsdHM7XHQvLyBmcmVlIG1lbW9yeSBBU0FQXG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChpc0Z1bmN0aW9uKHdvcmtlci51c2VyQ2h1bmspKVxuXHRcdFx0e1xuXHRcdFx0XHR3b3JrZXIudXNlckNodW5rKG1zZy5yZXN1bHRzLCBoYW5kbGUsIG1zZy5maWxlKTtcblx0XHRcdFx0ZGVsZXRlIG1zZy5yZXN1bHRzO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChtc2cuZmluaXNoZWQgJiYgIWFib3J0ZWQpXG5cdFx0XHRjb21wbGV0ZVdvcmtlcihtc2cud29ya2VySWQsIG1zZy5yZXN1bHRzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXBsZXRlV29ya2VyKHdvcmtlcklkLCByZXN1bHRzKSB7XG5cdFx0dmFyIHdvcmtlciA9IHdvcmtlcnNbd29ya2VySWRdO1xuXHRcdGlmIChpc0Z1bmN0aW9uKHdvcmtlci51c2VyQ29tcGxldGUpKVxuXHRcdFx0d29ya2VyLnVzZXJDb21wbGV0ZShyZXN1bHRzKTtcblx0XHR3b3JrZXIudGVybWluYXRlKCk7XG5cdFx0ZGVsZXRlIHdvcmtlcnNbd29ya2VySWRdO1xuXHR9XG5cblx0ZnVuY3Rpb24gbm90SW1wbGVtZW50ZWQoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQuJyk7XG5cdH1cblxuXHQvKiogQ2FsbGJhY2sgd2hlbiB3b3JrZXIgdGhyZWFkIHJlY2VpdmVzIGEgbWVzc2FnZSAqL1xuXHRmdW5jdGlvbiB3b3JrZXJUaHJlYWRSZWNlaXZlZE1lc3NhZ2UoZSlcblx0e1xuXHRcdHZhciBtc2cgPSBlLmRhdGE7XG5cblx0XHRpZiAodHlwZW9mIFBhcGEuV09SS0VSX0lEID09PSAndW5kZWZpbmVkJyAmJiBtc2cpXG5cdFx0XHRQYXBhLldPUktFUl9JRCA9IG1zZy53b3JrZXJJZDtcblxuXHRcdGlmICh0eXBlb2YgbXNnLmlucHV0ID09PSAnc3RyaW5nJylcblx0XHR7XG5cdFx0XHRnbG9iYWwucG9zdE1lc3NhZ2Uoe1xuXHRcdFx0XHR3b3JrZXJJZDogUGFwYS5XT1JLRVJfSUQsXG5cdFx0XHRcdHJlc3VsdHM6IFBhcGEucGFyc2UobXNnLmlucHV0LCBtc2cuY29uZmlnKSxcblx0XHRcdFx0ZmluaXNoZWQ6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNlIGlmICgoZ2xvYmFsLkZpbGUgJiYgbXNnLmlucHV0IGluc3RhbmNlb2YgRmlsZSkgfHwgbXNnLmlucHV0IGluc3RhbmNlb2YgT2JqZWN0KVx0Ly8gdGhhbmsgeW91LCBTYWZhcmkgKHNlZSBpc3N1ZSAjMTA2KVxuXHRcdHtcblx0XHRcdHZhciByZXN1bHRzID0gUGFwYS5wYXJzZShtc2cuaW5wdXQsIG1zZy5jb25maWcpO1xuXHRcdFx0aWYgKHJlc3VsdHMpXG5cdFx0XHRcdGdsb2JhbC5wb3N0TWVzc2FnZSh7XG5cdFx0XHRcdFx0d29ya2VySWQ6IFBhcGEuV09SS0VSX0lELFxuXHRcdFx0XHRcdHJlc3VsdHM6IHJlc3VsdHMsXG5cdFx0XHRcdFx0ZmluaXNoZWQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIE1ha2VzIGEgZGVlcCBjb3B5IG9mIGFuIGFycmF5IG9yIG9iamVjdCAobW9zdGx5KSAqL1xuXHRmdW5jdGlvbiBjb3B5KG9iailcblx0e1xuXHRcdGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdHZhciBjcHkgPSBBcnJheS5pc0FycmF5KG9iaikgPyBbXSA6IHt9O1xuXHRcdGZvciAodmFyIGtleSBpbiBvYmopXG5cdFx0XHRjcHlba2V5XSA9IGNvcHkob2JqW2tleV0pO1xuXHRcdHJldHVybiBjcHk7XG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kRnVuY3Rpb24oZiwgc2VsZilcblx0e1xuXHRcdHJldHVybiBmdW5jdGlvbigpIHsgZi5hcHBseShzZWxmLCBhcmd1bWVudHMpOyB9O1xuXHR9XG5cdGZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuYylcblx0e1xuXHRcdHJldHVybiB0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJztcblx0fVxuXG5cdHJldHVybiBQYXBhO1xufSkpO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVHJhY2luZ1N1cHByZXNzZWQgPSBleHBvcnRzLnVuc3VwcHJlc3NUcmFjaW5nID0gZXhwb3J0cy5zdXBwcmVzc1RyYWNpbmcgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBTVVBQUkVTU19UUkFDSU5HX0tFWSA9ICgwLCBhcGlfMS5jcmVhdGVDb250ZXh0S2V5KSgnT3BlblRlbGVtZXRyeSBTREsgQ29udGV4dCBLZXkgU1VQUFJFU1NfVFJBQ0lORycpO1xuZnVuY3Rpb24gc3VwcHJlc3NUcmFjaW5nKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTVVBQUkVTU19UUkFDSU5HX0tFWSwgdHJ1ZSk7XG59XG5leHBvcnRzLnN1cHByZXNzVHJhY2luZyA9IHN1cHByZXNzVHJhY2luZztcbmZ1bmN0aW9uIHVuc3VwcHJlc3NUcmFjaW5nKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5kZWxldGVWYWx1ZShTVVBQUkVTU19UUkFDSU5HX0tFWSk7XG59XG5leHBvcnRzLnVuc3VwcHJlc3NUcmFjaW5nID0gdW5zdXBwcmVzc1RyYWNpbmc7XG5mdW5jdGlvbiBpc1RyYWNpbmdTdXBwcmVzc2VkKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZShTVVBQUkVTU19UUkFDSU5HX0tFWSkgPT09IHRydWU7XG59XG5leHBvcnRzLmlzVHJhY2luZ1N1cHByZXNzZWQgPSBpc1RyYWNpbmdTdXBwcmVzc2VkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VwcHJlc3MtdHJhY2luZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQkFHR0FHRV9NQVhfVE9UQUxfTEVOR1RIID0gZXhwb3J0cy5CQUdHQUdFX01BWF9QRVJfTkFNRV9WQUxVRV9QQUlSUyA9IGV4cG9ydHMuQkFHR0FHRV9NQVhfTkFNRV9WQUxVRV9QQUlSUyA9IGV4cG9ydHMuQkFHR0FHRV9IRUFERVIgPSBleHBvcnRzLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SID0gZXhwb3J0cy5CQUdHQUdFX1BST1BFUlRJRVNfU0VQQVJBVE9SID0gZXhwb3J0cy5CQUdHQUdFX0tFWV9QQUlSX1NFUEFSQVRPUiA9IHZvaWQgMDtcbmV4cG9ydHMuQkFHR0FHRV9LRVlfUEFJUl9TRVBBUkFUT1IgPSAnPSc7XG5leHBvcnRzLkJBR0dBR0VfUFJPUEVSVElFU19TRVBBUkFUT1IgPSAnOyc7XG5leHBvcnRzLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SID0gJywnO1xuLy8gTmFtZSBvZiB0aGUgaHR0cCBoZWFkZXIgdXNlZCB0byBwcm9wYWdhdGUgdGhlIGJhZ2dhZ2VcbmV4cG9ydHMuQkFHR0FHRV9IRUFERVIgPSAnYmFnZ2FnZSc7XG4vLyBNYXhpbXVtIG51bWJlciBvZiBuYW1lLXZhbHVlIHBhaXJzIGFsbG93ZWQgYnkgdzNjIHNwZWNcbmV4cG9ydHMuQkFHR0FHRV9NQVhfTkFNRV9WQUxVRV9QQUlSUyA9IDE4MDtcbi8vIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHBlciBhIHNpbmdsZSBuYW1lLXZhbHVlIHBhaXIgYWxsb3dlZCBieSB3M2Mgc3BlY1xuZXhwb3J0cy5CQUdHQUdFX01BWF9QRVJfTkFNRV9WQUxVRV9QQUlSUyA9IDQwOTY7XG4vLyBNYXhpbXVtIHRvdGFsIGxlbmd0aCBvZiBhbGwgbmFtZS12YWx1ZSBwYWlycyBhbGxvd2VkIGJ5IHczYyBzcGVjXG5leHBvcnRzLkJBR0dBR0VfTUFYX1RPVEFMX0xFTkdUSCA9IDgxOTI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQgPSBleHBvcnRzLnBhcnNlUGFpcktleVZhbHVlID0gZXhwb3J0cy5nZXRLZXlQYWlycyA9IGV4cG9ydHMuc2VyaWFsaXplS2V5UGFpcnMgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBzZXJpYWxpemVLZXlQYWlycyhrZXlQYWlycykge1xuICAgIHJldHVybiBrZXlQYWlycy5yZWR1Y2UoKGhWYWx1ZSwgY3VycmVudCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGAke2hWYWx1ZX0ke2hWYWx1ZSAhPT0gJycgPyBjb25zdGFudHNfMS5CQUdHQUdFX0lURU1TX1NFUEFSQVRPUiA6ICcnfSR7Y3VycmVudH1gO1xuICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gY29uc3RhbnRzXzEuQkFHR0FHRV9NQVhfVE9UQUxfTEVOR1RIID8gaFZhbHVlIDogdmFsdWU7XG4gICAgfSwgJycpO1xufVxuZXhwb3J0cy5zZXJpYWxpemVLZXlQYWlycyA9IHNlcmlhbGl6ZUtleVBhaXJzO1xuZnVuY3Rpb24gZ2V0S2V5UGFpcnMoYmFnZ2FnZSkge1xuICAgIHJldHVybiBiYWdnYWdlLmdldEFsbEVudHJpZXMoKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBsZXQgZW50cnkgPSBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUudmFsdWUpfWA7XG4gICAgICAgIC8vIGluY2x1ZGUgb3BhcXVlIG1ldGFkYXRhIGlmIHByb3ZpZGVkXG4gICAgICAgIC8vIE5PVEU6IHdlIGludGVudGlvbmFsbHkgZG9uJ3QgVVJJLWVuY29kZSB0aGUgbWV0YWRhdGEgLSB0aGF0IHJlc3BvbnNpYmlsaXR5IGZhbGxzIG9uIHRoZSBtZXRhZGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBpZiAodmFsdWUubWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW50cnkgKz0gY29uc3RhbnRzXzEuQkFHR0FHRV9QUk9QRVJUSUVTX1NFUEFSQVRPUiArIHZhbHVlLm1ldGFkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH0pO1xufVxuZXhwb3J0cy5nZXRLZXlQYWlycyA9IGdldEtleVBhaXJzO1xuZnVuY3Rpb24gcGFyc2VQYWlyS2V5VmFsdWUoZW50cnkpIHtcbiAgICBjb25zdCB2YWx1ZVByb3BzID0gZW50cnkuc3BsaXQoY29uc3RhbnRzXzEuQkFHR0FHRV9QUk9QRVJUSUVTX1NFUEFSQVRPUik7XG4gICAgaWYgKHZhbHVlUHJvcHMubGVuZ3RoIDw9IDApXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBrZXlQYWlyUGFydCA9IHZhbHVlUHJvcHMuc2hpZnQoKTtcbiAgICBpZiAoIWtleVBhaXJQYXJ0KVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSBrZXlQYWlyUGFydC5pbmRleE9mKGNvbnN0YW50c18xLkJBR0dBR0VfS0VZX1BBSVJfU0VQQVJBVE9SKTtcbiAgICBpZiAoc2VwYXJhdG9ySW5kZXggPD0gMClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlQYWlyUGFydC5zdWJzdHJpbmcoMCwgc2VwYXJhdG9ySW5kZXgpLnRyaW0oKSk7XG4gICAgY29uc3QgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5UGFpclBhcnQuc3Vic3RyaW5nKHNlcGFyYXRvckluZGV4ICsgMSkudHJpbSgpKTtcbiAgICBsZXQgbWV0YWRhdGE7XG4gICAgaWYgKHZhbHVlUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICBtZXRhZGF0YSA9ICgwLCBhcGlfMS5iYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmcpKHZhbHVlUHJvcHMuam9pbihjb25zdGFudHNfMS5CQUdHQUdFX1BST1BFUlRJRVNfU0VQQVJBVE9SKSk7XG4gICAgfVxuICAgIHJldHVybiB7IGtleSwgdmFsdWUsIG1ldGFkYXRhIH07XG59XG5leHBvcnRzLnBhcnNlUGFpcktleVZhbHVlID0gcGFyc2VQYWlyS2V5VmFsdWU7XG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHNlcmlhbGl6ZWQgaW4gdGhlIGJhZ2dhZ2UgSFRUUCBGb3JtYXQgKHdpdGhvdXQgbWV0YWRhdGEpOlxuICogaHR0cHM6Ly9naXRodWIuY29tL3czYy9iYWdnYWdlL2Jsb2IvbWFzdGVyL2JhZ2dhZ2UvSFRUUF9IRUFERVJfRk9STUFULm1kXG4gKi9cbmZ1bmN0aW9uIHBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkKHZhbHVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB2YWx1ZS5zcGxpdChjb25zdGFudHNfMS5CQUdHQUdFX0lURU1TX1NFUEFSQVRPUikuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlQYWlyID0gcGFyc2VQYWlyS2V5VmFsdWUoZW50cnkpO1xuICAgICAgICAgICAgaWYgKGtleVBhaXIgIT09IHVuZGVmaW5lZCAmJiBrZXlQYWlyLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5UGFpci5rZXldID0ga2V5UGFpci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkID0gcGFyc2VLZXlQYWlyc0ludG9SZWNvcmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVzNDQmFnZ2FnZVByb3BhZ2F0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzdXBwcmVzc190cmFjaW5nXzEgPSByZXF1aXJlKFwiLi4vLi4vdHJhY2Uvc3VwcHJlc3MtdHJhY2luZ1wiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG4vKipcbiAqIFByb3BhZ2F0ZXMge0BsaW5rIEJhZ2dhZ2V9IHRocm91Z2ggQ29udGV4dCBmb3JtYXQgcHJvcGFnYXRpb24uXG4gKlxuICogQmFzZWQgb24gdGhlIEJhZ2dhZ2Ugc3BlY2lmaWNhdGlvbjpcbiAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9iYWdnYWdlL1xuICovXG5jbGFzcyBXM0NCYWdnYWdlUHJvcGFnYXRvciB7XG4gICAgaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcikge1xuICAgICAgICBjb25zdCBiYWdnYWdlID0gYXBpXzEucHJvcGFnYXRpb24uZ2V0QmFnZ2FnZShjb250ZXh0KTtcbiAgICAgICAgaWYgKCFiYWdnYWdlIHx8ICgwLCBzdXBwcmVzc190cmFjaW5nXzEuaXNUcmFjaW5nU3VwcHJlc3NlZCkoY29udGV4dCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGtleVBhaXJzID0gKDAsIHV0aWxzXzEuZ2V0S2V5UGFpcnMpKGJhZ2dhZ2UpXG4gICAgICAgICAgICAuZmlsdGVyKChwYWlyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcGFpci5sZW5ndGggPD0gY29uc3RhbnRzXzEuQkFHR0FHRV9NQVhfUEVSX05BTUVfVkFMVUVfUEFJUlM7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuc2xpY2UoMCwgY29uc3RhbnRzXzEuQkFHR0FHRV9NQVhfTkFNRV9WQUxVRV9QQUlSUyk7XG4gICAgICAgIGNvbnN0IGhlYWRlclZhbHVlID0gKDAsIHV0aWxzXzEuc2VyaWFsaXplS2V5UGFpcnMpKGtleVBhaXJzKTtcbiAgICAgICAgaWYgKGhlYWRlclZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgY29uc3RhbnRzXzEuQkFHR0FHRV9IRUFERVIsIGhlYWRlclZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IGdldHRlci5nZXQoY2FycmllciwgY29uc3RhbnRzXzEuQkFHR0FHRV9IRUFERVIpO1xuICAgICAgICBjb25zdCBiYWdnYWdlU3RyaW5nID0gQXJyYXkuaXNBcnJheShoZWFkZXJWYWx1ZSlcbiAgICAgICAgICAgID8gaGVhZGVyVmFsdWUuam9pbihjb25zdGFudHNfMS5CQUdHQUdFX0lURU1TX1NFUEFSQVRPUilcbiAgICAgICAgICAgIDogaGVhZGVyVmFsdWU7XG4gICAgICAgIGlmICghYmFnZ2FnZVN0cmluZylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCBiYWdnYWdlID0ge307XG4gICAgICAgIGlmIChiYWdnYWdlU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFpcnMgPSBiYWdnYWdlU3RyaW5nLnNwbGl0KGNvbnN0YW50c18xLkJBR0dBR0VfSVRFTVNfU0VQQVJBVE9SKTtcbiAgICAgICAgcGFpcnMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlQYWlyID0gKDAsIHV0aWxzXzEucGFyc2VQYWlyS2V5VmFsdWUpKGVudHJ5KTtcbiAgICAgICAgICAgIGlmIChrZXlQYWlyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFnZ2FnZUVudHJ5ID0geyB2YWx1ZToga2V5UGFpci52YWx1ZSB9O1xuICAgICAgICAgICAgICAgIGlmIChrZXlQYWlyLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhZ2dhZ2VFbnRyeS5tZXRhZGF0YSA9IGtleVBhaXIubWV0YWRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJhZ2dhZ2Vba2V5UGFpci5rZXldID0gYmFnZ2FnZUVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE9iamVjdC5lbnRyaWVzKGJhZ2dhZ2UpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaV8xLnByb3BhZ2F0aW9uLnNldEJhZ2dhZ2UoY29udGV4dCwgYXBpXzEucHJvcGFnYXRpb24uY3JlYXRlQmFnZ2FnZShiYWdnYWdlKSk7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtjb25zdGFudHNfMS5CQUdHQUdFX0hFQURFUl07XG4gICAgfVxufVxuZXhwb3J0cy5XM0NCYWdnYWdlUHJvcGFnYXRvciA9IFczQ0JhZ2dhZ2VQcm9wYWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VzNDQmFnZ2FnZVByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFuY2hvcmVkQ2xvY2sgPSB2b2lkIDA7XG4vKipcbiAqIEEgdXRpbGl0eSBmb3IgcmV0dXJuaW5nIHdhbGwgdGltZXMgYW5jaG9yZWQgdG8gYSBnaXZlbiBwb2ludCBpbiB0aW1lLiBXYWxsIHRpbWUgbWVhc3VyZW1lbnRzIHdpbGxcbiAqIG5vdCBiZSB0YWtlbiBmcm9tIHRoZSBzeXN0ZW0sIGJ1dCBpbnN0ZWFkIGFyZSBjb21wdXRlZCBieSBhZGRpbmcgYSBtb25vdG9uaWMgY2xvY2sgdGltZVxuICogdG8gdGhlIGFuY2hvciBwb2ludC5cbiAqXG4gKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzeXN0ZW0gdGltZSBjYW4gY2hhbmdlIGFuZCByZXN1bHQgaW4gdW5leHBlY3RlZCBzaXR1YXRpb25zIGxpa2VcbiAqIHNwYW5zIGVuZGluZyBiZWZvcmUgdGhleSBhcmUgc3RhcnRlZC4gQ3JlYXRpbmcgYW4gYW5jaG9yZWQgY2xvY2sgZm9yIGVhY2ggbG9jYWwgcm9vdCBzcGFuXG4gKiBlbnN1cmVzIHRoYXQgc3BhbiB0aW1pbmdzIGFuZCBkdXJhdGlvbnMgYXJlIGFjY3VyYXRlIHdoaWxlIHByZXZlbnRpbmcgc3BhbiB0aW1lcyBmcm9tIGRyaWZ0aW5nXG4gKiB0b28gZmFyIGZyb20gdGhlIHN5c3RlbSBjbG9jay5cbiAqXG4gKiBPbmx5IGNyZWF0aW5nIGFuIGFuY2hvcmVkIGNsb2NrIG9uY2UgcGVyIGxvY2FsIHRyYWNlIGVuc3VyZXMgc3BhbiB0aW1lcyBhcmUgY29ycmVjdCByZWxhdGl2ZVxuICogdG8gZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGEgY2hpbGQgc3BhbiB3aWxsIG5ldmVyIGhhdmUgYSBzdGFydCB0aW1lIGJlZm9yZSBpdHMgcGFyZW50IGV2ZW5cbiAqIGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMgY29ycmVjdGVkIGR1cmluZyB0aGUgbG9jYWwgdHJhY2UuXG4gKlxuICogSGVhdmlseSBpbnNwaXJlZCBieSB0aGUgT1RlbCBKYXZhIGFuY2hvcmVkIGNsb2NrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qYXZhL2Jsb2IvbWFpbi9zZGsvdHJhY2Uvc3JjL21haW4vamF2YS9pby9vcGVudGVsZW1ldHJ5L3Nkay90cmFjZS9BbmNob3JlZENsb2NrLmphdmFcbiAqL1xuY2xhc3MgQW5jaG9yZWRDbG9jayB7XG4gICAgX21vbm90b25pY0Nsb2NrO1xuICAgIF9lcG9jaE1pbGxpcztcbiAgICBfcGVyZm9ybWFuY2VNaWxsaXM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IEFuY2hvcmVkQ2xvY2sgYW5jaG9yZWQgdG8gdGhlIGN1cnJlbnQgdGltZSByZXR1cm5lZCBieSBzeXN0ZW1DbG9jay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzeXN0ZW1DbG9jayBzaG91bGQgYmUgYSBjbG9jayB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxIDE5NzAgc3VjaCBhcyBEYXRlXG4gICAgICogQHBhcmFtIG1vbm90b25pY0Nsb2NrIHNob3VsZCBiZSBhIGNsb2NrIHRoYXQgY291bnRzIG1pbGxpc2Vjb25kcyBtb25vdG9uaWNhbGx5IHN1Y2ggYXMgd2luZG93LnBlcmZvcm1hbmNlIG9yIHBlcmZfaG9va3MucGVyZm9ybWFuY2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzeXN0ZW1DbG9jaywgbW9ub3RvbmljQ2xvY2spIHtcbiAgICAgICAgdGhpcy5fbW9ub3RvbmljQ2xvY2sgPSBtb25vdG9uaWNDbG9jaztcbiAgICAgICAgdGhpcy5fZXBvY2hNaWxsaXMgPSBzeXN0ZW1DbG9jay5ub3coKTtcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VNaWxsaXMgPSBtb25vdG9uaWNDbG9jay5ub3coKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGJ5IGFkZGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGVcbiAgICAgKiBBbmNob3JlZENsb2NrIHdhcyBjcmVhdGVkIHRvIHRoZSBjcmVhdGlvbiBlcG9jaCB0aW1lXG4gICAgICovXG4gICAgbm93KCkge1xuICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX21vbm90b25pY0Nsb2NrLm5vdygpIC0gdGhpcy5fcGVyZm9ybWFuY2VNaWxsaXM7XG4gICAgICAgIHJldHVybiB0aGlzLl9lcG9jaE1pbGxpcyArIGRlbHRhO1xuICAgIH1cbn1cbmV4cG9ydHMuQW5jaG9yZWRDbG9jayA9IEFuY2hvcmVkQ2xvY2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmNob3JlZC1jbG9jay5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNBdHRyaWJ1dGVWYWx1ZSA9IGV4cG9ydHMuaXNBdHRyaWJ1dGVLZXkgPSBleHBvcnRzLnNhbml0aXplQXR0cmlidXRlcyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmZ1bmN0aW9uIHNhbml0aXplQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgY29uc3Qgb3V0ID0ge307XG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzICE9PSAnb2JqZWN0JyB8fCBhdHRyaWJ1dGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGlmICghaXNBdHRyaWJ1dGVLZXkoa2V5KSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0F0dHJpYnV0ZVZhbHVlKHZhbCkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgSW52YWxpZCBhdHRyaWJ1dGUgdmFsdWUgc2V0IGZvciBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgb3V0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG91dFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5leHBvcnRzLnNhbml0aXplQXR0cmlidXRlcyA9IHNhbml0aXplQXR0cmlidXRlcztcbmZ1bmN0aW9uIGlzQXR0cmlidXRlS2V5KGtleSkge1xuICAgIHJldHVybiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkubGVuZ3RoID4gMDtcbn1cbmV4cG9ydHMuaXNBdHRyaWJ1dGVLZXkgPSBpc0F0dHJpYnV0ZUtleTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlVmFsdWUodmFsKSB7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJldHVybiBpc0hvbW9nZW5lb3VzQXR0cmlidXRlVmFsdWVBcnJheSh2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZFByaW1pdGl2ZUF0dHJpYnV0ZVZhbHVlKHZhbCk7XG59XG5leHBvcnRzLmlzQXR0cmlidXRlVmFsdWUgPSBpc0F0dHJpYnV0ZVZhbHVlO1xuZnVuY3Rpb24gaXNIb21vZ2VuZW91c0F0dHJpYnV0ZVZhbHVlQXJyYXkoYXJyKSB7XG4gICAgbGV0IHR5cGU7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycikge1xuICAgICAgICAvLyBudWxsL3VuZGVmaW5lZCBlbGVtZW50cyBhcmUgYWxsb3dlZFxuICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRQcmltaXRpdmVBdHRyaWJ1dGVWYWx1ZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgZWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVuY291bnRlcmVkIGFuIGludmFsaWQgcHJpbWl0aXZlXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSB0eXBlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNWYWxpZFByaW1pdGl2ZUF0dHJpYnV0ZVZhbHVlKHZhbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbCkge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdHRyaWJ1dGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5sb2dnaW5nRXJyb3JIYW5kbGVyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBsb2dzIGFuIGVycm9yIHVzaW5nIHRoZSBwcm92aWRlZCBsb2dnZXIsIG9yIGFcbiAqIGNvbnNvbGUgbG9nZ2VyIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxuICovXG5mdW5jdGlvbiBsb2dnaW5nRXJyb3JIYW5kbGVyKCkge1xuICAgIHJldHVybiAoZXgpID0+IHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihzdHJpbmdpZnlFeGNlcHRpb24oZXgpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5sb2dnaW5nRXJyb3JIYW5kbGVyID0gbG9nZ2luZ0Vycm9ySGFuZGxlcjtcbi8qKlxuICogQ29udmVydHMgYW4gZXhjZXB0aW9uIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7RXhjZXB0aW9ufSBleFxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlFeGNlcHRpb24oZXgpIHtcbiAgICBpZiAodHlwZW9mIGV4ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZXg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZmxhdHRlbkV4Y2VwdGlvbihleCkpO1xuICAgIH1cbn1cbi8qKlxuICogRmxhdHRlbnMgYW4gZXhjZXB0aW9uIGludG8ga2V5LXZhbHVlIHBhaXJzIGJ5IHRyYXZlcnNpbmcgdGhlIHByb3RvdHlwZSBjaGFpblxuICogYW5kIGNvZXJjaW5nIHZhbHVlcyB0byBzdHJpbmdzLiBEdXBsaWNhdGUgcHJvcGVydGllcyB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbjtcbiAqIHRoZSBmaXJzdCBpbnNlcnQgd2lucy5cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkV4Y2VwdGlvbihleCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGxldCBjdXJyZW50ID0gZXg7XG4gICAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaChwcm9wZXJ0eU5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdFtwcm9wZXJ0eU5hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3VycmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5TmFtZV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ2dpbmctZXJyb3ItaGFuZGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2xvYmFsRXJyb3JIYW5kbGVyID0gZXhwb3J0cy5zZXRHbG9iYWxFcnJvckhhbmRsZXIgPSB2b2lkIDA7XG5jb25zdCBsb2dnaW5nX2Vycm9yX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2xvZ2dpbmctZXJyb3ItaGFuZGxlclwiKTtcbi8qKiBUaGUgZ2xvYmFsIGVycm9yIGhhbmRsZXIgZGVsZWdhdGUgKi9cbmxldCBkZWxlZ2F0ZUhhbmRsZXIgPSAoMCwgbG9nZ2luZ19lcnJvcl9oYW5kbGVyXzEubG9nZ2luZ0Vycm9ySGFuZGxlcikoKTtcbi8qKlxuICogU2V0IHRoZSBnbG9iYWwgZXJyb3IgaGFuZGxlclxuICogQHBhcmFtIHtFcnJvckhhbmRsZXJ9IGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gc2V0R2xvYmFsRXJyb3JIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICBkZWxlZ2F0ZUhhbmRsZXIgPSBoYW5kbGVyO1xufVxuZXhwb3J0cy5zZXRHbG9iYWxFcnJvckhhbmRsZXIgPSBzZXRHbG9iYWxFcnJvckhhbmRsZXI7XG4vKipcbiAqIFJldHVybiB0aGUgZ2xvYmFsIGVycm9yIGhhbmRsZXJcbiAqIEBwYXJhbSB7RXhjZXB0aW9ufSBleFxuICovXG5mdW5jdGlvbiBnbG9iYWxFcnJvckhhbmRsZXIoZXgpIHtcbiAgICB0cnkge1xuICAgICAgICBkZWxlZ2F0ZUhhbmRsZXIoZXgpO1xuICAgIH1cbiAgICBjYXRjaCB7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuZXhwb3J0cy5nbG9iYWxFcnJvckhhbmRsZXIgPSBnbG9iYWxFcnJvckhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWwtZXJyb3ItaGFuZGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U3RyaW5nTGlzdEZyb21FbnYgPSBleHBvcnRzLmdldEJvb2xlYW5Gcm9tRW52ID0gZXhwb3J0cy5nZXRTdHJpbmdGcm9tRW52ID0gZXhwb3J0cy5nZXROdW1iZXJGcm9tRW52ID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcInV0aWxcIik7XG4vKipcbiAqIFJldHJpZXZlcyBhIG51bWJlciBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogLSBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBlbXB0eSwgdW5zZXQsIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZSwgb3IgaXMgbm90IGEgbnVtYmVyLlxuICogLSBSZXR1cm5zIGEgbnVtYmVyIGluIGFsbCBvdGhlciBjYXNlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHJldHJpZXZlLlxuICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH0gLSBUaGUgbnVtYmVyIHZhbHVlIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROdW1iZXJGcm9tRW52KGtleSkge1xuICAgIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2tleV07XG4gICAgaWYgKHJhdyA9PSBudWxsIHx8IHJhdy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHJhdyk7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVua25vd24gdmFsdWUgJHsoMCwgdXRpbF8xLmluc3BlY3QpKHJhdyl9IGZvciAke2tleX0sIGV4cGVjdGVkIGEgbnVtYmVyLCB1c2luZyBkZWZhdWx0c2ApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnRzLmdldE51bWJlckZyb21FbnYgPSBnZXROdW1iZXJGcm9tRW52O1xuLyoqXG4gKiBSZXRyaWV2ZXMgYSBzdHJpbmcgZnJvbSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIC0gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZW1wdHksIHVuc2V0LCBvciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIHN0cmluZyB2YWx1ZSBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbUVudihrZXkpIHtcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltrZXldO1xuICAgIGlmIChyYXcgPT0gbnVsbCB8fCByYXcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gcmF3O1xufVxuZXhwb3J0cy5nZXRTdHJpbmdGcm9tRW52ID0gZ2V0U3RyaW5nRnJvbUVudjtcbi8qKlxuICogUmV0cmlldmVzIGEgYm9vbGVhbiB2YWx1ZSBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogLSBUcmltcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBpZ25vcmVzIGNhc2luZy5cbiAqIC0gUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBlbXB0eSwgdW5zZXQsIG9yIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZS5cbiAqIC0gUmV0dXJucyBgZmFsc2VgIGZvciBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIG1hcHBlZCB0byBhIGJvb2xlYW4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFRoZSBib29sZWFuIHZhbHVlIG9yIGBmYWxzZWAgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuc2V0IGVtcHR5LCB1bnNldCwgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLlxuICovXG5mdW5jdGlvbiBnZXRCb29sZWFuRnJvbUVudihrZXkpIHtcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltrZXldPy50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAocmF3ID09IG51bGwgfHwgcmF3ID09PSAnJykge1xuICAgICAgICAvLyBOT1RFOiBmYWxsaW5nIGJhY2sgdG8gYGZhbHNlYCBpbnN0ZWFkIG9mIGB1bmRlZmluZWRgIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAvLyBJZiB5b3UgaGF2ZSBhIHVzZS1jYXNlIHRoYXQgcmVxdWlyZXMgYHVuZGVmaW5lZGAsIGNvbnNpZGVyIHVzaW5nIGBnZXRTdHJpbmdGcm9tRW52KClgIGFuZCBhcHBseWluZyB0aGUgbmVjZXNzYXJ5XG4gICAgICAgIC8vIG5vcm1hbGl6YXRpb25zIGluIHRoZSBjb25zdW1pbmcgY29kZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocmF3ID09PSAndHJ1ZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhdyA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVua25vd24gdmFsdWUgJHsoMCwgdXRpbF8xLmluc3BlY3QpKHJhdyl9IGZvciAke2tleX0sIGV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLCBmYWxsaW5nIGJhY2sgdG8gJ2ZhbHNlJyAoZGVmYXVsdClgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0Qm9vbGVhbkZyb21FbnYgPSBnZXRCb29sZWFuRnJvbUVudjtcbi8qKlxuICogUmV0cmlldmVzIGEgbGlzdCBvZiBzdHJpbmdzIGZyb20gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiAtIFVzZXMgJywnIGFzIHRoZSBkZWxpbWl0ZXIuXG4gKiAtIFRyaW1zIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBlYWNoIGVudHJ5LlxuICogLSBFeGNsdWRlcyBlbXB0eSBlbnRyaWVzLlxuICogLSBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBlbXB0eSBvciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuXG4gKiAtIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgaWYgYWxsIGVudHJpZXMgYXJlIGVtcHR5IG9yIHdoaXRlc3BhY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gLSBUaGUgbGlzdCBvZiBzdHJpbmdzIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXRTdHJpbmdMaXN0RnJvbUVudihrZXkpIHtcbiAgICByZXR1cm4gZ2V0U3RyaW5nRnJvbUVudihrZXkpXG4gICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAubWFwKHYgPT4gdi50cmltKCkpXG4gICAgICAgIC5maWx0ZXIocyA9PiBzICE9PSAnJyk7XG59XG5leHBvcnRzLmdldFN0cmluZ0xpc3RGcm9tRW52ID0gZ2V0U3RyaW5nTGlzdEZyb21FbnY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnZpcm9ubWVudC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2dsb2JhbFRoaXMgPSB2b2lkIDA7XG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGluc1xuZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JyA/IGdsb2JhbFRoaXMgOiBnbG9iYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWxUaGlzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vdHBlcmZvcm1hbmNlID0gdm9pZCAwO1xuY29uc3QgcGVyZl9ob29rc18xID0gcmVxdWlyZShcInBlcmZfaG9va3NcIik7XG5leHBvcnRzLm90cGVyZm9ybWFuY2UgPSBwZXJmX2hvb2tzXzEucGVyZm9ybWFuY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5WRVJTSU9OID0gJzIuMC4xJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUUgPSB2b2lkIDA7XG4vKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgY29weSBvZiB1bnN0YWJsZSBzZW1hbnRpYyBjb252ZW50aW9uIGRlZmluaXRpb25zXG4gKiB1c2VkIGJ5IHRoaXMgcGFja2FnZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvdHJlZS9tYWluL3NlbWFudGljLWNvbnZlbnRpb25zI3Vuc3RhYmxlLXNlbWNvbnZcbiAqL1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcnVudGltZSBvZiB0aGlzIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgT3BlbkpESyBSdW50aW1lIEVudmlyb25tZW50XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUUgPSAncHJvY2Vzcy5ydW50aW1lLm5hbWUnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VtY29udi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU0RLX0lORk8gPSB2b2lkIDA7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi4vLi4vdmVyc2lvblwiKTtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vc2VtY29udlwiKTtcbi8qKiBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgU0RLIGluIHVzZSAqL1xuZXhwb3J0cy5TREtfSU5GTyA9IHtcbiAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfTkFNRV06ICdvcGVudGVsZW1ldHJ5JyxcbiAgICBbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19SVU5USU1FX05BTUVdOiAnbm9kZScsXG4gICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX0xBTkdVQUdFXTogc2VtYW50aWNfY29udmVudGlvbnNfMS5URUxFTUVUUllfU0RLX0xBTkdVQUdFX1ZBTFVFX05PREVKUyxcbiAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfVkVSU0lPTl06IHZlcnNpb25fMS5WRVJTSU9OLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNkay1pbmZvLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVucmVmVGltZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZnVuY3Rpb24gdW5yZWZUaW1lcih0aW1lcikge1xuICAgIHRpbWVyLnVucmVmKCk7XG59XG5leHBvcnRzLnVucmVmVGltZXIgPSB1bnJlZlRpbWVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXItdXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudW5yZWZUaW1lciA9IGV4cG9ydHMuU0RLX0lORk8gPSBleHBvcnRzLm90cGVyZm9ybWFuY2UgPSBleHBvcnRzLl9nbG9iYWxUaGlzID0gZXhwb3J0cy5nZXRTdHJpbmdMaXN0RnJvbUVudiA9IGV4cG9ydHMuZ2V0TnVtYmVyRnJvbUVudiA9IGV4cG9ydHMuZ2V0Qm9vbGVhbkZyb21FbnYgPSBleHBvcnRzLmdldFN0cmluZ0Zyb21FbnYgPSB2b2lkIDA7XG52YXIgZW52aXJvbm1lbnRfMSA9IHJlcXVpcmUoXCIuL2Vudmlyb25tZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW52aXJvbm1lbnRfMS5nZXRTdHJpbmdGcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Qm9vbGVhbkZyb21FbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudmlyb25tZW50XzEuZ2V0Qm9vbGVhbkZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnZpcm9ubWVudF8xLmdldE51bWJlckZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTdHJpbmdMaXN0RnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW52aXJvbm1lbnRfMS5nZXRTdHJpbmdMaXN0RnJvbUVudjsgfSB9KTtcbnZhciBnbG9iYWxUaGlzXzEgPSByZXF1aXJlKFwiLi9nbG9iYWxUaGlzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX2dsb2JhbFRoaXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JhbFRoaXNfMS5fZ2xvYmFsVGhpczsgfSB9KTtcbnZhciBwZXJmb3JtYW5jZV8xID0gcmVxdWlyZShcIi4vcGVyZm9ybWFuY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvdHBlcmZvcm1hbmNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZV8xLm90cGVyZm9ybWFuY2U7IH0gfSk7XG52YXIgc2RrX2luZm9fMSA9IHJlcXVpcmUoXCIuL3Nkay1pbmZvXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU0RLX0lORk9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka19pbmZvXzEuU0RLX0lORk87IH0gfSk7XG52YXIgdGltZXJfdXRpbF8xID0gcmVxdWlyZShcIi4vdGltZXItdXRpbFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVucmVmVGltZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVyX3V0aWxfMS51bnJlZlRpbWVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U3RyaW5nTGlzdEZyb21FbnYgPSBleHBvcnRzLmdldE51bWJlckZyb21FbnYgPSBleHBvcnRzLmdldFN0cmluZ0Zyb21FbnYgPSBleHBvcnRzLmdldEJvb2xlYW5Gcm9tRW52ID0gZXhwb3J0cy51bnJlZlRpbWVyID0gZXhwb3J0cy5vdHBlcmZvcm1hbmNlID0gZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IGV4cG9ydHMuU0RLX0lORk8gPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTREtfSU5GT1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLlNES19JTkZPOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX2dsb2JhbFRoaXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5fZ2xvYmFsVGhpczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm90cGVyZm9ybWFuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5vdHBlcmZvcm1hbmNlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5yZWZUaW1lclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLnVucmVmVGltZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRCb29sZWFuRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmdldEJvb2xlYW5Gcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmdldFN0cmluZ0Zyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZ2V0TnVtYmVyRnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFN0cmluZ0xpc3RGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnY7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYWRkSHJUaW1lcyA9IGV4cG9ydHMuaXNUaW1lSW5wdXQgPSBleHBvcnRzLmlzVGltZUlucHV0SHJUaW1lID0gZXhwb3J0cy5oclRpbWVUb01pY3Jvc2Vjb25kcyA9IGV4cG9ydHMuaHJUaW1lVG9NaWxsaXNlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvTmFub3NlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvVGltZVN0YW1wID0gZXhwb3J0cy5oclRpbWVEdXJhdGlvbiA9IGV4cG9ydHMudGltZUlucHV0VG9IclRpbWUgPSBleHBvcnRzLmhyVGltZSA9IGV4cG9ydHMuZ2V0VGltZU9yaWdpbiA9IGV4cG9ydHMubWlsbGlzVG9IclRpbWUgPSB2b2lkIDA7XG5jb25zdCBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4uL3BsYXRmb3JtXCIpO1xuY29uc3QgTkFOT1NFQ09ORF9ESUdJVFMgPSA5O1xuY29uc3QgTkFOT1NFQ09ORF9ESUdJVFNfSU5fTUlMTElTID0gNjtcbmNvbnN0IE1JTExJU0VDT05EU19UT19OQU5PU0VDT05EUyA9IE1hdGgucG93KDEwLCBOQU5PU0VDT05EX0RJR0lUU19JTl9NSUxMSVMpO1xuY29uc3QgU0VDT05EX1RPX05BTk9TRUNPTkRTID0gTWF0aC5wb3coMTAsIE5BTk9TRUNPTkRfRElHSVRTKTtcbi8qKlxuICogQ29udmVydHMgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gZXBvY2ggdG8gSHJUaW1lKFtzZWNvbmRzLCByZW1haW5kZXIgaW4gbmFub3NlY29uZHNdKS5cbiAqIEBwYXJhbSBlcG9jaE1pbGxpc1xuICovXG5mdW5jdGlvbiBtaWxsaXNUb0hyVGltZShlcG9jaE1pbGxpcykge1xuICAgIGNvbnN0IGVwb2NoU2Vjb25kcyA9IGVwb2NoTWlsbGlzIC8gMTAwMDtcbiAgICAvLyBEZWNpbWFscyBvbmx5LlxuICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLnRydW5jKGVwb2NoU2Vjb25kcyk7XG4gICAgLy8gUm91bmQgc3ViLW5hbm9zZWNvbmQgYWNjdXJhY3kgdG8gbmFub3NlY29uZC5cbiAgICBjb25zdCBuYW5vcyA9IE1hdGgucm91bmQoKGVwb2NoTWlsbGlzICUgMTAwMCkgKiBNSUxMSVNFQ09ORFNfVE9fTkFOT1NFQ09ORFMpO1xuICAgIHJldHVybiBbc2Vjb25kcywgbmFub3NdO1xufVxuZXhwb3J0cy5taWxsaXNUb0hyVGltZSA9IG1pbGxpc1RvSHJUaW1lO1xuZnVuY3Rpb24gZ2V0VGltZU9yaWdpbigpIHtcbiAgICBsZXQgdGltZU9yaWdpbiA9IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZS50aW1lT3JpZ2luO1xuICAgIGlmICh0eXBlb2YgdGltZU9yaWdpbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgcGVyZiA9IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZTtcbiAgICAgICAgdGltZU9yaWdpbiA9IHBlcmYudGltaW5nICYmIHBlcmYudGltaW5nLmZldGNoU3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB0aW1lT3JpZ2luO1xufVxuZXhwb3J0cy5nZXRUaW1lT3JpZ2luID0gZ2V0VGltZU9yaWdpbjtcbi8qKlxuICogUmV0dXJucyBhbiBocnRpbWUgY2FsY3VsYXRlZCB2aWEgcGVyZm9ybWFuY2UgY29tcG9uZW50LlxuICogQHBhcmFtIHBlcmZvcm1hbmNlTm93XG4gKi9cbmZ1bmN0aW9uIGhyVGltZShwZXJmb3JtYW5jZU5vdykge1xuICAgIGNvbnN0IHRpbWVPcmlnaW4gPSBtaWxsaXNUb0hyVGltZShnZXRUaW1lT3JpZ2luKCkpO1xuICAgIGNvbnN0IG5vdyA9IG1pbGxpc1RvSHJUaW1lKHR5cGVvZiBwZXJmb3JtYW5jZU5vdyA9PT0gJ251bWJlcicgPyBwZXJmb3JtYW5jZU5vdyA6IHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgcmV0dXJuIGFkZEhyVGltZXModGltZU9yaWdpbiwgbm93KTtcbn1cbmV4cG9ydHMuaHJUaW1lID0gaHJUaW1lO1xuLyoqXG4gKlxuICogQ29udmVydHMgYSBUaW1lSW5wdXQgdG8gYW4gSHJUaW1lLCBkZWZhdWx0cyB0byBfaHJ0aW1lKCkuXG4gKiBAcGFyYW0gdGltZVxuICovXG5mdW5jdGlvbiB0aW1lSW5wdXRUb0hyVGltZSh0aW1lKSB7XG4gICAgLy8gcHJvY2Vzcy5ocnRpbWVcbiAgICBpZiAoaXNUaW1lSW5wdXRIclRpbWUodGltZSkpIHtcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB0aW1lID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBNdXN0IGJlIGEgcGVyZm9ybWFuY2Uubm93KCkgaWYgaXQncyBzbWFsbGVyIHRoYW4gcHJvY2VzcyBzdGFydCB0aW1lLlxuICAgICAgICBpZiAodGltZSA8IGdldFRpbWVPcmlnaW4oKSkge1xuICAgICAgICAgICAgcmV0dXJuIGhyVGltZSh0aW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVwb2NoIG1pbGxpc2Vjb25kcyBvciBwZXJmb3JtYW5jZS50aW1lT3JpZ2luXG4gICAgICAgICAgICByZXR1cm4gbWlsbGlzVG9IclRpbWUodGltZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIG1pbGxpc1RvSHJUaW1lKHRpbWUuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBpbnB1dCB0eXBlJyk7XG4gICAgfVxufVxuZXhwb3J0cy50aW1lSW5wdXRUb0hyVGltZSA9IHRpbWVJbnB1dFRvSHJUaW1lO1xuLyoqXG4gKiBSZXR1cm5zIGEgZHVyYXRpb24gb2YgdHdvIGhyVGltZS5cbiAqIEBwYXJhbSBzdGFydFRpbWVcbiAqIEBwYXJhbSBlbmRUaW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZUR1cmF0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIGxldCBzZWNvbmRzID0gZW5kVGltZVswXSAtIHN0YXJ0VGltZVswXTtcbiAgICBsZXQgbmFub3MgPSBlbmRUaW1lWzFdIC0gc3RhcnRUaW1lWzFdO1xuICAgIC8vIG92ZXJmbG93XG4gICAgaWYgKG5hbm9zIDwgMCkge1xuICAgICAgICBzZWNvbmRzIC09IDE7XG4gICAgICAgIC8vIG5lZ2F0ZVxuICAgICAgICBuYW5vcyArPSBTRUNPTkRfVE9fTkFOT1NFQ09ORFM7XG4gICAgfVxuICAgIHJldHVybiBbc2Vjb25kcywgbmFub3NdO1xufVxuZXhwb3J0cy5oclRpbWVEdXJhdGlvbiA9IGhyVGltZUR1cmF0aW9uO1xuLyoqXG4gKiBDb252ZXJ0IGhyVGltZSB0byB0aW1lc3RhbXAsIGZvciBleGFtcGxlIFwiMjAxOS0wNS0xNFQxNzowMDowMC4wMDAxMjM0NTZaXCJcbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvVGltZVN0YW1wKHRpbWUpIHtcbiAgICBjb25zdCBwcmVjaXNpb24gPSBOQU5PU0VDT05EX0RJR0lUUztcbiAgICBjb25zdCB0bXAgPSBgJHsnMCcucmVwZWF0KHByZWNpc2lvbil9JHt0aW1lWzFdfVpgO1xuICAgIGNvbnN0IG5hbm9TdHJpbmcgPSB0bXAuc3Vic3RyaW5nKHRtcC5sZW5ndGggLSBwcmVjaXNpb24gLSAxKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZVswXSAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gICAgcmV0dXJuIGRhdGUucmVwbGFjZSgnMDAwWicsIG5hbm9TdHJpbmcpO1xufVxuZXhwb3J0cy5oclRpbWVUb1RpbWVTdGFtcCA9IGhyVGltZVRvVGltZVN0YW1wO1xuLyoqXG4gKiBDb252ZXJ0IGhyVGltZSB0byBuYW5vc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvTmFub3NlY29uZHModGltZSkge1xuICAgIHJldHVybiB0aW1lWzBdICogU0VDT05EX1RPX05BTk9TRUNPTkRTICsgdGltZVsxXTtcbn1cbmV4cG9ydHMuaHJUaW1lVG9OYW5vc2Vjb25kcyA9IGhyVGltZVRvTmFub3NlY29uZHM7XG4vKipcbiAqIENvbnZlcnQgaHJUaW1lIHRvIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvTWlsbGlzZWNvbmRzKHRpbWUpIHtcbiAgICByZXR1cm4gdGltZVswXSAqIDFlMyArIHRpbWVbMV0gLyAxZTY7XG59XG5leHBvcnRzLmhyVGltZVRvTWlsbGlzZWNvbmRzID0gaHJUaW1lVG9NaWxsaXNlY29uZHM7XG4vKipcbiAqIENvbnZlcnQgaHJUaW1lIHRvIG1pY3Jvc2Vjb25kcy5cbiAqIEBwYXJhbSB0aW1lXG4gKi9cbmZ1bmN0aW9uIGhyVGltZVRvTWljcm9zZWNvbmRzKHRpbWUpIHtcbiAgICByZXR1cm4gdGltZVswXSAqIDFlNiArIHRpbWVbMV0gLyAxZTM7XG59XG5leHBvcnRzLmhyVGltZVRvTWljcm9zZWNvbmRzID0gaHJUaW1lVG9NaWNyb3NlY29uZHM7XG4vKipcbiAqIGNoZWNrIGlmIHRpbWUgaXMgSHJUaW1lXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNUaW1lSW5wdXRIclRpbWUodmFsdWUpIHtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICB0eXBlb2YgdmFsdWVbMF0gPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZVsxXSA9PT0gJ251bWJlcicpO1xufVxuZXhwb3J0cy5pc1RpbWVJbnB1dEhyVGltZSA9IGlzVGltZUlucHV0SHJUaW1lO1xuLyoqXG4gKiBjaGVjayBpZiBpbnB1dCB2YWx1ZSBpcyBhIGNvcnJlY3QgdHlwZXMuVGltZUlucHV0XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNUaW1lSW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gKGlzVGltZUlucHV0SHJUaW1lKHZhbHVlKSB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSk7XG59XG5leHBvcnRzLmlzVGltZUlucHV0ID0gaXNUaW1lSW5wdXQ7XG4vKipcbiAqIEdpdmVuIDIgSHJUaW1lIGZvcm1hdHRlZCB0aW1lcywgcmV0dXJuIHRoZWlyIHN1bSBhcyBhbiBIclRpbWUuXG4gKi9cbmZ1bmN0aW9uIGFkZEhyVGltZXModGltZTEsIHRpbWUyKSB7XG4gICAgY29uc3Qgb3V0ID0gW3RpbWUxWzBdICsgdGltZTJbMF0sIHRpbWUxWzFdICsgdGltZTJbMV1dO1xuICAgIC8vIE5hbm9zZWNvbmRzXG4gICAgaWYgKG91dFsxXSA+PSBTRUNPTkRfVE9fTkFOT1NFQ09ORFMpIHtcbiAgICAgICAgb3V0WzFdIC09IFNFQ09ORF9UT19OQU5PU0VDT05EUztcbiAgICAgICAgb3V0WzBdICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5leHBvcnRzLmFkZEhyVGltZXMgPSBhZGRIclRpbWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXhwb3J0UmVzdWx0Q29kZSA9IHZvaWQgMDtcbnZhciBFeHBvcnRSZXN1bHRDb2RlO1xuKGZ1bmN0aW9uIChFeHBvcnRSZXN1bHRDb2RlKSB7XG4gICAgRXhwb3J0UmVzdWx0Q29kZVtFeHBvcnRSZXN1bHRDb2RlW1wiU1VDQ0VTU1wiXSA9IDBdID0gXCJTVUNDRVNTXCI7XG4gICAgRXhwb3J0UmVzdWx0Q29kZVtFeHBvcnRSZXN1bHRDb2RlW1wiRkFJTEVEXCJdID0gMV0gPSBcIkZBSUxFRFwiO1xufSkoRXhwb3J0UmVzdWx0Q29kZSA9IGV4cG9ydHMuRXhwb3J0UmVzdWx0Q29kZSB8fCAoZXhwb3J0cy5FeHBvcnRSZXN1bHRDb2RlID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9ydFJlc3VsdC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tcG9zaXRlUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbi8qKiBDb21iaW5lcyBtdWx0aXBsZSBwcm9wYWdhdG9ycyBpbnRvIGEgc2luZ2xlIHByb3BhZ2F0b3IuICovXG5jbGFzcyBDb21wb3NpdGVQcm9wYWdhdG9yIHtcbiAgICBfcHJvcGFnYXRvcnM7XG4gICAgX2ZpZWxkcztcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBjb21wb3NpdGUgcHJvcGFnYXRvciBmcm9tIGEgbGlzdCBvZiBwcm9wYWdhdG9ycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBbY29uZmlnXSBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgY29tcG9zaXRlIHByb3BhZ2F0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdG9ycyA9IGNvbmZpZy5wcm9wYWdhdG9ycyA/PyBbXTtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMuX3Byb3BhZ2F0b3JzXG4gICAgICAgICAgICAvLyBvbGRlciBwcm9wYWdhdG9ycyBtYXkgbm90IGhhdmUgZmllbGRzIGZ1bmN0aW9uLCBudWxsIGNoZWNrIHRvIGJlIHN1cmVcbiAgICAgICAgICAgIC5tYXAocCA9PiAodHlwZW9mIHAuZmllbGRzID09PSAnZnVuY3Rpb24nID8gcC5maWVsZHMoKSA6IFtdKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHgsIHkpID0+IHguY29uY2F0KHkpLCBbXSkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGVhY2ggb2YgdGhlIGNvbmZpZ3VyZWQgcHJvcGFnYXRvcnMgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgY2Fycmllci5cbiAgICAgKiBQcm9wYWdhdG9ycyBhcmUgcnVuIGluIHRoZSBvcmRlciB0aGV5IGFyZSBjb25maWd1cmVkLCBzbyBpZiBtdWx0aXBsZVxuICAgICAqIHByb3BhZ2F0b3JzIHdyaXRlIHRoZSBzYW1lIGNhcnJpZXIga2V5LCB0aGUgcHJvcGFnYXRvciBsYXRlciBpbiB0aGUgbGlzdFxuICAgICAqIHdpbGwgXCJ3aW5cIi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gaW5qZWN0XG4gICAgICogQHBhcmFtIGNhcnJpZXIgQ2FycmllciBpbnRvIHdoaWNoIGNvbnRleHQgd2lsbCBiZSBpbmplY3RlZFxuICAgICAqL1xuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wYWdhdG9yIG9mIHRoaXMuX3Byb3BhZ2F0b3JzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHByb3BhZ2F0b3IuaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBGYWlsZWQgdG8gaW5qZWN0IHdpdGggJHtwcm9wYWdhdG9yLmNvbnN0cnVjdG9yLm5hbWV9LiBFcnI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUnVuIGVhY2ggb2YgdGhlIGNvbmZpZ3VyZWQgcHJvcGFnYXRvcnMgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgY2Fycmllci5cbiAgICAgKiBQcm9wYWdhdG9ycyBhcmUgcnVuIGluIHRoZSBvcmRlciB0aGV5IGFyZSBjb25maWd1cmVkLCBzbyBpZiBtdWx0aXBsZVxuICAgICAqIHByb3BhZ2F0b3JzIHdyaXRlIHRoZSBzYW1lIGNvbnRleHQga2V5LCB0aGUgcHJvcGFnYXRvciBsYXRlciBpbiB0aGUgbGlzdFxuICAgICAqIHdpbGwgXCJ3aW5cIi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYWRkIHZhbHVlcyB0b1xuICAgICAqIEBwYXJhbSBjYXJyaWVyIENhcnJpZXIgZnJvbSB3aGljaCB0byBleHRyYWN0IGNvbnRleHRcbiAgICAgKi9cbiAgICBleHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGFnYXRvcnMucmVkdWNlKChjdHgsIHByb3BhZ2F0b3IpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0b3IuZXh0cmFjdChjdHgsIGNhcnJpZXIsIGdldHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBGYWlsZWQgdG8gZXh0cmFjdCB3aXRoICR7cHJvcGFnYXRvci5jb25zdHJ1Y3Rvci5uYW1lfS4gRXJyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eDtcbiAgICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgLy8gcmV0dXJuIGEgbmV3IGFycmF5IHNvIG91ciBmaWVsZHMgY2Fubm90IGJlIG1vZGlmaWVkXG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMuc2xpY2UoKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbXBvc2l0ZVByb3BhZ2F0b3IgPSBDb21wb3NpdGVQcm9wYWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcG9zaXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVZhbHVlID0gZXhwb3J0cy52YWxpZGF0ZUtleSA9IHZvaWQgMDtcbmNvbnN0IFZBTElEX0tFWV9DSEFSX1JBTkdFID0gJ1tfMC05YS16LSovXSc7XG5jb25zdCBWQUxJRF9LRVkgPSBgW2Etel0ke1ZBTElEX0tFWV9DSEFSX1JBTkdFfXswLDI1NX1gO1xuY29uc3QgVkFMSURfVkVORE9SX0tFWSA9IGBbYS16MC05XSR7VkFMSURfS0VZX0NIQVJfUkFOR0V9ezAsMjQwfUBbYS16XSR7VkFMSURfS0VZX0NIQVJfUkFOR0V9ezAsMTN9YDtcbmNvbnN0IFZBTElEX0tFWV9SRUdFWCA9IG5ldyBSZWdFeHAoYF4oPzoke1ZBTElEX0tFWX18JHtWQUxJRF9WRU5ET1JfS0VZfSkkYCk7XG5jb25zdCBWQUxJRF9WQUxVRV9CQVNFX1JFR0VYID0gL15bIC1+XXswLDI1NX1bIS1+XSQvO1xuY29uc3QgSU5WQUxJRF9WQUxVRV9DT01NQV9FUVVBTF9SRUdFWCA9IC8sfD0vO1xuLyoqXG4gKiBLZXkgaXMgb3BhcXVlIHN0cmluZyB1cCB0byAyNTYgY2hhcmFjdGVycyBwcmludGFibGUuIEl0IE1VU1QgYmVnaW4gd2l0aCBhXG4gKiBsb3dlcmNhc2UgbGV0dGVyLCBhbmQgY2FuIG9ubHkgY29udGFpbiBsb3dlcmNhc2UgbGV0dGVycyBhLXosIGRpZ2l0cyAwLTksXG4gKiB1bmRlcnNjb3JlcyBfLCBkYXNoZXMgLSwgYXN0ZXJpc2tzICosIGFuZCBmb3J3YXJkIHNsYXNoZXMgLy5cbiAqIEZvciBtdWx0aS10ZW5hbnQgdmVuZG9yIHNjZW5hcmlvcywgYW4gYXQgc2lnbiAoQCkgY2FuIGJlIHVzZWQgdG8gcHJlZml4IHRoZVxuICogdmVuZG9yIG5hbWUuIFZlbmRvcnMgU0hPVUxEIHNldCB0aGUgdGVuYW50IElEIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGtleS5cbiAqIHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvdHJhY2UtY29udGV4dC8ja2V5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlS2V5KGtleSkge1xuICAgIHJldHVybiBWQUxJRF9LRVlfUkVHRVgudGVzdChrZXkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUtleSA9IHZhbGlkYXRlS2V5O1xuLyoqXG4gKiBWYWx1ZSBpcyBvcGFxdWUgc3RyaW5nIHVwIHRvIDI1NiBjaGFyYWN0ZXJzIHByaW50YWJsZSBBU0NJSSBSRkMwMDIwXG4gKiBjaGFyYWN0ZXJzIChpLmUuLCB0aGUgcmFuZ2UgMHgyMCB0byAweDdFKSBleGNlcHQgY29tbWEgLCBhbmQgPS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiAoVkFMSURfVkFMVUVfQkFTRV9SRUdFWC50ZXN0KHZhbHVlKSAmJlxuICAgICAgICAhSU5WQUxJRF9WQUxVRV9DT01NQV9FUVVBTF9SRUdFWC50ZXN0KHZhbHVlKSk7XG59XG5leHBvcnRzLnZhbGlkYXRlVmFsdWUgPSB2YWxpZGF0ZVZhbHVlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdG9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHZhbGlkYXRvcnNfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbC92YWxpZGF0b3JzXCIpO1xuY29uc3QgTUFYX1RSQUNFX1NUQVRFX0lURU1TID0gMzI7XG5jb25zdCBNQVhfVFJBQ0VfU1RBVEVfTEVOID0gNTEyO1xuY29uc3QgTElTVF9NRU1CRVJTX1NFUEFSQVRPUiA9ICcsJztcbmNvbnN0IExJU1RfTUVNQkVSX0tFWV9WQUxVRV9TUExJVFRFUiA9ICc9Jztcbi8qKlxuICogVHJhY2VTdGF0ZSBtdXN0IGJlIGEgY2xhc3MgYW5kIG5vdCBhIHNpbXBsZSBvYmplY3QgdHlwZSBiZWNhdXNlIG9mIHRoZSBzcGVjXG4gKiByZXF1aXJlbWVudCAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvI3RyYWNlc3RhdGUtZmllbGQpLlxuICpcbiAqIEhlcmUgaXMgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtdXRhdGlvbnM6XG4gKiAtIE5ldyBrZXktdmFsdWUgcGFpciBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG4gKiAtIFRoZSB2YWx1ZSBvZiBhbnkga2V5IGNhbiBiZSB1cGRhdGVkLiBNb2RpZmllZCBrZXlzIE1VU1QgYmUgbW92ZWQgdG8gdGhlXG4gKiBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gKi9cbmNsYXNzIFRyYWNlU3RhdGUge1xuICAgIF9pbnRlcm5hbFN0YXRlID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHJhd1RyYWNlU3RhdGUpIHtcbiAgICAgICAgaWYgKHJhd1RyYWNlU3RhdGUpXG4gICAgICAgICAgICB0aGlzLl9wYXJzZShyYXdUcmFjZVN0YXRlKTtcbiAgICB9XG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgLy8gVE9ETzogQmVuY2htYXJrIHRoZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyhtYXAgdnMgbGlzdCkgYW5kXG4gICAgICAgIC8vIHVzZSB0aGUgZmFzdGVyIG9uZS5cbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZSA9IHRoaXMuX2Nsb25lKCk7XG4gICAgICAgIGlmICh0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJhY2VTdGF0ZTtcbiAgICB9XG4gICAgdW5zZXQoa2V5KSB7XG4gICAgICAgIGNvbnN0IHRyYWNlU3RhdGUgPSB0aGlzLl9jbG9uZSgpO1xuICAgICAgICB0cmFjZVN0YXRlLl9pbnRlcm5hbFN0YXRlLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gdHJhY2VTdGF0ZTtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxTdGF0ZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fa2V5cygpXG4gICAgICAgICAgICAucmVkdWNlKChhZ2csIGtleSkgPT4ge1xuICAgICAgICAgICAgYWdnLnB1c2goa2V5ICsgTElTVF9NRU1CRVJfS0VZX1ZBTFVFX1NQTElUVEVSICsgdGhpcy5nZXQoa2V5KSk7XG4gICAgICAgICAgICByZXR1cm4gYWdnO1xuICAgICAgICB9LCBbXSlcbiAgICAgICAgICAgIC5qb2luKExJU1RfTUVNQkVSU19TRVBBUkFUT1IpO1xuICAgIH1cbiAgICBfcGFyc2UocmF3VHJhY2VTdGF0ZSkge1xuICAgICAgICBpZiAocmF3VHJhY2VTdGF0ZS5sZW5ndGggPiBNQVhfVFJBQ0VfU1RBVEVfTEVOKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gcmF3VHJhY2VTdGF0ZVxuICAgICAgICAgICAgLnNwbGl0KExJU1RfTUVNQkVSU19TRVBBUkFUT1IpXG4gICAgICAgICAgICAucmV2ZXJzZSgpIC8vIFN0b3JlIGluIHJldmVyc2Ugc28gbmV3IGtleXMgKC5zZXQoLi4uKSkgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgICAgLnJlZHVjZSgoYWdnLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0TWVtYmVyID0gcGFydC50cmltKCk7IC8vIE9wdGlvbmFsIFdoaXRlc3BhY2UgKE9XUykgaGFuZGxpbmdcbiAgICAgICAgICAgIGNvbnN0IGkgPSBsaXN0TWVtYmVyLmluZGV4T2YoTElTVF9NRU1CRVJfS0VZX1ZBTFVFX1NQTElUVEVSKTtcbiAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGxpc3RNZW1iZXIuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsaXN0TWVtYmVyLnNsaWNlKGkgKyAxLCBwYXJ0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCB2YWxpZGF0b3JzXzEudmFsaWRhdGVLZXkpKGtleSkgJiYgKDAsIHZhbGlkYXRvcnNfMS52YWxpZGF0ZVZhbHVlKSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWdnLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIHRvIGFkZCB3YXJuaW5nIGxvZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhZ2c7XG4gICAgICAgIH0sIG5ldyBNYXAoKSk7XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHJldmVyc2UoKSByZXF1aXJlbWVudCwgdHJ1bmMgbXVzdCBiZSBkb25lIGFmdGVyIG1hcCBpcyBjcmVhdGVkXG4gICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlLnNpemUgPiBNQVhfVFJBQ0VfU1RBVEVfSVRFTVMpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBuZXcgTWFwKEFycmF5LmZyb20odGhpcy5faW50ZXJuYWxTdGF0ZS5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKSAvLyBVc2UgcmV2ZXJzZSBzYW1lIGFzIG9yaWdpbmFsIHRyYWNlc3RhdGUgcGFyc2UgY2hhaW5cbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgTUFYX1RSQUNFX1NUQVRFX0lURU1TKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2tleXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2ludGVybmFsU3RhdGUua2V5cygpKS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIF9jbG9uZSgpIHtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZSA9IG5ldyBUcmFjZVN0YXRlKCk7XG4gICAgICAgIHRyYWNlU3RhdGUuX2ludGVybmFsU3RhdGUgPSBuZXcgTWFwKHRoaXMuX2ludGVybmFsU3RhdGUpO1xuICAgICAgICByZXR1cm4gdHJhY2VTdGF0ZTtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNlU3RhdGUgPSBUcmFjZVN0YXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJhY2VTdGF0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvciA9IGV4cG9ydHMucGFyc2VUcmFjZVBhcmVudCA9IGV4cG9ydHMuVFJBQ0VfU1RBVEVfSEVBREVSID0gZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc3VwcHJlc3NfdHJhY2luZ18xID0gcmVxdWlyZShcIi4vc3VwcHJlc3MtdHJhY2luZ1wiKTtcbmNvbnN0IFRyYWNlU3RhdGVfMSA9IHJlcXVpcmUoXCIuL1RyYWNlU3RhdGVcIik7XG5leHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIgPSAndHJhY2VwYXJlbnQnO1xuZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVIgPSAndHJhY2VzdGF0ZSc7XG5jb25zdCBWRVJTSU9OID0gJzAwJztcbmNvbnN0IFZFUlNJT05fUEFSVCA9ICcoPyFmZilbXFxcXGRhLWZdezJ9JztcbmNvbnN0IFRSQUNFX0lEX1BBUlQgPSAnKD8hWzBdezMyfSlbXFxcXGRhLWZdezMyfSc7XG5jb25zdCBQQVJFTlRfSURfUEFSVCA9ICcoPyFbMF17MTZ9KVtcXFxcZGEtZl17MTZ9JztcbmNvbnN0IEZMQUdTX1BBUlQgPSAnW1xcXFxkYS1mXXsyfSc7XG5jb25zdCBUUkFDRV9QQVJFTlRfUkVHRVggPSBuZXcgUmVnRXhwKGBeXFxcXHM/KCR7VkVSU0lPTl9QQVJUfSktKCR7VFJBQ0VfSURfUEFSVH0pLSgke1BBUkVOVF9JRF9QQVJUfSktKCR7RkxBR1NfUEFSVH0pKC0uKik/XFxcXHM/JGApO1xuLyoqXG4gKiBQYXJzZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgW3RyYWNlcGFyZW50XSBzcGFuIHRhZyBhbmQgY29udmVydHMgaXQgaW50byB7QGxpbmsgU3BhbkNvbnRleHR9XG4gKiBAcGFyYW0gdHJhY2VQYXJlbnQgLSBBIG1ldGEgcHJvcGVydHkgdGhhdCBjb21lcyBmcm9tIHNlcnZlci5cbiAqICAgICBJdCBzaG91bGQgYmUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHNlcnZlciBzaWRlIHRvIGhhdmUgdGhlIHNlcnZlcidzIHJlcXVlc3QgdHJhY2UgSWQsXG4gKiAgICAgYSBwYXJlbnQgc3BhbiBJZCB0aGF0IHdhcyBzZXQgb24gdGhlIHNlcnZlcidzIHJlcXVlc3Qgc3BhbixcbiAqICAgICBhbmQgdGhlIHRyYWNlIGZsYWdzIHRvIGluZGljYXRlIHRoZSBzZXJ2ZXIncyBzYW1wbGluZyBkZWNpc2lvblxuICogICAgICgwMSA9IHNhbXBsZWQsIDAwID0gbm90IHNhbXBsZWQpLlxuICogICAgIGZvciBleGFtcGxlOiAne3ZlcnNpb259LXt0cmFjZUlkfS17c3BhbklkfS17c2FtcGxlRGVjaXNpb259J1xuICogICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSL3RyYWNlLWNvbnRleHQvfVxuICovXG5mdW5jdGlvbiBwYXJzZVRyYWNlUGFyZW50KHRyYWNlUGFyZW50KSB7XG4gICAgY29uc3QgbWF0Y2ggPSBUUkFDRV9QQVJFTlRfUkVHRVguZXhlYyh0cmFjZVBhcmVudCk7XG4gICAgaWYgKCFtYXRjaClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgY29tcGF0aWJsZVxuICAgIC8vIHdpdGggZnV0dXJlIHZlcnNpb25zLiBJZiB0aGVyZSBhcmUgbW9yZSBwYXJ0cywgd2Ugb25seSByZWplY3QgaXQgaWYgaXQncyB1c2luZyB2ZXJzaW9uIDAwXG4gICAgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0LyN2ZXJzaW9uaW5nLW9mLXRyYWNlcGFyZW50XG4gICAgaWYgKG1hdGNoWzFdID09PSAnMDAnICYmIG1hdGNoWzVdKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICB0cmFjZUlkOiBtYXRjaFsyXSxcbiAgICAgICAgc3BhbklkOiBtYXRjaFszXSxcbiAgICAgICAgdHJhY2VGbGFnczogcGFyc2VJbnQobWF0Y2hbNF0sIDE2KSxcbiAgICB9O1xufVxuZXhwb3J0cy5wYXJzZVRyYWNlUGFyZW50ID0gcGFyc2VUcmFjZVBhcmVudDtcbi8qKlxuICogUHJvcGFnYXRlcyB7QGxpbmsgU3BhbkNvbnRleHR9IHRocm91Z2ggVHJhY2UgQ29udGV4dCBmb3JtYXQgcHJvcGFnYXRpb24uXG4gKlxuICogQmFzZWQgb24gdGhlIFRyYWNlIENvbnRleHQgc3BlY2lmaWNhdGlvbjpcbiAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi90cmFjZS1jb250ZXh0L1xuICovXG5jbGFzcyBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yIHtcbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gYXBpXzEudHJhY2UuZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmICghc3BhbkNvbnRleHQgfHxcbiAgICAgICAgICAgICgwLCBzdXBwcmVzc190cmFjaW5nXzEuaXNUcmFjaW5nU3VwcHJlc3NlZCkoY29udGV4dCkgfHxcbiAgICAgICAgICAgICEoMCwgYXBpXzEuaXNTcGFuQ29udGV4dFZhbGlkKShzcGFuQ29udGV4dCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50ID0gYCR7VkVSU0lPTn0tJHtzcGFuQ29udGV4dC50cmFjZUlkfS0ke3NwYW5Db250ZXh0LnNwYW5JZH0tMCR7TnVtYmVyKHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgfHwgYXBpXzEuVHJhY2VGbGFncy5OT05FKS50b1N0cmluZygxNil9YDtcbiAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBleHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIsIHRyYWNlUGFyZW50KTtcbiAgICAgICAgaWYgKHNwYW5Db250ZXh0LnRyYWNlU3RhdGUpIHtcbiAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgZXhwb3J0cy5UUkFDRV9TVEFURV9IRUFERVIsIHNwYW5Db250ZXh0LnRyYWNlU3RhdGUuc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50SGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBleHBvcnRzLlRSQUNFX1BBUkVOVF9IRUFERVIpO1xuICAgICAgICBpZiAoIXRyYWNlUGFyZW50SGVhZGVyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50ID0gQXJyYXkuaXNBcnJheSh0cmFjZVBhcmVudEhlYWRlcilcbiAgICAgICAgICAgID8gdHJhY2VQYXJlbnRIZWFkZXJbMF1cbiAgICAgICAgICAgIDogdHJhY2VQYXJlbnRIZWFkZXI7XG4gICAgICAgIGlmICh0eXBlb2YgdHJhY2VQYXJlbnQgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gcGFyc2VUcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIGlmICghc3BhbkNvbnRleHQpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgc3BhbkNvbnRleHQuaXNSZW1vdGUgPSB0cnVlO1xuICAgICAgICBjb25zdCB0cmFjZVN0YXRlSGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUik7XG4gICAgICAgIGlmICh0cmFjZVN0YXRlSGVhZGVyKSB7XG4gICAgICAgICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIGB0cmFjZXN0YXRlYCBoZWFkZXIgaXMgZm91bmQsIHdlIG1lcmdlIHRoZW0gaW50byBhXG4gICAgICAgICAgICAvLyBzaW5nbGUgaGVhZGVyLlxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBBcnJheS5pc0FycmF5KHRyYWNlU3RhdGVIZWFkZXIpXG4gICAgICAgICAgICAgICAgPyB0cmFjZVN0YXRlSGVhZGVyLmpvaW4oJywnKVxuICAgICAgICAgICAgICAgIDogdHJhY2VTdGF0ZUhlYWRlcjtcbiAgICAgICAgICAgIHNwYW5Db250ZXh0LnRyYWNlU3RhdGUgPSBuZXcgVHJhY2VTdGF0ZV8xLlRyYWNlU3RhdGUodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyA/IHN0YXRlIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpXzEudHJhY2Uuc2V0U3BhbkNvbnRleHQoY29udGV4dCwgc3BhbkNvbnRleHQpO1xuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbZXhwb3J0cy5UUkFDRV9QQVJFTlRfSEVBREVSLCBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUl07XG4gICAgfVxufVxuZXhwb3J0cy5XM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yID0gVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJQQ01ldGFkYXRhID0gZXhwb3J0cy5kZWxldGVSUENNZXRhZGF0YSA9IGV4cG9ydHMuc2V0UlBDTWV0YWRhdGEgPSBleHBvcnRzLlJQQ1R5cGUgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBSUENfTUVUQURBVEFfS0VZID0gKDAsIGFwaV8xLmNyZWF0ZUNvbnRleHRLZXkpKCdPcGVuVGVsZW1ldHJ5IFNESyBDb250ZXh0IEtleSBSUENfTUVUQURBVEEnKTtcbnZhciBSUENUeXBlO1xuKGZ1bmN0aW9uIChSUENUeXBlKSB7XG4gICAgUlBDVHlwZVtcIkhUVFBcIl0gPSBcImh0dHBcIjtcbn0pKFJQQ1R5cGUgPSBleHBvcnRzLlJQQ1R5cGUgfHwgKGV4cG9ydHMuUlBDVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBzZXRSUENNZXRhZGF0YShjb250ZXh0LCBtZXRhKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuc2V0VmFsdWUoUlBDX01FVEFEQVRBX0tFWSwgbWV0YSk7XG59XG5leHBvcnRzLnNldFJQQ01ldGFkYXRhID0gc2V0UlBDTWV0YWRhdGE7XG5mdW5jdGlvbiBkZWxldGVSUENNZXRhZGF0YShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoUlBDX01FVEFEQVRBX0tFWSk7XG59XG5leHBvcnRzLmRlbGV0ZVJQQ01ldGFkYXRhID0gZGVsZXRlUlBDTWV0YWRhdGE7XG5mdW5jdGlvbiBnZXRSUENNZXRhZGF0YShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoUlBDX01FVEFEQVRBX0tFWSk7XG59XG5leHBvcnRzLmdldFJQQ01ldGFkYXRhID0gZ2V0UlBDTWV0YWRhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ycGMtbWV0YWRhdGEuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSB2b2lkIDA7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKipcbiAqIGJhc2VkIG9uIGxvZGFzaCBpbiBvcmRlciB0byBzdXBwb3J0IGVzbSBidWlsZHMgd2l0aG91dCBlc01vZHVsZUludGVyb3AuXG4gKiBsb2Rhc2ggaXMgdXNpbmcgTUlUIExpY2Vuc2UuXG4gKiovXG5jb25zdCBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcbmNvbnN0IG51bGxUYWcgPSAnW29iamVjdCBOdWxsXSc7XG5jb25zdCB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcbmNvbnN0IGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbmNvbnN0IGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcbmNvbnN0IG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuY29uc3QgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5jb25zdCBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuY29uc3Qgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5jb25zdCBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPT0gb2JqZWN0VGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcHJvdG8gPSBnZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09PSBvYmplY3RDdG9yU3RyaW5nKTtcbn1cbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gICAgfVxuICAgIHJldHVybiBzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpXG4gICAgICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgICAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gICAgY29uc3QgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICBsZXQgdW5tYXNrZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgICAgIHVubWFza2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gc2lsZW5jZVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICBpZiAodW5tYXNrZWQpIHtcbiAgICAgICAgaWYgKGlzT3duKSB7XG4gICAgICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2Rhc2gubWVyZ2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1lcmdlID0gdm9pZCAwO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuY29uc3QgbG9kYXNoX21lcmdlXzEgPSByZXF1aXJlKFwiLi9sb2Rhc2gubWVyZ2VcIik7XG5jb25zdCBNQVhfTEVWRUwgPSAyMDtcbi8qKlxuICogTWVyZ2VzIG9iamVjdHMgdG9nZXRoZXJcbiAqIEBwYXJhbSBhcmdzIC0gb2JqZWN0cyAvIHZhbHVlcyB0byBiZSBtZXJnZWRcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLi4uYXJncykge1xuICAgIGxldCByZXN1bHQgPSBhcmdzLnNoaWZ0KCk7XG4gICAgY29uc3Qgb2JqZWN0cyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgd2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSBtZXJnZVR3b09iamVjdHMocmVzdWx0LCBhcmdzLnNoaWZ0KCksIDAsIG9iamVjdHMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZnVuY3Rpb24gdGFrZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4vKipcbiAqIE1lcmdlcyB0d28gb2JqZWN0c1xuICogQHBhcmFtIG9uZSAtIGZpcnN0IG9iamVjdFxuICogQHBhcmFtIHR3byAtIHNlY29uZCBvYmplY3RcbiAqIEBwYXJhbSBsZXZlbCAtIGN1cnJlbnQgZGVlcCBsZXZlbFxuICogQHBhcmFtIG9iamVjdHMgLSBvYmplY3RzIGhvbGRlciB0aGF0IGhhcyBiZWVuIGFscmVhZHkgcmVmZXJlbmNlZCAtIHRvIHByZXZlbnRcbiAqIGN5Y2xpYyBkZXBlbmRlbmN5XG4gKi9cbmZ1bmN0aW9uIG1lcmdlVHdvT2JqZWN0cyhvbmUsIHR3bywgbGV2ZWwgPSAwLCBvYmplY3RzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAobGV2ZWwgPiBNQVhfTEVWRUwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV2ZWwrKztcbiAgICBpZiAoaXNQcmltaXRpdmUob25lKSB8fCBpc1ByaW1pdGl2ZSh0d28pIHx8IGlzRnVuY3Rpb24odHdvKSkge1xuICAgICAgICByZXN1bHQgPSB0YWtlVmFsdWUodHdvKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheShvbmUpKSB7XG4gICAgICAgIHJlc3VsdCA9IG9uZS5zbGljZSgpO1xuICAgICAgICBpZiAoaXNBcnJheSh0d28pKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IHR3by5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0YWtlVmFsdWUodHdvW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodHdvKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHR3byk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaiA9IGtleXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRha2VWYWx1ZSh0d29ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3Qob25lKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QodHdvKSkge1xuICAgICAgICAgICAgaWYgKCFzaG91bGRNZXJnZShvbmUsIHR3bykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHdvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb25lKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0d28pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSBrZXlzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdHdvVmFsdWUgPSB0d29ba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmltaXRpdmUodHdvVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHdvVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHRba2V5XSA9IHRha2VWYWx1ZSh0d29WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHR3b1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmoxID0gcmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iajIgPSB0d29WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdhc09iamVjdFJlZmVyZW5jZWQob25lLCBrZXksIG9iamVjdHMpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXNPYmplY3RSZWZlcmVuY2VkKHR3bywga2V5LCBvYmplY3RzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG9iajEpICYmIGlzT2JqZWN0KG9iajIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyMSA9IG9iamVjdHMuZ2V0KG9iajEpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycjIgPSBvYmplY3RzLmdldChvYmoyKSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIxLnB1c2goeyBvYmo6IG9uZSwga2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycjIucHVzaCh7IG9iajogdHdvLCBrZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5zZXQob2JqMSwgYXJyMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5zZXQob2JqMiwgYXJyMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlVHdvT2JqZWN0cyhyZXN1bHRba2V5XSwgdHdvVmFsdWUsIGxldmVsLCBvYmplY3RzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHR3bztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBGdW5jdGlvbiB0byBjaGVjayBpZiBvYmplY3QgaGFzIGJlZW4gYWxyZWFkeSByZWZlcmVuY2VcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHdhc09iamVjdFJlZmVyZW5jZWQob2JqLCBrZXksIG9iamVjdHMpIHtcbiAgICBjb25zdCBhcnIgPSBvYmplY3RzLmdldChvYmpba2V5XSkgfHwgW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnIubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhcnJbaV07XG4gICAgICAgIGlmIChpbmZvLmtleSA9PT0ga2V5ICYmIGluZm8ub2JqID09PSBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuICghaXNQcmltaXRpdmUodmFsdWUpICYmXG4gICAgICAgICFpc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAhaXNGdW5jdGlvbih2YWx1ZSkgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyk7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgIHZhbHVlID09PSBudWxsKTtcbn1cbmZ1bmN0aW9uIHNob3VsZE1lcmdlKG9uZSwgdHdvKSB7XG4gICAgaWYgKCEoMCwgbG9kYXNoX21lcmdlXzEuaXNQbGFpbk9iamVjdCkob25lKSB8fCAhKDAsIGxvZGFzaF9tZXJnZV8xLmlzUGxhaW5PYmplY3QpKHR3bykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IHZvaWQgMDtcbi8qKlxuICogRXJyb3IgdGhhdCBpcyB0aHJvd24gb24gdGltZW91dHMuXG4gKi9cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICAvLyBtYW51YWxseSBhZGp1c3QgcHJvdG90eXBlIHRvIHJldGFpbiBgaW5zdGFuY2VvZmAgZnVuY3Rpb25hbGl0eSB3aGVuIHRhcmdldGluZyBFUzUsIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUaW1lb3V0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcbi8qKlxuICogQWRkcyBhIHRpbWVvdXQgdG8gYSBwcm9taXNlIGFuZCByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZC4gQWxzbyByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZVxuICogcmVqZWN0cywgYW5kIHJlc29sdmVzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZSByZXNvbHZlcy5cbiAqXG4gKiA8cD4gTk9URTogdGhpcyBvcGVyYXRpb24gd2lsbCBjb250aW51ZSBldmVuIGFmdGVyIGl0IHRocm93cyBhIHtAbGluayBUaW1lb3V0RXJyb3J9LlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIHByb21pc2UgdG8gdXNlIHdpdGggdGltZW91dC5cbiAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAqL1xuZnVuY3Rpb24gY2FsbFdpdGhUaW1lb3V0KHByb21pc2UsIHRpbWVvdXQpIHtcbiAgICBsZXQgdGltZW91dEhhbmRsZTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHRpbWVvdXRGdW5jdGlvbihfcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ09wZXJhdGlvbiB0aW1lZCBvdXQuJykpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHJlYXNvbiA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBjYWxsV2l0aFRpbWVvdXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lb3V0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVXJsSWdub3JlZCA9IGV4cG9ydHMudXJsTWF0Y2hlcyA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiB1cmxNYXRjaGVzKHVybCwgdXJsVG9NYXRjaCkge1xuICAgIGlmICh0eXBlb2YgdXJsVG9NYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gdXJsVG9NYXRjaDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXVybC5tYXRjaCh1cmxUb01hdGNoKTtcbiAgICB9XG59XG5leHBvcnRzLnVybE1hdGNoZXMgPSB1cmxNYXRjaGVzO1xuLyoqXG4gKiBDaGVjayBpZiB7QHBhcmFtIHVybH0gc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCB7QHBhcmFtIGlnbm9yZWRVcmxzfVxuICogQHBhcmFtIHVybFxuICogQHBhcmFtIGlnbm9yZWRVcmxzXG4gKi9cbmZ1bmN0aW9uIGlzVXJsSWdub3JlZCh1cmwsIGlnbm9yZWRVcmxzKSB7XG4gICAgaWYgKCFpZ25vcmVkVXJscykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWdub3JlVXJsIG9mIGlnbm9yZWRVcmxzKSB7XG4gICAgICAgIGlmICh1cmxNYXRjaGVzKHVybCwgaWdub3JlVXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5pc1VybElnbm9yZWQgPSBpc1VybElnbm9yZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmVycmVkID0gdm9pZCAwO1xuY2xhc3MgRGVmZXJyZWQge1xuICAgIF9wcm9taXNlO1xuICAgIF9yZXNvbHZlO1xuICAgIF9yZWplY3Q7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgICB9XG4gICAgcmVzb2x2ZSh2YWwpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZSh2YWwpO1xuICAgIH1cbiAgICByZWplY3QoZXJyKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdChlcnIpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmZXJyZWQgPSBEZWZlcnJlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21pc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJpbmRPbmNlRnV0dXJlID0gdm9pZCAwO1xuY29uc3QgcHJvbWlzZV8xID0gcmVxdWlyZShcIi4vcHJvbWlzZVwiKTtcbi8qKlxuICogQmluZCB0aGUgY2FsbGJhY2sgYW5kIG9ubHkgaW52b2tlIHRoZSBjYWxsYmFjayBvbmNlIHJlZ2FyZGxlc3MgaG93IG1hbnkgdGltZXMgYEJpbmRPbmNlRnV0dXJlLmNhbGxgIGlzIGludm9rZWQuXG4gKi9cbmNsYXNzIEJpbmRPbmNlRnV0dXJlIHtcbiAgICBfY2FsbGJhY2s7XG4gICAgX3RoYXQ7XG4gICAgX2lzQ2FsbGVkID0gZmFsc2U7XG4gICAgX2RlZmVycmVkID0gbmV3IHByb21pc2VfMS5EZWZlcnJlZCgpO1xuICAgIGNvbnN0cnVjdG9yKF9jYWxsYmFjaywgX3RoYXQpIHtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBfY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3RoYXQgPSBfdGhhdDtcbiAgICB9XG4gICAgZ2V0IGlzQ2FsbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDYWxsZWQ7XG4gICAgfVxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgY2FsbCguLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2NhbGxiYWNrLmNhbGwodGhpcy5fdGhhdCwgLi4uYXJncykpLnRoZW4odmFsID0+IHRoaXMuX2RlZmVycmVkLnJlc29sdmUodmFsKSwgZXJyID0+IHRoaXMuX2RlZmVycmVkLnJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWZlcnJlZC5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG59XG5leHBvcnRzLkJpbmRPbmNlRnV0dXJlID0gQmluZE9uY2VGdXR1cmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYWxsYmFjay5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaWFnTG9nTGV2ZWxGcm9tU3RyaW5nID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGxvZ0xldmVsTWFwID0ge1xuICAgIEFMTDogYXBpXzEuRGlhZ0xvZ0xldmVsLkFMTCxcbiAgICBWRVJCT1NFOiBhcGlfMS5EaWFnTG9nTGV2ZWwuVkVSQk9TRSxcbiAgICBERUJVRzogYXBpXzEuRGlhZ0xvZ0xldmVsLkRFQlVHLFxuICAgIElORk86IGFwaV8xLkRpYWdMb2dMZXZlbC5JTkZPLFxuICAgIFdBUk46IGFwaV8xLkRpYWdMb2dMZXZlbC5XQVJOLFxuICAgIEVSUk9SOiBhcGlfMS5EaWFnTG9nTGV2ZWwuRVJST1IsXG4gICAgTk9ORTogYXBpXzEuRGlhZ0xvZ0xldmVsLk5PTkUsXG59O1xuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEge0BsaW5rIERpYWdMb2dMZXZlbH0sIGRlZmF1bHRzIHRvIHtAbGluayBEaWFnTG9nTGV2ZWx9IGlmIHRoZSBsb2cgbGV2ZWwgZG9lcyBub3QgZXhpc3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQuXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGlhZ0xvZ0xldmVsRnJvbVN0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIGRvbid0IGZhbGwgYmFjayB0byBkZWZhdWx0IC0gbm8gdmFsdWUgc2V0IGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciDDunMgdGhhbiBhbiBpbmNvcnJlY3QgdmFsdWUgKGRvIG5vdCBzZXQgdnMuIGZhbGwgYmFjayB0byBkZWZhdWx0KVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZExvZ0xldmVsID0gbG9nTGV2ZWxNYXBbdmFsdWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKHJlc29sdmVkTG9nTGV2ZWwgPT0gbnVsbCkge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVua25vd24gbG9nIGxldmVsIFwiJHt2YWx1ZX1cIiwgZXhwZWN0ZWQgb25lIG9mICR7T2JqZWN0LmtleXMobG9nTGV2ZWxNYXApfSwgdXNpbmcgZGVmYXVsdGApO1xuICAgICAgICByZXR1cm4gYXBpXzEuRGlhZ0xvZ0xldmVsLklORk87XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZExvZ0xldmVsO1xufVxuZXhwb3J0cy5kaWFnTG9nTGV2ZWxGcm9tU3RyaW5nID0gZGlhZ0xvZ0xldmVsRnJvbVN0cmluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZ3VyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9leHBvcnQgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzdXBwcmVzc190cmFjaW5nXzEgPSByZXF1aXJlKFwiLi4vdHJhY2Uvc3VwcHJlc3MtdHJhY2luZ1wiKTtcbi8qKlxuICogQGludGVybmFsXG4gKiBTaGFyZWQgZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IEV4cG9ydGVycyB3aGlsZSBleHBvcnRpbmcgZGF0YSwgaW5jbHVkaW5nIHN1cHByZXNzaW9uIG9mIFRyYWNlcy5cbiAqL1xuZnVuY3Rpb24gX2V4cG9ydChleHBvcnRlciwgYXJnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAvLyBwcmV2ZW50IGRvd25zdHJlYW0gZXhwb3J0ZXIgY2FsbHMgZnJvbSBnZW5lcmF0aW5nIHNwYW5zXG4gICAgICAgIGFwaV8xLmNvbnRleHQud2l0aCgoMCwgc3VwcHJlc3NfdHJhY2luZ18xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksICgpID0+IHtcbiAgICAgICAgICAgIGV4cG9ydGVyLmV4cG9ydChhcmcsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLl9leHBvcnQgPSBfZXhwb3J0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmludGVybmFsID0gZXhwb3J0cy5kaWFnTG9nTGV2ZWxGcm9tU3RyaW5nID0gZXhwb3J0cy5CaW5kT25jZUZ1dHVyZSA9IGV4cG9ydHMudXJsTWF0Y2hlcyA9IGV4cG9ydHMuaXNVcmxJZ25vcmVkID0gZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IGV4cG9ydHMubWVyZ2UgPSBleHBvcnRzLlRyYWNlU3RhdGUgPSBleHBvcnRzLnVuc3VwcHJlc3NUcmFjaW5nID0gZXhwb3J0cy5zdXBwcmVzc1RyYWNpbmcgPSBleHBvcnRzLmlzVHJhY2luZ1N1cHByZXNzZWQgPSBleHBvcnRzLnNldFJQQ01ldGFkYXRhID0gZXhwb3J0cy5nZXRSUENNZXRhZGF0YSA9IGV4cG9ydHMuZGVsZXRlUlBDTWV0YWRhdGEgPSBleHBvcnRzLlJQQ1R5cGUgPSBleHBvcnRzLnBhcnNlVHJhY2VQYXJlbnQgPSBleHBvcnRzLlczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IgPSBleHBvcnRzLlRSQUNFX1NUQVRFX0hFQURFUiA9IGV4cG9ydHMuVFJBQ0VfUEFSRU5UX0hFQURFUiA9IGV4cG9ydHMuQ29tcG9zaXRlUHJvcGFnYXRvciA9IGV4cG9ydHMudW5yZWZUaW1lciA9IGV4cG9ydHMub3RwZXJmb3JtYW5jZSA9IGV4cG9ydHMuZ2V0U3RyaW5nTGlzdEZyb21FbnYgPSBleHBvcnRzLmdldE51bWJlckZyb21FbnYgPSBleHBvcnRzLmdldEJvb2xlYW5Gcm9tRW52ID0gZXhwb3J0cy5nZXRTdHJpbmdGcm9tRW52ID0gZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IGV4cG9ydHMuU0RLX0lORk8gPSBleHBvcnRzLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkID0gZXhwb3J0cy5FeHBvcnRSZXN1bHRDb2RlID0gZXhwb3J0cy50aW1lSW5wdXRUb0hyVGltZSA9IGV4cG9ydHMubWlsbGlzVG9IclRpbWUgPSBleHBvcnRzLmlzVGltZUlucHV0SHJUaW1lID0gZXhwb3J0cy5pc1RpbWVJbnB1dCA9IGV4cG9ydHMuaHJUaW1lVG9UaW1lU3RhbXAgPSBleHBvcnRzLmhyVGltZVRvTmFub3NlY29uZHMgPSBleHBvcnRzLmhyVGltZVRvTWlsbGlzZWNvbmRzID0gZXhwb3J0cy5oclRpbWVUb01pY3Jvc2Vjb25kcyA9IGV4cG9ydHMuaHJUaW1lRHVyYXRpb24gPSBleHBvcnRzLmhyVGltZSA9IGV4cG9ydHMuZ2V0VGltZU9yaWdpbiA9IGV4cG9ydHMuYWRkSHJUaW1lcyA9IGV4cG9ydHMubG9nZ2luZ0Vycm9ySGFuZGxlciA9IGV4cG9ydHMuc2V0R2xvYmFsRXJyb3JIYW5kbGVyID0gZXhwb3J0cy5nbG9iYWxFcnJvckhhbmRsZXIgPSBleHBvcnRzLnNhbml0aXplQXR0cmlidXRlcyA9IGV4cG9ydHMuaXNBdHRyaWJ1dGVWYWx1ZSA9IGV4cG9ydHMuQW5jaG9yZWRDbG9jayA9IGV4cG9ydHMuVzNDQmFnZ2FnZVByb3BhZ2F0b3IgPSB2b2lkIDA7XG52YXIgVzNDQmFnZ2FnZVByb3BhZ2F0b3JfMSA9IHJlcXVpcmUoXCIuL2JhZ2dhZ2UvcHJvcGFnYXRpb24vVzNDQmFnZ2FnZVByb3BhZ2F0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJXM0NCYWdnYWdlUHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVzNDQmFnZ2FnZVByb3BhZ2F0b3JfMS5XM0NCYWdnYWdlUHJvcGFnYXRvcjsgfSB9KTtcbnZhciBhbmNob3JlZF9jbG9ja18xID0gcmVxdWlyZShcIi4vY29tbW9uL2FuY2hvcmVkLWNsb2NrXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQW5jaG9yZWRDbG9ja1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYW5jaG9yZWRfY2xvY2tfMS5BbmNob3JlZENsb2NrOyB9IH0pO1xudmFyIGF0dHJpYnV0ZXNfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9hdHRyaWJ1dGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBdHRyaWJ1dGVWYWx1ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXR0cmlidXRlc18xLmlzQXR0cmlidXRlVmFsdWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYW5pdGl6ZUF0dHJpYnV0ZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF0dHJpYnV0ZXNfMS5zYW5pdGl6ZUF0dHJpYnV0ZXM7IH0gfSk7XG52YXIgZ2xvYmFsX2Vycm9yX2hhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9nbG9iYWwtZXJyb3ItaGFuZGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdsb2JhbEVycm9ySGFuZGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYmFsX2Vycm9yX2hhbmRsZXJfMS5nbG9iYWxFcnJvckhhbmRsZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRHbG9iYWxFcnJvckhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdsb2JhbF9lcnJvcl9oYW5kbGVyXzEuc2V0R2xvYmFsRXJyb3JIYW5kbGVyOyB9IH0pO1xudmFyIGxvZ2dpbmdfZXJyb3JfaGFuZGxlcl8xID0gcmVxdWlyZShcIi4vY29tbW9uL2xvZ2dpbmctZXJyb3ItaGFuZGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZ2dpbmdFcnJvckhhbmRsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZ2dpbmdfZXJyb3JfaGFuZGxlcl8xLmxvZ2dpbmdFcnJvckhhbmRsZXI7IH0gfSk7XG52YXIgdGltZV8xID0gcmVxdWlyZShcIi4vY29tbW9uL3RpbWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRIclRpbWVzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuYWRkSHJUaW1lczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFRpbWVPcmlnaW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5nZXRUaW1lT3JpZ2luOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaHJUaW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lRHVyYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5oclRpbWVEdXJhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhyVGltZVRvTWljcm9zZWNvbmRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaHJUaW1lVG9NaWNyb3NlY29uZHM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoclRpbWVUb01pbGxpc2Vjb25kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvTWlsbGlzZWNvbmRzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHJUaW1lVG9OYW5vc2Vjb25kc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvTmFub3NlY29uZHM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoclRpbWVUb1RpbWVTdGFtcFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLmhyVGltZVRvVGltZVN0YW1wOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNUaW1lSW5wdXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS5pc1RpbWVJbnB1dDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVGltZUlucHV0SHJUaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lXzEuaXNUaW1lSW5wdXRIclRpbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaWxsaXNUb0hyVGltZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZV8xLm1pbGxpc1RvSHJUaW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGltZUlucHV0VG9IclRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRpbWVfMS50aW1lSW5wdXRUb0hyVGltZTsgfSB9KTtcbnZhciBFeHBvcnRSZXN1bHRfMSA9IHJlcXVpcmUoXCIuL0V4cG9ydFJlc3VsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV4cG9ydFJlc3VsdENvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEV4cG9ydFJlc3VsdF8xLkV4cG9ydFJlc3VsdENvZGU7IH0gfSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL2JhZ2dhZ2UvdXRpbHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZUtleVBhaXJzSW50b1JlY29yZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5wYXJzZUtleVBhaXJzSW50b1JlY29yZDsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTREtfSU5GT1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5TREtfSU5GTzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9nbG9iYWxUaGlzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLl9nbG9iYWxUaGlzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U3RyaW5nRnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5nZXRTdHJpbmdGcm9tRW52OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Qm9vbGVhbkZyb21FbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuZ2V0Qm9vbGVhbkZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXROdW1iZXJGcm9tRW52XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLmdldE51bWJlckZyb21FbnY7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTdHJpbmdMaXN0RnJvbUVudlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5nZXRTdHJpbmdMaXN0RnJvbUVudjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm90cGVyZm9ybWFuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEub3RwZXJmb3JtYW5jZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVucmVmVGltZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEudW5yZWZUaW1lcjsgfSB9KTtcbnZhciBjb21wb3NpdGVfMSA9IHJlcXVpcmUoXCIuL3Byb3BhZ2F0aW9uL2NvbXBvc2l0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbXBvc2l0ZVByb3BhZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbXBvc2l0ZV8xLkNvbXBvc2l0ZVByb3BhZ2F0b3I7IH0gfSk7XG52YXIgVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcl8xID0gcmVxdWlyZShcIi4vdHJhY2UvVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRSQUNFX1BBUkVOVF9IRUFERVJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3JfMS5UUkFDRV9QQVJFTlRfSEVBREVSOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVFJBQ0VfU1RBVEVfSEVBREVSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXzEuVFJBQ0VfU1RBVEVfSEVBREVSOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcl8xLlczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVRyYWNlUGFyZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBXM0NUcmFjZUNvbnRleHRQcm9wYWdhdG9yXzEucGFyc2VUcmFjZVBhcmVudDsgfSB9KTtcbnZhciBycGNfbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL3RyYWNlL3JwYy1tZXRhZGF0YVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJQQ1R5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJwY19tZXRhZGF0YV8xLlJQQ1R5cGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWxldGVSUENNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuZGVsZXRlUlBDTWV0YWRhdGE7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRSUENNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuZ2V0UlBDTWV0YWRhdGE7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRSUENNZXRhZGF0YVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcnBjX21ldGFkYXRhXzEuc2V0UlBDTWV0YWRhdGE7IH0gfSk7XG52YXIgc3VwcHJlc3NfdHJhY2luZ18xID0gcmVxdWlyZShcIi4vdHJhY2Uvc3VwcHJlc3MtdHJhY2luZ1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVHJhY2luZ1N1cHByZXNzZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1cHByZXNzX3RyYWNpbmdfMS5pc1RyYWNpbmdTdXBwcmVzc2VkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VwcHJlc3NUcmFjaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdXBwcmVzc190cmFjaW5nXzEuc3VwcHJlc3NUcmFjaW5nOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdXBwcmVzc1RyYWNpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1cHByZXNzX3RyYWNpbmdfMS51bnN1cHByZXNzVHJhY2luZzsgfSB9KTtcbnZhciBUcmFjZVN0YXRlXzEgPSByZXF1aXJlKFwiLi90cmFjZS9UcmFjZVN0YXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHJhY2VTdGF0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVHJhY2VTdGF0ZV8xLlRyYWNlU3RhdGU7IH0gfSk7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL21lcmdlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVyZ2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lcmdlXzEubWVyZ2U7IH0gfSk7XG52YXIgdGltZW91dF8xID0gcmVxdWlyZShcIi4vdXRpbHMvdGltZW91dFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLlRpbWVvdXRFcnJvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhbGxXaXRoVGltZW91dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZW91dF8xLmNhbGxXaXRoVGltZW91dDsgfSB9KTtcbnZhciB1cmxfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL3VybFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVXJsSWdub3JlZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXJsXzEuaXNVcmxJZ25vcmVkOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXJsTWF0Y2hlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXJsXzEudXJsTWF0Y2hlczsgfSB9KTtcbnZhciBjYWxsYmFja18xID0gcmVxdWlyZShcIi4vdXRpbHMvY2FsbGJhY2tcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaW5kT25jZUZ1dHVyZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbGJhY2tfMS5CaW5kT25jZUZ1dHVyZTsgfSB9KTtcbnZhciBjb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi91dGlscy9jb25maWd1cmF0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlhZ0xvZ0xldmVsRnJvbVN0cmluZ1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlndXJhdGlvbl8xLmRpYWdMb2dMZXZlbEZyb21TdHJpbmc7IH0gfSk7XG5jb25zdCBleHBvcnRlcl8xID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvZXhwb3J0ZXJcIik7XG5leHBvcnRzLmludGVybmFsID0ge1xuICAgIF9leHBvcnQ6IGV4cG9ydGVyXzEuX2V4cG9ydCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgPSB2b2lkIDA7XG52YXIgU2V2ZXJpdHlOdW1iZXI7XG4oZnVuY3Rpb24gKFNldmVyaXR5TnVtYmVyKSB7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJVTlNQRUNJRklFRFwiXSA9IDBdID0gXCJVTlNQRUNJRklFRFwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiVFJBQ0VcIl0gPSAxXSA9IFwiVFJBQ0VcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIlRSQUNFMlwiXSA9IDJdID0gXCJUUkFDRTJcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIlRSQUNFM1wiXSA9IDNdID0gXCJUUkFDRTNcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIlRSQUNFNFwiXSA9IDRdID0gXCJUUkFDRTRcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkRFQlVHXCJdID0gNV0gPSBcIkRFQlVHXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJERUJVRzJcIl0gPSA2XSA9IFwiREVCVUcyXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJERUJVRzNcIl0gPSA3XSA9IFwiREVCVUczXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJERUJVRzRcIl0gPSA4XSA9IFwiREVCVUc0XCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJJTkZPXCJdID0gOV0gPSBcIklORk9cIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIklORk8yXCJdID0gMTBdID0gXCJJTkZPMlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiSU5GTzNcIl0gPSAxMV0gPSBcIklORk8zXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJJTkZPNFwiXSA9IDEyXSA9IFwiSU5GTzRcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIldBUk5cIl0gPSAxM10gPSBcIldBUk5cIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIldBUk4yXCJdID0gMTRdID0gXCJXQVJOMlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiV0FSTjNcIl0gPSAxNV0gPSBcIldBUk4zXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJXQVJONFwiXSA9IDE2XSA9IFwiV0FSTjRcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkVSUk9SXCJdID0gMTddID0gXCJFUlJPUlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiRVJST1IyXCJdID0gMThdID0gXCJFUlJPUjJcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkVSUk9SM1wiXSA9IDE5XSA9IFwiRVJST1IzXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJFUlJPUjRcIl0gPSAyMF0gPSBcIkVSUk9SNFwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiRkFUQUxcIl0gPSAyMV0gPSBcIkZBVEFMXCI7XG4gICAgU2V2ZXJpdHlOdW1iZXJbU2V2ZXJpdHlOdW1iZXJbXCJGQVRBTDJcIl0gPSAyMl0gPSBcIkZBVEFMMlwiO1xuICAgIFNldmVyaXR5TnVtYmVyW1NldmVyaXR5TnVtYmVyW1wiRkFUQUwzXCJdID0gMjNdID0gXCJGQVRBTDNcIjtcbiAgICBTZXZlcml0eU51bWJlcltTZXZlcml0eU51bWJlcltcIkZBVEFMNFwiXSA9IDI0XSA9IFwiRkFUQUw0XCI7XG59KShTZXZlcml0eU51bWJlciA9IGV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgfHwgKGV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TG9nUmVjb3JkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT09QX0xPR0dFUiA9IGV4cG9ydHMuTm9vcExvZ2dlciA9IHZvaWQgMDtcbmNsYXNzIE5vb3BMb2dnZXIge1xuICAgIGVtaXQoX2xvZ1JlY29yZCkgeyB9XG59XG5leHBvcnRzLk5vb3BMb2dnZXIgPSBOb29wTG9nZ2VyO1xuZXhwb3J0cy5OT09QX0xPR0dFUiA9IG5ldyBOb29wTG9nZ2VyKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob29wTG9nZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5OT09QX0xPR0dFUl9QUk9WSURFUiA9IGV4cG9ydHMuTm9vcExvZ2dlclByb3ZpZGVyID0gdm9pZCAwO1xuY29uc3QgTm9vcExvZ2dlcl8xID0gcmVxdWlyZShcIi4vTm9vcExvZ2dlclwiKTtcbmNsYXNzIE5vb3BMb2dnZXJQcm92aWRlciB7XG4gICAgZ2V0TG9nZ2VyKF9uYW1lLCBfdmVyc2lvbiwgX29wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wTG9nZ2VyXzEuTm9vcExvZ2dlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuTm9vcExvZ2dlclByb3ZpZGVyID0gTm9vcExvZ2dlclByb3ZpZGVyO1xuZXhwb3J0cy5OT09QX0xPR0dFUl9QUk9WSURFUiA9IG5ldyBOb29wTG9nZ2VyUHJvdmlkZXIoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vb3BMb2dnZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJveHlMb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBOb29wTG9nZ2VyXzEgPSByZXF1aXJlKFwiLi9Ob29wTG9nZ2VyXCIpO1xuY2xhc3MgUHJveHlMb2dnZXIge1xuICAgIGNvbnN0cnVjdG9yKF9wcm92aWRlciwgbmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9wcm92aWRlciA9IF9wcm92aWRlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW1pdCBhIGxvZyByZWNvcmQuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgbG9nIGFwcGVuZGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2dSZWNvcmRcbiAgICAgKi9cbiAgICBlbWl0KGxvZ1JlY29yZCkge1xuICAgICAgICB0aGlzLl9nZXRMb2dnZXIoKS5lbWl0KGxvZ1JlY29yZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyeSB0byBnZXQgYSBsb2dnZXIgZnJvbSB0aGUgcHJveHkgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqIElmIHRoZSBwcm94eSBsb2dnZXIgcHJvdmlkZXIgaGFzIG5vIGRlbGVnYXRlLCByZXR1cm4gYSBub29wIGxvZ2dlci5cbiAgICAgKi9cbiAgICBfZ2V0TG9nZ2VyKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2dnZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZUxvZ2dlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCFsb2dnZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOb29wTG9nZ2VyXzEuTk9PUF9MT0dHRVI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBsb2dnZXI7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICB9XG59XG5leHBvcnRzLlByb3h5TG9nZ2VyID0gUHJveHlMb2dnZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm94eUxvZ2dlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJveHlMb2dnZXJQcm92aWRlciA9IHZvaWQgMDtcbmNvbnN0IE5vb3BMb2dnZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vTm9vcExvZ2dlclByb3ZpZGVyXCIpO1xuY29uc3QgUHJveHlMb2dnZXJfMSA9IHJlcXVpcmUoXCIuL1Byb3h5TG9nZ2VyXCIpO1xuY2xhc3MgUHJveHlMb2dnZXJQcm92aWRlciB7XG4gICAgZ2V0TG9nZ2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eUxvZ2dlcl8xLlByb3h5TG9nZ2VyKHRoaXMsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpKTtcbiAgICB9XG4gICAgZ2V0RGVsZWdhdGUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBOb29wTG9nZ2VyUHJvdmlkZXJfMS5OT09QX0xPR0dFUl9QUk9WSURFUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSBsb2dnZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBzZXREZWxlZ2F0ZShkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBnZXREZWxlZ2F0ZUxvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0TG9nZ2VyKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJveHlMb2dnZXJQcm92aWRlciA9IFByb3h5TG9nZ2VyUHJvdmlkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm94eUxvZ2dlclByb3ZpZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fZ2xvYmFsVGhpcyA9IHZvaWQgMDtcbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zXG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbFRoaXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdm9pZCAwO1xudmFyIGdsb2JhbFRoaXNfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbFRoaXNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfZ2xvYmFsVGhpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2xvYmFsVGhpc18xLl9nbG9iYWxUaGlzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLl9nbG9iYWxUaGlzID0gdm9pZCAwO1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfZ2xvYmFsVGhpc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLl9nbG9iYWxUaGlzOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gZXhwb3J0cy5tYWtlR2V0dGVyID0gZXhwb3J0cy5fZ2xvYmFsID0gZXhwb3J0cy5HTE9CQUxfTE9HU19BUElfS0VZID0gdm9pZCAwO1xuY29uc3QgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuLi9wbGF0Zm9ybVwiKTtcbmV4cG9ydHMuR0xPQkFMX0xPR1NfQVBJX0tFWSA9IFN5bWJvbC5mb3IoJ2lvLm9wZW50ZWxlbWV0cnkuanMuYXBpLmxvZ3MnKTtcbmV4cG9ydHMuX2dsb2JhbCA9IHBsYXRmb3JtXzEuX2dsb2JhbFRoaXM7XG4vKipcbiAqIE1ha2UgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIGEgdmVyc2lvbiBpbnRlZ2VyIGFuZCByZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBhbiBBUEkgaWYgdGhlIHZlcnNpb25cbiAqIGlzIGNvbXBhdGlibGUsIG9yIGEgZmFsbGJhY2sgdmVyc2lvbiAodXN1YWxseSBOT09QKSBpZiBpdCBpcyBub3QuXG4gKlxuICogQHBhcmFtIHJlcXVpcmVkVmVyc2lvbiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB2ZXJzaW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHJldHVybiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBpbnN0YW5jZSBJbnN0YW5jZSB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgY29tcGF0aWJsZVxuICogQHBhcmFtIGZhbGxiYWNrIEZhbGxiYWNrIGluc3RhbmNlLCB1c3VhbGx5IE5PT1AsIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgbm90IGNvbXBhdGlibGVcbiAqL1xuZnVuY3Rpb24gbWFrZUdldHRlcihyZXF1aXJlZFZlcnNpb24sIGluc3RhbmNlLCBmYWxsYmFjaykge1xuICAgIHJldHVybiAodmVyc2lvbikgPT4gdmVyc2lvbiA9PT0gcmVxdWlyZWRWZXJzaW9uID8gaW5zdGFuY2UgOiBmYWxsYmFjaztcbn1cbmV4cG9ydHMubWFrZUdldHRlciA9IG1ha2VHZXR0ZXI7XG4vKipcbiAqIEEgbnVtYmVyIHdoaWNoIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlXG4gKiBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgQVBJLiBUaGlzIG51bWJlciBpcyB1c2VkIHdoZW4gYW4gQVBJIHBhY2thZ2VcbiAqIGF0dGVtcHRzIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIEFQSSB0byBlbnN1cmUgaXQgaXMgZ2V0dGluZyBhIGNvbXBhdGlibGVcbiAqIHZlcnNpb24uIElmIHRoZSBnbG9iYWwgQVBJIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIEFQSSBwYWNrYWdlXG4gKiBhdHRlbXB0aW5nIHRvIGdldCBpdCwgYSBOT09QIEFQSSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnRzLkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbC11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nc0FQSSA9IHZvaWQgMDtcbmNvbnN0IGdsb2JhbF91dGlsc18xID0gcmVxdWlyZShcIi4uL2ludGVybmFsL2dsb2JhbC11dGlsc1wiKTtcbmNvbnN0IE5vb3BMb2dnZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4uL05vb3BMb2dnZXJQcm92aWRlclwiKTtcbmNvbnN0IFByb3h5TG9nZ2VyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuLi9Qcm94eUxvZ2dlclByb3ZpZGVyXCIpO1xuY2xhc3MgTG9nc0FQSSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIgPSBuZXcgUHJveHlMb2dnZXJQcm92aWRlcl8xLlByb3h5TG9nZ2VyUHJvdmlkZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBMb2dzQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH1cbiAgICBzZXRHbG9iYWxMb2dnZXJQcm92aWRlcihwcm92aWRlcikge1xuICAgICAgICBpZiAoZ2xvYmFsX3V0aWxzXzEuX2dsb2JhbFtnbG9iYWxfdXRpbHNfMS5HTE9CQUxfTE9HU19BUElfS0VZXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9nZ2VyUHJvdmlkZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxfdXRpbHNfMS5fZ2xvYmFsW2dsb2JhbF91dGlsc18xLkdMT0JBTF9MT0dTX0FQSV9LRVldID0gKDAsIGdsb2JhbF91dGlsc18xLm1ha2VHZXR0ZXIpKGdsb2JhbF91dGlsc18xLkFQSV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWV9WRVJTSU9OLCBwcm92aWRlciwgTm9vcExvZ2dlclByb3ZpZGVyXzEuTk9PUF9MT0dHRVJfUFJPVklERVIpO1xuICAgICAgICB0aGlzLl9wcm94eUxvZ2dlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgbG9nZ2VyIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHJldHVybnMgTG9nZ2VyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBnZXRMb2dnZXJQcm92aWRlcigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuICgoX2IgPSAoX2EgPSBnbG9iYWxfdXRpbHNfMS5fZ2xvYmFsW2dsb2JhbF91dGlsc18xLkdMT0JBTF9MT0dTX0FQSV9LRVldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChnbG9iYWxfdXRpbHNfMS5fZ2xvYmFsLCBnbG9iYWxfdXRpbHNfMS5BUElfQkFDS1dBUkRTX0NPTVBBVElCSUxJVFlfVkVSU0lPTikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRoaXMuX3Byb3h5TG9nZ2VyUHJvdmlkZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbG9nZ2VyIGZyb20gdGhlIGdsb2JhbCBsb2dnZXIgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBMb2dnZXJcbiAgICAgKi9cbiAgICBnZXRMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dnZXJQcm92aWRlcigpLmdldExvZ2dlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqIFJlbW92ZSB0aGUgZ2xvYmFsIGxvZ2dlciBwcm92aWRlciAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGRlbGV0ZSBnbG9iYWxfdXRpbHNfMS5fZ2xvYmFsW2dsb2JhbF91dGlsc18xLkdMT0JBTF9MT0dTX0FQSV9LRVldO1xuICAgICAgICB0aGlzLl9wcm94eUxvZ2dlclByb3ZpZGVyID0gbmV3IFByb3h5TG9nZ2VyUHJvdmlkZXJfMS5Qcm94eUxvZ2dlclByb3ZpZGVyKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Mb2dzQVBJID0gTG9nc0FQSTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmxvZ3MgPSBleHBvcnRzLlByb3h5TG9nZ2VyUHJvdmlkZXIgPSBleHBvcnRzLlByb3h5TG9nZ2VyID0gZXhwb3J0cy5Ob29wTG9nZ2VyUHJvdmlkZXIgPSBleHBvcnRzLk5PT1BfTE9HR0VSX1BST1ZJREVSID0gZXhwb3J0cy5Ob29wTG9nZ2VyID0gZXhwb3J0cy5OT09QX0xPR0dFUiA9IGV4cG9ydHMuU2V2ZXJpdHlOdW1iZXIgPSB2b2lkIDA7XG52YXIgTG9nUmVjb3JkXzEgPSByZXF1aXJlKFwiLi90eXBlcy9Mb2dSZWNvcmRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZXZlcml0eU51bWJlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTG9nUmVjb3JkXzEuU2V2ZXJpdHlOdW1iZXI7IH0gfSk7XG52YXIgTm9vcExvZ2dlcl8xID0gcmVxdWlyZShcIi4vTm9vcExvZ2dlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5PT1BfTE9HR0VSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOb29wTG9nZ2VyXzEuTk9PUF9MT0dHRVI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb29wTG9nZ2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOb29wTG9nZ2VyXzEuTm9vcExvZ2dlcjsgfSB9KTtcbnZhciBOb29wTG9nZ2VyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL05vb3BMb2dnZXJQcm92aWRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5PT1BfTE9HR0VSX1BST1ZJREVSXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOb29wTG9nZ2VyUHJvdmlkZXJfMS5OT09QX0xPR0dFUl9QUk9WSURFUjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vb3BMb2dnZXJQcm92aWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcExvZ2dlclByb3ZpZGVyXzEuTm9vcExvZ2dlclByb3ZpZGVyOyB9IH0pO1xudmFyIFByb3h5TG9nZ2VyXzEgPSByZXF1aXJlKFwiLi9Qcm94eUxvZ2dlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb3h5TG9nZ2VyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm94eUxvZ2dlcl8xLlByb3h5TG9nZ2VyOyB9IH0pO1xudmFyIFByb3h5TG9nZ2VyUHJvdmlkZXJfMSA9IHJlcXVpcmUoXCIuL1Byb3h5TG9nZ2VyUHJvdmlkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm94eUxvZ2dlclByb3ZpZGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm94eUxvZ2dlclByb3ZpZGVyXzEuUHJveHlMb2dnZXJQcm92aWRlcjsgfSB9KTtcbmNvbnN0IGxvZ3NfMSA9IHJlcXVpcmUoXCIuL2FwaS9sb2dzXCIpO1xuZXhwb3J0cy5sb2dzID0gbG9nc18xLkxvZ3NBUEkuZ2V0SW5zdGFuY2UoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0U2VydmljZU5hbWUgPSB2b2lkIDA7XG5mdW5jdGlvbiBkZWZhdWx0U2VydmljZU5hbWUoKSB7XG4gICAgcmV0dXJuIGB1bmtub3duX3NlcnZpY2U6JHtwcm9jZXNzLmFyZ3YwfWA7XG59XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IGRlZmF1bHRTZXJ2aWNlTmFtZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHQtc2VydmljZS1uYW1lLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgZGVmYXVsdF9zZXJ2aWNlX25hbWVfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHQtc2VydmljZS1uYW1lXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFNlcnZpY2VOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWZhdWx0X3NlcnZpY2VfbmFtZV8xLmRlZmF1bHRTZXJ2aWNlTmFtZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0U2VydmljZU5hbWUgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRTZXJ2aWNlTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLmRlZmF1bHRTZXJ2aWNlTmFtZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pZGVudGl0eSA9IGV4cG9ydHMuaXNQcm9taXNlTGlrZSA9IHZvaWQgMDtcbmNvbnN0IGlzUHJvbWlzZUxpa2UgPSAodmFsKSA9PiB7XG4gICAgcmV0dXJuICh2YWwgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nKTtcbn07XG5leHBvcnRzLmlzUHJvbWlzZUxpa2UgPSBpc1Byb21pc2VMaWtlO1xuZnVuY3Rpb24gaWRlbnRpdHkoXykge1xuICAgIHJldHVybiBfO1xufVxuZXhwb3J0cy5pZGVudGl0eSA9IGlkZW50aXR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRSZXNvdXJjZSA9IGV4cG9ydHMuZW1wdHlSZXNvdXJjZSA9IGV4cG9ydHMucmVzb3VyY2VGcm9tRGV0ZWN0ZWRSZXNvdXJjZSA9IGV4cG9ydHMucmVzb3VyY2VGcm9tQXR0cmlidXRlcyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNsYXNzIFJlc291cmNlSW1wbCB7XG4gICAgX3Jhd0F0dHJpYnV0ZXM7XG4gICAgX2FzeW5jQXR0cmlidXRlc1BlbmRpbmcgPSBmYWxzZTtcbiAgICBfbWVtb2l6ZWRBdHRyaWJ1dGVzO1xuICAgIHN0YXRpYyBGcm9tQXR0cmlidXRlTGlzdChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBSZXNvdXJjZUltcGwoe30pO1xuICAgICAgICByZXMuX3Jhd0F0dHJpYnV0ZXMgPSBndWFyZGVkUmF3QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTtcbiAgICAgICAgcmVzLl9hc3luY0F0dHJpYnV0ZXNQZW5kaW5nID1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuZmlsdGVyKChbXywgdmFsXSkgPT4gKDAsIHV0aWxzXzEuaXNQcm9taXNlTGlrZSkodmFsKSkubGVuZ3RoID4gMDtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogQSBkaWN0aW9uYXJ5IG9mIGF0dHJpYnV0ZXMgd2l0aCBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgcHJvdmlkZVxuICAgICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnRpdHkgYXMgbnVtYmVycywgc3RyaW5ncyBvciBib29sZWFuc1xuICAgICAqIFRPRE86IENvbnNpZGVyIHRvIGFkZCBjaGVjay92YWxpZGF0aW9uIG9uIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgcmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHJlc291cmNlLmF0dHJpYnV0ZXMgPz8ge307XG4gICAgICAgIHRoaXMuX3Jhd0F0dHJpYnV0ZXMgPSBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5tYXAoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzUHJvbWlzZUxpa2UpKHYpKSB7XG4gICAgICAgICAgICAgICAgLy8gc2lkZS1lZmZlY3RcbiAgICAgICAgICAgICAgICB0aGlzLl9hc3luY0F0dHJpYnV0ZXNQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbaywgdl07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yYXdBdHRyaWJ1dGVzID0gZ3VhcmRlZFJhd0F0dHJpYnV0ZXModGhpcy5fcmF3QXR0cmlidXRlcyk7XG4gICAgfVxuICAgIGdldCBhc3luY0F0dHJpYnV0ZXNQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmNBdHRyaWJ1dGVzUGVuZGluZztcbiAgICB9XG4gICAgYXN5bmMgd2FpdEZvckFzeW5jQXR0cmlidXRlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jhd0F0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IFtrLCB2XSA9IHRoaXMuX3Jhd0F0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgICB0aGlzLl9yYXdBdHRyaWJ1dGVzW2ldID0gW2ssICgwLCB1dGlsc18xLmlzUHJvbWlzZUxpa2UpKHYpID8gYXdhaXQgdiA6IHZdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FzeW5jQXR0cmlidXRlc1BlbmRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ0FjY2Vzc2luZyByZXNvdXJjZSBhdHRyaWJ1dGVzIGJlZm9yZSBhc3luYyBhdHRyaWJ1dGVzIHNldHRsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbWVtb2l6ZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVtb2l6ZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuX3Jhd0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYFVuc2V0dGxlZCByZXNvdXJjZSBhdHRyaWJ1dGUgJHtrfSBza2lwcGVkYCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXR0cnNba10gPz89IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb25seSBtZW1vaXplIG91dHB1dCBpZiBhbGwgYXR0cmlidXRlcyBhcmUgc2V0dGxlZFxuICAgICAgICBpZiAoIXRoaXMuX2FzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX21lbW9pemVkQXR0cmlidXRlcyA9IGF0dHJzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRycztcbiAgICB9XG4gICAgZ2V0UmF3QXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jhd0F0dHJpYnV0ZXM7XG4gICAgfVxuICAgIG1lcmdlKHJlc291cmNlKSB7XG4gICAgICAgIGlmIChyZXNvdXJjZSA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudFxuICAgICAgICAvLyBTcGVjIHN0YXRlcyBpbmNvbWluZyBhdHRyaWJ1dGVzIG92ZXJyaWRlIGV4aXN0aW5nIGF0dHJpYnV0ZXNcbiAgICAgICAgcmV0dXJuIFJlc291cmNlSW1wbC5Gcm9tQXR0cmlidXRlTGlzdChbXG4gICAgICAgICAgICAuLi5yZXNvdXJjZS5nZXRSYXdBdHRyaWJ1dGVzKCksXG4gICAgICAgICAgICAuLi50aGlzLmdldFJhd0F0dHJpYnV0ZXMoKSxcbiAgICAgICAgXSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb3VyY2VGcm9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIFJlc291cmNlSW1wbC5Gcm9tQXR0cmlidXRlTGlzdChPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSk7XG59XG5leHBvcnRzLnJlc291cmNlRnJvbUF0dHJpYnV0ZXMgPSByZXNvdXJjZUZyb21BdHRyaWJ1dGVzO1xuZnVuY3Rpb24gcmVzb3VyY2VGcm9tRGV0ZWN0ZWRSZXNvdXJjZShkZXRlY3RlZFJlc291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUltcGwoZGV0ZWN0ZWRSZXNvdXJjZSk7XG59XG5leHBvcnRzLnJlc291cmNlRnJvbURldGVjdGVkUmVzb3VyY2UgPSByZXNvdXJjZUZyb21EZXRlY3RlZFJlc291cmNlO1xuZnVuY3Rpb24gZW1wdHlSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2VGcm9tQXR0cmlidXRlcyh7fSk7XG59XG5leHBvcnRzLmVtcHR5UmVzb3VyY2UgPSBlbXB0eVJlc291cmNlO1xuZnVuY3Rpb24gZGVmYXVsdFJlc291cmNlKCkge1xuICAgIHJldHVybiByZXNvdXJjZUZyb21BdHRyaWJ1dGVzKHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdOiAoMCwgcGxhdGZvcm1fMS5kZWZhdWx0U2VydmljZU5hbWUpKCksXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV06IGNvcmVfMS5TREtfSU5GT1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19MQU5HVUFHRV0sXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19OQU1FXTogY29yZV8xLlNES19JTkZPW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9URUxFTUVUUllfU0RLX05BTUVdLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1RFTEVNRVRSWV9TREtfVkVSU0lPTl06IGNvcmVfMS5TREtfSU5GT1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfVEVMRU1FVFJZX1NES19WRVJTSU9OXSxcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZGVmYXVsdFJlc291cmNlO1xuZnVuY3Rpb24gZ3VhcmRlZFJhd0F0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGlmICgoMCwgdXRpbHNfMS5pc1Byb21pc2VMaWtlKSh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBrLFxuICAgICAgICAgICAgICAgIHYuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygncHJvbWlzZSByZWplY3Rpb24gZm9yIHJlc291cmNlIGF0dHJpYnV0ZTogJXMgLSAlcycsIGssIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaywgdl07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXNvdXJjZUltcGwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRldGVjdFJlc291cmNlcyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFJlc291cmNlSW1wbF8xID0gcmVxdWlyZShcIi4vUmVzb3VyY2VJbXBsXCIpO1xuLyoqXG4gKiBSdW5zIGFsbCByZXNvdXJjZSBkZXRlY3RvcnMgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgbWVyZ2VkIGludG8gYSBzaW5nbGUgUmVzb3VyY2UuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciByZXNvdXJjZSBkZXRlY3Rpb25cbiAqL1xuY29uc3QgZGV0ZWN0UmVzb3VyY2VzID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gKGNvbmZpZy5kZXRlY3RvcnMgfHwgW10pLm1hcChkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gKDAsIFJlc291cmNlSW1wbF8xLnJlc291cmNlRnJvbURldGVjdGVkUmVzb3VyY2UpKGQuZGV0ZWN0KGNvbmZpZykpO1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtkLmNvbnN0cnVjdG9yLm5hbWV9IGZvdW5kIHJlc291cmNlLmAsIHJlc291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgJHtkLmNvbnN0cnVjdG9yLm5hbWV9IGZhaWxlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIFJlc291cmNlSW1wbF8xLmVtcHR5UmVzb3VyY2UpKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb3VyY2VzLnJlZHVjZSgoYWNjLCByZXNvdXJjZSkgPT4gYWNjLm1lcmdlKHJlc291cmNlKSwgKDAsIFJlc291cmNlSW1wbF8xLmVtcHR5UmVzb3VyY2UpKCkpO1xufTtcbmV4cG9ydHMuZGV0ZWN0UmVzb3VyY2VzID0gZGV0ZWN0UmVzb3VyY2VzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGV0ZWN0LXJlc291cmNlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW52RGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEVudkRldGVjdG9yIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYW5kIGNyZWF0ZSBhIFJlc291cmNlXG4gKiBmcm9tIHRoZSBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKi9cbmNsYXNzIEVudkRldGVjdG9yIHtcbiAgICAvLyBUeXBlLCBhdHRyaWJ1dGUga2V5cywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgc2hvdWxkIG5vdCBleGNlZWQgMjU2IGNoYXJhY3RlcnMuXG4gICAgX01BWF9MRU5HVEggPSAyNTU7XG4gICAgLy8gT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcy5cbiAgICBfQ09NTUFfU0VQQVJBVE9SID0gJywnO1xuICAgIC8vIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBjb250YWlucyBrZXkgdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgIF9MQUJFTF9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4gICAgX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSUyA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBncmVhdGVyIHRoYW4gMCBhbmQgbm90IGV4Y2VlZCAnICtcbiAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICcgY2hhcmFjdGVycy4nO1xuICAgIF9FUlJPUl9NRVNTQUdFX0lOVkFMSURfVkFMVUUgPSAnc2hvdWxkIGJlIGEgQVNDSUkgc3RyaW5nIHdpdGggYSBsZW5ndGggbm90IGV4Y2VlZCAnICtcbiAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICcgY2hhcmFjdGVycy4nO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUmVzb3VyY2V9IHBvcHVsYXRlZCB3aXRoIGF0dHJpYnV0ZXMgZnJvbSB0aGVcbiAgICAgKiBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnQgdmFyaWFibGUuIE5vdGUgdGhpcyBpcyBhbiBhc3luY1xuICAgICAqIGZ1bmN0aW9uIHRvIGNvbmZvcm0gdG8gdGhlIERldGVjdG9yIGludGVyZmFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIHJlc291cmNlIGRldGVjdGlvbiBjb25maWdcbiAgICAgKi9cbiAgICBkZXRlY3QoX2NvbmZpZykge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMnKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX1NFUlZJQ0VfTkFNRScpO1xuICAgICAgICBpZiAocmF3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBdHRyaWJ1dGVzID0gdGhpcy5fcGFyc2VSZXNvdXJjZUF0dHJpYnV0ZXMocmF3QXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCBwYXJzZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgRW52RGV0ZWN0b3IgZmFpbGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VydmljZU5hbWUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV0gPSBzZXJ2aWNlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXR0cmlidXRlIG1hcCBmcm9tIHRoZSBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52aXJvbm1lbnRcbiAgICAgKiB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUzogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzIGRlc2NyaWJpbmdcbiAgICAgKiB0aGUgc291cmNlIGluIG1vcmUgZGV0YWlsLCBlLmcuIOKAnGtleTE9dmFsMSxrZXkyPXZhbDLigJ0uIERvbWFpbiBuYW1lcyBhbmRcbiAgICAgKiBwYXRocyBhcmUgYWNjZXB0ZWQgYXMgYXR0cmlidXRlIGtleXMuIFZhbHVlcyBtYXkgYmUgcXVvdGVkIG9yIHVucXVvdGVkIGluXG4gICAgICogZ2VuZXJhbC4gSWYgYSB2YWx1ZSBjb250YWlucyB3aGl0ZXNwYWNlLCA9LCBvciBcIiBjaGFyYWN0ZXJzLCBpdCBtdXN0XG4gICAgICogYWx3YXlzIGJlIHF1b3RlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByYXdFbnZBdHRyaWJ1dGVzIFRoZSByZXNvdXJjZSBhdHRyaWJ1dGVzIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3RcbiAgICAgKiBvZiBrZXkvdmFsdWUgcGFpcnMuXG4gICAgICogQHJldHVybnMgVGhlIHNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIF9wYXJzZVJlc291cmNlQXR0cmlidXRlcyhyYXdFbnZBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICghcmF3RW52QXR0cmlidXRlcylcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBjb25zdCByYXdBdHRyaWJ1dGVzID0gcmF3RW52QXR0cmlidXRlcy5zcGxpdCh0aGlzLl9DT01NQV9TRVBBUkFUT1IsIC0xKTtcbiAgICAgICAgZm9yIChjb25zdCByYXdBdHRyaWJ1dGUgb2YgcmF3QXR0cmlidXRlcykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsdWVQYWlyID0gcmF3QXR0cmlidXRlLnNwbGl0KHRoaXMuX0xBQkVMX0tFWV9WQUxVRV9TUExJVFRFUiwgLTEpO1xuICAgICAgICAgICAgaWYgKGtleVZhbHVlUGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBrZXlWYWx1ZVBhaXI7XG4gICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgdHJpbW1lZC5cbiAgICAgICAgICAgIGtleSA9IGtleS50cmltKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKS5zcGxpdCgvXlwifFwiJC8pLmpvaW4oJycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkQW5kTm90RW1wdHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0cmlidXRlIGtleSAke3RoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSU31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dHJpYnV0ZSB2YWx1ZSAke3RoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9WQUxVRX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggbm90IGV4Y2VlZCBfTUFYX0xFTkdUSCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ciBUaGUgU3RyaW5nIHRvIGJlIHZhbGlkYXRlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBTdHJpbmcgaXMgdmFsaWQuXG4gICAgICovXG4gICAgX2lzVmFsaWQobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZS5sZW5ndGggPD0gdGhpcy5fTUFYX0xFTkdUSCAmJiB0aGlzLl9pc0JhZ2dhZ2VPY3RldFN0cmluZyhuYW1lKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2JhZ2dhZ2UvI2RlZmluaXRpb25cbiAgICBfaXNCYWdnYWdlT2N0ZXRTdHJpbmcoc3RyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKGNoIDwgMHgyMSB8fCBjaCA9PT0gMHgyYyB8fCBjaCA9PT0gMHgzYiB8fCBjaCA9PT0gMHg1YyB8fCBjaCA+IDB4N2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggZ3JlYXRlciB0aGFuIDAgYW5kIG5vdCBleGNlZWQgX01BWF9MRU5HVEggY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIFN0cmluZyB0byBiZSB2YWxpZGF0ZWQuXG4gICAgICogQHJldHVybnMgV2hldGhlciB0aGUgU3RyaW5nIGlzIHZhbGlkIGFuZCBub3QgZW1wdHkuXG4gICAgICovXG4gICAgX2lzVmFsaWRBbmROb3RFbXB0eShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiAwICYmIHRoaXMuX2lzVmFsaWQoc3RyKTtcbiAgICB9XG59XG5leHBvcnRzLmVudkRldGVjdG9yID0gbmV3IEVudkRldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbnZEZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfTkFNRSA9IGV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfREVTQ1JJUFRJT04gPSBleHBvcnRzLkFUVFJfU0VSVklDRV9OQU1FU1BBQ0UgPSBleHBvcnRzLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRCA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRSA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfREVTQ1JJUFRJT04gPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSBleHBvcnRzLkFUVFJfUFJPQ0VTU19PV05FUiA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfTkFNRSA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0NPTU1BTkRfQVJHUyA9IGV4cG9ydHMuQVRUUl9QUk9DRVNTX0NPTU1BTkQgPSBleHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9IGV4cG9ydHMuQVRUUl9PU19UWVBFID0gZXhwb3J0cy5BVFRSX0s4U19QT0RfTkFNRSA9IGV4cG9ydHMuQVRUUl9LOFNfTkFNRVNQQUNFX05BTUUgPSBleHBvcnRzLkFUVFJfSzhTX0RFUExPWU1FTlRfTkFNRSA9IGV4cG9ydHMuQVRUUl9LOFNfQ0xVU1RFUl9OQU1FID0gZXhwb3J0cy5BVFRSX0hPU1RfVFlQRSA9IGV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSBleHBvcnRzLkFUVFJfSE9TVF9JTUFHRV9WRVJTSU9OID0gZXhwb3J0cy5BVFRSX0hPU1RfSU1BR0VfTkFNRSA9IGV4cG9ydHMuQVRUUl9IT1NUX0lNQUdFX0lEID0gZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSBleHBvcnRzLkFUVFJfSE9TVF9BUkNIID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9UQUdTID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9IGV4cG9ydHMuQVRUUl9DTE9VRF9SRUdJT04gPSBleHBvcnRzLkFUVFJfQ0xPVURfUFJPVklERVIgPSBleHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSBleHBvcnRzLkFUVFJfQ0xPVURfQUNDT1VOVF9JRCA9IHZvaWQgMDtcbi8qXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb3B5IG9mIHVuc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb24gZGVmaW5pdGlvbnNcbiAqIHVzZWQgYnkgdGhpcyBwYWNrYWdlLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1qcy90cmVlL21haW4vc2VtYW50aWMtY29udmVudGlvbnMjdW5zdGFibGUtc2VtY29udlxuICovXG4vKipcbiAqIFRoZSBjbG91ZCBhY2NvdW50IElEIHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0by5cbiAqXG4gKiBAZXhhbXBsZSAxMTExMTExMTExMTFcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnlcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9BQ0NPVU5UX0lEID0gJ2Nsb3VkLmFjY291bnQuaWQnO1xuLyoqXG4gKiBDbG91ZCByZWdpb25zIG9mdGVuIGhhdmUgbXVsdGlwbGUsIGlzb2xhdGVkIGxvY2F0aW9ucyBrbm93biBhcyB6b25lcyB0byBpbmNyZWFzZSBhdmFpbGFiaWxpdHkuIEF2YWlsYWJpbGl0eSB6b25lIHJlcHJlc2VudHMgdGhlIHpvbmUgd2hlcmUgdGhlIHJlc291cmNlIGlzIHJ1bm5pbmcuXG4gKlxuICogQGV4YW1wbGUgdXMtZWFzdC0xY1xuICpcbiAqIEBub3RlIEF2YWlsYWJpbGl0eSB6b25lcyBhcmUgY2FsbGVkIFwiem9uZXNcIiBvbiBBbGliYWJhIENsb3VkIGFuZCBHb29nbGUgQ2xvdWQuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUgPSAnY2xvdWQuYXZhaWxhYmlsaXR5X3pvbmUnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBjbG91ZCBwcm92aWRlci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9DTE9VRF9QUk9WSURFUiA9ICdjbG91ZC5wcm92aWRlcic7XG4vKipcbiAqIFRoZSBnZW9ncmFwaGljYWwgcmVnaW9uIHRoZSByZXNvdXJjZSBpcyBydW5uaW5nLlxuICpcbiAqIEBleGFtcGxlIHVzLWNlbnRyYWwxXG4gKiBAZXhhbXBsZSB1cy1lYXN0LTFcbiAqXG4gKiBAbm90ZSBSZWZlciB0byB5b3VyIHByb3ZpZGVyJ3MgZG9jcyB0byBzZWUgdGhlIGF2YWlsYWJsZSByZWdpb25zLCBmb3IgZXhhbXBsZSBbQWxpYmFiYSBDbG91ZCByZWdpb25zXShodHRwczovL3d3dy5hbGliYWJhY2xvdWQuY29tL2hlbHAvZG9jLWRldGFpbC80MDY1NC5odG0pLCBbQVdTIHJlZ2lvbnNdKGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYWJvdXQtYXdzL2dsb2JhbC1pbmZyYXN0cnVjdHVyZS9yZWdpb25zX2F6LyksIFtBenVyZSByZWdpb25zXShodHRwczovL2F6dXJlLm1pY3Jvc29mdC5jb20vZ2xvYmFsLWluZnJhc3RydWN0dXJlL2dlb2dyYXBoaWVzLyksIFtHb29nbGUgQ2xvdWQgcmVnaW9uc10oaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2Fib3V0L2xvY2F0aW9ucyksIG9yIFtUZW5jZW50IENsb3VkIHJlZ2lvbnNdKGh0dHBzOi8vd3d3LnRlbmNlbnRjbG91ZC5jb20vZG9jdW1lbnQvcHJvZHVjdC8yMTMvNjA5MSkuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ0xPVURfUkVHSU9OID0gJ2Nsb3VkLnJlZ2lvbic7XG4vKipcbiAqIENvbnRhaW5lciBJRC4gVXN1YWxseSBhIFVVSUQsIGFzIGZvciBleGFtcGxlIHVzZWQgdG8gW2lkZW50aWZ5IERvY2tlciBjb250YWluZXJzXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvY29udGFpbmVycy9ydW4vI2NvbnRhaW5lci1pZGVudGlmaWNhdGlvbikuIFRoZSBVVUlEIG1pZ2h0IGJlIGFiYnJldmlhdGVkLlxuICpcbiAqIEBleGFtcGxlIGEzYmY5MGUwMDZiMlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JRCA9ICdjb250YWluZXIuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBpbWFnZSB0aGUgY29udGFpbmVyIHdhcyBidWlsdCBvbi5cbiAqXG4gKiBAZXhhbXBsZSBnY3IuaW8vb3BlbnRlbGVtZXRyeS9vcGVyYXRvclxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9OQU1FID0gJ2NvbnRhaW5lci5pbWFnZS5uYW1lJztcbi8qKlxuICogQ29udGFpbmVyIGltYWdlIHRhZ3MuIEFuIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluIFtEb2NrZXIgSW1hZ2UgSW5zcGVjdF0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2FwaS92MS40My8jdGFnL0ltYWdlL29wZXJhdGlvbi9JbWFnZUluc3BlY3QpLiBTaG91bGQgYmUgb25seSB0aGUgYDx0YWc+YCBzZWN0aW9uIG9mIHRoZSBmdWxsIG5hbWUgZm9yIGV4YW1wbGUgZnJvbSBgcmVnaXN0cnkuZXhhbXBsZS5jb20vbXktb3JnL215LWltYWdlOjx0YWc+YC5cbiAqXG4gKiBAZXhhbXBsZSBbXCJ2MS4yNy4xXCIsIFwiMy41LjctMFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0NPTlRBSU5FUl9JTUFHRV9UQUdTID0gJ2NvbnRhaW5lci5pbWFnZS50YWdzJztcbi8qKlxuICogQ29udGFpbmVyIG5hbWUgdXNlZCBieSBjb250YWluZXIgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfQ09OVEFJTkVSX05BTUUgPSAnY29udGFpbmVyLm5hbWUnO1xuLyoqXG4gKiBUaGUgQ1BVIGFyY2hpdGVjdHVyZSB0aGUgaG9zdCBzeXN0ZW0gaXMgcnVubmluZyBvbi5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0FSQ0ggPSAnaG9zdC5hcmNoJztcbi8qKlxuICogVW5pcXVlIGhvc3QgSUQuIEZvciBDbG91ZCwgdGhpcyBtdXN0IGJlIHRoZSBpbnN0YW5jZV9pZCBhc3NpZ25lZCBieSB0aGUgY2xvdWQgcHJvdmlkZXIuIEZvciBub24tY29udGFpbmVyaXplZCBzeXN0ZW1zLCB0aGlzIHNob3VsZCBiZSB0aGUgYG1hY2hpbmUtaWRgLiBTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgc291cmNlcyB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSBgbWFjaGluZS1pZGAgYmFzZWQgb24gb3BlcmF0aW5nIHN5c3RlbS5cbiAqXG4gKiBAZXhhbXBsZSBmZGJmNzllOGFmOTRjYjdmOWU4ZGYzNjc4OTE4NzA1MlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSUQgPSAnaG9zdC5pZCc7XG4vKipcbiAqIFZNIGltYWdlIElEIG9yIGhvc3QgT1MgaW1hZ2UgSUQuIEZvciBDbG91ZCwgdGhpcyB2YWx1ZSBpcyBmcm9tIHRoZSBwcm92aWRlci5cbiAqXG4gKiBAZXhhbXBsZSBhbWktMDdiMDZiNDQyOTIxODMxZTVcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX0lNQUdFX0lEID0gJ2hvc3QuaW1hZ2UuaWQnO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBWTSBpbWFnZSBvciBPUyBpbnN0YWxsIHRoZSBob3N0IHdhcyBpbnN0YW50aWF0ZWQgZnJvbS5cbiAqXG4gKiBAZXhhbXBsZSBpbmZyYS1hbWktZWtzLXdvcmtlci1ub2RlLTdkNGVjNzgzMTJcbiAqIEBleGFtcGxlIENlbnRPUy04LXg4Nl82NC0xOTA1XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSE9TVF9JTUFHRV9OQU1FID0gJ2hvc3QuaW1hZ2UubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgVk0gaW1hZ2Ugb3IgaG9zdCBPUyBhcyBkZWZpbmVkIGluIFtWZXJzaW9uIEF0dHJpYnV0ZXNdKC9kb2NzL3Jlc291cmNlL1JFQURNRS5tZCN2ZXJzaW9uLWF0dHJpYnV0ZXMpLlxuICpcbiAqIEBleGFtcGxlIDAuMVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0hPU1RfSU1BR0VfVkVSU0lPTiA9ICdob3N0LmltYWdlLnZlcnNpb24nO1xuLyoqXG4gKiBOYW1lIG9mIHRoZSBob3N0LiBPbiBVbml4IHN5c3RlbXMsIGl0IG1heSBjb250YWluIHdoYXQgdGhlIGhvc3RuYW1lIGNvbW1hbmQgcmV0dXJucywgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSwgb3IgYW5vdGhlciBuYW1lIHNwZWNpZmllZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAZXhhbXBsZSBvcGVudGVsZW1ldHJ5LXRlc3RcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX05BTUUgPSAnaG9zdC5uYW1lJztcbi8qKlxuICogVHlwZSBvZiBob3N0LiBGb3IgQ2xvdWQsIHRoaXMgbXVzdCBiZSB0aGUgbWFjaGluZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlIG4xLXN0YW5kYXJkLTFcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9IT1NUX1RZUEUgPSAnaG9zdC50eXBlJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gKlxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeS1jbHVzdGVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSzhTX0NMVVNURVJfTkFNRSA9ICdrOHMuY2x1c3Rlci5uYW1lJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIERlcGxveW1lbnQuXG4gKlxuICogQGV4YW1wbGUgb3BlbnRlbGVtZXRyeVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0s4U19ERVBMT1lNRU5UX05BTUUgPSAnazhzLmRlcGxveW1lbnQubmFtZSc7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBuYW1lc3BhY2UgdGhhdCB0aGUgcG9kIGlzIHJ1bm5pbmcgaW4uXG4gKlxuICogQGV4YW1wbGUgZGVmYXVsdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX0s4U19OQU1FU1BBQ0VfTkFNRSA9ICdrOHMubmFtZXNwYWNlLm5hbWUnO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgUG9kLlxuICpcbiAqIEBleGFtcGxlIG9wZW50ZWxlbWV0cnktcG9kLWF1dG9jb25mXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfSzhTX1BPRF9OQU1FID0gJ2s4cy5wb2QubmFtZSc7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVFlQRSA9ICdvcy50eXBlJztcbi8qKlxuICogVGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFzIGRlZmluZWQgaW4gW1ZlcnNpb24gQXR0cmlidXRlc10oL2RvY3MvcmVzb3VyY2UvUkVBRE1FLm1kI3ZlcnNpb24tYXR0cmlidXRlcykuXG4gKlxuICogQGV4YW1wbGUgMTQuMi4xXG4gKiBAZXhhbXBsZSAxOC4wNC4xXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfT1NfVkVSU0lPTiA9ICdvcy52ZXJzaW9uJztcbi8qKlxuICogVGhlIGNvbW1hbmQgdXNlZCB0byBsYXVuY2ggdGhlIHByb2Nlc3MgKGkuZS4gdGhlIGNvbW1hbmQgbmFtZSkuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHplcm90aCBzdHJpbmcgaW4gYHByb2MvW3BpZF0vY21kbGluZWAuIE9uIFdpbmRvd3MsIGNhbiBiZSBzZXQgdG8gdGhlIGZpcnN0IHBhcmFtZXRlciBleHRyYWN0ZWQgZnJvbSBgR2V0Q29tbWFuZExpbmVXYC5cbiAqXG4gKiBAZXhhbXBsZSBjbWQvb3RlbGNvbFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfQ09NTUFORCA9ICdwcm9jZXNzLmNvbW1hbmQnO1xuLyoqXG4gKiBBbGwgdGhlIGNvbW1hbmQgYXJndW1lbnRzIChpbmNsdWRpbmcgdGhlIGNvbW1hbmQvZXhlY3V0YWJsZSBpdHNlbGYpIGFzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLiBPbiBMaW51eC1iYXNlZCBzeXN0ZW1zIChhbmQgc29tZSBvdGhlciBVbml4b2lkIHN5c3RlbXMgc3VwcG9ydGluZyBwcm9jZnMpLCBjYW4gYmUgc2V0IGFjY29yZGluZyB0byB0aGUgbGlzdCBvZiBudWxsLWRlbGltaXRlZCBzdHJpbmdzIGV4dHJhY3RlZCBmcm9tIGBwcm9jL1twaWRdL2NtZGxpbmVgLiBGb3IgbGliYy1iYXNlZCBleGVjdXRhYmxlcywgdGhpcyB3b3VsZCBiZSB0aGUgZnVsbCBhcmd2IHZlY3RvciBwYXNzZWQgdG8gYG1haW5gLlxuICpcbiAqIEBleGFtcGxlIFtcImNtZC9vdGVjb2xcIiwgXCItLWNvbmZpZz1jb25maWcueWFtbFwiXVxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfQ09NTUFORF9BUkdTID0gJ3Byb2Nlc3MuY29tbWFuZF9hcmdzJztcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZS4gT24gTGludXggYmFzZWQgc3lzdGVtcywgdGhpcyAqKlNIT1VMRCoqIGJlIHNldCB0byB0aGUgYmFzZSBuYW1lIG9mIHRoZSB0YXJnZXQgb2YgYC9wcm9jL1twaWRdL2V4ZWAuIE9uIFdpbmRvd3MsIHRoaXMgKipTSE9VTEQqKiBiZSBzZXQgdG8gdGhlIGJhc2UgbmFtZSBvZiBgR2V0UHJvY2Vzc0ltYWdlRmlsZU5hbWVXYC5cbiAqXG4gKiBAZXhhbXBsZSBvdGVsY29sXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19FWEVDVVRBQkxFX05BTUUgPSAncHJvY2Vzcy5leGVjdXRhYmxlLm5hbWUnO1xuLyoqXG4gKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9jZXNzIGV4ZWN1dGFibGUuIE9uIExpbnV4IGJhc2VkIHN5c3RlbXMsIGNhbiBiZSBzZXQgdG8gdGhlIHRhcmdldCBvZiBgcHJvYy9bcGlkXS9leGVgLiBPbiBXaW5kb3dzLCBjYW4gYmUgc2V0IHRvIHRoZSByZXN1bHQgb2YgYEdldFByb2Nlc3NJbWFnZUZpbGVOYW1lV2AuXG4gKlxuICogQGV4YW1wbGUgL3Vzci9iaW4vY21kL290ZWxjb2xcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSCA9ICdwcm9jZXNzLmV4ZWN1dGFibGUucGF0aCc7XG4vKipcbiAqIFRoZSB1c2VybmFtZSBvZiB0aGUgdXNlciB0aGF0IG93bnMgdGhlIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgcm9vdFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfT1dORVIgPSAncHJvY2Vzcy5vd25lcic7XG4vKipcbiAqIFByb2Nlc3MgaWRlbnRpZmllciAoUElEKS5cbiAqXG4gKiBAZXhhbXBsZSAxMjM0XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19QSUQgPSAncHJvY2Vzcy5waWQnO1xuLyoqXG4gKiBBbiBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGFib3V0IHRoZSBydW50aW1lIG9mIHRoZSBwcm9jZXNzLCBmb3IgZXhhbXBsZSBhIHNwZWNpZmljIHZlbmRvciBjdXN0b21pemF0aW9uIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEBleGFtcGxlIFwiRWNsaXBzZSBPcGVuSjkgRWNsaXBzZSBPcGVuSjkgVk0gb3Blbmo5LTAuMjEuMFwiXG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OID0gJ3Byb2Nlc3MucnVudGltZS5kZXNjcmlwdGlvbic7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBydW50aW1lIG9mIHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiBAZXhhbXBsZSBPcGVuSkRLIFJ1bnRpbWUgRW52aXJvbm1lbnRcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRSA9ICdwcm9jZXNzLnJ1bnRpbWUubmFtZSc7XG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBydW50aW1lIG9mIHRoaXMgcHJvY2VzcywgYXMgcmV0dXJuZWQgYnkgdGhlIHJ1bnRpbWUgd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogQGV4YW1wbGUgXCIxNC4wLjJcIlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OID0gJ3Byb2Nlc3MucnVudGltZS52ZXJzaW9uJztcbi8qKlxuICogVGhlIHN0cmluZyBJRCBvZiB0aGUgc2VydmljZSBpbnN0YW5jZS5cbiAqXG4gKiBAZXhhbXBsZSA2MjdjYzQ5My1mMzEwLTQ3ZGUtOTZiZC03MTQxMGI3ZGVjMDlcbiAqXG4gKiBAbm90ZSAqKk1VU1QqKiBiZSB1bmlxdWUgZm9yIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHNhbWUgYHNlcnZpY2UubmFtZXNwYWNlLHNlcnZpY2UubmFtZWAgcGFpciAoaW4gb3RoZXIgd29yZHNcbiAqIGBzZXJ2aWNlLm5hbWVzcGFjZSxzZXJ2aWNlLm5hbWUsc2VydmljZS5pbnN0YW5jZS5pZGAgdHJpcGxldCAqKk1VU1QqKiBiZSBnbG9iYWxseSB1bmlxdWUpLiBUaGUgSUQgaGVscHMgdG9cbiAqIGRpc3Rpbmd1aXNoIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBzZXJ2aWNlIHRoYXQgZXhpc3QgYXQgdGhlIHNhbWUgdGltZSAoZS5nLiBpbnN0YW5jZXMgb2YgYSBob3Jpem9udGFsbHkgc2NhbGVkXG4gKiBzZXJ2aWNlKS5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgU0RLcywgYXJlIHJlY29tbWVuZGVkIHRvIGdlbmVyYXRlIGEgcmFuZG9tIFZlcnNpb24gMSBvciBWZXJzaW9uIDQgW1JGQ1xuICogNDEyMl0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQxMjIudHh0KSBVVUlELCBidXQgYXJlIGZyZWUgdG8gdXNlIGFuIGluaGVyZW50IHVuaXF1ZSBJRCBhcyB0aGUgc291cmNlIG9mXG4gKiB0aGlzIHZhbHVlIGlmIHN0YWJpbGl0eSBpcyBkZXNpcmFibGUuIEluIHRoYXQgY2FzZSwgdGhlIElEICoqU0hPVUxEKiogYmUgdXNlZCBhcyBzb3VyY2Ugb2YgYSBVVUlEIFZlcnNpb24gNSBhbmRcbiAqICoqU0hPVUxEKiogdXNlIHRoZSBmb2xsb3dpbmcgVVVJRCBhcyB0aGUgbmFtZXNwYWNlOiBgNGQ2MzAwOWEtOGQwZi0xMWVlLWFhZDctNGM3OTZlZDhlMzIwYC5cbiAqXG4gKiBVVUlEcyBhcmUgdHlwaWNhbGx5IHJlY29tbWVuZGVkLCBhcyBvbmx5IGFuIG9wYXF1ZSB2YWx1ZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGlkZW50aWZ5aW5nIGEgc2VydmljZSBpbnN0YW5jZSBpc1xuICogbmVlZGVkLiBTaW1pbGFyIHRvIHdoYXQgY2FuIGJlIHNlZW4gaW4gdGhlIG1hbiBwYWdlIGZvciB0aGVcbiAqIFtgL2V0Yy9tYWNoaW5lLWlkYF0oaHR0cHM6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL2xhdGVzdC9tYWNoaW5lLWlkLmh0bWwpIGZpbGUsIHRoZSB1bmRlcmx5aW5nXG4gKiBkYXRhLCBzdWNoIGFzIHBvZCBuYW1lIGFuZCBuYW1lc3BhY2Ugc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY29uZmlkZW50aWFsLCBiZWluZyB0aGUgdXNlcidzIGNob2ljZSB0byBleHBvc2UgaXRcbiAqIG9yIG5vdCB2aWEgYW5vdGhlciByZXNvdXJjZSBhdHRyaWJ1dGUuXG4gKlxuICogRm9yIGFwcGxpY2F0aW9ucyBydW5uaW5nIGJlaGluZCBhbiBhcHBsaWNhdGlvbiBzZXJ2ZXIgKGxpa2UgdW5pY29ybiksIHdlIGRvIG5vdCByZWNvbW1lbmQgdXNpbmcgb25lIGlkZW50aWZpZXJcbiAqIGZvciBhbGwgcHJvY2Vzc2VzIHBhcnRpY2lwYXRpbmcgaW4gdGhlIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBpdCdzIHJlY29tbWVuZGVkIGVhY2ggZGl2aXNpb24gKGUuZy4gYSB3b3JrZXJcbiAqIHRocmVhZCBpbiB1bmljb3JuKSB0byBoYXZlIGl0cyBvd24gaW5zdGFuY2UuaWQuXG4gKlxuICogSXQncyBub3QgcmVjb21tZW5kZWQgZm9yIGEgQ29sbGVjdG9yIHRvIHNldCBgc2VydmljZS5pbnN0YW5jZS5pZGAgaWYgaXQgY2FuJ3QgdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmUgdGhlXG4gKiBzZXJ2aWNlIGluc3RhbmNlIHRoYXQgaXMgZ2VuZXJhdGluZyB0aGF0IHRlbGVtZXRyeS4gRm9yIGluc3RhbmNlLCBjcmVhdGluZyBhbiBVVUlEIGJhc2VkIG9uIGBwb2QubmFtZWAgd2lsbFxuICogbGlrZWx5IGJlIHdyb25nLCBhcyB0aGUgQ29sbGVjdG9yIG1pZ2h0IG5vdCBrbm93IGZyb20gd2hpY2ggY29udGFpbmVyIHdpdGhpbiB0aGF0IHBvZCB0aGUgdGVsZW1ldHJ5IG9yaWdpbmF0ZWQuXG4gKiBIb3dldmVyLCBDb2xsZWN0b3JzIGNhbiBzZXQgdGhlIGBzZXJ2aWNlLmluc3RhbmNlLmlkYCBpZiB0aGV5IGNhbiB1bmFtYmlndW91c2x5IGRldGVybWluZSB0aGUgc2VydmljZSBpbnN0YW5jZVxuICogZm9yIHRoYXQgdGVsZW1ldHJ5LiBUaGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSBmb3Igc2NyYXBpbmcgcmVjZWl2ZXJzLCBhcyB0aGV5IGtub3cgdGhlIHRhcmdldCBhZGRyZXNzIGFuZFxuICogcG9ydC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9TRVJWSUNFX0lOU1RBTkNFX0lEID0gJ3NlcnZpY2UuaW5zdGFuY2UuaWQnO1xuLyoqXG4gKiBBIG5hbWVzcGFjZSBmb3IgYHNlcnZpY2UubmFtZWAuXG4gKlxuICogQGV4YW1wbGUgU2hvcFxuICpcbiAqIEBub3RlIEEgc3RyaW5nIHZhbHVlIGhhdmluZyBhIG1lYW5pbmcgdGhhdCBoZWxwcyB0byBkaXN0aW5ndWlzaCBhIGdyb3VwIG9mIHNlcnZpY2VzLCBmb3IgZXhhbXBsZSB0aGUgdGVhbSBuYW1lIHRoYXQgb3ducyBhIGdyb3VwIG9mIHNlcnZpY2VzLiBgc2VydmljZS5uYW1lYCBpcyBleHBlY3RlZCB0byBiZSB1bmlxdWUgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS4gSWYgYHNlcnZpY2UubmFtZXNwYWNlYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBSZXNvdXJjZSB0aGVuIGBzZXJ2aWNlLm5hbWVgIGlzIGV4cGVjdGVkIHRvIGJlIHVuaXF1ZSBmb3IgYWxsIHNlcnZpY2VzIHRoYXQgaGF2ZSBubyBleHBsaWNpdCBuYW1lc3BhY2UgZGVmaW5lZCAoc28gdGhlIGVtcHR5L3Vuc3BlY2lmaWVkIG5hbWVzcGFjZSBpcyBzaW1wbHkgb25lIG1vcmUgdmFsaWQgbmFtZXNwYWNlKS4gWmVyby1sZW5ndGggbmFtZXNwYWNlIHN0cmluZyBpcyBhc3N1bWVkIGVxdWFsIHRvIHVuc3BlY2lmaWVkIG5hbWVzcGFjZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9TRVJWSUNFX05BTUVTUEFDRSA9ICdzZXJ2aWNlLm5hbWVzcGFjZSc7XG4vKipcbiAqIEFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHdlYiBlbmdpbmUgKGUuZy4gZGV0YWlsZWQgdmVyc2lvbiBhbmQgZWRpdGlvbiBpbmZvcm1hdGlvbikuXG4gKlxuICogQGV4YW1wbGUgV2lsZEZseSBGdWxsIDIxLjAuMC5GaW5hbCAoV2lsZEZseSBDb3JlIDEzLjAuMS5GaW5hbCkgLSAyLjIuMi5GaW5hbFxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBhdHRyaWJ1dGUgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgaW4gbWlub3IgcmVsZWFzZXMgb2YgYEBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zYC5cbiAqL1xuZXhwb3J0cy5BVFRSX1dFQkVOR0lORV9ERVNDUklQVElPTiA9ICd3ZWJlbmdpbmUuZGVzY3JpcHRpb24nO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgd2ViIGVuZ2luZS5cbiAqXG4gKiBAZXhhbXBsZSBXaWxkRmx5XG4gKlxuICogQGV4cGVyaW1lbnRhbCBUaGlzIGF0dHJpYnV0ZSBpcyBleHBlcmltZW50YWwgYW5kIGlzIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciByZWxlYXNlcyBvZiBgQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNgLlxuICovXG5leHBvcnRzLkFUVFJfV0VCRU5HSU5FX05BTUUgPSAnd2ViZW5naW5lLm5hbWUnO1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgd2ViIGVuZ2luZS5cbiAqXG4gKiBAZXhhbXBsZSAyMS4wLjBcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgYXR0cmlidXRlIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHJlbGVhc2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc2AuXG4gKi9cbmV4cG9ydHMuQVRUUl9XRUJFTkdJTkVfVkVSU0lPTiA9ICd3ZWJlbmdpbmUudmVyc2lvbic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leGVjQXN5bmMgPSB2b2lkIDA7XG5jb25zdCBjaGlsZF9wcm9jZXNzID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7XG5jb25zdCB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5leHBvcnRzLmV4ZWNBc3luYyA9IHV0aWwucHJvbWlzaWZ5KGNoaWxkX3Byb2Nlc3MuZXhlYyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjQXN5bmMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IHZvaWQgMDtcbmNvbnN0IGV4ZWNBc3luY18xID0gcmVxdWlyZShcIi4vZXhlY0FzeW5jXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKCdpb3JlZyAtcmQxIC1jIFwiSU9QbGF0Zm9ybUV4cGVydERldmljZVwiJyk7XG4gICAgICAgIGNvbnN0IGlkTGluZSA9IHJlc3VsdC5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC5maW5kKGxpbmUgPT4gbGluZS5pbmNsdWRlcygnSU9QbGF0Zm9ybVVVSUQnKSk7XG4gICAgICAgIGlmICghaWRMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnRzID0gaWRMaW5lLnNwbGl0KCdcIiA9IFwiJyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1sxXS5zbGljZSgwLCAtMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3IgcmVhZGluZyBtYWNoaW5lIGlkOiAke2V9YCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IGdldE1hY2hpbmVJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hY2hpbmVJZC1kYXJ3aW4uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5hc3luYyBmdW5jdGlvbiBnZXRNYWNoaW5lSWQoKSB7XG4gICAgY29uc3QgcGF0aHMgPSBbJy9ldGMvbWFjaGluZS1pZCcsICcvdmFyL2xpYi9kYnVzL21hY2hpbmUtaWQnXTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZzXzEucHJvbWlzZXMucmVhZEZpbGUocGF0aCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYGVycm9yIHJlYWRpbmcgbWFjaGluZSBpZDogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IGdldE1hY2hpbmVJZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hY2hpbmVJZC1saW51eC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuY29uc3QgZnNfMSA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IGV4ZWNBc3luY18xID0gcmVxdWlyZShcIi4vZXhlY0FzeW5jXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZzXzEucHJvbWlzZXMucmVhZEZpbGUoJy9ldGMvaG9zdGlkJywgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3IgcmVhZGluZyBtYWNoaW5lIGlkOiAke2V9YCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKCdrZW52IC1xIHNtYmlvcy5zeXN0ZW0udXVpZCcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGFwaV8xLmRpYWcuZGVidWcoYGVycm9yIHJlYWRpbmcgbWFjaGluZSBpZDogJHtlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSBnZXRNYWNoaW5lSWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRNYWNoaW5lSWQtYnNkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSB2b2lkIDA7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5jb25zdCBleGVjQXN5bmNfMSA9IHJlcXVpcmUoXCIuL2V4ZWNBc3luY1wiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGdldE1hY2hpbmVJZCgpIHtcbiAgICBjb25zdCBhcmdzID0gJ1FVRVJZIEhLRVlfTE9DQUxfTUFDSElORVxcXFxTT0ZUV0FSRVxcXFxNaWNyb3NvZnRcXFxcQ3J5cHRvZ3JhcGh5IC92IE1hY2hpbmVHdWlkJztcbiAgICBsZXQgY29tbWFuZCA9ICcld2luZGlyJVxcXFxTeXN0ZW0zMlxcXFxSRUcuZXhlJztcbiAgICBpZiAocHJvY2Vzcy5hcmNoID09PSAnaWEzMicgJiYgJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInIGluIHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGNvbW1hbmQgPSAnJXdpbmRpciVcXFxcc3lzbmF0aXZlXFxcXGNtZC5leGUgL2MgJyArIGNvbW1hbmQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICgwLCBleGVjQXN5bmNfMS5leGVjQXN5bmMpKGAke2NvbW1hbmR9ICR7YXJnc31gKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSByZXN1bHQuc3Rkb3V0LnNwbGl0KCdSRUdfU1onKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBlcnJvciByZWFkaW5nIG1hY2hpbmUgaWQ6ICR7ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gZ2V0TWFjaGluZUlkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0TWFjaGluZUlkLXdpbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFjaGluZUlkKCkge1xuICAgIGFwaV8xLmRpYWcuZGVidWcoJ2NvdWxkIG5vdCByZWFkIG1hY2hpbmUtaWQ6IHVuc3VwcG9ydGVkIHBsYXRmb3JtJyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuZ2V0TWFjaGluZUlkID0gZ2V0TWFjaGluZUlkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0TWFjaGluZUlkLXVuc3VwcG9ydGVkLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hY2hpbmVJZCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZShcInByb2Nlc3NcIik7XG5sZXQgZ2V0TWFjaGluZUlkSW1wbDtcbmFzeW5jIGZ1bmN0aW9uIGdldE1hY2hpbmVJZCgpIHtcbiAgICBpZiAoIWdldE1hY2hpbmVJZEltcGwpIHtcbiAgICAgICAgc3dpdGNoIChwcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgICAgICAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC1kYXJ3aW4uanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgICAgICAgICAgICBnZXRNYWNoaW5lSWRJbXBsID0gKGF3YWl0IGltcG9ydCgnLi9nZXRNYWNoaW5lSWQtbGludXguanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZyZWVic2QnOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC1ic2QuanMnKSkuZ2V0TWFjaGluZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2luMzInOlxuICAgICAgICAgICAgICAgIGdldE1hY2hpbmVJZEltcGwgPSAoYXdhaXQgaW1wb3J0KCcuL2dldE1hY2hpbmVJZC13aW4uanMnKSkuZ2V0TWFjaGluZUlkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBnZXRNYWNoaW5lSWRJbXBsID0gKGF3YWl0IGltcG9ydCgnLi9nZXRNYWNoaW5lSWQtdW5zdXBwb3J0ZWQuanMnKSlcbiAgICAgICAgICAgICAgICAgICAgLmdldE1hY2hpbmVJZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0TWFjaGluZUlkSW1wbCgpO1xufVxuZXhwb3J0cy5nZXRNYWNoaW5lSWQgPSBnZXRNYWNoaW5lSWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRNYWNoaW5lSWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm9ybWFsaXplVHlwZSA9IGV4cG9ydHMubm9ybWFsaXplQXJjaCA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBub3JtYWxpemVBcmNoID0gKG5vZGVBcmNoU3RyaW5nKSA9PiB7XG4gICAgLy8gTWFwcyBmcm9tIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvb3MuaHRtbCNvc2FyY2ggdG8gYXJjaCB2YWx1ZXMgaW4gc3BlYzpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1zcGVjaWZpY2F0aW9uL2Jsb2IvbWFpbi9zcGVjaWZpY2F0aW9uL3Jlc291cmNlL3NlbWFudGljX2NvbnZlbnRpb25zL2hvc3QubWRcbiAgICBzd2l0Y2ggKG5vZGVBcmNoU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgJ2FybSc6XG4gICAgICAgICAgICByZXR1cm4gJ2FybTMyJztcbiAgICAgICAgY2FzZSAncHBjJzpcbiAgICAgICAgICAgIHJldHVybiAncHBjMzInO1xuICAgICAgICBjYXNlICd4NjQnOlxuICAgICAgICAgICAgcmV0dXJuICdhbWQ2NCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbm9kZUFyY2hTdHJpbmc7XG4gICAgfVxufTtcbmV4cG9ydHMubm9ybWFsaXplQXJjaCA9IG5vcm1hbGl6ZUFyY2g7XG5jb25zdCBub3JtYWxpemVUeXBlID0gKG5vZGVQbGF0Zm9ybSkgPT4ge1xuICAgIC8vIE1hcHMgZnJvbSBodHRwczovL25vZGVqcy5vcmcvYXBpL29zLmh0bWwjb3NwbGF0Zm9ybSB0byBhcmNoIHZhbHVlcyBpbiBzcGVjOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vYmxvYi9tYWluL3NwZWNpZmljYXRpb24vcmVzb3VyY2Uvc2VtYW50aWNfY29udmVudGlvbnMvb3MubWRcbiAgICBzd2l0Y2ggKG5vZGVQbGF0Zm9ybSkge1xuICAgICAgICBjYXNlICdzdW5vcyc6XG4gICAgICAgICAgICByZXR1cm4gJ3NvbGFyaXMnO1xuICAgICAgICBjYXNlICd3aW4zMic6XG4gICAgICAgICAgICByZXR1cm4gJ3dpbmRvd3MnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5vZGVQbGF0Zm9ybTtcbiAgICB9XG59O1xuZXhwb3J0cy5ub3JtYWxpemVUeXBlID0gbm9ybWFsaXplVHlwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ob3N0RGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VtY29udlwiKTtcbmNvbnN0IG9zXzEgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBnZXRNYWNoaW5lSWRfMSA9IHJlcXVpcmUoXCIuL21hY2hpbmUtaWQvZ2V0TWFjaGluZUlkXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBIb3N0RGV0ZWN0b3IgZGV0ZWN0cyB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlIGhvc3QgY3VycmVudCBwcm9jZXNzIGlzXG4gKiBydW5uaW5nIG9uLiBDdXJyZW50bHkgb25seSBub24tY2xvdWQtYmFzZWQgYXR0cmlidXRlcyBhcmUgaW5jbHVkZWQuXG4gKi9cbmNsYXNzIEhvc3REZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX05BTUVdOiAoMCwgb3NfMS5ob3N0bmFtZSkoKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0FSQ0hdOiAoMCwgdXRpbHNfMS5ub3JtYWxpemVBcmNoKSgoMCwgb3NfMS5hcmNoKSgpKSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9IT1NUX0lEXTogKDAsIGdldE1hY2hpbmVJZF8xLmdldE1hY2hpbmVJZCkoKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlcyB9O1xuICAgIH1cbn1cbmV4cG9ydHMuaG9zdERldGVjdG9yID0gbmV3IEhvc3REZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SG9zdERldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vc0RldGVjdG9yID0gdm9pZCAwO1xuY29uc3Qgc2VtY29udl8xID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlbWNvbnZcIik7XG5jb25zdCBvc18xID0gcmVxdWlyZShcIm9zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBPU0RldGVjdG9yIGRldGVjdHMgdGhlIHJlc291cmNlcyByZWxhdGVkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUykgb25cbiAqIHdoaWNoIHRoZSBwcm9jZXNzIHJlcHJlc2VudGVkIGJ5IHRoaXMgcmVzb3VyY2UgaXMgcnVubmluZy5cbiAqL1xuY2xhc3MgT1NEZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9PU19UWVBFXTogKDAsIHV0aWxzXzEubm9ybWFsaXplVHlwZSkoKDAsIG9zXzEucGxhdGZvcm0pKCkpLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX09TX1ZFUlNJT05dOiAoMCwgb3NfMS5yZWxlYXNlKSgpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5vc0RldGVjdG9yID0gbmV3IE9TRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9TRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNlbWNvbnZfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zZW1jb252XCIpO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG4vKipcbiAqIFByb2Nlc3NEZXRlY3RvciB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSByZXNvdXJjZXMgcmVsYXRlZCBjdXJyZW50IHByb2Nlc3MgcnVubmluZ1xuICogYW5kIGJlaW5nIGluc3RydW1lbnRlZCBmcm9tIHRoZSBOb2RlSlMgUHJvY2VzcyBtb2R1bGUuXG4gKi9cbmNsYXNzIFByb2Nlc3NEZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1BJRF06IHByb2Nlc3MucGlkLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfRVhFQ1VUQUJMRV9OQU1FXTogcHJvY2Vzcy50aXRsZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX0VYRUNVVEFCTEVfUEFUSF06IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19DT01NQU5EX0FSR1NdOiBbXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5hcmd2WzBdLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3MuZXhlY0FyZ3YsXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTl06IHByb2Nlc3MudmVyc2lvbnMubm9kZSxcbiAgICAgICAgICAgIFtzZW1jb252XzEuQVRUUl9QUk9DRVNTX1JVTlRJTUVfTkFNRV06ICdub2RlanMnLFxuICAgICAgICAgICAgW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTl06ICdOb2RlLmpzJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWNvbnZfMS5BVFRSX1BST0NFU1NfQ09NTUFORF0gPSBwcm9jZXNzLmFyZ3ZbMV07XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gb3MudXNlckluZm8oKTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtY29udl8xLkFUVFJfUFJPQ0VTU19PV05FUl0gPSB1c2VySW5mby51c2VybmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgZXJyb3Igb2J0YWluaW5nIHByb2Nlc3Mgb3duZXI6ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5wcm9jZXNzRGV0ZWN0b3IgPSBuZXcgUHJvY2Vzc0RldGVjdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Qcm9jZXNzRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBzZW1jb252XzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VtY29udlwiKTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbi8qKlxuICogU2VydmljZUluc3RhbmNlSWREZXRlY3RvciBkZXRlY3RzIHRoZSByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgc2VydmljZSBpbnN0YW5jZSBJRC5cbiAqL1xuY2xhc3MgU2VydmljZUluc3RhbmNlSWREZXRlY3RvciB7XG4gICAgZGV0ZWN0KF9jb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbc2VtY29udl8xLkFUVFJfU0VSVklDRV9JTlNUQU5DRV9JRF06ICgwLCBjcnlwdG9fMS5yYW5kb21VVUlEKSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yID0gbmV3IFNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSBleHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IGV4cG9ydHMub3NEZXRlY3RvciA9IGV4cG9ydHMuaG9zdERldGVjdG9yID0gdm9pZCAwO1xudmFyIEhvc3REZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vSG9zdERldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaG9zdERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBIb3N0RGV0ZWN0b3JfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG52YXIgT1NEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vT1NEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9zRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9TRGV0ZWN0b3JfMS5vc0RldGVjdG9yOyB9IH0pO1xudmFyIFByb2Nlc3NEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vUHJvY2Vzc0RldGVjdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9jZXNzRGV0ZWN0b3JfMS5wcm9jZXNzRGV0ZWN0b3I7IH0gfSk7XG52YXIgU2VydmljZUluc3RhbmNlSWREZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vU2VydmljZUluc3RhbmNlSWREZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VydmljZUluc3RhbmNlSWREZXRlY3RvciA9IGV4cG9ydHMucHJvY2Vzc0RldGVjdG9yID0gZXhwb3J0cy5vc0RldGVjdG9yID0gZXhwb3J0cy5ob3N0RGV0ZWN0b3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJob3N0RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEub3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb2Nlc3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLnByb2Nlc3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5vb3BEZXRlY3RvciA9IGV4cG9ydHMuTm9vcERldGVjdG9yID0gdm9pZCAwO1xuY2xhc3MgTm9vcERldGVjdG9yIHtcbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLk5vb3BEZXRlY3RvciA9IE5vb3BEZXRlY3RvcjtcbmV4cG9ydHMubm9vcERldGVjdG9yID0gbmV3IE5vb3BEZXRlY3RvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9vcERldGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub29wRGV0ZWN0b3IgPSBleHBvcnRzLnNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3IgPSBleHBvcnRzLnByb2Nlc3NEZXRlY3RvciA9IGV4cG9ydHMub3NEZXRlY3RvciA9IGV4cG9ydHMuaG9zdERldGVjdG9yID0gZXhwb3J0cy5lbnZEZXRlY3RvciA9IHZvaWQgMDtcbnZhciBFbnZEZXRlY3Rvcl8xID0gcmVxdWlyZShcIi4vRW52RGV0ZWN0b3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnZEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRW52RGV0ZWN0b3JfMS5lbnZEZXRlY3RvcjsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJob3N0RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuaG9zdERldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3NEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm1fMS5vc0RldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLnByb2Nlc3NEZXRlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuc2VydmljZUluc3RhbmNlSWREZXRlY3RvcjsgfSB9KTtcbnZhciBOb29wRGV0ZWN0b3JfMSA9IHJlcXVpcmUoXCIuL05vb3BEZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vb3BEZXRlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTm9vcERldGVjdG9yXzEubm9vcERldGVjdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IGV4cG9ydHMuZW1wdHlSZXNvdXJjZSA9IGV4cG9ydHMuZGVmYXVsdFJlc291cmNlID0gZXhwb3J0cy5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzID0gZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yID0gZXhwb3J0cy5wcm9jZXNzRGV0ZWN0b3IgPSBleHBvcnRzLm9zRGV0ZWN0b3IgPSBleHBvcnRzLmhvc3REZXRlY3RvciA9IGV4cG9ydHMuZW52RGV0ZWN0b3IgPSBleHBvcnRzLmRldGVjdFJlc291cmNlcyA9IHZvaWQgMDtcbnZhciBkZXRlY3RfcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiLi9kZXRlY3QtcmVzb3VyY2VzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGV0ZWN0UmVzb3VyY2VzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RfcmVzb3VyY2VzXzEuZGV0ZWN0UmVzb3VyY2VzOyB9IH0pO1xudmFyIGRldGVjdG9yc18xID0gcmVxdWlyZShcIi4vZGV0ZWN0b3JzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW52RGV0ZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRldGVjdG9yc18xLmVudkRldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaG9zdERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5ob3N0RGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5vc0RldGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvY2Vzc0RldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5wcm9jZXNzRGV0ZWN0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZXRlY3RvcnNfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yOyB9IH0pO1xudmFyIFJlc291cmNlSW1wbF8xID0gcmVxdWlyZShcIi4vUmVzb3VyY2VJbXBsXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzb3VyY2VGcm9tQXR0cmlidXRlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEucmVzb3VyY2VGcm9tQXR0cmlidXRlczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRSZXNvdXJjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEuZGVmYXVsdFJlc291cmNlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZW1wdHlSZXNvdXJjZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVzb3VyY2VJbXBsXzEuZW1wdHlSZXNvdXJjZTsgfSB9KTtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0U2VydmljZU5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuZGVmYXVsdFNlcnZpY2VOYW1lOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ1JlY29yZEltcGwgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jbGFzcyBMb2dSZWNvcmRJbXBsIHtcbiAgICBoclRpbWU7XG4gICAgaHJUaW1lT2JzZXJ2ZWQ7XG4gICAgc3BhbkNvbnRleHQ7XG4gICAgcmVzb3VyY2U7XG4gICAgaW5zdHJ1bWVudGF0aW9uU2NvcGU7XG4gICAgYXR0cmlidXRlcyA9IHt9O1xuICAgIF9zZXZlcml0eVRleHQ7XG4gICAgX3NldmVyaXR5TnVtYmVyO1xuICAgIF9ib2R5O1xuICAgIF9ldmVudE5hbWU7XG4gICAgdG90YWxBdHRyaWJ1dGVzQ291bnQgPSAwO1xuICAgIF9pc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgX2xvZ1JlY29yZExpbWl0cztcbiAgICBzZXQgc2V2ZXJpdHlUZXh0KHNldmVyaXR5VGV4dCkge1xuICAgICAgICBpZiAodGhpcy5faXNMb2dSZWNvcmRSZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V2ZXJpdHlUZXh0ID0gc2V2ZXJpdHlUZXh0O1xuICAgIH1cbiAgICBnZXQgc2V2ZXJpdHlUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V2ZXJpdHlUZXh0O1xuICAgIH1cbiAgICBzZXQgc2V2ZXJpdHlOdW1iZXIoc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTG9nUmVjb3JkUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldmVyaXR5TnVtYmVyID0gc2V2ZXJpdHlOdW1iZXI7XG4gICAgfVxuICAgIGdldCBzZXZlcml0eU51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldmVyaXR5TnVtYmVyO1xuICAgIH1cbiAgICBzZXQgYm9keShib2R5KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0xvZ1JlY29yZFJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgZ2V0IGJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib2R5O1xuICAgIH1cbiAgICBnZXQgZXZlbnROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnROYW1lO1xuICAgIH1cbiAgICBzZXQgZXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICAgICAgICBpZiAodGhpcy5faXNMb2dSZWNvcmRSZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgIH1cbiAgICBnZXQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxBdHRyaWJ1dGVzQ291bnQgLSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoX3NoYXJlZFN0YXRlLCBpbnN0cnVtZW50YXRpb25TY29wZSwgbG9nUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHsgdGltZXN0YW1wLCBvYnNlcnZlZFRpbWVzdGFtcCwgZXZlbnROYW1lLCBzZXZlcml0eU51bWJlciwgc2V2ZXJpdHlUZXh0LCBib2R5LCBhdHRyaWJ1dGVzID0ge30sIGNvbnRleHQsIH0gPSBsb2dSZWNvcmQ7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuaHJUaW1lID0gKDAsIGNvcmVfMS50aW1lSW5wdXRUb0hyVGltZSkodGltZXN0YW1wID8/IG5vdyk7XG4gICAgICAgIHRoaXMuaHJUaW1lT2JzZXJ2ZWQgPSAoMCwgY29yZV8xLnRpbWVJbnB1dFRvSHJUaW1lKShvYnNlcnZlZFRpbWVzdGFtcCA/PyBub3cpO1xuICAgICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGkudHJhY2UuZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgICAgICBpZiAoc3BhbkNvbnRleHQgJiYgYXBpLmlzU3BhbkNvbnRleHRWYWxpZChzcGFuQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5Db250ZXh0ID0gc3BhbkNvbnRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXZlcml0eU51bWJlciA9IHNldmVyaXR5TnVtYmVyO1xuICAgICAgICB0aGlzLnNldmVyaXR5VGV4dCA9IHNldmVyaXR5VGV4dDtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IF9zaGFyZWRTdGF0ZS5yZXNvdXJjZTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25TY29wZSA9IGluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgICAgICB0aGlzLl9sb2dSZWNvcmRMaW1pdHMgPSBfc2hhcmVkU3RhdGUubG9nUmVjb3JkTGltaXRzO1xuICAgICAgICB0aGlzLl9ldmVudE5hbWUgPSBldmVudE5hbWU7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTG9nUmVjb3JkUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYXBpLmRpYWcud2FybihgSW52YWxpZCBhdHRyaWJ1dGUga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIGNvcmVfMS5pc0F0dHJpYnV0ZVZhbHVlKSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICEodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgYXBpLmRpYWcud2FybihgSW52YWxpZCBhdHRyaWJ1dGUgdmFsdWUgc2V0IGZvciBrZXk6ICR7a2V5fWApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b3RhbEF0dHJpYnV0ZXNDb3VudCArPSAxO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGggPj1cbiAgICAgICAgICAgIHRoaXMuX2xvZ1JlY29yZExpbWl0cy5hdHRyaWJ1dGVDb3VudExpbWl0ICYmXG4gICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywga2V5KSkge1xuICAgICAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyB0byBjcmVhdGUgZHJvcCBtZXNzYWdlIGF0IG1vc3Qgb25jZSBwZXIgTG9nUmVjb3JkIHRvIHByZXZlbnQgZXhjZXNzaXZlIGxvZ2dpbmcuXG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgYXBpLmRpYWcud2FybignRHJvcHBpbmcgZXh0cmEgYXR0cmlidXRlcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgY29yZV8xLmlzQXR0cmlidXRlVmFsdWUpKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2tleV0gPSB0aGlzLl90cnVuY2F0ZVRvU2l6ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGssIHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRCb2R5KGJvZHkpIHtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNldEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRTZXZlcml0eU51bWJlcihzZXZlcml0eU51bWJlcikge1xuICAgICAgICB0aGlzLnNldmVyaXR5TnVtYmVyID0gc2V2ZXJpdHlOdW1iZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRTZXZlcml0eVRleHQoc2V2ZXJpdHlUZXh0KSB7XG4gICAgICAgIHRoaXMuc2V2ZXJpdHlUZXh0ID0gc2V2ZXJpdHlUZXh0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQSBMb2dSZWNvcmRQcm9jZXNzb3IgbWF5IGZyZWVseSBtb2RpZnkgbG9nUmVjb3JkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIE9uRW1pdCBjYWxsLlxuICAgICAqIElmIGxvZ1JlY29yZCBpcyBuZWVkZWQgYWZ0ZXIgT25FbWl0IHJldHVybnMgKGkuZS4gZm9yIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nKSBvbmx5IHJlYWRzIGFyZSBwZXJtaXR0ZWQuXG4gICAgICovXG4gICAgX21ha2VSZWFkb25seSgpIHtcbiAgICAgICAgdGhpcy5faXNSZWFkb25seSA9IHRydWU7XG4gICAgfVxuICAgIF90cnVuY2F0ZVRvU2l6ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBsaW1pdCA9IHRoaXMuX2xvZ1JlY29yZExpbWl0cy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0O1xuICAgICAgICAvLyBDaGVjayBsaW1pdFxuICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgLy8gTmVnYXRpdmUgdmFsdWVzIGFyZSBpbnZhbGlkLCBzbyBkbyBub3QgdHJ1bmNhdGVcbiAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oYEF0dHJpYnV0ZSB2YWx1ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtsaW1pdH1gKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cnVuY2F0ZVRvTGltaXRVdGlsKHZhbHVlLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2Ygc3RyaW5nc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAodmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh2YWwsIGxpbWl0KSA6IHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgdHlwZXMsIG5vIG5lZWQgdG8gYXBwbHkgdmFsdWUgbGVuZ3RoIGxpbWl0XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgX3RydW5jYXRlVG9MaW1pdFV0aWwodmFsdWUsIGxpbWl0KSB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPD0gbGltaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGxpbWl0KTtcbiAgICB9XG4gICAgX2lzTG9nUmVjb3JkUmVhZG9ubHkoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JlYWRvbmx5KSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0NhbiBub3QgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uIG9uIGVtaXR0ZWQgbG9nIHJlY29yZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlYWRvbmx5O1xuICAgIH1cbn1cbmV4cG9ydHMuTG9nUmVjb3JkSW1wbCA9IExvZ1JlY29yZEltcGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2dSZWNvcmRJbXBsLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dnZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBMb2dSZWNvcmRJbXBsXzEgPSByZXF1aXJlKFwiLi9Mb2dSZWNvcmRJbXBsXCIpO1xuY2xhc3MgTG9nZ2VyIHtcbiAgICBpbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICBfc2hhcmVkU3RhdGU7XG4gICAgY29uc3RydWN0b3IoaW5zdHJ1bWVudGF0aW9uU2NvcGUsIF9zaGFyZWRTdGF0ZSkge1xuICAgICAgICB0aGlzLmluc3RydW1lbnRhdGlvblNjb3BlID0gaW5zdHJ1bWVudGF0aW9uU2NvcGU7XG4gICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlID0gX3NoYXJlZFN0YXRlO1xuICAgIH1cbiAgICBlbWl0KGxvZ1JlY29yZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IGxvZ1JlY29yZC5jb250ZXh0IHx8IGFwaV8xLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBhIExvZ2dlciB3YXMgb2J0YWluZWQgd2l0aCBpbmNsdWRlX3RyYWNlX2NvbnRleHQ9dHJ1ZSxcbiAgICAgICAgICogdGhlIExvZ1JlY29yZHMgaXQgZW1pdHMgTVVTVCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgdGhlIFRyYWNlIENvbnRleHQgZnJvbSB0aGUgYWN0aXZlIENvbnRleHQsXG4gICAgICAgICAqIGlmIENvbnRleHQgaGFzIG5vdCBiZWVuIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgbG9nUmVjb3JkSW5zdGFuY2UgPSBuZXcgTG9nUmVjb3JkSW1wbF8xLkxvZ1JlY29yZEltcGwodGhpcy5fc2hhcmVkU3RhdGUsIHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGN1cnJlbnRDb250ZXh0LFxuICAgICAgICAgICAgLi4ubG9nUmVjb3JkLFxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoZSBleHBsaWNpdGx5IHBhc3NlZCBDb250ZXh0LFxuICAgICAgICAgKiB0aGUgY3VycmVudCBDb250ZXh0LCBvciBhbiBlbXB0eSBDb250ZXh0IGlmIHRoZSBMb2dnZXIgd2FzIG9idGFpbmVkIHdpdGggaW5jbHVkZV90cmFjZV9jb250ZXh0PWZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9zaGFyZWRTdGF0ZS5hY3RpdmVQcm9jZXNzb3Iub25FbWl0KGxvZ1JlY29yZEluc3RhbmNlLCBjdXJyZW50Q29udGV4dCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIExvZ1JlY29yZFByb2Nlc3NvciBtYXkgZnJlZWx5IG1vZGlmeSBsb2dSZWNvcmQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgT25FbWl0IGNhbGwuXG4gICAgICAgICAqIElmIGxvZ1JlY29yZCBpcyBuZWVkZWQgYWZ0ZXIgT25FbWl0IHJldHVybnMgKGkuZS4gZm9yIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nKSBvbmx5IHJlYWRzIGFyZSBwZXJtaXR0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICBsb2dSZWNvcmRJbnN0YW5jZS5fbWFrZVJlYWRvbmx5KCk7XG4gICAgfVxufVxuZXhwb3J0cy5Mb2dnZXIgPSBMb2dnZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2dnZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlY29uZmlndXJlTGltaXRzID0gZXhwb3J0cy5sb2FkRGVmYXVsdENvbmZpZyA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuZnVuY3Rpb24gbG9hZERlZmF1bHRDb25maWcoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgICAgICBsb2dSZWNvcmRMaW1pdHM6IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ6ICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfTE9HUkVDT1JEX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/P1xuICAgICAgICAgICAgICAgIEluZmluaXR5LFxuICAgICAgICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9MT0dSRUNPUkRfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlVHJhY2VDb250ZXh0OiB0cnVlLFxuICAgIH07XG59XG5leHBvcnRzLmxvYWREZWZhdWx0Q29uZmlnID0gbG9hZERlZmF1bHRDb25maWc7XG4vKipcbiAqIFdoZW4gZ2VuZXJhbCBsaW1pdHMgYXJlIHByb3ZpZGVkIGFuZCBtb2RlbCBzcGVjaWZpYyBsaW1pdHMgYXJlIG5vdCxcbiAqIGNvbmZpZ3VyZXMgdGhlIG1vZGVsIHNwZWNpZmljIGxpbWl0cyBieSB1c2luZyB0aGUgdmFsdWVzIGZyb20gdGhlIGdlbmVyYWwgb25lcy5cbiAqIEBwYXJhbSBsb2dSZWNvcmRMaW1pdHMgVXNlciBwcm92aWRlZCBsaW1pdHMgY29uZmlndXJhdGlvblxuICovXG5mdW5jdGlvbiByZWNvbmZpZ3VyZUxpbWl0cyhsb2dSZWNvcmRMaW1pdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVhc3NpZ24gbG9nIHJlY29yZCBhdHRyaWJ1dGUgY291bnQgbGltaXQgdG8gdXNlIGZpcnN0IG5vbiBudWxsIHZhbHVlIGRlZmluZWQgYnkgdXNlciBvciB1c2UgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogbG9nUmVjb3JkTGltaXRzLmF0dHJpYnV0ZUNvdW50TGltaXQgPz9cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfTE9HUkVDT1JEX0FUVFJJQlVURV9DT1VOVF9MSU1JVCcpID8/XG4gICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0FUVFJJQlVURV9DT1VOVF9MSU1JVCcpID8/XG4gICAgICAgICAgICAxMjgsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWFzc2lnbiBsb2cgcmVjb3JkIGF0dHJpYnV0ZSB2YWx1ZSBsZW5ndGggbGltaXQgdG8gdXNlIGZpcnN0IG5vbiBudWxsIHZhbHVlIGRlZmluZWQgYnkgdXNlciBvciB1c2UgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDogbG9nUmVjb3JkTGltaXRzLmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPz9cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfTE9HUkVDT1JEX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUJykgPz9cbiAgICAgICAgICAgIEluZmluaXR5LFxuICAgIH07XG59XG5leHBvcnRzLnJlY29uZmlndXJlTGltaXRzID0gcmVjb25maWd1cmVMaW1pdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5vb3BMb2dSZWNvcmRQcm9jZXNzb3IgPSB2b2lkIDA7XG5jbGFzcyBOb29wTG9nUmVjb3JkUHJvY2Vzc29yIHtcbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIG9uRW1pdChfbG9nUmVjb3JkLCBfY29udGV4dCkgeyB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59XG5leHBvcnRzLk5vb3BMb2dSZWNvcmRQcm9jZXNzb3IgPSBOb29wTG9nUmVjb3JkUHJvY2Vzc29yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9vcExvZ1JlY29yZFByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTXVsdGlMb2dSZWNvcmRQcm9jZXNzb3IgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBMb2dSZWNvcmRQcm9jZXNzb3J9IHRoYXQgc2ltcGx5IGZvcndhcmRzIGFsbFxuICogcmVjZWl2ZWQgZXZlbnRzIHRvIGEgbGlzdCBvZiB7QGxpbmsgTG9nUmVjb3JkUHJvY2Vzc29yfXMuXG4gKi9cbmNsYXNzIE11bHRpTG9nUmVjb3JkUHJvY2Vzc29yIHtcbiAgICBwcm9jZXNzb3JzO1xuICAgIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzO1xuICAgIGNvbnN0cnVjdG9yKHByb2Nlc3NvcnMsIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc29ycyA9IHByb2Nlc3NvcnM7XG4gICAgICAgIHRoaXMuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMgPSBmb3JjZUZsdXNoVGltZW91dE1pbGxpcztcbiAgICB9XG4gICAgYXN5bmMgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucHJvY2Vzc29ycy5tYXAocHJvY2Vzc29yID0+ICgwLCBjb3JlXzEuY2FsbFdpdGhUaW1lb3V0KShwcm9jZXNzb3IuZm9yY2VGbHVzaCgpLCB0aW1lb3V0KSkpO1xuICAgIH1cbiAgICBvbkVtaXQobG9nUmVjb3JkLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc29ycy5mb3JFYWNoKHByb2Nlc3NvcnMgPT4gcHJvY2Vzc29ycy5vbkVtaXQobG9nUmVjb3JkLCBjb250ZXh0KSk7XG4gICAgfVxuICAgIGFzeW5jIHNodXRkb3duKCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnByb2Nlc3NvcnMubWFwKHByb2Nlc3NvciA9PiBwcm9jZXNzb3Iuc2h1dGRvd24oKSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuTXVsdGlMb2dSZWNvcmRQcm9jZXNzb3IgPSBNdWx0aUxvZ1JlY29yZFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU11bHRpTG9nUmVjb3JkUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dnZXJQcm92aWRlclNoYXJlZFN0YXRlID0gdm9pZCAwO1xuY29uc3QgTm9vcExvZ1JlY29yZFByb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4uL2V4cG9ydC9Ob29wTG9nUmVjb3JkUHJvY2Vzc29yXCIpO1xuY29uc3QgTXVsdGlMb2dSZWNvcmRQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuLi9NdWx0aUxvZ1JlY29yZFByb2Nlc3NvclwiKTtcbmNsYXNzIExvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUge1xuICAgIHJlc291cmNlO1xuICAgIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzO1xuICAgIGxvZ1JlY29yZExpbWl0cztcbiAgICBwcm9jZXNzb3JzO1xuICAgIGxvZ2dlcnMgPSBuZXcgTWFwKCk7XG4gICAgYWN0aXZlUHJvY2Vzc29yO1xuICAgIHJlZ2lzdGVyZWRMb2dSZWNvcmRQcm9jZXNzb3JzID0gW107XG4gICAgY29uc3RydWN0b3IocmVzb3VyY2UsIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzLCBsb2dSZWNvcmRMaW1pdHMsIHByb2Nlc3NvcnMpIHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgICB0aGlzLmZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzID0gZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM7XG4gICAgICAgIHRoaXMubG9nUmVjb3JkTGltaXRzID0gbG9nUmVjb3JkTGltaXRzO1xuICAgICAgICB0aGlzLnByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzO1xuICAgICAgICBpZiAocHJvY2Vzc29ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRMb2dSZWNvcmRQcm9jZXNzb3JzID0gcHJvY2Vzc29ycztcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUHJvY2Vzc29yID0gbmV3IE11bHRpTG9nUmVjb3JkUHJvY2Vzc29yXzEuTXVsdGlMb2dSZWNvcmRQcm9jZXNzb3IodGhpcy5yZWdpc3RlcmVkTG9nUmVjb3JkUHJvY2Vzc29ycywgdGhpcy5mb3JjZUZsdXNoVGltZW91dE1pbGxpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVByb2Nlc3NvciA9IG5ldyBOb29wTG9nUmVjb3JkUHJvY2Vzc29yXzEuTm9vcExvZ1JlY29yZFByb2Nlc3NvcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Mb2dnZXJQcm92aWRlclNoYXJlZFN0YXRlID0gTG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTG9nZ2VyUHJvdmlkZXIgPSBleHBvcnRzLkRFRkFVTFRfTE9HR0VSX05BTUUgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgYXBpX2xvZ3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGktbG9nc1wiKTtcbmNvbnN0IHJlc291cmNlc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Jlc291cmNlc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgTG9nZ2VyXzEgPSByZXF1aXJlKFwiLi9Mb2dnZXJcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IExvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGVfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsL0xvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGVcIik7XG5leHBvcnRzLkRFRkFVTFRfTE9HR0VSX05BTUUgPSAndW5rbm93bic7XG5jbGFzcyBMb2dnZXJQcm92aWRlciB7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBfc2hhcmVkU3RhdGU7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkQ29uZmlnID0gKDAsIGNvcmVfMS5tZXJnZSkoe30sICgwLCBjb25maWdfMS5sb2FkRGVmYXVsdENvbmZpZykoKSwgY29uZmlnKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBjb25maWcucmVzb3VyY2UgPz8gKDAsIHJlc291cmNlc18xLmRlZmF1bHRSZXNvdXJjZSkoKTtcbiAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUgPSBuZXcgTG9nZ2VyUHJvdmlkZXJTaGFyZWRTdGF0ZV8xLkxvZ2dlclByb3ZpZGVyU2hhcmVkU3RhdGUocmVzb3VyY2UsIG1lcmdlZENvbmZpZy5mb3JjZUZsdXNoVGltZW91dE1pbGxpcywgKDAsIGNvbmZpZ18xLnJlY29uZmlndXJlTGltaXRzKShtZXJnZWRDb25maWcubG9nUmVjb3JkTGltaXRzKSwgY29uZmlnPy5wcm9jZXNzb3JzID8/IFtdKTtcbiAgICAgICAgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGNvcmVfMS5CaW5kT25jZUZ1dHVyZSh0aGlzLl9zaHV0ZG93biwgdGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIGxvZ2dlciB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBMb2dnZXJQcm92aWRlci5cbiAgICAgKi9cbiAgICBnZXRMb2dnZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0Egc2h1dGRvd24gTG9nZ2VyUHJvdmlkZXIgY2Fubm90IHByb3ZpZGUgYSBMb2dnZXInKTtcbiAgICAgICAgICAgIHJldHVybiBhcGlfbG9nc18xLk5PT1BfTE9HR0VSO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdMb2dnZXIgcmVxdWVzdGVkIHdpdGhvdXQgaW5zdHJ1bWVudGF0aW9uIHNjb3BlIG5hbWUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9nZ2VyTmFtZSA9IG5hbWUgfHwgZXhwb3J0cy5ERUZBVUxUX0xPR0dFUl9OQU1FO1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtsb2dnZXJOYW1lfUAke3ZlcnNpb24gfHwgJyd9OiR7b3B0aW9ucz8uc2NoZW1hVXJsIHx8ICcnfWA7XG4gICAgICAgIGlmICghdGhpcy5fc2hhcmVkU3RhdGUubG9nZ2Vycy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fc2hhcmVkU3RhdGUubG9nZ2Vycy5zZXQoa2V5LCBuZXcgTG9nZ2VyXzEuTG9nZ2VyKHsgbmFtZTogbG9nZ2VyTmFtZSwgdmVyc2lvbiwgc2NoZW1hVXJsOiBvcHRpb25zPy5zY2hlbWFVcmwgfSwgdGhpcy5fc2hhcmVkU3RhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICByZXR1cm4gdGhpcy5fc2hhcmVkU3RhdGUubG9nZ2Vycy5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTm90aWZpZXMgYWxsIHJlZ2lzdGVyZWQgTG9nUmVjb3JkUHJvY2Vzc29yIHRvIGZsdXNoIGFueSBidWZmZXJlZCBkYXRhLlxuICAgICAqXG4gICAgICogUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiBhbGwgZmx1c2hlcyBhcmUgY29tcGxldGUuXG4gICAgICovXG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgLy8gZG8gbm90IGZsdXNoIGFmdGVyIHNodXRkb3duXG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignaW52YWxpZCBhdHRlbXB0IHRvIGZvcmNlIGZsdXNoIGFmdGVyIExvZ2dlclByb3ZpZGVyIHNodXRkb3duJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXJlZFN0YXRlLmFjdGl2ZVByb2Nlc3Nvci5mb3JjZUZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZsdXNoIGFsbCBidWZmZXJlZCBkYXRhIGFuZCBzaHV0IGRvd24gdGhlIExvZ2dlclByb3ZpZGVyIGFuZCBhbGwgcmVnaXN0ZXJlZFxuICAgICAqIExvZ1JlY29yZFByb2Nlc3Nvci5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gYWxsIGZsdXNoZXMgYXJlIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIHNodXRkb3duKCkge1xuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ3NodXRkb3duIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBMb2dnZXJQcm92aWRlcicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH1cbiAgICBfc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRTdGF0ZS5hY3RpdmVQcm9jZXNzb3Iuc2h1dGRvd24oKTtcbiAgICB9XG59XG5leHBvcnRzLkxvZ2dlclByb3ZpZGVyID0gTG9nZ2VyUHJvdmlkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2dnZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBjb3JlXzIgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbi8qKlxuICogVGhpcyBpcyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgTG9nUmVjb3JkRXhwb3J0ZXJ9IHRoYXQgcHJpbnRzIExvZ1JlY29yZHMgdG8gdGhlXG4gKiBjb25zb2xlLiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLlxuICpcbiAqIE5PVEU6IFRoaXMge0BsaW5rIExvZ1JlY29yZEV4cG9ydGVyfSBpcyBpbnRlbmRlZCBmb3IgZGlhZ25vc3RpY3MgdXNlIG9ubHksIG91dHB1dCByZW5kZXJlZCB0byB0aGUgY29uc29sZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5jbGFzcyBDb25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIge1xuICAgIC8qKlxuICAgICAqIEV4cG9ydCBsb2dzLlxuICAgICAqIEBwYXJhbSBsb2dzXG4gICAgICogQHBhcmFtIHJlc3VsdENhbGxiYWNrXG4gICAgICovXG4gICAgZXhwb3J0KGxvZ3MsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX3NlbmRMb2dSZWNvcmRzKGxvZ3MsIHJlc3VsdENhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2h1dGRvd24gdGhlIGV4cG9ydGVyLlxuICAgICAqL1xuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGxvZ1JlY29yZCBpbmZvIGludG8gbW9yZSByZWFkYWJsZSBmb3JtYXRcbiAgICAgKiBAcGFyYW0gbG9nUmVjb3JkXG4gICAgICovXG4gICAgX2V4cG9ydEluZm8obG9nUmVjb3JkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGxvZ1JlY29yZC5yZXNvdXJjZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvblNjb3BlOiBsb2dSZWNvcmQuaW5zdHJ1bWVudGF0aW9uU2NvcGUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKGxvZ1JlY29yZC5oclRpbWUpLFxuICAgICAgICAgICAgdHJhY2VJZDogbG9nUmVjb3JkLnNwYW5Db250ZXh0Py50cmFjZUlkLFxuICAgICAgICAgICAgc3BhbklkOiBsb2dSZWNvcmQuc3BhbkNvbnRleHQ/LnNwYW5JZCxcbiAgICAgICAgICAgIHRyYWNlRmxhZ3M6IGxvZ1JlY29yZC5zcGFuQ29udGV4dD8udHJhY2VGbGFncyxcbiAgICAgICAgICAgIHNldmVyaXR5VGV4dDogbG9nUmVjb3JkLnNldmVyaXR5VGV4dCxcbiAgICAgICAgICAgIHNldmVyaXR5TnVtYmVyOiBsb2dSZWNvcmQuc2V2ZXJpdHlOdW1iZXIsXG4gICAgICAgICAgICBib2R5OiBsb2dSZWNvcmQuYm9keSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGxvZ1JlY29yZC5hdHRyaWJ1dGVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaG93aW5nIGxvZ3MgIGluIGNvbnNvbGVcbiAgICAgKiBAcGFyYW0gbG9nUmVjb3Jkc1xuICAgICAqIEBwYXJhbSBkb25lXG4gICAgICovXG4gICAgX3NlbmRMb2dSZWNvcmRzKGxvZ1JlY29yZHMsIGRvbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2dSZWNvcmQgb2YgbG9nUmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc29sZS5kaXIodGhpcy5fZXhwb3J0SW5mbyhsb2dSZWNvcmQpLCB7IGRlcHRoOiAzIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRvbmU/Lih7IGNvZGU6IGNvcmVfMi5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIgPSBDb25zb2xlTG9nUmVjb3JkRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY2xhc3MgU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yIHtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX3NodXRkb3duT25jZTtcbiAgICBfdW5yZXNvbHZlZEV4cG9ydHM7XG4gICAgY29uc3RydWN0b3IoX2V4cG9ydGVyKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydGVyID0gX2V4cG9ydGVyO1xuICAgICAgICB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgY29yZV8xLkJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIG9uRW1pdChsb2dSZWNvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvRXhwb3J0ID0gKCkgPT4gY29yZV8xLmludGVybmFsXG4gICAgICAgICAgICAuX2V4cG9ydCh0aGlzLl9leHBvcnRlciwgW2xvZ1JlY29yZF0pXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvZGUgIT09IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yOiBsb2cgcmVjb3JkIGV4cG9ydCBmYWlsZWQgKHN0YXR1cyAke3Jlc3VsdH0pYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpO1xuICAgICAgICAvLyBBdm9pZCBzY2hlZHVsaW5nIGEgcHJvbWlzZSB0byBtYWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIGFuZCBlYXNpZXIgdG8gdGVzdFxuICAgICAgICBpZiAobG9nUmVjb3JkLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydFByb21pc2UgPSBsb2dSZWNvcmQucmVzb3VyY2VcbiAgICAgICAgICAgICAgICAud2FpdEZvckFzeW5jQXR0cmlidXRlcz8uKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXNpbmcgVFMgTm9uLW51bGwgYXNzZXJ0aW9uIG9wZXJhdG9yIGJlY2F1c2UgZXhwb3J0UHJvbWlzZSBjb3VsZCBub3QgYmUgbnVsbCBpbiBoZXJlXG4gICAgICAgICAgICAgICAgLy8gaWYgd2FpdEZvckFzeW5jQXR0cmlidXRlcyBpcyBub3QgcHJlc2VudCB0aGlzIGNvZGUgd2lsbCBuZXZlciBiZSByZWFjaGVkXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlc29sdmVkRXhwb3J0cy5kZWxldGUoZXhwb3J0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvRXhwb3J0KCk7XG4gICAgICAgICAgICB9LCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKTtcbiAgICAgICAgICAgIC8vIHN0b3JlIHRoZSB1bnJlc29sdmVkIGV4cG9ydHNcbiAgICAgICAgICAgIGlmIChleHBvcnRQcm9taXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlc29sdmVkRXhwb3J0cy5hZGQoZXhwb3J0UHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2b2lkIGRvRXhwb3J0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgLy8gYXdhaXQgdW5yZXNvbHZlZCByZXNvdXJjZXMgYmVmb3JlIHJlc29sdmluZ1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHRoaXMuX3VucmVzb2x2ZWRFeHBvcnRzKSk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9XG4gICAgX3NodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICB9XG59XG5leHBvcnRzLlNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvciA9IFNpbXBsZUxvZ1JlY29yZFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNpbXBsZUxvZ1JlY29yZFByb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuLyoqXG4gKiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBJdCBzdG9yZXMgdGhlIGV4cG9ydGVkIExvZ1JlY29yZHNcbiAqIGluIGEgbGlzdCBpbiBtZW1vcnkgdGhhdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZSBgZ2V0RmluaXNoZWRMb2dSZWNvcmRzKClgXG4gKiBtZXRob2QuXG4gKi9cbmNsYXNzIEluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXIge1xuICAgIF9maW5pc2hlZExvZ1JlY29yZHMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGV4cG9ydGVyIGhhcyBiZWVuIFwic2h1dGRvd24uXCJcbiAgICAgKiBXaGVuIGZhbHNlLCBleHBvcnRlZCBsb2cgcmVjb3JkcyB3aWxsIG5vdCBiZSBzdG9yZWQgaW4tbWVtb3J5LlxuICAgICAqL1xuICAgIF9zdG9wcGVkID0gZmFsc2U7XG4gICAgZXhwb3J0KGxvZ3MsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdFeHBvcnRlciBoYXMgYmVlbiBzdG9wcGVkJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMucHVzaCguLi5sb2dzKTtcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBnZXRGaW5pc2hlZExvZ1JlY29yZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHM7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMgPSBbXTtcbiAgICB9XG59XG5leHBvcnRzLkluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXIgPSBJbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JCYXNlID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzIgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNsYXNzIEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZSB7XG4gICAgX2V4cG9ydGVyO1xuICAgIF9tYXhFeHBvcnRCYXRjaFNpemU7XG4gICAgX21heFF1ZXVlU2l6ZTtcbiAgICBfc2NoZWR1bGVkRGVsYXlNaWxsaXM7XG4gICAgX2V4cG9ydFRpbWVvdXRNaWxsaXM7XG4gICAgX2ZpbmlzaGVkTG9nUmVjb3JkcyA9IFtdO1xuICAgIF90aW1lcjtcbiAgICBfc2h1dGRvd25PbmNlO1xuICAgIGNvbnN0cnVjdG9yKF9leHBvcnRlciwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydGVyID0gX2V4cG9ydGVyO1xuICAgICAgICB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPVxuICAgICAgICAgICAgY29uZmlnPy5tYXhFeHBvcnRCYXRjaFNpemUgPz9cbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0JMUlBfTUFYX0VYUE9SVF9CQVRDSF9TSVpFJykgPz9cbiAgICAgICAgICAgICAgICA1MTI7XG4gICAgICAgIHRoaXMuX21heFF1ZXVlU2l6ZSA9XG4gICAgICAgICAgICBjb25maWc/Lm1heFF1ZXVlU2l6ZSA/P1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQkxSUF9NQVhfUVVFVUVfU0laRScpID8/XG4gICAgICAgICAgICAgICAgMjA0ODtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGVkRGVsYXlNaWxsaXMgPVxuICAgICAgICAgICAgY29uZmlnPy5zY2hlZHVsZWREZWxheU1pbGxpcyA/P1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQkxSUF9TQ0hFRFVMRV9ERUxBWScpID8/XG4gICAgICAgICAgICAgICAgNTAwMDtcbiAgICAgICAgdGhpcy5fZXhwb3J0VGltZW91dE1pbGxpcyA9XG4gICAgICAgICAgICBjb25maWc/LmV4cG9ydFRpbWVvdXRNaWxsaXMgPz9cbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0JMUlBfRVhQT1JUX1RJTUVPVVQnKSA/P1xuICAgICAgICAgICAgICAgIDMwMDAwO1xuICAgICAgICB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgY29yZV8yLkJpbmRPbmNlRnV0dXJlKHRoaXMuX3NodXRkb3duLCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA+IHRoaXMuX21heFF1ZXVlU2l6ZSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdCYXRjaExvZ1JlY29yZFByb2Nlc3NvcjogbWF4RXhwb3J0QmF0Y2hTaXplIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBtYXhRdWV1ZVNpemUsIHNldHRpbmcgbWF4RXhwb3J0QmF0Y2hTaXplIHRvIG1hdGNoIG1heFF1ZXVlU2l6ZScpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdGhpcy5fbWF4UXVldWVTaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRW1pdChsb2dSZWNvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FkZFRvQnVmZmVyKGxvZ1JlY29yZCk7XG4gICAgfVxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2hBbGwoKTtcbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH1cbiAgICBhc3luYyBfc2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMub25TaHV0ZG93bigpO1xuICAgICAgICBhd2FpdCB0aGlzLl9mbHVzaEFsbCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgIH1cbiAgICAvKiogQWRkIGEgTG9nUmVjb3JkIGluIHRoZSBidWZmZXIuICovXG4gICAgX2FkZFRvQnVmZmVyKGxvZ1JlY29yZCkge1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRMb2dSZWNvcmRzLmxlbmd0aCA+PSB0aGlzLl9tYXhRdWV1ZVNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMucHVzaChsb2dSZWNvcmQpO1xuICAgICAgICB0aGlzLl9tYXliZVN0YXJ0VGltZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbGwgTG9nUmVjb3JkcyB0byB0aGUgZXhwb3J0ZXIgcmVzcGVjdGluZyB0aGUgYmF0Y2ggc2l6ZSBsaW1pdFxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IG9uIGZvcmNlRmx1c2ggb3Igc2h1dGRvd24sXG4gICAgICogZm9yIGFsbCBvdGhlciBjYXNlcyBfZmx1c2ggc2hvdWxkIGJlIHVzZWRcbiAgICAgKiAqL1xuICAgIF9mbHVzaEFsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICBjb25zdCBiYXRjaENvdW50ID0gTWF0aC5jZWlsKHRoaXMuX2ZpbmlzaGVkTG9nUmVjb3Jkcy5sZW5ndGggLyB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2ZsdXNoT25lQmF0Y2goKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9mbHVzaE9uZUJhdGNoKCkge1xuICAgICAgICB0aGlzLl9jbGVhclRpbWVyKCk7XG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hlZExvZ1JlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICgwLCBjb3JlXzIuY2FsbFdpdGhUaW1lb3V0KSh0aGlzLl9leHBvcnQodGhpcy5fZmluaXNoZWRMb2dSZWNvcmRzLnNwbGljZSgwLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpKSwgdGhpcy5fZXhwb3J0VGltZW91dE1pbGxpcylcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiByZXNvbHZlKCkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbWF5YmVTdGFydFRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaE9uZUJhdGNoKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkTG9nUmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVGltZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWF5YmVTdGFydFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMi5nbG9iYWxFcnJvckhhbmRsZXIpKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzKTtcbiAgICAgICAgKDAsIGNvcmVfMi51bnJlZlRpbWVyKSh0aGlzLl90aW1lcik7XG4gICAgfVxuICAgIF9jbGVhclRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9leHBvcnQobG9nUmVjb3Jkcykge1xuICAgICAgICBjb25zdCBkb0V4cG9ydCA9ICgpID0+IGNvcmVfMi5pbnRlcm5hbFxuICAgICAgICAgICAgLl9leHBvcnQodGhpcy5fZXhwb3J0ZXIsIGxvZ1JlY29yZHMpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNvZGUgIT09IGNvcmVfMi5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MpIHtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8yLmdsb2JhbEVycm9ySGFuZGxlcikocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3I6IGxvZyByZWNvcmQgZXhwb3J0IGZhaWxlZCAoc3RhdHVzICR7cmVzdWx0fSlgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goY29yZV8yLmdsb2JhbEVycm9ySGFuZGxlcik7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdSZXNvdXJjZXMgPSBsb2dSZWNvcmRzXG4gICAgICAgICAgICAubWFwKGxvZ1JlY29yZCA9PiBsb2dSZWNvcmQucmVzb3VyY2UpXG4gICAgICAgICAgICAuZmlsdGVyKHJlc291cmNlID0+IHJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpO1xuICAgICAgICAvLyBBdm9pZCBzY2hlZHVsaW5nIGEgcHJvbWlzZSB0byBtYWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIGFuZCBlYXNpZXIgdG8gdGVzdFxuICAgICAgICBpZiAocGVuZGluZ1Jlc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkb0V4cG9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBlbmRpbmdSZXNvdXJjZXMubWFwKHJlc291cmNlID0+IHJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXM/LigpKSkudGhlbihkb0V4cG9ydCwgY29yZV8yLmdsb2JhbEVycm9ySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZSA9IEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yQmFzZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IgPSB2b2lkIDA7XG5jb25zdCBCYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2VfMSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9leHBvcnQvQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JCYXNlXCIpO1xuY2xhc3MgQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IgZXh0ZW5kcyBCYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2VfMS5CYXRjaExvZ1JlY29yZFByb2Nlc3NvckJhc2Uge1xuICAgIG9uU2h1dGRvd24oKSB7IH1cbn1cbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IgPSBCYXRjaExvZ1JlY29yZFByb2Nlc3Nvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaExvZ1JlY29yZFByb2Nlc3NvciA9IHZvaWQgMDtcbnZhciBCYXRjaExvZ1JlY29yZFByb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0JhdGNoTG9nUmVjb3JkUHJvY2Vzc29yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yXzEuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IgPSBleHBvcnRzLkluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXIgPSBleHBvcnRzLlNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvciA9IGV4cG9ydHMuQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyID0gZXhwb3J0cy5Ob29wTG9nUmVjb3JkUHJvY2Vzc29yID0gZXhwb3J0cy5Mb2dnZXJQcm92aWRlciA9IHZvaWQgMDtcbnZhciBMb2dnZXJQcm92aWRlcl8xID0gcmVxdWlyZShcIi4vTG9nZ2VyUHJvdmlkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb2dnZXJQcm92aWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTG9nZ2VyUHJvdmlkZXJfMS5Mb2dnZXJQcm92aWRlcjsgfSB9KTtcbnZhciBOb29wTG9nUmVjb3JkUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvTm9vcExvZ1JlY29yZFByb2Nlc3NvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vb3BMb2dSZWNvcmRQcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vb3BMb2dSZWNvcmRQcm9jZXNzb3JfMS5Ob29wTG9nUmVjb3JkUHJvY2Vzc29yOyB9IH0pO1xudmFyIENvbnNvbGVMb2dSZWNvcmRFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0NvbnNvbGVMb2dSZWNvcmRFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnNvbGVMb2dSZWNvcmRFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyXzEuQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyOyB9IH0pO1xudmFyIFNpbXBsZUxvZ1JlY29yZFByb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L1NpbXBsZUxvZ1JlY29yZFByb2Nlc3NvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yXzEuU2ltcGxlTG9nUmVjb3JkUHJvY2Vzc29yOyB9IH0pO1xudmFyIEluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9Jbk1lbW9yeUxvZ1JlY29yZEV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSW5NZW1vcnlMb2dSZWNvcmRFeHBvcnRlcl8xLkluTWVtb3J5TG9nUmVjb3JkRXhwb3J0ZXI7IH0gfSk7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHZvaWQgMDtcbi8qKlxuICogQWdncmVnYXRpb25UZW1wb3JhbGl0eSBpbmRpY2F0ZXMgdGhlIHdheSBhZGRpdGl2ZSBxdWFudGl0aWVzIGFyZSBleHByZXNzZWQuXG4gKi9cbnZhciBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgQWdncmVnYXRpb25UZW1wb3JhbGl0eVtBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W1wiREVMVEFcIl0gPSAwXSA9IFwiREVMVEFcIjtcbiAgICBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbXCJDVU1VTEFUSVZFXCJdID0gMV0gPSBcIkNVTVVMQVRJVkVcIjtcbn0pKEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgfHwgKGV4cG9ydHMuQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EYXRhUG9pbnRUeXBlID0gZXhwb3J0cy5JbnN0cnVtZW50VHlwZSA9IHZvaWQgMDtcbi8qKlxuICogU3VwcG9ydGVkIHR5cGVzIG9mIG1ldHJpYyBpbnN0cnVtZW50cy5cbiAqL1xudmFyIEluc3RydW1lbnRUeXBlO1xuKGZ1bmN0aW9uIChJbnN0cnVtZW50VHlwZSkge1xuICAgIEluc3RydW1lbnRUeXBlW1wiQ09VTlRFUlwiXSA9IFwiQ09VTlRFUlwiO1xuICAgIEluc3RydW1lbnRUeXBlW1wiR0FVR0VcIl0gPSBcIkdBVUdFXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJISVNUT0dSQU1cIl0gPSBcIkhJU1RPR1JBTVwiO1xuICAgIEluc3RydW1lbnRUeXBlW1wiVVBfRE9XTl9DT1VOVEVSXCJdID0gXCJVUF9ET1dOX0NPVU5URVJcIjtcbiAgICBJbnN0cnVtZW50VHlwZVtcIk9CU0VSVkFCTEVfQ09VTlRFUlwiXSA9IFwiT0JTRVJWQUJMRV9DT1VOVEVSXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJPQlNFUlZBQkxFX0dBVUdFXCJdID0gXCJPQlNFUlZBQkxFX0dBVUdFXCI7XG4gICAgSW5zdHJ1bWVudFR5cGVbXCJPQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUlwiXSA9IFwiT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVJcIjtcbn0pKEluc3RydW1lbnRUeXBlID0gZXhwb3J0cy5JbnN0cnVtZW50VHlwZSB8fCAoZXhwb3J0cy5JbnN0cnVtZW50VHlwZSA9IHt9KSk7XG4vKipcbiAqIFRoZSBhZ2dyZWdhdGVkIHBvaW50IGRhdGEgdHlwZS5cbiAqL1xudmFyIERhdGFQb2ludFR5cGU7XG4oZnVuY3Rpb24gKERhdGFQb2ludFR5cGUpIHtcbiAgICAvKipcbiAgICAgKiBBIGhpc3RvZ3JhbSBkYXRhIHBvaW50IGNvbnRhaW5zIGEgaGlzdG9ncmFtIHN0YXRpc3RpY3Mgb2YgY29sbGVjdGVkXG4gICAgICogdmFsdWVzIHdpdGggYSBsaXN0IG9mIGV4cGxpY2l0IGJ1Y2tldCBib3VuZGFyaWVzIGFuZCBzdGF0aXN0aWNzIHN1Y2hcbiAgICAgKiBhcyBtaW4sIG1heCwgY291bnQsIGFuZCBzdW0gb2YgYWxsIGNvbGxlY3RlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgRGF0YVBvaW50VHlwZVtEYXRhUG9pbnRUeXBlW1wiSElTVE9HUkFNXCJdID0gMF0gPSBcIkhJU1RPR1JBTVwiO1xuICAgIC8qKlxuICAgICAqIEFuIGV4cG9uZW50aWFsIGhpc3RvZ3JhbSBkYXRhIHBvaW50IGNvbnRhaW5zIGEgaGlzdG9ncmFtIHN0YXRpc3RpY3Mgb2ZcbiAgICAgKiBjb2xsZWN0ZWQgdmFsdWVzIHdoZXJlIGJ1Y2tldCBib3VuZGFyaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWRcbiAgICAgKiB1c2luZyBhbiBleHBvbmVudGlhbCBmdW5jdGlvbiwgYW5kIHN0YXRpc3RpY3Mgc3VjaCBhcyBtaW4sIG1heCwgY291bnQsXG4gICAgICogYW5kIHN1bSBvZiBhbGwgY29sbGVjdGVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBEYXRhUG9pbnRUeXBlW0RhdGFQb2ludFR5cGVbXCJFWFBPTkVOVElBTF9ISVNUT0dSQU1cIl0gPSAxXSA9IFwiRVhQT05FTlRJQUxfSElTVE9HUkFNXCI7XG4gICAgLyoqXG4gICAgICogQSBnYXVnZSBtZXRyaWMgZGF0YSBwb2ludCBoYXMgb25seSBhIHNpbmdsZSBudW1lcmljIHZhbHVlLlxuICAgICAqL1xuICAgIERhdGFQb2ludFR5cGVbRGF0YVBvaW50VHlwZVtcIkdBVUdFXCJdID0gMl0gPSBcIkdBVUdFXCI7XG4gICAgLyoqXG4gICAgICogQSBzdW0gbWV0cmljIGRhdGEgcG9pbnQgaGFzIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUgYW5kIGFcbiAgICAgKiBtb25vdG9uaWNpdHktaW5kaWNhdG9yLlxuICAgICAqL1xuICAgIERhdGFQb2ludFR5cGVbRGF0YVBvaW50VHlwZVtcIlNVTVwiXSA9IDNdID0gXCJTVU1cIjtcbn0pKERhdGFQb2ludFR5cGUgPSBleHBvcnRzLkRhdGFQb2ludFR5cGUgfHwgKGV4cG9ydHMuRGF0YVBvaW50VHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNEYXRhLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lcXVhbHNDYXNlSW5zZW5zaXRpdmUgPSBleHBvcnRzLmJpbmFyeVNlYXJjaFVCID0gZXhwb3J0cy5zZXRFcXVhbHMgPSBleHBvcnRzLkZsYXRNYXAgPSBleHBvcnRzLmlzUHJvbWlzZUFsbFNldHRsZWRSZWplY3Rpb25SZXN1bHQgPSBleHBvcnRzLlByb21pc2VBbGxTZXR0bGVkID0gZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBleHBvcnRzLlRpbWVvdXRFcnJvciA9IGV4cG9ydHMuaW5zdHJ1bWVudGF0aW9uU2NvcGVJZCA9IGV4cG9ydHMuaGFzaEF0dHJpYnV0ZXMgPSBleHBvcnRzLmlzTm90TnVsbGlzaCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzTm90TnVsbGlzaChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc05vdE51bGxpc2ggPSBpc05vdE51bGxpc2g7XG4vKipcbiAqIENvbnZlcnRpbmcgdGhlIHVub3JkZXJlZCBhdHRyaWJ1dGVzIGludG8gdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nLlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgdXNlciBwcm92aWRlZCB1bm9yZGVyZWQgQXR0cmlidXRlcy5cbiAqL1xuZnVuY3Rpb24gaGFzaEF0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcyk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgLy8gUmV0dXJuIGEgc3RyaW5nIHRoYXQgaXMgc3RhYmxlIG9uIGtleSBvcmRlcnMuXG4gICAga2V5cyA9IGtleXMuc29ydCgpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXlzLm1hcChrZXkgPT4gW2tleSwgYXR0cmlidXRlc1trZXldXSkpO1xufVxuZXhwb3J0cy5oYXNoQXR0cmlidXRlcyA9IGhhc2hBdHRyaWJ1dGVzO1xuLyoqXG4gKiBDb252ZXJ0aW5nIHRoZSBpbnN0cnVtZW50YXRpb24gc2NvcGUgb2JqZWN0IHRvIGEgdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nLlxuICogQHBhcmFtIGluc3RydW1lbnRhdGlvblNjb3BlXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRhdGlvblNjb3BlSWQoaW5zdHJ1bWVudGF0aW9uU2NvcGUpIHtcbiAgICByZXR1cm4gYCR7aW5zdHJ1bWVudGF0aW9uU2NvcGUubmFtZX06JHtpbnN0cnVtZW50YXRpb25TY29wZS52ZXJzaW9uID8/ICcnfToke2luc3RydW1lbnRhdGlvblNjb3BlLnNjaGVtYVVybCA/PyAnJ31gO1xufVxuZXhwb3J0cy5pbnN0cnVtZW50YXRpb25TY29wZUlkID0gaW5zdHJ1bWVudGF0aW9uU2NvcGVJZDtcbi8qKlxuICogRXJyb3IgdGhhdCBpcyB0aHJvd24gb24gdGltZW91dHMuXG4gKi9cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICAvLyBtYW51YWxseSBhZGp1c3QgcHJvdG90eXBlIHRvIHJldGFpbiBgaW5zdGFuY2VvZmAgZnVuY3Rpb25hbGl0eSB3aGVuIHRhcmdldGluZyBFUzUsIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0LXdpa2kvYmxvYi9tYWluL0JyZWFraW5nLUNoYW5nZXMubWQjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUaW1lb3V0RXJyb3IucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcbi8qKlxuICogQWRkcyBhIHRpbWVvdXQgdG8gYSBwcm9taXNlIGFuZCByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZC4gQWxzbyByZWplY3RzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZVxuICogcmVqZWN0cywgYW5kIHJlc29sdmVzIGlmIHRoZSBzcGVjaWZpZWQgcHJvbWlzZSByZXNvbHZlcy5cbiAqXG4gKiA8cD4gTk9URTogdGhpcyBvcGVyYXRpb24gd2lsbCBjb250aW51ZSBldmVuIGFmdGVyIGl0IHRocm93cyBhIHtAbGluayBUaW1lb3V0RXJyb3J9LlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIHByb21pc2UgdG8gdXNlIHdpdGggdGltZW91dC5cbiAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAqL1xuZnVuY3Rpb24gY2FsbFdpdGhUaW1lb3V0KHByb21pc2UsIHRpbWVvdXQpIHtcbiAgICBsZXQgdGltZW91dEhhbmRsZTtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHRpbWVvdXRGdW5jdGlvbihfcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRIYW5kbGVyKCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ09wZXJhdGlvbiB0aW1lZCBvdXQuJykpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHJlYXNvbiA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jYWxsV2l0aFRpbWVvdXQgPSBjYWxsV2l0aFRpbWVvdXQ7XG4vKipcbiAqIE5vZGUuanMgdjEyLjkgbG93ZXIgYW5kIGJyb3dzZXIgY29tcGF0aWJsZSBgUHJvbWlzZS5hbGxTZXR0bGVkYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gUHJvbWlzZUFsbFNldHRsZWQocHJvbWlzZXMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCBwO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdmdWxmaWxsZWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogJ3JlamVjdGVkJyxcbiAgICAgICAgICAgICAgICByZWFzb246IGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuZXhwb3J0cy5Qcm9taXNlQWxsU2V0dGxlZCA9IFByb21pc2VBbGxTZXR0bGVkO1xuZnVuY3Rpb24gaXNQcm9taXNlQWxsU2V0dGxlZFJlamVjdGlvblJlc3VsdChpdCkge1xuICAgIHJldHVybiBpdC5zdGF0dXMgPT09ICdyZWplY3RlZCc7XG59XG5leHBvcnRzLmlzUHJvbWlzZUFsbFNldHRsZWRSZWplY3Rpb25SZXN1bHQgPSBpc1Byb21pc2VBbGxTZXR0bGVkUmVqZWN0aW9uUmVzdWx0O1xuLyoqXG4gKiBOb2RlLmpzIHYxMS4wIGxvd2VyIGFuZCBicm93c2VyIGNvbXBhdGlibGUgYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYC5cbiAqL1xuZnVuY3Rpb24gRmxhdE1hcChhcnIsIGZuKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgYXJyLmZvckVhY2goaXQgPT4ge1xuICAgICAgICByZXN1bHQucHVzaCguLi5mbihpdCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnRzLkZsYXRNYXAgPSBGbGF0TWFwO1xuZnVuY3Rpb24gc2V0RXF1YWxzKGxocywgcmhzKSB7XG4gICAgaWYgKGxocy5zaXplICE9PSByaHMuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaHMpIHtcbiAgICAgICAgaWYgKCFyaHMuaGFzKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnRzLnNldEVxdWFscyA9IHNldEVxdWFscztcbi8qKlxuICogQmluYXJ5IHNlYXJjaCB0aGUgc29ydGVkIGFycmF5IHRvIHRoZSBmaW5kIHVwcGVyIGJvdW5kIGZvciB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gYXJyXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaFVCKGFyciwgdmFsdWUpIHtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IGFyci5sZW5ndGggLSAxO1xuICAgIGxldCByZXQgPSBhcnIubGVuZ3RoO1xuICAgIHdoaWxlIChoaSA+PSBsbykge1xuICAgICAgICBjb25zdCBtaWQgPSBsbyArIE1hdGgudHJ1bmMoKGhpIC0gbG8pIC8gMik7XG4gICAgICAgIGlmIChhcnJbbWlkXSA8IHZhbHVlKSB7XG4gICAgICAgICAgICBsbyA9IG1pZCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXQgPSBtaWQ7XG4gICAgICAgICAgICBoaSA9IG1pZCAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbmV4cG9ydHMuYmluYXJ5U2VhcmNoVUIgPSBiaW5hcnlTZWFyY2hVQjtcbmZ1bmN0aW9uIGVxdWFsc0Nhc2VJbnNlbnNpdGl2ZShsaHMsIHJocykge1xuICAgIHJldHVybiBsaHMudG9Mb3dlckNhc2UoKSA9PT0gcmhzLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnRzLmVxdWFsc0Nhc2VJbnNlbnNpdGl2ZSA9IGVxdWFsc0Nhc2VJbnNlbnNpdGl2ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BZ2dyZWdhdG9yS2luZCA9IHZvaWQgMDtcbi8qKiBUaGUga2luZCBvZiBhZ2dyZWdhdG9yLiAqL1xudmFyIEFnZ3JlZ2F0b3JLaW5kO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdG9yS2luZCkge1xuICAgIEFnZ3JlZ2F0b3JLaW5kW0FnZ3JlZ2F0b3JLaW5kW1wiRFJPUFwiXSA9IDBdID0gXCJEUk9QXCI7XG4gICAgQWdncmVnYXRvcktpbmRbQWdncmVnYXRvcktpbmRbXCJTVU1cIl0gPSAxXSA9IFwiU1VNXCI7XG4gICAgQWdncmVnYXRvcktpbmRbQWdncmVnYXRvcktpbmRbXCJMQVNUX1ZBTFVFXCJdID0gMl0gPSBcIkxBU1RfVkFMVUVcIjtcbiAgICBBZ2dyZWdhdG9yS2luZFtBZ2dyZWdhdG9yS2luZFtcIkhJU1RPR1JBTVwiXSA9IDNdID0gXCJISVNUT0dSQU1cIjtcbiAgICBBZ2dyZWdhdG9yS2luZFtBZ2dyZWdhdG9yS2luZFtcIkVYUE9ORU5USUFMX0hJU1RPR1JBTVwiXSA9IDRdID0gXCJFWFBPTkVOVElBTF9ISVNUT0dSQU1cIjtcbn0pKEFnZ3JlZ2F0b3JLaW5kID0gZXhwb3J0cy5BZ2dyZWdhdG9yS2luZCB8fCAoZXhwb3J0cy5BZ2dyZWdhdG9yS2luZCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRHJvcEFnZ3JlZ2F0b3IgPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG4vKiogQmFzaWMgYWdncmVnYXRvciBmb3IgTm9uZSB3aGljaCBrZWVwcyBubyByZWNvcmRlZCB2YWx1ZS4gKi9cbmNsYXNzIERyb3BBZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gdHlwZXNfMS5BZ2dyZWdhdG9yS2luZC5EUk9QO1xuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbWVyZ2UoX3ByZXZpb3VzLCBfZGVsdGEpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZGlmZihfcHJldmlvdXMsIF9jdXJyZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRvTWV0cmljRGF0YShfZGVzY3JpcHRvciwgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIF9hY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMsIF9lbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZXhwb3J0cy5Ecm9wQWdncmVnYXRvciA9IERyb3BBZ2dyZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RHJvcC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGlzdG9ncmFtQWdncmVnYXRvciA9IGV4cG9ydHMuSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gdm9pZCAwO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgTWV0cmljRGF0YV8xID0gcmVxdWlyZShcIi4uL2V4cG9ydC9NZXRyaWNEYXRhXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZU5ld0VtcHR5Q2hlY2twb2ludChib3VuZGFyaWVzKSB7XG4gICAgY29uc3QgY291bnRzID0gYm91bmRhcmllcy5tYXAoKCkgPT4gMCk7XG4gICAgY291bnRzLnB1c2goMCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgYm91bmRhcmllcyxcbiAgICAgICAgICAgIGNvdW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgc3VtOiAwLFxuICAgICAgICBjb3VudDogMCxcbiAgICAgICAgaGFzTWluTWF4OiBmYWxzZSxcbiAgICAgICAgbWluOiBJbmZpbml0eSxcbiAgICAgICAgbWF4OiAtSW5maW5pdHksXG4gICAgfTtcbn1cbmNsYXNzIEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9ib3VuZGFyaWVzO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgX2N1cnJlbnQ7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBfYm91bmRhcmllcywgX3JlY29yZE1pbk1heCA9IHRydWUsIF9jdXJyZW50ID0gY3JlYXRlTmV3RW1wdHlDaGVja3BvaW50KF9ib3VuZGFyaWVzKSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5fYm91bmRhcmllcyA9IF9ib3VuZGFyaWVzO1xuICAgICAgICB0aGlzLl9yZWNvcmRNaW5NYXggPSBfcmVjb3JkTWluTWF4O1xuICAgICAgICB0aGlzLl9jdXJyZW50ID0gX2N1cnJlbnQ7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICAvLyBOYU4gZG9lcyBub3QgZmFsbCBpbnRvIGFueSBidWNrZXQsIGlzIG5vdCB6ZXJvIGFuZCBzaG91bGQgbm90IGJlIGNvdW50ZWQsXG4gICAgICAgIC8vIE5hTiBpcyBuZXZlciBncmVhdGVyIHRoYW4gbWF4IG5vciBsZXNzIHRoYW4gbWluLCB0aGVyZWZvcmUgcmV0dXJuIGFzIHRoZXJlJ3Mgbm90aGluZyBmb3IgdXMgdG8gZG8uXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudC5jb3VudCArPSAxO1xuICAgICAgICB0aGlzLl9jdXJyZW50LnN1bSArPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3JlY29yZE1pbk1heCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5taW4gPSBNYXRoLm1pbih2YWx1ZSwgdGhpcy5fY3VycmVudC5taW4pO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5tYXggPSBNYXRoLm1heCh2YWx1ZSwgdGhpcy5fY3VycmVudC5tYXgpO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudC5oYXNNaW5NYXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9ICgwLCB1dGlsc18xLmJpbmFyeVNlYXJjaFVCKSh0aGlzLl9ib3VuZGFyaWVzLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQuYnVja2V0cy5jb3VudHNbaWR4XSArPSAxO1xuICAgIH1cbiAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKSB7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICAgIH1cbiAgICB0b1BvaW50VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICAgIH1cbn1cbmV4cG9ydHMuSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gSGlzdG9ncmFtQWNjdW11bGF0aW9uO1xuLyoqXG4gKiBCYXNpYyBhZ2dyZWdhdG9yIHdoaWNoIG9ic2VydmVzIGV2ZW50cyBhbmQgY291bnRzIHRoZW0gaW4gcHJlLWRlZmluZWQgYnVja2V0c1xuICogYW5kIHByb3ZpZGVzIHRoZSB0b3RhbCBzdW0gYW5kIGNvdW50IG9mIGFsbCBvYnNlcnZhdGlvbnMuXG4gKi9cbmNsYXNzIEhpc3RvZ3JhbUFnZ3JlZ2F0b3Ige1xuICAgIF9ib3VuZGFyaWVzO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAga2luZCA9IHR5cGVzXzEuQWdncmVnYXRvcktpbmQuSElTVE9HUkFNO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBfYm91bmRhcmllcyBzb3J0ZWQgdXBwZXIgYm91bmRzIG9mIHJlY29yZGVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gX3JlY29yZE1pbk1heCBJZiBzZXQgdG8gdHJ1ZSwgbWluIGFuZCBtYXggd2lsbCBiZSByZWNvcmRlZC4gT3RoZXJ3aXNlLCBtaW4gYW5kIG1heCB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfYm91bmRhcmllcywgX3JlY29yZE1pbk1heCkge1xuICAgICAgICB0aGlzLl9ib3VuZGFyaWVzID0gX2JvdW5kYXJpZXM7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbihzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW1BY2N1bXVsYXRpb24oc3RhcnRUaW1lLCB0aGlzLl9ib3VuZGFyaWVzLCB0aGlzLl9yZWNvcmRNaW5NYXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2Ugb2YgdHdvIGhpc3RvZ3JhbSBhY2N1bXVsYXRpb25zLiBBcyBsb25nIGFzIG9uZSBBZ2dyZWdhdG9yXG4gICAgICogaW5zdGFuY2UgcHJvZHVjZXMgYWxsIEFjY3VtdWxhdGlvbnMgd2l0aCBjb25zdGFudCBib3VuZGFyaWVzIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXRcbiAgICAgKiBtZXJnaW5nIGFjY3VtdWxhdGlvbnMgd2l0aCBkaWZmZXJlbnQgYm91bmRhcmllcy5cbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cywgZGVsdGEpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHByZXZpb3VzLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBkZWx0YVZhbHVlID0gZGVsdGEudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ291bnRzID0gcHJldmlvdXNWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgZGVsdGFDb3VudHMgPSBkZWx0YVZhbHVlLmJ1Y2tldHMuY291bnRzO1xuICAgICAgICBjb25zdCBtZXJnZWRDb3VudHMgPSBuZXcgQXJyYXkocHJldmlvdXNDb3VudHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgcHJldmlvdXNDb3VudHMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgbWVyZ2VkQ291bnRzW2lkeF0gPSBwcmV2aW91c0NvdW50c1tpZHhdICsgZGVsdGFDb3VudHNbaWR4XTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXggPSAtSW5maW5pdHk7XG4gICAgICAgIGlmICh0aGlzLl9yZWNvcmRNaW5NYXgpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmhhc01pbk1heCAmJiBkZWx0YVZhbHVlLmhhc01pbk1heCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKHByZXZpb3VzVmFsdWUubWluLCBkZWx0YVZhbHVlLm1pbik7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgocHJldmlvdXNWYWx1ZS5tYXgsIGRlbHRhVmFsdWUubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByZXZpb3VzVmFsdWUuaGFzTWluTWF4KSB7XG4gICAgICAgICAgICAgICAgbWluID0gcHJldmlvdXNWYWx1ZS5taW47XG4gICAgICAgICAgICAgICAgbWF4ID0gcHJldmlvdXNWYWx1ZS5tYXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkZWx0YVZhbHVlLmhhc01pbk1heCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IGRlbHRhVmFsdWUubWluO1xuICAgICAgICAgICAgICAgIG1heCA9IGRlbHRhVmFsdWUubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSGlzdG9ncmFtQWNjdW11bGF0aW9uKHByZXZpb3VzLnN0YXJ0VGltZSwgcHJldmlvdXNWYWx1ZS5idWNrZXRzLmJvdW5kYXJpZXMsIHRoaXMuX3JlY29yZE1pbk1heCwge1xuICAgICAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXM6IHByZXZpb3VzVmFsdWUuYnVja2V0cy5ib3VuZGFyaWVzLFxuICAgICAgICAgICAgICAgIGNvdW50czogbWVyZ2VkQ291bnRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiBwcmV2aW91c1ZhbHVlLmNvdW50ICsgZGVsdGFWYWx1ZS5jb3VudCxcbiAgICAgICAgICAgIHN1bTogcHJldmlvdXNWYWx1ZS5zdW0gKyBkZWx0YVZhbHVlLnN1bSxcbiAgICAgICAgICAgIGhhc01pbk1heDogdGhpcy5fcmVjb3JkTWluTWF4ICYmXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzVmFsdWUuaGFzTWluTWF4IHx8IGRlbHRhVmFsdWUuaGFzTWluTWF4KSxcbiAgICAgICAgICAgIG1pbjogbWluLFxuICAgICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IERFTFRBIGFnZ3JlZ2F0aW9uIGJ5IGNvbXBhcmluZyB0d28gY3VtdWxhdGl2ZSBtZWFzdXJlbWVudHMuXG4gICAgICovXG4gICAgZGlmZihwcmV2aW91cywgY3VycmVudCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gcHJldmlvdXMudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnQudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ291bnRzID0gcHJldmlvdXNWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50cyA9IGN1cnJlbnRWYWx1ZS5idWNrZXRzLmNvdW50cztcbiAgICAgICAgY29uc3QgZGlmZmVkQ291bnRzID0gbmV3IEFycmF5KHByZXZpb3VzQ291bnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHByZXZpb3VzQ291bnRzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGRpZmZlZENvdW50c1tpZHhdID0gY3VycmVudENvdW50c1tpZHhdIC0gcHJldmlvdXNDb3VudHNbaWR4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbUFjY3VtdWxhdGlvbihjdXJyZW50LnN0YXJ0VGltZSwgcHJldmlvdXNWYWx1ZS5idWNrZXRzLmJvdW5kYXJpZXMsIHRoaXMuX3JlY29yZE1pbk1heCwge1xuICAgICAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXM6IHByZXZpb3VzVmFsdWUuYnVja2V0cy5ib3VuZGFyaWVzLFxuICAgICAgICAgICAgICAgIGNvdW50czogZGlmZmVkQ291bnRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiBjdXJyZW50VmFsdWUuY291bnQgLSBwcmV2aW91c1ZhbHVlLmNvdW50LFxuICAgICAgICAgICAgc3VtOiBjdXJyZW50VmFsdWUuc3VtIC0gcHJldmlvdXNWYWx1ZS5zdW0sXG4gICAgICAgICAgICBoYXNNaW5NYXg6IGZhbHNlLFxuICAgICAgICAgICAgbWluOiBJbmZpbml0eSxcbiAgICAgICAgICAgIG1heDogLUluZmluaXR5LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9NZXRyaWNEYXRhKGRlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcywgZW5kVGltZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICBkYXRhUG9pbnRUeXBlOiBNZXRyaWNEYXRhXzEuRGF0YVBvaW50VHlwZS5ISVNUT0dSQU0sXG4gICAgICAgICAgICBkYXRhUG9pbnRzOiBhY2N1bXVsYXRpb25CeUF0dHJpYnV0ZXMubWFwKChbYXR0cmlidXRlcywgYWNjdW11bGF0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VmFsdWUgPSBhY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIGluc3RydW1lbnQgYWxsb3dzIG5lZ2F0aXZlIHZhbHVlcy5cbiAgICAgICAgICAgICAgICBjb25zdCBhbGxvd3NOZWdhdGl2ZVZhbHVlcyA9IGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkdBVUdFIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUiB8fFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnR5cGUgPT09IE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogYWNjdW11bGF0aW9uLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kVGltZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogcG9pbnRWYWx1ZS5oYXNNaW5NYXggPyBwb2ludFZhbHVlLm1pbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogcG9pbnRWYWx1ZS5oYXNNaW5NYXggPyBwb2ludFZhbHVlLm1heCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bTogIWFsbG93c05lZ2F0aXZlVmFsdWVzID8gcG9pbnRWYWx1ZS5zdW0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRzOiBwb2ludFZhbHVlLmJ1Y2tldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudDogcG9pbnRWYWx1ZS5jb3VudCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5IaXN0b2dyYW1BZ2dyZWdhdG9yID0gSGlzdG9ncmFtQWdncmVnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhpc3RvZ3JhbS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CdWNrZXRzID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNsYXNzIEJ1Y2tldHMge1xuICAgIGJhY2tpbmc7XG4gICAgaW5kZXhCYXNlO1xuICAgIGluZGV4U3RhcnQ7XG4gICAgaW5kZXhFbmQ7XG4gICAgLyoqXG4gICAgICogVGhlIHRlcm0gaW5kZXggcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgdGhlIGV4cG9uZW50aWFsIGhpc3RvZ3JhbSBidWNrZXRcbiAgICAgKiB1c2VkIHRvIGRldGVybWluZSBpdHMgYm91bmRhcmllcy4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIGEgYnVja2V0IGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSBiYXNlICoqIGluZGV4IGFuZCB0aGUgdXBwZXIgYm91bmRhcnkgb2YgYSBidWNrZXQgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IGJhc2UgKiogKGluZGV4ICsgMSkuIGluZGV4IHZhbHVlcyBhcmUgc2lnbmVkIHRvIGFjY291bnRcbiAgICAgKiBmb3IgdmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxLlxuICAgICAqXG4gICAgICogaW5kZXhCYXNlIGlzIHRoZSBpbmRleCBvZiB0aGUgMHRoIHBvc2l0aW9uIGluIHRoZVxuICAgICAqIGJhY2tpbmcgYXJyYXksIGkuZS4sIGJhY2tpbmdbMF0gaXMgdGhlIGNvdW50XG4gICAgICogaW4gdGhlIGJ1Y2tldCB3aXRoIGluZGV4IGBpbmRleEJhc2VgLlxuICAgICAqXG4gICAgICogaW5kZXhTdGFydCBpcyB0aGUgc21hbGxlc3QgaW5kZXggdmFsdWUgcmVwcmVzZW50ZWRcbiAgICAgKiBpbiB0aGUgYmFja2luZyBhcnJheS5cbiAgICAgKlxuICAgICAqIGluZGV4RW5kIGlzIHRoZSBsYXJnZXN0IGluZGV4IHZhbHVlIHJlcHJlc2VudGVkIGluXG4gICAgICogdGhlIGJhY2tpbmcgYXJyYXkuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYmFja2luZyA9IG5ldyBCdWNrZXRzQmFja2luZygpLCBpbmRleEJhc2UgPSAwLCBpbmRleFN0YXJ0ID0gMCwgaW5kZXhFbmQgPSAwKSB7XG4gICAgICAgIHRoaXMuYmFja2luZyA9IGJhY2tpbmc7XG4gICAgICAgIHRoaXMuaW5kZXhCYXNlID0gaW5kZXhCYXNlO1xuICAgICAgICB0aGlzLmluZGV4U3RhcnQgPSBpbmRleFN0YXJ0O1xuICAgICAgICB0aGlzLmluZGV4RW5kID0gaW5kZXhFbmQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9mZnNldCBpcyB0aGUgYnVja2V0IGluZGV4IG9mIHRoZSBzbWFsbGVzdCBlbnRyeSBpbiB0aGUgY291bnRzIGFycmF5XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgb2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleFN0YXJ0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCdWNrZXRzIGlzIGEgdmlldyBpbnRvIHRoZSBiYWNraW5nIGFycmF5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYmFja2luZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluZGV4RW5kID09PSB0aGlzLmluZGV4U3RhcnQgJiYgdGhpcy5hdCgwKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhFbmQgLSB0aGlzLmluZGV4U3RhcnQgKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb3VudHMsIHdoZXJlIGNvdW50W2ldIGNhcnJpZXMgdGhlIGNvdW50XG4gICAgICogb2YgdGhlIGJ1Y2tldCBhdCBpbmRleCAob2Zmc2V0K2kpLiAgY291bnRbaV0gaXMgdGhlIGNvdW50IG9mXG4gICAgICogdmFsdWVzIGdyZWF0ZXIgdGhhbiBiYXNlXihvZmZzZXQraSkgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqIGJhc2VeKG9mZnNldCtpKzEpLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBsb2dpY2FsIGNvdW50cyBiYXNlZCBvbiB0aGUgYmFja2luZyBhcnJheVxuICAgICAqL1xuICAgIGNvdW50cygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0sIChfLCBpKSA9PiB0aGlzLmF0KGkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXQgcmV0dXJucyB0aGUgY291bnQgb2YgdGhlIGJ1Y2tldCBhdCBhIHBvc2l0aW9uIGluIHRoZSBsb2dpY2FsXG4gICAgICogYXJyYXkgb2YgY291bnRzLlxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgYXQocG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgYmlhcyA9IHRoaXMuaW5kZXhCYXNlIC0gdGhpcy5pbmRleFN0YXJ0O1xuICAgICAgICBpZiAocG9zaXRpb24gPCBiaWFzKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSB0aGlzLmJhY2tpbmcubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9uIC09IGJpYXM7XG4gICAgICAgIHJldHVybiB0aGlzLmJhY2tpbmcuY291bnRBdChwb3NpdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGluY3JlbWVudEJ1Y2tldCBpbmNyZW1lbnRzIHRoZSBiYWNraW5nIGFycmF5IGluZGV4IGJ5IGBpbmNyZW1lbnRgXG4gICAgICogQHBhcmFtIGJ1Y2tldEluZGV4XG4gICAgICogQHBhcmFtIGluY3JlbWVudFxuICAgICAqL1xuICAgIGluY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgaW5jcmVtZW50KSB7XG4gICAgICAgIHRoaXMuYmFja2luZy5pbmNyZW1lbnQoYnVja2V0SW5kZXgsIGluY3JlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGRlY3JlbWVudEJ1Y2tldCBkZWNyZW1lbnRzIHRoZSBiYWNraW5nIGFycmF5IGluZGV4IGJ5IGBkZWNyZW1lbnRgXG4gICAgICogaWYgZGVjcmVtZW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSwgaXQncyBzZXQgdG8gMC5cbiAgICAgKiBAcGFyYW0gYnVja2V0SW5kZXhcbiAgICAgKiBAcGFyYW0gZGVjcmVtZW50XG4gICAgICovXG4gICAgZGVjcmVtZW50QnVja2V0KGJ1Y2tldEluZGV4LCBkZWNyZW1lbnQpIHtcbiAgICAgICAgdGhpcy5iYWNraW5nLmRlY3JlbWVudChidWNrZXRJbmRleCwgZGVjcmVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJpbSByZW1vdmVzIGxlYWRpbmcgYW5kIC8gb3IgdHJhaWxpbmcgemVybyBidWNrZXRzICh3aGljaCBjYW4gb2NjdXJcbiAgICAgKiBhZnRlciBkaWZmaW5nIHR3byBoaXN0b3MpIGFuZCByb3RhdGVzIHRoZSBiYWNraW5nIGFycmF5IHNvIHRoYXQgdGhlXG4gICAgICogc21hbGxlc3Qgbm9uLXplcm8gaW5kZXggaXMgaW4gdGhlIDB0aCBwb3NpdGlvbiBvZiB0aGUgYmFja2luZyBhcnJheVxuICAgICAqL1xuICAgIHRyaW0oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXQoaSkgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4U3RhcnQgKz0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIC8vdGhlIGVudGlyZSBhcnJheSBpcyB6ZXJvZWQgb3V0XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleFN0YXJ0ID0gdGhpcy5pbmRleEVuZCA9IHRoaXMuaW5kZXhCYXNlID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0KGkpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEVuZCAtPSB0aGlzLmxlbmd0aCAtIGkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JvdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkb3duc2NhbGUgZmlyc3Qgcm90YXRlcywgdGhlbiBjb2xsYXBzZXMgMioqYGJ5YC10by0xIGJ1Y2tldHMuXG4gICAgICogQHBhcmFtIGJ5XG4gICAgICovXG4gICAgZG93bnNjYWxlKGJ5KSB7XG4gICAgICAgIHRoaXMuX3JvdGF0ZSgpO1xuICAgICAgICBjb25zdCBzaXplID0gMSArIHRoaXMuaW5kZXhFbmQgLSB0aGlzLmluZGV4U3RhcnQ7XG4gICAgICAgIGNvbnN0IGVhY2ggPSAxIDw8IGJ5O1xuICAgICAgICBsZXQgaW5wb3MgPSAwO1xuICAgICAgICBsZXQgb3V0cG9zID0gMDtcbiAgICAgICAgZm9yIChsZXQgcG9zID0gdGhpcy5pbmRleFN0YXJ0OyBwb3MgPD0gdGhpcy5pbmRleEVuZDspIHtcbiAgICAgICAgICAgIGxldCBtb2QgPSBwb3MgJSBlYWNoO1xuICAgICAgICAgICAgaWYgKG1vZCA8IDApIHtcbiAgICAgICAgICAgICAgICBtb2QgKz0gZWFjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBtb2Q7IGkgPCBlYWNoICYmIGlucG9zIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2NhdGVCdWNrZXQob3V0cG9zLCBpbnBvcyk7XG4gICAgICAgICAgICAgICAgaW5wb3MrKztcbiAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kZXhTdGFydCA+Pj0gYnk7XG4gICAgICAgIHRoaXMuaW5kZXhFbmQgPj49IGJ5O1xuICAgICAgICB0aGlzLmluZGV4QmFzZSA9IHRoaXMuaW5kZXhTdGFydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBCdWNrZXRzXG4gICAgICogQHJldHVybnMge0J1Y2tldHN9XG4gICAgICovXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQnVja2V0cyh0aGlzLmJhY2tpbmcuY2xvbmUoKSwgdGhpcy5pbmRleEJhc2UsIHRoaXMuaW5kZXhTdGFydCwgdGhpcy5pbmRleEVuZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9yb3RhdGUgc2hpZnRzIHRoZSBiYWNraW5nIGFycmF5IGNvbnRlbnRzIHNvIHRoYXQgaW5kZXhTdGFydCA9PVxuICAgICAqIGluZGV4QmFzZSB0byBzaW1wbGlmeSB0aGUgZG93bnNjYWxlIGxvZ2ljLlxuICAgICAqL1xuICAgIF9yb3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGJpYXMgPSB0aGlzLmluZGV4QmFzZSAtIHRoaXMuaW5kZXhTdGFydDtcbiAgICAgICAgaWYgKGJpYXMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaWFzID4gMCkge1xuICAgICAgICAgICAgdGhpcy5iYWNraW5nLnJldmVyc2UoMCwgdGhpcy5iYWNraW5nLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tpbmcucmV2ZXJzZSgwLCBiaWFzKTtcbiAgICAgICAgICAgIHRoaXMuYmFja2luZy5yZXZlcnNlKGJpYXMsIHRoaXMuYmFja2luZy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbmVnYXRpdmUgYmlhcywgdGhpcyBjYW4gaGFwcGVuIHdoZW4gZGlmZmluZyB0d28gaGlzdG9ncmFtc1xuICAgICAgICAgICAgdGhpcy5iYWNraW5nLnJldmVyc2UoMCwgdGhpcy5iYWNraW5nLmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmJhY2tpbmcucmV2ZXJzZSgwLCB0aGlzLmJhY2tpbmcubGVuZ3RoICsgYmlhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleEJhc2UgPSB0aGlzLmluZGV4U3RhcnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9yZWxvY2F0ZUJ1Y2tldCBhZGRzIHRoZSBjb3VudCBpbiBjb3VudHNbc3JjXSB0byBjb3VudHNbZGVzdF0gYW5kXG4gICAgICogcmVzZXRzIGNvdW50W3NyY10gdG8gemVyby5cbiAgICAgKi9cbiAgICBfcmVsb2NhdGVCdWNrZXQoZGVzdCwgc3JjKSB7XG4gICAgICAgIGlmIChkZXN0ID09PSBzcmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudEJ1Y2tldChkZXN0LCB0aGlzLmJhY2tpbmcuZW1wdHlCdWNrZXQoc3JjKSk7XG4gICAgfVxufVxuZXhwb3J0cy5CdWNrZXRzID0gQnVja2V0cztcbi8qKlxuICogQnVja2V0c0JhY2tpbmcgaG9sZHMgdGhlIHJhdyBidWNrZXRzIGFuZCBzb21lIHV0aWxpdHkgbWV0aG9kcyB0b1xuICogbWFuYWdlIHRoZW0uXG4gKi9cbmNsYXNzIEJ1Y2tldHNCYWNraW5nIHtcbiAgICBfY291bnRzO1xuICAgIGNvbnN0cnVjdG9yKF9jb3VudHMgPSBbMF0pIHtcbiAgICAgICAgdGhpcy5fY291bnRzID0gX2NvdW50cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogbGVuZ3RoIHJldHVybnMgdGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGJhY2tpbmcgYXJyYXksIHdoaWNoXG4gICAgICogaXMgPj0gYnVja2V0cy5sZW5ndGgoKVxuICAgICAqL1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudHMubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb3VudEF0IHJldHVybnMgdGhlIGNvdW50IGluIGEgc3BlY2lmaWMgYnVja2V0XG4gICAgICovXG4gICAgY291bnRBdChwb3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdW50c1twb3NdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBncm93VG8gZ3Jvd3MgYSBiYWNraW5nIGFycmF5IGFuZCBjb3BpZXMgb2xkIGVudHJpZXNcbiAgICAgKiBpbnRvIHRoZWlyIGNvcnJlY3QgbmV3IHBvc2l0aW9ucy5cbiAgICAgKi9cbiAgICBncm93VG8obmV3U2l6ZSwgb2xkUG9zaXRpdmVMaW1pdCwgbmV3UG9zaXRpdmVMaW1pdCkge1xuICAgICAgICBjb25zdCB0bXAgPSBuZXcgQXJyYXkobmV3U2l6ZSkuZmlsbCgwKTtcbiAgICAgICAgdG1wLnNwbGljZShuZXdQb3NpdGl2ZUxpbWl0LCB0aGlzLl9jb3VudHMubGVuZ3RoIC0gb2xkUG9zaXRpdmVMaW1pdCwgLi4udGhpcy5fY291bnRzLnNsaWNlKG9sZFBvc2l0aXZlTGltaXQpKTtcbiAgICAgICAgdG1wLnNwbGljZSgwLCBvbGRQb3NpdGl2ZUxpbWl0LCAuLi50aGlzLl9jb3VudHMuc2xpY2UoMCwgb2xkUG9zaXRpdmVMaW1pdCkpO1xuICAgICAgICB0aGlzLl9jb3VudHMgPSB0bXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHJldmVyc2UgdGhlIGl0ZW1zIGluIHRoZSBiYWNraW5nIGFycmF5IGluIHRoZSByYW5nZSBbZnJvbSwgbGltaXQpLlxuICAgICAqL1xuICAgIHJldmVyc2UoZnJvbSwgbGltaXQpIHtcbiAgICAgICAgY29uc3QgbnVtID0gTWF0aC5mbG9vcigoZnJvbSArIGxpbWl0KSAvIDIpIC0gZnJvbTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fY291bnRzW2Zyb20gKyBpXTtcbiAgICAgICAgICAgIHRoaXMuX2NvdW50c1tmcm9tICsgaV0gPSB0aGlzLl9jb3VudHNbbGltaXQgLSBpIC0gMV07XG4gICAgICAgICAgICB0aGlzLl9jb3VudHNbbGltaXQgLSBpIC0gMV0gPSB0bXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogZW1wdHlCdWNrZXQgZW1wdGllcyB0aGUgY291bnQgZnJvbSBhIGJ1Y2tldCwgZm9yXG4gICAgICogbW92aW5nIGludG8gYW5vdGhlci5cbiAgICAgKi9cbiAgICBlbXB0eUJ1Y2tldChzcmMpIHtcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5fY291bnRzW3NyY107XG4gICAgICAgIHRoaXMuX2NvdW50c1tzcmNdID0gMDtcbiAgICAgICAgcmV0dXJuIHRtcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogaW5jcmVtZW50cyBhIGJ1Y2tldCBieSBgaW5jcmVtZW50YFxuICAgICAqL1xuICAgIGluY3JlbWVudChidWNrZXRJbmRleCwgaW5jcmVtZW50KSB7XG4gICAgICAgIHRoaXMuX2NvdW50c1tidWNrZXRJbmRleF0gKz0gaW5jcmVtZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBkZWNyZW1lbnRzIGEgYnVja2V0IGJ5IGBkZWNyZW1lbnRgXG4gICAgICovXG4gICAgZGVjcmVtZW50KGJ1Y2tldEluZGV4LCBkZWNyZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50c1tidWNrZXRJbmRleF0gPj0gZGVjcmVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb3VudHNbYnVja2V0SW5kZXhdIC09IGRlY3JlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSdyZSBiZWluZyBkZWZlbnNpdmUgYWdhaW5zdFxuICAgICAgICAgICAgLy8gbmVnYXRpdmUgY291bnRzLlxuICAgICAgICAgICAgdGhpcy5fY291bnRzW2J1Y2tldEluZGV4XSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBCdWNrZXRzQmFja2luZ1xuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1Y2tldHNCYWNraW5nKFsuLi50aGlzLl9jb3VudHNdKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdWNrZXRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaWduaWZpY2FuZCA9IGV4cG9ydHMuZ2V0Tm9ybWFsQmFzZTIgPSBleHBvcnRzLk1JTl9WQUxVRSA9IGV4cG9ydHMuTUFYX05PUk1BTF9FWFBPTkVOVCA9IGV4cG9ydHMuTUlOX05PUk1BTF9FWFBPTkVOVCA9IGV4cG9ydHMuU0lHTklGSUNBTkRfV0lEVEggPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyBpbiB0aGlzIGZpbGUgYWxsb3cgdXMgdG8gaW50ZXJhY3RcbiAqIHdpdGggdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIElFRUUgNjQtYml0IGZsb2F0aW5nIHBvaW50XG4gKiBudW1iZXIuIFdlIG5lZWQgdG8gd29yayB3aXRoIGFsbCA2NC1iaXRzLCB0aHVzLCBjYXJlIG5lZWRzIHRvIGJlXG4gKiB0YWtlbiB3aGVuIHdvcmtpbmcgd2l0aCBKYXZhc2NyaXB0J3MgYml0d2lzZSBvcGVyYXRvcnMgKDw8LCA+PiwgJixcbiAqIHwsIGV0YykgYXMgdGhleSB0cnVuY2F0ZSBvcGVyYW5kcyB0byAzMi1iaXRzLiBJbiBvcmRlciB0byB3b3JrIGFyb3VuZFxuICogdGhpcyB3ZSB3b3JrIHdpdGggdGhlIDY0LWJpdHMgYXMgdHdvIDMyLWJpdCBoYWx2ZXMsIHBlcmZvcm0gYml0d2lzZVxuICogb3BlcmF0aW9ucyBvbiB0aGVtIGluZGVwZW5kZW50bHksIGFuZCBjb21iaW5lIHRoZSByZXN1bHRzIChpZiBuZWVkZWQpLlxuICovXG5leHBvcnRzLlNJR05JRklDQU5EX1dJRFRIID0gNTI7XG4vKipcbiAqIEVYUE9ORU5UX01BU0sgaXMgc2V0IHRvIDEgZm9yIHRoZSBoaSAzMi1iaXRzIG9mIGFuIElFRUUgNzU0XG4gKiBmbG9hdGluZyBwb2ludCBleHBvbmVudDogMHg3ZmYwMDAwMC5cbiAqL1xuY29uc3QgRVhQT05FTlRfTUFTSyA9IDB4N2ZmMDAwMDA7XG4vKipcbiAqIFNJR05JRklDQU5EX01BU0sgaXMgdGhlIG1hc2sgZm9yIHRoZSBzaWduaWZpY2FuZCBwb3J0aW9uIG9mIHRoZSBoaSAzMi1iaXRzXG4gKiBvZiBhbiBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlOiAweGZmZmZmXG4gKi9cbmNvbnN0IFNJR05JRklDQU5EX01BU0sgPSAweGZmZmZmO1xuLyoqXG4gKiBFWFBPTkVOVF9CSUFTIGlzIHRoZSBleHBvbmVudCBiaWFzIHNwZWNpZmllZCBmb3IgZW5jb2RpbmdcbiAqIHRoZSBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IGV4cG9uZW50OiAxMDIzXG4gKi9cbmNvbnN0IEVYUE9ORU5UX0JJQVMgPSAxMDIzO1xuLyoqXG4gKiBNSU5fTk9STUFMX0VYUE9ORU5UIGlzIHRoZSBtaW5pbXVtIGV4cG9uZW50IG9mIGEgbm9ybWFsaXplZFxuICogZmxvYXRpbmcgcG9pbnQ6IC0xMDIyLlxuICovXG5leHBvcnRzLk1JTl9OT1JNQUxfRVhQT05FTlQgPSAtRVhQT05FTlRfQklBUyArIDE7XG4vKipcbiAqIE1BWF9OT1JNQUxfRVhQT05FTlQgaXMgdGhlIG1heGltdW0gZXhwb25lbnQgb2YgYSBub3JtYWxpemVkXG4gKiBmbG9hdGluZyBwb2ludDogMTAyMy5cbiAqL1xuZXhwb3J0cy5NQVhfTk9STUFMX0VYUE9ORU5UID0gRVhQT05FTlRfQklBUztcbi8qKlxuICogTUlOX1ZBTFVFIGlzIHRoZSBzbWFsbGVzdCBub3JtYWwgbnVtYmVyXG4gKi9cbmV4cG9ydHMuTUlOX1ZBTFVFID0gTWF0aC5wb3coMiwgLTEwMjIpO1xuLyoqXG4gKiBnZXROb3JtYWxCYXNlMiBleHRyYWN0cyB0aGUgbm9ybWFsaXplZCBiYXNlLTIgZnJhY3Rpb25hbCBleHBvbmVudC5cbiAqIFRoaXMgcmV0dXJucyBrIGZvciB0aGUgZXF1YXRpb24gZiB4IDIqKmsgd2hlcmUgZiBpc1xuICogaW4gdGhlIHJhbmdlIFsxLCAyKS4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZm9yXG4gKiBzdWJub3JtYWwgbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgbm9ybWFsaXplZCBiYXNlLTIgZnJhY3Rpb25hbFxuICogICAgZXhwb25lbnQgZm9yXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgbm9ybWFsaXplZCBiYXNlLTIgZXhwb25lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9ybWFsQmFzZTIodmFsdWUpIHtcbiAgICBjb25zdCBkdiA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpO1xuICAgIGR2LnNldEZsb2F0NjQoMCwgdmFsdWUpO1xuICAgIC8vIGFjY2VzcyB0aGUgcmF3IDY0LWJpdCBmbG9hdCBhcyAzMi1iaXQgdWludHNcbiAgICBjb25zdCBoaUJpdHMgPSBkdi5nZXRVaW50MzIoMCk7XG4gICAgY29uc3QgZXhwQml0cyA9IChoaUJpdHMgJiBFWFBPTkVOVF9NQVNLKSA+PiAyMDtcbiAgICByZXR1cm4gZXhwQml0cyAtIEVYUE9ORU5UX0JJQVM7XG59XG5leHBvcnRzLmdldE5vcm1hbEJhc2UyID0gZ2V0Tm9ybWFsQmFzZTI7XG4vKipcbiAqIEdldFNpZ25pZmljYW5kIHJldHVybnMgdGhlIDUyIGJpdCAodW5zaWduZWQpIHNpZ25pZmljYW5kIGFzIGEgc2lnbmVkIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBleHRyYWN0IHRoZSBzaWduaWZpY2FuZCBmcm9tXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgNTItYml0IHNpZ25pZmljYW5kXG4gKi9cbmZ1bmN0aW9uIGdldFNpZ25pZmljYW5kKHZhbHVlKSB7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcbiAgICBkdi5zZXRGbG9hdDY0KDAsIHZhbHVlKTtcbiAgICAvLyBhY2Nlc3MgdGhlIHJhdyA2NC1iaXQgZmxvYXQgYXMgdHdvIDMyLWJpdCB1aW50c1xuICAgIGNvbnN0IGhpQml0cyA9IGR2LmdldFVpbnQzMigwKTtcbiAgICBjb25zdCBsb0JpdHMgPSBkdi5nZXRVaW50MzIoNCk7XG4gICAgLy8gZXh0cmFjdCB0aGUgc2lnbmlmaWNhbmQgYml0cyBmcm9tIHRoZSBoaSBiaXRzIGFuZCBsZWZ0IHNoaWZ0IDMyIHBsYWNlcyBub3RlOlxuICAgIC8vIHdlIGNhbid0IHVzZSB0aGUgbmF0aXZlIDw8IG9wZXJhdG9yIGFzIGl0IHdpbGwgdHJ1bmNhdGUgdGhlIHJlc3VsdCB0byAzMi1iaXRzXG4gICAgY29uc3Qgc2lnbmlmaWNhbmRIaUJpdHMgPSAoaGlCaXRzICYgU0lHTklGSUNBTkRfTUFTSykgKiBNYXRoLnBvdygyLCAzMik7XG4gICAgLy8gY29tYmluZSB0aGUgaGkgYW5kIGxvIGJpdHMgYW5kIHJldHVyblxuICAgIHJldHVybiBzaWduaWZpY2FuZEhpQml0cyArIGxvQml0cztcbn1cbmV4cG9ydHMuZ2V0U2lnbmlmaWNhbmQgPSBnZXRTaWduaWZpY2FuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWllZWU3NTQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5leHRHcmVhdGVyU3F1YXJlID0gZXhwb3J0cy5sZGV4cCA9IHZvaWQgMDtcbi8qKlxuICogTm90ZTogb3RoZXIgbGFuZ3VhZ2VzIHByb3ZpZGUgdGhpcyBhcyBhIGJ1aWx0IGluIGZ1bmN0aW9uLiBUaGlzIGlzXG4gKiBhIG5haXZlLCBidXQgZnVuY3Rpb25hbGx5IGNvcnJlY3QgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdXNlZCBzcGFyaW5nbHksXG4gKiB3aGVuIGNyZWF0aW5nIGEgbmV3IG1hcHBpbmcgaW4gYSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuICpcbiAqIGxkZXhwIHJldHVybnMgZnJhYyDDlyAyKipleHAuIFdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNhc2VzOlxuICogICBsZGV4cCjCsTAsIGV4cCkgPSDCsTBcbiAqICAgbGRleHAowrFJbmYsIGV4cCkgPSDCsUluZlxuICogICBsZGV4cChOYU4sIGV4cCkgPSBOYU5cbiAqIEBwYXJhbSBmcmFjXG4gKiBAcGFyYW0gZXhwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBsZGV4cChmcmFjLCBleHApIHtcbiAgICBpZiAoZnJhYyA9PT0gMCB8fFxuICAgICAgICBmcmFjID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICAgICAgZnJhYyA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIHx8XG4gICAgICAgIE51bWJlci5pc05hTihmcmFjKSkge1xuICAgICAgICByZXR1cm4gZnJhYztcbiAgICB9XG4gICAgcmV0dXJuIGZyYWMgKiBNYXRoLnBvdygyLCBleHApO1xufVxuZXhwb3J0cy5sZGV4cCA9IGxkZXhwO1xuLyoqXG4gKiBDb21wdXRlcyB0aGUgbmV4dCBwb3dlciBvZiB0d28gdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdi5cbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gbW9yZSBlZmZpY2llbnQgdGhhbiwgYnV0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50XG4gKiB0byBNYXRoLnBvdygyLCBNYXRoLmNlaWwoTWF0aC5sb2coeCkvTWF0aC5sb2coMikpKS5cbiAqIEBwYXJhbSB2XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBuZXh0R3JlYXRlclNxdWFyZSh2KSB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGNvbXB1dGVzIHRoZSBsZWFzdCBwb3dlci1vZi10d29cbiAgICAvLyB0aGF0IGlzID49IHYuICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgdHJpY2t5IHdheXMgdG9cbiAgICAvLyBkbyB0aGlzLCBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDY2MjA0L3JvdW5kaW5nLXVwLXRvLW5leHQtcG93ZXItb2YtMlxuICAgIHYtLTtcbiAgICB2IHw9IHYgPj4gMTtcbiAgICB2IHw9IHYgPj4gMjtcbiAgICB2IHw9IHYgPj4gNDtcbiAgICB2IHw9IHYgPj4gODtcbiAgICB2IHw9IHYgPj4gMTY7XG4gICAgdisrO1xuICAgIHJldHVybiB2O1xufVxuZXhwb3J0cy5uZXh0R3JlYXRlclNxdWFyZSA9IG5leHRHcmVhdGVyU3F1YXJlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NYXBwaW5nRXJyb3IgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY2xhc3MgTWFwcGluZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZXhwb3J0cy5NYXBwaW5nRXJyb3IgPSBNYXBwaW5nRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FeHBvbmVudE1hcHBpbmcgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgaWVlZTc1NCA9IHJlcXVpcmUoXCIuL2llZWU3NTRcIik7XG5jb25zdCB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG4vKipcbiAqIEV4cG9uZW50TWFwcGluZyBpbXBsZW1lbnRzIGV4cG9uZW50aWFsIG1hcHBpbmcgZnVuY3Rpb25zIGZvclxuICogc2NhbGVzIDw9MC4gRm9yIHNjYWxlcyA+IDAgTG9nYXJpdGhtTWFwcGluZyBzaG91bGQgYmUgdXNlZC5cbiAqL1xuY2xhc3MgRXhwb25lbnRNYXBwaW5nIHtcbiAgICBfc2hpZnQ7XG4gICAgY29uc3RydWN0b3Ioc2NhbGUpIHtcbiAgICAgICAgdGhpcy5fc2hpZnQgPSAtc2NhbGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hcHMgcG9zaXRpdmUgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHRvIGluZGV4ZXMgY29ycmVzcG9uZGluZyB0byBzY2FsZVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGluZGV4IGZvciBwcm92aWRlZCB2YWx1ZSBhdCB0aGUgY3VycmVudCBzY2FsZVxuICAgICAqL1xuICAgIG1hcFRvSW5kZXgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgaWVlZTc1NC5NSU5fVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHAgPSBpZWVlNzU0LmdldE5vcm1hbEJhc2UyKHZhbHVlKTtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgdmFsdWUgaXMgYW4gZXhhY3QgcG93ZXIgb2YgdHdvLCBjb21wdXRlIGFcbiAgICAgICAgLy8gY29ycmVjdGlvbiBvZiAtMS4gTm90ZSwgd2UgYXJlIHVzaW5nIGEgY3VzdG9tIF9yaWdodFNoaWZ0XG4gICAgICAgIC8vIHRvIGFjY29tbW9kYXRlIGEgNTItYml0IGFyZ3VtZW50LCB3aGljaCB0aGUgbmF0aXZlIGJpdHdpc2VcbiAgICAgICAgLy8gb3BlcmF0b3JzIGRvIG5vdCBzdXBwb3J0XG4gICAgICAgIGNvbnN0IGNvcnJlY3Rpb24gPSB0aGlzLl9yaWdodFNoaWZ0KGllZWU3NTQuZ2V0U2lnbmlmaWNhbmQodmFsdWUpIC0gMSwgaWVlZTc1NC5TSUdOSUZJQ0FORF9XSURUSCk7XG4gICAgICAgIHJldHVybiAoZXhwICsgY29ycmVjdGlvbikgPj4gdGhpcy5fc2hpZnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJ1Y2tldCBib3VuZGFyeSBmb3IgdGhlIGdpdmVuIGluZGV4IGZvciBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBsb3dlckJvdW5kYXJ5KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1pbkluZGV4ID0gdGhpcy5fbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA8IG1pbkluZGV4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5NYXBwaW5nRXJyb3IoYHVuZGVyZmxvdzogJHtpbmRleH0gaXMgPCBtaW5pbXVtIGxvd2VyIGJvdW5kYXJ5OiAke21pbkluZGV4fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5fbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA+IG1heEluZGV4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5NYXBwaW5nRXJyb3IoYG92ZXJmbG93OiAke2luZGV4fSBpcyA+IG1heGltdW0gbG93ZXIgYm91bmRhcnk6ICR7bWF4SW5kZXh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWwubGRleHAoMSwgaW5kZXggPDwgdGhpcy5fc2hpZnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIG1hcHBpbmdcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NoaWZ0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLXRoaXMuX3NoaWZ0O1xuICAgIH1cbiAgICBfbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICBsZXQgaW5kZXggPSBpZWVlNzU0Lk1JTl9OT1JNQUxfRVhQT05FTlQgPj4gdGhpcy5fc2hpZnQ7XG4gICAgICAgIGlmICh0aGlzLl9zaGlmdCA8IDIpIHtcbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICBfbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICByZXR1cm4gaWVlZTc1NC5NQVhfTk9STUFMX0VYUE9ORU5UID4+IHRoaXMuX3NoaWZ0O1xuICAgIH1cbiAgICBfcmlnaHRTaGlmdCh2YWx1ZSwgc2hpZnQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUgKiBNYXRoLnBvdygyLCAtc2hpZnQpKTtcbiAgICB9XG59XG5leHBvcnRzLkV4cG9uZW50TWFwcGluZyA9IEV4cG9uZW50TWFwcGluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9uZW50TWFwcGluZy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Mb2dhcml0aG1NYXBwaW5nID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKFwiLi9pZWVlNzU0XCIpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuLyoqXG4gKiBMb2dhcml0aG1NYXBwaW5nIGltcGxlbWVudHMgZXhwb25lbnRpYWwgbWFwcGluZyBmdW5jdGlvbnMgZm9yIHNjYWxlID4gMC5cbiAqIEZvciBzY2FsZXMgPD0gMCB0aGUgZXhwb25lbnQgbWFwcGluZyBzaG91bGQgYmUgdXNlZC5cbiAqL1xuY2xhc3MgTG9nYXJpdGhtTWFwcGluZyB7XG4gICAgX3NjYWxlO1xuICAgIF9zY2FsZUZhY3RvcjtcbiAgICBfaW52ZXJzZUZhY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihzY2FsZSkge1xuICAgICAgICB0aGlzLl9zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLl9zY2FsZUZhY3RvciA9IHV0aWwubGRleHAoTWF0aC5MT0cyRSwgc2NhbGUpO1xuICAgICAgICB0aGlzLl9pbnZlcnNlRmFjdG9yID0gdXRpbC5sZGV4cChNYXRoLkxOMiwgLXNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFwcyBwb3NpdGl2ZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgdG8gaW5kZXhlcyBjb3JyZXNwb25kaW5nIHRvIHNjYWxlXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggZm9yIHByb3ZpZGVkIHZhbHVlIGF0IHRoZSBjdXJyZW50IHNjYWxlXG4gICAgICovXG4gICAgbWFwVG9JbmRleCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPD0gaWVlZTc1NC5NSU5fVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5Ob3JtYWxMb3dlckJvdW5kYXJ5SW5kZXgoKSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhhY3QgcG93ZXIgb2YgdHdvIHNwZWNpYWwgY2FzZVxuICAgICAgICBpZiAoaWVlZTc1NC5nZXRTaWduaWZpY2FuZCh2YWx1ZSkgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cCA9IGllZWU3NTQuZ2V0Tm9ybWFsQmFzZTIodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIChleHAgPDwgdGhpcy5fc2NhbGUpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub24tcG93ZXIgb2YgdHdvIGNhc2VzLiB1c2UgTWF0aC5mbG9vciB0byByb3VuZCB0aGUgc2NhbGVkIGxvZ2FyaXRobVxuICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpICogdGhpcy5fc2NhbGVGYWN0b3IpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuX21heE5vcm1hbExvd2VyQm91bmRhcnlJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPj0gbWF4SW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJ1Y2tldCBib3VuZGFyeSBmb3IgdGhlIGdpdmVuIGluZGV4IGZvciBzY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBsb3dlckJvdW5kYXJ5KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5fbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA+PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAyICogTWF0aC5leHAoKGluZGV4IC0gKDEgPDwgdGhpcy5fc2NhbGUpKSAvIHRoaXMuX3NjYWxlRmFjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyB0eXBlc18xLk1hcHBpbmdFcnJvcihgb3ZlcmZsb3c6ICR7aW5kZXh9IGlzID4gbWF4aW11bSBsb3dlciBib3VuZGFyeTogJHttYXhJbmRleH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5JbmRleCA9IHRoaXMuX21pbk5vcm1hbExvd2VyQm91bmRhcnlJbmRleCgpO1xuICAgICAgICBpZiAoaW5kZXggPD0gbWluSW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbWluSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWVlZTc1NC5NSU5fVkFMVUU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PT0gbWluSW5kZXggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZXhwKChpbmRleCArICgxIDw8IHRoaXMuX3NjYWxlKSkgLyB0aGlzLl9zY2FsZUZhY3RvcikgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IHR5cGVzXzEuTWFwcGluZ0Vycm9yKGBvdmVyZmxvdzogJHtpbmRleH0gaXMgPCBtaW5pbXVtIGxvd2VyIGJvdW5kYXJ5OiAke21pbkluZGV4fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLmV4cChpbmRleCAqIHRoaXMuX2ludmVyc2VGYWN0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIG1hcHBpbmdcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlO1xuICAgIH1cbiAgICBfbWluTm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICByZXR1cm4gaWVlZTc1NC5NSU5fTk9STUFMX0VYUE9ORU5UIDw8IHRoaXMuX3NjYWxlO1xuICAgIH1cbiAgICBfbWF4Tm9ybWFsTG93ZXJCb3VuZGFyeUluZGV4KCkge1xuICAgICAgICByZXR1cm4gKChpZWVlNzU0Lk1BWF9OT1JNQUxfRVhQT05FTlQgKyAxKSA8PCB0aGlzLl9zY2FsZSkgLSAxO1xuICAgIH1cbn1cbmV4cG9ydHMuTG9nYXJpdGhtTWFwcGluZyA9IExvZ2FyaXRobU1hcHBpbmc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2dhcml0aG1NYXBwaW5nLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldE1hcHBpbmcgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgRXhwb25lbnRNYXBwaW5nXzEgPSByZXF1aXJlKFwiLi9FeHBvbmVudE1hcHBpbmdcIik7XG5jb25zdCBMb2dhcml0aG1NYXBwaW5nXzEgPSByZXF1aXJlKFwiLi9Mb2dhcml0aG1NYXBwaW5nXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgTUlOX1NDQUxFID0gLTEwO1xuY29uc3QgTUFYX1NDQUxFID0gMjA7XG5jb25zdCBQUkVCVUlMVF9NQVBQSU5HUyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDMxIH0sIChfLCBpKSA9PiB7XG4gICAgaWYgKGkgPiAxMCkge1xuICAgICAgICByZXR1cm4gbmV3IExvZ2FyaXRobU1hcHBpbmdfMS5Mb2dhcml0aG1NYXBwaW5nKGkgLSAxMCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXhwb25lbnRNYXBwaW5nXzEuRXhwb25lbnRNYXBwaW5nKGkgLSAxMCk7XG59KTtcbi8qKlxuICogZ2V0TWFwcGluZyByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBzY2FsZS4gRm9yIHNjYWxlcyAtMTBcbiAqIHRvIDAgdGhlIHVuZGVybHlpbmcgdHlwZSB3aWxsIGJlIEV4cG9uZW50TWFwcGluZy4gRm9yIHNjYWxlcyAxIHRvIDIwIHRoZVxuICogdW5kZXJseWluZyB0eXBlIHdpbGwgYmUgTG9nYXJpdGhtTWFwcGluZy5cbiAqIEBwYXJhbSBzY2FsZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWy0xMCwgMjBdXG4gKiBAcmV0dXJucyB7TWFwcGluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwcGluZyhzY2FsZSkge1xuICAgIGlmIChzY2FsZSA+IE1BWF9TQ0FMRSB8fCBzY2FsZSA8IE1JTl9TQ0FMRSkge1xuICAgICAgICB0aHJvdyBuZXcgdHlwZXNfMS5NYXBwaW5nRXJyb3IoYGV4cGVjdGVkIHNjYWxlID49ICR7TUlOX1NDQUxFfSAmJiA8PSAke01BWF9TQ0FMRX0sIGdvdDogJHtzY2FsZX1gKTtcbiAgICB9XG4gICAgLy8gbWFwcGluZ3MgYXJlIG9mZnNldCBieSAxMC4gc2NhbGUgLTEwIGlzIGF0IHBvc2l0aW9uIDAgYW5kIHNjYWxlIDIwIGlzIGF0IDMwXG4gICAgcmV0dXJuIFBSRUJVSUxUX01BUFBJTkdTW3NjYWxlICsgMTBdO1xufVxuZXhwb3J0cy5nZXRNYXBwaW5nID0gZ2V0TWFwcGluZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE1hcHBpbmcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvciA9IGV4cG9ydHMuRXhwb25lbnRpYWxIaXN0b2dyYW1BY2N1bXVsYXRpb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L01ldHJpY0RhdGFcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBCdWNrZXRzXzEgPSByZXF1aXJlKFwiLi9leHBvbmVudGlhbC1oaXN0b2dyYW0vQnVja2V0c1wiKTtcbmNvbnN0IGdldE1hcHBpbmdfMSA9IHJlcXVpcmUoXCIuL2V4cG9uZW50aWFsLWhpc3RvZ3JhbS9tYXBwaW5nL2dldE1hcHBpbmdcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9leHBvbmVudGlhbC1oaXN0b2dyYW0vdXRpbFwiKTtcbi8vIEhpZ2hMb3cgaXMgYSB1dGlsaXR5IGNsYXNzIHVzZWQgZm9yIGNvbXB1dGluZyBhIGNvbW1vbiBzY2FsZSBmb3Jcbi8vIHR3byBleHBvbmVudGlhbCBoaXN0b2dyYW0gYWNjdW11bGF0aW9uc1xuY2xhc3MgSGlnaExvdyB7XG4gICAgbG93O1xuICAgIGhpZ2g7XG4gICAgc3RhdGljIGNvbWJpbmUoaDEsIGgyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSGlnaExvdyhNYXRoLm1pbihoMS5sb3csIGgyLmxvdyksIE1hdGgubWF4KGgxLmhpZ2gsIGgyLmhpZ2gpKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IobG93LCBoaWdoKSB7XG4gICAgICAgIHRoaXMubG93ID0gbG93O1xuICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuICAgIH1cbn1cbmNvbnN0IE1BWF9TQ0FMRSA9IDIwO1xuY29uc3QgREVGQVVMVF9NQVhfU0laRSA9IDE2MDtcbmNvbnN0IE1JTl9NQVhfU0laRSA9IDI7XG5jbGFzcyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9tYXhTaXplO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAgX3N1bTtcbiAgICBfY291bnQ7XG4gICAgX3plcm9Db3VudDtcbiAgICBfbWluO1xuICAgIF9tYXg7XG4gICAgX3Bvc2l0aXZlO1xuICAgIF9uZWdhdGl2ZTtcbiAgICBfbWFwcGluZztcbiAgICBjb25zdHJ1Y3RvcihzdGFydFRpbWUgPSBzdGFydFRpbWUsIF9tYXhTaXplID0gREVGQVVMVF9NQVhfU0laRSwgX3JlY29yZE1pbk1heCA9IHRydWUsIF9zdW0gPSAwLCBfY291bnQgPSAwLCBfemVyb0NvdW50ID0gMCwgX21pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgX21heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSwgX3Bvc2l0aXZlID0gbmV3IEJ1Y2tldHNfMS5CdWNrZXRzKCksIF9uZWdhdGl2ZSA9IG5ldyBCdWNrZXRzXzEuQnVja2V0cygpLCBfbWFwcGluZyA9ICgwLCBnZXRNYXBwaW5nXzEuZ2V0TWFwcGluZykoTUFYX1NDQUxFKSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5fbWF4U2l6ZSA9IF9tYXhTaXplO1xuICAgICAgICB0aGlzLl9yZWNvcmRNaW5NYXggPSBfcmVjb3JkTWluTWF4O1xuICAgICAgICB0aGlzLl9zdW0gPSBfc3VtO1xuICAgICAgICB0aGlzLl9jb3VudCA9IF9jb3VudDtcbiAgICAgICAgdGhpcy5femVyb0NvdW50ID0gX3plcm9Db3VudDtcbiAgICAgICAgdGhpcy5fbWluID0gX21pbjtcbiAgICAgICAgdGhpcy5fbWF4ID0gX21heDtcbiAgICAgICAgdGhpcy5fcG9zaXRpdmUgPSBfcG9zaXRpdmU7XG4gICAgICAgIHRoaXMuX25lZ2F0aXZlID0gX25lZ2F0aXZlO1xuICAgICAgICB0aGlzLl9tYXBwaW5nID0gX21hcHBpbmc7XG4gICAgICAgIGlmICh0aGlzLl9tYXhTaXplIDwgTUlOX01BWF9TSVpFKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEV4cG9uZW50aWFsIEhpc3RvZ3JhbSBNYXggU2l6ZSBzZXQgdG8gJHt0aGlzLl9tYXhTaXplfSwgXFxcbiAgICAgICAgICAgICAgICBjaGFuZ2luZyB0byB0aGUgbWluaW11bSBzaXplIG9mOiAke01JTl9NQVhfU0laRX1gKTtcbiAgICAgICAgICAgIHRoaXMuX21heFNpemUgPSBNSU5fTUFYX1NJWkU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogcmVjb3JkIHVwZGF0ZXMgYSBoaXN0b2dyYW0gd2l0aCBhIHNpbmdsZSBjb3VudFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgICAqL1xuICAgIHJlY29yZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5SW5jcmVtZW50KHZhbHVlLCAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3RhcnQgdGltZSBmb3IgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKiBAcGFyYW0ge0hyVGltZX0gc3RhcnRUaW1lXG4gICAgICovXG4gICAgc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGF0YXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICogQHBhcmFtIHtIclRpbWV9IHN0YXJ0VGltZVxuICAgICAqL1xuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc01pbk1heDogdGhpcy5fcmVjb3JkTWluTWF4LFxuICAgICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBzdW06IHRoaXMuc3VtLFxuICAgICAgICAgICAgcG9zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMucG9zaXRpdmUub2Zmc2V0LFxuICAgICAgICAgICAgICAgIGJ1Y2tldENvdW50czogdGhpcy5wb3NpdGl2ZS5jb3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZWdhdGl2ZToge1xuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5uZWdhdGl2ZS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgYnVja2V0Q291bnRzOiB0aGlzLm5lZ2F0aXZlLmNvdW50cygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmNvdW50LFxuICAgICAgICAgICAgc2NhbGU6IHRoaXMuc2NhbGUsXG4gICAgICAgICAgICB6ZXJvQ291bnQ6IHRoaXMuemVyb0NvdW50LFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc3VtIG9mIHZhbHVlcyByZWNvcmRlZCBieSB0aGlzIGFjY3VtdWxhdGlvblxuICAgICAqL1xuICAgIGdldCBzdW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdW07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBtaW5pbXVtIHZhbHVlIHJlY29yZGVkIGJ5IHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICovXG4gICAgZ2V0IG1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMge051bWJlcn0gVGhlIG1heGltdW0gdmFsdWUgcmVjb3JkZWQgYnkgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgY291bnQgb2YgdmFsdWVzIHJlY29yZGVkIGJ5IHRoaXMgYWNjdW11bGF0aW9uXG4gICAgICovXG4gICAgZ2V0IGNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgMCB2YWx1ZXMgcmVjb3JkZWQgYnkgdGhpcyBhY2N1bXVsYXRpb25cbiAgICAgKi9cbiAgICBnZXQgemVyb0NvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5femVyb0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgc2NhbGUgdXNlZCBieSB0aGlzIGFjY3VtdWxhdGlvblxuICAgICAqL1xuICAgIGdldCBzY2FsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50ID09PSB0aGlzLl96ZXJvQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGFsbCB6ZXJvcyEgc2NhbGUgZG9lc24ndCBtYXR0ZXIsIHVzZSB6ZXJvXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZy5zY2FsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogcG9zaXRpdmUgaG9sZHMgdGhlIHBvc2l0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIHtCdWNrZXRzfVxuICAgICAqL1xuICAgIGdldCBwb3NpdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBuZWdhdGl2ZSBob2xkcyB0aGUgbmVnYXRpdmUgdmFsdWVzIGJ5IHRoZWlyIGFic29sdXRlIHZhbHVlXG4gICAgICogQHJldHVybnMge0J1Y2tldHN9XG4gICAgICovXG4gICAgZ2V0IG5lZ2F0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHVwZGF0ZUJ5SW5jciBzdXBwb3J0cyB1cGRhdGluZyBhIGhpc3RvZ3JhbSB3aXRoIGEgbm9uLW5lZ2F0aXZlXG4gICAgICogaW5jcmVtZW50LlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqIEBwYXJhbSBpbmNyZW1lbnRcbiAgICAgKi9cbiAgICB1cGRhdGVCeUluY3JlbWVudCh2YWx1ZSwgaW5jcmVtZW50KSB7XG4gICAgICAgIC8vIE5hTiBkb2VzIG5vdCBmYWxsIGludG8gYW55IGJ1Y2tldCwgaXMgbm90IHplcm8gYW5kIHNob3VsZCBub3QgYmUgY291bnRlZCxcbiAgICAgICAgLy8gTmFOIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiBtYXggbm9yIGxlc3MgdGhhbiBtaW4sIHRoZXJlZm9yZSByZXR1cm4gYXMgdGhlcmUncyBub3RoaW5nIGZvciB1cyB0byBkby5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA8IHRoaXMuX21pbikge1xuICAgICAgICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY291bnQgKz0gaW5jcmVtZW50O1xuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3plcm9Db3VudCArPSBpbmNyZW1lbnQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VtICs9IHZhbHVlICogaW5jcmVtZW50O1xuICAgICAgICBpZiAodmFsdWUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWNrZXRzKHRoaXMuX3Bvc2l0aXZlLCB2YWx1ZSwgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJ1Y2tldHModGhpcy5fbmVnYXRpdmUsIC12YWx1ZSwgaW5jcmVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBtZXJnZSBjb21iaW5lcyBkYXRhIGZyb20gcHJldmlvdXMgdmFsdWUgaW50byBzZWxmXG4gICAgICogQHBhcmFtIHtFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbn0gcHJldmlvdXNcbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cykge1xuICAgICAgICBpZiAodGhpcy5fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21pbiA9IHByZXZpb3VzLm1pbjtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHByZXZpb3VzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmV2aW91cy5jb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzLm1pbiA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluID0gcHJldmlvdXMubWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzLm1heCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4ID0gcHJldmlvdXMubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gcHJldmlvdXMuc3RhcnRUaW1lO1xuICAgICAgICB0aGlzLl9zdW0gKz0gcHJldmlvdXMuc3VtO1xuICAgICAgICB0aGlzLl9jb3VudCArPSBwcmV2aW91cy5jb3VudDtcbiAgICAgICAgdGhpcy5femVyb0NvdW50ICs9IHByZXZpb3VzLnplcm9Db3VudDtcbiAgICAgICAgY29uc3QgbWluU2NhbGUgPSB0aGlzLl9taW5TY2FsZShwcmV2aW91cyk7XG4gICAgICAgIHRoaXMuX2Rvd25zY2FsZSh0aGlzLnNjYWxlIC0gbWluU2NhbGUpO1xuICAgICAgICB0aGlzLl9tZXJnZUJ1Y2tldHModGhpcy5wb3NpdGl2ZSwgcHJldmlvdXMsIHByZXZpb3VzLnBvc2l0aXZlLCBtaW5TY2FsZSk7XG4gICAgICAgIHRoaXMuX21lcmdlQnVja2V0cyh0aGlzLm5lZ2F0aXZlLCBwcmV2aW91cywgcHJldmlvdXMubmVnYXRpdmUsIG1pblNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZGlmZiBzdWJ0cmFjdHMgb3RoZXIgZnJvbSBzZWxmXG4gICAgICogQHBhcmFtIHtFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbn0gb3RoZXJcbiAgICAgKi9cbiAgICBkaWZmKG90aGVyKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IEluZmluaXR5O1xuICAgICAgICB0aGlzLl9tYXggPSAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMuX3N1bSAtPSBvdGhlci5zdW07XG4gICAgICAgIHRoaXMuX2NvdW50IC09IG90aGVyLmNvdW50O1xuICAgICAgICB0aGlzLl96ZXJvQ291bnQgLT0gb3RoZXIuemVyb0NvdW50O1xuICAgICAgICBjb25zdCBtaW5TY2FsZSA9IHRoaXMuX21pblNjYWxlKG90aGVyKTtcbiAgICAgICAgdGhpcy5fZG93bnNjYWxlKHRoaXMuc2NhbGUgLSBtaW5TY2FsZSk7XG4gICAgICAgIHRoaXMuX2RpZmZCdWNrZXRzKHRoaXMucG9zaXRpdmUsIG90aGVyLCBvdGhlci5wb3NpdGl2ZSwgbWluU2NhbGUpO1xuICAgICAgICB0aGlzLl9kaWZmQnVja2V0cyh0aGlzLm5lZ2F0aXZlLCBvdGhlciwgb3RoZXIubmVnYXRpdmUsIG1pblNjYWxlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY2xvbmUgcmV0dXJucyBhIGRlZXAgY29weSBvZiBzZWxmXG4gICAgICogQHJldHVybnMge0V4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9ufVxuICAgICAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uKHRoaXMuc3RhcnRUaW1lLCB0aGlzLl9tYXhTaXplLCB0aGlzLl9yZWNvcmRNaW5NYXgsIHRoaXMuX3N1bSwgdGhpcy5fY291bnQsIHRoaXMuX3plcm9Db3VudCwgdGhpcy5fbWluLCB0aGlzLl9tYXgsIHRoaXMucG9zaXRpdmUuY2xvbmUoKSwgdGhpcy5uZWdhdGl2ZS5jbG9uZSgpLCB0aGlzLl9tYXBwaW5nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogX3VwZGF0ZUJ1Y2tldHMgbWFwcyB0aGUgaW5jb21pbmcgdmFsdWUgdG8gYSBidWNrZXQgaW5kZXggZm9yIHRoZSBjdXJyZW50XG4gICAgICogc2NhbGUuIElmIHRoZSBidWNrZXQgaW5kZXggaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGJhY2tpbmcgYXJyYXksXG4gICAgICogaXQgd2lsbCByZXNjYWxlIHRoZSBiYWNraW5nIGFycmF5IGFuZCB1cGRhdGUgdGhlIG1hcHBpbmcgZm9yIHRoZSBuZXcgc2NhbGUuXG4gICAgICovXG4gICAgX3VwZGF0ZUJ1Y2tldHMoYnVja2V0cywgdmFsdWUsIGluY3JlbWVudCkge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9tYXBwaW5nLm1hcFRvSW5kZXgodmFsdWUpO1xuICAgICAgICAvLyByZXNjYWxlIHRoZSBtYXBwaW5nIGlmIG5lZWRlZFxuICAgICAgICBsZXQgcmVzY2FsaW5nTmVlZGVkID0gZmFsc2U7XG4gICAgICAgIGxldCBoaWdoID0gMDtcbiAgICAgICAgbGV0IGxvdyA9IDA7XG4gICAgICAgIGlmIChidWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBidWNrZXRzLmluZGV4RW5kID0gYnVja2V0cy5pbmRleFN0YXJ0O1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleEJhc2UgPSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPCBidWNrZXRzLmluZGV4U3RhcnQgJiZcbiAgICAgICAgICAgIGJ1Y2tldHMuaW5kZXhFbmQgLSBpbmRleCA+PSB0aGlzLl9tYXhTaXplKSB7XG4gICAgICAgICAgICByZXNjYWxpbmdOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgbG93ID0gaW5kZXg7XG4gICAgICAgICAgICBoaWdoID0gYnVja2V0cy5pbmRleEVuZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbmRleCA+IGJ1Y2tldHMuaW5kZXhFbmQgJiZcbiAgICAgICAgICAgIGluZGV4IC0gYnVja2V0cy5pbmRleFN0YXJ0ID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgICAgICAgIHJlc2NhbGluZ05lZWRlZCA9IHRydWU7XG4gICAgICAgICAgICBsb3cgPSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgICAgICBoaWdoID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzY2FsZSBhbmQgY29tcHV0ZSBpbmRleCBhdCBuZXcgc2NhbGVcbiAgICAgICAgaWYgKHJlc2NhbGluZ05lZWRlZCkge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlID0gdGhpcy5fY2hhbmdlU2NhbGUoaGlnaCwgbG93KTtcbiAgICAgICAgICAgIHRoaXMuX2Rvd25zY2FsZShjaGFuZ2UpO1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9tYXBwaW5nLm1hcFRvSW5kZXgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luY3JlbWVudEluZGV4QnkoYnVja2V0cywgaW5kZXgsIGluY3JlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9pbmNyZW1lbnRJbmRleEJ5IGluY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSBidWNrZXQgc3BlY2lmaWVkIGJ5IGBpbmRleGAuXG4gICAgICogSWYgdGhlIGluZGV4IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlIFtidWNrZXRzLmluZGV4U3RhcnQsIGJ1Y2tldHMuaW5kZXhFbmRdXG4gICAgICogdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGJhY2tpbmcgYXJyYXkgd2lsbCBiZSBhZGp1c3RlZCBhbmQgbW9yZSBidWNrZXRzIHdpbGxcbiAgICAgKiBiZSBhZGRlZCBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgX2luY3JlbWVudEluZGV4QnkoYnVja2V0cywgaW5kZXgsIGluY3JlbWVudCkge1xuICAgICAgICBpZiAoaW5jcmVtZW50ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvIGZvciBhIHplcm8gaW5jcmVtZW50LCBjYW4gaGFwcGVuIGR1cmluZyBhIG1lcmdlIG9wZXJhdGlvblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gYnVja2V0cy5pbmRleEVuZCA9IGJ1Y2tldHMuaW5kZXhCYXNlID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4IDwgYnVja2V0cy5pbmRleFN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gYnVja2V0cy5pbmRleEVuZCAtIGluZGV4O1xuICAgICAgICAgICAgaWYgKHNwYW4gPj0gYnVja2V0cy5iYWNraW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3coYnVja2V0cywgc3BhbiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVja2V0cy5pbmRleFN0YXJ0ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPiBidWNrZXRzLmluZGV4RW5kKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gaW5kZXggLSBidWNrZXRzLmluZGV4U3RhcnQ7XG4gICAgICAgICAgICBpZiAoc3BhbiA+PSBidWNrZXRzLmJhY2tpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JvdyhidWNrZXRzLCBzcGFuICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWNrZXRzLmluZGV4RW5kID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJ1Y2tldEluZGV4ID0gaW5kZXggLSBidWNrZXRzLmluZGV4QmFzZTtcbiAgICAgICAgaWYgKGJ1Y2tldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgYnVja2V0SW5kZXggKz0gYnVja2V0cy5iYWNraW5nLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBidWNrZXRzLmluY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgaW5jcmVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZ3JvdyByZXNpemVzIHRoZSBiYWNraW5nIGFycmF5IGJ5IGRvdWJsaW5nIGluIHNpemUgdXAgdG8gbWF4U2l6ZS5cbiAgICAgKiBUaGlzIGV4dGVuZHMgdGhlIGFycmF5IHdpdGggYSBidW5jaCBvZiB6ZXJvcyBhbmQgY29waWVzIHRoZVxuICAgICAqIGV4aXN0aW5nIGNvdW50cyB0byB0aGUgc2FtZSBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBfZ3JvdyhidWNrZXRzLCBuZWVkZWQpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ1Y2tldHMuYmFja2luZy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJpYXMgPSBidWNrZXRzLmluZGV4QmFzZSAtIGJ1Y2tldHMuaW5kZXhTdGFydDtcbiAgICAgICAgY29uc3Qgb2xkUG9zaXRpdmVMaW1pdCA9IHNpemUgLSBiaWFzO1xuICAgICAgICBsZXQgbmV3U2l6ZSA9ICgwLCB1dGlsXzEubmV4dEdyZWF0ZXJTcXVhcmUpKG5lZWRlZCk7XG4gICAgICAgIGlmIChuZXdTaXplID4gdGhpcy5fbWF4U2l6ZSkge1xuICAgICAgICAgICAgbmV3U2l6ZSA9IHRoaXMuX21heFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UG9zaXRpdmVMaW1pdCA9IG5ld1NpemUgLSBiaWFzO1xuICAgICAgICBidWNrZXRzLmJhY2tpbmcuZ3Jvd1RvKG5ld1NpemUsIG9sZFBvc2l0aXZlTGltaXQsIG5ld1Bvc2l0aXZlTGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfY2hhbmdlU2NhbGUgY29tcHV0ZXMgaG93IG11Y2ggZG93bnNjYWxpbmcgaXMgbmVlZGVkIGJ5IHNoaWZ0aW5nIHRoZVxuICAgICAqIGhpZ2ggYW5kIGxvdyB2YWx1ZXMgdW50aWwgdGhleSBhcmUgc2VwYXJhdGVkIGJ5IG5vIG1vcmUgdGhhbiBzaXplLlxuICAgICAqL1xuICAgIF9jaGFuZ2VTY2FsZShoaWdoLCBsb3cpIHtcbiAgICAgICAgbGV0IGNoYW5nZSA9IDA7XG4gICAgICAgIHdoaWxlIChoaWdoIC0gbG93ID49IHRoaXMuX21heFNpemUpIHtcbiAgICAgICAgICAgIGhpZ2ggPj49IDE7XG4gICAgICAgICAgICBsb3cgPj49IDE7XG4gICAgICAgICAgICBjaGFuZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfZG93bnNjYWxlIHN1YnRyYWN0cyBgY2hhbmdlYCBmcm9tIHRoZSBjdXJyZW50IG1hcHBpbmcgc2NhbGUuXG4gICAgICovXG4gICAgX2Rvd25zY2FsZShjaGFuZ2UpIHtcbiAgICAgICAgaWYgKGNoYW5nZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UgPCAwKSB7XG4gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlLiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW1wb3NzaWJsZSBjaGFuZ2Ugb2Ygc2NhbGU6ICR7dGhpcy5zY2FsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdTY2FsZSA9IHRoaXMuX21hcHBpbmcuc2NhbGUgLSBjaGFuZ2U7XG4gICAgICAgIHRoaXMuX3Bvc2l0aXZlLmRvd25zY2FsZShjaGFuZ2UpO1xuICAgICAgICB0aGlzLl9uZWdhdGl2ZS5kb3duc2NhbGUoY2hhbmdlKTtcbiAgICAgICAgdGhpcy5fbWFwcGluZyA9ICgwLCBnZXRNYXBwaW5nXzEuZ2V0TWFwcGluZykobmV3U2NhbGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfbWluU2NhbGUgaXMgdXNlZCBieSBkaWZmIGFuZCBtZXJnZSB0byBjb21wdXRlIGFuIGlkZWFsIGNvbWJpbmVkIHNjYWxlXG4gICAgICovXG4gICAgX21pblNjYWxlKG90aGVyKSB7XG4gICAgICAgIGNvbnN0IG1pblNjYWxlID0gTWF0aC5taW4odGhpcy5zY2FsZSwgb3RoZXIuc2NhbGUpO1xuICAgICAgICBjb25zdCBoaWdoTG93UG9zID0gSGlnaExvdy5jb21iaW5lKHRoaXMuX2hpZ2hMb3dBdFNjYWxlKHRoaXMucG9zaXRpdmUsIHRoaXMuc2NhbGUsIG1pblNjYWxlKSwgdGhpcy5faGlnaExvd0F0U2NhbGUob3RoZXIucG9zaXRpdmUsIG90aGVyLnNjYWxlLCBtaW5TY2FsZSkpO1xuICAgICAgICBjb25zdCBoaWdoTG93TmVnID0gSGlnaExvdy5jb21iaW5lKHRoaXMuX2hpZ2hMb3dBdFNjYWxlKHRoaXMubmVnYXRpdmUsIHRoaXMuc2NhbGUsIG1pblNjYWxlKSwgdGhpcy5faGlnaExvd0F0U2NhbGUob3RoZXIubmVnYXRpdmUsIG90aGVyLnNjYWxlLCBtaW5TY2FsZSkpO1xuICAgICAgICByZXR1cm4gTWF0aC5taW4obWluU2NhbGUgLSB0aGlzLl9jaGFuZ2VTY2FsZShoaWdoTG93UG9zLmhpZ2gsIGhpZ2hMb3dQb3MubG93KSwgbWluU2NhbGUgLSB0aGlzLl9jaGFuZ2VTY2FsZShoaWdoTG93TmVnLmhpZ2gsIGhpZ2hMb3dOZWcubG93KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIF9oaWdoTG93QXRTY2FsZSBpcyB1c2VkIGJ5IGRpZmYgYW5kIG1lcmdlIHRvIGNvbXB1dGUgYW4gaWRlYWwgY29tYmluZWQgc2NhbGUuXG4gICAgICovXG4gICAgX2hpZ2hMb3dBdFNjYWxlKGJ1Y2tldHMsIGN1cnJlbnRTY2FsZSwgbmV3U2NhbGUpIHtcbiAgICAgICAgaWYgKGJ1Y2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEhpZ2hMb3coMCwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gY3VycmVudFNjYWxlIC0gbmV3U2NhbGU7XG4gICAgICAgIHJldHVybiBuZXcgSGlnaExvdyhidWNrZXRzLmluZGV4U3RhcnQgPj4gc2hpZnQsIGJ1Y2tldHMuaW5kZXhFbmQgPj4gc2hpZnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBfbWVyZ2VCdWNrZXRzIHRyYW5zbGF0ZXMgaW5kZXggdmFsdWVzIGZyb20gYW5vdGhlciBoaXN0b2dyYW0gYW5kXG4gICAgICogYWRkcyB0aGUgdmFsdWVzIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVja2V0cyBvZiB0aGlzIGhpc3RvZ3JhbS5cbiAgICAgKi9cbiAgICBfbWVyZ2VCdWNrZXRzKG91cnMsIG90aGVyLCB0aGVpcnMsIHNjYWxlKSB7XG4gICAgICAgIGNvbnN0IHRoZWlyT2Zmc2V0ID0gdGhlaXJzLm9mZnNldDtcbiAgICAgICAgY29uc3QgdGhlaXJDaGFuZ2UgPSBvdGhlci5zY2FsZSAtIHNjYWxlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50SW5kZXhCeShvdXJzLCAodGhlaXJPZmZzZXQgKyBpKSA+PiB0aGVpckNoYW5nZSwgdGhlaXJzLmF0KGkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBfZGlmZkJ1Y2tldHMgdHJhbnNsYXRlcyBpbmRleCB2YWx1ZXMgZnJvbSBhbm90aGVyIGhpc3RvZ3JhbSBhbmRcbiAgICAgKiBzdWJ0cmFjdHMgdGhlIHZhbHVlcyBpbiB0aGUgY29ycmVzcG9uZGluZyBidWNrZXRzIG9mIHRoaXMgaGlzdG9ncmFtLlxuICAgICAqL1xuICAgIF9kaWZmQnVja2V0cyhvdXJzLCBvdGhlciwgdGhlaXJzLCBzY2FsZSkge1xuICAgICAgICBjb25zdCB0aGVpck9mZnNldCA9IHRoZWlycy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRoZWlyQ2hhbmdlID0gb3RoZXIuc2NhbGUgLSBzY2FsZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG91ckluZGV4ID0gKHRoZWlyT2Zmc2V0ICsgaSkgPj4gdGhlaXJDaGFuZ2U7XG4gICAgICAgICAgICBsZXQgYnVja2V0SW5kZXggPSBvdXJJbmRleCAtIG91cnMuaW5kZXhCYXNlO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4ICs9IG91cnMuYmFja2luZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXJzLmRlY3JlbWVudEJ1Y2tldChidWNrZXRJbmRleCwgdGhlaXJzLmF0KGkpKTtcbiAgICAgICAgfVxuICAgICAgICBvdXJzLnRyaW0oKTtcbiAgICB9XG59XG5leHBvcnRzLkV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gRXhwb25lbnRpYWxIaXN0b2dyYW1BY2N1bXVsYXRpb247XG4vKipcbiAqIEFnZ3JlZ2F0b3IgZm9yIEV4cG9uZW50aWFsSGlzdG9ncmFtQWNjdW11bGF0aW9uc1xuICovXG5jbGFzcyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0b3Ige1xuICAgIF9tYXhTaXplO1xuICAgIF9yZWNvcmRNaW5NYXg7XG4gICAga2luZCA9IHR5cGVzXzEuQWdncmVnYXRvcktpbmQuRVhQT05FTlRJQUxfSElTVE9HUkFNO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBfbWF4U2l6ZSBNYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIGZvciBlYWNoIG9mIHRoZSBwb3NpdGl2ZVxuICAgICAqICAgIGFuZCBuZWdhdGl2ZSByYW5nZXMsIGV4Y2x1c2l2ZSBvZiB0aGUgemVyby1idWNrZXQuXG4gICAgICogQHBhcmFtIF9yZWNvcmRNaW5NYXggSWYgc2V0IHRvIHRydWUsIG1pbiBhbmQgbWF4IHdpbGwgYmUgcmVjb3JkZWQuXG4gICAgICogICAgT3RoZXJ3aXNlLCBtaW4gYW5kIG1heCB3aWxsIG5vdCBiZSByZWNvcmRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfbWF4U2l6ZSwgX3JlY29yZE1pbk1heCkge1xuICAgICAgICB0aGlzLl9tYXhTaXplID0gX21heFNpemU7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbihzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbihzdGFydFRpbWUsIHRoaXMuX21heFNpemUsIHRoaXMuX3JlY29yZE1pbk1heCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0d28gZXhwb25lbnRpYWwgaGlzdG9ncmFtIGFjY3VtdWxhdGlvbnMuXG4gICAgICovXG4gICAgbWVyZ2UocHJldmlvdXMsIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlbHRhLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5tZXJnZShwcmV2aW91cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgREVMVEEgYWdncmVnYXRpb24gYnkgY29tcGFyaW5nIHR3byBjdW11bGF0aXZlIG1lYXN1cmVtZW50cy5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGN1cnJlbnQuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmRpZmYocHJldmlvdXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB0b01ldHJpY0RhdGEoZGVzY3JpcHRvciwgYWdncmVnYXRpb25UZW1wb3JhbGl0eSwgYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLCBlbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgIGRhdGFQb2ludFR5cGU6IE1ldHJpY0RhdGFfMS5EYXRhUG9pbnRUeXBlLkVYUE9ORU5USUFMX0hJU1RPR1JBTSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRWYWx1ZSA9IGFjY3VtdWxhdGlvbi50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgaW5zdHJ1bWVudCBhbGxvd3MgbmVnYXRpdmUgdmFsdWVzLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93c05lZ2F0aXZlVmFsdWVzID0gZGVzY3JpcHRvci50eXBlID09PSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0UgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuVVBfRE9XTl9DT1VOVEVSIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfR0FVR0UgfHxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci50eXBlID09PSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBwb2ludFZhbHVlLmhhc01pbk1heCA/IHBvaW50VmFsdWUubWluIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBwb2ludFZhbHVlLmhhc01pbk1heCA/IHBvaW50VmFsdWUubWF4IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtOiAhYWxsb3dzTmVnYXRpdmVWYWx1ZXMgPyBwb2ludFZhbHVlLnN1bSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBwb2ludFZhbHVlLnBvc2l0aXZlLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRDb3VudHM6IHBvaW50VmFsdWUucG9zaXRpdmUuYnVja2V0Q291bnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBwb2ludFZhbHVlLm5lZ2F0aXZlLm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRDb3VudHM6IHBvaW50VmFsdWUubmVnYXRpdmUuYnVja2V0Q291bnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBwb2ludFZhbHVlLmNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHBvaW50VmFsdWUuc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB6ZXJvQ291bnQ6IHBvaW50VmFsdWUuemVyb0NvdW50LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvciA9IEV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4cG9uZW50aWFsSGlzdG9ncmFtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MYXN0VmFsdWVBZ2dyZWdhdG9yID0gZXhwb3J0cy5MYXN0VmFsdWVBY2N1bXVsYXRpb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IE1ldHJpY0RhdGFfMSA9IHJlcXVpcmUoXCIuLi9leHBvcnQvTWV0cmljRGF0YVwiKTtcbmNsYXNzIExhc3RWYWx1ZUFjY3VtdWxhdGlvbiB7XG4gICAgc3RhcnRUaW1lO1xuICAgIF9jdXJyZW50O1xuICAgIHNhbXBsZVRpbWU7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBfY3VycmVudCA9IDAsIHNhbXBsZVRpbWUgPSBbMCwgMF0pIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSBfY3VycmVudDtcbiAgICAgICAgdGhpcy5zYW1wbGVUaW1lID0gc2FtcGxlVGltZTtcbiAgICB9XG4gICAgcmVjb3JkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zYW1wbGVUaW1lID0gKDAsIGNvcmVfMS5taWxsaXNUb0hyVGltZSkoRGF0ZS5ub3coKSk7XG4gICAgfVxuICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgfVxuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxufVxuZXhwb3J0cy5MYXN0VmFsdWVBY2N1bXVsYXRpb24gPSBMYXN0VmFsdWVBY2N1bXVsYXRpb247XG4vKiogQmFzaWMgYWdncmVnYXRvciB3aGljaCBjYWxjdWxhdGVzIGEgTGFzdFZhbHVlIGZyb20gaW5kaXZpZHVhbCBtZWFzdXJlbWVudHMuICovXG5jbGFzcyBMYXN0VmFsdWVBZ2dyZWdhdG9yIHtcbiAgICBraW5kID0gdHlwZXNfMS5BZ2dyZWdhdG9yS2luZC5MQVNUX1ZBTFVFO1xuICAgIGNyZWF0ZUFjY3VtdWxhdGlvbihzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXN0VmFsdWVBY2N1bXVsYXRpb24oc3RhcnRUaW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0aGUgZ2l2ZW4gYWNjdW11bGF0aW9ucy5cbiAgICAgKlxuICAgICAqIFJldHVybiB0aGUgbmV3bHkgY2FwdHVyZWQgKGRlbHRhKSBhY2N1bXVsYXRpb24gZm9yIExhc3RWYWx1ZUFnZ3JlZ2F0b3IuXG4gICAgICovXG4gICAgbWVyZ2UocHJldmlvdXMsIGRlbHRhKSB7XG4gICAgICAgIC8vIG5hbm9zZWNvbmRzIG1heSBsb3NlIHByZWNpc2lvbnMuXG4gICAgICAgIGNvbnN0IGxhdGVzdEFjY3VtdWxhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKGRlbHRhLnNhbXBsZVRpbWUpID49XG4gICAgICAgICAgICAoMCwgY29yZV8xLmhyVGltZVRvTWljcm9zZWNvbmRzKShwcmV2aW91cy5zYW1wbGVUaW1lKVxuICAgICAgICAgICAgPyBkZWx0YVxuICAgICAgICAgICAgOiBwcmV2aW91cztcbiAgICAgICAgcmV0dXJuIG5ldyBMYXN0VmFsdWVBY2N1bXVsYXRpb24ocHJldmlvdXMuc3RhcnRUaW1lLCBsYXRlc3RBY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCksIGxhdGVzdEFjY3VtdWxhdGlvbi5zYW1wbGVUaW1lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBERUxUQSBhZ2dyZWdhdGlvbiBieSBjb21wYXJpbmcgdHdvIGN1bXVsYXRpdmUgbWVhc3VyZW1lbnRzLlxuICAgICAqXG4gICAgICogQSBkZWx0YSBhZ2dyZWdhdGlvbiBpcyBub3QgbWVhbmluZ2Z1bCB0byBMYXN0VmFsdWVBZ2dyZWdhdG9yLCBqdXN0IHJldHVyblxuICAgICAqIHRoZSBuZXdseSBjYXB0dXJlZCAoZGVsdGEpIGFjY3VtdWxhdGlvbiBmb3IgTGFzdFZhbHVlQWdncmVnYXRvci5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIC8vIG5hbm9zZWNvbmRzIG1heSBsb3NlIHByZWNpc2lvbnMuXG4gICAgICAgIGNvbnN0IGxhdGVzdEFjY3VtdWxhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKGN1cnJlbnQuc2FtcGxlVGltZSkgPj1cbiAgICAgICAgICAgICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKHByZXZpb3VzLnNhbXBsZVRpbWUpXG4gICAgICAgICAgICA/IGN1cnJlbnRcbiAgICAgICAgICAgIDogcHJldmlvdXM7XG4gICAgICAgIHJldHVybiBuZXcgTGFzdFZhbHVlQWNjdW11bGF0aW9uKGN1cnJlbnQuc3RhcnRUaW1lLCBsYXRlc3RBY2N1bXVsYXRpb24udG9Qb2ludFZhbHVlKCksIGxhdGVzdEFjY3VtdWxhdGlvbi5zYW1wbGVUaW1lKTtcbiAgICB9XG4gICAgdG9NZXRyaWNEYXRhKGRlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcywgZW5kVGltZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRvcixcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICBkYXRhUG9pbnRUeXBlOiBNZXRyaWNEYXRhXzEuRGF0YVBvaW50VHlwZS5HQVVHRSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLkxhc3RWYWx1ZUFnZ3JlZ2F0b3IgPSBMYXN0VmFsdWVBZ2dyZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGFzdFZhbHVlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdW1BZ2dyZWdhdG9yID0gZXhwb3J0cy5TdW1BY2N1bXVsYXRpb24gPSB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L01ldHJpY0RhdGFcIik7XG5jbGFzcyBTdW1BY2N1bXVsYXRpb24ge1xuICAgIHN0YXJ0VGltZTtcbiAgICBtb25vdG9uaWM7XG4gICAgX2N1cnJlbnQ7XG4gICAgcmVzZXQ7XG4gICAgY29uc3RydWN0b3Ioc3RhcnRUaW1lLCBtb25vdG9uaWMsIF9jdXJyZW50ID0gMCwgcmVzZXQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5tb25vdG9uaWMgPSBtb25vdG9uaWM7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSBfY3VycmVudDtcbiAgICAgICAgdGhpcy5yZXNldCA9IHJlc2V0O1xuICAgIH1cbiAgICByZWNvcmQodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMubW9ub3RvbmljICYmIHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgKz0gdmFsdWU7XG4gICAgfVxuICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgfVxuICAgIHRvUG9pbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxufVxuZXhwb3J0cy5TdW1BY2N1bXVsYXRpb24gPSBTdW1BY2N1bXVsYXRpb247XG4vKiogQmFzaWMgYWdncmVnYXRvciB3aGljaCBjYWxjdWxhdGVzIGEgU3VtIGZyb20gaW5kaXZpZHVhbCBtZWFzdXJlbWVudHMuICovXG5jbGFzcyBTdW1BZ2dyZWdhdG9yIHtcbiAgICBtb25vdG9uaWM7XG4gICAga2luZCA9IHR5cGVzXzEuQWdncmVnYXRvcktpbmQuU1VNO1xuICAgIGNvbnN0cnVjdG9yKG1vbm90b25pYykge1xuICAgICAgICB0aGlzLm1vbm90b25pYyA9IG1vbm90b25pYztcbiAgICB9XG4gICAgY3JlYXRlQWNjdW11bGF0aW9uKHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihzdGFydFRpbWUsIHRoaXMubW9ub3RvbmljKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBvZiB0aGUgZ2l2ZW4gYWNjdW11bGF0aW9ucy5cbiAgICAgKi9cbiAgICBtZXJnZShwcmV2aW91cywgZGVsdGEpIHtcbiAgICAgICAgY29uc3QgcHJldlB2ID0gcHJldmlvdXMudG9Qb2ludFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGRlbHRhUHYgPSBkZWx0YS50b1BvaW50VmFsdWUoKTtcbiAgICAgICAgaWYgKGRlbHRhLnJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihkZWx0YS5zdGFydFRpbWUsIHRoaXMubW9ub3RvbmljLCBkZWx0YVB2LCBkZWx0YS5yZXNldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdW1BY2N1bXVsYXRpb24ocHJldmlvdXMuc3RhcnRUaW1lLCB0aGlzLm1vbm90b25pYywgcHJldlB2ICsgZGVsdGFQdik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgREVMVEEgYWdncmVnYXRpb24gYnkgY29tcGFyaW5nIHR3byBjdW11bGF0aXZlIG1lYXN1cmVtZW50cy5cbiAgICAgKi9cbiAgICBkaWZmKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHByZXZQdiA9IHByZXZpb3VzLnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBjdXJyUHYgPSBjdXJyZW50LnRvUG9pbnRWYWx1ZSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIFN1bUFnZ3JlZ2F0b3IgaXMgYSBtb25vdG9uaWMgb25lIGFuZCB0aGUgcHJldmlvdXMgcG9pbnQgdmFsdWUgaXNcbiAgICAgICAgICogZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSwgYSByZXNldCBpcyBkZWVtZWQgdG8gYmUgaGFwcGVuZWQuXG4gICAgICAgICAqIFJldHVybiB0aGUgY3VycmVudCBwb2ludCB2YWx1ZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGJlZW4gcmVzZXQuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5tb25vdG9uaWMgJiYgcHJldlB2ID4gY3VyclB2KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1bUFjY3VtdWxhdGlvbihjdXJyZW50LnN0YXJ0VGltZSwgdGhpcy5tb25vdG9uaWMsIGN1cnJQdiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdW1BY2N1bXVsYXRpb24oY3VycmVudC5zdGFydFRpbWUsIHRoaXMubW9ub3RvbmljLCBjdXJyUHYgLSBwcmV2UHYpO1xuICAgIH1cbiAgICB0b01ldHJpY0RhdGEoZGVzY3JpcHRvciwgYWdncmVnYXRpb25UZW1wb3JhbGl0eSwgYWNjdW11bGF0aW9uQnlBdHRyaWJ1dGVzLCBlbmRUaW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgIGRhdGFQb2ludFR5cGU6IE1ldHJpY0RhdGFfMS5EYXRhUG9pbnRUeXBlLlNVTSxcbiAgICAgICAgICAgIGRhdGFQb2ludHM6IGFjY3VtdWxhdGlvbkJ5QXR0cmlidXRlcy5tYXAoKFthdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb25dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBhY2N1bXVsYXRpb24uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYWNjdW11bGF0aW9uLnRvUG9pbnRWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGlzTW9ub3RvbmljOiB0aGlzLm1vbm90b25pYyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlN1bUFnZ3JlZ2F0b3IgPSBTdW1BZ2dyZWdhdG9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3VtLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdW1BZ2dyZWdhdG9yID0gZXhwb3J0cy5TdW1BY2N1bXVsYXRpb24gPSBleHBvcnRzLkxhc3RWYWx1ZUFnZ3JlZ2F0b3IgPSBleHBvcnRzLkxhc3RWYWx1ZUFjY3VtdWxhdGlvbiA9IGV4cG9ydHMuRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yID0gZXhwb3J0cy5FeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbiA9IGV4cG9ydHMuSGlzdG9ncmFtQWdncmVnYXRvciA9IGV4cG9ydHMuSGlzdG9ncmFtQWNjdW11bGF0aW9uID0gZXhwb3J0cy5Ecm9wQWdncmVnYXRvciA9IHZvaWQgMDtcbnZhciBEcm9wXzEgPSByZXF1aXJlKFwiLi9Ecm9wXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRHJvcEFnZ3JlZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIERyb3BfMS5Ecm9wQWdncmVnYXRvcjsgfSB9KTtcbnZhciBIaXN0b2dyYW1fMSA9IHJlcXVpcmUoXCIuL0hpc3RvZ3JhbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhpc3RvZ3JhbUFjY3VtdWxhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSGlzdG9ncmFtXzEuSGlzdG9ncmFtQWNjdW11bGF0aW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGlzdG9ncmFtQWdncmVnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSGlzdG9ncmFtXzEuSGlzdG9ncmFtQWdncmVnYXRvcjsgfSB9KTtcbnZhciBFeHBvbmVudGlhbEhpc3RvZ3JhbV8xID0gcmVxdWlyZShcIi4vRXhwb25lbnRpYWxIaXN0b2dyYW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRXhwb25lbnRpYWxIaXN0b2dyYW1fMS5FeHBvbmVudGlhbEhpc3RvZ3JhbUFjY3VtdWxhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRXhwb25lbnRpYWxIaXN0b2dyYW1fMS5FeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0b3I7IH0gfSk7XG52YXIgTGFzdFZhbHVlXzEgPSByZXF1aXJlKFwiLi9MYXN0VmFsdWVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMYXN0VmFsdWVBY2N1bXVsYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExhc3RWYWx1ZV8xLkxhc3RWYWx1ZUFjY3VtdWxhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxhc3RWYWx1ZUFnZ3JlZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExhc3RWYWx1ZV8xLkxhc3RWYWx1ZUFnZ3JlZ2F0b3I7IH0gfSk7XG52YXIgU3VtXzEgPSByZXF1aXJlKFwiLi9TdW1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdW1BY2N1bXVsYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1bV8xLlN1bUFjY3VtdWxhdGlvbjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlN1bUFnZ3JlZ2F0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN1bV8xLlN1bUFnZ3JlZ2F0b3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuREVGQVVMVF9BR0dSRUdBVElPTiA9IGV4cG9ydHMuRVhQT05FTlRJQUxfSElTVE9HUkFNX0FHR1JFR0FUSU9OID0gZXhwb3J0cy5ISVNUT0dSQU1fQUdHUkVHQVRJT04gPSBleHBvcnRzLkxBU1RfVkFMVUVfQUdHUkVHQVRJT04gPSBleHBvcnRzLlNVTV9BR0dSRUdBVElPTiA9IGV4cG9ydHMuRFJPUF9BR0dSRUdBVElPTiA9IGV4cG9ydHMuRGVmYXVsdEFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5FeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5FeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5IaXN0b2dyYW1BZ2dyZWdhdGlvbiA9IGV4cG9ydHMuTGFzdFZhbHVlQWdncmVnYXRpb24gPSBleHBvcnRzLlN1bUFnZ3JlZ2F0aW9uID0gZXhwb3J0cy5Ecm9wQWdncmVnYXRpb24gPSB2b2lkIDA7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgYWdncmVnYXRvcl8xID0gcmVxdWlyZShcIi4uL2FnZ3JlZ2F0b3JcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi4vZXhwb3J0L01ldHJpY0RhdGFcIik7XG4vKipcbiAqIFRoZSBkZWZhdWx0IGRyb3AgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIERyb3BBZ2dyZWdhdGlvbiB7XG4gICAgc3RhdGljIERFRkFVTFRfSU5TVEFOQ0UgPSBuZXcgYWdncmVnYXRvcl8xLkRyb3BBZ2dyZWdhdG9yKCk7XG4gICAgY3JlYXRlQWdncmVnYXRvcihfaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gRHJvcEFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0cy5Ecm9wQWdncmVnYXRpb24gPSBEcm9wQWdncmVnYXRpb247XG4vKipcbiAqIFRoZSBkZWZhdWx0IHN1bSBhZ2dyZWdhdGlvbi5cbiAqL1xuY2xhc3MgU3VtQWdncmVnYXRpb24ge1xuICAgIHN0YXRpYyBNT05PVE9OSUNfSU5TVEFOQ0UgPSBuZXcgYWdncmVnYXRvcl8xLlN1bUFnZ3JlZ2F0b3IodHJ1ZSk7XG4gICAgc3RhdGljIE5PTl9NT05PVE9OSUNfSU5TVEFOQ0UgPSBuZXcgYWdncmVnYXRvcl8xLlN1bUFnZ3JlZ2F0b3IoZmFsc2UpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoaW5zdHJ1bWVudCkge1xuICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkhJU1RPR1JBTToge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdW1BZ2dyZWdhdGlvbi5NT05PVE9OSUNfSU5TVEFOQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN1bUFnZ3JlZ2F0aW9uLk5PTl9NT05PVE9OSUNfSU5TVEFOQ0U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlN1bUFnZ3JlZ2F0aW9uID0gU3VtQWdncmVnYXRpb247XG4vKipcbiAqIFRoZSBkZWZhdWx0IGxhc3QgdmFsdWUgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIExhc3RWYWx1ZUFnZ3JlZ2F0aW9uIHtcbiAgICBzdGF0aWMgREVGQVVMVF9JTlNUQU5DRSA9IG5ldyBhZ2dyZWdhdG9yXzEuTGFzdFZhbHVlQWdncmVnYXRvcigpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIExhc3RWYWx1ZUFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0cy5MYXN0VmFsdWVBZ2dyZWdhdGlvbiA9IExhc3RWYWx1ZUFnZ3JlZ2F0aW9uO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBoaXN0b2dyYW0gYWdncmVnYXRpb24uXG5cbiAqL1xuY2xhc3MgSGlzdG9ncmFtQWdncmVnYXRpb24ge1xuICAgIHN0YXRpYyBERUZBVUxUX0lOU1RBTkNFID0gbmV3IGFnZ3JlZ2F0b3JfMS5IaXN0b2dyYW1BZ2dyZWdhdG9yKFswLCA1LCAxMCwgMjUsIDUwLCA3NSwgMTAwLCAyNTAsIDUwMCwgNzUwLCAxMDAwLCAyNTAwLCA1MDAwLCA3NTAwLCAxMDAwMF0sIHRydWUpO1xuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uLkRFRkFVTFRfSU5TVEFOQ0U7XG4gICAgfVxufVxuZXhwb3J0cy5IaXN0b2dyYW1BZ2dyZWdhdGlvbiA9IEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uO1xuLyoqXG4gKiBUaGUgZXhwbGljaXQgYnVja2V0IGhpc3RvZ3JhbSBhZ2dyZWdhdGlvbi5cbiAqL1xuY2xhc3MgRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbiB7XG4gICAgX3JlY29yZE1pbk1heDtcbiAgICBfYm91bmRhcmllcztcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm91bmRhcmllcyB0aGUgYnVja2V0IGJvdW5kYXJpZXMgb2YgdGhlIGhpc3RvZ3JhbSBhZ2dyZWdhdGlvblxuICAgICAqIEBwYXJhbSBfcmVjb3JkTWluTWF4IElmIHNldCB0byB0cnVlLCBtaW4gYW5kIG1heCB3aWxsIGJlIHJlY29yZGVkLiBPdGhlcndpc2UsIG1pbiBhbmQgbWF4IHdpbGwgbm90IGJlIHJlY29yZGVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGJvdW5kYXJpZXMsIF9yZWNvcmRNaW5NYXggPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgICAgIGlmIChib3VuZGFyaWVzID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbiBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGV4cGxpY2l0IGJvdW5kYXJpZXMsIGlmIGEgc2luZ2xlIGJ1Y2tldCBoaXN0b2dyYW0gaXMgcmVxdWlyZWQsIHBsZWFzZSBwYXNzIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29weSB0aGUgYm91bmRhcmllcyBhcnJheSBmb3IgbW9kaWZpY2F0aW9uLlxuICAgICAgICBib3VuZGFyaWVzID0gYm91bmRhcmllcy5jb25jYXQoKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBhbiBvcmRlcmVkIHNldCB0byBiZSBhYmxlIHRvIGNvcnJlY3RseSBjb21wdXRlIGNvdW50IGZvciBlYWNoXG4gICAgICAgIC8vIGJvdW5kYXJ5IHNpbmNlIHdlJ2xsIGl0ZXJhdGUgb24gZWFjaCBpbiBvcmRlci5cbiAgICAgICAgYm91bmRhcmllcyA9IGJvdW5kYXJpZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICAvLyBSZW1vdmUgYWxsIEluZmluaXR5IGZyb20gdGhlIGJvdW5kYXJpZXMuXG4gICAgICAgIGNvbnN0IG1pbnVzSW5maW5pdHlJbmRleCA9IGJvdW5kYXJpZXMubGFzdEluZGV4T2YoLUluZmluaXR5KTtcbiAgICAgICAgbGV0IGluZmluaXR5SW5kZXggPSBib3VuZGFyaWVzLmluZGV4T2YoSW5maW5pdHkpO1xuICAgICAgICBpZiAoaW5maW5pdHlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGluZmluaXR5SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYm91bmRhcmllcyA9IGJvdW5kYXJpZXMuc2xpY2UobWludXNJbmZpbml0eUluZGV4ICsgMSwgaW5maW5pdHlJbmRleCk7XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhZ2dyZWdhdG9yXzEuSGlzdG9ncmFtQWdncmVnYXRvcih0aGlzLl9ib3VuZGFyaWVzLCB0aGlzLl9yZWNvcmRNaW5NYXgpO1xuICAgIH1cbn1cbmV4cG9ydHMuRXhwbGljaXRCdWNrZXRIaXN0b2dyYW1BZ2dyZWdhdGlvbiA9IEV4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb247XG5jbGFzcyBFeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uIHtcbiAgICBfbWF4U2l6ZTtcbiAgICBfcmVjb3JkTWluTWF4O1xuICAgIGNvbnN0cnVjdG9yKF9tYXhTaXplID0gMTYwLCBfcmVjb3JkTWluTWF4ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9tYXhTaXplID0gX21heFNpemU7XG4gICAgICAgIHRoaXMuX3JlY29yZE1pbk1heCA9IF9yZWNvcmRNaW5NYXg7XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoX2luc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhZ2dyZWdhdG9yXzEuRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdG9yKHRoaXMuX21heFNpemUsIHRoaXMuX3JlY29yZE1pbk1heCk7XG4gICAgfVxufVxuZXhwb3J0cy5FeHBvbmVudGlhbEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uID0gRXhwb25lbnRpYWxIaXN0b2dyYW1BZ2dyZWdhdGlvbjtcbi8qKlxuICogVGhlIGRlZmF1bHQgYWdncmVnYXRpb24uXG4gKi9cbmNsYXNzIERlZmF1bHRBZ2dyZWdhdGlvbiB7XG4gICAgX3Jlc29sdmUoaW5zdHJ1bWVudCkge1xuICAgICAgICAvLyBjYXN0IHRvIHVua25vd24gdG8gZGlzYWJsZSBjb21wbGFpbnRzIG9uIHRoZSAodW5yZWFjaGFibGUpIGZhbGxiYWNrLlxuICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfQ09VTlRFUjpcbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuU1VNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0U6XG4gICAgICAgICAgICBjYXNlIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuTEFTVF9WQUxVRV9BR0dSRUdBVElPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkhJU1RPR1JBTToge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50LmFkdmljZS5leHBsaWNpdEJ1Y2tldEJvdW5kYXJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uKGluc3RydW1lbnQuYWR2aWNlLmV4cGxpY2l0QnVja2V0Qm91bmRhcmllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkhJU1RPR1JBTV9BR0dSRUdBVElPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcGkuZGlhZy53YXJuKGBVbmFibGUgdG8gcmVjb2duaXplIGluc3RydW1lbnQgdHlwZTogJHtpbnN0cnVtZW50LnR5cGV9YCk7XG4gICAgICAgIHJldHVybiBleHBvcnRzLkRST1BfQUdHUkVHQVRJT047XG4gICAgfVxuICAgIGNyZWF0ZUFnZ3JlZ2F0b3IoaW5zdHJ1bWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZShpbnN0cnVtZW50KS5jcmVhdGVBZ2dyZWdhdG9yKGluc3RydW1lbnQpO1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdEFnZ3JlZ2F0aW9uID0gRGVmYXVsdEFnZ3JlZ2F0aW9uO1xuZXhwb3J0cy5EUk9QX0FHR1JFR0FUSU9OID0gbmV3IERyb3BBZ2dyZWdhdGlvbigpO1xuZXhwb3J0cy5TVU1fQUdHUkVHQVRJT04gPSBuZXcgU3VtQWdncmVnYXRpb24oKTtcbmV4cG9ydHMuTEFTVF9WQUxVRV9BR0dSRUdBVElPTiA9IG5ldyBMYXN0VmFsdWVBZ2dyZWdhdGlvbigpO1xuZXhwb3J0cy5ISVNUT0dSQU1fQUdHUkVHQVRJT04gPSBuZXcgSGlzdG9ncmFtQWdncmVnYXRpb24oKTtcbmV4cG9ydHMuRVhQT05FTlRJQUxfSElTVE9HUkFNX0FHR1JFR0FUSU9OID0gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRpb24oKTtcbmV4cG9ydHMuREVGQVVMVF9BR0dSRUdBVElPTiA9IG5ldyBEZWZhdWx0QWdncmVnYXRpb24oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvQWdncmVnYXRpb24gPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVHlwZSA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBBZ2dyZWdhdGlvbl8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25cIik7XG52YXIgQWdncmVnYXRpb25UeXBlO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGlvblR5cGUpIHtcbiAgICBBZ2dyZWdhdGlvblR5cGVbQWdncmVnYXRpb25UeXBlW1wiREVGQVVMVFwiXSA9IDBdID0gXCJERUZBVUxUXCI7XG4gICAgQWdncmVnYXRpb25UeXBlW0FnZ3JlZ2F0aW9uVHlwZVtcIkRST1BcIl0gPSAxXSA9IFwiRFJPUFwiO1xuICAgIEFnZ3JlZ2F0aW9uVHlwZVtBZ2dyZWdhdGlvblR5cGVbXCJTVU1cIl0gPSAyXSA9IFwiU1VNXCI7XG4gICAgQWdncmVnYXRpb25UeXBlW0FnZ3JlZ2F0aW9uVHlwZVtcIkxBU1RfVkFMVUVcIl0gPSAzXSA9IFwiTEFTVF9WQUxVRVwiO1xuICAgIEFnZ3JlZ2F0aW9uVHlwZVtBZ2dyZWdhdGlvblR5cGVbXCJFWFBMSUNJVF9CVUNLRVRfSElTVE9HUkFNXCJdID0gNF0gPSBcIkVYUExJQ0lUX0JVQ0tFVF9ISVNUT0dSQU1cIjtcbiAgICBBZ2dyZWdhdGlvblR5cGVbQWdncmVnYXRpb25UeXBlW1wiRVhQT05FTlRJQUxfSElTVE9HUkFNXCJdID0gNV0gPSBcIkVYUE9ORU5USUFMX0hJU1RPR1JBTVwiO1xufSkoQWdncmVnYXRpb25UeXBlID0gZXhwb3J0cy5BZ2dyZWdhdGlvblR5cGUgfHwgKGV4cG9ydHMuQWdncmVnYXRpb25UeXBlID0ge30pKTtcbmZ1bmN0aW9uIHRvQWdncmVnYXRpb24ob3B0aW9uKSB7XG4gICAgc3dpdGNoIChvcHRpb24udHlwZSkge1xuICAgICAgICBjYXNlIEFnZ3JlZ2F0aW9uVHlwZS5ERUZBVUxUOlxuICAgICAgICAgICAgcmV0dXJuIEFnZ3JlZ2F0aW9uXzEuREVGQVVMVF9BR0dSRUdBVElPTjtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuRFJPUDpcbiAgICAgICAgICAgIHJldHVybiBBZ2dyZWdhdGlvbl8xLkRST1BfQUdHUkVHQVRJT047XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLlNVTTpcbiAgICAgICAgICAgIHJldHVybiBBZ2dyZWdhdGlvbl8xLlNVTV9BR0dSRUdBVElPTjtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGUuTEFTVF9WQUxVRTpcbiAgICAgICAgICAgIHJldHVybiBBZ2dyZWdhdGlvbl8xLkxBU1RfVkFMVUVfQUdHUkVHQVRJT047XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLkVYUE9ORU5USUFMX0hJU1RPR1JBTToge1xuICAgICAgICAgICAgY29uc3QgZXhwT3B0aW9uID0gb3B0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGlvbl8xLkV4cG9uZW50aWFsSGlzdG9ncmFtQWdncmVnYXRpb24oZXhwT3B0aW9uLm9wdGlvbnM/Lm1heFNpemUsIGV4cE9wdGlvbi5vcHRpb25zPy5yZWNvcmRNaW5NYXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQWdncmVnYXRpb25UeXBlLkVYUExJQ0lUX0JVQ0tFVF9ISVNUT0dSQU06IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cE9wdGlvbiA9IG9wdGlvbjtcbiAgICAgICAgICAgIGlmIChleHBPcHRpb24ub3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFnZ3JlZ2F0aW9uXzEuSElTVE9HUkFNX0FHR1JFR0FUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGlvbl8xLkV4cGxpY2l0QnVja2V0SGlzdG9ncmFtQWdncmVnYXRpb24oZXhwT3B0aW9uLm9wdGlvbnM/LmJvdW5kYXJpZXMsIGV4cE9wdGlvbi5vcHRpb25zPy5yZWNvcmRNaW5NYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIEFnZ3JlZ2F0aW9uJyk7XG4gICAgfVxufVxuZXhwb3J0cy50b0FnZ3JlZ2F0aW9uID0gdG9BZ2dyZWdhdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uT3B0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SID0gZXhwb3J0cy5ERUZBVUxUX0FHR1JFR0FUSU9OX1NFTEVDVE9SID0gdm9pZCAwO1xuY29uc3QgQWdncmVnYXRpb25UZW1wb3JhbGl0eV8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKTtcbmNvbnN0IEFnZ3JlZ2F0aW9uT3B0aW9uXzEgPSByZXF1aXJlKFwiLi4vdmlldy9BZ2dyZWdhdGlvbk9wdGlvblwiKTtcbmNvbnN0IERFRkFVTFRfQUdHUkVHQVRJT05fU0VMRUNUT1IgPSBfaW5zdHJ1bWVudFR5cGUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IEFnZ3JlZ2F0aW9uT3B0aW9uXzEuQWdncmVnYXRpb25UeXBlLkRFRkFVTFQsXG4gICAgfTtcbn07XG5leHBvcnRzLkRFRkFVTFRfQUdHUkVHQVRJT05fU0VMRUNUT1IgPSBERUZBVUxUX0FHR1JFR0FUSU9OX1NFTEVDVE9SO1xuY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUiA9IF9pbnN0cnVtZW50VHlwZSA9PiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5DVU1VTEFUSVZFO1xuZXhwb3J0cy5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SID0gREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFnZ3JlZ2F0aW9uU2VsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldHJpY1JlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgQWdncmVnYXRpb25TZWxlY3Rvcl8xID0gcmVxdWlyZShcIi4vQWdncmVnYXRpb25TZWxlY3RvclwiKTtcbi8qKlxuICogQSByZWdpc3RlcmVkIHJlYWRlciBvZiBtZXRyaWNzIHRoYXQsIHdoZW4gbGlua2VkIHRvIGEge0BsaW5rIE1ldHJpY1Byb2R1Y2VyfSwgb2ZmZXJzIGdsb2JhbFxuICogY29udHJvbCBvdmVyIG1ldHJpY3MuXG4gKi9cbmNsYXNzIE1ldHJpY1JlYWRlciB7XG4gICAgLy8gVHJhY2tzIHRoZSBzaHV0ZG93biBzdGF0ZS5cbiAgICAvLyBUT0RPOiB1c2UgQmluZE9uY2VQcm9taXNlIGhlcmUgb25jZSBhIG5ldyB2ZXJzaW9uIG9mIEBvcGVudGVsZW1ldHJ5L2NvcmUgaXMgYXZhaWxhYmxlLlxuICAgIF9zaHV0ZG93biA9IGZhbHNlO1xuICAgIC8vIEFkZGl0aW9uYWwgTWV0cmljUHJvZHVjZXJzIHdoaWNoIHdpbGwgYmUgY29tYmluZWQgd2l0aCB0aGUgU0RLJ3Mgb3V0cHV0XG4gICAgX21ldHJpY1Byb2R1Y2VycztcbiAgICAvLyBNZXRyaWNQcm9kdWNlciB1c2VkIGJ5IHRoaXMgaW5zdGFuY2Ugd2hpY2ggcHJvZHVjZXMgbWV0cmljcyBmcm9tIHRoZSBTREtcbiAgICBfc2RrTWV0cmljUHJvZHVjZXI7XG4gICAgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICBfYWdncmVnYXRpb25TZWxlY3RvcjtcbiAgICBfY2FyZGluYWxpdHlTZWxlY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uU2VsZWN0b3IgPVxuICAgICAgICAgICAgb3B0aW9ucz8uYWdncmVnYXRpb25TZWxlY3RvciA/PyBBZ2dyZWdhdGlvblNlbGVjdG9yXzEuREVGQVVMVF9BR0dSRUdBVElPTl9TRUxFQ1RPUjtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25UZW1wb3JhbGl0eVNlbGVjdG9yID1cbiAgICAgICAgICAgIG9wdGlvbnM/LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvciA/P1xuICAgICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uU2VsZWN0b3JfMS5ERUZBVUxUX0FHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1NFTEVDVE9SO1xuICAgICAgICB0aGlzLl9tZXRyaWNQcm9kdWNlcnMgPSBvcHRpb25zPy5tZXRyaWNQcm9kdWNlcnMgPz8gW107XG4gICAgICAgIHRoaXMuX2NhcmRpbmFsaXR5U2VsZWN0b3IgPSBvcHRpb25zPy5jYXJkaW5hbGl0eVNlbGVjdG9yO1xuICAgIH1cbiAgICBzZXRNZXRyaWNQcm9kdWNlcihtZXRyaWNQcm9kdWNlcikge1xuICAgICAgICBpZiAodGhpcy5fc2RrTWV0cmljUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljUmVhZGVyIGNhbiBub3QgYmUgYm91bmQgdG8gYSBNZXRlclByb3ZpZGVyIGFnYWluLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nka01ldHJpY1Byb2R1Y2VyID0gbWV0cmljUHJvZHVjZXI7XG4gICAgICAgIHRoaXMub25Jbml0aWFsaXplZCgpO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRpb25TZWxlY3RvcihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIHNlbGVjdENhcmRpbmFsaXR5TGltaXQoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRpbmFsaXR5U2VsZWN0b3JcbiAgICAgICAgICAgID8gdGhpcy5fY2FyZGluYWxpdHlTZWxlY3RvcihpbnN0cnVtZW50VHlwZSlcbiAgICAgICAgICAgIDogMjAwMDsgLy8gZGVmYXVsdCB2YWx1ZSBpZiBubyBzZWxlY3RvciBpcyBwcm92aWRlZFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgb25jZSB0aGUgU0RLIGhhcyBpbml0aWFsaXplZCB0aGlzIHtAbGluayBNZXRyaWNSZWFkZXJ9XG4gICAgICogT3ZlcnJpZGluZyB0aGlzIG1ldGhvZCBpcyBvcHRpb25hbC5cbiAgICAgKi9cbiAgICBvbkluaXRpYWxpemVkKCkge1xuICAgICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGVtcHR5LlxuICAgIH1cbiAgICBhc3luYyBjb2xsZWN0KG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nka01ldHJpY1Byb2R1Y2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljUmVhZGVyIGlzIG5vdCBib3VuZCB0byBhIE1ldHJpY1Byb2R1Y2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3Vic2VxdWVudCBpbnZvY2F0aW9ucyB0byBjb2xsZWN0IGFyZSBub3QgYWxsb3dlZC4gU0RLcyBTSE9VTEQgcmV0dXJuIHNvbWUgZmFpbHVyZSBmb3IgdGhlc2UgY2FsbHMuXG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRyaWNSZWFkZXIgaXMgc2h1dGRvd24nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbc2RrQ29sbGVjdGlvblJlc3VsdHMsIC4uLmFkZGl0aW9uYWxDb2xsZWN0aW9uUmVzdWx0c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICB0aGlzLl9zZGtNZXRyaWNQcm9kdWNlci5jb2xsZWN0KHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBvcHRpb25zPy50aW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9tZXRyaWNQcm9kdWNlcnMubWFwKHByb2R1Y2VyID0+IHByb2R1Y2VyLmNvbGxlY3Qoe1xuICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IG9wdGlvbnM/LnRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIF0pO1xuICAgICAgICAvLyBNZXJnZSB0aGUgcmVzdWx0cywga2VlcGluZyB0aGUgU0RLJ3MgUmVzb3VyY2VcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc2RrQ29sbGVjdGlvblJlc3VsdHMuZXJyb3JzLmNvbmNhdCgoMCwgdXRpbHNfMS5GbGF0TWFwKShhZGRpdGlvbmFsQ29sbGVjdGlvblJlc3VsdHMsIHJlc3VsdCA9PiByZXN1bHQuZXJyb3JzKSk7XG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gc2RrQ29sbGVjdGlvblJlc3VsdHMucmVzb3VyY2VNZXRyaWNzLnJlc291cmNlO1xuICAgICAgICBjb25zdCBzY29wZU1ldHJpY3MgPSBzZGtDb2xsZWN0aW9uUmVzdWx0cy5yZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzLmNvbmNhdCgoMCwgdXRpbHNfMS5GbGF0TWFwKShhZGRpdGlvbmFsQ29sbGVjdGlvblJlc3VsdHMsIHJlc3VsdCA9PiByZXN1bHQucmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzb3VyY2VNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9ycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgc2h1dGRvd24ob3B0aW9ucykge1xuICAgICAgICAvLyBEbyBub3QgY2FsbCBzaHV0ZG93biBhZ2FpbiBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC5cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGkuZGlhZy5lcnJvcignQ2Fubm90IGNhbGwgc2h1dGRvd24gdHdpY2UuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gdGltZW91dCBpZiB0aW1lb3V0TWlsbGlzIGlzIHVuZGVmaW5lZCBvciBudWxsLlxuICAgICAgICBpZiAob3B0aW9ucz8udGltZW91dE1pbGxpcyA9PSBudWxsKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uU2h1dGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCB1dGlsc18xLmNhbGxXaXRoVGltZW91dCkodGhpcy5vblNodXRkb3duKCksIG9wdGlvbnMudGltZW91dE1pbGxpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2h1dGRvd24gPSB0cnVlO1xuICAgIH1cbiAgICBhc3luYyBmb3JjZUZsdXNoKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGkuZGlhZy53YXJuKCdDYW5ub3QgZm9yY2VGbHVzaCBvbiBhbHJlYWR5IHNodXRkb3duIE1ldHJpY1JlYWRlci4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyB0aW1lb3V0IGlmIHRpbWVvdXRNaWxsaXMgaXMgdW5kZWZpbmVkIG9yIG51bGwuXG4gICAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0TWlsbGlzID09IG51bGwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Gb3JjZUZsdXNoKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgKDAsIHV0aWxzXzEuY2FsbFdpdGhUaW1lb3V0KSh0aGlzLm9uRm9yY2VGbHVzaCgpLCBvcHRpb25zLnRpbWVvdXRNaWxsaXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuTWV0cmljUmVhZGVyID0gTWV0cmljUmVhZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0cmljUmVhZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlciA9IHZvaWQgMDtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IE1ldHJpY1JlYWRlcl8xID0gcmVxdWlyZShcIi4vTWV0cmljUmVhZGVyXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbi8qKlxuICoge0BsaW5rIE1ldHJpY1JlYWRlcn0gd2hpY2ggY29sbGVjdHMgbWV0cmljcyBiYXNlZCBvbiBhIHVzZXItY29uZmlndXJhYmxlIHRpbWUgaW50ZXJ2YWwsIGFuZCBwYXNzZXMgdGhlIG1ldHJpY3MgdG9cbiAqIHRoZSBjb25maWd1cmVkIHtAbGluayBQdXNoTWV0cmljRXhwb3J0ZXJ9XG4gKi9cbmNsYXNzIFBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyIGV4dGVuZHMgTWV0cmljUmVhZGVyXzEuTWV0cmljUmVhZGVyIHtcbiAgICBfaW50ZXJ2YWw7XG4gICAgX2V4cG9ydGVyO1xuICAgIF9leHBvcnRJbnRlcnZhbDtcbiAgICBfZXhwb3J0VGltZW91dDtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uU2VsZWN0b3I6IG9wdGlvbnMuZXhwb3J0ZXIuc2VsZWN0QWdncmVnYXRpb24/LmJpbmQob3B0aW9ucy5leHBvcnRlciksXG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5U2VsZWN0b3I6IG9wdGlvbnMuZXhwb3J0ZXIuc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eT8uYmluZChvcHRpb25zLmV4cG9ydGVyKSxcbiAgICAgICAgICAgIG1ldHJpY1Byb2R1Y2Vyczogb3B0aW9ucy5tZXRyaWNQcm9kdWNlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy5leHBvcnRJbnRlcnZhbE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdleHBvcnRJbnRlcnZhbE1pbGxpcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb3J0VGltZW91dE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydFRpbWVvdXRNaWxsaXMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ2V4cG9ydFRpbWVvdXRNaWxsaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydFRpbWVvdXRNaWxsaXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3B0aW9ucy5leHBvcnRJbnRlcnZhbE1pbGxpcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25zLmV4cG9ydEludGVydmFsTWlsbGlzIDwgb3B0aW9ucy5leHBvcnRUaW1lb3V0TWlsbGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignZXhwb3J0SW50ZXJ2YWxNaWxsaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZXhwb3J0VGltZW91dE1pbGxpcycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V4cG9ydEludGVydmFsID0gb3B0aW9ucy5leHBvcnRJbnRlcnZhbE1pbGxpcyA/PyA2MDAwMDtcbiAgICAgICAgdGhpcy5fZXhwb3J0VGltZW91dCA9IG9wdGlvbnMuZXhwb3J0VGltZW91dE1pbGxpcyA/PyAzMDAwMDtcbiAgICAgICAgdGhpcy5fZXhwb3J0ZXIgPSBvcHRpb25zLmV4cG9ydGVyO1xuICAgIH1cbiAgICBhc3luYyBfcnVuT25jZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0ICgwLCB1dGlsc18xLmNhbGxXaXRoVGltZW91dCkodGhpcy5fZG9SdW4oKSwgdGhpcy5fZXhwb3J0VGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIHV0aWxzXzEuVGltZW91dEVycm9yKSB7XG4gICAgICAgICAgICAgICAgYXBpLmRpYWcuZXJyb3IoJ0V4cG9ydCB0b29rIGxvbmdlciB0aGFuICVzIG1pbGxpc2Vjb25kcyBhbmQgdGltZWQgb3V0LicsIHRoaXMuX2V4cG9ydFRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKShlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9kb1J1bigpIHtcbiAgICAgICAgY29uc3QgeyByZXNvdXJjZU1ldHJpY3MsIGVycm9ycyB9ID0gYXdhaXQgdGhpcy5jb2xsZWN0KHtcbiAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IHRoaXMuX2V4cG9ydFRpbWVvdXQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLmVycm9yKCdQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjogbWV0cmljcyBjb2xsZWN0aW9uIGVycm9ycycsIC4uLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlTWV0cmljcy5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlc291cmNlTWV0cmljcy5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzPy4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXBpLmRpYWcuZGVidWcoJ0Vycm9yIHdoaWxlIHJlc29sdmluZyBhc3luYyBwb3J0aW9uIG9mIHJlc291cmNlOiAnLCBlKTtcbiAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlTWV0cmljcy5zY29wZU1ldHJpY3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29yZV8xLmludGVybmFsLl9leHBvcnQodGhpcy5fZXhwb3J0ZXIsIHJlc291cmNlTWV0cmljcyk7XG4gICAgICAgIGlmIChyZXN1bHQuY29kZSAhPT0gY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjogbWV0cmljcyBleHBvcnQgZmFpbGVkIChlcnJvciAke3Jlc3VsdC5lcnJvcn0pYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Jbml0aWFsaXplZCgpIHtcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgaW50ZXJ2YWwgYXMgc29vbiBhcyB0aGlzIHJlYWRlciBpcyBpbml0aWFsaXplZCBhbmQga2VlcCBoYW5kbGUgZm9yIHNodXRkb3duLlxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX3J1bk9uY2UgbmV2ZXIgcmVqZWN0cy4gVXNpbmcgdm9pZCBvcGVyYXRvciB0byBzdXBwcmVzcyBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXMuXG4gICAgICAgICAgICB2b2lkIHRoaXMuX3J1bk9uY2UoKTtcbiAgICAgICAgfSwgdGhpcy5fZXhwb3J0SW50ZXJ2YWwpO1xuICAgICAgICAoMCwgY29yZV8xLnVucmVmVGltZXIpKHRoaXMuX2ludGVydmFsKTtcbiAgICB9XG4gICAgYXN5bmMgb25Gb3JjZUZsdXNoKCkge1xuICAgICAgICBhd2FpdCB0aGlzLl9ydW5PbmNlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2goKTtcbiAgICB9XG4gICAgYXN5bmMgb25TaHV0ZG93bigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLm9uRm9yY2VGbHVzaCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIgPSBQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Jbk1lbW9yeU1ldHJpY0V4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEluLW1lbW9yeSBNZXRyaWNzIEV4cG9ydGVyIGlzIGEgUHVzaCBNZXRyaWMgRXhwb3J0ZXJcbiAqIHdoaWNoIGFjY3VtdWxhdGVzIG1ldHJpY3MgZGF0YSBpbiB0aGUgbG9jYWwgbWVtb3J5IGFuZFxuICogYWxsb3dzIHRvIGluc3BlY3QgaXQgKHVzZWZ1bCBmb3IgZS5nLiB1bml0IHRlc3RzKS5cbiAqL1xuY2xhc3MgSW5NZW1vcnlNZXRyaWNFeHBvcnRlciB7XG4gICAgX3NodXRkb3duID0gZmFsc2U7XG4gICAgX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgX21ldHJpY3MgPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihhZ2dyZWdhdGlvblRlbXBvcmFsaXR5KSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGVkRG9jXG4gICAgICovXG4gICAgZXhwb3J0KG1ldHJpY3MsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIC8vIEF2b2lkIHN0b3JpbmcgbWV0cmljcyB3aGVuIGV4cG9ydGVyIGlzIHNodXRkb3duXG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZXN1bHRDYWxsYmFjayh7IGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCB9KSwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY3MpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlc3VsdENhbGxiYWNrKHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9KSwgMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIHRoZSBjb2xsZWN0ZWQgcmVzb3VyY2UgbWV0cmljc1xuICAgICAqIEByZXR1cm5zIFJlc291cmNlTWV0cmljc1tdXG4gICAgICovXG4gICAgZ2V0TWV0cmljcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY3M7XG4gICAgfVxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX21ldHJpY3MgPSBbXTtcbiAgICB9XG4gICAgc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eShfaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9zaHV0ZG93biA9IHRydWU7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59XG5leHBvcnRzLkluTWVtb3J5TWV0cmljRXhwb3J0ZXIgPSBJbk1lbW9yeU1ldHJpY0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5NZW1vcnlNZXRyaWNFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25zb2xlTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBBZ2dyZWdhdGlvblNlbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9BZ2dyZWdhdGlvblNlbGVjdG9yXCIpO1xuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBQdXNoTWV0cmljRXhwb3J0ZXJ9IHRoYXQgcHJpbnRzIG1ldHJpY3MgdG8gdGhlXG4gKiBjb25zb2xlLiBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLlxuICpcbiAqIE5PVEU6IFRoaXMge0BsaW5rIFB1c2hNZXRyaWNFeHBvcnRlcn0gaXMgaW50ZW5kZWQgZm9yIGRpYWdub3N0aWNzIHVzZSBvbmx5LCBvdXRwdXQgcmVuZGVyZWQgdG8gdGhlIGNvbnNvbGUgbWF5IGNoYW5nZSBhdCBhbnkgdGltZS5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuY2xhc3MgQ29uc29sZU1ldHJpY0V4cG9ydGVyIHtcbiAgICBfc2h1dGRvd24gPSBmYWxzZTtcbiAgICBfdGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3RlbXBvcmFsaXR5U2VsZWN0b3IgPVxuICAgICAgICAgICAgb3B0aW9ucz8udGVtcG9yYWxpdHlTZWxlY3RvciA/PyBBZ2dyZWdhdGlvblNlbGVjdG9yXzEuREVGQVVMVF9BR0dSRUdBVElPTl9URU1QT1JBTElUWV9TRUxFQ1RPUjtcbiAgICB9XG4gICAgZXhwb3J0KG1ldHJpY3MsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bikge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGV4cG9ydGVyIGlzIHNodXR0aW5nIGRvd24sIGJ5IHNwZWMsIHdlIG5lZWQgdG8gcmV0dXJuIEZBSUxFRCBhcyBleHBvcnQgcmVzdWx0XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUocmVzdWx0Q2FsbGJhY2ssIHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVEIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb25zb2xlTWV0cmljRXhwb3J0ZXIuX3NlbmRNZXRyaWNzKG1ldHJpY3MsIHJlc3VsdENhbGxiYWNrKTtcbiAgICB9XG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KF9pbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcG9yYWxpdHlTZWxlY3RvcihfaW5zdHJ1bWVudFR5cGUpO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgdGhpcy5fc2h1dGRvd24gPSB0cnVlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHN0YXRpYyBfc2VuZE1ldHJpY3MobWV0cmljcywgZG9uZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlTWV0cmljcyBvZiBtZXRyaWNzLnNjb3BlTWV0cmljcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZXRyaWMgb2Ygc2NvcGVNZXRyaWNzLm1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRpcih7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IG1ldHJpYy5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICBkYXRhUG9pbnRUeXBlOiBtZXRyaWMuZGF0YVBvaW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVBvaW50czogbWV0cmljLmRhdGFQb2ludHMsXG4gICAgICAgICAgICAgICAgfSwgeyBkZXB0aDogbnVsbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb25lKHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9KTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnNvbGVNZXRyaWNFeHBvcnRlciA9IENvbnNvbGVNZXRyaWNFeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbnNvbGVNZXRyaWNFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVmlld1JlZ2lzdHJ5ID0gdm9pZCAwO1xuY2xhc3MgVmlld1JlZ2lzdHJ5IHtcbiAgICBfcmVnaXN0ZXJlZFZpZXdzID0gW107XG4gICAgYWRkVmlldyh2aWV3KSB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRWaWV3cy5wdXNoKHZpZXcpO1xuICAgIH1cbiAgICBmaW5kVmlld3MoaW5zdHJ1bWVudCwgbWV0ZXIpIHtcbiAgICAgICAgY29uc3Qgdmlld3MgPSB0aGlzLl9yZWdpc3RlcmVkVmlld3MuZmlsdGVyKHJlZ2lzdGVyZWRWaWV3ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fbWF0Y2hJbnN0cnVtZW50KHJlZ2lzdGVyZWRWaWV3Lmluc3RydW1lbnRTZWxlY3RvciwgaW5zdHJ1bWVudCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaE1ldGVyKHJlZ2lzdGVyZWRWaWV3Lm1ldGVyU2VsZWN0b3IsIG1ldGVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmlld3M7XG4gICAgfVxuICAgIF9tYXRjaEluc3RydW1lbnQoc2VsZWN0b3IsIGluc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuICgoc2VsZWN0b3IuZ2V0VHlwZSgpID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGluc3RydW1lbnQudHlwZSA9PT0gc2VsZWN0b3IuZ2V0VHlwZSgpKSAmJlxuICAgICAgICAgICAgc2VsZWN0b3IuZ2V0TmFtZUZpbHRlcigpLm1hdGNoKGluc3RydW1lbnQubmFtZSkgJiZcbiAgICAgICAgICAgIHNlbGVjdG9yLmdldFVuaXRGaWx0ZXIoKS5tYXRjaChpbnN0cnVtZW50LnVuaXQpKTtcbiAgICB9XG4gICAgX21hdGNoTWV0ZXIoc2VsZWN0b3IsIG1ldGVyKSB7XG4gICAgICAgIHJldHVybiAoc2VsZWN0b3IuZ2V0TmFtZUZpbHRlcigpLm1hdGNoKG1ldGVyLm5hbWUpICYmXG4gICAgICAgICAgICAobWV0ZXIudmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0b3IuZ2V0VmVyc2lvbkZpbHRlcigpLm1hdGNoKG1ldGVyLnZlcnNpb24pKSAmJlxuICAgICAgICAgICAgKG1ldGVyLnNjaGVtYVVybCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0b3IuZ2V0U2NoZW1hVXJsRmlsdGVyKCkubWF0Y2gobWV0ZXIuc2NoZW1hVXJsKSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuVmlld1JlZ2lzdHJ5ID0gVmlld1JlZ2lzdHJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Vmlld1JlZ2lzdHJ5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1ZhbGlkTmFtZSA9IGV4cG9ydHMuaXNEZXNjcmlwdG9yQ29tcGF0aWJsZVdpdGggPSBleHBvcnRzLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yV2l0aFZpZXcgPSBleHBvcnRzLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IobmFtZSwgdHlwZSwgb3B0aW9ucykge1xuICAgIGlmICghaXNWYWxpZE5hbWUobmFtZSkpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIG1ldHJpYyBuYW1lOiBcIiR7bmFtZX1cIi4gVGhlIG1ldHJpYyBuYW1lIHNob3VsZCBiZSBhIEFTQ0lJIHN0cmluZyB3aXRoIGEgbGVuZ3RoIG5vIGdyZWF0ZXIgdGhhbiAyNTUgY2hhcmFjdGVycy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnM/LmRlc2NyaXB0aW9uID8/ICcnLFxuICAgICAgICB1bml0OiBvcHRpb25zPy51bml0ID8/ICcnLFxuICAgICAgICB2YWx1ZVR5cGU6IG9wdGlvbnM/LnZhbHVlVHlwZSA/PyBhcGlfMS5WYWx1ZVR5cGUuRE9VQkxFLFxuICAgICAgICBhZHZpY2U6IG9wdGlvbnM/LmFkdmljZSA/PyB7fSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvciA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yO1xuZnVuY3Rpb24gY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3JXaXRoVmlldyh2aWV3LCBpbnN0cnVtZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdmlldy5uYW1lID8/IGluc3RydW1lbnQubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHZpZXcuZGVzY3JpcHRpb24gPz8gaW5zdHJ1bWVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgdHlwZTogaW5zdHJ1bWVudC50eXBlLFxuICAgICAgICB1bml0OiBpbnN0cnVtZW50LnVuaXQsXG4gICAgICAgIHZhbHVlVHlwZTogaW5zdHJ1bWVudC52YWx1ZVR5cGUsXG4gICAgICAgIGFkdmljZTogaW5zdHJ1bWVudC5hZHZpY2UsXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3JXaXRoVmlldyA9IGNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yV2l0aFZpZXc7XG5mdW5jdGlvbiBpc0Rlc2NyaXB0b3JDb21wYXRpYmxlV2l0aChkZXNjcmlwdG9yLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICAvLyBOYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmdzLlxuICAgIHJldHVybiAoKDAsIHV0aWxzXzEuZXF1YWxzQ2FzZUluc2Vuc2l0aXZlKShkZXNjcmlwdG9yLm5hbWUsIG90aGVyRGVzY3JpcHRvci5uYW1lKSAmJlxuICAgICAgICBkZXNjcmlwdG9yLnVuaXQgPT09IG90aGVyRGVzY3JpcHRvci51bml0ICYmXG4gICAgICAgIGRlc2NyaXB0b3IudHlwZSA9PT0gb3RoZXJEZXNjcmlwdG9yLnR5cGUgJiZcbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZVR5cGUgPT09IG90aGVyRGVzY3JpcHRvci52YWx1ZVR5cGUpO1xufVxuZXhwb3J0cy5pc0Rlc2NyaXB0b3JDb21wYXRpYmxlV2l0aCA9IGlzRGVzY3JpcHRvckNvbXBhdGlibGVXaXRoO1xuLy8gQVNDSUkgc3RyaW5nIHdpdGggYSBsZW5ndGggbm8gZ3JlYXRlciB0aGFuIDI1NSBjaGFyYWN0ZXJzLlxuLy8gTkI6IHRoZSBmaXJzdCBjaGFyYWN0ZXIgY291bnRlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIHJlc3QuXG5jb25zdCBOQU1FX1JFR0VYUCA9IC9eW2Etel1bYS16MC05Xy5cXC0vXXswLDI1NH0kL2k7XG5mdW5jdGlvbiBpc1ZhbGlkTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUubWF0Y2goTkFNRV9SRUdFWFApICE9IG51bGw7XG59XG5leHBvcnRzLmlzVmFsaWROYW1lID0gaXNWYWxpZE5hbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnN0cnVtZW50RGVzY3JpcHRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNPYnNlcnZhYmxlSW5zdHJ1bWVudCA9IGV4cG9ydHMuT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJJbnN0cnVtZW50ID0gZXhwb3J0cy5PYnNlcnZhYmxlR2F1Z2VJbnN0cnVtZW50ID0gZXhwb3J0cy5PYnNlcnZhYmxlQ291bnRlckluc3RydW1lbnQgPSBleHBvcnRzLk9ic2VydmFibGVJbnN0cnVtZW50ID0gZXhwb3J0cy5IaXN0b2dyYW1JbnN0cnVtZW50ID0gZXhwb3J0cy5HYXVnZUluc3RydW1lbnQgPSBleHBvcnRzLkNvdW50ZXJJbnN0cnVtZW50ID0gZXhwb3J0cy5VcERvd25Db3VudGVySW5zdHJ1bWVudCA9IGV4cG9ydHMuU3luY0luc3RydW1lbnQgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNsYXNzIFN5bmNJbnN0cnVtZW50IHtcbiAgICBfd3JpdGFibGVNZXRyaWNTdG9yYWdlO1xuICAgIF9kZXNjcmlwdG9yO1xuICAgIGNvbnN0cnVjdG9yKF93cml0YWJsZU1ldHJpY1N0b3JhZ2UsIF9kZXNjcmlwdG9yKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlTWV0cmljU3RvcmFnZSA9IF93cml0YWJsZU1ldHJpY1N0b3JhZ2U7XG4gICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgPSBfZGVzY3JpcHRvcjtcbiAgICB9XG4gICAgX3JlY29yZCh2YWx1ZSwgYXR0cmlidXRlcyA9IHt9LCBjb250ZXh0ID0gYXBpXzEuY29udGV4dC5hY3RpdmUoKSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBub24tbnVtYmVyIHZhbHVlIHByb3ZpZGVkIHRvIG1ldHJpYyAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Rlc2NyaXB0b3IudmFsdWVUeXBlID09PSBhcGlfMS5WYWx1ZVR5cGUuSU5UICYmXG4gICAgICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgSU5UIHZhbHVlIHR5cGUgY2Fubm90IGFjY2VwdCBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZvciAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX0sIGlnbm9yaW5nIHRoZSBmcmFjdGlvbmFsIGRpZ2l0cy5gKTtcbiAgICAgICAgICAgIHZhbHVlID0gTWF0aC50cnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICAvLyBpZ25vcmUgbm9uLWZpbml0ZSB2YWx1ZXMuXG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlTWV0cmljU3RvcmFnZS5yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGNvbnRleHQsICgwLCBjb3JlXzEubWlsbGlzVG9IclRpbWUpKERhdGUubm93KCkpKTtcbiAgICB9XG59XG5leHBvcnRzLlN5bmNJbnN0cnVtZW50ID0gU3luY0luc3RydW1lbnQ7XG4vKipcbiAqIFRoZSBjbGFzcyBpbXBsZW1lbnRzIHtAbGluayBVcERvd25Db3VudGVyfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIFVwRG93bkNvdW50ZXJJbnN0cnVtZW50IGV4dGVuZHMgU3luY0luc3RydW1lbnQge1xuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCB2YWx1ZSBvZiBjb3VudGVyIGJ5IHRoZSBpbnB1dC4gSW5wdXRzIG1heSBiZSBuZWdhdGl2ZS5cbiAgICAgKi9cbiAgICBhZGQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCkge1xuICAgICAgICB0aGlzLl9yZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGN0eCk7XG4gICAgfVxufVxuZXhwb3J0cy5VcERvd25Db3VudGVySW5zdHJ1bWVudCA9IFVwRG93bkNvdW50ZXJJbnN0cnVtZW50O1xuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgQ291bnRlcn0gaW50ZXJmYWNlLlxuICovXG5jbGFzcyBDb3VudGVySW5zdHJ1bWVudCBleHRlbmRzIFN5bmNJbnN0cnVtZW50IHtcbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgdmFsdWUgb2YgY291bnRlciBieSB0aGUgaW5wdXQuIElucHV0cyBtYXkgbm90IGJlIG5lZ2F0aXZlLlxuICAgICAqL1xuICAgIGFkZCh2YWx1ZSwgYXR0cmlidXRlcywgY3R4KSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgbmVnYXRpdmUgdmFsdWUgcHJvdmlkZWQgdG8gY291bnRlciAke3RoaXMuX2Rlc2NyaXB0b3IubmFtZX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ291bnRlckluc3RydW1lbnQgPSBDb3VudGVySW5zdHJ1bWVudDtcbi8qKlxuICogVGhlIGNsYXNzIGltcGxlbWVudHMge0BsaW5rIEdhdWdlfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIEdhdWdlSW5zdHJ1bWVudCBleHRlbmRzIFN5bmNJbnN0cnVtZW50IHtcbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIGEgbWVhc3VyZW1lbnQuXG4gICAgICovXG4gICAgcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpIHtcbiAgICAgICAgdGhpcy5fcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpO1xuICAgIH1cbn1cbmV4cG9ydHMuR2F1Z2VJbnN0cnVtZW50ID0gR2F1Z2VJbnN0cnVtZW50O1xuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgSGlzdG9ncmFtfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIEhpc3RvZ3JhbUluc3RydW1lbnQgZXh0ZW5kcyBTeW5jSW5zdHJ1bWVudCB7XG4gICAgLyoqXG4gICAgICogUmVjb3JkcyBhIG1lYXN1cmVtZW50LiBWYWx1ZSBvZiB0aGUgbWVhc3VyZW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUuXG4gICAgICovXG4gICAgcmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjdHgpIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBuZWdhdGl2ZSB2YWx1ZSBwcm92aWRlZCB0byBoaXN0b2dyYW0gJHt0aGlzLl9kZXNjcmlwdG9yLm5hbWV9OiAke3ZhbHVlfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY3R4KTtcbiAgICB9XG59XG5leHBvcnRzLkhpc3RvZ3JhbUluc3RydW1lbnQgPSBIaXN0b2dyYW1JbnN0cnVtZW50O1xuY2xhc3MgT2JzZXJ2YWJsZUluc3RydW1lbnQge1xuICAgIF9vYnNlcnZhYmxlUmVnaXN0cnk7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9tZXRyaWNTdG9yYWdlcztcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX2Rlc2NyaXB0b3I7XG4gICAgY29uc3RydWN0b3IoZGVzY3JpcHRvciwgbWV0cmljU3RvcmFnZXMsIF9vYnNlcnZhYmxlUmVnaXN0cnkpIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVJlZ2lzdHJ5ID0gX29ic2VydmFibGVSZWdpc3RyeTtcbiAgICAgICAgdGhpcy5fZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX21ldHJpY1N0b3JhZ2VzID0gbWV0cmljU3RvcmFnZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzZWUge09ic2VydmFibGUuYWRkQ2FsbGJhY2t9XG4gICAgICovXG4gICAgYWRkQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVJlZ2lzdHJ5LmFkZENhbGxiYWNrKGNhbGxiYWNrLCB0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHNlZSB7T2JzZXJ2YWJsZS5yZW1vdmVDYWxsYmFja31cbiAgICAgKi9cbiAgICByZW1vdmVDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlUmVnaXN0cnkucmVtb3ZlQ2FsbGJhY2soY2FsbGJhY2ssIHRoaXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuT2JzZXJ2YWJsZUluc3RydW1lbnQgPSBPYnNlcnZhYmxlSW5zdHJ1bWVudDtcbmNsYXNzIE9ic2VydmFibGVDb3VudGVySW5zdHJ1bWVudCBleHRlbmRzIE9ic2VydmFibGVJbnN0cnVtZW50IHtcbn1cbmV4cG9ydHMuT2JzZXJ2YWJsZUNvdW50ZXJJbnN0cnVtZW50ID0gT2JzZXJ2YWJsZUNvdW50ZXJJbnN0cnVtZW50O1xuY2xhc3MgT2JzZXJ2YWJsZUdhdWdlSW5zdHJ1bWVudCBleHRlbmRzIE9ic2VydmFibGVJbnN0cnVtZW50IHtcbn1cbmV4cG9ydHMuT2JzZXJ2YWJsZUdhdWdlSW5zdHJ1bWVudCA9IE9ic2VydmFibGVHYXVnZUluc3RydW1lbnQ7XG5jbGFzcyBPYnNlcnZhYmxlVXBEb3duQ291bnRlckluc3RydW1lbnQgZXh0ZW5kcyBPYnNlcnZhYmxlSW5zdHJ1bWVudCB7XG59XG5leHBvcnRzLk9ic2VydmFibGVVcERvd25Db3VudGVySW5zdHJ1bWVudCA9IE9ic2VydmFibGVVcERvd25Db3VudGVySW5zdHJ1bWVudDtcbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZUluc3RydW1lbnQoaXQpIHtcbiAgICByZXR1cm4gaXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlSW5zdHJ1bWVudDtcbn1cbmV4cG9ydHMuaXNPYnNlcnZhYmxlSW5zdHJ1bWVudCA9IGlzT2JzZXJ2YWJsZUluc3RydW1lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnN0cnVtZW50cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0ZXIgPSB2b2lkIDA7XG5jb25zdCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xID0gcmVxdWlyZShcIi4vSW5zdHJ1bWVudERlc2NyaXB0b3JcIik7XG5jb25zdCBJbnN0cnVtZW50c18xID0gcmVxdWlyZShcIi4vSW5zdHJ1bWVudHNcIik7XG5jb25zdCBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvTWV0cmljRGF0YVwiKTtcbi8qKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgSU1ldGVyfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIE1ldGVyIHtcbiAgICBfbWV0ZXJTaGFyZWRTdGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihfbWV0ZXJTaGFyZWRTdGF0ZSkge1xuICAgICAgICB0aGlzLl9tZXRlclNoYXJlZFN0YXRlID0gX21ldGVyU2hhcmVkU3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBHYXVnZX0gaW5zdHJ1bWVudC5cbiAgICAgKi9cbiAgICBjcmVhdGVHYXVnZShuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikobmFtZSwgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkdBVUdFLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IEluc3RydW1lbnRzXzEuR2F1Z2VJbnN0cnVtZW50KHN0b3JhZ2UsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB7QGxpbmsgSGlzdG9ncmFtfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZUhpc3RvZ3JhbShuYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSAoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5jcmVhdGVJbnN0cnVtZW50RGVzY3JpcHRvcikobmFtZSwgTWV0cmljRGF0YV8xLkluc3RydW1lbnRUeXBlLkhJU1RPR1JBTSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVtZW50c18xLkhpc3RvZ3JhbUluc3RydW1lbnQoc3RvcmFnZSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBDb3VudGVyfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZUNvdW50ZXIobmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IpKG5hbWUsIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5DT1VOVEVSLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IEluc3RydW1lbnRzXzEuQ291bnRlckluc3RydW1lbnQoc3RvcmFnZSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHtAbGluayBVcERvd25Db3VudGVyfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZVVwRG93bkNvdW50ZXIobmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IpKG5hbWUsIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5VUF9ET1dOX0NPVU5URVIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5yZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgSW5zdHJ1bWVudHNfMS5VcERvd25Db3VudGVySW5zdHJ1bWVudChzdG9yYWdlLCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIE9ic2VydmFibGVHYXVnZX0gaW5zdHJ1bWVudC5cbiAgICAgKi9cbiAgICBjcmVhdGVPYnNlcnZhYmxlR2F1Z2UobmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IpKG5hbWUsIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSB0aGlzLl9tZXRlclNoYXJlZFN0YXRlLnJlZ2lzdGVyQXN5bmNNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IEluc3RydW1lbnRzXzEuT2JzZXJ2YWJsZUdhdWdlSW5zdHJ1bWVudChkZXNjcmlwdG9yLCBzdG9yYWdlcywgdGhpcy5fbWV0ZXJTaGFyZWRTdGF0ZS5vYnNlcnZhYmxlUmVnaXN0cnkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB7QGxpbmsgT2JzZXJ2YWJsZUNvdW50ZXJ9IGluc3RydW1lbnQuXG4gICAgICovXG4gICAgY3JlYXRlT2JzZXJ2YWJsZUNvdW50ZXIobmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IpKG5hbWUsIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0NPVU5URVIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJBc3luY01ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgSW5zdHJ1bWVudHNfMS5PYnNlcnZhYmxlQ291bnRlckluc3RydW1lbnQoZGVzY3JpcHRvciwgc3RvcmFnZXMsIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUub2JzZXJ2YWJsZVJlZ2lzdHJ5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEge0BsaW5rIE9ic2VydmFibGVVcERvd25Db3VudGVyfSBpbnN0cnVtZW50LlxuICAgICAqL1xuICAgIGNyZWF0ZU9ic2VydmFibGVVcERvd25Db3VudGVyKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9ICgwLCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yKShuYW1lLCBNZXRyaWNEYXRhXzEuSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVIsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX21ldGVyU2hhcmVkU3RhdGUucmVnaXN0ZXJBc3luY01ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBuZXcgSW5zdHJ1bWVudHNfMS5PYnNlcnZhYmxlVXBEb3duQ291bnRlckluc3RydW1lbnQoZGVzY3JpcHRvciwgc3RvcmFnZXMsIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUub2JzZXJ2YWJsZVJlZ2lzdHJ5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHNlZSB7QGxpbmsgTWV0ZXIuYWRkQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2t9XG4gICAgICovXG4gICAgYWRkQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2soY2FsbGJhY2ssIG9ic2VydmFibGVzKSB7XG4gICAgICAgIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUub2JzZXJ2YWJsZVJlZ2lzdHJ5LmFkZEJhdGNoQ2FsbGJhY2soY2FsbGJhY2ssIG9ic2VydmFibGVzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHNlZSB7QGxpbmsgTWV0ZXIucmVtb3ZlQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2t9XG4gICAgICovXG4gICAgcmVtb3ZlQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2soY2FsbGJhY2ssIG9ic2VydmFibGVzKSB7XG4gICAgICAgIHRoaXMuX21ldGVyU2hhcmVkU3RhdGUub2JzZXJ2YWJsZVJlZ2lzdHJ5LnJlbW92ZUJhdGNoQ2FsbGJhY2soY2FsbGJhY2ssIG9ic2VydmFibGVzKTtcbiAgICB9XG59XG5leHBvcnRzLk1ldGVyID0gTWV0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0cmljU3RvcmFnZSA9IHZvaWQgMDtcbmNvbnN0IEluc3RydW1lbnREZXNjcmlwdG9yXzEgPSByZXF1aXJlKFwiLi4vSW5zdHJ1bWVudERlc2NyaXB0b3JcIik7XG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZS5cbiAqXG4gKiBSZXByZXNlbnRzIGEgc3RvcmFnZSBmcm9tIHdoaWNoIHdlIGNhbiBjb2xsZWN0IG1ldHJpY3MuXG4gKi9cbmNsYXNzIE1ldHJpY1N0b3JhZ2Uge1xuICAgIF9pbnN0cnVtZW50RGVzY3JpcHRvcjtcbiAgICBjb25zdHJ1Y3RvcihfaW5zdHJ1bWVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IgPSBfaW5zdHJ1bWVudERlc2NyaXB0b3I7XG4gICAgfVxuICAgIGdldEluc3RydW1lbnREZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3I7XG4gICAgfVxuICAgIHVwZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yID0gKDAsIEluc3RydW1lbnREZXNjcmlwdG9yXzEuY3JlYXRlSW5zdHJ1bWVudERlc2NyaXB0b3IpKHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yLm5hbWUsIHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yLnR5cGUsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHZhbHVlVHlwZTogdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IudmFsdWVUeXBlLFxuICAgICAgICAgICAgdW5pdDogdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IudW5pdCxcbiAgICAgICAgICAgIGFkdmljZTogdGhpcy5faW5zdHJ1bWVudERlc2NyaXB0b3IuYWR2aWNlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLk1ldHJpY1N0b3JhZ2UgPSBNZXRyaWNTdG9yYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWV0cmljU3RvcmFnZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXR0cmlidXRlSGFzaE1hcCA9IGV4cG9ydHMuSGFzaE1hcCA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jbGFzcyBIYXNoTWFwIHtcbiAgICBfaGFzaDtcbiAgICBfdmFsdWVNYXAgPSBuZXcgTWFwKCk7XG4gICAgX2tleU1hcCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdHJ1Y3RvcihfaGFzaCkge1xuICAgICAgICB0aGlzLl9oYXNoID0gX2hhc2g7XG4gICAgfVxuICAgIGdldChrZXksIGhhc2hDb2RlKSB7XG4gICAgICAgIGhhc2hDb2RlID8/PSB0aGlzLl9oYXNoKGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZU1hcC5nZXQoaGFzaENvZGUpO1xuICAgIH1cbiAgICBnZXRPckRlZmF1bHQoa2V5LCBkZWZhdWx0RmFjdG9yeSkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5faGFzaChrZXkpO1xuICAgICAgICBpZiAodGhpcy5fdmFsdWVNYXAuaGFzKGhhc2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVNYXAuZ2V0KGhhc2gpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbCA9IGRlZmF1bHRGYWN0b3J5KCk7XG4gICAgICAgIGlmICghdGhpcy5fa2V5TWFwLmhhcyhoYXNoKSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5TWFwLnNldChoYXNoLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlTWFwLnNldChoYXNoLCB2YWwpO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSwgaGFzaENvZGUpIHtcbiAgICAgICAgaGFzaENvZGUgPz89IHRoaXMuX2hhc2goa2V5KTtcbiAgICAgICAgaWYgKCF0aGlzLl9rZXlNYXAuaGFzKGhhc2hDb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5TWFwLnNldChoYXNoQ29kZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZU1hcC5zZXQoaGFzaENvZGUsIHZhbHVlKTtcbiAgICB9XG4gICAgaGFzKGtleSwgaGFzaENvZGUpIHtcbiAgICAgICAgaGFzaENvZGUgPz89IHRoaXMuX2hhc2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlTWFwLmhhcyhoYXNoQ29kZSk7XG4gICAgfVxuICAgICprZXlzKCkge1xuICAgICAgICBjb25zdCBrZXlJdGVyYXRvciA9IHRoaXMuX2tleU1hcC5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBuZXh0ID0ga2V5SXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAobmV4dC5kb25lICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB5aWVsZCBbbmV4dC52YWx1ZVsxXSwgbmV4dC52YWx1ZVswXV07XG4gICAgICAgICAgICBuZXh0ID0ga2V5SXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICplbnRyaWVzKCkge1xuICAgICAgICBjb25zdCB2YWx1ZUl0ZXJhdG9yID0gdGhpcy5fdmFsdWVNYXAuZW50cmllcygpO1xuICAgICAgICBsZXQgbmV4dCA9IHZhbHVlSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAobmV4dC5kb25lICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBuZXh0LnZhbHVlWzBdIGhlcmUgY2FuIG5vdCBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICB5aWVsZCBbdGhpcy5fa2V5TWFwLmdldChuZXh0LnZhbHVlWzBdKSwgbmV4dC52YWx1ZVsxXSwgbmV4dC52YWx1ZVswXV07XG4gICAgICAgICAgICBuZXh0ID0gdmFsdWVJdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZU1hcC5zaXplO1xuICAgIH1cbn1cbmV4cG9ydHMuSGFzaE1hcCA9IEhhc2hNYXA7XG5jbGFzcyBBdHRyaWJ1dGVIYXNoTWFwIGV4dGVuZHMgSGFzaE1hcCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHV0aWxzXzEuaGFzaEF0dHJpYnV0ZXMpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXR0cmlidXRlSGFzaE1hcCA9IEF0dHJpYnV0ZUhhc2hNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1IYXNoTWFwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5EZWx0YU1ldHJpY1Byb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBIYXNoTWFwXzEgPSByZXF1aXJlKFwiLi9IYXNoTWFwXCIpO1xuLyoqXG4gKiBJbnRlcm5hbCBpbnRlcmZhY2UuXG4gKlxuICogQWxsb3dzIHN5bmNocm9ub3VzIGNvbGxlY3Rpb24gb2YgbWV0cmljcy4gVGhpcyBwcm9jZXNzb3Igc2hvdWxkIGFsbG93XG4gKiBhbGxvY2F0aW9uIG9mIG5ldyBhZ2dyZWdhdGlvbiBjZWxscyBmb3IgbWV0cmljcyBhbmQgY29udmVydCBjdW11bGF0aXZlXG4gKiByZWNvcmRpbmcgdG8gZGVsdGEgZGF0YSBwb2ludHMuXG4gKi9cbmNsYXNzIERlbHRhTWV0cmljUHJvY2Vzc29yIHtcbiAgICBfYWdncmVnYXRvcjtcbiAgICBfYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2UgPSBuZXcgSGFzaE1hcF8xLkF0dHJpYnV0ZUhhc2hNYXAoKTtcbiAgICAvLyBUT0RPOiBmaW5kIGEgcmVhc29uYWJsZSBtZWFuIHRvIGNsZWFuIHRoZSBtZW1vO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vcHVsbC8yMjA4XG4gICAgX2N1bXVsYXRpdmVNZW1vU3RvcmFnZSA9IG5ldyBIYXNoTWFwXzEuQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgIF9jYXJkaW5hbGl0eUxpbWl0O1xuICAgIF9vdmVyZmxvd0F0dHJpYnV0ZXMgPSB7ICdvdGVsLm1ldHJpYy5vdmVyZmxvdyc6IHRydWUgfTtcbiAgICBfb3ZlcmZsb3dIYXNoQ29kZTtcbiAgICBjb25zdHJ1Y3RvcihfYWdncmVnYXRvciwgYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3IgPSBfYWdncmVnYXRvcjtcbiAgICAgICAgdGhpcy5fY2FyZGluYWxpdHlMaW1pdCA9IChhZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQgPz8gMjAwMCkgLSAxO1xuICAgICAgICB0aGlzLl9vdmVyZmxvd0hhc2hDb2RlID0gKDAsIHV0aWxzXzEuaGFzaEF0dHJpYnV0ZXMpKHRoaXMuX292ZXJmbG93QXR0cmlidXRlcyk7XG4gICAgfVxuICAgIHJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgX2NvbnRleHQsIGNvbGxlY3Rpb25UaW1lKSB7XG4gICAgICAgIGxldCBhY2N1bXVsYXRpb24gPSB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5nZXQoYXR0cmlidXRlcyk7XG4gICAgICAgIGlmICghYWNjdW11bGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2Uuc2l6ZSA+PSB0aGlzLl9jYXJkaW5hbGl0eUxpbWl0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3dBY2N1bXVsYXRpb24gPSB0aGlzLl9hY3RpdmVDb2xsZWN0aW9uU3RvcmFnZS5nZXRPckRlZmF1bHQodGhpcy5fb3ZlcmZsb3dBdHRyaWJ1dGVzLCAoKSA9PiB0aGlzLl9hZ2dyZWdhdG9yLmNyZWF0ZUFjY3VtdWxhdGlvbihjb2xsZWN0aW9uVGltZSkpO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93QWNjdW11bGF0aW9uPy5yZWNvcmQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY3VtdWxhdGlvbiA9IHRoaXMuX2FnZ3JlZ2F0b3IuY3JlYXRlQWNjdW11bGF0aW9uKGNvbGxlY3Rpb25UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLnNldChhdHRyaWJ1dGVzLCBhY2N1bXVsYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGFjY3VtdWxhdGlvbj8ucmVjb3JkKHZhbHVlKTtcbiAgICB9XG4gICAgYmF0Y2hDdW11bGF0ZShtZWFzdXJlbWVudHMsIGNvbGxlY3Rpb25UaW1lKSB7XG4gICAgICAgIEFycmF5LmZyb20obWVhc3VyZW1lbnRzLmVudHJpZXMoKSkuZm9yRWFjaCgoW2F0dHJpYnV0ZXMsIHZhbHVlLCBoYXNoQ29kZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjY3VtdWxhdGlvbiA9IHRoaXMuX2FnZ3JlZ2F0b3IuY3JlYXRlQWNjdW11bGF0aW9uKGNvbGxlY3Rpb25UaW1lKTtcbiAgICAgICAgICAgIGFjY3VtdWxhdGlvbj8ucmVjb3JkKHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkZWx0YSA9IGFjY3VtdWxhdGlvbjtcbiAgICAgICAgICAgIC8vIERpZmYgd2l0aCByZWNvcmRlZCBjdW11bGF0aXZlIG1lbW8uXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VtdWxhdGl2ZU1lbW9TdG9yYWdlLmhhcyhhdHRyaWJ1dGVzLCBoYXNoQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBoYXMoKSByZXR1cm5lZCB0cnVlLCBwcmV2aW91cyBpcyBwcmVzZW50LlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLl9jdW11bGF0aXZlTWVtb1N0b3JhZ2UuZ2V0KGF0dHJpYnV0ZXMsIGhhc2hDb2RlKTtcbiAgICAgICAgICAgICAgICBkZWx0YSA9IHRoaXMuX2FnZ3JlZ2F0b3IuZGlmZihwcmV2aW91cywgYWNjdW11bGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYXJkaW5hbGl0eSBsaW1pdCBpcyByZWFjaGVkLCB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdW11bGF0aXZlTWVtb1N0b3JhZ2Uuc2l6ZSA+PSB0aGlzLl9jYXJkaW5hbGl0eUxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB0aGlzLl9vdmVyZmxvd0F0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlID0gdGhpcy5fb3ZlcmZsb3dIYXNoQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1bXVsYXRpdmVNZW1vU3RvcmFnZS5oYXMoYXR0cmlidXRlcywgaGFzaENvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXMoKSByZXR1cm5lZCB0cnVlLCBwcmV2aW91cyBpcyBwcmVzZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fY3VtdWxhdGl2ZU1lbW9TdG9yYWdlLmdldChhdHRyaWJ1dGVzLCBoYXNoQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IHRoaXMuX2FnZ3JlZ2F0b3IuZGlmZihwcmV2aW91cywgYWNjdW11bGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE1lcmdlIHdpdGggdW5jb2xsZWN0ZWQgYWN0aXZlIGRlbHRhLlxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLmhhcyhhdHRyaWJ1dGVzLCBoYXNoQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBoYXMoKSByZXR1cm5lZCB0cnVlLCBhY3RpdmUgaXMgcHJlc2VudC5cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlLmdldChhdHRyaWJ1dGVzLCBoYXNoQ29kZSk7XG4gICAgICAgICAgICAgICAgZGVsdGEgPSB0aGlzLl9hZ2dyZWdhdG9yLm1lcmdlKGFjdGl2ZSwgZGVsdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCByZWNvcmQgYW5kIHRoZSBkZWx0YSByZWNvcmQuXG4gICAgICAgICAgICB0aGlzLl9jdW11bGF0aXZlTWVtb1N0b3JhZ2Uuc2V0KGF0dHJpYnV0ZXMsIGFjY3VtdWxhdGlvbiwgaGFzaENvZGUpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2Uuc2V0KGF0dHJpYnV0ZXMsIGRlbHRhLCBoYXNoQ29kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBkZWx0YSBtZXRyaWNzLiBTdGFydCB0aW1lIGlzIHRoZSB3aGVuIGZpcnN0XG4gICAgICogdGltZSBldmVudCBjb2xsZWN0ZWQuXG4gICAgICovXG4gICAgY29sbGVjdCgpIHtcbiAgICAgICAgY29uc3QgdW5yZXBvcnRlZERlbHRhID0gdGhpcy5fYWN0aXZlQ29sbGVjdGlvblN0b3JhZ2U7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUNvbGxlY3Rpb25TdG9yYWdlID0gbmV3IEhhc2hNYXBfMS5BdHRyaWJ1dGVIYXNoTWFwKCk7XG4gICAgICAgIHJldHVybiB1bnJlcG9ydGVkRGVsdGE7XG4gICAgfVxufVxuZXhwb3J0cy5EZWx0YU1ldHJpY1Byb2Nlc3NvciA9IERlbHRhTWV0cmljUHJvY2Vzc29yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGVsdGFNZXRyaWNQcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRlbXBvcmFsTWV0cmljUHJvY2Vzc29yID0gdm9pZCAwO1xuY29uc3QgQWdncmVnYXRpb25UZW1wb3JhbGl0eV8xID0gcmVxdWlyZShcIi4uL2V4cG9ydC9BZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpO1xuY29uc3QgSGFzaE1hcF8xID0gcmVxdWlyZShcIi4vSGFzaE1hcFwiKTtcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICpcbiAqIFByb3ZpZGVzIHVuaXF1ZSByZXBvcnRpbmcgZm9yIGVhY2ggY29sbGVjdG9yLiBBbGxvd3Mgc3luY2hyb25vdXMgY29sbGVjdGlvblxuICogb2YgbWV0cmljcyBhbmQgcmVwb3J0cyBnaXZlbiB0ZW1wb3JhbGl0eSB2YWx1ZXMuXG4gKi9cbmNsYXNzIFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yIHtcbiAgICBfYWdncmVnYXRvcjtcbiAgICBfdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgX3JlcG9ydEhpc3RvcnkgPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3IoX2FnZ3JlZ2F0b3IsIGNvbGxlY3RvckhhbmRsZXMpIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvciA9IF9hZ2dyZWdhdG9yO1xuICAgICAgICBjb2xsZWN0b3JIYW5kbGVzLmZvckVhY2goaGFuZGxlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VucmVwb3J0ZWRBY2N1bXVsYXRpb25zLnNldChoYW5kbGUsIFtdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyB0aGUge0BsaW5rIE1ldHJpY0RhdGF9IHN0cmVhbXMgdG8gcmVwb3J0IGFnYWluc3QgYSBzcGVjaWZpYyBNZXRyaWNDb2xsZWN0b3IuXG4gICAgICogQHBhcmFtIGNvbGxlY3RvciBUaGUgaW5mb3JtYXRpb24gb2YgdGhlIE1ldHJpY0NvbGxlY3Rvci5cbiAgICAgKiBAcGFyYW0gY29sbGVjdG9ycyBUaGUgcmVnaXN0ZXJlZCBjb2xsZWN0b3JzLlxuICAgICAqIEBwYXJhbSBpbnN0cnVtZW50RGVzY3JpcHRvciBUaGUgaW5zdHJ1bWVudGF0aW9uIGRlc2NyaXB0b3IgdGhhdCB0aGVzZSBtZXRyaWNzIGdlbmVyYXRlZCB3aXRoLlxuICAgICAqIEBwYXJhbSBjdXJyZW50QWNjdW11bGF0aW9ucyBUaGUgY3VycmVudCBhY2N1bXVsYXRpb24gb2YgbWV0cmljIGRhdGEgZnJvbSBpbnN0cnVtZW50cy5cbiAgICAgKiBAcGFyYW0gY29sbGVjdGlvblRpbWUgVGhlIGN1cnJlbnQgY29sbGVjdGlvbiB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgVGhlIHtAbGluayBNZXRyaWNEYXRhfSBwb2ludHMgb3IgYG51bGxgLlxuICAgICAqL1xuICAgIGJ1aWxkTWV0cmljcyhjb2xsZWN0b3IsIGluc3RydW1lbnREZXNjcmlwdG9yLCBjdXJyZW50QWNjdW11bGF0aW9ucywgY29sbGVjdGlvblRpbWUpIHtcbiAgICAgICAgdGhpcy5fc3Rhc2hBY2N1bXVsYXRpb25zKGN1cnJlbnRBY2N1bXVsYXRpb25zKTtcbiAgICAgICAgY29uc3QgdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMgPSB0aGlzLl9nZXRNZXJnZWRVbnJlcG9ydGVkQWNjdW11bGF0aW9ucyhjb2xsZWN0b3IpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnM7XG4gICAgICAgIGxldCBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAvLyBDaGVjayBvdXIgbGFzdCByZXBvcnQgdGltZS5cbiAgICAgICAgaWYgKHRoaXMuX3JlcG9ydEhpc3RvcnkuaGFzKGNvbGxlY3RvcikpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5fcmVwb3J0SGlzdG9yeS5nZXQoY29sbGVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RDb2xsZWN0aW9uVGltZSA9IGxhc3QuY29sbGVjdGlvblRpbWU7XG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gbGFzdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5O1xuICAgICAgICAgICAgLy8gVXNlIGFnZ3JlZ2F0aW9uIHRlbXBvcmFsaXR5ICsgaW5zdHJ1bWVudCB0byBkZXRlcm1pbmUgaWYgd2UgZG8gYSBtZXJnZSBvciBhIGRpZmYgb2ZcbiAgICAgICAgICAgIC8vIHByZXZpb3VzLiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgZm91ciBzY2VuYXJpb3M6XG4gICAgICAgICAgICAvLyAxLiBDdW11bGF0aXZlIEFnZ3JlZ2F0aW9uICh0ZW1wb3JhbGl0eSkgKyBEZWx0YSByZWNvcmRpbmcgKHN5bmMgaW5zdHJ1bWVudCkuXG4gICAgICAgICAgICAvLyAgICBIZXJlIHdlIG1lcmdlIHdpdGggb3VyIGxhc3QgcmVjb3JkIHRvIGdldCBhIGN1bXVsYXRpdmUgYWdncmVnYXRpb24uXG4gICAgICAgICAgICAvLyAyLiBDdW11bGF0aXZlIEFnZ3JlZ2F0aW9uICsgQ3VtdWxhdGl2ZSByZWNvcmRpbmcgKGFzeW5jIGluc3RydW1lbnQpLlxuICAgICAgICAgICAgLy8gICAgQ3VtdWxhdGl2ZSByZWNvcmRzIGFyZSBjb252ZXJ0ZWQgdG8gZGVsdGEgcmVjb3JkaW5nIHdpdGggRGVsdGFNZXRyaWNQcm9jZXNzb3IuXG4gICAgICAgICAgICAvLyAgICBIZXJlIHdlIG1lcmdlIHdpdGggb3VyIGxhc3QgcmVjb3JkIHRvIGdldCBhIGN1bXVsYXRpdmUgYWdncmVnYXRpb24uXG4gICAgICAgICAgICAvLyAzLiBEZWx0YSBBZ2dyZWdhdGlvbiArIERlbHRhIHJlY29yZGluZ1xuICAgICAgICAgICAgLy8gICAgQ2FsaWJyYXRlIHRoZSBzdGFydFRpbWUgb2YgbWV0cmljIHN0cmVhbXMgdG8gYmUgdGhlIHJlYWRlcidzIGxhc3RDb2xsZWN0aW9uVGltZS5cbiAgICAgICAgICAgIC8vIDQuIERlbHRhIEFnZ3JlZ2F0aW9uICsgQ3VtdWxhdGl2ZSByZWNvcmRpbmcuXG4gICAgICAgICAgICAvLyAgICBDdW11bGF0aXZlIHJlY29yZHMgYXJlIGNvbnZlcnRlZCB0byBkZWx0YSByZWNvcmRpbmcgd2l0aCBEZWx0YU1ldHJpY1Byb2Nlc3Nvci5cbiAgICAgICAgICAgIC8vICAgIENhbGlicmF0ZSB0aGUgc3RhcnRUaW1lIG9mIG1ldHJpYyBzdHJlYW1zIHRvIGJlIHRoZSByZWFkZXIncyBsYXN0Q29sbGVjdGlvblRpbWUuXG4gICAgICAgICAgICBpZiAoYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9PT0gQWdncmVnYXRpb25UZW1wb3JhbGl0eV8xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuQ1VNVUxBVElWRSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50IGRlbHRhIHJlY29yZGluZyBnZXRzIG1lcmdlZCBpbnRvIHRoZSBwcmV2aW91cyBjdW11bGF0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBuZXh0IGN1bXVsYXRpdmUgcmVjb3JkaW5nLlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yLm1lcmdlKGxhc3QuYWNjdW11bGF0aW9ucywgdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMsIHRoaXMuX2FnZ3JlZ2F0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IuY2FsaWJyYXRlU3RhcnRUaW1lKGxhc3QuYWNjdW11bGF0aW9ucywgdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMsIGxhc3RDb2xsZWN0aW9uVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBDYWxsIGludG8gdXNlciBjb2RlIHRvIHNlbGVjdCBhZ2dyZWdhdGlvbiB0ZW1wb3JhbGl0eSBmb3IgdGhlIGluc3RydW1lbnQuXG4gICAgICAgICAgICBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gY29sbGVjdG9yLnNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudERlc2NyaXB0b3IudHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIGxhc3QgcmVwb3J0ZWQgKGN1bXVsYXRpdmUpIGFjY3VtdWxhdGlvbi5cbiAgICAgICAgdGhpcy5fcmVwb3J0SGlzdG9yeS5zZXQoY29sbGVjdG9yLCB7XG4gICAgICAgICAgICBhY2N1bXVsYXRpb25zOiByZXN1bHQsXG4gICAgICAgICAgICBjb2xsZWN0aW9uVGltZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBhY2N1bXVsYXRpb25SZWNvcmRzID0gQXR0cmlidXRlc01hcFRvQWNjdW11bGF0aW9uUmVjb3JkcyhyZXN1bHQpO1xuICAgICAgICAvLyBkbyBub3QgY29udmVydCB0byBtZXRyaWMgZGF0YSBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbnZlcnQuXG4gICAgICAgIGlmIChhY2N1bXVsYXRpb25SZWNvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRvci50b01ldHJpY0RhdGEoaW5zdHJ1bWVudERlc2NyaXB0b3IsIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIGFjY3VtdWxhdGlvblJlY29yZHMsIFxuICAgICAgICAvKiBlbmRUaW1lICovIGNvbGxlY3Rpb25UaW1lKTtcbiAgICB9XG4gICAgX3N0YXNoQWNjdW11bGF0aW9ucyhjdXJyZW50QWNjdW11bGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRDb2xsZWN0b3JzID0gdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMua2V5cygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3RvciBvZiByZWdpc3RlcmVkQ29sbGVjdG9ycykge1xuICAgICAgICAgICAgbGV0IHN0YXNoID0gdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMuZ2V0KGNvbGxlY3Rvcik7XG4gICAgICAgICAgICBpZiAoc3Rhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXNoID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMuc2V0KGNvbGxlY3Rvciwgc3Rhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Rhc2gucHVzaChjdXJyZW50QWNjdW11bGF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0TWVyZ2VkVW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMoY29sbGVjdG9yKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSGFzaE1hcF8xLkF0dHJpYnV0ZUhhc2hNYXAoKTtcbiAgICAgICAgY29uc3QgdW5yZXBvcnRlZExpc3QgPSB0aGlzLl91bnJlcG9ydGVkQWNjdW11bGF0aW9ucy5nZXQoY29sbGVjdG9yKTtcbiAgICAgICAgdGhpcy5fdW5yZXBvcnRlZEFjY3VtdWxhdGlvbnMuc2V0KGNvbGxlY3RvciwgW10pO1xuICAgICAgICBpZiAodW5yZXBvcnRlZExpc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIHVucmVwb3J0ZWRMaXN0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBUZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvci5tZXJnZShyZXN1bHQsIGl0LCB0aGlzLl9hZ2dyZWdhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2UobGFzdCwgY3VycmVudCwgYWdncmVnYXRvcikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBsYXN0O1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGN1cnJlbnQuZW50cmllcygpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKG5leHQuZG9uZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgcmVjb3JkLCBoYXNoXSA9IG5leHQudmFsdWU7XG4gICAgICAgICAgICBpZiAobGFzdC5oYXMoa2V5LCBoYXNoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RBY2N1bXVsYXRpb24gPSBsYXN0LmdldChrZXksIGhhc2gpO1xuICAgICAgICAgICAgICAgIC8vIGxhc3QuaGFzKCkgcmV0dXJuZWQgdHJ1ZSwgbGFzdEFjY3VtdWxhdGlvbiBpcyBwcmVzZW50LlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjdW11bGF0aW9uID0gYWdncmVnYXRvci5tZXJnZShsYXN0QWNjdW11bGF0aW9uLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBhY2N1bXVsYXRpb24sIGhhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIHJlY29yZCwgaGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGlicmF0ZSB0aGUgcmVwb3J0ZWQgbWV0cmljIHN0cmVhbXMnIHN0YXJ0VGltZSB0byBsYXN0Q29sbGVjdGlvblRpbWUuIExlYXZlc1xuICAgICAqIHRoZSBuZXcgc3RyZWFtIHRvIGJlIHRoZSBpbml0aWFsIG9ic2VydmF0aW9uIHRpbWUgdW5jaGFuZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBjYWxpYnJhdGVTdGFydFRpbWUobGFzdCwgY3VycmVudCwgbGFzdENvbGxlY3Rpb25UaW1lKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgaGFzaF0gb2YgbGFzdC5rZXlzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRBY2N1bXVsYXRpb24gPSBjdXJyZW50LmdldChrZXksIGhhc2gpO1xuICAgICAgICAgICAgY3VycmVudEFjY3VtdWxhdGlvbj8uc2V0U3RhcnRUaW1lKGxhc3RDb2xsZWN0aW9uVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxufVxuZXhwb3J0cy5UZW1wb3JhbE1ldHJpY1Byb2Nlc3NvciA9IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yO1xuLy8gVHlwZVNjcmlwdCBjb21wbGFpbnMgYWJvdXQgY29udmVydGluZyAzIGVsZW1lbnRzIHR1cGxlIHRvIEFjY3VtdWxhdGlvblJlY29yZDxUPi5cbmZ1bmN0aW9uIEF0dHJpYnV0ZXNNYXBUb0FjY3VtdWxhdGlvblJlY29yZHMobWFwKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obWFwLmVudHJpZXMoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXN5bmNNZXRyaWNTdG9yYWdlID0gdm9pZCAwO1xuY29uc3QgTWV0cmljU3RvcmFnZV8xID0gcmVxdWlyZShcIi4vTWV0cmljU3RvcmFnZVwiKTtcbmNvbnN0IERlbHRhTWV0cmljUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9EZWx0YU1ldHJpY1Byb2Nlc3NvclwiKTtcbmNvbnN0IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9UZW1wb3JhbE1ldHJpY1Byb2Nlc3NvclwiKTtcbmNvbnN0IEhhc2hNYXBfMSA9IHJlcXVpcmUoXCIuL0hhc2hNYXBcIik7XG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZS5cbiAqXG4gKiBTdG9yZXMgYW5kIGFnZ3JlZ2F0ZXMge0BsaW5rIE1ldHJpY0RhdGF9IGZvciBhc3luY2hyb25vdXMgaW5zdHJ1bWVudHMuXG4gKi9cbmNsYXNzIEFzeW5jTWV0cmljU3RvcmFnZSBleHRlbmRzIE1ldHJpY1N0b3JhZ2VfMS5NZXRyaWNTdG9yYWdlIHtcbiAgICBfYXR0cmlidXRlc1Byb2Nlc3NvcjtcbiAgICBfYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0O1xuICAgIF9kZWx0YU1ldHJpY1N0b3JhZ2U7XG4gICAgX3RlbXBvcmFsTWV0cmljU3RvcmFnZTtcbiAgICBjb25zdHJ1Y3RvcihfaW5zdHJ1bWVudERlc2NyaXB0b3IsIGFnZ3JlZ2F0b3IsIF9hdHRyaWJ1dGVzUHJvY2Vzc29yLCBjb2xsZWN0b3JIYW5kbGVzLCBfYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KSB7XG4gICAgICAgIHN1cGVyKF9pbnN0cnVtZW50RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNQcm9jZXNzb3IgPSBfYXR0cmlidXRlc1Byb2Nlc3NvcjtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0ID0gX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdDtcbiAgICAgICAgdGhpcy5fZGVsdGFNZXRyaWNTdG9yYWdlID0gbmV3IERlbHRhTWV0cmljUHJvY2Vzc29yXzEuRGVsdGFNZXRyaWNQcm9jZXNzb3IoYWdncmVnYXRvciwgdGhpcy5fYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KTtcbiAgICAgICAgdGhpcy5fdGVtcG9yYWxNZXRyaWNTdG9yYWdlID0gbmV3IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yXzEuVGVtcG9yYWxNZXRyaWNQcm9jZXNzb3IoYWdncmVnYXRvciwgY29sbGVjdG9ySGFuZGxlcyk7XG4gICAgfVxuICAgIHJlY29yZChtZWFzdXJlbWVudHMsIG9ic2VydmF0aW9uVGltZSkge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgSGFzaE1hcF8xLkF0dHJpYnV0ZUhhc2hNYXAoKTtcbiAgICAgICAgQXJyYXkuZnJvbShtZWFzdXJlbWVudHMuZW50cmllcygpKS5mb3JFYWNoKChbYXR0cmlidXRlcywgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzZWQuc2V0KHRoaXMuX2F0dHJpYnV0ZXNQcm9jZXNzb3IucHJvY2VzcyhhdHRyaWJ1dGVzKSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVsdGFNZXRyaWNTdG9yYWdlLmJhdGNoQ3VtdWxhdGUocHJvY2Vzc2VkLCBvYnNlcnZhdGlvblRpbWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0cyB0aGUgbWV0cmljcyBmcm9tIHRoaXMgc3RvcmFnZS4gVGhlIE9ic2VydmFibGVDYWxsYmFjayBpcyBpbnZva2VkXG4gICAgICogZHVyaW5nIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqXG4gICAgICogTm90ZTogVGhpcyBpcyBhIHN0YXRlZnVsIG9wZXJhdGlvbiBhbmQgbWF5IHJlc2V0IGFueSBpbnRlcnZhbC1yZWxhdGVkXG4gICAgICogc3RhdGUgZm9yIHRoZSBNZXRyaWNDb2xsZWN0b3IuXG4gICAgICovXG4gICAgY29sbGVjdChjb2xsZWN0b3IsIGNvbGxlY3Rpb25UaW1lKSB7XG4gICAgICAgIGNvbnN0IGFjY3VtdWxhdGlvbnMgPSB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UuY29sbGVjdCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcG9yYWxNZXRyaWNTdG9yYWdlLmJ1aWxkTWV0cmljcyhjb2xsZWN0b3IsIHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yLCBhY2N1bXVsYXRpb25zLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgfVxufVxuZXhwb3J0cy5Bc3luY01ldHJpY1N0b3JhZ2UgPSBBc3luY01ldHJpY1N0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY01ldHJpY1N0b3JhZ2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZSA9IGV4cG9ydHMuZ2V0RGVzY3JpcHRpb25SZXNvbHV0aW9uUmVjaXBlID0gZXhwb3J0cy5nZXRUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZXhwb3J0cy5nZXRVbml0Q29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZXhwb3J0cy5nZXRWYWx1ZVR5cGVDb25mbGljdFJlc29sdXRpb25SZWNpcGUgPSBleHBvcnRzLmdldEluY29tcGF0aWJpbGl0eURldGFpbHMgPSB2b2lkIDA7XG5mdW5jdGlvbiBnZXRJbmNvbXBhdGliaWxpdHlEZXRhaWxzKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICBsZXQgaW5jb21wYXRpYmlsaXR5ID0gJyc7XG4gICAgaWYgKGV4aXN0aW5nLnVuaXQgIT09IG90aGVyRGVzY3JpcHRvci51bml0KSB7XG4gICAgICAgIGluY29tcGF0aWJpbGl0eSArPSBgXFx0LSBVbml0ICcke2V4aXN0aW5nLnVuaXR9JyBkb2VzIG5vdCBtYXRjaCAnJHtvdGhlckRlc2NyaXB0b3IudW5pdH0nXFxuYDtcbiAgICB9XG4gICAgaWYgKGV4aXN0aW5nLnR5cGUgIT09IG90aGVyRGVzY3JpcHRvci50eXBlKSB7XG4gICAgICAgIGluY29tcGF0aWJpbGl0eSArPSBgXFx0LSBUeXBlICcke2V4aXN0aW5nLnR5cGV9JyBkb2VzIG5vdCBtYXRjaCAnJHtvdGhlckRlc2NyaXB0b3IudHlwZX0nXFxuYDtcbiAgICB9XG4gICAgaWYgKGV4aXN0aW5nLnZhbHVlVHlwZSAhPT0gb3RoZXJEZXNjcmlwdG9yLnZhbHVlVHlwZSkge1xuICAgICAgICBpbmNvbXBhdGliaWxpdHkgKz0gYFxcdC0gVmFsdWUgVHlwZSAnJHtleGlzdGluZy52YWx1ZVR5cGV9JyBkb2VzIG5vdCBtYXRjaCAnJHtvdGhlckRlc2NyaXB0b3IudmFsdWVUeXBlfSdcXG5gO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcuZGVzY3JpcHRpb24gIT09IG90aGVyRGVzY3JpcHRvci5kZXNjcmlwdGlvbikge1xuICAgICAgICBpbmNvbXBhdGliaWxpdHkgKz0gYFxcdC0gRGVzY3JpcHRpb24gJyR7ZXhpc3RpbmcuZGVzY3JpcHRpb259JyBkb2VzIG5vdCBtYXRjaCAnJHtvdGhlckRlc2NyaXB0b3IuZGVzY3JpcHRpb259J1xcbmA7XG4gICAgfVxuICAgIHJldHVybiBpbmNvbXBhdGliaWxpdHk7XG59XG5leHBvcnRzLmdldEluY29tcGF0aWJpbGl0eURldGFpbHMgPSBnZXRJbmNvbXBhdGliaWxpdHlEZXRhaWxzO1xuZnVuY3Rpb24gZ2V0VmFsdWVUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gYFxcdC0gdXNlIHZhbHVlVHlwZSAnJHtleGlzdGluZy52YWx1ZVR5cGV9JyBvbiBpbnN0cnVtZW50IGNyZWF0aW9uIG9yIHVzZSBhbiBpbnN0cnVtZW50IG5hbWUgb3RoZXIgdGhhbiAnJHtvdGhlckRlc2NyaXB0b3IubmFtZX0nYDtcbn1cbmV4cG9ydHMuZ2V0VmFsdWVUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZ2V0VmFsdWVUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlO1xuZnVuY3Rpb24gZ2V0VW5pdENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZShleGlzdGluZywgb3RoZXJEZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGBcXHQtIHVzZSB1bml0ICcke2V4aXN0aW5nLnVuaXR9JyBvbiBpbnN0cnVtZW50IGNyZWF0aW9uIG9yIHVzZSBhbiBpbnN0cnVtZW50IG5hbWUgb3RoZXIgdGhhbiAnJHtvdGhlckRlc2NyaXB0b3IubmFtZX0nYDtcbn1cbmV4cG9ydHMuZ2V0VW5pdENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZSA9IGdldFVuaXRDb25mbGljdFJlc29sdXRpb25SZWNpcGU7XG5mdW5jdGlvbiBnZXRUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IHtcbiAgICAgICAgbmFtZTogb3RoZXJEZXNjcmlwdG9yLm5hbWUsXG4gICAgICAgIHR5cGU6IG90aGVyRGVzY3JpcHRvci50eXBlLFxuICAgICAgICB1bml0OiBvdGhlckRlc2NyaXB0b3IudW5pdCxcbiAgICB9O1xuICAgIGNvbnN0IHNlbGVjdG9yU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0b3IpO1xuICAgIHJldHVybiBgXFx0LSBjcmVhdGUgYSBuZXcgdmlldyB3aXRoIGEgbmFtZSBvdGhlciB0aGFuICcke2V4aXN0aW5nLm5hbWV9JyBhbmQgSW5zdHJ1bWVudFNlbGVjdG9yICcke3NlbGVjdG9yU3RyaW5nfSdgO1xufVxuZXhwb3J0cy5nZXRUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlID0gZ2V0VHlwZUNvbmZsaWN0UmVzb2x1dGlvblJlY2lwZTtcbmZ1bmN0aW9uIGdldERlc2NyaXB0aW9uUmVzb2x1dGlvblJlY2lwZShleGlzdGluZywgb3RoZXJEZXNjcmlwdG9yKSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB7XG4gICAgICAgIG5hbWU6IG90aGVyRGVzY3JpcHRvci5uYW1lLFxuICAgICAgICB0eXBlOiBvdGhlckRlc2NyaXB0b3IudHlwZSxcbiAgICAgICAgdW5pdDogb3RoZXJEZXNjcmlwdG9yLnVuaXQsXG4gICAgfTtcbiAgICBjb25zdCBzZWxlY3RvclN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNlbGVjdG9yKTtcbiAgICByZXR1cm4gYFxcdC0gY3JlYXRlIGEgbmV3IHZpZXcgd2l0aCBhIG5hbWUgb3RoZXIgdGhhbiAnJHtleGlzdGluZy5uYW1lfScgYW5kIEluc3RydW1lbnRTZWxlY3RvciAnJHtzZWxlY3RvclN0cmluZ30nXG4gICAgXFx0LSBPUiAtIGNyZWF0ZSBhIG5ldyB2aWV3IHdpdGggdGhlIG5hbWUgJHtleGlzdGluZy5uYW1lfSBhbmQgZGVzY3JpcHRpb24gJyR7ZXhpc3RpbmcuZGVzY3JpcHRpb259JyBhbmQgSW5zdHJ1bWVudFNlbGVjdG9yICR7c2VsZWN0b3JTdHJpbmd9XG4gICAgXFx0LSBPUiAtIGNyZWF0ZSBhIG5ldyB2aWV3IHdpdGggdGhlIG5hbWUgJHtvdGhlckRlc2NyaXB0b3IubmFtZX0gYW5kIGRlc2NyaXB0aW9uICcke2V4aXN0aW5nLmRlc2NyaXB0aW9ufScgYW5kIEluc3RydW1lbnRTZWxlY3RvciAke3NlbGVjdG9yU3RyaW5nfWA7XG59XG5leHBvcnRzLmdldERlc2NyaXB0aW9uUmVzb2x1dGlvblJlY2lwZSA9IGdldERlc2NyaXB0aW9uUmVzb2x1dGlvblJlY2lwZTtcbmZ1bmN0aW9uIGdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZShleGlzdGluZywgb3RoZXJEZXNjcmlwdG9yKSB7XG4gICAgLy8gQ29uZmxpY3RzIHRoYXQgY2Fubm90IGJlIHNvbHZlZCB2aWEgdmlld3MuXG4gICAgaWYgKGV4aXN0aW5nLnZhbHVlVHlwZSAhPT0gb3RoZXJEZXNjcmlwdG9yLnZhbHVlVHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0VmFsdWVUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcudW5pdCAhPT0gb3RoZXJEZXNjcmlwdG9yLnVuaXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFVuaXRDb25mbGljdFJlc29sdXRpb25SZWNpcGUoZXhpc3RpbmcsIG90aGVyRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIC8vIENvbmZsaWN0cyB0aGF0IGNhbiBiZSBzb2x2ZWQgdmlhIHZpZXdzLlxuICAgIGlmIChleGlzdGluZy50eXBlICE9PSBvdGhlckRlc2NyaXB0b3IudHlwZSkge1xuICAgICAgICAvLyB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBzb2x2ZSBwb3NzaWJsZSBkZXNjcmlwdGlvbiBjb25mbGljdHMuXG4gICAgICAgIHJldHVybiBnZXRUeXBlQ29uZmxpY3RSZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBpZiAoZXhpc3RpbmcuZGVzY3JpcHRpb24gIT09IG90aGVyRGVzY3JpcHRvci5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gZ2V0RGVzY3JpcHRpb25SZXNvbHV0aW9uUmVjaXBlKGV4aXN0aW5nLCBvdGhlckRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5leHBvcnRzLmdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZSA9IGdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZ2lzdHJhdGlvbkNvbmZsaWN0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWV0cmljU3RvcmFnZVJlZ2lzdHJ5ID0gdm9pZCAwO1xuY29uc3QgSW5zdHJ1bWVudERlc2NyaXB0b3JfMSA9IHJlcXVpcmUoXCIuLi9JbnN0cnVtZW50RGVzY3JpcHRvclwiKTtcbmNvbnN0IGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBSZWdpc3RyYXRpb25Db25mbGljdHNfMSA9IHJlcXVpcmUoXCIuLi92aWV3L1JlZ2lzdHJhdGlvbkNvbmZsaWN0c1wiKTtcbi8qKlxuICogSW50ZXJuYWwgY2xhc3MgZm9yIHN0b3Jpbmcge0BsaW5rIE1ldHJpY1N0b3JhZ2V9XG4gKi9cbmNsYXNzIE1ldHJpY1N0b3JhZ2VSZWdpc3RyeSB7XG4gICAgX3NoYXJlZFJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgIF9wZXJDb2xsZWN0b3JSZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1ldHJpY1N0b3JhZ2VSZWdpc3RyeSgpO1xuICAgIH1cbiAgICBnZXRTdG9yYWdlcyhjb2xsZWN0b3IpIHtcbiAgICAgICAgbGV0IHN0b3JhZ2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbWV0cmljU3RvcmFnZXMgb2YgdGhpcy5fc2hhcmVkUmVnaXN0cnkudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VzID0gc3RvcmFnZXMuY29uY2F0KG1ldHJpY1N0b3JhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwZXJDb2xsZWN0b3JTdG9yYWdlcyA9IHRoaXMuX3BlckNvbGxlY3RvclJlZ2lzdHJ5LmdldChjb2xsZWN0b3IpO1xuICAgICAgICBpZiAocGVyQ29sbGVjdG9yU3RvcmFnZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZXRyaWNTdG9yYWdlcyBvZiBwZXJDb2xsZWN0b3JTdG9yYWdlcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2VzID0gc3RvcmFnZXMuY29uY2F0KG1ldHJpY1N0b3JhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmFnZXM7XG4gICAgfVxuICAgIHJlZ2lzdGVyKHN0b3JhZ2UpIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJTdG9yYWdlKHN0b3JhZ2UsIHRoaXMuX3NoYXJlZFJlZ2lzdHJ5KTtcbiAgICB9XG4gICAgcmVnaXN0ZXJGb3JDb2xsZWN0b3IoY29sbGVjdG9yLCBzdG9yYWdlKSB7XG4gICAgICAgIGxldCBzdG9yYWdlTWFwID0gdGhpcy5fcGVyQ29sbGVjdG9yUmVnaXN0cnkuZ2V0KGNvbGxlY3Rvcik7XG4gICAgICAgIGlmIChzdG9yYWdlTWFwID09IG51bGwpIHtcbiAgICAgICAgICAgIHN0b3JhZ2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLl9wZXJDb2xsZWN0b3JSZWdpc3RyeS5zZXQoY29sbGVjdG9yLCBzdG9yYWdlTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWdpc3RlclN0b3JhZ2Uoc3RvcmFnZSwgc3RvcmFnZU1hcCk7XG4gICAgfVxuICAgIGZpbmRPclVwZGF0ZUNvbXBhdGlibGVTdG9yYWdlKGV4cGVjdGVkRGVzY3JpcHRvcikge1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX3NoYXJlZFJlZ2lzdHJ5LmdldChleHBlY3RlZERlc2NyaXB0b3IubmFtZSk7XG4gICAgICAgIGlmIChzdG9yYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZGVzY3JpcHRvciBpcyBjb21wYXRpYmxlLCB0aGUgdHlwZSBvZiB0aGVpciBtZXRyaWMgc3RvcmFnZVxuICAgICAgICAvLyAoZWl0aGVyIFN5bmNNZXRyaWNTdG9yYWdlIG9yIEFzeW5jTWV0cmljU3RvcmFnZSkgbXVzdCBiZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE9yVXBkYXRlQ29tcGF0aWJsZVN0b3JhZ2UoZXhwZWN0ZWREZXNjcmlwdG9yLCBzdG9yYWdlcyk7XG4gICAgfVxuICAgIGZpbmRPclVwZGF0ZUNvbXBhdGlibGVDb2xsZWN0b3JTdG9yYWdlKGNvbGxlY3RvciwgZXhwZWN0ZWREZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VNYXAgPSB0aGlzLl9wZXJDb2xsZWN0b3JSZWdpc3RyeS5nZXQoY29sbGVjdG9yKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RvcmFnZXMgPSBzdG9yYWdlTWFwLmdldChleHBlY3RlZERlc2NyaXB0b3IubmFtZSk7XG4gICAgICAgIGlmIChzdG9yYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZGVzY3JpcHRvciBpcyBjb21wYXRpYmxlLCB0aGUgdHlwZSBvZiB0aGVpciBtZXRyaWMgc3RvcmFnZVxuICAgICAgICAvLyAoZWl0aGVyIFN5bmNNZXRyaWNTdG9yYWdlIG9yIEFzeW5jTWV0cmljU3RvcmFnZSkgbXVzdCBiZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE9yVXBkYXRlQ29tcGF0aWJsZVN0b3JhZ2UoZXhwZWN0ZWREZXNjcmlwdG9yLCBzdG9yYWdlcyk7XG4gICAgfVxuICAgIF9yZWdpc3RlclN0b3JhZ2Uoc3RvcmFnZSwgc3RvcmFnZU1hcCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gc3RvcmFnZS5nZXRJbnN0cnVtZW50RGVzY3JpcHRvcigpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHN0b3JhZ2VNYXAuZ2V0KGRlc2NyaXB0b3IubmFtZSk7XG4gICAgICAgIGlmIChzdG9yYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdG9yYWdlTWFwLnNldChkZXNjcmlwdG9yLm5hbWUsIFtzdG9yYWdlXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RvcmFnZXMucHVzaChzdG9yYWdlKTtcbiAgICB9XG4gICAgX2ZpbmRPclVwZGF0ZUNvbXBhdGlibGVTdG9yYWdlKGV4cGVjdGVkRGVzY3JpcHRvciwgZXhpc3RpbmdTdG9yYWdlcykge1xuICAgICAgICBsZXQgY29tcGF0aWJsZVN0b3JhZ2UgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGV4aXN0aW5nU3RvcmFnZSBvZiBleGlzdGluZ1N0b3JhZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0Rlc2NyaXB0b3IgPSBleGlzdGluZ1N0b3JhZ2UuZ2V0SW5zdHJ1bWVudERlc2NyaXB0b3IoKTtcbiAgICAgICAgICAgIGlmICgoMCwgSW5zdHJ1bWVudERlc2NyaXB0b3JfMS5pc0Rlc2NyaXB0b3JDb21wYXRpYmxlV2l0aCkoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBsb25nZXIgZGVzY3JpcHRpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5kZXNjcmlwdGlvbiAhPT0gZXhwZWN0ZWREZXNjcmlwdG9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZERlc2NyaXB0b3IuZGVzY3JpcHRpb24ubGVuZ3RoID5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci5kZXNjcmlwdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nU3RvcmFnZS51cGRhdGVEZXNjcmlwdGlvbihleHBlY3RlZERlc2NyaXB0b3IuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oJ0EgdmlldyBvciBpbnN0cnVtZW50IHdpdGggdGhlIG5hbWUgJywgZXhwZWN0ZWREZXNjcmlwdG9yLm5hbWUsICcgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLCBidXQgaGFzIGEgZGlmZmVyZW50IGRlc2NyaXB0aW9uIGFuZCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbm90aGVyIHJlZ2lzdGVyZWQgdmlldy5cXG4nLCAnRGV0YWlsczpcXG4nLCAoMCwgUmVnaXN0cmF0aW9uQ29uZmxpY3RzXzEuZ2V0SW5jb21wYXRpYmlsaXR5RGV0YWlscykoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpLCAnVGhlIGxvbmdlciBkZXNjcmlwdGlvbiB3aWxsIGJlIHVzZWQuXFxuVG8gcmVzb2x2ZSB0aGUgY29uZmxpY3Q6JywgKDAsIFJlZ2lzdHJhdGlvbkNvbmZsaWN0c18xLmdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZSkoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RvcmFnZSBpcyBmdWxseSBjb21wYXRpYmxlLiBUaGVyZSB3aWxsIG5ldmVyIGJlIG1vcmUgdGhhbiBvbmUgcHJlLWV4aXN0aW5nIGZ1bGx5IGNvbXBhdGlibGUgc3RvcmFnZS5cbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlU3RvcmFnZSA9IGV4aXN0aW5nU3RvcmFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBTSE9VTEQgd2FybiBhYm91dCBkdXBsaWNhdGUgaW5zdHJ1bWVudCByZWdpc3RyYXRpb25cbiAgICAgICAgICAgICAgICAvLyBjb25mbGljdHMgYWZ0ZXIgYXBwbHlpbmcgVmlldyBjb25maWd1cmF0aW9uLlxuICAgICAgICAgICAgICAgIGFwaS5kaWFnLndhcm4oJ0EgdmlldyBvciBpbnN0cnVtZW50IHdpdGggdGhlIG5hbWUgJywgZXhwZWN0ZWREZXNjcmlwdG9yLm5hbWUsICcgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGFuZCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbm90aGVyIHJlZ2lzdGVyZWQgdmlldy5cXG4nLCAnRGV0YWlsczpcXG4nLCAoMCwgUmVnaXN0cmF0aW9uQ29uZmxpY3RzXzEuZ2V0SW5jb21wYXRpYmlsaXR5RGV0YWlscykoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpLCAnVG8gcmVzb2x2ZSB0aGUgY29uZmxpY3Q6XFxuJywgKDAsIFJlZ2lzdHJhdGlvbkNvbmZsaWN0c18xLmdldENvbmZsaWN0UmVzb2x1dGlvblJlY2lwZSkoZXhpc3RpbmdEZXNjcmlwdG9yLCBleHBlY3RlZERlc2NyaXB0b3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcGF0aWJsZVN0b3JhZ2U7XG4gICAgfVxufVxuZXhwb3J0cy5NZXRyaWNTdG9yYWdlUmVnaXN0cnkgPSBNZXRyaWNTdG9yYWdlUmVnaXN0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNTdG9yYWdlUmVnaXN0cnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk11bHRpTWV0cmljU3RvcmFnZSA9IHZvaWQgMDtcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICovXG5jbGFzcyBNdWx0aU1ldHJpY1N0b3JhZ2Uge1xuICAgIF9iYWNraW5nU3RvcmFnZXM7XG4gICAgY29uc3RydWN0b3IoX2JhY2tpbmdTdG9yYWdlcykge1xuICAgICAgICB0aGlzLl9iYWNraW5nU3RvcmFnZXMgPSBfYmFja2luZ1N0b3JhZ2VzO1xuICAgIH1cbiAgICByZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGNvbnRleHQsIHJlY29yZFRpbWUpIHtcbiAgICAgICAgdGhpcy5fYmFja2luZ1N0b3JhZ2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgaXQucmVjb3JkKHZhbHVlLCBhdHRyaWJ1dGVzLCBjb250ZXh0LCByZWNvcmRUaW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5NdWx0aU1ldHJpY1N0b3JhZ2UgPSBNdWx0aU1ldHJpY1N0b3JhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NdWx0aVdyaXRhYmxlTWV0cmljU3RvcmFnZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmF0Y2hPYnNlcnZhYmxlUmVzdWx0SW1wbCA9IGV4cG9ydHMuT2JzZXJ2YWJsZVJlc3VsdEltcGwgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBIYXNoTWFwXzEgPSByZXF1aXJlKFwiLi9zdGF0ZS9IYXNoTWFwXCIpO1xuY29uc3QgSW5zdHJ1bWVudHNfMSA9IHJlcXVpcmUoXCIuL0luc3RydW1lbnRzXCIpO1xuLyoqXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyB7QGxpbmsgT2JzZXJ2YWJsZVJlc3VsdH0gaW50ZXJmYWNlLlxuICovXG5jbGFzcyBPYnNlcnZhYmxlUmVzdWx0SW1wbCB7XG4gICAgX2luc3RydW1lbnROYW1lO1xuICAgIF92YWx1ZVR5cGU7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX2J1ZmZlciA9IG5ldyBIYXNoTWFwXzEuQXR0cmlidXRlSGFzaE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKF9pbnN0cnVtZW50TmFtZSwgX3ZhbHVlVHlwZSkge1xuICAgICAgICB0aGlzLl9pbnN0cnVtZW50TmFtZSA9IF9pbnN0cnVtZW50TmFtZTtcbiAgICAgICAgdGhpcy5fdmFsdWVUeXBlID0gX3ZhbHVlVHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT2JzZXJ2ZSBhIG1lYXN1cmVtZW50IG9mIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgb2JzZXJ2ZSh2YWx1ZSwgYXR0cmlidXRlcyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYG5vbi1udW1iZXIgdmFsdWUgcHJvdmlkZWQgdG8gbWV0cmljICR7dGhpcy5faW5zdHJ1bWVudE5hbWV9OiAke3ZhbHVlfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZVR5cGUgPT09IGFwaV8xLlZhbHVlVHlwZS5JTlQgJiYgIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYElOVCB2YWx1ZSB0eXBlIGNhbm5vdCBhY2NlcHQgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBmb3IgJHt0aGlzLl9pbnN0cnVtZW50TmFtZX0sIGlnbm9yaW5nIHRoZSBmcmFjdGlvbmFsIGRpZ2l0cy5gKTtcbiAgICAgICAgICAgIHZhbHVlID0gTWF0aC50cnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICAvLyBpZ25vcmUgbm9uLWZpbml0ZSB2YWx1ZXMuXG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYXR0cmlidXRlcywgdmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuT2JzZXJ2YWJsZVJlc3VsdEltcGwgPSBPYnNlcnZhYmxlUmVzdWx0SW1wbDtcbi8qKlxuICogVGhlIGNsYXNzIGltcGxlbWVudHMge0BsaW5rIEJhdGNoT2JzZXJ2YWJsZUNhbGxiYWNrfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIEJhdGNoT2JzZXJ2YWJsZVJlc3VsdEltcGwge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9idWZmZXIgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogT2JzZXJ2ZSBhIG1lYXN1cmVtZW50IG9mIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgb2JzZXJ2ZShtZXRyaWMsIHZhbHVlLCBhdHRyaWJ1dGVzID0ge30pIHtcbiAgICAgICAgaWYgKCEoMCwgSW5zdHJ1bWVudHNfMS5pc09ic2VydmFibGVJbnN0cnVtZW50KShtZXRyaWMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hcCA9IHRoaXMuX2J1ZmZlci5nZXQobWV0cmljKTtcbiAgICAgICAgaWYgKG1hcCA9PSBudWxsKSB7XG4gICAgICAgICAgICBtYXAgPSBuZXcgSGFzaE1hcF8xLkF0dHJpYnV0ZUhhc2hNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQobWV0cmljLCBtYXApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYG5vbi1udW1iZXIgdmFsdWUgcHJvdmlkZWQgdG8gbWV0cmljICR7bWV0cmljLl9kZXNjcmlwdG9yLm5hbWV9OiAke3ZhbHVlfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRyaWMuX2Rlc2NyaXB0b3IudmFsdWVUeXBlID09PSBhcGlfMS5WYWx1ZVR5cGUuSU5UICYmXG4gICAgICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgSU5UIHZhbHVlIHR5cGUgY2Fubm90IGFjY2VwdCBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZvciAke21ldHJpYy5fZGVzY3JpcHRvci5uYW1lfSwgaWdub3JpbmcgdGhlIGZyYWN0aW9uYWwgZGlnaXRzLmApO1xuICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnRydW5jKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBub24tZmluaXRlIHZhbHVlcy5cbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFwLnNldChhdHRyaWJ1dGVzLCB2YWx1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy5CYXRjaE9ic2VydmFibGVSZXN1bHRJbXBsID0gQmF0Y2hPYnNlcnZhYmxlUmVzdWx0SW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGVSZXN1bHQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9ic2VydmFibGVSZWdpc3RyeSA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IEluc3RydW1lbnRzXzEgPSByZXF1aXJlKFwiLi4vSW5zdHJ1bWVudHNcIik7XG5jb25zdCBPYnNlcnZhYmxlUmVzdWx0XzEgPSByZXF1aXJlKFwiLi4vT2JzZXJ2YWJsZVJlc3VsdFwiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG4vKipcbiAqIEFuIGludGVybmFsIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgT2JzZXJ2YWJsZUNhbGxiYWNrcy5cbiAqXG4gKiBFdmVyeSByZWdpc3RlcmVkIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBhIHNldCBvZiBpbnN0cnVtZW50cyBhcmUgYmUgZXZhbHVhdGVkXG4gKiBleGFjdGx5IG9uY2UgZHVyaW5nIGNvbGxlY3Rpb24gcHJpb3IgdG8gcmVhZGluZyBkYXRhIGZvciB0aGF0IGluc3RydW1lbnQuXG4gKi9cbmNsYXNzIE9ic2VydmFibGVSZWdpc3RyeSB7XG4gICAgX2NhbGxiYWNrcyA9IFtdO1xuICAgIF9iYXRjaENhbGxiYWNrcyA9IFtdO1xuICAgIGFkZENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudCk7XG4gICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKHsgY2FsbGJhY2ssIGluc3RydW1lbnQgfSk7XG4gICAgfVxuICAgIHJlbW92ZUNhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRDYWxsYmFjayhjYWxsYmFjaywgaW5zdHJ1bWVudCk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgICBhZGRCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50cykge1xuICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgdW5pcXVlIGluc3RydW1lbnRzLlxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlSW5zdHJ1bWVudHMgPSBuZXcgU2V0KGluc3RydW1lbnRzLmZpbHRlcihJbnN0cnVtZW50c18xLmlzT2JzZXJ2YWJsZUluc3RydW1lbnQpKTtcbiAgICAgICAgaWYgKG9ic2VydmFibGVJbnN0cnVtZW50cy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdCYXRjaE9ic2VydmFibGVDYWxsYmFjayBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHZhbGlkIGluc3RydW1lbnRzJywgaW5zdHJ1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2ZpbmRCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBvYnNlcnZhYmxlSW5zdHJ1bWVudHMpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9iYXRjaENhbGxiYWNrcy5wdXNoKHsgY2FsbGJhY2ssIGluc3RydW1lbnRzOiBvYnNlcnZhYmxlSW5zdHJ1bWVudHMgfSk7XG4gICAgfVxuICAgIHJlbW92ZUJhdGNoQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RydW1lbnRzKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiB1bmlxdWUgaW5zdHJ1bWVudHMuXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVJbnN0cnVtZW50cyA9IG5ldyBTZXQoaW5zdHJ1bWVudHMuZmlsdGVyKEluc3RydW1lbnRzXzEuaXNPYnNlcnZhYmxlSW5zdHJ1bWVudCkpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9maW5kQmF0Y2hDYWxsYmFjayhjYWxsYmFjaywgb2JzZXJ2YWJsZUluc3RydW1lbnRzKTtcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9iYXRjaENhbGxiYWNrcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIG9mIHJlamVjdGVkIHJlYXNvbnMgZm9yIGludm9raW5nIGNhbGxiYWNrcy5cbiAgICAgKi9cbiAgICBhc3luYyBvYnNlcnZlKGNvbGxlY3Rpb25UaW1lLCB0aW1lb3V0TWlsbGlzKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrRnV0dXJlcyA9IHRoaXMuX29ic2VydmVDYWxsYmFja3MoY29sbGVjdGlvblRpbWUsIHRpbWVvdXRNaWxsaXMpO1xuICAgICAgICBjb25zdCBiYXRjaENhbGxiYWNrRnV0dXJlcyA9IHRoaXMuX29ic2VydmVCYXRjaENhbGxiYWNrcyhjb2xsZWN0aW9uVGltZSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCAoMCwgdXRpbHNfMS5Qcm9taXNlQWxsU2V0dGxlZCkoW1xuICAgICAgICAgICAgLi4uY2FsbGJhY2tGdXR1cmVzLFxuICAgICAgICAgICAgLi4uYmF0Y2hDYWxsYmFja0Z1dHVyZXMsXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCByZWplY3Rpb25zID0gcmVzdWx0c1xuICAgICAgICAgICAgLmZpbHRlcih1dGlsc18xLmlzUHJvbWlzZUFsbFNldHRsZWRSZWplY3Rpb25SZXN1bHQpXG4gICAgICAgICAgICAubWFwKGl0ID0+IGl0LnJlYXNvbik7XG4gICAgICAgIHJldHVybiByZWplY3Rpb25zO1xuICAgIH1cbiAgICBfb2JzZXJ2ZUNhbGxiYWNrcyhvYnNlcnZhdGlvblRpbWUsIHRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5tYXAoYXN5bmMgKHsgY2FsbGJhY2ssIGluc3RydW1lbnQgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZVJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlUmVzdWx0XzEuT2JzZXJ2YWJsZVJlc3VsdEltcGwoaW5zdHJ1bWVudC5fZGVzY3JpcHRvci5uYW1lLCBpbnN0cnVtZW50Ll9kZXNjcmlwdG9yLnZhbHVlVHlwZSk7XG4gICAgICAgICAgICBsZXQgY2FsbFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY2FsbGJhY2sob2JzZXJ2YWJsZVJlc3VsdCkpO1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRNaWxsaXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGxQcm9taXNlID0gKDAsIHV0aWxzXzEuY2FsbFdpdGhUaW1lb3V0KShjYWxsUHJvbWlzZSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBjYWxsUHJvbWlzZTtcbiAgICAgICAgICAgIGluc3RydW1lbnQuX21ldHJpY1N0b3JhZ2VzLmZvckVhY2gobWV0cmljU3RvcmFnZSA9PiB7XG4gICAgICAgICAgICAgICAgbWV0cmljU3RvcmFnZS5yZWNvcmQob2JzZXJ2YWJsZVJlc3VsdC5fYnVmZmVyLCBvYnNlcnZhdGlvblRpbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfb2JzZXJ2ZUJhdGNoQ2FsbGJhY2tzKG9ic2VydmF0aW9uVGltZSwgdGltZW91dE1pbGxpcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmF0Y2hDYWxsYmFja3MubWFwKGFzeW5jICh7IGNhbGxiYWNrLCBpbnN0cnVtZW50cyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlUmVzdWx0ID0gbmV3IE9ic2VydmFibGVSZXN1bHRfMS5CYXRjaE9ic2VydmFibGVSZXN1bHRJbXBsKCk7XG4gICAgICAgICAgICBsZXQgY2FsbFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY2FsbGJhY2sob2JzZXJ2YWJsZVJlc3VsdCkpO1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRNaWxsaXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGxQcm9taXNlID0gKDAsIHV0aWxzXzEuY2FsbFdpdGhUaW1lb3V0KShjYWxsUHJvbWlzZSwgdGltZW91dE1pbGxpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBjYWxsUHJvbWlzZTtcbiAgICAgICAgICAgIGluc3RydW1lbnRzLmZvckVhY2goaW5zdHJ1bWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gb2JzZXJ2YWJsZVJlc3VsdC5fYnVmZmVyLmdldChpbnN0cnVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnN0cnVtZW50Ll9tZXRyaWNTdG9yYWdlcy5mb3JFYWNoKG1ldHJpY1N0b3JhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtZXRyaWNTdG9yYWdlLnJlY29yZChidWZmZXIsIG9ic2VydmF0aW9uVGltZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9maW5kQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RydW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5maW5kSW5kZXgocmVjb3JkID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZWNvcmQuY2FsbGJhY2sgPT09IGNhbGxiYWNrICYmIHJlY29yZC5pbnN0cnVtZW50ID09PSBpbnN0cnVtZW50O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2ZpbmRCYXRjaENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0cnVtZW50cykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmF0Y2hDYWxsYmFja3MuZmluZEluZGV4KHJlY29yZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlY29yZC5jYWxsYmFjayA9PT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgICAgICAoMCwgdXRpbHNfMS5zZXRFcXVhbHMpKHJlY29yZC5pbnN0cnVtZW50cywgaW5zdHJ1bWVudHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5PYnNlcnZhYmxlUmVnaXN0cnkgPSBPYnNlcnZhYmxlUmVnaXN0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYnNlcnZhYmxlUmVnaXN0cnkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN5bmNNZXRyaWNTdG9yYWdlID0gdm9pZCAwO1xuY29uc3QgTWV0cmljU3RvcmFnZV8xID0gcmVxdWlyZShcIi4vTWV0cmljU3RvcmFnZVwiKTtcbmNvbnN0IERlbHRhTWV0cmljUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9EZWx0YU1ldHJpY1Byb2Nlc3NvclwiKTtcbmNvbnN0IFRlbXBvcmFsTWV0cmljUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9UZW1wb3JhbE1ldHJpY1Byb2Nlc3NvclwiKTtcbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlLlxuICpcbiAqIFN0b3JlcyBhbmQgYWdncmVnYXRlcyB7QGxpbmsgTWV0cmljRGF0YX0gZm9yIHN5bmNocm9ub3VzIGluc3RydW1lbnRzLlxuICovXG5jbGFzcyBTeW5jTWV0cmljU3RvcmFnZSBleHRlbmRzIE1ldHJpY1N0b3JhZ2VfMS5NZXRyaWNTdG9yYWdlIHtcbiAgICBfYXR0cmlidXRlc1Byb2Nlc3NvcjtcbiAgICBfYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0O1xuICAgIF9kZWx0YU1ldHJpY1N0b3JhZ2U7XG4gICAgX3RlbXBvcmFsTWV0cmljU3RvcmFnZTtcbiAgICBjb25zdHJ1Y3RvcihpbnN0cnVtZW50RGVzY3JpcHRvciwgYWdncmVnYXRvciwgX2F0dHJpYnV0ZXNQcm9jZXNzb3IsIGNvbGxlY3RvckhhbmRsZXMsIF9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQpIHtcbiAgICAgICAgc3VwZXIoaW5zdHJ1bWVudERlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzUHJvY2Vzc29yID0gX2F0dHJpYnV0ZXNQcm9jZXNzb3I7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCA9IF9hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgICAgIHRoaXMuX2RlbHRhTWV0cmljU3RvcmFnZSA9IG5ldyBEZWx0YU1ldHJpY1Byb2Nlc3Nvcl8xLkRlbHRhTWV0cmljUHJvY2Vzc29yKGFnZ3JlZ2F0b3IsIHRoaXMuX2FnZ3JlZ2F0aW9uQ2FyZGluYWxpdHlMaW1pdCk7XG4gICAgICAgIHRoaXMuX3RlbXBvcmFsTWV0cmljU3RvcmFnZSA9IG5ldyBUZW1wb3JhbE1ldHJpY1Byb2Nlc3Nvcl8xLlRlbXBvcmFsTWV0cmljUHJvY2Vzc29yKGFnZ3JlZ2F0b3IsIGNvbGxlY3RvckhhbmRsZXMpO1xuICAgIH1cbiAgICByZWNvcmQodmFsdWUsIGF0dHJpYnV0ZXMsIGNvbnRleHQsIHJlY29yZFRpbWUpIHtcbiAgICAgICAgYXR0cmlidXRlcyA9IHRoaXMuX2F0dHJpYnV0ZXNQcm9jZXNzb3IucHJvY2VzcyhhdHRyaWJ1dGVzLCBjb250ZXh0KTtcbiAgICAgICAgdGhpcy5fZGVsdGFNZXRyaWNTdG9yYWdlLnJlY29yZCh2YWx1ZSwgYXR0cmlidXRlcywgY29udGV4dCwgcmVjb3JkVGltZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbGxlY3RzIHRoZSBtZXRyaWNzIGZyb20gdGhpcyBzdG9yYWdlLlxuICAgICAqXG4gICAgICogTm90ZTogVGhpcyBpcyBhIHN0YXRlZnVsIG9wZXJhdGlvbiBhbmQgbWF5IHJlc2V0IGFueSBpbnRlcnZhbC1yZWxhdGVkXG4gICAgICogc3RhdGUgZm9yIHRoZSBNZXRyaWNDb2xsZWN0b3IuXG4gICAgICovXG4gICAgY29sbGVjdChjb2xsZWN0b3IsIGNvbGxlY3Rpb25UaW1lKSB7XG4gICAgICAgIGNvbnN0IGFjY3VtdWxhdGlvbnMgPSB0aGlzLl9kZWx0YU1ldHJpY1N0b3JhZ2UuY29sbGVjdCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcG9yYWxNZXRyaWNTdG9yYWdlLmJ1aWxkTWV0cmljcyhjb2xsZWN0b3IsIHRoaXMuX2luc3RydW1lbnREZXNjcmlwdG9yLCBhY2N1bXVsYXRpb25zLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgfVxufVxuZXhwb3J0cy5TeW5jTWV0cmljU3RvcmFnZSA9IFN5bmNNZXRyaWNTdG9yYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3luY01ldHJpY1N0b3JhZ2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZURlbnlMaXN0QXR0cmlidXRlc1Byb2Nlc3NvciA9IGV4cG9ydHMuY3JlYXRlQWxsb3dMaXN0QXR0cmlidXRlc1Byb2Nlc3NvciA9IGV4cG9ydHMuY3JlYXRlTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yID0gZXhwb3J0cy5jcmVhdGVOb29wQXR0cmlidXRlc1Byb2Nlc3NvciA9IHZvaWQgMDtcbmNsYXNzIE5vb3BBdHRyaWJ1dGVzUHJvY2Vzc29yIHtcbiAgICBwcm9jZXNzKGluY29taW5nLCBfY29udGV4dCkge1xuICAgICAgICByZXR1cm4gaW5jb21pbmc7XG4gICAgfVxufVxuY2xhc3MgTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yIHtcbiAgICBfcHJvY2Vzc29ycztcbiAgICBjb25zdHJ1Y3RvcihfcHJvY2Vzc29ycykge1xuICAgICAgICB0aGlzLl9wcm9jZXNzb3JzID0gX3Byb2Nlc3NvcnM7XG4gICAgfVxuICAgIHByb2Nlc3MoaW5jb21pbmcsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IGZpbHRlcmVkQXR0cmlidXRlcyA9IGluY29taW5nO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2Nlc3NvciBvZiB0aGlzLl9wcm9jZXNzb3JzKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZEF0dHJpYnV0ZXMgPSBwcm9jZXNzb3IucHJvY2VzcyhmaWx0ZXJlZEF0dHJpYnV0ZXMsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEF0dHJpYnV0ZXM7XG4gICAgfVxufVxuY2xhc3MgQWxsb3dMaXN0UHJvY2Vzc29yIHtcbiAgICBfYWxsb3dlZEF0dHJpYnV0ZU5hbWVzO1xuICAgIGNvbnN0cnVjdG9yKF9hbGxvd2VkQXR0cmlidXRlTmFtZXMpIHtcbiAgICAgICAgdGhpcy5fYWxsb3dlZEF0dHJpYnV0ZU5hbWVzID0gX2FsbG93ZWRBdHRyaWJ1dGVOYW1lcztcbiAgICB9XG4gICAgcHJvY2VzcyhpbmNvbWluZywgX2NvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRBdHRyaWJ1dGVzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGluY29taW5nKVxuICAgICAgICAgICAgLmZpbHRlcihhdHRyaWJ1dGVOYW1lID0+IHRoaXMuX2FsbG93ZWRBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGF0dHJpYnV0ZU5hbWUgPT4gKGZpbHRlcmVkQXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9IGluY29taW5nW2F0dHJpYnV0ZU5hbWVdKSk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEF0dHJpYnV0ZXM7XG4gICAgfVxufVxuY2xhc3MgRGVueUxpc3RQcm9jZXNzb3Ige1xuICAgIF9kZW5pZWRBdHRyaWJ1dGVOYW1lcztcbiAgICBjb25zdHJ1Y3RvcihfZGVuaWVkQXR0cmlidXRlTmFtZXMpIHtcbiAgICAgICAgdGhpcy5fZGVuaWVkQXR0cmlidXRlTmFtZXMgPSBfZGVuaWVkQXR0cmlidXRlTmFtZXM7XG4gICAgfVxuICAgIHByb2Nlc3MoaW5jb21pbmcsIF9jb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhpbmNvbWluZylcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0cmlidXRlTmFtZSA9PiAhdGhpcy5fZGVuaWVkQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSkpXG4gICAgICAgICAgICAuZm9yRWFjaChhdHRyaWJ1dGVOYW1lID0+IChmaWx0ZXJlZEF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0gPSBpbmNvbWluZ1thdHRyaWJ1dGVOYW1lXSkpO1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRBdHRyaWJ1dGVzO1xuICAgIH1cbn1cbi8qKlxuICogQGludGVybmFsXG4gKlxuICogQ3JlYXRlIGFuIHtAbGluayBJQXR0cmlidXRlc1Byb2Nlc3Nvcn0gdGhhdCBhY3RzIGFzIGEgc2ltcGxlIHBhc3MtdGhyb3VnaCBmb3IgYXR0cmlidXRlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3IoKSB7XG4gICAgcmV0dXJuIE5PT1A7XG59XG5leHBvcnRzLmNyZWF0ZU5vb3BBdHRyaWJ1dGVzUHJvY2Vzc29yID0gY3JlYXRlTm9vcEF0dHJpYnV0ZXNQcm9jZXNzb3I7XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIENyZWF0ZSBhbiB7QGxpbmsgSUF0dHJpYnV0ZXNQcm9jZXNzb3J9IHRoYXQgYXBwbGllcyBhbGwgcHJvY2Vzc29ycyBmcm9tIHRoZSBwcm92aWRlZCBsaXN0IGluIG9yZGVyLlxuICpcbiAqIEBwYXJhbSBwcm9jZXNzb3JzIFByb2Nlc3NvcnMgdG8gYXBwbHkgaW4gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU11bHRpQXR0cmlidXRlc1Byb2Nlc3Nvcihwcm9jZXNzb3JzKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aUF0dHJpYnV0ZXNQcm9jZXNzb3IocHJvY2Vzc29ycyk7XG59XG5leHBvcnRzLmNyZWF0ZU11bHRpQXR0cmlidXRlc1Byb2Nlc3NvciA9IGNyZWF0ZU11bHRpQXR0cmlidXRlc1Byb2Nlc3Nvcjtcbi8qKlxuICogQ3JlYXRlIGFuIHtAbGluayBJQXR0cmlidXRlc1Byb2Nlc3Nvcn0gdGhhdCBmaWx0ZXJzIGJ5IGFsbG93ZWQgYXR0cmlidXRlIG5hbWVzIGFuZCBkcm9wcyBhbnkgbmFtZXMgdGhhdCBhcmUgbm90IGluIHRoZVxuICogYWxsb3cgbGlzdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWxsb3dMaXN0QXR0cmlidXRlc1Byb2Nlc3NvcihhdHRyaWJ1dGVBbGxvd0xpc3QpIHtcbiAgICByZXR1cm4gbmV3IEFsbG93TGlzdFByb2Nlc3NvcihhdHRyaWJ1dGVBbGxvd0xpc3QpO1xufVxuZXhwb3J0cy5jcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yID0gY3JlYXRlQWxsb3dMaXN0QXR0cmlidXRlc1Byb2Nlc3Nvcjtcbi8qKlxuICogQ3JlYXRlIGFuIHtAbGluayBJQXR0cmlidXRlc1Byb2Nlc3Nvcn0gdGhhdCBkcm9wcyBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBuYW1lcyBwcm92aWRlZCBpbiB0aGUgZGVueSBsaXN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURlbnlMaXN0QXR0cmlidXRlc1Byb2Nlc3NvcihhdHRyaWJ1dGVEZW55TGlzdCkge1xuICAgIHJldHVybiBuZXcgRGVueUxpc3RQcm9jZXNzb3IoYXR0cmlidXRlRGVueUxpc3QpO1xufVxuZXhwb3J0cy5jcmVhdGVEZW55TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3IgPSBjcmVhdGVEZW55TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3I7XG5jb25zdCBOT09QID0gbmV3IE5vb3BBdHRyaWJ1dGVzUHJvY2Vzc29yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdHRyaWJ1dGVzUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NZXRlclNoYXJlZFN0YXRlID0gdm9pZCAwO1xuY29uc3QgSW5zdHJ1bWVudERlc2NyaXB0b3JfMSA9IHJlcXVpcmUoXCIuLi9JbnN0cnVtZW50RGVzY3JpcHRvclwiKTtcbmNvbnN0IE1ldGVyXzEgPSByZXF1aXJlKFwiLi4vTWV0ZXJcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgQXN5bmNNZXRyaWNTdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9Bc3luY01ldHJpY1N0b3JhZ2VcIik7XG5jb25zdCBNZXRyaWNTdG9yYWdlUmVnaXN0cnlfMSA9IHJlcXVpcmUoXCIuL01ldHJpY1N0b3JhZ2VSZWdpc3RyeVwiKTtcbmNvbnN0IE11bHRpV3JpdGFibGVNZXRyaWNTdG9yYWdlXzEgPSByZXF1aXJlKFwiLi9NdWx0aVdyaXRhYmxlTWV0cmljU3RvcmFnZVwiKTtcbmNvbnN0IE9ic2VydmFibGVSZWdpc3RyeV8xID0gcmVxdWlyZShcIi4vT2JzZXJ2YWJsZVJlZ2lzdHJ5XCIpO1xuY29uc3QgU3luY01ldHJpY1N0b3JhZ2VfMSA9IHJlcXVpcmUoXCIuL1N5bmNNZXRyaWNTdG9yYWdlXCIpO1xuY29uc3QgQXR0cmlidXRlc1Byb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4uL3ZpZXcvQXR0cmlidXRlc1Byb2Nlc3NvclwiKTtcbi8qKlxuICogQW4gaW50ZXJuYWwgcmVjb3JkIGZvciBzaGFyZWQgbWV0ZXIgcHJvdmlkZXIgc3RhdGVzLlxuICovXG5jbGFzcyBNZXRlclNoYXJlZFN0YXRlIHtcbiAgICBfbWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlO1xuICAgIF9pbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICBtZXRyaWNTdG9yYWdlUmVnaXN0cnkgPSBuZXcgTWV0cmljU3RvcmFnZVJlZ2lzdHJ5XzEuTWV0cmljU3RvcmFnZVJlZ2lzdHJ5KCk7XG4gICAgb2JzZXJ2YWJsZVJlZ2lzdHJ5ID0gbmV3IE9ic2VydmFibGVSZWdpc3RyeV8xLk9ic2VydmFibGVSZWdpc3RyeSgpO1xuICAgIG1ldGVyO1xuICAgIGNvbnN0cnVjdG9yKF9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUsIF9pbnN0cnVtZW50YXRpb25TY29wZSkge1xuICAgICAgICB0aGlzLl9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUgPSBfbWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlO1xuICAgICAgICB0aGlzLl9pbnN0cnVtZW50YXRpb25TY29wZSA9IF9pbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICAgICAgdGhpcy5tZXRlciA9IG5ldyBNZXRlcl8xLk1ldGVyKHRoaXMpO1xuICAgIH1cbiAgICByZWdpc3Rlck1ldHJpY1N0b3JhZ2UoZGVzY3JpcHRvcikge1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMuX3JlZ2lzdGVyTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yLCBTeW5jTWV0cmljU3RvcmFnZV8xLlN5bmNNZXRyaWNTdG9yYWdlKTtcbiAgICAgICAgaWYgKHN0b3JhZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2VzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTXVsdGlXcml0YWJsZU1ldHJpY1N0b3JhZ2VfMS5NdWx0aU1ldHJpY1N0b3JhZ2Uoc3RvcmFnZXMpO1xuICAgIH1cbiAgICByZWdpc3RlckFzeW5jTWV0cmljU3RvcmFnZShkZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fcmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IsIEFzeW5jTWV0cmljU3RvcmFnZV8xLkFzeW5jTWV0cmljU3RvcmFnZSk7XG4gICAgICAgIHJldHVybiBzdG9yYWdlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNvbGxlY3RvciBvcGFxdWUgaGFuZGxlIG9mIHtAbGluayBNZXRyaWNDb2xsZWN0b3J9IHdoaWNoIGluaXRpYXRlZCB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gY29sbGVjdGlvblRpbWUgdGhlIEhyVGltZSBhdCB3aGljaCB0aGUgY29sbGVjdGlvbiB3YXMgaW5pdGlhdGVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgZm9yIGNvbGxlY3Rpb24uXG4gICAgICogQHJldHVybnMgdGhlIGxpc3Qgb2YgbWV0cmljIGRhdGEgY29sbGVjdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbGxlY3QoY29sbGVjdG9yLCBjb2xsZWN0aW9uVGltZSwgb3B0aW9ucykge1xuICAgICAgICAvKipcbiAgICAgICAgICogMS4gQ2FsbCBhbGwgb2JzZXJ2YWJsZSBjYWxsYmFja3MgZmlyc3QuXG4gICAgICAgICAqIDIuIENvbGxlY3QgbWV0cmljIHJlc3VsdCBmb3IgdGhlIGNvbGxlY3Rvci5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IHRoaXMub2JzZXJ2YWJsZVJlZ2lzdHJ5Lm9ic2VydmUoY29sbGVjdGlvblRpbWUsIG9wdGlvbnM/LnRpbWVvdXRNaWxsaXMpO1xuICAgICAgICBjb25zdCBzdG9yYWdlcyA9IHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LmdldFN0b3JhZ2VzKGNvbGxlY3Rvcik7XG4gICAgICAgIC8vIHByZXZlbnQgbW9yZSBhbGxvY2F0aW9ucyBpZiB0aGVyZSBhcmUgbm8gc3RvcmFnZXMuXG4gICAgICAgIGlmIChzdG9yYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldHJpY0RhdGFMaXN0ID0gc3RvcmFnZXNcbiAgICAgICAgICAgIC5tYXAobWV0cmljU3RvcmFnZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWV0cmljU3RvcmFnZS5jb2xsZWN0KGNvbGxlY3RvciwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih1dGlsc18xLmlzTm90TnVsbGlzaCk7XG4gICAgICAgIC8vIHNraXAgdGhpcyBzY29wZSBpZiBubyBkYXRhIHdhcyBjb2xsZWN0ZWQgKHN0b3JhZ2UgY3JlYXRlZCwgYnV0IG5vIGRhdGEgb2JzZXJ2ZWQpXG4gICAgICAgIGlmIChtZXRyaWNEYXRhTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9ycyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY29wZU1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICBzY29wZTogdGhpcy5faW5zdHJ1bWVudGF0aW9uU2NvcGUsXG4gICAgICAgICAgICAgICAgbWV0cmljczogbWV0cmljRGF0YUxpc3QsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3JzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcmVnaXN0ZXJNZXRyaWNTdG9yYWdlKGRlc2NyaXB0b3IsIE1ldHJpY1N0b3JhZ2VUeXBlKSB7XG4gICAgICAgIGNvbnN0IHZpZXdzID0gdGhpcy5fbWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlLnZpZXdSZWdpc3RyeS5maW5kVmlld3MoZGVzY3JpcHRvciwgdGhpcy5faW5zdHJ1bWVudGF0aW9uU2NvcGUpO1xuICAgICAgICBsZXQgc3RvcmFnZXMgPSB2aWV3cy5tYXAodmlldyA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3RGVzY3JpcHRvciA9ICgwLCBJbnN0cnVtZW50RGVzY3JpcHRvcl8xLmNyZWF0ZUluc3RydW1lbnREZXNjcmlwdG9yV2l0aFZpZXcpKHZpZXcsIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgY29uc3QgY29tcGF0aWJsZVN0b3JhZ2UgPSB0aGlzLm1ldHJpY1N0b3JhZ2VSZWdpc3RyeS5maW5kT3JVcGRhdGVDb21wYXRpYmxlU3RvcmFnZSh2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgICAgICBpZiAoY29tcGF0aWJsZVN0b3JhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXRpYmxlU3RvcmFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSB2aWV3LmFnZ3JlZ2F0aW9uLmNyZWF0ZUFnZ3JlZ2F0b3Iodmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgY29uc3Qgdmlld1N0b3JhZ2UgPSBuZXcgTWV0cmljU3RvcmFnZVR5cGUodmlld0Rlc2NyaXB0b3IsIGFnZ3JlZ2F0b3IsIHZpZXcuYXR0cmlidXRlc1Byb2Nlc3NvciwgdGhpcy5fbWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlLm1ldHJpY0NvbGxlY3RvcnMsIHZpZXcuYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0KTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LnJlZ2lzdGVyKHZpZXdTdG9yYWdlKTtcbiAgICAgICAgICAgIHJldHVybiB2aWV3U3RvcmFnZTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBwZXItY29sbGVjdG9yIGFnZ3JlZ2F0aW9ucyBpZiBubyB2aWV3IGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBpbnN0cnVtZW50LlxuICAgICAgICBpZiAoc3RvcmFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJDb2xsZWN0b3JBZ2dyZWdhdGlvbnMgPSB0aGlzLl9tZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUuc2VsZWN0QWdncmVnYXRpb25zKGRlc2NyaXB0b3IudHlwZSk7XG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0b3JTdG9yYWdlcyA9IHBlckNvbGxlY3RvckFnZ3JlZ2F0aW9ucy5tYXAoKFtjb2xsZWN0b3IsIGFnZ3JlZ2F0aW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhdGlibGVTdG9yYWdlID0gdGhpcy5tZXRyaWNTdG9yYWdlUmVnaXN0cnkuZmluZE9yVXBkYXRlQ29tcGF0aWJsZUNvbGxlY3RvclN0b3JhZ2UoY29sbGVjdG9yLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGF0aWJsZVN0b3JhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGF0aWJsZVN0b3JhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdGlvbi5jcmVhdGVBZ2dyZWdhdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5TGltaXQgPSBjb2xsZWN0b3Iuc2VsZWN0Q2FyZGluYWxpdHlMaW1pdChkZXNjcmlwdG9yLnR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTWV0cmljU3RvcmFnZVR5cGUoZGVzY3JpcHRvciwgYWdncmVnYXRvciwgKDAsIEF0dHJpYnV0ZXNQcm9jZXNzb3JfMS5jcmVhdGVOb29wQXR0cmlidXRlc1Byb2Nlc3NvcikoKSwgW2NvbGxlY3Rvcl0sIGNhcmRpbmFsaXR5TGltaXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljU3RvcmFnZVJlZ2lzdHJ5LnJlZ2lzdGVyRm9yQ29sbGVjdG9yKGNvbGxlY3Rvciwgc3RvcmFnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0b3JhZ2VzID0gc3RvcmFnZXMuY29uY2F0KGNvbGxlY3RvclN0b3JhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmFnZXM7XG4gICAgfVxufVxuZXhwb3J0cy5NZXRlclNoYXJlZFN0YXRlID0gTWV0ZXJTaGFyZWRTdGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyU2hhcmVkU3RhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBWaWV3UmVnaXN0cnlfMSA9IHJlcXVpcmUoXCIuLi92aWV3L1ZpZXdSZWdpc3RyeVwiKTtcbmNvbnN0IE1ldGVyU2hhcmVkU3RhdGVfMSA9IHJlcXVpcmUoXCIuL01ldGVyU2hhcmVkU3RhdGVcIik7XG5jb25zdCBBZ2dyZWdhdGlvbk9wdGlvbl8xID0gcmVxdWlyZShcIi4uL3ZpZXcvQWdncmVnYXRpb25PcHRpb25cIik7XG4vKipcbiAqIEFuIGludGVybmFsIHJlY29yZCBmb3Igc2hhcmVkIG1ldGVyIHByb3ZpZGVyIHN0YXRlcy5cbiAqL1xuY2xhc3MgTWV0ZXJQcm92aWRlclNoYXJlZFN0YXRlIHtcbiAgICByZXNvdXJjZTtcbiAgICB2aWV3UmVnaXN0cnkgPSBuZXcgVmlld1JlZ2lzdHJ5XzEuVmlld1JlZ2lzdHJ5KCk7XG4gICAgbWV0cmljQ29sbGVjdG9ycyA9IFtdO1xuICAgIG1ldGVyU2hhcmVkU3RhdGVzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHJlc291cmNlKSB7XG4gICAgICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICB9XG4gICAgZ2V0TWV0ZXJTaGFyZWRTdGF0ZShpbnN0cnVtZW50YXRpb25TY29wZSkge1xuICAgICAgICBjb25zdCBpZCA9ICgwLCB1dGlsc18xLmluc3RydW1lbnRhdGlvblNjb3BlSWQpKGluc3RydW1lbnRhdGlvblNjb3BlKTtcbiAgICAgICAgbGV0IG1ldGVyU2hhcmVkU3RhdGUgPSB0aGlzLm1ldGVyU2hhcmVkU3RhdGVzLmdldChpZCk7XG4gICAgICAgIGlmIChtZXRlclNoYXJlZFN0YXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIG1ldGVyU2hhcmVkU3RhdGUgPSBuZXcgTWV0ZXJTaGFyZWRTdGF0ZV8xLk1ldGVyU2hhcmVkU3RhdGUodGhpcywgaW5zdHJ1bWVudGF0aW9uU2NvcGUpO1xuICAgICAgICAgICAgdGhpcy5tZXRlclNoYXJlZFN0YXRlcy5zZXQoaWQsIG1ldGVyU2hhcmVkU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRlclNoYXJlZFN0YXRlO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvbnMoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sbGVjdG9yIG9mIHRoaXMubWV0cmljQ29sbGVjdG9ycykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW1xuICAgICAgICAgICAgICAgIGNvbGxlY3RvcixcbiAgICAgICAgICAgICAgICAoMCwgQWdncmVnYXRpb25PcHRpb25fMS50b0FnZ3JlZ2F0aW9uKShjb2xsZWN0b3Iuc2VsZWN0QWdncmVnYXRpb24oaW5zdHJ1bWVudFR5cGUpKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5NZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUgPSBNZXRlclByb3ZpZGVyU2hhcmVkU3RhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRlclByb3ZpZGVyU2hhcmVkU3RhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldHJpY0NvbGxlY3RvciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuLyoqXG4gKiBBbiBpbnRlcm5hbCBvcGFxdWUgaW50ZXJmYWNlIHRoYXQgdGhlIE1ldHJpY1JlYWRlciByZWNlaXZlcyBhc1xuICogTWV0cmljUHJvZHVjZXIuIEl0IGFjdHMgYXMgdGhlIHN0b3JhZ2Uga2V5IHRvIHRoZSBpbnRlcm5hbCBtZXRyaWMgc3RyZWFtXG4gKiBzdGF0ZSBmb3IgZWFjaCBNZXRyaWNSZWFkZXIuXG4gKi9cbmNsYXNzIE1ldHJpY0NvbGxlY3RvciB7XG4gICAgX3NoYXJlZFN0YXRlO1xuICAgIF9tZXRyaWNSZWFkZXI7XG4gICAgY29uc3RydWN0b3IoX3NoYXJlZFN0YXRlLCBfbWV0cmljUmVhZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlID0gX3NoYXJlZFN0YXRlO1xuICAgICAgICB0aGlzLl9tZXRyaWNSZWFkZXIgPSBfbWV0cmljUmVhZGVyO1xuICAgIH1cbiAgICBhc3luYyBjb2xsZWN0KG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblRpbWUgPSAoMCwgY29yZV8xLm1pbGxpc1RvSHJUaW1lKShEYXRlLm5vdygpKTtcbiAgICAgICAgY29uc3Qgc2NvcGVNZXRyaWNzID0gW107XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgICBjb25zdCBtZXRlckNvbGxlY3Rpb25Qcm9taXNlcyA9IEFycmF5LmZyb20odGhpcy5fc2hhcmVkU3RhdGUubWV0ZXJTaGFyZWRTdGF0ZXMudmFsdWVzKCkpLm1hcChhc3luYyAobWV0ZXJTaGFyZWRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IG1ldGVyU2hhcmVkU3RhdGUuY29sbGVjdCh0aGlzLCBjb2xsZWN0aW9uVGltZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBzY29wZSBtZXRyaWNzIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQ/LnNjb3BlTWV0cmljcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzLnB1c2goY3VycmVudC5zY29wZU1ldHJpY3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb25seSBhZGQgZXJyb3JzIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQ/LmVycm9ycyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4uY3VycmVudC5lcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobWV0ZXJDb2xsZWN0aW9uUHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzb3VyY2VNZXRyaWNzOiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3NoYXJlZFN0YXRlLnJlc291cmNlLFxuICAgICAgICAgICAgICAgIHNjb3BlTWV0cmljczogc2NvcGVNZXRyaWNzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxlZ2F0ZXMgZm9yIE1ldHJpY1JlYWRlci5mb3JjZUZsdXNoLlxuICAgICAqL1xuICAgIGFzeW5jIGZvcmNlRmx1c2gob3B0aW9ucykge1xuICAgICAgICBhd2FpdCB0aGlzLl9tZXRyaWNSZWFkZXIuZm9yY2VGbHVzaChvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZWdhdGVzIGZvciBNZXRyaWNSZWFkZXIuc2h1dGRvd24uXG4gICAgICovXG4gICAgYXN5bmMgc2h1dGRvd24ob3B0aW9ucykge1xuICAgICAgICBhd2FpdCB0aGlzLl9tZXRyaWNSZWFkZXIuc2h1dGRvd24ob3B0aW9ucyk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1JlYWRlci5zZWxlY3RBZ2dyZWdhdGlvblRlbXBvcmFsaXR5KGluc3RydW1lbnRUeXBlKTtcbiAgICB9XG4gICAgc2VsZWN0QWdncmVnYXRpb24oaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1JlYWRlci5zZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbGVjdCB0aGUgY2FyZGluYWxpdHkgbGltaXQgZm9yIHRoZSBnaXZlbiB7QGxpbmsgSW5zdHJ1bWVudFR5cGV9IGZvciB0aGlzXG4gICAgICogY29sbGVjdG9yLlxuICAgICAqL1xuICAgIHNlbGVjdENhcmRpbmFsaXR5TGltaXQoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1JlYWRlci5zZWxlY3RDYXJkaW5hbGl0eUxpbWl0Py4oaW5zdHJ1bWVudFR5cGUpID8/IDIwMDA7XG4gICAgfVxufVxuZXhwb3J0cy5NZXRyaWNDb2xsZWN0b3IgPSBNZXRyaWNDb2xsZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRyaWNDb2xsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4YWN0UHJlZGljYXRlID0gZXhwb3J0cy5QYXR0ZXJuUHJlZGljYXRlID0gdm9pZCAwO1xuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXJlZ2V4LWVzY2FwaW5nXG4vLyBlc2NhcGUgXiAkIFxcIC4gICsgPyAoICkgWyBdIHsgfSB8XG4vLyBkbyBub3QgbmVlZCB0byBlc2NhcGUgKiBhcyB3ZSBpbnRlcnByZXQgaXQgYXMgd2lsZGNhcmRcbmNvbnN0IEVTQ0FQRSA9IC9bXFxeJFxcXFwuKz8oKVtcXF17fXxdL2c7XG4vKipcbiAqIFdpbGRjYXJkIHBhdHRlcm4gcHJlZGljYXRlLCBzdXBwb3J0cyBwYXR0ZXJucyBsaWtlIGAqYCwgYGZvbypgLCBgKmJhcmAuXG4gKi9cbmNsYXNzIFBhdHRlcm5QcmVkaWNhdGUge1xuICAgIF9tYXRjaEFsbDtcbiAgICBfcmVnZXhwO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICcqJykge1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2hBbGwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fcmVnZXhwID0gLy4qLztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21hdGNoQWxsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9yZWdleHAgPSBuZXcgUmVnRXhwKFBhdHRlcm5QcmVkaWNhdGUuZXNjYXBlUGF0dGVybihwYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWF0Y2goc3RyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXRjaEFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZ2V4cC50ZXN0KHN0cik7XG4gICAgfVxuICAgIHN0YXRpYyBlc2NhcGVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGBeJHtwYXR0ZXJuLnJlcGxhY2UoRVNDQVBFLCAnXFxcXCQmJykucmVwbGFjZSgnKicsICcuKicpfSRgO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzV2lsZGNhcmQocGF0dGVybikge1xuICAgICAgICByZXR1cm4gcGF0dGVybi5pbmNsdWRlcygnKicpO1xuICAgIH1cbn1cbmV4cG9ydHMuUGF0dGVyblByZWRpY2F0ZSA9IFBhdHRlcm5QcmVkaWNhdGU7XG5jbGFzcyBFeGFjdFByZWRpY2F0ZSB7XG4gICAgX21hdGNoQWxsO1xuICAgIF9wYXR0ZXJuO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5fbWF0Y2hBbGwgPSBwYXR0ZXJuID09PSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIH1cbiAgICBtYXRjaChzdHIpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hdGNoQWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyID09PSB0aGlzLl9wYXR0ZXJuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0cy5FeGFjdFByZWRpY2F0ZSA9IEV4YWN0UHJlZGljYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJlZGljYXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnN0cnVtZW50U2VsZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBQcmVkaWNhdGVfMSA9IHJlcXVpcmUoXCIuL1ByZWRpY2F0ZVwiKTtcbmNsYXNzIEluc3RydW1lbnRTZWxlY3RvciB7XG4gICAgX25hbWVGaWx0ZXI7XG4gICAgX3R5cGU7XG4gICAgX3VuaXRGaWx0ZXI7XG4gICAgY29uc3RydWN0b3IoY3JpdGVyaWEpIHtcbiAgICAgICAgdGhpcy5fbmFtZUZpbHRlciA9IG5ldyBQcmVkaWNhdGVfMS5QYXR0ZXJuUHJlZGljYXRlKGNyaXRlcmlhPy5uYW1lID8/ICcqJyk7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBjcml0ZXJpYT8udHlwZTtcbiAgICAgICAgdGhpcy5fdW5pdEZpbHRlciA9IG5ldyBQcmVkaWNhdGVfMS5FeGFjdFByZWRpY2F0ZShjcml0ZXJpYT8udW5pdCk7XG4gICAgfVxuICAgIGdldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cbiAgICBnZXROYW1lRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZUZpbHRlcjtcbiAgICB9XG4gICAgZ2V0VW5pdEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VuaXRGaWx0ZXI7XG4gICAgfVxufVxuZXhwb3J0cy5JbnN0cnVtZW50U2VsZWN0b3IgPSBJbnN0cnVtZW50U2VsZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnN0cnVtZW50U2VsZWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldGVyU2VsZWN0b3IgPSB2b2lkIDA7XG5jb25zdCBQcmVkaWNhdGVfMSA9IHJlcXVpcmUoXCIuL1ByZWRpY2F0ZVwiKTtcbmNsYXNzIE1ldGVyU2VsZWN0b3Ige1xuICAgIF9uYW1lRmlsdGVyO1xuICAgIF92ZXJzaW9uRmlsdGVyO1xuICAgIF9zY2hlbWFVcmxGaWx0ZXI7XG4gICAgY29uc3RydWN0b3IoY3JpdGVyaWEpIHtcbiAgICAgICAgdGhpcy5fbmFtZUZpbHRlciA9IG5ldyBQcmVkaWNhdGVfMS5FeGFjdFByZWRpY2F0ZShjcml0ZXJpYT8ubmFtZSk7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25GaWx0ZXIgPSBuZXcgUHJlZGljYXRlXzEuRXhhY3RQcmVkaWNhdGUoY3JpdGVyaWE/LnZlcnNpb24pO1xuICAgICAgICB0aGlzLl9zY2hlbWFVcmxGaWx0ZXIgPSBuZXcgUHJlZGljYXRlXzEuRXhhY3RQcmVkaWNhdGUoY3JpdGVyaWE/LnNjaGVtYVVybCk7XG4gICAgfVxuICAgIGdldE5hbWVGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lRmlsdGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUT0RPOiBzZW12ZXIgZmlsdGVyPyBubyBzcGVjIHlldC5cbiAgICAgKi9cbiAgICBnZXRWZXJzaW9uRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbkZpbHRlcjtcbiAgICB9XG4gICAgZ2V0U2NoZW1hVXJsRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1hVXJsRmlsdGVyO1xuICAgIH1cbn1cbmV4cG9ydHMuTWV0ZXJTZWxlY3RvciA9IE1ldGVyU2VsZWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXRlclNlbGVjdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WaWV3ID0gdm9pZCAwO1xuY29uc3QgUHJlZGljYXRlXzEgPSByZXF1aXJlKFwiLi9QcmVkaWNhdGVcIik7XG5jb25zdCBBdHRyaWJ1dGVzUHJvY2Vzc29yXzEgPSByZXF1aXJlKFwiLi9BdHRyaWJ1dGVzUHJvY2Vzc29yXCIpO1xuY29uc3QgSW5zdHJ1bWVudFNlbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9JbnN0cnVtZW50U2VsZWN0b3JcIik7XG5jb25zdCBNZXRlclNlbGVjdG9yXzEgPSByZXF1aXJlKFwiLi9NZXRlclNlbGVjdG9yXCIpO1xuY29uc3QgQWdncmVnYXRpb25PcHRpb25fMSA9IHJlcXVpcmUoXCIuL0FnZ3JlZ2F0aW9uT3B0aW9uXCIpO1xuZnVuY3Rpb24gaXNTZWxlY3Rvck5vdFByb3ZpZGVkKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKG9wdGlvbnMuaW5zdHJ1bWVudE5hbWUgPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zLmluc3RydW1lbnRUeXBlID09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucy5pbnN0cnVtZW50VW5pdCA9PSBudWxsICYmXG4gICAgICAgIG9wdGlvbnMubWV0ZXJOYW1lID09IG51bGwgJiZcbiAgICAgICAgb3B0aW9ucy5tZXRlclZlcnNpb24gPT0gbnVsbCAmJlxuICAgICAgICBvcHRpb25zLm1ldGVyU2NoZW1hVXJsID09IG51bGwpO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVWaWV3T3B0aW9ucyh2aWV3T3B0aW9ucykge1xuICAgIC8vIElmIG5vIGNyaXRlcmlhIGlzIHByb3ZpZGVkLCB0aGUgU0RLIFNIT1VMRCB0cmVhdCBpdCBhcyBhbiBlcnJvci5cbiAgICAvLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBTREsgaW1wbGVtZW50YXRpb25zIGZhaWwgZmFzdC5cbiAgICBpZiAoaXNTZWxlY3Rvck5vdFByb3ZpZGVkKHZpZXdPcHRpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdmlldyB3aXRoIG5vIHNlbGVjdG9yIGFyZ3VtZW50cyBzdXBwbGllZCcpO1xuICAgIH1cbiAgICAvLyB0aGUgU0RLIFNIT1VMRCBOT1QgYWxsb3cgVmlld3Mgd2l0aCBhIHNwZWNpZmllZCBuYW1lIHRvIGJlIGRlY2xhcmVkIHdpdGggaW5zdHJ1bWVudCBzZWxlY3RvcnMgdGhhdFxuICAgIC8vIG1heSBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpbnN0cnVtZW50IChlLmcuIHdpbGQgY2FyZCBpbnN0cnVtZW50IG5hbWUpIGluIHRoZSBzYW1lIE1ldGVyLlxuICAgIGlmICh2aWV3T3B0aW9ucy5uYW1lICE9IG51bGwgJiZcbiAgICAgICAgKHZpZXdPcHRpb25zPy5pbnN0cnVtZW50TmFtZSA9PSBudWxsIHx8XG4gICAgICAgICAgICBQcmVkaWNhdGVfMS5QYXR0ZXJuUHJlZGljYXRlLmhhc1dpbGRjYXJkKHZpZXdPcHRpb25zLmluc3RydW1lbnROYW1lKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyB3aXRoIGEgc3BlY2lmaWVkIG5hbWUgbXVzdCBiZSBkZWNsYXJlZCB3aXRoIGFuIGluc3RydW1lbnQgc2VsZWN0b3IgdGhhdCBzZWxlY3RzIGF0IG1vc3Qgb25lIGluc3RydW1lbnQgcGVyIG1ldGVyLicpO1xuICAgIH1cbn1cbi8qKlxuICogQ2FuIGJlIHBhc3NlZCB0byBhIHtAbGluayBNZXRlclByb3ZpZGVyfSB0byBzZWxlY3QgaW5zdHJ1bWVudHMgYW5kIGFsdGVyIHRoZWlyIG1ldHJpYyBzdHJlYW0uXG4gKi9cbmNsYXNzIFZpZXcge1xuICAgIG5hbWU7XG4gICAgZGVzY3JpcHRpb247XG4gICAgYWdncmVnYXRpb247XG4gICAgYXR0cmlidXRlc1Byb2Nlc3NvcjtcbiAgICBpbnN0cnVtZW50U2VsZWN0b3I7XG4gICAgbWV0ZXJTZWxlY3RvcjtcbiAgICBhZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IHtAbGluayBWaWV3fSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIFBhcmFtZXRlcnMgY2FuIGJlIGNhdGVnb3JpemVkIGFzIHR3byB0eXBlczpcbiAgICAgKiAgSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6IFVzZWQgdG8gZGVzY3JpYmUgdGhlIGluc3RydW1lbnQocykgdGhpcyB2aWV3IHdpbGwgYmUgYXBwbGllZCB0by5cbiAgICAgKiAgV2lsbCBiZSB0cmVhdGVkIGFzIGFkZGl0aXZlICh0aGUgSW5zdHJ1bWVudCBoYXMgdG8gbWVldCBhbGwgdGhlIHByb3ZpZGVkIGNyaXRlcmlhIHRvIGJlIHNlbGVjdGVkKS5cbiAgICAgKlxuICAgICAqICBNZXRyaWMgc3RyZWFtIGFsdGVyaW5nOiBBbHRlciB0aGUgbWV0cmljIHN0cmVhbSBvZiBpbnN0cnVtZW50cyBzZWxlY3RlZCBieSBpbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyB7QGxpbmsgVmlld09wdGlvbnN9IGZvciBhbHRlcmluZyB0aGUgbWV0cmljIHN0cmVhbSBhbmQgaW5zdHJ1bWVudCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLm5hbWVcbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIFRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBtZXRyaWNzIHN0cmVhbS5cbiAgICAgKiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgb3JpZ2luYWwgSW5zdHJ1bWVudCBuYW1lIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuZGVzY3JpcHRpb25cbiAgICAgKiBBbHRlcnMgdGhlIG1ldHJpYyBzdHJlYW06XG4gICAgICogIFRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWV0cmljcyBzdHJlYW0uXG4gICAgICogIElmIG5vdCBwcm92aWRlZCwgdGhlIG9yaWdpbmFsIEluc3RydW1lbnQgZGVzY3JpcHRpb24gd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmF0dHJpYnV0ZXNQcm9jZXNzb3JzXG4gICAgICogQWx0ZXJzIHRoZSBtZXRyaWMgc3RyZWFtOlxuICAgICAqICBJZiBwcm92aWRlZCwgdGhlIGF0dHJpYnV0ZXMgd2lsbCBiZSBtb2RpZmllZCBhcyBkZWZpbmVkIGJ5IHRoZSBhZGRlZCBwcm9jZXNzb3JzLlxuICAgICAqICBJZiBub3QgcHJvdmlkZWQsIGFsbCBhdHRyaWJ1dGUga2V5cyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuYWdncmVnYXRpb25DYXJkaW5hbGl0eUxpbWl0XG4gICAgICogQWx0ZXJzIHRoZSBtZXRyaWMgc3RyZWFtOlxuICAgICAqICBTZXRzIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiB1bmlxdWUgYXR0cmlidXRlIGNvbWJpbmF0aW9ucyAoY2FyZGluYWxpdHkpIHRoYXQgY2FuIGJlIGFnZ3JlZ2F0ZWQuXG4gICAgICogIElmIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgbGltaXQgb2YgMjAwMCB3aWxsIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmFnZ3JlZ2F0aW9uXG4gICAgICogQWx0ZXJzIHRoZSBtZXRyaWMgc3RyZWFtOlxuICAgICAqICBBbHRlcnMgdGhlIHtAbGluayBBZ2dyZWdhdGlvbn0gb2YgdGhlIG1ldHJpYyBzdHJlYW0uXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLmluc3RydW1lbnROYW1lXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIE9yaWdpbmFsIG5hbWUgb2YgdGhlIEluc3RydW1lbnQocykgd2l0aCB3aWxkY2FyZCBzdXBwb3J0LlxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucy5pbnN0cnVtZW50VHlwZVxuICAgICAqIEluc3RydW1lbnQgc2VsZWN0aW9uIGNyaXRlcmlhOlxuICAgICAqICBUaGUgb3JpZ2luYWwgdHlwZSBvZiB0aGUgSW5zdHJ1bWVudChzKS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMuaW5zdHJ1bWVudFVuaXRcbiAgICAgKiBJbnN0cnVtZW50IHNlbGVjdGlvbiBjcml0ZXJpYTpcbiAgICAgKiAgVGhlIHVuaXQgb2YgdGhlIEluc3RydW1lbnQocykuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLm1ldGVyTmFtZVxuICAgICAqIEluc3RydW1lbnQgc2VsZWN0aW9uIGNyaXRlcmlhOlxuICAgICAqICBUaGUgbmFtZSBvZiB0aGUgTWV0ZXIuIE5vIHdpbGRjYXJkIHN1cHBvcnQsIG5hbWUgbXVzdCBtYXRjaCB0aGUgbWV0ZXIgZXhhY3RseS5cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMubWV0ZXJWZXJzaW9uXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIFRoZSB2ZXJzaW9uIG9mIHRoZSBNZXRlci4gTm8gd2lsZGNhcmQgc3VwcG9ydCwgdmVyc2lvbiBtdXN0IG1hdGNoIGV4YWN0bHkuXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zLm1ldGVyU2NoZW1hVXJsXG4gICAgICogSW5zdHJ1bWVudCBzZWxlY3Rpb24gY3JpdGVyaWE6XG4gICAgICogIFRoZSBzY2hlbWEgVVJMIG9mIHRoZSBNZXRlci4gTm8gd2lsZGNhcmQgc3VwcG9ydCwgc2NoZW1hIFVSTCBtdXN0IG1hdGNoIGV4YWN0bHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIENyZWF0ZSBhIHZpZXcgdGhhdCBjaGFuZ2VzIHRoZSBJbnN0cnVtZW50ICdteS5pbnN0cnVtZW50JyB0byB1c2UgdG8gYW5cbiAgICAgKiAvLyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uIHdpdGggdGhlIGJvdW5kYXJpZXMgWzIwLCAzMCwgNDBdXG4gICAgICogbmV3IFZpZXcoe1xuICAgICAqICAgYWdncmVnYXRpb246IG5ldyBFeHBsaWNpdEJ1Y2tldEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uKFsyMCwgMzAsIDQwXSksXG4gICAgICogICBpbnN0cnVtZW50TmFtZTogJ215Lmluc3RydW1lbnQnXG4gICAgICogfSlcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih2aWV3T3B0aW9ucykge1xuICAgICAgICB2YWxpZGF0ZVZpZXdPcHRpb25zKHZpZXdPcHRpb25zKTtcbiAgICAgICAgLy8gQ3JlYXRlIG11bHRpLXByb2Nlc3NvciBpZiBhdHRyaWJ1dGVzUHJvY2Vzc29ycyBhcmUgZGVmaW5lZC5cbiAgICAgICAgaWYgKHZpZXdPcHRpb25zLmF0dHJpYnV0ZXNQcm9jZXNzb3JzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1Byb2Nlc3NvciA9ICgwLCBBdHRyaWJ1dGVzUHJvY2Vzc29yXzEuY3JlYXRlTXVsdGlBdHRyaWJ1dGVzUHJvY2Vzc29yKSh2aWV3T3B0aW9ucy5hdHRyaWJ1dGVzUHJvY2Vzc29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNQcm9jZXNzb3IgPSAoMCwgQXR0cmlidXRlc1Byb2Nlc3Nvcl8xLmNyZWF0ZU5vb3BBdHRyaWJ1dGVzUHJvY2Vzc29yKSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IHZpZXdPcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB2aWV3T3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbiA9ICgwLCBBZ2dyZWdhdGlvbk9wdGlvbl8xLnRvQWdncmVnYXRpb24pKHZpZXdPcHRpb25zLmFnZ3JlZ2F0aW9uID8/IHsgdHlwZTogQWdncmVnYXRpb25PcHRpb25fMS5BZ2dyZWdhdGlvblR5cGUuREVGQVVMVCB9KTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50U2VsZWN0b3IgPSBuZXcgSW5zdHJ1bWVudFNlbGVjdG9yXzEuSW5zdHJ1bWVudFNlbGVjdG9yKHtcbiAgICAgICAgICAgIG5hbWU6IHZpZXdPcHRpb25zLmluc3RydW1lbnROYW1lLFxuICAgICAgICAgICAgdHlwZTogdmlld09wdGlvbnMuaW5zdHJ1bWVudFR5cGUsXG4gICAgICAgICAgICB1bml0OiB2aWV3T3B0aW9ucy5pbnN0cnVtZW50VW5pdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWV0ZXJTZWxlY3RvciA9IG5ldyBNZXRlclNlbGVjdG9yXzEuTWV0ZXJTZWxlY3Rvcih7XG4gICAgICAgICAgICBuYW1lOiB2aWV3T3B0aW9ucy5tZXRlck5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiB2aWV3T3B0aW9ucy5tZXRlclZlcnNpb24sXG4gICAgICAgICAgICBzY2hlbWFVcmw6IHZpZXdPcHRpb25zLm1ldGVyU2NoZW1hVXJsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQgPSB2aWV3T3B0aW9ucy5hZ2dyZWdhdGlvbkNhcmRpbmFsaXR5TGltaXQ7XG4gICAgfVxufVxuZXhwb3J0cy5WaWV3ID0gVmlldztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZpZXcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1ldGVyUHJvdmlkZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCByZXNvdXJjZXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXNcIik7XG5jb25zdCBNZXRlclByb3ZpZGVyU2hhcmVkU3RhdGVfMSA9IHJlcXVpcmUoXCIuL3N0YXRlL01ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZVwiKTtcbmNvbnN0IE1ldHJpY0NvbGxlY3Rvcl8xID0gcmVxdWlyZShcIi4vc3RhdGUvTWV0cmljQ29sbGVjdG9yXCIpO1xuY29uc3QgVmlld18xID0gcmVxdWlyZShcIi4vdmlldy9WaWV3XCIpO1xuLyoqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIHtAbGluayBNZXRlclByb3ZpZGVyfSBpbnRlcmZhY2UuXG4gKi9cbmNsYXNzIE1ldGVyUHJvdmlkZXIge1xuICAgIF9zaGFyZWRTdGF0ZTtcbiAgICBfc2h1dGRvd24gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlID0gbmV3IE1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZV8xLk1ldGVyUHJvdmlkZXJTaGFyZWRTdGF0ZShvcHRpb25zPy5yZXNvdXJjZSA/PyAoMCwgcmVzb3VyY2VzXzEuZGVmYXVsdFJlc291cmNlKSgpKTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnZpZXdzICE9IG51bGwgJiYgb3B0aW9ucy52aWV3cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXdPcHRpb24gb2Ygb3B0aW9ucy52aWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NoYXJlZFN0YXRlLnZpZXdSZWdpc3RyeS5hZGRWaWV3KG5ldyBWaWV3XzEuVmlldyh2aWV3T3B0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnM/LnJlYWRlcnMgIT0gbnVsbCAmJiBvcHRpb25zLnJlYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtZXRyaWNSZWFkZXIgb2Ygb3B0aW9ucy5yZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdG9yID0gbmV3IE1ldHJpY0NvbGxlY3Rvcl8xLk1ldHJpY0NvbGxlY3Rvcih0aGlzLl9zaGFyZWRTdGF0ZSwgbWV0cmljUmVhZGVyKTtcbiAgICAgICAgICAgICAgICBtZXRyaWNSZWFkZXIuc2V0TWV0cmljUHJvZHVjZXIoY29sbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaGFyZWRTdGF0ZS5tZXRyaWNDb2xsZWN0b3JzLnB1c2goY29sbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBtZXRlciB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBNZXRlclByb3ZpZGVyLlxuICAgICAqL1xuICAgIGdldE1ldGVyKG5hbWUsIHZlcnNpb24gPSAnJywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXNwZWNpZmljYXRpb24vYmxvYi9tYWluL3NwZWNpZmljYXRpb24vbWV0cmljcy9zZGsubWQjbWV0ZXItY3JlYXRpb25cbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0Egc2h1dGRvd24gTWV0ZXJQcm92aWRlciBjYW5ub3QgcHJvdmlkZSBhIE1ldGVyJyk7XG4gICAgICAgICAgICByZXR1cm4gKDAsIGFwaV8xLmNyZWF0ZU5vb3BNZXRlcikoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc2hhcmVkU3RhdGUuZ2V0TWV0ZXJTaGFyZWRTdGF0ZSh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgIHNjaGVtYVVybDogb3B0aW9ucy5zY2hlbWFVcmwsXG4gICAgICAgIH0pLm1ldGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0IGRvd24gdGhlIE1ldGVyUHJvdmlkZXIgYW5kIGFsbCByZWdpc3RlcmVkXG4gICAgICogTWV0cmljUmVhZGVycy5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gYWxsIGZsdXNoZXMgYXJlIGNvbXBsZXRlLlxuICAgICAqL1xuICAgIGFzeW5jIHNodXRkb3duKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ3NodXRkb3duIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBNZXRlclByb3ZpZGVyJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2h1dGRvd24gPSB0cnVlO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zaGFyZWRTdGF0ZS5tZXRyaWNDb2xsZWN0b3JzLm1hcChjb2xsZWN0b3IgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rvci5zaHV0ZG93bihvcHRpb25zKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOb3RpZmllcyBhbGwgcmVnaXN0ZXJlZCBNZXRyaWNSZWFkZXJzIHRvIGZsdXNoIGFueSBidWZmZXJlZCBkYXRhLlxuICAgICAqXG4gICAgICogUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiBhbGwgZmx1c2hlcyBhcmUgY29tcGxldGUuXG4gICAgICovXG4gICAgYXN5bmMgZm9yY2VGbHVzaChvcHRpb25zKSB7XG4gICAgICAgIC8vIGRvIG5vdCBmbHVzaCBhZnRlciBzaHV0ZG93blxuICAgICAgICBpZiAodGhpcy5fc2h1dGRvd24pIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignaW52YWxpZCBhdHRlbXB0IHRvIGZvcmNlIGZsdXNoIGFmdGVyIE1ldGVyUHJvdmlkZXIgc2h1dGRvd24nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zaGFyZWRTdGF0ZS5tZXRyaWNDb2xsZWN0b3JzLm1hcChjb2xsZWN0b3IgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rvci5mb3JjZUZsdXNoKG9wdGlvbnMpO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuZXhwb3J0cy5NZXRlclByb3ZpZGVyID0gTWV0ZXJQcm92aWRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ldGVyUHJvdmlkZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRpbWVvdXRFcnJvciA9IGV4cG9ydHMuY3JlYXRlRGVueUxpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yID0gZXhwb3J0cy5jcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yID0gZXhwb3J0cy5BZ2dyZWdhdGlvblR5cGUgPSBleHBvcnRzLk1ldGVyUHJvdmlkZXIgPSBleHBvcnRzLkNvbnNvbGVNZXRyaWNFeHBvcnRlciA9IGV4cG9ydHMuSW5NZW1vcnlNZXRyaWNFeHBvcnRlciA9IGV4cG9ydHMuUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIgPSBleHBvcnRzLk1ldHJpY1JlYWRlciA9IGV4cG9ydHMuSW5zdHJ1bWVudFR5cGUgPSBleHBvcnRzLkRhdGFQb2ludFR5cGUgPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB2b2lkIDA7XG52YXIgQWdncmVnYXRpb25UZW1wb3JhbGl0eV8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5XzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eTsgfSB9KTtcbnZhciBNZXRyaWNEYXRhXzEgPSByZXF1aXJlKFwiLi9leHBvcnQvTWV0cmljRGF0YVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRhdGFQb2ludFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ldHJpY0RhdGFfMS5EYXRhUG9pbnRUeXBlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5zdHJ1bWVudFR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ldHJpY0RhdGFfMS5JbnN0cnVtZW50VHlwZTsgfSB9KTtcbnZhciBNZXRyaWNSZWFkZXJfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9NZXRyaWNSZWFkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNZXRyaWNSZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ldHJpY1JlYWRlcl8xLk1ldHJpY1JlYWRlcjsgfSB9KTtcbnZhciBQZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L1BlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyXzEuUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXI7IH0gfSk7XG52YXIgSW5NZW1vcnlNZXRyaWNFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0luTWVtb3J5TWV0cmljRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbk1lbW9yeU1ldHJpY0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBJbk1lbW9yeU1ldHJpY0V4cG9ydGVyXzEuSW5NZW1vcnlNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbnZhciBDb25zb2xlTWV0cmljRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9Db25zb2xlTWV0cmljRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb25zb2xlTWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIENvbnNvbGVNZXRyaWNFeHBvcnRlcl8xLkNvbnNvbGVNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbnZhciBNZXRlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9NZXRlclByb3ZpZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWV0ZXJQcm92aWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWV0ZXJQcm92aWRlcl8xLk1ldGVyUHJvdmlkZXI7IH0gfSk7XG52YXIgQWdncmVnYXRpb25PcHRpb25fMSA9IHJlcXVpcmUoXCIuL3ZpZXcvQWdncmVnYXRpb25PcHRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBZ2dyZWdhdGlvblR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFnZ3JlZ2F0aW9uT3B0aW9uXzEuQWdncmVnYXRpb25UeXBlOyB9IH0pO1xudmFyIEF0dHJpYnV0ZXNQcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL3ZpZXcvQXR0cmlidXRlc1Byb2Nlc3NvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFsbG93TGlzdEF0dHJpYnV0ZXNQcm9jZXNzb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF0dHJpYnV0ZXNQcm9jZXNzb3JfMS5jcmVhdGVBbGxvd0xpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVueUxpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBdHRyaWJ1dGVzUHJvY2Vzc29yXzEuY3JlYXRlRGVueUxpc3RBdHRyaWJ1dGVzUHJvY2Vzc29yOyB9IH0pO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVvdXRFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5UaW1lb3V0RXJyb3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSB2b2lkIDA7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBBRERfTElTVEVORVJfTUVUSE9EUyA9IFtcbiAgICAnYWRkTGlzdGVuZXInLFxuICAgICdvbicsXG4gICAgJ29uY2UnLFxuICAgICdwcmVwZW5kTGlzdGVuZXInLFxuICAgICdwcmVwZW5kT25jZUxpc3RlbmVyJyxcbl07XG5jbGFzcyBBYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlciB7XG4gICAgLyoqXG4gICAgICogQmluZHMgYSB0aGUgY2VydGFpbiBjb250ZXh0IG9yIHRoZSBhY3RpdmUgb25lIHRvIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIHRoZW4gcmV0dXJucyB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIGNvbnRleHQgQSBjb250ZXh0IChzcGFuKSB0byBiZSBiaW5kIHRvIHRhcmdldFxuICAgICAqIEBwYXJhbSB0YXJnZXQgYSBmdW5jdGlvbiBvciBldmVudCBlbWl0dGVyLiBXaGVuIHRhcmdldCBvciBvbmUgb2YgaXRzIGNhbGxiYWNrcyBpcyBjYWxsZWQsXG4gICAgICogIHRoZSBwcm92aWRlZCBjb250ZXh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgYWN0aXZlIGNvbnRleHQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbC5cbiAgICAgKi9cbiAgICBiaW5kKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgZXZlbnRzXzEuRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmluZEV2ZW50RW1pdHRlcihjb250ZXh0LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmluZEZ1bmN0aW9uKGNvbnRleHQsIHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgX2JpbmRGdW5jdGlvbihjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHRXcmFwcGVyID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLndpdGgoY29udGV4dCwgKCkgPT4gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHRXcmFwcGVyLCAnbGVuZ3RoJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGFyZ2V0Lmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdCBpc24ndCBwb3NzaWJsZSB0byB0ZWxsIFR5cGVzY3JpcHQgdGhhdCBjb250ZXh0V3JhcHBlciBpcyB0aGUgc2FtZSBhcyBUXG4gICAgICAgICAqIHNvIHdlIGZvcmNlZCB0byBjYXN0IGFzIGFueSBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGNvbnRleHRXcmFwcGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBFdmVudEVtaXR0ZXIgY2FsbCB0aGVpciBjYWxsYmFjayB3aXRoIHRoZWlyIGNvbnRleHQsIHdoaWNoIHdlIGRvXG4gICAgICogbm90IHdhbnQsIGluc3RlYWQgd2Ugd2lsbCBiaW5kIGEgc3BlY2lmaWMgY29udGV4dCB0byBhbGwgY2FsbGJhY2tzIHRoYXRcbiAgICAgKiBnbyB0aHJvdWdoIGl0LlxuICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBjb250ZXh0IHdlIHdhbnQgdG8gYmluZFxuICAgICAqIEBwYXJhbSBlZSBFdmVudEVtaXR0ZXIgYW4gaW5zdGFuY2Ugb2YgRXZlbnRFbWl0dGVyIHRvIHBhdGNoXG4gICAgICovXG4gICAgX2JpbmRFdmVudEVtaXR0ZXIoY29udGV4dCwgZWUpIHtcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fZ2V0UGF0Y2hNYXAoZWUpO1xuICAgICAgICBpZiAobWFwICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gZWU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVBhdGNoTWFwKGVlKTtcbiAgICAgICAgLy8gcGF0Y2ggbWV0aG9kcyB0aGF0IGFkZCBhIGxpc3RlbmVyIHRvIHByb3BhZ2F0ZSBjb250ZXh0XG4gICAgICAgIEFERF9MSVNURU5FUl9NRVRIT0RTLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgICAgICAgICBpZiAoZWVbbWV0aG9kTmFtZV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBlZVttZXRob2ROYW1lXSA9IHRoaXMuX3BhdGNoQWRkTGlzdGVuZXIoZWUsIGVlW21ldGhvZE5hbWVdLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHBhdGNoIG1ldGhvZHMgdGhhdCByZW1vdmUgYSBsaXN0ZW5lclxuICAgICAgICBpZiAodHlwZW9mIGVlLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBlZS5yZW1vdmVMaXN0ZW5lciA9IHRoaXMuX3BhdGNoUmVtb3ZlTGlzdGVuZXIoZWUsIGVlLnJlbW92ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVlLm9mZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWUub2ZmID0gdGhpcy5fcGF0Y2hSZW1vdmVMaXN0ZW5lcihlZSwgZWUub2ZmKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXRjaCBtZXRob2QgdGhhdCByZW1vdmUgYWxsIGxpc3RlbmVyc1xuICAgICAgICBpZiAodHlwZW9mIGVlLnJlbW92ZUFsbExpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWUucmVtb3ZlQWxsTGlzdGVuZXJzID0gdGhpcy5fcGF0Y2hSZW1vdmVBbGxMaXN0ZW5lcnMoZWUsIGVlLnJlbW92ZUFsbExpc3RlbmVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBtZXRob2RzIHRoYXQgcmVtb3ZlIGEgZ2l2ZW4gbGlzdGVuZXIgc28gdGhhdCB3ZSBtYXRjaCB0aGUgXCJwYXRjaGVkXCJcbiAgICAgKiB2ZXJzaW9uIG9mIHRoYXQgbGlzdGVuZXIgKHRoZSBvbmUgdGhhdCBwcm9wYWdhdGUgY29udGV4dCkuXG4gICAgICogQHBhcmFtIGVlIEV2ZW50RW1pdHRlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBvcmlnaW5hbCByZWZlcmVuY2UgdG8gdGhlIHBhdGNoZWQgbWV0aG9kXG4gICAgICovXG4gICAgX3BhdGNoUmVtb3ZlTGlzdGVuZXIoZWUsIG9yaWdpbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNYW5hZ2VyID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGNvbnRleHRNYW5hZ2VyLl9nZXRQYXRjaE1hcChlZSk/LltldmVudF07XG4gICAgICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZExpc3RlbmVyID0gZXZlbnRzLmdldChsaXN0ZW5lcik7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCwgcGF0Y2hlZExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGF0Y2ggbWV0aG9kcyB0aGF0IHJlbW92ZSBhbGwgbGlzdGVuZXJzIHNvIHdlIHJlbW92ZSBvdXJcbiAgICAgKiBpbnRlcm5hbCByZWZlcmVuY2VzIGZvciBhIGdpdmVuIGV2ZW50LlxuICAgICAqIEBwYXJhbSBlZSBFdmVudEVtaXR0ZXIgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gb3JpZ2luYWwgcmVmZXJlbmNlIHRvIHRoZSBwYXRjaGVkIG1ldGhvZFxuICAgICAqL1xuICAgIF9wYXRjaFJlbW92ZUFsbExpc3RlbmVycyhlZSwgb3JpZ2luYWwpIHtcbiAgICAgICAgY29uc3QgY29udGV4dE1hbmFnZXIgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSBjb250ZXh0TWFuYWdlci5fZ2V0UGF0Y2hNYXAoZWUpO1xuICAgICAgICAgICAgaWYgKG1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dE1hbmFnZXIuX2NyZWF0ZVBhdGNoTWFwKGVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWFwW2V2ZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXBbZXZlbnRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXRjaCBtZXRob2RzIG9uIGFuIGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UgdGhhdCBjYW4gYWRkIGxpc3RlbmVycyBzbyB3ZVxuICAgICAqIGNhbiBmb3JjZSB0aGVtIHRvIHByb3BhZ2F0ZSBhIGdpdmVuIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGVlIEV2ZW50RW1pdHRlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBvcmlnaW5hbCByZWZlcmVuY2UgdG8gdGhlIHBhdGNoZWQgbWV0aG9kXG4gICAgICogQHBhcmFtIFtjb250ZXh0XSBjb250ZXh0IHRvIHByb3BhZ2F0ZSB3aGVuIGNhbGxpbmcgbGlzdGVuZXJzXG4gICAgICovXG4gICAgX3BhdGNoQWRkTGlzdGVuZXIoZWUsIG9yaWdpbmFsLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNYW5hZ2VyID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBwcmV2ZW50IGRvdWJsZS13cmFwcGluZyB0aGUgbGlzdGVuZXIuXG4gICAgICAgICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIGVlLm9uY2Ugd3JhcHMgdGhlIGxpc3RlbmVyIGFuZCBjYWxscyBlZS5vbi5cbiAgICAgICAgICAgICAqIFdpdGhvdXQgdGhpcyBjaGVjaywgd2Ugd291bGQgd3JhcCB0aGF0IHdyYXBwZWQgbGlzdGVuZXIuXG4gICAgICAgICAgICAgKiBUaGlzIGNhdXNlcyBhbiBpc3N1ZSBiZWNhdXNlIGVlLnJlbW92ZUxpc3RlbmVyIGRlcGVuZHMgb24gdGhlIG9uY2VXcmFwcGVyXG4gICAgICAgICAgICAgKiB0byBwcm9wZXJseSByZW1vdmUgdGhlIGxpc3RlbmVyLiBJZiB3ZSB3cmFwIHRoZWlyIHdyYXBwZXIsIHdlIGJyZWFrXG4gICAgICAgICAgICAgKiB0aGF0IGRldGVjdGlvbi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGNvbnRleHRNYW5hZ2VyLl93cmFwcGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBtYXAgPSBjb250ZXh0TWFuYWdlci5fZ2V0UGF0Y2hNYXAoZWUpO1xuICAgICAgICAgICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWFwID0gY29udGV4dE1hbmFnZXIuX2NyZWF0ZVBhdGNoTWFwKGVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBsaXN0ZW5lcnMgPSBtYXBbZXZlbnRdO1xuICAgICAgICAgICAgaWYgKGxpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgICAgICBtYXBbZXZlbnRdID0gbGlzdGVuZXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZExpc3RlbmVyID0gY29udGV4dE1hbmFnZXIuYmluZChjb250ZXh0LCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAvLyBzdG9yZSBhIHdlYWsgcmVmZXJlbmNlIG9mIHRoZSB1c2VyIGxpc3RlbmVyIHRvIG91cnNcbiAgICAgICAgICAgIGxpc3RlbmVycy5zZXQobGlzdGVuZXIsIHBhdGNoZWRMaXN0ZW5lcik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNlZSBjb21tZW50IGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uIGZvciB0aGUgZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29udGV4dE1hbmFnZXIuX3dyYXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2FsbCh0aGlzLCBldmVudCwgcGF0Y2hlZExpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRNYW5hZ2VyLl93cmFwcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVQYXRjaE1hcChlZSkge1xuICAgICAgICBjb25zdCBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBlZVt0aGlzLl9rT3RMaXN0ZW5lcnNdID0gbWFwO1xuICAgICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgICBfZ2V0UGF0Y2hNYXAoZWUpIHtcbiAgICAgICAgcmV0dXJuIGVlW3RoaXMuX2tPdExpc3RlbmVyc107XG4gICAgfVxuICAgIF9rT3RMaXN0ZW5lcnMgPSBTeW1ib2woJ090TGlzdGVuZXJzJyk7XG4gICAgX3dyYXBwZWQgPSBmYWxzZTtcbn1cbmV4cG9ydHMuQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSBBYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBhc3luY0hvb2tzID0gcmVxdWlyZShcImFzeW5jX2hvb2tzXCIpO1xuY29uc3QgQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL0Fic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyXCIpO1xuY2xhc3MgQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyIGV4dGVuZHMgQWJzdHJhY3RBc3luY0hvb2tzQ29udGV4dE1hbmFnZXJfMS5BYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlciB7XG4gICAgX2FzeW5jSG9vaztcbiAgICBfY29udGV4dHMgPSBuZXcgTWFwKCk7XG4gICAgX3N0YWNrID0gW107XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2FzeW5jSG9vayA9IGFzeW5jSG9va3MuY3JlYXRlSG9vayh7XG4gICAgICAgICAgICBpbml0OiB0aGlzLl9pbml0LmJpbmQodGhpcyksXG4gICAgICAgICAgICBiZWZvcmU6IHRoaXMuX2JlZm9yZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgYWZ0ZXI6IHRoaXMuX2FmdGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICBkZXN0cm95OiB0aGlzLl9kZXN0cm95LmJpbmQodGhpcyksXG4gICAgICAgICAgICBwcm9taXNlUmVzb2x2ZTogdGhpcy5fZGVzdHJveS5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoIC0gMV0gPz8gYXBpXzEuUk9PVF9DT05URVhUO1xuICAgIH1cbiAgICB3aXRoKGNvbnRleHQsIGZuLCB0aGlzQXJnLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VudGVyQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXNBcmcsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fZXhpdENvbnRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2FzeW5jSG9vay5lbmFibGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2FzeW5jSG9vay5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3N0YWNrID0gW107XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0IGhvb2sgd2lsbCBiZSBjYWxsZWQgd2hlbiB1c2VybGFuZCBjcmVhdGUgYSBhc3luYyBjb250ZXh0LCBzZXR0aW5nIHRoZVxuICAgICAqIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lIGlmIGl0IGV4aXN0LlxuICAgICAqIEBwYXJhbSB1aWQgaWQgb2YgdGhlIGFzeW5jIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gdHlwZSB0aGUgcmVzb3VyY2UgdHlwZVxuICAgICAqL1xuICAgIF9pbml0KHVpZCwgdHlwZSkge1xuICAgICAgICAvLyBpZ25vcmUgVElNRVJXUkFQIGFzIHRoZXkgY29tYmluZSB0aW1lcnMgd2l0aCBzYW1lIHRpbWVvdXQgd2hpY2ggY2FuIGxlYWQgdG9cbiAgICAgICAgLy8gZmFsc2UgY29udGV4dCBwcm9wYWdhdGlvbi4gVElNRVJXUkFQIGhhcyBiZWVuIHJlbW92ZWQgaW4gbm9kZSAxMVxuICAgICAgICAvLyBldmVyeSB0aW1lciBoYXMgaXQncyBvd24gYFRpbWVvdXRgIHJlc291cmNlIGFueXdheSB3aGljaCBpcyB1c2VkIHRvIHByb3BhZ2F0ZVxuICAgICAgICAvLyBjb250ZXh0LlxuICAgICAgICBpZiAodHlwZSA9PT0gJ1RJTUVSV1JBUCcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dHMuc2V0KHVpZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBob29rIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBnaXZlbiBjb250ZXh0IGlzIG5vIGxvbmdlciB1c2VkIHNvIHdlIGNhblxuICAgICAqIHJlbW92ZSBpdHMgYXR0YWNoZWQgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gdWlkIHVpZCBvZiB0aGUgYXN5bmMgY29udGV4dFxuICAgICAqL1xuICAgIF9kZXN0cm95KHVpZCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0cy5kZWxldGUodWlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmVmb3JlIGhvb2sgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGV4ZWN1dGluZyBhIGFzeW5jIGNvbnRleHQuXG4gICAgICogQHBhcmFtIHVpZCB1aWQgb2YgdGhlIGFzeW5jIGNvbnRleHRcbiAgICAgKi9cbiAgICBfYmVmb3JlKHVpZCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fY29udGV4dHMuZ2V0KHVpZCk7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VudGVyQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZnRlciBob29rIGlzIGNhbGxlZCBqdXN0IGFmdGVyIGNvbXBsZXRpbmcgdGhlIGV4ZWN1dGlvbiBvZiBhIGFzeW5jIGNvbnRleHQuXG4gICAgICovXG4gICAgX2FmdGVyKCkge1xuICAgICAgICB0aGlzLl9leGl0Q29udGV4dCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGdpdmVuIGNvbnRleHQgYXMgYWN0aXZlXG4gICAgICovXG4gICAgX2VudGVyQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX3N0YWNrLnB1c2goY29udGV4dCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgY29udGV4dCBhdCB0aGUgcm9vdCBvZiB0aGUgc3RhY2tcbiAgICAgKi9cbiAgICBfZXhpdENvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuX3N0YWNrLnBvcCgpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyID0gQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgYXN5bmNfaG9va3NfMSA9IHJlcXVpcmUoXCJhc3luY19ob29rc1wiKTtcbmNvbnN0IEFic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9BYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlclwiKTtcbmNsYXNzIEFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdEFzeW5jSG9va3NDb250ZXh0TWFuYWdlcl8xLkFic3RyYWN0QXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyIHtcbiAgICBfYXN5bmNMb2NhbFN0b3JhZ2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2FzeW5jTG9jYWxTdG9yYWdlID0gbmV3IGFzeW5jX2hvb2tzXzEuQXN5bmNMb2NhbFN0b3JhZ2UoKTtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmNMb2NhbFN0b3JhZ2UuZ2V0U3RvcmUoKSA/PyBhcGlfMS5ST09UX0NPTlRFWFQ7XG4gICAgfVxuICAgIHdpdGgoY29udGV4dCwgZm4sIHRoaXNBcmcsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2IgPSB0aGlzQXJnID09IG51bGwgPyBmbiA6IGZuLmJpbmQodGhpc0FyZyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9hc3luY0xvY2FsU3RvcmFnZS5ydW4oY29udGV4dCwgY2IsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9hc3luY0xvY2FsU3RvcmFnZS5kaXNhYmxlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmV4cG9ydHMuQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlciA9IEFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyID0gZXhwb3J0cy5Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXIgPSB2b2lkIDA7XG52YXIgQXN5bmNIb29rc0NvbnRleHRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9Bc3luY0hvb2tzQ29udGV4dE1hbmFnZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc3luY0hvb2tzQ29udGV4dE1hbmFnZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFzeW5jSG9va3NDb250ZXh0TWFuYWdlcl8xLkFzeW5jSG9va3NDb250ZXh0TWFuYWdlcjsgfSB9KTtcbnZhciBBc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9Bc3luY0xvY2FsU3RvcmFnZUNvbnRleHRNYW5hZ2VyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlcl8xLkFzeW5jTG9jYWxTdG9yYWdlQ29udGV4dE1hbmFnZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRXhjZXB0aW9uRXZlbnROYW1lID0gdm9pZCAwO1xuLy8gRXZlbnQgbmFtZSBkZWZpbml0aW9uc1xuZXhwb3J0cy5FeGNlcHRpb25FdmVudE5hbWUgPSAnZXhjZXB0aW9uJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFuSW1wbCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IGVudW1zXzEgPSByZXF1aXJlKFwiLi9lbnVtc1wiKTtcbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3Bhbi5cbiAqL1xuY2xhc3MgU3BhbkltcGwge1xuICAgIC8vIEJlbG93IHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIHRvIGltcGxlbWVudCBSZWFkYWJsZVNwYW4gZm9yIGV4cG9ydFxuICAgIC8vIHB1cnBvc2VzIGJ1dCBhcmUgbm90IGludGVuZGVkIHRvIGJlIHdyaXR0ZW4tdG8gZGlyZWN0bHkuXG4gICAgX3NwYW5Db250ZXh0O1xuICAgIGtpbmQ7XG4gICAgcGFyZW50U3BhbkNvbnRleHQ7XG4gICAgYXR0cmlidXRlcyA9IHt9O1xuICAgIGxpbmtzID0gW107XG4gICAgZXZlbnRzID0gW107XG4gICAgc3RhcnRUaW1lO1xuICAgIHJlc291cmNlO1xuICAgIGluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgIF9kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICBfZHJvcHBlZEV2ZW50c0NvdW50ID0gMDtcbiAgICBfZHJvcHBlZExpbmtzQ291bnQgPSAwO1xuICAgIG5hbWU7XG4gICAgc3RhdHVzID0ge1xuICAgICAgICBjb2RlOiBhcGlfMS5TcGFuU3RhdHVzQ29kZS5VTlNFVCxcbiAgICB9O1xuICAgIGVuZFRpbWUgPSBbMCwgMF07XG4gICAgX2VuZGVkID0gZmFsc2U7XG4gICAgX2R1cmF0aW9uID0gWy0xLCAtMV07XG4gICAgX3NwYW5Qcm9jZXNzb3I7XG4gICAgX3NwYW5MaW1pdHM7XG4gICAgX2F0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ7XG4gICAgX3BlcmZvcm1hbmNlU3RhcnRUaW1lO1xuICAgIF9wZXJmb3JtYW5jZU9mZnNldDtcbiAgICBfc3RhcnRUaW1lUHJvdmlkZWQ7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBTcGFuSW1wbCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gb3B0cy5zcGFuQ29udGV4dDtcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWUgPSBjb3JlXzEub3RwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQgPVxuICAgICAgICAgICAgbm93IC0gKHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lICsgKDAsIGNvcmVfMS5nZXRUaW1lT3JpZ2luKSgpKTtcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQgPSBvcHRzLnN0YXJ0VGltZSAhPSBudWxsO1xuICAgICAgICB0aGlzLl9zcGFuTGltaXRzID0gb3B0cy5zcGFuTGltaXRzO1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID1cbiAgICAgICAgICAgIHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCB8fCAwO1xuICAgICAgICB0aGlzLl9zcGFuUHJvY2Vzc29yID0gb3B0cy5zcGFuUHJvY2Vzc29yO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWU7XG4gICAgICAgIHRoaXMucGFyZW50U3BhbkNvbnRleHQgPSBvcHRzLnBhcmVudFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmtpbmQgPSBvcHRzLmtpbmQ7XG4gICAgICAgIHRoaXMubGlua3MgPSBvcHRzLmxpbmtzIHx8IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuX2dldFRpbWUob3B0cy5zdGFydFRpbWUgPz8gbm93KTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG9wdHMucmVzb3VyY2U7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBvcHRzLnNjb3BlO1xuICAgICAgICBpZiAob3B0cy5hdHRyaWJ1dGVzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyhvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25TdGFydCh0aGlzLCBvcHRzLmNvbnRleHQpO1xuICAgIH1cbiAgICBzcGFuQ29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICBzZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEludmFsaWQgYXR0cmlidXRlIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBjb3JlXzEuaXNBdHRyaWJ1dGVWYWx1ZSkodmFsdWUpKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEludmFsaWQgYXR0cmlidXRlIHZhbHVlIHNldCBmb3Iga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYXR0cmlidXRlQ291bnRMaW1pdCB9ID0gdGhpcy5fc3BhbkxpbWl0cztcbiAgICAgICAgaWYgKGF0dHJpYnV0ZUNvdW50TGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGggPj0gYXR0cmlidXRlQ291bnRMaW1pdCAmJlxuICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdGhpcy5fdHJ1bmNhdGVUb1NpemUodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBTcGFuIE5hbWVcbiAgICAgKiBAcGFyYW0gW2F0dHJpYnV0ZXNPclN0YXJ0VGltZV0gU3BhbiBhdHRyaWJ1dGVzIG9yIHN0YXJ0IHRpbWVcbiAgICAgKiAgICAgaWYgdHlwZSBpcyB7QHR5cGUgVGltZUlucHV0fSBhbmQgM3JkIHBhcmFtIGlzIHVuZGVmaW5lZFxuICAgICAqIEBwYXJhbSBbdGltZVN0YW1wXSBTcGVjaWZpZWQgdGltZSBzdGFtcCBmb3IgdGhlIGV2ZW50XG4gICAgICovXG4gICAgYWRkRXZlbnQobmFtZSwgYXR0cmlidXRlc09yU3RhcnRUaW1lLCB0aW1lU3RhbXApIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgY29uc3QgeyBldmVudENvdW50TGltaXQgfSA9IHRoaXMuX3NwYW5MaW1pdHM7XG4gICAgICAgIGlmIChldmVudENvdW50TGltaXQgPT09IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignTm8gZXZlbnRzIGFsbG93ZWQuJyk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudENvdW50TGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5ldmVudHMubGVuZ3RoID49IGV2ZW50Q291bnRMaW1pdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ0Ryb3BwaW5nIGV4dHJhIGV2ZW50cy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGNvcmVfMS5pc1RpbWVJbnB1dCkoYXR0cmlidXRlc09yU3RhcnRUaW1lKSkge1xuICAgICAgICAgICAgaWYgKCEoMCwgY29yZV8xLmlzVGltZUlucHV0KSh0aW1lU3RhbXApKSB7XG4gICAgICAgICAgICAgICAgdGltZVN0YW1wID0gYXR0cmlidXRlc09yU3RhcnRUaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0cmlidXRlc09yU3RhcnRUaW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoMCwgY29yZV8xLnNhbml0aXplQXR0cmlidXRlcykoYXR0cmlidXRlc09yU3RhcnRUaW1lKTtcbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHRpbWU6IHRoaXMuX2dldFRpbWUodGltZVN0YW1wKSxcbiAgICAgICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkTGluayhsaW5rKSB7XG4gICAgICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZExpbmtzKGxpbmtzKSB7XG4gICAgICAgIHRoaXMubGlua3MucHVzaCguLi5saW5rcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXRTdGF0dXMoc3RhdHVzKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMuc3RhdHVzID0geyAuLi5zdGF0dXMgfTtcbiAgICAgICAgLy8gV2hlbiB1c2luZyB0cnktY2F0Y2gsIHRoZSBjYXVnaHQgXCJlcnJvclwiIGlzIG9mIHR5cGUgYGFueWAuIFdoZW4gdGhlbiBhc3NpZ25pbmcgYGFueWAgdG8gYHN0YXR1cy5tZXNzYWdlYCxcbiAgICAgICAgLy8gVHlwZVNjcmlwdCB3aWxsIG5vdCBlcnJvci4gV2hpbGUgdGhpcyBjYW4gaGFwcGVuIGR1cmluZyB1c2Ugb2YgYW55IEFQSSwgaXQgaXMgbW9yZSBjb21tb24gb24gU3BhbiNzZXRTdGF0dXMoKVxuICAgICAgICAvLyBhcyBpdCdzIGxpa2VseSB1c2VkIGluIGEgY2F0Y2gtYmxvY2suIFRoZXJlZm9yZSwgd2UgdmFsaWRhdGUgaWYgYHN0YXR1cy5tZXNzYWdlYCBpcyBhY3R1YWxseSBhIHN0cmluZywgbnVsbCwgb3JcbiAgICAgICAgLy8gdW5kZWZpbmVkIHRvIGF2b2lkIGFuIGluY29ycmVjdCB0eXBlIGNhdXNpbmcgaXNzdWVzIGRvd25zdHJlYW0uXG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5tZXNzYWdlICE9IG51bGwgJiYgdHlwZW9mIHN0YXR1cy5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBEcm9wcGluZyBpbnZhbGlkIHN0YXR1cy5tZXNzYWdlIG9mIHR5cGUgJyR7dHlwZW9mIHN0YXR1cy5tZXNzYWdlfScsIGV4cGVjdGVkICdzdHJpbmcnYCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdGF0dXMubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdXBkYXRlTmFtZShuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlbmQoZW5kVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNTcGFuRW5kZWQoKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgJHt0aGlzLm5hbWV9ICR7dGhpcy5fc3BhbkNvbnRleHQudHJhY2VJZH0tJHt0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWR9IC0gWW91IGNhbiBvbmx5IGNhbGwgZW5kKCkgb24gYSBzcGFuIG9uY2UuYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmVuZFRpbWUgPSB0aGlzLl9nZXRUaW1lKGVuZFRpbWUpO1xuICAgICAgICB0aGlzLl9kdXJhdGlvbiA9ICgwLCBjb3JlXzEuaHJUaW1lRHVyYXRpb24pKHRoaXMuc3RhcnRUaW1lLCB0aGlzLmVuZFRpbWUpO1xuICAgICAgICBpZiAodGhpcy5fZHVyYXRpb25bMF0gPCAwKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0luY29uc2lzdGVudCBzdGFydCBhbmQgZW5kIHRpbWUsIHN0YXJ0VGltZSA+IGVuZFRpbWUuIFNldHRpbmcgc3BhbiBkdXJhdGlvbiB0byAwbXMuJywgdGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSk7XG4gICAgICAgICAgICB0aGlzLmVuZFRpbWUgPSB0aGlzLnN0YXJ0VGltZS5zbGljZSgpO1xuICAgICAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA+IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgRHJvcHBlZCAke3RoaXMuX2Ryb3BwZWRFdmVudHNDb3VudH0gZXZlbnRzIGJlY2F1c2UgZXZlbnRDb3VudExpbWl0IHJlYWNoZWRgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zcGFuUHJvY2Vzc29yLm9uRW5kKHRoaXMpO1xuICAgIH1cbiAgICBfZ2V0VGltZShpbnApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnAgPT09ICdudW1iZXInICYmIGlucCA8PSBjb3JlXzEub3RwZXJmb3JtYW5jZS5ub3coKSkge1xuICAgICAgICAgICAgLy8gbXVzdCBiZSBhIHBlcmZvcm1hbmNlIHRpbWVzdGFtcFxuICAgICAgICAgICAgLy8gYXBwbHkgY29ycmVjdGlvbiBhbmQgY29udmVydCB0byBocnRpbWVcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29yZV8xLmhyVGltZSkoaW5wICsgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaW5wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb3JlXzEubWlsbGlzVG9IclRpbWUpKGlucCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29yZV8xLm1pbGxpc1RvSHJUaW1lKShpbnAuZ2V0VGltZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIGNvcmVfMS5pc1RpbWVJbnB1dEhyVGltZSkoaW5wKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQpIHtcbiAgICAgICAgICAgIC8vIGlmIHVzZXIgcHJvdmlkZWQgYSB0aW1lIGZvciB0aGUgc3RhcnQgbWFudWFsbHlcbiAgICAgICAgICAgIC8vIHdlIGNhbid0IHVzZSBkdXJhdGlvbiB0byBjYWxjdWxhdGUgZXZlbnQvZW5kIHRpbWVzXG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvcmVfMS5taWxsaXNUb0hyVGltZSkoRGF0ZS5ub3coKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXNEdXJhdGlvbiA9IGNvcmVfMS5vdHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWU7XG4gICAgICAgIHJldHVybiAoMCwgY29yZV8xLmFkZEhyVGltZXMpKHRoaXMuc3RhcnRUaW1lLCAoMCwgY29yZV8xLm1pbGxpc1RvSHJUaW1lKShtc0R1cmF0aW9uKSk7XG4gICAgfVxuICAgIGlzUmVjb3JkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kZWQgPT09IGZhbHNlO1xuICAgIH1cbiAgICByZWNvcmRFeGNlcHRpb24oZXhjZXB0aW9uLCB0aW1lKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBleGNlcHRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fTUVTU0FHRV0gPSBleGNlcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZXhjZXB0aW9uLmNvZGUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fVFlQRV0gPSBleGNlcHRpb24uY29kZS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXhjZXB0aW9uLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fVFlQRV0gPSBleGNlcHRpb24ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleGNlcHRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VYQ0VQVElPTl9NRVNTQUdFXSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbi5zdGFjaykge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX0VYQ0VQVElPTl9TVEFDS1RSQUNFXSA9IGV4Y2VwdGlvbi5zdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aGVzZSBhcmUgbWluaW11bSByZXF1aXJlbWVudHMgZnJvbSBzcGVjXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9FWENFUFRJT05fVFlQRV0gfHwgYXR0cmlidXRlc1tzZW1hbnRpY19jb252ZW50aW9uc18xLkFUVFJfRVhDRVBUSU9OX01FU1NBR0VdKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50KGVudW1zXzEuRXhjZXB0aW9uRXZlbnROYW1lLCBhdHRyaWJ1dGVzLCB0aW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgRmFpbGVkIHRvIHJlY29yZCBhbiBleGNlcHRpb24gJHtleGNlcHRpb259YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGR1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XG4gICAgfVxuICAgIGdldCBlbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkO1xuICAgIH1cbiAgICBnZXQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgfVxuICAgIGdldCBkcm9wcGVkRXZlbnRzQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQ7XG4gICAgfVxuICAgIGdldCBkcm9wcGVkTGlua3NDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRMaW5rc0NvdW50O1xuICAgIH1cbiAgICBfaXNTcGFuRW5kZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYE9wZXJhdGlvbiBhdHRlbXB0ZWQgb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogJHt0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkfSwgc3BhbklkOiAke3RoaXMuX3NwYW5Db250ZXh0LnNwYW5JZH19YCk7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYENhbm5vdCBleGVjdXRlIHRoZSBvcGVyYXRpb24gb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogJHt0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkfSwgc3BhbklkOiAke3RoaXMuX3NwYW5Db250ZXh0LnNwYW5JZH19YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRlZDtcbiAgICB9XG4gICAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byB0cnVuY2F0ZSBnaXZlbiB2YWx1ZSB3aXRoaW4gc2l6ZVxuICAgIC8vIGZvciB2YWx1ZSB0eXBlIG9mIHN0cmluZywgd2lsbCB0cnVuY2F0ZSB0byBnaXZlbiBsaW1pdFxuICAgIC8vIGZvciB0eXBlIG9mIG5vbi1zdHJpbmcsIHdpbGwgcmV0dXJuIHNhbWUgdmFsdWVcbiAgICBfdHJ1bmNhdGVUb0xpbWl0VXRpbCh2YWx1ZSwgbGltaXQpIHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8PSBsaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgbGltaXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZ2l2ZW4gYXR0cmlidXRlIHZhbHVlIGlzIG9mIHR5cGUgc3RyaW5nIGFuZCBoYXMgbW9yZSBjaGFyYWN0ZXJzIHRoYW4gZ2l2ZW4ge0Bjb2RlIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXR9IHRoZW5cbiAgICAgKiByZXR1cm4gc3RyaW5nIHdpdGggdHJ1bmNhdGVkIHRvIHtAY29kZSBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0fSBjaGFyYWN0ZXJzXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZ2l2ZW4gYXR0cmlidXRlIHZhbHVlIGlzIGFycmF5IG9mIHN0cmluZ3MgdGhlblxuICAgICAqIHJldHVybiBuZXcgYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIGVhY2ggZWxlbWVudCB0cnVuY2F0ZWQgdG8ge0Bjb2RlIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXR9IGNoYXJhY3RlcnNcbiAgICAgKlxuICAgICAqIE90aGVyd2lzZSByZXR1cm4gc2FtZSBBdHRyaWJ1dGUge0Bjb2RlIHZhbHVlfVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHRydW5jYXRlZCBhdHRyaWJ1dGUgdmFsdWUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSBzYW1lIHZhbHVlXG4gICAgICovXG4gICAgX3RydW5jYXRlVG9TaXplKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5fYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDtcbiAgICAgICAgLy8gQ2hlY2sgbGltaXRcbiAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIC8vIE5lZ2F0aXZlIHZhbHVlcyBhcmUgaW52YWxpZCwgc28gZG8gbm90IHRydW5jYXRlXG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYEF0dHJpYnV0ZSB2YWx1ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtsaW1pdH1gKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cnVuY2F0ZVRvTGltaXRVdGlsKHZhbHVlLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJyYXkgb2Ygc3RyaW5nc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAodmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh2YWwsIGxpbWl0KSA6IHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgdHlwZXMsIG5vIG5lZWQgdG8gYXBwbHkgdmFsdWUgbGVuZ3RoIGxpbWl0XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5leHBvcnRzLlNwYW5JbXBsID0gU3BhbkltcGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TcGFuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TYW1wbGluZ0RlY2lzaW9uID0gdm9pZCAwO1xuLyoqXG4gKiBBIHNhbXBsaW5nIGRlY2lzaW9uIHRoYXQgZGV0ZXJtaW5lcyBob3cgYSB7QGxpbmsgU3Bhbn0gd2lsbCBiZSByZWNvcmRlZFxuICogYW5kIGNvbGxlY3RlZC5cbiAqL1xudmFyIFNhbXBsaW5nRGVjaXNpb247XG4oZnVuY3Rpb24gKFNhbXBsaW5nRGVjaXNpb24pIHtcbiAgICAvKipcbiAgICAgKiBgU3Bhbi5pc1JlY29yZGluZygpID09PSBmYWxzZWAsIHNwYW4gd2lsbCBub3QgYmUgcmVjb3JkZWQgYW5kIGFsbCBldmVudHNcbiAgICAgKiBhbmQgYXR0cmlidXRlcyB3aWxsIGJlIGRyb3BwZWQuXG4gICAgICovXG4gICAgU2FtcGxpbmdEZWNpc2lvbltTYW1wbGluZ0RlY2lzaW9uW1wiTk9UX1JFQ09SRFwiXSA9IDBdID0gXCJOT1RfUkVDT1JEXCI7XG4gICAgLyoqXG4gICAgICogYFNwYW4uaXNSZWNvcmRpbmcoKSA9PT0gdHJ1ZWAsIGJ1dCBgU2FtcGxlZGAgZmxhZyBpbiB7QGxpbmsgVHJhY2VGbGFnc31cbiAgICAgKiBNVVNUIE5PVCBiZSBzZXQuXG4gICAgICovXG4gICAgU2FtcGxpbmdEZWNpc2lvbltTYW1wbGluZ0RlY2lzaW9uW1wiUkVDT1JEXCJdID0gMV0gPSBcIlJFQ09SRFwiO1xuICAgIC8qKlxuICAgICAqIGBTcGFuLmlzUmVjb3JkaW5nKCkgPT09IHRydWVgIEFORCBgU2FtcGxlZGAgZmxhZyBpbiB7QGxpbmsgVHJhY2VGbGFnc31cbiAgICAgKiBNVVNUIGJlIHNldC5cbiAgICAgKi9cbiAgICBTYW1wbGluZ0RlY2lzaW9uW1NhbXBsaW5nRGVjaXNpb25bXCJSRUNPUkRfQU5EX1NBTVBMRURcIl0gPSAyXSA9IFwiUkVDT1JEX0FORF9TQU1QTEVEXCI7XG59KShTYW1wbGluZ0RlY2lzaW9uID0gZXhwb3J0cy5TYW1wbGluZ0RlY2lzaW9uIHx8IChleHBvcnRzLlNhbXBsaW5nRGVjaXNpb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWx3YXlzT2ZmU2FtcGxlciA9IHZvaWQgMDtcbmNvbnN0IFNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuLi9TYW1wbGVyXCIpO1xuLyoqIFNhbXBsZXIgdGhhdCBzYW1wbGVzIG5vIHRyYWNlcy4gKi9cbmNsYXNzIEFsd2F5c09mZlNhbXBsZXIge1xuICAgIHNob3VsZFNhbXBsZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlY2lzaW9uOiBTYW1wbGVyXzEuU2FtcGxpbmdEZWNpc2lvbi5OT1RfUkVDT1JELFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuICdBbHdheXNPZmZTYW1wbGVyJztcbiAgICB9XG59XG5leHBvcnRzLkFsd2F5c09mZlNhbXBsZXIgPSBBbHdheXNPZmZTYW1wbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWx3YXlzT2ZmU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQWx3YXlzT25TYW1wbGVyID0gdm9pZCAwO1xuY29uc3QgU2FtcGxlcl8xID0gcmVxdWlyZShcIi4uL1NhbXBsZXJcIik7XG4vKiogU2FtcGxlciB0aGF0IHNhbXBsZXMgYWxsIHRyYWNlcy4gKi9cbmNsYXNzIEFsd2F5c09uU2FtcGxlciB7XG4gICAgc2hvdWxkU2FtcGxlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVjaXNpb246IFNhbXBsZXJfMS5TYW1wbGluZ0RlY2lzaW9uLlJFQ09SRF9BTkRfU0FNUExFRCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnQWx3YXlzT25TYW1wbGVyJztcbiAgICB9XG59XG5leHBvcnRzLkFsd2F5c09uU2FtcGxlciA9IEFsd2F5c09uU2FtcGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFsd2F5c09uU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGFyZW50QmFzZWRTYW1wbGVyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBBbHdheXNPZmZTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9BbHdheXNPZmZTYW1wbGVyXCIpO1xuY29uc3QgQWx3YXlzT25TYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9BbHdheXNPblNhbXBsZXJcIik7XG4vKipcbiAqIEEgY29tcG9zaXRlIHNhbXBsZXIgdGhhdCBlaXRoZXIgcmVzcGVjdHMgdGhlIHBhcmVudCBzcGFuJ3Mgc2FtcGxpbmcgZGVjaXNpb25cbiAqIG9yIGRlbGVnYXRlcyB0byBgZGVsZWdhdGVTYW1wbGVyYCBmb3Igcm9vdCBzcGFucy5cbiAqL1xuY2xhc3MgUGFyZW50QmFzZWRTYW1wbGVyIHtcbiAgICBfcm9vdDtcbiAgICBfcmVtb3RlUGFyZW50U2FtcGxlZDtcbiAgICBfcmVtb3RlUGFyZW50Tm90U2FtcGxlZDtcbiAgICBfbG9jYWxQYXJlbnRTYW1wbGVkO1xuICAgIF9sb2NhbFBhcmVudE5vdFNhbXBsZWQ7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QgPSBjb25maWcucm9vdDtcbiAgICAgICAgaWYgKCF0aGlzLl9yb290KSB7XG4gICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikobmV3IEVycm9yKCdQYXJlbnRCYXNlZFNhbXBsZXIgbXVzdCBoYXZlIGEgcm9vdCBzYW1wbGVyIGNvbmZpZ3VyZWQnKSk7XG4gICAgICAgICAgICB0aGlzLl9yb290ID0gbmV3IEFsd2F5c09uU2FtcGxlcl8xLkFsd2F5c09uU2FtcGxlcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQgPVxuICAgICAgICAgICAgY29uZmlnLnJlbW90ZVBhcmVudFNhbXBsZWQgPz8gbmV3IEFsd2F5c09uU2FtcGxlcl8xLkFsd2F5c09uU2FtcGxlcigpO1xuICAgICAgICB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkID1cbiAgICAgICAgICAgIGNvbmZpZy5yZW1vdGVQYXJlbnROb3RTYW1wbGVkID8/IG5ldyBBbHdheXNPZmZTYW1wbGVyXzEuQWx3YXlzT2ZmU2FtcGxlcigpO1xuICAgICAgICB0aGlzLl9sb2NhbFBhcmVudFNhbXBsZWQgPVxuICAgICAgICAgICAgY29uZmlnLmxvY2FsUGFyZW50U2FtcGxlZCA/PyBuZXcgQWx3YXlzT25TYW1wbGVyXzEuQWx3YXlzT25TYW1wbGVyKCk7XG4gICAgICAgIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZCA9XG4gICAgICAgICAgICBjb25maWcubG9jYWxQYXJlbnROb3RTYW1wbGVkID8/IG5ldyBBbHdheXNPZmZTYW1wbGVyXzEuQWx3YXlzT2ZmU2FtcGxlcigpO1xuICAgIH1cbiAgICBzaG91bGRTYW1wbGUoY29udGV4dCwgdHJhY2VJZCwgc3Bhbk5hbWUsIHNwYW5LaW5kLCBhdHRyaWJ1dGVzLCBsaW5rcykge1xuICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gYXBpXzEudHJhY2UuZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmICghcGFyZW50Q29udGV4dCB8fCAhKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkocGFyZW50Q29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb290LnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50Q29udGV4dC5pc1JlbW90ZSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudENvbnRleHQudHJhY2VGbGFncyAmIGFwaV8xLlRyYWNlRmxhZ3MuU0FNUExFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50Q29udGV4dC50cmFjZUZsYWdzICYgYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZShjb250ZXh0LCB0cmFjZUlkLCBzcGFuTmFtZSwgc3BhbktpbmQsIGF0dHJpYnV0ZXMsIGxpbmtzKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgUGFyZW50QmFzZWR7cm9vdD0ke3RoaXMuX3Jvb3QudG9TdHJpbmcoKX0sIHJlbW90ZVBhcmVudFNhbXBsZWQ9JHt0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCl9LCByZW1vdGVQYXJlbnROb3RTYW1wbGVkPSR7dGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpfSwgbG9jYWxQYXJlbnRTYW1wbGVkPSR7dGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCl9LCBsb2NhbFBhcmVudE5vdFNhbXBsZWQ9JHt0aGlzLl9sb2NhbFBhcmVudE5vdFNhbXBsZWQudG9TdHJpbmcoKX19YDtcbiAgICB9XG59XG5leHBvcnRzLlBhcmVudEJhc2VkU2FtcGxlciA9IFBhcmVudEJhc2VkU2FtcGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBhcmVudEJhc2VkU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgU2FtcGxlcl8xID0gcmVxdWlyZShcIi4uL1NhbXBsZXJcIik7XG4vKiogU2FtcGxlciB0aGF0IHNhbXBsZXMgYSBnaXZlbiBmcmFjdGlvbiBvZiB0cmFjZXMgYmFzZWQgb2YgdHJhY2UgaWQgZGV0ZXJtaW5pc3RpY2FsbHkuICovXG5jbGFzcyBUcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIge1xuICAgIF9yYXRpbztcbiAgICBfdXBwZXJCb3VuZDtcbiAgICBjb25zdHJ1Y3RvcihfcmF0aW8gPSAwKSB7XG4gICAgICAgIHRoaXMuX3JhdGlvID0gX3JhdGlvO1xuICAgICAgICB0aGlzLl9yYXRpbyA9IHRoaXMuX25vcm1hbGl6ZShfcmF0aW8pO1xuICAgICAgICB0aGlzLl91cHBlckJvdW5kID0gTWF0aC5mbG9vcih0aGlzLl9yYXRpbyAqIDB4ZmZmZmZmZmYpO1xuICAgIH1cbiAgICBzaG91bGRTYW1wbGUoY29udGV4dCwgdHJhY2VJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVjaXNpb246ICgwLCBhcGlfMS5pc1ZhbGlkVHJhY2VJZCkodHJhY2VJZCkgJiYgdGhpcy5fYWNjdW11bGF0ZSh0cmFjZUlkKSA8IHRoaXMuX3VwcGVyQm91bmRcbiAgICAgICAgICAgICAgICA/IFNhbXBsZXJfMS5TYW1wbGluZ0RlY2lzaW9uLlJFQ09SRF9BTkRfU0FNUExFRFxuICAgICAgICAgICAgICAgIDogU2FtcGxlcl8xLlNhbXBsaW5nRGVjaXNpb24uTk9UX1JFQ09SRCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgVHJhY2VJZFJhdGlvQmFzZWR7JHt0aGlzLl9yYXRpb319YDtcbiAgICB9XG4gICAgX25vcm1hbGl6ZShyYXRpbykge1xuICAgICAgICBpZiAodHlwZW9mIHJhdGlvICE9PSAnbnVtYmVyJyB8fCBpc05hTihyYXRpbykpXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIHJhdGlvID49IDEgPyAxIDogcmF0aW8gPD0gMCA/IDAgOiByYXRpbztcbiAgICB9XG4gICAgX2FjY3VtdWxhdGUodHJhY2VJZCkge1xuICAgICAgICBsZXQgYWNjdW11bGF0aW9uID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmFjZUlkLmxlbmd0aCAvIDg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gaSAqIDg7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFyc2VJbnQodHJhY2VJZC5zbGljZShwb3MsIHBvcyArIDgpLCAxNik7XG4gICAgICAgICAgICBhY2N1bXVsYXRpb24gPSAoYWNjdW11bGF0aW9uIF4gcGFydCkgPj4+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGlvbjtcbiAgICB9XG59XG5leHBvcnRzLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciA9IFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnVpbGRTYW1wbGVyRnJvbUVudiA9IGV4cG9ydHMubG9hZERlZmF1bHRDb25maWcgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IEFsd2F5c09mZlNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvQWx3YXlzT2ZmU2FtcGxlclwiKTtcbmNvbnN0IEFsd2F5c09uU2FtcGxlcl8xID0gcmVxdWlyZShcIi4vc2FtcGxlci9BbHdheXNPblNhbXBsZXJcIik7XG5jb25zdCBQYXJlbnRCYXNlZFNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvUGFyZW50QmFzZWRTYW1wbGVyXCIpO1xuY29uc3QgVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVyL1RyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlclwiKTtcbmNvbnN0IERFRkFVTFRfUkFUSU8gPSAxO1xuLyoqXG4gKiBMb2FkIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gRm9yIGZpZWxkcyB3aXRoIHByaW1pdGl2ZSB2YWx1ZXMsIGFueSB1c2VyLXByb3ZpZGVkXG4gKiB2YWx1ZSB3aWxsIG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUuIEZvciBmaWVsZHMgd2l0aFxuICogbm9uLXByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgYHNwYW5MaW1pdHNgKSwgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWUgd2lsbCBiZVxuICogdXNlZCB0byBleHRlbmQgdGhlIGRlZmF1bHQgdmFsdWUuXG4gKi9cbi8vIG9iamVjdCBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHRoaXMgZnVuY3Rpb24gYW5kIGNhbGxlZCB3aGVuIG5lZWRlZCBvdGhlcndpc2Vcbi8vIGVudnMgYXJlIHBhcnNlZCBiZWZvcmUgdGVzdHMgYXJlIHJhbiAtIGNhdXNlcyB0ZXN0cyB1c2luZyB0aGVzZSBlbnZzIHRvIGZhaWxcbmZ1bmN0aW9uIGxvYWREZWZhdWx0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNhbXBsZXI6IGJ1aWxkU2FtcGxlckZyb21FbnYoKSxcbiAgICAgICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgICAgICBnZW5lcmFsTGltaXRzOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/PyBJbmZpbml0eSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZUNvdW50TGltaXQ6ICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICB9LFxuICAgICAgICBzcGFuTGltaXRzOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCcpID8/IEluZmluaXR5LFxuICAgICAgICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9TUEFOX0FUVFJJQlVURV9DT1VOVF9MSU1JVCcpID8/IDEyOCxcbiAgICAgICAgICAgIGxpbmtDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fTElOS19DT1VOVF9MSU1JVCcpID8/IDEyOCxcbiAgICAgICAgICAgIGV2ZW50Q291bnRMaW1pdDogKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9TUEFOX0VWRU5UX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICAgICAgYXR0cmlidXRlUGVyRXZlbnRDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9FVkVOVF9DT1VOVF9MSU1JVCcpID8/IDEyOCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVBlckxpbmtDb3VudExpbWl0OiAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9MSU5LX0NPVU5UX0xJTUlUJykgPz8gMTI4LFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnRzLmxvYWREZWZhdWx0Q29uZmlnID0gbG9hZERlZmF1bHRDb25maWc7XG4vKipcbiAqIEJhc2VkIG9uIGVudmlyb25tZW50LCBidWlsZHMgYSBzYW1wbGVyLCBjb21wbGllcyB3aXRoIHNwZWNpZmljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2FtcGxlckZyb21FbnYoKSB7XG4gICAgY29uc3Qgc2FtcGxlciA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfVFJBQ0VTX1NBTVBMRVInKSA/P1xuICAgICAgICBcInBhcmVudGJhc2VkX2Fsd2F5c19vblwiIC8qIFRyYWNlc1NhbXBsZXJWYWx1ZXMuUGFyZW50QmFzZWRBbHdheXNPbiAqLztcbiAgICBzd2l0Y2ggKHNhbXBsZXIpIHtcbiAgICAgICAgY2FzZSBcImFsd2F5c19vblwiIC8qIFRyYWNlc1NhbXBsZXJWYWx1ZXMuQWx3YXlzT24gKi86XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFsd2F5c09uU2FtcGxlcl8xLkFsd2F5c09uU2FtcGxlcigpO1xuICAgICAgICBjYXNlIFwiYWx3YXlzX29mZlwiIC8qIFRyYWNlc1NhbXBsZXJWYWx1ZXMuQWx3YXlzT2ZmICovOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBbHdheXNPZmZTYW1wbGVyXzEuQWx3YXlzT2ZmU2FtcGxlcigpO1xuICAgICAgICBjYXNlIFwicGFyZW50YmFzZWRfYWx3YXlzX29uXCIgLyogVHJhY2VzU2FtcGxlclZhbHVlcy5QYXJlbnRCYXNlZEFsd2F5c09uICovOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXJfMS5QYXJlbnRCYXNlZFNhbXBsZXIoe1xuICAgICAgICAgICAgICAgIHJvb3Q6IG5ldyBBbHdheXNPblNhbXBsZXJfMS5BbHdheXNPblNhbXBsZXIoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwicGFyZW50YmFzZWRfYWx3YXlzX29mZlwiIC8qIFRyYWNlc1NhbXBsZXJWYWx1ZXMuUGFyZW50QmFzZWRBbHdheXNPZmYgKi86XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhcmVudEJhc2VkU2FtcGxlcl8xLlBhcmVudEJhc2VkU2FtcGxlcih7XG4gICAgICAgICAgICAgICAgcm9vdDogbmV3IEFsd2F5c09mZlNhbXBsZXJfMS5BbHdheXNPZmZTYW1wbGVyKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcInRyYWNlaWRyYXRpb1wiIC8qIFRyYWNlc1NhbXBsZXJWYWx1ZXMuVHJhY2VJZFJhdGlvICovOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXJfMS5UcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIoZ2V0U2FtcGxlclByb2JhYmlsaXR5RnJvbUVudigpKTtcbiAgICAgICAgY2FzZSBcInBhcmVudGJhc2VkX3RyYWNlaWRyYXRpb1wiIC8qIFRyYWNlc1NhbXBsZXJWYWx1ZXMuUGFyZW50QmFzZWRUcmFjZUlkUmF0aW8gKi86XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhcmVudEJhc2VkU2FtcGxlcl8xLlBhcmVudEJhc2VkU2FtcGxlcih7XG4gICAgICAgICAgICAgICAgcm9vdDogbmV3IFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcl8xLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcihnZXRTYW1wbGVyUHJvYmFiaWxpdHlGcm9tRW52KCkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBPVEVMX1RSQUNFU19TQU1QTEVSIHZhbHVlIFwiJHtzYW1wbGVyfVwiIGludmFsaWQsIGRlZmF1bHRpbmcgdG8gXCIke1wicGFyZW50YmFzZWRfYWx3YXlzX29uXCIgLyogVHJhY2VzU2FtcGxlclZhbHVlcy5QYXJlbnRCYXNlZEFsd2F5c09uICovfVwiLmApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXJfMS5QYXJlbnRCYXNlZFNhbXBsZXIoe1xuICAgICAgICAgICAgICAgIHJvb3Q6IG5ldyBBbHdheXNPblNhbXBsZXJfMS5BbHdheXNPblNhbXBsZXIoKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuYnVpbGRTYW1wbGVyRnJvbUVudiA9IGJ1aWxkU2FtcGxlckZyb21FbnY7XG5mdW5jdGlvbiBnZXRTYW1wbGVyUHJvYmFiaWxpdHlGcm9tRW52KCkge1xuICAgIGNvbnN0IHByb2JhYmlsaXR5ID0gKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcnKTtcbiAgICBpZiAocHJvYmFiaWxpdHkgPT0gbnVsbCkge1xuICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBPVEVMX1RSQUNFU19TQU1QTEVSX0FSRyBpcyBibGFuaywgZGVmYXVsdGluZyB0byAke0RFRkFVTFRfUkFUSU99LmApO1xuICAgICAgICByZXR1cm4gREVGQVVMVF9SQVRJTztcbiAgICB9XG4gICAgaWYgKHByb2JhYmlsaXR5IDwgMCB8fCBwcm9iYWJpbGl0eSA+IDEpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgT1RFTF9UUkFDRVNfU0FNUExFUl9BUkc9JHtwcm9iYWJpbGl0eX0gd2FzIGdpdmVuLCBidXQgaXQgaXMgb3V0IG9mIHJhbmdlIChbMC4uMV0pLCBkZWZhdWx0aW5nIHRvICR7REVGQVVMVF9SQVRJT30uYCk7XG4gICAgICAgIHJldHVybiBERUZBVUxUX1JBVElPO1xuICAgIH1cbiAgICByZXR1cm4gcHJvYmFiaWxpdHk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWcuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlY29uZmlndXJlTGltaXRzID0gZXhwb3J0cy5tZXJnZUNvbmZpZyA9IGV4cG9ydHMuREVGQVVMVF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUID0gZXhwb3J0cy5ERUZBVUxUX0FUVFJJQlVURV9DT1VOVF9MSU1JVCA9IHZvaWQgMDtcbmNvbnN0IGNvbmZpZ18xID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5leHBvcnRzLkRFRkFVTFRfQVRUUklCVVRFX0NPVU5UX0xJTUlUID0gMTI4O1xuZXhwb3J0cy5ERUZBVUxUX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQgPSBJbmZpbml0eTtcbi8qKlxuICogRnVuY3Rpb24gdG8gbWVyZ2UgRGVmYXVsdCBjb25maWd1cmF0aW9uIChhcyBzcGVjaWZpZWQgaW4gJy4vY29uZmlnJykgd2l0aFxuICogdXNlciBwcm92aWRlZCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcodXNlckNvbmZpZykge1xuICAgIGNvbnN0IHBlckluc3RhbmNlRGVmYXVsdHMgPSB7XG4gICAgICAgIHNhbXBsZXI6ICgwLCBjb25maWdfMS5idWlsZFNhbXBsZXJGcm9tRW52KSgpLFxuICAgIH07XG4gICAgY29uc3QgREVGQVVMVF9DT05GSUcgPSAoMCwgY29uZmlnXzEubG9hZERlZmF1bHRDb25maWcpKCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcsIHBlckluc3RhbmNlRGVmYXVsdHMsIHVzZXJDb25maWcpO1xuICAgIHRhcmdldC5nZW5lcmFsTGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuZ2VuZXJhbExpbWl0cywgdXNlckNvbmZpZy5nZW5lcmFsTGltaXRzIHx8IHt9KTtcbiAgICB0YXJnZXQuc3BhbkxpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLnNwYW5MaW1pdHMsIHVzZXJDb25maWcuc3BhbkxpbWl0cyB8fCB7fSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmV4cG9ydHMubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcbi8qKlxuICogV2hlbiBnZW5lcmFsIGxpbWl0cyBhcmUgcHJvdmlkZWQgYW5kIG1vZGVsIHNwZWNpZmljIGxpbWl0cyBhcmUgbm90LFxuICogY29uZmlndXJlcyB0aGUgbW9kZWwgc3BlY2lmaWMgbGltaXRzIGJ5IHVzaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZ2VuZXJhbCBvbmVzLlxuICogQHBhcmFtIHVzZXJDb25maWcgVXNlciBwcm92aWRlZCB0cmFjZXIgY29uZmlndXJhdGlvblxuICovXG5mdW5jdGlvbiByZWNvbmZpZ3VyZUxpbWl0cyh1c2VyQ29uZmlnKSB7XG4gICAgY29uc3Qgc3BhbkxpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIHVzZXJDb25maWcuc3BhbkxpbWl0cyk7XG4gICAgLyoqXG4gICAgICogUmVhc3NpZ24gc3BhbiBhdHRyaWJ1dGUgY291bnQgbGltaXQgdG8gdXNlIGZpcnN0IG5vbiBudWxsIHZhbHVlIGRlZmluZWQgYnkgdXNlciBvciB1c2UgZGVmYXVsdCB2YWx1ZVxuICAgICAqL1xuICAgIHNwYW5MaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCA9XG4gICAgICAgIHVzZXJDb25maWcuc3BhbkxpbWl0cz8uYXR0cmlidXRlQ291bnRMaW1pdCA/P1xuICAgICAgICAgICAgdXNlckNvbmZpZy5nZW5lcmFsTGltaXRzPy5hdHRyaWJ1dGVDb3VudExpbWl0ID8/XG4gICAgICAgICAgICAoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz9cbiAgICAgICAgICAgICgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUJykgPz9cbiAgICAgICAgICAgIGV4cG9ydHMuREVGQVVMVF9BVFRSSUJVVEVfQ09VTlRfTElNSVQ7XG4gICAgLyoqXG4gICAgICogUmVhc3NpZ24gc3BhbiBhdHRyaWJ1dGUgdmFsdWUgbGVuZ3RoIGxpbWl0IHRvIHVzZSBmaXJzdCBub24gbnVsbCB2YWx1ZSBkZWZpbmVkIGJ5IHVzZXIgb3IgdXNlIGRlZmF1bHQgdmFsdWVcbiAgICAgKi9cbiAgICBzcGFuTGltaXRzLmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPVxuICAgICAgICB1c2VyQ29uZmlnLnNwYW5MaW1pdHM/LmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPz9cbiAgICAgICAgICAgIHVzZXJDb25maWcuZ2VuZXJhbExpbWl0cz8uYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQnKSA/P1xuICAgICAgICAgICAgKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUJykgPz9cbiAgICAgICAgICAgIGV4cG9ydHMuREVGQVVMVF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB1c2VyQ29uZmlnLCB7IHNwYW5MaW1pdHMgfSk7XG59XG5leHBvcnRzLnJlY29uZmlndXJlTGltaXRzID0gcmVjb25maWd1cmVMaW1pdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3JCYXNlID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgU3BhblByb2Nlc3Nvcn0gdGhhdCBiYXRjaGVzIHNwYW5zIGV4cG9ydGVkIGJ5XG4gKiB0aGUgU0RLIHRoZW4gcHVzaGVzIHRoZW0gdG8gdGhlIGV4cG9ydGVyIHBpcGVsaW5lLlxuICovXG5jbGFzcyBCYXRjaFNwYW5Qcm9jZXNzb3JCYXNlIHtcbiAgICBfZXhwb3J0ZXI7XG4gICAgX21heEV4cG9ydEJhdGNoU2l6ZTtcbiAgICBfbWF4UXVldWVTaXplO1xuICAgIF9zY2hlZHVsZWREZWxheU1pbGxpcztcbiAgICBfZXhwb3J0VGltZW91dE1pbGxpcztcbiAgICBfaXNFeHBvcnRpbmcgPSBmYWxzZTtcbiAgICBfZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIF90aW1lcjtcbiAgICBfc2h1dGRvd25PbmNlO1xuICAgIF9kcm9wcGVkU3BhbnNDb3VudCA9IDA7XG4gICAgY29uc3RydWN0b3IoX2V4cG9ydGVyLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5fZXhwb3J0ZXIgPSBfZXhwb3J0ZXI7XG4gICAgICAgIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9XG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnPy5tYXhFeHBvcnRCYXRjaFNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyBjb25maWcubWF4RXhwb3J0QmF0Y2hTaXplXG4gICAgICAgICAgICAgICAgOiAoKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9CU1BfTUFYX0VYUE9SVF9CQVRDSF9TSVpFJykgPz8gNTEyKTtcbiAgICAgICAgdGhpcy5fbWF4UXVldWVTaXplID1cbiAgICAgICAgICAgIHR5cGVvZiBjb25maWc/Lm1heFF1ZXVlU2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5tYXhRdWV1ZVNpemVcbiAgICAgICAgICAgICAgICA6ICgoMCwgY29yZV8xLmdldE51bWJlckZyb21FbnYpKCdPVEVMX0JTUF9NQVhfUVVFVUVfU0laRScpID8/IDIwNDgpO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyA9XG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnPy5zY2hlZHVsZWREZWxheU1pbGxpcyA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5zY2hlZHVsZWREZWxheU1pbGxpc1xuICAgICAgICAgICAgICAgIDogKCgwLCBjb3JlXzEuZ2V0TnVtYmVyRnJvbUVudikoJ09URUxfQlNQX1NDSEVEVUxFX0RFTEFZJykgPz8gNTAwMCk7XG4gICAgICAgIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMgPVxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZz8uZXhwb3J0VGltZW91dE1pbGxpcyA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5leHBvcnRUaW1lb3V0TWlsbGlzXG4gICAgICAgICAgICAgICAgOiAoKDAsIGNvcmVfMS5nZXROdW1iZXJGcm9tRW52KSgnT1RFTF9CU1BfRVhQT1JUX1RJTUVPVVQnKSA/PyAzMDAwMCk7XG4gICAgICAgIHRoaXMuX3NodXRkb3duT25jZSA9IG5ldyBjb3JlXzEuQmluZE9uY2VGdXR1cmUodGhpcy5fc2h1dGRvd24sIHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID4gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ0JhdGNoU3BhblByb2Nlc3NvcjogbWF4RXhwb3J0QmF0Y2hTaXplIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBtYXhRdWV1ZVNpemUsIHNldHRpbmcgbWF4RXhwb3J0QmF0Y2hTaXplIHRvIG1hdGNoIG1heFF1ZXVlU2l6ZScpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdGhpcy5fbWF4UXVldWVTaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2hBbGwoKTtcbiAgICB9XG4gICAgLy8gZG9lcyBub3RoaW5nLlxuICAgIG9uU3RhcnQoX3NwYW4sIF9wYXJlbnRDb250ZXh0KSB7IH1cbiAgICBvbkVuZChzcGFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FkZFRvQnVmZmVyKHNwYW4pO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfVxuICAgIF9zaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vblNodXRkb3duKCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZmx1c2hBbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEFkZCBhIHNwYW4gaW4gdGhlIGJ1ZmZlci4gKi9cbiAgICBfYWRkVG9CdWZmZXIoc3Bhbikge1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPj0gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgICAgICAvLyBsaW1pdCByZWFjaGVkLCBkcm9wIHNwYW5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ21heFF1ZXVlU2l6ZSByZWFjaGVkLCBkcm9wcGluZyBzcGFucycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBzb21lIHNwYW5zIHdlcmUgZHJvcHBlZCwgbG9nIG9uY2Ugd2l0aCBjb3VudCBvZiBzcGFucyBkcm9wcGVkXG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYERyb3BwZWQgJHt0aGlzLl9kcm9wcGVkU3BhbnNDb3VudH0gc3BhbnMgYmVjYXVzZSBtYXhRdWV1ZVNpemUgcmVhY2hlZGApO1xuICAgICAgICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbmlzaGVkU3BhbnMucHVzaChzcGFuKTtcbiAgICAgICAgdGhpcy5fbWF5YmVTdGFydFRpbWVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYWxsIHNwYW5zIHRvIHRoZSBleHBvcnRlciByZXNwZWN0aW5nIHRoZSBiYXRjaCBzaXplIGxpbWl0XG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgb24gZm9yY2VGbHVzaCBvciBzaHV0ZG93bixcbiAgICAgKiBmb3IgYWxsIG90aGVyIGNhc2VzIF9mbHVzaCBzaG91bGQgYmUgdXNlZFxuICAgICAqICovXG4gICAgX2ZsdXNoQWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgYmF0Y2hlc1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBNYXRoLmNlaWwodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggLyB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSBjb3VudDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fZmx1c2hPbmVCYXRjaCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2ZsdXNoT25lQmF0Y2goKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyVGltZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZG9uJ3Qgd2FpdCBhbnltb3JlIGZvciBleHBvcnQsIHRoaXMgd2F5IHRoZSBuZXh0IGJhdGNoIGNhbiBzdGFydFxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQnKSk7XG4gICAgICAgICAgICB9LCB0aGlzLl9leHBvcnRUaW1lb3V0TWlsbGlzKTtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZG93bnN0cmVhbSBleHBvcnRlciBjYWxscyBmcm9tIGdlbmVyYXRpbmcgc3BhbnNcbiAgICAgICAgICAgIGFwaV8xLmNvbnRleHQud2l0aCgoMCwgY29yZV8xLnN1cHByZXNzVHJhY2luZykoYXBpXzEuY29udGV4dC5hY3RpdmUoKSksICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZmluaXNoZWQgc3BhbnMgYnVmZmVyIGhlcmUgYmVjYXVzZSB0aGUgbmV4dCBpbnZvY2F0aW9ucyBvZiB0aGUgX2ZsdXNoIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIHBhc3MgdGhlIHNhbWUgZmluaXNoZWQgc3BhbnMgdG8gdGhlIGV4cG9ydGVyIGlmIHRoZSBidWZmZXIgaXMgY2xlYXJlZFxuICAgICAgICAgICAgICAgIC8vIG91dHNpZGUgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGNhbGxiYWNrLlxuICAgICAgICAgICAgICAgIGxldCBzcGFucztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPD0gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW5zID0gdGhpcy5fZmluaXNoZWRTcGFucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbnMgPSB0aGlzLl9maW5pc2hlZFNwYW5zLnNwbGljZSgwLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkb0V4cG9ydCA9ICgpID0+IHRoaXMuX2V4cG9ydGVyLmV4cG9ydChzcGFucywgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb2RlID09PSBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCdCYXRjaFNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxldCBwZW5kaW5nUmVzb3VyY2VzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3BhbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbi5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXNvdXJjZXMgPz89IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1Jlc291cmNlcy5wdXNoKHNwYW4ucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBdm9pZCBzY2hlZHVsaW5nIGEgcHJvbWlzZSB0byBtYWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIGFuZCBlYXNpZXIgdG8gdGVzdFxuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVzb3VyY2VzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvRXhwb3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwZW5kaW5nUmVzb3VyY2VzKS50aGVuKGRvRXhwb3J0LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbWF5YmVTdGFydFRpbWVyKCkge1xuICAgICAgICBpZiAodGhpcy5faXNFeHBvcnRpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNFeHBvcnRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hPbmVCYXRjaCgpXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKDAsIGNvcmVfMS5nbG9iYWxFcnJvckhhbmRsZXIpKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHdlIG9ubHkgd2FpdCBpZiB0aGUgcXVldWUgZG9lc24ndCBoYXZlIGVub3VnaCBlbGVtZW50cyB5ZXRcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiBmbHVzaCgpLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyk7XG4gICAgICAgICgwLCBjb3JlXzEudW5yZWZUaW1lcikodGhpcy5fdGltZXIpO1xuICAgIH1cbiAgICBfY2xlYXJUaW1lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZSA9IEJhdGNoU3BhblByb2Nlc3NvckJhc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXRjaFNwYW5Qcm9jZXNzb3JCYXNlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3IgPSB2b2lkIDA7XG5jb25zdCBCYXRjaFNwYW5Qcm9jZXNzb3JCYXNlXzEgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXhwb3J0L0JhdGNoU3BhblByb2Nlc3NvckJhc2VcIik7XG5jbGFzcyBCYXRjaFNwYW5Qcm9jZXNzb3IgZXh0ZW5kcyBCYXRjaFNwYW5Qcm9jZXNzb3JCYXNlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yQmFzZSB7XG4gICAgb25TaHV0ZG93bigpIHsgfVxufVxuZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3IgPSBCYXRjaFNwYW5Qcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXRjaFNwYW5Qcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJhbmRvbUlkR2VuZXJhdG9yID0gdm9pZCAwO1xuY29uc3QgU1BBTl9JRF9CWVRFUyA9IDg7XG5jb25zdCBUUkFDRV9JRF9CWVRFUyA9IDE2O1xuY2xhc3MgUmFuZG9tSWRHZW5lcmF0b3Ige1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByYW5kb20gMTYtYnl0ZSB0cmFjZSBJRCBmb3JtYXR0ZWQvZW5jb2RlZCBhcyBhIDMyIGxvd2VyY2FzZSBoZXhcbiAgICAgKiBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gMTI4IGJpdHMuXG4gICAgICovXG4gICAgZ2VuZXJhdGVUcmFjZUlkID0gZ2V0SWRHZW5lcmF0b3IoVFJBQ0VfSURfQllURVMpO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByYW5kb20gOC1ieXRlIHNwYW4gSUQgZm9ybWF0dGVkL2VuY29kZWQgYXMgYSAxNiBsb3dlcmNhc2UgaGV4XG4gICAgICogY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIDY0IGJpdHMuXG4gICAgICovXG4gICAgZ2VuZXJhdGVTcGFuSWQgPSBnZXRJZEdlbmVyYXRvcihTUEFOX0lEX0JZVEVTKTtcbn1cbmV4cG9ydHMuUmFuZG9tSWRHZW5lcmF0b3IgPSBSYW5kb21JZEdlbmVyYXRvcjtcbmNvbnN0IFNIQVJFRF9CVUZGRVIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoVFJBQ0VfSURfQllURVMpO1xuZnVuY3Rpb24gZ2V0SWRHZW5lcmF0b3IoYnl0ZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZ2VuZXJhdGVJZCgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcyAvIDQ7IGkrKykge1xuICAgICAgICAgICAgLy8gdW5zaWduZWQgcmlnaHQgc2hpZnQgZHJvcHMgZGVjaW1hbCBwYXJ0IG9mIHRoZSBudW1iZXJcbiAgICAgICAgICAgIC8vIGl0IGlzIHJlcXVpcmVkIGJlY2F1c2UgaWYgYSBudW1iZXIgYmV0d2VlbiAyKiozMiBhbmQgMioqMzIgLSAxIGlzIGdlbmVyYXRlZCwgYW4gb3V0IG9mIHJhbmdlIGVycm9yIGlzIHRocm93biBieSB3cml0ZVVJbnQzMkJFXG4gICAgICAgICAgICBTSEFSRURfQlVGRkVSLndyaXRlVUludDMyQkUoKE1hdGgucmFuZG9tKCkgKiAyICoqIDMyKSA+Pj4gMCwgaSAqIDQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGJ1ZmZlciBpcyBhbGwgMCwgc2V0IHRoZSBsYXN0IGJ5dGUgdG8gMSB0byBndWFyYW50ZWUgYSB2YWxpZCB3M2MgaWQgaXMgZ2VuZXJhdGVkXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykge1xuICAgICAgICAgICAgaWYgKFNIQVJFRF9CVUZGRVJbaV0gPiAwKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpID09PSBieXRlcyAtIDEpIHtcbiAgICAgICAgICAgICAgICBTSEFSRURfQlVGRkVSW2J5dGVzIC0gMV0gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTSEFSRURfQlVGRkVSLnRvU3RyaW5nKCdoZXgnLCAwLCBieXRlcyk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJhbmRvbUlkR2VuZXJhdG9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SYW5kb21JZEdlbmVyYXRvciA9IGV4cG9ydHMuQmF0Y2hTcGFuUHJvY2Vzc29yID0gdm9pZCAwO1xudmFyIEJhdGNoU3BhblByb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4vZXhwb3J0L0JhdGNoU3BhblByb2Nlc3NvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhdGNoU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmF0Y2hTcGFuUHJvY2Vzc29yXzEuQmF0Y2hTcGFuUHJvY2Vzc29yOyB9IH0pO1xudmFyIFJhbmRvbUlkR2VuZXJhdG9yXzEgPSByZXF1aXJlKFwiLi9SYW5kb21JZEdlbmVyYXRvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmRvbUlkR2VuZXJhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBSYW5kb21JZEdlbmVyYXRvcl8xLlJhbmRvbUlkR2VuZXJhdG9yOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJhbmRvbUlkR2VuZXJhdG9yID0gZXhwb3J0cy5CYXRjaFNwYW5Qcm9jZXNzb3IgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhdGNoU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLkJhdGNoU3BhblByb2Nlc3NvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmRvbUlkR2VuZXJhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuUmFuZG9tSWRHZW5lcmF0b3I7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VyID0gdm9pZCAwO1xuY29uc3QgYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgU3Bhbl8xID0gcmVxdWlyZShcIi4vU3BhblwiKTtcbmNvbnN0IHV0aWxpdHlfMSA9IHJlcXVpcmUoXCIuL3V0aWxpdHlcIik7XG5jb25zdCBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2ljIHRyYWNlci5cbiAqL1xuY2xhc3MgVHJhY2VyIHtcbiAgICBfc2FtcGxlcjtcbiAgICBfZ2VuZXJhbExpbWl0cztcbiAgICBfc3BhbkxpbWl0cztcbiAgICBfaWRHZW5lcmF0b3I7XG4gICAgaW5zdHJ1bWVudGF0aW9uU2NvcGU7XG4gICAgX3Jlc291cmNlO1xuICAgIF9zcGFuUHJvY2Vzc29yO1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgVHJhY2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGluc3RydW1lbnRhdGlvblNjb3BlLCBjb25maWcsIHJlc291cmNlLCBzcGFuUHJvY2Vzc29yKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29uZmlnID0gKDAsIHV0aWxpdHlfMS5tZXJnZUNvbmZpZykoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fc2FtcGxlciA9IGxvY2FsQ29uZmlnLnNhbXBsZXI7XG4gICAgICAgIHRoaXMuX2dlbmVyYWxMaW1pdHMgPSBsb2NhbENvbmZpZy5nZW5lcmFsTGltaXRzO1xuICAgICAgICB0aGlzLl9zcGFuTGltaXRzID0gbG9jYWxDb25maWcuc3BhbkxpbWl0cztcbiAgICAgICAgdGhpcy5faWRHZW5lcmF0b3IgPSBjb25maWcuaWRHZW5lcmF0b3IgfHwgbmV3IHBsYXRmb3JtXzEuUmFuZG9tSWRHZW5lcmF0b3IoKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgICAgdGhpcy5fc3BhblByb2Nlc3NvciA9IHNwYW5Qcm9jZXNzb3I7XG4gICAgICAgIHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBpbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhcnRzIGEgbmV3IFNwYW4gb3IgcmV0dXJucyB0aGUgZGVmYXVsdCBOb29wU3BhbiBiYXNlZCBvbiB0aGUgc2FtcGxpbmdcbiAgICAgKiBkZWNpc2lvbi5cbiAgICAgKi9cbiAgICBzdGFydFNwYW4obmFtZSwgb3B0aW9ucyA9IHt9LCBjb250ZXh0ID0gYXBpLmNvbnRleHQuYWN0aXZlKCkpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHNwYW4gZnJvbSBjb250ZXh0IGluIGNhc2UgYSByb290IHNwYW4gaXMgcmVxdWVzdGVkIHZpYSBvcHRpb25zXG4gICAgICAgIGlmIChvcHRpb25zLnJvb3QpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBhcGkudHJhY2UuZGVsZXRlU3Bhbihjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRTcGFuID0gYXBpLnRyYWNlLmdldFNwYW4oY29udGV4dCk7XG4gICAgICAgIGlmICgoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpKSB7XG4gICAgICAgICAgICBhcGkuZGlhZy5kZWJ1ZygnSW5zdHJ1bWVudGF0aW9uIHN1cHByZXNzZWQsIHJldHVybmluZyBOb29wIFNwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IG5vblJlY29yZGluZ1NwYW4gPSBhcGkudHJhY2Uud3JhcFNwYW5Db250ZXh0KGFwaS5JTlZBTElEX1NQQU5fQ09OVEVYVCk7XG4gICAgICAgICAgICByZXR1cm4gbm9uUmVjb3JkaW5nU3BhbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRTcGFuQ29udGV4dCA9IHBhcmVudFNwYW4/LnNwYW5Db250ZXh0KCk7XG4gICAgICAgIGNvbnN0IHNwYW5JZCA9IHRoaXMuX2lkR2VuZXJhdG9yLmdlbmVyYXRlU3BhbklkKCk7XG4gICAgICAgIGxldCB2YWxpZFBhcmVudFNwYW5Db250ZXh0O1xuICAgICAgICBsZXQgdHJhY2VJZDtcbiAgICAgICAgbGV0IHRyYWNlU3RhdGU7XG4gICAgICAgIGlmICghcGFyZW50U3BhbkNvbnRleHQgfHxcbiAgICAgICAgICAgICFhcGkudHJhY2UuaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudFNwYW5Db250ZXh0KSkge1xuICAgICAgICAgICAgLy8gTmV3IHJvb3Qgc3Bhbi5cbiAgICAgICAgICAgIHRyYWNlSWQgPSB0aGlzLl9pZEdlbmVyYXRvci5nZW5lcmF0ZVRyYWNlSWQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5ldyBjaGlsZCBzcGFuLlxuICAgICAgICAgICAgdHJhY2VJZCA9IHBhcmVudFNwYW5Db250ZXh0LnRyYWNlSWQ7XG4gICAgICAgICAgICB0cmFjZVN0YXRlID0gcGFyZW50U3BhbkNvbnRleHQudHJhY2VTdGF0ZTtcbiAgICAgICAgICAgIHZhbGlkUGFyZW50U3BhbkNvbnRleHQgPSBwYXJlbnRTcGFuQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGFuS2luZCA9IG9wdGlvbnMua2luZCA/PyBhcGkuU3BhbktpbmQuSU5URVJOQUw7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gKG9wdGlvbnMubGlua3MgPz8gW10pLm1hcChsaW5rID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbGluay5jb250ZXh0LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICgwLCBjb3JlXzEuc2FuaXRpemVBdHRyaWJ1dGVzKShsaW5rLmF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoMCwgY29yZV8xLnNhbml0aXplQXR0cmlidXRlcykob3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgLy8gbWFrZSBzYW1wbGluZyBkZWNpc2lvblxuICAgICAgICBjb25zdCBzYW1wbGluZ1Jlc3VsdCA9IHRoaXMuX3NhbXBsZXIuc2hvdWxkU2FtcGxlKGNvbnRleHQsIHRyYWNlSWQsIG5hbWUsIHNwYW5LaW5kLCBhdHRyaWJ1dGVzLCBsaW5rcyk7XG4gICAgICAgIHRyYWNlU3RhdGUgPSBzYW1wbGluZ1Jlc3VsdC50cmFjZVN0YXRlID8/IHRyYWNlU3RhdGU7XG4gICAgICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBzYW1wbGluZ1Jlc3VsdC5kZWNpc2lvbiA9PT0gYXBpLlNhbXBsaW5nRGVjaXNpb24uUkVDT1JEX0FORF9TQU1QTEVEXG4gICAgICAgICAgICA/IGFwaS5UcmFjZUZsYWdzLlNBTVBMRURcbiAgICAgICAgICAgIDogYXBpLlRyYWNlRmxhZ3MuTk9ORTtcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSB7IHRyYWNlSWQsIHNwYW5JZCwgdHJhY2VGbGFncywgdHJhY2VTdGF0ZSB9O1xuICAgICAgICBpZiAoc2FtcGxpbmdSZXN1bHQuZGVjaXNpb24gPT09IGFwaS5TYW1wbGluZ0RlY2lzaW9uLk5PVF9SRUNPUkQpIHtcbiAgICAgICAgICAgIGFwaS5kaWFnLmRlYnVnKCdSZWNvcmRpbmcgaXMgb2ZmLCBwcm9wYWdhdGluZyBjb250ZXh0IGluIGEgbm9uLXJlY29yZGluZyBzcGFuJyk7XG4gICAgICAgICAgICBjb25zdCBub25SZWNvcmRpbmdTcGFuID0gYXBpLnRyYWNlLndyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gbm9uUmVjb3JkaW5nU3BhbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgaW5pdGlhbCBzcGFuIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGVzIG9iamVjdCBtYXkgaGF2ZSBiZWVuIG11dGF0ZWRcbiAgICAgICAgLy8gYnkgdGhlIHNhbXBsZXIsIHNvIHdlIHNhbml0aXplIHRoZSBtZXJnZWQgYXR0cmlidXRlcyBiZWZvcmUgc2V0dGluZyB0aGVtLlxuICAgICAgICBjb25zdCBpbml0QXR0cmlidXRlcyA9ICgwLCBjb3JlXzEuc2FuaXRpemVBdHRyaWJ1dGVzKShPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHNhbXBsaW5nUmVzdWx0LmF0dHJpYnV0ZXMpKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IG5ldyBTcGFuXzEuU3BhbkltcGwoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3Jlc291cmNlLFxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuaW5zdHJ1bWVudGF0aW9uU2NvcGUsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgc3BhbkNvbnRleHQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAga2luZDogc3BhbktpbmQsXG4gICAgICAgICAgICBsaW5rcyxcbiAgICAgICAgICAgIHBhcmVudFNwYW5Db250ZXh0OiB2YWxpZFBhcmVudFNwYW5Db250ZXh0LFxuICAgICAgICAgICAgYXR0cmlidXRlczogaW5pdEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBzdGFydFRpbWU6IG9wdGlvbnMuc3RhcnRUaW1lLFxuICAgICAgICAgICAgc3BhblByb2Nlc3NvcjogdGhpcy5fc3BhblByb2Nlc3NvcixcbiAgICAgICAgICAgIHNwYW5MaW1pdHM6IHRoaXMuX3NwYW5MaW1pdHMsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3BhbjtcbiAgICB9XG4gICAgc3RhcnRBY3RpdmVTcGFuKG5hbWUsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICAgICAgbGV0IG9wdHM7XG4gICAgICAgIGxldCBjdHg7XG4gICAgICAgIGxldCBmbjtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZm4gPSBhcmcyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBhcmcyO1xuICAgICAgICAgICAgZm4gPSBhcmczO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBjdHggPSBhcmczO1xuICAgICAgICAgICAgZm4gPSBhcmc0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudENvbnRleHQgPSBjdHggPz8gYXBpLmNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnN0YXJ0U3BhbihuYW1lLCBvcHRzLCBwYXJlbnRDb250ZXh0KTtcbiAgICAgICAgY29uc3QgY29udGV4dFdpdGhTcGFuU2V0ID0gYXBpLnRyYWNlLnNldFNwYW4ocGFyZW50Q29udGV4dCwgc3Bhbik7XG4gICAgICAgIHJldHVybiBhcGkuY29udGV4dC53aXRoKGNvbnRleHRXaXRoU3BhblNldCwgZm4sIHVuZGVmaW5lZCwgc3Bhbik7XG4gICAgfVxuICAgIC8qKiBSZXR1cm5zIHRoZSBhY3RpdmUge0BsaW5rIEdlbmVyYWxMaW1pdHN9LiAqL1xuICAgIGdldEdlbmVyYWxMaW1pdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmFsTGltaXRzO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyB0aGUgYWN0aXZlIHtAbGluayBTcGFuTGltaXRzfS4gKi9cbiAgICBnZXRTcGFuTGltaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3BhbkxpbWl0cztcbiAgICB9XG59XG5leHBvcnRzLlRyYWNlciA9IFRyYWNlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyYWNlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTXVsdGlTcGFuUHJvY2Vzc29yID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgU3BhblByb2Nlc3Nvcn0gdGhhdCBzaW1wbHkgZm9yd2FyZHMgYWxsXG4gKiByZWNlaXZlZCBldmVudHMgdG8gYSBsaXN0IG9mIHtAbGluayBTcGFuUHJvY2Vzc29yfXMuXG4gKi9cbmNsYXNzIE11bHRpU3BhblByb2Nlc3NvciB7XG4gICAgX3NwYW5Qcm9jZXNzb3JzO1xuICAgIGNvbnN0cnVjdG9yKF9zcGFuUHJvY2Vzc29ycykge1xuICAgICAgICB0aGlzLl9zcGFuUHJvY2Vzc29ycyA9IF9zcGFuUHJvY2Vzc29ycztcbiAgICB9XG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzcGFuUHJvY2Vzc29yIG9mIHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHNwYW5Qcm9jZXNzb3IuZm9yY2VGbHVzaCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICgwLCBjb3JlXzEuZ2xvYmFsRXJyb3JIYW5kbGVyKShlcnJvciB8fCBuZXcgRXJyb3IoJ011bHRpU3BhblByb2Nlc3NvcjogZm9yY2VGbHVzaCBmYWlsZWQnKSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblN0YXJ0KHNwYW4sIGNvbnRleHQpIHtcbiAgICAgICAgZm9yIChjb25zdCBzcGFuUHJvY2Vzc29yIG9mIHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSB7XG4gICAgICAgICAgICBzcGFuUHJvY2Vzc29yLm9uU3RhcnQoc3BhbiwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FbmQoc3Bhbikge1xuICAgICAgICBmb3IgKGNvbnN0IHNwYW5Qcm9jZXNzb3Igb2YgdGhpcy5fc3BhblByb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIHNwYW5Qcm9jZXNzb3Iub25FbmQoc3Bhbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3BhblByb2Nlc3NvciBvZiB0aGlzLl9zcGFuUHJvY2Vzc29ycykge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChzcGFuUHJvY2Vzc29yLnNodXRkb3duKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5NdWx0aVNwYW5Qcm9jZXNzb3IgPSBNdWx0aVNwYW5Qcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NdWx0aVNwYW5Qcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhc2ljVHJhY2VyUHJvdmlkZXIgPSBleHBvcnRzLkZvcmNlRmx1c2hTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgcmVzb3VyY2VzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzXCIpO1xuY29uc3QgVHJhY2VyXzEgPSByZXF1aXJlKFwiLi9UcmFjZXJcIik7XG5jb25zdCBjb25maWdfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1wiKTtcbmNvbnN0IE11bHRpU3BhblByb2Nlc3Nvcl8xID0gcmVxdWlyZShcIi4vTXVsdGlTcGFuUHJvY2Vzc29yXCIpO1xuY29uc3QgdXRpbGl0eV8xID0gcmVxdWlyZShcIi4vdXRpbGl0eVwiKTtcbnZhciBGb3JjZUZsdXNoU3RhdGU7XG4oZnVuY3Rpb24gKEZvcmNlRmx1c2hTdGF0ZSkge1xuICAgIEZvcmNlRmx1c2hTdGF0ZVtGb3JjZUZsdXNoU3RhdGVbXCJyZXNvbHZlZFwiXSA9IDBdID0gXCJyZXNvbHZlZFwiO1xuICAgIEZvcmNlRmx1c2hTdGF0ZVtGb3JjZUZsdXNoU3RhdGVbXCJ0aW1lb3V0XCJdID0gMV0gPSBcInRpbWVvdXRcIjtcbiAgICBGb3JjZUZsdXNoU3RhdGVbRm9yY2VGbHVzaFN0YXRlW1wiZXJyb3JcIl0gPSAyXSA9IFwiZXJyb3JcIjtcbiAgICBGb3JjZUZsdXNoU3RhdGVbRm9yY2VGbHVzaFN0YXRlW1widW5yZXNvbHZlZFwiXSA9IDNdID0gXCJ1bnJlc29sdmVkXCI7XG59KShGb3JjZUZsdXNoU3RhdGUgPSBleHBvcnRzLkZvcmNlRmx1c2hTdGF0ZSB8fCAoZXhwb3J0cy5Gb3JjZUZsdXNoU3RhdGUgPSB7fSkpO1xuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNpYyB0cmFjZXIgcHJvdmlkZXIgd2hpY2ggcGxhdGZvcm0gbGlicmFyaWVzIGNhbiBleHRlbmRcbiAqL1xuY2xhc3MgQmFzaWNUcmFjZXJQcm92aWRlciB7XG4gICAgX2NvbmZpZztcbiAgICBfdHJhY2VycyA9IG5ldyBNYXAoKTtcbiAgICBfcmVzb3VyY2U7XG4gICAgX2FjdGl2ZVNwYW5Qcm9jZXNzb3I7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkQ29uZmlnID0gKDAsIGNvcmVfMS5tZXJnZSkoe30sICgwLCBjb25maWdfMS5sb2FkRGVmYXVsdENvbmZpZykoKSwgKDAsIHV0aWxpdHlfMS5yZWNvbmZpZ3VyZUxpbWl0cykoY29uZmlnKSk7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gbWVyZ2VkQ29uZmlnLnJlc291cmNlID8/ICgwLCByZXNvdXJjZXNfMS5kZWZhdWx0UmVzb3VyY2UpKCk7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG1lcmdlZENvbmZpZywge1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3Jlc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3BhblByb2Nlc3NvcnMgPSBbXTtcbiAgICAgICAgaWYgKGNvbmZpZy5zcGFuUHJvY2Vzc29ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGFuUHJvY2Vzc29ycy5wdXNoKC4uLmNvbmZpZy5zcGFuUHJvY2Vzc29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBNdWx0aVNwYW5Qcm9jZXNzb3JfMS5NdWx0aVNwYW5Qcm9jZXNzb3Ioc3BhblByb2Nlc3NvcnMpO1xuICAgIH1cbiAgICBnZXRUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtuYW1lfUAke3ZlcnNpb24gfHwgJyd9OiR7b3B0aW9ucz8uc2NoZW1hVXJsIHx8ICcnfWA7XG4gICAgICAgIGlmICghdGhpcy5fdHJhY2Vycy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhY2Vycy5zZXQoa2V5LCBuZXcgVHJhY2VyXzEuVHJhY2VyKHsgbmFtZSwgdmVyc2lvbiwgc2NoZW1hVXJsOiBvcHRpb25zPy5zY2hlbWFVcmwgfSwgdGhpcy5fY29uZmlnLCB0aGlzLl9yZXNvdXJjZSwgdGhpcy5fYWN0aXZlU3BhblByb2Nlc3NvcikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl90cmFjZXJzLmdldChrZXkpO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5fY29uZmlnLmZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuX2FjdGl2ZVNwYW5Qcm9jZXNzb3JbJ19zcGFuUHJvY2Vzc29ycyddLm1hcCgoc3BhblByb2Nlc3NvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SW50ZXJ2YWwgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgRXJyb3IoYFNwYW4gcHJvY2Vzc29yIGRpZCBub3QgY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHBlcmlvZCBvZiAke3RpbWVvdXR9IG1zYCkpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEZvcmNlRmx1c2hTdGF0ZS50aW1lb3V0O1xuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHNwYW5Qcm9jZXNzb3JcbiAgICAgICAgICAgICAgICAgICAgLmZvcmNlRmx1c2goKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09IEZvcmNlRmx1c2hTdGF0ZS50aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEZvcmNlRmx1c2hTdGF0ZS5yZXNvbHZlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gRm9yY2VGbHVzaFN0YXRlLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiByZXN1bHQgIT09IEZvcmNlRmx1c2hTdGF0ZS5yZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHJlamVjdChbZXJyb3JdKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKTtcbiAgICB9XG59XG5leHBvcnRzLkJhc2ljVHJhY2VyUHJvdmlkZXIgPSBCYXNpY1RyYWNlclByb3ZpZGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmFzaWNUcmFjZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29uc29sZVNwYW5FeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuLyoqXG4gKiBUaGlzIGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBTcGFuRXhwb3J0ZXJ9IHRoYXQgcHJpbnRzIHNwYW5zIHRvIHRoZVxuICogY29uc29sZS4gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy5cbiAqXG4gKiBOT1RFOiBUaGlzIHtAbGluayBTcGFuRXhwb3J0ZXJ9IGlzIGludGVuZGVkIGZvciBkaWFnbm9zdGljcyB1c2Ugb25seSwgb3V0cHV0IHJlbmRlcmVkIHRvIHRoZSBjb25zb2xlIG1heSBjaGFuZ2UgYXQgYW55IHRpbWUuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmNsYXNzIENvbnNvbGVTcGFuRXhwb3J0ZXIge1xuICAgIC8qKlxuICAgICAqIEV4cG9ydCBzcGFucy5cbiAgICAgKiBAcGFyYW0gc3BhbnNcbiAgICAgKiBAcGFyYW0gcmVzdWx0Q2FsbGJhY2tcbiAgICAgKi9cbiAgICBleHBvcnQoc3BhbnMsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kU3BhbnMoc3BhbnMsIHJlc3VsdENhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2h1dGRvd24gdGhlIGV4cG9ydGVyLlxuICAgICAqL1xuICAgIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9zZW5kU3BhbnMoW10pO1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydHMgYW55IHBlbmRpbmcgc3BhbnMgaW4gZXhwb3J0ZXJcbiAgICAgKi9cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIHNwYW4gaW5mbyBpbnRvIG1vcmUgcmVhZGFibGUgZm9ybWF0XG4gICAgICogQHBhcmFtIHNwYW5cbiAgICAgKi9cbiAgICBfZXhwb3J0SW5mbyhzcGFuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHNwYW4ucmVzb3VyY2UuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb25TY29wZTogc3Bhbi5pbnN0cnVtZW50YXRpb25TY29wZSxcbiAgICAgICAgICAgIHRyYWNlSWQ6IHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkLFxuICAgICAgICAgICAgcGFyZW50U3BhbkNvbnRleHQ6IHNwYW4ucGFyZW50U3BhbkNvbnRleHQsXG4gICAgICAgICAgICB0cmFjZVN0YXRlOiBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VTdGF0ZT8uc2VyaWFsaXplKCksXG4gICAgICAgICAgICBuYW1lOiBzcGFuLm5hbWUsXG4gICAgICAgICAgICBpZDogc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCxcbiAgICAgICAgICAgIGtpbmQ6IHNwYW4ua2luZCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogKDAsIGNvcmVfMS5oclRpbWVUb01pY3Jvc2Vjb25kcykoc3Bhbi5zdGFydFRpbWUpLFxuICAgICAgICAgICAgZHVyYXRpb246ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWNyb3NlY29uZHMpKHNwYW4uZHVyYXRpb24pLFxuICAgICAgICAgICAgYXR0cmlidXRlczogc3Bhbi5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgc3RhdHVzOiBzcGFuLnN0YXR1cyxcbiAgICAgICAgICAgIGV2ZW50czogc3Bhbi5ldmVudHMsXG4gICAgICAgICAgICBsaW5rczogc3Bhbi5saW5rcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2hvd2luZyBzcGFucyBpbiBjb25zb2xlXG4gICAgICogQHBhcmFtIHNwYW5zXG4gICAgICogQHBhcmFtIGRvbmVcbiAgICAgKi9cbiAgICBfc2VuZFNwYW5zKHNwYW5zLCBkb25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3BhbiBvZiBzcGFucykge1xuICAgICAgICAgICAgY29uc29sZS5kaXIodGhpcy5fZXhwb3J0SW5mbyhzcGFuKSwgeyBkZXB0aDogMyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvbmUoeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Db25zb2xlU3BhbkV4cG9ydGVyID0gQ29uc29sZVNwYW5FeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbnNvbGVTcGFuRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluTWVtb3J5U3BhbkV4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG4vKipcbiAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEl0IHN0b3JlcyB0aGUgZXhwb3J0ZWQgc3BhbnNcbiAqIGluIGEgbGlzdCBpbiBtZW1vcnkgdGhhdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZSBgZ2V0RmluaXNoZWRTcGFucygpYFxuICogbWV0aG9kLlxuICovXG5jbGFzcyBJbk1lbW9yeVNwYW5FeHBvcnRlciB7XG4gICAgX2ZpbmlzaGVkU3BhbnMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGV4cG9ydGVyIGhhcyBiZWVuIFwic2h1dGRvd24uXCJcbiAgICAgKiBXaGVuIGZhbHNlLCBleHBvcnRlZCBzcGFucyB3aWxsIG5vdCBiZSBzdG9yZWQgaW4tbWVtb3J5LlxuICAgICAqL1xuICAgIF9zdG9wcGVkID0gZmFsc2U7XG4gICAgZXhwb3J0KHNwYW5zLCByZXN1bHRDYWxsYmFjaykge1xuICAgICAgICBpZiAodGhpcy5fc3RvcHBlZClcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRDYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELFxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ0V4cG9ydGVyIGhhcyBiZWVuIHN0b3BwZWQnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9maW5pc2hlZFNwYW5zLnB1c2goLi4uc3BhbnMpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlc3VsdENhbGxiYWNrKHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9KSwgMCk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydHMgYW55IHBlbmRpbmcgc3BhbnMgaW4gdGhlIGV4cG9ydGVyXG4gICAgICovXG4gICAgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIH1cbiAgICBnZXRGaW5pc2hlZFNwYW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoZWRTcGFucztcbiAgICB9XG59XG5leHBvcnRzLkluTWVtb3J5U3BhbkV4cG9ydGVyID0gSW5NZW1vcnlTcGFuRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Jbk1lbW9yeVNwYW5FeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2ltcGxlU3BhblByb2Nlc3NvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUge0BsaW5rIFNwYW5Qcm9jZXNzb3J9IHRoYXQgY29udmVydHMgdGhlIHtAbGluayBTcGFufVxuICogdG8ge0BsaW5rIFJlYWRhYmxlU3Bhbn0gYW5kIHBhc3NlcyBpdCB0byB0aGUgY29uZmlndXJlZCBleHBvcnRlci5cbiAqXG4gKiBPbmx5IHNwYW5zIHRoYXQgYXJlIHNhbXBsZWQgYXJlIGNvbnZlcnRlZC5cbiAqXG4gKiBOT1RFOiBUaGlzIHtAbGluayBTcGFuUHJvY2Vzc29yfSBleHBvcnRzIGV2ZXJ5IGVuZGVkIHNwYW4gaW5kaXZpZHVhbGx5IGluc3RlYWQgb2YgYmF0Y2hpbmcgc3BhbnMgdG9nZXRoZXIsIHdoaWNoIGNhdXNlcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBvdmVyaGVhZCB3aXRoIG1vc3QgZXhwb3J0ZXJzLiBGb3IgcHJvZHVjdGlvbiB1c2UsIHBsZWFzZSBjb25zaWRlciB1c2luZyB0aGUge0BsaW5rIEJhdGNoU3BhblByb2Nlc3Nvcn0gaW5zdGVhZC5cbiAqL1xuY2xhc3MgU2ltcGxlU3BhblByb2Nlc3NvciB7XG4gICAgX2V4cG9ydGVyO1xuICAgIF9zaHV0ZG93bk9uY2U7XG4gICAgX3BlbmRpbmdFeHBvcnRzO1xuICAgIGNvbnN0cnVjdG9yKF9leHBvcnRlcikge1xuICAgICAgICB0aGlzLl9leHBvcnRlciA9IF9leHBvcnRlcjtcbiAgICAgICAgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGNvcmVfMS5CaW5kT25jZUZ1dHVyZSh0aGlzLl9zaHV0ZG93biwgdGhpcyk7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdFeHBvcnRzID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICBhc3luYyBmb3JjZUZsdXNoKCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHRoaXMuX3BlbmRpbmdFeHBvcnRzKSk7XG4gICAgICAgIGlmICh0aGlzLl9leHBvcnRlci5mb3JjZUZsdXNoKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leHBvcnRlci5mb3JjZUZsdXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25TdGFydChfc3BhbiwgX3BhcmVudENvbnRleHQpIHsgfVxuICAgIG9uRW5kKHNwYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlRmxhZ3MgJiBhcGlfMS5UcmFjZUZsYWdzLlNBTVBMRUQpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGVuZGluZ0V4cG9ydCA9IHRoaXMuX2RvRXhwb3J0KHNwYW4pLmNhdGNoKGVyciA9PiAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikoZXJyKSk7XG4gICAgICAgIC8vIEVucXVldWUgdGhpcyBleHBvcnQgdG8gdGhlIHBlbmRpbmcgbGlzdCBzbyBpdCBjYW4gYmUgZmx1c2hlZCBieSB0aGUgdXNlci5cbiAgICAgICAgdGhpcy5fcGVuZGluZ0V4cG9ydHMuYWRkKHBlbmRpbmdFeHBvcnQpO1xuICAgICAgICBwZW5kaW5nRXhwb3J0LmZpbmFsbHkoKCkgPT4gdGhpcy5fcGVuZGluZ0V4cG9ydHMuZGVsZXRlKHBlbmRpbmdFeHBvcnQpKTtcbiAgICB9XG4gICAgYXN5bmMgX2RvRXhwb3J0KHNwYW4pIHtcbiAgICAgICAgaWYgKHNwYW4ucmVzb3VyY2UuYXN5bmNBdHRyaWJ1dGVzUGVuZGluZykge1xuICAgICAgICAgICAgLy8gRW5zdXJlIHJlc291cmNlIGlzIGZ1bGx5IHJlc29sdmVkIGJlZm9yZSBleHBvcnRpbmcuXG4gICAgICAgICAgICBhd2FpdCBzcGFuLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXM/LigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvcmVfMS5pbnRlcm5hbC5fZXhwb3J0KHRoaXMuX2V4cG9ydGVyLCBbc3Bhbl0pO1xuICAgICAgICBpZiAocmVzdWx0LmNvZGUgIT09IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MpIHtcbiAgICAgICAgICAgIHRocm93IChyZXN1bHQuZXJyb3IgPz9cbiAgICAgICAgICAgICAgICBuZXcgRXJyb3IoYFNpbXBsZVNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZCAoc3RhdHVzICR7cmVzdWx0fSlgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH1cbiAgICBfc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgIH1cbn1cbmV4cG9ydHMuU2ltcGxlU3BhblByb2Nlc3NvciA9IFNpbXBsZVNwYW5Qcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TaW1wbGVTcGFuUHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Ob29wU3BhblByb2Nlc3NvciA9IHZvaWQgMDtcbi8qKiBOby1vcCBpbXBsZW1lbnRhdGlvbiBvZiBTcGFuUHJvY2Vzc29yICovXG5jbGFzcyBOb29wU3BhblByb2Nlc3NvciB7XG4gICAgb25TdGFydChfc3BhbiwgX2NvbnRleHQpIHsgfVxuICAgIG9uRW5kKF9zcGFuKSB7IH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxufVxuZXhwb3J0cy5Ob29wU3BhblByb2Nlc3NvciA9IE5vb3BTcGFuUHJvY2Vzc29yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm9vcFNwYW5Qcm9jZXNzb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNhbXBsaW5nRGVjaXNpb24gPSBleHBvcnRzLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciA9IGV4cG9ydHMuUGFyZW50QmFzZWRTYW1wbGVyID0gZXhwb3J0cy5BbHdheXNPblNhbXBsZXIgPSBleHBvcnRzLkFsd2F5c09mZlNhbXBsZXIgPSBleHBvcnRzLk5vb3BTcGFuUHJvY2Vzc29yID0gZXhwb3J0cy5TaW1wbGVTcGFuUHJvY2Vzc29yID0gZXhwb3J0cy5Jbk1lbW9yeVNwYW5FeHBvcnRlciA9IGV4cG9ydHMuQ29uc29sZVNwYW5FeHBvcnRlciA9IGV4cG9ydHMuUmFuZG9tSWRHZW5lcmF0b3IgPSBleHBvcnRzLkJhdGNoU3BhblByb2Nlc3NvciA9IGV4cG9ydHMuQmFzaWNUcmFjZXJQcm92aWRlciA9IHZvaWQgMDtcbnZhciBCYXNpY1RyYWNlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9CYXNpY1RyYWNlclByb3ZpZGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmFzaWNUcmFjZXJQcm92aWRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmFzaWNUcmFjZXJQcm92aWRlcl8xLkJhc2ljVHJhY2VyUHJvdmlkZXI7IH0gfSk7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmF0Y2hTcGFuUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLkJhdGNoU3BhblByb2Nlc3NvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmRvbUlkR2VuZXJhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLlJhbmRvbUlkR2VuZXJhdG9yOyB9IH0pO1xudmFyIENvbnNvbGVTcGFuRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9Db25zb2xlU3BhbkV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uc29sZVNwYW5FeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29uc29sZVNwYW5FeHBvcnRlcl8xLkNvbnNvbGVTcGFuRXhwb3J0ZXI7IH0gfSk7XG52YXIgSW5NZW1vcnlTcGFuRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9Jbk1lbW9yeVNwYW5FeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluTWVtb3J5U3BhbkV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBJbk1lbW9yeVNwYW5FeHBvcnRlcl8xLkluTWVtb3J5U3BhbkV4cG9ydGVyOyB9IH0pO1xudmFyIFNpbXBsZVNwYW5Qcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9TaW1wbGVTcGFuUHJvY2Vzc29yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2ltcGxlU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU2ltcGxlU3BhblByb2Nlc3Nvcl8xLlNpbXBsZVNwYW5Qcm9jZXNzb3I7IH0gfSk7XG52YXIgTm9vcFNwYW5Qcm9jZXNzb3JfMSA9IHJlcXVpcmUoXCIuL2V4cG9ydC9Ob29wU3BhblByb2Nlc3NvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vb3BTcGFuUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOb29wU3BhblByb2Nlc3Nvcl8xLk5vb3BTcGFuUHJvY2Vzc29yOyB9IH0pO1xudmFyIEFsd2F5c09mZlNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvQWx3YXlzT2ZmU2FtcGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFsd2F5c09mZlNhbXBsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFsd2F5c09mZlNhbXBsZXJfMS5BbHdheXNPZmZTYW1wbGVyOyB9IH0pO1xudmFyIEFsd2F5c09uU2FtcGxlcl8xID0gcmVxdWlyZShcIi4vc2FtcGxlci9BbHdheXNPblNhbXBsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBbHdheXNPblNhbXBsZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFsd2F5c09uU2FtcGxlcl8xLkFsd2F5c09uU2FtcGxlcjsgfSB9KTtcbnZhciBQYXJlbnRCYXNlZFNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL3NhbXBsZXIvUGFyZW50QmFzZWRTYW1wbGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50QmFzZWRTYW1wbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQYXJlbnRCYXNlZFNhbXBsZXJfMS5QYXJlbnRCYXNlZFNhbXBsZXI7IH0gfSk7XG52YXIgVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXzEgPSByZXF1aXJlKFwiLi9zYW1wbGVyL1RyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXzEuVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyOyB9IH0pO1xudmFyIFNhbXBsZXJfMSA9IHJlcXVpcmUoXCIuL1NhbXBsZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTYW1wbGluZ0RlY2lzaW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTYW1wbGVyXzEuU2FtcGxpbmdEZWNpc2lvbjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5vZGVUcmFjZXJQcm92aWRlciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBjb250ZXh0X2FzeW5jX2hvb2tzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29udGV4dC1hc3luYy1ob29rc1wiKTtcbmNvbnN0IHNka190cmFjZV9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2VcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmZ1bmN0aW9uIHNldHVwQ29udGV4dE1hbmFnZXIoY29udGV4dE1hbmFnZXIpIHtcbiAgICAvLyBudWxsIG1lYW5zICdkbyBub3QgcmVnaXN0ZXInXG4gICAgaWYgKGNvbnRleHRNYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdW5kZWZpbmVkIG1lYW5zICdyZWdpc3RlciBkZWZhdWx0J1xuICAgIGlmIChjb250ZXh0TWFuYWdlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb250ZXh0TWFuYWdlciA9IG5ldyBjb250ZXh0X2FzeW5jX2hvb2tzXzEuQXN5bmNMb2NhbFN0b3JhZ2VDb250ZXh0TWFuYWdlcigpO1xuICAgICAgICBkZWZhdWx0Q29udGV4dE1hbmFnZXIuZW5hYmxlKCk7XG4gICAgICAgIGFwaV8xLmNvbnRleHQuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIoZGVmYXVsdENvbnRleHRNYW5hZ2VyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZXh0TWFuYWdlci5lbmFibGUoKTtcbiAgICBhcGlfMS5jb250ZXh0LnNldEdsb2JhbENvbnRleHRNYW5hZ2VyKGNvbnRleHRNYW5hZ2VyKTtcbn1cbmZ1bmN0aW9uIHNldHVwUHJvcGFnYXRvcihwcm9wYWdhdG9yKSB7XG4gICAgLy8gbnVsbCBtZWFucyAnZG8gbm90IHJlZ2lzdGVyJ1xuICAgIGlmIChwcm9wYWdhdG9yID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdW5kZWZpbmVkIG1lYW5zICdyZWdpc3RlciBkZWZhdWx0J1xuICAgIGlmIChwcm9wYWdhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXBpXzEucHJvcGFnYXRpb24uc2V0R2xvYmFsUHJvcGFnYXRvcihuZXcgY29yZV8xLkNvbXBvc2l0ZVByb3BhZ2F0b3Ioe1xuICAgICAgICAgICAgcHJvcGFnYXRvcnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgY29yZV8xLlczQ1RyYWNlQ29udGV4dFByb3BhZ2F0b3IoKSxcbiAgICAgICAgICAgICAgICBuZXcgY29yZV8xLlczQ0JhZ2dhZ2VQcm9wYWdhdG9yKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBpXzEucHJvcGFnYXRpb24uc2V0R2xvYmFsUHJvcGFnYXRvcihwcm9wYWdhdG9yKTtcbn1cbi8qKlxuICogUmVnaXN0ZXIgdGhpcyBUcmFjZXJQcm92aWRlciBmb3IgdXNlIHdpdGggdGhlIE9wZW5UZWxlbWV0cnkgQVBJLlxuICogVW5kZWZpbmVkIHZhbHVlcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cywgYW5kXG4gKiBudWxsIHZhbHVlcyB3aWxsIGJlIHNraXBwZWQuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgU0RLIHJlZ2lzdHJhdGlvblxuICovXG5jbGFzcyBOb2RlVHJhY2VyUHJvdmlkZXIgZXh0ZW5kcyBzZGtfdHJhY2VfYmFzZV8xLkJhc2ljVHJhY2VyUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoaXMgVHJhY2VyUHJvdmlkZXIgZm9yIHVzZSB3aXRoIHRoZSBPcGVuVGVsZW1ldHJ5IEFQSS5cbiAgICAgKiBVbmRlZmluZWQgdmFsdWVzIG1heSBiZSByZXBsYWNlZCB3aXRoIGRlZmF1bHRzLCBhbmRcbiAgICAgKiBudWxsIHZhbHVlcyB3aWxsIGJlIHNraXBwZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBTREsgcmVnaXN0cmF0aW9uXG4gICAgICovXG4gICAgcmVnaXN0ZXIoY29uZmlnID0ge30pIHtcbiAgICAgICAgYXBpXzEudHJhY2Uuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIodGhpcyk7XG4gICAgICAgIHNldHVwQ29udGV4dE1hbmFnZXIoY29uZmlnLmNvbnRleHRNYW5hZ2VyKTtcbiAgICAgICAgc2V0dXBQcm9wYWdhdG9yKGNvbmZpZy5wcm9wYWdhdG9yKTtcbiAgICB9XG59XG5leHBvcnRzLk5vZGVUcmFjZXJQcm92aWRlciA9IE5vZGVUcmFjZXJQcm92aWRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vZGVUcmFjZXJQcm92aWRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyID0gZXhwb3J0cy5TaW1wbGVTcGFuUHJvY2Vzc29yID0gZXhwb3J0cy5TYW1wbGluZ0RlY2lzaW9uID0gZXhwb3J0cy5SYW5kb21JZEdlbmVyYXRvciA9IGV4cG9ydHMuUGFyZW50QmFzZWRTYW1wbGVyID0gZXhwb3J0cy5Ob29wU3BhblByb2Nlc3NvciA9IGV4cG9ydHMuSW5NZW1vcnlTcGFuRXhwb3J0ZXIgPSBleHBvcnRzLkNvbnNvbGVTcGFuRXhwb3J0ZXIgPSBleHBvcnRzLkJhdGNoU3BhblByb2Nlc3NvciA9IGV4cG9ydHMuQmFzaWNUcmFjZXJQcm92aWRlciA9IGV4cG9ydHMuQWx3YXlzT25TYW1wbGVyID0gZXhwb3J0cy5BbHdheXNPZmZTYW1wbGVyID0gZXhwb3J0cy5Ob2RlVHJhY2VyUHJvdmlkZXIgPSB2b2lkIDA7XG52YXIgTm9kZVRyYWNlclByb3ZpZGVyXzEgPSByZXF1aXJlKFwiLi9Ob2RlVHJhY2VyUHJvdmlkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb2RlVHJhY2VyUHJvdmlkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5vZGVUcmFjZXJQcm92aWRlcl8xLk5vZGVUcmFjZXJQcm92aWRlcjsgfSB9KTtcbnZhciBzZGtfdHJhY2VfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1iYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWx3YXlzT2ZmU2FtcGxlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5BbHdheXNPZmZTYW1wbGVyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWx3YXlzT25TYW1wbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLkFsd2F5c09uU2FtcGxlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhc2ljVHJhY2VyUHJvdmlkZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNka190cmFjZV9iYXNlXzEuQmFzaWNUcmFjZXJQcm92aWRlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhdGNoU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5CYXRjaFNwYW5Qcm9jZXNzb3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb25zb2xlU3BhbkV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLkNvbnNvbGVTcGFuRXhwb3J0ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbk1lbW9yeVNwYW5FeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5Jbk1lbW9yeVNwYW5FeHBvcnRlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vb3BTcGFuUHJvY2Vzc29yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLk5vb3BTcGFuUHJvY2Vzc29yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50QmFzZWRTYW1wbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLlBhcmVudEJhc2VkU2FtcGxlcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmRvbUlkR2VuZXJhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLlJhbmRvbUlkR2VuZXJhdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2FtcGxpbmdEZWNpc2lvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5TYW1wbGluZ0RlY2lzaW9uOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2ltcGxlU3BhblByb2Nlc3NvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2RrX3RyYWNlX2Jhc2VfMS5TaW1wbGVTcGFuUHJvY2Vzc29yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfdHJhY2VfYmFzZV8xLlRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaXNhYmxlSW5zdHJ1bWVudGF0aW9ucyA9IGV4cG9ydHMuZW5hYmxlSW5zdHJ1bWVudGF0aW9ucyA9IHZvaWQgMDtcbi8qKlxuICogRW5hYmxlIGluc3RydW1lbnRhdGlvbnNcbiAqIEBwYXJhbSBpbnN0cnVtZW50YXRpb25zXG4gKiBAcGFyYW0gdHJhY2VyUHJvdmlkZXJcbiAqIEBwYXJhbSBtZXRlclByb3ZpZGVyXG4gKi9cbmZ1bmN0aW9uIGVuYWJsZUluc3RydW1lbnRhdGlvbnMoaW5zdHJ1bWVudGF0aW9ucywgdHJhY2VyUHJvdmlkZXIsIG1ldGVyUHJvdmlkZXIsIGxvZ2dlclByb3ZpZGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBpbnN0cnVtZW50YXRpb25zLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb24gPSBpbnN0cnVtZW50YXRpb25zW2ldO1xuICAgICAgICBpZiAodHJhY2VyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRUcmFjZXJQcm92aWRlcih0cmFjZXJQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRNZXRlclByb3ZpZGVyKG1ldGVyUHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2dnZXJQcm92aWRlciAmJiBpbnN0cnVtZW50YXRpb24uc2V0TG9nZ2VyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRMb2dnZXJQcm92aWRlcihsb2dnZXJQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW5zdHJ1bWVudGF0aW9ucyBoYXZlIGJlZW4gYWxyZWFkeSBlbmFibGVkIGR1cmluZyBjcmVhdGlvblxuICAgICAgICAvLyBzbyBlbmFibGUgb25seSBpZiB1c2VyIHByZXZlbnRlZCB0aGF0IGJ5IHNldHRpbmcgZW5hYmxlZCB0byBmYWxzZVxuICAgICAgICAvLyB0aGlzIGlzIHRvIHByZXZlbnQgZG91YmxlIGVuYWJsaW5nIGJ1dCB3aGVuIGNhbGxpbmcgcmVnaXN0ZXIgYWxsXG4gICAgICAgIC8vIGluc3RydW1lbnRhdGlvbnMgc2hvdWxkIGJlIG5vdyBlbmFibGVkXG4gICAgICAgIGlmICghaW5zdHJ1bWVudGF0aW9uLmdldENvbmZpZygpLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZW5hYmxlSW5zdHJ1bWVudGF0aW9ucyA9IGVuYWJsZUluc3RydW1lbnRhdGlvbnM7XG4vKipcbiAqIERpc2FibGUgaW5zdHJ1bWVudGF0aW9uc1xuICogQHBhcmFtIGluc3RydW1lbnRhdGlvbnNcbiAqL1xuZnVuY3Rpb24gZGlzYWJsZUluc3RydW1lbnRhdGlvbnMoaW5zdHJ1bWVudGF0aW9ucykge1xuICAgIGluc3RydW1lbnRhdGlvbnMuZm9yRWFjaChpbnN0cnVtZW50YXRpb24gPT4gaW5zdHJ1bWVudGF0aW9uLmRpc2FibGUoKSk7XG59XG5leHBvcnRzLmRpc2FibGVJbnN0cnVtZW50YXRpb25zID0gZGlzYWJsZUluc3RydW1lbnRhdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRvTG9hZGVyVXRpbHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGFwaV9sb2dzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3NcIik7XG5jb25zdCBhdXRvTG9hZGVyVXRpbHNfMSA9IHJlcXVpcmUoXCIuL2F1dG9Mb2FkZXJVdGlsc1wiKTtcbi8qKlxuICogSXQgd2lsbCByZWdpc3RlciBpbnN0cnVtZW50YXRpb25zIGFuZCBwbHVnaW5zXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiByZXR1cm5zIGZ1bmN0aW9uIHRvIHVubG9hZCBpbnN0cnVtZW50YXRpb24gYW5kIHBsdWdpbnMgdGhhdCB3ZXJlXG4gKiAgIHJlZ2lzdGVyZWRcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCB0cmFjZXJQcm92aWRlciA9IG9wdGlvbnMudHJhY2VyUHJvdmlkZXIgfHwgYXBpXzEudHJhY2UuZ2V0VHJhY2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBtZXRlclByb3ZpZGVyID0gb3B0aW9ucy5tZXRlclByb3ZpZGVyIHx8IGFwaV8xLm1ldHJpY3MuZ2V0TWV0ZXJQcm92aWRlcigpO1xuICAgIGNvbnN0IGxvZ2dlclByb3ZpZGVyID0gb3B0aW9ucy5sb2dnZXJQcm92aWRlciB8fCBhcGlfbG9nc18xLmxvZ3MuZ2V0TG9nZ2VyUHJvdmlkZXIoKTtcbiAgICBjb25zdCBpbnN0cnVtZW50YXRpb25zID0gb3B0aW9ucy5pbnN0cnVtZW50YXRpb25zPy5mbGF0KCkgPz8gW107XG4gICAgKDAsIGF1dG9Mb2FkZXJVdGlsc18xLmVuYWJsZUluc3RydW1lbnRhdGlvbnMpKGluc3RydW1lbnRhdGlvbnMsIHRyYWNlclByb3ZpZGVyLCBtZXRlclByb3ZpZGVyLCBsb2dnZXJQcm92aWRlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgKDAsIGF1dG9Mb2FkZXJVdGlsc18xLmRpc2FibGVJbnN0cnVtZW50YXRpb25zKShpbnN0cnVtZW50YXRpb25zKTtcbiAgICB9O1xufVxuZXhwb3J0cy5yZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgPSByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdXRvTG9hZGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zYXRpc2ZpZXMgPSB2b2lkIDA7XG4vLyBUaGlzIGlzIGEgY3VzdG9tIHNlbWFudGljIHZlcnNpb25pbmcgaW1wbGVtZW50YXRpb24gY29tcGF0aWJsZSB3aXRoIHRoZVxuLy8gYHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucz8pYCBmdW5jdGlvbiBmcm9tIHRoZSBgc2VtdmVyYCBucG0gcGFja2FnZTtcbi8vIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBgbG9vc2VgIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbi8vIFRoZSBtb3RpdmF0aW9uIGZvciB0aGUgY3VzdG9tIHNlbXZlciBpbXBsZW1lbnRhdGlvbiBpcyB0aGF0XG4vLyBgc2VtdmVyYCBwYWNrYWdlIGhhcyBzb21lIGluaXRpYWxpemF0aW9uIGRlbGF5IChsb3RzIG9mIFJlZ0V4cCBpbml0IGFuZCBjb21waWxlKVxuLy8gYW5kIHRoaXMgbGVhZHMgdG8gY29sZHN0YXJ0IG92ZXJoZWFkIGZvciB0aGUgT1RFTCBMYW1iZGEgTm9kZS5qcyBsYXllci5cbi8vIEhlbmNlLCB3ZSBoYXZlIGltcGxlbWVudGVkIGxpZ2h0d2VpZ2h0IHZlcnNpb24gb2YgaXQgaW50ZXJuYWxseSB3aXRoIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdGllcy5cbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IFZFUlNJT05fUkVHRVhQID0gL14oPzp2KT8oPzx2ZXJzaW9uPig/PG1ham9yPjB8WzEtOV1cXGQqKVxcLig/PG1pbm9yPjB8WzEtOV1cXGQqKVxcLig/PHBhdGNoPjB8WzEtOV1cXGQqKSkoPzotKD88cHJlcmVsZWFzZT4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikoPzpcXC4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikpKikpPyg/OlxcKyg/PGJ1aWxkPlswLTlhLXpBLVotXSsoPzpcXC5bMC05YS16QS1aLV0rKSopKT8kLztcbmNvbnN0IFJBTkdFX1JFR0VYUCA9IC9eKD88b3A+PHw+fD18PT18PD18Pj18fnxcXF58fj4pP1xccyooPzp2KT8oPzx2ZXJzaW9uPig/PG1ham9yPnh8WHxcXCp8MHxbMS05XVxcZCopKD86XFwuKD88bWlub3I+eHxYfFxcKnwwfFsxLTldXFxkKikpPyg/OlxcLig/PHBhdGNoPnh8WHxcXCp8MHxbMS05XVxcZCopKT8pKD86LSg/PHByZXJlbGVhc2U+KD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKD86XFwuKD86MHxbMS05XVxcZCp8XFxkKlthLXpBLVotXVswLTlhLXpBLVotXSopKSopKT8oPzpcXCsoPzxidWlsZD5bMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG5jb25zdCBvcGVyYXRvclJlc01hcCA9IHtcbiAgICAnPic6IFsxXSxcbiAgICAnPj0nOiBbMCwgMV0sXG4gICAgJz0nOiBbMF0sXG4gICAgJzw9JzogWy0xLCAwXSxcbiAgICAnPCc6IFstMV0sXG4gICAgJyE9JzogWy0xLCAxXSxcbn07XG4vKipcbiAqIENoZWNrcyBnaXZlbiB2ZXJzaW9uIHdoZXRoZXIgaXQgc2F0aXNmaWVzIGdpdmVuIHJhbmdlIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gdmVyc2lvbiB0aGUgW3ZlcnNpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS1zZW12ZXIjdmVyc2lvbnMpIHRvIGJlIGNoZWNrZWRcbiAqIEBwYXJhbSByYW5nZSAgIHRoZSBbcmFuZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS1zZW12ZXIjcmFuZ2VzKSBleHByZXNzaW9uIGZvciB2ZXJzaW9uIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIHRvIGNvbmZpZ3VyZSBzZW12ZXIgc2F0aXNmeSBjaGVja1xuICovXG5mdW5jdGlvbiBzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHJpY3Qgc2VtdmVyIGZvcm1hdCBjaGVja1xuICAgIGlmICghX3ZhbGlkYXRlVmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBJbnZhbGlkIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBJZiByYW5nZSBpcyBlbXB0eSwgc2F0aXNmeSBjaGVjayBzdWNjZWVkcyByZWdhcmRsZXNzIHdoYXQgdmVyc2lvbiBpc1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENsZWFudXAgcmFuZ2VcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UoLyhbPD49fl5dKylcXHMrL2csICckMScpO1xuICAgIC8vIFBhcnNlIHZlcnNpb25cbiAgICBjb25zdCBwYXJzZWRWZXJzaW9uID0gX3BhcnNlVmVyc2lvbih2ZXJzaW9uKTtcbiAgICBpZiAoIXBhcnNlZFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhbGxQYXJzZWRSYW5nZXMgPSBbXTtcbiAgICAvLyBDaGVjayBnaXZlbiB2ZXJzaW9uIHdoZXRoZXIgaXQgc2F0aXNmaWVzIGdpdmVuIHJhbmdlIGV4cHJlc3Npb25cbiAgICBjb25zdCBjaGVja1Jlc3VsdCA9IF9kb1NhdGlzZmllcyhwYXJzZWRWZXJzaW9uLCByYW5nZSwgYWxsUGFyc2VkUmFuZ2VzLCBvcHRpb25zKTtcbiAgICAvLyBJZiBjaGVjayByZXN1bHQgaXMgT0ssXG4gICAgLy8gZG8gYW5vdGhlciBmaW5hbCBjaGVjayBmb3IgcHJlLXJlbGVhc2UsIGlmIHByZS1yZWxlYXNlIGNoZWNrIGlzIGluY2x1ZGVkIGJ5IG9wdGlvblxuICAgIGlmIChjaGVja1Jlc3VsdCAmJiAhb3B0aW9ucz8uaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgICAgcmV0dXJuIF9kb1ByZWxlYXNlQ2hlY2socGFyc2VkVmVyc2lvbiwgYWxsUGFyc2VkUmFuZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrUmVzdWx0O1xufVxuZXhwb3J0cy5zYXRpc2ZpZXMgPSBzYXRpc2ZpZXM7XG5mdW5jdGlvbiBfdmFsaWRhdGVWZXJzaW9uKHZlcnNpb24pIHtcbiAgICByZXR1cm4gdHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnICYmIFZFUlNJT05fUkVHRVhQLnRlc3QodmVyc2lvbik7XG59XG5mdW5jdGlvbiBfZG9TYXRpc2ZpZXMocGFyc2VkVmVyc2lvbiwgcmFuZ2UsIGFsbFBhcnNlZFJhbmdlcywgb3B0aW9ucykge1xuICAgIGlmIChyYW5nZS5pbmNsdWRlcygnfHwnKSkge1xuICAgICAgICAvLyBBIHZlcnNpb24gbWF0Y2hlcyBhIHJhbmdlIGlmIGFuZCBvbmx5IGlmXG4gICAgICAgIC8vIGV2ZXJ5IGNvbXBhcmF0b3IgaW4gYXQgbGVhc3Qgb25lIG9mIHRoZSB8fC1zZXBhcmF0ZWQgY29tcGFyYXRvciBzZXRzIGlzIHNhdGlzZmllZCBieSB0aGUgdmVyc2lvblxuICAgICAgICBjb25zdCByYW5nZXMgPSByYW5nZS50cmltKCkuc3BsaXQoJ3x8Jyk7XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByYW5nZXMpIHtcbiAgICAgICAgICAgIGlmIChfY2hlY2tSYW5nZShwYXJzZWRWZXJzaW9uLCByLCBhbGxQYXJzZWRSYW5nZXMsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZS5pbmNsdWRlcygnIC0gJykpIHtcbiAgICAgICAgLy8gSHlwaGVuIHJhbmdlczogaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXNlbXZlciNoeXBoZW4tcmFuZ2VzLXh5ei0tLWFiY1xuICAgICAgICByYW5nZSA9IHJlcGxhY2VIeXBoZW4ocmFuZ2UsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyYW5nZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHNlcGFyYXRlZCByYW5nZXMgYW5kIGFsbCBuZWVkcyB0byBiZSBzYXRpc2ZpZWQgZm9yIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gcmFuZ2VcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJylcbiAgICAgICAgICAgIC5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKGNvbnN0IHIgb2YgcmFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIV9jaGVja1JhbmdlKHBhcnNlZFZlcnNpb24sIHIsIGFsbFBhcnNlZFJhbmdlcywgb3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENoZWNrIGdpdmVuIHBhcnNlZCB2ZXJzaW9uIHdpdGggZ2l2ZW4gcmFuZ2VcbiAgICByZXR1cm4gX2NoZWNrUmFuZ2UocGFyc2VkVmVyc2lvbiwgcmFuZ2UsIGFsbFBhcnNlZFJhbmdlcywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBfY2hlY2tSYW5nZShwYXJzZWRWZXJzaW9uLCByYW5nZSwgYWxsUGFyc2VkUmFuZ2VzLCBvcHRpb25zKSB7XG4gICAgcmFuZ2UgPSBfbm9ybWFsaXplUmFuZ2UocmFuZ2UsIG9wdGlvbnMpO1xuICAgIGlmIChyYW5nZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByYW5nZXMgc2VwYXJhdGVkLCBzYXRpc2Z5IGVhY2ggb2YgdGhlbVxuICAgICAgICByZXR1cm4gX2RvU2F0aXNmaWVzKHBhcnNlZFZlcnNpb24sIHJhbmdlLCBhbGxQYXJzZWRSYW5nZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHBhcnNlIHJhbmdlXG4gICAgICAgIGNvbnN0IHBhcnNlZFJhbmdlID0gX3BhcnNlUmFuZ2UocmFuZ2UpO1xuICAgICAgICBhbGxQYXJzZWRSYW5nZXMucHVzaChwYXJzZWRSYW5nZSk7XG4gICAgICAgIC8vIENoZWNrIHBhcnNlZCB2ZXJzaW9uIGJ5IHBhcnNlZCByYW5nZVxuICAgICAgICByZXR1cm4gX3NhdGlzZmllcyhwYXJzZWRWZXJzaW9uLCBwYXJzZWRSYW5nZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gX3NhdGlzZmllcyhwYXJzZWRWZXJzaW9uLCBwYXJzZWRSYW5nZSkge1xuICAgIC8vIElmIHJhbmdlIGlzIGludmFsaWQsIHNhdGlzZnkgY2hlY2sgZmFpbHMgKG5vIGVycm9yIHRocm93KVxuICAgIGlmIChwYXJzZWRSYW5nZS5pbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gSWYgcmFuZ2UgaXMgZW1wdHkgb3Igd2lsZGNhcmQsIHNhdGlzZnkgY2hlY2sgc3VjY2VlZHMgcmVnYXJkbGVzcyB3aGF0IHZlcnNpb24gaXNcbiAgICBpZiAoIXBhcnNlZFJhbmdlLnZlcnNpb24gfHwgX2lzV2lsZGNhcmQocGFyc2VkUmFuZ2UudmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENvbXBhcmUgdmVyc2lvbiBzZWdtZW50IGZpcnN0XG4gICAgbGV0IGNvbXBhcmlzb25SZXN1bHQgPSBfY29tcGFyZVZlcnNpb25TZWdtZW50cyhwYXJzZWRWZXJzaW9uLnZlcnNpb25TZWdtZW50cyB8fCBbXSwgcGFyc2VkUmFuZ2UudmVyc2lvblNlZ21lbnRzIHx8IFtdKTtcbiAgICAvLyBJZiB2ZXJzaW9ucyBzZWdtZW50cyBhcmUgZXF1YWwsIGNvbXBhcmUgYnkgcHJlLXJlbGVhc2Ugc2VnbWVudHNcbiAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PT0gMCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uUHJlcmVsZWFzZVNlZ21lbnRzID0gcGFyc2VkVmVyc2lvbi5wcmVyZWxlYXNlU2VnbWVudHMgfHwgW107XG4gICAgICAgIGNvbnN0IHJhbmdlUHJlcmVsZWFzZVNlZ21lbnRzID0gcGFyc2VkUmFuZ2UucHJlcmVsZWFzZVNlZ21lbnRzIHx8IFtdO1xuICAgICAgICBpZiAoIXZlcnNpb25QcmVyZWxlYXNlU2VnbWVudHMubGVuZ3RoICYmICFyYW5nZVByZXJlbGVhc2VTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF2ZXJzaW9uUHJlcmVsZWFzZVNlZ21lbnRzLmxlbmd0aCAmJlxuICAgICAgICAgICAgcmFuZ2VQcmVyZWxlYXNlU2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ZXJzaW9uUHJlcmVsZWFzZVNlZ21lbnRzLmxlbmd0aCAmJlxuICAgICAgICAgICAgIXJhbmdlUHJlcmVsZWFzZVNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tcGFyaXNvblJlc3VsdCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tcGFyaXNvblJlc3VsdCA9IF9jb21wYXJlVmVyc2lvblNlZ21lbnRzKHZlcnNpb25QcmVyZWxlYXNlU2VnbWVudHMsIHJhbmdlUHJlcmVsZWFzZVNlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSZXNvbHZlIGNoZWNrIHJlc3VsdCBhY2NvcmRpbmcgdG8gY29tcGFyaXNvbiBvcGVyYXRvclxuICAgIHJldHVybiBvcGVyYXRvclJlc01hcFtwYXJzZWRSYW5nZS5vcF0/LmluY2x1ZGVzKGNvbXBhcmlzb25SZXN1bHQpO1xufVxuZnVuY3Rpb24gX2RvUHJlbGVhc2VDaGVjayhwYXJzZWRWZXJzaW9uLCBhbGxQYXJzZWRSYW5nZXMpIHtcbiAgICBpZiAocGFyc2VkVmVyc2lvbi5wcmVyZWxlYXNlKSB7XG4gICAgICAgIHJldHVybiBhbGxQYXJzZWRSYW5nZXMuc29tZShyID0+IHIucHJlcmVsZWFzZSAmJiByLnZlcnNpb24gPT09IHBhcnNlZFZlcnNpb24udmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gX25vcm1hbGl6ZVJhbmdlKHJhbmdlLCBvcHRpb25zKSB7XG4gICAgcmFuZ2UgPSByYW5nZS50cmltKCk7XG4gICAgcmFuZ2UgPSByZXBsYWNlQ2FyZXQocmFuZ2UsIG9wdGlvbnMpO1xuICAgIHJhbmdlID0gcmVwbGFjZVRpbGRlKHJhbmdlKTtcbiAgICByYW5nZSA9IHJlcGxhY2VYUmFuZ2UocmFuZ2UsIG9wdGlvbnMpO1xuICAgIHJhbmdlID0gcmFuZ2UudHJpbSgpO1xuICAgIHJldHVybiByYW5nZTtcbn1cbmZ1bmN0aW9uIGlzWChpZCkge1xuICAgIHJldHVybiAhaWQgfHwgaWQudG9Mb3dlckNhc2UoKSA9PT0gJ3gnIHx8IGlkID09PSAnKic7XG59XG5mdW5jdGlvbiBfcGFyc2VWZXJzaW9uKHZlcnNpb25TdHJpbmcpIHtcbiAgICBjb25zdCBtYXRjaCA9IHZlcnNpb25TdHJpbmcubWF0Y2goVkVSU0lPTl9SRUdFWFApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgSW52YWxpZCB2ZXJzaW9uOiAke3ZlcnNpb25TdHJpbmd9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb24gPSBtYXRjaC5ncm91cHMudmVyc2lvbjtcbiAgICBjb25zdCBwcmVyZWxlYXNlID0gbWF0Y2guZ3JvdXBzLnByZXJlbGVhc2U7XG4gICAgY29uc3QgYnVpbGQgPSBtYXRjaC5ncm91cHMuYnVpbGQ7XG4gICAgY29uc3QgdmVyc2lvblNlZ21lbnRzID0gdmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHByZXJlbGVhc2VTZWdtZW50cyA9IHByZXJlbGVhc2U/LnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3A6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgdmVyc2lvblNlZ21lbnRzLFxuICAgICAgICB2ZXJzaW9uU2VnbWVudENvdW50OiB2ZXJzaW9uU2VnbWVudHMubGVuZ3RoLFxuICAgICAgICBwcmVyZWxlYXNlLFxuICAgICAgICBwcmVyZWxlYXNlU2VnbWVudHMsXG4gICAgICAgIHByZXJlbGVhc2VTZWdtZW50Q291bnQ6IHByZXJlbGVhc2VTZWdtZW50cyA/IHByZXJlbGVhc2VTZWdtZW50cy5sZW5ndGggOiAwLFxuICAgICAgICBidWlsZCxcbiAgICB9O1xufVxuZnVuY3Rpb24gX3BhcnNlUmFuZ2UocmFuZ2VTdHJpbmcpIHtcbiAgICBpZiAoIXJhbmdlU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSByYW5nZVN0cmluZy5tYXRjaChSQU5HRV9SRUdFWFApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5lcnJvcihgSW52YWxpZCByYW5nZTogJHtyYW5nZVN0cmluZ31gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBvcCA9IG1hdGNoLmdyb3Vwcy5vcDtcbiAgICBjb25zdCB2ZXJzaW9uID0gbWF0Y2guZ3JvdXBzLnZlcnNpb247XG4gICAgY29uc3QgcHJlcmVsZWFzZSA9IG1hdGNoLmdyb3Vwcy5wcmVyZWxlYXNlO1xuICAgIGNvbnN0IGJ1aWxkID0gbWF0Y2guZ3JvdXBzLmJ1aWxkO1xuICAgIGNvbnN0IHZlcnNpb25TZWdtZW50cyA9IHZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBwcmVyZWxlYXNlU2VnbWVudHMgPSBwcmVyZWxlYXNlPy5zcGxpdCgnLicpO1xuICAgIGlmIChvcCA9PT0gJz09Jykge1xuICAgICAgICBvcCA9ICc9JztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3A6IG9wIHx8ICc9JyxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgdmVyc2lvblNlZ21lbnRzLFxuICAgICAgICB2ZXJzaW9uU2VnbWVudENvdW50OiB2ZXJzaW9uU2VnbWVudHMubGVuZ3RoLFxuICAgICAgICBwcmVyZWxlYXNlLFxuICAgICAgICBwcmVyZWxlYXNlU2VnbWVudHMsXG4gICAgICAgIHByZXJlbGVhc2VTZWdtZW50Q291bnQ6IHByZXJlbGVhc2VTZWdtZW50cyA/IHByZXJlbGVhc2VTZWdtZW50cy5sZW5ndGggOiAwLFxuICAgICAgICBidWlsZCxcbiAgICB9O1xufVxuZnVuY3Rpb24gX2lzV2lsZGNhcmQocykge1xuICAgIHJldHVybiBzID09PSAnKicgfHwgcyA9PT0gJ3gnIHx8IHMgPT09ICdYJztcbn1cbmZ1bmN0aW9uIF9wYXJzZVZlcnNpb25TdHJpbmcodikge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludCh2LCAxMCk7XG4gICAgcmV0dXJuIGlzTmFOKG4pID8gdiA6IG47XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplVmVyc2lvblR5cGUoYSwgYikge1xuICAgIGlmICh0eXBlb2YgYSA9PT0gdHlwZW9mIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFthLCBiXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlcnNpb24gc2VnbWVudHMgY2FuIG9ubHkgYmUgc3RyaW5ncyBvciBudW1iZXJzJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbU3RyaW5nKGEpLCBTdHJpbmcoYildO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jb21wYXJlVmVyc2lvblN0cmluZ3ModjEsIHYyKSB7XG4gICAgaWYgKF9pc1dpbGRjYXJkKHYxKSB8fCBfaXNXaWxkY2FyZCh2MikpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IFtwYXJzZWRWMSwgcGFyc2VkVjJdID0gX25vcm1hbGl6ZVZlcnNpb25UeXBlKF9wYXJzZVZlcnNpb25TdHJpbmcodjEpLCBfcGFyc2VWZXJzaW9uU3RyaW5nKHYyKSk7XG4gICAgaWYgKHBhcnNlZFYxID4gcGFyc2VkVjIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcnNlZFYxIDwgcGFyc2VkVjIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIF9jb21wYXJlVmVyc2lvblNlZ21lbnRzKHYxLCB2Mikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5tYXgodjEubGVuZ3RoLCB2Mi5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzID0gX2NvbXBhcmVWZXJzaW9uU3RyaW5ncyh2MVtpXSB8fCAnMCcsIHYyW2ldIHx8ICcwJyk7XG4gICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlzIGFkYXB0ZWQgZnJvbSBwb3J0aW9ucyBvZiBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL3RyZWUvODY4ZDRiYlxuLy8gTGljZW5zZTpcbi8qXG4gKiBUaGUgSVNDIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIElzYWFjIFouIFNjaGx1ZXRlciBhbmQgQ29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUlxuICogSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAqL1xuY29uc3QgTEVUVEVSREFTSE5VTUJFUiA9ICdbYS16QS1aMC05LV0nO1xuY29uc3QgTlVNRVJJQ0lERU5USUZJRVIgPSAnMHxbMS05XVxcXFxkKic7XG5jb25zdCBOT05OVU1FUklDSURFTlRJRklFUiA9IGBcXFxcZCpbYS16QS1aLV0ke0xFVFRFUkRBU0hOVU1CRVJ9KmA7XG5jb25zdCBHVExUID0gJygoPzo8fD4pPz0/KSc7XG5jb25zdCBQUkVSRUxFQVNFSURFTlRJRklFUiA9IGAoPzoke05VTUVSSUNJREVOVElGSUVSfXwke05PTk5VTUVSSUNJREVOVElGSUVSfSlgO1xuY29uc3QgUFJFUkVMRUFTRSA9IGAoPzotKCR7UFJFUkVMRUFTRUlERU5USUZJRVJ9KD86XFxcXC4ke1BSRVJFTEVBU0VJREVOVElGSUVSfSkqKSlgO1xuY29uc3QgQlVJTERJREVOVElGSUVSID0gYCR7TEVUVEVSREFTSE5VTUJFUn0rYDtcbmNvbnN0IEJVSUxEID0gYCg/OlxcXFwrKCR7QlVJTERJREVOVElGSUVSfSg/OlxcXFwuJHtCVUlMRElERU5USUZJRVJ9KSopKWA7XG5jb25zdCBYUkFOR0VJREVOVElGSUVSID0gYCR7TlVNRVJJQ0lERU5USUZJRVJ9fHh8WHxcXFxcKmA7XG5jb25zdCBYUkFOR0VQTEFJTiA9IGBbdj1cXFxcc10qKCR7WFJBTkdFSURFTlRJRklFUn0pYCArXG4gICAgYCg/OlxcXFwuKCR7WFJBTkdFSURFTlRJRklFUn0pYCArXG4gICAgYCg/OlxcXFwuKCR7WFJBTkdFSURFTlRJRklFUn0pYCArXG4gICAgYCg/OiR7UFJFUkVMRUFTRX0pPyR7QlVJTER9P2AgK1xuICAgIGApPyk/YDtcbmNvbnN0IFhSQU5HRSA9IGBeJHtHVExUfVxcXFxzKiR7WFJBTkdFUExBSU59JGA7XG5jb25zdCBYUkFOR0VfUkVHRVhQID0gbmV3IFJlZ0V4cChYUkFOR0UpO1xuY29uc3QgSFlQSEVOUkFOR0UgPSBgXlxcXFxzKigke1hSQU5HRVBMQUlOfSlgICsgYFxcXFxzKy1cXFxccytgICsgYCgke1hSQU5HRVBMQUlOfSlgICsgYFxcXFxzKiRgO1xuY29uc3QgSFlQSEVOUkFOR0VfUkVHRVhQID0gbmV3IFJlZ0V4cChIWVBIRU5SQU5HRSk7XG5jb25zdCBMT05FVElMREUgPSAnKD86fj4/KSc7XG5jb25zdCBUSUxERSA9IGBeJHtMT05FVElMREV9JHtYUkFOR0VQTEFJTn0kYDtcbmNvbnN0IFRJTERFX1JFR0VYUCA9IG5ldyBSZWdFeHAoVElMREUpO1xuY29uc3QgTE9ORUNBUkVUID0gJyg/OlxcXFxeKSc7XG5jb25zdCBDQVJFVCA9IGBeJHtMT05FQ0FSRVR9JHtYUkFOR0VQTEFJTn0kYDtcbmNvbnN0IENBUkVUX1JFR0VYUCA9IG5ldyBSZWdFeHAoQ0FSRVQpO1xuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL2Jsb2IvODY4ZDRiYmUzZDMxOGM1MjU0NGYzOGQ1Zjk5NzdhMTEwM2U5MjRjMi9jbGFzc2VzL3JhbmdlLmpzI0wyODVcbi8vXG4vLyB+LCB+PiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIH4yLCB+Mi54LCB+Mi54LngsIH4+Miwgfj4yLnggfj4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gfjIuMCwgfjIuMC54LCB+PjIuMCwgfj4yLjAueCAtLT4gPj0yLjAuMCA8Mi4xLjAtMFxuLy8gfjEuMiwgfjEuMi54LCB+PjEuMiwgfj4xLjIueCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjEuMi4zLCB+PjEuMi4zIC0tPiA+PTEuMi4zIDwxLjMuMC0wXG4vLyB+MS4yLjAsIH4+MS4yLjAgLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4wLjAuMSAtLT4gPj0wLjAuMSA8MC4xLjAtMFxuZnVuY3Rpb24gcmVwbGFjZVRpbGRlKGNvbXApIHtcbiAgICBjb25zdCByID0gVElMREVfUkVHRVhQO1xuICAgIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgICAgIGxldCByZXQ7XG4gICAgICAgIGlmIChpc1goTSkpIHtcbiAgICAgICAgICAgIHJldCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzWChtKSkge1xuICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4wLjAgPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAgICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wIDwke019LiR7K20gKyAxfS4wLTBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByKSB7XG4gICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByfSA8JHtNfS4keyttICsgMX0uMC0wYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIH4xLjIuMyA9PSA+PTEuMi4zIDwxLjMuMC0wXG4gICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfSA8JHtNfS4keyttICsgMX0uMC0wYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xufVxuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL2Jsb2IvODY4ZDRiYmUzZDMxOGM1MjU0NGYzOGQ1Zjk5NzdhMTEwM2U5MjRjMi9jbGFzc2VzL3JhbmdlLmpzI0wzMjlcbi8vXG4vLyBeIC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gXjIsIF4yLngsIF4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjIuMCwgXjIuMC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMS4yLCBeMS4yLnggLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4xLjIuMyAtLT4gPj0xLjIuMyA8Mi4wLjAtMFxuLy8gXjEuMi4wIC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMC4wLjEgLS0+ID49MC4wLjEgPDAuMC4yLTBcbi8vIF4wLjEuMCAtLT4gPj0wLjEuMCA8MC4yLjAtMFxuZnVuY3Rpb24gcmVwbGFjZUNhcmV0KGNvbXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByID0gQ0FSRVRfUkVHRVhQO1xuICAgIGNvbnN0IHogPSBvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJztcbiAgICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgICAgICBsZXQgcmV0O1xuICAgICAgICBpZiAoaXNYKE0pKSB7XG4gICAgICAgICAgICByZXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgICAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgICAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHIpIHtcbiAgICAgICAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJ9IDwke019LiR7bX0uJHsrcCArIDF9LTBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwcn0gPCR7TX0uJHsrbSArIDF9LjAtMGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwcn0gPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfSR7en0gPCR7TX0uJHttfS4keytwICsgMX0tMGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfSR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0gPCR7K00gKyAxfS4wLjAtMGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9KTtcbn1cbi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25wbS9ub2RlLXNlbXZlci9ibG9iLzg2OGQ0YmJlM2QzMThjNTI1NDRmMzhkNWY5OTc3YTExMDNlOTI0YzIvY2xhc3Nlcy9yYW5nZS5qcyNMMzkwXG5mdW5jdGlvbiByZXBsYWNlWFJhbmdlKGNvbXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByID0gWFJBTkdFX1JFR0VYUDtcbiAgICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgICAgIGNvbnN0IHhNID0gaXNYKE0pO1xuICAgICAgICBjb25zdCB4bSA9IHhNIHx8IGlzWChtKTtcbiAgICAgICAgY29uc3QgeHAgPSB4bSB8fCBpc1gocCk7XG4gICAgICAgIGNvbnN0IGFueVggPSB4cDtcbiAgICAgICAgaWYgKGd0bHQgPT09ICc9JyAmJiBhbnlYKSB7XG4gICAgICAgICAgICBndGx0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgaW5jbHVkaW5nIHByZXJlbGVhc2VzIGluIHRoZSBtYXRjaCwgdGhlbiB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIGZpeCB0aGlzIHRvIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWVcbiAgICAgICAgcHIgPSBvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJztcbiAgICAgICAgaWYgKHhNKSB7XG4gICAgICAgICAgICBpZiAoZ3RsdCA9PT0gJz4nIHx8IGd0bHQgPT09ICc8Jykge1xuICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgaXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHJldCA9ICc8MC4wLjAtMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBub3RoaW5nIGlzIGZvcmJpZGRlblxuICAgICAgICAgICAgICAgIHJldCA9ICcqJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChndGx0ICYmIGFueVgpIHtcbiAgICAgICAgICAgIC8vIHdlIGtub3cgcGF0Y2ggaXMgYW4geCwgYmVjYXVzZSB3ZSBoYXZlIGFueSB4IGF0IGFsbC5cbiAgICAgICAgICAgIC8vIHJlcGxhY2UgWCB3aXRoIDBcbiAgICAgICAgICAgIGlmICh4bSkge1xuICAgICAgICAgICAgICAgIG0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICBpZiAoZ3RsdCA9PT0gJz4nKSB7XG4gICAgICAgICAgICAgICAgLy8gPjEgPT4gPj0yLjAuMFxuICAgICAgICAgICAgICAgIC8vID4xLjIgPT4gPj0xLjMuMFxuICAgICAgICAgICAgICAgIGd0bHQgPSAnPj0nO1xuICAgICAgICAgICAgICAgIGlmICh4bSkge1xuICAgICAgICAgICAgICAgICAgICBNID0gK00gKyAxO1xuICAgICAgICAgICAgICAgICAgICBtID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtID0gK20gKyAxO1xuICAgICAgICAgICAgICAgICAgICBwID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChndGx0ID09PSAnPD0nKSB7XG4gICAgICAgICAgICAgICAgLy8gPD0wLjcueCBpcyBhY3R1YWxseSA8MC44LjAsIHNpbmNlIGFueSAwLjcueCBzaG91bGRcbiAgICAgICAgICAgICAgICAvLyBwYXNzLiAgU2ltaWxhcmx5LCA8PTcueCBpcyBhY3R1YWxseSA8OC4wLjAsIGV0Yy5cbiAgICAgICAgICAgICAgICBndGx0ID0gJzwnO1xuICAgICAgICAgICAgICAgIGlmICh4bSkge1xuICAgICAgICAgICAgICAgICAgICBNID0gK00gKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbSA9ICttICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgICAgICAgICAgcHIgPSAnLTAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0ID0gYCR7Z3RsdCArIE19LiR7bX0uJHtwfSR7cHJ9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4bSkge1xuICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4wLjAke3ByfSA8JHsrTSArIDF9LjAuMC0wYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh4cCkge1xuICAgICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3ByfSA8JHtNfS4keyttICsgMX0uMC0wYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xufVxuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbnBtL25vZGUtc2VtdmVyL2Jsb2IvODY4ZDRiYmUzZDMxOGM1MjU0NGYzOGQ1Zjk5NzdhMTEwM2U5MjRjMi9jbGFzc2VzL3JhbmdlLmpzI0w0ODhcbi8vXG4vLyAxLjIgLSAzLjQuNSA9PiA+PTEuMi4wIDw9My40LjVcbi8vIDEuMi4zIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTAgQW55IDMuNC54IHdpbGwgZG9cbi8vIDEuMiAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wXG5mdW5jdGlvbiByZXBsYWNlSHlwaGVuKGNvbXAsIG9wdGlvbnMpIHtcbiAgICBjb25zdCByID0gSFlQSEVOUkFOR0VfUkVHRVhQO1xuICAgIHJldHVybiBjb21wLnJlcGxhY2UociwgKF8sIGZyb20sIGZNLCBmbSwgZnAsIGZwciwgZmIsIHRvLCB0TSwgdG0sIHRwLCB0cHIpID0+IHtcbiAgICAgICAgaWYgKGlzWChmTSkpIHtcbiAgICAgICAgICAgIGZyb20gPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1goZm0pKSB7XG4gICAgICAgICAgICBmcm9tID0gYD49JHtmTX0uMC4wJHtvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzWChmcCkpIHtcbiAgICAgICAgICAgIGZyb20gPSBgPj0ke2ZNfS4ke2ZtfS4wJHtvcHRpb25zPy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZwcikge1xuICAgICAgICAgICAgZnJvbSA9IGA+PSR7ZnJvbX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZnJvbSA9IGA+PSR7ZnJvbX0ke29wdGlvbnM/LmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzWCh0TSkpIHtcbiAgICAgICAgICAgIHRvID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNYKHRtKSkge1xuICAgICAgICAgICAgdG8gPSBgPCR7K3RNICsgMX0uMC4wLTBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzWCh0cCkpIHtcbiAgICAgICAgICAgIHRvID0gYDwke3RNfS4keyt0bSArIDF9LjAtMGA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHByKSB7XG4gICAgICAgICAgICB0byA9IGA8PSR7dE19LiR7dG19LiR7dHB9LSR7dHByfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucz8uaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgICAgICAgIHRvID0gYDwke3RNfS4ke3RtfS4keyt0cCArIDF9LTBgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG8gPSBgPD0ke3RvfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2Zyb219ICR7dG99YC50cmltKCk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW12ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm1hc3NVbndyYXAgPSBleHBvcnRzLnVud3JhcCA9IGV4cG9ydHMubWFzc1dyYXAgPSBleHBvcnRzLndyYXAgPSB2b2lkIDA7XG4vLyBEZWZhdWx0IHRvIGNvbXBsYWluaW5nIGxvdWRseSB3aGVuIHRoaW5ncyBkb24ndCBnbyBhY2NvcmRpbmcgdG8gcGxhbi5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5sZXQgbG9nZ2VyID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuLy8gU2V0cyBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCwgcHJlc2VydmluZyBpdHMgZW51bWVyYWJpbGl0eS5cbi8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBwcm9wZXJ0eSBpcyBhbHJlYWR5IHdyaXRhYmxlLlxuZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IGVudW1lcmFibGUgPSAhIW9ialtuYW1lXSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBuYW1lKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuY29uc3Qgd3JhcCA9IChub2R1bGUsIG5hbWUsIHdyYXBwZXIpID0+IHtcbiAgICBpZiAoIW5vZHVsZSB8fCAhbm9kdWxlW25hbWVdKSB7XG4gICAgICAgIGxvZ2dlcignbm8gb3JpZ2luYWwgZnVuY3Rpb24gJyArIFN0cmluZyhuYW1lKSArICcgdG8gd3JhcCcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghd3JhcHBlcikge1xuICAgICAgICBsb2dnZXIoJ25vIHdyYXBwZXIgZnVuY3Rpb24nKTtcbiAgICAgICAgbG9nZ2VyKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbCA9IG5vZHVsZVtuYW1lXTtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB3cmFwcGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxvZ2dlcignb3JpZ2luYWwgb2JqZWN0IGFuZCB3cmFwcGVyIG11c3QgYmUgZnVuY3Rpb25zJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBwZXIob3JpZ2luYWwsIG5hbWUpO1xuICAgIGRlZmluZVByb3BlcnR5KHdyYXBwZWQsICdfX29yaWdpbmFsJywgb3JpZ2luYWwpO1xuICAgIGRlZmluZVByb3BlcnR5KHdyYXBwZWQsICdfX3Vud3JhcCcsICgpID0+IHtcbiAgICAgICAgaWYgKG5vZHVsZVtuYW1lXSA9PT0gd3JhcHBlZCkge1xuICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCBvcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh3cmFwcGVkLCAnX193cmFwcGVkJywgdHJ1ZSk7XG4gICAgZGVmaW5lUHJvcGVydHkobm9kdWxlLCBuYW1lLCB3cmFwcGVkKTtcbiAgICByZXR1cm4gd3JhcHBlZDtcbn07XG5leHBvcnRzLndyYXAgPSB3cmFwO1xuY29uc3QgbWFzc1dyYXAgPSAobm9kdWxlcywgbmFtZXMsIHdyYXBwZXIpID0+IHtcbiAgICBpZiAoIW5vZHVsZXMpIHtcbiAgICAgICAgbG9nZ2VyKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgbW9kdWxlcyB0byBwYXRjaCcpO1xuICAgICAgICBsb2dnZXIobmV3IEVycm9yKCkuc3RhY2spO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vZHVsZXMpKSB7XG4gICAgICAgIG5vZHVsZXMgPSBbbm9kdWxlc107XG4gICAgfVxuICAgIGlmICghKG5hbWVzICYmIEFycmF5LmlzQXJyYXkobmFtZXMpKSkge1xuICAgICAgICBsb2dnZXIoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBmdW5jdGlvbnMgdG8gd3JhcCBvbiBtb2R1bGVzJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbm9kdWxlcy5mb3JFYWNoKG5vZHVsZSA9PiB7XG4gICAgICAgIG5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICAoMCwgZXhwb3J0cy53cmFwKShub2R1bGUsIG5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5leHBvcnRzLm1hc3NXcmFwID0gbWFzc1dyYXA7XG5jb25zdCB1bndyYXAgPSAobm9kdWxlLCBuYW1lKSA9PiB7XG4gICAgaWYgKCFub2R1bGUgfHwgIW5vZHVsZVtuYW1lXSkge1xuICAgICAgICBsb2dnZXIoJ25vIGZ1bmN0aW9uIHRvIHVud3JhcC4nKTtcbiAgICAgICAgbG9nZ2VyKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB3cmFwcGVkID0gbm9kdWxlW25hbWVdO1xuICAgIGlmICghd3JhcHBlZC5fX3Vud3JhcCkge1xuICAgICAgICBsb2dnZXIoJ25vIG9yaWdpbmFsIHRvIHVud3JhcCB0byAtLSBoYXMgJyArXG4gICAgICAgICAgICBTdHJpbmcobmFtZSkgK1xuICAgICAgICAgICAgJyBhbHJlYWR5IGJlZW4gdW53cmFwcGVkPycpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgd3JhcHBlZC5fX3Vud3JhcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxufTtcbmV4cG9ydHMudW53cmFwID0gdW53cmFwO1xuY29uc3QgbWFzc1Vud3JhcCA9IChub2R1bGVzLCBuYW1lcykgPT4ge1xuICAgIGlmICghbm9kdWxlcykge1xuICAgICAgICBsb2dnZXIoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBtb2R1bGVzIHRvIHBhdGNoJyk7XG4gICAgICAgIGxvZ2dlcihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9kdWxlcykpIHtcbiAgICAgICAgbm9kdWxlcyA9IFtub2R1bGVzXTtcbiAgICB9XG4gICAgaWYgKCEobmFtZXMgJiYgQXJyYXkuaXNBcnJheShuYW1lcykpKSB7XG4gICAgICAgIGxvZ2dlcignbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIGZ1bmN0aW9ucyB0byB1bndyYXAgb24gbW9kdWxlcycpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIG5vZHVsZXMuZm9yRWFjaChub2R1bGUgPT4ge1xuICAgICAgICBuYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgKDAsIGV4cG9ydHMudW53cmFwKShub2R1bGUsIG5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5leHBvcnRzLm1hc3NVbndyYXAgPSBtYXNzVW53cmFwO1xuZnVuY3Rpb24gc2hpbW1lcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sb2dnZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvZ2dlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbG9nZ2VyKFwibmV3IGxvZ2dlciBpc24ndCBhIGZ1bmN0aW9uLCBub3QgcmVwbGFjaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyID0gb3B0aW9ucy5sb2dnZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzaGltbWVyO1xuc2hpbW1lci53cmFwID0gZXhwb3J0cy53cmFwO1xuc2hpbW1lci5tYXNzV3JhcCA9IGV4cG9ydHMubWFzc1dyYXA7XG5zaGltbWVyLnVud3JhcCA9IGV4cG9ydHMudW53cmFwO1xuc2hpbW1lci5tYXNzVW53cmFwID0gZXhwb3J0cy5tYXNzVW53cmFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hpbW1lci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3QgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBhcGlfbG9nc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaS1sb2dzXCIpO1xuY29uc3Qgc2hpbW1lciA9IHJlcXVpcmUoXCIuL3NoaW1tZXJcIik7XG4vKipcbiAqIEJhc2UgYWJzdHJhY3QgaW50ZXJuYWwgY2xhc3MgZm9yIGluc3RydW1lbnRpbmcgbm9kZSBhbmQgd2ViIHBsdWdpbnNcbiAqL1xuY2xhc3MgSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Qge1xuICAgIGluc3RydW1lbnRhdGlvbk5hbWU7XG4gICAgaW5zdHJ1bWVudGF0aW9uVmVyc2lvbjtcbiAgICBfY29uZmlnID0ge307XG4gICAgX3RyYWNlcjtcbiAgICBfbWV0ZXI7XG4gICAgX2xvZ2dlcjtcbiAgICBfZGlhZztcbiAgICBjb25zdHJ1Y3RvcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25OYW1lID0gaW5zdHJ1bWVudGF0aW9uTmFtZTtcbiAgICAgICAgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uID0gaW5zdHJ1bWVudGF0aW9uVmVyc2lvbjtcbiAgICAgICAgdGhpcy5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZGlhZyA9IGFwaV8xLmRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogaW5zdHJ1bWVudGF0aW9uTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3RyYWNlciA9IGFwaV8xLnRyYWNlLmdldFRyYWNlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBhcGlfMS5tZXRyaWNzLmdldE1ldGVyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgICAgICB0aGlzLl9sb2dnZXIgPSBhcGlfbG9nc18xLmxvZ3MuZ2V0TG9nZ2VyKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24pO1xuICAgICAgICB0aGlzLl91cGRhdGVNZXRyaWNJbnN0cnVtZW50cygpO1xuICAgIH1cbiAgICAvKiBBcGkgdG8gd3JhcCBpbnN0cnVtZW50ZWQgbWV0aG9kICovXG4gICAgX3dyYXAgPSBzaGltbWVyLndyYXA7XG4gICAgLyogQXBpIHRvIHVud3JhcCBpbnN0cnVtZW50ZWQgbWV0aG9kcyAqL1xuICAgIF91bndyYXAgPSBzaGltbWVyLnVud3JhcDtcbiAgICAvKiBBcGkgdG8gbWFzcyB3cmFwIGluc3RydW1lbnRlZCBtZXRob2QgKi9cbiAgICBfbWFzc1dyYXAgPSBzaGltbWVyLm1hc3NXcmFwO1xuICAgIC8qIEFwaSB0byBtYXNzIHVud3JhcCBpbnN0cnVtZW50ZWQgbWV0aG9kcyAqL1xuICAgIF9tYXNzVW53cmFwID0gc2hpbW1lci5tYXNzVW53cmFwO1xuICAgIC8qIFJldHVybnMgbWV0ZXIgKi9cbiAgICBnZXQgbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBNZXRlclByb3ZpZGVyIHRvIHRoaXMgcGx1Z2luXG4gICAgICogQHBhcmFtIG1ldGVyUHJvdmlkZXJcbiAgICAgKi9cbiAgICBzZXRNZXRlclByb3ZpZGVyKG1ldGVyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fbWV0ZXIgPSBtZXRlclByb3ZpZGVyLmdldE1ldGVyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljSW5zdHJ1bWVudHMoKTtcbiAgICB9XG4gICAgLyogUmV0dXJucyBsb2dnZXIgKi9cbiAgICBnZXQgbG9nZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9nZ2VyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIExvZ2dlclByb3ZpZGVyIHRvIHRoaXMgcGx1Z2luXG4gICAgICogQHBhcmFtIGxvZ2dlclByb3ZpZGVyXG4gICAgICovXG4gICAgc2V0TG9nZ2VyUHJvdmlkZXIobG9nZ2VyUHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyUHJvdmlkZXIuZ2V0TG9nZ2VyKHRoaXMuaW5zdHJ1bWVudGF0aW9uTmFtZSwgdGhpcy5pbnN0cnVtZW50YXRpb25WZXJzaW9uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogR2V0IG1vZHVsZSBkZWZpbml0aW9ucyBkZWZpbmVkIGJ5IHtAbGluayBpbml0fS5cbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBleHBlcmltZW50YWwgY29tcGlsZS10aW1lIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHtAbGluayBJbnN0cnVtZW50YXRpb25Nb2R1bGVEZWZpbml0aW9ufVxuICAgICAqL1xuICAgIGdldE1vZHVsZURlZmluaXRpb25zKCkge1xuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gdGhpcy5pbml0KCkgPz8gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbml0UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtpbml0UmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdFJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbmV3IG1ldHJpYyBpbnN0cnVtZW50cyB3aXRoIHRoZSBjdXJyZW50IE1ldGVyLlxuICAgICAqL1xuICAgIF91cGRhdGVNZXRyaWNJbnN0cnVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBSZXR1cm5zIEluc3RydW1lbnRhdGlvbkNvbmZpZyAqL1xuICAgIGdldENvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBJbnN0cnVtZW50YXRpb25Db25maWcgdG8gdGhpcyBwbHVnaW5cbiAgICAgKiBAcGFyYW0gY29uZmlnXG4gICAgICovXG4gICAgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICAvLyBjb3B5IGNvbmZpZyBmaXJzdCBsZXZlbCBwcm9wZXJ0aWVzIHRvIGVuc3VyZSB0aGV5IGFyZSBpbW11dGFibGUuXG4gICAgICAgIC8vIG5lc3RlZCBwcm9wZXJ0aWVzIGFyZSBub3QgY29waWVkLCB0aHVzIGFyZSBtdXRhYmxlIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgVHJhY2VQcm92aWRlciB0byB0aGlzIHBsdWdpblxuICAgICAqIEBwYXJhbSB0cmFjZXJQcm92aWRlclxuICAgICAqL1xuICAgIHNldFRyYWNlclByb3ZpZGVyKHRyYWNlclByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuX3RyYWNlciA9IHRyYWNlclByb3ZpZGVyLmdldFRyYWNlcih0aGlzLmluc3RydW1lbnRhdGlvbk5hbWUsIHRoaXMuaW5zdHJ1bWVudGF0aW9uVmVyc2lvbik7XG4gICAgfVxuICAgIC8qIFJldHVybnMgdHJhY2VyICovXG4gICAgZ2V0IHRyYWNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBzcGFuIGN1c3RvbWl6YXRpb24gaG9vaywgaWYgY29uZmlndXJlZCwgYW5kIGxvZyBhbnkgZXJyb3JzLlxuICAgICAqIEFueSBzZW1hbnRpY3Mgb2YgdGhlIHRyaWdnZXIgYW5kIGluZm8gYXJlIGRlZmluZWQgYnkgdGhlIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbi5cbiAgICAgKiBAcGFyYW0gaG9va0hhbmRsZXIgVGhlIG9wdGlvbmFsIGhvb2sgaGFuZGxlciB3aGljaCB0aGUgdXNlciBoYXMgY29uZmlndXJlZCB2aWEgaW5zdHJ1bWVudGF0aW9uIGNvbmZpZ1xuICAgICAqIEBwYXJhbSB0cmlnZ2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBmb3IgZXhlY3V0aW5nIHRoZSBob29rIGZvciBsb2dnaW5nIHB1cnBvc2VzXG4gICAgICogQHBhcmFtIHNwYW4gVGhlIHNwYW4gdG8gd2hpY2ggdGhlIGhvb2sgc2hvdWxkIGJlIGFwcGxpZWRcbiAgICAgKiBAcGFyYW0gaW5mbyBUaGUgaW5mbyBvYmplY3QgdG8gYmUgcGFzc2VkIHRvIHRoZSBob29rLCB3aXRoIHVzZWZ1bCBkYXRhIHRoZSBob29rIG1heSB1c2VcbiAgICAgKi9cbiAgICBfcnVuU3BhbkN1c3RvbWl6YXRpb25Ib29rKGhvb2tIYW5kbGVyLCB0cmlnZ2VyTmFtZSwgc3BhbiwgaW5mbykge1xuICAgICAgICBpZiAoIWhvb2tIYW5kbGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGhvb2tIYW5kbGVyKHNwYW4sIGluZm8pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmVycm9yKGBFcnJvciBydW5uaW5nIHNwYW4gY3VzdG9taXphdGlvbiBob29rIGR1ZSB0byBleGNlcHRpb24gaW4gaGFuZGxlcmAsIHsgdHJpZ2dlck5hbWUgfSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbkFic3RyYWN0ID0gSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb24uanMubWFwIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5cbi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL29zLWhvbWVkaXIvYmxvYi8xMWUwODlmNDc1NGRiMzhiYjUzNWU1YTg0MTYzMjBjNDQ0NmU4Y2ZkL2luZGV4LmpzXG5cbm1vZHVsZS5leHBvcnRzID0gb3MuaG9tZWRpciB8fCBmdW5jdGlvbiBob21lZGlyKCkge1xuICAgIHZhciBob21lID0gcHJvY2Vzcy5lbnYuSE9NRTtcbiAgICB2YXIgdXNlciA9IHByb2Nlc3MuZW52LkxPR05BTUUgfHwgcHJvY2Vzcy5lbnYuVVNFUiB8fCBwcm9jZXNzLmVudi5MTkFNRSB8fCBwcm9jZXNzLmVudi5VU0VSTkFNRTtcblxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi5VU0VSUFJPRklMRSB8fCBwcm9jZXNzLmVudi5IT01FRFJJVkUgKyBwcm9jZXNzLmVudi5IT01FUEFUSCB8fCBob21lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICAgIHJldHVybiBob21lIHx8ICh1c2VyID8gJy9Vc2Vycy8nICsgdXNlciA6IG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICAgIHJldHVybiBob21lIHx8IChwcm9jZXNzLmdldHVpZCgpID09PSAwID8gJy9yb290JyA6ICh1c2VyID8gJy9ob21lLycgKyB1c2VyIDogbnVsbCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV4dHJhLXBhcmVuc1xuICAgIH1cblxuICAgIHJldHVybiBob21lIHx8IG51bGw7XG59O1xuIiwKICAgICJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBzZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC93aWtpL0phdmFTY3JpcHRTdGFja1RyYWNlQXBpXG4gICAgdmFyIG9yaWdQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcbiAgICB2YXIgc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZ1ByZXBhcmVTdGFja1RyYWNlO1xuICAgIHJldHVybiBzdGFja1syXS5nZXRGaWxlTmFtZSgpO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcblxuLy8gUmVnZXggdG8gc3BsaXQgYSB3aW5kb3dzIHBhdGggaW50byBpbnRvIFtkaXIsIHJvb3QsIGJhc2VuYW1lLCBuYW1lLCBleHRdXG52YXIgc3BsaXRXaW5kb3dzUmUgPVxuICAgIC9eKCgoPzpbYS16QS1aXTp8W1xcXFxcXC9dezJ9W15cXFxcXFwvXStbXFxcXFxcL10rW15cXFxcXFwvXSspP1tcXFxcXFwvXT8pKD86W15cXFxcXFwvXSpbXFxcXFxcL10pKikoKFxcLnsxLDJ9fFteXFxcXFxcL10rP3wpKFxcLlteLlxcL1xcXFxdKnwpKVtcXFxcXFwvXSokLztcblxudmFyIHdpbjMyID0ge307XG5cbmZ1bmN0aW9uIHdpbjMyU3BsaXRQYXRoKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFdpbmRvd3NSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn1cblxud2luMzIucGFyc2UgPSBmdW5jdGlvbihwYXRoU3RyaW5nKSB7XG4gIGlmICh0eXBlb2YgcGF0aFN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHBhdGhTdHJpbmdcbiAgICApO1xuICB9XG4gIHZhciBhbGxQYXJ0cyA9IHdpbjMyU3BsaXRQYXRoKHBhdGhTdHJpbmcpO1xuICBpZiAoIWFsbFBhcnRzIHx8IGFsbFBhcnRzLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIHBhdGggJ1wiICsgcGF0aFN0cmluZyArIFwiJ1wiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJvb3Q6IGFsbFBhcnRzWzFdLFxuICAgIGRpcjogYWxsUGFydHNbMF0gPT09IGFsbFBhcnRzWzFdID8gYWxsUGFydHNbMF0gOiBhbGxQYXJ0c1swXS5zbGljZSgwLCAtMSksXG4gICAgYmFzZTogYWxsUGFydHNbMl0sXG4gICAgZXh0OiBhbGxQYXJ0c1s0XSxcbiAgICBuYW1lOiBhbGxQYXJ0c1szXVxuICB9O1xufTtcblxuXG5cbi8vIFNwbGl0IGEgZmlsZW5hbWUgaW50byBbZGlyLCByb290LCBiYXNlbmFtZSwgbmFtZSwgZXh0XSwgdW5peCB2ZXJzaW9uXG4vLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLlxudmFyIHNwbGl0UGF0aFJlID1cbiAgICAvXigoXFwvPykoPzpbXlxcL10qXFwvKSopKChcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpW1xcL10qJC87XG52YXIgcG9zaXggPSB7fTtcblxuXG5mdW5jdGlvbiBwb3NpeFNwbGl0UGF0aChmaWxlbmFtZSkge1xuICByZXR1cm4gc3BsaXRQYXRoUmUuZXhlYyhmaWxlbmFtZSkuc2xpY2UoMSk7XG59XG5cblxucG9zaXgucGFyc2UgPSBmdW5jdGlvbihwYXRoU3RyaW5nKSB7XG4gIGlmICh0eXBlb2YgcGF0aFN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHBhdGhTdHJpbmdcbiAgICApO1xuICB9XG4gIHZhciBhbGxQYXJ0cyA9IHBvc2l4U3BsaXRQYXRoKHBhdGhTdHJpbmcpO1xuICBpZiAoIWFsbFBhcnRzIHx8IGFsbFBhcnRzLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIHBhdGggJ1wiICsgcGF0aFN0cmluZyArIFwiJ1wiKTtcbiAgfVxuICBcbiAgcmV0dXJuIHtcbiAgICByb290OiBhbGxQYXJ0c1sxXSxcbiAgICBkaXI6IGFsbFBhcnRzWzBdLnNsaWNlKDAsIC0xKSxcbiAgICBiYXNlOiBhbGxQYXJ0c1syXSxcbiAgICBleHQ6IGFsbFBhcnRzWzRdLFxuICAgIG5hbWU6IGFsbFBhcnRzWzNdLFxuICB9O1xufTtcblxuXG5pZiAoaXNXaW5kb3dzKVxuICBtb2R1bGUuZXhwb3J0cyA9IHdpbjMyLnBhcnNlO1xuZWxzZSAvKiBwb3NpeCAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IHBvc2l4LnBhcnNlO1xuXG5tb2R1bGUuZXhwb3J0cy5wb3NpeCA9IHBvc2l4LnBhcnNlO1xubW9kdWxlLmV4cG9ydHMud2luMzIgPSB3aW4zMi5wYXJzZTtcbiIsCiAgICAidmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgcGFyc2UgPSBwYXRoLnBhcnNlIHx8IHJlcXVpcmUoJ3BhdGgtcGFyc2UnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXG52YXIgZHJpdmVMZXR0ZXJSZWdleCA9IC9eKFtBLVphLXpdOikvO1xudmFyIHVuY1BhdGhSZWdleCA9IC9eXFxcXFxcXFwvO1xuXG52YXIgZ2V0Tm9kZU1vZHVsZXNEaXJzID0gZnVuY3Rpb24gZ2V0Tm9kZU1vZHVsZXNEaXJzKGFic29sdXRlU3RhcnQsIG1vZHVsZXMpIHtcbiAgICB2YXIgcHJlZml4ID0gJy8nO1xuICAgIGlmIChkcml2ZUxldHRlclJlZ2V4LnRlc3QoYWJzb2x1dGVTdGFydCkpIHtcbiAgICAgICAgcHJlZml4ID0gJyc7XG4gICAgfSBlbHNlIGlmICh1bmNQYXRoUmVnZXgudGVzdChhYnNvbHV0ZVN0YXJ0KSkge1xuICAgICAgICBwcmVmaXggPSAnXFxcXFxcXFwnO1xuICAgIH1cblxuICAgIHZhciBwYXRocyA9IFthYnNvbHV0ZVN0YXJ0XTtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2UoYWJzb2x1dGVTdGFydCk7XG4gICAgd2hpbGUgKHBhcnNlZC5kaXIgIT09IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgIHBhdGhzLnB1c2gocGFyc2VkLmRpcik7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlKHBhcnNlZC5kaXIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRocy5yZWR1Y2UoZnVuY3Rpb24gKGRpcnMsIGFQYXRoKSB7XG4gICAgICAgIHJldHVybiBkaXJzLmNvbmNhdChtb2R1bGVzLm1hcChmdW5jdGlvbiAobW9kdWxlRGlyKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByZWZpeCwgYVBhdGgsIG1vZHVsZURpcik7XG4gICAgICAgIH0pKTtcbiAgICB9LCBbXSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vZGVNb2R1bGVzUGF0aHMoc3RhcnQsIG9wdHMsIHJlcXVlc3QpIHtcbiAgICB2YXIgbW9kdWxlcyA9IG9wdHMgJiYgb3B0cy5tb2R1bGVEaXJlY3RvcnlcbiAgICAgICAgPyBbXS5jb25jYXQob3B0cy5tb2R1bGVEaXJlY3RvcnkpXG4gICAgICAgIDogWydub2RlX21vZHVsZXMnXTtcblxuICAgIGlmIChvcHRzICYmIHR5cGVvZiBvcHRzLnBhdGhzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnBhdGhzKFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0Tm9kZU1vZHVsZXNEaXJzKHN0YXJ0LCBtb2R1bGVzKTsgfSxcbiAgICAgICAgICAgIG9wdHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZGlycyA9IGdldE5vZGVNb2R1bGVzRGlycyhzdGFydCwgbW9kdWxlcyk7XG4gICAgcmV0dXJuIG9wdHMgJiYgb3B0cy5wYXRocyA/IGRpcnMuY29uY2F0KG9wdHMucGF0aHMpIDogZGlycztcbn07XG4iLAogICAgIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHgsIG9wdHMpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGZpbGUgaXMgcHVycG9zZWZ1bGx5IGEgcGFzc3Rocm91Z2guIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGlyZC1wYXJ0eVxuICAgICAqIGVudmlyb25tZW50cyB3aWxsIG92ZXJyaWRlIGl0IGF0IHJ1bnRpbWUgaW4gb3JkZXIgdG8gaW5qZWN0IHNwZWNpYWwgbG9naWNcbiAgICAgKiBpbnRvIGByZXNvbHZlYCAoYnkgbWFuaXB1bGF0aW5nIHRoZSBvcHRpb25zKS4gT25lIHN1Y2ggZXhhbXBsZSBpcyB0aGUgUG5QXG4gICAgICogY29kZSBwYXRoIGluIFlhcm4uXG4gICAgICovXG5cbiAgICByZXR1cm4gb3B0cyB8fCB7fTtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxudmFyIGNvbmNhdHR5ID0gZnVuY3Rpb24gY29uY2F0dHkoYSwgYikge1xuICAgIHZhciBhcnIgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBhcnJbaV0gPSBhW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYXJyW2ogKyBhLmxlbmd0aF0gPSBiW2pdO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG59O1xuXG52YXIgc2xpY3kgPSBmdW5jdGlvbiBzbGljeShhcnJMaWtlLCBvZmZzZXQpIHtcbiAgICB2YXIgYXJyID0gW107XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldCB8fCAwLCBqID0gMDsgaSA8IGFyckxpa2UubGVuZ3RoOyBpICs9IDEsIGogKz0gMSkge1xuICAgICAgICBhcnJbal0gPSBhcnJMaWtlW2ldO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIGpvaW55ID0gZnVuY3Rpb24gKGFyciwgam9pbmVyKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHN0ciArPSBhcnJbaV07XG4gICAgICAgIGlmIChpICsgMSA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0ciArPSBqb2luZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuYXBwbHkodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljeShhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICk7XG5cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gbWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3NbaV0gPSAnJCcgKyBpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBqb2lueShib3VuZEFyZ3MsICcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciAkaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoY2FsbCwgJGhhc093bik7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhc293bicpO1xuXG5mdW5jdGlvbiBzcGVjaWZpZXJJbmNsdWRlZChjdXJyZW50LCBzcGVjaWZpZXIpIHtcblx0dmFyIG5vZGVQYXJ0cyA9IGN1cnJlbnQuc3BsaXQoJy4nKTtcblx0dmFyIHBhcnRzID0gc3BlY2lmaWVyLnNwbGl0KCcgJyk7XG5cdHZhciBvcCA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1swXSA6ICc9Jztcblx0dmFyIHZlcnNpb25QYXJ0cyA9IChwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiBwYXJ0c1swXSkuc3BsaXQoJy4nKTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkge1xuXHRcdHZhciBjdXIgPSBwYXJzZUludChub2RlUGFydHNbaV0gfHwgMCwgMTApO1xuXHRcdHZhciB2ZXIgPSBwYXJzZUludCh2ZXJzaW9uUGFydHNbaV0gfHwgMCwgMTApO1xuXHRcdGlmIChjdXIgPT09IHZlcikge1xuXHRcdFx0Y29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG5cdFx0fVxuXHRcdGlmIChvcCA9PT0gJzwnKSB7XG5cdFx0XHRyZXR1cm4gY3VyIDwgdmVyO1xuXHRcdH1cblx0XHRpZiAob3AgPT09ICc+PScpIHtcblx0XHRcdHJldHVybiBjdXIgPj0gdmVyO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG9wID09PSAnPj0nO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzUmFuZ2UoY3VycmVudCwgcmFuZ2UpIHtcblx0dmFyIHNwZWNpZmllcnMgPSByYW5nZS5zcGxpdCgvID8mJiA/Lyk7XG5cdGlmIChzcGVjaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNpZmllcnMubGVuZ3RoOyArK2kpIHtcblx0XHRpZiAoIXNwZWNpZmllckluY2x1ZGVkKGN1cnJlbnQsIHNwZWNpZmllcnNbaV0pKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2ZXJzaW9uSW5jbHVkZWQobm9kZVZlcnNpb24sIHNwZWNpZmllclZhbHVlKSB7XG5cdGlmICh0eXBlb2Ygc3BlY2lmaWVyVmFsdWUgPT09ICdib29sZWFuJykge1xuXHRcdHJldHVybiBzcGVjaWZpZXJWYWx1ZTtcblx0fVxuXG5cdHZhciBjdXJyZW50ID0gdHlwZW9mIG5vZGVWZXJzaW9uID09PSAndW5kZWZpbmVkJ1xuXHRcdD8gcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGVcblx0XHQ6IG5vZGVWZXJzaW9uO1xuXG5cdGlmICh0eXBlb2YgY3VycmVudCAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKHR5cGVvZiBub2RlVmVyc2lvbiA9PT0gJ3VuZGVmaW5lZCcgPyAnVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IG5vZGUgdmVyc2lvbicgOiAnSWYgcHJvdmlkZWQsIGEgdmFsaWQgbm9kZSB2ZXJzaW9uIGlzIHJlcXVpcmVkJyk7XG5cdH1cblxuXHRpZiAoc3BlY2lmaWVyVmFsdWUgJiYgdHlwZW9mIHNwZWNpZmllclZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3BlY2lmaWVyVmFsdWUubGVuZ3RoOyArK2kpIHtcblx0XHRcdGlmIChtYXRjaGVzUmFuZ2UoY3VycmVudCwgc3BlY2lmaWVyVmFsdWVbaV0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG1hdGNoZXNSYW5nZShjdXJyZW50LCBzcGVjaWZpZXJWYWx1ZSk7XG59XG5cbnZhciBkYXRhID0gcmVxdWlyZSgnLi9jb3JlLmpzb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NvcmUoeCwgbm9kZVZlcnNpb24pIHtcblx0cmV0dXJuIGhhc093bihkYXRhLCB4KSAmJiB2ZXJzaW9uSW5jbHVkZWQobm9kZVZlcnNpb24sIGRhdGFbeF0pO1xufTtcbiIsCiAgICAidmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBnZXRIb21lZGlyID0gcmVxdWlyZSgnLi9ob21lZGlyJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBjYWxsZXIgPSByZXF1aXJlKCcuL2NhbGxlcicpO1xudmFyIG5vZGVNb2R1bGVzUGF0aHMgPSByZXF1aXJlKCcuL25vZGUtbW9kdWxlcy1wYXRocycpO1xudmFyIG5vcm1hbGl6ZU9wdGlvbnMgPSByZXF1aXJlKCcuL25vcm1hbGl6ZS1vcHRpb25zJyk7XG52YXIgaXNDb3JlID0gcmVxdWlyZSgnaXMtY29yZS1tb2R1bGUnKTtcblxudmFyIHJlYWxwYXRoRlMgPSBwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInICYmIGZzLnJlYWxwYXRoICYmIHR5cGVvZiBmcy5yZWFscGF0aC5uYXRpdmUgPT09ICdmdW5jdGlvbicgPyBmcy5yZWFscGF0aC5uYXRpdmUgOiBmcy5yZWFscGF0aDtcblxudmFyIHJlbGF0aXZlUGF0aFJlZ2V4ID0gL14oPzpcXC5cXC4/KD86XFwvfCQpfFxcL3woW0EtWmEtel06KT9bL1xcXFxdKS87XG52YXIgd2luZG93c0RyaXZlUmVnZXggPSAvXlxcdzpbL1xcXFxdKiQvO1xudmFyIG5vZGVNb2R1bGVzUmVnZXggPSAvWy9cXFxcXW5vZGVfbW9kdWxlc1svXFxcXF0qJC87XG5cbnZhciBob21lZGlyID0gZ2V0SG9tZWRpcigpO1xudmFyIGRlZmF1bHRQYXRocyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYXRoLmpvaW4oaG9tZWRpciwgJy5ub2RlX21vZHVsZXMnKSxcbiAgICAgICAgcGF0aC5qb2luKGhvbWVkaXIsICcubm9kZV9saWJyYXJpZXMnKVxuICAgIF07XG59O1xuXG52YXIgZGVmYXVsdElzRmlsZSA9IGZ1bmN0aW9uIGlzRmlsZShmaWxlLCBjYikge1xuICAgIGZzLnN0YXQoZmlsZSwgZnVuY3Rpb24gKGVyciwgc3RhdCkge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHN0YXQuaXNGaWxlKCkgfHwgc3RhdC5pc0ZJRk8oKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJyB8fCBlcnIuY29kZSA9PT0gJ0VOT1RESVInKSByZXR1cm4gY2IobnVsbCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICB9KTtcbn07XG5cbnZhciBkZWZhdWx0SXNEaXIgPSBmdW5jdGlvbiBpc0RpcmVjdG9yeShkaXIsIGNiKSB7XG4gICAgZnMuc3RhdChkaXIsIGZ1bmN0aW9uIChlcnIsIHN0YXQpIHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCBzdGF0LmlzRGlyZWN0b3J5KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcgfHwgZXJyLmNvZGUgPT09ICdFTk9URElSJykgcmV0dXJuIGNiKG51bGwsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFJlYWxwYXRoID0gZnVuY3Rpb24gcmVhbHBhdGgoeCwgY2IpIHtcbiAgICByZWFscGF0aEZTKHgsIGZ1bmN0aW9uIChyZWFscGF0aEVyciwgcmVhbFBhdGgpIHtcbiAgICAgICAgaWYgKHJlYWxwYXRoRXJyICYmIHJlYWxwYXRoRXJyLmNvZGUgIT09ICdFTk9FTlQnKSBjYihyZWFscGF0aEVycik7XG4gICAgICAgIGVsc2UgY2IobnVsbCwgcmVhbHBhdGhFcnIgPyB4IDogcmVhbFBhdGgpO1xuICAgIH0pO1xufTtcblxudmFyIG1heWJlUmVhbHBhdGggPSBmdW5jdGlvbiBtYXliZVJlYWxwYXRoKHJlYWxwYXRoLCB4LCBvcHRzLCBjYikge1xuICAgIGlmIChvcHRzICYmIG9wdHMucHJlc2VydmVTeW1saW5rcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVhbHBhdGgoeCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNiKG51bGwsIHgpO1xuICAgIH1cbn07XG5cbnZhciBkZWZhdWx0UmVhZFBhY2thZ2UgPSBmdW5jdGlvbiBkZWZhdWx0UmVhZFBhY2thZ2UocmVhZEZpbGUsIHBrZ2ZpbGUsIGNiKSB7XG4gICAgcmVhZEZpbGUocGtnZmlsZSwgZnVuY3Rpb24gKHJlYWRGaWxlRXJyLCBib2R5KSB7XG4gICAgICAgIGlmIChyZWFkRmlsZUVycikgY2IocmVhZEZpbGVFcnIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHBrZyA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgICAgICAgICAgY2IobnVsbCwgcGtnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGpzb25FcnIpIHtcbiAgICAgICAgICAgICAgICBjYihudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxudmFyIGdldFBhY2thZ2VDYW5kaWRhdGVzID0gZnVuY3Rpb24gZ2V0UGFja2FnZUNhbmRpZGF0ZXMoeCwgc3RhcnQsIG9wdHMpIHtcbiAgICB2YXIgZGlycyA9IG5vZGVNb2R1bGVzUGF0aHMoc3RhcnQsIG9wdHMsIHgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkaXJzW2ldID0gcGF0aC5qb2luKGRpcnNbaV0sIHgpO1xuICAgIH1cbiAgICByZXR1cm4gZGlycztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVzb2x2ZSh4LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciBjYiA9IGNhbGxiYWNrO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRzO1xuICAgICAgICBvcHRzID0ge307XG4gICAgfVxuICAgIGlmICh0eXBlb2YgeCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3B0cyA9IG5vcm1hbGl6ZU9wdGlvbnMoeCwgb3B0cyk7XG5cbiAgICB2YXIgaXNGaWxlID0gb3B0cy5pc0ZpbGUgfHwgZGVmYXVsdElzRmlsZTtcbiAgICB2YXIgaXNEaXJlY3RvcnkgPSBvcHRzLmlzRGlyZWN0b3J5IHx8IGRlZmF1bHRJc0RpcjtcbiAgICB2YXIgcmVhZEZpbGUgPSBvcHRzLnJlYWRGaWxlIHx8IGZzLnJlYWRGaWxlO1xuICAgIHZhciByZWFscGF0aCA9IG9wdHMucmVhbHBhdGggfHwgZGVmYXVsdFJlYWxwYXRoO1xuICAgIHZhciByZWFkUGFja2FnZSA9IG9wdHMucmVhZFBhY2thZ2UgfHwgZGVmYXVsdFJlYWRQYWNrYWdlO1xuICAgIGlmIChvcHRzLnJlYWRGaWxlICYmIG9wdHMucmVhZFBhY2thZ2UpIHtcbiAgICAgICAgdmFyIGNvbmZsaWN0RXJyID0gbmV3IFR5cGVFcnJvcignYHJlYWRGaWxlYCBhbmQgYHJlYWRQYWNrYWdlYCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLicpO1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYihjb25mbGljdEVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgcGFja2FnZUl0ZXJhdG9yID0gb3B0cy5wYWNrYWdlSXRlcmF0b3I7XG5cbiAgICB2YXIgZXh0ZW5zaW9ucyA9IG9wdHMuZXh0ZW5zaW9ucyB8fCBbJy5qcyddO1xuICAgIHZhciBpbmNsdWRlQ29yZU1vZHVsZXMgPSBvcHRzLmluY2x1ZGVDb3JlTW9kdWxlcyAhPT0gZmFsc2U7XG4gICAgdmFyIGJhc2VkaXIgPSBvcHRzLmJhc2VkaXIgfHwgcGF0aC5kaXJuYW1lKGNhbGxlcigpKTtcbiAgICB2YXIgcGFyZW50ID0gb3B0cy5maWxlbmFtZSB8fCBiYXNlZGlyO1xuXG4gICAgb3B0cy5wYXRocyA9IG9wdHMucGF0aHMgfHwgZGVmYXVsdFBhdGhzKCk7XG5cbiAgICAvLyBlbnN1cmUgdGhhdCBgYmFzZWRpcmAgaXMgYW4gYWJzb2x1dGUgcGF0aCBhdCB0aGlzIHBvaW50LCByZXNvbHZpbmcgYWdhaW5zdCB0aGUgcHJvY2VzcycgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIHZhciBhYnNvbHV0ZVN0YXJ0ID0gcGF0aC5yZXNvbHZlKGJhc2VkaXIpO1xuXG4gICAgbWF5YmVSZWFscGF0aChcbiAgICAgICAgcmVhbHBhdGgsXG4gICAgICAgIGFic29sdXRlU3RhcnQsXG4gICAgICAgIG9wdHMsXG4gICAgICAgIGZ1bmN0aW9uIChlcnIsIHJlYWxTdGFydCkge1xuICAgICAgICAgICAgaWYgKGVycikgY2IoZXJyKTtcbiAgICAgICAgICAgIGVsc2UgaW5pdChyZWFsU3RhcnQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIHZhciByZXM7XG4gICAgZnVuY3Rpb24gaW5pdChiYXNlZGlyKSB7XG4gICAgICAgIGlmIChyZWxhdGl2ZVBhdGhSZWdleC50ZXN0KHgpKSB7XG4gICAgICAgICAgICByZXMgPSBwYXRoLnJlc29sdmUoYmFzZWRpciwgeCk7XG4gICAgICAgICAgICBpZiAoeCA9PT0gJy4nIHx8IHggPT09ICcuLicgfHwgeC5zbGljZSgtMSkgPT09ICcvJykgcmVzICs9ICcvJztcbiAgICAgICAgICAgIGlmICh4LnNsaWNlKC0xKSA9PT0gJy8nICYmIHJlcyA9PT0gYmFzZWRpcikge1xuICAgICAgICAgICAgICAgIGxvYWRBc0RpcmVjdG9yeShyZXMsIG9wdHMucGFja2FnZSwgb25maWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSBsb2FkQXNGaWxlKHJlcywgb3B0cy5wYWNrYWdlLCBvbmZpbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGluY2x1ZGVDb3JlTW9kdWxlcyAmJiBpc0NvcmUoeCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYihudWxsLCB4KTtcbiAgICAgICAgfSBlbHNlIGxvYWROb2RlTW9kdWxlcyh4LCBiYXNlZGlyLCBmdW5jdGlvbiAoZXJyLCBuLCBwa2cpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIGNiKGVycik7XG4gICAgICAgICAgICBlbHNlIGlmIChuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1heWJlUmVhbHBhdGgocmVhbHBhdGgsIG4sIG9wdHMsIGZ1bmN0aW9uIChlcnIsIHJlYWxOKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYihudWxsLCByZWFsTiwgcGtnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9kdWxlRXJyb3IgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgeCArIFwiJyBmcm9tICdcIiArIHBhcmVudCArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICBtb2R1bGVFcnJvci5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuICAgICAgICAgICAgICAgIGNiKG1vZHVsZUVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25maWxlKGVyciwgbSwgcGtnKSB7XG4gICAgICAgIGlmIChlcnIpIGNiKGVycik7XG4gICAgICAgIGVsc2UgaWYgKG0pIGNiKG51bGwsIG0sIHBrZyk7XG4gICAgICAgIGVsc2UgbG9hZEFzRGlyZWN0b3J5KHJlcywgZnVuY3Rpb24gKGVyciwgZCwgcGtnKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSBjYihlcnIpO1xuICAgICAgICAgICAgZWxzZSBpZiAoZCkge1xuICAgICAgICAgICAgICAgIG1heWJlUmVhbHBhdGgocmVhbHBhdGgsIGQsIG9wdHMsIGZ1bmN0aW9uIChlcnIsIHJlYWxEKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYihudWxsLCByZWFsRCwgcGtnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9kdWxlRXJyb3IgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgeCArIFwiJyBmcm9tICdcIiArIHBhcmVudCArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICBtb2R1bGVFcnJvci5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuICAgICAgICAgICAgICAgIGNiKG1vZHVsZUVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZEFzRmlsZSh4LCB0aGVQYWNrYWdlLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgbG9hZEFzRmlsZVBhY2thZ2UgPSB0aGVQYWNrYWdlO1xuICAgICAgICB2YXIgY2IgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBsb2FkQXNGaWxlUGFja2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBsb2FkQXNGaWxlUGFja2FnZTtcbiAgICAgICAgICAgIGxvYWRBc0ZpbGVQYWNrYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGV4dHMgPSBbJyddLmNvbmNhdChleHRlbnNpb25zKTtcbiAgICAgICAgbG9hZChleHRzLCB4LCBsb2FkQXNGaWxlUGFja2FnZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZChleHRzLCB4LCBsb2FkUGFja2FnZSkge1xuICAgICAgICAgICAgaWYgKGV4dHMubGVuZ3RoID09PSAwKSByZXR1cm4gY2IobnVsbCwgdW5kZWZpbmVkLCBsb2FkUGFja2FnZSk7XG4gICAgICAgICAgICB2YXIgZmlsZSA9IHggKyBleHRzWzBdO1xuXG4gICAgICAgICAgICB2YXIgcGtnID0gbG9hZFBhY2thZ2U7XG4gICAgICAgICAgICBpZiAocGtnKSBvbnBrZyhudWxsLCBwa2cpO1xuICAgICAgICAgICAgZWxzZSBsb2FkcGtnKHBhdGguZGlybmFtZShmaWxlKSwgb25wa2cpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBvbnBrZyhlcnIsIHBrZ18sIGRpcikge1xuICAgICAgICAgICAgICAgIHBrZyA9IHBrZ187XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGRpciAmJiBwa2cgJiYgb3B0cy5wYXRoRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZmlsZSA9IHBhdGgucmVsYXRpdmUoZGlyLCBmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbCA9IHJmaWxlLnNsaWNlKDAsIHJmaWxlLmxlbmd0aCAtIGV4dHNbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBvcHRzLnBhdGhGaWx0ZXIocGtnLCB4LCByZWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocikgcmV0dXJuIGxvYWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBbJyddLmNvbmNhdChleHRlbnNpb25zLnNsaWNlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5yZXNvbHZlKGRpciwgciksXG4gICAgICAgICAgICAgICAgICAgICAgICBwa2dcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNGaWxlKGZpbGUsIG9uZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gb25leChlcnIsIGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGV4KSByZXR1cm4gY2IobnVsbCwgZmlsZSwgcGtnKTtcbiAgICAgICAgICAgICAgICBsb2FkKGV4dHMuc2xpY2UoMSksIHgsIHBrZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkcGtnKGRpciwgY2IpIHtcbiAgICAgICAgaWYgKGRpciA9PT0gJycgfHwgZGlyID09PSAnLycpIHJldHVybiBjYihudWxsKTtcbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgd2luZG93c0RyaXZlUmVnZXgudGVzdChkaXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVNb2R1bGVzUmVnZXgudGVzdChkaXIpKSByZXR1cm4gY2IobnVsbCk7XG5cbiAgICAgICAgbWF5YmVSZWFscGF0aChyZWFscGF0aCwgZGlyLCBvcHRzLCBmdW5jdGlvbiAodW53cmFwRXJyLCBwa2dkaXIpIHtcbiAgICAgICAgICAgIGlmICh1bndyYXBFcnIpIHJldHVybiBsb2FkcGtnKHBhdGguZGlybmFtZShkaXIpLCBjYik7XG4gICAgICAgICAgICB2YXIgcGtnZmlsZSA9IHBhdGguam9pbihwa2dkaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgICAgIGlzRmlsZShwa2dmaWxlLCBmdW5jdGlvbiAoZXJyLCBleCkge1xuICAgICAgICAgICAgICAgIC8vIG9uIGVyciwgZXggaXMgZmFsc2VcbiAgICAgICAgICAgICAgICBpZiAoIWV4KSByZXR1cm4gbG9hZHBrZyhwYXRoLmRpcm5hbWUoZGlyKSwgY2IpO1xuXG4gICAgICAgICAgICAgICAgcmVhZFBhY2thZ2UocmVhZEZpbGUsIHBrZ2ZpbGUsIGZ1bmN0aW9uIChlcnIsIHBrZ1BhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIGNiKGVycik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBrZyA9IHBrZ1BhcmFtO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwa2cgJiYgb3B0cy5wYWNrYWdlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwa2cgPSBvcHRzLnBhY2thZ2VGaWx0ZXIocGtnLCBwa2dmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYihudWxsLCBwa2csIGRpcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZEFzRGlyZWN0b3J5KHgsIGxvYWRBc0RpcmVjdG9yeVBhY2thZ2UsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjYiA9IGNhbGxiYWNrO1xuICAgICAgICB2YXIgZnBrZyA9IGxvYWRBc0RpcmVjdG9yeVBhY2thZ2U7XG4gICAgICAgIGlmICh0eXBlb2YgZnBrZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2IgPSBmcGtnO1xuICAgICAgICAgICAgZnBrZyA9IG9wdHMucGFja2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heWJlUmVhbHBhdGgocmVhbHBhdGgsIHgsIG9wdHMsIGZ1bmN0aW9uICh1bndyYXBFcnIsIHBrZ2Rpcikge1xuICAgICAgICAgICAgaWYgKHVud3JhcEVycikgcmV0dXJuIGNiKHVud3JhcEVycik7XG4gICAgICAgICAgICB2YXIgcGtnZmlsZSA9IHBhdGguam9pbihwa2dkaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgICAgIGlzRmlsZShwa2dmaWxlLCBmdW5jdGlvbiAoZXJyLCBleCkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgIGlmICghZXgpIHJldHVybiBsb2FkQXNGaWxlKHBhdGguam9pbih4LCAnaW5kZXgnKSwgZnBrZywgY2IpO1xuXG4gICAgICAgICAgICAgICAgcmVhZFBhY2thZ2UocmVhZEZpbGUsIHBrZ2ZpbGUsIGZ1bmN0aW9uIChlcnIsIHBrZ1BhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBwa2cgPSBwa2dQYXJhbTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGtnICYmIG9wdHMucGFja2FnZUZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGtnID0gb3B0cy5wYWNrYWdlRmlsdGVyKHBrZywgcGtnZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGtnICYmIHBrZy5tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBrZy5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWluRXJyb3IgPSBuZXcgVHlwZUVycm9yKCdwYWNrYWdlIOKAnCcgKyBwa2cubmFtZSArICfigJ0gYG1haW5gIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluRXJyb3IuY29kZSA9ICdJTlZBTElEX1BBQ0tBR0VfTUFJTic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKG1haW5FcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGtnLm1haW4gPT09ICcuJyB8fCBwa2cubWFpbiA9PT0gJy4vJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZy5tYWluID0gJ2luZGV4JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRBc0ZpbGUocGF0aC5yZXNvbHZlKHgsIHBrZy5tYWluKSwgcGtnLCBmdW5jdGlvbiAoZXJyLCBtLCBwa2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkgcmV0dXJuIGNiKG51bGwsIG0sIHBrZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwa2cpIHJldHVybiBsb2FkQXNGaWxlKHBhdGguam9pbih4LCAnaW5kZXgnKSwgcGtnLCBjYik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlyID0gcGF0aC5yZXNvbHZlKHgsIHBrZy5tYWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkQXNEaXJlY3RvcnkoZGlyLCBwa2csIGZ1bmN0aW9uIChlcnIsIG4sIHBrZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4pIHJldHVybiBjYihudWxsLCBuLCBwa2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkQXNGaWxlKHBhdGguam9pbih4LCAnaW5kZXgnKSwgcGtnLCBjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxvYWRBc0ZpbGUocGF0aC5qb2luKHgsICcvaW5kZXgnKSwgcGtnLCBjYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0RpcnMoY2IsIGRpcnMpIHtcbiAgICAgICAgaWYgKGRpcnMubGVuZ3RoID09PSAwKSByZXR1cm4gY2IobnVsbCwgdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGRpciA9IGRpcnNbMF07XG5cbiAgICAgICAgaXNEaXJlY3RvcnkocGF0aC5kaXJuYW1lKGRpciksIGlzZGlyKTtcblxuICAgICAgICBmdW5jdGlvbiBpc2RpcihlcnIsIGlzZGlyKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgIGlmICghaXNkaXIpIHJldHVybiBwcm9jZXNzRGlycyhjYiwgZGlycy5zbGljZSgxKSk7XG4gICAgICAgICAgICBsb2FkQXNGaWxlKGRpciwgb3B0cy5wYWNrYWdlLCBvbmZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25maWxlKGVyciwgbSwgcGtnKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgIGlmIChtKSByZXR1cm4gY2IobnVsbCwgbSwgcGtnKTtcbiAgICAgICAgICAgIGxvYWRBc0RpcmVjdG9yeShkaXIsIG9wdHMucGFja2FnZSwgb25kaXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb25kaXIoZXJyLCBuLCBwa2cpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgaWYgKG4pIHJldHVybiBjYihudWxsLCBuLCBwa2cpO1xuICAgICAgICAgICAgcHJvY2Vzc0RpcnMoY2IsIGRpcnMuc2xpY2UoMSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvYWROb2RlTW9kdWxlcyh4LCBzdGFydCwgY2IpIHtcbiAgICAgICAgdmFyIHRodW5rID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0UGFja2FnZUNhbmRpZGF0ZXMoeCwgc3RhcnQsIG9wdHMpOyB9O1xuICAgICAgICBwcm9jZXNzRGlycyhcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgcGFja2FnZUl0ZXJhdG9yID8gcGFja2FnZUl0ZXJhdG9yKHgsIHN0YXJ0LCB0aHVuaywgb3B0cykgOiB0aHVuaygpXG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNDb3JlTW9kdWxlID0gcmVxdWlyZSgnaXMtY29yZS1tb2R1bGUnKTtcbnZhciBkYXRhID0gcmVxdWlyZSgnLi9jb3JlLmpzb24nKTtcblxudmFyIGNvcmUgPSB7fTtcbmZvciAodmFyIG1vZCBpbiBkYXRhKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIG1vZCkpIHtcbiAgICAgICAgY29yZVttb2RdID0gaXNDb3JlTW9kdWxlKG1vZCk7XG4gICAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjb3JlO1xuIiwKICAgICJ2YXIgaXNDb3JlTW9kdWxlID0gcmVxdWlyZSgnaXMtY29yZS1tb2R1bGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NvcmUoeCkge1xuICAgIHJldHVybiBpc0NvcmVNb2R1bGUoeCk7XG59O1xuIiwKICAgICJ2YXIgaXNDb3JlID0gcmVxdWlyZSgnaXMtY29yZS1tb2R1bGUnKTtcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBnZXRIb21lZGlyID0gcmVxdWlyZSgnLi9ob21lZGlyJyk7XG52YXIgY2FsbGVyID0gcmVxdWlyZSgnLi9jYWxsZXInKTtcbnZhciBub2RlTW9kdWxlc1BhdGhzID0gcmVxdWlyZSgnLi9ub2RlLW1vZHVsZXMtcGF0aHMnKTtcbnZhciBub3JtYWxpemVPcHRpb25zID0gcmVxdWlyZSgnLi9ub3JtYWxpemUtb3B0aW9ucycpO1xuXG52YXIgcmVhbHBhdGhGUyA9IHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicgJiYgZnMucmVhbHBhdGhTeW5jICYmIHR5cGVvZiBmcy5yZWFscGF0aFN5bmMubmF0aXZlID09PSAnZnVuY3Rpb24nID8gZnMucmVhbHBhdGhTeW5jLm5hdGl2ZSA6IGZzLnJlYWxwYXRoU3luYztcblxudmFyIHJlbGF0aXZlUGF0aFJlZ2V4ID0gL14oPzpcXC5cXC4/KD86XFwvfCQpfFxcL3woW0EtWmEtel06KT9bL1xcXFxdKS87XG52YXIgd2luZG93c0RyaXZlUmVnZXggPSAvXlxcdzpbL1xcXFxdKiQvO1xudmFyIG5vZGVNb2R1bGVzUmVnZXggPSAvWy9cXFxcXW5vZGVfbW9kdWxlc1svXFxcXF0qJC87XG5cbnZhciBob21lZGlyID0gZ2V0SG9tZWRpcigpO1xudmFyIGRlZmF1bHRQYXRocyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYXRoLmpvaW4oaG9tZWRpciwgJy5ub2RlX21vZHVsZXMnKSxcbiAgICAgICAgcGF0aC5qb2luKGhvbWVkaXIsICcubm9kZV9saWJyYXJpZXMnKVxuICAgIF07XG59O1xuXG52YXIgZGVmYXVsdElzRmlsZSA9IGZ1bmN0aW9uIGlzRmlsZShmaWxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlICYmIChlLmNvZGUgPT09ICdFTk9FTlQnIHx8IGUuY29kZSA9PT0gJ0VOT1RESVInKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gISFzdGF0ICYmIChzdGF0LmlzRmlsZSgpIHx8IHN0YXQuaXNGSUZPKCkpO1xufTtcblxudmFyIGRlZmF1bHRJc0RpciA9IGZ1bmN0aW9uIGlzRGlyZWN0b3J5KGRpcikge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBzdGF0ID0gZnMuc3RhdFN5bmMoZGlyLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlICYmIChlLmNvZGUgPT09ICdFTk9FTlQnIHx8IGUuY29kZSA9PT0gJ0VOT1RESVInKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gISFzdGF0ICYmIHN0YXQuaXNEaXJlY3RvcnkoKTtcbn07XG5cbnZhciBkZWZhdWx0UmVhbHBhdGhTeW5jID0gZnVuY3Rpb24gcmVhbHBhdGhTeW5jKHgpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVhbHBhdGhGUyh4KTtcbiAgICB9IGNhdGNoIChyZWFscGF0aEVycikge1xuICAgICAgICBpZiAocmVhbHBhdGhFcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIHRocm93IHJlYWxwYXRoRXJyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB4O1xufTtcblxudmFyIG1heWJlUmVhbHBhdGhTeW5jID0gZnVuY3Rpb24gbWF5YmVSZWFscGF0aFN5bmMocmVhbHBhdGhTeW5jLCB4LCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wcmVzZXJ2ZVN5bWxpbmtzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gcmVhbHBhdGhTeW5jKHgpO1xuICAgIH1cbiAgICByZXR1cm4geDtcbn07XG5cbnZhciBkZWZhdWx0UmVhZFBhY2thZ2VTeW5jID0gZnVuY3Rpb24gZGVmYXVsdFJlYWRQYWNrYWdlU3luYyhyZWFkRmlsZVN5bmMsIHBrZ2ZpbGUpIHtcbiAgICB2YXIgYm9keSA9IHJlYWRGaWxlU3luYyhwa2dmaWxlKTtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcGtnID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgcmV0dXJuIHBrZztcbiAgICB9IGNhdGNoIChqc29uRXJyKSB7fVxufTtcblxudmFyIGdldFBhY2thZ2VDYW5kaWRhdGVzID0gZnVuY3Rpb24gZ2V0UGFja2FnZUNhbmRpZGF0ZXMoeCwgc3RhcnQsIG9wdHMpIHtcbiAgICB2YXIgZGlycyA9IG5vZGVNb2R1bGVzUGF0aHMoc3RhcnQsIG9wdHMsIHgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkaXJzW2ldID0gcGF0aC5qb2luKGRpcnNbaV0sIHgpO1xuICAgIH1cbiAgICByZXR1cm4gZGlycztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVzb2x2ZVN5bmMoeCwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGF0aCBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICB2YXIgb3B0cyA9IG5vcm1hbGl6ZU9wdGlvbnMoeCwgb3B0aW9ucyk7XG5cbiAgICB2YXIgaXNGaWxlID0gb3B0cy5pc0ZpbGUgfHwgZGVmYXVsdElzRmlsZTtcbiAgICB2YXIgcmVhZEZpbGVTeW5jID0gb3B0cy5yZWFkRmlsZVN5bmMgfHwgZnMucmVhZEZpbGVTeW5jO1xuICAgIHZhciBpc0RpcmVjdG9yeSA9IG9wdHMuaXNEaXJlY3RvcnkgfHwgZGVmYXVsdElzRGlyO1xuICAgIHZhciByZWFscGF0aFN5bmMgPSBvcHRzLnJlYWxwYXRoU3luYyB8fCBkZWZhdWx0UmVhbHBhdGhTeW5jO1xuICAgIHZhciByZWFkUGFja2FnZVN5bmMgPSBvcHRzLnJlYWRQYWNrYWdlU3luYyB8fCBkZWZhdWx0UmVhZFBhY2thZ2VTeW5jO1xuICAgIGlmIChvcHRzLnJlYWRGaWxlU3luYyAmJiBvcHRzLnJlYWRQYWNrYWdlU3luYykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgcmVhZEZpbGVTeW5jYCBhbmQgYHJlYWRQYWNrYWdlU3luY2AgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4nKTtcbiAgICB9XG4gICAgdmFyIHBhY2thZ2VJdGVyYXRvciA9IG9wdHMucGFja2FnZUl0ZXJhdG9yO1xuXG4gICAgdmFyIGV4dGVuc2lvbnMgPSBvcHRzLmV4dGVuc2lvbnMgfHwgWycuanMnXTtcbiAgICB2YXIgaW5jbHVkZUNvcmVNb2R1bGVzID0gb3B0cy5pbmNsdWRlQ29yZU1vZHVsZXMgIT09IGZhbHNlO1xuICAgIHZhciBiYXNlZGlyID0gb3B0cy5iYXNlZGlyIHx8IHBhdGguZGlybmFtZShjYWxsZXIoKSk7XG4gICAgdmFyIHBhcmVudCA9IG9wdHMuZmlsZW5hbWUgfHwgYmFzZWRpcjtcblxuICAgIG9wdHMucGF0aHMgPSBvcHRzLnBhdGhzIHx8IGRlZmF1bHRQYXRocygpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgYGJhc2VkaXJgIGlzIGFuIGFic29sdXRlIHBhdGggYXQgdGhpcyBwb2ludCwgcmVzb2x2aW5nIGFnYWluc3QgdGhlIHByb2Nlc3MnIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICB2YXIgYWJzb2x1dGVTdGFydCA9IG1heWJlUmVhbHBhdGhTeW5jKHJlYWxwYXRoU3luYywgcGF0aC5yZXNvbHZlKGJhc2VkaXIpLCBvcHRzKTtcblxuICAgIGlmIChyZWxhdGl2ZVBhdGhSZWdleC50ZXN0KHgpKSB7XG4gICAgICAgIHZhciByZXMgPSBwYXRoLnJlc29sdmUoYWJzb2x1dGVTdGFydCwgeCk7XG4gICAgICAgIGlmICh4ID09PSAnLicgfHwgeCA9PT0gJy4uJyB8fCB4LnNsaWNlKC0xKSA9PT0gJy8nKSByZXMgKz0gJy8nO1xuICAgICAgICB2YXIgbSA9IGxvYWRBc0ZpbGVTeW5jKHJlcykgfHwgbG9hZEFzRGlyZWN0b3J5U3luYyhyZXMpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG1heWJlUmVhbHBhdGhTeW5jKHJlYWxwYXRoU3luYywgbSwgb3B0cyk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlQ29yZU1vZHVsZXMgJiYgaXNDb3JlKHgpKSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuID0gbG9hZE5vZGVNb2R1bGVzU3luYyh4LCBhYnNvbHV0ZVN0YXJ0KTtcbiAgICAgICAgaWYgKG4pIHJldHVybiBtYXliZVJlYWxwYXRoU3luYyhyZWFscGF0aFN5bmMsIG4sIG9wdHMpO1xuICAgIH1cblxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgeCArIFwiJyBmcm9tICdcIiArIHBhcmVudCArIFwiJ1wiKTtcbiAgICBlcnIuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcbiAgICB0aHJvdyBlcnI7XG5cbiAgICBmdW5jdGlvbiBsb2FkQXNGaWxlU3luYyh4KSB7XG4gICAgICAgIHZhciBwa2cgPSBsb2FkcGtnKHBhdGguZGlybmFtZSh4KSk7XG5cbiAgICAgICAgaWYgKHBrZyAmJiBwa2cuZGlyICYmIHBrZy5wa2cgJiYgb3B0cy5wYXRoRmlsdGVyKSB7XG4gICAgICAgICAgICB2YXIgcmZpbGUgPSBwYXRoLnJlbGF0aXZlKHBrZy5kaXIsIHgpO1xuICAgICAgICAgICAgdmFyIHIgPSBvcHRzLnBhdGhGaWx0ZXIocGtnLnBrZywgeCwgcmZpbGUpO1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgICB4ID0gcGF0aC5yZXNvbHZlKHBrZy5kaXIsIHIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGaWxlKHgpKSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGZpbGUgPSB4ICsgZXh0ZW5zaW9uc1tpXTtcbiAgICAgICAgICAgIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRwa2coZGlyKSB7XG4gICAgICAgIGlmIChkaXIgPT09ICcnIHx8IGRpciA9PT0gJy8nKSByZXR1cm47XG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHdpbmRvd3NEcml2ZVJlZ2V4LnRlc3QoZGlyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTW9kdWxlc1JlZ2V4LnRlc3QoZGlyKSkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBwa2dmaWxlID0gcGF0aC5qb2luKG1heWJlUmVhbHBhdGhTeW5jKHJlYWxwYXRoU3luYywgZGlyLCBvcHRzKSwgJ3BhY2thZ2UuanNvbicpO1xuXG4gICAgICAgIGlmICghaXNGaWxlKHBrZ2ZpbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZHBrZyhwYXRoLmRpcm5hbWUoZGlyKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGtnID0gcmVhZFBhY2thZ2VTeW5jKHJlYWRGaWxlU3luYywgcGtnZmlsZSk7XG5cbiAgICAgICAgaWYgKHBrZyAmJiBvcHRzLnBhY2thZ2VGaWx0ZXIpIHtcbiAgICAgICAgICAgIC8vIHYyIHdpbGwgcGFzcyBwa2dmaWxlXG4gICAgICAgICAgICBwa2cgPSBvcHRzLnBhY2thZ2VGaWx0ZXIocGtnLCAvKnBrZ2ZpbGUsKi8gZGlyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzcGFjZWQtY29tbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgcGtnOiBwa2csIGRpcjogZGlyIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZEFzRGlyZWN0b3J5U3luYyh4KSB7XG4gICAgICAgIHZhciBwa2dmaWxlID0gcGF0aC5qb2luKG1heWJlUmVhbHBhdGhTeW5jKHJlYWxwYXRoU3luYywgeCwgb3B0cyksICcvcGFja2FnZS5qc29uJyk7XG4gICAgICAgIGlmIChpc0ZpbGUocGtnZmlsZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHBrZyA9IHJlYWRQYWNrYWdlU3luYyhyZWFkRmlsZVN5bmMsIHBrZ2ZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgaWYgKHBrZyAmJiBvcHRzLnBhY2thZ2VGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyB2MiB3aWxsIHBhc3MgcGtnZmlsZVxuICAgICAgICAgICAgICAgIHBrZyA9IG9wdHMucGFja2FnZUZpbHRlcihwa2csIC8qcGtnZmlsZSwqLyB4KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzcGFjZWQtY29tbWVudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGtnICYmIHBrZy5tYWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwa2cubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1haW5FcnJvciA9IG5ldyBUeXBlRXJyb3IoJ3BhY2thZ2Ug4oCcJyArIHBrZy5uYW1lICsgJ+KAnSBgbWFpbmAgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgICAgICAgICAgICAgICBtYWluRXJyb3IuY29kZSA9ICdJTlZBTElEX1BBQ0tBR0VfTUFJTic7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG1haW5FcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBrZy5tYWluID09PSAnLicgfHwgcGtnLm1haW4gPT09ICcuLycpIHtcbiAgICAgICAgICAgICAgICAgICAgcGtnLm1haW4gPSAnaW5kZXgnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGxvYWRBc0ZpbGVTeW5jKHBhdGgucmVzb2x2ZSh4LCBwa2cubWFpbikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSkgcmV0dXJuIG07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuID0gbG9hZEFzRGlyZWN0b3J5U3luYyhwYXRoLnJlc29sdmUoeCwgcGtnLm1haW4pKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4pIHJldHVybiBuO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9hZEFzRmlsZVN5bmMocGF0aC5qb2luKHgsICcvaW5kZXgnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZE5vZGVNb2R1bGVzU3luYyh4LCBzdGFydCkge1xuICAgICAgICB2YXIgdGh1bmsgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRQYWNrYWdlQ2FuZGlkYXRlcyh4LCBzdGFydCwgb3B0cyk7IH07XG4gICAgICAgIHZhciBkaXJzID0gcGFja2FnZUl0ZXJhdG9yID8gcGFja2FnZUl0ZXJhdG9yKHgsIHN0YXJ0LCB0aHVuaywgb3B0cykgOiB0aHVuaygpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGRpciA9IGRpcnNbaV07XG4gICAgICAgICAgICBpZiAoaXNEaXJlY3RvcnkocGF0aC5kaXJuYW1lKGRpcikpKSB7XG4gICAgICAgICAgICAgICAgdmFyIG0gPSBsb2FkQXNGaWxlU3luYyhkaXIpO1xuICAgICAgICAgICAgICAgIGlmIChtKSByZXR1cm4gbTtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IGxvYWRBc0RpcmVjdG9yeVN5bmMoZGlyKTtcbiAgICAgICAgICAgICAgICBpZiAobikgcmV0dXJuIG47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwKICAgICJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2xpYi9hc3luYycpO1xuYXN5bmMuY29yZSA9IHJlcXVpcmUoJy4vbGliL2NvcmUnKTtcbmFzeW5jLmlzQ29yZSA9IHJlcXVpcmUoJy4vbGliL2lzLWNvcmUnKTtcbmFzeW5jLnN5bmMgPSByZXF1aXJlKCcuL2xpYi9zeW5jJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKCdtb2R1bGUnKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdyZXF1aXJlLWluLXRoZS1taWRkbGUnKVxuY29uc3QgbW9kdWxlRGV0YWlsc0Zyb21QYXRoID0gcmVxdWlyZSgnbW9kdWxlLWRldGFpbHMtZnJvbS1wYXRoJylcblxuLy8gVXNpbmcgdGhlIGRlZmF1bHQgZXhwb3J0IGlzIGRpc2NvdXJhZ2VkLCBidXQga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbi8vIFVzZSB0aGlzIGluc3RlYWQ6XG4vLyAgICBjb25zdCB7IEhvb2sgfSA9IHJlcXVpcmUoJ3JlcXVpcmUtaW4tdGhlLW1pZGRsZScpXG5tb2R1bGUuZXhwb3J0cyA9IEhvb2tcbm1vZHVsZS5leHBvcnRzLkhvb2sgPSBIb29rXG5cbmxldCBidWlsdGluTW9kdWxlcyAvLyBTZXQ8c3RyaW5nPlxuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBtb2R1bGUgYSBcImNvcmVcIiBtb2R1bGU/XG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL21vZHVsZXMuaHRtbCNjb3JlLW1vZHVsZXNcbiAqXG4gKiBAdHlwZSB7KG1vZHVsZU5hbWU6IHN0cmluZykgPT4gYm9vbGVhbn1cbiAqL1xubGV0IGlzQ29yZVxuaWYgKE1vZHVsZS5pc0J1aWx0aW4pIHsgLy8gQWRkZWQgaW4gbm9kZSB2MTguNi4wLCB2MTYuMTcuMFxuICBpc0NvcmUgPSBNb2R1bGUuaXNCdWlsdGluXG59IGVsc2UgaWYgKE1vZHVsZS5idWlsdGluTW9kdWxlcykgeyAvLyBBZGRlZCBpbiBub2RlIHY5LjMuMCwgdjguMTAuMCwgdjYuMTMuMFxuICBpc0NvcmUgPSBtb2R1bGVOYW1lID0+IHtcbiAgICBpZiAobW9kdWxlTmFtZS5zdGFydHNXaXRoKCdub2RlOicpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChidWlsdGluTW9kdWxlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBidWlsdGluTW9kdWxlcyA9IG5ldyBTZXQoTW9kdWxlLmJ1aWx0aW5Nb2R1bGVzKVxuICAgIH1cblxuICAgIHJldHVybiBidWlsdGluTW9kdWxlcy5oYXMobW9kdWxlTmFtZSlcbiAgfVxufSBlbHNlIHtcbiAgY29uc3QgX3Jlc29sdmUgPSByZXF1aXJlKCdyZXNvbHZlJylcbiAgY29uc3QgW21ham9yLCBtaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKVxuICBpZiAobWFqb3IgPT09IDggJiYgbWlub3IgPCA4KSB7XG4gICAgLy8gRm9yIG5vZGUgdmVyc2lvbnMgYFs4LjAsIDguOClgIHRoZSBcImh0dHAyXCIgbW9kdWxlIHdhcyBidWlsdC1pbiBidXRcbiAgICAvLyBiZWhpbmQgdGhlIGAtLWV4cG9zZS1odHRwMmAgZmxhZy4gYHJlc29sdmVgIG9ubHkgY29uc2lkZXJzIHVuZmxhZ2dlZFxuICAgIC8vIG1vZHVsZXMgdG8gYmUgY29yZTogaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcmVzb2x2ZS9pc3N1ZXMvMTM5XG4gICAgLy8gSG93ZXZlciwgZm9yIGBFeHBvcnRzQ2FjaGVgIHRvIHdvcmsgZm9yIFwiaHR0cDJcIiB3ZSBuZWVkIGl0IHRvIGJlXG4gICAgLy8gY29uc2lkZXJlZCBjb3JlLlxuICAgIGlzQ29yZSA9IG1vZHVsZU5hbWUgPT4ge1xuICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICdodHRwMicpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIC8vIFByZWZlciBgcmVzb2x2ZS5jb3JlYCBsb29rdXAgdG8gYHJlc29sdmUuaXNDb3JlKG1vZHVsZU5hbWUpYCBiZWNhdXNlXG4gICAgICAvLyB0aGUgbGF0dGVyIGlzIGRvaW5nIHZlcnNpb24gcmFuZ2UgbWF0Y2hlcyBmb3IgZXZlcnkgY2FsbC5cbiAgICAgIHJldHVybiAhIV9yZXNvbHZlLmNvcmVbbW9kdWxlTmFtZV1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXNDb3JlID0gbW9kdWxlTmFtZSA9PiB7XG4gICAgICAvLyBQcmVmZXIgYHJlc29sdmUuY29yZWAgbG9va3VwIHRvIGByZXNvbHZlLmlzQ29yZShtb2R1bGVOYW1lKWAgYmVjYXVzZVxuICAgICAgLy8gdGhlIGxhdHRlciBpcyBkb2luZyB2ZXJzaW9uIHJhbmdlIG1hdGNoZXMgZm9yIGV2ZXJ5IGNhbGwuXG4gICAgICByZXR1cm4gISFfcmVzb2x2ZS5jb3JlW21vZHVsZU5hbWVdXG4gICAgfVxuICB9XG59XG5cbmxldCBfcmVzb2x2ZVxuXG5mdW5jdGlvbiByZXNvbHZlIChtb2R1bGVOYW1lLCBiYXNlZGlyKSB7XG4gIC8vIEZlYXR1cmUgZGV0ZWN0aW9uOiBUaGlzIHByb3BlcnR5IHdhcyBhZGRlZCBpbiBOb2RlLmpzIDguOS4wLCB0aGUgc2FtZSB0aW1lXG4gIC8vIGFzIHRoZSBgcGF0aHNgIG9wdGlvbnMgYXJndW1lbnQgd2FzIGFkZGVkIHRvIHRoZSBgcmVxdWlyZS5yZXNvbHZlYCBmdW5jdGlvbixcbiAgLy8gd2hpY2ggaXMgdGhlIG9uZSB3ZSB3YW50XG4gIGlmICghX3Jlc29sdmUpIHtcbiAgICAvLyByZXF1aXJlLnJlc29sdmUgbWlnaHQgYmUgdW5kZWZpbmVkIHdoZW4gdXNpbmcgTm9kZSBTRUEgbW9kZTpcbiAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL3NpbmdsZS1leGVjdXRhYmxlLWFwcGxpY2F0aW9ucy5odG1sXG4gICAgLy8gQWxzbyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9yZXF1aXJlLWluLXRoZS1taWRkbGUvaXNzdWVzLzEwNVxuICAgIGlmIChyZXF1aXJlLnJlc29sdmUgJiYgcmVxdWlyZS5yZXNvbHZlLnBhdGhzKSB7XG4gICAgICBfcmVzb2x2ZSA9IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBiYXNlZGlyKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUobW9kdWxlTmFtZSwgeyBwYXRoczogW2Jhc2VkaXJdIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc29sdmUgPSByZXF1aXJlKCdyZXNvbHZlJylcbiAgICAgIF9yZXNvbHZlID0gZnVuY3Rpb24gKG1vZHVsZU5hbWUsIGJhc2VkaXIpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUuc3luYyhtb2R1bGVOYW1lLCB7IGJhc2VkaXIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gX3Jlc29sdmUobW9kdWxlTmFtZSwgYmFzZWRpcilcbn1cblxuLy8gJ2Zvby9iYXIuanMnIG9yICdmb28vYmFyL2luZGV4LmpzJyA9PiAnZm9vL2JhcidcbmNvbnN0IG5vcm1hbGl6ZSA9IC8oWy9cXFxcXWluZGV4KT8oXFwuanMpPyQvXG5cbi8vIENhY2hlIGBvbnJlcXVpcmVgLXBhdGNoZWQgZXhwb3J0cyBmb3IgbW9kdWxlcy5cbi8vXG4vLyBFeHBvcnRzIGZvciBidWlsdC1pbiAoYS5rLmEuIFwiY29yZVwiKSBtb2R1bGVzIGFyZSBzdG9yZWQgaW4gYW4gaW50ZXJuYWwgTWFwLlxuLy9cbi8vIEV4cG9ydHMgZm9yIG5vbi1jb3JlIG1vZHVsZXMgYXJlIHN0b3JlZCBvbiBhIHByaXZhdGUgZmllbGQgb24gdGhlIGBNb2R1bGVgXG4vLyBvYmplY3QgaW4gYHJlcXVpcmUuY2FjaGVgLiBUaGlzIGFsbG93cyB1c2VycyB0byBkZWxldGUgZnJvbSBgcmVxdWlyZS5jYWNoZWBcbi8vIHRvIHRyaWdnZXIgYSByZS1sb2FkIChhbmQgcmUtcnVuIG9mIHRoZSBob29rJ3MgYG9ucmVxdWlyZWApIG9mIGEgbW9kdWxlIHRoZVxuLy8gbmV4dCB0aW1lIGl0IGlzIHJlcXVpcmVkLlxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9hbGwuaHRtbCNhbGxfbW9kdWxlc19yZXF1aXJlY2FjaGVcbi8vXG4vLyBJbiBzb21lIHNwZWNpYWwgY2FzZXMgLS0gZS5nLiBzb21lIG90aGVyIGByZXF1aXJlKClgIGhvb2sgc3dhcHBpbmcgb3V0XG4vLyBgTW9kdWxlLl9jYWNoZWAgbGlrZSBgQGJhYmVsL3JlZ2lzdGVyYCAtLSBhIG5vbi1jb3JlIG1vZHVsZSB3b24ndCBiZSBpblxuLy8gYHJlcXVpcmUuY2FjaGVgLiBJbiB0aGF0IGNhc2UgdGhpcyBmYWxscyBiYWNrIHRvIGNhY2hpbmcgb24gdGhlIGludGVybmFsIE1hcC5cbmNsYXNzIEV4cG9ydHNDYWNoZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9sb2NhbENhY2hlID0gbmV3IE1hcCgpIC8vIDxtb2R1bGUgZmlsZW5hbWUgb3IgaWQ+IC0+IDxleHBvcnRzPlxuICAgIHRoaXMuX2tSaXRtRXhwb3J0cyA9IFN5bWJvbCgnUml0bUV4cG9ydHMnKVxuICB9XG5cbiAgaGFzIChmaWxlbmFtZSwgaXNCdWlsdGluKSB7XG4gICAgaWYgKHRoaXMuX2xvY2FsQ2FjaGUuaGFzKGZpbGVuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKCFpc0J1aWx0aW4pIHtcbiAgICAgIGNvbnN0IG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZW5hbWVdXG4gICAgICByZXR1cm4gISEobW9kICYmIHRoaXMuX2tSaXRtRXhwb3J0cyBpbiBtb2QpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGdldCAoZmlsZW5hbWUsIGlzQnVpbHRpbikge1xuICAgIGNvbnN0IGNhY2hlZEV4cG9ydHMgPSB0aGlzLl9sb2NhbENhY2hlLmdldChmaWxlbmFtZSlcbiAgICBpZiAoY2FjaGVkRXhwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRXhwb3J0c1xuICAgIH0gZWxzZSBpZiAoIWlzQnVpbHRpbikge1xuICAgICAgY29uc3QgbW9kID0gcmVxdWlyZS5jYWNoZVtmaWxlbmFtZV1cbiAgICAgIHJldHVybiAobW9kICYmIG1vZFt0aGlzLl9rUml0bUV4cG9ydHNdKVxuICAgIH1cbiAgfVxuXG4gIHNldCAoZmlsZW5hbWUsIGV4cG9ydHMsIGlzQnVpbHRpbikge1xuICAgIGlmIChpc0J1aWx0aW4pIHtcbiAgICAgIHRoaXMuX2xvY2FsQ2FjaGUuc2V0KGZpbGVuYW1lLCBleHBvcnRzKVxuICAgIH0gZWxzZSBpZiAoZmlsZW5hbWUgaW4gcmVxdWlyZS5jYWNoZSkge1xuICAgICAgcmVxdWlyZS5jYWNoZVtmaWxlbmFtZV1bdGhpcy5fa1JpdG1FeHBvcnRzXSA9IGV4cG9ydHNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ25vbi1jb3JlIG1vZHVsZSBpcyB1bmV4cGVjdGVkbHkgbm90IGluIHJlcXVpcmUuY2FjaGU6IFwiJXNcIicsIGZpbGVuYW1lKVxuICAgICAgdGhpcy5fbG9jYWxDYWNoZS5zZXQoZmlsZW5hbWUsIGV4cG9ydHMpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEhvb2sgKG1vZHVsZXMsIG9wdGlvbnMsIG9ucmVxdWlyZSkge1xuICBpZiAoKHRoaXMgaW5zdGFuY2VvZiBIb29rKSA9PT0gZmFsc2UpIHJldHVybiBuZXcgSG9vayhtb2R1bGVzLCBvcHRpb25zLCBvbnJlcXVpcmUpXG4gIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9ucmVxdWlyZSA9IG1vZHVsZXNcbiAgICBtb2R1bGVzID0gbnVsbFxuICAgIG9wdGlvbnMgPSBudWxsXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvbnJlcXVpcmUgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG51bGxcbiAgfVxuXG4gIGlmICh0eXBlb2YgTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogRXhwZWN0ZWQgTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgdG8gYmUgYSBmdW5jdGlvbiAod2FzOiAlcykgLSBhYm9ydGluZyEnLCB0eXBlb2YgTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUpXG4gICAgY29uc29sZS5lcnJvcignUGxlYXNlIHJlcG9ydCB0aGlzIGVycm9yIGFzIGFuIGlzc3VlIHJlbGF0ZWQgdG8gTm9kZS5qcyAlcyBhdCAlcycsIHByb2Nlc3MudmVyc2lvbiwgcmVxdWlyZSgnLi9wYWNrYWdlLmpzb24nKS5idWdzLnVybClcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuX2NhY2hlID0gbmV3IEV4cG9ydHNDYWNoZSgpXG5cbiAgdGhpcy5fdW5ob29rZWQgPSBmYWxzZVxuICB0aGlzLl9vcmlnUmVxdWlyZSA9IE1vZHVsZS5wcm90b3R5cGUucmVxdWlyZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGNvbnN0IHBhdGNoaW5nID0gbmV3IFNldCgpXG4gIGNvbnN0IGludGVybmFscyA9IG9wdGlvbnMgPyBvcHRpb25zLmludGVybmFscyA9PT0gdHJ1ZSA6IGZhbHNlXG4gIGNvbnN0IGhhc1doaXRlbGlzdCA9IEFycmF5LmlzQXJyYXkobW9kdWxlcylcblxuICBkZWJ1ZygncmVnaXN0ZXJpbmcgcmVxdWlyZSBob29rJylcblxuICB0aGlzLl9yZXF1aXJlID0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgaWYgKHNlbGYuX3VuaG9va2VkID09PSB0cnVlKSB7XG4gICAgICAvLyBpZiB0aGUgcGF0Y2hlZCByZXF1aXJlIGZ1bmN0aW9uIGNvdWxkIG5vdCBiZSByZW1vdmVkIGJlY2F1c2VcbiAgICAgIC8vIHNvbWVvbmUgZWxzZSBwYXRjaGVkIGl0IGFmdGVyIGl0IHdhcyBwYXRjaGVkIGhlcmUsIHdlIGp1c3RcbiAgICAgIC8vIGFib3J0IGFuZCBwYXNzIHRoZSByZXF1ZXN0IG9ud2FyZHMgdG8gdGhlIG9yaWdpbmFsIHJlcXVpcmVcbiAgICAgIGRlYnVnKCdpZ25vcmluZyByZXF1aXJlIGNhbGwgLSBtb2R1bGUgaXMgc29mdC11bmhvb2tlZCcpXG4gICAgICByZXR1cm4gc2VsZi5fb3JpZ1JlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cblxuICAgIHJldHVybiBwYXRjaGVkUmVxdWlyZS5jYWxsKHRoaXMsIGFyZ3VtZW50cywgZmFsc2UpXG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX29yaWdHZXRCdWlsdGluTW9kdWxlID0gcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlXG4gICAgdGhpcy5fZ2V0QnVpbHRpbk1vZHVsZSA9IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaWYgKHNlbGYuX3VuaG9va2VkID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRjaGVkIHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSBmdW5jdGlvbiBjb3VsZCBub3QgYmUgcmVtb3ZlZCBiZWNhdXNlXG4gICAgICAgIC8vIHNvbWVvbmUgZWxzZSBwYXRjaGVkIGl0IGFmdGVyIGl0IHdhcyBwYXRjaGVkIGhlcmUsIHdlIGp1c3QgYWJvcnQgYW5kIHBhc3MgdGhlXG4gICAgICAgIC8vIHJlcXVlc3Qgb253YXJkcyB0byB0aGUgb3JpZ2luYWwgcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlXG4gICAgICAgIGRlYnVnKCdpZ25vcmluZyBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUgY2FsbCAtIG1vZHVsZSBpcyBzb2Z0LXVuaG9va2VkJylcbiAgICAgICAgcmV0dXJuIHNlbGYuX29yaWdHZXRCdWlsdGluTW9kdWxlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGNoZWRSZXF1aXJlLmNhbGwodGhpcywgYXJndW1lbnRzLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCByZXF1aXJlL3Byb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSBhcmd1bWVudHMgaW4gYGFyZ3NgXG4gIGZ1bmN0aW9uIHBhdGNoZWRSZXF1aXJlIChhcmdzLCBjb3JlT25seSkge1xuICAgIGNvbnN0IGlkID0gYXJnc1swXVxuICAgIGNvbnN0IGNvcmUgPSBpc0NvcmUoaWQpXG4gICAgbGV0IGZpbGVuYW1lIC8vIHRoZSBzdHJpbmcgdXNlZCBmb3IgY2FjaGluZ1xuICAgIGlmIChjb3JlKSB7XG4gICAgICBmaWxlbmFtZSA9IGlkXG4gICAgICAvLyBJZiB0aGlzIGlzIGEgYnVpbHRpbiBtb2R1bGUgdGhhdCBjYW4gYmUgaWRlbnRpZmllZCBib3RoIGFzICdmb28nIGFuZFxuICAgICAgLy8gJ25vZGU6Zm9vJywgdGhlbiBwcmVmZXIgJ2ZvbycgYXMgdGhlIGNhY2hpbmcga2V5LlxuICAgICAgaWYgKGlkLnN0YXJ0c1dpdGgoJ25vZGU6JykpIHtcbiAgICAgICAgY29uc3QgaWRXaXRob3V0UHJlZml4ID0gaWQuc2xpY2UoNSlcbiAgICAgICAgaWYgKGlzQ29yZShpZFdpdGhvdXRQcmVmaXgpKSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBpZFdpdGhvdXRQcmVmaXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29yZU9ubHkpIHtcbiAgICAgIC8vIGBjb3JlT25seWAgaXMgYHRydWVgIGlmIHRoaXMgd2FzIGEgY2FsbCB0byBgcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlYCwgaW4gd2hpY2ggY2FzZVxuICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gYW55dGhpbmcgaWYgdGhlIHJlcXVlc3RlZCBgaWRgIGlzbid0IGEgY29yZSBtb2R1bGUuIEZhbGxpbmdcbiAgICAgIC8vIGJhY2sgdG8gZGVmYXVsdCBiZWhhdmlvdXIsIHdoaWNoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3J0aW5nIGlzIHNpbXBseSByZXR1cm5pbmcgYHVuZGVmaW5lZGBcbiAgICAgIGRlYnVnKCdjYWxsIHRvIHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSB3aXRoIHVua25vd24gYnVpbHQtaW4gaWQnKVxuICAgICAgcmV0dXJuIHNlbGYuX29yaWdHZXRCdWlsdGluTW9kdWxlLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUoaWQsIHRoaXMpXG4gICAgICB9IGNhdGNoIChyZXNvbHZlRXJyKSB7XG4gICAgICAgIC8vIElmIHNvbWVvbmUgKmVsc2UqIG1vbmtleS1wYXRjaGVzIGJlZm9yZSB0aGlzIG1vbmtleS1wYXRjaCwgdGhlbiB0aGF0XG4gICAgICAgIC8vIGNvZGUgbWlnaHQgZXhwZWN0IGByZXF1aXJlKHNvbWVJZClgIHRvIGdldCB0aHJvdWdoIHNvIGl0IGNhbiBiZVxuICAgICAgICAvLyBoYW5kbGVkLCBldmVuIGlmIGBzb21lSWRgIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIGZpbGVuYW1lLiBJbiB0aGlzXG4gICAgICAgIC8vIGNhc2UsIGluc3RlYWQgb2YgdGhyb3dpbmcgd2UgZGVmZXIgdG8gdGhlIHVuZGVybHlpbmcgYHJlcXVpcmVgLlxuICAgICAgICAvL1xuICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgQXp1cmUgRnVuY3Rpb25zIE5vZGUuanMgd29ya2VyIG1vZHVsZSBkb2VzIHRoaXMsXG4gICAgICAgIC8vIHdoZXJlIGBAYXp1cmUvZnVuY3Rpb25zLWNvcmVgIHJlc29sdmVzIHRvIGFuIGludGVybmFsIG9iamVjdC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2F6dXJlLWZ1bmN0aW9ucy1ub2RlanMtd29ya2VyL2Jsb2IvdjMuNS4yL3NyYy9zZXR1cENvcmVNb2R1bGUudHMjTDQ2LUw1NFxuICAgICAgICBkZWJ1ZygnTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUoXCIlc1wiKSB0aHJldyAlaiwgY2FsbGluZyBvcmlnaW5hbCBNb2R1bGUucmVxdWlyZScsIGlkLCByZXNvbHZlRXJyLm1lc3NhZ2UpXG4gICAgICAgIHJldHVybiBzZWxmLl9vcmlnUmVxdWlyZS5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBtb2R1bGVOYW1lLCBiYXNlZGlyXG5cbiAgICBkZWJ1ZygncHJvY2Vzc2luZyAlcyBtb2R1bGUgcmVxdWlyZShcXCclc1xcJyk6ICVzJywgY29yZSA9PT0gdHJ1ZSA/ICdjb3JlJyA6ICdub24tY29yZScsIGlkLCBmaWxlbmFtZSlcblxuICAgIC8vIHJldHVybiBrbm93biBwYXRjaGVkIG1vZHVsZXMgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2VsZi5fY2FjaGUuaGFzKGZpbGVuYW1lLCBjb3JlKSA9PT0gdHJ1ZSkge1xuICAgICAgZGVidWcoJ3JldHVybmluZyBhbHJlYWR5IHBhdGNoZWQgY2FjaGVkIG1vZHVsZTogJXMnLCBmaWxlbmFtZSlcbiAgICAgIHJldHVybiBzZWxmLl9jYWNoZS5nZXQoZmlsZW5hbWUsIGNvcmUpXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBtb2R1bGUgaGFzIGEgcGF0Y2hlciBpbi1wcm9ncmVzcyBhbHJlYWR5LlxuICAgIC8vIE90aGVyd2lzZSwgbWFyayB0aGlzIG1vZHVsZSBhcyBwYXRjaGluZyBpbi1wcm9ncmVzcy5cbiAgICBjb25zdCBpc1BhdGNoaW5nID0gcGF0Y2hpbmcuaGFzKGZpbGVuYW1lKVxuICAgIGlmIChpc1BhdGNoaW5nID09PSBmYWxzZSkge1xuICAgICAgcGF0Y2hpbmcuYWRkKGZpbGVuYW1lKVxuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydHMgPSBjb3JlT25seVxuICAgICAgPyBzZWxmLl9vcmlnR2V0QnVpbHRpbk1vZHVsZS5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgOiBzZWxmLl9vcmlnUmVxdWlyZS5hcHBseSh0aGlzLCBhcmdzKVxuXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IHBhdGNoZWQsIGp1c3QgcmV0dXJuIGl0IGFzLWlzLlxuICAgIGlmIChpc1BhdGNoaW5nID09PSB0cnVlKSB7XG4gICAgICBkZWJ1ZygnbW9kdWxlIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHBhdGNoZWQgYWxyZWFkeSAtIGlnbm9yaW5nOiAlcycsIGZpbGVuYW1lKVxuICAgICAgcmV0dXJuIGV4cG9ydHNcbiAgICB9XG5cbiAgICAvLyBUaGUgbW9kdWxlIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLFxuICAgIC8vIHNvIHRoZSBwYXRjaGluZyBtYXJrIGNhbiBiZSBjbGVhbmVkIHVwLlxuICAgIHBhdGNoaW5nLmRlbGV0ZShmaWxlbmFtZSlcblxuICAgIGlmIChjb3JlID09PSB0cnVlKSB7XG4gICAgICBpZiAoaGFzV2hpdGVsaXN0ID09PSB0cnVlICYmIG1vZHVsZXMuaW5jbHVkZXMoZmlsZW5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICBkZWJ1ZygnaWdub3JpbmcgY29yZSBtb2R1bGUgbm90IG9uIHdoaXRlbGlzdDogJXMnLCBmaWxlbmFtZSlcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMgLy8gYWJvcnQgaWYgbW9kdWxlIG5hbWUgaXNuJ3Qgb24gd2hpdGVsaXN0XG4gICAgICB9XG4gICAgICBtb2R1bGVOYW1lID0gZmlsZW5hbWVcbiAgICB9IGVsc2UgaWYgKGhhc1doaXRlbGlzdCA9PT0gdHJ1ZSAmJiBtb2R1bGVzLmluY2x1ZGVzKGZpbGVuYW1lKSkge1xuICAgICAgLy8gd2hpdGVsaXN0IGluY2x1ZGVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIGluY2x1ZGluZyBleHRlbnNpb25cbiAgICAgIGNvbnN0IHBhcnNlZFBhdGggPSBwYXRoLnBhcnNlKGZpbGVuYW1lKVxuICAgICAgbW9kdWxlTmFtZSA9IHBhcnNlZFBhdGgubmFtZVxuICAgICAgYmFzZWRpciA9IHBhcnNlZFBhdGguZGlyXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXQgPSBtb2R1bGVEZXRhaWxzRnJvbVBhdGgoZmlsZW5hbWUpXG4gICAgICBpZiAoc3RhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlYnVnKCdjb3VsZCBub3QgcGFyc2UgZmlsZW5hbWU6ICVzJywgZmlsZW5hbWUpXG4gICAgICAgIHJldHVybiBleHBvcnRzIC8vIGFib3J0IGlmIGZpbGVuYW1lIGNvdWxkIG5vdCBiZSBwYXJzZWRcbiAgICAgIH1cbiAgICAgIG1vZHVsZU5hbWUgPSBzdGF0Lm5hbWVcbiAgICAgIGJhc2VkaXIgPSBzdGF0LmJhc2VkaXJcblxuICAgICAgLy8gRXg6IHJlcXVpcmUoJ2Zvby9saWIvLi4vYmFyLmpzJylcbiAgICAgIC8vIG1vZHVsZU5hbWUgPSAnZm9vJ1xuICAgICAgLy8gZnVsbE1vZHVsZU5hbWUgPSAnZm9vL2JhcidcbiAgICAgIGNvbnN0IGZ1bGxNb2R1bGVOYW1lID0gcmVzb2x2ZU1vZHVsZU5hbWUoc3RhdClcblxuICAgICAgZGVidWcoJ3Jlc29sdmVkIGZpbGVuYW1lIHRvIG1vZHVsZTogJXMgKGlkOiAlcywgcmVzb2x2ZWQ6ICVzLCBiYXNlZGlyOiAlcyknLCBtb2R1bGVOYW1lLCBpZCwgZnVsbE1vZHVsZU5hbWUsIGJhc2VkaXIpXG5cbiAgICAgIGxldCBtYXRjaEZvdW5kID0gZmFsc2VcbiAgICAgIGlmIChoYXNXaGl0ZWxpc3QpIHtcbiAgICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKCcuJykgJiYgbW9kdWxlcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAvLyBOb3Qgc3RhcnRpbmcgd2l0aCAnLicgbWVhbnMgYGlkYCBpcyBpZGVudGlmeWluZyBhIG1vZHVsZSBwYXRoLFxuICAgICAgICAgIC8vIGFzIG9wcG9zZWQgdG8gYSBsb2NhbCBmaWxlIHBhdGguIChOb3RlOiBJJ20gbm90IHN1cmUgYWJvdXRcbiAgICAgICAgICAvLyBhYnNvbHV0ZSBwYXRocywgYnV0IHRob3NlIGFyZSBoYW5kbGVkIGFib3ZlLilcbiAgICAgICAgICAvLyBJZiB0aGlzIGBpZGAgaXMgaW4gYG1vZHVsZXNgLCB0aGVuIHRoaXMgY291bGQgYmUgYSBtYXRjaCB0byBhblxuICAgICAgICAgIC8vIHBhY2thZ2UgXCJleHBvcnRzXCIgZW50cnkgcG9pbnQgdGhhdCB3b3VsZG4ndCBvdGhlcndpc2UgbWF0Y2ggYmVsb3cuXG4gICAgICAgICAgbW9kdWxlTmFtZSA9IGlkXG4gICAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFib3J0IGlmIG1vZHVsZSBuYW1lIGlzbid0IG9uIHdoaXRlbGlzdFxuICAgICAgICBpZiAoIW1vZHVsZXMuaW5jbHVkZXMobW9kdWxlTmFtZSkgJiYgIW1vZHVsZXMuaW5jbHVkZXMoZnVsbE1vZHVsZU5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGV4cG9ydHNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2R1bGVzLmluY2x1ZGVzKGZ1bGxNb2R1bGVOYW1lKSAmJiBmdWxsTW9kdWxlTmFtZSAhPT0gbW9kdWxlTmFtZSkge1xuICAgICAgICAgIC8vIGlmIHdlIGdldCB0byB0aGlzIHBvaW50LCBpdCBtZWFucyB0aGF0IHdlJ3JlIHJlcXVpcmluZyBhIHdoaXRlbGlzdGVkIHN1Yi1tb2R1bGVcbiAgICAgICAgICBtb2R1bGVOYW1lID0gZnVsbE1vZHVsZU5hbWVcbiAgICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghbWF0Y2hGb3VuZCkge1xuICAgICAgICAvLyBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgdGhlIG1haW4gbW9kdWxlIGZpbGUsIG9yIGEgZmlsZSBpbnNpZGUgdGhlIG1vZHVsZVxuICAgICAgICBsZXQgcmVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzID0gcmVzb2x2ZShtb2R1bGVOYW1lLCBiYXNlZGlyKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZGVidWcoJ2NvdWxkIG5vdCByZXNvbHZlIG1vZHVsZTogJXMnLCBtb2R1bGVOYW1lKVxuICAgICAgICAgIHNlbGYuX2NhY2hlLnNldChmaWxlbmFtZSwgZXhwb3J0cywgY29yZSlcbiAgICAgICAgICByZXR1cm4gZXhwb3J0cyAvLyBhYm9ydCBpZiBtb2R1bGUgY291bGQgbm90IGJlIHJlc29sdmVkIChlLmcuIG5vIG1haW4gaW4gcGFja2FnZS5qc29uIGFuZCBubyBpbmRleC5qcyBmaWxlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcyAhPT0gZmlsZW5hbWUpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgbW9kdWxlLWludGVybmFsIGZpbGVcbiAgICAgICAgICBpZiAoaW50ZXJuYWxzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyB1c2UgdGhlIG1vZHVsZS1yZWxhdGl2ZSBwYXRoIHRvIHRoZSBmaWxlLCBwcmVmaXhlZCBieSBvcmlnaW5hbCBtb2R1bGUgbmFtZVxuICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUgKyBwYXRoLnNlcCArIHBhdGgucmVsYXRpdmUoYmFzZWRpciwgZmlsZW5hbWUpXG4gICAgICAgICAgICBkZWJ1ZygncHJlcGFyaW5nIHRvIHByb2Nlc3MgcmVxdWlyZSBvZiBpbnRlcm5hbCBmaWxlOiAlcycsIG1vZHVsZU5hbWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnKCdpZ25vcmluZyByZXF1aXJlIG9mIG5vbi1tYWluIG1vZHVsZSBmaWxlOiAlcycsIHJlcylcbiAgICAgICAgICAgIHNlbGYuX2NhY2hlLnNldChmaWxlbmFtZSwgZXhwb3J0cywgY29yZSlcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzIC8vIGFib3J0IGlmIG5vdCBtYWluIG1vZHVsZSBmaWxlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGNhY2hlIGVudHJ5IGlzIGFzc2lnbmVkIGEgdmFsdWUgYmVmb3JlIGNhbGxpbmdcbiAgICAvLyBvbnJlcXVpcmUsIGluIGNhc2UgY2FsbGluZyBvbnJlcXVpcmUgcmVxdWlyZXMgdGhlIHNhbWUgbW9kdWxlLlxuICAgIHNlbGYuX2NhY2hlLnNldChmaWxlbmFtZSwgZXhwb3J0cywgY29yZSlcbiAgICBkZWJ1ZygnY2FsbGluZyByZXF1aXJlIGhvb2s6ICVzJywgbW9kdWxlTmFtZSlcbiAgICBjb25zdCBwYXRjaGVkRXhwb3J0cyA9IG9ucmVxdWlyZShleHBvcnRzLCBtb2R1bGVOYW1lLCBiYXNlZGlyKVxuICAgIHNlbGYuX2NhY2hlLnNldChmaWxlbmFtZSwgcGF0Y2hlZEV4cG9ydHMsIGNvcmUpXG5cbiAgICBkZWJ1ZygncmV0dXJuaW5nIG1vZHVsZTogJXMnLCBtb2R1bGVOYW1lKVxuICAgIHJldHVybiBwYXRjaGVkRXhwb3J0c1xuICB9XG59XG5cbkhvb2sucHJvdG90eXBlLnVuaG9vayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fdW5ob29rZWQgPSB0cnVlXG5cbiAgaWYgKHRoaXMuX3JlcXVpcmUgPT09IE1vZHVsZS5wcm90b3R5cGUucmVxdWlyZSkge1xuICAgIE1vZHVsZS5wcm90b3R5cGUucmVxdWlyZSA9IHRoaXMuX29yaWdSZXF1aXJlXG4gICAgZGVidWcoJ3JlcXVpcmUgdW5ob29rIHN1Y2Nlc3NmdWwnKVxuICB9IGVsc2Uge1xuICAgIGRlYnVnKCdyZXF1aXJlIHVuaG9vayB1bnN1Y2Nlc3NmdWwnKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRoaXMuX2dldEJ1aWx0aW5Nb2R1bGUgPT09IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSkge1xuICAgICAgcHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlID0gdGhpcy5fb3JpZ0dldEJ1aWx0aW5Nb2R1bGVcbiAgICAgIGRlYnVnKCdwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUgdW5ob29rIHN1Y2Nlc3NmdWwnKVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygncHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlIHVuaG9vayB1bnN1Y2Nlc3NmdWwnKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kdWxlTmFtZSAoc3RhdCkge1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGguc2VwICE9PSAnLycgPyBzdGF0LnBhdGguc3BsaXQocGF0aC5zZXApLmpvaW4oJy8nKSA6IHN0YXQucGF0aFxuICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKHN0YXQubmFtZSwgbm9ybWFsaXplZFBhdGgpLnJlcGxhY2Uobm9ybWFsaXplLCAnJylcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Nb2R1bGVOYW1lVHJpZSA9IGV4cG9ydHMuTW9kdWxlTmFtZVNlcGFyYXRvciA9IHZvaWQgMDtcbmV4cG9ydHMuTW9kdWxlTmFtZVNlcGFyYXRvciA9ICcvJztcbi8qKlxuICogTm9kZSBpbiBhIGBNb2R1bGVOYW1lVHJpZWBcbiAqL1xuY2xhc3MgTW9kdWxlTmFtZVRyaWVOb2RlIHtcbiAgICBob29rcyA9IFtdO1xuICAgIGNoaWxkcmVuID0gbmV3IE1hcCgpO1xufVxuLyoqXG4gKiBUcmllIGNvbnRhaW5pbmcgbm9kZXMgdGhhdCByZXByZXNlbnQgYSBwYXJ0IG9mIGEgbW9kdWxlIG5hbWUgKGkuZS4gdGhlIHBhcnRzIHNlcGFyYXRlZCBieSBmb3J3YXJkIHNsYXNoKVxuICovXG5jbGFzcyBNb2R1bGVOYW1lVHJpZSB7XG4gICAgX3RyaWUgPSBuZXcgTW9kdWxlTmFtZVRyaWVOb2RlKCk7XG4gICAgX2NvdW50ZXIgPSAwO1xuICAgIC8qKlxuICAgICAqIEluc2VydCBhIG1vZHVsZSBob29rIGludG8gdGhlIHRyaWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SG9va2VkfSBob29rIEhvb2tcbiAgICAgKi9cbiAgICBpbnNlcnQoaG9vaykge1xuICAgICAgICBsZXQgdHJpZU5vZGUgPSB0aGlzLl90cmllO1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZU5hbWVQYXJ0IG9mIGhvb2subW9kdWxlTmFtZS5zcGxpdChleHBvcnRzLk1vZHVsZU5hbWVTZXBhcmF0b3IpKSB7XG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSB0cmllTm9kZS5jaGlsZHJlbi5nZXQobW9kdWxlTmFtZVBhcnQpO1xuICAgICAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV3IE1vZHVsZU5hbWVUcmllTm9kZSgpO1xuICAgICAgICAgICAgICAgIHRyaWVOb2RlLmNoaWxkcmVuLnNldChtb2R1bGVOYW1lUGFydCwgbmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZU5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICB0cmllTm9kZS5ob29rcy5wdXNoKHsgaG9vaywgaW5zZXJ0ZWRJZDogdGhpcy5fY291bnRlcisrIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggZm9yIG1hdGNoaW5nIGhvb2tzIGluIHRoZSB0cmllXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSBNb2R1bGUgbmFtZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWFpbnRhaW5JbnNlcnRpb25PcmRlciBXaGV0aGVyIHRvIHJldHVybiB0aGUgcmVzdWx0cyBpbiBpbnNlcnRpb24gb3JkZXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZ1bGxPbmx5IFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgZnVsbCBtYXRjaGVzXG4gICAgICogQHJldHVybnMge0hvb2tlZFtdfSBNYXRjaGluZyBob29rc1xuICAgICAqL1xuICAgIHNlYXJjaChtb2R1bGVOYW1lLCB7IG1haW50YWluSW5zZXJ0aW9uT3JkZXIsIGZ1bGxPbmx5IH0gPSB7fSkge1xuICAgICAgICBsZXQgdHJpZU5vZGUgPSB0aGlzLl90cmllO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGxldCBmb3VuZEZ1bGwgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZU5hbWVQYXJ0IG9mIG1vZHVsZU5hbWUuc3BsaXQoZXhwb3J0cy5Nb2R1bGVOYW1lU2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0cmllTm9kZS5jaGlsZHJlbi5nZXQobW9kdWxlTmFtZVBhcnQpO1xuICAgICAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgIGZvdW5kRnVsbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmdWxsT25seSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5uZXh0Tm9kZS5ob29rcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmllTm9kZSA9IG5leHROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmdWxsT25seSAmJiBmb3VuZEZ1bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi50cmllTm9kZS5ob29rcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW3Jlc3VsdHNbMF0uaG9va107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1haW50YWluSW5zZXJ0aW9uT3JkZXIpIHtcbiAgICAgICAgICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4gYS5pbnNlcnRlZElkIC0gYi5pbnNlcnRlZElkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHsgaG9vayB9KSA9PiBob29rKTtcbiAgICB9XG59XG5leHBvcnRzLk1vZHVsZU5hbWVUcmllID0gTW9kdWxlTmFtZVRyaWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Nb2R1bGVOYW1lVHJpZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uID0gdm9pZCAwO1xuY29uc3QgcmVxdWlyZV9pbl90aGVfbWlkZGxlXzEgPSByZXF1aXJlKFwicmVxdWlyZS1pbi10aGUtbWlkZGxlXCIpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgTW9kdWxlTmFtZVRyaWVfMSA9IHJlcXVpcmUoXCIuL01vZHVsZU5hbWVUcmllXCIpO1xuLyoqXG4gKiBXaGV0aGVyIE1vY2hhIGlzIHJ1bm5pbmcgaW4gdGhpcyBwcm9jZXNzXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vQW5kcmVhc1BpenNhL2RldGVjdC1tb2NoYVxuICpcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc01vY2hhID0gW1xuICAgICdhZnRlckVhY2gnLFxuICAgICdhZnRlcicsXG4gICAgJ2JlZm9yZUVhY2gnLFxuICAgICdiZWZvcmUnLFxuICAgICdkZXNjcmliZScsXG4gICAgJ2l0Jyxcbl0uZXZlcnkoZm4gPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVFM3MDUzOiBFbGVtZW50IGltcGxpY2l0bHkgaGFzIGFuICdhbnknIHR5cGVcbiAgICByZXR1cm4gdHlwZW9mIGdsb2JhbFtmbl0gPT09ICdmdW5jdGlvbic7XG59KTtcbi8qKlxuICogU2luZ2xldG9uIGNsYXNzIGZvciBgcmVxdWlyZS1pbi10aGUtbWlkZGxlYFxuICogQWxsb3dzIGluc3RydW1lbnRhdGlvbiBwbHVnaW5zIHRvIHBhdGNoIG1vZHVsZXMgd2l0aCBvbmx5IGEgc2luZ2xlIGByZXF1aXJlYCBwYXRjaFxuICogV0FSTklORzogQmVjYXVzZSB0aGlzIGNsYXNzIHdpbGwgY3JlYXRlIGl0cyBvd24gYHJlcXVpcmUtaW4tdGhlLW1pZGRsZWAgKFJJVE0pIGluc3RhbmNlLFxuICogd2Ugc2hvdWxkIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbmV3IGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLlxuICogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIGBAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25gIChlLmcuIG11bHRpcGxlIHZlcnNpb25zKSBpbiBhIHNpbmdsZSBwcm9jZXNzXG4gKiB3aWxsIHJlc3VsdCBpbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgUklUTSwgd2hpY2ggd2lsbCBoYXZlIGFuIGltcGFjdFxuICogb24gdGhlIHBlcmZvcm1hbmNlIG9mIGluc3RydW1lbnRhdGlvbiBob29rcyBiZWluZyBhcHBsaWVkLlxuICovXG5jbGFzcyBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24ge1xuICAgIF9tb2R1bGVOYW1lVHJpZSA9IG5ldyBNb2R1bGVOYW1lVHJpZV8xLk1vZHVsZU5hbWVUcmllKCk7XG4gICAgc3RhdGljIF9pbnN0YW5jZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgICBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgbmV3IHJlcXVpcmVfaW5fdGhlX21pZGRsZV8xLkhvb2soXG4gICAgICAgIC8vIEludGVyY2VwdCBhbGwgYHJlcXVpcmVgIGNhbGxzOyB3ZSB3aWxsIGZpbHRlciB0aGUgbWF0Y2hpbmcgb25lcyBiZWxvd1xuICAgICAgICBudWxsLCB7IGludGVybmFsczogdHJ1ZSB9LCAoZXhwb3J0cywgbmFtZSwgYmFzZWRpcikgPT4ge1xuICAgICAgICAgICAgLy8gRm9yIGludGVybmFsIGZpbGVzIG9uIFdpbmRvd3MsIGBuYW1lYCB3aWxsIHVzZSBiYWNrc2xhc2ggYXMgdGhlIHBhdGggc2VwYXJhdG9yXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkTW9kdWxlTmFtZSA9IG5vcm1hbGl6ZVBhdGhTZXBhcmF0b3JzKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuX21vZHVsZU5hbWVUcmllLnNlYXJjaChub3JtYWxpemVkTW9kdWxlTmFtZSwge1xuICAgICAgICAgICAgICAgIG1haW50YWluSW5zZXJ0aW9uT3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gRm9yIGNvcmUgbW9kdWxlcyAoZS5nLiBgZnNgKSwgZG8gbm90IG1hdGNoIG9uIHN1Yi1wYXRocyAoZS5nLiBgZnMvcHJvbWlzZXMnKS5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIGByZXF1aXJlLWluLXRoZS1taWRkbGVgLlxuICAgICAgICAgICAgICAgIC8vIGBiYXNlZGlyYCBpcyBhbHdheXMgYHVuZGVmaW5lZGAgZm9yIGNvcmUgbW9kdWxlcy5cbiAgICAgICAgICAgICAgICBmdWxsT25seTogYmFzZWRpciA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgb25SZXF1aXJlIH0gb2YgbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBvblJlcXVpcmUoZXhwb3J0cywgbmFtZSwgYmFzZWRpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGEgaG9vayB3aXRoIGByZXF1aXJlLWluLXRoZS1taWRkbGVgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSBNb2R1bGUgbmFtZVxuICAgICAqIEBwYXJhbSB7T25SZXF1aXJlRm59IG9uUmVxdWlyZSBIb29rIGZ1bmN0aW9uXG4gICAgICogQHJldHVybnMge0hvb2tlZH0gUmVnaXN0ZXJlZCBob29rXG4gICAgICovXG4gICAgcmVnaXN0ZXIobW9kdWxlTmFtZSwgb25SZXF1aXJlKSB7XG4gICAgICAgIGNvbnN0IGhvb2tlZCA9IHsgbW9kdWxlTmFtZSwgb25SZXF1aXJlIH07XG4gICAgICAgIHRoaXMuX21vZHVsZU5hbWVUcmllLmluc2VydChob29rZWQpO1xuICAgICAgICByZXR1cm4gaG9va2VkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b25gIHNpbmdsZXRvblxuICAgICAqXG4gICAgICogQHJldHVybnMge1JlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbn0gU2luZ2xldG9uIG9mIGBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b25gXG4gICAgICovXG4gICAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgICAgICAvLyBNb2NoYSBydW5zIGFsbCB0ZXN0IHN1aXRlcyBpbiB0aGUgc2FtZSBwcm9jZXNzXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGVzdCBzdWl0ZXMgZnJvbSBzaGFyaW5nIGEgc2luZ2xldG9uXG4gICAgICAgIGlmIChpc01vY2hhKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24oKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9pbnN0YW5jZSA9XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA/PyBuZXcgUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uID0gUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uO1xuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHBhdGggc2VwYXJhdG9ycyB0byBmb3J3YXJkIHNsYXNoIGluIGEgbW9kdWxlIG5hbWUgb3IgcGF0aFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lT3JQYXRoIE1vZHVsZSBuYW1lIG9yIHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE5vcm1hbGl6ZWQgbW9kdWxlIG5hbWUgb3IgcGF0aFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoU2VwYXJhdG9ycyhtb2R1bGVOYW1lT3JQYXRoKSB7XG4gICAgcmV0dXJuIHBhdGguc2VwICE9PSBNb2R1bGVOYW1lVHJpZV8xLk1vZHVsZU5hbWVTZXBhcmF0b3JcbiAgICAgICAgPyBtb2R1bGVOYW1lT3JQYXRoLnNwbGl0KHBhdGguc2VwKS5qb2luKE1vZHVsZU5hbWVUcmllXzEuTW9kdWxlTmFtZVNlcGFyYXRvcilcbiAgICAgICAgOiBtb2R1bGVOYW1lT3JQYXRoO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uLmpzLm1hcCIsCiAgICAiLy8gVW5sZXNzIGV4cGxpY2l0bHkgc3RhdGVkIG90aGVyd2lzZSBhbGwgZmlsZXMgaW4gdGhpcyByZXBvc2l0b3J5IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIDIuMCBMaWNlbnNlLlxuLy9cbi8vIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgRGF0YWRvZyAoaHR0cHM6Ly93d3cuZGF0YWRvZ2hxLmNvbS8pLiBDb3B5cmlnaHQgMjAyMSBEYXRhZG9nLCBJbmMuXG5cbmNvbnN0IGltcG9ydEhvb2tzID0gW10gLy8gVE9ETyBzaG91bGQgdGhpcyBiZSBhIFNldD9cbmNvbnN0IHNldHRlcnMgPSBuZXcgV2Vha01hcCgpXG5jb25zdCBnZXR0ZXJzID0gbmV3IFdlYWtNYXAoKVxuY29uc3Qgc3BlY2lmaWVycyA9IG5ldyBNYXAoKVxuY29uc3QgdG9Ib29rID0gW11cblxuY29uc3QgcHJveHlIYW5kbGVyID0ge1xuICBzZXQgKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc2V0dGVycy5nZXQodGFyZ2V0KVtuYW1lXSh2YWx1ZSlcbiAgfSxcblxuICBnZXQgKHRhcmdldCwgbmFtZSkge1xuICAgIGlmIChuYW1lID09PSBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiAgICAgIHJldHVybiAnTW9kdWxlJ1xuICAgIH1cblxuICAgIGNvbnN0IGdldHRlciA9IGdldHRlcnMuZ2V0KHRhcmdldClbbmFtZV1cblxuICAgIGlmICh0eXBlb2YgZ2V0dGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyKClcbiAgICB9XG4gIH0sXG5cbiAgZGVmaW5lUHJvcGVydHkgKHRhcmdldCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHtcbiAgICBpZiAoKCEoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignR2V0dGVycy9zZXR0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBleHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRlcnMuZ2V0KHRhcmdldClbcHJvcGVydHldKGRlc2NyaXB0b3IudmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXIgKG5hbWUsIG5hbWVzcGFjZSwgc2V0LCBnZXQsIHNwZWNpZmllcikge1xuICBzcGVjaWZpZXJzLnNldChuYW1lLCBzcGVjaWZpZXIpXG4gIHNldHRlcnMuc2V0KG5hbWVzcGFjZSwgc2V0KVxuICBnZXR0ZXJzLnNldChuYW1lc3BhY2UsIGdldClcbiAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkobmFtZXNwYWNlLCBwcm94eUhhbmRsZXIpXG4gIGltcG9ydEhvb2tzLmZvckVhY2goaG9vayA9PiBob29rKG5hbWUsIHByb3h5KSlcbiAgdG9Ib29rLnB1c2goW25hbWUsIHByb3h5XSlcbn1cblxubGV0IGV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzID0gZmFsc2VcblxuZnVuY3Rpb24gZ2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMgKCkge1xuICByZXR1cm4gZXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHNcbn1cblxuZnVuY3Rpb24gc2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMgKHZhbHVlKSB7XG4gIGV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzID0gdmFsdWVcbn1cblxuZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyXG5leHBvcnRzLmltcG9ydEhvb2tzID0gaW1wb3J0SG9va3NcbmV4cG9ydHMuc3BlY2lmaWVycyA9IHNwZWNpZmllcnNcbmV4cG9ydHMudG9Ib29rID0gdG9Ib29rXG5leHBvcnRzLmdldEV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzID0gZ2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHNcbmV4cG9ydHMuc2V0RXhwZXJpbWVudGFsUGF0Y2hJbnRlcm5hbHMgPSBzZXRFeHBlcmltZW50YWxQYXRjaEludGVybmFsc1xuIiwKICAgICIvLyBVbmxlc3MgZXhwbGljaXRseSBzdGF0ZWQgb3RoZXJ3aXNlIGFsbCBmaWxlcyBpbiB0aGlzIHJlcG9zaXRvcnkgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG4vL1xuLy8gVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBhdCBEYXRhZG9nIChodHRwczovL3d3dy5kYXRhZG9naHEuY29tLykuIENvcHlyaWdodCAyMDIxIERhdGFkb2csIEluYy5cblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCdtb2R1bGUtZGV0YWlscy1mcm9tLXBhdGgnKVxuY29uc3QgeyBmaWxlVVJMVG9QYXRoIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG5jb25zdCB7XG4gIGltcG9ydEhvb2tzLFxuICBzcGVjaWZpZXJzLFxuICB0b0hvb2ssXG4gIGdldEV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzXG59ID0gcmVxdWlyZSgnLi9saWIvcmVnaXN0ZXInKVxuXG5mdW5jdGlvbiBhZGRIb29rIChob29rKSB7XG4gIGltcG9ydEhvb2tzLnB1c2goaG9vaylcbiAgdG9Ib29rLmZvckVhY2goKFtuYW1lLCBuYW1lc3BhY2VdKSA9PiBob29rKG5hbWUsIG5hbWVzcGFjZSkpXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhvb2sgKGhvb2spIHtcbiAgY29uc3QgaW5kZXggPSBpbXBvcnRIb29rcy5pbmRleE9mKGhvb2spXG4gIGlmIChpbmRleCA+IC0xKSB7XG4gICAgaW1wb3J0SG9va3Muc3BsaWNlKGluZGV4LCAxKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rRm4gKGhvb2tGbiwgbmFtZXNwYWNlLCBuYW1lLCBiYXNlRGlyKSB7XG4gIGNvbnN0IG5ld0RlZmF1bHQgPSBob29rRm4obmFtZXNwYWNlLCBuYW1lLCBiYXNlRGlyKVxuICBpZiAobmV3RGVmYXVsdCAmJiBuZXdEZWZhdWx0ICE9PSBuYW1lc3BhY2UpIHtcbiAgICBuYW1lc3BhY2UuZGVmYXVsdCA9IG5ld0RlZmF1bHRcbiAgfVxufVxuXG5sZXQgc2VuZE1vZHVsZXNUb0xvYWRlclxuXG4vKipcbiAqIEVYUEVSSU1FTlRBTFxuICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSBpbiBtaW5vciB2ZXJzaW9ucy5cbiAqICoqTk9URSoqIFRoaXMgZmVhdHVyZSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUge2ludGVybmFsczogdHJ1ZX0gSG9vayBvcHRpb24uXG4gKlxuICogQ3JlYXRlcyBhIG1lc3NhZ2UgY2hhbm5lbCB3aXRoIGEgcG9ydCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZCBob29rcyB0byB0aGVcbiAqIGxpc3Qgb2YgZXhjbHVzaXZlbHkgaW5jbHVkZWQgbW9kdWxlcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIG9ubHkgd3JhcCBtb2R1bGVzIHRoYXQgYXJlIEhvb2snZWQsIGhvd2V2ZXIgbW9kdWxlcyBuZWVkXG4gKiB0byBiZSBob29rZWQgYmVmb3JlIHRoZXkgYXJlIGltcG9ydGVkLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ21vZHVsZSdcbiAqIGltcG9ydCB7IEhvb2ssIGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCB9IGZyb20gJ2ltcG9ydC1pbi10aGUtbWlkZGxlJ1xuICpcbiAqIGNvbnN0IHsgcmVnaXN0ZXJPcHRpb25zLCB3YWl0Rm9yQWxsTWVzc2FnZXNBY2tub3dsZWRnZWQgfSA9IGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCgpXG4gKlxuICogcmVnaXN0ZXIoJ2ltcG9ydC1pbi10aGUtbWlkZGxlL2hvb2subWpzJywgaW1wb3J0Lm1ldGEudXJsLCByZWdpc3Rlck9wdGlvbnMpXG4gKlxuICogSG9vayhbJ2ZzJ10sIChleHBvcnRlZCwgbmFtZSwgYmFzZURpcikgPT4ge1xuICogICAvLyBJbnN0cnVtZW50IHRoZSBmcyBtb2R1bGVcbiAqIH0pXG4gKlxuICogLy8gRW5zdXJlIHRoYXQgdGhlIGxvYWRlciBoYXMgYWNrbm93bGVkZ2VkIGFsbCB0aGUgbW9kdWxlc1xuICogLy8gYmVmb3JlIHdlIGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZVxuICogYXdhaXQgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkKClcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWwgKCkge1xuICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKClcbiAgbGV0IHBlbmRpbmdBY2tDb3VudCA9IDBcbiAgbGV0IHJlc29sdmVGblxuXG4gIHNlbmRNb2R1bGVzVG9Mb2FkZXIgPSAobW9kdWxlcykgPT4ge1xuICAgIHBlbmRpbmdBY2tDb3VudCsrXG4gICAgcG9ydDEucG9zdE1lc3NhZ2UobW9kdWxlcylcbiAgfVxuXG4gIHBvcnQxLm9uKCdtZXNzYWdlJywgKCkgPT4ge1xuICAgIHBlbmRpbmdBY2tDb3VudC0tXG5cbiAgICBpZiAocmVzb2x2ZUZuICYmIHBlbmRpbmdBY2tDb3VudCA8PSAwKSB7XG4gICAgICByZXNvbHZlRm4oKVxuICAgIH1cbiAgfSkudW5yZWYoKVxuXG4gIGZ1bmN0aW9uIHdhaXRGb3JBbGxNZXNzYWdlc0Fja25vd2xlZGdlZCAoKSB7XG4gICAgLy8gVGhpcyB0aW1lciBpcyB0byBwcmV2ZW50IHRoZSBwcm9jZXNzIGZyb20gZXhpdGluZyB3aXRoIGNvZGUgMTM6XG4gICAgLy8gMTM6IFVuc2V0dGxlZCBUb3AtTGV2ZWwgQXdhaXQuXG4gICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IH0sIDEwMDApXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlRm4gPSByZXNvbHZlXG4gICAgfSkudGhlbigoKSA9PiB7IGNsZWFySW50ZXJ2YWwodGltZXIpIH0pXG5cbiAgICBpZiAocGVuZGluZ0Fja0NvdW50ID09PSAwKSB7XG4gICAgICByZXNvbHZlRm4oKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBjb25zdCBhZGRIb29rTWVzc2FnZVBvcnQgPSBwb3J0MlxuICBjb25zdCByZWdpc3Rlck9wdGlvbnMgPSB7IGRhdGE6IHsgYWRkSG9va01lc3NhZ2VQb3J0LCBpbmNsdWRlOiBbXSB9LCB0cmFuc2Zlckxpc3Q6IFthZGRIb29rTWVzc2FnZVBvcnRdIH1cblxuICByZXR1cm4geyByZWdpc3Rlck9wdGlvbnMsIGFkZEhvb2tNZXNzYWdlUG9ydCwgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkIH1cbn1cblxuZnVuY3Rpb24gSG9vayAobW9kdWxlcywgb3B0aW9ucywgaG9va0ZuKSB7XG4gIGlmICgodGhpcyBpbnN0YW5jZW9mIEhvb2spID09PSBmYWxzZSkgcmV0dXJuIG5ldyBIb29rKG1vZHVsZXMsIG9wdGlvbnMsIGhvb2tGbilcbiAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaG9va0ZuID0gbW9kdWxlc1xuICAgIG1vZHVsZXMgPSBudWxsXG4gICAgb3B0aW9ucyA9IG51bGxcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGhvb2tGbiA9IG9wdGlvbnNcbiAgICBvcHRpb25zID0gbnVsbFxuICB9XG4gIGNvbnN0IGludGVybmFscyA9IG9wdGlvbnMgPyBvcHRpb25zLmludGVybmFscyA9PT0gdHJ1ZSA6IGZhbHNlXG5cbiAgaWYgKHNlbmRNb2R1bGVzVG9Mb2FkZXIgJiYgQXJyYXkuaXNBcnJheShtb2R1bGVzKSkge1xuICAgIHNlbmRNb2R1bGVzVG9Mb2FkZXIobW9kdWxlcylcbiAgfVxuXG4gIHRoaXMuX2lpdG1Ib29rID0gKG5hbWUsIG5hbWVzcGFjZSkgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gbmFtZVxuICAgIGNvbnN0IGlzQnVpbHRpbiA9IG5hbWUuc3RhcnRzV2l0aCgnbm9kZTonKVxuICAgIGxldCBiYXNlRGlyXG5cbiAgICBpZiAoaXNCdWlsdGluKSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmFtZSA9IGZpbGVVUkxUb1BhdGgobmFtZSlcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IGRldGFpbHMgPSBwYXJzZShuYW1lKVxuICAgICAgaWYgKGRldGFpbHMpIHtcbiAgICAgICAgbmFtZSA9IGRldGFpbHMubmFtZVxuICAgICAgICBiYXNlRGlyID0gZGV0YWlscy5iYXNlZGlyXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZHVsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgIGlmIChtb2R1bGVOYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgaWYgKGJhc2VEaXIpIHtcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbHMpIHtcbiAgICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyBwYXRoLnNlcCArIHBhdGgucmVsYXRpdmUoYmFzZURpciwgZmlsZVVSTFRvUGF0aChmaWxlbmFtZSkpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIWdldEV4cGVyaW1lbnRhbFBhdGNoSW50ZXJuYWxzKCkgJiYgIWJhc2VEaXIuZW5kc1dpdGgoc3BlY2lmaWVycy5nZXQoZmlsZW5hbWUpKSkgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbEhvb2tGbihob29rRm4sIG5hbWVzcGFjZSwgbmFtZSwgYmFzZURpcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSG9va0ZuKGhvb2tGbiwgbmFtZXNwYWNlLCBuYW1lLCBiYXNlRGlyKVxuICAgIH1cbiAgfVxuXG4gIGFkZEhvb2sodGhpcy5faWl0bUhvb2spXG59XG5cbkhvb2sucHJvdG90eXBlLnVuaG9vayA9IGZ1bmN0aW9uICgpIHtcbiAgcmVtb3ZlSG9vayh0aGlzLl9paXRtSG9vaylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIb29rXG5tb2R1bGUuZXhwb3J0cy5Ib29rID0gSG9va1xubW9kdWxlLmV4cG9ydHMuYWRkSG9vayA9IGFkZEhvb2tcbm1vZHVsZS5leHBvcnRzLnJlbW92ZUhvb2sgPSByZW1vdmVIb29rXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWwgPSBjcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWxcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1dyYXBwZWQgPSBleHBvcnRzLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGVBc3luYyA9IGV4cG9ydHMuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSA9IHZvaWQgMDtcbi8qKlxuICogZnVuY3Rpb24gdG8gZXhlY3V0ZSBwYXRjaGVkIGZ1bmN0aW9uIGFuZCBiZWluZyBhYmxlIHRvIGNhdGNoIGVycm9yc1xuICogQHBhcmFtIGV4ZWN1dGUgLSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZFxuICogQHBhcmFtIG9uRmluaXNoIC0gY2FsbGJhY2sgdG8gcnVuIHdoZW4gZXhlY3V0ZSBmaW5pc2hlc1xuICovXG5mdW5jdGlvbiBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlKGV4ZWN1dGUsIG9uRmluaXNoLCBwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgIGxldCBlcnJvcjtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGV4ZWN1dGUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyb3IgPSBlO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgb25GaW5pc2goZXJyb3IsIHJlc3VsdCk7XG4gICAgICAgIGlmIChlcnJvciAmJiAhcHJldmVudFRocm93aW5nRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtZmluYWxseVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZTtcbi8qKlxuICogQXN5bmMgZnVuY3Rpb24gdG8gZXhlY3V0ZSBwYXRjaGVkIGZ1bmN0aW9uIGFuZCBiZWluZyBhYmxlIHRvIGNhdGNoIGVycm9yc1xuICogQHBhcmFtIGV4ZWN1dGUgLSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZFxuICogQHBhcmFtIG9uRmluaXNoIC0gY2FsbGJhY2sgdG8gcnVuIHdoZW4gZXhlY3V0ZSBmaW5pc2hlc1xuICovXG5hc3luYyBmdW5jdGlvbiBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlQXN5bmMoZXhlY3V0ZSwgb25GaW5pc2gsIHByZXZlbnRUaHJvd2luZ0Vycm9yKSB7XG4gICAgbGV0IGVycm9yO1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvciA9IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBvbkZpbmlzaChlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgaWYgKGVycm9yICYmICFwcmV2ZW50VGhyb3dpbmdFcnJvcikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWZpbmFsbHlcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5leHBvcnRzLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGVBc3luYyA9IHNhZmVFeGVjdXRlSW5UaGVNaWRkbGVBc3luYztcbi8qKlxuICogQ2hlY2tzIGlmIGNlcnRhaW4gZnVuY3Rpb24gaGFzIGJlZW4gYWxyZWFkeSB3cmFwcGVkXG4gKiBAcGFyYW0gZnVuY1xuICovXG5mdW5jdGlvbiBpc1dyYXBwZWQoZnVuYykge1xuICAgIHJldHVybiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIGZ1bmMuX19vcmlnaW5hbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgZnVuYy5fX3Vud3JhcCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBmdW5jLl9fd3JhcHBlZCA9PT0gdHJ1ZSk7XG59XG5leHBvcnRzLmlzV3JhcHBlZCA9IGlzV3JhcHBlZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnN0cnVtZW50YXRpb25CYXNlID0gdm9pZCAwO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcInV0aWxcIik7XG5jb25zdCBzZW12ZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zZW12ZXJcIik7XG5jb25zdCBzaGltbWVyXzEgPSByZXF1aXJlKFwiLi4vLi4vc2hpbW1lclwiKTtcbmNvbnN0IGluc3RydW1lbnRhdGlvbl8xID0gcmVxdWlyZShcIi4uLy4uL2luc3RydW1lbnRhdGlvblwiKTtcbmNvbnN0IFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbl8xID0gcmVxdWlyZShcIi4vUmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uXCIpO1xuY29uc3QgaW1wb3J0X2luX3RoZV9taWRkbGVfMSA9IHJlcXVpcmUoXCJpbXBvcnQtaW4tdGhlLW1pZGRsZVwiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHJlcXVpcmVfaW5fdGhlX21pZGRsZV8xID0gcmVxdWlyZShcInJlcXVpcmUtaW4tdGhlLW1pZGRsZVwiKTtcbmNvbnN0IGZzXzEgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpO1xuLyoqXG4gKiBCYXNlIGFic3RyYWN0IGNsYXNzIGZvciBpbnN0cnVtZW50aW5nIG5vZGUgcGx1Z2luc1xuICovXG5jbGFzcyBJbnN0cnVtZW50YXRpb25CYXNlIGV4dGVuZHMgaW5zdHJ1bWVudGF0aW9uXzEuSW5zdHJ1bWVudGF0aW9uQWJzdHJhY3Qge1xuICAgIF9tb2R1bGVzO1xuICAgIF9ob29rcyA9IFtdO1xuICAgIF9yZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24gPSBSZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b25fMS5SZXF1aXJlSW5UaGVNaWRkbGVTaW5nbGV0b24uZ2V0SW5zdGFuY2UoKTtcbiAgICBfZW5hYmxlZCA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKGluc3RydW1lbnRhdGlvbk5hbWUsIGluc3RydW1lbnRhdGlvblZlcnNpb24sIGNvbmZpZykge1xuICAgICAgICBzdXBlcihpbnN0cnVtZW50YXRpb25OYW1lLCBpbnN0cnVtZW50YXRpb25WZXJzaW9uLCBjb25maWcpO1xuICAgICAgICBsZXQgbW9kdWxlcyA9IHRoaXMuaW5pdCgpO1xuICAgICAgICBpZiAobW9kdWxlcyAmJiAhQXJyYXkuaXNBcnJheShtb2R1bGVzKSkge1xuICAgICAgICAgICAgbW9kdWxlcyA9IFttb2R1bGVzXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb2R1bGVzID0gbW9kdWxlcyB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF93cmFwID0gKG1vZHVsZUV4cG9ydHMsIG5hbWUsIHdyYXBwZXIpID0+IHtcbiAgICAgICAgaWYgKCgwLCB1dGlsc18xLmlzV3JhcHBlZCkobW9kdWxlRXhwb3J0c1tuYW1lXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXV0aWxfMS50eXBlcy5pc1Byb3h5KG1vZHVsZUV4cG9ydHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIHNoaW1tZXJfMS53cmFwKShtb2R1bGVFeHBvcnRzLCBuYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWQgPSAoMCwgc2hpbW1lcl8xLndyYXApKE9iamVjdC5hc3NpZ24oe30sIG1vZHVsZUV4cG9ydHMpLCBuYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGVFeHBvcnRzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHdyYXBwZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBfdW53cmFwID0gKG1vZHVsZUV4cG9ydHMsIG5hbWUpID0+IHtcbiAgICAgICAgaWYgKCF1dGlsXzEudHlwZXMuaXNQcm94eShtb2R1bGVFeHBvcnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBzaGltbWVyXzEudW53cmFwKShtb2R1bGVFeHBvcnRzLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlRXhwb3J0cywgbmFtZSwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtb2R1bGVFeHBvcnRzW25hbWVdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9tYXNzV3JhcCA9IChtb2R1bGVFeHBvcnRzQXJyYXksIG5hbWVzLCB3cmFwcGVyKSA9PiB7XG4gICAgICAgIGlmICghbW9kdWxlRXhwb3J0c0FycmF5KSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgbW9kdWxlcyB0byBwYXRjaCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1vZHVsZUV4cG9ydHNBcnJheSkpIHtcbiAgICAgICAgICAgIG1vZHVsZUV4cG9ydHNBcnJheSA9IFttb2R1bGVFeHBvcnRzQXJyYXldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG5hbWVzICYmIEFycmF5LmlzQXJyYXkobmFtZXMpKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIGZ1bmN0aW9ucyB0byB3cmFwIG9uIG1vZHVsZXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtb2R1bGVFeHBvcnRzQXJyYXkuZm9yRWFjaChtb2R1bGVFeHBvcnRzID0+IHtcbiAgICAgICAgICAgIG5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLCBuYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIF9tYXNzVW53cmFwID0gKG1vZHVsZUV4cG9ydHNBcnJheSwgbmFtZXMpID0+IHtcbiAgICAgICAgaWYgKCFtb2R1bGVFeHBvcnRzQXJyYXkpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoJ211c3QgcHJvdmlkZSBvbmUgb3IgbW9yZSBtb2R1bGVzIHRvIHBhdGNoJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobW9kdWxlRXhwb3J0c0FycmF5KSkge1xuICAgICAgICAgICAgbW9kdWxlRXhwb3J0c0FycmF5ID0gW21vZHVsZUV4cG9ydHNBcnJheV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEobmFtZXMgJiYgQXJyYXkuaXNBcnJheShuYW1lcykpKSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKCdtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgZnVuY3Rpb25zIHRvIHdyYXAgb24gbW9kdWxlcycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1vZHVsZUV4cG9ydHNBcnJheS5mb3JFYWNoKG1vZHVsZUV4cG9ydHMgPT4ge1xuICAgICAgICAgICAgbmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cywgbmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBfd2Fybk9uUHJlbG9hZGVkTW9kdWxlcygpIHtcbiAgICAgICAgdGhpcy5fbW9kdWxlcy5mb3JFYWNoKChtb2R1bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gbW9kdWxlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZE1vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZS5jYWNoZVtyZXNvbHZlZE1vZHVsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTW9kdWxlIGlzIGFscmVhZHkgY2FjaGVkLCB3aGljaCBtZWFucyB0aGUgaW5zdHJ1bWVudGF0aW9uIGhvb2sgbWlnaHQgbm90IHdvcmtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy53YXJuKGBNb2R1bGUgJHtuYW1lfSBoYXMgYmVlbiBsb2FkZWQgYmVmb3JlICR7dGhpcy5pbnN0cnVtZW50YXRpb25OYW1lfSBzbyBpdCBtaWdodCBub3Qgd29yaywgcGxlYXNlIGluaXRpYWxpemUgaXQgYmVmb3JlIHJlcXVpcmluZyAke25hbWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIE1vZHVsZSBpc24ndCBhdmFpbGFibGUsIHdlIGNhbiBzaW1wbHkgc2tpcFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2V4dHJhY3RQYWNrYWdlVmVyc2lvbihiYXNlRGlyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gKDAsIGZzXzEucmVhZEZpbGVTeW5jKShwYXRoLmpvaW4oYmFzZURpciwgJ3BhY2thZ2UuanNvbicpLCB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IEpTT04ucGFyc2UoanNvbikudmVyc2lvbjtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgPyB2ZXJzaW9uIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybignRmFpbGVkIGV4dHJhY3RpbmcgdmVyc2lvbicsIGJhc2VEaXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIF9vblJlcXVpcmUobW9kdWxlLCBleHBvcnRzLCBuYW1lLCBiYXNlRGlyKSB7XG4gICAgICAgIGlmICghYmFzZURpcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUucGF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUubW9kdWxlRXhwb3J0cyA9IGV4cG9ydHM7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnQXBwbHlpbmcgaW5zdHJ1bWVudGF0aW9uIHBhdGNoIGZvciBub2RlanMgY29yZSBtb2R1bGUgb24gcmVxdWlyZSBob29rJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUucGF0Y2goZXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuX2V4dHJhY3RQYWNrYWdlVmVyc2lvbihiYXNlRGlyKTtcbiAgICAgICAgbW9kdWxlLm1vZHVsZVZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICBpZiAobW9kdWxlLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIC8vIG1haW4gbW9kdWxlXG4gICAgICAgICAgICBpZiAoaXNTdXBwb3J0ZWQobW9kdWxlLnN1cHBvcnRlZFZlcnNpb25zLCB2ZXJzaW9uLCBtb2R1bGUuaW5jbHVkZVByZXJlbGVhc2UpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUucGF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLm1vZHVsZUV4cG9ydHMgPSBleHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnQXBwbHlpbmcgaW5zdHJ1bWVudGF0aW9uIHBhdGNoIGZvciBtb2R1bGUgb24gcmVxdWlyZSBob29rJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbW9kdWxlLm1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZURpcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5wYXRjaChleHBvcnRzLCBtb2R1bGUubW9kdWxlVmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgICAgfVxuICAgICAgICAvLyBpbnRlcm5hbCBmaWxlXG4gICAgICAgIGNvbnN0IGZpbGVzID0gbW9kdWxlLmZpbGVzID8/IFtdO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IHBhdGgubm9ybWFsaXplKG5hbWUpO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRGaWxlSW5zdHJ1bWVudGF0aW9ucyA9IGZpbGVzXG4gICAgICAgICAgICAuZmlsdGVyKGYgPT4gZi5uYW1lID09PSBub3JtYWxpemVkTmFtZSlcbiAgICAgICAgICAgIC5maWx0ZXIoZiA9PiBpc1N1cHBvcnRlZChmLnN1cHBvcnRlZFZlcnNpb25zLCB2ZXJzaW9uLCBtb2R1bGUuaW5jbHVkZVByZXJlbGVhc2UpKTtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZEZpbGVJbnN0cnVtZW50YXRpb25zLnJlZHVjZSgocGF0Y2hlZEV4cG9ydHMsIGZpbGUpID0+IHtcbiAgICAgICAgICAgIGZpbGUubW9kdWxlRXhwb3J0cyA9IHBhdGNoZWRFeHBvcnRzO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdBcHBseWluZyBpbnN0cnVtZW50YXRpb24gcGF0Y2ggZm9yIG5vZGVqcyBtb2R1bGUgZmlsZSBvbiByZXF1aXJlIGhvb2snLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IG1vZHVsZS5tb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBiYXNlRGlyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIHNpZ25hdHVyZSBpcyBub3QgdHlwZWQsIHNvIHdlIGNhc3QgaXQgYXNzdW1pbmcgaXQncyBjb3JyZWN0XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGUucGF0Y2gocGF0Y2hlZEV4cG9ydHMsIG1vZHVsZS5tb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXRjaGVkRXhwb3J0cztcbiAgICAgICAgfSwgZXhwb3J0cyk7XG4gICAgfVxuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gYWxyZWFkeSBob29rZWQsIGp1c3QgY2FsbCBwYXRjaCBhZ2FpblxuICAgICAgICBpZiAodGhpcy5faG9va3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgdGhpcy5fbW9kdWxlcykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLnBhdGNoID09PSAnZnVuY3Rpb24nICYmIG1vZHVsZS5tb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ0FwcGx5aW5nIGluc3RydW1lbnRhdGlvbiBwYXRjaCBmb3Igbm9kZWpzIG1vZHVsZSBvbiBpbnN0cnVtZW50YXRpb24gZW5hYmxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBtb2R1bGUubW9kdWxlVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5wYXRjaChtb2R1bGUubW9kdWxlRXhwb3J0cywgbW9kdWxlLm1vZHVsZVZlcnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgbW9kdWxlLmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLm1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoJ0FwcGx5aW5nIGluc3RydW1lbnRhdGlvbiBwYXRjaCBmb3Igbm9kZWpzIG1vZHVsZSBmaWxlIG9uIGluc3RydW1lbnRhdGlvbiBlbmFibGVkJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbW9kdWxlLm1vZHVsZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wYXRjaChmaWxlLm1vZHVsZUV4cG9ydHMsIG1vZHVsZS5tb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93YXJuT25QcmVsb2FkZWRNb2R1bGVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIHRoaXMuX21vZHVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhvb2tGbiA9IChleHBvcnRzLCBuYW1lLCBiYXNlRGlyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFiYXNlRGlyICYmIHBhdGguaXNBYnNvbHV0ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRQYXRoID0gcGF0aC5wYXJzZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBhcnNlZFBhdGgubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZURpciA9IHBhcnNlZFBhdGguZGlyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb25SZXF1aXJlKG1vZHVsZSwgZXhwb3J0cywgbmFtZSwgYmFzZURpcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25SZXF1aXJlID0gKGV4cG9ydHMsIG5hbWUsIGJhc2VEaXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb25SZXF1aXJlKG1vZHVsZSwgZXhwb3J0cywgbmFtZSwgYmFzZURpcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gYFJlcXVpcmVJblRoZU1pZGRsZVNpbmdsZXRvbmAgZG9lcyBub3Qgc3VwcG9ydCBhYnNvbHV0ZSBwYXRocy5cbiAgICAgICAgICAgIC8vIEZvciBhbiBhYnNvbHV0ZSBwYXRocywgd2UgbXVzdCBjcmVhdGUgYSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiB0aGVcbiAgICAgICAgICAgIC8vIHJlcXVpcmUtaW4tdGhlLW1pZGRsZSBgSG9va2AuXG4gICAgICAgICAgICBjb25zdCBob29rID0gcGF0aC5pc0Fic29sdXRlKG1vZHVsZS5uYW1lKVxuICAgICAgICAgICAgICAgID8gbmV3IHJlcXVpcmVfaW5fdGhlX21pZGRsZV8xLkhvb2soW21vZHVsZS5uYW1lXSwgeyBpbnRlcm5hbHM6IHRydWUgfSwgb25SZXF1aXJlKVxuICAgICAgICAgICAgICAgIDogdGhpcy5fcmVxdWlyZUluVGhlTWlkZGxlU2luZ2xldG9uLnJlZ2lzdGVyKG1vZHVsZS5uYW1lLCBvblJlcXVpcmUpO1xuICAgICAgICAgICAgdGhpcy5faG9va3MucHVzaChob29rKTtcbiAgICAgICAgICAgIGNvbnN0IGVzbUhvb2sgPSBuZXcgaW1wb3J0X2luX3RoZV9taWRkbGVfMS5Ib29rKFttb2R1bGUubmFtZV0sIHsgaW50ZXJuYWxzOiBmYWxzZSB9LCBob29rRm4pO1xuICAgICAgICAgICAgdGhpcy5faG9va3MucHVzaChlc21Ib29rKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIHRoaXMuX21vZHVsZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLnVucGF0Y2ggPT09ICdmdW5jdGlvbicgJiYgbW9kdWxlLm1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdSZW1vdmluZyBpbnN0cnVtZW50YXRpb24gcGF0Y2ggZm9yIG5vZGVqcyBtb2R1bGUgb24gaW5zdHJ1bWVudGF0aW9uIGRpc2FibGVkJywge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IG1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBtb2R1bGUubW9kdWxlVmVyc2lvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBtb2R1bGUudW5wYXRjaChtb2R1bGUubW9kdWxlRXhwb3J0cywgbW9kdWxlLm1vZHVsZVZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIG1vZHVsZS5maWxlcykge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLm1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnUmVtb3ZpbmcgaW5zdHJ1bWVudGF0aW9uIHBhdGNoIGZvciBub2RlanMgbW9kdWxlIGZpbGUgb24gaW5zdHJ1bWVudGF0aW9uIGRpc2FibGVkJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246IG1vZHVsZS5tb2R1bGVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZpbGUudW5wYXRjaChmaWxlLm1vZHVsZUV4cG9ydHMsIG1vZHVsZS5tb2R1bGVWZXJzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgICB9XG59XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbkJhc2UgPSBJbnN0cnVtZW50YXRpb25CYXNlO1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWQoc3VwcG9ydGVkVmVyc2lvbnMsIHZlcnNpb24sIGluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoZSB2ZXJzaW9uLCBhY2NlcHQgdGhlIHdpbGRjYXJkIGNhc2Ugb25seVxuICAgICAgICByZXR1cm4gc3VwcG9ydGVkVmVyc2lvbnMuaW5jbHVkZXMoJyonKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cHBvcnRlZFZlcnNpb25zLnNvbWUoc3VwcG9ydGVkVmVyc2lvbiA9PiB7XG4gICAgICAgIHJldHVybiAoMCwgc2VtdmVyXzEuc2F0aXNmaWVzKSh2ZXJzaW9uLCBzdXBwb3J0ZWRWZXJzaW9uLCB7IGluY2x1ZGVQcmVyZWxlYXNlIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5zdHJ1bWVudGF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub3JtYWxpemUgPSB2b2lkIDA7XG52YXIgcGF0aF8xID0gcmVxdWlyZShcInBhdGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3JtYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhdGhfMS5ub3JtYWxpemU7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3JtYWxpemUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubm9ybWFsaXplID0gZXhwb3J0cy5JbnN0cnVtZW50YXRpb25CYXNlID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCIuL2luc3RydW1lbnRhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluc3RydW1lbnRhdGlvbkJhc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluc3RydW1lbnRhdGlvbl8xLkluc3RydW1lbnRhdGlvbkJhc2U7IH0gfSk7XG52YXIgbm9ybWFsaXplXzEgPSByZXF1aXJlKFwiLi9ub3JtYWxpemVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3JtYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vcm1hbGl6ZV8xLm5vcm1hbGl6ZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ub3JtYWxpemUgPSBleHBvcnRzLkluc3RydW1lbnRhdGlvbkJhc2UgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluc3RydW1lbnRhdGlvbkJhc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGVfMS5JbnN0cnVtZW50YXRpb25CYXNlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybWFsaXplXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEubm9ybWFsaXplOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uID0gdm9pZCAwO1xuY2xhc3MgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24ge1xuICAgIG5hbWU7XG4gICAgc3VwcG9ydGVkVmVyc2lvbnM7XG4gICAgcGF0Y2g7XG4gICAgdW5wYXRjaDtcbiAgICBmaWxlcztcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBzdXBwb3J0ZWRWZXJzaW9ucywgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwYXRjaCwgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB1bnBhdGNoLCBmaWxlcykge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnN1cHBvcnRlZFZlcnNpb25zID0gc3VwcG9ydGVkVmVyc2lvbnM7XG4gICAgICAgIHRoaXMucGF0Y2ggPSBwYXRjaDtcbiAgICAgICAgdGhpcy51bnBhdGNoID0gdW5wYXRjaDtcbiAgICAgICAgdGhpcy5maWxlcyA9IGZpbGVzIHx8IFtdO1xuICAgIH1cbn1cbmV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24gPSBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZSA9IHZvaWQgMDtcbmNvbnN0IGluZGV4XzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9pbmRleFwiKTtcbmNsYXNzIEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlIHtcbiAgICBzdXBwb3J0ZWRWZXJzaW9ucztcbiAgICBwYXRjaDtcbiAgICB1bnBhdGNoO1xuICAgIG5hbWU7XG4gICAgY29uc3RydWN0b3IobmFtZSwgc3VwcG9ydGVkVmVyc2lvbnMsIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcGF0Y2gsIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdW5wYXRjaCkge1xuICAgICAgICB0aGlzLnN1cHBvcnRlZFZlcnNpb25zID0gc3VwcG9ydGVkVmVyc2lvbnM7XG4gICAgICAgIHRoaXMucGF0Y2ggPSBwYXRjaDtcbiAgICAgICAgdGhpcy51bnBhdGNoID0gdW5wYXRjaDtcbiAgICAgICAgdGhpcy5uYW1lID0gKDAsIGluZGV4XzEubm9ybWFsaXplKShuYW1lKTtcbiAgICB9XG59XG5leHBvcnRzLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlID0gSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZUZpbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VtY29udlN0YWJpbGl0eUZyb21TdHIgPSBleHBvcnRzLlNlbWNvbnZTdGFiaWxpdHkgPSB2b2lkIDA7XG52YXIgU2VtY29udlN0YWJpbGl0eTtcbihmdW5jdGlvbiAoU2VtY29udlN0YWJpbGl0eSkge1xuICAgIC8qKiBFbWl0IG9ubHkgc3RhYmxlIHNlbWFudGljIGNvbnZlbnRpb25zLiAqL1xuICAgIFNlbWNvbnZTdGFiaWxpdHlbU2VtY29udlN0YWJpbGl0eVtcIlNUQUJMRVwiXSA9IDFdID0gXCJTVEFCTEVcIjtcbiAgICAvKiogRW1pdCBvbmx5IG9sZCBzZW1hbnRpYyBjb252ZW50aW9ucy4gKi9cbiAgICBTZW1jb252U3RhYmlsaXR5W1NlbWNvbnZTdGFiaWxpdHlbXCJPTERcIl0gPSAyXSA9IFwiT0xEXCI7XG4gICAgLyoqIEVtaXQgYm90aCBzdGFibGUgYW5kIG9sZCBzZW1hbnRpYyBjb252ZW50aW9ucy4gKi9cbiAgICBTZW1jb252U3RhYmlsaXR5W1NlbWNvbnZTdGFiaWxpdHlbXCJEVVBMSUNBVEVcIl0gPSAzXSA9IFwiRFVQTElDQVRFXCI7XG59KShTZW1jb252U3RhYmlsaXR5ID0gZXhwb3J0cy5TZW1jb252U3RhYmlsaXR5IHx8IChleHBvcnRzLlNlbWNvbnZTdGFiaWxpdHkgPSB7fSkpO1xuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNlbWNvbnYgc3RhYmlsaXR5IGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlLlxuICpcbiAqIFRoaXMgd2lsbCBwYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgKG9mdGVuXG4gKiBgcHJvY2Vzcy5lbnYuT1RFTF9TRU1DT05WX1NUQUJJTElUWV9PUFRfSU5gKSBsb29raW5nIGZvciB0aGUgYCR7bmFtZXNwYWNlfWBcbiAqIG9yIGAke25hbWVzcGFjZX0vZHVwYCB0b2tlbnMuIFRoaXMgaXMgYSBwYXR0ZXJuIGRlZmluZWQgYnkgYSBudW1iZXIgb2ZcbiAqIG5vbi1ub3JtYXRpdmUgc2VtY29udiBkb2N1bWVudHMuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAtIG5hbWVzcGFjZSAnaHR0cCc6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvbm9uLW5vcm1hdGl2ZS9odHRwLW1pZ3JhdGlvbi9cbiAqIC0gbmFtZXNwYWNlICdkYXRhYmFzZSc6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvbm9uLW5vcm1hdGl2ZS9kYXRhYmFzZS1taWdyYXRpb24vXG4gKiAtIG5hbWVzcGFjZSAnazhzJzogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9ub24tbm9ybWF0aXZlL2s4cy1taWdyYXRpb24vXG4gKlxuICogVXNhZ2U6XG4gKlxuICogIGltcG9ydCB7U2VtY29udlN0YWJpbGl0eSwgc2VtY29udlN0YWJpbGl0eUZyb21TdHJ9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XG4gKlxuICogIGV4cG9ydCBjbGFzcyBGb29JbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25CYXNlPEZvb0luc3RydW1lbnRhdGlvbkNvbmZpZz4ge1xuICogICAgcHJpdmF0ZSBfc2VtY29udlN0YWJpbGl0eTogU2VtY29udlN0YWJpbGl0eTtcbiAqICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogRm9vSW5zdHJ1bWVudGF0aW9uQ29uZmlnID0ge30pIHtcbiAqICAgICAgc3VwZXIoJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mb28nLCBWRVJTSU9OLCBjb25maWcpO1xuICpcbiAqICAgICAgLy8gV2hlbiBzdXBwb3J0aW5nIHRoZSBPVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTiBlbnZ2YXJcbiAqICAgICAgdGhpcy5fc2VtY29udlN0YWJpbGl0eSA9IHNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKFxuICogICAgICAgICdodHRwJyxcbiAqICAgICAgICBwcm9jZXNzLmVudi5PVEVMX1NFTUNPTlZfU1RBQklMSVRZX09QVF9JTlxuICogICAgICApO1xuICpcbiAqICAgICAgLy8gb3Igd2hlbiBzdXBwb3J0aW5nIGEgYHNlbWNvbnZTdGFiaWxpdHlPcHRJbmAgY29uZmlnIG9wdGlvbiAoZS5nLiBmb3JcbiAqICAgICAgLy8gdGhlIHdlYiB3aGVyZSB0aGVyZSBhcmUgbm8gZW52dmFycykuXG4gKiAgICAgIHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgPSBzZW1jb252U3RhYmlsaXR5RnJvbVN0cihcbiAqICAgICAgICAnaHR0cCcsXG4gKiAgICAgICAgY29uZmlnPy5zZW1jb252U3RhYmlsaXR5T3B0SW5cbiAqICAgICAgKTtcbiAqICAgIH1cbiAqICB9XG4gKlxuICogIC8vIFRoZW4sIHRvIGFwcGx5IHNlbWNvbnYsIHVzZSB0aGUgZm9sbG93aW5nIG9yIHNpbWlsYXI6XG4gKiAgaWYgKHRoaXMuX3NlbWNvbnZTdGFiaWxpdHkgJiBTZW1jb252U3RhYmlsaXR5Lk9MRCkge1xuICogICAgLy8gLi4uXG4gKiAgfVxuICogIGlmICh0aGlzLl9zZW1jb252U3RhYmlsaXR5ICYgU2VtY29udlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAqICAgIC8vIC4uLlxuICogIH1cbiAqXG4gKi9cbmZ1bmN0aW9uIHNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyKG5hbWVzcGFjZSwgc3RyKSB7XG4gICAgbGV0IHNlbWNvbnZTdGFiaWxpdHkgPSBTZW1jb252U3RhYmlsaXR5Lk9MRDtcbiAgICAvLyBUaGUgc2FtZSBwYXJzaW5nIG9mIGBzdHJgIGFzIGBnZXRTdHJpbmdMaXN0RnJvbUVudmAgZnJvbSB0aGUgY29yZSBwa2cuXG4gICAgY29uc3QgZW50cmllcyA9IHN0clxuICAgICAgICA/LnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKHMgPT4gcyAhPT0gJycpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcyA/PyBbXSkge1xuICAgICAgICBpZiAoZW50cnkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZXNwYWNlICsgJy9kdXAnKSB7XG4gICAgICAgICAgICAvLyBEVVBMSUNBVEUgdGFrZXMgaGlnaGVzdCBwcmVjZWRlbmNlLlxuICAgICAgICAgICAgc2VtY29udlN0YWJpbGl0eSA9IFNlbWNvbnZTdGFiaWxpdHkuRFVQTElDQVRFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZW50cnkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBzZW1jb252U3RhYmlsaXR5ID0gU2VtY29udlN0YWJpbGl0eS5TVEFCTEU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlbWNvbnZTdGFiaWxpdHk7XG59XG5leHBvcnRzLnNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyID0gc2VtY29udlN0YWJpbGl0eUZyb21TdHI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1jb252U3RhYmlsaXR5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZW1jb252U3RhYmlsaXR5RnJvbVN0ciA9IGV4cG9ydHMuU2VtY29udlN0YWJpbGl0eSA9IGV4cG9ydHMuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jID0gZXhwb3J0cy5zYWZlRXhlY3V0ZUluVGhlTWlkZGxlID0gZXhwb3J0cy5pc1dyYXBwZWQgPSBleHBvcnRzLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlID0gZXhwb3J0cy5JbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiA9IGV4cG9ydHMuSW5zdHJ1bWVudGF0aW9uQmFzZSA9IGV4cG9ydHMucmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zID0gdm9pZCAwO1xudmFyIGF1dG9Mb2FkZXJfMSA9IHJlcXVpcmUoXCIuL2F1dG9Mb2FkZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWdpc3Rlckluc3RydW1lbnRhdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dG9Mb2FkZXJfMS5yZWdpc3Rlckluc3RydW1lbnRhdGlvbnM7IH0gfSk7XG52YXIgaW5kZXhfMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL2luZGV4XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5zdHJ1bWVudGF0aW9uQmFzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5kZXhfMS5JbnN0cnVtZW50YXRpb25CYXNlOyB9IH0pO1xudmFyIGluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbl8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uOyB9IH0pO1xudmFyIGluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlXzEgPSByZXF1aXJlKFwiLi9pbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRmlsZV8xLkluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVGaWxlOyB9IH0pO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzV3JhcHBlZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbHNfMS5pc1dyYXBwZWQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYWZlRXhlY3V0ZUluVGhlTWlkZGxlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dGlsc18xLnNhZmVFeGVjdXRlSW5UaGVNaWRkbGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzYWZlRXhlY3V0ZUluVGhlTWlkZGxlQXN5bmNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHV0aWxzXzEuc2FmZUV4ZWN1dGVJblRoZU1pZGRsZUFzeW5jOyB9IH0pO1xudmFyIHNlbWNvbnZTdGFiaWxpdHlfMSA9IHJlcXVpcmUoXCIuL3NlbWNvbnZTdGFiaWxpdHlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTZW1jb252U3RhYmlsaXR5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZW1jb252U3RhYmlsaXR5XzEuU2VtY29udlN0YWJpbGl0eTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlbWNvbnZTdGFiaWxpdHlGcm9tU3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZW1jb252U3RhYmlsaXR5XzEuc2VtY29udlN0YWJpbGl0eUZyb21TdHI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUEV4cG9ydGVyQmFzZSA9IHZvaWQgMDtcbmNsYXNzIE9UTFBFeHBvcnRlckJhc2Uge1xuICAgIF9kZWxlZ2F0ZTtcbiAgICBjb25zdHJ1Y3RvcihfZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBfZGVsZWdhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydCBpdGVtcy5cbiAgICAgKiBAcGFyYW0gaXRlbXNcbiAgICAgKiBAcGFyYW0gcmVzdWx0Q2FsbGJhY2tcbiAgICAgKi9cbiAgICBleHBvcnQoaXRlbXMsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlLmV4cG9ydChpdGVtcywgcmVzdWx0Q2FsbGJhY2spO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuZm9yY2VGbHVzaCgpO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLnNodXRkb3duKCk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQRXhwb3J0ZXJCYXNlID0gT1RMUEV4cG9ydGVyQmFzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBFeHBvcnRlckJhc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBFeHBvcnRlckVycm9yID0gdm9pZCAwO1xuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGhhbmRsaW5nIGVycm9yXG4gKi9cbmNsYXNzIE9UTFBFeHBvcnRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvZGU7XG4gICAgbmFtZSA9ICdPVExQRXhwb3J0ZXJFcnJvcic7XG4gICAgZGF0YTtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUEV4cG9ydGVyRXJyb3IgPSBPVExQRXhwb3J0ZXJFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBleHBvcnRzLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBleHBvcnRzLndyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbiA9IGV4cG9ydHMudmFsaWRhdGVUaW1lb3V0TWlsbGlzID0gdm9pZCAwO1xuZnVuY3Rpb24gdmFsaWRhdGVUaW1lb3V0TWlsbGlzKHRpbWVvdXRNaWxsaXMpIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNaWxsaXMpICYmIHRpbWVvdXRNaWxsaXMgPiAwKSB7XG4gICAgICAgIHJldHVybiB0aW1lb3V0TWlsbGlzO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZ3VyYXRpb246IHRpbWVvdXRNaWxsaXMgaXMgaW52YWxpZCwgZXhwZWN0ZWQgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIChhY3R1YWw6ICcke3RpbWVvdXRNaWxsaXN9JylgKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVUaW1lb3V0TWlsbGlzID0gdmFsaWRhdGVUaW1lb3V0TWlsbGlzO1xuZnVuY3Rpb24gd3JhcFN0YXRpY0hlYWRlcnNJbkZ1bmN0aW9uKGhlYWRlcnMpIHtcbiAgICBpZiAoaGVhZGVycyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBoZWFkZXJzO1xufVxuZXhwb3J0cy53cmFwU3RhdGljSGVhZGVyc0luRnVuY3Rpb24gPSB3cmFwU3RhdGljSGVhZGVyc0luRnVuY3Rpb247XG4vKipcbiAqIEBwYXJhbSB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uICBDb25maWd1cmF0aW9uIG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgaW4gY29kZS5cbiAqIEBwYXJhbSBmYWxsYmFja0NvbmZpZ3VyYXRpb24gRmFsbGJhY2sgdG8gdXNlIHdoZW4gdGhlIHtAbGluayB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9ufSBkb2VzIG5vdCBzcGVjaWZ5IGFuIG9wdGlvbi5cbiAqIEBwYXJhbSBkZWZhdWx0Q29uZmlndXJhdGlvbiBUaGUgZGVmYXVsdHMgYXMgZGVmaW5lZCBieSB0aGUgZXhwb3J0ZXIgc3BlY2lmaWNhdGlvblxuICovXG5mdW5jdGlvbiBtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24sIGZhbGxiYWNrQ29uZmlndXJhdGlvbiwgZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0aW1lb3V0TWlsbGlzOiB2YWxpZGF0ZVRpbWVvdXRNaWxsaXModXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi50aW1lb3V0TWlsbGlzID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24udGltZW91dE1pbGxpcyA/P1xuICAgICAgICAgICAgZGVmYXVsdENvbmZpZ3VyYXRpb24udGltZW91dE1pbGxpcyksXG4gICAgICAgIGNvbmN1cnJlbmN5TGltaXQ6IHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24uY29uY3VycmVuY3lMaW1pdCA/P1xuICAgICAgICAgICAgZmFsbGJhY2tDb25maWd1cmF0aW9uLmNvbmN1cnJlbmN5TGltaXQgPz9cbiAgICAgICAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbmN1cnJlbmN5TGltaXQsXG4gICAgICAgIGNvbXByZXNzaW9uOiB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLmNvbXByZXNzaW9uID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24uY29tcHJlc3Npb24gPz9cbiAgICAgICAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLmNvbXByZXNzaW9uLFxuICAgIH07XG59XG5leHBvcnRzLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzO1xuZnVuY3Rpb24gZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVvdXRNaWxsaXM6IDEwMDAwLFxuICAgICAgICBjb25jdXJyZW5jeUxpbWl0OiAzMCxcbiAgICAgICAgY29tcHJlc3Npb246ICdub25lJyxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBnZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZWQtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG0gPSB2b2lkIDA7XG52YXIgQ29tcHJlc3Npb25BbGdvcml0aG07XG4oZnVuY3Rpb24gKENvbXByZXNzaW9uQWxnb3JpdGhtKSB7XG4gICAgQ29tcHJlc3Npb25BbGdvcml0aG1bXCJOT05FXCJdID0gXCJub25lXCI7XG4gICAgQ29tcHJlc3Npb25BbGdvcml0aG1bXCJHWklQXCJdID0gXCJnemlwXCI7XG59KShDb21wcmVzc2lvbkFsZ29yaXRobSA9IGV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG0gfHwgKGV4cG9ydHMuQ29tcHJlc3Npb25BbGdvcml0aG0gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGVnYWN5LW5vZGUtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIgPSB2b2lkIDA7XG5jbGFzcyBCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlciB7XG4gICAgX2NvbmN1cnJlbmN5TGltaXQ7XG4gICAgX3NlbmRpbmdQcm9taXNlcyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeUxpbWl0IG1heGltdW0gcHJvbWlzZXMgYWxsb3dlZCBpbiBhIHF1ZXVlIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uY3VycmVuY3lMaW1pdCkge1xuICAgICAgICB0aGlzLl9jb25jdXJyZW5jeUxpbWl0ID0gY29uY3VycmVuY3lMaW1pdDtcbiAgICB9XG4gICAgcHVzaFByb21pc2UocHJvbWlzZSkge1xuICAgICAgICBpZiAodGhpcy5oYXNSZWFjaGVkTGltaXQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25jdXJyZW5jeSBMaW1pdCByZWFjaGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VuZGluZ1Byb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIGNvbnN0IHBvcFByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbmRpbmdQcm9taXNlcy5pbmRleE9mKHByb21pc2UpO1xuICAgICAgICAgICAgdm9pZCB0aGlzLl9zZW5kaW5nUHJvbWlzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvbWlzZS50aGVuKHBvcFByb21pc2UsIHBvcFByb21pc2UpO1xuICAgIH1cbiAgICBoYXNSZWFjaGVkTGltaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kaW5nUHJvbWlzZXMubGVuZ3RoID49IHRoaXMuX2NvbmN1cnJlbmN5TGltaXQ7XG4gICAgfVxuICAgIGFzeW5jIGF3YWl0QWxsKCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zZW5kaW5nUHJvbWlzZXMpO1xuICAgIH1cbn1cbi8qKlxuICogUHJvbWlzZSBxdWV1ZSBmb3Iga2VlcGluZyB0cmFjayBvZiBleHBvcnQgcHJvbWlzZXMuIEZpbmlzaGVkIHByb21pc2VzIHdpbGwgYmUgYXV0by1kZXF1ZXVlZC5cbiAqIEFsbG93cyBmb3IgYXdhaXRpbmcgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIob3B0aW9ucy5jb25jdXJyZW5jeUxpbWl0KTtcbn1cbmV4cG9ydHMuY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIgPSBjcmVhdGVCb3VuZGVkUXVldWVFeHBvcnRQcm9taXNlSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvdW5kZWQtcXVldWUtZXhwb3J0LXByb21pc2UtaGFuZGxlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXIgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZnVuY3Rpb24gaXNQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXNwb25zZSwgJ3BhcnRpYWxTdWNjZXNzJyk7XG59XG4vKipcbiAqIERlZmF1bHQgcmVzcG9uc2UgaGFuZGxlciB0aGF0IGxvZ3MgYSBwYXJ0aWFsIHN1Y2Nlc3MgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlSGFuZGxlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBoYW5kbGVSZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gUGFydGlhbCBzdWNjZXNzIE1VU1QgbmV2ZXIgYmUgYW4gZW1wdHkgb2JqZWN0IGFjY29yZGluZyB0aGUgc3BlY2lmaWNhdGlvblxuICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL290bHAvI3BhcnRpYWwtc3VjY2Vzc1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAhaXNQYXJ0aWFsU3VjY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSB8fFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnBhcnRpYWxTdWNjZXNzID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5wYXJ0aWFsU3VjY2VzcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdSZWNlaXZlZCBQYXJ0aWFsIFN1Y2Nlc3MgcmVzcG9uc2U6JywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UucGFydGlhbFN1Y2Nlc3MpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXIgPSBjcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dnaW5nLXJlc3BvbnNlLWhhbmRsZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZSA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgbG9nZ2luZ19yZXNwb25zZV9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9sb2dnaW5nLXJlc3BvbnNlLWhhbmRsZXJcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jbGFzcyBPVExQRXhwb3J0RGVsZWdhdGUge1xuICAgIF90cmFuc3BvcnQ7XG4gICAgX3NlcmlhbGl6ZXI7XG4gICAgX3Jlc3BvbnNlSGFuZGxlcjtcbiAgICBfcHJvbWlzZVF1ZXVlO1xuICAgIF90aW1lb3V0O1xuICAgIF9kaWFnTG9nZ2VyO1xuICAgIGNvbnN0cnVjdG9yKF90cmFuc3BvcnQsIF9zZXJpYWxpemVyLCBfcmVzcG9uc2VIYW5kbGVyLCBfcHJvbWlzZVF1ZXVlLCBfdGltZW91dCkge1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBfdHJhbnNwb3J0O1xuICAgICAgICB0aGlzLl9zZXJpYWxpemVyID0gX3NlcmlhbGl6ZXI7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlciA9IF9yZXNwb25zZUhhbmRsZXI7XG4gICAgICAgIHRoaXMuX3Byb21pc2VRdWV1ZSA9IF9wcm9taXNlUXVldWU7XG4gICAgICAgIHRoaXMuX3RpbWVvdXQgPSBfdGltZW91dDtcbiAgICAgICAgdGhpcy5fZGlhZ0xvZ2dlciA9IGFwaV8xLmRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogJ09UTFBFeHBvcnREZWxlZ2F0ZScsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleHBvcnQoaW50ZXJuYWxSZXByZXNlbnRhdGlvbiwgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fZGlhZ0xvZ2dlci5kZWJ1ZygnaXRlbXMgdG8gYmUgc2VudCcsIGludGVybmFsUmVwcmVzZW50YXRpb24pO1xuICAgICAgICAvLyBkb24ndCBkbyBhbnkgd29yayBpZiB0b28gbWFueSBleHBvcnRzIGFyZSBpbiBwcm9ncmVzcy5cbiAgICAgICAgaWYgKHRoaXMuX3Byb21pc2VRdWV1ZS5oYXNSZWFjaGVkTGltaXQoKSkge1xuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdDb25jdXJyZW50IGV4cG9ydCBsaW1pdCByZWFjaGVkJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXJpYWxpemVkUmVxdWVzdCA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdChpbnRlcm5hbFJlcHJlc2VudGF0aW9uKTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRSZXF1ZXN0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignTm90aGluZyB0byBzZW5kJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcm9taXNlUXVldWUucHVzaFByb21pc2UodGhpcy5fdHJhbnNwb3J0LnNlbmQoc2VyaWFsaXplZFJlcXVlc3QsIHRoaXMuX3RpbWVvdXQpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VIYW5kbGVyLmhhbmRsZVJlc3BvbnNlKHRoaXMuX3NlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWdMb2dnZXIud2FybignRXhwb3J0IHN1Y2NlZWRlZCBidXQgY291bGQgbm90IGRlc2VyaWFsaXplIHJlc3BvbnNlIC0gaXMgdGhlIHJlc3BvbnNlIHNwZWNpZmljYXRpb24gY29tcGxpYW50PycsIGUsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE5vIG1hdHRlciB0aGUgcmVzcG9uc2UsIHdlIGNhbiBjb25zaWRlciB0aGUgZXhwb3J0IHN0aWxsIHN1Y2Nlc3NmdWwuXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2ZhaWx1cmUnICYmIHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiByZXNwb25zZS5lcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09ICdyZXRyeWFibGUnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgdHlwZXNfMS5PVExQRXhwb3J0ZXJFcnJvcignRXhwb3J0IGZhaWxlZCB3aXRoIHJldHJ5YWJsZSBzdGF0dXMnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IHR5cGVzXzEuT1RMUEV4cG9ydGVyRXJyb3IoJ0V4cG9ydCBmYWlsZWQgd2l0aCB1bmtub3duIGVycm9yJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHJlYXNvbiA9PiByZXN1bHRDYWxsYmFjayh7XG4gICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICBlcnJvcjogcmVhc29uLFxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZVF1ZXVlLmF3YWl0QWxsKCk7XG4gICAgfVxuICAgIGFzeW5jIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLl9kaWFnTG9nZ2VyLmRlYnVnKCdzaHV0ZG93biBzdGFydGVkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQuc2h1dGRvd24oKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBnZW5lcmljIGRlbGVnYXRlIGZvciBPVExQIGV4cG9ydHMgd2hpY2ggb25seSBjb250YWlucyBwYXJ0cyBvZiB0aGUgT1RMUCBleHBvcnQgdGhhdCBhcmUgc2hhcmVkIGFjcm9zcyBhbGxcbiAqIHNpZ25hbHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU90bHBFeHBvcnREZWxlZ2F0ZShjb21wb25lbnRzLCBzZXR0aW5ncykge1xuICAgIHJldHVybiBuZXcgT1RMUEV4cG9ydERlbGVnYXRlKGNvbXBvbmVudHMudHJhbnNwb3J0LCBjb21wb25lbnRzLnNlcmlhbGl6ZXIsICgwLCBsb2dnaW5nX3Jlc3BvbnNlX2hhbmRsZXJfMS5jcmVhdGVMb2dnaW5nUGFydGlhbFN1Y2Nlc3NSZXNwb25zZUhhbmRsZXIpKCksIGNvbXBvbmVudHMucHJvbWlzZUhhbmRsZXIsIHNldHRpbmdzLnRpbWVvdXQpO1xufVxuZXhwb3J0cy5jcmVhdGVPdGxwRXhwb3J0RGVsZWdhdGUgPSBjcmVhdGVPdGxwRXhwb3J0RGVsZWdhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLWV4cG9ydC1kZWxlZ2F0ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZSA9IHZvaWQgMDtcbmNvbnN0IGJvdW5kZWRfcXVldWVfZXhwb3J0X3Byb21pc2VfaGFuZGxlcl8xID0gcmVxdWlyZShcIi4vYm91bmRlZC1xdWV1ZS1leHBvcnQtcHJvbWlzZS1oYW5kbGVyXCIpO1xuY29uc3Qgb3RscF9leHBvcnRfZGVsZWdhdGVfMSA9IHJlcXVpcmUoXCIuL290bHAtZXhwb3J0LWRlbGVnYXRlXCIpO1xuZnVuY3Rpb24gY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZShvcHRpb25zLCBzZXJpYWxpemVyLCB0cmFuc3BvcnQpIHtcbiAgICByZXR1cm4gKDAsIG90bHBfZXhwb3J0X2RlbGVnYXRlXzEuY3JlYXRlT3RscEV4cG9ydERlbGVnYXRlKSh7XG4gICAgICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0LFxuICAgICAgICBzZXJpYWxpemVyLFxuICAgICAgICBwcm9taXNlSGFuZGxlcjogKDAsIGJvdW5kZWRfcXVldWVfZXhwb3J0X3Byb21pc2VfaGFuZGxlcl8xLmNyZWF0ZUJvdW5kZWRRdWV1ZUV4cG9ydFByb21pc2VIYW5kbGVyKShvcHRpb25zKSxcbiAgICB9LCB7IHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dE1pbGxpcyB9KTtcbn1cbmV4cG9ydHMuY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZSA9IGNyZWF0ZU90bHBOZXR3b3JrRXhwb3J0RGVsZWdhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLW5ldHdvcmstZXhwb3J0LWRlbGVnYXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlID0gZXhwb3J0cy5Db21wcmVzc2lvbkFsZ29yaXRobSA9IGV4cG9ydHMuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzID0gZXhwb3J0cy5tZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gZXhwb3J0cy5PVExQRXhwb3J0ZXJFcnJvciA9IGV4cG9ydHMuT1RMUEV4cG9ydGVyQmFzZSA9IHZvaWQgMDtcbnZhciBPVExQRXhwb3J0ZXJCYXNlXzEgPSByZXF1aXJlKFwiLi9PVExQRXhwb3J0ZXJCYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUEV4cG9ydGVyQmFzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUEV4cG9ydGVyQmFzZV8xLk9UTFBFeHBvcnRlckJhc2U7IH0gfSk7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUEV4cG9ydGVyRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuT1RMUEV4cG9ydGVyRXJyb3I7IH0gfSk7XG52YXIgc2hhcmVkX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb24vc2hhcmVkLWNvbmZpZ3VyYXRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZXJnZU90bHBTaGFyZWRDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzaGFyZWRfY29uZmlndXJhdGlvbl8xLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlZF9jb25maWd1cmF0aW9uXzEuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkRlZmF1bHRzOyB9IH0pO1xudmFyIGxlZ2FjeV9ub2RlX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb24vbGVnYWN5LW5vZGUtY29uZmlndXJhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbXByZXNzaW9uQWxnb3JpdGhtXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBsZWdhY3lfbm9kZV9jb25maWd1cmF0aW9uXzEuQ29tcHJlc3Npb25BbGdvcml0aG07IH0gfSk7XG52YXIgb3RscF9uZXR3b3JrX2V4cG9ydF9kZWxlZ2F0ZV8xID0gcmVxdWlyZShcIi4vb3RscC1uZXR3b3JrLWV4cG9ydC1kZWxlZ2F0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU90bHBOZXR3b3JrRXhwb3J0RGVsZWdhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG90bHBfbmV0d29ya19leHBvcnRfZGVsZWdhdGVfMS5jcmVhdGVPdGxwTmV0d29ya0V4cG9ydERlbGVnYXRlOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKmVzbGludC1kaXNhYmxlIGJsb2NrLXNjb3BlZC12YXIsIGlkLWxlbmd0aCwgbm8tY29udHJvbC1yZWdleCwgbm8tbWFnaWMtbnVtYmVycywgbm8tcHJvdG90eXBlLWJ1aWx0aW5zLCBuby1yZWRlY2xhcmUsIG5vLXNoYWRvdywgbm8tdmFyLCBzb3J0LXZhcnMqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgJHByb3RvYnVmID0gcmVxdWlyZShcInByb3RvYnVmanMvbWluaW1hbFwiKTtcbi8vIENvbW1vbiBhbGlhc2VzXG52YXIgJFJlYWRlciA9ICRwcm90b2J1Zi5SZWFkZXIsICRXcml0ZXIgPSAkcHJvdG9idWYuV3JpdGVyLCAkdXRpbCA9ICRwcm90b2J1Zi51dGlsO1xuLy8gRXhwb3J0ZWQgcm9vdCBuYW1lc3BhY2VcbnZhciAkcm9vdCA9ICRwcm90b2J1Zi5yb290c1tcImRlZmF1bHRcIl0gfHwgKCRwcm90b2J1Zi5yb290c1tcImRlZmF1bHRcIl0gPSB7fSk7XG4kcm9vdC5vcGVudGVsZW1ldHJ5ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBOYW1lc3BhY2Ugb3BlbnRlbGVtZXRyeS5cbiAgICAgKiBAZXhwb3J0cyBvcGVudGVsZW1ldHJ5XG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqL1xuICAgIHZhciBvcGVudGVsZW1ldHJ5ID0ge307XG4gICAgb3BlbnRlbGVtZXRyeS5wcm90byA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOYW1lc3BhY2UgcHJvdG8uXG4gICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5XG4gICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICovXG4gICAgICAgIHZhciBwcm90byA9IHt9O1xuICAgICAgICBwcm90by5jb21tb24gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOYW1lc3BhY2UgY29tbW9uLlxuICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG9cbiAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGNvbW1vbiA9IHt9O1xuICAgICAgICAgICAgY29tbW9uLnYxID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgdjEuXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uXG4gICAgICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHZhciB2MSA9IHt9O1xuICAgICAgICAgICAgICAgIHYxLkFueVZhbHVlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gQW55VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElBbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc3RyaW5nVmFsdWVdIEFueVZhbHVlIHN0cmluZ1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnxudWxsfSBbYm9vbFZhbHVlXSBBbnlWYWx1ZSBib29sVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbaW50VmFsdWVdIEFueVZhbHVlIGludFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtkb3VibGVWYWx1ZV0gQW55VmFsdWUgZG91YmxlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQXJyYXlWYWx1ZXxudWxsfSBbYXJyYXlWYWx1ZV0gQW55VmFsdWUgYXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZUxpc3R8bnVsbH0gW2t2bGlzdFZhbHVlXSBBbnlWYWx1ZSBrdmxpc3RWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge1VpbnQ4QXJyYXl8bnVsbH0gW2J5dGVzVmFsdWVdIEFueVZhbHVlIGJ5dGVzVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEFueVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEFueVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbnlWYWx1ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBzdHJpbmdWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBzdHJpbmdWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5wcm90b3R5cGUuc3RyaW5nVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQW55VmFsdWUgYm9vbFZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufG51bGx8dW5kZWZpbmVkfSBib29sVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUucHJvdG90eXBlLmJvb2xWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBpbnRWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IGludFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnByb3RvdHlwZS5pbnRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBkb3VibGVWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBkb3VibGVWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5wcm90b3R5cGUuZG91YmxlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQW55VmFsdWUgYXJyYXlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFycmF5VmFsdWV8bnVsbHx1bmRlZmluZWR9IGFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUucHJvdG90eXBlLmFycmF5VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQW55VmFsdWUga3ZsaXN0VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZUxpc3R8bnVsbHx1bmRlZmluZWR9IGt2bGlzdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnByb3RvdHlwZS5rdmxpc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSBieXRlc1ZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSBieXRlc1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnByb3RvdHlwZS5ieXRlc1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25lT2YgZmllbGQgbmFtZXMgYm91bmQgdG8gdmlydHVhbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gICAgICAgICAgICAgICAgICAgIHZhciAkb25lT2ZGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBbnlWYWx1ZSB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7XCJzdHJpbmdWYWx1ZVwifFwiYm9vbFZhbHVlXCJ8XCJpbnRWYWx1ZVwifFwiZG91YmxlVmFsdWVcInxcImFycmF5VmFsdWVcInxcImt2bGlzdFZhbHVlXCJ8XCJieXRlc1ZhbHVlXCJ8dW5kZWZpbmVkfSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW55VmFsdWUucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wic3RyaW5nVmFsdWVcIiwgXCJib29sVmFsdWVcIiwgXCJpbnRWYWx1ZVwiLCBcImRvdWJsZVZhbHVlXCIsIFwiYXJyYXlWYWx1ZVwiLCBcImt2bGlzdFZhbHVlXCIsIFwiYnl0ZXNWYWx1ZVwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEFueVZhbHVlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWV9IEFueVZhbHVlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbnlWYWx1ZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBBbnlWYWx1ZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZX0gbWVzc2FnZSBBbnlWYWx1ZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdHJpbmdWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3RyaW5nVmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuc3RyaW5nKG1lc3NhZ2Uuc3RyaW5nVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYm9vbFZhbHVlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJib29sVmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAwID0qLyAxNikuYm9vbChtZXNzYWdlLmJvb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbnRWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiaW50VmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAwID0qLyAyNCkuaW50NjQobWVzc2FnZS5pbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kb3VibGVWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZG91YmxlVmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAxID0qLyAzMykuZG91YmxlKG1lc3NhZ2UuZG91YmxlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXJyYXlWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiYXJyYXlWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLmVuY29kZShtZXNzYWdlLmFycmF5VmFsdWUsIHdyaXRlci51aW50MzIoLyogaWQgNSwgd2lyZVR5cGUgMiA9Ki8gNDIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5rdmxpc3RWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwia3ZsaXN0VmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LmVuY29kZShtZXNzYWdlLmt2bGlzdFZhbHVlLCB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDIgPSovIDUwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnl0ZXNWYWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiYnl0ZXNWYWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovIDU4KS5ieXRlcyhtZXNzYWdlLmJ5dGVzVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBBbnlWYWx1ZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZX0gbWVzc2FnZSBBbnlWYWx1ZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBBbnlWYWx1ZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWV9IEFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpbmdWYWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ib29sVmFsdWUgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmludFZhbHVlID0gcmVhZGVyLmludDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZG91YmxlVmFsdWUgPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXJyYXlWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5rdmxpc3RWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ5dGVzVmFsdWUgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gQW55VmFsdWUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlfSBBbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gQW55VmFsdWUgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdHJpbmdWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdHJpbmdWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zdHJpbmdWYWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1ZhbHVlOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJvb2xWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJib29sVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5ib29sVmFsdWUgIT09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJib29sVmFsdWU6IGJvb2xlYW4gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmludFZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImludFZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmludFZhbHVlKSAmJiAhKG1lc3NhZ2UuaW50VmFsdWUgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuaW50VmFsdWUubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5pbnRWYWx1ZS5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImludFZhbHVlOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRvdWJsZVZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRvdWJsZVZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMudmFsdWUgPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlOiBtdWx0aXBsZSB2YWx1ZXNcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZhbHVlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuZG91YmxlVmFsdWUgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRvdWJsZVZhbHVlOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFycmF5VmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXJyYXlWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZlcmlmeShtZXNzYWdlLmFycmF5VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVZhbHVlLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uua3ZsaXN0VmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwia3ZsaXN0VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LnZlcmlmeShtZXNzYWdlLmt2bGlzdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwia3ZsaXN0VmFsdWUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ieXRlc1ZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJ5dGVzVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52YWx1ZSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWU6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYnl0ZXNWYWx1ZSAmJiB0eXBlb2YgbWVzc2FnZS5ieXRlc1ZhbHVlLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLmJ5dGVzVmFsdWUpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnl0ZXNWYWx1ZTogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gQW55VmFsdWUgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZX0gQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zdHJpbmdWYWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaW5nVmFsdWUgPSBTdHJpbmcob2JqZWN0LnN0cmluZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYm9vbFZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ib29sVmFsdWUgPSBCb29sZWFuKG9iamVjdC5ib29sVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5pbnRWYWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5pbnRWYWx1ZSA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5pbnRWYWx1ZSkpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5pbnRWYWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pbnRWYWx1ZSA9IHBhcnNlSW50KG9iamVjdC5pbnRWYWx1ZSwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuaW50VmFsdWUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaW50VmFsdWUgPSBvYmplY3QuaW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5pbnRWYWx1ZSA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pbnRWYWx1ZSA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QuaW50VmFsdWUubG93ID4+PiAwLCBvYmplY3QuaW50VmFsdWUuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZG91YmxlVmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRvdWJsZVZhbHVlID0gTnVtYmVyKG9iamVjdC5kb3VibGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmFycmF5VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmFycmF5VmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS5hcnJheVZhbHVlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hcnJheVZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC5hcnJheVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Qua3ZsaXN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0Lmt2bGlzdFZhbHVlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUua3ZsaXN0VmFsdWU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmt2bGlzdFZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LmZyb21PYmplY3Qob2JqZWN0Lmt2bGlzdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYnl0ZXNWYWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmJ5dGVzVmFsdWUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LmJ5dGVzVmFsdWUsIG1lc3NhZ2UuYnl0ZXNWYWx1ZSA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC5ieXRlc1ZhbHVlKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5ieXRlc1ZhbHVlLmxlbmd0aCA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ5dGVzVmFsdWUgPSBvYmplY3QuYnl0ZXNWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEFueVZhbHVlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWV9IG1lc3NhZ2UgQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBbnlWYWx1ZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdHJpbmdWYWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdHJpbmdWYWx1ZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdHJpbmdWYWx1ZSA9IG1lc3NhZ2Uuc3RyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBcInN0cmluZ1ZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ib29sVmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYm9vbFZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvb2xWYWx1ZSA9IG1lc3NhZ2UuYm9vbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJib29sVmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmludFZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImludFZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmludFZhbHVlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaW50VmFsdWUgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5pbnRWYWx1ZSkgOiBtZXNzYWdlLmludFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmludFZhbHVlID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLmludFZhbHVlKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLmludFZhbHVlLmxvdyA+Pj4gMCwgbWVzc2FnZS5pbnRWYWx1ZS5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5pbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiaW50VmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRvdWJsZVZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRvdWJsZVZhbHVlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRvdWJsZVZhbHVlID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLmRvdWJsZVZhbHVlKSA/IFN0cmluZyhtZXNzYWdlLmRvdWJsZVZhbHVlKSA6IG1lc3NhZ2UuZG91YmxlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBcImRvdWJsZVZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hcnJheVZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFycmF5VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXJyYXlWYWx1ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hcnJheVZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiYXJyYXlWYWx1ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uua3ZsaXN0VmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwia3ZsaXN0VmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qua3ZsaXN0VmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudG9PYmplY3QobWVzc2FnZS5rdmxpc3RWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBcImt2bGlzdFZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ieXRlc1ZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJ5dGVzVmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYnl0ZXNWYWx1ZSA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS5ieXRlc1ZhbHVlLCAwLCBtZXNzYWdlLmJ5dGVzVmFsdWUubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS5ieXRlc1ZhbHVlKSA6IG1lc3NhZ2UuYnl0ZXNWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiYnl0ZXNWYWx1ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgQW55VmFsdWUgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFueVZhbHVlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEFueVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQW55VmFsdWUuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuQXJyYXlWYWx1ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEFycmF5VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElBcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZT58bnVsbH0gW3ZhbHVlc10gQXJyYXlWYWx1ZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEFycmF5VmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gQXJyYXlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFycmF5VmFsdWU9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFycmF5VmFsdWUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEFycmF5VmFsdWUgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUFueVZhbHVlPn0gdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5wcm90b3R5cGUudmFsdWVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgQXJyYXlWYWx1ZSBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBcnJheVZhbHVlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlfSBBcnJheVZhbHVlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5VmFsdWUocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgQXJyYXlWYWx1ZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQXJyYXlWYWx1ZX0gbWVzc2FnZSBBcnJheVZhbHVlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWVzICE9IG51bGwgJiYgbWVzc2FnZS52YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS52YWx1ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmVuY29kZShtZXNzYWdlLnZhbHVlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgQXJyYXlWYWx1ZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQXJyYXlWYWx1ZX0gbWVzc2FnZSBBcnJheVZhbHVlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gQXJyYXlWYWx1ZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlfSBBcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UudmFsdWVzICYmIG1lc3NhZ2UudmFsdWVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEFycmF5VmFsdWUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZX0gQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFycmF5VmFsdWUuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBBcnJheVZhbHVlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFycmF5VmFsdWUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UudmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLnZlcmlmeShtZXNzYWdlLnZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBBcnJheVZhbHVlIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlfSBBcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBBcnJheVZhbHVlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC52YWx1ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZS52YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QudmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnZhbHVlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlLnZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LnZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gQXJyYXlWYWx1ZSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZX0gbWVzc2FnZSBBcnJheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZXMgJiYgbWVzc2FnZS52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS52YWx1ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS50b09iamVjdChtZXNzYWdlLnZhbHVlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBBcnJheVZhbHVlIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFycmF5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEFycmF5VmFsdWUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQXJyYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgQXJyYXlWYWx1ZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BcnJheVZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheVZhbHVlO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuS2V5VmFsdWVMaXN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBLZXlWYWx1ZUxpc3QuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElLZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbdmFsdWVzXSBLZXlWYWx1ZUxpc3QgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBLZXlWYWx1ZUxpc3QuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBLZXlWYWx1ZUxpc3QuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElLZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlTGlzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gS2V5VmFsdWVMaXN0KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBLZXlWYWx1ZUxpc3QgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPn0gdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZUxpc3QucHJvdG90eXBlLnZhbHVlcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEtleVZhbHVlTGlzdCBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlTGlzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0fSBLZXlWYWx1ZUxpc3QgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBLZXlWYWx1ZUxpc3QocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgS2V5VmFsdWVMaXN0IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWVMaXN0fSBtZXNzYWdlIEtleVZhbHVlTGlzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWVzICE9IG51bGwgJiYgbWVzc2FnZS52YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS52YWx1ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLnZhbHVlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgS2V5VmFsdWVMaXN0IG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWVMaXN0fSBtZXNzYWdlIEtleVZhbHVlTGlzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBLZXlWYWx1ZUxpc3QgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3R9IEtleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS52YWx1ZXMgJiYgbWVzc2FnZS52YWx1ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52YWx1ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBLZXlWYWx1ZUxpc3QgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3R9IEtleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgS2V5VmFsdWVMaXN0IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS52YWx1ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS52YWx1ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBLZXlWYWx1ZUxpc3QgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0fSBLZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3QudmFsdWVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LnZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC52YWx1ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0LnZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LnZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBLZXlWYWx1ZUxpc3QgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0fSBtZXNzYWdlIEtleVZhbHVlTGlzdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZXMgJiYgbWVzc2FnZS52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS52YWx1ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLnZhbHVlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBLZXlWYWx1ZUxpc3QgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZUxpc3QucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgS2V5VmFsdWVMaXN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlTGlzdC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZUxpc3RcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEtleVZhbHVlTGlzdDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLktleVZhbHVlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBLZXlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUtleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtrZXldIEtleVZhbHVlIGtleVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZXxudWxsfSBbdmFsdWVdIEtleVZhbHVlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBLZXlWYWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIEtleVZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBLZXlWYWx1ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBLZXlWYWx1ZSBrZXkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0ga2V5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLnByb3RvdHlwZS5rZXkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogS2V5VmFsdWUgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklBbnlWYWx1ZXxudWxsfHVuZGVmaW5lZH0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUucHJvdG90eXBlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgS2V5VmFsdWUgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZX0gS2V5VmFsdWUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEtleVZhbHVlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEtleVZhbHVlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlfSBtZXNzYWdlIEtleVZhbHVlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmtleSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwia2V5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLnN0cmluZyhtZXNzYWdlLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKG1lc3NhZ2UudmFsdWUsIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEtleVZhbHVlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlfSBtZXNzYWdlIEtleVZhbHVlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgS2V5VmFsdWUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlfSBLZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2V5ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBLZXlWYWx1ZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWV9IEtleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIEtleVZhbHVlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5rZXkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwia2V5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5rZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJrZXk6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidmFsdWVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS52ZXJpZnkobWVzc2FnZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgS2V5VmFsdWUgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZX0gS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5rZXkgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmtleSA9IFN0cmluZyhvYmplY3Qua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnZhbHVlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmFsdWU6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZnJvbU9iamVjdChvYmplY3QudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBLZXlWYWx1ZSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlfSBtZXNzYWdlIEtleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgS2V5VmFsdWUudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qua2V5ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uua2V5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImtleVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qua2V5ID0gbWVzc2FnZS5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS50b09iamVjdChtZXNzYWdlLnZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEtleVZhbHVlIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBLZXlWYWx1ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBLZXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEtleVZhbHVlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBLZXlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLkluc3RydW1lbnRhdGlvblNjb3BlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gSW5zdHJ1bWVudGF0aW9uU2NvcGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElJbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbbmFtZV0gSW5zdHJ1bWVudGF0aW9uU2NvcGUgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbdmVyc2lvbl0gSW5zdHJ1bWVudGF0aW9uU2NvcGUgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBJbnN0cnVtZW50YXRpb25TY29wZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtkcm9wcGVkQXR0cmlidXRlc0NvdW50XSBJbnN0cnVtZW50YXRpb25TY29wZSBkcm9wcGVkQXR0cmlidXRlc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBJbnN0cnVtZW50YXRpb25TY29wZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBJbnN0cnVtZW50YXRpb25TY29wZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSW5zdHJ1bWVudGF0aW9uU2NvcGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJbnN0cnVtZW50YXRpb25TY29wZSBuYW1lLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSW5zdHJ1bWVudGF0aW9uU2NvcGUgdmVyc2lvbi5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLnByb3RvdHlwZS52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEluc3RydW1lbnRhdGlvblNjb3BlIGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEluc3RydW1lbnRhdGlvblNjb3BlIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEluc3RydW1lbnRhdGlvblNjb3BlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGV9IEluc3RydW1lbnRhdGlvblNjb3BlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnN0cnVtZW50YXRpb25TY29wZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZX0gbWVzc2FnZSBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmVyc2lvbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidmVyc2lvblwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5zdHJpbmcobWVzc2FnZS52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDQsIHdpcmVUeXBlIDAgPSovIDMyKS51aW50MzIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgSW5zdHJ1bWVudGF0aW9uU2NvcGUgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JSW5zdHJ1bWVudGF0aW9uU2NvcGV9IG1lc3NhZ2UgSW5zdHJ1bWVudGF0aW9uU2NvcGUgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gSW5zdHJ1bWVudGF0aW9uU2NvcGUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlfSBJbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52ZXJzaW9uID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGV9IEluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5uYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmFtZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52ZXJzaW9uICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInZlcnNpb25cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnZlcnNpb24pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2ZXJzaW9uOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBJbnN0cnVtZW50YXRpb25TY29wZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlfSBJbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uU2NvcGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm5hbWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSBTdHJpbmcob2JqZWN0Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC52ZXJzaW9uICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS52ZXJzaW9uID0gU3RyaW5nKG9iamVjdC52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmF0dHJpYnV0ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEluc3RydW1lbnRhdGlvblNjb3BlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGV9IG1lc3NhZ2UgSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZlcnNpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmFtZSA9IG1lc3NhZ2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZlcnNpb24gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidmVyc2lvblwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmVyc2lvbiA9IG1lc3NhZ2UudmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEluc3RydW1lbnRhdGlvblNjb3BlIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb25TY29wZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBJbnN0cnVtZW50YXRpb25TY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvblNjb3BlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0cnVtZW50YXRpb25TY29wZTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLkVudGl0eVJlZiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEVudGl0eVJlZi5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBFbnRpdHlSZWYgc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFt0eXBlXSBFbnRpdHlSZWYgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fG51bGx9IFtpZEtleXNdIEVudGl0eVJlZiBpZEtleXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48c3RyaW5nPnxudWxsfSBbZGVzY3JpcHRpb25LZXlzXSBFbnRpdHlSZWYgZGVzY3JpcHRpb25LZXlzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFbnRpdHlSZWYuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRW50aXR5UmVmLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklFbnRpdHlSZWY9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEVudGl0eVJlZihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbktleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVudGl0eVJlZiBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYucHJvdG90eXBlLnNjaGVtYVVybCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbnRpdHlSZWYgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYucHJvdG90eXBlLnR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW50aXR5UmVmIGlkS2V5cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPHN0cmluZz59IGlkS2V5c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLnByb3RvdHlwZS5pZEtleXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW50aXR5UmVmIGRlc2NyaXB0aW9uS2V5cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPHN0cmluZz59IGRlc2NyaXB0aW9uS2V5c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRW50aXR5UmVmLnByb3RvdHlwZS5kZXNjcmlwdGlvbktleXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFbnRpdHlSZWYgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklFbnRpdHlSZWY9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZn0gRW50aXR5UmVmIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRW50aXR5UmVmKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEVudGl0eVJlZiBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWYudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUVudGl0eVJlZn0gbWVzc2FnZSBFbnRpdHlSZWYgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLnN0cmluZyhtZXNzYWdlLnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0eXBlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLnN0cmluZyhtZXNzYWdlLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaWRLZXlzICE9IG51bGwgJiYgbWVzc2FnZS5pZEtleXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5pZEtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLmlkS2V5c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kZXNjcmlwdGlvbktleXMgIT0gbnVsbCAmJiBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAyID0qLyAzNCkuc3RyaW5nKG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRW50aXR5UmVmIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JRW50aXR5UmVmfSBtZXNzYWdlIEVudGl0eVJlZiBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRW50aXR5UmVmIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmfSBFbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnR5cGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuaWRLZXlzICYmIG1lc3NhZ2UuaWRLZXlzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pZEtleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaWRLZXlzLnB1c2gocmVhZGVyLnN0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5kZXNjcmlwdGlvbktleXMgJiYgbWVzc2FnZS5kZXNjcmlwdGlvbktleXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kZXNjcmlwdGlvbktleXMucHVzaChyZWFkZXIuc3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFbnRpdHlSZWYgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZ9IEVudGl0eVJlZlxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEVudGl0eVJlZiBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY2hlbWFVcmw6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS50eXBlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidHlwZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pZEtleXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiaWRLZXlzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuaWRLZXlzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaWRLZXlzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5pZEtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5pZEtleXNbaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaWRLZXlzOiBzdHJpbmdbXSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRlc2NyaXB0aW9uS2V5c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmRlc2NyaXB0aW9uS2V5cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRlc2NyaXB0aW9uS2V5czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzW2ldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRlc2NyaXB0aW9uS2V5czogc3RyaW5nW10gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFbnRpdHlSZWYgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmfSBFbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY2hlbWFVcmwgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IFN0cmluZyhvYmplY3Quc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHlwZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHlwZSA9IFN0cmluZyhvYmplY3QudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmlkS2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuaWRLZXlzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi5pZEtleXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaWRLZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuaWRLZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmlkS2V5c1tpXSA9IFN0cmluZyhvYmplY3QuaWRLZXlzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZGVzY3JpcHRpb25LZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5kZXNjcmlwdGlvbktleXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLmRlc2NyaXB0aW9uS2V5czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kZXNjcmlwdGlvbktleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5kZXNjcmlwdGlvbktleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzW2ldID0gU3RyaW5nKG9iamVjdC5kZXNjcmlwdGlvbktleXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRW50aXR5UmVmIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZn0gbWVzc2FnZSBFbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaWRLZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlc2NyaXB0aW9uS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHlwZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBtZXNzYWdlLnNjaGVtYVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHlwZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHlwZSA9IG1lc3NhZ2UudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlkS2V5cyAmJiBtZXNzYWdlLmlkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaWRLZXlzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmlkS2V5cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmlkS2V5c1tqXSA9IG1lc3NhZ2UuaWRLZXlzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzICYmIG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZXNjcmlwdGlvbktleXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZGVzY3JpcHRpb25LZXlzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGVzY3JpcHRpb25LZXlzW2pdID0gbWVzc2FnZS5kZXNjcmlwdGlvbktleXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFbnRpdHlSZWYgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFbnRpdHlSZWYucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgRW50aXR5UmVmXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEVudGl0eVJlZi5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWZcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVudGl0eVJlZjtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2MTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4gY29tbW9uO1xuICAgICAgICB9KSgpO1xuICAgICAgICBwcm90by5yZXNvdXJjZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE5hbWVzcGFjZSByZXNvdXJjZS5cbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvXG4gICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHt9O1xuICAgICAgICAgICAgcmVzb3VyY2UudjEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSB2MS5cbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZVxuICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgdjEgPSB7fTtcbiAgICAgICAgICAgICAgICB2MS5SZXNvdXJjZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgUmVzb3VyY2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT58bnVsbH0gW2F0dHJpYnV0ZXNdIFJlc291cmNlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnRdIFJlc291cmNlIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUVudGl0eVJlZj58bnVsbH0gW2VudGl0eVJlZnNdIFJlc291cmNlIGVudGl0eVJlZnNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlc291cmNlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBSZXNvdXJjZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSVJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5UmVmcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb3VyY2UgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZSBkcm9wcGVkQXR0cmlidXRlc0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZSBlbnRpdHlSZWZzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUVudGl0eVJlZj59IGVudGl0eVJlZnNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUuZW50aXR5UmVmcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFJlc291cmNlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5JUmVzb3VyY2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2V9IFJlc291cmNlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNvdXJjZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBSZXNvdXJjZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZX0gbWVzc2FnZSBSZXNvdXJjZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKG1lc3NhZ2UuYXR0cmlidXRlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAwID0qLyAxNikudWludDMyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lbnRpdHlSZWZzICE9IG51bGwgJiYgbWVzc2FnZS5lbnRpdHlSZWZzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZW50aXR5UmVmcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuRW50aXR5UmVmLmVuY29kZShtZXNzYWdlLmVudGl0eVJlZnNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlfSBtZXNzYWdlIFJlc291cmNlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2UgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZX0gUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZW50aXR5UmVmcyAmJiBtZXNzYWdlLmVudGl0eVJlZnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVudGl0eVJlZnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW50aXR5UmVmcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBSZXNvdXJjZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlfSBSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBSZXNvdXJjZSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImF0dHJpYnV0ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lbnRpdHlSZWZzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImVudGl0eVJlZnNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5lbnRpdHlSZWZzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZW50aXR5UmVmczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZW50aXR5UmVmcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5FbnRpdHlSZWYudmVyaWZ5KG1lc3NhZ2UuZW50aXR5UmVmc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImVudGl0eVJlZnMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBSZXNvdXJjZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZX0gUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmVudGl0eVJlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmVudGl0eVJlZnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbnRpdHlSZWZzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVudGl0eVJlZnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5lbnRpdHlSZWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmVudGl0eVJlZnNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbnRpdHlSZWZzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW50aXR5UmVmc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi5mcm9tT2JqZWN0KG9iamVjdC5lbnRpdHlSZWZzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFJlc291cmNlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlfSBtZXNzYWdlIFJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lbnRpdHlSZWZzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lbnRpdHlSZWZzICYmIG1lc3NhZ2UuZW50aXR5UmVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZW50aXR5UmVmcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5lbnRpdHlSZWZzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZW50aXR5UmVmc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkVudGl0eVJlZi50b09iamVjdChtZXNzYWdlLmVudGl0eVJlZnNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgUmVzb3VyY2UgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2VcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYxO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgcHJvdG8udHJhY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOYW1lc3BhY2UgdHJhY2UuXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90b1xuICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgdHJhY2UgPSB7fTtcbiAgICAgICAgICAgIHRyYWNlLnYxID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgdjEuXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2VcbiAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIHYxID0ge307XG4gICAgICAgICAgICAgICAgdjEuVHJhY2VzRGF0YSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgVHJhY2VzRGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklSZXNvdXJjZVNwYW5zPnxudWxsfSBbcmVzb3VyY2VTcGFuc10gVHJhY2VzRGF0YSByZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBUcmFjZXNEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBUcmFjZXNEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklUcmFjZXNEYXRhPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFjZXNEYXRhKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVHJhY2VzRGF0YSByZXNvdXJjZVNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JUmVzb3VyY2VTcGFucz59IHJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEucHJvdG90eXBlLnJlc291cmNlU3BhbnMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBUcmFjZXNEYXRhIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklUcmFjZXNEYXRhPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGF9IFRyYWNlc0RhdGEgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJhY2VzRGF0YShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBUcmFjZXNEYXRhIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklUcmFjZXNEYXRhfSBtZXNzYWdlIFRyYWNlc0RhdGEgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBUcmFjZXNEYXRhLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmVuY29kZShtZXNzYWdlLnJlc291cmNlU3BhbnNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFRyYWNlc0RhdGEgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVRyYWNlc0RhdGF9IG1lc3NhZ2UgVHJhY2VzRGF0YSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgVHJhY2VzRGF0YSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YX0gVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UucmVzb3VyY2VTcGFucyAmJiBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VTcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBUcmFjZXNEYXRhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhfSBUcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgVHJhY2VzRGF0YS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgVHJhY2VzRGF0YSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VTcGFucyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVNwYW5zXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UucmVzb3VyY2VTcGFucykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeShtZXNzYWdlLnJlc291cmNlU3BhbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZVNwYW5zLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgVHJhY2VzRGF0YSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGF9IFRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2VTcGFucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QucmVzb3VyY2VTcGFucykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGEucmVzb3VyY2VTcGFuczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QucmVzb3VyY2VTcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5yZXNvdXJjZVNwYW5zW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YS5yZXNvdXJjZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VTcGFuc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5mcm9tT2JqZWN0KG9iamVjdC5yZXNvdXJjZVNwYW5zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFRyYWNlc0RhdGEgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhfSBtZXNzYWdlIFRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBUcmFjZXNEYXRhLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZVNwYW5zICYmIG1lc3NhZ2UucmVzb3VyY2VTcGFucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VTcGFuc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy50b09iamVjdChtZXNzYWdlLnJlc291cmNlU3BhbnNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgVHJhY2VzRGF0YSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlRyYWNlc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFRyYWNlc0RhdGEucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgVHJhY2VzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5UcmFjZXNEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBUcmFjZXNEYXRhLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuVHJhY2VzRGF0YVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhY2VzRGF0YTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlJlc291cmNlU3BhbnMgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFJlc291cmNlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZXxudWxsfSBbcmVzb3VyY2VdIFJlc291cmNlU3BhbnMgcmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU2NvcGVTcGFucz58bnVsbH0gW3Njb3BlU3BhbnNdIFJlc291cmNlU3BhbnMgc2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBSZXNvdXJjZVNwYW5zIHNjaGVtYVVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgUmVzb3VyY2VTcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgUmVzb3VyY2VTcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSVJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JUmVzb3VyY2VTcGFucz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVzb3VyY2VTcGFucyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3BlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlU3BhbnMgcmVzb3VyY2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuSVJlc291cmNlfG51bGx8dW5kZWZpbmVkfSByZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5wcm90b3R5cGUucmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb3VyY2VTcGFucyBzY29wZVNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU2NvcGVTcGFucz59IHNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMucHJvdG90eXBlLnNjb3BlU3BhbnMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUmVzb3VyY2VTcGFucyBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBSZXNvdXJjZVNwYW5zIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklSZXNvdXJjZVNwYW5zPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnN9IFJlc291cmNlU3BhbnMgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VTcGFucyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBSZXNvdXJjZVNwYW5zIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklSZXNvdXJjZVNwYW5zfSBtZXNzYWdlIFJlc291cmNlU3BhbnMgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicmVzb3VyY2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbmNvZGUobWVzc2FnZS5yZXNvdXJjZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlU3BhbnMgIT0gbnVsbCAmJiBtZXNzYWdlLnNjb3BlU3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5zY29wZVNwYW5zLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuZW5jb2RlKG1lc3NhZ2Uuc2NvcGVTcGFuc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlU3BhbnMgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVJlc291cmNlU3BhbnN9IG1lc3NhZ2UgUmVzb3VyY2VTcGFucyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2VTcGFucyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc30gUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2Uuc2NvcGVTcGFucyAmJiBtZXNzYWdlLnNjb3BlU3BhbnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlU3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVTcGFucy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2VTcGFucyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc30gUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlU3BhbnMuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFJlc291cmNlU3BhbnMgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS52ZXJpZnkobWVzc2FnZS5yZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NvcGVTcGFucyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVNwYW5zXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2Uuc2NvcGVTcGFucykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnNjb3BlU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLnZlcmlmeShtZXNzYWdlLnNjb3BlU3BhbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZVNwYW5zLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFJlc291cmNlU3BhbnMgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zfSBSZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5yZXNvdXJjZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5yZXNvdXJjZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NvcGVTcGFucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3Quc2NvcGVTcGFucykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuc2NvcGVTcGFuczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3Quc2NvcGVTcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zY29wZVNwYW5zW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFucy5zY29wZVNwYW5zOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVTcGFuc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5mcm9tT2JqZWN0KG9iamVjdC5zY29wZVNwYW5zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBSZXNvdXJjZVNwYW5zIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc30gbWVzc2FnZSBSZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NvcGVTcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS50b09iamVjdChtZXNzYWdlLnJlc291cmNlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlU3BhbnMgJiYgbWVzc2FnZS5zY29wZVNwYW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnNjb3BlU3BhbnMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZVNwYW5zW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zLnRvT2JqZWN0KG1lc3NhZ2Uuc2NvcGVTcGFuc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBtZXNzYWdlLnNjaGVtYVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFJlc291cmNlU3BhbnMgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVNwYW5zLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFJlc291cmNlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuUmVzb3VyY2VTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VTcGFucy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlU3BhbnM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TY29wZVNwYW5zID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBTY29wZVNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElTY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlfG51bGx9IFtzY29wZV0gU2NvcGVTcGFucyBzY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTcGFuPnxudWxsfSBbc3BhbnNdIFNjb3BlU3BhbnMgc3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW3NjaGVtYVVybF0gU2NvcGVTcGFucyBzY2hlbWFVcmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFNjb3BlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFNjb3BlU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNjb3BlU3BhbnM9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNjb3BlU3BhbnMocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVTcGFucyBzY29wZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUluc3RydW1lbnRhdGlvblNjb3BlfG51bGx8dW5kZWZpbmVkfSBzY29wZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy5wcm90b3R5cGUuc2NvcGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVTcGFucyBzcGFucy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVNwYW4+fSBzcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy5wcm90b3R5cGUuc3BhbnMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU2NvcGVTcGFucyBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBTY29wZVNwYW5zIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTY29wZVNwYW5zPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnN9IFNjb3BlU3BhbnMgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2NvcGVTcGFucyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTY29wZVNwYW5zIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTY29wZVNwYW5zfSBtZXNzYWdlIFNjb3BlU3BhbnMgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NvcGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZW5jb2RlKG1lc3NhZ2Uuc2NvcGUsIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFucyAhPSBudWxsICYmIG1lc3NhZ2Uuc3BhbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5zcGFucy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmVuY29kZShtZXNzYWdlLnNwYW5zW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU2NvcGVTcGFucyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU2NvcGVTcGFuc30gbWVzc2FnZSBTY29wZVNwYW5zIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTY29wZVNwYW5zIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zfSBTY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2Uuc3BhbnMgJiYgbWVzc2FnZS5zcGFucy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFNjb3BlU3BhbnMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnN9IFNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBTY29wZVNwYW5zIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnZlcmlmeShtZXNzYWdlLnNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFucyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi52ZXJpZnkobWVzc2FnZS5zcGFuc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNwYW5zLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFNjb3BlU3BhbnMgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zfSBTY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjb3BlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zY29wZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFucy5zY29wZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5mcm9tT2JqZWN0KG9iamVjdC5zY29wZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNwYW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5zcGFucykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuc3BhbnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5zcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zcGFuc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnMuc3BhbnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5mcm9tT2JqZWN0KG9iamVjdC5zcGFuc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY2hlbWFVcmwgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjaGVtYVVybCA9IFN0cmluZyhvYmplY3Quc2NoZW1hVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgU2NvcGVTcGFucyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnN9IG1lc3NhZ2UgU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlU3BhbnMudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS50b09iamVjdChtZXNzYWdlLnNjb3BlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5zICYmIG1lc3NhZ2Uuc3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnNwYW5zLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbnNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4udG9PYmplY3QobWVzc2FnZS5zcGFuc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2hlbWFVcmwgPSBtZXNzYWdlLnNjaGVtYVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFNjb3BlU3BhbnMgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TY29wZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZVNwYW5zLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFNjb3BlU3BhbnNcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU2NvcGVTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVTcGFucy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNjb3BlU3BhbnNcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjb3BlU3BhbnM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TcGFuID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBTcGFuLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElTcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbdHJhY2VJZF0gU3BhbiB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbc3BhbklkXSBTcGFuIHNwYW5JZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbdHJhY2VTdGF0ZV0gU3BhbiB0cmFjZVN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbcGFyZW50U3BhbklkXSBTcGFuIHBhcmVudFNwYW5JZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZmxhZ3NdIFNwYW4gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW25hbWVdIFNwYW4gbmFtZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5TcGFuS2luZHxudWxsfSBba2luZF0gU3BhbiBraW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3N0YXJ0VGltZVVuaXhOYW5vXSBTcGFuIHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW2VuZFRpbWVVbml4TmFub10gU3BhbiBlbmRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gU3BhbiBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtkcm9wcGVkQXR0cmlidXRlc0NvdW50XSBTcGFuIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLklFdmVudD58bnVsbH0gW2V2ZW50c10gU3BhbiBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRFdmVudHNDb3VudF0gU3BhbiBkcm9wcGVkRXZlbnRzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLklMaW5rPnxudWxsfSBbbGlua3NdIFNwYW4gbGlua3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRMaW5rc0NvdW50XSBTcGFuIGRyb3BwZWRMaW5rc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3RhdHVzfG51bGx9IFtzdGF0dXNdIFNwYW4gc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBTcGFuLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBTcGFuLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTcGFuPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTcGFuKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gdHJhY2VJZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7VWludDhBcnJheXxudWxsfHVuZGVmaW5lZH0gdHJhY2VJZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUudHJhY2VJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIHNwYW5JZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7VWludDhBcnJheXxudWxsfHVuZGVmaW5lZH0gc3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5zcGFuSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiB0cmFjZVN0YXRlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHRyYWNlU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLnRyYWNlU3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBwYXJlbnRTcGFuSWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1VpbnQ4QXJyYXl8bnVsbHx1bmRlZmluZWR9IHBhcmVudFNwYW5JZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUucGFyZW50U3BhbklkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gZmxhZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gbmFtZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5uYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4ga2luZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLlNwYW5LaW5kfG51bGx8dW5kZWZpbmVkfSBraW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5raW5kID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gc3RhcnRUaW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBzdGFydFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUuc3RhcnRUaW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBlbmRUaW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBlbmRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4ucHJvdG90eXBlLmVuZFRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuIGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gZHJvcHBlZEF0dHJpYnV0ZXNDb3VudC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBkcm9wcGVkQXR0cmlidXRlc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLklFdmVudD59IGV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUuZXZlbnRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gZHJvcHBlZEV2ZW50c0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRFdmVudHNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUuZHJvcHBlZEV2ZW50c0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNwYW4gbGlua3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUxpbms+fSBsaW5rc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUubGlua3MgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBkcm9wcGVkTGlua3NDb3VudC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBkcm9wcGVkTGlua3NDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUuZHJvcHBlZExpbmtzQ291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3BhbiBzdGF0dXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVN0YXR1c3xudWxsfHVuZGVmaW5lZH0gc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLnByb3RvdHlwZS5zdGF0dXMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBTcGFuIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTcGFuPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW59IFNwYW4gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4uY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3Bhbihwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTcGFuIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTcGFufSBtZXNzYWdlIFNwYW4gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmJ5dGVzKG1lc3NhZ2UudHJhY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5ieXRlcyhtZXNzYWdlLnNwYW5JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZVN0YXRlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0cmFjZVN0YXRlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnRyYWNlU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyZW50U3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJwYXJlbnRTcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAyID0qLyAzNCkuYnl0ZXMobWVzc2FnZS5wYXJlbnRTcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDIgPSovIDQyKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmtpbmQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImtpbmRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA2LCB3aXJlVHlwZSAwID0qLyA0OCkuaW50MzIobWVzc2FnZS5raW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDEgPSovIDU3KS5maXhlZDY0KG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJlbmRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA4LCB3aXJlVHlwZSAxID0qLyA2NSkuZml4ZWQ2NChtZXNzYWdlLmVuZFRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKG1lc3NhZ2UuYXR0cmlidXRlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCA5LCB3aXJlVHlwZSAyID0qLyA3NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki8gODApLnVpbnQzMihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXZlbnRzICE9IG51bGwgJiYgbWVzc2FnZS5ldmVudHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5ldmVudHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5lbmNvZGUobWVzc2FnZS5ldmVudHNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovIDkwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEV2ZW50c0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkcm9wcGVkRXZlbnRzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMiwgd2lyZVR5cGUgMCA9Ki8gOTYpLnVpbnQzMihtZXNzYWdlLmRyb3BwZWRFdmVudHNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5saW5rcyAhPSBudWxsICYmIG1lc3NhZ2UubGlua3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5saW5rcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZW5jb2RlKG1lc3NhZ2UubGlua3NbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMTMsIHdpcmVUeXBlIDIgPSovIDEwNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRMaW5rc0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJkcm9wcGVkTGlua3NDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDE0LCB3aXJlVHlwZSAwID0qLyAxMTIpLnVpbnQzMihtZXNzYWdlLmRyb3BwZWRMaW5rc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3RhdHVzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLmVuY29kZShtZXNzYWdlLnN0YXR1cywgd3JpdGVyLnVpbnQzMigvKiBpZCAxNSwgd2lyZVR5cGUgMiA9Ki8gMTIyKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTYsIHdpcmVUeXBlIDUgPSovIDEzMykuZml4ZWQzMihtZXNzYWdlLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3BhbiBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4udmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3Bhbn0gbWVzc2FnZSBTcGFuIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTcGFuIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFufSBTcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZUlkID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbklkID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VTdGF0ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJlbnRTcGFuSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSByZWFkZXIuZml4ZWQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2luZCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZXZlbnRzICYmIG1lc3NhZ2UuZXZlbnRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ldmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXZlbnRzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkRXZlbnRzQ291bnQgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmxpbmtzICYmIG1lc3NhZ2UubGlua3MubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmxpbmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmxpbmtzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRMaW5rc0NvdW50ID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGF0dXMgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFNwYW4gbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW59IFNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBTcGFuIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZUlkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS50cmFjZUlkICYmIHR5cGVvZiBtZXNzYWdlLnRyYWNlSWQubGVuZ3RoID09PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UudHJhY2VJZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0cmFjZUlkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zcGFuSWQgJiYgdHlwZW9mIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNwYW5JZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzcGFuSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VTdGF0ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZVN0YXRlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS50cmFjZVN0YXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VTdGF0ZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJlbnRTcGFuSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFyZW50U3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UucGFyZW50U3BhbklkICYmIHR5cGVvZiBtZXNzYWdlLnBhcmVudFNwYW5JZC5sZW5ndGggPT09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5wYXJlbnRTcGFuSWQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicGFyZW50U3BhbklkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJmbGFnczogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5uYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmFtZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5raW5kICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImtpbmRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImtpbmQ6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pICYmICEobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhcnRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImVuZFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmVuZFRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLmVuZFRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJlbmRUaW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXZlbnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV2ZW50c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmV2ZW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV2ZW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXZlbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC52ZXJpZnkobWVzc2FnZS5ldmVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJldmVudHMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkRXZlbnRzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEV2ZW50c0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZEV2ZW50c0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEV2ZW50c0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5saW5rcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJsaW5rc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmxpbmtzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibGlua3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmxpbmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rLnZlcmlmeShtZXNzYWdlLmxpbmtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibGlua3MuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkTGlua3NDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkTGlua3NDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmRyb3BwZWRMaW5rc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZExpbmtzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGF0dXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy52ZXJpZnkobWVzc2FnZS5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RhdHVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBTcGFuIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbn0gU3BhblxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50cmFjZUlkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudHJhY2VJZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3QudHJhY2VJZCwgbWVzc2FnZS50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgob2JqZWN0LnRyYWNlSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnRyYWNlSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VJZCA9IG9iamVjdC50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zcGFuSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zcGFuSWQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LnNwYW5JZCwgbWVzc2FnZS5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChvYmplY3Quc3BhbklkKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5zcGFuSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbklkID0gb2JqZWN0LnNwYW5JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHJhY2VTdGF0ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VTdGF0ZSA9IFN0cmluZyhvYmplY3QudHJhY2VTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnBhcmVudFNwYW5JZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnBhcmVudFNwYW5JZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3QucGFyZW50U3BhbklkLCBtZXNzYWdlLnBhcmVudFNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC5wYXJlbnRTcGFuSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnBhcmVudFNwYW5JZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJlbnRTcGFuSWQgPSBvYmplY3QucGFyZW50U3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5mbGFncyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSBvYmplY3QuZmxhZ3MgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm5hbWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSBTdHJpbmcob2JqZWN0Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvYmplY3Qua2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmtpbmQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2luZCA9IG9iamVjdC5raW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5raW5kID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9JTlRFUk5BTFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5raW5kID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNQQU5fS0lORF9TRVJWRVJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uua2luZCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTUEFOX0tJTkRfQ0xJRU5UXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmtpbmQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX1BST0RVQ0VSXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmtpbmQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1BBTl9LSU5EX0NPTlNVTUVSXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmtpbmQgPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmVuZFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuZW5kVGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmVuZFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QuZW5kVGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5lbmRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vID0gb2JqZWN0LmVuZFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmVuZFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbmRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmVuZFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC5lbmRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5ldmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmV2ZW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uZXZlbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV2ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmV2ZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5ldmVudHNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmV2ZW50czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV2ZW50c1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudC5mcm9tT2JqZWN0KG9iamVjdC5ldmVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZHJvcHBlZEV2ZW50c0NvdW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkRXZlbnRzQ291bnQgPSBvYmplY3QuZHJvcHBlZEV2ZW50c0NvdW50ID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5saW5rcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QubGlua3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmxpbmtzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmxpbmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGlua3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QubGlua3NbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLmxpbmtzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubGlua3NbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay5mcm9tT2JqZWN0KG9iamVjdC5saW5rc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kcm9wcGVkTGlua3NDb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZExpbmtzQ291bnQgPSBvYmplY3QuZHJvcHBlZExpbmtzQ291bnQgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnN0YXR1cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc3RhdHVzICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLnN0YXR1czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhdHVzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMuZnJvbU9iamVjdChvYmplY3Quc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgU3BhbiBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW59IG1lc3NhZ2UgU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4udG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5ldmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3QudHJhY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzICE9PSBBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIob2JqZWN0LnNwYW5JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZVN0YXRlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50U3BhbklkID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcmVudFNwYW5JZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50U3BhbklkID0gJHV0aWwubmV3QnVmZmVyKG9iamVjdC5wYXJlbnRTcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmtpbmQgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyBcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lbmRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lbmRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkRXZlbnRzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkTGlua3NDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXR1cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS50cmFjZUlkLCAwLCBtZXNzYWdlLnRyYWNlSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS50cmFjZUlkKSA6IG1lc3NhZ2UudHJhY2VJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS5zcGFuSWQsIDAsIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCkgOiBvcHRpb25zLmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1lc3NhZ2Uuc3BhbklkKSA6IG1lc3NhZ2Uuc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VTdGF0ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZVN0YXRlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZVN0YXRlID0gbWVzc2FnZS50cmFjZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFyZW50U3BhbklkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInBhcmVudFNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50U3BhbklkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnBhcmVudFNwYW5JZCwgMCwgbWVzc2FnZS5wYXJlbnRTcGFuSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS5wYXJlbnRTcGFuSWQpIDogbWVzc2FnZS5wYXJlbnRTcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm5hbWUgPSBtZXNzYWdlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5raW5kICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImtpbmRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmtpbmQgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uU3BhbktpbmRbbWVzc2FnZS5raW5kXSA9PT0gdW5kZWZpbmVkID8gbWVzc2FnZS5raW5kIDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLlNwYW5LaW5kW21lc3NhZ2Uua2luZF0gOiBtZXNzYWdlLmtpbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImVuZFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZW5kVGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vKSA6IG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVuZFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5lbmRUaW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS5lbmRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuZW5kVGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmF0dHJpYnV0ZXNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXZlbnRzICYmIG1lc3NhZ2UuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5ldmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZXZlbnRzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXZlbnRzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnRvT2JqZWN0KG1lc3NhZ2UuZXZlbnRzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRFdmVudHNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkRXZlbnRzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRFdmVudHNDb3VudCA9IG1lc3NhZ2UuZHJvcHBlZEV2ZW50c0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubGlua3MgJiYgbWVzc2FnZS5saW5rcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubGlua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UubGlua3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5saW5rc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rLnRvT2JqZWN0KG1lc3NhZ2UubGlua3Nbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZExpbmtzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZExpbmtzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRMaW5rc0NvdW50ID0gbWVzc2FnZS5kcm9wcGVkTGlua3NDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGF0dXNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXR1cyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLnRvT2JqZWN0KG1lc3NhZ2Uuc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IG1lc3NhZ2UuZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBTcGFuIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBTcGFuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNwYW4uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTcGFuS2luZCBlbnVtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbmFtZSBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uU3BhbktpbmRcbiAgICAgICAgICAgICAgICAgICAgICogQGVudW0ge251bWJlcn1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNQQU5fS0lORF9VTlNQRUNJRklFRD0wIFNQQU5fS0lORF9VTlNQRUNJRklFRCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9LSU5EX0lOVEVSTkFMPTEgU1BBTl9LSU5EX0lOVEVSTkFMIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTUEFOX0tJTkRfU0VSVkVSPTIgU1BBTl9LSU5EX1NFUlZFUiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9LSU5EX0NMSUVOVD0zIFNQQU5fS0lORF9DTElFTlQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNQQU5fS0lORF9QUk9EVUNFUj00IFNQQU5fS0lORF9QUk9EVUNFUiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9LSU5EX0NPTlNVTUVSPTUgU1BBTl9LSU5EX0NPTlNVTUVSIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTcGFuLlNwYW5LaW5kID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXNCeUlkID0ge30sIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUodmFsdWVzQnlJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFswXSA9IFwiU1BBTl9LSU5EX1VOU1BFQ0lGSUVEXCJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzFdID0gXCJTUEFOX0tJTkRfSU5URVJOQUxcIl0gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMl0gPSBcIlNQQU5fS0lORF9TRVJWRVJcIl0gPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbM10gPSBcIlNQQU5fS0lORF9DTElFTlRcIl0gPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbNF0gPSBcIlNQQU5fS0lORF9QUk9EVUNFUlwiXSA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFs1XSA9IFwiU1BBTl9LSU5EX0NPTlNVTUVSXCJdID0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIFNwYW4uRXZlbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3RpbWVVbml4TmFub10gRXZlbnQgdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbbmFtZV0gRXZlbnQgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gRXZlbnQgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnRdIEV2ZW50IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLklFdmVudD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFdmVudChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXZlbnQgdGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFdmVudCBuYW1lLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFdmVudCBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5wcm90b3R5cGUuYXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV2ZW50IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5wcm90b3R5cGUuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXZlbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUV2ZW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50fSBFdmVudCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXZlbnQocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXZlbnQgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUV2ZW50fSBtZXNzYWdlIEV2ZW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAxID0qLyA5KS5maXhlZDY0KG1lc3NhZ2UudGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJuYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMCA9Ki8gMzIpLnVpbnQzMihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXZlbnQgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUV2ZW50fSBtZXNzYWdlIEV2ZW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXZlbnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnR9IEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFdmVudCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50fSBFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV2ZW50IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2UudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmFtZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV2ZW50IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50fSBFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UudGltZVVuaXhOYW5vID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LnRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QudGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3QudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5uYW1lICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IFN0cmluZyhvYmplY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50LmF0dHJpYnV0ZXM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFdmVudCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkV2ZW50fSBtZXNzYWdlIEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS50aW1lVW5peE5hbm8pIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5hdHRyaWJ1dGVzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFdmVudCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5FdmVudFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFdmVudDtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgU3Bhbi5MaW5rID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIExpbmsuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge1VpbnQ4QXJyYXl8bnVsbH0gW3RyYWNlSWRdIExpbmsgdHJhY2VJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtVaW50OEFycmF5fG51bGx9IFtzcGFuSWRdIExpbmsgc3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbdHJhY2VTdGF0ZV0gTGluayB0cmFjZVN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFthdHRyaWJ1dGVzXSBMaW5rIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtkcm9wcGVkQXR0cmlidXRlc0NvdW50XSBMaW5rIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gTGluayBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTGluay5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIExpbmsuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5JTGluaz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaW5rKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBMaW5rIHRyYWNlSWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnByb3RvdHlwZS50cmFjZUlkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGluayBzcGFuSWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsucHJvdG90eXBlLnNwYW5JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIExpbmsgdHJhY2VTdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gdHJhY2VTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5wcm90b3R5cGUudHJhY2VTdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIExpbmsgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGluayBkcm9wcGVkQXR0cmlidXRlc0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBkcm9wcGVkQXR0cmlidXRlc0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnByb3RvdHlwZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogTGluayBmbGFncy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBMaW5rIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUxpbms9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua30gTGluayBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIExpbmsgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLklMaW5rfSBtZXNzYWdlIExpbmsgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuYnl0ZXMobWVzc2FnZS50cmFjZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuYnl0ZXMobWVzc2FnZS5zcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlU3RhdGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRyYWNlU3RhdGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnRyYWNlU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki8gMzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAwID0qLyA0MCkudWludDMyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDUgPSovIDUzKS5maXhlZDMyKG1lc3NhZ2UuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTGluayBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluay52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uSUxpbmt9IG1lc3NhZ2UgTGluayBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBMaW5rIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua30gTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGluaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYWNlSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbklkID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYWNlU3RhdGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IHJlYWRlci5maXhlZDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBMaW5rIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rfSBMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIExpbmsgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS50cmFjZUlkICYmIHR5cGVvZiBtZXNzYWdlLnRyYWNlSWQubGVuZ3RoID09PSBcIm51bWJlclwiIHx8ICR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UudHJhY2VJZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNwYW5JZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5zcGFuSWQgJiYgdHlwZW9mIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNwYW5JZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbklkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50cmFjZVN0YXRlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRyYWNlU3RhdGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS50cmFjZVN0YXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRyYWNlU3RhdGU6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmZsYWdzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZsYWdzOiBpbnRlZ2VyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgTGluayBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmt9IExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRyYWNlSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudHJhY2VJZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LnRyYWNlSWQsIG1lc3NhZ2UudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC50cmFjZUlkKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3QudHJhY2VJZC5sZW5ndGggPj0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VJZCA9IG9iamVjdC50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3BhbklkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNwYW5JZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LnNwYW5JZCwgbWVzc2FnZS5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChvYmplY3Quc3BhbklkKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3Quc3BhbklkLmxlbmd0aCA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSBvYmplY3Quc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHJhY2VTdGF0ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYWNlU3RhdGUgPSBTdHJpbmcob2JqZWN0LnRyYWNlU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rLmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmsuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZmxhZ3MgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IG9iamVjdC5mbGFncyA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIExpbmsgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TcGFuLkxpbmt9IG1lc3NhZ2UgTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSAkdXRpbC5uZXdCdWZmZXIob2JqZWN0LnRyYWNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3Quc3BhbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VTdGF0ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS50cmFjZUlkLCAwLCBtZXNzYWdlLnRyYWNlSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS50cmFjZUlkKSA6IG1lc3NhZ2UudHJhY2VJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnNwYW5JZCwgMCwgbWVzc2FnZS5zcGFuSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS5zcGFuSWQpIDogbWVzc2FnZS5zcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VTdGF0ZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZVN0YXRlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VTdGF0ZSA9IG1lc3NhZ2UudHJhY2VTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IG1lc3NhZ2UuZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgTGluayB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3Bhbi5MaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTGluay5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBMaW5rLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlNwYW4uTGlua1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5rO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3BhbjtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLlN0YXR1cyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgU3RhdHVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW21lc3NhZ2VdIFN0YXR1cyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMuU3RhdHVzQ29kZXxudWxsfSBbY29kZV0gU3RhdHVzIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0YXR1cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgU3RhdHVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVN0YXR1cz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3RhdHVzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN0YXR1cyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLnByb3RvdHlwZS5tZXNzYWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN0YXR1cyBjb2RlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5TdGF0dXNDb2RlfG51bGx8dW5kZWZpbmVkfSBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5wcm90b3R5cGUuY29kZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFN0YXR1cyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklTdGF0dXM9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzfSBTdGF0dXMgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXMocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3RhdHVzIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3RhdHVzfSBtZXNzYWdlIFN0YXR1cyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5zdHJpbmcobWVzc2FnZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvZGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImNvZGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAwID0qLyAyNCkuaW50MzIobWVzc2FnZS5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3RhdHVzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5JU3RhdHVzfSBtZXNzYWdlIFN0YXR1cyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTdGF0dXMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzfSBTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXNzYWdlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvZGUgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTdGF0dXMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzfSBTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFN0YXR1cyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1lc3NhZ2U6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY29kZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJjb2RlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2RlOiBlbnVtIHZhbHVlIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBTdGF0dXMgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c30gU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm1lc3NhZ2UgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2UgPSBTdHJpbmcob2JqZWN0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvYmplY3QuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmNvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29kZSA9IG9iamVjdC5jb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNUQVRVU19DT0RFX1VOU0VUXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvZGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU1RBVFVTX0NPREVfT0tcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29kZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTVEFUVVNfQ09ERV9FUlJPUlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb2RlID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIFN0YXR1cyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzfSBtZXNzYWdlIFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY29kZSA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/IFwiU1RBVFVTX0NPREVfVU5TRVRcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1lc3NhZ2UgPSBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb2RlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvZGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvZGUgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5TdGF0dXNDb2RlW21lc3NhZ2UuY29kZV0gPT09IHVuZGVmaW5lZCA/IG1lc3NhZ2UuY29kZSA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3RhdHVzLlN0YXR1c0NvZGVbbWVzc2FnZS5jb2RlXSA6IG1lc3NhZ2UuY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFN0YXR1cyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN0YXR1cy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1c1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3RhdHVzQ29kZSBlbnVtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbmFtZSBvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlN0YXR1cy5TdGF0dXNDb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBlbnVtIHtudW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTVEFUVVNfQ09ERV9VTlNFVD0wIFNUQVRVU19DT0RFX1VOU0VUIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTVEFUVVNfQ09ERV9PSz0xIFNUQVRVU19DT0RFX09LIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTVEFUVVNfQ09ERV9FUlJPUj0yIFNUQVRVU19DT0RFX0VSUk9SIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdGF0dXMuU3RhdHVzQ29kZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzQnlJZCA9IHt9LCB2YWx1ZXMgPSBPYmplY3QuY3JlYXRlKHZhbHVlc0J5SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMF0gPSBcIlNUQVRVU19DT0RFX1VOU0VUXCJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzFdID0gXCJTVEFUVVNfQ09ERV9PS1wiXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyXSA9IFwiU1RBVFVTX0NPREVfRVJST1JcIl0gPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNwYW5GbGFncyBlbnVtLlxuICAgICAgICAgICAgICAgICAqIEBuYW1lIG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuU3BhbkZsYWdzXG4gICAgICAgICAgICAgICAgICogQGVudW0ge251bWJlcn1cbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9GTEFHU19ET19OT1RfVVNFPTAgU1BBTl9GTEFHU19ET19OT1RfVVNFIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNQQU5fRkxBR1NfVFJBQ0VfRkxBR1NfTUFTSz0yNTUgU1BBTl9GTEFHU19UUkFDRV9GTEFHU19NQVNLIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNQQU5fRkxBR1NfQ09OVEVYVF9IQVNfSVNfUkVNT1RFX01BU0s9MjU2IFNQQU5fRkxBR1NfQ09OVEVYVF9IQVNfSVNfUkVNT1RFX01BU0sgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU1BBTl9GTEFHU19DT05URVhUX0lTX1JFTU9URV9NQVNLPTUxMiBTUEFOX0ZMQUdTX0NPTlRFWFRfSVNfUkVNT1RFX01BU0sgdmFsdWVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2MS5TcGFuRmxhZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzQnlJZCA9IHt9LCB2YWx1ZXMgPSBPYmplY3QuY3JlYXRlKHZhbHVlc0J5SWQpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFswXSA9IFwiU1BBTl9GTEFHU19ET19OT1RfVVNFXCJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMjU1XSA9IFwiU1BBTl9GTEFHU19UUkFDRV9GTEFHU19NQVNLXCJdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyNTZdID0gXCJTUEFOX0ZMQUdTX0NPTlRFWFRfSEFTX0lTX1JFTU9URV9NQVNLXCJdID0gMjU2O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFs1MTJdID0gXCJTUEFOX0ZMQUdTX0NPTlRFWFRfSVNfUkVNT1RFX01BU0tcIl0gPSA1MTI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjE7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYWNlO1xuICAgICAgICB9KSgpO1xuICAgICAgICBwcm90by5jb2xsZWN0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOYW1lc3BhY2UgY29sbGVjdG9yLlxuICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG9cbiAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGNvbGxlY3RvciA9IHt9O1xuICAgICAgICAgICAgY29sbGVjdG9yLnRyYWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgdHJhY2UuXG4gICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yXG4gICAgICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHZhciB0cmFjZSA9IHt9O1xuICAgICAgICAgICAgICAgIHRyYWNlLnYxID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSB2MS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHZhciB2MSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2MS5UcmFjZVNlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFRyYWNlU2VydmljZSBzZXJ2aWNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBUcmFjZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBleHRlbmRzICRwcm90b2J1Zi5ycGMuU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYWNlU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm90b2J1Zi5ycGMuU2VydmljZS5jYWxsKHRoaXMsIHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIChUcmFjZVNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgkcHJvdG9idWYucnBjLlNlcnZpY2UucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBUcmFjZVNlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgbmV3IFRyYWNlU2VydmljZSBzZXJ2aWNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcnBjIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLlRyYWNlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUlBDSW1wbH0gcnBjSW1wbCBSUEMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcXVlc3REZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc3BvbnNlRGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge1RyYWNlU2VydmljZX0gUlBDIHNlcnZpY2UuIFVzZWZ1bCB3aGVyZSByZXF1ZXN0cyBhbmQvb3IgcmVzcG9uc2VzIGFyZSBzdHJlYW1lZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhY2VTZXJ2aWNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5UcmFjZVNlcnZpY2UjZXhwb3J0X30uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuVHJhY2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZWRlZiBFeHBvcnRDYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBbcmVzcG9uc2VdIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbHMgRXhwb3J0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLlRyYWNlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSByZXF1ZXN0IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuVHJhY2VTZXJ2aWNlLkV4cG9ydENhbGxiYWNrfSBjYWxsYmFjayBOb2RlLXN0eWxlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIHRoZSBlcnJvciwgaWYgYW55LCBhbmQgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdmFyaWF0aW9uIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyYWNlU2VydmljZS5wcm90b3R5cGVbXCJleHBvcnRcIl0gPSBmdW5jdGlvbiBleHBvcnRfKHJlcXVlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChleHBvcnRfLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSwgcmVxdWVzdCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJuYW1lXCIsIHsgdmFsdWU6IFwiRXhwb3J0XCIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENhbGxzIEV4cG9ydC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBleHBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5UcmFjZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdH0gcmVxdWVzdCBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZT59IFByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB2YXJpYXRpb24gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhY2VTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLklSZXNvdXJjZVNwYW5zPnxudWxsfSBbcmVzb3VyY2VTcGFuc10gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCByZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3Q9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCByZXNvdXJjZVNwYW5zLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8udHJhY2UudjEuSVJlc291cmNlU3BhbnM+fSByZXNvdXJjZVNwYW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QucHJvdG90eXBlLnJlc291cmNlU3BhbnMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3Q9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZVNwYW5zICE9IG51bGwgJiYgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMuZW5jb2RlKG1lc3NhZ2UucmVzb3VyY2VTcGFuc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSBtZXNzYWdlIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UucmVzb3VyY2VTcGFucyAmJiBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlU3BhbnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VTcGFuc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5yZXNvdXJjZVNwYW5zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlU3BhbnM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2VTcGFuc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VTcGFucy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3R9IEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZXNvdXJjZVNwYW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QucmVzb3VyY2VTcGFucykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZVNwYW5zOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LnJlc291cmNlU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlU3BhbnNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QucmVzb3VyY2VTcGFuczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZVNwYW5zW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by50cmFjZS52MS5SZXNvdXJjZVNwYW5zLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlU3BhbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0fSBtZXNzYWdlIEV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VTcGFucyAmJiBtZXNzYWdlLnJlc291cmNlU3BhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5yZXNvdXJjZVNwYW5zLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlU3BhbnNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnRyYWNlLnYxLlJlc291cmNlU3BhbnMudG9PYmplY3QobWVzc2FnZS5yZXNvdXJjZVNwYW5zW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzfG51bGx9IFtwYXJ0aWFsU3VjY2Vzc10gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgcGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIHBhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3N8bnVsbHx1bmRlZmluZWR9IHBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5wcm90b3R5cGUucGFydGlhbFN1Y2Nlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZX0gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLklFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZX0gbWVzc2FnZSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInBhcnRpYWxTdWNjZXNzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmVuY29kZShtZXNzYWdlLnBhcnRpYWxTdWNjZXNzLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBtZXNzYWdlIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZX0gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInBhcnRpYWxTdWNjZXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJwYXJ0aWFsU3VjY2Vzcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlfSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnBhcnRpYWxTdWNjZXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucGFydGlhbFN1Y2Nlc3MgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UucGFydGlhbFN1Y2Nlc3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdChvYmplY3QucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZX0gbWVzc2FnZSBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJ0aWFsU3VjY2VzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MudG9PYmplY3QobWVzc2FnZS5wYXJ0aWFsU3VjY2Vzcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2UgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlU2VydmljZVJlc3BvbnNlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2VcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwb3J0VHJhY2VTZXJ2aWNlUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3JlamVjdGVkU3BhbnNdIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgcmVqZWN0ZWRTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW2Vycm9yTWVzc2FnZV0gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIHJlamVjdGVkU3BhbnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gcmVqZWN0ZWRTcGFuc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS5yZWplY3RlZFNwYW5zID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBlcnJvck1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS5lcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzfSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuSUV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3N9IG1lc3NhZ2UgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZWplY3RlZFNwYW5zICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJyZWplY3RlZFNwYW5zXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovIDgpLmludDY0KG1lc3NhZ2UucmVqZWN0ZWRTcGFucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJlcnJvck1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLnN0cmluZyhtZXNzYWdlLmVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5JRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkU3BhbnMgPSByZWFkZXIuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXJyb3JNZXNzYWdlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzfSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRTcGFuc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZFNwYW5zKSAmJiAhKG1lc3NhZ2UucmVqZWN0ZWRTcGFucyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZFNwYW5zLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UucmVqZWN0ZWRTcGFucy5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZWplY3RlZFNwYW5zOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UuZXJyb3JNZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImVycm9yTWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5FeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlamVjdGVkU3BhbnMgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5yZWplY3RlZFNwYW5zID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LnJlamVjdGVkU3BhbnMpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnJlamVjdGVkU3BhbnMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkU3BhbnMgPSBwYXJzZUludChvYmplY3QucmVqZWN0ZWRTcGFucywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnJlamVjdGVkU3BhbnMgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkU3BhbnMgPSBvYmplY3QucmVqZWN0ZWRTcGFucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5yZWplY3RlZFNwYW5zID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZFNwYW5zID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5yZWplY3RlZFNwYW5zLmxvdyA+Pj4gMCwgb2JqZWN0LnJlamVjdGVkU3BhbnMuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmVycm9yTWVzc2FnZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yTWVzc2FnZSA9IFN0cmluZyhvYmplY3QuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3MudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZFNwYW5zID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWRTcGFucyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkU3BhbnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRTcGFuc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnJlamVjdGVkU3BhbnMgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWRTcGFucyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnJlamVjdGVkU3BhbnMpIDogbWVzc2FnZS5yZWplY3RlZFNwYW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWRTcGFucyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5yZWplY3RlZFNwYW5zKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnJlamVjdGVkU3BhbnMubG93ID4+PiAwLCBtZXNzYWdlLnJlamVjdGVkU3BhbnMuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UucmVqZWN0ZWRTcGFucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXJyb3JNZXNzYWdlID0gbWVzc2FnZS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2VzcyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxLkV4cG9ydFRyYWNlUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzcy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IudHJhY2UudjEuRXhwb3J0VHJhY2VQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRUcmFjZVBhcnRpYWxTdWNjZXNzO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjE7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhY2U7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgY29sbGVjdG9yLm1ldHJpY3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSBtZXRyaWNzLlxuICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3RvclxuICAgICAgICAgICAgICAgICAqIEBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgbWV0cmljcyA9IHt9O1xuICAgICAgICAgICAgICAgIG1ldHJpY3MudjEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIHYxLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdjEuTWV0cmljc1NlcnZpY2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1ldHJpY3NTZXJ2aWNlIHNlcnZpY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTWV0cmljc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBleHRlbmRzICRwcm90b2J1Zi5ycGMuU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1ldHJpY3NTZXJ2aWNlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb3RvYnVmLnJwYy5TZXJ2aWNlLmNhbGwodGhpcywgcnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKE1ldHJpY3NTZXJ2aWNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoJHByb3RvYnVmLnJwYy5TZXJ2aWNlLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gTWV0cmljc1NlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgbmV3IE1ldHJpY3NTZXJ2aWNlIHNlcnZpY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBycGMgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5NZXRyaWNzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUlBDSW1wbH0gcnBjSW1wbCBSUEMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcXVlc3REZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc3BvbnNlRGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge01ldHJpY3NTZXJ2aWNlfSBSUEMgc2VydmljZS4gVXNlZnVsIHdoZXJlIHJlcXVlc3RzIGFuZC9vciByZXNwb25zZXMgYXJlIHN0cmVhbWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBNZXRyaWNzU2VydmljZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5NZXRyaWNzU2VydmljZSNleHBvcnRffS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLk1ldHJpY3NTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZWRlZiBFeHBvcnRDYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZX0gW3Jlc3BvbnNlXSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbHMgRXhwb3J0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuTWV0cmljc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3R9IHJlcXVlc3QgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuTWV0cmljc1NlcnZpY2UuRXhwb3J0Q2FsbGJhY2t9IGNhbGxiYWNrIE5vZGUtc3R5bGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggdGhlIGVycm9yLCBpZiBhbnksIGFuZCBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHZhcmlhdGlvbiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXRyaWNzU2VydmljZS5wcm90b3R5cGVbXCJleHBvcnRcIl0gPSBmdW5jdGlvbiBleHBvcnRfKHJlcXVlc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjQ2FsbChleHBvcnRfLCAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCwgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLCByZXF1ZXN0LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBcIm5hbWVcIiwgeyB2YWx1ZTogXCJFeHBvcnRcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ2FsbHMgRXhwb3J0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuTWV0cmljc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3R9IHJlcXVlc3QgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2U+fSBQcm9taXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdmFyaWF0aW9uIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1ldHJpY3NTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JUmVzb3VyY2VNZXRyaWNzPnxudWxsfSBbcmVzb3VyY2VNZXRyaWNzXSBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgcmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3Q9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCByZXNvdXJjZU1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3M+fSByZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5wcm90b3R5cGUucmVzb3VyY2VNZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0fSBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gbWVzc2FnZSBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgIT0gbnVsbCAmJiBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmVuY29kZShtZXNzYWdlLnJlc291cmNlTWV0cmljc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3R9IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzICYmIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVzb3VyY2VNZXRyaWNzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLnJlc291cmNlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZU1ldHJpY3MuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlc291cmNlTWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LnJlc291cmNlTWV0cmljcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QucmVzb3VyY2VNZXRyaWNzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5yZXNvdXJjZU1ldHJpY3NbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTWV0cmljczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3NbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlTWV0cmljc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0fSBtZXNzYWdlIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzICYmIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VNZXRyaWNzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy50b09iamVjdChtZXNzYWdlLnJlc291cmNlTWV0cmljc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3N8bnVsbH0gW3BhcnRpYWxTdWNjZXNzXSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIHBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgcGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3N8bnVsbHx1bmRlZmluZWR9IHBhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5wcm90b3R5cGUucGFydGlhbFN1Y2Nlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlfSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicGFydGlhbFN1Y2Nlc3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmVuY29kZShtZXNzYWdlLnBhcnRpYWxTdWNjZXNzLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZX0gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlfSBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5KG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJwYXJ0aWFsU3VjY2Vzcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZX0gRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnBhcnRpYWxTdWNjZXNzICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZS5wYXJ0aWFsU3VjY2Vzczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdChvYmplY3QucGFydGlhbFN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2V9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcnRpYWxTdWNjZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJwYXJ0aWFsU3VjY2Vzc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBhcnRpYWxTdWNjZXNzID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MudG9PYmplY3QobWVzc2FnZS5wYXJ0aWFsU3VjY2Vzcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVzcG9uc2UuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1NlcnZpY2VSZXNwb25zZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGFuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3JlamVjdGVkRGF0YVBvaW50c10gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIHJlamVjdGVkRGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW2Vycm9yTWVzc2FnZV0gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5JRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIHJlamVjdGVkRGF0YVBvaW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSByZWplY3RlZERhdGFQb2ludHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5wcm90b3R5cGUucmVqZWN0ZWREYXRhUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIGVycm9yTWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLklFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3N9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJyZWplY3RlZERhdGFQb2ludHNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMCA9Ki8gOCkuaW50NjQobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yTWVzc2FnZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDIgPSovIDE4KS5zdHJpbmcobWVzc2FnZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuSUV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gbWVzc2FnZSBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMgPSByZWFkZXIuaW50NjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXJyb3JNZXNzYWdlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc30gRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVqZWN0ZWREYXRhUG9pbnRzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cykgJiYgIShtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVqZWN0ZWREYXRhUG9pbnRzOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXJyb3JNZXNzYWdlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UuZXJyb3JNZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImVycm9yTWVzc2FnZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyA9IHBhcnNlSW50KG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyA9IG9iamVjdC5yZWplY3RlZERhdGFQb2ludHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cy5sb3cgPj4+IDAsIG9iamVjdC5yZWplY3RlZERhdGFQb2ludHMuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmVycm9yTWVzc2FnZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yTWVzc2FnZSA9IFN0cmluZyhvYmplY3QuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3N9IG1lc3NhZ2UgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzcy50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkRGF0YVBvaW50cyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZWplY3RlZERhdGFQb2ludHNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzKSA6IG1lc3NhZ2UucmVqZWN0ZWREYXRhUG9pbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVqZWN0ZWREYXRhUG9pbnRzID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHMubG93ID4+PiAwLCBtZXNzYWdlLnJlamVjdGVkRGF0YVBvaW50cy5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5yZWplY3RlZERhdGFQb2ludHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmVycm9yTWVzc2FnZSA9IG1lc3NhZ2UuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2VzcyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MS5FeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TWV0cmljc1BhcnRpYWxTdWNjZXNzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxLkV4cG9ydE1ldHJpY3NQYXJ0aWFsU3VjY2Vzc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHBvcnRNZXRyaWNzUGFydGlhbFN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2MTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRyaWNzO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGNvbGxlY3Rvci5sb2dzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBOYW1lc3BhY2UgbG9ncy5cbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3JcbiAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIGxvZ3MgPSB7fTtcbiAgICAgICAgICAgICAgICBsb2dzLnYxID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE5hbWVzcGFjZSB2MS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0ge307XG4gICAgICAgICAgICAgICAgICAgIHYxLkxvZ3NTZXJ2aWNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBMb2dzU2VydmljZSBzZXJ2aWNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIExvZ3NTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZXh0ZW5kcyAkcHJvdG9idWYucnBjLlNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUlBDSW1wbH0gcnBjSW1wbCBSUEMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcXVlc3REZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc3BvbnNlRGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMb2dzU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm90b2J1Zi5ycGMuU2VydmljZS5jYWxsKHRoaXMsIHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIChMb2dzU2VydmljZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCRwcm90b2J1Zi5ycGMuU2VydmljZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IExvZ3NTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIG5ldyBMb2dzU2VydmljZSBzZXJ2aWNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcnBjIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuTG9nc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtMb2dzU2VydmljZX0gUlBDIHNlcnZpY2UuIFVzZWZ1bCB3aGVyZSByZXF1ZXN0cyBhbmQvb3IgcmVzcG9uc2VzIGFyZSBzdHJlYW1lZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nc1NlcnZpY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuTG9nc1NlcnZpY2UjZXhwb3J0X30uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5Mb2dzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGVkZWYgRXhwb3J0Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2V9IFtyZXNwb25zZV0gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENhbGxzIEV4cG9ydC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBleHBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkxvZ3NTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0fSByZXF1ZXN0IEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkxvZ3NTZXJ2aWNlLkV4cG9ydENhbGxiYWNrfSBjYWxsYmFjayBOb2RlLXN0eWxlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIHRoZSBlcnJvciwgaWYgYW55LCBhbmQgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB2YXJpYXRpb24gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTG9nc1NlcnZpY2UucHJvdG90eXBlW1wiZXhwb3J0XCJdID0gZnVuY3Rpb24gZXhwb3J0XyhyZXF1ZXN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY0NhbGwoZXhwb3J0XywgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QsICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSwgcmVxdWVzdCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJuYW1lXCIsIHsgdmFsdWU6IFwiRXhwb3J0XCIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENhbGxzIEV4cG9ydC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBleHBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkxvZ3NTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0fSByZXF1ZXN0IEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge1Byb21pc2U8b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlPn0gUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHZhcmlhdGlvbiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb2dzU2VydmljZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVJlc291cmNlTG9ncz58bnVsbH0gW3Jlc291cmNlTG9nc10gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IHJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhbiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgcmVzb3VyY2VMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JUmVzb3VyY2VMb2dzPn0gcmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QucHJvdG90eXBlLnJlc291cmNlTG9ncyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlcXVlc3Q9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdH0gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IG1lc3NhZ2UgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VMb2dzICE9IG51bGwgJiYgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5lbmNvZGUobWVzc2FnZS5yZXNvdXJjZUxvZ3NbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3QudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0fSBtZXNzYWdlIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0fSBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnJlc291cmNlTG9ncyAmJiBtZXNzYWdlLnJlc291cmNlTG9ncy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VMb2dzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlTG9nc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VMb2dzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnZlcmlmeShtZXNzYWdlLnJlc291cmNlTG9nc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2VMb2dzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3R9IEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5yZXNvdXJjZUxvZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnJlc291cmNlTG9nczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LnJlc291cmNlTG9ncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QucmVzb3VyY2VMb2dzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5yZXNvdXJjZUxvZ3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5mcm9tT2JqZWN0KG9iamVjdC5yZXNvdXJjZUxvZ3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdH0gbWVzc2FnZSBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0LnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTG9ncyAmJiBtZXNzYWdlLnJlc291cmNlTG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTG9nc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MudG9PYmplY3QobWVzc2FnZS5yZXNvdXJjZUxvZ3Nbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB2MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzfG51bGx9IFtwYXJ0aWFsU3VjY2Vzc10gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBwYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIHBhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzfG51bGx8dW5kZWZpbmVkfSBwYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UucHJvdG90eXBlLnBhcnRpYWxTdWNjZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZX0gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlfSBtZXNzYWdlIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInBhcnRpYWxTdWNjZXNzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5lbmNvZGUobWVzc2FnZS5wYXJ0aWFsU3VjY2Vzcywgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlfSBtZXNzYWdlIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2V9IEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZX0gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBhcnRpYWxTdWNjZXNzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInBhcnRpYWxTdWNjZXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLnZlcmlmeShtZXNzYWdlLnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicGFydGlhbFN1Y2Nlc3MuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2V9IEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5wYXJ0aWFsU3VjY2VzcyAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UucGFydGlhbFN1Y2Nlc3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLmZyb21PYmplY3Qob2JqZWN0LnBhcnRpYWxTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlfSBtZXNzYWdlIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJ0aWFsU3VjY2VzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicGFydGlhbFN1Y2Nlc3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wYXJ0aWFsU3VjY2VzcyA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLnRvT2JqZWN0KG1lc3NhZ2UucGFydGlhbFN1Y2Nlc3MsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2UgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzU2VydmljZVJlc3BvbnNlLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NTZXJ2aWNlUmVzcG9uc2VcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtyZWplY3RlZExvZ1JlY29yZHNdIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyByZWplY3RlZExvZ1JlY29yZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtlcnJvck1lc3NhZ2VdIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuSUV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyByZWplY3RlZExvZ1JlY29yZHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gcmVqZWN0ZWRMb2dSZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MucHJvdG90eXBlLnJlamVjdGVkTG9nUmVjb3JkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBlcnJvck1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLnByb3RvdHlwZS5lcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5JRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzfSBtZXNzYWdlIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovIDgpLmludDY0KG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5lcnJvck1lc3NhZ2UgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImVycm9yTWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuc3RyaW5nKG1lc3NhZ2UuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLklFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IG1lc3NhZ2UgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzID0gcmVhZGVyLmludDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yTWVzc2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3N9IEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlamVjdGVkTG9nUmVjb3Jkc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMpICYmICEobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlamVjdGVkTG9nUmVjb3JkczogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3JNZXNzYWdlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImVycm9yTWVzc2FnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLmVycm9yTWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJlcnJvck1lc3NhZ2U6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzfSBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LnJlamVjdGVkTG9nUmVjb3JkcykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgPSBwYXJzZUludChvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgPSBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnJlamVjdGVkTG9nUmVjb3JkcyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMubG93ID4+PiAwLCBvYmplY3QucmVqZWN0ZWRMb2dSZWNvcmRzLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5lcnJvck1lc3NhZ2UgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvck1lc3NhZ2UgPSBTdHJpbmcob2JqZWN0LmVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYW4gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzfSBtZXNzYWdlIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZWplY3RlZExvZ1JlY29yZHMgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicmVqZWN0ZWRMb2dSZWNvcmRzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkTG9nUmVjb3JkcyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcykgOiBtZXNzYWdlLnJlamVjdGVkTG9nUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlamVjdGVkTG9nUmVjb3JkcyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzLmxvdyA+Pj4gMCwgbWVzc2FnZS5yZWplY3RlZExvZ1JlY29yZHMuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UucmVqZWN0ZWRMb2dSZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yTWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJlcnJvck1lc3NhZ2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5lcnJvck1lc3NhZ2UgPSBtZXNzYWdlLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3MgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5sb2dzLnYxLkV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydExvZ3NQYXJ0aWFsU3VjY2Vzcy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MS5FeHBvcnRMb2dzUGFydGlhbFN1Y2Nlc3NcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwb3J0TG9nc1BhcnRpYWxTdWNjZXNzO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjE7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9ncztcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdG9yO1xuICAgICAgICB9KSgpO1xuICAgICAgICBwcm90by5tZXRyaWNzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTmFtZXNwYWNlIG1ldHJpY3MuXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90b1xuICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgbWV0cmljcyA9IHt9O1xuICAgICAgICAgICAgbWV0cmljcy52MSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIHYxLlxuICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3NcbiAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIHYxID0ge307XG4gICAgICAgICAgICAgICAgdjEuTWV0cmljc0RhdGEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIE1ldHJpY3NEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSU1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JUmVzb3VyY2VNZXRyaWNzPnxudWxsfSBbcmVzb3VyY2VNZXRyaWNzXSBNZXRyaWNzRGF0YSByZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1ldHJpY3NEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIE1ldHJpY3NEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklNZXRyaWNzRGF0YT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWV0cmljc0RhdGEocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpY3NEYXRhIHJlc291cmNlTWV0cmljcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JUmVzb3VyY2VNZXRyaWNzPn0gcmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWNzRGF0YS5wcm90b3R5cGUucmVzb3VyY2VNZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgTWV0cmljc0RhdGEgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljc0RhdGE9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YX0gTWV0cmljc0RhdGEgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1ldHJpY3NEYXRhKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIE1ldHJpY3NEYXRhIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpY3NEYXRhfSBtZXNzYWdlIE1ldHJpY3NEYXRhIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmVuY29kZShtZXNzYWdlLnJlc291cmNlTWV0cmljc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTWV0cmljc0RhdGEgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljc0RhdGF9IG1lc3NhZ2UgTWV0cmljc0RhdGEgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWNzRGF0YS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBNZXRyaWNzRGF0YSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YX0gTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWNzRGF0YS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MgJiYgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIE1ldHJpY3NEYXRhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhfSBNZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBNZXRyaWNzRGF0YSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZU1ldHJpY3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5yZXNvdXJjZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlTWV0cmljcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnZlcmlmeShtZXNzYWdlLnJlc291cmNlTWV0cmljc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTWV0cmljcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIE1ldHJpY3NEYXRhIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YX0gTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlc291cmNlTWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QucmVzb3VyY2VNZXRyaWNzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YS5yZXNvdXJjZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlTWV0cmljc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGEucmVzb3VyY2VNZXRyaWNzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5mcm9tT2JqZWN0KG9iamVjdC5yZXNvdXJjZU1ldHJpY3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgTWV0cmljc0RhdGEgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY3NEYXRhfSBtZXNzYWdlIE1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljc0RhdGEudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzICYmIG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UucmVzb3VyY2VNZXRyaWNzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VNZXRyaWNzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy50b09iamVjdChtZXNzYWdlLnJlc291cmNlTWV0cmljc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBNZXRyaWNzRGF0YSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIE1ldHJpY3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpY3NEYXRhLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNzRGF0YVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0cmljc0RhdGE7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5SZXNvdXJjZU1ldHJpY3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFJlc291cmNlTWV0cmljcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElSZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZXxudWxsfSBbcmVzb3VyY2VdIFJlc291cmNlTWV0cmljcyByZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVNjb3BlTWV0cmljcz58bnVsbH0gW3Njb3BlTWV0cmljc10gUmVzb3VyY2VNZXRyaWNzIHNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBSZXNvdXJjZU1ldHJpY3Mgc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBSZXNvdXJjZU1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgUmVzb3VyY2VNZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JUmVzb3VyY2VNZXRyaWNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZU1ldHJpY3MocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29wZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlTWV0cmljcyByZXNvdXJjZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5JUmVzb3VyY2V8bnVsbHx1bmRlZmluZWR9IHJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLnByb3RvdHlwZS5yZXNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZU1ldHJpY3Mgc2NvcGVNZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTY29wZU1ldHJpY3M+fSBzY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MucHJvdG90eXBlLnNjb3BlTWV0cmljcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZU1ldHJpY3Mgc2NoZW1hVXJsLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHNjaGVtYVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgUmVzb3VyY2VNZXRyaWNzIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3N9IFJlc291cmNlTWV0cmljcyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlTWV0cmljcyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklSZXNvdXJjZU1ldHJpY3N9IG1lc3NhZ2UgUmVzb3VyY2VNZXRyaWNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicmVzb3VyY2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbmNvZGUobWVzc2FnZS5yZXNvdXJjZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlTWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2Uuc2NvcGVNZXRyaWNzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Uuc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLmVuY29kZShtZXNzYWdlLnNjb3BlTWV0cmljc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlTWV0cmljcyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVJlc291cmNlTWV0cmljc30gbWVzc2FnZSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU1ldHJpY3MuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2VNZXRyaWNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3N9IFJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2Uuc2NvcGVNZXRyaWNzICYmIG1lc3NhZ2Uuc2NvcGVNZXRyaWNzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVNZXRyaWNzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2VNZXRyaWNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3N9IFJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgUmVzb3VyY2VNZXRyaWNzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2UuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlTWV0cmljcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZU1ldHJpY3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5zY29wZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnNjb3BlTWV0cmljcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnZlcmlmeShtZXNzYWdlLnNjb3BlTWV0cmljc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlTWV0cmljcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNjaGVtYVVybCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3N9IFJlc291cmNlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5yZXNvdXJjZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NvcGVNZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5zY29wZU1ldHJpY3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlJlc291cmNlTWV0cmljcy5zY29wZU1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVNZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3Quc2NvcGVNZXRyaWNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNjb3BlTWV0cmljc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlTWV0cmljc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MuZnJvbU9iamVjdChvYmplY3Quc2NvcGVNZXRyaWNzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBSZXNvdXJjZU1ldHJpY3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3N9IG1lc3NhZ2UgUmVzb3VyY2VNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VNZXRyaWNzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZU1ldHJpY3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudG9PYmplY3QobWVzc2FnZS5yZXNvdXJjZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZU1ldHJpY3MgJiYgbWVzc2FnZS5zY29wZU1ldHJpY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5zY29wZU1ldHJpY3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZU1ldHJpY3Nbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnRvT2JqZWN0KG1lc3NhZ2Uuc2NvcGVNZXRyaWNzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IG1lc3NhZ2Uuc2NoZW1hVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgUmVzb3VyY2VNZXRyaWNzIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBSZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5SZXNvdXJjZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTWV0cmljcy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuUmVzb3VyY2VNZXRyaWNzXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZU1ldHJpY3M7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TY29wZU1ldHJpY3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFNjb3BlTWV0cmljcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElTY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JSW5zdHJ1bWVudGF0aW9uU2NvcGV8bnVsbH0gW3Njb3BlXSBTY29wZU1ldHJpY3Mgc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklNZXRyaWM+fG51bGx9IFttZXRyaWNzXSBTY29wZU1ldHJpY3MgbWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBTY29wZU1ldHJpY3Mgc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBTY29wZU1ldHJpY3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgU2NvcGVNZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU2NvcGVNZXRyaWNzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTY29wZU1ldHJpY3MocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTY29wZU1ldHJpY3Mgc2NvcGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZXxudWxsfHVuZGVmaW5lZH0gc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MucHJvdG90eXBlLnNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNjb3BlTWV0cmljcyBtZXRyaWNzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklNZXRyaWM+fSBtZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLnByb3RvdHlwZS5tZXRyaWNzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNjb3BlTWV0cmljcyBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBTY29wZU1ldHJpY3MgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVNjb3BlTWV0cmljcz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc30gU2NvcGVNZXRyaWNzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2NvcGVNZXRyaWNzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFNjb3BlTWV0cmljcyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVNjb3BlTWV0cmljc30gbWVzc2FnZSBTY29wZU1ldHJpY3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY29wZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5lbmNvZGUobWVzc2FnZS5zY29wZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1ldHJpY3MgIT0gbnVsbCAmJiBtZXNzYWdlLm1ldHJpY3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5tZXRyaWNzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLmVuY29kZShtZXNzYWdlLm1ldHJpY3NbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5zdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTY29wZU1ldHJpY3MgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTY29wZU1ldHJpY3N9IG1lc3NhZ2UgU2NvcGVNZXRyaWNzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFNjb3BlTWV0cmljcyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzfSBTY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5tZXRyaWNzICYmIG1lc3NhZ2UubWV0cmljcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRyaWNzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU2NvcGVNZXRyaWNzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3N9IFNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgU2NvcGVNZXRyaWNzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTWV0cmljcy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnZlcmlmeShtZXNzYWdlLnNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXRyaWNzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1ldHJpY3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5tZXRyaWNzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWV0cmljczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UubWV0cmljcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLnZlcmlmeShtZXNzYWdlLm1ldHJpY3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtZXRyaWNzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFNjb3BlTWV0cmljcyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc30gU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZU1ldHJpY3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY29wZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc2NvcGUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLnNjb3BlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmZyb21PYmplY3Qob2JqZWN0LnNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QubWV0cmljcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLm1ldHJpY3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lm1ldHJpY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QubWV0cmljc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU2NvcGVNZXRyaWNzLm1ldHJpY3M6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRyaWNzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5mcm9tT2JqZWN0KG9iamVjdC5tZXRyaWNzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTY29wZU1ldHJpY3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3N9IG1lc3NhZ2UgU2NvcGVNZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS50b09iamVjdChtZXNzYWdlLnNjb3BlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1ldHJpY3MgJiYgbWVzc2FnZS5tZXRyaWNzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tZXRyaWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLm1ldHJpY3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5tZXRyaWNzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy50b09iamVjdChtZXNzYWdlLm1ldHJpY3Nbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gbWVzc2FnZS5zY2hlbWFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBTY29wZU1ldHJpY3MgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlNjb3BlTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVNZXRyaWNzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TY29wZU1ldHJpY3NcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjb3BlTWV0cmljcztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLk1ldHJpYyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBQcm9wZXJ0aWVzIG9mIGEgTWV0cmljLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSU1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbbmFtZV0gTWV0cmljIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW2Rlc2NyaXB0aW9uXSBNZXRyaWMgZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gW3VuaXRdIE1ldHJpYyB1bml0XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklHYXVnZXxudWxsfSBbZ2F1Z2VdIE1ldHJpYyBnYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtfG51bGx9IFtzdW1dIE1ldHJpYyBzdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbXxudWxsfSBbaGlzdG9ncmFtXSBNZXRyaWMgaGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeHBvbmVudGlhbEhpc3RvZ3JhbXxudWxsfSBbZXhwb25lbnRpYWxIaXN0b2dyYW1dIE1ldHJpYyBleHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeXxudWxsfSBbc3VtbWFyeV0gTWV0cmljIHN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbbWV0YWRhdGFdIE1ldHJpYyBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTWV0cmljLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIE1ldHJpYy5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSU1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpYz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWV0cmljKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0YWRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyBuYW1lLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLm5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIGRlc2NyaXB0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnByb3RvdHlwZS5kZXNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBNZXRyaWMgdW5pdC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSB1bml0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnByb3RvdHlwZS51bml0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyBnYXVnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklHYXVnZXxudWxsfHVuZGVmaW5lZH0gZ2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLmdhdWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyBzdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtfG51bGx8dW5kZWZpbmVkfSBzdW1cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLnN1bSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBNZXRyaWMgaGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbXxudWxsfHVuZGVmaW5lZH0gaGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnByb3RvdHlwZS5oaXN0b2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIGV4cG9uZW50aWFsSGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtfG51bGx8dW5kZWZpbmVkfSBleHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUuZXhwb25lbnRpYWxIaXN0b2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTWV0cmljIHN1bW1hcnkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeXxudWxsfHVuZGVmaW5lZH0gc3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUuc3VtbWFyeSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBNZXRyaWMgbWV0YWRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5wcm90b3R5cGUubWV0YWRhdGEgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmVPZiBmaWVsZCBuYW1lcyBib3VuZCB0byB2aXJ0dWFsIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICAgICAgICAgICAgICAgICAgdmFyICRvbmVPZkZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE1ldHJpYyBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcImdhdWdlXCJ8XCJzdW1cInxcImhpc3RvZ3JhbVwifFwiZXhwb25lbnRpYWxIaXN0b2dyYW1cInxcInN1bW1hcnlcInx1bmRlZmluZWR9IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWV0cmljLnByb3RvdHlwZSwgXCJkYXRhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wiZ2F1Z2VcIiwgXCJzdW1cIiwgXCJoaXN0b2dyYW1cIiwgXCJleHBvbmVudGlhbEhpc3RvZ3JhbVwiLCBcInN1bW1hcnlcIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcigkb25lT2ZGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBNZXRyaWMgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpYz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY30gTWV0cmljIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWV0cmljKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIE1ldHJpYyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU1ldHJpY30gbWVzc2FnZSBNZXRyaWMgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kZXNjcmlwdGlvbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZGVzY3JpcHRpb25cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuc3RyaW5nKG1lc3NhZ2UuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudW5pdCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidW5pdFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5zdHJpbmcobWVzc2FnZS51bml0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmdhdWdlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJnYXVnZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZW5jb2RlKG1lc3NhZ2UuZ2F1Z2UsIHdyaXRlci51aW50MzIoLyogaWQgNSwgd2lyZVR5cGUgMiA9Ki8gNDIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN1bVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmVuY29kZShtZXNzYWdlLnN1bSwgd3JpdGVyLnVpbnQzMigvKiBpZCA3LCB3aXJlVHlwZSAyID0qLyA1OCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmhpc3RvZ3JhbSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiaGlzdG9ncmFtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0uZW5jb2RlKG1lc3NhZ2UuaGlzdG9ncmFtLCB3cml0ZXIudWludDMyKC8qIGlkIDksIHdpcmVUeXBlIDIgPSovIDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhwb25lbnRpYWxIaXN0b2dyYW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5lbmNvZGUobWVzc2FnZS5leHBvbmVudGlhbEhpc3RvZ3JhbSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxMCwgd2lyZVR5cGUgMiA9Ki8gODIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW1tYXJ5ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdW1tYXJ5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LmVuY29kZShtZXNzYWdlLnN1bW1hcnksIHdyaXRlci51aW50MzIoLyogaWQgMTEsIHdpcmVUeXBlIDIgPSovIDkwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWV0YWRhdGEgIT0gbnVsbCAmJiBtZXNzYWdlLm1ldGFkYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UubWV0YWRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmVuY29kZShtZXNzYWdlLm1ldGFkYXRhW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEyLCB3aXJlVHlwZSAyID0qLyA5OCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTWV0cmljIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTWV0cmljfSBtZXNzYWdlIE1ldHJpYyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBNZXRyaWMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY30gTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRlc2NyaXB0aW9uID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnVuaXQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2F1Z2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leHBvbmVudGlhbEhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdW1tYXJ5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UubWV0YWRhdGEgJiYgbWVzc2FnZS5tZXRhZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWV0YWRhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWV0YWRhdGEucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBNZXRyaWMgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY30gTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBNZXRyaWMgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTWV0cmljLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uYW1lICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJuYW1lOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRlc2NyaXB0aW9uXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5kZXNjcmlwdGlvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRlc2NyaXB0aW9uOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnVuaXQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidW5pdFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2UudW5pdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInVuaXQ6IHN0cmluZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2F1Z2UgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZ2F1Z2VcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRhdGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLnZlcmlmeShtZXNzYWdlLmdhdWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZ2F1Z2UuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuZGF0YSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kYXRhID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0udmVyaWZ5KG1lc3NhZ2Uuc3VtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3VtLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaGlzdG9ncmFtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImhpc3RvZ3JhbVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmRhdGEgPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGE6IG11bHRpcGxlIHZhbHVlc1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGF0YSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLnZlcmlmeShtZXNzYWdlLmhpc3RvZ3JhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImhpc3RvZ3JhbS5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV4cG9uZW50aWFsSGlzdG9ncmFtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuZGF0YSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kYXRhID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS52ZXJpZnkobWVzc2FnZS5leHBvbmVudGlhbEhpc3RvZ3JhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4cG9uZW50aWFsSGlzdG9ncmFtLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtbWFyeSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdW1tYXJ5XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuZGF0YSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kYXRhID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LnZlcmlmeShtZXNzYWdlLnN1bW1hcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdW1tYXJ5LlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWV0YWRhdGEgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5tZXRhZGF0YSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldGFkYXRhOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5tZXRhZGF0YS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS52ZXJpZnkobWVzc2FnZS5tZXRhZGF0YVtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1ldGFkYXRhLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgTWV0cmljIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljfSBNZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE1ldHJpYy5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm5hbWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm5hbWUgPSBTdHJpbmcob2JqZWN0Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kZXNjcmlwdGlvbiAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGVzY3JpcHRpb24gPSBTdHJpbmcob2JqZWN0LmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudW5pdCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudW5pdCA9IFN0cmluZyhvYmplY3QudW5pdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmdhdWdlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5nYXVnZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuZ2F1Z2U6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdhdWdlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLmZyb21PYmplY3Qob2JqZWN0LmdhdWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3VtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zdW0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljLnN1bTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bS5mcm9tT2JqZWN0KG9iamVjdC5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5oaXN0b2dyYW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0Lmhpc3RvZ3JhbSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuaGlzdG9ncmFtOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5oaXN0b2dyYW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtLmZyb21PYmplY3Qob2JqZWN0Lmhpc3RvZ3JhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmV4cG9uZW50aWFsSGlzdG9ncmFtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5leHBvbmVudGlhbEhpc3RvZ3JhbSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuZXhwb25lbnRpYWxIaXN0b2dyYW06IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmZyb21PYmplY3Qob2JqZWN0LmV4cG9uZW50aWFsSGlzdG9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3VtbWFyeSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc3VtbWFyeSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMuc3VtbWFyeTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtbWFyeSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LmZyb21PYmplY3Qob2JqZWN0LnN1bW1hcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5tZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QubWV0YWRhdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpYy5tZXRhZGF0YTogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRhZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lm1ldGFkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0Lm1ldGFkYXRhW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5NZXRyaWMubWV0YWRhdGE6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tZXRhZGF0YVtpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0Lm1ldGFkYXRhW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIE1ldHJpYyBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY30gbWVzc2FnZSBNZXRyaWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1ldGFkYXRhID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGVzY3JpcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC51bml0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5hbWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmFtZSA9IG1lc3NhZ2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRlc2NyaXB0aW9uXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZXNjcmlwdGlvbiA9IG1lc3NhZ2UuZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS51bml0ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInVuaXRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnVuaXQgPSBtZXNzYWdlLnVuaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5nYXVnZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJnYXVnZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5nYXVnZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS50b09iamVjdChtZXNzYWdlLmdhdWdlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhID0gXCJnYXVnZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdW0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLnRvT2JqZWN0KG1lc3NhZ2Uuc3VtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhID0gXCJzdW1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmhpc3RvZ3JhbSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJoaXN0b2dyYW1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaGlzdG9ncmFtID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS50b09iamVjdChtZXNzYWdlLmhpc3RvZ3JhbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YSA9IFwiaGlzdG9ncmFtXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leHBvbmVudGlhbEhpc3RvZ3JhbSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJleHBvbmVudGlhbEhpc3RvZ3JhbVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leHBvbmVudGlhbEhpc3RvZ3JhbSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS50b09iamVjdChtZXNzYWdlLmV4cG9uZW50aWFsSGlzdG9ncmFtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhID0gXCJleHBvbmVudGlhbEhpc3RvZ3JhbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtbWFyeSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdW1tYXJ5XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN1bW1hcnkgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeS50b09iamVjdChtZXNzYWdlLnN1bW1hcnksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGEgPSBcInN1bW1hcnlcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1ldGFkYXRhICYmIG1lc3NhZ2UubWV0YWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1ldGFkYXRhID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLm1ldGFkYXRhLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWV0YWRhdGFbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLm1ldGFkYXRhW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIE1ldHJpYyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTWV0cmljXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBNZXRyaWMuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk1ldHJpY1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0cmljO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuR2F1Z2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIEdhdWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50PnxudWxsfSBbZGF0YVBvaW50c10gR2F1Z2UgZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgR2F1Z2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgR2F1Z2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElHYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUdhdWdlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHYXVnZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdhdWdlIGRhdGFQb2ludHMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSU51bWJlckRhdGFQb2ludD59IGRhdGFQb2ludHNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEdhdWdlLnByb3RvdHlwZS5kYXRhUG9pbnRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgR2F1Z2UgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JR2F1Z2U9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZX0gR2F1Z2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEdhdWdlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdhdWdlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEdhdWdlIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUdhdWdlfSBtZXNzYWdlIEdhdWdlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmVuY29kZShtZXNzYWdlLmRhdGFQb2ludHNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEdhdWdlIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUdhdWdlfSBtZXNzYWdlIEdhdWdlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgR2F1Z2UgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2V9IEdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgR2F1Z2UgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2V9IEdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIEdhdWdlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC52ZXJpZnkobWVzc2FnZS5kYXRhUG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIEdhdWdlIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZX0gR2F1Z2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEdhdWdlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlLmRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmRhdGFQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZGF0YVBvaW50c1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2UuZGF0YVBvaW50czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmZyb21PYmplY3Qob2JqZWN0LmRhdGFQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgR2F1Z2UgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5HYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlfSBtZXNzYWdlIEdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgR2F1Z2UudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC50b09iamVjdChtZXNzYWdlLmRhdGFQb2ludHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgR2F1Z2UgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBHYXVnZVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkdhdWdlXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBHYXVnZS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuR2F1Z2VcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdhdWdlO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuU3VtID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBTdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50PnxudWxsfSBbZGF0YVBvaW50c10gU3VtIGRhdGFQb2ludHNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuQWdncmVnYXRpb25UZW1wb3JhbGl0eXxudWxsfSBbYWdncmVnYXRpb25UZW1wb3JhbGl0eV0gU3VtIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtib29sZWFufG51bGx9IFtpc01vbm90b25pY10gU3VtIGlzTW9ub3RvbmljXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBTdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgU3VtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdW0ocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW0gZGF0YVBvaW50cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50Pn0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW0gYWdncmVnYXRpb25UZW1wb3JhbGl0eS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHl8bnVsbHx1bmRlZmluZWR9IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0ucHJvdG90eXBlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3VtIGlzTW9ub3RvbmljLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufG51bGx8dW5kZWZpbmVkfSBpc01vbm90b25pY1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5wcm90b3R5cGUuaXNNb25vdG9uaWMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBTdW0gaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bX0gU3VtIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0uY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3VtKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFN1bSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bX0gbWVzc2FnZSBTdW0gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmVuY29kZShtZXNzYWdlLmRhdGFQb2ludHNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMSwgd2lyZVR5cGUgMiA9Ki8gMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki8gMTYpLmludDMyKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pc01vbm90b25pYyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiaXNNb25vdG9uaWNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAwID0qLyAyNCkuYm9vbChtZXNzYWdlLmlzTW9ub3RvbmljKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3VtIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0udmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtfSBtZXNzYWdlIFN1bSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTdW0gbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bX0gU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5kYXRhUG9pbnRzICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuaXNNb25vdG9uaWMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN1bSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtfSBTdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0uZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFN1bSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0udmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC52ZXJpZnkobWVzc2FnZS5kYXRhUG9pbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50cy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eTogZW51bSB2YWx1ZSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaXNNb25vdG9uaWMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiaXNNb25vdG9uaWNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmlzTW9ub3RvbmljICE9PSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaXNNb25vdG9uaWM6IGJvb2xlYW4gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFN1bSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bX0gU3VtXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW0uZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kYXRhUG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0uZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5kYXRhUG9pbnRzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW0uZGF0YVBvaW50czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmZyb21PYmplY3Qob2JqZWN0LmRhdGFQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmlzTW9ub3RvbmljICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pc01vbm90b25pYyA9IEJvb2xlYW4ob2JqZWN0LmlzTW9ub3RvbmljKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgU3VtIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtfSBtZXNzYWdlIFN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmlzTW9ub3RvbmljID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICYmIG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50c1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudG9PYmplY3QobWVzc2FnZS5kYXRhUG9pbnRzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5W21lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eV0gPT09IHVuZGVmaW5lZCA/IG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5W21lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eV0gOiBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pc01vbm90b25pYyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJpc01vbm90b25pY1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuaXNNb25vdG9uaWMgPSBtZXNzYWdlLmlzTW9ub3RvbmljO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgU3VtIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBTdW1cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bS5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdW07XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5IaXN0b2dyYW0gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIEhpc3RvZ3JhbS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW1EYXRhUG9pbnQ+fG51bGx9IFtkYXRhUG9pbnRzXSBIaXN0b2dyYW0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5fG51bGx9IFthZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSBIaXN0b2dyYW0gYWdncmVnYXRpb25UZW1wb3JhbGl0eVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgSGlzdG9ncmFtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIEhpc3RvZ3JhbS5cbiAgICAgICAgICAgICAgICAgICAgICogQGltcGxlbWVudHMgSUhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSGlzdG9ncmFtKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtIGRhdGFQb2ludHMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUhpc3RvZ3JhbURhdGFQb2ludD59IGRhdGFQb2ludHNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0ucHJvdG90eXBlLmRhdGFQb2ludHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5fG51bGx8dW5kZWZpbmVkfSBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtLnByb3RvdHlwZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgSGlzdG9ncmFtIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW09fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW19IEhpc3RvZ3JhbSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBIaXN0b2dyYW0gbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW19IG1lc3NhZ2UgSGlzdG9ncmFtIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC5lbmNvZGUobWVzc2FnZS5kYXRhUG9pbnRzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDAgPSovIDE2KS5pbnQzMihtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBIaXN0b2dyYW0gbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW19IG1lc3NhZ2UgSGlzdG9ncmFtIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEhpc3RvZ3JhbSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtfSBIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBIaXN0b2dyYW0gbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbX0gSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBIaXN0b2dyYW0gbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGF0YVBvaW50c1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5KG1lc3NhZ2UuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIEhpc3RvZ3JhbSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbX0gSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kYXRhUG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0uZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5kYXRhUG9pbnRzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW0uZGF0YVBvaW50czogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmZyb21PYmplY3Qob2JqZWN0LmRhdGFQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIEhpc3RvZ3JhbSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbX0gbWVzc2FnZSBIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0udG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC50b09iamVjdChtZXNzYWdlLmRhdGFQb2ludHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA9PT0gdW5kZWZpbmVkID8gbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5IDogJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSA6IG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIEhpc3RvZ3JhbSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW0uZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSGlzdG9ncmFtO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuRXhwb25lbnRpYWxIaXN0b2dyYW0gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50PnxudWxsfSBbZGF0YVBvaW50c10gRXhwb25lbnRpYWxIaXN0b2dyYW0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5fG51bGx9IFthZ2dyZWdhdGlvblRlbXBvcmFsaXR5XSBFeHBvbmVudGlhbEhpc3RvZ3JhbSBhZ2dyZWdhdGlvblRlbXBvcmFsaXR5XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvbmVudGlhbEhpc3RvZ3JhbS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvbmVudGlhbEhpc3RvZ3JhbShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtIGRhdGFQb2ludHMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50Pn0gZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0ucHJvdG90eXBlLmRhdGFQb2ludHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW0gYWdncmVnYXRpb25UZW1wb3JhbGl0eS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHl8bnVsbHx1bmRlZmluZWR9IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLnByb3RvdHlwZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhwb25lbnRpYWxIaXN0b2dyYW0gaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW09fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbX0gRXhwb25lbnRpYWxIaXN0b2dyYW0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4cG9uZW50aWFsSGlzdG9ncmFtIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtfSBtZXNzYWdlIEV4cG9uZW50aWFsSGlzdG9ncmFtIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0uZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZW5jb2RlKG1lc3NhZ2UuZGF0YVBvaW50c1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAwID0qLyAxNikuaW50MzIobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhwb25lbnRpYWxIaXN0b2dyYW19IG1lc3NhZ2UgRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW19IEV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW0uZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YVBvaW50cy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtfSBFeHBvbmVudGlhbEhpc3RvZ3JhbVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW0gbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5kYXRhUG9pbnRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRhdGFQb2ludHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5KG1lc3NhZ2UuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk6IGVudW0gdmFsdWUgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbSBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW19IEV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kYXRhUG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5kYXRhUG9pbnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbS5kYXRhUG9pbnRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmRhdGFQb2ludHNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtLmRhdGFQb2ludHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmZyb21PYmplY3Qob2JqZWN0LmRhdGFQb2ludHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbSBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW19IG1lc3NhZ2UgRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbS50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0YVBvaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZGF0YVBvaW50cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudG9PYmplY3QobWVzc2FnZS5kYXRhUG9pbnRzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWdncmVnYXRpb25UZW1wb3JhbGl0eVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IG9wdGlvbnMuZW51bXMgPT09IFN0cmluZyA/ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5W21lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eV0gPT09IHVuZGVmaW5lZCA/IG1lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eSA6ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5W21lc3NhZ2UuYWdncmVnYXRpb25UZW1wb3JhbGl0eV0gOiBtZXNzYWdlLmFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvbmVudGlhbEhpc3RvZ3JhbSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9uZW50aWFsSGlzdG9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwb25lbnRpYWxIaXN0b2dyYW07XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TdW1tYXJ5ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBTdW1tYXJ5LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5RGF0YVBvaW50PnxudWxsfSBbZGF0YVBvaW50c10gU3VtbWFyeSBkYXRhUG9pbnRzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBTdW1tYXJ5LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFN1bW1hcnkuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElTdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3VtbWFyeShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bW1hcnkgZGF0YVBvaW50cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeURhdGFQb2ludD59IGRhdGFQb2ludHNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5wcm90b3R5cGUuZGF0YVBvaW50cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IFN1bW1hcnkgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeX0gU3VtbWFyeSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdW1tYXJ5KHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFN1bW1hcnkgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bW1hcnl9IG1lc3NhZ2UgU3VtbWFyeSBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgIT0gbnVsbCAmJiBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5lbmNvZGUobWVzc2FnZS5kYXRhUG9pbnRzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDIgPSovIDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTdW1tYXJ5IG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5fSBtZXNzYWdlIFN1bW1hcnkgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFN1bW1hcnkgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5fSBTdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGFQb2ludHMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTdW1tYXJ5IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeX0gU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFN1bW1hcnkgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YVBvaW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkYXRhUG9pbnRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZGF0YVBvaW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQudmVyaWZ5KG1lc3NhZ2UuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRhdGFQb2ludHMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBTdW1tYXJ5IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnl9IFN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGFQb2ludHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmRhdGFQb2ludHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnkuZGF0YVBvaW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZGF0YVBvaW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5kYXRhUG9pbnRzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5LmRhdGFQb2ludHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhUG9pbnRzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuZnJvbU9iamVjdChvYmplY3QuZGF0YVBvaW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTdW1tYXJ5IG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnl9IG1lc3NhZ2UgU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGFQb2ludHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmRhdGFQb2ludHMgJiYgbWVzc2FnZS5kYXRhUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmRhdGFQb2ludHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRhUG9pbnRzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQudG9PYmplY3QobWVzc2FnZS5kYXRhUG9pbnRzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFN1bW1hcnkgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgU3VtbWFyeVxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnkuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVVcmxQcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlVXJsUHJlZml4ICsgXCIvb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN1bW1hcnk7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5IGVudW0uXG4gICAgICAgICAgICAgICAgICogQG5hbWUgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlcbiAgICAgICAgICAgICAgICAgKiBAZW51bSB7bnVtYmVyfVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBBR0dSRUdBVElPTl9URU1QT1JBTElUWV9VTlNQRUNJRklFRD0wIEFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IEFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBPTEgQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEEgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfQ1VNVUxBVElWRT0yIEFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkUgdmFsdWVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2MS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlc0J5SWQgPSB7fSwgdmFsdWVzID0gT2JqZWN0LmNyZWF0ZSh2YWx1ZXNCeUlkKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMF0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX1VOU1BFQ0lGSUVEXCJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMV0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXCJdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMl0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkVcIl0gPSAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogRGF0YVBvaW50RmxhZ3MgZW51bS5cbiAgICAgICAgICAgICAgICAgKiBAbmFtZSBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRGF0YVBvaW50RmxhZ3NcbiAgICAgICAgICAgICAgICAgKiBAZW51bSB7bnVtYmVyfVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBEQVRBX1BPSU5UX0ZMQUdTX0RPX05PVF9VU0U9MCBEQVRBX1BPSU5UX0ZMQUdTX0RPX05PVF9VU0UgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gREFUQV9QT0lOVF9GTEFHU19OT19SRUNPUkRFRF9WQUxVRV9NQVNLPTEgREFUQV9QT0lOVF9GTEFHU19OT19SRUNPUkRFRF9WQUxVRV9NQVNLIHZhbHVlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdjEuRGF0YVBvaW50RmxhZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzQnlJZCA9IHt9LCB2YWx1ZXMgPSBPYmplY3QuY3JlYXRlKHZhbHVlc0J5SWQpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFswXSA9IFwiREFUQV9QT0lOVF9GTEFHU19ET19OT1RfVVNFXCJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMV0gPSBcIkRBVEFfUE9JTlRfRkxBR1NfTk9fUkVDT1JERURfVkFMVUVfTUFTS1wiXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5OdW1iZXJEYXRhUG9pbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIE51bWJlckRhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElOdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gTnVtYmVyRGF0YVBvaW50IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbc3RhcnRUaW1lVW5peE5hbm9dIE51bWJlckRhdGFQb2ludCBzdGFydFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFt0aW1lVW5peE5hbm9dIE51bWJlckRhdGFQb2ludCB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW2FzRG91YmxlXSBOdW1iZXJEYXRhUG9pbnQgYXNEb3VibGVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbYXNJbnRdIE51bWJlckRhdGFQb2ludCBhc0ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyPnxudWxsfSBbZXhlbXBsYXJzXSBOdW1iZXJEYXRhUG9pbnQgZXhlbXBsYXJzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gTnVtYmVyRGF0YVBvaW50IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBOdW1iZXJEYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgTnVtYmVyRGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOdW1iZXJEYXRhUG9pbnQocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTnVtYmVyRGF0YVBvaW50IGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE51bWJlckRhdGFQb2ludCBzdGFydFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnByb3RvdHlwZS5zdGFydFRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgdGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTnVtYmVyRGF0YVBvaW50IGFzRG91YmxlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGFzRG91YmxlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LnByb3RvdHlwZS5hc0RvdWJsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgYXNJbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBhc0ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5wcm90b3R5cGUuYXNJbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTnVtYmVyRGF0YVBvaW50IGV4ZW1wbGFycy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXI+fSBleGVtcGxhcnNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLmV4ZW1wbGFycyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLmZsYWdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25lT2YgZmllbGQgbmFtZXMgYm91bmQgdG8gdmlydHVhbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gICAgICAgICAgICAgICAgICAgIHZhciAkb25lT2ZGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBOdW1iZXJEYXRhUG9pbnQgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wiYXNEb3VibGVcInxcImFzSW50XCJ8dW5kZWZpbmVkfSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOdW1iZXJEYXRhUG9pbnQucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wiYXNEb3VibGVcIiwgXCJhc0ludFwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IE51bWJlckRhdGFQb2ludCBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50fSBOdW1iZXJEYXRhUG9pbnQgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJEYXRhUG9pbnQocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50fSBtZXNzYWdlIE51bWJlckRhdGFQb2ludCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdyaXRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMSA9Ki8gMTcpLmZpeGVkNjQobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDEgPSovIDI1KS5maXhlZDY0KG1lc3NhZ2UudGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzRG91YmxlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJhc0RvdWJsZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDQsIHdpcmVUeXBlIDEgPSovIDMzKS5kb3VibGUobWVzc2FnZS5hc0RvdWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leGVtcGxhcnMgIT0gbnVsbCAmJiBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmVuY29kZShtZXNzYWdlLmV4ZW1wbGFyc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAyID0qLyA0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzSW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJhc0ludFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDEgPSovIDQ5KS5zZml4ZWQ2NChtZXNzYWdlLmFzSW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovIDU4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgOCwgd2lyZVR5cGUgMCA9Ki8gNjQpLnVpbnQzMihtZXNzYWdlLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JTnVtYmVyRGF0YVBvaW50fSBtZXNzYWdlIE51bWJlckRhdGFQb2ludCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBOdW1iZXJEYXRhUG9pbnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlci5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGRlY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludH0gTnVtYmVyRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyRGF0YVBvaW50LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNEb3VibGUgPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNJbnQgPSByZWFkZXIuc2ZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5leGVtcGxhcnMgJiYgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnR9IE51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0YXJ0VGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8pICYmICEobWVzc2FnZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzRG91YmxlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFzRG91YmxlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmFzRG91YmxlICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhc0RvdWJsZTogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0ludCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5hc0ludCkgJiYgIShtZXNzYWdlLmFzSW50ICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmFzSW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYXNJbnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhc0ludDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leGVtcGxhcnMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZXhlbXBsYXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZXhlbXBsYXJzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXhlbXBsYXJzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnZlcmlmeShtZXNzYWdlLmV4ZW1wbGFyc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFycy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJmbGFnczogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgTnVtYmVyRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50fSBOdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmF0dHJpYnV0ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QudGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gb2JqZWN0LnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXNEb3VibGUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzRG91YmxlID0gTnVtYmVyKG9iamVjdC5hc0RvdWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmFzSW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLmFzSW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LmFzSW50KSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmFzSW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzSW50ID0gcGFyc2VJbnQob2JqZWN0LmFzSW50LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5hc0ludCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hc0ludCA9IG9iamVjdC5hc0ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmFzSW50ID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzSW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5hc0ludC5sb3cgPj4+IDAsIG9iamVjdC5hc0ludC5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5leGVtcGxhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50LmV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5leGVtcGxhcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZXhlbXBsYXJzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnQuZXhlbXBsYXJzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhlbXBsYXJzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmZyb21PYmplY3Qob2JqZWN0LmV4ZW1wbGFyc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5mbGFncyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmxhZ3MgPSBvYmplY3QuZmxhZ3MgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIE51bWJlckRhdGFQb2ludCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLk51bWJlckRhdGFQb2ludH0gbWVzc2FnZSBOdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXJEYXRhUG9pbnQudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS50aW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNEb3VibGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXNEb3VibGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXNEb3VibGUgPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UuYXNEb3VibGUpID8gU3RyaW5nKG1lc3NhZ2UuYXNEb3VibGUpIDogbWVzc2FnZS5hc0RvdWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiYXNEb3VibGVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4ZW1wbGFycyAmJiBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4ZW1wbGFyc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci50b09iamVjdChtZXNzYWdlLmV4ZW1wbGFyc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0ludCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5hc0ludCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmFzSW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuYXNJbnQpIDogbWVzc2FnZS5hc0ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hc0ludCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5hc0ludCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5hc0ludC5sb3cgPj4+IDAsIG1lc3NhZ2UuYXNJbnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuYXNJbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSBcImFzSW50XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSBtZXNzYWdlLmZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgTnVtYmVyRGF0YVBvaW50IHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBOdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5OdW1iZXJEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE51bWJlckRhdGFQb2ludC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuTnVtYmVyRGF0YVBvaW50XCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXJEYXRhUG9pbnQ7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5IaXN0b2dyYW1EYXRhUG9pbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIEhpc3RvZ3JhbURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gSGlzdG9ncmFtRGF0YVBvaW50IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbc3RhcnRUaW1lVW5peE5hbm9dIEhpc3RvZ3JhbURhdGFQb2ludCBzdGFydFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFt0aW1lVW5peE5hbm9dIEhpc3RvZ3JhbURhdGFQb2ludCB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbY291bnRdIEhpc3RvZ3JhbURhdGFQb2ludCBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbc3VtXSBIaXN0b2dyYW1EYXRhUG9pbnQgc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG51bWJlcnxMb25nPnxudWxsfSBbYnVja2V0Q291bnRzXSBIaXN0b2dyYW1EYXRhUG9pbnQgYnVja2V0Q291bnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG51bWJlcj58bnVsbH0gW2V4cGxpY2l0Qm91bmRzXSBIaXN0b2dyYW1EYXRhUG9pbnQgZXhwbGljaXRCb3VuZHNcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeGVtcGxhcj58bnVsbH0gW2V4ZW1wbGFyc10gSGlzdG9ncmFtRGF0YVBvaW50IGV4ZW1wbGFyc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZmxhZ3NdIEhpc3RvZ3JhbURhdGFQb2ludCBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbbWluXSBIaXN0b2dyYW1EYXRhUG9pbnQgbWluXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFttYXhdIEhpc3RvZ3JhbURhdGFQb2ludCBtYXhcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEhpc3RvZ3JhbURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBIaXN0b2dyYW1EYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW1EYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEhpc3RvZ3JhbURhdGFQb2ludChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2tleXNbaV1dICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBzdGFydFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5zdGFydFRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgdGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IGNvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmNvdW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBzdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5zdW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IGJ1Y2tldENvdW50cy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG51bWJlcnxMb25nPn0gYnVja2V0Q291bnRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5idWNrZXRDb3VudHMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IGV4cGxpY2l0Qm91bmRzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48bnVtYmVyPn0gZXhwbGljaXRCb3VuZHNcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmV4cGxpY2l0Qm91bmRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBleGVtcGxhcnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyPn0gZXhlbXBsYXJzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5leGVtcGxhcnMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IGZsYWdzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5mbGFncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgbWluLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IG1pblxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUubWluID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBtYXguXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gbWF4XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5tYXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmVPZiBmaWVsZCBuYW1lcyBib3VuZCB0byB2aXJ0dWFsIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICAgICAgICAgICAgICAgICAgdmFyICRvbmVPZkZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEhpc3RvZ3JhbURhdGFQb2ludCBfc3VtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcInN1bVwifHVuZGVmaW5lZH0gX3N1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLCBcIl9zdW1cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJzdW1cIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcigkb25lT2ZGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogSGlzdG9ncmFtRGF0YVBvaW50IF9taW4uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wibWluXCJ8dW5kZWZpbmVkfSBfbWluXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUsIFwiX21pblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKCRvbmVPZkZpZWxkcyA9IFtcIm1pblwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBIaXN0b2dyYW1EYXRhUG9pbnQgX21heC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7XCJtYXhcInx1bmRlZmluZWR9IF9tYXhcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZSwgXCJfbWF4XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wibWF4XCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgSGlzdG9ncmFtRGF0YVBvaW50IGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW1EYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnR9IEhpc3RvZ3JhbURhdGFQb2ludCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbURhdGFQb2ludChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW1EYXRhUG9pbnR9IG1lc3NhZ2UgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAxID0qLyAxNykuZml4ZWQ2NChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMSA9Ki8gMjUpLmZpeGVkNjQobWVzc2FnZS50aW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMSA9Ki8gMzMpLmZpeGVkNjQobWVzc2FnZS5jb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN1bVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDEgPSovIDQxKS5kb3VibGUobWVzc2FnZS5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnVja2V0Q291bnRzICE9IG51bGwgJiYgbWVzc2FnZS5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA2LCB3aXJlVHlwZSAyID0qLyA1MCkuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5idWNrZXRDb3VudHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5maXhlZDY0KG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leHBsaWNpdEJvdW5kcyAhPSBudWxsICYmIG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA3LCB3aXJlVHlwZSAyID0qLyA1OCkuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmRvdWJsZShtZXNzYWdlLmV4cGxpY2l0Qm91bmRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5leGVtcGxhcnMgIT0gbnVsbCAmJiBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmVuY29kZShtZXNzYWdlLmV4ZW1wbGFyc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCA4LCB3aXJlVHlwZSAyID0qLyA2NikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDksIHdpcmVUeXBlIDIgPSovIDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTAsIHdpcmVUeXBlIDAgPSovIDgwKS51aW50MzIobWVzc2FnZS5mbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5taW4gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcIm1pblwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDExLCB3aXJlVHlwZSAxID0qLyA4OSkuZG91YmxlKG1lc3NhZ2UubWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1heCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibWF4XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTIsIHdpcmVUeXBlIDEgPSovIDk3KS5kb3VibGUobWVzc2FnZS5tYXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklIaXN0b2dyYW1EYXRhUG9pbnR9IG1lc3NhZ2UgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50fSBIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmF0dHJpYnV0ZXMgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5jb3VudCA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmJ1Y2tldENvdW50cyAmJiBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHMucHVzaChyZWFkZXIuZml4ZWQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50cy5wdXNoKHJlYWRlci5maXhlZDY0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmV4cGxpY2l0Qm91bmRzICYmIG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5wdXNoKHJlYWRlci5kb3VibGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leHBsaWNpdEJvdW5kcy5wdXNoKHJlYWRlci5kb3VibGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuZXhlbXBsYXJzICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhlbXBsYXJzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWluID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tYXggPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnR9IEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0YXJ0VGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8pICYmICEobWVzc2FnZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuY291bnQpICYmICEobWVzc2FnZS5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuX3N1bSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnN1bSAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3VtOiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJ1Y2tldENvdW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJidWNrZXRDb3VudHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJidWNrZXRDb3VudHM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5idWNrZXRDb3VudHNbaV0pICYmICEobWVzc2FnZS5idWNrZXRDb3VudHNbaV0gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogaW50ZWdlcnxMb25nW10gZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4cGxpY2l0Qm91bmRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV4cGxpY2l0Qm91bmRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJleHBsaWNpdEJvdW5kczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5leHBsaWNpdEJvdW5kc1tpXSAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4cGxpY2l0Qm91bmRzOiBudW1iZXJbXSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhlbXBsYXJzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV4ZW1wbGFyc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnkobWVzc2FnZS5leGVtcGxhcnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmZsYWdzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZmxhZ3M6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1pbiAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtaW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLl9taW4gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5taW4gIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1pbjogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tYXggIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWF4XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5fbWF4ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UubWF4ICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtYXg6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50fSBIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEhpc3RvZ3JhbURhdGFQb2ludC5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC5hdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmF0dHJpYnV0ZXNbaV0gIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QudGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gb2JqZWN0LnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuY291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuY291bnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuY291bnQpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBwYXJzZUludChvYmplY3QuY291bnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmNvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvdW50ID0gb2JqZWN0LmNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmNvdW50LmxvdyA+Pj4gMCwgb2JqZWN0LmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnN1bSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gTnVtYmVyKG9iamVjdC5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5idWNrZXRDb3VudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqZWN0LmJ1Y2tldENvdW50cykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5idWNrZXRDb3VudHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LmJ1Y2tldENvdW50c1tpXSkpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYnVja2V0Q291bnRzW2ldID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHNbaV0gPSBwYXJzZUludChvYmplY3QuYnVja2V0Q291bnRzW2ldLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYnVja2V0Q291bnRzW2ldID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5idWNrZXRDb3VudHNbaV0gPSBvYmplY3QuYnVja2V0Q291bnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmJ1Y2tldENvdW50c1tpXSA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5idWNrZXRDb3VudHNbaV0ubG93ID4+PiAwLCBvYmplY3QuYnVja2V0Q291bnRzW2ldLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmV4cGxpY2l0Qm91bmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5leHBsaWNpdEJvdW5kcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmV4cGxpY2l0Qm91bmRzOiBhcnJheSBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZXhwbGljaXRCb3VuZHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhwbGljaXRCb3VuZHNbaV0gPSBOdW1iZXIob2JqZWN0LmV4cGxpY2l0Qm91bmRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXhlbXBsYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5leGVtcGxhcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludC5leGVtcGxhcnM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZXhlbXBsYXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmV4ZW1wbGFyc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFyc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5mcm9tT2JqZWN0KG9iamVjdC5leGVtcGxhcnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZmxhZ3MgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gb2JqZWN0LmZsYWdzID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5taW4gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1pbiA9IE51bWJlcihvYmplY3QubWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubWF4ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tYXggPSBOdW1iZXIob2JqZWN0Lm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludH0gbWVzc2FnZSBIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBIaXN0b2dyYW1EYXRhUG9pbnQudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0VGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pIDogbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS50aW1lVW5peE5hbm8pIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJjb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuY291bnQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLmNvdW50KSA6IG1lc3NhZ2UuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UuY291bnQpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuY291bnQubG93ID4+PiAwLCBtZXNzYWdlLmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLmNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdW0gPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2Uuc3VtKSA/IFN0cmluZyhtZXNzYWdlLnN1bSkgOiBtZXNzYWdlLnN1bTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fc3VtID0gXCJzdW1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJ1Y2tldENvdW50cyAmJiBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmJ1Y2tldENvdW50c1tqXSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5idWNrZXRDb3VudHNbal0gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5idWNrZXRDb3VudHNbal0pIDogbWVzc2FnZS5idWNrZXRDb3VudHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5idWNrZXRDb3VudHNbal0gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLmJ1Y2tldENvdW50c1tqXS5sb3cgPj4+IDAsIG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLmJ1Y2tldENvdW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4cGxpY2l0Qm91bmRzICYmIG1lc3NhZ2UuZXhwbGljaXRCb3VuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4cGxpY2l0Qm91bmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmV4cGxpY2l0Qm91bmRzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhwbGljaXRCb3VuZHNbal0gPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UuZXhwbGljaXRCb3VuZHNbal0pID8gU3RyaW5nKG1lc3NhZ2UuZXhwbGljaXRCb3VuZHNbal0pIDogbWVzc2FnZS5leHBsaWNpdEJvdW5kc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4ZW1wbGFycyAmJiBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmV4ZW1wbGFycy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4ZW1wbGFyc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci50b09iamVjdChtZXNzYWdlLmV4ZW1wbGFyc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSBtZXNzYWdlLmZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWluICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1pblwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5taW4gPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UubWluKSA/IFN0cmluZyhtZXNzYWdlLm1pbikgOiBtZXNzYWdlLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fbWluID0gXCJtaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1heCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtYXhcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWF4ID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLm1heCkgPyBTdHJpbmcobWVzc2FnZS5tYXgpIDogbWVzc2FnZS5tYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX21heCA9IFwibWF4XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBIaXN0b2dyYW1EYXRhUG9pbnQgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgSGlzdG9ncmFtRGF0YVBvaW50LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5IaXN0b2dyYW1EYXRhUG9pbnRcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhpc3RvZ3JhbURhdGFQb2ludDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIHYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtzdGFydFRpbWVVbml4TmFub10gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgc3RhcnRUaW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbdGltZVVuaXhOYW5vXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbY291bnRdIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGNvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtzdW1dIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbc2NhbGVdIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHNjYWxlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3plcm9Db3VudF0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgemVyb0NvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LklCdWNrZXRzfG51bGx9IFtwb3NpdGl2ZV0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgcG9zaXRpdmVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHN8bnVsbH0gW25lZ2F0aXZlXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBuZWdhdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZmxhZ3NdIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXI+fG51bGx9IFtleGVtcGxhcnNdIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGV4ZW1wbGFyc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbbWluXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtaW5cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW21heF0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgbWF4XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFt6ZXJvVGhyZXNob2xkXSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCB6ZXJvVGhyZXNob2xkXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlbXBsYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBhdHRyaWJ1dGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPn0gYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgc3RhcnRUaW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBzdGFydFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBjb3VudC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IGNvdW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuY291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgc3VtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHN1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnN1bSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBzY2FsZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBzY2FsZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnNjYWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IHplcm9Db3VudC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHplcm9Db3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnplcm9Db3VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBwb3NpdGl2ZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LklCdWNrZXRzfG51bGx8dW5kZWZpbmVkfSBwb3NpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLnBvc2l0aXZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG5lZ2F0aXZlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHN8bnVsbHx1bmRlZmluZWR9IG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUubmVnYXRpdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5mbGFncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBleGVtcGxhcnMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyPn0gZXhlbXBsYXJzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUuZXhlbXBsYXJzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1pbi5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBtaW5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS5taW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgbWF4LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IG1heFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLm1heCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCB6ZXJvVGhyZXNob2xkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHplcm9UaHJlc2hvbGRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS56ZXJvVGhyZXNob2xkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25lT2YgZmllbGQgbmFtZXMgYm91bmQgdG8gdmlydHVhbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gICAgICAgICAgICAgICAgICAgIHZhciAkb25lT2ZGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBfc3VtLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcInN1bVwifHVuZGVmaW5lZH0gX3N1bVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZSwgXCJfc3VtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogJHV0aWwub25lT2ZHZXR0ZXIoJG9uZU9mRmllbGRzID0gW1wic3VtXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IF9taW4uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge1wibWluXCJ8dW5kZWZpbmVkfSBfbWluXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQucHJvdG90eXBlLCBcIl9taW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJtaW5cIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkdXRpbC5vbmVPZlNldHRlcigkb25lT2ZGaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgX21heC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7XCJtYXhcInx1bmRlZmluZWR9IF9tYXhcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wcm90b3R5cGUsIFwiX21heFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICR1dGlsLm9uZU9mR2V0dGVyKCRvbmVPZkZpZWxkcyA9IFtcIm1heFwiXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICR1dGlsLm9uZU9mU2V0dGVyKCRvbmVPZkZpZWxkcylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50PX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnR9IEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludH0gbWVzc2FnZSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZW5jb2RlKG1lc3NhZ2UuYXR0cmlidXRlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDIsIHdpcmVUeXBlIDEgPSovIDE3KS5maXhlZDY0KG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAxID0qLyAyNSkuZml4ZWQ2NChtZXNzYWdlLnRpbWVVbml4TmFubyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiY291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA0LCB3aXJlVHlwZSAxID0qLyAzMykuZml4ZWQ2NChtZXNzYWdlLmNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3VtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNSwgd2lyZVR5cGUgMSA9Ki8gNDEpLmRvdWJsZShtZXNzYWdlLnN1bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2FsZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NhbGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA2LCB3aXJlVHlwZSAwID0qLyA0OCkuc2ludDMyKG1lc3NhZ2Uuc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuemVyb0NvdW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJ6ZXJvQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA3LCB3aXJlVHlwZSAxID0qLyA1NykuZml4ZWQ2NChtZXNzYWdlLnplcm9Db3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wb3NpdGl2ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicG9zaXRpdmVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZW5jb2RlKG1lc3NhZ2UucG9zaXRpdmUsIHdyaXRlci51aW50MzIoLyogaWQgOCwgd2lyZVR5cGUgMiA9Ki8gNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5uZWdhdGl2ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibmVnYXRpdmVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZW5jb2RlKG1lc3NhZ2UubmVnYXRpdmUsIHdyaXRlci51aW50MzIoLyogaWQgOSwgd2lyZVR5cGUgMiA9Ki8gNzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMCwgd2lyZVR5cGUgMCA9Ki8gODApLnVpbnQzMihtZXNzYWdlLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV4ZW1wbGFycyAhPSBudWxsICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZW5jb2RlKG1lc3NhZ2UuZXhlbXBsYXJzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDExLCB3aXJlVHlwZSAyID0qLyA5MCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1pbiAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwibWluXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTIsIHdpcmVUeXBlIDEgPSovIDk3KS5kb3VibGUobWVzc2FnZS5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWF4ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJtYXhcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMywgd2lyZVR5cGUgMSA9Ki8gMTA1KS5kb3VibGUobWVzc2FnZS5tYXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuemVyb1RocmVzaG9sZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiemVyb1RocmVzaG9sZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDE0LCB3aXJlVHlwZSAxID0qLyAxMTMpLmRvdWJsZShtZXNzYWdlLnplcm9UaHJlc2hvbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludH0gbWVzc2FnZSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHskcHJvdG9idWYuV3JpdGVyfSBXcml0ZXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludH0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN1bSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2FsZSA9IHJlYWRlci5zaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS56ZXJvQ291bnQgPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBvc2l0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5uZWdhdGl2ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5leGVtcGxhcnMgJiYgbWVzc2FnZS5leGVtcGxhcnMubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1pbiA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWF4ID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS56ZXJvVGhyZXNob2xkID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludH0gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGFuIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50IG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG1lc3NhZ2UgUGxhaW4gb2JqZWN0IHRvIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdGFydFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2UudGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJjb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmNvdW50KSAmJiAhKG1lc3NhZ2UuY291bnQgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuY291bnQubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5jb3VudC5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvdW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnN1bSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdW1cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLl9zdW0gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5zdW0gIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN1bTogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2FsZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2FsZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnNjYWxlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NhbGU6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnplcm9Db3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ6ZXJvQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS56ZXJvQ291bnQpICYmICEobWVzc2FnZS56ZXJvQ291bnQgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuemVyb0NvdW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuemVyb0NvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiemVyb0NvdW50OiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBvc2l0aXZlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInBvc2l0aXZlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudmVyaWZ5KG1lc3NhZ2UucG9zaXRpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicG9zaXRpdmUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm5lZ2F0aXZlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm5lZ2F0aXZlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudmVyaWZ5KG1lc3NhZ2UubmVnYXRpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmVnYXRpdmUuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJmbGFnczogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhlbXBsYXJzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImV4ZW1wbGFyc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmV4ZW1wbGFycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnkobWVzc2FnZS5leGVtcGxhcnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJleGVtcGxhcnMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5taW4gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWluXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5fbWluID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UubWluICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtaW46IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWF4ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcIm1heFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuX21heCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLm1heCAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibWF4OiBudW1iZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnplcm9UaHJlc2hvbGQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiemVyb1RocmVzaG9sZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuemVyb1RocmVzaG9sZCAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiemVyb1RocmVzaG9sZDogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50fSBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QudGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gb2JqZWN0LnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuY291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuY291bnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuY291bnQpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBwYXJzZUludChvYmplY3QuY291bnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmNvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvdW50ID0gb2JqZWN0LmNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmNvdW50LmxvdyA+Pj4gMCwgb2JqZWN0LmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnN1bSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gTnVtYmVyKG9iamVjdC5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY2FsZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NhbGUgPSBvYmplY3Quc2NhbGUgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC56ZXJvQ291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuemVyb0NvdW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0Lnplcm9Db3VudCkpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC56ZXJvQ291bnQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuemVyb0NvdW50ID0gcGFyc2VJbnQob2JqZWN0Lnplcm9Db3VudCwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuemVyb0NvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnplcm9Db3VudCA9IG9iamVjdC56ZXJvQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC56ZXJvQ291bnQgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuemVyb0NvdW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC56ZXJvQ291bnQubG93ID4+PiAwLCBvYmplY3QuemVyb0NvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnBvc2l0aXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5wb3NpdGl2ZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5wb3NpdGl2ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucG9zaXRpdmUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5mcm9tT2JqZWN0KG9iamVjdC5wb3NpdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm5lZ2F0aXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5uZWdhdGl2ZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5uZWdhdGl2ZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubmVnYXRpdmUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy5mcm9tT2JqZWN0KG9iamVjdC5uZWdhdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmZsYWdzICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IG9iamVjdC5mbGFncyA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXhlbXBsYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5leGVtcGxhcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmV4ZW1wbGFyczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5leGVtcGxhcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuZXhlbXBsYXJzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5leGVtcGxhcnM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5leGVtcGxhcnNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZnJvbU9iamVjdChvYmplY3QuZXhlbXBsYXJzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm1pbiAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubWluID0gTnVtYmVyKG9iamVjdC5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5tYXggIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm1heCA9IE51bWJlcihvYmplY3QubWF4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuemVyb1RocmVzaG9sZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuemVyb1RocmVzaG9sZCA9IE51bWJlcihvYmplY3QuemVyb1RocmVzaG9sZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhbiBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnR9IG1lc3NhZ2UgRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV4ZW1wbGFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY2FsZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC56ZXJvQ291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC56ZXJvQ291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnBvc2l0aXZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubmVnYXRpdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5mbGFncyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lnplcm9UaHJlc2hvbGQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmF0dHJpYnV0ZXNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnRpbWVVbml4TmFubykgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5jb3VudCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuY291bnQpIDogbWVzc2FnZS5jb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5jb3VudCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5jb3VudC5sb3cgPj4+IDAsIG1lc3NhZ2UuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN1bSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5zdW0pID8gU3RyaW5nKG1lc3NhZ2Uuc3VtKSA6IG1lc3NhZ2Uuc3VtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9zdW0gPSBcInN1bVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NhbGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic2NhbGVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjYWxlID0gbWVzc2FnZS5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnplcm9Db3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ6ZXJvQ291bnRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnplcm9Db3VudCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lnplcm9Db3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnplcm9Db3VudCkgOiBtZXNzYWdlLnplcm9Db3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC56ZXJvQ291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UuemVyb0NvdW50KSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnplcm9Db3VudC5sb3cgPj4+IDAsIG1lc3NhZ2UuemVyb0NvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnplcm9Db3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnBvc2l0aXZlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInBvc2l0aXZlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wb3NpdGl2ZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLnRvT2JqZWN0KG1lc3NhZ2UucG9zaXRpdmUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubmVnYXRpdmUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibmVnYXRpdmVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm5lZ2F0aXZlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHMudG9PYmplY3QobWVzc2FnZS5uZWdhdGl2ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSBtZXNzYWdlLmZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXhlbXBsYXJzICYmIG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5leGVtcGxhcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZXhlbXBsYXJzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZXhlbXBsYXJzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyLnRvT2JqZWN0KG1lc3NhZ2UuZXhlbXBsYXJzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1pbiAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJtaW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QubWluID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLm1pbikgPyBTdHJpbmcobWVzc2FnZS5taW4pIDogbWVzc2FnZS5taW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25lb2ZzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX21pbiA9IFwibWluXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tYXggIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwibWF4XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1heCA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS5tYXgpID8gU3RyaW5nKG1lc3NhZ2UubWF4KSA6IG1lc3NhZ2UubWF4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9tYXggPSBcIm1heFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuemVyb1RocmVzaG9sZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ6ZXJvVGhyZXNob2xkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC56ZXJvVGhyZXNob2xkID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLnplcm9UaHJlc2hvbGQpID8gU3RyaW5nKG1lc3NhZ2UuemVyb1RocmVzaG9sZCkgOiBtZXNzYWdlLnplcm9UaHJlc2hvbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBFeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIEJ1Y2tldHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbb2Zmc2V0XSBCdWNrZXRzIG9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48bnVtYmVyfExvbmc+fG51bGx9IFtidWNrZXRDb3VudHNdIEJ1Y2tldHMgYnVja2V0Q291bnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBCdWNrZXRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgQnVja2V0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LklCdWNrZXRzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEJ1Y2tldHMocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQnVja2V0cyBvZmZzZXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IG9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVja2V0cy5wcm90b3R5cGUub2Zmc2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQnVja2V0cyBidWNrZXRDb3VudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48bnVtYmVyfExvbmc+fSBidWNrZXRDb3VudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMucHJvdG90eXBlLmJ1Y2tldENvdW50cyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgQnVja2V0cyBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LklCdWNrZXRzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHN9IEJ1Y2tldHMgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVja2V0cy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVja2V0cyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBCdWNrZXRzIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5JQnVja2V0c30gbWVzc2FnZSBCdWNrZXRzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSAkV3JpdGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm9mZnNldCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwib2Zmc2V0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDAgPSovIDgpLnNpbnQzMihtZXNzYWdlLm9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnVja2V0Q291bnRzICE9IG51bGwgJiYgbWVzc2FnZS5idWNrZXRDb3VudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLmZvcmsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50NjQobWVzc2FnZS5idWNrZXRDb3VudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgQnVja2V0cyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuSUJ1Y2tldHN9IG1lc3NhZ2UgQnVja2V0cyBtZXNzYWdlIG9yIHBsYWluIG9iamVjdCB0byBlbmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBCdWNrZXRzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c30gQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3MgeyRwcm90b2J1Zi51dGlsLlByb3RvY29sRXJyb3J9IElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm9mZnNldCA9IHJlYWRlci5zaW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UuYnVja2V0Q291bnRzICYmIG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzLnB1c2gocmVhZGVyLnVpbnQ2NCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50cy5wdXNoKHJlYWRlci51aW50NjQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBCdWNrZXRzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzfSBCdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Y2tldHMuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIEJ1Y2tldHMgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGBudWxsYCBpZiB2YWxpZCwgb3RoZXJ3aXNlIHRoZSByZWFzb24gd2h5IGl0IGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm9mZnNldCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJvZmZzZXRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uub2Zmc2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9mZnNldDogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJ1Y2tldENvdW50cyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJidWNrZXRDb3VudHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYnVja2V0Q291bnRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmJ1Y2tldENvdW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldKSAmJiAhKG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmJ1Y2tldENvdW50c1tpXS5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmJ1Y2tldENvdW50c1tpXS5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnVja2V0Q291bnRzOiBpbnRlZ2VyfExvbmdbXSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBCdWNrZXRzIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c30gQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Qub2Zmc2V0ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2Zmc2V0ID0gb2JqZWN0Lm9mZnNldCB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5idWNrZXRDb3VudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5idWNrZXRDb3VudHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzLmJ1Y2tldENvdW50czogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmJ1Y2tldENvdW50cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5idWNrZXRDb3VudHNbaV0pKS51bnNpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmJ1Y2tldENvdW50c1tpXSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmJ1Y2tldENvdW50c1tpXSA9IHBhcnNlSW50KG9iamVjdC5idWNrZXRDb3VudHNbaV0sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYnVja2V0Q291bnRzW2ldID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldID0gb2JqZWN0LmJ1Y2tldENvdW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuYnVja2V0Q291bnRzW2ldID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYnVja2V0Q291bnRzW2ldID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5idWNrZXRDb3VudHNbaV0ubG93ID4+PiAwLCBvYmplY3QuYnVja2V0Q291bnRzW2ldLmhpZ2ggPj4+IDApLnRvTnVtYmVyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIEJ1Y2tldHMgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50LkJ1Y2tldHN9IG1lc3NhZ2UgQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheXMgfHwgb3B0aW9ucy5kZWZhdWx0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJ1Y2tldENvdW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5vZmZzZXQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwib2Zmc2V0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2Zmc2V0ID0gbWVzc2FnZS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYnVja2V0Q291bnRzICYmIG1lc3NhZ2UuYnVja2V0Q291bnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYnVja2V0Q291bnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5idWNrZXRDb3VudHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5idWNrZXRDb3VudHNbal0gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5idWNrZXRDb3VudHNbal0pIDogbWVzc2FnZS5idWNrZXRDb3VudHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJ1Y2tldENvdW50c1tqXSA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5idWNrZXRDb3VudHNbal0pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuYnVja2V0Q291bnRzW2pdLmxvdyA+Pj4gMCwgbWVzc2FnZS5idWNrZXRDb3VudHNbal0uaGlnaCA+Pj4gMCkudG9OdW1iZXIodHJ1ZSkgOiBtZXNzYWdlLmJ1Y2tldENvdW50c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgQnVja2V0cyB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeHBvbmVudGlhbEhpc3RvZ3JhbURhdGFQb2ludC5CdWNrZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgQnVja2V0cy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBCdWNrZXRzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVVcmxQcmVmaXggPSBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQuQnVja2V0c1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWNrZXRzO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnQ7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TdW1tYXJ5RGF0YVBvaW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBTdW1tYXJ5RGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSUtleVZhbHVlPnxudWxsfSBbYXR0cmlidXRlc10gU3VtbWFyeURhdGFQb2ludCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3N0YXJ0VGltZVVuaXhOYW5vXSBTdW1tYXJ5RGF0YVBvaW50IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3RpbWVVbml4TmFub10gU3VtbWFyeURhdGFQb2ludCB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8TG9uZ3xudWxsfSBbY291bnRdIFN1bW1hcnlEYXRhUG9pbnQgY291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW3N1bV0gU3VtbWFyeURhdGFQb2ludCBzdW1cbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuSVZhbHVlQXRRdWFudGlsZT58bnVsbH0gW3F1YW50aWxlVmFsdWVzXSBTdW1tYXJ5RGF0YVBvaW50IHF1YW50aWxlVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtmbGFnc10gU3VtbWFyeURhdGFQb2ludCBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgU3VtbWFyeURhdGFQb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBTdW1tYXJ5RGF0YVBvaW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSVN1bW1hcnlEYXRhUG9pbnQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN1bW1hcnlEYXRhUG9pbnQocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1YW50aWxlVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW1tYXJ5RGF0YVBvaW50IGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQucHJvdG90eXBlLmF0dHJpYnV0ZXMgPSAkdXRpbC5lbXB0eUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3VtbWFyeURhdGFQb2ludCBzdGFydFRpbWVVbml4TmFuby5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IHN0YXJ0VGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQucHJvdG90eXBlLnN0YXJ0VGltZVVuaXhOYW5vID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bW1hcnlEYXRhUG9pbnQgdGltZVVuaXhOYW5vLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gdGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW1tYXJ5RGF0YVBvaW50IGNvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8TG9uZ3xudWxsfHVuZGVmaW5lZH0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUuY291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogU3VtbWFyeURhdGFQb2ludCBzdW0uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gc3VtXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQucHJvdG90eXBlLnN1bSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTdW1tYXJ5RGF0YVBvaW50IHF1YW50aWxlVmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuSVZhbHVlQXRRdWFudGlsZT59IHF1YW50aWxlVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQucHJvdG90eXBlLnF1YW50aWxlVmFsdWVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFN1bW1hcnlEYXRhUG9pbnQgZmxhZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUuZmxhZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBTdW1tYXJ5RGF0YVBvaW50IGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeURhdGFQb2ludD19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnR9IFN1bW1hcnlEYXRhUG9pbnQgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3VtbWFyeURhdGFQb2ludChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklTdW1tYXJ5RGF0YVBvaW50fSBtZXNzYWdlIFN1bW1hcnlEYXRhUG9pbnQgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAxID0qLyAxNykuZml4ZWQ2NChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMSA9Ki8gMjUpLmZpeGVkNjQobWVzc2FnZS50aW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY291bnQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMSA9Ki8gMzMpLmZpeGVkNjQobWVzc2FnZS5jb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInN1bVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDUsIHdpcmVUeXBlIDEgPSovIDQxKS5kb3VibGUobWVzc2FnZS5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLnF1YW50aWxlVmFsdWVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS5lbmNvZGUobWVzc2FnZS5xdWFudGlsZVZhbHVlc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCA2LCB3aXJlVHlwZSAyID0qLyA1MCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDIgPSovIDU4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgOCwgd2lyZVR5cGUgMCA9Ki8gNjQpLnVpbnQzMihtZXNzYWdlLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgU3VtbWFyeURhdGFQb2ludCBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JU3VtbWFyeURhdGFQb2ludH0gbWVzc2FnZSBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludH0gU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSByZWFkZXIuZml4ZWQ2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN1bSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5xdWFudGlsZVZhbHVlcyAmJiBtZXNzYWdlLnF1YW50aWxlVmFsdWVzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5xdWFudGlsZVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5xdWFudGlsZVZhbHVlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBTdW1tYXJ5RGF0YVBvaW50IG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludH0gU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIFN1bW1hcnlEYXRhUG9pbnQgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFN1bW1hcnlEYXRhUG9pbnQudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhdHRyaWJ1dGVzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudmVyaWZ5KG1lc3NhZ2UuYXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImF0dHJpYnV0ZXMuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzdGFydFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSAmJiAhKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInN0YXJ0VGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8pICYmICEobWVzc2FnZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuY291bnQpICYmICEobWVzc2FnZS5jb3VudCAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5jb3VudC5sb3cpICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmNvdW50LmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY291bnQ6IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3VtICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInN1bVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2Uuc3VtICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdW06IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwicXVhbnRpbGVWYWx1ZXNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5xdWFudGlsZVZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInF1YW50aWxlVmFsdWVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5xdWFudGlsZVZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUudmVyaWZ5KG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJxdWFudGlsZVZhbHVlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJmbGFnczogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgU3VtbWFyeURhdGFQb2ludCBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50fSBTdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LmF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5hdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID0gb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QudGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gb2JqZWN0LnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuY291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UuY291bnQgPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QuY291bnQpKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBwYXJzZUludChvYmplY3QuY291bnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmNvdW50ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvdW50ID0gb2JqZWN0LmNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QuY291bnQgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuY291bnQgPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LmNvdW50LmxvdyA+Pj4gMCwgb2JqZWN0LmNvdW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnN1bSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3VtID0gTnVtYmVyKG9iamVjdC5zdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5xdWFudGlsZVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QucXVhbnRpbGVWYWx1ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQucXVhbnRpbGVWYWx1ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5xdWFudGlsZVZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5xdWFudGlsZVZhbHVlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5xdWFudGlsZVZhbHVlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnF1YW50aWxlVmFsdWVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlLmZyb21PYmplY3Qob2JqZWN0LnF1YW50aWxlVmFsdWVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmZsYWdzICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IG9iamVjdC5mbGFncyA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgU3VtbWFyeURhdGFQb2ludCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50fSBtZXNzYWdlIFN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnF1YW50aWxlVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdGFydFRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IGxvbmcudG9TdHJpbmcoKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IGxvbmcudG9OdW1iZXIoKSA6IGxvbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gXCIwXCIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb25nID0gbmV3ICR1dGlsLkxvbmcoMCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuY291bnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFwiMFwiIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3VtID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3RhcnRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3RhcnRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5zdGFydFRpbWVVbml4TmFubykgOiBtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnN0YXJ0VGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnN0YXJ0VGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS5zdGFydFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5zdGFydFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLnRpbWVVbml4TmFubykgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvdW50ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImNvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5jb3VudCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvdW50ID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UuY291bnQpIDogbWVzc2FnZS5jb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS5jb3VudCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS5jb3VudC5sb3cgPj4+IDAsIG1lc3NhZ2UuY291bnQuaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zdW0gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3VtXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zdW0gPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2Uuc3VtKSA/IFN0cmluZyhtZXNzYWdlLnN1bSkgOiBtZXNzYWdlLnN1bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnF1YW50aWxlVmFsdWVzICYmIG1lc3NhZ2UucXVhbnRpbGVWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnF1YW50aWxlVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLnF1YW50aWxlVmFsdWVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucXVhbnRpbGVWYWx1ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUudG9PYmplY3QobWVzc2FnZS5xdWFudGlsZVZhbHVlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXR0cmlidXRlc1tqXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnRvT2JqZWN0KG1lc3NhZ2UuYXR0cmlidXRlc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5mbGFncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSBtZXNzYWdlLmZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgU3VtbWFyeURhdGFQb2ludCB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBTdW1tYXJ5RGF0YVBvaW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU3VtbWFyeURhdGFQb2ludC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludFwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBTdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBWYWx1ZUF0UXVhbnRpbGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSVZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW3F1YW50aWxlXSBWYWx1ZUF0UXVhbnRpbGUgcXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFt2YWx1ZV0gVmFsdWVBdFF1YW50aWxlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBWYWx1ZUF0UXVhbnRpbGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIFZhbHVlQXRRdWFudGlsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElWYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5JVmFsdWVBdFF1YW50aWxlPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFZhbHVlQXRRdWFudGlsZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleXNbaV1dID0gcHJvcGVydGllc1trZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVmFsdWVBdFF1YW50aWxlIHF1YW50aWxlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfG51bGx8dW5kZWZpbmVkfSBxdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5wcm90b3R5cGUucXVhbnRpbGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBWYWx1ZUF0UXVhbnRpbGUgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLnByb3RvdHlwZS52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgVmFsdWVBdFF1YW50aWxlIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBjcmVhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuSVZhbHVlQXRRdWFudGlsZT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZX0gVmFsdWVBdFF1YW50aWxlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWVBdFF1YW50aWxlKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFZhbHVlQXRRdWFudGlsZSBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LklWYWx1ZUF0UXVhbnRpbGV9IG1lc3NhZ2UgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucXVhbnRpbGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInF1YW50aWxlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDEgPSovIDkpLmRvdWJsZShtZXNzYWdlLnF1YW50aWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS52YWx1ZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMSA9Ki8gMTcpLmRvdWJsZShtZXNzYWdlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFZhbHVlQXRRdWFudGlsZSBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUudmVyaWZ5fHZlcmlmeX0gbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LklWYWx1ZUF0UXVhbnRpbGV9IG1lc3NhZ2UgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuV3JpdGVyfSBbd3JpdGVyXSBXcml0ZXIgdG8gZW5jb2RlIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlfSBWYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGF5bG9hZCBpcyBub3QgYSByZWFkZXIgb3IgdmFsaWQgYnVmZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5xdWFudGlsZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudmFsdWUgPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVhZGVyIG9yIGJ1ZmZlciwgbGVuZ3RoIGRlbGltaXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZX0gVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5xdWFudGlsZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnF1YW50aWxlICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicXVhbnRpbGU6IG51bWJlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnZhbHVlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UudmFsdWUgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgVmFsdWVBdFF1YW50aWxlIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBvYmplY3QgUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlfSBWYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuU3VtbWFyeURhdGFQb2ludC5WYWx1ZUF0UXVhbnRpbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5xdWFudGlsZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnF1YW50aWxlID0gTnVtYmVyKG9iamVjdC5xdWFudGlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC52YWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnZhbHVlID0gTnVtYmVyKG9iamVjdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBWYWx1ZUF0UXVhbnRpbGUgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLlN1bW1hcnlEYXRhUG9pbnQuVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZX0gbWVzc2FnZSBWYWx1ZUF0UXVhbnRpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVBdFF1YW50aWxlLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucXVhbnRpbGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5xdWFudGlsZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJxdWFudGlsZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnF1YW50aWxlID0gb3B0aW9ucy5qc29uICYmICFpc0Zpbml0ZShtZXNzYWdlLnF1YW50aWxlKSA/IFN0cmluZyhtZXNzYWdlLnF1YW50aWxlKSA6IG1lc3NhZ2UucXVhbnRpbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudmFsdWUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidmFsdWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IG9wdGlvbnMuanNvbiAmJiAhaXNGaW5pdGUobWVzc2FnZS52YWx1ZSkgPyBTdHJpbmcobWVzc2FnZS52YWx1ZSkgOiBtZXNzYWdlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIFZhbHVlQXRRdWFudGlsZSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlQXRRdWFudGlsZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvT2JqZWN0KHRoaXMsICRwcm90b2J1Zi51dGlsLnRvSlNPTk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogR2V0cyB0aGUgZGVmYXVsdCB0eXBlIHVybCBmb3IgVmFsdWVBdFF1YW50aWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUF0UXVhbnRpbGUuZ2V0VHlwZVVybCA9IGZ1bmN0aW9uIGdldFR5cGVVcmwodHlwZVVybFByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5TdW1tYXJ5RGF0YVBvaW50LlZhbHVlQXRRdWFudGlsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZUF0UXVhbnRpbGU7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdW1tYXJ5RGF0YVBvaW50O1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuRXhlbXBsYXIgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhbiBFeGVtcGxhci5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fG51bGx9IFtmaWx0ZXJlZEF0dHJpYnV0ZXNdIEV4ZW1wbGFyIGZpbHRlcmVkQXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFt0aW1lVW5peE5hbm9dIEV4ZW1wbGFyIHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbYXNEb3VibGVdIEV4ZW1wbGFyIGFzRG91YmxlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW2FzSW50XSBFeGVtcGxhciBhc0ludFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge1VpbnQ4QXJyYXl8bnVsbH0gW3NwYW5JZF0gRXhlbXBsYXIgc3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbdHJhY2VJZF0gRXhlbXBsYXIgdHJhY2VJZFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnN0cnVjdHMgYSBuZXcgRXhlbXBsYXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGFuIEV4ZW1wbGFyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLklFeGVtcGxhcj19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXhlbXBsYXIocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4ZW1wbGFyIGZpbHRlcmVkQXR0cmlidXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT59IGZpbHRlcmVkQXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIucHJvdG90eXBlLmZpbHRlcmVkQXR0cmlidXRlcyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeGVtcGxhciB0aW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnByb3RvdHlwZS50aW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhlbXBsYXIgYXNEb3VibGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxudWxsfHVuZGVmaW5lZH0gYXNEb3VibGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnByb3RvdHlwZS5hc0RvdWJsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFeGVtcGxhciBhc0ludC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7bnVtYmVyfExvbmd8bnVsbHx1bmRlZmluZWR9IGFzSW50XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5wcm90b3R5cGUuYXNJbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhlbXBsYXIgc3BhbklkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnByb3RvdHlwZS5zcGFuSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRXhlbXBsYXIgdHJhY2VJZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7VWludDhBcnJheXxudWxsfHVuZGVmaW5lZH0gdHJhY2VJZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIucHJvdG90eXBlLnRyYWNlSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmVPZiBmaWVsZCBuYW1lcyBib3VuZCB0byB2aXJ0dWFsIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICAgICAgICAgICAgICAgICAgdmFyICRvbmVPZkZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEV4ZW1wbGFyIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtcImFzRG91YmxlXCJ8XCJhc0ludFwifHVuZGVmaW5lZH0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFeGVtcGxhci5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAkdXRpbC5vbmVPZkdldHRlcigkb25lT2ZGaWVsZHMgPSBbXCJhc0RvdWJsZVwiLCBcImFzSW50XCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogJHV0aWwub25lT2ZTZXR0ZXIoJG9uZU9mRmllbGRzKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgRXhlbXBsYXIgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5JRXhlbXBsYXI9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhcn0gRXhlbXBsYXIgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4ZW1wbGFyKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4ZW1wbGFyIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyfSBtZXNzYWdlIEV4ZW1wbGFyIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMSA9Ki8gMTcpLmZpeGVkNjQobWVzc2FnZS50aW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNEb3VibGUgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImFzRG91YmxlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMSA9Ki8gMjUpLmRvdWJsZShtZXNzYWdlLmFzRG91YmxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgNCwgd2lyZVR5cGUgMiA9Ki8gMzQpLmJ5dGVzKG1lc3NhZ2Uuc3BhbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRyYWNlSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAyID0qLyA0MikuYnl0ZXMobWVzc2FnZS50cmFjZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzSW50ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJhc0ludFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDEgPSovIDQ5KS5zZml4ZWQ2NChtZXNzYWdlLmFzSW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlcyAhPSBudWxsICYmIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgNywgd2lyZVR5cGUgMiA9Ki8gNTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIEV4ZW1wbGFyIG1lc3NhZ2UsIGxlbmd0aCBkZWxpbWl0ZWQuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuSUV4ZW1wbGFyfSBtZXNzYWdlIEV4ZW1wbGFyIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgRXhlbXBsYXIuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4ZW1wbGFyIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTWVzc2FnZSBsZW5ndGggaWYga25vd24gYmVmb3JlaGFuZFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyfSBFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIsIGxlbmd0aCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9ICRSZWFkZXIuY3JlYXRlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aCwgbWVzc2FnZSA9IG5ldyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlcyAmJiBtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlcy5wdXNoKCRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNEb3VibGUgPSByZWFkZXIuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXNJbnQgPSByZWFkZXIuc2ZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50cmFjZUlkID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGFuIEV4ZW1wbGFyIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyfSBFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYW4gRXhlbXBsYXIgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZpbHRlcmVkQXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZpbHRlcmVkQXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmZpbHRlcmVkQXR0cmlidXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImZpbHRlcmVkQXR0cmlidXRlcy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRpbWVVbml4TmFubyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0aW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8pICYmICEobWVzc2FnZS50aW1lVW5peE5hbm8gJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UudGltZVVuaXhOYW5vLmhpZ2gpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGltZVVuaXhOYW5vOiBpbnRlZ2VyfExvbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmFzRG91YmxlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImFzRG91YmxlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmFzRG91YmxlICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhc0RvdWJsZTogbnVtYmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5hc0ludCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJhc0ludFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZTogbXVsdGlwbGUgdmFsdWVzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy52YWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5hc0ludCkgJiYgIShtZXNzYWdlLmFzSW50ICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLmFzSW50LmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuYXNJbnQuaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhc0ludDogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2Uuc3BhbklkICYmIHR5cGVvZiBtZXNzYWdlLnNwYW5JZC5sZW5ndGggPT09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zcGFuSWQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbklkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtZXNzYWdlLnRyYWNlSWQgJiYgdHlwZW9mIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGggPT09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcobWVzc2FnZS50cmFjZUlkKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRyYWNlSWQ6IGJ1ZmZlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIEV4ZW1wbGFyIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhcn0gRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmZpbHRlcmVkQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QuZmlsdGVyZWRBdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhci5maWx0ZXJlZEF0dHJpYnV0ZXM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LmZpbHRlcmVkQXR0cmlidXRlc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXIuZmlsdGVyZWRBdHRyaWJ1dGVzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZnJvbU9iamVjdChvYmplY3QuZmlsdGVyZWRBdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS50aW1lVW5peE5hbm8gPSAkdXRpbC5Mb25nLmZyb21WYWx1ZShvYmplY3QudGltZVVuaXhOYW5vKSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBwYXJzZUludChvYmplY3QudGltZVVuaXhOYW5vLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudGltZVVuaXhOYW5vID0gb2JqZWN0LnRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBuZXcgJHV0aWwuTG9uZ0JpdHMob2JqZWN0LnRpbWVVbml4TmFuby5sb3cgPj4+IDAsIG9iamVjdC50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYXNEb3VibGUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzRG91YmxlID0gTnVtYmVyKG9iamVjdC5hc0RvdWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmFzSW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLmFzSW50ID0gJHV0aWwuTG9uZy5mcm9tVmFsdWUob2JqZWN0LmFzSW50KSkudW5zaWduZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmFzSW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzSW50ID0gcGFyc2VJbnQob2JqZWN0LmFzSW50LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5hc0ludCA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hc0ludCA9IG9iamVjdC5hc0ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LmFzSW50ID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFzSW50ID0gbmV3ICR1dGlsLkxvbmdCaXRzKG9iamVjdC5hc0ludC5sb3cgPj4+IDAsIG9iamVjdC5hc0ludC5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zcGFuSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zcGFuSWQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LnNwYW5JZCwgbWVzc2FnZS5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChvYmplY3Quc3BhbklkKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5zcGFuSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbklkID0gb2JqZWN0LnNwYW5JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHJhY2VJZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnRyYWNlSWQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LnRyYWNlSWQsIG1lc3NhZ2UudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcigkdXRpbC5iYXNlNjQubGVuZ3RoKG9iamVjdC50cmFjZUlkKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC50cmFjZUlkLmxlbmd0aCA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRyYWNlSWQgPSBvYmplY3QudHJhY2VJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGFuIEV4ZW1wbGFyIG1lc3NhZ2UuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIG90aGVyIHR5cGVzIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubWV0cmljcy52MS5FeGVtcGxhcn0gbWVzc2FnZSBFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5JQ29udmVyc2lvbk9wdGlvbnN9IFtvcHRpb25zXSBDb252ZXJzaW9uIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIEV4ZW1wbGFyLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zcGFuSWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgIT09IEFycmF5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3Quc3BhbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9ICR1dGlsLm5ld0J1ZmZlcihvYmplY3QudHJhY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UudGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gU3RyaW5nKG1lc3NhZ2UudGltZVVuaXhOYW5vKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRpbWVVbml4TmFubyA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/ICR1dGlsLkxvbmcucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWVzc2FnZS50aW1lVW5peE5hbm8pIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKSA6IG1lc3NhZ2UudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNEb3VibGUgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXNEb3VibGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXNEb3VibGUgPSBvcHRpb25zLmpzb24gJiYgIWlzRmluaXRlKG1lc3NhZ2UuYXNEb3VibGUpID8gU3RyaW5nKG1lc3NhZ2UuYXNEb3VibGUpIDogbWVzc2FnZS5hc0RvdWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmVvZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC52YWx1ZSA9IFwiYXNEb3VibGVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS5zcGFuSWQsIDAsIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCkgOiBvcHRpb25zLmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1lc3NhZ2Uuc3BhbklkKSA6IG1lc3NhZ2Uuc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gb3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nID8gJHV0aWwuYmFzZTY0LmVuY29kZShtZXNzYWdlLnRyYWNlSWQsIDAsIG1lc3NhZ2UudHJhY2VJZC5sZW5ndGgpIDogb3B0aW9ucy5ieXRlcyA9PT0gQXJyYXkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLnRyYWNlSWQpIDogbWVzc2FnZS50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXNJbnQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXNJbnRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UuYXNJbnQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5hc0ludCA9IG9wdGlvbnMubG9uZ3MgPT09IFN0cmluZyA/IFN0cmluZyhtZXNzYWdlLmFzSW50KSA6IG1lc3NhZ2UuYXNJbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuYXNJbnQgPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyAkdXRpbC5Mb25nLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1lc3NhZ2UuYXNJbnQpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbmV3ICR1dGlsLkxvbmdCaXRzKG1lc3NhZ2UuYXNJbnQubG93ID4+PiAwLCBtZXNzYWdlLmFzSW50LmhpZ2ggPj4+IDApLnRvTnVtYmVyKCkgOiBtZXNzYWdlLmFzSW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZW9mcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnZhbHVlID0gXCJhc0ludFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzICYmIG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5maWx0ZXJlZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuZmlsdGVyZWRBdHRyaWJ1dGVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmlsdGVyZWRBdHRyaWJ1dGVzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUudG9PYmplY3QobWVzc2FnZS5maWx0ZXJlZEF0dHJpYnV0ZXNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgRXhlbXBsYXIgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IEpTT04gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBFeGVtcGxhclxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5tZXRyaWNzLnYxLkV4ZW1wbGFyXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlVXJsUHJlZml4XSB5b3VyIGN1c3RvbSB0eXBlVXJsUHJlZml4KGRlZmF1bHQgXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCIpXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkZWZhdWx0IHR5cGUgdXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBFeGVtcGxhci5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLm1ldHJpY3MudjEuRXhlbXBsYXJcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4ZW1wbGFyO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYxO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiBtZXRyaWNzO1xuICAgICAgICB9KSgpO1xuICAgICAgICBwcm90by5sb2dzID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTmFtZXNwYWNlIGxvZ3MuXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90b1xuICAgICAgICAgICAgICogQG5hbWVzcGFjZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgbG9ncyA9IHt9O1xuICAgICAgICAgICAgbG9ncy52MSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogTmFtZXNwYWNlIHYxLlxuICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3NcbiAgICAgICAgICAgICAgICAgKiBAbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdmFyIHYxID0ge307XG4gICAgICAgICAgICAgICAgdjEuTG9nc0RhdGEgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIExvZ3NEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnRlcmZhY2UgSUxvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JUmVzb3VyY2VMb2dzPnxudWxsfSBbcmVzb3VyY2VMb2dzXSBMb2dzRGF0YSByZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IExvZ3NEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxXG4gICAgICAgICAgICAgICAgICAgICAqIEBjbGFzc2Rlc2MgUmVwcmVzZW50cyBhIExvZ3NEYXRhLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dzRGF0YT19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTG9nc0RhdGEocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ3NEYXRhIHJlc291cmNlTG9ncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JUmVzb3VyY2VMb2dzPn0gcmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dzRGF0YS5wcm90b3R5cGUucmVzb3VyY2VMb2dzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgTG9nc0RhdGEgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JTG9nc0RhdGE9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YX0gTG9nc0RhdGEgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvZ3NEYXRhKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIExvZ3NEYXRhIG1lc3NhZ2UuIERvZXMgbm90IGltcGxpY2l0bHkge0BsaW5rIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSUxvZ3NEYXRhfSBtZXNzYWdlIExvZ3NEYXRhIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTG9ncyAhPSBudWxsICYmIG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmVuY29kZShtZXNzYWdlLnJlc291cmNlTG9nc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgTG9nc0RhdGEgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JTG9nc0RhdGF9IG1lc3NhZ2UgTG9nc0RhdGEgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dzRGF0YS5lbmNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBlbmNvZGVEZWxpbWl0ZWQobWVzc2FnZSwgd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGUobWVzc2FnZSwgd3JpdGVyKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIERlY29kZXMgYSBMb2dzRGF0YSBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YX0gTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dzRGF0YS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PT0gZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5yZXNvdXJjZUxvZ3MgJiYgbWVzc2FnZS5yZXNvdXJjZUxvZ3MubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yZXNvdXJjZUxvZ3MucHVzaCgkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIExvZ3NEYXRhIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLlJlYWRlcnxVaW50OEFycmF5fSByZWFkZXIgUmVhZGVyIG9yIGJ1ZmZlciB0byBkZWNvZGUgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhfSBMb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLmRlY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGRlY29kZURlbGltaXRlZChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlYWRlciBpbnN0YW5jZW9mICRSZWFkZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyAkUmVhZGVyKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogVmVyaWZpZXMgYSBMb2dzRGF0YSBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwib2JqZWN0XCIgfHwgbWVzc2FnZSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYmplY3QgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlTG9ncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5yZXNvdXJjZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnJlc291cmNlTG9ncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnZlcmlmeShtZXNzYWdlLnJlc291cmNlTG9nc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJlc291cmNlTG9ncy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIExvZ3NEYXRhIG1lc3NhZ2UgZnJvbSBhIHBsYWluIG9iamVjdC4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlcm5hbCB0eXBlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGZyb21PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YX0gTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnJlc291cmNlTG9ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QucmVzb3VyY2VMb2dzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YS5yZXNvdXJjZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlTG9nc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGEucmVzb3VyY2VMb2dzOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2VMb2dzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5mcm9tT2JqZWN0KG9iamVjdC5yZXNvdXJjZUxvZ3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIHBsYWluIG9iamVjdCBmcm9tIGEgTG9nc0RhdGEgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ3NEYXRhfSBtZXNzYWdlIExvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nc0RhdGEudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucmVzb3VyY2VMb2dzICYmIG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UucmVzb3VyY2VMb2dzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucmVzb3VyY2VMb2dzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy50b09iamVjdChtZXNzYWdlLnJlc291cmNlTG9nc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBMb2dzRGF0YSB0byBKU09OLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9KU09OXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIExvZ3NEYXRhXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBnZXRUeXBlVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nc0RhdGFcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ3NEYXRhLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dzRGF0YVwiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9nc0RhdGE7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5SZXNvdXJjZUxvZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFJlc291cmNlTG9ncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElSZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLklSZXNvdXJjZXxudWxsfSBbcmVzb3VyY2VdIFJlc291cmNlTG9ncyByZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVNjb3BlTG9ncz58bnVsbH0gW3Njb3BlTG9nc10gUmVzb3VyY2VMb2dzIHNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBSZXNvdXJjZUxvZ3Mgc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBSZXNvdXJjZUxvZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgUmVzb3VyY2VMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JUmVzb3VyY2VMb2dzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZUxvZ3MocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29wZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFJlc291cmNlTG9ncyByZXNvdXJjZS5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7b3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5JUmVzb3VyY2V8bnVsbHx1bmRlZmluZWR9IHJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLnByb3RvdHlwZS5yZXNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZUxvZ3Mgc2NvcGVMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklTY29wZUxvZ3M+fSBzY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MucHJvdG90eXBlLnNjb3BlTG9ncyA9ICR1dGlsLmVtcHR5QXJyYXk7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBSZXNvdXJjZUxvZ3Mgc2NoZW1hVXJsLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHNjaGVtYVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5wcm90b3R5cGUuc2NoZW1hVXJsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgUmVzb3VyY2VMb2dzIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklSZXNvdXJjZUxvZ3M9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3N9IFJlc291cmNlTG9ncyBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlTG9ncyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBSZXNvdXJjZUxvZ3MgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklSZXNvdXJjZUxvZ3N9IG1lc3NhZ2UgUmVzb3VyY2VMb2dzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwicmVzb3VyY2VcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5yZXNvdXJjZS52MS5SZXNvdXJjZS5lbmNvZGUobWVzc2FnZS5yZXNvdXJjZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlTG9ncyAhPSBudWxsICYmIG1lc3NhZ2Uuc2NvcGVMb2dzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2Uuc2NvcGVMb2dzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmVuY29kZShtZXNzYWdlLnNjb3BlTG9nc1tpXSwgd3JpdGVyLnVpbnQzMigvKiBpZCAyLCB3aXJlVHlwZSAyID0qLyAxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwic2NoZW1hVXJsXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMywgd2lyZVR5cGUgMiA9Ki8gMjYpLnN0cmluZyhtZXNzYWdlLnNjaGVtYVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFJlc291cmNlTG9ncyBtZXNzYWdlLCBsZW5ndGggZGVsaW1pdGVkLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVJlc291cmNlTG9nc30gbWVzc2FnZSBSZXNvdXJjZUxvZ3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUxvZ3MuZW5jb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZW5jb2RlRGVsaW1pdGVkKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2VMb2dzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIE1lc3NhZ2UgbGVuZ3RoIGlmIGtub3duIGJlZm9yZWhhbmRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3N9IFJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUocmVhZGVyLCBsZW5ndGgsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSAkUmVhZGVyLmNyZWF0ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGgsIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09IGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2Uuc2NvcGVMb2dzICYmIG1lc3NhZ2Uuc2NvcGVMb2dzLmxlbmd0aCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVMb2dzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgUmVzb3VyY2VMb2dzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3N9IFJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgUmVzb3VyY2VMb2dzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXNvdXJjZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJyZXNvdXJjZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudmVyaWZ5KG1lc3NhZ2UucmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmVzb3VyY2UuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlTG9ncyAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZUxvZ3NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5zY29wZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzY29wZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlLnNjb3BlTG9ncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLnZlcmlmeShtZXNzYWdlLnNjb3BlTG9nc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlTG9ncy5cIiArIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNjaGVtYVVybCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjaGVtYVVybDogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBSZXNvdXJjZUxvZ3MgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3N9IFJlc291cmNlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QucmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnJlc291cmNlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5yZXNvdXJjZTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVzb3VyY2UgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLnJlc291cmNlLnYxLlJlc291cmNlLmZyb21PYmplY3Qob2JqZWN0LnJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Quc2NvcGVMb2dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5zY29wZUxvZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCIub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlJlc291cmNlTG9ncy5zY29wZUxvZ3M6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NvcGVMb2dzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3Quc2NvcGVMb2dzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0LnNjb3BlTG9nc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzLnNjb3BlTG9nczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlTG9nc1tpXSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MuZnJvbU9iamVjdChvYmplY3Quc2NvcGVMb2dzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBSZXNvdXJjZUxvZ3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3N9IG1lc3NhZ2UgUmVzb3VyY2VMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2dzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZUxvZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnJlc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlc291cmNlICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInJlc291cmNlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5yZXNvdXJjZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ucmVzb3VyY2UudjEuUmVzb3VyY2UudG9PYmplY3QobWVzc2FnZS5yZXNvdXJjZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZUxvZ3MgJiYgbWVzc2FnZS5zY29wZUxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjb3BlTG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWVzc2FnZS5zY29wZUxvZ3MubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZUxvZ3Nbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLnRvT2JqZWN0KG1lc3NhZ2Uuc2NvcGVMb2dzW2pdLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjaGVtYVVybCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY2hlbWFVcmxcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IG1lc3NhZ2Uuc2NoZW1hVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgUmVzb3VyY2VMb2dzIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBSZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5SZXNvdXJjZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFJlc291cmNlTG9ncy5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuUmVzb3VyY2VMb2dzXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvZ3M7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB2MS5TY29wZUxvZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogUHJvcGVydGllcyBvZiBhIFNjb3BlTG9ncy5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAaW50ZXJmYWNlIElTY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JSW5zdHJ1bWVudGF0aW9uU2NvcGV8bnVsbH0gW3Njb3BlXSBTY29wZUxvZ3Mgc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dSZWNvcmQ+fG51bGx9IFtsb2dSZWNvcmRzXSBTY29wZUxvZ3MgbG9nUmVjb3Jkc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbc2NoZW1hVXJsXSBTY29wZUxvZ3Mgc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29uc3RydWN0cyBhIG5ldyBTY29wZUxvZ3MuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGNsYXNzZGVzYyBSZXByZXNlbnRzIGEgU2NvcGVMb2dzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAaW1wbGVtZW50cyBJU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5JU2NvcGVMb2dzPX0gW3Byb3BlcnRpZXNdIFByb3BlcnRpZXMgdG8gc2V0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTY29wZUxvZ3MocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNba2V5c1tpXV0gIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNba2V5c1tpXV0gPSBwcm9wZXJ0aWVzW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBTY29wZUxvZ3Mgc2NvcGUuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge29wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklJbnN0cnVtZW50YXRpb25TY29wZXxudWxsfHVuZGVmaW5lZH0gc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MucHJvdG90eXBlLnNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNjb3BlTG9ncyBsb2dSZWNvcmRzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtBcnJheS48b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dSZWNvcmQ+fSBsb2dSZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLnByb3RvdHlwZS5sb2dSZWNvcmRzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFNjb3BlTG9ncyBzY2hlbWFVcmwuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gc2NoZW1hVXJsXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLnByb3RvdHlwZS5zY2hlbWFVcmwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBTY29wZUxvZ3MgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVNjb3BlTG9ncz19IFtwcm9wZXJ0aWVzXSBQcm9wZXJ0aWVzIHRvIHNldFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc30gU2NvcGVMb2dzIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2NvcGVMb2dzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIFNjb3BlTG9ncyBtZXNzYWdlLiBEb2VzIG5vdCBpbXBsaWNpdGx5IHtAbGluayBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLnZlcmlmeXx2ZXJpZnl9IG1lc3NhZ2VzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuSVNjb3BlTG9nc30gbWVzc2FnZSBTY29wZUxvZ3MgbWVzc2FnZSBvciBwbGFpbiBvYmplY3QgdG8gZW5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLldyaXRlcn0gW3dyaXRlcl0gV3JpdGVyIHRvIGVuY29kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7JHByb3RvYnVmLldyaXRlcn0gV3JpdGVyXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKG1lc3NhZ2UsIHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gJFdyaXRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNjb3BlICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzY29wZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS5lbmNvZGUobWVzc2FnZS5zY29wZSwgd3JpdGVyLnVpbnQzMigvKiBpZCAxLCB3aXJlVHlwZSAyID0qLyAxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmxvZ1JlY29yZHMgIT0gbnVsbCAmJiBtZXNzYWdlLmxvZ1JlY29yZHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5sb2dSZWNvcmRzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLmVuY29kZShtZXNzYWdlLmxvZ1JlY29yZHNbaV0sIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMiA9Ki8gMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY2hlbWFVcmwgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDMsIHdpcmVUeXBlIDIgPSovIDI2KS5zdHJpbmcobWVzc2FnZS5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBTY29wZUxvZ3MgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncy52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklTY29wZUxvZ3N9IG1lc3NhZ2UgU2NvcGVMb2dzIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIFNjb3BlTG9ncyBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzfSBTY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNjb3BlID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuSW5zdHJ1bWVudGF0aW9uU2NvcGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5sb2dSZWNvcmRzICYmIG1lc3NhZ2UubG9nUmVjb3Jkcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubG9nUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5sb2dSZWNvcmRzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY2hlbWFVcmwgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBEZWNvZGVzIGEgU2NvcGVMb2dzIG1lc3NhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlYWRlciBvciBidWZmZXIsIGxlbmd0aCBkZWxpbWl0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5SZWFkZXJ8VWludDhBcnJheX0gcmVhZGVyIFJlYWRlciBvciBidWZmZXIgdG8gZGVjb2RlIGZyb21cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3N9IFNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBheWxvYWQgaXMgbm90IGEgcmVhZGVyIG9yIHZhbGlkIGJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAgKiBAdGhyb3dzIHskcHJvdG9idWYudXRpbC5Qcm90b2NvbEVycm9yfSBJZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy5kZWNvZGVEZWxpbWl0ZWQgPSBmdW5jdGlvbiBkZWNvZGVEZWxpbWl0ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZWFkZXIgaW5zdGFuY2VvZiAkUmVhZGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgJFJlYWRlcihyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFZlcmlmaWVzIGEgU2NvcGVMb2dzIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBtZXNzYWdlIFBsYWluIG9iamVjdCB0byB2ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ3xudWxsfSBgbnVsbGAgaWYgdmFsaWQsIG90aGVyd2lzZSB0aGUgcmVhc29uIHdoeSBpdCBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIFNjb3BlTG9ncy52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiIHx8IG1lc3NhZ2UgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0IGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLnZlcmlmeShtZXNzYWdlLnNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNjb3BlLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5sb2dSZWNvcmRzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImxvZ1JlY29yZHNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZS5sb2dSZWNvcmRzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibG9nUmVjb3JkczogYXJyYXkgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2UubG9nUmVjb3Jkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkLnZlcmlmeShtZXNzYWdlLmxvZ1JlY29yZHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJsb2dSZWNvcmRzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzU3RyaW5nKG1lc3NhZ2Uuc2NoZW1hVXJsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2NoZW1hVXJsOiBzdHJpbmcgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ3JlYXRlcyBhIFNjb3BlTG9ncyBtZXNzYWdlIGZyb20gYSBwbGFpbiBvYmplY3QuIEFsc28gY29udmVydHMgdmFsdWVzIHRvIHRoZWlyIHJlc3BlY3RpdmUgaW50ZXJuYWwgdHlwZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBmcm9tT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gb2JqZWN0IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc30gU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBTY29wZUxvZ3MuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zY29wZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc2NvcGUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLnNjb3BlOiBvYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zY29wZSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkluc3RydW1lbnRhdGlvblNjb3BlLmZyb21PYmplY3Qob2JqZWN0LnNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QubG9nUmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmplY3QubG9nUmVjb3JkcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmxvZ1JlY29yZHM6IGFycmF5IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubG9nUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0LmxvZ1JlY29yZHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QubG9nUmVjb3Jkc1tpXSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIi5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2NvcGVMb2dzLmxvZ1JlY29yZHM6IG9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5sb2dSZWNvcmRzW2ldID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC5mcm9tT2JqZWN0KG9iamVjdC5sb2dSZWNvcmRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNjaGVtYVVybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2NoZW1hVXJsID0gU3RyaW5nKG9iamVjdC5zY2hlbWFVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDcmVhdGVzIGEgcGxhaW4gb2JqZWN0IGZyb20gYSBTY29wZUxvZ3MgbWVzc2FnZS4gQWxzbyBjb252ZXJ0cyB2YWx1ZXMgdG8gb3RoZXIgdHlwZXMgaWYgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdG9PYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3N9IG1lc3NhZ2UgU2NvcGVMb2dzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7JHByb3RvYnVmLklDb252ZXJzaW9uT3B0aW9uc30gW29wdGlvbnNdIENvbnZlcnNpb24gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IFBsYWluIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5cyB8fCBvcHRpb25zLmRlZmF1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5sb2dSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zY29wZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNjaGVtYVVybCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zY29wZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzY29wZVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NvcGUgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JbnN0cnVtZW50YXRpb25TY29wZS50b09iamVjdChtZXNzYWdlLnNjb3BlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmxvZ1JlY29yZHMgJiYgbWVzc2FnZS5sb2dSZWNvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5sb2dSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtZXNzYWdlLmxvZ1JlY29yZHMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5sb2dSZWNvcmRzW2pdID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC50b09iamVjdChtZXNzYWdlLmxvZ1JlY29yZHNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2NoZW1hVXJsICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNjaGVtYVVybFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2NoZW1hVXJsID0gbWVzc2FnZS5zY2hlbWFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgdGhpcyBTY29wZUxvZ3MgdG8gSlNPTi5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIHRvSlNPTlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBKU09OIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b09iamVjdCh0aGlzLCAkcHJvdG9idWYudXRpbC50b0pTT05PcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdHlwZSB1cmwgZm9yIFNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZ2V0VHlwZVVybFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNjb3BlTG9nc1xuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZVVybFByZWZpeF0geW91ciBjdXN0b20gdHlwZVVybFByZWZpeChkZWZhdWx0IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCB0eXBlIHVybFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgU2NvcGVMb2dzLmdldFR5cGVVcmwgPSBmdW5jdGlvbiBnZXRUeXBlVXJsKHR5cGVVcmxQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlVXJsUHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVXJsUHJlZml4ID0gXCJ0eXBlLmdvb2dsZWFwaXMuY29tXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZVVybFByZWZpeCArIFwiL29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5TY29wZUxvZ3NcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjb3BlTG9ncztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFNldmVyaXR5TnVtYmVyIGVudW0uXG4gICAgICAgICAgICAgICAgICogQG5hbWUgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNldmVyaXR5TnVtYmVyXG4gICAgICAgICAgICAgICAgICogQGVudW0ge251bWJlcn1cbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX1VOU1BFQ0lGSUVEPTAgU0VWRVJJVFlfTlVNQkVSX1VOU1BFQ0lGSUVEIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9UUkFDRT0xIFNFVkVSSVRZX05VTUJFUl9UUkFDRSB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfVFJBQ0UyPTIgU0VWRVJJVFlfTlVNQkVSX1RSQUNFMiB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfVFJBQ0UzPTMgU0VWRVJJVFlfTlVNQkVSX1RSQUNFMyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfVFJBQ0U0PTQgU0VWRVJJVFlfTlVNQkVSX1RSQUNFNCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfREVCVUc9NSBTRVZFUklUWV9OVU1CRVJfREVCVUcgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0RFQlVHMj02IFNFVkVSSVRZX05VTUJFUl9ERUJVRzIgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0RFQlVHMz03IFNFVkVSSVRZX05VTUJFUl9ERUJVRzMgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0RFQlVHND04IFNFVkVSSVRZX05VTUJFUl9ERUJVRzQgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0lORk89OSBTRVZFUklUWV9OVU1CRVJfSU5GTyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfSU5GTzI9MTAgU0VWRVJJVFlfTlVNQkVSX0lORk8yIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9JTkZPMz0xMSBTRVZFUklUWV9OVU1CRVJfSU5GTzMgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0lORk80PTEyIFNFVkVSSVRZX05VTUJFUl9JTkZPNCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfV0FSTj0xMyBTRVZFUklUWV9OVU1CRVJfV0FSTiB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfV0FSTjI9MTQgU0VWRVJJVFlfTlVNQkVSX1dBUk4yIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9XQVJOMz0xNSBTRVZFUklUWV9OVU1CRVJfV0FSTjMgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX1dBUk40PTE2IFNFVkVSSVRZX05VTUJFUl9XQVJONCB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfRVJST1I9MTcgU0VWRVJJVFlfTlVNQkVSX0VSUk9SIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9FUlJPUjI9MTggU0VWRVJJVFlfTlVNQkVSX0VSUk9SMiB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfRVJST1IzPTE5IFNFVkVSSVRZX05VTUJFUl9FUlJPUjMgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0VSUk9SND0yMCBTRVZFUklUWV9OVU1CRVJfRVJST1I0IHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9GQVRBTD0yMSBTRVZFUklUWV9OVU1CRVJfRkFUQUwgdmFsdWVcbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gU0VWRVJJVFlfTlVNQkVSX0ZBVEFMMj0yMiBTRVZFUklUWV9OVU1CRVJfRkFUQUwyIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFNFVkVSSVRZX05VTUJFUl9GQVRBTDM9MjMgU0VWRVJJVFlfTlVNQkVSX0ZBVEFMMyB2YWx1ZVxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBTRVZFUklUWV9OVU1CRVJfRkFUQUw0PTI0IFNFVkVSSVRZX05VTUJFUl9GQVRBTDQgdmFsdWVcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2MS5TZXZlcml0eU51bWJlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXNCeUlkID0ge30sIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUodmFsdWVzQnlJZCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzBdID0gXCJTRVZFUklUWV9OVU1CRVJfVU5TUEVDSUZJRURcIl0gPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsxXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFXCJdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMl0gPSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRTJcIl0gPSAyO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFszXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFM1wiXSA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzRdID0gXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0U0XCJdID0gNDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbNV0gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVR1wiXSA9IDU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzZdID0gXCJTRVZFUklUWV9OVU1CRVJfREVCVUcyXCJdID0gNjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbN10gPSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzNcIl0gPSA3O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFs4XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHNFwiXSA9IDg7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzldID0gXCJTRVZFUklUWV9OVU1CRVJfSU5GT1wiXSA9IDk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzEwXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0lORk8yXCJdID0gMTA7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzExXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0lORk8zXCJdID0gMTE7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzEyXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0lORk80XCJdID0gMTI7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzEzXSA9IFwiU0VWRVJJVFlfTlVNQkVSX1dBUk5cIl0gPSAxMztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTRdID0gXCJTRVZFUklUWV9OVU1CRVJfV0FSTjJcIl0gPSAxNDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTVdID0gXCJTRVZFUklUWV9OVU1CRVJfV0FSTjNcIl0gPSAxNTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTZdID0gXCJTRVZFUklUWV9OVU1CRVJfV0FSTjRcIl0gPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMTddID0gXCJTRVZFUklUWV9OVU1CRVJfRVJST1JcIl0gPSAxNztcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMThdID0gXCJTRVZFUklUWV9OVU1CRVJfRVJST1IyXCJdID0gMTg7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzE5XSA9IFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SM1wiXSA9IDE5O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyMF0gPSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjRcIl0gPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMjFdID0gXCJTRVZFUklUWV9OVU1CRVJfRkFUQUxcIl0gPSAyMTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMjJdID0gXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwyXCJdID0gMjI7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t2YWx1ZXNCeUlkWzIzXSA9IFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMM1wiXSA9IDIzO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFsyNF0gPSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDRcIl0gPSAyNDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZEZsYWdzIGVudW0uXG4gICAgICAgICAgICAgICAgICogQG5hbWUgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZEZsYWdzXG4gICAgICAgICAgICAgICAgICogQGVudW0ge251bWJlcn1cbiAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gTE9HX1JFQ09SRF9GTEFHU19ET19OT1RfVVNFPTAgTE9HX1JFQ09SRF9GTEFHU19ET19OT1RfVVNFIHZhbHVlXG4gICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IExPR19SRUNPUkRfRkxBR1NfVFJBQ0VfRkxBR1NfTUFTSz0yNTUgTE9HX1JFQ09SRF9GTEFHU19UUkFDRV9GTEFHU19NQVNLIHZhbHVlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdjEuTG9nUmVjb3JkRmxhZ3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzQnlJZCA9IHt9LCB2YWx1ZXMgPSBPYmplY3QuY3JlYXRlKHZhbHVlc0J5SWQpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbdmFsdWVzQnlJZFswXSA9IFwiTE9HX1JFQ09SRF9GTEFHU19ET19OT1RfVVNFXCJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3ZhbHVlc0J5SWRbMjU1XSA9IFwiTE9HX1JFQ09SRF9GTEFHU19UUkFDRV9GTEFHU19NQVNLXCJdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdjEuTG9nUmVjb3JkID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFByb3BlcnRpZXMgb2YgYSBMb2dSZWNvcmQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjFcbiAgICAgICAgICAgICAgICAgICAgICogQGludGVyZmFjZSBJTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfExvbmd8bnVsbH0gW3RpbWVVbml4TmFub10gTG9nUmVjb3JkIHRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxMb25nfG51bGx9IFtvYnNlcnZlZFRpbWVVbml4TmFub10gTG9nUmVjb3JkIG9ic2VydmVkVGltZVVuaXhOYW5vXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLlNldmVyaXR5TnVtYmVyfG51bGx9IFtzZXZlcml0eU51bWJlcl0gTG9nUmVjb3JkIHNldmVyaXR5TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtzZXZlcml0eVRleHRdIExvZ1JlY29yZCBzZXZlcml0eVRleHRcbiAgICAgICAgICAgICAgICAgICAgICogQHByb3BlcnR5IHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQW55VmFsdWV8bnVsbH0gW2JvZHldIExvZ1JlY29yZCBib2R5XG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPG9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLklLZXlWYWx1ZT58bnVsbH0gW2F0dHJpYnV0ZXNdIExvZ1JlY29yZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IFtkcm9wcGVkQXR0cmlidXRlc0NvdW50XSBMb2dSZWNvcmQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBbZmxhZ3NdIExvZ1JlY29yZCBmbGFnc1xuICAgICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkge1VpbnQ4QXJyYXl8bnVsbH0gW3RyYWNlSWRdIExvZ1JlY29yZCB0cmFjZUlkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7VWludDhBcnJheXxudWxsfSBbc3BhbklkXSBMb2dSZWNvcmQgc3BhbklkXG4gICAgICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFtldmVudE5hbWVdIExvZ1JlY29yZCBldmVudE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IExvZ1JlY29yZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MVxuICAgICAgICAgICAgICAgICAgICAgKiBAY2xhc3NkZXNjIFJlcHJlc2VudHMgYSBMb2dSZWNvcmQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbXBsZW1lbnRzIElMb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dSZWNvcmQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExvZ1JlY29yZChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1trZXlzW2ldXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1trZXlzW2ldXSA9IHByb3BlcnRpZXNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCB0aW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSB0aW1lVW5peE5hbm9cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLnRpbWVVbml4TmFubyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgb2JzZXJ2ZWRUaW1lVW5peE5hbm8uXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcnxMb25nfG51bGx8dW5kZWZpbmVkfSBvYnNlcnZlZFRpbWVVbml4TmFub1xuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nUmVjb3JkIHNldmVyaXR5TnVtYmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2V2ZXJpdHlOdW1iZXJ8bnVsbHx1bmRlZmluZWR9IHNldmVyaXR5TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS5zZXZlcml0eU51bWJlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgc2V2ZXJpdHlUZXh0LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHNldmVyaXR5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUuc2V2ZXJpdHlUZXh0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCBib2R5LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JQW55VmFsdWV8bnVsbHx1bmRlZmluZWR9IGJvZHlcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLmJvZHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nUmVjb3JkIGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXIge0FycmF5LjxvcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5JS2V5VmFsdWU+fSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS5hdHRyaWJ1dGVzID0gJHV0aWwuZW1wdHlBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIExvZ1JlY29yZCBkcm9wcGVkQXR0cmlidXRlc0NvdW50LlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogTG9nUmVjb3JkIGZsYWdzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ8bnVsbHx1bmRlZmluZWR9IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLnByb3RvdHlwZS5mbGFncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgdHJhY2VJZC5cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlciB7VWludDhBcnJheXxudWxsfHVuZGVmaW5lZH0gdHJhY2VJZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUudHJhY2VJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgc3BhbklkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtVaW50OEFycmF5fG51bGx8dW5kZWZpbmVkfSBzcGFuSWRcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQucHJvdG90eXBlLnNwYW5JZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBMb2dSZWNvcmQgZXZlbnROYW1lLlxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGV2ZW50TmFtZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUuZXZlbnROYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgTG9nUmVjb3JkIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dSZWNvcmQ9fSBbcHJvcGVydGllc10gUHJvcGVydGllcyB0byBzZXRcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmR9IExvZ1JlY29yZCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvZ1JlY29yZChwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBMb2dSZWNvcmQgbWVzc2FnZS4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dSZWNvcmR9IG1lc3NhZ2UgTG9nUmVjb3JkIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9ICRXcml0ZXIuY3JlYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDEsIHdpcmVUeXBlIDEgPSovIDkpLmZpeGVkNjQobWVzc2FnZS50aW1lVW5peE5hbm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcInNldmVyaXR5TnVtYmVyXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMiwgd2lyZVR5cGUgMCA9Ki8gMTYpLmludDMyKG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0ICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzZXZlcml0eVRleHRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAzLCB3aXJlVHlwZSAyID0qLyAyNikuc3RyaW5nKG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmJvZHkgIT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlLCBcImJvZHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZW5jb2RlKG1lc3NhZ2UuYm9keSwgd3JpdGVyLnVpbnQzMigvKiBpZCA1LCB3aXJlVHlwZSAyID0qLyA0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5lbmNvZGUobWVzc2FnZS5hdHRyaWJ1dGVzW2ldLCB3cml0ZXIudWludDMyKC8qIGlkIDYsIHdpcmVUeXBlIDIgPSovIDUwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDcsIHdpcmVUeXBlIDAgPSovIDU2KS51aW50MzIobWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJmbGFnc1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDgsIHdpcmVUeXBlIDUgPSovIDY5KS5maXhlZDMyKG1lc3NhZ2UuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDksIHdpcmVUeXBlIDIgPSovIDc0KS5ieXRlcyhtZXNzYWdlLnRyYWNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3BhbklkICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnVpbnQzMigvKiBpZCAxMCwgd2lyZVR5cGUgMiA9Ki8gODIpLmJ5dGVzKG1lc3NhZ2Uuc3BhbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vICE9IG51bGwgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgXCJvYnNlcnZlZFRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIudWludDMyKC8qIGlkIDExLCB3aXJlVHlwZSAxID0qLyA4OSkuZml4ZWQ2NChtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV2ZW50TmFtZSAhPSBudWxsICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2UsIFwiZXZlbnROYW1lXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci51aW50MzIoLyogaWQgMTIsIHdpcmVUeXBlIDIgPSovIDk4KS5zdHJpbmcobWVzc2FnZS5ldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEVuY29kZXMgdGhlIHNwZWNpZmllZCBMb2dSZWNvcmQgbWVzc2FnZSwgbGVuZ3RoIGRlbGltaXRlZC4gRG9lcyBub3QgaW1wbGljaXRseSB7QGxpbmsgb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZC52ZXJpZnl8dmVyaWZ5fSBtZXNzYWdlcy5cbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLklMb2dSZWNvcmR9IG1lc3NhZ2UgTG9nUmVjb3JkIG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0IHRvIGVuY29kZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0geyRwcm90b2J1Zi5Xcml0ZXJ9IFt3cml0ZXJdIFdyaXRlciB0byBlbmNvZGUgdG9cbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMgeyRwcm90b2J1Zi5Xcml0ZXJ9IFdyaXRlclxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLmVuY29kZURlbGltaXRlZCA9IGZ1bmN0aW9uIGVuY29kZURlbGltaXRlZChtZXNzYWdlLCB3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY29kZShtZXNzYWdlLCB3cml0ZXIpLmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIExvZ1JlY29yZCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBNZXNzYWdlIGxlbmd0aCBpZiBrbm93biBiZWZvcmVoYW5kXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkfSBMb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHJlYWRlciwgbGVuZ3RoLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gJFJlYWRlci5jcmVhdGUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoLCBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09PSBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHJlYWRlci5maXhlZDY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vID0gcmVhZGVyLmZpeGVkNjQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5VGV4dCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ib2R5ID0gJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuQW55VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5hdHRyaWJ1dGVzICYmIG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzLnB1c2goJHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb21tb24udjEuS2V5VmFsdWUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mbGFncyA9IHJlYWRlci5maXhlZDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VJZCA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuSWQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZXZlbnROYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogRGVjb2RlcyBhIExvZ1JlY29yZCBtZXNzYWdlIGZyb20gdGhlIHNwZWNpZmllZCByZWFkZXIgb3IgYnVmZmVyLCBsZW5ndGggZGVsaW1pdGVkLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkXG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuUmVhZGVyfFVpbnQ4QXJyYXl9IHJlYWRlciBSZWFkZXIgb3IgYnVmZmVyIHRvIGRlY29kZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkfSBMb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXlsb2FkIGlzIG5vdCBhIHJlYWRlciBvciB2YWxpZCBidWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICogQHRocm93cyB7JHByb3RvYnVmLnV0aWwuUHJvdG9jb2xFcnJvcn0gSWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQuZGVjb2RlRGVsaW1pdGVkID0gZnVuY3Rpb24gZGVjb2RlRGVsaW1pdGVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhZGVyIGluc3RhbmNlb2YgJFJlYWRlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3ICRSZWFkZXIocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBWZXJpZmllcyBhIExvZ1JlY29yZCBtZXNzYWdlLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEBtZW1iZXJvZiBvcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXG4gICAgICAgICAgICAgICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gbWVzc2FnZSBQbGFpbiBvYmplY3QgdG8gdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gYG51bGxgIGlmIHZhbGlkLCBvdGhlcndpc2UgdGhlIHJlYXNvbiB3aHkgaXQgaXMgbm90XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJvYmplY3RcIiB8fCBtZXNzYWdlID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9iamVjdCBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudGltZVVuaXhOYW5vICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVVbml4TmFub1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLnRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLnRpbWVVbml4TmFubyAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8ubG93KSAmJiAkdXRpbC5pc0ludGVnZXIobWVzc2FnZS50aW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aW1lVW5peE5hbm86IGludGVnZXJ8TG9uZyBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwib2JzZXJ2ZWRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc0ludGVnZXIobWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubykgJiYgIShtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vICYmICR1dGlsLmlzSW50ZWdlcihtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vLmxvdykgJiYgJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8uaGlnaCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJvYnNlcnZlZFRpbWVVbml4TmFubzogaW50ZWdlcnxMb25nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eU51bWJlclwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNldmVyaXR5TnVtYmVyOiBlbnVtIHZhbHVlIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNldmVyaXR5VGV4dCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eVRleHRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnNldmVyaXR5VGV4dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNldmVyaXR5VGV4dDogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ib2R5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJvZHlcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS52ZXJpZnkobWVzc2FnZS5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJvZHkuXCIgKyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dHJpYnV0ZXMgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYXR0cmlidXRlc1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzOiBhcnJheSBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLktleVZhbHVlLnZlcmlmeShtZXNzYWdlLmF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJhdHRyaWJ1dGVzLlwiICsgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IGludGVnZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmZsYWdzICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImZsYWdzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHV0aWwuaXNJbnRlZ2VyKG1lc3NhZ2UuZmxhZ3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJmbGFnczogaW50ZWdlciBleHBlY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHJhY2VJZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJ0cmFjZUlkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2UudHJhY2VJZCAmJiB0eXBlb2YgbWVzc2FnZS50cmFjZUlkLmxlbmd0aCA9PT0gXCJudW1iZXJcIiB8fCAkdXRpbC5pc1N0cmluZyhtZXNzYWdlLnRyYWNlSWQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidHJhY2VJZDogYnVmZmVyIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zcGFuSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwic3BhbklkXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG1lc3NhZ2Uuc3BhbklkICYmIHR5cGVvZiBtZXNzYWdlLnNwYW5JZC5sZW5ndGggPT09IFwibnVtYmVyXCIgfHwgJHV0aWwuaXNTdHJpbmcobWVzc2FnZS5zcGFuSWQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3BhbklkOiBidWZmZXIgZXhwZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV2ZW50TmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJldmVudE5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdXRpbC5pc1N0cmluZyhtZXNzYWdlLmV2ZW50TmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImV2ZW50TmFtZTogc3RyaW5nIGV4cGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBMb2dSZWNvcmQgbWVzc2FnZSBmcm9tIGEgcGxhaW4gb2JqZWN0LiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGludGVybmFsIHR5cGVzLlxuICAgICAgICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gZnJvbU9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IG9iamVjdCBQbGFpbiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge29wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmR9IExvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgTG9nUmVjb3JkLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gbmV3ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudGltZVVuaXhOYW5vICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlLnRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC50aW1lVW5peE5hbm8pKS51bnNpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC50aW1lVW5peE5hbm8sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0LnRpbWVVbml4TmFubyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS50aW1lVW5peE5hbm8gPSBvYmplY3QudGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QudGltZVVuaXhOYW5vID09PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3QudGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgb2JqZWN0LnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdXRpbC5Mb25nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9ICR1dGlsLkxvbmcuZnJvbVZhbHVlKG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubykpLnVuc2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9IHBhcnNlSW50KG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdC5vYnNlcnZlZFRpbWVVbml4TmFubyA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubyA9IG5ldyAkdXRpbC5Mb25nQml0cyhvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8ubG93ID4+PiAwLCBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8uaGlnaCA+Pj4gMCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqZWN0LnNldmVyaXR5TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Quc2V2ZXJpdHlOdW1iZXIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSBvYmplY3Quc2V2ZXJpdHlOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1VOU1BFQ0lGSUVEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfVFJBQ0UyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9UUkFDRTNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1RSQUNFNFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0RFQlVHMlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfREVCVUczXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9ERUJVRzRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk9cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk8yXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk8zXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0lORk80XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX1dBUk5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfV0FSTjRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1JcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRVJST1IyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0VSUk9SM1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAxOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9FUlJPUjRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUxcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVZFUklUWV9OVU1CRVJfRkFUQUwyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXZlcml0eU51bWJlciA9IDIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiU0VWRVJJVFlfTlVNQkVSX0ZBVEFMM1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgPSAyMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNFVkVSSVRZX05VTUJFUl9GQVRBTDRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5TnVtYmVyID0gMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zZXZlcml0eVRleHQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldmVyaXR5VGV4dCA9IFN0cmluZyhvYmplY3Quc2V2ZXJpdHlUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuYm9keSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QuYm9keSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuYm9keTogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuYm9keSA9ICRyb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29tbW9uLnYxLkFueVZhbHVlLmZyb21PYmplY3Qob2JqZWN0LmJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iamVjdC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuYXR0cmlidXRlczogYXJyYXkgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5hdHRyaWJ1dGVzW2ldICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiLm9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmQuYXR0cmlidXRlczogb2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmF0dHJpYnV0ZXNbaV0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS5mcm9tT2JqZWN0KG9iamVjdC5hdHRyaWJ1dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSBvYmplY3QuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZmxhZ3MgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZsYWdzID0gb2JqZWN0LmZsYWdzID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50cmFjZUlkICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudHJhY2VJZCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHV0aWwuYmFzZTY0LmRlY29kZShvYmplY3QudHJhY2VJZCwgbWVzc2FnZS50cmFjZUlkID0gJHV0aWwubmV3QnVmZmVyKCR1dGlsLmJhc2U2NC5sZW5ndGgob2JqZWN0LnRyYWNlSWQpKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LnRyYWNlSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudHJhY2VJZCA9IG9iamVjdC50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5zcGFuSWQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5zcGFuSWQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dGlsLmJhc2U2NC5kZWNvZGUob2JqZWN0LnNwYW5JZCwgbWVzc2FnZS5zcGFuSWQgPSAkdXRpbC5uZXdCdWZmZXIoJHV0aWwuYmFzZTY0Lmxlbmd0aChvYmplY3Quc3BhbklkKSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5zcGFuSWQubGVuZ3RoID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3BhbklkID0gb2JqZWN0LnNwYW5JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZXZlbnROYW1lICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5ldmVudE5hbWUgPSBTdHJpbmcob2JqZWN0LmV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENyZWF0ZXMgYSBwbGFpbiBvYmplY3QgZnJvbSBhIExvZ1JlY29yZCBtZXNzYWdlLiBBbHNvIGNvbnZlcnRzIHZhbHVlcyB0byBvdGhlciB0eXBlcyBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b09iamVjdFxuICAgICAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2Ygb3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZFxuICAgICAgICAgICAgICAgICAgICAgKiBAc3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7b3BlbnRlbGVtZXRyeS5wcm90by5sb2dzLnYxLkxvZ1JlY29yZH0gbWVzc2FnZSBMb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHskcHJvdG9idWYuSUNvbnZlcnNpb25PcHRpb25zfSBbb3B0aW9uc10gQ29udmVyc2lvbiBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gUGxhaW4gb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBMb2dSZWNvcmQudG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXlzIHx8IG9wdGlvbnMuZGVmYXVsdHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dGlsLkxvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmcgPSBuZXcgJHV0aWwuTG9uZygwLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBsb25nLnRvU3RyaW5nKCkgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBsb25nLnRvTnVtYmVyKCkgOiBsb25nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNldmVyaXR5TnVtYmVyID0gb3B0aW9ucy5lbnVtcyA9PT0gU3RyaW5nID8gXCJTRVZFUklUWV9OVU1CRVJfVU5TUEVDSUZJRURcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNldmVyaXR5VGV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvZHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ5dGVzID09PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50cmFjZUlkID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYnl0ZXMgIT09IEFycmF5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnRyYWNlSWQgPSAkdXRpbC5uZXdCdWZmZXIob2JqZWN0LnRyYWNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyA9PT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ieXRlcyAhPT0gQXJyYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc3BhbklkID0gJHV0aWwubmV3QnVmZmVyKG9iamVjdC5zcGFuSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHV0aWwuTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZyA9IG5ldyAkdXRpbC5Mb25nKDAsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gbG9uZy50b1N0cmluZygpIDogb3B0aW9ucy5sb25ncyA9PT0gTnVtYmVyID8gbG9uZy50b051bWJlcigpIDogbG9uZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBcIjBcIiA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV2ZW50TmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS50aW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidGltZVVuaXhOYW5vXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS50aW1lVW5peE5hbm8gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC50aW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS50aW1lVW5peE5hbm8pIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLnRpbWVVbml4TmFubykgOiBvcHRpb25zLmxvbmdzID09PSBOdW1iZXIgPyBuZXcgJHV0aWwuTG9uZ0JpdHMobWVzc2FnZS50aW1lVW5peE5hbm8ubG93ID4+PiAwLCBtZXNzYWdlLnRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS50aW1lVW5peE5hbm87XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zZXZlcml0eU51bWJlciAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzZXZlcml0eU51bWJlclwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V2ZXJpdHlOdW1iZXIgPSBvcHRpb25zLmVudW1zID09PSBTdHJpbmcgPyAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2V2ZXJpdHlOdW1iZXJbbWVzc2FnZS5zZXZlcml0eU51bWJlcl0gPT09IHVuZGVmaW5lZCA/IG1lc3NhZ2Uuc2V2ZXJpdHlOdW1iZXIgOiAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuU2V2ZXJpdHlOdW1iZXJbbWVzc2FnZS5zZXZlcml0eU51bWJlcl0gOiBtZXNzYWdlLnNldmVyaXR5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc2V2ZXJpdHlUZXh0ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcInNldmVyaXR5VGV4dFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V2ZXJpdHlUZXh0ID0gbWVzc2FnZS5zZXZlcml0eVRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ib2R5ICE9IG51bGwgJiYgbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImJvZHlcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvZHkgPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5BbnlWYWx1ZS50b09iamVjdChtZXNzYWdlLmJvZHksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0cmlidXRlcyAmJiBtZXNzYWdlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1lc3NhZ2UuYXR0cmlidXRlcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmF0dHJpYnV0ZXNbal0gPSAkcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbW1vbi52MS5LZXlWYWx1ZS50b09iamVjdChtZXNzYWdlLmF0dHJpYnV0ZXNbal0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gbWVzc2FnZS5kcm9wcGVkQXR0cmlidXRlc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZmxhZ3MgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZmxhZ3NcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmZsYWdzID0gbWVzc2FnZS5mbGFncztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnRyYWNlSWQgIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwidHJhY2VJZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QudHJhY2VJZCA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS50cmFjZUlkLCAwLCBtZXNzYWdlLnRyYWNlSWQubGVuZ3RoKSA6IG9wdGlvbnMuYnl0ZXMgPT09IEFycmF5ID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZS50cmFjZUlkKSA6IG1lc3NhZ2UudHJhY2VJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnNwYW5JZCAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJzcGFuSWRcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNwYW5JZCA9IG9wdGlvbnMuYnl0ZXMgPT09IFN0cmluZyA/ICR1dGlsLmJhc2U2NC5lbmNvZGUobWVzc2FnZS5zcGFuSWQsIDAsIG1lc3NhZ2Uuc3BhbklkLmxlbmd0aCkgOiBvcHRpb25zLmJ5dGVzID09PSBBcnJheSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG1lc3NhZ2Uuc3BhbklkKSA6IG1lc3NhZ2Uuc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub2JzZXJ2ZWRUaW1lVW5peE5hbm8gIT0gbnVsbCAmJiBtZXNzYWdlLmhhc093blByb3BlcnR5KFwib2JzZXJ2ZWRUaW1lVW5peE5hbm9cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Qub2JzZXJ2ZWRUaW1lVW5peE5hbm8gPSBvcHRpb25zLmxvbmdzID09PSBTdHJpbmcgPyBTdHJpbmcobWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubykgOiBtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm9ic2VydmVkVGltZVVuaXhOYW5vID0gb3B0aW9ucy5sb25ncyA9PT0gU3RyaW5nID8gJHV0aWwuTG9uZy5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vKSA6IG9wdGlvbnMubG9uZ3MgPT09IE51bWJlciA/IG5ldyAkdXRpbC5Mb25nQml0cyhtZXNzYWdlLm9ic2VydmVkVGltZVVuaXhOYW5vLmxvdyA+Pj4gMCwgbWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFuby5oaWdoID4+PiAwKS50b051bWJlcigpIDogbWVzc2FnZS5vYnNlcnZlZFRpbWVVbml4TmFubztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV2ZW50TmFtZSAhPSBudWxsICYmIG1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJldmVudE5hbWVcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmV2ZW50TmFtZSA9IG1lc3NhZ2UuZXZlbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIHRoaXMgTG9nUmVjb3JkIHRvIEpTT04uXG4gICAgICAgICAgICAgICAgICAgICAqIEBmdW5jdGlvbiB0b0pTT05cbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gSlNPTiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9PYmplY3QodGhpcywgJHByb3RvYnVmLnV0aWwudG9KU09OT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IHR5cGUgdXJsIGZvciBMb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQGZ1bmN0aW9uIGdldFR5cGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICogQG1lbWJlcm9mIG9wZW50ZWxlbWV0cnkucHJvdG8ubG9ncy52MS5Mb2dSZWNvcmRcbiAgICAgICAgICAgICAgICAgICAgICogQHN0YXRpY1xuICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGVVcmxQcmVmaXhdIHlvdXIgY3VzdG9tIHR5cGVVcmxQcmVmaXgoZGVmYXVsdCBcInR5cGUuZ29vZ2xlYXBpcy5jb21cIilcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgdHlwZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIExvZ1JlY29yZC5nZXRUeXBlVXJsID0gZnVuY3Rpb24gZ2V0VHlwZVVybCh0eXBlVXJsUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVVybFByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVVybFByZWZpeCA9IFwidHlwZS5nb29nbGVhcGlzLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVVcmxQcmVmaXggKyBcIi9vcGVudGVsZW1ldHJ5LnByb3RvLmxvZ3MudjEuTG9nUmVjb3JkXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBMb2dSZWNvcmQ7XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjE7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgcmV0dXJuIGxvZ3M7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiBwcm90bztcbiAgICB9KSgpO1xuICAgIHJldHVybiBvcGVudGVsZW1ldHJ5O1xufSkoKTtcbm1vZHVsZS5leHBvcnRzID0gJHJvb3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb290LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5oZXhUb0JpbmFyeSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGludFZhbHVlKGNoYXJDb2RlKSB7XG4gICAgLy8gMC05XG4gICAgaWYgKGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29kZSAtIDQ4O1xuICAgIH1cbiAgICAvLyBhLWZcbiAgICBpZiAoY2hhckNvZGUgPj0gOTcgJiYgY2hhckNvZGUgPD0gMTAyKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29kZSAtIDg3O1xuICAgIH1cbiAgICAvLyBBLUZcbiAgICByZXR1cm4gY2hhckNvZGUgLSA1NTtcbn1cbmZ1bmN0aW9uIGhleFRvQmluYXJ5KGhleFN0cikge1xuICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGhleFN0ci5sZW5ndGggLyAyKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhleFN0ci5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBoaSA9IGludFZhbHVlKGhleFN0ci5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgY29uc3QgbG8gPSBpbnRWYWx1ZShoZXhTdHIuY2hhckNvZGVBdChpICsgMSkpO1xuICAgICAgICBidWZbb2Zmc2V0KytdID0gKGhpIDw8IDQpIHwgbG87XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5leHBvcnRzLmhleFRvQmluYXJ5ID0gaGV4VG9CaW5hcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZXgtdG8tYmluYXJ5LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPdGxwRW5jb2RlciA9IGV4cG9ydHMuZW5jb2RlQXNTdHJpbmcgPSBleHBvcnRzLmVuY29kZUFzTG9uZ0JpdHMgPSBleHBvcnRzLnRvTG9uZ0JpdHMgPSBleHBvcnRzLmhyVGltZVRvTmFub3MgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IGhleF90b19iaW5hcnlfMSA9IHJlcXVpcmUoXCIuL2hleC10by1iaW5hcnlcIik7XG5mdW5jdGlvbiBoclRpbWVUb05hbm9zKGhyVGltZSkge1xuICAgIGNvbnN0IE5BTk9TRUNPTkRTID0gQmlnSW50KDEwMDAwMDAwMDApO1xuICAgIHJldHVybiBCaWdJbnQoaHJUaW1lWzBdKSAqIE5BTk9TRUNPTkRTICsgQmlnSW50KGhyVGltZVsxXSk7XG59XG5leHBvcnRzLmhyVGltZVRvTmFub3MgPSBoclRpbWVUb05hbm9zO1xuZnVuY3Rpb24gdG9Mb25nQml0cyh2YWx1ZSkge1xuICAgIGNvbnN0IGxvdyA9IE51bWJlcihCaWdJbnQuYXNVaW50TigzMiwgdmFsdWUpKTtcbiAgICBjb25zdCBoaWdoID0gTnVtYmVyKEJpZ0ludC5hc1VpbnROKDMyLCB2YWx1ZSA+PiBCaWdJbnQoMzIpKSk7XG4gICAgcmV0dXJuIHsgbG93LCBoaWdoIH07XG59XG5leHBvcnRzLnRvTG9uZ0JpdHMgPSB0b0xvbmdCaXRzO1xuZnVuY3Rpb24gZW5jb2RlQXNMb25nQml0cyhoclRpbWUpIHtcbiAgICBjb25zdCBuYW5vcyA9IGhyVGltZVRvTmFub3MoaHJUaW1lKTtcbiAgICByZXR1cm4gdG9Mb25nQml0cyhuYW5vcyk7XG59XG5leHBvcnRzLmVuY29kZUFzTG9uZ0JpdHMgPSBlbmNvZGVBc0xvbmdCaXRzO1xuZnVuY3Rpb24gZW5jb2RlQXNTdHJpbmcoaHJUaW1lKSB7XG4gICAgY29uc3QgbmFub3MgPSBoclRpbWVUb05hbm9zKGhyVGltZSk7XG4gICAgcmV0dXJuIG5hbm9zLnRvU3RyaW5nKCk7XG59XG5leHBvcnRzLmVuY29kZUFzU3RyaW5nID0gZW5jb2RlQXNTdHJpbmc7XG5jb25zdCBlbmNvZGVUaW1lc3RhbXAgPSB0eXBlb2YgQmlnSW50ICE9PSAndW5kZWZpbmVkJyA/IGVuY29kZUFzU3RyaW5nIDogY29yZV8xLmhyVGltZVRvTmFub3NlY29uZHM7XG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIG9wdGlvbmFsSGV4VG9CaW5hcnkoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiAoMCwgaGV4X3RvX2JpbmFyeV8xLmhleFRvQmluYXJ5KShzdHIpO1xufVxuY29uc3QgREVGQVVMVF9FTkNPREVSID0ge1xuICAgIGVuY29kZUhyVGltZTogZW5jb2RlQXNMb25nQml0cyxcbiAgICBlbmNvZGVTcGFuQ29udGV4dDogaGV4X3RvX2JpbmFyeV8xLmhleFRvQmluYXJ5LFxuICAgIGVuY29kZU9wdGlvbmFsU3BhbkNvbnRleHQ6IG9wdGlvbmFsSGV4VG9CaW5hcnksXG59O1xuZnVuY3Rpb24gZ2V0T3RscEVuY29kZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfRU5DT0RFUjtcbiAgICB9XG4gICAgY29uc3QgdXNlTG9uZ0JpdHMgPSBvcHRpb25zLnVzZUxvbmdCaXRzID8/IHRydWU7XG4gICAgY29uc3QgdXNlSGV4ID0gb3B0aW9ucy51c2VIZXggPz8gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlSHJUaW1lOiB1c2VMb25nQml0cyA/IGVuY29kZUFzTG9uZ0JpdHMgOiBlbmNvZGVUaW1lc3RhbXAsXG4gICAgICAgIGVuY29kZVNwYW5Db250ZXh0OiB1c2VIZXggPyBpZGVudGl0eSA6IGhleF90b19iaW5hcnlfMS5oZXhUb0JpbmFyeSxcbiAgICAgICAgZW5jb2RlT3B0aW9uYWxTcGFuQ29udGV4dDogdXNlSGV4ID8gaWRlbnRpdHkgOiBvcHRpb25hbEhleFRvQmluYXJ5LFxuICAgIH07XG59XG5leHBvcnRzLmdldE90bHBFbmNvZGVyID0gZ2V0T3RscEVuY29kZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b0FueVZhbHVlID0gZXhwb3J0cy50b0tleVZhbHVlID0gZXhwb3J0cy50b0F0dHJpYnV0ZXMgPSBleHBvcnRzLmNyZWF0ZUluc3RydW1lbnRhdGlvblNjb3BlID0gZXhwb3J0cy5jcmVhdGVSZXNvdXJjZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlKHJlc291cmNlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXR0cmlidXRlczogdG9BdHRyaWJ1dGVzKHJlc291cmNlLmF0dHJpYnV0ZXMpLFxuICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwLFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZVJlc291cmNlID0gY3JlYXRlUmVzb3VyY2U7XG5mdW5jdGlvbiBjcmVhdGVJbnN0cnVtZW50YXRpb25TY29wZShzY29wZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHNjb3BlLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHNjb3BlLnZlcnNpb24sXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JlYXRlSW5zdHJ1bWVudGF0aW9uU2NvcGUgPSBjcmVhdGVJbnN0cnVtZW50YXRpb25TY29wZTtcbmZ1bmN0aW9uIHRvQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLm1hcChrZXkgPT4gdG9LZXlWYWx1ZShrZXksIGF0dHJpYnV0ZXNba2V5XSkpO1xufVxuZXhwb3J0cy50b0F0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXM7XG5mdW5jdGlvbiB0b0tleVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgdmFsdWU6IHRvQW55VmFsdWUodmFsdWUpLFxuICAgIH07XG59XG5leHBvcnRzLnRvS2V5VmFsdWUgPSB0b0tleVZhbHVlO1xuZnVuY3Rpb24gdG9BbnlWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgdmFsdWU7XG4gICAgaWYgKHQgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4geyBzdHJpbmdWYWx1ZTogdmFsdWUgfTtcbiAgICBpZiAodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybiB7IGRvdWJsZVZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICByZXR1cm4geyBpbnRWYWx1ZTogdmFsdWUgfTtcbiAgICB9XG4gICAgaWYgKHQgPT09ICdib29sZWFuJylcbiAgICAgICAgcmV0dXJuIHsgYm9vbFZhbHVlOiB2YWx1ZSB9O1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpXG4gICAgICAgIHJldHVybiB7IGJ5dGVzVmFsdWU6IHZhbHVlIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICByZXR1cm4geyBhcnJheVZhbHVlOiB7IHZhbHVlczogdmFsdWUubWFwKHRvQW55VmFsdWUpIH0gfTtcbiAgICBpZiAodCA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGt2bGlzdFZhbHVlOiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiBPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChbaywgdl0pID0+IHRvS2V5VmFsdWUoaywgdikpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICByZXR1cm4ge307XG59XG5leHBvcnRzLnRvQW55VmFsdWUgPSB0b0FueVZhbHVlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRvTG9nQXR0cmlidXRlcyA9IGV4cG9ydHMuY3JlYXRlRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0ID0gdm9pZCAwO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vdXRpbHNcIik7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2NvbW1vbi9pbnRlcm5hbFwiKTtcbmZ1bmN0aW9uIGNyZWF0ZUV4cG9ydExvZ3NTZXJ2aWNlUmVxdWVzdChsb2dSZWNvcmRzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZW5jb2RlciA9ICgwLCB1dGlsc18xLmdldE90bHBFbmNvZGVyKShvcHRpb25zKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXNvdXJjZUxvZ3M6IGxvZ1JlY29yZHNUb1Jlc291cmNlTG9ncyhsb2dSZWNvcmRzLCBlbmNvZGVyKSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QgPSBjcmVhdGVFeHBvcnRMb2dzU2VydmljZVJlcXVlc3Q7XG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZU1hcChsb2dSZWNvcmRzKSB7XG4gICAgY29uc3QgcmVzb3VyY2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgbG9nUmVjb3Jkcykge1xuICAgICAgICBjb25zdCB7IHJlc291cmNlLCBpbnN0cnVtZW50YXRpb25TY29wZTogeyBuYW1lLCB2ZXJzaW9uID0gJycsIHNjaGVtYVVybCA9ICcnIH0sIH0gPSByZWNvcmQ7XG4gICAgICAgIGxldCBpc21NYXAgPSByZXNvdXJjZU1hcC5nZXQocmVzb3VyY2UpO1xuICAgICAgICBpZiAoIWlzbU1hcCkge1xuICAgICAgICAgICAgaXNtTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgcmVzb3VyY2VNYXAuc2V0KHJlc291cmNlLCBpc21NYXApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzbUtleSA9IGAke25hbWV9QCR7dmVyc2lvbn06JHtzY2hlbWFVcmx9YDtcbiAgICAgICAgbGV0IHJlY29yZHMgPSBpc21NYXAuZ2V0KGlzbUtleSk7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgaXNtTWFwLnNldChpc21LZXksIHJlY29yZHMpO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VNYXA7XG59XG5mdW5jdGlvbiBsb2dSZWNvcmRzVG9SZXNvdXJjZUxvZ3MobG9nUmVjb3JkcywgZW5jb2Rlcikge1xuICAgIGNvbnN0IHJlc291cmNlTWFwID0gY3JlYXRlUmVzb3VyY2VNYXAobG9nUmVjb3Jkcyk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20ocmVzb3VyY2VNYXAsIChbcmVzb3VyY2UsIGlzbU1hcF0pID0+ICh7XG4gICAgICAgIHJlc291cmNlOiAoMCwgaW50ZXJuYWxfMS5jcmVhdGVSZXNvdXJjZSkocmVzb3VyY2UpLFxuICAgICAgICBzY29wZUxvZ3M6IEFycmF5LmZyb20oaXNtTWFwLCAoWywgc2NvcGVMb2dzXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY29wZTogKDAsIGludGVybmFsXzEuY3JlYXRlSW5zdHJ1bWVudGF0aW9uU2NvcGUpKHNjb3BlTG9nc1swXS5pbnN0cnVtZW50YXRpb25TY29wZSksXG4gICAgICAgICAgICAgICAgbG9nUmVjb3Jkczogc2NvcGVMb2dzLm1hcChsb2cgPT4gdG9Mb2dSZWNvcmQobG9nLCBlbmNvZGVyKSksXG4gICAgICAgICAgICAgICAgc2NoZW1hVXJsOiBzY29wZUxvZ3NbMF0uaW5zdHJ1bWVudGF0aW9uU2NvcGUuc2NoZW1hVXJsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHNjaGVtYVVybDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIHRvTG9nUmVjb3JkKGxvZywgZW5jb2Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUobG9nLmhyVGltZSksXG4gICAgICAgIG9ic2VydmVkVGltZVVuaXhOYW5vOiBlbmNvZGVyLmVuY29kZUhyVGltZShsb2cuaHJUaW1lT2JzZXJ2ZWQpLFxuICAgICAgICBzZXZlcml0eU51bWJlcjogdG9TZXZlcml0eU51bWJlcihsb2cuc2V2ZXJpdHlOdW1iZXIpLFxuICAgICAgICBzZXZlcml0eVRleHQ6IGxvZy5zZXZlcml0eVRleHQsXG4gICAgICAgIGJvZHk6ICgwLCBpbnRlcm5hbF8xLnRvQW55VmFsdWUpKGxvZy5ib2R5KSxcbiAgICAgICAgZXZlbnROYW1lOiBsb2cuZXZlbnROYW1lLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0b0xvZ0F0dHJpYnV0ZXMobG9nLmF0dHJpYnV0ZXMpLFxuICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiBsb2cuZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCxcbiAgICAgICAgZmxhZ3M6IGxvZy5zcGFuQ29udGV4dD8udHJhY2VGbGFncyxcbiAgICAgICAgdHJhY2VJZDogZW5jb2Rlci5lbmNvZGVPcHRpb25hbFNwYW5Db250ZXh0KGxvZy5zcGFuQ29udGV4dD8udHJhY2VJZCksXG4gICAgICAgIHNwYW5JZDogZW5jb2Rlci5lbmNvZGVPcHRpb25hbFNwYW5Db250ZXh0KGxvZy5zcGFuQ29udGV4dD8uc3BhbklkKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9TZXZlcml0eU51bWJlcihzZXZlcml0eU51bWJlcikge1xuICAgIHJldHVybiBzZXZlcml0eU51bWJlcjtcbn1cbmZ1bmN0aW9uIHRvTG9nQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLm1hcChrZXkgPT4gKDAsIGludGVybmFsXzEudG9LZXlWYWx1ZSkoa2V5LCBhdHRyaWJ1dGVzW2tleV0pKTtcbn1cbmV4cG9ydHMudG9Mb2dBdHRyaWJ1dGVzID0gdG9Mb2dBdHRyaWJ1dGVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJuYWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZMb2dzU2VyaWFsaXplciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCByb290ID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZC9yb290XCIpO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbFwiKTtcbmNvbnN0IGxvZ3NSZXNwb25zZVR5cGUgPSByb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjFcbiAgICAuRXhwb3J0TG9nc1NlcnZpY2VSZXNwb25zZTtcbmNvbnN0IGxvZ3NSZXF1ZXN0VHlwZSA9IHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubG9ncy52MVxuICAgIC5FeHBvcnRMb2dzU2VydmljZVJlcXVlc3Q7XG4vKlxuICogQGV4cGVyaW1lbnRhbCB0aGlzIHNlcmlhbGl6ZXIgbWF5IHJlY2VpdmUgYnJlYWtpbmcgY2hhbmdlcyBpbiBtaW5vciB2ZXJzaW9ucywgcGluIHRoaXMgcGFja2FnZSdzIHZlcnNpb24gd2hlbiB1c2luZyB0aGlzIGNvbnN0YW50XG4gKi9cbmV4cG9ydHMuUHJvdG9idWZMb2dzU2VyaWFsaXplciA9IHtcbiAgICBzZXJpYWxpemVSZXF1ZXN0OiAoYXJnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgaW50ZXJuYWxfMS5jcmVhdGVFeHBvcnRMb2dzU2VydmljZVJlcXVlc3QpKGFyZyk7XG4gICAgICAgIHJldHVybiBsb2dzUmVxdWVzdFR5cGUuZW5jb2RlKHJlcXVlc3QpLmZpbmlzaCgpO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemVSZXNwb25zZTogKGFyZykgPT4ge1xuICAgICAgICByZXR1cm4gbG9nc1Jlc3BvbnNlVHlwZS5kZWNvZGUoYXJnKTtcbiAgICB9LFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZ3MuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb3RvYnVmTG9nc1NlcmlhbGl6ZXIgPSB2b2lkIDA7XG52YXIgbG9nc18xID0gcmVxdWlyZShcIi4vbG9nc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb3RvYnVmTG9nc1NlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZ3NfMS5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB2b2lkIDA7XG4vKipcbiAqIEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgZGVmaW5lcyBob3cgYSBtZXRyaWMgYWdncmVnYXRvciByZXBvcnRzIGFnZ3JlZ2F0ZWRcbiAqIHZhbHVlcy4gSXQgZGVzY3JpYmVzIGhvdyB0aG9zZSB2YWx1ZXMgcmVsYXRlIHRvIHRoZSB0aW1lIGludGVydmFsIG92ZXJcbiAqIHdoaWNoIHRoZXkgYXJlIGFnZ3JlZ2F0ZWQuXG4gKi9cbnZhciBFQWdncmVnYXRpb25UZW1wb3JhbGl0eTtcbihmdW5jdGlvbiAoRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkpIHtcbiAgICAvKiBVTlNQRUNJRklFRCBpcyB0aGUgZGVmYXVsdCBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5LCBpdCBNVVNUIG5vdCBiZSB1c2VkLiAqL1xuICAgIEVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W0VBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W1wiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIl0gPSAwXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfVU5TUEVDSUZJRURcIjtcbiAgICAvKiogREVMVEEgaXMgYW4gQWdncmVnYXRpb25UZW1wb3JhbGl0eSBmb3IgYSBtZXRyaWMgYWdncmVnYXRvciB3aGljaCByZXBvcnRzXG4gICAgY2hhbmdlcyBzaW5jZSBsYXN0IHJlcG9ydCB0aW1lLiBTdWNjZXNzaXZlIG1ldHJpY3MgY29udGFpbiBhZ2dyZWdhdGlvbiBvZlxuICAgIHZhbHVlcyBmcm9tIGNvbnRpbnVvdXMgYW5kIG5vbi1vdmVybGFwcGluZyBpbnRlcnZhbHMuXG4gIFxuICAgIFRoZSB2YWx1ZXMgZm9yIGEgREVMVEEgbWV0cmljIGFyZSBiYXNlZCBvbmx5IG9uIHRoZSB0aW1lIGludGVydmFsXG4gICAgYXNzb2NpYXRlZCB3aXRoIG9uZSBtZWFzdXJlbWVudCBjeWNsZS4gVGhlcmUgaXMgbm8gZGVwZW5kZW5jeSBvblxuICAgIHByZXZpb3VzIG1lYXN1cmVtZW50cyBsaWtlIGlzIHRoZSBjYXNlIGZvciBDVU1VTEFUSVZFIG1ldHJpY3MuXG4gIFxuICAgIEZvciBleGFtcGxlLCBjb25zaWRlciBhIHN5c3RlbSBtZWFzdXJpbmcgdGhlIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0XG4gICAgaXQgcmVjZWl2ZXMgYW5kIHJlcG9ydHMgdGhlIHN1bSBvZiB0aGVzZSByZXF1ZXN0cyBldmVyeSBzZWNvbmQgYXMgYVxuICAgIERFTFRBIG1ldHJpYzpcbiAgXG4gICAgMS4gVGhlIHN5c3RlbSBzdGFydHMgcmVjZWl2aW5nIGF0IHRpbWU9dF8wLlxuICAgIDIuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgMy4gQSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc3lzdGVtIG1lYXN1cmVzIDEgcmVxdWVzdC5cbiAgICA0LiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDUuIFRoZSAxIHNlY29uZCBjb2xsZWN0aW9uIGN5Y2xlIGVuZHMuIEEgbWV0cmljIGlzIGV4cG9ydGVkIGZvciB0aGVcbiAgICAgICAgbnVtYmVyIG9mIHJlcXVlc3RzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVydmFsIG9mIHRpbWUgdF8wIHRvXG4gICAgICAgIHRfMCsxIHdpdGggYSB2YWx1ZSBvZiAzLlxuICAgIDYuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgNy4gQSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc3lzdGVtIG1lYXN1cmVzIDEgcmVxdWVzdC5cbiAgICA4LiBUaGUgMSBzZWNvbmQgY29sbGVjdGlvbiBjeWNsZSBlbmRzLiBBIG1ldHJpYyBpcyBleHBvcnRlZCBmb3IgdGhlXG4gICAgICAgIG51bWJlciBvZiByZXF1ZXN0cyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcnZhbCBvZiB0aW1lIHRfMCsxIHRvXG4gICAgICAgIHRfMCsyIHdpdGggYSB2YWx1ZSBvZiAyLiAqL1xuICAgIEVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W0VBZ2dyZWdhdGlvblRlbXBvcmFsaXR5W1wiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEFcIl0gPSAxXSA9IFwiQUdHUkVHQVRJT05fVEVNUE9SQUxJVFlfREVMVEFcIjtcbiAgICAvKiogQ1VNVUxBVElWRSBpcyBhbiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5IGZvciBhIG1ldHJpYyBhZ2dyZWdhdG9yIHdoaWNoXG4gICAgcmVwb3J0cyBjaGFuZ2VzIHNpbmNlIGEgZml4ZWQgc3RhcnQgdGltZS4gVGhpcyBtZWFucyB0aGF0IGN1cnJlbnQgdmFsdWVzXG4gICAgb2YgYSBDVU1VTEFUSVZFIG1ldHJpYyBkZXBlbmQgb24gYWxsIHByZXZpb3VzIG1lYXN1cmVtZW50cyBzaW5jZSB0aGVcbiAgICBzdGFydCB0aW1lLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBzZW5kZXIgaXMgcmVxdWlyZWQgdG8gcmV0YWluIHRoaXMgc3RhdGVcbiAgICBpbiBzb21lIGZvcm0uIElmIHRoaXMgc3RhdGUgaXMgbG9zdCBvciBpbnZhbGlkYXRlZCwgdGhlIENVTVVMQVRJVkUgbWV0cmljXG4gICAgdmFsdWVzIE1VU1QgYmUgcmVzZXQgYW5kIGEgbmV3IGZpeGVkIHN0YXJ0IHRpbWUgZm9sbG93aW5nIHRoZSBsYXN0XG4gICAgcmVwb3J0ZWQgbWVhc3VyZW1lbnQgdGltZSBzZW50IE1VU1QgYmUgdXNlZC5cbiAgXG4gICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgc3lzdGVtIG1lYXN1cmluZyB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXRcbiAgICBpdCByZWNlaXZlcyBhbmQgcmVwb3J0cyB0aGUgc3VtIG9mIHRoZXNlIHJlcXVlc3RzIGV2ZXJ5IHNlY29uZCBhcyBhXG4gICAgQ1VNVUxBVElWRSBtZXRyaWM6XG4gIFxuICAgIDEuIFRoZSBzeXN0ZW0gc3RhcnRzIHJlY2VpdmluZyBhdCB0aW1lPXRfMC5cbiAgICAyLiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDMuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgNC4gQSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc3lzdGVtIG1lYXN1cmVzIDEgcmVxdWVzdC5cbiAgICA1LiBUaGUgMSBzZWNvbmQgY29sbGVjdGlvbiBjeWNsZSBlbmRzLiBBIG1ldHJpYyBpcyBleHBvcnRlZCBmb3IgdGhlXG4gICAgICAgIG51bWJlciBvZiByZXF1ZXN0cyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcnZhbCBvZiB0aW1lIHRfMCB0b1xuICAgICAgICB0XzArMSB3aXRoIGEgdmFsdWUgb2YgMy5cbiAgICA2LiBBIHJlcXVlc3QgaXMgcmVjZWl2ZWQsIHRoZSBzeXN0ZW0gbWVhc3VyZXMgMSByZXF1ZXN0LlxuICAgIDcuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgOC4gVGhlIDEgc2Vjb25kIGNvbGxlY3Rpb24gY3ljbGUgZW5kcy4gQSBtZXRyaWMgaXMgZXhwb3J0ZWQgZm9yIHRoZVxuICAgICAgICBudW1iZXIgb2YgcmVxdWVzdHMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJ2YWwgb2YgdGltZSB0XzAgdG9cbiAgICAgICAgdF8wKzIgd2l0aCBhIHZhbHVlIG9mIDUuXG4gICAgOS4gVGhlIHN5c3RlbSBleHBlcmllbmNlcyBhIGZhdWx0IGFuZCBsb3NlcyBzdGF0ZS5cbiAgICAxMC4gVGhlIHN5c3RlbSByZWNvdmVycyBhbmQgcmVzdW1lcyByZWNlaXZpbmcgYXQgdGltZT10XzEuXG4gICAgMTEuIEEgcmVxdWVzdCBpcyByZWNlaXZlZCwgdGhlIHN5c3RlbSBtZWFzdXJlcyAxIHJlcXVlc3QuXG4gICAgMTIuIFRoZSAxIHNlY29uZCBjb2xsZWN0aW9uIGN5Y2xlIGVuZHMuIEEgbWV0cmljIGlzIGV4cG9ydGVkIGZvciB0aGVcbiAgICAgICAgbnVtYmVyIG9mIHJlcXVlc3RzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVydmFsIG9mIHRpbWUgdF8xIHRvXG4gICAgICAgIHRfMCsxIHdpdGggYSB2YWx1ZSBvZiAxLlxuICBcbiAgICBOb3RlOiBFdmVuIHRob3VnaCwgd2hlbiByZXBvcnRpbmcgY2hhbmdlcyBzaW5jZSBsYXN0IHJlcG9ydCB0aW1lLCB1c2luZ1xuICAgIENVTVVMQVRJVkUgaXMgdmFsaWQsIGl0IGlzIG5vdCByZWNvbW1lbmRlZC4gVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgZm9yXG4gICAgc3lzdGVtcyB0aGF0IGRvIG5vdCB1c2Ugc3RhcnRfdGltZSB0byBkZXRlcm1pbmUgd2hlbiB0aGUgYWdncmVnYXRpb25cbiAgICB2YWx1ZSB3YXMgcmVzZXQgKGUuZy4gUHJvbWV0aGV1cykuICovXG4gICAgRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbRUFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlbXCJBR0dSRUdBVElPTl9URU1QT1JBTElUWV9DVU1VTEFUSVZFXCJdID0gMl0gPSBcIkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkVcIjtcbn0pKEVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5ID0gZXhwb3J0cy5FQWdncmVnYXRpb25UZW1wb3JhbGl0eSB8fCAoZXhwb3J0cy5FQWdncmVnYXRpb25UZW1wb3JhbGl0eSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC10eXBlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgPSBleHBvcnRzLnRvTWV0cmljID0gZXhwb3J0cy50b1Njb3BlTWV0cmljcyA9IGV4cG9ydHMudG9SZXNvdXJjZU1ldHJpY3MgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBzZGtfbWV0cmljc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzXCIpO1xuY29uc3QgaW50ZXJuYWxfdHlwZXNfMSA9IHJlcXVpcmUoXCIuL2ludGVybmFsLXR5cGVzXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vdXRpbHNcIik7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2NvbW1vbi9pbnRlcm5hbFwiKTtcbmZ1bmN0aW9uIHRvUmVzb3VyY2VNZXRyaWNzKHJlc291cmNlTWV0cmljcywgb3B0aW9ucykge1xuICAgIGNvbnN0IGVuY29kZXIgPSAoMCwgdXRpbHNfMS5nZXRPdGxwRW5jb2Rlcikob3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZVJlc291cmNlKShyZXNvdXJjZU1ldHJpY3MucmVzb3VyY2UpLFxuICAgICAgICBzY2hlbWFVcmw6IHVuZGVmaW5lZCxcbiAgICAgICAgc2NvcGVNZXRyaWNzOiB0b1Njb3BlTWV0cmljcyhyZXNvdXJjZU1ldHJpY3Muc2NvcGVNZXRyaWNzLCBlbmNvZGVyKSxcbiAgICB9O1xufVxuZXhwb3J0cy50b1Jlc291cmNlTWV0cmljcyA9IHRvUmVzb3VyY2VNZXRyaWNzO1xuZnVuY3Rpb24gdG9TY29wZU1ldHJpY3Moc2NvcGVNZXRyaWNzLCBlbmNvZGVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2NvcGVNZXRyaWNzLm1hcChtZXRyaWNzID0+ICh7XG4gICAgICAgIHNjb3BlOiAoMCwgaW50ZXJuYWxfMS5jcmVhdGVJbnN0cnVtZW50YXRpb25TY29wZSkobWV0cmljcy5zY29wZSksXG4gICAgICAgIG1ldHJpY3M6IG1ldHJpY3MubWV0cmljcy5tYXAobWV0cmljRGF0YSA9PiB0b01ldHJpYyhtZXRyaWNEYXRhLCBlbmNvZGVyKSksXG4gICAgICAgIHNjaGVtYVVybDogbWV0cmljcy5zY29wZS5zY2hlbWFVcmwsXG4gICAgfSkpKTtcbn1cbmV4cG9ydHMudG9TY29wZU1ldHJpY3MgPSB0b1Njb3BlTWV0cmljcztcbmZ1bmN0aW9uIHRvTWV0cmljKG1ldHJpY0RhdGEsIGVuY29kZXIpIHtcbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICAgIG5hbWU6IG1ldHJpY0RhdGEuZGVzY3JpcHRvci5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogbWV0cmljRGF0YS5kZXNjcmlwdG9yLmRlc2NyaXB0aW9uLFxuICAgICAgICB1bml0OiBtZXRyaWNEYXRhLmRlc2NyaXB0b3IudW5pdCxcbiAgICB9O1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkgPSB0b0FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkobWV0cmljRGF0YS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5KTtcbiAgICBzd2l0Y2ggKG1ldHJpY0RhdGEuZGF0YVBvaW50VHlwZSkge1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5TVU06XG4gICAgICAgICAgICBvdXQuc3VtID0ge1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICAgICAgaXNNb25vdG9uaWM6IG1ldHJpY0RhdGEuaXNNb25vdG9uaWMsXG4gICAgICAgICAgICAgICAgZGF0YVBvaW50czogdG9TaW5ndWxhckRhdGFQb2ludHMobWV0cmljRGF0YSwgZW5jb2RlciksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLkdBVUdFOlxuICAgICAgICAgICAgb3V0LmdhdWdlID0ge1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludHM6IHRvU2luZ3VsYXJEYXRhUG9pbnRzKG1ldHJpY0RhdGEsIGVuY29kZXIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5ISVNUT0dSQU06XG4gICAgICAgICAgICBvdXQuaGlzdG9ncmFtID0ge1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksXG4gICAgICAgICAgICAgICAgZGF0YVBvaW50czogdG9IaXN0b2dyYW1EYXRhUG9pbnRzKG1ldHJpY0RhdGEsIGVuY29kZXIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5FWFBPTkVOVElBTF9ISVNUT0dSQU06XG4gICAgICAgICAgICBvdXQuZXhwb25lbnRpYWxIaXN0b2dyYW0gPSB7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eSxcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnRzOiB0b0V4cG9uZW50aWFsSGlzdG9ncmFtRGF0YVBvaW50cyhtZXRyaWNEYXRhLCBlbmNvZGVyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydHMudG9NZXRyaWMgPSB0b01ldHJpYztcbmZ1bmN0aW9uIHRvU2luZ3VsYXJEYXRhUG9pbnQoZGF0YVBvaW50LCB2YWx1ZVR5cGUsIGVuY29kZXIpIHtcbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICAgIGF0dHJpYnV0ZXM6ICgwLCBpbnRlcm5hbF8xLnRvQXR0cmlidXRlcykoZGF0YVBvaW50LmF0dHJpYnV0ZXMpLFxuICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LnN0YXJ0VGltZSksXG4gICAgICAgIHRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LmVuZFRpbWUpLFxuICAgIH07XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgICAgY2FzZSBhcGlfMS5WYWx1ZVR5cGUuSU5UOlxuICAgICAgICAgICAgb3V0LmFzSW50ID0gZGF0YVBvaW50LnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgYXBpXzEuVmFsdWVUeXBlLkRPVUJMRTpcbiAgICAgICAgICAgIG91dC5hc0RvdWJsZSA9IGRhdGFQb2ludC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuZnVuY3Rpb24gdG9TaW5ndWxhckRhdGFQb2ludHMobWV0cmljRGF0YSwgZW5jb2Rlcikge1xuICAgIHJldHVybiBtZXRyaWNEYXRhLmRhdGFQb2ludHMubWFwKGRhdGFQb2ludCA9PiB7XG4gICAgICAgIHJldHVybiB0b1Npbmd1bGFyRGF0YVBvaW50KGRhdGFQb2ludCwgbWV0cmljRGF0YS5kZXNjcmlwdG9yLnZhbHVlVHlwZSwgZW5jb2Rlcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b0hpc3RvZ3JhbURhdGFQb2ludHMobWV0cmljRGF0YSwgZW5jb2Rlcikge1xuICAgIHJldHVybiBtZXRyaWNEYXRhLmRhdGFQb2ludHMubWFwKGRhdGFQb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvZ3JhbSA9IGRhdGFQb2ludC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICgwLCBpbnRlcm5hbF8xLnRvQXR0cmlidXRlcykoZGF0YVBvaW50LmF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgYnVja2V0Q291bnRzOiBoaXN0b2dyYW0uYnVja2V0cy5jb3VudHMsXG4gICAgICAgICAgICBleHBsaWNpdEJvdW5kczogaGlzdG9ncmFtLmJ1Y2tldHMuYm91bmRhcmllcyxcbiAgICAgICAgICAgIGNvdW50OiBoaXN0b2dyYW0uY291bnQsXG4gICAgICAgICAgICBzdW06IGhpc3RvZ3JhbS5zdW0sXG4gICAgICAgICAgICBtaW46IGhpc3RvZ3JhbS5taW4sXG4gICAgICAgICAgICBtYXg6IGhpc3RvZ3JhbS5tYXgsXG4gICAgICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LnN0YXJ0VGltZSksXG4gICAgICAgICAgICB0aW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKGRhdGFQb2ludC5lbmRUaW1lKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWxIaXN0b2dyYW1EYXRhUG9pbnRzKG1ldHJpY0RhdGEsIGVuY29kZXIpIHtcbiAgICByZXR1cm4gbWV0cmljRGF0YS5kYXRhUG9pbnRzLm1hcChkYXRhUG9pbnQgPT4ge1xuICAgICAgICBjb25zdCBoaXN0b2dyYW0gPSBkYXRhUG9pbnQudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiAoMCwgaW50ZXJuYWxfMS50b0F0dHJpYnV0ZXMpKGRhdGFQb2ludC5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgIGNvdW50OiBoaXN0b2dyYW0uY291bnQsXG4gICAgICAgICAgICBtaW46IGhpc3RvZ3JhbS5taW4sXG4gICAgICAgICAgICBtYXg6IGhpc3RvZ3JhbS5tYXgsXG4gICAgICAgICAgICBzdW06IGhpc3RvZ3JhbS5zdW0sXG4gICAgICAgICAgICBwb3NpdGl2ZToge1xuICAgICAgICAgICAgICAgIG9mZnNldDogaGlzdG9ncmFtLnBvc2l0aXZlLm9mZnNldCxcbiAgICAgICAgICAgICAgICBidWNrZXRDb3VudHM6IGhpc3RvZ3JhbS5wb3NpdGl2ZS5idWNrZXRDb3VudHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmVnYXRpdmU6IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGhpc3RvZ3JhbS5uZWdhdGl2ZS5vZmZzZXQsXG4gICAgICAgICAgICAgICAgYnVja2V0Q291bnRzOiBoaXN0b2dyYW0ubmVnYXRpdmUuYnVja2V0Q291bnRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjYWxlOiBoaXN0b2dyYW0uc2NhbGUsXG4gICAgICAgICAgICB6ZXJvQ291bnQ6IGhpc3RvZ3JhbS56ZXJvQ291bnQsXG4gICAgICAgICAgICBzdGFydFRpbWVVbml4TmFubzogZW5jb2Rlci5lbmNvZGVIclRpbWUoZGF0YVBvaW50LnN0YXJ0VGltZSksXG4gICAgICAgICAgICB0aW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKGRhdGFQb2ludC5lbmRUaW1lKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRvQWdncmVnYXRpb25UZW1wb3JhbGl0eSh0ZW1wb3JhbGl0eSkge1xuICAgIHN3aXRjaCAodGVtcG9yYWxpdHkpIHtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuREVMVEE6XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfdHlwZXNfMS5FQWdncmVnYXRpb25UZW1wb3JhbGl0eS5BR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQTtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkuQ1VNVUxBVElWRTpcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF90eXBlc18xLkVBZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0NVTVVMQVRJVkU7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KHJlc291cmNlTWV0cmljcywgb3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc291cmNlTWV0cmljczogcmVzb3VyY2VNZXRyaWNzLm1hcChtZXRyaWNzID0+IHRvUmVzb3VyY2VNZXRyaWNzKG1ldHJpY3MsIG9wdGlvbnMpKSxcbiAgICB9O1xufVxuZXhwb3J0cy5jcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QgPSBjcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IHJvb3QgPSByZXF1aXJlKFwiLi4vLi4vZ2VuZXJhdGVkL3Jvb3RcIik7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuY29uc3QgbWV0cmljc1Jlc3BvbnNlVHlwZSA9IHJvb3Qub3BlbnRlbGVtZXRyeS5wcm90by5jb2xsZWN0b3IubWV0cmljcy52MVxuICAgIC5FeHBvcnRNZXRyaWNzU2VydmljZVJlc3BvbnNlO1xuY29uc3QgbWV0cmljc1JlcXVlc3RUeXBlID0gcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci5tZXRyaWNzLnYxXG4gICAgLkV4cG9ydE1ldHJpY3NTZXJ2aWNlUmVxdWVzdDtcbmV4cG9ydHMuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciA9IHtcbiAgICBzZXJpYWxpemVSZXF1ZXN0OiAoYXJnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoMCwgaW50ZXJuYWxfMS5jcmVhdGVFeHBvcnRNZXRyaWNzU2VydmljZVJlcXVlc3QpKFthcmddKTtcbiAgICAgICAgcmV0dXJuIG1ldHJpY3NSZXF1ZXN0VHlwZS5lbmNvZGUocmVxdWVzdCkuZmluaXNoKCk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZVJlc3BvbnNlOiAoYXJnKSA9PiB7XG4gICAgICAgIHJldHVybiBtZXRyaWNzUmVzcG9uc2VUeXBlLmRlY29kZShhcmcpO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0cmljcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplciA9IHZvaWQgMDtcbi8vIElNUE9SVEFOVDogZXhwb3J0cyBhZGRlZCBoZXJlIGFyZSBwdWJsaWNcbnZhciBtZXRyaWNzXzEgPSByZXF1aXJlKFwiLi9tZXRyaWNzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljc18xLlByb3RvYnVmTWV0cmljc1NlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0ID0gZXhwb3J0cy50b090bHBTcGFuRXZlbnQgPSBleHBvcnRzLnRvT3RscExpbmsgPSBleHBvcnRzLnNka1NwYW5Ub090bHBTcGFuID0gdm9pZCAwO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vaW50ZXJuYWxcIik7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4uL2NvbW1vbi91dGlsc1wiKTtcbmZ1bmN0aW9uIHNka1NwYW5Ub090bHBTcGFuKHNwYW4sIGVuY29kZXIpIHtcbiAgICBjb25zdCBjdHggPSBzcGFuLnNwYW5Db250ZXh0KCk7XG4gICAgY29uc3Qgc3RhdHVzID0gc3Bhbi5zdGF0dXM7XG4gICAgY29uc3QgcGFyZW50U3BhbklkID0gc3Bhbi5wYXJlbnRTcGFuQ29udGV4dD8uc3BhbklkXG4gICAgICAgID8gZW5jb2Rlci5lbmNvZGVTcGFuQ29udGV4dChzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5zcGFuSWQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRyYWNlSWQ6IGVuY29kZXIuZW5jb2RlU3BhbkNvbnRleHQoY3R4LnRyYWNlSWQpLFxuICAgICAgICBzcGFuSWQ6IGVuY29kZXIuZW5jb2RlU3BhbkNvbnRleHQoY3R4LnNwYW5JZCksXG4gICAgICAgIHBhcmVudFNwYW5JZDogcGFyZW50U3BhbklkLFxuICAgICAgICB0cmFjZVN0YXRlOiBjdHgudHJhY2VTdGF0ZT8uc2VyaWFsaXplKCksXG4gICAgICAgIG5hbWU6IHNwYW4ubmFtZSxcbiAgICAgICAgLy8gU3BhbiBraW5kIGlzIG9mZnNldCBieSAxIGJlY2F1c2UgdGhlIEFQSSBkb2VzIG5vdCBkZWZpbmUgYSB2YWx1ZSBmb3IgdW5zZXRcbiAgICAgICAga2luZDogc3Bhbi5raW5kID09IG51bGwgPyAwIDogc3Bhbi5raW5kICsgMSxcbiAgICAgICAgc3RhcnRUaW1lVW5peE5hbm86IGVuY29kZXIuZW5jb2RlSHJUaW1lKHNwYW4uc3RhcnRUaW1lKSxcbiAgICAgICAgZW5kVGltZVVuaXhOYW5vOiBlbmNvZGVyLmVuY29kZUhyVGltZShzcGFuLmVuZFRpbWUpLFxuICAgICAgICBhdHRyaWJ1dGVzOiAoMCwgaW50ZXJuYWxfMS50b0F0dHJpYnV0ZXMpKHNwYW4uYXR0cmlidXRlcyksXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IHNwYW4uZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCxcbiAgICAgICAgZXZlbnRzOiBzcGFuLmV2ZW50cy5tYXAoZXZlbnQgPT4gdG9PdGxwU3BhbkV2ZW50KGV2ZW50LCBlbmNvZGVyKSksXG4gICAgICAgIGRyb3BwZWRFdmVudHNDb3VudDogc3Bhbi5kcm9wcGVkRXZlbnRzQ291bnQsXG4gICAgICAgIHN0YXR1czoge1xuICAgICAgICAgICAgLy8gQVBJIGFuZCBwcm90byBlbnVtcyBzaGFyZSB0aGUgc2FtZSB2YWx1ZXNcbiAgICAgICAgICAgIGNvZGU6IHN0YXR1cy5jb2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogc3RhdHVzLm1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmtzOiBzcGFuLmxpbmtzLm1hcChsaW5rID0+IHRvT3RscExpbmsobGluaywgZW5jb2RlcikpLFxuICAgICAgICBkcm9wcGVkTGlua3NDb3VudDogc3Bhbi5kcm9wcGVkTGlua3NDb3VudCxcbiAgICB9O1xufVxuZXhwb3J0cy5zZGtTcGFuVG9PdGxwU3BhbiA9IHNka1NwYW5Ub090bHBTcGFuO1xuZnVuY3Rpb24gdG9PdGxwTGluayhsaW5rLCBlbmNvZGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXR0cmlidXRlczogbGluay5hdHRyaWJ1dGVzID8gKDAsIGludGVybmFsXzEudG9BdHRyaWJ1dGVzKShsaW5rLmF0dHJpYnV0ZXMpIDogW10sXG4gICAgICAgIHNwYW5JZDogZW5jb2Rlci5lbmNvZGVTcGFuQ29udGV4dChsaW5rLmNvbnRleHQuc3BhbklkKSxcbiAgICAgICAgdHJhY2VJZDogZW5jb2Rlci5lbmNvZGVTcGFuQ29udGV4dChsaW5rLmNvbnRleHQudHJhY2VJZCksXG4gICAgICAgIHRyYWNlU3RhdGU6IGxpbmsuY29udGV4dC50cmFjZVN0YXRlPy5zZXJpYWxpemUoKSxcbiAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogbGluay5kcm9wcGVkQXR0cmlidXRlc0NvdW50IHx8IDAsXG4gICAgfTtcbn1cbmV4cG9ydHMudG9PdGxwTGluayA9IHRvT3RscExpbms7XG5mdW5jdGlvbiB0b090bHBTcGFuRXZlbnQodGltZWRFdmVudCwgZW5jb2Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRpbWVkRXZlbnQuYXR0cmlidXRlc1xuICAgICAgICAgICAgPyAoMCwgaW50ZXJuYWxfMS50b0F0dHJpYnV0ZXMpKHRpbWVkRXZlbnQuYXR0cmlidXRlcylcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIG5hbWU6IHRpbWVkRXZlbnQubmFtZSxcbiAgICAgICAgdGltZVVuaXhOYW5vOiBlbmNvZGVyLmVuY29kZUhyVGltZSh0aW1lZEV2ZW50LnRpbWUpLFxuICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiB0aW1lZEV2ZW50LmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgfHwgMCxcbiAgICB9O1xufVxuZXhwb3J0cy50b090bHBTcGFuRXZlbnQgPSB0b090bHBTcGFuRXZlbnQ7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhwb3J0VHJhY2VTZXJ2aWNlUmVxdWVzdChzcGFucywgb3B0aW9ucykge1xuICAgIGNvbnN0IGVuY29kZXIgPSAoMCwgdXRpbHNfMS5nZXRPdGxwRW5jb2Rlcikob3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2VTcGFuczogc3BhblJlY29yZHNUb1Jlc291cmNlU3BhbnMoc3BhbnMsIGVuY29kZXIpLFxuICAgIH07XG59XG5leHBvcnRzLmNyZWF0ZUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QgPSBjcmVhdGVFeHBvcnRUcmFjZVNlcnZpY2VSZXF1ZXN0O1xuZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VNYXAocmVhZGFibGVTcGFucykge1xuICAgIGNvbnN0IHJlc291cmNlTWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlYWRhYmxlU3BhbnMpIHtcbiAgICAgICAgbGV0IGlsc01hcCA9IHJlc291cmNlTWFwLmdldChyZWNvcmQucmVzb3VyY2UpO1xuICAgICAgICBpZiAoIWlsc01hcCkge1xuICAgICAgICAgICAgaWxzTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgcmVzb3VyY2VNYXAuc2V0KHJlY29yZC5yZXNvdXJjZSwgaWxzTWFwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIHRoaXMgaXMgZHVwbGljYXRlZCBpbiBiYXNpYyB0cmFjZXIuIENvbnNvbGlkYXRlIG9uIGEgY29tbW9uIGhlbHBlciBpbiBjb3JlXG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvblNjb3BlS2V5ID0gYCR7cmVjb3JkLmluc3RydW1lbnRhdGlvblNjb3BlLm5hbWV9QCR7cmVjb3JkLmluc3RydW1lbnRhdGlvblNjb3BlLnZlcnNpb24gfHwgJyd9OiR7cmVjb3JkLmluc3RydW1lbnRhdGlvblNjb3BlLnNjaGVtYVVybCB8fCAnJ31gO1xuICAgICAgICBsZXQgcmVjb3JkcyA9IGlsc01hcC5nZXQoaW5zdHJ1bWVudGF0aW9uU2NvcGVLZXkpO1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgIGlsc01hcC5zZXQoaW5zdHJ1bWVudGF0aW9uU2NvcGVLZXksIHJlY29yZHMpO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VNYXA7XG59XG5mdW5jdGlvbiBzcGFuUmVjb3Jkc1RvUmVzb3VyY2VTcGFucyhyZWFkYWJsZVNwYW5zLCBlbmNvZGVyKSB7XG4gICAgY29uc3QgcmVzb3VyY2VNYXAgPSBjcmVhdGVSZXNvdXJjZU1hcChyZWFkYWJsZVNwYW5zKTtcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBjb25zdCBlbnRyeUl0ZXJhdG9yID0gcmVzb3VyY2VNYXAuZW50cmllcygpO1xuICAgIGxldCBlbnRyeSA9IGVudHJ5SXRlcmF0b3IubmV4dCgpO1xuICAgIHdoaWxlICghZW50cnkuZG9uZSkge1xuICAgICAgICBjb25zdCBbcmVzb3VyY2UsIGlsbU1hcF0gPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2NvcGVSZXNvdXJjZVNwYW5zID0gW107XG4gICAgICAgIGNvbnN0IGlsbUl0ZXJhdG9yID0gaWxtTWFwLnZhbHVlcygpO1xuICAgICAgICBsZXQgaWxtRW50cnkgPSBpbG1JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghaWxtRW50cnkuZG9uZSkge1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVTcGFucyA9IGlsbUVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgaWYgKHNjb3BlU3BhbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5zID0gc2NvcGVTcGFucy5tYXAocmVhZGFibGVTcGFuID0+IHNka1NwYW5Ub090bHBTcGFuKHJlYWRhYmxlU3BhbiwgZW5jb2RlcikpO1xuICAgICAgICAgICAgICAgIHNjb3BlUmVzb3VyY2VTcGFucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZUluc3RydW1lbnRhdGlvblNjb3BlKShzY29wZVNwYW5zWzBdLmluc3RydW1lbnRhdGlvblNjb3BlKSxcbiAgICAgICAgICAgICAgICAgICAgc3BhbnM6IHNwYW5zLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFVcmw6IHNjb3BlU3BhbnNbMF0uaW5zdHJ1bWVudGF0aW9uU2NvcGUuc2NoZW1hVXJsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWxtRW50cnkgPSBpbG1JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBTREsgdHlwZXMgZG9uJ3QgcHJvdmlkZSByZXNvdXJjZSBzY2hlbWEgVVJMIGF0IHRoaXMgdGltZVxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFNwYW5zID0ge1xuICAgICAgICAgICAgcmVzb3VyY2U6ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZVJlc291cmNlKShyZXNvdXJjZSksXG4gICAgICAgICAgICBzY29wZVNwYW5zOiBzY29wZVJlc291cmNlU3BhbnMsXG4gICAgICAgICAgICBzY2hlbWFVcmw6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgb3V0LnB1c2godHJhbnNmb3JtZWRTcGFucyk7XG4gICAgICAgIGVudHJ5ID0gZW50cnlJdGVyYXRvci5uZXh0KCk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcm5hbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXIgPSB2b2lkIDA7XG5jb25zdCByb290ID0gcmVxdWlyZShcIi4uLy4uL2dlbmVyYXRlZC9yb290XCIpO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbFwiKTtcbmNvbnN0IHRyYWNlUmVzcG9uc2VUeXBlID0gcm9vdC5vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MVxuICAgIC5FeHBvcnRUcmFjZVNlcnZpY2VSZXNwb25zZTtcbmNvbnN0IHRyYWNlUmVxdWVzdFR5cGUgPSByb290Lm9wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLnRyYWNlLnYxXG4gICAgLkV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3Q7XG5leHBvcnRzLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZVJlcXVlc3Q6IChhcmcpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QpKGFyZyk7XG4gICAgICAgIHJldHVybiB0cmFjZVJlcXVlc3RUeXBlLmVuY29kZShyZXF1ZXN0KS5maW5pc2goKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplUmVzcG9uc2U6IChhcmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNlUmVzcG9uc2VUeXBlLmRlY29kZShhcmcpO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyID0gdm9pZCAwO1xuLy8gSU1QT1JUQU5UOiBleHBvcnRzIGFkZGVkIGhlcmUgYXJlIHB1YmxpY1xudmFyIHRyYWNlXzEgPSByZXF1aXJlKFwiLi90cmFjZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb3RvYnVmVHJhY2VTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjZV8xLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSnNvbkxvZ3NTZXJpYWxpemVyID0gdm9pZCAwO1xuY29uc3QgaW50ZXJuYWxfMSA9IHJlcXVpcmUoXCIuLi9pbnRlcm5hbFwiKTtcbi8qXG4gKiBAZXhwZXJpbWVudGFsIHRoaXMgc2VyaWFsaXplciBtYXkgcmVjZWl2ZSBicmVha2luZyBjaGFuZ2VzIGluIG1pbm9yIHZlcnNpb25zLCBwaW4gdGhpcyBwYWNrYWdlJ3MgdmVyc2lvbiB3aGVuIHVzaW5nIHRoaXMgY29uc3RhbnRcbiAqL1xuZXhwb3J0cy5Kc29uTG9nc1NlcmlhbGl6ZXIgPSB7XG4gICAgc2VyaWFsaXplUmVxdWVzdDogKGFyZykgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKDAsIGludGVybmFsXzEuY3JlYXRlRXhwb3J0TG9nc1NlcnZpY2VSZXF1ZXN0KShhcmcsIHtcbiAgICAgICAgICAgIHVzZUhleDogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUxvbmdCaXRzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIGVuY29kZXIuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplUmVzcG9uc2U6IChhcmcpID0+IHtcbiAgICAgICAgaWYgKGFyZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZXIuZGVjb2RlKGFyZykpO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9ncy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSnNvbkxvZ3NTZXJpYWxpemVyID0gdm9pZCAwO1xuLy8gSU1QT1JUQU5UOiBleHBvcnRzIGFkZGVkIGhlcmUgYXJlIHB1YmxpY1xudmFyIGxvZ3NfMSA9IHJlcXVpcmUoXCIuL2xvZ3NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJKc29uTG9nc1NlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZ3NfMS5Kc29uTG9nc1NlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Kc29uTWV0cmljc1NlcmlhbGl6ZXIgPSB2b2lkIDA7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuZXhwb3J0cy5Kc29uTWV0cmljc1NlcmlhbGl6ZXIgPSB7XG4gICAgc2VyaWFsaXplUmVxdWVzdDogKGFyZykgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKDAsIGludGVybmFsXzEuY3JlYXRlRXhwb3J0TWV0cmljc1NlcnZpY2VSZXF1ZXN0KShbYXJnXSwge1xuICAgICAgICAgICAgdXNlTG9uZ0JpdHM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemVSZXNwb25zZTogKGFyZykgPT4ge1xuICAgICAgICBpZiAoYXJnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2Rlci5kZWNvZGUoYXJnKSk7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRyaWNzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Kc29uTWV0cmljc1NlcmlhbGl6ZXIgPSB2b2lkIDA7XG4vLyBJTVBPUlRBTlQ6IGV4cG9ydHMgYWRkZWQgaGVyZSBhcmUgcHVibGljXG52YXIgbWV0cmljc18xID0gcmVxdWlyZShcIi4vbWV0cmljc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpzb25NZXRyaWNzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljc18xLkpzb25NZXRyaWNzU2VyaWFsaXplcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkpzb25UcmFjZVNlcmlhbGl6ZXIgPSB2b2lkIDA7XG5jb25zdCBpbnRlcm5hbF8xID0gcmVxdWlyZShcIi4uL2ludGVybmFsXCIpO1xuZXhwb3J0cy5Kc29uVHJhY2VTZXJpYWxpemVyID0ge1xuICAgIHNlcmlhbGl6ZVJlcXVlc3Q6IChhcmcpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgwLCBpbnRlcm5hbF8xLmNyZWF0ZUV4cG9ydFRyYWNlU2VydmljZVJlcXVlc3QpKGFyZywge1xuICAgICAgICAgICAgdXNlSGV4OiB0cnVlLFxuICAgICAgICAgICAgdXNlTG9uZ0JpdHM6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemVSZXNwb25zZTogKGFyZykgPT4ge1xuICAgICAgICBpZiAoYXJnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2Rlci5kZWNvZGUoYXJnKSk7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSnNvblRyYWNlU2VyaWFsaXplciA9IHZvaWQgMDtcbi8vIElNUE9SVEFOVDogZXhwb3J0cyBhZGRlZCBoZXJlIGFyZSBwdWJsaWNcbnZhciB0cmFjZV8xID0gcmVxdWlyZShcIi4vdHJhY2VcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJKc29uVHJhY2VTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cmFjZV8xLkpzb25UcmFjZVNlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSnNvblRyYWNlU2VyaWFsaXplciA9IGV4cG9ydHMuSnNvbk1ldHJpY3NTZXJpYWxpemVyID0gZXhwb3J0cy5Kc29uTG9nc1NlcmlhbGl6ZXIgPSBleHBvcnRzLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyID0gZXhwb3J0cy5Qcm90b2J1Zk1ldHJpY3NTZXJpYWxpemVyID0gZXhwb3J0cy5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyID0gdm9pZCAwO1xudmFyIHByb3RvYnVmXzEgPSByZXF1aXJlKFwiLi9sb2dzL3Byb3RvYnVmXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZMb2dzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvdG9idWZfMS5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyOyB9IH0pO1xudmFyIHByb3RvYnVmXzIgPSByZXF1aXJlKFwiLi9tZXRyaWNzL3Byb3RvYnVmXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvdG9idWZNZXRyaWNzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvdG9idWZfMi5Qcm90b2J1Zk1ldHJpY3NTZXJpYWxpemVyOyB9IH0pO1xudmFyIHByb3RvYnVmXzMgPSByZXF1aXJlKFwiLi90cmFjZS9wcm90b2J1ZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb3RvYnVmVHJhY2VTZXJpYWxpemVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm90b2J1Zl8zLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyOyB9IH0pO1xudmFyIGpzb25fMSA9IHJlcXVpcmUoXCIuL2xvZ3MvanNvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpzb25Mb2dzU2VyaWFsaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4ganNvbl8xLkpzb25Mb2dzU2VyaWFsaXplcjsgfSB9KTtcbnZhciBqc29uXzIgPSByZXF1aXJlKFwiLi9tZXRyaWNzL2pzb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJKc29uTWV0cmljc1NlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fMi5Kc29uTWV0cmljc1NlcmlhbGl6ZXI7IH0gfSk7XG52YXIganNvbl8zID0gcmVxdWlyZShcIi4vdHJhY2UvanNvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpzb25UcmFjZVNlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzb25fMy5Kc29uVHJhY2VTZXJpYWxpemVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuVkVSU0lPTiA9ICcwLjIwMy4wJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlUmV0cnlBZnRlclRvTWlsbHMgPSBleHBvcnRzLmlzRXhwb3J0UmV0cnlhYmxlID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNFeHBvcnRSZXRyeWFibGUoc3RhdHVzQ29kZSkge1xuICAgIGNvbnN0IHJldHJ5Q29kZXMgPSBbNDI5LCA1MDIsIDUwMywgNTA0XTtcbiAgICByZXR1cm4gcmV0cnlDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKTtcbn1cbmV4cG9ydHMuaXNFeHBvcnRSZXRyeWFibGUgPSBpc0V4cG9ydFJldHJ5YWJsZTtcbmZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlclRvTWlsbHMocmV0cnlBZnRlcikge1xuICAgIGlmIChyZXRyeUFmdGVyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2Vjb25kcyA9IE51bWJlci5wYXJzZUludChyZXRyeUFmdGVyLCAxMCk7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoc2Vjb25kcykpIHtcbiAgICAgICAgcmV0dXJuIHNlY29uZHMgPiAwID8gc2Vjb25kcyAqIDEwMDAgOiAtMTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JldHJ5LUFmdGVyI2RpcmVjdGl2ZXNcbiAgICBjb25zdCBkZWxheSA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpLmdldFRpbWUoKSAtIERhdGUubm93KCk7XG4gICAgaWYgKGRlbGF5ID49IDApIHtcbiAgICAgICAgcmV0dXJuIGRlbGF5O1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmV4cG9ydHMucGFyc2VSZXRyeUFmdGVyVG9NaWxscyA9IHBhcnNlUmV0cnlBZnRlclRvTWlsbHM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1leHBvcnQtcmV0cnlhYmxlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUh0dHBBZ2VudCA9IGV4cG9ydHMuY29tcHJlc3NBbmRTZW5kID0gZXhwb3J0cy5zZW5kV2l0aEh0dHAgPSB2b2lkIDA7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xuY29uc3QgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5jb25zdCB6bGliID0gcmVxdWlyZShcInpsaWJcIik7XG5jb25zdCBzdHJlYW1fMSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBpc19leHBvcnRfcmV0cnlhYmxlXzEgPSByZXF1aXJlKFwiLi4vaXMtZXhwb3J0LXJldHJ5YWJsZVwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi4vdHlwZXNcIik7XG4vKipcbiAqIFNlbmRzIGRhdGEgdXNpbmcgaHR0cFxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIGFnZW50XG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIG9uRG9uZVxuICogQHBhcmFtIHRpbWVvdXRNaWxsaXNcbiAqL1xuZnVuY3Rpb24gc2VuZFdpdGhIdHRwKHBhcmFtcywgYWdlbnQsIGRhdGEsIG9uRG9uZSwgdGltZW91dE1pbGxpcykge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocGFyYW1zLnVybCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaG9zdG5hbWU6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogcGFyc2VkVXJsLnBvcnQsXG4gICAgICAgIHBhdGg6IHBhcnNlZFVybC5wYXRobmFtZSxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLnBhcmFtcy5oZWFkZXJzKCksXG4gICAgICAgIH0sXG4gICAgICAgIGFnZW50OiBhZ2VudCxcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3QgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwOicgPyBodHRwLnJlcXVlc3QgOiBodHRwcy5yZXF1ZXN0O1xuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3Qob3B0aW9ucywgKHJlcykgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBbXTtcbiAgICAgICAgcmVzLm9uKCdkYXRhJywgY2h1bmsgPT4gcmVzcG9uc2VEYXRhLnB1c2goY2h1bmspKTtcbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgJiYgcmVzLnN0YXR1c0NvZGUgPCAyOTkpIHtcbiAgICAgICAgICAgICAgICBvbkRvbmUoe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogQnVmZmVyLmNvbmNhdChyZXNwb25zZURhdGEpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzLnN0YXR1c0NvZGUgJiYgKDAsIGlzX2V4cG9ydF9yZXRyeWFibGVfMS5pc0V4cG9ydFJldHJ5YWJsZSkocmVzLnN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgb25Eb25lKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAncmV0cnlhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgcmV0cnlJbk1pbGxpczogKDAsIGlzX2V4cG9ydF9yZXRyeWFibGVfMS5wYXJzZVJldHJ5QWZ0ZXJUb01pbGxzKShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyB0eXBlc18xLk9UTFBFeHBvcnRlckVycm9yKHJlcy5zdGF0dXNNZXNzYWdlLCByZXMuc3RhdHVzQ29kZSwgQnVmZmVyLmNvbmNhdChyZXNwb25zZURhdGEpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIG9uRG9uZSh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmVxLnNldFRpbWVvdXQodGltZW91dE1pbGxpcywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICBvbkRvbmUoe1xuICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKCdSZXF1ZXN0IFRpbWVvdXQnKSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBvbkRvbmUoe1xuICAgICAgICAgICAgc3RhdHVzOiAnZmFpbHVyZScsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29tcHJlc3NBbmRTZW5kKHJlcSwgcGFyYW1zLmNvbXByZXNzaW9uLCBkYXRhLCAoZXJyb3IpID0+IHtcbiAgICAgICAgb25Eb25lKHtcbiAgICAgICAgICAgIHN0YXR1czogJ2ZhaWx1cmUnLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5zZW5kV2l0aEh0dHAgPSBzZW5kV2l0aEh0dHA7XG5mdW5jdGlvbiBjb21wcmVzc0FuZFNlbmQocmVxLCBjb21wcmVzc2lvbiwgZGF0YSwgb25FcnJvcikge1xuICAgIGxldCBkYXRhU3RyZWFtID0gcmVhZGFibGVGcm9tVWludDhBcnJheShkYXRhKTtcbiAgICBpZiAoY29tcHJlc3Npb24gPT09ICdnemlwJykge1xuICAgICAgICByZXEuc2V0SGVhZGVyKCdDb250ZW50LUVuY29kaW5nJywgJ2d6aXAnKTtcbiAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTdHJlYW1cbiAgICAgICAgICAgIC5vbignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgLnBpcGUoemxpYi5jcmVhdGVHemlwKCkpXG4gICAgICAgICAgICAub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgfVxuICAgIGRhdGFTdHJlYW0ucGlwZShyZXEpLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xufVxuZXhwb3J0cy5jb21wcmVzc0FuZFNlbmQgPSBjb21wcmVzc0FuZFNlbmQ7XG5mdW5jdGlvbiByZWFkYWJsZUZyb21VaW50OEFycmF5KGJ1ZmYpIHtcbiAgICBjb25zdCByZWFkYWJsZSA9IG5ldyBzdHJlYW1fMS5SZWFkYWJsZSgpO1xuICAgIHJlYWRhYmxlLnB1c2goYnVmZik7XG4gICAgcmVhZGFibGUucHVzaChudWxsKTtcbiAgICByZXR1cm4gcmVhZGFibGU7XG59XG5mdW5jdGlvbiBjcmVhdGVIdHRwQWdlbnQocmF3VXJsLCBhZ2VudE9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHJhd1VybCk7XG4gICAgY29uc3QgQWdlbnQgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwOicgPyBodHRwLkFnZW50IDogaHR0cHMuQWdlbnQ7XG4gICAgcmV0dXJuIG5ldyBBZ2VudChhZ2VudE9wdGlvbnMpO1xufVxuZXhwb3J0cy5jcmVhdGVIdHRwQWdlbnQgPSBjcmVhdGVIdHRwQWdlbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odHRwLXRyYW5zcG9ydC11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlSHR0cEV4cG9ydGVyVHJhbnNwb3J0ID0gdm9pZCAwO1xuY2xhc3MgSHR0cEV4cG9ydGVyVHJhbnNwb3J0IHtcbiAgICBfcGFyYW1ldGVycztcbiAgICBfdXRpbHMgPSBudWxsO1xuICAgIGNvbnN0cnVjdG9yKF9wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBfcGFyYW1ldGVycztcbiAgICB9XG4gICAgYXN5bmMgc2VuZChkYXRhLCB0aW1lb3V0TWlsbGlzKSB7XG4gICAgICAgIGNvbnN0IHsgYWdlbnQsIHNlbmQgfSA9IHRoaXMuX2xvYWRVdGlscygpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBzZW5kKHRoaXMuX3BhcmFtZXRlcnMsIGFnZW50LCBkYXRhLCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0sIHRpbWVvdXRNaWxsaXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIC8vIGludGVudGlvbmFsbHkgbGVmdCBlbXB0eSwgbm90aGluZyB0byBkby5cbiAgICB9XG4gICAgX2xvYWRVdGlscygpIHtcbiAgICAgICAgbGV0IHV0aWxzID0gdGhpcy5fdXRpbHM7XG4gICAgICAgIGlmICh1dGlscyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTGF6eSByZXF1aXJlIHRvIGVuc3VyZSB0aGF0IGh0dHAvaHR0cHMgaXMgbm90IHJlcXVpcmVkIGJlZm9yZSBpbnN0cnVtZW50YXRpb25zIGNhbiB3cmFwIGl0LlxuICAgICAgICAgICAgY29uc3QgeyBzZW5kV2l0aEh0dHAsIGNyZWF0ZUh0dHBBZ2VudCxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgICAgICAgfSA9IHJlcXVpcmUoJy4vaHR0cC10cmFuc3BvcnQtdXRpbHMnKTtcbiAgICAgICAgICAgIHV0aWxzID0gdGhpcy5fdXRpbHMgPSB7XG4gICAgICAgICAgICAgICAgYWdlbnQ6IGNyZWF0ZUh0dHBBZ2VudCh0aGlzLl9wYXJhbWV0ZXJzLnVybCwgdGhpcy5fcGFyYW1ldGVycy5hZ2VudE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHNlbmQ6IHNlbmRXaXRoSHR0cCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWxzO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBFeHBvcnRlclRyYW5zcG9ydChwYXJhbWV0ZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBIdHRwRXhwb3J0ZXJUcmFuc3BvcnQocGFyYW1ldGVycyk7XG59XG5leHBvcnRzLmNyZWF0ZUh0dHBFeHBvcnRlclRyYW5zcG9ydCA9IGNyZWF0ZUh0dHBFeHBvcnRlclRyYW5zcG9ydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0dHAtZXhwb3J0ZXItdHJhbnNwb3J0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVSZXRyeWluZ1RyYW5zcG9ydCA9IHZvaWQgMDtcbmNvbnN0IE1BWF9BVFRFTVBUUyA9IDU7XG5jb25zdCBJTklUSUFMX0JBQ0tPRkYgPSAxMDAwO1xuY29uc3QgTUFYX0JBQ0tPRkYgPSA1MDAwO1xuY29uc3QgQkFDS09GRl9NVUxUSVBMSUVSID0gMS41O1xuY29uc3QgSklUVEVSID0gMC4yO1xuLyoqXG4gKiBHZXQgYSBwc2V1ZG8tcmFuZG9tIGppdHRlciB0aGF0IGZhbGxzIGluIHRoZSByYW5nZSBvZiBbLUpJVFRFUiwgK0pJVFRFUl1cbiAqL1xuZnVuY3Rpb24gZ2V0Sml0dGVyKCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKDIgKiBKSVRURVIpIC0gSklUVEVSO1xufVxuY2xhc3MgUmV0cnlpbmdUcmFuc3BvcnQge1xuICAgIF90cmFuc3BvcnQ7XG4gICAgY29uc3RydWN0b3IoX3RyYW5zcG9ydCkge1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBfdHJhbnNwb3J0O1xuICAgIH1cbiAgICByZXRyeShkYXRhLCB0aW1lb3V0TWlsbGlzLCBpbk1pbGxpcykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNwb3J0LnNlbmQoZGF0YSwgdGltZW91dE1pbGxpcykudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSwgaW5NaWxsaXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgc2VuZChkYXRhLCB0aW1lb3V0TWlsbGlzKSB7XG4gICAgICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRpbWVvdXRNaWxsaXM7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLl90cmFuc3BvcnQuc2VuZChkYXRhLCB0aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gTUFYX0FUVEVNUFRTO1xuICAgICAgICBsZXQgbmV4dEJhY2tvZmYgPSBJTklUSUFMX0JBQ0tPRkY7XG4gICAgICAgIHdoaWxlIChyZXN1bHQuc3RhdHVzID09PSAncmV0cnlhYmxlJyAmJiBhdHRlbXB0cyA+IDApIHtcbiAgICAgICAgICAgIGF0dGVtcHRzLS07XG4gICAgICAgICAgICAvLyB1c2UgbWF4aW11bSBvZiBjb21wdXRlZCBiYWNrb2ZmIGFuZCAwIHRvIGF2b2lkIG5lZ2F0aXZlIHRpbWVvdXRzXG4gICAgICAgICAgICBjb25zdCBiYWNrb2ZmID0gTWF0aC5tYXgoTWF0aC5taW4obmV4dEJhY2tvZmYsIE1BWF9CQUNLT0ZGKSArIGdldEppdHRlcigpLCAwKTtcbiAgICAgICAgICAgIG5leHRCYWNrb2ZmID0gbmV4dEJhY2tvZmYgKiBCQUNLT0ZGX01VTFRJUExJRVI7XG4gICAgICAgICAgICBjb25zdCByZXRyeUluTWlsbGlzID0gcmVzdWx0LnJldHJ5SW5NaWxsaXMgPz8gYmFja29mZjtcbiAgICAgICAgICAgIC8vIHJldHVybiB3aGVuIGV4cGVjdGVkIHJldHJ5IHRpbWUgaXMgYWZ0ZXIgdGhlIGV4cG9ydCBkZWFkbGluZS5cbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1RpbWVvdXRNaWxsaXMgPSBkZWFkbGluZSAtIERhdGUubm93KCk7XG4gICAgICAgICAgICBpZiAocmV0cnlJbk1pbGxpcyA+IHJlbWFpbmluZ1RpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXRyeShkYXRhLCByZW1haW5pbmdUaW1lb3V0TWlsbGlzLCByZXRyeUluTWlsbGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zaHV0ZG93bigpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBFeHBvcnRlciBUcmFuc3BvcnQgdGhhdCByZXRyaWVzIG9uICdyZXRyeWFibGUnIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXRyeWluZ1RyYW5zcG9ydChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBSZXRyeWluZ1RyYW5zcG9ydChvcHRpb25zLnRyYW5zcG9ydCk7XG59XG5leHBvcnRzLmNyZWF0ZVJldHJ5aW5nVHJhbnNwb3J0ID0gY3JlYXRlUmV0cnlpbmdUcmFuc3BvcnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeWluZy10cmFuc3BvcnQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZSA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jb25zdCBvdGxwX2V4cG9ydF9kZWxlZ2F0ZV8xID0gcmVxdWlyZShcIi4vb3RscC1leHBvcnQtZGVsZWdhdGVcIik7XG5jb25zdCBodHRwX2V4cG9ydGVyX3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vdHJhbnNwb3J0L2h0dHAtZXhwb3J0ZXItdHJhbnNwb3J0XCIpO1xuY29uc3QgYm91bmRlZF9xdWV1ZV9leHBvcnRfcHJvbWlzZV9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9ib3VuZGVkLXF1ZXVlLWV4cG9ydC1wcm9taXNlLWhhbmRsZXJcIik7XG5jb25zdCByZXRyeWluZ190cmFuc3BvcnRfMSA9IHJlcXVpcmUoXCIuL3JldHJ5aW5nLXRyYW5zcG9ydFwiKTtcbmZ1bmN0aW9uIGNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUob3B0aW9ucywgc2VyaWFsaXplcikge1xuICAgIHJldHVybiAoMCwgb3RscF9leHBvcnRfZGVsZWdhdGVfMS5jcmVhdGVPdGxwRXhwb3J0RGVsZWdhdGUpKHtcbiAgICAgICAgdHJhbnNwb3J0OiAoMCwgcmV0cnlpbmdfdHJhbnNwb3J0XzEuY3JlYXRlUmV0cnlpbmdUcmFuc3BvcnQpKHtcbiAgICAgICAgICAgIHRyYW5zcG9ydDogKDAsIGh0dHBfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlSHR0cEV4cG9ydGVyVHJhbnNwb3J0KShvcHRpb25zKSxcbiAgICAgICAgfSksXG4gICAgICAgIHNlcmlhbGl6ZXI6IHNlcmlhbGl6ZXIsXG4gICAgICAgIHByb21pc2VIYW5kbGVyOiAoMCwgYm91bmRlZF9xdWV1ZV9leHBvcnRfcHJvbWlzZV9oYW5kbGVyXzEuY3JlYXRlQm91bmRlZFF1ZXVlRXhwb3J0UHJvbWlzZUhhbmRsZXIpKG9wdGlvbnMpLFxuICAgIH0sIHsgdGltZW91dDogb3B0aW9ucy50aW1lb3V0TWlsbGlzIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVPdGxwSHR0cEV4cG9ydERlbGVnYXRlID0gY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtaHR0cC1leHBvcnQtZGVsZWdhdGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmZ1bmN0aW9uIHBhcnNlQW5kVmFsaWRhdGVUaW1lb3V0RnJvbUVudih0aW1lb3V0RW52VmFyKSB7XG4gICAgY29uc3QgZW52VGltZW91dCA9IHByb2Nlc3MuZW52W3RpbWVvdXRFbnZWYXJdPy50cmltKCk7XG4gICAgaWYgKGVudlRpbWVvdXQgIT0gbnVsbCAmJiBlbnZUaW1lb3V0ICE9PSAnJykge1xuICAgICAgICBjb25zdCBkZWZpbmVkVGltZW91dCA9IE51bWJlcihlbnZUaW1lb3V0KTtcbiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZWZpbmVkVGltZW91dCkgJiYgZGVmaW5lZFRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmaW5lZFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBDb25maWd1cmF0aW9uOiAke3RpbWVvdXRFbnZWYXJ9IGlzIGludmFsaWQsIGV4cGVjdGVkIG51bWJlciBncmVhdGVyIHRoYW4gMCAoYWN0dWFsOiAke2VudlRpbWVvdXR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0VGltZW91dEZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHNwZWNpZmljVGltZW91dCA9IHBhcnNlQW5kVmFsaWRhdGVUaW1lb3V0RnJvbUVudihgT1RFTF9FWFBPUlRFUl9PVExQXyR7c2lnbmFsSWRlbnRpZmllcn1fVElNRU9VVGApO1xuICAgIGNvbnN0IG5vblNwZWNpZmljVGltZW91dCA9IHBhcnNlQW5kVmFsaWRhdGVUaW1lb3V0RnJvbUVudignT1RFTF9FWFBPUlRFUl9PVExQX1RJTUVPVVQnKTtcbiAgICByZXR1cm4gc3BlY2lmaWNUaW1lb3V0ID8/IG5vblNwZWNpZmljVGltZW91dDtcbn1cbmZ1bmN0aW9uIHBhcnNlQW5kVmFsaWRhdGVDb21wcmVzc2lvbkZyb21FbnYoY29tcHJlc3Npb25FbnZWYXIpIHtcbiAgICBjb25zdCBjb21wcmVzc2lvbiA9IHByb2Nlc3MuZW52W2NvbXByZXNzaW9uRW52VmFyXT8udHJpbSgpO1xuICAgIGlmIChjb21wcmVzc2lvbiA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGNvbXByZXNzaW9uID09IG51bGwgfHwgY29tcHJlc3Npb24gPT09ICdub25lJyB8fCBjb21wcmVzc2lvbiA9PT0gJ2d6aXAnKSB7XG4gICAgICAgIHJldHVybiBjb21wcmVzc2lvbjtcbiAgICB9XG4gICAgYXBpXzEuZGlhZy53YXJuKGBDb25maWd1cmF0aW9uOiAke2NvbXByZXNzaW9uRW52VmFyfSBpcyBpbnZhbGlkLCBleHBlY3RlZCAnbm9uZScgb3IgJ2d6aXAnIChhY3R1YWw6ICcke2NvbXByZXNzaW9ufScpYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldENvbXByZXNzaW9uRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNDb21wcmVzc2lvbiA9IHBhcnNlQW5kVmFsaWRhdGVDb21wcmVzc2lvbkZyb21FbnYoYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0NPTVBSRVNTSU9OYCk7XG4gICAgY29uc3Qgbm9uU3BlY2lmaWNDb21wcmVzc2lvbiA9IHBhcnNlQW5kVmFsaWRhdGVDb21wcmVzc2lvbkZyb21FbnYoJ09URUxfRVhQT1JURVJfT1RMUF9DT01QUkVTU0lPTicpO1xuICAgIHJldHVybiBzcGVjaWZpY0NvbXByZXNzaW9uID8/IG5vblNwZWNpZmljQ29tcHJlc3Npb247XG59XG5mdW5jdGlvbiBnZXRTaGFyZWRDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0aW1lb3V0TWlsbGlzOiBnZXRUaW1lb3V0RnJvbUVudihzaWduYWxJZGVudGlmaWVyKSxcbiAgICAgICAgY29tcHJlc3Npb246IGdldENvbXByZXNzaW9uRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRTaGFyZWRDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50ID0gZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYXJlZC1lbnYtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVBbmROb3JtYWxpemVIZWFkZXJzID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLyoqXG4gKiBQYXJzZXMgaGVhZGVycyBmcm9tIGNvbmZpZyBsZWF2aW5nIG9ubHkgdGhvc2UgdGhhdCBoYXZlIGRlZmluZWQgdmFsdWVzXG4gKiBAcGFyYW0gcGFydGlhbEhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBbmROb3JtYWxpemVIZWFkZXJzKHBhcnRpYWxIZWFkZXJzKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJ0aWFsSGVhZGVycz8uKCkgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBIZWFkZXIgXCIke2tleX1cIiBoYXMgaW52YWxpZCB2YWx1ZSAoJHt2YWx1ZX0pIGFuZCB3aWxsIGJlIGlnbm9yZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH07XG59XG5leHBvcnRzLnZhbGlkYXRlQW5kTm9ybWFsaXplSGVhZGVycyA9IHZhbGlkYXRlQW5kTm9ybWFsaXplSGVhZGVycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEh0dHBDb25maWd1cmF0aW9uRGVmYXVsdHMgPSBleHBvcnRzLm1lcmdlT3RscEh0dHBDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gdm9pZCAwO1xuY29uc3Qgc2hhcmVkX2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL3NoYXJlZC1jb25maWd1cmF0aW9uXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBtZXJnZUhlYWRlcnModXNlclByb3ZpZGVkSGVhZGVycywgZmFsbGJhY2tIZWFkZXJzLCBkZWZhdWx0SGVhZGVycykge1xuICAgIGNvbnN0IHJlcXVpcmVkSGVhZGVycyA9IHtcbiAgICAgICAgLi4uZGVmYXVsdEhlYWRlcnMoKSxcbiAgICB9O1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyBhZGQgZmFsbGJhY2sgb25lcyBmaXJzdFxuICAgICAgICBpZiAoZmFsbGJhY2tIZWFkZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgZmFsbGJhY2tIZWFkZXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG92ZXJyaWRlIHdpdGggdXNlci1wcm92aWRlZCBvbmVzXG4gICAgICAgIGlmICh1c2VyUHJvdmlkZWRIZWFkZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgdXNlclByb3ZpZGVkSGVhZGVycygpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdmVycmlkZSByZXF1aXJlZCBvbmVzLlxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCByZXF1aXJlZEhlYWRlcnMpO1xuICAgIH07XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVVzZXJQcm92aWRlZFVybCh1cmwpIHtcbiAgICBpZiAodXJsID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbmV3IFVSTCh1cmwpO1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uZmlndXJhdGlvbjogQ291bGQgbm90IHBhcnNlIHVzZXItcHJvdmlkZWQgZXhwb3J0IFVSTDogJyR7dXJsfSdgKTtcbiAgICB9XG59XG4vKipcbiAqIEBwYXJhbSB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uICBDb25maWd1cmF0aW9uIG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgaW4gY29kZS5cbiAqIEBwYXJhbSBmYWxsYmFja0NvbmZpZ3VyYXRpb24gRmFsbGJhY2sgdG8gdXNlIHdoZW4gdGhlIHtAbGluayB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9ufSBkb2VzIG5vdCBzcGVjaWZ5IGFuIG9wdGlvbi5cbiAqIEBwYXJhbSBkZWZhdWx0Q29uZmlndXJhdGlvbiBUaGUgZGVmYXVsdHMgYXMgZGVmaW5lZCBieSB0aGUgZXhwb3J0ZXIgc3BlY2lmaWNhdGlvblxuICovXG5mdW5jdGlvbiBtZXJnZU90bHBIdHRwQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cyh1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLCBmYWxsYmFja0NvbmZpZ3VyYXRpb24sIGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKDAsIHNoYXJlZF9jb25maWd1cmF0aW9uXzEubWVyZ2VPdGxwU2hhcmVkQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cykodXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbiwgZmFsbGJhY2tDb25maWd1cmF0aW9uLCBkZWZhdWx0Q29uZmlndXJhdGlvbiksXG4gICAgICAgIGhlYWRlcnM6IG1lcmdlSGVhZGVycygoMCwgdXRpbF8xLnZhbGlkYXRlQW5kTm9ybWFsaXplSGVhZGVycykodXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi5oZWFkZXJzKSwgZmFsbGJhY2tDb25maWd1cmF0aW9uLmhlYWRlcnMsIGRlZmF1bHRDb25maWd1cmF0aW9uLmhlYWRlcnMpLFxuICAgICAgICB1cmw6IHZhbGlkYXRlVXNlclByb3ZpZGVkVXJsKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24udXJsKSA/P1xuICAgICAgICAgICAgZmFsbGJhY2tDb25maWd1cmF0aW9uLnVybCA/P1xuICAgICAgICAgICAgZGVmYXVsdENvbmZpZ3VyYXRpb24udXJsLFxuICAgICAgICBhZ2VudE9wdGlvbnM6IHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24uYWdlbnRPcHRpb25zID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24uYWdlbnRPcHRpb25zID8/XG4gICAgICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbi5hZ2VudE9wdGlvbnMsXG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VPdGxwSHR0cENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMgPSBtZXJnZU90bHBIdHRwQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cztcbmZ1bmN0aW9uIGdldEh0dHBDb25maWd1cmF0aW9uRGVmYXVsdHMocmVxdWlyZWRIZWFkZXJzLCBzaWduYWxSZXNvdXJjZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi4oMCwgc2hhcmVkX2NvbmZpZ3VyYXRpb25fMS5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMpKCksXG4gICAgICAgIGhlYWRlcnM6ICgpID0+IHJlcXVpcmVkSGVhZGVycyxcbiAgICAgICAgdXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0MzE4LycgKyBzaWduYWxSZXNvdXJjZVBhdGgsXG4gICAgICAgIGFnZW50T3B0aW9uczogeyBrZWVwQWxpdmU6IHRydWUgfSxcbiAgICB9O1xufVxuZXhwb3J0cy5nZXRIdHRwQ29uZmlndXJhdGlvbkRlZmF1bHRzID0gZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtaHR0cC1jb25maWd1cmF0aW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEh0dHBDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50ID0gdm9pZCAwO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3Qgc2hhcmVkX2Vudl9jb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQtZW52LWNvbmZpZ3VyYXRpb25cIik7XG5jb25zdCBzaGFyZWRfY29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vc2hhcmVkLWNvbmZpZ3VyYXRpb25cIik7XG5mdW5jdGlvbiBnZXRTdGF0aWNIZWFkZXJzRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzID0gcHJvY2Vzcy5lbnZbYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0hFQURFUlNgXT8udHJpbSgpO1xuICAgIGNvbnN0IG5vblNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyA9IHByb2Nlc3MuZW52WydPVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSUyddPy50cmltKCk7XG4gICAgY29uc3Qgc2lnbmFsU3BlY2lmaWNIZWFkZXJzID0gKDAsIGNvcmVfMS5wYXJzZUtleVBhaXJzSW50b1JlY29yZCkoc2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzKTtcbiAgICBjb25zdCBub25TaWduYWxTcGVjaWZpY0hlYWRlcnMgPSAoMCwgY29yZV8xLnBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkKShub25TaWduYWxTcGVjaWZpY1Jhd0hlYWRlcnMpO1xuICAgIGlmIChPYmplY3Qua2V5cyhzaWduYWxTcGVjaWZpY0hlYWRlcnMpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICBPYmplY3Qua2V5cyhub25TaWduYWxTcGVjaWZpY0hlYWRlcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBoZWFkZXJzIGFyZSBjb21iaW5lZCBpbnN0ZWFkIG9mIG92ZXJ3cml0dGVuLCB3aXRoIHRoZSBzcGVjaWZpYyBoZWFkZXJzIHRha2luZyBwcmVjZWRlbmNlIG92ZXJcbiAgICAvLyB0aGUgbm9uLXNwZWNpZmljIG9uZXMuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sICgwLCBjb3JlXzEucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQpKG5vblNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyksICgwLCBjb3JlXzEucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQpKHNpZ25hbFNwZWNpZmljUmF3SGVhZGVycykpO1xufVxuZnVuY3Rpb24gYXBwZW5kUm9vdFBhdGhUb1VybElmTmVlZGVkKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwZW5kICcvJyBpZiB0aGVyZSdzIG5vIHJvb3QgcGF0aC5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFVybC50b1N0cmluZygpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybihgQ29uZmlndXJhdGlvbjogQ291bGQgbm90IHBhcnNlIGVudmlyb25tZW50LXByb3ZpZGVkIGV4cG9ydCBVUkw6ICcke3VybH0nLCBmYWxsaW5nIGJhY2sgdG8gdW5kZWZpbmVkYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwZW5kUmVzb3VyY2VQYXRoVG9VcmwodXJsLCBwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8ganVzdCB0cnkgdG8gcGFyc2UsIGlmIGl0IGZhaWxzIHdlIGNhdGNoIGFuZCB3YXJuLlxuICAgICAgICBuZXcgVVJMKHVybCk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBDb25maWd1cmF0aW9uOiBDb3VsZCBub3QgcGFyc2UgZW52aXJvbm1lbnQtcHJvdmlkZWQgZXhwb3J0IFVSTDogJyR7dXJsfScsIGZhbGxpbmcgYmFjayB0byB1bmRlZmluZWRgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF1cmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICB1cmwgPSB1cmwgKyAnLyc7XG4gICAgfVxuICAgIHVybCArPSBwYXRoO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGp1c3QgdHJ5IHRvIHBhcnNlLCBpZiBpdCBmYWlscyB3ZSBjYXRjaCBhbmQgd2Fybi5cbiAgICAgICAgbmV3IFVSTCh1cmwpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybihgQ29uZmlndXJhdGlvbjogUHJvdmlkZWQgVVJMIGFwcGVuZGVkIHdpdGggJyR7cGF0aH0nIGlzIG5vdCBhIHZhbGlkIFVSTCwgdXNpbmcgJ3VuZGVmaW5lZCcgaW5zdGVhZCBvZiAnJHt1cmx9J2ApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuZnVuY3Rpb24gZ2V0Tm9uU3BlY2lmaWNVcmxGcm9tRW52KHNpZ25hbFJlc291cmNlUGF0aCkge1xuICAgIGNvbnN0IGVudlVybCA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVD8udHJpbSgpO1xuICAgIGlmIChlbnZVcmwgPT0gbnVsbCB8fCBlbnZVcmwgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBhcHBlbmRSZXNvdXJjZVBhdGhUb1VybChlbnZVcmwsIHNpZ25hbFJlc291cmNlUGF0aCk7XG59XG5mdW5jdGlvbiBnZXRTcGVjaWZpY1VybEZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGVudlVybCA9IHByb2Nlc3MuZW52W2BPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9FTkRQT0lOVGBdPy50cmltKCk7XG4gICAgaWYgKGVudlVybCA9PSBudWxsIHx8IGVudlVybCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGVuZFJvb3RQYXRoVG9VcmxJZk5lZWRlZChlbnZVcmwpO1xufVxuLyoqXG4gKiBSZWFkcyBhbmQgcmV0dXJucyBjb25maWd1cmF0aW9uIGZyb20gdGhlIGVudmlyb25tZW50XG4gKlxuICogQHBhcmFtIHNpZ25hbElkZW50aWZpZXIgYWxsIGNhcHMgcGFydCBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBpZGVudGlmaWVzIHRoZSBzaWduYWwgKGUuZy46IE1FVFJJQ1MsIFRSQUNFUywgTE9HUylcbiAqIEBwYXJhbSBzaWduYWxSZXNvdXJjZVBhdGggc2lnbmFsIHJlc291cmNlIHBhdGggdG8gYXBwZW5kIGlmIG5lY2Vzc2FyeSAoZS5nLjogdjEvbWV0cmljcywgdjEvdHJhY2VzLCB2MS9sb2dzKVxuICovXG5mdW5jdGlvbiBnZXRIdHRwQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudChzaWduYWxJZGVudGlmaWVyLCBzaWduYWxSZXNvdXJjZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi4oMCwgc2hhcmVkX2Vudl9jb25maWd1cmF0aW9uXzEuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudCkoc2lnbmFsSWRlbnRpZmllciksXG4gICAgICAgIHVybDogZ2V0U3BlY2lmaWNVcmxGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpID8/XG4gICAgICAgICAgICBnZXROb25TcGVjaWZpY1VybEZyb21FbnYoc2lnbmFsUmVzb3VyY2VQYXRoKSxcbiAgICAgICAgaGVhZGVyczogKDAsIHNoYXJlZF9jb25maWd1cmF0aW9uXzEud3JhcFN0YXRpY0hlYWRlcnNJbkZ1bmN0aW9uKShnZXRTdGF0aWNIZWFkZXJzRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSksXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0SHR0cENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnQgPSBnZXRIdHRwQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90bHAtaHR0cC1lbnYtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2h0dHBfY29uZmlndXJhdGlvbl8xID0gcmVxdWlyZShcIi4vb3RscC1odHRwLWNvbmZpZ3VyYXRpb25cIik7XG5jb25zdCBvdGxwX2h0dHBfZW52X2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL290bHAtaHR0cC1lbnYtY29uZmlndXJhdGlvblwiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNoYXJlZF9jb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9zaGFyZWQtY29uZmlndXJhdGlvblwiKTtcbmZ1bmN0aW9uIGNvbnZlcnRMZWdhY3lBZ2VudE9wdGlvbnMoY29uZmlnKSB7XG4gICAgLy8gcG9wdWxhdGUga2VlcEFsaXZlIGZvciB1c2Ugd2l0aCBuZXcgc2V0dGluZ3NcbiAgICBpZiAoY29uZmlnPy5rZWVwQWxpdmUgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY29uZmlnLmh0dHBBZ2VudE9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5odHRwQWdlbnRPcHRpb25zLmtlZXBBbGl2ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgc2V0dGluZyBpcyBub3Qgc2V0LCBwb3B1bGF0ZSB3aXRoIG5vbi1zcGVjaWZpYyBzZXR0aW5nLlxuICAgICAgICAgICAgICAgIGNvbmZpZy5odHRwQWdlbnRPcHRpb25zLmtlZXBBbGl2ZSA9IGNvbmZpZy5rZWVwQWxpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nLCB1c2Ugc3BlY2lmaWMgc2V0dGluZyBvdGhlcndpc2VcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBvcHVsYXRlIHNwZWNpZmljIG9wdGlvbiBpZiBBZ2VudE9wdGlvbnMgZG9lcyBub3QgZXhpc3QuXG4gICAgICAgICAgICBjb25maWcuaHR0cEFnZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBrZWVwQWxpdmU6IGNvbmZpZy5rZWVwQWxpdmUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuaHR0cEFnZW50T3B0aW9ucztcbn1cbi8qKlxuICogQGRlcHJlY2F0ZWQgdGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gMi4wXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gc2lnbmFsSWRlbnRpZmllclxuICogQHBhcmFtIHNpZ25hbFJlc291cmNlUGF0aFxuICogQHBhcmFtIHJlcXVpcmVkSGVhZGVyc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMoY29uZmlnLCBzaWduYWxJZGVudGlmaWVyLCBzaWduYWxSZXNvdXJjZVBhdGgsIHJlcXVpcmVkSGVhZGVycykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKGNvbmZpZy5tZXRhZGF0YSkge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ01ldGFkYXRhIGNhbm5vdCBiZSBzZXQgd2hlbiB1c2luZyBodHRwJyk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgb3RscF9odHRwX2NvbmZpZ3VyYXRpb25fMS5tZXJnZU90bHBIdHRwQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cykoe1xuICAgICAgICB1cmw6IGNvbmZpZy51cmwsXG4gICAgICAgIGhlYWRlcnM6ICgwLCBzaGFyZWRfY29uZmlndXJhdGlvbl8xLndyYXBTdGF0aWNIZWFkZXJzSW5GdW5jdGlvbikoY29uZmlnLmhlYWRlcnMpLFxuICAgICAgICBjb25jdXJyZW5jeUxpbWl0OiBjb25maWcuY29uY3VycmVuY3lMaW1pdCxcbiAgICAgICAgdGltZW91dE1pbGxpczogY29uZmlnLnRpbWVvdXRNaWxsaXMsXG4gICAgICAgIGNvbXByZXNzaW9uOiBjb25maWcuY29tcHJlc3Npb24sXG4gICAgICAgIGFnZW50T3B0aW9uczogY29udmVydExlZ2FjeUFnZW50T3B0aW9ucyhjb25maWcpLFxuICAgIH0sICgwLCBvdGxwX2h0dHBfZW52X2NvbmZpZ3VyYXRpb25fMS5nZXRIdHRwQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudCkoc2lnbmFsSWRlbnRpZmllciwgc2lnbmFsUmVzb3VyY2VQYXRoKSwgKDAsIG90bHBfaHR0cF9jb25maWd1cmF0aW9uXzEuZ2V0SHR0cENvbmZpZ3VyYXRpb25EZWZhdWx0cykocmVxdWlyZWRIZWFkZXJzLCBzaWduYWxSZXNvdXJjZVBhdGgpKTtcbn1cbmV4cG9ydHMuY29udmVydExlZ2FjeUh0dHBPcHRpb25zID0gY29udmVydExlZ2FjeUh0dHBPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udmVydC1sZWdhY3ktbm9kZS1odHRwLW9wdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnZlcnRMZWdhY3lIdHRwT3B0aW9ucyA9IGV4cG9ydHMuZ2V0U2hhcmVkQ29uZmlndXJhdGlvbkZyb21FbnZpcm9ubWVudCA9IGV4cG9ydHMuY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZSA9IHZvaWQgMDtcbnZhciBvdGxwX2h0dHBfZXhwb3J0X2RlbGVnYXRlXzEgPSByZXF1aXJlKFwiLi9vdGxwLWh0dHAtZXhwb3J0LWRlbGVnYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb3RscF9odHRwX2V4cG9ydF9kZWxlZ2F0ZV8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGU7IH0gfSk7XG52YXIgc2hhcmVkX2Vudl9jb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9jb25maWd1cmF0aW9uL3NoYXJlZC1lbnYtY29uZmlndXJhdGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFNoYXJlZENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNoYXJlZF9lbnZfY29uZmlndXJhdGlvbl8xLmdldFNoYXJlZENvbmZpZ3VyYXRpb25Gcm9tRW52aXJvbm1lbnQ7IH0gfSk7XG52YXIgY29udmVydF9sZWdhY3lfbm9kZV9odHRwX29wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL2NvbmZpZ3VyYXRpb24vY29udmVydC1sZWdhY3ktbm9kZS1odHRwLW9wdGlvbnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbnZlcnRfbGVnYWN5X25vZGVfaHR0cF9vcHRpb25zXzEuY29udmVydExlZ2FjeUh0dHBPcHRpb25zOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgtbm9kZS1odHRwLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuLi8uLi92ZXJzaW9uXCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbi8qKlxuICogQ29sbGVjdG9yIExvZ3MgRXhwb3J0ZXIgZm9yIE5vZGVcbiAqL1xuY2xhc3MgT1RMUExvZ0V4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZywgJ0xPR1MnLCAndjEvbG9ncycsIHtcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogYE9UZWwtT1RMUC1FeHBvcnRlci1KYXZhU2NyaXB0LyR7dmVyc2lvbl8xLlZFUlNJT059YCxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0pLCBvdGxwX3RyYW5zZm9ybWVyXzEuSnNvbkxvZ3NTZXJpYWxpemVyKSk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSBPVExQTG9nRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTG9nRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQTG9nRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBMb2dFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBMb2dFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUExvZ0V4cG9ydGVyXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUExvZ0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm1cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTG9nRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUExvZ0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZVNlcnZpY2VDbGllbnRDb25zdHJ1Y3RvciA9IHZvaWQgMDtcbmNvbnN0IGdycGMgPSByZXF1aXJlKFwiQGdycGMvZ3JwYy1qc1wiKTtcbi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IHNlcnZpY2UgY2xpZW50IGNvbnN0cnVjdG9yIHRoYXQsIHdoZW4gaW5zdGFudGlhdGVkLCBkb2VzIG5vdCBzZXJpYWxpemUvZGVzZXJpYWxpemUgYW55dGhpbmcuXG4gKiBBbGxvd3MgZm9yIHBhc3NpbmcgaW4ge0BsaW5rIEJ1ZmZlcn0gZGlyZWN0bHksIHNlcmlhbGl6YXRpb24gY2FuIGJlIGhhbmRsZWQgdmlhIHByb3RvYnVmanMgb3IgY3VzdG9tIGltcGxlbWVudGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcGF0aCBzZXJ2aWNlIHBhdGhcbiAqIEBwYXJhbSBuYW1lIHNlcnZpY2UgbmFtZVxuICovXG5mdW5jdGlvbiBjcmVhdGVTZXJ2aWNlQ2xpZW50Q29uc3RydWN0b3IocGF0aCwgbmFtZSkge1xuICAgIGNvbnN0IHNlcnZpY2VEZWZpbml0aW9uID0ge1xuICAgICAgICBleHBvcnQ6IHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgICAgICAgICAgIHJlcXVlc3RTZXJpYWxpemU6IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3REZXNlcmlhbGl6ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VTZXJpYWxpemU6IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlRGVzZXJpYWxpemU6IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBncnBjLm1ha2VHZW5lcmljQ2xpZW50Q29uc3RydWN0b3Ioc2VydmljZURlZmluaXRpb24sIG5hbWUpO1xufVxuZXhwb3J0cy5jcmVhdGVTZXJ2aWNlQ2xpZW50Q29uc3RydWN0b3IgPSBjcmVhdGVTZXJ2aWNlQ2xpZW50Q29uc3RydWN0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUtc2VydmljZS1jbGllbnQtY29uc3RydWN0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU90bHBHcnBjRXhwb3J0ZXJUcmFuc3BvcnQgPSBleHBvcnRzLkdycGNFeHBvcnRlclRyYW5zcG9ydCA9IGV4cG9ydHMuY3JlYXRlRW1wdHlNZXRhZGF0YSA9IGV4cG9ydHMuY3JlYXRlU3NsQ3JlZGVudGlhbHMgPSBleHBvcnRzLmNyZWF0ZUluc2VjdXJlQ3JlZGVudGlhbHMgPSB2b2lkIDA7XG4vLyB2YWx1ZXMgdGFrZW4gZnJvbSAnQGdycGMvZ3JwYy1qc2Agc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlcXVpcmUvaW1wb3J0IGl0LlxuY29uc3QgR1JQQ19DT01QUkVTU0lPTl9OT05FID0gMDtcbmNvbnN0IEdSUENfQ09NUFJFU1NJT05fR1pJUCA9IDI7XG5mdW5jdGlvbiB0b0dycGNDb21wcmVzc2lvbihjb21wcmVzc2lvbikge1xuICAgIHJldHVybiBjb21wcmVzc2lvbiA9PT0gJ2d6aXAnID8gR1JQQ19DT01QUkVTU0lPTl9HWklQIDogR1JQQ19DT01QUkVTU0lPTl9OT05FO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zZWN1cmVDcmVkZW50aWFscygpIHtcbiAgICAvLyBMYXp5LWxvYWQgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlcXVpcmUvaW1wb3J0ICdAZ3JwYy9ncnBjLWpzJyBiZWZvcmUgaXQgY2FuIGJlIHdyYXBwZWQgYnkgaW5zdHJ1bWVudGF0aW9uLlxuICAgIGNvbnN0IHsgY3JlZGVudGlhbHMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgfSA9IHJlcXVpcmUoJ0BncnBjL2dycGMtanMnKTtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMuY3JlYXRlSW5zZWN1cmUoKTtcbn1cbmV4cG9ydHMuY3JlYXRlSW5zZWN1cmVDcmVkZW50aWFscyA9IGNyZWF0ZUluc2VjdXJlQ3JlZGVudGlhbHM7XG5mdW5jdGlvbiBjcmVhdGVTc2xDcmVkZW50aWFscyhyb290Q2VydCwgcHJpdmF0ZUtleSwgY2VydENoYWluKSB7XG4gICAgLy8gTGF6eS1sb2FkIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZXF1aXJlL2ltcG9ydCAnQGdycGMvZ3JwYy1qcycgYmVmb3JlIGl0IGNhbiBiZSB3cmFwcGVkIGJ5IGluc3RydW1lbnRhdGlvbi5cbiAgICBjb25zdCB7IGNyZWRlbnRpYWxzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgIH0gPSByZXF1aXJlKCdAZ3JwYy9ncnBjLWpzJyk7XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmNyZWF0ZVNzbChyb290Q2VydCwgcHJpdmF0ZUtleSwgY2VydENoYWluKTtcbn1cbmV4cG9ydHMuY3JlYXRlU3NsQ3JlZGVudGlhbHMgPSBjcmVhdGVTc2xDcmVkZW50aWFscztcbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5TWV0YWRhdGEoKSB7XG4gICAgLy8gTGF6eS1sb2FkIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZXF1aXJlL2ltcG9ydCAnQGdycGMvZ3JwYy1qcycgYmVmb3JlIGl0IGNhbiBiZSB3cmFwcGVkIGJ5IGluc3RydW1lbnRhdGlvbi5cbiAgICBjb25zdCB7IE1ldGFkYXRhLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgIH0gPSByZXF1aXJlKCdAZ3JwYy9ncnBjLWpzJyk7XG4gICAgcmV0dXJuIG5ldyBNZXRhZGF0YSgpO1xufVxuZXhwb3J0cy5jcmVhdGVFbXB0eU1ldGFkYXRhID0gY3JlYXRlRW1wdHlNZXRhZGF0YTtcbmNsYXNzIEdycGNFeHBvcnRlclRyYW5zcG9ydCB7XG4gICAgX3BhcmFtZXRlcnM7XG4gICAgX2NsaWVudDtcbiAgICBfbWV0YWRhdGE7XG4gICAgY29uc3RydWN0b3IoX3BhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IF9wYXJhbWV0ZXJzO1xuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgdGhpcy5fY2xpZW50Py5jbG9zZSgpO1xuICAgIH1cbiAgICBzZW5kKGRhdGEsIHRpbWVvdXRNaWxsaXMpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgZm9yIGdSUENcbiAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgICAgIGlmICh0aGlzLl9jbGllbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTGF6eSByZXF1aXJlIHRvIGVuc3VyZSB0aGF0IGdycGMgaXMgbm90IGxvYWRlZCBiZWZvcmUgaW5zdHJ1bWVudGF0aW9ucyBjYW4gd3JhcCBpdFxuICAgICAgICAgICAgY29uc3QgeyBjcmVhdGVTZXJ2aWNlQ2xpZW50Q29uc3RydWN0b3IsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgICAgICAgICAgIH0gPSByZXF1aXJlKCcuL2NyZWF0ZS1zZXJ2aWNlLWNsaWVudC1jb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHRoaXMuX3BhcmFtZXRlcnMubWV0YWRhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdmYWlsdXJlJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2xpZW50Q29uc3RydWN0b3IgPSBjcmVhdGVTZXJ2aWNlQ2xpZW50Q29uc3RydWN0b3IodGhpcy5fcGFyYW1ldGVycy5ncnBjUGF0aCwgdGhpcy5fcGFyYW1ldGVycy5ncnBjTmFtZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudCA9IG5ldyBjbGllbnRDb25zdHJ1Y3Rvcih0aGlzLl9wYXJhbWV0ZXJzLmFkZHJlc3MsIHRoaXMuX3BhcmFtZXRlcnMuY3JlZGVudGlhbHMoKSwge1xuICAgICAgICAgICAgICAgICAgICAnZ3JwYy5kZWZhdWx0X2NvbXByZXNzaW9uX2FsZ29yaXRobSc6IHRvR3JwY0NvbXByZXNzaW9uKHRoaXMuX3BhcmFtZXRlcnMuY29tcHJlc3Npb24pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1pbGxpcztcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ21ldGFkYXRhIHdhcyBudWxsJyksXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBUaGUgZ1JQQyBjbGllbnQgY29uc3RydWN0b3IgaXMgY3JlYXRlZCBvbiBydW50aW1lLCBzbyB3ZSBkb24ndCBoYXZlIGFueSB0eXBlcyBmb3IgdGhlIHJlc3VsdGluZyBjbGllbnQuXG4gICAgICAgICAgICB0aGlzLl9jbGllbnQuZXhwb3J0KGJ1ZmZlciwgdGhpcy5fbWV0YWRhdGEsIHsgZGVhZGxpbmU6IGRlYWRsaW5lIH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkdycGNFeHBvcnRlclRyYW5zcG9ydCA9IEdycGNFeHBvcnRlclRyYW5zcG9ydDtcbmZ1bmN0aW9uIGNyZWF0ZU90bHBHcnBjRXhwb3J0ZXJUcmFuc3BvcnQob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR3JwY0V4cG9ydGVyVHJhbnNwb3J0KG9wdGlvbnMpO1xufVxuZXhwb3J0cy5jcmVhdGVPdGxwR3JwY0V4cG9ydGVyVHJhbnNwb3J0ID0gY3JlYXRlT3RscEdycGNFeHBvcnRlclRyYW5zcG9ydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdycGMtZXhwb3J0ZXItdHJhbnNwb3J0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlZFUlNJT04gPSAnMC4yMDMuMCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPdGxwR3JwY0RlZmF1bHRDb25maWd1cmF0aW9uID0gZXhwb3J0cy5tZXJnZU90bHBHcnBjQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cyA9IGV4cG9ydHMudmFsaWRhdGVBbmROb3JtYWxpemVVcmwgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4uL2dycGMtZXhwb3J0ZXItdHJhbnNwb3J0XCIpO1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4uL3ZlcnNpb25cIik7XG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5mdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVVybCh1cmwpIHtcbiAgICB1cmwgPSB1cmwudHJpbSgpO1xuICAgIGNvbnN0IGhhc1Byb3RvY29sID0gdXJsLm1hdGNoKC9eKFtcXHddezEsOH0pOlxcL1xcLy8pO1xuICAgIGlmICghaGFzUHJvdG9jb2wpIHtcbiAgICAgICAgdXJsID0gYGh0dHBzOi8vJHt1cmx9YDtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IHVybF8xLlVSTCh1cmwpO1xuICAgIGlmICh0YXJnZXQucHJvdG9jb2wgPT09ICd1bml4OicpIHtcbiAgICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5wYXRobmFtZSAmJiB0YXJnZXQucGF0aG5hbWUgIT09ICcvJykge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ1VSTCBwYXRoIHNob3VsZCBub3QgYmUgc2V0IHdoZW4gdXNpbmcgZ3JwYywgdGhlIHBhdGggcGFydCBvZiB0aGUgVVJMIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5wcm90b2NvbCAhPT0gJycgJiYgIXRhcmdldC5wcm90b2NvbD8ubWF0Y2goL14oaHR0cClzPzokLykpIHtcbiAgICAgICAgYXBpXzEuZGlhZy53YXJuKCdVUkwgcHJvdG9jb2wgc2hvdWxkIGJlIGh0dHAocyk6Ly8uIFVzaW5nIGh0dHA6Ly8uJyk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQuaG9zdDtcbn1cbmV4cG9ydHMudmFsaWRhdGVBbmROb3JtYWxpemVVcmwgPSB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVVybDtcbmZ1bmN0aW9uIG92ZXJyaWRlTWV0YWRhdGFFbnRyaWVzSWZOb3RQcmVzZW50KG1ldGFkYXRhLCBhZGRpdGlvbmFsTWV0YWRhdGEpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsTWV0YWRhdGEuZ2V0TWFwKCkpKSB7XG4gICAgICAgIC8vIG9ubHkgb3ZlcnJpZGUgd2l0aCBlbnYgdmFyIGRhdGEgaWYgdGhlIGtleSBoYXMgbm8gdmFsdWVzLlxuICAgICAgICAvLyBub3QgdXNpbmcgTWV0YWRhdGEubWVyZ2UoKSBhcyBpdCB3aWxsIGtlZXAgYm90aCB2YWx1ZXMuXG4gICAgICAgIGlmIChtZXRhZGF0YS5nZXQoa2V5KS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZU90bHBHcnBjQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cyh1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLCBmYWxsYmFja0NvbmZpZ3VyYXRpb24sIGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgcmF3VXJsID0gdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi51cmwgPz9cbiAgICAgICAgZmFsbGJhY2tDb25maWd1cmF0aW9uLnVybCA/P1xuICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbi51cmw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKDAsIG90bHBfZXhwb3J0ZXJfYmFzZV8xLm1lcmdlT3RscFNoYXJlZENvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHMpKHVzZXJQcm92aWRlZENvbmZpZ3VyYXRpb24sIGZhbGxiYWNrQ29uZmlndXJhdGlvbiwgZGVmYXVsdENvbmZpZ3VyYXRpb24pLFxuICAgICAgICBtZXRhZGF0YTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5tZXRhZGF0YSgpO1xuICAgICAgICAgICAgb3ZlcnJpZGVNZXRhZGF0YUVudHJpZXNJZk5vdFByZXNlbnQobWV0YWRhdGEsIFxuICAgICAgICAgICAgLy8gY2xvbmUgdG8gZW5zdXJlIHdlIGRvbid0IG1vZGlmeSB3aGF0IHRoZSB1c2VyIGdhdmUgdXMgaW4gY2FzZSB0aGV5IGhvbGQgb24gdG8gdGhlIHJldHVybmVkIHJlZmVyZW5jZVxuICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29uZmlndXJhdGlvbi5tZXRhZGF0YT8uKCkuY2xvbmUoKSA/PyAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVFbXB0eU1ldGFkYXRhKSgpKTtcbiAgICAgICAgICAgIG92ZXJyaWRlTWV0YWRhdGFFbnRyaWVzSWZOb3RQcmVzZW50KG1ldGFkYXRhLCBmYWxsYmFja0NvbmZpZ3VyYXRpb24ubWV0YWRhdGE/LigpID8/ICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUVtcHR5TWV0YWRhdGEpKCkpO1xuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICB9LFxuICAgICAgICB1cmw6IHZhbGlkYXRlQW5kTm9ybWFsaXplVXJsKHJhd1VybCksXG4gICAgICAgIGNyZWRlbnRpYWxzOiB1c2VyUHJvdmlkZWRDb25maWd1cmF0aW9uLmNyZWRlbnRpYWxzID8/XG4gICAgICAgICAgICBmYWxsYmFja0NvbmZpZ3VyYXRpb24uY3JlZGVudGlhbHM/LihyYXdVcmwpID8/XG4gICAgICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbi5jcmVkZW50aWFscyhyYXdVcmwpLFxuICAgIH07XG59XG5leHBvcnRzLm1lcmdlT3RscEdycGNDb25maWd1cmF0aW9uV2l0aERlZmF1bHRzID0gbWVyZ2VPdGxwR3JwY0NvbmZpZ3VyYXRpb25XaXRoRGVmYXVsdHM7XG5mdW5jdGlvbiBnZXRPdGxwR3JwY0RlZmF1bHRDb25maWd1cmF0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLigwLCBvdGxwX2V4cG9ydGVyX2Jhc2VfMS5nZXRTaGFyZWRDb25maWd1cmF0aW9uRGVmYXVsdHMpKCksXG4gICAgICAgIG1ldGFkYXRhOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9ICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUVtcHR5TWV0YWRhdGEpKCk7XG4gICAgICAgICAgICBtZXRhZGF0YS5zZXQoJ1VzZXItQWdlbnQnLCBgT1RlbC1PVExQLUV4cG9ydGVyLUphdmFTY3JpcHQvJHt2ZXJzaW9uXzEuVkVSU0lPTn1gKTtcbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgdXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0MzE3JyxcbiAgICAgICAgY3JlZGVudGlhbHM6ICh1cmwpID0+IHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+ICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUluc2VjdXJlQ3JlZGVudGlhbHMpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gKDAsIGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlU3NsQ3JlZGVudGlhbHMpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0T3RscEdycGNEZWZhdWx0Q29uZmlndXJhdGlvbiA9IGdldE90bHBHcnBjRGVmYXVsdENvbmZpZ3VyYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLWdycGMtY29uZmlndXJhdGlvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRPdGxwR3JwY0NvbmZpZ3VyYXRpb25Gcm9tRW52ID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4uL2dycGMtZXhwb3J0ZXItdHJhbnNwb3J0XCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZnVuY3Rpb24gZmFsbGJhY2tJZk51bGxpc2hPckJsYW5rKHNpZ25hbFNwZWNpZmljLCBub25TaWduYWxTcGVjaWZpYykge1xuICAgIGlmIChzaWduYWxTcGVjaWZpYyAhPSBudWxsICYmIHNpZ25hbFNwZWNpZmljICE9PSAnJykge1xuICAgICAgICByZXR1cm4gc2lnbmFsU3BlY2lmaWM7XG4gICAgfVxuICAgIGlmIChub25TaWduYWxTcGVjaWZpYyAhPSBudWxsICYmIG5vblNpZ25hbFNwZWNpZmljICE9PSAnJykge1xuICAgICAgICByZXR1cm4gbm9uU2lnbmFsU3BlY2lmaWM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRNZXRhZGF0YUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyA9IHByb2Nlc3MuZW52W2BPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9IRUFERVJTYF0/LnRyaW0oKTtcbiAgICBjb25zdCBub25TaWduYWxTcGVjaWZpY1Jhd0hlYWRlcnMgPSBwcm9jZXNzLmVudlsnT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlMnXT8udHJpbSgpO1xuICAgIGNvbnN0IHNpZ25hbFNwZWNpZmljSGVhZGVycyA9ICgwLCBjb3JlXzEucGFyc2VLZXlQYWlyc0ludG9SZWNvcmQpKHNpZ25hbFNwZWNpZmljUmF3SGVhZGVycyk7XG4gICAgY29uc3Qgbm9uU2lnbmFsU3BlY2lmaWNIZWFkZXJzID0gKDAsIGNvcmVfMS5wYXJzZUtleVBhaXJzSW50b1JlY29yZCkobm9uU2lnbmFsU3BlY2lmaWNSYXdIZWFkZXJzKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2lnbmFsU3BlY2lmaWNIZWFkZXJzKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgT2JqZWN0LmtleXMobm9uU2lnbmFsU3BlY2lmaWNIZWFkZXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbWVyZ2VIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgbm9uU2lnbmFsU3BlY2lmaWNIZWFkZXJzLCBzaWduYWxTcGVjaWZpY0hlYWRlcnMpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gKDAsIGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlRW1wdHlNZXRhZGF0YSkoKTtcbiAgICAvLyBmb3IgdGhpcyB0byB3b3JrLCBtZXRhZGF0YSBNVVNUIGJlIGVtcHR5IC0gb3RoZXJ3aXNlIGBNZXRhZGF0YSNzZXQoKWAgd2lsbCBtZXJnZSBpdGVtcy5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXJnZUhlYWRlcnMpKSB7XG4gICAgICAgIG1ldGFkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xufVxuZnVuY3Rpb24gZ2V0TWV0YWRhdGFQcm92aWRlckZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gZ2V0TWV0YWRhdGFGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpO1xuICAgIGlmIChtZXRhZGF0YSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBtZXRhZGF0YTtcbn1cbmZ1bmN0aW9uIGdldFVybEZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIC8vIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBzdHJpbmcgYmV5b25kIHRyaW1taW5nIG9uIHB1cnBvc2UuXG4gICAgLy8gTm9ybWFsbHkgYSB1c2VyIHdvdWxkIGp1c3QgdXNlIGEgaG9zdCBhbmQgcG9ydCBmb3IgZ1JQQywgYnV0IHRoZSBPVExQIEV4cG9ydGVyIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdXMgdG9cbiAgICAvLyB1c2UgdGhlIHJhdyBwcm92aWRlZCBlbmRwb2ludCB0byBkZXJpdmUgY3JlZGVudGlhbCBzZXR0aW5ncy4gVGhlcmVmb3JlLCB3ZSBvbmx5IG5vcm1hbGl6ZSByaWdodCB3aGVuXG4gICAgLy8gd2UgbWVyZ2UgdXNlci1wcm92aWRlZCwgZW52LXByb3ZpZGVkIGFuZCBkZWZhdWx0cyB0b2dldGhlciwgYW5kIHdlIGhhdmUgZGV0ZXJtaW5lZCB3aGljaCBjcmVkZW50aWFscyB0byB1c2UuXG4gICAgLy9cbiAgICAvLyBFeGFtcGxlczpcbiAgICAvLyAtIGV4YW1wbGUudGVzdDo0MzE3IC0+IHVzZSBzZWN1cmUgY3JlZGVudGlhbHMgZnJvbSBlbnZpcm9ubWVudCAob3IgcHJvdmlkZWQgdmlhIGNvZGUpXG4gICAgLy8gLSBodHRwOi8vZXhhbXBsZS50ZXN0OjQzMTcgLT4gdXNlIGluc2VjdXJlIGNyZWRlbnRpYWxzIGlmIG5vdGhpbmcgZWxzZSBpcyBwcm92aWRlZFxuICAgIC8vIC0gaHR0cHM6Ly9leGFtcGxlLnRlc3Q6NDMxNyAtPiB1c2Ugc2VjdXJlIGNyZWRlbnRpYWxzIGZyb20gZW52aXJvbm1lbnQgKG9yIHByb3ZpZGVkIHZpYSBjb2RlKVxuICAgIGNvbnN0IHNwZWNpZmljRW5kcG9pbnQgPSBwcm9jZXNzLmVudltgT1RFTF9FWFBPUlRFUl9PVExQXyR7c2lnbmFsSWRlbnRpZmllcn1fRU5EUE9JTlRgXT8udHJpbSgpO1xuICAgIGNvbnN0IG5vblNwZWNpZmljRW5kcG9pbnQgPSBwcm9jZXNzLmVudltgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYF0/LnRyaW0oKTtcbiAgICByZXR1cm4gZmFsbGJhY2tJZk51bGxpc2hPckJsYW5rKHNwZWNpZmljRW5kcG9pbnQsIG5vblNwZWNpZmljRW5kcG9pbnQpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVudiB2YXIgZm9yIGluc2VjdXJlIGNyZWRlbnRpYWxzIGlzIHNldCB0byB7QGNvZGUgdHJ1ZX0uXG4gKlxuICogSXQgd2lsbCBhbGxvdyB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcyB7QGNvZGUgdHJ1ZX1cbiAqIC0gJ3RydWUnXG4gKiAtICd0cnVlICAgJ1xuICogLSAnICAgdHJ1ZSdcbiAqIC0gJ1RyVUUnXG4gKiAtICdUUlVFJ1xuICpcbiAqIEl0IHdpbGwgbm90IGFsbG93OlxuICogLSAndHJ1ZSBmYWxzZSdcbiAqIC0gJ2ZhbHNlIHRydWUnXG4gKiAtICd0cnVlISdcbiAqIC0gJ3RydWUsdHJ1ZSdcbiAqIC0gJzEnXG4gKiAtICcgJ1xuICpcbiAqIEBwYXJhbSBzaWduYWxJZGVudGlmaWVyXG4gKi9cbmZ1bmN0aW9uIGdldEluc2VjdXJlU2V0dGluZ0Zyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIGNvbnN0IHNpZ25hbFNwZWNpZmljSW5zZWN1cmVWYWx1ZSA9IHByb2Nlc3MuZW52W2BPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9JTlNFQ1VSRWBdXG4gICAgICAgID8udG9Mb3dlckNhc2UoKVxuICAgICAgICAudHJpbSgpO1xuICAgIGNvbnN0IG5vblNpZ25hbFNwZWNpZmljSW5zZWN1cmVWYWx1ZSA9IHByb2Nlc3MuZW52W2BPVEVMX0VYUE9SVEVSX09UTFBfSU5TRUNVUkVgXVxuICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnRyaW0oKTtcbiAgICByZXR1cm4gKGZhbGxiYWNrSWZOdWxsaXNoT3JCbGFuayhzaWduYWxTcGVjaWZpY0luc2VjdXJlVmFsdWUsIG5vblNpZ25hbFNwZWNpZmljSW5zZWN1cmVWYWx1ZSkgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiByZWFkRmlsZUZyb21FbnYoc2lnbmFsU3BlY2lmaWNFbnZWYXIsIG5vblNpZ25hbFNwZWNpZmljRW52VmFyLCB3YXJuaW5nTWVzc2FnZSkge1xuICAgIGNvbnN0IHNpZ25hbFNwZWNpZmljUGF0aCA9IHByb2Nlc3MuZW52W3NpZ25hbFNwZWNpZmljRW52VmFyXT8udHJpbSgpO1xuICAgIGNvbnN0IG5vblNpZ25hbFNwZWNpZmljUGF0aCA9IHByb2Nlc3MuZW52W25vblNpZ25hbFNwZWNpZmljRW52VmFyXT8udHJpbSgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gZmFsbGJhY2tJZk51bGxpc2hPckJsYW5rKHNpZ25hbFNwZWNpZmljUGF0aCwgbm9uU2lnbmFsU3BlY2lmaWNQYXRoKTtcbiAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4od2FybmluZ01lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRDbGllbnRDZXJ0aWZpY2F0ZUZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIHJldHVybiByZWFkRmlsZUZyb21FbnYoYE9URUxfRVhQT1JURVJfT1RMUF8ke3NpZ25hbElkZW50aWZpZXJ9X0NMSUVOVF9DRVJUSUZJQ0FURWAsICdPVEVMX0VYUE9SVEVSX09UTFBfQ0xJRU5UX0NFUlRJRklDQVRFJywgJ0ZhaWxlZCB0byByZWFkIGNsaWVudCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlJyk7XG59XG5mdW5jdGlvbiBnZXRDbGllbnRLZXlGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gcmVhZEZpbGVGcm9tRW52KGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9DTElFTlRfS0VZYCwgJ09URUxfRVhQT1JURVJfT1RMUF9DTElFTlRfS0VZJywgJ0ZhaWxlZCB0byByZWFkIGNsaWVudCBjZXJ0aWZpY2F0ZSBwcml2YXRlIGtleSBmaWxlJyk7XG59XG5mdW5jdGlvbiBnZXRSb290Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gcmVhZEZpbGVGcm9tRW52KGBPVEVMX0VYUE9SVEVSX09UTFBfJHtzaWduYWxJZGVudGlmaWVyfV9DRVJUSUZJQ0FURWAsICdPVEVMX0VYUE9SVEVSX09UTFBfQ0VSVElGSUNBVEUnLCAnRmFpbGVkIHRvIHJlYWQgcm9vdCBjZXJ0aWZpY2F0ZSBmaWxlJyk7XG59XG5mdW5jdGlvbiBnZXRDcmVkZW50aWFsc0Zyb21FbnZJZ25vcmVJbnNlY3VyZShzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgY2xpZW50S2V5ID0gZ2V0Q2xpZW50S2V5RnJvbUVudihzaWduYWxJZGVudGlmaWVyKTtcbiAgICBjb25zdCBjbGllbnRDZXJ0aWZpY2F0ZSA9IGdldENsaWVudENlcnRpZmljYXRlRnJvbUVudihzaWduYWxJZGVudGlmaWVyKTtcbiAgICBjb25zdCByb290Q2VydGlmaWNhdGUgPSBnZXRSb290Q2VydGlmaWNhdGVGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpO1xuICAgIC8vIGlmIHRoZSBjaGFpbiBpcyBub3QgaW50YWN0LCBAZ3JwYy9ncnBjLWpzIHdpbGwgdGhyb3cuIFRoaXMgaXMgZmluZSB3aGVuIGEgdXNlciBwcm92aWRlcyBpdCBpbiBjb2RlLCBidXQgZW52IHZhclxuICAgIC8vIGNvbmZpZyBpcyBub3QgYWxsb3dlZCB0byB0aHJvdywgc28gd2UgYWRkIHRoaXMgc2FmZWd1YXJkIGFuZCB0cnkgdG8gbWFrZSB0aGUgYmVzdCBvZiBpdCBoZXJlLlxuICAgIGNvbnN0IGNsaWVudENoYWluSW50YWN0ID0gY2xpZW50S2V5ICE9IG51bGwgJiYgY2xpZW50Q2VydGlmaWNhdGUgIT0gbnVsbDtcbiAgICBpZiAocm9vdENlcnRpZmljYXRlICE9IG51bGwgJiYgIWNsaWVudENoYWluSW50YWN0KSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignQ2xpZW50IGtleSBhbmQgY2VydGlmaWNhdGUgbXVzdCBib3RoIGJlIHByb3ZpZGVkLCBidXQgb25lIHdhcyBtaXNzaW5nIC0gYXR0ZW1wdGluZyB0byBjcmVhdGUgY3JlZGVudGlhbHMgZnJvbSBqdXN0IHRoZSByb290IGNlcnRpZmljYXRlJyk7XG4gICAgICAgIHJldHVybiAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVTc2xDcmVkZW50aWFscykoZ2V0Um9vdENlcnRpZmljYXRlRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVTc2xDcmVkZW50aWFscykocm9vdENlcnRpZmljYXRlLCBjbGllbnRLZXksIGNsaWVudENlcnRpZmljYXRlKTtcbn1cbmZ1bmN0aW9uIGdldENyZWRlbnRpYWxzRnJvbUVudihzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgaWYgKGdldEluc2VjdXJlU2V0dGluZ0Zyb21FbnYoc2lnbmFsSWRlbnRpZmllcikpIHtcbiAgICAgICAgcmV0dXJuICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUluc2VjdXJlQ3JlZGVudGlhbHMpKCk7XG4gICAgfVxuICAgIHJldHVybiBnZXRDcmVkZW50aWFsc0Zyb21FbnZJZ25vcmVJbnNlY3VyZShzaWduYWxJZGVudGlmaWVyKTtcbn1cbmZ1bmN0aW9uIGdldE90bHBHcnBjQ29uZmlndXJhdGlvbkZyb21FbnYoc2lnbmFsSWRlbnRpZmllcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLigwLCBub2RlX2h0dHBfMS5nZXRTaGFyZWRDb25maWd1cmF0aW9uRnJvbUVudmlyb25tZW50KShzaWduYWxJZGVudGlmaWVyKSxcbiAgICAgICAgbWV0YWRhdGE6IGdldE1ldGFkYXRhUHJvdmlkZXJGcm9tRW52KHNpZ25hbElkZW50aWZpZXIpLFxuICAgICAgICB1cmw6IGdldFVybEZyb21FbnYoc2lnbmFsSWRlbnRpZmllciksXG4gICAgICAgIGNyZWRlbnRpYWxzOiAoZmluYWxSZXNvbHZlZFVybCkgPT4ge1xuICAgICAgICAgICAgLy8gQWx3YXlzIGFzc3VtZSBpbnNlY3VyZSBvbiBodHRwOi8vIGFuZCBzZWN1cmUgb24gaHR0cHM6Ly8sIHRoZSBwcm90b2NvbCBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBpbnNlY3VyZSBzZXR0aW5nLlxuICAgICAgICAgICAgLy8gbm90ZTogdGhlIHNwZWMgZG9lcyBub3QgbWFrZSBhbnkgZXhjZXB0aW9uIGZvclxuICAgICAgICAgICAgLy8gLSBcImxvY2FsaG9zdDo0MzE3XCIuIElmIHRoZSBwcm90b2NvbCBpcyBvbWl0dGVkLCBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQgdW5sZXNzIGluc2VjdXJlIGlzIHNldFxuICAgICAgICAgICAgLy8gLSBcInVuaXg6Ly9cIiwgYXMgaXQncyBuZWl0aGVyIGh0dHA6Ly8gbm9yIGh0dHBzOi8vIGFuZCB0aGVyZWZvcmUgY3JlZGVudGlhbHMgYXJlIHJlcXVpcmVkIHVubGVzcyBpbnNlY3VyZSBpcyBzZXRcbiAgICAgICAgICAgIGlmIChmaW5hbFJlc29sdmVkVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgZ3JwY19leHBvcnRlcl90cmFuc3BvcnRfMS5jcmVhdGVJbnNlY3VyZUNyZWRlbnRpYWxzKSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaW5hbFJlc29sdmVkVXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q3JlZGVudGlhbHNGcm9tRW52SWdub3JlSW5zZWN1cmUoc2lnbmFsSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRlZmVyIHRvIGVudiBzZXR0aW5ncyBpbiB0aGlzIGNhc2VcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldENyZWRlbnRpYWxzRnJvbUVudihzaWduYWxJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0T3RscEdycGNDb25maWd1cmF0aW9uRnJvbUVudiA9IGdldE90bHBHcnBjQ29uZmlndXJhdGlvbkZyb21FbnY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLWdycGMtZW52LWNvbmZpZ3VyYXRpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IG90bHBfZ3JwY19jb25maWd1cmF0aW9uXzEgPSByZXF1aXJlKFwiLi9vdGxwLWdycGMtY29uZmlndXJhdGlvblwiKTtcbmNvbnN0IGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEgPSByZXF1aXJlKFwiLi4vZ3JwYy1leHBvcnRlci10cmFuc3BvcnRcIik7XG5jb25zdCBvdGxwX2dycGNfZW52X2NvbmZpZ3VyYXRpb25fMSA9IHJlcXVpcmUoXCIuL290bHAtZ3JwYy1lbnYtY29uZmlndXJhdGlvblwiKTtcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIEBwYXJhbSBjb25maWdcbiAqIEBwYXJhbSBzaWduYWxJZGVudGlmaWVyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMZWdhY3lPdGxwR3JwY09wdGlvbnMoY29uZmlnLCBzaWduYWxJZGVudGlmaWVyKSB7XG4gICAgaWYgKGNvbmZpZy5oZWFkZXJzKSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignSGVhZGVycyBjYW5ub3QgYmUgc2V0IHdoZW4gdXNpbmcgZ3JwYycpO1xuICAgIH1cbiAgICAvLyBrZWVwIGNyZWRlbnRpYWxzIGxvY2FsbHkgaW4gY2FzZSB1c2VyIHVwZGF0ZXMgdGhlIHJlZmVyZW5jZSBvbiB0aGUgY29uZmlnIG9iamVjdFxuICAgIGNvbnN0IHVzZXJQcm92aWRlZENyZWRlbnRpYWxzID0gY29uZmlnLmNyZWRlbnRpYWxzO1xuICAgIHJldHVybiAoMCwgb3RscF9ncnBjX2NvbmZpZ3VyYXRpb25fMS5tZXJnZU90bHBHcnBjQ29uZmlndXJhdGlvbldpdGhEZWZhdWx0cykoe1xuICAgICAgICB1cmw6IGNvbmZpZy51cmwsXG4gICAgICAgIG1ldGFkYXRhOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBtZXRhZGF0YSByZXNvbHV0aW9uIHN0cmF0ZWd5IGlzIG1lcmdlLCBzbyB3ZSBjYW4gcmV0dXJuIGVtcHR5IGhlcmUsIGFuZCBpdCB3aWxsIG5vdCBvdmVycmlkZSB0aGUgcmVzdCBvZiB0aGUgc2V0dGluZ3MuXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLm1ldGFkYXRhID8/ICgwLCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xLmNyZWF0ZUVtcHR5TWV0YWRhdGEpKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXByZXNzaW9uOiBjb25maWcuY29tcHJlc3Npb24sXG4gICAgICAgIHRpbWVvdXRNaWxsaXM6IGNvbmZpZy50aW1lb3V0TWlsbGlzLFxuICAgICAgICBjb25jdXJyZW5jeUxpbWl0OiBjb25maWcuY29uY3VycmVuY3lMaW1pdCxcbiAgICAgICAgY3JlZGVudGlhbHM6IHVzZXJQcm92aWRlZENyZWRlbnRpYWxzICE9IG51bGxcbiAgICAgICAgICAgID8gKCkgPT4gdXNlclByb3ZpZGVkQ3JlZGVudGlhbHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sICgwLCBvdGxwX2dycGNfZW52X2NvbmZpZ3VyYXRpb25fMS5nZXRPdGxwR3JwY0NvbmZpZ3VyYXRpb25Gcm9tRW52KShzaWduYWxJZGVudGlmaWVyKSwgKDAsIG90bHBfZ3JwY19jb25maWd1cmF0aW9uXzEuZ2V0T3RscEdycGNEZWZhdWx0Q29uZmlndXJhdGlvbikoKSk7XG59XG5leHBvcnRzLmNvbnZlcnRMZWdhY3lPdGxwR3JwY09wdGlvbnMgPSBjb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udmVydC1sZWdhY3ktb3RscC1ncnBjLW9wdGlvbnMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZU90bHBHcnBjRXhwb3J0RGVsZWdhdGUgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBncnBjX2V4cG9ydGVyX3RyYW5zcG9ydF8xID0gcmVxdWlyZShcIi4vZ3JwYy1leHBvcnRlci10cmFuc3BvcnRcIik7XG5mdW5jdGlvbiBjcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlKG9wdGlvbnMsIHNlcmlhbGl6ZXIsIGdycGNOYW1lLCBncnBjUGF0aCkge1xuICAgIHJldHVybiAoMCwgb3RscF9leHBvcnRlcl9iYXNlXzEuY3JlYXRlT3RscE5ldHdvcmtFeHBvcnREZWxlZ2F0ZSkob3B0aW9ucywgc2VyaWFsaXplciwgKDAsIGdycGNfZXhwb3J0ZXJfdHJhbnNwb3J0XzEuY3JlYXRlT3RscEdycGNFeHBvcnRlclRyYW5zcG9ydCkoe1xuICAgICAgICBhZGRyZXNzOiBvcHRpb25zLnVybCxcbiAgICAgICAgY29tcHJlc3Npb246IG9wdGlvbnMuY29tcHJlc3Npb24sXG4gICAgICAgIGNyZWRlbnRpYWxzOiBvcHRpb25zLmNyZWRlbnRpYWxzLFxuICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgICAgZ3JwY05hbWUsXG4gICAgICAgIGdycGNQYXRoLFxuICAgIH0pKTtcbn1cbmV4cG9ydHMuY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZSA9IGNyZWF0ZU90bHBHcnBjRXhwb3J0RGVsZWdhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vdGxwLWdycGMtZXhwb3J0LWRlbGVnYXRlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlID0gZXhwb3J0cy5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zID0gdm9pZCAwO1xudmFyIGNvbnZlcnRfbGVnYWN5X290bHBfZ3JwY19vcHRpb25zXzEgPSByZXF1aXJlKFwiLi9jb25maWd1cmF0aW9uL2NvbnZlcnQtbGVnYWN5LW90bHAtZ3JwYy1vcHRpb25zXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29udmVydExlZ2FjeU90bHBHcnBjT3B0aW9uc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29udmVydF9sZWdhY3lfb3RscF9ncnBjX29wdGlvbnNfMS5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zOyB9IH0pO1xudmFyIG90bHBfZ3JwY19leHBvcnRfZGVsZWdhdGVfMSA9IHJlcXVpcmUoXCIuL290bHAtZ3JwYy1leHBvcnQtZGVsZWdhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBvdGxwX2dycGNfZXhwb3J0X2RlbGVnYXRlXzEuY3JlYXRlT3RscEdycGNFeHBvcnREZWxlZ2F0ZTsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2dycGNfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZ3JwYy1leHBvcnRlci1iYXNlXCIpO1xuY29uc3Qgb3RscF90cmFuc2Zvcm1lcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXJcIik7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG4vKipcbiAqIE9UTFAgTG9ncyBFeHBvcnRlciBmb3IgTm9kZVxuICovXG5jbGFzcyBPVExQTG9nRXhwb3J0ZXIgZXh0ZW5kcyBvdGxwX2V4cG9ydGVyX2Jhc2VfMS5PVExQRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcigoMCwgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMS5jcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlKSgoMCwgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMS5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zKShjb25maWcsICdMT0dTJyksIG90bHBfdHJhbnNmb3JtZXJfMS5Qcm90b2J1ZkxvZ3NTZXJpYWxpemVyLCAnTG9nc0V4cG9ydFNlcnZpY2UnLCAnL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLmxvZ3MudjEuTG9nc1NlcnZpY2UvRXhwb3J0JykpO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gT1RMUExvZ0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T1RMUExvZ0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUExvZ0V4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9PVExQTG9nRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTG9nRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBMb2dFeHBvcnRlcl8xLk9UTFBMb2dFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WRVJTSU9OID0gdm9pZCAwO1xuLy8gdGhpcyBpcyBhdXRvZ2VuZXJhdGVkIGZpbGUsIHNlZSBzY3JpcHRzL3ZlcnNpb24tdXBkYXRlLmpzXG5leHBvcnRzLlZFUlNJT04gPSAnMC4yMDMuMCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbmNvbnN0IG5vZGVfaHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9ub2RlLWh0dHBcIik7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi4vLi4vdmVyc2lvblwiKTtcbi8qKlxuICogT1RMUCBMb2cgUHJvdG9idWYgRXhwb3J0ZXIgZm9yIE5vZGUuanNcbiAqL1xuY2xhc3MgT1RMUExvZ0V4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZywgJ0xPR1MnLCAndjEvbG9ncycsIHtcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogYE9UZWwtT1RMUC1FeHBvcnRlci1KYXZhU2NyaXB0LyR7dmVyc2lvbl8xLlZFUlNJT059YCxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC1wcm90b2J1ZicsXG4gICAgICAgIH0pLCBvdGxwX3RyYW5zZm9ybWVyXzEuUHJvdG9idWZMb2dzU2VyaWFsaXplcikpO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUExvZ0V4cG9ydGVyID0gT1RMUExvZ0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T1RMUExvZ0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTG9nRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUExvZ0V4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9PVExQTG9nRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTG9nRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBMb2dFeHBvcnRlcl8xLk9UTFBMb2dFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBMb2dFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLk9UTFBMb2dFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBMb2dFeHBvcnRlciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUExvZ0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLk9UTFBMb2dFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZSA9IHZvaWQgMDtcbnZhciBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZTtcbihmdW5jdGlvbiAoQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2UpIHtcbiAgICBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVtBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVtcIkRFTFRBXCJdID0gMF0gPSBcIkRFTFRBXCI7XG4gICAgQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2VbQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2VbXCJDVU1VTEFUSVZFXCJdID0gMV0gPSBcIkNVTVVMQVRJVkVcIjtcbiAgICBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVtBZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZVtcIkxPV01FTU9SWVwiXSA9IDJdID0gXCJMT1dNRU1PUllcIjtcbn0pKEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlID0gZXhwb3J0cy5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZSB8fCAoZXhwb3J0cy5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTWV0cmljRXhwb3J0ZXJPcHRpb25zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXJCYXNlID0gZXhwb3J0cy5Mb3dNZW1vcnlUZW1wb3JhbGl0eVNlbGVjdG9yID0gZXhwb3J0cy5EZWx0YVRlbXBvcmFsaXR5U2VsZWN0b3IgPSBleHBvcnRzLkN1bXVsYXRpdmVUZW1wb3JhbGl0eVNlbGVjdG9yID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBzZGtfbWV0cmljc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay1tZXRyaWNzXCIpO1xuY29uc3QgT1RMUE1ldHJpY0V4cG9ydGVyT3B0aW9uc18xID0gcmVxdWlyZShcIi4vT1RMUE1ldHJpY0V4cG9ydGVyT3B0aW9uc1wiKTtcbmNvbnN0IG90bHBfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZVwiKTtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IEN1bXVsYXRpdmVUZW1wb3JhbGl0eVNlbGVjdG9yID0gKCkgPT4gc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkNVTVVMQVRJVkU7XG5leHBvcnRzLkN1bXVsYXRpdmVUZW1wb3JhbGl0eVNlbGVjdG9yID0gQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3I7XG5jb25zdCBEZWx0YVRlbXBvcmFsaXR5U2VsZWN0b3IgPSAoaW5zdHJ1bWVudFR5cGUpID0+IHtcbiAgICBzd2l0Y2ggKGluc3RydW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5DT1VOVEVSOlxuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9DT1VOVEVSOlxuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuR0FVR0U6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5ISVNUT0dSQU06XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFOlxuICAgICAgICAgICAgcmV0dXJuIHNka19tZXRyaWNzXzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5ERUxUQTtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLlVQX0RPV05fQ09VTlRFUjpcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLk9CU0VSVkFCTEVfVVBfRE9XTl9DT1VOVEVSOlxuICAgICAgICAgICAgcmV0dXJuIHNka19tZXRyaWNzXzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5DVU1VTEFUSVZFO1xuICAgIH1cbn07XG5leHBvcnRzLkRlbHRhVGVtcG9yYWxpdHlTZWxlY3RvciA9IERlbHRhVGVtcG9yYWxpdHlTZWxlY3RvcjtcbmNvbnN0IExvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3IgPSAoaW5zdHJ1bWVudFR5cGUpID0+IHtcbiAgICBzd2l0Y2ggKGluc3RydW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5DT1VOVEVSOlxuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuSElTVE9HUkFNOlxuICAgICAgICAgICAgcmV0dXJuIHNka19tZXRyaWNzXzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5ERUxUQTtcbiAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkluc3RydW1lbnRUeXBlLkdBVUdFOlxuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuVVBfRE9XTl9DT1VOVEVSOlxuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuSW5zdHJ1bWVudFR5cGUuT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVI6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0NPVU5URVI6XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5JbnN0cnVtZW50VHlwZS5PQlNFUlZBQkxFX0dBVUdFOlxuICAgICAgICAgICAgcmV0dXJuIHNka19tZXRyaWNzXzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5DVU1VTEFUSVZFO1xuICAgIH1cbn07XG5leHBvcnRzLkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3IgPSBMb3dNZW1vcnlUZW1wb3JhbGl0eVNlbGVjdG9yO1xuZnVuY3Rpb24gY2hvb3NlVGVtcG9yYWxpdHlTZWxlY3RvckZyb21FbnZpcm9ubWVudCgpIHtcbiAgICBjb25zdCBjb25maWd1cmVkVGVtcG9yYWxpdHkgPSAoKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KSgnT1RFTF9FWFBPUlRFUl9PVExQX01FVFJJQ1NfVEVNUE9SQUxJVFlfUFJFRkVSRU5DRScpID8/XG4gICAgICAgICdjdW11bGF0aXZlJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29uZmlndXJlZFRlbXBvcmFsaXR5ID09PSAnY3VtdWxhdGl2ZScpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3I7XG4gICAgfVxuICAgIGlmIChjb25maWd1cmVkVGVtcG9yYWxpdHkgPT09ICdkZWx0YScpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuRGVsdGFUZW1wb3JhbGl0eVNlbGVjdG9yO1xuICAgIH1cbiAgICBpZiAoY29uZmlndXJlZFRlbXBvcmFsaXR5ID09PSAnbG93bWVtb3J5Jykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5Mb3dNZW1vcnlUZW1wb3JhbGl0eVNlbGVjdG9yO1xuICAgIH1cbiAgICBhcGlfMS5kaWFnLndhcm4oYE9URUxfRVhQT1JURVJfT1RMUF9NRVRSSUNTX1RFTVBPUkFMSVRZX1BSRUZFUkVOQ0UgaXMgc2V0IHRvICcke2NvbmZpZ3VyZWRUZW1wb3JhbGl0eX0nLCBidXQgb25seSAnY3VtdWxhdGl2ZScgYW5kICdkZWx0YScgYXJlIGFsbG93ZWQuIFVzaW5nIGRlZmF1bHQgKCdjdW11bGF0aXZlJykgaW5zdGVhZC5gKTtcbiAgICByZXR1cm4gZXhwb3J0cy5DdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3Rvcjtcbn1cbmZ1bmN0aW9uIGNob29zZVRlbXBvcmFsaXR5U2VsZWN0b3IodGVtcG9yYWxpdHlQcmVmZXJlbmNlKSB7XG4gICAgLy8gRGlyZWN0bHkgcGFzc2VkIHByZWZlcmVuY2UgaGFzIHByaW9yaXR5LlxuICAgIGlmICh0ZW1wb3JhbGl0eVByZWZlcmVuY2UgIT0gbnVsbCkge1xuICAgICAgICBpZiAodGVtcG9yYWxpdHlQcmVmZXJlbmNlID09PSBPVExQTWV0cmljRXhwb3J0ZXJPcHRpb25zXzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2UuREVMVEEpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkRlbHRhVGVtcG9yYWxpdHlTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZW1wb3JhbGl0eVByZWZlcmVuY2UgPT09IE9UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnNfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZS5MT1dNRU1PUlkpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBjaG9vc2VUZW1wb3JhbGl0eVNlbGVjdG9yRnJvbUVudmlyb25tZW50KCk7XG59XG5jb25zdCBERUZBVUxUX0FHR1JFR0FUSU9OID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgdHlwZTogc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblR5cGUuREVGQVVMVCxcbn0pO1xuZnVuY3Rpb24gY2hvb3NlQWdncmVnYXRpb25TZWxlY3Rvcihjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnPy5hZ2dyZWdhdGlvblByZWZlcmVuY2UgPz8gKCgpID0+IERFRkFVTFRfQUdHUkVHQVRJT04pO1xufVxuY2xhc3MgT1RMUE1ldHJpY0V4cG9ydGVyQmFzZSBleHRlbmRzIG90bHBfZXhwb3J0ZXJfYmFzZV8xLk9UTFBFeHBvcnRlckJhc2Uge1xuICAgIF9hZ2dyZWdhdGlvblRlbXBvcmFsaXR5U2VsZWN0b3I7XG4gICAgX2FnZ3JlZ2F0aW9uU2VsZWN0b3I7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGNvbmZpZykge1xuICAgICAgICBzdXBlcihkZWxlZ2F0ZSk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uU2VsZWN0b3IgPSBjaG9vc2VBZ2dyZWdhdGlvblNlbGVjdG9yKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvciA9IGNob29zZVRlbXBvcmFsaXR5U2VsZWN0b3IoY29uZmlnPy50ZW1wb3JhbGl0eVByZWZlcmVuY2UpO1xuICAgIH1cbiAgICBzZWxlY3RBZ2dyZWdhdGlvbihpbnN0cnVtZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRpb25TZWxlY3RvcihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxuICAgIHNlbGVjdEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHkoaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcihpbnN0cnVtZW50VHlwZSk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXJCYXNlID0gT1RMUE1ldHJpY0V4cG9ydGVyQmFzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBNZXRyaWNFeHBvcnRlckJhc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuVkVSU0lPTiA9ICcwLjIwMy4wJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IE9UTFBNZXRyaWNFeHBvcnRlckJhc2VfMSA9IHJlcXVpcmUoXCIuLi8uLi9PVExQTWV0cmljRXhwb3J0ZXJCYXNlXCIpO1xuY29uc3Qgb3RscF90cmFuc2Zvcm1lcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXJcIik7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi4vLi4vdmVyc2lvblwiKTtcbmNvbnN0IG5vZGVfaHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZXhwb3J0ZXItYmFzZS9ub2RlLWh0dHBcIik7XG5jb25zdCBVU0VSX0FHRU5UID0ge1xuICAgICdVc2VyLUFnZW50JzogYE9UZWwtT1RMUC1FeHBvcnRlci1KYXZhU2NyaXB0LyR7dmVyc2lvbl8xLlZFUlNJT059YCxcbn07XG4vKipcbiAqIE9UTFAgTWV0cmljIEV4cG9ydGVyIGZvciBOb2RlLmpzXG4gKi9cbmNsYXNzIE9UTFBNZXRyaWNFeHBvcnRlciBleHRlbmRzIE9UTFBNZXRyaWNFeHBvcnRlckJhc2VfMS5PVExQTWV0cmljRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZyA/PyB7fSwgJ01FVFJJQ1MnLCAndjEvbWV0cmljcycsIHtcbiAgICAgICAgICAgIC4uLlVTRVJfQUdFTlQsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9KSwgb3RscF90cmFuc2Zvcm1lcl8xLkpzb25NZXRyaWNzU2VyaWFsaXplciksIGNvbmZpZyk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSBPVExQTWV0cmljRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTWV0cmljRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQTWV0cmljRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBNZXRyaWNFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBNZXRyaWNFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBub2RlXzEgPSByZXF1aXJlKFwiLi9ub2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUE1ldHJpY0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlckJhc2UgPSBleHBvcnRzLkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3IgPSBleHBvcnRzLkRlbHRhVGVtcG9yYWxpdHlTZWxlY3RvciA9IGV4cG9ydHMuQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3IgPSBleHBvcnRzLkFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlQcmVmZXJlbmNlID0gZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUE1ldHJpY0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLk9UTFBNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbnZhciBPVExQTWV0cmljRXhwb3J0ZXJPcHRpb25zXzEgPSByZXF1aXJlKFwiLi9PVExQTWV0cmljRXhwb3J0ZXJPcHRpb25zXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWdncmVnYXRpb25UZW1wb3JhbGl0eVByZWZlcmVuY2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBNZXRyaWNFeHBvcnRlck9wdGlvbnNfMS5BZ2dyZWdhdGlvblRlbXBvcmFsaXR5UHJlZmVyZW5jZTsgfSB9KTtcbnZhciBPVExQTWV0cmljRXhwb3J0ZXJCYXNlXzEgPSByZXF1aXJlKFwiLi9PVExQTWV0cmljRXhwb3J0ZXJCYXNlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ3VtdWxhdGl2ZVRlbXBvcmFsaXR5U2VsZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBNZXRyaWNFeHBvcnRlckJhc2VfMS5DdW11bGF0aXZlVGVtcG9yYWxpdHlTZWxlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRlbHRhVGVtcG9yYWxpdHlTZWxlY3RvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyQmFzZV8xLkRlbHRhVGVtcG9yYWxpdHlTZWxlY3RvcjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxvd01lbW9yeVRlbXBvcmFsaXR5U2VsZWN0b3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBNZXRyaWNFeHBvcnRlckJhc2VfMS5Mb3dNZW1vcnlUZW1wb3JhbGl0eVNlbGVjdG9yOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUE1ldHJpY0V4cG9ydGVyQmFzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyQmFzZV8xLk9UTFBNZXRyaWNFeHBvcnRlckJhc2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgZXhwb3J0ZXJfbWV0cmljc19vdGxwX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cFwiKTtcbmNvbnN0IG90bHBfZ3JwY19leHBvcnRlcl9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1ncnBjLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbi8qKlxuICogT1RMUC1nUlBDIG1ldHJpYyBleHBvcnRlclxuICovXG5jbGFzcyBPVExQTWV0cmljRXhwb3J0ZXIgZXh0ZW5kcyBleHBvcnRlcl9tZXRyaWNzX290bHBfaHR0cF8xLk9UTFBNZXRyaWNFeHBvcnRlckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICBzdXBlcigoMCwgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMS5jcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlKSgoMCwgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMS5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zKShjb25maWcgPz8ge30sICdNRVRSSUNTJyksIG90bHBfdHJhbnNmb3JtZXJfMS5Qcm90b2J1Zk1ldHJpY3NTZXJpYWxpemVyLCAnTWV0cmljc0V4cG9ydFNlcnZpY2UnLCAnL29wZW50ZWxlbWV0cnkucHJvdG8uY29sbGVjdG9yLm1ldHJpY3MudjEuTWV0cmljc1NlcnZpY2UvRXhwb3J0JyksIGNvbmZpZyk7XG4gICAgfVxufVxuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSBPVExQTWV0cmljRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQTWV0cmljRXhwb3J0ZXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQTWV0cmljRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBNZXRyaWNFeHBvcnRlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBNZXRyaWNFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUE1ldHJpY0V4cG9ydGVyXzEuT1RMUE1ldHJpY0V4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbmV4cG9ydHMuVkVSU0lPTiA9ICcwLjIwMy4wJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UTFBNZXRyaWNFeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IGV4cG9ydGVyX21ldHJpY3Nfb3RscF9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLWh0dHBcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuLi8uLi92ZXJzaW9uXCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbmNsYXNzIE9UTFBNZXRyaWNFeHBvcnRlciBleHRlbmRzIGV4cG9ydGVyX21ldHJpY3Nfb3RscF9odHRwXzEuT1RMUE1ldHJpY0V4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHN1cGVyKCgwLCBub2RlX2h0dHBfMS5jcmVhdGVPdGxwSHR0cEV4cG9ydERlbGVnYXRlKSgoMCwgbm9kZV9odHRwXzEuY29udmVydExlZ2FjeUh0dHBPcHRpb25zKShjb25maWcgPz8ge30sICdNRVRSSUNTJywgJ3YxL21ldHJpY3MnLCB7XG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IGBPVGVsLU9UTFAtRXhwb3J0ZXItSmF2YVNjcmlwdC8ke3ZlcnNpb25fMS5WRVJTSU9OfWAsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtcHJvdG9idWYnLFxuICAgICAgICB9KSwgb3RscF90cmFuc2Zvcm1lcl8xLlByb3RvYnVmTWV0cmljc1NlcmlhbGl6ZXIpLCBjb25maWcpO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUE1ldHJpY0V4cG9ydGVyID0gT1RMUE1ldHJpY0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T1RMUE1ldHJpY0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUE1ldHJpY0V4cG9ydGVyXzEgPSByZXF1aXJlKFwiLi9PVExQTWV0cmljRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQTWV0cmljRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBNZXRyaWNFeHBvcnRlcl8xLk9UTFBNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBNZXRyaWNFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLk9UTFBNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQTWV0cmljRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUE1ldHJpY0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLk9UTFBNZXRyaWNFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9tZXRoZXVzU2VyaWFsaXplciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHNka19tZXRyaWNzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3NcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJykucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xufVxuLyoqXG4gKiBTdHJpbmcgQXR0cmlidXRlIHZhbHVlcyBhcmUgY29udmVydGVkIGRpcmVjdGx5IHRvIFByb21ldGhldXMgYXR0cmlidXRlIHZhbHVlcy5cbiAqIE5vbi1zdHJpbmcgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBKU09OLWVuY29kZWQgc3RyaW5ncy5cbiAqXG4gKiBgdW5kZWZpbmVkYCBpcyBjb252ZXJ0ZWQgdG8gYW4gZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVBdHRyaWJ1dGVWYWx1ZShzdHIgPSAnJykge1xuICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShzdHIpO1xuICAgIH1cbiAgICByZXR1cm4gZXNjYXBlU3RyaW5nKHN0cikucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpO1xufVxuY29uc3QgaW52YWxpZENoYXJhY3RlclJlZ2V4ID0gL1teYS16MC05X10vZ2k7XG5jb25zdCBtdWx0aXBsZVVuZGVyc2NvcmVSZWdleCA9IC9fezIsfS9nO1xuLyoqXG4gKiBFbnN1cmVzIG1ldHJpYyBuYW1lcyBhcmUgdmFsaWQgUHJvbWV0aGV1cyBtZXRyaWMgbmFtZXMgYnkgcmVtb3ZpbmdcbiAqIGNoYXJhY3RlcnMgYWxsb3dlZCBieSBPcGVuVGVsZW1ldHJ5IGJ1dCBkaXNhbGxvd2VkIGJ5IFByb21ldGhldXMuXG4gKlxuICogaHR0cHM6Ly9wcm9tZXRoZXVzLmlvL2RvY3MvY29uY2VwdHMvZGF0YV9tb2RlbC8jbWV0cmljLW5hbWVzLWFuZC1hdHRyaWJ1dGVzXG4gKlxuICogMS4gTmFtZXMgbXVzdCBtYXRjaCBgW2EtekEtWl86XVthLXpBLVowLTlfOl0qYFxuICpcbiAqIDIuIENvbG9ucyBhcmUgcmVzZXJ2ZWQgZm9yIHVzZXIgZGVmaW5lZCByZWNvcmRpbmcgcnVsZXMuXG4gKiBUaGV5IHNob3VsZCBub3QgYmUgdXNlZCBieSBleHBvcnRlcnMgb3IgZGlyZWN0IGluc3RydW1lbnRhdGlvbi5cbiAqXG4gKiBPcGVuVGVsZW1ldHJ5IG1ldHJpYyBuYW1lcyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gdGhlIE1ldGVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCxcbiAqIGFuZCB0aGV5IG1hdGNoIHRoZSBmb3JtYXQgYFthLXpBLVpdW2EtekEtWjAtOV8uXFwtXSpgIHdoaWNoIGlzIHZlcnkgY2xvc2UgdG8gYSB2YWxpZFxuICogcHJvbWV0aGV1cyBtZXRyaWMgbmFtZSwgc28gd2Ugb25seSBuZWVkIHRvIHN0cmlwIGNoYXJhY3RlcnMgdmFsaWQgaW4gT3BlblRlbGVtZXRyeVxuICogYnV0IG5vdCB2YWxpZCBpbiBwcm9tZXRoZXVzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCAnXycuXG4gKlxuICogQHBhcmFtIG5hbWUgbmFtZSB0byBiZSBzYW5pdGl6ZWRcbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVQcm9tZXRoZXVzTWV0cmljTmFtZShuYW1lKSB7XG4gICAgLy8gcmVwbGFjZSBhbGwgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggJ18nXG4gICAgcmV0dXJuIG5hbWVcbiAgICAgICAgLnJlcGxhY2UoaW52YWxpZENoYXJhY3RlclJlZ2V4LCAnXycpXG4gICAgICAgIC5yZXBsYWNlKG11bHRpcGxlVW5kZXJzY29yZVJlZ2V4LCAnXycpO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICpcbiAqIEhlbHBlciBtZXRob2Qgd2hpY2ggYXNzaXN0cyBpbiBlbmZvcmNpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyBmb3IgbWV0cmljXG4gKiBuYW1lcyBpbiBQcm9tZXRoZXVzXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgbWV0cmljXG4gKiBAcGFyYW0gdHlwZSB0aGUga2luZCBvZiBtZXRyaWNcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlbmZvcmNlUHJvbWV0aGV1c05hbWluZ0NvbnZlbnRpb24obmFtZSwgZGF0YSkge1xuICAgIC8vIFByb21ldGhldXMgcmVxdWlyZXMgdGhhdCBtZXRyaWNzIG9mIHRoZSBDb3VudGVyIGtpbmQgaGF2ZSBcIl90b3RhbFwiIHN1ZmZpeFxuICAgIGlmICghbmFtZS5lbmRzV2l0aCgnX3RvdGFsJykgJiZcbiAgICAgICAgZGF0YS5kYXRhUG9pbnRUeXBlID09PSBzZGtfbWV0cmljc18xLkRhdGFQb2ludFR5cGUuU1VNICYmXG4gICAgICAgIGRhdGEuaXNNb25vdG9uaWMpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUgKyAnX3RvdGFsJztcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59XG5mdW5jdGlvbiB2YWx1ZVN0cmluZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuICcrSW5mJztcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gJy1JbmYnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIGZpbml0ZSBudW1iZXJzIGFuZCBOYU4uXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvUHJvbWV0aGV1c1R5cGUobWV0cmljRGF0YSkge1xuICAgIHN3aXRjaCAobWV0cmljRGF0YS5kYXRhUG9pbnRUeXBlKSB7XG4gICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLlNVTTpcbiAgICAgICAgICAgIGlmIChtZXRyaWNEYXRhLmlzTW9ub3RvbmljKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb3VudGVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnZ2F1Z2UnO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5HQVVHRTpcbiAgICAgICAgICAgIHJldHVybiAnZ2F1Z2UnO1xuICAgICAgICBjYXNlIHNka19tZXRyaWNzXzEuRGF0YVBvaW50VHlwZS5ISVNUT0dSQU06XG4gICAgICAgICAgICByZXR1cm4gJ2hpc3RvZ3JhbSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ3VudHlwZWQnO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeShtZXRyaWNOYW1lLCBhdHRyaWJ1dGVzLCB2YWx1ZSwgdGltZXN0YW1wLCBhZGRpdGlvbmFsQXR0cmlidXRlcykge1xuICAgIGxldCBoYXNBdHRyaWJ1dGUgPSBmYWxzZTtcbiAgICBsZXQgYXR0cmlidXRlc1N0ciA9ICcnO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRBdHRyaWJ1dGVOYW1lID0gc2FuaXRpemVQcm9tZXRoZXVzTWV0cmljTmFtZShrZXkpO1xuICAgICAgICBoYXNBdHRyaWJ1dGUgPSB0cnVlO1xuICAgICAgICBhdHRyaWJ1dGVzU3RyICs9IGAke2F0dHJpYnV0ZXNTdHIubGVuZ3RoID4gMCA/ICcsJyA6ICcnfSR7c2FuaXRpemVkQXR0cmlidXRlTmFtZX09XCIke2VzY2FwZUF0dHJpYnV0ZVZhbHVlKHZhbCl9XCJgO1xuICAgIH1cbiAgICBpZiAoYWRkaXRpb25hbEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxBdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgY29uc3Qgc2FuaXRpemVkQXR0cmlidXRlTmFtZSA9IHNhbml0aXplUHJvbWV0aGV1c01ldHJpY05hbWUoa2V5KTtcbiAgICAgICAgICAgIGhhc0F0dHJpYnV0ZSA9IHRydWU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzU3RyICs9IGAke2F0dHJpYnV0ZXNTdHIubGVuZ3RoID4gMCA/ICcsJyA6ICcnfSR7c2FuaXRpemVkQXR0cmlidXRlTmFtZX09XCIke2VzY2FwZUF0dHJpYnV0ZVZhbHVlKHZhbCl9XCJgO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNBdHRyaWJ1dGUpIHtcbiAgICAgICAgbWV0cmljTmFtZSArPSBgeyR7YXR0cmlidXRlc1N0cn19YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke21ldHJpY05hbWV9ICR7dmFsdWVTdHJpbmcodmFsdWUpfSR7dGltZXN0YW1wICE9PSB1bmRlZmluZWQgPyAnICcgKyBTdHJpbmcodGltZXN0YW1wKSA6ICcnfVxcbmA7XG59XG5jb25zdCBOT19SRUdJU1RFUkVEX01FVFJJQ1MgPSAnIyBubyByZWdpc3RlcmVkIG1ldHJpY3MnO1xuY2xhc3MgUHJvbWV0aGV1c1NlcmlhbGl6ZXIge1xuICAgIF9wcmVmaXg7XG4gICAgX2FwcGVuZFRpbWVzdGFtcDtcbiAgICBfYWRkaXRpb25hbEF0dHJpYnV0ZXM7XG4gICAgX3dpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzO1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgYXBwZW5kVGltZXN0YW1wID0gZmFsc2UsIHdpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzKSB7XG4gICAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZWZpeCA9IHByZWZpeCArICdfJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBlbmRUaW1lc3RhbXAgPSBhcHBlbmRUaW1lc3RhbXA7XG4gICAgICAgIHRoaXMuX3dpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzID0gd2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHM7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShyZXNvdXJjZU1ldHJpY3MpIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICB0aGlzLl9hZGRpdGlvbmFsQXR0cmlidXRlcyA9IHRoaXMuX2ZpbHRlclJlc291cmNlQ29uc3RhbnRMYWJlbHMocmVzb3VyY2VNZXRyaWNzLnJlc291cmNlLmF0dHJpYnV0ZXMsIHRoaXMuX3dpdGhSZXNvdXJjZUNvbnN0YW50TGFiZWxzKTtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZU1ldHJpY3Mgb2YgcmVzb3VyY2VNZXRyaWNzLnNjb3BlTWV0cmljcykge1xuICAgICAgICAgICAgc3RyICs9IHRoaXMuX3NlcmlhbGl6ZVNjb3BlTWV0cmljcyhzY29wZU1ldHJpY3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHIgPT09ICcnKSB7XG4gICAgICAgICAgICBzdHIgKz0gTk9fUkVHSVNURVJFRF9NRVRSSUNTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVSZXNvdXJjZShyZXNvdXJjZU1ldHJpY3MucmVzb3VyY2UpICsgc3RyO1xuICAgIH1cbiAgICBfZmlsdGVyUmVzb3VyY2VDb25zdGFudExhYmVscyhhdHRyaWJ1dGVzLCBwYXR0ZXJuKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5tYXRjaChwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEF0dHJpYnV0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfc2VyaWFsaXplU2NvcGVNZXRyaWNzKHNjb3BlTWV0cmljcykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgbWV0cmljIG9mIHNjb3BlTWV0cmljcy5tZXRyaWNzKSB7XG4gICAgICAgICAgICBzdHIgKz0gdGhpcy5fc2VyaWFsaXplTWV0cmljRGF0YShtZXRyaWMpICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgX3NlcmlhbGl6ZU1ldHJpY0RhdGEobWV0cmljRGF0YSkge1xuICAgICAgICBsZXQgbmFtZSA9IHNhbml0aXplUHJvbWV0aGV1c01ldHJpY05hbWUoZXNjYXBlU3RyaW5nKG1ldHJpY0RhdGEuZGVzY3JpcHRvci5uYW1lKSk7XG4gICAgICAgIGlmICh0aGlzLl9wcmVmaXgpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHt0aGlzLl9wcmVmaXh9JHtuYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVBvaW50VHlwZSA9IG1ldHJpY0RhdGEuZGF0YVBvaW50VHlwZTtcbiAgICAgICAgbmFtZSA9IGVuZm9yY2VQcm9tZXRoZXVzTmFtaW5nQ29udmVudGlvbihuYW1lLCBtZXRyaWNEYXRhKTtcbiAgICAgICAgY29uc3QgaGVscCA9IGAjIEhFTFAgJHtuYW1lfSAke2VzY2FwZVN0cmluZyhtZXRyaWNEYXRhLmRlc2NyaXB0b3IuZGVzY3JpcHRpb24gfHwgJ2Rlc2NyaXB0aW9uIG1pc3NpbmcnKX1gO1xuICAgICAgICBjb25zdCB1bml0ID0gbWV0cmljRGF0YS5kZXNjcmlwdG9yLnVuaXRcbiAgICAgICAgICAgID8gYFxcbiMgVU5JVCAke25hbWV9ICR7ZXNjYXBlU3RyaW5nKG1ldHJpY0RhdGEuZGVzY3JpcHRvci51bml0KX1gXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICBjb25zdCB0eXBlID0gYCMgVFlQRSAke25hbWV9ICR7dG9Qcm9tZXRoZXVzVHlwZShtZXRyaWNEYXRhKX1gO1xuICAgICAgICBsZXQgcmVzdWx0cyA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGRhdGFQb2ludFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLlNVTTpcbiAgICAgICAgICAgIGNhc2Ugc2RrX21ldHJpY3NfMS5EYXRhUG9pbnRUeXBlLkdBVUdFOiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IG1ldHJpY0RhdGEuZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAubWFwKGl0ID0+IHRoaXMuX3NlcmlhbGl6ZVNpbmd1bGFyRGF0YVBvaW50KG5hbWUsIG1ldHJpY0RhdGEsIGl0KSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBzZGtfbWV0cmljc18xLkRhdGFQb2ludFR5cGUuSElTVE9HUkFNOiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IG1ldHJpY0RhdGEuZGF0YVBvaW50c1xuICAgICAgICAgICAgICAgICAgICAubWFwKGl0ID0+IHRoaXMuX3NlcmlhbGl6ZUhpc3RvZ3JhbURhdGFQb2ludChuYW1lLCBtZXRyaWNEYXRhLCBpdCkpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGBVbnJlY29nbml6YWJsZSBEYXRhUG9pbnRUeXBlOiAke2RhdGFQb2ludFR5cGV9IGZvciBtZXRyaWMgXCIke25hbWV9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7aGVscH0ke3VuaXR9XFxuJHt0eXBlfVxcbiR7cmVzdWx0c31gLnRyaW0oKTtcbiAgICB9XG4gICAgX3NlcmlhbGl6ZVNpbmd1bGFyRGF0YVBvaW50KG5hbWUsIGRhdGEsIGRhdGFQb2ludCkge1xuICAgICAgICBsZXQgcmVzdWx0cyA9ICcnO1xuICAgICAgICBuYW1lID0gZW5mb3JjZVByb21ldGhldXNOYW1pbmdDb252ZW50aW9uKG5hbWUsIGRhdGEpO1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBhdHRyaWJ1dGVzIH0gPSBkYXRhUG9pbnQ7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWxsaXNlY29uZHMpKGRhdGFQb2ludC5lbmRUaW1lKTtcbiAgICAgICAgcmVzdWx0cyArPSBzdHJpbmdpZnkobmFtZSwgYXR0cmlidXRlcywgdmFsdWUsIHRoaXMuX2FwcGVuZFRpbWVzdGFtcCA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCwgdGhpcy5fYWRkaXRpb25hbEF0dHJpYnV0ZXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgX3NlcmlhbGl6ZUhpc3RvZ3JhbURhdGFQb2ludChuYW1lLCBkYXRhLCBkYXRhUG9pbnQpIHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSAnJztcbiAgICAgICAgbmFtZSA9IGVuZm9yY2VQcm9tZXRoZXVzTmFtaW5nQ29udmVudGlvbihuYW1lLCBkYXRhKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGRhdGFQb2ludC5hdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBoaXN0b2dyYW0gPSBkYXRhUG9pbnQudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9ICgwLCBjb3JlXzEuaHJUaW1lVG9NaWxsaXNlY29uZHMpKGRhdGFQb2ludC5lbmRUaW1lKTtcbiAgICAgICAgLyoqIEhpc3RvZ3JhbVtcImJ1Y2tldFwiXSBpcyBub3QgdHlwZWQgd2l0aCBgbnVtYmVyYCAqL1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ2NvdW50JywgJ3N1bSddKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhpc3RvZ3JhbVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgcmVzdWx0cyArPSBzdHJpbmdpZnkobmFtZSArICdfJyArIGtleSwgYXR0cmlidXRlcywgdmFsdWUsIHRoaXMuX2FwcGVuZFRpbWVzdGFtcCA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCwgdGhpcy5fYWRkaXRpb25hbEF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdW11bGF0aXZlU3VtID0gMDtcbiAgICAgICAgY29uc3QgY291bnRFbnRyaWVzID0gaGlzdG9ncmFtLmJ1Y2tldHMuY291bnRzLmVudHJpZXMoKTtcbiAgICAgICAgbGV0IGluZmluaXRlQm91bmRhcnlEZWZpbmVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2lkeCwgdmFsXSBvZiBjb3VudEVudHJpZXMpIHtcbiAgICAgICAgICAgIGN1bXVsYXRpdmVTdW0gKz0gdmFsO1xuICAgICAgICAgICAgY29uc3QgdXBwZXJCb3VuZCA9IGhpc3RvZ3JhbS5idWNrZXRzLmJvdW5kYXJpZXNbaWR4XTtcbiAgICAgICAgICAgIC8qKiBIaXN0b2dyYW1BZ2dyZWdhdG9yIGlzIHByb2R1Y2luZyBkaWZmZXJlbnQgYm91bmRhcnkgb3V0cHV0IC1cbiAgICAgICAgICAgICAqIGluIG9uZSBjYXNlIG5vdCBpbmNsdWRpbmcgaW5maW5pdHkgdmFsdWVzLCBpbiBvdGhlciAtXG4gICAgICAgICAgICAgKiBmdWxsLCBlLmcuIFswLCAxMDBdIGFuZCBbMCwgMTAwLCBJbmZpbml0eV1cbiAgICAgICAgICAgICAqIHdlIHNob3VsZCBjb25zaWRlciB0aGF0IGluIGV4cG9ydCwgaWYgSW5maW5pdHkgaXMgZGVmaW5lZCwgdXNlIGl0XG4gICAgICAgICAgICAgKiBhcyBib3VuZGFyeVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodXBwZXJCb3VuZCA9PT0gdW5kZWZpbmVkICYmIGluZmluaXRlQm91bmRhcnlEZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXBwZXJCb3VuZCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgICBpbmZpbml0ZUJvdW5kYXJ5RGVmaW5lZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzICs9IHN0cmluZ2lmeShuYW1lICsgJ19idWNrZXQnLCBhdHRyaWJ1dGVzLCBjdW11bGF0aXZlU3VtLCB0aGlzLl9hcHBlbmRUaW1lc3RhbXAgPyB0aW1lc3RhbXAgOiB1bmRlZmluZWQsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2FkZGl0aW9uYWxBdHRyaWJ1dGVzID8/IHt9LCB7XG4gICAgICAgICAgICAgICAgbGU6IHVwcGVyQm91bmQgPT09IHVuZGVmaW5lZCB8fCB1cHBlckJvdW5kID09PSBJbmZpbml0eVxuICAgICAgICAgICAgICAgICAgICA/ICcrSW5mJ1xuICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyh1cHBlckJvdW5kKSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgX3NlcmlhbGl6ZVJlc291cmNlKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAndGFyZ2V0X2luZm8nO1xuICAgICAgICBjb25zdCBoZWxwID0gYCMgSEVMUCAke25hbWV9IFRhcmdldCBtZXRhZGF0YWA7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBgIyBUWVBFICR7bmFtZX0gZ2F1Z2VgO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gc3RyaW5naWZ5KG5hbWUsIHJlc291cmNlLmF0dHJpYnV0ZXMsIDEpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIGAke2hlbHB9XFxuJHt0eXBlfVxcbiR7cmVzdWx0c31cXG5gO1xuICAgIH1cbn1cbmV4cG9ydHMuUHJvbWV0aGV1c1NlcmlhbGl6ZXIgPSBQcm9tZXRoZXVzU2VyaWFsaXplcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVByb21ldGhldXNTZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9tZXRoZXVzRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmNvbnN0IHNka19tZXRyaWNzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3NcIik7XG5jb25zdCBodHRwXzEgPSByZXF1aXJlKFwiaHR0cFwiKTtcbmNvbnN0IFByb21ldGhldXNTZXJpYWxpemVyXzEgPSByZXF1aXJlKFwiLi9Qcm9tZXRoZXVzU2VyaWFsaXplclwiKTtcbi8qKiBOb2RlLmpzIHY4LnggY29tcGF0ICovXG5jb25zdCB1cmxfMSA9IHJlcXVpcmUoXCJ1cmxcIik7XG5jbGFzcyBQcm9tZXRoZXVzRXhwb3J0ZXIgZXh0ZW5kcyBzZGtfbWV0cmljc18xLk1ldHJpY1JlYWRlciB7XG4gICAgc3RhdGljIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgICAgICAgaG9zdDogdW5kZWZpbmVkLFxuICAgICAgICBwb3J0OiA5NDY0LFxuICAgICAgICBlbmRwb2ludDogJy9tZXRyaWNzJyxcbiAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgYXBwZW5kVGltZXN0YW1wOiBmYWxzZSxcbiAgICAgICAgd2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHM6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIF9ob3N0O1xuICAgIF9wb3J0O1xuICAgIF9iYXNlVXJsO1xuICAgIF9lbmRwb2ludDtcbiAgICBfc2VydmVyO1xuICAgIF9wcmVmaXg7XG4gICAgX2FwcGVuZFRpbWVzdGFtcDtcbiAgICBfc2VyaWFsaXplcjtcbiAgICBfc3RhcnRTZXJ2ZXJQcm9taXNlO1xuICAgIC8vIFRoaXMgd2lsbCBiZSByZXF1aXJlZCB3aGVuIGhpc3RvZ3JhbSBpcyBpbXBsZW1lbnRlZC4gTGVhdmluZyBoZXJlIHNvIGl0IGlzIG5vdCBmb3Jnb3R0ZW5cbiAgICAvLyBIaXN0b2dyYW0gY2Fubm90IGhhdmUgYSBhdHRyaWJ1dGUgbmFtZWQgJ2xlJ1xuICAgIC8vIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFJFU0VSVkVEX0hJU1RPR1JBTV9MQUJFTCA9ICdsZSc7XG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY29uZmlnIEV4cG9ydGVyIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFmdGVyIGEgc2VydmVyIHdhcyBzdGFydGVkXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30sIGNhbGxiYWNrID0gKCkgPT4geyB9KSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uU2VsZWN0b3I6IF9pbnN0cnVtZW50VHlwZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogc2RrX21ldHJpY3NfMS5BZ2dyZWdhdGlvblR5cGUuREVGQVVMVCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHlTZWxlY3RvcjogX2luc3RydW1lbnRUeXBlID0+IHNka19tZXRyaWNzXzEuQWdncmVnYXRpb25UZW1wb3JhbGl0eS5DVU1VTEFUSVZFLFxuICAgICAgICAgICAgbWV0cmljUHJvZHVjZXJzOiBjb25maWcubWV0cmljUHJvZHVjZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5faG9zdCA9XG4gICAgICAgICAgICBjb25maWcuaG9zdCB8fFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfUFJPTUVUSEVVU19IT1NUIHx8XG4gICAgICAgICAgICAgICAgUHJvbWV0aGV1c0V4cG9ydGVyLkRFRkFVTFRfT1BUSU9OUy5ob3N0O1xuICAgICAgICB0aGlzLl9wb3J0ID1cbiAgICAgICAgICAgIGNvbmZpZy5wb3J0IHx8XG4gICAgICAgICAgICAgICAgTnVtYmVyKHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfUFJPTUVUSEVVU19QT1JUKSB8fFxuICAgICAgICAgICAgICAgIFByb21ldGhldXNFeHBvcnRlci5ERUZBVUxUX09QVElPTlMucG9ydDtcbiAgICAgICAgdGhpcy5fcHJlZml4ID0gY29uZmlnLnByZWZpeCB8fCBQcm9tZXRoZXVzRXhwb3J0ZXIuREVGQVVMVF9PUFRJT05TLnByZWZpeDtcbiAgICAgICAgdGhpcy5fYXBwZW5kVGltZXN0YW1wID1cbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuYXBwZW5kVGltZXN0YW1wID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgICA/IGNvbmZpZy5hcHBlbmRUaW1lc3RhbXBcbiAgICAgICAgICAgICAgICA6IFByb21ldGhldXNFeHBvcnRlci5ERUZBVUxUX09QVElPTlMuYXBwZW5kVGltZXN0YW1wO1xuICAgICAgICBjb25zdCBfd2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHMgPSBjb25maWcud2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHMgfHxcbiAgICAgICAgICAgIFByb21ldGhldXNFeHBvcnRlci5ERUZBVUxUX09QVElPTlMud2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHM7XG4gICAgICAgIC8vIHVucmVmIHRvIHByZXZlbnQgcHJvbWV0aGV1cyBleHBvcnRlciBmcm9tIGhvbGRpbmcgdGhlIHByb2Nlc3Mgb3BlbiBvbiBleGl0XG4gICAgICAgIHRoaXMuX3NlcnZlciA9ICgwLCBodHRwXzEuY3JlYXRlU2VydmVyKSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikudW5yZWYoKTtcbiAgICAgICAgdGhpcy5fc2VyaWFsaXplciA9IG5ldyBQcm9tZXRoZXVzU2VyaWFsaXplcl8xLlByb21ldGhldXNTZXJpYWxpemVyKHRoaXMuX3ByZWZpeCwgdGhpcy5fYXBwZW5kVGltZXN0YW1wLCBfd2l0aFJlc291cmNlQ29uc3RhbnRMYWJlbHMpO1xuICAgICAgICB0aGlzLl9iYXNlVXJsID0gYGh0dHA6Ly8ke3RoaXMuX2hvc3R9OiR7dGhpcy5fcG9ydH0vYDtcbiAgICAgICAgdGhpcy5fZW5kcG9pbnQgPSAoY29uZmlnLmVuZHBvaW50IHx8IFByb21ldGhldXNFeHBvcnRlci5ERUZBVUxUX09QVElPTlMuZW5kcG9pbnQpLnJlcGxhY2UoL14oW14vXSkvLCAnLyQxJyk7XG4gICAgICAgIGlmIChjb25maWcucHJldmVudFNlcnZlclN0YXJ0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2VydmVyKCkudGhlbihjYWxsYmFjaywgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBEbyBub3QgaW52b2tlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHphbGdvIHByb2JsZW0uXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25Gb3JjZUZsdXNoKCkge1xuICAgICAgICAvKiogZG8gbm90aGluZyAqL1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0cyBkb3duIHRoZSBleHBvcnQgc2VydmVyIGFuZCBjbGVhcnMgdGhlIHJlZ2lzdHJ5XG4gICAgICovXG4gICAgb25TaHV0ZG93bigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcFNlcnZlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wcyB0aGUgUHJvbWV0aGV1cyBleHBvcnQgc2VydmVyXG4gICAgICovXG4gICAgc3RvcFNlcnZlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ1Byb21ldGhldXMgc3RvcFNlcnZlcigpIHdhcyBjYWxsZWQgYnV0IHNlcnZlciB3YXMgbmV2ZXIgc3RhcnRlZC4nKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2ZXIuY2xvc2UoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ1Byb21ldGhldXMgZXhwb3J0ZXIgd2FzIHN0b3BwZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRVJSX1NFUlZFUl9OT1RfUlVOTklORycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdsb2JhbEVycm9ySGFuZGxlcikoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgdGhlIFByb21ldGhldXMgZXhwb3J0IHNlcnZlclxuICAgICAqL1xuICAgIHN0YXJ0U2VydmVyKCkge1xuICAgICAgICB0aGlzLl9zdGFydFNlcnZlclByb21pc2UgPz89IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlcnZlci5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgICB0aGlzLl9zZXJ2ZXIubGlzdGVuKHtcbiAgICAgICAgICAgICAgICBwb3J0OiB0aGlzLl9wb3J0LFxuICAgICAgICAgICAgICAgIGhvc3Q6IHRoaXMuX2hvc3QsXG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZyhgUHJvbWV0aGV1cyBleHBvcnRlciBzZXJ2ZXIgc3RhcnRlZDogJHt0aGlzLl9ob3N0fToke3RoaXMuX3BvcnR9LyR7dGhpcy5fZW5kcG9pbnR9YCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZXJ2ZXJQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0IGhhbmRsZXIgdGhhdCByZXNwb25kcyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIG1ldHJpY3NcbiAgICAgKiBAcGFyYW0gX3JlcXVlc3QgSW5jb21pbmcgSFRUUCByZXF1ZXN0IG9mIHNlcnZlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSByZXNwb25zZSBIVFRQIHJlc3BvbnNlIG9iamVjdCB1c2VkIHRvIHJlc3BvbnNlIHRvIHJlcXVlc3RcbiAgICAgKi9cbiAgICBnZXRNZXRyaWNzUmVxdWVzdEhhbmRsZXIoX3JlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuX2V4cG9ydE1ldHJpY3MocmVzcG9uc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0IGhhbmRsZXIgdXNlZCBieSBodHRwIGxpYnJhcnkgdG8gcmVzcG9uZCB0byBpbmNvbWluZyByZXF1ZXN0c1xuICAgICAqIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiBtZXRyaWNzIGJ5IHRoZSBQcm9tZXRoZXVzIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCBJbmNvbWluZyBIVFRQIHJlcXVlc3QgdG8gZXhwb3J0IHNlcnZlclxuICAgICAqIEBwYXJhbSByZXNwb25zZSBIVFRQIHJlc3BvbnNlIG9iamVjdCB1c2VkIHRvIHJlc3BvbmQgdG8gcmVxdWVzdFxuICAgICAqL1xuICAgIF9yZXF1ZXN0SGFuZGxlciA9IChyZXF1ZXN0LCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgbmV3IHVybF8xLlVSTChyZXF1ZXN0LnVybCwgdGhpcy5fYmFzZVVybCkucGF0aG5hbWUgPT09IHRoaXMuX2VuZHBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLl9leHBvcnRNZXRyaWNzKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25vdEZvdW5kKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVzcG9uZHMgdG8gaW5jb21pbmcgbWVzc2FnZSB3aXRoIGN1cnJlbnQgc3RhdGUgb2YgYWxsIG1ldHJpY3MuXG4gICAgICovXG4gICAgX2V4cG9ydE1ldHJpY3MgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICB0aGlzLmNvbGxlY3QoKS50aGVuKGNvbGxlY3Rpb25SZXN1bHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZXNvdXJjZU1ldHJpY3MsIGVycm9ycyB9ID0gY29sbGVjdGlvblJlc3VsdDtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy5lcnJvcignUHJvbWV0aGV1c0V4cG9ydGVyOiBtZXRyaWNzIGNvbGxlY3Rpb24gZXJyb3JzJywgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZCh0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShyZXNvdXJjZU1ldHJpY3MpKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmVuZChgIyBmYWlsZWQgdG8gZXhwb3J0IG1ldHJpY3M6ICR7ZXJyfWApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlc3BvbmRzIHdpdGggNDA0IHN0YXR1cyBjb2RlIHRvIGFsbCByZXF1ZXN0cyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgY29uZmlndXJlZCBlbmRwb2ludC5cbiAgICAgKi9cbiAgICBfbm90Rm91bmQgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgfTtcbn1cbmV4cG9ydHMuUHJvbWV0aGV1c0V4cG9ydGVyID0gUHJvbWV0aGV1c0V4cG9ydGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvbWV0aGV1c0V4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qcm9tZXRoZXVzU2VyaWFsaXplciA9IGV4cG9ydHMuUHJvbWV0aGV1c0V4cG9ydGVyID0gdm9pZCAwO1xudmFyIFByb21ldGhldXNFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vUHJvbWV0aGV1c0V4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvbWV0aGV1c0V4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9tZXRoZXVzRXhwb3J0ZXJfMS5Qcm9tZXRoZXVzRXhwb3J0ZXI7IH0gfSk7XG52YXIgUHJvbWV0aGV1c1NlcmlhbGl6ZXJfMSA9IHJlcXVpcmUoXCIuL1Byb21ldGhldXNTZXJpYWxpemVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUHJvbWV0aGV1c1NlcmlhbGl6ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21ldGhldXNTZXJpYWxpemVyXzEuUHJvbWV0aGV1c1NlcmlhbGl6ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5WRVJTSU9OID0gJzAuMjAzLjAnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCBvdGxwX3RyYW5zZm9ybWVyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC10cmFuc2Zvcm1lclwiKTtcbmNvbnN0IHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuLi8uLi92ZXJzaW9uXCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbi8qKlxuICogQ29sbGVjdG9yIFRyYWNlIEV4cG9ydGVyIGZvciBOb2RlIHdpdGggcHJvdG9idWZcbiAqL1xuY2xhc3MgT1RMUFRyYWNlRXhwb3J0ZXIgZXh0ZW5kcyBvdGxwX2V4cG9ydGVyX2Jhc2VfMS5PVExQRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcigoMCwgbm9kZV9odHRwXzEuY3JlYXRlT3RscEh0dHBFeHBvcnREZWxlZ2F0ZSkoKDAsIG5vZGVfaHR0cF8xLmNvbnZlcnRMZWdhY3lIdHRwT3B0aW9ucykoY29uZmlnLCAnVFJBQ0VTJywgJ3YxL3RyYWNlcycsIHtcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogYE9UZWwtT1RMUC1FeHBvcnRlci1KYXZhU2NyaXB0LyR7dmVyc2lvbl8xLlZFUlNJT059YCxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC1wcm90b2J1ZicsXG4gICAgICAgIH0pLCBvdGxwX3RyYW5zZm9ybWVyXzEuUHJvdG9idWZUcmFjZVNlcmlhbGl6ZXIpKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBUcmFjZUV4cG9ydGVyID0gT1RMUFRyYWNlRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQVHJhY2VFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUFRyYWNlRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBUcmFjZUV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBUcmFjZUV4cG9ydGVyXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQVHJhY2VFeHBvcnRlciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBUcmFjZUV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQVHJhY2VFeHBvcnRlciA9IHZvaWQgMDtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVkVSU0lPTiA9IHZvaWQgMDtcbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xuZXhwb3J0cy5WRVJTSU9OID0gJzAuMjAzLjAnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi4vLi4vdmVyc2lvblwiKTtcbmNvbnN0IG90bHBfdHJhbnNmb3JtZXJfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLXRyYW5zZm9ybWVyXCIpO1xuY29uc3Qgbm9kZV9odHRwXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlL25vZGUtaHR0cFwiKTtcbi8qKlxuICogQ29sbGVjdG9yIFRyYWNlIEV4cG9ydGVyIGZvciBOb2RlXG4gKi9cbmNsYXNzIE9UTFBUcmFjZUV4cG9ydGVyIGV4dGVuZHMgb3RscF9leHBvcnRlcl9iYXNlXzEuT1RMUEV4cG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoKDAsIG5vZGVfaHR0cF8xLmNyZWF0ZU90bHBIdHRwRXhwb3J0RGVsZWdhdGUpKCgwLCBub2RlX2h0dHBfMS5jb252ZXJ0TGVnYWN5SHR0cE9wdGlvbnMpKGNvbmZpZywgJ1RSQUNFUycsICd2MS90cmFjZXMnLCB7XG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IGBPVGVsLU9UTFAtRXhwb3J0ZXItSmF2YVNjcmlwdC8ke3ZlcnNpb25fMS5WRVJTSU9OfWAsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9KSwgb3RscF90cmFuc2Zvcm1lcl8xLkpzb25UcmFjZVNlcmlhbGl6ZXIpKTtcbiAgICB9XG59XG5leHBvcnRzLk9UTFBUcmFjZUV4cG9ydGVyID0gT1RMUFRyYWNlRXhwb3J0ZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PVExQVHJhY2VFeHBvcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgT1RMUFRyYWNlRXhwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL09UTFBUcmFjZUV4cG9ydGVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9UTFBUcmFjZUV4cG9ydGVyXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgbm9kZV8xID0gcmVxdWlyZShcIi4vbm9kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9UTFBUcmFjZUV4cG9ydGVyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1RMUFRyYWNlRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsYXRmb3JtXzEuT1RMUFRyYWNlRXhwb3J0ZXI7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSB2b2lkIDA7XG5jb25zdCBvdGxwX2dycGNfZXhwb3J0ZXJfYmFzZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtZ3JwYy1leHBvcnRlci1iYXNlXCIpO1xuY29uc3Qgb3RscF90cmFuc2Zvcm1lcl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L290bHAtdHJhbnNmb3JtZXJcIik7XG5jb25zdCBvdGxwX2V4cG9ydGVyX2Jhc2VfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2VcIik7XG4vKipcbiAqIE9UTFAgVHJhY2UgRXhwb3J0ZXIgZm9yIE5vZGVcbiAqL1xuY2xhc3MgT1RMUFRyYWNlRXhwb3J0ZXIgZXh0ZW5kcyBvdGxwX2V4cG9ydGVyX2Jhc2VfMS5PVExQRXhwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcigoMCwgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMS5jcmVhdGVPdGxwR3JwY0V4cG9ydERlbGVnYXRlKSgoMCwgb3RscF9ncnBjX2V4cG9ydGVyX2Jhc2VfMS5jb252ZXJ0TGVnYWN5T3RscEdycGNPcHRpb25zKShjb25maWcsICdUUkFDRVMnKSwgb3RscF90cmFuc2Zvcm1lcl8xLlByb3RvYnVmVHJhY2VTZXJpYWxpemVyLCAnVHJhY2VFeHBvcnRTZXJ2aWNlJywgJy9vcGVudGVsZW1ldHJ5LnByb3RvLmNvbGxlY3Rvci50cmFjZS52MS5UcmFjZVNlcnZpY2UvRXhwb3J0JykpO1xuICAgIH1cbn1cbmV4cG9ydHMuT1RMUFRyYWNlRXhwb3J0ZXIgPSBPVExQVHJhY2VFeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9UTFBUcmFjZUV4cG9ydGVyLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVExQVHJhY2VFeHBvcnRlciA9IHZvaWQgMDtcbnZhciBPVExQVHJhY2VFeHBvcnRlcl8xID0gcmVxdWlyZShcIi4vT1RMUFRyYWNlRXhwb3J0ZXJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPVExQVHJhY2VFeHBvcnRlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gT1RMUFRyYWNlRXhwb3J0ZXJfMS5PVExQVHJhY2VFeHBvcnRlcjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlU2VuZCA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xuY29uc3QgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG4vKipcbiAqIFByZXBhcmVzIHNlbmQgZnVuY3Rpb24gdGhhdCB3aWxsIHNlbmQgc3BhbnMgdG8gdGhlIHJlbW90ZSBaaXBraW4gc2VydmljZS5cbiAqIEBwYXJhbSB1cmxTdHIgLSB1cmwgdG8gc2VuZCBzcGFuc1xuICogQHBhcmFtIGhlYWRlcnMgLSBoZWFkZXJzXG4gKiBzZW5kXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVTZW5kKHVybFN0ciwgaGVhZGVycykge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsU3RyKTtcbiAgICBjb25zdCByZXFPcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBTZW5kIHNwYW5zIHRvIHRoZSByZW1vdGUgWmlwa2luIHNlcnZpY2UuXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNlbmQoemlwa2luU3BhbnMsIGRvbmUpIHtcbiAgICAgICAgaWYgKHppcGtpblNwYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnWmlwa2luIHNlbmQgd2l0aCBlbXB0eSBzcGFucycpO1xuICAgICAgICAgICAgcmV0dXJuIGRvbmUoeyBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gdXJsLnByb3RvY29sID09PSAnaHR0cDonID8gaHR0cCA6IGh0dHBzO1xuICAgICAgICBjb25zdCByZXEgPSByZXF1ZXN0KHVybCwgcmVxT3B0cywgKHJlcykgPT4ge1xuICAgICAgICAgICAgbGV0IHJhd0RhdGEgPSAnJztcbiAgICAgICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICAgICAgICByYXdEYXRhICs9IGNodW5rO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1c0NvZGUgfHwgMDtcbiAgICAgICAgICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBaaXBraW4gcmVzcG9uc2Ugc3RhdHVzIGNvZGU6ICR7c3RhdHVzQ29kZX0sIGJvZHk6ICR7cmF3RGF0YX1gKTtcbiAgICAgICAgICAgICAgICAvLyBDb25zaWRlciAyeHggYW5kIDN4eCBhcyBzdWNjZXNzLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlIDwgNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgNHh4IGFzIGZhaWxlZCBub24tcmV0cnlhYmxlLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihgR290IHVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgZnJvbSB6aXBraW46ICR7c3RhdHVzQ29kZX1gKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvbmUoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGNvcmVfMS5FeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSXNzdWUgcmVxdWVzdCB0byByZW1vdGUgc2VydmljZVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoemlwa2luU3BhbnMpO1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKGBaaXBraW4gcmVxdWVzdCBwYXlsb2FkOiAke3BheWxvYWR9YCk7XG4gICAgICAgIHJlcS53cml0ZShwYXlsb2FkLCAndXRmOCcpO1xuICAgICAgICByZXEuZW5kKCk7XG4gICAgfTtcbn1cbmV4cG9ydHMucHJlcGFyZVNlbmQgPSBwcmVwYXJlU2VuZDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnByZXBhcmVTZW5kID0gdm9pZCAwO1xudmFyIHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmVwYXJlU2VuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdXRpbF8xLnByZXBhcmVTZW5kOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnByZXBhcmVTZW5kID0gdm9pZCAwO1xudmFyIG5vZGVfMSA9IHJlcXVpcmUoXCIuL25vZGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmVwYXJlU2VuZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZV8xLnByZXBhcmVTZW5kOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNwYW5LaW5kID0gdm9pZCAwO1xuLyoqXG4gKiBXaGVuIHByZXNlbnQsIGtpbmQgY2xhcmlmaWVzIHRpbWVzdGFtcCwgZHVyYXRpb24gYW5kIHJlbW90ZUVuZHBvaW50LiBXaGVuXG4gKiBhYnNlbnQsIHRoZSBzcGFuIGlzIGxvY2FsIG9yIGluY29tcGxldGUuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmVcbiAqIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3kgcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kXG4gKiBjb25zdW1lciBzcGFucy5cbiAqIGBDTElFTlRgXG4gKiAgIHRpbWVzdGFtcCBpcyB0aGUgbW9tZW50IGEgcmVxdWVzdCB3YXMgc2VudCB0byB0aGUgc2VydmVyLlxuICogICBkdXJhdGlvbiBpcyB0aGUgZGVsYXkgdW50aWwgYSByZXNwb25zZSBvciBhbiBlcnJvciB3YXMgcmVjZWl2ZWQuXG4gKiAgIHJlbW90ZUVuZHBvaW50IGlzIHRoZSBzZXJ2ZXIuXG4gKiBgU0VSVkVSYFxuICogICB0aW1lc3RhbXAgaXMgdGhlIG1vbWVudCBhIGNsaWVudCByZXF1ZXN0IHdhcyByZWNlaXZlZC5cbiAqICAgZHVyYXRpb24gaXMgdGhlIGRlbGF5IHVudGlsIGEgcmVzcG9uc2Ugd2FzIHNlbnQgb3IgYW4gZXJyb3IuXG4gKiAgIHJlbW90ZUVuZHBvaW50IGlzIHRoZSBjbGllbnQuXG4gKiBgUFJPRFVDRVJgXG4gKiAgIHRpbWVzdGFtcCBpcyB0aGUgbW9tZW50IGEgbWVzc2FnZSB3YXMgc2VudCB0byBhIGRlc3RpbmF0aW9uLlxuICogICBkdXJhdGlvbiBpcyB0aGUgZGVsYXkgc2VuZGluZyB0aGUgbWVzc2FnZSwgc3VjaCBhcyBiYXRjaGluZy5cbiAqICAgcmVtb3RlRW5kcG9pbnQgaXMgdGhlIGJyb2tlci5cbiAqIGBDT05TVU1FUmBcbiAqICAgdGltZXN0YW1wIGlzIHRoZSBtb21lbnQgYSBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIGFuIG9yaWdpbi5cbiAqICAgZHVyYXRpb24gaXMgdGhlIGRlbGF5IGNvbnN1bWluZyB0aGUgbWVzc2FnZSwgc3VjaCBhcyBmcm9tIGJhY2tsb2cuXG4gKiAgIHJlbW90ZUVuZHBvaW50IC0gUmVwcmVzZW50cyB0aGUgYnJva2VyLiBMZWF2ZSBzZXJ2aWNlTmFtZSBhYnNlbnQgaWYgdW5rbm93bi5cbiAqL1xudmFyIFNwYW5LaW5kO1xuKGZ1bmN0aW9uIChTcGFuS2luZCkge1xuICAgIFNwYW5LaW5kW1wiQ0xJRU5UXCJdID0gXCJDTElFTlRcIjtcbiAgICBTcGFuS2luZFtcIlNFUlZFUlwiXSA9IFwiU0VSVkVSXCI7XG4gICAgU3BhbktpbmRbXCJDT05TVU1FUlwiXSA9IFwiQ09OU1VNRVJcIjtcbiAgICBTcGFuS2luZFtcIlBST0RVQ0VSXCJdID0gXCJQUk9EVUNFUlwiO1xufSkoU3BhbktpbmQgPSBleHBvcnRzLlNwYW5LaW5kIHx8IChleHBvcnRzLlNwYW5LaW5kID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fdG9aaXBraW5Bbm5vdGF0aW9ucyA9IGV4cG9ydHMuX3RvWmlwa2luVGFncyA9IGV4cG9ydHMudG9aaXBraW5TcGFuID0gZXhwb3J0cy5kZWZhdWx0U3RhdHVzRXJyb3JUYWdOYW1lID0gZXhwb3J0cy5kZWZhdWx0U3RhdHVzQ29kZVRhZ05hbWUgPSB2b2lkIDA7XG5jb25zdCBhcGkgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCB6aXBraW5UeXBlcyA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuY29uc3QgWklQS0lOX1NQQU5fS0lORF9NQVBQSU5HID0ge1xuICAgIFthcGkuU3BhbktpbmQuQ0xJRU5UXTogemlwa2luVHlwZXMuU3BhbktpbmQuQ0xJRU5ULFxuICAgIFthcGkuU3BhbktpbmQuU0VSVkVSXTogemlwa2luVHlwZXMuU3BhbktpbmQuU0VSVkVSLFxuICAgIFthcGkuU3BhbktpbmQuQ09OU1VNRVJdOiB6aXBraW5UeXBlcy5TcGFuS2luZC5DT05TVU1FUixcbiAgICBbYXBpLlNwYW5LaW5kLlBST0RVQ0VSXTogemlwa2luVHlwZXMuU3BhbktpbmQuUFJPRFVDRVIsXG4gICAgLy8gV2hlbiBhYnNlbnQsIHRoZSBzcGFuIGlzIGxvY2FsLlxuICAgIFthcGkuU3BhbktpbmQuSU5URVJOQUxdOiB1bmRlZmluZWQsXG59O1xuZXhwb3J0cy5kZWZhdWx0U3RhdHVzQ29kZVRhZ05hbWUgPSAnb3RlbC5zdGF0dXNfY29kZSc7XG5leHBvcnRzLmRlZmF1bHRTdGF0dXNFcnJvclRhZ05hbWUgPSAnZXJyb3InO1xuLyoqXG4gKiBUcmFuc2xhdGUgT3BlblRlbGVtZXRyeSBSZWFkYWJsZVNwYW4gdG8gWmlwa2luU3BhbiBmb3JtYXRcbiAqIEBwYXJhbSBzcGFuIFNwYW4gdG8gYmUgdHJhbnNsYXRlZFxuICovXG5mdW5jdGlvbiB0b1ppcGtpblNwYW4oc3Bhbiwgc2VydmljZU5hbWUsIHN0YXR1c0NvZGVUYWdOYW1lLCBzdGF0dXNFcnJvclRhZ05hbWUpIHtcbiAgICBjb25zdCB6aXBraW5TcGFuID0ge1xuICAgICAgICB0cmFjZUlkOiBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZCxcbiAgICAgICAgcGFyZW50SWQ6IHNwYW4ucGFyZW50U3BhbkNvbnRleHQ/LnNwYW5JZCxcbiAgICAgICAgbmFtZTogc3Bhbi5uYW1lLFxuICAgICAgICBpZDogc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCxcbiAgICAgICAga2luZDogWklQS0lOX1NQQU5fS0lORF9NQVBQSU5HW3NwYW4ua2luZF0sXG4gICAgICAgIHRpbWVzdGFtcDogKDAsIGNvcmVfMS5oclRpbWVUb01pY3Jvc2Vjb25kcykoc3Bhbi5zdGFydFRpbWUpLFxuICAgICAgICBkdXJhdGlvbjogTWF0aC5yb3VuZCgoMCwgY29yZV8xLmhyVGltZVRvTWljcm9zZWNvbmRzKShzcGFuLmR1cmF0aW9uKSksXG4gICAgICAgIGxvY2FsRW5kcG9pbnQ6IHsgc2VydmljZU5hbWUgfSxcbiAgICAgICAgdGFnczogX3RvWmlwa2luVGFncyhzcGFuLCBzdGF0dXNDb2RlVGFnTmFtZSwgc3RhdHVzRXJyb3JUYWdOYW1lKSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHNwYW4uZXZlbnRzLmxlbmd0aFxuICAgICAgICAgICAgPyBfdG9aaXBraW5Bbm5vdGF0aW9ucyhzcGFuLmV2ZW50cylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgcmV0dXJuIHppcGtpblNwYW47XG59XG5leHBvcnRzLnRvWmlwa2luU3BhbiA9IHRvWmlwa2luU3Bhbjtcbi8qKiBDb252ZXJ0cyBPcGVuVGVsZW1ldHJ5IFNwYW4gcHJvcGVydGllcyB0byBaaXBraW4gVGFncyBmb3JtYXQuICovXG5mdW5jdGlvbiBfdG9aaXBraW5UYWdzKHsgYXR0cmlidXRlcywgcmVzb3VyY2UsIHN0YXR1cywgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCwgZHJvcHBlZEV2ZW50c0NvdW50LCBkcm9wcGVkTGlua3NDb3VudCwgfSwgc3RhdHVzQ29kZVRhZ05hbWUsIHN0YXR1c0Vycm9yVGFnTmFtZSkge1xuICAgIGNvbnN0IHRhZ3MgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKSkge1xuICAgICAgICB0YWdzW2tleV0gPSBTdHJpbmcoYXR0cmlidXRlc1trZXldKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cy5jb2RlICE9PSBhcGkuU3BhblN0YXR1c0NvZGUuVU5TRVQpIHtcbiAgICAgICAgdGFnc1tzdGF0dXNDb2RlVGFnTmFtZV0gPSBTdHJpbmcoYXBpLlNwYW5TdGF0dXNDb2RlW3N0YXR1cy5jb2RlXSk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMuY29kZSA9PT0gYXBpLlNwYW5TdGF0dXNDb2RlLkVSUk9SICYmIHN0YXR1cy5tZXNzYWdlKSB7XG4gICAgICAgIHRhZ3Nbc3RhdHVzRXJyb3JUYWdOYW1lXSA9IHN0YXR1cy5tZXNzYWdlO1xuICAgIH1cbiAgICAvKiBBZGQgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCBhcyBhIHRhZyAqL1xuICAgIGlmIChkcm9wcGVkQXR0cmlidXRlc0NvdW50KSB7XG4gICAgICAgIHRhZ3NbJ290ZWwuZHJvcHBlZF9hdHRyaWJ1dGVzX2NvdW50J10gPSBTdHJpbmcoZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCk7XG4gICAgfVxuICAgIC8qIEFkZCBkcm9wcGVkRXZlbnRzQ291bnQgYXMgYSB0YWcgKi9cbiAgICBpZiAoZHJvcHBlZEV2ZW50c0NvdW50KSB7XG4gICAgICAgIHRhZ3NbJ290ZWwuZHJvcHBlZF9ldmVudHNfY291bnQnXSA9IFN0cmluZyhkcm9wcGVkRXZlbnRzQ291bnQpO1xuICAgIH1cbiAgICAvKiBBZGQgZHJvcHBlZExpbmtzQ291bnQgYXMgYSB0YWcgKi9cbiAgICBpZiAoZHJvcHBlZExpbmtzQ291bnQpIHtcbiAgICAgICAgdGFnc1snb3RlbC5kcm9wcGVkX2xpbmtzX2NvdW50J10gPSBTdHJpbmcoZHJvcHBlZExpbmtzQ291bnQpO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhyZXNvdXJjZS5hdHRyaWJ1dGVzKS5mb3JFYWNoKG5hbWUgPT4gKHRhZ3NbbmFtZV0gPSBTdHJpbmcocmVzb3VyY2UuYXR0cmlidXRlc1tuYW1lXSkpKTtcbiAgICByZXR1cm4gdGFncztcbn1cbmV4cG9ydHMuX3RvWmlwa2luVGFncyA9IF90b1ppcGtpblRhZ3M7XG4vKipcbiAqIENvbnZlcnRzIE9wZW5UZWxlbWV0cnkgRXZlbnRzIHRvIFppcGtpbiBBbm5vdGF0aW9ucyBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIF90b1ppcGtpbkFubm90YXRpb25zKGV2ZW50cykge1xuICAgIHJldHVybiBldmVudHMubWFwKGV2ZW50ID0+ICh7XG4gICAgICAgIHRpbWVzdGFtcDogTWF0aC5yb3VuZCgoMCwgY29yZV8xLmhyVGltZVRvTWljcm9zZWNvbmRzKShldmVudC50aW1lKSksXG4gICAgICAgIHZhbHVlOiBldmVudC5uYW1lLFxuICAgIH0pKTtcbn1cbmV4cG9ydHMuX3RvWmlwa2luQW5ub3RhdGlvbnMgPSBfdG9aaXBraW5Bbm5vdGF0aW9ucztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYW5zZm9ybS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcmVwYXJlR2V0SGVhZGVycyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHByZXBhcmVHZXRIZWFkZXJzKGdldEV4cG9ydFJlcXVlc3RIZWFkZXJzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEV4cG9ydFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgfTtcbn1cbmV4cG9ydHMucHJlcGFyZUdldEhlYWRlcnMgPSBwcmVwYXJlR2V0SGVhZGVycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5aaXBraW5FeHBvcnRlciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgaW5kZXhfMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtL2luZGV4XCIpO1xuY29uc3QgdHJhbnNmb3JtXzEgPSByZXF1aXJlKFwiLi90cmFuc2Zvcm1cIik7XG5jb25zdCBzZW1hbnRpY19jb252ZW50aW9uc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBaaXBraW4gRXhwb3J0ZXJcbiAqL1xuY2xhc3MgWmlwa2luRXhwb3J0ZXIge1xuICAgIERFRkFVTFRfU0VSVklDRV9OQU1FID0gJ09wZW5UZWxlbWV0cnkgU2VydmljZSc7XG4gICAgX3N0YXR1c0NvZGVUYWdOYW1lO1xuICAgIF9zdGF0dXNEZXNjcmlwdGlvblRhZ05hbWU7XG4gICAgX3VybFN0cjtcbiAgICBfc2VuZDtcbiAgICBfZ2V0SGVhZGVycztcbiAgICBfc2VydmljZU5hbWU7XG4gICAgX2lzU2h1dGRvd247XG4gICAgX3NlbmRpbmdQcm9taXNlcyA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3VybFN0ciA9XG4gICAgICAgICAgICBjb25maWcudXJsIHx8XG4gICAgICAgICAgICAgICAgKCgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfRVhQT1JURVJfWklQS0lOX0VORFBPSU5UJykgPz9cbiAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6OTQxMS9hcGkvdjIvc3BhbnMnKTtcbiAgICAgICAgdGhpcy5fc2VuZCA9ICgwLCBpbmRleF8xLnByZXBhcmVTZW5kKSh0aGlzLl91cmxTdHIsIGNvbmZpZy5oZWFkZXJzKTtcbiAgICAgICAgdGhpcy5fc2VydmljZU5hbWUgPSBjb25maWcuc2VydmljZU5hbWU7XG4gICAgICAgIHRoaXMuX3N0YXR1c0NvZGVUYWdOYW1lID1cbiAgICAgICAgICAgIGNvbmZpZy5zdGF0dXNDb2RlVGFnTmFtZSB8fCB0cmFuc2Zvcm1fMS5kZWZhdWx0U3RhdHVzQ29kZVRhZ05hbWU7XG4gICAgICAgIHRoaXMuX3N0YXR1c0Rlc2NyaXB0aW9uVGFnTmFtZSA9XG4gICAgICAgICAgICBjb25maWcuc3RhdHVzRGVzY3JpcHRpb25UYWdOYW1lIHx8IHRyYW5zZm9ybV8xLmRlZmF1bHRTdGF0dXNFcnJvclRhZ05hbWU7XG4gICAgICAgIHRoaXMuX2lzU2h1dGRvd24gPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuZ2V0RXhwb3J0UmVxdWVzdEhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhlYWRlcnMgPSAoMCwgdXRpbHNfMS5wcmVwYXJlR2V0SGVhZGVycykoY29uZmlnLmdldEV4cG9ydFJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgICAgIHRoaXMuX2JlZm9yZVNlbmQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0IHNwYW5zLlxuICAgICAqL1xuICAgIGV4cG9ydChzcGFucywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBTdHJpbmcodGhpcy5fc2VydmljZU5hbWUgfHxcbiAgICAgICAgICAgIHNwYW5zWzBdLnJlc291cmNlLmF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV0gfHxcbiAgICAgICAgICAgIHRoaXMuREVGQVVMVF9TRVJWSUNFX05BTUUpO1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdaaXBraW4gZXhwb3J0ZXIgZXhwb3J0Jyk7XG4gICAgICAgIGlmICh0aGlzLl9pc1NodXRkb3duKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignRXhwb3J0ZXIgaGFzIGJlZW4gc2h1dGRvd24nKSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZW5kU3BhbnMoc3BhbnMsIHNlcnZpY2VOYW1lLCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZW5kaW5nUHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgY29uc3QgcG9wUHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VuZGluZ1Byb21pc2VzLmluZGV4T2YocHJvbWlzZSk7XG4gICAgICAgICAgICB0aGlzLl9zZW5kaW5nUHJvbWlzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJvbWlzZS50aGVuKHBvcFByb21pc2UsIHBvcFByb21pc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0ZG93biBleHBvcnRlci4gTm9vcCBvcGVyYXRpb24gaW4gdGhpcyBleHBvcnRlci5cbiAgICAgKi9cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnWmlwa2luIGV4cG9ydGVyIHNodXRkb3duJyk7XG4gICAgICAgIHRoaXMuX2lzU2h1dGRvd24gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydHMgYW55IHBlbmRpbmcgc3BhbnMgaW4gZXhwb3J0ZXJcbiAgICAgKi9cbiAgICBmb3JjZUZsdXNoKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgUHJvbWlzZS5hbGwodGhpcy5fc2VuZGluZ1Byb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogaWYgdXNlciBkZWZpbmVzIGdldEV4cG9ydFJlcXVlc3RIZWFkZXJzIGluIGNvbmZpZyB0aGVuIHRoaXMgd2lsbCBiZSBjYWxsZWRcbiAgICAgKiBldmVyeSB0aW1lIGJlZm9yZSBzZW5kLCBvdGhlcndpc2UgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG5vb3AgaW5cbiAgICAgKiBjb25zdHJ1Y3RvclxuICAgICAqIEBkZWZhdWx0IG5vb3BcbiAgICAgKi9cbiAgICBfYmVmb3JlU2VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2dldEhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbmQgPSAoMCwgaW5kZXhfMS5wcmVwYXJlU2VuZCkodGhpcy5fdXJsU3RyLCB0aGlzLl9nZXRIZWFkZXJzKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzcGFucyBhbmQgc2VuZHMgdG8gWmlwa2luIHNlcnZpY2UuXG4gICAgICovXG4gICAgX3NlbmRTcGFucyhzcGFucywgc2VydmljZU5hbWUsIGRvbmUpIHtcbiAgICAgICAgY29uc3Qgemlwa2luU3BhbnMgPSBzcGFucy5tYXAoc3BhbiA9PiAoMCwgdHJhbnNmb3JtXzEudG9aaXBraW5TcGFuKShzcGFuLCBTdHJpbmcoc3Bhbi5hdHRyaWJ1dGVzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuQVRUUl9TRVJWSUNFX05BTUVdIHx8XG4gICAgICAgICAgICBzcGFuLnJlc291cmNlLmF0dHJpYnV0ZXNbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV0gfHxcbiAgICAgICAgICAgIHNlcnZpY2VOYW1lKSwgdGhpcy5fc3RhdHVzQ29kZVRhZ05hbWUsIHRoaXMuX3N0YXR1c0Rlc2NyaXB0aW9uVGFnTmFtZSkpO1xuICAgICAgICB0aGlzLl9iZWZvcmVTZW5kKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW5kKHppcGtpblNwYW5zLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuWmlwa2luRXhwb3J0ZXIgPSBaaXBraW5FeHBvcnRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcGtpbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWmlwa2luRXhwb3J0ZXIgPSBleHBvcnRzLnByZXBhcmVTZW5kID0gdm9pZCAwO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByZXBhcmVTZW5kXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybV8xLnByZXBhcmVTZW5kOyB9IH0pO1xudmFyIHppcGtpbl8xID0gcmVxdWlyZShcIi4vemlwa2luXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWmlwa2luRXhwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHppcGtpbl8xLlppcGtpbkV4cG9ydGVyOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzX0RFQlVHX0ZMQUdfS0VZID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuLyoqIHNoYXJlZCBjb250ZXh0IGZvciBzdG9yaW5nIGFuIGV4dHJhY3RlZCBiMyBkZWJ1ZyBmbGFnICovXG5leHBvcnRzLkIzX0RFQlVHX0ZMQUdfS0VZID0gKDAsIGFwaV8xLmNyZWF0ZUNvbnRleHRLZXkpKCdPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IEIzIERlYnVnIEZsYWcnKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbW1vbi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuWF9CM19GTEFHUyA9IGV4cG9ydHMuWF9CM19QQVJFTlRfU1BBTl9JRCA9IGV4cG9ydHMuWF9CM19TQU1QTEVEID0gZXhwb3J0cy5YX0IzX1NQQU5fSUQgPSBleHBvcnRzLlhfQjNfVFJBQ0VfSUQgPSBleHBvcnRzLkIzX0NPTlRFWFRfSEVBREVSID0gdm9pZCAwO1xuLyoqIEIzIHNpbmdsZS1oZWFkZXIga2V5ICovXG5leHBvcnRzLkIzX0NPTlRFWFRfSEVBREVSID0gJ2IzJztcbi8qIGIzIG11bHRpLWhlYWRlciBrZXlzICovXG5leHBvcnRzLlhfQjNfVFJBQ0VfSUQgPSAneC1iMy10cmFjZWlkJztcbmV4cG9ydHMuWF9CM19TUEFOX0lEID0gJ3gtYjMtc3BhbmlkJztcbmV4cG9ydHMuWF9CM19TQU1QTEVEID0gJ3gtYjMtc2FtcGxlZCc7XG5leHBvcnRzLlhfQjNfUEFSRU5UX1NQQU5fSUQgPSAneC1iMy1wYXJlbnRzcGFuaWQnO1xuZXhwb3J0cy5YX0IzX0ZMQUdTID0gJ3gtYjMtZmxhZ3MnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CM011bHRpUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgY29tbW9uXzEgPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IFZBTElEX1NBTVBMRURfVkFMVUVTID0gbmV3IFNldChbdHJ1ZSwgJ3RydWUnLCAnVHJ1ZScsICcxJywgMV0pO1xuY29uc3QgVkFMSURfVU5TQU1QTEVEX1ZBTFVFUyA9IG5ldyBTZXQoW2ZhbHNlLCAnZmFsc2UnLCAnRmFsc2UnLCAnMCcsIDBdKTtcbmZ1bmN0aW9uIGlzVmFsaWRTYW1wbGVkVmFsdWUoc2FtcGxlZCkge1xuICAgIHJldHVybiBzYW1wbGVkID09PSBhcGlfMS5UcmFjZUZsYWdzLlNBTVBMRUQgfHwgc2FtcGxlZCA9PT0gYXBpXzEuVHJhY2VGbGFncy5OT05FO1xufVxuZnVuY3Rpb24gcGFyc2VIZWFkZXIoaGVhZGVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlclswXSA6IGhlYWRlcjtcbn1cbmZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGNhcnJpZXIsIGdldHRlciwga2V5KSB7XG4gICAgY29uc3QgaGVhZGVyID0gZ2V0dGVyLmdldChjYXJyaWVyLCBrZXkpO1xuICAgIHJldHVybiBwYXJzZUhlYWRlcihoZWFkZXIpO1xufVxuZnVuY3Rpb24gZ2V0VHJhY2VJZChjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICBjb25zdCB0cmFjZUlkID0gZ2V0SGVhZGVyVmFsdWUoY2FycmllciwgZ2V0dGVyLCBjb25zdGFudHNfMS5YX0IzX1RSQUNFX0lEKTtcbiAgICBpZiAodHlwZW9mIHRyYWNlSWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0cmFjZUlkLnBhZFN0YXJ0KDMyLCAnMCcpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBnZXRTcGFuSWQoY2FycmllciwgZ2V0dGVyKSB7XG4gICAgY29uc3Qgc3BhbklkID0gZ2V0SGVhZGVyVmFsdWUoY2FycmllciwgZ2V0dGVyLCBjb25zdGFudHNfMS5YX0IzX1NQQU5fSUQpO1xuICAgIGlmICh0eXBlb2Ygc3BhbklkID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gc3BhbklkO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBnZXREZWJ1ZyhjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IGdldEhlYWRlclZhbHVlKGNhcnJpZXIsIGdldHRlciwgY29uc3RhbnRzXzEuWF9CM19GTEFHUyk7XG4gICAgcmV0dXJuIGRlYnVnID09PSAnMScgPyAnMScgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRUcmFjZUZsYWdzKGNhcnJpZXIsIGdldHRlcikge1xuICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBnZXRIZWFkZXJWYWx1ZShjYXJyaWVyLCBnZXR0ZXIsIGNvbnN0YW50c18xLlhfQjNfU0FNUExFRCk7XG4gICAgY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhjYXJyaWVyLCBnZXR0ZXIpO1xuICAgIGlmIChkZWJ1ZyA9PT0gJzEnIHx8IFZBTElEX1NBTVBMRURfVkFMVUVTLmhhcyh0cmFjZUZsYWdzKSkge1xuICAgICAgICByZXR1cm4gYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEO1xuICAgIH1cbiAgICBpZiAodHJhY2VGbGFncyA9PT0gdW5kZWZpbmVkIHx8IFZBTElEX1VOU0FNUExFRF9WQUxVRVMuaGFzKHRyYWNlRmxhZ3MpKSB7XG4gICAgICAgIHJldHVybiBhcGlfMS5UcmFjZUZsYWdzLk5PTkU7XG4gICAgfVxuICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRvIGlzVmFsaWRTYW1wbGVkVmFsdWUgdGhhdCB0aGlzIGlzIG5vdCB2YWxpZFxuICAgIHJldHVybjtcbn1cbi8qKlxuICogUHJvcGFnYXRvciBmb3IgdGhlIEIzIG11bHRpcGxlLWhlYWRlciBIVFRQIGZvcm1hdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnppcGtpbi9iMy1wcm9wYWdhdGlvblxuICovXG5jbGFzcyBCM011bHRpUHJvcGFnYXRvciB7XG4gICAgaW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcikge1xuICAgICAgICBjb25zdCBzcGFuQ29udGV4dCA9IGFwaV8xLnRyYWNlLmdldFNwYW5Db250ZXh0KGNvbnRleHQpO1xuICAgICAgICBpZiAoIXNwYW5Db250ZXh0IHx8XG4gICAgICAgICAgICAhKDAsIGFwaV8xLmlzU3BhbkNvbnRleHRWYWxpZCkoc3BhbkNvbnRleHQpIHx8XG4gICAgICAgICAgICAoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBkZWJ1ZyA9IGNvbnRleHQuZ2V0VmFsdWUoY29tbW9uXzEuQjNfREVCVUdfRkxBR19LRVkpO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGNvbnN0YW50c18xLlhfQjNfVFJBQ0VfSUQsIHNwYW5Db250ZXh0LnRyYWNlSWQpO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGNvbnN0YW50c18xLlhfQjNfU1BBTl9JRCwgc3BhbkNvbnRleHQuc3BhbklkKTtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBCMyBzcGVjLCBpZiB0aGUgZGVidWcgZmxhZyBpcyBzZXQsXG4gICAgICAgIC8vIHRoZSBzYW1wbGVkIGZsYWcgc2hvdWxkbid0IGJlIHByb3BhZ2F0ZWQgYXMgd2VsbC5cbiAgICAgICAgaWYgKGRlYnVnID09PSAnMScpIHtcbiAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgY29uc3RhbnRzXzEuWF9CM19GTEFHUywgZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBoZWFkZXIgb25seSBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBzYW1wbGluZyBkZWNpc2lvbi5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIG9taXQgaXQgPT4gQWJzZW50LlxuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCBjb25zdGFudHNfMS5YX0IzX1NBTVBMRUQsIChhcGlfMS5UcmFjZUZsYWdzLlNBTVBMRUQgJiBzcGFuQ29udGV4dC50cmFjZUZsYWdzKSA9PT0gYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEXG4gICAgICAgICAgICAgICAgPyAnMSdcbiAgICAgICAgICAgICAgICA6ICcwJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICAgICAgY29uc3QgdHJhY2VJZCA9IGdldFRyYWNlSWQoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgY29uc3Qgc3BhbklkID0gZ2V0U3BhbklkKGNhcnJpZXIsIGdldHRlcik7XG4gICAgICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBnZXRUcmFjZUZsYWdzKGNhcnJpZXIsIGdldHRlcik7XG4gICAgICAgIGNvbnN0IGRlYnVnID0gZ2V0RGVidWcoY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgaWYgKCgwLCBhcGlfMS5pc1ZhbGlkVHJhY2VJZCkodHJhY2VJZCkgJiZcbiAgICAgICAgICAgICgwLCBhcGlfMS5pc1ZhbGlkU3BhbklkKShzcGFuSWQpICYmXG4gICAgICAgICAgICBpc1ZhbGlkU2FtcGxlZFZhbHVlKHRyYWNlRmxhZ3MpKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5zZXRWYWx1ZShjb21tb25fMS5CM19ERUJVR19GTEFHX0tFWSwgZGVidWcpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaV8xLnRyYWNlLnNldFNwYW5Db250ZXh0KGNvbnRleHQsIHtcbiAgICAgICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgICAgIHNwYW5JZCxcbiAgICAgICAgICAgICAgICBpc1JlbW90ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cmFjZUZsYWdzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGNvbnN0YW50c18xLlhfQjNfVFJBQ0VfSUQsXG4gICAgICAgICAgICBjb25zdGFudHNfMS5YX0IzX1NQQU5fSUQsXG4gICAgICAgICAgICBjb25zdGFudHNfMS5YX0IzX0ZMQUdTLFxuICAgICAgICAgICAgY29uc3RhbnRzXzEuWF9CM19TQU1QTEVELFxuICAgICAgICAgICAgY29uc3RhbnRzXzEuWF9CM19QQVJFTlRfU1BBTl9JRCxcbiAgICAgICAgXTtcbiAgICB9XG59XG5leHBvcnRzLkIzTXVsdGlQcm9wYWdhdG9yID0gQjNNdWx0aVByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CM011bHRpUHJvcGFnYXRvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQjNTaW5nbGVQcm9wYWdhdG9yID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBjb21tb25fMSA9IHJlcXVpcmUoXCIuL2NvbW1vblwiKTtcbmNvbnN0IGNvbnN0YW50c18xID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuY29uc3QgQjNfQ09OVEVYVF9SRUdFWCA9IC8oKD86WzAtOWEtZl17MTZ9KXsxLDJ9KS0oWzAtOWEtZl17MTZ9KSg/Oi0oWzAxZF0oPyFbMC05YS1mXSkpKT8oPzotKFswLTlhLWZdezE2fSkpPy87XG5jb25zdCBQQURESU5HID0gJzAnLnJlcGVhdCgxNik7XG5jb25zdCBTQU1QTEVEX1ZBTFVFUyA9IG5ldyBTZXQoWydkJywgJzEnXSk7XG5jb25zdCBERUJVR19TVEFURSA9ICdkJztcbmZ1bmN0aW9uIGNvbnZlcnRUb1RyYWNlSWQxMjgodHJhY2VJZCkge1xuICAgIHJldHVybiB0cmFjZUlkLmxlbmd0aCA9PT0gMzIgPyB0cmFjZUlkIDogYCR7UEFERElOR30ke3RyYWNlSWR9YDtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb1RyYWNlRmxhZ3Moc2FtcGxpbmdTdGF0ZSkge1xuICAgIGlmIChzYW1wbGluZ1N0YXRlICYmIFNBTVBMRURfVkFMVUVTLmhhcyhzYW1wbGluZ1N0YXRlKSkge1xuICAgICAgICByZXR1cm4gYXBpXzEuVHJhY2VGbGFncy5TQU1QTEVEO1xuICAgIH1cbiAgICByZXR1cm4gYXBpXzEuVHJhY2VGbGFncy5OT05FO1xufVxuLyoqXG4gKiBQcm9wYWdhdG9yIGZvciB0aGUgQjMgc2luZ2xlLWhlYWRlciBIVFRQIGZvcm1hdC5cbiAqIEJhc2VkIG9uOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnppcGtpbi9iMy1wcm9wYWdhdGlvblxuICovXG5jbGFzcyBCM1NpbmdsZVByb3BhZ2F0b3Ige1xuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGlfMS50cmFjZS5nZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcGFuQ29udGV4dCB8fFxuICAgICAgICAgICAgISgwLCBhcGlfMS5pc1NwYW5Db250ZXh0VmFsaWQpKHNwYW5Db250ZXh0KSB8fFxuICAgICAgICAgICAgKDAsIGNvcmVfMS5pc1RyYWNpbmdTdXBwcmVzc2VkKShjb250ZXh0KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2FtcGxpbmdTdGF0ZSA9IGNvbnRleHQuZ2V0VmFsdWUoY29tbW9uXzEuQjNfREVCVUdfRkxBR19LRVkpIHx8IHNwYW5Db250ZXh0LnRyYWNlRmxhZ3MgJiAweDE7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7c3BhbkNvbnRleHQudHJhY2VJZH0tJHtzcGFuQ29udGV4dC5zcGFuSWR9LSR7c2FtcGxpbmdTdGF0ZX1gO1xuICAgICAgICBzZXR0ZXIuc2V0KGNhcnJpZXIsIGNvbnN0YW50c18xLkIzX0NPTlRFWFRfSEVBREVSLCB2YWx1ZSk7XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgY29uc3RhbnRzXzEuQjNfQ09OVEVYVF9IRUFERVIpO1xuICAgICAgICBjb25zdCBiM0NvbnRleHQgPSBBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXI7XG4gICAgICAgIGlmICh0eXBlb2YgYjNDb250ZXh0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCBtYXRjaCA9IGIzQ29udGV4dC5tYXRjaChCM19DT05URVhUX1JFR0VYKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICBjb25zdCBbLCBleHRyYWN0ZWRUcmFjZUlkLCBzcGFuSWQsIHNhbXBsaW5nU3RhdGVdID0gbWF0Y2g7XG4gICAgICAgIGNvbnN0IHRyYWNlSWQgPSBjb252ZXJ0VG9UcmFjZUlkMTI4KGV4dHJhY3RlZFRyYWNlSWQpO1xuICAgICAgICBpZiAoISgwLCBhcGlfMS5pc1ZhbGlkVHJhY2VJZCkodHJhY2VJZCkgfHwgISgwLCBhcGlfMS5pc1ZhbGlkU3BhbklkKShzcGFuSWQpKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHRyYWNlRmxhZ3MgPSBjb252ZXJ0VG9UcmFjZUZsYWdzKHNhbXBsaW5nU3RhdGUpO1xuICAgICAgICBpZiAoc2FtcGxpbmdTdGF0ZSA9PT0gREVCVUdfU1RBVEUpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnNldFZhbHVlKGNvbW1vbl8xLkIzX0RFQlVHX0ZMQUdfS0VZLCBzYW1wbGluZ1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpXzEudHJhY2Uuc2V0U3BhbkNvbnRleHQoY29udGV4dCwge1xuICAgICAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgICAgIHNwYW5JZCxcbiAgICAgICAgICAgIGlzUmVtb3RlOiB0cnVlLFxuICAgICAgICAgICAgdHJhY2VGbGFncyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIFtjb25zdGFudHNfMS5CM19DT05URVhUX0hFQURFUl07XG4gICAgfVxufVxuZXhwb3J0cy5CM1NpbmdsZVByb3BhZ2F0b3IgPSBCM1NpbmdsZVByb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CM1NpbmdsZVByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzSW5qZWN0RW5jb2RpbmcgPSB2b2lkIDA7XG4vKiogRW51bWVyYXRpb24gb2YgQjMgaW5qZWN0IGVuY29kaW5ncyAqL1xudmFyIEIzSW5qZWN0RW5jb2Rpbmc7XG4oZnVuY3Rpb24gKEIzSW5qZWN0RW5jb2RpbmcpIHtcbiAgICBCM0luamVjdEVuY29kaW5nW0IzSW5qZWN0RW5jb2RpbmdbXCJTSU5HTEVfSEVBREVSXCJdID0gMF0gPSBcIlNJTkdMRV9IRUFERVJcIjtcbiAgICBCM0luamVjdEVuY29kaW5nW0IzSW5qZWN0RW5jb2RpbmdbXCJNVUxUSV9IRUFERVJcIl0gPSAxXSA9IFwiTVVMVElfSEVBREVSXCI7XG59KShCM0luamVjdEVuY29kaW5nID0gZXhwb3J0cy5CM0luamVjdEVuY29kaW5nIHx8IChleHBvcnRzLkIzSW5qZWN0RW5jb2RpbmcgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzUHJvcGFnYXRvciA9IHZvaWQgMDtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgQjNNdWx0aVByb3BhZ2F0b3JfMSA9IHJlcXVpcmUoXCIuL0IzTXVsdGlQcm9wYWdhdG9yXCIpO1xuY29uc3QgQjNTaW5nbGVQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9CM1NpbmdsZVByb3BhZ2F0b3JcIik7XG5jb25zdCBjb25zdGFudHNfMSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogUHJvcGFnYXRvciB0aGF0IGV4dHJhY3RzIEIzIGNvbnRleHQgaW4gYm90aCBzaW5nbGUgYW5kIG11bHRpLWhlYWRlciB2YXJpYW50cyxcbiAqIHdpdGggY29uZmlndXJhYmxlIGluamVjdGlvbiBmb3JtYXQgZGVmYXVsdGluZyB0byBCMyBzaW5nbGUtaGVhZGVyLiBEdWUgdG9cbiAqIHRoZSBhc3ltbWV0cnkgaW4gaW5qZWN0aW9uIGFuZCBleHRyYWN0aW9uIGZvcm1hdHMgdGhpcyBpcyBub3Qgc3VpdGFibGUgdG9cbiAqIGJlIGltcGxlbWVudGVkIGFzIGEgY29tcG9zaXRlIHByb3BhZ2F0b3IuXG4gKiBCYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL29wZW56aXBraW4vYjMtcHJvcGFnYXRpb25cbiAqL1xuY2xhc3MgQjNQcm9wYWdhdG9yIHtcbiAgICBfYjNNdWx0aVByb3BhZ2F0b3IgPSBuZXcgQjNNdWx0aVByb3BhZ2F0b3JfMS5CM011bHRpUHJvcGFnYXRvcigpO1xuICAgIF9iM1NpbmdsZVByb3BhZ2F0b3IgPSBuZXcgQjNTaW5nbGVQcm9wYWdhdG9yXzEuQjNTaW5nbGVQcm9wYWdhdG9yKCk7XG4gICAgX2luamVjdDtcbiAgICBfZmllbGRzO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIGlmIChjb25maWcuaW5qZWN0RW5jb2RpbmcgPT09IHR5cGVzXzEuQjNJbmplY3RFbmNvZGluZy5NVUxUSV9IRUFERVIpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdCA9IHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmluamVjdDtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyA9IHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmZpZWxkcygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0ID0gdGhpcy5fYjNTaW5nbGVQcm9wYWdhdG9yLmluamVjdDtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyA9IHRoaXMuX2IzU2luZ2xlUHJvcGFnYXRvci5maWVsZHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbmplY3QoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGlmICgoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5qZWN0KGNvbnRleHQsIGNhcnJpZXIsIHNldHRlcik7XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGdldHRlci5nZXQoY2FycmllciwgY29uc3RhbnRzXzEuQjNfQ09OVEVYVF9IRUFERVIpO1xuICAgICAgICBjb25zdCBiM0NvbnRleHQgPSBBcnJheS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXJbMF0gOiBoZWFkZXI7XG4gICAgICAgIGlmIChiM0NvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9iM1NpbmdsZVByb3BhZ2F0b3IuZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2IzTXVsdGlQcm9wYWdhdG9yLmV4dHJhY3QoY29udGV4dCwgY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxufVxuZXhwb3J0cy5CM1Byb3BhZ2F0b3IgPSBCM1Byb3BhZ2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CM1Byb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkIzSW5qZWN0RW5jb2RpbmcgPSBleHBvcnRzLlhfQjNfVFJBQ0VfSUQgPSBleHBvcnRzLlhfQjNfU1BBTl9JRCA9IGV4cG9ydHMuWF9CM19TQU1QTEVEID0gZXhwb3J0cy5YX0IzX1BBUkVOVF9TUEFOX0lEID0gZXhwb3J0cy5YX0IzX0ZMQUdTID0gZXhwb3J0cy5CM19DT05URVhUX0hFQURFUiA9IGV4cG9ydHMuQjNQcm9wYWdhdG9yID0gdm9pZCAwO1xudmFyIEIzUHJvcGFnYXRvcl8xID0gcmVxdWlyZShcIi4vQjNQcm9wYWdhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQjNQcm9wYWdhdG9yXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCM1Byb3BhZ2F0b3JfMS5CM1Byb3BhZ2F0b3I7IH0gfSk7XG52YXIgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCM19DT05URVhUX0hFQURFUlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuQjNfQ09OVEVYVF9IRUFERVI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYX0IzX0ZMQUdTXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5YX0IzX0ZMQUdTOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWF9CM19QQVJFTlRfU1BBTl9JRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuWF9CM19QQVJFTlRfU1BBTl9JRDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlhfQjNfU0FNUExFRFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uc3RhbnRzXzEuWF9CM19TQU1QTEVEOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiWF9CM19TUEFOX0lEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5YX0IzX1NQQU5fSUQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYX0IzX1RSQUNFX0lEXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25zdGFudHNfMS5YX0IzX1RSQUNFX0lEOyB9IH0pO1xudmFyIHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkIzSW5qZWN0RW5jb2RpbmdcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVzXzEuQjNJbmplY3RFbmNvZGluZzsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5KYWVnZXJQcm9wYWdhdG9yID0gZXhwb3J0cy5VQkVSX0JBR0dBR0VfSEVBREVSX1BSRUZJWCA9IGV4cG9ydHMuVUJFUl9UUkFDRV9JRF9IRUFERVIgPSB2b2lkIDA7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvY29yZVwiKTtcbmV4cG9ydHMuVUJFUl9UUkFDRV9JRF9IRUFERVIgPSAndWJlci10cmFjZS1pZCc7XG5leHBvcnRzLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYID0gJ3ViZXJjdHgnO1xuLyoqXG4gKiBQcm9wYWdhdGVzIHtAbGluayBTcGFuQ29udGV4dH0gdGhyb3VnaCBUcmFjZSBDb250ZXh0IGZvcm1hdCBwcm9wYWdhdGlvbi5cbiAqIHt0cmFjZS1pZH06e3NwYW4taWR9OntwYXJlbnQtc3Bhbi1pZH06e2ZsYWdzfVxuICoge3RyYWNlLWlkfVxuICogNjQtYml0IG9yIDEyOC1iaXQgcmFuZG9tIG51bWJlciBpbiBiYXNlMTYgZm9ybWF0LlxuICogQ2FuIGJlIHZhcmlhYmxlIGxlbmd0aCwgc2hvcnRlciB2YWx1ZXMgYXJlIDAtcGFkZGVkIG9uIHRoZSBsZWZ0LlxuICogVmFsdWUgb2YgMCBpcyBpbnZhbGlkLlxuICoge3NwYW4taWR9XG4gKiA2NC1iaXQgcmFuZG9tIG51bWJlciBpbiBiYXNlMTYgZm9ybWF0LlxuICoge3BhcmVudC1zcGFuLWlkfVxuICogU2V0IHRvIDAgYmVjYXVzZSB0aGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuXG4gKiB7ZmxhZ3N9XG4gKiBPbmUgYnl0ZSBiaXRtYXAsIGFzIHR3byBoZXggZGlnaXRzLlxuICogSW5zcGlyZWQgYnkgamFlZ2VyLWNsaWVudC1ub2RlIHByb2plY3QuXG4gKi9cbmNsYXNzIEphZWdlclByb3BhZ2F0b3Ige1xuICAgIF9qYWVnZXJUcmFjZUhlYWRlcjtcbiAgICBfamFlZ2VyQmFnZ2FnZUhlYWRlclByZWZpeDtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9qYWVnZXJUcmFjZUhlYWRlciA9IGNvbmZpZztcbiAgICAgICAgICAgIHRoaXMuX2phZWdlckJhZ2dhZ2VIZWFkZXJQcmVmaXggPSBleHBvcnRzLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5famFlZ2VyVHJhY2VIZWFkZXIgPVxuICAgICAgICAgICAgICAgIGNvbmZpZz8uY3VzdG9tVHJhY2VIZWFkZXIgfHwgZXhwb3J0cy5VQkVSX1RSQUNFX0lEX0hFQURFUjtcbiAgICAgICAgICAgIHRoaXMuX2phZWdlckJhZ2dhZ2VIZWFkZXJQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNvbmZpZz8uY3VzdG9tQmFnZ2FnZUhlYWRlclByZWZpeCB8fCBleHBvcnRzLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBhcGlfMS50cmFjZS5nZXRTcGFuQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZSA9IGFwaV8xLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2UoY29udGV4dCk7XG4gICAgICAgIGlmIChzcGFuQ29udGV4dCAmJiAoMCwgY29yZV8xLmlzVHJhY2luZ1N1cHByZXNzZWQpKGNvbnRleHQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgdHJhY2VGbGFncyA9IGAwJHsoc3BhbkNvbnRleHQudHJhY2VGbGFncyB8fCBhcGlfMS5UcmFjZUZsYWdzLk5PTkUpLnRvU3RyaW5nKDE2KX1gO1xuICAgICAgICAgICAgc2V0dGVyLnNldChjYXJyaWVyLCB0aGlzLl9qYWVnZXJUcmFjZUhlYWRlciwgYCR7c3BhbkNvbnRleHQudHJhY2VJZH06JHtzcGFuQ29udGV4dC5zcGFuSWR9OjA6JHt0cmFjZUZsYWdzfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYWdnYWdlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBiYWdnYWdlLmdldEFsbEVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIHNldHRlci5zZXQoY2FycmllciwgYCR7dGhpcy5famFlZ2VyQmFnZ2FnZUhlYWRlclByZWZpeH0tJHtrZXl9YCwgZW5jb2RlVVJJQ29tcG9uZW50KGVudHJ5LnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBjYXJyaWVyLCBnZXR0ZXIpIHtcbiAgICAgICAgY29uc3QgdWJlclRyYWNlSWRIZWFkZXIgPSBnZXR0ZXIuZ2V0KGNhcnJpZXIsIHRoaXMuX2phZWdlclRyYWNlSGVhZGVyKTtcbiAgICAgICAgY29uc3QgdWJlclRyYWNlSWQgPSBBcnJheS5pc0FycmF5KHViZXJUcmFjZUlkSGVhZGVyKVxuICAgICAgICAgICAgPyB1YmVyVHJhY2VJZEhlYWRlclswXVxuICAgICAgICAgICAgOiB1YmVyVHJhY2VJZEhlYWRlcjtcbiAgICAgICAgY29uc3QgYmFnZ2FnZVZhbHVlcyA9IGdldHRlclxuICAgICAgICAgICAgLmtleXMoY2FycmllcilcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKGAke3RoaXMuX2phZWdlckJhZ2dhZ2VIZWFkZXJQcmVmaXh9LWApKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXR0ZXIuZ2V0KGNhcnJpZXIsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleToga2V5LnN1YnN0cmluZyh0aGlzLl9qYWVnZXJCYWdnYWdlSGVhZGVyUHJlZml4Lmxlbmd0aCArIDEpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG5ld0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAvLyBpZiB0aGUgdHJhY2UgaWQgaGVhZGVyIGlzIHByZXNlbnQgYW5kIHZhbGlkLCBpbmplY3QgaXQgaW50byB0aGUgY29udGV4dFxuICAgICAgICBpZiAodHlwZW9mIHViZXJUcmFjZUlkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qgc3BhbkNvbnRleHQgPSBkZXNlcmlhbGl6ZVNwYW5Db250ZXh0KHViZXJUcmFjZUlkKTtcbiAgICAgICAgICAgIGlmIChzcGFuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSBhcGlfMS50cmFjZS5zZXRTcGFuQ29udGV4dChuZXdDb250ZXh0LCBzcGFuQ29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhZ2dhZ2VWYWx1ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIG5ld0NvbnRleHQ7XG4gICAgICAgIC8vIGlmIGJhZ2dhZ2UgdmFsdWVzIGFyZSBwcmVzZW50LCBpbmplY3QgaXQgaW50byB0aGUgY3VycmVudCBiYWdnYWdlXG4gICAgICAgIGxldCBjdXJyZW50QmFnZ2FnZSA9IGFwaV8xLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2UoY29udGV4dCkgPz8gYXBpXzEucHJvcGFnYXRpb24uY3JlYXRlQmFnZ2FnZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGJhZ2dhZ2VFbnRyeSBvZiBiYWdnYWdlVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoYmFnZ2FnZUVudHJ5LnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjdXJyZW50QmFnZ2FnZSA9IGN1cnJlbnRCYWdnYWdlLnNldEVudHJ5KGJhZ2dhZ2VFbnRyeS5rZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGVjb2RlVVJJQ29tcG9uZW50KGJhZ2dhZ2VFbnRyeS52YWx1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdDb250ZXh0ID0gYXBpXzEucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShuZXdDb250ZXh0LCBjdXJyZW50QmFnZ2FnZSk7XG4gICAgICAgIHJldHVybiBuZXdDb250ZXh0O1xuICAgIH1cbiAgICBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5famFlZ2VyVHJhY2VIZWFkZXJdO1xuICAgIH1cbn1cbmV4cG9ydHMuSmFlZ2VyUHJvcGFnYXRvciA9IEphZWdlclByb3BhZ2F0b3I7XG5jb25zdCBWQUxJRF9IRVhfUkUgPSAvXlswLTlhLWZdezEsMn0kL2k7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXJpYWxpemVkU3RyaW5nIC0gYSBzZXJpYWxpemVkIHNwYW4gY29udGV4dC5cbiAqIEByZXR1cm4ge1NwYW5Db250ZXh0fSAtIHJldHVybnMgYSBzcGFuIGNvbnRleHQgcmVwcmVzZW50ZWQgYnkgdGhlIHNlcmlhbGl6ZWRTdHJpbmcuXG4gKiovXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVNwYW5Db250ZXh0KHNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gZGVjb2RlVVJJQ29tcG9uZW50KHNlcmlhbGl6ZWRTdHJpbmcpLnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhlYWRlcnMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBbX3RyYWNlSWQsIF9zcGFuSWQsICwgZmxhZ3NdID0gaGVhZGVycztcbiAgICBjb25zdCB0cmFjZUlkID0gX3RyYWNlSWQucGFkU3RhcnQoMzIsICcwJyk7XG4gICAgY29uc3Qgc3BhbklkID0gX3NwYW5JZC5wYWRTdGFydCgxNiwgJzAnKTtcbiAgICBjb25zdCB0cmFjZUZsYWdzID0gVkFMSURfSEVYX1JFLnRlc3QoZmxhZ3MpID8gcGFyc2VJbnQoZmxhZ3MsIDE2KSAmIDEgOiAxO1xuICAgIHJldHVybiB7IHRyYWNlSWQsIHNwYW5JZCwgaXNSZW1vdGU6IHRydWUsIHRyYWNlRmxhZ3MgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUphZWdlclByb3BhZ2F0b3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlVCRVJfVFJBQ0VfSURfSEVBREVSID0gZXhwb3J0cy5VQkVSX0JBR0dBR0VfSEVBREVSX1BSRUZJWCA9IGV4cG9ydHMuSmFlZ2VyUHJvcGFnYXRvciA9IHZvaWQgMDtcbnZhciBKYWVnZXJQcm9wYWdhdG9yXzEgPSByZXF1aXJlKFwiLi9KYWVnZXJQcm9wYWdhdG9yXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSmFlZ2VyUHJvcGFnYXRvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSmFlZ2VyUHJvcGFnYXRvcl8xLkphZWdlclByb3BhZ2F0b3I7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVQkVSX0JBR0dBR0VfSEVBREVSX1BSRUZJWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSmFlZ2VyUHJvcGFnYXRvcl8xLlVCRVJfQkFHR0FHRV9IRUFERVJfUFJFRklYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVUJFUl9UUkFDRV9JRF9IRUFERVJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEphZWdlclByb3BhZ2F0b3JfMS5VQkVSX1RSQUNFX0lEX0hFQURFUjsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRQcm9wYWdhdG9yRnJvbUVudiA9IGV4cG9ydHMuZ2V0U3BhblByb2Nlc3NvcnNGcm9tRW52ID0gZXhwb3J0cy5nZXRPdGxwUHJvdG9jb2xGcm9tRW52ID0gZXhwb3J0cy5maWx0ZXJCbGFua3NBbmROdWxscyA9IGV4cG9ydHMuZ2V0UmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52ID0gdm9pZCAwO1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBleHBvcnRlcl90cmFjZV9vdGxwX3Byb3RvXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1wcm90b1wiKTtcbmNvbnN0IGV4cG9ydGVyX3RyYWNlX290bHBfaHR0cF8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtaHR0cFwiKTtcbmNvbnN0IGV4cG9ydGVyX3RyYWNlX290bHBfZ3JwY18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtZ3JwY1wiKTtcbmNvbnN0IGV4cG9ydGVyX3ppcGtpbl8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXppcGtpblwiKTtcbmNvbnN0IHJlc291cmNlc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Jlc291cmNlc1wiKTtcbmNvbnN0IHNka190cmFjZV9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2VcIik7XG5jb25zdCBwcm9wYWdhdG9yX2IzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1iM1wiKTtcbmNvbnN0IHByb3BhZ2F0b3JfamFlZ2VyXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvcHJvcGFnYXRvci1qYWVnZXJcIik7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9FTlZJUk9OTUVOVCA9ICdlbnYnO1xuY29uc3QgUkVTT1VSQ0VfREVURUNUT1JfSE9TVCA9ICdob3N0JztcbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SX09TID0gJ29zJztcbmNvbnN0IFJFU09VUkNFX0RFVEVDVE9SX1BST0NFU1MgPSAncHJvY2Vzcyc7XG5jb25zdCBSRVNPVVJDRV9ERVRFQ1RPUl9TRVJWSUNFX0lOU1RBTkNFX0lEID0gJ3NlcnZpY2VpbnN0YW5jZSc7XG5mdW5jdGlvbiBnZXRSZXNvdXJjZURldGVjdG9yc0Zyb21FbnYoKSB7XG4gICAgLy8gV2hlbiB1cGRhdGluZyB0aGlzIGxpc3QsIG1ha2Ugc3VyZSB0byBhbHNvIHVwZGF0ZSB0aGUgc2VjdGlvbiBgcmVzb3VyY2VEZXRlY3RvcnNgIG9uIFJFQURNRS5cbiAgICBjb25zdCByZXNvdXJjZURldGVjdG9ycyA9IG5ldyBNYXAoW1xuICAgICAgICBbUkVTT1VSQ0VfREVURUNUT1JfRU5WSVJPTk1FTlQsIHJlc291cmNlc18xLmVudkRldGVjdG9yXSxcbiAgICAgICAgW1JFU09VUkNFX0RFVEVDVE9SX0hPU1QsIHJlc291cmNlc18xLmhvc3REZXRlY3Rvcl0sXG4gICAgICAgIFtSRVNPVVJDRV9ERVRFQ1RPUl9PUywgcmVzb3VyY2VzXzEub3NEZXRlY3Rvcl0sXG4gICAgICAgIFtSRVNPVVJDRV9ERVRFQ1RPUl9TRVJWSUNFX0lOU1RBTkNFX0lELCByZXNvdXJjZXNfMS5zZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yXSxcbiAgICAgICAgW1JFU09VUkNFX0RFVEVDVE9SX1BST0NFU1MsIHJlc291cmNlc18xLnByb2Nlc3NEZXRlY3Rvcl0sXG4gICAgXSk7XG4gICAgY29uc3QgcmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52ID0gKDAsIGNvcmVfMS5nZXRTdHJpbmdMaXN0RnJvbUVudikoJ09URUxfTk9ERV9SRVNPVVJDRV9ERVRFQ1RPUlMnKSA/PyBbJ2FsbCddO1xuICAgIGlmIChyZXNvdXJjZURldGVjdG9yc0Zyb21FbnYuaW5jbHVkZXMoJ2FsbCcpKSB7XG4gICAgICAgIHJldHVybiBbLi4ucmVzb3VyY2VEZXRlY3RvcnMudmFsdWVzKCldLmZsYXQoKTtcbiAgICB9XG4gICAgaWYgKHJlc291cmNlRGV0ZWN0b3JzRnJvbUVudi5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlRGV0ZWN0b3JzRnJvbUVudi5mbGF0TWFwKGRldGVjdG9yID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VEZXRlY3RvciA9IHJlc291cmNlRGV0ZWN0b3JzLmdldChkZXRlY3Rvcik7XG4gICAgICAgIGlmICghcmVzb3VyY2VEZXRlY3Rvcikge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBJbnZhbGlkIHJlc291cmNlIGRldGVjdG9yIFwiJHtkZXRlY3Rvcn1cIiBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE9URUxfTk9ERV9SRVNPVVJDRV9ERVRFQ1RPUlNgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb3VyY2VEZXRlY3RvciB8fCBbXTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZ2V0UmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52ID0gZ2V0UmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52O1xuZnVuY3Rpb24gZmlsdGVyQmxhbmtzQW5kTnVsbHMobGlzdCkge1xuICAgIHJldHVybiBsaXN0Lm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKS5maWx0ZXIocyA9PiBzICE9PSAnbnVsbCcgJiYgcyAhPT0gJycpO1xufVxuZXhwb3J0cy5maWx0ZXJCbGFua3NBbmROdWxscyA9IGZpbHRlckJsYW5rc0FuZE51bGxzO1xuZnVuY3Rpb24gZ2V0T3RscFByb3RvY29sRnJvbUVudigpIHtcbiAgICByZXR1cm4gKCgwLCBjb3JlXzEuZ2V0U3RyaW5nRnJvbUVudikoJ09URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfUFJPVE9DT0wnKSA/P1xuICAgICAgICAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX0VYUE9SVEVSX09UTFBfUFJPVE9DT0wnKSA/P1xuICAgICAgICAnaHR0cC9wcm90b2J1ZicpO1xufVxuZXhwb3J0cy5nZXRPdGxwUHJvdG9jb2xGcm9tRW52ID0gZ2V0T3RscFByb3RvY29sRnJvbUVudjtcbmZ1bmN0aW9uIGdldE90bHBFeHBvcnRlckZyb21FbnYoKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBnZXRPdGxwUHJvdG9jb2xGcm9tRW52KCk7XG4gICAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgICAgICBjYXNlICdncnBjJzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgZXhwb3J0ZXJfdHJhY2Vfb3RscF9ncnBjXzEuT1RMUFRyYWNlRXhwb3J0ZXIoKTtcbiAgICAgICAgY2FzZSAnaHR0cC9qc29uJzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgZXhwb3J0ZXJfdHJhY2Vfb3RscF9odHRwXzEuT1RMUFRyYWNlRXhwb3J0ZXIoKTtcbiAgICAgICAgY2FzZSAnaHR0cC9wcm90b2J1Zic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGV4cG9ydGVyX3RyYWNlX290bHBfcHJvdG9fMS5PVExQVHJhY2VFeHBvcnRlcigpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbnN1cHBvcnRlZCBPVExQIHRyYWNlcyBwcm90b2NvbDogJHtwcm90b2NvbH0uIFVzaW5nIGh0dHAvcHJvdG9idWYuYCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGV4cG9ydGVyX3RyYWNlX290bHBfcHJvdG9fMS5PVExQVHJhY2VFeHBvcnRlcigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEphZWdlckV4cG9ydGVyKCkge1xuICAgIC8vIFRoZSBKYWVnZXJFeHBvcnRlciBkb2VzIG5vdCBzdXBwb3J0IGJlaW5nIHJlcXVpcmVkIGluIGJ1bmRsZWRcbiAgICAvLyBlbnZpcm9ubWVudHMuIEJ5IGRlbGF5aW5nIHRoZSByZXF1aXJlIHN0YXRlbWVudCB0byBoZXJlLCB3ZSBvbmx5IGNyYXNoIHdoZW5cbiAgICAvLyB0aGUgZXhwb3J0ZXIgaXMgYWN0dWFsbHkgdXNlZCBpbiBzdWNoIGFuIGVudmlyb25tZW50LlxuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgIGNvbnN0IHsgSmFlZ2VyRXhwb3J0ZXIgfSA9IHJlcXVpcmUoJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWphZWdlcicpO1xuICAgICAgICByZXR1cm4gbmV3IEphZWdlckV4cG9ydGVyKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGluc3RhbnRpYXRlIEphZWdlckV4cG9ydGVyLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byB0aGUgSmFlZ2VyRXhwb3J0ZXIncyBsYWNrIG9mIHN1cHBvcnQgZm9yIGJ1bmRsaW5nLiBJZiBwb3NzaWJsZSwgdXNlIEBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8gaW5zdGVhZC4gT3JpZ2luYWwgRXJyb3I6ICR7ZX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTcGFuUHJvY2Vzc29yc0Zyb21FbnYoKSB7XG4gICAgY29uc3QgZXhwb3J0ZXJzTWFwID0gbmV3IE1hcChbXG4gICAgICAgIFsnb3RscCcsICgpID0+IGdldE90bHBFeHBvcnRlckZyb21FbnYoKV0sXG4gICAgICAgIFsnemlwa2luJywgKCkgPT4gbmV3IGV4cG9ydGVyX3ppcGtpbl8xLlppcGtpbkV4cG9ydGVyKCldLFxuICAgICAgICBbJ2NvbnNvbGUnLCAoKSA9PiBuZXcgc2RrX3RyYWNlX2Jhc2VfMS5Db25zb2xlU3BhbkV4cG9ydGVyKCldLFxuICAgICAgICBbJ2phZWdlcicsICgpID0+IGdldEphZWdlckV4cG9ydGVyKCldLFxuICAgIF0pO1xuICAgIGNvbnN0IGV4cG9ydGVycyA9IFtdO1xuICAgIGNvbnN0IHByb2Nlc3NvcnMgPSBbXTtcbiAgICBsZXQgdHJhY2VFeHBvcnRlcnNMaXN0ID0gZmlsdGVyQmxhbmtzQW5kTnVsbHMoQXJyYXkuZnJvbShuZXcgU2V0KCgwLCBjb3JlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnYpKCdPVEVMX1RSQUNFU19FWFBPUlRFUicpKSkpO1xuICAgIGlmICh0cmFjZUV4cG9ydGVyc0xpc3RbMF0gPT09ICdub25lJykge1xuICAgICAgICBhcGlfMS5kaWFnLndhcm4oJ09URUxfVFJBQ0VTX0VYUE9SVEVSIGNvbnRhaW5zIFwibm9uZVwiLiBTREsgd2lsbCBub3QgYmUgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHRyYWNlRXhwb3J0ZXJzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnT1RFTF9UUkFDRVNfRVhQT1JURVIgaXMgZW1wdHkuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICAgICAgdHJhY2VFeHBvcnRlcnNMaXN0ID0gWydvdGxwJ107XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyYWNlRXhwb3J0ZXJzTGlzdC5sZW5ndGggPiAxICYmXG4gICAgICAgIHRyYWNlRXhwb3J0ZXJzTGlzdC5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignT1RFTF9UUkFDRVNfRVhQT1JURVIgY29udGFpbnMgXCJub25lXCIgYWxvbmcgd2l0aCBvdGhlciBleHBvcnRlcnMuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICAgICAgdHJhY2VFeHBvcnRlcnNMaXN0ID0gWydvdGxwJ107XG4gICAgfVxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0cmFjZUV4cG9ydGVyc0xpc3QpIHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZXIgPSBleHBvcnRlcnNNYXAuZ2V0KG5hbWUpPy4oKTtcbiAgICAgICAgaWYgKGV4cG9ydGVyKSB7XG4gICAgICAgICAgICBleHBvcnRlcnMucHVzaChleHBvcnRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oYFVucmVjb2duaXplZCBPVEVMX1RSQUNFU19FWFBPUlRFUiB2YWx1ZTogJHtuYW1lfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGV4cCBvZiBleHBvcnRlcnMpIHtcbiAgICAgICAgaWYgKGV4cCBpbnN0YW5jZW9mIHNka190cmFjZV9iYXNlXzEuQ29uc29sZVNwYW5FeHBvcnRlcikge1xuICAgICAgICAgICAgcHJvY2Vzc29ycy5wdXNoKG5ldyBzZGtfdHJhY2VfYmFzZV8xLlNpbXBsZVNwYW5Qcm9jZXNzb3IoZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzb3JzLnB1c2gobmV3IHNka190cmFjZV9iYXNlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yKGV4cCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChleHBvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFwaV8xLmRpYWcud2FybignVW5hYmxlIHRvIHNldCB1cCB0cmFjZSBleHBvcnRlcihzKSBkdWUgdG8gaW52YWxpZCBleHBvcnRlciBhbmQvb3IgcHJvdG9jb2wgdmFsdWVzLicpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzc29ycztcbn1cbmV4cG9ydHMuZ2V0U3BhblByb2Nlc3NvcnNGcm9tRW52ID0gZ2V0U3BhblByb2Nlc3NvcnNGcm9tRW52O1xuLyoqXG4gKiBHZXQgYSBwcm9wYWdhdG9yIGFzIGRlZmluZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BhZ2F0b3JGcm9tRW52KCkge1xuICAgIC8vIEVtcHR5IGFuZCB1bmRlZmluZWQgTVVTVCBiZSB0cmVhdGVkIGVxdWFsLlxuICAgIGNvbnN0IHByb3BhZ2F0b3JzRW52VmFyVmFsdWUgPSAoMCwgY29yZV8xLmdldFN0cmluZ0xpc3RGcm9tRW52KSgnT1RFTF9QUk9QQUdBVE9SUycpO1xuICAgIGlmIChwcm9wYWdhdG9yc0VudlZhclZhbHVlID09IG51bGwpIHtcbiAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCB0byBmYWxsIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBub3RlOiB0aGlzIG9ubHkgY29udGFpbnMgc3BlY2lmaWNhdGlvbiByZXF1aXJlZCBwcm9wYWdhdG9ycyB0aGF0IGFyZSBhY3R1YWxseSBob3N0ZWQgaW4gdGhpcyByZXBvLlxuICAgIC8vIEFueSBvdGhlciBwcm9wYWdhdG9ycyAobGlrZSBhd3MsIGF3cy1sYW1iZGEsIHNob3VsZCBnbyBpbnRvIGBAb3BlbnRlbGVtZXRyeS9hdXRvLWNvbmZpZ3VyYXRpb24tcHJvcGFnYXRvcnNgIGluc3RlYWQpLlxuICAgIGNvbnN0IHByb3BhZ2F0b3JzRmFjdG9yeSA9IG5ldyBNYXAoW1xuICAgICAgICBbJ3RyYWNlY29udGV4dCcsICgpID0+IG5ldyBjb3JlXzEuVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcigpXSxcbiAgICAgICAgWydiYWdnYWdlJywgKCkgPT4gbmV3IGNvcmVfMS5XM0NCYWdnYWdlUHJvcGFnYXRvcigpXSxcbiAgICAgICAgWydiMycsICgpID0+IG5ldyBwcm9wYWdhdG9yX2IzXzEuQjNQcm9wYWdhdG9yKCldLFxuICAgICAgICBbXG4gICAgICAgICAgICAnYjNtdWx0aScsXG4gICAgICAgICAgICAoKSA9PiBuZXcgcHJvcGFnYXRvcl9iM18xLkIzUHJvcGFnYXRvcih7IGluamVjdEVuY29kaW5nOiBwcm9wYWdhdG9yX2IzXzEuQjNJbmplY3RFbmNvZGluZy5NVUxUSV9IRUFERVIgfSksXG4gICAgICAgIF0sXG4gICAgICAgIFsnamFlZ2VyJywgKCkgPT4gbmV3IHByb3BhZ2F0b3JfamFlZ2VyXzEuSmFlZ2VyUHJvcGFnYXRvcigpXSxcbiAgICBdKTtcbiAgICAvLyBWYWx1ZXMgTVVTVCBiZSBkZWR1cGxpY2F0ZWQgaW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSBQcm9wYWdhdG9yIG9ubHkgb25jZS5cbiAgICBjb25zdCB1bmlxdWVQcm9wYWdhdG9yTmFtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQocHJvcGFnYXRvcnNFbnZWYXJWYWx1ZSkpO1xuICAgIGNvbnN0IHByb3BhZ2F0b3JzID0gdW5pcXVlUHJvcGFnYXRvck5hbWVzLm1hcChuYW1lID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGFnYXRvciA9IHByb3BhZ2F0b3JzRmFjdG9yeS5nZXQobmFtZSk/LigpO1xuICAgICAgICBpZiAoIXByb3BhZ2F0b3IpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgUHJvcGFnYXRvciBcIiR7bmFtZX1cIiByZXF1ZXN0ZWQgdGhyb3VnaCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bmF2YWlsYWJsZS5gKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0b3I7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRQcm9wYWdhdG9ycyA9IHByb3BhZ2F0b3JzLnJlZHVjZSgobGlzdCwgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sIFtdKTtcbiAgICBpZiAodmFsaWRQcm9wYWdhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gbnVsbCB0byBzaWduYWwgdGhhdCB0aGUgZGVmYXVsdCBzaG91bGQgKipub3QqKiBiZSB1c2VkIGluIGl0cyBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHVuaXF1ZVByb3BhZ2F0b3JOYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkUHJvcGFnYXRvcnNbMF07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IGNvcmVfMS5Db21wb3NpdGVQcm9wYWdhdG9yKHtcbiAgICAgICAgICAgIHByb3BhZ2F0b3JzOiB2YWxpZFByb3BhZ2F0b3JzLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmdldFByb3BhZ2F0b3JGcm9tRW52ID0gZ2V0UHJvcGFnYXRvckZyb21FbnY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTm9kZVNESyA9IHZvaWQgMDtcbmNvbnN0IGFwaV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IGFwaV9sb2dzXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpLWxvZ3NcIik7XG5jb25zdCBpbnN0cnVtZW50YXRpb25fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb25cIik7XG5jb25zdCByZXNvdXJjZXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXNcIik7XG5jb25zdCBzZGtfbG9nc18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay1sb2dzXCIpO1xuY29uc3QgZXhwb3J0ZXJfbG9nc19vdGxwX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtaHR0cFwiKTtcbmNvbnN0IGV4cG9ydGVyX2xvZ3Nfb3RscF9ncnBjXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWdycGNcIik7XG5jb25zdCBleHBvcnRlcl9sb2dzX290bHBfcHJvdG9fMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1sb2dzLW90bHAtcHJvdG9cIik7XG5jb25zdCBleHBvcnRlcl9tZXRyaWNzX290bHBfZ3JwY18xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1ncnBjXCIpO1xuY29uc3QgZXhwb3J0ZXJfbWV0cmljc19vdGxwX3Byb3RvXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbWV0cmljcy1vdGxwLXByb3RvXCIpO1xuY29uc3QgZXhwb3J0ZXJfbWV0cmljc19vdGxwX2h0dHBfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1tZXRyaWNzLW90bHAtaHR0cFwiKTtcbmNvbnN0IGV4cG9ydGVyX3Byb21ldGhldXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci1wcm9tZXRoZXVzXCIpO1xuY29uc3Qgc2RrX21ldHJpY3NfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZGstbWV0cmljc1wiKTtcbmNvbnN0IHNka190cmFjZV9iYXNlXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2VcIik7XG5jb25zdCBzZGtfdHJhY2Vfbm9kZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Nkay10cmFjZS1ub2RlXCIpO1xuY29uc3Qgc2VtYW50aWNfY29udmVudGlvbnNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9uc1wiKTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9jb3JlXCIpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBAUmV0dXJucyBwYXJhbSB2YWx1ZSwgaWYgc2V0IGVsc2UgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUluTWlsbGlzKGVudk5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUludChwcm9jZXNzLmVudltlbnZOYW1lXSB8fCAnJykgfHwgZGVmYXVsdFZhbHVlO1xufVxuLyoqXG4gKlxuICogQHJldHVybnMgTWV0cmljUmVhZGVyW10gaWYgYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjb25maWd1cmVkXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZU1ldHJpY1Byb3ZpZGVyRnJvbUVudigpIHtcbiAgICBjb25zdCBtZXRyaWNSZWFkZXJzID0gW107XG4gICAgY29uc3QgZW5hYmxlZEV4cG9ydGVycyA9ICgwLCBjb3JlXzEuZ2V0U3RyaW5nTGlzdEZyb21FbnYpKCdPVEVMX01FVFJJQ1NfRVhQT1JURVInKTtcbiAgICBpZiAoIWVuYWJsZWRFeHBvcnRlcnMpIHtcbiAgICAgICAgcmV0dXJuIG1ldHJpY1JlYWRlcnM7XG4gICAgfVxuICAgIGlmIChlbmFibGVkRXhwb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdPVEVMX01FVFJJQ1NfRVhQT1JURVIgaXMgZW1wdHkuIFVzaW5nIGRlZmF1bHQgb3RscCBleHBvcnRlci4nKTtcbiAgICB9XG4gICAgaWYgKGVuYWJsZWRFeHBvcnRlcnMuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICBhcGlfMS5kaWFnLmluZm8oYE9URUxfTUVUUklDU19FWFBPUlRFUiBjb250YWlucyBcIm5vbmVcIi4gTWV0cmljIHByb3ZpZGVyIHdpbGwgbm90IGJlIGluaXRpYWxpemVkLmApO1xuICAgICAgICByZXR1cm4gbWV0cmljUmVhZGVycztcbiAgICB9XG4gICAgZW5hYmxlZEV4cG9ydGVycy5mb3JFYWNoKGV4cG9ydGVyID0+IHtcbiAgICAgICAgaWYgKGV4cG9ydGVyID09PSAnb3RscCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3RvY29sID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX01FVFJJQ1NfUFJPVE9DT0w/LnRyaW0oKSB8fFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9QUk9UT0NPTD8udHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0SW50ZXJ2YWxNaWxsaXMgPSBnZXRWYWx1ZUluTWlsbGlzKCdPVEVMX01FVFJJQ19FWFBPUlRfSU5URVJWQUwnLCA2MDAwMCk7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRUaW1lb3V0TWlsbGlzID0gZ2V0VmFsdWVJbk1pbGxpcygnT1RFTF9NRVRSSUNfRVhQT1JUX1RJTUVPVVQnLCAzMDAwMCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZ3JwYyc6XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY1JlYWRlcnMucHVzaChuZXcgc2RrX21ldHJpY3NfMS5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogbmV3IGV4cG9ydGVyX21ldHJpY3Nfb3RscF9ncnBjXzEuT1RMUE1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZXhwb3J0SW50ZXJ2YWxNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRUaW1lb3V0TWlsbGlzOiBleHBvcnRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHAvanNvbic6XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY1JlYWRlcnMucHVzaChuZXcgc2RrX21ldHJpY3NfMS5QZXJpb2RpY0V4cG9ydGluZ01ldHJpY1JlYWRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogbmV3IGV4cG9ydGVyX21ldHJpY3Nfb3RscF9odHRwXzEuT1RMUE1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZXhwb3J0SW50ZXJ2YWxNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRUaW1lb3V0TWlsbGlzOiBleHBvcnRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHAvcHJvdG9idWYnOlxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNSZWFkZXJzLnB1c2gobmV3IHNka19tZXRyaWNzXzEuUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG5ldyBleHBvcnRlcl9tZXRyaWNzX290bHBfcHJvdG9fMS5PVExQTWV0cmljRXhwb3J0ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEludGVydmFsTWlsbGlzOiBleHBvcnRJbnRlcnZhbE1pbGxpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydFRpbWVvdXRNaWxsaXM6IGV4cG9ydFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbnN1cHBvcnRlZCBPVExQIG1ldHJpY3MgcHJvdG9jb2w6IFwiJHtwcm90b2NvbH1cIi4gVXNpbmcgaHR0cC9wcm90b2J1Zi5gKTtcbiAgICAgICAgICAgICAgICAgICAgbWV0cmljUmVhZGVycy5wdXNoKG5ldyBzZGtfbWV0cmljc18xLlBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBuZXcgZXhwb3J0ZXJfbWV0cmljc19vdGxwX3Byb3RvXzEuT1RMUE1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZXhwb3J0SW50ZXJ2YWxNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRUaW1lb3V0TWlsbGlzOiBleHBvcnRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhwb3J0ZXIgPT09ICdjb25zb2xlJykge1xuICAgICAgICAgICAgbWV0cmljUmVhZGVycy5wdXNoKG5ldyBzZGtfbWV0cmljc18xLlBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyKHtcbiAgICAgICAgICAgICAgICBleHBvcnRlcjogbmV3IHNka19tZXRyaWNzXzEuQ29uc29sZU1ldHJpY0V4cG9ydGVyKCksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhwb3J0ZXIgPT09ICdwcm9tZXRoZXVzJykge1xuICAgICAgICAgICAgbWV0cmljUmVhZGVycy5wdXNoKG5ldyBleHBvcnRlcl9wcm9tZXRoZXVzXzEuUHJvbWV0aGV1c0V4cG9ydGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbnN1cHBvcnRlZCBPVEVMX01FVFJJQ1NfRVhQT1JURVIgdmFsdWU6IFwiJHtleHBvcnRlcn1cIi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6IG90bHAsIGNvbnNvbGUsIHByb21ldGhldXMsIG5vbmUuYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWV0cmljUmVhZGVycztcbn1cbmNsYXNzIE5vZGVTREsge1xuICAgIF90cmFjZXJQcm92aWRlckNvbmZpZztcbiAgICBfbG9nZ2VyUHJvdmlkZXJDb25maWc7XG4gICAgX21ldGVyUHJvdmlkZXJDb25maWc7XG4gICAgX2luc3RydW1lbnRhdGlvbnM7XG4gICAgX3Jlc291cmNlO1xuICAgIF9yZXNvdXJjZURldGVjdG9ycztcbiAgICBfYXV0b0RldGVjdFJlc291cmNlcztcbiAgICBfdHJhY2VyUHJvdmlkZXI7XG4gICAgX2xvZ2dlclByb3ZpZGVyO1xuICAgIF9tZXRlclByb3ZpZGVyO1xuICAgIF9zZXJ2aWNlTmFtZTtcbiAgICBfY29uZmlndXJhdGlvbjtcbiAgICBfZGlzYWJsZWQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IE5vZGVKUyBTREsgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uID0ge30pIHtcbiAgICAgICAgaWYgKCgwLCBjb3JlXzEuZ2V0Qm9vbGVhbkZyb21FbnYpKCdPVEVMX1NES19ESVNBQkxFRCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBGdW5jdGlvbnMgd2l0aCBwb3NzaWJsZSBzaWRlLWVmZmVjdHMgYXJlIHNldFxuICAgICAgICAgICAgLy8gdG8gbm8tb3AgdmlhIHRoZSBfZGlzYWJsZWQgZmxhZ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvZ0xldmVsID0gKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KSgnT1RFTF9MT0dfTEVWRUwnKTtcbiAgICAgICAgaWYgKGxvZ0xldmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuc2V0TG9nZ2VyKG5ldyBhcGlfMS5EaWFnQ29uc29sZUxvZ2dlcigpLCB7XG4gICAgICAgICAgICAgICAgbG9nTGV2ZWw6ICgwLCBjb3JlXzEuZGlhZ0xvZ0xldmVsRnJvbVN0cmluZykobG9nTGV2ZWwpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gY29uZmlndXJhdGlvbi5yZXNvdXJjZSA/PyAoMCwgcmVzb3VyY2VzXzEuZGVmYXVsdFJlc291cmNlKSgpO1xuICAgICAgICB0aGlzLl9hdXRvRGV0ZWN0UmVzb3VyY2VzID0gY29uZmlndXJhdGlvbi5hdXRvRGV0ZWN0UmVzb3VyY2VzID8/IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5fYXV0b0RldGVjdFJlc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VEZXRlY3RvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uLnJlc291cmNlRGV0ZWN0b3JzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlRGV0ZWN0b3JzID0gY29uZmlndXJhdGlvbi5yZXNvdXJjZURldGVjdG9ycztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX05PREVfUkVTT1VSQ0VfREVURUNUT1JTJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlRGV0ZWN0b3JzID0gKDAsIHV0aWxzXzEuZ2V0UmVzb3VyY2VEZXRlY3RvcnNGcm9tRW52KSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VEZXRlY3RvcnMgPSBbcmVzb3VyY2VzXzEuZW52RGV0ZWN0b3IsIHJlc291cmNlc18xLnByb2Nlc3NEZXRlY3RvciwgcmVzb3VyY2VzXzEuaG9zdERldGVjdG9yXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXJ2aWNlTmFtZSA9IGNvbmZpZ3VyYXRpb24uc2VydmljZU5hbWU7XG4gICAgICAgIC8vIElmIGEgdHJhY2VyIHByb3ZpZGVyIGNhbiBiZSBjcmVhdGVkIGZyb20gbWFudWFsIGNvbmZpZ3VyYXRpb24sIGNyZWF0ZSBpdFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi50cmFjZUV4cG9ydGVyIHx8XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLnNwYW5Qcm9jZXNzb3IgfHxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uc3BhblByb2Nlc3NvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNlclByb3ZpZGVyQ29uZmlnID0ge307XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5zYW1wbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJhY2VyUHJvdmlkZXJDb25maWcuc2FtcGxlciA9IGNvbmZpZ3VyYXRpb24uc2FtcGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uLnNwYW5MaW1pdHMpIHtcbiAgICAgICAgICAgICAgICB0cmFjZXJQcm92aWRlckNvbmZpZy5zcGFuTGltaXRzID0gY29uZmlndXJhdGlvbi5zcGFuTGltaXRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24uaWRHZW5lcmF0b3IpIHtcbiAgICAgICAgICAgICAgICB0cmFjZXJQcm92aWRlckNvbmZpZy5pZEdlbmVyYXRvciA9IGNvbmZpZ3VyYXRpb24uaWRHZW5lcmF0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5zcGFuUHJvY2Vzc29yKSB7XG4gICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKFwiVGhlICdzcGFuUHJvY2Vzc29yJyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnc3BhblByb2Nlc3NvcnMnIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BhblByb2Nlc3NvciA9IGNvbmZpZ3VyYXRpb24uc3BhblByb2Nlc3NvciA/P1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgbmV3IHNka190cmFjZV9iYXNlXzEuQmF0Y2hTcGFuUHJvY2Vzc29yKGNvbmZpZ3VyYXRpb24udHJhY2VFeHBvcnRlcik7XG4gICAgICAgICAgICBjb25zdCBzcGFuUHJvY2Vzc29ycyA9IGNvbmZpZ3VyYXRpb24uc3BhblByb2Nlc3NvcnMgPz8gW3NwYW5Qcm9jZXNzb3JdO1xuICAgICAgICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2VyQ29uZmlnOiB0cmFjZXJQcm92aWRlckNvbmZpZyxcbiAgICAgICAgICAgICAgICBzcGFuUHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgICBjb250ZXh0TWFuYWdlcjogY29uZmlndXJhdGlvbi5jb250ZXh0TWFuYWdlcixcbiAgICAgICAgICAgICAgICB0ZXh0TWFwUHJvcGFnYXRvcjogY29uZmlndXJhdGlvbi50ZXh0TWFwUHJvcGFnYXRvcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24ubG9nUmVjb3JkUHJvY2Vzc29ycykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbG9nUmVjb3JkUHJvY2Vzc29yczogY29uZmlndXJhdGlvbi5sb2dSZWNvcmRQcm9jZXNzb3JzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uLmxvZ1JlY29yZFByb2Nlc3Nvcikge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbG9nUmVjb3JkUHJvY2Vzc29yczogW2NvbmZpZ3VyYXRpb24ubG9nUmVjb3JkUHJvY2Vzc29yXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhcGlfMS5kaWFnLndhcm4oXCJUaGUgJ2xvZ1JlY29yZFByb2Nlc3Nvcicgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2xvZ1JlY29yZFByb2Nlc3NvcnMnIGluc3RlYWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVMb2dnZXJQcm92aWRlckZyb21FbnYoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5tZXRyaWNSZWFkZXIgfHwgY29uZmlndXJhdGlvbi52aWV3cykge1xuICAgICAgICAgICAgY29uc3QgbWV0ZXJQcm92aWRlckNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24ubWV0cmljUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgbWV0ZXJQcm92aWRlckNvbmZpZy5yZWFkZXIgPSBjb25maWd1cmF0aW9uLm1ldHJpY1JlYWRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uLnZpZXdzKSB7XG4gICAgICAgICAgICAgICAgbWV0ZXJQcm92aWRlckNvbmZpZy52aWV3cyA9IGNvbmZpZ3VyYXRpb24udmlld3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tZXRlclByb3ZpZGVyQ29uZmlnID0gbWV0ZXJQcm92aWRlckNvbmZpZztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnN0cnVtZW50YXRpb25zID0gY29uZmlndXJhdGlvbi5pbnN0cnVtZW50YXRpb25zPy5mbGF0KCkgPz8gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gY29uc3RydWN0IFNESyBjb21wb25lbnRzIGFuZCByZWdpc3RlciB0aGVtIHdpdGggdGhlIE9wZW5UZWxlbWV0cnkgQVBJLlxuICAgICAqL1xuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoMCwgaW5zdHJ1bWVudGF0aW9uXzEucmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKSh7XG4gICAgICAgICAgICBpbnN0cnVtZW50YXRpb25zOiB0aGlzLl9pbnN0cnVtZW50YXRpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuX2F1dG9EZXRlY3RSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRldGVjdG9yczogdGhpcy5fcmVzb3VyY2VEZXRlY3RvcnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSB0aGlzLl9yZXNvdXJjZS5tZXJnZSgoMCwgcmVzb3VyY2VzXzEuZGV0ZWN0UmVzb3VyY2VzKShpbnRlcm5hbENvbmZpZykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc291cmNlID1cbiAgICAgICAgICAgIHRoaXMuX3NlcnZpY2VOYW1lID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3Jlc291cmNlXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9yZXNvdXJjZS5tZXJnZSgoMCwgcmVzb3VyY2VzXzEucmVzb3VyY2VGcm9tQXR0cmlidXRlcykoe1xuICAgICAgICAgICAgICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5BVFRSX1NFUlZJQ0VfTkFNRV06IHRoaXMuX3NlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgY29uc3Qgc3BhblByb2Nlc3NvcnMgPSB0aGlzLl90cmFjZXJQcm92aWRlckNvbmZpZ1xuICAgICAgICAgICAgPyB0aGlzLl90cmFjZXJQcm92aWRlckNvbmZpZy5zcGFuUHJvY2Vzc29yc1xuICAgICAgICAgICAgOiAoMCwgdXRpbHNfMS5nZXRTcGFuUHJvY2Vzc29yc0Zyb21FbnYpKCk7XG4gICAgICAgIHRoaXMuX3RyYWNlclByb3ZpZGVyID0gbmV3IHNka190cmFjZV9ub2RlXzEuTm9kZVRyYWNlclByb3ZpZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UsXG4gICAgICAgICAgICBzcGFuUHJvY2Vzc29ycyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgaWYgdGhlcmUgaXMgYSBzcGFuIHByb2Nlc3NvclxuICAgICAgICBpZiAoc3BhblByb2Nlc3NvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXIucmVnaXN0ZXIoe1xuICAgICAgICAgICAgICAgIGNvbnRleHRNYW5hZ2VyOiB0aGlzLl90cmFjZXJQcm92aWRlckNvbmZpZz8uY29udGV4dE1hbmFnZXIgPz9cbiAgICAgICAgICAgICAgICAgICAgLy8gX3RyYWNlclByb3ZpZGVyQ29uZmlnIG1heSBiZSB1bmRlZmluZWQgaWYgdHJhY2Utc3BlY2lmaWMgc2V0dGluZ3MgYXJlIG5vdCBwcm92aWRlZCAtIGZhbGwgYmFjayB0byByYXcgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24/LmNvbnRleHRNYW5hZ2VyLFxuICAgICAgICAgICAgICAgIHByb3BhZ2F0b3I6IHRoaXMuX3RyYWNlclByb3ZpZGVyQ29uZmlnPy50ZXh0TWFwUHJvcGFnYXRvciA/P1xuICAgICAgICAgICAgICAgICAgICAoMCwgdXRpbHNfMS5nZXRQcm9wYWdhdG9yRnJvbUVudikoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9sb2dnZXJQcm92aWRlckNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgbG9nZ2VyUHJvdmlkZXIgPSBuZXcgc2RrX2xvZ3NfMS5Mb2dnZXJQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuX3Jlc291cmNlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NvcnM6IHRoaXMuX2xvZ2dlclByb3ZpZGVyQ29uZmlnLmxvZ1JlY29yZFByb2Nlc3NvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlclByb3ZpZGVyID0gbG9nZ2VyUHJvdmlkZXI7XG4gICAgICAgICAgICBhcGlfbG9nc18xLmxvZ3Muc2V0R2xvYmFsTG9nZ2VyUHJvdmlkZXIobG9nZ2VyUHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldHJpY1JlYWRlcnNGcm9tRW52ID0gY29uZmlndXJlTWV0cmljUHJvdmlkZXJGcm9tRW52KCk7XG4gICAgICAgIGlmICh0aGlzLl9tZXRlclByb3ZpZGVyQ29uZmlnIHx8IG1ldHJpY1JlYWRlcnNGcm9tRW52Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tZXRlclByb3ZpZGVyQ29uZmlnPy5yZWFkZXIpIHtcbiAgICAgICAgICAgICAgICByZWFkZXJzLnB1c2godGhpcy5fbWV0ZXJQcm92aWRlckNvbmZpZy5yZWFkZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlYWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbWV0cmljUmVhZGVyc0Zyb21FbnYuZm9yRWFjaCgocikgPT4gcmVhZGVycy5wdXNoKHIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1ldGVyUHJvdmlkZXIgPSBuZXcgc2RrX21ldHJpY3NfMS5NZXRlclByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgdmlld3M6IHRoaXMuX21ldGVyUHJvdmlkZXJDb25maWc/LnZpZXdzID8/IFtdLFxuICAgICAgICAgICAgICAgIHJlYWRlcnM6IHJlYWRlcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX21ldGVyUHJvdmlkZXIgPSBtZXRlclByb3ZpZGVyO1xuICAgICAgICAgICAgYXBpXzEubWV0cmljcy5zZXRHbG9iYWxNZXRlclByb3ZpZGVyKG1ldGVyUHJvdmlkZXIpO1xuICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZml4IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2lzc3Vlcy8zNjA5XG4gICAgICAgICAgICAvLyBJZiB0aGUgTWV0ZXJQcm92aWRlciBpcyBub3QgeWV0IHJlZ2lzdGVyZWQgd2hlbiBpbnN0cnVtZW50YXRpb25zIGFyZSByZWdpc3RlcmVkLCBhbGwgbWV0cmljcyBhcmUgZHJvcHBlZC5cbiAgICAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBvYnNvbGV0ZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWpzL2lzc3Vlcy8zNjIyIGlzIGltcGxlbWVudGVkLlxuICAgICAgICAgICAgZm9yIChjb25zdCBpbnN0cnVtZW50YXRpb24gb2YgdGhpcy5faW5zdHJ1bWVudGF0aW9ucykge1xuICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5zZXRNZXRlclByb3ZpZGVyKGFwaV8xLm1ldHJpY3MuZ2V0TWV0ZXJQcm92aWRlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzaHV0ZG93bigpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNlclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3RyYWNlclByb3ZpZGVyLnNodXRkb3duKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9sb2dnZXJQcm92aWRlcikge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9sb2dnZXJQcm92aWRlci5zaHV0ZG93bigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbWV0ZXJQcm92aWRlcikge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9tZXRlclByb3ZpZGVyLnNodXRkb3duKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgICAvLyByZXR1cm4gdm9pZCBpbnN0ZWFkIG9mIHRoZSBhcnJheSBmcm9tIFByb21pc2UuYWxsXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7IH0pKTtcbiAgICB9XG4gICAgY29uZmlndXJlTG9nZ2VyUHJvdmlkZXJGcm9tRW52KCkge1xuICAgICAgICBjb25zdCBlbmFibGVkRXhwb3J0ZXJzID0gKDAsIGNvcmVfMS5nZXRTdHJpbmdMaXN0RnJvbUVudikoJ09URUxfTE9HU19FWFBPUlRFUicpID8/IFtdO1xuICAgICAgICBpZiAoZW5hYmxlZEV4cG9ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ09URUxfTE9HU19FWFBPUlRFUiBpcyBlbXB0eS4gVXNpbmcgZGVmYXVsdCBvdGxwIGV4cG9ydGVyLicpO1xuICAgICAgICAgICAgZW5hYmxlZEV4cG9ydGVycy5wdXNoKCdvdGxwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuYWJsZWRFeHBvcnRlcnMuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5pbmZvKGBPVEVMX0xPR1NfRVhQT1JURVIgY29udGFpbnMgXCJub25lXCIuIExvZ2dlciBwcm92aWRlciB3aWxsIG5vdCBiZSBpbml0aWFsaXplZC5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBvcnRlcnMgPSBbXTtcbiAgICAgICAgZW5hYmxlZEV4cG9ydGVycy5mb3JFYWNoKGV4cG9ydGVyID0+IHtcbiAgICAgICAgICAgIGlmIChleHBvcnRlciA9PT0gJ290bHAnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdG9jb2wgPSAoKDAsIGNvcmVfMS5nZXRTdHJpbmdGcm9tRW52KSgnT1RFTF9FWFBPUlRFUl9PVExQX0xPR1NfUFJPVE9DT0wnKSA/P1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29yZV8xLmdldFN0cmluZ0Zyb21FbnYpKCdPVEVMX0VYUE9SVEVSX09UTFBfUFJPVE9DT0wnKSk/LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dycGMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXJzLnB1c2gobmV3IGV4cG9ydGVyX2xvZ3Nfb3RscF9ncnBjXzEuT1RMUExvZ0V4cG9ydGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHAvanNvbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcnMucHVzaChuZXcgZXhwb3J0ZXJfbG9nc19vdGxwX2h0dHBfMS5PVExQTG9nRXhwb3J0ZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHR0cC9wcm90b2J1Zic6XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcnMucHVzaChuZXcgZXhwb3J0ZXJfbG9nc19vdGxwX3Byb3RvXzEuT1RMUExvZ0V4cG9ydGVyKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXJzLnB1c2gobmV3IGV4cG9ydGVyX2xvZ3Nfb3RscF9wcm90b18xLk9UTFBMb2dFeHBvcnRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpXzEuZGlhZy53YXJuKGBVbnN1cHBvcnRlZCBPVExQIGxvZ3MgcHJvdG9jb2w6IFwiJHtwcm90b2NvbH1cIi4gVXNpbmcgaHR0cC9wcm90b2J1Zi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVycy5wdXNoKG5ldyBleHBvcnRlcl9sb2dzX290bHBfcHJvdG9fMS5PVExQTG9nRXhwb3J0ZXIoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXhwb3J0ZXIgPT09ICdjb25zb2xlJykge1xuICAgICAgICAgICAgICAgIGV4cG9ydGVycy5wdXNoKG5ldyBzZGtfbG9nc18xLkNvbnNvbGVMb2dSZWNvcmRFeHBvcnRlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwaV8xLmRpYWcud2FybihgVW5zdXBwb3J0ZWQgT1RFTF9MT0dTX0VYUE9SVEVSIHZhbHVlOiBcIiR7ZXhwb3J0ZXJ9XCIuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOiBvdGxwLCBjb25zb2xlLCBub25lLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGV4cG9ydGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXJQcm92aWRlckNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBsb2dSZWNvcmRQcm9jZXNzb3JzOiBleHBvcnRlcnMubWFwKGV4cG9ydGVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9ydGVyIGluc3RhbmNlb2Ygc2RrX2xvZ3NfMS5Db25zb2xlTG9nUmVjb3JkRXhwb3J0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc2RrX2xvZ3NfMS5TaW1wbGVMb2dSZWNvcmRQcm9jZXNzb3IoZXhwb3J0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBzZGtfbG9nc18xLkJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yKGV4cG9ydGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuTm9kZVNESyA9IE5vZGVTREs7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZGsuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5vZGVTREsgPSBleHBvcnRzLnRyYWNpbmcgPSBleHBvcnRzLnJlc291cmNlcyA9IGV4cG9ydHMubm9kZSA9IGV4cG9ydHMubWV0cmljcyA9IGV4cG9ydHMubG9ncyA9IGV4cG9ydHMuY29yZSA9IGV4cG9ydHMuY29udGV4dEJhc2UgPSBleHBvcnRzLmFwaSA9IHZvaWQgMDtcbi8vIFRoaXMgaXMgYSBtZXRhLXBhY2thZ2UsIGFuZCB0aGVzZSBleGlzdCBpbiB0byByZS1leHBvcnQgKmFsbCogaXRlbXMgZnJvbVxuLy8gdGhlIGluZGl2aWR1YWwgcGFja2FnZXMgYXMgaW5kaXZpZHVhbCBfbmFtZXNwYWNlc18sIHNvIHdpbGRjYXJkIGV4cG9ydHMgYXJlXG4vLyBhcHByb3ByaWF0ZSBoZXJlLiBPdGhlcndpc2UsIGl0J2QgYmUgYSBwYWluIHRvIGVudW1lcmF0ZSBhbmQga2VlcCB0aGluZ3Ncbi8vIGluLXN5bmMgd2l0aCBhbGwgdGhlIHVwc3RyZWFtIHBhY2thZ2VzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbmV4cG9ydHMuYXBpID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmV4cG9ydHMuY29udGV4dEJhc2UgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuZXhwb3J0cy5jb3JlID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5leHBvcnRzLmxvZ3MgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3NcIik7XG5leHBvcnRzLm1ldHJpY3MgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3NcIik7XG5leHBvcnRzLm5vZGUgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGVcIik7XG5leHBvcnRzLnJlc291cmNlcyA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXNcIik7XG5leHBvcnRzLnRyYWNpbmcgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2VcIik7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG52YXIgc2RrXzEgPSByZXF1aXJlKFwiLi9zZGtcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb2RlU0RLXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZGtfMS5Ob2RlU0RLOyB9IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0ZXJuYWwtdHlwZXMuanMubWFwIiwKICAgICIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi8qIGdsb2JhbCB3aW5kb3cgKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQnJvd3NlckNyeXB0byA9IHZvaWQgMDtcbi8vIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNyeXB0byBmdW5jdGlvbnMgd2UgbmVlZCB1c2luZyBpbi1icm93c2VyXG4vLyBTdWJ0bGVDcnlwdG8gaW50ZXJmYWNlIGB3aW5kb3cuY3J5cHRvLnN1YnRsZWAuXG5jb25zdCBiYXNlNjRqcyA9IHJlcXVpcmUoXCJiYXNlNjQtanNcIik7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCIuLi9jcnlwdG9cIik7XG5jbGFzcyBCcm93c2VyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICB3aW5kb3cuY3J5cHRvID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHdpbmRvdy5jcnlwdG8uc3VidGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN1YnRsZUNyeXB0byBub3QgZm91bmQuIE1ha2Ugc3VyZSBpdCdzIGFuIGh0dHBzOi8vIHdlYnNpdGUuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHNoYTI1NkRpZ2VzdEJhc2U2NChzdHIpIHtcbiAgICAgICAgLy8gU3VidGxlQ3J5cHRvIGRpZ2VzdCgpIG1ldGhvZCBpcyBhc3luYywgc28gd2UgbXVzdCBtYWtlXG4gICAgICAgIC8vIHRoaXMgbWV0aG9kIGFzeW5jIGFzIHdlbGwuXG4gICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBTSEEyNTYgZGlnZXN0IHVzaW5nIFN1YnRsZUNyeXB0bywgd2UgZmlyc3RcbiAgICAgICAgLy8gbmVlZCB0byBjb252ZXJ0IGFuIGlucHV0IHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlcjpcbiAgICAgICAgY29uc3QgaW5wdXRCdWZmZXIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKTtcbiAgICAgICAgLy8gUmVzdWx0IGlzIEFycmF5QnVmZmVyIGFzIHdlbGwuXG4gICAgICAgIGNvbnN0IG91dHB1dEJ1ZmZlciA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGlucHV0QnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGJhc2U2NGpzLmZyb21CeXRlQXJyYXkobmV3IFVpbnQ4QXJyYXkob3V0cHV0QnVmZmVyKSk7XG4gICAgfVxuICAgIHJhbmRvbUJ5dGVzQmFzZTY0KGNvdW50KSB7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuICAgICAgICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgICAgIHJldHVybiBiYXNlNjRqcy5mcm9tQnl0ZUFycmF5KGFycmF5KTtcbiAgICB9XG4gICAgc3RhdGljIHBhZEJhc2U2NChiYXNlNjQpIHtcbiAgICAgICAgLy8gYmFzZTY0anMgcmVxdWlyZXMgcGFkZGluZywgc28gbGV0J3MgYWRkIHNvbWUgJz0nXG4gICAgICAgIHdoaWxlIChiYXNlNjQubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgICAgICAgICAgYmFzZTY0ICs9ICc9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZTY0O1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkocHVia2V5LCBkYXRhLCBzaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgYWxnbyA9IHtcbiAgICAgICAgICAgIG5hbWU6ICdSU0FTU0EtUEtDUzEtdjFfNScsXG4gICAgICAgICAgICBoYXNoOiB7IG5hbWU6ICdTSEEtMjU2JyB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhQXJyYXkgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZUFycmF5ID0gYmFzZTY0anMudG9CeXRlQXJyYXkoQnJvd3NlckNyeXB0by5wYWRCYXNlNjQoc2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmltcG9ydEtleSgnandrJywgcHVia2V5LCBhbGdvLCB0cnVlLCBbJ3ZlcmlmeSddKTtcbiAgICAgICAgLy8gU3VidGxlQ3J5cHRvJ3MgdmVyaWZ5IG1ldGhvZCBpcyBhc3luYyBzbyB3ZSBtdXN0IG1ha2VcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgYXN5bmMgYXMgd2VsbC5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUudmVyaWZ5KGFsZ28sIGNyeXB0b0tleSwgc2lnbmF0dXJlQXJyYXksIGRhdGFBcnJheSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24ocHJpdmF0ZUtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBhbGdvID0ge1xuICAgICAgICAgICAgbmFtZTogJ1JTQVNTQS1QS0NTMS12MV81JyxcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogJ1NIQS0yNTYnIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKTtcbiAgICAgICAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCdqd2snLCBwcml2YXRlS2V5LCBhbGdvLCB0cnVlLCBbJ3NpZ24nXSk7XG4gICAgICAgIC8vIFN1YnRsZUNyeXB0bydzIHNpZ24gbWV0aG9kIGlzIGFzeW5jIHNvIHdlIG11c3QgbWFrZVxuICAgICAgICAvLyB0aGlzIG1ldGhvZCBhc3luYyBhcyB3ZWxsLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5zaWduKGFsZ28sIGNyeXB0b0tleSwgZGF0YUFycmF5KTtcbiAgICAgICAgcmV0dXJuIGJhc2U2NGpzLmZyb21CeXRlQXJyYXkobmV3IFVpbnQ4QXJyYXkocmVzdWx0KSk7XG4gICAgfVxuICAgIGRlY29kZUJhc2U2NFN0cmluZ1V0ZjgoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBiYXNlNjRqcy50b0J5dGVBcnJheShCcm93c2VyQ3J5cHRvLnBhZEJhc2U2NChiYXNlNjQpKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHVpbnQ4YXJyYXkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlbmNvZGVCYXNlNjRTdHJpbmdVdGY4KHRleHQpIHtcbiAgICAgICAgY29uc3QgdWludDhhcnJheSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0ZXh0KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0anMuZnJvbUJ5dGVBcnJheSh1aW50OGFycmF5KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgcHJvdmlkZWQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIHBsYWluIHRleHQgc3RyaW5nIHRvIGhhc2guXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIHByb3ZpZGVkXG4gICAgICogICBzdHJpbmcgaW4gaGV4YWRlY2ltYWwgZW5jb2RpbmcuXG4gICAgICovXG4gICAgYXN5bmMgc2hhMjU2RGlnZXN0SGV4KHN0cikge1xuICAgICAgICAvLyBTdWJ0bGVDcnlwdG8gZGlnZXN0KCkgbWV0aG9kIGlzIGFzeW5jLCBzbyB3ZSBtdXN0IG1ha2VcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgYXN5bmMgYXMgd2VsbC5cbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIFNIQTI1NiBkaWdlc3QgdXNpbmcgU3VidGxlQ3J5cHRvLCB3ZSBmaXJzdFxuICAgICAgICAvLyBuZWVkIHRvIGNvbnZlcnQgYW4gaW5wdXQgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyOlxuICAgICAgICBjb25zdCBpbnB1dEJ1ZmZlciA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpO1xuICAgICAgICAvLyBSZXN1bHQgaXMgQXJyYXlCdWZmZXIgYXMgd2VsbC5cbiAgICAgICAgY29uc3Qgb3V0cHV0QnVmZmVyID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgaW5wdXRCdWZmZXIpO1xuICAgICAgICByZXR1cm4gKDAsIGNyeXB0b18xLmZyb21BcnJheUJ1ZmZlclRvSGV4KShvdXRwdXRCdWZmZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgSE1BQyBoYXNoIG9mIGEgbWVzc2FnZSB1c2luZyB0aGUgcHJvdmlkZWQgY3J5cHRvIGtleSBhbmQgdGhlXG4gICAgICogU0hBLTI1NiBhbGdvcml0aG0uXG4gICAgICogQHBhcmFtIGtleSBUaGUgc2VjcmV0IGNyeXB0byBrZXkgaW4gdXRmLTggb3IgQXJyYXlCdWZmZXIgZm9ybWF0LlxuICAgICAqIEBwYXJhbSBtc2cgVGhlIHBsYWluIHRleHQgbWVzc2FnZS5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIEhNQUMtU0hBMjU2IGhhc2ggaW4gQXJyYXlCdWZmZXJcbiAgICAgKiAgIGZvcm1hdC5cbiAgICAgKi9cbiAgICBhc3luYyBzaWduV2l0aEhtYWNTaGEyNTYoa2V5LCBtc2cpIHtcbiAgICAgICAgLy8gQ29udmVydCBrZXksIGlmIHByb3ZpZGVkIGluIEFycmF5QnVmZmVyIGZvcm1hdCwgdG8gc3RyaW5nLlxuICAgICAgICBjb25zdCByYXdLZXkgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgIDogU3RyaW5nLmZyb21DaGFyQ29kZSguLi5uZXcgVWludDE2QXJyYXkoa2V5KSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGVuYy5lbmNvZGUocmF3S2V5KSwge1xuICAgICAgICAgICAgbmFtZTogJ0hNQUMnLFxuICAgICAgICAgICAgaGFzaDoge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTSEEtMjU2JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIGZhbHNlLCBbJ3NpZ24nXSk7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLnN1YnRsZS5zaWduKCdITUFDJywgY3J5cHRvS2V5LCBlbmMuZW5jb2RlKG1zZykpO1xuICAgIH1cbn1cbmV4cG9ydHMuQnJvd3NlckNyeXB0byA9IEJyb3dzZXJDcnlwdG87XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk5vZGVDcnlwdG8gPSB2b2lkIDA7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuY2xhc3MgTm9kZUNyeXB0byB7XG4gICAgYXN5bmMgc2hhMjU2RGlnZXN0QmFzZTY0KHN0cikge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzdHIpLmRpZ2VzdCgnYmFzZTY0Jyk7XG4gICAgfVxuICAgIHJhbmRvbUJ5dGVzQmFzZTY0KGNvdW50KSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoY291bnQpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KHB1YmtleSwgZGF0YSwgc2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWVyID0gY3J5cHRvLmNyZWF0ZVZlcmlmeSgnUlNBLVNIQTI1NicpO1xuICAgICAgICB2ZXJpZmllci51cGRhdGUoZGF0YSk7XG4gICAgICAgIHZlcmlmaWVyLmVuZCgpO1xuICAgICAgICByZXR1cm4gdmVyaWZpZXIudmVyaWZ5KHB1YmtleSwgc2lnbmF0dXJlLCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24ocHJpdmF0ZUtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbignUlNBLVNIQTI1NicpO1xuICAgICAgICBzaWduZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBzaWduZXIuZW5kKCk7XG4gICAgICAgIHJldHVybiBzaWduZXIuc2lnbihwcml2YXRlS2V5LCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIGRlY29kZUJhc2U2NFN0cmluZ1V0ZjgoYmFzZTY0KSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICB9XG4gICAgZW5jb2RlQmFzZTY0U3RyaW5nVXRmOCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0ZXh0LCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIHByb3ZpZGVkIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBwbGFpbiB0ZXh0IHN0cmluZyB0byBoYXNoLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBwcm92aWRlZFxuICAgICAqICAgc3RyaW5nIGluIGhleGFkZWNpbWFsIGVuY29kaW5nLlxuICAgICAqL1xuICAgIGFzeW5jIHNoYTI1NkRpZ2VzdEhleChzdHIpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoc3RyKS5kaWdlc3QoJ2hleCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgSE1BQyBoYXNoIG9mIGEgbWVzc2FnZSB1c2luZyB0aGUgcHJvdmlkZWQgY3J5cHRvIGtleSBhbmQgdGhlXG4gICAgICogU0hBLTI1NiBhbGdvcml0aG0uXG4gICAgICogQHBhcmFtIGtleSBUaGUgc2VjcmV0IGNyeXB0byBrZXkgaW4gdXRmLTggb3IgQXJyYXlCdWZmZXIgZm9ybWF0LlxuICAgICAqIEBwYXJhbSBtc2cgVGhlIHBsYWluIHRleHQgbWVzc2FnZS5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIEhNQUMtU0hBMjU2IGhhc2ggaW4gQXJyYXlCdWZmZXJcbiAgICAgKiAgIGZvcm1hdC5cbiAgICAgKi9cbiAgICBhc3luYyBzaWduV2l0aEhtYWNTaGEyNTYoa2V5LCBtc2cpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvS2V5ID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBrZXkgOiB0b0J1ZmZlcihrZXkpO1xuICAgICAgICByZXR1cm4gdG9BcnJheUJ1ZmZlcihjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2JywgY3J5cHRvS2V5KS51cGRhdGUobXNnKS5kaWdlc3QoKSk7XG4gICAgfVxufVxuZXhwb3J0cy5Ob2RlQ3J5cHRvID0gTm9kZUNyeXB0bztcbi8qKlxuICogQ29udmVydHMgYSBOb2RlLmpzIEJ1ZmZlciB0byBhbiBBcnJheUJ1ZmZlci5cbiAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg2MDkyODkvY29udmVydC1hLWJpbmFyeS1ub2RlanMtYnVmZmVyLXRvLWphdmFzY3JpcHQtYXJyYXlidWZmZXJcbiAqIEBwYXJhbSBidWZmZXIgVGhlIEJ1ZmZlciBpbnB1dCB0byBjb3ZlcnQuXG4gKiBAcmV0dXJuIFRoZSBBcnJheUJ1ZmZlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXlCdWZmZXIoYnVmZmVyKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5idWZmZXIuc2xpY2UoYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlT2Zmc2V0ICsgYnVmZmVyLmJ5dGVMZW5ndGgpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBcnJheUJ1ZmZlciB0byBhIE5vZGUuanMgQnVmZmVyLlxuICogQHBhcmFtIGFycmF5QnVmZmVyIFRoZSBBcnJheUJ1ZmZlciBpbnB1dCB0byBjb3ZlcnQuXG4gKiBAcmV0dXJuIFRoZSBCdWZmZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LlxuICovXG5mdW5jdGlvbiB0b0J1ZmZlcihhcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4vKiBnbG9iYWwgd2luZG93ICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUNyeXB0byA9IGNyZWF0ZUNyeXB0bztcbmV4cG9ydHMuaGFzQnJvd3NlckNyeXB0byA9IGhhc0Jyb3dzZXJDcnlwdG87XG5leHBvcnRzLmZyb21BcnJheUJ1ZmZlclRvSGV4ID0gZnJvbUFycmF5QnVmZmVyVG9IZXg7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCIuL2Jyb3dzZXIvY3J5cHRvXCIpO1xuY29uc3QgY3J5cHRvXzIgPSByZXF1aXJlKFwiLi9ub2RlL2NyeXB0b1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZUNyeXB0bygpIHtcbiAgICBpZiAoaGFzQnJvd3NlckNyeXB0bygpKSB7XG4gICAgICAgIHJldHVybiBuZXcgY3J5cHRvXzEuQnJvd3NlckNyeXB0bygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IGNyeXB0b18yLk5vZGVDcnlwdG8oKTtcbn1cbmZ1bmN0aW9uIGhhc0Jyb3dzZXJDcnlwdG8oKSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LmNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5jcnlwdG8uc3VidGxlICE9PSAndW5kZWZpbmVkJyk7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIEFycmF5QnVmZmVyIHRvIGEgaGV4YWRlY2ltYWwgc3RyaW5nLlxuICogQHBhcmFtIGFycmF5QnVmZmVyIFRoZSBBcnJheUJ1ZmZlciB0byBjb252ZXJ0IHRvIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIEByZXR1cm4gVGhlIGhleGFkZWNpbWFsIGVuY29kaW5nIG9mIHRoZSBBcnJheUJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyVG9IZXgoYXJyYXlCdWZmZXIpIHtcbiAgICAvLyBDb252ZXJ0IGJ1ZmZlciB0byBieXRlIGFycmF5LlxuICAgIGNvbnN0IGJ5dGVBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgICAvLyBDb252ZXJ0IGJ5dGVzIHRvIGhleCBzdHJpbmcuXG4gICAgcmV0dXJuIGJ5dGVBcnJheVxuICAgICAgICAubWFwKGJ5dGUgPT4ge1xuICAgICAgICByZXR1cm4gYnl0ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB9KVxuICAgICAgICAuam9pbignJyk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGU7XG4vLyBBY2NlcHRzIGFuIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB1c2VyIHRvIHRoZSBBUEkuICBJbiB0aGVcbi8vIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIEFQSSwgaXQgcmVmZXJyZWQgdG8gYSBgUmVxdWVzdGAgb3B0aW9ucyBvYmplY3QuXG4vLyBOb3cgaXQgcmVmZXJzIHRvIGFuIEF4aW94IFJlcXVlc3QgQ29uZmlnIG9iamVjdC4gIFRoaXMgaXMgaGVyZSB0byBoZWxwXG4vLyBlbnN1cmUgdXNlcnMgZG9uJ3QgcGFzcyBpbnZhbGlkIG9wdGlvbnMgd2hlbiB0aGV5IHVwZ3JhZGUgZnJvbSAwLnggdG8gMS54LlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHZhbGlkYXRlKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2cGFpcnMgPSBbXG4gICAgICAgIHsgaW52YWxpZDogJ3VyaScsIGV4cGVjdGVkOiAndXJsJyB9LFxuICAgICAgICB7IGludmFsaWQ6ICdqc29uJywgZXhwZWN0ZWQ6ICdkYXRhJyB9LFxuICAgICAgICB7IGludmFsaWQ6ICdxcycsIGV4cGVjdGVkOiAncGFyYW1zJyB9LFxuICAgIF07XG4gICAgZm9yIChjb25zdCBwYWlyIG9mIHZwYWlycykge1xuICAgICAgICBpZiAob3B0aW9uc1twYWlyLmludmFsaWRdKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gYCcke3BhaXIuaW52YWxpZH0nIGlzIG5vdCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBQbGVhc2UgdXNlICcke3BhaXIuZXhwZWN0ZWR9JyBpbnN0ZWFkLiBUaGlzIGxpYnJhcnkgaXMgdXNpbmcgQXhpb3MgZm9yIHJlcXVlc3RzLiBQbGVhc2Ugc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcyB0byBsZWFybiBtb3JlIGFib3V0IHRoZSB2YWxpZCByZXF1ZXN0IG9wdGlvbnMuYDtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGVmYXVsdFRyYW5zcG9ydGVyID0gdm9pZCAwO1xuY29uc3QgZ2F4aW9zXzEgPSByZXF1aXJlKFwiZ2F4aW9zXCIpO1xuY29uc3Qgb3B0aW9uc18xID0gcmVxdWlyZShcIi4vb3B0aW9uc1wiKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBwa2cgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKTtcbmNvbnN0IFBST0RVQ1RfTkFNRSA9ICdnb29nbGUtYXBpLW5vZGVqcy1jbGllbnQnO1xuY2xhc3MgRGVmYXVsdFRyYW5zcG9ydGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgY29uZmlndXJhYmxlLCByZXBsYWNhYmxlIGBHYXhpb3NgIGluc3RhbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBnYXhpb3NfMS5HYXhpb3MoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyByZXF1ZXN0IG9wdGlvbnMgYmVmb3JlIG1ha2luZyBhIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIG9wdHMgR2F4aW9zT3B0aW9ucyBvcHRpb25zLlxuICAgICAqIEByZXR1cm4gQ29uZmlndXJlZCBvcHRpb25zLlxuICAgICAqL1xuICAgIGNvbmZpZ3VyZShvcHRzID0ge30pIHtcbiAgICAgICAgb3B0cy5oZWFkZXJzID0gb3B0cy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIHNldCB0cmFuc3BvcnRlciB1c2VyIGFnZW50IGlmIG5vdCBpbiBicm93c2VyXG4gICAgICAgICAgICBjb25zdCB1YVZhbHVlID0gb3B0cy5oZWFkZXJzWydVc2VyLUFnZW50J107XG4gICAgICAgICAgICBpZiAoIXVhVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IERlZmF1bHRUcmFuc3BvcnRlci5VU0VSX0FHRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXVhVmFsdWUuaW5jbHVkZXMoYCR7UFJPRFVDVF9OQU1FfS9gKSkge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVyc1snVXNlci1BZ2VudCddID1cbiAgICAgICAgICAgICAgICAgICAgYCR7dWFWYWx1ZX0gJHtEZWZhdWx0VHJhbnNwb3J0ZXIuVVNFUl9BR0VOVH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdHJhY2sgZ29vZ2xlLWF1dGgtbGlicmFyeS1ub2RlanMgdmVyc2lvbjpcbiAgICAgICAgICAgIGlmICghb3B0cy5oZWFkZXJzWyd4LWdvb2ctYXBpLWNsaWVudCddKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZVZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyk7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWyd4LWdvb2ctYXBpLWNsaWVudCddID0gYGdsLW5vZGUvJHtub2RlVmVyc2lvbn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIHJlcXVlc3QgdXNpbmcgR2F4aW9zIHdpdGggZ2l2ZW4gb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gb3B0cyBHYXhpb3NPcHRpb25zIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIG9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgY29udGFpbnMgR2F4aW9zUmVzcG9uc2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm4gR2F4aW9zUHJvbWlzZSwgYXNzdW1pbmcgbm8gY2FsbGJhY2sgaXMgcGFzc2VkLlxuICAgICAqL1xuICAgIHJlcXVlc3Qob3B0cykge1xuICAgICAgICAvLyBlbnN1cmUgdGhlIHVzZXIgaXNuJ3QgcGFzc2luZyBpbiByZXF1ZXN0LXN0eWxlIG9wdGlvbnNcbiAgICAgICAgb3B0cyA9IHRoaXMuY29uZmlndXJlKG9wdHMpO1xuICAgICAgICAoMCwgb3B0aW9uc18xLnZhbGlkYXRlKShvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UucmVxdWVzdChvcHRzKS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRocm93IHRoaXMucHJvY2Vzc0Vycm9yKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5kZWZhdWx0cztcbiAgICB9XG4gICAgc2V0IGRlZmF1bHRzKG9wdHMpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5kZWZhdWx0cyA9IG9wdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIGVycm9yIHRvIGluY2x1ZGUgZGV0YWlscyBmcm9tIHRoZSBib2R5LlxuICAgICAqL1xuICAgIHByb2Nlc3NFcnJvcihlKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGUucmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IGVyciA9IGU7XG4gICAgICAgIGNvbnN0IGJvZHkgPSByZXMgPyByZXMuZGF0YSA6IG51bGw7XG4gICAgICAgIGlmIChyZXMgJiYgYm9keSAmJiBib2R5LmVycm9yICYmIHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5LmVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gYm9keS5lcnJvcjtcbiAgICAgICAgICAgICAgICBlcnIuc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYm9keS5lcnJvci5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBib2R5LmVycm9yLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChlcnIyKSA9PiBlcnIyLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICBlcnIuY29kZSA9IGJvZHkuZXJyb3IuY29kZTtcbiAgICAgICAgICAgICAgICBlcnIuZXJyb3JzID0gYm9keS5lcnJvci5lcnJvcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IGJvZHkuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBlcnIuY29kZSA9IGJvZHkuZXJyb3IuY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyZXMgJiYgcmVzLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgICAgIC8vIENvbnNpZGVyIGFsbCA0eHggYW5kIDV4eCByZXNwb25zZXMgZXJyb3JzLlxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBib2R5O1xuICAgICAgICAgICAgZXJyLnN0YXR1cyA9IHJlcy5zdGF0dXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG59XG5leHBvcnRzLkRlZmF1bHRUcmFuc3BvcnRlciA9IERlZmF1bHRUcmFuc3BvcnRlcjtcbi8qKlxuICogRGVmYXVsdCB1c2VyIGFnZW50LlxuICovXG5EZWZhdWx0VHJhbnNwb3J0ZXIuVVNFUl9BR0VOVCA9IGAke1BST0RVQ1RfTkFNRX0vJHtwa2cudmVyc2lvbn1gO1xuIiwKICAgICIvKiEgc2FmZS1idWZmZXIuIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJ1ZmZlci5wcm90b3R5cGUpXG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldFBhcmFtU2l6ZShrZXlTaXplKSB7XG5cdHZhciByZXN1bHQgPSAoKGtleVNpemUgLyA4KSB8IDApICsgKGtleVNpemUgJSA4ID09PSAwID8gMCA6IDEpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgcGFyYW1CeXRlc0ZvckFsZyA9IHtcblx0RVMyNTY6IGdldFBhcmFtU2l6ZSgyNTYpLFxuXHRFUzM4NDogZ2V0UGFyYW1TaXplKDM4NCksXG5cdEVTNTEyOiBnZXRQYXJhbVNpemUoNTIxKVxufTtcblxuZnVuY3Rpb24gZ2V0UGFyYW1CeXRlc0ZvckFsZyhhbGcpIHtcblx0dmFyIHBhcmFtQnl0ZXMgPSBwYXJhbUJ5dGVzRm9yQWxnW2FsZ107XG5cdGlmIChwYXJhbUJ5dGVzKSB7XG5cdFx0cmV0dXJuIHBhcmFtQnl0ZXM7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gYWxnb3JpdGhtIFwiJyArIGFsZyArICdcIicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFBhcmFtQnl0ZXNGb3JBbGc7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgZ2V0UGFyYW1CeXRlc0ZvckFsZyA9IHJlcXVpcmUoJy4vcGFyYW0tYnl0ZXMtZm9yLWFsZycpO1xuXG52YXIgTUFYX09DVEVUID0gMHg4MCxcblx0Q0xBU1NfVU5JVkVSU0FMID0gMCxcblx0UFJJTUlUSVZFX0JJVCA9IDB4MjAsXG5cdFRBR19TRVEgPSAweDEwLFxuXHRUQUdfSU5UID0gMHgwMixcblx0RU5DT0RFRF9UQUdfU0VRID0gKFRBR19TRVEgfCBQUklNSVRJVkVfQklUKSB8IChDTEFTU19VTklWRVJTQUwgPDwgNiksXG5cdEVOQ09ERURfVEFHX0lOVCA9IFRBR19JTlQgfCAoQ0xBU1NfVU5JVkVSU0FMIDw8IDYpO1xuXG5mdW5jdGlvbiBiYXNlNjRVcmwoYmFzZTY0KSB7XG5cdHJldHVybiBiYXNlNjRcblx0XHQucmVwbGFjZSgvPS9nLCAnJylcblx0XHQucmVwbGFjZSgvXFwrL2csICctJylcblx0XHQucmVwbGFjZSgvXFwvL2csICdfJyk7XG59XG5cbmZ1bmN0aW9uIHNpZ25hdHVyZUFzQnVmZmVyKHNpZ25hdHVyZSkge1xuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKHNpZ25hdHVyZSkpIHtcblx0XHRyZXR1cm4gc2lnbmF0dXJlO1xuXHR9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2Ygc2lnbmF0dXJlKSB7XG5cdFx0cmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2Jhc2U2NCcpO1xuXHR9XG5cblx0dGhyb3cgbmV3IFR5cGVFcnJvcignRUNEU0Egc2lnbmF0dXJlIG11c3QgYmUgYSBCYXNlNjQgc3RyaW5nIG9yIGEgQnVmZmVyJyk7XG59XG5cbmZ1bmN0aW9uIGRlclRvSm9zZShzaWduYXR1cmUsIGFsZykge1xuXHRzaWduYXR1cmUgPSBzaWduYXR1cmVBc0J1ZmZlcihzaWduYXR1cmUpO1xuXHR2YXIgcGFyYW1CeXRlcyA9IGdldFBhcmFtQnl0ZXNGb3JBbGcoYWxnKTtcblxuXHQvLyB0aGUgREVSIGVuY29kZWQgcGFyYW0gc2hvdWxkIGF0IG1vc3QgYmUgdGhlIHBhcmFtIHNpemUsIHBsdXMgYSBwYWRkaW5nXG5cdC8vIHplcm8sIHNpbmNlIGR1ZSB0byBiZWluZyBhIHNpZ25lZCBpbnRlZ2VyXG5cdHZhciBtYXhFbmNvZGVkUGFyYW1MZW5ndGggPSBwYXJhbUJ5dGVzICsgMTtcblxuXHR2YXIgaW5wdXRMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuXG5cdHZhciBvZmZzZXQgPSAwO1xuXHRpZiAoc2lnbmF0dXJlW29mZnNldCsrXSAhPT0gRU5DT0RFRF9UQUdfU0VRKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBleHBlY3RlZCBcInNlcVwiJyk7XG5cdH1cblxuXHR2YXIgc2VxTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldCsrXTtcblx0aWYgKHNlcUxlbmd0aCA9PT0gKE1BWF9PQ1RFVCB8IDEpKSB7XG5cdFx0c2VxTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldCsrXTtcblx0fVxuXG5cdGlmIChpbnB1dExlbmd0aCAtIG9mZnNldCA8IHNlcUxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignXCJzZXFcIiBzcGVjaWZpZWQgbGVuZ3RoIG9mIFwiJyArIHNlcUxlbmd0aCArICdcIiwgb25seSBcIicgKyAoaW5wdXRMZW5ndGggLSBvZmZzZXQpICsgJ1wiIHJlbWFpbmluZycpO1xuXHR9XG5cblx0aWYgKHNpZ25hdHVyZVtvZmZzZXQrK10gIT09IEVOQ09ERURfVEFHX0lOVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgZXhwZWN0ZWQgXCJpbnRcIiBmb3IgXCJyXCInKTtcblx0fVxuXG5cdHZhciByTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldCsrXTtcblxuXHRpZiAoaW5wdXRMZW5ndGggLSBvZmZzZXQgLSAyIDwgckxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignXCJyXCIgc3BlY2lmaWVkIGxlbmd0aCBvZiBcIicgKyByTGVuZ3RoICsgJ1wiLCBvbmx5IFwiJyArIChpbnB1dExlbmd0aCAtIG9mZnNldCAtIDIpICsgJ1wiIGF2YWlsYWJsZScpO1xuXHR9XG5cblx0aWYgKG1heEVuY29kZWRQYXJhbUxlbmd0aCA8IHJMZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1wiclwiIHNwZWNpZmllZCBsZW5ndGggb2YgXCInICsgckxlbmd0aCArICdcIiwgbWF4IG9mIFwiJyArIG1heEVuY29kZWRQYXJhbUxlbmd0aCArICdcIiBpcyBhY2NlcHRhYmxlJyk7XG5cdH1cblxuXHR2YXIgck9mZnNldCA9IG9mZnNldDtcblx0b2Zmc2V0ICs9IHJMZW5ndGg7XG5cblx0aWYgKHNpZ25hdHVyZVtvZmZzZXQrK10gIT09IEVOQ09ERURfVEFHX0lOVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgZXhwZWN0ZWQgXCJpbnRcIiBmb3IgXCJzXCInKTtcblx0fVxuXG5cdHZhciBzTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldCsrXTtcblxuXHRpZiAoaW5wdXRMZW5ndGggLSBvZmZzZXQgIT09IHNMZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1wic1wiIHNwZWNpZmllZCBsZW5ndGggb2YgXCInICsgc0xlbmd0aCArICdcIiwgZXhwZWN0ZWQgXCInICsgKGlucHV0TGVuZ3RoIC0gb2Zmc2V0KSArICdcIicpO1xuXHR9XG5cblx0aWYgKG1heEVuY29kZWRQYXJhbUxlbmd0aCA8IHNMZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1wic1wiIHNwZWNpZmllZCBsZW5ndGggb2YgXCInICsgc0xlbmd0aCArICdcIiwgbWF4IG9mIFwiJyArIG1heEVuY29kZWRQYXJhbUxlbmd0aCArICdcIiBpcyBhY2NlcHRhYmxlJyk7XG5cdH1cblxuXHR2YXIgc09mZnNldCA9IG9mZnNldDtcblx0b2Zmc2V0ICs9IHNMZW5ndGg7XG5cblx0aWYgKG9mZnNldCAhPT0gaW5wdXRMZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGNvbnN1bWUgZW50aXJlIGJ1ZmZlciwgYnV0IFwiJyArIChpbnB1dExlbmd0aCAtIG9mZnNldCkgKyAnXCIgYnl0ZXMgcmVtYWluJyk7XG5cdH1cblxuXHR2YXIgclBhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gckxlbmd0aCxcblx0XHRzUGFkZGluZyA9IHBhcmFtQnl0ZXMgLSBzTGVuZ3RoO1xuXG5cdHZhciBkc3QgPSBCdWZmZXIuYWxsb2NVbnNhZmUoclBhZGRpbmcgKyByTGVuZ3RoICsgc1BhZGRpbmcgKyBzTGVuZ3RoKTtcblxuXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IHJQYWRkaW5nOyArK29mZnNldCkge1xuXHRcdGRzdFtvZmZzZXRdID0gMDtcblx0fVxuXHRzaWduYXR1cmUuY29weShkc3QsIG9mZnNldCwgck9mZnNldCArIE1hdGgubWF4KC1yUGFkZGluZywgMCksIHJPZmZzZXQgKyByTGVuZ3RoKTtcblxuXHRvZmZzZXQgPSBwYXJhbUJ5dGVzO1xuXG5cdGZvciAodmFyIG8gPSBvZmZzZXQ7IG9mZnNldCA8IG8gKyBzUGFkZGluZzsgKytvZmZzZXQpIHtcblx0XHRkc3Rbb2Zmc2V0XSA9IDA7XG5cdH1cblx0c2lnbmF0dXJlLmNvcHkoZHN0LCBvZmZzZXQsIHNPZmZzZXQgKyBNYXRoLm1heCgtc1BhZGRpbmcsIDApLCBzT2Zmc2V0ICsgc0xlbmd0aCk7XG5cblx0ZHN0ID0gZHN0LnRvU3RyaW5nKCdiYXNlNjQnKTtcblx0ZHN0ID0gYmFzZTY0VXJsKGRzdCk7XG5cblx0cmV0dXJuIGRzdDtcbn1cblxuZnVuY3Rpb24gY291bnRQYWRkaW5nKGJ1Ziwgc3RhcnQsIHN0b3ApIHtcblx0dmFyIHBhZGRpbmcgPSAwO1xuXHR3aGlsZSAoc3RhcnQgKyBwYWRkaW5nIDwgc3RvcCAmJiBidWZbc3RhcnQgKyBwYWRkaW5nXSA9PT0gMCkge1xuXHRcdCsrcGFkZGluZztcblx0fVxuXG5cdHZhciBuZWVkc1NpZ24gPSBidWZbc3RhcnQgKyBwYWRkaW5nXSA+PSBNQVhfT0NURVQ7XG5cdGlmIChuZWVkc1NpZ24pIHtcblx0XHQtLXBhZGRpbmc7XG5cdH1cblxuXHRyZXR1cm4gcGFkZGluZztcbn1cblxuZnVuY3Rpb24gam9zZVRvRGVyKHNpZ25hdHVyZSwgYWxnKSB7XG5cdHNpZ25hdHVyZSA9IHNpZ25hdHVyZUFzQnVmZmVyKHNpZ25hdHVyZSk7XG5cdHZhciBwYXJhbUJ5dGVzID0gZ2V0UGFyYW1CeXRlc0ZvckFsZyhhbGcpO1xuXG5cdHZhciBzaWduYXR1cmVCeXRlcyA9IHNpZ25hdHVyZS5sZW5ndGg7XG5cdGlmIChzaWduYXR1cmVCeXRlcyAhPT0gcGFyYW1CeXRlcyAqIDIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdcIicgKyBhbGcgKyAnXCIgc2lnbmF0dXJlcyBtdXN0IGJlIFwiJyArIHBhcmFtQnl0ZXMgKiAyICsgJ1wiIGJ5dGVzLCBzYXcgXCInICsgc2lnbmF0dXJlQnl0ZXMgKyAnXCInKTtcblx0fVxuXG5cdHZhciByUGFkZGluZyA9IGNvdW50UGFkZGluZyhzaWduYXR1cmUsIDAsIHBhcmFtQnl0ZXMpO1xuXHR2YXIgc1BhZGRpbmcgPSBjb3VudFBhZGRpbmcoc2lnbmF0dXJlLCBwYXJhbUJ5dGVzLCBzaWduYXR1cmUubGVuZ3RoKTtcblx0dmFyIHJMZW5ndGggPSBwYXJhbUJ5dGVzIC0gclBhZGRpbmc7XG5cdHZhciBzTGVuZ3RoID0gcGFyYW1CeXRlcyAtIHNQYWRkaW5nO1xuXG5cdHZhciByc0J5dGVzID0gMSArIDEgKyByTGVuZ3RoICsgMSArIDEgKyBzTGVuZ3RoO1xuXG5cdHZhciBzaG9ydExlbmd0aCA9IHJzQnl0ZXMgPCBNQVhfT0NURVQ7XG5cblx0dmFyIGRzdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgoc2hvcnRMZW5ndGggPyAyIDogMykgKyByc0J5dGVzKTtcblxuXHR2YXIgb2Zmc2V0ID0gMDtcblx0ZHN0W29mZnNldCsrXSA9IEVOQ09ERURfVEFHX1NFUTtcblx0aWYgKHNob3J0TGVuZ3RoKSB7XG5cdFx0Ly8gQml0IDggaGFzIHZhbHVlIFwiMFwiXG5cdFx0Ly8gYml0cyA3LTEgZ2l2ZSB0aGUgbGVuZ3RoLlxuXHRcdGRzdFtvZmZzZXQrK10gPSByc0J5dGVzO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJpdCA4IG9mIGZpcnN0IG9jdGV0IGhhcyB2YWx1ZSBcIjFcIlxuXHRcdC8vIGJpdHMgNy0xIGdpdmUgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxlbmd0aCBvY3RldHMuXG5cdFx0ZHN0W29mZnNldCsrXSA9IE1BWF9PQ1RFVFx0fCAxO1xuXHRcdC8vIGxlbmd0aCwgYmFzZSAyNTZcblx0XHRkc3Rbb2Zmc2V0KytdID0gcnNCeXRlcyAmIDB4ZmY7XG5cdH1cblx0ZHN0W29mZnNldCsrXSA9IEVOQ09ERURfVEFHX0lOVDtcblx0ZHN0W29mZnNldCsrXSA9IHJMZW5ndGg7XG5cdGlmIChyUGFkZGluZyA8IDApIHtcblx0XHRkc3Rbb2Zmc2V0KytdID0gMDtcblx0XHRvZmZzZXQgKz0gc2lnbmF0dXJlLmNvcHkoZHN0LCBvZmZzZXQsIDAsIHBhcmFtQnl0ZXMpO1xuXHR9IGVsc2Uge1xuXHRcdG9mZnNldCArPSBzaWduYXR1cmUuY29weShkc3QsIG9mZnNldCwgclBhZGRpbmcsIHBhcmFtQnl0ZXMpO1xuXHR9XG5cdGRzdFtvZmZzZXQrK10gPSBFTkNPREVEX1RBR19JTlQ7XG5cdGRzdFtvZmZzZXQrK10gPSBzTGVuZ3RoO1xuXHRpZiAoc1BhZGRpbmcgPCAwKSB7XG5cdFx0ZHN0W29mZnNldCsrXSA9IDA7XG5cdFx0c2lnbmF0dXJlLmNvcHkoZHN0LCBvZmZzZXQsIHBhcmFtQnl0ZXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNpZ25hdHVyZS5jb3B5KGRzdCwgb2Zmc2V0LCBwYXJhbUJ5dGVzICsgc1BhZGRpbmcpO1xuXHR9XG5cblx0cmV0dXJuIGRzdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdGRlclRvSm9zZTogZGVyVG9Kb3NlLFxuXHRqb3NlVG9EZXI6IGpvc2VUb0RlclxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9MUlVDYWNoZV9pbnN0YW5jZXMsIF9MUlVDYWNoZV9jYWNoZSwgX0xSVUNhY2hlX21vdmVUb0VuZCwgX0xSVUNhY2hlX2V2aWN0O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MUlVDYWNoZSA9IHZvaWQgMDtcbmV4cG9ydHMuc25ha2VUb0NhbWVsID0gc25ha2VUb0NhbWVsO1xuZXhwb3J0cy5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zID0gb3JpZ2luYWxPckNhbWVsT3B0aW9ucztcbi8qKlxuICogUmV0dXJucyB0aGUgY2FtZWwgY2FzZSBvZiBhIHByb3ZpZGVkIHN0cmluZy5cbiAqXG4gKiBAcmVtYXJrc1xuICpcbiAqIE1hdGNoIGFueSBgX2AgYW5kIG5vdCBgX2AgcGFpciwgdGhlbiByZXR1cm4gdGhlIHVwcGVyY2FzZSBvZiB0aGUgbm90IGBfYFxuICogY2hhcmFjdGVyLlxuICpcbiAqIEBpbnRlcm5hbFxuICpcbiAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB0aGUgY2FtZWxDYXNlJ2Qgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNuYWtlVG9DYW1lbChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbX11bXl9dKS9nLCBtYXRjaCA9PiBtYXRjaC5zbGljZSgxKS50b1VwcGVyQ2FzZSgpKTtcbn1cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBgb2JqW2tleV1gIG9yIGBvYmpbY2FtZWxDYXNlS2V5XWAsIHdpdGggYSBwcmVmZXJlbmNlXG4gKiBmb3Igb3JpZ2luYWwsIG5vbi1jYW1lbENhc2Uga2V5LlxuICpcbiAqIEBwYXJhbSBvYmogb2JqZWN0IHRvIGxvb2t1cCBhIHZhbHVlIGluXG4gKiBAcmV0dXJucyBhIGBnZXRgIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGBvYmpba2V5IHx8IHNuYWtlS2V5XWAsIGlmIGF2YWlsYWJsZVxuICovXG5mdW5jdGlvbiBvcmlnaW5hbE9yQ2FtZWxPcHRpb25zKG9iaikge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBhbiBpbmRleCBvZiBvYmplY3QsIHByZWZlcmFibHkgc25ha2VfY2FzZVxuICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSBgb2JqW2tleSB8fCBzbmFrZUtleV1gLCBpZiBhdmFpbGFibGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbyA9IChvYmogfHwge30pO1xuICAgICAgICByZXR1cm4gKF9hID0gb1trZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvW3NuYWtlVG9DYW1lbChrZXkpXTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZ2V0IH07XG59XG4vKipcbiAqIEEgc2ltcGxlIExSVSBjYWNoZSB1dGlsaXR5LlxuICogTm90IG1lYW50IGZvciBleHRlcm5hbCB1c2FnZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgX0xSVUNhY2hlX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNYXBzIGFyZSBpbiBvcmRlci4gVGh1cywgdGhlIG9sZGVyIGl0ZW0gaXMgdGhlIGZpcnN0IGl0ZW0uXG4gICAgICAgICAqXG4gICAgICAgICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXB9XG4gICAgICAgICAqL1xuICAgICAgICBfTFJVQ2FjaGVfY2FjaGUuc2V0KHRoaXMsIG5ldyBNYXAoKSk7XG4gICAgICAgIHRoaXMuY2FwYWNpdHkgPSBvcHRpb25zLmNhcGFjaXR5O1xuICAgICAgICB0aGlzLm1heEFnZSA9IG9wdGlvbnMubWF4QWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYW4gaXRlbSB0byB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gdXBzZXJ0XG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUga2V5XG4gICAgICovXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfaW5zdGFuY2VzLCBcIm1cIiwgX0xSVUNhY2hlX21vdmVUb0VuZCkuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfaW5zdGFuY2VzLCBcIm1cIiwgX0xSVUNhY2hlX2V2aWN0KS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYW4gaXRlbSBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byByZXRyaWV2ZVxuICAgICAqL1xuICAgIGdldChrZXkpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xSVUNhY2hlX2NhY2hlLCBcImZcIikuZ2V0KGtleSk7XG4gICAgICAgIGlmICghaXRlbSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfaW5zdGFuY2VzLCBcIm1cIiwgX0xSVUNhY2hlX21vdmVUb0VuZCkuY2FsbCh0aGlzLCBrZXksIGl0ZW0udmFsdWUpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9pbnN0YW5jZXMsIFwibVwiLCBfTFJVQ2FjaGVfZXZpY3QpLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydHMuTFJVQ2FjaGUgPSBMUlVDYWNoZTtcbl9MUlVDYWNoZV9jYWNoZSA9IG5ldyBXZWFrTWFwKCksIF9MUlVDYWNoZV9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfTFJVQ2FjaGVfbW92ZVRvRW5kID0gZnVuY3Rpb24gX0xSVUNhY2hlX21vdmVUb0VuZChrZXksIHZhbHVlKSB7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfY2FjaGUsIFwiZlwiKS5kZWxldGUoa2V5KTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9MUlVDYWNoZV9jYWNoZSwgXCJmXCIpLnNldChrZXksIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGxhc3RBY2Nlc3NlZDogRGF0ZS5ub3coKSxcbiAgICB9KTtcbn0sIF9MUlVDYWNoZV9ldmljdCA9IGZ1bmN0aW9uIF9MUlVDYWNoZV9ldmljdCgpIHtcbiAgICBjb25zdCBjdXRvZmZEYXRlID0gdGhpcy5tYXhBZ2UgPyBEYXRlLm5vdygpIC0gdGhpcy5tYXhBZ2UgOiAwO1xuICAgIC8qKlxuICAgICAqIEJlY2F1c2Ugd2Uga25vdyBNYXBzIGFyZSBpbiBvcmRlciwgdGhpcyBpdGVtIGlzIGJvdGggdGhlXG4gICAgICogbGFzdCBpdGVtIGluIHRoZSBsaXN0IChjYXBhY2l0eSkgYW5kIG9sZGVzdCAobWF4QWdlKS5cbiAgICAgKi9cbiAgICBsZXQgb2xkZXN0SXRlbSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xSVUNhY2hlX2NhY2hlLCBcImZcIikuZW50cmllcygpLm5leHQoKTtcbiAgICB3aGlsZSAoIW9sZGVzdEl0ZW0uZG9uZSAmJlxuICAgICAgICAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfY2FjaGUsIFwiZlwiKS5zaXplID4gdGhpcy5jYXBhY2l0eSB8fCAvLyB0b28gbWFueVxuICAgICAgICAgICAgb2xkZXN0SXRlbS52YWx1ZVsxXS5sYXN0QWNjZXNzZWQgPCBjdXRvZmZEYXRlKSAvLyB0b28gb2xkXG4gICAgKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0xSVUNhY2hlX2NhY2hlLCBcImZcIikuZGVsZXRlKG9sZGVzdEl0ZW0udmFsdWVbMF0pO1xuICAgICAgICBvbGRlc3RJdGVtID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTFJVQ2FjaGVfY2FjaGUsIFwiZlwiKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgIH1cbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF1dGhDbGllbnQgPSBleHBvcnRzLkRFRkFVTFRfRUFHRVJfUkVGUkVTSF9USFJFU0hPTERfTUlMTElTID0gZXhwb3J0cy5ERUZBVUxUX1VOSVZFUlNFID0gdm9pZCAwO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuY29uc3QgZ2F4aW9zXzEgPSByZXF1aXJlKFwiZ2F4aW9zXCIpO1xuY29uc3QgdHJhbnNwb3J0ZXJzXzEgPSByZXF1aXJlKFwiLi4vdHJhbnNwb3J0ZXJzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG4vKipcbiAqIFRoZSBkZWZhdWx0IGNsb3VkIHVuaXZlcnNlXG4gKlxuICogQHNlZSB7QGxpbmsgQXV0aEpTT05PcHRpb25zLnVuaXZlcnNlX2RvbWFpbn1cbiAqL1xuZXhwb3J0cy5ERUZBVUxUX1VOSVZFUlNFID0gJ2dvb2dsZWFwaXMuY29tJztcbi8qKlxuICogVGhlIGRlZmF1bHQge0BsaW5rIEF1dGhDbGllbnRPcHRpb25zLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpc31cbiAqL1xuZXhwb3J0cy5ERUZBVUxUX0VBR0VSX1JFRlJFU0hfVEhSRVNIT0xEX01JTExJUyA9IDUgKiA2MCAqIDEwMDA7XG5jbGFzcyBBdXRoQ2xpZW50IGV4dGVuZHMgZXZlbnRzXzEuRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IHt9O1xuICAgICAgICB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyA9IGV4cG9ydHMuREVGQVVMVF9FQUdFUl9SRUZSRVNIX1RIUkVTSE9MRF9NSUxMSVM7XG4gICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoT25GYWlsdXJlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gPSBleHBvcnRzLkRFRkFVTFRfVU5JVkVSU0U7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKG9wdHMpO1xuICAgICAgICAvLyBTaGFyZWQgYXV0aCBvcHRpb25zXG4gICAgICAgIHRoaXMuYXBpS2V5ID0gb3B0cy5hcGlLZXk7XG4gICAgICAgIHRoaXMucHJvamVjdElkID0gKF9hID0gb3B0aW9ucy5nZXQoJ3Byb2plY3RfaWQnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICAgICAgdGhpcy5xdW90YVByb2plY3RJZCA9IG9wdGlvbnMuZ2V0KCdxdW90YV9wcm9qZWN0X2lkJyk7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSAoX2IgPSBvcHRpb25zLmdldCgnY3JlZGVudGlhbHMnKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gPSAoX2MgPSBvcHRpb25zLmdldCgndW5pdmVyc2VfZG9tYWluJykpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGV4cG9ydHMuREVGQVVMVF9VTklWRVJTRTtcbiAgICAgICAgLy8gU2hhcmVkIGNsaWVudCBvcHRpb25zXG4gICAgICAgIHRoaXMudHJhbnNwb3J0ZXIgPSAoX2QgPSBvcHRzLnRyYW5zcG9ydGVyKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBuZXcgdHJhbnNwb3J0ZXJzXzEuRGVmYXVsdFRyYW5zcG9ydGVyKCk7XG4gICAgICAgIGlmIChvcHRzLnRyYW5zcG9ydGVyT3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRlci5kZWZhdWx0cyA9IG9wdHMudHJhbnNwb3J0ZXJPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcykge1xuICAgICAgICAgICAgdGhpcy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgPSBvcHRzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcmNlUmVmcmVzaE9uRmFpbHVyZSA9IChfZSA9IG9wdHMuZm9yY2VSZWZyZXNoT25GYWlsdXJlKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSB7QGxpbmsgR2F4aW9zIGBHYXhpb3NgfSBpbnN0YW5jZSBmcm9tIHRoZSB7QGxpbmsgQXV0aENsaWVudC50cmFuc3BvcnRlcn0uXG4gICAgICpcbiAgICAgKiBAZXhwaXJlbWVudGFsXG4gICAgICovXG4gICAgZ2V0IGdheGlvcygpIHtcbiAgICAgICAgaWYgKHRoaXMudHJhbnNwb3J0ZXIgaW5zdGFuY2VvZiBnYXhpb3NfMS5HYXhpb3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydGVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudHJhbnNwb3J0ZXIgaW5zdGFuY2VvZiB0cmFuc3BvcnRlcnNfMS5EZWZhdWx0VHJhbnNwb3J0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydGVyLmluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCdpbnN0YW5jZScgaW4gdGhpcy50cmFuc3BvcnRlciAmJlxuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnRlci5pbnN0YW5jZSBpbnN0YW5jZW9mIGdheGlvc18xLkdheGlvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0ZXIuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGF1dGggY3JlZGVudGlhbHMuXG4gICAgICovXG4gICAgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBlbmQgYWRkaXRpb25hbCBoZWFkZXJzLCBlLmcuLCB4LWdvb2ctdXNlci1wcm9qZWN0LCBzaGFyZWQgYWNyb3NzIHRoZVxuICAgICAqIGNsYXNzZXMgaW5oZXJpdGluZyBBdXRoQ2xpZW50LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBieSBhbnkgbWV0aG9kXG4gICAgICogdGhhdCBvdmVycmlkZXMgZ2V0UmVxdWVzdE1ldGFkYXRhQXN5bmMoKSwgd2hpY2ggaXMgYSBzaGFyZWQgaGVscGVyIGZvclxuICAgICAqIHNldHRpbmcgcmVxdWVzdCBpbmZvcm1hdGlvbiBpbiBib3RoIGdSUEMgYW5kIEhUVFAgQVBJIGNhbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhlYWRlcnMgb2JqZWN0IHRvIGFwcGVuZCBhZGRpdGlvbmFsIGhlYWRlcnMgdG8uXG4gICAgICovXG4gICAgYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgLy8gcXVvdGFfcHJvamVjdF9pZCwgc3RvcmVkIGluIGFwcGxpY2F0aW9uX2RlZmF1bHRfY3JlZGVudGlhbHMuanNvbiwgaXMgc2V0IGluXG4gICAgICAgIC8vIHRoZSB4LWdvb2ctdXNlci1wcm9qZWN0IGhlYWRlciwgdG8gaW5kaWNhdGUgYW4gYWx0ZXJuYXRlIGFjY291bnQgZm9yXG4gICAgICAgIC8vIGJpbGxpbmcgYW5kIHF1b3RhOlxuICAgICAgICBpZiAoIWhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSAmJiAvLyBkb24ndCBvdmVycmlkZSBhIHZhbHVlIHRoZSB1c2VyIHNldHMuXG4gICAgICAgICAgICB0aGlzLnF1b3RhUHJvamVjdElkKSB7XG4gICAgICAgICAgICBoZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J10gPSB0aGlzLnF1b3RhUHJvamVjdElkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyeSBjb25maWcgZm9yIEF1dGgtcmVsYXRlZCByZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG5vdCBhIHBhcnQgb2YgdGhlIGRlZmF1bHQge0BsaW5rIEF1dGhDbGllbnQudHJhbnNwb3J0ZXIgdHJhbnNwb3J0ZXIvZ2F4aW9zfVxuICAgICAqIGNvbmZpZyBhcyBzb21lIGRvd25zdHJlYW0gQVBJcyB3b3VsZCBwcmVmZXIgaWYgY3VzdG9tZXJzIGV4cGxpY2l0bHkgZW5hYmxlIHJldHJpZXMsXG4gICAgICogc3VjaCBhcyBHQ1MuXG4gICAgICovXG4gICAgc3RhdGljIGdldCBSRVRSWV9DT05GSUcoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXRyeTogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgaHR0cE1ldGhvZHNUb1JldHJ5OiBbJ0dFVCcsICdQVVQnLCAnUE9TVCcsICdIRUFEJywgJ09QVElPTlMnLCAnREVMRVRFJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuQXV0aENsaWVudCA9IEF1dGhDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxvZ2luVGlja2V0ID0gdm9pZCAwO1xuY2xhc3MgTG9naW5UaWNrZXQge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHNpbXBsZSBjbGFzcyB0byBleHRyYWN0IHVzZXIgSUQgZnJvbSBhbiBJRCBUb2tlblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGVudiBFbnZlbG9wZSBvZiB0aGUgand0XG4gICAgICogQHBhcmFtIHtUb2tlblBheWxvYWR9IHBheSBQYXlsb2FkIG9mIHRoZSBqd3RcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihlbnYsIHBheSkge1xuICAgICAgICB0aGlzLmVudmVsb3BlID0gZW52O1xuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXk7XG4gICAgfVxuICAgIGdldEVudmVsb3BlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnZlbG9wZTtcbiAgICB9XG4gICAgZ2V0UGF5bG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgc2ltcGxlIGNsYXNzIHRvIGV4dHJhY3QgdXNlciBJRCBmcm9tIGFuIElEIFRva2VuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSB1c2VyIElEXG4gICAgICovXG4gICAgZ2V0VXNlcklkKCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5nZXRQYXlsb2FkKCk7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQuc3ViKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZC5zdWI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYXR0cmlidXRlcyBmcm9tIHRoZSBsb2dpbiB0aWNrZXQuICBUaGlzIGNhbiBjb250YWluXG4gICAgICogdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBzZXNzaW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgZW52ZWxvcGUgYW5kIHBheWxvYWRcbiAgICAgKi9cbiAgICBnZXRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4geyBlbnZlbG9wZTogdGhpcy5nZXRFbnZlbG9wZSgpLCBwYXlsb2FkOiB0aGlzLmdldFBheWxvYWQoKSB9O1xuICAgIH1cbn1cbmV4cG9ydHMuTG9naW5UaWNrZXQgPSBMb2dpblRpY2tldDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuT0F1dGgyQ2xpZW50ID0gZXhwb3J0cy5DbGllbnRBdXRoZW50aWNhdGlvbiA9IGV4cG9ydHMuQ2VydGlmaWNhdGVGb3JtYXQgPSBleHBvcnRzLkNvZGVDaGFsbGVuZ2VNZXRob2QgPSB2b2lkIDA7XG5jb25zdCBnYXhpb3NfMSA9IHJlcXVpcmUoXCJnYXhpb3NcIik7XG5jb25zdCBxdWVyeXN0cmluZyA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIik7XG5jb25zdCBmb3JtYXRFY2RzYSA9IHJlcXVpcmUoXCJlY2RzYS1zaWctZm9ybWF0dGVyXCIpO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiLi4vY3J5cHRvL2NyeXB0b1wiKTtcbmNvbnN0IGF1dGhjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGhjbGllbnRcIik7XG5jb25zdCBsb2dpbnRpY2tldF8xID0gcmVxdWlyZShcIi4vbG9naW50aWNrZXRcIik7XG52YXIgQ29kZUNoYWxsZW5nZU1ldGhvZDtcbihmdW5jdGlvbiAoQ29kZUNoYWxsZW5nZU1ldGhvZCkge1xuICAgIENvZGVDaGFsbGVuZ2VNZXRob2RbXCJQbGFpblwiXSA9IFwicGxhaW5cIjtcbiAgICBDb2RlQ2hhbGxlbmdlTWV0aG9kW1wiUzI1NlwiXSA9IFwiUzI1NlwiO1xufSkoQ29kZUNoYWxsZW5nZU1ldGhvZCB8fCAoZXhwb3J0cy5Db2RlQ2hhbGxlbmdlTWV0aG9kID0gQ29kZUNoYWxsZW5nZU1ldGhvZCA9IHt9KSk7XG52YXIgQ2VydGlmaWNhdGVGb3JtYXQ7XG4oZnVuY3Rpb24gKENlcnRpZmljYXRlRm9ybWF0KSB7XG4gICAgQ2VydGlmaWNhdGVGb3JtYXRbXCJQRU1cIl0gPSBcIlBFTVwiO1xuICAgIENlcnRpZmljYXRlRm9ybWF0W1wiSldLXCJdID0gXCJKV0tcIjtcbn0pKENlcnRpZmljYXRlRm9ybWF0IHx8IChleHBvcnRzLkNlcnRpZmljYXRlRm9ybWF0ID0gQ2VydGlmaWNhdGVGb3JtYXQgPSB7fSkpO1xuLyoqXG4gKiBUaGUgY2xpZW50IGF1dGhlbnRpY2F0aW9uIHR5cGUuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGJhc2ljLCBwb3N0LCBhbmQgbm9uZS5cbiAqIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzU5MSNzZWN0aW9uLTJcbiAqL1xudmFyIENsaWVudEF1dGhlbnRpY2F0aW9uO1xuKGZ1bmN0aW9uIChDbGllbnRBdXRoZW50aWNhdGlvbikge1xuICAgIENsaWVudEF1dGhlbnRpY2F0aW9uW1wiQ2xpZW50U2VjcmV0UG9zdFwiXSA9IFwiQ2xpZW50U2VjcmV0UG9zdFwiO1xuICAgIENsaWVudEF1dGhlbnRpY2F0aW9uW1wiQ2xpZW50U2VjcmV0QmFzaWNcIl0gPSBcIkNsaWVudFNlY3JldEJhc2ljXCI7XG4gICAgQ2xpZW50QXV0aGVudGljYXRpb25bXCJOb25lXCJdID0gXCJOb25lXCI7XG59KShDbGllbnRBdXRoZW50aWNhdGlvbiB8fCAoZXhwb3J0cy5DbGllbnRBdXRoZW50aWNhdGlvbiA9IENsaWVudEF1dGhlbnRpY2F0aW9uID0ge30pKTtcbmNsYXNzIE9BdXRoMkNsaWVudCBleHRlbmRzIGF1dGhjbGllbnRfMS5BdXRoQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zT3JDbGllbnRJZCwgY2xpZW50U2VjcmV0LCByZWRpcmVjdFVyaSkge1xuICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9uc09yQ2xpZW50SWQgJiYgdHlwZW9mIG9wdGlvbnNPckNsaWVudElkID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBvcHRpb25zT3JDbGllbnRJZFxuICAgICAgICAgICAgOiB7IGNsaWVudElkOiBvcHRpb25zT3JDbGllbnRJZCwgY2xpZW50U2VjcmV0LCByZWRpcmVjdFVyaSB9O1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUNhY2hlID0ge307XG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVFeHBpcnkgPSBudWxsO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlQ2FjaGVGb3JtYXQgPSBDZXJ0aWZpY2F0ZUZvcm1hdC5QRU07XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX2NsaWVudElkID0gb3B0cy5jbGllbnRJZDtcbiAgICAgICAgdGhpcy5fY2xpZW50U2VjcmV0ID0gb3B0cy5jbGllbnRTZWNyZXQ7XG4gICAgICAgIHRoaXMucmVkaXJlY3RVcmkgPSBvcHRzLnJlZGlyZWN0VXJpO1xuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IHtcbiAgICAgICAgICAgIHRva2VuSW5mb1VybDogJ2h0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuaW5mbycsXG4gICAgICAgICAgICBvYXV0aDJBdXRoQmFzZVVybDogJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi92Mi9hdXRoJyxcbiAgICAgICAgICAgIG9hdXRoMlRva2VuVXJsOiAnaHR0cHM6Ly9vYXV0aDIuZ29vZ2xlYXBpcy5jb20vdG9rZW4nLFxuICAgICAgICAgICAgb2F1dGgyUmV2b2tlVXJsOiAnaHR0cHM6Ly9vYXV0aDIuZ29vZ2xlYXBpcy5jb20vcmV2b2tlJyxcbiAgICAgICAgICAgIG9hdXRoMkZlZGVyYXRlZFNpZ25vblBlbUNlcnRzVXJsOiAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3YxL2NlcnRzJyxcbiAgICAgICAgICAgIG9hdXRoMkZlZGVyYXRlZFNpZ25vbkp3a0NlcnRzVXJsOiAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3YzL2NlcnRzJyxcbiAgICAgICAgICAgIG9hdXRoMklhcFB1YmxpY0tleVVybDogJ2h0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2lhcC92ZXJpZnkvcHVibGljX2tleScsXG4gICAgICAgICAgICAuLi5vcHRzLmVuZHBvaW50cyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbiA9XG4gICAgICAgICAgICBvcHRzLmNsaWVudEF1dGhlbnRpY2F0aW9uIHx8IENsaWVudEF1dGhlbnRpY2F0aW9uLkNsaWVudFNlY3JldFBvc3Q7XG4gICAgICAgIHRoaXMuaXNzdWVycyA9IG9wdHMuaXNzdWVycyB8fCBbXG4gICAgICAgICAgICAnYWNjb3VudHMuZ29vZ2xlLmNvbScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tJyxcbiAgICAgICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4sXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBVUkwgZm9yIGNvbnNlbnQgcGFnZSBsYW5kaW5nLlxuICAgICAqIEBwYXJhbSBvcHRzIE9wdGlvbnMuXG4gICAgICogQHJldHVybiBVUkwgdG8gY29uc2VudCBwYWdlLlxuICAgICAqL1xuICAgIGdlbmVyYXRlQXV0aFVybChvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKG9wdHMuY29kZV9jaGFsbGVuZ2VfbWV0aG9kICYmICFvcHRzLmNvZGVfY2hhbGxlbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIGEgY29kZV9jaGFsbGVuZ2VfbWV0aG9kIGlzIHByb3ZpZGVkLCBjb2RlX2NoYWxsZW5nZSBtdXN0IGJlIGluY2x1ZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMucmVzcG9uc2VfdHlwZSA9IG9wdHMucmVzcG9uc2VfdHlwZSB8fCAnY29kZSc7XG4gICAgICAgIG9wdHMuY2xpZW50X2lkID0gb3B0cy5jbGllbnRfaWQgfHwgdGhpcy5fY2xpZW50SWQ7XG4gICAgICAgIG9wdHMucmVkaXJlY3RfdXJpID0gb3B0cy5yZWRpcmVjdF91cmkgfHwgdGhpcy5yZWRpcmVjdFVyaTtcbiAgICAgICAgLy8gQWxsb3cgc2NvcGVzIHRvIGJlIHBhc3NlZCBlaXRoZXIgYXMgYXJyYXkgb3IgYSBzdHJpbmdcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cy5zY29wZSkpIHtcbiAgICAgICAgICAgIG9wdHMuc2NvcGUgPSBvcHRzLnNjb3BlLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290VXJsID0gdGhpcy5lbmRwb2ludHMub2F1dGgyQXV0aEJhc2VVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIChyb290VXJsICtcbiAgICAgICAgICAgICc/JyArXG4gICAgICAgICAgICBxdWVyeXN0cmluZy5zdHJpbmdpZnkob3B0cykpO1xuICAgIH1cbiAgICBnZW5lcmF0ZUNvZGVWZXJpZmllcigpIHtcbiAgICAgICAgLy8gVG8gbWFrZSB0aGUgY29kZSBjb21wYXRpYmxlIHdpdGggYnJvd3NlciBTdWJ0bGVDcnlwdG8gd2UgbmVlZCB0byBtYWtlXG4gICAgICAgIC8vIHRoaXMgbWV0aG9kIGFzeW5jLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlbmVyYXRlQ29kZVZlcmlmaWVyIGlzIHJlbW92ZWQsIHBsZWFzZSB1c2UgZ2VuZXJhdGVDb2RlVmVyaWZpZXJBc3luYyBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIGNvZGVfdmVyaWZpZXIsIGFuZCBpdHNcbiAgICAgKiByZXN1bHRpbmcgU0hBMjU2LiBJZiB1c2VkLCB0aGlzIG11c3QgYmUgcGFpcmVkIHdpdGggYSBTMjU2XG4gICAgICogY29kZV9jaGFsbGVuZ2VfbWV0aG9kLlxuICAgICAqXG4gICAgICogRm9yIGEgZnVsbCBleGFtcGxlIHNlZTpcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9nb29nbGUtYXV0aC1saWJyYXJ5LW5vZGVqcy9ibG9iL21haW4vc2FtcGxlcy9vYXV0aDItY29kZVZlcmlmaWVyLmpzXG4gICAgICovXG4gICAgYXN5bmMgZ2VuZXJhdGVDb2RlVmVyaWZpZXJBc3luYygpIHtcbiAgICAgICAgLy8gYmFzZTY0IGVuY29kaW5nIHVzZXMgNiBiaXRzIHBlciBjaGFyYWN0ZXIsIGFuZCB3ZSB3YW50IHRvIGdlbmVyYXRlMTI4XG4gICAgICAgIC8vIGNoYXJhY3RlcnMuIDYqMTI4LzggPSA5Ni5cbiAgICAgICAgY29uc3QgY3J5cHRvID0gKDAsIGNyeXB0b18xLmNyZWF0ZUNyeXB0bykoKTtcbiAgICAgICAgY29uc3QgcmFuZG9tU3RyaW5nID0gY3J5cHRvLnJhbmRvbUJ5dGVzQmFzZTY0KDk2KTtcbiAgICAgICAgLy8gVGhlIHZhbGlkIGNoYXJhY3RlcnMgaW4gdGhlIGNvZGVfdmVyaWZpZXIgYXJlIFtBLVpdL1thLXpdL1swLTldL1xuICAgICAgICAvLyBcIi1cIi9cIi5cIi9cIl9cIi9cIn5cIi4gQmFzZTY0IGVuY29kZWQgc3RyaW5ncyBhcmUgcHJldHR5IGNsb3NlLCBzbyB3ZSdyZSBqdXN0XG4gICAgICAgIC8vIHN3YXBwaW5nIG91dCBhIGZldyBjaGFycy5cbiAgICAgICAgY29uc3QgY29kZVZlcmlmaWVyID0gcmFuZG9tU3RyaW5nXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwrL2csICd+JylcbiAgICAgICAgICAgIC5yZXBsYWNlKC89L2csICdfJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJy0nKTtcbiAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGJhc2U2NCBlbmNvZGVkIFNIQTI1NlxuICAgICAgICBjb25zdCB1bmVuY29kZWRDb2RlQ2hhbGxlbmdlID0gYXdhaXQgY3J5cHRvLnNoYTI1NkRpZ2VzdEJhc2U2NChjb2RlVmVyaWZpZXIpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSBiYXNlNjRVcmxFbmNvZGluZyBpbnN0ZWFkIG9mIHN0YW5kYXJkIGJhc2U2NFxuICAgICAgICBjb25zdCBjb2RlQ2hhbGxlbmdlID0gdW5lbmNvZGVkQ29kZUNoYWxsZW5nZVxuICAgICAgICAgICAgLnNwbGl0KCc9JylbMF1cbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpO1xuICAgICAgICByZXR1cm4geyBjb2RlVmVyaWZpZXIsIGNvZGVDaGFsbGVuZ2UgfTtcbiAgICB9XG4gICAgZ2V0VG9rZW4oY29kZU9yT3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiBjb2RlT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHsgY29kZTogY29kZU9yT3B0aW9ucyB9IDogY29kZU9yT3B0aW9ucztcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmdldFRva2VuQXN5bmMob3B0aW9ucykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIudG9rZW5zLCByLnJlcyksIGUgPT4gY2FsbGJhY2soZSwgbnVsbCwgZS5yZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5Bc3luYyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRUb2tlbkFzeW5jKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5lbmRwb2ludHMub2F1dGgyVG9rZW5VcmwudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0ge1xuICAgICAgICAgICAgY2xpZW50X2lkOiBvcHRpb25zLmNsaWVudF9pZCB8fCB0aGlzLl9jbGllbnRJZCxcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IG9wdGlvbnMuY29kZVZlcmlmaWVyLFxuICAgICAgICAgICAgY29kZTogb3B0aW9ucy5jb2RlLFxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZScsXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IG9wdGlvbnMucmVkaXJlY3RfdXJpIHx8IHRoaXMucmVkaXJlY3RVcmksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uID09PSBDbGllbnRBdXRoZW50aWNhdGlvbi5DbGllbnRTZWNyZXRCYXNpYykge1xuICAgICAgICAgICAgY29uc3QgYmFzaWMgPSBCdWZmZXIuZnJvbShgJHt0aGlzLl9jbGllbnRJZH06JHt0aGlzLl9jbGllbnRTZWNyZXR9YCk7XG4gICAgICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtiYXNpYy50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbiA9PT0gQ2xpZW50QXV0aGVudGljYXRpb24uQ2xpZW50U2VjcmV0UG9zdCkge1xuICAgICAgICAgICAgdmFsdWVzLmNsaWVudF9zZWNyZXQgPSB0aGlzLl9jbGllbnRTZWNyZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLk9BdXRoMkNsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGRhdGE6IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh2YWx1ZXMpLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHJlcy5kYXRhO1xuICAgICAgICBpZiAocmVzLmRhdGEgJiYgcmVzLmRhdGEuZXhwaXJlc19pbikge1xuICAgICAgICAgICAgdG9rZW5zLmV4cGlyeV9kYXRlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyByZXMuZGF0YS5leHBpcmVzX2luICogMTAwMDtcbiAgICAgICAgICAgIGRlbGV0ZSB0b2tlbnMuZXhwaXJlc19pbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3Rva2VucycsIHRva2Vucyk7XG4gICAgICAgIHJldHVybiB7IHRva2VucywgcmVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuLlxuICAgICAqIEBwYXJhbSByZWZyZXNoX3Rva2VuIEV4aXN0aW5nIHJlZnJlc2ggdG9rZW4uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuKSB7XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5Ob0NhY2hlKHJlZnJlc2hUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgYSByZXF1ZXN0IHRvIHJlZnJlc2ggdXNpbmcgdGhlIHNhbWUgdG9rZW4gaGFzIHN0YXJ0ZWQsXG4gICAgICAgIC8vIHJldHVybiB0aGUgc2FtZSBwcm9taXNlLlxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoVG9rZW5Qcm9taXNlcy5oYXMocmVmcmVzaFRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuUHJvbWlzZXMuZ2V0KHJlZnJlc2hUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucmVmcmVzaFRva2VuTm9DYWNoZShyZWZyZXNoVG9rZW4pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblByb21pc2VzLmRlbGV0ZShyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0sIGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5Qcm9taXNlcy5kZWxldGUocmVmcmVzaFRva2VuKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblByb21pc2VzLnNldChyZWZyZXNoVG9rZW4sIHApO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgYXN5bmMgcmVmcmVzaFRva2VuTm9DYWNoZShyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWZyZXNoIHRva2VuIGlzIHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5vYXV0aDJUb2tlblVybC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9jbGllbnRJZCxcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuX2NsaWVudFNlY3JldCxcbiAgICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHJlcXVlc3QgZm9yIG5ldyB0b2tlblxuICAgICAgICAgICAgcmVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAuLi5PQXV0aDJDbGllbnQuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBkYXRhOiBxdWVyeXN0cmluZy5zdHJpbmdpZnkoZGF0YSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIGdheGlvc18xLkdheGlvc0Vycm9yICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID09PSAnaW52YWxpZF9ncmFudCcgJiZcbiAgICAgICAgICAgICAgICAoKF9hID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGEpICYmXG4gICAgICAgICAgICAgICAgL1JlQXV0aC9pLnRlc3QoZS5yZXNwb25zZS5kYXRhLmVycm9yX2Rlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGUucmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHJlcy5kYXRhO1xuICAgICAgICAvLyBUT0RPOiBkZS1kdXBsaWNhdGUgdGhpcyBjb2RlIGZyb20gYSBmZXcgc3BvdHNcbiAgICAgICAgaWYgKHJlcy5kYXRhICYmIHJlcy5kYXRhLmV4cGlyZXNfaW4pIHtcbiAgICAgICAgICAgIHRva2Vucy5leHBpcnlfZGF0ZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgcmVzLmRhdGEuZXhwaXJlc19pbiAqIDEwMDA7XG4gICAgICAgICAgICBkZWxldGUgdG9rZW5zLmV4cGlyZXNfaW47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCd0b2tlbnMnLCB0b2tlbnMpO1xuICAgICAgICByZXR1cm4geyB0b2tlbnMsIHJlcyB9O1xuICAgIH1cbiAgICByZWZyZXNoQWNjZXNzVG9rZW4oY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCkudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIuY3JlZGVudGlhbHMsIHIucmVzKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpIHtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKHRoaXMuY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbik7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHIudG9rZW5zO1xuICAgICAgICB0b2tlbnMucmVmcmVzaF90b2tlbiA9IHRoaXMuY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbjtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IHRva2VucztcbiAgICAgICAgcmV0dXJuIHsgY3JlZGVudGlhbHM6IHRoaXMuY3JlZGVudGlhbHMsIHJlczogci5yZXMgfTtcbiAgICB9XG4gICAgZ2V0QWNjZXNzVG9rZW4oY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFjY2Vzc1Rva2VuQXN5bmMoKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgci50b2tlbiwgci5yZXMpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0QWNjZXNzVG9rZW5Bc3luYygpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVmcmVzaCA9ICF0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbiB8fCB0aGlzLmlzVG9rZW5FeHBpcmluZygpO1xuICAgICAgICBpZiAoc2hvdWxkUmVmcmVzaCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoZWRBY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMucHJvY2Vzc0FuZFZhbGlkYXRlUmVmcmVzaEhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnJlc2hlZEFjY2Vzc1Rva2VuID09PSBudWxsIHx8IHJlZnJlc2hlZEFjY2Vzc1Rva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWZyZXNoZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3JlZGVudGlhbHMocmVmcmVzaGVkQWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9rZW46IHRoaXMuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiBvciByZWZyZXNoIGhhbmRsZXIgY2FsbGJhY2sgaXMgc2V0LicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgICAgICBpZiAoIXIuY3JlZGVudGlhbHMgfHwgKHIuY3JlZGVudGlhbHMgJiYgIXIuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHJlZnJlc2ggYWNjZXNzIHRva2VuLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdG9rZW46IHIuY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuLCByZXM6IHIucmVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyB0b2tlbjogdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4gfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBhdXRoZW50aWNhdGlvbiBpbnRlcmZhY2UuICBJdCB0YWtlcyBhbiBvcHRpb25hbCB1cmwgd2hpY2ggd2hlblxuICAgICAqIHByZXNlbnQgaXMgdGhlIGVuZHBvaW50IGJlaW5nIGFjY2Vzc2VkLCBhbmQgcmV0dXJucyBhIFByb21pc2Ugd2hpY2hcbiAgICAgKiByZXNvbHZlcyB3aXRoIGF1dGhvcml6YXRpb24gaGVhZGVyIGZpZWxkcy5cbiAgICAgKlxuICAgICAqIEluIE9BdXRoMkNsaWVudCwgdGhlIHJlc3VsdCBoYXMgdGhlIGZvcm06XG4gICAgICogeyBBdXRob3JpemF0aW9uOiAnQmVhcmVyIDxhY2Nlc3NfdG9rZW5fdmFsdWU+JyB9XG4gICAgICogQHBhcmFtIHVybCBUaGUgb3B0aW9uYWwgdXJsIGJlaW5nIGF1dGhvcml6ZWRcbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZXF1ZXN0SGVhZGVycyh1cmwpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IChhd2FpdCB0aGlzLmdldFJlcXVlc3RNZXRhZGF0YUFzeW5jKHVybCkpLmhlYWRlcnM7XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgICBhc3luYyBnZXRSZXF1ZXN0TWV0YWRhdGFBc3luYyhcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgdXJsKSB7XG4gICAgICAgIGNvbnN0IHRoaXNDcmVkcyA9IHRoaXMuY3JlZGVudGlhbHM7XG4gICAgICAgIGlmICghdGhpc0NyZWRzLmFjY2Vzc190b2tlbiAmJlxuICAgICAgICAgICAgIXRoaXNDcmVkcy5yZWZyZXNoX3Rva2VuICYmXG4gICAgICAgICAgICAhdGhpcy5hcGlLZXkgJiZcbiAgICAgICAgICAgICF0aGlzLnJlZnJlc2hIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcywgcmVmcmVzaCB0b2tlbiwgQVBJIGtleSBvciByZWZyZXNoIGhhbmRsZXIgY2FsbGJhY2sgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzQ3JlZHMuYWNjZXNzX3Rva2VuICYmICF0aGlzLmlzVG9rZW5FeHBpcmluZygpKSB7XG4gICAgICAgICAgICB0aGlzQ3JlZHMudG9rZW5fdHlwZSA9IHRoaXNDcmVkcy50b2tlbl90eXBlIHx8ICdCZWFyZXInO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzQ3JlZHMudG9rZW5fdHlwZSArICcgJyArIHRoaXNDcmVkcy5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHsgaGVhZGVyczogdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycykgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiByZWZyZXNoSGFuZGxlciBleGlzdHMsIGNhbGwgcHJvY2Vzc0FuZFZhbGlkYXRlUmVmcmVzaEhhbmRsZXIoKS5cbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZEFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5wcm9jZXNzQW5kVmFsaWRhdGVSZWZyZXNoSGFuZGxlcigpO1xuICAgICAgICAgICAgaWYgKHJlZnJlc2hlZEFjY2Vzc1Rva2VuID09PSBudWxsIHx8IHJlZnJlc2hlZEFjY2Vzc1Rva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWZyZXNoZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENyZWRlbnRpYWxzKHJlZnJlc2hlZEFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyB0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGhlYWRlcnM6IHRoaXMuYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKGhlYWRlcnMpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4geyBoZWFkZXJzOiB7ICdYLUdvb2ctQXBpLUtleSc6IHRoaXMuYXBpS2V5IH0gfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgciA9IG51bGw7XG4gICAgICAgIGxldCB0b2tlbnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgciA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKHRoaXNDcmVkcy5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgIHRva2VucyA9IHIudG9rZW5zO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcnI7XG4gICAgICAgICAgICBpZiAoZS5yZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgIChlLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzIHx8IGUucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gYENvdWxkIG5vdCByZWZyZXNoIGFjY2VzcyB0b2tlbjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmNyZWRlbnRpYWxzO1xuICAgICAgICBjcmVkZW50aWFscy50b2tlbl90eXBlID0gY3JlZGVudGlhbHMudG9rZW5fdHlwZSB8fCAnQmVhcmVyJztcbiAgICAgICAgdG9rZW5zLnJlZnJlc2hfdG9rZW4gPSBjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gdG9rZW5zO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogY3JlZGVudGlhbHMudG9rZW5fdHlwZSArICcgJyArIHRva2Vucy5hY2Nlc3NfdG9rZW4sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGhlYWRlcnM6IHRoaXMuYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKGhlYWRlcnMpLCByZXM6IHIucmVzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBVUkwgdG8gcmV2b2tlIHRoZSBnaXZlbiB0b2tlbi5cbiAgICAgKiBAcGFyYW0gdG9rZW4gVGhlIGV4aXN0aW5nIHRva2VuIHRvIGJlIHJldm9rZWQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW5zdGFuY2UgbWV0aG9kIHtAbGluayBPQXV0aDJDbGllbnQuZ2V0UmV2b2tlVG9rZW5VUkx9XG4gICAgICovXG4gICAgc3RhdGljIGdldFJldm9rZVRva2VuVXJsKHRva2VuKSB7XG4gICAgICAgIHJldHVybiBuZXcgT0F1dGgyQ2xpZW50KCkuZ2V0UmV2b2tlVG9rZW5VUkwodG9rZW4pLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIFVSTCB0byByZXZva2UgdGhlIGdpdmVuIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRva2VuIFRoZSBleGlzdGluZyB0b2tlbiB0byBiZSByZXZva2VkLlxuICAgICAqL1xuICAgIGdldFJldm9rZVRva2VuVVJMKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5lbmRwb2ludHMub2F1dGgyUmV2b2tlVXJsKTtcbiAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICByZXZva2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIC4uLk9BdXRoMkNsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICB1cmw6IHRoaXMuZ2V0UmV2b2tlVG9rZW5VUkwodG9rZW4pLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zcG9ydGVyXG4gICAgICAgICAgICAgICAgLnJlcXVlc3Qob3B0cylcbiAgICAgICAgICAgICAgICAudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldm9rZUNyZWRlbnRpYWxzKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yZXZva2VDcmVkZW50aWFsc0FzeW5jKCkudGhlbihyZXMgPT4gY2FsbGJhY2sobnVsbCwgcmVzKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV2b2tlQ3JlZGVudGlhbHNBc3luYygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJldm9rZUNyZWRlbnRpYWxzQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW47XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7fTtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXZva2VUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0b2tlbiB0byByZXZva2UuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdChvcHRzLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEFzeW5jKG9wdHMpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByKSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUsIGUucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QXN5bmMob3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdEFzeW5jKG9wdHMsIHJlQXV0aFJldHJpZWQgPSBmYWxzZSkge1xuICAgICAgICBsZXQgcjI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5nZXRSZXF1ZXN0TWV0YWRhdGFBc3luYyhvcHRzLnVybCk7XG4gICAgICAgICAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgICAgICBpZiAoci5oZWFkZXJzICYmIHIuaGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J10gPSByLmhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyLmhlYWRlcnMgJiYgci5oZWFkZXJzLkF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IHIuaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWydYLUdvb2ctQXBpLUtleSddID0gdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByMiA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gZS5yZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1cztcbiAgICAgICAgICAgICAgICAvLyBSZXRyeSB0aGUgcmVxdWVzdCBmb3IgbWV0YWRhdGEgaWYgdGhlIGZvbGxvd2luZyBjcml0ZXJpYSBhcmUgdHJ1ZTpcbiAgICAgICAgICAgICAgICAvLyAtIFdlIGhhdmVuJ3QgYWxyZWFkeSByZXRyaWVkLiAgSXQgb25seSBtYWtlcyBzZW5zZSB0byByZXRyeSBvbmNlLlxuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlc3BvbnNlIHdhcyBhIDQwMSBvciBhIDQwM1xuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlcXVlc3QgZGlkbid0IHNlbmQgYSByZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIC8vIC0gQW4gYWNjZXNzX3Rva2VuIGFuZCByZWZyZXNoX3Rva2VuIHdlcmUgYXZhaWxhYmxlLCBidXQgZWl0aGVyIG5vXG4gICAgICAgICAgICAgICAgLy8gICBleHBpcnlfZGF0ZSB3YXMgYXZhaWxhYmxlIG9yIHRoZSBmb3JjZVJlZnJlc2hPbkZhaWx1cmUgZmxhZyBpcyBzZXQuXG4gICAgICAgICAgICAgICAgLy8gICBUaGUgYWJzZW50IGV4cGlyeV9kYXRlIGNhc2UgY2FuIGhhcHBlbiB3aGVuIGRldmVsb3BlcnMgc3Rhc2ggdGhlXG4gICAgICAgICAgICAgICAgLy8gICBhY2Nlc3NfdG9rZW4gYW5kIHJlZnJlc2hfdG9rZW4gZm9yIGxhdGVyIHVzZSwgYnV0IHRoZSBhY2Nlc3NfdG9rZW5cbiAgICAgICAgICAgICAgICAvLyAgIGZhaWxzIG9uIHRoZSBmaXJzdCB0cnkgYmVjYXVzZSBpdCdzIGV4cGlyZWQuIFNvbWUgZGV2ZWxvcGVycyBtYXlcbiAgICAgICAgICAgICAgICAvLyAgIGNob29zZSB0byBlbmFibGUgZm9yY2VSZWZyZXNoT25GYWlsdXJlIHRvIG1pdGlnYXRlIHRpbWUtcmVsYXRlZFxuICAgICAgICAgICAgICAgIC8vICAgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIE9yIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEgYXJlIHRydWU6XG4gICAgICAgICAgICAgICAgLy8gLSBXZSBoYXZlbid0IGFscmVhZHkgcmV0cmllZC4gIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gcmV0cnkgb25jZS5cbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXNwb25zZSB3YXMgYSA0MDEgb3IgYSA0MDNcbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXF1ZXN0IGRpZG4ndCBzZW5kIGEgcmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAvLyAtIE5vIHJlZnJlc2hfdG9rZW4gd2FzIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIC8vIC0gQW4gYWNjZXNzX3Rva2VuIGFuZCBhIHJlZnJlc2hIYW5kbGVyIGNhbGxiYWNrIHdlcmUgYXZhaWxhYmxlLCBidXRcbiAgICAgICAgICAgICAgICAvLyAgIGVpdGhlciBubyBleHBpcnlfZGF0ZSB3YXMgYXZhaWxhYmxlIG9yIHRoZSBmb3JjZVJlZnJlc2hPbkZhaWx1cmVcbiAgICAgICAgICAgICAgICAvLyAgIGZsYWcgaXMgc2V0LiBUaGUgYWNjZXNzX3Rva2VuIGZhaWxzIG9uIHRoZSBmaXJzdCB0cnkgYmVjYXVzZSBpdCdzXG4gICAgICAgICAgICAgICAgLy8gICBleHBpcmVkLiBTb21lIGRldmVsb3BlcnMgbWF5IGNob29zZSB0byBlbmFibGUgZm9yY2VSZWZyZXNoT25GYWlsdXJlXG4gICAgICAgICAgICAgICAgLy8gICB0byBtaXRpZ2F0ZSB0aW1lLXJlbGF0ZWQgZXJyb3JzLlxuICAgICAgICAgICAgICAgIGNvbnN0IG1heVJlcXVpcmVSZWZyZXNoID0gdGhpcy5jcmVkZW50aWFscyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgKCF0aGlzLmNyZWRlbnRpYWxzLmV4cGlyeV9kYXRlIHx8IHRoaXMuZm9yY2VSZWZyZXNoT25GYWlsdXJlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXlSZXF1aXJlUmVmcmVzaFdpdGhOb1JlZnJlc2hUb2tlbiA9IHRoaXMuY3JlZGVudGlhbHMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICAoIXRoaXMuY3JlZGVudGlhbHMuZXhwaXJ5X2RhdGUgfHwgdGhpcy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEhhbmRsZXI7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbSA9IHJlcy5jb25maWcuZGF0YSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhFcnIgPSBzdGF0dXNDb2RlID09PSA0MDEgfHwgc3RhdHVzQ29kZSA9PT0gNDAzO1xuICAgICAgICAgICAgICAgIGlmICghcmVBdXRoUmV0cmllZCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0F1dGhFcnIgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVhZGFibGVTdHJlYW0gJiZcbiAgICAgICAgICAgICAgICAgICAgbWF5UmVxdWlyZVJlZnJlc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QXN5bmMob3B0cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFyZUF1dGhSZXRyaWVkICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aEVyciAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNSZWFkYWJsZVN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICBtYXlSZXF1aXJlUmVmcmVzaFdpdGhOb1JlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoZWRBY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMucHJvY2Vzc0FuZFZhbGlkYXRlUmVmcmVzaEhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnJlc2hlZEFjY2Vzc1Rva2VuID09PSBudWxsIHx8IHJlZnJlc2hlZEFjY2Vzc1Rva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWZyZXNoZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3JlZGVudGlhbHMocmVmcmVzaGVkQWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RBc3luYyhvcHRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByMjtcbiAgICB9XG4gICAgdmVyaWZ5SWRUb2tlbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYWNjZXB0IHR3byBhcmd1bWVudHMgaW5zdGVhZCBvZiBhbiBvcHRpb25zIG9iamVjdC5cbiAgICAgICAgLy8gQ2hlY2sgdGhlIHR5cGVzIHRvIGhlbHAgdXNlcnMgdXBncmFkZSB3aXRoIGxlc3MgcGFpbi5cbiAgICAgICAgLy8gVGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZCBhZnRlciBhIDIuMCByZWxlYXNlLlxuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGFjY2VwdHMgYW4gb3B0aW9ucyBvYmplY3QgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciwgd2hpY2ggaW5jbHVkZXMgdGhlIGlkVG9rZW4sIGF1ZGllbmNlLCBhbmQgbWF4RXhwaXJ5LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy52ZXJpZnlJZFRva2VuQXN5bmMob3B0aW9ucykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZnlJZFRva2VuQXN5bmMob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5SWRUb2tlbkFzeW5jKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmlkVG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHZlcmlmeUlkVG9rZW4gbWV0aG9kIHJlcXVpcmVzIGFuIElEIFRva2VuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEZlZGVyYXRlZFNpZ25vbkNlcnRzQXN5bmMoKTtcbiAgICAgICAgY29uc3QgbG9naW4gPSBhd2FpdCB0aGlzLnZlcmlmeVNpZ25lZEp3dFdpdGhDZXJ0c0FzeW5jKG9wdGlvbnMuaWRUb2tlbiwgcmVzcG9uc2UuY2VydHMsIG9wdGlvbnMuYXVkaWVuY2UsIHRoaXMuaXNzdWVycywgb3B0aW9ucy5tYXhFeHBpcnkpO1xuICAgICAgICByZXR1cm4gbG9naW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9idGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3Zpc2lvbmVkIGFjY2VzcyB0b2tlbi4gIEVzcGVjaWFsbHkgdXNlZnVsXG4gICAgICogaWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlIHNjb3BlcyB0aGF0IHdlcmUgcHJvdmlzaW9uZWQgdG8gYSBnaXZlbiB0b2tlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY2Nlc3NUb2tlbiBSZXF1aXJlZC4gIFRoZSBBY2Nlc3MgVG9rZW4gZm9yIHdoaWNoIHlvdSB3YW50IHRvIGdldFxuICAgICAqIHVzZXIgaW5mby5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRUb2tlbkluZm8oYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICAgICAgLi4uT0F1dGgyQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cmw6IHRoaXMuZW5kcG9pbnRzLnRva2VuSW5mb1VybC50b1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW5mbyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgZGF0YS5leHBpcmVzX2luICogMTAwMCxcbiAgICAgICAgICAgIHNjb3BlczogZGF0YS5zY29wZS5zcGxpdCgnICcpLFxuICAgICAgICB9LCBkYXRhKTtcbiAgICAgICAgZGVsZXRlIGluZm8uZXhwaXJlc19pbjtcbiAgICAgICAgZGVsZXRlIGluZm8uc2NvcGU7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBnZXRGZWRlcmF0ZWRTaWdub25DZXJ0cyhjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmVkZXJhdGVkU2lnbm9uQ2VydHNBc3luYygpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByLmNlcnRzLCByLnJlcyksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZlZGVyYXRlZFNpZ25vbkNlcnRzQXN5bmMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRGZWRlcmF0ZWRTaWdub25DZXJ0c0FzeW5jKCkge1xuICAgICAgICBjb25zdCBub3dUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9ICgwLCBjcnlwdG9fMS5oYXNCcm93c2VyQ3J5cHRvKSgpXG4gICAgICAgICAgICA/IENlcnRpZmljYXRlRm9ybWF0LkpXS1xuICAgICAgICAgICAgOiBDZXJ0aWZpY2F0ZUZvcm1hdC5QRU07XG4gICAgICAgIGlmICh0aGlzLmNlcnRpZmljYXRlRXhwaXJ5ICYmXG4gICAgICAgICAgICBub3dUaW1lIDwgdGhpcy5jZXJ0aWZpY2F0ZUV4cGlyeS5nZXRUaW1lKCkgJiZcbiAgICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGVDYWNoZUZvcm1hdCA9PT0gZm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBjZXJ0czogdGhpcy5jZXJ0aWZpY2F0ZUNhY2hlLCBmb3JtYXQgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzO1xuICAgICAgICBsZXQgdXJsO1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBDZXJ0aWZpY2F0ZUZvcm1hdC5QRU06XG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5lbmRwb2ludHMub2F1dGgyRmVkZXJhdGVkU2lnbm9uUGVtQ2VydHNVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2VydGlmaWNhdGVGb3JtYXQuSldLOlxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZW5kcG9pbnRzLm9hdXRoMkZlZGVyYXRlZFNpZ25vbkp3a0NlcnRzVXJsLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY2VydGlmaWNhdGUgZm9ybWF0ICR7Zm9ybWF0fWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIC4uLk9BdXRoMkNsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBgRmFpbGVkIHRvIHJldHJpZXZlIHZlcmlmaWNhdGlvbiBjZXJ0aWZpY2F0ZXM6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhY2hlQ29udHJvbCA9IHJlcyA/IHJlcy5oZWFkZXJzWydjYWNoZS1jb250cm9sJ10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBjYWNoZUFnZSA9IC0xO1xuICAgICAgICBpZiAoY2FjaGVDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgnbWF4LWFnZT0oWzAtOV0qKScpO1xuICAgICAgICAgICAgY29uc3QgcmVnZXhSZXN1bHQgPSBwYXR0ZXJuLmV4ZWMoY2FjaGVDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChyZWdleFJlc3VsdCAmJiByZWdleFJlc3VsdC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBDYWNoZSByZXN1bHRzIHdpdGggbWF4LWFnZSAoaW4gc2Vjb25kcylcbiAgICAgICAgICAgICAgICBjYWNoZUFnZSA9IE51bWJlcihyZWdleFJlc3VsdFsxXSkgKiAxMDAwOyAvLyBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgY2VydGlmaWNhdGVzID0ge307XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIENlcnRpZmljYXRlRm9ybWF0LlBFTTpcbiAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMgPSByZXMuZGF0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ2VydGlmaWNhdGVGb3JtYXQuSldLOlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcy5kYXRhLmtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzW2tleS5raWRdID0ga2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjZXJ0aWZpY2F0ZSBmb3JtYXQgJHtmb3JtYXR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUV4cGlyeSA9XG4gICAgICAgICAgICBjYWNoZUFnZSA9PT0gLTEgPyBudWxsIDogbmV3IERhdGUobm93LmdldFRpbWUoKSArIGNhY2hlQWdlKTtcbiAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUNhY2hlID0gY2VydGlmaWNhdGVzO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlQ2FjaGVGb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgIHJldHVybiB7IGNlcnRzOiBjZXJ0aWZpY2F0ZXMsIGZvcm1hdCwgcmVzIH07XG4gICAgfVxuICAgIGdldElhcFB1YmxpY0tleXMoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmdldElhcFB1YmxpY0tleXNBc3luYygpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByLnB1YmtleXMsIHIucmVzKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SWFwUHVibGljS2V5c0FzeW5jKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0SWFwUHVibGljS2V5c0FzeW5jKCkge1xuICAgICAgICBsZXQgcmVzO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5vYXV0aDJJYXBQdWJsaWNLZXlVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgLi4uT0F1dGgyQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IGBGYWlsZWQgdG8gcmV0cmlldmUgdmVyaWZpY2F0aW9uIGNlcnRpZmljYXRlczogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcHVia2V5czogcmVzLmRhdGEsIHJlcyB9O1xuICAgIH1cbiAgICB2ZXJpZnlTaWduZWRKd3RXaXRoQ2VydHMoKSB7XG4gICAgICAgIC8vIFRvIG1ha2UgdGhlIGNvZGUgY29tcGF0aWJsZSB3aXRoIGJyb3dzZXIgU3VidGxlQ3J5cHRvIHdlIG5lZWQgdG8gbWFrZVxuICAgICAgICAvLyB0aGlzIG1ldGhvZCBhc3luYy5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2ZXJpZnlTaWduZWRKd3RXaXRoQ2VydHMgaXMgcmVtb3ZlZCwgcGxlYXNlIHVzZSB2ZXJpZnlTaWduZWRKd3RXaXRoQ2VydHNBc3luYyBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWZXJpZnkgdGhlIGlkIHRva2VuIGlzIHNpZ25lZCB3aXRoIHRoZSBjb3JyZWN0IGNlcnRpZmljYXRlXG4gICAgICogYW5kIGlzIGZyb20gdGhlIGNvcnJlY3QgYXVkaWVuY2UuXG4gICAgICogQHBhcmFtIGp3dCBUaGUgand0IHRvIHZlcmlmeSAoVGhlIElEIFRva2VuIGluIHRoaXMgY2FzZSkuXG4gICAgICogQHBhcmFtIGNlcnRzIFRoZSBhcnJheSBvZiBjZXJ0cyB0byB0ZXN0IHRoZSBqd3QgYWdhaW5zdC5cbiAgICAgKiBAcGFyYW0gcmVxdWlyZWRBdWRpZW5jZSBUaGUgYXVkaWVuY2UgdG8gdGVzdCB0aGUgand0IGFnYWluc3QuXG4gICAgICogQHBhcmFtIGlzc3VlcnMgVGhlIGFsbG93ZWQgaXNzdWVycyBvZiB0aGUgand0IChPcHRpb25hbCkuXG4gICAgICogQHBhcmFtIG1heEV4cGlyeSBUaGUgbWF4IGV4cGlyeSB0aGUgY2VydGlmaWNhdGUgY2FuIGJlIChPcHRpb25hbCkuXG4gICAgICogQHJldHVybiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gTG9naW5UaWNrZXQgb24gdmVyaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHZlcmlmeVNpZ25lZEp3dFdpdGhDZXJ0c0FzeW5jKGp3dCwgY2VydHMsIHJlcXVpcmVkQXVkaWVuY2UsIGlzc3VlcnMsIG1heEV4cGlyeSkge1xuICAgICAgICBjb25zdCBjcnlwdG8gPSAoMCwgY3J5cHRvXzEuY3JlYXRlQ3J5cHRvKSgpO1xuICAgICAgICBpZiAoIW1heEV4cGlyeSkge1xuICAgICAgICAgICAgbWF4RXhwaXJ5ID0gT0F1dGgyQ2xpZW50LkRFRkFVTFRfTUFYX1RPS0VOX0xJRkVUSU1FX1NFQ1NfO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gand0LnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgbnVtYmVyIG9mIHNlZ21lbnRzIGluIHRva2VuOiAnICsgand0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduZWQgPSBzZWdtZW50c1swXSArICcuJyArIHNlZ21lbnRzWzFdO1xuICAgICAgICBsZXQgc2lnbmF0dXJlID0gc2VnbWVudHNbMl07XG4gICAgICAgIGxldCBlbnZlbG9wZTtcbiAgICAgICAgbGV0IHBheWxvYWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbnZlbG9wZSA9IEpTT04ucGFyc2UoY3J5cHRvLmRlY29kZUJhc2U2NFN0cmluZ1V0Zjgoc2VnbWVudHNbMF0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IGBDYW4ndCBwYXJzZSB0b2tlbiBlbnZlbG9wZTogJHtzZWdtZW50c1swXX0nOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnZlbG9wZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGFyc2UgdG9rZW4gZW52ZWxvcGU6IFwiICsgc2VnbWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShjcnlwdG8uZGVjb2RlQmFzZTY0U3RyaW5nVXRmOChzZWdtZW50c1sxXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gYENhbid0IHBhcnNlIHRva2VuIHBheWxvYWQgJyR7c2VnbWVudHNbMF19YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBheWxvYWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHBhcnNlIHRva2VuIHBheWxvYWQ6IFwiICsgc2VnbWVudHNbMV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNlcnRzLCBlbnZlbG9wZS5raWQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBwcmVzZW50LCB0aGVuIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGF0dGVtcHQgdmVyaWZpY2F0aW9uXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBlbSBmb3VuZCBmb3IgZW52ZWxvcGU6ICcgKyBKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlcnQgPSBjZXJ0c1tlbnZlbG9wZS5raWRdO1xuICAgICAgICBpZiAoZW52ZWxvcGUuYWxnID09PSAnRVMyNTYnKSB7XG4gICAgICAgICAgICBzaWduYXR1cmUgPSBmb3JtYXRFY2RzYS5qb3NlVG9EZXIoc2lnbmF0dXJlLCAnRVMyNTYnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmVyaWZpZWQgPSBhd2FpdCBjcnlwdG8udmVyaWZ5KGNlcnQsIHNpZ25lZCwgc2lnbmF0dXJlKTtcbiAgICAgICAgaWYgKCF2ZXJpZmllZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRva2VuIHNpZ25hdHVyZTogJyArIGp3dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpc3N1ZSB0aW1lIGluIHRva2VuOiAnICsgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGF5bG9hZC5leHApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZXhwaXJhdGlvbiB0aW1lIGluIHRva2VuOiAnICsgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlhdCA9IE51bWJlcihwYXlsb2FkLmlhdCk7XG4gICAgICAgIGlmIChpc05hTihpYXQpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpYXQgZmllbGQgdXNpbmcgaW52YWxpZCBmb3JtYXQnKTtcbiAgICAgICAgY29uc3QgZXhwID0gTnVtYmVyKHBheWxvYWQuZXhwKTtcbiAgICAgICAgaWYgKGlzTmFOKGV4cCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cCBmaWVsZCB1c2luZyBpbnZhbGlkIGZvcm1hdCcpO1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIGlmIChleHAgPj0gbm93ICsgbWF4RXhwaXJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGlyYXRpb24gdGltZSB0b28gZmFyIGluIGZ1dHVyZTogJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlYXJsaWVzdCA9IGlhdCAtIE9BdXRoMkNsaWVudC5DTE9DS19TS0VXX1NFQ1NfO1xuICAgICAgICBjb25zdCBsYXRlc3QgPSBleHAgKyBPQXV0aDJDbGllbnQuQ0xPQ0tfU0tFV19TRUNTXztcbiAgICAgICAgaWYgKG5vdyA8IGVhcmxpZXN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIHVzZWQgdG9vIGVhcmx5LCAnICtcbiAgICAgICAgICAgICAgICBub3cgK1xuICAgICAgICAgICAgICAgICcgPCAnICtcbiAgICAgICAgICAgICAgICBlYXJsaWVzdCArXG4gICAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub3cgPiBsYXRlc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9rZW4gdXNlZCB0b28gbGF0ZSwgJyArXG4gICAgICAgICAgICAgICAgbm93ICtcbiAgICAgICAgICAgICAgICAnID4gJyArXG4gICAgICAgICAgICAgICAgbGF0ZXN0ICtcbiAgICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzc3VlcnMgJiYgaXNzdWVycy5pbmRleE9mKHBheWxvYWQuaXNzKSA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpc3N1ZXIsIGV4cGVjdGVkIG9uZSBvZiBbJyArXG4gICAgICAgICAgICAgICAgaXNzdWVycyArXG4gICAgICAgICAgICAgICAgJ10sIGJ1dCBnb3QgJyArXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIHRoZSBhdWRpZW5jZSBtYXRjaGVzIGlmIHdlIGhhdmUgb25lXG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZWRBdWRpZW5jZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZWRBdWRpZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYXVkID0gcGF5bG9hZC5hdWQ7XG4gICAgICAgICAgICBsZXQgYXVkVmVyaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSByZXF1aXJlZEF1ZGllbmNlIGlzIGFuIGFycmF5LCBjaGVjayBpZiBpdCBjb250YWlucyB0b2tlblxuICAgICAgICAgICAgLy8gYXVkaWVuY2VcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZEF1ZGllbmNlLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgICAgICAgICAgIGF1ZFZlcmlmaWVkID0gcmVxdWlyZWRBdWRpZW5jZS5pbmRleE9mKGF1ZCkgPiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF1ZFZlcmlmaWVkID0gYXVkID09PSByZXF1aXJlZEF1ZGllbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhdWRWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgcmVjaXBpZW50LCBwYXlsb2FkIGF1ZGllbmNlICE9IHJlcXVpcmVkQXVkaWVuY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGxvZ2ludGlja2V0XzEuTG9naW5UaWNrZXQoZW52ZWxvcGUsIHBheWxvYWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggQWNjZXNzVG9rZW5SZXNwb25zZSB0eXBlIGlmXG4gICAgICogcmVmcmVzaEhhbmRsZXIgaXMgZGVmaW5lZC5cbiAgICAgKiBJZiBub3QsIG5vdGhpbmcgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgYXN5bmMgcHJvY2Vzc0FuZFZhbGlkYXRlUmVmcmVzaEhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZnJlc2hIYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlblJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZWZyZXNoSGFuZGxlcigpO1xuICAgICAgICAgICAgaWYgKCFhY2Nlc3NUb2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRva2VuIGlzIHJldHVybmVkIGJ5IHRoZSByZWZyZXNoSGFuZGxlciBjYWxsYmFjay4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NUb2tlblJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGEgdG9rZW4gaXMgZXhwaXJlZCBvciB3aWxsIGV4cGlyZSB3aXRoaW5cbiAgICAgKiBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXNtaWxsaXNlY29uZHMuXG4gICAgICogSWYgdGhlcmUgaXMgbm8gZXhwaXJ5IHRpbWUsIGFzc3VtZXMgdGhlIHRva2VuIGlzIG5vdCBleHBpcmVkIG9yIGV4cGlyaW5nLlxuICAgICAqL1xuICAgIGlzVG9rZW5FeHBpcmluZygpIHtcbiAgICAgICAgY29uc3QgZXhwaXJ5RGF0ZSA9IHRoaXMuY3JlZGVudGlhbHMuZXhwaXJ5X2RhdGU7XG4gICAgICAgIHJldHVybiBleHBpcnlEYXRlXG4gICAgICAgICAgICA/IGV4cGlyeURhdGUgPD0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpc1xuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLk9BdXRoMkNsaWVudCA9IE9BdXRoMkNsaWVudDtcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIGluc3RhbmNlJ3Mge0BsaW5rIE9BdXRoMkNsaWVudC5lbmRwb2ludHN9XG4gKi9cbk9BdXRoMkNsaWVudC5HT09HTEVfVE9LRU5fSU5GT19VUkwgPSAnaHR0cHM6Ly9vYXV0aDIuZ29vZ2xlYXBpcy5jb20vdG9rZW5pbmZvJztcbi8qKlxuICogQ2xvY2sgc2tldyAtIGZpdmUgbWludXRlcyBpbiBzZWNvbmRzXG4gKi9cbk9BdXRoMkNsaWVudC5DTE9DS19TS0VXX1NFQ1NfID0gMzAwO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBtYXggVG9rZW4gTGlmZXRpbWUgaXMgb25lIGRheSBpbiBzZWNvbmRzXG4gKi9cbk9BdXRoMkNsaWVudC5ERUZBVUxUX01BWF9UT0tFTl9MSUZFVElNRV9TRUNTXyA9IDg2NDAwO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDEzIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db21wdXRlID0gdm9pZCAwO1xuY29uc3QgZ2F4aW9zXzEgPSByZXF1aXJlKFwiZ2F4aW9zXCIpO1xuY29uc3QgZ2NwTWV0YWRhdGEgPSByZXF1aXJlKFwiZ2NwLW1ldGFkYXRhXCIpO1xuY29uc3Qgb2F1dGgyY2xpZW50XzEgPSByZXF1aXJlKFwiLi9vYXV0aDJjbGllbnRcIik7XG5jbGFzcyBDb21wdXRlIGV4dGVuZHMgb2F1dGgyY2xpZW50XzEuT0F1dGgyQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgc2VydmljZSBhY2NvdW50IGNyZWRlbnRpYWxzLlxuICAgICAqXG4gICAgICogUmV0cmlldmUgYWNjZXNzIHRva2VuIGZyb20gdGhlIG1ldGFkYXRhIHNlcnZlci5cbiAgICAgKiBTZWU6IGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvYWNjZXNzL2F1dGhlbnRpY2F0ZS13b3JrbG9hZHMjYXBwbGljYXRpb25zXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICAvLyBTdGFydCB3aXRoIGFuIGV4cGlyZWQgcmVmcmVzaCB0b2tlbiwgd2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IGJlXG4gICAgICAgIC8vIHJlZnJlc2hlZCBiZWZvcmUgdGhlIGZpcnN0IEFQSSBjYWxsIGlzIG1hZGUuXG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7IGV4cGlyeV9kYXRlOiAxLCByZWZyZXNoX3Rva2VuOiAnY29tcHV0ZS1wbGFjZWhvbGRlcicgfTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlQWNjb3VudEVtYWlsID0gb3B0aW9ucy5zZXJ2aWNlQWNjb3VudEVtYWlsIHx8ICdkZWZhdWx0JztcbiAgICAgICAgdGhpcy5zY29wZXMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuc2NvcGVzKVxuICAgICAgICAgICAgPyBvcHRpb25zLnNjb3Blc1xuICAgICAgICAgICAgOiBvcHRpb25zLnNjb3Blc1xuICAgICAgICAgICAgICAgID8gW29wdGlvbnMuc2NvcGVzXVxuICAgICAgICAgICAgICAgIDogW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuLlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gVW51c2VkIHBhcmFtZXRlclxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbk5vQ2FjaGUoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zdCB0b2tlblBhdGggPSBgc2VydmljZS1hY2NvdW50cy8ke3RoaXMuc2VydmljZUFjY291bnRFbWFpbH0vdG9rZW5gO1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogdG9rZW5QYXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjb3Blcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VPcHRpb25zLnBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzOiB0aGlzLnNjb3Blcy5qb2luKCcsJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBnY3BNZXRhZGF0YS5pbnN0YW5jZShpbnN0YW5jZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIGdheGlvc18xLkdheGlvc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gYENvdWxkIG5vdCByZWZyZXNoIGFjY2VzcyB0b2tlbjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBFcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW5zID0gZGF0YTtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5leHBpcmVzX2luKSB7XG4gICAgICAgICAgICB0b2tlbnMuZXhwaXJ5X2RhdGUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGRhdGEuZXhwaXJlc19pbiAqIDEwMDA7XG4gICAgICAgICAgICBkZWxldGUgdG9rZW5zLmV4cGlyZXNfaW47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCd0b2tlbnMnLCB0b2tlbnMpO1xuICAgICAgICByZXR1cm4geyB0b2tlbnMsIHJlczogbnVsbCB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIGFuIElEIHRva2VuLlxuICAgICAqIEBwYXJhbSB0YXJnZXRBdWRpZW5jZSB0aGUgYXVkaWVuY2UgZm9yIHRoZSBmZXRjaGVkIElEIHRva2VuLlxuICAgICAqL1xuICAgIGFzeW5jIGZldGNoSWRUb2tlbih0YXJnZXRBdWRpZW5jZSkge1xuICAgICAgICBjb25zdCBpZFRva2VuUGF0aCA9IGBzZXJ2aWNlLWFjY291bnRzLyR7dGhpcy5zZXJ2aWNlQWNjb3VudEVtYWlsfS9pZGVudGl0eWAgK1xuICAgICAgICAgICAgYD9mb3JtYXQ9ZnVsbCZhdWRpZW5jZT0ke3RhcmdldEF1ZGllbmNlfWA7XG4gICAgICAgIGxldCBpZFRva2VuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBpZFRva2VuUGF0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZFRva2VuID0gYXdhaXQgZ2NwTWV0YWRhdGEuaW5zdGFuY2UoaW5zdGFuY2VPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IGBDb3VsZCBub3QgZmV0Y2ggSUQgdG9rZW46ICR7ZS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZFRva2VuO1xuICAgIH1cbiAgICB3cmFwRXJyb3IoZSkge1xuICAgICAgICBjb25zdCByZXMgPSBlLnJlc3BvbnNlO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5zdGF0dXMpIHtcbiAgICAgICAgICAgIGUuc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAnQSBGb3JiaWRkZW4gZXJyb3Igd2FzIHJldHVybmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgYW4gYWNjZXNzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuIGZvciB0aGUgQ29tcHV0ZSBFbmdpbmUgYnVpbHQtaW4gc2VydmljZSBhY2NvdW50LiBUaGlzIG1heSBiZSBiZWNhdXNlIHRoZSBDb21wdXRlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0VuZ2luZSBpbnN0YW5jZSBkb2VzIG5vdCBoYXZlIHRoZSBjb3JyZWN0IHBlcm1pc3Npb24gc2NvcGVzIHNwZWNpZmllZDogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAnQSBOb3QgRm91bmQgZXJyb3Igd2FzIHJldHVybmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgYW4gYWNjZXNzJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAndG9rZW4gZm9yIHRoZSBDb21wdXRlIEVuZ2luZSBidWlsdC1pbiBzZXJ2aWNlIGFjY291bnQuIFRoaXMgbWF5IGJlIGJlY2F1c2UgdGhlIENvbXB1dGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnRW5naW5lIGluc3RhbmNlIGRvZXMgbm90IGhhdmUgYW55IHBlcm1pc3Npb24gc2NvcGVzIHNwZWNpZmllZDogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkNvbXB1dGUgPSBDb21wdXRlO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JZFRva2VuQ2xpZW50ID0gdm9pZCAwO1xuY29uc3Qgb2F1dGgyY2xpZW50XzEgPSByZXF1aXJlKFwiLi9vYXV0aDJjbGllbnRcIik7XG5jbGFzcyBJZFRva2VuQ2xpZW50IGV4dGVuZHMgb2F1dGgyY2xpZW50XzEuT0F1dGgyQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBHb29nbGUgSUQgVG9rZW4gY2xpZW50XG4gICAgICpcbiAgICAgKiBSZXRyaWV2ZSBJRCB0b2tlbiBmcm9tIHRoZSBtZXRhZGF0YSBzZXJ2ZXIuXG4gICAgICogU2VlOiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZG9jcy9hdXRoZW50aWNhdGlvbi9nZXQtaWQtdG9rZW4jbWV0YWRhdGEtc2VydmVyXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZSA9IG9wdGlvbnMudGFyZ2V0QXVkaWVuY2U7XG4gICAgICAgIHRoaXMuaWRUb2tlblByb3ZpZGVyID0gb3B0aW9ucy5pZFRva2VuUHJvdmlkZXI7XG4gICAgfVxuICAgIGFzeW5jIGdldFJlcXVlc3RNZXRhZGF0YUFzeW5jKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB1cmwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNyZWRlbnRpYWxzLmlkX3Rva2VuIHx8XG4gICAgICAgICAgICAhdGhpcy5jcmVkZW50aWFscy5leHBpcnlfZGF0ZSB8fFxuICAgICAgICAgICAgdGhpcy5pc1Rva2VuRXhwaXJpbmcoKSkge1xuICAgICAgICAgICAgY29uc3QgaWRUb2tlbiA9IGF3YWl0IHRoaXMuaWRUb2tlblByb3ZpZGVyLmZldGNoSWRUb2tlbih0aGlzLnRhcmdldEF1ZGllbmNlKTtcbiAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7XG4gICAgICAgICAgICAgICAgaWRfdG9rZW46IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IHRoaXMuZ2V0SWRUb2tlbkV4cGlyeURhdGUoaWRUb2tlbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyB0aGlzLmNyZWRlbnRpYWxzLmlkX3Rva2VuLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBoZWFkZXJzIH07XG4gICAgfVxuICAgIGdldElkVG9rZW5FeHBpcnlEYXRlKGlkVG9rZW4pIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZEI2NCA9IGlkVG9rZW4uc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgaWYgKHBheWxvYWRCNjQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHBheWxvYWRCNjQsICdiYXNlNjQnKS50b1N0cmluZygnYXNjaWknKSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZC5leHAgKiAxMDAwO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5JZFRva2VuQ2xpZW50ID0gSWRUb2tlbkNsaWVudDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR0NQRW52ID0gdm9pZCAwO1xuZXhwb3J0cy5jbGVhciA9IGNsZWFyO1xuZXhwb3J0cy5nZXRFbnYgPSBnZXRFbnY7XG5jb25zdCBnY3BNZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG52YXIgR0NQRW52O1xuKGZ1bmN0aW9uIChHQ1BFbnYpIHtcbiAgICBHQ1BFbnZbXCJBUFBfRU5HSU5FXCJdID0gXCJBUFBfRU5HSU5FXCI7XG4gICAgR0NQRW52W1wiS1VCRVJORVRFU19FTkdJTkVcIl0gPSBcIktVQkVSTkVURVNfRU5HSU5FXCI7XG4gICAgR0NQRW52W1wiQ0xPVURfRlVOQ1RJT05TXCJdID0gXCJDTE9VRF9GVU5DVElPTlNcIjtcbiAgICBHQ1BFbnZbXCJDT01QVVRFX0VOR0lORVwiXSA9IFwiQ09NUFVURV9FTkdJTkVcIjtcbiAgICBHQ1BFbnZbXCJDTE9VRF9SVU5cIl0gPSBcIkNMT1VEX1JVTlwiO1xuICAgIEdDUEVudltcIk5PTkVcIl0gPSBcIk5PTkVcIjtcbn0pKEdDUEVudiB8fCAoZXhwb3J0cy5HQ1BFbnYgPSBHQ1BFbnYgPSB7fSkpO1xubGV0IGVudlByb21pc2U7XG5mdW5jdGlvbiBjbGVhcigpIHtcbiAgICBlbnZQcm9taXNlID0gdW5kZWZpbmVkO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0RW52KCkge1xuICAgIGlmIChlbnZQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBlbnZQcm9taXNlO1xuICAgIH1cbiAgICBlbnZQcm9taXNlID0gZ2V0RW52TWVtb2l6ZWQoKTtcbiAgICByZXR1cm4gZW52UHJvbWlzZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldEVudk1lbW9pemVkKCkge1xuICAgIGxldCBlbnYgPSBHQ1BFbnYuTk9ORTtcbiAgICBpZiAoaXNBcHBFbmdpbmUoKSkge1xuICAgICAgICBlbnYgPSBHQ1BFbnYuQVBQX0VOR0lORTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDbG91ZEZ1bmN0aW9uKCkpIHtcbiAgICAgICAgZW52ID0gR0NQRW52LkNMT1VEX0ZVTkNUSU9OUztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXdhaXQgaXNDb21wdXRlRW5naW5lKCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IGlzS3ViZXJuZXRlc0VuZ2luZSgpKSB7XG4gICAgICAgICAgICBlbnYgPSBHQ1BFbnYuS1VCRVJORVRFU19FTkdJTkU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDbG91ZFJ1bigpKSB7XG4gICAgICAgICAgICBlbnYgPSBHQ1BFbnYuQ0xPVURfUlVOO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW52ID0gR0NQRW52LkNPTVBVVEVfRU5HSU5FO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbnYgPSBHQ1BFbnYuTk9ORTtcbiAgICB9XG4gICAgcmV0dXJuIGVudjtcbn1cbmZ1bmN0aW9uIGlzQXBwRW5naW5lKCkge1xuICAgIHJldHVybiAhIShwcm9jZXNzLmVudi5HQUVfU0VSVklDRSB8fCBwcm9jZXNzLmVudi5HQUVfTU9EVUxFX05BTUUpO1xufVxuZnVuY3Rpb24gaXNDbG91ZEZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhIShwcm9jZXNzLmVudi5GVU5DVElPTl9OQU1FIHx8IHByb2Nlc3MuZW52LkZVTkNUSU9OX1RBUkdFVCk7XG59XG4vKipcbiAqIFRoaXMgY2hlY2sgb25seSB2ZXJpZmllcyB0aGF0IHRoZSBlbnZpcm9ubWVudCBpcyBydW5uaW5nIGtuYXRpdmUuXG4gKiBUaGlzIG11c3QgYmUgcnVuICphZnRlciogY2hlY2tpbmcgZm9yIEt1YmVybmV0ZXMsIG90aGVyd2lzZSBpdCB3aWxsXG4gKiByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNDbG91ZFJ1bigpIHtcbiAgICByZXR1cm4gISFwcm9jZXNzLmVudi5LX0NPTkZJR1VSQVRJT047XG59XG5hc3luYyBmdW5jdGlvbiBpc0t1YmVybmV0ZXNFbmdpbmUoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2NwTWV0YWRhdGEuaW5zdGFuY2UoJ2F0dHJpYnV0ZXMvY2x1c3Rlci1uYW1lJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaXNDb21wdXRlRW5naW5lKCkge1xuICAgIHJldHVybiBnY3BNZXRhZGF0YS5pc0F2YWlsYWJsZSgpO1xufVxuIiwKICAgICIvKmdsb2JhbCBtb2R1bGUsIHByb2Nlc3MqL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmZ1bmN0aW9uIERhdGFTdHJlYW0oZGF0YSkge1xuICB0aGlzLmJ1ZmZlciA9IG51bGw7XG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyBObyBpbnB1dFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygwKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFN0cmVhbVxuICBpZiAodHlwZW9mIGRhdGEucGlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIGRhdGEucGlwZSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEJ1ZmZlciBvciBTdHJpbmdcbiAgLy8gb3IgT2JqZWN0IChhc3N1bWVkbHkgYSBwYXNzd29yZGVkIGtleSlcbiAgaWYgKGRhdGEubGVuZ3RoIHx8IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmVtaXQoJ2VuZCcsIGRhdGEpO1xuICAgICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5lbWl0KCdjbG9zZScpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGRhdGEgdHlwZSAoJysgdHlwZW9mIGRhdGEgKyAnKScpO1xufVxudXRpbC5pbmhlcml0cyhEYXRhU3RyZWFtLCBTdHJlYW0pO1xuXG5EYXRhU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlKGRhdGEpIHtcbiAgdGhpcy5idWZmZXIgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmJ1ZmZlciwgQnVmZmVyLmZyb20oZGF0YSldKTtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG59O1xuXG5EYXRhU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiBlbmQoZGF0YSkge1xuICBpZiAoZGF0YSlcbiAgICB0aGlzLndyaXRlKGRhdGEpO1xuICB0aGlzLmVtaXQoJ2VuZCcsIGRhdGEpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhU3RyZWFtO1xuIiwKICAgICIvKmpzaGludCBub2RlOnRydWUgKi9cbid1c2Ugc3RyaWN0JztcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7IC8vIGJyb3dzZXJpZnlcbnZhciBTbG93QnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuU2xvd0J1ZmZlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBidWZmZXJFcTtcblxuZnVuY3Rpb24gYnVmZmVyRXEoYSwgYikge1xuXG4gIC8vIHNob3J0Y3V0dGluZyBvbiB0eXBlIGlzIG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3NcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGJ1ZmZlciBzaXplcyBzaG91bGQgYmUgd2VsbC1rbm93biBpbmZvcm1hdGlvbiwgc28gZGVzcGl0ZSB0aGlzXG4gIC8vIHNob3J0Y3V0dGluZywgaXQgZG9lc24ndCBsZWFrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgKmNvbnRlbnRzKiBvZiB0aGVcbiAgLy8gYnVmZmVycy5cbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgLypqc2hpbnQgYml0d2lzZTpmYWxzZSAqL1xuICAgIGMgfD0gYVtpXSBeIGJbaV07IC8vIFhPUlxuICB9XG4gIHJldHVybiBjID09PSAwO1xufVxuXG5idWZmZXJFcS5pbnN0YWxsID0gZnVuY3Rpb24oKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuZXF1YWwgPSBTbG93QnVmZmVyLnByb3RvdHlwZS5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKHRoYXQpIHtcbiAgICByZXR1cm4gYnVmZmVyRXEodGhpcywgdGhhdCk7XG4gIH07XG59O1xuXG52YXIgb3JpZ0J1ZkVxdWFsID0gQnVmZmVyLnByb3RvdHlwZS5lcXVhbDtcbnZhciBvcmlnU2xvd0J1ZkVxdWFsID0gU2xvd0J1ZmZlci5wcm90b3R5cGUuZXF1YWw7XG5idWZmZXJFcS5yZXN0b3JlID0gZnVuY3Rpb24oKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuZXF1YWwgPSBvcmlnQnVmRXF1YWw7XG4gIFNsb3dCdWZmZXIucHJvdG90eXBlLmVxdWFsID0gb3JpZ1Nsb3dCdWZFcXVhbDtcbn07XG4iLAogICAgInZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBmb3JtYXRFY2RzYSA9IHJlcXVpcmUoJ2VjZHNhLXNpZy1mb3JtYXR0ZXInKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgTVNHX0lOVkFMSURfQUxHT1JJVEhNID0gJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCBhbGdvcml0aG0uXFxuICBTdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmU6XFxuICBcIkhTMjU2XCIsIFwiSFMzODRcIiwgXCJIUzUxMlwiLCBcIlJTMjU2XCIsIFwiUlMzODRcIiwgXCJSUzUxMlwiLCBcIlBTMjU2XCIsIFwiUFMzODRcIiwgXCJQUzUxMlwiLCBcIkVTMjU2XCIsIFwiRVMzODRcIiwgXCJFUzUxMlwiIGFuZCBcIm5vbmVcIi4nXG52YXIgTVNHX0lOVkFMSURfU0VDUkVUID0gJ3NlY3JldCBtdXN0IGJlIGEgc3RyaW5nIG9yIGJ1ZmZlcic7XG52YXIgTVNHX0lOVkFMSURfVkVSSUZJRVJfS0VZID0gJ2tleSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyJztcbnZhciBNU0dfSU5WQUxJRF9TSUdORVJfS0VZID0gJ2tleSBtdXN0IGJlIGEgc3RyaW5nLCBhIGJ1ZmZlciBvciBhbiBvYmplY3QnO1xuXG52YXIgc3VwcG9ydHNLZXlPYmplY3RzID0gdHlwZW9mIGNyeXB0by5jcmVhdGVQdWJsaWNLZXkgPT09ICdmdW5jdGlvbic7XG5pZiAoc3VwcG9ydHNLZXlPYmplY3RzKSB7XG4gIE1TR19JTlZBTElEX1ZFUklGSUVSX0tFWSArPSAnIG9yIGEgS2V5T2JqZWN0JztcbiAgTVNHX0lOVkFMSURfU0VDUkVUICs9ICdvciBhIEtleU9iamVjdCc7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNQdWJsaWNLZXkoa2V5KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoa2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNLZXlPYmplY3RzKSB7XG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1ZFUklGSUVSX0tFWSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfVkVSSUZJRVJfS0VZKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5LnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1ZFUklGSUVSX0tFWSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGtleS5hc3ltbWV0cmljS2V5VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfVkVSSUZJRVJfS0VZKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5LmV4cG9ydCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IHR5cGVFcnJvcihNU0dfSU5WQUxJRF9WRVJJRklFUl9LRVkpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja0lzUHJpdmF0ZUtleShrZXkpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1NJR05FUl9LRVkpO1xufTtcblxuZnVuY3Rpb24gY2hlY2tJc1NlY3JldEtleShrZXkpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGlmICghc3VwcG9ydHNLZXlPYmplY3RzKSB7XG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX1NFQ1JFVCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfU0VDUkVUKTtcbiAgfVxuXG4gIGlmIChrZXkudHlwZSAhPT0gJ3NlY3JldCcpIHtcbiAgICB0aHJvdyB0eXBlRXJyb3IoTVNHX0lOVkFMSURfU0VDUkVUKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yga2V5LmV4cG9ydCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IHR5cGVFcnJvcihNU0dfSU5WQUxJRF9TRUNSRVQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZyb21CYXNlNjQoYmFzZTY0KSB7XG4gIHJldHVybiBiYXNlNjRcbiAgICAucmVwbGFjZSgvPS9nLCAnJylcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJyk7XG59XG5cbmZ1bmN0aW9uIHRvQmFzZTY0KGJhc2U2NHVybCkge1xuICBiYXNlNjR1cmwgPSBiYXNlNjR1cmwudG9TdHJpbmcoKTtcblxuICB2YXIgcGFkZGluZyA9IDQgLSBiYXNlNjR1cmwubGVuZ3RoICUgNDtcbiAgaWYgKHBhZGRpbmcgIT09IDQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkge1xuICAgICAgYmFzZTY0dXJsICs9ICc9JztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFzZTY0dXJsXG4gICAgLnJlcGxhY2UoL1xcLS9nLCAnKycpXG4gICAgLnJlcGxhY2UoL18vZywgJy8nKTtcbn1cblxuZnVuY3Rpb24gdHlwZUVycm9yKHRlbXBsYXRlKSB7XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgZXJyTXNnID0gdXRpbC5mb3JtYXQuYmluZCh1dGlsLCB0ZW1wbGF0ZSkuYXBwbHkobnVsbCwgYXJncyk7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKGVyck1zZyk7XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlck9yU3RyaW5nKG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0KHRoaW5nKSB7XG4gIGlmICghYnVmZmVyT3JTdHJpbmcodGhpbmcpKVxuICAgIHRoaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpbmcpO1xuICByZXR1cm4gdGhpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhtYWNTaWduZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gc2lnbih0aGluZywgc2VjcmV0KSB7XG4gICAgY2hlY2tJc1NlY3JldEtleShzZWNyZXQpO1xuICAgIHRoaW5nID0gbm9ybWFsaXplSW5wdXQodGhpbmcpO1xuICAgIHZhciBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYScgKyBiaXRzLCBzZWNyZXQpO1xuICAgIHZhciBzaWcgPSAoaG1hYy51cGRhdGUodGhpbmcpLCBobWFjLmRpZ2VzdCgnYmFzZTY0JykpXG4gICAgcmV0dXJuIGZyb21CYXNlNjQoc2lnKTtcbiAgfVxufVxuXG52YXIgYnVmZmVyRXF1YWw7XG52YXIgdGltaW5nU2FmZUVxdWFsID0gJ3RpbWluZ1NhZmVFcXVhbCcgaW4gY3J5cHRvID8gZnVuY3Rpb24gdGltaW5nU2FmZUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGNyeXB0by50aW1pbmdTYWZlRXF1YWwoYSwgYilcbn0gOiBmdW5jdGlvbiB0aW1pbmdTYWZlRXF1YWwoYSwgYikge1xuICBpZiAoIWJ1ZmZlckVxdWFsKSB7XG4gICAgYnVmZmVyRXF1YWwgPSByZXF1aXJlKCdidWZmZXItZXF1YWwtY29uc3RhbnQtdGltZScpO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlckVxdWFsKGEsIGIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhtYWNWZXJpZmllcihiaXRzKSB7XG4gIHJldHVybiBmdW5jdGlvbiB2ZXJpZnkodGhpbmcsIHNpZ25hdHVyZSwgc2VjcmV0KSB7XG4gICAgdmFyIGNvbXB1dGVkU2lnID0gY3JlYXRlSG1hY1NpZ25lcihiaXRzKSh0aGluZywgc2VjcmV0KTtcbiAgICByZXR1cm4gdGltaW5nU2FmZUVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSksIEJ1ZmZlci5mcm9tKGNvbXB1dGVkU2lnKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5U2lnbmVyKGJpdHMpIHtcbiByZXR1cm4gZnVuY3Rpb24gc2lnbih0aGluZywgcHJpdmF0ZUtleSkge1xuICAgIGNoZWNrSXNQcml2YXRlS2V5KHByaXZhdGVLZXkpO1xuICAgIHRoaW5nID0gbm9ybWFsaXplSW5wdXQodGhpbmcpO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGFyZSBzcGVjaWZ5aW5nIFwiUlNBXCIgaGVyZSwgdGhpcyB3b3JrcyB3aXRoIEVDRFNBXG4gICAgLy8ga2V5cyBhcyB3ZWxsLlxuICAgIHZhciBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbignUlNBLVNIQScgKyBiaXRzKTtcbiAgICB2YXIgc2lnID0gKHNpZ25lci51cGRhdGUodGhpbmcpLCBzaWduZXIuc2lnbihwcml2YXRlS2V5LCAnYmFzZTY0JykpO1xuICAgIHJldHVybiBmcm9tQmFzZTY0KHNpZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VmVyaWZpZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSkge1xuICAgIGNoZWNrSXNQdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICB0aGluZyA9IG5vcm1hbGl6ZUlucHV0KHRoaW5nKTtcbiAgICBzaWduYXR1cmUgPSB0b0Jhc2U2NChzaWduYXR1cmUpO1xuICAgIHZhciB2ZXJpZmllciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoJ1JTQS1TSEEnICsgYml0cyk7XG4gICAgdmVyaWZpZXIudXBkYXRlKHRoaW5nKTtcbiAgICByZXR1cm4gdmVyaWZpZXIudmVyaWZ5KHB1YmxpY0tleSwgc2lnbmF0dXJlLCAnYmFzZTY0Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUFNTS2V5U2lnbmVyKGJpdHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24odGhpbmcsIHByaXZhdGVLZXkpIHtcbiAgICBjaGVja0lzUHJpdmF0ZUtleShwcml2YXRlS2V5KTtcbiAgICB0aGluZyA9IG5vcm1hbGl6ZUlucHV0KHRoaW5nKTtcbiAgICB2YXIgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVNpZ24oJ1JTQS1TSEEnICsgYml0cyk7XG4gICAgdmFyIHNpZyA9IChzaWduZXIudXBkYXRlKHRoaW5nKSwgc2lnbmVyLnNpZ24oe1xuICAgICAga2V5OiBwcml2YXRlS2V5LFxuICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkcsXG4gICAgICBzYWx0TGVuZ3RoOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QU1NfU0FMVExFTl9ESUdFU1RcbiAgICB9LCAnYmFzZTY0JykpO1xuICAgIHJldHVybiBmcm9tQmFzZTY0KHNpZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUFNTS2V5VmVyaWZpZXIoYml0cykge1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSkge1xuICAgIGNoZWNrSXNQdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICB0aGluZyA9IG5vcm1hbGl6ZUlucHV0KHRoaW5nKTtcbiAgICBzaWduYXR1cmUgPSB0b0Jhc2U2NChzaWduYXR1cmUpO1xuICAgIHZhciB2ZXJpZmllciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoJ1JTQS1TSEEnICsgYml0cyk7XG4gICAgdmVyaWZpZXIudXBkYXRlKHRoaW5nKTtcbiAgICByZXR1cm4gdmVyaWZpZXIudmVyaWZ5KHtcbiAgICAgIGtleTogcHVibGljS2V5LFxuICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkcsXG4gICAgICBzYWx0TGVuZ3RoOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QU1NfU0FMVExFTl9ESUdFU1RcbiAgICB9LCBzaWduYXR1cmUsICdiYXNlNjQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFQ0RTQVNpZ25lcihiaXRzKSB7XG4gIHZhciBpbm5lciA9IGNyZWF0ZUtleVNpZ25lcihiaXRzKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGlubmVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgc2lnbmF0dXJlID0gZm9ybWF0RWNkc2EuZGVyVG9Kb3NlKHNpZ25hdHVyZSwgJ0VTJyArIGJpdHMpO1xuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVDRFNBVmVyaWZlcihiaXRzKSB7XG4gIHZhciBpbm5lciA9IGNyZWF0ZUtleVZlcmlmaWVyKGJpdHMpO1xuICByZXR1cm4gZnVuY3Rpb24gdmVyaWZ5KHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSkge1xuICAgIHNpZ25hdHVyZSA9IGZvcm1hdEVjZHNhLmpvc2VUb0RlcihzaWduYXR1cmUsICdFUycgKyBiaXRzKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgdmFyIHJlc3VsdCA9IGlubmVyKHRoaW5nLCBzaWduYXR1cmUsIHB1YmxpY0tleSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTm9uZVNpZ25lcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNpZ24oKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vbmVWZXJpZmllcigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHZlcmlmeSh0aGluZywgc2lnbmF0dXJlKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZSA9PT0gJyc7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBqd2EoYWxnb3JpdGhtKSB7XG4gIHZhciBzaWduZXJGYWN0b3JpZXMgPSB7XG4gICAgaHM6IGNyZWF0ZUhtYWNTaWduZXIsXG4gICAgcnM6IGNyZWF0ZUtleVNpZ25lcixcbiAgICBwczogY3JlYXRlUFNTS2V5U2lnbmVyLFxuICAgIGVzOiBjcmVhdGVFQ0RTQVNpZ25lcixcbiAgICBub25lOiBjcmVhdGVOb25lU2lnbmVyLFxuICB9XG4gIHZhciB2ZXJpZmllckZhY3RvcmllcyA9IHtcbiAgICBoczogY3JlYXRlSG1hY1ZlcmlmaWVyLFxuICAgIHJzOiBjcmVhdGVLZXlWZXJpZmllcixcbiAgICBwczogY3JlYXRlUFNTS2V5VmVyaWZpZXIsXG4gICAgZXM6IGNyZWF0ZUVDRFNBVmVyaWZlcixcbiAgICBub25lOiBjcmVhdGVOb25lVmVyaWZpZXIsXG4gIH1cbiAgdmFyIG1hdGNoID0gYWxnb3JpdGhtLm1hdGNoKC9eKFJTfFBTfEVTfEhTKSgyNTZ8Mzg0fDUxMikkfF4obm9uZSkkLyk7XG4gIGlmICghbWF0Y2gpXG4gICAgdGhyb3cgdHlwZUVycm9yKE1TR19JTlZBTElEX0FMR09SSVRITSwgYWxnb3JpdGhtKTtcbiAgdmFyIGFsZ28gPSAobWF0Y2hbMV0gfHwgbWF0Y2hbM10pLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBiaXRzID0gbWF0Y2hbMl07XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduOiBzaWduZXJGYWN0b3JpZXNbYWxnb10oYml0cyksXG4gICAgdmVyaWZ5OiB2ZXJpZmllckZhY3Rvcmllc1thbGdvXShiaXRzKSxcbiAgfVxufTtcbiIsCiAgICAiLypnbG9iYWwgbW9kdWxlKi9cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdG9TdHJpbmcob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gb2JqO1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicgfHwgQnVmZmVyLmlzQnVmZmVyKG9iaikpXG4gICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcbn07XG4iLAogICAgIi8qZ2xvYmFsIG1vZHVsZSovXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgRGF0YVN0cmVhbSA9IHJlcXVpcmUoJy4vZGF0YS1zdHJlYW0nKTtcbnZhciBqd2EgPSByZXF1aXJlKCdqd2EnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9zdHJpbmcnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBiYXNlNjR1cmwoc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gQnVmZmVyXG4gICAgLmZyb20oc3RyaW5nLCBlbmNvZGluZylcbiAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpO1xufVxuXG5mdW5jdGlvbiBqd3NTZWN1cmVkSW5wdXQoaGVhZGVyLCBwYXlsb2FkLCBlbmNvZGluZykge1xuICBlbmNvZGluZyA9IGVuY29kaW5nIHx8ICd1dGY4JztcbiAgdmFyIGVuY29kZWRIZWFkZXIgPSBiYXNlNjR1cmwodG9TdHJpbmcoaGVhZGVyKSwgJ2JpbmFyeScpO1xuICB2YXIgZW5jb2RlZFBheWxvYWQgPSBiYXNlNjR1cmwodG9TdHJpbmcocGF5bG9hZCksIGVuY29kaW5nKTtcbiAgcmV0dXJuIHV0aWwuZm9ybWF0KCclcy4lcycsIGVuY29kZWRIZWFkZXIsIGVuY29kZWRQYXlsb2FkKTtcbn1cblxuZnVuY3Rpb24gandzU2lnbihvcHRzKSB7XG4gIHZhciBoZWFkZXIgPSBvcHRzLmhlYWRlcjtcbiAgdmFyIHBheWxvYWQgPSBvcHRzLnBheWxvYWQ7XG4gIHZhciBzZWNyZXRPcktleSA9IG9wdHMuc2VjcmV0IHx8IG9wdHMucHJpdmF0ZUtleTtcbiAgdmFyIGVuY29kaW5nID0gb3B0cy5lbmNvZGluZztcbiAgdmFyIGFsZ28gPSBqd2EoaGVhZGVyLmFsZyk7XG4gIHZhciBzZWN1cmVkSW5wdXQgPSBqd3NTZWN1cmVkSW5wdXQoaGVhZGVyLCBwYXlsb2FkLCBlbmNvZGluZyk7XG4gIHZhciBzaWduYXR1cmUgPSBhbGdvLnNpZ24oc2VjdXJlZElucHV0LCBzZWNyZXRPcktleSk7XG4gIHJldHVybiB1dGlsLmZvcm1hdCgnJXMuJXMnLCBzZWN1cmVkSW5wdXQsIHNpZ25hdHVyZSk7XG59XG5cbmZ1bmN0aW9uIFNpZ25TdHJlYW0ob3B0cykge1xuICB2YXIgc2VjcmV0ID0gb3B0cy5zZWNyZXQ7XG4gIHNlY3JldCA9IHNlY3JldCA9PSBudWxsID8gb3B0cy5wcml2YXRlS2V5IDogc2VjcmV0O1xuICBzZWNyZXQgPSBzZWNyZXQgPT0gbnVsbCA/IG9wdHMua2V5IDogc2VjcmV0O1xuICBpZiAoL15ocy9pLnRlc3Qob3B0cy5oZWFkZXIuYWxnKSA9PT0gdHJ1ZSAmJiBzZWNyZXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY3JldCBtdXN0IGJlIGEgc3RyaW5nIG9yIGJ1ZmZlciBvciBhIEtleU9iamVjdCcpXG4gIH1cbiAgdmFyIHNlY3JldFN0cmVhbSA9IG5ldyBEYXRhU3RyZWFtKHNlY3JldCk7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmhlYWRlciA9IG9wdHMuaGVhZGVyO1xuICB0aGlzLmVuY29kaW5nID0gb3B0cy5lbmNvZGluZztcbiAgdGhpcy5zZWNyZXQgPSB0aGlzLnByaXZhdGVLZXkgPSB0aGlzLmtleSA9IHNlY3JldFN0cmVhbTtcbiAgdGhpcy5wYXlsb2FkID0gbmV3IERhdGFTdHJlYW0ob3B0cy5wYXlsb2FkKTtcbiAgdGhpcy5zZWNyZXQub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLnBheWxvYWQud3JpdGFibGUgJiYgdGhpcy5yZWFkYWJsZSlcbiAgICAgIHRoaXMuc2lnbigpO1xuICB9LmJpbmQodGhpcykpO1xuXG4gIHRoaXMucGF5bG9hZC5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuc2VjcmV0LndyaXRhYmxlICYmIHRoaXMucmVhZGFibGUpXG4gICAgICB0aGlzLnNpZ24oKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn1cbnV0aWwuaW5oZXJpdHMoU2lnblN0cmVhbSwgU3RyZWFtKTtcblxuU2lnblN0cmVhbS5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGp3c1NpZ24oe1xuICAgICAgaGVhZGVyOiB0aGlzLmhlYWRlcixcbiAgICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZC5idWZmZXIsXG4gICAgICBzZWNyZXQ6IHRoaXMuc2VjcmV0LmJ1ZmZlcixcbiAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nXG4gICAgfSk7XG4gICAgdGhpcy5lbWl0KCdkb25lJywgc2lnbmF0dXJlKTtcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCBzaWduYXR1cmUpO1xuICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGUpO1xuICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgfVxufTtcblxuU2lnblN0cmVhbS5zaWduID0gandzU2lnbjtcblxubW9kdWxlLmV4cG9ydHMgPSBTaWduU3RyZWFtO1xuIiwKICAgICIvKmdsb2JhbCBtb2R1bGUqL1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIERhdGFTdHJlYW0gPSByZXF1aXJlKCcuL2RhdGEtc3RyZWFtJyk7XG52YXIgandhID0gcmVxdWlyZSgnandhJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3Rvc3RyaW5nJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBKV1NfUkVHRVggPSAvXlthLXpBLVowLTlcXC1fXSs/XFwuW2EtekEtWjAtOVxcLV9dKz9cXC4oW2EtekEtWjAtOVxcLV9dKyk/JC87XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHRoaW5nKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpbmcpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gc2FmZUpzb25QYXJzZSh0aGluZykge1xuICBpZiAoaXNPYmplY3QodGhpbmcpKVxuICAgIHJldHVybiB0aGluZztcbiAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UodGhpbmcpOyB9XG4gIGNhdGNoIChlKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbn1cblxuZnVuY3Rpb24gaGVhZGVyRnJvbUpXUyhqd3NTaWcpIHtcbiAgdmFyIGVuY29kZWRIZWFkZXIgPSBqd3NTaWcuc3BsaXQoJy4nLCAxKVswXTtcbiAgcmV0dXJuIHNhZmVKc29uUGFyc2UoQnVmZmVyLmZyb20oZW5jb2RlZEhlYWRlciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKSk7XG59XG5cbmZ1bmN0aW9uIHNlY3VyZWRJbnB1dEZyb21KV1MoandzU2lnKSB7XG4gIHJldHVybiBqd3NTaWcuc3BsaXQoJy4nLCAyKS5qb2luKCcuJyk7XG59XG5cbmZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KV1MoandzU2lnKSB7XG4gIHJldHVybiBqd3NTaWcuc3BsaXQoJy4nKVsyXTtcbn1cblxuZnVuY3Rpb24gcGF5bG9hZEZyb21KV1MoandzU2lnLCBlbmNvZGluZykge1xuICBlbmNvZGluZyA9IGVuY29kaW5nIHx8ICd1dGY4JztcbiAgdmFyIHBheWxvYWQgPSBqd3NTaWcuc3BsaXQoJy4nKVsxXTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHBheWxvYWQsICdiYXNlNjQnKS50b1N0cmluZyhlbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRKd3Moc3RyaW5nKSB7XG4gIHJldHVybiBKV1NfUkVHRVgudGVzdChzdHJpbmcpICYmICEhaGVhZGVyRnJvbUpXUyhzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBqd3NWZXJpZnkoandzU2lnLCBhbGdvcml0aG0sIHNlY3JldE9yS2V5KSB7XG4gIGlmICghYWxnb3JpdGhtKSB7XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcIk1pc3NpbmcgYWxnb3JpdGhtIHBhcmFtZXRlciBmb3IgandzLnZlcmlmeVwiKTtcbiAgICBlcnIuY29kZSA9IFwiTUlTU0lOR19BTEdPUklUSE1cIjtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgandzU2lnID0gdG9TdHJpbmcoandzU2lnKTtcbiAgdmFyIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KV1MoandzU2lnKTtcbiAgdmFyIHNlY3VyZWRJbnB1dCA9IHNlY3VyZWRJbnB1dEZyb21KV1MoandzU2lnKTtcbiAgdmFyIGFsZ28gPSBqd2EoYWxnb3JpdGhtKTtcbiAgcmV0dXJuIGFsZ28udmVyaWZ5KHNlY3VyZWRJbnB1dCwgc2lnbmF0dXJlLCBzZWNyZXRPcktleSk7XG59XG5cbmZ1bmN0aW9uIGp3c0RlY29kZShqd3NTaWcsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIGp3c1NpZyA9IHRvU3RyaW5nKGp3c1NpZyk7XG5cbiAgaWYgKCFpc1ZhbGlkSndzKGp3c1NpZykpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGhlYWRlciA9IGhlYWRlckZyb21KV1MoandzU2lnKTtcblxuICBpZiAoIWhlYWRlcilcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgcGF5bG9hZCA9IHBheWxvYWRGcm9tSldTKGp3c1NpZyk7XG4gIGlmIChoZWFkZXIudHlwID09PSAnSldUJyB8fCBvcHRzLmpzb24pXG4gICAgcGF5bG9hZCA9IEpTT04ucGFyc2UocGF5bG9hZCwgb3B0cy5lbmNvZGluZyk7XG5cbiAgcmV0dXJuIHtcbiAgICBoZWFkZXI6IGhlYWRlcixcbiAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlRnJvbUpXUyhqd3NTaWcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIFZlcmlmeVN0cmVhbShvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgc2VjcmV0T3JLZXkgPSBvcHRzLnNlY3JldDtcbiAgc2VjcmV0T3JLZXkgPSBzZWNyZXRPcktleSA9PSBudWxsID8gb3B0cy5wdWJsaWNLZXkgOiBzZWNyZXRPcktleTtcbiAgc2VjcmV0T3JLZXkgPSBzZWNyZXRPcktleSA9PSBudWxsID8gb3B0cy5rZXkgOiBzZWNyZXRPcktleTtcbiAgaWYgKC9eaHMvaS50ZXN0KG9wdHMuYWxnb3JpdGhtKSA9PT0gdHJ1ZSAmJiBzZWNyZXRPcktleSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2VjcmV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYnVmZmVyIG9yIGEgS2V5T2JqZWN0JylcbiAgfVxuICB2YXIgc2VjcmV0U3RyZWFtID0gbmV3IERhdGFTdHJlYW0oc2VjcmV0T3JLZXkpO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5hbGdvcml0aG0gPSBvcHRzLmFsZ29yaXRobTtcbiAgdGhpcy5lbmNvZGluZyA9IG9wdHMuZW5jb2Rpbmc7XG4gIHRoaXMuc2VjcmV0ID0gdGhpcy5wdWJsaWNLZXkgPSB0aGlzLmtleSA9IHNlY3JldFN0cmVhbTtcbiAgdGhpcy5zaWduYXR1cmUgPSBuZXcgRGF0YVN0cmVhbShvcHRzLnNpZ25hdHVyZSk7XG4gIHRoaXMuc2VjcmV0Lm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5zaWduYXR1cmUud3JpdGFibGUgJiYgdGhpcy5yZWFkYWJsZSlcbiAgICAgIHRoaXMudmVyaWZ5KCk7XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgdGhpcy5zaWduYXR1cmUub25jZSgnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLnNlY3JldC53cml0YWJsZSAmJiB0aGlzLnJlYWRhYmxlKVxuICAgICAgdGhpcy52ZXJpZnkoKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn1cbnV0aWwuaW5oZXJpdHMoVmVyaWZ5U3RyZWFtLCBTdHJlYW0pO1xuVmVyaWZ5U3RyZWFtLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHZhbGlkID0gandzVmVyaWZ5KHRoaXMuc2lnbmF0dXJlLmJ1ZmZlciwgdGhpcy5hbGdvcml0aG0sIHRoaXMua2V5LmJ1ZmZlcik7XG4gICAgdmFyIG9iaiA9IGp3c0RlY29kZSh0aGlzLnNpZ25hdHVyZS5idWZmZXIsIHRoaXMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW1pdCgnZG9uZScsIHZhbGlkLCBvYmopO1xuICAgIHRoaXMuZW1pdCgnZGF0YScsIHZhbGlkKTtcbiAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICByZXR1cm4gdmFsaWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGUpO1xuICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgfVxufTtcblxuVmVyaWZ5U3RyZWFtLmRlY29kZSA9IGp3c0RlY29kZTtcblZlcmlmeVN0cmVhbS5pc1ZhbGlkID0gaXNWYWxpZEp3cztcblZlcmlmeVN0cmVhbS52ZXJpZnkgPSBqd3NWZXJpZnk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVyaWZ5U3RyZWFtO1xuIiwKICAgICIvKmdsb2JhbCBleHBvcnRzKi9cbnZhciBTaWduU3RyZWFtID0gcmVxdWlyZSgnLi9saWIvc2lnbi1zdHJlYW0nKTtcbnZhciBWZXJpZnlTdHJlYW0gPSByZXF1aXJlKCcuL2xpYi92ZXJpZnktc3RyZWFtJyk7XG5cbnZhciBBTEdPUklUSE1TID0gW1xuICAnSFMyNTYnLCAnSFMzODQnLCAnSFM1MTInLFxuICAnUlMyNTYnLCAnUlMzODQnLCAnUlM1MTInLFxuICAnUFMyNTYnLCAnUFMzODQnLCAnUFM1MTInLFxuICAnRVMyNTYnLCAnRVMzODQnLCAnRVM1MTInXG5dO1xuXG5leHBvcnRzLkFMR09SSVRITVMgPSBBTEdPUklUSE1TO1xuZXhwb3J0cy5zaWduID0gU2lnblN0cmVhbS5zaWduO1xuZXhwb3J0cy52ZXJpZnkgPSBWZXJpZnlTdHJlYW0udmVyaWZ5O1xuZXhwb3J0cy5kZWNvZGUgPSBWZXJpZnlTdHJlYW0uZGVjb2RlO1xuZXhwb3J0cy5pc1ZhbGlkID0gVmVyaWZ5U3RyZWFtLmlzVmFsaWQ7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSBmdW5jdGlvbiBjcmVhdGVTaWduKG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBTaWduU3RyZWFtKG9wdHMpO1xufTtcbmV4cG9ydHMuY3JlYXRlVmVyaWZ5ID0gZnVuY3Rpb24gY3JlYXRlVmVyaWZ5KG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBWZXJpZnlTdHJlYW0ob3B0cyk7XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQ1xuICpcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogU2VlIGZpbGUgTElDRU5TRSBmb3IgZGV0YWlsIG9yIGNvcHkgYXQgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIF9Hb29nbGVUb2tlbl9pbkZsaWdodFJlcXVlc3QsIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jLCBfR29vZ2xlVG9rZW5fZ2V0VG9rZW5Bc3luY0lubmVyLCBfR29vZ2xlVG9rZW5fZW5zdXJlRW1haWwsIF9Hb29nbGVUb2tlbl9yZXZva2VUb2tlbkFzeW5jLCBfR29vZ2xlVG9rZW5fY29uZmlndXJlLCBfR29vZ2xlVG9rZW5fcmVxdWVzdFRva2VuO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Hb29nbGVUb2tlbiA9IHZvaWQgMDtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgZ2F4aW9zXzEgPSByZXF1aXJlKFwiZ2F4aW9zXCIpO1xuY29uc3QgandzID0gcmVxdWlyZShcImp3c1wiKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICAgID8gKDAsIHV0aWxfMS5wcm9taXNpZnkpKGZzLnJlYWRGaWxlKVxuICAgIDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBpZiBydW5uaW5nIGluIHRoZSB3ZWItYnJvd3NlciwgZnMucmVhZEZpbGUgbWF5IG5vdCBoYXZlIGJlZW4gc2hpbW1lZC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yV2l0aENvZGUoJ3VzZSBrZXkgcmF0aGVyIHRoYW4ga2V5RmlsZS4nLCAnTUlTU0lOR19DUkVERU5USUFMUycpO1xuICAgIH07XG5jb25zdCBHT09HTEVfVE9LRU5fVVJMID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92NC90b2tlbic7XG5jb25zdCBHT09HTEVfUkVWT0tFX1RPS0VOX1VSTCA9ICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvcmV2b2tlP3Rva2VuPSc7XG5jbGFzcyBFcnJvcldpdGhDb2RlIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgfVxufVxuY2xhc3MgR29vZ2xlVG9rZW4ge1xuICAgIGdldCBhY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3VG9rZW4gPyB0aGlzLnJhd1Rva2VuLmFjY2Vzc190b2tlbiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGlkVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd1Rva2VuID8gdGhpcy5yYXdUb2tlbi5pZF90b2tlbiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IHRva2VuVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3VG9rZW4gPyB0aGlzLnJhd1Rva2VuLnRva2VuX3R5cGUgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCByZWZyZXNoVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd1Rva2VuID8gdGhpcy5yYXdUb2tlbi5yZWZyZXNoX3Rva2VuIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBHb29nbGVUb2tlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zICBDb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGVyID0ge1xuICAgICAgICAgICAgcmVxdWVzdDogb3B0cyA9PiAoMCwgZ2F4aW9zXzEucmVxdWVzdCkob3B0cyksXG4gICAgICAgIH07XG4gICAgICAgIF9Hb29nbGVUb2tlbl9pbkZsaWdodFJlcXVlc3Quc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9jb25maWd1cmUpLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgdG9rZW4gaGFzIGV4cGlyZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRva2VuIGhhcyBleHBpcmVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaGFzRXhwaXJlZCgpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGlmICh0aGlzLnJhd1Rva2VuICYmIHRoaXMuZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICByZXR1cm4gbm93ID49IHRoaXMuZXhwaXJlc0F0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSB0b2tlbiB3aWxsIGV4cGlyZSB3aXRoaW4gZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRva2VuIHdpbGwgYmUgZXhwaXJlZCB3aXRoaW4gZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNUb2tlbkV4cGlyaW5nKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgPSAoX2EgPSB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgaWYgKHRoaXMucmF3VG9rZW4gJiYgdGhpcy5leHBpcmVzQXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNBdCA8PSBub3cgKyBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRUb2tlbihjYWxsYmFjaywgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvcHRzID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBmb3JjZVJlZnJlc2g6IGZhbHNlLFxuICAgICAgICB9LCBvcHRzKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZVRva2VuX2dldFRva2VuQXN5bmMpLmNhbGwodGhpcywgb3B0cykudGhlbih0ID0+IGNiKG51bGwsIHQpLCBjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jKS5jYWxsKHRoaXMsIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGtleUZpbGUsIGV4dHJhY3QgdGhlIGtleSBhbmQgY2xpZW50IGVtYWlsIGlmIGF2YWlsYWJsZVxuICAgICAqIEBwYXJhbSBrZXlGaWxlIFBhdGggdG8gYSBqc29uLCBwZW0sIG9yIHAxMiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGtleS5cbiAgICAgKiBAcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBwcml2YXRlS2V5IGFuZCBjbGllbnRFbWFpbCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoa2V5RmlsZSkge1xuICAgICAgICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoa2V5RmlsZSk7XG4gICAgICAgIHN3aXRjaCAoZXh0KSB7XG4gICAgICAgICAgICBjYXNlICcuanNvbic6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCByZWFkRmlsZShrZXlGaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IGJvZHkucHJpdmF0ZV9rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50RW1haWwgPSBib2R5LmNsaWVudF9lbWFpbDtcbiAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVLZXkgfHwgIWNsaWVudEVtYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcldpdGhDb2RlKCdwcml2YXRlX2tleSBhbmQgY2xpZW50X2VtYWlsIGFyZSByZXF1aXJlZC4nLCAnTUlTU0lOR19DUkVERU5USUFMUycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcml2YXRlS2V5LCBjbGllbnRFbWFpbCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnLmRlcic6XG4gICAgICAgICAgICBjYXNlICcuY3J0JzpcbiAgICAgICAgICAgIGNhc2UgJy5wZW0nOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IGF3YWl0IHJlYWRGaWxlKGtleUZpbGUsICd1dGY4Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJpdmF0ZUtleSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnLnAxMic6XG4gICAgICAgICAgICBjYXNlICcucGZ4Jzoge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcldpdGhDb2RlKCcqLnAxMiBjZXJ0aWZpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYWZ0ZXIgdjYuMS4yLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnNpZGVyIHV0aWxpemluZyAqLmpzb24gZm9ybWF0IG9yIGNvbnZlcnRpbmcgKi5wMTIgdG8gKi5wZW0gdXNpbmcgdGhlIE9wZW5TU0wgQ0xJLicsICdVTktOT1dOX0NFUlRJRklDQVRFX1RZUEUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yV2l0aENvZGUoJ1Vua25vd24gY2VydGlmaWNhdGUgdHlwZS4gVHlwZSBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ0N1cnJlbnQgc3VwcG9ydGVkIGV4dGVuc2lvbnMgYXJlICouanNvbiwgYW5kICoucGVtLicsICdVTktOT1dOX0NFUlRJRklDQVRFX1RZUEUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXZva2VUb2tlbihjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9yZXZva2VUb2tlbkFzeW5jKS5jYWxsKHRoaXMpLnRoZW4oKCkgPT4gY2FsbGJhY2soKSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlVG9rZW5fcmV2b2tlVG9rZW5Bc3luYykuY2FsbCh0aGlzKTtcbiAgICB9XG59XG5leHBvcnRzLkdvb2dsZVRva2VuID0gR29vZ2xlVG9rZW47XG5fR29vZ2xlVG9rZW5faW5GbGlnaHRSZXF1ZXN0ID0gbmV3IFdlYWtNYXAoKSwgX0dvb2dsZVRva2VuX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jID0gYXN5bmMgZnVuY3Rpb24gX0dvb2dsZVRva2VuX2dldFRva2VuQXN5bmMob3B0cykge1xuICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbkZsaWdodFJlcXVlc3QsIFwiZlwiKSAmJiAhb3B0cy5mb3JjZVJlZnJlc2gpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luRmxpZ2h0UmVxdWVzdCwgXCJmXCIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgKF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0dvb2dsZVRva2VuX2luRmxpZ2h0UmVxdWVzdCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZVRva2VuX2dldFRva2VuQXN5bmNJbm5lcikuY2FsbCh0aGlzLCBvcHRzKSwgXCJmXCIpKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0dvb2dsZVRva2VuX2luRmxpZ2h0UmVxdWVzdCwgdW5kZWZpbmVkLCBcImZcIik7XG4gICAgfVxufSwgX0dvb2dsZVRva2VuX2dldFRva2VuQXN5bmNJbm5lciA9IGFzeW5jIGZ1bmN0aW9uIF9Hb29nbGVUb2tlbl9nZXRUb2tlbkFzeW5jSW5uZXIob3B0cykge1xuICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmluZygpID09PSBmYWxzZSAmJiBvcHRzLmZvcmNlUmVmcmVzaCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnJhd1Rva2VuKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleSAmJiAhdGhpcy5rZXlGaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8ga2V5IG9yIGtleUZpbGUgc2V0LicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMua2V5ICYmIHRoaXMua2V5RmlsZSkge1xuICAgICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHModGhpcy5rZXlGaWxlKTtcbiAgICAgICAgdGhpcy5rZXkgPSBjcmVkcy5wcml2YXRlS2V5O1xuICAgICAgICB0aGlzLmlzcyA9IGNyZWRzLmNsaWVudEVtYWlsIHx8IHRoaXMuaXNzO1xuICAgICAgICBpZiAoIWNyZWRzLmNsaWVudEVtYWlsKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVUb2tlbl9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlVG9rZW5fZW5zdXJlRW1haWwpLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZVRva2VuX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVUb2tlbl9yZXF1ZXN0VG9rZW4pLmNhbGwodGhpcyk7XG59LCBfR29vZ2xlVG9rZW5fZW5zdXJlRW1haWwgPSBmdW5jdGlvbiBfR29vZ2xlVG9rZW5fZW5zdXJlRW1haWwoKSB7XG4gICAgaWYgKCF0aGlzLmlzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JXaXRoQ29kZSgnZW1haWwgaXMgcmVxdWlyZWQuJywgJ01JU1NJTkdfQ1JFREVOVElBTFMnKTtcbiAgICB9XG59LCBfR29vZ2xlVG9rZW5fcmV2b2tlVG9rZW5Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIF9Hb29nbGVUb2tlbl9yZXZva2VUb2tlbkFzeW5jKCkge1xuICAgIGlmICghdGhpcy5hY2Nlc3NUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRva2VuIHRvIHJldm9rZS4nKTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gR09PR0xFX1JFVk9LRV9UT0tFTl9VUkwgKyB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgIGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgIHVybCxcbiAgICAgICAgcmV0cnk6IHRydWUsXG4gICAgfSk7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlVG9rZW5faW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZVRva2VuX2NvbmZpZ3VyZSkuY2FsbCh0aGlzLCB7XG4gICAgICAgIGVtYWlsOiB0aGlzLmlzcyxcbiAgICAgICAgc3ViOiB0aGlzLnN1YixcbiAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAga2V5RmlsZTogdGhpcy5rZXlGaWxlLFxuICAgICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgICAgYWRkaXRpb25hbENsYWltczogdGhpcy5hZGRpdGlvbmFsQ2xhaW1zLFxuICAgIH0pO1xufSwgX0dvb2dsZVRva2VuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uIF9Hb29nbGVUb2tlbl9jb25maWd1cmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5rZXlGaWxlID0gb3B0aW9ucy5rZXlGaWxlO1xuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5yYXdUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzcyA9IG9wdGlvbnMuZW1haWwgfHwgb3B0aW9ucy5pc3M7XG4gICAgdGhpcy5zdWIgPSBvcHRpb25zLnN1YjtcbiAgICB0aGlzLmFkZGl0aW9uYWxDbGFpbXMgPSBvcHRpb25zLmFkZGl0aW9uYWxDbGFpbXM7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnNjb3BlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnNjb3BlID0gb3B0aW9ucy5zY29wZS5qb2luKCcgJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNjb3BlID0gb3B0aW9ucy5zY29wZTtcbiAgICB9XG4gICAgdGhpcy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgPSBvcHRpb25zLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcztcbiAgICBpZiAob3B0aW9ucy50cmFuc3BvcnRlcikge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGVyID0gb3B0aW9ucy50cmFuc3BvcnRlcjtcbiAgICB9XG59LCBfR29vZ2xlVG9rZW5fcmVxdWVzdFRva2VuID0gXG4vKipcbiAqIFJlcXVlc3QgdGhlIHRva2VuIGZyb20gR29vZ2xlLlxuICovXG5hc3luYyBmdW5jdGlvbiBfR29vZ2xlVG9rZW5fcmVxdWVzdFRva2VuKCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgY29uc3QgaWF0ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxDbGFpbXMgPSB0aGlzLmFkZGl0aW9uYWxDbGFpbXMgfHwge307XG4gICAgY29uc3QgcGF5bG9hZCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBpc3M6IHRoaXMuaXNzLFxuICAgICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgICAgYXVkOiBHT09HTEVfVE9LRU5fVVJMLFxuICAgICAgICBleHA6IGlhdCArIDM2MDAsXG4gICAgICAgIGlhdCxcbiAgICAgICAgc3ViOiB0aGlzLnN1YixcbiAgICB9LCBhZGRpdGlvbmFsQ2xhaW1zKTtcbiAgICBjb25zdCBzaWduZWRKV1QgPSBqd3Muc2lnbih7XG4gICAgICAgIGhlYWRlcjogeyBhbGc6ICdSUzI1NicgfSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgc2VjcmV0OiB0aGlzLmtleSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgdXJsOiBHT09HTEVfVE9LRU5fVVJMLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGdyYW50X3R5cGU6ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpqd3QtYmVhcmVyJyxcbiAgICAgICAgICAgICAgICBhc3NlcnRpb246IHNpZ25lZEpXVCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICByZXRyeUNvbmZpZzoge1xuICAgICAgICAgICAgICAgIGh0dHBNZXRob2RzVG9SZXRyeTogWydQT1NUJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yYXdUb2tlbiA9IHIuZGF0YTtcbiAgICAgICAgdGhpcy5leHBpcmVzQXQgPVxuICAgICAgICAgICAgci5kYXRhLmV4cGlyZXNfaW4gPT09IG51bGwgfHwgci5kYXRhLmV4cGlyZXNfaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiAoaWF0ICsgci5kYXRhLmV4cGlyZXNfaW4pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3VG9rZW47XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMucmF3VG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudG9rZW5FeHBpcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBib2R5ID0gZS5yZXNwb25zZSAmJiAoKF9hID0gZS5yZXNwb25zZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGEpXG4gICAgICAgICAgICA/IChfYiA9IGUucmVzcG9uc2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kYXRhXG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICBpZiAoYm9keS5lcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IGJvZHkuZXJyb3JfZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICA/IGA6ICR7Ym9keS5lcnJvcl9kZXNjcmlwdGlvbn1gXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGUubWVzc2FnZSA9IGAke2JvZHkuZXJyb3J9JHtkZXNjfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5KV1RBY2Nlc3MgPSB2b2lkIDA7XG5jb25zdCBqd3MgPSByZXF1aXJlKFwiandzXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5jb25zdCBERUZBVUxUX0hFQURFUiA9IHtcbiAgICBhbGc6ICdSUzI1NicsXG4gICAgdHlwOiAnSldUJyxcbn07XG5jbGFzcyBKV1RBY2Nlc3Mge1xuICAgIC8qKlxuICAgICAqIEpXVEFjY2VzcyBzZXJ2aWNlIGFjY291bnQgY3JlZGVudGlhbHMuXG4gICAgICpcbiAgICAgKiBDcmVhdGUgYSBuZXcgYWNjZXNzIHRva2VuIGJ5IHVzaW5nIHRoZSBjcmVkZW50aWFsIHRvIGNyZWF0ZSBhIG5ldyBKV1QgdG9rZW5cbiAgICAgKiB0aGF0J3MgcmVjb2duaXplZCBhcyB0aGUgYWNjZXNzIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVtYWlsIHRoZSBzZXJ2aWNlIGFjY291bnQgZW1haWwgYWRkcmVzcy5cbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBwcml2YXRlIGtleSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaWduIHRoZSB0b2tlbi5cbiAgICAgKiBAcGFyYW0ga2V5SWQgdGhlIElEIG9mIHRoZSBwcml2YXRlIGtleSB1c2VkIHRvIHNpZ24gdGhlIHRva2VuLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVtYWlsLCBrZXksIGtleUlkLCBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMpIHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyB1dGlsXzEuTFJVQ2FjaGUoe1xuICAgICAgICAgICAgY2FwYWNpdHk6IDUwMCxcbiAgICAgICAgICAgIG1heEFnZTogNjAgKiA2MCAqIDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgICB0aGlzLmtleUlkID0ga2V5SWQ7XG4gICAgICAgIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzID1cbiAgICAgICAgICAgIGVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyAhPT0gbnVsbCAmJiBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgIT09IHZvaWQgMCA/IGVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcyA6IDUgKiA2MCAqIDEwMDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuc3VyZXMgdGhhdCB3ZSdyZSBjYWNoaW5nIGEga2V5IGFwcHJvcHJpYXRlbHksIGdpdmluZyBwcmVjZWRlbmNlIHRvIHNjb3BlcyB2cy4gdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkkgYmVpbmcgYXV0aG9yaXplZC5cbiAgICAgKiBAcGFyYW0gc2NvcGVzIFRoZSBzY29wZSBvciBzY29wZXMgYmVpbmcgYXV0aG9yaXplZFxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHRoYXQgcmV0dXJucyB0aGUgY2FjaGVkIGtleS5cbiAgICAgKi9cbiAgICBnZXRDYWNoZWRLZXkodXJsLCBzY29wZXMpIHtcbiAgICAgICAgbGV0IGNhY2hlS2V5ID0gdXJsO1xuICAgICAgICBpZiAoc2NvcGVzICYmIEFycmF5LmlzQXJyYXkoc2NvcGVzKSAmJiBzY29wZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYWNoZUtleSA9IHVybCA/IGAke3VybH1fJHtzY29wZXMuam9pbignXycpfWAgOiBgJHtzY29wZXMuam9pbignXycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjb3BlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNhY2hlS2V5ID0gdXJsID8gYCR7dXJsfV8ke3Njb3Blc31gIDogc2NvcGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2FjaGVLZXkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdTY29wZXMgb3IgdXJsIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVLZXk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIG5vbi1leHBpcmVkIGFjY2VzcyB0b2tlbiwgYWZ0ZXIgcmVmcmVzaGluZyBpZiBuZWNlc3NhcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIFRoZSBVUkkgYmVpbmcgYXV0aG9yaXplZC5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbENsYWltcyBBbiBvYmplY3Qgd2l0aCBhIHNldCBvZiBhZGRpdGlvbmFsIGNsYWltcyB0b1xuICAgICAqIGluY2x1ZGUgaW4gdGhlIHBheWxvYWQuXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IHRoYXQgaW5jbHVkZXMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgICAqL1xuICAgIGdldFJlcXVlc3RIZWFkZXJzKHVybCwgYWRkaXRpb25hbENsYWltcywgc2NvcGVzKSB7XG4gICAgICAgIC8vIFJldHVybiBjYWNoZWQgYXV0aG9yaXphdGlvbiBoZWFkZXJzLCB1bmxlc3Mgd2UgYXJlIHdpdGhpblxuICAgICAgICAvLyBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgbXMgb2YgdGhlbSBleHBpcmluZzpcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDYWNoZWRLZXkodXJsLCBzY29wZXMpO1xuICAgICAgICBjb25zdCBjYWNoZWRUb2tlbiA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjYWNoZWRUb2tlbiAmJlxuICAgICAgICAgICAgY2FjaGVkVG9rZW4uZXhwaXJhdGlvbiAtIG5vdyA+IHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkVG9rZW4uaGVhZGVycztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpYXQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgY29uc3QgZXhwID0gSldUQWNjZXNzLmdldEV4cGlyYXRpb25UaW1lKGlhdCk7XG4gICAgICAgIGxldCBkZWZhdWx0Q2xhaW1zO1xuICAgICAgICAvLyBUdXJuIHNjb3BlcyBpbnRvIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmdcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NvcGVzKSkge1xuICAgICAgICAgICAgc2NvcGVzID0gc2NvcGVzLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBzY29wZXMgYXJlIHNwZWNpZmllZCwgc2lnbiB3aXRoIHNjb3Blc1xuICAgICAgICBpZiAoc2NvcGVzKSB7XG4gICAgICAgICAgICBkZWZhdWx0Q2xhaW1zID0ge1xuICAgICAgICAgICAgICAgIGlzczogdGhpcy5lbWFpbCxcbiAgICAgICAgICAgICAgICBzdWI6IHRoaXMuZW1haWwsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHNjb3BlcyxcbiAgICAgICAgICAgICAgICBleHAsXG4gICAgICAgICAgICAgICAgaWF0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRDbGFpbXMgPSB7XG4gICAgICAgICAgICAgICAgaXNzOiB0aGlzLmVtYWlsLFxuICAgICAgICAgICAgICAgIHN1YjogdGhpcy5lbWFpbCxcbiAgICAgICAgICAgICAgICBhdWQ6IHVybCxcbiAgICAgICAgICAgICAgICBleHAsXG4gICAgICAgICAgICAgICAgaWF0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhZGRpdGlvbmFsQ2xhaW1zIGFyZSBwcm92aWRlZCwgZW5zdXJlIHRoZXkgZG8gbm90IGNvbGxpZGUgd2l0aFxuICAgICAgICAvLyBvdGhlciByZXF1aXJlZCBjbGFpbXMuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ2xhaW1zKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsYWltIGluIGRlZmF1bHRDbGFpbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkaXRpb25hbENsYWltc1tjbGFpbV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7Y2xhaW19JyBwcm9wZXJ0eSBpcyBub3QgYWxsb3dlZCB3aGVuIHBhc3NpbmcgYWRkaXRpb25hbENsYWltcy4gVGhpcyBjbGFpbSBpcyBpbmNsdWRlZCBpbiB0aGUgSldUIGJ5IGRlZmF1bHQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMua2V5SWRcbiAgICAgICAgICAgID8geyAuLi5ERUZBVUxUX0hFQURFUiwga2lkOiB0aGlzLmtleUlkIH1cbiAgICAgICAgICAgIDogREVGQVVMVF9IRUFERVI7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRDbGFpbXMsIGFkZGl0aW9uYWxDbGFpbXMpO1xuICAgICAgICAvLyBTaWduIHRoZSBqd3QgYW5kIGFkZCBpdCB0byB0aGUgY2FjaGVcbiAgICAgICAgY29uc3Qgc2lnbmVkSldUID0gandzLnNpZ24oeyBoZWFkZXIsIHBheWxvYWQsIHNlY3JldDogdGhpcy5rZXkgfSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzaWduZWRKV1R9YCB9O1xuICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHtcbiAgICAgICAgICAgIGV4cGlyYXRpb246IGV4cCAqIDEwMDAsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgSldUIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlhdCBUaGUgaXNzdWVkIGF0IHRpbWUgZm9yIHRoZSBKV1QuXG4gICAgICogQHJldHVybnMgQW4gZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgSldULlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFeHBpcmF0aW9uVGltZShpYXQpIHtcbiAgICAgICAgY29uc3QgZXhwID0gaWF0ICsgMzYwMDsgLy8gMzYwMCBzZWNvbmRzID0gMSBob3VyXG4gICAgICAgIHJldHVybiBleHA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIEpXVEFjY2VzcyBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gaW5wdXQgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ganNvbiBUaGUgaW5wdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcGFzcyBpbiBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlcnZpY2UgYWNjb3VudCBhdXRoIHNldHRpbmdzLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi5jbGllbnRfZW1haWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluY29taW5nIEpTT04gb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gYSBjbGllbnRfZW1haWwgZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ucHJpdmF0ZV9rZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluY29taW5nIEpTT04gb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gYSBwcml2YXRlX2tleSBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGpzb24ga2V5IGZpbGUuXG4gICAgICAgIHRoaXMuZW1haWwgPSBqc29uLmNsaWVudF9lbWFpbDtcbiAgICAgICAgdGhpcy5rZXkgPSBqc29uLnByaXZhdGVfa2V5O1xuICAgICAgICB0aGlzLmtleUlkID0ganNvbi5wcml2YXRlX2tleV9pZDtcbiAgICAgICAgdGhpcy5wcm9qZWN0SWQgPSBqc29uLnByb2plY3RfaWQ7XG4gICAgfVxuICAgIGZyb21TdHJlYW0oaW5wdXRTdHJlYW0sIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5mcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0pLnRoZW4oKCkgPT4gY2FsbGJhY2soKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5wdXRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBzdHJlYW0gY29udGFpbmluZyB0aGUgc2VydmljZSBhY2NvdW50IGF1dGggc2V0dGluZ3MuJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHMgPSAnJztcbiAgICAgICAgICAgIGlucHV0U3RyZWFtXG4gICAgICAgICAgICAgICAgLnNldEVuY29kaW5nKCd1dGY4JylcbiAgICAgICAgICAgICAgICAub24oJ2RhdGEnLCBjaHVuayA9PiAocyArPSBjaHVuaykpXG4gICAgICAgICAgICAgICAgLm9uKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm9tSlNPTihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLkpXVEFjY2VzcyA9IEpXVEFjY2VzcztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxMyBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSldUID0gdm9pZCAwO1xuY29uc3QgZ3Rva2VuXzEgPSByZXF1aXJlKFwiZ3Rva2VuXCIpO1xuY29uc3Qgand0YWNjZXNzXzEgPSByZXF1aXJlKFwiLi9qd3RhY2Nlc3NcIik7XG5jb25zdCBvYXV0aDJjbGllbnRfMSA9IHJlcXVpcmUoXCIuL29hdXRoMmNsaWVudFwiKTtcbmNvbnN0IGF1dGhjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGhjbGllbnRcIik7XG5jbGFzcyBKV1QgZXh0ZW5kcyBvYXV0aDJjbGllbnRfMS5PQXV0aDJDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNPckVtYWlsLCBrZXlGaWxlLCBrZXksIHNjb3Blcywgc3ViamVjdCwga2V5SWQpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnNPckVtYWlsICYmIHR5cGVvZiBvcHRpb25zT3JFbWFpbCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gb3B0aW9uc09yRW1haWxcbiAgICAgICAgICAgIDogeyBlbWFpbDogb3B0aW9uc09yRW1haWwsIGtleUZpbGUsIGtleSwga2V5SWQsIHNjb3Blcywgc3ViamVjdCB9O1xuICAgICAgICBzdXBlcihvcHRzKTtcbiAgICAgICAgdGhpcy5lbWFpbCA9IG9wdHMuZW1haWw7XG4gICAgICAgIHRoaXMua2V5RmlsZSA9IG9wdHMua2V5RmlsZTtcbiAgICAgICAgdGhpcy5rZXkgPSBvcHRzLmtleTtcbiAgICAgICAgdGhpcy5rZXlJZCA9IG9wdHMua2V5SWQ7XG4gICAgICAgIHRoaXMuc2NvcGVzID0gb3B0cy5zY29wZXM7XG4gICAgICAgIHRoaXMuc3ViamVjdCA9IG9wdHMuc3ViamVjdDtcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsQ2xhaW1zID0gb3B0cy5hZGRpdGlvbmFsQ2xhaW1zO1xuICAgICAgICAvLyBTdGFydCB3aXRoIGFuIGV4cGlyZWQgcmVmcmVzaCB0b2tlbiwgd2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IGJlXG4gICAgICAgIC8vIHJlZnJlc2hlZCBiZWZvcmUgdGhlIGZpcnN0IEFQSSBjYWxsIGlzIG1hZGUuXG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7IHJlZnJlc2hfdG9rZW46ICdqd3QtcGxhY2Vob2xkZXInLCBleHBpcnlfZGF0ZTogMSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGUgY3JlZGVudGlhbCB3aXRoIHRoZSBzcGVjaWZpZWQgc2NvcGVzLlxuICAgICAqIEBwYXJhbSBzY29wZXMgTGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzIG9yIGEgc2luZ2xlIHNjb3BlLlxuICAgICAqIEByZXR1cm4gVGhlIGNsb25lZCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjcmVhdGVTY29wZWQoc2NvcGVzKSB7XG4gICAgICAgIGNvbnN0IGp3dCA9IG5ldyBKV1QodGhpcyk7XG4gICAgICAgIGp3dC5zY29wZXMgPSBzY29wZXM7XG4gICAgICAgIHJldHVybiBqd3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9idGFpbnMgdGhlIG1ldGFkYXRhIHRvIGJlIHNlbnQgd2l0aCB0aGUgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgdGhlIFVSSSBiZWluZyBhdXRob3JpemVkLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlcXVlc3RNZXRhZGF0YUFzeW5jKHVybCkge1xuICAgICAgICB1cmwgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlUGF0aCA/IGBodHRwczovLyR7dGhpcy5kZWZhdWx0U2VydmljZVBhdGh9L2AgOiB1cmw7XG4gICAgICAgIGNvbnN0IHVzZVNlbGZTaWduZWRKV1QgPSAoIXRoaXMuaGFzVXNlclNjb3BlcygpICYmIHVybCkgfHxcbiAgICAgICAgICAgICh0aGlzLnVzZUpXVEFjY2Vzc1dpdGhTY29wZSAmJiB0aGlzLmhhc0FueVNjb3BlcygpKSB8fFxuICAgICAgICAgICAgdGhpcy51bml2ZXJzZURvbWFpbiAhPT0gYXV0aGNsaWVudF8xLkRFRkFVTFRfVU5JVkVSU0U7XG4gICAgICAgIGlmICh0aGlzLnN1YmplY3QgJiYgdGhpcy51bml2ZXJzZURvbWFpbiAhPT0gYXV0aGNsaWVudF8xLkRFRkFVTFRfVU5JVkVSU0UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBTZXJ2aWNlIEFjY291bnQgdXNlciBpcyBjb25maWd1cmVkIGZvciB0aGUgY3JlZGVudGlhbC4gRG9tYWluLXdpZGUgZGVsZWdhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHVuaXZlcnNlcyBvdGhlciB0aGFuICR7YXV0aGNsaWVudF8xLkRFRkFVTFRfVU5JVkVSU0V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmFwaUtleSAmJiB1c2VTZWxmU2lnbmVkSldUKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRpdGlvbmFsQ2xhaW1zICYmXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRpdGlvbmFsQ2xhaW1zLnRhcmdldF9hdWRpZW5jZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdG9rZW5zIH0gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuYWRkU2hhcmVkTWV0YWRhdGFIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbnMuaWRfdG9rZW59YCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG5vIHNjb3BlcyBoYXZlIGJlZW4gc2V0LCBidXQgYSB1cmkgaGFzIGJlZW4gcHJvdmlkZWQuIFVzZSBKV1RBY2Nlc3NcbiAgICAgICAgICAgICAgICAvLyBjcmVkZW50aWFscy5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzID0gbmV3IGp3dGFjY2Vzc18xLkpXVEFjY2Vzcyh0aGlzLmVtYWlsLCB0aGlzLmtleSwgdGhpcy5rZXlJZCwgdGhpcy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc2NvcGVzO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1VzZXJTY29wZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBzY29wZXMgPSB0aGlzLnNjb3BlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgICAgICBzY29wZXMgPSB0aGlzLmRlZmF1bHRTY29wZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZVNjb3BlcyA9IHRoaXMudXNlSldUQWNjZXNzV2l0aFNjb3BlIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gIT09IGF1dGhjbGllbnRfMS5ERUZBVUxUX1VOSVZFUlNFO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLmFjY2Vzcy5nZXRSZXF1ZXN0SGVhZGVycyh1cmwgIT09IG51bGwgJiYgdXJsICE9PSB2b2lkIDAgPyB1cmwgOiB1bmRlZmluZWQsIHRoaXMuYWRkaXRpb25hbENsYWltcywgXG4gICAgICAgICAgICAgICAgLy8gU2NvcGVzIHRha2UgcHJlY2VkZW50IG92ZXIgYXVkaWVuY2UgZm9yIHNpZ25pbmcsXG4gICAgICAgICAgICAgICAgLy8gc28gd2Ugb25seSBwcm92aWRlIHRoZW0gaWYgYHVzZUpXVEFjY2Vzc1dpdGhTY29wZWAgaXMgb24gb3JcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gYSBub24tZGVmYXVsdCB1bml2ZXJzZVxuICAgICAgICAgICAgICAgIHVzZVNjb3BlcyA/IHNjb3BlcyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaGVhZGVyczogdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycykgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmhhc0FueVNjb3BlcygpIHx8IHRoaXMuYXBpS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UmVxdWVzdE1ldGFkYXRhQXN5bmModXJsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIG5vIGF1ZGllbmNlLCBhcGlLZXksIG9yIHNjb3BlcyBhcmUgcHJvdmlkZWQsIHdlIHNob3VsZCBub3QgYXR0ZW1wdFxuICAgICAgICAgICAgLy8gdG8gcG9wdWxhdGUgYW55IGhlYWRlcnM6XG4gICAgICAgICAgICByZXR1cm4geyBoZWFkZXJzOiB7fSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgYW4gSUQgdG9rZW4uXG4gICAgICogQHBhcmFtIHRhcmdldEF1ZGllbmNlIHRoZSBhdWRpZW5jZSBmb3IgdGhlIGZldGNoZWQgSUQgdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgZmV0Y2hJZFRva2VuKHRhcmdldEF1ZGllbmNlKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBnVG9rZW4gZm9yIGZldGNoaW5nIGFuIElEIHRva2VuXG4gICAgICAgIGNvbnN0IGd0b2tlbiA9IG5ldyBndG9rZW5fMS5Hb29nbGVUb2tlbih7XG4gICAgICAgICAgICBpc3M6IHRoaXMuZW1haWwsXG4gICAgICAgICAgICBzdWI6IHRoaXMuc3ViamVjdCxcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlcyB8fCB0aGlzLmRlZmF1bHRTY29wZXMsXG4gICAgICAgICAgICBrZXlGaWxlOiB0aGlzLmtleUZpbGUsXG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgYWRkaXRpb25hbENsYWltczogeyB0YXJnZXRfYXVkaWVuY2U6IHRhcmdldEF1ZGllbmNlIH0sXG4gICAgICAgICAgICB0cmFuc3BvcnRlcjogdGhpcy50cmFuc3BvcnRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGd0b2tlbi5nZXRUb2tlbih7XG4gICAgICAgICAgICBmb3JjZVJlZnJlc2g6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWd0b2tlbi5pZFRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3I6IEZhaWxlZCB0byBmZXRjaCBJRCB0b2tlbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBndG9rZW4uaWRUb2tlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBjdXJyZW50bHkgc2NvcGVzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBoYXNVc2VyU2NvcGVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2NvcGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBvciB1c2VyIHNjb3BlcyBkZWZpbmVkLlxuICAgICAqL1xuICAgIGhhc0FueVNjb3BlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NvcGVzICYmIHRoaXMuc2NvcGVzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFNjb3BlcyAmJiB0aGlzLmRlZmF1bHRTY29wZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGF1dGhvcml6ZShjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplQXN5bmMoKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6ZUFzeW5jKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgYXV0aG9yaXplQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKCk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlc3VsdCByZXR1cm5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSByZXN1bHQudG9rZW5zO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4gPSAnand0LXBsYWNlaG9sZGVyJztcbiAgICAgICAgdGhpcy5rZXkgPSB0aGlzLmd0b2tlbi5rZXk7XG4gICAgICAgIHRoaXMuZW1haWwgPSB0aGlzLmd0b2tlbi5pc3M7XG4gICAgICAgIHJldHVybiByZXN1bHQudG9rZW5zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbi5cbiAgICAgKiBAcGFyYW0gcmVmcmVzaFRva2VuIGlnbm9yZWRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbk5vQ2FjaGUoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zdCBndG9rZW4gPSB0aGlzLmNyZWF0ZUdUb2tlbigpO1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGd0b2tlbi5nZXRUb2tlbih7XG4gICAgICAgICAgICBmb3JjZVJlZnJlc2g6IHRoaXMuaXNUb2tlbkV4cGlyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB7XG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHRva2VuLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIHRva2VuX3R5cGU6ICdCZWFyZXInLFxuICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IGd0b2tlbi5leHBpcmVzQXQsXG4gICAgICAgICAgICBpZF90b2tlbjogZ3Rva2VuLmlkVG9rZW4sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdCgndG9rZW5zJywgdG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzOiBudWxsLCB0b2tlbnMgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgZ1Rva2VuIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cbiAgICAgKi9cbiAgICBjcmVhdGVHVG9rZW4oKSB7XG4gICAgICAgIGlmICghdGhpcy5ndG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZ3Rva2VuID0gbmV3IGd0b2tlbl8xLkdvb2dsZVRva2VuKHtcbiAgICAgICAgICAgICAgICBpc3M6IHRoaXMuZW1haWwsXG4gICAgICAgICAgICAgICAgc3ViOiB0aGlzLnN1YmplY3QsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHRoaXMuc2NvcGVzIHx8IHRoaXMuZGVmYXVsdFNjb3BlcyxcbiAgICAgICAgICAgICAgICBrZXlGaWxlOiB0aGlzLmtleUZpbGUsXG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ2xhaW1zOiB0aGlzLmFkZGl0aW9uYWxDbGFpbXMsXG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0ZXI6IHRoaXMudHJhbnNwb3J0ZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ndG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIEpXVCBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gaW5wdXQgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ganNvbiBUaGUgaW5wdXQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50Kio6IElmIHlvdSBhY2NlcHQgYSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb24gKGNyZWRlbnRpYWwgSlNPTi9GaWxlL1N0cmVhbSkgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdvb2dsZSBDbG91ZCwgeW91IG11c3QgdmFsaWRhdGUgaXQgYmVmb3JlIHByb3ZpZGluZyBpdCB0byBhbnkgR29vZ2xlIEFQSSBvciBsaWJyYXJ5LiBQcm92aWRpbmcgYW4gdW52YWxpZGF0ZWQgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uIHRvIEdvb2dsZSBBUElzIGNhbiBjb21wcm9taXNlIHRoZSBzZWN1cml0eSBvZiB5b3VyIHN5c3RlbXMgYW5kIGRhdGEuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2RvY3MvYXV0aGVudGljYXRpb24vZXh0ZXJuYWwvZXh0ZXJuYWxseS1zb3VyY2VkLWNyZWRlbnRpYWxzIFZhbGlkYXRlIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbnMgZnJvbSBleHRlcm5hbCBzb3VyY2VzfS5cbiAgICAgKi9cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBzZXJ2aWNlIGFjY291bnQgYXV0aCBzZXR0aW5ncy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24uY2xpZW50X2VtYWlsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgY2xpZW50X2VtYWlsIGZpZWxkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLnByaXZhdGVfa2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgcHJpdmF0ZV9rZXkgZmllbGQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeHRyYWN0IHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBqc29uIGtleSBmaWxlLlxuICAgICAgICB0aGlzLmVtYWlsID0ganNvbi5jbGllbnRfZW1haWw7XG4gICAgICAgIHRoaXMua2V5ID0ganNvbi5wcml2YXRlX2tleTtcbiAgICAgICAgdGhpcy5rZXlJZCA9IGpzb24ucHJpdmF0ZV9rZXlfaWQ7XG4gICAgICAgIHRoaXMucHJvamVjdElkID0ganNvbi5wcm9qZWN0X2lkO1xuICAgICAgICB0aGlzLnF1b3RhUHJvamVjdElkID0ganNvbi5xdW90YV9wcm9qZWN0X2lkO1xuICAgICAgICB0aGlzLnVuaXZlcnNlRG9tYWluID0ganNvbi51bml2ZXJzZV9kb21haW4gfHwgdGhpcy51bml2ZXJzZURvbWFpbjtcbiAgICB9XG4gICAgZnJvbVN0cmVhbShpbnB1dFN0cmVhbSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSkudGhlbigoKSA9PiBjYWxsYmFjaygpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tU3RyZWFtQXN5bmMoaW5wdXRTdHJlYW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpbnB1dFN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwYXNzIGluIGEgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIHNlcnZpY2UgYWNjb3VudCBhdXRoIHNldHRpbmdzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHMgPSAnJztcbiAgICAgICAgICAgIGlucHV0U3RyZWFtXG4gICAgICAgICAgICAgICAgLnNldEVuY29kaW5nKCd1dGY4JylcbiAgICAgICAgICAgICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgICAgICAgICAgIC5vbignZGF0YScsIGNodW5rID0+IChzICs9IGNodW5rKSlcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm9tSlNPTihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgSldUIGNyZWRlbnRpYWxzIGluc3RhbmNlIHVzaW5nIGFuIEFQSSBLZXkgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBhcGlLZXkgVGhlIEFQSSBLZXkgaW4gc3RyaW5nIGZvcm0uXG4gICAgICovXG4gICAgZnJvbUFQSUtleShhcGlLZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcGlLZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBhbiBBUEkgS2V5IHN0cmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXNpbmcgdGhlIGtleSBvciBrZXlGaWxlIG9uIHRoZSBKV1QgY2xpZW50LCBvYnRhaW4gYW4gb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICAgKiB0aGUga2V5IGFuZCB0aGUgY2xpZW50IGVtYWlsLlxuICAgICAqL1xuICAgIGFzeW5jIGdldENyZWRlbnRpYWxzKCkge1xuICAgICAgICBpZiAodGhpcy5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHByaXZhdGVfa2V5OiB0aGlzLmtleSwgY2xpZW50X2VtYWlsOiB0aGlzLmVtYWlsIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5rZXlGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBndG9rZW4gPSB0aGlzLmNyZWF0ZUdUb2tlbigpO1xuICAgICAgICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCBndG9rZW4uZ2V0Q3JlZGVudGlhbHModGhpcy5rZXlGaWxlKTtcbiAgICAgICAgICAgIHJldHVybiB7IHByaXZhdGVfa2V5OiBjcmVkcy5wcml2YXRlS2V5LCBjbGllbnRfZW1haWw6IGNyZWRzLmNsaWVudEVtYWlsIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGtleSBvciBhIGtleUZpbGUgbXVzdCBiZSBwcm92aWRlZCB0byBnZXRDcmVkZW50aWFscy4nKTtcbiAgICB9XG59XG5leHBvcnRzLkpXVCA9IEpXVDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVXNlclJlZnJlc2hDbGllbnQgPSBleHBvcnRzLlVTRVJfUkVGUkVTSF9BQ0NPVU5UX1RZUEUgPSB2b2lkIDA7XG5jb25zdCBvYXV0aDJjbGllbnRfMSA9IHJlcXVpcmUoXCIuL29hdXRoMmNsaWVudFwiKTtcbmNvbnN0IHF1ZXJ5c3RyaW5nXzEgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5leHBvcnRzLlVTRVJfUkVGUkVTSF9BQ0NPVU5UX1RZUEUgPSAnYXV0aG9yaXplZF91c2VyJztcbmNsYXNzIFVzZXJSZWZyZXNoQ2xpZW50IGV4dGVuZHMgb2F1dGgyY2xpZW50XzEuT0F1dGgyQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zT3JDbGllbnRJZCwgY2xpZW50U2VjcmV0LCByZWZyZXNoVG9rZW4sIGVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpcywgZm9yY2VSZWZyZXNoT25GYWlsdXJlKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zT3JDbGllbnRJZCAmJiB0eXBlb2Ygb3B0aW9uc09yQ2xpZW50SWQgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IG9wdGlvbnNPckNsaWVudElkXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBjbGllbnRJZDogb3B0aW9uc09yQ2xpZW50SWQsXG4gICAgICAgICAgICAgICAgY2xpZW50U2VjcmV0LFxuICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgICAgICBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMsXG4gICAgICAgICAgICAgICAgZm9yY2VSZWZyZXNoT25GYWlsdXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hUb2tlbiA9IG9wdHMucmVmcmVzaFRva2VuO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4gPSBvcHRzLnJlZnJlc2hUb2tlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiBBbiBpZ25vcmVkIHJlZnJlc2hUb2tlbi4uXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIE9wdGlvbmFsIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbk5vQ2FjaGUoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHJlZnJlc2hUb2tlbikge1xuICAgICAgICByZXR1cm4gc3VwZXIucmVmcmVzaFRva2VuTm9DYWNoZSh0aGlzLl9yZWZyZXNoVG9rZW4pO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaElkVG9rZW4odGFyZ2V0QXVkaWVuY2UpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KHtcbiAgICAgICAgICAgIC4uLlVzZXJSZWZyZXNoQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdGhpcy5lbmRwb2ludHMub2F1dGgyVG9rZW5VcmwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgZGF0YTogKDAsIHF1ZXJ5c3RyaW5nXzEuc3RyaW5naWZ5KSh7XG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9jbGllbnRJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLl9jbGllbnRTZWNyZXQsXG4gICAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMuX3JlZnJlc2hUb2tlbixcbiAgICAgICAgICAgICAgICB0YXJnZXRfYXVkaWVuY2U6IHRhcmdldEF1ZGllbmNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzLmRhdGEuaWRfdG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIFVzZXJSZWZyZXNoQ2xpZW50IGNyZWRlbnRpYWxzIGluc3RhbmNlIHVzaW5nIHRoZSBnaXZlbiBpbnB1dFxuICAgICAqIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIGpzb24gVGhlIGlucHV0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSB1c2VyIHJlZnJlc2ggdG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoanNvbi50eXBlICE9PSAnYXV0aG9yaXplZF91c2VyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgaGF2ZSB0aGUgXCJhdXRob3JpemVkX3VzZXJcIiB0eXBlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLmNsaWVudF9pZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIGNsaWVudF9pZCBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi5jbGllbnRfc2VjcmV0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgY2xpZW50X3NlY3JldCBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgcmVmcmVzaF90b2tlbiBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NsaWVudElkID0ganNvbi5jbGllbnRfaWQ7XG4gICAgICAgIHRoaXMuX2NsaWVudFNlY3JldCA9IGpzb24uY2xpZW50X3NlY3JldDtcbiAgICAgICAgdGhpcy5fcmVmcmVzaFRva2VuID0ganNvbi5yZWZyZXNoX3Rva2VuO1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4gPSBqc29uLnJlZnJlc2hfdG9rZW47XG4gICAgICAgIHRoaXMucXVvdGFQcm9qZWN0SWQgPSBqc29uLnF1b3RhX3Byb2plY3RfaWQ7XG4gICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gPSBqc29uLnVuaXZlcnNlX2RvbWFpbiB8fCB0aGlzLnVuaXZlcnNlRG9tYWluO1xuICAgIH1cbiAgICBmcm9tU3RyZWFtKGlucHV0U3RyZWFtLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtKS50aGVuKCgpID0+IGNhbGxiYWNrKCksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlucHV0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ011c3QgcGFzcyBpbiBhIHN0cmVhbSBjb250YWluaW5nIHRoZSB1c2VyIHJlZnJlc2ggdG9rZW4uJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHMgPSAnJztcbiAgICAgICAgICAgIGlucHV0U3RyZWFtXG4gICAgICAgICAgICAgICAgLnNldEVuY29kaW5nKCd1dGY4JylcbiAgICAgICAgICAgICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgICAgICAgICAgIC5vbignZGF0YScsIGNodW5rID0+IChzICs9IGNodW5rKSlcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm9tSlNPTihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBVc2VyUmVmcmVzaENsaWVudCBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyB0aGUgZ2l2ZW4gaW5wdXRcbiAgICAgKiBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBqc29uIFRoZSBpbnB1dCBvYmplY3QuXG4gICAgICovXG4gICAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFVzZXJSZWZyZXNoQ2xpZW50KCk7XG4gICAgICAgIGNsaWVudC5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9XG59XG5leHBvcnRzLlVzZXJSZWZyZXNoQ2xpZW50ID0gVXNlclJlZnJlc2hDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JbXBlcnNvbmF0ZWQgPSBleHBvcnRzLklNUEVSU09OQVRFRF9BQ0NPVU5UX1RZUEUgPSB2b2lkIDA7XG5jb25zdCBvYXV0aDJjbGllbnRfMSA9IHJlcXVpcmUoXCIuL29hdXRoMmNsaWVudFwiKTtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcImdheGlvc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZXhwb3J0cy5JTVBFUlNPTkFURURfQUNDT1VOVF9UWVBFID0gJ2ltcGVyc29uYXRlZF9zZXJ2aWNlX2FjY291bnQnO1xuY2xhc3MgSW1wZXJzb25hdGVkIGV4dGVuZHMgb2F1dGgyY2xpZW50XzEuT0F1dGgyQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbXBlcnNvbmF0ZWQgc2VydmljZSBhY2NvdW50IGNyZWRlbnRpYWxzLlxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgbmV3IGFjY2VzcyB0b2tlbiBieSBpbXBlcnNvbmF0aW5nIGFub3RoZXIgc2VydmljZSBhY2NvdW50LlxuICAgICAqXG4gICAgICogSW1wZXJzb25hdGVkIENyZWRlbnRpYWxzIGFsbG93aW5nIGNyZWRlbnRpYWxzIGlzc3VlZCB0byBhIHVzZXIgb3JcbiAgICAgKiBzZXJ2aWNlIGFjY291bnQgdG8gaW1wZXJzb25hdGUgYW5vdGhlci4gVGhlIHNvdXJjZSBwcm9qZWN0IHVzaW5nXG4gICAgICogSW1wZXJzb25hdGVkIENyZWRlbnRpYWxzIG11c3QgZW5hYmxlIHRoZSBcIklBTUNyZWRlbnRpYWxzXCIgQVBJLlxuICAgICAqIEFsc28sIHRoZSB0YXJnZXQgc2VydmljZSBhY2NvdW50IG11c3QgZ3JhbnQgdGhlIG9yZ2luYXRpbmcgcHJpbmNpcGFsXG4gICAgICogdGhlIFwiU2VydmljZSBBY2NvdW50IFRva2VuIENyZWF0b3JcIiBJQU0gcm9sZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5zb3VyY2VDbGllbnRdIHRoZSBzb3VyY2UgY3JlZGVudGlhbCB1c2VkIGFzIHRvXG4gICAgICogYWNxdWlyZSB0aGUgaW1wZXJzb25hdGVkIGNyZWRlbnRpYWxzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50YXJnZXRQcmluY2lwYWxdIHRoZSBzZXJ2aWNlIGFjY291bnQgdG9cbiAgICAgKiBpbXBlcnNvbmF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3B0aW9ucy5kZWxlZ2F0ZXNdIHRoZSBjaGFpbmVkIGxpc3Qgb2YgZGVsZWdhdGVzXG4gICAgICogcmVxdWlyZWQgdG8gZ3JhbnQgdGhlIGZpbmFsIGFjY2Vzc190b2tlbi4gSWYgc2V0LCB0aGUgc2VxdWVuY2Ugb2ZcbiAgICAgKiBpZGVudGl0aWVzIG11c3QgaGF2ZSBcIlNlcnZpY2UgQWNjb3VudCBUb2tlbiBDcmVhdG9yXCIgY2FwYWJpbGl0eSBncmFudGVkIHRvXG4gICAgICogdGhlIHByZWNlZGluZyBpZGVudGl0eS4gRm9yIGV4YW1wbGUsIGlmIHNldCB0byBbc2VydmljZUFjY291bnRCLFxuICAgICAqIHNlcnZpY2VBY2NvdW50Q10sIHRoZSBzb3VyY2VDcmVkZW50aWFsIG11c3QgaGF2ZSB0aGUgVG9rZW4gQ3JlYXRvciByb2xlIG9uXG4gICAgICogc2VydmljZUFjY291bnRCLiBzZXJ2aWNlQWNjb3VudEIgbXVzdCBoYXZlIHRoZSBUb2tlbiBDcmVhdG9yIG9uXG4gICAgICogc2VydmljZUFjY291bnRDLiBGaW5hbGx5LCBDIG11c3QgaGF2ZSBUb2tlbiBDcmVhdG9yIG9uIHRhcmdldF9wcmluY2lwYWwuXG4gICAgICogSWYgbGVmdCB1bnNldCwgc291cmNlQ3JlZGVudGlhbCBtdXN0IGhhdmUgdGhhdCByb2xlIG9uIHRhcmdldFByaW5jaXBhbC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3B0aW9ucy50YXJnZXRTY29wZXNdIHNjb3BlcyB0byByZXF1ZXN0IGR1cmluZyB0aGVcbiAgICAgKiBhdXRob3JpemF0aW9uIGdyYW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5saWZldGltZV0gbnVtYmVyIG9mIHNlY29uZHMgdGhlIGRlbGVnYXRlZFxuICAgICAqIGNyZWRlbnRpYWwgc2hvdWxkIGJlIHZhbGlkIGZvciB1cCB0byAzNjAwIHNlY29uZHMgYnkgZGVmYXVsdCwgb3IgNDMsMjAwXG4gICAgICogc2Vjb25kcyBieSBleHRlbmRpbmcgdGhlIHRva2VuJ3MgbGlmZXRpbWUsIHNlZTpcbiAgICAgKiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vaWFtL2RvY3MvY3JlYXRpbmctc2hvcnQtbGl2ZWQtc2VydmljZS1hY2NvdW50LWNyZWRlbnRpYWxzI3NhLWNyZWRlbnRpYWxzLW9hdXRoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVuZHBvaW50XSBhcGkgZW5kcG9pbnQgb3ZlcnJpZGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhbiBleHBpcmVkIHJlZnJlc2ggdG9rZW4sIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBiZVxuICAgICAgICAvLyByZWZyZXNoZWQgYmVmb3JlIHRoZSBmaXJzdCBBUEkgY2FsbCBpcyBtYWRlLlxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0ge1xuICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IDEsXG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiAnaW1wZXJzb25hdGVkLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zb3VyY2VDbGllbnQgPSAoX2EgPSBvcHRpb25zLnNvdXJjZUNsaWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IG9hdXRoMmNsaWVudF8xLk9BdXRoMkNsaWVudCgpO1xuICAgICAgICB0aGlzLnRhcmdldFByaW5jaXBhbCA9IChfYiA9IG9wdGlvbnMudGFyZ2V0UHJpbmNpcGFsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZXMgPSAoX2MgPSBvcHRpb25zLmRlbGVnYXRlcykgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogW107XG4gICAgICAgIHRoaXMudGFyZ2V0U2NvcGVzID0gKF9kID0gb3B0aW9ucy50YXJnZXRTY29wZXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IFtdO1xuICAgICAgICB0aGlzLmxpZmV0aW1lID0gKF9lID0gb3B0aW9ucy5saWZldGltZSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogMzYwMDtcbiAgICAgICAgY29uc3QgdXNpbmdFeHBsaWNpdFVuaXZlcnNlRG9tYWluID0gISEoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKG9wdGlvbnMpLmdldCgndW5pdmVyc2VfZG9tYWluJyk7XG4gICAgICAgIGlmICghdXNpbmdFeHBsaWNpdFVuaXZlcnNlRG9tYWluKSB7XG4gICAgICAgICAgICAvLyBvdmVycmlkZSB0aGUgZGVmYXVsdCB1bml2ZXJzZSB3aXRoIHRoZSBzb3VyY2UncyB1bml2ZXJzZVxuICAgICAgICAgICAgdGhpcy51bml2ZXJzZURvbWFpbiA9IHRoaXMuc291cmNlQ2xpZW50LnVuaXZlcnNlRG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc291cmNlQ2xpZW50LnVuaXZlcnNlRG9tYWluICE9PSB0aGlzLnVuaXZlcnNlRG9tYWluKSB7XG4gICAgICAgICAgICAvLyBub24tZGVmYXVsdCB1bml2ZXJzZSBhbmQgaXMgbm90IG1hdGNoaW5nIHRoZSBzb3VyY2UgLSB0aGlzIGNvdWxkIGJlIGEgY3JlZGVudGlhbCBsZWFrXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5pdmVyc2UgZG9tYWluICR7dGhpcy5zb3VyY2VDbGllbnQudW5pdmVyc2VEb21haW59IGluIHNvdXJjZSBjcmVkZW50aWFscyBkb2VzIG5vdCBtYXRjaCAke3RoaXMudW5pdmVyc2VEb21haW59IHVuaXZlcnNlIGRvbWFpbiBzZXQgZm9yIGltcGVyc29uYXRlZCBjcmVkZW50aWFscy5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZHBvaW50ID1cbiAgICAgICAgICAgIChfZiA9IG9wdGlvbnMuZW5kcG9pbnQpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IGBodHRwczovL2lhbWNyZWRlbnRpYWxzLiR7dGhpcy51bml2ZXJzZURvbWFpbn1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaWducyBzb21lIGJ5dGVzLlxuICAgICAqXG4gICAgICoge0BsaW5rIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9pYW0vZG9jcy9yZWZlcmVuY2UvY3JlZGVudGlhbHMvcmVzdC92MS9wcm9qZWN0cy5zZXJ2aWNlQWNjb3VudHMvc2lnbkJsb2IgUmVmZXJlbmNlIERvY3VtZW50YXRpb259XG4gICAgICogQHBhcmFtIGJsb2JUb1NpZ24gU3RyaW5nIHRvIHNpZ24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHtAbGluayBTaWduQmxvYlJlc3BvbnNlfSBkZW5vdGluZyB0aGUga2V5SUQgYW5kIHNpZ25lZEJsb2IgaW4gYmFzZTY0IHN0cmluZ1xuICAgICAqL1xuICAgIGFzeW5jIHNpZ24oYmxvYlRvU2lnbikge1xuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZUNsaWVudC5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gYHByb2plY3RzLy0vc2VydmljZUFjY291bnRzLyR7dGhpcy50YXJnZXRQcmluY2lwYWx9YDtcbiAgICAgICAgY29uc3QgdSA9IGAke3RoaXMuZW5kcG9pbnR9L3YxLyR7bmFtZX06c2lnbkJsb2JgO1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgZGVsZWdhdGVzOiB0aGlzLmRlbGVnYXRlcyxcbiAgICAgICAgICAgIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKGJsb2JUb1NpZ24pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zb3VyY2VDbGllbnQucmVxdWVzdCh7XG4gICAgICAgICAgICAuLi5JbXBlcnNvbmF0ZWQuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgdXJsOiB1LFxuICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH1cbiAgICAvKiogVGhlIHNlcnZpY2UgYWNjb3VudCBlbWFpbCB0byBiZSBpbXBlcnNvbmF0ZWQuICovXG4gICAgZ2V0VGFyZ2V0UHJpbmNpcGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRQcmluY2lwYWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZUNsaWVudC5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9ICdwcm9qZWN0cy8tL3NlcnZpY2VBY2NvdW50cy8nICsgdGhpcy50YXJnZXRQcmluY2lwYWw7XG4gICAgICAgICAgICBjb25zdCB1ID0gYCR7dGhpcy5lbmRwb2ludH0vdjEvJHtuYW1lfTpnZW5lcmF0ZUFjY2Vzc1Rva2VuYDtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgZGVsZWdhdGVzOiB0aGlzLmRlbGVnYXRlcyxcbiAgICAgICAgICAgICAgICBzY29wZTogdGhpcy50YXJnZXRTY29wZXMsXG4gICAgICAgICAgICAgICAgbGlmZXRpbWU6IHRoaXMubGlmZXRpbWUgKyAncycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zb3VyY2VDbGllbnQucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgLi4uSW1wZXJzb25hdGVkLlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgICAgICB1cmw6IHUsXG4gICAgICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4gPSB0b2tlblJlc3BvbnNlLmFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFscy5leHBpcnlfZGF0ZSA9IERhdGUucGFyc2UodG9rZW5SZXNwb25zZS5leHBpcmVUaW1lKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIGxldCBzdGF0dXMgPSAwO1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIGdheGlvc18xLkdheGlvc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gKF9jID0gKF9iID0gKF9hID0gZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9yLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGF0YSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmVycm9yKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc3RhdHVzO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAoX2YgPSAoX2UgPSAoX2QgPSBlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3IucmVzcG9uc2UpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5kYXRhKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuZXJyb3IpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXR1cyAmJiBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGAke3N0YXR1c306IHVuYWJsZSB0byBpbXBlcnNvbmF0ZTogJHttZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYHVuYWJsZSB0byBpbXBlcnNvbmF0ZTogJHtlcnJvcn1gO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhbiBPcGVuSUQgQ29ubmVjdCBJRCB0b2tlbiBmb3IgYSBzZXJ2aWNlIGFjY291bnQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2lhbS9kb2NzL3JlZmVyZW5jZS9jcmVkZW50aWFscy9yZXN0L3YxL3Byb2plY3RzLnNlcnZpY2VBY2NvdW50cy9nZW5lcmF0ZUlkVG9rZW4gUmVmZXJlbmNlIERvY3VtZW50YXRpb259XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0QXVkaWVuY2UgdGhlIGF1ZGllbmNlIGZvciB0aGUgZmV0Y2hlZCBJRCB0b2tlbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgZm9yIHRoZSByZXF1ZXN0XG4gICAgICogQHJldHVybiBhbiBPcGVuSUQgQ29ubmVjdCBJRCB0b2tlblxuICAgICAqL1xuICAgIGFzeW5jIGZldGNoSWRUb2tlbih0YXJnZXRBdWRpZW5jZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZUNsaWVudC5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICBjb25zdCBuYW1lID0gYHByb2plY3RzLy0vc2VydmljZUFjY291bnRzLyR7dGhpcy50YXJnZXRQcmluY2lwYWx9YDtcbiAgICAgICAgY29uc3QgdSA9IGAke3RoaXMuZW5kcG9pbnR9L3YxLyR7bmFtZX06Z2VuZXJhdGVJZFRva2VuYDtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGRlbGVnYXRlczogdGhpcy5kZWxlZ2F0ZXMsXG4gICAgICAgICAgICBhdWRpZW5jZTogdGFyZ2V0QXVkaWVuY2UsXG4gICAgICAgICAgICBpbmNsdWRlRW1haWw6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5pbmNsdWRlRW1haWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUsXG4gICAgICAgICAgICB1c2VFbWFpbEF6cDogKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmluY2x1ZGVFbWFpbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zb3VyY2VDbGllbnQucmVxdWVzdCh7XG4gICAgICAgICAgICAuLi5JbXBlcnNvbmF0ZWQuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgdXJsOiB1LFxuICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcy5kYXRhLnRva2VuO1xuICAgIH1cbn1cbmV4cG9ydHMuSW1wZXJzb25hdGVkID0gSW1wZXJzb25hdGVkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PQXV0aENsaWVudEF1dGhIYW5kbGVyID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRFcnJvckZyb21PQXV0aEVycm9yUmVzcG9uc2UgPSBnZXRFcnJvckZyb21PQXV0aEVycm9yUmVzcG9uc2U7XG5jb25zdCBxdWVyeXN0cmluZyA9IHJlcXVpcmUoXCJxdWVyeXN0cmluZ1wiKTtcbmNvbnN0IGNyeXB0b18xID0gcmVxdWlyZShcIi4uL2NyeXB0by9jcnlwdG9cIik7XG4vKiogTGlzdCBvZiBIVFRQIG1ldGhvZHMgdGhhdCBhY2NlcHQgcmVxdWVzdCBib2RpZXMuICovXG5jb25zdCBNRVRIT0RTX1NVUFBPUlRJTkdfUkVRVUVTVF9CT0RZID0gWydQVVQnLCAnUE9TVCcsICdQQVRDSCddO1xuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgaGFuZGxpbmcgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGluIE9BdXRoLWJhc2VkXG4gKiBvcGVyYXRpb25zLlxuICogV2hlbiByZXF1ZXN0LWJvZHkgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQsIG9ubHkgYXBwbGljYXRpb24vanNvbiBhbmRcbiAqIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBjb250ZW50IHR5cGVzIGZvciBIVFRQIG1ldGhvZHMgdGhhdCBzdXBwb3J0XG4gKiByZXF1ZXN0IGJvZGllcyBhcmUgc3VwcG9ydGVkLlxuICovXG5jbGFzcyBPQXV0aENsaWVudEF1dGhIYW5kbGVyIHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYW4gT0F1dGggY2xpZW50IGF1dGhlbnRpY2F0aW9uIGhhbmRsZXIuXG4gICAgICogQHBhcmFtIGNsaWVudEF1dGhlbnRpY2F0aW9uIFRoZSBjbGllbnQgYXV0aCBjcmVkZW50aWFscy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjbGllbnRBdXRoZW50aWNhdGlvbikge1xuICAgICAgICB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uID0gY2xpZW50QXV0aGVudGljYXRpb247XG4gICAgICAgIHRoaXMuY3J5cHRvID0gKDAsIGNyeXB0b18xLmNyZWF0ZUNyeXB0bykoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwbGllcyBjbGllbnQgYXV0aGVudGljYXRpb24gb24gdGhlIE9BdXRoIHJlcXVlc3QncyBoZWFkZXJzIG9yIFBPU1RcbiAgICAgKiBib2R5IGJ1dCBkb2VzIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBHYXhpb3NPcHRpb25zIHdob3NlIGhlYWRlcnMgb3IgZGF0YSBhcmUgdG8gYmUgbW9kaWZpZWRcbiAgICAgKiAgIGRlcGVuZGluZyBvbiB0aGUgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSB0byBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBiZWFyZXJUb2tlbiBUaGUgb3B0aW9uYWwgYmVhcmVyIHRva2VuIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24uXG4gICAgICogICBXaGVuIHRoaXMgaXMgdXNlZCwgbm8gY2xpZW50IGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGFyZSBuZWVkZWQuXG4gICAgICovXG4gICAgYXBwbHlDbGllbnRBdXRoZW50aWNhdGlvbk9wdGlvbnMob3B0cywgYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgLy8gSW5qZWN0IGF1dGhlbnRpY2F0ZWQgaGVhZGVyLlxuICAgICAgICB0aGlzLmluamVjdEF1dGhlbnRpY2F0ZWRIZWFkZXJzKG9wdHMsIGJlYXJlclRva2VuKTtcbiAgICAgICAgLy8gSW5qZWN0IGF1dGhlbnRpY2F0ZWQgcmVxdWVzdCBib2R5LlxuICAgICAgICBpZiAoIWJlYXJlclRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLmluamVjdEF1dGhlbnRpY2F0ZWRSZXF1ZXN0Qm9keShvcHRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGNsaWVudCBhdXRoZW50aWNhdGlvbiBvbiB0aGUgcmVxdWVzdCdzIGhlYWRlciBpZiBlaXRoZXJcbiAgICAgKiBiYXNpYyBhdXRoZW50aWNhdGlvbiBvciBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgR2F4aW9zT3B0aW9ucyB3aG9zZSBoZWFkZXJzIG9yIGRhdGEgYXJlIHRvIGJlIG1vZGlmaWVkXG4gICAgICogICBkZXBlbmRpbmcgb24gdGhlIGNsaWVudCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gdG8gYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gVGhlIG9wdGlvbmFsIGJlYXJlciB0b2tlbiB0byB1c2UgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqICAgV2hlbiB0aGlzIGlzIHVzZWQsIG5vIGNsaWVudCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBhcmUgbmVlZGVkLlxuICAgICAqL1xuICAgIGluamVjdEF1dGhlbnRpY2F0ZWRIZWFkZXJzKG9wdHMsIGJlYXJlclRva2VuKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gQmVhcmVyIHRva2VuIHByaW9yaXRpemVkIGhpZ2hlciB0aGFuIGJhc2ljIEF1dGguXG4gICAgICAgIGlmIChiZWFyZXJUb2tlbikge1xuICAgICAgICAgICAgb3B0cy5oZWFkZXJzID0gb3B0cy5oZWFkZXJzIHx8IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvcHRzLmhlYWRlcnMsIHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59fWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoKF9hID0gdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbmZpZGVudGlhbENsaWVudFR5cGUpID09PSAnYmFzaWMnKSB7XG4gICAgICAgICAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgICAgICBjb25zdCBjbGllbnRJZCA9IHRoaXMuY2xpZW50QXV0aGVudGljYXRpb24uY2xpZW50SWQ7XG4gICAgICAgICAgICBjb25zdCBjbGllbnRTZWNyZXQgPSB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNsaWVudFNlY3JldCB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NEVuY29kZWRDcmVkcyA9IHRoaXMuY3J5cHRvLmVuY29kZUJhc2U2NFN0cmluZ1V0ZjgoYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvcHRzLmhlYWRlcnMsIHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNlNjRFbmNvZGVkQ3JlZHN9YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgY2xpZW50IGF1dGhlbnRpY2F0aW9uIG9uIHRoZSByZXF1ZXN0J3MgYm9keSBpZiByZXF1ZXN0LWJvZHlcbiAgICAgKiBjbGllbnQgYXV0aGVudGljYXRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgR2F4aW9zT3B0aW9ucyB3aG9zZSBoZWFkZXJzIG9yIGRhdGEgYXJlIHRvIGJlIG1vZGlmaWVkXG4gICAgICogICBkZXBlbmRpbmcgb24gdGhlIGNsaWVudCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gdG8gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBpbmplY3RBdXRoZW50aWNhdGVkUmVxdWVzdEJvZHkob3B0cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICgoKF9hID0gdGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbmZpZGVudGlhbENsaWVudFR5cGUpID09PSAncmVxdWVzdC1ib2R5Jykge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gKG9wdHMubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgLy8gSW5qZWN0IGF1dGhlbnRpY2F0ZWQgcmVxdWVzdCBib2R5LlxuICAgICAgICAgICAgaWYgKE1FVEhPRFNfU1VQUE9SVElOR19SRVFVRVNUX0JPRFkuaW5kZXhPZihtZXRob2QpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIEdldCBjb250ZW50LXR5cGUuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnICYmIGhlYWRlcnNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5kYXRhID0gb3B0cy5kYXRhIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcXVlcnlzdHJpbmcucGFyc2Uob3B0cy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50QXV0aGVudGljYXRpb24uY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNsaWVudFNlY3JldCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGF0YSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykge1xuICAgICAgICAgICAgICAgICAgICBvcHRzLmRhdGEgPSBvcHRzLmRhdGEgfHwge307XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3B0cy5kYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50QXV0aGVudGljYXRpb24uY2xpZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudEF1dGhlbnRpY2F0aW9uLmNsaWVudFNlY3JldCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y29udGVudFR5cGV9IGNvbnRlbnQtdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2xpZW50QXV0aGVudGljYXRpb24uY29uZmlkZW50aWFsQ2xpZW50VHlwZX0gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2xpZW50IGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gSFRUUCBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jbGllbnRBdXRoZW50aWNhdGlvbi5jb25maWRlbnRpYWxDbGllbnRUeXBlfSBgICtcbiAgICAgICAgICAgICAgICAgICAgJ2NsaWVudCBhdXRoZW50aWNhdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJ5IGNvbmZpZyBmb3IgQXV0aC1yZWxhdGVkIHJlcXVlc3RzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IGEgcGFydCBvZiB0aGUgZGVmYXVsdCB7QGxpbmsgQXV0aENsaWVudC50cmFuc3BvcnRlciB0cmFuc3BvcnRlci9nYXhpb3N9XG4gICAgICogY29uZmlnIGFzIHNvbWUgZG93bnN0cmVhbSBBUElzIHdvdWxkIHByZWZlciBpZiBjdXN0b21lcnMgZXhwbGljaXRseSBlbmFibGUgcmV0cmllcyxcbiAgICAgKiBzdWNoIGFzIEdDUy5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IFJFVFJZX0NPTkZJRygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICAgICAgcmV0cnlDb25maWc6IHtcbiAgICAgICAgICAgICAgICBodHRwTWV0aG9kc1RvUmV0cnk6IFsnR0VUJywgJ1BVVCcsICdQT1NUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdERUxFVEUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5PQXV0aENsaWVudEF1dGhIYW5kbGVyID0gT0F1dGhDbGllbnRBdXRoSGFuZGxlcjtcbi8qKlxuICogQ29udmVydHMgYW4gT0F1dGggZXJyb3IgcmVzcG9uc2UgdG8gYSBuYXRpdmUgSmF2YVNjcmlwdCBFcnJvci5cbiAqIEBwYXJhbSByZXNwIFRoZSBPQXV0aCBlcnJvciByZXNwb25zZSB0byBjb252ZXJ0IHRvIGEgbmF0aXZlIEVycm9yIG9iamVjdC5cbiAqIEBwYXJhbSBlcnIgVGhlIG9wdGlvbmFsIG9yaWdpbmFsIGVycm9yLiBJZiBwcm92aWRlZCwgdGhlIGVycm9yIHByb3BlcnRpZXNcbiAqICAgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG5ldyBlcnJvci5cbiAqIEByZXR1cm4gVGhlIGNvbnZlcnRlZCBuYXRpdmUgRXJyb3Igb2JqZWN0LlxuICovXG5mdW5jdGlvbiBnZXRFcnJvckZyb21PQXV0aEVycm9yUmVzcG9uc2UocmVzcCwgZXJyKSB7XG4gICAgLy8gRXJyb3IgcmVzcG9uc2UuXG4gICAgY29uc3QgZXJyb3JDb2RlID0gcmVzcC5lcnJvcjtcbiAgICBjb25zdCBlcnJvckRlc2NyaXB0aW9uID0gcmVzcC5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICBjb25zdCBlcnJvclVyaSA9IHJlc3AuZXJyb3JfdXJpO1xuICAgIGxldCBtZXNzYWdlID0gYEVycm9yIGNvZGUgJHtlcnJvckNvZGV9YDtcbiAgICBpZiAodHlwZW9mIGVycm9yRGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYDogJHtlcnJvckRlc2NyaXB0aW9ufWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXJyb3JVcmkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCAtICR7ZXJyb3JVcml9YDtcbiAgICB9XG4gICAgY29uc3QgbmV3RXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gb3JpZ2luYWwgZXJyb3IgdG8gbmV3bHkgZ2VuZXJhdGVkIGVycm9yLlxuICAgIGlmIChlcnIpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGVycik7XG4gICAgICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIC8vIENvcHkgZXJyb3Iuc3RhY2sgaWYgYXZhaWxhYmxlLlxuICAgICAgICAgICAga2V5cy5wdXNoKCdzdGFjaycpO1xuICAgICAgICB9XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgLy8gRG8gbm90IG92ZXJ3cml0ZSB0aGUgbWVzc2FnZSBmaWVsZC5cbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdtZXNzYWdlJykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdFcnJvciwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlcnJba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0Vycm9yO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TdHNDcmVkZW50aWFscyA9IHZvaWQgMDtcbmNvbnN0IGdheGlvc18xID0gcmVxdWlyZShcImdheGlvc1wiKTtcbmNvbnN0IHF1ZXJ5c3RyaW5nID0gcmVxdWlyZShcInF1ZXJ5c3RyaW5nXCIpO1xuY29uc3QgdHJhbnNwb3J0ZXJzXzEgPSByZXF1aXJlKFwiLi4vdHJhbnNwb3J0ZXJzXCIpO1xuY29uc3Qgb2F1dGgyY29tbW9uXzEgPSByZXF1aXJlKFwiLi9vYXV0aDJjb21tb25cIik7XG4vKipcbiAqIEltcGxlbWVudHMgdGhlIE9BdXRoIDIuMCB0b2tlbiBleGNoYW5nZSBiYXNlZCBvblxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzg2OTNcbiAqL1xuY2xhc3MgU3RzQ3JlZGVudGlhbHMgZXh0ZW5kcyBvYXV0aDJjb21tb25fMS5PQXV0aENsaWVudEF1dGhIYW5kbGVyIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBTVFMgY3JlZGVudGlhbHMgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHRva2VuRXhjaGFuZ2VFbmRwb2ludCBUaGUgdG9rZW4gZXhjaGFuZ2UgZW5kcG9pbnQuXG4gICAgICogQHBhcmFtIGNsaWVudEF1dGhlbnRpY2F0aW9uIFRoZSBjbGllbnQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgaWZcbiAgICAgKiAgIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0b2tlbkV4Y2hhbmdlRW5kcG9pbnQsIGNsaWVudEF1dGhlbnRpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudEF1dGhlbnRpY2F0aW9uKTtcbiAgICAgICAgdGhpcy50b2tlbkV4Y2hhbmdlRW5kcG9pbnQgPSB0b2tlbkV4Y2hhbmdlRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0ZXIgPSBuZXcgdHJhbnNwb3J0ZXJzXzEuRGVmYXVsdFRyYW5zcG9ydGVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4Y2hhbmdlcyB0aGUgcHJvdmlkZWQgdG9rZW4gZm9yIGFub3RoZXIgdHlwZSBvZiB0b2tlbiBiYXNlZCBvbiB0aGVcbiAgICAgKiByZmM4NjkzIHNwZWMuXG4gICAgICogQHBhcmFtIHN0c0NyZWRlbnRpYWxzT3B0aW9ucyBUaGUgdG9rZW4gZXhjaGFuZ2Ugb3B0aW9ucyB1c2VkIHRvIHBvcHVsYXRlXG4gICAgICogICB0aGUgdG9rZW4gZXhjaGFuZ2UgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbEhlYWRlcnMgT3B0aW9uYWwgYWRkaXRpb25hbCBoZWFkZXJzIHRvIHBhc3MgYWxvbmcgdGhlXG4gICAgICogICByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGFkZGl0aW9uYWwgR0NQLXNwZWNpZmljIG5vbi1zcGVjIGRlZmluZWQgb3B0aW9uc1xuICAgICAqICAgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LlxuICAgICAqICAgRXhhbXBsZTogYCZvcHRpb25zPSR7ZW5jb2RlVXJpQ29tcG9uZW50KEpTT04uc3RyaW5naWZpZWQob3B0aW9ucykpfWBcbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGV4Y2hhbmdlIHJlc3BvbnNlIGNvbnRhaW5pbmdcbiAgICAgKiAgIHRoZSByZXF1ZXN0ZWQgdG9rZW4gYW5kIGl0cyBleHBpcmF0aW9uIHRpbWUuXG4gICAgICovXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihzdHNDcmVkZW50aWFsc09wdGlvbnMsIGFkZGl0aW9uYWxIZWFkZXJzLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgICAgICAgIGdyYW50X3R5cGU6IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5ncmFudFR5cGUsXG4gICAgICAgICAgICByZXNvdXJjZTogc3RzQ3JlZGVudGlhbHNPcHRpb25zLnJlc291cmNlLFxuICAgICAgICAgICAgYXVkaWVuY2U6IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5hdWRpZW5jZSxcbiAgICAgICAgICAgIHNjb3BlOiAoX2EgPSBzdHNDcmVkZW50aWFsc09wdGlvbnMuc2NvcGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qb2luKCcgJyksXG4gICAgICAgICAgICByZXF1ZXN0ZWRfdG9rZW5fdHlwZTogc3RzQ3JlZGVudGlhbHNPcHRpb25zLnJlcXVlc3RlZFRva2VuVHlwZSxcbiAgICAgICAgICAgIHN1YmplY3RfdG9rZW46IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5zdWJqZWN0VG9rZW4sXG4gICAgICAgICAgICBzdWJqZWN0X3Rva2VuX3R5cGU6IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5zdWJqZWN0VG9rZW5UeXBlLFxuICAgICAgICAgICAgYWN0b3JfdG9rZW46IChfYiA9IHN0c0NyZWRlbnRpYWxzT3B0aW9ucy5hY3RpbmdQYXJ0eSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFjdG9yVG9rZW4sXG4gICAgICAgICAgICBhY3Rvcl90b2tlbl90eXBlOiAoX2MgPSBzdHNDcmVkZW50aWFsc09wdGlvbnMuYWN0aW5nUGFydHkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hY3RvclRva2VuVHlwZSxcbiAgICAgICAgICAgIC8vIE5vbi1zdGFuZGFyZCBHQ1Atc3BlY2lmaWMgb3B0aW9ucy5cbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMgJiYgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgICAgIC8vIFJlbW92ZSB1bmRlZmluZWQgZmllbGRzLlxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSW5qZWN0IGFkZGl0aW9uYWwgU1RTIGhlYWRlcnMgaWYgYXZhaWxhYmxlLlxuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIGFkZGl0aW9uYWxIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIC4uLlN0c0NyZWRlbnRpYWxzLlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdGhpcy50b2tlbkV4Y2hhbmdlRW5kcG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh2YWx1ZXMpLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgIH07XG4gICAgICAgIC8vIEFwcGx5IE9BdXRoIGNsaWVudCBhdXRoZW50aWNhdGlvbi5cbiAgICAgICAgdGhpcy5hcHBseUNsaWVudEF1dGhlbnRpY2F0aW9uT3B0aW9ucyhvcHRzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgICAgICAgICAgLy8gU3VjY2Vzc2Z1bCByZXNwb25zZS5cbiAgICAgICAgICAgIGNvbnN0IHN0c1N1Y2Nlc3NmdWxSZXNwb25zZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICBzdHNTdWNjZXNzZnVsUmVzcG9uc2UucmVzID0gcmVzcG9uc2U7XG4gICAgICAgICAgICByZXR1cm4gc3RzU3VjY2Vzc2Z1bFJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gVHJhbnNsYXRlIGVycm9yIHRvIE9BdXRoRXJyb3IuXG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBnYXhpb3NfMS5HYXhpb3NFcnJvciAmJiBlcnJvci5yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHRocm93ICgwLCBvYXV0aDJjb21tb25fMS5nZXRFcnJvckZyb21PQXV0aEVycm9yUmVzcG9uc2UpKGVycm9yLnJlc3BvbnNlLmRhdGEsIFxuICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIG90aGVyIGZpZWxkcyBmcm9tIHRoZSBvcmlnaW5hbCBlcnJvci5cbiAgICAgICAgICAgICAgICBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZXF1ZXN0IGNvdWxkIGZhaWwgYmVmb3JlIHRoZSBzZXJ2ZXIgcmVzcG9uZHMuXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuU3RzQ3JlZGVudGlhbHMgPSBTdHNDcmVkZW50aWFscztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnN0YW5jZXMsIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X3BlbmRpbmdBY2Nlc3NUb2tlbiwgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfaW50ZXJuYWxSZWZyZXNoQWNjZXNzVG9rZW5Bc3luYztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmFzZUV4dGVybmFsQWNjb3VudENsaWVudCA9IGV4cG9ydHMuREVGQVVMVF9VTklWRVJTRSA9IGV4cG9ydHMuQ0xPVURfUkVTT1VSQ0VfTUFOQUdFUiA9IGV4cG9ydHMuRVhURVJOQUxfQUNDT1VOVF9UWVBFID0gZXhwb3J0cy5FWFBJUkFUSU9OX1RJTUVfT0ZGU0VUID0gdm9pZCAwO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGF1dGhjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGhjbGllbnRcIik7XG5jb25zdCBzdHMgPSByZXF1aXJlKFwiLi9zdHNjcmVkZW50aWFsc1wiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuLyoqXG4gKiBUaGUgcmVxdWlyZWQgdG9rZW4gZXhjaGFuZ2UgZ3JhbnRfdHlwZTogcmZjODY5MyNzZWN0aW9uLTIuMVxuICovXG5jb25zdCBTVFNfR1JBTlRfVFlQRSA9ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTp0b2tlbi1leGNoYW5nZSc7XG4vKipcbiAqIFRoZSByZXF1ZXN0ZWQgdG9rZW4gZXhjaGFuZ2UgcmVxdWVzdGVkX3Rva2VuX3R5cGU6IHJmYzg2OTMjc2VjdGlvbi0yLjFcbiAqL1xuY29uc3QgU1RTX1JFUVVFU1RfVE9LRU5fVFlQRSA9ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6dG9rZW4tdHlwZTphY2Nlc3NfdG9rZW4nO1xuLyoqIFRoZSBkZWZhdWx0IE9BdXRoIHNjb3BlIHRvIHJlcXVlc3Qgd2hlbiBub25lIGlzIHByb3ZpZGVkLiAqL1xuY29uc3QgREVGQVVMVF9PQVVUSF9TQ09QRSA9ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2Nsb3VkLXBsYXRmb3JtJztcbi8qKiBEZWZhdWx0IGltcGVyc29uYXRlZCB0b2tlbiBsaWZlc3BhbiBpbiBzZWNvbmRzLiovXG5jb25zdCBERUZBVUxUX1RPS0VOX0xJRkVTUEFOID0gMzYwMDtcbi8qKlxuICogT2Zmc2V0IHRvIHRha2UgaW50byBhY2NvdW50IG5ldHdvcmsgZGVsYXlzIGFuZCBzZXJ2ZXIgY2xvY2sgc2tld3MuXG4gKi9cbmV4cG9ydHMuRVhQSVJBVElPTl9USU1FX09GRlNFVCA9IDUgKiA2MCAqIDEwMDA7XG4vKipcbiAqIFRoZSBjcmVkZW50aWFscyBKU09OIGZpbGUgdHlwZSBmb3IgZXh0ZXJuYWwgYWNjb3VudCBjbGllbnRzLlxuICogVGhlcmUgYXJlIDMgdHlwZXMgb2YgSlNPTiBjb25maWdzOlxuICogMS4gYXV0aG9yaXplZF91c2VyID0+IEdvb2dsZSBlbmQgdXNlciBjcmVkZW50aWFsXG4gKiAyLiBzZXJ2aWNlX2FjY291bnQgPT4gR29vZ2xlIHNlcnZpY2UgYWNjb3VudCBjcmVkZW50aWFsXG4gKiAzLiBleHRlcm5hbF9BY2NvdW50ID0+IG5vbi1HQ1Agc2VydmljZSAoZWcuIEFXUywgQXp1cmUsIEs4cylcbiAqL1xuZXhwb3J0cy5FWFRFUk5BTF9BQ0NPVU5UX1RZUEUgPSAnZXh0ZXJuYWxfYWNjb3VudCc7XG4vKipcbiAqIENsb3VkIHJlc291cmNlIG1hbmFnZXIgVVJMIHVzZWQgdG8gcmV0cmlldmUgcHJvamVjdCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIEJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQuY2xvdWRSZXNvdXJjZU1hbmFnZXJVUkx9IGluc3RlYWRcbiAqKi9cbmV4cG9ydHMuQ0xPVURfUkVTT1VSQ0VfTUFOQUdFUiA9ICdodHRwczovL2Nsb3VkcmVzb3VyY2VtYW5hZ2VyLmdvb2dsZWFwaXMuY29tL3YxL3Byb2plY3RzLyc7XG4vKiogVGhlIHdvcmtmb3JjZSBhdWRpZW5jZSBwYXR0ZXJuLiAqL1xuY29uc3QgV09SS0ZPUkNFX0FVRElFTkNFX1BBVFRFUk4gPSAnLy9pYW1cXFxcLmdvb2dsZWFwaXNcXFxcLmNvbS9sb2NhdGlvbnMvW14vXSsvd29ya2ZvcmNlUG9vbHMvW14vXSsvcHJvdmlkZXJzLy4rJztcbmNvbnN0IERFRkFVTFRfVE9LRU5fVVJMID0gJ2h0dHBzOi8vc3RzLnt1bml2ZXJzZURvbWFpbn0vdjEvdG9rZW4nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uLy4uLy4uL3BhY2thZ2UuanNvbicpO1xuLyoqXG4gKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gKi9cbnZhciBhdXRoY2xpZW50XzIgPSByZXF1aXJlKFwiLi9hdXRoY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiREVGQVVMVF9VTklWRVJTRVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXV0aGNsaWVudF8yLkRFRkFVTFRfVU5JVkVSU0U7IH0gfSk7XG4vKipcbiAqIEJhc2UgZXh0ZXJuYWwgYWNjb3VudCBjbGllbnQuIFRoaXMgaXMgdXNlZCB0byBpbnN0YW50aWF0ZSBBdXRoQ2xpZW50cyBmb3JcbiAqIGV4Y2hhbmdpbmcgZXh0ZXJuYWwgYWNjb3VudCBjcmVkZW50aWFscyBmb3IgR0NQIGFjY2VzcyB0b2tlbiBhbmQgYXV0aG9yaXppbmdcbiAqIHJlcXVlc3RzIHRvIEdDUCBBUElzLlxuICogVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50cyBjb21tb24gbG9naWMgZm9yIGV4Y2hhbmdpbmcgdmFyaW91cyB0eXBlIG9mXG4gKiBleHRlcm5hbCBjcmVkZW50aWFscyBmb3IgR0NQIGFjY2VzcyB0b2tlbi4gVGhlIGxvZ2ljIG9mIGRldGVybWluaW5nIGFuZFxuICogcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgY3JlZGVudGlhbCBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQgYW5kXG4gKiBjcmVkZW50aWFsX3NvdXJjZSB3aWxsIGJlIGxlZnQgZm9yIHRoZSBzdWJjbGFzc2VzLlxuICovXG5jbGFzcyBCYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50IGV4dGVuZHMgYXV0aGNsaWVudF8xLkF1dGhDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlIGEgQmFzZUV4dGVybmFsQWNjb3VudENsaWVudCBpbnN0YW5jZSB1c2luZyB0aGUgcHJvdmlkZWQgSlNPTlxuICAgICAqIG9iamVjdCBsb2FkZWQgZnJvbSBhbiBleHRlcm5hbCBhY2NvdW50IGNyZWRlbnRpYWxzIGZpbGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGV4dGVybmFsIGFjY291bnQgb3B0aW9ucyBvYmplY3QgdHlwaWNhbGx5IGxvYWRlZFxuICAgICAqICAgZnJvbSB0aGUgZXh0ZXJuYWwgYWNjb3VudCBKU09OIGNyZWRlbnRpYWwgZmlsZS4gVGhlIGNhbWVsQ2FzZWQgb3B0aW9uc1xuICAgICAqICAgYXJlIGFsaWFzZXMgZm9yIHRoZSBzbmFrZV9jYXNlZCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsT3B0aW9ucyAqKkRFUFJFQ0FURUQsIGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlXG4gICAgICogICBgb3B0aW9uc2AgcGFyYW1ldGVyLioqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYmVoYXZpb3IgY3VzdG9taXphdGlvbiBvcHRpb25zLlxuICAgICAqICAgVGhlc2UgY3VycmVudGx5IGN1c3RvbWl6ZSBleHBpcmF0aW9uIHRocmVzaG9sZCB0aW1lIGFuZCB3aGV0aGVyIHRvIHJldHJ5XG4gICAgICogICBvbiA0MDEvNDAzIEFQSSByZXF1ZXN0IGVycm9ycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKHsgLi4ub3B0aW9ucywgLi4uYWRkaXRpb25hbE9wdGlvbnMgfSk7XG4gICAgICAgIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHBlbmRpbmcgYWNjZXNzIHRva2VuIHJlcXVlc3QuIFVzZWQgZm9yIGNvbmN1cnJlbnQgY2FsbHMuXG4gICAgICAgICAqL1xuICAgICAgICBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9wZW5kaW5nQWNjZXNzVG9rZW4uc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBjb25zdCBvcHRzID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IG9wdHMuZ2V0KCd0eXBlJyk7XG4gICAgICAgIGlmICh0eXBlICYmIHR5cGUgIT09IGV4cG9ydHMuRVhURVJOQUxfQUNDT1VOVF9UWVBFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtleHBvcnRzLkVYVEVSTkFMX0FDQ09VTlRfVFlQRX1cIiB0eXBlIGJ1dCBgICtcbiAgICAgICAgICAgICAgICBgcmVjZWl2ZWQgXCIke29wdGlvbnMudHlwZX1cImApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudElkID0gb3B0cy5nZXQoJ2NsaWVudF9pZCcpO1xuICAgICAgICBjb25zdCBjbGllbnRTZWNyZXQgPSBvcHRzLmdldCgnY2xpZW50X3NlY3JldCcpO1xuICAgICAgICBjb25zdCB0b2tlblVybCA9IChfYSA9IG9wdHMuZ2V0KCd0b2tlbl91cmwnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UT0tFTl9VUkwucmVwbGFjZSgne3VuaXZlcnNlRG9tYWlufScsIHRoaXMudW5pdmVyc2VEb21haW4pO1xuICAgICAgICBjb25zdCBzdWJqZWN0VG9rZW5UeXBlID0gb3B0cy5nZXQoJ3N1YmplY3RfdG9rZW5fdHlwZScpO1xuICAgICAgICBjb25zdCB3b3JrZm9yY2VQb29sVXNlclByb2plY3QgPSBvcHRzLmdldCgnd29ya2ZvcmNlX3Bvb2xfdXNlcl9wcm9qZWN0Jyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybCA9IG9wdHMuZ2V0KCdzZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmwnKTtcbiAgICAgICAgY29uc3Qgc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uID0gb3B0cy5nZXQoJ3NlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uJyk7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvbkxpZmV0aW1lID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShzZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb24pLmdldCgndG9rZW5fbGlmZXRpbWVfc2Vjb25kcycpO1xuICAgICAgICB0aGlzLmNsb3VkUmVzb3VyY2VNYW5hZ2VyVVJMID0gbmV3IFVSTChvcHRzLmdldCgnY2xvdWRfcmVzb3VyY2VfbWFuYWdlcl91cmwnKSB8fFxuICAgICAgICAgICAgYGh0dHBzOi8vY2xvdWRyZXNvdXJjZW1hbmFnZXIuJHt0aGlzLnVuaXZlcnNlRG9tYWlufS92MS9wcm9qZWN0cy9gKTtcbiAgICAgICAgaWYgKGNsaWVudElkKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWVudEF1dGggPSB7XG4gICAgICAgICAgICAgICAgY29uZmlkZW50aWFsQ2xpZW50VHlwZTogJ2Jhc2ljJyxcbiAgICAgICAgICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgICAgICAgICBjbGllbnRTZWNyZXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RzQ3JlZGVudGlhbCA9IG5ldyBzdHMuU3RzQ3JlZGVudGlhbHModG9rZW5VcmwsIHRoaXMuY2xpZW50QXV0aCk7XG4gICAgICAgIHRoaXMuc2NvcGVzID0gb3B0cy5nZXQoJ3Njb3BlcycpIHx8IFtERUZBVUxUX09BVVRIX1NDT1BFXTtcbiAgICAgICAgdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuYXVkaWVuY2UgPSBvcHRzLmdldCgnYXVkaWVuY2UnKTtcbiAgICAgICAgdGhpcy5zdWJqZWN0VG9rZW5UeXBlID0gc3ViamVjdFRva2VuVHlwZTtcbiAgICAgICAgdGhpcy53b3JrZm9yY2VQb29sVXNlclByb2plY3QgPSB3b3JrZm9yY2VQb29sVXNlclByb2plY3Q7XG4gICAgICAgIGNvbnN0IHdvcmtmb3JjZUF1ZGllbmNlUGF0dGVybiA9IG5ldyBSZWdFeHAoV09SS0ZPUkNFX0FVRElFTkNFX1BBVFRFUk4pO1xuICAgICAgICBpZiAodGhpcy53b3JrZm9yY2VQb29sVXNlclByb2plY3QgJiZcbiAgICAgICAgICAgICF0aGlzLmF1ZGllbmNlLm1hdGNoKHdvcmtmb3JjZUF1ZGllbmNlUGF0dGVybikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0IHNob3VsZCBub3QgYmUgc2V0IGZvciBub24td29ya2ZvcmNlIHBvb2wgJyArXG4gICAgICAgICAgICAgICAgJ2NyZWRlbnRpYWxzLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsID0gc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsO1xuICAgICAgICB0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvbkxpZmV0aW1lID1cbiAgICAgICAgICAgIHNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvbkxpZmV0aW1lO1xuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25MaWZldGltZSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdMaWZldGltZVJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0xpZmV0aW1lUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvbkxpZmV0aW1lID0gREVGQVVMVF9UT0tFTl9MSUZFU1BBTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2plY3ROdW1iZXIgPSB0aGlzLmdldFByb2plY3ROdW1iZXIodGhpcy5hdWRpZW5jZSk7XG4gICAgICAgIHRoaXMuc3VwcGxpZXJDb250ZXh0ID0ge1xuICAgICAgICAgICAgYXVkaWVuY2U6IHRoaXMuYXVkaWVuY2UsXG4gICAgICAgICAgICBzdWJqZWN0VG9rZW5UeXBlOiB0aGlzLnN1YmplY3RUb2tlblR5cGUsXG4gICAgICAgICAgICB0cmFuc3BvcnRlcjogdGhpcy50cmFuc3BvcnRlcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqIFRoZSBzZXJ2aWNlIGFjY291bnQgZW1haWwgdG8gYmUgaW1wZXJzb25hdGVkLCBpZiBhdmFpbGFibGUuICovXG4gICAgZ2V0U2VydmljZUFjY291bnRFbWFpbCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25VcmwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvblVybC5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBQcmV2ZW50cyBET1MgYXR0YWNrcy5cbiAgICAgICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9nb29nbGUtYXV0aC1saWJyYXJ5LW5vZGVqcy9zZWN1cml0eS9jb2RlLXNjYW5uaW5nLzg0fVxuICAgICAgICAgICAgICAgICAqKi9cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVVJMIGlzIHRvbyBsb25nOiAke3RoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGFyc2UgZW1haWwgZnJvbSBVUkwuIFRoZSBmb3JtYWwgbG9va3MgYXMgZm9sbG93czpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vaWFtY3JlZGVudGlhbHMuZ29vZ2xlYXBpcy5jb20vdjEvcHJvamVjdHMvLS9zZXJ2aWNlQWNjb3VudHMvbmFtZUBwcm9qZWN0LWlkLmlhbS5nc2VydmljZWFjY291bnQuY29tOmdlbmVyYXRlQWNjZXNzVG9rZW5cbiAgICAgICAgICAgIGNvbnN0IHJlID0gL3NlcnZpY2VBY2NvdW50c1xcLyg/PGVtYWlsPlteOl0rKTpnZW5lcmF0ZUFjY2Vzc1Rva2VuJC87XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZS5leGVjKHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsKTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gcmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzdWx0Lmdyb3VwcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVtYWlsKSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIG1lY2hhbmlzbSB0byBpbmplY3QgR0NQIGFjY2VzcyB0b2tlbnMgZGlyZWN0bHkuXG4gICAgICogV2hlbiB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbCBleHBpcmVzLCBhIG5ldyBjcmVkZW50aWFsLCB1c2luZyB0aGVcbiAgICAgKiBleHRlcm5hbCBhY2NvdW50IG9wdGlvbnMsIGlzIHJldHJpZXZlZC5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIENyZWRlbnRpYWxzIG9iamVjdCB0byBzZXQgb24gdGhlIGN1cnJlbnQgY2xpZW50LlxuICAgICAqL1xuICAgIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHN1cGVyLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTtcbiAgICAgICAgdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbiA9IGNyZWRlbnRpYWxzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGN1cnJlbnQgR0NQIGFjY2VzcyB0b2tlblxuICAgICAqICAgcmVzcG9uc2UuIElmIHRoZSBjdXJyZW50IGNyZWRlbnRpYWwgaXMgZXhwaXJlZCwgYSBuZXcgb25lIGlzIHJldHJpZXZlZC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgLy8gSWYgY2FjaGVkIGFjY2VzcyB0b2tlbiBpcyB1bmF2YWlsYWJsZSBvciBleHBpcmVkLCBmb3JjZSByZWZyZXNoLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gfHwgdGhpcy5pc0V4cGlyZWQodGhpcy5jYWNoZWRBY2Nlc3NUb2tlbikpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXR1cm4gR0NQIGFjY2VzcyB0b2tlbiBpbiBHZXRBY2Nlc3NUb2tlblJlc3BvbnNlIGZvcm1hdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIHJlczogdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbi5yZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIGF1dGhlbnRpY2F0aW9uIGludGVyZmFjZS4gSXQgdGFrZXMgYW4gb3B0aW9uYWwgdXJsIHdoaWNoIHdoZW5cbiAgICAgKiBwcmVzZW50IGlzIHRoZSBlbmRwb2ludCBiZWluZyBhY2Nlc3NlZCwgYW5kIHJldHVybnMgYSBQcm9taXNlIHdoaWNoXG4gICAgICogcmVzb2x2ZXMgd2l0aCBhdXRob3JpemF0aW9uIGhlYWRlciBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBUaGUgcmVzdWx0IGhhcyB0aGUgZm9ybTpcbiAgICAgKiB7IEF1dGhvcml6YXRpb246ICdCZWFyZXIgPGFjY2Vzc190b2tlbl92YWx1ZT4nIH1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZXF1ZXN0SGVhZGVycygpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW5SZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlblJlc3BvbnNlLnRva2VufWAsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFNoYXJlZE1ldGFkYXRhSGVhZGVycyhoZWFkZXJzKTtcbiAgICB9XG4gICAgcmVxdWVzdChvcHRzLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEFzeW5jKG9wdHMpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByKSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUsIGUucmVzcG9uc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QXN5bmMob3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBwcm9qZWN0IElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gICAgICogICBjdXJyZW50IHdvcmtsb2FkIGlkZW50aXR5IHBvb2wgb3IgY3VycmVudCB3b3JrZm9yY2UgcG9vbCBpZlxuICAgICAqICAgZGV0ZXJtaW5hYmxlLiBGb3Igd29ya2ZvcmNlIHBvb2wgY3JlZGVudGlhbCwgaXQgcmV0dXJucyB0aGUgcHJvamVjdCBJRFxuICAgICAqICAgY29ycmVzcG9uZGluZyB0byB0aGUgd29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0LlxuICAgICAqICAgVGhpcyBpcyBpbnRyb2R1Y2VkIHRvIG1hdGNoIHRoZSBjdXJyZW50IHBhdHRlcm4gb2YgdXNpbmcgdGhlIEF1dGhcbiAgICAgKiAgIGxpYnJhcnk6XG4gICAgICogICBjb25zdCBwcm9qZWN0SWQgPSBhd2FpdCBhdXRoLmdldFByb2plY3RJZCgpO1xuICAgICAqICAgY29uc3QgdXJsID0gYGh0dHBzOi8vZG5zLmdvb2dsZWFwaXMuY29tL2Rucy92MS9wcm9qZWN0cy8ke3Byb2plY3RJZH1gO1xuICAgICAqICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnJlcXVlc3QoeyB1cmwgfSk7XG4gICAgICogICBUaGUgcmVzb3VyY2UgbWF5IG5vdCBoYXZlIHBlcm1pc3Npb25cbiAgICAgKiAgIChyZXNvdXJjZW1hbmFnZXIucHJvamVjdHMuZ2V0KSB0byBjYWxsIHRoaXMgQVBJIG9yIHRoZSByZXF1aXJlZFxuICAgICAqICAgc2NvcGVzIG1heSBub3QgYmUgc2VsZWN0ZWQ6XG4gICAgICogICBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vcmVzb3VyY2UtbWFuYWdlci9yZWZlcmVuY2UvcmVzdC92MS9wcm9qZWN0cy9nZXQjYXV0aG9yaXphdGlvbi1zY29wZXNcbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9qZWN0SWQoKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3ROdW1iZXIgPSB0aGlzLnByb2plY3ROdW1iZXIgfHwgdGhpcy53b3JrZm9yY2VQb29sVXNlclByb2plY3Q7XG4gICAgICAgIGlmICh0aGlzLnByb2plY3RJZCkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBwcm9qZWN0IElELlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2plY3ROdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIFByZWZlcmFibGUgbm90IHRvIHVzZSByZXF1ZXN0KCkgdG8gYXZvaWQgcmV0cmlhbCBwb2xpY2llcy5cbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgLi4uQmFzZUV4dGVybmFsQWNjb3VudENsaWVudC5SRVRSWV9DT05GSUcsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuY2xvdWRSZXNvdXJjZU1hbmFnZXJVUkwudG9TdHJpbmcoKX0ke3Byb2plY3ROdW1iZXJ9YCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0SWQgPSByZXNwb25zZS5kYXRhLnByb2plY3RJZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXV0aGVudGljYXRlcyB0aGUgcHJvdmlkZWQgSFRUUCByZXF1ZXN0LCBwcm9jZXNzZXMgaXQgYW5kIHJlc29sdmVzIHdpdGggdGhlXG4gICAgICogcmV0dXJuZWQgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIEhUVFAgcmVxdWVzdCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSByZUF1dGhSZXRyaWVkIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXR0ZW1wdCBpcyBhIHJldHJ5IGFmdGVyIGEgZmFpbGVkIGF0dGVtcHQgZHVlIHRvIGFuIGF1dGggZmFpbHVyZS5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXG4gICAgICovXG4gICAgYXN5bmMgcmVxdWVzdEFzeW5jKG9wdHMsIHJlQXV0aFJldHJpZWQgPSBmYWxzZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdEhlYWRlcnMoKTtcbiAgICAgICAgICAgIG9wdHMuaGVhZGVycyA9IG9wdHMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SGVhZGVycyAmJiByZXF1ZXN0SGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J10gPVxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RIZWFkZXJzICYmIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gZS5yZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1cztcbiAgICAgICAgICAgICAgICAvLyBSZXRyeSB0aGUgcmVxdWVzdCBmb3IgbWV0YWRhdGEgaWYgdGhlIGZvbGxvd2luZyBjcml0ZXJpYSBhcmUgdHJ1ZTpcbiAgICAgICAgICAgICAgICAvLyAtIFdlIGhhdmVuJ3QgYWxyZWFkeSByZXRyaWVkLiAgSXQgb25seSBtYWtlcyBzZW5zZSB0byByZXRyeSBvbmNlLlxuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlc3BvbnNlIHdhcyBhIDQwMSBvciBhIDQwM1xuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlcXVlc3QgZGlkbid0IHNlbmQgYSByZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIC8vIC0gZm9yY2VSZWZyZXNoT25GYWlsdXJlIGlzIHRydWVcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlYWRhYmxlU3RyZWFtID0gcmVzLmNvbmZpZy5kYXRhIGluc3RhbmNlb2Ygc3RyZWFtLlJlYWRhYmxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXV0aEVyciA9IHN0YXR1c0NvZGUgPT09IDQwMSB8fCBzdGF0dXNDb2RlID09PSA0MDM7XG4gICAgICAgICAgICAgICAgaWYgKCFyZUF1dGhSZXRyaWVkICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aEVyciAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNSZWFkYWJsZVN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVmcmVzaE9uRmFpbHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcXVlc3RBc3luYyhvcHRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yY2VzIHRva2VuIHJlZnJlc2gsIGV2ZW4gaWYgdW5leHBpcmVkIHRva2VucyBhcmUgY3VycmVudGx5IGNhY2hlZC5cbiAgICAgKiBFeHRlcm5hbCBjcmVkZW50aWFscyBhcmUgZXhjaGFuZ2VkIGZvciBHQ1AgYWNjZXNzIHRva2VucyB2aWEgdGhlIHRva2VuXG4gICAgICogZXhjaGFuZ2UgZW5kcG9pbnQgYW5kIG90aGVyIHNldHRpbmdzIHByb3ZpZGVkIGluIHRoZSBjbGllbnQgb3B0aW9uc1xuICAgICAqIG9iamVjdC5cbiAgICAgKiBJZiB0aGUgc2VydmljZV9hY2NvdW50X2ltcGVyc29uYXRpb25fdXJsIGlzIHByb3ZpZGVkLCBhbiBhZGRpdGlvbmFsXG4gICAgICogc3RlcCB0byBleGNoYW5nZSB0aGUgZXh0ZXJuYWwgYWNjb3VudCBHQ1AgYWNjZXNzIHRva2VuIGZvciBhIHNlcnZpY2VcbiAgICAgKiBhY2NvdW50IGltcGVyc29uYXRlZCB0b2tlbiBpcyBwZXJmb3JtZWQuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBmcmVzaCBHQ1AgYWNjZXNzIHRva2Vucy5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpIHtcbiAgICAgICAgLy8gVXNlIGFuIGV4aXN0aW5nIGFjY2VzcyB0b2tlbiByZXF1ZXN0LCBvciBjYWNoZSBhIG5ldyBvbmVcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9wZW5kaW5nQWNjZXNzVG9rZW4sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfcGVuZGluZ0FjY2Vzc1Rva2VuLCBcImZcIikgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnRlcm5hbFJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKS5jYWxsKHRoaXMpLCBcImZcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9wZW5kaW5nQWNjZXNzVG9rZW4sIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIGNsZWFyIHBlbmRpbmcgYWNjZXNzIHRva2VuIGZvciBmdXR1cmUgcmVxdWVzdHNcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Jhc2VFeHRlcm5hbEFjY291bnRDbGllbnRfcGVuZGluZ0FjY2Vzc1Rva2VuLCBudWxsLCBcImZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgd29ya2xvYWQgaWRlbnRpdHkgcG9vbCBwcm9qZWN0IG51bWJlciBpZiBpdCBpcyBkZXRlcm1pbmFibGVcbiAgICAgKiBmcm9tIHRoZSBhdWRpZW5jZSByZXNvdXJjZSBuYW1lLlxuICAgICAqIEBwYXJhbSBhdWRpZW5jZSBUaGUgU1RTIGF1ZGllbmNlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwcm9qZWN0IG51bWJlci5cbiAgICAgKiBAcmV0dXJuIFRoZSBwcm9qZWN0IG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIHdvcmtsb2FkIGlkZW50aXR5IHBvb2wsIGlmXG4gICAgICogICB0aGlzIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIFNUUyBhdWRpZW5jZSBmaWVsZC4gT3RoZXJ3aXNlLCBudWxsIGlzXG4gICAgICogICByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBnZXRQcm9qZWN0TnVtYmVyKGF1ZGllbmNlKSB7XG4gICAgICAgIC8vIFNUUyBhdWRpZW5jZSBwYXR0ZXJuOlxuICAgICAgICAvLyAvL2lhbS5nb29nbGVhcGlzLmNvbS9wcm9qZWN0cy8kUFJPSkVDVF9OVU1CRVIvbG9jYXRpb25zLy4uLlxuICAgICAgICBjb25zdCBtYXRjaCA9IGF1ZGllbmNlLm1hdGNoKC9cXC9wcm9qZWN0c1xcLyhbXi9dKykvKTtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGNoYW5nZXMgYW4gZXh0ZXJuYWwgYWNjb3VudCBHQ1AgYWNjZXNzIHRva2VuIGZvciBhIHNlcnZpY2VcbiAgICAgKiBhY2NvdW50IGltcGVyc29uYXRlZCBhY2Nlc3MgdG9rZW4gdXNpbmcgaWFtY3JlZGVudGlhbHNcbiAgICAgKiBHZW5lcmF0ZUFjY2Vzc1Rva2VuIEFQSS5cbiAgICAgKiBAcGFyYW0gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiB0byBleGNoYW5nZSBmb3IgYSBzZXJ2aWNlIGFjY291bnQgYWNjZXNzXG4gICAgICogICB0b2tlbi5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNlcnZpY2UgYWNjb3VudCBpbXBlcnNvbmF0ZWRcbiAgICAgKiAgIGNyZWRlbnRpYWxzIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEltcGVyc29uYXRlZEFjY2Vzc1Rva2VuKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICAuLi5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25VcmwsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBzY29wZTogdGhpcy5nZXRTY29wZXNBcnJheSgpLFxuICAgICAgICAgICAgICAgIGxpZmV0aW1lOiB0aGlzLnNlcnZpY2VBY2NvdW50SW1wZXJzb25hdGlvbkxpZmV0aW1lICsgJ3MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc1Jlc3BvbnNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogc3VjY2Vzc1Jlc3BvbnNlLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIElTTyBmb3JtYXQgdG8gdGltZXN0YW1wLlxuICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IG5ldyBEYXRlKHN1Y2Nlc3NSZXNwb25zZS5leHBpcmVUaW1lKS5nZXRUaW1lKCksXG4gICAgICAgICAgICByZXM6IHJlc3BvbnNlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIGFyZSBleHBpcmVkIG9yIG5vdC5cbiAgICAgKiBJZiB0aGVyZSBpcyBubyBleHBpcnkgdGltZSwgYXNzdW1lcyB0aGUgdG9rZW4gaXMgbm90IGV4cGlyZWQgb3IgZXhwaXJpbmcuXG4gICAgICogQHBhcmFtIGFjY2Vzc1Rva2VuIFRoZSBjcmVkZW50aWFscyB0byBjaGVjayBmb3IgZXhwaXJhdGlvbi5cbiAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGNyZWRlbnRpYWxzIGFyZSBleHBpcmVkIG9yIG5vdC5cbiAgICAgKi9cbiAgICBpc0V4cGlyZWQoYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiBhY2Nlc3NUb2tlbi5leHBpcnlfZGF0ZVxuICAgICAgICAgICAgPyBub3cgPj0gYWNjZXNzVG9rZW4uZXhwaXJ5X2RhdGUgLSB0aGlzLmVhZ2VyUmVmcmVzaFRocmVzaG9sZE1pbGxpc1xuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHJldHVybiBUaGUgbGlzdCBvZiBzY29wZXMgZm9yIHRoZSByZXF1ZXN0ZWQgR0NQIGFjY2VzcyB0b2tlbi5cbiAgICAgKi9cbiAgICBnZXRTY29wZXNBcnJheSgpIHtcbiAgICAgICAgLy8gU2luY2Ugc2NvcGVzIGNhbiBiZSBwcm92aWRlZCBhcyBzdHJpbmcgb3IgYXJyYXksIHRoZSB0eXBlIHNob3VsZFxuICAgICAgICAvLyBiZSBub3JtYWxpemVkLlxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NvcGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLnNjb3Blc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzIHx8IFtERUZBVUxUX09BVVRIX1NDT1BFXTtcbiAgICB9XG4gICAgZ2V0TWV0cmljc0hlYWRlclZhbHVlKCkge1xuICAgICAgICBjb25zdCBub2RlVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbi5yZXBsYWNlKC9edi8sICcnKTtcbiAgICAgICAgY29uc3Qgc2FJbXBlcnNvbmF0aW9uID0gdGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25VcmwgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbFNvdXJjZVR5cGUgPSB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlXG4gICAgICAgICAgICA/IHRoaXMuY3JlZGVudGlhbFNvdXJjZVR5cGVcbiAgICAgICAgICAgIDogJ3Vua25vd24nO1xuICAgICAgICByZXR1cm4gYGdsLW5vZGUvJHtub2RlVmVyc2lvbn0gYXV0aC8ke3BrZy52ZXJzaW9ufSBnb29nbGUtYnlvaWQtc2RrIHNvdXJjZS8ke2NyZWRlbnRpYWxTb3VyY2VUeXBlfSBzYS1pbXBlcnNvbmF0aW9uLyR7c2FJbXBlcnNvbmF0aW9ufSBjb25maWctbGlmZXRpbWUvJHt0aGlzLmNvbmZpZ0xpZmV0aW1lUmVxdWVzdGVkfWA7XG4gICAgfVxufVxuZXhwb3J0cy5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50ID0gQmFzZUV4dGVybmFsQWNjb3VudENsaWVudDtcbl9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X3BlbmRpbmdBY2Nlc3NUb2tlbiA9IG5ldyBXZWFrTWFwKCksIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50X2ludGVybmFsUmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBfQmFzZUV4dGVybmFsQWNjb3VudENsaWVudF9pbnRlcm5hbFJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCkge1xuICAgIC8vIFJldHJpZXZlIHRoZSBleHRlcm5hbCBjcmVkZW50aWFsLlxuICAgIGNvbnN0IHN1YmplY3RUb2tlbiA9IGF3YWl0IHRoaXMucmV0cmlldmVTdWJqZWN0VG9rZW4oKTtcbiAgICAvLyBDb25zdHJ1Y3QgdGhlIFNUUyBjcmVkZW50aWFscyBvcHRpb25zLlxuICAgIGNvbnN0IHN0c0NyZWRlbnRpYWxzT3B0aW9ucyA9IHtcbiAgICAgICAgZ3JhbnRUeXBlOiBTVFNfR1JBTlRfVFlQRSxcbiAgICAgICAgYXVkaWVuY2U6IHRoaXMuYXVkaWVuY2UsXG4gICAgICAgIHJlcXVlc3RlZFRva2VuVHlwZTogU1RTX1JFUVVFU1RfVE9LRU5fVFlQRSxcbiAgICAgICAgc3ViamVjdFRva2VuLFxuICAgICAgICBzdWJqZWN0VG9rZW5UeXBlOiB0aGlzLnN1YmplY3RUb2tlblR5cGUsXG4gICAgICAgIC8vIGdlbmVyYXRlQWNjZXNzVG9rZW4gcmVxdWlyZXMgdGhlIHByb3ZpZGVkIGFjY2VzcyB0b2tlbiB0byBoYXZlXG4gICAgICAgIC8vIHNjb3BlczpcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9pYW0gb3JcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9jbG91ZC1wbGF0Zm9ybVxuICAgICAgICAvLyBUaGUgbmV3IHNlcnZpY2UgYWNjb3VudCBhY2Nlc3MgdG9rZW4gc2NvcGVzIHdpbGwgbWF0Y2ggdGhlIHVzZXJcbiAgICAgICAgLy8gcHJvdmlkZWQgb25lcy5cbiAgICAgICAgc2NvcGU6IHRoaXMuc2VydmljZUFjY291bnRJbXBlcnNvbmF0aW9uVXJsXG4gICAgICAgICAgICA/IFtERUZBVUxUX09BVVRIX1NDT1BFXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjb3Blc0FycmF5KCksXG4gICAgfTtcbiAgICAvLyBFeGNoYW5nZSB0aGUgZXh0ZXJuYWwgY3JlZGVudGlhbHMgZm9yIGEgR0NQIGFjY2VzcyB0b2tlbi5cbiAgICAvLyBDbGllbnQgYXV0aCBpcyBwcmlvcml0aXplZCBvdmVyIHBhc3NpbmcgdGhlIHdvcmtmb3JjZVBvb2xVc2VyUHJvamVjdFxuICAgIC8vIHBhcmFtZXRlciBmb3IgU1RTIHRva2VuIGV4Y2hhbmdlLlxuICAgIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0gIXRoaXMuY2xpZW50QXV0aCAmJiB0aGlzLndvcmtmb3JjZVBvb2xVc2VyUHJvamVjdFxuICAgICAgICA/IHsgdXNlclByb2plY3Q6IHRoaXMud29ya2ZvcmNlUG9vbFVzZXJQcm9qZWN0IH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWRkaXRpb25hbEhlYWRlcnMgPSB7XG4gICAgICAgICd4LWdvb2ctYXBpLWNsaWVudCc6IHRoaXMuZ2V0TWV0cmljc0hlYWRlclZhbHVlKCksXG4gICAgfTtcbiAgICBjb25zdCBzdHNSZXNwb25zZSA9IGF3YWl0IHRoaXMuc3RzQ3JlZGVudGlhbC5leGNoYW5nZVRva2VuKHN0c0NyZWRlbnRpYWxzT3B0aW9ucywgYWRkaXRpb25hbEhlYWRlcnMsIGFkZGl0aW9uYWxPcHRpb25zKTtcbiAgICBpZiAodGhpcy5zZXJ2aWNlQWNjb3VudEltcGVyc29uYXRpb25VcmwpIHtcbiAgICAgICAgdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0SW1wZXJzb25hdGVkQWNjZXNzVG9rZW4oc3RzUmVzcG9uc2UuYWNjZXNzX3Rva2VuKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RzUmVzcG9uc2UuZXhwaXJlc19pbikge1xuICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGluIGNhY2hlZCBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gPSB7XG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHN0c1Jlc3BvbnNlLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHN0c1Jlc3BvbnNlLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgICAgICAgICAgcmVzOiBzdHNSZXNwb25zZS5yZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGluIGNhY2hlZCBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4gPSB7XG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHN0c1Jlc3BvbnNlLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIHJlczogc3RzUmVzcG9uc2UucmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBTYXZlIGNyZWRlbnRpYWxzLlxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY3JlZGVudGlhbHMsIHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4pO1xuICAgIGRlbGV0ZSB0aGlzLmNyZWRlbnRpYWxzLnJlcztcbiAgICAvLyBUcmlnZ2VyIHRva2VucyBldmVudCB0byBub3RpZnkgZXh0ZXJuYWwgbGlzdGVuZXJzLlxuICAgIHRoaXMuZW1pdCgndG9rZW5zJywge1xuICAgICAgICByZWZyZXNoX3Rva2VuOiBudWxsLFxuICAgICAgICBleHBpcnlfZGF0ZTogdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbi5leHBpcnlfZGF0ZSxcbiAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbixcbiAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgIGlkX3Rva2VuOiBudWxsLFxuICAgIH0pO1xuICAgIC8vIFJldHVybiB0aGUgY2FjaGVkIGFjY2VzcyB0b2tlbi5cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbjtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjQgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG52YXIgX2EsIF9iLCBfYztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRmlsZVN1YmplY3RUb2tlblN1cHBsaWVyID0gdm9pZCAwO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcInV0aWxcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbi8vIGZzLnJlYWRmaWxlIGlzIHVuZGVmaW5lZCBpbiBicm93c2VyIGthcm1hIHRlc3RzIGNhdXNpbmdcbi8vIGBucG0gcnVuIGJyb3dzZXItdGVzdGAgdG8gZmFpbCBhcyB0ZXN0Lm9hdXRoMi50cyBpbXBvcnRzIHRoaXMgZmlsZSB2aWFcbi8vIHNyYy9pbmRleC50cy5cbi8vIEZhbGxiYWNrIHRvIHZvaWQgZnVuY3Rpb24gdG8gYXZvaWQgcHJvbWlzaWZ5IHRocm93aW5nIGEgVHlwZUVycm9yLlxuY29uc3QgcmVhZEZpbGUgPSAoMCwgdXRpbF8xLnByb21pc2lmeSkoKF9hID0gZnMucmVhZEZpbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgoKSA9PiB7IH0pKTtcbmNvbnN0IHJlYWxwYXRoID0gKDAsIHV0aWxfMS5wcm9taXNpZnkpKChfYiA9IGZzLnJlYWxwYXRoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAoKCkgPT4geyB9KSk7XG5jb25zdCBsc3RhdCA9ICgwLCB1dGlsXzEucHJvbWlzaWZ5KSgoX2MgPSBmcy5sc3RhdCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogKCgpID0+IHsgfSkpO1xuLyoqXG4gKiBJbnRlcm5hbCBzdWJqZWN0IHRva2VuIHN1cHBsaWVyIGltcGxlbWVudGF0aW9uIHVzZWQgd2hlbiBhIGZpbGUgbG9jYXRpb25cbiAqIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbiB1c2VkIHRvIGJ1aWxkIGFuIHtAbGluayBJZGVudGl0eVBvb2xDbGllbnR9XG4gKi9cbmNsYXNzIEZpbGVTdWJqZWN0VG9rZW5TdXBwbGllciB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGEgbmV3IGZpbGUgYmFzZWQgc3ViamVjdCB0b2tlbiBzdXBwbGllci5cbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgZmlsZSBzdWJqZWN0IHRva2VuIHN1cHBsaWVyIG9wdGlvbnMgdG8gYnVpbGQgdGhlIHN1cHBsaWVyXG4gICAgICogICB3aXRoLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgdGhpcy5maWxlUGF0aCA9IG9wdHMuZmlsZVBhdGg7XG4gICAgICAgIHRoaXMuZm9ybWF0VHlwZSA9IG9wdHMuZm9ybWF0VHlwZTtcbiAgICAgICAgdGhpcy5zdWJqZWN0VG9rZW5GaWVsZE5hbWUgPSBvcHRzLnN1YmplY3RUb2tlbkZpZWxkTmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3ViamVjdCB0b2tlbiBzdG9yZWQgYXQgdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAcGFyYW0gY29udGV4dCB7QGxpbmsgRXh0ZXJuYWxBY2NvdW50U3VwcGxpZXJDb250ZXh0fSBmcm9tIHRoZSBjYWxsaW5nXG4gICAgICogICB7QGxpbmsgSWRlbnRpdHlQb29sQ2xpZW50fSwgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBhdWRpZW5jZSBhbmQgc3ViamVjdFxuICAgICAqICAgdG9rZW4gdHlwZSBmb3IgdGhlIGV4dGVybmFsIGFjY291bnQgaWRlbnRpdHkuIE5vdCB1c2VkLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFN1YmplY3RUb2tlbihjb250ZXh0KSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGZpbGUgYXQgdGhlIHBhdGguIGxzdGF0U3luYyB3aWxsIHRocm93IGlmIHRoZXJlIGlzXG4gICAgICAgIC8vIG5vdGhpbmcgdGhlcmUuXG4gICAgICAgIGxldCBwYXJzZWRGaWxlUGF0aCA9IHRoaXMuZmlsZVBhdGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIHBhdGggdG8gYWN0dWFsIGZpbGUgaW4gY2FzZSBvZiBzeW1saW5rLiBFeHBlY3QgYSB0aHJvd24gZXJyb3JcbiAgICAgICAgICAgIC8vIGlmIG5vdCByZXNvbHZhYmxlLlxuICAgICAgICAgICAgcGFyc2VkRmlsZVBhdGggPSBhd2FpdCByZWFscGF0aChwYXJzZWRGaWxlUGF0aCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBsc3RhdChwYXJzZWRGaWxlUGF0aCkpLmlzRmlsZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBgVGhlIGZpbGUgYXQgJHtwYXJzZWRGaWxlUGF0aH0gZG9lcyBub3QgZXhpc3QsIG9yIGl0IGlzIG5vdCBhIGZpbGUuICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3ViamVjdFRva2VuO1xuICAgICAgICBjb25zdCByYXdUZXh0ID0gYXdhaXQgcmVhZEZpbGUocGFyc2VkRmlsZVBhdGgsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0VHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBzdWJqZWN0VG9rZW4gPSByYXdUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZm9ybWF0VHlwZSA9PT0gJ2pzb24nICYmIHRoaXMuc3ViamVjdFRva2VuRmllbGROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShyYXdUZXh0KTtcbiAgICAgICAgICAgIHN1YmplY3RUb2tlbiA9IGpzb25bdGhpcy5zdWJqZWN0VG9rZW5GaWVsZE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3ViamVjdFRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSB0aGUgc3ViamVjdF90b2tlbiBmcm9tIHRoZSBjcmVkZW50aWFsX3NvdXJjZSBmaWxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1YmplY3RUb2tlbjtcbiAgICB9XG59XG5leHBvcnRzLkZpbGVTdWJqZWN0VG9rZW5TdXBwbGllciA9IEZpbGVTdWJqZWN0VG9rZW5TdXBwbGllcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVXJsU3ViamVjdFRva2VuU3VwcGxpZXIgPSB2b2lkIDA7XG4vKipcbiAqIEludGVybmFsIHN1YmplY3QgdG9rZW4gc3VwcGxpZXIgaW1wbGVtZW50YXRpb24gdXNlZCB3aGVuIGEgVVJMXG4gKiBpcyBjb25maWd1cmVkIGluIHRoZSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBidWlsZCBhbiB7QGxpbmsgSWRlbnRpdHlQb29sQ2xpZW50fVxuICovXG5jbGFzcyBVcmxTdWJqZWN0VG9rZW5TdXBwbGllciB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGEgVVJMIHN1YmplY3QgdG9rZW4gc3VwcGxpZXIuXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIFVSTCBzdWJqZWN0IHRva2VuIHN1cHBsaWVyIG9wdGlvbnMgdG8gYnVpbGQgdGhlIHN1cHBsaWVyIHdpdGguXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICB0aGlzLnVybCA9IG9wdHMudXJsO1xuICAgICAgICB0aGlzLmZvcm1hdFR5cGUgPSBvcHRzLmZvcm1hdFR5cGU7XG4gICAgICAgIHRoaXMuc3ViamVjdFRva2VuRmllbGROYW1lID0gb3B0cy5zdWJqZWN0VG9rZW5GaWVsZE5hbWU7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG9wdHMuaGVhZGVycztcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsR2F4aW9zT3B0aW9ucyA9IG9wdHMuYWRkaXRpb25hbEdheGlvc09wdGlvbnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIFVSTCBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0b3IgYW5kIHJlc29sdmVzXG4gICAgICogd2l0aCB0aGUgcmV0dXJuZWQgZXh0ZXJuYWwgc3ViamVjdCB0b2tlbi5cbiAgICAgKiBAcGFyYW0gY29udGV4dCB7QGxpbmsgRXh0ZXJuYWxBY2NvdW50U3VwcGxpZXJDb250ZXh0fSBmcm9tIHRoZSBjYWxsaW5nXG4gICAgICogICB7QGxpbmsgSWRlbnRpdHlQb29sQ2xpZW50fSwgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBhdWRpZW5jZSBhbmQgc3ViamVjdFxuICAgICAqICAgdG9rZW4gdHlwZSBmb3IgdGhlIGV4dGVybmFsIGFjY291bnQgaWRlbnRpdHkuIE5vdCB1c2VkLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFN1YmplY3RUb2tlbihjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmFkZGl0aW9uYWxHYXhpb3NPcHRpb25zLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IHRoaXMuZm9ybWF0VHlwZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHN1YmplY3RUb2tlbjtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0VHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnRleHQudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgICAgIHN1YmplY3RUb2tlbiA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5mb3JtYXRUeXBlID09PSAnanNvbicgJiYgdGhpcy5zdWJqZWN0VG9rZW5GaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udGV4dC50cmFuc3BvcnRlci5yZXF1ZXN0KG9wdHMpO1xuICAgICAgICAgICAgc3ViamVjdFRva2VuID0gcmVzcG9uc2UuZGF0YVt0aGlzLnN1YmplY3RUb2tlbkZpZWxkTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdWJqZWN0VG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIHRoZSBzdWJqZWN0X3Rva2VuIGZyb20gdGhlIGNyZWRlbnRpYWxfc291cmNlIFVSTCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWJqZWN0VG9rZW47XG4gICAgfVxufVxuZXhwb3J0cy5VcmxTdWJqZWN0VG9rZW5TdXBwbGllciA9IFVybFN1YmplY3RUb2tlblN1cHBsaWVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JZGVudGl0eVBvb2xDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBiYXNlZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2Jhc2VleHRlcm5hbGNsaWVudFwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuY29uc3QgZmlsZXN1YmplY3R0b2tlbnN1cHBsaWVyXzEgPSByZXF1aXJlKFwiLi9maWxlc3ViamVjdHRva2Vuc3VwcGxpZXJcIik7XG5jb25zdCB1cmxzdWJqZWN0dG9rZW5zdXBwbGllcl8xID0gcmVxdWlyZShcIi4vdXJsc3ViamVjdHRva2Vuc3VwcGxpZXJcIik7XG4vKipcbiAqIERlZmluZXMgdGhlIFVybC1zb3VyY2VkIGFuZCBmaWxlLXNvdXJjZWQgZXh0ZXJuYWwgYWNjb3VudCBjbGllbnRzIG1haW5seVxuICogdXNlZCBmb3IgSzhzIGFuZCBBenVyZSB3b3JrbG9hZHMuXG4gKi9cbmNsYXNzIElkZW50aXR5UG9vbENsaWVudCBleHRlbmRzIGJhc2VleHRlcm5hbGNsaWVudF8xLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlIGFuIElkZW50aXR5UG9vbENsaWVudCBpbnN0YW5jZSB1c2luZyB0aGUgcHJvdmlkZWQgSlNPTlxuICAgICAqIG9iamVjdCBsb2FkZWQgZnJvbSBhbiBleHRlcm5hbCBhY2NvdW50IGNyZWRlbnRpYWxzIGZpbGUuXG4gICAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIHRoZSBjcmVkZW50aWFsIGlzIG5vdCBhIHZhbGlkIGZpbGUtc291cmNlZCBvclxuICAgICAqIHVybC1zb3VyY2VkIGNyZWRlbnRpYWwgb3IgYSB3b3JrZm9yY2UgcG9vbCB1c2VyIHByb2plY3QgaXMgcHJvdmlkZWRcbiAgICAgKiB3aXRoIGEgbm9uIHdvcmtmb3JjZSBhdWRpZW5jZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgZXh0ZXJuYWwgYWNjb3VudCBvcHRpb25zIG9iamVjdCB0eXBpY2FsbHkgbG9hZGVkXG4gICAgICogICBmcm9tIHRoZSBleHRlcm5hbCBhY2NvdW50IEpTT04gY3JlZGVudGlhbCBmaWxlLiBUaGUgY2FtZWxDYXNlZCBvcHRpb25zXG4gICAgICogICBhcmUgYWxpYXNlcyBmb3IgdGhlIHNuYWtlX2Nhc2VkIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIGFkZGl0aW9uYWxPcHRpb25zICoqREVQUkVDQVRFRCwgYWxsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgKiAgIGBvcHRpb25zYCBwYXJhbWV0ZXIuKiogT3B0aW9uYWwgYWRkaXRpb25hbCBiZWhhdmlvciBjdXN0b21pemF0aW9uIG9wdGlvbnMuXG4gICAgICogICBUaGVzZSBjdXJyZW50bHkgY3VzdG9taXplIGV4cGlyYXRpb24gdGhyZXNob2xkIHRpbWUgYW5kIHdoZXRoZXIgdG8gcmV0cnlcbiAgICAgKiAgIG9uIDQwMS80MDMgQVBJIHJlcXVlc3QgZXJyb3JzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxTb3VyY2UgPSBvcHRzLmdldCgnY3JlZGVudGlhbF9zb3VyY2UnKTtcbiAgICAgICAgY29uc3Qgc3ViamVjdFRva2VuU3VwcGxpZXIgPSBvcHRzLmdldCgnc3ViamVjdF90b2tlbl9zdXBwbGllcicpO1xuICAgICAgICAvLyBWYWxpZGF0ZSBjcmVkZW50aWFsIHNvdXJjaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGlmICghY3JlZGVudGlhbFNvdXJjZSAmJiAhc3ViamVjdFRva2VuU3VwcGxpZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSBjcmVkZW50aWFsIHNvdXJjZSBvciBzdWJqZWN0IHRva2VuIHN1cHBsaWVyIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjcmVkZW50aWFsU291cmNlICYmIHN1YmplY3RUb2tlblN1cHBsaWVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIG9mIGNyZWRlbnRpYWwgc291cmNlIG9yIHN1YmplY3QgdG9rZW4gc3VwcGxpZXIgY2FuIGJlIHNwZWNpZmllZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ViamVjdFRva2VuU3VwcGxpZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdFRva2VuU3VwcGxpZXIgPSBzdWJqZWN0VG9rZW5TdXBwbGllcjtcbiAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbFNvdXJjZVR5cGUgPSAncHJvZ3JhbW1hdGljJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWRlbnRpYWxTb3VyY2VPcHRzID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKShjcmVkZW50aWFsU291cmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdE9wdHMgPSAoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKGNyZWRlbnRpYWxTb3VyY2VPcHRzLmdldCgnZm9ybWF0JykpO1xuICAgICAgICAgICAgLy8gVGV4dCBpcyB0aGUgZGVmYXVsdCBmb3JtYXQgdHlwZS5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdFR5cGUgPSBmb3JtYXRPcHRzLmdldCgndHlwZScpIHx8ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdFN1YmplY3RUb2tlbkZpZWxkTmFtZSA9IGZvcm1hdE9wdHMuZ2V0KCdzdWJqZWN0X3Rva2VuX2ZpZWxkX25hbWUnKTtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUeXBlICE9PSAnanNvbicgJiYgZm9ybWF0VHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNyZWRlbnRpYWxfc291cmNlIGZvcm1hdCBcIiR7Zm9ybWF0VHlwZX1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdFR5cGUgPT09ICdqc29uJyAmJiAhZm9ybWF0U3ViamVjdFRva2VuRmllbGROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHN1YmplY3RfdG9rZW5fZmllbGRfbmFtZSBmb3IgSlNPTiBjcmVkZW50aWFsX3NvdXJjZSBmb3JtYXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ2ZpbGUnKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGNyZWRlbnRpYWxTb3VyY2VPcHRzLmdldCgndXJsJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY3JlZGVudGlhbFNvdXJjZU9wdHMuZ2V0KCdoZWFkZXJzJyk7XG4gICAgICAgICAgICBpZiAoZmlsZSAmJiB1cmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIElkZW50aXR5IFBvb2wgXCJjcmVkZW50aWFsX3NvdXJjZVwiIHByb3ZpZGVkLCBtdXN0IGJlIGVpdGhlciBmaWxlIG9yIHVybC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpbGUgJiYgIXVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbFNvdXJjZVR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0VG9rZW5TdXBwbGllciA9IG5ldyBmaWxlc3ViamVjdHRva2Vuc3VwcGxpZXJfMS5GaWxlU3ViamVjdFRva2VuU3VwcGxpZXIoe1xuICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aDogZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0VHlwZTogZm9ybWF0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdFRva2VuRmllbGROYW1lOiBmb3JtYXRTdWJqZWN0VG9rZW5GaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZmlsZSAmJiB1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlID0gJ3VybCc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0VG9rZW5TdXBwbGllciA9IG5ldyB1cmxzdWJqZWN0dG9rZW5zdXBwbGllcl8xLlVybFN1YmplY3RUb2tlblN1cHBsaWVyKHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFR5cGU6IGZvcm1hdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3RUb2tlbkZpZWxkTmFtZTogZm9ybWF0U3ViamVjdFRva2VuRmllbGROYW1lLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsR2F4aW9zT3B0aW9uczogSWRlbnRpdHlQb29sQ2xpZW50LlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmFsaWQgSWRlbnRpdHkgUG9vbCBcImNyZWRlbnRpYWxfc291cmNlXCIgcHJvdmlkZWQsIG11c3QgYmUgZWl0aGVyIGZpbGUgb3IgdXJsLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgZXh0ZXJuYWwgc3ViamVjdCB0b2tlbiBpcyBuZWVkZWQgdG8gYmUgZXhjaGFuZ2VkIGZvciBhIEdDUFxuICAgICAqIGFjY2VzcyB0b2tlbiB2aWEgR0NQIFNUUyBlbmRwb2ludC4gR2V0cyBhIHN1YmplY3QgdG9rZW4gYnkgY2FsbGluZ1xuICAgICAqIHRoZSBjb25maWd1cmVkIHtAbGluayBTdWJqZWN0VG9rZW5TdXBwbGllcn1cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGV4dGVybmFsIHN1YmplY3QgdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgcmV0cmlldmVTdWJqZWN0VG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YmplY3RUb2tlblN1cHBsaWVyLmdldFN1YmplY3RUb2tlbih0aGlzLnN1cHBsaWVyQ29udGV4dCk7XG4gICAgfVxufVxuZXhwb3J0cy5JZGVudGl0eVBvb2xDbGllbnQgPSBJZGVudGl0eVBvb2xDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF3c1JlcXVlc3RTaWduZXIgPSB2b2lkIDA7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCIuLi9jcnlwdG8vY3J5cHRvXCIpO1xuLyoqIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0IHNpZ25pbmcgYWxnb3JpdGhtIGlkZW50aWZpZXIuICAqL1xuY29uc3QgQVdTX0FMR09SSVRITSA9ICdBV1M0LUhNQUMtU0hBMjU2Jztcbi8qKlxuICogVGhlIHRlcm1pbmF0aW9uIHN0cmluZyBmb3IgdGhlIEFXUyBjcmVkZW50aWFsIHNjb3BlIHZhbHVlIGFzIGRlZmluZWQgaW5cbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWd2NC1jcmVhdGUtc3RyaW5nLXRvLXNpZ24uaHRtbFxuICovXG5jb25zdCBBV1NfUkVRVUVTVF9UWVBFID0gJ2F3czRfcmVxdWVzdCc7XG4vKipcbiAqIEltcGxlbWVudHMgYW4gQVdTIEFQSSByZXF1ZXN0IHNpZ25lciBiYXNlZCBvbiB0aGUgQVdTIFNpZ25hdHVyZSBWZXJzaW9uIDRcbiAqIHNpZ25pbmcgcHJvY2Vzcy5cbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWduYXR1cmUtdmVyc2lvbi00Lmh0bWxcbiAqL1xuY2xhc3MgQXdzUmVxdWVzdFNpZ25lciB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFuIEFXUyBBUEkgcmVxdWVzdCBzaWduZXIgdXNlZCB0byBzZW5kIGF1dGhlbnRpY2F0ZWQgc2lnbmVkXG4gICAgICogcmVxdWVzdHMgdG8gQVdTIEFQSXMgYmFzZWQgb24gdGhlIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0IHNpZ25pbmcgcHJvY2Vzcy5cbiAgICAgKiBUaGlzIGFsc28gcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gZ2VuZXJhdGUgdGhlIHNpZ25lZCByZXF1ZXN0IHdpdGhvdXRcbiAgICAgKiBzZW5kaW5nIGl0LlxuICAgICAqIEBwYXJhbSBnZXRDcmVkZW50aWFscyBBIG1lY2hhbmlzbSB0byByZXRyaWV2ZSBBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHNcbiAgICAgKiAgIHdoZW4gbmVlZGVkLlxuICAgICAqIEBwYXJhbSByZWdpb24gVGhlIEFXUyByZWdpb24gdG8gdXNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGdldENyZWRlbnRpYWxzLCByZWdpb24pIHtcbiAgICAgICAgdGhpcy5nZXRDcmVkZW50aWFscyA9IGdldENyZWRlbnRpYWxzO1xuICAgICAgICB0aGlzLnJlZ2lvbiA9IHJlZ2lvbjtcbiAgICAgICAgdGhpcy5jcnlwdG8gPSAoMCwgY3J5cHRvXzEuY3JlYXRlQ3J5cHRvKSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgdGhlIHNpZ25lZCByZXF1ZXN0IGZvciB0aGUgcHJvdmlkZWQgSFRUUCByZXF1ZXN0IGZvciBjYWxsaW5nXG4gICAgICogYW4gQVdTIEFQSS4gVGhpcyBmb2xsb3dzIHRoZSBzdGVwcyBkZXNjcmliZWQgYXQ6XG4gICAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3NpZ3Y0X3NpZ25pbmcuaHRtbFxuICAgICAqIEBwYXJhbSBhbXpPcHRpb25zIFRoZSBBV1MgcmVxdWVzdCBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBzaWduZWQuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBHYXhpb3NPcHRpb25zIGNvbnRhaW5pbmcgdGhlXG4gICAgICogICBzaWduZWQgSFRUUCByZXF1ZXN0IHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UmVxdWVzdE9wdGlvbnMoYW16T3B0aW9ucykge1xuICAgICAgICBpZiAoIWFtek9wdGlvbnMudXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1widXJsXCIgaXMgcmVxdWlyZWQgaW4gXCJhbXpPcHRpb25zXCInKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJpbmdpZnkgSlNPTiByZXF1ZXN0cy4gVGhpcyB3aWxsIGJlIHNldCBpbiB0aGUgcmVxdWVzdCBib2R5IG9mIHRoZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgc2lnbmVkIHJlcXVlc3QuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkRGF0YSA9IHR5cGVvZiBhbXpPcHRpb25zLmRhdGEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGFtek9wdGlvbnMuZGF0YSlcbiAgICAgICAgICAgIDogYW16T3B0aW9ucy5kYXRhO1xuICAgICAgICBjb25zdCB1cmwgPSBhbXpPcHRpb25zLnVybDtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gYW16T3B0aW9ucy5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID0gYW16T3B0aW9ucy5ib2R5IHx8IHJlcXVlc3RQYXlsb2FkRGF0YTtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbEFtekhlYWRlcnMgPSBhbXpPcHRpb25zLmhlYWRlcnM7XG4gICAgICAgIGNvbnN0IGF3c1NlY3VyaXR5Q3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKCk7XG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgY29uc3QgaGVhZGVyTWFwID0gYXdhaXQgZ2VuZXJhdGVBdXRoZW50aWNhdGlvbkhlYWRlck1hcCh7XG4gICAgICAgICAgICBjcnlwdG86IHRoaXMuY3J5cHRvLFxuICAgICAgICAgICAgaG9zdDogdXJpLmhvc3QsXG4gICAgICAgICAgICBjYW5vbmljYWxVcmk6IHVyaS5wYXRobmFtZSxcbiAgICAgICAgICAgIGNhbm9uaWNhbFF1ZXJ5c3RyaW5nOiB1cmkuc2VhcmNoLnN1YnN0cigxKSxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgICAgICBzZWN1cml0eUNyZWRlbnRpYWxzOiBhd3NTZWN1cml0eUNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgcmVxdWVzdFBheWxvYWQsXG4gICAgICAgICAgICBhZGRpdGlvbmFsQW16SGVhZGVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFwcGVuZCBhZGRpdGlvbmFsIG9wdGlvbmFsIGhlYWRlcnMsIGVnLiBYLUFtei1UYXJnZXQsIENvbnRlbnQtVHlwZSwgZXRjLlxuICAgICAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgLy8gQWRkIHgtYW16LWRhdGUgaWYgYXZhaWxhYmxlLlxuICAgICAgICBoZWFkZXJNYXAuYW16RGF0ZSA/IHsgJ3gtYW16LWRhdGUnOiBoZWFkZXJNYXAuYW16RGF0ZSB9IDoge30sIHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGhlYWRlck1hcC5hdXRob3JpemF0aW9uSGVhZGVyLFxuICAgICAgICAgICAgaG9zdDogdXJpLmhvc3QsXG4gICAgICAgIH0sIGFkZGl0aW9uYWxBbXpIZWFkZXJzIHx8IHt9KTtcbiAgICAgICAgaWYgKGF3c1NlY3VyaXR5Q3JlZGVudGlhbHMudG9rZW4pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywge1xuICAgICAgICAgICAgICAgICd4LWFtei1zZWN1cml0eS10b2tlbic6IGF3c1NlY3VyaXR5Q3JlZGVudGlhbHMudG9rZW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhd3NTaWduZWRSZXEgPSB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdFBheWxvYWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhd3NTaWduZWRSZXEuYm9keSA9IHJlcXVlc3RQYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd3NTaWduZWRSZXE7XG4gICAgfVxufVxuZXhwb3J0cy5Bd3NSZXF1ZXN0U2lnbmVyID0gQXdzUmVxdWVzdFNpZ25lcjtcbi8qKlxuICogQ3JlYXRlcyB0aGUgSE1BQy1TSEEyNTYgaGFzaCBvZiB0aGUgcHJvdmlkZWQgbWVzc2FnZSB1c2luZyB0aGVcbiAqIHByb3ZpZGVkIGtleS5cbiAqXG4gKiBAcGFyYW0gY3J5cHRvIFRoZSBjcnlwdG8gaW5zdGFuY2UgdXNlZCB0byBmYWNpbGl0YXRlIGNyeXB0b2dyYXBoaWNcbiAqICAgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSBrZXkgVGhlIEhNQUMtU0hBMjU2IGtleSB0byB1c2UuXG4gKiBAcGFyYW0gbXNnIFRoZSBtZXNzYWdlIHRvIGhhc2guXG4gKiBAcmV0dXJuIFRoZSBjb21wdXRlZCBoYXNoIGJ5dGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBzaWduKGNyeXB0bywga2V5LCBtc2cpIHtcbiAgICByZXR1cm4gYXdhaXQgY3J5cHRvLnNpZ25XaXRoSG1hY1NoYTI1NihrZXksIG1zZyk7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNpZ25pbmcga2V5IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBzaWduYXR1cmUgZm9yXG4gKiBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCBiYXNlZCBvbjpcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWd2NC1jYWxjdWxhdGUtc2lnbmF0dXJlLmh0bWxcbiAqXG4gKiBAcGFyYW0gY3J5cHRvIFRoZSBjcnlwdG8gaW5zdGFuY2UgdXNlZCB0byBmYWNpbGl0YXRlIGNyeXB0b2dyYXBoaWNcbiAqICAgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSBrZXkgVGhlIEFXUyBzZWNyZXQgYWNjZXNzIGtleS5cbiAqIEBwYXJhbSBkYXRlU3RhbXAgVGhlICclWSVtJWQnIGRhdGUgZm9ybWF0LlxuICogQHBhcmFtIHJlZ2lvbiBUaGUgQVdTIHJlZ2lvbi5cbiAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgQVdTIHNlcnZpY2UgbmFtZSwgZWcuIHN0cy5cbiAqIEByZXR1cm4gVGhlIHNpZ25pbmcga2V5IGJ5dGVzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRTaWduaW5nS2V5KGNyeXB0bywga2V5LCBkYXRlU3RhbXAsIHJlZ2lvbiwgc2VydmljZU5hbWUpIHtcbiAgICBjb25zdCBrRGF0ZSA9IGF3YWl0IHNpZ24oY3J5cHRvLCBgQVdTNCR7a2V5fWAsIGRhdGVTdGFtcCk7XG4gICAgY29uc3Qga1JlZ2lvbiA9IGF3YWl0IHNpZ24oY3J5cHRvLCBrRGF0ZSwgcmVnaW9uKTtcbiAgICBjb25zdCBrU2VydmljZSA9IGF3YWl0IHNpZ24oY3J5cHRvLCBrUmVnaW9uLCBzZXJ2aWNlTmFtZSk7XG4gICAgY29uc3Qga1NpZ25pbmcgPSBhd2FpdCBzaWduKGNyeXB0bywga1NlcnZpY2UsICdhd3M0X3JlcXVlc3QnKTtcbiAgICByZXR1cm4ga1NpZ25pbmc7XG59XG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYXV0aGVudGljYXRpb24gaGVhZGVyIG1hcCBuZWVkZWQgZm9yIGdlbmVyYXRpbmcgdGhlIEFXU1xuICogU2lnbmF0dXJlIFZlcnNpb24gNCBzaWduZWQgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9uIFRoZSBvcHRpb25zIG5lZWRlZCB0byBjb21wdXRlIHRoZSBhdXRoZW50aWNhdGlvbiBoZWFkZXIgbWFwLlxuICogQHJldHVybiBUaGUgQVdTIGF1dGhlbnRpY2F0aW9uIGhlYWRlciBtYXAgd2hpY2ggY29uc3RpdHV0ZXMgb2YgdGhlIGZvbGxvd2luZ1xuICogICBjb21wb25lbnRzOiBhbXotZGF0ZSwgYXV0aG9yaXphdGlvbiBoZWFkZXIgYW5kIGNhbm9uaWNhbCBxdWVyeSBzdHJpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQXV0aGVudGljYXRpb25IZWFkZXJNYXAob3B0aW9ucykge1xuICAgIGNvbnN0IGFkZGl0aW9uYWxBbXpIZWFkZXJzID0gb3B0aW9ucy5hZGRpdGlvbmFsQW16SGVhZGVycyB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0UGF5bG9hZCA9IG9wdGlvbnMucmVxdWVzdFBheWxvYWQgfHwgJyc7XG4gICAgLy8gaWFtLmFtYXpvbmF3cy5jb20gaG9zdCA9PiBpYW0gc2VydmljZS5cbiAgICAvLyBzdHMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20gPT4gc3RzIHNlcnZpY2UuXG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBvcHRpb25zLmhvc3Quc3BsaXQoJy4nKVswXTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIC8vIEZvcm1hdDogJyVZJW0lZFQlSCVNJVNaJy5cbiAgICBjb25zdCBhbXpEYXRlID0gbm93XG4gICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9bLTpdL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvXFwuWzAtOV0rLywgJycpO1xuICAgIC8vIEZvcm1hdDogJyVZJW0lZCcuXG4gICAgY29uc3QgZGF0ZVN0YW1wID0gbm93LnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWy1dL2csICcnKS5yZXBsYWNlKC9ULiovLCAnJyk7XG4gICAgLy8gQ2hhbmdlIGFsbCBhZGRpdGlvbmFsIGhlYWRlcnMgdG8gYmUgbG93ZXIgY2FzZS5cbiAgICBjb25zdCByZWZvcm1hdHRlZEFkZGl0aW9uYWxBbXpIZWFkZXJzID0ge307XG4gICAgT2JqZWN0LmtleXMoYWRkaXRpb25hbEFtekhlYWRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgcmVmb3JtYXR0ZWRBZGRpdGlvbmFsQW16SGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPVxuICAgICAgICAgICAgYWRkaXRpb25hbEFtekhlYWRlcnNba2V5XTtcbiAgICB9KTtcbiAgICAvLyBBZGQgQVdTIHRva2VuIGlmIGF2YWlsYWJsZS5cbiAgICBpZiAob3B0aW9ucy5zZWN1cml0eUNyZWRlbnRpYWxzLnRva2VuKSB7XG4gICAgICAgIHJlZm9ybWF0dGVkQWRkaXRpb25hbEFtekhlYWRlcnNbJ3gtYW16LXNlY3VyaXR5LXRva2VuJ10gPVxuICAgICAgICAgICAgb3B0aW9ucy5zZWN1cml0eUNyZWRlbnRpYWxzLnRva2VuO1xuICAgIH1cbiAgICAvLyBIZWFkZXIga2V5cyBuZWVkIHRvIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseS5cbiAgICBjb25zdCBhbXpIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIGhvc3Q6IG9wdGlvbnMuaG9zdCxcbiAgICB9LCBcbiAgICAvLyBQcmV2aW91c2x5IHRoZSBkYXRlIHdhcyBub3QgZml4ZWQgd2l0aCB4LWFtei0gYW5kIGNvdWxkIGJlIHByb3ZpZGVkIG1hbnVhbGx5LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ib3RvL2JvdG9jb3JlL2Jsb2IvODc5Zjg0NDBhNGU5YWNlNWQzY2YxNDVjZThiM2Q1ZTVmZmI4OTJlZi90ZXN0cy91bml0L2F1dGgvYXdzNF90ZXN0c3VpdGUvZ2V0LWhlYWRlci12YWx1ZS10cmltLnJlcVxuICAgIHJlZm9ybWF0dGVkQWRkaXRpb25hbEFtekhlYWRlcnMuZGF0ZSA/IHt9IDogeyAneC1hbXotZGF0ZSc6IGFtekRhdGUgfSwgcmVmb3JtYXR0ZWRBZGRpdGlvbmFsQW16SGVhZGVycyk7XG4gICAgbGV0IGNhbm9uaWNhbEhlYWRlcnMgPSAnJztcbiAgICBjb25zdCBzaWduZWRIZWFkZXJzTGlzdCA9IE9iamVjdC5rZXlzKGFtekhlYWRlcnMpLnNvcnQoKTtcbiAgICBzaWduZWRIZWFkZXJzTGlzdC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNhbm9uaWNhbEhlYWRlcnMgKz0gYCR7a2V5fToke2FtekhlYWRlcnNba2V5XX1cXG5gO1xuICAgIH0pO1xuICAgIGNvbnN0IHNpZ25lZEhlYWRlcnMgPSBzaWduZWRIZWFkZXJzTGlzdC5qb2luKCc7Jyk7XG4gICAgY29uc3QgcGF5bG9hZEhhc2ggPSBhd2FpdCBvcHRpb25zLmNyeXB0by5zaGEyNTZEaWdlc3RIZXgocmVxdWVzdFBheWxvYWQpO1xuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWd2NC1jcmVhdGUtY2Fub25pY2FsLXJlcXVlc3QuaHRtbFxuICAgIGNvbnN0IGNhbm9uaWNhbFJlcXVlc3QgPSBgJHtvcHRpb25zLm1ldGhvZH1cXG5gICtcbiAgICAgICAgYCR7b3B0aW9ucy5jYW5vbmljYWxVcml9XFxuYCArXG4gICAgICAgIGAke29wdGlvbnMuY2Fub25pY2FsUXVlcnlzdHJpbmd9XFxuYCArXG4gICAgICAgIGAke2Nhbm9uaWNhbEhlYWRlcnN9XFxuYCArXG4gICAgICAgIGAke3NpZ25lZEhlYWRlcnN9XFxuYCArXG4gICAgICAgIGAke3BheWxvYWRIYXNofWA7XG4gICAgY29uc3QgY3JlZGVudGlhbFNjb3BlID0gYCR7ZGF0ZVN0YW1wfS8ke29wdGlvbnMucmVnaW9ufS8ke3NlcnZpY2VOYW1lfS8ke0FXU19SRVFVRVNUX1RZUEV9YDtcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lndjQtY3JlYXRlLXN0cmluZy10by1zaWduLmh0bWxcbiAgICBjb25zdCBzdHJpbmdUb1NpZ24gPSBgJHtBV1NfQUxHT1JJVEhNfVxcbmAgK1xuICAgICAgICBgJHthbXpEYXRlfVxcbmAgK1xuICAgICAgICBgJHtjcmVkZW50aWFsU2NvcGV9XFxuYCArXG4gICAgICAgIChhd2FpdCBvcHRpb25zLmNyeXB0by5zaGEyNTZEaWdlc3RIZXgoY2Fub25pY2FsUmVxdWVzdCkpO1xuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWd2NC1jYWxjdWxhdGUtc2lnbmF0dXJlLmh0bWxcbiAgICBjb25zdCBzaWduaW5nS2V5ID0gYXdhaXQgZ2V0U2lnbmluZ0tleShvcHRpb25zLmNyeXB0bywgb3B0aW9ucy5zZWN1cml0eUNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleSwgZGF0ZVN0YW1wLCBvcHRpb25zLnJlZ2lvbiwgc2VydmljZU5hbWUpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNpZ24ob3B0aW9ucy5jcnlwdG8sIHNpZ25pbmdLZXksIHN0cmluZ1RvU2lnbik7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3NpZ3Y0LWFkZC1zaWduYXR1cmUtdG8tcmVxdWVzdC5odG1sXG4gICAgY29uc3QgYXV0aG9yaXphdGlvbkhlYWRlciA9IGAke0FXU19BTEdPUklUSE19IENyZWRlbnRpYWw9JHtvcHRpb25zLnNlY3VyaXR5Q3JlZGVudGlhbHMuYWNjZXNzS2V5SWR9L2AgK1xuICAgICAgICBgJHtjcmVkZW50aWFsU2NvcGV9LCBTaWduZWRIZWFkZXJzPSR7c2lnbmVkSGVhZGVyc30sIGAgK1xuICAgICAgICBgU2lnbmF0dXJlPSR7KDAsIGNyeXB0b18xLmZyb21BcnJheUJ1ZmZlclRvSGV4KShzaWduYXR1cmUpfWA7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLy8gRG8gbm90IHJldHVybiB4LWFtei1kYXRlIGlmIGRhdGUgaXMgYXZhaWxhYmxlLlxuICAgICAgICBhbXpEYXRlOiByZWZvcm1hdHRlZEFkZGl0aW9uYWxBbXpIZWFkZXJzLmRhdGUgPyB1bmRlZmluZWQgOiBhbXpEYXRlLFxuICAgICAgICBhdXRob3JpemF0aW9uSGVhZGVyLFxuICAgICAgICBjYW5vbmljYWxRdWVyeXN0cmluZzogb3B0aW9ucy5jYW5vbmljYWxRdWVyeXN0cmluZyxcbiAgICB9O1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRJbWRzVjJTZXNzaW9uVG9rZW4sIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2dldEF3c1JvbGVOYW1lLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZXRyaWV2ZUF3c1NlY3VyaXR5Q3JlZGVudGlhbHMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3JlZ2lvbkZyb21FbnZfZ2V0LCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9zZWN1cml0eUNyZWRlbnRpYWxzRnJvbUVudl9nZXQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIgPSB2b2lkIDA7XG4vKipcbiAqIEludGVybmFsIEFXUyBzZWN1cml0eSBjcmVkZW50aWFscyBzdXBwbGllciBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IHtAbGluayBBd3NDbGllbnR9XG4gKiB3aGVuIGEgY3JlZGVudGlhbCBzb3VyY2UgaXMgcHJvdmlkZWQgaW5zdGVhZCBvZiBhIHVzZXIgZGVmaW5lZCBzdXBwbGllci5cbiAqIFRoZSBsb2dpYyBpcyBzdW1tYXJpemVkIGFzOlxuICogMS4gSWYgaW1kc3YyX3Nlc3Npb25fdG9rZW5fdXJsIGlzIHByb3ZpZGVkIGluIHRoZSBjcmVkZW50aWFsIHNvdXJjZSwgdGhlblxuICogICAgZmV0Y2ggdGhlIGF3cyBzZXNzaW9uIHRva2VuIGFuZCBpbmNsdWRlIGl0IGluIHRoZSBoZWFkZXJzIG9mIHRoZVxuICogICAgbWV0YWRhdGEgcmVxdWVzdHMuIFRoaXMgaXMgYSByZXF1aXJlbWVudCBmb3IgSURNU3YyIGJ1dCBvcHRpb25hbFxuICogICAgZm9yIElETVN2MS5cbiAqIDIuIFJldHJpZXZlIEFXUyByZWdpb24gZnJvbSBhdmFpbGFiaWxpdHktem9uZS5cbiAqIDNhLiBDaGVjayBBV1MgY3JlZGVudGlhbHMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJZiBub3QgZm91bmQsIGdldFxuICogICAgIGZyb20gc2VjdXJpdHktY3JlZGVudGlhbHMgZW5kcG9pbnQuXG4gKiAzYi4gR2V0IEFXUyBjcmVkZW50aWFscyBmcm9tIHNlY3VyaXR5LWNyZWRlbnRpYWxzIGVuZHBvaW50LiBJbiBvcmRlclxuICogICAgIHRvIHJldHJpZXZlIHRoaXMsIHRoZSBBV1Mgcm9sZSBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmdcbiAqICAgICBzZWN1cml0eS1jcmVkZW50aWFscyBlbmRwb2ludCB3aXRob3V0IGFueSBhcmd1bWVudC4gVGhlbiB0aGVcbiAqICAgICBjcmVkZW50aWFscyBjYW4gYmUgcmV0cmlldmVkIHZpYTogc2VjdXJpdHktY3JlZGVudGlhbHMvcm9sZV9uYW1lXG4gKiA0LiBHZW5lcmF0ZSB0aGUgc2lnbmVkIHJlcXVlc3QgdG8gQVdTIFNUUyBHZXRDYWxsZXJJZGVudGl0eSBhY3Rpb24uXG4gKiA1LiBJbmplY3QgeC1nb29nLWNsb3VkLXRhcmdldC1yZXNvdXJjZSBpbnRvIGhlYWRlciBhbmQgc2VyaWFsaXplIHRoZVxuICogICAgc2lnbmVkIHJlcXVlc3QuIFRoaXMgd2lsbCBiZSB0aGUgc3ViamVjdC10b2tlbiB0byBwYXNzIHRvIEdDUCBTVFMuXG4gKi9cbmNsYXNzIERlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBEZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyIHVzaW5nIGluZm9ybWF0aW9uXG4gICAgICogZnJvbSB0aGUgY3JlZGVudGlhbF9zb3VyY2Ugc3RvcmVkIGluIHRoZSBBREMgZmlsZS5cbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgZGVmYXVsdCBhd3Mgc2VjdXJpdHkgY3JlZGVudGlhbHMgc3VwcGxpZXIgb3B0aW9ucyBvYmplY3QgdG9cbiAgICAgKiAgIGJ1aWxkIHRoZSBzdXBwbGllciB3aXRoLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWdpb25VcmwgPSBvcHRzLnJlZ2lvblVybDtcbiAgICAgICAgdGhpcy5zZWN1cml0eUNyZWRlbnRpYWxzVXJsID0gb3B0cy5zZWN1cml0eUNyZWRlbnRpYWxzVXJsO1xuICAgICAgICB0aGlzLmltZHNWMlNlc3Npb25Ub2tlblVybCA9IG9wdHMuaW1kc1YyU2Vzc2lvblRva2VuVXJsO1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxHYXhpb3NPcHRpb25zID0gb3B0cy5hZGRpdGlvbmFsR2F4aW9zT3B0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0aXZlIEFXUyByZWdpb24uIFRoaXMgZmlyc3QgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVnaW9uXG4gICAgICogaXMgYXZhaWxhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBJZiBpdCBpcyBub3QsIHRoZW4gdGhlIHN1cHBsaWVyXG4gICAgICogd2lsbCBjYWxsIHRoZSByZWdpb24gVVJMLlxuICAgICAqIEBwYXJhbSBjb250ZXh0IHtAbGluayBFeHRlcm5hbEFjY291bnRTdXBwbGllckNvbnRleHR9IGZyb20gdGhlIGNhbGxpbmdcbiAgICAgKiAgIHtAbGluayBBd3NDbGllbnR9LCBjb250YWlucyB0aGUgcmVxdWVzdGVkIGF1ZGllbmNlIGFuZCBzdWJqZWN0IHRva2VuIHR5cGVcbiAgICAgKiAgIGZvciB0aGUgZXh0ZXJuYWwgYWNjb3VudCBpZGVudGl0eS5cbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIEFXUyByZWdpb24gc3RyaW5nLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEF3c1JlZ2lvbihjb250ZXh0KSB7XG4gICAgICAgIC8vIFByaW9yaXR5IG9yZGVyIGZvciByZWdpb24gZGV0ZXJtaW5hdGlvbjpcbiAgICAgICAgLy8gQVdTX1JFR0lPTiA+IEFXU19ERUZBVUxUX1JFR0lPTiA+IG1ldGFkYXRhIHNlcnZlci5cbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcImFcIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmVnaW9uRnJvbUVudl9nZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9pbnN0YW5jZXMsIFwiYVwiLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZWdpb25Gcm9tRW52X2dldCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0YWRhdGFIZWFkZXJzID0ge307XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9pbnN0YW5jZXMsIFwiYVwiLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZWdpb25Gcm9tRW52X2dldCkgJiYgdGhpcy5pbWRzVjJTZXNzaW9uVG9rZW5VcmwpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhSGVhZGVyc1sneC1hd3MtZWMyLW1ldGFkYXRhLXRva2VuJ10gPVxuICAgICAgICAgICAgICAgIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcIm1cIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0SW1kc1YyU2Vzc2lvblRva2VuKS5jYWxsKHRoaXMsIGNvbnRleHQudHJhbnNwb3J0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yZWdpb25VcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRldGVybWluZSBBV1MgcmVnaW9uIGR1ZSB0byBtaXNzaW5nICcgK1xuICAgICAgICAgICAgICAgICdcIm9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UucmVnaW9uX3VybFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEdheGlvc09wdGlvbnMsXG4gICAgICAgICAgICB1cmw6IHRoaXMucmVnaW9uVXJsLFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgaGVhZGVyczogbWV0YWRhdGFIZWFkZXJzLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnRleHQudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgLy8gUmVtb3ZlIGxhc3QgY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgaWYgdXMtZWFzdC0yYiBpcyByZXR1cm5lZCxcbiAgICAgICAgLy8gdGhlIHJlZ2lvbiB3b3VsZCBiZSB1cy1lYXN0LTIuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLnN1YnN0cigwLCByZXNwb25zZS5kYXRhLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIEFXUyBzZWN1cml0eSBjcmVkZW50aWFscy4gVGhpcyBmaXJzdCBjaGVja3MgdG8gc2VlIGlmIHRoZSBjcmVkZW50aWFsc1xuICAgICAqIGlzIGF2YWlsYWJsZSBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIElmIGl0IGlzIG5vdCwgdGhlbiB0aGUgc3VwcGxpZXJcbiAgICAgKiB3aWxsIGNhbGwgdGhlIHNlY3VyaXR5IGNyZWRlbnRpYWxzIFVSTC5cbiAgICAgKiBAcGFyYW0gY29udGV4dCB7QGxpbmsgRXh0ZXJuYWxBY2NvdW50U3VwcGxpZXJDb250ZXh0fSBmcm9tIHRoZSBjYWxsaW5nXG4gICAgICogICB7QGxpbmsgQXdzQ2xpZW50fSwgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBhdWRpZW5jZSBhbmQgc3ViamVjdCB0b2tlbiB0eXBlXG4gICAgICogICBmb3IgdGhlIGV4dGVybmFsIGFjY291bnQgaWRlbnRpdHkuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBBV1Mgc2VjdXJpdHkgY3JlZGVudGlhbHMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QXdzU2VjdXJpdHlDcmVkZW50aWFscyhjb250ZXh0KSB7XG4gICAgICAgIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgcGVybWFuZW50IGNyZWRlbnRpYWxzIGZpcnN0LlxuICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvYXdzLXNlYy1jcmVkLXR5cGVzLmh0bWxcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcImFcIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfc2VjdXJpdHlDcmVkZW50aWFsc0Zyb21FbnZfZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfaW5zdGFuY2VzLCBcImFcIiwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfc2VjdXJpdHlDcmVkZW50aWFsc0Zyb21FbnZfZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhZGF0YUhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuaW1kc1YyU2Vzc2lvblRva2VuVXJsKSB7XG4gICAgICAgICAgICBtZXRhZGF0YUhlYWRlcnNbJ3gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbiddID1cbiAgICAgICAgICAgICAgICBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgXCJtXCIsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2dldEltZHNWMlNlc3Npb25Ub2tlbikuY2FsbCh0aGlzLCBjb250ZXh0LnRyYW5zcG9ydGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaW5jZSB0aGUgcm9sZSBvbiBhIFZNIGNhbiBjaGFuZ2UsIHdlIGRvbid0IG5lZWQgdG8gY2FjaGUgaXQuXG4gICAgICAgIGNvbnN0IHJvbGVOYW1lID0gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9pbnN0YW5jZXMsIFwibVwiLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRBd3NSb2xlTmFtZSkuY2FsbCh0aGlzLCBtZXRhZGF0YUhlYWRlcnMsIGNvbnRleHQudHJhbnNwb3J0ZXIpO1xuICAgICAgICAvLyBUZW1wb3JhcnkgY3JlZGVudGlhbHMgdHlwaWNhbGx5IGxhc3QgZm9yIHNldmVyYWwgaG91cnMuXG4gICAgICAgIC8vIEV4cGlyYXRpb24gaXMgcmV0dXJuZWQgaW4gcmVzcG9uc2UuXG4gICAgICAgIC8vIENvbnNpZGVyIGZ1dHVyZSBvcHRpbWl6YXRpb24gb2YgdGhpcyBsb2dpYyB0byBjYWNoZSBBV1MgdG9rZW5zXG4gICAgICAgIC8vIHVudGlsIHRoZWlyIG5hdHVyYWwgZXhwaXJhdGlvbi5cbiAgICAgICAgY29uc3QgYXdzQ3JlZHMgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX2luc3RhbmNlcywgXCJtXCIsIF9EZWZhdWx0QXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyX3JldHJpZXZlQXdzU2VjdXJpdHlDcmVkZW50aWFscykuY2FsbCh0aGlzLCByb2xlTmFtZSwgbWV0YWRhdGFIZWFkZXJzLCBjb250ZXh0LnRyYW5zcG9ydGVyKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkOiBhd3NDcmVkcy5BY2Nlc3NLZXlJZCxcbiAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogYXdzQ3JlZHMuU2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgICAgdG9rZW46IGF3c0NyZWRzLlRva2VuLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllciA9IERlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXI7XG5fRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRJbWRzVjJTZXNzaW9uVG9rZW4gPSBcbi8qKlxuICogQHBhcmFtIHRyYW5zcG9ydGVyIFRoZSB0cmFuc3BvcnRlciB0byB1c2UgZm9yIHJlcXVlc3RzLlxuICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJTURTdjIgU2Vzc2lvbiBUb2tlbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfZ2V0SW1kc1YyU2Vzc2lvblRva2VuKHRyYW5zcG9ydGVyKSB7XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgLi4udGhpcy5hZGRpdGlvbmFsR2F4aW9zT3B0aW9ucyxcbiAgICAgICAgdXJsOiB0aGlzLmltZHNWMlNlc3Npb25Ub2tlblVybCxcbiAgICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ3gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbi10dGwtc2Vjb25kcyc6ICczMDAnIH0sXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59LCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRBd3NSb2xlTmFtZSA9IFxuLyoqXG4gKiBAcGFyYW0gaGVhZGVycyBUaGUgaGVhZGVycyB0byBiZSB1c2VkIGluIHRoZSBtZXRhZGF0YSByZXF1ZXN0LlxuICogQHBhcmFtIHRyYW5zcG9ydGVyIFRoZSB0cmFuc3BvcnRlciB0byB1c2UgZm9yIHJlcXVlc3RzLlxuICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhc3NpZ25lZCByb2xlIHRvIHRoZSBjdXJyZW50XG4gKiAgIEFXUyBWTS4gVGhpcyBpcyBuZWVkZWQgZm9yIGNhbGxpbmcgdGhlIHNlY3VyaXR5LWNyZWRlbnRpYWxzIGVuZHBvaW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9nZXRBd3NSb2xlTmFtZShoZWFkZXJzLCB0cmFuc3BvcnRlcikge1xuICAgIGlmICghdGhpcy5zZWN1cml0eUNyZWRlbnRpYWxzVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRldGVybWluZSBBV1Mgcm9sZSBuYW1lIGR1ZSB0byBtaXNzaW5nICcgK1xuICAgICAgICAgICAgJ1wib3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZS51cmxcIicpO1xuICAgIH1cbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAuLi50aGlzLmFkZGl0aW9uYWxHYXhpb3NPcHRpb25zLFxuICAgICAgICB1cmw6IHRoaXMuc2VjdXJpdHlDcmVkZW50aWFsc1VybCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59LCBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZXRyaWV2ZUF3c1NlY3VyaXR5Q3JlZGVudGlhbHMgPSBcbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZW1wb3JhcnkgQVdTIGNyZWRlbnRpYWxzIGJ5IGNhbGxpbmcgdGhlIHNlY3VyaXR5LWNyZWRlbnRpYWxzXG4gKiBlbmRwb2ludCBhcyBzcGVjaWZpZWQgaW4gdGhlIGBjcmVkZW50aWFsX3NvdXJjZWAgb2JqZWN0LlxuICogQHBhcmFtIHJvbGVOYW1lIFRoZSByb2xlIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IFZNLlxuICogQHBhcmFtIGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgdXNlZCBpbiB0aGUgbWV0YWRhdGEgcmVxdWVzdC5cbiAqIEBwYXJhbSB0cmFuc3BvcnRlciBUaGUgdHJhbnNwb3J0ZXIgdG8gdXNlIGZvciByZXF1ZXN0cy5cbiAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdGVtcG9yYXJ5IEFXUyBjcmVkZW50aWFsc1xuICogICBuZWVkZWQgZm9yIGNyZWF0aW5nIHRoZSBHZXRDYWxsZXJJZGVudGl0eSBzaWduZWQgcmVxdWVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmV0cmlldmVBd3NTZWN1cml0eUNyZWRlbnRpYWxzKHJvbGVOYW1lLCBoZWFkZXJzLCB0cmFuc3BvcnRlcikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHJhbnNwb3J0ZXIucmVxdWVzdCh7XG4gICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEdheGlvc09wdGlvbnMsXG4gICAgICAgIHVybDogYCR7dGhpcy5zZWN1cml0eUNyZWRlbnRpYWxzVXJsfS8ke3JvbGVOYW1lfWAsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xufSwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfcmVnaW9uRnJvbUVudl9nZXQgPSBmdW5jdGlvbiBfRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcl9yZWdpb25Gcm9tRW52X2dldCgpIHtcbiAgICAvLyBUaGUgQVdTIHJlZ2lvbiBjYW4gYmUgcHJvdmlkZWQgdGhyb3VnaCBBV1NfUkVHSU9OIG9yIEFXU19ERUZBVUxUX1JFR0lPTi5cbiAgICAvLyBPbmx5IG9uZSBpcyByZXF1aXJlZC5cbiAgICByZXR1cm4gKHByb2Nlc3MuZW52WydBV1NfUkVHSU9OJ10gfHwgcHJvY2Vzcy5lbnZbJ0FXU19ERUZBVUxUX1JFR0lPTiddIHx8IG51bGwpO1xufSwgX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfc2VjdXJpdHlDcmVkZW50aWFsc0Zyb21FbnZfZ2V0ID0gZnVuY3Rpb24gX0RlZmF1bHRBd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXJfc2VjdXJpdHlDcmVkZW50aWFsc0Zyb21FbnZfZ2V0KCkge1xuICAgIC8vIEJvdGggQVdTX0FDQ0VTU19LRVlfSUQgYW5kIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBhcmUgcmVxdWlyZWQuXG4gICAgaWYgKHByb2Nlc3MuZW52WydBV1NfQUNDRVNTX0tFWV9JRCddICYmXG4gICAgICAgIHByb2Nlc3MuZW52WydBV1NfU0VDUkVUX0FDQ0VTU19LRVknXSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQ6IHByb2Nlc3MuZW52WydBV1NfQUNDRVNTX0tFWV9JRCddLFxuICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBwcm9jZXNzLmVudlsnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJ10sXG4gICAgICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnZbJ0FXU19TRVNTSU9OX1RPS0VOJ10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9hLCBfQXdzQ2xpZW50X0RFRkFVTFRfQVdTX1JFR0lPTkFMX0NSRURFTlRJQUxfVkVSSUZJQ0FUSU9OX1VSTDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXdzQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgYXdzcmVxdWVzdHNpZ25lcl8xID0gcmVxdWlyZShcIi4vYXdzcmVxdWVzdHNpZ25lclwiKTtcbmNvbnN0IGJhc2VleHRlcm5hbGNsaWVudF8xID0gcmVxdWlyZShcIi4vYmFzZWV4dGVybmFsY2xpZW50XCIpO1xuY29uc3QgZGVmYXVsdGF3c3NlY3VyaXR5Y3JlZGVudGlhbHNzdXBwbGllcl8xID0gcmVxdWlyZShcIi4vZGVmYXVsdGF3c3NlY3VyaXR5Y3JlZGVudGlhbHNzdXBwbGllclwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuLyoqXG4gKiBBV1MgZXh0ZXJuYWwgYWNjb3VudCBjbGllbnQuIFRoaXMgaXMgdXNlZCBmb3IgQVdTIHdvcmtsb2Fkcywgd2hlcmVcbiAqIEFXUyBTVFMgR2V0Q2FsbGVySWRlbnRpdHkgc2VyaWFsaXplZCBzaWduZWQgcmVxdWVzdHMgYXJlIGV4Y2hhbmdlZCBmb3JcbiAqIEdDUCBhY2Nlc3MgdG9rZW4uXG4gKi9cbmNsYXNzIEF3c0NsaWVudCBleHRlbmRzIGJhc2VleHRlcm5hbGNsaWVudF8xLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQge1xuICAgIC8qKlxuICAgICAqIEluc3RhbnRpYXRlcyBhbiBBd3NDbGllbnQgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIEpTT05cbiAgICAgKiBvYmplY3QgbG9hZGVkIGZyb20gYW4gZXh0ZXJuYWwgYWNjb3VudCBjcmVkZW50aWFscyBmaWxlLlxuICAgICAqIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY3JlZGVudGlhbCBpcyBub3QgYSB2YWxpZCBBV1MgY3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgZXh0ZXJuYWwgYWNjb3VudCBvcHRpb25zIG9iamVjdCB0eXBpY2FsbHkgbG9hZGVkXG4gICAgICogICBmcm9tIHRoZSBleHRlcm5hbCBhY2NvdW50IEpTT04gY3JlZGVudGlhbCBmaWxlLlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsT3B0aW9ucyAqKkRFUFJFQ0FURUQsIGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlXG4gICAgICogICBgb3B0aW9uc2AgcGFyYW1ldGVyLioqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYmVoYXZpb3IgY3VzdG9taXphdGlvbiBvcHRpb25zLlxuICAgICAqICAgVGhlc2UgY3VycmVudGx5IGN1c3RvbWl6ZSBleHBpcmF0aW9uIHRocmVzaG9sZCB0aW1lIGFuZCB3aGV0aGVyIHRvIHJldHJ5XG4gICAgICogICBvbiA0MDEvNDAzIEFQSSByZXF1ZXN0IGVycm9ycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG9wdHMgPSAoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjcmVkZW50aWFsU291cmNlID0gb3B0cy5nZXQoJ2NyZWRlbnRpYWxfc291cmNlJyk7XG4gICAgICAgIGNvbnN0IGF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllciA9IG9wdHMuZ2V0KCdhd3Nfc2VjdXJpdHlfY3JlZGVudGlhbHNfc3VwcGxpZXInKTtcbiAgICAgICAgLy8gVmFsaWRhdGUgY3JlZGVudGlhbCBzb3VyY2luZyBjb25maWd1cmF0aW9uLlxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxTb3VyY2UgJiYgIWF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGNyZWRlbnRpYWwgc291cmNlIG9yIEFXUyBzZWN1cml0eSBjcmVkZW50aWFscyBzdXBwbGllciBtdXN0IGJlIHNwZWNpZmllZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3JlZGVudGlhbFNvdXJjZSAmJiBhd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgb2YgY3JlZGVudGlhbCBzb3VyY2Ugb3IgQVdTIHNlY3VyaXR5IGNyZWRlbnRpYWxzIHN1cHBsaWVyIGNhbiBiZSBzcGVjaWZpZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcikge1xuICAgICAgICAgICAgdGhpcy5hd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIgPSBhd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXI7XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbmFsQ3JlZFZlcmlmaWNhdGlvblVybCA9XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldChfYSwgX2EsIFwiZlwiLCBfQXdzQ2xpZW50X0RFRkFVTFRfQVdTX1JFR0lPTkFMX0NSRURFTlRJQUxfVkVSSUZJQ0FUSU9OX1VSTCk7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxTb3VyY2VUeXBlID0gJ3Byb2dyYW1tYXRpYyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjcmVkZW50aWFsU291cmNlT3B0cyA9ICgwLCB1dGlsXzEub3JpZ2luYWxPckNhbWVsT3B0aW9ucykoY3JlZGVudGlhbFNvdXJjZSk7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50SWQgPSBjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ2Vudmlyb25tZW50X2lkJyk7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgaWYgdGhlIEFXUyByZWdpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgICAgICAgIC8vIEFXU19SRUdJT04gb3IgQVdTX0RFRkFVTFRfUkVHSU9OIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvblVybCA9IGNyZWRlbnRpYWxTb3VyY2VPcHRzLmdldCgncmVnaW9uX3VybCcpO1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGlmIEFXUyBzZWN1cml0eSBjcmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSBpblxuICAgICAgICAgICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgICAgICAgICAgY29uc3Qgc2VjdXJpdHlDcmVkZW50aWFsc1VybCA9IGNyZWRlbnRpYWxTb3VyY2VPcHRzLmdldCgndXJsJyk7XG4gICAgICAgICAgICBjb25zdCBpbWRzVjJTZXNzaW9uVG9rZW5VcmwgPSBjcmVkZW50aWFsU291cmNlT3B0cy5nZXQoJ2ltZHN2Ml9zZXNzaW9uX3Rva2VuX3VybCcpO1xuICAgICAgICAgICAgdGhpcy5hd3NTZWN1cml0eUNyZWRlbnRpYWxzU3VwcGxpZXIgPVxuICAgICAgICAgICAgICAgIG5ldyBkZWZhdWx0YXdzc2VjdXJpdHljcmVkZW50aWFsc3N1cHBsaWVyXzEuRGVmYXVsdEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcih7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lvblVybDogcmVnaW9uVXJsLFxuICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUNyZWRlbnRpYWxzVXJsOiBzZWN1cml0eUNyZWRlbnRpYWxzVXJsLFxuICAgICAgICAgICAgICAgICAgICBpbWRzVjJTZXNzaW9uVG9rZW5Vcmw6IGltZHNWMlNlc3Npb25Ub2tlblVybCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVnaW9uYWxDcmVkVmVyaWZpY2F0aW9uVXJsID0gY3JlZGVudGlhbFNvdXJjZU9wdHMuZ2V0KCdyZWdpb25hbF9jcmVkX3ZlcmlmaWNhdGlvbl91cmwnKTtcbiAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbFNvdXJjZVR5cGUgPSAnYXdzJztcbiAgICAgICAgICAgIC8vIERhdGEgdmFsaWRhdG9ycy5cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVFbnZpcm9ubWVudElkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hd3NSZXF1ZXN0U2lnbmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWdpb24gPSAnJztcbiAgICB9XG4gICAgdmFsaWRhdGVFbnZpcm9ubWVudElkKCkge1xuICAgICAgICB2YXIgX2I7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gKF9iID0gdGhpcy5lbnZpcm9ubWVudElkKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubWF0Y2goL14oYXdzKShcXGQrKSQvKTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCAhdGhpcy5yZWdpb25hbENyZWRWZXJpZmljYXRpb25VcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmFsaWQgQVdTIFwiY3JlZGVudGlhbF9zb3VyY2VcIiBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KG1hdGNoWzJdLCAxMCkgIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYXdzIHZlcnNpb24gXCIke21hdGNoWzJdfVwiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgYnVpbGQuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYW4gZXh0ZXJuYWwgc3ViamVjdCB0b2tlbiBpcyBuZWVkZWQgdG8gYmUgZXhjaGFuZ2VkIGZvciBhXG4gICAgICogR0NQIGFjY2VzcyB0b2tlbiB2aWEgR0NQIFNUUyBlbmRwb2ludC4gVGhpcyB3aWxsIGNhbGwgdGhlXG4gICAgICoge0BsaW5rIEF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllcn0gdG8gcmV0cmlldmUgYW4gQVdTIHJlZ2lvbiBhbmQgQVdTXG4gICAgICogU2VjdXJpdHkgQ3JlZGVudGlhbHMsIHRoZW4gdXNlIHRoZW0gdG8gY3JlYXRlIGEgc2lnbmVkIEFXUyBTVFMgcmVxdWVzdCB0aGF0XG4gICAgICogY2FuIGJlIGV4Y2hhbmdlZCBmb3IgYSBHQ1AgYWNjZXNzIHRva2VuLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXh0ZXJuYWwgc3ViamVjdCB0b2tlbi5cbiAgICAgKi9cbiAgICBhc3luYyByZXRyaWV2ZVN1YmplY3RUb2tlbigpIHtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBBV1MgcmVxdWVzdCBzaWduZXIgaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4gICAgICAgIGlmICghdGhpcy5hd3NSZXF1ZXN0U2lnbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbiA9IGF3YWl0IHRoaXMuYXdzU2VjdXJpdHlDcmVkZW50aWFsc1N1cHBsaWVyLmdldEF3c1JlZ2lvbih0aGlzLnN1cHBsaWVyQ29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLmF3c1JlcXVlc3RTaWduZXIgPSBuZXcgYXdzcmVxdWVzdHNpZ25lcl8xLkF3c1JlcXVlc3RTaWduZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF3c1NlY3VyaXR5Q3JlZGVudGlhbHNTdXBwbGllci5nZXRBd3NTZWN1cml0eUNyZWRlbnRpYWxzKHRoaXMuc3VwcGxpZXJDb250ZXh0KTtcbiAgICAgICAgICAgIH0sIHRoaXMucmVnaW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZW5lcmF0ZSBzaWduZWQgcmVxdWVzdCB0byBBV1MgU1RTIEdldENhbGxlcklkZW50aXR5IEFQSS5cbiAgICAgICAgLy8gVXNlIHRoZSByZXF1aXJlZCByZWdpb25hbCBlbmRwb2ludC4gT3RoZXJ3aXNlLCB0aGUgcmVxdWVzdCB3aWxsIGZhaWwuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCB0aGlzLmF3c1JlcXVlc3RTaWduZXIuZ2V0UmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICAgICAgLi4uX2EuUkVUUllfQ09ORklHLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnJlZ2lvbmFsQ3JlZFZlcmlmaWNhdGlvblVybC5yZXBsYWNlKCd7cmVnaW9ufScsIHRoaXMucmVnaW9uKSxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhlIEdDUCBTVFMgZW5kcG9pbnQgZXhwZWN0cyB0aGUgaGVhZGVycyB0byBiZSBmb3JtYXR0ZWQgYXM6XG4gICAgICAgIC8vIFtcbiAgICAgICAgLy8gICB7a2V5OiAneC1hbXotZGF0ZScsIHZhbHVlOiAnLi4uJ30sXG4gICAgICAgIC8vICAge2tleTogJ0F1dGhvcml6YXRpb24nLCB2YWx1ZTogJy4uLid9LFxuICAgICAgICAvLyAgIC4uLlxuICAgICAgICAvLyBdXG4gICAgICAgIC8vIEFuZCB0aGVuIHNlcmlhbGl6ZWQgYXM6XG4gICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIC8vICAgdXJsOiAnLi4uJyxcbiAgICAgICAgLy8gICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgLy8gICBoZWFkZXJzOiBbe2tleTogJ3gtYW16LWRhdGUnLCB2YWx1ZTogJy4uLid9LCAuLi5dXG4gICAgICAgIC8vIH0pKVxuICAgICAgICBjb25zdCByZWZvcm1hdHRlZEhlYWRlciA9IFtdO1xuICAgICAgICBjb25zdCBleHRlbmRlZEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIC8vIFRoZSBmdWxsLCBjYW5vbmljYWwgcmVzb3VyY2UgbmFtZSBvZiB0aGUgd29ya2xvYWQgaWRlbnRpdHkgcG9vbFxuICAgICAgICAgICAgLy8gcHJvdmlkZXIsIHdpdGggb3Igd2l0aG91dCB0aGUgSFRUUFMgcHJlZml4LlxuICAgICAgICAgICAgLy8gSW5jbHVkaW5nIHRoaXMgaGVhZGVyIGFzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZSBpcyByZWNvbW1lbmRlZCB0b1xuICAgICAgICAgICAgLy8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LlxuICAgICAgICAgICAgJ3gtZ29vZy1jbG91ZC10YXJnZXQtcmVzb3VyY2UnOiB0aGlzLmF1ZGllbmNlLFxuICAgICAgICB9LCBvcHRpb25zLmhlYWRlcnMpO1xuICAgICAgICAvLyBSZWZvcm1hdCBoZWFkZXIgdG8gR0NQIFNUUyBleHBlY3RlZCBmb3JtYXQuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4dGVuZGVkSGVhZGVycykge1xuICAgICAgICAgICAgcmVmb3JtYXR0ZWRIZWFkZXIucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBleHRlbmRlZEhlYWRlcnNba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgcmVmb3JtYXR0ZWQgc2lnbmVkIHJlcXVlc3QuXG4gICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICAgICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzOiByZWZvcm1hdHRlZEhlYWRlcixcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQXdzQ2xpZW50ID0gQXdzQ2xpZW50O1xuX2EgPSBBd3NDbGllbnQ7XG5fQXdzQ2xpZW50X0RFRkFVTFRfQVdTX1JFR0lPTkFMX0NSRURFTlRJQUxfVkVSSUZJQ0FUSU9OX1VSTCA9IHsgdmFsdWU6ICdodHRwczovL3N0cy57cmVnaW9ufS5hbWF6b25hd3MuY29tP0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUnIH07XG4vKipcbiAqIEBkZXByZWNhdGVkIEFXUyBjbGllbnQgbm8gdmFsaWRhdGVzIHRoZSBFQzIgbWV0YWRhdGEgYWRkcmVzcy5cbiAqKi9cbkF3c0NsaWVudC5BV1NfRUMyX01FVEFEQVRBX0lQVjRfQUREUkVTUyA9ICcxNjkuMjU0LjE2OS4yNTQnO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBBV1MgY2xpZW50IG5vIHZhbGlkYXRlcyB0aGUgRUMyIG1ldGFkYXRhIGFkZHJlc3MuXG4gKiovXG5Bd3NDbGllbnQuQVdTX0VDMl9NRVRBREFUQV9JUFY2X0FERFJFU1MgPSAnZmQwMDplYzI6OjI1NCc7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkludmFsaWRTdWJqZWN0VG9rZW5FcnJvciA9IGV4cG9ydHMuSW52YWxpZE1lc3NhZ2VGaWVsZEVycm9yID0gZXhwb3J0cy5JbnZhbGlkQ29kZUZpZWxkRXJyb3IgPSBleHBvcnRzLkludmFsaWRUb2tlblR5cGVGaWVsZEVycm9yID0gZXhwb3J0cy5JbnZhbGlkRXhwaXJhdGlvblRpbWVGaWVsZEVycm9yID0gZXhwb3J0cy5JbnZhbGlkU3VjY2Vzc0ZpZWxkRXJyb3IgPSBleHBvcnRzLkludmFsaWRWZXJzaW9uRmllbGRFcnJvciA9IGV4cG9ydHMuRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3IgPSBleHBvcnRzLkV4ZWN1dGFibGVSZXNwb25zZSA9IHZvaWQgMDtcbmNvbnN0IFNBTUxfU1VCSkVDVF9UT0tFTl9UWVBFID0gJ3VybjppZXRmOnBhcmFtczpvYXV0aDp0b2tlbi10eXBlOnNhbWwyJztcbmNvbnN0IE9JRENfU1VCSkVDVF9UT0tFTl9UWVBFMSA9ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6dG9rZW4tdHlwZTppZF90b2tlbic7XG5jb25zdCBPSURDX1NVQkpFQ1RfVE9LRU5fVFlQRTIgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6and0Jztcbi8qKlxuICogRGVmaW5lcyB0aGUgcmVzcG9uc2Ugb2YgYSAzcmQgcGFydHkgZXhlY3V0YWJsZSBydW4gYnkgdGhlIHBsdWdnYWJsZSBhdXRoIGNsaWVudC5cbiAqL1xuY2xhc3MgRXhlY3V0YWJsZVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYW4gRXhlY3V0YWJsZVJlc3BvbnNlIGluc3RhbmNlIHVzaW5nIHRoZSBwcm92aWRlZCBKU09OIG9iamVjdFxuICAgICAqIGZyb20gdGhlIG91dHB1dCBvZiB0aGUgZXhlY3V0YWJsZS5cbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VKc29uIFJlc3BvbnNlIGZyb20gYSAzcmQgcGFydHkgZXhlY3V0YWJsZSwgbG9hZGVkIGZyb20gYVxuICAgICAqIHJ1biBvZiB0aGUgZXhlY3V0YWJsZSBvciBhIGNhY2hlZCBvdXRwdXQgZmlsZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zZUpzb24pIHtcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcmVxdWlyZWQgZmllbGRzIGV4aXN0IGluIHRoZSBqc29uIHJlc3BvbnNlLlxuICAgICAgICBpZiAoIXJlc3BvbnNlSnNvbi52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFZlcnNpb25GaWVsZEVycm9yKFwiRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAndmVyc2lvbicgZmllbGQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZUpzb24uc3VjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN1Y2Nlc3NGaWVsZEVycm9yKFwiRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAnc3VjY2VzcycgZmllbGQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHJlc3BvbnNlSnNvbi52ZXJzaW9uO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSByZXNwb25zZUpzb24uc3VjY2VzcztcbiAgICAgICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXG4gICAgICAgIGlmICh0aGlzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSByZXNwb25zZUpzb24uZXhwaXJhdGlvbl90aW1lO1xuICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgPSByZXNwb25zZUpzb24udG9rZW5fdHlwZTtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRva2VuIHR5cGUgZmllbGQuXG4gICAgICAgICAgICBpZiAodGhpcy50b2tlblR5cGUgIT09IFNBTUxfU1VCSkVDVF9UT0tFTl9UWVBFICYmXG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblR5cGUgIT09IE9JRENfU1VCSkVDVF9UT0tFTl9UWVBFMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5UeXBlICE9PSBPSURDX1NVQkpFQ1RfVE9LRU5fVFlQRTIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRva2VuVHlwZUZpZWxkRXJyb3IoXCJFeGVjdXRhYmxlIHJlc3BvbnNlIG11c3QgY29udGFpbiBhICd0b2tlbl90eXBlJyBmaWVsZCB3aGVuIHN1Y2Nlc3NmdWwgXCIgK1xuICAgICAgICAgICAgICAgICAgICBgYW5kIGl0IG11c3QgYmUgb25lIG9mICR7T0lEQ19TVUJKRUNUX1RPS0VOX1RZUEUxfSwgJHtPSURDX1NVQkpFQ1RfVE9LRU5fVFlQRTJ9LCBvciAke1NBTUxfU1VCSkVDVF9UT0tFTl9UWVBFfS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIHN1YmplY3QgdG9rZW4uXG4gICAgICAgICAgICBpZiAodGhpcy50b2tlblR5cGUgPT09IFNBTUxfU1VCSkVDVF9UT0tFTl9UWVBFKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZUpzb24uc2FtbF9yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN1YmplY3RUb2tlbkVycm9yKGBFeGVjdXRhYmxlIHJlc3BvbnNlIG11c3QgY29udGFpbiBhICdzYW1sX3Jlc3BvbnNlJyBmaWVsZCB3aGVuIHRva2VuX3R5cGU9JHtTQU1MX1NVQkpFQ1RfVE9LRU5fVFlQRX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdFRva2VuID0gcmVzcG9uc2VKc29uLnNhbWxfcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlSnNvbi5pZF90b2tlbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN1YmplY3RUb2tlbkVycm9yKFwiRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAnaWRfdG9rZW4nIGZpZWxkIHdoZW4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYHRva2VuX3R5cGU9JHtPSURDX1NVQkpFQ1RfVE9LRU5fVFlQRTF9IG9yICR7T0lEQ19TVUJKRUNUX1RPS0VOX1RZUEUyfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0VG9rZW4gPSByZXNwb25zZUpzb24uaWRfdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBCb3RoIGNvZGUgYW5kIG1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBmb3IgdW5zdWNjZXNzZnVsIHJlc3BvbnNlcy5cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VKc29uLmNvZGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvZGVGaWVsZEVycm9yKFwiRXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gYSAnY29kZScgZmllbGQgd2hlbiB1bnN1Y2Nlc3NmdWwuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZUpzb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkTWVzc2FnZUZpZWxkRXJyb3IoXCJFeGVjdXRhYmxlIHJlc3BvbnNlIG11c3QgY29udGFpbiBhICdtZXNzYWdlJyBmaWVsZCB3aGVuIHVuc3VjY2Vzc2Z1bC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVycm9yQ29kZSA9IHJlc3BvbnNlSnNvbi5jb2RlO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZXNwb25zZUpzb24ubWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHJlc3BvbnNlIGhhcyBhIHZhbGlkIHRva2VuLiBSZXR1cm5zXG4gICAgICogdHJ1ZSB3aGVuIHRoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIHRva2VuIGlzIG5vdCBleHBpcmVkLlxuICAgICAqL1xuICAgIGlzVmFsaWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0V4cGlyZWQoKSAmJiB0aGlzLnN1Y2Nlc3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gQSBib29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgcmVzcG9uc2UgaXMgZXhwaXJlZC4gUmV0dXJucyB0cnVlIGlmIHRoZVxuICAgICAqIHByb3ZpZGVkIHRpbWVvdXQgaGFzIHBhc3NlZC5cbiAgICAgKi9cbiAgICBpc0V4cGlyZWQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5leHBpcmF0aW9uVGltZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lIDwgTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwMCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuRXhlY3V0YWJsZVJlc3BvbnNlID0gRXhlY3V0YWJsZVJlc3BvbnNlO1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gYnkgdGhlIEV4ZWN1dGFibGVSZXNwb25zZSBjbGFzcy5cbiAqL1xuY2xhc3MgRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkV4ZWN1dGFibGVSZXNwb25zZUVycm9yID0gRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3I7XG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHRoZSAndmVyc2lvbicgZmllbGQgaW4gYW4gZXhlY3V0YWJsZSByZXNwb25zZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuXG4gKi9cbmNsYXNzIEludmFsaWRWZXJzaW9uRmllbGRFcnJvciBleHRlbmRzIEV4ZWN1dGFibGVSZXNwb25zZUVycm9yIHtcbn1cbmV4cG9ydHMuSW52YWxpZFZlcnNpb25GaWVsZEVycm9yID0gSW52YWxpZFZlcnNpb25GaWVsZEVycm9yO1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiB0aGUgJ3N1Y2Nlc3MnIGZpZWxkIGluIGFuIGV4ZWN1dGFibGUgcmVzcG9uc2UgaXMgbWlzc2luZyBvciBpbnZhbGlkLlxuICovXG5jbGFzcyBJbnZhbGlkU3VjY2Vzc0ZpZWxkRXJyb3IgZXh0ZW5kcyBFeGVjdXRhYmxlUmVzcG9uc2VFcnJvciB7XG59XG5leHBvcnRzLkludmFsaWRTdWNjZXNzRmllbGRFcnJvciA9IEludmFsaWRTdWNjZXNzRmllbGRFcnJvcjtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gdGhlICdleHBpcmF0aW9uX3RpbWUnIGZpZWxkIGluIGFuIGV4ZWN1dGFibGUgcmVzcG9uc2UgaXMgbWlzc2luZyBvciBpbnZhbGlkLlxuICovXG5jbGFzcyBJbnZhbGlkRXhwaXJhdGlvblRpbWVGaWVsZEVycm9yIGV4dGVuZHMgRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3Ige1xufVxuZXhwb3J0cy5JbnZhbGlkRXhwaXJhdGlvblRpbWVGaWVsZEVycm9yID0gSW52YWxpZEV4cGlyYXRpb25UaW1lRmllbGRFcnJvcjtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gdGhlICd0b2tlbl90eXBlJyBmaWVsZCBpbiBhbiBleGVjdXRhYmxlIHJlc3BvbnNlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5cbiAqL1xuY2xhc3MgSW52YWxpZFRva2VuVHlwZUZpZWxkRXJyb3IgZXh0ZW5kcyBFeGVjdXRhYmxlUmVzcG9uc2VFcnJvciB7XG59XG5leHBvcnRzLkludmFsaWRUb2tlblR5cGVGaWVsZEVycm9yID0gSW52YWxpZFRva2VuVHlwZUZpZWxkRXJyb3I7XG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIHRoZSAnY29kZScgZmllbGQgaW4gYW4gZXhlY3V0YWJsZSByZXNwb25zZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuXG4gKi9cbmNsYXNzIEludmFsaWRDb2RlRmllbGRFcnJvciBleHRlbmRzIEV4ZWN1dGFibGVSZXNwb25zZUVycm9yIHtcbn1cbmV4cG9ydHMuSW52YWxpZENvZGVGaWVsZEVycm9yID0gSW52YWxpZENvZGVGaWVsZEVycm9yO1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiB0aGUgJ21lc3NhZ2UnIGZpZWxkIGluIGFuIGV4ZWN1dGFibGUgcmVzcG9uc2UgaXMgbWlzc2luZyBvciBpbnZhbGlkLlxuICovXG5jbGFzcyBJbnZhbGlkTWVzc2FnZUZpZWxkRXJyb3IgZXh0ZW5kcyBFeGVjdXRhYmxlUmVzcG9uc2VFcnJvciB7XG59XG5leHBvcnRzLkludmFsaWRNZXNzYWdlRmllbGRFcnJvciA9IEludmFsaWRNZXNzYWdlRmllbGRFcnJvcjtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gdGhlIHN1YmplY3QgdG9rZW4gaW4gYW4gZXhlY3V0YWJsZSByZXNwb25zZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuXG4gKi9cbmNsYXNzIEludmFsaWRTdWJqZWN0VG9rZW5FcnJvciBleHRlbmRzIEV4ZWN1dGFibGVSZXNwb25zZUVycm9yIHtcbn1cbmV4cG9ydHMuSW52YWxpZFN1YmplY3RUb2tlbkVycm9yID0gSW52YWxpZFN1YmplY3RUb2tlbkVycm9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QbHVnZ2FibGVBdXRoSGFuZGxlciA9IHZvaWQgMDtcbmNvbnN0IHBsdWdnYWJsZV9hdXRoX2NsaWVudF8xID0gcmVxdWlyZShcIi4vcGx1Z2dhYmxlLWF1dGgtY2xpZW50XCIpO1xuY29uc3QgZXhlY3V0YWJsZV9yZXNwb25zZV8xID0gcmVxdWlyZShcIi4vZXhlY3V0YWJsZS1yZXNwb25zZVwiKTtcbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4vKipcbiAqIEEgaGFuZGxlciB1c2VkIHRvIHJldHJpZXZlIDNyZCBwYXJ0eSB0b2tlbiByZXNwb25zZXMgZnJvbSB1c2VyIGRlZmluZWRcbiAqIGV4ZWN1dGFibGVzIGFuZCBjYWNoZWQgZmlsZSBvdXRwdXQgZm9yIHRoZSBQbHVnZ2FibGVBdXRoQ2xpZW50IGNsYXNzLlxuICovXG5jbGFzcyBQbHVnZ2FibGVBdXRoSGFuZGxlciB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGEgUGx1Z2dhYmxlQXV0aEhhbmRsZXIgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkXG4gICAgICogUGx1Z2dhYmxlQXV0aEhhbmRsZXJPcHRpb25zIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jb21tYW5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbW1hbmQgcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tYW5kQ29tcG9uZW50cyA9IFBsdWdnYWJsZUF1dGhIYW5kbGVyLnBhcnNlQ29tbWFuZChvcHRpb25zLmNvbW1hbmQpO1xuICAgICAgICB0aGlzLnRpbWVvdXRNaWxsaXMgPSBvcHRpb25zLnRpbWVvdXRNaWxsaXM7XG4gICAgICAgIGlmICghdGhpcy50aW1lb3V0TWlsbGlzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRpbWVvdXRNaWxsaXMgcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRwdXRGaWxlID0gb3B0aW9ucy5vdXRwdXRGaWxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxscyB1c2VyIHByb3ZpZGVkIGV4ZWN1dGFibGUgdG8gZ2V0IGEgM3JkIHBhcnR5IHN1YmplY3QgdG9rZW4gYW5kXG4gICAgICogcmV0dXJucyB0aGUgcmVzcG9uc2UuXG4gICAgICogQHBhcmFtIGVudk1hcCBhIE1hcCBvZiBhZGRpdGlvbmFsIEVudmlyb25tZW50IFZhcmlhYmxlcyByZXF1aXJlZCBmb3JcbiAgICAgKiAgIHRoZSBleGVjdXRhYmxlLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXhlY3V0YWJsZSByZXNwb25zZS5cbiAgICAgKi9cbiAgICByZXRyaWV2ZVJlc3BvbnNlRnJvbUV4ZWN1dGFibGUoZW52TWFwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBTcGF3biBwcm9jZXNzIHRvIHJ1biBleGVjdXRhYmxlIHVzaW5nIGFkZGVkIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRQcm9jZXNzLnNwYXduKHRoaXMuY29tbWFuZENvbXBvbmVudHNbMF0sIHRoaXMuY29tbWFuZENvbXBvbmVudHMuc2xpY2UoMSksIHtcbiAgICAgICAgICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLk9iamVjdC5mcm9tRW50cmllcyhlbnZNYXApIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgICAgICAgIC8vIEFwcGVuZCBzdGRvdXQgdG8gb3V0cHV0IGFzIGV4ZWN1dGFibGUgcnVucy5cbiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEFwcGVuZCBzdGRlcnIgYXMgZXhlY3V0YWJsZSBydW5zLlxuICAgICAgICAgICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFNldCB1cCBhIHRpbWVvdXQgdG8gZW5kIHRoZSBjaGlsZCBwcm9jZXNzIGFuZCB0aHJvdyBhbiBlcnJvci5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBLaWxsIGNoaWxkIHByb2Nlc3MgYW5kIHJlbW92ZSBsaXN0ZW5lcnMgc28gJ2Nsb3NlJyBldmVudCBkb2Vzbid0IGdldFxuICAgICAgICAgICAgICAgIC8vIHJlYWQgYWZ0ZXIgY2hpbGQgcHJvY2VzcyBpcyBraWxsZWQuXG4gICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdUaGUgZXhlY3V0YWJsZSBmYWlsZWQgdG8gZmluaXNoIHdpdGhpbiB0aGUgdGltZW91dCBzcGVjaWZpZWQuJykpO1xuICAgICAgICAgICAgfSwgdGhpcy50aW1lb3V0TWlsbGlzKTtcbiAgICAgICAgICAgIGNoaWxkLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHRpbWVvdXQgaWYgZXhlY3V0YWJsZSBjbG9zZXMgYmVmb3JlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGV4ZWN1dGFibGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdHJ5IHRvIHJldHVybiB0aGUgcGFyc2VkIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VKc29uID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBuZXcgZXhlY3V0YWJsZV9yZXNwb25zZV8xLkV4ZWN1dGFibGVSZXNwb25zZShyZXNwb25zZUpzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZXhlY3V0YWJsZV9yZXNwb25zZV8xLkV4ZWN1dGFibGVSZXNwb25zZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBleGVjdXRhYmxlX3Jlc3BvbnNlXzEuRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3IoYFRoZSBleGVjdXRhYmxlIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2U6ICR7b3V0cHV0fWApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgcGx1Z2dhYmxlX2F1dGhfY2xpZW50XzEuRXhlY3V0YWJsZUVycm9yKG91dHB1dCwgY29kZS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdXNlciBwcm92aWRlZCBvdXRwdXQgZmlsZSBmb3IgcmVzcG9uc2UgZnJvbSBwcmV2aW91cyBydW4gb2ZcbiAgICAgKiBleGVjdXRhYmxlIGFuZCByZXR1cm4gdGhlIHJlc3BvbnNlIGlmIGl0IGV4aXN0cywgaXMgZm9ybWF0dGVkIGNvcnJlY3RseSwgYW5kIGlzIG5vdCBleHBpcmVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJldHJpZXZlQ2FjaGVkUmVzcG9uc2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRGaWxlIHx8IHRoaXMub3V0cHV0RmlsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbGVQYXRoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZVBhdGggPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFscGF0aCh0aGlzLm91dHB1dEZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gSWYgZmlsZSBwYXRoIGNhbm5vdCBiZSByZXNvbHZlZCwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoYXdhaXQgZnMucHJvbWlzZXMubHN0YXQoZmlsZVBhdGgpKS5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgLy8gSWYgcGF0aCBkb2VzIG5vdCBsZWFkIHRvIGZpbGUsIHJldHVybiB1bmRlZmluZWQuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlU3RyaW5nID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZVBhdGgsIHtcbiAgICAgICAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2VTdHJpbmcgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUpzb24gPSBKU09OLnBhcnNlKHJlc3BvbnNlU3RyaW5nKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gbmV3IGV4ZWN1dGFibGVfcmVzcG9uc2VfMS5FeGVjdXRhYmxlUmVzcG9uc2UocmVzcG9uc2VKc29uKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIHN1Y2Nlc3NmdWwgYW5kIHVuZXhwaXJlZC5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGV4ZWN1dGFibGVfcmVzcG9uc2VfMS5FeGVjdXRhYmxlUmVzcG9uc2UocmVzcG9uc2VKc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBleGVjdXRhYmxlX3Jlc3BvbnNlXzEuRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBleGVjdXRhYmxlX3Jlc3BvbnNlXzEuRXhlY3V0YWJsZVJlc3BvbnNlRXJyb3IoYFRoZSBvdXRwdXQgZmlsZSBjb250YWluZWQgYW4gaW52YWxpZCByZXNwb25zZTogJHtyZXNwb25zZVN0cmluZ31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgZ2l2ZW4gY29tbWFuZCBzdHJpbmcgaW50byBjb21wb25lbnQgYXJyYXksIHNwbGl0dGluZyBvbiBzcGFjZXMgdW5sZXNzXG4gICAgICogc3BhY2VzIGFyZSBiZXR3ZWVuIHF1b3RhdGlvbiBtYXJrcy5cbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2VDb21tYW5kKGNvbW1hbmQpIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIGNvbW1hbmQgaW50byBjb21wb25lbnRzIGJ5IHNwbGl0dGluZyBvbiBzcGFjZXMsXG4gICAgICAgIC8vIHVubGVzcyBzcGFjZXMgYXJlIGNvbnRhaW5lZCBpbiBxdW90YXRpb24gbWFya3MuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21tYW5kLm1hdGNoKC8oPzpbXlxcc1wiXSt8XCJbXlwiXSpcIikrL2cpO1xuICAgICAgICBpZiAoIWNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZWQgY29tbWFuZDogXCIke2NvbW1hbmR9XCIgY291bGQgbm90IGJlIHBhcnNlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgcXVvdGF0aW9uIG1hcmtzIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGVhY2ggY29tcG9uZW50IGlmIHRoZXkgYXJlIHByZXNlbnQuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNbaV1bMF0gPT09ICdcIicgJiYgY29tcG9uZW50c1tpXS5zbGljZSgtMSkgPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzW2ldID0gY29tcG9uZW50c1tpXS5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuZXhwb3J0cy5QbHVnZ2FibGVBdXRoSGFuZGxlciA9IFBsdWdnYWJsZUF1dGhIYW5kbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QbHVnZ2FibGVBdXRoQ2xpZW50ID0gZXhwb3J0cy5FeGVjdXRhYmxlRXJyb3IgPSB2b2lkIDA7XG5jb25zdCBiYXNlZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2Jhc2VleHRlcm5hbGNsaWVudFwiKTtcbmNvbnN0IGV4ZWN1dGFibGVfcmVzcG9uc2VfMSA9IHJlcXVpcmUoXCIuL2V4ZWN1dGFibGUtcmVzcG9uc2VcIik7XG5jb25zdCBwbHVnZ2FibGVfYXV0aF9oYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9wbHVnZ2FibGUtYXV0aC1oYW5kbGVyXCIpO1xuLyoqXG4gKiBFcnJvciB0aHJvd24gZnJvbSB0aGUgZXhlY3V0YWJsZSBydW4gYnkgUGx1Z2dhYmxlQXV0aENsaWVudC5cbiAqL1xuY2xhc3MgRXhlY3V0YWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUpIHtcbiAgICAgICAgc3VwZXIoYFRoZSBleGVjdXRhYmxlIGZhaWxlZCB3aXRoIGV4aXQgY29kZTogJHtjb2RlfSBhbmQgZXJyb3IgbWVzc2FnZTogJHttZXNzYWdlfS5gKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICB9XG59XG5leHBvcnRzLkV4ZWN1dGFibGVFcnJvciA9IEV4ZWN1dGFibGVFcnJvcjtcbi8qKlxuICogVGhlIGRlZmF1bHQgZXhlY3V0YWJsZSB0aW1lb3V0IHdoZW4gbm9uZSBpcyBwcm92aWRlZCwgaW4gbWlsbGlzZWNvbmRzLlxuICovXG5jb25zdCBERUZBVUxUX0VYRUNVVEFCTEVfVElNRU9VVF9NSUxMSVMgPSAzMCAqIDEwMDA7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFsbG93ZWQgZXhlY3V0YWJsZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuY29uc3QgTUlOSU1VTV9FWEVDVVRBQkxFX1RJTUVPVVRfTUlMTElTID0gNSAqIDEwMDA7XG4vKipcbiAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgZXhlY3V0YWJsZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuY29uc3QgTUFYSU1VTV9FWEVDVVRBQkxFX1RJTUVPVVRfTUlMTElTID0gMTIwICogMTAwMDtcbi8qKlxuICogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNoZWNrIHRvIHNlZSBpZiBleGVjdXRhYmxlIGNhbiBiZSBydW4uXG4gKiBWYWx1ZSBtdXN0IGJlIHNldCB0byAnMScgZm9yIHRoZSBleGVjdXRhYmxlIHRvIHJ1bi5cbiAqL1xuY29uc3QgR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQUxMT1dfRVhFQ1VUQUJMRVMgPSAnR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQUxMT1dfRVhFQ1VUQUJMRVMnO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBjdXJyZW50bHkgc3VwcG9ydGVkIGV4ZWN1dGFibGUgdmVyc2lvbi5cbiAqL1xuY29uc3QgTUFYSU1VTV9FWEVDVVRBQkxFX1ZFUlNJT04gPSAxO1xuLyoqXG4gKiBQbHVnZ2FibGVBdXRoQ2xpZW50IGVuYWJsZXMgdGhlIGV4Y2hhbmdlIG9mIHdvcmtsb2FkIGlkZW50aXR5IHBvb2wgZXh0ZXJuYWwgY3JlZGVudGlhbHMgZm9yXG4gKiBHb29nbGUgYWNjZXNzIHRva2VucyBieSByZXRyaWV2aW5nIDNyZCBwYXJ0eSB0b2tlbnMgdGhyb3VnaCBhIHVzZXIgc3VwcGxpZWQgZXhlY3V0YWJsZS4gVGhlc2VcbiAqIHNjcmlwdHMvZXhlY3V0YWJsZXMgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIEdvb2dsZSBDbG91ZCBBdXRoIGxpYnJhcmllcy4gVGhlc2VcbiAqIGNyZWRlbnRpYWxzIHBsdWcgaW50byBBREMgYW5kIHdpbGwgY2FsbCB0aGUgc3BlY2lmaWVkIGV4ZWN1dGFibGUgdG8gcmV0cmlldmUgdGhlIDNyZCBwYXJ0eSB0b2tlblxuICogdG8gYmUgZXhjaGFuZ2VkIGZvciBhIEdvb2dsZSBhY2Nlc3MgdG9rZW4uXG4gKlxuICogPHA+VG8gdXNlIHRoZXNlIGNyZWRlbnRpYWxzLCB0aGUgR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfQUxMT1dfRVhFQ1VUQUJMRVMgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAqIG11c3QgYmUgc2V0IHRvICcxJy4gVGhpcyBpcyBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAqXG4gKiA8cD5Cb3RoIE9JREMgYW5kIFNBTUwgYXJlIHN1cHBvcnRlZC4gVGhlIGV4ZWN1dGFibGUgbXVzdCBhZGhlcmUgdG8gYSBzcGVjaWZpYyByZXNwb25zZSBmb3JtYXRcbiAqIGRlZmluZWQgYmVsb3cuXG4gKlxuICogPHA+VGhlIGV4ZWN1dGFibGUgbXVzdCBwcmludCBvdXQgdGhlIDNyZCBwYXJ0eSB0b2tlbiB0byBTVERPVVQgaW4gSlNPTiBmb3JtYXQuIFdoZW4gYW5cbiAqIG91dHB1dF9maWxlIGlzIHNwZWNpZmllZCBpbiB0aGUgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uLCB0aGUgZXhlY3V0YWJsZSBtdXN0IGFsc28gaGFuZGxlIHdyaXRpbmcgdGhlXG4gKiBKU09OIHJlc3BvbnNlIHRvIHRoaXMgZmlsZS5cbiAqXG4gKiA8cHJlPlxuICogT0lEQyByZXNwb25zZSBzYW1wbGU6XG4gKiB7XG4gKiAgIFwidmVyc2lvblwiOiAxLFxuICogICBcInN1Y2Nlc3NcIjogdHJ1ZSxcbiAqICAgXCJ0b2tlbl90eXBlXCI6IFwidXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6aWRfdG9rZW5cIixcbiAqICAgXCJpZF90b2tlblwiOiBcIkhFQURFUi5QQVlMT0FELlNJR05BVFVSRVwiLFxuICogICBcImV4cGlyYXRpb25fdGltZVwiOiAxNjIwNDMzMzQxXG4gKiB9XG4gKlxuICogU0FNTDIgcmVzcG9uc2Ugc2FtcGxlOlxuICoge1xuICogICBcInZlcnNpb25cIjogMSxcbiAqICAgXCJzdWNjZXNzXCI6IHRydWUsXG4gKiAgIFwidG9rZW5fdHlwZVwiOiBcInVybjppZXRmOnBhcmFtczpvYXV0aDp0b2tlbi10eXBlOnNhbWwyXCIsXG4gKiAgIFwic2FtbF9yZXNwb25zZVwiOiBcIi4uLlwiLFxuICogICBcImV4cGlyYXRpb25fdGltZVwiOiAxNjIwNDMzMzQxXG4gKiB9XG4gKlxuICogRXJyb3IgcmVzcG9uc2Ugc2FtcGxlOlxuICoge1xuICogICBcInZlcnNpb25cIjogMSxcbiAqICAgXCJzdWNjZXNzXCI6IGZhbHNlLFxuICogICBcImNvZGVcIjogXCI0MDFcIixcbiAqICAgXCJtZXNzYWdlXCI6IFwiRXJyb3IgbWVzc2FnZS5cIlxuICogfVxuICogPC9wcmU+XG4gKlxuICogPHA+VGhlIFwiZXhwaXJhdGlvbl90aW1lXCIgZmllbGQgaW4gdGhlIEpTT04gcmVzcG9uc2UgaXMgb25seSByZXF1aXJlZCBmb3Igc3VjY2Vzc2Z1bFxuICogcmVzcG9uc2VzIHdoZW4gYW4gb3V0cHV0IGZpbGUgd2FzIHNwZWNpZmllZCBpbiB0aGUgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uXG4gKlxuICogPHA+VGhlIGF1dGggbGlicmFyaWVzIHdpbGwgcG9wdWxhdGUgY2VydGFpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3aWxsIGJlIGFjY2Vzc2libGUgYnkgdGhlXG4gKiBleGVjdXRhYmxlLCBzdWNoIGFzOiBHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9BVURJRU5DRSwgR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfVE9LRU5fVFlQRSxcbiAqIEdPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX0lOVEVSQUNUSVZFLCBHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9JTVBFUlNPTkFURURfRU1BSUwsIGFuZFxuICogR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfT1VUUFVUX0ZJTEUuXG4gKlxuICogPHA+UGxlYXNlIHNlZSB0aGlzIHJlcG9zaXRvcmllcyBSRUFETUUgZm9yIGEgY29tcGxldGUgZXhlY3V0YWJsZSByZXF1ZXN0L3Jlc3BvbnNlIHNwZWNpZmljYXRpb24uXG4gKi9cbmNsYXNzIFBsdWdnYWJsZUF1dGhDbGllbnQgZXh0ZW5kcyBiYXNlZXh0ZXJuYWxjbGllbnRfMS5CYXNlRXh0ZXJuYWxBY2NvdW50Q2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW50aWF0ZXMgYSBQbHVnZ2FibGVBdXRoQ2xpZW50IGluc3RhbmNlIHVzaW5nIHRoZSBwcm92aWRlZCBKU09OXG4gICAgICogb2JqZWN0IGxvYWRlZCBmcm9tIGFuIGV4dGVybmFsIGFjY291bnQgY3JlZGVudGlhbHMgZmlsZS5cbiAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGNyZWRlbnRpYWwgaXMgbm90IGEgdmFsaWQgcGx1Z2dhYmxlIGF1dGggY3JlZGVudGlhbC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgZXh0ZXJuYWwgYWNjb3VudCBvcHRpb25zIG9iamVjdCB0eXBpY2FsbHkgbG9hZGVkIGZyb21cbiAgICAgKiAgIHRoZSBleHRlcm5hbCBhY2NvdW50IEpTT04gY3JlZGVudGlhbCBmaWxlLlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsT3B0aW9ucyAqKkRFUFJFQ0FURUQsIGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlXG4gICAgICogICBgb3B0aW9uc2AgcGFyYW1ldGVyLioqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYmVoYXZpb3IgY3VzdG9taXphdGlvbiBvcHRpb25zLlxuICAgICAqICAgVGhlc2UgY3VycmVudGx5IGN1c3RvbWl6ZSBleHBpcmF0aW9uIHRocmVzaG9sZCB0aW1lIGFuZCB3aGV0aGVyIHRvIHJldHJ5XG4gICAgICogICBvbiA0MDEvNDAzIEFQSSByZXF1ZXN0IGVycm9ycy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG4gICAgICAgIGlmICghb3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZS5leGVjdXRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIFBsdWdnYWJsZSBBdXRoIFwiY3JlZGVudGlhbF9zb3VyY2VcIiBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQgPSBvcHRpb25zLmNyZWRlbnRpYWxfc291cmNlLmV4ZWN1dGFibGUuY29tbWFuZDtcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1hbmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdmFsaWQgUGx1Z2dhYmxlIEF1dGggXCJjcmVkZW50aWFsX3NvdXJjZVwiIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm92aWRlZCB0aW1lb3V0IGV4aXN0cyBhbmQgaWYgaXQgaXMgdmFsaWQuXG4gICAgICAgIGlmIChvcHRpb25zLmNyZWRlbnRpYWxfc291cmNlLmV4ZWN1dGFibGUudGltZW91dF9taWxsaXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0TWlsbGlzID0gREVGQVVMVF9FWEVDVVRBQkxFX1RJTUVPVVRfTUlMTElTO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0TWlsbGlzID0gb3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZS5leGVjdXRhYmxlLnRpbWVvdXRfbWlsbGlzO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dE1pbGxpcyA8IE1JTklNVU1fRVhFQ1VUQUJMRV9USU1FT1VUX01JTExJUyB8fFxuICAgICAgICAgICAgICAgIHRoaXMudGltZW91dE1pbGxpcyA+IE1BWElNVU1fRVhFQ1VUQUJMRV9USU1FT1VUX01JTExJUykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGltZW91dCBtdXN0IGJlIGJldHdlZW4gJHtNSU5JTVVNX0VYRUNVVEFCTEVfVElNRU9VVF9NSUxMSVN9IGFuZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7TUFYSU1VTV9FWEVDVVRBQkxFX1RJTUVPVVRfTUlMTElTfSBtaWxsaXNlY29uZHMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRwdXRGaWxlID0gb3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZS5leGVjdXRhYmxlLm91dHB1dF9maWxlO1xuICAgICAgICB0aGlzLmhhbmRsZXIgPSBuZXcgcGx1Z2dhYmxlX2F1dGhfaGFuZGxlcl8xLlBsdWdnYWJsZUF1dGhIYW5kbGVyKHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IHRoaXMuY29tbWFuZCxcbiAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IHRoaXMudGltZW91dE1pbGxpcyxcbiAgICAgICAgICAgIG91dHB1dEZpbGU6IHRoaXMub3V0cHV0RmlsZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbFNvdXJjZVR5cGUgPSAnZXhlY3V0YWJsZSc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGFuIGV4dGVybmFsIHN1YmplY3QgdG9rZW4gaXMgbmVlZGVkIHRvIGJlIGV4Y2hhbmdlZCBmb3IgYVxuICAgICAqIEdDUCBhY2Nlc3MgdG9rZW4gdmlhIEdDUCBTVFMgZW5kcG9pbnQuXG4gICAgICogVGhpcyB1c2VzIHRoZSBgb3B0aW9ucy5jcmVkZW50aWFsX3NvdXJjZWAgb2JqZWN0IHRvIGZpZ3VyZSBvdXQgaG93XG4gICAgICogdG8gcmV0cmlldmUgdGhlIHRva2VuIHVzaW5nIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBJbiB0aGlzIGNhc2UsXG4gICAgICogdGhpcyBjYWxscyBhIHVzZXIgcHJvdmlkZWQgZXhlY3V0YWJsZSB3aGljaCByZXR1cm5zIHRoZSBzdWJqZWN0IHRva2VuLlxuICAgICAqIFRoZSBsb2dpYyBpcyBzdW1tYXJpemVkIGFzOlxuICAgICAqIDEuIFZhbGlkYXRlZCB0aGF0IHRoZSBleGVjdXRhYmxlIGlzIGFsbG93ZWQgdG8gcnVuLiBUaGVcbiAgICAgKiAgICBHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9BTExPV19FWEVDVVRBQkxFUyBlbnZpcm9ubWVudCBtdXN0IGJlIHNldCB0b1xuICAgICAqICAgIDEgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgICogMi4gSWYgYW4gb3V0cHV0IGZpbGUgaXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCBjaGVjayB0aGUgZmlsZSBsb2NhdGlvblxuICAgICAqICAgIGZvciBhIHJlc3BvbnNlLiBJZiB0aGUgZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zIGEgdmFsaWQgcmVzcG9uc2UsXG4gICAgICogICAgcmV0dXJuIHRoZSBzdWJqZWN0IHRva2VuIGZyb20gdGhlIGZpbGUuXG4gICAgICogMy4gQ2FsbCB0aGUgcHJvdmlkZWQgZXhlY3V0YWJsZSBhbmQgcmV0dXJuIHJlc3BvbnNlLlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXh0ZXJuYWwgc3ViamVjdCB0b2tlbi5cbiAgICAgKi9cbiAgICBhc3luYyByZXRyaWV2ZVN1YmplY3RUb2tlbigpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV4ZWN1dGFibGUgaXMgYWxsb3dlZCB0byBydW4uXG4gICAgICAgIGlmIChwcm9jZXNzLmVudltHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9BTExPV19FWEVDVVRBQkxFU10gIT09ICcxJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnZ2FibGUgQXV0aCBleGVjdXRhYmxlcyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgYWxsb3dlZCB0byBydW4gYnkgJyArXG4gICAgICAgICAgICAgICAgJ3NldHRpbmcgdGhlIEdPT0dMRV9FWFRFUk5BTF9BQ0NPVU5UX0FMTE9XX0VYRUNVVEFCTEVTIGVudmlyb25tZW50ICcgK1xuICAgICAgICAgICAgICAgICdWYXJpYWJsZSB0byAxLicpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleGVjdXRhYmxlUmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8vIFRyeSB0byBnZXQgY2FjaGVkIGV4ZWN1dGFibGUgcmVzcG9uc2UgZnJvbSBvdXRwdXQgZmlsZS5cbiAgICAgICAgaWYgKHRoaXMub3V0cHV0RmlsZSkge1xuICAgICAgICAgICAgZXhlY3V0YWJsZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVyLnJldHJpZXZlQ2FjaGVkUmVzcG9uc2UoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBubyByZXNwb25zZSBmcm9tIG91dHB1dCBmaWxlLCBjYWxsIHRoZSBleGVjdXRhYmxlLlxuICAgICAgICBpZiAoIWV4ZWN1dGFibGVSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gU2V0IHVwIGVudmlyb25tZW50IG1hcCB3aXRoIHJlcXVpcmVkIHZhbHVlcyBmb3IgdGhlIGV4ZWN1dGFibGUuXG4gICAgICAgICAgICBjb25zdCBlbnZNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBlbnZNYXAuc2V0KCdHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9BVURJRU5DRScsIHRoaXMuYXVkaWVuY2UpO1xuICAgICAgICAgICAgZW52TWFwLnNldCgnR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfVE9LRU5fVFlQRScsIHRoaXMuc3ViamVjdFRva2VuVHlwZSk7XG4gICAgICAgICAgICAvLyBBbHdheXMgc2V0IHRvIDAgYmVjYXVzZSBpbnRlcmFjdGl2ZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgICAgICAgICBlbnZNYXAuc2V0KCdHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9JTlRFUkFDVElWRScsICcwJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRGaWxlKSB7XG4gICAgICAgICAgICAgICAgZW52TWFwLnNldCgnR09PR0xFX0VYVEVSTkFMX0FDQ09VTlRfT1VUUFVUX0ZJTEUnLCB0aGlzLm91dHB1dEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUFjY291bnRFbWFpbCA9IHRoaXMuZ2V0U2VydmljZUFjY291bnRFbWFpbCgpO1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VBY2NvdW50RW1haWwpIHtcbiAgICAgICAgICAgICAgICBlbnZNYXAuc2V0KCdHT09HTEVfRVhURVJOQUxfQUNDT1VOVF9JTVBFUlNPTkFURURfRU1BSUwnLCBzZXJ2aWNlQWNjb3VudEVtYWlsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4ZWN1dGFibGVSZXNwb25zZSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVyLnJldHJpZXZlUmVzcG9uc2VGcm9tRXhlY3V0YWJsZShlbnZNYXApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleGVjdXRhYmxlUmVzcG9uc2UudmVyc2lvbiA+IE1BWElNVU1fRVhFQ1VUQUJMRV9WRVJTSU9OKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZlcnNpb24gb2YgZXhlY3V0YWJsZSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgbWF4aW11bSBzdXBwb3J0ZWQgdmVyc2lvbiBpcyAke01BWElNVU1fRVhFQ1VUQUJMRV9WRVJTSU9OfS5gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayB0aGF0IHJlc3BvbnNlIHdhcyBzdWNjZXNzZnVsLlxuICAgICAgICBpZiAoIWV4ZWN1dGFibGVSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhlY3V0YWJsZUVycm9yKGV4ZWN1dGFibGVSZXNwb25zZS5lcnJvck1lc3NhZ2UsIGV4ZWN1dGFibGVSZXNwb25zZS5lcnJvckNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIHRoYXQgcmVzcG9uc2UgY29udGFpbnMgZXhwaXJhdGlvbiB0aW1lIGlmIG91dHB1dCBmaWxlIHdhcyBzcGVjaWZpZWQuXG4gICAgICAgIGlmICh0aGlzLm91dHB1dEZpbGUpIHtcbiAgICAgICAgICAgIGlmICghZXhlY3V0YWJsZVJlc3BvbnNlLmV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGV4ZWN1dGFibGVfcmVzcG9uc2VfMS5JbnZhbGlkRXhwaXJhdGlvblRpbWVGaWVsZEVycm9yKCdUaGUgZXhlY3V0YWJsZSByZXNwb25zZSBtdXN0IGNvbnRhaW4gdGhlIGBleHBpcmF0aW9uX3RpbWVgIGZpZWxkIGZvciBzdWNjZXNzZnVsIHJlc3BvbnNlcyB3aGVuIGFuIG91dHB1dF9maWxlIGhhcyBiZWVuIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayB0aGF0IHJlc3BvbnNlIGlzIG5vdCBleHBpcmVkLlxuICAgICAgICBpZiAoZXhlY3V0YWJsZVJlc3BvbnNlLmlzRXhwaXJlZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4ZWN1dGFibGUgcmVzcG9uc2UgaXMgZXhwaXJlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXR1cm4gc3ViamVjdCB0b2tlbiBmcm9tIHJlc3BvbnNlLlxuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZVJlc3BvbnNlLnN1YmplY3RUb2tlbjtcbiAgICB9XG59XG5leHBvcnRzLlBsdWdnYWJsZUF1dGhDbGllbnQgPSBQbHVnZ2FibGVBdXRoQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FeHRlcm5hbEFjY291bnRDbGllbnQgPSB2b2lkIDA7XG5jb25zdCBiYXNlZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2Jhc2VleHRlcm5hbGNsaWVudFwiKTtcbmNvbnN0IGlkZW50aXR5cG9vbGNsaWVudF8xID0gcmVxdWlyZShcIi4vaWRlbnRpdHlwb29sY2xpZW50XCIpO1xuY29uc3QgYXdzY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hd3NjbGllbnRcIik7XG5jb25zdCBwbHVnZ2FibGVfYXV0aF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL3BsdWdnYWJsZS1hdXRoLWNsaWVudFwiKTtcbi8qKlxuICogRHVtbXkgY2xhc3Mgd2l0aCBubyBjb25zdHJ1Y3Rvci4gRGV2ZWxvcGVycyBhcmUgZXhwZWN0ZWQgdG8gdXNlIGZyb21KU09OLlxuICovXG5jbGFzcyBFeHRlcm5hbEFjY291bnRDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4dGVybmFsQWNjb3VudENsaWVudHMgc2hvdWxkIGJlIGluaXRpYWxpemVkIHZpYTogJyArXG4gICAgICAgICAgICAnRXh0ZXJuYWxBY2NvdW50Q2xpZW50LmZyb21KU09OKCksICcgK1xuICAgICAgICAgICAgJ2RpcmVjdGx5IHZpYSBleHBsaWNpdCBjb25zdHJ1Y3RvcnMsIGVnLiAnICtcbiAgICAgICAgICAgICduZXcgQXdzQ2xpZW50KG9wdGlvbnMpLCBuZXcgSWRlbnRpdHlQb29sQ2xpZW50KG9wdGlvbnMpLCBuZXcnICtcbiAgICAgICAgICAgICdQbHVnZ2FibGVBdXRoQ2xpZW50T3B0aW9ucywgb3IgdmlhICcgK1xuICAgICAgICAgICAgJ25ldyBHb29nbGVBdXRoKG9wdGlvbnMpLmdldENsaWVudCgpJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCB3aWxsIGluc3RhbnRpYXRlIHRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgdHlwZSBvZiBleHRlcm5hbCBhY2NvdW50IGNyZWRlbnRpYWwgZGVwZW5kaW5nIG9uIHRoZVxuICAgICAqIHVuZGVybHlpbmcgY3JlZGVudGlhbCBzb3VyY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGV4dGVybmFsIGFjY291bnQgb3B0aW9ucyBvYmplY3QgdHlwaWNhbGx5IGxvYWRlZFxuICAgICAqICAgZnJvbSB0aGUgZXh0ZXJuYWwgYWNjb3VudCBKU09OIGNyZWRlbnRpYWwgZmlsZS5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbE9wdGlvbnMgKipERVBSRUNBVEVELCBhbGwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZVxuICAgICAqICAgYG9wdGlvbnNgIHBhcmFtZXRlci4qKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJlaGF2aW9yIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAgICAgKiAgIFRoZXNlIGN1cnJlbnRseSBjdXN0b21pemUgZXhwaXJhdGlvbiB0aHJlc2hvbGQgdGltZSBhbmQgd2hldGhlciB0byByZXRyeVxuICAgICAqICAgb24gNDAxLzQwMyBBUEkgcmVxdWVzdCBlcnJvcnMuXG4gICAgICogQHJldHVybiBBIEJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQgaW5zdGFuY2Ugb3IgbnVsbCBpZiB0aGUgb3B0aW9uc1xuICAgICAqICAgcHJvdmlkZWQgZG8gbm90IGNvcnJlc3BvbmQgdG8gYW4gZXh0ZXJuYWwgYWNjb3VudCBjcmVkZW50aWFsLlxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tSlNPTihvcHRpb25zLCBhZGRpdGlvbmFsT3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnR5cGUgPT09IGJhc2VleHRlcm5hbGNsaWVudF8xLkVYVEVSTkFMX0FDQ09VTlRfVFlQRSkge1xuICAgICAgICAgICAgaWYgKChfYSA9IG9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lbnZpcm9ubWVudF9pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXdzY2xpZW50XzEuQXdzQ2xpZW50KG9wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChfYiA9IG9wdGlvbnMuY3JlZGVudGlhbF9zb3VyY2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5leGVjdXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBwbHVnZ2FibGVfYXV0aF9jbGllbnRfMS5QbHVnZ2FibGVBdXRoQ2xpZW50KG9wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaWRlbnRpdHlwb29sY2xpZW50XzEuSWRlbnRpdHlQb29sQ2xpZW50KG9wdGlvbnMsIGFkZGl0aW9uYWxPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5FeHRlcm5hbEFjY291bnRDbGllbnQgPSBFeHRlcm5hbEFjY291bnRDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50ID0gZXhwb3J0cy5FWFRFUk5BTF9BQ0NPVU5UX0FVVEhPUklaRURfVVNFUl9UWVBFID0gdm9pZCAwO1xuY29uc3QgYXV0aGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aGNsaWVudFwiKTtcbmNvbnN0IG9hdXRoMmNvbW1vbl8xID0gcmVxdWlyZShcIi4vb2F1dGgyY29tbW9uXCIpO1xuY29uc3QgZ2F4aW9zXzEgPSByZXF1aXJlKFwiZ2F4aW9zXCIpO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGJhc2VleHRlcm5hbGNsaWVudF8xID0gcmVxdWlyZShcIi4vYmFzZWV4dGVybmFsY2xpZW50XCIpO1xuLyoqXG4gKiBUaGUgY3JlZGVudGlhbHMgSlNPTiBmaWxlIHR5cGUgZm9yIGV4dGVybmFsIGFjY291bnQgYXV0aG9yaXplZCB1c2VyIGNsaWVudHMuXG4gKi9cbmV4cG9ydHMuRVhURVJOQUxfQUNDT1VOVF9BVVRIT1JJWkVEX1VTRVJfVFlQRSA9ICdleHRlcm5hbF9hY2NvdW50X2F1dGhvcml6ZWRfdXNlcic7XG5jb25zdCBERUZBVUxUX1RPS0VOX1VSTCA9ICdodHRwczovL3N0cy57dW5pdmVyc2VEb21haW59L3YxL29hdXRodG9rZW4nO1xuLyoqXG4gKiBIYW5kbGVyIGZvciB0b2tlbiByZWZyZXNoIHJlcXVlc3RzIHNlbnQgdG8gdGhlIHRva2VuX3VybCBlbmRwb2ludCBmb3IgZXh0ZXJuYWxcbiAqIGF1dGhvcml6ZWQgdXNlciBjcmVkZW50aWFscy5cbiAqL1xuY2xhc3MgRXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJIYW5kbGVyIGV4dGVuZHMgb2F1dGgyY29tbW9uXzEuT0F1dGhDbGllbnRBdXRoSGFuZGxlciB7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gRXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJIYW5kbGVyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCBvZiB0aGUgdG9rZW4gcmVmcmVzaCBlbmRwb2ludC5cbiAgICAgKiBAcGFyYW0gdHJhbnNwb3J0ZXIgVGhlIHRyYW5zcG9ydGVyIHRvIHVzZSBmb3IgdGhlIHJlZnJlc2ggcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gY2xpZW50QXV0aGVudGljYXRpb24gVGhlIGNsaWVudCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyB0byB1c2VcbiAgICAgKiAgIGZvciB0aGUgcmVmcmVzaCByZXF1ZXN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHVybCwgdHJhbnNwb3J0ZXIsIGNsaWVudEF1dGhlbnRpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudEF1dGhlbnRpY2F0aW9uKTtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0ZXIgPSB0cmFuc3BvcnRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVxdWVzdHMgYSBuZXcgYWNjZXNzIHRva2VuIGZyb20gdGhlIHRva2VuX3VybCBlbmRwb2ludCB1c2luZyB0aGUgcHJvdmlkZWRcbiAgICAgKiAgIHJlZnJlc2ggdG9rZW4uXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0byB1c2UgdG8gZ2VuZXJhdGUgYSBuZXcgYWNjZXNzIHRva2VuLlxuICAgICAqIEBwYXJhbSBhZGRpdGlvbmFsSGVhZGVycyBPcHRpb25hbCBhZGRpdGlvbmFsIGhlYWRlcnMgdG8gcGFzcyBhbG9uZyB0aGVcbiAgICAgKiAgIHJlcXVlc3QuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZWZyZXNoIHJlc3BvbnNlIGNvbnRhaW5pbmdcbiAgICAgKiAgIHRoZSByZXF1ZXN0ZWQgYWNjZXNzIHRva2VuIGFuZCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4sIGFkZGl0aW9uYWxIZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxIZWFkZXJzLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgLi4uRXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJIYW5kbGVyLlJFVFJZX0NPTkZJRyxcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiB2YWx1ZXMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBcHBseSBPQXV0aCBjbGllbnQgYXV0aGVudGljYXRpb24uXG4gICAgICAgIHRoaXMuYXBwbHlDbGllbnRBdXRoZW50aWNhdGlvbk9wdGlvbnMob3B0cyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgcmVzcG9uc2UuXG4gICAgICAgICAgICBjb25zdCB0b2tlblJlZnJlc2hSZXNwb25zZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0b2tlblJlZnJlc2hSZXNwb25zZS5yZXMgPSByZXNwb25zZTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlblJlZnJlc2hSZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBlcnJvciB0byBPQXV0aEVycm9yLlxuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgZ2F4aW9zXzEuR2F4aW9zRXJyb3IgJiYgZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoMCwgb2F1dGgyY29tbW9uXzEuZ2V0RXJyb3JGcm9tT0F1dGhFcnJvclJlc3BvbnNlKShlcnJvci5yZXNwb25zZS5kYXRhLCBcbiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBvdGhlciBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gICAgICAgICAgICAgICAgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVxdWVzdCBjb3VsZCBmYWlsIGJlZm9yZSB0aGUgc2VydmVyIHJlc3BvbmRzLlxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEV4dGVybmFsIEFjY291bnQgQXV0aG9yaXplZCBVc2VyIENsaWVudC4gVGhpcyBpcyB1c2VkIGZvciBPQXV0aDIgY3JlZGVudGlhbHNcbiAqIHNvdXJjZWQgdXNpbmcgZXh0ZXJuYWwgaWRlbnRpdGllcyB0aHJvdWdoIFdvcmtmb3JjZSBJZGVudGl0eSBGZWRlcmF0aW9uLlxuICogT2J0YWluaW5nIHRoZSBpbml0aWFsIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbiBjYW4gYmUgZG9uZSB0aHJvdWdoIHRoZVxuICogR29vZ2xlIENsb3VkIENMSS5cbiAqL1xuY2xhc3MgRXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJDbGllbnQgZXh0ZW5kcyBhdXRoY2xpZW50XzEuQXV0aENsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGFuIEV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50IGluc3RhbmNlcyB1c2luZyB0aGVcbiAgICAgKiBwcm92aWRlZCBKU09OIG9iamVjdCBsb2FkZWQgZnJvbSBhIGNyZWRlbnRpYWxzIGZpbGVzLlxuICAgICAqIEFuIGVycm9yIGlzIHRocm93cyBpZiB0aGUgY3JlZGVudGlhbCBpcyBub3QgdmFsaWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGV4dGVybmFsIGFjY291bnQgYXV0aG9yaXplZCB1c2VyIG9wdGlvbiBvYmplY3QgdHlwaWNhbGx5XG4gICAgICogICBmcm9tIHRoZSBleHRlcm5hbCBhY2NvdXRuIGF1dGhvcml6ZWQgdXNlciBKU09OIGNyZWRlbnRpYWwgZmlsZS5cbiAgICAgKiBAcGFyYW0gYWRkaXRpb25hbE9wdGlvbnMgKipERVBSRUNBVEVELCBhbGwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZVxuICAgICAqICAgYG9wdGlvbnNgIHBhcmFtZXRlci4qKiBPcHRpb25hbCBhZGRpdGlvbmFsIGJlaGF2aW9yIGN1c3RvbWl6YXRpb24gb3B0aW9ucy5cbiAgICAgKiAgIFRoZXNlIGN1cnJlbnRseSBjdXN0b21pemUgZXhwaXJhdGlvbiB0aHJlc2hvbGQgdGltZSBhbmQgd2hldGhlciB0byByZXRyeVxuICAgICAqICAgb24gNDAxLzQwMyBBUEkgcmVxdWVzdCBlcnJvcnMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgYWRkaXRpb25hbE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcih7IC4uLm9wdGlvbnMsIC4uLmFkZGl0aW9uYWxPcHRpb25zIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy51bml2ZXJzZV9kb21haW4pIHtcbiAgICAgICAgICAgIHRoaXMudW5pdmVyc2VEb21haW4gPSBvcHRpb25zLnVuaXZlcnNlX2RvbWFpbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IG9wdGlvbnMucmVmcmVzaF90b2tlbjtcbiAgICAgICAgY29uc3QgY2xpZW50QXV0aCA9IHtcbiAgICAgICAgICAgIGNvbmZpZGVudGlhbENsaWVudFR5cGU6ICdiYXNpYycsXG4gICAgICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRfaWQsXG4gICAgICAgICAgICBjbGllbnRTZWNyZXQ6IG9wdGlvbnMuY2xpZW50X3NlY3JldCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5leHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckhhbmRsZXIgPVxuICAgICAgICAgICAgbmV3IEV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VySGFuZGxlcigoX2EgPSBvcHRpb25zLnRva2VuX3VybCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UT0tFTl9VUkwucmVwbGFjZSgne3VuaXZlcnNlRG9tYWlufScsIHRoaXMudW5pdmVyc2VEb21haW4pLCB0aGlzLnRyYW5zcG9ydGVyLCBjbGllbnRBdXRoKTtcbiAgICAgICAgdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMucXVvdGFQcm9qZWN0SWQgPSBvcHRpb25zLnF1b3RhX3Byb2plY3RfaWQ7XG4gICAgICAgIC8vIEFzIHRocmVzaG9sZCBjb3VsZCBiZSB6ZXJvLFxuICAgICAgICAvLyBlYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXMgfHwgRVhQSVJBVElPTl9USU1FX09GRlNFVCB3aWxsIG92ZXJyaWRlIHRoZVxuICAgICAgICAvLyB6ZXJvIHZhbHVlLlxuICAgICAgICBpZiAodHlwZW9mIChhZGRpdGlvbmFsT3B0aW9ucyA9PT0gbnVsbCB8fCBhZGRpdGlvbmFsT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWRkaXRpb25hbE9wdGlvbnMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzKSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzID0gYmFzZWV4dGVybmFsY2xpZW50XzEuRVhQSVJBVElPTl9USU1FX09GRlNFVDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzID0gYWRkaXRpb25hbE9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoT25GYWlsdXJlID0gISEoYWRkaXRpb25hbE9wdGlvbnMgPT09IG51bGwgfHwgYWRkaXRpb25hbE9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxPcHRpb25zLmZvcmNlUmVmcmVzaE9uRmFpbHVyZSk7XG4gICAgfVxuICAgIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgICAgICAvLyBJZiBjYWNoZWQgYWNjZXNzIHRva2VuIGlzIHVuYXZhaWxhYmxlIG9yIGV4cGlyZWQsIGZvcmNlIHJlZnJlc2guXG4gICAgICAgIGlmICghdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbiB8fCB0aGlzLmlzRXhwaXJlZCh0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHVybiBHQ1AgYWNjZXNzIHRva2VuIGluIEdldEFjY2Vzc1Rva2VuUmVzcG9uc2UgZm9ybWF0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IHRoaXMuY2FjaGVkQWNjZXNzVG9rZW4uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgcmVzOiB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuLnJlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0UmVxdWVzdEhlYWRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW5SZXNwb25zZS50b2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycyk7XG4gICAgfVxuICAgIHJlcXVlc3Qob3B0cywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RBc3luYyhvcHRzKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlLCBlLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFzeW5jKG9wdHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHByb3ZpZGVkIEhUVFAgcmVxdWVzdCwgcHJvY2Vzc2VzIGl0IGFuZCByZXNvbHZlcyB3aXRoIHRoZVxuICAgICAqIHJldHVybmVkIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBIVFRQIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gcmVBdXRoUmV0cmllZCBXaGV0aGVyIHRoZSBjdXJyZW50IGF0dGVtcHQgaXMgYSByZXRyeSBhZnRlciBhIGZhaWxlZCBhdHRlbXB0IGR1ZSB0byBhbiBhdXRoIGZhaWx1cmUuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIGFzeW5jIHJlcXVlc3RBc3luYyhvcHRzLCByZUF1dGhSZXRyaWVkID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgICAgICAgICBvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnMgJiYgcmVxdWVzdEhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXSkge1xuICAgICAgICAgICAgICAgIG9wdHMuaGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddID1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbJ3gtZ29vZy11c2VyLXByb2plY3QnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SGVhZGVycyAmJiByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydGVyLnJlcXVlc3Qob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGUucmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlcy5zdGF0dXM7XG4gICAgICAgICAgICAgICAgLy8gUmV0cnkgdGhlIHJlcXVlc3QgZm9yIG1ldGFkYXRhIGlmIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEgYXJlIHRydWU6XG4gICAgICAgICAgICAgICAgLy8gLSBXZSBoYXZlbid0IGFscmVhZHkgcmV0cmllZC4gIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gcmV0cnkgb25jZS5cbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXNwb25zZSB3YXMgYSA0MDEgb3IgYSA0MDNcbiAgICAgICAgICAgICAgICAvLyAtIFRoZSByZXF1ZXN0IGRpZG4ndCBzZW5kIGEgcmVhZGFibGVTdHJlYW1cbiAgICAgICAgICAgICAgICAvLyAtIGZvcmNlUmVmcmVzaE9uRmFpbHVyZSBpcyB0cnVlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFkYWJsZVN0cmVhbSA9IHJlcy5jb25maWcuZGF0YSBpbnN0YW5jZW9mIHN0cmVhbS5SZWFkYWJsZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhFcnIgPSBzdGF0dXNDb2RlID09PSA0MDEgfHwgc3RhdHVzQ29kZSA9PT0gNDAzO1xuICAgICAgICAgICAgICAgIGlmICghcmVBdXRoUmV0cmllZCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0F1dGhFcnIgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVhZGFibGVTdHJlYW0gJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2hPbkZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0QXN5bmMob3B0cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvcmNlcyB0b2tlbiByZWZyZXNoLCBldmVuIGlmIHVuZXhwaXJlZCB0b2tlbnMgYXJlIGN1cnJlbnRseSBjYWNoZWQuXG4gICAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZWZyZXNoZWQgY3JlZGVudGlhbC5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoQWNjZXNzVG9rZW5Bc3luYygpIHtcbiAgICAgICAgLy8gUmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIHVzaW5nIHRoZSByZWZyZXNoIHRva2VuLlxuICAgICAgICBjb25zdCByZWZyZXNoUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VySGFuZGxlci5yZWZyZXNoVG9rZW4odGhpcy5yZWZyZXNoVG9rZW4pO1xuICAgICAgICB0aGlzLmNhY2hlZEFjY2Vzc1Rva2VuID0ge1xuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiByZWZyZXNoUmVzcG9uc2UuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgcmVmcmVzaFJlc3BvbnNlLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgICAgICAgICAgcmVzOiByZWZyZXNoUmVzcG9uc2UucmVzLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVmcmVzaFJlc3BvbnNlLnJlZnJlc2hfdG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSByZWZyZXNoUmVzcG9uc2UucmVmcmVzaF90b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRBY2Nlc3NUb2tlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCBvciBub3QuXG4gICAgICogSWYgdGhlcmUgaXMgbm8gZXhwaXJ5IHRpbWUsIGFzc3VtZXMgdGhlIHRva2VuIGlzIG5vdCBleHBpcmVkIG9yIGV4cGlyaW5nLlxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gY2hlY2sgZm9yIGV4cGlyYXRpb24uXG4gICAgICogQHJldHVybiBXaGV0aGVyIHRoZSBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCBvciBub3QuXG4gICAgICovXG4gICAgaXNFeHBpcmVkKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICByZXR1cm4gY3JlZGVudGlhbHMuZXhwaXJ5X2RhdGVcbiAgICAgICAgICAgID8gbm93ID49IGNyZWRlbnRpYWxzLmV4cGlyeV9kYXRlIC0gdGhpcy5lYWdlclJlZnJlc2hUaHJlc2hvbGRNaWxsaXNcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0cy5FeHRlcm5hbEFjY291bnRBdXRob3JpemVkVXNlckNsaWVudCA9IEV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9Hb29nbGVBdXRoX2luc3RhbmNlcywgX0dvb2dsZUF1dGhfcGVuZGluZ0F1dGhDbGllbnQsIF9Hb29nbGVBdXRoX3ByZXBhcmVBbmRDYWNoZUNsaWVudCwgX0dvb2dsZUF1dGhfZGV0ZXJtaW5lQ2xpZW50O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Hb29nbGVBdXRoID0gZXhwb3J0cy5Hb29nbGVBdXRoRXhjZXB0aW9uTWVzc2FnZXMgPSBleHBvcnRzLkNMT1VEX1NES19DTElFTlRfSUQgPSB2b2lkIDA7XG5jb25zdCBjaGlsZF9wcm9jZXNzXzEgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgZ2NwTWV0YWRhdGEgPSByZXF1aXJlKFwiZ2NwLW1ldGFkYXRhXCIpO1xuY29uc3Qgb3MgPSByZXF1aXJlKFwib3NcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoXCIuLi9jcnlwdG8vY3J5cHRvXCIpO1xuY29uc3QgdHJhbnNwb3J0ZXJzXzEgPSByZXF1aXJlKFwiLi4vdHJhbnNwb3J0ZXJzXCIpO1xuY29uc3QgY29tcHV0ZWNsaWVudF8xID0gcmVxdWlyZShcIi4vY29tcHV0ZWNsaWVudFwiKTtcbmNvbnN0IGlkdG9rZW5jbGllbnRfMSA9IHJlcXVpcmUoXCIuL2lkdG9rZW5jbGllbnRcIik7XG5jb25zdCBlbnZEZXRlY3RfMSA9IHJlcXVpcmUoXCIuL2VudkRldGVjdFwiKTtcbmNvbnN0IGp3dGNsaWVudF8xID0gcmVxdWlyZShcIi4vand0Y2xpZW50XCIpO1xuY29uc3QgcmVmcmVzaGNsaWVudF8xID0gcmVxdWlyZShcIi4vcmVmcmVzaGNsaWVudFwiKTtcbmNvbnN0IGltcGVyc29uYXRlZF8xID0gcmVxdWlyZShcIi4vaW1wZXJzb25hdGVkXCIpO1xuY29uc3QgZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2V4dGVybmFsY2xpZW50XCIpO1xuY29uc3QgYmFzZWV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9iYXNlZXh0ZXJuYWxjbGllbnRcIik7XG5jb25zdCBhdXRoY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoY2xpZW50XCIpO1xuY29uc3QgZXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2V4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50XCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5leHBvcnRzLkNMT1VEX1NES19DTElFTlRfSUQgPSAnNzY0MDg2MDUxODUwLTZxcjRwNmdwaTZobjUwNnB0OGVqdXE4M2RpMzQxaHVyLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tJztcbmV4cG9ydHMuR29vZ2xlQXV0aEV4Y2VwdGlvbk1lc3NhZ2VzID0ge1xuICAgIEFQSV9LRVlfV0lUSF9DUkVERU5USUFMUzogJ0FQSSBLZXlzIGFuZCBDcmVkZW50aWFscyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYW5kIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicsXG4gICAgTk9fUFJPSkVDVF9JRF9GT1VORDogJ1VuYWJsZSB0byBkZXRlY3QgYSBQcm9qZWN0IElkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBcXG4nICtcbiAgICAgICAgJ1RvIGxlYXJuIG1vcmUgYWJvdXQgYXV0aGVudGljYXRpb24gYW5kIEdvb2dsZSBBUElzLCB2aXNpdDogXFxuJyArXG4gICAgICAgICdodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZG9jcy9hdXRoZW50aWNhdGlvbi9nZXR0aW5nLXN0YXJ0ZWQnLFxuICAgIE5PX0NSRURFTlRJQUxTX0ZPVU5EOiAnVW5hYmxlIHRvIGZpbmQgY3JlZGVudGlhbHMgaW4gY3VycmVudCBlbnZpcm9ubWVudC4gXFxuJyArXG4gICAgICAgICdUbyBsZWFybiBtb3JlIGFib3V0IGF1dGhlbnRpY2F0aW9uIGFuZCBHb29nbGUgQVBJcywgdmlzaXQ6IFxcbicgK1xuICAgICAgICAnaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2RvY3MvYXV0aGVudGljYXRpb24vZ2V0dGluZy1zdGFydGVkJyxcbiAgICBOT19BRENfRk9VTkQ6ICdDb3VsZCBub3QgbG9hZCB0aGUgZGVmYXVsdCBjcmVkZW50aWFscy4gQnJvd3NlIHRvIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL2dldHRpbmctc3RhcnRlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgIE5PX1VOSVZFUlNFX0RPTUFJTl9GT1VORDogJ1VuYWJsZSB0byBkZXRlY3QgYSBVbml2ZXJzZSBEb21haW4gaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuXFxuJyArXG4gICAgICAgICdUbyBsZWFybiBtb3JlIGFib3V0IFVuaXZlcnNlIERvbWFpbiByZXRyaWV2YWwsIHZpc2l0OiBcXG4nICtcbiAgICAgICAgJ2h0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvbWV0YWRhdGEvcHJlZGVmaW5lZC1tZXRhZGF0YS1rZXlzJyxcbn07XG5jbGFzcyBHb29nbGVBdXRoIHtcbiAgICAvLyBOb3RlOiAgdGhpcyBwcm9wZXJseSBpcyBvbmx5IHB1YmxpYyB0byBzYXRpc2Z5IHVuaXQgdGVzdHMuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy81MjI4XG4gICAgZ2V0IGlzR0NFKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0lzR0NFO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGlzIHJlc29sdmVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgb2YgcHJlY2VkZW5jZTpcbiAgICAgKiAtIHtAbGluayBHb29nbGVBdXRoT3B0aW9ucy5jcmVkZW50aWFscyBgY3JlZGVudGlhbHNgfVxuICAgICAqIC0ge0BsaW5rIEdvb2dsZUF1dGhPcHRpb25zLmtleUZpbGVuYW1lIGBrZXlGaWxlbmFtZWB9XG4gICAgICogLSB7QGxpbmsgR29vZ2xlQXV0aE9wdGlvbnMua2V5RmlsZSBga2V5RmlsZWB9XG4gICAgICpcbiAgICAgKiB7QGxpbmsgR29vZ2xlQXV0aE9wdGlvbnMuY2xpZW50T3B0aW9ucyBgY2xpZW50T3B0aW9uc2B9IGFyZSBwYXNzZWQgdG8gdGhlXG4gICAgICoge0BsaW5rIEF1dGhDbGllbnQgYEF1dGhDbGllbnRgc30uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgICAgICBfR29vZ2xlQXV0aF9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2FjaGVzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhdXRoIGxheWVyIGlzIHJ1bm5pbmcgb24gR29vZ2xlXG4gICAgICAgICAqIENvbXB1dGUgRW5naW5lLlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jaGVja0lzR0NFID0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBUbyBzYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgSlNPTiBjcmVkZW50aWFsIGZpbGVcbiAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FjaGVkQ3JlZGVudGlhbCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHBlbmRpbmcge0BsaW5rIEF1dGhDbGllbnR9LiBVc2VkIGZvciBjb25jdXJyZW50IHtAbGluayBHb29nbGVBdXRoLmdldENsaWVudH0gY2FsbHMuXG4gICAgICAgICAqL1xuICAgICAgICBfR29vZ2xlQXV0aF9wZW5kaW5nQXV0aENsaWVudC5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIHRoaXMuY2xpZW50T3B0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZWRQcm9qZWN0SWQgPSBvcHRzLnByb2plY3RJZCB8fCBudWxsO1xuICAgICAgICB0aGlzLmNhY2hlZENyZWRlbnRpYWwgPSBvcHRzLmF1dGhDbGllbnQgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5rZXlGaWxlbmFtZSA9IG9wdHMua2V5RmlsZW5hbWUgfHwgb3B0cy5rZXlGaWxlO1xuICAgICAgICB0aGlzLnNjb3BlcyA9IG9wdHMuc2NvcGVzO1xuICAgICAgICB0aGlzLmNsaWVudE9wdGlvbnMgPSBvcHRzLmNsaWVudE9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuanNvbkNvbnRlbnQgPSBvcHRzLmNyZWRlbnRpYWxzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gb3B0cy5hcGlLZXkgfHwgdGhpcy5jbGllbnRPcHRpb25zLmFwaUtleSB8fCBudWxsO1xuICAgICAgICAvLyBDYW5ub3QgdXNlIGJvdGggQVBJIEtleSArIENyZWRlbnRpYWxzXG4gICAgICAgIGlmICh0aGlzLmFwaUtleSAmJiAodGhpcy5qc29uQ29udGVudCB8fCB0aGlzLmNsaWVudE9wdGlvbnMuY3JlZGVudGlhbHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihleHBvcnRzLkdvb2dsZUF1dGhFeGNlcHRpb25NZXNzYWdlcy5BUElfS0VZX1dJVEhfQ1JFREVOVElBTFMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnVuaXZlcnNlRG9tYWluKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWVudE9wdGlvbnMudW5pdmVyc2VEb21haW4gPSBvcHRzLnVuaXZlcnNlRG9tYWluO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEdBUElDIGNsaWVudCBsaWJyYXJpZXMgc2hvdWxkIGFsd2F5cyB1c2Ugc2VsZi1zaWduZWQgSldUcy4gVGhlIGZvbGxvd2luZ1xuICAgIC8vIHZhcmlhYmxlcyBhcmUgc2V0IG9uIHRoZSBKV1QgY2xpZW50IGluIG9yZGVyIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGxpYnJhcnksXG4gICAgLy8gYW5kIHNpZ24gdGhlIEpXVCB3aXRoIHRoZSBjb3JyZWN0IGF1ZGllbmNlIGFuZCBzY29wZXMgKGlmIG5vdCBzdXBwbGllZCkuXG4gICAgc2V0R2FwaWNKV1RWYWx1ZXMoY2xpZW50KSB7XG4gICAgICAgIGNsaWVudC5kZWZhdWx0U2VydmljZVBhdGggPSB0aGlzLmRlZmF1bHRTZXJ2aWNlUGF0aDtcbiAgICAgICAgY2xpZW50LnVzZUpXVEFjY2Vzc1dpdGhTY29wZSA9IHRoaXMudXNlSldUQWNjZXNzV2l0aFNjb3BlO1xuICAgICAgICBjbGllbnQuZGVmYXVsdFNjb3BlcyA9IHRoaXMuZGVmYXVsdFNjb3BlcztcbiAgICB9XG4gICAgZ2V0UHJvamVjdElkKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5nZXRQcm9qZWN0SWRBc3luYygpLnRoZW4ociA9PiBjYWxsYmFjayhudWxsLCByKSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvamVjdElkQXN5bmMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIHRlbXBvcmFyeSBtZXRob2QgZm9yIGludGVybmFsIGBnZXRQcm9qZWN0SWRgIHVzYWdlcyB3aGVyZSBgbnVsbGAgaXNcbiAgICAgKiBhY2NlcHRhYmxlLiBJbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLCBgZ2V0UHJvamVjdElkYCBzaG91bGQgcmV0dXJuIGBudWxsYFxuICAgICAqIChhcyB0aGUgYFByb21pc2U8c3RyaW5nIHwgbnVsbD5gIGJhc2Ugc2lnbmF0dXJlIGRlc2NyaWJlcykgYW5kIHRoaXMgcHJpdmF0ZVxuICAgICAqIG1ldGhvZCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHByb2plY3QgaWQgKG9yIGBudWxsYClcbiAgICAgKi9cbiAgICBhc3luYyBnZXRQcm9qZWN0SWRPcHRpb25hbCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFByb2plY3RJZCgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID09PSBleHBvcnRzLkdvb2dsZUF1dGhFeGNlcHRpb25NZXNzYWdlcy5OT19QUk9KRUNUX0lEX0ZPVU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgcHJpdmF0ZSBtZXRob2QgZm9yIGZpbmRpbmcgYW5kIGNhY2hpbmcgYSBwcm9qZWN0SWQuXG4gICAgICpcbiAgICAgKiBTdXBwb3J0cyBlbnZpcm9ubWVudHMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZTpcbiAgICAgKiAtIEdDTE9VRF9QUk9KRUNUIG9yIEdPT0dMRV9DTE9VRF9QUk9KRUNUIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgICogLSBHT09HTEVfQVBQTElDQVRJT05fQ1JFREVOVElBTFMgSlNPTiBmaWxlXG4gICAgICogLSBDbG91ZCBTREs6IGBnY2xvdWQgY29uZmlnIGNvbmZpZy1oZWxwZXIgLS1mb3JtYXQganNvbmBcbiAgICAgKiAtIEdDRSBwcm9qZWN0IElEIGZyb20gbWV0YWRhdGEgc2VydmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBwcm9qZWN0SWRcbiAgICAgKi9cbiAgICBhc3luYyBmaW5kQW5kQ2FjaGVQcm9qZWN0SWQoKSB7XG4gICAgICAgIGxldCBwcm9qZWN0SWQgPSBudWxsO1xuICAgICAgICBwcm9qZWN0SWQgfHwgKHByb2plY3RJZCA9IGF3YWl0IHRoaXMuZ2V0UHJvZHVjdGlvblByb2plY3RJZCgpKTtcbiAgICAgICAgcHJvamVjdElkIHx8IChwcm9qZWN0SWQgPSBhd2FpdCB0aGlzLmdldEZpbGVQcm9qZWN0SWQoKSk7XG4gICAgICAgIHByb2plY3RJZCB8fCAocHJvamVjdElkID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0U2VydmljZVByb2plY3RJZCgpKTtcbiAgICAgICAgcHJvamVjdElkIHx8IChwcm9qZWN0SWQgPSBhd2FpdCB0aGlzLmdldEdDRVByb2plY3RJZCgpKTtcbiAgICAgICAgcHJvamVjdElkIHx8IChwcm9qZWN0SWQgPSBhd2FpdCB0aGlzLmdldEV4dGVybmFsQWNjb3VudENsaWVudFByb2plY3RJZCgpKTtcbiAgICAgICAgaWYgKHByb2plY3RJZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVkUHJvamVjdElkID0gcHJvamVjdElkO1xuICAgICAgICAgICAgcmV0dXJuIHByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihleHBvcnRzLkdvb2dsZUF1dGhFeGNlcHRpb25NZXNzYWdlcy5OT19QUk9KRUNUX0lEX0ZPVU5EKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRQcm9qZWN0SWRBc3luYygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlZFByb2plY3RJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2ZpbmRQcm9qZWN0SWRQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLl9maW5kUHJvamVjdElkUHJvbWlzZSA9IHRoaXMuZmluZEFuZENhY2hlUHJvamVjdElkKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRQcm9qZWN0SWRQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSB1bml2ZXJzZSBkb21haW4gZnJvbSB0aGUgbWV0YWRhdGEgc2VydmVyIHZpYVxuICAgICAqIHtAbGluayBnY3BNZXRhZGF0YS51bml2ZXJzZX0uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhIHVuaXZlcnNlIGRvbWFpblxuICAgICAqL1xuICAgIGFzeW5jIGdldFVuaXZlcnNlRG9tYWluRnJvbU1ldGFkYXRhU2VydmVyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCB1bml2ZXJzZURvbWFpbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHVuaXZlcnNlRG9tYWluID0gYXdhaXQgZ2NwTWV0YWRhdGEudW5pdmVyc2UoJ3VuaXZlcnNlLWRvbWFpbicpO1xuICAgICAgICAgICAgdW5pdmVyc2VEb21haW4gfHwgKHVuaXZlcnNlRG9tYWluID0gYXV0aGNsaWVudF8xLkRFRkFVTFRfVU5JVkVSU0UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSAmJiAoKF9hID0gZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnJlc3BvbnNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RhdHVzKSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgdW5pdmVyc2VEb21haW4gPSBhdXRoY2xpZW50XzEuREVGQVVMVF9VTklWRVJTRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuaXZlcnNlRG9tYWluO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMsIGNhY2hlcywgYW5kIHJldHVybnMgdGhlIHVuaXZlcnNlIGRvbWFpbiBpbiB0aGUgZm9sbG93aW5nIG9yZGVyXG4gICAgICogb2YgcHJlY2VkZW5jZTpcbiAgICAgKiAtIFRoZSB1bml2ZXJzZSBkb21haW4gaW4ge0BsaW5rIEdvb2dsZUF1dGguY2xpZW50T3B0aW9uc31cbiAgICAgKiAtIEFuIGV4aXN0aW5nIG9yIEFEQyB7QGxpbmsgQXV0aENsaWVudH0ncyB1bml2ZXJzZSBkb21haW5cbiAgICAgKiAtIHtAbGluayBnY3BNZXRhZGF0YS51bml2ZXJzZX0sIGlmIHtAbGluayBDb21wdXRlfSBjbGllbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSB1bml2ZXJzZSBkb21haW5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRVbml2ZXJzZURvbWFpbigpIHtcbiAgICAgICAgbGV0IHVuaXZlcnNlRG9tYWluID0gKDAsIHV0aWxfMS5vcmlnaW5hbE9yQ2FtZWxPcHRpb25zKSh0aGlzLmNsaWVudE9wdGlvbnMpLmdldCgndW5pdmVyc2VfZG9tYWluJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB1bml2ZXJzZURvbWFpbiAhPT0gbnVsbCAmJiB1bml2ZXJzZURvbWFpbiAhPT0gdm9pZCAwID8gdW5pdmVyc2VEb21haW4gOiAodW5pdmVyc2VEb21haW4gPSAoYXdhaXQgdGhpcy5nZXRDbGllbnQoKSkudW5pdmVyc2VEb21haW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gY2xpZW50IG9yIEFEQyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgICAgICB1bml2ZXJzZURvbWFpbiAhPT0gbnVsbCAmJiB1bml2ZXJzZURvbWFpbiAhPT0gdm9pZCAwID8gdW5pdmVyc2VEb21haW4gOiAodW5pdmVyc2VEb21haW4gPSBhdXRoY2xpZW50XzEuREVGQVVMVF9VTklWRVJTRSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuaXZlcnNlRG9tYWluO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBBbnkgc2NvcGVzICh1c2VyLXNwZWNpZmllZCBvciBkZWZhdWx0IHNjb3BlcyBzcGVjaWZpZWQgYnkgdGhlXG4gICAgICogICBjbGllbnQgbGlicmFyeSkgdGhhdCBuZWVkIHRvIGJlIHNldCBvbiB0aGUgY3VycmVudCBBdXRoIGNsaWVudC5cbiAgICAgKi9cbiAgICBnZXRBbnlTY29wZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlcyB8fCB0aGlzLmRlZmF1bHRTY29wZXM7XG4gICAgfVxuICAgIGdldEFwcGxpY2F0aW9uRGVmYXVsdChvcHRpb25zT3JDYWxsYmFjayA9IHt9LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgb3B0aW9ucztcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zT3JDYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JDYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25EZWZhdWx0QXN5bmMob3B0aW9ucykudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIuY3JlZGVudGlhbCwgci5wcm9qZWN0SWQpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbkRlZmF1bHRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkRlZmF1bHRBc3luYyhvcHRpb25zID0ge30pIHtcbiAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYSBjYWNoZWQgY3JlZGVudGlhbCwgcmV0dXJuIGl0LlxuICAgICAgICAvLyBUaGlzIHdpbGwgYWxzbyBwcmVzZXJ2ZSBvbmUncyBjb25maWd1cmVkIHF1b3RhIHByb2plY3QsIGluIGNhc2UgdGhleVxuICAgICAgICAvLyBzZXQgb25lIGRpcmVjdGx5IG9uIHRoZSBjcmVkZW50aWFsIHByZXZpb3VzbHkuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlZENyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIC8vIGNhY2hlLCB3aGlsZSBwcmVzZXJ2aW5nIGV4aXN0aW5nIHF1b3RhIHByb2plY3QgcHJlZmVyZW5jZXNcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Hb29nbGVBdXRoX2luc3RhbmNlcywgXCJtXCIsIF9Hb29nbGVBdXRoX3ByZXBhcmVBbmRDYWNoZUNsaWVudCkuY2FsbCh0aGlzLCB0aGlzLmNhY2hlZENyZWRlbnRpYWwsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjcmVkZW50aWFsO1xuICAgICAgICAvLyBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIGxvY2FsIGVudmlyb25tZW50IHZhcmlhYmxlIHBvaW50aW5nIHRvIHRoZVxuICAgICAgICAvLyBsb2NhdGlvbiBvZiB0aGUgY3JlZGVudGlhbCBmaWxlLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGxvY2FsXG4gICAgICAgIC8vIGRldmVsb3BlciBzY2VuYXJpb3MuXG4gICAgICAgIGNyZWRlbnRpYWwgPVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5R2V0QXBwbGljYXRpb25DcmVkZW50aWFsc0Zyb21FbnZpcm9ubWVudFZhcmlhYmxlKG9wdGlvbnMpO1xuICAgICAgICBpZiAoY3JlZGVudGlhbCkge1xuICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBqd3RjbGllbnRfMS5KV1QpIHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLnNjb3BlcyA9IHRoaXMuc2NvcGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIGJhc2VleHRlcm5hbGNsaWVudF8xLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLnNjb3BlcyA9IHRoaXMuZ2V0QW55U2NvcGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQpLmNhbGwodGhpcywgY3JlZGVudGlhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTG9vayBpbiB0aGUgd2VsbC1rbm93biBjcmVkZW50aWFsIGZpbGUgbG9jYXRpb24uXG4gICAgICAgIGNyZWRlbnRpYWwgPVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5R2V0QXBwbGljYXRpb25DcmVkZW50aWFsc0Zyb21XZWxsS25vd25GaWxlKG9wdGlvbnMpO1xuICAgICAgICBpZiAoY3JlZGVudGlhbCkge1xuICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwgaW5zdGFuY2VvZiBqd3RjbGllbnRfMS5KV1QpIHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLnNjb3BlcyA9IHRoaXMuc2NvcGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbCBpbnN0YW5jZW9mIGJhc2VleHRlcm5hbGNsaWVudF8xLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsLnNjb3BlcyA9IHRoaXMuZ2V0QW55U2NvcGVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQpLmNhbGwodGhpcywgY3JlZGVudGlhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgb24gR0NFLlxuICAgICAgICBpZiAoYXdhaXQgdGhpcy5fY2hlY2tJc0dDRSgpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNjb3BlcyA9IHRoaXMuZ2V0QW55U2NvcGVzKCk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQpLmNhbGwodGhpcywgbmV3IGNvbXB1dGVjbGllbnRfMS5Db21wdXRlKG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwb3J0cy5Hb29nbGVBdXRoRXhjZXB0aW9uTWVzc2FnZXMuTk9fQURDX0ZPVU5EKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhdXRoIGxheWVyIGlzIHJ1bm5pbmcgb24gR29vZ2xlIENvbXB1dGUgRW5naW5lLlxuICAgICAqIENoZWNrcyBmb3IgR0NQIFJlc2lkZW5jeSwgdGhlbiBmYWxsYmFjayB0byBjaGVja2luZyBpZiBtZXRhZGF0YSBzZXJ2ZXJcbiAgICAgKiBpcyBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBib29sZWFuLlxuICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIF9jaGVja0lzR0NFKCkge1xuICAgICAgICBpZiAodGhpcy5jaGVja0lzR0NFID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJc0dDRSA9XG4gICAgICAgICAgICAgICAgZ2NwTWV0YWRhdGEuZ2V0R0NQUmVzaWRlbmN5KCkgfHwgKGF3YWl0IGdjcE1ldGFkYXRhLmlzQXZhaWxhYmxlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrSXNHQ0U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIGxvYWQgZGVmYXVsdCBjcmVkZW50aWFscyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwYXRoLi5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgT0F1dGgyQ2xpZW50IG9yIG51bGwuXG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG4gICAgYXN5bmMgX3RyeUdldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tRW52aXJvbm1lbnRWYXJpYWJsZShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzUGF0aCA9IHByb2Nlc3MuZW52WydHT09HTEVfQVBQTElDQVRJT05fQ1JFREVOVElBTFMnXSB8fFxuICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ2dvb2dsZV9hcHBsaWNhdGlvbl9jcmVkZW50aWFscyddO1xuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzUGF0aCB8fCBjcmVkZW50aWFsc1BhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tRmlsZVBhdGgoY3JlZGVudGlhbHNQYXRoLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IGBVbmFibGUgdG8gcmVhZCB0aGUgY3JlZGVudGlhbCBmaWxlIHNwZWNpZmllZCBieSB0aGUgR09PR0xFX0FQUExJQ0FUSU9OX0NSRURFTlRJQUxTIGVudmlyb25tZW50IHZhcmlhYmxlOiAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBsb2FkIGRlZmF1bHQgY3JlZGVudGlhbHMgZnJvbSBhIHdlbGwta25vd24gZmlsZSBsb2NhdGlvblxuICAgICAqIEByZXR1cm4gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIE9BdXRoMkNsaWVudCBvciBudWxsLlxuICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIF90cnlHZXRBcHBsaWNhdGlvbkNyZWRlbnRpYWxzRnJvbVdlbGxLbm93bkZpbGUob3B0aW9ucykge1xuICAgICAgICAvLyBGaXJzdCwgZmlndXJlIG91dCB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUsIGRlcGVuZGluZyB1cG9uIHRoZSBPUyB0eXBlLlxuICAgICAgICBsZXQgbG9jYXRpb24gPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5faXNXaW5kb3dzKCkpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvd3NcbiAgICAgICAgICAgIGxvY2F0aW9uID0gcHJvY2Vzcy5lbnZbJ0FQUERBVEEnXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIExpbnV4IG9yIE1hY1xuICAgICAgICAgICAgY29uc3QgaG9tZSA9IHByb2Nlc3MuZW52WydIT01FJ107XG4gICAgICAgICAgICBpZiAoaG9tZSkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGF0aC5qb2luKGhvbWUsICcuY29uZmlnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIHJvb3QgcGF0aCwgZXhwYW5kIGl0LlxuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uID0gcGF0aC5qb2luKGxvY2F0aW9uLCAnZ2Nsb3VkJywgJ2FwcGxpY2F0aW9uX2RlZmF1bHRfY3JlZGVudGlhbHMuanNvbicpO1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGxvY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgZmlsZSBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgaWYgKCFsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIGZpbGUgc2VlbXMgdG8gZXhpc3QuIFRyeSB0byB1c2UgaXQuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuX2dldEFwcGxpY2F0aW9uQ3JlZGVudGlhbHNGcm9tRmlsZVBhdGgobG9jYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBsb2FkIGRlZmF1bHQgY3JlZGVudGlhbHMgZnJvbSBhIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGguLlxuICAgICAqIEBwYXJhbSBmaWxlUGF0aCBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byByZWFkLlxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBPQXV0aDJDbGllbnRcbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0QXBwbGljYXRpb25DcmVkZW50aWFsc0Zyb21GaWxlUGF0aChmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGF0aCBsb29rcyBsaWtlIGEgc3RyaW5nLlxuICAgICAgICBpZiAoIWZpbGVQYXRoIHx8IGZpbGVQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZmlsZSBwYXRoIGlzIGludmFsaWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGEgZmlsZSBhdCB0aGUgcGF0aC4gbHN0YXRTeW5jIHdpbGwgdGhyb3cgaWYgdGhlcmUgaXNcbiAgICAgICAgLy8gbm90aGluZyB0aGVyZS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFJlc29sdmUgcGF0aCB0byBhY3R1YWwgZmlsZSBpbiBjYXNlIG9mIHN5bWxpbmsuIEV4cGVjdCBhIHRocm93biBlcnJvclxuICAgICAgICAgICAgLy8gaWYgbm90IHJlc29sdmFibGUuXG4gICAgICAgICAgICBmaWxlUGF0aCA9IGZzLnJlYWxwYXRoU3luYyhmaWxlUGF0aCk7XG4gICAgICAgICAgICBpZiAoIWZzLmxzdGF0U3luYyhmaWxlUGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IGBUaGUgZmlsZSBhdCAke2ZpbGVQYXRofSBkb2VzIG5vdCBleGlzdCwgb3IgaXQgaXMgbm90IGEgZmlsZS4gJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdyBvcGVuIGEgcmVhZCBzdHJlYW0gb24gdGhlIGZpbGUsIGFuZCBwYXJzZSBpdC5cbiAgICAgICAgY29uc3QgcmVhZFN0cmVhbSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tU3RyZWFtKHJlYWRTdHJlYW0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjcmVkZW50aWFscyBpbnN0YW5jZSB1c2luZyBhIGdpdmVuIGltcGVyc29uYXRlZCBpbnB1dCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBqc29uIFRoZSBpbXBlcnNvbmF0ZWQgaW5wdXQgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIEpXVCBvciBVc2VyUmVmcmVzaCBDbGllbnQgd2l0aCBkYXRhXG4gICAgICovXG4gICAgZnJvbUltcGVyc29uYXRlZEpTT04oanNvbikge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGlmICghanNvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBKU09OIG9iamVjdCBjb250YWluaW5nIGFuICBpbXBlcnNvbmF0ZWQgcmVmcmVzaCB0b2tlbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uLnR5cGUgIT09IGltcGVyc29uYXRlZF8xLklNUEVSU09OQVRFRF9BQ0NPVU5UX1RZUEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGluY29taW5nIEpTT04gb2JqZWN0IGRvZXMgbm90IGhhdmUgdGhlIFwiJHtpbXBlcnNvbmF0ZWRfMS5JTVBFUlNPTkFURURfQUNDT1VOVF9UWVBFfVwiIHR5cGVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24uc291cmNlX2NyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbmNvbWluZyBKU09OIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGEgc291cmNlX2NyZWRlbnRpYWxzIGZpZWxkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLnNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5jb21pbmcgSlNPTiBvYmplY3QgZG9lcyBub3QgY29udGFpbiBhIHNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybCBmaWVsZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUNsaWVudCA9IHRoaXMuZnJvbUpTT04oanNvbi5zb3VyY2VfY3JlZGVudGlhbHMpO1xuICAgICAgICBpZiAoKChfYSA9IGpzb24uc2VydmljZV9hY2NvdW50X2ltcGVyc29uYXRpb25fdXJsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDI1Nikge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBQcmV2ZW50cyBET1MgYXR0YWNrcy5cbiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL2dvb2dsZS1hdXRoLWxpYnJhcnktbm9kZWpzL3NlY3VyaXR5L2NvZGUtc2Nhbm5pbmcvODV9XG4gICAgICAgICAgICAgKiovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGFyZ2V0IHByaW5jaXBhbCBpcyB0b28gbG9uZzogJHtqc29uLnNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybH1gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeHRyYWN0IHNlcnZpY2UgYWNjb3VudCBmcm9tIHNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybFxuICAgICAgICBjb25zdCB0YXJnZXRQcmluY2lwYWwgPSAoX2MgPSAoX2IgPSAvKD88dGFyZ2V0PlteL10rKTooZ2VuZXJhdGVBY2Nlc3NUb2tlbnxnZW5lcmF0ZUlkVG9rZW4pJC8uZXhlYyhqc29uLnNlcnZpY2VfYWNjb3VudF9pbXBlcnNvbmF0aW9uX3VybCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5ncm91cHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50YXJnZXQ7XG4gICAgICAgIGlmICghdGFyZ2V0UHJpbmNpcGFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGV4dHJhY3QgdGFyZ2V0IHByaW5jaXBhbCBmcm9tICR7anNvbi5zZXJ2aWNlX2FjY291bnRfaW1wZXJzb25hdGlvbl91cmx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0U2NvcGVzID0gKF9kID0gdGhpcy5nZXRBbnlTY29wZXMoKSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogW107XG4gICAgICAgIHJldHVybiBuZXcgaW1wZXJzb25hdGVkXzEuSW1wZXJzb25hdGVkKHtcbiAgICAgICAgICAgIC4uLmpzb24sXG4gICAgICAgICAgICBzb3VyY2VDbGllbnQsXG4gICAgICAgICAgICB0YXJnZXRQcmluY2lwYWwsXG4gICAgICAgICAgICB0YXJnZXRTY29wZXM6IEFycmF5LmlzQXJyYXkodGFyZ2V0U2NvcGVzKSA/IHRhcmdldFNjb3BlcyA6IFt0YXJnZXRTY29wZXNdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY3JlZGVudGlhbHMgaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuIGlucHV0IG9wdGlvbnMuXG4gICAgICogVGhpcyBjbGllbnQgaXMgbm90IGNhY2hlZC5cbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50Kio6IElmIHlvdSBhY2NlcHQgYSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb24gKGNyZWRlbnRpYWwgSlNPTi9GaWxlL1N0cmVhbSkgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdvb2dsZSBDbG91ZCwgeW91IG11c3QgdmFsaWRhdGUgaXQgYmVmb3JlIHByb3ZpZGluZyBpdCB0byBhbnkgR29vZ2xlIEFQSSBvciBsaWJyYXJ5LiBQcm92aWRpbmcgYW4gdW52YWxpZGF0ZWQgY3JlZGVudGlhbCBjb25maWd1cmF0aW9uIHRvIEdvb2dsZSBBUElzIGNhbiBjb21wcm9taXNlIHRoZSBzZWN1cml0eSBvZiB5b3VyIHN5c3RlbXMgYW5kIGRhdGEuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB7QGxpbmsgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2RvY3MvYXV0aGVudGljYXRpb24vZXh0ZXJuYWwvZXh0ZXJuYWxseS1zb3VyY2VkLWNyZWRlbnRpYWxzIFZhbGlkYXRlIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbnMgZnJvbSBleHRlcm5hbCBzb3VyY2VzfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBqc29uIFRoZSBpbnB1dCBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIEpXVCBvciBVc2VyUmVmcmVzaCBvcHRpb25zIGZvciB0aGUgY2xpZW50XG4gICAgICogQHJldHVybnMgSldUIG9yIFVzZXJSZWZyZXNoIENsaWVudCB3aXRoIGRhdGFcbiAgICAgKi9cbiAgICBmcm9tSlNPTihqc29uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgbGV0IGNsaWVudDtcbiAgICAgICAgLy8gdXNlcidzIHByZWZlcnJlZCB1bml2ZXJzZSBkb21haW5cbiAgICAgICAgY29uc3QgcHJlZmVycmVkVW5pdmVyc2VEb21haW4gPSAoMCwgdXRpbF8xLm9yaWdpbmFsT3JDYW1lbE9wdGlvbnMpKG9wdGlvbnMpLmdldCgndW5pdmVyc2VfZG9tYWluJyk7XG4gICAgICAgIGlmIChqc29uLnR5cGUgPT09IHJlZnJlc2hjbGllbnRfMS5VU0VSX1JFRlJFU0hfQUNDT1VOVF9UWVBFKSB7XG4gICAgICAgICAgICBjbGllbnQgPSBuZXcgcmVmcmVzaGNsaWVudF8xLlVzZXJSZWZyZXNoQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICAgICAgY2xpZW50LmZyb21KU09OKGpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGpzb24udHlwZSA9PT0gaW1wZXJzb25hdGVkXzEuSU1QRVJTT05BVEVEX0FDQ09VTlRfVFlQRSkge1xuICAgICAgICAgICAgY2xpZW50ID0gdGhpcy5mcm9tSW1wZXJzb25hdGVkSlNPTihqc29uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChqc29uLnR5cGUgPT09IGJhc2VleHRlcm5hbGNsaWVudF8xLkVYVEVSTkFMX0FDQ09VTlRfVFlQRSkge1xuICAgICAgICAgICAgY2xpZW50ID0gZXh0ZXJuYWxjbGllbnRfMS5FeHRlcm5hbEFjY291bnRDbGllbnQuZnJvbUpTT04oanNvbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjbGllbnQuc2NvcGVzID0gdGhpcy5nZXRBbnlTY29wZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChqc29uLnR5cGUgPT09IGV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50XzEuRVhURVJOQUxfQUNDT1VOVF9BVVRIT1JJWkVEX1VTRVJfVFlQRSkge1xuICAgICAgICAgICAgY2xpZW50ID0gbmV3IGV4dGVybmFsQWNjb3VudEF1dGhvcml6ZWRVc2VyQ2xpZW50XzEuRXh0ZXJuYWxBY2NvdW50QXV0aG9yaXplZFVzZXJDbGllbnQoanNvbiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLnNjb3BlcyA9IHRoaXMuc2NvcGVzO1xuICAgICAgICAgICAgY2xpZW50ID0gbmV3IGp3dGNsaWVudF8xLkpXVChvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuc2V0R2FwaWNKV1RWYWx1ZXMoY2xpZW50KTtcbiAgICAgICAgICAgIGNsaWVudC5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlZmVycmVkVW5pdmVyc2VEb21haW4pIHtcbiAgICAgICAgICAgIGNsaWVudC51bml2ZXJzZURvbWFpbiA9IHByZWZlcnJlZFVuaXZlcnNlRG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIEpXVCBvciBVc2VyUmVmcmVzaENsaWVudCBmcm9tIEphdmFTY3JpcHQgb2JqZWN0LCBjYWNoaW5nIGJvdGggdGhlXG4gICAgICogb2JqZWN0IHVzZWQgdG8gaW5zdGFudGlhdGUgYW5kIHRoZSBjbGllbnQuXG4gICAgICogQHBhcmFtIGpzb24gVGhlIGlucHV0IG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgSldUIG9yIFVzZXJSZWZyZXNoIG9wdGlvbnMgZm9yIHRoZSBjbGllbnRcbiAgICAgKiBAcmV0dXJucyBKV1Qgb3IgVXNlclJlZnJlc2ggQ2xpZW50IHdpdGggZGF0YVxuICAgICAqL1xuICAgIF9jYWNoZUNsaWVudEZyb21KU09OKGpzb24sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5mcm9tSlNPTihqc29uLCBvcHRpb25zKTtcbiAgICAgICAgLy8gY2FjaGUgYm90aCByYXcgZGF0YSB1c2VkIHRvIGluc3RhbnRpYXRlIGNsaWVudCBhbmQgY2xpZW50IGl0c2VsZi5cbiAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IGpzb247XG4gICAgICAgIHRoaXMuY2FjaGVkQ3JlZGVudGlhbCA9IGNsaWVudDtcbiAgICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9XG4gICAgZnJvbVN0cmVhbShpbnB1dFN0cmVhbSwgb3B0aW9uc09yQ2FsbGJhY2sgPSB7fSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zT3JDYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JDYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtLCBvcHRpb25zKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21TdHJlYW1Bc3luYyhpbnB1dFN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbVN0cmVhbUFzeW5jKGlucHV0U3RyZWFtLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlucHV0U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHBhc3MgaW4gYSBzdHJlYW0gY29udGFpbmluZyB0aGUgR29vZ2xlIGF1dGggc2V0dGluZ3MuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgICAgIGlucHV0U3RyZWFtXG4gICAgICAgICAgICAgICAgLnNldEVuY29kaW5nKCd1dGY4JylcbiAgICAgICAgICAgICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgICAgICAgICAgIC5vbignZGF0YScsIGNodW5rID0+IGNodW5rcy5wdXNoKGNodW5rKSlcbiAgICAgICAgICAgICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY2h1bmtzLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLl9jYWNoZUNsaWVudEZyb21KU09OKGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHBhcnNpbmcgdGhpcy5rZXlGaWxlTmFtZSwgYXNzdW1lIHRoYXQgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGEgUEVNIG9yIHAxMiBjZXJ0aWZpY2F0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5rZXlGaWxlbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgand0Y2xpZW50XzEuSldUKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNsaWVudE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5RmlsZTogdGhpcy5rZXlGaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRDcmVkZW50aWFsID0gY2xpZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHYXBpY0pXVFZhbHVlcyhjbGllbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoY2xpZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGNyZWRlbnRpYWxzIGluc3RhbmNlIHVzaW5nIHRoZSBnaXZlbiBBUEkga2V5IHN0cmluZy5cbiAgICAgKiBUaGUgY3JlYXRlZCBjbGllbnQgaXMgbm90IGNhY2hlZC4gSW4gb3JkZXIgdG8gY3JlYXRlIGFuZCBjYWNoZSBpdCB1c2UgdGhlIHtAbGluayBHb29nbGVBdXRoLmdldENsaWVudCBgZ2V0Q2xpZW50YH0gbWV0aG9kIGFmdGVyIGZpcnN0IHByb3ZpZGluZyBhbiB7QGxpbmsgR29vZ2xlQXV0aC5hcGlLZXkgYGFwaUtleWB9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwaUtleSBUaGUgQVBJIGtleSBzdHJpbmdcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvcHRpb25hbCBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyBBIEpXVCBsb2FkZWQgZnJvbSB0aGUga2V5XG4gICAgICovXG4gICAgZnJvbUFQSUtleShhcGlLZXksIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IGp3dGNsaWVudF8xLkpXVCh7IC4uLm9wdGlvbnMsIGFwaUtleSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0gaXMgV2luZG93cy5cbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cbiAgICBfaXNXaW5kb3dzKCkge1xuICAgICAgICBjb25zdCBzeXMgPSBvcy5wbGF0Zm9ybSgpO1xuICAgICAgICBpZiAoc3lzICYmIHN5cy5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgaWYgKHN5cy5zdWJzdHJpbmcoMCwgMykudG9Mb3dlckNhc2UoKSA9PT0gJ3dpbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgR29vZ2xlIENsb3VkIFNESyBjb21tYW5kIHRoYXQgcHJpbnRzIHRoZSBkZWZhdWx0IHByb2plY3QgSURcbiAgICAgKi9cbiAgICBhc3luYyBnZXREZWZhdWx0U2VydmljZVByb2plY3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgKDAsIGNoaWxkX3Byb2Nlc3NfMS5leGVjKSgnZ2Nsb3VkIGNvbmZpZyBjb25maWctaGVscGVyIC0tZm9ybWF0IGpzb24nLCAoZXJyLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVyciAmJiBzdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2plY3RJZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KS5jb25maWd1cmF0aW9uLnByb3BlcnRpZXMuY29yZS5wcm9qZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9qZWN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIHByb2plY3QgaWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0UHJvZHVjdGlvblByb2plY3RJZCgpIHtcbiAgICAgICAgcmV0dXJuIChwcm9jZXNzLmVudlsnR0NMT1VEX1BST0pFQ1QnXSB8fFxuICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ0dPT0dMRV9DTE9VRF9QUk9KRUNUJ10gfHxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydnY2xvdWRfcHJvamVjdCddIHx8XG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnZ29vZ2xlX2Nsb3VkX3Byb2plY3QnXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBwcm9qZWN0IGlkIGZyb20gdGhlIEdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMUyBqc29uIGZpbGUuXG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG4gICAgYXN5bmMgZ2V0RmlsZVByb2plY3RJZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHJlYWQgdGhlIHByb2plY3QgSUQgZnJvbSB0aGUgY2FjaGVkIGNyZWRlbnRpYWxzIGZpbGVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZENyZWRlbnRpYWwucHJvamVjdElkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgcHJvamVjdElkIGlzIGxvYWRlZCBmcm9tIHRoZSBrZXlGaWxlIGlmIGF2YWlsYWJsZS5cbiAgICAgICAgaWYgKHRoaXMua2V5RmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWRzID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgICAgIGlmIChjcmVkcyAmJiBjcmVkcy5wcm9qZWN0SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlZHMucHJvamVjdElkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRyeSB0byBsb2FkIGEgY3JlZGVudGlhbHMgZmlsZSBhbmQgcmVhZCBpdHMgcHJvamVjdCBJRFxuICAgICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fdHJ5R2V0QXBwbGljYXRpb25DcmVkZW50aWFsc0Zyb21FbnZpcm9ubWVudFZhcmlhYmxlKCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICByZXR1cm4gci5wcm9qZWN0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcm9qZWN0IElEIGZyb20gZXh0ZXJuYWwgYWNjb3VudCBjbGllbnQgaWYgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEV4dGVybmFsQWNjb3VudENsaWVudFByb2plY3RJZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmpzb25Db250ZW50IHx8IHRoaXMuanNvbkNvbnRlbnQudHlwZSAhPT0gYmFzZWV4dGVybmFsY2xpZW50XzEuRVhURVJOQUxfQUNDT1VOVF9UWVBFKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICAgIC8vIERvIG5vdCBzdXBwcmVzcyB0aGUgdW5kZXJseWluZyBlcnJvciwgYXMgdGhlIGVycm9yIGNvdWxkIGNvbnRhaW4gaGVscGZ1bFxuICAgICAgICAvLyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nIGFuZCBmaXhpbmcuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvclxuICAgICAgICAvLyBleHRlcm5hbCBhY2NvdW50IGNyZWRzIGFzIGluIG9yZGVyIHRvIGdldCB0aGUgcHJvamVjdCBJRCwgdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyBvcGVyYXRpb25zIGhhdmUgdG8gc3VjY2VlZDpcbiAgICAgICAgLy8gMS4gVmFsaWQgY3JlZGVudGlhbHMgZmlsZSBzaG91bGQgYmUgc3VwcGxpZWQuXG4gICAgICAgIC8vIDIuIEFiaWxpdHkgdG8gcmV0cmlldmUgYWNjZXNzIHRva2VucyBmcm9tIFNUUyB0b2tlbiBleGNoYW5nZSBBUEkuXG4gICAgICAgIC8vIDMuIEFiaWxpdHkgdG8gZXhjaGFuZ2UgZm9yIHNlcnZpY2UgYWNjb3VudCBpbXBlcnNvbmF0ZWQgY3JlZGVudGlhbHMgKGlmXG4gICAgICAgIC8vICAgIGVuYWJsZWQpLlxuICAgICAgICAvLyA0LiBBYmlsaXR5IHRvIGdldCBwcm9qZWN0IGluZm8gdXNpbmcgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHN0ZXAgMiBvciAzLlxuICAgICAgICAvLyBXaXRob3V0IHN1cmZhY2luZyB0aGUgZXJyb3IsIGl0IGlzIGhhcmRlciBmb3IgZGV2ZWxvcGVycyB0byBkZXRlcm1pbmVcbiAgICAgICAgLy8gd2hpY2ggc3RlcCB3ZW50IHdyb25nLlxuICAgICAgICByZXR1cm4gYXdhaXQgY3JlZHMuZ2V0UHJvamVjdElkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIENvbXB1dGUgRW5naW5lIHByb2plY3QgSUQgaWYgaXQgY2FuIGJlIGluZmVycmVkLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEdDRVByb2plY3RJZCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBhd2FpdCBnY3BNZXRhZGF0YS5wcm9qZWN0KCdwcm9qZWN0LWlkJyk7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSWdub3JlIGFueSBlcnJvcnNcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENyZWRlbnRpYWxzKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5nZXRDcmVkZW50aWFsc0FzeW5jKCkudGhlbihyID0+IGNhbGxiYWNrKG51bGwsIHIpLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDcmVkZW50aWFsc0FzeW5jKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0Q3JlZGVudGlhbHNBc3luYygpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgaWYgKGNsaWVudCBpbnN0YW5jZW9mIGltcGVyc29uYXRlZF8xLkltcGVyc29uYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgY2xpZW50X2VtYWlsOiBjbGllbnQuZ2V0VGFyZ2V0UHJpbmNpcGFsKCkgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xpZW50IGluc3RhbmNlb2YgYmFzZWV4dGVybmFsY2xpZW50XzEuQmFzZUV4dGVybmFsQWNjb3VudENsaWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZUFjY291bnRFbWFpbCA9IGNsaWVudC5nZXRTZXJ2aWNlQWNjb3VudEVtYWlsKCk7XG4gICAgICAgICAgICBpZiAoc2VydmljZUFjY291bnRFbWFpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudF9lbWFpbDogc2VydmljZUFjY291bnRFbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2VfZG9tYWluOiBjbGllbnQudW5pdmVyc2VEb21haW4sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5qc29uQ29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjbGllbnRfZW1haWw6IHRoaXMuanNvbkNvbnRlbnQuY2xpZW50X2VtYWlsLFxuICAgICAgICAgICAgICAgIHByaXZhdGVfa2V5OiB0aGlzLmpzb25Db250ZW50LnByaXZhdGVfa2V5LFxuICAgICAgICAgICAgICAgIHVuaXZlcnNlX2RvbWFpbjogdGhpcy5qc29uQ29udGVudC51bml2ZXJzZV9kb21haW4sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLl9jaGVja0lzR0NFKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtjbGllbnRfZW1haWwsIHVuaXZlcnNlX2RvbWFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgZ2NwTWV0YWRhdGEuaW5zdGFuY2UoJ3NlcnZpY2UtYWNjb3VudHMvZGVmYXVsdC9lbWFpbCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VW5pdmVyc2VEb21haW4oKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgY2xpZW50X2VtYWlsLCB1bml2ZXJzZV9kb21haW4gfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXhwb3J0cy5Hb29nbGVBdXRoRXhjZXB0aW9uTWVzc2FnZXMuTk9fQ1JFREVOVElBTFNfRk9VTkQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IG9idGFpbiBhbiB7QGxpbmsgQXV0aENsaWVudCBgQXV0aENsaWVudGB9IGJhc2VkIG9uIHRoZVxuICAgICAqIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uIElmIG5vIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHVzZSBBcHBsaWNhdGlvblxuICAgICAqIERlZmF1bHQgQ3JlZGVudGlhbHMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0Q2xpZW50KCkge1xuICAgICAgICBpZiAodGhpcy5jYWNoZWRDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRDcmVkZW50aWFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzZSBhbiBleGlzdGluZyBhdXRoIGNsaWVudCByZXF1ZXN0LCBvciBjYWNoZSBhIG5ldyBvbmVcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfR29vZ2xlQXV0aF9wZW5kaW5nQXV0aENsaWVudCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9wZW5kaW5nQXV0aENsaWVudCwgXCJmXCIpIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dvb2dsZUF1dGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dvb2dsZUF1dGhfZGV0ZXJtaW5lQ2xpZW50KS5jYWxsKHRoaXMpLCBcImZcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9wZW5kaW5nQXV0aENsaWVudCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHBlbmRpbmcgYXV0aCBjbGllbnQgaW4gY2FzZSBpdCBpcyBjaGFuZ2VkIGxhdGVyXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Hb29nbGVBdXRoX3BlbmRpbmdBdXRoQ2xpZW50LCBudWxsLCBcImZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsaWVudCB3aGljaCB3aWxsIGZldGNoIGFuIElEIHRva2VuIGZvciBhdXRob3JpemF0aW9uLlxuICAgICAqIEBwYXJhbSB0YXJnZXRBdWRpZW5jZSB0aGUgYXVkaWVuY2UgZm9yIHRoZSBmZXRjaGVkIElEIHRva2VuLlxuICAgICAqIEByZXR1cm5zIElkVG9rZW5DbGllbnQgZm9yIG1ha2luZyBIVFRQIGNhbGxzIGF1dGhlbnRpY2F0ZWQgd2l0aCBJRCB0b2tlbnMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0SWRUb2tlbkNsaWVudCh0YXJnZXRBdWRpZW5jZSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgICBpZiAoISgnZmV0Y2hJZFRva2VuJyBpbiBjbGllbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBJRCB0b2tlbiBpbiB0aGlzIGVudmlyb25tZW50LCB1c2UgR0NFIG9yIHNldCB0aGUgR09PR0xFX0FQUExJQ0FUSU9OX0NSRURFTlRJQUxTIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgc2VydmljZSBhY2NvdW50IGNyZWRlbnRpYWxzIEpTT04gZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGlkdG9rZW5jbGllbnRfMS5JZFRva2VuQ2xpZW50KHsgdGFyZ2V0QXVkaWVuY2UsIGlkVG9rZW5Qcm92aWRlcjogY2xpZW50IH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IG9idGFpbiBhcHBsaWNhdGlvbiBkZWZhdWx0IGNyZWRlbnRpYWxzLCBhbmQgcmV0dXJuXG4gICAgICogYW4gYWNjZXNzIHRva2VuIGZvciBtYWtpbmcgcmVxdWVzdHMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgY2xpZW50LmdldEFjY2Vzc1Rva2VuKCkpLnRva2VuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnRhaW4gdGhlIEhUVFAgaGVhZGVycyB0aGF0IHdpbGwgcHJvdmlkZSBhdXRob3JpemF0aW9uIGZvciBhIGdpdmVuXG4gICAgICogcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRSZXF1ZXN0SGVhZGVycyh1cmwpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5nZXRSZXF1ZXN0SGVhZGVycyh1cmwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnRhaW4gY3JlZGVudGlhbHMgZm9yIGEgcmVxdWVzdCwgdGhlbiBhdHRhY2ggdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMgdG9cbiAgICAgKiB0aGUgcmVxdWVzdCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRzIEF4aW9zIG9yIFJlcXVlc3Qgb3B0aW9ucyBvbiB3aGljaCB0byBhdHRhY2ggdGhlIGhlYWRlcnNcbiAgICAgKi9cbiAgICBhc3luYyBhdXRob3JpemVSZXF1ZXN0KG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGNvbnN0IHVybCA9IG9wdHMudXJsIHx8IG9wdHMudXJpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgY2xpZW50LmdldFJlcXVlc3RIZWFkZXJzKHVybCk7XG4gICAgICAgIG9wdHMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0cy5oZWFkZXJzIHx8IHt9LCBoZWFkZXJzKTtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dG9tYXRpY2FsbHkgb2J0YWluIGFwcGxpY2F0aW9uIGRlZmF1bHQgY3JlZGVudGlhbHMsIGFuZCBtYWtlIGFuXG4gICAgICogSFRUUCByZXF1ZXN0IHVzaW5nIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgICAqIEBwYXJhbSBvcHRzIEF4aW9zIHJlcXVlc3Qgb3B0aW9ucyBmb3IgdGhlIEhUVFAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGFzeW5jIHJlcXVlc3Qob3B0cykge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgICByZXR1cm4gY2xpZW50LnJlcXVlc3Qob3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVybWluZSB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBydW5uaW5nLlxuICAgICAqL1xuICAgIGdldEVudigpIHtcbiAgICAgICAgcmV0dXJuICgwLCBlbnZEZXRlY3RfMS5nZXRFbnYpKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpZ24gdGhlIGdpdmVuIGRhdGEgd2l0aCB0aGUgY3VycmVudCBwcml2YXRlIGtleSwgb3IgZ28gb3V0XG4gICAgICogdG8gdGhlIElBTSBBUEkgdG8gc2lnbiBpdC5cbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBiZSBzaWduZWQuXG4gICAgICogQHBhcmFtIGVuZHBvaW50IEEgY3VzdG9tIGVuZHBvaW50IHRvIHVzZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgXG4gICAgICogc2lnbignZGF0YScsICdodHRwczovL2lhbWNyZWRlbnRpYWxzLmdvb2dsZWFwaXMuY29tL3YxL3Byb2plY3RzLy0vc2VydmljZUFjY291bnRzLycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHNpZ24oZGF0YSwgZW5kcG9pbnQpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcbiAgICAgICAgY29uc3QgdW5pdmVyc2UgPSBhd2FpdCB0aGlzLmdldFVuaXZlcnNlRG9tYWluKCk7XG4gICAgICAgIGVuZHBvaW50ID1cbiAgICAgICAgICAgIGVuZHBvaW50IHx8XG4gICAgICAgICAgICAgICAgYGh0dHBzOi8vaWFtY3JlZGVudGlhbHMuJHt1bml2ZXJzZX0vdjEvcHJvamVjdHMvLS9zZXJ2aWNlQWNjb3VudHMvYDtcbiAgICAgICAgaWYgKGNsaWVudCBpbnN0YW5jZW9mIGltcGVyc29uYXRlZF8xLkltcGVyc29uYXRlZCkge1xuICAgICAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgY2xpZW50LnNpZ24oZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2lnbmVkLnNpZ25lZEJsb2I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3J5cHRvID0gKDAsIGNyeXB0b18xLmNyZWF0ZUNyeXB0bykoKTtcbiAgICAgICAgaWYgKGNsaWVudCBpbnN0YW5jZW9mIGp3dGNsaWVudF8xLkpXVCAmJiBjbGllbnQua2V5KSB7XG4gICAgICAgICAgICBjb25zdCBzaWduID0gYXdhaXQgY3J5cHRvLnNpZ24oY2xpZW50LmtleSwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2lnbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgICAgICAgaWYgKCFjcmVkcy5jbGllbnRfZW1haWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNpZ24gZGF0YSB3aXRob3V0IGBjbGllbnRfZW1haWxgLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNpZ25CbG9iKGNyeXB0bywgY3JlZHMuY2xpZW50X2VtYWlsLCBkYXRhLCBlbmRwb2ludCk7XG4gICAgfVxuICAgIGFzeW5jIHNpZ25CbG9iKGNyeXB0bywgZW1haWxPclVuaXF1ZUlkLCBkYXRhLCBlbmRwb2ludCkge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGVuZHBvaW50ICsgYCR7ZW1haWxPclVuaXF1ZUlkfTpzaWduQmxvYmApO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnJlcXVlc3Qoe1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICB1cmw6IHVybC5ocmVmLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGNyeXB0by5lbmNvZGVCYXNlNjRTdHJpbmdVdGY4KGRhdGEpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICAgICAgcmV0cnlDb25maWc6IHtcbiAgICAgICAgICAgICAgICBodHRwTWV0aG9kc1RvUmV0cnk6IFsnUE9TVCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXMuZGF0YS5zaWduZWRCbG9iO1xuICAgIH1cbn1cbmV4cG9ydHMuR29vZ2xlQXV0aCA9IEdvb2dsZUF1dGg7XG5fR29vZ2xlQXV0aF9wZW5kaW5nQXV0aENsaWVudCA9IG5ldyBXZWFrTWFwKCksIF9Hb29nbGVBdXRoX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9Hb29nbGVBdXRoX3ByZXBhcmVBbmRDYWNoZUNsaWVudCA9IGFzeW5jIGZ1bmN0aW9uIF9Hb29nbGVBdXRoX3ByZXBhcmVBbmRDYWNoZUNsaWVudChjcmVkZW50aWFsLCBxdW90YVByb2plY3RJZE92ZXJyaWRlID0gcHJvY2Vzcy5lbnZbJ0dPT0dMRV9DTE9VRF9RVU9UQV9QUk9KRUNUJ10gfHwgbnVsbCkge1xuICAgIGNvbnN0IHByb2plY3RJZCA9IGF3YWl0IHRoaXMuZ2V0UHJvamVjdElkT3B0aW9uYWwoKTtcbiAgICBpZiAocXVvdGFQcm9qZWN0SWRPdmVycmlkZSkge1xuICAgICAgICBjcmVkZW50aWFsLnF1b3RhUHJvamVjdElkID0gcXVvdGFQcm9qZWN0SWRPdmVycmlkZTtcbiAgICB9XG4gICAgdGhpcy5jYWNoZWRDcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgICByZXR1cm4geyBjcmVkZW50aWFsLCBwcm9qZWN0SWQgfTtcbn0sIF9Hb29nbGVBdXRoX2RldGVybWluZUNsaWVudCA9IGFzeW5jIGZ1bmN0aW9uIF9Hb29nbGVBdXRoX2RldGVybWluZUNsaWVudCgpIHtcbiAgICBpZiAodGhpcy5qc29uQ29udGVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVDbGllbnRGcm9tSlNPTih0aGlzLmpzb25Db250ZW50LCB0aGlzLmNsaWVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmtleUZpbGVuYW1lKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMua2V5RmlsZW5hbWUpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZnJvbVN0cmVhbUFzeW5jKHN0cmVhbSwgdGhpcy5jbGllbnRPcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hcGlLZXkpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5mcm9tQVBJS2V5KHRoaXMuYXBpS2V5LCB0aGlzLmNsaWVudE9wdGlvbnMpO1xuICAgICAgICBjbGllbnQuc2NvcGVzID0gdGhpcy5zY29wZXM7XG4gICAgICAgIGNvbnN0IHsgY3JlZGVudGlhbCB9ID0gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR29vZ2xlQXV0aF9pbnN0YW5jZXMsIFwibVwiLCBfR29vZ2xlQXV0aF9wcmVwYXJlQW5kQ2FjaGVDbGllbnQpLmNhbGwodGhpcywgY2xpZW50KTtcbiAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB7IGNyZWRlbnRpYWwgfSA9IGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25EZWZhdWx0QXN5bmModGhpcy5jbGllbnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWw7XG4gICAgfVxufTtcbi8qKlxuICogRXhwb3J0IERlZmF1bHRUcmFuc3BvcnRlciBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvZiB0aGUgY2xhc3MuXG4gKi9cbkdvb2dsZUF1dGguRGVmYXVsdFRyYW5zcG9ydGVyID0gdHJhbnNwb3J0ZXJzXzEuRGVmYXVsdFRyYW5zcG9ydGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5JQU1BdXRoID0gdm9pZCAwO1xuY2xhc3MgSUFNQXV0aCB7XG4gICAgLyoqXG4gICAgICogSUFNIGNyZWRlbnRpYWxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNlbGVjdG9yIHRoZSBpYW0gYXV0aG9yaXR5IHNlbGVjdG9yXG4gICAgICogQHBhcmFtIHRva2VuIHRoZSB0b2tlblxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCB0b2tlbikge1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjcXVpcmUgdGhlIEhUVFAgaGVhZGVycyByZXF1aXJlZCB0byBtYWtlIGFuIGF1dGhlbnRpY2F0ZWQgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBnZXRSZXF1ZXN0SGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd4LWdvb2ctaWFtLWF1dGhvcml0eS1zZWxlY3Rvcic6IHRoaXMuc2VsZWN0b3IsXG4gICAgICAgICAgICAneC1nb29nLWlhbS1hdXRob3JpemF0aW9uLXRva2VuJzogdGhpcy50b2tlbixcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLklBTUF1dGggPSBJQU1BdXRoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Eb3duc2NvcGVkQ2xpZW50ID0gZXhwb3J0cy5FWFBJUkFUSU9OX1RJTUVfT0ZGU0VUID0gZXhwb3J0cy5NQVhfQUNDRVNTX0JPVU5EQVJZX1JVTEVTX0NPVU5UID0gdm9pZCAwO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZShcInN0cmVhbVwiKTtcbmNvbnN0IGF1dGhjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGhjbGllbnRcIik7XG5jb25zdCBzdHMgPSByZXF1aXJlKFwiLi9zdHNjcmVkZW50aWFsc1wiKTtcbi8qKlxuICogVGhlIHJlcXVpcmVkIHRva2VuIGV4Y2hhbmdlIGdyYW50X3R5cGU6IHJmYzg2OTMjc2VjdGlvbi0yLjFcbiAqL1xuY29uc3QgU1RTX0dSQU5UX1RZUEUgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6dG9rZW4tZXhjaGFuZ2UnO1xuLyoqXG4gKiBUaGUgcmVxdWVzdGVkIHRva2VuIGV4Y2hhbmdlIHJlcXVlc3RlZF90b2tlbl90eXBlOiByZmM4NjkzI3NlY3Rpb24tMi4xXG4gKi9cbmNvbnN0IFNUU19SRVFVRVNUX1RPS0VOX1RZUEUgPSAndXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6YWNjZXNzX3Rva2VuJztcbi8qKlxuICogVGhlIHJlcXVlc3RlZCB0b2tlbiBleGNoYW5nZSBzdWJqZWN0X3Rva2VuX3R5cGU6IHJmYzg2OTMjc2VjdGlvbi0yLjFcbiAqL1xuY29uc3QgU1RTX1NVQkpFQ1RfVE9LRU5fVFlQRSA9ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6dG9rZW4tdHlwZTphY2Nlc3NfdG9rZW4nO1xuLyoqXG4gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWNjZXNzIGJvdW5kYXJ5IHJ1bGVzIGEgQ3JlZGVudGlhbCBBY2Nlc3MgQm91bmRhcnlcbiAqIGNhbiBjb250YWluLlxuICovXG5leHBvcnRzLk1BWF9BQ0NFU1NfQk9VTkRBUllfUlVMRVNfQ09VTlQgPSAxMDtcbi8qKlxuICogT2Zmc2V0IHRvIHRha2UgaW50byBhY2NvdW50IG5ldHdvcmsgZGVsYXlzIGFuZCBzZXJ2ZXIgY2xvY2sgc2tld3MuXG4gKi9cbmV4cG9ydHMuRVhQSVJBVElPTl9USU1FX09GRlNFVCA9IDUgKiA2MCAqIDEwMDA7XG4vKipcbiAqIERlZmluZXMgYSBzZXQgb2YgR29vZ2xlIGNyZWRlbnRpYWxzIHRoYXQgYXJlIGRvd25zY29wZWQgZnJvbSBhbiBleGlzdGluZyBzZXRcbiAqIG9mIEdvb2dsZSBPQXV0aDIgY3JlZGVudGlhbHMuIFRoaXMgaXMgdXNlZnVsIHRvIHJlc3RyaWN0IHRoZSBJZGVudGl0eSBhbmRcbiAqIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHBlcm1pc3Npb25zIHRoYXQgYSBzaG9ydC1saXZlZCBjcmVkZW50aWFsIGNhbiB1c2UuXG4gKiBUaGUgY29tbW9uIHBhdHRlcm4gb2YgdXNhZ2UgaXMgdG8gaGF2ZSBhIHRva2VuIGJyb2tlciB3aXRoIGVsZXZhdGVkIGFjY2Vzc1xuICogZ2VuZXJhdGUgdGhlc2UgZG93bnNjb3BlZCBjcmVkZW50aWFscyBmcm9tIGhpZ2hlciBhY2Nlc3Mgc291cmNlIGNyZWRlbnRpYWxzXG4gKiBhbmQgcGFzcyB0aGUgZG93bnNjb3BlZCBzaG9ydC1saXZlZCBhY2Nlc3MgdG9rZW5zIHRvIGEgdG9rZW4gY29uc3VtZXIgdmlhXG4gKiBzb21lIHNlY3VyZSBhdXRoZW50aWNhdGVkIGNoYW5uZWwgZm9yIGxpbWl0ZWQgYWNjZXNzIHRvIEdvb2dsZSBDbG91ZCBTdG9yYWdlXG4gKiByZXNvdXJjZXMuXG4gKi9cbmNsYXNzIERvd25zY29wZWRDbGllbnQgZXh0ZW5kcyBhdXRoY2xpZW50XzEuQXV0aENsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW5zdGFudGlhdGVzIGEgZG93bnNjb3BlZCBjbGllbnQgb2JqZWN0IHVzaW5nIHRoZSBwcm92aWRlZCBzb3VyY2VcbiAgICAgKiBBdXRoQ2xpZW50IGFuZCBjcmVkZW50aWFsIGFjY2VzcyBib3VuZGFyeSBydWxlcy5cbiAgICAgKiBUbyBkb3duc2NvcGUgcGVybWlzc2lvbnMgb2YgYSBzb3VyY2UgQXV0aENsaWVudCwgYSBDcmVkZW50aWFsIEFjY2Vzc1xuICAgICAqIEJvdW5kYXJ5IHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlc291cmNlcyB0aGUgbmV3IGNyZWRlbnRpYWwgY2FuIGFjY2VzcywgYXNcbiAgICAgKiB3ZWxsIGFzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgb24gZWFjaFxuICAgICAqIHJlc291cmNlLCBoYXMgdG8gYmUgZGVmaW5lZC4gQSBkb3duc2NvcGVkIGNsaWVudCBjYW4gdGhlbiBiZSBpbnN0YW50aWF0ZWRcbiAgICAgKiB1c2luZyB0aGUgc291cmNlIEF1dGhDbGllbnQgYW5kIHRoZSBDcmVkZW50aWFsIEFjY2VzcyBCb3VuZGFyeS5cbiAgICAgKiBAcGFyYW0gYXV0aENsaWVudCBUaGUgc291cmNlIEF1dGhDbGllbnQgdG8gYmUgZG93bnNjb3BlZCBiYXNlZCBvbiB0aGVcbiAgICAgKiAgIHByb3ZpZGVkIENyZWRlbnRpYWwgQWNjZXNzIEJvdW5kYXJ5IHJ1bGVzLlxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsQWNjZXNzQm91bmRhcnkgVGhlIENyZWRlbnRpYWwgQWNjZXNzIEJvdW5kYXJ5IHdoaWNoXG4gICAgICogICBjb250YWlucyBhIGxpc3Qgb2YgYWNjZXNzIGJvdW5kYXJ5IHJ1bGVzLiBFYWNoIHJ1bGUgY29udGFpbnMgaW5mb3JtYXRpb25cbiAgICAgKiAgIG9uIHRoZSByZXNvdXJjZSB0aGF0IHRoZSBydWxlIGFwcGxpZXMgdG8sIHRoZSB1cHBlciBib3VuZCBvZiB0aGVcbiAgICAgKiAgIHBlcm1pc3Npb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiB0aGF0IHJlc291cmNlIGFuZCBhbiBvcHRpb25hbFxuICAgICAqICAgY29uZGl0aW9uIHRvIGZ1cnRoZXIgcmVzdHJpY3QgcGVybWlzc2lvbnMuXG4gICAgICogQHBhcmFtIGFkZGl0aW9uYWxPcHRpb25zICoqREVQUkVDQVRFRCwgc2V0IHRoaXMgaW4gdGhlIHByb3ZpZGVkIGBhdXRoQ2xpZW50YC4qKlxuICAgICAqICAgT3B0aW9uYWwgYWRkaXRpb25hbCBiZWhhdmlvciBjdXN0b21pemF0aW9uIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHF1b3RhUHJvamVjdElkICoqREVQUkVDQVRFRCwgc2V0IHRoaXMgaW4gdGhlIHByb3ZpZGVkIGBhdXRoQ2xpZW50YC4qKlxuICAgICAqICAgT3B0aW9uYWwgcXVvdGEgcHJvamVjdCBpZCBmb3Igc2V0dGluZyB1cCBpbiB0aGUgeC1nb29nLXVzZXItcHJvamVjdCBoZWFkZXIuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYXV0aENsaWVudCwgY3JlZGVudGlhbEFjY2Vzc0JvdW5kYXJ5LCBhZGRpdGlvbmFsT3B0aW9ucywgcXVvdGFQcm9qZWN0SWQpIHtcbiAgICAgICAgc3VwZXIoeyAuLi5hZGRpdGlvbmFsT3B0aW9ucywgcXVvdGFQcm9qZWN0SWQgfSk7XG4gICAgICAgIHRoaXMuYXV0aENsaWVudCA9IGF1dGhDbGllbnQ7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbEFjY2Vzc0JvdW5kYXJ5ID0gY3JlZGVudGlhbEFjY2Vzc0JvdW5kYXJ5O1xuICAgICAgICAvLyBDaGVjayAxLTEwIEFjY2VzcyBCb3VuZGFyeSBSdWxlcyBhcmUgZGVmaW5lZCB3aXRoaW4gQ3JlZGVudGlhbCBBY2Nlc3NcbiAgICAgICAgLy8gQm91bmRhcnkuXG4gICAgICAgIGlmIChjcmVkZW50aWFsQWNjZXNzQm91bmRhcnkuYWNjZXNzQm91bmRhcnkuYWNjZXNzQm91bmRhcnlSdWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIGFjY2VzcyBib3VuZGFyeSBydWxlIG5lZWRzIHRvIGJlIGRlZmluZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3JlZGVudGlhbEFjY2Vzc0JvdW5kYXJ5LmFjY2Vzc0JvdW5kYXJ5LmFjY2Vzc0JvdW5kYXJ5UnVsZXMubGVuZ3RoID5cbiAgICAgICAgICAgIGV4cG9ydHMuTUFYX0FDQ0VTU19CT1VOREFSWV9SVUxFU19DT1VOVCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgYWNjZXNzIGJvdW5kYXJ5IGhhcyBtb3JlIHRoYW4gJyArXG4gICAgICAgICAgICAgICAgYCR7ZXhwb3J0cy5NQVhfQUNDRVNTX0JPVU5EQVJZX1JVTEVTX0NPVU5UfSBhY2Nlc3MgYm91bmRhcnkgcnVsZXMuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgYXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gc2hvdWxkIGJlIGRlZmluZWQgaW4gZWFjaCBBY2Nlc3MgQm91bmRhcnlcbiAgICAgICAgLy8gUnVsZS5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNyZWRlbnRpYWxBY2Nlc3NCb3VuZGFyeS5hY2Nlc3NCb3VuZGFyeVxuICAgICAgICAgICAgLmFjY2Vzc0JvdW5kYXJ5UnVsZXMpIHtcbiAgICAgICAgICAgIGlmIChydWxlLmF2YWlsYWJsZVBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIHBlcm1pc3Npb24gc2hvdWxkIGJlIGRlZmluZWQgaW4gYWNjZXNzIGJvdW5kYXJ5IHJ1bGVzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RzQ3JlZGVudGlhbCA9IG5ldyBzdHMuU3RzQ3JlZGVudGlhbHMoYGh0dHBzOi8vc3RzLiR7dGhpcy51bml2ZXJzZURvbWFpbn0vdjEvdG9rZW5gKTtcbiAgICAgICAgdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4gPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIG1lY2hhbmlzbSB0byBpbmplY3QgRG93bnNjb3BlZCBhY2Nlc3MgdG9rZW5zIGRpcmVjdGx5LlxuICAgICAqIFRoZSBleHBpcnlfZGF0ZSBmaWVsZCBpcyByZXF1aXJlZCB0byBmYWNpbGl0YXRlIGRldGVybWluYXRpb24gb2YgdGhlIHRva2VuXG4gICAgICogZXhwaXJhdGlvbiB3aGljaCB3b3VsZCBtYWtlIGl0IGVhc2llciBmb3IgdGhlIHRva2VuIGNvbnN1bWVyIHRvIGhhbmRsZS5cbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIENyZWRlbnRpYWxzIG9iamVjdCB0byBzZXQgb24gdGhlIGN1cnJlbnQgY2xpZW50LlxuICAgICAqL1xuICAgIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGlmICghY3JlZGVudGlhbHMuZXhwaXJ5X2RhdGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFjY2VzcyB0b2tlbiBleHBpcnlfZGF0ZSBmaWVsZCBpcyBtaXNzaW5nIGluIHRoZSBwcm92aWRlZCAnICtcbiAgICAgICAgICAgICAgICAnY3JlZGVudGlhbHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpO1xuICAgICAgICB0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbiA9IGNyZWRlbnRpYWxzO1xuICAgIH1cbiAgICBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgLy8gSWYgdGhlIGNhY2hlZCBhY2Nlc3MgdG9rZW4gaXMgdW5hdmFpbGFibGUgb3IgZXhwaXJlZCwgZm9yY2UgcmVmcmVzaC5cbiAgICAgICAgLy8gVGhlIERvd25zY29wZWQgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmV0dXJuZWQgaW5cbiAgICAgICAgLy8gRG93bnNjb3BlZEFjY2Vzc1Rva2VuUmVzcG9uc2UgZm9ybWF0LlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuIHx8XG4gICAgICAgICAgICB0aGlzLmlzRXhwaXJlZCh0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbikpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXR1cm4gRG93bnNjb3BlZCBhY2Nlc3MgdG9rZW4gaW4gRG93bnNjb3BlZEFjY2Vzc1Rva2VuUmVzcG9uc2UgZm9ybWF0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IHRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lOiB0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbi5leHBpcnlfZGF0ZSxcbiAgICAgICAgICAgIHJlczogdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4ucmVzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbWFpbiBhdXRoZW50aWNhdGlvbiBpbnRlcmZhY2UuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHVybCB3aGljaCB3aGVuXG4gICAgICogcHJlc2VudCBpcyB0aGUgZW5kcG9pbnQgYmVpbmcgYWNjZXNzZWQsIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB3aGljaFxuICAgICAqIHJlc29sdmVzIHdpdGggYXV0aG9yaXphdGlvbiBoZWFkZXIgZmllbGRzLlxuICAgICAqXG4gICAgICogVGhlIHJlc3VsdCBoYXMgdGhlIGZvcm06XG4gICAgICogeyBBdXRob3JpemF0aW9uOiAnQmVhcmVyIDxhY2Nlc3NfdG9rZW5fdmFsdWU+JyB9XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UmVxdWVzdEhlYWRlcnMoKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW5SZXNwb25zZS50b2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTaGFyZWRNZXRhZGF0YUhlYWRlcnMoaGVhZGVycyk7XG4gICAgfVxuICAgIHJlcXVlc3Qob3B0cywgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RBc3luYyhvcHRzKS50aGVuKHIgPT4gY2FsbGJhY2sobnVsbCwgciksIGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlLCBlLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEFzeW5jKG9wdHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHByb3ZpZGVkIEhUVFAgcmVxdWVzdCwgcHJvY2Vzc2VzIGl0IGFuZCByZXNvbHZlcyB3aXRoIHRoZVxuICAgICAqIHJldHVybmVkIHJlc3BvbnNlLlxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBIVFRQIHJlcXVlc3Qgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gcmVBdXRoUmV0cmllZCBXaGV0aGVyIHRoZSBjdXJyZW50IGF0dGVtcHQgaXMgYSByZXRyeSBhZnRlciBhIGZhaWxlZCBhdHRlbXB0IGR1ZSB0byBhbiBhdXRoIGZhaWx1cmVcbiAgICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXG4gICAgICovXG4gICAgYXN5bmMgcmVxdWVzdEFzeW5jKG9wdHMsIHJlQXV0aFJldHJpZWQgPSBmYWxzZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdEhlYWRlcnMoKTtcbiAgICAgICAgICAgIG9wdHMuaGVhZGVycyA9IG9wdHMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SGVhZGVycyAmJiByZXF1ZXN0SGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddKSB7XG4gICAgICAgICAgICAgICAgb3B0cy5oZWFkZXJzWyd4LWdvb2ctdXNlci1wcm9qZWN0J10gPVxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sneC1nb29nLXVzZXItcHJvamVjdCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RIZWFkZXJzICYmIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcHRzLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gZS5yZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1cztcbiAgICAgICAgICAgICAgICAvLyBSZXRyeSB0aGUgcmVxdWVzdCBmb3IgbWV0YWRhdGEgaWYgdGhlIGZvbGxvd2luZyBjcml0ZXJpYSBhcmUgdHJ1ZTpcbiAgICAgICAgICAgICAgICAvLyAtIFdlIGhhdmVuJ3QgYWxyZWFkeSByZXRyaWVkLiAgSXQgb25seSBtYWtlcyBzZW5zZSB0byByZXRyeSBvbmNlLlxuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlc3BvbnNlIHdhcyBhIDQwMSBvciBhIDQwM1xuICAgICAgICAgICAgICAgIC8vIC0gVGhlIHJlcXVlc3QgZGlkbid0IHNlbmQgYSByZWFkYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgIC8vIC0gZm9yY2VSZWZyZXNoT25GYWlsdXJlIGlzIHRydWVcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlYWRhYmxlU3RyZWFtID0gcmVzLmNvbmZpZy5kYXRhIGluc3RhbmNlb2Ygc3RyZWFtLlJlYWRhYmxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXV0aEVyciA9IHN0YXR1c0NvZGUgPT09IDQwMSB8fCBzdGF0dXNDb2RlID09PSA0MDM7XG4gICAgICAgICAgICAgICAgaWYgKCFyZUF1dGhSZXRyaWVkICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aEVyciAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNSZWFkYWJsZVN0cmVhbSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVmcmVzaE9uRmFpbHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbkFzeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcXVlc3RBc3luYyhvcHRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yY2VzIHRva2VuIHJlZnJlc2gsIGV2ZW4gaWYgdW5leHBpcmVkIHRva2VucyBhcmUgY3VycmVudGx5IGNhY2hlZC5cbiAgICAgKiBHQ1AgYWNjZXNzIHRva2VucyBhcmUgcmV0cmlldmVkIGZyb20gYXV0aGNsaWVudCBvYmplY3Qvc291cmNlIGNyZWRlbnRpYWwuXG4gICAgICogVGhlbiBHQ1AgYWNjZXNzIHRva2VucyBhcmUgZXhjaGFuZ2VkIGZvciBkb3duc2NvcGVkIGFjY2VzcyB0b2tlbnMgdmlhIHRoZVxuICAgICAqIHRva2VuIGV4Y2hhbmdlIGVuZHBvaW50LlxuICAgICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZnJlc2ggZG93bnNjb3BlZCBhY2Nlc3MgdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgcmVmcmVzaEFjY2Vzc1Rva2VuQXN5bmMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gUmV0cmlldmUgR0NQIGFjY2VzcyB0b2tlbiBmcm9tIHNvdXJjZSBjcmVkZW50aWFsLlxuICAgICAgICBjb25zdCBzdWJqZWN0VG9rZW4gPSAoYXdhaXQgdGhpcy5hdXRoQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCkpLnRva2VuO1xuICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIFNUUyBjcmVkZW50aWFscyBvcHRpb25zLlxuICAgICAgICBjb25zdCBzdHNDcmVkZW50aWFsc09wdGlvbnMgPSB7XG4gICAgICAgICAgICBncmFudFR5cGU6IFNUU19HUkFOVF9UWVBFLFxuICAgICAgICAgICAgcmVxdWVzdGVkVG9rZW5UeXBlOiBTVFNfUkVRVUVTVF9UT0tFTl9UWVBFLFxuICAgICAgICAgICAgc3ViamVjdFRva2VuOiBzdWJqZWN0VG9rZW4sXG4gICAgICAgICAgICBzdWJqZWN0VG9rZW5UeXBlOiBTVFNfU1VCSkVDVF9UT0tFTl9UWVBFLFxuICAgICAgICB9O1xuICAgICAgICAvLyBFeGNoYW5nZSB0aGUgc291cmNlIEF1dGhDbGllbnQgYWNjZXNzIHRva2VuIGZvciBhIERvd25zY29wZWQgYWNjZXNzXG4gICAgICAgIC8vIHRva2VuLlxuICAgICAgICBjb25zdCBzdHNSZXNwb25zZSA9IGF3YWl0IHRoaXMuc3RzQ3JlZGVudGlhbC5leGNoYW5nZVRva2VuKHN0c0NyZWRlbnRpYWxzT3B0aW9ucywgdW5kZWZpbmVkLCB0aGlzLmNyZWRlbnRpYWxBY2Nlc3NCb3VuZGFyeSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgU1RTIGVuZHBvaW50IHdpbGwgb25seSByZXR1cm4gdGhlIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIGRvd25zY29wZWRcbiAgICAgICAgICogYWNjZXNzIHRva2VuIGlmIHRoZSBvcmlnaW5hbCBhY2Nlc3MgdG9rZW4gcmVwcmVzZW50cyBhIHNlcnZpY2UgYWNjb3VudC5cbiAgICAgICAgICogVGhlIGRvd25zY29wZWQgdG9rZW4ncyBleHBpcmF0aW9uIHRpbWUgd2lsbCBhbHdheXMgbWF0Y2ggdGhlIHNvdXJjZVxuICAgICAgICAgKiBjcmVkZW50aWFsIGV4cGlyYXRpb24uIFdoZW4gbm8gZXhwaXJlc19pbiBpcyByZXR1cm5lZCwgd2UgY2FuIGNvcHkgdGhlXG4gICAgICAgICAqIHNvdXJjZSBjcmVkZW50aWFsJ3MgZXhwaXJhdGlvbiB0aW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgc291cmNlQ3JlZEV4cGlyZURhdGUgPSAoKF9hID0gdGhpcy5hdXRoQ2xpZW50LmNyZWRlbnRpYWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXhwaXJ5X2RhdGUpIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGV4cGlyeURhdGUgPSBzdHNSZXNwb25zZS5leHBpcmVzX2luXG4gICAgICAgICAgICA/IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgc3RzUmVzcG9uc2UuZXhwaXJlc19pbiAqIDEwMDBcbiAgICAgICAgICAgIDogc291cmNlQ3JlZEV4cGlyZURhdGU7XG4gICAgICAgIC8vIFNhdmUgcmVzcG9uc2UgaW4gY2FjaGVkIGFjY2VzcyB0b2tlbi5cbiAgICAgICAgdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW4gPSB7XG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46IHN0c1Jlc3BvbnNlLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIGV4cGlyeV9kYXRlOiBleHBpcnlEYXRlLFxuICAgICAgICAgICAgcmVzOiBzdHNSZXNwb25zZS5yZXMsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFNhdmUgY3JlZGVudGlhbHMuXG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbik7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNyZWRlbnRpYWxzLnJlcztcbiAgICAgICAgLy8gVHJpZ2dlciB0b2tlbnMgZXZlbnQgdG8gbm90aWZ5IGV4dGVybmFsIGxpc3RlbmVycy5cbiAgICAgICAgdGhpcy5lbWl0KCd0b2tlbnMnLCB7XG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiBudWxsLFxuICAgICAgICAgICAgZXhwaXJ5X2RhdGU6IHRoaXMuY2FjaGVkRG93bnNjb3BlZEFjY2Vzc1Rva2VuLmV4cGlyeV9kYXRlLFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmNhY2hlZERvd25zY29wZWRBY2Nlc3NUb2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICB0b2tlbl90eXBlOiAnQmVhcmVyJyxcbiAgICAgICAgICAgIGlkX3Rva2VuOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgYWNjZXNzIHRva2VuLlxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWREb3duc2NvcGVkQWNjZXNzVG9rZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMgYXJlIGV4cGlyZWQgb3Igbm90LlxuICAgICAqIElmIHRoZXJlIGlzIG5vIGV4cGlyeSB0aW1lLCBhc3N1bWVzIHRoZSB0b2tlbiBpcyBub3QgZXhwaXJlZCBvciBleHBpcmluZy5cbiAgICAgKiBAcGFyYW0gZG93bnNjb3BlZEFjY2Vzc1Rva2VuIFRoZSBjcmVkZW50aWFscyB0byBjaGVjayBmb3IgZXhwaXJhdGlvbi5cbiAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGNyZWRlbnRpYWxzIGFyZSBleHBpcmVkIG9yIG5vdC5cbiAgICAgKi9cbiAgICBpc0V4cGlyZWQoZG93bnNjb3BlZEFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICByZXR1cm4gZG93bnNjb3BlZEFjY2Vzc1Rva2VuLmV4cGlyeV9kYXRlXG4gICAgICAgICAgICA/IG5vdyA+PVxuICAgICAgICAgICAgICAgIGRvd25zY29wZWRBY2Nlc3NUb2tlbi5leHBpcnlfZGF0ZSAtIHRoaXMuZWFnZXJSZWZyZXNoVGhyZXNob2xkTWlsbGlzXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydHMuRG93bnNjb3BlZENsaWVudCA9IERvd25zY29wZWRDbGllbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjQgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlBhc3NUaHJvdWdoQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgYXV0aGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aGNsaWVudFwiKTtcbi8qKlxuICogQW4gQXV0aENsaWVudCB3aXRob3V0IGFueSBBdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4gVXNlZnVsIGZvcjpcbiAqIC0gQW5vbnltb3VzIGFjY2Vzc1xuICogLSBMb2NhbCBFbXVsYXRvcnNcbiAqIC0gVGVzdGluZyBFbnZpcm9ubWVudHNcbiAqXG4gKi9cbmNsYXNzIFBhc3NUaHJvdWdoQ2xpZW50IGV4dGVuZHMgYXV0aGNsaWVudF8xLkF1dGhDbGllbnQge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByZXF1ZXN0IHdpdGhvdXQgYW55IGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgb3IgY2hlY2tzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKlxuICAgICAqIEluIHRlc3RpbmcgZW52aXJvbm1lbnRzIGl0IG1heSBiZSB1c2VmdWwgdG8gY2hhbmdlIHRoZSBwcm92aWRlZFxuICAgICAqIHtAbGluayBBdXRoQ2xpZW50LnRyYW5zcG9ydGVyfSBmb3IgYW55IGRlc2lyZWQgcmVxdWVzdCBvdmVycmlkZXMvaGFuZGxpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0c1xuICAgICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBvZiB0aGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBhc3luYyByZXF1ZXN0KG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0ZXIucmVxdWVzdChvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSByZXF1aXJlZCBtZXRob2Qgb2YgdGhlIGJhc2UgY2xhc3MuXG4gICAgICogQWx3YXlzIHdpbGwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt9XG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSByZXF1aXJlZCBtZXRob2Qgb2YgdGhlIGJhc2UgY2xhc3MuXG4gICAgICogQWx3YXlzIHdpbGwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt9XG4gICAgICovXG4gICAgYXN5bmMgZ2V0UmVxdWVzdEhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG5leHBvcnRzLlBhc3NUaHJvdWdoQ2xpZW50ID0gUGFzc1Rocm91Z2hDbGllbnQ7XG5jb25zdCBhID0gbmV3IFBhc3NUaHJvdWdoQ2xpZW50KCk7XG5hLmdldEFjY2Vzc1Rva2VuKCk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Hb29nbGVBdXRoID0gZXhwb3J0cy5hdXRoID0gZXhwb3J0cy5EZWZhdWx0VHJhbnNwb3J0ZXIgPSBleHBvcnRzLlBhc3NUaHJvdWdoQ2xpZW50ID0gZXhwb3J0cy5FeGVjdXRhYmxlRXJyb3IgPSBleHBvcnRzLlBsdWdnYWJsZUF1dGhDbGllbnQgPSBleHBvcnRzLkRvd25zY29wZWRDbGllbnQgPSBleHBvcnRzLkJhc2VFeHRlcm5hbEFjY291bnRDbGllbnQgPSBleHBvcnRzLkV4dGVybmFsQWNjb3VudENsaWVudCA9IGV4cG9ydHMuSWRlbnRpdHlQb29sQ2xpZW50ID0gZXhwb3J0cy5Bd3NSZXF1ZXN0U2lnbmVyID0gZXhwb3J0cy5Bd3NDbGllbnQgPSBleHBvcnRzLlVzZXJSZWZyZXNoQ2xpZW50ID0gZXhwb3J0cy5Mb2dpblRpY2tldCA9IGV4cG9ydHMuQ2xpZW50QXV0aGVudGljYXRpb24gPSBleHBvcnRzLk9BdXRoMkNsaWVudCA9IGV4cG9ydHMuQ29kZUNoYWxsZW5nZU1ldGhvZCA9IGV4cG9ydHMuSW1wZXJzb25hdGVkID0gZXhwb3J0cy5KV1QgPSBleHBvcnRzLkpXVEFjY2VzcyA9IGV4cG9ydHMuSWRUb2tlbkNsaWVudCA9IGV4cG9ydHMuSUFNQXV0aCA9IGV4cG9ydHMuR0NQRW52ID0gZXhwb3J0cy5Db21wdXRlID0gZXhwb3J0cy5ERUZBVUxUX1VOSVZFUlNFID0gZXhwb3J0cy5BdXRoQ2xpZW50ID0gZXhwb3J0cy5nYXhpb3MgPSBleHBvcnRzLmdjcE1ldGFkYXRhID0gdm9pZCAwO1xuLy8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5jb25zdCBnb29nbGVhdXRoXzEgPSByZXF1aXJlKFwiLi9hdXRoL2dvb2dsZWF1dGhcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJHb29nbGVBdXRoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnb29nbGVhdXRoXzEuR29vZ2xlQXV0aDsgfSB9KTtcbi8vIEV4cG9ydCBjb21tb24gZGVwcyB0byBlbnN1cmUgdHlwZXMvaW5zdGFuY2VzIGFyZSB0aGUgZXhhY3QgbWF0Y2guIFVzZWZ1bFxuLy8gZm9yIGNvbnNpc3RlbnRseSBjb25maWd1cmluZyB0aGUgbGlicmFyeSBhY3Jvc3MgdmVyc2lvbnMuXG5leHBvcnRzLmdjcE1ldGFkYXRhID0gcmVxdWlyZShcImdjcC1tZXRhZGF0YVwiKTtcbmV4cG9ydHMuZ2F4aW9zID0gcmVxdWlyZShcImdheGlvc1wiKTtcbnZhciBhdXRoY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2F1dGhjbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBdXRoQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhdXRoY2xpZW50XzEuQXV0aENsaWVudDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRFRkFVTFRfVU5JVkVSU0VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGF1dGhjbGllbnRfMS5ERUZBVUxUX1VOSVZFUlNFOyB9IH0pO1xudmFyIGNvbXB1dGVjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvY29tcHV0ZWNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbXB1dGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbXB1dGVjbGllbnRfMS5Db21wdXRlOyB9IH0pO1xudmFyIGVudkRldGVjdF8xID0gcmVxdWlyZShcIi4vYXV0aC9lbnZEZXRlY3RcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJHQ1BFbnZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudkRldGVjdF8xLkdDUEVudjsgfSB9KTtcbnZhciBpYW1fMSA9IHJlcXVpcmUoXCIuL2F1dGgvaWFtXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSUFNQXV0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWFtXzEuSUFNQXV0aDsgfSB9KTtcbnZhciBpZHRva2VuY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2lkdG9rZW5jbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJZFRva2VuQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpZHRva2VuY2xpZW50XzEuSWRUb2tlbkNsaWVudDsgfSB9KTtcbnZhciBqd3RhY2Nlc3NfMSA9IHJlcXVpcmUoXCIuL2F1dGgvand0YWNjZXNzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSldUQWNjZXNzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBqd3RhY2Nlc3NfMS5KV1RBY2Nlc3M7IH0gfSk7XG52YXIgand0Y2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2p3dGNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkpXVFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gand0Y2xpZW50XzEuSldUOyB9IH0pO1xudmFyIGltcGVyc29uYXRlZF8xID0gcmVxdWlyZShcIi4vYXV0aC9pbXBlcnNvbmF0ZWRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbXBlcnNvbmF0ZWRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGltcGVyc29uYXRlZF8xLkltcGVyc29uYXRlZDsgfSB9KTtcbnZhciBvYXV0aDJjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvb2F1dGgyY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUNoYWxsZW5nZU1ldGhvZFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2F1dGgyY2xpZW50XzEuQ29kZUNoYWxsZW5nZU1ldGhvZDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9BdXRoMkNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2F1dGgyY2xpZW50XzEuT0F1dGgyQ2xpZW50OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2xpZW50QXV0aGVudGljYXRpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9hdXRoMmNsaWVudF8xLkNsaWVudEF1dGhlbnRpY2F0aW9uOyB9IH0pO1xudmFyIGxvZ2ludGlja2V0XzEgPSByZXF1aXJlKFwiLi9hdXRoL2xvZ2ludGlja2V0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9naW5UaWNrZXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvZ2ludGlja2V0XzEuTG9naW5UaWNrZXQ7IH0gfSk7XG52YXIgcmVmcmVzaGNsaWVudF8xID0gcmVxdWlyZShcIi4vYXV0aC9yZWZyZXNoY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVXNlclJlZnJlc2hDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZnJlc2hjbGllbnRfMS5Vc2VyUmVmcmVzaENsaWVudDsgfSB9KTtcbnZhciBhd3NjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvYXdzY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXdzQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBhd3NjbGllbnRfMS5Bd3NDbGllbnQ7IH0gfSk7XG52YXIgYXdzcmVxdWVzdHNpZ25lcl8xID0gcmVxdWlyZShcIi4vYXV0aC9hd3NyZXF1ZXN0c2lnbmVyXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXdzUmVxdWVzdFNpZ25lclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXdzcmVxdWVzdHNpZ25lcl8xLkF3c1JlcXVlc3RTaWduZXI7IH0gfSk7XG52YXIgaWRlbnRpdHlwb29sY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2lkZW50aXR5cG9vbGNsaWVudFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklkZW50aXR5UG9vbENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaWRlbnRpdHlwb29sY2xpZW50XzEuSWRlbnRpdHlQb29sQ2xpZW50OyB9IH0pO1xudmFyIGV4dGVybmFsY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2V4dGVybmFsY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRXh0ZXJuYWxBY2NvdW50Q2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBleHRlcm5hbGNsaWVudF8xLkV4dGVybmFsQWNjb3VudENsaWVudDsgfSB9KTtcbnZhciBiYXNlZXh0ZXJuYWxjbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvYmFzZWV4dGVybmFsY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmFzZUV4dGVybmFsQWNjb3VudENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmFzZWV4dGVybmFsY2xpZW50XzEuQmFzZUV4dGVybmFsQWNjb3VudENsaWVudDsgfSB9KTtcbnZhciBkb3duc2NvcGVkY2xpZW50XzEgPSByZXF1aXJlKFwiLi9hdXRoL2Rvd25zY29wZWRjbGllbnRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEb3duc2NvcGVkQ2xpZW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb3duc2NvcGVkY2xpZW50XzEuRG93bnNjb3BlZENsaWVudDsgfSB9KTtcbnZhciBwbHVnZ2FibGVfYXV0aF9jbGllbnRfMSA9IHJlcXVpcmUoXCIuL2F1dGgvcGx1Z2dhYmxlLWF1dGgtY2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGx1Z2dhYmxlQXV0aENsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGx1Z2dhYmxlX2F1dGhfY2xpZW50XzEuUGx1Z2dhYmxlQXV0aENsaWVudDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkV4ZWN1dGFibGVFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGx1Z2dhYmxlX2F1dGhfY2xpZW50XzEuRXhlY3V0YWJsZUVycm9yOyB9IH0pO1xudmFyIHBhc3N0aHJvdWdoXzEgPSByZXF1aXJlKFwiLi9hdXRoL3Bhc3N0aHJvdWdoXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFzc1Rocm91Z2hDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhc3N0aHJvdWdoXzEuUGFzc1Rocm91Z2hDbGllbnQ7IH0gfSk7XG52YXIgdHJhbnNwb3J0ZXJzXzEgPSByZXF1aXJlKFwiLi90cmFuc3BvcnRlcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZWZhdWx0VHJhbnNwb3J0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyYW5zcG9ydGVyc18xLkRlZmF1bHRUcmFuc3BvcnRlcjsgfSB9KTtcbmNvbnN0IGF1dGggPSBuZXcgZ29vZ2xlYXV0aF8xLkdvb2dsZUF1dGgoKTtcbmV4cG9ydHMuYXV0aCA9IGF1dGg7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNwYW5LaW5kID0gZXhwb3J0cy5Db2RlID0gZXhwb3J0cy5MaW5rVHlwZSA9IGV4cG9ydHMuVHlwZSA9IHZvaWQgMDtcbnZhciBUeXBlO1xuKGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgVHlwZVtUeXBlW1wiVFlQRV9VTlNQRUNJRklFRFwiXSA9IDBdID0gXCJUWVBFX1VOU1BFQ0lGSUVEXCI7XG4gICAgVHlwZVtUeXBlW1wiU0VOVFwiXSA9IDFdID0gXCJTRU5UXCI7XG4gICAgVHlwZVtUeXBlW1wiUkVDRUlWRURcIl0gPSAyXSA9IFwiUkVDRUlWRURcIjtcbn0pKFR5cGUgPSBleHBvcnRzLlR5cGUgfHwgKGV4cG9ydHMuVHlwZSA9IHt9KSk7XG52YXIgTGlua1R5cGU7XG4oZnVuY3Rpb24gKExpbmtUeXBlKSB7XG4gICAgTGlua1R5cGVbTGlua1R5cGVbXCJVTlNQRUNJRklFRFwiXSA9IDBdID0gXCJVTlNQRUNJRklFRFwiO1xuICAgIExpbmtUeXBlW0xpbmtUeXBlW1wiQ0hJTERfTElOS0VEX1NQQU5cIl0gPSAxXSA9IFwiQ0hJTERfTElOS0VEX1NQQU5cIjtcbiAgICBMaW5rVHlwZVtMaW5rVHlwZVtcIlBBUkVOVF9MSU5LRURfU1BBTlwiXSA9IDJdID0gXCJQQVJFTlRfTElOS0VEX1NQQU5cIjtcbn0pKExpbmtUeXBlID0gZXhwb3J0cy5MaW5rVHlwZSB8fCAoZXhwb3J0cy5MaW5rVHlwZSA9IHt9KSk7XG4vKipcbiAqIEEgZ29vZ2xlLnJwYy5Db2RlXG4gKi9cbnZhciBDb2RlO1xuKGZ1bmN0aW9uIChDb2RlKSB7XG4gICAgLy8gVGhlc2UgYXJlIHRoZSBvbmx5IHR3byB3ZSBjYXJlIGFib3V0IG1hcHBpbmcgdG9cbiAgICBDb2RlW0NvZGVbXCJPS1wiXSA9IDBdID0gXCJPS1wiO1xuICAgIENvZGVbQ29kZVtcIlVOS05PV05cIl0gPSAyXSA9IFwiVU5LTk9XTlwiO1xufSkoQ29kZSA9IGV4cG9ydHMuQ29kZSB8fCAoZXhwb3J0cy5Db2RlID0ge30pKTtcbi8qKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL2dvb2dsZWFwaXMvYmxvYi84Y2Q0ZDEyYzBhMDI4NzI0NjkxNzY2NTk2MDM0NTFkODRjMGZiZWU3L2dvb2dsZS9kZXZ0b29scy9jbG91ZHRyYWNlL3YyL3RyYWNlLnByb3RvI0wxODJcbiAqL1xudmFyIFNwYW5LaW5kO1xuKGZ1bmN0aW9uIChTcGFuS2luZCkge1xuICAgIC8vIFVuc3BlY2lmaWVkLiBEbyBOT1QgdXNlIGFzIGRlZmF1bHQuXG4gICAgLy8gSW1wbGVtZW50YXRpb25zIE1BWSBhc3N1bWUgU3BhbktpbmQuSU5URVJOQUwgdG8gYmUgZGVmYXVsdC5cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlNQQU5fS0lORF9VTlNQRUNJRklFRFwiXSA9IDBdID0gXCJTUEFOX0tJTkRfVU5TUEVDSUZJRURcIjtcbiAgICAvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBpcyB1c2VkIGludGVybmFsbHkuIERlZmF1bHQgdmFsdWUuXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJJTlRFUk5BTFwiXSA9IDFdID0gXCJJTlRFUk5BTFwiO1xuICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyBzZXJ2ZXItc2lkZSBoYW5kbGluZyBvZiBhbiBSUEMgb3Igb3RoZXJcbiAgICAvLyByZW1vdGUgbmV0d29yayByZXF1ZXN0LlxuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiU0VSVkVSXCJdID0gMl0gPSBcIlNFUlZFUlwiO1xuICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBzcGFuIGNvdmVycyB0aGUgY2xpZW50LXNpZGUgd3JhcHBlciBhcm91bmQgYW4gUlBDIG9yXG4gICAgLy8gb3RoZXIgcmVtb3RlIHJlcXVlc3QuXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJDTElFTlRcIl0gPSAzXSA9IFwiQ0xJRU5UXCI7XG4gICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIHByb2R1Y2VyIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGEgYnJva2VyLlxuICAgIC8vIFVubGlrZSBjbGllbnQgYW5kICBzZXJ2ZXIsIHRoZXJlIGlzIG5vIGRpcmVjdCBjcml0aWNhbCBwYXRoIGxhdGVuY3lcbiAgICAvLyByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9kdWNlciBhbmQgY29uc3VtZXIgc3BhbnMgKGUuZy4gcHVibGlzaGluZyBhXG4gICAgLy8gbWVzc2FnZSB0byBhIHB1YnN1YiBzZXJ2aWNlKS5cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIlBST0RVQ0VSXCJdID0gNF0gPSBcIlBST0RVQ0VSXCI7XG4gICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gZGVzY3JpYmVzIGNvbnN1bWVyIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSBhXG4gICAgLy8gYnJva2VyLiBVbmxpa2UgY2xpZW50IGFuZCAgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aFxuICAgIC8vIGxhdGVuY3kgcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zIChlLmcuIHJlY2VpdmluZ1xuICAgIC8vIGEgbWVzc2FnZSBmcm9tIGEgcHVic3ViIHNlcnZpY2Ugc3Vic2NyaXB0aW9uKS5cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNV0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCA9IGV4cG9ydHMuU3BhbktpbmQgfHwgKGV4cG9ydHMuU3BhbktpbmQgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZmFhc0Nsb3VkUmVnaW9uID0gZXhwb3J0cy5mYWFzSW5zdGFuY2UgPSBleHBvcnRzLmZhYXNWZXJzaW9uID0gZXhwb3J0cy5mYWFzTmFtZSA9IGV4cG9ydHMub25DbG91ZEZ1bmN0aW9ucyA9IGV4cG9ydHMub25DbG91ZFJ1biA9IHZvaWQgMDtcbi8qKlxuICogSW1wbGVtZW50YXRpb24gaW4gdGhpcyBmaWxlIGNvcGllZCBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9vcGVudGVsZW1ldHJ5LW9wZXJhdGlvbnMtZ28vYmxvYi92MS44LjAvZGV0ZWN0b3JzL2djcC9mYWFzLmdvXG4gKi9cbmNvbnN0IG1ldGFkYXRhID0gcmVxdWlyZShcImdjcC1tZXRhZGF0YVwiKTtcbmNvbnN0IElEX01FVEFEQVRBX0FUVFIgPSAnaWQnO1xuY29uc3QgQ0xPVURfUlVOX0NPTkZJR19FTlYgPSAnS19DT05GSUdVUkFUSU9OJztcbmNvbnN0IENMT1VEX0ZVTkNUSU9OX1RBUkdFVF9FTlYgPSAnRlVOQ1RJT05fVEFSR0VUJztcbmNvbnN0IEZBQVNfU0VSVklDRV9FTlYgPSAnS19TRVJWSUNFJztcbmNvbnN0IEZBQVNfUkVWSVNJT05fRU5WID0gJ0tfUkVWSVNJT04nO1xuY29uc3QgUkVHSU9OX01FVEFEQVRBX0FUVFIgPSAncmVnaW9uJztcbmFzeW5jIGZ1bmN0aW9uIG9uQ2xvdWRSdW4oKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W0NMT1VEX1JVTl9DT05GSUdfRU5WXSAhPT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5vbkNsb3VkUnVuID0gb25DbG91ZFJ1bjtcbmFzeW5jIGZ1bmN0aW9uIG9uQ2xvdWRGdW5jdGlvbnMoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W0NMT1VEX0ZVTkNUSU9OX1RBUkdFVF9FTlZdICE9PSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLm9uQ2xvdWRGdW5jdGlvbnMgPSBvbkNsb3VkRnVuY3Rpb25zO1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgQ2xvdWQgUnVuIG9yIENsb3VkIEZ1bmN0aW9uLiBDaGVjayB0aGF0IHtAbGluayBvbkNsb3VkUnVuKCl9IG9yIHtAbGlua1xuICogb25DbG91ZEZ1bmN0aW9ucygpfSBpcyB0cnVlIGJlZm9yZSBjYWxsaW5nIHRoaXMsIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBmYWFzTmFtZSgpIHtcbiAgICByZXR1cm4gbG9va3VwRW52KEZBQVNfU0VSVklDRV9FTlYpO1xufVxuZXhwb3J0cy5mYWFzTmFtZSA9IGZhYXNOYW1lO1xuLyoqXG4gKiBUaGUgdmVyc2lvbi9yZXZpc2lvbiBvZiB0aGUgQ2xvdWQgUnVuIG9yIENsb3VkIEZ1bmN0aW9uLiBDaGVjayB0aGF0IHtAbGluayBvbkNsb3VkUnVuKCl9IG9yXG4gKiB7QGxpbmsgb25DbG91ZEZ1bmN0aW9ucygpfSBpcyB0cnVlIGJlZm9yZSBjYWxsaW5nIHRoaXMsIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBmYWFzVmVyc2lvbigpIHtcbiAgICByZXR1cm4gbG9va3VwRW52KEZBQVNfUkVWSVNJT05fRU5WKTtcbn1cbmV4cG9ydHMuZmFhc1ZlcnNpb24gPSBmYWFzVmVyc2lvbjtcbi8qKlxuICogVGhlIElEIGZvciB0aGUgcnVubmluZyBpbnN0YW5jZSBvZiBhIENsb3VkIFJ1biBvciBDbG91ZCBGdW5jdGlvbi4gQ2hlY2sgdGhhdCB7QGxpbmtcbiAqIG9uQ2xvdWRSdW4oKX0gb3Ige0BsaW5rIG9uQ2xvdWRGdW5jdGlvbnMoKX0gaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3dcbiAqIGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZhYXNJbnN0YW5jZSgpIHtcbiAgICAvLyBNYXkgYmUgYSBiaWdudW1iZXIuanMgQmlnTnVtYmVyIHdoaWNoIGNhbiBqdXN0IGJlIGNvbnZlcnRlZCB3aXRoIHRvU3RyaW5nKCkuIFNlZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVhcGlzL2djcC1tZXRhZGF0YSN0YWtlLWNhcmUtd2l0aC1sYXJnZS1udW1iZXItdmFsdWVkLXByb3BlcnRpZXNcbiAgICBjb25zdCBpZCA9IGF3YWl0IG1ldGFkYXRhLmluc3RhbmNlKElEX01FVEFEQVRBX0FUVFIpO1xuICAgIHJldHVybiBpZC50b1N0cmluZygpO1xufVxuZXhwb3J0cy5mYWFzSW5zdGFuY2UgPSBmYWFzSW5zdGFuY2U7XG4vKipcbiAqIFRoZSBjbG91ZCByZWdpb24gd2hlcmUgdGhlIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgYSBDbG91ZCBSdW4gb3IgQ2xvdWQgRnVuY3Rpb24gaXMgbG9jYXRlZC5cbiAqIENoZWNrIHRoYXQge0BsaW5rIG9uQ2xvdWRSdW4oKX0gb3Ige0BsaW5rIG9uQ2xvdWRGdW5jdGlvbnMoKX0gaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLFxuICogb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZhYXNDbG91ZFJlZ2lvbigpIHtcbiAgICBjb25zdCByZWdpb24gPSBhd2FpdCBtZXRhZGF0YS5pbnN0YW5jZShSRUdJT05fTUVUQURBVEFfQVRUUik7XG4gICAgcmV0dXJuIHJlZ2lvbi5zbGljZShyZWdpb24ubGFzdEluZGV4T2YoJy8nKSArIDEpO1xufVxuZXhwb3J0cy5mYWFzQ2xvdWRSZWdpb24gPSBmYWFzQ2xvdWRSZWdpb247XG5mdW5jdGlvbiBsb29rdXBFbnYoa2V5KSB7XG4gICAgY29uc3QgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnZpcm9ubWVudCB2YXJpYWJsZSAke2tleX0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mYWFzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmF2YWlsYWJpbGl0eVpvbmVBbmRSZWdpb24gPSBleHBvcnRzLmhvc3ROYW1lID0gZXhwb3J0cy5ob3N0SWQgPSBleHBvcnRzLmhvc3RUeXBlID0gZXhwb3J0cy5vbkdjZSA9IHZvaWQgMDtcbi8qKlxuICogSW1wbGVtZW50YXRpb24gaW4gdGhpcyBmaWxlIGNvcGllZCBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9vcGVudGVsZW1ldHJ5LW9wZXJhdGlvbnMtZ28vYmxvYi92MS44LjAvZGV0ZWN0b3JzL2djcC9nY2UuZ29cbiAqL1xuY29uc3QgYXBpXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuY29uc3QgbWV0YWRhdGEgPSByZXF1aXJlKFwiZ2NwLW1ldGFkYXRhXCIpO1xuY29uc3QgTUFDSElORV9UWVBFX01FVEFEQVRBX0FUVFIgPSAnbWFjaGluZS10eXBlJztcbmNvbnN0IElEX01FVEFEQVRBX0FUVFIgPSAnaWQnO1xuY29uc3QgSE9TVF9OQU1FX01FVEFEQVRBX0FUVFIgPSAnbmFtZSc7XG5jb25zdCBaT05FX01FVEFEQVRBX0FUVFIgPSAnem9uZSc7XG5hc3luYyBmdW5jdGlvbiBvbkdjZSgpIHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBtZXRhZGF0YS5pbnN0YW5jZShNQUNISU5FX1RZUEVfTUVUQURBVEFfQVRUUik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGFwaV8xLmRpYWcuZGVidWcoJ0NvdWxkIG5vdCBmZXRjaCBtZXRhZGF0YSBhdHRyaWJ1dGUgJXMsIGFzc3VtaW5nIG5vdCBvbiBHQ0UuIEVycm9yIHdhcyAlcycsIE1BQ0hJTkVfVFlQRV9NRVRBREFUQV9BVFRSLCBlcnIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0cy5vbkdjZSA9IG9uR2NlO1xuLyoqXG4gKiBUaGUgbWFjaGluZSB0eXBlIG9mIHRoZSBpbnN0YW5jZSBvbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmtcbiAqIG9uR2NlKCl9IGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhvc3RUeXBlKCkge1xuICAgIHJldHVybiBtZXRhZGF0YS5pbnN0YW5jZShNQUNISU5FX1RZUEVfTUVUQURBVEFfQVRUUik7XG59XG5leHBvcnRzLmhvc3RUeXBlID0gaG9zdFR5cGU7XG4vKipcbiAqIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgaW5zdGFuY2Ugb24gd2hpY2ggdGhpcyBwcm9ncmFtIGlzIHJ1bm5pbmcuIENoZWNrIHRoYXQge0BsaW5rIG9uR2NlKCl9XG4gKiBpcyB0cnVlIGJlZm9yZSBjYWxsaW5nIHRoaXMsIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBob3N0SWQoKSB7XG4gICAgLy8gTWF5IGJlIGEgYmlnbnVtYmVyLmpzIEJpZ051bWJlciB3aGljaCBjYW4ganVzdCBiZSBjb252ZXJ0ZWQgd2l0aCB0b1N0cmluZygpLiBTZWVcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlYXBpcy9nY3AtbWV0YWRhdGEjdGFrZS1jYXJlLXdpdGgtbGFyZ2UtbnVtYmVyLXZhbHVlZC1wcm9wZXJ0aWVzXG4gICAgY29uc3QgaWQgPSBhd2FpdCBtZXRhZGF0YS5pbnN0YW5jZShJRF9NRVRBREFUQV9BVFRSKTtcbiAgICByZXR1cm4gaWQudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMuaG9zdElkID0gaG9zdElkO1xuLyoqXG4gKiBUaGUgaW5zdGFuY2UgSUQgb2YgdGhlIGluc3RhbmNlIG9uIHdoaWNoIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nLiBDaGVjayB0aGF0IHtAbGluayBvbkdjZSgpfVxuICogaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG9zdE5hbWUoKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhLmluc3RhbmNlKEhPU1RfTkFNRV9NRVRBREFUQV9BVFRSKTtcbn1cbmV4cG9ydHMuaG9zdE5hbWUgPSBob3N0TmFtZTtcbi8qKlxuICogVGhlIHpvbmUgYW5kIHJlZ2lvbiBpbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmsgb25HY2UoKX0gaXMgdHJ1ZVxuICogYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF2YWlsYWJpbGl0eVpvbmVBbmRSZWdpb24oKSB7XG4gICAgY29uc3QgZnVsbFpvbmUgPSBhd2FpdCBtZXRhZGF0YS5pbnN0YW5jZShaT05FX01FVEFEQVRBX0FUVFIpO1xuICAgIC8vIEZvcm1hdCBkZXNjcmliZWQgaW5cbiAgICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21ldGFkYXRhL2RlZmF1bHQtbWV0YWRhdGEtdmFsdWVzI3ZtX2luc3RhbmNlX21ldGFkYXRhXG4gICAgY29uc3QgcmUgPSAvcHJvamVjdHNcXC9cXGQrXFwvem9uZXNcXC8oPzx6b25lPig/PHJlZ2lvbj5cXHcrLVxcdyspLVxcdyspLztcbiAgICBjb25zdCB7IHpvbmUsIHJlZ2lvbiB9ID0gZnVsbFpvbmUubWF0Y2gocmUpPy5ncm91cHMgPz8ge307XG4gICAgaWYgKCF6b25lIHx8ICFyZWdpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB6b25lIHdhcyBub3QgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdDogcHJvamVjdHMvUFJPSkVDVF9OVU0vem9uZXMvQ09VTlRSWS1SRUdJT04tWk9ORS4gR290ICR7ZnVsbFpvbmV9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHpvbmUsIHJlZ2lvbiB9O1xufVxuZXhwb3J0cy5hdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uID0gYXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdjZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdGFuZGFyZENsb3VkUmVnaW9uID0gZXhwb3J0cy5zdGFuZGFyZEF2YWlsYWJpbGl0eVpvbmUgPSBleHBvcnRzLmZsZXhBdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uID0gZXhwb3J0cy5zZXJ2aWNlSW5zdGFuY2UgPSBleHBvcnRzLnNlcnZpY2VWZXJzaW9uID0gZXhwb3J0cy5zZXJ2aWNlTmFtZSA9IGV4cG9ydHMub25BcHBFbmdpbmUgPSBleHBvcnRzLm9uQXBwRW5naW5lU3RhbmRhcmQgPSB2b2lkIDA7XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIGluIHRoaXMgZmlsZSBjb3BpZWQgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNsb3VkUGxhdGZvcm0vb3BlbnRlbGVtZXRyeS1vcGVyYXRpb25zLWdvL2Jsb2IvdjEuOC4wL2RldGVjdG9ycy9nY3AvYXBwX2VuZ2luZS5nb1xuICovXG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBnY2UgPSByZXF1aXJlKFwiLi9nY2VcIik7XG5jb25zdCBmYWFzID0gcmVxdWlyZShcIi4vZmFhc1wiKTtcbmNvbnN0IEdBRV9TRVJWSUNFX0VOViA9ICdHQUVfU0VSVklDRSc7XG5jb25zdCBHQUVfVkVSU0lPTl9FTlYgPSAnR0FFX1ZFUlNJT04nO1xuY29uc3QgR0FFX0lOU1RBTkNFX0VOViA9ICdHQUVfSU5TVEFOQ0UnO1xuY29uc3QgR0FFX0VOViA9ICdHQUVfRU5WJztcbmNvbnN0IEdBRV9TVEFOREFSRCA9ICdzdGFuZGFyZCc7XG5jb25zdCBaT05FX01FVEFEQVRBX0FUVFIgPSAnem9uZSc7XG5hc3luYyBmdW5jdGlvbiBvbkFwcEVuZ2luZVN0YW5kYXJkKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltHQUVfRU5WXSA9PT0gR0FFX1NUQU5EQVJEO1xufVxuZXhwb3J0cy5vbkFwcEVuZ2luZVN0YW5kYXJkID0gb25BcHBFbmdpbmVTdGFuZGFyZDtcbmFzeW5jIGZ1bmN0aW9uIG9uQXBwRW5naW5lKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltHQUVfU0VSVklDRV9FTlZdICE9PSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLm9uQXBwRW5naW5lID0gb25BcHBFbmdpbmU7XG4vKipcbiAqIFRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIGFwcCBlbmdpbmUgc2VydmljZS4gQ2hlY2sgdGhhdCB7QGxpbmsgb25BcHBFbmdpbmUoKX0gaXMgdHJ1ZSBiZWZvcmVcbiAqIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlcnZpY2VOYW1lKCkge1xuICAgIHJldHVybiBsb29rdXBFbnYoR0FFX1NFUlZJQ0VfRU5WKTtcbn1cbmV4cG9ydHMuc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZTtcbi8qKlxuICogVGhlIHNlcnZpY2UgdmVyc2lvbiBvZiB0aGUgYXBwIGVuZ2luZSBzZXJ2aWNlLiBDaGVjayB0aGF0IHtAbGluayBvbkFwcEVuZ2luZSgpfSBpcyB0cnVlXG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VydmljZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIGxvb2t1cEVudihHQUVfVkVSU0lPTl9FTlYpO1xufVxuZXhwb3J0cy5zZXJ2aWNlVmVyc2lvbiA9IHNlcnZpY2VWZXJzaW9uO1xuLyoqXG4gKiBUaGUgc2VydmljZSBpbnN0YW5jZSBvZiB0aGUgYXBwIGVuZ2luZSBzZXJ2aWNlLiBDaGVjayB0aGF0IHtAbGluayBvbkFwcEVuZ2luZSgpfSBpcyB0cnVlXG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VydmljZUluc3RhbmNlKCkge1xuICAgIHJldHVybiBsb29rdXBFbnYoR0FFX0lOU1RBTkNFX0VOVik7XG59XG5leHBvcnRzLnNlcnZpY2VJbnN0YW5jZSA9IHNlcnZpY2VJbnN0YW5jZTtcbi8qKlxuICogVGhlIHpvbmUgYW5kIHJlZ2lvbiBpbiB3aGljaCB0aGlzIHByb2dyYW0gaXMgcnVubmluZy4gQ2hlY2sgdGhhdCB7QGxpbmsgb25BcHBFbmdpbmUoKX0gaXNcbiAqIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZsZXhBdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uKCkge1xuICAgIHJldHVybiBhd2FpdCBnY2UuYXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbigpO1xufVxuZXhwb3J0cy5mbGV4QXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbiA9IGZsZXhBdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uO1xuLyoqXG4gKiBUaGUgem9uZSB0aGUgYXBwIGVuZ2luZSBzZXJ2aWNlIGlzIHJ1bm5pbmcgaW4uIENoZWNrIHRoYXQge0BsaW5rIG9uQXBwRW5naW5lU3RhbmRhcmQoKX0gaXNcbiAqIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhpcywgb3IgaXQgbWF5IHRocm93IGV4Y2VwdGlvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YW5kYXJkQXZhaWxhYmlsaXR5Wm9uZSgpIHtcbiAgICBjb25zdCB6b25lID0gYXdhaXQgbWV0YWRhdGEuaW5zdGFuY2UoWk9ORV9NRVRBREFUQV9BVFRSKTtcbiAgICAvLyB6b25lIGlzIG9mIHRoZSBmb3JtIFwicHJvamVjdHMvMjMzNTEwNjY5OTk5L3pvbmVzL3VzMTVcIlxuICAgIHJldHVybiB6b25lLnNsaWNlKHpvbmUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xufVxuZXhwb3J0cy5zdGFuZGFyZEF2YWlsYWJpbGl0eVpvbmUgPSBzdGFuZGFyZEF2YWlsYWJpbGl0eVpvbmU7XG4vKipcbiAqIFRoZSByZWdpb24gdGhlIGFwcCBlbmdpbmUgc2VydmljZSBpcyBydW5uaW5nIGluLiBDaGVjayB0aGF0IHtAbGluayBvbkFwcEVuZ2luZVN0YW5kYXJkKCl9IGlzXG4gKiB0cnVlIGJlZm9yZSBjYWxsaW5nIHRoaXMsIG9yIGl0IG1heSB0aHJvdyBleGNlcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFuZGFyZENsb3VkUmVnaW9uKCkge1xuICAgIHJldHVybiBhd2FpdCBmYWFzLmZhYXNDbG91ZFJlZ2lvbigpO1xufVxuZXhwb3J0cy5zdGFuZGFyZENsb3VkUmVnaW9uID0gc3RhbmRhcmRDbG91ZFJlZ2lvbjtcbmZ1bmN0aW9uIGxvb2t1cEVudihrZXkpIHtcbiAgICBjb25zdCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudmlyb25tZW50IHZhcmlhYmxlICR7a2V5fSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdhZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hdmFpbGFiaWxpdHlab25lT3JSZWdpb24gPSBleHBvcnRzLmNsdXN0ZXJOYW1lID0gZXhwb3J0cy5ob3N0SWQgPSBleHBvcnRzLm9uR2tlID0gdm9pZCAwO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUgY29waWVkIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDbG91ZFBsYXRmb3JtL29wZW50ZWxlbWV0cnktb3BlcmF0aW9ucy1nby9ibG9iL3YxLjguMC9kZXRlY3RvcnMvZ2NwL2drZS5nb1xuICovXG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBnY2UgPSByZXF1aXJlKFwiLi9nY2VcIik7XG5jb25zdCBLVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVF9FTlYgPSAnS1VCRVJORVRFU19TRVJWSUNFX0hPU1QnO1xuY29uc3QgQ0xVU1RFUl9OQU1FX01FVEFEQVRBX0FUVFIgPSAnYXR0cmlidXRlcy9jbHVzdGVyLW5hbWUnO1xuY29uc3QgQ0xVU1RFUl9MT0NBVElPTl9NRVRBREFUQV9BVFRSID0gJ2F0dHJpYnV0ZXMvY2x1c3Rlci1sb2NhdGlvbic7XG5hc3luYyBmdW5jdGlvbiBvbkdrZSgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbS1VCRVJORVRFU19TRVJWSUNFX0hPU1RfRU5WXSAhPT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5vbkdrZSA9IG9uR2tlO1xuLyoqXG4gKiBUaGUgaW5zdGFuY2UgSUQgb2YgdGhlIGluc3RhbmNlIG9uIHdoaWNoIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nLiBDaGVjayB0aGF0IHtAbGluayBvbkdrZSgpfVxuICogaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaG9zdElkKCkge1xuICAgIHJldHVybiBhd2FpdCBnY2UuaG9zdElkKCk7XG59XG5leHBvcnRzLmhvc3RJZCA9IGhvc3RJZDtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIEdLRSBjbHVzdGVyIGluIHdoaWNoIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nLiBDaGVjayB0aGF0IHtAbGluayBvbkdrZSgpfSBpc1xuICogdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2x1c3Rlck5hbWUoKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhLmluc3RhbmNlKENMVVNURVJfTkFNRV9NRVRBREFUQV9BVFRSKTtcbn1cbmV4cG9ydHMuY2x1c3Rlck5hbWUgPSBjbHVzdGVyTmFtZTtcbi8qKlxuICogVGhlIGxvY2F0aW9uIG9mIHRoZSBjbHVzdGVyIGFuZCB3aGV0aGVyIHRoZSBjbHVzdGVyIGlzIHpvbmFsIG9yIHJlZ2lvbmFsLiBDaGVjayB0aGF0IHtAbGlua1xuICogb25Ha2UoKX0gaXMgdHJ1ZSBiZWZvcmUgY2FsbGluZyB0aGlzLCBvciBpdCBtYXkgdGhyb3cgZXhjZXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXZhaWxhYmlsaXR5Wm9uZU9yUmVnaW9uKCkge1xuICAgIGNvbnN0IGNsdXN0ZXJMb2NhdGlvbiA9IGF3YWl0IG1ldGFkYXRhLmluc3RhbmNlKENMVVNURVJfTE9DQVRJT05fTUVUQURBVEFfQVRUUik7XG4gICAgc3dpdGNoIChjb3VudENoYXIoY2x1c3RlckxvY2F0aW9uLCAnLScpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdyZWdpb24nLCB2YWx1ZTogY2x1c3RlckxvY2F0aW9uIH07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICd6b25lJywgdmFsdWU6IGNsdXN0ZXJMb2NhdGlvbiB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnJlY29nbml6ZWQgZm9ybWF0IGZvciBjbHVzdGVyIGxvY2F0aW9uOiAke2NsdXN0ZXJMb2NhdGlvbn1gKTtcbiAgICB9XG59XG5leHBvcnRzLmF2YWlsYWJpbGl0eVpvbmVPclJlZ2lvbiA9IGF2YWlsYWJpbGl0eVpvbmVPclJlZ2lvbjtcbmZ1bmN0aW9uIGNvdW50Q2hhcihzLCBjaGFyKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNbaV0gPT09IGNoYXIpIHtcbiAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2tlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbi8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdjcERldGVjdG9yU3luYyA9IHZvaWQgMDtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCByZXNvdXJjZXNfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXNcIik7XG5jb25zdCBtZXRhZGF0YSA9IHJlcXVpcmUoXCJnY3AtbWV0YWRhdGFcIik7XG5jb25zdCBmYWFzID0gcmVxdWlyZShcIi4vZmFhc1wiKTtcbmNvbnN0IGdhZSA9IHJlcXVpcmUoXCIuL2dhZVwiKTtcbmNvbnN0IGdjZSA9IHJlcXVpcmUoXCIuL2djZVwiKTtcbmNvbnN0IGdrZSA9IHJlcXVpcmUoXCIuL2drZVwiKTtcbmNvbnN0IEFUVFJJQlVURV9OQU1FUyA9IFtcbiAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1BMQVRGT1JNLFxuICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUsXG4gICAgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT04sXG4gICAgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19LOFNfQ0xVU1RFUl9OQU1FLFxuICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSE9TVF9UWVBFLFxuICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSE9TVF9JRCxcbiAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0hPU1RfTkFNRSxcbiAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1BST1ZJREVSLFxuICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfQUNDT1VOVF9JRCxcbiAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfTkFNRSxcbiAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfVkVSU0lPTixcbiAgICBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfSU5TVEFOQ0UsXG5dO1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0KCkge1xuICAgIGlmICghKGF3YWl0IG1ldGFkYXRhLmlzQXZhaWxhYmxlKCkpKSB7XG4gICAgICAgIHJldHVybiAoMCwgcmVzb3VyY2VzXzEuZW1wdHlSZXNvdXJjZSkoKTtcbiAgICB9XG4gICAgLy8gTm90ZSB0aGUgb3JkZXIgb2YgdGhlc2UgaWYgY2hlY2tzIGlzIHNpZ25pZmljYW50IHdpdGggbW9yZSBzcGVjaWZpYyByZXNvdXJjZXMgY29taW5nXG4gICAgLy8gZmlyc3QuIEUuZy4gQ2xvdWQgRnVuY3Rpb25zIGdlbjIgYXJlIGV4ZWN1dGVkIGluIENsb3VkIFJ1biBzbyBpdCBtdXN0IGJlIGNoZWNrZWQgZmlyc3QuXG4gICAgaWYgKGF3YWl0IGdrZS5vbkdrZSgpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBna2VSZXNvdXJjZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhd2FpdCBmYWFzLm9uQ2xvdWRGdW5jdGlvbnMoKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgY2xvdWRGdW5jdGlvbnNSZXNvdXJjZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhd2FpdCBmYWFzLm9uQ2xvdWRSdW4oKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgY2xvdWRSdW5SZXNvdXJjZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhd2FpdCBnYWUub25BcHBFbmdpbmUoKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZ2FlUmVzb3VyY2UoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXdhaXQgZ2NlLm9uR2NlKCkpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdjZVJlc291cmNlKCk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgcmVzb3VyY2VzXzEuZW1wdHlSZXNvdXJjZSkoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdrZVJlc291cmNlKCkge1xuICAgIGNvbnN0IFt6b25lT3JSZWdpb24sIGs4c0NsdXN0ZXJOYW1lLCBob3N0SWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBna2UuYXZhaWxhYmlsaXR5Wm9uZU9yUmVnaW9uKCksXG4gICAgICAgIGdrZS5jbHVzdGVyTmFtZSgpLFxuICAgICAgICBna2UuaG9zdElkKCksXG4gICAgXSk7XG4gICAgcmV0dXJuIGF3YWl0IG1ha2VSZXNvdXJjZSh7XG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1BMQVRGT1JNXTogc2VtYW50aWNfY29udmVudGlvbnNfMS5DTE9VRFBMQVRGT1JNVkFMVUVTX0dDUF9LVUJFUk5FVEVTX0VOR0lORSxcbiAgICAgICAgW3pvbmVPclJlZ2lvbi50eXBlID09PSAnem9uZSdcbiAgICAgICAgICAgID8gc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORVxuICAgICAgICAgICAgOiBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1JFR0lPTl06IHpvbmVPclJlZ2lvbi52YWx1ZSxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSzhTX0NMVVNURVJfTkFNRV06IGs4c0NsdXN0ZXJOYW1lLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19IT1NUX0lEXTogaG9zdElkLFxuICAgIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gY2xvdWRSdW5SZXNvdXJjZSgpIHtcbiAgICBjb25zdCBbZmFhc05hbWUsIGZhYXNWZXJzaW9uLCBmYWFzSW5zdGFuY2UsIGZhYXNDbG91ZFJlZ2lvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGZhYXMuZmFhc05hbWUoKSxcbiAgICAgICAgZmFhcy5mYWFzVmVyc2lvbigpLFxuICAgICAgICBmYWFzLmZhYXNJbnN0YW5jZSgpLFxuICAgICAgICBmYWFzLmZhYXNDbG91ZFJlZ2lvbigpLFxuICAgIF0pO1xuICAgIHJldHVybiBhd2FpdCBtYWtlUmVzb3VyY2Uoe1xuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9QTEFURk9STV06IHNlbWFudGljX2NvbnZlbnRpb25zXzEuQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQ0xPVURfUlVOLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19GQUFTX05BTUVdOiBmYWFzTmFtZSxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19WRVJTSU9OXTogZmFhc1ZlcnNpb24sXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfSU5TVEFOQ0VdOiBmYWFzSW5zdGFuY2UsXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1JFR0lPTl06IGZhYXNDbG91ZFJlZ2lvbixcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNsb3VkRnVuY3Rpb25zUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgW2ZhYXNOYW1lLCBmYWFzVmVyc2lvbiwgZmFhc0luc3RhbmNlLCBmYWFzQ2xvdWRSZWdpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBmYWFzLmZhYXNOYW1lKCksXG4gICAgICAgIGZhYXMuZmFhc1ZlcnNpb24oKSxcbiAgICAgICAgZmFhcy5mYWFzSW5zdGFuY2UoKSxcbiAgICAgICAgZmFhcy5mYWFzQ2xvdWRSZWdpb24oKSxcbiAgICBdKTtcbiAgICByZXR1cm4gYXdhaXQgbWFrZVJlc291cmNlKHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfUExBVEZPUk1dOiBzZW1hbnRpY19jb252ZW50aW9uc18xLkNMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0NMT1VEX0ZVTkNUSU9OUyxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19OQU1FXTogZmFhc05hbWUsXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfVkVSU0lPTl06IGZhYXNWZXJzaW9uLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19GQUFTX0lOU1RBTkNFXTogZmFhc0luc3RhbmNlLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dOiBmYWFzQ2xvdWRSZWdpb24sXG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnYWVSZXNvdXJjZSgpIHtcbiAgICBsZXQgem9uZSwgcmVnaW9uO1xuICAgIGlmIChhd2FpdCBnYWUub25BcHBFbmdpbmVTdGFuZGFyZCgpKSB7XG4gICAgICAgIFt6b25lLCByZWdpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgZ2FlLnN0YW5kYXJkQXZhaWxhYmlsaXR5Wm9uZSgpLFxuICAgICAgICAgICAgZ2FlLnN0YW5kYXJkQ2xvdWRSZWdpb24oKSxcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoeyB6b25lLCByZWdpb24gfSA9IGF3YWl0IGdjZS5hdmFpbGFiaWxpdHlab25lQW5kUmVnaW9uKCkpO1xuICAgIH1cbiAgICBjb25zdCBbZmFhc05hbWUsIGZhYXNWZXJzaW9uLCBmYWFzSW5zdGFuY2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnYWUuc2VydmljZU5hbWUoKSxcbiAgICAgICAgZ2FlLnNlcnZpY2VWZXJzaW9uKCksXG4gICAgICAgIGdhZS5zZXJ2aWNlSW5zdGFuY2UoKSxcbiAgICBdKTtcbiAgICByZXR1cm4gYXdhaXQgbWFrZVJlc291cmNlKHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfUExBVEZPUk1dOiBzZW1hbnRpY19jb252ZW50aW9uc18xLkNMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0FQUF9FTkdJTkUsXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfTkFNRV06IGZhYXNOYW1lLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19GQUFTX1ZFUlNJT05dOiBmYWFzVmVyc2lvbixcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19JTlNUQU5DRV06IGZhYXNJbnN0YW5jZSxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkVdOiB6b25lLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dOiByZWdpb24sXG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnY2VSZXNvdXJjZSgpIHtcbiAgICBjb25zdCBbem9uZUFuZFJlZ2lvbiwgaG9zdFR5cGUsIGhvc3RJZCwgaG9zdE5hbWVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnY2UuYXZhaWxhYmlsaXR5Wm9uZUFuZFJlZ2lvbigpLFxuICAgICAgICBnY2UuaG9zdFR5cGUoKSxcbiAgICAgICAgZ2NlLmhvc3RJZCgpLFxuICAgICAgICBnY2UuaG9zdE5hbWUoKSxcbiAgICBdKTtcbiAgICByZXR1cm4gYXdhaXQgbWFrZVJlc291cmNlKHtcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfUExBVEZPUk1dOiBzZW1hbnRpY19jb252ZW50aW9uc18xLkNMT1VEUExBVEZPUk1WQUxVRVNfR0NQX0NPTVBVVEVfRU5HSU5FLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORV06IHpvbmVBbmRSZWdpb24uem9uZSxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfUkVHSU9OXTogem9uZUFuZFJlZ2lvbi5yZWdpb24sXG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0hPU1RfVFlQRV06IGhvc3RUeXBlLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19IT1NUX0lEXTogaG9zdElkLFxuICAgICAgICBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19IT1NUX05BTUVdOiBob3N0TmFtZSxcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG1ha2VSZXNvdXJjZShhdHRycykge1xuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBtZXRhZGF0YS5wcm9qZWN0KCdwcm9qZWN0LWlkJyk7XG4gICAgcmV0dXJuICgwLCByZXNvdXJjZXNfMS5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzKSh7XG4gICAgICAgIFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1BST1ZJREVSXTogc2VtYW50aWNfY29udmVudGlvbnNfMS5DTE9VRFBST1ZJREVSVkFMVUVTX0dDUCxcbiAgICAgICAgW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfQUNDT1VOVF9JRF06IHByb2plY3QsXG4gICAgICAgIC4uLmF0dHJzLFxuICAgIH0pO1xufVxuLyoqXG4gKiBHb29nbGUgQ2xvdWQgcmVzb3VyY2UgZGV0ZWN0b3Igd2hpY2ggcG9wdWxhdGVzIGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IHRoaXNcbiAqIHByb2Nlc3MgaXMgcnVubmluZyBpbi4gSWYgbm90IG9uIEdDUCwgcmV0dXJucyBhbiBlbXB0eSByZXNvdXJjZS5cbiAqL1xuY2xhc3MgR2NwRGV0ZWN0b3JTeW5jIHtcbiAgICBhc3luYyBfYXN5bmNBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGRldGVjdCgpKS5hdHRyaWJ1dGVzO1xuICAgIH1cbiAgICBkZXRlY3QoKSB7XG4gICAgICAgIGNvbnN0IGFzeW5jQXR0cmlidXRlcyA9IHRoaXMuX2FzeW5jQXR0cmlidXRlcygpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIEFUVFJJQlVURV9OQU1FUy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgLy8gRWFjaCByZXNvdXJjZSBhdHRyaWJ1dGUgaXMgZGV0ZXJtaW5lZCBhc3luY2hyb25vdXNseSBpbiBfZ2F0aGVyRGF0YSgpLlxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IGFzeW5jQXR0cmlidXRlcy50aGVuKGRhdGEgPT4gZGF0YVtuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzIH07XG4gICAgfVxufVxuZXhwb3J0cy5HY3BEZXRlY3RvclN5bmMgPSBHY3BEZXRlY3RvclN5bmM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXRlY3Rvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkdjcERldGVjdG9yU3luYyA9IGV4cG9ydHMubWFwT3RlbFJlc291cmNlVG9Nb25pdG9yZWRSZXNvdXJjZSA9IHZvaWQgMDtcbmNvbnN0IHNlbWFudGljX2NvbnZlbnRpb25zXzEgPSByZXF1aXJlKFwiQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnNcIik7XG5jb25zdCBBV1NfQUNDT1VOVCA9ICdhd3NfYWNjb3VudCc7XG5jb25zdCBBV1NfRUMyX0lOU1RBTkNFID0gJ2F3c19lYzJfaW5zdGFuY2UnO1xuY29uc3QgQ0xPVURfRlVOQ1RJT04gPSAnY2xvdWRfZnVuY3Rpb24nO1xuY29uc3QgQ0xPVURfUlVOX1JFVklTSU9OID0gJ2Nsb3VkX3J1bl9yZXZpc2lvbic7XG5jb25zdCBDTFVTVEVSX05BTUUgPSAnY2x1c3Rlcl9uYW1lJztcbmNvbnN0IENPTkZJR1VSQVRJT05fTkFNRSA9ICdjb25maWd1cmF0aW9uX25hbWUnO1xuY29uc3QgQ09OVEFJTkVSX05BTUUgPSAnY29udGFpbmVyX25hbWUnO1xuY29uc3QgRlVOQ1RJT05fTkFNRSA9ICdmdW5jdGlvbl9uYW1lJztcbmNvbnN0IEdBRV9JTlNUQU5DRSA9ICdnYWVfaW5zdGFuY2UnO1xuY29uc3QgR0FFX01PRFVMRV9JRCA9ICdtb2R1bGVfaWQnO1xuY29uc3QgR0FFX1ZFUlNJT05fSUQgPSAndmVyc2lvbl9pZCc7XG5jb25zdCBHQ0VfSU5TVEFOQ0UgPSAnZ2NlX2luc3RhbmNlJztcbmNvbnN0IEdFTkVSSUNfTk9ERSA9ICdnZW5lcmljX25vZGUnO1xuY29uc3QgR0VORVJJQ19UQVNLID0gJ2dlbmVyaWNfdGFzayc7XG5jb25zdCBJTlNUQU5DRV9JRCA9ICdpbnN0YW5jZV9pZCc7XG5jb25zdCBKT0IgPSAnam9iJztcbmNvbnN0IEs4U19DTFVTVEVSID0gJ2s4c19jbHVzdGVyJztcbmNvbnN0IEs4U19DT05UQUlORVIgPSAnazhzX2NvbnRhaW5lcic7XG5jb25zdCBLOFNfTk9ERSA9ICdrOHNfbm9kZSc7XG5jb25zdCBLOFNfUE9EID0gJ2s4c19wb2QnO1xuY29uc3QgTE9DQVRJT04gPSAnbG9jYXRpb24nO1xuY29uc3QgTkFNRVNQQUNFID0gJ25hbWVzcGFjZSc7XG5jb25zdCBOQU1FU1BBQ0VfTkFNRSA9ICduYW1lc3BhY2VfbmFtZSc7XG5jb25zdCBOT0RFX0lEID0gJ25vZGVfaWQnO1xuY29uc3QgTk9ERV9OQU1FID0gJ25vZGVfbmFtZSc7XG5jb25zdCBQT0RfTkFNRSA9ICdwb2RfbmFtZSc7XG5jb25zdCBSRUdJT04gPSAncmVnaW9uJztcbmNvbnN0IFJFVklTSU9OX05BTUUgPSAncmV2aXNpb25fbmFtZSc7XG5jb25zdCBTRVJWSUNFX05BTUUgPSAnc2VydmljZV9uYW1lJztcbmNvbnN0IFRBU0tfSUQgPSAndGFza19pZCc7XG5jb25zdCBaT05FID0gJ3pvbmUnO1xuY29uc3QgVU5LTk9XTl9TRVJWSUNFX1BSRUZJWCA9ICd1bmtub3duX3NlcnZpY2UnO1xuLyoqXG4gKiBNYXBwaW5ncyBvZiBHQ00gcmVzb3VyY2UgbGFiZWwga2V5cyBvbnRvIG1hcHBpbmcgY29uZmlnIGZyb20gT1RlbCByZXNvdXJjZSBmb3IgYSBnaXZlblxuICogbW9uaXRvcmVkIHJlc291cmNlIHR5cGUuIENvcGllZCBmcm9tIEdvIGltcGw6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9vcGVudGVsZW1ldHJ5LW9wZXJhdGlvbnMtZ28vYmxvYi92MS44LjAvaW50ZXJuYWwvcmVzb3VyY2VtYXBwaW5nL3Jlc291cmNlbWFwcGluZy5nbyNMNTFcbiAqL1xuY29uc3QgTUFQUElOR1MgPSB7XG4gICAgW0dDRV9JTlNUQU5DRV06IHtcbiAgICAgICAgW1pPTkVdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkVdLFxuICAgICAgICB9LFxuICAgICAgICBbSU5TVEFOQ0VfSURdOiB7IG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19IT1NUX0lEXSB9LFxuICAgIH0sXG4gICAgW0s4U19DT05UQUlORVJdOiB7XG4gICAgICAgIFtMT0NBVElPTl06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSwgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dLFxuICAgICAgICB9LFxuICAgICAgICBbQ0xVU1RFUl9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19DTFVTVEVSX05BTUVdLFxuICAgICAgICB9LFxuICAgICAgICBbTkFNRVNQQUNFX05BTUVdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSzhTX05BTUVTUEFDRV9OQU1FXSxcbiAgICAgICAgfSxcbiAgICAgICAgW1BPRF9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19QT0RfTkFNRV0sXG4gICAgICAgIH0sXG4gICAgICAgIFtDT05UQUlORVJfTkFNRV06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19LOFNfQ09OVEFJTkVSX05BTUVdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgW0s4U19QT0RdOiB7XG4gICAgICAgIFtMT0NBVElPTl06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSwgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dLFxuICAgICAgICB9LFxuICAgICAgICBbQ0xVU1RFUl9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19DTFVTVEVSX05BTUVdLFxuICAgICAgICB9LFxuICAgICAgICBbTkFNRVNQQUNFX05BTUVdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSzhTX05BTUVTUEFDRV9OQU1FXSxcbiAgICAgICAgfSxcbiAgICAgICAgW1BPRF9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19QT0RfTkFNRV0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBbSzhTX05PREVdOiB7XG4gICAgICAgIFtMT0NBVElPTl06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSwgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dLFxuICAgICAgICB9LFxuICAgICAgICBbQ0xVU1RFUl9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19DTFVTVEVSX05BTUVdLFxuICAgICAgICB9LFxuICAgICAgICBbTk9ERV9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19OT0RFX05BTUVdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgW0s4U19DTFVTVEVSXToge1xuICAgICAgICBbTE9DQVRJT05dOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfQVZBSUxBQklMSVRZX1pPTkUsIHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfUkVHSU9OXSxcbiAgICAgICAgfSxcbiAgICAgICAgW0NMVVNURVJfTkFNRV06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19LOFNfQ0xVU1RFUl9OQU1FXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIFtBV1NfRUMyX0lOU1RBTkNFXToge1xuICAgICAgICBbSU5TVEFOQ0VfSURdOiB7IG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19IT1NUX0lEXSB9LFxuICAgICAgICBbUkVHSU9OXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FLCBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1JFR0lPTl0sXG4gICAgICAgIH0sXG4gICAgICAgIFtBV1NfQUNDT1VOVF06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BQ0NPVU5UX0lEXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIFtDTE9VRF9SVU5fUkVWSVNJT05dOiB7XG4gICAgICAgIFtMT0NBVElPTl06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dLFxuICAgICAgICB9LFxuICAgICAgICBbU0VSVklDRV9OQU1FXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfTkFNRV0sXG4gICAgICAgIH0sXG4gICAgICAgIFtDT05GSUdVUkFUSU9OX05BTUVdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19OQU1FXSxcbiAgICAgICAgfSxcbiAgICAgICAgW1JFVklTSU9OX05BTUVdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19WRVJTSU9OXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIFtDTE9VRF9GVU5DVElPTl06IHtcbiAgICAgICAgW1JFR0lPTl06IHsgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1JFR0lPTl0gfSxcbiAgICAgICAgW0ZVTkNUSU9OX05BTUVdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19OQU1FXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIFtHQUVfSU5TVEFOQ0VdOiB7XG4gICAgICAgIFtMT0NBVElPTl06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9BVkFJTEFCSUxJVFlfWk9ORSwgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19DTE9VRF9SRUdJT05dLFxuICAgICAgICB9LFxuICAgICAgICBbR0FFX01PRFVMRV9JRF06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19GQUFTX05BTUVdLFxuICAgICAgICB9LFxuICAgICAgICBbR0FFX1ZFUlNJT05fSURdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19WRVJTSU9OXSxcbiAgICAgICAgfSxcbiAgICAgICAgW0lOU1RBTkNFX0lEXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfSU5TVEFOQ0VdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgW0dFTkVSSUNfVEFTS106IHtcbiAgICAgICAgW0xPQ0FUSU9OXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FLCBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1JFR0lPTl0sXG4gICAgICAgICAgICBmYWxsYmFjazogJ2dsb2JhbCcsXG4gICAgICAgIH0sXG4gICAgICAgIFtOQU1FU1BBQ0VdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FU1BBQ0VdLFxuICAgICAgICB9LFxuICAgICAgICBbSk9CXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX1NFUlZJQ0VfTkFNRSwgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19GQUFTX05BTUVdLFxuICAgICAgICB9LFxuICAgICAgICBbVEFTS19JRF06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19TRVJWSUNFX0lOU1RBTkNFX0lELCBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0ZBQVNfSU5TVEFOQ0VdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgW0dFTkVSSUNfTk9ERV06IHtcbiAgICAgICAgW0xPQ0FUSU9OXToge1xuICAgICAgICAgICAgb3RlbEtleXM6IFtzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX0FWQUlMQUJJTElUWV9aT05FLCBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0NMT1VEX1JFR0lPTl0sXG4gICAgICAgICAgICBmYWxsYmFjazogJ2dsb2JhbCcsXG4gICAgICAgIH0sXG4gICAgICAgIFtOQU1FU1BBQ0VdOiB7XG4gICAgICAgICAgICBvdGVsS2V5czogW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FU1BBQ0VdLFxuICAgICAgICB9LFxuICAgICAgICBbTk9ERV9JRF06IHtcbiAgICAgICAgICAgIG90ZWxLZXlzOiBbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19IT1NUX0lELCBzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0hPU1RfTkFNRV0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4vKipcbiAqIEdpdmVuIGFuIE9UZWwgcmVzb3VyY2UsIHJldHVybiBhIE1vbml0b3JlZFJlc291cmNlLiBDb3BpZWQgZnJvbSB0aGUgY29sbGVjdG9yJ3NcbiAqIGltcGxlbWVudGF0aW9uIGluIEdvOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNsb3VkUGxhdGZvcm0vb3BlbnRlbGVtZXRyeS1vcGVyYXRpb25zLWdvL2Jsb2IvdjEuOC4wL2ludGVybmFsL3Jlc291cmNlbWFwcGluZy9yZXNvdXJjZW1hcHBpbmcuZ28jTDUxXG4gKlxuICogQHBhcmFtIHJlc291cmNlIHRoZSBPVGVsIFJlc291cmNlXG4gKiBAcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBHQ00gTW9uaXRvcmVkUmVzb3VyY2VcbiAqL1xuZnVuY3Rpb24gbWFwT3RlbFJlc291cmNlVG9Nb25pdG9yZWRSZXNvdXJjZShyZXNvdXJjZSkge1xuICAgIGNvbnN0IGF0dHJzID0gcmVzb3VyY2UuYXR0cmlidXRlcztcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGF0dHJzW3NlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfQ0xPVURfUExBVEZPUk1dO1xuICAgIGxldCBtcjtcbiAgICBpZiAocGxhdGZvcm0gPT09IHNlbWFudGljX2NvbnZlbnRpb25zXzEuQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQ09NUFVURV9FTkdJTkUpIHtcbiAgICAgICAgbXIgPSBjcmVhdGVNb25pdG9yZWRSZXNvdXJjZShHQ0VfSU5TVEFOQ0UsIGF0dHJzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGxhdGZvcm0gPT09IHNlbWFudGljX2NvbnZlbnRpb25zXzEuQ0xPVURQTEFURk9STVZBTFVFU19HQ1BfQVBQX0VOR0lORSkge1xuICAgICAgICBtciA9IGNyZWF0ZU1vbml0b3JlZFJlc291cmNlKEdBRV9JTlNUQU5DRSwgYXR0cnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gc2VtYW50aWNfY29udmVudGlvbnNfMS5DTE9VRFBMQVRGT1JNVkFMVUVTX0FXU19FQzIpIHtcbiAgICAgICAgbXIgPSBjcmVhdGVNb25pdG9yZWRSZXNvdXJjZShBV1NfRUMyX0lOU1RBTkNFLCBhdHRycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSzhTX0NMVVNURVJfTkFNRSBpbiBhdHRycykge1xuICAgICAgICAvLyBpZiBrOHMuY2x1c3Rlci5uYW1lIGlzIHNldCwgcGF0dGVybiBtYXRjaCBmb3IgdmFyaW91cyBrOHMgcmVzb3VyY2VzLlxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBub24tY2xvdWQgazhzIHBsYXRmb3JtcyBsaWtlIG1pbmlrdWJlLlxuICAgICAgICBpZiAoc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19LOFNfQ09OVEFJTkVSX05BTUUgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgIG1yID0gY3JlYXRlTW9uaXRvcmVkUmVzb3VyY2UoSzhTX0NPTlRBSU5FUiwgYXR0cnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfSzhTX1BPRF9OQU1FIGluIGF0dHJzKSB7XG4gICAgICAgICAgICBtciA9IGNyZWF0ZU1vbml0b3JlZFJlc291cmNlKEs4U19QT0QsIGF0dHJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX0s4U19OT0RFX05BTUUgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgIG1yID0gY3JlYXRlTW9uaXRvcmVkUmVzb3VyY2UoSzhTX05PREUsIGF0dHJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1yID0gY3JlYXRlTW9uaXRvcmVkUmVzb3VyY2UoSzhTX0NMVVNURVIsIGF0dHJzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgoc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19TRVJWSUNFX05BTUUgaW4gYXR0cnMgfHwgc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19GQUFTX05BTUUgaW4gYXR0cnMpICYmXG4gICAgICAgIChzZW1hbnRpY19jb252ZW50aW9uc18xLlNFTVJFU0FUVFJTX1NFUlZJQ0VfSU5TVEFOQ0VfSUQgaW4gYXR0cnMgfHxcbiAgICAgICAgICAgIHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfRkFBU19JTlNUQU5DRSBpbiBhdHRycykpIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gZ2VuZXJpY190YXNrXG4gICAgICAgIG1yID0gY3JlYXRlTW9uaXRvcmVkUmVzb3VyY2UoR0VORVJJQ19UQVNLLCBhdHRycyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJZiBub3QgcG9zc2libGUsIGZpbmFsbHkgZmFsbGJhY2sgdG8gZ2VuZXJpY19ub2RlXG4gICAgICAgIG1yID0gY3JlYXRlTW9uaXRvcmVkUmVzb3VyY2UoR0VORVJJQ19OT0RFLCBhdHRycyk7XG4gICAgfVxuICAgIHJldHVybiBtcjtcbn1cbmV4cG9ydHMubWFwT3RlbFJlc291cmNlVG9Nb25pdG9yZWRSZXNvdXJjZSA9IG1hcE90ZWxSZXNvdXJjZVRvTW9uaXRvcmVkUmVzb3VyY2U7XG5mdW5jdGlvbiBjcmVhdGVNb25pdG9yZWRSZXNvdXJjZShtb25pdG9yZWRSZXNvdXJjZVR5cGUsIHJlc291cmNlQXR0cnMpIHtcbiAgICBjb25zdCBtYXBwaW5nID0gTUFQUElOR1NbbW9uaXRvcmVkUmVzb3VyY2VUeXBlXTtcbiAgICBjb25zdCBsYWJlbHMgPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhtYXBwaW5nKS5tYXAoKFttcktleSwgbWFwQ29uZmlnXSkgPT4ge1xuICAgICAgICBsZXQgbXJWYWx1ZTtcbiAgICAgICAgZm9yIChjb25zdCBvdGVsS2V5IG9mIG1hcENvbmZpZy5vdGVsS2V5cykge1xuICAgICAgICAgICAgaWYgKG90ZWxLZXkgaW4gcmVzb3VyY2VBdHRycyAmJlxuICAgICAgICAgICAgICAgICFyZXNvdXJjZUF0dHJzW290ZWxLZXldPy50b1N0cmluZygpPy5zdGFydHNXaXRoKFVOS05PV05fU0VSVklDRV9QUkVGSVgpKSB7XG4gICAgICAgICAgICAgICAgbXJWYWx1ZSA9IHJlc291cmNlQXR0cnNbb3RlbEtleV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1yVmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgbWFwQ29uZmlnLm90ZWxLZXlzLmluY2x1ZGVzKHNlbWFudGljX2NvbnZlbnRpb25zXzEuU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FKSkge1xuICAgICAgICAgICAgLy8gVGhlIHNlcnZpY2UgbmFtZSBzdGFydGVkIHdpdGggdW5rbm93bl9zZXJ2aWNlLCB3YXMgaWdub3JlZCBhYm92ZSwgYW5kIHdlIGNvdWxkbid0IGZpbmRcbiAgICAgICAgICAgIC8vIGEgYmV0dGVyIHZhbHVlIGZvciBtclZhbHVlLlxuICAgICAgICAgICAgbXJWYWx1ZSA9IHJlc291cmNlQXR0cnNbc2VtYW50aWNfY29udmVudGlvbnNfMS5TRU1SRVNBVFRSU19TRVJWSUNFX05BTUVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtclZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1yVmFsdWUgPSBtYXBDb25maWcuZmFsbGJhY2sgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT1RlbCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBhbnkgb2Ygc3RyaW5nLCBib29sZWFuLCBudW1iZXIsIG9yIGFycmF5IG9mIGFueSBvZiB0aGVtLlxuICAgICAgICAvLyBFbmNvZGUgYW55IG5vbi1zdHJpbmdzIGFzIGpzb24gc3RyaW5nXG4gICAgICAgIGlmICh0eXBlb2YgbXJWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1yVmFsdWUgPSBKU09OLnN0cmluZ2lmeShtclZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBsYWJlbHNbbXJLZXldID0gbXJWYWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBtb25pdG9yZWRSZXNvdXJjZVR5cGUsXG4gICAgICAgIGxhYmVscyxcbiAgICB9O1xufVxudmFyIGRldGVjdG9yXzEgPSByZXF1aXJlKFwiLi9kZXRlY3Rvci9kZXRlY3RvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdjcERldGVjdG9yU3luY1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGV0ZWN0b3JfMS5HY3BEZXRlY3RvclN5bmM7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQ1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9UX1ZFUlNJT04gPSBleHBvcnRzLlZFUlNJT04gPSB2b2lkIDA7XG4vLyBBdXRvZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanMgZHVyaW5nIGNvbXBpbGF0aW9uLiBDaGVjayB0aGlzXG4vLyBmaWxlIGluLlxuZXhwb3J0cy5WRVJTSU9OID0gJzMuMC4wJztcbi8vIFRyeSB0byBnZXQgcnVudGltZSB2ZXJzaW9uIG9mIEBvcGVudGVsZW1ldHJ5L2NvcmUuIFRoaXMgbWF5IGZhaWwgaWYgdGhlIGFwcGxpY2F0aW9uIGlzXG4vLyBidW5kbGVkIG9yIHVzaW5nIEVTTS5cbmZ1bmN0aW9uIGdldE90ZWxWZXJzaW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlKCdAb3BlbnRlbGVtZXRyeS9jb3JlL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxufVxuZXhwb3J0cy5PVF9WRVJTSU9OID0gZ2V0T3RlbFZlcnNpb24oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRSZWFkYWJsZVNwYW5UcmFuc2Zvcm1lciA9IHZvaWQgMDtcbmNvbnN0IG90ID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2FwaVwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbmNvbnN0IG9wZW50ZWxlbWV0cnlfcmVzb3VyY2VfdXRpbF8xID0gcmVxdWlyZShcIkBnb29nbGUtY2xvdWQvb3BlbnRlbGVtZXRyeS1yZXNvdXJjZS11dGlsXCIpO1xuY29uc3QgdmVyc2lvbl8xID0gcmVxdWlyZShcIi4vdmVyc2lvblwiKTtcbmNvbnN0IEFHRU5UX0xBQkVMX0tFWSA9ICdnLmNvL2FnZW50JztcbmNvbnN0IEFHRU5UX0xBQkVMX1ZBTFVFID0gYG9wZW50ZWxlbWV0cnktanMgJHt2ZXJzaW9uXzEuT1RfVkVSU0lPTn07IGdvb2dsZS1jbG91ZC10cmFjZS1leHBvcnRlciAke3ZlcnNpb25fMS5WRVJTSU9OfWA7XG5mdW5jdGlvbiBnZXRSZWFkYWJsZVNwYW5UcmFuc2Zvcm1lcihwcm9qZWN0SWQsIHJlc291cmNlRmlsdGVyLCBzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gc3BhbiA9PiB7XG4gICAgICAgIC8vIEB0b2RvIGdldCBkcm9wcGVkIGF0dHJpYnV0ZSBjb3VudCBmcm9tIHNkayBSZWFkYWJsZVNwYW5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IG1lcmdlQXR0cmlidXRlcyh0cmFuc2Zvcm1BdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgIC4uLnNwYW4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgIFtBR0VOVF9MQUJFTF9LRVldOiBBR0VOVF9MQUJFTF9WQUxVRSxcbiAgICAgICAgfSwgc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSwgXG4gICAgICAgIC8vIEFkZCBpbiBzcGVjaWFsIGcuY28vciByZXNvdXJjZSBsYWJlbHNcbiAgICAgICAgdHJhbnNmb3JtUmVzb3VyY2VUb0F0dHJpYnV0ZXMoc3Bhbi5yZXNvdXJjZSwgcHJvamVjdElkLCByZXNvdXJjZUZpbHRlciwgc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSk7XG4gICAgICAgIGNvbnN0IG91dCA9IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogc3RyaW5nVG9UcnVuY2F0YWJsZVN0cmluZyhzcGFuLm5hbWUpLFxuICAgICAgICAgICAgbGlua3M6IHtcbiAgICAgICAgICAgICAgICBsaW5rOiBzcGFuLmxpbmtzLm1hcChnZXRMaW5rVHJhbnNmb3JtZXIoc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kVGltZTogdHJhbnNmb3JtVGltZShzcGFuLmVuZFRpbWUpLFxuICAgICAgICAgICAgc3RhcnRUaW1lOiB0cmFuc2Zvcm1UaW1lKHNwYW4uc3RhcnRUaW1lKSxcbiAgICAgICAgICAgIG5hbWU6IGBwcm9qZWN0cy8ke3Byb2plY3RJZH0vdHJhY2VzLyR7c3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWR9L3NwYW5zLyR7c3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZH1gLFxuICAgICAgICAgICAgc3BhbktpbmQ6IHRyYW5zZm9ybUtpbmQoc3Bhbi5raW5kKSxcbiAgICAgICAgICAgIHNwYW5JZDogc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCxcbiAgICAgICAgICAgIHNhbWVQcm9jZXNzQXNQYXJlbnRTcGFuOiB7IHZhbHVlOiAhc3Bhbi5zcGFuQ29udGV4dCgpLmlzUmVtb3RlIH0sXG4gICAgICAgICAgICBzdGF0dXM6IHRyYW5zZm9ybVN0YXR1cyhzcGFuLnN0YXR1cyksXG4gICAgICAgICAgICB0aW1lRXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgdGltZUV2ZW50OiBzcGFuLmV2ZW50cy5tYXAoZSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiB0cmFuc2Zvcm1UaW1lKGUudGltZSksXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRyYW5zZm9ybUF0dHJpYnV0ZXMoZS5hdHRyaWJ1dGVzID8/IHt9LCBzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZ1RvVHJ1bmNhdGFibGVTdHJpbmcoZS5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoc3Bhbi5wYXJlbnRTcGFuQ29udGV4dD8uc3BhbklkKSB7XG4gICAgICAgICAgICBvdXQucGFyZW50U3BhbklkID0gc3Bhbi5wYXJlbnRTcGFuQ29udGV4dD8uc3BhbklkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbn1cbmV4cG9ydHMuZ2V0UmVhZGFibGVTcGFuVHJhbnNmb3JtZXIgPSBnZXRSZWFkYWJsZVNwYW5UcmFuc2Zvcm1lcjtcbmZ1bmN0aW9uIHRyYW5zZm9ybVN0YXR1cyhzdGF0dXMpIHtcbiAgICBzd2l0Y2ggKHN0YXR1cy5jb2RlKSB7XG4gICAgICAgIGNhc2Ugb3QuU3BhblN0YXR1c0NvZGUuVU5TRVQ6XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjYXNlIG90LlNwYW5TdGF0dXNDb2RlLk9LOlxuICAgICAgICAgICAgcmV0dXJuIHsgY29kZTogdHlwZXNfMS5Db2RlLk9LIH07XG4gICAgICAgIGNhc2Ugb3QuU3BhblN0YXR1c0NvZGUuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4geyBjb2RlOiB0eXBlc18xLkNvZGUuVU5LTk9XTiwgbWVzc2FnZTogc3RhdHVzLm1lc3NhZ2UgfTtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZXhoYXVzdChzdGF0dXMuY29kZSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBsb2cgZmFpbGVkIG1hcHBpbmdcbiAgICAgICAgICAgIHJldHVybiB7IGNvZGU6IHR5cGVzXzEuQ29kZS5VTktOT1dOLCBtZXNzYWdlOiBzdGF0dXMubWVzc2FnZSB9O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdHJhbnNmb3JtS2luZChraW5kKSB7XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2Ugb3QuU3BhbktpbmQuSU5URVJOQUw6XG4gICAgICAgICAgICByZXR1cm4gdHlwZXNfMS5TcGFuS2luZC5JTlRFUk5BTDtcbiAgICAgICAgY2FzZSBvdC5TcGFuS2luZC5TRVJWRVI6XG4gICAgICAgICAgICByZXR1cm4gdHlwZXNfMS5TcGFuS2luZC5TRVJWRVI7XG4gICAgICAgIGNhc2Ugb3QuU3BhbktpbmQuQ0xJRU5UOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGVzXzEuU3BhbktpbmQuQ0xJRU5UO1xuICAgICAgICBjYXNlIG90LlNwYW5LaW5kLlBST0RVQ0VSOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGVzXzEuU3BhbktpbmQuUFJPRFVDRVI7XG4gICAgICAgIGNhc2Ugb3QuU3BhbktpbmQuQ09OU1VNRVI6XG4gICAgICAgICAgICByZXR1cm4gdHlwZXNfMS5TcGFuS2luZC5DT05TVU1FUjtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZXhoYXVzdChraW5kKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGxvZyBmYWlsZWQgbWFwcGluZ1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVzXzEuU3BhbktpbmQuU1BBTl9LSU5EX1VOU1BFQ0lGSUVEO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBc3NlcnQgc3dpdGNoIGNhc2UgaXMgZXhoYXVzdGl2ZVxuICovXG5mdW5jdGlvbiBleGhhdXN0KHN3aXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN3aXRjaFZhbHVlO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtVGltZSh0aW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2Vjb25kczogdGltZVswXSxcbiAgICAgICAgbmFub3M6IHRpbWVbMV0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldExpbmtUcmFuc2Zvcm1lcihzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbGluayA9PiAoe1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cmFuc2Zvcm1BdHRyaWJ1dGVzKGxpbmsuYXR0cmlidXRlcyA/PyB7fSwgc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSxcbiAgICAgICAgc3BhbklkOiBsaW5rLmNvbnRleHQuc3BhbklkLFxuICAgICAgICB0cmFjZUlkOiBsaW5rLmNvbnRleHQudHJhY2VJZCxcbiAgICAgICAgdHlwZTogdHlwZXNfMS5MaW5rVHlwZS5VTlNQRUNJRklFRCxcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgY2hhbmdlZEF0dHJpYnV0ZXMgPSB0cmFuc2Zvcm1BdHRyaWJ1dGVOYW1lcyhhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gc3BhbkF0dHJpYnV0ZXNUb0dDVEF0dHJpYnV0ZXMoY2hhbmdlZEF0dHJpYnV0ZXMsIHN0cmluZ2lmeUFycmF5QXR0cmlidXRlcyk7XG59XG5mdW5jdGlvbiBzcGFuQXR0cmlidXRlc1RvR0NUQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSB0cmFuc2Zvcm1BdHRyaWJ1dGVWYWx1ZXMoYXR0cmlidXRlcywgc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhdHRyaWJ1dGVNYXAsXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmxlbmd0aCAtIE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCkubGVuZ3RoLFxuICAgIH07XG59XG5mdW5jdGlvbiBtZXJnZUF0dHJpYnV0ZXMoLi4uYXR0cmlidXRlTGlzdCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXNPdXQgPSB7XG4gICAgICAgIGF0dHJpYnV0ZU1hcDoge30sXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDAsXG4gICAgfTtcbiAgICBhdHRyaWJ1dGVMaXN0LmZvckVhY2goYXR0cmlidXRlcyA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXR0cmlidXRlc091dC5hdHRyaWJ1dGVNYXAsIGF0dHJpYnV0ZXMuYXR0cmlidXRlTWFwKTtcbiAgICAgICAgYXR0cmlidXRlc091dC5kcm9wcGVkQXR0cmlidXRlc0NvdW50ICs9XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmRyb3BwZWRBdHRyaWJ1dGVzQ291bnQgPz8gMDtcbiAgICB9KTtcbiAgICByZXR1cm4gYXR0cmlidXRlc091dDtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlc291cmNlVG9BdHRyaWJ1dGVzKHJlc291cmNlLCBwcm9qZWN0SWQsIHJlc291cmNlRmlsdGVyLCBzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBtb25pdG9yZWRSZXNvdXJjZSA9ICgwLCBvcGVudGVsZW1ldHJ5X3Jlc291cmNlX3V0aWxfMS5tYXBPdGVsUmVzb3VyY2VUb01vbml0b3JlZFJlc291cmNlKShyZXNvdXJjZSk7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChyZXNvdXJjZUZpbHRlcikge1xuICAgICAgICBPYmplY3Qua2V5cyhyZXNvdXJjZS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gcmVzb3VyY2VGaWx0ZXIudGVzdChrZXkpKVxuICAgICAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IHJlc291cmNlLmF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGdsb2JhbCBpcyB0aGUgXCJkZWZhdWx0XCIgc28ganVzdCBza2lwXG4gICAgaWYgKG1vbml0b3JlZFJlc291cmNlLnR5cGUgIT09ICdnbG9iYWwnKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKG1vbml0b3JlZFJlc291cmNlLmxhYmVscykuZm9yRWFjaChsYWJlbEtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgZy5jby9yLyR7bW9uaXRvcmVkUmVzb3VyY2UudHlwZX0vJHtsYWJlbEtleX1gO1xuICAgICAgICAgICAgYXR0cmlidXRlc1trZXldID0gbW9uaXRvcmVkUmVzb3VyY2UubGFiZWxzW2xhYmVsS2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFuQXR0cmlidXRlc1RvR0NUQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtQXR0cmlidXRlVmFsdWVzKGF0dHJpYnV0ZXMsIHN0cmluZ2lmeUFycmF5QXR0cmlidXRlcykge1xuICAgIGNvbnN0IG91dCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IHZhbHVlVG9BdHRyaWJ1dGVWYWx1ZSh2YWx1ZSwgc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG91dFtrZXldID0gYXR0cmlidXRlVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIHN0cmluZ1RvVHJ1bmNhdGFibGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4geyB2YWx1ZSB9O1xufVxuZnVuY3Rpb24gdmFsdWVUb0F0dHJpYnV0ZVZhbHVlKHZhbHVlLCBzdHJpbmdpZnlBcnJheUF0dHJpYnV0ZXMpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgdG8gY2hhbmdlIHRvIGRvdWJsZVZhbHVlIHdoZW4gYXZhaWxhYmxlIGluIFYyIEFQSS5cbiAgICAgICAgICAgIHJldHVybiB7IGludFZhbHVlOiBTdHJpbmcoTWF0aC5yb3VuZCh2YWx1ZSkpIH07XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgcmV0dXJuIHsgYm9vbFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHsgc3RyaW5nVmFsdWU6IHN0cmluZ1RvVHJ1bmNhdGFibGVTdHJpbmcodmFsdWUpIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RyaW5nVmFsdWU6IHN0cmluZ1RvVHJ1bmNhdGFibGVTdHJpbmcoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIGFycmF5IHR5cGVzIHdpdGhvdXQgc3RyaW5naWZpY2F0aW9uIG9uY2UgQVBJIGxldmVsIHN1cHBvcnQgaXMgYWRkZWRcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuY29uc3QgSFRUUF9BVFRSSUJVVEVfTUFQUElORyA9IHtcbiAgICAnaHR0cC5tZXRob2QnOiAnL2h0dHAvbWV0aG9kJyxcbiAgICAnaHR0cC51cmwnOiAnL2h0dHAvdXJsJyxcbiAgICAnaHR0cC5ob3N0JzogJy9odHRwL2hvc3QnLFxuICAgICdodHRwLnNjaGVtZSc6ICcvaHR0cC9jbGllbnRfcHJvdG9jb2wnLFxuICAgICdodHRwLnN0YXR1c19jb2RlJzogJy9odHRwL3N0YXR1c19jb2RlJyxcbiAgICAnaHR0cC51c2VyX2FnZW50JzogJy9odHRwL3VzZXJfYWdlbnQnLFxuICAgICdodHRwLnJlcXVlc3RfY29udGVudF9sZW5ndGgnOiAnL2h0dHAvcmVxdWVzdC9zaXplJyxcbiAgICAnaHR0cC5yZXNwb25zZV9jb250ZW50X2xlbmd0aCc6ICcvaHR0cC9yZXNwb25zZS9zaXplJyxcbiAgICAnaHR0cC5yb3V0ZSc6ICcvaHR0cC9yb3V0ZScsXG59O1xuZnVuY3Rpb24gdHJhbnNmb3JtQXR0cmlidXRlTmFtZXMoYXR0cmlidXRlcykge1xuICAgIGNvbnN0IG91dCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGlmIChIVFRQX0FUVFJJQlVURV9NQVBQSU5HW2tleV0pIHtcbiAgICAgICAgICAgIG91dFtIVFRQX0FUVFJJQlVURV9NQVBQSU5HW2tleV1dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvdXRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc2Zvcm0uanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFjZUV4cG9ydGVyID0gdm9pZCAwO1xuY29uc3QgY29yZV8xID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L2NvcmVcIik7XG5jb25zdCBhcGlfMSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG5jb25zdCBwcm90b2xvYWRlciA9IHJlcXVpcmUoXCJAZ3JwYy9wcm90by1sb2FkZXJcIik7XG5jb25zdCBncnBjID0gcmVxdWlyZShcIkBncnBjL2dycGMtanNcIik7XG5jb25zdCBnb29nbGVfYXV0aF9saWJyYXJ5XzEgPSByZXF1aXJlKFwiZ29vZ2xlLWF1dGgtbGlicmFyeVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgdHJhbnNmb3JtXzEgPSByZXF1aXJlKFwiLi90cmFuc2Zvcm1cIik7XG5jb25zdCB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuY29uc3QgcHJvdG9Kc29uID0gcmVxdWlyZShcIi4uL3Byb3Rvcy9wcm90b3MuanNvblwiKTtcbmNvbnN0IE9UX1JFUVVFU1RfSEVBREVSID0gJ3gtb3BlbnRlbGVtZXRyeS1vdXRnb2luZy1yZXF1ZXN0JztcbmNvbnN0IFRSQUNFX1VTRVJfQUdFTlQgPSBgb3BlbnRlbGVtZXRyeS1qcyAke3ZlcnNpb25fMS5PVF9WRVJTSU9OfTsgZ29vZ2xlLWNsb3VkLXRyYWNlLWV4cG9ydGVyICR7dmVyc2lvbl8xLlZFUlNJT059YDtcbmNvbnN0IE9QVElPTlMgPSB7XG4gICAgJ2dycGMucHJpbWFyeV91c2VyX2FnZW50JzogVFJBQ0VfVVNFUl9BR0VOVCxcbn07XG4vKipcbiAqIEZvcm1hdCBhbmQgc2VuZHMgc3BhbiBpbmZvcm1hdGlvbiB0byBHb29nbGUgQ2xvdWQgVHJhY2UuXG4gKi9cbmNsYXNzIFRyYWNlRXhwb3J0ZXIge1xuICAgIF9wcm9qZWN0SWQ7XG4gICAgX3N0cmluZ2lmeUFycmF5QXR0cmlidXRlcztcbiAgICBfYXV0aDtcbiAgICBfdHJhY2VTZXJ2aWNlQ2xpZW50ID0gdW5kZWZpbmVkO1xuICAgIF9yZXNvdXJjZUZpbHRlciA9IHVuZGVmaW5lZDtcbiAgICBfYXBpRW5kcG9pbnQgPSAnY2xvdWR0cmFjZS5nb29nbGVhcGlzLmNvbTo0NDMnO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZUZpbHRlciA9IG9wdGlvbnMucmVzb3VyY2VGaWx0ZXI7XG4gICAgICAgIHRoaXMuX3N0cmluZ2lmeUFycmF5QXR0cmlidXRlcyA9IG9wdGlvbnMuc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9hdXRoID0gbmV3IGdvb2dsZV9hdXRoX2xpYnJhcnlfMS5Hb29nbGVBdXRoKHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBvcHRpb25zLmNyZWRlbnRpYWxzLFxuICAgICAgICAgICAga2V5RmlsZTogb3B0aW9ucy5rZXlGaWxlLFxuICAgICAgICAgICAga2V5RmlsZW5hbWU6IG9wdGlvbnMua2V5RmlsZW5hbWUsXG4gICAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbnMucHJvamVjdElkLFxuICAgICAgICAgICAgc2NvcGVzOiBbJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvY2xvdWQtcGxhdGZvcm0nXSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFN0YXJ0IHRoaXMgYXN5bmMgcHJvY2VzcyBhcyBlYXJseSBhcyBwb3NzaWJsZS4gSXQgd2lsbCBiZVxuICAgICAgICAvLyBhd2FpdGVkIG9uIHRoZSBmaXJzdCBleHBvcnQgYmVjYXVzZSBjb25zdHJ1Y3RvcnMgYXJlIHN5bmNocm9ub3VzXG4gICAgICAgIHRoaXMuX3Byb2plY3RJZCA9IHRoaXMuX2F1dGguZ2V0UHJvamVjdElkKCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGFwaV8xLmRpYWcuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLmFwaUVuZHBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLl9hcGlFbmRwb2ludCA9IG9wdGlvbnMuYXBpRW5kcG9pbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIGEgbGlzdCBvZiBzcGFucyB0byBHb29nbGUgQ2xvdWQgVHJhY2UuXG4gICAgICogQHBhcmFtIHNwYW5zIFRoZSBsaXN0IG9mIHNwYW5zIHRvIHRyYW5zbWl0IHRvIEdvb2dsZSBDbG91ZCBUcmFjZVxuICAgICAqL1xuICAgIGFzeW5jIGV4cG9ydChzcGFucywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRoaXMuX3Byb2plY3RJZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2plY3RJZCA9IGF3YWl0IHRoaXMuX3Byb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3Byb2plY3RJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3JlXzEuRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcignV2FzIG5vdCBhYmxlIHRvIGRldGVybWluZSBHQ1AgcHJvamVjdCBJRCcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnR29vZ2xlIENsb3VkIFRyYWNlIGV4cG9ydCcpO1xuICAgICAgICBjb25zdCBuYW1lZFNwYW5zID0ge1xuICAgICAgICAgICAgbmFtZTogYHByb2plY3RzLyR7dGhpcy5fcHJvamVjdElkfWAsXG4gICAgICAgICAgICBzcGFuczogc3BhbnMubWFwKCgwLCB0cmFuc2Zvcm1fMS5nZXRSZWFkYWJsZVNwYW5UcmFuc2Zvcm1lcikodGhpcy5fcHJvamVjdElkLCB0aGlzLl9yZXNvdXJjZUZpbHRlciwgdGhpcy5fc3RyaW5naWZ5QXJyYXlBdHRyaWJ1dGVzKSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2JhdGNoV3JpdGVTcGFucyhuYW1lZFNwYW5zKTtcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KTtcbiAgICB9XG4gICAgYXN5bmMgc2h1dGRvd24oKSB7IH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBuZXcgc3BhbnMgdG8gbmV3IG9yIGV4aXN0aW5nIHRyYWNlcyBpbiB0aGUgR29vZ2xlIENsb3VkIFRyYWNlIGZvcm1hdCB0byB0aGVcbiAgICAgKiBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBzcGFuc1xuICAgICAqL1xuICAgIGFzeW5jIF9iYXRjaFdyaXRlU3BhbnMoc3BhbnMpIHtcbiAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnR29vZ2xlIENsb3VkIFRyYWNlIGJhdGNoIHdyaXRpbmcgdHJhY2VzJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl90cmFjZVNlcnZpY2VDbGllbnQgPSBhd2FpdCB0aGlzLl9nZXRDbGllbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhc0Vycm9yKGUpO1xuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBmYWlsZWQgdG8gY3JlYXRlIGNsaWVudDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELCBlcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmV3IGdycGMuTWV0YWRhdGEoKTtcbiAgICAgICAgbWV0YWRhdGEuYWRkKE9UX1JFUVVFU1RfSEVBREVSLCAnMScpO1xuICAgICAgICBtZXRhZGF0YS5hZGQoJ3VzZXItYWdlbnQnLCBUUkFDRV9VU0VSX0FHRU5UKTtcbiAgICAgICAgY29uc3QgYmF0Y2hXcml0ZVNwYW5zID0gKDAsIHV0aWxfMS5wcm9taXNpZnkpKHRoaXMuX3RyYWNlU2VydmljZUNsaWVudC5CYXRjaFdyaXRlU3BhbnMpLmJpbmQodGhpcy5fdHJhY2VTZXJ2aWNlQ2xpZW50KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGJhdGNoV3JpdGVTcGFucyhzcGFucywgbWV0YWRhdGEpO1xuICAgICAgICAgICAgYXBpXzEuZGlhZy5kZWJ1ZygnYmF0Y2hXcml0ZVNwYW5zIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGFzRXJyb3IoZSk7XG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYGJhdGNoV3JpdGVTcGFucyBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgICBhcGlfMS5kaWFnLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29kZTogY29yZV8xLkV4cG9ydFJlc3VsdENvZGUuRkFJTEVELCBlcnJvciB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBycGMgY2xpZW50IGlzIG5vdCBhbHJlYWR5IGluaXRpYWxpemVkLFxuICAgICAqIGF1dGhlbnRpY2F0ZXMgd2l0aCBnb29nbGUgY3JlZGVudGlhbHMgYW5kIGluaXRpYWxpemVzIHRoZSBycGMgY2xpZW50XG4gICAgICovXG4gICAgYXN5bmMgX2dldENsaWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNlU2VydmljZUNsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlU2VydmljZUNsaWVudDtcbiAgICAgICAgfVxuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdHb29nbGUgQ2xvdWQgVHJhY2UgYXV0aGVudGljYXRpbmcnKTtcbiAgICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLl9hdXRoLmdldENsaWVudCgpO1xuICAgICAgICBhcGlfMS5kaWFnLmRlYnVnKCdHb29nbGUgQ2xvdWQgVHJhY2UgZ290IGF1dGhlbnRpY2F0aW9uLiBJbml0aWFsaXphaW5nIHJwYyBjbGllbnQnKTtcbiAgICAgICAgY29uc3QgcGFja2FnZURlZmluaXRpb24gPSBwcm90b2xvYWRlci5mcm9tSlNPTihwcm90b0pzb24pO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB7IGdvb2dsZSB9ID0gZ3JwYy5sb2FkUGFja2FnZURlZmluaXRpb24ocGFja2FnZURlZmluaXRpb24pO1xuICAgICAgICBjb25zdCB0cmFjZVNlcnZpY2UgPSBnb29nbGUuZGV2dG9vbHMuY2xvdWR0cmFjZS52Mi5UcmFjZVNlcnZpY2U7XG4gICAgICAgIGNvbnN0IHNzbENyZWRzID0gZ3JwYy5jcmVkZW50aWFscy5jcmVhdGVTc2woKTtcbiAgICAgICAgY29uc3QgY2FsbENyZWRzID0gZ3JwYy5jcmVkZW50aWFscy5jcmVhdGVGcm9tR29vZ2xlQ3JlZGVudGlhbChjcmVkcyk7XG4gICAgICAgIHJldHVybiBuZXcgdHJhY2VTZXJ2aWNlKHRoaXMuX2FwaUVuZHBvaW50LCBncnBjLmNyZWRlbnRpYWxzLmNvbWJpbmVDaGFubmVsQ3JlZGVudGlhbHMoc3NsQ3JlZHMsIGNhbGxDcmVkcyksIE9QVElPTlMpO1xuICAgIH1cbn1cbmV4cG9ydHMuVHJhY2VFeHBvcnRlciA9IFRyYWNlRXhwb3J0ZXI7XG5mdW5jdGlvbiBhc0Vycm9yKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8vIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXh0ZXJuYWwtdHlwZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3RyYWNlXCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBnbG9iYWwsIGRlZmluZSwgU3ltYm9sLCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIEl0ZXJhdG9yICovXHJcbnZhciBfX2V4dGVuZHM7XHJcbnZhciBfX2Fzc2lnbjtcclxudmFyIF9fcmVzdDtcclxudmFyIF9fZGVjb3JhdGU7XHJcbnZhciBfX3BhcmFtO1xyXG52YXIgX19lc0RlY29yYXRlO1xyXG52YXIgX19ydW5Jbml0aWFsaXplcnM7XHJcbnZhciBfX3Byb3BLZXk7XHJcbnZhciBfX3NldEZ1bmN0aW9uTmFtZTtcclxudmFyIF9fbWV0YWRhdGE7XHJcbnZhciBfX2F3YWl0ZXI7XHJcbnZhciBfX2dlbmVyYXRvcjtcclxudmFyIF9fZXhwb3J0U3RhcjtcclxudmFyIF9fdmFsdWVzO1xyXG52YXIgX19yZWFkO1xyXG52YXIgX19zcHJlYWQ7XHJcbnZhciBfX3NwcmVhZEFycmF5cztcclxudmFyIF9fc3ByZWFkQXJyYXk7XHJcbnZhciBfX2F3YWl0O1xyXG52YXIgX19hc3luY0dlbmVyYXRvcjtcclxudmFyIF9fYXN5bmNEZWxlZ2F0b3I7XHJcbnZhciBfX2FzeW5jVmFsdWVzO1xyXG52YXIgX19tYWtlVGVtcGxhdGVPYmplY3Q7XHJcbnZhciBfX2ltcG9ydFN0YXI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldDtcclxudmFyIF9fY2xhc3NQcml2YXRlRmllbGRJbjtcclxudmFyIF9fY3JlYXRlQmluZGluZztcclxudmFyIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlO1xyXG52YXIgX19kaXNwb3NlUmVzb3VyY2VzO1xyXG52YXIgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb247XHJcbihmdW5jdGlvbiAoZmFjdG9yeSkge1xyXG4gICAgdmFyIHJvb3QgPSB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHRoaXMgPT09IFwib2JqZWN0XCIgPyB0aGlzIDoge307XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICBkZWZpbmUoXCJ0c2xpYlwiLCBbXCJleHBvcnRzXCJdLCBmdW5jdGlvbiAoZXhwb3J0cykgeyBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QsIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMpKSk7IH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QsIGNyZWF0ZUV4cG9ydGVyKG1vZHVsZS5leHBvcnRzKSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShjcmVhdGVFeHBvcnRlcihyb290KSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVFeHBvcnRlcihleHBvcnRzLCBwcmV2aW91cykge1xyXG4gICAgICAgIGlmIChleHBvcnRzICE9PSByb290KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoaWQsIHYpIHsgcmV0dXJuIGV4cG9ydHNbaWRdID0gcHJldmlvdXMgPyBwcmV2aW91cyhpZCwgdikgOiB2OyB9O1xyXG4gICAgfVxyXG59KVxyXG4oZnVuY3Rpb24gKGV4cG9ydGVyKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG5cclxuICAgIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcmVzdCA9IGZ1bmN0aW9uIChzLCBlKSB7XHJcbiAgICAgICAgdmFyIHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgICAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZXNEZWNvcmF0ZSA9IGZ1bmN0aW9uIChjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICAgICAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3J1bkluaXRpYWxpemVycyA9IGZ1bmN0aW9uICh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxuICAgIH07XHJcblxyXG4gICAgX19wcm9wS2V5ID0gZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fc2V0RnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxuICAgIH07XHJcblxyXG4gICAgX19tZXRhZGF0YSA9IGZ1bmN0aW9uIChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXRlciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgICAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICAgICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZXhwb3J0U3RhciA9IGZ1bmN0aW9uKG0sIG8pIHtcclxuICAgICAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgICAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgICAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG4gICAgfSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgICAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgICAgIG9bazJdID0gbVtrXTtcclxuICAgIH0pO1xyXG5cclxuICAgIF9fdmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3JlYWQgPSBmdW5jdGlvbiAobywgbikge1xyXG4gICAgICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgICAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXI7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xyXG4gICAgX19zcHJlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgICAgICByZXR1cm4gYXI7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xyXG4gICAgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3NwcmVhZEFycmF5ID0gZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICAgICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxuICAgIH07XHJcblxyXG4gICAgX19hd2FpdCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNHZW5lcmF0b3IgPSBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICAgICAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBpLCBwO1xyXG4gICAgICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY1ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX21ha2VUZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uIChjb29rZWQsIHJhdykge1xyXG4gICAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICAgICAgcmV0dXJuIGNvb2tlZDtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxuICAgIH0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XHJcbiAgICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgIHZhciBhciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xyXG4gICAgICAgICAgICByZXR1cm4gYXI7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb3duS2V5cyhvKTtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnRTdGFyID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XHJcbiAgICAgICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydERlZmF1bHQgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgICAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEluID0gZnVuY3Rpb24gKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlID0gZnVuY3Rpb24gKGVudiwgdmFsdWUsIGFzeW5jKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcclxuICAgICAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICAgICAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcclxuICAgICAgICAgICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2Rpc3Bvc2VSZXNvdXJjZXMgPSBmdW5jdGlvbiAoZW52KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcclxuICAgICAgICAgICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHIsIHMgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHMgfD0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbiA9IGZ1bmN0aW9uIChwYXRoLCBwcmVzZXJ2ZUpzeCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH07XHJcblxyXG4gICAgZXhwb3J0ZXIoXCJfX2V4dGVuZHNcIiwgX19leHRlbmRzKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3NpZ25cIiwgX19hc3NpZ24pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jlc3RcIiwgX19yZXN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19kZWNvcmF0ZVwiLCBfX2RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19wYXJhbVwiLCBfX3BhcmFtKTtcclxuICAgIGV4cG9ydGVyKFwiX19lc0RlY29yYXRlXCIsIF9fZXNEZWNvcmF0ZSk7XHJcbiAgICBleHBvcnRlcihcIl9fcnVuSW5pdGlhbGl6ZXJzXCIsIF9fcnVuSW5pdGlhbGl6ZXJzKTtcclxuICAgIGV4cG9ydGVyKFwiX19wcm9wS2V5XCIsIF9fcHJvcEtleSk7XHJcbiAgICBleHBvcnRlcihcIl9fc2V0RnVuY3Rpb25OYW1lXCIsIF9fc2V0RnVuY3Rpb25OYW1lKTtcclxuICAgIGV4cG9ydGVyKFwiX19tZXRhZGF0YVwiLCBfX21ldGFkYXRhKTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdGVyXCIsIF9fYXdhaXRlcik7XHJcbiAgICBleHBvcnRlcihcIl9fZ2VuZXJhdG9yXCIsIF9fZ2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19leHBvcnRTdGFyXCIsIF9fZXhwb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9fY3JlYXRlQmluZGluZ1wiLCBfX2NyZWF0ZUJpbmRpbmcpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3ZhbHVlc1wiLCBfX3ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmVhZFwiLCBfX3JlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZFwiLCBfX3NwcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlzXCIsIF9fc3ByZWFkQXJyYXlzKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheVwiLCBfX3NwcmVhZEFycmF5KTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdFwiLCBfX2F3YWl0KTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0dlbmVyYXRvclwiLCBfX2FzeW5jR2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0RlbGVnYXRvclwiLCBfX2FzeW5jRGVsZWdhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY1ZhbHVlc1wiLCBfX2FzeW5jVmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19tYWtlVGVtcGxhdGVPYmplY3RcIiwgX19tYWtlVGVtcGxhdGVPYmplY3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydFN0YXJcIiwgX19pbXBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnREZWZhdWx0XCIsIF9faW1wb3J0RGVmYXVsdCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRHZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRTZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZFNldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRJblwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FkZERpc3Bvc2FibGVSZXNvdXJjZVwiLCBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSk7XHJcbiAgICBleHBvcnRlcihcIl9fZGlzcG9zZVJlc291cmNlc1wiLCBfX2Rpc3Bvc2VSZXNvdXJjZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvblwiLCBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbik7XHJcbn0pO1xyXG5cclxuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBfX2V4dGVuZHM6IF9fZXh0ZW5kcyxcclxuICAgIF9fYXNzaWduOiBfX2Fzc2lnbixcclxuICAgIF9fcmVzdDogX19yZXN0LFxyXG4gICAgX19kZWNvcmF0ZTogX19kZWNvcmF0ZSxcclxuICAgIF9fcGFyYW06IF9fcGFyYW0sXHJcbiAgICBfX2VzRGVjb3JhdGU6IF9fZXNEZWNvcmF0ZSxcclxuICAgIF9fcnVuSW5pdGlhbGl6ZXJzOiBfX3J1bkluaXRpYWxpemVycyxcclxuICAgIF9fcHJvcEtleTogX19wcm9wS2V5LFxyXG4gICAgX19zZXRGdW5jdGlvbk5hbWU6IF9fc2V0RnVuY3Rpb25OYW1lLFxyXG4gICAgX19tZXRhZGF0YTogX19tZXRhZGF0YSxcclxuICAgIF9fYXdhaXRlcjogX19hd2FpdGVyLFxyXG4gICAgX19nZW5lcmF0b3I6IF9fZ2VuZXJhdG9yLFxyXG4gICAgX19leHBvcnRTdGFyOiBfX2V4cG9ydFN0YXIsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmc6IF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fdmFsdWVzOiBfX3ZhbHVlcyxcclxuICAgIF9fcmVhZDogX19yZWFkLFxyXG4gICAgX19zcHJlYWQ6IF9fc3ByZWFkLFxyXG4gICAgX19zcHJlYWRBcnJheXM6IF9fc3ByZWFkQXJyYXlzLFxyXG4gICAgX19zcHJlYWRBcnJheTogX19zcHJlYWRBcnJheSxcclxuICAgIF9fYXdhaXQ6IF9fYXdhaXQsXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yOiBfX2FzeW5jR2VuZXJhdG9yLFxyXG4gICAgX19hc3luY0RlbGVnYXRvcjogX19hc3luY0RlbGVnYXRvcixcclxuICAgIF9fYXN5bmNWYWx1ZXM6IF9fYXN5bmNWYWx1ZXMsXHJcbiAgICBfX21ha2VUZW1wbGF0ZU9iamVjdDogX19tYWtlVGVtcGxhdGVPYmplY3QsXHJcbiAgICBfX2ltcG9ydFN0YXI6IF9faW1wb3J0U3RhcixcclxuICAgIF9faW1wb3J0RGVmYXVsdDogX19pbXBvcnREZWZhdWx0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6IF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW46IF9fY2xhc3NQcml2YXRlRmllbGRJbixcclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlOiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcclxuICAgIF9fZGlzcG9zZVJlc291cmNlczogX19kaXNwb3NlUmVzb3VyY2VzLFxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb246IF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxyXG59KTtcclxuIiwKICAgICJpbXBvcnQgdHNsaWIgZnJvbSAnLi4vdHNsaWIuanMnO1xyXG5jb25zdCB7XHJcbiAgICBfX2V4dGVuZHMsXHJcbiAgICBfX2Fzc2lnbixcclxuICAgIF9fcmVzdCxcclxuICAgIF9fZGVjb3JhdGUsXHJcbiAgICBfX3BhcmFtLFxyXG4gICAgX19lc0RlY29yYXRlLFxyXG4gICAgX19ydW5Jbml0aWFsaXplcnMsXHJcbiAgICBfX3Byb3BLZXksXHJcbiAgICBfX3NldEZ1bmN0aW9uTmFtZSxcclxuICAgIF9fbWV0YWRhdGEsXHJcbiAgICBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcixcclxuICAgIF9fZXhwb3J0U3RhcixcclxuICAgIF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fdmFsdWVzLFxyXG4gICAgX19yZWFkLFxyXG4gICAgX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5cyxcclxuICAgIF9fc3ByZWFkQXJyYXksXHJcbiAgICBfX2F3YWl0LFxyXG4gICAgX19hc3luY0dlbmVyYXRvcixcclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IsXHJcbiAgICBfX2FzeW5jVmFsdWVzLFxyXG4gICAgX19tYWtlVGVtcGxhdGVPYmplY3QsXHJcbiAgICBfX2ltcG9ydFN0YXIsXHJcbiAgICBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbixcclxuICAgIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzLFxyXG4gICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXHJcbn0gPSB0c2xpYjtcclxuZXhwb3J0IHtcclxuICAgIF9fZXh0ZW5kcyxcclxuICAgIF9fYXNzaWduLFxyXG4gICAgX19yZXN0LFxyXG4gICAgX19kZWNvcmF0ZSxcclxuICAgIF9fcGFyYW0sXHJcbiAgICBfX2VzRGVjb3JhdGUsXHJcbiAgICBfX3J1bkluaXRpYWxpemVycyxcclxuICAgIF9fcHJvcEtleSxcclxuICAgIF9fc2V0RnVuY3Rpb25OYW1lLFxyXG4gICAgX19tZXRhZGF0YSxcclxuICAgIF9fYXdhaXRlcixcclxuICAgIF9fZ2VuZXJhdG9yLFxyXG4gICAgX19leHBvcnRTdGFyLFxyXG4gICAgX19jcmVhdGVCaW5kaW5nLFxyXG4gICAgX192YWx1ZXMsXHJcbiAgICBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZCxcclxuICAgIF9fc3ByZWFkQXJyYXlzLFxyXG4gICAgX19zcHJlYWRBcnJheSxcclxuICAgIF9fYXdhaXQsXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yLFxyXG4gICAgX19hc3luY0RlbGVnYXRvcixcclxuICAgIF9fYXN5bmNWYWx1ZXMsXHJcbiAgICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcixcclxuICAgIF9faW1wb3J0RGVmYXVsdCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXHJcbiAgICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXHJcbiAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgdHNsaWI7XHJcbiIsCiAgICAiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2FzeW5jR2VuZXJhdG9yLCBfX2FzeW5jVmFsdWVzLCBfX2F3YWl0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdHJhY2UsIGNvbnRleHQsIFNwYW5LaW5kLCBTcGFuU3RhdHVzQ29kZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25CYXNlLCBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiwgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XG5pbXBvcnQgeyBTcGFuQXR0cmlidXRlcywgQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCB9IGZyb20gJ0B0cmFjZWxvb3AvYWktc2VtYW50aWMtY29udmVudGlvbnMnO1xuXG52YXIgdmVyc2lvbiA9IFwiMC4yMS4wXCI7XG5cbmNsYXNzIEFudGhyb3BpY0luc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tYW50aHJvcGljXCIsIHZlcnNpb24sIGNvbmZpZyk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoY29uZmlnKTtcbiAgICB9XG4gICAgbWFudWFsbHlJbnN0cnVtZW50KG1vZHVsZSkge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBQYXRjaGluZyBAYW50aHJvcGljLWFpL3NkayBtYW51YWxseWApO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5BbnRocm9waWMuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiLCB0aGlzLnBhdGNoQW50aHJvcGljKFwiY29tcGxldGlvblwiLCBtb2R1bGUpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuQW50aHJvcGljLk1lc3NhZ2VzLnByb3RvdHlwZSwgXCJjcmVhdGVcIiwgdGhpcy5wYXRjaEFudGhyb3BpYyhcImNoYXRcIiwgbW9kdWxlKSk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLkFudGhyb3BpYy5CZXRhLk1lc3NhZ2VzLnByb3RvdHlwZSwgXCJjcmVhdGVcIiwgdGhpcy5wYXRjaEFudGhyb3BpYyhcImNoYXRcIiwgbW9kdWxlKSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihcIkBhbnRocm9waWMtYWkvc2RrXCIsIFtcIj49MC45LjFcIl0sIHRoaXMucGF0Y2guYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBwYXRjaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFBhdGNoaW5nIEBhbnRocm9waWMtYWkvc2RrQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkFudGhyb3BpYy5Db21wbGV0aW9ucy5wcm90b3R5cGUsIFwiY3JlYXRlXCIsIHRoaXMucGF0Y2hBbnRocm9waWMoXCJjb21wbGV0aW9uXCIsIG1vZHVsZUV4cG9ydHMpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkFudGhyb3BpYy5NZXNzYWdlcy5wcm90b3R5cGUsIFwiY3JlYXRlXCIsIHRoaXMucGF0Y2hBbnRocm9waWMoXCJjaGF0XCIsIG1vZHVsZUV4cG9ydHMpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkFudGhyb3BpYy5CZXRhLk1lc3NhZ2VzLnByb3RvdHlwZSwgXCJjcmVhdGVcIiwgdGhpcy5wYXRjaEFudGhyb3BpYyhcImNoYXRcIiwgbW9kdWxlRXhwb3J0cykpO1xuICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICB9XG4gICAgdW5wYXRjaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFVucGF0Y2hpbmcgQGFudGhyb3BpYy1haS9zZGtAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5BbnRocm9waWMuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuQW50aHJvcGljLk1lc3NhZ2VzLnByb3RvdHlwZSwgXCJjcmVhdGVcIik7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkFudGhyb3BpYy5CZXRhLk1lc3NhZ2VzLnByb3RvdHlwZSwgXCJjcmVhdGVcIik7XG4gICAgfVxuICAgIHBhdGNoQW50aHJvcGljKHR5cGUsIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gdHlwZSA9PT0gXCJjaGF0XCJcbiAgICAgICAgICAgICAgICAgICAgPyBwbHVnaW4uc3RhcnRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogcGx1Z2luLnN0YXJ0U3Bhbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjQ29udGV4dCA9IHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3Bhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY1Byb21pc2UgPSBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQud2l0aChleGVjQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfYSA9IGFyZ3MgPT09IG51bGwgfHwgYXJncyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJnc1swXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV4dHJhQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmdzWzBdLmV4dHJhQXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZGlhZy5lcnJvcihcIkVycm9yIGluIEFudGhyb3BpYyBpbnN0cnVtZW50YXRpb25cIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS5zdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgcGx1Z2luLl9zdHJlYW1pbmdXcmFwUHJvbWlzZSh0aGlzLl9jbGllbnQsIG1vZHVsZUV4cG9ydHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogZXhlY1Byb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSBwbHVnaW4uX3dyYXBQcm9taXNlKHR5cGUsIHNwYW4sIGV4ZWNQcm9taXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5iaW5kKGV4ZWNDb250ZXh0LCB3cmFwcGVkUHJvbWlzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGFydFNwYW4oeyB0eXBlLCBwYXJhbXMsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNXTogXCJBbnRocm9waWNcIixcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFXTogdHlwZSxcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTU9ERUxdID0gcGFyYW1zLm1vZGVsO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV0gPSBwYXJhbXMudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RPUF9QXSA9IHBhcmFtcy50b3BfcDtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1RPUF9LXSA9IHBhcmFtcy50b3BfaztcbiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGlua2luZyBwYXJhbWV0ZXJzIChmb3IgYmV0YSBtZXNzYWdlcylcbiAgICAgICAgICAgIGNvbnN0IGJldGFQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgICBpZiAoYmV0YVBhcmFtcy50aGlua2luZyAmJiBiZXRhUGFyYW1zLnRoaW5raW5nLnR5cGUgPT09IFwiZW5hYmxlZFwiKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tcImxsbS5yZXF1ZXN0LnRoaW5raW5nLnR5cGVcIl0gPSBiZXRhUGFyYW1zLnRoaW5raW5nLnR5cGU7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tcImxsbS5yZXF1ZXN0LnRoaW5raW5nLmJ1ZGdldF90b2tlbnNcIl0gPVxuICAgICAgICAgICAgICAgICAgICBiZXRhUGFyYW1zLnRoaW5raW5nLmJ1ZGdldF90b2tlbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjb21wbGV0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01BWF9UT0tFTlNdID1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm1heF90b2tlbnNfdG9fc2FtcGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NQVhfVE9LRU5TXSA9IHBhcmFtcy5tYXhfdG9rZW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5leHRyYUF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXJhbXMuZXh0cmFBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zLmV4dHJhQXR0cmlidXRlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNba2V5XSA9IHBhcmFtcy5leHRyYUF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiY2hhdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tcHRJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGEgc3lzdGVtIHByb21wdCBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIGFsd2F5cyBiZSBmaXJzdFxuICAgICAgICAgICAgICAgICAgICBpZiAoXCJzeXN0ZW1cIiBpbiBwYXJhbXMgJiYgcGFyYW1zLnN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXSA9IFwic3lzdGVtXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLmNvbnRlbnRgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBhcmFtcy5zeXN0ZW0gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJhbXMuc3lzdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkocGFyYW1zLnN5c3RlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5tZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gaW5kZXggKyBwcm9tcHRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7Y3VycmVudEluZGV4fS5yb2xlYF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uucm9sZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtjdXJyZW50SW5kZXh9LmNvbnRlbnRgXSA9IG1lc3NhZ2UuY29udGVudCB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtjdXJyZW50SW5kZXh9LmNvbnRlbnRgXSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5yb2xlYF0gPSBcInVzZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5jb250ZW50YF0gPSBwYXJhbXMucHJvbXB0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2VyLnN0YXJ0U3BhbihgYW50aHJvcGljLiR7dHlwZX1gLCB7XG4gICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3N0cmVhbWluZ1dyYXBQcm9taXNlKGNsaWVudCwgbW9kdWxlRXhwb3J0cywgeyBzcGFuLCB0eXBlLCBwcm9taXNlLCB9KSB7XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdGVTdHJlYW0oc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBpdGVyYXRlU3RyZWFtXzEoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBlXzEsIF9iLCBfYywgX2QsIGVfMiwgX2UsIF9mO1xuICAgICAgICAgICAgICAgIHZhciBfZywgX2gsIF9qLCBfaztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjaGF0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3JlYXNvbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3NlcXVlbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3Rva2VuczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2VuczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3Rvb2xfdXNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX3RpZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9sID0gdHJ1ZSwgc3RyZWFtXzEgPSBfX2FzeW5jVmFsdWVzKHN0cmVhbSksIHN0cmVhbV8xXzE7IHN0cmVhbV8xXzEgPSB5aWVsZCBfX2F3YWl0KHN0cmVhbV8xLm5leHQoKSksIF9hID0gc3RyZWFtXzFfMS5kb25lLCAhX2E7IF9sID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IHN0cmVhbV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gX2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaHVuay50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1lc3NhZ2Vfc3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmlkID0gY2h1bmsubWVzc2FnZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGVsID0gY2h1bmsubWVzc2FnZS5tb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQudXNhZ2UsIGNodW5rLm1lc3NhZ2UudXNhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWVzc2FnZV9kZWx0YVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmsudXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnVzYWdlLCBjaHVuay51c2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvbnRlbnRfYmxvY2tfc3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250ZW50Lmxlbmd0aCA8PSBjaHVuay5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNvbnRlbnQucHVzaChPYmplY3QuYXNzaWduKHt9LCBjaHVuay5jb250ZW50X2Jsb2NrKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvbnRlbnRfYmxvY2tfZGVsdGFcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rLmluZGV4IDwgcmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVzdWx0LmNvbnRlbnRbY2h1bmsuaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gXCJ0ZXh0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuay5kZWx0YS50eXBlID09PSBcInRleHRfZGVsdGFcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jb250ZW50W2NodW5rLmluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGN1cnJlbnQudGV4dCArIGNodW5rLmRlbHRhLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdGF0aW9uczogY3VycmVudC5jaXRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfaCA9IChfZyA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2guY2FsbChfZywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfbCAmJiAhX2EgJiYgKF9iID0gc3RyZWFtXzEucmV0dXJuKSkgeWllbGQgX19hd2FpdChfYi5jYWxsKHN0cmVhbV8xKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oeyBzcGFuLCB0eXBlLCByZXN1bHQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY29tcGxldGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9yZWFzb246IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfbSA9IHRydWUsIF9vID0gX19hc3luY1ZhbHVlcyhzdHJlYW0pLCBfcDsgX3AgPSB5aWVsZCBfX2F3YWl0KF9vLm5leHQoKSksIF9kID0gX3AuZG9uZSwgIV9kOyBfbSA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2YgPSBfcC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX20gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBfZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaWQgPSBjaHVuay5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tb2RlbCA9IGNodW5rLm1vZGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rLnN0b3BfcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3BfcmVhc29uID0gY2h1bmsuc3RvcF9yZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmsubW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubW9kZWwgPSBjaHVuay5tb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuay5jb21wbGV0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNvbXBsZXRpb24gKz0gY2h1bmsuY29tcGxldGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfayA9IChfaiA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2suY2FsbChfaiwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfbSAmJiAhX2QgJiYgKF9lID0gX28ucmV0dXJuKSkgeWllbGQgX19hd2FpdChfZS5jYWxsKF9vKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oeyBzcGFuLCB0eXBlLCByZXN1bHQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBtb2R1bGVFeHBvcnRzLkFQSVByb21pc2UoY2xpZW50LCBwcm9taXNlLnJlc3BvbnNlUHJvbWlzZSwgKGNsaWVudCwgcHJvcHMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWxTdHJlYW0gPSB5aWVsZCBwcm9taXNlLnBhcnNlUmVzcG9uc2UoY2xpZW50LCBwcm9wcyk7XG4gICAgICAgICAgICAvLyB0YWtlIHRoZSBpbmNvbWluZyBzdHJlYW0sIGl0ZXJhdGUgaXQgdXNpbmcgb3VyIGluc3RydW1lbnRlZCBmdW5jdGlvbiwgYW5kIHdyYXAgaXQgaW4gYSBuZXcgc3RyZWFtIHRvIGtlZXAgdGhlIHJpY2ggb2JqZWN0IHR5cGUgdGhlIHNhbWVcbiAgICAgICAgICAgIHJldHVybiBuZXcgcmVhbFN0cmVhbS5jb25zdHJ1Y3RvcigoKSA9PiBpdGVyYXRlU3RyZWFtLmNhbGwodGhpcywgcmVhbFN0cmVhbSksIHJlYWxTdHJlYW0uY29udHJvbGxlcik7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgX3dyYXBQcm9taXNlKHR5cGUsIHNwYW4sIHByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2VuZFNwYW4oeyBzcGFuLCB0eXBlLCByZXN1bHQsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUwsIHJlc3VsdC5tb2RlbCk7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjaGF0XCIgJiYgcmVzdWx0LnVzYWdlKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOUywgKChfYSA9IHJlc3VsdC51c2FnZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlucHV0X3Rva2VucykgKyAoKF9iID0gcmVzdWx0LnVzYWdlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3V0cHV0X3Rva2VucykpO1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOUywgKF9jID0gcmVzdWx0LnVzYWdlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Mub3V0cHV0X3Rva2Vucyk7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1BST01QVF9UT0tFTlMsIChfZCA9IHJlc3VsdC51c2FnZSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlucHV0X3Rva2Vucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0b3BfcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmZpbmlzaF9yZWFzb25gLCByZXN1bHQuc3RvcF9yZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjaGF0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnJvbGVgLCBcImFzc2lzdGFudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgLCBKU09OLnN0cmluZ2lmeShyZXN1bHQuY29udGVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnJvbGVgLCBcImFzc2lzdGFudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgLCByZXN1bHQuY29tcGxldGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgKF9mID0gKF9lID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jYWxsKF9lLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgICBfc2hvdWxkU2VuZFByb21wdHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyA9IGNvbnRleHRcbiAgICAgICAgICAgIC5hY3RpdmUoKVxuICAgICAgICAgICAgLmdldFZhbHVlKENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQpO1xuICAgICAgICBpZiAoY29udGV4dFNob3VsZFNlbmRQcm9tcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0U2hvdWxkU2VuZFByb21wdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy50cmFjZUNvbnRlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLl9jb25maWcudHJhY2VDb250ZW50XG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgeyBBbnRocm9waWNJbnN0cnVtZW50YXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsCiAgICAiaW1wb3J0IGJhc2U2NCBmcm9tICdiYXNlNjQtanMnO1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fcHVibGljRmllbGQgPSAob2JqLCBrZXksIHZhbHVlKSA9PiB7XG4gIF9fZGVmTm9ybWFsUHJvcChvYmosIHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIgPyBrZXkgKyBcIlwiIDoga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIHNyYy91dGlscy50c1xuZnVuY3Rpb24gbmV2ZXIoXykge1xufVxuZnVuY3Rpb24gYnl0ZVBhaXJNZXJnZShwaWVjZSwgcmFua3MpIHtcbiAgbGV0IHBhcnRzID0gQXJyYXkuZnJvbShcbiAgICB7IGxlbmd0aDogcGllY2UubGVuZ3RoIH0sXG4gICAgKF8sIGkpID0+ICh7IHN0YXJ0OiBpLCBlbmQ6IGkgKyAxIH0pXG4gICk7XG4gIHdoaWxlIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgbGV0IG1pblJhbmsgPSBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBzbGljZSA9IHBpZWNlLnNsaWNlKHBhcnRzW2ldLnN0YXJ0LCBwYXJ0c1tpICsgMV0uZW5kKTtcbiAgICAgIGNvbnN0IHJhbmsgPSByYW5rcy5nZXQoc2xpY2Uuam9pbihcIixcIikpO1xuICAgICAgaWYgKHJhbmsgPT0gbnVsbClcbiAgICAgICAgY29udGludWU7XG4gICAgICBpZiAobWluUmFuayA9PSBudWxsIHx8IHJhbmsgPCBtaW5SYW5rWzBdKSB7XG4gICAgICAgIG1pblJhbmsgPSBbcmFuaywgaV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtaW5SYW5rICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGkgPSBtaW5SYW5rWzFdO1xuICAgICAgcGFydHNbaV0gPSB7IHN0YXJ0OiBwYXJ0c1tpXS5zdGFydCwgZW5kOiBwYXJ0c1tpICsgMV0uZW5kIH07XG4gICAgICBwYXJ0cy5zcGxpY2UoaSArIDEsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnRzO1xufVxuZnVuY3Rpb24gYnl0ZVBhaXJFbmNvZGUocGllY2UsIHJhbmtzKSB7XG4gIGlmIChwaWVjZS5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuIFtyYW5rcy5nZXQocGllY2Uuam9pbihcIixcIikpXTtcbiAgcmV0dXJuIGJ5dGVQYWlyTWVyZ2UocGllY2UsIHJhbmtzKS5tYXAoKHApID0+IHJhbmtzLmdldChwaWVjZS5zbGljZShwLnN0YXJ0LCBwLmVuZCkuam9pbihcIixcIikpKS5maWx0ZXIoKHgpID0+IHggIT0gbnVsbCk7XG59XG5mdW5jdGlvbiBlc2NhcGVSZWdleChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG59XG52YXIgX1Rpa3Rva2VuID0gY2xhc3Mge1xuICAvKiogQGludGVybmFsICovXG4gIHNwZWNpYWxUb2tlbnM7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgaW52ZXJzZVNwZWNpYWxUb2tlbnM7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcGF0U3RyO1xuICAvKiogQGludGVybmFsICovXG4gIHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICByYW5rTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICB0ZXh0TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3RydWN0b3IocmFua3MsIGV4dGVuZGVkU3BlY2lhbFRva2Vucykge1xuICAgIHRoaXMucGF0U3RyID0gcmFua3MucGF0X3N0cjtcbiAgICBjb25zdCB1bmNvbXByZXNzZWQgPSByYW5rcy5icGVfcmFua3Muc3BsaXQoXCJcXG5cIikuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZSgobWVtbywgeCkgPT4ge1xuICAgICAgY29uc3QgW18sIG9mZnNldFN0ciwgLi4udG9rZW5zXSA9IHguc3BsaXQoXCIgXCIpO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTnVtYmVyLnBhcnNlSW50KG9mZnNldFN0ciwgMTApO1xuICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuLCBpKSA9PiBtZW1vW3Rva2VuXSA9IG9mZnNldCArIGkpO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfSwge30pO1xuICAgIGZvciAoY29uc3QgW3Rva2VuLCByYW5rXSBvZiBPYmplY3QuZW50cmllcyh1bmNvbXByZXNzZWQpKSB7XG4gICAgICBjb25zdCBieXRlcyA9IGJhc2U2NC50b0J5dGVBcnJheSh0b2tlbik7XG4gICAgICB0aGlzLnJhbmtNYXAuc2V0KGJ5dGVzLmpvaW4oXCIsXCIpLCByYW5rKTtcbiAgICAgIHRoaXMudGV4dE1hcC5zZXQocmFuaywgYnl0ZXMpO1xuICAgIH1cbiAgICB0aGlzLnNwZWNpYWxUb2tlbnMgPSB7IC4uLnJhbmtzLnNwZWNpYWxfdG9rZW5zLCAuLi5leHRlbmRlZFNwZWNpYWxUb2tlbnMgfTtcbiAgICB0aGlzLmludmVyc2VTcGVjaWFsVG9rZW5zID0gT2JqZWN0LmVudHJpZXModGhpcy5zcGVjaWFsVG9rZW5zKS5yZWR1Y2UoKG1lbW8sIFt0ZXh0LCByYW5rXSkgPT4ge1xuICAgICAgbWVtb1tyYW5rXSA9IHRoaXMudGV4dEVuY29kZXIuZW5jb2RlKHRleHQpO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfSwge30pO1xuICB9XG4gIGVuY29kZSh0ZXh0LCBhbGxvd2VkU3BlY2lhbCA9IFtdLCBkaXNhbGxvd2VkU3BlY2lhbCA9IFwiYWxsXCIpIHtcbiAgICBjb25zdCByZWdleGVzID0gbmV3IFJlZ0V4cCh0aGlzLnBhdFN0ciwgXCJ1Z1wiKTtcbiAgICBjb25zdCBzcGVjaWFsUmVnZXggPSBfVGlrdG9rZW4uc3BlY2lhbFRva2VuUmVnZXgoXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnNwZWNpYWxUb2tlbnMpXG4gICAgKTtcbiAgICBjb25zdCByZXQgPSBbXTtcbiAgICBjb25zdCBhbGxvd2VkU3BlY2lhbFNldCA9IG5ldyBTZXQoXG4gICAgICBhbGxvd2VkU3BlY2lhbCA9PT0gXCJhbGxcIiA/IE9iamVjdC5rZXlzKHRoaXMuc3BlY2lhbFRva2VucykgOiBhbGxvd2VkU3BlY2lhbFxuICAgICk7XG4gICAgY29uc3QgZGlzYWxsb3dlZFNwZWNpYWxTZXQgPSBuZXcgU2V0KFxuICAgICAgZGlzYWxsb3dlZFNwZWNpYWwgPT09IFwiYWxsXCIgPyBPYmplY3Qua2V5cyh0aGlzLnNwZWNpYWxUb2tlbnMpLmZpbHRlcihcbiAgICAgICAgKHgpID0+ICFhbGxvd2VkU3BlY2lhbFNldC5oYXMoeClcbiAgICAgICkgOiBkaXNhbGxvd2VkU3BlY2lhbFxuICAgICk7XG4gICAgaWYgKGRpc2FsbG93ZWRTcGVjaWFsU2V0LnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBkaXNhbGxvd2VkU3BlY2lhbFJlZ2V4ID0gX1Rpa3Rva2VuLnNwZWNpYWxUb2tlblJlZ2V4KFtcbiAgICAgICAgLi4uZGlzYWxsb3dlZFNwZWNpYWxTZXRcbiAgICAgIF0pO1xuICAgICAgY29uc3Qgc3BlY2lhbE1hdGNoID0gdGV4dC5tYXRjaChkaXNhbGxvd2VkU3BlY2lhbFJlZ2V4KTtcbiAgICAgIGlmIChzcGVjaWFsTWF0Y2ggIT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZSB0ZXh0IGNvbnRhaW5zIGEgc3BlY2lhbCB0b2tlbiB0aGF0IGlzIG5vdCBhbGxvd2VkOiAke3NwZWNpYWxNYXRjaFswXX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzdGFydCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBuZXh0U3BlY2lhbCA9IG51bGw7XG4gICAgICBsZXQgc3RhcnRGaW5kID0gc3RhcnQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzcGVjaWFsUmVnZXgubGFzdEluZGV4ID0gc3RhcnRGaW5kO1xuICAgICAgICBuZXh0U3BlY2lhbCA9IHNwZWNpYWxSZWdleC5leGVjKHRleHQpO1xuICAgICAgICBpZiAobmV4dFNwZWNpYWwgPT0gbnVsbCB8fCBhbGxvd2VkU3BlY2lhbFNldC5oYXMobmV4dFNwZWNpYWxbMF0pKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBzdGFydEZpbmQgPSBuZXh0U3BlY2lhbC5pbmRleCArIDE7XG4gICAgICB9XG4gICAgICBjb25zdCBlbmQgPSBuZXh0U3BlY2lhbD8uaW5kZXggPz8gdGV4dC5sZW5ndGg7XG4gICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLm1hdGNoQWxsKHJlZ2V4ZXMpKSB7XG4gICAgICAgIGNvbnN0IHBpZWNlID0gdGhpcy50ZXh0RW5jb2Rlci5lbmNvZGUobWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCB0b2tlbjIgPSB0aGlzLnJhbmtNYXAuZ2V0KHBpZWNlLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgaWYgKHRva2VuMiAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0LnB1c2godG9rZW4yKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXQucHVzaCguLi5ieXRlUGFpckVuY29kZShwaWVjZSwgdGhpcy5yYW5rTWFwKSk7XG4gICAgICB9XG4gICAgICBpZiAobmV4dFNwZWNpYWwgPT0gbnVsbClcbiAgICAgICAgYnJlYWs7XG4gICAgICBsZXQgdG9rZW4gPSB0aGlzLnNwZWNpYWxUb2tlbnNbbmV4dFNwZWNpYWxbMF1dO1xuICAgICAgcmV0LnB1c2godG9rZW4pO1xuICAgICAgc3RhcnQgPSBuZXh0U3BlY2lhbC5pbmRleCArIG5leHRTcGVjaWFsWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICBkZWNvZGUodG9rZW5zKSB7XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IHRva2Vucy5sZW5ndGg7ICsraTIpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2kyXTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50ZXh0TWFwLmdldCh0b2tlbikgPz8gdGhpcy5pbnZlcnNlU3BlY2lhbFRva2Vuc1t0b2tlbl07XG4gICAgICBpZiAoYnl0ZXMgIT0gbnVsbCkge1xuICAgICAgICByZXMucHVzaChieXRlcyk7XG4gICAgICAgIGxlbmd0aCArPSBieXRlcy5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1lcmdlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBieXRlcyBvZiByZXMpIHtcbiAgICAgIG1lcmdlZEFycmF5LnNldChieXRlcywgaSk7XG4gICAgICBpICs9IGJ5dGVzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGV4dERlY29kZXIuZGVjb2RlKG1lcmdlZEFycmF5KTtcbiAgfVxufTtcbnZhciBUaWt0b2tlbiA9IF9UaWt0b2tlbjtcbl9fcHVibGljRmllbGQoVGlrdG9rZW4sIFwic3BlY2lhbFRva2VuUmVnZXhcIiwgKHRva2VucykgPT4ge1xuICByZXR1cm4gbmV3IFJlZ0V4cCh0b2tlbnMubWFwKChpKSA9PiBlc2NhcGVSZWdleChpKSkuam9pbihcInxcIiksIFwiZ1wiKTtcbn0pO1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmdOYW1lRm9yTW9kZWwobW9kZWwpIHtcbiAgc3dpdGNoIChtb2RlbCkge1xuICAgIGNhc2UgXCJncHQyXCI6IHtcbiAgICAgIHJldHVybiBcImdwdDJcIjtcbiAgICB9XG4gICAgY2FzZSBcImNvZGUtY3VzaG1hbi0wMDFcIjpcbiAgICBjYXNlIFwiY29kZS1jdXNobWFuLTAwMlwiOlxuICAgIGNhc2UgXCJjb2RlLWRhdmluY2ktMDAxXCI6XG4gICAgY2FzZSBcImNvZGUtZGF2aW5jaS0wMDJcIjpcbiAgICBjYXNlIFwiY3VzaG1hbi1jb2RleFwiOlxuICAgIGNhc2UgXCJkYXZpbmNpLWNvZGV4XCI6XG4gICAgY2FzZSBcImRhdmluY2ktMDAyXCI6XG4gICAgY2FzZSBcInRleHQtZGF2aW5jaS0wMDJcIjpcbiAgICBjYXNlIFwidGV4dC1kYXZpbmNpLTAwM1wiOiB7XG4gICAgICByZXR1cm4gXCJwNTBrX2Jhc2VcIjtcbiAgICB9XG4gICAgY2FzZSBcImNvZGUtZGF2aW5jaS1lZGl0LTAwMVwiOlxuICAgIGNhc2UgXCJ0ZXh0LWRhdmluY2ktZWRpdC0wMDFcIjoge1xuICAgICAgcmV0dXJuIFwicDUwa19lZGl0XCI7XG4gICAgfVxuICAgIGNhc2UgXCJhZGFcIjpcbiAgICBjYXNlIFwiYmFiYmFnZVwiOlxuICAgIGNhc2UgXCJiYWJiYWdlLTAwMlwiOlxuICAgIGNhc2UgXCJjb2RlLXNlYXJjaC1hZGEtY29kZS0wMDFcIjpcbiAgICBjYXNlIFwiY29kZS1zZWFyY2gtYmFiYmFnZS1jb2RlLTAwMVwiOlxuICAgIGNhc2UgXCJjdXJpZVwiOlxuICAgIGNhc2UgXCJkYXZpbmNpXCI6XG4gICAgY2FzZSBcInRleHQtYWRhLTAwMVwiOlxuICAgIGNhc2UgXCJ0ZXh0LWJhYmJhZ2UtMDAxXCI6XG4gICAgY2FzZSBcInRleHQtY3VyaWUtMDAxXCI6XG4gICAgY2FzZSBcInRleHQtZGF2aW5jaS0wMDFcIjpcbiAgICBjYXNlIFwidGV4dC1zZWFyY2gtYWRhLWRvYy0wMDFcIjpcbiAgICBjYXNlIFwidGV4dC1zZWFyY2gtYmFiYmFnZS1kb2MtMDAxXCI6XG4gICAgY2FzZSBcInRleHQtc2VhcmNoLWN1cmllLWRvYy0wMDFcIjpcbiAgICBjYXNlIFwidGV4dC1zZWFyY2gtZGF2aW5jaS1kb2MtMDAxXCI6XG4gICAgY2FzZSBcInRleHQtc2ltaWxhcml0eS1hZGEtMDAxXCI6XG4gICAgY2FzZSBcInRleHQtc2ltaWxhcml0eS1iYWJiYWdlLTAwMVwiOlxuICAgIGNhc2UgXCJ0ZXh0LXNpbWlsYXJpdHktY3VyaWUtMDAxXCI6XG4gICAgY2FzZSBcInRleHQtc2ltaWxhcml0eS1kYXZpbmNpLTAwMVwiOiB7XG4gICAgICByZXR1cm4gXCJyNTBrX2Jhc2VcIjtcbiAgICB9XG4gICAgY2FzZSBcImdwdC0zLjUtdHVyYm8taW5zdHJ1Y3QtMDkxNFwiOlxuICAgIGNhc2UgXCJncHQtMy41LXR1cmJvLWluc3RydWN0XCI6XG4gICAgY2FzZSBcImdwdC0zLjUtdHVyYm8tMTZrLTA2MTNcIjpcbiAgICBjYXNlIFwiZ3B0LTMuNS10dXJiby0xNmtcIjpcbiAgICBjYXNlIFwiZ3B0LTMuNS10dXJiby0wNjEzXCI6XG4gICAgY2FzZSBcImdwdC0zLjUtdHVyYm8tMDMwMVwiOlxuICAgIGNhc2UgXCJncHQtMy41LXR1cmJvXCI6XG4gICAgY2FzZSBcImdwdC00LTMyay0wNjEzXCI6XG4gICAgY2FzZSBcImdwdC00LTMyay0wMzE0XCI6XG4gICAgY2FzZSBcImdwdC00LTMya1wiOlxuICAgIGNhc2UgXCJncHQtNC0wNjEzXCI6XG4gICAgY2FzZSBcImdwdC00LTAzMTRcIjpcbiAgICBjYXNlIFwiZ3B0LTRcIjpcbiAgICBjYXNlIFwiZ3B0LTMuNS10dXJiby0xMTA2XCI6XG4gICAgY2FzZSBcImdwdC0zNS10dXJib1wiOlxuICAgIGNhc2UgXCJncHQtNC0xMTA2LXByZXZpZXdcIjpcbiAgICBjYXNlIFwiZ3B0LTQtdmlzaW9uLXByZXZpZXdcIjpcbiAgICBjYXNlIFwiZ3B0LTMuNS10dXJiby0wMTI1XCI6XG4gICAgY2FzZSBcImdwdC00LXR1cmJvXCI6XG4gICAgY2FzZSBcImdwdC00LXR1cmJvLTIwMjQtMDQtMDlcIjpcbiAgICBjYXNlIFwiZ3B0LTQtdHVyYm8tcHJldmlld1wiOlxuICAgIGNhc2UgXCJncHQtNC0wMTI1LXByZXZpZXdcIjpcbiAgICBjYXNlIFwidGV4dC1lbWJlZGRpbmctYWRhLTAwMlwiOlxuICAgIGNhc2UgXCJ0ZXh0LWVtYmVkZGluZy0zLXNtYWxsXCI6XG4gICAgY2FzZSBcInRleHQtZW1iZWRkaW5nLTMtbGFyZ2VcIjoge1xuICAgICAgcmV0dXJuIFwiY2wxMDBrX2Jhc2VcIjtcbiAgICB9XG4gICAgY2FzZSBcImdwdC00b1wiOlxuICAgIGNhc2UgXCJncHQtNG8tMjAyNC0wNS0xM1wiOlxuICAgIGNhc2UgXCJncHQtNG8tMjAyNC0wOC0wNlwiOlxuICAgIGNhc2UgXCJncHQtNG8tMjAyNC0xMS0yMFwiOlxuICAgIGNhc2UgXCJncHQtNG8tbWluaS0yMDI0LTA3LTE4XCI6XG4gICAgY2FzZSBcImdwdC00by1taW5pXCI6XG4gICAgY2FzZSBcImdwdC00by1zZWFyY2gtcHJldmlld1wiOlxuICAgIGNhc2UgXCJncHQtNG8tc2VhcmNoLXByZXZpZXctMjAyNS0wMy0xMVwiOlxuICAgIGNhc2UgXCJncHQtNG8tbWluaS1zZWFyY2gtcHJldmlld1wiOlxuICAgIGNhc2UgXCJncHQtNG8tbWluaS1zZWFyY2gtcHJldmlldy0yMDI1LTAzLTExXCI6XG4gICAgY2FzZSBcImdwdC00by1hdWRpby1wcmV2aWV3XCI6XG4gICAgY2FzZSBcImdwdC00by1hdWRpby1wcmV2aWV3LTIwMjQtMTItMTdcIjpcbiAgICBjYXNlIFwiZ3B0LTRvLWF1ZGlvLXByZXZpZXctMjAyNC0xMC0wMVwiOlxuICAgIGNhc2UgXCJncHQtNG8tbWluaS1hdWRpby1wcmV2aWV3XCI6XG4gICAgY2FzZSBcImdwdC00by1taW5pLWF1ZGlvLXByZXZpZXctMjAyNC0xMi0xN1wiOlxuICAgIGNhc2UgXCJvMVwiOlxuICAgIGNhc2UgXCJvMS0yMDI0LTEyLTE3XCI6XG4gICAgY2FzZSBcIm8xLW1pbmlcIjpcbiAgICBjYXNlIFwibzEtbWluaS0yMDI0LTA5LTEyXCI6XG4gICAgY2FzZSBcIm8xLXByZXZpZXdcIjpcbiAgICBjYXNlIFwibzEtcHJldmlldy0yMDI0LTA5LTEyXCI6XG4gICAgY2FzZSBcIm8xLXByb1wiOlxuICAgIGNhc2UgXCJvMS1wcm8tMjAyNS0wMy0xOVwiOlxuICAgIGNhc2UgXCJvM1wiOlxuICAgIGNhc2UgXCJvMy0yMDI1LTA0LTE2XCI6XG4gICAgY2FzZSBcIm8zLW1pbmlcIjpcbiAgICBjYXNlIFwibzMtbWluaS0yMDI1LTAxLTMxXCI6XG4gICAgY2FzZSBcIm80LW1pbmlcIjpcbiAgICBjYXNlIFwibzQtbWluaS0yMDI1LTA0LTE2XCI6XG4gICAgY2FzZSBcImNoYXRncHQtNG8tbGF0ZXN0XCI6XG4gICAgY2FzZSBcImdwdC00by1yZWFsdGltZVwiOlxuICAgIGNhc2UgXCJncHQtNG8tcmVhbHRpbWUtcHJldmlldy0yMDI0LTEwLTAxXCI6XG4gICAgY2FzZSBcImdwdC00by1yZWFsdGltZS1wcmV2aWV3LTIwMjQtMTItMTdcIjpcbiAgICBjYXNlIFwiZ3B0LTRvLW1pbmktcmVhbHRpbWUtcHJldmlld1wiOlxuICAgIGNhc2UgXCJncHQtNG8tbWluaS1yZWFsdGltZS1wcmV2aWV3LTIwMjQtMTItMTdcIjpcbiAgICBjYXNlIFwiZ3B0LTQuMVwiOlxuICAgIGNhc2UgXCJncHQtNC4xLTIwMjUtMDQtMTRcIjpcbiAgICBjYXNlIFwiZ3B0LTQuMS1taW5pXCI6XG4gICAgY2FzZSBcImdwdC00LjEtbWluaS0yMDI1LTA0LTE0XCI6XG4gICAgY2FzZSBcImdwdC00LjEtbmFub1wiOlxuICAgIGNhc2UgXCJncHQtNC4xLW5hbm8tMjAyNS0wNC0xNFwiOlxuICAgIGNhc2UgXCJncHQtNC41LXByZXZpZXdcIjpcbiAgICBjYXNlIFwiZ3B0LTQuNS1wcmV2aWV3LTIwMjUtMDItMjdcIjpcbiAgICBjYXNlIFwiZ3B0LTVcIjpcbiAgICBjYXNlIFwiZ3B0LTUtMjAyNS0wOC0wN1wiOlxuICAgIGNhc2UgXCJncHQtNS1uYW5vXCI6XG4gICAgY2FzZSBcImdwdC01LW5hbm8tMjAyNS0wOC0wN1wiOlxuICAgIGNhc2UgXCJncHQtNS1taW5pXCI6XG4gICAgY2FzZSBcImdwdC01LW1pbmktMjAyNS0wOC0wN1wiOlxuICAgIGNhc2UgXCJncHQtNS1jaGF0LWxhdGVzdFwiOiB7XG4gICAgICByZXR1cm4gXCJvMjAwa19iYXNlXCI7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1vZGVsXCIpO1xuICB9XG59XG5cbmV4cG9ydCB7IFRpa3Rva2VuLCBnZXRFbmNvZGluZ05hbWVGb3JNb2RlbCwgbmV2ZXIgfTtcbiIsCiAgICAiaW1wb3J0IHsgbmV2ZXIsIFRpa3Rva2VuLCBnZXRFbmNvZGluZ05hbWVGb3JNb2RlbCB9IGZyb20gJy4vY2h1bmstVkwyT1FDV04uanMnO1xuZXhwb3J0IHsgVGlrdG9rZW4sIGdldEVuY29kaW5nTmFtZUZvck1vZGVsIH0gZnJvbSAnLi9jaHVuay1WTDJPUUNXTi5qcyc7XG5cbi8vIHNyYy9yYW5rcy9ncHQyLmpzXG52YXIgZ3B0Ml9kZWZhdWx0ID0geyBcImV4cGxpY2l0X25fdm9jYWJcIjogNTAyNTcsIFwicGF0X3N0clwiOiBcIidzfCd0fCdyZXwndmV8J218J2xsfCdkfCA/XFxcXHB7TH0rfCA/XFxcXHB7Tn0rfCA/W15cXFxcc1xcXFxwe0x9XFxcXHB7Tn1dK3xcXFxccysoPyFcXFxcUyl8XFxcXHMrXCIsIFwic3BlY2lhbF90b2tlbnNcIjogeyBcIjx8ZW5kb2Z0ZXh0fD5cIjogNTAyNTYgfSwgXCJicGVfcmFua3NcIjogXCIhIDAgSVE9PSBJZz09IEl3PT0gSkE9PSBKUT09IEpnPT0gSnc9PSBLQT09IEtRPT0gS2c9PSBLdz09IExBPT0gTFE9PSBMZz09IEx3PT0gTUE9PSBNUT09IE1nPT0gTXc9PSBOQT09IE5RPT0gTmc9PSBOdz09IE9BPT0gT1E9PSBPZz09IE93PT0gUEE9PSBQUT09IFBnPT0gUHc9PSBRQT09IFFRPT0gUWc9PSBRdz09IFJBPT0gUlE9PSBSZz09IFJ3PT0gU0E9PSBTUT09IFNnPT0gU3c9PSBUQT09IFRRPT0gVGc9PSBUdz09IFVBPT0gVVE9PSBVZz09IFV3PT0gVkE9PSBWUT09IFZnPT0gVnc9PSBXQT09IFdRPT0gV2c9PSBXdz09IFhBPT0gWFE9PSBYZz09IFh3PT0gWUE9PSBZUT09IFlnPT0gWXc9PSBaQT09IFpRPT0gWmc9PSBadz09IGFBPT0gYVE9PSBhZz09IGF3PT0gYkE9PSBiUT09IGJnPT0gYnc9PSBjQT09IGNRPT0gY2c9PSBjdz09IGRBPT0gZFE9PSBkZz09IGR3PT0gZUE9PSBlUT09IGVnPT0gZXc9PSBmQT09IGZRPT0gZmc9PSBvUT09IG9nPT0gb3c9PSBwQT09IHBRPT0gcGc9PSBwdz09IHFBPT0gcVE9PSBxZz09IHF3PT0gckE9PSByZz09IHJ3PT0gc0E9PSBzUT09IHNnPT0gc3c9PSB0QT09IHRRPT0gdGc9PSB0dz09IHVBPT0gdVE9PSB1Zz09IHV3PT0gdkE9PSB2UT09IHZnPT0gdnc9PSB3QT09IHdRPT0gd2c9PSB3dz09IHhBPT0geFE9PSB4Zz09IHh3PT0geUE9PSB5UT09IHlnPT0geXc9PSB6QT09IHpRPT0gemc9PSB6dz09IDBBPT0gMFE9PSAwZz09IDB3PT0gMUE9PSAxUT09IDFnPT0gMXc9PSAyQT09IDJRPT0gMmc9PSAydz09IDNBPT0gM1E9PSAzZz09IDN3PT0gNEE9PSA0UT09IDRnPT0gNHc9PSA1QT09IDVRPT0gNWc9PSA1dz09IDZBPT0gNlE9PSA2Zz09IDZ3PT0gN0E9PSA3UT09IDdnPT0gN3c9PSA4QT09IDhRPT0gOGc9PSA4dz09IDlBPT0gOVE9PSA5Zz09IDl3PT0gK0E9PSArUT09ICtnPT0gK3c9PSAvQT09IC9RPT0gL2c9PSAvdz09IEFBPT0gQVE9PSBBZz09IEF3PT0gQkE9PSBCUT09IEJnPT0gQnc9PSBDQT09IENRPT0gQ2c9PSBDdz09IERBPT0gRFE9PSBEZz09IER3PT0gRUE9PSBFUT09IEVnPT0gRXc9PSBGQT09IEZRPT0gRmc9PSBGdz09IEdBPT0gR1E9PSBHZz09IEd3PT0gSEE9PSBIUT09IEhnPT0gSHc9PSBJQT09IGZ3PT0gZ0E9PSBnUT09IGdnPT0gZ3c9PSBoQT09IGhRPT0gaGc9PSBodz09IGlBPT0gaVE9PSBpZz09IGl3PT0gakE9PSBqUT09IGpnPT0ganc9PSBrQT09IGtRPT0ga2c9PSBrdz09IGxBPT0gbFE9PSBsZz09IGx3PT0gbUE9PSBtUT09IG1nPT0gbXc9PSBuQT09IG5RPT0gbmc9PSBudz09IG9BPT0gclE9PSBJSFE9IElHRT0gYUdVPSBhVzQ9IGNtVT0gYjI0PSBJSFJvWlE9PSBaWEk9IElITT0gWVhRPSBJSGM9IElHOD0gWlc0PSBJR009IGFYUT0gYVhNPSBZVzQ9IGIzST0gWlhNPSBJR0k9IFpXUT0gSUdZPSBhVzVuIElIQT0gYjNVPSBJR0Z1IFlXdz0gWVhJPSBJSFJ2IElHMD0gSUc5bSBJR2x1IElHUT0gSUdnPSBJR0Z1WkE9PSBhV009IFlYTT0gYkdVPSBJSFJvIGFXOXUgYjIwPSBiR3c9IFpXNTAgSUc0PSBJR3c9IGMzUT0gSUhKbCBkbVU9IElHVT0gY204PSBiSGs9IElHSmwgSUdjPSBJRlE9IFkzUT0gSUZNPSBhV1E9IGIzUT0gSUVrPSBkWFE9IFpYUT0gSUVFPSBJR2x6IElHOXUgYVcwPSBZVzA9IGIzYz0gWVhrPSBZV1E9IGMyVT0gSUhSb1lYUT0gSUVNPSBhV2M9IElHWnZjZz09IFlXTT0gSUhrPSBkbVZ5IGRYST0gSUhVPSBiR1E9IElITjAgSUUwPSBKM009IElHaGwgSUdsMCBZWFJwYjI0PSBhWFJvIGFYST0gWTJVPSBJSGx2ZFE9PSBhV3c9IElFST0gSUhkbyBiMnc9IElGQT0gSUhkcGRHZz0gSURFPSBkR1Z5IFkyZz0gSUdGeiBJSGRsIElDZz0gYm1RPSBhV3hzIElFUT0gYVdZPSBJREk9IFlXYz0gWlhKeiBhMlU9IElDST0gSUVnPSBaVzA9IElHTnZiZz09IElGYz0gSUZJPSBhR1Z5IElIZGhjdz09IElIST0gYjJRPSBJRVk9IGRXdz0gWVhSbCBJR0YwIGNtaz0gY0hBPSBiM0psIElGUm9aUT09IElITmwgZFhNPSBJSEJ5Ync9PSBJR2hoIGRXMD0gSUdGeVpRPT0gSUdSbCBZV2x1IFlXNWsgSUc5eSBhV2RvIFpYTjAgYVhOMCBZV0k9IGNtOXQgSUU0PSBkR2c9IElHTnZiUT09IElFYz0gZFc0PSBiM0E9IE1EQT0gSUV3PSBJRzV2ZEE9PSBaWE56IElHVjQgSUhZPSBjbVZ6IElFVT0gWlhjPSBhWFI1IFlXNTAgSUdKNSBaV3c9IGIzTT0gYjNKMCBiMk09IGNYVT0gSUdaeWIyMD0gSUdoaGRtVT0gSUhOMSBhWFpsIGIzVnNaQT09IElITm8gSUhSb2FYTT0gYm5RPSBjbUU9IGNHVT0gYVdkb2RBPT0gWVhKMCBiV1Z1ZEE9PSBJR0ZzIGRYTjAgWlc1ayBMUzA9IFlXeHMgSUU4PSBZV05yIElHTm8gSUd4bCBhV1Z6IGNtVmsgWVhKayA0b0E9IGIzVjAgSUVvPSBJR0ZpIFpXRnkgYVhZPSBZV3hzZVE9PSBiM1Z5IGIzTjAgWjJnPSBjSFE9IElIQnMgWVhOMCBJR05oYmc9PSBZV3M9IGIyMWwgZFdRPSBWR2hsIElHaHBjdz09IElHUnYgSUdkdiBJR2hoY3c9PSBaMlU9IEozUT0gSUZVPSBjbTkxIElITmggSUdvPSBJR0oxZEE9PSBJSGR2Y2c9PSBJR0ZzYkE9PSBaV04wIElHcz0gWVcxbCBJSGRwYkd3PSBiMnM9IElIZG9aUT09IElIUm9aWGs9IGFXUmwgTURFPSBabVk9IGFXTm8gY0d3PSBkR2hsY2c9PSBJSFJ5IExpND0gSUdsdWRBPT0gYVdVPSBkWEpsIFlXZGwgSUc1bCBhV0ZzIFlYQT0gYVc1bCBhV05sIElHMWwgSUc5MWRBPT0gWVc1eiBiMjVsIGIyNW4gYVc5dWN3PT0gSUhkb2J3PT0gSUVzPSBJSFZ3IElIUm9aV2x5IElHRmsgSURNPSBJSFZ6IFlYUmxaQT09IGIzVnogSUcxdmNtVT0gZFdVPSBiMmM9IElGTjAgYVc1ayBhV3RsIElITnYgYVcxbCBjR1Z5IExpST0gWW1WeSBhWG89IFlXTjAgSUc5dVpRPT0gSUhOaGFXUT0gSUMwPSBZWEpsIElIbHZkWEk9IFkyTT0gSUZSbyBJR05zIFpYQT0gWVd0bCBZV0pzWlE9PSBhWEE9IElHTnZiblE9IElIZG9hV05vIGFXRT0gSUdsdCBJR0ZpYjNWMCBJSGRsY21VPSBkbVZ5ZVE9PSBkV0k9IElHaGhaQT09IElHVnUgSUdOdmJYQT0gTENJPSBJRWx1IElIVnUgSUdGbiBhWEpsIFlXTmwgWVhVPSBZWEo1IElIZHZkV3hrIFlYTnogY25rPSBJT0tBIFkydz0gYjI5ciBaWEpsIGMyOD0gSUZZPSBhV2R1IGFXST0gSUc5bVpnPT0gSUhSbCBkbVZ1IElGaz0gYVd4bCBiM05sIGFYUmwgYjNKdCBJREl3TVE9PSBJSEpsY3c9PSBJRzFoYmc9PSBJSEJsY2c9PSBJRzkwYUdWeSBiM0prIGRXeDAgSUdKbFpXND0gSUd4cGEyVT0gWVhObCBZVzVqWlE9PSBhM009IFlYbHogYjNkdSBaVzVqWlE9PSBJR1JwY3c9PSBZM1JwYjI0PSBJR0Z1ZVE9PSBJR0Z3Y0E9PSBJSE53IGFXNTAgY21WemN3PT0gWVhScGIyNXogWVdscyBJRFE9IGFXTmhiQT09IElIUm9aVzA9IElHaGxjZz09IGIzVnVkQT09IElFTm8gSUdGeSBJR2xtIElIUm9aWEpsIElIQmwgSUhsbFlYST0gWVhZPSBJRzE1IElITnZiV1U9IElIZG9aVzQ9IGIzVm5hQT09IFlXTm8gSUhSb1lXND0gY25VPSBiMjVrIGFXTnIgSUc5MlpYST0gZG1WcyBJSEYxIENnbz0gSUhOaiBjbVZoZEE9PSBjbVZsIElFbDAgYjNWdVpBPT0gY0c5eWRBPT0gSUdGc2MyOD0gSUhCaGNuUT0gWm5SbGNnPT0gSUd0dSBJR0psWXc9PSBJSFJwYldVPSBaVzV6IElEVT0gYjNCc1pRPT0gSUhkb1lYUT0gSUc1diBaSFU9IGJXVnkgWVc1biBJRzVsZHc9PSBMUzB0TFE9PSBJR2RsZEE9PSBiM0o1IGFYUnBiMjQ9IGFXNW5jdz09IElHcDFjM1E9IElHbHVkRzg9IElEQT0gWlc1MGN3PT0gYjNabCBkR1U9IElIQmxiM0JzWlE9PSBJSEJ5WlE9PSBJR2wwY3c9PSBJSEpsWXc9PSBJSFIzIGFXRnUgYVhKemRBPT0gWVhKciBiM0p6IElIZHZjbXM9IFlXUmwgYjJJPSBJSE5vWlE9PSBJRzkxY2c9PSBkMjQ9IGFXNXIgYkdsaiBJREU1IElFaGwgYVhObyBibVJsY2c9PSBZWFZ6WlE9PSBJR2hwYlE9PSBiMjV6IElGcz0gSUhKdiBabTl5YlE9PSBhV3hrIFlYUmxjdz09IGRtVnljdz09IElHOXViSGs9IGIyeHMgSUhOd1pRPT0gWTJzPSBaV3hzIFlXMXcgSUdGall3PT0gSUdKcyBhVzkxY3c9PSBkWEp1IFpuUT0gYjI5ayBJR2h2ZHc9PSBhR1ZrIElDYz0gSUdGbWRHVnkgWVhjPSBJR0YwZEE9PSBiM1k9IGJtVT0gSUhCc1lYaz0gWlhKMiBhV04wIElHTnZkV3hrIGFYUjAgSUdGdCBJR1pwY25OMCBJRFk9IElHRmpkQT09IElDUT0gWldNPSBhR2x1Wnc9PSBkV0ZzIGRXeHMgSUdOdmJXMD0gYjNrPSBiMnhrIFkyVnogWVhSbGNnPT0gSUdabCBJR0psZEE9PSBkMlU9IGFXWm0gSUhSM2J3PT0gYjJOciBJR0poWTJzPSBLUzQ9IGFXUmxiblE9IElIVnVaR1Z5IGNtOTFaMmc9IGMyVnMgZUhRPSBJRzFoZVE9PSBjbTkxYm1RPSBJSEJ2IGNHZz0gYVhOeiBJR1JsY3c9PSBJRzF2YzNRPSBJR1JwWkE9PSBJR0ZrWkE9PSBhbVZqZEE9PSBJR2x1WXc9PSBabTl5WlE9PSBJSEJ2YkE9PSBiMjUwIElHRm5ZV2x1IFkyeDFaQT09IGRHVnliZz09IElHdHViM2M9IElHNWxaV1E9IElHTnZibk09IElHTnYgSUM0PSBJSGRoYm5RPSBJSE5sWlE9PSBJRGM9IGJtbHVadz09IGFXVjMgSUZSb2FYTT0gWTJWayBJR1YyWlc0PSBJR2x1WkE9PSBkSGs9IElGZGwgWVhSbyBJSFJvWlhObCBJSEJ5IElIVnpaUT09IElHSmxZMkYxYzJVPSBJR1pzIGJtYz0gSUc1dmR3PT0gSU9LQWt3PT0gWTI5dCBhWE5sIElHMWhhMlU9IElIUm9aVzQ9IGIzZGxjZz09IElHVjJaWEo1IElGVnUgSUhObFl3PT0gYjNOeiBkV05vIElHVnQgSUQwPSBJRkpsIGFXVmsgY21sMCBJR2x1ZGc9PSBiR1ZqZEE9PSBJSE4xY0hBPSBZWFJwYm1jPSBJR3h2YjJzPSBiV0Z1IGNHVmpkQT09IElEZz0gY205MyBJR0oxIElIZG9aWEpsIGFXWnBZdz09IElIbGxZWEp6IGFXeDUgSUdScFptWT0gSUhOb2IzVnNaQT09IElISmxiUT09IFZHZz0gU1c0PSBJR1YyIFpHRjUgSjNKbCBjbWxpIElISmxiQT09IGMzTT0gSUdSbFpnPT0gSUhKcFoyaDAgSUhONSBLU3c9IGJHVnogTURBdyBhR1Z1IElIUm9jbTkxWjJnPSBJRlJ5IFgxOD0gSUhkaGVRPT0gSUdSdmJnPT0gSUN3PSBJREV3IFlYTmxaQT09IElHRnpjdz09IGRXSnNhV009IElISmxadz09IElFRnVaQT09IGFYZz0gSUhabGNuaz0gSUdsdVkyeDFaQT09IGIzUm9aWEk9IElHbHRjQT09IGIzUm8gSUhOMVlnPT0gSU9LQWxBPT0gSUdKbGFXNW4gWVhKbiBJRmRvIFBUMD0gYVdKc1pRPT0gSUdSdlpYTT0gWVc1blpRPT0gY21GdCBJRGs9IFpYSjAgY0hNPSBhWFJsWkE9PSBZWFJwYjI1aGJBPT0gSUdKeSBJR1J2ZDI0PSBJRzFoYm5rPSBZV3RwYm1jPSBJR05oYkd3PSBkWEpwYm1jPSBhWFJwWlhNPSBJSEJvIGFXTnogWVd4eiBJR1JsWXc9PSBZWFJwZG1VPSBaVzVsY2c9PSBJR0psWm05eVpRPT0gYVd4cGRIaz0gSUhkbGJHdz0gSUcxMVkyZz0gWlhKemIyND0gSUhSb2IzTmwgSUhOMVkyZz0gSUd0bCBJR1Z1WkE9PSBJRUoxZEE9PSBZWE52Ymc9PSBkR2x1Wnc9PSBJR3h2Ym1jPSBaV1k9IElIUm9hVzVyIGVYTT0gSUdKbGJBPT0gSUhOdCBhWFJ6IFlYZz0gSUc5M2JnPT0gSUhCeWIzWT0gSUhObGRBPT0gYVdabCBiV1Z1ZEhNPSBZbXhsIGQyRnlaQT09IElITm9iM2M9IElIQnlaWE09IGJYTT0gYjIxbGRBPT0gSUc5aSBJSE5oZVE9PSBJRk5vIGRITT0gWm5WcyBJR1ZtWmc9PSBJR2QxIElHbHVjM1E9IGRXNWsgY21WdSBZMlZ6Y3c9PSBJR1Z1ZEE9PSBJRmx2ZFE9PSBJR2R2YjJRPSBJSE4wWVhKMCBhVzVqWlE9PSBJRzFoWkdVPSBkSFE9IGMzUmxiUT09IGIyeHZadz09IGRYQT0gSUh3PSBkVzF3IElHaGxiQT09IGRtVnliZz09IGRXeGhjZz09IGRXRnNiSGs9IElHRmogSUcxdmJnPT0gSUd4aGMzUT0gSURJd01BPT0gTVRBPSBJSE4wZFdRPSBkWEpsY3c9PSBJRUZ5IGMyVnNaZz09IFlYSnogYldWeWFXTT0gZFdWeiBZM2s9IElHMXBiZz09IGIyeHNiM2M9IElHTnZiQT09IGFXOD0gSUcxdlpBPT0gSUdOdmRXNTAgSUVOdmJRPT0gYUdWeiBJR1pwYmc9PSBZV2x5IGFXVnkgNG9DVSBjbVZoWkE9PSBZVzVyIFlYUmphQT09IFpYWmxjZz09IElITjBjZz09IElIQnZhVzUwIGIzSnIgSUU1bGR3PT0gSUhOMWNnPT0gYjI5cyBZV3hyIFpXMWxiblE9IElIVnpaV1E9IGNtRmpkQT09IGQyVmxiZz09IElITmhiV1U9IGIzVnUgSUVGcyBZMms9IElHUnBabVpsY21VPSBJSGRvYVd4bCBMUzB0TFMwdExTMD0gSUdkaGJXVT0gWTJWd2RBPT0gSUhOcGJRPT0gTGk0dSBJR2x1ZEdWeSBaV3M9IElISmxjRzl5ZEE9PSBJSEJ5YjJSMSBJSE4wYVd4cyBiR1ZrIFlXZz0gSUdobGNtVT0gSUhkdmNteGsgSUhSb2IzVm5hQT09IElHNTFiUT09IFlYSmphQT09IGFXMWxjdz09IFlXeGwgSUZObCBJRWxtIEx5OD0gSUV4bCBJSEpsZEE9PSBJSEpsWmc9PSBJSFJ5WVc1eiBibVZ5IGRYUnBiMjQ9IGRHVnljdz09IElIUmhhMlU9IElFTnMgSUdOdmJtWT0gZDJGNSBZWFpsIElHZHZhVzVuIElITnMgZFdjPSBJRUZ0WlhKcFl3PT0gSUhOd1pXTT0gSUdoaGJtUT0gSUdKbGRIZGxaVzQ9IGFYTjBjdz09IElFUmwgYjI5MCBTWFE9IElHVmhjZz09IElHRm5ZV2x1YzNRPSBJR2hwWjJnPSBaMkZ1IFlYbz0gWVhSb1pYST0gSUdWNGNBPT0gSUc5dyBJR2x1Y3c9PSBJR2R5IElHaGxiSEE9IElISmxjWFU9IFpYUnogYVc1eiBJRkJ5Ync9PSBhWE50IElHWnZkVzVrIGJHRnVaQT09IFlYUmggZFhOeiBZVzFsY3c9PSBJSEJsY25OdmJnPT0gSUdkeVpXRjAgY0hJPSBJSE5wWjI0PSBJRUZ1IEozWmwgSUhOdmJXVjAgSUhObGNnPT0gYUdsdyBJSEoxYmc9PSBJRG89IElIUmxjZz09IGFYSmxZM1E9IElHWnZiR3h2ZHc9PSBJR1JsZEE9PSBhV05sY3c9PSBJR1pwYm1RPSBNVEk9IElHMWxiUT09IElHTnkgWlhKbFpBPT0gWlhnPSBJR1Y0ZEE9PSBkWFJvIFpXNXpaUT09IFkyOD0gSUhSbFlXMD0gZG1sdVp3PT0gYjNWelpRPT0gWVhObyBZWFIwIGRtVmsgSUhONWMzUmxiUT09IElFRnogWkdWeSBhWFpsY3c9PSBiV2x1IElHeGxZV1E9IElFSnMgWTJWdWRBPT0gSUdGeWIzVnVaQT09IElHZHZkbVZ5Ymc9PSBJR04xY2c9PSBkbVZzYjNBPSBZVzU1IElHTnZkWEk9IFlXeDBhQT09IFlXZGxjdz09IGFYcGwgSUdOaGNnPT0gYjJSbCBJR3hoZHc9PSBJSEpsWVdRPSBKMjA9IFkyOXUgSUhKbFlXdz0gSUhOMWNIQnZjblE9IElERXkgTGk0dUxnPT0gSUhKbFlXeHNlUT09IGJtVnpjdz09IElHWmhZM1E9IElHUmhlUT09IElHSnZkR2c9IGVXbHVadz09IElITmxjblk9IElFWnZjZz09IElIUm9jbVZsIElIZHZiUT09IElHMWxaQT09IGIyUjUgSUZSb1pYaz0gTlRBPSBJR1Y0Y0dWeSBkRzl1IElHVmhZMmc9IFlXdGxjdz09IElHTm9aUT09IElHTnlaUT09IGFXNWxjdz09IElISmxjQT09IE1Uaz0gWjJjPSBhV3hzYVc5dSBJR2R5YjNVPSBkWFJsIGFXcz0gVjJVPSBaMlYwIFJWST0gSUcxbGRBPT0gSUhOaGVYTT0gYjNnPSBJR1IxY21sdVp3PT0gWlhKdSBhWHBsWkE9PSBZWEpsWkE9PSBJR1poYlE9PSBhV05oYkd4NSBJR2hoY0hBPSBJRWx6IElHTm9ZWEk9IGJXVmsgZG1WdWRBPT0gSUdkbGJtVnkgYVdWdWRBPT0gY0d4bCBhV1YwIGNtVnVkQT09IE1URT0gZG1WeiBjSFJwYjI0PSBJREl3IFptOXliV0YwYVc5dSBJR052Y2c9PSBJRzltWm1saiBhV1ZzWkE9PSBJSFJ2Ync9PSBhWE5wYjI0PSBJR2x1Wmc9PSBJRm89IGRHaGwgYjJGayBJSEIxWW14cFl3PT0gSUhCeWIyYz0gY21saiBLaW89IElIZGhjZz09IElIQnZkMlZ5IGRtbGxkdz09IElHWmxkdz09IElHeHZZdz09IElHUnBabVpsY21WdWRBPT0gSUhOMFlYUmwgSUdobFlXUT0gSjJ4cyBJSEJ2YzNNPSBJSE4wWVhRPSBjbVYwIFlXNTBjdz09IElIWmhiQT09IElHbHpjdz09IElHTnNaUT09IGFYWmxjbk09IFlXNWogSUdWNGNHdz0gSUdGdWIzUm9aWEk9IElGRT0gSUdGMiBkR2hwYm1jPSBibU5sIFYyZz0gSUdOb2FXeGsgSUhOcGJtTmwgYVhKbFpBPT0gYkdWemN3PT0gSUd4cFptVT0gSUdSbGRtVnNiM0E9IGFYUjBiR1U9IElHUmxjQT09IElIQmhjM009IDQ0TT0gSUhSMWNtND0gYjNKdSBWR2hwY3c9PSBZbVZ5Y3c9PSBjbTl6Y3c9PSBJRUZrIElHWnkgSUhKbGMzQT0gSUhObFkyOXVaQT09IGIyZz0gSUM4PSBJR1JwYzJNPSBJQ1k9IElITnZiV1YwYUdsdVp3PT0gSUdOdmJYQnNaUT09IElHVmsgSUdacGJBPT0gSUcxdmJuUm8gWVdvPSBkV009IElHZHZkbVZ5Ym0xbGJuUT0gSUhkcGRHaHZkWFE9IElHeGxadz09IElHUnBjM1E9IElIQjFkQT09IElIRjFaWE4wIFlXNXUgSUhCeWIzUT0gTWpBPSBJRzVsZG1WeSBhV1Z1WTJVPSBJR3hsZG1WcyBJR0Z5ZEE9PSBJSFJvYVc1bmN3PT0gSUcxcFoyaDAgSUdWbVptVmpkQT09IElHTnZiblJ5Ync9PSBJR05sYm5RPSBJREU0IElHRnNiRzkzIElHSmxiR2xsIFkyaHZiMnc9IGIzUjAgSUdsdVkzSmwgSUdabFpXdz0gSUhKbGMzVnNkQT09IElHeHZkQT09IElHWjFiZz09IGIzUmwgSUhSNSBaWEpsYzNRPSBJR052Ym5ScGJnPT0gSUhWemFXNW4gSUdKcFp3PT0gTWpBeCBJR0Z6YXc9PSBJR0psYzNRPSBJQ2s9IFNVND0gSUc5d2NBPT0gTXpBPSBJRzUxYldKbGNnPT0gYVc1bGMzTT0gVTNRPSBiR1ZoYzJVPSBJR05oIElHMTFjM1E9IElHUnBjbVZqZEE9PSBJR2RzIElEdz0gSUc5d1pXND0gSUhCdmMzUT0gSUdOdmJXVT0gSUhObFpXMD0gYjNKa2FXNW4gSUhkbFpXcz0gWVhSbGJIaz0gYVhSaGJBPT0gSUdWcyBjbWxsYm1RPSBJR1poY2c9PSBJSFJ5WVE9PSBhVzVoYkE9PSBJSEJ5YVE9PSBJRlZUIElIQnNZV05sIElHWnZjbTA9IElIUnZiR1E9IElqbz0gWVdsdWN3PT0gWVhSMWNtVT0gSUZSeWRXMXcgSUhOMFlXNWsgSUNNPSBhV1JsY2c9PSBJRVp5IElHNWxlSFE9IElITnZZdz09IElIQjFjZz09IElHeGxkQT09IElHeHBkSFJzWlE9PSBJR2gxYlE9PSBJR2s9IGNtOXUgTVRVPSBJREUxIElHTnZiVzExYmc9PSBJRzFoY21zPSBJRlJvWlhKbCBJSGR5IElGUm9ZWFE9IElHbHVabTl5YldGMGFXOXUgZDJGNWN3PT0gSUdKMWN3PT0gWVhCdyBJR2x1ZG1WemRBPT0gYldVPSBJR2hoY21RPSBZV2x1WldRPSBaV0ZrIElHbHRjRzl5ZEE9PSBJR0Z3Y0hKdiBJSFJsYzNRPSBJSFJ5YVE9PSBJSEpsYzNRPSBiM05sWkE9PSBJR1oxYkd3PSBJR05oY21VPSBJRk53IElHTmhjMlU9IFQwND0gSUhOciBJR3hsYzNNPSBJQ3M9IElIQmhjblJwWXc9PSBJRkJzIFlXSnNlUT09IGRXTnIgYVhOb1pXUT0gWTJodSBZbVU9IElHeHBjM1E9IFlYUnZjZz09IElIUnZjQT09IElHRmtkZz09IElFSmwgY25WamRBPT0gSUdSbGJRPT0gY21GMGFXOXUgYkdsdVp3PT0gWjNrPSBjbVZsYmc9PSBaMlZ5IElHaHZiV1U9IElHeGxablE9IElHSmxkSFJsY2c9PSBJR1JoZEdFPSBJREV4IElHRjBkR0ZqYXc9PSBJSEJ5YjJKc1pRPT0gYkdsdVpRPT0gWVhKa2N3PT0gSUdKbGFBPT0gY21GcyBJRWh2ZHc9PSBJRk5vWlE9PSBZWEpuWlE9PSBJQzB0IE9pOHYgSUdKeWJ3PT0gSUZCbyBZWFJ6IElHSjFhV3hrIGQzYz0gYVdSbFpBPT0gWVdsdCBZWE5sY3c9PSBaVzVqZVE9PSBJRzFoYVc0PSBhVzVsWkE9PSBJR2x1WTJ4MVpHbHVadz09IElIcz0gSUdkdmRBPT0gSUdsdWRHVnlaWE4wIElHdGxaWEE9IElGZz0gSUdWaGN3PT0gWVdsdWFXNW4gSUdOc1lYTnogNG9DbSBJRTV2IElIWmhjZz09IElITnRZV3hzIFlXMXdiR1U9IFFWUT0gSUdsa1pRPT0gSUZOdiBJSEpsWTJVPSBJSEJ2YkdsMCBJRzF2ZGc9PSBJSEJzWVc0PSBJSEJsY21ObGJuUT0gYVhacGJtYz0gSUdOaGJYQT0gSUhCaGVRPT0gTVRRPSBjMk09IGFYTmxaQT09IElIVnVkQT09IGIyNWxlUT09IGNHeHZlUT09IFBUMDlQUT09IElHUnBaRzQ9IElFbHVaQT09IFpXeHogWlhKMFlXbHUgSUhCdmN3PT0gWDE5Zlh3PT0gYVhabGNnPT0gSUhCeWIyTmxjM009IElIQnliMmR5WVcwPSBhV1pwWldRPSBJRkpsY0E9PSBNVFk9IGRYSnYgYjJ4dlozaz0gWVhSMFpYST0gYVc1aCBJRzVoYldVPSBJRUZzYkE9PSBJR1p2ZFhJPSBJSEpsZEhWeWJnPT0gZG1sdmRYTT0gWW5NPSBJR05oYkd4bFpBPT0gSUcxdmRtVT0gSUZOaiBhWEprIElHZHliM1Z3IElHSnlaUT09IElHMWxiZz09IElHTmhjQT09IGRHVnUgWldVPSBJR1J5YVE9PSBiR1ZuIGFHVnlaUT09IGRYUm9iM0k9IElIQmhkQT09IElHTjFjbkpsYm5RPSBhV1JsY3c9PSBJSEJ2Y0E9PSBkRzg9IFpXNTBhVzl1IElHRnNkMkY1Y3c9PSBJRzFwYkE9PSBJSGR2YldWdSBJREUyIElHOXNaQT09IGFYWmxiZz09IGNtRndhQT09IElFOXkgY205eSBaVzUwYkhrPSBJRzVsWVhJPSBJRVY0IGNtVmhiUT09IGMyZz0gSURFMCBJR1p5WldVPSBhWE56YVc5dSBjM1JoYm1RPSBJRU52Ymc9PSBZV3hwZEhrPSBkWE5sWkE9PSBNVE09IElHUmxjMmxuYmc9PSBJR05vWVc1blpRPT0gSUdOb1lXNW4gSUdKdiBJSFpwY3c9PSBaVzFpWlhJPSBJR0p2YjJzPSBjbVZoWkhrPSBJR3RwYkd3PSBNalU9IGNIQmxaQT09IElHRjNZWGs9IElHRmliR1U9IElHTnZkVzUwY25rPSBJR052Ym5OMCBZWEp1IElHOXlaR1Z5IFFWST0gYVc5eSBhWFZ0IGIzSjBhQT09IE1UZz0gWVdsc1lXSnNaUT09IElITjMgSUcxcGJHeHBiMjQ9IElERXogWVhScFl3PT0gZEdWayBJRWR2IElHOXdaWEk9IFpXNW4gSUhSb2FXNW4gWVdwdmNnPT0gWTI5dWIyMD0gSUVOdmJXMD0gSUhkb2VRPT0gZFhKbFpBPT0gZFhKaGJBPT0gSUhOamFHOXZiQT09IFluaz0gSUUxaGNnPT0gSUdGbVpnPT0gSUdSaGVYTT0gSUdGdWJnPT0gZFhObyBZVzVsIFNXWT0gWldjPSBJSEJ5YjJZPSBJR2hsWVd4MGFBPT0gYjNWMGFBPT0gUW5WMCBhVzl1WVd3PSBMaXc9IElITnZiQT09IElHRnNjbVZoWkhrPSBJRE13IElHTm9ZWEpoWTNRPSBTR1U9IElHWnlhV1Z1WkE9PSBSVk09IGFXRnVjdz09IGFXTnNaUT09IEoyUT0gSUU5dSBJR3hsWVhOMCBJSEJ5YjIwPSBJR1J5IElHaHBjM1E9IGFYUm9aWEk9IElHVnpkQT09IGFYRjEgTVRjPSBjMjl1IElIUmxiR3c9IElIUmhiR3M9IGIyaHUgYjJsdWRBPT0gYkdWamRHbHZiZz09IFFVND0gSUhWdWRHbHMgWVhWbmFBPT0gSUd4aGRHVnkgSUhabCBJSFpwWlhjPSBaVzVrYVc1biBhWFpsWkE9PSBJSGR2Y21RPSBkMkZ5WlE9PSBJR052YzNRPSBJR1Z1YjNWbmFBPT0gSUdkcGRtVT0gSUZWdWFYUmxaQT09IElIUmxZMmh1IFlYSmxiblE9IFQxST0gSUhCaGNnPT0gSUVSeSBJREl3TVRZPSBjbWx6ZEE9PSBaWEpwYm1jPSBJTUk9IElHeGhjbWRsIGMybGtaUT09IFlXTjUgWTJObGMzTT0gSUhkcGJnPT0gSUdsdGNHOXlkR0Z1ZEE9PSBJREU1T1E9PSBJR1J2WlhOdSBJREUzIElHSjFjMmx1WlhOeiBJR05zWldGeSBJSEpsYzJVPSBJaXc9IGRYSjUgSUdWeGRRPT0gWVhOMFpYST0gWVd4bSBJRUZ0WlhKcFkyRnUgYm1WamRBPT0gSUdWNGNHVmpkQT09IGFYWmxjbk5wZEhrPSBJRzlqWXc9PSBJRVpzIElHdHBibVE9IElHMWxZVzQ9IElIQmhjM1E9IElHUmxkZz09IElHSmhjdz09IGJHVjAgY21GbWRBPT0gSUc5eVoyRnUgSUdSbGJBPT0gSUhCbGNtWnZjbTA9IElITjBiM0o1IElITmxZWE52Ymc9PSBJRU52YkE9PSBJR05zWVdsdCBJR05oYldVPSBJSGRwZEdocGJnPT0gSUd4cGJtVT0gSUhCeWIycGxZM1E9IElFRjAgSUdOdmJuUnliMnc9IFpXNWtaV1E9IElGTjUgSUdGcGNnPT0gYVhwaGRHbHZiZz09IElDbz0gYkdWNSBJRzF2Ym1WNSBhV1JrIFdXOTEgWm05eSBJR1poYldsc2VRPT0gSUcxaGEybHVadz09IElHSnBkQT09IElIQnZiR2xqWlE9PSBJR2hoY0hCbGJnPT0gSUhabGNuTT0gYjI1NSBkV1ptIElGZG9aVzQ9IElITnBkQT09IGFXUmxidz09IGJHWT0gYVhOdmJnPT0gSUhOMWNtVT0gWjJsdSBJR0Z3Y0dWaGNnPT0gSUd4cFoyaDAgSUdWeiBiMlk9IElIZGhkR1Z5IElIUnBiV1Z6IGJtOTAgSUdkeWIzYz0gSUdOdmJYQmhibms9IElGUmwgYjNkeiBJRzFoY2c9PSBiM1Z5WTJVPSBhVzlzIFlYSnQgWW5JPSBJR1Y0WVcxd2JHVT0gSUdOdmJtTT0gSUdadmNtVT0gSUZSdiBjSEp2IFJVND0gY21sbGN3PT0gSURJMSBJRU5oYmc9PSBibVY1IElHRmpkSFZoYkd4NSBJR1YyWlhJPSBkWEpwZEhrPSBZV3RsYmc9PSBZWEJ6IElIUmhlQT09IElHMWhhbTl5IFlXMWggSUc5bWRHVnUgWlhKaGJBPT0gSUdoMWJXRnUgSUdwdllnPT0gYVhOMFpYST0gSUdGMllXbHNZV0pzWlE9PSBiMk55IFpXNXUgWVdsayBhWFpwWkE9PSBJSEpsWTI5eVpBPT0gUHlJPSBJSE5wYm1jPSBJRUZ0IGFXUmxibU5sIElHNWxkM009IGMzUmxjZz09IElHVmpiMjV2YlE9PSBJR1p2Ykd4dmQybHVadz09IElFSnkgYVhOcGJtYz0gSUdodmRYST0gYlc5emRBPT0gZFcxbGJuUT0gSUhObGVBPT0gSUdSbGMyTT0gSUdKbFkyOXRaUT09IElFVmsgSUhSdmIycz0gSUdoaGRtbHVadz09IElIQnliMlIxWTNRPSBZWFZzZEE9PSBRWE09IFlYSnBibWM9IElHMWxZVzV6IElHaHZjQT09IGRXNWwgSUdOb2J3PT0gSUdObGNuUmhhVzQ9IElHNXZiZz09IElHUmxZV3c9IE1qUT0gYkdWdFpXNTAgYjJOcCBaVzVsIElITnBaR1U9IElGQnkgSUUxaGVRPT0gSUhKbFlYTnZiZz09IGRXVmsgWTJobFpBPT0gZFd4aGRHbHZiZz09IElHVnNaV04wIElHOW1abWxqYVdGcyBJSEJ2YzNOcFlteGwgSUdodmJHUT0gWVc1a2N3PT0gYjNSeiBJR05wZEhrPSBiM0pwWlhNPSBJSE5sZG1WeSBJR05vYVd4a2NtVnUgSUc5dVkyVT0gSUdGamRHbDIgYkdWeSBJRzVwWjJoMCBhWFJwYjI1eiBJRXB2YUc0PSBZWEJsIGNHeGhlUT09IElHUnZibVU9IElHeHBiUT09IElIZHZjbXRwYm1jPSBJRkJ5WlhNPSBiM0pzWkE9PSBaV0k9IElFTnYgSUdKdlpIaz0gWVdsc2N3PT0gZFhSbGN3PT0gSUUxeSBJSGRvWlhSb1pYST0gSUdGMWRHaHZjZz09IGNtOXcgSUhCeWIzQmxjZz09IElITmxaVzQ9IEtUcz0gSUdaaFl3PT0gSUZOMSBJR052Ym1RPSBhWFJwYm1jPSBJR052ZFhKelpRPT0gSUgwPSBMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gWVdsbmJnPT0gSUdWMlpXNTAgSUdWdVp3PT0gSUhCdmRBPT0gSUdsdWRHVnliZz09IGFXRnQgSUhOb2IzSjAgWlcxd2RBPT0gNDRJPSBJRWR2WkE9PSBhV3hoY2c9PSBPREE9IElHOXlhV2M9IFNWTT0gYjNWeWJnPT0gWVdKcGJHbDBlUT09IGFYUnBkbVU9IElHUmhiUT09IElERXdNQT09IElIQnlaWE56IElHUnZhVzVuIElIQnliM1JsWTNRPSBjbWx1Wnc9PSBJSFJvYjNWbmFIUT0gSUhGMVpYTjBhVzl1IGNtVjMgSUZkaGNnPT0gSUhObGRtVnlZV3c9IElGTjBZWFJsIElHZHBkbVZ1IElHWjFibVE9IElGUjMgSUhkbGJuUT0gWVc1alpYTT0gZDI5eWF3PT0gY0c5eSBiWGs9IE5EQT0gSUdGeVp3PT0gWVhKMGJXVnVkQT09IGRYTjBiMjA9IElIQnZiR2xqIElHMWxaWFE9IElHTnlaV0YwIE1qST0gSUZOMFlYUmxjdz09IElHZGhiV1Z6IGNtRjMgZFhSMWNtVT0gSUhWdVpHVnljM1JoYm1RPSBkWEp6IElFOWkgYkdsemFBPT0gYzNrPSBJRzFoYTJWeiBJSGR2Ymc9PSBZV2R2Ymc9PSBJR2gwZEE9PSBJR3h2ZG1VPSBaVzUwYVdGcyBJR052YlhCc1pYUmwgY0dGeSBJRWx0IFFVdz0gSUdGalkyOTFiblE9IHdxQT0gYjNKbFpBPT0gZG1WeWRBPT0gSUdsa1pXNTAgSURJd01UVT0gSUc5MGFHVnljdz09IElFMXBiZz09IGFXSmxjZz09IGRtVnlZV2RsIFZHaGxjbVU9IGFYUnBiMjVoYkE9PSBaR1E9IElIQnliMkk9IElIbHZkVzVuIElHRnNiMjVuIElHRmpZMjl5WkdsdVp3PT0gSUhsbGRBPT0gSUcxbGJXSmxjbk09IElGZG9ZWFE9IGIybGsgSUUxaGJnPT0gUVc1ayBJR0Z0YjI1biBZV2s9IElHVnRjR3h2ZVE9PSBJRkpsY3c9PSBJRDQ9IElHbHVkbTlzIElHeHZkdz09IFlXWT0gSUVOaGNnPT0gSUdocFp3PT0gSUU5dVpRPT0gSUZObFl3PT0gYVc1aGRHbHZiZz09IElHeHBhMlZzZVE9PSBJR0Z1ZEE9PSBZV2RsWkE9PSBJRkoxYzNNPSBJR0psYmc9PSBJSEpsYkdVPSBSbTl5IFltRmphdz09IElFNXZkQT09IElIQnlaWE5wWkdWdWRBPT0gWW1Gc2JBPT0gSUdGalkyVnpjdz09IGFYWnBaSFZoYkE9PSBJRVJsYlE9PSBJRVYxY204PSBOakE9IElHdHViM2R1IGFYSnMgSUVkeSBJR1ZoY214NSBkWE5sIGFXVjBlUT09IDRvQ1QgSUdacFoyaDAgSUhObGJuUT0gSUhSdlpHRjUgSUcxaGNtdGxkQT09IElpND0gSUdKaGMyVmsgSUhOMGNtOXVadz09IGRYSjBhR1Z5IElHUmxZZz09IGJXSmxjZz09IElIQnliMkpzWlcwPSBJR1JsWVhSbyBJSE52WTJsaGJBPT0gYVcxaGRHVT0gUVZNPSBiM0owZFc0PSBJR05oYlhCaGFXZHUgWlhKNSBRMmc9IElHVjUgYVdGc2JIaz0gSUcxMWN3PT0gZDJnPSBjRzl6IElHVnkgSUhOaFpnPT0gSUcxdmJuUm9jdz09IGFYSnZiZz09IElIWnBiMnc9IElHWnBkbVU9IElITjBjbVU9IElIQnNZWGxsY25NPSBhVzVqIFlXeGsgZVdWaGNnPT0gWVhWdSBJSE4xWTJObGMzTT0gSUhCeVpYTmxiblE9IFpYSmxibU5sIElESXdNVFE9IElITjFaMmM9IElIQmhjblJwWTNWc1lYST0gSUhSeWVRPT0gSUhOMVoyZGxjM1E9IElFTm9jbWx6ZEE9PSBiMjVsY3c9PSBJSEJ5YVhZPSBNak09IElHTnlhWFE9IElHeGhibVE9IElHeHZZMkZzIGFXWjUgTWprPSBJR0YxZEE9PSBSVVE9IElFZDEgSUcxMWJIUT0gSUhCdmJHbDBhV05oYkE9PSBJR0Z6YTJWayBJR1p2Y20xbGNnPT0gYVhSMFpYST0gY21sd2RBPT0gSUdOc2IzTmwgSUhCeVlXTjAgSUZsdmNtcz0gSUdkbGRIUnBibWM9IElHRmpjbTl6Y3c9PSBJR052YldJPSBJR0psYkdsbGRtVT0gSUhvPSBJSFJ2WjJWMCBJSFJ2WjJWMGFHVnkgSUVObGJuUT0gYVhKaiBJR2x1WkdsMmFXUjFZV3c9IElFMWogTWpjPSBhWE5yIElFVnVadz09IElHWmhZMlU9IElESTAgSUhaaGJIVmwgSUdGeVpXRT0gWlhZPSBJSGR5YVhRPSBJRkJ5WlhOcFpHVnVkQT09IElIWnZkQT09IElHdGxlUT09IElHMXZiUT09IGNIVjAgSUdGdWVYUm9hVzVuIElHVjRjR1Z5YVdWdVkyVT0gWVhSMGJHVT0gSUcxcGJtUT0gWVdabSBiMjF0IElHWjFkSFZ5WlE9PSBaMlZrIElHTjFkQT09IElIUnZkQT09IGFYUmphQT09IElIWnBaR1Z2IElHbHVkbVZ6ZEdsbiBJRzVsZEE9PSBJRTE1IGNtbGpkQT09IGFXVnUgTGlrPSBJR2x0Y0hKdiBkR2h2ZFdkbyBkMkZ5WkhNPSBJR052Ym01bFkzUT0gSUUxbFpBPT0gYzJWc2RtVnogWlc1emFYWmwgYldJPSBiMkpsY2c9PSBZWFJ2Y25NPSBRVzQ9IElEVXcgSUhKbFpIVT0gY21WelpXNTAgSUdGaWIzWmwgSUdaeVpRPT0gSUVWMWNtOXdaUT09IGMzYz0gSUdGdGIzVnVkQT09IElFRndjQT09IElHVnBkR2hsY2c9PSBJRzFwYkdsMCBJR0Z1WVd3PSBJR1poYVd3PSBJRVZ1IFlXeGxjdz09IElITndaV05wWVd3PSBJR0pzWVdOciBTVlE9IFkyaGxjZz09IElHeHZiMnRwYm1jPSBJR1pwY21VPSBlVzQ9IElHRnNiVzl6ZEE9PSBiMjl1IElITjBkV1I1IElHMXBjM009IFkyaGxjdz09IGNtOTNiZz09IElIUnlaUT09IElHTnZiVzExYm1sMGVRPT0gSUcxbFpHbGggSUdadmIyUT0gSUdOdmJXVnogSUZWdWFYWmxjbk5wZEhrPSBJSE5wYm1kc1pRPT0gVjJoaGRBPT0gZFd4NSBJR2hoYkdZPSBZV2QxWlE9PSBhRzlrIElGSmxjSFZpYkdsaiBJSE4wWVhKMFpXUT0gSUhGMWFXTnIgYjNSdiBZbTl2YXc9PSBJR2x6YzNWbCBhWFJ2Y2c9PSBJR1ZzYzJVPSBJR052Ym5OcFpHVnkgTWpZPSBjbTlrZFE9PSBJSFJoYTJWdSBNamc9IE9Uaz0gSUZkcGRHZz0gSUhSeWRXVT0gSUhkaCBJSFJ5WVdRPSBJR0ZuYnc9PSBJRzFsYzNNPSBhV1ZtIElHRmtaR1ZrIGIydGwgSUdKaFpBPT0gSUdaaGRnPT0gTXpNPSBJSE5wYldsc1lYST0gWVhOciBJRVJ2Ymc9PSBJR05vWVhKaFkzUmxjZz09IGIzSjBjdz09IElFaHZkWE5sIElISmxjRzl5ZEdWayBJSFI1Y0dVPSBkbUZzIGFXOWsgSUVodmQyVjJaWEk9IElIUmhjbWM9IElHVnVkR2x5WlE9PSBjSEJwYm1jPSBJR2hwYzNSdmNuaz0gSUd4cGRtVT0gWm1acFl3PT0gTGk0dUxpNHVMaTQ9IFpXUmxjbUZzIElIUnllV2x1Wnc9PSBJR1JwYzJOMWMzTT0gSUVoaGNnPT0gWVdObGN3PT0gYkdsemFHVmsgSUhObGJHWT0gYjNOdyBjbVZ6ZEE9PSBJSEp2YjIwPSBaV3gwIElHWmhiR3c9IGIyeDFkR2x2Ymc9PSBJR1YwIElIZz0gSUdsemJnPT0gSUdsa1pXRT0gWW04PSBJSE52ZFc1ayBJRVJsY0E9PSBJSE52YldWdmJtVT0gWTJsaGJHeDUgZFd4c2VRPT0gSUdadll3PT0gSUc5aWFtVmpkQT09IGFXWjAgWVhCbGNnPT0gSUhCc1lYbGxjZz09IElISmhkR2hsY2c9PSBJSE5sY25acFkyVT0gWVhOb2FXNW4gSUVSdiBJRkJoY25RPSBjblZuIGJXOXUgY0d4NSBJRzF2Y2c9PSBJRzV2ZEdocGJtYz0gSUhCeWIzWnBaR1U9IFNVTT0gZFc1biBJSEJoY25SNSBJR1Y0YVhOMCBJRzFoWnc9PSBOekE9IElISjFiQT09IElHaHZkWE5sIElHSmxhR2x1WkE9PSBJR2h2ZDJWMlpYST0gSUZkdmNteGsgSUhOMWJRPT0gSUdGd2NHeHBZdz09IElEcz0gSUdaMWJtTjBhVzl1IFozST0gSUZCdmJBPT0gSUdaeWIyNTAgTWpBdyBJSE5sY21sbGN3PT0gSUhSbGJRPT0gSUhSNWNBPT0gYVd4c2N3PT0gSUc5d2RBPT0gSUhCdmFXNTBjdz09IElHSmxiRzkzIGFYUjBaV1E9IElITndaV05wWm1saiBJREl3TVRjPSBkVzFpIElISmggSUhCeVpYWnBiM1Z6IElIQnlaWFE9IGNtVnRaUT09IElHTjFjM1J2YlE9PSBJR052ZFhKMCBJRTFsIElISmxjR3c9IElIZG9iMnhsIFoyOD0gWTJWeSBJSFJ5WldGMCBJRUZqZEE9PSBJSEJ5YjJKaFlteDUgSUd4bFlYSnUgWlc1a1pYST0gSUVGemN3PT0gSUhabGNuTnBiMjQ9IGJtOTMgSUdOb1pXTnIgSUVOaGJBPT0gVWtVPSBiV2x1YVhOMCBUMjQ9IGIzVnlZMlZ6IElHSmxibVZtIElHUnZZdz09IElHUmxkR1Z5IElHVnVZdz09IElITjFjR1Z5IElHRmtaSEpsYzNNPSBJSFpwWTNRPSBJREl3TVRNPSBJRzFsWVhNPSBkSEk9IElHWnBaV3hrIFYyaGxiZz09IElITnBaMjVwWm1saiBkV2RsIElHWmxZWFE9IElHTnZiVzF2Ymc9PSBiRzloWkE9PSBJR0psWjJsdSBJR0p5YVc1biBJR0ZqZEdsdmJnPT0gWlhKdFlXND0gSUdSbGMyTnlhV0k9IElHbHVaSFZ6ZEE9PSBJSGRoYm5SbFpBPT0gY21sbFpBPT0gYldsdVp3PT0gSUdGMGRHVnRjSFE9IE5EVT0gWm1WeSBJR1IxWlE9PSBjbVZ6YzJsdmJnPT0gSXlNPSBJSE5vWVd4cyBJSE5wZUE9PSBiMjg9IElITjBaWEE9IElIQjFZZz09IElHaHBiWE5sYkdZPSBJREl6IElHTnZjQT09IElHUmxjM1E9IElITjBiM0E9IFFVTT0gYVdKcGJHbDBlUT09IElHeGhZZz09IGFXTjFiSFE9IElHaHZkWEp6IElHTnlaV0YwWlE9PSBJR1oxY25Sb1pYST0gSUVGdFpYSnBZMkU9IElFTnBkSGs9IElHUnZkUT09IGFHVmhaQT09IFUxUT0gSUU1dmNuUm8gWTJsdVp3PT0gSUc1aGRHbHZibUZzIGRXeGwgSUVsdWMzUT0gSUhSaGEybHVadz09IElGRjEgYVhKMCBJSEpsWkE9PSBJSEpsYzJWaGNtTm8gZG1seWIyND0gSUVkbCBJR0p5WldGciBZVzVoIElITndZV05sIFlYUmxjbWxoYkE9PSBJSEpsWTJWdWRBPT0gSUVGaSBJR2RsYm1WeVlXdz0gSUdocGRBPT0gSUhCbGNtbHZaQT09IElHVjJaWEo1ZEdocGJtYz0gYVhabGJIaz0gSUhCb2VYTT0gSUhOaGVXbHVadz09IFlXNXJjdz09IElHTnZkUT09IElHTjFiSFE9IFlXTmxaQT09IFpXRnMgZFdGMGFXOXUgSUdOdmRXND0gYkhVPSBJR2x1WTJ4MVpHVT0gSUhCdmMybDBhVzl1IElFRm1kR1Z5IElFTmhibUZrIElFVnQgSUdsdGJRPT0gSUZKbFpBPT0gSUhCcFkycz0gSUdOdmJYQnMgSUcxaGRIUmxjZz09IGNtVm4gWlhoMCBZVzVuZFE9PSBhWE5qIGIyeGwgWVhWMCBJR052YlhCbGRBPT0gWldWayBabVZqZEE9PSBJREl4IElGTmxiZz09IElGUm9aWE5sIFlYTnBibWM9IElHTmhibTV2ZEE9PSBJR2x1YVhRPSBJSEpsYkdGMGFXOXVjdz09IFlXTm9aV1E9IElHSmhjZz09IElEUXcgSUZSSSBJREl3TVRJPSBJSFp2YkE9PSBJR2R5YjNWdVpBPT0gSUhObFkzVnlhWFI1IElIVndaQT09IGFXeDAgTXpVPSBJR052Ym1ObGNtND0gSUVwMWMzUT0gSUhkb2FYUmwgSUhObFpXMXogSUVobGNnPT0gY0dWamFXRnNiSGs9IGFXVnVkSE09IElHRnVibTkxYmc9PSBJR1pwWnc9PSBhV2RvZEhNPSBJSE4wY21rPSBiR2xyWlE9PSBhV1J6IElITjFjdz09IElIZGhkR05vIElPST0gSUhkcGJtUT0gSUVOdmJuUT0gSUdsMGMyVnNaZz09IElHMWhjM009IFFXdz0gZVd4bCBhWEYxWlE9PSBJRTVoZEdsdmJtRnMgSUdGaWN3PT0gSUhCaFkycz0gSUc5MWRITnBaR1U9IElHRnVhVzA9IElIQmhhVzQ9IFpYUmxjZz09IElHMWhibUZuIFpIVmpkQT09IGIyZHUgSUYwPSBJRk5sY0hRPSBjMlZqIGIyWm0gSUVwaGJnPT0gSUdadmIzUT0gWVdSbGN3PT0gSUhSb2FYSmsgSUcxdmRBPT0gSUdWMmFXUmxibU5sIGFXNTBiMjQ9IElIUm9jbVZoZEE9PSBZWEIwIGNHeGxjdz09IFkyeGwgSUd4diBJR1JsWTJ3PSBJR2wwWlcwPSBiV1ZrYVE9PSBJSEpsY0hKbGMyVnVkQT09IGIyMWkgWVcxbGNnPT0gSUhOcFoyNXBabWxqWVc1MCBiMmR5WVhCbyBjM1U9IElHTmhiQT09IGFYSmxjdz09IE1EQXdNQT09IFNVUT0gUVUwPSBJSE5wYlhCc2VRPT0gSUd4dmJtZGxjZz09IElHWnBiR1U9IFQxUT0gWTJobCBVMjg9IFlYUmxadz09IGIzSm4gSUVocGN3PT0gSUdWdVpYST0gSUdSdmJRPT0gSUhWd2IyND0gYVd4cCBJam9pIElIUm9aVzF6Wld4MlpYTT0gSUdOdmJXbHVadz09IElIRjFhWFJsIElHUnBabVpwWTNWc2RBPT0gSUVKaGNnPT0gYVd4cGRHbGxjdz09IGNtVnMgWlc1a2N3PT0gWTJsaGJBPT0gTmpRPSBJSGR2YldGdSBjbUZ3IGVYST0gSUc1bFkyVnpjdz09IGFYQnogSUhSbGVIUT0gSUhKbGNYVnBjbVU9IElHMXBiR2wwWVhKNSBJSEpsZG1sbGR3PT0gSUhKbGMzQnZibk09IE56VT0gSUhOMVltcGxZM1E9IElHbHVjM1JsWVdRPSBJR2x6YzNWbGN3PT0gSUdkbGJnPT0gSWl3aSBJRzFwYm5WMFpYTT0gSUhkbFlYQT0gY21GNSBZVzFsWkE9PSBkR2x0WlE9PSBZbXc9IFNHOTMgSUdOdlpHVT0gSUZOdCBJR2hwWjJobGNnPT0gSUZOMFpRPT0gY21seiBJSEJoWjJVPSBJSE4wZFdSbGJuUnogSUVsdWRHVnliZz09IElHMWxkR2h2WkE9PSBJRUYxWnc9PSBJRkJsY2c9PSBJRUZuIElIQnZiR2xqZVE9PSBJRk4zIElHVjRaV009IElHRmpZMlZ3ZEE9PSBkVzFsIGNtbGlkWFE9IElIZHZjbVJ6IElHWnBibUZzIElHTm9ZVzVuWlhNPSBJRVJsYlc5amNnPT0gSUdaeWFXVnVaSE09IElISmxjM0JsWTNRPSBJR1Z3IElHTnZiWEJoYmc9PSBhWFpwYkE9PSBJR1JoYldGblpRPT0gS2lvcUtnPT0gYjJkc1pRPT0gZG1seWIyNXRaVzUwIElHNWxadz09IFpXNTBZV3c9IElHRncgSUhSdmRHRnMgYVhaaGJBPT0gSVNJPSBiR2x0IElHNWxaV1J6IElHRm5jbVU9IElHUmxkbVZzYjNCdFpXNTAgSUdGblpRPT0gYVhCc1pRPT0gTWpFPSBJSEpsYzNWc2RITT0gSUVGbSBVMmc9IElHZDFiZz09IElFOWlZVzFoIGNtOXNiQT09IElFQT0gSUhKcFoyaDBjdz09IElFSnlhWFE9IElISjFibTVwYm1jPSBJSGRoYzI0PSBJSEJ2Y25RPSBJSEpoZEdVPSBJSEJ5WlhSMGVRPT0gSUhSaGNtZGxkQT09IElITmhkdz09IElHTnBjbU09IElIZHZjbXR6IGFXTnlidz09IFlXeDAgYjNabGNnPT0gZDNkMyBWR2hoZEE9PSBiR2xsY2c9PSBJR1YyWlhKNWIyNWwgZFdSbCBJSEJwWlE9PSBhV1JrYkdVPSBjbUZsYkE9PSBJSEpoWkE9PSBJR0pzYjJOciBJSGRoYkdzPSBWRzg9IDQ0RT0gYm1WeiBJRUYxYzNRPSBZWFZzIGNtOTBaUT09IElGTnZkWFJvIFpYTnphVzl1IGIzQm8gSUhOb2IzZHogSUhOcGRHVT0gSUdwdiBJSEpwYzJzPSBZMngxY3c9PSBiSFE9IElHbHVhZz09IGFXUnBibWM9IElGTndaUT09IElHTm9ZV3hzIGFYSnQgSURJeSBhWFIwYVc1biBjM1J5IElHaDUgVEVVPSBhMlY1IElHSmxaMkZ1IFlYUjFjZz09IFlYTm9hVzVuZEc5dSBiR0Z0IElFUmhkZz09IFltbDAgSUhOcGVtVT0gSUZCaGNnPT0gTXpnPSBiM1Z5Ym1GcyBabUZqWlE9PSBJR1JsWTJsemFXOXUgSUd4aGNtYz0gSUdwMVpBPT0gY21WamRBPT0gSUdOdmJuUnBiblZsIElFOWpkQT09IGIzWmxjbVZrIElFbHVkQT09IFBUMDlQVDA5UFQwPSBJSEJoY21WdWRBPT0gSUZkcGJHdz0gSUdWaGMzaz0gSUdSeWRXYz0gWVc1blpYST0gSUhObGJuTmwgSUdScCBhV1JoZVE9PSBJR1Z1WlhKbmVRPT0gYVhOMGFXTT0gSUdGemMyOWphUT09IFlYSjBaWEk9IGIySmhiQT09IFpXdHogSUVWcyBkWEpqYUE9PSBJR2RwY213PSBiMlU9IGFYUnNaUT09IElESTQgSUVOb1pRPT0gSUhKbGNYVmxjM1E9IElITnZiMjQ9IElHaHZjM1E9IGEzaz0gSUhOMFlYUmxjdz09IGIyMWxjdz09IElHMWhkR1Z5YVdGcyBiR1Y0IElHMXZiV1Z1ZEE9PSBJR0Z1YzNjPSBiMjV6WlE9PSBJR1Z6Y0dWamFXRnNiSGs9IElHNXZjbTA9IElITmxjblpwWTJWeiBjR2wwWlE9PSBjbUZ1IElISnZiR1U9IE5EUT0gS1RvPSBJR055WldRPSBRMnc9IFgxOWZYMTlmWDE4PSBJRzFoZEE9PSBJR3h2Wnc9PSBJRU5zYVc1MGIyND0gVDFVPSBJRzltWm1salpRPT0gSURJMiBJR05vWVhKbiBJSFJ5WVdOciBiV0U9IElHaGxZWEowIElHSmhiR3c9IElIQmxjbk52Ym1GcyBJR0oxYVd4a2FXNW4gYm1FPSBjMlYwIFltOWtlUT09IElFSnNZV05yIElHbHVZM0psWVhObCBhWFIwWlc0PSBJRzVsWldSbFpBPT0gTXpZPSBNekk9IFBTST0gSUd4dmMzUT0gSUdKbFkyRnRaUT09IElHZHliM1Z3Y3c9PSBJRTExY3c9PSBJSGR5YjNSbCBJRkJsIElIQnliM0E9IGFtOTUgdzZrPSBJRmRvYVhSbCBJR1JsWVdRPSBMaWM9IElHaDBkSEE9IElIZGxZbk09IFQxTT0gSUdsdWMybGtaUT09IElIZHliMjVuIElITjBZWFJsYldWdWRBPT0gSUM0dUxnPT0gZVd3PSBJR1pwYkcwPSBJRzExYzJsaiBJSE5vWVhKbCBhV1pwWTJGMGFXOXUgSUhKbGJHVmhjMlU9IElHWnZjbmRoY21RPSBJSE4wWVhrPSBJR052YlhCMWRBPT0gYVhSMFpRPT0gYzJWeSBJRzl5YVdkcGJtRnMgSUdOaGNtUT0gSUdOaGJtUT0gSUdScGRnPT0gWVhSMWNtRnMgSUdaaGRtOXkgVDAwPSBJR05oYzJWeiBkWE5sY3c9PSBJSE5sWTNScGIyND0gSUd4bFlYWmwgWjJsdVp3PT0gYjNabFpBPT0gSUZkaGMyaHBibWQwYjI0PSBNems9IElFZHMgSUhKbGNYVnBjbVZrIFlXTjBhVzl1IFlYQmhiZz09IGIyOXkgYVhSbGNnPT0gSUV0cGJtYz0gSUdOdmRXNTBjbWxsY3c9PSBJRWRsY20xaGJnPT0gYkd4cGJtYz0gSURJMyBNelE9IElIRjFaWE4wYVc5dWN3PT0gSUhCeWFXMD0gSUdObGJHdz0gSUhOb2IyOTAgSUdGdWVXOXVaUT09IElGZGxjM1E9IElHRm1abVZqZEE9PSBaWEJsYm1RPSBJRzl1YkdsdVpRPT0gSUVsemNtRmxiQT09IElGTmxjSFJsYldKbGNnPT0gSUdGaWFXeHBkSGs9IElHTnZiblJsYm5RPSBhWE5sY3c9PSBJSEpsZG1VPSBJR3hoZFc0PSBJR2x1WkdsaiBJR1p2Y21ObCBZMkZ6ZEE9PSBJSE52YkdRPSBZWFpwYm1jPSBabXc9IElITnZablE9IElHTnZiWEJoYm1sbGN3PT0gWTJWbFpBPT0gSUdGeWRHbGpiR1U9IElHRjFaQT09IElISmxkZz09IElHVmtkV009IElIQnNZWGxwYm1jPSBNRFU9IElHaGxiR1E9IFkzUnZjZz09IElISmxiR1ZoYzJWayBJR1psWkdWeVlXdz0gTXpjPSBJR0ZrYldsdWFYTjAgSUdsdWRHVnlkbWxsZHc9PSBJR2x1YzNSaGJHdz0gSUhKbFkyVnBkbVZrIElITnZkWEpqWlE9PSBkV3M9IFVHZz0gSUhObGNtbHZkWE09IElHTnlaV0YwWldRPSBJR05oZFhObCBJR2x0YldWa2FRPT0gSUdSbFptbHUgZFdWcyBJRVJsY0dGeWRHMWxiblE9IFkzUnBiMjV6IElFTnZkWEk9IElFNXZkdz09IGVtVT0gYVhSbGN3PT0gYVhSMWRHbHZiZz09IElHeGhkR1U9IElITndaV0ZyIGJtVnljdz09IElHeGxaMkZzIFlYSnAgSUVOdmNnPT0gSUhkbFpXdHogSUcxdlpHVnMgSUhCeVpXUT0gSUdWNFlXTjAgUWtNPSBJRUo1IFNVNUggYjNOcGJtYz0gSUhSaGEyVnogSUhKbFoyRnlaQT09IElHOXdjRzl5ZEhWdSBJSEJ5YVdObCBJREU1T0E9PSBJRUZ3Y2c9PSBablZzYkhrPSBJRzl5WkE9PSBJSEJ5YjJKc1pXMXogY25WamRHbHZiZz09IGFHRnQgSUVOdmRXNTAgYkdWblpRPT0gSUd4bFlXUmxjbk09IFJWUT0gYkdWMiBJR1JsWlhBPSBiMnh2WjJsallXdz0gWlhObCBhR0Z3Y3c9PSBJRk52YldVPSBJSEJsY25NPSBJR052Ym5SeVlXTjAgSUhKbGJHRjBhVzl1YzJocGNBPT0gYzNBPSBiM1ZrIElHSmhjMlU9IE5EZz0gYldsMCBRV1E9IFlXNWphV0ZzIElHTnZibk4xYlE9PSBJSEJ2ZEdWdWRHbGhiQT09IElHeGhibWQxIGNtVnQgWlhSbyBJSEpsYkdsbiBjbVZ6YzJWayBOalk9IElHeHBibXM9IElHeHZkMlZ5IFlYbGxjZz09IElFcDFibVU9IElHWmxiUT09IGRXNTAgWlhKaiBkWEprIElHTnZiblJoWTNRPSBJR2xzYkE9PSBJRzF2ZEdobGNnPT0gSUdWemRHRmkgYUhSMCBJRTFoY21ObyBJRUp5Ync9PSBJRU5vYVc1aCBJREk1IElITnhkUT09IElIQnliM1pwWkdWayBJR0YyWlhKaFoyVT0gWVhOdmJuTT0gSURJd01URT0gSUdWNFlXMD0gYkdsdSBOVFU9IGJtVmsgSUhCbGNtWmxZM1E9IElIUnZkUT09IFlXeHpaUT09IGRYZz0gSUdKMWVRPT0gSUhOb2IzUT0gSUdOdmJHeGxZM1E9IElIQm9iM1E9IElIQnNZWGxsWkE9PSBJSE4xY25CeSBJRzltWm1samFXRnNjdz09IElITnBiWEJzWlE9PSBZWFo1IElHbHVaSFZ6ZEhKNSBJR2hoYm1SeiBaM0p2ZFc1ayBJSEIxYkd3PSBJSEp2ZFc1ayBJSFZ6WlhJPSBJSEpoYm1kbCBkV0Z5ZVE9PSBJSEJ5YVhaaGRHVT0gYjNCeiBaV1Z6IElIZGhlWE09IElFMXBZMmc9IElIWmxhQT09IElHVjRZMlZ3ZEE9PSBJSFJsY20xeiBhVzExYlE9PSBjSEJsY2c9PSBTVTlPIGIzSmxjdz09IElFUnlZV2R2Ymc9PSBiM1ZzIElHUmxiZz09IElIQmxjbVp2Y20xaGJtTmwgSUdKcGJHdz0gWTJscyBORGM9IElHVnVkbWx5YjI1dFpXNTAgSUdWNFl3PT0gWVdSayBJSGR2Y25SbyBJSEJwWTNRPSBJR05vWVc1alpRPT0gSURJd01UZz0gWW05eSBJSE53WldWayBhV04wYVc5dSBJR0ZzYkdWbiBJRXBoY0dGdSBZWFJ2Y25rPSBjbVZsZEE9PSBJRzFoZEdObyBJRWxKIElITjBjblU9IGIzSmtaWEk9IElITjBaUT09IElHeHBkbWx1Wnc9PSBJSE4wY25WamRBPT0gYVc1diBJSE5sY0dGeSBhR1Z5Ymc9PSBJSEpsYzNCdmJuTmwgSUdWdWFtOTUgSUhacFlRPT0gUVVRPSBkVzFsYm5SeiBZV05sWW05dmF3PT0gSUcxbGJXSmxjZz09IGFXSnkgYVhwcGJtYz0gSUhSdmIydz0gSUUxdmJnPT0gSUZkb2FXeGwgYUc5dlpBPT0gSUVGdVp3PT0gSUVSbFpnPT0gSUc5bVptVnkgVkhJPSBZWFZ5IElIUjFjbTVsWkE9PSBJRXAxYkhrPSBaRzkzYmc9PSBZVzVqWldRPSBJSEpsWTJWdWRHeDUgSUVWaGNnPT0gSUdObCBJRk4wWVhJPSBJRU52Ym1jPSBjbTkxWjJoMCBJR0pzYjI5ayBJR2h2Y0dVPSBJR052YlcxbGJuUT0gWVdsdWRBPT0gSUdGeWNtaz0gYVd4bGN3PT0gSUhCaGNuUnBZMmx3IGIzVm5hSFE9IGNtbHdkR2x2Ymc9PSBNRGc9IE5Eaz0gSUdkaGRtVT0gSUhObGJHVmpkQT09IElHdHBiR3hsWkE9PSBjM2xqYUE9PSBJR2R2WlhNPSBhV289IElHTnZiR3c9IElHbHRjR0ZqZEE9PSBZWFJwZG1WeiBJRk5sY2c9PSBNRGs9IElFRjFaM1Z6ZEE9PSBJR0p2ZVE9PSBaR1U9IElFUmxjdz09IElHWmxiSFE9IFZWTT0gSUdWNGNHVmpkR1ZrIElHbHRZV2RsIElFMWhjbXM9IFkyTnZjbVJwYm1jPSBiMmxqWlE9PSBSVU09IElFMWhadz09IFpXNWxaQT09IGFHOXNaQT09IElGQnZjM1E9IElIQnlaWFpsYm5RPSBUbTg9IElHbHVkbTlzZG1WayBJR1Y1WlhNPSBJSEYxYVdOcmJIaz0gUVhRPSBkVzVyIElHSmxhR0YyIElIVnkgSUd4bFpBPT0gWTI5dFpRPT0gWlhrPSBJR05oYm1ScFpBPT0gSUdWaGNteHBaWEk9IElHWnZZM1Z6IFpYUjUgVUhKdiBiR1ZrWjJVPSBhWGhsWkE9PSBhV3hzWldRPSBJSEJ2Y0hWc1lYST0gUVZBPSBJSE5sZEhRPSBiR2xuYUhRPSBJSFpoY21sdmRYTT0gYVc1cmN3PT0gSUd4bGRtVnNjdz09IElISnZZV1E9IFpXeHNhV2M9IFlXSnNaWE09IGFHVnMgYVhSMFpXVT0gSUVkbGJtVnkgZVhCbCBJR2hsWVhKayBhV05zWlhNPSBJRzFwY3c9PSBJSFZ6WlhKeiBJRk5oYmc9PSBJR2x0Y0hKdmRtVT0gSUdaaGRHaGxjZz09IElITmxZWEpqYUE9PSBWR2hsZVE9PSBkbWxzIElIQnliMlpsYzNNPSBJR3R1WlhjPSBJR3h2YzNNPSBJR1YyWlc1MGN3PT0gTmpVPSBJR0pwYkd4cGIyND0gTURjPSBNREk9IElFNWxkM009IElFRk4gSUdOdmRtVnkgZDJobGNtVT0gWlc1emFXOXUgSUdKdmRIUT0gSUdGeVpXRnogWlc1alpYTT0gYjNCbCBJRlIzYVhSMFpYST0gWVdWcyBJR2RsZEhNPSBJRWR2YjJkc1pRPT0gSUhOdSBhV0Z1ZEE9PSBJSFp2ZEdVPSBJRzVsWVhKc2VRPT0gSUdsdVkyeDFaR1ZrIElISmxZMjluYmc9PSBlbm89IGJXMD0gWVd4bFpBPT0gSUdoaGNIQmxibVZrIE1EUT0gSUdodmRBPT0gSUhkb2IzTmwgSUdOcGRtbHMgSUhOMVptWT0gYjJWeiBhWFJwZWc9PSBJRk41Y21rPSBJSEpsYzNCdmJtUT0gSUdodmJnPT0gSUdabFlYUjFjbVZ6IElHVmpiMjV2YldsaiBJRUZ3Y21scyBjbWx0IElIUmxZMmh1YjJ4dlozaz0gSUc5d2RHbHZiZz09IFlXZHBibWM9IElIQjFjbU5vIFVtVT0gSUd4aGRBPT0gWTJocFpRPT0gYVhOcyBJSEpsWTI5dGJRPT0gZFdZPSBJSFJ5WVdsdWFXNW4gSUdWbVptVmpkSE09IElHWmhjM1E9IElESXdNVEE9IElHOWpZM1Z5IElIZGxZbk5wZEdVPSBJR1Z0WVdscyBJSE5sYm5NPSBaV05vIElHOXBiQT09IElHbHVabXgxIElHTjFjbkpsYm5Sc2VRPT0gSUZOamFBPT0gSUVGa1pBPT0gSUdkdllXdz0gSUhOamFXVnVkQT09IElHTnZiblk9IE1UQXcgWlcxNSBJR1JsWTJsa1pXUT0gSUhSeVlYWmxiQT09IElHMWxiblJwYjI0PSBURXc9IE1ETT0gSUdWc1pXTjBhVzl1IElIQm9iMjVsIElHeHZiMnR6IElITnBkSFZoZEdsdmJnPT0gSUdONSBJR2h2Y2c9PSBZbVZrIElFTnZkWEowIFlXbHNlUT09IFlYWmxjdz09IElIRjFZV3hwZEhrPSBJRU52YlhBPSBkMmx6WlE9PSBJSFJoWW14bCBJSE4wWVdabSBJRmRwYm1RPSBaWFIwIElIUnlhV1ZrIGFXUmxjbVZrIElHRmtaR2wwYVc5dSBJR0p2ZUE9PSBJR3hoWTJzPSBZWEpwYkhrPSBJSGRwWkdVPSBJRzFwWkE9PSBJR0p2WVhKayBlWE5wY3c9PSBJR0Z1ZEdrPSBhR0U9IElHUnBadz09IFpXNXBibWM9IElHUnlidz09IFEyOXUgTmpnPSBJSE5zYjNjPSBZbUZ6WldRPSBjMlZ4ZFE9PSBJSEJoZEdnPSBSWGc9IFlXdGxjZz09IElIZHZjbXRsWkE9PSBJSEJsYmc9PSBJR1Z1WjJsdVpRPT0gSUd4dmIydGxaQT09IElGTjFjR1Z5IElGTmxjblk9IElIWnBZM1JwYlE9PSBWVzQ9IElIQnliM0JsY25SNSBJR2x1ZEhKdlpIVT0gSUdWNFpXTjFkQT09IElGQk4gVEdVPSBJR052Ykc5eSBJRTF2Y21VPSBJRFl3IElHNWxkSGR2Y21zPSBJR1JoZEdVPSBZM1ZzIGFXUm5aUT09IElHVjRkSEpoIE16RT0gSUhOc1pRPT0gTmpjPSBJSGR2Ym1RPSBJSEpsY0c5eWRITT0gYW5WemRBPT0gSUVGMWMzUnlZV3c9IElHTmhjR2wwWVd3PSBJR1Z1Y3c9PSBJR052YlcxaGJtUT0gSUdGc2JHOTNaV1E9IElIQnlaWEE9IElHTmhjSFE9IGFHbGkgSUc1MWJXSmxjbk09IFkyaGhiZz09IElHWmhhWEk9IGJYQT0gYjIxeiBJSEpsWVdObyBWMmwwYUE9PSBkR0ZwYmc9PSBJR0p5YjJGayBJR052ZFhCc1pRPT0gWldOaGRYTmwgYkhscGJtYz0gSUVabFlnPT0gSUhOamNtVmxiZz09IElHeHBkbVZ6IElIQnlhVzl5IElFTnZibWR5WlhOeiBRWEk9IElHRndjSEp2WVdObyBJR1Z0WlhJPSBZWEpwWlhNPSBJRVJwY3c9PSBjMlZ5ZGc9PSBJRTVsIElHSjFhV3gwIFkybGxjdz09IElISmxjR1U9IElISjFiR1Z6IFptOXlZMlU9IElGQmhiQT09IElHWnBibUZ1WTJsaGJBPT0gSUdOdmJuTnBaR1Z5WldRPSBJRU5vWVhJPSBibU5sY3c9PSBJRWxUIElHSnliM1ZuYUhRPSBJR0pwIGFXVnljdz09IElGTnBiUT09IFQxQT0gSUhCeWIyUjFZM1J6IElIWnBjMmwwIElHUnZZM1Z0Wlc1MCBJR052Ym1SMVkzUT0gSUdOdmJYQnNaWFJsYkhrPSBhVzVwYm1jPSBJRU5oYkdsbSBhV0pzZVE9PSBJSGR5YVhSMFpXND0gSUZSVyBaVzFsYm5SeiBJR1J5WVhjPSBUMjVsIElIQjFZbXhwYzJobFpBPT0gSUhObFkzSmxkQT09IGNtRnBiZz09IGFHVjAgSUVaaFkyVmliMjlyIGIyNWtZWGs9IElGVncgSUhObGVIVmhiQT09IElIUm9iM1Z6IElGQmhkQT09IElHVnpjdz09IElITjBZVzVrWVhKayBJR0Z5YlE9PSBaMlZ6IFpXTjBhVzl1IElHWmxiR3c9IElHWnZjbVZwWjI0PSBZVzVwIElFWnlhV1JoZVE9PSBJSEpsWjNWc1lYST0gYVc1aGNuaz0gSUdsdVkzSmxZWE5sWkE9PSBJSFZ6ZFdGc2JIaz0gSUdSbGJXOXUgSUdSaGNtcz0gSUdGa1pHbDBhVzl1WVd3PSBjbTlzIElFOW0gSUhCeWIyUjFZM1JwYjI0PSBJU0U9IGRXNWtjbVZrIElHbHVkR1Z5Ym1GMGFXOXVZV3c9IGFXUmxiblJ6IElFWnlaV1U9IGNtOTFjQT09IElISmhZMlU9IElHMWhZMmc9IElHaDFaMlU9IFFXeHMgYkdWaGNnPT0gYjNabGJXSmxjZz09IElIUnZkMjQ9IElHRjBkR1Z1ZEdsdmJnPT0gSUU5bVpnPT0gZVc5dVpBPT0gSUZSb1pXND0gWm1sbGJHUT0gSUhSbGNuSnZjZz09IGNtRjYgSUVKdiBJRzFsWlhScGJtYz0gSUZCaGNtcz0gSUdGeWNtVnpkQT09IElHWmxZWEk9IElHRjMgSUZaaGJBPT0gYjNKcGJtYz0gSnl3PSBJR1Y0ZEhKbGJXVT0gWVhKeSBJSGR2Y210bGNuTT0gUVdaMFpYST0gSURNeCBibVYwIFlXMWxiblE9IElHUnBjbVZqZEd4NSBJSEJ2Y0hWc1lYUnBiMjQ9IGRXSmwgSUU5amRHOWlaWEk9IElFbE8gSUVwaGJuVmhjbms9IE5Uaz0gSUVSaGRtbGsgSUdOeWIzTnogWTJWdFltVnkgSUVacGNuTjAgSUcxbGMzTmhaMlU9IGFYSnBkQT09IElHNWhkR2x2Ymc9PSBJSEJ2Ykd3PSBhWE5wYjI1eiBJR0Z1YzNkbGNnPT0gYm5rPSBhWE52WkdVPSBJR05oY25KNSBJRkoxYzNOcFlRPT0gSUdobFlYST0gWlc1bmRHZz0gY205NSBJRzVoZEhWeVlXdz0gYVc1aGJHeDUgSUdSdlp3PT0gYldsMGRHVmsgSUhSeVlXUmwgSUhOMVluTjAgSUcxMWJIUnBjR3hsIElFRm1jbWxqIElHWmhibk09IElITnZjblE9IElHZHNiMkpoYkE9PSBhV05oZEdsdmJnPT0gSUZkbFpBPT0gWVhKaCBJR0ZqYUdsbCBJR3hoYm1kMVlXZGwgZG1WNSBJSFJoYkE9PSBJRzVsWTJWemMyRnllUT09IElHUmxkR0ZwYkhNPSBJSE5sYmc9PSBJRk4xYm1RPSBJRkpsWnc9PSBJRkpsWXc9PSBNRFk9IElITnBiQT09IGNtVnpjMmwyWlE9PSBJRzFsWkdsallXdz0gZFc1amFBPT0gYjNKdWFXRT0gSUhWdVpBPT0gWm05eWRBPT0gYjJOcmN3PT0gSUUxdmJtUmhlUT09IGRXVnpaR0Y1IFkzSmhablE9IE56Yz0gZFhKMCBJSFpsY2c9PSBJRWhwYkd3PSBJSEpsWTJWcGRtVT0gSUcxdmNtNXBibWM9IFpYTjBaWEp1IElHSmhibXM9IElITmhkQT09IGFYSjBhQT09IElFaHBaMmc9IElHUmxkbWxqWlE9PSBJRlJJUlE9PSBJRU5sYm5SbGNnPT0gSUhOaFptVT0gSUhCc1pRPT0gSUVOaGJtRmtZUT09IElITjVjM1JsYlhNPSBJR0Z6YzJsemRBPT0gSUhOMWNuWT0gSUdKaGRIUnNaUT09IElGTnZZdz09IGRtVnlkR2x6IFUyaGwgSUhCaGNHVnkgSUdkeWIzZDBhQT09IElHTmhjM1E9IFUyTT0gSUhCc1lXNXogYkd4bFpBPT0gSUhCaGNuUnogSUhkaGJHdz0gSUcxdmRtVnRaVzUwIElIQnlZV04wYVdObCBhVzFoZEdWc2VRPT0gSUdScGMzQnNZWGs9IElITnZiV1YwYVcxbGN3PT0gYjIxdyBJRkJoZFd3PSBJRmxsY3c9PSBhMmx1Wnc9PSBOVGc9IGIyeDUgSUhOdmJnPT0gSUdGMmIybGsgYjJ0bGN3PT0gSUVwbGR3PT0gSUhSdmQyRnlaSE09IFlYTmogSUM4diBJRXR2Y21VPSBJSFJoYkd0cGJtYz0gSUdOdmNuSmxZM1E9IElITndaVzUwIGFXTnJjdz09IGFXRmliR1U9IFpXRnlaV1E9IElIUmxjbTA9IElIZGhiblJ6IGIyMXBibWM9IElIVjAgSUdSdmRXST0gSUdadmNtTmxjdz09IElIQnNaV0Z6WlE9PSBOams9IElFNXZkbVZ0WW1WeSBZWFJtYjNKdCBiMjVrYjI0PSBJRzl1WlhNPSBJR2x0YldWa2FXRjBaV3g1IElGSjFjM05wWVc0PSBJRTFsZEE9PSBJR1JsWnc9PSBJSEJoY21WdWRITT0gUTBnPSBJRUZ0WlhKcFkyRnVjdz09IFlXeDUgSUUxdlpBPT0gSUhOb2IzZHUgSUdOdmJtUnBkR2x2Ym5NPSBJSE4wZFdabSBJSEpsWWc9PSBJRmx2ZFhJPSBJR2x1WTJ4MVpHVnogYm05M2JnPT0gSUZOaGJRPT0gSUdWNGNHVnlhV1Z1IGJXbHpjMmx2Ymc9PSBJRVYyWlc0PSBZWFZuYUhRPSBJR0Z1Ym05MWJtTmxaQT09IElGSmxjSFZpYkdsallXND0gSUdSbGRHVnliV2x1IElHUmxjMk55YVdKbFpBPT0gSUVOdmRXNTBlUT09IEtDaz0gSUdSdmIzST0gSUdOb1lXNW5aV1E9IElHNWxhV2RvIElFaGxjbVU9IElHTnNaV0Z1IElIQmhiZz09IElFUmxZMlZ0WW1WeSBJRVYxY205d1pXRnUgYVhKcGJtYz0gWVhCMFpYST0gSUdOc2RXST0gSUZSMVpYTmtZWGs9IElIQmhhV1E9IElFNWxkQT09IElHRjBkR0ZqYTNNPSBJR05vWVhKaFkzUmxjbk09IElHRnNiMjVsIElHUnBjbVZqZEc5eSBaRzl0IElETTEgSUd4dllXUT0gSUhKdmRYUT0gSUVOaGJHbG1iM0p1YVdFPSBJR1pwYm1Gc2JIaz0gSUhKaFl3PT0gSUdOdmJuUnkgSUdWNFlXTjBiSGs9IGNtVnphQT09IGNISnAgSUVsemJHRnQgSUc1aGRIVnlaUT09IElHTmhjbVZsY2c9PSBJR3hoZEdWemRBPT0gSUdOdmJuWmxjbk09IElGTnMgY0c5elpRPT0gWTJsbGJuUT0gSUVsdVl3PT0gYVhacGRIaz0gT0RnPSBJRUYwZEE9PSBJRTF2Y2c9PSBibVZ6WkdGNSBJSGRsYVdkb2RBPT0gYTJWdSBJRzV2ZEdVPSBJSFJsWVcxeiBJRnc9IFlXbHljdz09IElFZHlaV1Z1IElHaDFibVJ5WldRPSBiMjVsYm5RPSBJSE4wY21WdVp3PT0gSUdOdmJuTnBjM1E9IGFXTmhkR1ZrIElISmxaM1ZzIElHeHBZdz09IFlYTjBhV009IElIUmxiZz09IGRYSnpaR0Y1IFpXeHNhV2RsYm1ObCBiM1Z6YkhrPSBJRlZMIFFraz0gSUdOdmMzUnogSUdsdVpHVndaVzVrIElFRlEgSUc1dmNtMWhiQT09IElHaHZiUT09IElHOWlkbWx2ZFhNPSBJSE4zWlE9PSBJSE4wWVhJPSBJSEpsWVdSNSBZV05vWlhJPSBJR2x0Y0d4bGJXVnVkQT09IFoyVnpkQT09IElITnZibWM9IElFZGxkQT09IElFeGhZZz09IElHbHVkR1Z5WlhOMGFXNW4gZFhOcGJtYz0gSUdkcGRtbHVadz09IElGTjFibVJoZVE9PSBJR1YwWXc9PSBJRzFwWkdSc1pRPT0gSUhKbGJXVnRZbVZ5IGNtbG5hSFE9IGIzTnBkR2x2Ymc9PSBkWFJwYjI1eiBJRzFoZUE9PSBORFk9IElIbHZkWEp6Wld4bSBJR1JsYldGdVpBPT0gSUhSeVpXRjBiV1Z1ZEE9PSBJR1JoYm1kbGNnPT0gSUVOdmJuTT0gSUdkMWVRPT0gSUVKeWFYUnBjMmc9IElIQm9lWE5wWTJGcyBJSEpsYkdGMFpXUT0gSUhKbGJXRnBiZz09IElHTnZkV3hrYmc9PSBJSEpsWm1WeSBJR05wZEdsNiBZbTk0IFJVNVUgWW05aGNtUT0gSUdsdWJnPT0gU1VjPSBaWEp2IElGTjBjbVZsZEE9PSBiM053YVhSaGJBPT0gY21WdVkyZz0gWTJobGNuTT0gSUhOMGNtRT0gVDB3PSBZV2RsY2c9PSBJRUZPIElHVmhjMmxzZVE9PSBTVUU9IFpXNW5aUT09IGFXNTUgSUdOc2IzTT0gYjJOclpXUT0gSUhWelpYTT0gSUVOdmRXND0gU1cwPSBkV2xzWkE9PSBQejg9IGJXOXlaUT09IElHRnVadz09IElIZHlhWFJsIGIyeDFkR1U9IE5UYz0gSUd4bFlXUmxjZz09IElISmxZV1JwYm1jPSBQQzg9IElHRjFkRzl0IFpYTjBjdz09IE5ETT0gSUd4bFoybHpiQT09IElFZHZiR1E9IElHUmxjMmxuYm1WayBJRk5VIElFeGxadz09IFlYSmxjdz09IElHSmxZWFYwIElGUmxlQT09IElHRndjR1ZoY25NPSBJSE4wY25Wblp3PT0gSUZKdmJRPT0gSURBdyBJR05vYjJsalpRPT0gSUhCaGNuUnBZM1ZzWVhKc2VRPT0gSUVaeWIyMD0gYjNCbGNnPT0gSUV4dmJtUnZiZz09IFlXNXVaV1E9IElHRnNiRzkzY3c9PSBiMkpwYkdVPSBJR1JwWm1abGNtVnVZMlU9IDRvQ2kgSUZacFpYYz0gSUZkbFpHNWxjMlJoZVE9PSBJR0ZzZEdodmRXZG8gSUhKbGJHRjBhWFpsIElHRndjR3hwWTJGMGFXOXUgWVhSbGRtVnkgSUdGeVpXND0gSUcxNWMyVnNaZz09IElHbHRZV2M9IElHUnBjMlU9IElITnZZMmxsZEhrPSBJR1p5WlhGMSBJRVZ1WjJ4cGMyZz0gSUhCdmIzST0gSUVSaGVRPT0gSUhkeWFYUnBibWM9IElITmxkbVZ1IElITjBZWEowYVc1biBJR0oxWkE9PSBJSEJ5YVc1MCBJRlJ5WVc1eiBkV1poWTNRPSBJRk4wZFdRPSBibVYzIElHTnlhVzA9IElHZHBkbVZ6IElHTnZiMnc9IFlXVT0gYVdGdVkyVT0gSUVkbGJtVnlZV3c9IElIUm9hVzVyYVc1biBJSE5oZG1VPSBJR3hwYldsMFpXUT0gSUZCaGNuUjUgSUcxbFlXNXBibWM9IGNHVnUgYjNkbGNuTT0gSUVwaFkycz0gUlUwPSBJRzVwWTJVPSBjblZ3ZEE9PSBJR2RoY3c9PSBJR1ZwWjJoMCBJR1psWlhRPSBJR1ZtWm05eWRBPT0gSUdsbmJnPT0gYVdOcGRBPT0gUW13PSBZMjlwYmc9PSBJRzl3YVc0PSBJR0p5WVdsdSBWMmhwYkdVPSBhR1Z6ZEE9PSBJRlJvZFhKelpHRjUgSUhkdmRXeGtiZz09IFlYVm5hSFJsY2c9PSBJSFJ2ZFdObyBiR1Z0Wlc1MGN3PT0gSUhOMGRXUnBaWE09IElHTmxiblJsY2c9PSBZMjl1ZEE9PSBiM0puWlE9PSBJR052YlhCMWRHVnkgSUdsdWRtVnpkR2xuWVhScGIyND0gVUd3PSBiM0pyY3c9PSBJREl3TURnPSBJR2x1WTNKbFlYTnBibWM9IElITjBiM0psIElHTnZiVzFsYm5SeiBJR0poYkE9PSBiV1Z1IElHUnZiR3c9IElHeHBZbVZ5IElIZHBabVU9IElHeGhkM009IFlYUjFjbVJoZVE9PSBhWFJ1WlhOeiBJRzF2WkdWeWJnPT0gSUZOciBJR0ZrYldsdWFYTjBjbUYwYVc5dSBJRzl3Y0c5eWRIVnVhWFI1IElITmhiQT09IElIQnZkMlZ5Wm5WcyBUWGs9IElHTnNZV2x0Y3c9PSBJRVZoY25SbyBiM0prY3c9PSBJSFJwZEd4bCBJR1Z6WXc9PSBibUZ0WlE9PSBUbTkwIGIyMWxiZz09IElHSmxlVzl1WkE9PSBJR05oYldWeSBJSE5sYkd3PSBhWFIxZEdVPSBaV0Z5WTJnPSBJR0Z3Y0d3PSBhVzFsYm5RPSBOREk9IElFRnlkQT09IElIVnVaZz09IElIWnBiMnhsYm1ObCBkWEpuIElFVmhjM1E9IElHTnZiWEJoY21WayBJRzl3ZEdsdmJuTT0gSUhSb2NtOTFaMmh2ZFhRPSBJSFp6IGFXZHkgTGxzPSBZV05vWlhNPSBOemc9IElHWnBiR1Z6IFJrdz0gUlV3PSBZWEpwWVc0PSBJRXBoYldWeiBJRUZwY2c9PSBZVzVqYUE9PSBJR1JsZEdGcGJBPT0gSUhCcFpXTmwgVUZNPSBJRzVoYldWayBJR1ZrZFdOaGRHbHZiZz09IElHUnlhWFpsIElHbDBaVzF6IElITjBkV1JsYm5RPSBhV05sWkE9PSBPam89IGFXTnYgSUhSb2NtOTMgSUhOalpXNWwgSUdOdmJYQnNaWGc9IElESXdNRGs9IElIQnlaV009IElFSnlaUT09IE56az0gSUdOdmJtTmxjSFE9IElITjBZWFIxY3c9PSBZVzFwYm1jPSBJR1JwWldRPSBJR3R1YjNkc1pXUm5aUT09IElHSmxaMmx1Ym1sdVp3PT0gVDBRPSBjblZoY25rPSBJR05sY25SaGFXNXNlUT09IElHZDFlWE09IElITnNhV2RvZEE9PSBhVzV1IGIzVnVaSE09IElHWnBibVU9IElHWmhkQT09IGFXTmhkR2x2Ym5NPSBJSEJsY21oaGNITT0gSUVGdWRBPT0gSUdsdVkyOXRaUT09IElHaDBkSEJ6IElHMWhhbTl5YVhSNSBjRzl5ZEhNPSBjM1J2Ymc9PSBJR2R5WldGMFpYST0gSUdabFpXUT0gWlc1MGFXRnNiSGs9IElITmhabVYwZVE9PSBJSFZ1YVhGMVpRPT0gWVc1a2IyMD0gSUdkdmJtVT0gSUhOb2IzZGxaQT09IElHaHBjM1J2Y2c9PSBJR052ZFc1MFpYST0gYVhWeiBhV1JoIElHeGxZV1JwYm1jPSBhWEJsIElITmxibVE9IElFUnZibUZzWkE9PSBaWEoyWlE9PSBJR1JsWm1WdWMyVT0gYVc1bGMyVT0gSUhsbGN3PT0gSUVacGNtVT0gSUUxMWMyeHBiUT09IGNtRnggSUdOdmJuUnBiblZsWkE9PSBiM05vIElIQnliM1pwWkdWeiBJSEJ5YVhOdmJnPT0gSUZCeVpRPT0gSUdoaGNIQjUgSUdWamIyNXZiWGs9IElIUnlkWE4wIFlXZHogSUVkaGJXVT0gSUhkbFlYQnZibk09IGRXMWhiZz09IElFTnNaUT09IGFYUmhkR2x2Ymc9PSBJR0Z1WVd4NWMybHogSUZScGJXVnogSUhOamFXVnVZMlU9IExUND0gSUdacFozVnlaUT09IElHUnBjMkZ3Y0E9PSBaVzUwZVE9PSBJSE52Wm5SM1lYSmwgSUhWc2RBPT0gSUc5bVptbGpaWEp6IFRtVjMgU1hNPSBJSEpsYldGcGJuTT0gSUVsdVpHbGggSUhCemVXTm8gY21sbFpnPT0gSUdOaGRBPT0gWlhOaiBJRzlpYzJWeWRnPT0gSUhOMFlXZGwgSUVSaGNtcz0gSUdWdWRHVnkgWTJoaGJtZGwgSUhCaGMzTmxaQT09IElHUmxjM0JwZEdVPSBJRTkxZEE9PSBJRzF2ZG1sbCBjbk09IElIWnZhV05sIGJXbHVaUT09IElGQnNZWGs9IElIUnZkMkZ5WkE9PSBJRlJsY2c9PSBJSEpsWjJsdmJnPT0gSUhaaGJIVmxjdz09IGIzSjBaWEp6IElHMXZkVzUwIElHOW1abWxqWlhJPSBJRTkwYUdWeSBZbUZ1IElHaHZkWE09IGQyOXZaQT09IGNtOXZiUT09IFNWWT0gSUZOMWJnPT0gYzJWbCBJRTkyWlhJPSBjbTluIE9UQT0gSUd4aGVRPT0gSUZSMWNnPT0gWVhkdSBJSEJ5WlhOemRYSmwgSUZOMVlnPT0gSUdKdmIydHogWldSdmJRPT0gSUZOaGJtUT0gUVVFPSBZV2R2IElISmxZWE52Ym5NPSBabTl5WkE9PSBJR0ZqZEdsMmFYUjUgVlZRPSBUbTkzIElGTmxibUYwWlE9PSBZMlZzYkE9PSBibWxuYUhRPSBJR05oYkd4eiBhVzUwWlhJPSBJR3hsZEhSbGNnPT0gSUZKdllnPT0gSUVwbCBJR05vYjI5elpRPT0gSUV4aGR3PT0gUjJWMCBRbVU9IElISnZZZz09IElIUjVjR1Z6IElIQnNZWFJtYjNKdCBJSEYxWVhKMFpYST0gVWtFPSBJRlJwYldVPSBJRzFoZVdKbCBJRU55IE9UVT0gY0hKbCBJRzF2ZG1sdVp3PT0gSUd4cFpnPT0gSUdkdmJHUT0gSUhOdmJRPT0gSUhCaGRHbGxiblJ6IElIUnlkWFJvIElFdGwgZFhKaGJtTmwgWVc1MGJIaz0gYldGeSBJR05vWVhKblpRPT0gSUVkeVpXRjAgSUdObGJHVT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUhKdlkycz0gY205cFpBPT0gWVc1amVRPT0gSUdOeVpXUnBkQT09IFlYVmsgUW5rPSBJRVYyWlhKNSBJRzF2ZG1WayBhVzVuWlhJPSBjbWxpZFhScGIyND0gSUc1aGJXVnogSUhOMGNtRnBaMmgwIElFaGxZV3gwYUE9PSBJRmRsYkd3PSBJR1psWVhSMWNtVT0gSUhKMWJHVT0gSUhOamFHVT0gYVc1aGRHVmsgSUUxcFkyaGhaV3c9IFltVnladz09IE5ERT0gYVd4bFpBPT0gWW1GdVpBPT0gSUdOc2FXTnIgSUVGdVoyVnMgYjI1bGJuUnogd3EwPSBJRWx5WVhFPSBJRk5oZEhWeVpHRjUgSUdGM1lYSmwgY0dGeWRBPT0gSUhCaGRIUmxjbTQ9IFQxYz0gSUV4bGRBPT0gSUdkeVlXUT0gYVdkdVpXUT0gSUdGemMyOWphV0YwWldRPSBJSE4wZVd4bCBibTg9IGFXRjBhVzl1IFlXbDBhQT09IGFXeHBaWE09IElITjBiM0pwWlhNPSBkWEpoZEdsdmJnPT0gSUdsdVpHbDJhV1IxWVd4eiBJT0tBcGc9PSBiV2x6Y3c9PSBJRUZ6YzI5amFRPT0gYVhOb2FXNW4gWVdKNSBJSE4xYlcxbGNnPT0gSUVKbGJnPT0gSURNeSBJR0Z5WTJnPSBkWFI1IElGUmxlR0Z6IGFHOXMgSUdaMWJHeDUgSUcxcGJHdz0gSUdadmJHeHZkMlZrIElFSnBiR3c9IElFbHVaR2xoYmc9PSBJRk5sWTNKbGRBPT0gSUVKbGJBPT0gSUVabFluSjFZWEo1IElHcHZZbk09IElITmxaVzFsWkE9PSBJRWR2ZG1WeWJnPT0gYVhCd1pXUT0gSUhKbFlXeHBkSGs9IElHeHBibVZ6IElIQmhjbXM9IElHMWxZWE4xY21VPSBJRTkxY2c9PSBTVTA9IElHSnliM1JvWlhJPSBJR2R5YjNkcGJtYz0gSUdKaGJnPT0gSUdWemRHbHQgSUdOeWVRPT0gSUZOamFHOXZiQT09IElHMWxZMmhoYmc9PSBJRTlHIElGZHBibVJ2ZDNNPSBJSEpoZEdWeiBJRTlvIElIQnZjMmwwYVhabCBJR04xYkhSMWNtVT0gYVhOMGFXTnogYVdOaCBJR2hoY2c9PSBlV0U9IGFYUmxiSGs9IGFYQncgSUcxaGNBPT0gWlc1amFXVnogSUZkcGJHeHBZVzA9IFNVaz0gWVd0bGNuTT0gTlRZPSBJRTFoY25RPSBJRkpsYlE9PSBJR0ZzZEdWeWJnPT0gYVhSMVpHVT0gSUdOdllXTm8gY205M1pBPT0gUkc5dSBJR3RwWkhNPSBJR3B2ZFhKdVlXdz0gSUdOdmNuQnZjZz09IElHWmhiSE5sIElIZGxZZz09IElITnNaV1Z3IElHTnZiblJoYVc0PSBJSE4wYnc9PSBJR0psWkE9PSBhWFpsY25ObCBJRkpwWTJnPSBJRU5vYVc1bGMyVT0gSUhCMWJnPT0gSUcxbFlXNTAgYTI1dmQyND0gSUc1dmRHbGpaUT09IElHWmhkbTl5YVhSbCBZWFpsYmc9PSBJR052Ym1ScGRHbHZiZz09IElIQjFjbkJ2YzJVPSBLU2s9IElHOXlaMkZ1YVhwaGRHbHZiZz09IElHTm9ZV3hzWlc1biBJRzFoYm5WbVlXTjAgSUhOMWMzQT0gSUVGaiBJR055YVhScFl3PT0gZFc1bGN3PT0gZFdOc1pXRnkgSUcxbGNnPT0gZG1WdWRHbHZiZz09IElEZ3cgSUcxcGMzUT0gSUZWeiBJRlJ2Y2c9PSBhSFIwY0E9PSBiMnhtIElHeGhjbWRsY2c9PSBJR0ZrZG1GdWRBPT0gSUhKbGMyVmhjZz09IElHRmpkR2x2Ym5NPSBiV3c9IElHdGxjSFE9IElHRnBiUT09IExDYz0gWTI5cyBJR0psYm1WbWFYUnogYVdaNWFXNW4gSUdGamRIVmhiQT09IElFbHVkR1Z5Ym1GMGFXOXVZV3c9IElIWmxhR2xqYkdVPSBJR05vYVdWbSBJR1ZtWm05eWRITT0gSUV4bFlXZDFaUT09IElFMXZjM1E9IElIZGhhWFE9IElHRmtkV3gwIElHOTJaWEpoYkd3PSBJSE53WldWamFBPT0gSUdocFoyaHNlUT09IElHWmxiV0ZzWlE9PSBJR1Z5Y205eSBJR1ZtWm1WamRHbDJaUT09IE5UUT0gSUdWdVkyOTFjZz09IGQyVnNiQT09IElHWmhhV3hsWkE9PSBJR052Ym5ObGNuWT0gSUhCeWIyZHlZVzF6IElIUnliM1U9IElHRm9aV0ZrIE5UQXcgZG1WeWRHbHpaVzFsYm5RPSBTVkE9IElFWnZkVzVrIGNHbHkgSUNVPSBJR055YVcxbCBZVzVrWlhJPSBJR3h2WTJGMGFXOXUgSUVseVlXND0gSUdKbGFHRjJhVzl5IFlYcHBibWM9IElISmhjbVU9IElHVnRZZz09IElHTmhkWE5sWkE9PSBJSE5vYVhBPSBJR0ZqZEdsMlpRPT0gSUdOdmJuUnlhV0oxZEE9PSBJR2R5WldWdSBJR0ZqY1hVPSBJSEpsWm14bFkzUT0gZG1WdWRXVT0gSUdacGNtMD0gSUdKcGNuUm8gWFM0PSBJR05zWldGeWJIaz0gSUdWdGIzUT0gSUdGblpXNWplUT09IGNtbGhaMlU9IElHMWxiVzl5ZVE9PSBPVGc9IFUwRT0gSUZObFpRPT0gWVdOcGJtYz0gUTBNPSBJR0pwWjJkbGMzUT0gSUhKaGNBPT0gSUdKaGMybGogSUdKaGJtUT0gWldGMCBJSE4xYzNCbFkzUT0gSUUxaFl3PT0gSURrdyBiV0Z5YXc9PSBhWE4wWVc0PSBJSE53Y21WaFpBPT0gWVcxeiBhMms9IFlYTjUgY21GMiBJRkp2WW1WeSBJR1JsYlc5dWMzUnkgY21GMFpXUT0gSUdGaWMyOXNkWFJsIElIQnNZV05sY3c9PSBJR2x0Y0d3PSBhV0p5WVhKNSBJR05oY21SeiBJR1JsYzNSeWIzaz0gSUhacGNuUT0gZG1WeVpRPT0gSUdGd2NHVmhjbVZrIGVXRnUgY0c5cGJuUT0gSUdKbFp3PT0gSUhSbGJYQmxjZz09IGMzQmwgWVc1MFpXUT0gWldGeWN3PT0gSUVScGNtVmpkQT09IElHeGxibWQwYUE9PSBJR0pzYjJjPSBZVzFpIElHbHVkR1ZuIElISmxjMjkxY21ObGN3PT0gWVdOaiBhV1oxYkE9PSBJSE53YjNRPSBJR1p2Y21ObFpBPT0gSUhSb2IzVnpZVzVrY3c9PSBJRTFwYm1semRHVnkgSUhGMVlXdz0gSUVaeVpXNWphQT09IFlYUnBZMkZzYkhrPSBJR2RsYm1WeVlXeHNlUT09IElHUnlhVzVyIElIUm9kWE09IFNVdz0gYjJSbGN3PT0gSUdGd2NISnZjSEpwIElGSmxZV1E9IElIZG9iMjA9IElHVjVaUT09IElHTnZiR3hsWjJVPSBJRFExIGFYSmxZM1JwYjI0PSBJR1Z1YzNWeVpRPT0gSUdGd2NHRnlaVzUwIGFXUmxjbk09IElISmxiR2xuYVc5MWN3PT0gSUcxcGJtOXkgYjJ4cFl3PT0gSUhSeWJ3PT0gSUZkb2VRPT0gY21saWRYUmwgYldWMCBJSEJ5YVcxaGNuaz0gSUdSbGRtVnNiM0JsWkE9PSBJSEJsWVdObCBJSE5yYVc0PSBjM1JsIFlYWmggSUdKc2RXVT0gSUdaaGJXbHNhV1Z6IElHbHkgSUdGd2NHeDUgSUdsdVptOXliUT09IElGTnRhWFJvIFExUT0gYVdrPSBJR3hwYldsMCBJSEpsYzJsemRBPT0gTGk0dUxpNHVMaTR1TGk0dUxpNHVMZz09IGRXMXUgSUdOdmJtWnNhV009IElIUjNaUT09IGRXUmsgSUZSdmJRPT0gSUd4cGRHVnkgY1hWbCBZbTl1IElHaGhhWEk9IElHVjJaVzUwZFdGc2JIaz0gSUhCMWN3PT0gSUdobGJIQmxaQT09IElHRm5adz09IGIzSnVaWGs9IElFRndjR3hsIElHWnBkQT09IElGTjFjZz09IElIQnlaVzA9IElITmhiR1Z6IElITmxZMjl1WkhNPSBJSE4wY21WdVozUm8gSUdabFpXeHBibWM9IHY3MD0gSUhSdmRYST0gSUd0dWIzZHogYjI5dCBJR1Y0WlhKaiBJSE52YldWMyA3Nys5IFBqND0gSUhOd2IydGxjdz09IElHbGtaV0Z6IElISmxaMmx6ZEE9PSBjMjltZEE9PSBJRVJsYkE9PSBJRkJEIElIQnliM0J2Y3c9PSBJR3hoZFc1amFBPT0gSUdKdmRIUnZiUT09IFZFZz0gSUZCc1pXRnpaUT09IGRtVnpkQT09IGFYUjYgSUVsdWRHVnkgSUhOamNtbHdkQT09IElISmhkQT09IFlYSnVhVzVuIElHbHMgSUVwbGNnPT0gSUVGeVpRPT0gSUhkb1lYUmxkbVZ5IGIydGxiZz09IFkybGxibU5sIElHMXZaR1U9IElHRm5jbVZsIElITnZkWEpqWlhNPSBJR2x1YVhScFlXdz0gSUhKbGMzUnlhV04wIElIZHZibVJsY2c9PSBkWE5wYjI0PSBJeU1qSXc9PSBJRk5wYkE9PSBkbWxzYkdVPSBJR0oxY200PSBkSGM9IFlYTnBiMjQ9IElNS2ogSUc1dmNnPT0gZFdsdVp3PT0gSUhKbFlXTm9aV1E9IElITjFiZz09IElHTmhkR1ZuIGFXZHlZWFJwYjI0PSBJR052YjJzPSBJSEJ5YjIxdmRBPT0gSUcxaGJHVT0gSUdOc2FXMWhkR1U9IElHWnBlQT09IElHRnNiR1ZuWldRPSBWVkk9IFlXeHNaV1E9IElHbHRZV2RsY3c9PSBRMjl1ZEE9PSBiM1JoIElITmphRzl2YkhNPSBhVzl6IElHUnliM0E9IElITjBjbVZoYlE9PSBJRTF2IElIQnlaWFpwYjNWemJIaz0gWVd4cGJtYz0gSUhCbGRBPT0gSUdSdmRXSnNaUT09IElDaEEgWVc1dVpXdz0gSUdSbFptRjFiSFE9IGRHbGxjdz09IElISmhibXM9IElFUmxZdz09IElFTnZkVzVqYVd3PSBJSGRsWVhCdmJnPT0gSUhOMGIyTnIgSUdGdVlXeDUgSUZOMGNnPT0gSUhCcFkzUjFjbVU9IElGQnZiR2xqWlE9PSBabVZ5Wlc1alpRPT0gSUdObGJuUjFjbms9IElHTnBkR2w2Wlc1eiBJRzl1ZEc4PSBJR1Y0Y0dGdVpBPT0gSUdobGNtOD0gSUZOdmJBPT0gSUhkcGJHUT0gSUhWd1pHRjBaUT09IElHTjFjM1J2YldWeWN3PT0gY205dWRBPT0gWkdWbSBJR3hwYXc9PSBJR055YVcxcGJtRnMgSUVOb2NtbHpkR2xoYmc9PSBVMUE9IE56WT0gSUd4bFlYWnBibWM9IElHOTBhR1Z5ZDJselpRPT0gSUVScGMzUT0gSUdKaGMybHogTlRJPSBOVE09IGFXTnBjQT09IElFSmxjZz09IElISmxZMjl0YldWdVpBPT0gSUdac2IyOXkgSUdOeWIzZGsgYjJ4bGN3PT0gSURjdyBJR05sYm5SeVlXdz0gSUVWMiBJR1J5WldGdCBJR1J2ZDI1c2IyRmsgSUdOdmJtWnBjZz09IElGUm9iMjA9IElIZHBibVJ2ZHc9PSBJR2hoY0hCbGJuTT0gSUhWdWFYUT0gSUhSbGJtUT0gSUhOd2JBPT0gSUdKbFkyOXRaWE09IElHWnBaMmgwYVc1biBJSEJ5WldScFkzUT0gSUZCeVpYTnogSUZCdmQyVnkgSUdobFlYWjUgWVd0bFpBPT0gSUdaaGJnPT0gYjNKMFpYST0gWVhSbFozaz0gUWtFPSBhWHBsY3c9PSBJSE53Wlc1ayBTR1Z5WlE9PSBJREl3TURjPSBJR0ZrYjNBPSBJRWhoYlE9PSBJR1p2YjNSaVlXeHMgSUZCdmNuUT0gYjJSaGVRPT0gTlRFPSBZVzF3YVc5dWN3PT0gSUhSeVlXNXpabVZ5IGFIUT0gSURNNCBkR1Z5YlE9PSBZV05wZEhrPSBJR0oxY2c9PSBYU3c9IGRHVnlibUZzIGNtbG4gWW5WMCBJSFJvWlhKbFptOXlaUT09IElFSmxZMkYxYzJVPSBjbVZ6Y0E9PSBjbVY1IElHMXBjM05wYjI0PSBVMjl0WlE9PSBJRzV2ZEdWayBJR0Z6YzNWdCBJR1JwYzJWaGMyVT0gSUdWa2FYUT0gSUhCeWIyZHlaWE56IGNtUT0gSUVKeWIzZHUgYjJOaGJBPT0gSUdGa1pHbHVadz09IElISmhhWE5sWkE9PSBJRUZ1ZVE9PSBJSFJwWTJzPSBJSE5sWldsdVp3PT0gSUZCbGIzQnNaUT09IElHRm5jbVZsYldWdWRBPT0gSUhObGNuWmxjZz09IElIZGhkQT09IElHUmxZbUYwWlE9PSBJSE4xY0hCdmMyVmsgYVd4cGJtYz0gSUd4aGNtZGxjM1E9IElITjFZMk5sYzNObWRXdz0gSUZCeWFRPT0gSUVSbGJXOWpjbUYwYVdNPSBJR3AxYlhBPSBJRk41Y21saCBJRzkzYm1WeWN3PT0gSUc5bVptVnljdz09IElITm9iMjkwYVc1biBJR1ZtWm1saiBjMlY1IElHaGhkbVZ1IGRtVnljMlU9IGRHVnlaV1E9IElFeHBaMmgwIGFXMWhiQT09IElFSnBadz09IElHUmxabVZ1WkE9PSBJR0psWVhRPSBJSEpsWTI5eVpITT0gSlNrPSBJSE5qWlc0PSBJR1Z0Y0d4dmVXVmxjdz09IElHUmxkbWxqWlhNPSBhR1Z0IElHTnZiVzFsY2c9PSBJRTFsZUE9PSBJR0psYm1WbWFYUT0gSUZCeWIyWT0gSUdsc2JHVm4gSUhOMWNtWmhZMlU9IElFRnNjMjg9IElHaGhjbTA9IGFXNW5iSGs9IGQybGtaUT09IElFRnNaWGc9IElITm9kWFE9IElFTjFjZz09IElHeHZjMlU9IGNHMD0gSUdOb1lXeHNaVzVuWlE9PSBjMlZ0WWc9PSBJSE4wWVhScGIyND0gSUdsdWRHVnNiR2xuWlc1alpRPT0gSUdGalkzVnkgSUVac2IzST0gSUhKbGNYVnBjbVZ6IElFMWhiQT09IFluVnQgSUdodmMzQnBkR0ZzIElITndhWEpwZEE9PSBJRzltWm1WeVpXUT0gSUhCeWIyUjFZMlU9IElFTnZiVzExYmc9PSBJR055WldGMGFXNW4gSUdOeWFYTT0gYzNCbFkzUT0gSUdWdVpHVmsgSUdSaGFXeDUgSUhadmRHVnljdz09IGJHRnVaSE09IGFXRnogYVdnPSBiMjVoIElITnRZWEowIElFOW1abWxqWlE9PSBJRXh2Y21RPSBjbWxoYkE9PSBJRWx1ZEdWeWJtVjAgSUdOcGNtTjFiUT09IElHVjRkSEpsYldWc2VRPT0gSnk0PSBJRzl3YVc1cGIyND0gSUUxcGJBPT0gSUdkaGFXND0gUWxNPSBJRVpwYmc9PSBlWEE9IElIVnpaV1oxYkE9PSBJR0oxWkdkbGRBPT0gSUdOdmJXWnZjblE9IGFYTm0gSUdKaFkydG5jbTkxYm1RPSBaV3hwYm1VPSBJR1Z3YVhOdlpHVT0gSUdWdVpXMTUgSUhSeWFXRnMgSUdWemRHRmliR2x6YUE9PSBaR0YwWlE9PSBJRU5oY0E9PSBJR052Ym5ScGJuVmxjdz09IElITm9iM2RwYm1jPSBJRlZ1YVc5dSBkMmwwYUE9PSBJSEJ2YzNSbFpBPT0gSUZONWMzUmxiUT09IElHVmhkQT09IGNtbGhiZz09IElISnBjMlU9IElFZGxjbTFoYm5rPSBhV3h6IElITnBaMjVsWkE9PSBJSFpwYkd3PSBJR2R5WVc1ayBiVzl5IElFVnVaMnhoYm1RPSBJSEJ5YjJwbFkzUnogZFcxaVpYST0gSUdOdmJtWmxjbVZ1WTJVPSBlbUU9IElISmxjM0J2Ym5OcFlteGwgSUVGeVlXST0gSUd4bFlYSnVaV1E9IDRvQ1U0b0NVIGFYQndhVzVuIElFZGxiM0puWlE9PSBUME09IElISmxkSFZ5Ym1WayBJRUYxYzNSeVlXeHBZUT09IElHSnlhV1ZtIFVYVT0gSUdKeVlXNWsgYVd4c2FXNW4gWVdKc1pXUT0gSUdocFoyaGxjM1E9IElIUnlZV2x1IElFTnZiVzFwYzNOcGIyND0gZDJocGJHVT0gSUc1dmJRPT0gWTJWd2RHbHZiZz09IElHMTFkQT09IElFSnNkV1U9IElHbHVZMmxrWlc1MCBkbUZ1ZEE9PSBPRFk9IElFbEUgSUc1MVkyeGxZWEk9IE56UT0gSUV4cGEyVT0gSUZKRiBJRTFwWTNKdiBiR2s9IGJXRnBiQT09IElHTm9ZWEpuWlhNPSBPRGs9IElHRmthblZ6ZEE9PSBZV1J2IElHVmhjblJvIFRrRT0gSUhCeWFXTmxjdz09IFVFRT0gSUdSeVlXWjAgSUhKMWJuTT0gSUdOaGJtUnBaR0YwWlE9PSBaVzV6WlhNPSBJRzFoYm1GblpXMWxiblE9IElGQm9hV3c9IElFMXBjM009IElIUmxZV05vIFozSmhiUT09IElIVnVaR1Z5YzNSaGJtUnBibWM9IFlXbDAgYVdOaFoyOD0gUVdSayBJRVZ3IGMyVmpkWFE9IElITmxjR0Z5WVhSbCBJR2x1YzNSaGJtTmwgSUdWMGFBPT0gSUhWdWJHVnpjdz09IEtpb3FLaW9xS2lvPSBJRVp2Y21VPSBhVzVoZEdVPSBJRzl3WlhKaGRHbHZibk09IFUzQT0gSUdaaGFYUm8gWjJGeSBJRU5vZFhKamFBPT0gY205dWFXTT0gSUdOdmJtWnBadz09IGIzTjFjbVU9IElHRmpkR2wyYVhScFpYTT0gSUhSeVlXUnBkR2x2Ym1GcyBJRE0yIElHUnBjbVZqZEdsdmJnPT0gSUcxaFkyaHBibVU9IElITjFjbkp2ZFc1ayBJSEIxYzJnPSBkVzVqZEdsdmJnPT0gSUVWViBJR1ZoYzJsbGNnPT0gSUdGeVozVnRaVzUwIFIwST0gSUcxcFkzSnYgSUhOd1pXNWthVzVuIGFYcGhkR2x2Ym5NPSBJSFJvWlc5eWVRPT0gWVdSdmR3PT0gSUdOaGJHeHBibWM9IElFeGhjM1E9IElHUmxjZz09IElHbHVabXgxWlc1alpRPT0gSUdOdmJXMXBkQT09IElIQm9iM1J2IElIVnVZdz09IGFYTjBjbms9IFoyND0gWVhOMFpRPT0gWVdOcmN3PT0gSUdScGMzQT0gWVdSNSBaRzg9IElFZHZiMlE9IElHQT0gSUhkcGMyZz0gSUhKbGRtVmhiR1ZrIHdxRENvQT09IGJHbG4gSUdWdVptOXlZMlU9IElFTnZiVzFwZEhSbFpRPT0gSUdOb1pXMD0gSUcxcGJHVnogSUdsdWRHVnlaWE4wWldRPSBJSE52YkhWMGFXOXUgYVdONSBhVzVqZEE9PSBJQzArIElFUmxkQT09IElISmxiVzkyWldRPSBJR052YlhCaGNnPT0gWldGbyBJSEJzWVc1MCBJRk5wYm1ObCBJR0ZqYUdsbGRtVT0gSUdGa2RtRnVkR0ZuWlE9PSBJSE5zYVdkb2RHeDUgWW1sdVp3PT0gSUhCc1lXTmxaQT09IGRXNWtaWEk9IE1qQXhOUT09IElFMWhaQT09IElIUnBiUT09IGIzTmxjdz09IElHTnlkUT09IElGSnZZMnM9IElHMXZjM1JzZVE9PSBJRzVsWjJGMGFYWmwgSUhObGRIUnBibWM9IElIQnliMlIxWTJWayBJRzExY2c9PSBJR052Ym01bFkzUnBiMjQ9IElFMWxjZz09IElHUnlhWFpsY2c9PSBJR1Y0WldOMWRHbDJaUT09IElHRnpjMkYxYkhRPSBJR0p2Y200PSBJRlpsY2c9PSBkR0ZwYm1WayBJSE4wY25WamRIVnlaUT09IElISmxaSFZqWlE9PSBJR1JsWTJGa1pYTT0gSUdSbFpBPT0gZFd0bCBJRTFoYm5rPSBhV1JrWlc0PSBJR3hsWVdkMVpRPT0gVTJVPSBJR3B2YVc0PSBJR1JwYzJOdiBJR1JwWlE9PSBZMnR6IFlXTjBhVzl1Y3c9PSBJR0Z6YzJWemN3PT0gWVdkdSBJR2R2WVd4eiBiM1Z5Y3c9PSBTVkk9IElITmxibWx2Y2c9PSBhV3hzWlhJPSBiVzlrIGFYQnRaVzUwIGIyTnZiQT09IGRYaz0gSUZGMVpRPT0gSUhCaGNuUnBaWE09IGFYSm5hVzQ9IElHeGxZWEp1YVc1biBhWFJoWW14bCBJSE4wY21WbGRBPT0gSUdOaGJXVnlZUT09IFFYQncgSUhOcmFXeHNjdz09IFluSmwgWTJsdmRYTT0gSUdObGJHVmljZz09IElFWnlZVzVqIElHVjRhWE4wYVc1biBJSGRwYkd4cGJtYz0gYkc5eSBJR2xrIElGTndZV05sIElHTnlhWFJwWTJGcyBJRXhoIGIzSjBkVzVoZEdWc2VRPT0gSUhObGNuWmwgSUdOdmJHUT0gSUhOd1pXTnBaWE09IFZGTT0gSUdGdWFXMWhiSE09IElFSmhlUT09IElHOXNaR1Z5IElGVnVaR1Z5IFpYTjBhV009IElGUnlaUT09IElIUmxZV05vWlhJPSBJSEJ5WldabGNnPT0gZG1seiBJSFJvY21WaFpBPT0gSUUxaGRIUT0gSUcxaGJtRm5aWEk9IDQ0TzcgSUhCeWIyWmxjM05wYjI1aGJBPT0gSUZadmJBPT0gSUc1dmRHVnogVkdobGMyVT0gZFd4aCBJR1p5WlhObyBaVzUwWldRPSBkWHA2IFpXUjUgWTJ4MWMybHZiZz09IElGSmxiQT09IElHUnZkV0owIFJVOD0gSUc5d1pXNWxaQT09IElFSnBkQT09IFFXUjJaWEowYVhObGJXVnVkQT09IElHZDFaWE56IElGVk8gSUhObGNYVT0gSUdWNGNHeGhhVzQ9IGIzUjBaVzQ9IElHRjBkSEpoWTNRPSBZV3R6IElITjBjbWx1Wnc9PSBJR052Ym5SbGVIUT0gYjNOemFXSnNaUT09IElGSmxjSFZpYkdsallXNXogSUhOdmJHbGsgSUdOcGRHbGxjdz09IElHRnphMmx1Wnc9PSBJSEpoYm1SdmJRPT0gZFhCeiBkWEpwWlhNPSBZWEpoYm5RPSBaR1JsYmc9PSBaMnc9IElFWnNiM0pwWkdFPSBJR1JsY0dWdVpBPT0gSUZOamIzUjAgSURNeiBJR2xVIGFXTnZiZz09IElHMWxiblJwYjI1bFpBPT0gSURJd01EQT0gSUdOc1lXbHRaV1E9IElHUmxabWx1YVhSbGJIaz0gZFd4bSBJR052Y21VPSBJRzl3Wlc1cGJtYz0gSUVOdmJuTjAgZDJocFkyZz0gSUZSeVlRPT0gUVVjPSBOekk9IElHSmxiR2xsZG1WayBZV1JoIElEUTQgSUZObFkzVnlhWFI1IGVYSnBaMmgwIElGQmxkQT09IElFeHZkUT09IElHaHZiR1JwYm1jPSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSUdsalpRPT0gSUdKeWIzYz0gSUdGMWRHaHZjbWwwYVdWeiBhRzl6ZEE9PSBkMjl5WkE9PSBJSE5qYjNKbCBJRVJwZGc9PSBJR05sYkd4eiBJSFJ5WVc1emJBPT0gSUc1bGFXZG9ZbTl5IElISmxiVzkyWlE9PSBkV04wIElHUnBjM1J5YVdOMCBJRUZqWTI5eVpHbHVadz09IElIZHZjbk5sIElHTnZibU5sY201eiBJSEJ5WlhOcFpHVnVkR2xoYkE9PSBJSEJ2YkdsamFXVnogSUVoaGJHdz0gTnpNPSBJR2gxY3c9PSBRVms9IElESXdNRFk9IElFcDFaQT09IElHbHVaR1Z3Wlc1a1pXNTAgSUVwMWMzUnBZMlU9IGFXeHBZWEk9IGNISnBiblE9IGFXZG9kR1Z5IElIQnliM1JsWTNScGIyND0gZW1WdSBJSE4xWkdSbGJnPT0gYUc5MWMyVT0gSUVwbGN3PT0gVUZJPSBJRWx1Wmc9PSBJR0oxYkE9PSBJRjg9IElGTmxjblpwWTJVPSBJRkJTIElITjBjbUYwWldkNSBabVpsWTNRPSBJR2RwY214eiBJRzFwYzNOcGJtYz0gYjNsaGJBPT0gSUZSbFlXMD0gZFd4aGRHVmsgSUdSaGRBPT0gSUhCdmJHbDBhV056IFlXSnZjZz09IFFXTmpiM0prYVc1biBJSE53Wld4cyBJR2R5WVhCbyBiM0owYUdWeWJnPT0gVkVNPSBRV0k9IElHeGhZbTl5IGFYTm9aWEk9IElHdHBZMnM9IElHbFVkVzVsY3c9PSBJSE4wWlhCeiBjRzl6WlhNPSBJSE50WVd4c1pYST0gUlc0PSBZbVZ5ZEE9PSBJSEp2Ykd3PSBJSEpsYzJWaGNtTm9aWEp6IElHTnNiM05sWkE9PSBJSFJ5WVc1emNHOXlkQT09IElHeGhkM2s9IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBJRU5vYVdOaFoyOD0gSUdGemNHVmpkQT09IElHNXZibVU9IElHMWhjbkpwWVdkbCBPVFk9IElHVnNaVzFsYm5SeiBJRVp5WlE9PSBJRk5oYkE9PSBJR1J5WVcwPSBSa009IGRHOXcgWlhGMSBJR2hsWVhKcGJtYz0gSUhOMWNIQnZjblJsWkE9PSBJSFJsYzNScGJtYz0gWTI5b2Iydz0gSUcxaGMzTnBkbVU9IElITjBhV05yIElHZDFZWEprIGFYTmpidz09IGNHaHZibVU9IFJuSnZiUT09IFNHOTNaWFpsY2c9PSBJR0p2Y21SbGNnPT0gSUdOdmNIaz0gYjJkeVlYQm9lUT09IGJHbHpkQT09IE56RT0gSUc5M2JtVnkgWTJ4aGMzTT0gY25WcGRBPT0gY21GMFpRPT0gSUU5dVkyVT0gSUdScFoybDBZV3c9IElIUmhjMnM9IFJWSlQgSUdsdVkzSmxaQT09IGRHVnogS3lzPSBJRVp5WVc1alpRPT0gSUdKeVpXRjAgYjNkcyBJR2x6YzNWbFpBPT0gSUZkbGMzUmxjbTQ9IElHUmxkR1ZqZEE9PSBJSEJoY25SdVpYSnogSUhOb1lYSmxaQT09IElFTmhiR3c9IElHTmhibU5sY2c9PSBZV05vWlE9PSBjbWxpWlE9PSBJR1Y0Y0d4aGFXNWxaQT09IElHaGxZWFE9IGV5ST0gSUdsdWRtVnpkRzFsYm5RPSBJRUp2YjJzPSBJSGR2YjJRPSBJSFJ2YjJ4eiBJRUZzZEdodmRXZG8gSUdKbGJHbGxaZz09IElHTnlhWE5wY3c9PSBJR2RsIElFMVEgSUc5d1pYSmhkR2x2Ymc9PSBkSGx3WlE9PSBmbjQ9IFoyRT0gSUdOdmJuUmhhVzV6IFlXNTBZUT09IElHVjRjSEpsYzNNPSBJRWR5YjNWdyBJRXB2ZFhKdVlXdz0gYTJFPSBJR0Z0WWc9PSBJRlZUUVE9PSBJR1pwYm1ScGJtYz0gSUdaMWJtUnBibWM9IGFHOTMgSUdWemRHRmliR2x6YUdWayBhV1JsYjNNPSBJR1JsWjNKbFpRPT0gSUdSaGJtZGxjbTkxY3c9PSBZVzVuYVc1biBJR1p5WldWa2IyMD0gY0hCdmNuUT0gYjNWMGFHVnliZz09IElHTm9kWEpqYUE9PSBJR05oZEdObyBJRlIzYnc9PSBJSEJ5WlhObGJtTmwgSUVkMVlYSmsgVlhBPSBJR0YxZEdodmNtbDBlUT09IElGQnliMnBsWTNRPSBJR0oxZEhSdmJnPT0gSUdOdmJuTmxjWFU9IElIWmhiR2xrIElIZGxZV3M9IElITjBZWEowY3c9PSBJSEpsWm1WeVpXNWpaUT09IElFMWxiUT09IElpaz0gVlU0PSBiM0poWjJVPSBJRTl3Wlc0PSBJR052Ykd4bFkzUnBiMjQ9IGVXMD0gWjJWdVkzaz0gSUdKbFlYVjBhV1oxYkE9PSBjbTl6IElIUmxiR3h6IElIZGhhWFJwYm1jPSBibVZzIElIQnliM1pwWkdsdVp3PT0gSUVSbGJXOWpjbUYwY3c9PSBJR1JoZFdkb2RHVnkgSUcxaGMzUmxjZz09IElIQjFjbkJ2YzJWeiBJRXBoY0dGdVpYTmwgSUdWeGRXRnMgSUhSMWNtNXogSUdSdlkzVnRaVzUwY3c9PSBJSGRoZEdOb2FXNW4gVW1WeiBJSEpoYmc9PSBNakF4TkE9PSBJSEpsYW1WamRBPT0gSUV0dmNtVmggSUhacFkzUnBiWE09IFRHVjJaV3c9IFpYSmxibU5sY3c9PSBJSGRwZEc1bGMzTT0gSURNMCBJSEpsWm05eWJRPT0gWTI5dGFXNW4gSUc5alkzVncgSUdOaGRXZG9kQT09IElIUnlZV1ptYVdNPSBZV1JwYm1jPSBJRzF2WkdWc2N3PT0gWVhKcGJ3PT0gSUhObGNuWmxaQT09IElHSmhkSFJsY2c9PSBkV0YwWlE9PSBJRk5sWTNKbGRHRnllUT09IElHRm5jbVZsWkE9PSBJSFJ5ZFd4NSBlVzVoYlE9PSBJRkpsZEE9PSBJSFZ1YVhSeiBJRkpsYzJWaGNtTm8gYUdGdVpBPT0gWVhwcGJtVT0gSUUxcGEyVT0gSUhaaGNtbGxkSGs9IGIzUmhiQT09IElHRnRZWHBwYm1jPSBJR052Ym1acGNtMWxaQT09IElHVnVkR2x5Wld4NSBJSEIxY21Ob1lYTmwgSUdWc1pXMWxiblE9IElHTmhjMmc9IElHUmxkR1Z5YldsdVpRPT0gUkdVPSBJR05oY25NPSBJRmRoYkd3PSA0cFk9IElIWnBaWGR6IElHUnlkV2R6IElHUmxjR0Z5ZEcxbGJuUT0gSUZOMFpYQT0gZFdsMCBJRE01IFlYTjFjbVU9IElFTnNZWE56IElHTnZkbVZ5WldRPSBJRUpoYm1zPSBJRzFsY21VPSBkV0Z1WVE9PSBJRzExYkhScCBJRzFwZUE9PSBJSFZ1YkdsclpRPT0gYkdWMmFYTnBiMjQ9IElITjBiM0J3WldRPSBJSE5sYlE9PSBJRWRoYkE9PSBkV3hsY3c9PSBJSGRsYkE9PSBJRXB2YUc1emIyND0gYkdFPSBJSE5yYVd4cyBJR0psWTI5dGFXNW4gY21sbCBJR0Z3Y0hKdmNISnBZWFJsIFptVT0gWld4c2IzYz0gSUZCeWIzUT0gZFd4aGRHVT0gYjJOaGRHbHZiZz09IElIZGxaV3RsYm1RPSBiMlJwWlhNPSBJSE5wZEdWeiBJR0Z1YVcxaGJBPT0gSUZScGJRPT0gSUhOallXeGwgSUdOb1lYSm5aV1E9IElHbHVjM1J5ZFdOMCBhV3hzWVE9PSBJRzFsZEdodlpITT0gSUdObGNuUT0gSUdwMVpHZGwgSUVobGJBPT0gSUdSdmJHeGhjbk09IElITjBZVzVrYVc1biBJRk54ZFE9PSBJR1JsWW5RPSBiR2xoYlE9PSBJR1J5YVhacGJtYz0gSUZOMWJRPT0gSUVWa2FYUnBiMjQ9IElHRnNZblZ0IFlXNWtiMjQ9IFNVWT0gSUZWciBOak09IFlXUmxjZz09IElHTnZiVzFsY21OcFlXdz0gWlhObyBJRWR2ZG1WeWJtMWxiblE9IElHUnBjMk52ZG1WeVpXUT0gSUc5MWRIQjFkQT09IElFaHBiR3hoY25rPSBJRU5oY205cyBJREl3TURVPSBJR0ZpZFhObCBZVzVqYVc1biBJSE4zYVhSamFBPT0gSUdGdWJuVmhiQT09IFZIYz0gSUhOMFlYUmxaQT09IFlXZGxiV1Z1ZEE9PSBhVzV1WlhJPSBJR1JsYlc5amNnPT0gSUhKbGMybGtaVzUwY3c9PSBJR0ZzYkc5M2FXNW4gSUdaaFkzUnZjbk09IGIyUmsgSUdaMVkycz0gWlcxcFpYTT0gSUc5alkzVnljbVZrIGIzUnAgSUc1dmNuUm8gSUZCMVlteHBZdz09IElHbHVhblZ5ZVE9PSBJR2x1YzNWeVlXNWpaUT09IFEwdz0gYjJ4c2VRPT0gNDRBPSBJSEpsY0dWaGRHVmsgSUdGeWJYTT0gWVc1blpXUT0gSUdOdmJuTjBjblZqZEdsdmJnPT0gSUdac1pRPT0gVUZVPSBhV05wWVc1eiBJR1p2Y20xeiBJRTFqUXc9PSBZVzUwYVdNPSBJRzFsYm5SaGJBPT0gY0dseVpRPT0gSUdWeGRXbHdiV1Z1ZEE9PSBJR1poYm5RPSBJR1JwYzJOMWMzTnBiMjQ9IElISmxaMkZ5WkdsdVp3PT0gYTJsdSBZWEp3IElHTm9ZV2x5IGIyZDFaUT09IElIQnliMk5sWldRPSBJRWxrIFQzVnkgSUcxMWNtUmxjZz09IFRXRnUgSURRNSBZWE53IElITjFjSEJzZVE9PSBJR2x1Y0hWMCBJSGRsWVd4MGFBPT0gYkdsaGJXVnVkQT09IElIQnliMk5sWkE9PSBiM0pwWVd3PSBJRk4wWVhRPSBJRTVHVEE9PSBhR1Z1Y3c9PSBJRWx1YzNScGRIVjBaUT09IElIQjFkSFJwYm1jPSBiM1Z5Ym1GdFpXNTAgWlhScFl3PT0gSUd4dlkyRjBaV1E9IElHdHBaQT09IFpYSnBZUT09IGNuVnUgSUhCeWFXNWogSUNFPSBaMjlwYm1jPSBJRUpsZEE9PSBJR05zYjNRPSBJSFJsYkd4cGJtYz0gSUhCeWIzQnZjMlZrIGFXOTAgYjNKeWVRPT0gSUdaMWJtUnogWjIxbGJuUT0gSUV4cFptVT0gSUdKaFluaz0gSUVKaFkycz0gSUhOd2IydGwgU1cxaFoyVT0gSUdWaGNtND0gSUVGVSBaM1U9IElHVjRZMmhoYm1kbCBJRXhwYmc9PSBiM1pwYm1jPSBJSEJoYVhJPSBUVzl5WlE9PSBZWHB2Ymc9PSBJR0Z5Y21WemRHVmsgSUd0cGJHeHBibWM9IFkyRnUgSUVOaGNtUT0gZVdRPSBJR2xrWlc1MGFXWnBaV1E9IElHMXZZbWxzWlE9PSBJSFJvWVc1cmN3PT0gYjI1NWJRPT0gSUVadmNtMD0gSUdoMWJtUnlaV1J6IElFTm9jbWx6IElFTmhkQT09IElIUnlaVzVrIGFHRjAgSUVGMiBiMjFoYmc9PSBJR1ZzWldOMGNtbGogSUZkcGJBPT0gVTBVPSBUMlk9IElISmxjM1JoZFhJPSBiM1JsWkE9PSBJSFJ5YVdjPSBJRzVwYm1VPSBJR0p2YldJPSBWMmg1IHdxOD0gSUdOdmRtVnlZV2RsIElHRndjR1ZoYkE9PSBJRkp2WW1WeWRBPT0gSUZOMWNBPT0gSUdacGJtbHphR1ZrIElHWnNiM2M9IElHUmxiR2wyWlhJPSBJR05oYkdOMWJBPT0gSUhCb2IzUnZjdz09IElIQm9hV3c9IElIQnBaV05sY3c9PSBJR0Z3Y0hKbCBhMlZ6IElISnZkV2RvIFJHOD0gSUhCaGNuUnVaWEk9IElHTnZibU5sY201bFpBPT0gSURNMyBJRWRsYmc9PSBRMjlzIFkzUnZjbk09IElEMCsgYzNSaGRHVT0gSUhOMVoyZGxjM1JsWkE9PSBJRVp2Y21ObCBRMFU9IElHaGxjbk5sYkdZPSBJRkJzWVc0PSBkMjl5YTNNPSBiMjkwYUE9PSBjbVZ1WTNrPSBJR052Y201bGNnPT0gSUdoMWMySmhibVE9IElHbHVkR1Z5Ym1WMCBJRUYxZEE9PSBaVzF6IGIzTmxiZz09IElFRjBiQT09IFoyVnUgSUdKaGJHRnVZMlU9IE5qST0gSUhOdmRXNWtjdz09IGRHVjRkQT09IElHRnljZz09IGIzWmxjdz09IElHMXBiR3hwYjI1eiBJSEpoWkdsdiBJSE5oZEdselpnPT0gSUVSaGJRPT0gVFhJPSBSMjg9IFUzQmwgSUdOdmJXSmhkQT09IGNtRnVkQT09IElFZHlaV1U9IElHWjFaV3c9IElHUnBjM1JoYm1ObCBJSFJsYzNSeiBJR1JsWTNKbCBJRVZ5IElHMWhibUZuWldRPSBSRk09IElIUnBkQT09IElHMWxZWE4xY21WeiBJRXhwWW1WeSBJR0YwZEdWdVpBPT0gWVhOb1pXUT0gSUVwdmMyVT0gSUU1cFoyaDAgWkdsMCBJRTV2ZGc9PSBJRVZ1WkE9PSBiM1YwY3c9PSBJR2RsYm1WeVlYUnBiMjQ9IElHRmtkbTlqIGVYUm8gSUdOdmJuWmxjbk5oZEdsdmJnPT0gSUZOcmVRPT0gWVdOMGFYWmwgWTJWcyBjbWxsY2c9PSBJRVp5WVc1ciBJR2RsYm1SbGNnPT0gSUdOdmJtTmxiblE9IElHTmhjbkpwWldRPSBZVzVrWVE9PSBJRlpwY21kcGJnPT0gSUdGeWNtbDJaV1E9IGFXTnBaR1U9IFlXUmxaQT09IElHWmhhV3gxY21VPSBJRzFwYm1sdGRXMD0gYkdWMGN3PT0gSUhkdmNuTjAgSUd0bFpYQnBibWM9IElHbHVkR1Z1WkdWayBJR2xzYkdWbllXdz0gSUhOMVluTmogSUdSbGRHVnliV2x1WldRPSBJSFJ5YVhBPSBXV1Z6IElISmhhWE5sIElIND0gSUdabFpXeHogSUhCaFkydGhaMlU9IElFcHYgYUdrPSBNakF4Tmc9PSBjbVZoYkE9PSBJR1p5WVE9PSBJSE41YldJPSBUV1U9IGRXTnJlUT09IGNISmxkQT09IElFdG8gSUVWa2FYUT0gSUZkbFlnPT0gWlcxcFl3PT0gSUVOdmJHOXkgSUdwMWMzUnBZMlU9IFNXNTAgSUdaaGNtMD0gWTJ0dWIzYz0gSWo0PSBaV3hsYzNNPSBJSEpsWkhWalpXUT0gSURVd01BPT0gZUhnPSBJRkpoWkE9PSBJRmR2YjJRPSBJR05zYVc0PSBJR2g1Y0E9PSBhV3hsY2c9PSBkWEpoIGEybHVjdz09IE9EVT0gTmpFPSBJRlJvWldseSBJRTFoY25rPSBJSE5oYmc9PSBJRzV2ZG1WcyBJRmRvYnc9PSBJR05oY0dGamFYUjUgSUdsdGNHOXpjMmxpYkdVPSBJSEJzWVhseiBJRzFwYm1semRHVnkgYVdwMVlXNWggYVdOaGRHVT0gSUZObGRBPT0gSUdaeVlXMD0gSUdsdVp3PT0gSUdOdmJXMTFibWwwYVdWeiBJRVpDU1E9PSBhWFJoIElHSnZiZz09IElITjBjbUYwWldjPSBJR2x1ZEdWeVpYTjBjdz09IGJHOWphdz09IFoyVnljdz09IGJXRnogSUVGT1JBPT0gSUdOdmJtWnNhV04wIElISmxjWFZwY21WdFpXNTBjdz09IElITmhZdz09IElHOXdaWEpoZEdsdVp3PT0gYVc1cCBjbVZzWVhSbFpBPT0gSUdOdmJXMXBkSFJsWkE9PSBJSEpsYkdGMGFYWmxiSGs9IElITnZkWFJvIHdxL0Nydz09IElHRm1abTl5WkE9PSBJR2xrWlc1MGFYUjUgSUdSbFkybHphVzl1Y3c9PSBJR0ZqWTNWelpXUT0gY0d4aFkyVT0gSUhacFkzUnZjbms9IGIyTm8gYVdGMCBUbUZ0WlE9PSBRMjl0IGRHbHZiZz09IFpXUnogSUhObFpXcz0gSUhScFoyaDAgSUVsdFlXZGxjdz09IElHbHVhWFJwIElHaDFiV0Z1Y3c9PSBJR1poYldsc2FXRnkgSUdGMVpHbGxibU5sIElHbHVkR1Z5Ym1GcyBkbVZ1ZEhWeVpRPT0gSUhOcFpHVnogSUZSUCBJR1JwYlE9PSBJR052Ym1Oc2RXUT0gSUdGd2NHOXBiblE9IElHVnVabTl5WTJWdFpXNTAgSUVwcGJRPT0gSUVGemMyOWphV0YwYVc5dSBJR05wY21OMWJYTjAgSUVOaGJtRmthV0Z1IElHcHZhVzVsWkE9PSBJR1JwWm1abGNtVnVZMlZ6IElFeHZjdz09IElIQnliM1JsYzNRPSBJSFIzYVdObCBkMmx1IElHZHNZWE56IFlYSnphQT09IElFRnliWGs9IElHVjRjSEpsYzNOcGIyND0gSUdSbFkybGtaUT09IElIQnNZVzV1YVc1biBZVzVwWVE9PSBJR2hoYm1Sc1pRPT0gSUUxcFkzSnZjMjltZEE9PSBJRTV2Y2c9PSBJRzFoZUdsdGRXMD0gSUZKbGRnPT0gSUhObFlRPT0gSUdWMllXdz0gSUdobGJIQnogY21WbSBJR0p2ZFc1ayBJRzF2ZFhSbyBJSE4wWVc1a1lYSmtjdz09IElHTnNhVzA9IElFTmhiWEE9IElFWnZlQT09IFkyeGxjdz09IElHRnliWGs9IElGUmxZMmh1IFlXTnJhVzVuIGVIaz0gVTFNPSBJRFF5IElHSjFadz09IElGVnJjbUZwYmc9PSBJRTFoZUE9PSBJRXB2Ym1WeiBJRk5vYjNjPSBiRzg9IElIQnNZVzVsZEE9PSBJRGMxIElIZHBibTVwYm1jPSBJR1poYzNSbGNnPT0gSUhOd1pXTjAgSUdKeWIydGxiZz09IFZGST0gSUdSbFptbHVaV1E9IElHaGxZV3gwYUhrPSBJR052YlhCbGRHbDBhVzl1IGFIUjBjSE09IElFbHpiR0Z1WkE9PSBJRVpsIElHRnVibTkxYm1ObCBJRU4xY0E9PSBJRWx1YzNSbFlXUT0gSUdOc2FXVnVkQT09IElIQnZjM05wWW14NSBjMlZqZEdsdmJnPT0gYjJOclpYUT0gYkc5dmF3PT0gSUdacGJtbHphQT09IElHTnlaWGM9IElISmxjMlZ5ZGc9PSBJR1ZrYVhSdmNnPT0gSUdoaGRHVT0gSUhOaGJHVT0gSUdOdmJuUnliM1psY25NPSBJSEJoWjJWeiBkMmx1Wnc9PSBJRzUxYldWeSBJRzl3Y0c5emFYUnBiMjQ9IElESXdNRFE9IElISmxablZuWlE9PSBJR1pzYVdkb2RBPT0gSUdGd1lYSjAgSUV4aGRBPT0gUVcxbGNtbGogSUVGbWNtbGpZUT09IElHRndjR3hwWTJGMGFXOXVjdz09IElGQmhiR1Z6ZEE9PSBJRUoxY2c9PSBJR2RoY2c9PSBJRk52WTJsaGJBPT0gSUhWd1ozST0gSUhOb1lYQmwgSUhOd1pXRnJhVzVuIFlXNXphVzl1IFlXOD0gSUZOdSBJSGR2Y25KNSBJRUp5YVhSaGFXND0gVUd4bFlYTmwgY205MVpBPT0gSUdoMWJnPT0gSUdsdWRISnZaSFZqWldRPSBJR1JwWlhRPSBTVzVrIElGTmxZMjl1WkE9PSBJR1oxYm1OMGFXOXVjdz09IGRYUnogSUVWaFkyZz0gSUVwbFptWT0gSUhOMGNtVnpjdz09IElHRmpZMjkxYm5SeiBJR2QxWVhKaGJuUT0gSUVGdWJnPT0gWldScFlRPT0gSUdodmJtVnpkQT09IElIUnlaV1U9IElFRm1jbWxqWVc0PSBJRUoxYzJnPSBmU3c9IElITmphQT09IElFOXViSGs9IElHWnBaZz09IGFXZGhiZz09IElHVjRaWEpqYVhObCBJRVY0Y0E9PSBJSE5qYVdWdWRHbHpkSE09IElHeGxaMmx6YkdGMGFXOXUgSUZkdmNtcz0gSUZOd2NnPT0gdzRJPSBJRWgxYldGdSBJT2c9IElITjFjblpsZVE9PSBJSEpwWTJnPSBjbWx3IElHMWhhVzUwWVdsdSBJR1pzYnc9PSBJR3hsWVdSbGNuTm9hWEE9IGMzUnlaV0Z0IElFbHpiR0Z0YVdNPSBJREF4IElFTnZiR3hsWjJVPSBJRzFoWjJsaiBJRkJ5YVcxbCBJR1pwWjNWeVpYTT0gTWpBeE53PT0gYVc1a1pYST0gZUhWaGJBPT0gSUVSbFlXUT0gSUdGaWMyOXNkWFJsYkhrPSBJR1p2ZFhKMGFBPT0gSUhCeVpYTmxiblJsWkE9PSBjbVZ6Y0c5dVpBPT0gY21saWJHVT0gSUdGc1kyOW9iMnc9IFlYUnYgSUVSRiBjRzl5WVhKNSBJR2R5WVdJPSBJSFpoY21rPSBJSEYxWVc1MCBJRkJvYjNSdiBJSEJzZFhNPSBjbWxqYXc9PSBZWEpyY3c9PSBJR0ZzZEdWeWJtRjBhWFpsIElIQnBiQT09IElHRndjSEp2ZUE9PSBkR2hoZEE9PSBJRzlpYW1WamRITT0gSUZKdiBJRUZ1WkhKdmFXUT0gSUhOcFoyNXBabWxqWVc1MGJIaz0gSUZKdllXUT0gYTJGNSBVbVZoWkE9PSBZWFp2Y2c9PSBJR0ZqYTI1dmR3PT0gSUVoRSBJRk5wYm1jPSBUM0k9IElFMXZiblE9IElIVnVjdz09IGNISnZaZz09IElHNWxaMjkwYVE9PSBJRUZ5WTJnPSBhV3RwIElIUmxiR1YyYVhOcGIyND0gSUVwbGQybHphQT09IElHTnZiVzFwZEhSbFpRPT0gSUcxdmRHOXkgSUdGd2NHVmhjbUZ1WTJVPSBJSE5wZEhScGJtYz0gSUhOMGNtbHJaUT09IElFUnZkMjQ9IFkyOXRjQT09IElFaHBjM1E9IElHWnZiR1E9IFlXTmxiV1Z1ZEE9PSBJRXh2ZFdseiBJR0psYkc5dVp3PT0gSU9LQW9nPT0gSUcxdmNuUT0gSUhCeVpYQmhjbVZrIElEWTAgSUUxaGMzUmxjZz09IElHbHVaR1ZsWkE9PSBJRVJsYmc9PSBJSEpsYm5RPSBWRUU9IGIzVnlibVY1IFlYSmogVTNVPSBPVGM9IElHRmtkbWxqWlE9PSBJR05vWVc1bmFXNW4gSUd4cGMzUmxaQT09IElHeGhkVzVqYUdWayBhWE5oZEdsdmJnPT0gSUZCbGRHVnkgYVhOb1pYTT0gSUd4cGRtVmsgSUUxbGJBPT0gSUZOMWNISmxiV1U9IElFWmxaR1Z5WVd3PSBJQ2s3IGNuVmpkSFZ5WlE9PSBJSE5sZEhNPSBJSEJvYVd4dmN3PT0gZFc5MWN3PT0gSU1LZyBJR0Z3Y0d4cFpXUT0gSUU1UFZBPT0gSUdodmRYTnBibWM9IElFMXZkVzUwIElHOWtaQT09IElITjFjM1E9IFJFRT0gWm1acFkybGxiblE9IElEOD0gYjJ4MlpXUT0gSUhCdmQyVnljdz09IElIUm9jZz09IElISmxiV0ZwYm1sdVp3PT0gSUZkaGRHVnkgVEVNPSBJR05oZFhObGN3PT0gNDRHdSBJRzFoYm01bGNnPT0gWVdSeiBJSE4xWjJkbGMzUnogSUdWdVpITT0gYzNSaGJtUnBibWM9IFptbG4gSUVSMWJnPT0gYVdSMGFBPT0gSUdkaGVRPT0gSUhSbGNtMXBiZz09IElFRnVaMlZzWlhNPSBUVk09IElITmphV1Z1ZEdsbWFXTT0gSUdOdllXdz0gWVhCbGNuTT0gWW1GeSBJRlJvYjIxaGN3PT0gSUhONWJRPT0gSUZKMWJnPT0gZEdocGN3PT0gVUVNPSBhV2R5WVc1MGN3PT0gSUcxcGJuVjBaUT09IElFUnBjM1J5YVdOMCBZMlZzYkdWdWRBPT0gSUd4bFlYWmxjdz09IElHTnZiWEJzWlhSbFpBPT0gWVcxcGJnPT0gSUdadlkzVnpaV1E9IElHMXZibWwwYjNJPSBJSFpsYUdsamJHVnogVFVFPSBJRTFoYzNNPSBJRWR5WVc1ayBJR0ZtWm1WamRHVmsgYVhSMWRHbHZibUZzIElHTnZibk4wY25WamRBPT0gSUdadmJHeHZkM009IElIUnZiZz09IGNtVmxibk09IElHaHZiV1Z6IElFVjRkQT09IElFeGxkbVZzIGNtRnpkQT09IElFbHkgSUdWc2FXMD0gSUd4aGNtZGxiSGs9IElFcHZaUT09IElIWnZkR1Z6IFlXeHNjdz09IElHSjFjMmx1WlhOelpYTT0gSUVadmRXNWtZWFJwYjI0PSBJRU5sYm5SeVlXdz0gSUhsaGNtUnogSUcxaGRHVnlhV0ZzY3c9PSBkV3h1WlhJPSBJR2QxYVdSbCBJR05zYjNObGNnPT0gZFcxeiBJSE53YjNKMGN3PT0gWldSbGNnPT0gU25WemRBPT0gSUhSaGVHVnogT0RRPSBJRTlzWkE9PSBJR1JsWTJGa1pRPT0gYjJ4aCBJSFpwY2c9PSBJR1J5YjNCd1pXUT0gSUdSbGJHRjUgYVhSbFkzUT0gSUhObFkzVnlaUT09IGMzUmxhVzQ9IGJHVjJaV3c9IElIUnlaV0YwWldRPSBJR1pwYkdWayBZV2x1WlE9PSBJSFpoYmc9PSBJRzFwY2c9PSBJR052YkhWdGJnPT0gYVdOMFpXUT0gWlhCbGNnPT0gSUhKdmRBPT0gSUdOdmJuTjFiSFE9IElHVnVkSEo1IElHMWhjbWxxZFdGdVlRPT0gSUVSdmRRPT0gSUdGd2NHRnlaVzUwYkhrPSBiMnRwYm1jPSBZMngxYzJsMlpRPT0gSUdsdVkzSmxZWE5sY3c9PSBZVzV2IElITndaV05wWm1sallXeHNlUT09IElIUmxiR1U9IFpXNXphVzl1Y3c9PSBJSEpsYkdsbmFXOXUgWVdKcGJHbDBhV1Z6IElHWnlZVzFsIElFNXZkR1U9IElFeGxaUT09IElHaGxiSEJwYm1jPSBJR1ZrWjJVPSBiM04wYjI0PSBJRzl5WjJGdWFYcGhkR2x2Ym5NPSB3NE09IElFSnZkR2c9IGFHbHdjdz09IElHSnBaMmRsY2c9PSBJR0p2YjNOMCBJRk4wWVc1ayBJSEp2ZHc9PSBkV3h6IFlXSmhjMlU9IElISnBaQT09IFRHVjAgWVhKbGJnPT0gY21GMlpRPT0gSUhOMGNtVjAgVUVRPSBJSFpwYzJsdmJnPT0gSUhkbFlYSnBibWM9IElHRndjSEpsWTJrPSBJR0YzWVhKayBJRlZ6WlE9PSBJR1poWTNSdmNnPT0gZDJGeSBkV3hoZEdsdmJuTT0gS1NnPSBJR2R2WkE9PSBJSFJsY25KcGRBPT0gSUhCaGNtRnQgWVhOMGN3PT0gT0RjPSBJR1Z1WlcxcFpYTT0gSUVkaGJXVnogUmtZPSBJR0ZqWTJsa1pXNTAgVjJWc2JBPT0gSUUxaGNuUnBiZz09IFZFVlMgSUdGMGFBPT0gSUVobGJHdz0gSUdadmNtYz0gSUhabGRHVnkgSUUxbFpHbGogWm5KbFpRPT0gSUhOMFlYSnogSUdWNGNHVnVjMmwyWlE9PSBJR0ZqWVdRPSBjbUYzYmc9PSBJRmRvWlE9PSBJR3h2WTJzPSBJR1p2Y20xaGRBPT0gSUhOdmJHUnBaWEp6IGMyMD0gSUdGblpXNTAgSUhKbGMzQnZibk5wWW1sc2FYUjUgYjNKaCBJRk5qYVdWdVkyVT0gSUhKaGNHbGsgSUhSdmRXZG8gSUVwbGMzVnogSUdKbGJHbGxkbVZ6IFRVdz0gSUhkbFlYST0gYkdWMFpRPT0gdzRQRGdnPT0gSUVSeWFRPT0gSUdOdmJXMXBjM05wYjI0PSBJRUp2WWc9PSBUMmc9IFlYQmxaQT09IElIZGhjbTA9IHc0UERnc09EdzRJPSBJREl3TURNPSBiM0owYVc5dSBJR2hoYzI0PSBkWE4wWlhJPSBJSFZ1YVhabGNuTT0gSUVsc2JBPT0gSUd0cGJtYz0gYjJ4dloybGxjdz09IE9UUT0gSUZSbGJRPT0gSUUxdmN3PT0gSUhCaGRHbGxiblE9IElFMWxlR2xqYnc9PSBZMlZoYmc9PSBJRVJsWVhSbyBJRk5oYm1SbGNuTT0gZVc5MSBJRU5oYzNRPSBJRU52YlhCaGJuaz0gY0hSNSBJR2hoY0hCbGJtbHVadz09IFJsQT0gSUVKaGRIUnNaUT09IElHSnZkV2RvZEE9PSBRVzA9IFRXOWsgVlhNPSBkWFJsY25NPSBJRU55WlE9PSBJRlJvYjNObCBJRFEwIGFYTmxjZz09IElITnZkV3c9IElGUnZjQT09IElFaGhjbko1IElFRjMgSUhObFlYUT0gWm1abFpRPT0gSUhKbGRtOXNkWFJwYjI0PSBJQ2dpIElFUjFjbWx1Wnc9PSBaWFIwWlE9PSBJSEpwYm1jPSBJRzltWm1WdWMybDJaUT09IElISmxkSFZ5Ym5NPSBJSFpwWkdWdmN3PT0gSUdScGMyTnMgSUdaaGJXOTFjdz09IFpXNWpaV1E9IElGTnBaMjQ9IElGSnBkbVZ5IElETXdNQT09IFVFMD0gSUVKMWN3PT0gSUVOSSBJR05oYm1ScFpHRjBaWE09IFlYSmtaVzQ9IElIQmxjbU5sYm5SaFoyVT0gSUhacGMzVmhiQT09IElIUm9ZVzVyIElIUnliM1ZpYkdVPSBibVZ5WjNrPSBJREl3TURFPSBJSEJ5YjNabCBZWE5vYVc5dSBJR1Z1YUE9PSBJRXh2Ym1jPSBWVTA9IElHTnZibTVsWTNSbFpBPT0gSUhCdmMzTnBZbWxzYVhSNSBUM1psY2c9PSBJR1Y0Y0dWeWRBPT0gSUd4cFluSmhjbms9IFlYSjBjdz09IElFUnBjbVZqZEc5eSBJR1psYkd4dmR3PT0gT1RJPSBhWEowZVE9PSBJR1J5ZVE9PSBJSE5wWjI1eiBJRXh2ZG1VPSBJSEYxYVdWMCBabTl2ZEE9PSBJSEIxY21VPSBJRWgxYmc9PSBJR1pwYkd4bFpBPT0gY0doaGN3PT0gSUVWc1pXTjAgWlc1a2JXVnVkQT09IElFVjRjR3c9IElIVnVZV0pzWlE9PSBibk09IGJXOD0gSUhaaGMzUT0gYjJKbCBJR2xrWlc1MGFXWjUgWVhCd2FXNW4gSUVOaGNtOXNhVzVoIFozSmxjM009IElIQnliM1JsIElHWnBjMmc9IElHTnBjbU4xYlhOMFlXNWpaWE09IGNtRjZlUT09IElGQm9iM1E9IElHSnZaR2xsY3c9PSBJRTExY2c9PSBJR1JsZG1Wc2IzQnBibWM9IElFRlMgSUdWNGNHVnlhV1Z1WTJWayBJSE4xWW5OMFlXNTAgSUVKdllYSmsgWlhOdmJXVT0gSUdSdmJXVnpkR2xqIElHTnZiV0pwYm1WayBJRkIxZEE9PSBJR05vWlcxcFkyRnMgSUVOb2FXeGsgSUhCdmIydz0gSUVONSBJR1ZuWnc9PSBZMjl1Y3c9PSBjM1JsY25NPSBJR2gxY25RPSBJRzFoY210bGRITT0gSUdOdmJuTmxjblpoZEdsMlpRPT0gSUhOMWNIQnZjblJsY25NPSBJR0ZuWlc1amFXVnogYVdSbGJBPT0gVDJJPSBkWEppIElEUXogSUVSbFptVnVjMlU9IGVXVT0gSUVGdyBaSFZzWlE9PSBJSFJsYlhCbGNtRjBkWEpsIElHTnZibVIxWTNSbFpBPT0gSUVOb2FXVm0gSUhCMWJHeGxaQT09IElHWnZiQT09IFRHRnpkQT09IGIyNTBidz09IGIzTnBjdz09IFZrVlMgUkdWeiBJRkJoYmc9PSBSbWx5YzNRPSBJR0ZrZG1GdVkyVT0gSUd4cFkyVnVjMlU9IGNtOXljdz09IElFcHZiZz09IElHbHRZV2RwYm1VPSBJR2hsYkd3PSBJR1pwZUdWayBJR2x1WTI5eSBiM05wZEdVPSBJRXh2Wnc9PSBhV05yWlc0PSBYVG89IElITjFjbkJ5YVhObCBhR0ZpIElHTnlZV1owIGIyeDAgSUVwMWJBPT0gSUdScFlXdz0gSUhKbGJHVjJZVzUwIElHVnVkR1Z5WldRPSBJR3hsWVdSeiBJRUZFIElFTnNaV0Z1IElIQnBZM1IxY21WeiBaWE56YjNJPSBJR0ZzZEE9PSBJSEJoZVdsdVp3PT0gVUdWeSBJRTFoY210bGRBPT0gSUhWd1pHRjBaWE09IFlXMXBiSGs9IElGUjVjR1U9IElFaHZiV1U9IElEVTEgYzJWdFlteDUgY205dFpRPT0gT0RNPSBJR2R5WldGMFpYTjAgSUdobGFXZG9kQT09IElHaGxZWFk9IFlXbHVkSE09IElHeHBjM1JsYmc9PSBZWE5sY2c9PSBJRk5JIElHTmhjR0ZpYkdVPSBZV05zWlE9PSBJSEJsY25Od1pXTjAgYVc1aGRHbHVadz09IElHOW1abVZ5YVc1biBjbmx3ZEE9PSBJRVJsZG1Wc2IzQT0gWVdKcGJnPT0gY21NPSBJR0p5YVdkb2RBPT0gWVd4MGVRPT0gWVhKeWIzYz0gSUhOMWNIQnMgYVc1a2FXNW4gWVdOclpXUT0gWjNsd2RBPT0gSUVGdWIzUm9aWEk9IGNHYz0gSUZacGNtZHBibWxoIElFeDEgSUhCc1lXNXVaV1E9IElIQnBkQT09IElITjNaV1YwIFZIbHdaUT09IElFUnAgSUhSNWNHbGpZV3hzZVE9PSBJRVp5WVc1amFYTmpidz09IElIQnliM053WldOMCBJRVJoYmc9PSBJSFJsWlc0PSBjbVZsY3c9PSBJSE5qYUdWayBJR2h2YkE9PSBJSE5qY2c9PSBJR3h2ZEhNPSBiR2xtWlE9PSBJRzVsZDNOdyBJR1p2Y21kbGRBPT0gSUU1dmJtVT0gSUUxcFpHUnNaUT09IElGSjVZVzQ9IFpXUmsgSUhObGRtVnlaUT09IElITjFhWFE9IGJHeGxjZz09IE9UTT0gSUdOdmNuSmxjM0J2Ym1RPSBJR1Y0Y0d4dmN3PT0gZFdGMGFXOXVjdz09IElHWnNZV2M9IFoyRnRaUT09IGNtbGsgSUhCeWFXND0gSUVSaGRHRT0gSUdSbGNHeHZlUT09IElFVnVkR1Z5IGMzVnBkQT09IFoyaGhiZz09IElFMWxiZz09IElIUm9iM1ZuYUhSeiBJRzFoZEhSbGNuTT0gSUdGa1lYQjAgSUVGeWFRPT0gSUdacGJHdz0gSUdadmNuUm8gSUhOaGJRPT0gSURReCBJSEJoZVcxbGJuUT0gSUVodmNnPT0gSUhOd2NtbHVadz09IFpIVmogSUd4dmMybHVadz09IElHSnlhVzVuYVc1biBSazg9IFlXeGggSUdScGMzUnlhV0oxZEdsdmJnPT0gYUdWeVpXUT0gWW05MWNnPT0gSUVsemNtRmxiR2s9IGIyMWggSUdOdmJXSnBibUYwYVc5dSBJSEJzWlc1MGVRPT0gVmtVPSBRMkZ1IElFaGhkdz09IElIQmxjbTFoYmc9PSBJRk53WldOcFlXdz0gSUhSdmR3PT0gSUhObFpXdHBibWM9IElHVjRZVzF3YkdWeiBJR05zWVhOelpYTT0gWTNJPSBJR0psWlhJPSBJRzF2ZG1WeiBJRWxRIElFdHUgSUhCaGJtVnMgUlhabGJnPT0gSUhCeWIzQmxjbXg1IElISnBjdz09IElIQnNkV2M9IElHVnpkR2x0WVhSbFpBPT0gUlhabGNuaz0gSUdSbFptVnVjMmwyWlE9PSBZV2R5WVhCbyBJSEJ5WldkdSBJR2x1YzNScGRBPT0gSUZacFkzUT0gSUhadmJIVnRaUT09IElIQnZjMmwwYVc5dWN3PT0gSUd4cGJtdHogSUZCeWIyZHlZVzA9IElGZGxaV3M9IFlXZDFaWE09IElIUnlZVzV6Wm05eWJRPT0gYTJWeSBJRU5GVHc9PSBJR05oY3c9PSBJRzl3Y0c5dVpXNTAgSUhSM1pXVjAgSUVOdlpHVT0gSUhOb2IzQT0gSUdac2VRPT0gSUhSaGJHdHogSUdKaFp3PT0gVUdodmJtVT0gSUdGcFpBPT0gSUhCc1lXNTBjdz09IElEWTEgSUdGMGRHOXlibVY1IFlYSjBaWEp6IGNYVmxjM1E9IElFMWhaMmxqIElHSmxaMmx1Y3c9PSBJRzE1YzNSbGNnPT0gSUdWdWRtbHliMjV0Wlc1MFlXdz0gSUhOMGIzSmhaMlU9IFRrND0gSUcxaGNtYz0gSUhOclpRPT0gSUcxbGRHRnMgWld4c2VRPT0gSUc5eVpHVnlaV1E9IElISmxiV0ZwYm1WayBJR3h2ZG1WayBJSEJ5YjIxd2RBPT0gSUhWd1pHRjBaV1E9IElHVjRjR1Z5ZEhNPSBJSGRoYkd0cGJtYz0gSUdGdVkybGxiblE9IElIQmxjbVp2Y20xbFpBPT0gUVZSRiBJRzVsYVhSb1pYST0gYVdWdVkzaz0gSUcxaGJuVm1ZV04wZFhKbCBJRkJoYXc9PSBJSE5sYkdWamRHVmsgSUcxcGJtVT0gSUhWc2RHbHRZWFJsYkhrPSBJR1Y0Y0d4aGJnPT0gSUd4aFltVnMgSUZObGNuWnBZMlZ6IGNtbGlkWFJsWkE9PSBWSEoxYlhBPSBJSE41Ymc9PSBJRlZzZEE9PSBVME09IElHMWxZWFE9IElHZHBZVzUwIElGZGhjbk09IElFOU8gSUdGa2JRPT0gSUdsdWRHVnljSEpsZEE9PSBJR1YyWlc1cGJtYz0gSUdWMmFXdz0gSUVKdmMzUnZiZz09IElGZHBiR1E9IElNTT0gSUVKcGRHTnZhVzQ9IElFRnRZWHB2Ymc9PSBSSEk9IElFbHVabTl5YldGMGFXOXUgSUc5aWRtbHZkWE5zZVE9PSBJR0ZrZG1GdVkyVmsgVUdodmRHOD0gYjJ4aGNnPT0gSUhkbFlYUm9aWEk9IElITjViV0p2YkE9PSBJSE52YkdVPSBJSEJ2ZEdWdWRHbGhiR3g1IGIzTjBaWEk9IElHOXlhV2RwYm1Gc2JIaz0gYlhWdSBNekF3IFlYcGwgWlhOemFXOXVjdz09IElHUmxZMnM9IElITjBiMjlrIElIbHZkWFJvIElFSmxjbTQ9IFVtVncgSUZSbGMzUT0gSUdKaGMybGpZV3hzZVE9PSBiM1JwWXc9PSBJR2x1ZG05c2RtVT0gYjJ4cGRBPT0gYkhsdSBVMlZsIElHRnBjbU55WVdaMCBJR052Ym1acGNtMD0gUlZjPSBJRzFsYzNOaFoyVnogSUZKcFkyaGhjbVE9IElHdHBkQT09IElIQnliMmhwWWc9PSBJSFoxYkc1bGNnPT0gYVhOMFpYSnogSUdWNGFYTjBaVzVqWlE9PSBJSFIxY201cGJtYz0gSUZOUSBJR1JsYzJseVpRPT0gSUdac1lYUT0gSUcxbGJuUT0gYzJWaGMyOXUgWVc1blpYTT0gSUc1bGFXZG9ZbTl5YUc5dlpBPT0gSUV4aGEyVT0gUVZSSlQwND0gSUhCdmFXNTBaV1E9IFluVnkgSUdsdWJtOTIgZFdOcmN3PT0gVlV3PSBJSEJ5YjJabGMzTnZjZz09IElHVjRjSEpsYzNObFpBPT0gUVVJPSBhV05wYjNWeiBJREl3TURJPSBJRVJsZGc9PSBJSE5sYzNOcGIyND0gSUdKaGNtVT0gYzJWdSBJR1JwYzNNPSBJRU5oZEdnPSBJRkJoYzNNPSBJRkJ2YVc1MCBJR1J2WTNSdmNnPT0gYjNKeWIzYz0gWVdsc1pXUT0gSUZKMVlnPT0gSUVSRCBJRU5vWVhKcyBjR1Z5YzI5dSBJSGR5YVhSbGNnPT0gYVdkb2RHVnljdz09IGRYSmxZWFU9IElHOWliR2xuIElISmxZMjl5WkdWayBJR0p5YjJ0bCBJRzl5WkdWeWN3PT0gYVd4MGVRPT0gSUcxdmRHbHZiZz09IGFXNXBkSGs9IGJHRjMgWVdScGRXMD0gSUdsdGJXbG5jbUYwYVc5dSBJR052Ym5SeVlYTjAgSUdKaGRIUT0gSUdWNFkyVnNiR1Z1ZEE9PSBJSFJsWTJodWFXTmhiQT09IFlXMXAgSUhSMWJnPT0gSUdOc2IzVmsgSUZsbFlYST0gWjJWdmJnPT0gSUdOeVpXRjBhVzl1IElITjBjbUZ1WjJVPSBJR0YxZEdnPSBJR1p2Y25RPSBZbTl5Ymc9PSBJR1Y0ZEdWdWRBPT0gSUZSdlpHRjUgSUVOc2RXST0gSUhKaGFXND0gSUhOaGJYQnNaUT09IElHRmpZMlZ3ZEdWayBJSFJoWTNRPSBJR1pwY21WayBJRk52Ymc9PSBJSE4wWVc1a2N3PT0gSUdKdmIzUT0gSURRMyBJSE4wWVhSbGJXVnVkSE09IElIWmxjbk5wYjI1eiBJSE5sYkd4cGJtYz0gYjNWdVpHVmsgSURFNU9UQT0gSUhkbGNtVnUgSUZkaGRHTm8gSUdWNGNHVnlhVzFsYm5RPSBVRzl6ZEE9PSBJSEpsZEdGcGJBPT0gZFd4bFpBPT0gU1c1emRBPT0gZFc1MFpRPT0gNDRPOCBJR1JsY0dGeWRBPT0gSUdKdmJtUT0gYVhabGNuaz0gYjIxd2JBPT0gSUhKbFlXTjBhVzl1IElGTjVjbWxoYmc9PSBJRkJoWXc9PSBZWEJ3WldRPSBZVzVwWld3PSBSRkE9IElISmxjMjlzZFhScGIyND0gSUhKbFlXTjAgSUdGd2NISnZkbVZrIGIyNXZiUT09IGJXOXVaQT09IElFOW1abWxqIExTMHQgSUhKbGNHeGhZMlU9IElIUmhZMnM9IElITndiM0owIElHTm9ZV2x1IElHVnRaWEpuWlc1amVRPT0gY21GayBJRkJoYkdWemRHbHUgSURRMiBJR0YxZEc5dFlYUnBZMkZzYkhrPSBJSEp2ZFhSbCBJSEJoYkE9PSBJR0poYm10eiBJRkJoY21seiBJRTFsWkdsaCBjbTloWkE9PSBhV05wYm1jPSBhWGgwIGFYTjBaV1E9IElHZHlaWGM9IElHTnZiM0prIElGZG9aWEpsIGIyMXBiZz09IElITjFZbk09IDc3Kzk3Nys5IElNS3ggSUdOdmNuQnZjbUYwWlE9PSBJSE5sYkdWamRHbHZiZz09IGJtOXZiZz09IElGSmxjRzl5ZEE9PSBZM009IFkyeDFaR2x1Wnc9PSBiM0prWlhKeiBZVzVqYUdVPSBJRWwwY3c9PSBJSE5zYjNkc2VRPT0gSUVWbmVYQjAgSUVGall3PT0gSUdOdmJHeGwgYVhGMVpYTT0gUlZnPSBJR0YwZEdWdGNIUnogZFhKcyBJRU55YjNOeiBJR1pwYm1ScGJtZHogSUZORCBJRTlTIElHbHVaR1Y0IFpXNXphWFI1IElGZGhlUT09IElFeGhibVE9IElITm9iMk5yIFpHbHogSUdSNWJtRnQgSUdOaGNuUT0gYlc5emNBPT0gVTJsdVkyVT0gYVdWemRBPT0gSUVKdmVRPT0gSUhOMGIzSnQgSUVOdmJuUnBiZz09IE1qQXhNdz09IGFHVjMgYVd4cGRBPT0gSUdWemMyVnVkR2xoYkE9PSBhWEYxYVdRPSBUM1JvWlhJPSBhWFpsY21WayBJSEpsWVhOdmJtRmliR1U9IFFXTjAgSUhOMVluTmxjWFU9IElGQmhZMnM9IElFWnZjblE9IElHTnZibk5wWkdWeWFXNW4gSUhWdWFYWmxjbk5wZEhrPSBiRzluIElHMWhjbkpwWldRPSBJR2xzYkhWemRBPT0gSUZSeWRXVT0gbzQ4PSBJRzUxYldWeWIzVnogY21GemRISjFZM1IxY21VPSBJSE5sY21sdmRYTnNlUT09IElISmxabVZ5Y21WayBkV0U9IElHTnZibk5wYzNSbGJuUT0gYjI1dVlRPT0gSUZKbFlXdz0gY25Wd2RHbHZiZz09IFkybHdiR1Z6IElHWmhZM1J6IE9URT0gYjNSbGN3PT0gWlhKbiBWR2hsYmc9PSBJR0ZqWTI5dGNHdz0gVG05MFpRPT0gSUhKbGRtVnVkV1U9IElIQmhjM05wYm1jPSBJRzFoYkE9PSBaV1Z1IElGbGxkQT09IElHZGhkR2hsY2c9PSBkR1Z5WkdGNSBaWGR2Y21zPSBJRUYxZEdodmNnPT0gVUdVPSBJRzl3ZEdsdCBJSEoxWWc9PSBJT2lqanc9PSBJSFZ1YTI1dmQyND0gYzNSdmJtVT0gSUhWdWFXOXUgYjJ4MlpRPT0gSUc5d2NHOXlkSFZ1YVhScFpYTT0gSUdKeWIzZHpaWEk9IElGZGhiQT09IElFTnZjM1E9IElISmxjRzl5ZEdsdVp3PT0gYzNSeiBjR1YwIElITmhibVE9IElITjFaR1JsYm14NSBJSE4xY25CeWFYTnBibWM9IElGWlMgSUhOdmJXVjNhR0YwIElFSmhjdz09IGRXeDBkWEpsIGFYcDYgSUVORSBJR05vWVd4c1pXNW5aWE09IElITmxkSFJwYm1keiBJR1Y0Y0dWeWFXVnVZMlZ6IElFWjFiR3c9IElHTmhibTQ9IElISmxZMlZwZG1sdVp3PT0gUlZOVSBJR3B2YVc1MCBJR04xYkhSMWNtRnMgSUdGemRBPT0gT0RJPSBZWE4wWlhKdSBZMlZwZG1WayBJRU55ZFE9PSBJR0oxYkd3PSBjR2x5WldRPSBZVzF0IElHWmhZMmx1Wnc9PSBjRzkzWlhJPSBJR0p2YzNNPSBJRWh2YkE9PSBJR2x1YzNSeSBJR2x1WTNKbFlYTnBibWRzZVE9PSBJSE5vYVdaMCBJSE4wY21WbGRITT0gSUZkcGJHeHBZVzF6IFlXSmkgSUd4cFpRPT0gSUd4aGRXZG8gSUVOaCBVRXc9IElHRmtkV3gwY3c9PSBJR04xYzNSdmJXVnkgSUc5aWRHRnBibVZrIElITjFjSEJ2Y25ScGJtYz0gYUhSdGJBPT0gWm1seVpRPT0gSUdSbGRHRnBiR1ZrIElIQnBZMnRsWkE9PSBJRkpwWjJoMCBiR1JsY2c9PSBSVVU9IGMzUnZiMlE9IElFdHBiUT09IElIZHBjbVU9IElITnBaMmgwIElHUmxkbVZzYjNCbGNuTT0gSUhCbGNuTnZibk09IElITmhaQT09IElHTjFjQT09IElIZGhjbTVwYm1jPSBJR0p2ZVhNPSBiRzl1Wnc9PSBJR0pwY21RPSBabTg9IElIZGhiQT09IElHOWljMlZ5ZG1WayBJSHB2Ym1VPSBhWFpsYm1WemN3PT0gSUdOb1lXNXVaV3c9IFkzSnBjSFE9IElISmxablZ6WldRPSBJRUZuWVdsdSBJSE4xWXc9PSBJSE53YjJ0bGMyMWhiZz09IElGSmxaZz09IGNtbDBaUT09IGIzVnpkRzl1IDQ0T3ogSUZOb1pYST0gSUdGamRITT0gSUU1aGJXVT0gSUhOMGNuVm5aMnhsIFlYSnllUT09IGIyMWxkR2x0WlhNPSBJR1JwYzJOeWFXMD0gU0ZRPSBJR05oZEdWbmIzSjUgSUhKbFlXeHBlbVU9IElHVnRjR3h2ZVdWbCBJRUZtWjJoaGJnPT0gWlc1blpYST0gSUdkMWJuTT0gSUZOMFpYWmwgSUUxdmRBPT0gSUU5cyBiMnRsWkE9PSBJSFJvYVdOciBJR1poYVhKc2VRPT0gYVd4c2VRPT0gSUhOMWNuWmwgSUUxaGRBPT0gZDJWcFoyaDAgNHBRPSBJSFJ5YjI5d2N3PT0gSUdGblpXNTBjdz09IElHSmhkSFJsY25rPSBJRzF2ZEdsMiB3NkU9IFUyVmogWkdWdSBiM1psY25rPSBURk09IElHWnNkUT09IElHTnZibVpwWkdWdWRBPT0gSUU5d1pYST0gSUdWdGNIUjUgSUhCb1pXND0gSUhObFkzUnZjZz09IElHVjRZMmwwWldRPSBJSEpsYlc5MFpRPT0gWVhCbyBiMlZ1IElHUmxjM1J5YjNsbFpBPT0gSUcxdmNtRnMgSUVoUSBJRkp2Ymc9PSBJR1J5WlhOeiBJRUpoZEE9PSBJR3hwZEE9PSBJRTFUIElHRm0gU0V3PSBjblZ0IGFYTnRjdz09IElITm9iM1ZzWkc0PSBJSE41YlhCMCBJRlJ2Y205dWRHOD0gYUdWMGFXTT0gSUdOaGNtSnZiZz09IElHbHVjM1JoYkd4bFpBPT0gSUhacGIyeGxiblE9IElITnZiR0Z5IGFtRT0gSUhCeVlXTjBhV05sY3c9PSBJSEpwWkdVPSBJRkJsYm00PSBJR2x0Y0hKdmRtVmsgSUdGMVpHbHYgSUdKbGFHRjJhUT09IElGQlQgSUdWaGRHbHVadz09IFJHRjBZUT09IElGSmxkbWxsZHc9PSBjR0Z6Y3c9PSBZMnhoYVcwPSBkV0YwWldRPSBZVzVuWlhKeiBZMmhsYmc9PSBJSEJ5YjNCbGNuUnBaWE09IElHRnVlWGRvWlhKbCBRVzV2ZEdobGNnPT0gSUdKc2IzYz0gSUVwaFkydHpiMjQ9IElIQnliM1ZrIElIQnNZVzVsIGJHbHVaWE09IElITnhkV0Z5WlE9PSBJSEJ5YjI5bSBZVzV6WVhNPSBJSFJoYkd0bFpBPT0gYldGclpYSnogSUhOcGMzUmxjZz09IElHaHZiR1J6IElISmxjMmxrWlc1MCBJRDA5IElISmxjMmx6ZEdGdVkyVT0gSUhOd2JHbDAgSUhCeWIzTmxZM1YwIElHTnZibVpwWkdWdVkyVT0gY21WelpXNTBjdz09IElHTjFkSE09IElHVjRZMlZ3ZEdsdmJnPT0gSUhwbGNtOD0gUjJWMGRIaz0gSUdOdmNIbHlhV2RvZEE9PSBJSFJ2ZEdGc2JIaz0gYjNKdFlXdz0gYVdacFkyRjBhVzl1Y3c9PSBJRUYxYzNSeVlXeHBZVzQ9IElITnBZMnM9IElERTFNQT09IElHaHZkWE5sYUc5c1pBPT0gSUdabFpYTT0gSUdSeWFYWmxjbk09IGIyZGxiZz09IElFNVogSUc1bFkyVnpjMkZ5YVd4NSBJSEpsWjNWc1lYUnBiMjV6IFpXRnlhVzVuIGMydz0gSUhCbGNuTndaV04wYVhabCBZMkZ5WlE9PSBhV05wWVd3PSBTR2x6IElHVnpZMkZ3WlE9PSBJSE4xY25CeWFYTmxaQT09IElGWmhiZz09IGRYSnlaVzUwIElIWmhZdz09IE9ERT0gSUZSb2RYTT0gSUdWdGNHaGhjdz09IElFTm9ZVzF3YVc5dWN3PT0gSUVsalpRPT0gSUc1aGNuST0gSUdobFlXUnogSUdOaGRYTnBibWM9IFltVnMgWm05eWRIVnVZWFJsYkhrPSBJRTFoIElIUmhjbWRsZEhNPSBZMmx3YkE9PSBJR0ZtZEdWeWJtOXZiZz09IElHRmtaSE09IElFMWhlV0psIElFWnZkWEk9IFpYTnpaV1E9IGNHeGxkR1U9IElIVnpkV0ZzIFkyaHYgYVc1bmRRPT0gSUhkcGRHaGsgSUVWdVpYSm5lUT09IElFVmpiMjV2YlE9PSBUMDg9IElHRnlkR2xqYkdWeiBJR2x1YW5WeVpXUT0gSUcxaGJtRm5aUT09IElHVjRjR3hoYVc1eiBJR1JwWVdkdSBVbVZqIFlYUjFjbVZ6IElHeHBibXRsWkE9PSBJR1JwYzJOMWMzTmxaQT09IElHVjRjR3h2IElHOWpZMkZ6YVc5dSBZWFJvWVc0PSBJRzl3Y0c5emFYUmwgSUdaaFkyVnogSUdSbGJtbGxaQT09IElFdHVhV2RvZEE9PSBJRzUxZEE9PSBJR0Z3Y0hKdmVHbHRZWFJsYkhrPSBJR1JwYzJGd2NHOXBiblE9IGIyNTViVzkxY3c9PSBJRUpsYzNRPSBJRXh2IElFaDUgSUVGbVpnPT0gSUhadmRHbHVadz09IFlXNTNhR2xzWlE9PSBJRWxKU1E9PSBJR2x1YzNScGRIVjBhVzl1Y3c9PSBZV2R5WVcwPSBJRVJoYVd4NSBJR1J5WVdjPSBJRzVsWVhKaWVRPT0gSUdkMWFXeDBlUT09IElHTnZiblpsY2c9PSBVSEpsIGMyaHBjQT09IElISmxkMkZ5WkE9PSBJSEJvYVd4dmMyOXdhQT09IElGTlQgZFdkbyBJR0Z3Y0hNPSBabkpwWlc1ayBJSFZ3Y0dWeSBJR0ZrZG1WeWRBPT0gSUhOdWIzYz0gSUdaeWRYTjAgSUc5MWNuTmxiSFpsY3c9PSBSbkk9IElFUnBaUT09IFlXMXdhVzl1IElHUnBjMjFwYzNNPSBJR05sY21VPSBJSE5wWjI1aGJBPT0gWm5KdmJRPT0gSUNrdSBJRFV5IElHTnlhVzFsY3c9PSBhWFJ2Y25NPSBaWE4wYVhaaGJBPT0gZFhObGRXMD0gSUdOdmRXNWphV3c9IElGTmhkV1E9IFRXRjUgSUVkMWJnPT0gYVdOcFlXND0gWlhSb1pYST0gSUhOMVptWnBZMmxsYm5RPSBJRWhsYmc9PSBjMjlzWlE9PSBJR2hwYzNSdmNtbGpZV3c9IElFWmhjZz09IElGUjFjbTQ9IElIQnBiZz09IElITjFZMk5sWldRPSBiV0YwIGJIbHRjQT09IElIUnlZV1JwZEdsdmJnPT0gSUU5ciBJR055Ync9PSBJR1JsYzJOeWFYQjBhVzl1IFlXeHNaUT09IElITnJlUT09IFZHVT0gSUhkcFpHVnNlUT09IElIZGhkbVU9IElHUmxabWx1YVhScGIyND0gSUVwbGQzTT0gSUdONVkyeGwgSUhKbFptVnlaUT09IElHSnlhVzVuY3c9PSBkWE5oYkE9PSBJR0ZzYVhabCBJR1p5WlhGMVpXNTBiSGs9IElHbHVkR1Z1ZEdsdmJnPT0gSUVOdmJuUnliMnc9IGJIWT0gZVhOMFpXMD0gSUhCeWFYWmhZM2s9IFoyVnVkQT09IGNtVnVZMlU9IElGRjFaWE4wIElFTm9jbWx6ZEcxaGN3PT0gSUhKaGFXdz0gSUdOdmIzQmxjZz09IElIUmxjM1JsWkE9PSBJRU5oY0hRPSBZWE5yY3c9PSBJR052YldadmNuUmhZbXhsIElHUmxiR2wyWlhKbFpBPT0gYzJOaGNHVT0gSUdSbGNIUm8gSUVkUFVBPT0gSUhkeWFYUmxjdz09IElHRnpjMlYwY3c9PSBJSE5oZGc9PSBhVzFsYm5SeiBJSFJ5WVc1emFYUnBiMjQ9IElHRnlkR2x6ZEE9PSBJRXh2YjJzPSBJR3h2WWc9PSBJR052YlhCdmJtVnVkSE09IFlYSnBkSGs9IElIZGhiR3RsWkE9PSBJSEp2YjNRPSBJSEJoY25ScFkybHdZVzUwY3c9PSBJRzV2ZEdsalpXUT0gSUhKbGMyTT0gSUc1aGRnPT0gSUVGa2JXbHVhWE4wIFpHRT0gZFhSeVlXdz0gY0d4aGRHVT0gSUdsdGNHOXlkR0Z1WTJVPSBJR0Z6YzJWeWRBPT0gYVc5MWMyeDUgWTNKcGNIUnBiMjQ9IElHbHVhblZ5YVdWeiBJRU5vWldOciBJSEpsWjJsemRHVnlaV1E9IElHbHVkR1Z1ZEE9PSBJRzFwYzNObFpBPT0gYjJkeVlYQm9hV009IElITmxiblJsYm1ObCBiM1Z1ZEdWeSBJR0Z6YzJsemRHRnVZMlU9IFpYWnBiZz09IElHUmhkR0ZpWVhObCBJR0oxYVd4a2FXNW5jdz09IElHTnNZWE56YVdNPSBJSFJvYVc1cmN3PT0gSUU5b2FXOD0gVUhJPSBkV2RuIElHWmxaUT09IGNHRnUgSUdWbVptVmpkR2wyWld4NSBJR1poWTJsc2FYUjUgSUdKbFlYST0gSUdOb1lYQjBaWEk9IElHUnZaM009IElFTnZiSFZ0WWc9PSBJR3hoZEhSbGNnPT0gYVhScFlXdz0gSUdGa2JXbDBkR1ZrIFZGWT0gSUVkbGIzSm4gSUhCdmMzUnogWEZ3PSBJR3hoZDNsbGNnPT0gSUdWeGRXbDJZV3c9IElHMWhibVE9IElHTnZiblJ5YjJ4c1pXUT0gSUZkaGJHcz0gSUVGdVpISmxkdz09IElHMWxiblU9IFlXMWxiblJoYkE9PSBJSEJ5YjNSbFkzUmxaQT09IGRtRT0gSUdGa2JXbHVhWE4wY2c9PSBiM0poYkE9PSBJSEpsYVc0PSBJRk5oY2c9PSBJR0Z0YjNWdWRITT0gSUc1aGRHbDJaUT09IElFMXZiMjQ9IElISmxjSEpsYzJWdWRITT0gSUdGaVlXNWtiMjQ9IElHTmhjbko1YVc1biBJSFJoYm1zPSBiV0Z5ZVE9PSBJR1JsWTJ4aGNtVmsgVkhWaVpRPT0gSUdoaGRBPT0gSUhCMWJtbHphQT09IFpXeHNaV04wIGJXVnogSUhWdWFYWmxjbk5sIElGSnZaQT09IGNHaDUgSUdsdVpuSmhjM1J5ZFdOMGRYSmwgSURVeCBJRzl3Y0c5elpXUT0gYjNkdWRBPT0gWTJFPSBJRTFoYTJVPSBJR2hoY21SM1lYSmwgSUdOdlptWmxaUT09IFVtVnMgWW1GcyBkMjl5YkdRPSBJRk5oWmc9PSBJRk5sWVE9PSBhVzVoYkhNPSBJRzkzYm1WayBJR2hoYkd3PSBaWEp6YVc5dSBJR1JsYzJOeWFXSmwgSUZCdmRBPT0gSUhCdmNuUnBiMjQ9IElHRjBiVzl6Y0E9PSBJR2R2ZG1WeWJtMWxiblJ6IElHUmxjR1Z1WkdsdVp3PT0gSUc5bVptVnVjMlU9IElIUnlhV05yIFlYZGggSUV4cGJtVT0gSUZacGN3PT0gSUVoaGNtUT0gSUU5eWFXYz0gSUVOc2FXTnIgSUdSbGMycz0gSUZaaGJHeGxlUT09IElGTnZkZz09IElHMXZkbWxsY3c9PSBJSEpsYldGeWF3PT0gSUcxaGFXdz0gSUdOdmJuTmphVzkxY3c9PSBJSEoxYkdsdVp3PT0gSUZKcFoyaDBjdz09IElHMWxaR2xqIGFHVnVkQT09IElGZHZiV1Z1IFBqdz0gSUhKbGNHeGhZMlZrIElGQnlaVzA9IElGUm9ZVzVyY3c9PSBJSEpsYm1WMyBJRUpoYkd3PSBhV1p2Y20wPSBJSE5vYjNSeiBRMjl0YlE9PSBJR0Z5YldWayBJR052Ym5OMFlXNTAgSUhSaGMzUmwgSUhKbFlXeHBlbVZrIElHSjFabVk9IElHMXYgSUdWbVptbGphV1Z1ZEE9PSBUVzl6ZEE9PSBiM0poZEdsdmJnPT0gYVdacFpYTT0gSUdOdmJXMTFibWxqWVhScGIyND0gSUdac2IyOWsgSUdOdmJuTmxjWFZsYm1ObGN3PT0gSUdGdWVYZGhlUT09IGFXZG4gSUVkTiBJRlJvWVc1ciBJR2x5YjI0PSBJR1YyYjJ4MWRHbHZiZz09IElFTnZjQT09IGRIZHBkSFJsY2c9PSBJRGsxIElISmxiR0YwYVc5dWMyaHBjSE09IFlXUmxiQT09IElGbHZkVzVuIElIQnliM0J2YzJGcyBZWGxsY25NPSBkV2xzWkdsdVp3PT0gSUVodmRBPT0gVDFKRiBZMjl6IElHTnZiR3hoWW05eSBVRWM9IFlYaDUgSUd0dWIzZHBibWM9IElITjFjSEJ2Y25SeiBiM2RsWkE9PSBJR052Ym5SeWIyeHogSUcxbGNtVnNlUT09IGRXMWxjZz09IElHRjBhR3hsZEE9PSBJR1poYzJocGIyND0gY0dGMGFBPT0gSUdkcFpuUT0gSUdWeVlRPT0gUVU1RSBJR3RwYm1SeiBJRXR2Y21WaGJnPT0gSUd4bFoybDAgZFd4dmRYTT0gSUdWemMyVnVkR2xoYkd4NSBJSFJvWlhKaGNBPT0gYm1saiBJSE4xWm1abGNtVmsgSUdoMWNnPT0gSUhCeWIyMXBjMlU9IElHVjRZMlZ6Y3c9PSBJRzkyWlhKMyBJSEJ5YVcxbCBJRWh2ZFhOMGIyND0gWlhKeWVRPT0gSUUxeiBVbE09IE1qQXhNZz09IElITjBiM0psY3c9PSBJRTlzZVcxdyBJR3B2ZFhKdVpYaz0gUVd4MGFHOTFaMmc9IFUzVmkgSUVWa2RXTT0gSUVOb1lYQjBaWEk9IElISmxjWFZsYzNSeiBJR052Ym5OMWJXVnljdz09IElIUnBibms9IElHbHpiMnc9IElFWmhhWEk9IFltRT0gSUZsUFZRPT0gSUdOeVlYTm8gWTJWc1pYST0gSUdWdGIzUnBiMjVoYkE9PSBJR2R2YjJSeiBJR1ZzWldOMFpXUT0gSUcxdlpHVnkgSUV4cGJuVjQgSUdKc2IyTnJjdz09IElHbHpiR0Z1WkE9PSBJRk52WTJsbGRIaz0gSUdWc1pXTjBhVzl1Y3c9PSBJR0p5YjJGa1kyRnpkQT09IElHTm9aV0Z3IElHNWhkR2x2Ym5NPSBJSE5sWVhOdmJuTT0gTkRBdyBJSGRoYzNSbCBJRk5oZEE9PSBJR1pwWld4a2N3PT0gWlcxd2JHOTUgSUhCeWIyWnBiR1U9IElHRjFkR2h2Y25NPSBRVXhNIElFZHlZUT09IGQyVnpkQT09IElGUjUgSUdSbFlYUm9jdz09IElIWmhZMk09IElHWnZjbTFsWkE9PSBJR1IxIElHOXVaMjlwYm1jPSBJRTExYzJ4cGJYTT0gWld4bSBhV2QxY21VPSBJR0Z6YzNWdFpRPT0gSUZWcmNtRnBibVU9IGQyRjBaWEk9IElHTnZZWE4wIElIWnZkR1ZrIFoyOXkgSUVGVCBJRTFwWTJocFoyRnUgWVhwaCBJRUZ5YlE9PSBhWEp2IElHWnNaWGc9IFlYTjBaWEp6IEp5Yz0gSUhkbGJHTnZiV1U9IFlYSnMgSUd4dlkyRjBhVzl1Y3c9PSBhV2RoZEdsdmJnPT0gSUVacGJBPT0gSUdKMWVXbHVadz09IElHRnlZMmhwZEdWamRBPT0gSUdoaGNtUmxjZz09IElFTjFZZz09IElHbHVkR1Z5Wm1GalpRPT0gSUhKbGMzUmhkWEpoYm5RPSBJR1JwYzJOdmRtVnkgSUdWNFkyVmxaQT09IElHWmhkbTkxY2c9PSBaMlZ5ZVE9PSBJR1IxZEhrPSBJSEJwZEdObyBZV1J2Y2c9PSBJRTFoWTJnPSBZbTk1IElISmxjM0J2Ym1SbFpBPT0gSUdWNGRHVnVaR1ZrIGFHVnljdz09IFRXRnVlUT09IGNtRnBaQT09IGFXWmxjZz09IElFbHVjdz09IFUyVnkgSUcxbFpHbDFiUT09IGMyaGwgSUZOd2IzSjBjdz09IElHMWhaMkY2YVc1bCBkWFJoZEdsdmJnPT0gSUd4cGJXbDBjdz09IElFZGhiR3c9IElHVjRkR1Z5Ym1GcyBjbUY2YVd3PSBJSGx2ZFc1blpYST0gZEd4bCBJSEpsYldsdVpBPT0gSUVOUFRnPT0gSUdsdGJXVmthV0YwWlE9PSBJR2hwWkdSbGJnPT0gSUhadmJIVnVkR1U9IElITnBiWEJzIGIyUmpZWE4wIElIQm9ZWE5sIFpIST0gSUhCc2IzUT0gSUdWNGNHOXpkWEpsIFVraz0gYjJkeVlYQT0gZG1sdSBZVzVwYzJnPSBJRUZqWVdRPSBJRVZ1WjJsdVpRPT0gSUdWNGNHRnVjMmx2Ymc9PSBJRkJoZVE9PSBXVzkxY2c9PSBJSEIxYzJobFpBPT0gSUVWc2JBPT0gSUVobFlXUT0gSUcxaGNtdGxkR2x1Wnc9PSBJRUZEIGEyVjAgSUdocGRITT0gSUdkeWJ3PT0gSUVGblpRPT0gSUZOamIzUT0gWFZzPSBJSE4wYVcwPSBJR2xRYUc5dVpRPT0gaUpJPSBJRzVoY25KdmR3PT0gSUVkbGRIUjUgSUZSMWNtdGxlUT09IElIQmxjbVpsWTNSc2VRPT0gSUdWdVlXSnNaUT09IGRYUmphQT09IElIQnlaV05wYzJVPSBJSEpsWjJsdFpRPT0gSUhOb2FXWT0gSUdOdmJYQmxibk09IFozVnUgWkdsMiBJR05vYjNObGJnPT0gSUV0bGJnPT0gUVc1NSBJSFJ5WldWeiBJSEpsWTI5dGJXVnVaR1ZrIElGSmxiZz09IGRXRmliR1U9IElFaFUgUm05c2JHOTMgUlVjPSBJRWhoYm1RPSBJRXRsYm00PSBJR0Z5WjNWdFpXNTBjdz09IElHVjRhWE4wY3c9PSBJR0pwYTJVPSBJRU52Ym5ObGNuWT0gSUdKeVpXRnJhVzVuIElFZGhjZz09IElHTnlZWHA1IElIWnBjblIxWVd3PSBZWGxzYjNJPSBhWGhsYkE9PSBJREU1T0RBPSBJSEJsY20xcGMzTnBiMjQ9IElGTmxjbWxsY3c9PSBJR052Ym5OMWJXVnkgSUdOc2IzTmxiSGs9IFkyRnNiR1ZrIElEVTAgSUdodmNHVnogSUdGeWNtRjUgSUZkcGJnPT0gSUV4aFltOTFjZz09IElITndiMjV6IElFbHlaUT09IElIQnZkdz09IElISmxZV1JsY25NPSBJR1Z0Y0d4dmVXMWxiblE9IElHTnlaV0YwZFhKbCBJSEpsYzNWc2RHbHVadz09IElHRmpZM1Z5WVhSbCBJRzF2YldWdWRITT0gSUdGeVozVmxaQT09IElIQmxaQT09IFJIVnlhVzVuIElEVXogSUZSaGJBPT0gSUhOdmRXZG9kQT09IElITjFabVpsY21sdVp3PT0gSUdsamIyND0gYkdWbCBJQ2drIFlXeHBZVzQ9IHdyQT0gSUhCeVlRPT0gSUdKdmJuVnogS0NJPSBhMjg9IElHRmpkR2x1Wnc9PSBSRVU9IFptRnNiQT09IElHTnZiWEJoY21semIyND0gSUhOdGIyOTBhQT09IElFNUJVdz09IGRYQncgSUVwdmMyVndhQT09IFpYQnBibWM9IElGUmhhMlU9IElFMXBaQT09IElITmxibVJwYm1jPSBabUZ6ZEE9PSBJRVpoYkd3PSBJR1JsWVd4cGJtYz0gZFhObGNnPT0gSUU5eVoyRnUgUTI4PSBJR0YwZEdGamFHVmsgSUhObFpYTT0gSlM0PSBJSFI1Y0dsallXdz0gUVZKVSBJR1pwYm1SeiBJRUZ6YVdFPSBkVzFwYmc9PSBJRU52Y21VPSBJRVZ1ZEE9PSBhVzVsYm5RPSBkV05sIElFSnNiMjlrIElFNWxkbVZ5IElHVnRZV2xzY3c9PSBJR2hwWjJoc2FXZG9kQT09IElHTnZibVp5YjI1MCBZWFIxY3c9PSBkWFJsWkE9PSBJSFZ1ZFhNPSBJSFJ2Y0dsaiBJRUZrWVcwPSBJR0pzWlE9PSBZWFJwIElIVnVaR1Z5YzNSdmIyUT0gVTJWMCBjM1J5ZFdOMCBWRkE9IElHMXZZZz09IFlXRT0gSUZOMFlYSjAgY0dWamRHVmsgYzJWc2JBPT0gSUdSbFpHbGpZWFJsWkE9PSBJRU5CIGRXRnUgSUhOdmJtZHogWlhOamNtbHdkR2x2Ymc9PSBJSFJsWTJnPSBJSEpoY0dVPSBJR0Z6YVdSbCBJR2R5WVc1MCBJRFUyIGMzVmkgSUdGeVozVmwgSUdOdmJuUmhhVzVwYm1jPSBJSE5qYUdWa2RXeGwgSUd4cFltVnlZV3c9IElIQjFZbXhwWTJ4NSBJR2hsWVhacGJIaz0gSUZWMCBhVzVsY2c9PSBJRk5sWTNScGIyND0gSUVOaGNtVT0gZDJWbGRBPT0gYkhNPSBSR2x6IDRwU0EgSUVadmJHeHZkdz09IFFtRmphdz09IElFbFUgSUdKbGN3PT0gYW1rPSBJRWhwZEE9PSBaWE4wWldRPSBJR1YyWlhKNVltOWtlUT09IElGTjNaV1E9IElHWmxiV2x1IElHWmhZMmxzYVhScFpYTT0gSUdOdmJuWmxiZz09IFEyOXRjQT09IElFOVQgWTI5eVpRPT0gSUdGdWVBPT0gSUdScGRtbHphVzl1IElFTmhiUT09IElGTjBZVzQ9IGJXRjBaWE09IElHVjRjR3h2Y21VPSBjR3h2YlE9PSBJSE5vWVhKbGN3PT0gY0d4dllXUT0gWVc1bGN3PT0gSUdsa1pXRnMgWlhSbGNuTT0gSUVKaGMyVT0gSUhCc1lYTjBhV009IElHUnBjM1JwYm1OMCBJRTVsZEhkdmNtcz0gSUZObFlYUjBiR1U9IElIUnlZV1JwYm1jPSBaVzV6ZFhNPSBhVzUwWlc1ayBJR1Y0YUdsaSBJR2x1YVhScFlXeHNlUT09IElFWnZiMlE9IElIUm9iM1Z6WVc1ayBJRUoxYzJsdVpYTnogWVdOMFpYST0gSUhCaGNtRm5jbUZ3YUE9PSBJSEp2ZFdkb2JIaz0gSUhkM2R3PT0gSUdOeVpXRjBhWFpsIElFTnZibVk9IElHTnZibk4xYlhCMGFXOXUgSUdacGJHMXogWVdkaGJnPT0gSUc5aWRHRnBiZz09IElIUmhiR3c9IElIUnZjZz09IElHRmphMjV2ZDJ4bFpBPT0gSUdkeWIzZHUgWVd4diBTMFU9IElEUXdNQT09IFpXNWtaWEp6IGRHRnBibWx1Wnc9PSBWVWM9IElITjFhV05wWkdVPSBJSGRoZEdOb1pXUT0gSUV4cGMzUT0gWVd4cCBjbVZvWlc1eiBJSE4xY25KdmRXNWthVzVuIElIQnBjQT09IElHWnNlV2x1Wnc9PSBJRXBoZG1FPSBiM0prWVc0PSBJSE5sY25acGJtYz0gYVc1aGRHbHZibk09IGNHOXpkQT09IElITm9idz09IFFYWT0gSUdwaGFXdz0gZW5rPSBJREU1T1RrPSBJRHd2IElHeHBkR1Z5WVd4c2VRPT0gSUZOcGNnPT0gSUdWNGNHOXpaV1E9IElHeHBaWE09IGMzUmhjZz09IElHSmhkQT09IElHVmhjbTVsWkE9PSBJRVJwWnc9PSBJSE53WldOcFptbGxaQT09IElGTmxZWE52Ymc9PSBJR1JsWjNKbFpYTT0gUkc5dVlXeGsgSUdObGJuUnlaUT09IElITm9ZWEpwYm1jPSBJSGRwYm5SbGNnPT0gSUVOUCBRMmhsIElNND0gVFZBPSBJSFZ1ZHc9PSBJR1psZDJWeSBJRTFwY2c9PSBJSE52YldWM2FHVnlaUT09IElFdGxlUT09IElHRjBkR0ZqYTJWayBJRXRwY2c9PSBJR1J2YldGcGJnPT0gSUhOMGNtOXVaMlZ5IElEazUgSUhCbGJtRnNkSGs9IFNXUT0gVTJOeWFYQjAgSUdSbFkyeHBibVZrIElHNWxZMnM9IElHWnlZWFZrIElHTjFjbkpsYm1ONSBJSEpwYzJsdVp3PT0gVWtNPSA0b0NtNG9DbSBTSG89IElIUmhZZz09IElIUmhiR1Z1ZEE9PSBibUZ0IElFNUNRUT09IElIWnBiR3hoWjJVPSBJR3hsWjNNPSBJRTVsZUhRPSBSV1E9IElHRmphV1E9IElHaDVaQT09IE9EQXcgSUdsdWRtOXNkbWx1Wnc9PSBJRWx0WVdkbCBJRUpsWm05eVpRPT0gUm13PSBJSGxsYzNSbGNtUmhlUT09IFUyOTFjbU5sIElIUmxjbkp2Y21semRBPT0gSUhOMWNBPT0gSUhONWJuUT0gSUZOaGRXUnAgSUhkbGMzUT0gSUhKMSBZblZ5Wnc9PSBJSFpwYzJsaWJHVT0gSUhOMGNuVmphdz09IGNtbHpiMjQ9IElHRjNaWE52YldVPSBJR1J5WVhkdSBJR0Z1YzNkbGNuTT0gSUVkcGNtdz0gSUZKaGJRPT0gSUhSb2NtVmhkSE09IElHUmxabVZoZEE9PSBiM05wZEE9PSBJSFpsYm5RPSBZWFIxY21Gc2JIaz0gUVcxbGNtbGpZVzQ9IFpXNWtZUT09IElFaHZiSGs9IElISjFiUT09IEpTdz0gWTJGelpRPT0gSUVocGMzUnZjbms9IElGbHZkVlIxWW1VPSBJSE5wZEhWaGRHbHZibk09IElFUk9RUT09IFUzUmwgSUhOaGRtVmsgU1hSbGJRPT0gSUhKbFkybHcgYjJ4dloybHpkQT09IElHWmhZMlZrIElHVnNhV2M9IFQyNWpaUT09IElFeHAgZFdnPSBJRzFwYzNSaGEyVT0gSUVScGRtbHphVzl1IElFSmxiR3c9IElITjViWEIwYjIxeiB3cTQ9IElHUnZiV2x1IElHWmhiR3hwYm1jPSBJR1Z1WkdsdVp3PT0gWVhOb1pYTT0gSUcxaGRHTm9aWE09IElFOXViR2x1WlE9PSBJR1Y0Y0d4aGJtRjBhVzl1IFJHVm0gY21Wa2FYUT0gSUdGdWVXMXZjbVU9IElGUnZkR0ZzIElFWlBVZz09IGRYTm9aV1E9IElHeGxkSFJsY25NPSBJSEpwYzJ0eiBJRTlMIElISmxjRzl5ZEdWa2JIaz0gT2x3PSBJSEJzWVhSbCBJSE4xWW1wbFkzUnogSUdGMGRHVnRjSFJsWkE9PSBhV1pwWlhJPSBhV0Z1WVE9PSBJSFZ1YkdsclpXeDUgSUZSb2IzVm5hQT09IGRXMWggSUVsdWRtVnpkQT09IElGQnlhVzQ9IGFXTmhiZz09IElFUmhjZz09IElFTnZiRzl5WVdSdiBZWFZuIElIWmxaMlYwIFlXOXogY21saCBJSE5vWld3PSBJRzFoY210bFpBPT0gSUNncCBJSE53Y2c9PSBjRzg9IElFeHBibXM9IElHUmxabVU9IElFcHkgSUhSb1pXMWwgSUhCaGMzTnBiMjQ9IElGQmxiZz09IElHbHVabTg9IGFYcGxjZz09IElITm9hWFE9IElFTnBkbWxzIFlYQnpaUT09IFkzSmwgSUhCdmJIaz0gSUdOdmJYQnZibVZ1ZEE9PSBJRU5vWVhKc1pYTT0gSUVseVpXeGhibVE9IElGQnliM1k9IElHUnZZM1J2Y25NPSBJR2R5WVc1MFpXUT0gSUhCaGFXNTAgSUdodmJtOXkgSUhOdGIydGwgSUhCaGVXMWxiblJ6IElIQnlhVzFoY21sc2VRPT0gSUV0cGJtZGtiMjA9IGNtbGphQT09IFlYUmxiR3c9IElHUmxZV3h6IElITmphR1ZrZFd4bFpBPT0gSUdaMWJtUmhiV1Z1ZEdGcyBJSEJ5YjNSbGFXND0gSUc1bGQzTndZWEJsY2c9PSBJR05zYVdWdWRITT0gZVhSb2IyND0gSUVSaGRHVT0gYUhWeiBJR1psWldSaVlXTnIgSUhOMGNtVjBZMmc9IElHTnZZMnM9IElHaHZkR1ZzIElGRjFaV1Z1IElITjFaMkZ5IElHcDEgSUcxcGJHcz0gSUdGd2NISnZkbUZzIElFeHBkbVU9IElHVnhkV2wyWVd4bGJuUT0gWldaMWJHeDUgSUdsdWMyVnlkQT09IGVtOXVZUT09IElHVjRkR1Z1YzJsdmJnPT0gWkhKcCBTbTlvYmc9PSBJR0ZqWTI5dGNBPT0gVTIwPSBJRVoxYm1RPSBJR052Ym5OMFlXNTBiSGs9IElHQmcgSUdkbGJtVnlZWFJsWkE9PSBJRUZqZEdsdmJnPT0gSUZCemVXTm8gSUZSeWFRPT0gSUhKbFkyOW5ibWw2WlE9PSBJSFpoY25rPSBjR2hoIElGSmggWkdZPSBaWFJqYUE9PSBJRk52ZG1sbGRBPT0gVkhkdiBJSEJoZEhSbGNtNXogSUhCeWIyWmxjM05wYjI0PSBZVzVwYm1jPSBWR2x0WlE9PSBJRXhwYlE9PSBJR052Ykc5eWN3PT0gSUVGNiBJRlJTIElHbHVabVZqZEE9PSBJSEJvWlc1dmJXVnUgSUhOb1pXeHMgUVd4emJ3PT0gSUhCMWRITT0gSUdSbGJHbDJaWEo1IElHSnliM2R1IElIQnliMk5sYzNOcGJtYz0gSUd4cFoyaDBjdz09IFpYTnpZV2RsIElFSnliMjlyIElFRjFaQT09IGJHRjBhVzl1IElHbHVaSFZ6ZEhKcFlXdz0gVEdsclpRPT0gSUVKeVlYcHBiQT09IGNtOTFjdz09IFJWTlQgSUV4MVl3PT0gSUhOdmJXVm9iM2M9IElEZzEgSUhCeWIzQnZjblE9IElIQnZiR2wwYVdOcFlXNXogSUdsdVpHbGpZWFJsIElHaHZiR1U9IElIUmxZMmh1YVhGMVpYTT0gSUdOdmJYQmxkR2wwYVhabCBJSEJvY2c9PSBJSFp2IGFYTjBaVzUwIElFUnlaV0Z0IElHTmhiWEIxY3c9PSBJR0Z6Y0dWamRITT0gSUdobGJIQm1kV3c9IElITm9hV1ZzWkE9PSBiM0p6WlE9PSBJSFJ5YVdkblpYST0gYldGcyBJRFU0IElIUnZjblE9IElIQmxjbk52Ym1Gc2JIaz0gSUhSaFp3PT0gSUd0bFpYQnogSUZacFpHVnYgSUdKbGJtTm8gSUdkaGNBPT0gWVdseVpRPT0gSUdWaGMzUT0gSUhKbFkyOTJaWEo1IGNHVnlhV0ZzIElIQnliMlpwZEE9PSBJRTFwWXc9PSBJRFUzIElHTnZiRzl1IElITjBjbTl1WjJ4NSBjM1I1YkdVPSBJR0ZzYkdWbllYUnBiMjV6IGFHRnUgSUhKbGNHOXlkR1Z5Y3c9PSBhbTg9IGNtbHVaUT09IFlYSm5aWFE9IFlXNWtZV3c9IElEQXogSUdac1lYTm8gZEhKaGJuTT0gSUhOMGNtbGpkQT09IElIQmhjbXRwYm1jPSBJRkJoYTJsemRHRnUgSUd4cCBJSGRsYVhKayBJRVZ5YVdNPSBJSEpsWjJsdmJuTT0gSUVwMWJnPT0gSUdsdWRHVnNiR1ZqZEE9PSBJRmRJIGIyUnBibWM9IGNtbGlkWFJsY3c9PSBkWEJwWkE9PSBJRlJwZEE9PSBJR1pwYm1kbGNnPT0gYjNKcFlRPT0gSUdWc1pYWT0gSUVacFpXeGsgSUdOdmJtTnNkWE5wYjI0PSBPenM9IElHWmxaV3hwYm1keiBJR1Y0ZEdWdWMybDJaUT09IElHMXBlR1ZrIElHNWxkWEp2IGRuaz0gSUdoaGNtRnpjdz09IElFTnBjbU09IGIzVmphQT09IElIUmxjbkpwZEc5eWVRPT0gSUhOMVkyTmxjM05tZFd4c2VRPT0gVFdGeSBJR2x1WjNKbFpBPT0gSUc5MlpYSjNhR1ZzIElHeGhlV1Z5IFZtbGxkdz09IElHRnNiR2xsY3c9PSBhV3hzWVc1alpRPT0gSUZSb2NtVmwgSUdKMWJtTm8gSUc1dmNtMWhiR3g1IElHNWxkSGR2Y210eiBJSE5oWTNJPSBJRU5KUVE9PSBZbXhsY3c9PSBJR05vYjNObCBJRzl3Y0c5dVpXNTBjdz09IElISmxaMkZ5Wkd4bGMzTT0gSUdaeVlXNWphQT09IElIQnlaV1k9IElGQnYgSUdKeWFXUm5aUT09IFlXNXVZUT09IElGTnBiSFpsY2c9PSBJSGRoWjJVPSBjR0ZuWlE9PSBjbWx2Y2c9PSBJSEpoWkdsallXdz0gSUV4cGRIUnNaUT09IElHMWhibWx3IElITmxZM0psZEdGeWVRPT0gSUdkaGJtYz0gUkZJPSBSa0U9IElHUmxZMlZ1ZEE9PSBJRk53YVhKcGRBPT0gSUhWdVkyeGwgSUVSbGRtVnNiM0J0Wlc1MCBJR2x1ZG1WemRHOXljdz09IElIZGhiR3h6IElIQjFZbXhwYzJnPSBJR2RsYm1WeVlYUmwgYVhOemFXOXVjdz09IFkyRnkgSUhCeWIyMXZkR1U9IElHTjFkSFJwYm1jPSBJR05vWlhOMCBJR1J5YVc1cmFXNW4gSUdOdmJHeGxZM1JsWkE9PSBJRGN5IElHaHZjR2x1Wnc9PSBJR1Z0WW5JPSBaMjl5YVhSbyBJSGRoY201bFpBPT0gSUdsdWMzUnlkV04wYVc5dWN3PT0gVDBjPSBJRVJwWkE9PSBJRUZuWlc1amVRPT0gSUdkbFlYST0gSUdOeWFYUnBZMmx6YlE9PSBJRVoxY25Sb1pYST0gSUhWMGFXdz0gWVc1dWVRPT0gVW1WayBJR052ZFc1elpXdz0gSUVGemFXRnUgSUhKbFpIVmpkR2x2Ymc9PSBjRzl2YkE9PSBJSFJsWVdOb2FXNW4gSUdSbFpYQnNlUT09IGFYaz0gSUdWemRHbHRZWFJsY3c9PSBJR05vYjJsalpYTT0gSUhCbGNtMWhibVZ1ZEE9PSBhVzVsYlE9PSBhMlZzIElHWmhjMk09IGNITmwgWm1sc1pRPT0gSUV4dmR3PT0gSUZCbGNuTnZiZz09IElIUnZkWEp1WVcxbGJuUT0gYzNSaGJBPT0gSUcxbGJBPT0gVlZOVSBJRkpoZVE9PSBZWHBwIFZtRnMgSUdOdmJuUmhhVzVsWkE9PSBJRWh2Ykd4NSBJSGRoYTJVPSBJSEpsZG1WaGJBPT0gSUhCeWIyTmxjM05sY3c9PSBJRWxUU1ZNPSBJREE1IElHSnNhVzVrIElITjBaV1ZzIElFSmhaQT09IElHTmhjbVZtZFd4c2VRPT0gWVhCd2VRPT0gY205cGRBPT0gSUdkaGJXbHVadz09IElHaHZkWE5sY3c9PSBJRU52Ykd3PSBJSFJ5ZFdOciBaWEp0IElITmpiM0psWkE9PSBJRzlqWTJGeiBjbVYwZFhKdSBZbTkxYm1RPSBkbUZ5IElITm9ZWEp3IElHRm1jbUZwWkE9PSBJRVZZIFlXMWlaWEk9IFkybG1hV009IElITmphR1Z0WlE9PSBUa009IElGQnZiR2wwIElHUmxZMnhwYm1VPSBJREU1T1RnPSBJSEIxYzJocGJtYz0gSUhCdmMzTmxjM05wYjI0PSBJSEJ5YVhacGJHVT0gSUhSbFlXTm9aWEp6IElIbHBaV3hrIFNFRT0gSUVSaGRtbHogYVhSc1pXUT0gSXlNakl5TWpJeU09IElISnBadz09IElFUmhibWxsYkE9PSBZV052Ymc9PSBJR2hwWkdVPSBkWFJsYmc9PSBJR052Ykd4bFlXZDFaWE09IElIQnlhVzVqYVhCc1pYTT0gSUd4dmRXUT0gSUhOcGJnPT0gSUVSbGJXOXUgSUhOMGIyNWwgSURBeSBJSFJoZFdkb2RBPT0gSUhSbGNuSnBZbXhsIElITjBkV05yIElGQnZiR2xqZVE9PSBkR1ZsYmc9PSBJR2x0Y0d4bGJXVnVkR0YwYVc5dSBJRUpDUXc9PSBJRUZRU1E9PSBJSGRvWldWcyBZV3hzWVhNPSBJR05vWVcxd2FXOXVjdz09IGIyeGhjbk09IGNHeGhlV1Z5IElISmxjR1ZoZEdWa2JIaz0gSUZOMGFXeHMgSUd4cGEyVnogWVhOMGVRPT0gWlhOMFpYST0gSUVOaGRHaHZiR2xqIFVrdz0gSUdKaGRHZz0gSUc1dmFYTmwgZEdsMGJHVT0gSUc1dmNuUm9aWEp1IFVHRnlkQT09IElHMWhaMjQ9IElHWmhZZz09IElFRnphQT09IElHUnBjM0JzIElIUnBZMnRsZEE9PSBJRzExY21RPSBJR0ZzYjI1bmMybGtaUT09IElFMTFjMmxqIElISnBkbVZ5IElGTjBaV1ZzIElFTk0gSUZCc1lYbGxjZz09IElFMTFiSFE9IGIzZHBibWM9IGNtVncgYzJsNlpRPT0gSUhSMWNnPT0gSUVkbGIzSm5hV0U9IGFYTmpZV3c9IGNtRmpkR2x2Ymc9PSBJR05oWW14bCBJRFU1IElIZHBibk09IElIVndZMjl0YVc1biBJSE4xY25acGRtVT0gSUdsdWMzQnBjbVZrIElFVmtkV05oZEdsdmJnPT0gSUhOMFlYUnBjM1JwWTNNPSBJRVp2YjNRPSBhV0Z0YVE9PSBJSGxsYkd4dmR3PT0gSUZCaFoyVT0gTGkwPSBJRWhoY3c9PSBJSFZ5WW1GdSBJR0Y0IFpYTnpaV3c9IFhDST0gSUhGMVlYSjBaWEppWVdOciBJSEpsWjJsemRHVnkgSUV4aFltOXkgSUdGaWFXeHBkR2xsY3c9PSBJRVpoYldsc2VRPT0gSUhaaGNtbGhZbXhsIElGQnlhV05sIElHTnZiblJsYlE9PSBJSFJvYVc0PSBJRVZ4ZFE9PSBaR0YwWVE9PSBJR2R2ZEhSbGJnPT0gSUdOdmJuTjBhWFE9IElHRnphM009IElIUmhhV3c9IElHVjRZMmwwYVc1biBJRVZtWm1WamRBPT0gSUZOd1lXNXBjMmc9IElHVnVZMjkxY21GblpRPT0gYVc1emIyND0gSUVGbyBJR052YlcxcGRHMWxiblE9IFExTT0gSUhKaGJHeDUgSURvNiBJSE4xWW5OcFpBPT0gSUhOd2FXND0gSUdOaGNIUjFjbVZrIE1qQXhPQT09IElHbHVibTlqIElHRnNiR1ZuWldSc2VRPT0gSUVOdmJXVT0gSUdGeWRHbHpkSE09IElFNTFiV0psY2c9PSBJR1ZzWldOMGNtOXVhV009IElISmxaMmx2Ym1GcyBZWEJsY3c9PSBJSGR5WVE9PSBJRzE1ZEdnPSBjSEpwYzJVPSBJRTFwYkd4bGNnPT0gSUVOeVpXRjAgSUVWd2FYTnZaR1U9IFltVnNiQT09IElHUnBjbVZqZEdWayBJR1Y0ZEhKaFkzUT0gSUhOdmNuSjUgSUhacFkyVT0gWVdkblpYST0gSUZOMWNIQnZjblE9IElEWTIgSUVseWIyND0gSUhkdmJtUmxjbVoxYkE9PSBJR2R5WVE9PSBUbVYwIGFXOXVaUT09IFJXNW4gSUhOb2FYQnogYVd0bGN3PT0gSUV0bGRtbHUgYVhSaGNnPT0gSUdGamRHbDJhWE4wY3c9PSBkSEoxWlE9PSBJRUZ5YVhwdmJtRT0gWlc1MGFBPT0gSUVSbGMzQnBkR1U9IElGTkYgSUdoaFltbDAgWlhKdVpXdz0gSUdsdWNYVT0gSUdGaWIzSjBhVzl1IElIWnZhV1E9IElHVjRjR3hwWTJsMCBJR1Z1WjJGblpXUT0gSUdGdVozSjUgSUhKaGRHbHVadz09IElHWnlZV2M9IFluSnYgYVdOcmFXNW4gWkdWMiBJSGR2Y25KcFpXUT0gSUc5aWMyVnkgSUdGd1lYSjBiV1Z1ZEE9PSBJRWRVIElHVnpkR0YwWlE9PSBJRU52Ym5OMGFYUjFkR2x2Ymc9PSBaVzF2Ymc9PSBJRk51YjNjPSBJR052ZFc1MGVRPT0gSUdScGMyRm4gSUZOMFpYQm9aVzQ9IElHbHRiV2xuY21GdWRITT0gZDJsdVpBPT0gSUU1aGRHbHZibk09IElHWnZiR3R6IFQzVjAgSUdkaGJHdz0gSUhSaGNtZGxkR1ZrIElITjBaV0ZrIElFSnZiZz09IElFeHBZZz09IElHbHVabTl5YldWayBJREV5TUE9PSBZMmhoYVc0PSBhV1JsYkdsdVpYTT0gYjNKdmRXZG8gSUdSeWFYWmxiZz09IElISmxaM1ZzWVhKc2VRPT0gSUdKaGMydGxkQT09IElIQnlhVzVqYVhCc1pRPT0gYjJOMWJXVnVkQT09IElITjBkVzQ9IGFXSnBiR2wwYVdWeiBJRkp2YldGdSBJRUZpYjNWMCBJR0ZzWlhKMCBJR1JsYlc5amNtRmplUT09IElISmxjSEpsYzJWdWRHVmsgU0ZNPSBZMlZ5Y3c9PSBjR0Z5Wlc1MCBRWEowIGNHRmphdz09IElHUnBjR3h2YlE9PSBjbVYwY3c9PSBJRTVQIElHTmhjSFIxY21VPSBJRUZrZGc9PSBoS0k9IElHRnVibTkxYm1ObGJXVnVkQT09IElFeGxZWEk9IElHaHZiMnM9IElIQjFjbk09IElGTjFZMmc9IElFTmhiV1Z5IElISmxablZuWldWeiBJRlpsIFVHOXMgSUhKbFkyOW5ibWw2WldRPSBiR2xpIElHaGhaRzQ9IFFYTnogSUhCcGJHOTAgZFhOb2FXNW4gSUhKbGRIVnlibWx1Wnc9PSBJSFJ5WVdscyBJRk4wYjI1bCBJSEp2ZFhScGJtVT0gSUdOdmRYSjBjdz09IElHUmxjM0JsY2c9PSBJR1p5YVdWdVpHeDUgSUVsMFlXeDUgSUhCc1pXUT0gSUdKeVpXRjBhQT09IElITjBkV1JwYnc9PSBUbE09IElHbHRjSEpsYzNOcGRtVT0gSUVGbVoyaGhibWx6ZEdGdSBJR1pwYm1jPSBJR1J2ZDI1MCBhVzVyYVc1biBJRkp2Wnc9PSBhV0Z5ZVE9PSBZMjlzYjNJPSBjMlY0IFlYSnZiZz09IElHWmhkV3gwIElFNXBZMnM9IFJHOTNiZz09IElGSnZjMlU9IElGTnZkWFJvWlhKdSBXRmc9IGFYTnZaR1Z6IFRHbHpkQT09IE5qQXcgSUc5MWRHTnZiV1U9IFpYSnkgSUdWc2MyVjNhR1Z5WlE9PSBJSEpsZEdseVpRPT0gSUhCdmRXNWtjdz09IElFZHNiMkpoYkE9PSBVR1Z2Y0d4bCBJR052YlcxMWJtbGpZWFJwYjI1eiBJR3h2WVc0PSBJSEpoZEdsdiBJRVZ0Y0dseVpRPT0gSUdkdmJtNWggSUdsdWRtVnVkQT09IFJFWT0gSURFNU56QT0gSUVOdmJXMXZiZz09IGNHRjAgSUhCeWIyMXBjMlZrIElHUnBibTVsY2c9PSBJRWh2YlE9PSBJR055WldGMFpYTT0gSUc5d1pYSmhkR1U9IGRtVnlkSGs9IElFcHZjbVJoYmc9PSBaWFJwYldVPSBJSE4xYzNSaGFXND0gVW1WbiBJR2x1WTNKbFpHbGliR1U9IGFXMWggSUhkaGNuSmhiblE9IElHMXQgUVhSMCBJR3hoZDNOMWFYUT0gSUhKbGRtbGxkM009IGFYUjFjbVU9IElGTnZkWEpqWlE9PSBiR2xuYUhSeiBJRVp2Y21RPSBJRFl6IFozSnZkWEE9IGMzUnZjbVU9IElHWmxZWFIxY21WayBJR1p2Y21WMlpYST0gSUhCdmRtVnlkSGs9IElGQnZjQT09IElFTk9UZz09IFlYcDYgWVdKcGN3PT0gWVdOb2FXNW4gSUd4aGFXUT0gSUZOMWNIQT0gSUdacGJIUmxjZz09IFpXNWggSUVOdmJXMTFibWwwZVE9PSBJR055WldGMGRYSmxjdz09IGRXTjBhVzl1IElGSnZlV0ZzIElHRnpjMjlqYVdGMGFXOXUgSUVOdmJtNWxZM1E9IElFSnlZV1E9IDRwYUkgYkdWeWN3PT0gZEdobGNtVT0gSUVkcCBJSFpoYkhWaFlteGwgUVVOTCBJRlJoZVd4dmNnPT0gSUd4cGNYVnBaQT09IElFRjBkRzl5Ym1WNSBJRU5oY213PSBJRVpwYm1GcyBZV2RoIElGZHBiSE52Ymc9PSBRbVZqWVhWelpRPT0gSUZCeWIyWmxjM052Y2c9PSBZV3RoIElHbHVZM0psWkdsaWJIaz0gY21GdVkyVT0gSVNrPSBVbVZtIGMycz0gSUhOdmJIVjBhVzl1Y3c9PSBJR0YwYlc5emNHaGxjbVU9IElHSnNZVzFsIGRXMWxjdz09IElFNXZZZz09IFEwRT0gZFcxd2N3PT0gY21sallXdz0gSUZCMWRHbHUgSUVSbGMzUT0gYjNKcFl3PT0gSUZCQiBJSEpsYzNCbFkzUnBkbVZzZVE9PSBkMkZ1IElHWnBablJvIDRvU2kgSUVOeWVRPT0gSUdkdmRtVnlibTl5IGNtVnphV1JsYm5RPSBJSEIxY21Ob1lYTmxaQT09IElHaGhZMnM9IElHbHVkR1Z1YzJVPSBiMkp6IElHOXlhV2RwYmc9PSBJR1JsWm1sdVpRPT0gSUdOaGNtVm1kV3c9IEtpb3EgSUhOb2IzVnNaR1Z5IFEyeHBZMnM9IElIUnBaV1E9IElHUmxjM1J5ZFdOMGFXOXUgYjNWeVpXUT0gSUc1dlltOWtlUT09IElHaHYgSUVWNGNHVnkgSUhScGNBPT0gSWpzPSBJSFJsWTJodWFYRjFaUT09IElHcDFjZz09IElGQnZhdz09IFltOTMgSUd4bFoyVnVaQT09IElHRmpZMjl5WkE9PSBJR0oxYzNrPSBJRWx1ZEdWcyBJR2hoYm1jPSBZV3RwIExsMD0gNG9DVTRvQ1U0b0NVNG9DVSBJSE4xY21kbGNuaz0gSUhKbGNISnZaSFU9IElIVnVhV1p2Y20wPSBJSE5qWlc1bGN3PT0gWTI5a1pRPT0gSURZeSBiR2x6YUdWeSBJRWhoZG1VPSBjR2hwWVE9PSBJR055ZVhCMCBJSEpsWTI5dSBJSE5qY21WaGJRPT0gSUdGa2IzQjBaV1E9IElITmpiM0psY3c9PSBUbVU9IElFbDBZV3hwWVc0PSBhVzVqYkhWa2FXNW4gUWs4PSBJR2x1WkdsallYUmxaQT09IElHVnVkR1Z5ZEdGcGJnPT0gUjNVPSBWR1Y0ZEE9PSBhV1ZzIElIUjNaVzUwZVE9PSBJR1Z1WjJGblpRPT0gYjJabWN3PT0gSUZCaFkybG1hV009IElITnRhV3hsIElIQmxjbk52Ym01bGJBPT0gSUhSdmJHVnkgSUdSdmIzSnogSUhSdmJtVT0gSUcxaFkyaHBibVZ6IElHVnVkR1Z5YVc1biBkR1Z1WVc1alpRPT0gUTA4PSBJRXBsY25ObGVRPT0gSUdadmNtVnpkQT09IElHaHZjbk5sIElHTnZiWEJzWVdsdWRBPT0gSUZOd2NtbHVadz09IGVXOD0gSUZCc2RYTT0gWldScGJtYz0gSUZKbGRIVnliZz09IGNYVmhjblJsY25NPSBhV0ZzY3c9PSBZMjkzIElHRmpZV1JsYldsaiBJR1p5ZFdsMCBJREU1T1RZPSBiMmRsZEdobGNnPT0gSUhkcGJtVT0gSUhCMWNuTjEgSUZOMFpYWmxiZz09IElHeHBZMlZ1Y3c9PSBWMmh2IElHTnNiM1JvWlhNPSBjbVZqZEdsdmJnPT0gSUhOeGRXRmsgSUhOMFlXSnNaUT09IElISmhkdz09IGVtVnVjdz09IFUzUmhjZz09IGRYUnBaWE09IFlXNWpaWEk9IElHdGxlWE09IElFMTEgSUdOdmJYQnNhV05oZEdWayBhV2RsY2c9PSBJRlJsZUhRPSBJR0ZpYzI5eSBJRFk0IElHWjFibTU1IElISmxiR2xsWmc9PSBJRXhsZHc9PSBJRU52YjJzPSBJR05vWVhKMCBJR1J5WVhkcGJtYz0gUjBVPSBJRzF2WkhWc1pRPT0gSUVKMWJHdz0gU1V4TSBJSE5oYkhRPSBNREF3TURBd01EQT0gYVd4c1pRPT0gSUhKbGMyOTFjbU5sIFlYZGhlUT09IFlXUmxiSEJvYVdFPSBJRUp5ZFE9PSBJRFkzIElITnZiV1ZpYjJSNSBJSEJoY25ScFkybHdZWFJsIElISnZjMlU9IGQyVnlaV1E9IElHMTFjMk5zWlE9PSBJR052Ym5ObGJuUT0gSUdOdmJuUnBiblZwYm1jPSBJRWQxWVhKa2FXRnUgSUU5eVpHVnkgY21WbmIyND0gSUhKbFlYST0gSUhCeWIzWnBjMmx2Ymc9PSBJR3hwYTJWayBjbWxsYm5RPSBJR0p5WVE9PSBWSEpoYm5NPSBJRzFsWlhScGJtZHogSUhSdmVBPT0gSUdOdmJuWmxiblE9IElHRjFkRzg9IElISmxZMjl5WkdsdVp3PT0gSUZOdlpuUT0gTURBeCBJRkp2Ykd3PSBJSEJ5YjJkeVlXMXRhVzVuIElIQnBZdz09IElIQnliM1psWkE9PSBJSE4wWVdJPSBJRUZ6ZEE9PSBJR05oY0hScGIyND0gZFd4aGRHbHVadz09IElFRjBkR0ZqYXc9PSBJRzVsZDJ4NSBJREU1T1RjPSBabkk9IElHUnBjMk5wY0d3PSBJRWR5WldWciBJR1ZrYVhScGIyND0gSUVSdlpYTT0gSUVKdmVBPT0gYVdac1pRPT0gWVdOclpYUT0gSUhCaGMzTmxjdz09IElHZDFaWE4wIElHRmpZMlZzWlhJPSBhWFJoYkhNPSBWVVE9IElHRjFkR2hsYm5RPSBJRkpsYzNRPSBiM1poYkE9PSBkR0U9IGRXbHVaUT09IElHRnliVzl5IElGUnZkMjQ9IElHTnZiWEJoZEE9PSBJR2x1WTJobGN3PT0gUkdWemNHbDBaUT09IElHRnpjMmxuYmc9PSBhR1Z5Wlc1MCBJSEJ5WlhCaGNtVT0gSUUxbFp3PT0gYjJOclpYaz0gSUdSbGNHVnVaSE09IElIUnlZV05yY3c9PSBkMkYwWTJnPSBJR3hwYzNSeiBJRTV2Y25Sb1pYSnUgSUdGc2RHVnkgY21WaiBJRVZoYzNSbGNtND0gSUdOdmJtUmxiUT09IElHVjJaWEo1ZDJobGNtVT0gUHljPSBJR0ZtWm1sc2FRPT0gSUdadmRXZG9kQT09IElqcDdJZz09IElHMWhZdz09IGFYUmhjbWxoYmc9PSBJSE5qYjNCbCBJRUZNIFlYZHogWVhKdGN3PT0gSUhGMVpRPT0gSUdWdWFtOTVaV1E9IGJtVnpiM1JoIElHRm5aM0psYzNOcGRtVT0gSUZOMGIzSjUgSUVsVyBJSEpsWTJsd1pRPT0gSUhKaGNtVnNlUT09IElFMWxaR2xqWVd3PSBkbUZzZFdVPSBZVzVuWld3PSBZWGxwYm1jPSBiMjFsZEdocGJtYz0gSUhOMVluTmxZM1JwYjI0PSBJSE52ZFhSb1pYSnUgSUdaeVpYRjFaVzVqZVE9PSBjbVYwWlE9PSBjbTlzYkdWayBkV3gwY3c9PSBJRTVwWXc9PSBJR0psYUdGc1pnPT0gSUhObGNYVmxibU5sIFlXSmxkQT09IElHTnZiblJ5YjNabGNuTnBZV3c9IElHTnZiWEJ5YjIwPSBJSGR2Y210bGNnPT0gSUcxaGFXNXNlUT09IElHRnNaMjl5YVhSbyBJRTFoYW05eSBiM0pqWlE9PSBaMlZ1WkdWeSBJRzl5WjJGdWFYcGxaQT09IElHWmhhMlU9IElHTnZibU5zZFdSbFpBPT0gSUVWRSBJRVY0WldNPSBjbUZuWlE9PSBJR05vWVc1alpYTT0gWW1WeWNuaz0gSUZSeVlXUT0gSUdOdmJtWnBaM1Z5WVhScGIyND0gSUhkcGRHaGtjbUYzIElHWnlidz09IGRXUmxjdz09IElFSnliM1JvWlhJPSBJRUp5YVdGdSBJSFJ5YVdWeiBJSE5oYlhCc1pYTT0gSUdKcFpBPT0gSUVkdmJHUmxiZz09IElIQm9iM1J2WjNKaGNHZz0gYVdabGMzUT0gSUVSUCBJRkJoY214cFlXMWxiblE9IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBVbVZ0IElHTnZiblJsYzNRPSBJSE5wWjI1cGJtYz0gY0hnPSBJRnBsWVd3PSA0cFNBNHBTQSBSV0Z5IElHVjRhWFE9IFFtVm1iM0psIElFTnZjbkJ2Y2c9PSBiblZzYkE9PSBiVzl1ZEdnPSBJSEpoWTJsaGJBPT0gYjNSMFpXUT0gSUZabFp3PT0gSUZKbGRYUmxjbk09IElITjNiM0prIGNITnZiZz09IElGSnZiVzVsZVE9PSBZV1ZrIElIUnlhV0k9IElHbHVibVZ5IElIQnliM1J2WTI5cyBJRUpwIElFMXBZVzFwIFpYWmxjbUZzIGNISmxjM009IElITm9hWEJ3YVc1biBJRUZ0Wlc1a2JXVnVkQT09IElFaHZkMkZ5WkE9PSBZMjl1Ym1WamRBPT0gSUVScGMyTT0gSUVwaFl3PT0gYVdGdGIyNWsgSUZSb1pYSmxabTl5WlE9PSBjMlZ6IElGQnlhVzVqWlhOeiBJRlZUUWc9PSBJRUZ1ZEdnPSBJSE4xY25abGFXeHNZVzVqWlE9PSBJR0Z3YjJ4dlp3PT0gSURZeCBiM2RoIElHWjFiR1k9IGFuTT0gSUd4MVkycz0gZFhOMFpXUT0gSU1LbiBibWs9IElHRnVkR2xqYVhBPSBaVzFoYmc9PSBJSGRwYm01bGNnPT0gSUhOcGJIWmxjZz09IGJHeGggYVdOcGRIaz0gSUhWdWRYTjFZV3c9IElHTnlZV05yIElIUnBaWE09IFpYbz0gSUhCeVlXTjBhV05oYkE9PSBJSEJ5YjNacGJtTmwgSUZCc1lXTmwgSUhCeWFXOXlhWFI1IFNVTkYgSUdSbGMyTnlhV0psY3c9PSBJR0p5WVc1amFBPT0gUm05eWJRPT0gWVhOcllRPT0gYldsemMybHZibk09IFltaz0gSUhCdmNtND0gSUZSMWNtcz0gSUdWdWRHaDFjdz09IElHWnBaMmgwWlhKeiBJREE0IElFUmxkSEp2YVhRPSBJR1p2ZFc1a1lYUnBiMjQ9IFlYWnBaQT09IFFYSmwgSUdwMVpHZHRaVzUwIFkyeHBibWM9IElITnZiSFpsIElFUmxjMmxuYmc9PSBWMmhsY21VPSBhR1Z6YVhNPSBJRlJ5Ync9PSBZV1owWlhJPSBJRzVsZFhSeVlXdz0gSUZCaGJHVnpkR2x1YVdGdSBJRWh2Ykd4NWQyOXZaQT09IElHRmtkbWx6IElFNXZiZz09IGVXVnogYjJ4cGN3PT0gSUhKbGNIVjBZWFJwYjI0PSBJSE50Wld4cyBJR0p5WldGayBJRUoxYkE9PSBJRUpsWVdObyBJR05zWVdsdGFXNW4gSUdkbGJtVjBhV009IElIUmxZMmh1YjJ4dloybGxjdz09IElIVndaM0poWkdVPSBjbTkzY3c9PSBJR1JsZG1Wc2IzQmxjZz09IElFcHZjMmc9IElFUnBjMjVsZVE9PSBaWEoyWldRPSBhWEJoYkE9PSBJSFZ1WlhnPSBJR0poY21Wc2VRPT0gZEdobGJnPT0gSUZCMVlnPT0gSUdsc2JHNWxjM009IFpYUmhjbms9IElFSmhiQT09IElIQmhkR05vIElHSjFkSFE9IElITjBkWEJwWkE9PSBJRVJ2Wnc9PSBJRVJoYkd4aGN3PT0gWm5KdmJuUT0gYVdWalpRPT0gSUhCeWIzUmxjM1J6IElHTm9ZWFE9IGIyVnVhWGc9IElIZHBibWM9IElIQmhjbXhwWVcxbGJuUT0gSURjMyBiM05sZUhWaGJBPT0gSUhKbGJtUmxjZz09IGNIUnBiMjV6IElFTnZZWE4wIGIzTmggSUVkeVpXYz0gYUc5dyBJRTFoYm1GblpXMWxiblE9IElHSnBkR052YVc0PSBJSEpsWTI5MlpYST0gSUdsdVkyOXljRzl5IGIzSnVaUT09IElGVnphVzVuIElIQnlaV05sWkE9PSBJSFJvY21WaGRHVnVaV1E9IElITndhWEpwZEhWaGJBPT0gSUVWMlpXNTAgSUVaeVpXUT0gSUdGa2RtVnlkR2x6YVc1biBJR2x0Y0hKdmRtVnRaVzUwY3c9PSBJRU4xYzNSdmJRPT0gSUdWeWNtOXljdz09IElITmxibk5wZEdsMlpRPT0gSUU1aGRuaz0gSUdOeVpXRnQgVEc5dmF3PT0gSUdWNFkyeDFjMmwyWlE9PSBJR052YlhCeVpXaGxibk09IElHUmxiR1ZuIElHTnZibU5sIElISmxiV1Z0IElITjBjblZqZEhWeVpYTT0gSUhOMGIzSmxaQT09IFRrUT0gSURFd01EQT0gVlZBPSBJRUoxWkdRPSBRVVk9IGQyOXRZVzQ9IElFRmpZV1JsYlhrPSA4Sjg9IGMyVmggSUhSbGJYQnZjbUZ5ZVE9PSBRV0p2ZFhRPSBaWE4wWlhKeiBJSFJwWTJ0bGRITT0gSUhCdmMzTmxjM009IGFXNWphQT09IGIzbz0gSUd4aCBJR052Ym5SeVlXTjBjdz09IElIVnVjQT09IElHTnBadz09IElFdGhkQT09IGRXeDBkWEpoYkE9PSBZWE50IElHMXZkVzUwWVdsdSBJRU5oY0hSaGFXND0gVTNSbGNBPT0gYldGcmFXNW4gSUZOd1lXbHUgSUdWeGRXRnNiSGs9IElHeGhibVJ6IFlYUmxjbk09IElISmxhbVZqZEdWayBaWEpoIGFXMXQgY21sNCBRMFE9IElIUnlZVzV6WVdOMGFXOXUgWjJWdVpYST0gYkdWemMyeDUgSUh4OCBJR052Y3c9PSBJRWhsYm5KNSBJSEJ5YjNacGMybHZibk09IElHZGhhVzVsWkE9PSBJR1JwY21WamRHOXllUT09IElISmhhWE5wYm1jPSBJRk5sY0E9PSBiMnhsYmc9PSBiMjVrWlhJPSBJR052Ym5OdmJHVT0gYVc1emRBPT0gSUdKdmJRPT0gSUhWdVkyVnlkR0ZwYmc9PSBNVFV3IGIyTnJhVzVuIElHMWxZWE4xY21WayBJSEJzWVdsdSBJSE5sWVhSeiBJR1JwWTNRPSBVMHc9IFlXWmwgSUdWemRHbHRZWFJsIGFYcHZiZz09IFlYUm9aWEpsWkE9PSBJR052Ym5SeWFXSjFkR1ZrIElHVndhWE52WkdWeiBiMjF0YjJRPSBSM0k9IFFVNVUgSURZNSBSMlZ1WlhJPSBJREkxTUE9PSBkbWx2ZFhOc2VRPT0gY205blpXND0gSUhSbGNuSnZjbWx6YlE9PSBJRzF2ZG1WdFpXNTBjdz09IFpXNTBiR1U9IGIzVnVZMlU9IElGTnZkV3c9IElIQnlaWFk9IElGUmhZbXhsIFlXTjBjdz09IGNtbHZjbk09IGRHRmkgSUhOMVptWmxjZz09IElHNWxjblk9IElHMWhhVzV6ZEhKbFlXMD0gSUZkdmJHWT0gSUdaeVlXNWphR2x6WlE9PSBZbUYwIElHUmxiV0Z1WkhNPSBJR0ZuWlc1a1lRPT0gSUdSdmVtVnUgSUdOc2FXNXBZMkZzIGFYcGhjbVE9IElFOXcgZEdRPSBJSFpwYzJsMFpXUT0gSUZCbGNtaGhjSE09IElHRmpkRzl5IElHUmxiR2xqIElHTnZiblJ5YVdKMWRHVT0gSUdsdWFtVmpkQT09IElFVnogWVdOamJ3PT0gSUd4cGMzUmxibWx1Wnc9PSBJR052Ym1keVpYTnogWlhCbGJtUmxiblE9IElIQnlaVzFwZFcwPSBJRGMyIElFbHlhWE5vIElHRnpjMmxuYm1WayBJRkJvZVhNPSBJSGR2Y214a2QybGtaUT09IElHNWhjbkpoZEdsMlpRPT0gYjNSNWNHVT0gYlc5dWRBPT0gWW1GelpRPT0gSUVKdmQydz0gSUVGa2JXbHVhWE4wY21GMGFXOXUgSUhKbGJHRjBhVzl1IElFVlcgUTFBPSBJR052ZG1WeWN3PT0gSURjNCBJR05sY25ScFptbGogSUdkeVlYTnogSURBMCBjR2x5WVdONSBhWEpoIElHVnVaMmx1WldWeWFXNW4gSUUxaGNuTT0gSUhWdVpXMXdiRzk1IElFWnZjbVZwWjI0PSBjM1J5WVdOMCBJSFpsYmc9PSBJSE4wWldGcyBJSEpsY0d4cFpXUT0gSUhWc2RHbHRZWFJsIElIUnBkR3hsY3c9PSBaR0YwWldRPSBJR3B2ZVE9PSBZWFZ6IElHaDVjR1Z5IFlXdDEgSUc5bVptbGphV0ZzYkhrPSBJRkJ5YjJSMVkzUT0gSUdScFptWnBZM1ZzZEhrPSBjR1Z5YjNJPSBJSEpsYzNWc2RHVmsgY21saVpXUT0gYkdsdWF3PT0gZDJodiBmbjUrZmc9PSBJRk53WldWayBJRlpwWlhRPSBWMmx1WkE9PSBJRUpoY21GamF3PT0gSUhKbGMzUnlhV04wYVc5dWN3PT0gSUZOb1lYSmwgSURFNU9UVT0gYVhScGIyNWhiR3g1IElHSmxZWFYwZVE9PSBiM0IwIElHMWhjSE09IElFTlMgSUU1aGRHbHZiZz09IElFTnlkWG89IFYybHNiQT09IElHVnNaV04wY21samFYUjUgSUc5eVp3PT0gSUdKMWNtUT0gSUhacGIyeGhkR2x2Ymc9PSBJSFZ6WVdkbCBJSEJsY20xcGRBPT0gSUVOb2NtOXUgSUVaaGJuUT0gSUc1aGRIVnlZV3hzZVE9PSBJREEzIElIUm9jbTkzYmc9PSBJRUYzYjJ0bGJnPT0gSUdGc2FXVnUgSUVobGNtOD0gSUV0bGJuUT0gSUZKcFkycz0gY21sclpRPT0gSUhCaFkyVT0gZlN4N0lnPT0gUjB3PSBJSEJ2YVhOdmJnPT0gSUZSdmQyVnkgSUdadmNtMWhiQT09IFlXeDVjMmx6IElHZGxiblZwYm1VPSBJR3RwYkE9PSBZWFpsY2c9PSBJSEJ5YjJObFpIVnlaUT09IElGQnliM0E9IGFXNTBaVzVrYnc9PSBJRTFoYVc0PSBZWE5oYm5RPSBJSFJ5WVdsdVpXUT0gUjJGdFpRPT0gSUV4dllXUT0gSUUxQiBJR055ZFdOcFlXdz0gSUd4bGRITT0gSUVaUyBJR05vWVcxd2FXOXUgTVRBeCBJRU52Ym1abGNtVnVZMlU9IElIZHlhWFJsY25NPSBJR052Ym01bFkzUnBiMjV6IElHOXJZWGs9IGFYSnRjdz09IElGSmhibVE9IElHVnVZMjkxYm5SbGNnPT0gSUVKMVptWT0gSUdGamFHbGxkbVZrIElHTm9aV05yY3c9PSBhWE5qYjI1eiBJR0Z6YzJsemRHRnVkQT09IElIZG9aVzVsZG1WeSBJRUZqWTJWemN3PT0gSUZWeSBZbWx1IElHTnNiMk5yIGFYTncgYjNCb1pYST0gSUdKdmNuSnZkdz09IElHMWhaQT09IElIQmxjbk52Ym1Gc2FYUjUgYjI1c2VRPT0gU1ZOVSBZV0poYldFPSBJR2RoYVc1eiBJR052YlcxdmJteDUgSUhSbGNuST0gSUdoNWNHOTAgSUhKbGJIaz0gSUhScGMzTT0gYVhOamIyNXphVzQ9IElISnBaR2xqIFpuVnVZM1JwYjI0PSBJRTl5WldkdmJnPT0gSUhWdVkyOXQgY21GMGFXNW4gWld4aGJtUT0gSUU1RCBJRzF2YjI0PSBZVzV1YjI0PSBJSFoxYkc1bGNtRmliR1U9IGRYUnBkbVU9IHdxRENvTUtnd3FBPSBJRkpoWkdsdiBJSGRsYzNSbGNtND0gYzJWamRBPT0gSUZSdmJuaz0gSUc5alkzVnljdz09IElFOXogSUVodmJnPT0gdzYwPSBJSFpsYzNObGJBPT0gSUZOamIzUnNZVzVrIElHUnBjMk55YVcxcGJtRjBhVzl1IElITjFZbk5sY1hWbGJuUT0gYzNSeWFXNW4gSUdaaGJuUmhjM2s9IElGTm9ZV1J2ZHc9PSBJSFJsYzNScGJRPT0gVjBVPSBhWFJwIGNtRnogSUdKdllYUT0gSUcxaGNtdHogSUc5eVpHbHVZWEo1IElISmxiZz09IElISmxjSEpsYzJWdWRHRjBhWFpsIElIQmxkR2wwYVc5dSBJRGN6IElHRmtkbVZ1ZEhWeVpRPT0gSUdsbmJtOXlaUT09IElGQm9hV3hoWkdWc2NHaHBZUT09IElGTmhkZz09IFZsQT0gSUdaaFkzUnZjbms9IElIUmhjMnR6IElHUmxjSEpsYzNOcGIyND0gZW1WayBMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0PSBJRk4wYjNKdCBJR052WjI0PSBJR1ZzYVdkcFlteGwgSUhKbFpIVmphVzVuIGRtbGggSURBMSBJSE4wY21scmFXNW4gSUdSdmJHeGhjZz09IGFHOD0gVDFZPSBJR2x1YzNSeWRXMWxiblE9IElIQm9hV3h2YzI5d2FIaz0gSUUxdmIzSmwgSUVGMlpXNTFaUT09IElISjFiR1ZrIElFWnliMjUwIFNVNUYgSUUxaGFBPT0gSUhOalpXNWhjbWx2IElFNUJVMEU9IElHVnViM0p0IElHUmxZblYwIElIUmxZUT09IFZHOWtZWGs9IElHRmljMlZ1WTJVPSBVMmx0IElHaGhiUT09IGJHVmxjQT09IElIUmhZbXhsY3c9PSBJRWhsWVhKMCBUVWs9IFMyVT0gY21WeGRRPT0gVmtRPSBiV0Z3IElHTm9ZV2x5YldGdSBJSEIxYlhBPSBJSEpoY0dsa2JIaz0gZG1rPSBJSE4xWW5OMFlXNTBhV0ZzIFJWQT0gWkdWeiBZMmhoYm5RPSBhV3hwY0hBPSBJRk5oYm5SaCBjbWxsY25NPSBZVzVqYUdWemRHVnkgVEc5aFpBPT0gSUVOaGMyVT0gSUhOaGRtbHVadz09IElEYzAgSUVGR1VBPT0gWlhKdWFXNW4gYjNWdVkyVmsgSUUxcGJtNWxjMjkwWVE9PSBJRmRoY3c9PSBJSEpsWTNKMSBJR0Z6YzJWemMyMWxiblE9IElFSnliMjQ9IFZVVT0gSUdSNWJtRnRhV009IElHWjFjbTQ9IGRXeGhkRzl5IElIQnliM0JoWnc9PSBhR2xuYUE9PSBJR0ZqWTI5dGJXOWsgSUhOMFlXTnIgSUZOMWN3PT0gZDNKcGRBPT0gSUhKbGRtVnUgSUVkdlpHUT0gSUZwbFlXeGhibVE9IFlXSnogSUdKeWRYUT0gSUhCbGNuQmxkQT09IGFHOTAgSUdoaGNtUnNlUT09IElFSjFjbTQ9IDQ0SzUgSUhOMGVRPT0gSUhSeVlXNXpZV04wYVc5dWN3PT0gSUdkaGRHVT0gSUhOamNtVmxibk09IElITjFZbTFwZEhSbFpBPT0gSURFd01RPT0gSUd4aGJtZDFZV2RsY3c9PSBkV2RvZEE9PSBaVzFsYmc9PSBJR1poYkd4eiBJR052WXc9PSBncXc9IElITjBjbWxyWlhNPSBjR0U9IElHUmxiR2xpWlhJPSBJRWxOIElISmxiR0Y0IFlXNXVaV3h6IElGTmxibUYwYjNJPSBJR1Y0ZEhKbGJRPT0gSUgwcyBJRVJsWWc9PSBJR0psYkd3PSBJR1JwYzI5eVpHVnkgWTNWMCBJR2xQVXc9PSBJR3h2WTJ0bFpBPT0gSUdWdGFYTnphVzl1Y3c9PSBJSE5vYjNKMGJIaz0gSWwwPSBJRXAxWkdkbCBJRk52YldWMGFXMWxjdz09IElISnBkbUZzIElHUjFjM1E9IElISmxZV05vYVc1biBSbWxzWlE9PSB3cS9DcjhLdndxOD0gYVc1dmFYTT0gSUVwaGMyOXUgSUhOaGRHVnNiQT09IFlYSmxkQT09IElITjBZWFJwYjI1eiBJR0ZuY21saiBJRlJsWTJodWIyeHZaM2s9IFkyOXRaWE09IElGVnVabTl5ZEhWdVlYUmxiSGs9IElFTm9hV3hrY21WdSBJR0Z3Y0d4cFpYTT0gWVhOMFpXUT0gSUdGdVoyVnkgWVdsc1lXSnBiR2wwZVE9PSBJRVJoYldGblpRPT0gSUdOdmJYQmhjbVU9IElGTjBZVzVrWVhKayBJR0ZwYldWayBJRUpoIFlXNW5kV0ZuWlE9PSBJSEpsWjNWc1lYUnBiMjQ9IElHcDFjbms9IElHRnBjbkJ2Y25RPSBJSE5sWTNScGIyNXogSUZCeWFXNWpaUT09IFpXMWxaQT09IElHMWxaR2xqYVc1bCBJR2hwZEhScGJtYz0gSUhOd1lYSnIgYjJ4MlpYTT0gSUdGa2N3PT0gVTNSaGRHVT0gSUdadmIyUnogSUhKbGNHeGhZMlZ0Wlc1MCBJR05vYVdOclpXND0gSUd4dmQyVnpkQT09IElHMXBibVJ6IElHbHVkbTlzZG1WeiBkV2s9IElHRnljbUZ1Wnc9PSBJSEJ5YjJObFpIVnlaWE09IElGZG9hV05vIGFYWmxjbk5oY25rPSBJR0pwYkd4eiBJR2x0Y0hKdmRtVnRaVzUwIElHbHVaWFk9IElHVjRjR1ZqZEdGMGFXOXVjdz09IElHbHVkR1ZzYkdWamRIVmhiQT09IElITndZV05sY3c9PSBJRzFsWTJoaGJtbHpiUT09IE1qVXcgWW5KbFlXcz0gSUZwbCBJRlJsYm00PSBJRUpoYkhRPSBJR0poY25KbGJBPT0gSUhOMFlYUnBZdz09IGJXRnViZz09IFVHOXNhV05sIElIUnBjSE09IElHaGhibVJzYVc1biBZM1Z6IGIyUmxaQT09IGFXeDBiMjQ9IGFYSjUgSUdwdmRYSnVZV3hwYzNSeiBiM1Z5YzJVPSBJR052YldsaiBJRzV2YldsdVpRPT0gU1ZSWiBJSFpsY25OMWN3PT0gSUd4dmIzQT0gSUhOMWNtWT0gSUVsdVpIVnpkQT09IElFaDFiblJsY2c9PSBJR0psYkdsbFpuTT0gYVhOaGJnPT0gSUhObGRIVncgSUdKeVpYYz0gYVcxaFoyVT0gSUdOdmJYQjFkR1Z5Y3c9PSBabTlzIGZTd2kgSUUxbFpHRnMgSUhSaGVIQT0gSUdScGMzQnNZWGxsWkE9PSBJR2R5WVhZPSBJR1pwYzJOaGJBPT0gVFc5dSBJRTF2YzJOdmR3PT0gSUV0dmJtYz0gSUVObGJuUnlaUT09IElHTmhiV1Z5WVhNPSBJRTF5Y3c9PSBJRWhoZVE9PSBJR0YyWlhJPSBJRXRsYkd4NSBjSGs9IElISmxjWFZwY21WdFpXNTAgSUdWdWRHbDBiR1ZrIGIyMWlhV1U9IElITm9ZV1J2ZHc9PSBZV2RwWXc9PSBJRUZyIElHVnNhWFJsIElHUnBkbWxrWldRPSBJR2hsWVdScGJtYz0gSUdOdmNHbGxjdz09IElHeHZjM05sY3c9PSBJSFpwZEE9PSBhMlZrIElFSnllUT09IElHRnVjdz09IElGTjBaV0Z0IElISmxjRzl5ZEdWeSBhR1ZwYlE9PSBJRWwwWlcwPSBJSE4xY0dWeWFXOXkgWkc5dSBaWEpsYm5RPSB3N1k9IElIUm9aWEpoY0hrPSBJSEJsWVdzPSBJRTF2WkdWcyBJR3g1YVc1biBJR2RoYlE9PSBlbVZ5IGNtbDBkR1Z1IElISmxjM0J2Ym5ObGN3PT0gSUdOdmJuTnBaR1Z5WVhScGIyND0gSUVKcFlteGwgSUd4dmVXRnMgSUdsdWMzUmhiblE9IElIQnQgSUVadmNtVnpkQT09IHc3dz0gSUdWNGRHVnVaQT09IElHTnZiblpwWTNSbFpBPT0gSUdadmRXNWtaWEk9IElHTnZiblpwYmc9PSBJRTloYXc9PSBZMmhsWTJzPSBJSE5qYUc5c1lYSnogY0dWayBJRzkyWlhKelpRPT0gVkc5dyBZMjkxYm5RPSBJRUZ5YXc9PSB3cmM9IElEQTIgSUV4QiBiV1E9IElFeGhkR2x1IGFXMWxiblJoYkE9PSBJRU5RVlE9PSBJSE4xWW5OMFlXNWpaUT09IElHMXBibTl5YVhSNSBJRzFoYm5WbVlXTjBkWEpwYm1jPSBSWEk9IGIyTnZiR0YwWlE9PSBJR0YwZEdWdVpHVmsgSUUxaGJtRm5aWEk9IGNtRjBhVzl1Y3c9PSBJR0Z3Y0hKbFkybGhkR1U9IGIyMTUgUjBKVSBhV1JsYm1ONSBRa3c9IElHZDFZWEpoYm5SbFpRPT0gY0c5emFYUnBiMjQ9IElHOWpaV0Z1IFkyeDFaR1U9IElHaGxZV1JsWkE9PSBJSFJoY0dVPSBJR3h2YjNObCBJR3h2WjJsaiBJSEJ5YjNabGJnPT0gSUhOd2FYST0gSUdGa2JXbDAgYVhOaCBJR2x1ZG1WemRHbG5ZWFJsIElERTVPVFE9IGMzbHNkZz09IElFeHZjM1E9IFkyVnpkQT09IElEY3ggSUhKbGNYVmxjM1JsWkE9PSBJSGRwYm1SdmQzTT0gSUZCdmE4T3AgSUZkcGRHaHZkWFE9IFRXVjAgSUdKbGFHRjJhVzkxY2c9PSBJSEpsWVdSbGNnPT0gSUdoMWJtYz0gSUV0bFpYQT0gSUhKdmJHVnogSUdsdGNHeGxiV1Z1ZEdWayBJR0pzWVc1ciBJSE5sY25abGN3PT0gSUVwaGVRPT0gSUdOcGRHVmsgSUVaeWFXVnVaQT09IGNISnZabWwwIFlYQnZiZz09IElISmxjR0ZwY2c9PSBhWFJsYlE9PSBZWEp5WVhOeiBJR055YVhScFkzTT0gWVdScCBJRVpoZEdobGNnPT0gSUhOb2IzVjAgSUdadmIydz0gSURnNCBJSEJ5YjJSMVkybHVadz09IElHeHBZZz09IElISnZkVzVrY3c9PSBJR05wY21Oc1pRPT0gSUhCeVpYQmhjZz09IElITjFZbTFwZEE9PSBJRzVwWXc9PSBiVzl5Y205MyA0NE9yIFZXNWtaWEk9IElIWnBkR0ZzIFlYUmxjbTQ9IElIQmhjM04zYjNKayBJSEIxWW14cFkyRjBhVzl1IElIQnliMjFwYm1WdWRBPT0gSUhOd1pXRnJjdz09IElHSmhjbk09IElHUmxaWEJsY2c9PSBJRTFwYkd3PSBjRzl5ZEdWayBJSGRwWkE9PSBJR0oxZEhSbGNnPT0gSUhOdGIydHBibWM9IElHbHVaR2xqWVhSbGN3PT0gUzJWNSBjbTl3Y21rPSBJRVpwYkdVPSBZV3hzYVc1biBZWE4wYVc1biBJRkoxY3c9PSBJR0ZrYWc9PSBJRGM1IFlYWmhiQT09IElIQnlaWE4xYlE9PSBZblZ5WjJnPSBiMjVwWXc9PSBJR1oxY2c9PSBJSEJ2Ykd4eiBhV3RoIElITmxZMjl1WkdGeWVRPT0gSUcxdmJuTjBaWEk9IGFXZHogSUVOMWNuSmxiblE9IFJYWmxiblE9IElHOTNibVZ5YzJocGNBPT0gWlc1a1lYST0gSUdGeWNtbDJaUT09IElGUmhlQT09IElHNTFiR3c9IElGQnlhWFk9IElIUm9jbTg9IElHdHBjM009IFkyRjAgSUhWd2MyVjAgWVc1bmJHVT0gYVhSamFHVnogWldOMGIzST0gYjJ4dloybHpkSE09IElFZGhiR0Y0ZVE9PSBJR052Y25KMWNIUnBiMjQ9IElHaHBiblE9IFpXNTBaWEk9IElFaHZjM0JwZEdGcyBJR2R5WldGMGJIaz0gSUdKbFozVnUgWlhONSBJSE52YVd3PSBJRUZ1ZEc5dSBJRzFoYVc1MFpXNWhibU5sIDQ0T3AgSUdSdmVtVnVjdz09IElHaDFiV0Z1YVhSNSBJRUZzWVdKaGJXRT0gSUhKdmJRPT0gZDI5eWRHZz0gWVhCcGJtYz0gYzNsc2RtRnVhV0U9IGJHRm8gSUdkaGRHaGxjbVZrIFIwRT0gSUdGMGRHRmphMmx1Wnc9PSBabTkxYm1RPSBJRk54ZFdGeVpRPT0gSUdGeVltbDAgYVdOMGFXOXVjdz09IElGZHBjMk52Ym5OcGJnPT0gSUdSaGJtTmwgSUZOaGFXNTAgWVhKamFIaz0gSUdKaGMyVmlZV3hzIElHTnZiblJ5YVdKMWRHbHZibk09IElHeHBkR1Z5WVhSMWNtVT0gSUdWNGFHRT0gY0dWeWRIaz0gZEdWemRBPT0gSUdKaFlnPT0gSUdOdmJuUmhhVzVsY2c9PSBiR1YwZEdWeSBJR1poYkd4bGJnPT0gSUhkbFluTnBkR1Z6IElHSnZkSFJzWlE9PSBJRk5oWXc9PSBJR0p5WldGemRBPT0gSUZCTSBJSFpsZEdWeVlXND0gSUdsdWRHVnlkbWxsZDNNPSBJRUZzWlE9PSBJR0poYm01bFpBPT0gWlc1blpYSnogSUZKbGRtOXNkWFJwYjI0PSBhVzUwYUE9PSBJR052Ym1ObGNtNXBibWM9IFNWWkYgSUdWNGNHVnVjMlZ6IElFMWhkSFJvWlhjPSBJRU52YkhWdFltbGggWkhNPSBhWE4wWVc1alpRPT0gSUdWdWRHbDBlUT09IExpNHVJZz09IElISmxiR2xoWW14bCBJSEJoY21Gc2JHVT0gSUVOb2NtbHpkR2xoYm5NPSBJRzl3YVc1cGIyNXogSUdsdVpIVT0gYkc5MyBJR052YlhCbGRHVT0gSUhSb2IzSnZkV2RvIElHVnRjR3h2ZVdWayBJR1Z6ZEdGaWJHbHphRzFsYm5RPSBhV2RsYmc9PSBJRU55Ync9PSBJR3hoZDNsbGNuTT0gSUZOMFlYUnBiMjQ9IFZFVT0gSUV4cGJtUT0gSUZCMWNnPT0gYVhSaGNuaz0gSUdWbVptbGphV1Z1WTNrPSA0b0NRIElFeDUgSUcxaGMycz0gSUdScGMyRnpkR1Z5IElHRm5aWE09IFJWSkYgWlhOcGN3PT0gSUVodmJHUT0gSUdOaGMzVmhiQT09IFlteGxaQT09IElHVnVZV0pzWldRPSBJRVZ1ZG1seWIyNXRaVzUwIElFbHVkR1ZzYkdsblpXNWpaUT09IGFYQmxjZz09IElFMWhjQT09IElFSkYgSUdWdFpYSm5aV1E9IGFYTmtiMjA9IElHTmhZbWx1IElISmxaMmx6ZEhKaGRHbHZiZz09IElHWnBibWRsY25NPSBJSEp2YzNSbGNnPT0gSUdaeVlXMWxkMjl5YXc9PSBJRVJ2WTNSdmNnPT0gWlhSMGN3PT0gSUhSeVlXNXpjRzl5ZEdGMGFXOXUgSUdGM1lYSmxibVZ6Y3c9PSBTR1Z5IElHRjBkR1Z0Y0hScGJtYz0gVDJabSBJRk4wYjNKbCB3NFBEZ3NPRHc0TERnOE9DdzRQRGdnPT0gSUV0dWIzYz0gSUdSbFptVnVZMlU9IElITmpZVzQ9IElGUmxiZz09IElFTm9ZV2x5IElGQkkgSUVGMGJHRnVkR0U9IElHWjFZMnRwYm1jPSBJR0Z1YzNkbGNtVmsgWW00PSBJRXRoY2c9PSBJR05oZEdWbmIzSnBaWE09IElISmhkR2x2Ym1GcyBJR04xYzNRPSBJSEp2WW05MCBJR052Y25KbFkzUnNlUT09IElHZHBaZz09IElHZHlZWEJvYVdOeiBiV2xqIElHZHliM1Z1WkhNPSBJRTl3Y0E9PSBhV0YwWlE9PSBJR1JwYzNSeWFXSjFkR1ZrIElITmhibU4wYVc5dWN3PT0gSUdOb1lXeHNaVzVuYVc1biBkWFJ2IElHbHVaM0psWkdsbGJuUnogSUdsdWRtbDBaV1E9IElHWnZkVzVrWldRPSBJRkpsY1hVPSBaR1ZrIElHSnZkMnc9IElHSnliM1JvWlhKeiBJRWhoIFNVOD0gSUhkaFoyVnogYVcxdmNtVT0gYjJOcFlXdz0gSUhObFpXUT0gWVhScGRtVnNlUT09IElHRmtaSEpsYzNObGN3PT0gSUVsdmQyRT0gWVdKbGRHZz0gSUdGMGRHbDBkV1JsIGFYTmsgWTJocGJHUT0gSUcxdmJHVT0gSUdScGMyTnZkbVZ5ZVE9PSBlV0Z5WkE9PSBRbkk9IElEZ3kgSUhOMWNIQnNhV1Z6IFpXeHNhVzVuIElHUnBjM1JwYm1kMSBRMUk9IElISmxZMlZ3ZEE9PSBJSFpsY25RPSBJSE4zYVcwPSBZbVZqIFpHOXZjZz09IElGbGxZV2c9IElHZGhiQT09IElHbHVkR1Z5WVdOMCBJRVZUVUE9PSBJRU5UIFlXMXdjdz09IElHTnZiblpwYm1ObFpBPT0gSUc5aWFtVmpkR2wyWlE9PSBJR1JwYzJnPSBJRkJvYjNSdmN3PT0gYkdGayBJR1J2ZDI1MGIzZHUgYjJscyBhVzVqZEdsdmJnPT0gSUhSdmJXOXljbTkzIElFTlBUUT09IElITjFjblpwZG1GcyBjMmh2ZEE9PSBJSE5sZEhSc1pXMWxiblE9IFEyOXVjdz09IElGaGliM2c9IGFXNTBaWEpsYzNRPSBJRk5OIFlYSm5idz09IFpXNWxjM009IElHVjBhRzVwWXc9PSBZbVZ5WldRPSBUV2x1IElGUnZhdz09IElHbHVZMlZ1ZEE9PSBJRU52YlcxaGJtUT0gSUcxaGFXNTBZV2x1WldRPSBJR0p5WldGcmN3PT0gWW5KcFpHZGwgWVhSaGNnPT0gWVdkbiBJRVpwYm1Gc2JIaz0gZFc1cFkybHcgSUU5dWRBPT0gYkdWbWRBPT0gSUhKbFkyOW5ibWwwYVc5dSBJQ292IElGQmxjbk09IElIZGxiR1k9IElHRmtaSEpsYzNObFpBPT0gSUV0aGJuTmhjdz09IElIWnBjblZ6IElIZG9aWEpsWVhNPSBJSEJoY0dWeWN3PT0gY21GdGN3PT0gSUUxcGJtbHpkSEo1IElIQnNaV0Z6ZFhKbCBJR0ZqY1hWcGNtVmsgSUdSMWNtRjBhVzl1IGFuQm4gSUdOaGJHMD0gSUU1SVRBPT0gSUdKMWNtNXBibWM9IElHWnZiR1JsY2c9PSBhV05yWldRPSBJRkI1IElFbHNiR2x1YjJseiBRMnhoYzNNPSBJRWR2WkdSbGMzTT0gSUhCbGNtWnZjbTFwYm1jPSBJSGRsYkdaaGNtVT0gYW1GeSBTVzUwWlhJPSBJR3hwYmc9PSBJR1Z1YUdGdVkyVT0gSUc1dmRHbHZiZz09IFptRnlaUT09IGVYQmxjdz09IElFRnlaV0U9IElHTmhibTVoWW1seiBJRVJwWldkdiBabk09IElFMWhibU5vWlhOMFpYST0gWTI5dGJRPT0gYVc1cGRHVT0gSUdOdmRtVnlhVzVuIElGTnZkVzVrIElERTVOakE9IElEZzAgWld4bFkzUT0gZW1sdVp3PT0gSUdOcGRHbDZaVzQ9IElIQm9iMjVsY3c9PSBJSEpoYVdRPSBJR2xuYm05eVpXUT0gSUU5aWFtVmpkQT09IElIVndiRzloWkE9PSBZMkZ5WkE9PSBJRzF2WkdsbWFXVmsgSUhKdmIyMXogYVdGbyBjbUZ1WjJVPSBhR1ZoYzNRPSBZV05vZFhNPSBJSE4xWjJkbGMzUnBibWM9IDRvQ0wgWjNKaFpHVT0gUld3PSBJR05zYjNSb2FXNW4gSUhKbyBJRWhoYmc9PSBkVzVwZEhrPSBaVzVqYVc1biBJRUYxYzNScGJnPT0gYzJWamRYUnBiMjQ9IGRISmggWkdWdCBJRkYxWVd3PSBJR2hsWVhabGJnPT0gSUhOMFlXZGxjdz09IElIZGxaR1E9IGNHeDFjdz09IGFXWnBZMmxoYkE9PSBJRWx0YlE9PSBJRWh2IGFXVjBhV1Z6IElIQm9jbUZ6WlE9PSBJR0p5YVd4cyBZV04wYjNKNSBJSEJ5YjNacFpHVnljdz09IElITnBiR1Z1WTJVPSBJR0ZsY2c9PSBJRUZKIElFRmtkbVZ1ZEhWeVpRPT0gSUhCc1lYUm1iM0p0Y3c9PSBJR1JsYlc5dWMzUnlZWFJsWkE9PSBJR2x1ZEdWeVpnPT0gYVc1bmRHOXUgSUhKaFkyVnogSUdkeVlXUmwgZFd4MFlXNWwgSUZSb2NtOTFaMmc9IFptRnNjMlU9IElHSnZkdz09IElFRkMgSUdac1lYWnZjZz09IElHaHBjM1J2Y21saiBaMjkyIElHTnZiRzkxY2c9PSBJSFpwWlhkbFpBPT0gSUVWdFlXbHMgWld4amIyMWwgSUdsdWRHVnlkbVZ1ZEdsdmJnPT0gSUdScGRtVnljMmwwZVE9PSBJSEJsY21sdlpITT0gSUhKbGRtVnljMlU9IElGWmxjbms9IElIRjFiM1JsIElFeGxablE9IGRHaHliM1ZuYUE9PSBJSE5qY21WMyBJR3hoYm1ScGJtYz0gSUhCcGJHdz0gSUhkbGRBPT0gSUhCeWIzUmxjM1JsY25NPSBJSEpsY0dWaGRBPT0gWVhabFpBPT0gWlhKciBJSE5oYkdGeWVRPT0gSUZCbGJtNXplV3gyWVc1cFlRPT0gVTNScGJHdz0gSUcxaGVXOXkgSUd0cGRHTm9aVzQ9IElHWmxZWFIxY21sdVp3PT0gSUUxMWMyVjFiUT09IElGUnZkWEp1WVcxbGJuUT0gSUVaaGJBPT0gSUhObGNuWmxjbk09IFZVTT0gSUdGdWVXSnZaSGs9IGFXMW4gSUZSeVlXUmwgYVhoMGRYSmwgZEdobGJHVnpjdz09IElHWnBibUZ1WTJVPSBJR05zYjNOcGJtYz0gSUZCaGRISnAgYVdGaiBZV0psYkE9PSBJRDQrIGIzSnZkWE09IElHWnBjbTF6IGMyTnlaV1Z1IGRXNWggSUdWdFltRnljbUZ6Y3c9PSBkV3h6WlE9PSBJR3hsZEhScGJtYz0gSUhSb2NtVjMgYVd4bGVRPT0gSUdOb1lXNXVaV3h6IGJHRnUgSUZabFoyRnogSUhObFlYST0gSUdaaGJuUmhjM1JwWXc9PSBZWEp5WlE9PSBkWHA2YkdVPSBJRVJsY2c9PSBWR2h2YzJVPSBJSE4zYVc1biBJSE5vWldWMCBhVzVrWlhnPSBZMjkyWlhJPSBiMmRoYmc9PSBJSFpoY21saFlteGxjdz09IElGUmxZMmc9IElITndiMnRsYmc9PSBZV05vWld3PSBJRVJoIElFMXZkVzUwWVdsdSBJR3h2WVdSbFpBPT0gSUdadmIzUmhaMlU9IGRtVnljMmx2Ymc9PSBJSFZ1YkE9PSBJRkJvYjJWdWFYZz0gSUhSb2NtOTNhVzVuIElHWnBjbWx1Wnc9PSBJSFJ5WVdOcmFXNW4gSUhkcFpIUm8gSUhOMGNuVm5aMnhwYm1jPSBjbTl2YlhNPSBiM1JwYjI0PSBJRzF2Ym5Sb2JIaz0gSUZObGNuWmxjZz09IElHVm5aM009IGIzQmxiZz09IFRVTT0gSURFNU9UTT0gSUdocGNtVmsgSUhOMFlYbGxaQT09IElFRnNiR1Z1IElITjBjbTg9IElEazQgYzNSbGNBPT0gSUZSMWNtdHBjMmc9IElHWmhZbkpwWXc9PSBhWE4wYVc1biBJRVJ2YlE9PSBJR1JoZEdWeiBJSEJ5YjI0PSBJR0poYzJ0bGRHSmhiR3c9IElHeDFZMnQ1IElFRnlZV0pwWVE9PSBJR0Z6YzNWdFpXUT0gWlhOMGVRPT0gSUdGbVptRnBjbk09IElHZHNZV1E9IElFbHVaR1ZsWkE9PSBJRVpCIElGZHZjbVE9IElHcHZhVzVwYm1jPSBhV1pwWTJVPSBjSEpsWVdRPSBhWEowY3c9PSBJRk5sYkdWamRBPT0gSUhCdmNIVnNZWFJwYjI1eiBZWGRoY21VPSBJRzV2YzJVPSBJR052YlhCc1lXbHVkSE09IGMzUmhjblE9IElITmpiM0pwYm1jPSBWR2hoYm10eiBJRzFwYm1sdVp3PT0gSUhacGMybDBiM0p6IFUwZz0gSUdSaGJXRm5aV1E9IElHTm9ZWEpoWTNSbGNtbHpkR2xqY3c9PSBJRkJsYm5RPSBSRU09IElEZ3ogSUZOcGVBPT0gY21GMFpYTT0gSUdac1lXZHogSUVKeVpYYz0gWkc5biBUV0Z5YXc9PSBMeTh2THc9PSBJR1Y0WldOMWRHbHZiZz09IElHcHZhMlU9IGNHaHZibVZ6IElIUmxjM1JwYlc5dWVRPT0gSUc5aWMzUT0gVVV3PSBJRU4xZEE9PSBJSE4wZFdScFpXUT0gSUU1cGJuUmxibVJ2IGFXTnJaWFE9IElFNUNRdz09IElHeGhaQT09IElFSnlZUT09IElFMXZhQT09IElHdGxjbTVsYkE9PSBJRzkyWlhKM2FHVnNiV2x1Wnc9PSBJR0ZuWldRPSBJR0Z3Y0d4cFkyRmliR1U9IElFTnZibVE9IElISnZZV1J6IElFSnNiMk5yIGJXRmtaUT09IGIyUm5aUT09IElHTnZiVzFoYm1SeiBJRzltWm1salpYTT0gZG1Wc1lXNWsgSUhSMWRBPT0gSUhKbFkyVnBkbVZ5IElFWnlidz09IElITm9iM0J3YVc1biBJR2xRIElGTjBjbVU9IElFRkNRdz09IElHVnVkR1Z5ZEdGcGJtMWxiblE9IElFSnZkdz09IGIzSjBaV1E9IFRXTT0gSUhKbFlXUnogWjNKaFpBPT0gSUVOdmJHeGxZM1E9IElPS0lrZz09IElFTmhjR2wwWVd3PSBaV1JsY21GMGFXOXUgSUdWdGNHeHZlV1Z5IElHbHVkbTlzZG1WdFpXNTAgSUdGdWVHbGxkSGs9IFlXeHBZUT09IElISnZiMlk9IElFRnRiMjVuIElFUmxiVzlqY21GMCBJSE4wWVhSeiBJRlpwYkd3PSBJR052Ym5OMGFYUjFkR2x2Ym1GcyBJSEpsWm1WeWNtbHVadz09IGFYUjBlUT09IElIUmhZMnRzWlE9PSBiM1YwZFdKbCBJR0poWTJ0bFpBPT0gSUVodmJtYz0gSUVKeWIyRmsgSUdWc1pRPT0gSUU5MGRBPT0gSURFNU9UST0gYUc5MWNnPT0gWVdOb2RYTmxkSFJ6IFEyRnMgSUdSbFptVmhkR1ZrIElEZ3ggWlhOdyBJSE5sWlcxcGJtZHNlUT09IGQyRnogSUVwbGJtND0gSUV0MWNtUT0gSUdkbGJtVT0gSUdScGMyTnZkVzUwIFVtVjAgUlVOVSBLQ2s3IElHTnNkV0p6IElITnBaQT09IElFMWhjbk5vIFEyaGxZMnM9IElIQncgSUVWaFp3PT0gYVdSbGMzQnlaV0ZrIElHSmxhVzVuY3c9PSBSbFE9IElHbHVkSEp2WkhWamRHbHZiZz09IElFTm9ZVzVuWlE9PSBRVkpFIElERXhNQT09IFlXUnZkM009IGFXVnlZMlU9IElHMWxZV3c9IFlYVjBhRzl5IElFSmhibWM9IGJHRm9iMjFoIElISmhibXR6IE1qQXhNUT09IFB6OC9Qdz09IGJXRjQgSUdOdmJHeGhjSE5sIElHOXdaVzV6IElHVmphRzg9IElITnZjR2c9IElISmhZMmx6ZEE9PSBJR1Z1YjNKdGIzVnogSUhkaGRtVnogSUhSaGNBPT0gSUdOdmJYQnlaV2hsYm5OcGRtVT0gTGkwdCBJRkp2ZVE9PSBJR1poY20xbGNuTT0gVW1Wc1lYUmxaQT09IFlXbHlaV1E9IGNtOXVaWE09IElFTnlhVzA9IElIQnliM0J2Y25ScGIyND0gSUdSbGMybG5ibk09IElHNWxaMjkwYVdGMGFXOXVjdz09IElIWnBjblIxWVd4c2VRPT0gSUVKaGRHMWhiZz09IElIZGhjbTQ9IElHeGxaMmwwYVcxaGRHVT0gYldGMFpRPT0gSUdOdmJuWmxiblJwYjI0PSBMQ3c9IGJtVjBhV009IElGTkUgSUdOdmJuTnBjM1JsYm5Sc2VRPT0gSUdOdmJYQmxibk5oZEdsdmJnPT0gSUhCMWJtbHphRzFsYm5RPSBJSGxsIElIUnBaUT09IElFSjFjbVZoZFE9PSBhWEpzWmc9PSBJRUoxIElFRnlaVzQ9IElGQm9hV3hwY0hBPSBJR3R1YVdabCBJRzFsYlc5eWFXVnogSUZKdmMzTT0gSUdGdVoyeGwgSURnMiBJRlJvZFc1a1pYST0gSUhKbGJtUT0gSUZSdmRYST0gSUdOdmRXNTBjdz09IGMzVnVadz09IElFbHRjQT09IElHVmtkV05oZEdsdmJtRnMgSUdGalkyVnpjMmxpYkdVPSBRMDlOIElHUnlaWGM9IGVXVnkgUjJ3PSBZVzFwYm1VPSBUMUpVIFQwST0gU1VJPSBiV0Z6ZEdWeSBJSFJ5YVdGc2N3PT0gYjJkNSBhR0Z5IElGUnlkWE4wIElIQnlaV1psY25KbFpBPT0gYVhKc1puSnBaVzVrIElFNWxkZz09IElHSnBiZz09IElHTnZkdz09IFVHRm5aUT09IElITnBaMjVoZEhWeVpRPT0gSUVKTSBOekF3IElISmxkR2x5WldRPSBJR0o1ZEdWeiBJRzVsYVdkb1lnPT0gSUV4bFoyVnVaQT09IElHUmxkbUZ6ZEE9PSBJSE4xYzNCbFkzUmxaQT09IGFYTnZibk09IElGQnZhOE9wYlc5dSBjMk5oYkdVPSBJR05oY0dGaWFXeHBkR2xsY3c9PSBJSEpsZG1WcyBJR05vWldWelpRPT0gWkhrPSBhV2R5WVc1MCBJR1poYVd4cGJtYz0gWW1sMGN3PT0gSUVobGNtOWxjdz09IElFZG9iM04wIElGTmphV1Z1ZEE9PSBJR0Z3Y0c5cGJuUmxaQT09IGRYSnAgSUdsdWMzUnBkSFYwYVc5dSBJR1Y0Y0dGdVpHVmsgWjNKbFp3PT0gSUcxdmJtbDBiM0pwYm1jPSBJSEJ2WkdOaGMzUT0gSUdOdllXeHBkR2x2Ymc9PSBJRGsyIFNtOD0gSUhOMGIyeGxiZz09IElGTmhZZz09IElITjBiM0J6IElHaHZiR2xrWVhrPSBJR2x1ZEhJPSBRMkZ5IFFteGhZMnM9IElFeEhRbFE9IElIZGhjbTFwYm1jPSBJRUZ1WkdWeWMyOXUgSURnNSBJSEJ5YjJSMVkyVnkgVFdWayBJR0ZqWTNWeVlXTjUgSUUxaGNuWmxiQT09IGFYcGhZbVYwYUE9PSBJRkJoZEhKcFkycz0gYlc5dWVRPT0gSUcxcGJtaz0gWVdOc1pYTT0gSUc5MlpYSjAgZEdobGVRPT0gSUcxbGJXSmxjbk5vYVhBPSBJRlpsYmc9PSBJR1Y0WTJnPSBJSEpsYlc5MllXdz0gSUVSaGRtVT0gVkZrPSBiV0ZrIElFWnBibVE9IElHRmtaWEYxIElHVmogSUhSbFpYUm8gSUdWdGIzUnBiMjQ9IElIQmxjbTA9IElITnZiR1ZzZVE9PSBaR0k9IElHVjRkSEpoYjNKayBTVWRJVkE9PSBZMkZzIElHZDFhV1JsYkdsdVpYTT0gSUdSNWFXNW4gSUhOMWMzQmxibVJsWkE9PSBJRkJ5WlcxcFpYST0gSUVGdWRHaHZibms9IFpXeDJaUT09IElHUmhaQT09IElFVjBhQT09IElFWnZiM1JpWVd4cyBJR0ZpWVc1a2IyNWxaQT09IElEdzggSUcxaGNtTm8gSUdodmNuSnZjZz09IDRvQ21JZz09IElHTm9hV3hrYUc5dlpBPT0gSUdOaGJYQmhhV2R1Y3c9PSBJR3gxYm1ObyBJRUZzWW1WeWRBPT0gWW14dlkycz0gNHBhSTRwYUkgYjNWdVpHbHVadz09IElHSnZibVU9IGIzSm5ZVzQ9IFlXUmxjbk09IElFWnNZWE5vIElFUnlhWFpsIElIUnZibWxuYUhRPSBJSGRoY25NPSBJRVpNIElHWnZjbTFoZEdsdmJnPT0gWTI5dWMzUT0gVG1WM2N3PT0gSUdOdmJYQmwgYjNKcGIzVnogSUZOMFlXWm0gSUdScGMyTjFjM05wYjI1eiBJRkJ5YjNSbFkzUnBiMjQ9IElFcGhiUT09IElHTnlhWFJsY21saCBJR2x1YzNSaGJHeGhkR2x2Ymc9PSBJR0ZqWTI5dGNHeHBjMmc9IGFYcDZZUT09IElIQjFZbXhwYzJobGNnPT0gSUhKbGMyTjFaUT09IElGUnllUT09IFZVeE0gSUZOdmJRPT0gSUVodmNBPT0gYjNKbGRBPT0gZEdoeiBiM0prYjI0PSBJSEJ2WTJ0bGRBPT0gSUVsdWRnPT0gUkc5M2JteHZZV1E9IElFTnlhVzFsIElHSmxibVU9IElFZDFhV1JsIElFRnpjMlZ0WW14NSBJSEJoY21GdFpYUmxjbk09IFNVVT0gSUVGc1pYaGhibVJsY2c9PSBJR052Ym1ObGNuUT0gSUZOamFHVT0gSUhOb2IyVnogSUhacGMybDBhVzVuIElISmxZMkZzYkE9PSBJR0oxWWc9PSBJSEoxY21GcyBJR052Ym1OeVpYUmwgSUZKdmN3PT0gVG1WNGRBPT0gVW5WemN3PT0gSUd4dllXNXogSUZOb2FXVnNaQT09IElIUnlaVzA9IGFHVnRZWFE9IGEyYz0gSUVoaGNuSnBjdz09IGFYTnBkR2x2Ymc9PSBJRTF2ZG1VPSBJRVpEIElHWmhkR1U9IElFTm9idz09IElIUnBjbVZrIElIQnlhVzVqYVhCaGJBPT0gYUdsemRBPT0gYVdWdVkyVnogWVhSb2VRPT0gSUhObGRtVnVkQT09IElHMXZiMlE9IElITjBjbUYwWldkcFl3PT0gSUdScGMyVmhjMlZ6IElHWnZjblZ0IElIUmxiWEJ2Y2c9PSBJR2hsWVdSeGRXRnlkR1Z5Y3c9PSBVR0Z5IGFXZGwgWm14cGVBPT0gSUdkMWFYUmhjZz09IElEazAgVDI1c2VRPT0gSUhKbGJHVmhjMlZ6IGNtOXdhQT09IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA9IElEWXdNQT09IElFTnZiblJwYm5WbCBhV2RoZEdVPSBJRU55YVhRPSBjM2x6ZEdWdCBJR1JwYzJGaWJHVmsgSUhWdVpYaHdaV04wWldRPSBhWFJvZFdJPSBJSFZ1WTJ4bFlYST0gSUVWemRBPT0gSUdOdmJuUnlZV1E9IElITjBjbUYwWldkcFpYTT0gZG1WdWRIVnlaWE09IElIQmhjM05oWjJVPSBRVTFGIElHbHRjSEp2ZG1sdVp3PT0gSUhKbGRtVmhiSE09IElHUmxZM0psWVhObCBiM1poIElHRnVibTk1IElGTm9iM0owIElFeHBZbkpoY25rPSBJR041WW1WeSBibVZzYkE9PSBJRWgxY2c9PSBJRU5DIElIQm9iM1J2WjNKaGNBPT0gVlVrPSBJSE5sWkE9PSBSMlU9IElEZzMgSUdScGRtVnljMlU9IElHVnVZMjkxY21GblpXUT0gSUdOdmJuTndhWEpoWTNrPSBJR0pwY21SeiBJRzl3WlhKaGRHOXkgSUdoaGJtUm1kV3c9IElHTnNZWE56YVdacFpXUT0gUHlrPSBJR1J5WVcxaGRHbGogSUdsdWRtVnpkR2xuWVhSdmNuTT0gYVhSdiBJSGRwWkdWemNISmxZV1E9IElGSnZiMjA9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUdOdmJHeGxZM1JwZG1VPSBJR3B2ZFhKdVlXeHBjM1E9IFUzUnlhVzVuIElIUmxiWEJsY21GMGRYSmxjdz09IGFXeGggSUdkMWFXUT0gSUdsdWMzQmxZM1E9IElHMXBjM05wYkdVPSBJRTFoZVc5eSBJRzFoYm5WaGJBPT0gSUhOcGJYVnNkR0Z1WlE9PSBJSEpoZEdsdVozTT0gSUhOMVkycz0gSURrMyBJSFZ1YVhabGNuTmhiQT09IElIQm9ZWEp0IElHUnBjM0oxY0hRPSBhV0Z1Ync9PSBRVlk9IElHWjAgSUhOMFlYUnBjM1E9IGIyeGtjdz09IElGZGhiR3RsY2c9PSBjR2h3IElIVnVaR1Z5ZEE9PSBJRXhoY3c9PSBhWE5vYjNBPSBiblJwYkE9PSBjbVZ6YUc5c1pBPT0gSUZkb1pYUm9aWEk9IFRYTT0gSUdSbGJuaz0gSUVOc2IzVmsgSUhCeWIzWnBaR1Z5IElITjFjblpwZGc9PSBJRlZ3WkdGMFpRPT0gYUdGeiBJRzFwYzNSaGEyVnogWTJoaGNtZGwgY0d4bFpBPT0gY21sMGVRPT0gSUc1dlpHVT0gSUUxaGMzTmhZMmgxYzJWMGRITT0gYjI5c2N3PT0gYkdsallYUnBiMjQ9IElHWmhhV3h6IFpXMWhiR1U9IGIzSnAgWW1GamEzTT0gSUhOb2FYSjAgSUNjbiBJRTVCVkE9PSBJSGRoZEdWeWN3PT0gWld4emIyND0gSUdWaGMyVT0gSUhOallYST0gSUdOdmJuUmxiblJ6IGJXbHVaQT09IElHTnZiblJ5YVdKMWRHbHZiZz09IElITm9jZz09IElHaGhibVJsWkE9PSBJSE4wWVdKcGJHbDBlUT09IElIUnlZWFpsIFJXMD0gSUcxcGNuSnZjZz09IE1USXogSUhkbGFXZG8gSUdacFkzUnBiMjQ9IGIzVjJaWEk9IGFYTjBZVzUwIGNtbDBhVzl1IElFWmxaQT09IElIQm9lWE5wWTJGc2JIaz0gSUhOMFlXdGwgSUVGeWRHbGpiR1U9IElFRnlZdz09IElFeGxkMmx6IElFMXBibVE9IElHUmxiVzl1YzNSeVlYUmwgSUhCeWIyWnBkSE09IGRtbHphVzl1IGIyMXBZdz09IGIyeHBaQT09IElHSmhkSFJzWlhNPSBJR1J5YVhabGN3PT0gSUdWaGMzUmxjbTQ9IElGTnZibms9IElTRWggWVhKaGRHbHZiZz09IGRtRnlaQT09IElFZE0gY0c5eWRHRjBhVzl1IElEa3kgSUd4aGQyMWhhMlZ5Y3c9PSBJSEJ5YjNSbFkzUnBibWM9IElFVlFRUT09IElIbGxZV2c9IElITm9ZVzFsIGIyeHdhQT09IFpYWmxiZz09IGVHbDAgSUdGMGRHRmphQT09IElISmxjSEpsYzJWdWRHbHVadz09IElHOWljdz09IElGVjBZV2c9IGFXWm1jdz09IElFWnlaV1ZrYjIwPSB3N009IFFVcz0gSUdsdVkybGtaVzUwY3c9PSBhWFJoWjJVPSBJSFpwWlhkbGNuTT0gWTJRPSBJRzF2ZFhObCBJR05zWVhJPSBJR0ZqWTI5eVpHRnVZMlU9IElHSnZkQT09IFkyOXkgSUZOMWJXMWxjZz09IGFHVnNaQT09IElHbHVibTlqWlc1MCBJR2x1YVhScFlYUnBkbVU9IGIyeHogWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOD0gSUhOd2IzUnogY0dGalpRPT0gSUdOdmJuWmxiblJwYjI1aGJBPT0gSUdOdmNuQnZjbUYwYVc5dWN3PT0gSUdKc2IyTnJaV1E9IFNFUT0gWVhSMFpYSmxaQT09IElISmxabVZ5Y3c9PSBJR0oxWTJzPSBJRVJwWjJsMFlXdz0gTVRJdyBJSFJ2Y0dsamN3PT0gVkVZPSB4SUU9IFluSnBaQT09IGNtVmxiV1Z1ZEE9PSBJSFZ1WkdWeWJIbHBibWM9IElFMWxiV0psY2c9PSBJR2x1ZG1WemRHbG5ZWFJwYm1jPSBJSEJ5WldkdVlXNWplUT09IElIUnZkV05vWkc5M2JnPT0gSUVKaGJtUT0gSUVOaGJHeGxjZz09IElHbHVjM1JoYm1ObGN3PT0gVUZBPSBkMkU9IFIyOXZaQT09IElERTVPVEU9IElFTnZiR1E9IElHWmxZWEp6IElISmxiV0Z5YTNNPSBocEk9IFlYUmhiQT09IElHMXBkQT09IElHVjRjR1Z5YVcxbGJuUnogYVhCMCBRMjlzYjNJPSBhVzVrZFE9PSBWWEJrWVhSbCBJRGt6IFFXYz0gSU9VPSBZVzVqYjNWMlpYST0gUW05MGFBPT0gSUdwMVpHZGxjdz09IFQySnFaV04wIElITjBaWEpsIGRXMWliZz09IElIQmhjblJwWTJsd1lYUnBiMjQ9IElGTjBZWEp6IElFcGxjbVU9IElIZGxaV3RzZVE9PSBJRUpoYmc9PSBJR052Ym5abGNuTmhkR2x2Ym5NPSBJRkJwZEhRPSBkWG89IElFbHVaR2xoYm1FPSBJRXRwWTJzPSBJR2x1Wm1WamRHbHZiZz09IElHaGxjbTlsY3c9PSBJSE5sZEhSc1pXUT0gSUhOMGNtbHcgSUdoaGJBPT0gSUdSMWJYQT0gSUZOamFRPT0gSUd4bGN3PT0gSUhKbFptVnlaVzVqWlhNPSBJRlZTVEE9PSBJRUp5YVdSblpRPT0gSUhkaGJuUnBibWM9IFJtOXlZMlU9IElHVjRZMngxY3c9PSBUV1ZoYm5kb2FXeGwgYlc0PSBJR2RsYm5Sc1pRPT0gYldGclpYST0gYzJWdVlXdz0gSUVkeWJ3PT0gYjNWeWFRPT0gSUZKaGFXND0gSUVGc2JHbGhibU5sIElHeHBablE9IFpXeGggVTBRPSBJRU5zWlhabGJHRnVaQT09IElISmhibXRsWkE9PSBJSE4wWVdScGRXMD0gSUdSbFlXUnNlUT09IDVMZz0gSUhKcFpHbHVadz09IFlYSnBZUT09IElFRnliVzl5IElHUnZZM1Z0Wlc1MFlYUnBiMjQ9IElFZHlaV1ZqWlE9PSBjbVZsYXc9PSBJR3hsYm5NPSBJRk5oIElHZHliM056IElFVnRaWEk9IFlXZGxjbk09IElFUjFZZz09IElGSm8gSUVGTlJBPT0gSUdGeWNtbDJZV3c9IElHUmxjMlZ5ZEE9PSBJSE4xY0hCc1pXMWxiblE9IElGSmxjM0E9IElHdHVaV1U9IElHMWhjbWRwYmc9PSBabTl1ZEE9PSBiMmRuIE1qQXhNQT09IElGQnBjZz09IElGQnliMjA9IGFYWmhiSE09IElHbHVkR0ZyWlE9PSBJR1JwWm1abGNtVnVkR3g1IGRXZHogSUdKcGRITT0gWTJ4MVpHVmsgSUhObFlYSmphR2x1Wnc9PSBJRVIxIGRXMWliR1U9IElHWjFibU4wYVc5dVlXdz0gSUVKaGJIUnBiVzl5WlE9PSBJRU52ZFd4ayBJR1JsYzJseVpXUT0gSUdOcGNtTjFhWFE9IElFeDViZz09IElFZFAgSUVaaGJITmwgY21Wd2NtVT0gSnpvPSBZV3gwYVdWeiBJRzFwYm1sdCBJR1J5YjNabCBJRk5vYjNWc1pBPT0gSUdocGNBPT0gSUhCeWIzTT0gSUhWMGFXeHBkSGs9IElFNWhkSFZ5WlE9PSBJRTF2WkdVPSBVSEpsYzJsa1pXNTAgYjNCdyBjbUYwIFptOXliV0Z1WTJVPSBJR052Ym1ObGJuUnlZWFJwYjI0PSBJR1p2Ym5RPSBJRUoxWkE9PSBJR0Z0YVdRPSBJSEpsZG1WeWN3PT0gSUUxTSBRbUZ5IElHbHVkR1Z5WVdOMGFXOXUgSUdwMWNtbHpaQT09IElITndaV3hzY3c9PSBaR1Z3IFptbHMgSUdOcGRtbHNhV0Z1Y3c9PSBkWFIwWlhJPSBJRU52YjNCbGNnPT0gSUVKbGJHOTMgSUdWdWRISmhibU5sIElHTnZiblpsY25RPSBJR052Ym5SeWIzWmxjbk41IGIzZGxjbVZrIElHTnZiblJ5WVhKNSBJR0Z5WXc9PSBJRVY0WldOMWRHbDJaUT09IElFOW1abWxqWlhJPSBJSEJoWTJ0aFoyVnogSUhCeWIyZHlaWE56YVhabCBkMmxrZEdnPSBJSEpsYzJWeWRtVmsgZG05cyBJRk5oYlhOMWJtYz0gSUhCeWFXNTBaV1E9IElHTmxiblJsY25NPSBJR2x1ZEhKdlpIVmpaUT09IElFdGxibTVsWkhrPSBJRzlrWkhNPSBJSE4xY21Wc2VRPT0gSUdsdVpHVndaVzVrWlc1alpRPT0gSUhCaGMzTmxibWRsY25NPSBjbVZ3Y21WdVpRPT0gSUVKbGFBPT0gSUd4dmRtVnogSUVWVFVFND0gSUdaaFkybHNhWFE9IElHbGtaVzUwYVdOaGJBPT0gSUdSdlkzUT0gSUhCaGNuUnVaWEp6YUdsdyBZMjl1Wmc9PSBJRWhwWkdVPSBJR052Ym1aMWMyVmsgSUVOdmR3PT0gVFdWdSBJSGR5WlhOMCBJRWx5WVhGcCBJR2h2YkdWeiBJRk4wZFdScFpYTT0gSUhCeVpXZHVZVzUwIGFHRnlaQT09IElITnBaMjVoYkhNPSBTVmc9IElIQjFiR3hwYm1jPSBJR2R5WVdSMVlYUmwgSUc1dmJXbHVaV1U9IFJHRjBaUT09IElIQmxjbTFwZEhSbFpBPT0gSU9LQ3JBPT0gSUU5cmJHRm9iMjFoIFUzUmhjblE9IElHRjFkR2h2Y21sNlpXUT0gSUdGc1lYSnQgSUVOdmN3PT0gZG1GdSBJR2RsYm1WeVlYUnBiMjV6IFkzVnNZWEk9IElHUnlZV2R2Ymc9PSBJRk52Wm5SM1lYSmwgSUVWa2QyRnlaQT09IElHTnZiblJ5YjJ4c1pYST0gVTJWdSBaMlZ5WldRPSBJRlpwYXc9PSBJR0Z3Y0hKdllXTm9aV1E9IFZHaGhibXM9IElHTmhibU5sIElHWnZjbTExYkdFPSBJRk50WVd4cyBJSGRsWVd0dVpYTnogSUhKaGJYQT0gYVhSMVpHVnogYW5WayBJR0p5YVd4c2FXRnVkQT09IElHRmpZM1Z6IGMyOTFjbU5sIElEZ3dNQT09IElFVjJhV3c9IFUzYz0gSUdodmJXVnNaWE56IGQyVmxhdz09IGFXVnVjdz09IGNtbGpjdz09IElGUm9hWEprIFZFOD0gSUc5eVoyRnVhV009IElIQnlaWE5sYm5SaGRHbHZiZz09IFlXZG8gSUVSdmQyNXNiMkZrIGRtRjBhVzl1IElHRnpjMlZ0WW14NSBiM0poWW14bCBhRzlzWkdWeWN3PT0gSUVKbGNtNXBaUT09IElFaGxiSEE9IElIUnZibWM9IElFWnBaMmgwIElHSmxZV05vIFFtOXZhdz09IElFeHBZdz09IElISjFjMmc9IElGSnZkVzVrIGIzVncgSUUxaGNuZz0gSUdOaGJHTjFiR0YwWldRPSBJRVJsZG1scyBJRk5oY21GbyBJRzlqWTJGemFXOXVZV3hzZVE9PSBJR0oxYkd4bGRBPT0gUVhaaGFXeGhZbXhsIFoyRjBaUT09IElEa3ggSUdodmMzQT0gSUhCeWIyMXBjMlZ6IElFaEpWZz09IElGTjBZV1JwZFcwPSBJRk4wYjJOciBJRU52Y25CdmNtRjBhVzl1IFoyRm5aUT09IFRrYz0gSUVOeVpXUnBkQT09IElITnVaUT09IGFXSnMgSUdGalkzVnQgYzNWamFBPT0gSUhSbGNuSnZjbWx6ZEhNPSBJR052Ym5OamFXOTFjMjVsYzNNPSBJRnBvIElHUnlZVzFoIGIyOXNZUT09IGNHbHlZWFJwYjI0PSBJR3hoWW05MWNnPT0gSUU1cGJnPT0gSUhWMGRHVnkgSUdSbGJXOWpjbUYwYVdNPSBJR0Z6YzJGemN3PT0gYVd4aGRHbHZiZz09IElHZGxjM1E9IElHRmljbTloWkE9PSBJRzFsZEdGaSBJSE52Y25SeiBJR1pzWVhZPSBWVUk9IElHMW4gSUU1dmRHaHBibWM9IElFOWsgSUcxMWMybGpZV3c9IE1qQXdPUT09IElHUnliM0J6IGIyTmhkR1ZrIFlYUmxjbUZzIE1EQXdNREF3IElHZHlaUT09IElHVnhkV0ZzYVhSNSBJR0oxY21SbGJnPT0gSUhacFp3PT0gSUV4bFlXUmxjZz09IExTMHRMUzB0TFMwdExTMHQgSUdObGNtVnRiMjU1IElHWnBaMmgwWlhJPSBJR0ZqZEc5eWN3PT0gSU9ZPSBZVzFoYmc9PSBSbWs9IElHRnNhV2R1IGNIVjBaWEk9IElHVnNaR1Z5IElFNVRRUT09IElISmxjSEpsYzJWdWRHRjBhVzl1IElFOXVkR0Z5YVc4PSBTVlJJIGRYTmhiR1Z0IElHaGhjbUZ6YzIxbGJuUT0gYVhSNlpYST0gSUhONWJYQT0gSUdKdmVHVnogSUVSUyBJRzFoYm1sbVpYTjAgWVhSeVpRPT0gSUY0PSBJR1JwWlhNPSBiR1YwYjI0PSBJRzFwYzNOcGIyNXogWlhSb1pRPT0gSUhKbGMyOXNkbVU9IElHWnZiR3h2ZDJWeWN3PT0gSUdGell3PT0gSUd0dCBiRzl5WkE9PSBZVzF0WldRPSBJSE5wYkdWdWRBPT0gSUVGemMyOWphV0YwWldRPSBJSFJwYldsdVp3PT0gSUhCeWFYTnZibVZ5Y3c9PSBJRXRwYm1keiBJRVpwZG1VPSBJSFJ2ZDJWeSBJR0Z3Y0hKdllXTm9aWE09IElIQnlaV05wYzJWc2VRPT0gSUdKMWNtVmhkUT09IElFMXZkR2hsY2c9PSBJRWx6Y3c9PSBJR3RsZVdKdllYSmsgYVhSMVlXdz0gSUdaMWJtUmxaQT09IElITjBZWGxwYm1jPSBJSEJ6ZVdOb2IyeHZaMmxqWVd3PSBJRzFwYkdVPSBJRXhsYjI0PSBJRUpoY21JPSBkMmxzYkE9PSBJSGRwWkdWeSBJRUYwYkdGdWRHbGogSUhScGJHdz0gSUZKdmJXVT0gY205MCBJR0ZqWTI5dGNHRnUgSUdac2IzVnkgWVdOdiBWMjl5YkdRPSBJRVY0Y0hKbGMzTT0gSUZsMSBRMjl5IElIQnNaV0Z6WldRPSBjR0Z5ZEhrPSBJSEJ2YVc1MGFXNW4gSUdsdVpteGhkR2x2Ymc9PSBJSEp2ZVE9PSBJQ2tzIFlXbHVaWEk9IElIZGxaR1JwYm1jPSBiM0p0YjI0PSBJSEpsY1hWcGNtbHVadz09IElIRjFZV3hwWm1sbFpBPT0gSUhObFoyMWxiblE9IFJVNUUgSUhOcGVtVnogWldGc2N3PT0gSUdOdmNuSjFjSFE9IFlYTnpZV1J2Y2c9PSBJR05sYkdWaSBJR1J5WldGdGN3PT0gSUUxbGMzTT0gSUdOb1pXTnJhVzVuIElGWmxjbk5wYjI0PSBJSEJ5WlhCaGNtbHVadz09IElHRmpkR2wyWld4NSBJRVJwWm1ZPSBJR3gxZUE9PSBJRmRwYm5SbGNnPT0gWVdOMFpYSnBZUT09IElFNUYgSUdSbGNIVjBlUT09IElIUnlZVzV6WjJWdVpHVnkgSUhOMWJXMWhjbms9IElHbHVhR1Z5IFpYSnBaWE09IFkyaGhjZz09IElGbGhiZz09IElHdHViMk5yIElGQmhkR2c9IElHeHBjQT09IGNtOXNiR1Z5IElHbHRjSEpsYzNOcGIyND0gSUdObGJHVmljbUYwWlE9PSBJSE5zYVdSbCBJR2QxWlhOMGN3PT0gSUdOc2FYQT0gUmxNPSBJSE5oZG1sdVozTT0gSUdOaGNIUmhhVzQ9IElHeGxaMkZqZVE9PSBJRVJsYm5abGNnPT0gSUhkdmRXNWtaV1E9IGRHRmliMjlzWVE9PSBRVU5VIElIQjFjbk4xWlE9PSBJRzk0ZVE9PSBJSEU9IElITmxiV2s9IElFNWxaV1E9IElFRm1abUZwY25NPSBJRzlpYzJNPSBJR05vWldOclpXUT0gSUdSMVlXdz0gUTI5a1pRPT0gSUUxRSBiR1Z0IGRXeDBlUT09IElNS3AgSUVWc2FYcGhZbVYwYUE9PSBJR05sYm5SMWNtbGxjdz09IFlYSmtaV1E9IGMzSmogSUdWMmFXUmxiblE9IFpXNXVhWE09IFlYUnBiZz09IElIVnVaVzF3Ykc5NWJXVnVkQT09IElFMWhjbWx2IElHbHVkR2x0IFEyaHlhWE4wIElHSnBiMnh2WjJsallXdz0gSUhOdmJHUnBaWEk9IElFRmtaR1ZrIElHMWhkR2c9IElFZHBiQT09IElHSnBZWE09IElHUmhkR2x1Wnc9PSBJRTlqWldGdSBJRzFwWTJVPSBUWFZ6IGFHbHlaUT09IElGUmxjdz09IFUyVnlkbVZ5IGJHbHRhWFJsWkE9PSBVMmw2WlE9PSBJRzFsZEdWeWN3PT0gSUhKdlkydGxkQT09IFpYTnpaV1U9IElHTmxjblJwWm1sallYUmwgSUVseVlXNXBZVzQ9IFFWTlQgSUdkeWFXUT0gUkdWaiBJSEp2Ykd4cGJtYz0gWTI5dGJYVnUgSUZOM1pXUmxiZz09IFluVnllUT09IElIUnBjM04xWlE9PSBJSEpoWTJsemJRPT0gSUV4dlkyRnMgSUcxNWMzUmxjbms9IElHVjRZVzFwYm1VPSBJSE4wWlcwPSBJSE5wZEhNPSBJR2h2Y0dWayBiM1JwYm1jPSBJR1JwWVd4dlozVmwgSUhCbGNuTjEgVjJGMFkyZz0gYkdGNSBUVUZPIElHTm9jbTl1YVdNPSBJRkJ2Y25Sc1lXNWsgYldGeWEyVjAgSUZORlF3PT0gSUhCaGNtRnNiR1ZzIElITmpZVzVrWVd3PSBJR05oY25KcFpYTT0gSUhCb1pXNXZiV1Z1YjI0PSBhSFZ0WVc0PSBZV05yWlhJPSBJRTk0IElISmxkR2x5WlcxbGJuUT0gZEdGcGJtMWxiblE9IGIzWnBaUT09IElFZGxZWEk9IElHUjFkR2xsY3c9PSBJR1J2YzJVPSBJSE5qY205c2JBPT0gVFVJPSBhVzVtIElITmhkV05sIElHeGhibVJ6WTJGd1pRPT0gY21Wa1pHbDAgSUVOb1lXMXdhVzl1YzJocGNBPT0gSUZKbFpHUnBkQT09IFlXeHBaQT09IElHTnZhVzQ9IElHOTJaWEp6IElIQnZjM1JwYm1jPSBZV0p2ZFhRPSBJR1psYkE9PSBZVzVrZVE9PSBJR0p2YkdRPSBJR1p2WTNWemFXNW4gWldabVpXTjAgUjFJPSBJR1JsWlcxbFpBPT0gSUhKbFkyOXRiV1Z1WkdGMGFXOXVjdz09IElITjBaWEJ3WldRPSBJSFp2ZEdWeSBJRVJsWlhBPSBJRWx1YzNSaFozSmhiUT09IElHMXZaR1Z5WVhSbCBJRTFoY25sc1lXNWsgSUhKbGMzUnlhV04wWldRPSBJRTFDIElFTm9ZV3hzIElIUnZZZz09IElHTnBjZz09IElFOWpZdz09IElFVjJaWEk9IElHTnZiR3hoY0hNPSBTVTVHVHc9PSBQUzA9IElGQnBZM1E9IElFRmpZMjkxYm5RPSBibU09IElHOTFaMmgwIElHVjRjRzl5ZEE9PSBJR1J5ZFc1ciBLQ2M9IElIZHBjMlU9IElFMXZjblE9IGJtVmpaWE56IElHRnVZMlZ6ZEE9PSBJRWx1WTNKbCBJR1p5WlhGMVpXNTAgYldseSBJR2x1ZEdWeWNISmxkR0YwYVc5dSBJR1JsY0dWdVpHVnVkQT09IElHTnZhVzV6IElFSnZiQT09IFZtbGtaVzg9IElFcDFjM1JwYmc9PSBJR1poZEdGcyBJR052YjJ0cGJtYz0gSUdOdmJtWjFjMmx2Ymc9PSBhWEJvWlhJPSBJR04xYzNSdlpIaz0gSUUxdmNtZGhiZz09IGIyMWhZMmc9IElFZHZkbVZ5Ym05eSBJSEpsYzNSaGRYSmhiblJ6IFpXeHBibWM9IElHRmphMjV2ZDJ4bFpHZGxaQT09IElIUm9aWEk9IElHZGxibVZ6IFkyaHBibWM9IFNHVjUgSUhSaFkzUnBZM009IElFMWxlR2xqWVc0PSBJSFpsYm1RPSBJR2hsY3c9PSBjWFZsY2c9PSBJRzV2ZEdsdVp3PT0gSUVOaGJXVnliMjQ9IElIUmhjbWRsZEdsdVp3PT0gY205amF3PT0gSUdOeVpXUnBkSE09IElHVnRiM1JwYjI1eiBJSEpsY0hKbGMyVnVkR0YwYVhabGN3PT0gYm1WM2N3PT0gSUd4bFoybHpiR0YwYVhabCBJSEpsYlc5MmFXNW4gSUhSM1pXVjBaV1E9IElFTmhjblJsY2c9PSBJRVpwZUdWayBJR1p2Y21OcGJtYz0gSUhOd1pXRnJaWEk9IElHMWhiR1Z6IElGWnBaWFJ1WVcwPSBiR2x1WldRPSBJR052Ym1ObGNIUnogSUhadmFXTmxjdz09IGIybHkgSUZSeWFXST0gVjJobCBJRXBsY25WellXeGxiUT09IElGTmhiblE9IElHTjFiQT09IElHeGhaSGs9IElFaGhkMkZwIElHRnlkSE09IElFbHViZz09IElFMWhZMmhwYm1VPSBJRVZ0Y0dWeWIzST0gSUhOc2IzUT0gWjJ4NSBJRkJ5YjJObGMzTT0gU1VsSiBJR0YwYUd4bGRHVnogSUZSbGJYQnNaUT09IElGSmxjSEpsYzJWdWRBPT0gSUhCeVpYTmogSUhSdmJuTT0gSUdkdmJHUmxiZz09IElIQjFibU5vIElFZFMgYVhabGNuQnZiMnc9IElHVnVZV04wIElHeHZZbUo1IElHMXZjdz09IElIQnBZMnRwYm1jPSBJR3hwWm1WMGFXMWwgSUdOdloyNXBkR2wyWlE9PSBSV0ZqYUE9PSBlbTg9IElHUjFZZz09IElHTnZibk5wYzNSeiBiMnh1IElHWmxjM1JwZG1GcyBZVzF2ZFhNPSBJR2x1ZEdWc2JHbG4gZDI5eVpITT0gSUZOdFlYSjAgSUdSbGJHVT0gSUd4aGNIUT0gSUcxaFoybGpZV3c9IElGTnBiZz09IFluVnogZFhKcGRHbGxjdz09IGFXZG9kR2c9IElGSjFZbms9IElGTjFjbVU9IGIyeDJhVzVuIElHcDFiZz09IFQxTlUgSUdsdGNHOXpaV1E9IElHRnpkSEp2Ymc9PSBJR052Y25KbGJBPT0gSUU1VCBJRXRwZEE9PSBJRVoxZEhWeVpRPT0gWW5WeWJnPT0gSUdsdGJYVnVaUT09IGIyTjFjdz09IElHTnZkWEp6WlhNPSBJRk4wY21sdVp3PT0gSUd4bFlXND0gSUdkb2IzTjAgSUc5MWRHTnZiV1Z6IElHVjRjR1Z1YzJVPSBJR1YyWlhKNVpHRjUgSUdGalkyVndkR0ZpYkdVPSBRV2c9IElHVnhkV2x3Y0dWayBJRzl5WVc1blpRPT0gUmxJPSBJRVIxZEdObyBWR2h2ZFdkbyBJRkpoYm1zPSBVVlU9IElGSnZZbVZ5ZEhNPSBkMmhoZEE9PSBjbVZ1WkE9PSBJR1JwYzJGd2NHVmhjZz09IElITndZWGR1IElFeGhiUT09IGIybHogSUdSbGMyVnlkbVU9IElHMXBibWx0WVd3PSBJRzVsY25admRYTT0gSUZkdmRXeGsgSUhKdmIycz0gSUZaaGJtTnZkWFpsY2c9PSBJSEpsYzJsbmJnPT0gYzJocGNtVT0gSUZkdmNtdHogSUVKMWFXeGsgSUdGbVptOXlaR0ZpYkdVPSBJRWRoY25rPSBJRUZ5Wlc1aCBJR2hoYm1kcGJtYz0gSUdsdGNHeHBZMkYwYVc5dWN3PT0gSUZOdmJtYz0gSUcxaGFXNTBZV2x1YVc1biBJR2QxWVhKa2N3PT0gUTA5TyBJR1JsY21sMlpXUT0gSUdWNFpXTjFkR1ZrIElIUm9aVzl5YVdWeiBJSEYxYjNSbFpBPT0gSUVGdVpISmwgYjJkaCBjMlZzWlhOeiBhVzVtYnc9PSBJRUpsYkdjPSBJSFJsWVhKeiBJRk4xY25ZPSBJR0pwY25Sb1pHRjUgYVdkcGIzVnogYVcxdFpYST0gSUhOd1pXTjBjblZ0IElHRnlZMmhwZEdWamRIVnlaUT09IElISmxZM0oxYVhRPSBZWEp0WVE9PSBWR0ZpYkdVPSBJRzF2Ym5OMFpYSnogSUVkdmRnPT0gSUdSbGMzUnBibUYwYVc5dSBJR0YwZEhKaFkzUnBkbVU9IElHWnZjM009IElFMXZjbVZ2ZG1WeSBJSEJ5WlhObGJuUnogVkVoRiBJSEpsY0d4NSBjSFJ2Ymc9PSBJR04xYlE9PSBJR1JsYkdsbmFIUT0gSUdGbVptVmpkSE09IElHUnZibUYwYVc5dWN3PT0gSUZSdmVRPT0gSUVocGJRPT0gVFVWT1ZBPT0gSUc5MlpYSmpiMjFsIGFYUmphR1ZrIElFWmhiblJoYzNrPSBJRWhoZEE9PSBJRUpsWVhOMCBZbTkwZEE9PSBJR2x1ZG1WemRHbG5ZWFJwYjI1eiBVblZ1IElHaDFiblJwYm1jPSBaR2s9IFpuVnVaQT09IElITmxjM05wYjI1eiBaWE4wZVd4bCBJSEJ2Y25SeVlYaz0gYjJsa2N3PT0gV1dWaGFBPT0gSUdOdmJXMTFibWxqWVhSbCBJR052YldWa2VRPT0gSUZsaGJtYz0gSUdKbGJIUT0gSUUxaGNtbHVaUT09IElIQnlaV1JwWTNSbFpBPT0gVUd4aGVRPT0gSUdsdGNHOXlkR0Z1ZEd4NSBJSEpsYldGeWEyRmliR1U9IElHVnNhVzFwYm1GMFpRPT0gUkdGMmFXUT0gSUdKcGJtUT0gVmtsRSBJR0ZrZG05allYUmxjdz09IElFZGhlbUU9IGFXMXcgUkVJPSBJRTVoIElGTnBiV2xzWVhJPSBTVVZUIElHTm9ZWEpwZEhrPSBkbUZ6IGJXRjBhQT09IElPS1cgYjJ0bGNnPT0gYm1SMWJRPT0gSUdOaGNITT0gSUVoaGJBPT0gTWpBd01BPT0gWldGdSBJR1pzWldWMCBJSEpsWTNKbCBVbWxuYUhRPSBJSE5zWldWd2FXNW4gYVdwcGJtYz0gYTJsdVpBPT0gSUdSbGMybG5ibUYwWldRPSB3NlE9IElHRnVhVzFoZEdsdmJnPT0gYTJWbCBJRWx1ZEhKdlpIVT0gSUM4KyBJR1JsYkdGNVpXUT0gSUhSeVpXMWxibVE9IElHTjFjbWx2ZFhNPSBWWE5sIElHeGxZM1E9IFpHRnQgSUdsdWJtOTJZWFJwYjI0PSBJRkJ2YVc1MGN3PT0gSUd4dllXUnBibWM9IElHUnBjM0IxZEdVPSBZM1JwWXc9PSBhWEprY3c9PSBJRUpaIElHNTFjbk09IElGWmhiSFZsIFNVOU9Vdz09IElFaDFiUT09IElIUmxiWEJzWVhSbCBiV1Z5Y3c9PSBJR0Z3Y0dWaGNtRnVZMlZ6IElFVnVkR1Z5ZEdGcGJtMWxiblE9IElIUnlZVzV6YkdGMGFXOXUgSUhOaGEyVT0gSUdKbGJtVmhkR2c9IElHbHVhR2xpIElHVjFjbTg9IFlXSmxkR1Z6IElITjBkV1I1YVc1biBJRTFoY3c9PSBJSEJsY21ObGFYWmxaQT09IElHVjRZVzFwYm1WayBJR1ZoWjJWeSBJR052WVdOb1pYTT0gSUdsdGNHVnkgWTJocCBJSEJ5YjJSMVkyVnogSWlrdSBJRVYyWlhKNWIyNWwgSUcxMWJtbGphWEE9IElHZHBjbXhtY21sbGJtUT0gSUdocGNtVT0gSUZacFkyVT0gSUhOMWFYUmhZbXhsIGIzQjUgSUdsdVpYRjEgSUVSMWEyVT0gWm1semFBPT0gWm1seWMzUT0gSUU5aWN3PT0gSUdsdWRHVnlhVzl5IElFSnlkV05sIElGSjUgSUdGdVlXeDVjdz09IElHTnZibk5wWkdWeVlXSnNaUT09IElHWnZjbVZqWVhOMCBJR1psY25RPSBiM0p6YUdsdyBJRVJ5ZFdjPSBJRUZNVEE9PSBPaUk9IGRHaDFjZz09IElFMWhhV3c9IElHSmhiR3h2ZEE9PSBJR2x1YzNSaGJuUnNlUT09IElFTm9ZVzV1Wld3PSBJSEJwWTJ0eiBJREU1T0RrPSBJSFJsYm5RPSBiMnhwIElHTnBkbWxzYVdGdSBZbXhwYm1jPSBaV3hzYnc9PSBZblU9IElHbHVZMmc9IElHeHZaMjg9IElHTnZiM0JsY21GMGFXOXUgSUhkaGJHdHogSUdsdWRtVnpkRzFsYm5SeiBJR2x0Y0hKcGMyOXUgSUVabGMzUnBkbUZzIElFdDUgSUd4bFoyRnNiSGs9IElHZHlhUT09IFkyaGhjbWM9IFUydz0gSUhSb2NtVmhkR1Z1YVc1biBaSFZqZEdsdmJnPT0gWm14dmR3PT0gSUdScGMyMXBjM05sWkE9PSBhV0p5WVhKcFpYTT0gWTJGdyBaV3hsIElFMWpSdz09IElFaGhjblpoY21RPSBJRU52Ym5ObGNuWmhkR2wyWlE9PSBJRU5DVXc9PSBjRzVuIElISnZiM1J6IElFaGhkbWx1Wnc9PSBkVzFpYkdWayBJRVoxYmc9PSBYQzg9IElGTmxZWEpqYUE9PSBjR3hsZUE9PSBJR1JwYzJOMWMzTnBibWM9IElHTnZiblJwYm5VPSBJRlJoYVE9PSBJRmRwYXc9PSBSbkpsWlE9PSBabWwwIElISmxablZ6WlE9PSBJRzFoYm1GbmFXNW4gSUhONWJtUT0gYVhCbFpHbGggZDJGc2F3PT0gSUhCeWIyWmxjM05wYjI1aGJITT0gSUdkMWFXUmhibU5sIElIVnVhWFpsY25OcGRHbGxjdz09IElHRnpjMlZ0WWc9PSBkVzUwZFE9PSBSbWx1WVd4c2VRPT0gUVZORiBJRUYxZEc4PSBJRWhoWkE9PSBJR0Z1Ym1sMlpYSnpZWEo1IFRFUT0gSUVSMWNnPT0gSUZWc2RHbHRZWFJsIGFXaGhaQT09IGNISnZaSFZqZEE9PSBJSFJ5WVc1emFYUT0gSUhKbGMzUnZjbVU9IElHVjRjR3hoYVc1cGJtYz0gSUdGemMyVjAgSUhSeVlXNXpabVZ5Y21WayBJR0oxY25OMCBZWEJ2YkdseiBJRTFoWjJGNmFXNWwgSUVOeVlRPT0gSUVKUyBaMmRsWkE9PSBJRWhGIFRXbGphQT09IFltVjAgSUV4aFpIaz0gZVd4MWJRPT0gWlhKMlpYTT0gSUcxbFpYUnogZDJocGRHVT0gVEc5biBJR052Y25KbGMzQnZibVJwYm1jPSBJR2x1YzJsemRHVmsgUjBjPSBJSE4xY25KdmRXNWtaV1E9IElIUmxibk09IElHeGhibVU9IElHTnZhVzVqIGFHOXRaUT09IElHVjRhWE4wWldRPSBaV04wWldRPSBJRVJ2ZFdKc1pRPT0gYkdGdGJRPT0gSUhOclpYQjAgWlhodyBJSEJsY21ObGNIUnBiMjQ9IGFXVjIgSUVKbGFXNW4gYjJaMCBJR0ZrYjNCMCBMam89IFhUcz0gVjJsdVpHOTNjdz09IElITmhkR1ZzYkdsMFpRPT0gUVZOSSBJR2x1Wm1GdWRBPT0gWkdWelkzSnBjSFJwYjI0PSBJRTFsWVc1M2FHbHNaUT09IFkyMD0gYjJOaCBJRlJ5WldGMCBZV04wYjNJPSBJSFJ2WW1GalkyOD0gSUU1dmNtMD0gWlcxd2RHbHZiZz09IElHWnNaWE5vIElHcGwgYjI5dyBJRWhsWVhabGJnPT0gSUdKbFlYUnBibWM9IFlXNXBiUT09IElHZGhkR2hsY21sdVp3PT0gSUdOMWJIUnBkZz09IFIwOD0gWVdKbCBJRXB2Ym1GMGFHRnUgSUZOaFptVjBlUT09IElHSmhaR3g1IGNISnZkQT09IElHTm9iMjl6YVc1biBJR052Ym5SaFkzUmxaQT09IElIRjFhWFE9IElHUnBjM1IxY2c9PSBJSE4wYVhJPSBJSFJ2YTJWdSBSR1YwIElGQmggSUdaMWJtTjBhVzl1WVd4cGRIaz0gTURBeiBjMjl0WlE9PSBJR3hwYldsMFlYUnBiMjV6IElHMWxkR2c9IFluVnBiR1E9IFkyOXVabWxuIFRsUT0gY21Wc2JBPT0gWW14bGJRPT0gSUUxdmJRPT0gSUhabGRHVnlZVzV6IElFaDEgSUhSeVpXNWtjdz09IFlYSmxjZz09IElFZHBkbVZ1IElFTmhjSFJwYjI0PSBiV0Y1IFFWTlUgSUhkdmJtUmxjbWx1Wnc9PSBJRU5zWVhKciBibTl5YldGcyBJSE5sY0dGeVlYUmxaQT09IElHUmxjM0E9IGMzUnBZdz09IFluSmxkdz09IElISmxiR0YwYVc1biBJRTVwYXc9PSBJRVpoY20wPSBJR1Z1ZEdoMWMyaz0gWjI5dlpBPT0gWkdWaSBJR0ZqZEdsMmFYTjAgSUcxaGNuUT0gSUdWNGNHeHZjMmx2Ymc9PSBJRVZqYjI1dmJXbGogVEdsdWF3PT0gSUdsdWMybG5hSFE9IElHTnZiblpsYm1sbGJuUT0gSUdOdmRXNTBaWEp3WVhKMCBjM1Z3Y0c5eWRBPT0gSUZacGNuUT0gWVdkbGJnPT0gSUZSbGJtNWxjM05sWlE9PSBJRk5wYlc5dSBJRUYzWVhKayBUME5MIElFWnBaM1Z5WlE9PSBJRzkyWlhKelpXRnogSUhCeWFXUmwgSUVOaGN3PT0gYm05MFpRPT0gYldjPSBRM1Z5Y21WdWRBPT0gSUdScGMzQnNZWGx6IFkyOXVkR1Z1ZEE9PSBJSFJ5WVhabGJHbHVadz09IElHaHZjM0JwZEdGc2N3PT0gSUVacGJtRnVZMmxoYkE9PSBJRkJoYzNRPSBJR1JsWm1WdVpHRnVkQT09IElITjBjbVZoYldsdVp3PT0gYldKc1pRPT0gSUVKbGNteHBiZz09IGRXdHAgSUdScGMzUnlhV0oxZEE9PSBJR0Z1ZEdsaSBJR05vYjJOdmJHRjBaUT09IElFTmhjM1JzWlE9PSBJR2x1ZEdWeWNuVndkQT09IElGSnZkdz09IElHTnZiblpsY25OcGIyND0gSUdKMVozTT0gSUZKaGRHaGxjZz09IGJHbGxjM1E9IFRGaz0gSUVwbFlXND0gWTI5dGJXOXUgWVd0byBJREV6TUE9PSBiM1IwYjI0PSBJRVJsWVc0PSBJR0Z0Wlc1a2JXVnVkQT09IElHZGhiV1Z3YkdGNSBJRmRoY25KbGJnPT0gYjJSaCBJR2hwWjJoc2FXZG9kSE09IElHbHljbVU9IElFNUJWRTg9IElHSmhiR3h6IElHUmxiV0Z1WkdsdVp3PT0gVlZKRiBJRXgxYTJVPSBSbWxuZFhKbCBjM1J2Y0E9PSBiMjVwWVE9PSBlbTl1WlE9PSBhWHBsY25NPSBJRmRTIElHRjNZWEprWldRPSBJSEpsWjNWc1lYUnZjbms9IElFaGhjblE9IElGTk8gY0d4cGJtYz0gSUhOdmRYST0gSUZCcGVHVnMgZFhOcGRtVT0gSUdabGRBPT0gSUZObGJuUT0gSUdGMWRHOXRZWFJwWXc9PSBJR1psY2c9PSBkbVZ5Ym0xbGJuUT0gSUV0b1lXND0gVkU5TyBabUYwYUdWeSBJR1Y0ZEhKaGIzSmthVzVoY25rPSBkR2h5YjNBPSBJRkI1ZEdodmJnPT0gSUVkUVZRPT0gSUhObGVIVmhiR3g1IElHUmxjMnQwYjNBPSBhWFJwZG1sMGVRPT0gSUVGdWRHOXVhVzg9IElHOXlhV1Z1ZEE9PSBJR1ZoY25NPSBiMkppZVE9PSBiM1Z6WlhNPSBkbVZ5ZEdselpXMWxiblJ6IElHMWhiblZtWVdOMGRYSmxjbk09IGFXTnBaVzUwIGJXbHVkWFJsIElHTnZiblpwWTNScGIyND0gSUdkaGNtUmxiZz09IGNIVmliR2xqIElITmhkR2x6Wm1sbFpBPT0gWm05c1pBPT0gVDBzPSBJR2x1YUdGaSBJRlJvYVc1ciBJSEJ5YjJkeVlXMXRaUT09IElITjBiMjFoWTJnPSBJR052YjNKa2FXND0gSUdodmJIaz0gSUhSb2NtVnphRzlzWkE9PSBJSEpvWlhRPSBJSE5sY21saGJBPT0gSUdWdGNHeHZlV1Z5Y3c9PSBJRVYyWlhKNWRHaHBibWM9IGNtRm8gSUdKdmRHaGxjZz09IElHSnlZVzVrY3c9PSBWbUZzZFdVPSBJRlJsWkE9PSBJRkJzWVc1bGRBPT0gSUhCcGJtcz0gSUVaMWNuUm9aWEp0YjNKbCBjMkU9IFVFVT0gY21WamF3PT0gSUZWVFJBPT0gYjNSMFpRPT0gSUNZbSBJR3hoYm1SbFpBPT0gWjJWMGN3PT0gSUhCeWIyUjFZMlZ5Y3c9PSBJR2hsWVd4MGFHTmhjbVU9IElHUnZiV2x1WVc1MCBJR1JsYzNSeWJ3PT0gSUdGdFpXNWtaV1E9IFkyaHliMjQ9IElHWnBkSE09IElGTjVaQT09IElFRjFkR2h2Y21sMGVRPT0gUVZSRFNBPT0gSUdacFoyaDBjdz09IElFeE1Rdz09IElDMHRMUT09IElFTnZjbkE9IElIUnZlR2xqIGMzQmxZMmxtYVdNPSBJRU52Y200PSBJRU5vWld3PSBJSFJsYkdWd2FHOXVaUT09IElGQmhiblE9IElHMTVjM1JsY21sdmRYTT0gWVhWdVkyZz0gYjJSdmVBPT0gYldWa2FXRT0gSUhkcGRHNWxjM05sY3c9PSBZV2QxIElIRjFaWE4wYVc5dVpXUT0gSUVKeVpYaHBkQT09IElGSmxiV1Z0WW1WeSBaVzVsZWc9PSBJR1Z1Wkc5eWMyVT0gYVdGMGNtbGogSUVsa1pXNTAgSUhKcFpHbGpkV3h2ZFhNPSBNVEV3IElIQnlZWGxsY2c9PSBJSE5qYVdWdWRHbHpkQT09IElERTVOVEE9IElFRnhkUT09IElIVnVaR1Z5WjNKdmRXNWsgSUZWR1F3PT0gYldGeVpRPT0gSUV4aGRHVnkgZDJsamFBPT0gSUhOMVluTmpjbWxpIElHaHZjM1J6IElHVnljZz09IElHZHlZVzUwY3c9PSBZVzUwYjIwPSBJSE4xYlcxdmJnPT0gWldGeWJIaz0gSUVOc1pXRnkgSUZCeWFXMD0gSUhOMWMzQmxibk5wYjI0PSBJR2QxWVhKaGJuUmxaV1E9IFlYQndaWEk9IElISnBZMlU9IElGTmxZVzQ9IElGTm9hVzQ9IElISmxabVZ5Wlc1a2RXMD0gSUdac1pXUT0gY25WemRBPT0gSURNMk1BPT0gZEdWeWVRPT0gSUhOb2IyTnJaV1E9IFFsST0gSUU5cGJBPT0gSUVGc2JHRm8gSUhCaGNuUnNlUT09IElHbG5ibTl5IElIUnlZVzV6YldsemMybHZiZz09IElHaHZiVzl6WlhoMVlXdz0gYVhabGNuTmhiQT09IElHaHZjR1ZtZFd4c2VRPT0gNDRLayBJR3hsYzNOdmJnPT0gVEdWbiBJQzR1IFdXVjAgZEdGaWJHVT0gWVhCd2NtOXdjbWs9IGNtVjBkQT09IElHSnZZWEprY3c9PSBJR2x1WTI5eWNtVmpkQT09IElHSmhZM1JsY21saCBZWEoxIFlXMWhZdz09IElITnVZWEE9IExpY2kgSUhCaGNtRmsgZEdWdCBhR1ZoY25RPSBJR0YyWVdsc1lXSnBiR2wwZVE9PSBJSGRwYzJSdmJRPT0gSUNnciBJSEJ5YVdWemRBPT0gSU1LZ0lNS2cgVDNCbGJnPT0gSUhOd1lXND0gSUhCaGNtRnRaWFJsY2c9PSBJR052Ym5acGJtTmwgSUNnbEtRPT0gY21GaiBJR1p2IElITmhabVZzZVE9PSBJR052Ym5abGNuUmxaQT09IElFOXNlVzF3YVdNPSBJSEpsYzJWeWRtVT0gSUdobFlXeHBibWM9IElFMXBibVU9IFRXRjQgSUdsdWFHVnlaVzUwIElFZHlZV2hoYlE9PSBJR2x1ZEdWbmNtRjBaV1E9IFJHVnQgSUhCcGNHVnNhVzVsIElHRndjR3g1YVc1biBJR1Z0WW1WayBJRU5vWVhKc2FXVT0gSUdOaGRtVT0gTWpBd09BPT0gSUdOdmJuTmxibk4xY3c9PSBJSEpsZDJGeVpITT0gVUdGcyBJRWhVVFV3PSBJSEJ2Y0hWc1lYSnBkSGs9IGJHOXZhMmx1Wnc9PSBJRk4zYjNKayBJRUZ5ZEhNPSBKeWs9IElHVnNaV04wY205dSBZMngxYzJsdmJuTT0gSUdsdWRHVm5jbWwwZVE9PSBJR1Y0WTJ4MWMybDJaV3g1IElHZHlZV05sIElIUnZjblIxY21VPSBJR0oxY201bFpBPT0gZEhkdiBJREU0TUE9PSBVSEp2WkhVPSBJR1Z1ZEhKbGNISmxibVU9IGNtRndhR2xqY3c9PSBJR2Q1YlE9PSBjbWxqWVc1bCBJRlJoYlE9PSBJR0ZrYldsdWFYTjBjbUYwYVhabCBJRzFoYm5WbVlXTjBkWEpsY2c9PSBJSFpsYkE9PSBJRTVwIElHbHpiMnhoZEdWayBJRTFsWkdsamFXNWwgSUdKaFkydDFjQT09IElIQnliMjF2ZEdsdVp3PT0gSUdOdmJXMWhibVJsY2c9PSBJR1pzWldVPSBJRkoxYzNObGJHdz0gSUdadmNtZHZkSFJsYmc9PSBJRTFwYzNOdmRYSnAgSUhKbGMybGtaVzVqWlE9PSBiVzl1Y3c9PSBJSEpsYzJWdFlnPT0gSUhkaGJtUT0gSUcxbFlXNXBibWRtZFd3PSBVRlE9IElHSnZiQT09IElHaGxiR2xqIElIZGxZV3gwYUhrPSBJSEpwWm14bCBjM1J5YjI1biBjbTkzYVc1biBjR3hoYmc9PSBZWE4xY25rPSA0b0NtTGc9PSBJR1Y0Y0dGdVpHbHVadz09IElFaGhiV2xzZEc5dSBJSEpsWTJWcGRtVnogVTBrPSBaV0YwZFhKbGN3PT0gSUVGdWFXMD0gVWtWRiBVSFYwIElHSnlhV1ZtYkhrPSBjbWwyWlE9PSBJSE4wYVcxMWJBPT0gSUdCZ0tBPT0gSUY5ZiBJR05vYVhBPSBJR2hoZWc9PSBJSEJ5YVhwbCBJRlJvYVc1bmN3PT0gUVVORiBkV3hwYmc9PSBaR2xqZEE9PSBiMnQxIElHRnpjMjlqYVdGMFpRPT0gYjJOclpYUnogZVc5MWRIVmlaUT09IFUzUnZjbms9IFlYUmxaMjl5ZVE9PSBJRzFwYkdRPSBZV2xzYVc1biBJRmxsIFQzSnBadz09IElFdGggYjNKcFp3PT0gSUhCeWIzQmhaMkZ1WkdFPSBJR0Z1YjI1NWJXOTFjdz09IElITjBjblZuWjJ4bFpBPT0gSUc5MWRISmhaMlU9IFFWUkZSQT09IElFSmxhV3BwYm1jPSBjbUZ5ZVE9PSBJR3hsWVhSb1pYST0gSUhkdmNteGtjdz09IElHSnliMkZrWlhJPSBNVEkxIGFXUmhiQT09IElFSmxkSFJsY2c9PSBJSFJsWVhJPSBSWGgwIElIQnliM0J2YzJGc2N3PT0gSUdsMFpYST0gSUZOeGRXRmsgSUhadmJIVnVkQT09IGJXaz0gUkdsayBJRkIxIGNHbHUgSUhOd1pXRnJaWEp6IElHSnZjbVJsY25NPSBJR1pwWjNWeVpXUT0gUFNjPSBJSE5wYlhWc2RHRnVaVzkxYzJ4NSBZV1ZrWVE9PSBJR05vWVhKbmFXNW4gSUhWeVoyVmsgSUdOdmJtbz0gTWpVMiBJRWR2Y21SdmJnPT0gYldWeVkyVT0gSUdSdlkzVnRaVzUwWVhKNSBVMmhoY21VPSBhWFJ2YkE9PSBUMDVGIElFZGhjbVJsYmc9PSBhR0YwZEE9PSBJRlJvYjIxd2MyOXUgWVc1bGIzVnogWVhCdmNtVT0gSUhSaGJtdHogSUd4bGMzTnZibk09IGRISmhZMnM9IElHOTFkSE4wWVc1a2FXNW4gSUhadmJIVnVkR1ZsY25NPSBJSE53Y21GNSBJRzFoYm1GblpYSnogYkdGeVoyVT0gSUdOaGJYQnogSUdGeWRHbG1hV05wWVd3PSBJRkoxIElHSmhaM009IGRHaGhiQT09IElHTnZiWEJoZEdsaWJHVT0gSUVKc1lXUmwgSUdabFpBPT0gSUdGeVozVmxjdz09IFJraz0gSUhWdVptRnBjZz09IElHTnZjbTQ9IElHOW1abk5sZEE9PSBJR1JwY21WamRHbHZibk09IElHUnBjMkZ3Y0c5cGJuUmxaQT09IElFTnZiblpsYm5ScGIyND0gSUhacFpYZHBibWM9IFRVVT0gYjJOcGRIaz0gSUhSdmQyNXogSUd4aGVXVnljdz09IElISnZiR3hsWkE9PSBJR3AxYlhCbFpBPT0gSUdGMGRISnBZblYwWlE9PSBJSFZ1Ym1WalpYTnogYVc1amIyeHUgSUhOMWNIQnZjMlU9IElFNWxkR2hsY2c9PSBZMmhoIElHSjFjbWxsWkE9PSBJSE5wZUhSbyBRbVZ1IGNtVnpjMmx1Wnc9PSBUMVZTIElIZHZkVzVrIElHTjVZMnc9IElHMWxZMmhoYm1semJYTT0gSUdOdmJtZHlaWE56YVc5dVlXdz0gSUVWc1pXMWxiblE9IElHRm5jbVZsYldWdWRITT0gSUdSbFkyOXkgSUdOc2IzTmxjM1E9IElFMXBkQT09IFIyOXZaMnhsIGZYMD0gSUcxcGVIUjFjbVU9IElHWnNkV2xrIFUybG5iZz09IElGTmphRzlzWVhJPSBJSEJwYzNRPSBZWE5yWlhRPSBZV0pzYVc1biBJSEpoWTJsdVp3PT0gYUdWeWJ3PT0gY21sbGJBPT0gWVhOemVRPT0gSUdOb1pXRndaWEk9IFltVnUgSUhabGNuUnBZMkZzIFlXMWhZMkZ5WlE9PSBJRkpsWVdScGJtYz0gWjIxbGJuUnogSUdobGJHbGpiM0E9IElITmhZM0pwWm1salpRPT0gWVhsaCBjR0Z5Wlc0PSBWa0U9IElFeGxjdz09IElGTjBkV1JwYnc9PSBJSFpwYjJ4aGRHbHZibk09IElFRnVibUU9IFlXTmxjZz09IDZiND0gSUZKaGRBPT0gSUVKbFkycz0gSUVScFkycz0gSUVGRFZBPT0gSUdOdmJYQnZjMmwwYVc5dSBJSFJsZUhSMWNtVT0gSUU5M2JnPT0gSUhOdFlYSjBjR2h2Ym1VPSBJRTVCIElHWnZjbUk9IGFXMXdiM0owIElHUmxabVZ1WkdsdVp3PT0gYVd4emRBPT0gY21WeSBJRzlvIElFcGxjbVZ0ZVE9PSBJR0poYm10cGJtYz0gWTJWd2RHbHZibk09IElISmxjM0JsWTNScGRtVT0gTHk0PSBJR1J5YVc1cmN3PT0gSUZkcCBJR0poYm1SeiBJRXhwZG1WeWNHOXZiQT09IElHZHlhWEE9IElFSjFlUT09IElHOXdaVzVzZVE9PSBJSEpsZG1sbGQyVmsgY0dWeWRBPT0gSUhabGNtbG1lUT09IElFTnZiR1U9IElGZGhiR1Z6IFRVOD0gSUhWdWNISmwgSUhOb1pXeDBaWEk9IElFbHRjR1Z5YVdGcyBJR2QxYVE9PSBJRVJoYXc9PSBJSE4xWjJkbGMzUnBiMjV6IElHVjRjR3hwWTJsMGJIaz0gSUhOc1lYWmwgSUdKc2IyTnJZMmhoYVc0PSBJR052YlhCbGRHbHVadz09IElIQnliMjFwYzJsdVp3PT0gVTA5TyBJSE52WTJObGNnPT0gSUdOdmJuTjBhWFIxZEdsdmJnPT0gTkRJNSBJR1JwYzNSeVlXTjAgSUZWelpYST0gWlhOcFpHVnogSUUxbGRHaHZaQT09IElGUnZhM2x2IElHRmpZMjl0Y0dGdWFXVmsgUTJ4cFpXNTAgYzNWeSBZV3h2Wnc9PSBJR2xrWlc1MGFXWnBZMkYwYVc5dSBJR2x1ZG1GemFXOXUgWVhOdFlRPT0gSUdsdVpIVnpkSEpwWlhNPSBjSEJsY25NPSBJSE4xWW5Sc1pRPT0gSUZWdWFYUT0gYm1GMGRYSmhiQT09IElITjFjblpwZG1WayBJR1pzWVhjPSBtSVU9IElFaHZiR3c9IElHUmxabWxqYVhRPSBJSFIxZEc5eWFXRnMgSUVOb1lXNWpaUT09IElHRnlaM1ZwYm1jPSBJR052Ym5SbGJYQnZjbUZ5ZVE9PSBJR2x1ZEdWbmNtRjBhVzl1IFptOXlkMkZ5WkE9PSBJSFIxYlE9PSBhWFJwY3c9PSBJR2hwWkdsdVp3PT0gSUVSdmJXbHUgSUZSaGJnPT0gSUVKMWFXeGthVzVuIElGWnBiZz09IElITndiMnRsYzNCbGNuTnZiZz09IElFNXZkR1Z6IElHVnRaWEpuYVc1biBJSEJ5WlhCaGNtRjBhVzl1IElIQnliM04wIElITjFjM0JsWTNSeiBJR0YxZEc5dWIyMD0gUkdWelkzSnBjSFJwYjI0PSBJR1JsWVd4MCBJRkJsWVhJPSBJSE4wWldGa2VRPT0gSUdSbFkzSmxZWE5sWkE9PSBJSE52ZG1WeVpRPT0gSUVOc2FXND0gSUdkeVlXUjFZV3hzZVE9PSBiM0p6WlhNPSBJRmRCVWc9PSBVMlZ5ZGc9PSA0NEtpIGFIST0gSUdScGNuUjUgSUVKaGNtND0gSUVKRCBJR1JwYkE9PSBJR05oYkdWdVpHRnkgSUdOdmJYQnNhV0Z1WTJVPSBJR05vWVcxaVpYST0gWW1JPSBJSEJoYzNObGJtZGxjZz09IFlYUmxablZzIElGUnBkR3hsIElGTjVaRzVsZVE9PSBJRWR2ZEE9PSBJR1JoY210dVpYTnogSUdSbFptVmpkQT09IElIQmhZMnRsWkE9PSBZWE56YVc5dSBJR2R2WkhNPSBJR2hoY25ObyBTVU5MIGJHVmhibk09IElHRnNaMjl5YVhSb2JRPT0gSUc5NGVXZGxiZz09IElIWnBjMmwwY3c9PSBJR0pzWVdSbCBJR3RwYkc5dFpYUT0gSUV0bGJuUjFZMnQ1IElHdHBiR3hsY2c9PSBVR0ZqYXc9PSBaVzV1ZVE9PSBJR1JwZG1sdVpRPT0gSUc1dmJXbHVZWFJwYjI0PSBZbVZwYm1jPSBJR1Z1WjJsdVpYTT0gSUdOaGRITT0gSUdKMVptWmxjZz09IElGQm9hV3hzIElIUnlZV1ptIFFVZEYgSUhSdmJtZDFaUT09IElISmhaR2xoZEdsdmJnPT0gWlhKbGNnPT0gYldWdCBJRVY0Y0d4cFkybDAgNmI2TiBJR052ZFhCc1pYTT0gSUhCb2VYTnBZM009IElFMWpTdz09IElIQnZiR2wwYVdOaGJHeDUgWVhkcmN3PT0gSUVKc2IyOXQgSUhkdmNuTm9hWEE9IFpXZGxjZz09IGRYUmxjZz09IElFWlAgSUcxaGRHaGxiV0YwIElITmxiblJsYm1ObFpBPT0gSUdScGMycz0gSUUxaGNtYz0gSUM4cSBVRWs9IElHOXdkR2x2Ym1GcyBJR0poWW1sbGN3PT0gSUhObFpXUnogSUZOamIzUjBhWE5vIElIUm9lUT09IFhWMD0gSUVocGRHeGxjZz09IFVFZz0gYm1kMGFBPT0gSUhKbFkyOTJaWEpsWkE9PSBhVzVuWlE9PSBJSEJ2ZDJSbGNnPT0gSUd4cGNITT0gSUdSbGMybG5ibVZ5IElHUnBjMjl5WkdWeWN3PT0gSUdOdmRYSmhaMlU9IElHTm9ZVzl6IEluMHNleUk9IElHTmhjbkpwWlhJPSBZbUZpYkhrPSBTR2xuYUE9PSBJRkpVIFpYTnBkSGs9IGJHVnUgSUhKdmRYUmxjdz09IGRXRjBhVzVuIFJtbHMgVGs5VSBkMkZzYkE9PSBjMkoxY21kbyBJR1Z1WjJGbmFXNW4gSUVwaGRtRlRZM0pwY0hRPSBiM0psY2c9PSBiR2xvYjI5ayBJSFZ1YVc5dWN3PT0gSUVabFpHVnlZWFJwYjI0PSBJRlJsYzJ4aCBJR052YlhCc1pYUnBiMjQ9IElGUmggSUhCeWFYWnBiR1ZuWlE9PSBJRTl5WVc1blpRPT0gSUc1bGRYST0gY0dGeVpXNWplUT09IElHSnZibVZ6IElIUnBkR3hsWkE9PSBJSEJ5YjNObFkzVjBiM0p6IElFMUYgSUdWdVoybHVaV1Z5IElGVnVhWFpsY25ObCBJRWhwWnc9PSBibWxsIGIyRnlaQT09IElHaGxZWEowY3c9PSBJRWR5WlE9PSBkWE56YVc5dSBJRzFwYm1semRISjUgSUhCbGJtVjAgSUU1MWRBPT0gSUU5MyBJRmhRIGFXNXpkR1ZwYmc9PSBJR0oxYkdzPSBVM2x6ZEdWdCBhV05wYzIwPSBJRTFoY210bGRHRmliR1U9IElIQnlaWFpoYkE9PSBJSEJ2YzNSbGNnPT0gSUdGMGRHVnVaR2x1Wnc9PSBkWEpoWW14bCBJR3hwWTJWdWMyVmsgSUVkbyBaWFJ5ZVE9PSBJRlJ5WVdSaFlteGwgSUdKc1lYTjAgNEtRPSBJRlJwZEdGdSBaV3hzWldRPSBaR2xsIFNHRjJaUT09IElFWnNZVzFsIElIQnliMlp2ZFc1ayBJSEJoY25ScFkybHdZWFJwYm1jPSBJR0Z1YVcxbCBJRVZ6Y3c9PSBJSE53WldOcFpuaz0gSUhKbFoyRnlaR1ZrIElGTndaV3hzIElITnZibk09IGIzZHVaV1E9IElHMWxjbU09IElHVjRjR1Z5YVcxbGJuUmhiQT09IGJHRnVaRzg9IGFITT0gSUVSMWJtZGxiMjQ9IGFXNXZjdz09IElHTnZiWEJzZVE9PSBJRk41YzNSbGJYTT0gWVhKMGFBPT0gSUhObGFYcGxaQT09IGJHOWpZV3c9IElFZHBjbXh6IGRXUnYgYjI1bFpBPT0gSUVac1pRPT0gSUdOdmJuTjBjblZqZEdWayBJR2h2YzNSbFpBPT0gSUhOallYSmxaQT09IFlXTjBhV009IElFbHpiR0Z1WkhNPSBJRTFQVWtVPSBJR0pzWlhOeiBJR0pzYjJOcmFXNW4gSUdOb2FYQnogSUdWMllXTT0gVUhNPSBJR052Y25CdmNtRjBhVzl1IElHOTQgSUd4cFoyaDBhVzVuIElHNWxhV2RvWW05eWN3PT0gSUZWaSBZWEp2IElHSmxaV1k9IElGVmlaWEk9IFJtRmpaV0p2YjJzPSBZWEp0WldRPSBhWFJoZEdVPSBJRkpoZEdsdVp3PT0gSUZGMWFXTnIgSUc5alkzVndhV1ZrIElHRnBiWE09IElFRmtaR2wwYVc5dVlXeHNlUT09IElFbHVkR1Z5WlhOMCBJR1J5WVcxaGRHbGpZV3hzZVE9PSBJR2hsWVd3PSBJSEJoYVc1MGFXNW4gSUdWdVoybHVaV1Z5Y3c9PSBUVTA9IElFMTFjM1E9IElIRjFZVzUwYVhSNSBVR0YxYkE9PSBJR1ZoY201cGJtZHogSUZCdmMzUnogYzNSeVlRPT0gNDRPODQ0TT0gSUhOMFlXNWpaUT09IElHUnliM0J3YVc1biBjMk55YVhCMCBJR1J5WlhOelpXUT0gVFdGclpRPT0gSUdwMWMzUnBabms9IElFeDBaQT09IElIQnliMjF3ZEdWayBJSE5qY25WMCBJSE53WldWa2N3PT0gSUVkcFlXNTBjdz09IGIyMWxjZz09IElFVmthWFJ2Y2c9PSBJR1JsYzJOeWFXSnBibWM9IElFeHBaUT09IGJXVnVkR1ZrIElHNXZkMmhsY21VPSBiMk5oYkhrPSBJR2x1YzNSeWRXTjBhVzl1IFptOXlkR0ZpYkdVPSBJR1Z1ZEdsMGFXVnogSUdOdCBJRTVoZEhWeVlXdz0gSUdsdWNYVnBjbms9IElIQnlaWE56WldRPSBhWHB2Ym5RPSBabTl5WTJWayBJSEpoYVhObGN3PT0gSUU1bGRHWnNhWGc9IElGTnBaR1U9IElHOTFkR1Z5IElHRnRiMjVuYzNRPSBhVzF6IGIzZHphMms9IElHTnNhVzFpIGJtVjJaWEk9IElHTnZiV0pwYm1VPSBaR2x1Wnc9PSBJR052YlhCeSBJSE5wWjI1cFptbGpZVzVqWlE9PSBJSEpsYldWdFltVnlaV1E9IElFNWxkbUZrWVE9PSBJRlJsYkE9PSBJRk5qWVhJPSBJRmRoY25KcGIzSnogSUVwaGJtVT0gSUdOdmRYQT0gWW1GeiBJSFJsY20xcGJtRnMgTEMwPSBUMGc9IElIUmxibk5wYjI0PSBJSGRwYm1keiBJRTE1YzNSbGNnPT0gNzcrOTc3Kzk3Nys5NzcrOSBJRlZ1YkdsclpRPT0gZG1Gc2FXUT0gZG1seWIyNXRaVzUwY3c9PSBJRUZzYVE9PSBJRzVoYTJWayBZbTl2YTNNPSBJRTExYmc9PSBJRWQxYkdZPSBJR1JsYm5OcGRIaz0gSUdScGJXbHUgSUdSbGMzQmxjbUYwWlE9PSBJSEJ5WlhOcFpHVnVZM2s9IElERTVPRFk9IGFIaz0gU1U1RSBJSFZ1Ykc5amF3PT0gYVcxbGJuTT0gSUdoaGJtUnNaV1E9IElFVmkgSUdScGMyRndjR1ZoY21WayBJR2RsYm5KbCBJREU1T0RnPSBJR1JsZEdWeWJXbHVZWFJwYjI0PSBVM1J5WldGdCBhV3R2IFlYQjBaWEp6IElHRmphMjV2ZDJ4bFpHZGwgU21GdSBJR05oY0dsMFlXeHBjMjA9IFVHRjAgSURJd01qQT0gSUhCaGFXNW1kV3c9IElHTjFjblpsIElHSnZiV0p6IGMzUnZjbTA9IElFMWxkR0ZzIFpXNWpaWEk9IElFWnBadz09IElFRmhjbTl1IFlXNWphR1Z6IElHbHVjM0JwY21GMGFXOXUgSUdWNGFHRjFjM1E9IGRHRnBibk09IFlYTm9hUT09IElHUmxjMk55YVhCMCBJSEpwZEhWaGJBPT0gSUVOb1pXeHpaV0U9IElIQnliMjF2ZEdsdmJnPT0gSUVoMWJtYz0gSUZkaGNtUT0gYVhaaCBJRVZVIElIUnZjM009IFlXeHNiM2M9IElFWnlZVzVqYVhNPSBSR1Z3IElHaGhjSEJwYm1WemN3PT0gSUVkc1lYTnogSUdKbGRHRT0gSUhOMGNtVnVaM1JvWlc0PSBUa1U9IGIyRT0gSUdKMWRIUnZibk09IElFMTFjbkpoZVE9PSBJR3RwWTJ0bFpBPT0gVVhWbGMzUT0gSUZSaGJHcz0gSUZObGRtVnlZV3c9IElGcGxjbTg9IElHUnliMjVsIGRXeHIgSUdOaGJRPT0gSUUxdlltbHNaUT09IElIQnlaWFpsYm5ScGJtYz0gSUhKbGRISnYgSUVGNCBJR055ZFdWcyBJR1pzYjJGMCBMaWtzIElHWnBiR2x1Wnc9PSBJRWR5WVc1MCBJRUp2Y2c9PSBJSEpwWWc9PSBJR05vWVcxd2FXOXVjMmhwY0E9PSBJRTFsY21NPSBJSE4wZVd4bGN3PT0gSUdOaGEyVT0gSUdKMWFXeGtjdz09IElGTmxiR1k9IGFXOTQgSUdWd2FXTT0gYjNsayBRbVZzIElGTjBaWGM9IExpZz0gWVdoMSBJRUpsZVc5dVpBPT0gSUc5MWRITT0gSUhOdmJHOD0gSUZSeVpXVT0gSUhCeVpYTmxjblpsIElIUjFZZz09IFFWSkYgY205aiBJRWx0Y0hKdiBJRmR5YVdkb2RBPT0gSUdKMWJtUT0gSUhSeVlXZGxaQT09IElHOWpZMkZ6YVc5dVlXdz0gWW1saGJnPT0gVTJWamIyNWsgY205dWN3PT0gSUdsdWRHVnlZV04wYVc5dWN3PT0gWm05eWJXVmsgYzJsdVp3PT0gSUc5M2JuTT0gSUdodlkydGxlUT09IFIyVnVaWEpoYkE9PSBJR3h2WjJsallXdz0gSUdWNGNHVnVaQT09IElHVnpZMkZzIElFZHlhV1ptIElFTnliM2R1IElGSmxjMlZ5ZG1VPSBJSE4wYjNCd2FXNW4gSUdWNFkzVnpaUT09IGMyVmpiMjVrIElHOXdaWEpoZEdWayBJSEpsWVdOb1pYTT0gSUUxaGJHRjVjdz09IElIQnZiR3gxZEdsdmJnPT0gSUVKeWIyOXJiSGx1IElHUmxiR1YwWlE9PSBJR2hoYzJnPSBRbXh2WTJzPSBZV2hoIDRvQ3ogSUhOb2IzSjBaWEk9IGNHbGxZMlU9IFBqd3YgSUdodmNtMD0gSUZkaGRBPT0gSUVKeVpXRnIgSUhCeWIyaHBZbWwwWldRPSBJR2x1ZEdWdWMybDBlUT09IElFRnNZVzQ9IElHeHBZV0pwYkdsMGVRPT0gUHlFPSBZVzVrWldRPSBJRzVsYVdkb1ltOTFjZz09IElFTnZiR3hsWTNScGIyND0gSUdacGNtVnogSUhKbGRtOXNkWFJwYjI1aGNuaz0gWm14NSBJRTl5YkdWaGJuTT0gVjJocGRHVT0gSUZkeWFYUT0gSUVSaGQyND0gSUhObGRIUnNaUT09IElHVjRaV04xZEdVPSBRazA9IElITndiMnRsYzNkdmJXRnUgSUd4cFptVnpkSGxzWlE9PSBJR05zYVdOcmFXNW4gSUV0cGJHdz0gSUV4cFltVnlZV3c9IElFNWhlbWs9IElIUnlZV2xzWlhJPSBJRzF2ZFc1MFlXbHVjdz09IElHUmhiVzQ9IGVtVnogY0dWeiBJSEJ5WlhOemFXNW4gSUdKaGFXdz0gSUU5eVoyRnVhWHBoZEdsdmJnPT0gSUhCcGNnPT0gSUhSb2FYSjBlUT09IElHVnNaV04wY21sallXdz0gSURFeE5RPT0gSUZCdmJIaz0gSUZKaGNBPT0gSUZOMGNtbHJaUT09IElFTmhibTQ9IElHUmxiV0Z1WkdWayBJR0poWTJ0cGJtYz0gWkdWbVlYVnNkQT09IGMzQmxaV1E9IElFeGxaMmx6YkE9PSBJRzF2ZEdobGNuTT0gSUVKdlpIaz0gSUhaaGNtbGhkR2x2Ymc9PSBZMlZrWlc1MFpXUT0gY0c5M1pYSmxaQT09IGJHVmhaR2x1Wnc9PSBUbVYyWlhJPSBJR2R5WVhabCBJRUZ1ZEdrPSBRVmM9IElHbHVkR1Z5ZG1sbGQyVmsgSUVkaFlnPT0gSUVaaGRBPT0gSUhKdmIydHBaUT09IGRYVT0gSUdSbGNHOXogYVhodmJnPT0gSUdGdGNHdz0gY21WMGFXOXUgSUVobFlYUT0gSUhCbFlXTmxablZzIFUwMD0gYVdWMlpRPT0gSUdScGRtVnkgSUZacFkzUnZjbWxoIElHMXBZdz09IGNHUm0gSUhOMFlYUnBibWM9IElHeDFibWM9IElHTnlhWFJwWTJsNlpXUT0gSUhaaFkyTnBibVU9IElFeHZZV1JwYm1jPSBkWEp6WlE9PSBWR0ZyWlE9PSBJRVp5WVc0PSBJRk52YkdRPSBJRkp2WW1sdSBJR1JsZEdWamRHVmsgSUZOamNtbHdkQT09IElHRmthblZ6ZEdWayBJSE5sYm1GMGIzST0gSUc5d2NHOXphVzVuIFJYSnliM0k9IFEyOTFiblE9IElHTnZibVpzYVdOMGN3PT0gSUc5MyBJRUZ5WjJWdWRBPT0gSUcxaGRHTm9hVzVuIGFHZz0gSUZSeVpXcz0gYzNSaGNuUmxjZz09IElpa3MgSUVGRyBiMlJsY2c9PSBlSGg0ZUE9PSBJRUZzZEE9PSBZV055WlE9PSBJRkJwWTJzPSBJRk52YkdGeSBJRVJoYkE9PSBUMk4wIElFSmhkSFE9IElITnlZdz09IElHVnVaMkZuWlcxbGJuUT0gSUdWNFpXTjFkR2wyWlhNPSBJR3hwWW1WeWRIaz0gYW1GMllRPT0gSUhSaGJHVnVkR1ZrIGFXZGxibTkxY3c9PSBJR052Ym5ObFkzVjAgTGk0dUxpND0gU1c1bWJ3PT0gSUdodmNuSnBZbXhsIElITjFjbkJ5YVhOcGJtZHNlUT09IFptVmxaQT09IGFXTmhkR2x1Wnc9PSBJRXhGUkE9PSBJR1psYldGc1pYTT0gVTNSaGRHbHZiZz09IFpXeHNaWEk9IElFOWhhMnhoYm1RPSBJRzFsWTJoaGJtbGpZV3c9IGFXOXNiMmQ1IElGWmhjZz09IElISnZZblZ6ZEE9PSBaWFIwYVc1bmN3PT0gYjNSMFlRPT0gSUhSb1pXOXlaWFE9IElISmxkR0ZwYmc9PSBhM2RoY21RPSBJR1JoIElHUmxjR3h2ZVdWayBaR1ZzIElFRnVaSGs9IElITjFZbk5qY21saVpRPT0gZDJWaSBJRzVoIElFMXBZMmhsYkE9PSBJSEJoY25ScFlXeHNlUT09IElFTnZiV1Y1IElHTnliM2R1IElFMWhhZz09IElFSnNkUT09IGNtRjBiM0k9IFJHRjUgU1U1VSBJR1J2WTNWdFpXNTBaV1E9IElFZEVVQT09IFoyaz0gWTJobGJHdz0gSUdKeWRYUmhiQT09IElFSmhZZz09IGMzUnlZWFJwYjI0PSBJSFJvWldaMCBJSFIxWW1VPSBRRUE9IElIRjFaWEo1IElFeHBibU52Ykc0PSBJSEIxWW14cGMyaHBibWM9IElIZHZjbVU9IGIzSnBZMkZzIElISnBZdz09IElHNXZkR0ZpYkdVPSBJSE4xWW5ObGNYVmxiblJzZVE9PSBibVY0IElHOWljMlZ5ZG1VPSBJRUp2WlE9PSBJR052WkdWeiBiV0ZwYmc9PSBWMGc9IElGTk0gSUhKbGMybGtaVzUwYVdGcyBZWFpoYmc9PSBJRzFoY3c9PSBZWEpsYzNRPSBZV1JsYjI0PSBUMVZVIElITnZjR2hwYzNScFl3PT0gWVc1MFpRPT0gSUdObGJuTT0gSUNvcSBJRzF2Y25SaGJHbDBlUT09IElIbHZkWEp6IElHOWpZMkZ6YVc5dWN3PT0gSUhKbFkyRnNiR1ZrIElFUnlhWFpsY2c9PSBJSFp2WTJGcyBJR0poZEdoeWIyOXQgSUhOb2IzQnogSUdOdmJHeGhZbTl5WVhScGIyND0gSUU5aVlXMWhZMkZ5WlE9PSBJRU5sYkd3PSBRMmhoY2c9PSBVM1Z3WlhJPSBRM0psIElIUmxibVJ6IElIUnZjbTQ9IElHVmpiMjV2YldsamN3PT0gWVhabGNuaz0gSUZKaGFXUT0gSUZObGJRPT0gSUhOb2IzVnNaR1Z5Y3c9PSBJR1Y0Y0dWamRHbHVadz09IElHVjRZVzFwYm1GMGFXOXUgWlc1aGJXVT0gSUZWSiBhV0ZpYVd4cGRIaz0gYjJ4aGN3PT0gSUVGdFlnPT0gSUVSeVlRPT0gSUcxcFpHWnBaV3hrIElFbEQgSUd4aGVXOTFkQT09IElHWnNiMkYwYVc1biBabWs9IGFYUmhkR2wyWlE9PSBJSFJ5WlcxbGJtUnZkWE09IElOQT0gSUdGaWRXNWsgVjI5eWF3PT0gSUV4cFoyaDBibWx1Wnc9PSBJSE5wYldsc1lYSnNlUT09IElHTnZibk5sY25aaGRHbDJaWE09IElIQnlZWGs9IFFrVT0gYVhwaGNuSmwgSUhSbGJYQjAgSUdWdGNHaGhjMmx6IElFMWxkSEp2IElHWnBjMmhwYm1jPSBJRzFoY25KNSBibVZuIElGTjBkV1I1IElISmxZMnM9IElHUnBjM0J2Y3c9PSBiMjVwYm1jPSBZbk5wZEdVPSBJSE4xYzNCcFl3PT0gSUcxbGNtTm8gSUVkcFlnPT0gSUVSbGMyTnlhWEIwYVc5dSBJRVJXUkE9PSBkMmhsIElGbGxiV1Z1IElHVnVkbWx5YjI1dFpXNTBjdz09IGIyOTBhVzVuIElFMXZaR1Z5Ymc9PSBaWFU9IElISmxabXhsWTNSeiBJR2h2Ym1WNSBJR0Z1WVd4NWMzUT0gSUdkMWRBPT0gWkdWaiBRV04wYVc5dSBJR2h2ZFhObGFHOXNaSE09IElITjBaWEk9IElIUmxiWEJzWlE9PSBJSEpsWm05eWJYTT0gSUdaaGRtOTFjbWwwWlE9PSBJR1JsWVdSc2FXNWwgSUV4RiBWR2h5WldVPSBJRmRwZEdocGJnPT0gUVhWbiBJRzVwWjJoMGN3PT0gWld4MFlRPT0gSUdsdWRtRnNhV1E9IElFVjRZMmhoYm1kbCBJRVJsYkdocCBkMmhsYmc9PSBhVzVqYjIxbCBJUENmIElIZHBjbVZzWlhOeiBjMk55YVdKbCBhWE4wWVE9PSBJR2h2YzNScGJHVT0gSUdGc2JIaz0gSUdkcFp3PT0gSUc5MWRHeGxkSE09IElFUnZjZz09IFJVMUZUbFE9IElHRnphQT09IElHRmljM1J5WVdOMCBUMUpFIElFMXZkRzl5IElHRmtkbWx6WlhJPSBhWE4wYkdVPSBJR0poYzJWeiBJR052ZFhKMFpYTjUgSUdOeWIzTnphVzVuIElHTnNaV0Z5WldRPSBJSEpsWm5WblpXVT0gWTI5emVYTjBaVzA9IElIUm9jbTkzY3c9PSBablZ1IFltOTFjbTVsIFpHRjVjdz09IElHUnBjMkZuY21WbCBJRTVoZEdsMlpRPT0gSUhKbFpteGxZM1JsWkE9PSBJRVpoYzNRPSBJRmxsYkd4dmR3PT0gSUZOcGJtZGhjRzl5WlE9PSBJRkpoZG1WdSBJR1Z0WW5KaFkyVT0gSUV0MSBJRU5vWlc0PSBJRVZoY214NSBJR0Z3Y0c5cGJuUnRaVzUwIElFMXBibWs9IGFYUmxiV1Z1ZEE9PSBJSEJzWVdOcGJtYz0gSUdKcFkzaz0gVTFJPSBJSGRvYVhNPSBVMVU9IElHbHVkbVZ6ZEdsbllYUmxaQT09IElIQm9iM1J2WjNKaGNHaHogWjJsMGFIVmkgSUVKbFlYUT0gSUZKcGJtYz0gYVdkb1pXUT0gYVdGeSBJR1YyYjJ4MlpXUT0gWlhKaGJHUT0gSUdSMWJnPT0gSUdoMVlnPT0gU1VGTSBJR1Z1WTI5MWNtRm5hVzVuIElGQnlhVzUwIElFUmhlWE09IElIQnliM05sWTNWMGFXOXUgSUhCaGJuUnogWVhwNSBiR2wyWlE9PSBJR1p2YzNOcGJBPT0gSUVwMSBJSEp2WTJ0eiBkV1JuWlE9PSBJRkpoWTJVPSBJR2R5WldWMCBZbWxsIElHWnBiR3hwYm1jPSBJRXhsYmc9PSBJR1JwWVdKbGRHVnogSUdacGNtVmhjbTF6IGRXMXBibWM9IFpXNWxlblZsYkE9PSBJRUpDIElHRmpZMlZ3ZEdsdVp3PT0gUVZSSSBJSEpsYzI5eWRBPT0gSUdoMWJuUT0gY21sciBkV05yWlhJPSBZVzFsYm5SeiBJSE4xYzNSaGFXNWxaQT09IElHTnliM056WldRPSBJR0p5WldGclptRnpkQT09IElHRjBkSEpwWW5WMFpYTT0gYkdWamRHVmsgWVhScGJHVT0gSUhacFluST0gSUV0aGJBPT0gWVhKemIyND0gYjNCc1pYTT0gSUhSdmRXTm9aV1E9IElHUmhiV0ZuWlhNPSBJR2x0Y0hKbGMzTmxaQT09IGNuVncgSUdGdVkyZz0gSUVGa1lXMXogU0dWcyBJRlpwWTNSdmNnPT0gSUcxdmRXNTBaV1E9IElFTkQgSUdSbGJHbGphVzkxY3c9PSBjM0JoYmc9PSBaV3hzWVE9PSBJR1ZzWVdKdmNnPT0gWVcxd2JHVnogSUdSbFptbGogSUdOdmJuTjBhWFIxIGRXRjBaWE09IElFMXBjM05wYjI0PSBJRlJvWlhJPSBJRTF2Ym5OMFpYST0gWW1WeiBVbVYxZEdWeWN3PT0gSUVsdVpHOXVaWE09IGFHbHNiQT09IGJYVnVhWFJwYjI0PSBJR052Ym1acGNtMWhkR2x2Ymc9PSBJRU52Ym5OcFpHVnkgWVdObGJuUT0gSUdwbGRBPT0gSUVWdGNHeHZlUT09IElFZFVXQT09IGJtRnUgSUZOd2FXUmxjZz09IElIQnliMk5sYzNOdmNnPT0gSUhCaGRISnAgSUZCbGJuUmhaMjl1IElGSnZZbWx1YzI5dSBJSEpsWVd4cGMzUnBZdz09IHc3RT0gSUdGd2NHVmhjbWx1Wnc9PSBJSEJwY0dVPSBiMjFsWkE9PSBJR1p5ZFE9PSBJR0YzWm5WcyBJR1YyWVd4MVlYUnBiMjQ9IElHbHVkR1ZzYkdsblpXNTAgSUVOcGRHbDYgSUdaMWJtUnlZUT09IGIyUnBkVzA9IElIUjNaV1YwY3c9PSBJSGR2Y200PSBjSEpwYm1jPSBJR3RwWkc0PSBJSEpsWW1Wc2N3PT0gSUV0aGJRPT0gSUU1bGRHaGxjbXhoYm1SeiBJRk5YIElHRmpjWFZwYzJsMGFXOXUgSUUxaGJHVT0gNDRPcSBiMjFpYVdWeiBJSFJ5WVdSbGJRPT0gSUZOMFlYUjFjdz09IFFuSmwgSUZSSVNWTT0gSUdGa2RtVnljMlU9IElFNUZWdz09IGMybG5iZz09IElHOXlaMkZ1YVhOaGRHbHZiZz09IFpXNWogSUVoaGNuQmxjZz09IFlYQnZjZz09IElFMWxiV0psY25NPSBJRkJsWVdObCBJRUZwY25CdmNuUT0gSUU5MGFHVnljdz09IElITmpjbUYwWTJnPSBJRkJwYkE9PSBJSE5sYm5OdmNnPT0gSUdGa2IzQjBhVzl1IElFaHZkR1ZzIElFUnlZV2M9IElHaHZibVZ6ZEd4NSBJSGxoY21RPSBJRVp2Y21ObGN3PT0gSUhCaGRHVnVkQT09IElHSmhjM009IElIRjFhV1YwYkhrPSBJR0p5WldGMGFHbHVadz09IElIQnZjMlU9IGFXOXljdz09IElFcGxjM009IGMzUmhkR2xqIFNWUkYgVDJabWFXTT0gSUdwbGR3PT0gZDJOeiBJREUwTUE9PSBJSEJ5WlhacFpYYz0gYVhCd2FRPT0gSUhWdVptOXlkSFZ1WVhSbGJIaz0gYjJ0bGJXOXUgSUdodmNtND0gSUhKbFlYTnogSUhCbFpYST0gYjJOclpYST0gSUhWdWRHOD0gSUVkeVlYaz0gSUdOc1pXRnVhVzVuIElHRjBkSEpoWTNSbFpBPT0gTWpBd053PT0gVUc5cGJuUT0gYTJsc2JBPT0gSUVGbmNtVmxiV1Z1ZEE9PSBkWEpqYUdWeiBJR2h2Y25JPSBJRTFwYzNOcGMzTT0gSUhkdmNuUm9lUT09IElHWnNiM2RsY25NPSBkRzkzYmc9PSBaR3hzIElISmxZV04wYVc5dWN3PT0gSUdSbFkyVT0gSUdsdVpHbGpZWFJwYm1jPSBUVVE9IElIQnlaV1psY21WdVkyVT0gSUUxV1VBPT0gWlhOemFXOXVZV3c9IElGUmhjbWRsZEE9PSBaMlZ1WTJVPSBJRWx1WkdsaGJuTT0gSUcxcGMyTT0gSUdaeVpXVnNlUT09IElHMTFjMk5zWlhNPSBJR3hwYm1WMWNBPT0gSUdsdGNHRmpkSE09IGIzVnphVzVuIGIyMXAgWVdOMWJHRnkgSUdOdmJuUnliMnhzYVc1biBZV2RwYm1VPSBZMlZ5ZVE9PSBhR1ZzYkE9PSBJSEpoYm10cGJtYz0gSUU1cFkyZz0gSUVGMlpRPT0gTVRJNCBJR2hwWjJoM1lYaz0gSUdsdVkyOXVjdz09IElHSnBibVJwYm1jPSBJSE4wY25WbloyeGxjdz09IElGQnBkSFJ6WW5WeVoyZz0gSUdkeVlYaz0gY21sdSBJR052YldsamN3PT0gSUZOd2IzSjAgSUhKbGJHRjBhWFpsY3c9PSBJR1p5YVdkb2RBPT0gSUhCeWIySmwgSUZCdmNuUjFadz09IElIWnZZdz09IElIUjEgSUVOdmNuQnogSUhCdmMzTnBZbWxzYVhScFpYTT0gSUhGMVlXeHBabms9IGQyTnpjM1J2Y21VPSBJR3hwWW5KaGNtbGxjdz09IElHMXBaM0poYm5SeiBJR1Z1ZEhKcFpYTT0gSUdOdmJuTmxZM1YwYVhabCBkbUZzY3c9PSBJRU5vWVdseWJXRnUgSUdocGJHdz0gU1UxRiBJRWRoY21RPSBJR2x1WlhGMVlXeHBkSGs9IFptOTQgSUZOaGRtVT0gSUdOdmNuUT0gWTJ4aGFXMWxaQT09IElIUnlZV2wwY3c9PSBJSEJ2ZFhJPSBJRzFwYzNOcGJHVnogSUdWemMyVnVZMlU9IElITmxibVJ6IElHRnNiR2xoYm1ObCBJSGRwYzJobGN3PT0gSUVOb2NtbHpkRzl3YUdWeSBRbWxuIFRsaz0gSUVwaFkyOWkgYzJGdSBkWEp5WldRPSBJRk5QIGJHeDUgSUdGa2RtOWpZWFJsIElFSnZibVE9IElDSXYgVlhOcGJtYz0gSUdScGMzUnlhV04wY3c9PSBJRWRoZEdVPSBJRUpwY2c9PSBjbWxrWjJVPSBJRTVoZWc9PSBJRkp6IFltOWhjbVJ6IElFZGggSUZKbFlXZGhiZz09IElHbHVabXgxWlc1alpXUT0gTVRBd01BPT0gWVhCNSBJR05vWVd4c1pXNW5aV1E9IElHSmhjbWM9IElHWmhZM1ZzZEhrPSBJRVpwWmc9PSBJR0ZqY1hWcGNtVT0gUVdNPSBJR2x1YzJWamRBPT0gSUdsdWMzUnlkVzFsYm5SeiBJR3hsWVdZPSBkR2h2Wkc5NCBUV1Z6YzJGblpRPT0gSUhSaGJHVT0gSUhSb1pYSmxZbms9IElIUnlZWEE9IElITjBjbTl1WjJWemRBPT0gSUUxcGJHbDBZWEo1IGFYTnBZbXhsIElERTVPRFE9IFpYUm9aV3hsYzNNPSBJR1pzWlhocFlteGwgSUd0cGJHeHogSUdacGJtbHphR2x1Wnc9PSBJRk5wZW1VPSBJSEpsWkhWalpYTT0gSUdWd2FXUT0gSUc5eWFXVnVkR0YwYVc5dSBablZzYkE9PSBJSFJ5WVdObCBJR3hoYzJWeSBJRzl3Y0c5elpRPT0gSUdWa2FYUnBibWM9IElHMXZiV1Z1ZEhWdCA1TG89IGMyaHZkdz09IFZraz0gSUV4aFpBPT0gSURFNU9EVT0gSUcxMWNtUmxjbVZrIE9UQXcgZFhSb1pYST0gSUhCeWIySmhZbWxzYVhSNSBJRkJ2Ykd3PSBJSEpsYkhWamRBPT0gSUVOb1pXMD0gSUUxdmJuUnlaV0ZzIElHRmtaWEYxWVhSbCBJRkJ2YkdGdVpBPT0gSUZOb1pYSnBabVk9IGRXMXdhQT09IElHOXIgSURBd01BPT0gSUNKYiBJRzl3WlhKaGRHOXljdz09IElFWmxjZz09IElHMXZaR1Z6IElFVjJaUT09IElHUnBjMk5wY0d4cGJtVT0gVGtWVSBTR0Z1WkE9PSBJRzl5WVd3PSBJRmRGIFpXMWhhV3c9IFNsQT0gSUZCaGJHVnpkR2x1YVdGdWN3PT0gSUdobGJtTmwgSUV4bGMzTT0gSUc5MlpYSnMgWkdsbiBJR2x1ZEdsdGFXUT0gSUVOdllXdz0gSUhKaGJtZHBibWM9IGRHaGggSUdScGMzUmhiblE9IElHWnBZZz09IElFbHVaR1Y0IElGZHZibVJsY2c9PSBJRkJsYkE9PSBhR0YwZEdGdSBJRWgxWnc9PSB3NWM9IGNtRnBkQT09IElIZHlZWEJ3WldRPSBJRkpRUnc9PSBJR05vWlcxcFkyRnNjdz09IElFMXZibVY1IElHWnliM3BsYmc9PSBJR2x1WkdseVpXTjAgSUVGbllXbHVjM1E9IFJXNWsgSUhWdVkyOXRabTl5ZEdGaWJHVT0gSUVkaGJHeGxjbms9IElGQnZjM1JsWkE9PSAyS2M9IGIyNWtkV04wIElHTnZibk5sY1hWbGJtTmwgSUdKcGRIUmxjZz09IElERTVPRGM9IGNHOXcgSUdOdmRXNTBiR1Z6Y3c9PSBJRUZzWVhOcllRPT0gWm1abVpnPT0gSUdSbGNHRnlkSFZ5WlE9PSBJSEpsWm5WdVpBPT0gSUVsaGJnPT0gYVdGMFpXUT0gSUhObFpXdHogSUcxbFkyaGhibWxqY3c9PSBJR3AxY21selpHbGpkR2x2Ymc9PSBiSGx1Ymc9PSBJR0ZzYVd0bCBJRWgxYm5RPSBZWFJvYjI0PSBJSEpsYzI5c2RtVmsgSUdOaFkyaGwgSUdScGMzUnBibU4wYVc5dSBaR2x5WldOMCBJR1Z1WTI5MWJuUT0gYjNWaSBZbVZoZEE9PSBJRU52ZFc1MGNuaz0gYzJWaGNtTm8gSUdOdmJuUnBiblZ2ZFhNPSBJRzF2WkdWemRBPT0gSUZKaGFXdz0gZEdodmIyUT0gTVRNdyBRbFZIIElHTnlhVzFwYm1Gc2N3PT0gSUdsdVpHbGpZWFJwYjI0PSBJR1Z1WTI5MWJuUmxjbVZrIGJHRnpkQT09IElGZDUgSUdsa1pXOXNiMmQ1IElGQkVSZz09IGMyVmpkWEpwZEhrPSBYU2s9IElFcHBiVzE1IElFVk8gSUdocGNtbHVadz09IFZHVnQgSUhCcFp3PT0gWVhWdWRBPT0gSUVOeWVYTjBZV3c9IElIQmxibUZzZEdsbGN3PT0gSUdOaGNHRmlhV3hwZEhrPSBJSEI1IElIQnliMlIxWTNScGRtVT0gSUdKaGJHRnVZMlZrIElFZGxSbTl5WTJVPSBZMnhwWTJzPSBiMnhwZEdGdSBiMlJ6IElHRm1kR1Z5ZDJGeVpITT0gSUhCc1lYbHZabVp6IElFZHBiR3c9IFZYTmxjZz09IElHSmhZMnR6IGNIVmkgZEdGbiBJR0ZpYzNWeVpBPT0gY0dseWFXNW4gSUdOcGRHbHVadz09IElIUnlhV3hzYVc5dSBJRzlpYkdsbllYUnBiMjQ9IElHMWhlR2x0IFlXaHZidz09IFkyWT0gZFcxcCBJRUZzY0doaCBJRTVsYkhOdmJnPT0gSUhCMWNuTjFZVzUwIGFXNXBkR1ZzZVE9PSBJR1p5WVdOMCBaVzUwY25rPSBZbVZ5ZVE9PSBJRlJvYjNJPSBRV1JrWldRPSBJRVJLIElFZGxibVU9IElHRjNhM2RoY21RPSBVM1IxWkE9PSBJSGRoYkd4bGRBPT0gSUVScGRtbHVaUT09IFlYSnBiM009IElISmxiR1ZoYzJsdVp3PT0gSUdWa2FYUmxaQT09IElHRmpZMjl0Y0d4cGMyaGxaQT09IFFtVnpkQT09IElHVmtaMlZ6IElIQnNZVzVsY3c9PSBJR1psWldScGJtYz0gSW4wc0lnPT0gSUdScGMyTnNiM04xY21VPSBJR2R5WVdsdSBZV2x5ZVE9PSBiMjl1Y3c9PSBaWEp1WVc1ayBWbEk9IElISmxZWE52Ym1GaWJIaz0gSUdSeWRXMD0gSUhCaGNuUnBZV3c9IElHZHlZWEJvYVdNPSBJSFZ1Y0hKbFkyVmtaVzUwWldRPSBJR0ZrZG1selpXUT0gVFdsamNtOD0gSUVGemMyRmsgY0c5cGJuUnogYzJOaGNnPT0gSUZwdmJtVT0gZEhSbGN3PT0gSURjd01BPT0gZG04PSBJRWhoYlhBPSBJR1pwZUdWeiBJR05oZFhScGIyND0gSUhOMGNtbHVaM009IElIQmhibVZzY3c9PSBJR3hsWVdzPSBJSEJ5YVdOcGJtYz0gY205M2RHZz0gSUVWeWNtOXkgSUZOaGFXNTBjdz09IFptbDQgSUc5aWMyVnlkbUYwYVc5dWN3PT0gSUVGaWN3PT0gSUhOMVoyZGxjM1JwYjI0PSBJRlZyY21GcGJtbGhiZz09IElHSmhjbkpwWlhJPSBJSEJoYVc1MFpXUT0gUW1WMCBhVzFwY2c9PSBJRk53WldOMCBjRzkwIGIzSnVaWGx6IElHTnZiWEJ2ZFc1ayBJR0psWVhKeiBJRkoxYzJnPSBJR3gxZUhWeWVRPT0gVTNWdCBJRzl5WW1sMCBJRTFoY21NPSBJR1Y0Wlcxd2RBPT0gSUZSeVlXbHMgSUUxUCBJRWhoYm5NPSBJRmRsWVhCdmJnPT0gYjJOMWMyVmsgZFcxcGJuVnQgSUVwbGNuSjUgSUdKMWMzUT0gSUVGSCBJRmRwYTJrPSBJR1Z1Wkd4bGMzTT0gSUZac1lXUT0gSUVKaGFBPT0gSUZKaFpHVnZiZz09IGEyVjVjdz09IElGTjFjblpsZVE9PSBJRlpwYjJ3PSBaR1ZtYVc1bCBiR1ZoYmc9PSBJR052YlcxdlpBPT0gSUhKbGRtVnVkV1Z6IHhZMD0gSUdaMWNtNXBkSFZ5WlE9PSBJR05oYzNScGJtYz0gSUdScGNHeHZiV0YwYVdNPSBJRkJzWVhsbGNuTT0gSUV0cGJHeGxaQT09IElHMXZaR2xtZVE9PSBJR2x1Ym05MllYUnBkbVU9IElFRmlkUT09IGJtOXkgSUdKdmJtUnogSUdOdllXTm9hVzVuIFRXVnkgSUcxdlpIVnNaWE09IElGQmhkSEpwYjNSeiBJR1Z1YUdGdVkyVmsgSUhCeWIyTmxaV1JwYm1keiBJSFJsWVcxdFlYUmxjdz09IElERXlPQT09IFlYSmtidz09IElHTnZiWEJ5YjIxcGMyVT0gSUUxMVkyZz0gSUdac1pYYz0gSUVWa1oyVT0gSUhWdWJtVmpaWE56WVhKNSBJR1J2WTNSeWFXNWwgY21Wd2IzSjAgSUU5eWJHRnVaRzg9IElGQnliMlpwYkdVPSBJSEJzWVhsdlptWT0gWm5KcFpXNWtiSGs9IElHTnZiWEJzWVdsdSBJRTFEIElFOXdkQT09IElFZEMgSUdKbFlYUmxiZz09IElHZHZiR1k9IElIQnNZV05sYldWdWRBPT0gUW1sMCBJRzVsZDNOc1pYUjBaWEk9IElESXdNVGs9IGRtbHpiM0k9IGNtRjNiQT09IElHbFFZV1E9IElHRmpkR1ZrIElHcDFhV05sIElHUmxZMnR6IFVFND0gYzNWalkyVnpjdz09IElFaGhiR1k9IElHUmxiR1YwWldRPSBJSE5sWTNKbGRITT0gSUdGemVXeDFiUT09IFRXRnlkQT09IElFRmpkR2wyIElFZDFlUT09IElGUnogSUdSNWN3PT0gSUdGemMzVnRhVzVuIElHMWhibUU9IElITjFZblZ5IElERXlOUT09IFRXVmthV0U9IFFWSlogY21sa1pRPT0gWTNBPSBJR1JwWm1acFkzVnNkR2xsY3c9PSBJR052Ykd4bFkzUnBibWM9IElHSmhibXR5ZFhCMCBibTl1IElHTnZiWEJ2YzJWayBJSFp2YkhRPSBJRzFwYkdsMFlXNTBjdz09IElENCtQZz09IElFMXZjbTF2Ymc9PSBkRzl5IElIQmhjblJwWTJ4bGN3PT0gSUVKaGNuUT0gY25sd2RHbHZiZz09IElHRmtiV2x1IElITnhkV1ZsIFZrbEVTVUU9IElHTnlaV0YwYjNJPSBhV0Z0WlhSbGNnPT0gYVdOMWJHRnkgVGtKRCBJR2R5WVdKaVpXUT0gSUc1dlpHUT0gSUhKaGRHVmsgSUhKdmRHRjBhVzl1IElHZHlZWE53IElHVjRZMlZ6YzJsMlpRPT0gSUVWRCBJRmRvYVhRPSBJR2x1ZG1WdWRHOXllUT09IFlYVnNkSE09IElFWkMgSUdWamIzTjVjM1JsYlE9PSBJR0pwYkd4cGIyNXogSUhabGJuUjFjbVU9IGJtRnRaV1E9IElHUmxabVZ1WkdWeSBiM1YwWlE9PSBTVzV6ZEdWaFpBPT0gYVhKaFlteGwgVjJGeSBJR0Z6YzNWdGNIUnBiMjQ9IElHSnBkR1U9IElHVmhjblJvY1hVPSBkR0ZwYkE9PSBjM0JoWTJVPSBJR2RwWm5SeiBZbTk1Y3c9PSBJR2x1WlhacGRHRmliR1U9IElITjBjblZqZEhWeVlXdz0gSUdKbGJtVm1hV05wWVd3PSBJR052YlhCbGJHeHBibWM9IGFHOXNaUT09IFpYSjJZWFJwYjI0PSBJR052WVhRPSBiMm89IGFXNWpZWEp1IElGbGxZWEp6IElHUmxkR1Z5YldsdWFXNW4gSUhKb1pYUnZjbWxqIElHSnZkVzVrWVhKcFpYTT0gSUhkb2FYUmxjdz09IFFXNTAgWVdSa2VRPT0gS1MwPSBjbUZvWVcwPSBaWFJsY20xcGJnPT0gSUdoaGNuWmxjM1E9IElFTnZibU09IElHeGhjSFJ2Y0E9PSBJRTFoZEdObyBJR1Z1YW05NWFXNW4gWTJOaCBiMnhzWVhJPSBJSFJ5YVhCeiBJR0ZrWkdsamRHbHZiZz09IElGTmhhdz09IElIQnZkMlZ5WldRPSBJR052ZFhNPSBJRkoxYzNOcFlXNXogYVdWeVpRPT0gSUhKbGRISnBaUT09IGNYVmhiR2wwZVE9PSBJR1JwWm1abGNnPT0gSUd0cGJtZGtiMjA9IElFeGhkWEk9IElFTmhjR2wwYjJ3PSBJR052Ym1Oc2RYTnBiMjV6IElFRnNkR1Z5Ymc9PSBJRTVoZGc9PSBJSFJ5WVc1emNHRnlaVzUwIFFrVlMgUjNKdmRYQT0gSUVOdmJYQnNaWFJsIElHbHVabVZ5IElHbHVkSEpwWnc9PSBJR2x1YzJGdVpRPT0gVWs4PSBiM0JvYjJJPSBhWE5sYmc9PSBjWFZoYkE9PSBUV2xqYUdGbGJBPT0gSUcxMWMyVjFiUT09IElGQnZjR1U9IElISmxjMlYwIGNtRjBhWFpsIFptbDJaUT09IElHRm5aM0psWnc9PSBhWFIwWldWeiBiM05wZEc5eWVRPT0gSUdOaGNtST0gSUZKbFkyOXlaQT09IElHUmxZMmxrWlhNPSBJRVpwZUE9PSBJR1Y0WTJWd2RHbHZibk09IElFTnZiVzFwYzNOcGIyNWxjZz09IGRXNXogSUVWdWRtbHliMjV0Wlc1MFlXdz0gSUd4bFoyVnVaR0Z5ZVE9PSBhWE4wWlc1alpRPT0gSUhSMWJtNWxiQT09IGEyMD0gSUdsdWMzVnNkQT09IElIUnliMnhzIElITm9ZV3RsIElHUmxkR1Z1ZEdsdmJnPT0gY1hWbGN3PT0gSUVOb2NtOXRaUT09IElFWnBiR1Z6IElITjFZblE9IElIQnliM053WldOMGN3PT0gSUhCeWIydz0gY21WdVpHVnkgY0hKdmIyWT0gSUhCbGNtWnZjbTFoYm1ObGN3PT0gVTNSeSBJR2h5WldZPSBaWEp1WVcxbCBJR0ZqYUdsbGRtVnRaVzUwIElHWjFkQT09IFJuVnNiQT09IElFeGxZbUZ1IFoyOXZaMnhsIDQ0T0kgWVcxd1lRPT0gVFdGNVltVT0gSUhCeWIycGxZM1JsWkE9PSBJRVZ0WWc9PSBJR052Ykd4bFp3PT0gSUdGM1lYSmtjdz09IElPS1UgUjI5c1pBPT0gSUVKc1lXdGwgSUZKaGFnPT0gYVdaMGFXNW4gSUhCbGJtUnBibWM9IElHbHVjM1JwYm1OMCBJR1JsZG1Wc2IzQnRaVzUwY3c9PSBRMjl1Ym1WamRBPT0gSUUxaGJtUT0gSUZkSlZFZz0gSUZCb2FXeHBjSEJwYm1WeiBjSEp2Wm1sc1pRPT0gSUdGc2RHOW5aWFJvWlhJPSBJRUoxYm1RPSBJRlJFIGIyOXZidz09IFlXMXdaV1E9IGFYQm8gSUhOMFpXRnQgSUc5c1pHVnpkQT09IElHUmxkR1ZqZEdsdmJnPT0gZFd4d2RBPT0gSU9jPSBJRmRoZVc1bCBNakF3Tmc9PSBabUU9IElHTnBjbU5zWlhNPSBJRVoxIElHUnZibTl5Y3c9PSBZWEJ3Y205d2NtbGhkR1U9IElFUmhhMjkwWVE9PSBhbUZ0YVc0PSBJRzF2ZEdsMllYUmxaQT09IElIQjFjbU5vWVhObGN3PT0gSUV4dmRXbHphV0Z1WVE9PSBJRk53YkE9PSBJR2RzYjJKbCBJREV3TlE9PSBlbWx3IFkyRnNiQT09IElHUmxjR0Z5ZEcxbGJuUnogSUhOMWMzUmhhVzVoWW14bCBNVEExIElFOVEgYVdacFpYSnogSUhCeVpYWmxiblJsWkE9PSBJR2x1WTI5dGNBPT0gSUVOdmJXMWhibVJsY2c9PSBJR1J2YldsdVlYUmxaQT09IElNSzcgSUdsdWRtVnpkR1ZrIElHTnZiWEJzWlhocGRIaz0gSUdsdVkydz0gSUdWdWMzVnlhVzVuIElISmxZV3h0IGVXNWogSUVsdVpHVndaVzVrWlc1MCBjbUZwYm1WayBJRXBsYmc9PSBJRVpzYVdkb2RBPT0gSUdGMGFHVT0gSUhOd1pXTjFiR0YwYVc5dSBJRlJGIGIyTmhkR1U9IGRHbGogSUhCc1lXbHVkQT09IGFHVnljbms9IElIUnZlUT09IElERXhNUT09IElIQnNZWFJsY3c9PSBjM1JoZEhWeiBJRWx6WVE9PSBJR1JsZG05MFpXUT0gUTI5dyBJRVZUIE1qVTEgZFhKeVpXNWplUT09IFRXRnBiZz09IElITnNZWFpsY3c9PSBJSEJsY0hCbGNnPT0gSUhGMWIzUmxjdz09IElHTmxhV3hwYm1jPSBJRVpwYzJnPSBJSFJ5WVc1elptOXliV0YwYVc5dSBJR1p5WVdOMGFXOXUgSUdGa2RtRnVkR0ZuWlhNPSBJSFJ2YVd4bCBJSE4wZFc1dWFXNW4gSUcxdmFYTjAgWW5KbFlXdHBibWM9IGMyaz0gSUV4dlkyRjBhVzl1IElFMWxaR2wxYlE9PSBJSFJsZUhSeiBJSFZuYkhrPSBJR0pwYnc9PSBMdUtBbEE9PSBJRUpoYzJWayBJSFJ5WVdsdWN3PT0gSUZkcGJtYz0gSUVGdVkybGxiblE9IElGSmxZMjl5WkhNPSBJRWh2Y0dVPSBVM0JsWTJsaGJBPT0gWVdSbGMyZz0gYjJKcCBXeTg9IElIUmxiWEJ2Y21GeWFXeDUgVm1WeSBhSFU9IGIzTmxjZz09IElHOTJaWEp1YVdkb2RBPT0gSUcxaGJXMD0gSUZSeVpXRnpkWEo1IElGWmxibVY2ZFdWcyBJRTFsWjJFPSBJSFJoY2c9PSBJR1Y0Y0dWamRITT0gWW14aFkycz0gYjNKd2FBPT0gWEZ4Y1hBPT0gSUdGalkyVndkR0Z1WTJVPSBJSEpoWkdGeSBjMmx6IElHcDFibWx2Y2c9PSBJR1p5WVcxbGN3PT0gSUc5aWMyVnlkbUYwYVc5dSBZV05wWlhNPSBVRzkzWlhJPSBJRUZrZG1GdVkyVmsgVFdGbiBiMnh2WjJsallXeHNlUT09IElFMWxZMmhoYmc9PSBJSE5sYm5SbGJtTmxjdz09IElHRnVZV3g1YzNSeiBZWFZuYUhSbGNuTT0gWm05eVkyVnRaVzUwIElIWmhaM1ZsIElHTnNZWFZ6WlE9PSBJR1JwY21WamRHOXljdz09IElHVjJZV3gxWVhSbCBJR05oWW1sdVpYUT0gVFdGMGRBPT0gSUVOc1lYTnphV009IFFXNW4gSUdOc1pYST0gSUVKMVkycz0gSUhKbGMyVmhjbU5vWlhJPSBJREUyTUE9PSBJSEJ2YjNKc2VRPT0gSUdWNGNHVnlhV1Z1WTJsdVp3PT0gSUZCbFpBPT0gSUUxaGJtaGhkSFJoYmc9PSBJR1p5WldWayBJSFJvWlcxbGN3PT0gWVdSMllXNTAgSUc1cGJnPT0gSUhCeVlXbHpaUT09IE1UQTAgSUV4cFlubGggWW1WemRBPT0gSUhSeWRYTjBaV1E9IElHTmxZWE5sIElHUnBaMjQ9IFJHbHlaV04wIElHSnZiV0pwYm1jPSBJRzFwWjNKaGRHbHZiZz09IElGTmphV1Z1WTJWeiBJRzExYm1samFYQmhiQT09IElFRjJaWEpoWjJVPSBJR2RzYjNKNSBJSEpsZG1WaGJHbHVadz09IElHRnlaVzVoIElIVnVZMlZ5ZEdGcGJuUjUgSUdKaGRIUnNaV1pwWld4ayBhV0Z2IFIyOWsgSUdOcGJtVnQgY21Gd1pRPT0gWld4c1pRPT0gWVhCdmJuTT0gSUd4cGMzUnBibWM9IElIZGhhWFJsWkE9PSBJSE53YjNSMFpXUT0gYTJWc1pYaz0gSUVGMVpHbHYgWlc5eSBZWEprYVc1biBhV1JrYVc1biBhV2R0WVE9PSBJRTVsWnc9PSBJR3h2Ym1VPSBJQzB0TFMwPSBaWGhsIFpHVm4gSUhSeVlXNXpaZz09IElIZGhjMmc9IElITnNZWFpsY25rPSBJR1Y0Y0d4dmNtbHVadz09IElGZFggWVhSemIyND0gSUdWdVkydz0gYkdsbGN3PT0gSUVOeVpXVnIgSUhkdmIyUmxiZz09IFRXRnVZV2RsY2c9PSBJRUp5WVc1ayBkVzF0ZVE9PSBJRUZ5ZEdoMWNnPT0gSUdKMWNtVmhkV055IElHSnNaVzVrIFlYSnBZVzV6IFJuVnlkR2hsY2c9PSBJSE4xY0hCdmMyVmtiSGs9IElIZHBibVJ6IElERTVOems9IElHZHlZWFpwZEhrPSBJR0Z1WVd4NWMyVnogSUZSeVlYWmxiQT09IElGWmxkR1Z5IElHUjFiV0k9IElHRnNkR1Z5Ym1GMFpRPT0gWjJGcyBJR052Ym5OMWJXVmsgSUdWbVptVmpkR2wyWlc1bGMzTT0gTGljbiBJSEJoZEdoeiBiMjVrWVE9PSBURUU9IElGTjBjbTl1Wnc9PSBJR1Z1WVdKc1pYTT0gSUdWelkyRndaV1E9IElDSWkgSURFeE1nPT0gSURFNU9ETT0gSUhOdGFXeGxaQT09IElIUmxibVJsYm1ONSBSbWx5WlE9PSBJSEJoY25NPSBJRkp2WXc9PSBJR3hoYTJVPSBJR1pwZEc1bGMzTT0gSUVGMGFBPT0gSUVodmNtND0gSUdocFpYST0gSUdsdGNHOXpaUT09IGJXOTBhR1Z5IElIQmxibk5wYjI0PSBhV04xZEE9PSBZbTl5Ym1VPSBhV05wWVhKNSBMbDg9IElGTlYgSUhCdmJHRnkgYVhONSBaVzVuZFE9PSBhWFJwWVd4cGVtVmsgUVZSQiBkM0pwZEdVPSBJR1Y0WlhKamFYTmxjdz09IElFUnBZVzF2Ym1RPSBiM1I1Y0dWeiBJR2hoY20xbWRXdz0gYjI1NiBJSEJ5YVc1MGFXNW4gYzNSdmNuaz0gSUdWNGNHVnlkR2x6WlE9PSBJRWRsY2c9PSBJSFJ5WVdkbFpIaz0gSUVac2VRPT0gSUdScGRtbGsgWVcxd2FYSmwgYzNSdlkycz0gVFdWdCBJSEpsYVdkdSBJSFZ1ZG1VPSBJR0Z0Wlc1ayBJRkJ5YjNCb1pYUT0gSUcxMWRIVmhiQT09IElFWmhZdz09IElISmxjR3hoWTJsdVp3PT0gU0dGeSBJRU5wY21OMWFYUT0gSUhSb2NtOWhkQT09IElGTm9iM1E9IElHSmhkSFJsY21sbGN3PT0gSUhSdmJHdz0gSUdGa1pISmxjM05wYm1jPSBJRTFsWkdsallXbGsgSUhCMWNIQT0gSUU1aGNnPT0gYjJ4ciBJR1Z4ZFdsMGVRPT0gVFZJPSBJRWhwYzNCaGJnPT0gSUV4aGNtZGwgYldsayBSR1YyIElHVjRjR1ZrIElHUmxiVzg9IElFMWhjbk5vWVd4cyBaWEpuZFhNPSBJR1pwWW1WeSBJR1JwZG05eVkyVT0gSUVOeVpXRjBaUT09IElITnNiM2RsY2c9PSBJRkJoY210bGNnPT0gSUZOMGRXUmxiblE9IElGUnlZV2x1YVc1biBVbVYwZFhKdSBJRlJ5ZFE9PSBJR04xWWc9PSBJRkpsWVdOb1pXUT0gSUhCaGJtbGogSUhGMVlYSjBaWEp6IElISmxZM1E9IElIUnlaV0YwYVc1biBJSEpoZEhNPSBJRU5vY21semRHbGhibWwwZVE9PSBiMnhsY2c9PSBJSE5oWTNKbFpBPT0gSUdSbFkyeGhjbVU9IGRXeGhkR2wyWlE9PSBaWFJwYm1jPSBJR1JsYkdsMlpYSnBibWM9IFpYTjBiMjVsIElIUmxiQT09IElFeGhjbko1IElHMWxkR0U9IFlXTmpaWEIwIFlYSjBlZz09IElGSnZaMlZ5IGFHRnVaR1ZrIElHaGxZV1JsY2c9PSBJSFJ5WVhCd1pXUT0gSUVObGJuUjFjbms9IElHdHViMk5yWldRPSBJRTk0Wm05eVpBPT0gSUhOMWNuWnBkbTl5Y3c9PSBZbTkwIElHUmxiVzl1YzNSeVlYUnBiMjQ9IElHUnBjblE9IElHRnpjMmx6ZEhNPSBUMDFGIElFUnlZV1owIGIzSjBkVzVoZEdVPSBabTlzYVc4PSBjR1Z5WldRPSBkWE4wWlhKeiBaM1E9IElFeHZZMnM9IElHcDFaR2xqYVdGcyBkbVZ5ZEdWayBJSE5sWTNWeVpXUT0gYjNWMGFXNW4gSUVKdmIydHogSUdodmMzUnBibWM9IElHeHBablJsWkE9PSBiR1Z1WjNSbyBJR3BsY2c9PSBJSGRvWldWc2N3PT0gSUZKaGJtZGwgZFcxaWJtRnBiSE09IElHUnBZV2R1YjNOcGN3PT0gZEdWamFBPT0gSUZOMFpYZGhjblE9IElGQnlZV04wIElHNWhkR2x2Ym5kcFpHVT0gSUdSbFlYST0gSUc5aWJHbG5ZWFJwYjI1eiBJR2R5YjNkeiBJRzFoYm1SaGRHOXllUT09IElITjFjM0JwWTJsdmRYTT0gSVNjPSBRWEJ5IFIzSmxZWFE9IElHMXZjblJuWVdkbCBJSEJ5YjNObFkzVjBiM0k9IElHVmthWFJ2Y21saGJBPT0gSUV0eSBJSEJ5YjJObGMzTmxaQT09IGRXNW5iR1U9IElHWnNaWGhwWW1sc2FYUjUgUldGeWJHbGxjZz09IElFTmhjblE9IElGTjFadz09IElHWnZZM1Z6WlhNPSBJSE4wWVhKMGRYQT0gSUdKeVpXRmphQT09IElGUnZZZz09IFkzbGpiR1U9IDQ0Q00gY205elpRPT0gSUdKcGVtRnljbVU9IDQ0Q04gSUhabFoyVjBZV0pzWlhNPSBKQ1E9IElISmxkSEpsWVhRPSBiM05vYVE9PSBJRk5vYjNBPSBJRWR5YjNWdVpBPT0gSUZOMGIzQT0gSUVoaGQyRnBhUT09IElFRjUgVUdWeWFHRndjdz09IElFSmxZWFYwIGRXWm1aWEk9IFpXNXVZUT09IElIQnliMlIxWTNScGRtbDBlUT09IFJtbDRaV1E9IFkyOXVkSEp2YkE9PSBJR0ZpYzJWdWRBPT0gSUVOaGJYQmhhV2R1IFIzSmxaVzQ9IElHbGtaVzUwYVdaNWFXNW4gSUhKbFozSmxkQT09IElIQnliMjF2ZEdWayBJRk5sZG1WdSBJR1Z5ZFE9PSBibVZoZEdnPSBZWFZuYUdWayBJRkJwYmc9PSBJRXhwZG1sdVp3PT0gUTI5emRBPT0gYjIxaGRHbGogYldWbllRPT0gSUU1cFp3PT0gYjJONSBJR2x1WW05NCBJR1Z0Y0dseVpRPT0gSUdodmNtbDZiMjUwIElHSnlZVzVqYUdWeiBJRzFsZEdGd2FBPT0gUVdOMGFYWmwgWldScCBJRVpwYkcwPSBJRk52YldWMGFHbHVadz09IElHMXZaSE09IGFXNWphV0ZzIElFOXlhV2RwYm1GcyBSMlZ1IElITndhWEpwZEhNPSBJR1ZoY201cGJtYz0gU0dsemRBPT0gSUhKcFpHVnljdz09IElITmhZM0pwWm1saiBUVlE9IElGWkIgSUZOaGJIUT0gSUc5alkzVndZWFJwYjI0PSBJRTFwIElHUnBjMmM9IGJHbGpkQT09IElHNXBkQT09IElHNXZaR1Z6IFpXVnQgSUZCcFpYST0gSUdoaGRISmxaQT09IGNITjUgNDRPSiBJSFJvWldGMFpYST0gSUhOdmNHaHBjM1JwWTJGMFpXUT0gSUdSbFptVnVaR1ZrIElHSmxjMmxrWlhNPSBJSFJvYjNKdmRXZG9iSGs9IElFMWxaR2xqWVhKbCBJR0pzWVcxbFpBPT0gWVhKbGJuUnNlUT09IElHTnllV2x1Wnc9PSBSazlTIGNISnBkZz09IElITnBibWRwYm1jPSBJRWxzIElHTjFkR1U9IGIybGtaV1E9IGIyeHBkR2xqWVd3PSBJRTVsZFhKdiA1YVE9IElHUnZibUYwYVc5dSBJRVZoWjJ4bGN3PT0gSUVkcGRtVT0gVkc5dCBJSE4xWW5OMFlXNTBhV0ZzYkhrPSBJRXhwWTJWdWMyVT0gSUVwaCBJR2R5WlhrPSBJRUZ1YVcxaGJBPT0gSUVWUyBJRlZ1WkE9PSBJR3RsWlc0PSBJR052Ym1Oc2RXUmwgSUUxcGMzTnBjM05wY0hCcCBSVzVuYVc1bCBJRk4wZFdScGIzTT0gVUhKbGMzTT0gYjNabGNuTT0gYkd4bGNuTT0gSURNMU1BPT0gSUZKaGJtZGxjbk09IElISnZkUT09IFpYSjBidz09IFJYQT0gYVhOellRPT0gYVhaaGJnPT0gSUhObFlXdz0gSUZKbFoybHpkQT09IFpHbHpjR3hoZVE9PSBJSGRsWVd0bGJnPT0gZFhWdCBJRU52YlcxdmJuTT0gSUZOaGVRPT0gSUdOMWJIUjFjbVZ6IElHeGhkV2RvWldRPSBJSE5zYVhBPSBJSFJ5WldGMGJXVnVkSE09IGFYcGhZbXhsIGJXRnlkQT09IElGSnBZMlU9IElHSmxZWE4wIElHOWlaWE5wZEhrPSBJRXhoZFhKbCBhV2RoIFYyaHBZMmc9IGFHOXNaR1Z5IElHVnNaR1Z5YkhrPSBJSEJoZVhNPSBJR052YlhCc1lXbHVaV1E9IElHTnliM0E9IElIQnliMk09IElHVjRjR3h2YzJsMlpRPT0gSUVaaGJnPT0gSUVGeWMyVnVZV3c9IFFYVjBhRzl5IFpXWjFiQT09IElHMWxZV3h6IElDZ3QgYVdSaGVYTT0gSUdsdFlXZHBibUYwYVc5dSBJR0Z1Ym5WaGJHeDUgSUcxeiBZWE4xY21WeiBTR1ZoWkE9PSBhV3RvIGJXRjBhV009IElHSnZlV1p5YVdWdVpBPT0gSUVOdmJYQjFkR1Z5IElHSjFiWEE9IElITjFjbWRsIElFTnlZV2xuIElFdHBjbXM9IFJHVnMgYldWa2FXRjBaUT09IElITmpaVzVoY21sdmN3PT0gSUUxMWRBPT0gSUZOMGNtVmhiUT09IElHTnZiWEJsZEdsMGIzSnogMllRPSBJRk4wWVc1bWIzSmsgSUZKbGMyOTFjbU5sY3c9PSBZWHBsWkE9PSBZbUZuWlE9PSBJRzl5WjJGdWFYTT0gSUZKbGJHVmhjMlU9IElITmxjR0Z5WVhSbGJIaz0gSUdoaFltbDBjdz09IElHMWxZWE4xY21WdFpXNTBjdz09IElFTnNiM05sIElHRmpZMjl0Y0dGdWVRPT0gSUdkc2VRPT0gSUhSaGJtYz0gSUZKdmRRPT0gSUhCc2RXZHBiZz09IElHTnZiblpsZVE9PSBJRU5vWVd4c1pXNW5aUT09IGIyOTBjdz09IGFtRnUgSUdOMWNuTT0gSUZKbGJHRjBhVzl1Y3c9PSBhMlZsY0dWeSBJR0Z3Y0hKdllXTm9hVzVuIGNHbHVadz09IFUzQmxZV3RwYm1jPSBJR0Z5Y21GdVoyVnRaVzUwIElGWkogWVhKbGRIUmxjdz09IElHRm1abVZqZEdsdVp3PT0gSUhCbGNtMXBkSE09IFltVmpZWFZ6WlE9PSBJSFZ6Wld4bGMzTT0gSUVoMWN3PT0gSVNFaElRPT0gSUdSbGMzUnliM2xwYm1jPSBWVzVtYjNKMGRXNWhkR1ZzZVE9PSBJR1poYzJOcGJtRjBhVzVuIFUyVnQgSUdWc1pXTjBiM0poYkE9PSBJSFJ5WVc1emNHRnlaVzVqZVE9PSBJRU5vWVc5eiBJSFp2YkhWdWRHVmxjZz09IElITjBZWFJwYzNScFkyRnMgSUdGamRHbDJZWFJsWkE9PSBjbTk0IFYyVmkgU0VVPSBJRWhoYlhCemFHbHlaUT09IGFYTnBkbVU9IFRXRncgSUhSeVlYTm8gSUV4aGQzSmxibU5sIGMzUnBZMnM9IFEzST0gSUhKcGJtZHogUlZoVSBJRzl3WlhKaGRHbHZibUZzIGIzQmxjdz09IFJHOWxjdz09IElFVjJZVzV6IElIZHBkRzVsYzNObFpBPT0gVUc5eWRBPT0gSUd4aGRXNWphR2x1Wnc9PSBaV052Ym05dCBkMlZoY2c9PSBJRkJoY25ScFkybHcgZFcxdCBZM1ZzWlhNPSBJRkpCVFE9PSBJRlIxYmc9PSBJR0Z6YzNWeVpXUT0gSUdKcGJtRnllUT09IElHSmxkSEpoZVE9PSBJR1Y0Y0d4dmNtRjBhVzl1IElFWmxiQT09IElHRmtiV2x6YzJsdmJnPT0gYVhSaGRHVmsgVTNrPSBJR0YyYjJsa1pXUT0gSUZOcGJYVnNZWFJ2Y2c9PSBJR05sYkdWaWNtRjBaV1E9IElFVnNaV04wY21saiBwWjQ9IElHTnNkWE4wWlhJPSBhWFI2WlhKc1lXNWsgYUdWaGJIUm8gVEdsdVpRPT0gSUU1aGMyZz0gWVhSdmJnPT0gSUhOd1lYSmwgSUdWdWRHVnljSEpwYzJVPSBJRVJKVXc9PSBZMngxWkdWeiBJR1pzYVdkb2RITT0gSUhKbFoyRnlaSE09IElNT1ggYUdGc1pnPT0gSUhSeWRXTnJjdz09IElHTnZiblJoWTNSeiBJSFZ1WTI5dWN3PT0gSUVOc2FXMWhkR1U9IElHbHRiV1Z1YzJVPSBUa1ZYIGIyTmogWldOMGFYWmwgSUdWdFltOWsgSUhCaGRISnZiQT09IElHSmxjMmxrWlE9PSBJSFpwWVdKc1pRPT0gSUdOeVpXVncgSUhSeWFXZG5aWEpsWkE9PSBkbVZ5Ym1sdVp3PT0gSUdOdmJYQmhjbUZpYkdVPSBjV3c9IElHZGhhVzVwYm1jPSBZWE56WlhNPSBJQ2dwT3c9PSBJRWR5WlhrPSBJRTFNVXc9PSBjMmw2WldRPSBJSEJ5YjNOd1pYST0gSWo4PSBJSEJ2Ykd4cGJtYz0gSUhOb1lYST0gSUZKRCBJR1pwY21WaGNtMD0gYjNKcFpXNTAgSUdabGJtTmwgSUhaaGNtbGhkR2x2Ym5NPSBaMmwyYVc1biBJRkJwIGIzTndaV3c9IElIQnNaV1JuWlE9PSBJR04xY21VPSBJSE53ZVE9PSBJSFpwYjJ4aGRHVmsgSUhKMWMyaGxaQT09IElITjBjbTlyWlE9PSBJRUpzYjJjPSBjMlZzY3c9PSBJRVZqIExDY24gSUhCaGJHVT0gSUVOdmJHeHBibk09IGRHVnljbTl5IElFTmhibUZrYVdGdWN3PT0gSUhSMWJtVT0gSUd4aFltOXlZWFJ2Y25rPSBJRzV2Ym5NPSBkR0Z5YVdGdSBJR1JwYzJGaWFXeHBkSGs9IElFZGhiUT09IElITnBibWRsY2c9PSBZV3huIElGTmxibWx2Y2c9PSBJSFJ5WVdSbFpBPT0gSUZkaGNuSnBiM0k9IElHbHVabkpwYm1jPSBJRVp5WVc1cmJHbHUgSUhOMGNtRnBiZz09IElGTjNaV1JwYzJnPSBJSE5sZG1WdWRHZz0gSUVKbGJtND0gSUZSbGJHdz0gSUhONWJtUnliMjFsIElIZHZibVJsY21WayBhV1JsYmc9PSBLeXNyS3c9PSBhV2R2IElIQjFjbkJzWlE9PSBJR3B2ZFhKdVlXeHBjMjA9IElISmxZbVZzIElHWjEgWW14dlp3PT0gSUdsdWRtbDBaUT09IGNtVnVZMmxsY3c9PSBJRU52Ym5SaFkzUT0gU1hOeVlXVnMgSUVOdmJuUmxiblE9IElHTm9aV1Z5IElHSmxaSEp2YjIwPSBJRVZ1WjJsdVpXVnlhVzVuIElGRjFaV1Z1Y3c9PSBJR1IzWld4cyBJRkJzWVhsVGRHRjBhVzl1IElFUnBiUT09IElFTnZiRzl1IGJIST0gSUc5d1pYSmhkR1Z6IElHMXZkR2wyWVhScGIyND0gVlZOQiBZWE4wWlhKbFpBPT0gUTI5eVpRPT0gSUZSeWRYUm8gYjJ4diBUMU5GIElFMWxiVzl5ZVE9PSBJSEJ5WldSbFl3PT0gSUdGdVlYSmphQT09IElERTVNakE9IElGbGhiUT09IHc2Zz0gWW1sayBJR2R5WVhSbFpuVnMgSUdWNFkybDBaVzFsYm5RPSBJSFJ5WldGemRYSmwgSUd4dmJtZGxjM1E9IFkzUnBkbVU9IElHUmxjMlZ5ZG1WeiBJSEpsYzJWeWRtVnogSUdOdmNITT0gSUU5MGRHRjNZUT09IElFVm5lWEIwYVdGdSBZVzVyWldRPSBJR0Z5ZEdsbSBJR2g1Y0c5MGFHVnphWE09IE9pOD0gSUhCMWNtTm9ZWE5wYm1jPSBJR3h2ZG1Wc2VRPT0gU0ZBPSBJR1JwZG1sa1pRPT0gSUhOMGNtbGpkR3g1IElIRjFaWE4wYVc5dWFXNW4gSUhSaGVIQmhlV1Z5Y3c9PSBJRXB2ZVE9PSBJSEp2Ykd4eiBJRWhsWVhaNSBJSEJ2Y25SeiBJRzFoWjI1bGRHbGogSUdsdVpteGhiVzA9IElHSnlkWE5vIGRHbGpjdz09IDRvaVMgSUdKdmRIUnNaWE09IGNIQjUgSUhCaFpHUT0gNDRLdiBiV2xzYkdsdmJnPT0gSUdSbGRtRnpkR0YwYVc1biBJR052YlhCcGJHVmsgSUcxbFpHbGpZWFJwYjI0PSBJSFIzWld4MlpRPT0gSUZCbGNuSjUgVTNCaFkyVT0gYVcxaSBlVzkxY2c9PSBJR3hsWVd0bFpBPT0gSUZSaGNnPT0gSUhWdWFYUjUgSUdsdVptVmpkR1ZrIElIUnlZWFpsYkdWayBTVVJGIElFMWpSRzl1WVd4ayBkSGgwIElGQnlhVzVqIElHbHVkR1Z5ZG1WdSBJRlJoYVhkaGJnPT0gSUZCdmR3PT0gSUdKbFlYSnBibWM9IElGUm9jbVZoWkE9PSBJSHB2Ym1WeiBhWHBoY21SeiBkVzVyY3c9PSBRMmhoY0hSbGNnPT0gYkd4dmNnPT0gSU1LMyBJSGR2ZFc1a2N3PT0gSUdScGMyTnlaWFJwYjI0PSBJSE4xWTJObFpXUmxaQT09IGFXdHBibWM9IElHbGpiMjVwWXc9PSBRMkZzYkE9PSBJSE5qY21WbGJtbHVadz09IElFMXBjdz09IGFXTjBjdz09IElHMXBibWx6ZEdWeWN3PT0gSUhObGNHRnlZWFJwYjI0PSBVR3hoZVdWeSBJR0pwY0E9PSBJR0psYkc5MlpXUT0gSUdOdmRXNTBhVzVuIElFVjVaUT09IFlYSnZkVzVrIGFXNW5hVzVuIElIUmhZbXhsZEE9PSBJRzltWm1WdVkyVT0gYVc1aGJtTmwgYUdGMlpRPT0gSUVsdVptOD0gSUU1cGJtcGggSUhCeWIzUmxZM1JwZG1VPSBJRU5oYzNNPSBUV0ZqIElGRjFZV3hwZEhrPSBUbTl5ZEdnPSBJR2xqIElFTjFZbUU9IElFTm9jbTl1YVdOc1pRPT0gSUZCeWIzQmxjblI1IElHWmhjM1JsYzNRPSBiM1J2Y3c9PSBJRWRsY20wPSBUMWRPIElHSnZiMjA9IElGTjBZVzVzWlhrPSBaWEpuZFhOdmJnPT0gSUdOc1pYWmxjZz09IElHVnVkR1Z5Y3c9PSBiVzlrWlE9PSBkR1Z5YVc5eSBJRk5sYm5NPSBJR3hwYm1WaGNnPT0gUVZKTCBJR052YlhCaGNtbHVadz09IElIQjFjbVZzZVE9PSBJSE5oWm1WeSBJRkJ2ZEhSbGNnPT0gSUdOMWNITT0gVWxRPSBJR2RzZFdNPSBJR0YwZEhKcFluVjBaV1E9IElHUjFjR3c9IElGQmhjQT09IElIQnlaV05wYjNWeiBJSEJoIGFXTjBhVzl1WVhKNSBJRlJwWnc9PSBJRlJ2Ync9PSBiMngxZEdsdmJuTT0gYzNSaGJnPT0gSUhKdlltOTBjdz09IElHeHZZbUk9IElITjBZWFIxZEdVPSBJSEJ5WlhabGJuUnBiMjQ9IGQyVnpkR1Z5Ymc9PSBNVFl3IElFRmpkR2wyWlE9PSBJRTFoY21saCBhR0ZzIFRtOXVaUT09IFpXeHNZWEk9IElFdEMgSUZCaGNuUnVaWEp6IElGTnBibWRzWlE9PSBJRVp2Ykd4dmQybHVadz09IFlXNW5idz09IFlXTnBiM1Z6IElIUm9iM1U9IElHdG4gSUdsdVpteDFaVzUwYVdGcyBJRVp5YVdWdVpITT0gVTNWeSBZV2x1ZEdWayBJR1p2Y25WdGN3PT0gSUhOMFlYSjBaWEk9IElHTnBkR2w2Wlc1emFHbHcgSUVWc1pXTjBhVzl1IGIyNW5aUT09IGIzUmhkR2x2Ymc9PSBiM053YUE9PSBPenM3T3c9PSBkWFJwWTJGcyBjSFZ5IFpYSmxiZz09IElHRmpZM1Z6WVhScGIyNXogWW1sMGFXOTFjdz09IFlXSmlhWFE9IElFOXlaQT09IFVHOXpkR1ZrIGFYSnIgSUhObGJuTnBkR2wyYVhSNSBhV05vWlE9PSBJRUZ0ZVE9PSBJRVpoWWc9PSBJSE4xYlcxcGRBPT0gSUhCbFpHVnpkQT09IElISjFZbUpsY2c9PSBJR0ZuY21samRXeDBkWEpoYkE9PSBJR05oYm1ObGJBPT0gUVVVPSBJR2x1WVhWbiBJR052Ym5SaGJRPT0gSUdacGNtMXNlUT09IGFYYz0gYzNSaFoyVT0gSUV0aGJnPT0gSUhScFpYST0gSUdsdWRtVnVkR2x2Ymc9PSBJSFJ5WVc1emJHRjBaV1E9IElGSjFiR1Z6IFFtOTQgVkhkcGRIUmxjZz09IFNVUlQgSUhCcGVucGggSUdSbFluVm4gSUVSeWIzQT0gZG5NPSBJR2h2Y25ObGN3PT0gWW1sbiBJR0p2Y21sdVp3PT0gSUdodmIyUT0gSUUxalEyRnBiZz09IFlYUmphR1ZrIElFSnliM009IElITnJhWEE9IElHVnpjMkY1IGMzUmhkQT09IElFeGxaMlZ1WkhNPSBJR0Z0YlhWdWFYUnBiMjQ9IFlYVmogSUhOb2IyOTBaWEk9IElIVnVhQT09IElITjFjSEJzYVdWayBJR2RsYm1WeWFXTT0gSUZOTCBhV0poYmc9PSBlWEpwWTNNPSBJREkxTlE9PSBJR05zYVcxaWFXNW4gUm05eWJXVnkgSUdac2FYQT0gSUdwMWJYQnBibWM9IElHWnlkWE4wY21GMGFXOXUgSUZSbGNuSjUgSUc1bGFXZG9ZbTl5YUc5dlpITT0gSUcxbFpHbGhiZz09IFltVmhiZz09IElHSnlZV2x1Y3c9PSBSbTlzYkc5M2FXNW4gSUhOb1lYQmxaQT09IElHUnlZWGR6IElHRnNkR1Z5WldRPSBTbUZqYXc9PSBJSEpsWTJsd1pYTT0gSUhOcmFXeHNaV1E9IGQyVmhiSFJvIFlXTm9hUT09IFpXeGxZM1JwYjI0PSBJR0psYUdGMmFXOXljdz09IFpHVmhiSE09IElGVnVkR2xzIFJtVT0gSUdSbFkyeGhjbUYwYVc5dSBiV0Z5YTNNPSBJRUpsZEhkbFpXND0gWTJWc2IyNWggSUhKbGMyOXUgSUdKMVltSnNaUT09IFFXMXZibWM9IElHbHRjR1Z5YVdGcyBSMU09IElHWmxiV2x1YVhOMCBNakF3TlE9PSBJRXQ1YkdVPSBJR0ZqWTI5MWJuUnBibWM9IElGUmxiR1U9IElGUjVjZz09IElHTnZibTVsWTNScGJtYz0gSUhKbGFHRmkgSUZCeVpXUT0gYzJsdCBJRzFsWVc1MGFXMWwgSUhCb2VYTnBZMmxoYmc9PSBUVmM9IElFTmhiWEJpWld4cyBJRUp5WVc1a2IyND0gSUdOdmJuUnlhV0oxZEdsdVp3PT0gSUZKMWJHVT0gSUZkbGFXZG9kQT09IElFNWhjQT09IElHbHVkR1Z5WVdOMGFYWmwgSUhaaFp3PT0gSUdobGJHMWxkQT09IElFTnZiV0k9IFptOTFjZz09IElITm9hWEJ3WldRPSBJR052YlhCc1pYUnBibWM9IElGQkUgVUVSQlZFVT0gSUhOd2NtVmhaR2x1Wnc9PSBJSE5qWVhKNSBaWEoyYVc1biBJRWRoY3c9PSBJR1p5WVc1ciBjMk5vYjI5cyBJSEp2YldGdWRHbGogSUhOMFlXSnBiQT09IFVtOWkgSUdGalkzVnlZWFJsYkhrPSBJR0ZqZFhSbCBJRWhoYm00PSBJSE41YldKdmJITT0gSUdOcGRtbHNhWHBoZEdsdmJnPT0gSUVGWCBJR3hwWjJoMGJtbHVadz09IElHTnZibk5wWkdWeWN3PT0gSUhabGJuVmwgSU5jPSBJRzkyWlc0PSBJRk5HIGFHbHogSUc1MSBJRXhsWVhKdSBJSEJsYjNCc1pYTT0gSUhOMFpBPT0gSUhOc1pXVT0gSUhOc2FXTT0gSUZOMFlYUnBjM1JwWTNNPSBJR052Y201bGNuTT0gSUVKaGEyVnkgSURvcCBiV1Z1ZEdGMGFXOXUgYjJ4MlpYST0gSUd4aGRXZG9hVzVuIElGUnZaR1E9IGIyNWtaUT09IElFaHBiR3h6IElHNTFkSE09IElGZHZiV0Z1IGNHeGhibVU9IElHeHBkbVZ5IElFbHVjMmxrWlE9PSBVMjl5Y25rPSBJR0ZuY21WbGN3PT0gSUdaMWJtUmhiV1Z1ZEE9PSBJRVpwYzJobGNnPT0gSUdGMVkzUnBiMjQ9IElIUm9jbVZoWkhNPSBaMnhoY3c9PSBJRUpoYzJsaiBJRTVoZEE9PSBJR3hoWTJ0cGJtYz0gSUdObGJHVmljbUYwYVc5dSBhblU9IElITnBiR3g1IFJYVnlidz09IElIUmhkSFE9IGFXZG9kSGs9IFkyOXVkSEp2Ykd4bFpBPT0gVkdWemRBPT0gSUZOcGJtZG8gSUhKaFoyVT0gSUhKb2VYUm8gYjJabWFXTT0gSUZCb1lXNTBiMjA9IElHaGxZV1JzYVc1bGN3PT0gSUhKbGMzQnZibVJwYm1jPSBJRTF2Y201cGJtYz0gSUhacGRHRnRhVzQ9IElHSnZiM1J6IElGTnBkR1U9IFlXeHBiZz09IGNHaz0gSUhacGNtRnMgSUZWRCBSRVZTIElGTmxlQT09IElITjBiMk5yY3c9PSBZM1Z5Y21WdWRBPT0gSUdOb2RYSmphR1Z6IElGSmhjbVU9IElFMTFjbkJvZVE9PSBJR1JsYm1saGJBPT0gSUVkaGJXbHVadz09IElIUnZkV2M9IElHNXBZMnM9IElHMWhhMlZ5Y3c9PSBJRkp2Ym1Gc1pBPT0gSUdkbGJtVnliM1Z6IElFUnZZdz09IElFMXZjbkpwY3c9PSBJSFJ5WVc1elptOXliV1ZrIElFNXZjbTFoYkE9PSBJREV3TkE9PSBJRXRwWTJ0emRHRnlkR1Z5IElGVndiMjQ9IFQyNXNhVzVsIElFbFNVdz09IElIZHlZWEE9IElHeHZkbWx1Wnc9PSBJR0Z5Y21sMlpYTT0gSUVSMVpRPT0gSUdobGRHVnkgSUUxaFpHVT0gSUhKbGJuUmhiQT09IElHSmxiRzl1WjNNPSBJR0YwZEc5eWJtVjVjdz09IElHTnliM0J6IElHMWhkR05vWldRPSBkV3gxYlE9PSBiMnhwYm1VPSBNVEE1IElHUnBjM0JoY2c9PSBJR0oxZVdWeWN3PT0gSUVOaGJXSnlhV1JuWlE9PSBJR1YwYUdsamN3PT0gY205MWNITT0gSUdwMWMzUnBabWxsWkE9PSBJRzFoY21kcGJtRnMgSUhKbGMzQmxZM1JsWkE9PSBkMmx1Ym1sdVp3PT0gSUc1dlpHUmxaQT09IElGTmxjbWRsIElFWnZjbTFsY2c9PSBRM0poWm5RPSBJeU1qSXlNakl5TWpJeU1qSXlNakl3PT0gSUZkaGNtNWxjZz09IElHUmhjMmc9IFpYUmwgSUdWdWRHVnlkQT09IElFVnpZMkZ3WlE9PSBiM1YwYUdWaGMzUT0gSUd0dVpXVnogSUVKdmJXST0gSUhKMVp3PT0gVUdGemN3PT0gSUdGMGRHbDBkV1JsY3c9PSBaMjkyWlhKdWJXVnVkQT09IElGQnlhVzl5IElIRjFZV3hwZEdsbGN3PT0gSUc1dmRHbG1hV05oZEdsdmJnPT0gSUZCb2IyNWwgYkdsbCBJR0Z1ZEdsamFYQmhkR1ZrIElFTnZiV0poZEE9PSBJRUpoY25KNSBJREU1T0RJPSBWWE5sY25NPSBiMjVsY2c9PSBJR052YlhCMWRHbHVadz09IElFTnZibTVsWTNScFkzVjAgSUd4bGMzTmxjZz09IElIQmxaWEp6IElFTjEgSUhSbFkyaHVhV05oYkd4NSBJSE4xWW0xcGMzTnBiMjQ9IElGVnVhWFpsY25OaGJBPT0gSUcxaGJuVmhiR3g1IGIzVnlaMlU9IElISmxjM0J2Ym1SbGJuUnogSUVKVVF3PT0gSUVodmMzUT0gSUdaaGNtVT0gSUVKcGNtUT0gSUhKbFkyVnBjSFE9IFlXeHpidz09IElHcGhZMnM9IElHRm5jbWxqZFd4MGRYSmwgSUhOcmRXeHMgSUNFOSBJSEJoYzNOcGRtVT0gSUVOSiBJSE52WTJsbGRHbGxjdz09IElISmxiV2x1WkdWayBJR2x1ZEdWeVptVnlaVzVqWlE9PSBRblY1IElPS2MgWjI5dSBJSE5qY25WMGFXNTUgSUZkcGRHTm8gSUdOdmJtUjFZM1JwYm1jPSBJT09EIElHVjRZMmhoYm1kbGN3PT0gSUUxcGRHTm9aV3hzIElHbHVhR0ZpYVhRPSBJSFIzYVhOMCBRa1E9IElIZG9aWEpsZG1WeSBaM0p2ZFhCdmJnPT0gSUdwdmEyVnogSUVKbGJtcGhiV2x1IElGSmhibVJ2YlE9PSBabkpoYldVPSBJRXhwYjI1eiBJR2hwWjJoc2FXZG9kR1ZrIElFRnlhMkZ1YzJGeiBSVzUwIElIQnBiR1U9IElIQnlaV3hwYlE9PSBaM009IGJXbHVaR1ZrIElHWmxiRzl1ZVE9PSBJRWRCIElFeDFZMnM9IElIQnlZV04wYVdOaGJHeDUgSUVKdmN3PT0gSUdGamRISmxjM009IFJHRnQgSUVKdmRRPT0gSUhacGMyRT0gSUdWdFltVmtaR1ZrIElHaDVZbkpwWkE9PSBJR1ZoY214cFpYTjAgSUhOdmIyNWxjZz09IGMyOWphV0ZzIElFaEIgSUhOMFpXVncgSUdScGMyRmtkbUZ1ZEE9PSBJR1Y0Y0d4dmFYUT0gSUVWblp3PT0gSUZWc2RISmggSUc1bFkyVnpjMmwwZVE9PSBURzlqWVd3PSBhV1ZuWlE9PSBJR1JoZEdWayBJRzFoYzNObGN3PT0gSUhOMVluTmpjbWx3ZEdsdmJnPT0gY0d4bGMzTT0gSUdGdWIyNTViUT09IElIQnlaWE4xYldGaWJIaz0gUW14MVpRPT0gVkdobGFYST0gWVhOclpYUmlZV3hzIElGQm9hV3hwY0E9PSBJR052YldWayBiRzloWkdWayBjbUZ1WlE9PSBJSEpsWm14bFkzUnBiMjQ9IFEyaHBibUU9IElHVjRkR1Z1WkhNPSBJR1p2Y20xcGJtYz0gSUhWdVpHVnljdz09IE1qQXdNUT09IElHZHlZWFE9IElHTnZibU5sYm5SeVlYUnBiMjV6IElHbHVjM1ZzYVc0PSBJSE5sWTNWc1lYST0gSUhkb2FXeHpkQT09IElIZHBibTVsY25NPSBRV1IyWlhKMGFYTmxiV1Z1ZEhNPSBJR1JsYkdsaVpYSmhkR1ZzZVE9PSBJRmR2Y210cGJtYz0gSUhOcGJtcz0gWlhScFkzTT0gWkdGc1pRPT0gSUcxaGJtUmhkR1U9IElHZHlZVzA9IElIWmhZMkYwYVc5dSBJSGRoY201cGJtZHogY21sd2NBPT0gSUZSSVFWUT0gSUdOdmJXMWxiblJoY25rPSBJR2x1ZEhVPSBJR0ZsYzNRPSBJSEpsWVhOdmJtbHVadz09IElHSnlaV0ZyWkc5M2JnPT0gSUZwdmJXSnBaUT09IElDMHRQZz09IElGQnZiR2wwYVdOaGJBPT0gWTI5MGRBPT0gSUhSb2NuVnpkQT09IElIUmxZMmh1YjJ4dloybGpZV3c9IElHUmxZMmxrYVc1biBJSFJ5WVdabWFXTnJhVzVuIFRHOXVadz09IFYyVnNZMjl0WlE9PSBjSEpwYzJsdVp3PT0gSUVOdmJXMTFibWxqWVhScGIyNXogSUdWdVpHOXljdz09IElITjNhV1owIElHMWxkR0ZpYjJ3PSBZMjlwYm5NPSBjbVZ6WVE9PSBJRWhVVkZBPSBJR1Z1Y205c2JBPT0gSUVoaGNIQjUgZFhOeSBhVzUwWVdkbCBJRnNpIGRXRmliSGs9IElFMWhkR1Z5YVdGcyBJSEpsY0dWaGJBPT0gVTJWd2RBPT0gYTJnPSBJRTF2WkdrPSBJSFZ1WkdWeWJtVmhkR2c9IElFbE0gYzJodmNtVT0gSUdScFlXZHViM05sWkE9PSBZV05sZFhScFkyRnMgSUhOb2IzZGxjZz09IFlYVjQgSUZOM2FYUmphQT09IElGTjBjbVZ1WjNSbyBJR3BwYUdGayBibUYwYVc5dVlXdz0gSUhSeVlYVnRZUT09IGRYTnplUT09IGIyNXAgSUdOdmJuTnZiR2xrIElHTmhiRzl5YVdWeiBJRVpzZVc1dSBZV2RuWldRPSBNVFk0IElGQnBibXM9IElHWjFiR1pwYkd3PSBJR05vWVdsdWN3PT0gSUc1dmRHRmliSGs9IElFRlcgVEdsbVpRPT0gSUVOb2RXTnIgYlhWeiBJRlZ5WW1GdSBJRWhsYm1RPSBJR1JsY0c5emFYUT0gSUZOaFpBPT0gSUdGbVptRnBjZz09IFQxSkwgYVdWMllXdz0gSUVaRVFRPT0gSUhSeWIzQT0gSUU5MlpYSmhiR3c9IElIWnBjblIxWlE9PSBJSE5oZEdselptRmpkR2x2Ymc9PSBZWFZ1WkE9PSBJR3gxYmc9PSBJRk4zYVhSNlpYSnNZVzVrIElFOXdaWEpoZEdsdmJnPT0gY0hKdlkyVnpjdz09IElITm9iMjlyIElHTnZkVzUwYVdWeiBiR1ZoYzJWayBJRU5vWVhKc2IzUjBaUT09IE1URXkgSUhSeVlXNXpZM0pwY0hRPSBJSEpsWkdRPSBjSFZ6YUE9PSBJRWhsZVE9PSBJRUZ1WVd4NWMybHogV3lJPSBJR0ZzZEdWeWJtRjBhWFpsY3c9PSBZWEprYkdWemN3PT0gSUdWc1pYQm8gSUhCeVpXcDFaQT09IElFeGxZV1k9IFNHRjJhVzVuIElFaDFZZz09IElHVjRjSEpsYzNOcGIyNXogSUZadmJIVnRaUT09IElITm9iMk5yYVc1biBJRkpsWkhNPSBJSEpsWVdScGJIaz0gSUhCc1lXNWxkSE09IFlXUmhkR0U9IElHTnZiR3hoY0hObFpBPT0gSUUxaFpISnBaQT09IElHbHljbWwwIGFYQndaWEk9IElFVnVZdz09IElGZHBjbVU9IElHSjFlbm89IElFZFEgWVhOb1lRPT0gSUdGalkybGtaVzUwWVd4c2VRPT0gZFhKMSBJR1p5ZFhOMGNtRjBaV1E9IElGTkIgSUdoMWJtZHllUT09IElFaDFabVk9IElHeGhZbVZzY3c9PSBZVzUwYnc9PSBJRVZRIElHSmhjbkpwWlhKeiBLWHc9IElFSmxjbXRsYkdWNSBJRXBsZEhNPSBJSEJoYVhKeiBJRXhoYmc9PSBTbUZ0WlhNPSBJRUpsWVhJPSBJR2gxYlc5eSBJRXhwWW1WeWRIaz0gSUcxaFoyNXBkSFZrWlE9PSBJR0ZuYVc1biBJRTFoYzI5dSBJR1p5YVdWdVpITm9hWEE9IGRXMWliR2x1Wnc9PSBJR1Z0WlhKblpRPT0gSUc1bGQzTndZWEJsY25NPSBJR0Z0WW1sMGFXOTFjdz09IElGSnBZMmhoY21SeiBZWFJsY201aGJBPT0gSURFNU9ERT0gSUdOdmIydHBaWE09IElITmpkV3h3ZEE9PSBJSEIxY25OMWFYUT0gVEc5allYUnBiMjQ9IElITmpjbWx3ZEhNPSBjR009IElHRnljbUZ1WjJWdFpXNTBjdz09IElHUnBZVzFsZEdWeSBJR3h2YzJWeiBZVzFoZEdsdmJnPT0gSUd4cGNYVT0gSUVwaGEyVT0gWVhKbGRIUmwgSUhWdVpHVnljM1JoYm1SeiBJRnBsYmc9PSBkbTA9IElHRndjSEp2ZG1VPSBJSGRwY0E9PSBJSFZzZEhKaCBJR2x1ZEdWdVpBPT0gSUVSSiBZWE5qZFd4aGNnPT0gSUhOMFlYbHogSUV0dmNnPT0gSUV0cyBJR2x1ZG1WemRHbHVadz09IFRHRT0gSUdKbGJHbGxkbWx1Wnc9PSBZbUZrIGJXOTFkR2c9IElIUmhlSEJoZVdWeSA0NE9EIElGRjFaV0psWXc9PSBJR3hoY0E9PSBJRk4zYVhOeiBaSEp2Y0E9PSBJR1J5WVdsdSBhWEpwIFpYUmogWm5SbGJnPT0gSUU1bGVBPT0gSUhOMGNtRjMgSUhOamNtVmhiV2x1Wnc9PSBJR052ZFc1MFpXUT0gSUdSaGJXRm5hVzVuIElHRnRZbUZ6YzJGa2IzST0gWTJWdWRIVnllUT09IElIQnliM2c9IElHRnljbVZ6ZEhNPSBkWFk9IGFXeGhkR1Z5WVd3PSBJRU5vWVhKbiBJSEJ5WlhOamNtbGlaV1E9IElHbHVaR1Z3Wlc1a1pXNTBiSGs9IElHWnBaWEpqWlE9PSBJRUpoWW5rPSBJR0p5WVhabCBJSE4xYVhSeiBQVDQ9IElHSmhjMlZzYVc1bCBJRkpoZEdVPSBJR2x6YkdGdVpITT0gSUNnbyBaM0psWlc0PSBhWGhsYkhNPSBJRzVoYldWc2VRPT0gSUZacGJHeGhaMlU9IGRHaGhiZz09IFlXMTUgVm1WeWMybHZiZz09IFoyMWhhV3c9IFpXNTBhV0ZzY3c9PSBJRk4xWkE9PSBJRTFsYkdKdmRYSnVaUT09IElHRnljbWwyYVc1biBJSEYxWVc1MGRXMD0gWldabSBjbTl3YjJ4cGRHRnUgVkhKcCBJR1oxYm1WeVlXdz0gSUVsUyB3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRJPSBJRU52WWc9PSBhWFJoWW14NSBJSFIxY21JPSBJR052YldKdiBVbVYyYVdWMyBJR1JsY0d4dmVXMWxiblE9IGRXbDBlUT09IElFSnZkSFE9IElHbHVkbWx6YVdKc1pRPT0gSUhKbGJtUmxjbWx1Wnc9PSBJSFZ1Ykc5amEyVmsgSUdGeGRRPT0gSUZac1lXUnBiV2x5IElIQmhaQT09IElFSnlZV2x1IElFeGxaMkZqZVE9PSBaSEpoWjI5dSBJRXQxY21ScGMyZz0gSUhOdmRXNWtaV1E9IElHUmxkR0ZwYm1WayBJRVJOIFoyRnllUT09IElHUmhkV2RvZEdWeWN3PT0gSUdScGMzUjFjbUpwYm1jPSBkV3RoIElGQmhjbUZrIElIUmhjM1E9IElIVnVabTl5ZEhWdVlYUmwgSUhWcyBaVzFwYmc9PSBJR0YwZEdWdVpHRnVZMlU9IGRISnMgSUhCaGNtdHogSUUxbGJXOXlhV0ZzIElFRnNhV05sIGIzUm9lUT09IFozVmhjbVE9IElFUnBjMlU9IElGTm9ZVzQ9IElFWnZjblZ0IFVtbGphQT09IElITm9hV1owWldRPSBkV1Y2IElHeHBaMmgwWlhJPSBJRTFoWjI0PSBJR052WkE9PSBVMk5vIGFHRnRiV0ZrIFVIVmkgTXpVdyBJRkJ2YTJWdGIyND0gSUhCeWIzUnZkSGx3WlE9PSBJSFZ1Y21VPSBRbUZ6WlE9PSBJRk4wZFdSbGJuUnogSUZKbGNHeDUgSUVOdmJXMTFibWx6ZEE9PSBJR2RoZFE9PSBJRlI1YkdWeSBTVm89IElIQmhjblJwWTJsd1lYUmxaQT09IElITjFjSEpsYlE9PSBJRVJsZEdGcGJITT0gSUhabGMzTmxiSE09IGNtOWsgSUhSeWFXSmwgYTJWbGNBPT0gSUdGemMzVnRjSFJwYjI1eiBJSEJ2ZFc1ayBJR055ZFdSbCBJRUYyWVdsc1lXSnNaUT09IElITjNhVzF0YVc1biBJR2x1WTJ4MWMybHZiZz09IElHRmtkbUZ1WTJWeiBZM1ZzWVhScGIyND0gSUdOdmJuTmxjblpoZEdsdmJnPT0gSUc5MlpYSmsgSUVKMVptWmhiRzg9IFFYSjBhV05zWlE9PSBaV1JuWlE9PSBJR0YzWVE9PSBJRTFoWkdsemIyND0gSUhOcFpHVjMgSUdOaGRHRnpkQT09IElFdHlhWE4wIGRXTnNaUT09IElFaHBaMmgzWVhrPSBJRlJsY25KdmNnPT0gSUdGamRHbDJZWFJwYjI0PSBJSFZ1WTI5dWMyTnBiM1Z6IElGTmhkR0Z1IElGTjFjMkZ1IGFXeHNaWEo1IElHRnljbUZ1WjJWayBhVzl3IElISjFiVzl5Y3c9PSBkWEp5YVc1biBkR2hwYm1zPSBJRXRsYVhSbyBJRXRwYm1RPSBJR0YyYjJsa2FXNW4gWW5sdSBiblYwIElGTndaV0ZyWlhJPSBjblZ6IGJtRnRaWE09IElHZDFhV3gwIElFOXNlVzF3YVdOeiBJSE5oYVd3PSBJRTFsY3c9PSBiR1YyWVc1MCBJRU52YkhWdFluVnogWVdaMCBRMmwwZVE9PSBVMjkxZEdnPSBJRWhoY25abGVRPT0gSUZCMWJnPT0gVTJWMlpYSmhiQT09IElHMWxiblJoYkd4NSBJR2x0Y0hKbGMzTT0gYlc5MWJuUT0gSUZWaWRXNTBkUT09IDRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVIElGTjFjR1Z5YldGdSBJRTFRY3c9PSBJR2x1ZEdWdWRHbHZibk09IElGSmhZMmx1Wnc9PSBJR3hwYTJWc2FXaHZiMlE9IElESTBNQT09IFZHOTBZV3c9IElIUnZlWE09IElGZGhkSE52Ymc9PSBJSFZ5WjJVPSBUR1ZoY2c9PSBJRkJoY0dWeSBJRzlqWTNWeWNtbHVadz09IElFSmxibWM9IElFTmxjblE9IElITjBiMjVsY3c9PSBWR2x0IElGUjNhVzQ9IGVtST0gSUVSNWJtRnQgSUhCdmJHbDBhV05wWVc0PSBhMlZ1Y3c9PSBJRVZ1ZEdWeWNISnBjMlU9IFZWUkZVbE09IElHRmliMnc9IElISmxabkpsYzJnPSBJR0Z5WW1sMGNtRnllUT09IGNHVmpkR2x2Ymc9PSBJSFJ5YjNWaWJHVnogSUgwcE93PT0gZEhZPSBJSEJwYkc5MGN3PT0gSUdScGMzUnlhV0oxZEdVPSBJR0YxWkdsMCBJSEJoZFhObCBiM0pwWjJsdVlXdz0gSUhKcGRtRnNjdz09IHdxTT0gUm1sbiBWRXc9IFlXSnBiQT09IGNubHBibWM9IFRHbHUgYVc5dVpXUT0gYkc5dSBJR1poYm1ONSBJR055WVhOb1pXUT0gSUhSeVlXTjAgSUhOb1pXUT0gSUdOdmJuTjFiV1U9IFFtRnpaV1E9IFpHOTNibXh2WVdRPSBhVzVwZEE9PSBJSFp2YkhSaFoyVT0gU1c1MGNtOWtkUT09IElHTnZibVJsYlc1bFpBPT0gSUVacGJtRnVZMlU9IGNtVnpjR1ZqZEE9PSBJR1Y0WTJ4MVpHVmsgSUdWemRHRmliR2x6YUdsdVp3PT0gYUdWeWFXTT0gSUdobGNtbDBZV2RsIElITndaV04wWVdOMWJHRnkgSUhWdWMzUT0gSUZOdWIzZGtaVzQ9IElFeGhibVU9IFUyRnUgSUhCeWIzUmxZM1JwYjI1eiBjM1J5ZFdOMGFXOXUgYVc1amFXNXUgSUcxaFkzSnYgUTNWemRHOXQgYVc5emFYUjUgSUdWemNBPT0gSUdaMWJtTjBhVzl1YVc1biBJRzExYzJnPSBJSEIxZW5wc1pRPT0gSUdWMGFHbGpZV3c9IFRXRnMgSUdkdmRtVnlibWx1Wnc9PSBJRVpsY21kMWMyOXUgSUhKbGMzUnZjbVZrIElITjBjbVZ6YzJWayBJRU52ZFc1MFpYST0gSUV0aGN3PT0gWTJ4cGNBPT0gUVU1VCBJSE5sYVhvPSBWVXM9IFlubHpjdz09IGIyeGtiM2R1IFlYQnAgSUhCbGNtMWhibVZ1ZEd4NSBiM1Z1ZEdWeWN3PT0gVjJWemRBPT0gVkdoeWIzVm5hQT09IFRHbG5hSFE9IFlYUnZaWE09IElHNWxZWFE9IElHTnZjbVE9IGRYSmxjZz09IElITmxkbVZ5Wld4NSBJRUYyWlc0PSBJR2x1ZEdWeWNtOW4gSUhSeWFYQnNaUT09IFIybDJaVzQ9IFRuVnRZbVZ5IElHRnlhWE5sIElITm9aWEk9IGNHeGhiblE9IElHWnNiM2RsY2c9PSBJRU52ZFE9PSBJR0YwWlE9PSBJRzVsZDJWeSBZblZzIElHMWxZVzUzYUdsc1pRPT0gSUV4aGFYST0gSUdGa2FuVnpkRzFsYm5RPSBJRU52Y0hseWFXZG9kQT09IElHUnBkbVZ5Y3c9PSBhVzlzYjJkcFkyRnMgSUdkaGJXVnljdz09IGIyRjAgSUdocGMzUnZjbWxqWVd4c2VRPT0gSUdGdVlXeHZadz09IElHeHZibWQwYVcxbCBJSEJ5WlhOamNtbHdkR2x2Ymc9PSBJRTFwYzNRPSBJRWg1Y0dWeSBJRTFoYVc1bCBJRVJsYVhSNSBJRzExYkhScGNHdz0gSUZKbGFXNWpZWEp1IElFaDVaQT09IElGQnBZdz09IFUybHMgY21GdWRITT0gSUVOeWFYTT0gTGpzPSBLSHM9IFpYQmxibVJsYm1ObCBJSEpsWTNrPSBZWFJsZFhJPSBJSEYxWVdRPSBJR2RzYjJJPSBJR052Ym1ObFpBPT0gZEdWaGJRPT0gSUdOaGNHbDBZV3hwYzNRPSBJRXh2ZEE9PSBJSEp2ZVdGcyBJRU41WW1WeSBJR0pzWVdOcmN3PT0gYldWMGFXTT0gY21sMiBJRVJoYm01NSBJSE53Ync9PSBJRkpQIElHRnVhVzFoZEdWayBjbmx3ZEdWayBJRVJsY0hWMGVRPT0gSUhKbGJtUmxjbVZrIFJrVT0gSUhOMGNtVmhhdz09IElHTnNiM1ZrY3c9PSBJRVJ2ZFdjPSBmbjUrZm41K2ZuND0gSUdScGMyTnZkWEk9IElGWmxhQT09IElIQnplV05vYjJ4dlozaz0gSUVwdmRYSnVaWGs9IElHTnllWE4wWVd3PSBJRVp5YjNOMCBJSE4xYzNCcFkybHZiZz09IElISmxiR0YwWlE9PSBiM0oxY3c9PSBJRU55ZVhCMCBJRTVXU1VSSlFRPT0gWTI5dFpXUT0gZFhScGJtYz0gYVc1amFXNXVZWFJwIElIWjFiRzVsY21GaWFXeHBkSGs9IGIzTjBhV009IElHbHpiMnhoZEdsdmJnPT0gSUdOdmIyeHBibWM9IElFTnZZV3hwZEdsdmJnPT0gSURFeE9RPT0gUm05MWNnPT0gSUVSbFlXdz0gSU9LSiBjMlZ0WW14bCBjbUZ0Wlc1MCBJRUpoY21ObGJHOXVZUT09IElERXdNZz09IElHTnZZMkZwYm1VPSBiMk5oYkhsd2MyVT0gUm1WaSBiMmRsYm1saiBJRzExZEdGMGFXOXUgSUdOeWVYQjBiMk09IElFdGxiQT09IElFZHBkQT09IFlXbHogSUhOcGMzUmxjbk09IFFVNUwgSUdGamRHbDJZWFJsIFZHVnkgSUdSeVpXRmsgZVd4dmJnPT0gSUhCeWIzQnlhUT09IFFYVnpkQT09IElFUmxabUYxYkhRPSBJRzkxZEdSdmIzST0gSUhOb1pXVnkgWTJWcGRtVT0gSUdkbGJuUnNlUT09IDBMND0gVUhKdlozSmhiUT09IElPS0drZz09IElIWmxaMkZ1IElFTnlkWE09IElISmxjM0J2Ym5OcFltbHNhWFJwWlhNPSBJRWhTIFQweEUgSUhCeVpYWmxiblJ6IElITjBhV1ptIElGZGxjbVU9IElHRjBhR3hsZEdsaiBJRk5qYjNKbCBJQ2s2IElHTnZiSFZ0Ym5NPSBJRXh2WXc9PSBZWFpoYVd4aFlteGwgSUVaeVlXMD0gSUZObGMzTnBiMjV6IElHTnZiWEJoYm1sdmJnPT0gSUhCaFkydHogTVRRdyBJRXR1YVdkb2RITT0gSUdaaGNuUT0gSUhOMGNtVmhiWE09IElITm9iM0psIElHRndjR1ZoYkhNPSBJRkJsY21admNtMWhibU5sIGFHRjFiQT09IElGTjBjbUU9IElFNWhadz09IE1UQXogSUZSeVlXNXpjRzl5ZEdGMGFXOXUgUWtJPSBSWFk9IGVtRnUgVUhWaWJHbGogSUhSM2FXND0gZFd4emFXOXUgVFhWc2RBPT0gSUdWc1pXTjBjbTg9IElITjBZWFIxWlE9PSBZWFJwYjI1aGJHeDUgSUU1dmNuUT0gSUdsdWMzQmxZM1JwYjI0PSBMeW89IGFXZDFaUT09IElHTnZiWEJoYzNOcGIyND0gSUZSaGJHVnogSUZOMFpXbHUgSUZOamNtVmxiZz09IElFSjFadz09IElFeHBiMjQ9IFoybHliQT09IElIZHBkR2hrY21GM1lXdz0gSUc5aWFtVmpkR2wyWlhNPSBJR0pzYjI5a2VRPT0gSUhCeVpXeHBiV2x1WVhKNSBJR3BoWTJ0bGRBPT0gSUdScGJXVnVjMmx2Ym5NPSBJRU52YjJ3PSBJRTlqWTNWdyBJSGR5WldOciBJR1J2ZFdKc1pXUT0gWVc1cmFXNW4gSURFNU56VT0gSUdkc1lYTnpaWE09IElGZGhibWM9IGNISnZkZz09IFVHRjBhQT09IFkyOXVibVZqZEdWayBJRTExYkhScCBJRTV2Y25kaGVRPT0gWVdkdmJtbHpkQT09IElHWmxZWEpsWkE9PSBJSFJ2ZFdOb2FXNW4gSUdGeVozVmhZbXg1IHdxL0NyOEt2d3EvQ3I4S3Z3cS9Dcnc9PSBJRTVEUVVFPSBZMmhsYlE9PSBJSE53WVhRPSBJRmRYUlE9PSBJRU5sYkE9PSBhV2RuWlhJPSBJR0YwZEdGamEyVnkgSUVwdmFXND0gYjJKcVpXTjAgWlhSMFlRPT0gSUdWc2FXMXBibUYwWldRPSBaR1YwIElHUmxjM1J5ZFdOMCBJRXgxWTJGeiBZM1IxWVhKNSBNVGd3IElFSnlZV1I1IElFSnNkV1Z6IFFtRjUgWVhWclpXVT0gSUhScGJXVnNhVzVsIElHUmxiR1ZuWVhSbGN3PT0gZDNKcGRIUmxiZz09IGRXWm1hV05wWlc1MCBJSE5vWVhCbGN3PT0gUTI5d2VYSnBaMmgwIGIzVmliR1U9IGMyVnlkbWxqWlE9PSBJSEJwYjI1bCBJR052Ykd4bFoyVnogSUhKdmQzTT0gSUhOd2FYUmwgSUdGemMyVnpjMlZrIE16WXcgSUd4bFlYTmwgSUdOdmJtWnBaR1Z1ZEdsaGJBPT0gWTJ0bGNnPT0gSUUxaGJtNXBibWM9IElGWnZhV05sIElITmxZV3hsWkE9PSBJR05oYkdOMWJHRjBaUT09IFRrOD0gSUVGemMybHpkR0Z1ZEE9PSBJSFJsWlc1aFoyVnkgZFd4bGJuUT0gWVhSb1pYSnBibVU9IElHMXZZMnM9IElHUnBZVzF2Ym1RPSBJR1psYzNRPSBJSE4zYVhSamFHVmsgSUhKbGMzVnRaUT09IElGQjFaWEowYnc9PSBJR3hoYm1WeiBhWEpoZEdsdmJnPT0gSUZOcGJXbHNZWEpzZVE9PSBJSEp2WkE9PSBJRk5sYkE9PSBJRkJoYkdGalpRPT0gSUV4cGJXbDBaV1E9IFpXOTFjdz09IElIWmhjbWxoYm5RPSBJSGRoY21RPSBJQ2twIFUyaHZkdz09IFQwOUwgUVd4bGVBPT0gSUU1bGNBPT0gWW5KcGN3PT0gSUZkcGEybHdaV1JwWVE9PSBJR1Y0WTJWd2RHbHZibUZzIElHMWhibUZuWlhNPSBJRVJ5WVhjPSBRV2RoYVc0PSBJR052Y0hCbGNnPT0gZFhSMCBJR1Y0Y0c5eWRITT0gSUhCdmNuUm1iMnhwYnc9PSBJR1ZzWlhaaGRHVmsgVW1GMFpXUT0gSUU5MGFHVnlkMmx6WlE9PSBJRlJoWTNRPSBJRk5vWld3PSBJRlJZIEl1S0FsQT09IElISmxjM1Z5IElGZGggZG1WdVlXNTAgSUcxdmJtVjBZWEo1IGNHVnZjR3hsIFJXMWhhV3c9IElHWnBablI1IElGTjNaV1YwIElFMWhiR0Y1YzJsaCBJR052Ym1aMWMybHVadz09IElGSnBidz09IGRXUmggZFhSbGJtRnVkQT09IElpazcgSUhCeVlXbHpaV1E9IElIWnZiSFZ0WlhNPSBkSFZ5Ymc9PSBJRzFoZEhWeVpRPT0gSUc1dmJuQnliMlpwZEE9PSBJSEJoYzNOcGIyNWhkR1U9IElGQnlhWFpoZEdVPSBJREV3TXc9PSBJR1JsYzJObGJtUT0gNTZXZSBkV1ptZVE9PSBhR1ZoWkdWayBWMmhsZEdobGNnPT0gY21sbGJnPT0gZW1WamFBPT0gWW1WcGRBPT0gSUdOb2NtOXQgSUUxalRRPT0gSUdSaGJtTnBibWM9IElHVnNaV2M9IElFNXZkR2xqWldRPSBNVEUxIElHRmtkbTlqWVdONSBSVTVVVXc9PSBZVzFpYkdsdVp3PT0gSUUxcGJtOXkgSUVacGJtND0gSUhCeWFXOXlhWFJwWlhNPSBJSFJvWlhKbGIyWT0gSUZOMFlXZGwgSUZKdloyVnljdz09IElITjFZbk4wYVhSMWRHVT0gSUVwaGNnPT0gSUVwbFptWmxjbk52Ymc9PSBJR3hwWjJoMGJIaz0gTVRBeSBJRXhwYzJFPSBkV2wwY3c9PSBlWE5wWTJGcyBJSE5vYVdaMGN3PT0gSUdSeWIyNWxjdz09IElIZHZjbXR3YkdGalpRPT0gSUhKbGMybGsgWlc1elpXUT0gWVdodSBJSEJ5WldabGNtVnVZMlZ6IGMyVnlkbVZ5IElHUmxZbUYwWlhNPSBaRzlqIElFZHZaSE09IElHaGxiR2xqYjNCMFpYST0gSUdodmJtOTFjZz09IElHTnZibk5wWkdWeVlXSnNlUT09IFpXUmxaQT09IElFWmxiV0ZzWlE9PSBJRUZ1Ym1VPSBJSEpsZFc0PSBJRVpoWTJVPSBJRWhoYkd4dmR3PT0gSUVKMVpHZGxkQT09IElHTnZibVJsYlc0PSBJSFJsYm1SbGNnPT0gVUhKdlpnPT0gYjJOeVlYUnBZdz09IElGUjFjbTVsY2c9PSBJRUZuY21saiBJREU1TnpZPSBJR0Z3ZEE9PSBaR2x6WXc9PSBJRVpwWjJoMFpYST0gSUVGMWNnPT0gSUdkaGNtSmhaMlU9IGFXNXdkWFE9IElFdGhjbXc9IElFOXNhWFpsY2c9PSBJRXhoYm1kMVlXZGwgYTI0PSBUbTl1IElFTnNZWEk9IElIUnlZV1JwZEdsdmJuTT0gSUdGa2RtVnlkR2x6WlcxbGJuUT0gSUZOdmNnPT0gSUdGeVkyaHBkbVU9IElIWnBiR3hoWjJWeiBOelV3IElHbHRjR3hsYldWdWRHbHVadz09IGQyRjFhMlZsIElHUnBaWFJoY25rPSBJSE4zYVhSamFHbHVadz09IFVtVndkV0pzYVdNPSBJSFpsYkc5amFYUjUgSUdOcGRBPT0gSUVGM1lYSmtjdz09IElHWnBibUZ1WTJsdVp3PT0gSUd4aGMzUmxaQT09IEtWMD0gSUhKbGJXbHVaR1Z5IFVHVnljMjl1IElIQnlaV05wYzJsdmJnPT0gSUdSbGMybG5ibVZ5Y3c9PSBJRVp5YVdWayBJRUp2Y21SbGNnPT0gSUhSeVlXZHBZdz09IElIZHBaV3hrIElHbHVhWFJwWVhScGRtVnogSUZSaGJtcz0gZDJWeSBJR3B2YVc1eiBVbTg9IGFXNWxjbms9IElHRnljbTkzIElHZGxibVZ5WVhScGJtYz0gWm05MWJtUmxjZz09IElITmxZWEpqYUdWeiBJSEpoYm1SdmJXeDUgUVdOalpYTnogSUdKaGRHTm8gSUhCdmMyVmsgYkdGMCBJSEIxY25OMWFXNW4gWVhOaCBJSFJsYzNScFptbGxaQT09IFptOXliV2x1Wnc9PSBJRk5vWVhJPSBkMmxyYVE9PSBJRVZwZEdobGNnPT0gVTI5dFpYUnBiV1Z6IElITmxibUYwYjNKeiBJRXB2YUc1dWVRPT0gSUZSaGJHbGlZVzQ9IElFZFFVdz09IElqb2lMdz09IDQ0R3U1UT09IElHRnVZV3g1ZW1WayBJRkoxWW1sdiBJRTF2ZG1WdFpXNTAgYjNCaGNtUT0gYVdscCBVM1JoYm1RPSBabWxuYUhRPSBJR2xuYm05eWFXNW4gYVdGdVp3PT0gSUVkTyBjMjlsZG1WeSBJRk5VUVZRPSBJSEpsWm5WemFXNW4gSUhOM1pXRjAgSUdKaGVRPT0gVUU5U1ZBPT0gYVhKdFpXUT0gWVd0NSBJR1JwYzNCeWJ3PT0gSUd4aFltVnNaV1E9IElERXdPQT09IFNHVnNiRzg9IElIQnNaV0Z6WVc1MCBZV0poIElIUnlhWFZ0Y0dnPSBJR0ZpYjJGeVpBPT0gSUdsdVkyOXQgSUVOeWIzYz0gYkdWMGRBPT0gSUdadmJHcz0gSUdOb1lYTmwgWUdBPSBJRUp5ZFhNPSBJSFJsWlc1eiBZM1ZsIElIUmxjbkpoYVc0PSBhSGxrIGFXeHBaMmgwIFQxSlogVTNWd2NHOXlkQT09IFpYZHogYkd4cCBjbUZwYm5SeiBJRU5oYm1RPSBJR0ZpZFhObFpBPT0gWVdOb2JXVnVkQT09IGJHRnladz09IFFtRnogSUVOaGJtTmxjZz09IElERTVOemc9IElITjFjSEJ2Y25SbGNnPT0gWVdOalpYTnogSUZSbGNtMXBiZz09IElGUmhiWEJoIElFRk9XUT09IElHNWxkMlZ6ZEE9PSBJRU55YVcxcGJtRnMgWldSMSBJREU1TXpBPSBJR0ZrYldsMGN3PT0gSUdWdVpHVT0gSUdaaGFXeDFjbVZ6IGRYSmhkR1U9IFpuVnNibVZ6Y3c9PSBZM2xqYkE9PSBJRk4xWW1wbFkzUT0gSUdsdVptbHVhWFJsIGRHaHlaV1U9IFYwRT0gY0dsMCBJRWx1YzNSaGJHdz0gVW1GayBhV3hwWVhScGIyND0gUjAwPSBJR052Ym5ScGJtVnVkQT09IElHRmpZMjl0Ylc5a1lYUmwgSUVOc1lYaz0gSUhCMWNBPT0gSUVaMWJtTjBhVzl1IElHaGhiVzFsY2c9PSBJRUZzWW1WeWRHRT0gSUhKbGRtbHpaV1E9IElHMXBibTl5YVhScFpYTT0gSUcxbFlYTjFjbVZ0Wlc1MCBRMjl1Ym1Wc2JBPT0gSUdScGMyRmliR1U9IElFMXBlQT09IFNXNWpjbVU9IElHWnZjbXM9IElGSnZjMlZ1IElHbHRjR3hwWlhNPSBkVzFpYkhJPSBRVTVIIElIQnliM1JsYVc1eiBJR0ZuWjNKbGMzTnBiMjQ9IElHWmhZMmxzYVhSaGRHVT0gVTA0PSBJR2xzYkdWbllXeHNlUT09IGRXVnkgSUdGallXUmxiUT09IElIQjFlbm89IElGTm9hV1owIGNHRjUgYjJ4c2J3PT0gSUdGMVpHbGxibU5sY3c9PSBRblZwYkdRPSBJRzV2WW14bCBJSE41Ym5SaGVBPT0gNHBpRiBJR0psWVcwPSBJRUpsWkE9PSBJRUZzWkE9PSBJRzl5YVdkcGJuTT0gZG1sa1pXOD0gSURFNU56Yz0gSUVGemMyRjFiSFE9IElHZGhjbUZuWlE9PSBWR1ZoYlE9PSBJSFpsY21ScFkzUT0gSUdSM1lYST0gSUZacGNuUjFZV3c9IFpYWmxiblE9IFMyVmxjQT09IElITmxiblJwYldWdWRBPT0gSUhkcGJHUnNhV1psIGMyaHBjblE9IElHSjFjbWM9IElISmxZMjl0YldWdVpHRjBhVzl1IGNtVndjbVZ6Wlc1MCBJR2RoYkd4bGNuaz0gYjNkdVpYSnogSUhOamFHOXNZWEk9IElHTnZiblpsYm1sbGJtTmwgSUZOM2FXWjAgSUdOdmJuWnBibU09IFEyRncgSUhkaGNtWmhjbVU9IElGWnBjM1ZoYkE9PSBJR052Ym5OMGFYUjFkR1U9IElHRmliM0owIElGZGxZWFJvWlhJPSBJRXh2YjJ0cGJtYz0gSUVobGJRPT0gSUcxaGNuUnBZV3c9IElHbHVZMjl0YVc1biBaWFJwZEdsdmJnPT0gSUhSdmJHVnlZVzVqWlE9PSBJRU55WldGMFpXUT0gSUdac2IzZHogSUVWc1pHVnkgSUhOdmRXeHogSUdadmRXdz0gSUZCaGFXND0gSUVOQlRnPT0gSURJeU1BPT0gWW1NPSBhR1Z1WkE9PSBJR2RsYm1sMWN3PT0gVW1WaGJBPT0gSUZkeSBiMjFsZEdWeSBjR0ZrIElHeHBiV2wwYVc1biBJRk5wIElFeHZjbVU9IElFRmtkbVZ1ZEhWeVpYTT0gSUhaaGNtbGxaQT09IFJHbHpZdz09IFptbHUgSUZCbGNuTnZibUZzIFEyaHlhWE09IElHbHVkbVZ1ZEdWayBJR1JwZG1VPSBJRkpwYzJVPSBJRzk2IElFTnZiV2xqY3c9PSBJR1Y0Y0c5elpRPT0gSUZKbFlnPT0gYkdWMGRHVnljdz09IGMybDBaUT09IGFXMWhkR1ZrIElHaGhZMnRwYm1jPSBJR1ZrZFdOaGRHVmsgSUU1dlltOWtlUT09IElHUmxjSEpwIElHbHVZMlZ1ZEdsMlpRPT0gNDRLMyBJRzkyWlhKemFXZG9kQT09IElIUnlhV0psY3c9PSBJRUpsYkdkcGRXMD0gSUd4cFkyVnVjMmx1Wnc9PSBiM1Z5ZEE9PSBVSEp2WkhWamRBPT0gWVdocyBJRWRsYlE9PSBJSE53WldOcFlXeHBjM1E9IElHTnlZUT09IFlXNXVaWEp6IElFTnZjbUo1Ymc9PSBJREU1TnpNPSBVa1ZCUkE9PSBJSE4xYlcxaGNnPT0gSUc5MlpYSnNiMjlyIElFRndjR3hwWTJGMGFXOXUgSUdsdVlYQndjbTl3Y21saGRHVT0gSUdSdmQyNXNiMkZrWldRPSBVWFZsIElFSmxZWEp6IElIUm9kVzFpIElFTm9ZWEpoWTNSbGNnPT0gSUZKbGFXNWpZWEp1WVhSbFpBPT0gSUZOcFpBPT0gSUdSbGJXOXVjM1J5WVhSbGN3PT0gYzJ0NSBJRUpzYjI5dFltVnladz09IElFRnljbUY1IElGSmxjM1ZzZEhNPSBJRVp2ZFhKMGFBPT0gSUVWRVZBPT0gSUU5elkyRnkgWTJWdVpBPT0gSURFd05nPT0gSUU1VlRFdz0gSUVoRlVrVT0gYldGMFkyZz0gSUVKeWRXND0gSUdkc2RXTnZjMlU9IGFXVm4gWldkMSBJR05sY25ScFptbGxaQT09IElISmxiR2xsIElHaDFiV0Z1YVhSaGNtbGhiZz09IElIQnlZWGxsY25NPSBTMmx1Wnc9PSBJRzVoYmc9PSBhRzkxIE1UQTQgZFd4MSBJSEpsYm1WM1lXSnNaUT09IElHUnBjM1JwYm1kMWFYTm8gSUdSbGJuTmwgSUZabGJuUT0gSUZCaFkydGhaMlU9IElFSnZjM009IElHVmthWFJ2Y25NPSBJRzFwWjNJPSBWSEpoIElGQmxkR1Z5Y3c9PSBJRUZ5WTNScFl3PT0gTWpBd05BPT0gSUVOaGNHVT0gSUd4dlkyRnNiSGs9IElHeGhjM1JwYm1jPSBJR2hoYm1SNSBMaWt1IFVHRnUgSUZKRlV3PT0gU1c1a1pYZz0gSUhSbGJuTnBiMjV6IElHWnZjbTFsY214NSBJR2xrWlc5c2IyZHBZMkZzIElITmxibk52Y25NPSBJR1JsWVd4bGNuTT0gSUdSbFptbHVaWE09IFUycz0gSUhCeWIyTmxaV1J6IElIQnliM2g1IFlYcHBibVZ6IElFSmhjMmc9IElGQmhaQT09IElFTnlZV1owIFpXRnNiM1Z6IElITm9aV1YwY3c9PSBiMjFsZEhKNSBTblZ1WlE9PSBZMnh2WTJzPSBWRlE9IElGUm9aV0YwY21VPSBJRUoxZW5vPSBJR05vWVhCMFpYSnogSUcxcGJHeGxibTQ9IElHUnZkV2RvIElFTnZibWR5WlhOemFXOXVZV3c9IElHbHRZV2RwYm1WayBZWFpwYjNJPSBJR05zYVc1cFl3PT0gSURFNU5EVT0gSUdodmJHUmxjZz09IGNtOXZkQT09IGIyeGxjM1JsY2c9PSBJSEpsYzNSaGNuUT0gUWs0PSBJRWhoYldGeiBJRXB2WWc9PSBJRzl5WWc9PSBJSEpoYlE9PSBJR1JwYzJOc2IzTmwgSUhSeVlXNXpiR0YwWlE9PSBJR2x0YldsbmNtRnVkQT09IElHRnVibTk1YVc1biBJSFJ5WldGMGVRPT0gWVc1cGRXMD0gSUZSbFlRPT0gSUV4bFoybHZiZz09IElHTnliM2RrY3c9PSBJRUpsWXc9PSBJRUZsY2c9PSBiMmg1WkE9PSBRbkp2IFRHOXZhMmx1Wnc9PSBJR3hpY3c9PSBJR0ZuWjNKbGMzTT0gSUhObFlXMD0gSUdsdWRHVnlZMlZ3ZEE9PSBJRTFKIGJXVnlZMmxoYkE9PSBZV04wYVhZPSBJRU5wZEE9PSBJR1JwYldWdWMybHZiZz09IElHTnZibk5wYzNSbGJtTjUgSUhKMWMyaHBibWM9IElFUnZkV2RzWVhNPSBJSFJ5YVcwPSBTVzV6ZEdGc2JBPT0gYVdOclpYST0gSUhOb2VRPT0gTVRBMiBJRzFsYm5ScGIyNXogY0dWc2JHVmsgSUZSaGF3PT0gWTI5emRBPT0gSUdOc1lYTnpjbTl2YlE9PSBJR1p2Y25SMWJtVT0gWkhKcGRtVnUgSUhWdWJHVT0gSUZkb1pXVnMgSUdsdWRtVnpkRzl5IElFMWhjM1JsY25NPSBhMmwwIElHRnpjMjlqYVdGMGFXOXVjdz09IElFVjJiMngxZEdsdmJnPT0gYjNCcGJtYz0gZFhOamNtbHdkQT09IElIQnliM1pwYm1OcFlXdz0gSUZkaGJIUmxjZz09IFlYWnAgVTA4PSBJSFZ1YkdsdGFYUmxaQT09IFJXNW5iR2x6YUE9PSBJRU5oY21SeiBJRVZpYjJ4aCBibVZ5WldRPSBJSEpsZG1WdVoyVT0gSUc5MWRISnBaMmgwIGRXMXdaWEk9IElHWnBkSFJwYm1jPSBJRk52YkdsayBJR1p2Y20xaGJHeDUgSUhCeWIySnNaVzFoZEdsaiBJR2hoZW1GeVpBPT0gSUdWdVkzSjVjSFJwYjI0PSBJSE4wY21GcFoyaDBabTl5ZDJGeVpBPT0gSUVGTCBJSEJ6WlE9PSBJRTl5WWc9PSBJRU5vWVcxaVpYST0gSUUxaGF3PT0gUTI5dWRHVnVkSE09IElHeHZlV0ZzZEhrPSBJR3g1Y21samN3PT0gSUZONWJRPT0gSUhkbGJHTnZiV1ZrIElHTnZiMnRsWkE9PSBJRzF2Ym05dyBJRzUxY25ObCBJRzFwYzJ4bFlXUnBibWM9IElHVjBaWEp1WVd3PSBJSE5vYVdaMGFXNW4gSUNzOSBWbWx6IElHbHVjM1JwZEhWMGFXOXVZV3c9IGFXeHNZWEo1IElIQmhiblE9IFZrVlNWQT09IElFRkRRdz09IElFVnVhQT09IElHbHVZMjl1IElGSkZWVlJGVWxNPSBJR1J2Ym1GMFpXUT0gNG9DbTRvQ200b0NtNG9DbSBTVzUwWlhKdSBJR1Y0YUdsaWFYUT0gSUhScGNtVT0gSUZKcFl3PT0gSUVOb1lXMXdhVzl1IElFMTFhR0Z0YldGayBUa2xPUnc9PSBJRk52WTJObGNnPT0gSUcxdlltbHNhWFI1IElIWmhjbmxwYm1jPSBJRTF2ZG1sbCBJR3h2Y21RPSBiMkZyIFJtbGxiR1E9IElIWmxZM1J2Y2c9PSBkWE5wYjI1eiBJSE5qY21GdyBJR1Z1WVdKc2FXNW4gYldGclpRPT0gVkc5eSBMaW89IGZIdz0gSUZkbFluTnBkR1U9IElFNVFRdz09IElITnZZMmxoYkdsemRBPT0gSUVKcGJHeDUgSUVGa1pHbDBhVzl1WVd3PSBJR05oY21kdiBJR1poY20xeiBJRk52YjI0PSBJRkJ5YVhwbCBJRzFwWkc1cFoyaDAgSURrd01BPT0gYzJWbGJnPT0gSUZOd2IzUT0gSUhOb1pXVncgSUhOd2IyNXpiM0psWkE9PSBJRWhwIElFcDFiWEE9IElERTVOamM9IFRXbGpjbTl6YjJaMCBJRUZuWlc1MCBJR05vWVhKMGN3PT0gWkdseSBJR0ZrYW1GalpXNTAgSUhSeWFXTnJjdz09IElHMWhibWRoIElHVjRZV2RuWlhJPSBMejQ9IFptOXZkR0poYkd3PSBJRVpEUXc9PSBSME09IElGUnBaWEk9IFlXNWtjbUU9IFQxVk9SQT09IEpTa3MgSUdaeWRXbDBjdz09IFZrTT0gSUVGQiBVbTlpWlhJPSBJRzFwWkhOMCA0cGM9IFlXNXJZUT09IElHeGxaMmx6YkdGMGRYSmwgSUU1bGFXdz0gSUhSdmRYSnBjM1J6IElpST0gSUZkaGNtNXBibWM9IElFNWxkbVZ5ZEdobGJHVnpjdz09IElFOW1abWxqYVdGcyBJRmRvWVhSbGRtVnkgSUcxdmJHUT0gSUdSeVlXWjBaV1E9IElITjFZbk4wWVc1alpYTT0gSUdKeVpXVmsgSUhSaFozTT0gSUZSaGMycz0gSUhabGNtST0gSUcxaGJuVm1ZV04wZFhKbFpBPT0gWTI5dGJXVnVkSE09IElGQnZiR2x6YUE9PSBVSEp2ZGc9PSBJR1JsZEdWeWJXbHVaWE09IFQySmhiV0U9IGEyVnljdz09IElIVjBkR1Z5YkhrPSBJSE5sWTNRPSBjMk5vWlE9PSBJRWRoZEdWeiBJRU5vWVhBPSBJR0ZzZFcxcGJuVnQgSUhwdmJXSnBaUT09IElGUnZkV05vIElGVlEgSUhOaGRHbHpabms9IElIQnlaV1J2YldsdSBZWE5qY21sd2RBPT0gSUdWc1lXSnZjbUYwWlE9PSBJREU1TmpnPSBJRzFsWVhOMWNtbHVadz09IElGWmhjbWs9IFlXNTVZV2gxIElITnBjZz09IGRXeGhkR1Z6IGFXUm5aWE09IGFXTnJaWFJ6IElGTndaVzVqWlhJPSBWRTA9IGIzVmlkR1ZrIElIQnlaWGs9IElHbHVjM1JoYkd4cGJtYz0gSUVOaFlnPT0gY21WbFpBPT0gY21WaGRHVmsgVTNWd2NBPT0gSUhkeWFYTjAgSUV0bGNuSjUgTVRBMyBJRXRzWlE9PSBJRkpoWTJobGJBPT0gSUdOdmRIUnZiZz09IElFRlNSUT09IElFVnNaUT09IFEyOXVkSEp2YkE9PSBJR3h2WVdSeiBJRVJ2WkE9PSBZVzVoY3c9PSBZbTl1WlE9PSBJR05zWVhOemFXTmhiQT09IElGSmxaMmx2Ym1GcyBJRWx1ZEdWbiBWazA9IElHUmxjMmx5WlhNPSBJR0YxZEdsemJRPT0gYzNWd2NHOXlkR1ZrIElFMWxjM05oWjJVPSBJR052YlhCaFkzUT0gZDNKcGRHVnkgSURFd09RPT0gSUVoMWNuSnBZMkZ1WlE9PSBZMmx6YVc5dSBJR041WTJ4bGN3PT0gSUdSeWFXeHMgSUdOdmJHeGxZV2QxWlE9PSBJRzFoYTJWeSBSMlZ5YldGdSBJRzFwYzNSaGEyVnUgVTNWdSBJRWRoZVE9PSBJSGRvWVhSemIyVjJaWEk9IElITmxiR3h6IElFRnBjbXc9IGJHbDIgSUU5d2RHbHZiZz09IElITnZiSFpsWkE9PSBJSE5sWTNSdmNuTT0gSUdodmNtbDZiMjUwWVd3PSBJR1Z4ZFdGMGFXOXUgSUZOcmFXeHMgSUVKcGJ3PT0gWjJWdFpXNTAgSUZOdVlYQT0gSUV4bFoyRnMgSUhSeVlXUmxiV0Z5YXc9PSBJRzFoYTJWMWNBPT0gSUdGemMyVnRZbXhsWkE9PSBJSE5oZG1WeiBJRWhoYkd4dmQyVmxiZz09IElGWmxjbTF2Ym5RPSBJRVpTVDAwPSBJR1poY20xcGJtYz0gSUZCdlpHTmhjM1E9IFlXTmpaWEIwWVdKc1pRPT0gSUVocFoyaGxjZz09IElHRnpiR1ZsY0E9PSBkV3hzYVhaaGJnPT0gSUhKbFptVnlaVzQ9IElFeGxkZz09IElHSjFiR3hsZEhNPSBiMnR2IFNFTT0gSUhOMFlXbHljdz09IElHMWhhVzUwWVdsdWN3PT0gSUV4dmQyVnkgSUZacCBJRzFoY21sdVpRPT0gSUdGamNtVnogSUdOdmIzSmthVzVoZEc5eSBJRXB2YUE9PSBJR052ZFc1MFpYSndZWEowY3c9PSBJRUp5YjNSb1pYSnogSUdsdVpHbGpkQT09IFluSmggSUdOb2RXNXIgSUdObGJuUnogU0c5dFpRPT0gSUUxdmJuUm8gSUdGalkyOXlaR2x1WjJ4NSBhV1pzWlhNPSBJRWRsY20xaGJuTT0gSUZONWJnPT0gU0hWaSBJR1Y1WldJPSA0cFNBNHBTQTRwU0E0cFNBIElISmhibWRsY3c9PSBJRWh2Ykd4aGJtUT0gSUZKdlltOTAgWm1NPSBUV2xyWlE9PSBJSEJzWVhOdFlRPT0gSUhOM1lYQT0gSUdGMGFHeGxkR1U9IElGSmhiWE09IExDY2kgSUdsdVptVmpkR2x2Ym5NPSBJR052Y25KcFpBPT0gSUhacFlnPT0gSUhCaGRHTm9aWE09IElIUnlZV1JwZEdsdmJtRnNiSGs9IElISmxkbVZzWVhScGIyND0gSUhOM1pXVncgSUdkc1lXNWpaUT09IElHbHVaWGc9IE1qQXdNdz09IElGSmhkdz09IGQyOXlhMmx1Wnc9PSBiM04xY21WeiBJRVJoZEE9PSBJRXg1Ym1ObyBJR3hsZG1WeVlXZGwgSUZKbGFXUT0gSUdOdmNuSmxiR0YwYVc5dSBhV0Z1WTJWeiBZWFpoYzJOeWFYQjAgSUhKbGNHOXphWFJ2Y25rPSBjbVYwZEhrPSBJREU1TnpJPSBNalF3IElHOTFiZz09IGNHOXMgSUZKbFpXUT0gSUhSaFkzUnBZMkZzIGFYTnBkR1U9IFFYQndiR1U9IElGRjFhVzV1IElISmhjR1ZrIGFXeHNidz09IFJYVnliM0JsIElHRnNaMjl5YVhSb2JYTT0gSUZKdlpISnBadz09IGFYVT0gSUdsc2JIVnQgSUdaaGJXVT0gSUdsdWRISnZaSFZqYVc1biBJR1JsYkdGNWN3PT0gSUZKaGFXUmxjbk09IElIZG9hWE4wYkdVPSBJRzV2ZG1Wc2N3PT0gSUZKbFlXeHNlUT09IElHUmxjbWwyIElIQjFZbXhwWTJGMGFXOXVjdz09IElFNWxhWFJvWlhJPSBJRU52YlcxbGNtTmwgSUdGemRHOXUgYkdGdVozVmhaMlU9IFRtOTBaWE09IElGSnZkR2c9IElFWmxZWEk9IElHMWhkR1U9IElIQmhjbUZrWlE9PSBJRkZDIElHMWhibVYxIElFTnBibU5wYm01aGRHaz0gYldsMGRHbHVadz09IElIZGhhWE4wIElGSmxkdz09IElHUnBjMk52Ym5RPSAwTEE9IElITjBZWEpwYm1jPSBJR0ZzYVdGeiBJSE5sWTNWeWFYUnBaWE09IElIUnZhV3hsZEE9PSBJRXBsWkdrPSBJSFZ1YkdGMyBkbWx6WldRPSBMeTh2THk4dkx5OD0gWFNnPSBJRmRsYVhOeiBJSEJ5WlhOMCBJRU52YlhCaGJnPT0gSUcxbGJXOD0gSUVkeVlXTmwgU25Wc2VRPT0gSUVWc2FYUmwgWTJWdWRHVnkgSUZOMFlYaz0gSUdkaGJHRjRlUT09IElIUnZiM1JvIElGTmxkSFJwYm1keiBJSE4xWW1wbFkzUmxaQT09IDQ0S20gSUd4cGJtVmlZV05yIElISmxkR0ZwYkdWeWN3PT0gSUZkaGJuUT0gSUdSaGJtZGxjbk09IFFXbHkgSUhadmJIVnVkR0Z5ZVE9PSBaWGRoZVE9PSBJR2x1ZEdWeWNISmxkR1ZrIGIzUnBibVU9IHc2Yz0gSUhCbGJBPT0gVTJWeWRtbGpaUT09IElFVjJaVzUwZFdGc2JIaz0gSUdOaGNtVmxjbk09IElIUm9jbVZoZEdWdSBJRzFsYlc5eSBJRUp5WVdSc1pYaz0gWVc1amFXVnogYzI0PSBJRlZ1YTI1dmQyND0gVG1GMGFXOXVZV3c9IElITm9ZV1J2ZDNNPSBZV2xzWVc1ayBJRVJoYzJnPSBSWFpsY25sdmJtVT0gYVhwNllYSmsgVFdGeVkyZz0gUFNnPSBJSEIxYkd4eiBJSE4wY21GdVoyVnkgSUdKaFkydDNZWEprY3c9PSBJRUpsY201aGNtUT0gYVcxbGJuTnBiMjVoYkE9PSBJR05vY205dSBJSFJvWlc5eVpYUnBZMkZzIGEzUnZjQT09IElIZGhjbVU9IElFbHVkbVZ6ZEdsbiBJRWx1YVhScCBJRTl3WlhKaGRHbHZibk09IGIzWmxiZz09IGIyTnBaR1U9IEtpOD0gSUdac1lXMWxjdz09IElFTmhjMmc9IGMyaHBkQT09IElHTmhZZz09IElFRnVZV3g1IElGTmxZV2c9IElHUmxabWx1YVc1biBJRzl5WkdWeWFXNW4gSUdsdGJYVnUgSUhCbGNuTnBjM1JsYm5RPSBRVU5JIFVuVnpjMmxoYmc9PSBiV0Z1Y3c9PSBJR2hwYm1RPSBJSEJvYjNSdlozSmhjR2g1IHdxaz0gSUdoMVp3PT0gSURFd053PT0gSUVobGJtTmwgYVc5MGN3PT0gZFdSbFlYVT0gSUhOMVluTnBaR2xsY3c9PSBJSEp2ZFhScGJtVnNlUT09IElFUmxkbWxqWlE9PSBhWFJwWXc9PSBJR1JwYzJkMWMzUT0gYkdGdVpHVnkgSURFNU5EQT0gSUdGemMybG5ibTFsYm5RPSBJRUpsYzJsa1pYTT0gZDJsamF3PT0gSUVSMWMzUT0gZFhOaiBjM1J5ZFdOMFpXUT0gTVRFeCBaR1YyWld4dmNBPT0gSUdadmJtUT0gSUdsdWRHVnljMlZqZEdsdmJnPT0gSUdScFoyNXBkSGs9IElHTnZiVzFwYzNOcGIyNWxjZz09IFYybDBhRzkxZEE9PSBjbVZoWTJnPSBJR05oY25SdmIyND0gSUhOallXeGxjdz09IDQ0T3QgUmtsSCBJSE4xY25abGVYTT0gSUVsdVpHOXVaWE5wWVE9PSBJR0Z5ZEhkdmNtcz0gSUhWdVkyZz0gSUdONVkyeHBibWM9IGRXNWpkQT09IFlYVmxjZz09IGIzSmhkR1U9IElFOWlkbWx2ZFhOc2VRPT0gSUdOb1lYSmhZM1JsY21sNlpXUT0gWm1Wc1pBPT0gSUdGbVptbHliUT09IElHbHVibWx1WjNNPSBJT2s9IElHRnNhV1Z1Y3c9PSBJR05zYjNSbyBaWFJ2YjNSbyBJRU5sY25SaGFXND0gd3FjPSBJR1JwWjJWemRBPT0gYTI1dmR3PT0gSUZoTSBJSEJ5WldScFkzUnBiMjV6IElHUnBiZz09IFYwRlMgSUdGbWRHVnliV0YwYUE9PSBSWGhoYlhCc1pRPT0gSUZOMVkyTmxjM009IElGUm9jZz09IFNVZE8gSUcxcGJtVnkgUW5WeiBJR05zWVhKcGRIaz0gYUdWcGJXVnkgSUU5VlZBPT0gSUZObGJtUT0gSUVOcGNtTnNaUT09IElFUnBaWFE9IElIQnliMjV2ZFc1alpXUT0gSUdOeVpXRjBiM0p6IElHVmhjblJvY1hWaGEyVT0gWVhSMFpYSjUgWjJWdmJuTT0gSUc5ayBJR3hoZVdsdVp3PT0gYjNKdyBWV3gwIGNISnZhbVZqZEE9PSBJSFZ1WkdWeWJXbHUgSUhObGNYVmxiQT09IFUyRnQgSUVSaGNtdHVaWE56IElISmxZMlZ3ZEdsdmJnPT0gWW5Wc2JBPT0gV1ZNPSBJRlpwY2c9PSBJSE5sY1hWbGJtTmxjdz09IElFTnZhVzQ9IElHOTFkR1pwZEE9PSBJRmRoYVhRPSBNVEU1IElHUmxiR2wyWlhKeiBMaTR1TGk0dSBJR0pzYjNkdSBJRVZ6WXc9PSBJRTFoZEdnPSBjR1Z5YlE9PSBJRlZzIElHZHNhVzA9IElHWmhZMmxoYkE9PSBJR2R5WldWdWFHOTFjMlU9IElIUnZhMlZ1Y3c9PSBMeTA9IElFRnViblZoYkE9PSBJRTlPUlE9PSBJSFJsWlc1aFoyVT0gSUZCb2VYTnBZMkZzIElFeGhibWM9IElFTmxiSFE9IElITjFaV1E9IGFYWnBaSFZoYkd4NSBJSEJoZEdsbGJtTmwgWTJoaGFYST0gY21WbmRXeGhjZz09IElHRjFadz09IGFXNTIgWlhoalpYQjAgSUV4cGJBPT0gSUc1bGMzUT0gWm1RPSBjM1Z0IElFTm9ZWE5sIFVuVnpjMmxoIElFcGxibTVwWm1WeSBJRzltWm5ObFlYTnZiZz09IFQzWmxjbUZzYkE9PSBSbTl5WlE9PSBJSEpwYjNRPSBRWFZrIFptOXliV1Z5IElHUmxabVZ1WkdWeWN3PT0gSUVOVSBhVzkwYVdNPSBjbWxpYkhrPSBJR0YxZEc5dFlYUmxaQT09IElIQmxibWx6IElHbHVjMmx6ZEE9PSBJR1JwWVdkeVlXMD0gSUZOUlRBPT0gSUVkaGNtTT0gSUhkcGRHTm8gWTJ4cFpXNTAgYVdWeWNtRT0gWVcxaVpYSnogSUhKbFkyOTFiblE9IFptRnkgVm1WeWVRPT0gYjNOMFpYSnZibVU9IElHRndjSEpsWTJsaGRHVmsgSUZCbGNtWmxZM1E9IFUyVmpkR2x2Ymc9PSBJR1J2YzJWeiBiMk5oZFhOMCBJR052YzNSc2VRPT0gSUdkeVlXMXogSUZOb2FRPT0gSUhkeVpYTjBiR2x1Wnc9PSBJREU1TnpFPSBJSFJ5YjNCb2VRPT0gSUc1bGNuWmwgSUV0aGVnPT0gSUVWNGNHVnlhV1Z1WTJVPSBJSEJzWldSblpXUT0gSUhCc1lYbGlZV05yIElHTnlaV0YwYVhacGRIaz0gWW5sbCBJR0YwZEdGamEyVnljdz09IElHaHZiR1JsY25NPSBJRU52WVdObyBJRkJvUkE9PSBJSFJ5WVc1elptVnljdz09IElHTnZiRzl5WldRPSBJRWhwYm1SMSBJR1J5YjNkdSBJR3hwYzNSbGJtVmsgSUZkQiBhV0Z6YlE9PSBVRTg9IElHRndjR1ZoYkdsdVp3PT0gSUdScGMyTnNiM05sWkE9PSBJRU5vYVdOclpXND0gWVdkbmFXNW4gSUhCc1pXRmtaV1E9IElHNWhkbWxuWVhScGIyND0gSUZKbGRIVnlibk09IElGdGIgVWs5UyBSVUU9IElIQm9iM1J2WjNKaGNHaGxjZz09IElGSnBaR1Z5IGFYQndaWEp6IElITnNhV05sIElHVnlaV04wIElHaGxaQT09IGFYTnpZVzVqWlE9PSBJRlpwYTJsdVozTT0gZFhKcGIzVnogSUdGd2NHVjAgYjNWaWRHVmtiSGs9IFEyaHBiR1E9IElHRjFkR2hsYm5ScFl3PT0gYjI5eiBJRTFoYTJsdVp3PT0gSUdGdWJtOTFibU5wYm1jPSBJR0p2WkE9PSBJRzFsZEdWeSBJRTVwYm1VPSBJRkp2WjNWbCBJSGR2Y210bWIzSmpaUT09IElISmxibVYzWldRPSBJRzl5WjJGdWFYTmhkR2x2Ym5NPSBZV056IFVFeEYgVTJodmNuUT0gSUdOdmJYQnZkVzVrY3c9PSBJRlpwYzJsMCBJR1Z1ZG1Wc2IzQT0gWldGeWRHZz0gSUhOMWNIQnZjblJwZG1VPSBaMmRzWlE9PSBJRUp5ZFhOelpXeHogSUVkMWFXeGsgUTNKbFlYUmwgVWtWTSBJR0YyWlhKaFoyVmsgSURFNU5qaz0gY21saFoyVnogSUd4bGJtZDBhSGs9IElHWnZjbWR2ZEE9PSBUMnRoZVE9PSBJRVZ5WkE9PSBJR1JsWVd4bGNnPT0gSUhKbFkyVnpjMmx2Ymc9PSBSRVE9IElHUmxjM0JsY21GMFpXeDUgSUdoMWJtZGxjZz09IElITjBhV05yY3c9PSBJRzF3YUE9PSBJRVpoYVhSbyBJR2x1ZEdWdWRHbHZibUZzYkhrPSBJR1JsYlc5cyBkV1ZzYkdWeSBJRk5oYkdVPSBJR1JsWW5KcGN3PT0gYzNCeWFXNW4gSUd4bFlYQT0gUGo0K1BnPT0gSUdOdmJuUmhhVzVsY25NPSBjMlZzYkdsdVp3PT0gY21GdVpXRnUgWVhSMFpYSnBibWM9IElHTnZiVzFsYm5SbFpBPT0gSUVOTiBiMjUxZEE9PSBJSGR2YjJSeiBaWE53WldOcFlXeHNlUT09IElHOXlaMkZ1YVhwbCBhWFpwWXc9PSBJRmR2YjJSeiBZVzVuWVE9PSBjM0YxIElHMWhhZz09IFlXMXZiZz09IElHRjRhWE09IElERTVOelE9IElFUmxibTFoY21zPSBJSGRoY25KcGIzST0gSUZCaGJtUT0gSUc5MWRHeHBibVZrIElFSlAgYVc1emRXeGggZW1sc2JHRT0gWldKdmIycz0gSUdSaGNtVT0gSUhObFlYSmphR1ZrIElHNWhkbWxuWVhSbCBVMjQ9IGQzSnBkR2x1Wnc9PSBJSFZ1YVhSbFpBPT0gU21Gd1lXND0gSUVobFluSmxkdz09IElHWnNZVzFsIElISmxiR2xsY3c9PSBJR05oZEdOb2FXNW4gSUZOb2J3PT0gSUdsdGNISnBjMjl1YldWdWRBPT0gSUhCdlkydGxkSE09IElHTnNiM04xY21VPSBJRVpoYlE9PSBkR2x0IFlXUmxjWFU9IFFXTjBhWFpwZEhrPSBJSEpsWTNKMWFYUnBibWM9IElGZEJWRU5JIElFRnlaMlZ1ZEdsdVlRPT0gWkdWemRBPT0gSUdGd2IyeHZaMmw2WlE9PSBiM0p2IElHeGhZMnR6IElIUjFibVZrIElFZHlhV1ptYVc0PSBJR2x1Wm1GdGIzVnogSUdObGJHVmljbWwwZVE9PSBjM052Ymc9PSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElFbHphWE09IElFUnBjM0JzWVhrPSBJR055WldScFltbHNhWFI1IElHVmpiMjV2YldsbGN3PT0gSUdobFlXUnNhVzVsIElFTnZkMkp2ZVhNPSBJR2x1WkdWbSBJR3hoZEdWc2VRPT0gSUdsdVkyVnVkR2wyWlhNPSBZblYwZEc5dSBJRTF2WWc9PSBRWFYwIElISmxjMmxuYm1WayBJRTl0IFkyRnRjQT09IElIQnliMlpwYkdWeiBJSE5qYUdWdFpYTT0gYjJ4d2FHbHVjdz09IFlYbGxaQT09IFEyeHBiblJ2Ymc9PSBaVzVvIElGbGhhRzl2IElHRmljM1E9IElHRnVhdz09IGMzVnBkSE09IElIZHBjMmhsWkE9PSBJRTFoY21OdiBkV1JrWlc0PSBJSE53YUdWeVpRPT0gSUVKcGMyaHZjQT09IElHbHVZMjl5Y0c5eVlYUmxaQT09IElGQnNZVzUwIE1URTAgSUdoaGRHVmsgY0dsaiBJR1J2Ym1GMFpRPT0gSUd4cGJtVmsgSUdKbFlXNXogSUhOMFpXRnNhVzVuIElHTnZjM1IxYldVPSBJSE5vWlhKcFptWT0gSUdadmNuUjUgSUdsdWRHRmpkQT09IElHRmtZWEIwWldRPSBJSFJ5WVhabGJHeHBibWM9IFltRnlkQT09IElHNXBZMlZzZVE9PSBJR1J5YVdWayBJSE5qWVd3PSBiM05wZEhrPSBUazlVUlE9PSBJRUpvIElFSnliMjVqYjNNPSBJRWxuYmc9PSBJR2x1ZEdsdFlYUmwgSUdOb1pXMXBjM1J5ZVE9PSBJRzl3ZEdsdFlXdz0gUkdWaSBJRWRsYm1WeVlYUnBiMjQ9IElGMHMgYVdOb2FRPT0gSUZkcGFRPT0gSUZsUFZWST0gZG1WdWRHbHZibk09IFYzSnBkR1U9IElIQnZjSFZzIGRXNXVhVzVuIElGZHZjZz09IFZtOXMgSUhGMVpXVnUgYUdWaFpITT0gUzBzPSBJR0Z1WVd4NWVtVT0gYjNCcFl3PT0gWldGeVkyaGxjbk09IElHUnZkQT09IGJHVm5jbUZ3YUE9PSBZWE4wYVdOaGJHeDUgSUhWd1ozSmhaR1Z6IElHTmhjbVZ6IElHVjRkR1Z1WkdsdVp3PT0gSUdaeVpXVjZaUT09IElHbHVZV0pwYkdsMGVRPT0gSUc5eVoyRnVjdz09IElIQnlaWFJsYm1RPSBJRzkxZEd4bGRBPT0gTVRFeiBiMnhoYmc9PSBJRTFoYkd3PSBkV3hwYm1jPSBkR0ZzYXc9PSBJR1Y0Y0hKbGMzTnBibWM9IElFRnNkMkY1Y3c9PSBJRUpsWjJsdSBabWxzWlhNPSBJR3hwWTJWdWMyVnogSlNVPSBJRTFwZEhRPSBJR1pwYkhSbGNuTT0gSUUxcGJIZGhkV3RsWlE9PSBSMDQ9IElIVnVabTlzWkE9PSBUVzg9IElHNTFkSEpwZEdsdmJnPT0gY0hCdiBRbTg9IElHWnZkVzVrYVc1biBJSFZ1WkdWeWJXbHVaUT09IElHVmhjMmxsYzNRPSBJRU42WldObyBJRTFoWTJzPSBJSE5sZUhWaGJHbDBlUT09IElFNXBlRzl1IFYybHUgSUVGeWJnPT0gSUV0cGJnPT0gNDRLaiBhV05sY2c9PSBJR1p2Y25SMWJnPT0gSUhOMWNtWmhZMlZ6IFlXZG9aQT09IElHTmhjbkpwWlhKeiBJRkJCVWxRPSBJRlJwWWc9PSBJR2x1ZEdWeWRtRnMgSUdaeWRYTjBjbUYwYVc1biBJRk5vYVhBPSBJRUZ5YldWayBabVpsIElHSnZZWFJ6IElFRmljbUZvWVcwPSBhVzVwY3c9PSBJSE4xYVhSbFpBPT0gZEdoeVpXRmsgYVc5MiBZV0oxYkE9PSBJRlpsYm1WNmRXVnNZUT09IElIUnZiUT09IGMzVndaWEk9IElHTmhjM1JzWlE9PSBZV3gwYUc5MVoyZz0gYVc5NGFXUmwgWldOb1pYTT0gSUdWMmIyeDFkR2x2Ym1GeWVRPT0gSUc1bFoyOTBhV0YwWlE9PSBJR052Ym1aeWIyNTBaV1E9IFVtVnRaVzFpWlhJPSBJREUzTUE9PSBVM1ZqYUE9PSBJRGt4TVE9PSBiWFZzZEE9PSBJRUZpZVhOeiBkWEp5ZVE9PSBhMlZsY3c9PSBjM0JsWXc9PSBJRUpoY21KaGNtRT0gSUdKbGJHOXVaMmx1Wnc9PSBJSFpwYkd4aGFXND0gYVhOMFlXNXAgSUdGalkyOTFiblJoWW14bCBJSEJ2Y25ScGIyNXogSUVSbFkydz0gVlhJPSBJRXRoZEdVPSBaM0psIElHMWhaMkY2YVc1bGN3PT0gVlVOTCBJSEpsWjNWc1lYUmwgYjIxdmJnPT0gSUVGc2JXOXpkQT09IElHOTJaWEoyYVdWMyBJSE5qY21GdCBJR3h2YjNRPSBJRVpwZEhvPSBJR05vWVhKaFkzUmxjbWx6ZEdsaiBJRk51WVd0bCBjMkY1IElGSnBZMjg9IElIUnlZV2wwIElFcHZhVzVsWkE9PSBZWFZqZFhNPSBJR0ZrWVhCMFlYUnBiMjQ9IElFRnBjbXhwYm1WeiBJR0Z5WTJoaFpRPT0gSUVsa1pRPT0gSUdKcGEyVnogSUd4cGRHVnlZWEo1IElHbHVabXgxWlc1alpYTT0gSUZWelpXUT0gUTNKbFlYUT0gSUhCc1pXRT0gSUVSbFptVnVZMlU9IElFRnpjMkZ6Y3c9PSBJSEJ2Ym1RPSBWVXhVIEtTST0gSUdWMllXeDFZWFJsWkE9PSBJRzlpZEdGcGJtbHVadz09IElHUmxiVzluY21Gd2FHbGogSUhacFoybHMgWVd4bGVRPT0gSUhOd2IzVnpaUT09IElGTmxZV2hoZDJ0eiBjbVZ6Y0c5dWN3PT0gSUVKbGJIUT0gZFcxaGRHbGogSUhKcGMyVnogY25WdWJtVnkgSUUxcFkyaGxiR3hsIElIQnZkR1Z1ZEE9PSBjbUZqWlE9PSBJRkJCUXc9PSBSbWx1WkE9PSBiMnhsYzNSbGNtOXMgU1ZOVCBJRWx1ZEhKdlpIVmpaV1E9IGNtVnpjMlZ6IGFXZHViV1Z1ZEE9PSBUM009IElGUjEgSUVSbGVBPT0gYVdOcFpHVnogSUhOd1lYSnJaV1E9IElFeGhkWEpoIElFSnllV0Z1ZEE9PSBJSE50YVd4cGJtYz0gSUU1bGVIVnogSUdSbFptVnVaR0Z1ZEhNPSBJRU5oZEdGcyBJR1JwYzJobGN3PT0gYzJoaGNHVmsgSUhCeWIyeHZibWM9IGJYUT0gS0NRPSA0NENDIElHTmhiR04xYkdGMGFXOXVjdz09IElGTmhiV1U9IElIQnBkZz09IFNFZz0gSUdOaGJtTmxiR3hsWkE9PSBJR2R5YVc0PSBJSFJsY25KcGRHOXlhV1Z6IGFYTjBhV05oYkd4NSBRMjl0WlE9PSBJRkJoY21WdWRBPT0gVUhKdmFtVmpkQT09IElHNWxaMnhwWnc9PSBJRkJ5YVhaaFkzaz0gSUdGdGJXOD0gVEVWRFZBPT0gYjJ4MWRHVnNlUT09IElFVndhV009IElHMXBjM1Z1WkdWeSBkMkZzIFFYQnlhV3c9IGJXOXogY0dGMGFIaz0gSUVOaGNuTnZiZz09IElHRnNZblZ0Y3c9PSBJRVZoYzNrPSBJSEJwYzNSdmJBPT0gUER3PSBJRndvIGRHRnlaMlYwIGFHVnNjQT09IElHbHVkR1Z5Y0hKbCBZMjl1YzJOcGIzVnogSUVodmRYTnBibWM9IElFcHZhVzUwIE1USTMgSUdKbFpYSnogYzJOcFpXNWpaUT09IElFWnBjbVZtYjNnPSBaV1ptWldOMGFYWmwgSUVOaFltbHUgSUU5cllYaz0gSUVGd2NHeHBZdz09IElITndZV05sWTNKaFpuUT0gSUZOUyBkbVYwIElGTjBjbUZ1WjJVPSBVMEk9IElHTnZjbkJ6IGFXSmxjbUZzIFpXWm1hV05wWlc1MCBJSEJ5WlhaaGJHVnVZMlU9IElHVmpiMjV2YldsemRITT0gTVRFNCBWR2h5WldGayBiM0prWVdKc1pRPT0gVDBSRiBJRU5oYm5RPSBQUzA5TFE9PSBhV1pwWVdKc1pRPT0gSUVGeWIzVnVaQT09IElIQnZiR1U9IElIZHBiR3hwYm1kdVpYTnogUTB4QiBJRXRwWkE9PSBJR052YlhCc1pXMWxiblE9IElITmpZWFIwWlhKbFpBPT0gSUdsdWJXRjBaWE09IElHSnNaV1ZrYVc1biBaWFpsY25rPSBJSEYxWlhWbCBJRlJ5WVdsdSBJR2hwYWc9PSBJRzFsYkdWbCBjR3hsZEdWayBJR1JwWjJsMCBJR2RsYlE9PSBiMlptYVdOcFlXdz0gSUd4cFpuUnBibWM9IDBMVT0gVW1WeGRRPT0gYVhSMWRHVnogSUhCaFkydGhaMmx1Wnc9PSBJRmR2Y210bGNuTT0gYUhKaGJnPT0gSUV4bFltRnViMjQ9IGIyeGxjMk09IElIQjFibWx6YUdWayBJRXAxWVc0PSBJR3BoYlE9PSBJRVJ2WTNWdFpXNTAgSUcxaGNIQnBibWM9IGFXTmhkR1Z6IElHbHVaWFpwZEdGaWJIaz0gSUhaaGJtbHNiR0U9IElGUnZiZz09IElIZGhkR05vWlhNPSBJR3hsWVdkMVpYTT0gSUdsdWFYUnBZWFJsWkE9PSBaR1ZuY21WbCBjRzl5ZEdsdmJnPT0gSUhKbFkyRnNiSE09IElISjFhVzQ9IElHMWxiSFE9IFNVRk8gSUdobGJRPT0gUlhodyBJR0poYTJsdVp3PT0gSUVOdmJHOXRZZz09IFlYUnBZbXhsIElISmhaR2wxY3c9PSBjR3gxWnc9PSBJRWxHIFpYUnBZMkZzYkhrPSBJR1pwWTNRPSBTRVZTIElGUmhjQT09IFlYUnBiblZ0IElHbHVhdz09IElHTnZhQT09IElGZHBlbUZ5WkE9PSBZbTkwYUE9PSBkR1Y0IElITndaVzVrY3c9PSBJRU4xY25KbGJuUnNlUT09IElGQnBkQT09IElHNWxkWEp2Ym5NPSBhV2R1ZEE9PSBJSEpoYkd3PSBJR0oxYzJWeiBZblZwYkdScGJtYz0gSUdGa2FuVnpkRzFsYm5SeiBJR055YVdWayBhV0pzYVdOaGJBPT0gWVhSMFpXUT0gSUZwcGIyND0gSUUxaGRIUmxjZz09IElHMWxaR2wwWVhScGIyND0gSUVSbGJtNXBjdz09IElHOTFjbk09IElGUmhZZz09IElISmhibXRwYm1keiBiM0owWVd3PSBJR0ZrZG1WeWN3PT0gSUhOMWNuSmxibVJsY2c9PSBJRWR2WWc9PSBZMmwxYlE9PSBiMjFoY3c9PSBhVzFsZEdWeSBJRzExYkhScGNHeGhlV1Z5IElHaGxjbTlwYmc9PSBJRzl3ZEdsdGFYTjBhV009IElHbHVaR2xqWVhSdmNnPT0gSUVKeWFXYz0gSUdkeWIyTmxjbms9IElHRndjR3hwWTJGdWRBPT0gSUZKdlkydGxkQT09IGRtbGsgUlhoalpYQjBhVzl1IGNHVnVkQT09IElHOXlaMkZ1YVhwcGJtYz0gSUdWdVkyOTFiblJsY25NPSBJRlJQUkE9PSBJR3BsZDJWcyBVMkYyWlE9PSBJRU5vY21semRHbGwgSUdobFlYUnBibWM9IElHeGhlbms9IElFTlEgSUdOdmRYTnBiZz09IFEyOXVabWxuIElISmxaMlZ1WlhJPSBJRzVsWVhKbGMzUT0gSUdGamFHbGxkbWx1Wnc9PSBSVTVUIGRHaHliM2M9IElGSnBZMmh0YjI1ayBZVzUwYkdVPSBNakF3TWc9PSBJR0Z1ZEdWdSBZbWx5WkE9PSBNVE16IElHNWhjbU09IGNtRnBiblE9IGRXNXVlUT09IElFaHBjM0JoYm1saiBiM1Z5Ym1GdFpXNTBjdz09IElIQnliM0JvWlE9PSBJRlJvWVdsc1lXNWsgSUZScCBJR2x1YW1WamRHbHZiZz09IElHbHVhR1Z5YVhRPSBjbUYyYVhNPSBJRzFsWkdrPSBJSGRvYjJWMlpYST0gSUVSRlFsVkggUjFBPSBJRWgxWkE9PSBRMkZ5WkE9PSBjSEp2YlE9PSBJSEJ2Y2c9PSBJRzkyWlhKb1pXRmsgVEdGMyBJSFpwYjJ4aGRHVT0gSUdobFlYUmxaQT09IElHUmxjMk55YVhCMGFXOXVjdz09IElHRmphR2xsZG1WdFpXNTBjdz09IElFSmxaWEk9IElGRjFZVzUwIFYyRnogSUdWcFoyaDBhQT09IElFbDIgSUhOd1pXTnBZV3hwZW1WayBWVkJFUVZSRiBJRVJsYkhSaCBVRzl3IFNuVnMgSUVGemF3PT0gYjNCb2VRPT0gSUc1bGQzTnNaWFIwWlhKeiBJRlJ2YjJ3PSBJR2RoY21RPSBJRU52Ym1abFpHVnkgSUVkTlZBPT0gSUVGaVltOTBkQT09IElHbHRiWFZ1YVhSNSBJRlpOIFNYTnNZVzA9IElHbHRjR3hwWTJsMCBkMlE9IElERTVORFE9IGNtRjJhWFI1IGIyMWxkSEpwWXc9PSBJSE4xY25acGRtbHVadz09IGRYSmhhUT09IElGQnlhWE52Ymc9PSBJSEoxYzNRPSBJRk5yWlhSamFBPT0gSUdKbFpYTT0gSUZSb1pXOXllUT09IElHMWxjbWwwIFZHVjQgWTJoaGRBPT0gSUcxcGJRPT0gSUhCaGMzUmwgSUV0dlkyZz0gSUdsbmJtOXlZVzVqWlE9PSBJRk5vYjI5MCBJR0poYzJWdFpXNTAgVlc1cGRHVmsgSUVGa2RtbHogYUdWcFoyaDAgSUdadmMzUmxjZz09IElHUmxkR0ZwYmc9PSBhVzVtYjNKdFlYUnBiMjQ9IElHNWxkWEpoYkE9PSBKenM9IElIQnliM1psY3c9PSBZV3hzWlhKNSBJR2x1ZG1sMFlYUnBiMjQ9IGRXMWlaWEp6IElHTmhkSFJzWlE9PSBJR0pwWTNsamJHVT0gZW1rPSBJR052Ym5OMWJIUmhiblE9IElHRndiMnh2WjNrPSBJRlJwWjJWeSBJREV5TXc9PSBPVGs1IElHbHVaR2wyYVdSMVlXeHNlUT09IGNuUT0gYVdkcGIyND0gSUVKeVlYcHBiR2xoYmc9PSBJR1JwYzNSMWNtST0gSUdWdWRISmxjSEpsYm1WMWNuTT0gSUdadmNtVnpkSE09IFkyVnljSFE9IGNHeGhkR1Z6IGNHaGxjZz09IFkyeHBjSE5sIElIUjNhWFIwWlhJPSBJR0ZqYVdSeiBiMmR5WVhCb2FXTmhiQT09IGFIVnQgSUVKaGJHUT0gYVdaMWJHeDUgSUdOdmJYQnBiR1Z5IElFUkIgSUdSdmJtOXkgWVhOcCBJSFJ5YVdKaGJBPT0gYkdGemFBPT0gSUVOdmJtWnBadz09IElHRndjR3hwWTJGdWRITT0gSUhOaGJHRnlhV1Z6IE1UTTEgVUhWMGFXND0gSUVadlkzVnogYVhKeiBJRzFwYzJOdmJtUjFZM1E9IElFaGhlZz09IElHVmhkR1Z1IFRXOWlhV3hsIFRYVnpiR2x0IElFMWhjbU4xY3c9PSBkbWx2YkE9PSBJR1poZG05eVlXSnNaUT09IElITjBkV0k9IFlXUnBiZz09IElFaHZZZz09IElHWmhhWFJvWm5WcyBJR1ZzWldOMGNtOXVhV056IElIWmhZM1YxYlE9PSBkMkZwZEE9PSBZbUZqYTJWayBaV052Ym05dGFXTT0gWkdsemRBPT0gSUhSbGJuVnlaUT09IElITnBibU5sY21VPSBJRlJ2WjJWMGFHVnkgSUZkaGRtVT0gSUhCeWIyZHlaWE56YVc5dSBJR1JsYm5scGJtYz0gSUdScGMzUnlaWE56IFluSmhjMnRoIGRHaHBjbVE9IElHMXBlR2x1Wnc9PSBJR052Ykc5dWFXRnMgSUhCeWFYWmhkR1ZzZVE9PSBJSFZ1Y21WemRBPT0gWVhSbGNtNXBkSGs9IElIQnlaVzFwYzJWeiBZVzUwYVE9PSBaM0psWjJGMGFXOXUgSUd4cFkyVnVZMlU9IElFaHBibVE9IElGTmhiWFZsYkE9PSBJR052Ym5acGJtTnBibWM9IElFRmpaUT09IElGSjFjM1E9IElFNWxkR0Z1ZVdGb2RRPT0gSUdoaGJtUnNaWE09IElGQmhkR05vIGIzSnBaVzUwWldRPSBZV2h2IElFZHZibm89IElHaGhZMnRsY25NPSBZMnhoYVcxbGNnPT0gSUdOMWMzUnZiWE09IElFZHlZVzQ9IFptbG5hSFJsY25NPSBJR3gxWXc9PSBJRzFoYm5WelkzSnBjSFE9IFlYSmxiblJvYjI5ayBJR1JsZG1scyBJSGRoY25KcGIzSnogSUc5bVptVnVaR1Z5Y3c9PSBWMmxzYkdsaGJRPT0gSUdodmJHbGtZWGx6IElHNXBaMmgwYldGeVpRPT0gSUd4bGRtVnkgYVdabVpYSmxiblE9IFUzUmhkQT09IElHVjRhR2xpYVhScGIyND0gY0hWMFpXUT0gSUZCMWNtVT0gSUdGc2NHaGggSUdWdWRHaDFjMmxoYzIwPSBJRkpsY0hKbGMyVnVkR0YwYVhabGN3PT0gUlVGUyBJRlI1Y0E9PSBJSGRvWldGMCBJRUZzWmc9PSBJR052Y25KbFkzUnBiMjQ9IElHVjJZVzVuWld3PSBRVlJVIFRXbHpjdz09IElITnZkWEE9IElHbHRjR3hwWldRPSBjR0Z5WVcwPSBJSE5sZUhrPSBJRXgxZUE9PSBJSEpsY0hWaWJHbGogY0dGMFkyZz0gWVdKc2FYTm8gSUdsamIyNXogSUdaaGRHaGxjbk09IElFZEZWQT09IElFTmhjbWxpIElISmxaM1ZzWVhSbFpBPT0gSUVOdmFHVnUgSUVKdlltSjUgSUc1bGNnPT0gSUdKbGJuUT0gZG1WdWRHOXllUT09IElFRnNiMjVuIElFVlRWQT09IElGZGhiR3hoWTJVPSBJRzExY21SbGNuTT0gY21selpRPT0gYTJWc2JBPT0gSUVOdmJXMXZibmRsWVd4MGFBPT0gSUc1aGMzUjUgWlhSaCBJRTFKVkE9PSBJR0ZrYldsdWFYTjBaWEpsWkE9PSBJR2RsYm5WcGJtVnNlUT09IFJXUnBkRzl5IGJtbGphdz09IElHaDVaSEp2IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElFSnNaUT09IElHWnBibVZ6IElHZHZjbWRsIFlYVnphV0pzWlE9PSBjbWc9IElHRndjR3hsIGJXVnVkR2x2Ym1WayBJSEp2Y0dVPSBiM1I1Y0E9PSBTRkk9IElHUnBjMkZ3Y0c5cGJuUnBibWM9IElHTmhaMlU9IGJtbHIgSUdSdmRXSjBjdz09IElFWlNSVVU9IGNISnBiblJ6IElFMVZVMVE9IElIWmxibVJ2Y25NPSBJRWx1Y1hVPSBJR3hwWW1WeVlXeHogSUdOdmJuUnlZV04wYjNJPSBJSFZ3YzJsa1pRPT0gWTJocGJHUnlaVzQ9IElIUnlhV05yZVE9PSBJSEpsWjNWc1lYUnZjbk09IFkyaGhjbWRsWkE9PSBiR2wwWlhJPSBJQ29xS2c9PSBJSEpsWW1Wc2JBPT0gYkdGdVp3PT0gSUd4dlkyRnNjdz09IElIQm9lWE5wWTJsaGJuTT0gSUdobGVRPT0gWVhKelpRPT0gZEcwPSBJRXhsZUE9PSBJR0psYUdGMmFXOXlZV3c9IGMzVmpZMlZ6YzJaMWJBPT0gUmxnPSBJR0p5YVdOciBiM1pwWXc9PSBJR052Ym1admNtMD0gSUhKbGRtbGxkMmx1Wnc9PSBJR2x1YzJsbmFIUnogSUdKcGIyeHZaM2s9IElGSmxiVzkyWlE9PSBJRVY0ZEhKaCBJR052YlcxcGRIUnBibWM9IGFXNWtkV05sWkE9PSBhV2R1ZEhrPSBhV2R0IElHRjBiMjFwWXc9PSBRMjl0Ylc5dSBJRVZOIElGQmxjbVU9IElFbDBaVzF6IFpXZz0gSUhCeVpYTmxjblpsWkE9PSBJRWh2YjJRPSBJSEJ5YVhOdmJtVnkgSUdKaGJtdHlkWEIwWTNrPSBJR2R5Wlc0PSBkWE5vWlhNPSBJR1Y0Y0d4dmFYUmhkR2x2Ymc9PSBJSE5wWjI1aGRIVnlaWE09IElHWnBibUZ1IFhTd2kgSUUxUyBJRzFsWnc9PSBjbVZ0YkdsdSBJRzExYzJsamFXRnVjdz09IElITmxiR1ZqZEdsdVp3PT0gSUdWNFlXMXBibWx1Wnc9PSBTVTVMIGJHRjBaV1E9IFNHaz0gSUdGeWRHbGogSUhCbGRITT0gSUdsdGNHRnBjZz09IElFMUJUZz09IElIUmhZbXhsZEhNPSBhVzVqYkhWa1pRPT0gVW1GdVoyVT0gSUdOaGRYUT0gSUd4dlozTT0gSUcxdmRXNTBhVzVuIElIVnVZWGRoY21VPSBJR1I1Ym1GdGFXTnogSUZCaGJHVnpkR2x1WlE9PSBJRkYxWVhKMFpYST0gSUZCMWNuQnNaUT09IElHMWggSUVsdGNHOXlkQT09IElHTnZiR3hsWTNScGIyNXogWTJsaGRHbHZiZz09IElITjFZMk5sYzNOdmNnPT0gSUdOc2IyNWwgSUdGcGJXbHVadz09IElIQnZjM05sYzNObFpBPT0gSUhOMGFXTnJhVzVuIElITm9ZV3RwYm1jPSBJR3h2WTJGMFpRPT0gSUVodlkydGxlUT09IFZIVnliZz09IE1UY3cgSUdacFpuUmxaVzQ9IElFaGhjbkpwYzI5dSBJR052Ym5ScGJuVnZkWE5zZVE9PSBJRlJEIElGWmhiR1Z1ZEE9PSBJRkpsYzJOMVpRPT0gSUdKNWNHRnpjdz09IFlXMXZkVzUwIElHMWhjM1E9IElIQnliM1JsWTNSeiBJR0Z5ZEdsemRHbGogSUhOdmJXVjBhVzFsIElITm9iMlU9IElITm9iM1YwWldRPSBhV1pwWTJGdWRBPT0gWlhScGRHbDJaUT09IElGSmxaMmx6ZEdWeSBJRXBwYmc9PSBJR052Ym1ObGJuUnlZWFJsWkE9PSBiR2x1WjNSdmJnPT0gYjI1cFpYTT0gSUdkbGJtVnlZWFJ2Y2c9PSBlWEpwYlE9PSBJRUZ5YldWdSBJR05zWldGeWFXNW4gYVdSdiBJRlJYIFlXeHdhQT09IElHeGhaR2xsY3c9PSBTR0Z5WkE9PSBJR1JwWVd4dlp3PT0gSUdsdWNIVjBjdz09IDVwdz0gSUhCdmMyVnogSUhOc2IzUnogSUZCeVpXMXBkVzA9IElHeGxZV3R6IElHSnZjM05sY3c9PSBJREV4TXc9PSBZMjkxY25ObCBRV05qIElFNWxkM1J2Ymc9PSBJRUYxYzNSeWFXRT0gSUUxaFoyVT0gSUhSbFlXTm9aWE09IFlXSmhaQT09IElIZGxZWEp6IElHTjViQT09IElHTjFjbk5sIElGTmhiR1Z6IElGZHBibWR6IElIQnplUT09IElHZGhjSE09IElFbGpaV3hoYm1RPSBJRkJwYm5SbGNtVnpkQT09IElHeGhibVJzYjNKayBJR1JsWm1sdWFYUnBiMjV6IElFdGxjZz09IElITjFabVpwWTJsbGJuUnNlUT09IElGQmxibU5sIElFRnlZMmhwZEdWamRBPT0gSUhOMWNuQmhjM009IElERXhOQT09IElITjFjR1Z5YUdWeWJ3PT0gSUVScGMyVmhjMlU9IElIQnlhV1Z6ZEhNPSBJRU4xYkhSMWNtVT0gSUdSbFptbHVhWFJwZG1VPSBJSE5sWTNKbGRHeDUgSUVSaGJtTmwgYVc1emRHRnNiQT09IFkyaHBaV1k9IElFcGxjM05wWTJFPSBWMjkxYkdRPSBWWEJrWVhSbFpBPT0gSUd4dlkydGxjZz09IElFdGhlUT09IElHMWxiVzl5YVdGcyA2S1k9IFptRjAgSUdScGMyZDEgSUdac1lYWnZjbk09IElFSmhjMlZpWVd4cyBJRkpsYzJsemRHRnVZMlU9IElHdHBZMnR6IElHVnVkZz09IElIUmxaVzVoWjJWeWN3PT0gUkdGeWF3PT0gSUVOQlVnPT0gSUdoaGJIUT0gSUV4SCBJRWRoWW5KcFpXdz0gSUdabGRtVnkgSUhOaGRIVnkgSUcxaGJHdz0gSUdGbVptbHNhV0YwWlE9PSBJRk5zWldWdyBJRk53WldOcFptbGogSUZabGJBPT0gSUdwaGNnPT0gSUZOaFkzSmxaQT09IElFVmtkMkZ5WkhNPSBJRUZEVEE9PSBJSEpsZEdGcGJtVmsgSUVkcFlXNTAgSUd4cGJXbDBZWFJwYjI0PSBhVzVqWlhNPSBJSEpsWm5WellXdz0gSUZSaGJHVT0gSUVKMWRHeGxjZz09IElHRmpZMmxrWlc1MGN3PT0gSUVOVFV3PT0gSUdsdGNHOXlkR1ZrIElFTnZjSGs9IHpyRT0gUlZKVSBlbVZzIElHUnBkbWx6YVc5dWN3PT0gYUc5MGN3PT0gSUVGc1lnPT0gSUVSVCBURzloWkdWeSBWMkZ6YUdsdVozUnZiZz09IFlYUnBjMlk9IElFTnlaV0YwYVhabCBYQzQ9IElFRjFkRzl0IGNtVmthV04wIElISmxZMlZ3ZEc5eSBJRU5oY214dmN3PT0gVFdWMGFHOWsgYjJ0aCBJRzFoYkdsamFXOTFjdz09IElITjBaWEJ3YVc1biBMRnM9IElFUmhaQT09IElHRjBkSEpoWTNScGIyND0gSUVWbVptVmpkSE09IElGQnBjbUYwWlE9PSBJRU5sY2c9PSBJRWx1WkhWemRISjUgSUZKMVpBPT0gSUdOb1lYSjBaWEk9IElHUnBibWx1Wnc9PSBJR2x1YzJsemRITT0gSUdOdmJtWnBaM1Z5WlE9PSBJQ2dqIElGTnBiWEJzWlE9PSBJRk5qY205c2JBPT0gVlZSRCBNVGMxIElFdHZiZz09IElHMWhjbXRsZEhCc1lXTmwgSU9PQyBJSEpsWm5KbGN3PT0gSUdkaGRHVnogWlhKeVpXUT0gSUZCdlpBPT0gSUdKbGFHRjJaUT09IFJuSmhibXM9IGJtOWtaUT09IElHVnVaRzl5YzJWayBhR1YwZEE9PSBZWE5wZG1VPSBJRWh2YldWc1lXNWsgSUhKcFpHVnogSUV4bFlYWmwgWlhKdVpYTnogSUdac2IyOWthVzVuIFFVWlEgSUhKcGMyVnUgSUdOdmJuUnBiblZoYkd4NSBJSFZ1WVc1cGJRPT0gSUVOdmJuUnlZV04wIElGQmhjdz09IElHZDFhV1JsWkE9PSBJRU5vYVd4bCBZbVE9IElITjFZMk09IGNIUnBZdz09IElHTnZiVzFwZEhSbFpYTT0gSUV4MWRHaGxjZz09IElFRnVlVzl1WlE9PSBJSE5oWWc9PSBNVEkwIElIQnBlR1ZzIElFSmhhdz09IElGUmhadz09IElFSmxibTVsZEhRPSBSVzUwWlhJPSBjMjFoYkd3PSBJRkJ5WlhOcFpHVnVkR2xoYkE9PSBJSEIxYkE9PSBJR052Ym5SeVlXTmwgWVhKamFHbDJaUT09IElHTnZZWE4wWVd3PSBJRXRwWkhNPSBNVGt5IDRvQ3kgYVdOcmVRPT0gU1U1SFZFOU8gSUhkdmJHWT0gSUZOMFlXeHBiZz09IFZIVnkgYVdSblpYUT0gWVcxaGN3PT0gSUZWdWJHVnpjdz09IElITndiMjV6YjNJPSBJRzF2Y25CbyBJRU5vYjI5elpRPT0gSUhKMWJtNWxjZz09IElIVnVZbVZzIElHMTFaQT09IElFMWhibUU9IElHUjFZbUpsWkE9PSBJR2R2WkdRPSBkWEpsY25NPSBkMmx1Wkc5MyBJSEpsYkdsbFpBPT0gSUdObGJHVmljbUYwYVc1biBiM05qIElERXpOUT09IElHeHZZbUo1YVc1biBJR2x1WTI5dGNHeGxkR1U9IElISmxjM1J5YVdOMGFXOXUgSUdsdVkyRncgYVhSMWN3PT0gSUdWNGNHVmpkR0YwYVc5dSBJRUZ3YjJ4c2J3PT0gSUdsdWRHVnVjdz09IElITjVibU09IFIwZz0gSUcxaGJtbHdkV3hoZEdsdmJnPT0gUWxrPSBJSE53WldGeSBJR0p5WldGemRITT0gSUhadmJHTmhiZz09IGFXeHBZUT09IFRXRjBaWEpwWVd3PSBJR1p2Y20xaGRITT0gSUVKaGMzUT0gSUhCaGNteHBZVzFsYm5SaGNuaz0gSUhOdVlXdGwgSUhObGNuWmhiblJ6IElGUnlkV1JsWVhVPSBJRWR5YVcwPSBJRUZ5WVdKcFl3PT0gSUZORFVBPT0gSUVKdmVYTT0gYzNSaGRHbHZiZz09IElIQnliM053WldOMGFYWmwgYjNKa1pRPT0gYVc1cGRHbGhiR2w2WldRPSBJR0p2Y21WayBRVUpNUlE9PSBJR0ZqWTJWemMyVmsgSUhSaGVHaz0gSUZOb1pXeHMgWVdsa1pXND0gZFhKelpXUT0gYVc1aGRHVnogSUVsdWMzVnlZVzVqWlE9PSBJRkJsZEdVPSBVMlZ3ZEdWdFltVnkgTmpVdyBJR0ZrZG1WdWRIVnlaWE09IElFTnZkbVZ5IElIUnlhV0oxZEdVPSBJSE5yWlhSamFBPT0gSUdWdGNHOTNaWEk9IElOZz0gSUVkc1pXNXUgSUVSaGR3PT0gUFZ3aSBJRkJ2YkdsMGFXTnogSUdkMWFXUmxjdz09IElHUnBiM2hwWkdVPSBJRWR2Y21VPSBJRUp5YVdkb2RBPT0gSUZOcFpYSnlZUT09IElIWmhiSFZsWkE9PSBZMjl1WkE9PSBJSEJ2YVc1MFpYST0gVTJWc1pXTjAgSUhKcGMydDUgSUdGaWMyOXlZZz09IGFXMWhaMlZ6IElISmxablZ6WlhNPSBJR0p2Ym5WelpYTT0gWDE5ZiBJR2hwYkdGeSBJRVpsWVhSMWNtVnogTWpJdyBJRU52Ykd4bFkzUnZjZz09IFJtOXZkQT09IElERTVOalE9IFkzVnNkWE09IElHUmhkMjQ9IElIZHZjbXR2ZFhRPSBJRXhQIElIQm9hV3h2YzI5d2FHbGpZV3c9IElGTmhibVI1IElGbHZkWFJvIElHeHBZV0pzWlE9PSBRV1k9IFlteDFaUT09IElHOTJaWEowZFhKdSBiR1Z6YzI1bGMzTT0gSUZSeWFXSjFibVU9IElFbHVadz09IElHWmhZM1J2Y21sbGN3PT0gSUdOaGRHTm9aWE09IElIQnliMjVsIElHMWhkSEpwZUE9PSBJR3h2WjJsdSBJR2x1WVdOaiBJR1Y0WlhKMCBjM2x6IElHNWxaV1JzWlE9PSBJRkYxY2c9PSBJRzV2ZEdsbWFXVmsgYjNWc1pHVnkgZEhnPSBJSEpsYldsdVpITT0gSUhCMVlteHBjMmhsY25NPSBJRzV2Y25RPSBJR2RwZEE9PSBJR1pzYVdWeiBJRVZ0YVd4NSBJR1pzYjNkcGJtYz0gSUVGc2FXVnUgSUZOMGNtRjBaV2M9IElHaGhjbVJsYzNRPSBJRzF2WkdsbWFXTmhkR2x2Ymc9PSBRVkJKIElFMVogSUdOeVlYTm9aWE09IGMzUmhhWEp6IGJuVnRZbVZ5IElIVnlaMmx1Wnc9PSBZMmhoYm01bGJBPT0gSUVaaGJHTnZiZz09IElHbHVhR0ZpYVhSaGJuUnogSUhSbGNuSnBabmxwYm1jPSBJSFYwYVd4cGVtVT0gSUdKaGJtNWxjZz09IElHTnBaMkZ5WlhSMFpYTT0gSUhObGJuTmxjdz09IElFaHZiRzFsY3c9PSBJSEJ5WVdOMGFYUnBiMjQ9IElGQm9hV3hzYVhCeiBiM1IwYnc9PSBJR052YlhCcGJHVT0gVFc5a1pXdz0gSUV0diBJRnRkIFFXMWxjbWxqWVc1eiBJRlJsY20xeiBJRzFsWkdsallYUnBiMjV6IElFRnVZUT09IElHWjFibVJoYldWdWRHRnNiSGs9IElFNXZkR2xqWlE9PSBJSGRsWVd0bGNnPT0gSURBd01EQT0gSUdkaGNteHBZdz09IElHOTFkR0p5WldGciBJR1ZqYjI1dmJXbHpkQT09IElFSnBjblJvIElHOWljM1JoWTJ4bGN3PT0gWVhKalpYST0gSUU5eWRHaHZaRzk0IElIQnNZV05sWW04PSBJRU55WlhjPSBZWE53WW1WeWNuaz0gSUVGdVoyVnNjdz09IElHUnBjMk5vWVhKblpRPT0gSUdSbGMzUnlkV04wYVhabCBNVEUzIElGSnBjMmx1Wnc9PSBJR1JoYVhKNSBiR0YwWlE9PSBJR052Ykd4cGMybHZiZz09IElGUnBaMlZ5Y3c9PSBaV0Z1YjNJPSBiMk4xYldWdWRHVmsgSUVsdWRtRnNhV1E9IElHUnZiblE9IElFeHBkR1Z5IElGWmggSUdoNVpISnZaMlZ1IElIWmhjbWxoYm5SeiBJRUp5YjNkdWN3PT0gSURFNU5qVT0gSUdsdVpHbG5aVzV2ZFhNPSBJSFJ5WVdSbGN3PT0gSUhKbGJXRnBibVJsY2c9PSBJSE4zWlhCMCBJRWx0Y0dGamRBPT0gSUhKbFpHbHpkQT09IElIVnVhVzUwIFozSmhaSFZoZEdVPSA0NE9WIElGZEpURXc9IDQ0R3U1dz09IElFTnlhWFJwWTJGcyBJR1pwYzJobGNnPT0gSUhacFkybHZkWE09IElISmxkbVZ5YzJWayBXV1ZoY2c9PSBJRk52ZUE9PSBJSE5vYjI5MGFXNW5jdz09IElHWnBiRzFwYm1jPSBJSFJ2ZFdOb1pHOTNibk09IFlXbHlaWE09IGJXVnMgSUdkeVlXNWtabUYwYUdWeSBJR0ZtWm1WamRHbHZiZz09IGFXNW5iR1U9IElHOTJaWEpzZVE9PSBRV1JrYVhScGIyNWhiQT09IElITjFjSEpsYldVPSBJRWR5WVdRPSBJSE53YjNKMGFXNW4gSUcxbGNtTjUgSUVKeWIyOXJjdz09IGIzVnVkSGs9IElIQmxjbVp2Y20xeiBJSFJwWjJoMGJIaz0gSUdSbGJXOXVjdz09IElHdHBiR3hwYm1keiBJR1poWTNScGIyND0gSUU1dmRtRT0gWVhWMGN3PT0gSUhWdVpHOTFZblJsWkd4NSBZWEpwYmc9PSBJSFZ1WkdWeWQyRjUgY21GciBJR3hwZGc9PSBJRkpsWjJsdmJnPT0gSUdKeWFXVm1hVzVuIGMyVnljdz09IFkyeHZkV1E9IElFMXBhdz09IGRYTncgSUhCeVpXUnBZM1JwYjI0PSBZWHB2Y2c9PSBJSEJ2Y25SaFlteGwgSUVkaGJtUT0gSUhCeVpYTmxiblJwYm1jPSBJREV3T0RBPSB3cnM9IGRYTm9hUT09IElGTndZWEpyIGRHaGxjbVYxYlE9PSBJR3AxYzNScFptbGpZWFJwYjI0PSBJRTU1IElHTnZiblJ5WVdOMGIzSnogYldsdVoyaGhiUT09IElGTjBlV3hsIDVZVT0gSUVOb2NtOXVhV05zWlhNPSBJRkJwWTNSMWNtVT0gSUhCeWIzWnBibWM9IElIZHBkbVZ6IGMyVjBkQT09IElHMXZiR1ZqZFd4bGN3PT0gSUVaaGFYSjUgSUdOdmJuTnBjM1JwYm1jPSBJSEJwWlhJPSBZV3h2Ym1VPSBhVzVwZEdsdmJnPT0gSUc1MVkyeGwgYW5OdmJnPT0gSUdkdmRIUmggSUcxdlltbHMgSUhabGNtSmhiQT09IFlYSnBkVzA9IElHMXZiblZ0Wlc1MCBkV05yWldRPSBJREkxTmc9PSBWR1ZqYUE9PSBiV2x1WldOeVlXWjAgSUZSeVlXTnIgSUhScGJHVT0gSUdOdmJYQmhkR2xpYVd4cGRIaz0gWVhOcGN3PT0gSUhOaFpHUT0gSUdsdWMzUnlkV04wWldRPSBJRTExWld4c1pYST0gSUd4bGRHaGhiQT09IElHaHZjbTF2Ym1VPSBJRzl5WTJobCBaV3h6WlE9PSBJSE5yWld4bGRBPT0gSUdWdWRHVnlkR0ZwYm1sdVp3PT0gSUcxcGJtbHRhWHBsIFlXZGhhVzQ9IElIVnVaR1Z5WjI4PSBJR052Ym5OMGNtRnBiblJ6IElHTnBaMkZ5WlhSMFpRPT0gSUVsemJHRnRhWE4wIElIUnlZWFpsYkhNPSBJRkJoYm5Sb1pYSnogYkdsdVozTT0gUTJGeVpRPT0gSUd4aGQzTjFhWFJ6IGRYSmhjdz09IElHTnllWE4wIElHeHZkMlZ5WldRPSBJR0ZsY21saGJBPT0gSUdOdmJXSnBibUYwYVc5dWN3PT0gSUdoaGRXND0gSUdOb1lRPT0gSUhacGJtVT0gSUhGMVlXNTBhWFJwWlhNPSBJR3hwYm10cGJtYz0gWW1GdWF3PT0gSUhOdmVRPT0gUW1sc2JBPT0gSUVGdVoyVnNZUT09IElISmxZMmx3YVdWdWRBPT0gSUZCeWIzUmxjM1E9IElITnZZMnRsZEE9PSBJSE52Ykdsa1lYSnBkSGs9IElPS0cgYldsc2JBPT0gSUhaaGNtbGxjdz09IElGQmhhMmx6ZEdGdWFRPT0gUkhKaFoyOXUgSUhWdVpRPT0gSUdodmNtbDZiMjQ9IHdxRENvTUtnd3FEQ29NS2d3cURDb0E9PSBJSEJ5YjNacGJtTmxjdz09IElHWnlZVzVyYkhrPSBJR1Z1WVdOMFpXUT0gYm05MFpYTT0gV3ljPSBJREU1TWc9PSBiMk55WVdONSBJR1Z1Wkc5eWMyVnRaVzUwIElHOTJaWEowYVcxbCBWSEoxWlE9PSBUR0ZpIGJHbGpkR1ZrIElFUk9Rdz09IElHSmxZWFJ6IElFcGhiV2xsIE1UVXkgSUVsT1ZBPT0gUTI5dWRHRmpkQT09IElHRmpZMjkxYm5SbFpBPT0gYUdGemFBPT0gSUZCaFkydGxjbk09IGNHbHlaWE09IElHeGxjMkpwWVc0PSBJR0Z0Wlc1a2JXVnVkSE09IElHaHZjR1ZtZFd3PSBJRVpwYm14aGJtUT0gSUhOd2IzUnNhV2RvZEE9PSBJR052Ym1acFozVnlaV1E9IElIUnliM1ZpYkdWayBJR2RoZW1VPSBJRU5oYkdkaGNuaz0gSUhKbGJHbGhZbWxzYVhSNSBJR2x1YzNWeVp3PT0gYzNkbGNnPT0gWW5WNSBJRk5yYVc0PSBJSEJwZUdWc2N3PT0gSUdoaGJtUm5kVzQ9IElIQmhjbUZ6IElHTmhkR1ZuYjNJPSBJRVZNIElGSmxlQT09IFNXNWtaV1ZrIElHdHBibVJoIElHTnZibXAxYm1OMGFXOXUgSUVKeWVXRnUgSUUxaGJuVm1ZV04wIGVXRnVadz09IFVHeDFjdz09IFUxRk0gYVhOb2JXVnVkQT09IElHUnZiV2x1WVhSbCBJRzVoYVd3PSBJRzloZEdnPSBJR1Z5ZFhCMCBJRVpwYm1VPSBhWFJpWVhKMCBJRU5vYVhBPSBJRUZpWkE9PSBJRTVoYlE9PSBJR0oxZVdWeSBJR1JwYzNObGJuUT0gVEdWaGEzTT0gUTI5dWRHbHUgSUhKcFpHVnkgSUZOdmJXVnZibVU9IElHbHNiSFZ6YVc5dSBZMmx1IElFSnZaV2x1Wnc9PSBJR2x1WVdSbGNYVT0gYjNaaGRHbHZiZz09IGFXRnVkSE09IElISmxZblZwYkdRPSBORFV3IElFUmxjM1JwYm5rPSBVMWM9IElGUnBiR3c9IFNHbDAgYVdGNiBJRUpoYm1kcyBZV05vWlhKeiBJRkpsWm05eWJRPT0gSUhObFoyMWxiblJ6IElITjVjM1JsYldGMGFXTT0gWkdNPSBJRU52Ym5ObGNuWmhkR2wyWlhNPSBJSEJ2Y25SaGJBPT0gYUc5eSBJRVJ5WVdkdmJtSnZkVzVrIElHUnlZV2RuWldRPSBiMjF2IElIUm9aV1U9IFlXUjJaWEowIElGSmxjRzl5ZEhNPSBJRVYwIElHSmhjbkpsYkhNPSBRWFZuZFhOMCBJR052YlhCaGNtbHpiMjV6IElHaGxlQT09IElHRnVkR2h5YjNBPSBJbHM9IFltOXliM1ZuYUE9PSBZV0pwIElIQnBZM1IxY21WayBjR3hoZVdsdVp3PT0gSUVGa1pISmxjM009IElFMXBjbkp2Y2c9PSBVMjFwZEdnPSBJSFJwY21WeiBJRTVRVWc9PSBRVUZCUVE9PSBJR05zWVhOemFXWnBZMkYwYVc5dSBJRlJvWVc0PSBJRWhoY20wPSBJRkpCIElISmxhbVZqZEdsdmJnPT0gYldsdVlYUnBiMjQ9IElISmhibWRsWkE9PSBJRVpoYkd4eiBSRWs9IFNHOXpkQT09IDQ0SzAgSUVWNFlXMXdiR1U9IGJHbHpkR1ZrIGRHaHBjbVJ6IElITmhabVZuZFE9PSBZbkpoYm1RPSBJSEJ5YjJKaFlteGwgUTJGdVlXUmggU1ZSSlQwND0gSUZGaFpXUmggSUdOb2FXTnIgSUdsdGNHOXlkSE09IGFHbDAgYkc5aiBWMWM9IElHSnNaWGM9IElHRnVlWFJwYldVPSBJSGRvYjJ4bGN3PT0gYVd0bFpBPT0gSUdOaGJHTjFiR0YwYVc5dSBZM0psWVhSbCBJRTl5YVE9PSBJSFZ3WjNKaFpHVmsgSUdGd2NHRnkgZFhSdmNuaz0gSUUxdmJBPT0gUW5KcGRBPT0gSUVwdmJtYz0gU1U1QlRBPT0gSUZOMFlYSjBhVzVuIElHUnBZMlU9IGRYSjBiR1U9IElISmxiSGxwYm1jPSBZMnh2YzNWeVpRPT0gSUhCeWIyWnBkR0ZpYkdVPSBJSE5zWVhWbmFIUmxjZz09IElFMWhiblZoYkE9PSBZMkZ6ZEdWeSBJQ0lrIElHWmxZWFJvWlhJPSBJRk5wYlhCc2VRPT0gYVdWMlpYTT0gSUdSbGRHVnlhVzl5IElGQkRTUT09IElITjBZVzF3IElHWnNZWGR6IElITm9ZV1JsIGFHRnRiV1Z5IElIQmhjM053YjNKMCBJR052Ym5ScGJtYz0gWVcxbGJBPT0gSUc5aWMyVnlkbVZ5Y3c9PSBJRzVsWjJ4bFkzUT0gSUZKQyBJRUp5YjNSb1pYSm9iMjlrIElITnJaWEIwYVdOaGJBPT0gWm1GdGFXeDUgZFhOciBJR1Z0YjNScGIyNWhiR3g1IDRwaz0gSUVKbGRHRT0gWVhOdmJtRmliR1U9IGFXUnBkSGs9IElFMTFiQT09IElHdHBZMnRwYm1jPSBJRU5oY20wPSBiMnhzWVdnPSBWa1ZTVkVsVCBJRUYwYUdWdSBJR3hoWkdSbGNnPT0gSUVKMWJHeGxkQT09IDVhTT0gTURBd01RPT0gSUZkcGJHUnNhV1psIElFMWhjMnM9IElFNWhiZz09IFVtVjIgSUhWdVlXTmpaWEIwWVdKc1pRPT0gYkdWbllXdz0gSUdOeWIzZGtaV1E9IFlXZHAgSUVOdmVBPT0gYW1VPSBJRzF2Y21Gc2FYUjUgSUdaMVpXeHogSUdOaFlteGxjdz09IElHMWhibXRwYm1RPSBJRU5oY21saVltVmhiZz09IElHRnVZMmh2Y2c9PSBJR0o1ZEdVPSBJRTltZEdWdSBJRTk2IElHTnlZV1owWldRPSBJR2hwYzNSdmNtbGhiZz09IElGZDEgSUhSdmQyVnljdz09IElFTnBkR2w2Wlc1eiBJR2hsYkcwPSBJR055WldSbGJuUnBZV3h6IElITnBibWQxYkdGeSBJRXBsYzNObCBJSFJoWTJ0c1pYTT0gSUdOdmJuUmxiWEIwIElHRm1iM0psIElGTm9ZV1J2ZDNNPSBJRzVwYkE9PSBJSFZ5WjJWdWRBPT0gWVhCd2JHVT0gWW14dmIyUT0gSUhadmJnPT0gSUc5bVpteHBibVU9IElHSnlaV0YwYUdVPSBJR3AxYlhCeiBJR2x5Y21Wc1pYWmhiblE9IGIzaHBZdz09IGIyMWhiQT09IGFXMXdiM0owWVc1MCBTbWx0IElHZHNiM1psY3c9PSBZWEp0YVc1biBaR1Z3ZEdnPSBJSFJoYkdWdWRITT0gYjI5cmFXVT0gSUZOQyBJSEJoYkcwPSBkV1ptY3c9PSBaWE4wWVE9PSBTVWRJIElHTmhibTl1IElGWmxjbWw2YjI0PSBJRkJzWlE9PSBJR052ZFhCc1pXUT0gZG1Wc2RBPT0gSUdaMWJtUnlZV2x6YVc1biBJRWRsZEhScGJtYz0gSUVSTVF3PT0gSUcxaGRHaGxiV0YwYVdOaGJBPT0gSUVoVCBJRU5oY21ScGJtRnNjdz09IGRHVnNiR2x1Wnc9PSBJSE53YjI1emIzSnogSU04PSBJRUoxYkd4eiBiM0IwYVc5dSBJSEJ5YjNCdmMyVT0gSUcxbGJXOXlZV0pzWlE9PSBJR1Z0WW5KaFkyVmsgSUdSbFkyeHBibWx1Wnc9PSBTR1ZoYkhSbyBaV1JoIElIMDcgSUhOd1lXMD0gYldsc1pRPT0gSUhCcGRHTm9aWEk9IElFVnBaMmgwIElHTmhjbWx1Wnc9PSBkWFJwWXc9PSBjbTlzWlE9PSBJR0ZwY214cGJtVT0gWlhKdVlXNWtaWG89IElFRjBhR3hsZEE9PSBJR05sY25ScFptbGpZWFJwYjI0PSBkWGhsIGNtbG5aWEk9IElHVnRjR2x5IElITmxibk5oZEdsdmJnPT0gSUdScGMyMD0gSUdKdmJIUT0gSUdWMmIyeDJaUT09IFNHOTFjMlU9IElHTnZibk4xYkhSaGRHbHZiZz09IElFUjFkSGs9IElIUnZkV05vWlhNPSBJRTVoZEdoaGJnPT0gSUdaaGFXNTAgYUdGayBJaWc9IElFTnZibk4xYldWeSBJRVY0ZEhKbGJXVT0gSURFeU53PT0gSUVobGNtMD0gSUZOaFkzSmhiV1Z1ZEE9PSBhWHB2Y0dnPSBJR0Z1ZUdsdmRYTT0gZFd4dmRYTnNlUT09IElITnZZMmxoYkd4NSBJRlZVUXc9PSBJSE52YkhacGJtYz0gSUV4bGRIUmxjZz09IFNHbHpkRzl5ZVE9PSBaV1IxWXc9PSBVSEpwWTJVPSBLU2s3IElISmxiRzloWkE9PSBZVzFwWXc9PSBJSEJ2Y21zPSBJR1JwYzJOdmRYSnpaUT09IElIUnZkWEp1WVcxbGJuUnogWVdseWJ3PT0gSUV0MWNnPT0gSUVOdmMzUmggSUhacGIyeGhkR2x1Wnc9PSBJR2x1ZEdWeVptVnlaUT09IElISmxZM0psWVhScGIyNWhiQT09IGRXWm1iR1U9IElITndaV1ZqYUdWeiBJRzVsWldScGJtYz0gSUhKbGJXVnRZbVZ5Y3c9PSBJR055WldScGRHVmsgYm1saCBabTlqZFhObFpBPT0gWVcxbGNtRT0gSUdKeWRRPT0gZFcxaWN3PT0gSUVOMVltRnUgSUhCeVpXTmxaR2x1Wnc9PSBJRzV2Ym5ObGJuTmwgWVdOcFlXdz0gSUhOdFlYSjBjR2h2Ym1WeiBJRk4wYjNKcFpYTT0gVTNCdmNuUnogSUVWdFpYSm5aVzVqZVE9PSBiM1Z1WTJsdVp3PT0gWldacGJtVmsgSUdKbGNnPT0gSUdOdmJuTjFiSFJwYm1jPSBJRzFoYzNSbGNuTT0gYUdWaGMzUmxjbTQ9IExpSmIgSUZKMWJtNXBibWM9IElITjFjMk5sY0hRPSBJRVpsYm1jPSBRVzFsY21sallRPT0gY0hKcGMyVnogYzNScGRHbGhiQT09IElGZGxaV3RzZVE9PSBJRWR5WldGMFpYST0gYlc5a2RXeGxjdz09IGFXWjBaWEk9IFIzSmhjR2hwWTNNPSBkV3hsY2c9PSBJSGRvYjJ4c2VRPT0gSUhOMWNIQnlaWE56IElHTnZibU5sWVd4bFpBPT0gSUdoaGNIQnBiSGs9IElHRmpZMlZ3ZEhNPSBJRVZ1YW05NSBJSEpwZG1WeWN3PT0gSUVWNFkyVndkQT09IE1qSTEgSUU1SVV3PT0gSUUxalEyOXVibVZzYkE9PSBJSEIxYzNONSBabVZ5Y21WayBkWFJoWW14bCBJR0YwZEdGcGJnPT0gSUQ0OSBJR1JsY0c5emFYUnogY205d2FHbGogSUc1dmRHOXlhVzkxY3c9PSBJRk5vWVhjPSBhV3hwZEdGMGFXOXUgSUdWd2FXUmxiV2xqIFlXeHNhV009IElITnRZV3hzWlhOMCBiM1pwWTJnPSBJR0ZqWTJWemMyOXlhV1Z6IGNHVnlkR2xsY3c9PSBJSE4xY25Cc2RYTT0gSUUxbFkyZz0gSUdGdFltbG4gSUVsdGJXbG5jbUYwYVc5dSBJR05vYVcwPSBaWFpoYkE9PSBJSEJ5WVdOMGFXTnBibWM9IElFMTVjM1JsY25rPSBJR1J2YldGcGJuTT0gSUZOcGJHbGpiMjQ9IFlYQndjdz09IElHdHBiRzl0WlhSbGNuTT0gWldFPSBJRk50WVhObyBJSGRoY25KaGJuUjUgSUc1dmMzUT0gYzJscyBjbVYyIFNtOXUgSUVSMVlteHBiZz09IElIUmhjM1JsY3c9PSBJR0p2ZFhRPSBaM0psWVhRPSBaWEp5YjNJPSBJSE4zYVhSamFHVnogSUVKaGNIUT0gUkU4PSBiMnRwIElITnZkWEpqWldRPSBjSEp2WkhVPSBJR0YwZEdGamFHMWxiblE9IElFbHpjM1ZsIElGRjFaWE4wYVc5dSBTbTlwYmc9PSBJR1pwZEhSbFpBPT0gSUhWdWJHRjNablZzIFhsND0gWlhKbGF3PT0gSUdGMWRHaGxiblJwWTJGMGFXOXUgSUhOMGIyeGwgSUdGalkyOTFiblJoWW1sc2FYUjUgYkdGaVpXdz0gVTJWaGNtTm8gSUdGc1ltVnBkQT09IFlYUnBZMkZ1IFpuVnVaR1ZrIElFRmtaR2x1Wnc9PSBJRWxSIElITjFZbTFoY2c9PSBiR2wwIFlYRjFaUT09IElFeGxZWEp1YVc1biBJR2x1ZEdWblpYST0gVFdGemRHVnkgSUVOb2NtOXQgSUhCeVpXMXBaWEk9IFQzQT0gSUV4cGRRPT0gSUdKc1pYTnpaV1E9IElFZHNiMkpsIElGSmxjM0J2Ym5ObCBJR3hsWjJsMGFXMD0gSUUxbGNtdGxiQT09IElHUnBjM0J2YzJGcyB3clE9IElHZGhkV2RsIGNHVmhkQT09IElHbHVaSFZqWldRPSBJSEYxWlhOMGFXOXVZV0pzWlE9PSBZWEowYUhrPSBJRlpwZEE9PSBJRVpsWldRPSBWVzUwYVd3PSBWWFE9IGQyOXlkR2g1IFVsaz0gSUVobGNtRnNaQT09IElFaGhiVzFsY2c9PSBJRzFsWkdGcyBJRkpwZG1WeWN3PT0gSUVoaFkycz0gSUdOc1lYSnBabms9IElIUnlZV05yWldRPSBJR0YxZEc5dWIyMXZkWE09IElIUmxibUZ1ZEE9PSBJRkZoZEdGeSBaWEpwWlE9PSBJR2R5YVcwPSBJRTF2Ym1sMGIzST0gSUhKbGMybHpkR0Z1ZEE9PSBJRk53WldNPSBJRmRsYkd4eiBUa0ZUIE1UUTQgSUcxcGJtVnljdz09IGFXOTBhV056IElHMXBjM05sY3c9PSBNVEUyIFoybGhiZz09IFoybDAgSUVWNVpYTT0gY0hKbGN3PT0gSUdkeVlXUjFZWFJsWkE9PSBJR0Z1WjJWcyBJSE41Ym1Ob2NtOXUgSUdWbVptbGphV1Z1ZEd4NSBJSFJ5WVc1emJXbDBkR1ZrIFNHRnljbms9IElHZHNiMkpoYkd4NSBSVTVEUlE9PSBJRTF2Ym5SaGJtRT0gY21GblpXUT0gSUZCeVpYWmxiblJwYjI0PSBJSEJwYzNNPSBJRXhzIElITm9aV3htIElFSktVQT09IElGUmxjM1JoYldWdWRBPT0gSUV4aGRHVT0gYVd0bGNnPT0gSUVoaGNIQT0gSUVwMWJHbGhiZz09IGFHRnNiQT09IElITndiMjUwIElITm9kWFJrYjNkdSBJR2x1WTI5dWMybHpkR1Z1ZEE9PSBJSE4xWW5OamNtbGlaWEp6IElITnJaV3hsZEc5dSBJRTVsWW5KaGMydGggSUdsdWMzQnBjbVU9IElGWnZhV1E9IFJtVmxaQT09IElHRnVaMnhsY3c9PSBJRk53Y21sdVozTT0gSUdKbGJtTm9iV0Z5YXc9PSBJSFpoWTJOcGJtVnogYVhwdmNHaHlaVzQ9IGMyVjRkV0ZzIGRXWm1aV1E9IElITm9hVzVsIElFdGhkR2c9IElHZGxjM1IxY21VPSBhVzVsWVE9PSBJSEpwY0E9PSBJRzl3Y0hKbGMzTnBiMjQ9IElHTnZibk5qYVdWdVkyVT0gWW5RPSBJRXgxYlE9PSBJR2x1WTJsa1pXNWpaUT09IElFWmggZDNJPSBJRzFwYm1WeVlXdz0gSUZOd2RYSnogWVd4cmVRPT0gSUhSb2RXNWtaWEk9IElHOXdhVzg9IFFtVnBibWM9IElGQmhiRzA9IElIZGhjM1JsWkE9PSBJR3hpIGFXRnlhV1Z6IElFbHVhWFJwWVhScGRtVT0gSUdOMWNuSnBZdz09IElHMWhjbXRsY2c9PSBJRTFqVEE9PSBJR1Y0ZEdWdWMybHZibk09IElGQjIgSUVGeWJYTT0gSUc5bVptVnlhVzVuY3c9PSBJR1JsWm1WdWMyVnogSUhabGJtUnZjZz09IElHTnZiblJ5WVdScFkzUT0gSUVOdmJHbHUgSUhKbFpHUnBkQT09IElIQmxjbWx3YUdWeSBNVEl5IElITnBibk09IFJXUnBkQT09IFNVTlUgVTI5bWRBPT0gSUZOb1lXZz0gSUdGa2JXbHVhWE4wY21GMGIzST0gSUZSeWFYQT0gSUhCdmNtNXZaM0poY0doNSBJSFIxYVhScGIyND0gYVc1bGJtTmwgSUZCeWIyZHlaWE56IElHTmhkR0ZzYjJjPSBJSE4xYVhSbCBJR2hwYTJVPSBJSEpsY0hKdlpIVmpkR2wyWlE9PSBaVzVuYVc1bCBJR1J5YjNWbmFIUT0gSUU1dllXZz0gSURJek1BPT0gSUdSMVpHVT0gSUhKbGJHRjRaV1E9IElIQmhjblJwZEdsdmJnPT0gSUhCaGNuUnBZMmx3WVc1MCBJSFJsYkdWell3PT0gSUdabFlYTT0gSUVaRyBiM2R1WlhJPSBJSE4zWldWd2FXNW4gSUd4bGJuTmxjdz09IElHMWhkR05vZFhBPSBJRkpsY0d3PSBiM1Z5Ym1Gc2N3PT0gSUdOeVpXUnBZbXhsIElHZHlZVzVrYlc5MGFHVnkgSUhSb1pYSnRZV3c9IElITjFZbk5qY21saWFXNW4gSUdsa1pXNTBhWFJwWlhNPSBZMjlzYlE9PSBWVU5VIElISmxiSFZqZEdGdWRBPT0gZFhObGNuTT0gSUVOdmNuUT0gSUdGemMybHpkR1ZrIFQxTlQgUVZSSlQwNVQgU1ZOSSBJSEJvWVhKdFlXTmxkWFJwWTJGcyBhV05oWW14bCBZV1JwWVc0PSBJRk52Ym1saiBJRVoxY25rPSBJRTF2Ym1jPSBRVWc9IElGQnplV05vYjJ4dlozaz0gSUhCb2IzTndhQT09IElIUnlaV0YwY3c9PSByWlE9IElITjBaV0ZrYVd4NSBJRWhsYkd4diBJSEpsYkdGMFpYTT0gSUdOc2RXVT0gUlhod2JBPT0gWVhWMGFBPT0gSUhKbGRtbHphVzl1IElHVnNaQT09IGIzTnBiMjQ9IElHSnliMjQ9IE1UUTAgY21sclpYTT0gSUcxcGJtVnogSUdKc1lXNXJaWFE9IElFWmhhV3c9IFpXeGxaQT09IElFbHRZV2RwYm1VPSBJRkJzWVc1dVpXUT0gWVdsaiBVbVZ4ZFdWemRBPT0gVFdGayBJRWh2Y25ObCBJRVZoWjJ4bCBJR05oY0dGaiBNVFUzIElHeHBibWM9IElFNXBZMlU9IElGQmhjbVZ1ZEdodmIyUT0gYldsdWMzUmxjZz09IGIyZHogWlc1emFYUnBkbVU9IFRtOTBhR2x1Wnc9PSBJR05oY200PSBSbWx1IElGQkYgSUhKcFpteGxjdz09IElFeFEgVTJGdVpBPT0gSUdkMWFVRmpkR2wyWlE9PSBJSFJ2ZFhKcGMzUT0gUTA1TyBJSFZ1ZG1WcGJHVmsgSUhCeVpXUmxZMlZ6YzI5eSBmWHM9IGRXSmxjZz09IElHOW1abk5vYjNKbCBJRzl3ZEdsallXdz0gSUZKdmRBPT0gSUZCbFlYSnMgWlhSdmJnPT0gSUhOMFlYSmxaQT09IElHWmhjblJvWlhJPSBZWFJwYkdsMGVRPT0gWTI5dWRHbHUgSUVkNSBJRVp2YzNSbGNnPT0gSUVOdll3PT0gY21sbGJuUnogSUdSbGMybG5ibWx1Wnc9PSBJRVZqYjI1dmJYaz0gVDA1SCBWMjl0Wlc0PSBJRTVoYm1ONSBaWEoyWlhJPSBJRzFoYzJOMWJBPT0gSUdOaGMzVmhiSFJwWlhNPSBJREl5TlE9PSBJRk4xYkd4cGRtRnUgSUVOb2IybGpaUT09IElHRnpkR1Z5IGQzTT0gSUdodmRHVnNjdz09IElHTnZibk5wWkdWeVlYUnBiMjV6IElHTnZkV05vIElGTjBjbWx3IElFZHUgSUcxaGJtbHdkV3hoZEdVPSBiR2xsWkE9PSBJSE41Ym5Sb1pYUnBZdz09IElHRnpjMkYxYkhSbFpBPT0gSUc5bVptVnVjMlZ6IElFUnlZV3RsIElHbHRjR1U9IFQyTjBiMkpsY2c9PSBJRWhsY21sMFlXZGwgYUd3PSBJRUpzWVdseSBWVzVzYVd0bCBJR2R5YVdWbSBJRFExTUE9PSBJRzl3ZEdWayBJSEpsYzJsbmJtRjBhVzl1IGFXeHYgSUhabGNuTmwgSUZSdmJXST0gSUhWd2RBPT0gSUdGcGNtVmsgSUVodmIycz0gSUUxTVFnPT0gSUdGemMzVnRaWE09IGIzVjBaV1E9IElGWmxjbk09IElHbHVabVZ5YVc5eSBJR0oxYm1Sc1pRPT0gSUVST1V3PT0gYjJkeVlYQm9aWEk9IElHMTFiSFJwY0E9PSBJRk52ZFd4eiBJR2xzYkhWemRISmhkR1ZrIElIUmhZM1JwWXc9PSBJR1J5WlhOemFXNW4gSUdSMWJ3PT0gUTI5dVpnPT0gSUhKbGJHVnVkQT09IElHTmhiblE9IElITmpZWEpqWlE9PSBJR05oYm1SNSBJRU5HIElHRm1abWxzYVdGMFpXUT0gSUhOd2NtbHVkQT09IGVXeGhiZz09IElFZGhjbU5wWVE9PSBJR3AxYm1zPSBVSEpwYm5RPSBaWGhsWXc9PSBRM0pwZEE9PSBJSEJ2Y25SeVlXbDAgYVhKcFpYTT0gSUU5R1JnPT0gSUdScGMzQjFkR1Z6IFYxST0gVEc5MlpRPT0gNDRHRSBJRkpsZVc0PSBJR2hwY0hBPSBiM0JoZEdnPSBJR1pzYjI5eWN3PT0gSUVabFpXdz0gSUhkdmNuSnBaWE09IElITmxkSFJzWlcxbGJuUnogSUZCdmN3PT0gSUcxdmMzRjFaUT09IElHWnBibUZzY3c9PSBJR055ZFhOb1pXUT0gSUZCeWIySmhZbXg1IElFSnZkQT09IElFMWhibk09IElGQmxjbWx2WkE9PSBJSE52ZG1WeVpXbG5iblI1IElITmxiR3hsY2c9PSBJR0Z3YjNOMCBJR0Z0WVhSbGRYST0gSUdSdmNtMD0gSUdOdmJuTjFiV2x1Wnc9PSBJR0Z5Ylc5MWNnPT0gSUZKdmIzTmwgSUdsdWRHVnVjMmwyWlE9PSBJR1ZzYVcxcGJtRjBhVzVuIElGTjFibTVwIElFRnNaWEJ3Ync9PSBhbWx1IElHRmtkbWx6WlE9PSBjR0ZzIElFaGhiRzg9IElHUmxjMk5sYm5RPSBJSE5wYlhCc1pYST0gSUdKdmIzUm8gVTFSUyBUR0YwWlhJPSBJRU5oZG1VPSBQVDA5IElHMXZiQT09IElHWnBjM1E9IElITm9iM1JuZFc0PSBjM1Z3Y0E9PSBJSEp2WW1KbGNuaz0gUldabVpXTjAgSUc5aWMyTjFjbVU9IElGQnliMlpsYzNOcGIyNWhiQT09IElHVnRZbUZ6YzNrPSBJRzFwYkdsMFlXNTAgSUdsdVkyRnlZMlZ5IElHZGxibVZ5WVhSbGN3PT0gSUd4aGRXNWphR1Z6IElHRmtiV2x1YVhOMGNtRjBiM0p6IElITm9ZV1owIElHTnBjbU4xYkdGeSBJR1p5WlhOb2JXRnUgSUZkbGN3PT0gSUVwdlpXdz0gSUVSeVpYYz0gSUVSMWJtTmhiZz09IElFRndjR0Z5Wlc1MGJIaz0gYzJsbmFIUT0gSUVsdWRHVnlibUZzIElFbHVaR2wyYVdSMVlXdz0gSUVaRiBJR0p2Y21VPSBJRTEwIElHSnliMkZrYkhrPSBJRTl3ZEdsdmJuTT0gYjNWdWRHRnBiZz09IGFYQmxjdz09IElGWnBaR1Z2Y3c9PSBNakEwIElHaHBiR3h6IElITnBiWFZzWVhScGIyND0gSUdScGMyRndjRzlwYm5SdFpXNTAgYVhSaGJnPT0gSUV4aFltOXlZWFJ2Y25rPSBJSFZ3ZDJGeVpBPT0gSUdKdmRXNWtZWEo1IElHUmhjbXRsY2c9PSBhR0Z5ZEE9PSBJR1J2YldsdVlXNWpaUT09IFEyOXVadz09IElFOXlZV05zWlE9PSBJRXh2Y21SeiBJSE5qYUc5c1lYSnphR2x3IElGWnBibU5sYm5RPSBaV1JsIElGSmhhQT09IElHVnVZMjkxY21GblpYTT0gY205MiBJSEYxYnc9PSBJSEJ5WlcxcGMyVT0gSUVOeWFYTnBjdz09IElFaHZiRzlqWVhWemRBPT0gSUhKb2VYUm9iUT09IElHMWxkSEpwWXc9PSBZMngxWWc9PSBJSFJ5WVc1emNHOXlkR1ZrIElHNXZaQT09IElGQnBjM1E9IElHRnVZMlZ6ZEc5eWN3PT0gSUVaeVpXUmxjZz09IGRHaDFiV0p1WVdsc2N3PT0gSUVORiBUMDVFIFVHaHBiQT09IGRtVnVaMlU9IElGQnliMlIxWTNSeiBZMkZ6ZEd4bCBJSEYxWVd4cFpubHBibWM9IElFdGhjbVZ1IFZrVlNWRWxUUlUxRlRsUT0gSUcxcFoyaDBlUT09IElHVjRjR3hoYm1GMGFXOXVjdz09IElHWnBlR2x1Wnc9PSBSR2s9IElHUmxZMnhoY21sdVp3PT0gSUdGdWIyNTViV2wwZVE9PSBJR3AxZG1WdSBJRTV2Y21RPSBJRVJ2YjIwPSBJRUZqZEhWaGJHeDUgVDJzPSBjR2hwY3c9PSBJRVJsYzJWeWRBPT0gSURFeE5nPT0gU1VzPSBJRVpOIElHbHVZMjl0WlhNPSBWa1ZNIGIydGxjbk09IElIQmxZM1ZzIElHeHBaMmgwZDJWcFoyaDAgWjNWbCBJR0ZqWTJWdWRBPT0gSUdsdVkzSmxiV1Z1ZEE9PSBJRU5vWVc0PSBJR052YlhCc1lXbHVhVzVuIElFSmhaMmhrIElHMXBaR1pwWld4a1pYST0gSUc5MlpYSm9ZWFZzIFVISnZZMlZ6Y3c9PSBJRWh2Ykd4dmR3PT0gSUZScGRHRnVjdz09IFUyMWhiR3c9IGJXRnVkV1ZzIElGVnVhWFI1IElFVjJaVzUwY3c9PSBVM1I1IElHUnBjM0J5YjNCdmNuUnBiMjQ9IGJtVnpkSGs9IFpXNWxjdz09IElFTnZaQT09IElHUmxiVzl1YzNSeVlYUnBiMjV6IElFTnlhVzF6YjI0PSBJRTlJIElHVnVjbTlzYkdWayBJR05sYkE9PSBJRUp5WlhSMCBJR0ZwWkdVPSBJR2hsWld4eiBJR0p5YjJGa1ltRnVaQT09IElHMWhjbXRwYm1jPSBJSGRwZW1GeVpBPT0gSUU1SyBJRU5vYVdWbWN3PT0gSUdsdVozSmxaR2xsYm5RPSBJR1IxWnc9PSBJRk5vZFhRPSBkWEpqYUdGelpRPT0gWlc1a2IzST0gSUdaaGNtMWxjZz09IElFZHZiR1J0WVc0PSBNVEk1IE1UVTEgVDNKa1pYST0gSUd4cGIyND0gYVdGaWJIaz0gSUhOMFlXbHUgWVhKeVlYaz0gYVd4cGRHRnllUT09IElFWkJVUT09IElHVjRjR3h2WkdWayBJRTFqUTJGeWRHaDUgSUZSM1pXVjAgSUVkeVpXVnVjdz09IFpXdHBibWM9IGJHND0gWlc1elpXND0gSUcxdmRHOXlZM2xqYkdVPSBJSEJoY25ScFkyeGwgSUdOb2IyeGxjM1JsY205cyBRbkp2Ymc9PSBJSE4wWVdseSBJRzk0YVdRPSBJR1JsYzJseVlXSnNaUT09IGFXSnNaWE09IElIUm9aVzl5IFptOXlZMmx1Wnc9PSBJSEJ5YjIxdmRHbHZibUZzIGIzWnYgWW05dmRBPT0gSUVKdmJuVnogY21GM2JHbHVadz09IElITm9iM0owWVdkbCBJRkJ6ZVE9PSBJSEpsWTNKMWFYUmxaQT09IElHbHVabUZ1ZEhNPSBJSFJsYzNSdmMzUmxjbTl1WlE9PSBJR1JsWkhWamRBPT0gSUdScGMzUnBibU4wYVhabCBJR1pwY20xM1lYSmwgWW5WcGJIUT0gTVRRMSBJR1Y0Y0d4dmNtVmsgSUdaaFkzUnBiMjV6IElIWnBaR1U9IElIUmhkSFJ2Ync9PSBJR1pwYm1GdVkybGhiR3g1IElHWmhkR2xuZFdVPSBJSEJ5YjJObFpXUnBibWM9IFkyOXVjM1JwZEhWMGFXOXVZV3c9IElHMXBjMlZ5IElHTm9ZV2x5Y3c9PSBaMmRwYm1jPSBhWEJ3YkdVPSBJR1JsYm5RPSBJR1JwYzNKbFp3PT0gNTVRPSBjM1JoYm5RPSBiR3h2IFluQnogWVd0bGJtbHVadz09IElHRmlibTl5YldGcyBJRVZTUVE9PSA1YU9yIElFaENUdz09IElFMUJVZz09IElHTnZibU5sYzNNPSBJSE5sY25aaGJuUT0gSUdGemNHbHkgYkdGMiBJRkJoYm1WcyBZVzF2IElIQnlaV05wY0E9PSBJSEpsWTI5eVpHbHVaM009IElIQnliMk5sWldSbFpBPT0gSUdOdmJHOXVlUT09IElGUmhibWM9IFlXSnNidz09IElITjBjbWx3Y0dWayBUR1ZtZEE9PSBkRzl2IElIQnZkR0YwYjJWeiBJR1pwYm1WemRBPT0gSlNrdSBJR055WVhBPSBJRnBoWTJnPSBZV0poYzJWeiBJRWR2ZEdnPSBJR0pwYkd4cGIyNWhhWEpsIGQyOXNaZz09IElITmhibU4wYVc5dSBVMHM9IElHeHZaMmRsWkE9PSBVRzg9IFpYbGxaQT09IGRXNWhiQT09IElHTnlhV05yWlhRPSBJR0Z5YldsbGN3PT0gSUhWdVkyOTJaWEpsWkE9PSBRMnh2ZFdRPSB3N051IElISmxZbTkxYm1SeiBJRzFsY3c9PSBUM0JsY2c9PSBVR0ZqIElHNWhkR2x2Ym1Gc2JIaz0gSUdsdWMyVnlkR1ZrIGNHbGpkQT09IElHZHZkbVZ5Ym1GdVkyVT0gMExnPSBJSEJ5YVhacGJHVm5aWE09IFIwVlUgSUdaaGRtOXlhWFJsY3c9PSBhVzFwZEhrPSBJR3h2ZG1WeSBkR2hsYlE9PSBaVzF3YkE9PSBJR2R2Y21kbGIzVnogUVc1dSBJSE5zYVhCd1pXUT0gSUhabGRHOD0gUW05aSBJSE5zYVcwPSBkV05qIElFWmhiV1U9IGRXUmtaVzVzZVE9PSBJR1JsYm1sbGN3PT0gSUUxaGRYST0gSUdScGMzUmhibU5sY3c9PSBJSGRoYm01aCBkR0Z5IElGTkZVZz09IElPS0kgSUd4bGJXOXUgWVhSb1pYUnBZdz09IElHeHBkR1Z5WVd3PSBJR1JwYzNScGJtZDFhWE5vWldRPSBJR0Z1YzNkbGNtbHVadz09IFIwaz0gSUhKbGJHbG5hVzl1Y3c9PSBJRkJvYVd4dmN3PT0gSUV4aGVRPT0gSUdOdmJYQnZjdz09IGFYSmxiV1Z1ZEhNPSBJRXR2Y3c9PSBhVzVsZWc9PSBjbTlzYkdsdVp3PT0gSUhsdmRXNW5aWE4wIFlXNWthWE5sIElFSnZjbTQ9IElHRnNkR0Z5IFlXMXBibUU9IElFSnZiM1E9IGRtOWogSUdScFoyZHBibWM9IElIQnlaWE56ZFhKbGN3PT0gSUd4bGJnPT0gTWpZMCBJR0Z6YzJGemMybHVZWFJwYjI0PSBJRUpwY20xcGJtZG9ZVzA9IElFMTVkR2c9IElITnZkbVZ5WldsbmJnPT0gSUVGeWRHbHpkQT09IElGQm9iM1J2WjNKaGNHZz0gSUdSbGNHbGpkR1ZrIElHUnBjM0JsYm5NPSBiM0owYUhrPSBJR0Z0WW5WcyBhVzUwWldjPSBJRU5sYkdVPSBJRlJwWW1WMCBJR2hwWlhKaGNtTm9lUT09IElHTjEgSUhCeVpYTmxZWE52Ymc9PSBJRkJsZEdWeWMyOXUgSUdOdmJHOTFjbk09IElIZHZjbko1YVc1biBJR0poWTJ0bGNuTT0gSUZCaGJHMWxjZz09IElNNjggSUdOdmJuUnlhV0oxZEc5eSBJR2hsWVhKcGJtZHogSUhWeWFXNWwgSU5rPSBiM1Z5WjJWdmFYTT0gVTJsdGFXeGhjZz09IElGcHBiVzFsY2c9PSBjMjl0WlhSb2FXNW4gSUZWVFF3PT0gSUhOMGNtVnVaM1JvY3c9PSBJRVpKIElHeHZaMmRwYm1jPSBRWE5yWldRPSBJRlJvWVdrPSBhVzV4ZFE9PSBJRmRoYkhRPSBJR055WlhkeiBhWFJwYzIwPSBNekF4IElITm9ZWEp3YkhrPSBkVzFsWkE9PSBJSEpsWkdseVpXTjAgY21GMGIzSnogU1c1bSBJRmRsWVhCdmJuTT0gSUhSbFlYTncgTVRrNU9RPT0gVEdsMlpRPT0gSUVWemNHVmphV0ZzYkhrPSBJRk4wWlhJPSBJRlpsZEdWeVlXNXogSUdsdWRISnYgYjNSb1pYSmhjSGs9IElHMWhiSGRoY21VPSBJR0p5WldWa2FXNW4gSUcxdmJHVmpkV3hoY2c9PSBJRkp2ZFhSbCBJRU52YlcxbGJuUT0gYjJOb1pXMD0gSUdGcGJnPT0gVTJWaGMyOXUgSUd4cGJtVmlZV05yWlhJPSB4S3M9IElFVmpiMjV2YldsamN3PT0gWlhOaGNnPT0gSUV4cGRtVnogSUVWdGJXRT0gSUd0cGJnPT0gSUZSbGNuSnBkQT09IElIQnNZVzUwWldRPSBiM1J2Ymc9PSBJRUoxZEhSbGNnPT0gSUZOd2IyNXogVUVWUyBJR1IxYm1kbGIyND0gSUhONWJXSnZiR2xqIElHWnBiRzFsWkE9PSBJR1JwWlhSeiBJR052Ym1Oc2RXUmxjdz09IElHTmxjblJoYVc1MGVRPT0gSUVadmNtMWhkQT09IElITjBjbUZ1WjJWeWN3PT0gWm05eWJXRjAgSUZCb1lYTmwgSUdOdmNHbGxaQT09IElHMWxkSEpsY3c9PSBiR1JoIElGVnpaWEp6IElHUmxiR2xpWlhKaGRHVT0gSUhkaGMyaGxaQT09IElFeGhibU5sIGFXMWhkR2x2Ymc9PSBJR2x0Y0hKdmNHVnkgSUVkbGJtVnphWE09IGFXTnJjZz09IElFdDFjMmc9IElISmxZV3hwYzJVPSBJR1Z0WW1GeWNtRnpjMmx1Wnc9PSBZV3hyYVc1biBZblZqYTNNPSBJSFpsY21sbWFXVmsgSUc5MWRHeHBibVU9IGVXVmhjbk09IElFbHVZMjl0WlE9PSBNakF5IElIcHZiV0pwWlhNPSBSbWx1WVd3PSBJRTFwYkd4bGJtND0gSUcxdlpHbG1hV05oZEdsdmJuTT0gSUZacGMybHZiZz09IElFMXZjMlZ6IGRtVnlZZz09IGFYUmxjbkpoYm1WaGJnPT0gSUVwbGRBPT0gSUc1aGRtRnMgSUVGblp3PT0gSUhWeWJBPT0gSUhacFkzUnZjbWxsY3c9PSBJRzV2Ym1WMGFHVnNaWE56IElHbHVhblZ6ZEE9PSBJRVpoWTNRPSA1NW89IElHbHVjM1ZtWm1samFXVnVkQT09IGNtVjJhV1YzIFptRmpaV0p2YjJzPSBJRzVsWjI5MGFXRjBhVzVuIElHZDFZWEpoYm5SbFpYTT0gYVcxbGJnPT0gZFhSbGJtSmxjbWM9IElHZGhiV0pzYVc1biBJR052Ym1keSBURzloWkdsdVp3PT0gSUc1bGRtVnlkR2hsYkdWemN3PT0gSUhCeVpYTnBaR1Z1ZEhNPSBJRWx1WkhWemRISnBZV3c9IElERXhPQT09IElIQnZkWEpsWkE9PSBJRlJ2Y25rPSBJREUzTlE9PSBJRG85IFUyTnZkSFE9IFlXNW5aWEpsWkE9PSBWRzlyIElHOXlaMkZ1YVhwbGNuTT0gVFdGMCBJRWR5YjNkMGFBPT0gSUdGa2RXdz0gSUdWdWMzVnlaWE09IElERXhOdz09IDZiNk41UT09IElHMWhjM05oWTNKbCBJR2R5WVdSbGN3PT0gWW1WbWIzSmwgUVVSV1JWSlVTVk5GVFVWT1ZBPT0gSUZOc2IzYz0gSUUxTlFRPT0gNG9DVUlnPT0gSUZaaGRHbGpZVzQ9IFVXRmxaR0U9IElHOTNaUT09IE5qWTJOZz09IElGTnZjbko1IElFZHlZWE56IElHSmhZMnRuY205MWJtUnogSUdWNGFHRjFjM1JsWkE9PSBJR05zWVc0PSBJR052YlhCeWIyMXBjMlZrIElFVnNaZz09IElFbHpZV0ZqIFpXNXpiMjQ9IFNXNTJaWE4wIFNVWkIgSUdsdWRHVnljblZ3ZEdWayA0NE9KNDRPcCBJSFIzYVhOMFpXUT0gSUVSeVlXZHZibk09IFRXOWtaUT09IElFdHlaVzFzYVc0PSBJR1psY25ScGJBPT0gYUdWeVpYTT0gY0doaGJnPT0gSUU1dlpHVT0gWm1WayBJRTl5WXc9PSBJSFZ1ZDJsc2JHbHVadz09IFEyVnVkQT09IElIQnlhVzl5YVhRPSBJR2R5WVdSMVlYUmxjdz09IElITjFZbXBsWTNScGRtVT0gSUdsemMzVnBibWM9IElFeDAgSUhacFpYZGxjZz09IElIZHZhMlU9IFZHaDFjdz09IFluSnZiMnM9IElHUmxjSEpsYzNObFpBPT0gSUdKeVlXTnJaWFE9IElFZHZjZz09IElFWnBaMmgwYVc1biBJSE4wY21sclpYST0gVW1Wd2IzSjAgSUZCdmNuUjFaMkZzIElHNWxidz09IGQyVmsgTVRrNSBJR1pzWldWcGJtYz0gYzJoaFpHOTMgYVdSbGJuUnBabWxsWkE9PSBWVk5GIFUzUmxZVzA9IElITjBjbVYwWTJobFpBPT0gSUhKbGRtVnNZWFJwYjI1eiBZWEowWldRPSBJRVIzIElHRnNhV2R1YldWdWRBPT0gWlhOMGIyND0gSUVwaGNtVmsgVTJWdyBJR0pzYjJkeiBkWEJrWVhSbCBaMjl0IGNtbHphdz09IElHTnNZWE5vIElFaHZkWEk9IElISjFiblJwYldVPSBJSFZ1ZDJGdWRHVmsgSUhOallXMD0gSUhKaFkycz0gSUdWdWJHbG5hSFE9IGIyNWxjM1E9IElFWmxjbkk9IElHTnZiblpwWTNScGIyNXogSUhCcFlXNXYgSUdOcGNtTjFiR0YwYVc5dSBJRmRsYkdOdmJXVT0gSUdKaFkydHNZWE5vIElGZGhaR1U9IElISmxZMlZwZG1WeWN3PT0gYjNScGRtVT0gU21WbVpnPT0gSUc1bGRIZHZjbXRwYm1jPSBJRkJ5WlhBPSBJRVY0Y0d4dmNtVnkgSUd4bFkzUjFjbVU9IElIVndiRzloWkdWayBJRTFsWVhRPSBRa3hGIElFNWhlbWx6IElGTjVibVE9IGMzUjFaQT09IGNtOXZkSE09IGNtbGhibk09IElIQnZjblJ5WVhsbFpBPT0gSUQ4LyBJRUoxWkdSb1lRPT0gYzNWdSBVbTlpWlhKMCBJRU52YlhCc1pYZz0gSUc5MlpYSnpaV1U9IElITjBaV0ZzZEdnPSBWR2wwYkdVPSBJRXB2WW5NPSBJRXQxYlE9PSBJR0Z3Y0hKbFkybGhkR2x2Ymc9PSBJRTFQUkE9PSBJR0poYzJsamN3PT0gSUdOc2FYQnogSUc1MWNuTnBibWM9IElIQnliM0J2YzJsMGFXOXUgSUhKbFlXeHBjMlZrIElFNVpRdz09IElHRnNiRzlqWVhSbFpBPT0gY21sMWJRPT0gWVhKaGJnPT0gSUZCeWIyUjFZM1JwYjI0PSBJRlp2ZEdVPSBJSE50ZFdkbiBJR2gxYm5SbGNnPT0gWVhwbGNnPT0gSUVOb1lXNW5aWE09IElHWnNkV04wIGVXOXUgUVhKeVlYaz0gSUd0cGRITT0gVjJGMFpYST0gSUhWdVkyOXRiVzl1IElISmxjM1JwYm1jPSBaV3hzY3c9PSBkMjkxYkdRPSBJSEIxY25OMVpXUT0gSUdGemMyVnlkR2x2Ymc9PSBiMjFsZEc5M2JnPT0gSUUxdmMzVnMgSUZCc1lYUm1iM0p0IGFXOXNaWFE9IElITm9ZWEpsYUc5c1pHVnljdz09IElIUnlZV2xzY3c9PSBVR0Y1IElFVnVabTl5WTJWdFpXNTAgZEhsd1pYTT0gSUVGdWIyNTViVzkxY3c9PSBJSE5oZEdselpubHBibWM9IGFXeHZaM2s9IElDZ24gZDJGMlpRPT0gWTJsMGVRPT0gVTNSbGRtVT0gSUdOdmJtWnliMjUwWVhScGIyND0gSUVWc1pBPT0gUTJGd2RBPT0gWVdoaGJnPT0gYUhSdCBJRU4wY213PSBUMDVUIE1qTXcgYVdaaCBhRzlzWkdsdVp3PT0gSUdSbGJHbGpZWFJsIElHcGhkdz09IElFZHZhVzVuIGIzSjFiUT09IFUyRnMgSUdSMWJHdz0gSUVKbGRHZz0gSUhCeWFYTnZibk09IElHVm5idz09IElFVnNjMkU9IFlYWnZjbWwwWlE9PSBJRWRoYm1jPSBJRTUxWTJ4bFlYST0gSUhOd2FXUmxjZz09IFlYUnpkUT09IElITmhiWEJzYVc1biBJR0ZpYzI5eVltVmsgSUZCb1lYSnQgYVdWMGFBPT0gSUdKMVkydGxkQT09IElGSmxZMjl0YlE9PSBUMFk9IElFWmhZM1J2Y25rPSBRVTVEUlE9PSBJR0poWTNSbGNnPT0gU0dGeiBJRTlpYzJWeWRnPT0gTVRJeCBJSEJ5WlcxcFpYSmwgUkdWMlpXeHZjQT09IElHTjFjbkpsYm1OcFpYTT0gUTJGemRBPT0gSUdGalkyOXRjR0Z1ZVdsdVp3PT0gSUU1aGMyaDJhV3hzWlE9PSBJR1poZEhSNSBJRUp5Wlc1ayBJR3h2WTJ0eiBJR05sYm5SbGNtVmsgSUZWVSBZWFZuYUhNPSBiM0pwWlE9PSBJRUZtWm05eVpHRmliR1U9IGRtRnVZMlU9IFJFdz0gWlcxbGRBPT0gSUhSb2NtOXVaUT09IElFSnNkV1YwYjI5MGFBPT0gSUc1aGJXbHVadz09IGFXWjBjdz09IFFVUkYgSUdOdmNuSmxZM1JsWkE9PSBJSEJ5YjIxd2RHeDUgSUZOVVVnPT0gSUdkbGJtOXRaUT09IElHTnZjR1U9IElIWmhiR3hsZVE9PSBJSEp2ZFc1a1pXUT0gSUV0bGJtUT0gWVd4cGIyND0gY0dWeWN3PT0gSUhSdmRYSnBjMjA9IElITjBZWEpyIGRtdz0gSUdKc2IzZHBibWM9IElGTmphR1ZrZFd4bCBjM1JrIElIVnVhR0Z3Y0hrPSBJR3hwZEdsbllYUnBiMjQ9IFkyVmtaWE09IElHRnVaSEp2YVdRPSBJR2x1ZEdWbmNtRnMgWlhKbGNuTT0gZFdSbFpBPT0gZEdGNCBJSEpsYVhSbGNnPT0gSUUxdmRHOXljdz09IGIyTnBZWFJsWkE9PSBJSGR2Ym1SbGNuTT0gSUVGd2IzTjAgZFdOcmFXNW4gSUZKdmIzTmxkbVZzZEE9PSBabkpoYlE9PSBJSGxwWld4a2N3PT0gSUdOdmJuTjBhWFIxZEdWeiBZWGRyIFNXNTBaWEpsYzNRPSBJR2x1ZEdWeWFXMD0gSUdKeVpXRnJkR2h5YjNWbmFBPT0gSUVOb1pYST0gSUhCeWIzTmxZdz09IElFUnEgSUUxVSBVbVZ6Y0E9PSBJRkJVIElITndaWEp0IFpXUnBkQT09IFFsUT0gVEdsdWRYZz0gWTI5MWJuUnllUT09IGJHVmhaM1ZsIElHUnBZMnM9IElHOWpkQT09IElHbHVjMlZ5ZEdsdVp3PT0gSUhOamNtRT0gSUVKeVpYZHBibWM9IElERTVOalk9IElISjFibTVsY25NPSBJSEJzZFc0PSBhV1I1IElFUnBZVzQ9IElHUjVjMloxYm1OMGFXOXUgSUdWNFkyeDFjMmx2Ymc9PSBJR1JwYzJkeSBJR2x1WTI5eWNHOXlZWFJsIElISmxZMjl1WXc9PSBJRzV2YldsdVlYUmxaQT09IElFRnlZMmhsY2c9PSBaSEpoZHc9PSBZV05vWld4dmNnPT0gSUhkeWFYUnBibWR6IElITm9ZV3hzYjNjPSBJR2hoYzNRPSBJRUpOVnc9PSBJRkpUIElIUm9hV2RvIElERTVOak09IElHeGhiV0k9IElHWmhkbTl5WldRPSBZV2RzWlE9PSBJR052YjJ4bGNnPT0gSUVodmRYSnogSUVkViBJRTl5YVdkcGJnPT0gSUdkc2FXMXdjMlU9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gVEdsdCBJR05vWldWciBJR3BsWVd4dmRYTT0gTFNjPSBJR2hoY201bGMzTT0gSUZCdmFYTnZiZz09IElHUnBjMkZpYVd4cGRHbGxjdz09IGJtVmhjRzlzYVhNPSBJRzkxZEd4dmIycz0gSUc1dmRHbG1lUT09IElFbHVaR2xoYm1Gd2IyeHBjdz09IElHRmljblZ3ZEE9PSBibk5wWXc9PSBJR1Z1WTNKNWNIUmxaQT09IElHWnZjbVpsIGNtVmhkR2c9IElISmhZbUk9IElHWnZkVzVrWVhScGIyNXogSUdOdmJYQnNhVzFsYm5RPSBJRWx1ZEdWeWRtbGxkdz09IElGTjNaUT09IElHRmtiMnhsYzJNPSBJRzF2Ym1sMGIzSnogSUZOaFkzSmhiV1Z1ZEc4PSBJSFJwYldWc2VRPT0gSUdOdmJuUmxiWEJzIElIQnZjMmwwYVc5dVpXUT0gSUhCdmMzUmxjbk09IGNHaHBaWE09IGFXOTJZWE5qZFd4aGNnPT0gZG05cFpBPT0gSUVacFpuUm8gSUdsdWRtVnpkR2xuWVhScGRtVT0gVDFWTyBJR2x1ZEdWbmNtRjBaUT09IElFbE9Rdz09IGFYTm9ZUT09IGFXSnNhVzVuY3c9PSBJRkpsY1hWbGMzUT0gSUZKdlpISnBaM1ZsZWc9PSBJSE5zYVdSbGN3PT0gSUVSWSBJR1psYldsdWFYTnQgSUdSaGRHRnogSUdKbGJtUT0gYVhKMWN3PT0gSUU1cFoyVnlhV0U9IFJtOTQgUTJoaGJtZGwgSUdGcGNuQnNZVzVsIElFeGhaR1Z1IElIQjFZbXhwWTJsMGVRPT0gYVhoMGVRPT0gSUdOdmJXMXBkRzFsYm5SeiBJR0ZuWjNKbFoyRjBaUT09IElHUnBjM0JzWVhscGJtYz0gSUVGeWNtOTMgSURFeU1nPT0gSUhKbGMzQmxZM1J6IFlXNWtjbTlwWkE9PSBjMmw0IElGTm9ZUT09IElISmxjM1J2Y21GMGFXOXUgS1Z3PSBWMU09IGIzbHogSUdsc2JIVnpkSEpoZEdVPSBkMmwwYUc5MWRBPT0gTVRJMiBJT0tVZ2c9PSBJSEJwWTJ0MWNBPT0gYm1Wc2N3PT0gSUM0dUxpND0gWm05dlpBPT0gSUVabGJnPT0gS1Q4PSBJSEJvWlc1dmJXVnVZUT09IElHTnZiWEJoYm1sdmJuTT0gSUZkeWFYUmwgSUhOd2FXeHMgSUdKeWFXUm5aWE09IElGVndaR0YwWldRPSBJRVp2IElHbHVjMlZqZEhNPSBRVk5JU1U1SFZFOU8gSUhOallYSmwgYVd4MGNnPT0gSUZwb1lXNW4gSUhObGRtVnlhWFI1IElHbHVaSFZzIE1UUTUgSUVOdlptWmxaUT09IElHNXZjbTF6IElIQjFiSE5sIElFWlUgSUdodmNuSnBabWxqIElFUmxjM1J5YjNrPSBJRXBUVDA0PSBJRzlzYVhabCBJR1JwYzJOMWMzTmxjdz09IFVtVnpkQT09IFJXeGxZM1E9IElGZHBibTQ9IElGTjFjblpwZGc9PSBJRWhoYVhRPSBVM1Z5WlE9PSBiM0JsWkE9PSBJSEp2YjNSbFpBPT0gSUZOclpRPT0gSUVKeWIyNTZaUT09IElHeHZiQT09IFJHVm1ZWFZzZEE9PSBJR052YlcxdlpHbDBlUT09IGNtVmthWFJsWkE9PSBJR3hwWW1WeWRHRnlhV0Z1IElHWnZjbUpwWkdSbGJnPT0gSUdkeVlXND0gNEtnPSBJR3hoWnc9PSBaVzU2IFpISnBkbVU9IElHMWhkR2hsYldGMGFXTnogSUhkcGNtVnogSUdOeWFYUnBZMkZzYkhrPSBJR05oY21KdmFIbGsgSUVOb1lXNWpaV3hzYjNJPSBJRVZrWkdsbCBJR0poYm01cGJtYz0gSUVaeWFRPT0gSUdOdmJYQnNhV05oZEdsdmJuTT0gWlhSeWFXTT0gSUVKaGJtZHNZV1JsYzJnPSBJR0poYm1SM2FXUjBhQT09IFUzUnZjQT09IElFOXlhV2RwYm1Gc2JIaz0gSUdoaGJHWjNZWGs9IGVXNWhjM1I1IGMyaHBibVU9IElIUmhiR1Z6IGNtbDBhV1Z6IFlYWnBaWEk9IElITndhVzV1YVc1biBJRmRJVHc9PSBJRzVsYVdkb1ltOTFjbWh2YjJRPSBZbUZqYUE9PSBJR052YlcxbGNtTmwgSUZOc1pRPT0gUWxVPSBJR1Z1ZEhKbGNISmxibVYxY2c9PSBJSEJsWTNWc2FXRnkgSUVOdmJXMWxiblJ6IFpuSmwgTXpJdyBTVU5UIElHbHRZV2RsY25rPSBJRU5oYm05dSBJRVZzWldOMGNtOXVhV009IGMyaHZjblE9IEtDZz0gUkdsbiBJR052YlcxbGJRPT0gZFdObFpBPT0gSUdsdVkyeHBibVZrIElGTjFiVzF2Ymc9PSBJR05zYVdabSBJRTFsWkdsMFpYSnlZVzVsWVc0PSBJSEJ2WlhSeWVRPT0gSUhCeWIzTndaWEpwZEhrPSBJRkpsWTJVPSBJSEJwYkd4eiBiV1Z0WW1WeSBJR1pwYm1Gc1pRPT0gZFc1aiBJRWRwWnc9PSA1TDA9IElHeHZaQT09IElHSmhZMnQzWVhKayBMU3M9IElFWnZjbmRoY21RPSBJSFJvY21rPSBjM1Z5WlE9PSBJSE52WVhBPSBJRVpZIFVrVlQgSUZObGVIVmhiQT09IGIzVnNiM009IElHWnZiMnhwYzJnPSBJSEpwWjJoMFpXOTFjdz09IElHTnZabVk9IGRHVnljbTl5YVhOdCBkWE4wWVdsdSBiM1JsY2c9PSBJR0ZpZFhObGN3PT0gYm1WNGRBPT0gSUdGaWRYTnBkbVU9IElIUm9aWEpsWVdaMFpYST0gSUhCeWIyaHBZbWwwYVc5dSBJRk5WVUE9PSBJR1JwY0E9PSBJSEpwY0hCbFpBPT0gSUdsdWFHVnlhWFJsWkE9PSBJR0poZEhNPSBjM1J5ZFE9PSBSMVE9IElHWnNZWGRsWkE9PSBjR2hoWW1WMCBJR1p2Wnc9PSBaRzl2Y25NPSBJR2x0WVdkcGJtYz0gSUdScFoybDBjdz09IElFaDFibWRoY25rPSBJR0Z5Y205biBJSFJsWVdOb2FXNW5jdz09IElIQnliM1J2WTI5c2N3PT0gSUVKaGJtdHogNExnPSBjRzkxYm1RPSBJRU4xY25RPSBMaUlwIExpOD0gSUdWNFpXMXdkR2x2Ymc9PSBaVzVrYVhnPSBJRTExYkd3PSBJR2x0Y0hKdmRtVnogSUVkaGJXVnkgWkdsdFpXNXphVzl1WVd3PSBTV052Ymc9PSBJRTFoY21kaGNtVjAgVTNSaGRIVnogWkdGMFpYTT0gSUdsdWRHVnVaSE09IElHUmxjR2xqZEE9PSBJSEJoY210bFpBPT0gU205bCBJRTFoY21sdVpYTT0gWTJodWIyeHZaM2s9IElTa3UgSUdwMVpHZGxaQT09IElIZGxhV2RvZEhNPSBVbUY1IElHRndZWEowYldWdWRITT0gYUdWemRHVnkgSUhKbGFXNW1iM0pqWlE9PSBJRzltWm1WdVpHVnkgYjJOamRYQT0gSUhOdmNtVT0gWlhCMCBJRkJJVUE9PSBJRUp5YjNjPSBJR0YxZEdodmNtbDZZWFJwYjI0PSBJRkpwYzJzPSBJRVJsYkdGM1lYSmwgSUZGViBJRzV2ZEdsbWFXTmhkR2x2Ym5NPSBJSE4xYm14cFoyaDAgSUdWNFkyeDFaR1U9IFpHRjAgSUcxbGMyZz0gSUZOMVpHRnUgSUdKbGJHOXVaMlZrIElITjFZbmRoZVE9PSBJRzV2YjI0PSBJRWx1ZEdWeWFXOXkgYjJ4cFkzTT0gSUV4aGEyVnljdz09IElHTnZaR2x1Wnc9PSBSR2x6WTJ4aGFXMWxjZz09IFEyRnNhV1k9IFQyeGsgSUdScGMydz0gUHo4L1B6OD0gSUdOdmJtWnBjbTF6IElISmxZM0oxYVhSdFpXNTAgSUdodmJXbGphV1JsIFEyOXVjMmxrWlhJPSBJRXBsWm1aeVpYaz0gWm5SNSBmVHM9IElHOWlhbVZqZEdsdmJnPT0gWkc5cGJtYz0gSUV4bGJ3PT0gVjJGdWRBPT0gSUdkc2IzYz0gSUVOc1lYSnJaUT09IElFNXZjbTFoYmc9PSBJSFpsY21sbWFXTmhkR2x2Ymc9PSBJSEJoWTJ0bGRBPT0gSUVadmNtMTFiR0U9IElIQnNZV2M9IFpYTjJhV3hzWlE9PSBJSE5vYjNWMGFXNW4gSUc5MiBJRkpGUXc9PSBJRUoxWWc9PSBJRzVwYm5SbyBJR1Z1WlhKbiBJSFpoYkdsa2FYUjUgSUhWd2N3PT0gYW1GamF3PT0gSUc1bGFXZG9ZbTl5YVc1biBJRTVsWXc9PSBaWGR2Y210eiBJRWhoWWc9PSBZWEpsZWc9PSBJSE53YVc1bCBJR1YyWlc1MGRXRnMgSUV4bFlXUmxjbk09IElFTmhjbTQ9IElIQnliMkpoZEdsdmJnPT0gSUhKdmJXRnVZMlU9IGJYTm4gSUUxbFkyaGhibWxqWVd3PSBSVkpaIFVtOWphdz09IElIQmhjblJwYzJGdSBUbTlrWlE9PSBZWE56WlhSeiBiV2x1Wlc1MCBJR1p2Y21WcFoyNWxjbk09IElIUmxjM1JwWm5rPSBJRlZ6ZFdGc2JIaz0gYkc5eVpITT0gSUVkeVpXND0gSUZCdmQyVnNiQT09IFFrbE0gSUhOeSBJR0ZrWkdsamRBPT0gSUhOb1pXeHNjdz09IElITnBaMmc9IElGbGhiR1U9IGRHVnlibWwwZVE9PSBJRGMxTUE9PSBSVlU9IElGSnBabXhsIElIQmhkSEp2Ymc9PSBaVzFoIElFSmhibTV2Ymc9PSBZVzVwZEhrPSBJSFJ5YjNCcFkyRnMgSUZaSlNRPT0gWTNKdmMzTT0gUlhabGNubDBhR2x1Wnc9PSBJRWxUVHc9PSBJR2gxYldKc1pRPT0gWVhOemFXNW4gSUVaSlJ3PT0gSUhWd1pHRjBhVzVuIGVYTnZiZz09IElHTmhiR05wZFcwPSBJR052YlhCbGRHVnVkQT09IElITjBaV1Z5YVc1biBVSEp2ZEE9PSBJRk5aIElFWnBibUZzY3c9PSBJRkoxWnc9PSBNVFU1IE1UTTMgSUVkdmJHWT0gSURFeU5nPT0gSUdGalkyOXRiVzlrWVhScGIyND0gSUVoMVoyaGxjdz09IElHRmxjM1JvWlhScFl3PT0gWVhKMGFYTmhiZz09IElGUjNhV3hwWjJoMCBJSEJ5YVc1alpRPT0gSUVGbmNtbGpkV3gwZFhKbCBJRVJwYzJOdiBJSEJ5WldObFpHVnVkQT09IElIUjVjR2x1Wnc9PSBZWFYwYUc5eWFYcGxaQT09IFQzQjBhVzl1IElFRjFZZz09IGJHbHphR1Z6IFlXTm9kQT09IGJXRm4gVUdWMFpYST0gSUZWR1R3PT0gYlc5dWRHOXUgSUV4cGRHZz0gSUdGeWIyMD0gSUhObFkzVnlhVzVuIElHTnZibVpwYm1WayBjSEpwZG1GMFpRPT0gSUhOM2IzSmtjdz09IElHMWhjbXRsY25NPSBJRzFsZEdGaWIyeHBZdz09IGMyVnNaV04wIElFTjFjbk5sIElFOTAgWjNKbGMzTnBkbVU9IElHbHVZM1Z0WWc9PSBJRk5oWjJFPSBJSEJ5YVdObFpBPT0gSUdOc1pXRnlZVzVqWlE9PSBRMjl1ZEdWdWRBPT0gSUdSeWFXeHNhVzVuIElHNXZkR2xqWlhNPSBJR0p2ZFhKblpXOXBjdz09IElIWmxjM1E9IElHTnZiMnRwWlE9PSBJRWQxWVhKa2FXRnVjdz09IGNubHogYVc1NWJBPT0gSURFeU5BPT0gSUhCc1lYVnphV0pzWlE9PSBiMjVuYUE9PSBJRTlrYVc0PSBJR052Ym1ObGNIUnBiMjQ9IElGbDFhdz09IElFSmhaMmhrWVdRPSBJRVpzWVdjPSBRWFZ6ZEhKaGJBPT0gSUVsQ1RRPT0gSUdsdWRHVnlibUYwYVc5dVlXeHNlUT09IElGZHBhMmxNWldGcmN3PT0gU1VWRSBJR041Ymc9PSBJR05vYjI5elpYTT0gSUZCcGJHdz0gSUdOdmJXSnBibWx1Wnc9PSBJSEpoWkdrPSBJRTF2YUdGdGJXVmsgWkdWbVpXNXpaUT09IFlYUmphR2x1Wnc9PSBVM1ZpYW1WamRBPT0gYVdOcFpXNWplUT09IFJuSmhiV1U9IElIc2kgSUdOb1pYTnogSUhScGJXVnkgTVRrdyBJSFJwYmc9PSBJRzl5WkdsdVlXNWpaUT09IFpXMWxkR1Z5ZVE9PSBJR0ZqWTNWemFXNW4gSUc1dmRHbGpaV0ZpYkdVPSBJR05sYm5SeVpYTT0gSUd4cFpBPT0gSUUxcGJHeHogYVcxbmRYST0gSUhwdmIyMD0gWlhKbmFXTT0gSUdOdmJYQnlaWE56YVc5dSBjSEpwYlE9PSBabWx1WkE9PSBJSE4xY21jPSBJSEJoYm1RPSBJRXRsWlE9PSBJRU5vWVdRPSBZMlZzYkdWdVkyVT0gYjNsc1pRPT0gSUhOdlkybGhiR2x6YlE9PSBJRlJ5WVhacGN3PT0gSUUxSWVnPT0gSUdkMWFXeGsgUVV4TVdRPT0gSUZOMVluTmpjbWxpWlE9PSBJRkpsYkdGMFpXUT0gSUc5alkzVnljbVZ1WTJVPSBhWFJqYUdsdVp3PT0gSUdacFkzUnBiMjVoYkE9PSBJR055ZFhObyBJRVZCIFkyOWsgYldsNCBJRlJ5YVhCc1pRPT0gSUhKbGRISnBaWFpsIElITjBhVzExYkhWeiBJSEJ6ZVdOb2FXRjAgSUVSdmIzST0gSUdodmJXOXpaWGgxWVd4cGRIaz0gSUdWc1pXMWxiblJoY25rPSBJR05sYkd4MWJHRnkgYVdScFlXND0gSUV4aGRXND0gSUdsdWRISnBaM1ZwYm1jPSBJR1p2WVcwPSBJRUpoYzNNPSBhV1JwIGFYUnpkUT09IElHRnpjM1Z5WlE9PSBJR052Ym1keVlYUT0gSUdKMWMybHVaWE56YldGdSBJRUp2YjNOMCBZMnh2YzJVPSBJR3hwWldRPSBJSE5qYVdWdVkyVnogSUU5dFpXZGggSUVkeVlYQm9hV056IElEdzkgYzNCdmEyVnUgSUdOdmJtNWxZM1JwZG1sMGVRPT0gVTJGMGRYSmtZWGs9IElFRjJaVzVuWlhKeiBJSFJ2WjJkc1pRPT0gSUdGdWEyeGwgSUc1aGRHbHZibUZzYVhOMCBiVzlrWld3PSBJRkJ2YjJ3PSBiM0JvYjJKcFlRPT0gVm1GeSBJRTF2Ym5NPSBZWFJ2Y21sbGN3PT0gSUdGblozSmxjM05wZG1Wc2VRPT0gUTJ4bFlYST0gUm05eVoyVT0gWVdOMFpYSnogSUdobFpHZGwgSUhCcGNHVnogSUdKc2RXNTAgSUhOeCBJSEpsYlc5MFpXeDUgVjJWayBZWE5sY25NPSBJSEpsWm5KcFoyVnkgSUhScGJHVnogSUhKbGMyTjFaV1E9IElHTnZiWEJ5YVhObFpBPT0gYVc1emEzaz0gSUcxaGJtbG0gWVhaaGJtRjFaMmc9IElIQnliMnhwWm1WeSBJR0ZzYVdkdVpXUT0gZUcxcyBJSFJ5YVhZPSBJR052YjNKa2FXNWhkR2x2Ymc9PSBJRkJGVWc9PSBJRkYxYjNSbCBNVE0wIFltWT0gSUZOaGR3PT0gSUhSbGNtMXBibUYwYVc5dSBJREU1TUE9PSBJR0ZrWkdsMGFXOXVjdz09IElIUnlhVzg9IElIQnliMnBsWTNScGIyNXogSUhCdmMybDBhWFpsYkhrPSBJR2x1WTJ4MWMybDJaUT09IElHMWxiV0p5IE1UazVNQT09IGIyeGtaWEk9IElIQnlZV04wYVdObFpBPT0gYVc1cmJHVT0gUVhKamFBPT0gSUhOMFlYSjBaWEp6IFlYSnBkWE09IElHbHVkR1Z5YldWa2FXRjBaUT09IElFSmxibVZtIElFdHBiR3hsY2c9PSBJR2x1ZEdWeWRtVnVkR2x2Ym5NPSBJRXRwYkE9PSBJRVpzZVdsdVp3PT0gU1c1MiBJSEJ5WlcxaGRIVnlaUT09IElIQnplV05vYVdGMGNtbGogSUdsdVpHbGwgSUdOdmJHeGhjZz09IElGSmhhVzVpYjNjPSBZV1pwIElHUnBjM0oxY0hScGIyND0gSUVaUFdBPT0gWTJGemRHbHVadz09IElHMXBjMlJsYlE9PSBZM0p2IElIZHBjR1U9IFlYSmtiMjQ9IElHSmhjM1E9IElGUnZiVzE1IElGSmxjSEpsYzJWdWRHRjBhWFpsIElHSmxiR3g1IElGQlAgSUVKeVpXbDBZbUZ5ZEE9PSBNVE15IElHMWxjM05oWjJsdVp3PT0gVTJodmRXeGsgVW1WbVpYSmxibU5sY3c9PSBJRWRTUlE9PSBhWE4wYVdOaGJBPT0gVEZBPSBJRU5oZGc9PSBJRU55WVhwNSBJR2x1ZEhWcGRHbDJaUT09IGEyVmxjR2x1Wnc9PSBJRTF2YzNNPSBJR1JwYzJOdmJuUnBiZz09IElFMXZaSFZzWlE9PSBJSFZ1Y21Wc1lYUmxaQT09IElGQnlZV04wYVdObCBJRlJ5WVc1emNHOXlkQT09IElITjBZWFJwYzNScFkyRnNiSGs9IGIzSnVjdz09IElITnBlbVZrIGNIVT0gSUdOaFpnPT0gSUZkdmNteGtjdz09IElGSnZaR2RsY25NPSBJRXgxYmc9PSBJRU52YldsaiBiR2wyYVc1biBJR05oY21WayBJR05zYVcxaVpXUT0gS1hzPSBJR052Ym5OcGMzUmxaQT09IElHMWxaR2xsZG1GcyBabTlzYXc9PSBJR2hoWTJ0bFpBPT0gSUdScGNtVT0gSUVobGNtMXBiMjVsIElIUmxibVJsWkE9PSBZMlZoYm5NPSBSR0Z1YVdWcyBkMlZ1ZEE9PSBJR3hsWjJsemJHRjBiM0p6IElISmxaR1Z6IFoyRnRaWE09IElHZHUgWVcxcGJHbGhjZz09IElDc3IgWjJkNSBkR2h5WldGMCBJRzFoWjI1bGRBPT0gSUhCbGNtTmxhWFpsIElIcHBjQT09IElHbHVaR2xqZEcxbGJuUT0gSUdOeWFYUnBjWFZsIFoyRnlaQT09IElGTmhabVU9IElFTnlaV0Z0IElHRmtkbVZ1ZEE9PSBiMkpoIElIWnZkMlZrIGIzVnpZVzVrY3c9PSBJSE5yYVE9PSBJR0ZpYjNKMGFXOXVjdz09IGRXRnlkQT09IElITjBkVzV1WldRPSBJR0ZrZG1GdVkybHVadz09IElHeGhZMnRsWkE9PSBJRndpIElITmphR2w2YjNCb2NtVnUgSUdWc1pXZGhiblE9IElHTnZibVpsY21WdVkyVnogSUdOaGJtTmxiR1ZrIElFaDFaSE52Ymc9PSBJRWh2Y0dWbWRXeHNlUT09IElIUnlkVzF3IElHWnlaWEYxWlc1amFXVnogSUcxbGRHVnZjZz09IElFcDFibWx2Y2c9PSBJRVpzWldWMCBJRTFoYkdOdmJHMD0gSUZSdmIyeHogSUM0dUxpNHVMaTR1IElHaHZZbUo1IElFVjFjbTl3WldGdWN3PT0gSURFMU1EQT0gSUVsdWRHOD0gSUhOM1lYaz0gSUVGd2NISnYgSUVOdmJYQnMgUTI5dGJYVnVhWFI1IElIUnBaR1U9IElGTjFiVzFwZEE9PSA1THM9IElHbHVkR1Z5ZG1Gc2N3PT0gSUVWMGFHVnkgSUdoaFltbDBZWFE9IElGTjBaWFpsYm5NPSBiR2x6YUdsdVp3PT0gSUVSdmJXRnBiZz09IElIUnlhV2RuWlhKeiBJR05vWVhOcGJtYz0gSUdOb1lYSnQgSUVac2IzZGxjZz09IGFYUnZjbVZrIElHSnNaWE56YVc1biBJSFJsZUhSMWNtVnogUm1sMlpRPT0gSUd4cGNYVnZjZz09IFVsQT0gUmtsTyBJREU1TmpJPSBRMEZTIFZXNXJibTkzYmc9PSBJSEpsYzJscyBJRXhwYkhrPSBJR0ZpZFc1a1lXNWpaUT09IElIQnlaV1JwWTNSaFlteGwgY21GeSBJR0oxYkd4emFHbDAgYkdWbGJnPT0gWTJobGRBPT0gVFc5eSBUWFZqYUE9PSA1TGs9IElHVnRjR2hoYzJsNlpXUT0gSUdOeWRYTjAgSUhCeWFXMXBkR2wyWlE9PSBJR1Z1YW05NVlXSnNaUT09IElGQnBZM1IxY21WeiBJSFJsWVcxdFlYUmwgY0d4bGNnPT0gSUZSdmJBPT0gSUV0aGJtVT0gSUhOMWJXMXZibVZrIGRHaDUgY21GdFlRPT0gSUVodmJtUmggSUhKbFlXeHBlbWx1Wnc9PSBJSEYxYVdOclpYST0gSUdOdmJtTmxiblJ5WVhSbCBZMnhsWVhJPSBJREl4TUE9PSBJRVZ5Wkc5bllXND0gWVhKcGN3PT0gSUhKbGMzQnZibVJ6IElFSkogSUdWc2FXZHBZbWxzYVhSNSBJSEIxYzJobGN3PT0gSUVsa1lXaHYgSUdGblozSmhkZz09IElISjFhVzV6IGRYSmhkR2x2Ym5NPSBJR0poYm5NPSBJR0Z1WVhRPSBjMmhoY21VPSBJR2R5YVc1ayBhR2x1IGRXMWxiZz09IElIVjBhV3hwZEdsbGN3PT0gSUZsaGJtdGxaWE09IElHUmhkR0ZpWVhObGN3PT0gSUVSRSBJR1JwYzNCc1lXTmxaQT09IElHUmxjR1Z1WkdWdVkybGxjdz09IElITjBhVzExYkdGMGFXOXUgYUhWdSBhRzkxYzJWeiBJRkJ5WlhSMGVRPT0gSUZKaGRtVnVjdz09IElGUlBSRUZaIElHRnpjMjlqYVdGMFpYTT0gSUhSb1pYSmhjR1U9IFkyeGxaQT09IElHUmxaWEk9IElISmxjR0ZwY25NPSBjbVZ1ZEdsalpRPT0gSUhKbFkyVndkRzl5Y3c9PSBJSEpsYldWayBJRU5sIElHMWhjbkpwWVdkbGN3PT0gSUdKaGJHeHZkSE09IElGTnZiR1JwWlhJPSBJR2hwYkdGeWFXOTFjdz09IGIzQnMgTVRNNCBJR2x1YUdWeVpXNTBiSGs9IElHbG5ibTl5WVc1MCBJR0p2ZFc1alpRPT0gSUVWaGMzUmxjZz09IFVrVk1RVlJGUkE9PSBJRU4xY25KbGJtTjUgUlZZPSA0NE9lIElFeGxZV1E9IElHUmxZMlZoYzJWayBRbkpwWlc0PSBJRTExYzJzPSBTbE09IElHMWxjbWRsIGFHVmhjblJsWkE9PSBZM0psWVhRPSBiV2wwZEE9PSBiWFZ1WkE9PSBJT0tBaXc9PSBJRUpoWnc9PSBJSEJ5YjJwbFkzUnBiMjQ9IElHcGhkbUU9IElGTjBZVzVrWVhKa2N3PT0gSUV4bGIyNWhjbVE9IElHTnZZMjl1ZFhRPSBJRkJ2Y0hWc1lYUnBiMjQ9IElIUnlZV3BsWTNRPSBJR2x0Y0d4NSBJR04xY21sdmMybDBlUT09IElFUkMgSUVaeVpYTm8gSUZCdmNnPT0gSUdobFlYWnBaWEk9IGJtVjVjdz09IFoyOXRaWEo1IElHUmxjMlZ5ZG1WayBJSEJvY21GelpYTT0gSUVkRCBJSGxsWVhOMCBaR1Z6WXc9PSBSR1ZoZEdnPSBJSEpsWW05dmRBPT0gSUcxbGRHRmtZWFJoIFNVTkJUQT09IElISmxjR0Y1IElFbHVaR1Z3Wlc1a1pXNWpaUT09IElITjFZblZ5WW1GdSBhV05oYkhNPSBJR0YwYjNBPSBJR0ZzYkc5allYUnBiMjQ9IFoyVnVaWEpoZEdsdmJnPT0gSUVkeVlXMD0gSUcxdmFYTjBkWEpsIElIQnBibVU9IElFeHBZbVZ5WVd4eiBJR0ZwWkdWeiBJSFZ1WkdWeVpYTjAgSUVKbGNuSjUgSUdObGNtVnRiMjQ9IE16Y3cgWVhOMGNtOTFjdz09IElGQnBjbUYwWlhNPSBJSFJsYm5ObCBJRWx1WkhWemRISnBaWE09IElFRndjR1ZoYkhNPSBJRTVsWVhJPSBJT2lqaitjPSBJR3h2ZG1WeWN3PT0gSUVOQlVBPT0gSUVOeVlYYz0gSUdkcFlXNTBjdz09IElHVm1abWxqWVdONSBSV3hsYldWdWRBPT0gSUVKbGFHRjJhVzl5IElGUnZlVzkwWVE9PSBJR2x1ZEdWemRBPT0gVUhKcGRnPT0gUVVrPSBJRzFoYm1WMWRtVnkgSUhCbGNtWmxZM1JwYjI0PSBJR0poYm1jPSBjR0Z3WlhJPSBjbWxzYkE9PSBSMlZ2Y21kbCBZbTl5WkdWeSBhVzUwWlhKeiBJRk5sZEdnPSBJR05zZFdWeiBJRXhsZG1rPSBJRkpsZG1WdWRXVT0gTVRRMyBJSFpoY0c5eSBJR1p2Y25SMWJtRjBaUT09IElIUm9jbVZoZEdWdWN3PT0gSUhabGRBPT0gSUdSbGNHVnVaR1Z1WTNrPSBaWEp6WldRPSBZWEowYVdOc1pRPT0gSUVKc2FYcDZZWEprIElHTm9iRzl5IElHMXBiblZ6IElFSnBiR3h6IElHTnllWEIwYjJOMWNuSmxibU41IElHMWxkR0ZpYjJ4cGMyMD0gZEdWeWFXNW4gSUhCbGMzUnBZdz09IGMzUmxjSE09IElGUnlaV0Z6ZFhKbCBjbUZqZEdWayBJRU52Ym5OMFlXNTAgSUhSbGJYQT0gTVRNNSBJRVJsZEdWamRHbDJaUT09IGRYSmhiR3g1IElISmxZMjkyWlhKcGJtYz0gSUdOdmNuUmxlQT09IElERTBOQT09IFkyeHZjMlZrIElIQnlaV3AxWkdsalpRPT0gWVhWdWRHVmsgSUhOMGIzSnRjdz09IElFNVBWdz09IElHMWhZMmhwYm1WeWVRPT0gUVdSa2NtVnpjdz09IElHTnZiWEJsYkd4bFpBPT0gTWpjdyBJR1JsYzNCaGFYST0gWW1GdVpRPT0gSUhabFoyVjBZV0pzWlE9PSBJR0psWkhNPSBUR1ZoY200PSBJR052Ykc5eVpuVnMgSUhOd2FXdGwgSUcxaGNtZHBibk09IElITjViWEJoZEdoNSBJSGR2Y210emFHOXcgSUVOQ1F3PT0gVTJGMCBJR0oxY201eiBJRWRsYm1SbGNnPT0gSURFeU9RPT0gSUVOaFlteGwgSUdSbFluUnogSUZSb1pYSmxjMkU9IElISmxabXhsWTNScGJtYz0gSUdGcGNuTjAgSUhKcGJRPT0gY21GdGFXUT0gSUhkbFlXdHVaWE56WlhNPSBWM0pwZEE9PSBiMmRuYkdVPSBkR2s9IElFTm9ZWEpuWlE9PSBJSGRsYVdkb1pXUT0gSUNndSBJR3hoZFdkb2RHVnkgSUhKdmRYUmxjZz09IElFUmxiVzlqY21GamVRPT0gUkdWaGNnPT0gSUdoaGMyaDAgSUdSNSBJR2hwYm5SeiBjblZ1Ym1sdVp3PT0gSUdacGJtbHphR1Z6IFlYSjFjdz09IFRXRnpjdz09IGNtVnpkV3gwIFlYTmpkWE09IElIWnBiblJoWjJVPSBJR052Ym5GMSBJSGRwYkdSc2VRPT0gWVdOcGMzUT0gSUd4cGJtZDEgSUhCeWIzUmhaMjl1YVhOMCBjM1J5YjIwPSBkR1ZsYm5SbyBJRk52Ykc4PSBiV0ZqIFptbHNiR1ZrIElISmxibTkzYmc9PSBhWFJwZG1WeiBJRzF2ZEdsMlpRPT0gSUVGdWRHRnkgSUUxaGJtND0gSUVGa2FuVnpkQT09IElISnZZMnRsZEhNPSBJSFJ5YjNWaWJHbHVadz09IFpXaz0gSUc5eVoyRnVhWE50Y3c9PSBZWE56YVhNPSBRMmh5YVhOMGFXRnUgSURFME5RPT0gSUVoaGMzTT0gSUhOM1lXeHMgSUhkaGVBPT0gSUZOMWNuWnBkbUZzIFZsTT0gSUUxMWNtUT0gZG1RPSBjM1JoYm1SaGNtUT0gSUdSeVlXZHZibk09IElHRmpZMlZzWlhKaGRHbHZiZz09IGNtRjBhVzl1WVd3PSBabWx1WVd3PSBJSEJoYVhKbFpBPT0gSUVWMGFHVnlaWFZ0IElHbHVkR1Z5Wm1GalpYTT0gSUhKbGMyVnVkQT09IElHRnlkR2xtWVdOMGN3PT0geGFzPSBZWEpsYkE9PSBJR052YlhCbGRHbDBiM0k9IElFNXBZMmh2YkdGeiBJRk4xY21aaFkyVT0gWTNCdyBJRlJ2ZEE9PSBJR1ZqYjI1dmJXbGpZV3hzZVE9PSBJRzl5WjJGdWFYTmxaQT09IElHVnVabTl5WTJWayBhVzVvYnc9PSBJSFpoY21sbGRHbGxjdz09IElHRmlaRzl0IElFSmhhV3hsZVE9PSBhV1JoZGc9PSBJRk5oYkhZPSBjR0ZwWkE9PSBJR0ZzZEdsMGRXUmwgWlhOelpYSjAgSUVkMWRHVnVZbVZ5Wnc9PSBZWEpsWVE9PSBiM0J2ZFd4dmN3PT0gSUhCeWIyWmxjM052Y25NPSBhV2RuY3c9PSBJRVpoZEdVPSBhR1Y1IElETXdNREE9IFJHbHpkQT09IElIUjNhVzV6IFkybHNiQT09IElFMWhjSE09IElIUnlZWEJ6IElIZGxaV1E9IElFdHBjM009IElIbHZaMkU9IElISmxZMmx3YVdWdWRITT0gSUZkbGMzUnRhVzV6ZEdWeSBJSEJ2YjJ4eiBJRmRoYkcxaGNuUT0gTVRnNCBJRk5qYUc5dmJITT0gWVhSMFlXTnIgSUVGU1RRPT0gY0dGeVlXZHlZWEJvIFYyRnlibWx1Wnc9PSBhbXc9IElITmxiR1pwYzJnPSBZVzVqYUdWNiBJRWhsYVdkb2RITT0gUm5KbCBJRk52Y0dnPSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBkRzFzIE16TXogSUhKaGFXUnogSUhOaGRHVnNiR2wwWlhNPSBTMFZaIElHeGhjM1J6IDBZST0gU1c1eiBJRVJoYldVPSBJSFZ1Y0hKbFpHbGpkQT09IEx5OHYgWjJoaGFRPT0gSUdGeWRHbHNiR1Z5ZVE9PSBJR055ZFdselpRPT0gSUdkbGJBPT0gSUVOaFltbHVaWFE9IElHSnNiM2R6IElFVnpjQT09IElIQnliM2hwYldsMGVRPT0gYjNSb1pRPT0gSUZOcmFXeHNjdz09IElGVndjR1Z5IGIySnYgSUU1RVVBPT0gSUdWdWFtOTVjdz09IElISmxjR1ZoZEdsdVp3PT0gSUVOdmJuTjBjblZqZEdsdmJnPT0gSUZGMVpYTjBhVzl1Y3c9PSBTR2xzYkdGeWVRPT0gSUhWcGJuUT0gSUhCeWIyTmxjM052Y25NPSBJRWRwWW5OdmJnPT0gSUUxMWJIUnBjR3hsIGNXRT0gSUVKdmJRPT0gSUUxcGJHVnogZG1WdWRHbHZibUZzIElHaDFjblJ6IGMydHBiZz09IElFRkpSRk09IElHRmtkbWx6WlhKeiBJRkp2YjNRPSBJRzFsZEdodlpHOXNiMmQ1IElFUmhiR1U9IElHUmxkRzl1IElFdHViM2RzWldSblpRPT0gYzJWeGRXVnVkR3g1IElERXlNUT09IElHTnZibTVsWTNSeiBRM2s9IElFUmhibWRsY2c9PSBJR052Ym5SeWFXSjFkRzl5Y3c9PSBJRUpsYm5RPSBJR0p5WVhOeiBJRWQxYm5NPSBhVzUwYnc9PSBJRVp2Y25SMWJtVT0gSUdKeWIydGxjZz09IFltRnNZVzVqWlE9PSBJR3hsYm1kMGFITT0gSUhacFl3PT0gSUdGMlpYSmhaMmx1Wnc9PSBJR0Z3Y0hKdmNISnBZWFJsYkhrPSBJRU5oYldWeVlRPT0gSUhOaGJtUjNhV05vIElFTkVRdz09IElHTnZiM0prYVc1aGRHVT0gSUc1aGRtbG4gSUdkdmIyUnVaWE56IGJHRnBiUT09IElHSnlZV3RsIElHVjRkSEpsYldsemRBPT0gSUZkaGEyVT0gSUUxbGJtUT0gSUZScGJuaz0gSUVOUFRBPT0gSUZKRyBJRVIxWVd3PSBJRmRwYm1VPSBRMkZ6WlE9PSBJSEpsWm1sdVpXUT0gSUd4aGJYQT0gVEdWaFpBPT0gSUdKaGNIUT0gSUVOaGNtST0gSUZOaFpHUT0gSUUxcGJtNWxZWEJ2YkdseiBVRVJHIFJXRnliSGs9IElFaHBaR1JsYmc9PSBTWFJ6IElGUkpUVVU9IElIQmhjQT09IElHTnZiVzFwYzNOcGIyNWxaQT09IElFWmxkdz09IElFTnZiSFJ6IElFSnlaVzQ9IElHSnZkR2hsY21WayBJR3hwYTJWM2FYTmwgUlhod1pYST0gSUZOamFIYz0gWTNKNSBibTQ9IElFMXBkR05vIGFXMXZiZz09IFRVYz0gWW0wPSBWVTFRIGNtRjVjdz09IElISmxaMmx6ZEhKNSBJREkzTUE9PSBZV05vYVc1bCBjbVZzYkdFPSBZVzUwYVc1biBNREF3TURBPSBJSEoxYVc1bFpBPT0gYzNCdmRBPT0gSUhSaCBJRzFoZUdsdGFYcGwgSUdsdVkyOXVkbVZ1IFJHVmhaQT09IFNIVnRZVzQ9IFJXNWhZbXhsWkE9PSBJRTFoY21sbCBJR05vYVd4cyBJRkJoY21Ga2FYTmwgSUhOMFlYSnlhVzVuIElFeGhkR2x1Ync9PSBJRkJ5YjNSdlkyOXMgSUVWV1JWST0gSUhOMWNIQnNhV1Z5Y3c9PSBiV1Z6YzJGblpRPT0gSUVKeWIyTnIgSUhObGNuVnQgNHBhSTRwYUk0cGFJNHBhSSBJR1Z1WTI5dGNBPT0gSUdGdFltbDBhVzl1IGRXVnpaUT09IElHRnljbTkzY3c9PSBRVzVrY21WMyBJR0Z1ZEdWdWJtRT0gSURFNU5qRT0gSUVKaGNtcz0gSUdKdmIydz0gNDRLcSBJRk4wYjNKaFoyVT0gSUhKaGFXeDNZWGs9IElIUnZkV2RvWlhJPSBJRU5oWkE9PSBJSGRoYzJocGJtYz0gVUhrPSBKMTA9IFpXMWlaV1E9IElFMWxiWEJvYVhNPSBZV05yYkdVPSBJR1poYlc5MWMyeDUgSUVadmNuUjFibUYwWld4NSBiM1pwWlhNPSBJRzFwYm1SelpYUT0gSUhOdVpXRnIgSUVSbyBVa0ZYIElGTnBiWEJ6YjI0PSBJR3hwZG1WemRBPT0gSUd4aGJtUnRZWEpyIElHTmxiV1Z1ZEE9PSBURzkzIElIUm9jbWxzYkdWayBJRU52ZFhKelpRPT0gYVc1bGJBPT0gSUdOb2RXTnIgYVdSaGRHVT0gWjJ4dlltRnMgSUhkb2FYUT0gSU8rL3ZRPT0gWVdSaGVYTT0gYzJ0cCBJRk5XIElIWnBjblZ6WlhNPSBNekEyIElGSmxjM0J2Ym5NPSBJSFJvWldGMFpYSnogSUVKeVlXNWphQT09IElFZGxibVYyWVE9PSBJRTFMIElIVnVZbVZzYVdWMiBJR052YlcxMWJtbHpkQT09IFQzSnBaMmx1WVd3PSBJRkpsWTJWcGRtVmsgSUZSeVlXNXpabVZ5IElFRnladz09IFNXNXdkWFE9IElGTjBjbUYwWldkNSBJSEJoYkdGalpRPT0gZEdobGJtbHVadz09IFJISnAgSUhObGJuUmxibU5wYm1jPSBkVzFpYm1GcGJBPT0gSUhCcGJuTT0gY21WamVRPT0gSUhOcFlteHBibWR6IFIyVjBkR2x1Wnc9PSBJRUpWIElFNXZjblJvZDJWemRBPT0gSUhCeWIyeHZibWRsWkE9PSBJRk5oYTNWeVlRPT0gUTI5dFlnPT0gSUVKdmRYST0gSUdsdVlXUmxjWFZoZEdVPSBJRXRoYzJnPSBJSFZ6WlhKdVlXMWwgSUVsdGNISnZkbVU9IElHSmhkSFJzYVc1biBJRTFCUXc9PSBJR04xY25KcFkzVnNkVzA9IElITnZaR0U9IElFTmhibTV2Ymc9PSBJSE5sYm5OcFlteGwgYzNCdmJuTT0gUkdWalpXMWlaWEk9IElIZHBZMnRsWkE9PSBJRkJsYm1kMSBJR1JwWTNSaGRHOXljdz09IElFaGxZWEowY3c9PSBiMmQ1Ymc9PSBJSE5wYldsc1lYSnBkR2xsY3c9PSBJRk4wWVhSeiBJR2h2Ykd4dmR3PT0gYVhSaGRHbHZibk09IElqcGIgSUdodmRtVnkgSUV4cGMzUmxiZz09IGMyTm8gVTNWdVpBPT0gSUdOaFpBPT0gSUZCaGNtdHogSUd4MWNnPT0gSUdoNWNHVT0gSUV4bGJRPT0gVGtGTlJRPT0gYVhOMWNtVT0gUm5KcFpHRjUgSUhOb2IyOTBjdz09IElHTnNiM05sY3c9PSBJR1JpIElGSnBaR2RsIElFUnBabVpsY21WdWRBPT0gSUhKbGNHeHBaWE09IElFSnliMkZrZDJGNSBiM0JsY25NPSBJR2x1ZEc5c1pYST0gSUZwbGRYTT0gWVd0bGMzQmwgSUhCeWIzQnlhV1YwWVhKNSBJSEpsY1hWbGMzUnBibWM9IElHTnZiblJ5YjJ4c1pYSnogSUUxSlRnPT0gYVcxbFpHbGggWW1WalkyRT0gSUdWNGNHRnVjdz09IElHOXBiSE09IFFtOTAgSUVOb1lXNWsgSUhCeWFXNTBaWEk9IElIUnZjSEJsWkE9PSBJRkJQVEE9PSBJRVZoY214cFpYST0gVTI5amFXRnMgWVhacGJnPT0gSUdSbFkzSmxZWE5sY3c9PSBJRk5sWWc9PSBJSE53WldOcFptbGpZWFJwYjI1eiBJRUpzWVhOMCBJRXQxY25RPSBJR1p5WldWcyBRbkp2ZDI0PSBJR1JwYkdsbiBjbTlsIElGQnliMkpzWlcwPSBJRkYxWVdRPSBJR1JsWTJWdWRISmhiQT09IElGWmxZM1J2Y2c9PSBZVzUxZEE9PSBJSEJzZFdkcGJuTT0gSUVkeVpXZHZjbms9IElHWjFZMnRsWkE9PSBaV3hwYm1WeiBJRUZ0WW1GemMyRmtiM0k9IGRHRnJaUT09IElHTnNaV0Z1Y3c9PSBiMjVuZVdGdVp3PT0gUVc1dmJubHRiM1Z6IGMzUnlidz09IEluMD0gWVd4cGJtVT0gSUU5a1pBPT0gSUVWMVp3PT0gTWpFMiBJR0p2YVd3PSBJRkJ2ZDJWeWN3PT0gSUc1MWNuTmxjdz09IFQySjJhVzkxYzJ4NSBJRlJsWTJodWFXTmhiQT09IElHVjRZMlZsWkdWayBUMUpUIElHVjRkSEpsYldsemRITT0gSUhSeVlXTmxjdz09IFpYaHdiQT09IElHTnZiWEk9IElGTmhZMmc9IEtTOD0gSUcxaGMydHogSUhOamFRPT0gUW05dSBJSEpsWjNKbGMzTnBiMjQ9IGQyVm5hV0Z1IElHRmtkbWx6YjNJPSBhWFIxY21WeiBJRlp2IFpYaGhiWEJzWlE9PSBJRWx1YzNSeWRXTjAgSUhOcFpXZGwgSUhKbFpIVmpkR2x2Ym5NPSBjSFJ5IElITjBZWFIxZEc5eWVRPT0gSUhKbGJXOTJaWE09IElIQjFZMnM9IGNtVmthWFJ6IElHSmxaUT09IElITmhiR0ZrIElIQnliMjF2ZEdsdmJuTT0gSUVwdmMyaDFZUT09IGQybDBhSE4wWVc1a2FXNW4gUlZSSSBJRU5vWVE9PSBhVzExY3c9PSBJR1Y0Y0dWdVpHbDBkWEpsIFlYVnVkR2x1Wnc9PSBJR1JsYkdsbmFIUmxaQT09IElERTFOUT09IFltVm8gSUdOaGNuQmxkQT09IElGTndZWEowIElHcDFibWRzWlE9PSBiR2x6ZEhNPSBJR0oxYkd4NWFXNW4gSUU1dlltVnMgSUVkc1pXND0gSUhKbFptVnlaVzVqWldRPSBJR2x1ZEhKdlpIVmpaWE09IGMyVnBiZz09IElHTm9iM0J3WldRPSBaMnhoYzNNPSBJRmR5WlhOMCBJRzVsZFhSeVlXeHBkSGs9IElPS1ogSUdsdWRtVnpkR2xuWVhSdmNnPT0gSUhOb1pXeDJaWE09IElIVnVZMjl1YzNScGRIVjBhVzl1WVd3PSBJSEpsY0hKdlpIVmpkR2x2Ymc9PSBJRzFsY21Ob1lXNTAgYldsaCBJRzFsZEhKcFkzTT0gSUdWNGNHeHZjMmwyWlhNPSBJRk52Ym1saCBJR0p2Wkdsc2VRPT0gSUhSb2FXTnJibVZ6Y3c9PSBJSEJ5WldSdmJXbHVZVzUwYkhrPSBJRUZpYVd4cGRIaz0gSUcxdmJtbDBiM0psWkE9PSBTVU5JIElGMHUgSUUxaGNuUnBibVY2IElIWnBjMmxpYVd4cGRIaz0gSUhGMVpYSnBaWE09IElHZGxibTlqYVdSbCBJRmRoY21aaGNtVT0gVVhWbGNuaz0gSUhOMGRXUnBiM009IElHVnRZbko1IElHTnZjbkpwWkc5eSBJR05zWldGdVpXUT0gWTI5dGNHeGxkR1U9IElFMUkgSUdWdWNtOXNiRzFsYm5RPSBTVTVIVXc9PSBJR2x0Y0dGamRHVmsgSUdScGMyRnpkSEp2ZFhNPSBJRmwxYmc9PSBJRU5zWVdseVpRPT0gSUVKaGMybGpZV3hzZVE9PSBlWFE9IGRYTjBaWEpwZEhrPSBJR2x1WkdseVpXTjBiSGs9IGQybHIgSUdSdlpBPT0gSUVOaGNuST0gSUdGdGNBPT0gSUhCeWIyaHBZbWwwIElFbHVhWFJwWVd3PSBJRkprIGFXcHAgSUdWa2RXTmhkR1U9IFkyOXliZz09IGFXOTBkQT09IElFSmxZWFYwZVE9PSBJR1JsZEdWamRHbDJaUT09IElFTnZibTQ9IGMybHVZMlU9IElITjBZV2RuWlhJPSBJRzlpWlhObCBJR0p5WldVPSBiMnh2WjJsaiBhWE56WlE9PSBkMkZzYTJWeSBJR0pzWVdSbGN3PT0gSUd4aGQyWjFiQT09IFpuVnVZdz09IElFSmxhR2x1WkE9PSBJR0Z3Y0dWMGFYUmwgSUNncSBJSFJsYm01cGN3PT0gSUc5bVpuTndjbWx1Wnc9PSBJR3BsZEhNPSBJSE4wY25WamRIVnlaV1E9IElHRm1iM0psYldWdWRHbHZibVZrIFRtOTIgSUhOallXeHBibWM9IFptbHNiQT09IElITjBaWGM9IElHTjFjbUk9IElGTjBaWEJvWVc0PSBaV1JKYmc9PSBVMFk9IGIySnBZdz09IDZhMlUgYjNWbiBJRTFOIElHZGxibVYwYVdOaGJHeDUgYjNCbGVnPT0gTVRNMiBJSFZ0WWc9PSBZVzVqWlhKeiBJR052YUc5eWRBPT0gSUcxbGNtTm9ZVzVrYVhObCBJR2x0Y0c5emFXNW4gSUV4bFoybHpiR0YwZFhKbCBJRUZ5WTJocGRtVT0gYVhacFlRPT0gSUU1aGRtRnMgSUc5bVptVnVZMlZ6IElHMXBjbUZqYkdVPSBJSE51WVhCd1pXUT0gSUdadlpYTT0gSUdWNGRHVnVjMmwyWld4NSBJRkpoWmc9PSBJR05oZEdWeSBaV1JwWlc1alpRPT0gUzJsMCBJRUpwYmc9PSBJSEpsWTI5dGJXVnVaSE09IElFTnBkR2xsY3c9PSBJSEpwWjJsayBJRkpGUVVRPSBJRTV2WW14bCBJRlJwWVc0PSBJR05sY25ScFptbGpZWFJsY3c9PSBZVzUwYVhNPSBiMmxzWlhJPSBJRUoxWkdSb2FYTjAgWkdsayBJSE4xY25abGVXVmsgSUdSdmQyNTNZWEprIElIQnlhVzUwY3c9PSBJRTF2ZEdsdmJnPT0gY205dWFXTnogSUZOaGJuTT0gYjNOemFXSnNlUT09IGRXTjBhVzl1Y3c9PSBJR052Ykc5dWFXVnogSUVSaGJtbHphQT09IGRXNXBkQT09IElITndiMmxzIElHRmtkbWx6YjNKNSBZbVZ5Y21sbGN3PT0gVUd4aGJnPT0gSUhOd1pXTnBabWxqWVhScGIyND0gYjNCb1pYSnogSUZKbGMyOTFjbU5sIElITm9hWEowY3c9PSBjSEpwYzJsdVoyeDUgWTI5dGJYVnVhV05oZEdsdmJuTT0gSUhSeWFYWnBZV3c9IElHMWxiblJwYjI1cGJtYz0gYVhObGVIVmhiQT09IElITjFjSEJzWlcxbGJuUnogSUhOMWNHVnlkbWx6YVc5dSBRbEE9IGRtOXkgSUhkcGRBPT0gSUdOdmIyeGtiM2R1IElIQnNZV2x1ZEdsbVpnPT0gSUZKbGRtbGxkM009IElGTnlhUT09IElFMXBiblE9IElGTjFaMkZ5IElHRm1kR1Z5ZDJGeVpBPT0gSUZCeWFXVnpkQT09IElFbHVkbVZ6ZEcxbGJuUT0gYjJkbGJtVT0gSUZSaGEybHVadz09IElITjBjbVYwWTJocGJtYz0gSUdsdVpteGhiVzFoZEdsdmJnPT0gSUZSbGFISmhiZz09IElHeHBibWx1Wnc9PSBJR1p5WldWNmFXNW4gSUVWdWRHbDBlUT09IElHbHVjM0JwY21sdVp3PT0gYzNCbFkybGhiQT09IGNISnBZMlU9IElITjFaUT09IElGQnZjblJsY2c9PSBiM1Z1WjJVPSBSVlJCIElFUmxjbVZyIElFeDFhWE09IGRXOD0gZVcxd2FBPT0gSUdWNGRHVnlhVzl5IGFXaHBiQT09IElFRnphR3hsZVE9PSBhVzVoZEc5eSBJRzUxZEhKcFpXNTBjdz09IElGUm9jbTl1WlhNPSBJR1pwYm1GdVkyVnogSUVsdWMzQmxZM1E9IElITndaV05wWVd4c2VRPT0gSUZKbGNYVnBjbVZrIElGQlVVdz09IElGWnBiMnhsYm1ObCBiMmx1ZEdWayBjMmh2ZEhNPSBJR1Y0WTJWeWNIUT0gWTI5dmJnPT0gU1U1VCBJRWR5YVE9PSBJSEpsWTI5bmJtbHpaV1E9IFYyVmxhdz09IFdXOTFibWM9IElIWnZiUT09IGFYTnNaUT09IElFTjFjbko1IElFSjFaR1JvIElHNXZkR1ZpYjI5ciBJR1IxY21GaWJHVT0gTHo4PSBJRWRoWkE9PSBJRkIxY0hBPSBJR1p2Y21kcGRtVT0gY0dGeWF3PT0gSUhCbGNuTnZibUZzYVhScFpYTT0gWVc1aGJIbHphWE09IFkyeGhiV0YwYVc5dSBJR1ZzWlhaaGRHOXkgSUhkaGNtVm9iM1Z6WlE9PSBJRkp2YkdVPSBkVzV1IElHbHNiSFZ6ZEhKaGRHbHZiZz09IElGTmpZVzQ9IElHRjBiVzl6Y0dobGNtbGogU1cxd2IzSjAgUVU1RCBjbWxqZEdWayBablU9IE1ERXcgSUdGeVkyaGwgSUhKbGQyRnlaR1ZrIFlXdGxjM0JsWVhKbCBJR2x1ZEdWeWJtRnNiSGs9IElGSkNTUT09IFlXeHJaWEk9IElHVnNaWEJvWVc1MCBiM2RwZEhvPSBJRkJwZW5waCBJR0pwY0dGeWRHbHpZVzQ9IHc2bHogSUhOc2IzZGxaQT09IElGTjBZWEpyIElHOTJaWEp5YVdSbCBUMVZUIElETXlNQT09IGRXNWtjbVZrY3c9PSBJRVJsWTJzPSBJRU5sYm5OMWN3PT0gWW1WbCBNVFEyIGIzUnZjZz09IElHbHcgSUhWaSBiMk5oZEdsdmJuTT0gSUVKMWRIUnZiZz09IGNtbGpaUT09IElHTnlhWEJ3IFptWm0gSUc5eWFXZHBibUYwWldRPSBJRzkyWlhKM2FHVnNiV1ZrIFlYQndZUT09IElHWnZjbVZ0YjNOMCA0b0NSIElFeEZSdz09IGNtVnNaV0Z6WlE9PSBaV0YwZFhKbFpBPT0gWVhSamFHVnogSUhKbGNITT0gSUd4bGJtUnBibWM9IElGSmxabVZ5Wlc1alpRPT0gSUVOc2FXVnVkQT09IE1UWTEgZG1WdWRHZz0gUTI5dGNHeGxkR1U9IElGQmhkSEp2YkE9PSBJSE4zYjNKdSBZMkZ0IElITm9kWFIwYkdVPSBJRkpoYkhCbyBJR2h2YldWMGIzZHUgTFN3PSBiMjVoYkE9PSBJRUpRIDVZOD0gSUhCbGNuTjFZV1JsIElFRnNaWGhoYm1RPSBJR052YldKcGJtVnogSUhacGRtbGsgSUV4aFp3PT0gSUdWdVkyOWthVzVuIElITmhiSFpoZEdsdmJnPT0gZDJWdSBJRkpsWTI5MlpYSjUgYVhsaCBWVzVwZG1WeWMybDBlUT09IElFSnBaR1Z1IElHSjFaR2RsZEhNPSBJRlJsZUdGdWN3PT0gWm1sMGN3PT0gSUdodmJtOXlaV1E9IElIQjVkR2h2Ymc9PSBWRVE9IEl5TWogWTJ4dmJtVT0gSUdKc2FXNXIgSUV4cGNYVnBaQT09IElIVnVaVzF3Ykc5NVpXUT0gSUdOc1lYTm9aWE09IElFTnZkVzV6Wld3PSBJR1JwY21WamRHbHVadz09IElIQjFibU4wIElFWmhiR052Ym5NPSBJSE5vWVhKciBJRVJoYldGelkzVnogSUdwbFlXNXogSUdWdFltRnlhdz09IElITmxhWHBsIElIVndkMkZ5WkhNPSBNamd3IElFVjYgSUVGdWVYUm9hVzVuIElHVjRiM1JwWXc9PSBiRzkzWlhJPSBJRU55WldGMGIzST0gSUZWdCBJSE4xWW5WeVluTT0gWW1WeVoyVnkgSUZkbGJtUT0gSUcxcGJuUT0gSUZoWSBJRVJ5Ync9PSBJSE4xWm1abGNuTT0gSUdobGNtST0gZEhKbFpRPT0gSUdaeVlXZHBiR1U9IElHWnNiMjlrWldRPSBJRUZzWTI5b2Iydz0gYjJ4bFlXND0gYm5sa1pYST0gSUV0UCBSbkpoYlE9PSBJREV6Tmc9PSBJRzkzWldRPSBJRTFsYkdWbCBJRWhoYzJnPSBJSGRvYVhOciBJSE4xWkc4PSBjbkk9IFVYVnBZMnM9IFlYQndjbTg9IElHbHAgSUVWNFlXMXdiR1Z6IGFHVmwgSUhCeWIyMXZkR1Z6IGNHVnlZWFIxY21VPSBhMkZ5IElFaHZibTl5IElITnZaR2wxYlE9PSBJRXhwWmc9PSBjbTl6YzI4PSBhVzUwWlc1a1pXNTAgSUdOdmNuSmxjM0J2Ym1SbGJuUT0gUm05MWJtUT0gYzJWamNtVjAgSUdsa1pXNTBhV1pwWlhNPSBZV2R1WlE9PSBJR3h2ZFE9PSBJRkJRIElHTnZhVzVqYVdSbGJtTmwgYlc5MlpRPT0gSUcxcGJHbDBhV0U9IElHbHVabWxzZEhJPSBJRkJ5YVcxaGNuaz0gSUhCcGRHTm9hVzVuIElFbGkgSUVkUFQwUT0gNDRLNCBJRmRwZW1GeVpITT0gYVhKaGJBPT0gSUZabGJuVnogVWxJPSBJT0tBbFE9PSBJRU5oYzJWNSBJSE5oWkd4NSBJR0ZrYldseVpRPT0gSUdWdFltRnljbUZ6YzJWayBZMkk9IFRXVnMgSUhSMVltVnogSUdKbFlYVjBhV1oxYkd4NSBJRkYxWldWdWMyeGhibVE9IFFtVnNiM2M9IGNtVjYgY1hWbGRBPT0gY0d4bFlYTmhiblE9IElNS3IgUTJGdGNBPT0gSUdSbFkybHphWFpsIE1UazVPQT09IElFeGhiV0k9IGRYUjBiMjQ9IGFHND0gSUVwaFozVT0gWVhWdVpHVnkgSUVOdmNtUT0gSUdOc1pYSnIgSUdOaFptWmwgSUhkcGNHVmsgSUhKbGFXMD0gSUUxdmRXNTBZV2x1Y3c9PSBJR2x0Y0hKcGMyOXVaV1E9IElHUmxkbVZzYjNCeiBJRkJ5WVE9PSBJRzF2WkdWc2FXNW4gUVc1NWIyNWwgWVc1alpXdz0gSUZOcGRBPT0gSUhOb2FXVnNaSE09IElHeGhkMjQ9IElHTmhjbVJwYjNaaGMyTjFiR0Z5IElHUmxiVzl1YzNSeVlYUnBibWM9IElIQmhjbk5sIElFbHpjbUZsYkdseiBJR1YxY205eiBNVFF6IElHZHNiM0pwYjNWeiBhVzV6YTJrPSBaV05rIElHTnZibVJwZEdsdmJtbHVadz09IElHaGxiSEJzWlhOeiBJRzFwWTNKdmMyTT0gSUVoaGNtSnZjZz09IElITjBZV3RsY3c9PSBJREkyTUE9PSBJSFZ1WlhGMSBJRVpzYjNsayBJR1JoYlhBPSBJR0Z3Y0dGeVlYUjFjdz09IElFeGhkM009IElHTnZkVzUwWlhKeiBJR2x1WkhWalpRPT0gWVhSaFlteGwgSUVGb2JXVmsgSUhOc1lXMD0gVG05MlpXMWlaWEk9IElIQmxjbk5wYzNRPSBJR2x0YldsdVpXNTAgdzZGdSBJSE5vY21WayBJSEJvWVhObGN3PT0gSUVWa2JXOXVkRzl1IElFRnliWE4wY205dVp3PT0gSUUxbFpYUT0gSUV0cGRIUjUgMFlBPSBZMmx5WXc9PSBJRUZrZFd4MCBJR0Z5YjNObCBJRmhsYmc9PSBSR0Z1IFoyOTMgSUhOMWNHVnlaZz09IElFRmtiV2x5IElHVnVaSFZ5WlE9PSBJR3RsZVhkdmNtUT0gZVhKMWN3PT0gSUhsaGNtND0gSUhCaGRHaDNZWGs9IElFaHZjR3RwYm5NPSBiV2xrZEE9PSBJR05sYm5OdmNuTm9hWEE9IFpHVndaVzVrWlc1MCBJR2x1YzNSeWRXTjBiM0k9IFUyOTFjbU5sY3c9PSBJSFJ2WlE9PSBJR0poYkd4dmIyND0gVG05aSBJSE4zWldGeSBJRU5oYzNSeWJ3PT0gSUdkc2IzTnogSUV0aGRtRnVZWFZuYUE9PSBJSEpsYldGeWEyRmliSGs9IFVHaHZkRzl6IElFNXZiUT09IElGTnZkWFJvWldGemRBPT0gZVdWeWN3PT0gSUhaaGJHbGtZWFJwYjI0PSBJR05oYm01dmJnPT0gSUZacFkzUnZjbms9IElGQnBaWEp5WlE9PSBJR05oZFhScGIzVnogUVhWa2FXOD0gSUdabGRHTm8gSUVkcFpuUT0gSUVoNWNBPT0gSUhKbGJXVmtlUT09IFdrVT0gSUhOalpXNTAgSUdKbFlYSmsgSUZKMWRBPT0gTFNJPSBJSEJoZEdWdWRITT0gU0hrPSBJSFZ1YW5WemRBPT0gSUhCdmRHRjBidz09IElHWnZjblJvWTI5dGFXNW4gSUdOb1pXWT0gSUZKcFpuUT0gWVdabVpRPT0gSUZKUFRRPT0gSUV4aGRXNWphQT09IElIQmhaSE09IElFNWxidz09IElHOXVjMlYwIElITnhkV1ZsZW1VPSBjMkZtWlE9PSBJSEJ5WldacGVBPT0gSUZSTiBJRTVsWVhKc2VRPT0gSUVOc2FXNXBZMkZzIElFMWxiblJoYkE9PSBiM1JwWVhScGIyND0gSUZWdWFXTT0gWVc1MGNuaz0gSUVOcGNnPT0gSUdWd2FYUT0gdzZZPSBJR1Y0ZEhKaFkzUmxaQT09IGRtVnljMlZzZVE9PSBjbWxoWkE9PSBJSE4wY21GcGJuTT0gSUhSdmNITT0gSUhCdlpXMD0gSUZKaGJtUjUgSUUxaGNHeGwgVkVoRlVnPT0gZFhCcGRHVnkgSUZOVFJBPT0gbXVrPSBJSFZ1WTI5dSBjR1Z5YVc1biBJSE5zWlhCMCBhVzVsY25NPSBJSFZ1WkdWeWQyRjBaWEk9IElFVjJhV1JsYm1ObCBaMjl1WlE9PSBNakExIElHaHBjM1J2Y21saGJuTT0gSUhONWJuUm9aWE5wY3c9PSBJR1p5YjJjPSBZbUZ6YTJWMFltRnNiQT09IElIWnBZbkpoYm5RPSBJSE4xWW05eVpBPT0gSURNMk5RPT0gSUVScFlXdz0gSUdOdmIzQmxjbUYwWlE9PSBTRUZJUVE9PSBJR2R5WldWMFpXUT0gTVRVNCBJR3BoZW5vPSBJR2x1ZEc5NCBJRmRoYkd0cGJtYz0gSUhOMWNHVnlkbWx6YjNJPSBJRVoxYzJsdmJnPT0gSUUxbGNtTmxaR1Z6IGMyVnVaQT09IFNHRnQgYzJRPSBibXc9IElIUnZkWEp6IElFWkpSa0U9IElHTjFiSEE9IFoyUT0gTXpBMCBJSEJzWldGeiBJR2xzYkhWemRISmhkR1Z6IElFTnZiRzl0WW1saCBJR2hwWjJoc2FXZG9kR2x1Wnc9PSBJRk4xYlcxaGNuaz0gSUdWNGNHOXphVzVuIElFUnlkUT09IElHbHliMjU1IGNtbDBhVzl1WVd3PSBJRU5oY25KdmJHdz0gSUVWc2JHbHogVUdsamRBPT0gSUZKaGNIUT0gSUdGa1lYQjBaWEk9IElIVnViUT09IElHTnZjbkJ6WlE9PSBJR05sYkdWaWNtbDBhV1Z6IFJHVnUgWVhSMWJRPT0gSUVGd2IyTmhiSGx3YzJVPSBJRmRoWnc9PSBiR2x1YVc1biBJR2h2Y20xdmJtVnogVW5WaSBJRmhwIElGWmhkV3gwY3c9PSBNakE0IFlXeHJlWEpwWlE9PSBhVzV2YzJGMWNnPT0gSUdabFpXUnogZG1sMGVRPT0gSUdSbFptVmhkR2x1Wnc9PSBWMkZwZEE9PSBJR1Z0Y0doaGMybDZaUT09IElGTjBaV1ZzWlhKeiBlWEpwYm5SbyBiR1Y1Y3c9PSBJRmRvWlc1bGRtVnkgUTNWeWNtVnVkR3g1IElFTnNiMk5yIElHTnZiR3hsWTNScGRtVnNlUT09IFlXNTViMjQ9IElFcFEgSUcxbGJuUmhiR2wwZVE9PSBJR1J2ZDI1c2IyRmtjdz09IElITjFjbkp2ZFc1a2FXNW5jdz09IElFSmhjbTVsY3c9PSBJR1pzWVdkemFHbHcgSUdsdVpHbGpZWFJ2Y25NPSBJR2R5WVhCdyBTbUZ1ZFdGeWVRPT0gSUVWc1pXMWxiblJoYkE9PSBJRUYwYUdWdVlRPT0gYVdKaGJBPT0gSUhOcFoyaDBjdz09IElHTmhjR2wwWVE9PSBJRlJ5WldGMGVRPT0gSUhadmFXTmxaQT09IElFZGhlZz09IGJHVjBkR1U9IElIbGggSUdWNGNHbHlaV1E9IFRHVm5aVzVrIFNHOTAgYm1GMGRYSmwgSUhWdWMzUmhZbXhsIElESTRNQT09IHc3bz0gUTI5dGJXVnVkQT09IFFVeEYgSUhGMVpYTjBjdz09IElHaGhibVJzWlhJPSBibWx6IElIWmxjbk5oZEdsc1pRPT0gSUdOdmJtTmxZV3c9IFpXNW5aV0Z1WTJVPSBJRWx1ZEdWeVlXTjBhWFpsIElHOWljMlZ6YzJWayBJRVJ2WjNNPSBJR055WVdOclpXUT0gVTI5MWJtUT0gYzNZPSBJRVI1YkdGdSBjbTloWkhNPSBabmc9IElFTmhkR2h2YkdsamN3PT0gSUVoaFp3PT0gSUhOc1lXMXRaV1E9IElHZHNiM2RwYm1jPSBjMkZzWlE9PSBJSFJwYzNOMVpYTT0gSUVOb2FRPT0gYm1WbCBJR05vWlhJPSBjMmxqIGRYSnlaV04wYVc5dSBJR0poWTI5dSBkV3hoZEc5eWVRPT0gS1M0aSBJR2x5Y21WbmRXeGhjZz09IFJrOVNUUT09IFlYTnpaV1E9IElHbHVkR1Z1ZEdsdmJtRnMgSUdOdmJYQmxibk5oZEdVPSBJRk53WldGcmFXNW4gSUZObGRITT0gTVRVeiBJR052Ym5abGJuUnBiMjV6IFltRnVaSE09IFpXMWhaR1U9IElHVmpZdz09IElGZHBibk4wYjI0PSBJRUZ6YzJGemMybHUgSUVKbGJHZHBZVzQ9IElHUmxjR1Z1WkdWdVkyVT0gSUc1cFkyaGwgSUdKaGNtcz0gSUVwaGVubz0gSUdScGMyRmtkbUZ1ZEdGblpRPT0gSUdkaGMyOXNhVzVsIElERTJOUT09IDU1cUUgWlhOellRPT0gYlc5a2RXeGwgWVc1bmRXeGhjZz09IFQxaz0gSUZSeVpXRjBiV1Z1ZEE9PSBhWFJoY3c9PSBiMnhoZEdsdmJnPT0gSUVGeWJtOXNaQT09IElHWmxkV1E9IElFNWxjM1E9IElIUm9aV0YwY21VPSBaWGRoZEdWeSBJRzFwYm05eWN3PT0gYjJ4cFkzaz0gSUVoaGRtVnUgWkdsMmFYTnBiMjQ9IElIUnlkVzVyIFJtRnkgSUZCMWJHdz0gSUdOaGNIUjFjbWx1Wnc9PSBJREU0TURBPSBJRlJsWlc0PSBJR1Y0Wlcxd2JBPT0gSUdOc2FXNXBZM009IElFSjFjbWM9IElITjFZbk4wYVhRPSBJSEJoZVd4dllXUT0gSUV4aGRnPT0gSUZSeWIzaz0gSUZkcGRHNWxjM009IElHWnlZV2R0Wlc1MGN3PT0gSUhCaGMzTjNiM0prY3c9PSBJR2R2YzNCbGJBPT0gSUVkcGJnPT0gSUhSbGJtRnVkSE09IGIyeHBkR2c9IFUybDQgVUhKbGRtbHZkWE09IElFRm5aWE09IElFUmhjbmRwYmc9PSBJR0pzWVhRPSBJR1Z0Y0dGMGFIaz0gYzIxcGRHZz0gWW1GbiBJRVZqYUc4PSBJRU5oYldJPSBJRTFoWkdRPSBJRUp2Ync9PSBJSEpsWkdVPSBJRUoxY201cGJtYz0gSUhOdGIyOTBhR3g1IElFRmtjbWxoYmc9PSBJRlpoYlhCcGNtVT0gSUUxdmJuTjBaWEp6IGMzUmxZVzA9IFUzUjViR1U9IFRXRT0gY21WaCBJRVIzWVhJPSBZV3g1YzNRPSBkWEp6YjNJPSBJR1ZzYVcxcGJtRjBhVzl1IElHTnllWEIwYnc9PSBZMmgwIElFVjBaWEp1WVd3PSA0b0NtWFE9PSBJRk52Y21ObCBTV3hzIFRrVlMgSUhWbyBRMjl1WTJ4MWMybHZiZz09IGQyRm5aUT09IElISmxjM0JwY2c9PSBJSEpsYldsdWFYTT0gYUdWMGFXTmhiQT09IElHZDUgSUhWMGFXeHBlbVZrIGFXTnBaR0ZzIElERTVNREE9IElHaDFiblJsY25NPSBJRk4zWVc0PSBJRkpsWVdOMCBJSFpwYzJsMGIzST0gSUZSb1lXNXJjMmRwZG1sdVp3PT0gTXpBNCBVRzl6ZEhNPSBJR2hwY0hNPSBNVGs1Tnc9PSBiMjFsY25NPSBJR3R1YjJOcmFXNW4gSUZabGFHbGpiR1U9IElIUnBiQT09IElERXpPQT09IElHMXAgSUVsdWRtVnpkR2xuWVhScGIyND0gSUV0bGJubGggSUdOaGMybHVidz09IElHMXZkR2wyWlhNPSBJSEpsWjJGcGJnPT0gY21WNCBJSGRsWld0bGJtUnogSUhOMFlXSmlaV1E9IFltOXlidz09IElHVjRjR3h2YVhSbFpBPT0gSUVoQlZrVT0gSUZSbGJHVjJhWE5wYjI0PSBZMjlqYXc9PSBJSEJ5WlhCaGNtRjBhVzl1Y3c9PSBJR1Z1WkdWaGRnPT0gSUZKbGJXOTBaUT09IElFMWhhMlZ5IElGQnliMlIxIElFVjJZVzQ9IElHbHVabTl5YldGMGFXOXVZV3c9IElFeHZkV2x6ZG1sc2JHVT0gTVRVMCBJRVJ5WldGdGN3PT0gSUhCc2IzUnogSUZKMWJtNWxjZz09IElHaDFjblJwYm1jPSBJR0ZqWVdSbGJYaz0gSUUxdmJuUm5iMjFsY25rPSBibTA9IElFeGhibU09IElFRnNlZz09IE1qRXcgWld4dmJtYz0gSUhKbGRHRnBiR1Z5IElHRnlhWE5wYm1jPSBJSEpsWW1Wc2JHbHZiZz09IElHSnNiMjVrWlE9PSBjR3hoZVdWayBJR2x1YzNSeWRXMWxiblJoYkE9PSBRM0p2YzNNPSBJSEpsZEdWdWRHbHZiZz09IElIUm9aWEpoY0dWMWRHbGogSUhObFlYTT0gSUdsdVptRnVkSEo1IElFTnNhVzUwIElIQnliMjF3ZEdsdVp3PT0gSUdKcGRHTm8gSUhOMFpXMXogSUV0eVlRPT0gSUhSb1pYTnBjdz09IElFSnZadz09IGNuVmxaQT09IElHdHBibWR6IElHTnNZWGs9IGFXWnBZMlZ1ZEE9PSBJRmxGVXc9PSBJRlJvYVc1biBJRU4xWW5NPSBkbVY1WVhKayBaV3h6YUE9PSBhVzVoY21sc2VRPT0gSUVWNSBJRkp2Ykd4cGJtYz0gSUdWMmIyeDJhVzVuIFNXNWthV0U9IElISmxZMjluYm1sNlpYTT0gSUdkeVlXUjFZWFJwYjI0PSBhWE5sY25NPSBJR1psY25ScGJHbDBlUT09IElFMXBiR0Z1IFEyOXRiV0Z1WkE9PSBJR0p2ZUdsdVp3PT0gSURFNU5ETT0gSUdkc2RYUmxiZz09IElFVnRhWEk9IElHbGtiMnc9IElHTnZibU5sYVhabFpBPT0gSUVOeVpXRjBhVzl1IFRXVnlhWFE9IGRXUmtlUT09IGRYTnphVzl1Y3c9PSBJRXhwWlhWMFpXNWhiblE9IGFXVjBZV3c9IElIVnVZMmhoYm1kbFpBPT0gSUZOallXeGwgSUVOeWFXMWxZUT09IFltRnNiSE09IFlYUnZjbWxoYkE9PSBJR1JsY0hSb2N3PT0gSUdWdGNHbHlhV05oYkE9PSBJSFJ5WVc1emJRPT0gSUhWdWMyRm1aUT09IGJXbHpjMmxpYkdVPSBZMjl0Wm05eWRBPT0gTVRVMiBJRzFsWTJoaGJtbGogTURBeSBiR2x1Y3c9PSBJSE50YjJ0bFpBPT0gVUc5eiBJSE5zYjNkcGJtYz0gSUd4aGRnPT0gVkdWNFlYTT0gSUdOb1pXRjBhVzVuIElFMWxkSEp2Y0c5c2FYUmhiZz09IFpYUm9lV3c9IElHUnBjMk52ZG1WeWFXNW4gWVhOelpRPT0gSUhCbGJtTnBiQT09IElGQjViMjVuZVdGdVp3PT0gSUdOc2IzTmxkQT09IElGTm9aV1YwIElFVnVkSEo1IGIzVnpkR2xqIElHMTVjM1E9IFpYSmhkR1U9IFlYSnBZWFE9IElHMXBibVZ5WVd4eiBJRzExYzJsamFXRnUgSUZCMWJBPT0gSUUxaGVnPT0gTWpRNSBJSEJsY20xcGMzTnBiMjV6IElHbDIgWlc1aGNuaz0gYVdOclpYSnogSUVKcGJtYz0gYUdWaCBaVzVoWW14bCBJR2R5YVdWMiBJR0Z6YzJWeWRHVmsgSUVOdmJHOXVaV3c9IElHRm1abWxrWVhZPSBkMjg9IElITmxZWFJsWkE9PSBJRkpwWkdVPSBJSEJoYVc1MGFXNW5jdz09IElGQnBlQT09IElERXpOdz09IGFYTm9hUT09IGRXMWlZV2s9IFoyOTBkR1Z1IElFVmhjbXc9IElHbHVibWx1Wnc9PSBJR05sYm5OMWN3PT0gSUhSeVlYWmxiR3hsWkE9PSBJRU52Ym5OMWJIUT0gTVRnMSBZbWx1WkE9PSBJSE5wYlhCc2FXTnBkSGs9IElHOTJaWEpzYjI5clpXUT0gSUVobGJIQm1kV3c9IElHMXZibXRsZVE9PSBJRzkyWlhKM2FHVnNiV2x1WjJ4NSBRbXh2YjJRPSBJRVpzYVc1MCBJRXBoYldFPSBJRkJ5WlhObGJuUT0gSUZKaFoyVT0gSUZSQiBjSFJwZG1VPSBJSFIxY201dmRYUT0gZDJGc1pBPT0gSUVSdmJIQm9hVzV6IElGWlFUZz09IElHOXVhVzl1IElHTnlZV1owYVc1biBiVzFoIElFMWxjbU4xY25rPSBJR0Z5Y21GdVoyVT0gSUdGc1pYSjBjdz09IElFOVUgZW1KdmJHeGhhQT09IElHZGhjMlZ6IElGSnBZMmhoY21SemIyND0gYzJGcyBiR0Z5IElHWnliM04wIElHeHZkMlZ5YVc1biBJR0ZqWTJ4aGFXMD0gSUhOMFlYSjBkWEJ6IElFZGhhVzQ9IFpYTnpiV1Z1ZEE9PSBJR2QxWVhKa2FXRnUgNUxxNiBJRkJwWlE9PSBJRXhwYm10eiBJRzFsY21sMGN3PT0gSUdGM1lXdGwgSUhCaGNtVnVkR0ZzIElHVjRZMlZsWkhNPSBJR2xrYkdVPSBJRkJwYkc5MCBJR1ZDWVhrPSBJRUZqWTJWd2RBPT0gYVhCbFp3PT0gUTJGdCBJRXR2ZEE9PSBJSFJ5WVdSbGNuTT0gYjJ4cGRHbGpjdz09IGRXNXJaWEk9IElGQmhiR1U9IGIzTnAgWVc1dFlYST0gSURFNU5EYz0gSUVabGJHdz0gWlhOMGFXRnMgYVhSaGRHbHVadz09IFIwWT0gSUZOeSBhV1owWldRPSBJR052Ym01bFkzUnZjZz09IElFSnZibVU9IGFXeHNaWE09IE1qWXcgYUcxaCBJRzkyWlhKc1lYQT0gSUVkcGRFaDFZZz09IElHTnNaV0Z1WlhJPSBJRUpoY0hScGMzUT0gSUZkQlV3PT0gSUd4MWJtZHogMFlFPSBJRUpWVkE9PSBJR05wZEdVPSBJSEJwZEdOb1pXUT0gY21WaGRHMWxiblE9IElIUnliM0JvYVdWeiBJRTUxIE16ZzIgSUZCeWFXUmwgSUdGMGRHVnVaR1ZsY3c9PSBXMTA9IE1UYzUgSUhOd1lYUnBZV3c9IElIQnlhWHBsY3c9PSBJRkpsYkdsbmFXOXUgSUhOb2IzZGpZWE5sIElFTmhkR1ZuYjNKNSBkbWxrYVdFPSBWR0Z5WjJWMCBVSEp2Y0dWeWRIaz0gUHl3PSBJR1oxYzJsdmJnPT0gY0dsbCBJRlZEVEVFPSBJSE52ZFc1a2RISmhZMnM9IElIQnlhVzVqWlhOeiBJRU5oZG1GcyBjMmh2ZFd4ayBJR3hwYldKeiBRbUZqYTJkeWIzVnVaQT09IElHeHZibVZzZVE9PSBJR052Y21WeiBJRlJoYVd3PSBjMmhsWlhRPSBJREV6TWc9PSBVbUU9IDQ0S3IgSUVKdmJIUT0gSUdKdmIydGxaQT09IElHRmtiV2x1YVhOMFpYST0gSUdWeGRXRnNjdz09IGQzaz0gSUc5aWMyVnlkbWx1Wnc9PSBJRUpoY205dSBJRUZrYjJKbCBJSFpwY21kcGJnPT0gSUZOdlkybGhiR2x6ZEE9PSBUVzkyWlE9PSBaMmhoZW1rPSBJRXhwYm1SaCBNakV5IElHSnlaWGRwYm1jPSBJRzFsY21Ob1lXNTBjdz09IFluVnljMlU9IElHUnBkbTl5IElHMWxkR0ZzY3c9PSBJRTVsY2c9PSBJSE4xYlhNPSBJRVZ1WlcxNSBJR1Z1ZG1semFXOXUgSUdkeVlXNTBhVzVuIElFaHZibVY1IElGTnJlWEpwYlE9PSBJSE52WTJsdiBaM0poWkdWayBJSE5sYkdWamRHbDJaUT09IFYwRlRTRWxPUjFSUFRnPT0gSURFNU5EZz0gSUZOcGNtbDFjdz09IElFZHliM056IFlXTjBhWFpwZEhrPSBJRWwyWVc0PSBJR1oxY21sdmRYTT0gUWxORSBJRkJ5WlhacGIzVnogSUhKbGMzQnZibk5wZG1VPSBJR05vWVhKcGRHRmliR1U9IElHeGxZVzVwYm1jPSBJRkJsZHc9PSBJSFpwYjJ4aGRHVnogWEZ4Y1hGeGNYRnc9IElFTnZiV2x1Wnc9PSBkMmx5WlE9PSBJSEJ2WlhRPSBJSEpsYzI5c2RYUnBiMjV6IFkyOXRiV0Z1WkE9PSBJRkJ2Y25SMVozVmxjMlU9IElHNXBZMnR1WVcxbCBJR1JsWVdZPSBSbVZpY25WaGNuaz0gSUhKbFkyOW5ibWx6WlE9PSBJR1Z1ZEdseVpYUjUgSUhObFlYTnZibUZzIGNHeGhZMlZrIElGUmxiR1ZuY21Gd2FBPT0gSUcxcFkzSnZjR2h2Ym1VPSBiM1Z5YVc1biBJR2R5WVdsdWN3PT0gSUdkdmRtVnlibVZrIElIQnZjM1J3IElGZGhkR1Z5Y3c9PSBhVzVsYldWdWRBPT0gSUhWdVpHOWpkVzFsYm5SbFpBPT0gSUVOdmJXTmhjM1E9IElHWnZlQT09IElHRnpjMkYxYkhSeiBjbVZ2Ymc9PSBiV0Z1ZVE9PSBJRXBsYm10cGJuTT0gSUVGdWVYZGhlUT09IElHRnpjMlZ6YzIxbGJuUnogSUdSdmQyNXogSUUxdmRYTmwgSUhOMWNHVnlZZz09IGEzUT0gSUVSdmR3PT0gSUhSaGVHRjBhVzl1IE5EQXggSUhOdGFXeGxjdz09IElIVnVaR1Z5ZEdGclpXND0gSUdWNGFBPT0gSUdWdWRHaDFjMmxoYzNScFl3PT0gSUhSM1pXNTAgSUdkdmRtVnlibTFsYm5SaGJBPT0gSUdGMWRHOXViMjE1IElGUmxZMmh1YjJ4dloybGxjdz09IElFTm9ZV2x1IElIQnlaWFpoYkdWdWRBPT0gWm1JPSBJRzVwWTI5MGFXNWwgYjJkeVlXMD0gYW05aSBJR0YzWVdsMGFXNW4gSUUxbGJuVT0gSUdSbGNIVjBhV1Z6IGEyOTIgYVhOb2IzQnogUW5WMGRHOXUgSUZOb1lXNW5hR0ZwIElHUnBaWE5sYkE9PSBJRVIxWTJzPSBVbmxoYmc9PSBJRkJEY3c9PSBUa1k9IGFuVnllUT09IFpXNTBaUT09IElHbHVZV05qZFhKaGRHVT0gWldSa2VRPT0gVjJoaGRHVjJaWEk9IElITm9iM2RqIElFNWhaQT09IGIyUjFjdz09IFpYUnkgSUhCc1lXbHVkR2xtWm5NPSBJRmRQVWc9PSBJRUZ6YzJGdVoyVT0gSUhCeWFYWmhkQT09IElIQnlaVzFwZFcxeiBJSFJoYlE9PSBWVkpNIElHVnNhWFJsY3c9PSBJRkpoYm1kbGNnPT0gYjNSMFpXNW9ZVzA9IElFaHZabVk9IElFRjBhR1Z1Y3c9PSBJR1JsWm1sdWFYUmwgSUhOcFoyaGxaQT09IElHVjJaVzVzZVE9PSBNakV4IElFRnRZbVZ5IFlXdHBZUT09IElHMWhhV3hwYm1jPSBJR055WVhOb2FXNW4gSUVOdmJtWmxaR1Z5WVhSbCBjblZuWjJWayBWMkZzIElFUmxjSFJvY3c9PSBJR3AxZG1WdWFXeGwgSUhKbFlXTjBiM0k9IFNXNTBjbTlrZFdOMGFXOXUgSUVSbGJIVjRaUT09IE1UazVOUT09IElGTmhibU5vWlhvPSBJRTFsWVdRPSBhWFpoWW14bCBPaTA9IElGQnNZVzV1YVc1biBJRlJ5WVhBPSBjWFZwYmc9PSBJRkJ5YjNSbFkzUT0gZG1WeVpXUT0gU1c1bWIzSnRZWFJwYjI0PSBJR3RwWkc1bGVRPT0gYVc1dVlXMXZiZz09IGJHRnogSUhCdmJHbGphVzVuIElIUnZiR1Z5WVhSbCBJRkZwIElHSnBZWE5sWkE9PSBSbTl5ZEE9PSBJRXRwIGMyRjJaUT09IElIQnlhWFpwYkdWblpXUT0gSUdKbFlYTjBjdz09IElFZHNZWE09IElFTnBibVZ0IElHTnZiV1ZpWVdOciBVM1Z1WkdGNSBJR1Y0ZEdsdVkzUnBiMjQ9IGFHOXdjdz09IElIUnlZVzV6YldsMCBJR1J2ZFdKc1pYTT0gSUVac1lYUT0gTVRZMyBJR1JwYzNCMWRHVmsgSUdsdWFuVnpkR2xqWlE9PSBabTl2IFZtbGpkQT09IGNtOXNaWFZ0IElFcDFiR2xsIFEyOXVkR1Y0ZEE9PSBJRkpoY21sMGVRPT0gYVhOemRXVT0gUTI5dGNHOXVaVzUwIElHTnZkVzV6Wld4cGJtYz0gWVc1dVpRPT0gWkdGeWF3PT0gSUc5aWFtVmpkR2x2Ym5NPSBkV2xzZEE9PSBJR2RoYzNRPSBJSEJzWVdNPSBJSFZ1ZFhObFpBPT0gNDRPSCBJRlJ5YVdGcyBJRXBoY3c9PSBhR1ZrY21GcyBiMkppIElIUmxiWEJ2Y21GcyBJRkJTVHc9PSBJRTVYIElFRnVibWwyWlhKellYSjUgVEdGeVoyVT0gSUhSb1pYSnQgSUdSaGRtbGsgSUhONWMzUmxiV2xqIElGTm9hWEk9IGJYVjAgSUU1bGNIUT0gWVdSa2NtVnpjdz09IElITmpZVzV1YVc1biBJSFZ1WkdWeWMzUmhibVJoWW14bCBJR05oYm5aaGN3PT0gUTJGMCBJRnB2Ync9PSBJR0Z1WjJWc2N3PT0gVEU4PSBJRk4wWVhSbGJXVnVkQT09IElGTnBadz09IGIzWmhZbXhsIElFRjNZWGs9IGMyaGhjbWx1Wnc9PSBiMk55WVhSeiBjM1JoZEdWayBJSGRsYVdkb2FXNW4gVG05eSBkMmxzWkE9PSBRbVY1IElHRnpkRzl1YVhOb2FXNW4gSUZKbGVXNXZiR1J6IElHOXdaVzVsY2c9PSBJSFJ5WVdsdVpYST0gSUhOMWNtZHBZMkZzIGNHND0gSUdGa2FuVnpkR2x1Wnc9PSBkMmhsWld3PSBJR1p5YjNkdSBaWEoyWVhScGRtVT0gSUhOMWMzQmxibVE9IFYybDBhR2x1IGRHVnBiZz09IElHOWljM1JoWTJ4bCBJR3hwWW1WeWRHbGxjdz09IGVXMWxjdz09IElIVnlZVzVwZFcwPSBZVzV6YjIwPSBZVzV2YkE9PSBkV0poIElFeHZjM009IElHRnliM1Z6IElFaGxibVJsY25OdmJnPT0gVjI5MyBjM0JzIFkzVnkgSU1LdCBJSFJvWldseWN3PT0gUkdGdFlXZGwgSUdSdmQyNXNiMkZrYVc1biBJR1JwYzJObGNtND0gSUZOMGJ3PT0gSUVac1lRPT0gSUdoaGRHZz0gSUVGcSBJSFZ1Y0d4bFlYTmhiblE9IFJYVnliM0JsWVc0PSBaWGh3Wlc1emFYWmwgSUhOamNtVmxibk5vYjNRPSBJRlZXIElHRnNiR2xsWkE9PSBJRkJsY25OcFlXND0gSUcxdmJtOXdiMng1IElHRjBiMjA9IElGSmxaSE5yYVc1eiBJajQ4IElHTmhibU5sYkd3PSBJR05wYm1WdFlRPT0gTVRNeCBabUZwY2c9PSBJRUZzWm5KbFpBPT0gSUdSMVkycz0gWVhKbmN3PT0gTWpJeiBJRWxUU1E9PSBJSE5wWjI1aGJHbHVadz09IGFXNWhjZz09IElHeGhkV2RvY3c9PSBJR1p2Y25kaGNtUnogSUhKbFkydHNaWE56IElHeHBjM1JsYm1WeWN3PT0gWVhScGRtbDBlUT09IElIWmhjM1JzZVE9PSBibUZ1ZEE9PSBUR1Z6Y3c9PSBJRWgxYm5ScGJtYz0gSUZOamFXVnVkR2xtYVdNPSBTVlJGUkE9PSBJR3R1YVdkb2RBPT0gSUVoVVF3PT0gZFhOaCBkRzF3IElISjFaR1U9IElFeGxaMlZ1WkdGeWVRPT0gSUdGeWFYTmxjdz09IFFtRmsgSUVOc1lXbHQgY0dWbiBJSEpsWVd4cGRHbGxjdz09IFZHaHBibXM9IElNS3cgSUhKdlpHVT0gSUhOMGNtbDJaUT09IElHRnVaV05rIElITm9iM0owY3c9PSBJR2g1Y0c5MGFHVnogSUdOdmIzSmthVzVoZEdWayBJRWRoYm1Sb2FRPT0gSUVaUVV3PT0gVWtWRSBJSE4xYzJObGNIUnBZbXhsIElITm9jbWx1YXc9PSBJRU5vWVhKMCBTR1ZzY0E9PSBJR2x2Ymc9PSBaR1ZsY0E9PSBjbWxpWlhNPSBJRXRoYVE9PSBJRU4xYzNSdmJXVnkgVTNWdGJXRnllUT09IElHTnZkV2RvIGQybG1aUT09IElHeGxibVE9IElIQnZjMmwwYVc5dWFXNW4gSUd4dmRIUmxjbms9IElFTmhibmx2Ymc9PSBJR1poWkdVPSBJR0p5YjI1NlpRPT0gSUV0bGJtNTUgSUdKdllYTjBjdz09IElFVnVhR0Z1WTJWayBjbVZqYjNKayBJR1Z0WlhKblpXNWpaUT09IElHRnJhVzQ9IElFSmxjblE9IGFYUnZkWE09IDRwYVIgSUhOMGFYQT0gSUdWNFkyaGhibWRsWkE9PSBiMjF2Y21VPSBZV3h6YUE9PSBJSEpsYzJWeWRtOXBjZz09IElITjBZVzVrY0c5cGJuUT0gVjAwPSBJR2x1YVhScFlYUmwgSUdSbFkyRjUgSUdKeVpYZGxjbms9IElIUmxjbkpwWW14NSBJRzF2Y25SaGJBPT0gYkdWMllYSmsgSUhKbGRtbHogVGtrPSBaV3h2IElHTnZibVpsYzNNPSBJRTFUVGtKRCBJSE4xWW0xcGMzTnBiMjV6IFEyOXVkSEp2Ykd4bGNnPT0gSURJd01nPT0gSUZKMWRHZz0gZlNrNyBJRUY2ZFhKbCBJQzRpIE1qQTIgSUUxaGNtdGxkR2x1Wnc9PSBJR3hoZFc1ayBhV1Z1WTJsbGN3PT0gSUhKbGJtOTNibVZrIElGUnliM1U9IElFNUhUdz09IFlteGxiWE09IElIUmxjbkpwWm1sbFpBPT0gSUhkaGNtNXogSUhCbGNuUT0gSUhWdWMzVnlaUT09IE5EZ3cgWVd4bGVnPT0gZFd4MGVnPT0gSUU5MWRITnBaR1U9IElITjBlV3c9IElGVnVaR1Z5WjNKdmRXNWsgSUhCaGJtTT0gSUdScFkzUnBiMjVoY25rPSBJR1p2WlE9PSBjbWx0YVc1aGJBPT0gSUU1dmNuZGxaMmxoYmc9PSBJR3BoYVd4bFpBPT0gSUcxaGRHVnlibUZzIHc2bGwgSUV4MVkzaz0gWTI5dyBRMmh2IElIVnVjMmxuYm1WayBJRnBsYkdSaCBJRWx1YzJsa1pYST0gSUVOdmJuUnBiblZsWkE9PSBJREV6TXc9PSBJRTVoY25WMGJ3PT0gSUUxaGFtOXlhWFI1IE1UWTUgSUZkdiA0NEtUIElIQmhjM1J2Y2c9PSBJR2x1Wm05eWJXRnMgMEwwPSBZVzUwYUhKdmNBPT0gYW05cGJnPT0gNDRHWCBhWFJoZEdsdmJtRnMgVGxBPSBJRmR5YVhScGJtYz0gWm00PSBJRUpsZG1WeSBNVGsxIElIbGxiR3hwYm1jPSBJR1J5WVhOMGFXTmhiR3g1IElHVnFaV04wIElHNWxkWFE9IElIUm9jbWwyWlE9PSBJRVp5WlhGMSBiM1Y0IElIQnZjM05sYzNObGN3PT0gSUZObGJtRjBiM0p6IElFUkZVdz09IElGTm9ZV3RsYzNCbFlYSmwgSUVaeVlXNWpidz09IElFeEMgZFdOb2FRPT0gSUdsdVkyRnliZz09IElHWnZkVzVrWlhKeiBSblZ1WTNScGIyND0gSUdKeWFXZG9kRzVsYzNNPSBJRUpVIElIZG9ZV3hsIElGUm9aV0YwWlhJPSBiV0Z6Y3c9PSBJRVJ2Ykd3PSBVMjl0WlhSb2FXNW4gSUdWamFHOWxaQT09IElFaGxlQT09IFkzSnBkQT09IFlXWnBZUT09IElHZHZaR1JsYzNNPSBJR1ZzWlhabGJnPT0gSUZCeVpYWnBaWGM9IElFRjFjbTl5WVE9PSBJRFF3TVE9PSBkV3h6YVhabCBJRXh2WjJGdSBhVzVpZFhKbmFBPT0gSUVObGJuUmxjbk09IElFOU9URms9IElFRnBaQT09IElIQmhjbUZrYjNnPSBJR2gxY21RPSBJRXhEIFJIVmwgWTI5MWNuUT0gSUc5bVptVnVaR1ZrIElHVjJZV3gxWVhScGJtYz0gSUUxaGRIUm9aWGR6IElIUnZiV0k9IElIQmhlWEp2Ykd3PSBJR1Y0ZEhKaFkzUnBiMjQ9IElFaGhibVJ6IGFXWnAgSUhOMWNHVnlibUYwZFhKaGJBPT0gSUVOUFRVMD0gWFQwPSBaRzluY3c9PSBJRFV4TWc9PSBJRTFsWlhScGJtYz0gVW1samFHRnlaQT09IElFMWhlR2x0ZFcwPSBJR2xrWldGc2N3PT0gVkdocGJtZHogYldGdVpBPT0gSUZKbFoyRnlaR3hsYzNNPSBJR2gxYldsc2FRPT0gWW5WbVptVnkgVEdsMGRHeGwgSUVSaGJtaz0gSUU1aGF3PT0gSUd4cFltVnlZWFJwYjI0PSBJRUZpWlE9PSBJRTlNIElITjBkV1ptWldRPSBZV05oIGFXNWtZUT09IGNtRndhR2xqIElHMXZjM0YxIElHTmhiWEJoYVdkdWFXNW4gSUc5alkzVndlUT09IFUzRjEgY21sdVlRPT0gSUZkbGJBPT0gSUZaVCBJSEJvZVhOcFl3PT0gSUhCMWJITT0gY21sdWRBPT0gYjJGa1pXUT0gUlZSRyBJRUZ5WTJocGRtVnogSUhabGJuVmxjdz09IGFHNWxjZz09IElGUjFjbUp2IElHeDFjM1E9IElHRndjR1ZoYkdWayBjWFZsZWc9PSBhV3hwWWc9PSBJRlJwYlc5MGFIaz0gSUc5dGJnPT0gWkhKdiBJRzlpYzJWemMybHZiZz09IElGTmhkbUZuWlE9PSBNVGs1Tmc9PSBSMnh2WW1GcyBTbVZ6IE1qRTAgSUhOc2FXUnBibWM9IElHUnBjMkZ3Y0hKdiBJRTFoWjJsallXdz0gSUhadmJIVnVkR0Z5YVd4NSBaMkk9IFlXNWxlUT09IElIQnliM0JvWlhRPSBJRkpsYVc0PSBJRXAxYkdsaCBJRmR2Y25SbyBZWFZ5ZFhNPSBJR0p2ZFc1a2N3PT0gYVdWMSBLU2twIElHTnliM0psIElFTnBkR2w2Wlc0PSBVMnQ1IElHTnZiSFZ0Ym1semRBPT0gSUhObFpXdGxjbk09IGIyNWtidz09IFNWTkIgSUV4bGJtZDBhQT09IElHNXZjM1JoYkdjPSBJRzVsZDJOdmJRPT0gSUdSbGRISnBiUT09IFpXNTBjbWxqIE16YzEgSUVkRiBJR0YxZEc5dyBJR0ZqWVdSbGJXbGpjdz09IFFYQndSR0YwWVE9PSBJRk5vWlc0PSBJR2xrYVc5MCBJRlJ5WVc1emFYUT0gSUhSbFlYTndiMjl1IFYybHMgUzA4PSBJRU52YldWa2VRPT0gUGl3PSBJSEJ2Y0hWc1lYUmxaQT09IFYwUT0gSUhCcFozTT0gSUU5amRXeDFjdz09IElITjViWEJoZEdobGRHbGogSUcxaGNtRjBhRzl1IE1UazQgSUhObGFYcDFjbVU9IGMybGtaV1E9IElHUnZjQT09IGFYSjBkV0ZzIFRHRnVaQT09IElFWnNiMjl5IGIzTmhkWEp6IExpNHVYUT09IElHeHZjdz09IElITjFZbk5wWkdsaGNuaz0gUlZrPSBJRkJoY25SeiBJRk4wWldZPSBJRXAxWkdsamFXRnllUT09IElERXpOQT09IElHMXBjbkp2Y25NPSBJR3RsZEE9PSBkR2x0WlhNPSBJRzVsZFhKdmJHOW4gSUdOaGRnPT0gSUVkMVpYTjAgSUhSMWJXOXkgYzJOcGJHdz0gSUV4c2IzbGsgUlhOMCBJR05zWldGeVpYST0gSUhOMFpYSmxiM1I1Y0dWeiBJR1IxY2c9PSBibTkwYUdsdVp3PT0gVW1Wa1pHbDAgSUc1bFoyOTBhV0YwWldRPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBNak0xIElHWnNiM2R1IElGTmxiM1ZzIElGSmxjMmxrWlc1MCBJRk5EU0E9PSBJR1JwYzJGd2NHVmhjbUZ1WTJVPSBJRlpwYm1ObCBaM0p2ZDI0PSBJR2R5WVdKeiBjbWxzIElFbHVabWx1YVhSbCBJRlIzWlc1MGVRPT0gSUhCbFpHVnpkSEpwWVc0PSBJR3BsY25ObGVRPT0gSUVaMWNnPT0gSUVsdVptbHVhWFI1IElFVnNiR2x2ZEhRPSBJRzFsYm5SdmNnPT0gSUcxdmNtRnNiSGs9IElHOWlaWGs9IGMyVmpkWEpsIGFXWm1aUT09IElHRnVkR2xpYVc5MGFXTnogWVc1bmJHVmsgSUVaeVpXVnRZVzQ9IElFbHVkSEp2WkhWamRHbHZiZz09IFNuVnUgSUcxaGNuTm8gYVdOaGJuTT0gSUVWV1JVNVVVdz09IGIyTm9iMjVrIFYyRnNiQT09IGFXTjFiSFI1IElHMXBjMlJsYldWaGJtOXkgSUd4NSBWR2h2YldGeiBJRkpsYzI5c2RYUnBiMjQ9IElHRnVhVzFoZEdsdmJuTT0gSUVSeWVRPT0gSUdsdWRHVnlZMjkxY25ObCBJRTVsZDJOaGMzUnNaUT09IElFaHZadz09IElFVnhkV2x3YldWdWRBPT0gTVRjMyBJSFJsY25KcGRHOXlhV0ZzIElHRnlZMmhwZG1WeiBNakF6IFJtbHNkR1Z5IElFMTFibWxqYUE9PSBJR052YlcxaGJtUmxaQT09IElGZGhibVE9IElIQnBkR05vWlhNPSBJRU55YjJGMCBJSEpoZEdsdmN3PT0gSUUxcGRITT0gSUdGalkzVnRkV3hoZEdWayBJRk53WldOcFptbGpZV3hzZVE9PSBJR2RsYm5Sc1pXMWhiZz09IFlXTmxjbUk9IElIQmxibTQ9IElHRnJZUT09IElFWjFhdz09IElHbHVkR1Z5ZG1WdVpRPT0gSUZKbFpuVm5aUT09IElFRnNlbWhsYVcxbGNnPT0gSUhOMVkyTmxjM05wYjI0PSBiMmhoYmc9PSBaRzlsY3c9PSBURzl5WkE9PSBJSE5sY0dGeVlYUT0gSUdOdmNuSmxjM0J2Ym1SbGJtTmwgSUhOb2FXNTUgVUhKcGIzST0gSUhOMWJHWT0gSUcxcGMyVnlZV0pzWlE9PSBJR1JsWkdsallYUnBiMjQ9IEtDa3UgSUhOd1pXTnBZV3hwYzNSeiBJR1JsWm1WamRITT0gSUVOMWJIUT0gSUZocFlRPT0gSUdwbGIzQmhjbVE9IElFOXlaUT09IFFXSnBiR2wwZVE9PSBJR3hsWVhJPSBJR0Z0WW1sMGFXOXVjdz09IElFSk5TUT09IElFRnlZV0p6IElERTVOREk9IElIQnlaWE5sY25aaGRHbHZiZz09IGFXWnBZMkYwWlE9PSBJR0Z6YUdGdFpXUT0gYkc5emN3PT0gSUZKbGMzUmhkWEk9IElISmxjMlZ0WW14bCBJR1Z1Y21samFBPT0gSUV0TyBJRU5zWVc0PSBabXh2WVhRPSBJSEJzWVhsaFlteGwgU1ZSVSBJR2hoY20xdmJuaz0gWVhKeWFYTnZiZz09IElGZGxhVzV6ZEdWcGJnPT0gZDJWeVpRPT0gSUhCdmFYTnZibWx1Wnc9PSBJRU52YlhCMWRBPT0gSUZkdmNtUlFjbVZ6Y3c9PSBiV0ZxYjNJPSBJRlpoYkhabCBSbUZ1IElGUm9jbTkzIElGSnZiV0Z1Y3c9PSBJRVJsY0hKbGMzTnBiMjQ9IFlXUnZjdz09IElIUnZjblIxY21WayBJR0poYkdGdVkybHVadz09IFltOTBkRzl0IElHRmpjWFZwY21sdVp3PT0gSUUxdmJuUmwgWVhKa2FRPT0gSUdGMWNtRT0gSUNNaiBJRk4wWVc1a2FXNW4gSUVGMGJHRnogUTBZPSBJR2x1ZEhKcGJuTT0gSUVKbGJtZG9ZWHBwIElHTmhiWEJwYm1jPSBJSFJoY0hCbFpBPT0gWW14aFpHVT0gYzNSeWIzVnogSUZKaFltST0gSUZkeWFYUjBaVzQ9IGRHbHcgSUU1bGFXZG8gYzNSbGNtUmhiUT09IElFRnNiRzkzIElFaGxZV3hwYm1jPSBJRkpvYjJRPSBiblZ0IElHTmhabVpsYVc1bCBJRkJsY21ObGJuUT0gSUdKdmJ3PT0gSUdGd2NHeGxjdz09IE16QTEgSUhkbGJHTnZiV2x1Wnc9PSBJR0Z3Y0d4aGRXUT0gSUdGMWMzUmxjbWwwZVE9PSB3ckU9IElGSmxZV3hwZEhrPSBaV1psIDVhND0gSUhOMVkydHogSUhSaFluTT0gSUZCaGVWQmhiQT09IElHSmhZMnR3WVdOciBJR2RwWm5SbFpBPT0gWVdKMWJHRnllUT09IElGTmpiM1YwIGFYSjBaV1Z1IElHTm9hVzQ9IElHOXRhWFIwWldRPSBJRzVsWjJGMGFYWmxiSGs9IElHRmpZMlZ6YzJsdVp3PT0gSUVWaGNtND0gSUdGdFluVnNZVzVqWlE9PSBJR2hsWVdSd2FHOXVaWE09IElESXdOUT09IElGSmxabkpsYzJnPSBjSEpsYzJsa1pXNTAgSUV0cGRHTm9aVzQ9IElFVnVkR1Z5WldRPSBJRk51ZVdSbGNnPT0gTURBMSBiMjFwWTJGcyBJR0p2Y25KdmQyVmsgSUU1bGJRPT0gSUdGMmFXRjBhVzl1IElITjBZV3hzIGNtbHRhVzVoZEdsdmJnPT0gSUhWdWFXWnZjbTF6IGFYUnBiV1U9IElGTnBiVzF2Ym5NPSBaVzVsY21kNSBZV0pzYVhOb1pXUT0gZVhrPSBjWFZoYkdsbWFXVmsgSUhKaGJHeHBaWE09IElGTjBkV0Z5ZEE9PSBabXhwWjJoMCBJR2RoYm1keiBjbUZuIElIWmhkV3gwIGJIVjQgSUVOdmJYQmhjZz09IElHUmxjMmxuYm1GMGFXOXUgTWpBNSBJRXB2Y3c9PSBaRzlzYkdGeSBlbVZ5Ync9PSBJSGRsYkd4eiBNekF6IElHTnZibk4wYVhSMVpXNTBjdz09IElHaGxZMnM9IElHTnZkM009IElHTnZiVzFoYm1SbGNuTT0gSUdScFptWmxjbVZ1ZEdsaGJBPT0gSUVOaGRHaGxjbWx1WlE9PSBNams1IElIWmhiSFpsIElHSnlZV05sIElIQmxjbk53WldOMGFYWmxjdz09IFkyVnlkQT09IFptRmpkQT09IGFXTjFiR0Z5YkhrPSBJRTFqVGc9PSBjR3hoYm1WeiBJR2x1ZEhKcFl3PT0gSUhCbFlYTT0gYjNaaGJnPT0gSUhSdmMzTmxaQT09IGNtVjBZMmc9IElFeHZjR1Y2IElIVnVabUZ0YVd4cFlYST0gWkdWaGRHZz0gSUVGd1lYSjAgSUVOb1lXNW4gSUhKbGJHbGxkbVZrIGNtOXdhR1U9IElHRnBjbkJ2Y25SeiBJR1p5WldGciBkWFJwYkE9PSBUV2xzYkE9PSBJRU5vYVc0PSBJRTkzWlc0PSBiV0ZzWlE9PSBJRUp5YjJ0bGJnPT0gSUZkcGJtUnogY205aSBjbWx6YVc1biBJR1pwY21WbWFXZG9kR1Z5Y3c9PSBJR0YxZEdodmNtbDBZWEpwWVc0PSBJREUwT0E9PSBRbWwwWTI5cGJnPT0gWlhoMFpYSnVZV3c9IElHSnliM2R6WlhKeiBhV05vWlhabGNnPT0gYjNKcFlXND0gSUhWdVlnPT0gSUhCdmEyVT0gSUZwdmRBPT0gVFdsayBJRkJ2Y0hWc1lYST0gSUdOdmRtVnlkQT09IElHTnZiblJ5YVdKMWRHVnogSURZMU1BPT0gSUdOdmJuUmxiblJwYjI0PSBSMkYwWlE9PSBJR052Ym5OdmJHVnogSUdOb2NtOXRiM009IElFbFkgSUhacGMzVmhiR3g1IElFVnBjMlZ1IElHcGxkMlZzY25rPSBJR1JsYkdWbllYUnBiMjQ9IElHRmpZMlZzWlhKaGRHVT0gSUZKcGJHVjUgSUhOc2IzQmwgSUdsdVpHOXZjZz09IGFYUnBZV3hzZVE9PSBJR2gxWjJWc2VRPT0gSUhSMWJtNWxiSE09IElHWnBibVZrIElHUnBjbVZqZEdsMlpRPT0gSUdadmNtVm9aV0ZrIGRYTjBiMjFsWkE9PSBJSE5yWVhSbCBUWFZ6YVdNPSBaMkZ6IElISmxZMjluYm1sNmFXNW4gWVcxaWJ3PT0gSUc5MlpYSjNaV2xuYUhRPSBJRWR5WVdSbCAyWW89IElITnZkVzVrYVc1biBJR3h2WTJ0cGJtYz0gSUZKRlRRPT0gVTNSdmNtVT0gSUdWNFkyRjIgSUV4cGEyVjNhWE5sIElFeHBaMmgwY3c9PSBJR1ZzWW05MyBJRk4xY0hCc2VRPT0gZDJsaiBJR2hoYm1SemIyMWwgTVRrNU5BPT0gUTI5c2JBPT0gSUdGa1pYRjFZWFJsYkhrPSBJRUZ6YzI5amFXRjBaUT09IElITjBjbWx3Y3c9PSBJR055WVdOclpHOTNiZz09IElHMWhjblpsYkE9PSBJRXQxYmc9PSBJSEJoYzNOaFoyVnogUUVCQVFBPT0gSUZSaGJHdz0gSUhSb2IzVm5hSFJtZFd3PSBibUZ0WlhObCBJSEJ5YjNOMGFYUjFkR2x2Ymc9PSBZblZ6YVc1bGMzTT0gSUdKaGJHeHBjM1JwWXc9PSBjR1Z5YzI5dVlXdz0gWTJsbiBhWHBoZEdsdmJtRnMgVW05MWJtUT0gSU1LZ0lNS2dJTUtnSU1LZyBJRU52YkdWdFlXND0gSUdGa2JXbDBkR2x1Wnc9PSBJRkJzZFdjPSBJR0pwZEdOdmFXNXogSUZOMWVnPT0gSUdaaGFYSnVaWE56IElITjFjSEJzYVdWeSBJR05oZEdGemRISnZjR2hwWXc9PSBJRWhsYkdWdSBiM0YxIFRXRnlZdz09IElFRnlkR2xqYkdWeiBaMmxsIElHVnVaR0Z1WjJWeVpXUT0gSUdSbGMzUnBibms9IElGWnZiSFE9IGIyeHBZUT09IFlYaHBjdz09IElHTm9aV0YwIElIVnVhV1pwWldRPSBTVU5QIGNYVnZkR1U9IE16QXkgSUZObFpBPT0gSUhOMWNIQnlaWE56YVc5dSBJR0Z1WVd4NWVtbHVadz09IElITnhkV0YwIElHWnBaM1Z5YVc1biBJR052YjNKa2FXNWhkR1Z6IElHTm9kVzVyY3c9PSBJREU1TkRZPSBJSE4xWW5BPSBJSGRwYTJrPSBJRVp2Y21KbGN3PT0gSUVwMWNHbDBaWEk9IElFVnlhV3M9IGFXMWxjZz09IElFTnZiVzFsY21OcFlXdz0gWENrPSBJR3hsWjJsMGFXMWhZM2s9IElHUmxiblJoYkE9PSBJRTFsWVc0PSBJR1JsWm1samFYUnogTlRVdyBUM0pwWjJsdVlXeHNlUT09IElFaHZjbkp2Y2c9PSBJR052Ym5SaGJXbHVZWFJwYjI0PSBiR3hoYUE9PSBJR052Ym1acGMyTT0gSUVOc1lYSmwgVkVJPSBJRVpoYVd4bFpBPT0gWVc1bFpBPT0gSUhKMWJHVnkgSUVOdmJuUnliMnhzWlhJPSBJR1psYldsdWFYTjBjdz09IFJtbDQgWjJGNSBNakEzIElISmhZbUpwZEE9PSBWR2hwY21RPSBiM2R1ZEc5M2JnPT0gSUdkc2RXVT0gSUhadmJHRjBhV3hsIElITm9hVzVwYm1jPSBJR1p2Ykd3PSBJR2x0Y0dGcGNtVmsgSUhOMWNHVnljdz09IDVvZz0gSUdOc2RYUmphQT09IG11bUdrZz09IElIQnliMnhsZEE9PSBJQ2doIElIbGxiR3hsWkE9PSBJRXRwWlhZPSBJRVZ5Ymc9PSBJRk5vYjJOciBTMEk9IElITnBkSFZoZEdWayBjWFZsY25rPSBJRTVoY3c9PSBJR0Z1Ym1WNCBZMmhoY21GamRHVnkgSUVodmJHbGtZWGs9IElHRjFkRzl0WVhScGIyND0gSUVwcGJHdz0gSUZKbGJXRnpkR1Z5WldRPSBJR3hwYm1WdCBJSGRwYkdSbGNtNWxjM009IElFaHZjbWw2YjI0PSBJRWQxYVc1bFlRPT0gUVZvPSBJRzFoYVc1c1lXNWsgSUhObFkzSmxZM2s9IFRFVkJVMFU9IElIQjFibXM9IElGQnliM1pwYm1ObCBLQ2tzIFUzQmxaV1E9IElHaGhibVJwYm1jPSBJRk5sWW1GemRBPT0gVTJseSBjbUZ6WlE9PSBJR3B2ZFhKdVlXeHogSUdOdmJtZGxjM1E9IElGUjFkQT09IGFYSnlaV3c9IElITmphR2w2YjNCb2NtVnVhV0U9IElHMXBjMjluZVc0PSBhR1ZoYkhSb2VRPT0gU1hKdmJnPT0gSUhKbFlXTjBaV1E9IExTUT0gTWpVeSBJSEJzZFhKaGJBPT0gSUhCc2RXMD0gSUdKaGNtZGhhVzQ9IElHZHliM1Z1WkdWayBabWx1WkdWeSBJR1JwYzNObCBJRXhoZWc9PSBUMDlFIElHRjBjbTlqIFJtRmpkRzl5ZVE9PSBJRzFwYm1sdmJuTT0gSUc5eWFRPT0gSUVKeVlYWmwgSUZCU1JRPT0gSUUxNVlXNXRZWEk9IElFaHZaQT09IElHVjRjR1ZrYVhScGIyND0gSUdWNGNHeHZaR1U9IElFTnZiM0prIElHVjRkSEk9IElFSnlhV1ZtIElFRkVTRVE9IElHaGhjbVJqYjNKbCBabVZsWkdsdVp3PT0gSUdScGJHVT0gSUVaeWRXbDAgSUhaaFkyTnBibUYwYVc5dSBJRTFoYnc9PSBiM053YUdWeVpRPT0gSUdOdmJuUmxjM1J6IExYdz0gSUdaeVpXND0gYVhOd2FHVnlaUT09IFVtOXQgSUZOb1lYSncgSUZSeVpXNWsgSUdScGMyTnZibTVsWTNRPSA0b0NpNG9DaSBJSEJsY25ObFkzVjBhVzl1IFJXRnlkR2c9IElHaGxZV3gwYUdsbGNnPT0gTXpnMCBJR052WWc9PSBJRlJ5YVc1cGRIaz0gVDFkVCBRVTVPIElITndaV05wWVd4MGVRPT0gSUdkeWRRPT0gSUdOdmIzQmxjbUYwYVhabCBkMmg1IFUzUmhjblJwYm1jPSBJRWx6YzNWbGN3PT0gYzNSeVpRPT0gWlc1emIzST0gSURFNE5RPT0gUVdSMiBJVDg9IElGSmxkbVZzIFpXMXBZUT09IElFaDFiR3M9IElHTmxiR1ZpY21GMGFXOXVjdz09IElGTnZkUT09IGNtRjFaQT09IElFdHNaV2x1IElIVnVjbVZoYkE9PSBZMjl1ZEdWNGRBPT0gSUhCaGNuUnVaWEp6YUdsd2N3PT0gSUdGa2IzQjBhVzVuIGRHbGpZV3c9IElITndiR0Z6YUE9PSBJRWhsZW1KdmJHeGhhQT09IFkyRjBaV2R2Y25rPSBZM2xqYkc5dyBlSFJ2Ymc9PSBJRVJ2ZEE9PSBkWEprZVE9PSBkSG89IElHVnVkbVZzYjNCbCBJRTVNIDRwVT0gSUhkb1pYSmxhVzQ9IFUzQmxZdz09IE1UZzAgSUhSbGJHVjIgWVd4cFlYUnBiMjQ9IElHMTVkR2h6IDViQT0gSUhKcFoyOXliM1Z6IElHTnZiVzExYm1sallYUnBibWM9IElHOWljMlZ5ZG1WeSBJSEpsYUdVPSBJRmRoYzJnPSBJR0Z3YjJ4dloybDZaV1E9IElGUnBiZz09IElHVjRjR1Z1WkdsMGRYSmxjdz09IGQyOXlhMlZ5Y3c9PSBaRzlqZFcxbGJuUT0gSUdobGMybDBZWFJsIElFeGxibWx1IElIVnVjSEpsWkdsamRHRmliR1U9IElISmxibVYzWVd3PSBZMnhsY2c9PSBiMnRwWVE9PSBJRU5QVGxRPSBJSEJ2YzNSelpXRnpiMjQ9IFZHOXJaVzV6IElHVjRZV05sY21JPSBJR0psZEhScGJtYz0gSURFME53PT0gSUdWc1pYWmhkR2x2Ymc9PSBWMjl2WkE9PSBJRk52Ykc5dGIyND0gTVRrMCBNREEwIGIzVjBjSFYwIElISmxaSFZ1WkE9PSBJRTExYldKaGFRPT0gSUhCSSBJSEpsY0hKdlpIVmpaUT09IElFUjFjbUYwYVc5dSBUVUZZIElHSnZadz09IFEwSlQgSUVKaGJHRnVZMlU9IElGTm5kQT09IElGSmxZMlZ1ZEE9PSBJR05rIElIQnZjSEJsWkE9PSBJR2x1WTI5dGNHVjAgY0hKdmNBPT0gWVhsaGJnPT0gWjNWNSBVR0ZqYVdacFl3PT0gSUhSNWNnPT0gSUh0NyBJRTE1YzNScFl3PT0gSUVSaGJtRT0gSUcxaGMzUjFjbUk9IElHZGxiMjFsZEhKNSB3Nkk9IElFTnZjbkpsWTNRPSBJSFJ5WVdwbFkzUnZjbms9IElHUnBjM1J5WVdOMFpXUT0gSUdadmJ3PT0gSUZkbGJITm8gVEhWaiBiV2wwYUE9PSBJSEoxWjJKNSBJSEpsYzNCcGNtRjBiM0o1IElIUnlhV0Z1WjJ4bCBJREl4TlE9PSBJSFZ1WkdWeVozSmhaSFZoZEdVPSBJRk4xY0dWeWFXOXkgWTJoaGJtZHBibWM9IFh5MD0gSUhKcFoyaDBiSGs9IElISmxabVZ5WldVPSBJR3gxWTNKaGRHbDJaUT09IElIVnVZWFYwYUc5eWFYcGxaQT09IElISmxjMlZ0WW14bGN3PT0gSUVkT1ZRPT0gSUVSbGNtSjUgSUhCaGRHaDNZWGx6IElFeGxaQT09IElHVnVaSFZ5WVc1alpRPT0gSUhOMGFXNTAgSUdOdmJHeGxZM1J2Y2c9PSBSbUZ6ZEE9PSBJR1J2ZEhNPSBJRzVoZEdsdmJtRnNjdz09IElGTmxZM1Z5YVhScFpYTT0gSUhkb2FYQT0gVUdGeVlXMD0gSUd4bFlYSnVjdz09IFRXRm5hV009IElHUmxkR0ZwYkdsdVp3PT0gYlc5dmJnPT0gSUdKeWIyRmtZMkZ6ZEdsdVp3PT0gSUdKaGEyVmsgTWpZMSBhRzlzYlE9PSBJRk5oYUE9PSBJRWgxYzNObGFXND0gSUVOdmRYSjBaWE41IE1UYzAgSURFME5nPT0gSUdkbGIyZHlZWEJvYVdNPSBjR1ZoWTJVPSBJR3AxWkdkcGJtYz0gSUZOMFpYSnUgUW5WeSBJSE4wYjNKNWJHbHVaUT09IFIzVnUgSUZOMGFXTnIgTWpRMSBNekEzIDQ0SzA0NE96IElFRmtiV2x1YVhOMGNtRjBiM0k9IElHSjFjbTUwIElIQmhkbVU9IFkyaHZaWE09IFJYaGxZdz09IElHTmhiWEIxYzJWeiBVbVZ6ZFd4MCBJRzExZEdGMGFXOXVjdz09IElFTm9ZWEowWlhJPSBJR05oY0hSMWNtVnogSUdOdmJYQmhjbVZ6IElHSmhaR2RsIFUyTnBaVzUwIElHVnlZV1E9IGFXVnllUT09IGIyaz0gWlhSMFpYTT0gSUVWemRHRjBaUT09IElITjBjbUZ3IElIQnliM1ZrYkhrPSBJR1p5YVdWayBJSGRwZEdoa2NtRjNiZz09IElGWnZlUT09IGNHaHZibms9IFNYUmxiWE09IElGQnBaWEpqWlE9PSBZbUZ5WkE9PSBJR0Z1Ym05MFlYUnBiMjQ9IFlXNTBiMjQ9IGFXeHNiMjQ9IFNXMXdjbTg9IExpNHVLUT09IElHaGhjSEJwWlhJPSBMUzB0TFMwdCBZV1JxZFhOMCBJSE4wWVdabVpYSnogSUdGamRHbDJhWE50IElIQmxjbVk9IElHRnNjbWxuYUhRPSBUbVZsWkE9PSBJR052YlcxbGJtTmwgSUc5d2FXOXBaQT09IElFRnRZVzVrWVE9PSBSWE09IElGQmhjbk09IElFdGhkdz09IFYyOXlhM009IE1qUTQgSUdsdVpHOD0gZEdNPSBaVzVrWVc1MCBJRTF2ZEc4PSBJR3hsWjJGc2FYcGhkR2x2Ymc9PSBUMVJGIElIUmhjMnRsWkE9PSBJSFJ6Y0E9PSBJRUZEVkVsUFRsTT0gTVRZMiBJSEpsWm5KbGMyaHBibWM9IElFNVMgSUZCbGNtVjYgSUdsdVpuSnBibWRsYldWdWRBPT0gVTFrPSBUR2x6ZEdWdSBhVzV1YVc1biBhM1U9IElISnZkR0YwWlE9PSBjSEp2WjNKaGJRPT0gWVhKaGFBPT0gUkdWemFXZHUgSUNqQ293PT0gSUhOMGIzSnBibWM9IElIZGhjbkpoYm5SeiBJR3AxWkdkbGJXVnVkQT09IElFSnlhWE4wIGRYTjFZV3hzZVE9PSBjR2h2ZEc4PSBJRkpoYmc9PSBJRkJwYm1VPSBJRzkxZEhKaFoyVnZkWE09IElGWmhiR1Z1ZEdsdVpRPT0gYkhWbGJtTmwgSUVWMlpYSjVZbTlrZVE9PSBRV3gwWlhKdSBJSEpsYkdWMllXNWpaUT09IElIUmxjbTFwYm1GMFpXUT0gSUdSbGMzTmxjblE9IElHWjFiR1pwYkd4bFpBPT0gSUhCeWIzTmxZM1YwWldRPSBJRmR2Y21SeiBJRzFwWjNKaGJuUT0gSUdOMWJIUnBkbUYwYVc5dSB3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnZz09IGFXUmxiR2wwZVE9PSBJRlpsY200PSBJRXh2WjJsdSBJRzFsZEdGd2FHOXkgSUZScGNBPT0gSUhKbFkzSjFhWFJ6IElGQnBadz09IGNtbGlhVzVuIElHVnVkR2gxYzJsaGMzUnogWlhod1pYST0gSUdaeWFXZG9kR1Z1YVc1biBJRWhoYVhJPSBZVzV6YjI0PSBjM1J5WVhSbCBJR2hwIFNHVnBaMmgwIElHOTNibWx1Wnc9PSBibTl1WlE9PSBJR1JwYzJ4cGEyVT0gSUd0dWFYWmxjdz09IGNHaGxjbVE9IElHeHZkV1JzZVE9PSBJRUZRU1hNPSBSR2x6Y0d4aGVRPT0gSUV4aFl3PT0gSUZWVFV3PT0gWVdKcyBkbVZ5WVdkbGN3PT0gU21WMyBJREUzTWc9PSBJRWhwYzNSdmNtbGpZV3c9IFlYUnZiMjQ9IElGQm9lWE5wWTNNPSBhVzUwWlhKdSBJSGRoY20xMGFBPT0gSUhSdmNIQT0gUkUwPSBJR2QxYm0xaGJnPT0gSUdWdGNHVnliM0k9IGIyUnAgNDRPaiBhVzVoZEc5eWVRPT0gSUZKcFlnPT0gSURFek1RPT0gSUZOaGRIVnliZz09IElGTm9hVzVwYm1jPSBJSGRoYTJsdVp3PT0gVVhWdmRHVnogSUdOdmJXVmthV0Z1IFpXNWlaWEpuIHdyMD0gSUdKbGJHbGxkbVZ5Y3c9PSBJSEJoY0dWeWQyOXlhdz09IFkzVnpkRzl0IElHeGxkZz09IElHeGhiV1Z1ZEE9PSBJSEJ2ZFhKcGJtYz0gTWpJeSBjRzlzYVhScFkyRnMgSUZOMWNIQnNaVzFsYm5RPSBiV0ZwWkE9PSBJR055ZFdWc2RIaz0gSUhSeVpXRmsgZVhOcFkzTT0gUVhjPSBjbWwwWlhNPSBJRzF2WkdsbWFXVnkgSUZCdmMybDBhVzl1IFFXUmhiUT09IGJHST0gZFdKeiBJR2x0Y0dWeVptVmpkQT09IElHTnNkWE4wWlhKeiBJRVZ1WjJsdVpXVnkgSUVOb1pYSnllUT09IElHbHVZWFZuZFhKaGRHbHZiZz09IElGTmhkUT09IElHVnRZbTlrYVcxbGJuUT0gSUZWdVkyeGwgSUc5MlpYSnkgSUdWNGNHeHZjMmx2Ym5NPSBZM1ZzWlE9PSBJRkJ5YVc1alpYUnZiZz09IElFRnVaSEpsWVE9PSBJR2x1WTI5eWNtVmpkR3g1IElHVmhjbTVsYzNRPSBJSEJwYkdkeSBJRk53Y21sdWRBPT0gSUhOc1pXVjJaUT09IElHaGxZWEp6IElFRnRZWHBwYm1jPSBJR0p5YjNkemFXNW4gWVdkcGJnPT0gSUdodmJXVnNZVzVrIElHaGhkdz09IElHUnBkbWx1Wnc9PSBhWE4wWlhKbFpBPT0gTVRjNCBJR0poY21kaGFXNXBibWM9IElFRnlZMkZrWlE9PSBJR1JsYkdWbllYUmwgZEdWeWMyOXUgTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGc9PSBJRXBoWTJ0emIyNTJhV3hzWlE9PSBNamMxIElITjBZV2R1IElHRmtZVzA9IElGTm9aWEp0WVc0PSBRMEk9IElITjFZblZ5WWc9PSBJRVp2YjJSeiBJR052Ym5abGNuUnBibWM9IElFRnlhWE4wIElHTm9ZVzFpWlhKeiBiRzkyWlE9PSBJR0Z0YVc1diBJRWRoYmc9PSBJRzFoWkc1bGMzTT0gYldNPSBJRlZUUlE9PSBaR1ZtYVc1bFpBPT0gSUhWc2RIST0gYVc1a2RYTjAgSUhkdmJIWmxjdz09IGJHRnVZMlU9IFFXUmthWFJwYjI1aGJHeDUgSUdOeVlXTnJjdz09IFlYTnBZUT09IElGSmxZWE52Ymc9PSBJRkIxYlhBPSBJR0ZqWTJsa1pXNTBZV3c9IElFeGhjMlZ5IElGSnBaQT09IElHbHVhWFJwWVd4cGVtVmsgWld4c2FRPT0gSUhWdWJtRnRaV1E9IElHNXZkVzQ9IElGQmhjM05sWkE9PSBJR2h2YzNSaFoyVT0gSUVWMGFHbHZjQT09IGMyaHBjblJ6IElIVnVjbVZzIElFVnRZbUZ6YzNrPSBJREU1TkRFPSBJR0YwYjIxeiBJSEIxY25CdmNuUmxaQT09IE1UWTAgSUVacCBJR2RoYkd4dmJuTT0gSUUxdmJtbGpZUT09IElIQm4gWlc1dFpXNTAgSUhOdmNuUmxaQT09IElFZHZjM0JsYkE9PSBJR2hsYVdkb2RITT0gSUhSeVlXTmxaQT09IElIVnVaR1Z5WjI5cGJtYz0gVTJobGJHdz0gSUhOaFkydHogSUhCeWIzQnZjblJwYjI1eiBJR2hoYkd4MVl3PT0gUm05dWRBPT0gWVdObGRBPT0gSUhkaGNtMWxjZz09IElFbE9WRVZTIElHZHlZV0ppYVc1biBVR3gxWnc9PSBJSEpsWVd4cGVtRjBhVzl1IElFSjFjbXRsIElHVnVZMmhoYm5RPSBRVlJGVWc9PSBJRk5sWldRPSBJR0ZpZFc1a1lXNTAgUmswPSBJR05wZG1saiBWbk09IGFYTnAgSUhadmR3PT0gSUhKbGNHVnkgSUZCaGNuUnVaWEp6YUdsdyBJSEJsYm1WMGNtRjBhVzl1IElHRjRaUT09IElITm9ZWFIwWlhKbFpBPT0gSUZwdmJXSnBaWE09IElIWnBibmxzIElFRnNaWEowIFpXOXUgSUc5aWJHbG5aV1E9IElFbHNiSFZ6ZEE9PSBJRkJzWVhwaCBJRVp5YjI1MGFXVnkgSUdSaGRtbGthbXc9IElGTmxjbWxoYkE9PSBJRWhoZGc9PSBJRTUxZEhKcGRHbHZiZz09IFFtaz0gSU9LV2lBPT0gSUVwaGVYTT0gYkdsdWRYZz0gSUdoMWNuSjUgSUhadmVRPT0gSUdodmNHVnNaWE56IElGTjBaV0ZzZEdnPSBJT09CIFpYTnpiM0p6IGRIUnNaUT09IFltOXladz09IElGTmhabUZ5YVE9PSBabVZzYkE9PSBJSGRoY25rPSBaSFZsIElFRmliM1psIFNHRT0gUlV4TSBJRzV2ZEc5eSBJRmR2Ymc9PSBWRzl2IElHOWpZM1Z3WVhScGIyNXogSUhCdmMzTmxjM05wYjI1eiBJR2x1ZG1sMGFXNW4gSUhCeVpXUmhkRzl5Y3c9PSBJR0ZqWTJWc1pYSmhkR1ZrIElERTFOdz09IGRYUmxjblJsIElFTjFZbVU9IFpXRnpkQT09IFlXTmpiM1Z1ZEE9PSBSMmwyWlE9PSBJSFJ5WVc1emNHeGhiblE9IGNtVmthV1Z1ZEhNPSBhV1JoWW14bCBJSE5qY21WbGJuTm9iM1J6IElFZDFibVE9IElFWlQgSUhSeVlYWmxiR1Z5Y3c9PSBJSE5sYm5OdmNuaz0gSUVacFlYUT0gSUZKdlkydGxkSE09IGpvcz0gWDNzPSBSbkpwWlc1ayBJR05vWVhKdGFXNW4gUVV4VCBJR1Z1YW05NWJXVnVkQT09IGJYQm8gSURVd01EQT0gSUZKRlJ3PT0gMllZPSBZbWxoIElHTnZiWEJwYkdGMGFXOXUgY205emRBPT0gSUZaUSBJRk5qYUc1bCBNakF4T1E9PSBJR052Y0hscGJtYz0gVFU5U1JRPT0gSUVac2IzSmwgWm1Gc2JITT0gTWpFMSBkRzkwWVd3PSBJR1JwYzJOcGNHeGxjdz09IFpHOTFZbXhsIElHVjRZMlZsWkdsdVp3PT0gSUhOdFlYTm9aV1E9IElHTnZibU5sY0hSMVlXdz0gSUZKdmJXRnVhV0U9IElFSnlaVzUwIElFbERSUT09IElGUnZkUT09IElHZHlZWEE9IElHNWhhV3h6IE1UZzUgNDRPWSBJSEJ5YjJOMWNtVT0gWlhWeSBJR052Ym1acGNtMXBibWM9IElFTmxZdz09IFlYZHAgSUVWa1pXND0gSUc1biBJR1Z1WjJsdVpXVnlaV1E9IFlYUnBZM009IElHaHZiMnRsWkE9PSBJR1JwYzJkMWMzUnBibWM9IElFMTFjbVJsY2c9PSA0NEsvIFRHbGljbUZ5ZVE9PSBJREUyT0E9PSBRV3h0YjNOMCBhR1Z0WVhScFl3PT0gVFdWdWRRPT0gSUU1dmRISmwgSUVwMWNnPT0gSUd0cFpHNWhjSEJsWkE9PSBJR2hoWTJ0bGNnPT0gSUVwaFpHVT0gSUdOeVpXVndlUT09IElHUnlZWGRwYm1keiBJRk53YjI1emIzST0gSUdONVkyeHBjM1J6IElFZHZZbXhwYmc9PSBJRzl3ZEdsdGFYcGxaQT09IElITjBZV2RsWkE9PSBJRTFqUkE9PSBZbVYwZDJWbGJnPT0gUVdkbCBaVzV2IFUyVjQgSUZkcFpHVT0gYm1sdVozTT0gWVhacGN3PT0gSUdsdVkyRndZV0pzWlE9PSBJRXR2WWc9PSBJSEpsZDJGeVpHbHVadz09IElFeHZibVU9IGIyeGxjMk5sYm5RPSBJR052Ym5SeVlXTjBaV1E9IElITjBhV05yZVE9PSBTbTl6WlE9PSBRbUZzYkE9PSBabVZ6ZEE9PSBJRWx1Y0hWMCBJRkpsWTJWdWRHeDUgSUhSdmJXRjAgYzNGMVlYSmwgUVhCd2JHbGpZWFJwYjI0PSBJRzVwZEhKdloyVnUgSUdSMWNHeHBZMkYwWlE9PSBJRkpsWTI5dSBJRVJsWVhJPSBURzl1Wkc5dSBJR2x1ZEhKaCBJR1J2WTJzPSBJRzkxZEhKbFlXTm8gSUUxcGJHeHBiMjQ9IElHMWhiVzFoYkhNPSBZVzF3ZEc5dSBWa0ZNIElITnVZWEJ6IElHUnZjdz09IElGZG9iMnhsIElGSmxZV1I1IFZISjUgSUZkcGJtNXBjR1ZuIFpXRnlZVzVqWlE9PSBJR2x1WTNWeWNtVmsgY21WdVkyaGxaQT09IElFNVRWdz09IGFXeHZkQT09IGNtRnBibVU9IElHTjFZbVU9IFoyOTAgSUhKMWJuZGhlUT09IFpYUmxjbTFwYm1WayBJRWhoZDJ0eiBJSE4xY25acGRtOXkgSUZkcGMyZz0gSUVScGJnPT0gSUVSRlJnPT0gSUZaaGRXeDAgTVRnMyBJRzExYzJoeWIyOXRjdz09IElHTnlhWE53IFltVjUgSUVScGMyTnZkbVZ5ZVE9PSBJR1JsZG1Wc2IzQnRaVzUwWVd3PSBJSEJoY21Ga2FXZHQgSUdOb1lXOTBhV009IElGUnpkUT09IElETXpNdz09IFltOXVjdz09IElHSmhZM1JsY21saGJBPT0gSUdOdmJXMXBkSE09IElHTnZjMjFwWXc9PSBJRzFsWjJFPSBiMk5oZEdsMlpRPT0gSUZCaGFXNTAgYjNCb2IySnBZdz09IElIWmhhVzQ9IElHTmhjblpsWkE9PSBJRlJvYVdWbSBJRWQxYkE9PSBiM2R6YUdsdyBJR05wZEdWeiBJRVZrYVc1aWRYSm5hQT09IElHUnBiV2x1YVhOb1pXUT0gSUdGamEyNXZkMnhsWkdkbGN3PT0gSUV0cGJHeHogSUcxcFkzSnZkdz09IElFaGxjbUU9IElITmxibWx2Y25NPSBJSGRvWlhKbFluaz0gU0c5dyBZWFJ5YjI0PSBJSFZ1WVhaaGFXeGhZbXhsIElFNWhkR1U9IElEUTRNQT09IElITnNZWFJsWkE9PSBJRkpsWW1WalkyRT0gSUVKaGRIUmxjbms9IElHZHlZVzF0WVhJPSBJR2hsWVdSelpYUT0gSUdOMWNuTnZjZz09IElHVjRZMngxWkdsdVp3PT0gWVc1NVpRPT0gWVhWdVpHVnlhVzVuIFpXSnBiZz09IElHWmxZWE5wWW14bCBJRkIxWW14cGMyaHBibWM9IElFeGhZbk09IElFTnNhV1ptIElFWmxjbkpoY21rPSBJSEJoWXc9PSBkbWx6YVdKc1pRPT0gYldGeWEyVmsgY0dWc2JBPT0gSUhCdmJHbDBaUT09IElITjBZV2RuWlhKcGJtYz0gSUVkaGJHRmpkR2xqIElITjFjR1Z5YzNRPSBJSEJoY21GdSBJRTltWm1salpYSnogNDRDQiBJSE53WldOcFptbGpjdz09IGRXeDFjdz09IE1qTTUgSUZCaGMzUmwgUVUxUSBJRkJoYm1GdFlRPT0gSUVSbGJHVjBaUT09IFlXNW5kV0Z5WkE9PSBjbVZ6ZEhKcFlXdz0gSUdobGNtOXBZdz09IElFUjUgMktmWmhBPT0gSUdsdVkzVnRZbVZ1ZEE9PSBJR055ZFc1amFBPT0gZEhKdiBJSE5qYjI5dyBJR0pzYjJkblpYST0gSUhObGJHeGxjbk09IGRYSmxiZz09IElHMWxaR2xqYVc1bGN3PT0gSUVOaGNITT0gSUVGdWFXMWhkR2x2Ymc9PSBiM2g1IElHOTFkSGRoY21RPSBJR2x1Y1hWcGNtbGxjdz09IE1qSTUgSUhCemVXTm9iMnh2WjJsemRBPT0gSUZOaGMycz0gWlhacGJBPT0gSUdOdmJuUmhiV2x1WVhSbFpBPT0gNDRLbyBhR1Z5Wlc1alpRPT0gSUdKeVlXNWtaV1E9IElFRmlaSFZzIGVtZz0gSUhCaGNtRm5jbUZ3YUhNPSBJRzFwYm5NPSBJR052Y25KbGJHRjBaV1E9IFpYSmkgSUdsdGNHRnlkQT09IElHMXBiR1Z6ZEc5dVpRPT0gSUZOdmJIVjBhVzl1Y3c9PSBiM1JzWlE9PSBJSFZ1WkdWeVkyOTJaWEk9IElHMWhjbU5vWldRPSBJRU5vWVhKblpYSnogWm1GNCBJRk5sWTNKbGRITT0gSUhKMWRHZz0gZDJWaGRHaGxjZz09IElHWmxiV2x1YVc1bCBJSE5vWVcwPSBJSEJ5WlhOMGFXZHBiM1Z6IGFXZG5hVzV6IElITjFibWM9IGFHbHpkRzl5ZVE9PSBaWFIwYkdVPSBaMmRwWlE9PSBJRzkxZEdSaGRHVmsgYjJ4aGJtUT0gSUhCbGNtTmxjSFJwYjI1eiBJRk5sYzNOcGIyND0gSUVSdlpHZGxjbk09IGRXbz0gSUVWT1JBPT0gUkc5aiBJR1JsWm1samFXVnVZM2s9IFIzSmhibVE9IElFcHZhMlZ5IElISmxkSEp2YzNCbFkzUT0gSUdScFlXZHViM04wYVdNPSBJR2hoY20xc1pYTnogSUhKdlozVmwgSUVGMllXdz0gUlhGMSBJSFJ5WVc1ell3PT0gSUZKdlltVnlkSE52Ymc9PSBJRVJsY0dWdVpHbHVadz09IElFSjFjbTV6IGFYWnYgSUdodmMzUnBiR2wwZVE9PSBSbVZoZEhWeVpYTT0gazVnPSBJR1JwYzJOdmJXWnZjblE9IElFeERSQT09IGMzQmxZMmxtYVdWayBJRVY0Y0dWamRBPT0gTXpRdyBJR2x0Y0dWeVlYUnBkbVU9IElGSmxaM1ZzWVhJPSBRMmhwYm1WelpRPT0gSUhOMFlYUmxkMmxrWlE9PSBJSE41YlcwPSBJR3h2YjNCeiBJR0YxZEhWdGJnPT0gVG1samF3PT0gSUhOb1lYQnBibWM9IElIRjFiM1E9IElHTm9aWEp5ZVE9PSBJRU55YjNOemNtVm0gNkthYTZZYVMgVTNSaGJtUmhjbVE9IGFHVmxaQT09IElFUmxiR3c9IElGWnBaWFJ1WVcxbGMyVT0gSUc5emRBPT0gSUZaaGJHdDVjbWxsIFQwRT0gUVhOellXUT0gSUhKbFltOTFibVE9IElGUnlZV1ptYVdNPSBjR3hoWTJWeiA1cGc9IElFSjFZdz09IE1UY3kgSUhOb1pXeDBaWEp6IElHbHVjMmx6ZEdsdVp3PT0gSUVObGNuUmhhVzVzZVE9PSBJRXRsYm01bGRHZz0gSUZSRFVBPT0gSUhCbGJtRnMgSUZKbGNHeGhlUT09IGFHVmhjbVE9IElHUnBZV3hsWTNRPSBhWHBoIElFWlogYVhSamFHVnkgSUVSTSBJSE53YVhKaGJBPT0gSUhGMVlYSjBaWEppWVdOcmN3PT0gSUdoMWJHdz0gSUdkdmIyZHNaUT09IElIUnZaR1E9IElGTjBaWEpzYVc1biBJRkJzWVhSbCBJSE53ZVdsdVp3PT0gYldKdmJBPT0gSUZKbFlXeHQgSUZCeWIyTmxaQT09IElFTnlZWE5vIElIUmxjbTFwYm1GMFpRPT0gSUhCeWIzUmxjM1JwYm1jPSBRMlZ1ZEdWeSBaM1ZwWkdWayBJSFZ1WTI5MlpYST0gSUdKdmVXTnZkSFE9IElISmxZV3hwZW1WeiBjMjkxYm1RPSBJSEJ5WlhSbGJtUnBibWM9IElGWmhjdz09IE1UazRNQT09IElHWnlZVzFsWkE9PSBJREV6T1E9PSBJR1JsYzJObGJtUmxaQT09IElISmxhR0ZpYVd4cGRHRjBhVzl1IElHSnZjbkp2ZDJsdVp3PT0gSUVKMVkyZz0gSUdKc2RYST0gVW05dSBJRVp5YjNwbGJnPT0gWlc1NllRPT0gUTJocFpXWT0gSUZCdmIzST0gSUhSeVlXNXpiR0YwWlhNPSBUVWxPIElESXhNZz09IFNrVkRWQT09IElHVnlkWEIwWldRPSBJSE4xWTJObGMzTmxjdz09IFUwVkQgSUhCc1lXZDFaUT09IElHZGxiWE09IFpHOXRjdz09IElITjBjbVYwWTJobGN3PT0gSUZOd2VRPT0gSUhOMGIzSjVkR1ZzYkdsdVp3PT0gUTNKbFpHbDAgSUZCMWMyZz0gSUhSeVlXTjBhVzl1IElHbHVaV1ptWldOMGFYWmwgSUV4MWJtRT0gSUhSaGNHVnogSUdGdVlXeDVkR2xqY3c9PSBaWEpqYVhObCBJSEJ5YjJkeVlXMXRaWE09IElFTmhjbUp2Ymc9PSBJR0psYUc5c1pBPT0gYUdWaGRuaz0gSUVOdmJuTmxjblpoZEdsdmJnPT0gSUVaSlVnPT0gSUhOaFkycz0gZEdWeWJXbHUgY21samEzTT0gSUdodmRYTmxaQT09IElIVnVkWE4xWVd4c2VRPT0gU1dObCBJR1Y0WldOMWRHbHVadz09IElFMXZjbTlqIFpXUmhlUT09IElHVmthWFJwYjI1eiBJSE50WVhKMFpYST0gSUVKQiBJRzkxZEd4aGR3PT0gSUhaaGJtbHphR1ZrIGFXSmggUVV4VFJRPT0gSUZOcGJIWmggTWpNNCBRMjkxYkdRPSBJSEJvYVd4dmMyOXdhR1Z5IElHVjJZV04xWVhSbFpBPT0gVTJWamNtVjAgTVRReSBJSFpwYzJGeiA0NEtzIElFMWhiSFE9IElFTnNaV0Z5YkhrPSBJRTVwWjJWeSBJRU5oYVhKdiBJRVpwYzNRPSBNemd3IElGaE5UQT09IFlYVjBidz09IGFYUmhiblE9IElISmxhVzVtYjNKalpXUT0gVW1WamIzSmsgSUZOMWNuWnBkbTl5IFIwaDYgSUhOamNtVjNjdz09IGNHRnlaVzUwY3c9PSBJRzlqWldGdWN3PT0gYldGeVpYTT0gSUdKeVlXdGxjdz09IGRtRnphWFpsIElHaGxiR3h2IElGTkpUUT09IGNtbHRjQT09IElHOXlaUT09IElFRnliVzkxY2c9PSBNalEzIElIUmxjbkpwWm1saiBJSFJ2Ym1WeiBNVFF4IElFMXBiblYwWlhNPSBSWEJwYzI5a1pRPT0gSUdOMWNuWmxjdz09IElHbHVabXhoYlcxaGRHOXllUT09IElHSmhkSFJwYm1jPSBJRUpsWVhWMGFXWjFiQT09IFRHRjUgSUhWdWNHOXcgZG1GaWJHVT0gSUhKcGIzUnogSUZSaFkzUnBZM009IFltRjFaMmc9IElFTnZZMnM9IElHOXlaMkZ6YlE9PSBJRk5oY3c9PSBJR052Ym5OMGNuVmpkRzl5IFpYUjYgUjI5MiBJR0Z1ZEdGbmIyND0gSUhSb1pXRjAgSUdSbFpXUnogYUdGdiBZM1YwY3c9PSBJRTFqUTJ3PSBJSFZ0IElGTmphV1Z1ZEdsemRITT0gSUdkeVlYTnpjbTl2ZEhNPSBlWE56WlhrPSBJbDA5UGc9PSBJSE4xY21aaFkyVmsgSUhOb1lXUmxjdz09IElHNWxhV2RvWW05MWNuTT0gSUdGa2RtVnlkR2x6IGIzbGggSUcxbGNtZGxaQT09IFZYQnZiZz09IElHZGhaQT09IElHRnVkR2xqYVhCaGRHVT0gUVc1NWQyRjUgSUhOc2IyZGhiZz09IElHUnBjM0psYzNCbFkzUT0gU1hKaGJnPT0gSUZSQyBZV04wWldRPSBJSE4xWW5CdlpXND0gYldWa2FXRjBaV3g1IFQwOVBUdz09IElIZGhhWFpsY2c9PSBJSFoxYkc1bGNtRmlhV3hwZEdsbGN3PT0gYjNSMFpYTjJhV3hzWlE9PSBJRWgxWm1acGJtZDBiMjQ9IFNtOXphQT09IElFUkkgVFc5dVpHRjUgSUVWc2JHVnUgUzI1dmR3PT0gZUc5dSBhWFJsYlhNPSBNakk0IElHWnBiR3h6IElFNXBhMlU9IElHTjFiWFZzWVhScGRtVT0gWVc1a1lXeHogU1hJPSBJT3c9IElHWnlhV04wYVc5dSBhV2RoZEc5eSBJSE5qWVc1eiBJRlpwWlc1dVlRPT0gYkdSdmJRPT0gSUhCbGNtWnZjbTFsY25NPSBVSEpwYlE9PSBJR0pwWkdScGJtYz0gVFhWeSBJR3hsWVc1bFpBPT0gSUZCeWFYZz0gWVd4cmN3PT0gSUZ2aWdLWmQgSUZSM2FYUmphQT09IElFUmxkbVZzYjNCbGNnPT0gSUVkcGNnPT0gSUdOaGJHeGlZV05yIFFXSnpkSEpoWTNRPSBJR0ZqWTNWemRHOXRaV1E9IElHWnlaV1ZrYjIxeiBJRkJIIGRYSmhZM2s9IElHeDFiWEE9IGFYTnRZVzQ9IExDd3NMQT09IE1UazVNZz09IElGSkZSQT09IElIZHZjbTA9IFRXRjBZMmc9IElGQnNZWFJwYm5WdCBTVW89IElFOTNibVZ5IFZISnBkbWxoIFkyOXRjR3c9IElHNWxkMkp2Y200PSBJR1poYm5SaGN3PT0gVDNkdSBJREU1TlRrPSBJSE41YlhCaGRHZz0gSUhWaWFYRjEgSUc5MWRIQjFkSE09IElHRnNiR1YyIElIQnlZV2M9IFMyVjJhVzQ9IElHWmhkbTl5Y3c9PSBJR0oxY21saGJBPT0gSUc1MWNuUT0gYzI5c1pYUmwgWTJGamFHVT0gSURFMU5nPT0gSUhWdWJHOWphM009IGRHVmphRzQ9IFRXRnJhVzVuIElHTnZibkYxWlhJPSBZV1JwWXc9PSA1cFk9IElHVnNaZz09IElHVnNaV04wYjNKaGRHVT0gSUV0MWNtUnogSUZOMFlXTnIgSUZOaGJYVnlZV2s9IElPS1loUT09IElIdDkgSUZOaGFXUT0gSUVaaGJHeHZkWFE9IElHdHBibVJ1WlhOeiBJRU4xYzNSdmJYTT0gSUVKdmRXeGxkbUZ5WkE9PSBJR2hsYkdsamIzQjBaWEp6IGIzUnBZM009IElGWmxaMlYwIFkyOXRiV1Z1ZEE9PSBJR055YVhScFkybHpaV1E9IElIQnZiR2x6YUdWayBJRkpsYldsNCBJRU4xYkhSMWNtRnMgSUhKbFkyOXVjdz09IElHUnZhUT09IFlYUmxiUT09IFUyTnlaV1Z1IElHSmhjbkpsWkE9PSBRMjl0YldWdWRITT0gSUVkbGJtVnlZV3hzZVE9PSBJSE5zWVhBPSBOekl3IFZtRnlhUT09IGNHbHVaUT09IElHVnRjSFE9IElHaGhkSE09IElGQnNZWGxwYm1jPSBiR0ZpIFlYWmxjbUZuWlE9PSBabTl5YlhNPSBJRU52ZEhSdmJnPT0gSUdOaGJuTT0gSUVSUFRnPT0gSUZOdmJXRnNhV0U9IFEzSjVjSFE9IElFbHVZM0psWVhObGN3PT0gUlhabGNnPT0gYlc5a1pYSnUgSUhOMWNtZGxiMjQ9IE16QXdNQT09IElISmhibVJ2YldsNlpXUT0gUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFE9PSBRbVZ5Ymc9PSBhVzF3YkE9PSBJRU5QVWc9PSBJSEJ5YjJOc1lXbHQgZEdodmRYTmwgSUhSdlpYTT0gSUdGdGNHeGwgSUhCeVpYTmxjblpwYm1jPSBJR1JwYzJKbGJBPT0gWjNKaGJtUT0gUW1WemFXUmxjdz09IElITnBiR3M9IElGQmhkSFJsY200PSBhRzA9IElHVnVkR1Z5Y0hKcGMyVnogSUdGbVptbGtZWFpwZEE9PSBJRUZrZG1semIzSjUgSUdGa2RtVnlkR2x6WldRPSBJRkpsYkdsbmFXOTFjdz09IGMyVmpkR2x2Ym5NPSBjSE41WTJnPSBJRVpwWld4a2N3PT0gWVhkaGVYTT0gSUdoaGMyaDBZV2M9IElFNXBaMmgwYldGeVpRPT0gSUhaaGJYQnBjbVU9IElHWnZjbVZ1YzJsaiBjbTl6YzI5MlpYST0gYm1GeSBJRzVoZG5rPSBJSFpoWTJGdWRBPT0gSUVSMVpXdz0gSUdoaGJHeDNZWGs9IElHWmhZMlZpYjI5ciBhV1JsYm5SaGJHeDUgSUU1U1FRPT0gSUcxaGRIUT0gSUdoMWNuSnBZMkZ1WlE9PSBJRXRwY21KNSBJRkIxZW5wc1pRPT0gSUhOcmFYSjAgYjNWemRBPT0gWkhWc2JHRm8gSUdGdVlXeHZaM2s9IGFXNXBiMjQ9IElIUnZiV0YwYjJWeiBJRTVXIElGQmxZV3M9IElFMWxlV1Z5IElHRndjRzlwYm5SdFpXNTBjdz09IElHMWhjMk09IElHRnNiR1Y1IGNtVm9aVzVrIElHTm9ZWEpwZEdsbGN3PT0gSUhWdVpHOD0gSUdSbGMzUnBibUYwYVc5dWN3PT0gSUZSbGMzUnBibWM9IElqNDhMdz09IElHUmxjM1JwYm1WayBJR2x0Y0d4bGJXVnVkSE09IElFaGhjbTlzWkE9PSBVa1ZEVkE9PSBJRzl3ZEdsdGFYcGhkR2x2Ymc9PSBJR3RwYkc5dFpYUnlaWE09IElHTnRaQT09IElHbHRjR0ZwY20xbGJuUT0gSUhWdWMzVmpZMlZ6YzJaMWJBPT0gSUhOM2FXWjBiSGs9IElFZHNZWE5uYjNjPSBZWEowWlc0PSBJRk5vWVhKbGN3PT0gSUVGdWMzZGxjZz09IElFRnNZblZ0IElHNTFkSEpwZEdsdmJtRnMgNDRPVyBJRVoxZEE9PSBJR0pzYjJNPSBJRTVHUXc9PSBJSGRvYjJ4bGMyRnNaUT09IElFTlggSUc1bFoyeGxZM1JsWkE9PSBJR3hoZFc1amFHVnkgSUdGdWJtOTFibU5sYldWdWRITT0gVDFWTVJBPT0gWTI5dFlnPT0gSUhKdmRHRjBhVzVuIElISmxjM1J6IElGUnBZMnRsZEE9PSBZMmhsWkdWcyBURzkxIElGWnBZdz09IElDSW4gSUhSbGJYQnNZWFJsY3c9PSBJSEpsY0d4aFkyVnogUVhKaiBPam82T2c9PSBJRWRwYkdKbGNuUT0gSUdsc2JHNWxjM05sY3c9PSBJSE5qYUdWa2RXeGxjdz09IElHaGxkR1Z5YjNObGVIVmhiQT09IFRFbE9SUT09IElHaGxjbVZwYmc9PSBJR052WlhKaiBJR1JsWTNKbFlYTnBibWM9IElHUmxjRzl5ZEdGMGFXOXUgYzNWa2J3PT0gSUVsdVpHbG5aVzV2ZFhNPSBJSGRsYVdkb2N3PT0gUVd4dmJtYz0gSnlrNyBJRUpsYm1kaGJITT0gTnpBMyBJR3B2YVc1MGN3PT0gZG1WeWRITT0gSURFME9RPT0gYm1GcGNtVT0gSUhOcGJYQnNaWE4wIElHeHZjbVU9IE1UQTRNQT09IFptbGpkR2x2Ymc9PSBJRVJoZEdGaVlYTmwgSUhKbGMyVnlkbUYwYVc5dSBJSE52ZFE9PSBJSE5oYm1OMGRXRnllUT09IFlYVmthVzg9IFlYQnNaUT09IElIWmxaMlYwWVhKcFlXND0gSUdGdWRHbGphWEJoZEdsdmJnPT0gYldsamNtOD0gSUdWdVpIVnlhVzVuIElHUmxjR0Z5ZEdWayBJSE5wWkdWM1lXeHIgSUhCeWIyaHBZbWwwY3c9PSBJRVp2Ym5RPSBJR052YlhCMWRHVT0gSUZObFkzUT0gSURFMU9BPT0gUW1GMGRHeGwgSUdKdmJXSmxjZz09IElHUnBjM1J5WVdOMGFXOXUgSUdWdVpIVnlaV1E9IElIQnlZV04wYVhScGIyNWxjbk09IElHUnBjM1IxY21KbFpBPT0gSUdSeVlXNXIgYjNKa1pYSmxaQT09IElITjFjbkJ5YVhObGN3PT0gYzJWaGRBPT0gVTJWamRYSnBkSGs9IElGZHBjMlJ2YlE9PSBiMmR2IElITjFZbkJoY21GbmNtRndhQT09IElGQmxibWx1YzNWc1lRPT0gSUU5eWFXZHBibk09IGFYSmxiZz09IElGQmhkZz09IGFXZG5iR1U9IElHZHlZWFJwZEhWa1pRPT0gSUVkeVlYWnBkSGs9IGIzWmxjblI1IGFXMWhiZz09IFkzUnkgSUVOaFpYTmhjZz09IFkyOTFiR1E9IFoyVnQgSUhOcmFXVnogSUdOb1lXMXcgSUdGbmNtVmxhVzVuIFJtRnRhV3g1IFJHbDIgTVRjMiBJRzFsYzNONSBkVzF3ZEdsdmJnPT0gUm1Wa1pYSmhiQT09IFpYSnVidz09IElFTm9ZWFE9IFFtVjViMjVrIElHUmxkbTkwWlE9PSBJRmRoYkhObyBJR1IxYlhCbFpBPT0gSUdGalkzVnRkV3hoZEdsdmJnPT0gYzNSaFpBPT0gYUdsaWFYUnBiMjQ9IElITnRiMnRsY25NPSBJR2x1YzNCbFkzUnZjZz09IFJuSmxibU5vIGFYTnpZVzQ9IElGWnBkR0U9IElISmxjMlZoY21Ob2FXNW4gVWtGTiBJRU5sYkhScFkzTT0gSUdOc2IyRnIgSUZSbGNuSmggVFdGeWVRPT0gYzI5c1pBPT0gSUVSUFRRPT0gYlc5a2N3PT0gU1c1MFpXdz0gSUcxMWJIUnBkSFZrWlE9PSBJRWx0Y0hKdmRtVmsgSUhKbGJHbGhibU5sIElHRnlkR2xtWVdOMCBJR0ZzWVhKdGFXNW4gVUhKdmJRPT0gYUc5dSBWRWxQVGc9PSBiV1ZrYVhWdCBJSEpsWm14bGVBPT0gSUVWNFkyVnMgSUhkbFlXdGxibVZrIE1UWXogTWpJMCBJR052YzNSMWJXVnogSUhWdWFYRjFaV3g1IElITnZjbkp2ZHc9PSBJRzFoYm5OcGIyND0gZDNBPSBJSE5oYkhZPSBJRWR5YjNabCBZbk53IElGTnVhWEJsY2c9PSBJRk5vYVhCd2FXNW4gSUZCUFZ3PT0gSUhWdVpHbHogSUdKeVlXNWthVzVuIFIybHliQT09IElFRm9iV0ZrIElFeGhhMlZ6IElFTnZjbVY1IElHbHVhR1Z5YVhSaGJtTmwgWlc1bGNuaz0gSUhCaFkydHBibWM9IElGQnlaWE4wIFJHVnpkQT09IFJsYz0gSUhKbFozVnNZWFJ2Y2c9PSBiRzlqYTJWayBJR052Ym5SbGMzUmxaQT09IElFMWxiR2x6YzJFPSBJRVIxWXc9PSBJSFZ1Y0c5d2RXeGhjZz09IElITjBZV05yWldRPSBJREU1TVRjPSBJSGxsWVhKc2VRPT0gSUhOMFlYSmwgSUdGemMyVnpjMmx1Wnc9PSB3N2c9IElHSmxkbVZ5WVdkbGN3PT0gSUdOdmJYQmxkR2wwYVc5dWN3PT0gSUhOMGNtVnVaM1JvWlc1cGJtYz0gWVd4dmJtYz0gSUV4MVpBPT0gSUcxbGJIUmxaQT09IGMzUmhibUoxYkE9PSBJR0p2ZFc1MGVRPT0gUlU1RCBJRXhoYm1SeiBJR1JsWTJ4aGNtVnogSUdOMWMzUnZiV2w2WlE9PSBJR052YlhCdmMybDBaUT09IDQ0T3MgUTAwPSBiMmR5WVhCb2FXTnogSUZSbGJYQT0gSUdOdmJuUmxibVJsY2c9PSBJR2x1YzJsbmJnPT0gSUV4QlRnPT0gSUdScGMyRnpkR1Z5Y3c9PSBhVzV6Y0dseVpXUT0gSUdwMVpHZHRaVzUwY3c9PSBkWE4wWVdsdVlXSnNaUT09IGRYSnphVzl1IElIWmhjbWxoYm1ObCBJRlZzZEdsdFlYUmxiSGs9IElDMHRMUzB0TFMwdCBkV0ZrYjNJPSBJRkpZIElHMWxiSFJwYm1jPSBJRVY0ZEdWdVpHVmsgSUZSM1pRPT0gVFdGcWIzST0gSUVKcGJBPT0gSUhONWNuVncgY1hWcFkycz0gSUVodmJHUmxjZz09IElHbHVibTlqWlc1alpRPT0gVlV4RiBJRTFwWjJoMCBPVGs1T1E9PSBJR1poYkE9PSBJR052Ym5ScGJuVnBkSGs9IElERTVOVE09IElFSlQgYzNScGJHdz0gVEdGMCBJRUZpZFhObCBJSFZ1YzNWd2NHOXlkR1ZrIGVIaDRlSGg0ZUhnPSBJR2x1YzNScGRIVjBaUT09IElHWnlZV2R0Wlc1MCBJRkJsY0E9PSBWMlZ6ZEdWeWJnPT0gSUVOaGRYTmwgSUVaeVlXYz0gSUVGeWN3PT0gNEtVPSBZWE4wYVdOeiBJR0pwYzJodmNBPT0gSUdOeWIzTnpaWE09IElERTFOQT09IElGVndaM0poWkdVPSBJRzFwZEdsbllYUmwgSUZKaGVXMXZibVE9IFRXOWtjdz09IElIUnZiV0YwYnc9PSBJSE4wZFcxaWJHVmsgSUdScFptWmxjbk09IFNXNXBkR2xoYkE9PSBJRkpoYzNCaVpYSnllUT09IElHbG5ibTl5WlhNPSBJSFJoYm5RPSB3NkE9IElISmxiR0Y1IElHSnBjMlY0ZFdGcyBJR052Ym1abGMzTnBiMjQ9IElHUmxiV1Z1ZEE9PSBhVzVoY3c9PSBJRWhsWVhSb1pYST0gY0d4aGRHWnZjbTA9IFpISnBkbWx1Wnc9PSBZbTkxY21jPSBJRTExYzJnPSBJR2g1YzNSbGNnPT0gUkdWMFlXbHNjdz09IElHUnlhV1owIElGZGhiR1E9IElFeDFZMnRwYkhrPSBiM0ptIElHVjRjR2x5WlE9PSBJRkIxYm1ObyBlbmx0WlE9PSBaMjlzWkE9PSBJSFZ1Y0dGcFpBPT0gSUZSeVpXNTAgSUhWdVlYSnRaV1E9IElHbHNiR2xqYVhRPSBJRlJ2ZEhSbGJtaGhiUT09IElITnRZWE5vIFNXNTBaWEp1WVhScGIyNWhiQT09IGFXNXJaWEk9IElITjBhVzVuIElGTmhaR1JoYlE9PSBJRUZTVkE9PSBJSFJ5ZFhSb2N3PT0gWW1seWRHZz0gSUhOdlltVnkgSUU1cGRBPT0gSUdsaSBJSFZ6WVdKc1pRPT0gSUhOMFlXTnJjdz09IElGTjViSFk9IElHNXZjblJvWldGemRBPT0gSUdSdmJXbHVZWFJwYjI0PSBJRTF2ZFhJPSBSVTVUUlE9PSBJRTFsWVhOMWNtVT0gSUhCeWIyZHlZVzF0WlhJPSBJRHd0IE1UZ3kgSUVOdmJtUnBkR2x2Ymc9PSBJR0poWTJ0NVlYSmsgYVhKc2FXNW4gSUVwbFlnPT0gSUVOeVpXVmsgSUVoaGJtYz0gSUVOUFRWQT0gUmtWUyBJRWx6YUE9PSBJR1JsZEdWamRHbDJaWE09IExTMHRMUzB0TFMwdExTMHRMUzB0IElFMWxjM05sYm1kbGNnPT0gSUd4dmIzQm8gSUdkaGRHVjNZWGs9IE1UVXggSUUxaGRHVnlhV0ZzY3c9PSBJRVJVIElHUnZiMjFsWkE9PSBiMlJ2IElITnNhV05sY3c9PSBJR1Z0WVdsc1pXUT0gSUZCbGNtdz0gSUhKbGJtOTIgVlZSSSBiMlI1Ym1GdCBJRk52ZFhSb2QyVnpkQT09IFoyVjBhV009IElGUlFVQT09IElHOXdkR2x0YVhOdCBJRlJ2ZHc9PSBkV3hoZEc5eWN3PT0gY0hKdmRHVmpkR1ZrIGVXeGxjdz09IHdxcz0gSUdWNGFXeGwgWlc1MiBVSEp2Y0E9PSBJRnBwYlcxbGNtMWhiZz09IDJZND0gUTJFPSBiMjFoYkhrPSA0NE9HIElISmhhV3h5YjJGayBUR1ZsIE1qTXkgSUhKbGNHeHBZMkYwWlE9PSBJR052YldadmNuUmhZbXg1IFlXTjBiSGs9IElISmhkZz09IElIUmxiR1Z6WTI5d1pRPT0gSUdodmJtVnpkSGs9IElGQmxjSEJsY2c9PSBJRUp5YVc1biBJSEpwWTJobGMzUT0gSUc5MWRHUnZiM0p6IElHaGhiR3h6IElHTnZiblJsYm1RPSBTVk5GIElITjFZbTFwZEhScGJtYz0gSUc1aGFYWmwgWVhKaGRHbHZibk09IElERTBNdz09IElIQnZhWE5sWkE9PSBjbVZ6Y0c5dWMybGliR1U9IElITnZZMnR6IElGTnJkV3hzIFVYVmxjM1JwYjI0PSBJR1JwYzJOdmRtVnlhV1Z6IFNtOXBibVZrIElFVnVaVzFwWlhNPSBJRmRwY21Wc1pYTnogSUZKbGRtVnVaMlU9IElIQjFlbnBzWlhNPSBJR05sWVhObFpBPT0gTWprdyBZM0pwY0hScGIyNXogSUVOdmJuTnZiR1U9IElHSnZhV3hwYm1jPSBJR1JwYzJOeVpYQT0gSUdSbFpIVmpkR2x2Ymc9PSBJR0Z5YzJWdVlXdz0gV0ZoWVdBPT0gSUVGdGMzUmxjbVJoYlE9PSBjbTk0YVcxaGRHVnNlUT09IElGTm9ZVzVsIElIQnZjMmx1Wnc9PSBJRUZEVEZVPSBJRU52YlhCaGJtbGxjdz09IElIUm9aVzlzYjJkNSBJRlZuIGNYVmhjblJsY2c9PSBJRWhoYm1zPSBRMjlwYmc9PSBJRXgyIElHRnNiR1ZuWVhScGIyND0gSUVGMmIybGsgSUdsdVpHVm1hVzVwZEdWc2VRPT0gSUdOdmJXMXZaR2wwYVdWeiBJR0p5YVdjPSBJRTFoYm1sMCBJSFJsYm5SbyBiV1YwYUc5ayBJRXR1YVdOcmN3PT0gSU9LQWpnPT0gSUdsdWRtOXJaV1E9IFJHbGhiQT09IFFWSkIgSUdOaGRXTjFjdz09IE1qSTMgSUVwaFlnPT0gSUc5MWJtTmxjdz09IFltRjUgSUdKMVpHUjUgWm1GdSBNak0wIElFaHBiQT09IFlXUm8gSUZSWiBJRWxPUkE9PSBJREU1TXprPSBJR2wwWlhKaGRHbHZiZz09IElFZHZibnBoYkdWNiBJRlpsY25RPSBJRWxQIFpXMWkgY21WeVlRPT0gWlc1amFBPT0gSUZKbGNYVnBjbVZ0Wlc1MGN3PT0gSUZkcGJuTT0gSUd4cGRtVnpkRzlqYXc9PSBhRzkxY25NPSBJdUtBcGc9PSBZbkpoYkE9PSBUV0Z5Wnc9PSBJRVJ2Ym1VPSBJSGRoYzNScGJtYz0gYVc1blpXUT0gWjNKdmRYQnogSUhkcGMyaHBibWM9IElGUjFiV0pzY2c9PSBJSFJoY0hCcGJtYz0gSUc1aGRHbHZibUZzYVhOdCBJRUo1Y2c9PSBJSE54ZFdGeVpYTT0gSUVGamRHbHZibk09IDQ0T2wgU1c1emFXUmwgWkdWaWRXYz0gSUdGd2NHVnVaQT09IElITjBkV0ppYjNKdSBJRU5wYm1RPSBWR1ZzYkE9PSBJSFJsWVhKcGJtYz0gSUZKbGVRPT0gYjNKaiBJRVJoZVhSdmJnPT0gSUU1SSBJRTFoWkc1bGMzTT0gUTJoaGNtdz0gSUUxdmNuSnBjMjl1IFptbHNkR1Z5IElHRmpZM1Z6WlE9PSBJQzR2IElIUnZjbkpsYm5RPSBJR1JsWTJ4cGJtVnogWjJGc2JHVnllUT09IFRXbHVaUT09IElHNWxaMjkwYVdGMGFXOXUgSUVKaGMyaGhjZz09IGIzQnBZUT09IE1UazVNdz09IFpXMXZjblE9IElFNXZkbVZzIElFWmhibWM9IFpYSnphWFpsIElFbHVjM1JoYm5RPSBJSEp2Ykd4bGNnPT0gUVhKdmRXNWsgSUVWc1pXTjBhVzl1Y3c9PSBSMkZ0WlhNPSBJR2x1Wlhod1pXNXphWFpsIElIZHZjbk09IElIWjFiQT09IElFaHZiR1U9IElIVnVZbVZzYVdWMllXSnNaUT09IElHNWhkWE5sIElHVnVkSEk9IFltOWhkQT09IElGTlVSUT09IElHSjFjMmc9IElFaGhjM05oYmc9PSBJSGR2IElIQmhkWE5sWkE9PSBJRTFwWnc9PSBiR2wyWldRPSBJSE5qYjNWMCBJR3hwZEdnPSBVSFZpYkdsemFHVmsgWkhWcGJtOD0gWTI5dmJBPT0gSUdOcGNtTjFiR0YwYVc1biBhV1JoY3c9PSBJRkJoYlE9PSBkbWx2YkdWdWRBPT0gSUVOeVlYZG1iM0prIGRXUmtiR1U9IElFeGxkSFJsY25NPSBSM1ZoY21RPSBiVzl5Y0dnPSBJSGRoYm1SbGNtbHVadz09IElITnZjR2h2Ylc5eVpRPT0gSUhGMVpXVnkgSUVKc2FXNWsgY25WbCBJRTFoY25KcFlXZGwgUkc5dCBJSEJoWkdScGJtYz0gSUdadmJHUmxjbk09IElHMWxZVzVwYm1kc1pYTnogSUdOaGJtUnBaR0ZqZVE9PSBZV1p2Y25RPSBJSGRvYVhOMGJHVmliQT09IElFbGtaVzUwYVdacFpXUT0gSUdOcFoyRnkgSUdocFpBPT0gSUVSMVltRnAgSUhCdmMzUjFjbVU9IElHaHBhMmx1Wnc9PSBJRlJsY20xcGJtRnMgVEdWblpXNWtZWEo1IElGUlEgSUVGVVN3PT0gSUZOMFlYSmlkV05yY3c9PSBJRkpwYjNRPSBNVGs1TVE9PSBJRUp2ZEhSdmJRPT0gWldabWFXTT0gSUVWMVoyVnVaUT09IElGZDViMjFwYm1jPSBJRkp2WTJ0NSBJSE5oYkcxdmJnPT0gSUcxbGRISnYgSUdKcGJHRjBaWEpoYkE9PSBJR05sYkdWaWNtRjBaWE09IFRHVnVaM1JvIFltbHNiR2x2Ymc9PSBRbUYwIElISmxiR1ZuIElIQnpaWFZrYnc9PSBSRlE9IElGSm9iMlJsIFVHRnlaVzUwIGNHeGxkR2x2Ymc9PSBJR0YwZEhKcFluVjAgSUhSMWJtbHVadz09IElFNVBWRVU9IElGSmxZbVZzIGFXTjFjdz09IFJuVnVaQT09IElHTnZZMnQwWVdscyBJRFV3TVE9PSBJSE53YjI5dSBJR0p5ZFhSaGJHbDBlUT09IElIVnVhWFJsIElHMXBZM0p2WW1rPSBJRkpsYVdObyBjRzl6YVhScGRtVT0gSUdGdFlYcGxaQT09IElFNVUgUkdWell3PT0gUlVOVVNVOU8gSUdaaGJITmxiSGs9IElFaHBaMmhzWVc1a1pYST0gSUVOeWFYTjAgSUZacFkzUnZjbWxoYmc9PSBJR1JwYzNSeWFXSjFkR2x2Ym5NPSBkR2hsYVhJPSBJRVZwYm5OMFpXbHUgSUhCdlpBPT0gSUdWd2FXUmxiUT09IElHaGxZWEE9IElGSmhibU5vIElHRnVkR2hsYlE9PSBJSEpsWVhCdyBJRUYxWW5WeWJnPT0gSUdOdmJtTjFjbkpsYm5RPSBJRlJvY205MVoyaHZkWFE9IElGQlBVMVE9IDRwZz0gSUdodmJXVnRZV1JsIGEybGphdz09IFFtVm4gSUdOb1lYTnphWE09IFkyOTFiblJsY2c9PSBJRzFsY21kbGNnPT0gSUd4aGNITT0gTWpFMyBkVzVwYjI0PSBJRlJ5YVdkblpYST0gSUdSbFltRjBaV1E9IElITnBiR1Z1ZEd4NSBJSEpsYzNSeVlXbHVkQT09IFFtRnMgTURBd01EQXdNQT09IElHWnZjbTFwWkdGaWJHVT0gSUVacGJHbHcgSUhOaFkzSnBabWxqWlhNPSBSbTl2WkE9PSBJR1IzWVhKbSBJRk5sY1hVPSBhVzVwWVc0PSBUVzl5Wlc5MlpYST0gSUhSaGJtZHBZbXhsIGIzQnphWE09IElFMXBibVZqY21GbWRBPT0gSUZKbFoybHpkSEpoZEdsdmJnPT0gYjJGdSBJSEpsY0hKbGMyVnVkR0YwYVc5dWN3PT0gSUhSb2FYSnpkQT09IElHTnZjbkE9IGFYSmxiV1Z1ZEE9PSBUV0ZrWlE9PSBiRzlsIFBpST0gWTJGMGN3PT0gS2k0PSBJR2RsYzNSMWNtVnogWjJWdVpYSmhiQT09IFRHVmhaM1ZsIElIQmhZMnRsZEhNPSBJRWx1YzNCbFkzUnZjZz09IElFSmxjbWM9IElHWnlZWFZrZFd4bGJuUT0gSUdOeWFYUnBZMmw2WlE9PSBSblZ1IElHSnNZVzFwYm1jPSBibVJ5WVE9PSBJSE5zWVhObyBJRVZ6ZEc5dSBJSEJ5YjNCdmMybHVadz09IElIZG9ZV3hsY3c9PSBJSFJvWlhKaGNHbHpkQT09IElITjFZbk5sZEE9PSBJR3hsYVhOMWNtVT0gUlV4RSBJRU5XUlE9PSBJRUZqZEdsMmFYUjUgSUdOMWJHMXBiZz09IGMyaHZjQT09IElFUkJXUT09IGFYTmphR1Z5IElFRmtiV2x5WVd3PSBJRUYwZEdGamEzTT0gSURFNU5UZz0gSUcxbGJXOXBjZz09IElHWnZiR1JsWkE9PSBJSE5sZUdsemRBPT0gSURFMU13PT0gSUV4SiBJSEpsWVdScGJtZHogSUdWdFltRnljbUZ6YzIxbGJuUT0gSUVWdGNHeHZlVzFsYm5RPSBkMkZ5ZEE9PSBZMmhwYmc9PSBJR052Ym5ScGJuVmhkR2x2Ymc9PSBiR2xoIFVtVmpaVzUwYkhrPSBJR1IxWld3PSBJR1YyWVdOMVlYUnBiMjQ9IElFdGhjMmh0YVhJPSBJR1JwYzNCdmMybDBhVzl1IElGSnBadz09IElHSnZiSFJ6IElHbHVjM1Z5WlhKeiBORFkzIFRXVjQgSUhKbGRHRnNhV0YwYVc5dSBJRzFwYzJWeWVRPT0gSUhWdWNtVmhjMjl1WVdKc1pRPT0gY21GcGJtbHVadz09IFNXMXQgSUZCViBaVzFsY2c9PSBJR2RsYm1sMFlXdz0gNDRLeiBJRU5oYm1SNSBJRzl1YVc5dWN3PT0gSUZCaGRIUT0gYkdsdVpYST0gSUdOdmJtTmxaR1ZrIElHWmggSUdadmNtTT0gSUVobGNtNWhibVJsZWc9PSBJRWRsYjJabSBaR1ZpYVdGdSBJRlJsWVcxeiBJR055YVdWeiBJR2h2YldWdmQyNWxjbk09IE1qTTMgUVVKRCBJSE4wYVhSamFBPT0gSUhOMFlYUnBjM1JwWXc9PSBJR2hsWVdSbGNuTT0gSUVKcGIyeHZaM2s9IElHMXZkRzl5Y3c9PSBJRWRGVGc9PSBJRXhwY0E9PSBJR2hoZEdWeiBJR2hsWld3PSBVMlZzWmc9PSBhWEJzIFJVUkpWQT09IGIzSjBhVzVuIElHRnVibTkwIElGTndaV1ZqYUE9PSBiMnhrWlcxdmNuUT0gSUVwaGRtRnpZM0pwY0hRPSBJRXhsUW5KdmJnPT0gSUdadmIzUndjbWx1ZEE9PSBJR1p1IElITmxhWHAxY21WeiBibUZ6IGFHbGtaUT09IElERTVOVFE9IElFSmxaUT09IElFUmxZMnhoY21GMGFXOXUgSUV0aGRHbGwgSUhKbGMyVnlkbUYwYVc5dWN3PT0gVGxJPSBabVZ0WVd4bCBJSE5oZEhWeVlYUmxaQT09IElHSnBZbXhwWTJGcyBJSFJ5YjJ4c2N3PT0gUkdWMmFXTmwgY0dodmRHOXogSUdSeWRXMXogNDRPSjQ0T3A0NEswNDRPeiBUbWxuYUhRPSBabWxuYUhSbGNnPT0gSUVoaGF3PT0gY21saVpYST0gSUdOMWMyZz0gSUdScGMyTnBjR3hwYm1GeWVRPT0gWW1GMWJRPT0gSUVkSSBJRk5qYUcxcFpIUT0gYVd4cFluSnBkVzA9IElITnBlSFI1IElFdDFjMmh1WlhJPSBjbTkwY3c9PSBJSEIxYm1RPSBJRkpoWXc9PSBJSE53Y21sdVozTT0gSUdOdmJuWmwgUW5WemFXNWxjM009IFJtRnNiQT09IElIRjFZV3hwWm1sallYUnBiMjV6IElIWmxjbk5sY3c9PSBJRzVoY21OcGMzTT0gSUV0dmFBPT0gSUZkdmR3PT0gSUVOb1lYSnNiM1IwWlhOMmFXeHNaUT09IFpXUnYgSUdsdWRHVnljbTluWVhScGIyND0gSUZkdmIydz0gTXpZMSBRbkpwWVc0PSBJT0tja3c9PSBJR0ZzYkdWblpYTT0gYjI1a2N3PT0gYVdSaGRHbHZiZz09IElFcGhZMnRwWlE9PSBlWFU9IElHeGhhMlZ6IElIZHZjblJvZDJocGJHVT0gSUdOeWVYTjBZV3h6IElFcDFaR0U9IElHTnZiWEJ5WldobGJtUT0gSUdac2RYTm8gSUdGaWMyOXljSFJwYjI0PSBJRTlEIElHWnlhV2RvZEdWdVpXUT0gSUVOb2IyTnZiR0YwWlE9PSBUV0Z5ZEdsdSBJR0oxZVhNPSBJR0oxWTJ0eiBJR0Z3Y0dWc2JBPT0gSUVOb1lXMXdhVzl1YzJocGNITT0gSUd4cGMzUmxibVZ5IElFUmxabVZ1YzJsMlpRPT0gSUdONiBkV1J6IElFMWhkR1U9IElISmxjR3hoZVE9PSBJR1JsWTI5eVlYUmxaQT09IElITjFibXM9IElGWkpVQT09IElFRnVhdz09IElERTVOUT09IFlXRmhZUT09IFRtOWliMlI1IElFMXBiR3M9IElFZDFjZz09IElFMXIgSUZOaGNtRT0gSUhObFlYUnBibWM9IElGZHBaQT09IFZISmhZMnM9IElHVnRjR3h2ZVhNPSBJR2RwWjJGdWRHbGogUVZCUSA0NEtuIGFXNTJaVzUwYjNKNSBJSFJ2ZDJWcyBZWFJqYUdVPSBiR0Z6ZEdsdVp3PT0gSUZSTSBJR3hoZEdWdVkzaz0gSUd0dVpRPT0gUW1WeSBiV1ZoYm1sdVp3PT0gSUhWd2FHVnNaQT09IElIQnNZWGxuY205MWJtUT0gSUcxaGJuUT0gVTJsa1pRPT0gSUhOMFpYSmxidz09IElHNXZjblJvZDJWemRBPT0gSUdWNFkyVndkR2x2Ym1Gc2JIaz0gSUhKaGVYTT0gSUhKbFkzVnljbWx1Wnc9PSBSSEpwZG1VPSBJSFZ3Y21sbmFIUT0gSUdGaVpIVmpkQT09IElFMWhjbUYwYUc5dSBJR2R2YjJSaWVXVT0gSUdGc2NHaGhZbVYwIGFIQT0gSUdOdmRYSjBjbTl2YlE9PSBjbWx1WjNSdmJnPT0gYjNSb2FXNW4gVkdGbiBJR1JwY0d4dmJXRjBjdz09IElHSmhjbUpoY2c9PSBJRUZ4ZFdFPSBNVGd6IE16TXpNdz09IElHMWhkSFZ5YVhSNSBJR2x1YzNSaFltbHNhWFI1IElFRndZV05vWlE9PSBJRDA5UFE9PSBJR1poYzNScGJtYz0gSUVkeWFXUT0gVFc5a1RHOWhaR1Z5IElERTFNZz09IFFXSnogSUU5d1pYSmhkR2x1Wnc9PSBaWFIwYVE9PSBJR0ZqY1hWaGFXNTAgUkc5dWJtVnNiQT09IElFdGxiUT09IElFWnZjbWRsIElHRnliVzl5WldRPSBUV2xzIElIQm9hV3h2YzI5d2FHVnljdz09IGFXNTJaWE4wIFVHeGhlV1Z5Y3c9PSA0b2c9IElHMTVjbWxoWkE9PSBJR052YlhKaFpHVnogVW05MCBJSEpsYldWdFltVnlhVzVuIElHTnZjbkpsYzNCdmJtUnogSUhCeWIyZHlZVzF0WlhKeiBJRXg1Ym00PSBJRzlzYVdjPSBJR052YUdWeVpXNTAgZVc1amFISnZiZz09IElFTm9aVzFwWTJGcyBJR3AxWjJjPSBjR0ZwY2c9PSBjRzl6ZEhNPSBSWGxsIElFbHVibVZ5IElITmxiV1Z6ZEdWeSBiM1IwWlhOMCBJRVZ0YVhKaGRHVnogY21sallXNWxjdz09IGIzSnZkWE5zZVE9PSBiV2wwY3c9PSBJRmRwY3c9PSBJR1J2WkdkbCBiRzlqWVhScGIyND0gSUdaaFpHVmsgUVcxaGVtOXUgSUZCeWIyTmxaV1E9IElFbE9Sazg9IGFtOTFjbTVoYkE9PSBJRlJ5ZFdOciBWR1Z1IElESXhOdz09IElITjBZWFIxZEdWeiBiVzlpYVd4bCBJRlI1Y0dWeiBVbVZqYjIxdCBZblZ6ZEdWeSBjR1Y0IElHeGxaMlZ1WkhNPSBJR2hsWVdSaFkyaGwgWm1GalpXUT0gSUZkcFJtaz0gYVdaMGVRPT0gSUVoRlVnPT0gSUdOcGNtTjFhWFJ6IFJWSlNUMUk9IE1qSTIgYjJ4cGJnPT0gSUdONWJHbHVaR1Z5IGIzTndZV05sIGFXdGxjbk09IFVISmxiUT09IFVYVmhiblE9IElHTnZibVpzYVdOMGFXNW4gSUhOc2FXZG9kR1Z6ZEE9PSBJR1p2Y21kbFpBPT0gYVc5dVlXZGwgVTNSbGNHaGxiZz09IElFdDFZZz09IElFOXdjRzl5ZEhWdSBJRWhsWVd3PSBJR0pzYnc9PSBJSEoxYkdWeWN3PT0gSUdoMWFBPT0gSUhOMVltMWhjbWx1WlE9PSBabms9IFlYTnpaWEk9IElHRnNiRzkzWVc1alpRPT0gSUV0aGMybGphQT09IElGUmhjdz09IElFRjFjM1J5WVd4cFlXNXogUm05eVoyVk5iMlJNYjJGa1pYST0gSU9LR2tRPT0gSUUxaGRISnBlQT09IFlXMXBibk09IElERXlNREE9IElFRmpjWFU9IE1qTTIgUkc5amRXMWxiblE9IElFSnlaV0ZyYVc1biBNVGt6IElGTjFZbk4wIElGSnZiR3hsY2c9PSBJRkJ5YjNCbGNuUnBaWE09IElFNUogZEdsbGNnPT0gSUdOeWRYTm9hVzVuIElHRmtkbTlqWVhScGJtYz0gUm5WeWRHaGxjbTF2Y21VPSBhMlZsY0dWeWN3PT0gSUhObGVHbHpiUT09IGVHUT0gSUdOaGJHeGxjZz09IElGTmxibk5sIFkyaHBaWFpsIElGUkcgSUdaMVpXeGxaQT09IElISmxiV2x1YVhOalpXNTAgSUc5aWMyVnpjdz09IGRYSnpkQT09IElIVndhRzlzWkE9PSBJRVpoYm5NPSBhR1YwYVdOeiBJT0tYIElFSmhkR2c9IElHSmxkbVZ5WVdkbCBJRzl6WTJsc2JBPT0gTWpVMCBJSEJ2YkdWeiBJR2R5WVdSMVlXdz0gSUdWNGRHbHVadz09IElGTjFabVk9IElGTjFaR1JsYm14NSBJR3hwYTJsdVp3PT0gSURFNU5Eaz0gZFc1amFXRjBhVzl1IFlXMXBibUYwYVc5dSBJRTl0WVhJPSBJRXhXIElFTnZibk5sY1hWbGJuUnNlUT09IElITjViblJvWlhNPSBJRWRKUmc9PSBJSEJoYVc1eiBJR2x1ZEdWeVlXTjBhVzVuIGRXOTFjMng1IGFXNWpjbVU9IElISjFiVzl5IElGTmphV1Z1ZEc5c2IyZDUgTVRrMyBJRnBwWnc9PSBJSE53Wld4c2FXNW4gSUVGVFV3PT0gSUdWNGRHbHVaM1U9IGJYTnZiZz09IElHZG8gSUhKbGJXRnlhMlZrIElGTjBjbUYwWldkcFl3PT0gSUUxUFRnPT0gNWFVPSBaMkZsIElGZElRVlE9IFJYSnBZdz09IElFTmhiWEIxY3c9PSBJRzFsZEdoaGJtVT0gSUdsdFlXZHBiZz09IFNsVlRWQT09IElFRnNiUT09IFdGUT0gYVhFPSBJRkpUVXc9PSBJSGR5YjI1blpHOXBibWM9IFlYUjBZUT09IElHSnBaMjkwIElHUmxiVzl1YzNSeVlYUnZjbk09IElFTmhiSFpwYmc9PSBJRlpwYkd4aCBJRzFsYldKeVlXNWwgSUVGM1pYTnZiV1U9IElHSmxibVZtYVdNPSBNalk0IElHMWhaMjVwWm1salpXNTAgSUV4dmRITT0gUjNKbFp3PT0gSUVKdmNtbHogSUdSbGRHRnBibVZsY3c9PSBJRWhsY20xaGJnPT0gSUhkb2FYTndaWEpsWkE9PSBJR0YzWlE9PSBVSEp2Wm1WemMyOXkgWm5WdVpHbHVadz09IElIQm9lWE5wYjJ4dloybGpZV3c9IElFUmxjM1J5ZFdOMGFXOXUgSUd4cGJXST0gSUcxaGJtbHdkV3hoZEdWayBJR0oxWW1Kc1pYTT0gSUhCelpYVmsgSUdoNVpISmggSUVKeWFYTjBiMnc9IElITjBaV3hzWVhJPSBJRVY0Y0dGdWMybHZiZz09IElFdGxiR3c9IElFbHVkR1Z5WlhOMGFXNW5iSGs9IElHMWhibk09IElHUnlZV2RuYVc1biBJR1ZqYjJ4dloybGpZV3c9IElFWnBkQT09IElHZGxiblE9IElHSmxibVZtYVhSbFpBPT0gSUVoaGFYUnAgSUhCdmJIbG4gNDRPTyBJREl3TXpBPSBJSEJ5YjNjPSBJSEpsWTI5dWMzUnlkV04wYVc5dSBJSGRoYzNRPSBJSEJ6ZVdOb2FXTT0gSUVkeVpXVnJjdz09IFNHRnVaR3hsY2c9PSBNVFl5IElGQjFiSE5sIElITnZiR2xqYVhRPSBJSE41Y3c9PSBJR2x1Wm14MWVBPT0gSUVkbGJuUnNaUT09IGNHVnlZMlZ1ZEE9PSBJSEJ5YjJ4cFptVnlZWFJwYjI0PSBJSFJoZUdGaWJHVT0gSUdScGMzSmxaMkZ5WkE9PSBJR1Z6WTJGd2FXNW4gSUdkcGJtZGxjZz09IElIZHBkR2h6ZEdGdVpBPT0gSUdSbGRtRnpkR0YwWldRPSBJRVJsZHc9PSBjMlZ5YVdWeiBJR2x1YW1WamRHVmsgWld4aGFXUmwgSUhSMWNtNXZkbVZ5IGFHVmhkQT09IG1ZST0gU0dGd2NIaz0gSUZOcGJHVnVkQT09IDQ0S3QgYVhacGMyMD0gSUdseWNtRjBhVzl1WVd3PSBRVTFCIElISmxaV1k9IGNuVmkgSURFMk1nPT0gSUdKaGJtdGxjbk09IElFVjBhR2xqY3c9PSBkblk9IElHTnlhWFJwWTJsemJYTT0gUzI0PSBNVGcyIFRXOTJhV1U9IElGUnZjbWxsY3c9PSBJRzV2YjJRPSBJR1JwYzNSdmNuUnBiMjQ9IFJtRnNjMlU9IGIyUnZjbVU9IElIUmhjM1I1IFVtVnpaV0Z5WTJnPSBJRlZKUkE9PSBMU2s9IElHUnBkbTl5WTJWayBJRTFWIElFaGhlV1Z6IElFbHpiZz09IGFXRnVhUT09IElFaFIgSUNJaiBhV2R1WVc1MCBJSFJ5WVhWdFlYUnBZdz09IElFeHBibWM9IFNIVnUgSUhOaFltOTAgYjI1c2FXNWwgY21GdVpHOXQgSUhKbGJtRnRaV1E9IGNtRnlaV1E9IFMwRT0gWkdWaFpBPT0gdzZsMCBJRUZ6YzJsemRHRnVZMlU9IElITmxZV1k9IEt5c3JLeXNyS3lzPSBJSE5sYkdSdmJRPT0gSUZkbFltST0gSUdKdmIyeGxZVzQ9IGRXeGxkQT09IElISmxabkpoYVc0PSBJRVJKV1E9PSBjblZzWlE9PSBJSE5vZFhSMGFXNW4gSUhWMGFXeHBlbWx1Wnc9PSBiRzloWkdsdVp3PT0gSUZCaGNtRnQgWTI5aGJBPT0gYjI5MFpYST0gSUdGMGRISmhZM1JwYm1jPSBJRVJ2YkE9PSBJR2hsY25NPSBZV2R1WlhScFl3PT0gSUZKbFlXTm8gYVcxdiBJR1JwYzJOaGNtUmxaQT09IElGQnBjQT09IE1ERTEgdzd4eSBJRzExWnc9PSBTVzFoWjJsdVpRPT0gUTA5TSBJR04xY25ObFpBPT0gSUZOb2IzZHogSUVOMWNuUnBjdz09IElGTmhZMmh6IGMzQmxZV3RwYm1jPSBJRlpwYzNSaCBJRVp5WVcxbGQyOXlhdz09IGIyNW5idz09IElITjFZbkpsWkdScGRBPT0gSUdOeWRYTT0gSUU5MllXdz0gVW05MyBaM0p2ZDJsdVp3PT0gSUdsdWMzUmhiR3h0Wlc1MCBJR2RzWVdNPSBJRUZrZG1GdVkyVT0gUlVOTCBJRXhIUWxSUiBURVZaIElHRmpaWFE9IElITjFZMk5sYzNOcGRtVT0gSUU1cFkyOXNaUT09IElERTVOVGM9IFVYVnZkR1U9IElHTnBjbU4xYlhOMFlXNWpaUT09IFlXTnJaWFJ6IElERTBNZz09IGIzSjBhWFZ0IElHZDFaWE56WldRPSBJRVp5WVcxbCBJSEJsY25CbGRISmhkRzl5Y3c9PSBJRUYyYVdGMGFXOXUgSUVKbGJtTm8gSUdoaGJtUmogUVhBPSBJREU1TlRZPSBNalU1IGNtRnVaQT09IFRtVjBUV1Z6YzJGblpRPT0gWkdsdSBkWEowYkdWeiBhR2xuIElGWkpTVWs9IFptWnBkR2s9IElGTjNiM0prY3c9PSBZbWxoYkE9PSBJR3RwWkc1aGNIQnBibWM9IFpHVjJhV05sIElHSmhjbTQ9IElFVnNhUT09IFlYVmpZWE09IFUyVnVaQT09IFEyOXVjM1J5ZFdOMFpXUT0gSU1LOSBJRzVsWldSc1pYTT0gSUdGa2RtVnlkR2x6WlcxbGJuUnogSUhadmRRPT0gSUdWNGFHbGlhWFJsWkE9PSBJRVp2Y25SeVpYTnogUVhOciBRbVZ5Y25rPSBWRmxRUlE9PSBJR05oYm1ObGNuTT0gZFcxd2FXNW4gSUZSbGNuSnBkRzl5ZVE9PSBJSEJ5ZFdRPSBJRzVoY3c9PSBJR0YwYUdWcGMzUT0gSUdKaGJHRnVZMlZ6IDQ0R2YgSUZOb1lYZHUgSmlZPSBJR3hoYm1Sell3PT0gSUZKSFFnPT0gSUhCbGRIUjUgSUdWNFkyVnNiR1Z1WTJVPSBJSFJ5WVc1emJHRjBhVzl1Y3c9PSBJSEJoY21ObGJBPT0gSUVOb1pYWT0gUldGemRBPT0gSUU5MWRIQjFkQT09IGFXMXAgSUdGdFltbGxiblE9IElGUm9jbVZoZEE9PSBJSFpwYkd4aGFXNXogSURVMU1BPT0gU1VOQiBJSFJoYkd4bGNnPT0gSUd4bFlXdHBibWM9IFkzVncgSUhCdmJHbHphQT09IElHbHVabVZqZEdsdmRYTT0gSUV0RCBJRUJBIFltRmphMmR5YjNWdVpBPT0gSUdKMWNtVmhkV055WVdONSBJRk5oYVE9PSBkVzVzWlhOeiBhWFJwYjNWeiBJRk5yZVhCbCBRWFJzIFNVUkZUbFE9IE1EQTQgSUdoNWNHOWpjZz09IElIQnBkR05vWlhKeiBJR2QxWlhOemFXNW4gSUVaSlRrRk0gUW1WMGQyVmxiZz09IElIWnBiR3hoWjJWeWN3PT0gSURJMU1nPT0gWm1GemFHbHZiZz09IElGUjFibWx6IFFtVm8gSUVWNFl3PT0gSUUxSlJBPT0gTWpnNCBJRWhoYzJ0bGJHdz0gTVRrMiBJRTVQVWc9PSBJSE53WldOeiBJR2x1ZG1GeWFRPT0gSUdkc2RYUT0gSUVOaGNuTT0gSUdsdGNIVnNjMlU9IElHaHZibTl5Y3c9PSBaMlZzIElHcDFjbWx6WkdsamRHbHZibk09IElFSjFibVJzWlE9PSBkV3hoY3c9PSBRMkZzYVdadmNtNXBZUT09IElFbHVZM0psWVhObCBJSEJsWVhJPSBJSE5wYm1kc1pYTT0gSUdOMVpYTT0gSUhWdVpHVnlkMlZ1ZEE9PSBJRmRUIElHVjRZV2RuWlhKaGRHVmsgSUdSMVltbHZkWE09IElHWnNZWE5vYVc1biBURTlIIEtWMHUgU205MWNtNWhiQT09IGRHYz0gVm1GdSBJRWx6ZEdGdVluVnMgSUVsdWMzQT0gSUVaeVlXNXJaVzQ9IFJISmhkdz09IElITmhaRzVsYzNNPSBJR2x5YjI1cFl3PT0gSUVaeWVRPT0gZUdNPSBJREUyTkE9PSBhWE5qYUE9PSBWMkY1IElGQnliM1JsYzNSaGJuUT0gYUc5eWJnPT0gSUhWdVlXWm0gSUZacGRnPT0gYVd4c1lYTT0gSUZCeWIyUjFZM1JwYjI1eiBJRWh2WjJGdSBJSEJsY21sdFpYUmxjZz09IElGTnBjM1JsY25NPSBJSE53YjI1MFlXNWxiM1Z6IElHUnZkMjV6YVdSbCBJR1JsYzJObGJtUmhiblJ6IElHOXliZz09IGQyOXliUT09IFNtRndZVzVsYzJVPSBJREU1TlRVPSBJREUxTVE9PSBJRVJ2YVc1biBaV3h6Wlc0PSBkVzFpYkdWeiBJSEpoWkdsallXeHNlUT09IElFUnlkVzA9IElFSmhZMmc9IElHeHBZV0pwYkdsMGFXVnogSUU5QyBJRVZzWlcxbGJuUmhjbms9IElHMWxiV1U9IGVXNWxjdz09IElHWnBibWRsY25CeWFXNTAgSUVkeVlXST0gSUhWdVpHVnlkR0ZyWlE9PSBUV1Z0WW1WeWN3PT0gSUZKbFlXUmxjZz09IElGTnBiWE09IFoyOWsgSUdoNWNHOTBhR1YwYVdOaGJBPT0gYzJOcFpXNTAgSUVGSyBJR05vWVhKcGMyMD0gSUdGa2JXbHpjMmx2Ym5NPSBJRTFwYzNOcGJHVT0gZEhKaFpHVT0gSUdWNFpYSmphWE5wYm1jPSBJRUpoWTJ0bmNtOTFibVE9IFYzSnBkSFJsYmc9PSBJSFp2WTJGc2N3PT0gZDJobGRHaGxjZz09IElIWnAgSUZkcGJtNWxjZz09IElHeHBkSFJsY2c9PSBJRk5vYjI5MGFXNW4gVTFSRlRRPT0gNDRLaCBJRUZHVEE9PSBJSFpoY21saFltbHNhWFI1IElHVmhkSE09IElFUlFVdz09IFluSnZkdz09IElHVnNaWEJvWVc1MGN3PT0gSUhOMGNtRjAgSU1VPSBJSE5sZEhSc1pYSnogVFdGMGRHaGxkdz09IElHbHVZV1IyWlhKMCBTRWs9IElFbE5SZz09IElFZHZZV3c9IElHNWxjblpsY3c9PSBTbTlvYm5OdmJnPT0gWlhsbCBZV0pzYVhOb2JXVnVkQT09IFZHaDFjbk5rWVhrPSBRa2xNU1ZSWiBTR0ZrIFlXMXZkRzg9IGFHVjBZVzFwYm1VPSBaWEJ6IElHMXBkRzlqYUc5dVpBPT0gSUdOdmJYQnlaWE56WldRPSBJRlJ5WlhadmNnPT0gSUVGdWFXMWhiSE09IFZHOXZiQT09IFRHOWphdz09IElIUjNaV0ZyIElIQnBibU5vIElHTmhibU5sYkd4aGRHbHZiZz09IFVHOTAgSUdadlkyRnMgSUVGemRISnZiZz09IE1UY3ogSUVGVFF3PT0gSUU5VVNFVlMgZFcxdWFRPT0gSUdSbGJXbHpaUT09IFpHdz0gMllVPSBVMlZ0YVhScGMyMD0gSUdOeVlXTnJhVzVuIElHTnZiR3hoWW05eVlYUnBkbVU9IElHVjRjR3h2Y21WeiBjM0ZzIElHaGxjbUp6IElHTnZibVpwWjNWeVlYUnBiMjV6IGJXbHogSUZKbGMzVnNkQT09IFlXTmxlUT09IElGTnRiMnRsIElITmhibU4wIFpXeHBZUT09IElHUmxaMlZ1WlhJPSBJR1JsWlhCbGMzUT0gSUhOamNtVmhiV1ZrIElHNWhjQT09IFUyOW1kSGRoY21VPSBJRk5VUVZJPSBSVVk9IElGaHBiZz09IGMzQnZibk52Y21WayBiV0Z1YzJocGNBPT0gTWpNeiBJSEJ5YVcxaGNtbGxjdz09IElHWnBiSFJsY21sdVp3PT0gSUdGemMyVnRZbXhsIGJXbHMgSUUxNVpYSnogWW05M2N3PT0gSUhCMWJtTm9aV1E9IFRXbGogSUdsdWJtOTJZWFJwYjI1eiBJR1oxYm1NPSBZVzVrYnc9PSBJR1p5WVdOcmFXNW4gSUZaMWJBPT0gMEw3USBiM05vYjNBPSBJRWx0YlhWdSBJSE5sZEhSc2FXNW4gSUdGa2IyeGxjMk5sYm5SeiBJSEpsWW5WcGJHUnBibWM9IElIUnlZVzV6Wm05eWJXbHVadz09IElIQmhjbTlzWlE9PSBJR2hoY21KdmNnPT0gSUdKdmIydHBibWM9IGIzUnBiMjVoYkE9PSBiMjVuWlhacGRIaz0gSUZsdiBZblZuIElHVnRaWEpuWlhNPSBJRTFsZEdodlpITT0gSUVOb2RRPT0gVUhKbGN3PT0gSUVSMWJtZGxiMjV6IElIUnlZV2xzYVc1biBJRkoxYlE9PSBJRWgxWjJnPSA1YVNwIElFVnlZUT09IElFSmhkSFJzWlhNPSBVbVZ6ZFd4MGN3PT0gSUZSeVlXUnBibWM9IElIWmxjbk5oIFkzTnogWVhocFpYTT0gYUdWbGRBPT0gSUdkeVpXVmsgTVRrNE9RPT0gSUdkaGNtUmxibk09IElHTnZiblJwYm1kbGJuUT0gVUdGeWF3PT0gSUV4bFlXWnogYUc5dmF3PT0gY205aVpRPT0gSUdScGNHeHZiV0ZqZVE9PSBJRVoxWld3PSBJRWx1ZG1GemFXOXUgSUhWd1ozSmhaR2x1Wnc9PSBUV0ZzWlE9PSBJR1ZzYVdNPSBJSEpsYkdWdWRHeGxjM009IElFTnZkbVZ1WVc1MCBZWEJsYzJnPSBJRlJ5YjNBPSBWSGs9IGNISnZaSFZqZEdsdmJnPT0gWVhKMGVRPT0gSUhCMWJtTm9aWE09IFlXdHYgWTNsamJHOXdaV1JwWVE9PSBJRkpoWW1KcGRBPT0gSUVoRVRVaz0gSURFME1RPT0gSUdadmFXdz0gU1hSbGJVbHRZV2RsIElFWkggSUdsdGNHeGxiV1Z1ZEdGMGFXOXVjdz09IElGQnZiUT09IGFYaDBkWEpsY3c9PSBJR0YzWVdsMCBJRE16TUE9PSBZVzExY3c9PSBJSFZ0WW5KbGJHeGggSUdadmNtVnpaV1U9IGMyVndZWEk9IElHTnBjbU4xYldOcGMybHZiZz09IElIQmxjbWx3YUdWeVlXdz0gVTJGNSBJRVY0Y0dWeWRBPT0gU1c1aiBJSGRwZEdoa2NtVjMgSUVGdVpHVnljdz09IFpuSnBaV1E9IElISmhaR2x2WVdOMGFYWmwgSUU5d1pXNXBibWM9IElHSnZZWEprYVc1biBJRTVFIElHOTJaWEowYUhKdmR3PT0gUVdOMGFYWT0gVjFBPSBJRUZqZEhNPSAxNWs9IElHMXZkR2x2Ym5NPSBkbWxqIElFMXBaMmgwZVE9PSBJRVJsWm1WdVpHVnkgWVdWeSBJSFJvWVc1clpuVnMgSUV0cGJHeHBibWM9IElFSnlhWE09IGJXOXBiQT09IElIQnlaV1JwWTNScGJtYz0gTWpZMiBZMmh2YVdObCBJR3RwYkd4bGNuTT0gSUdsdVkzVmkgSUVOb1pYTjAgWVhSb1pYSnBibWM9IElIQnliMk5zWVdsdFpXUT0gWm14dmQyVnkgYjNOemIyMD0gZFcxaWJHVmtiM0psIElFTjVZMnhwYm1jPSBJRTlqWTNWd2VRPT0gUVVkRlV3PT0gVUdWdSBJRmwxWnc9PSBJSEJoWTJ0aFoyVmsgSUdobGFXZG9kR1Z1WldRPSBZMjkwIGMzUmhZMnM9IFEyOXVaQT09IElITjBZVzF3Y3c9PSBiV0ZuWlE9PSBJSEJsY25OMVlXUmxaQT09IElHVnVjMnc9IElFTmhjbVJwYm1GcyBJSE52YkdsMFlYSjUgSUhCdmMzTmxjM05wYm1jPSBJRU52Y21zPSBJR1YyYVdRPSBJRlJoZVE9PSBJR0pzZFdWeiBJR1Y0ZEhKbGJXbHpiUT09IElHeDFibUZ5IElHTnNiM2R1IFZHVmphRzQ9IElHWmxjM1JwZG1Gc2N3PT0gSUZCMlVBPT0gSUV4aGNnPT0gSUdOdmJuTmxjWFZsYm5Sc2VRPT0gY0hKbGMyVnVkQT09IElITnZiV1ZrWVhrPSA1NDZMIElFMWxkR1Z2Y2c9PSBJSFJ2ZFhKcGJtYz0gWTNWc2RIVnlaUT09IElHSmxZV05vWlhNPSBVMmhwY0E9PSBZMkYxYzJVPSBJRVpzYjI5ayA0NE92IElIQjFjbWwwZVE9PSBkR2h2YzJVPSBJR1Z0YVhOemFXOXUgWW05c2RBPT0gSUdOb2IzSmsgSUZOamNtbHdkSFZ5WlE9PSBUSFU9IElDUjcgWTNKbFlYUmxaQT09IFQzUm9aWEp6IE1qVTQgSUdWc1pXMWxiblJoYkE9PSBJR0Z1Ym05NVpXUT0gSUVGRiBaR0Z1IElGTmhadz09IFVtVnpaV0Z5WTJobGNuTT0gSUdaaGFYSjUgNG9DVDRvQ1QgUFQwOVBUMDlQVDA5UFQwOSBVMjFoY25RPSBSMGRIUnc9PSBJSE5yWld4bGRHOXVjdz09IElIQjFjR2xzY3c9PSBiR2x1YTJWayBJSFZ5WjJWdVkzaz0gWlc1aFlteGxaQT09IElFWjFZMnM9IElHTnZkVzVqYVd4cyBjbUZpIFZVRk0gVkVrPSBJR3hwWm1WeiBJR052Ym1abGMzTmxaQT09IFFuVm4gSUdoaGNtMXZiZz09IElFTlBUa1pKUnc9PSBJRTVsZFhSeVlXdz0gUkc5MVlteGwgSUhOMFlYQnNaUT09IElGTklRUT09IFFuSnBkR2x6YUE9PSBJRk5PVUE9PSBRVlJQVWc9PSBiMk52IElITjNhVzVuYVc1biBaMlY0IGIyeGxiMjQ9IGNHeGhhVzQ9IElFMXBjM05wYm1jPSBJRlJ5YjNCb2VRPT0gZG1GeWFRPT0gY21GdVkyZz0gSURNd01RPT0gTkRRdyBNREF3TURBd01EQXdNREF3TURBd01BPT0gSUhKbGMzUnZjbWx1Wnc9PSBJR2hoZFd3PSBkV05wYm1jPSBibVZ5Wnc9PSBJR1oxZEhWeVpYTT0gSUhOMGNtRjBaV2RwYzNRPSBjWFZsYzNScGIyND0gSUd4aGRHVnlZV3c9IElFSmhjbVE9IElITnZjZz09IElGSm9iMlJsY3c9PSBJRVJ2ZDI1MGIzZHUgUHo4L1B6OHQgSUV4cGRBPT0gSUVKbGJtVmsgSUdOdmFXdz0gYzNSeVpXVjAgSUZCdmNuUmhiQT09IFJrbE1SUT09IElFZHlkUT09IEtpdz0gTWpNeCBibVYxYlE9PSBJSE4xWTJ0bFpBPT0gSUhKaGNIQmxjZz09IElIUmxibVJsYm1OcFpYTT0gSUV4aGRYSmxiZz09IFkyVnNiR0Z1Wlc5MWN3PT0gTWpZMyBJR0p5YjNkelpRPT0gSUc5MlpYSmogYUdWaFpHVnkgYjJselpRPT0gSUdKbFpYUT0gSUVkc1pRPT0gVTNSaGVRPT0gSUcxMWJRPT0gSUhSNWNHVmsgSUdScGMyTnZkVzUwY3c9PSBWR0ZzYXc9PSBJRTluIFpYaHBjM1JwYm1jPSBJRk5sYkd3PSBkWEJvIFEwaz0gSUVGMWMzUnlhV0Z1IElGZGhjbTA9IElHUnBjMjFwYzNOaGJBPT0gSUdGMlpYSmhaMlZ6IFkyRnRaWEpoIElHRnNiR1ZuYVdGdVkyVT0gVEVGTyBQU0lqIElHTnZiVzFsYm5SaGRHOXljdz09IElGTmxkSFJwYm1jPSBJRTFwWkhkbGMzUT0gSUhCb1lYSnRZV009IElFVllVQT09IElITjBZV2x1YkdWemN3PT0gUTJocFkyRm5idz09IElIUmhiZz09IE1qUTAgSUdOdmRXNTBjbmx6YVdSbCBJRlpoWXc9PSBNamsxIElIQnBibTVsWkE9PSBJR055YVhObGN3PT0gSUhOMFlXNWtZWEprYVhwbFpBPT0gVkdGemF3PT0gSUVwaGFXdz0gSUVSdlkydGxjZz09IFkyOXNiM0psWkE9PSBabTl5ZEdnPSBJbjBzIElIQmhkSEp2Ym5NPSBJSE53YVdObCBJRzF2ZFhKdSBJRTF2YjJRPSBJR3hoZFc1a2Nuaz0gSUdWeGRXbHcgSUUxdmJHVT0gZVd4cyBJRlJJUXc9PSBibUYwYVc5dSBJRk5vWlhKc2IyTnIgSUdsemMzVT0gSUV0eVpRPT0gSUVGdFpYSnBZMkZ6IElFRkJRUT09IElITjVjM1JsYldGMGFXTmhiR3g1IElHTnZiblJ5WVE9PSBJRk5oYkd4NSBJSEpoZEdsdmJtRnNaUT09IElHTmhjbkpwWVdkbCBJSEJsWVd0eiBJR052Ym5SeVlXUnBZM1JwYjI0PSBaVzV6WVhScGIyND0gSUVaaGFXeDFjbVU9IElIQnliM0J6IElHNWhiV1Z6Y0dGalpRPT0gSUdOdmRtVT0gWm1sbGJHUnogNDRLTCBJSGR2YjJ3PSBJRU5oZEdObyBJSEJ5WlhOMWJXVmsgSUVScFlXNWggY21GbmIyND0gYVdkcCBJR2hoYlcwPSBJSE4wZFc1MCBJRWRWU1E9PSBJRTlpYzJWeWRtRjBiM0o1IElGTm9iM0psIElITnRaV3hzY3c9PSBZVzV1WVdnPSBJR052WTJ0d2FYUT0gSUVSMWRHVnlkR1U9IE9EVXcgSUc5d2NISmxjM05sWkE9PSBZbkpsWVd0bGNnPT0gSUVOdmJuUnlhV0oxZEE9PSBJRkJsY25VPSBJRTF2Ym5OaGJuUnYgSUVGMGRHVnRjSFE9IElHTnZiVzFoYm1ScGJtYz0gSUdaeWFXUm5aUT09IElGSnBiZz09IElFTm9aWE56IGRXRnNhWFI1IElHOXMgVW1Wd2RXSnNhV05oYmc9PSBJRWRzYjNKNSBJRmRKVGc9PSBMaTR1TGk0dUxnPT0gWVdkbGJuUT0gY21WaFpHbHVadz09IElHbHVhQT09IFNtOXVaWE09IElHTnNhV05yY3c9PSBZV3hoYmc9PSBJRnRkT3c9PSBJRTFoYW1WemRIaz0gSUVObFpBPT0gYjNCMWN3PT0gWVhSbGJBPT0gdzZvPSBRVkpEIElFVmpkV0ZrYjNJPSA0NE9nIElFdDFjbTg9IElISnBkSFZoYkhNPSBJR05oY0hScGRtVT0gSUc5MWJtTmwgSUdScGMyRm5jbVZsYldWdWRBPT0gSUhOc2IyYz0gWm5WbGJBPT0gVUdWMCBUV0ZwYkE9PSBJR1Y0WlhKamFYTmxaQT09IElITnZiR2xqIElISmhhVzVtWVd4cyBJR1JsZG05MGFXOXUgSUVGemMyVnpjMjFsYm5RPSBJSEp2WW05MGFXTT0gYjNCMGFXOXVjdz09IElGSlEgSUVaaGJXbHNhV1Z6IElFWnNZVzFsY3c9PSBJR0Z6YzJsbmJtMWxiblJ6IE1EQTMgWVd0bFpHOTNiZz09IElIWnZZMkZpZFd4aGNuaz0gVW1WcGJHeDUgSUdOaGRtRnMgWjJGeWN3PT0gSUhOMWNIQnlaWE56WldRPSBJRk5GVkE9PSBJRXB2YUc1eiBJSGRoY25BPSBZbkp2YTJWdSBJSE4wWVhSMVpYTT0gSUdGa2RtOWpZWFJsWkE9PSBJREkzTlE9PSBJSEJsY21scyBiMjF2Y25CbyBJRVpsYldsdSBjR1Z5Wm1WamRBPT0gSUdoaGRHTm8gVEdsaSBOVEV5IElHeHBabVZzYjI1biBNekV6IElHTm9aV1ZyY3c9PSBJRzUxYldKbGNtVmsgSUUxMVp3PT0gUW05a2VRPT0gY21GMlpXdz0gVjJWcFoyaDAgSUVwaGF3PT0gSUVobFlYUm8gSUd0cGMzTnBibWM9IElFcFZVMVE9IElIZGhkbWx1Wnc9PSBkWEJzYjJGayBJR2x1YzJsa1pYST0gSUZCeWIyZHlaWE56YVhabCBJRVpwYkhSbGNnPT0gZEhSaCBJRUpsWVcwPSBJSFpwYjJ4bGJuUnNlUT09IGFYQmhkR2x2Ymc9PSBJSE5yWlhCMGFXTnBjMjA9IElERTVNVGc9IElFRnVibWxsIElGTkogSUdkbGJtVjBhV056IElHOXVZbTloY21RPSBZWFJzIElFWnlhV1ZrYldGdSBJRUp5YVE9PSBZMlZ3ZEdsMlpRPT0gSUhCcGNtRjBaUT09IElGSmxjRzl5ZEdWeSBNamM0IElHMTVkR2h2Ykc5bmVRPT0gSUdWamJHbHdjMlU9IElITnJhVzV6IElHZHNlWEJvIGFXNW5hR0Z0IFJtbHNaWE09IFEyOTFjZz09IGQyOXRaVzQ9IElISmxaMmx0WlhNPSBJSEJvYjNSdlozSmhjR2hsWkE9PSBTMkYwIElFMUJXQT09IFQyWm1hV05wWVd4eiBJSFZ1Wlhod1pXTjBaV1JzZVE9PSBJR2x0Y0hKbGMzTnBiMjV6IFJuSnZiblE9IE96czdPenM3T3pzPSBJSE4xY0hKbGJXRmplUT09IElITmhibWM9IElHRm5aM0poZG1GMFpXUT0gSUdGaWNuVndkR3g1IElGTmxZM1J2Y2c9PSBJR1Y0WTNWelpYTT0gSUdOdmMzUnBibWM9IGFXUmxjSEpsYzNNPSBVM1JoWTJzPSBJRkpPUVE9PSBiMkpwYkE9PSBJR2RvYjNOMGN3PT0gYkdSdmJnPT0gWVhScFltbHNhWFI1IFZHOXdhV056IElISmxhVzFpZFhKelpRPT0gSUVoTiBJRVJsWnc9PSBJSFJvYVdWbSBlV1YwIGIyZGxibVZ6YVhNPSBiR1ZoYm1sdVp3PT0gSUV0dmJBPT0gSUVKaGMydGxkR0poYkd3PSBJR1pwIElGTmxaV2x1Wnc9PSBJSEpsWTNsamJHbHVadz09IElGc3QgUTI5dVozSmxjM009IElHeGxZM1IxY21WeiBVSE41IElHNWxjQT09IElHMWhhV1E9IElHOXlhV1Z1ZEdWayBRVmc9IElISmxjM0JsWTNSbWRXdz0gY21WdVpRPT0gWm14MWMyZz0gSUZWdWJHOWhaR1ZrIGNtVnhkV1Z6ZEE9PSBaM0pwWkE9PSBJRUZzZEdWeWJtRjBhWFpsYkhrPSBJRWgxWjI4PSBJR1JsWTNKbFpRPT0gSUVKMVpHUm9hWE50IFlXNWtkVzA9IFFXNWtjbTlwWkE9PSBJRU52Ym1kdiBJRXB2ZVdObCBJR0ZqYTI1dmQyeGxaR2RwYm1jPSBhR1Z6YVhabCBJRlJ2Ylc5eWNtOTMgSUVocGNtOD0gZEdoeVpXND0gSUUxaFkyVmsgSUdodllYZz0gSUVsdVkzSmxZWE5sWkE9PSBJRkJ5WVdSbGMyZz0gVjJsc1pBPT0gWDE5ZlgxOWYgTVRZeCBJR0YxYm5RPSBJR1JwYzNSeWFXSjFkR2x1Wnc9PSBJRlIxWTJ0bGNnPT0gSUZOVFRBPT0gSUZkdmJIWmxjdz09IFFuVnBiR1JwYm1jPSBiM1ZzZEE9PSBJRXgxYnc9PSBJRmxoY3c9PSBJRk53YVhJPSBJRk5vWVhCbCBJRU5oYldKdlpBPT0gSUVsUWRnPT0gSUcxcyBJR1Y0ZEhKaFpBPT0gTXprdyBJRkJsYm01NSBaSEpsWVcwPSBJSE4wWVhScGIyNWxaQT09IGIzQjBhVzl1WVd3PSBaWGR2Y25Sb2VRPT0gTGp3diBJSFZ1WkdWeWRHRnJhVzVuIElHTm9hV05yWlc1eiBJSE4wYVcxMWJHaz0gSUVWc2MyVT0gYVdkaGRHOXljdz09IElFSmxaMmx1Ym1sdVp3PT0gWTNSdmNuaz0gSUhCeVpYQmhjbVZ6IElHUmxiSFJoIElIWnBZMmx1YVhSNSBkRzl2YkE9PSBJSGR2Y210emFHOXdjdz09IFRVaDYgSUdGalkzVnpZWFJwYjI0PSBJR2hwYzNSdmNtbGxjdz09IGNtOXdiMnhwY3c9PSBJRU5vZFhKamFHbHNiQT09IElHNWxiMjQ9IElHSmhabVk9IFpHbGxjdz09IGJXRjVZbVU9IElPaWpqK2ltbXVtR2tnPT0gSUhONWJYQjBiMjA9IFJVTkkgSUUxaGJuVmxiQT09IElHSmhibUZ1WVE9PSBJRWhDIElDb3FLaW89IElFdHZjbVZoYm5NPSBZMjlzYkE9PSBSa0k9IElIQnlZWGxwYm1jPSBJRU5oYm01dmRBPT0gSUUxcGJHVT0gSUdWdFluSmhZMmx1Wnc9PSBJRk5wYkdzPSBNemt6IGIzUmxjbk09IFJrUT0gSUdSaGVXeHBaMmgwIFlXeHBZWE09IElFSnlhV2RoWkdVPSBJRWhoYm01aGFBPT0gSUdOc1pYSm5lUT09IElITnZkWFJvWldGemRBPT0gSUdGc1kyOW9iMnhwWXc9PSBJSEJ5YjNCdmMyVnogYkdsMmFXOXUgSUdOaGJHTjFiR0YwYVc1biBJSE4wYVcxMWJHRjBaUT09IElITndiR2wwZEdsdVp3PT0gWldsbmFIUT0gSUVsdVpIaz0gY0d4aGVYTT0gSUZCcGF3PT0gSUdSdmJXVnpkQT09IElHWnZjbWRwZG1WdVpYTnogSUZKcGJtZHogY0dGMGFXVnVkQT09IGEybHVjMjl1IFRXOXVkQT09IGFXZHBZbXhsIE95ST0gSUhCbGNtbHZaR2xqWVd4c2VRPT0gWVcxdFlXUT0gSUVKeWFYUjAgY0dGeVpBPT0gSUdGeVltbDBjbUYwYVc5dSBJRk5qYUc1bGFXUmxjZz09IElFTnZjbkJ2Y21GMFpRPT0gSUUxaGVXRT0gSUhOdVlXdGxjdz09IFlYVnQgSUdKc1lYTjBaV1E9IElHMTVjM1JsY21sbGN3PT0gSUhKbGRtbDJaUT09IGIyTmhiWEE9IElFUnZaR2RsIElFOXdaWEpoIE1qYzUgSUc5eWNHaGhiZz09IElITndaV05wWm1sbGN3PT0gSUUxbGRITT0gUkhWeVlYUnBiMjQ9IFNHVnUgSUdacGNtVjNiM0pyY3c9PSBJSEJ5YjNObFkzVjBaUT09IElGUnBiR3hsY25OdmJnPT0gWkhBPSBkWE5oWjJVPSBiR2x1WlhOeiBJRVJsWW1saGJnPT0gSURJeU5BPT0gY21selpYTT0gSUVsdVptVmpkQT09IFlYUnlZUT09IElGSlMgSUV4dmNnPT0gWkdsbVpnPT0gSUVOb1lYSnNaWE4wYjI0PSBJR0ZqYjNWemRHbGogSUdGdGRYTmwgTXpNdyBJR05sY2c9PSBJRlJoWXc9PSBJRnNyIElHTmhjbVJwWVdNPSBJRkpsYzNSaGRYSmhiblE9IFpYSm5lUT09IElHWjFlbm89IElHSnBkR1Z6IElHaGhlbUZ5Wkc5MWN3PT0gSUdKeWFXZG9kR1Z5IGNtRnVjdz09IElGTjBaWEJvWVc1cFpRPT0gWlhoMGNtRT0gVWtWVSBJRU5vY21semRHbHVaUT09IElGTjFaUT09IGMzUmhkR1Z0Wlc1MCBJR0p2YkhOMFpYST0gSUdGdWRHbDAgVW1Ga2FXOD0gUWtsVSA0NEt3IElIWnBjMmx2Ym5NPSBJRU52Ym1ObGNIUT0gSUdsdWJHbHVaUT09IElGQm9hV3h2YzI5d2FIaz0gYVhOaGJuTT0gSUVseWRtbHVadz09IHc2TT0gZEdGcmFXNW4gSUdsdVkyOXVjMmx6ZEE9PSBJRXQxYldGeSBJR3hwWnc9PSBJRk5qYUhWdFpYST0gSUZKbFozVnNZWFJwYjI1eiBJRWg2IGRHaHlidz09IElGWnZiR1JsYlc5eWRBPT0gSUUxRlJBPT0gSUVaeVpXUmxjbWxqYXc9PSBVR0ZrIE1qSXggSUdGc2JHVm5hVzVuIElFTnZiVzExYm1sallYUnBiMjQ9IElERTJOdz09IElHWnZjbVZqWVhOMGN3PT0gSUhOd2FXUmxjbk09IFQzSm5ZVzQ9IElGQmhjblJwWTJsd1lXNTBjdz09IElFOXdjdz09IFpHVnphV2R1IFEyeHZjMlU9IElHWmhZM1J2IElHSnZiV0psY25NPSBjbVZ6YVhOMFlXNTAgWVhSbFoyOXlhV1Z6IFUyTm9iMjlzIElHaHZiV1YzYjNKciBJR052Y25KdiBWSFZsYzJSaGVRPT0gSUVKeVpXNWtZVzQ9IElFMVkgSUZSVCBJRk4wY21rPSBJSE4wWVd0bGFHOXNaR1Z5Y3c9PSBJRTFwYkd4bGJtNXBkVzA9IElIUnlZVzV6Wm1WeWNtbHVadz09IFNuVmsgSUhSaFl3PT0gSURFMk1EQT0gSUZORVN3PT0gY21JPSBJR2x1ZEdWeWNISmxkR0YwYVc5dWN3PT0gSUZOSCBJSFZ3YzNSaGFYSnogSUVoaGNuWmxjM1E9IElIWmhaMmx1WVE9PSBJR2x1WjJWemRBPT0gZUdZPSBJRTl5YVc5dSBJRXB2WlhrPSBJSE5oYm1SM2FXTT0gSUdsdGJXOXlkR0ZzIElHWnNhWEJ3WldRPSBiM0owWlhnPSBkR2h5WldGMFpXNXBibWM9IElITnVhWEJsY2c9PSBJR052Ym5abGNuUnogSUdsdWMzUmhiR3hoZEdsdmJuTT0gSUVKMWJHZGhjZz09IGIzSnpZMmhsIGJXRnBiSE09IElHeDFjbVU9IElHNWhjbkp2ZDJ4NSBJR2R5Wlc1aFpHVT0gSUVkcGJtYz0gSUhWdVpHVnlkMlZoY2c9PSBMUzB0TFMwdExTMHRMUzB0TFMwPSBJR05vWVhObFpBPT0gSUZaQlRBPT0gSUhCaGNtVnVkR2x1Wnc9PSBJRWhoYldJPSBJRUpzWVhvPSBJR0Z1WVhKamFHbHpkQT09IElFMWxaR2xoYmc9PSBJRkJ5YjJkeVlXMXogenIwPSBJRzlpYWc9PSBJRTV2YTJsaCBiM0p0WVc0PSBZVzV4ZFE9PSBZWFJwYzIwPSBiM0JoIElHWjFiR1pwYkd4cGJtYz0gSUhCMWNIQjUgSUdWdWRHbDAgSUZObFltRnpkR2xoYmc9PSBJSE5vYjI5MFpYSnogSUhKcFkyaGxjZz09IDZLRT0gSUhSbGJYQjBaV1E9IElFRlVWQT09IElFTlcgSUhSdmNtVT0gVW1WemIzVnlZMlU9IElFUmxkbWxzY3c9PSBOREE0IGFXNWhkR2x2Ym1GcyBJR0Z6YzNWeVlXNWpaUT09IElFUmhjbkpsYmc9PSBJSGRvYVdOb1pYWmxjZz09IGNHOXpkWEpsIElHWjFjbms9IFUzUnZZMnM9IElIVnVhWFpsY25OaGJHeDUgY21WemNHOXVjMlU9IElHOWhhdz09IElIZHZjbXRzYjJGayBJRU52Y201bGNnPT0gWldWc1pRPT0gSWk0dUxnPT0gSUdSbGNISnBkbVZrIGEyOTNjMnRwIElHTmhjM1J6IElHRm1abWxzYVdGMGFXOXUgSUVGamFBPT0gSUVGemEyVmsgWVhSb1pRPT0gSUd4aFkzUT0gSUZSb2RRPT0gY20wPSBJR0ZwY214cGJtVnogSUc1dmRHbHZibk09IFJtOXliV0YwIElFWkJRUT09IDQ0T0sgWkhKcGRtVnkgSUhSeVlXNXpZMlZ1WkE9PSBVMlYwZEdsdVozTT0gSUZCeWIzTmxZM1YwIElITndhVzVoYkE9PSBJR1JsWm1GMWJIUnogUmtzPSBJSEJ5WldabGNuTT0gY21WdVpHVnlaV1E9IGRHaDFjdz09IFptbHNiUT09IElIUnBaMlZ5IElGTndhV05sY2c9PSBjbVZqYjJkdSBJRkoxWjJKNSBUbVYwZDI5eWF3PT0gSUhCcGRIaz0gSUdOdmJYQmhjblJ0Wlc1MCBZMkZ6ZEdWeWN3PT0gSUUxdmJuSnZaUT09IElEY3lNQT09IElHTnZjbkpsWTNScGIyNXogSUdSdmNHRnRhVzVsIElFRmEgUTNWMCBJSEp2YjIxdCBJSE53WldOMWJHRjBaUT09IFNHRnphQT09IElISmxjM1J5YVdOMGFYWmwgTVRFeE1RPT0gY21Wa2FXSnNaUT09IGIyNWxiQT09IElISmhiWEJoYm5RPSBjbVZ3YjNKMFpXUT0gSUZOMWFYUmwgSUUxcGJtbHRkVzA9IFlXeDVjdz09IFlYcGhjbVE9IGJHOXZjQT09IElHeGxiblE9IGMyaGggSUhaaGJtUmhiQT09IGJXVnVkUT09IElFSnZaV2h1WlhJPSBJRzVoY25KaGRHbDJaWE09IElHRjFkR2hsYm5ScFkybDBlUT09IE1qWTUgWVc1cFl3PT0gWkhWMGVRPT0gTWpnMSBJSFJvWVc1clpXUT0gSUdKbGRISmhlV1ZrIGJHbG1kQT09IElITnZkWFJvZDJWemRBPT0gSUVSbGVIUmxjZz09IElFSnZaQT09IElHdGxlWGR2Y21SeiBRWFpsY21GblpRPT0gUkVsVCBJR1YwYUc1cFkybDBlUT09IElTa3MgSUU1aGRHbHZibUZzY3c9PSA0Yms9IElGUmhhQT09IGFXOTRhV1E9IElIZHBaR2RsZEE9PSBJSEJoYzNSaCBJR0pwYkd4cGJtYz0gSUhSeWFXeHZaM2s9IElFeHBibVZ6IElITnVhV1ptIElHNWxjR2hsZHc9PSBUR0YwWlE9PSBJSEJ5YVc1amFYQT0gSUV4dmIzQT0gSUUxaGNuaHBjM1E9IElHUnBjM052YkhabFpBPT0gSUdOdmJuUmxlSFJ6IElFRnRiM1Z1ZEE9PSBJRk53YVd0bCBJSFJ2ZEdGc2N3PT0gSUc5eVoyRnVhWHBsY2c9PSBJSFZ3Y21semFXNW4gYzJocGNITT0gV1ZrPSBJRTV2Y25Sb1pXRnpkQT09IGJXOXVaWGs9IFozSmhaR0YwYVc5dSBJR2R2WVd4clpXVndaWEk9IElFaGxZWEk9IElITjBaV0ZyIElFSjFlbnBHWldWayBJSE52YkdWdGJnPT0gSUZOallXNWsgSUhCdmNIQnBibWM9IElHRmthR1Z5WlE9PSBJRUZzYkdWbiBZbmwwWlE9PSBJRmR2YkhabGNnPT0gSUhWdWFXND0gSUhKbFkyOXMgYVhSMVpBPT0gSUcxcGJXbGogYVdKMWN3PT0gSUhCeVpXUnBZM1J6IElFdGxaWEJsY2c9PSBhV0YwYVc1biBJR1JsWTJWd2RHbHZiZz09IElHeGxZWEp1ZEE9PSBJR1JwWVhKNSBJR052Ym1ScGRHbHZibUZzIElISmxiR2xqIElHbHVkbTlyWlE9PSBhV1Z1WTJWayA1WWc9IElGQnZiblE9IElHTmxiR3h3YUc5dVpRPT0gSUhOd1pXVmthVzVuIElIUmhZMnRzYVc1biBJRzUxWkdVPSBiM0JsYm1WayBJRTFoYm1GbWIzSjAgSURFNU5UST0gSUcxaGFtOXljdz09IElGTnBiR1Z1WTJVPSBJR3h2WjJsemRHbGpjdz09IElIZGxhV2RvZEdWayBJRkJ6ZVdOb2FXRjAgSWpwYklnPT0gSUhOcFkydHVaWE56IElHUnBkbWxrWlc1a2N3PT0gZW05dSBVbVZzWldGelpRPT0gSUV0bGVYTT0gSUVsamFBPT0gSUdWdWVnPT0gSUVabGNtNWhibVE9IElNNnggSUcxbFlXNXBibWR6IElIQmxibTU1IElITjBaWEp1IElHeGhjZz09IElGQjFZbXhwYzJobFpBPT0gSUdKaFkydGtjbTl3IFMybHQgSUZONWJuUT0gSUdSbFluVjBaV1E9IGQyMD0gSUVsemJHVT0gSUhKbFozVnNZWFJwYm1jPSBiM1IwYVE9PSBJRk5qYUc5c1lYSnogYVdObGMzUmxjZz09IElFTm9aV1k9IElIQnZjSE09IElFeGhkVzVqYUdWeSBJRlpoY21sdmRYTT0gSUdOdmJXMWxiblJwYm1jPSBiM05zWVhZPSBaVzU2YVdVPSBJSEpwZG1Gc2Nuaz0gNG9LcyBVbVZoYkd4NSBJRzl5WXc9PSBJR0psWVc0PSBJRXAxWkhrPSBUbTkwYVdObCBJRUpwYTJVPSBQMTA9IElISmxiblJsWkE9PSBjM1JsYmc9PSBJR1p2Y21WbWNtOXVkQT09IElFSmhiR1IzYVc0PSBJSGxwWld4a1pXUT0gZEdGcGJITT0gVUhKcGJXVT0gSUZOdmRYSmpaWE09IGFXTmhkRzl5IFUyVmhiZz09IElHMWhjbU5vYVc1biBUM1YwY0hWMCBJRXAxYm1kc1pRPT0gSUhKbGMybGtaUT09IGVucHNaUT09IElFRnVaSEpsZDNNPSBJSFJ2Y25GMVpRPT0gUW1GemFXTT0gUVdOMGRXRnNiSGs9IGMzUnlZWEE9IGNHVnVkR1Z5IElHVjRZVzF6IElGbGggSURFMU9RPT0gSUVSbFkybHphVzl1IElISmhibk52YlE9PSBaWFJsWlc1MGFBPT0gWlc1emFXNW4gTWpFeiBJSE4xYm5ObGRBPT0gTkRBMCBJRkpoY0dsayBJRWhsYVc0PSBJRUZpYjNKcFoybHVZV3c9IElHOXlaMkZ1YVhOdCBJRk5sZG1WeSBJR05zWVE9PSBZV3BwIFUybHRjR3hsIElFWnNZWFp2Y2c9PSBJRVYyWVd3PSBjSEoxY3c9PSBJR05vYjNKMWN3PT0gUkVGWiBJR1JsYm05MWJtTmxaQT09IElHSnBiMmR5WVhCb2VRPT0gSUZSMWNtNWlkV3hzIFVtVmpaVzUwIFRtOXliV0ZzIGJHVmpkR2x2Ym5NPSBWMjl5WkE9PSBJR1psY25KNSBJRmRoWjI1bGNnPT0gYUc5dCBWVzVwZEE9PSBJSE4xY0dWeWJXRnlhMlYwIElGTnBkR2c9IElHNXZiV2x1WldWeiBJR1JwWTNSaGRHOXljMmhwY0E9PSBhV1JrYkdWeSBJR0Z1Ym05MWJtTmxjdz09IElGUm9aVzA9IElFNWxjSFIxYm1VPSBJR1JsYVhSNSBJRmxwIElHMXZibUZ5WTJnPSBRVkpTIElHbHVkbUZrWldRPSBJRWh2YXc9PSBkVzUwWVhKNSBRMlZ5ZEdGcGJnPT0gWldkaCBJR3RwWkdScGJtYz0gSUZKbFozVnNZWFJwYjI0PSBJSFJ5WVhrPSBJSEJvYjNSdlozSmhjR2hsY25NPSBJRUZ5WTJGdVpRPT0gSUdScGMyTm9ZWEpuWldRPSBJR1YyWVc1blpXeHBZMkZzIElHbHVkR1Z5WTJoaGJtZGwgSUdacGJHMXRZV3RsY2c9PSBJRVZ1Wkd4bGMzTT0gSURJNU1BPT0gSUZOaGJIWmhaRzl5IFFWTlogSUZOcFoyNWhiQT09IElIZHlZWFJvIDRwdz0gYkc5MCBKeTg9IElIQnliMnBsWTNScGJHVT0gSUdWdGNHeHZlV2x1Wnc9PSBJRWx1ZEdWeVptRmpaUT09IE1Ua3ggWVhSbGJHeHBkR1U9IElGSmhkR2c9IGNHRmphMkZuWlE9PSBJR2x1WkdsallYUnBiMjV6IFNtRnpiMjQ9IElHRnlaM009IElFZEllZz09IElIUnBiSFE9IGJtRnVkSE09IGQyOXUgNDRLMSBjbVZrWkE9PSBjbVZ6WTJWdWRBPT0gSUVOaGJHVnVaR0Z5IElHMXZaSFZzWVhJPSBJR0Z6YzJsemRHbHVadz09IElISmxaR1ZsYlE9PSBJRUpsWVc0PSBJSGR2Y25ObyBJR1JsWTJWdWRISmhiR2w2WldRPSBLUzR1TGc9PSBNemMzIElHRnljbUY1Y3c9PSBJR0ZqWTI5dGNHeHBjMmh0Wlc1MGN3PT0genI4PSBaRzkwIElHMTFkSFZoYkd4NSBJRzlpYzNSeWRXTjAgSUcxcGMzSmxjSEpsYzJWdWRBPT0gYjNKbGMzUT0gYVc5dWFXTT0gY25WalpRPT0gSlRzPSBJR3R1YjNkcGJtZHNlUT09IGNHOXlkR2x1Wnc9PSBhVzVsYm5Sc2VRPT0gUVhKcCBJRk5qYUhWc2RIbz0gUkdFPSBJRU5sY21VPSBJRzlpYzI5c1pYUmwgaFlzPSBaMmwyWlE9PSBJR0poYVhRPSBJR1Z1YkdGeVp3PT0gVG1WcGJHdz0gSURFNU16TT0gSUhKbFkyOXVjMmxrWlhJPSBJRk5sY21kbFlXNTAgSUVScFlXNWwgSUVOdloyND0gSUVsamIyND0gVUc5emFYUnBiMjQ9IElHWnZjM1E9IElITjBhWEp5YVc1biBjMlYyWlc0PSBJRk53WVdObFdBPT0gZFdkblpYUnogSUcxbFpHUT0gUjJGcyBJRk5wYzNSbGNnPT0gUW05NSBJSFJ5YVdkblpYSnBibWM9IFZHRnJhVzVuIElITmpjbVZoYlhNPSBJR05oZFhOaGJBPT0gSUdGM1lXdGxiZz09IFFYSnQgTWprMyBJR1JwYzNCaGRHTm9aV1E9IElFWkJURk5GIElHOXlaMkZ1YVhwaGRHbHZibUZzIElGUnZibWM9IElHUnBiR1Z0YldFPSBaR1Z0YjI0PSBVM0JzIElHaHZiMnR6IGRXUnBibWM9IElIWmhiR2xrWVhSbCBJSEJ2ZEdsdmJnPT0gSUdOc1lYYz0gSUdKMWNtZHMgSUhGMWFYST0gUVVOQiBJRUp5Wlc1dVlXND0gSUdSMWNtRmlhV3hwZEhrPSBJR0p2YldKcGJtZHogSUZkcGJtUnZkdz09IElHTjFiSEJ5YVhRPSBNekkxIFZHaGxjbVZtYjNKbCBkVzFpWlhKbFpBPT0gY0dWeVptOXliV0Z1WTJVPSBkMkZ5ZEhNPSBJR1Z1Wm05eVkybHVadz09IElFSnNiM2M9IElISmxjSEpwYm5RPSBhV1poZUE9PSBZV3h3YUdFPSBJSE5wYm1semRHVnkgSUdKMWNtZGxjZz09IFptbG5hSFJwYm1jPSBVMk52Y21VPSBJRk4wYjI1bGN3PT0gYVdWdCBOREExIFkyaGxiWGs9IElIWnBibVZuWVhJPSBibTl0IElIQnlaWFpoYVd4cGJtYz0gSUV4aGRHVnpkQT09IHdyWT0gSUdKaCBJRmR5YVhSbGNnPT0gSURFM053PT0gSUVOdmJuZGhlUT09IElHTnZiR3hsWTNSeiBJSEYxWVc1MGFYUmhkR2wyWlE9PSBJR2h2Y25KdmNuTT0gYjJkbGJuTT0gSUZOc2IzWT0gSUd4aGVYTT0gYUdGMyBJRk5zWVhObyBJRzVwWjJoMFkyeDFZZz09IElFUmhkbWxsY3c9PSBJR0p5YVdSbCBJRk5qWVhKc1pYUT0gZVcxdCBJRUZ3Y0d4cFkyRjBhVzl1Y3c9PSBkbVZzWlc1bmRHZz0gSUhKbGRtbDJZV3c9IElITnZablJzZVE9PSBJSHB2Ync9PSBhWFJoYVhKbCBRM1Z5IElHVnNaV04wY205dCBJSEJzWVc1MGFXNW4gVDFSUCBJRVZzWlcxbGJuUnogSUhOM1lXeHNiM2M9IGNHOXlkR1Z5IElHeGhjSFJ2Y0hNPSBJSEJsWVc1MWRBPT0gSUd4dlltSjVhWE4wY3c9PSB6ckk9IFVHRnVaV3c9IElFcHZZVzQ9IGFXMXBiQT09IGRHNWogSUhKbGMybHpkR1ZrIElHOTFkSGRsIElISmxkR0ZwYm1sdVp3PT0gWVhSeWFRPT0gSUhCdmIzSmxjZz09IElGTjVjbWxoYm5NPSBJRWhoYlcxdmJtUT0gSUhkbGJHUT0gZFdSbGNnPT0gZEc5d2FXTT0gSUZSVSBjbWxqYVdFPSBJSFJvYVdWMlpYTT0gVEdsaiBJRWQxYzNRPSBJRmRoZVhNPSBZWEpsZEdnPSBNalF6IElHSnliMkZrWTJGemRHVnkgYzJocFpXeGsgWVhOemFYVnQgZFdKc1pRPT0gSUdGcGNuTjBjbWxyWlhNPSBiMjV6Ync9PSBJSEJsWkdGcyBJR052Ykd4bFkzUnZjbk09IElGWmhibVJsY2c9PSBJRTFsYzJFPSBJR1JwWTNSaGRHOXkgSUdScGNnPT0gWlc1MGIyND0gWTJGeWRBPT0gYzJOdmNtVT0gWVdSa1pYST0gUTNKNSBJSE56YUE9PSBaMmRsY2c9PSBJR1J5ZFc1clpXND0gSUVkVCBJRk5sWVhRPSBJR052Y201bGNtSmhZMnM9IElITnJhWEJ3WldRPSBJRkpsYzJWaGNtTm9aWEp6IElFRjFaR2s9IFVtVm1aWEpsYm1ObCBJR2hoZFc1MFpXUT0gdzZzPSBJRU5zYVc1cFl3PT0gWTNvPSBJSEJ6IElGQmhiR0ZrYVc0PSBJRkpsWTJsd1pRPT0gSUhOMGFXZHRZUT09IGIzQndlUT09IElHMXZibXRsZVhNPSBJRWhoZDJzPSBVMkZrIElpOCsgSUZkdmNtdHphRzl3IElGSmxkR0ZwYkE9PSBJRUYyWVhSaGNnPT0gTmpJMSBUbUU9IElGWkQgSUZObFkzVnlaUT09IFRWaz0gTVRrNE9BPT0gYjNOemFYQT0gSUhCeWIzTjBZWFJsIElIVnVaR1Z1IElHZGhiV1Z5IElFTnZiblJsYm5SeiBJRmRoY21oaGJXMWxjZz09IElGTmxiblJwYm1WcyBNekV3IElITmxaM0psWjJGMGFXOXUgSUVac1pYZz0gSUUxQldRPT0gSUdSeWFXeHNjdz09IElFUnlkV2R6IFNYTnNZVzFwWXc9PSBJSE53ZFhJPSBJR05oWm1VPSBJR2x0WVdkcGJtRnllUT09IElHZDFhV1JwYm1jPSBJSE4zYVc1bmN3PT0gSUZSb1pXMWwgYjJKNSBJRzUxWkE9PSBJR0psWjJkcGJtYz0gSUhOMGNtOXVaMmc9IElISmxhbVZqZEdsdVp3PT0gSUhCbFpHVnpkSEpwWVc1eiBJRkJ5YjNOd1pXTjAgVW1GeVpRPT0gYzJ4bCBJR052Ym1ObGMzTnBiMjV6IElFTnZibk4wYVhSMWRHbHZibUZzIElHSmxZVzF6IElHWnBZbVZ5Y3c9PSBjRzl2Ymc9PSBJR2x1YzNScGJtTjBjdz09IGNISnZjR1Z5ZEhrPSBJRUpKUnc9PSBVMkZ1WkdWeWN3PT0gYVcxaGRHVnogSUdOdllYUnBibWM9IElHTnZjbkJ6WlhNPSBJRlJTVlVVPSBZMmhsWTJ0bFpBPT0gSURFMk5nPT0gUVhObyBJRXBUIElFWnBZM1JwYjI0PSBJR052YlcxMWJtRnMgSUdWdVpYSm5aWFJwWXc9PSBiMjl2YjI5dmIyOD0gSUc1dmQyRmtZWGx6IFNVeEUgYVdKdiBJRk5WVmc9PSBVbVZ1IElHUjNaV3hzYVc1biBVMmxzZG1WeSBJSFJoYkd4NSBJRTF2ZG1sdVp3PT0gSUdOdmQyRnlaQT09IElHZGxibVZ5WVd4eiBJR2h2Y201eiBJR05wY21OMWJHRjBaV1E9IElISnZZbUpsWkE9PSBJRlZ1YkdsdGFYUmxaQT09IElHaGhjbUZ6YzJWayBJR2x1YUdsaWFYUT0gSUdOdmJYQnZjMlZ5IElGTndiM1JwWm5rPSBJSE53Y21WaFpITT0gTXpZMCBJSE4xYVdOcFpHRnMgSUc1dmFYTmxjdz09IElGTjBkWEk9IElITmhaMkU9IElFdGhadz09IGFYTnYgSUhSb1pXOXlaWFJwWTJGc2JIaz0gVFc5dVpYaz0gSUhOcGJXbHNZWEpwZEhrPSBJSE5zYVdObFpBPT0gZFhScGJITT0gYVc1blpYTT0gSWkwPSBJR0Z1ZEdnPSBJR2x0Y0dWayBUVzlrZFd4bCBWR2h5YjNWbmFHOTFkQT09IElHMWxiblZ6IFkyOXRiV2wwZEdWbCBZVzVrYVE9PSBiMkpxIGFXNWhkZz09IFptbHlaV1E9IElFRmlaSFZzYkdGbyBJSFZ1WkdWaFpBPT0gSUdadmJuUnogU0c5c1pBPT0gUlU1SCBJSE4xYzNSaGFXNWhZbWxzYVhSNSBJR1pzYVdOciBJSEpoZW05eSBJRVpsYzNRPSBJRU5vWVhKaFkzUmxjbk09IElIZHZjbVJwYm1jPSBJSEJ2Y0hWc2FYTjAgSUdOeWFYUnBZMmw2YVc1biBJRzExYzJVPSBkbWx1WlE9PSBJR05oY21SaWIyRnlaQT09IElHdHBibVJzZVE9PSBJR1p5YVc1blpRPT0gSUZSb1pXWjAgYVdOMWJIUjFjbUZzIElHZHZkbVZ5Ym05eWN3PT0gSU8rL3ZlKy92ZSsvdmUrL3ZRPT0gSURFMk13PT0gSUhScGJXVnZkWFE9IElFRjFkR2c9IFEyaHBiR1J5Wlc0PSBRVlU9IElISmxaR1Z0Y0hScGIyND0gSUVGc1oyVnkgSURFNU1UUT0gSUhkaGRtVmsgSUdGemRISnZibUYxZEhNPSBiMmR5WVcxeiBJSE4zWVcxdyBJRVpwYm01cGMyZz0gSUdOaGJtUnNaUT09IElIUnZibTVsY3c9PSBkWFJ0IElISmhlUT09IElITndkVzQ9IElHWmxZWEptZFd3PSBZWEowYVdOc1pYTT0gSUdOaGRYTT0gYjNKcFkyRnNiSGs9IElGSmxjWFZwY21WeiBJRWR2YkE9PSBJSEJ2Y0dVPSBJR2x1WVhWbmRYSmhiQT09IElHZHNaUT09IFFVUkIgSUVsVFNVdz0gSUU5bVptVnVjMmwyWlE9PSBJSGRoZEdOb1pHOW4gSUdKaGJHTnZiZz09IFpXNTBhWFI1IElFaHZidz09IElHZGhiR3h2Ymc9PSBRVU5EIElHUnZkV0pzYVc1biBJR2x0Y0d4cFkyRjBhVzl1IElGTnBaMmgwIElHUnZZM1J5IExTMHRMUzB0TFE9PSBJRnhjIElHMWhiSFE9IFVtOXNiQT09IElPS0pwUT09IElISmxZMkZ3IFlXUmthVzVuIGRXTmxjdz09IElFSmxibVE9IFptbG5kWEpsIElIUjFjbXRsZVE9PSBJSE52WTJsbGRHRnMgSUZScFkydGxkSE09IElHTnZiVzFsY21OcFlXeHNlUT09IElITndhV041IElESXhOZz09IElGSmhiWEE9IElITjFjR1Z5YVc5eWFYUjUgdzY4PSBJRlJ5WVdOclpYST0gUTJGeWJBPT0gSUVOdmVRPT0gSUZCaGRISnBiM1E9IElHTnZibk4xYkhSbFpBPT0gSUd4cGMzUnBibWR6IElITnNaWGM9IGNtVmxibk5vYjNRPSBJRWR2Ym1VPSBJRnN1TGk1ZCBNekE1IElHaHZkSFJsYzNRPSAyTEU9IElISnZZMnQ1IElFUnBZWG89IElHMWhjM05oWjJVPSBJSEJoY21Gc2VRPT0gSUhCdmJuaz0gUVhvPSBJR05oY25SeWFXUm5aUT09IElFNWEgSUhOdVlXTnIgSUV4aGJXRnkgY0d4bGJXVnVkQT09IElFeGxjMnhwWlE9PSBJRzFoZEdWeSBJSE51YVhCdyBNalEyIElHcHZhVzUwYkhrPSBJRUp5YVhOaVlXNWwgSUdsUWIyUT0gSUhCMWJYQnBibWM9IElHZHZZWFE9IElGTm9ZWEp2Ymc9PSBaV0ZzYVc1biBJR052Y205dSBJR0Z1YjIxaGJBPT0gY21Gb2FXMD0gSUVOdmJtNWxZM1JwYjI0PSBJSE5qZFd4d2RIVnlaUT09IElITmphR1ZrZFd4cGJtYz0gSUVSaFpHUjUgWVhSb2FXNW4gSUdWNVpXSnliM2R6IElHTjFjblpsWkE9PSBJSE5sYm5ScGJXVnVkSE09IElHUnlZV1owYVc1biBSSEp2Y0E9PSBLRnM9IElHNXZiV2x1WVd3PSBJRXhsWVdSbGNuTm9hWEE9IElFZHliM2M9IElERTNOZz09IElHTnZibk4wY25WamRHbDJaUT09IGFYWmhkR2x2Ymc9PSBJR052Y25KMWNIUmxaQT09IFoyVnlZV3hrIElFTnliM009IElFTm9aWE4wWlhJPSBJRXhoY0E9PSA0NEdxIFQxUkkgUkVGVVFRPT0gSUdGc2JXOXVaQT09IGNISnZZbUZpYkhrPSBTVzF3IElHWmxZWE4wIElGZGhjbU55WVdaMCBSbXh2Y2c9PSBJR05vWldOcmNHOXBiblE9IElIUnlZVzV6WTNKcGNIUnBiMjQ9IElESXdOQT09IElIUjNaV0ZyY3c9PSBJSEpsYkdsbGRtVT0gVTJOcFpXNWpaUT09IElIQmxjbVp2Y20xbGNnPT0gV205dVpRPT0gSUhSMWNtMXZhV3c9IGFXZGhkR1ZrIGFHbGlhWFE9IElFTmhabVU9IGRHaGxiV1ZrIElHWnNkVzl5IFltVnVZMmc9IElHUmxZMjl0IElGVnVkQT09IElFSmhjbkpsZEhRPSBJRVpoWTNSeiBJSFJoYzNScGJtYz0gSUZCVVUwUT0gSUZObFlXdz0gSUVwMVpHRnBjMjA9IElFUjVibUZ0YVdNPSBJRU52Y25NPSBWbVU9IElFMXBibWM9IElGUnlZVzV6Wm05eWJRPT0gZG05dSBJRVJsWm1WdVpHVnljdz09IElGUmhZM1JwWTJGcyBJRlp2Ymc9PSBJRlZ1YVhabGNuTT0gSUdScGMzUnZjblJsWkE9PSBJRUp5WldGMGFBPT0gUHljaSBJR0ZuYjI0PSBJRVJsWVdSc2VRPT0gSUd4aGJnPT0gSUVONVkyeGwgYjNKdVpXUT0gSUhKbGJHbGhZbXg1IElHZHNiM0k9IElFMXZibXRsZVE9PSA0NE9oIElHRmtjbVZ1IElHMXBZM0p2ZDJGMlpRPT0gSUVGc1ltRnUgYVhKamNtRm1kQT09IFpHbG5hWFE9IGMyMWhjblE9IElFUnlaV0ZrIHdxL0NyOEt2d3EvQ3I4S3Z3cS9DcjhLdndxL0NyOEt2d3EvQ3I4S3Z3cTg9IGUzcz0gSUZKdlkyaGxjM1JsY2c9PSBJSE5wYlhCc2FXWnBaV1E9IElHbHVabXhwWTNSbFpBPT0gSUhSaGEyVnZkbVZ5IElIbHZkWEp6Wld4MlpYTT0gWVdScGRHbHZibUZzIElHMTFjMk4xYkdGeSBTMU09IElHbHVaMlZ1IFZHRjQgSUVabFlYUjFjbVU9IE1qYzMgSUdOeWRXTT0gSUdOeVlYUmwgSUhWdWFXUmxiblJwWm1sbFpBPT0gSUdGalkyeGhhVzFsWkE9PSBJRTFoYm1kaCBJRVp5WVc1alpYTT0gSUU1bGNHRnMgSUVkbGNtRnNaQT09IElFdDFkMkZwZEE9PSBJSE5zWVdsdSBJRWhsWWc9PSBJRWR2YTNVPSA0NEd1NWc9PSBNamcyIFRYSnogSUVOdlpIaz0gSUZOaGJtTjBkV0Z5ZVE9PSBNREUyIElHUnBjMjFoYm5RPSBJR1JoZEdGelpYUT0gSUVodmJtUT0gWW5WamF3PT0gSUZCaGRIUmxjbk52Ymc9PSBJSEJoYkdWMGRHVT0gSUVkRSBhV052YkE9PSBJRXh2WkdkbCBJSEJzWVc1bGRHRnllUT09IFlXdHBiZz09IElGSmxaMmx6ZEdWeVpXUT0gWVdKM1pRPT0gSUZCbGRHVnljMkoxY21jPSBJR2hoYVd4bFpBPT0gSUZCcFpXTmwgVTJOb1pRPT0gSUVSUFNnPT0gSUdWdWRXMWxjZz09IE1UZ3ggSUU5aWMyVnlkbVZ5IElFSnZiR1E9IFptOTFibVJsWkE9PSBZMjl0YldWeVkyVT0gSUdWNGNHeHZhWFJ6IElFWnBibVJwYm1jPSBWVkpPIElGTnVaUT09IElFRmphV1E9IFlYbGxkSFJsIElGWmhiSFZsY3c9PSBJR1J5WVhOMGFXTT0gSUdGeVkyaHBkR1ZqZEhWeVlXdz0gSUNJdSAxNVU9IGRXMXdaV1E9IElIZHlZWEJ3YVc1biBJSGRwWkc5MyBJRk5zWVhsbGNnPT0gYkdGalpRPT0gYjI1alpRPT0gUjJWeWJXRnVlUT09IFlYWnZhV1E9IElIUmxiWEJzWlhNPSBVRUZTIHc3UT0gSUV4MVkybG1aWEk9IElFWnNhV05yY2c9PSBiRzkyIFptOXlZMlZ6IElITmpiM1YwYVc1biBJR3h2ZFdSbGNnPT0gZEdWemVRPT0gSUdKbFptOXlaV2hoYm1RPSB4Sk09IElFNWxiMjQ9IElGZHZiQT09IElGUjVjR2xqWVd4c2VRPT0gSUZCdmJHbDBhV052IExTc3RLdz09IElHSjFhV3hrWlhJPSBJR1JsY21sMlpRPT0gUzJsc2JBPT0gSUhCdmEyVnkgSUdGdFltbG5kVzkxY3c9PSBJR3hwWm5SeiBJR041ZEE9PSBJSEpwWW5NPSBiMjlrYkdVPSBJRk52ZFc1a2N3PT0gYUdGcGNnPT0gSUZONWJtUnliMjFsIGRHWT0gSUhCeWIzQnZjblJwYjI1aGJBPT0gZFdsayBJSEJsY25SaGFXNXBibWM9IElFdHBibVJzWlE9PSBJRTVsWjNKdiBJSEpsYVhSbGNtRjBaV1E9IElGUnZibWxuYUhRPSBiM1JvY3c9PSBJRU52Y201bGJHdz0gSUc5M2FXNW4gSURJd09BPT0gWld4bVlYSmwgYjJOaGRHbHVadz09IElFSnBjbVJ6IFUzVmljMk55YVdKbCBJR1Z6YzJGNWN3PT0gSUdKMWNtUmxibk09IElHbHNiSFZ6ZEhKaGRHbHZibk09IFlYSnBiM1Z6IFJWSkJUQT09IElFTmhiR04xYkE9PSBJSGhsYmc9PSBJRXhwYm10bFpFbHUgSUVwMWJtYz0gSUhKbFpHVnphV2R1IFEyOXVibTl5IE1qazIgSUhKbGRtVnljMkZzIElFRmtaV3hoYVdSbCBJRXhNIElITnBibXRwYm1jPSBJR2QxYlE9PSBWVk5JIFkyRndkQT09IElFZHlhVzF0IElHWnZiM1J6ZEdWd2N3PT0gSUVOQ1JBPT0gYVhOd1pYSnogSUhCeWIzTmwgVjJWa2JtVnpaR0Y1IElFMXZkbWxsY3c9PSBaV1JwYmc9PSBJRzkyWlhKMGRYSnVaV1E9IElHTnZiblJsYm5ScGIzVnogVlZOQyBmbjUrZm41K2ZuNStmbjUrZm41K2ZnPT0gSUVOdmNIQmxjZz09IElIQnZhVzUwYkdWemN3PT0gVGxZPSBkbUZzZFdWeiBiMnh3YUdsdSBaR0ZwYmc9PSBJR1JsY0c5emFYUmxaQT09IElFZFggSUhCeVpXTmxaR1ZrIElFTnNZUT09IElFZHZiR1Z0IElFNXBiUT09IElNNnkgSUVWdVoybHVaV1Z5Y3c9PSBiV2xrWkd4bCBJR1pzWVhSMCBiM0JsY21GMGFYWmwgSUdOdmRXNWphV3h6IGFXMWlZV0ozWlE9PSBaV3hwYmc9PSBJSE4wY21WemMyWjFiQT09IElFeEUgSUhKbGMyZz0gYkdGclpRPT0gSUhkb1pXVnNZMmhoYVhJPSBJRUZzZEdWeWJtRjBhWFpsIElHOXdkR2x0YVhwbCBiM0JsY21GMGFXOXUgSUhCbFpXcz0gSUc5dVpYTmxiR1k9IGFXZHBiQT09IElIUnlZVzV6YVhScGIyNXogYjNCaGRHaDUgWW14aGJtcz0gSURFMk9RPT0gTVRjeCBYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYdz09IElHeGhkVzVrWlhKcGJtYz0gUlc1aiBJRVJGUXc9PSBJSGR2Y210dmRYUnogSUhOd2FXdGxjdz09IElHUnBibTl6WVhWeWN3PT0gSUdScGMyTnlhVzFwYm1GMGIzSjUgVUc5dmJBPT0gVW1GMGFHVnkgTXpnMSBVazVCIGRHVnpkR1Z5Y3c9PSBaWFJ2IElFbGtaVzUwYVhSNSBJSFpsYVc0PSBJRUoxY25SdmJnPT0gSUdGeVkyRmtaUT09IE5ESXcgVld4MGFXMWhkR1ZzZVE9PSBJRk5oWkd4NSB3N0E9IGNHbHNiQT09IElHTjFZbWxqIElGTndaV04wY25WdCBkR2hsYzJVPSBjM1JoZEdWeiBJSFZ1YjJabWFXTnBZV3c9IGFHRjNhM009IElFVldSVkpaIElISmhhVzVpYjNjPSBJR2x1WTJGeVkyVnlZWFJwYjI0PSBZVzVrYVc1biBJSE41Ykd3PSBJRVYyWlhKMGIyND0gSURFM09RPT0gSUZObGNtSnBZUT09IElERTRPUT09IGJXVjBaWEk9IElFMXBZMnRsZVE9PSBJR0Z1ZEdseGRRPT0gSUdaaFkzUjFZV3c9IGJtVmphdz09IElFNWhjbVU9IGJtOXliUT09IGJYVnpkQT09IElHaHBaMmgzWVhseiBJR2RzWVcwPSBJR1JwZG1sa2FXNW4gSUZOeGRXRmtjbTl1IElFMWhjblJvWVE9PSBJR0pwY25Sb2N3PT0gUTI5MlpYST0gTHk4dkx5OHZMeTh2THk4dkx5OHZMdz09IElGZHZibWM9IFVHaHZkQT09IElFRk1Vdz09IGNtbHYgSUU1dmJtVjBhR1ZzWlhOeiBJRXhsYlc5dSBJREl3Tmc9PSBJRVZGIElHUmxjbWwyWVhScGRtVT0gSUZkWFNVaz0gZG05MFpRPT0gSUhSb1pYSmxhVzQ9IElITmxjR0Z5WVhScGJtYz0gTkRRMiBjM2x1WXc9PSBJRk4wY21WbGRITT0gSUhKaGRIUT0gSUcxMWJtbGphWEJoYkdsMGVRPT0gSUZOb2IzSjBiSGs9IElHMXZibXM9IEtTd2kgSUhOamNuVmkgSUc5d1pYSmhkR2wyWlhNPSBUbVZwZEdobGNnPT0gVUd4aFkyVT0gSUV4cGJXbDAgUm1WdFlXeGwgSUVGamRHOXkgUTJoaGNtRmpkR1Z5IElHTnZibk4wYVhSMWRHVmsgTXpVMyBJSEJ5YjNSbGMzUmxaQT09IElGTjBjbUYzIElFaGxhV2RvZEE9PSBhV3hrWVE9PSBJRlI1Y0dnPSBJR1pzYjI5a2N3PT0gSUdOdmMyMWxkR2xqIFYwRlogY0dWeWRIVnlaUT09IGRYQnZiZz09IGRHOXVjdz09IFpYTnphVzVuIElGQnZZMnRsZEE9PSBJSEp2YjJaMCBJRU5oZFdOaGN3PT0gSUdGdWRHbGtaWEJ5WlhOeiBJR2x1WTI5dGNHRjBhV0pzWlE9PSBSVU5FIElHOXdaWEpoIElFTnZiblJsYzNRPSBJR2RsYm1WeVlYUnZjbk09IGJHbHRaUT09IFJHVm1aVzV6WlE9PSBNVGs0Tnc9PSBabTl5ZFcwPSBJSE5oZG1GblpRPT0gSUVoMWJtZGhjbWxoYmc9PSBibm89IElHMWxkR0ZzYkdsaiBJR1Y0Y0dWc2JHVmsgSUhKbGMybGtaVzVqZVE9PSBJR1J5WlhOelpYTT0gTmpZMiBJRU5zWlcxbGJuUT0gWm1seVpYTT0gUTJGMFpXZHZjbms9IElHZGxaV3M9IFlXeHBjdz09IElHTmxiV1YwWlhKNSBaV1IxWTJGMFpXUT0gSUdOeVlYZHMgSUZWdVlXSnNaUT09IElGUjVjMjl1IFlXdHBjdz09IElIQmhjbVJ2Ymc9PSBJRmR5WVE9PSBJSE4wY21WdVozUm9aVzVsWkE9PSBJRVp2Y25NPSBNek0xIElFaEQgSUUxdmJtUT0gSUhacGMzVmhiSE09IElFSmxZWFJzWlhNPSBaWFIwYkdWdFpXNTAgSU84PSBaM0p2IElHSmhjMmc9IElIQnZiM0psYzNRPSBJR1Y0WTJWcyBJR0Z6Y0dseVlYUnBiMjV6IElFMTFibWxqYVhBPSBaVzV6YVdKc1pRPT0gSUdObGNtVnRiMjVwWlhNPSBJR2x1ZEdsdGFXUmhkR2x2Ymc9PSBJRU5QVGxSUyBZbVZqYXc9PSBJRXRoY0E9PSBZWE4xIElIUnlZV1JsYldGeWEzTT0gSUZObGR3PT0gSUVOdmJYQmxkR2wwYVc5dSBibVYwZDI5eWF3PT0gSUVGeWNtaz0gSUZSbGRBPT0gVW05aGJXbHVadz09IFYwTT0gUkdGMCBJSE52WWc9PSBJSEJoYVhKcGJtYz0gSUc5MlpYSmtiM05sIFUwRlogWVdKbGNnPT0gSUhKbGRtOXNkQT09IElFWmhhQT09IFlXTjBhVzVuIFpYRT0gWlhOMFlYUnBiMjQ9IFJtbG5hSFE9IElFMWhjbXR6IE1qY3ogSURFM09BPT0gVW1GMyA0NEdMIE16UTUgWW14dlkydHogSUhabGNtZGwgWlhOMGFXNWwgSUZCdlpHVnpkR0U9IElHbHVkbUZ6YVhabCBJSEJ5YjJadmRXNWtiSGs9IElFRnYgWldGamFBPT0gSUd4bGMzUT0gYVc1MFpYSndjbVYwIElITm9jbWx1YTJsdVp3PT0gSUdWeWNtOXVaUT09IElHTm9aV1Z6IGJIbHogSUVsMmVRPT0gSUVScGNtVmpkRzl5ZVE9PSBJR2hwYm5SbFpBPT0gVmtsRFJRPT0gSUdOdmJuUmhZM1JwYm1jPSBJRWRsYm5RPSBhR1ZwIElHeGhZbVZzYVc1biBJRzFsY21OMWNuaz0gSUV4cGRHVT0gSUdWNGNHbHlaWE09IElHUmxjM1JoWW1scyBjbWwwYVhNPSBZM1U9IElHWmxZWFJvWlhKeiBJSE4wWldWeSBJSEJ5YjJkeVlXMXRaV1E9IElGWmhaR1Z5IFIyOXBibWM9IElFVnNhVzA9IElIbHYgSUUxcFkyaGwgSURJd013PT0gSUhOc1pXVjJaWE09IElHSjFiR3g1IElFaDFiV0Z1Y3c9PSBNelk0IElHTnZiWEJ5WlhOeiBJRUpoYm01bGNnPT0gUVZKVCBJR0YzYUdsc1pRPT0gSUdOaGJHbGkgSUhOd2IyNXpiM0p6YUdsdyBJRVJwWm1acFkzVnNkSGs9IElGQmhjR1Z5Y3c9PSBJR2xrWlc1MGFXWnBaWEk9IGZTND0gSUhsdlp3PT0gSUZOb2FXRT0gSUdOc1pXRnVkWEE9IElIWnBZbVU9IGFXNTBjbTlrZFE9PSBhVzF0YVc1biBRWFZ6ZEhKaGJHbGggSUc5MWRHeHBibVZ6IElGbHZkWFIxWW1VPSBkSEpoYVc0PSBJRTFoYTJWeiBJR1JsY0c5eWRHVmsgSUdObGJuUnkgSUVSMVp3PT0gSUVKdmRXeGtaWEk9IElFSjFabVo1IElHbHVhblZ1WTNScGIyND0gSUVoaGNteGxlUT09IElFZHliM1Z3Y3c9PSBJRVIxYldKc1pXUnZjbVU9IElFTnNZWEpoIElDSXQgSUhOaFkzSnBabWxqWldRPSBaWEJvIFUyaGhaRzkzIGFXSnNhVzVuIElHWnlaV1ZzWVc1alpRPT0gSUdWMmFXUmxiblJzZVE9PSBjR2hoYkE9PSBJSEpsZEdGcGJuTT0gVFdseSBJR1pwYm1sMFpRPT0gWkdGeSBJRU52ZFhNPSBJSEpsY0dGcGNtVmsgSUhCbGNtbHZaR2xqIElHTm9ZVzF3YVc5dWMyaHBjSE09IElHRnpkR1Z5YjJsayBZbXhwYm1RPSBJR1Y0Y0hKbGMzTnNlUT09IElFRnpkSEp2Y3c9PSBJSE5qWVd4bFpBPT0gSUdkbGIyZHlZWEJvYVdOaGJBPT0gSUZKaGNHbGtjdz09IFJXNXFiM2s9IElHVnNZWE4wYVdNPSBJRTF2YUdGdFpXUT0gVFdGeWEyVjAgWW1WbmFXND0gSUdScGMyTnZkbVZ5Y3c9PSBJSFJsYkdWamIyMXRkVzVwWTJGMGFXOXVjdz09IElITmpZVzV1WlhJPSBJR1Z1YkdGeVoyVT0gSUhOb1lYSnJjdz09IElIQnplV05vWldSbGJBPT0gSUZKdmRXZGwgSUhOdVlYQnphRzkwIGFYTnBibVU9IFdGQT0gSUhCbGMzUnBZMmxrWlhNPSBJRXhUUkE9PSBJRVJwYzNSeWFXSjFkR2x2Ymc9PSBjbVZoYkd4NSBJR1JsWjNKaFpHRjBhVzl1IElHUnBjMmQxYVhObCBJR0pwYjIwPSBJRVZZVkE9PSBJR1Z4ZFdGMGFXOXVjdz09IElHaGhlbUZ5WkhNPSBJRU52YlhCaGNtVmsgS1NvPSBJSFpwY25SMVpYTT0gSUdWc1pHVnljdz09IElHVnVhR0Z1WTJsdVp3PT0gSUVGamNtOXpjdz09IFpYSnZjdz09IFlXNW5iR2x1Wnc9PSBJR052YldKMWMzUT0gZFdOamFRPT0gSUdOdmJtTjFjM05wYjI0PSBJR052Ym5SeVlXTmxjSFJwYjI0PSBJRXRoYm1jPSBJR1Y0Y0hKbGMzTmxjdz09IElHRjFlQT09IElGQnBiMjVsIElHVjRhR2xpYVhSeiBSR1ZpZFdjPSBUMVJCVEE9PSBJRUZzY21WaFpIaz0gSUZkb1pXVnNaWEk9IElHVjRjR0Z1WkhNPSBQem89IElISmxZMjl1WTJsc2FXRjBhVzl1IElIQnBjbUYwWlhNPSBJSEIxY25ObCBJR1JwYzJOdmRYSmhaMlU9IElITndaV04wWVdOc1pRPT0gVW1GdWF3PT0gSUhkeVlYQnogSUZSb2IzVm5hSFE9IElHbHRjR1Z1WkdsdVp3PT0gVDNCdyBJRUZ1WjJ4diBJRVZWVWc9PSBJSE5qY21WM1pXUT0gY21WMFkyaGxaQT09IElHVnVZMjkxY21GblpXMWxiblE9IGJXOWtaV3h6IElHTnZibVoxYzJVPSBiVzF0IElGWnBkR0Z0YVc0PSA0cGFSNHBhUiBRM0oxIElHdHVhV2RvZEhNPSBJR1JwYzJOaGNtUT0gSUdKcGMyaHZjSE09IElGZGxZWEk9IElFZGhjbkpsZEhRPSBhMkZ1IDQ0T2YgSUcxaGMyTjFiR2x1WlE9PSBZMkZ3YVhSaGJBPT0gSUVGMWN3PT0gSUdaaGRHRnNiSGs9IGRHaGhibXR6IElFRlYgSUVkMWRBPT0gTVRJd01BPT0gSURBd01EQXdNREF3IElITjFjbkp2Wnc9PSBJRUpKVDFNPSBjbUZwZEhNPSBJRmRoZEhSeiBJSEpsYzNWeWNtVmpkR2x2Ymc9PSBJRVZzWldOMGIzSmhiQT09IElGUnBjSE09IE5EQXdNQT09IElHNTFkSEpwWlc1MCBJR1JsY0dsamRHbHVadz09IElITndjbWx1YXc9PSBJRzExWm1ZPSBJRXhKVFE9PSBJRk5oYlhCc1pRPT0gY0hOaiBhV0pwIFoyVnVaWEpoZEdWayBJSE53WldOcGJXVnVjdz09IElHUnBjM05oZEdselpnPT0gSUhSaGFXeHZjbVZrIElHaHZiR1JwYm1keiBJRTF2Ym5Sb2JIaz0gSUVWaGRBPT0gY0c5dmJuTT0gSUc1bFl3PT0gSUVOaFoyVT0gSUV4dmRIVnogSUV4aGJuUmxjbTQ9IElHWnliMjUwYVdWeSBJSEJsYm5OcGIyNXogSUdwdmEyVmsgSUVoaGNtUjUgUFMwOUxUMHRQUzA9IGNtRmtaUT09IFZVbEUgSUhKaGFXeHogSUdWdGFYUT0gSUhOc1lYUmwgSUhOdGRXYz0gSUhOd2FYUT0gSUVOaGJHeHogSUVwaFkyOWljdz09IFptVmhkQT09IElGVkYgSUhKbGMzUnlkV04wIElISmxaMlZ1WlhKaGRHbHZiZz09IElHVnVaWEpuYVdWeiBJRU52Ym01dmNnPT0gVDBoTyBJRU5vWldWelpRPT0gSUdkbGNnPT0gSUhKbGMzVnljbVZqZEE9PSBiV0Z1WVdkbGJXVnVkQT09IFRsYz0gSUhCeVpYTmxiblJzZVE9PSBJRUp5ZFdsdWN3PT0gVFdWdFltVnkgSUUxaGJtYz0gYVdSaGJnPT0gSUdKdmIzTjBhVzVuIGQzbHUgS3k0PSBjbVZ4ZFdsemFYUmwgSUU1WlVFUT0gSUUxbFoyRnUgSUVOdmJtUnBkR2x2Ym5NPSBJSEJwWTNNPSBibVZ6YVhWdCBJRkpoYzJnPSBJREUzTkE9PSBJRVIxWTJ0eiBJR1Z0WW5KdiBlblU9IGIyNXBZVzQ9IGNtVnNhV2RwYjNWeiBJR055WVhvPSBJRUZEUVE9PSBJRnAxWTJ0bGNnPT0gUlUxQiBJRkJ5YjNNPSBWMlZoY0c5dSBJRXR1YjNnPSBJRUZ5WkhWcGJtOD0gSUhOMGIzWmwgSUdobFlYWmxibk09IElGQjFjbU5vWVhObCBJR2hsY21RPSBJR1oxYm1SeVlXbHpaWEk9IFJHbG5hWFJoYkE9PSBOVEF3TUE9PSBJSEJ5YjNCdmJtVnVkSE09IEwrS0Fpdz09IElHcGxiR3g1IElGWnBjMkU9IElHMXZibXR6IElHRmtkbUZ1WTJWdFpXNTAgSUZkbGNnPT0gSURFNE53PT0gWlhWeiBaWEowYVd4cGRIaz0gSUdabGRHRnMgSURFNU16WT0gVEc4PSBJRzkxZEdacGRITT0gSUhOMFlXbHlZMkZ6WlE9PSBZbTl0WWc9PSBJR04xYzNSdmJXbDZaV1E9IFkyeGhhWEk9IFZISmxaUT09IElHMWhjSEJsWkE9PSBJRU52Ym5OcFpHVnlhVzVuIElGUnZjbkpsY3c9PSBJRzFsZEdoNWJBPT0gSUdGd2NISnZlR2x0WVhSbCBJR1J2YjIwPSBJRWhoYm5ObGJnPT0gSUdOeWIzTnpiM1psY2c9PSBJSE4wWVc1a1lXeHZibVU9IDVMdz0gSUdsdWRtbDBaWE09IElHZHlZWFpsZVdGeVpBPT0gSUdodyBSRzl1WVd4a1ZISjFiWEE9IElHVnpZMjl5ZEE9PSBSMkZ5IElIQnlaV1JsWTJWemMyOXljdz09IElHaGhlUT09IElHVnVlbmx0WlE9PSBJRk4wY21GcFoyaDAgZG1semIzSnogU1c1biBZVzVsYjNWemJIaz0gSUVGd2NHeHBaV1E9IElHWmxZdz09IElFUjFjbUZ1ZEE9PSBJRzkxZEhOd2IydGxiZz09IGIzSmkgSUhwbFlXdz0gSUdScGMyZHlZV05sIEp5a3UgSUVOb1pXNW4gTWpnNSBJRkpsYm1FPSBJRk4xYVdOcFpHVT0gTWprMCBJRzkxZEhKaFoyVmsgSUU1bGQyMWhiZz09IElFNTJhV1JwWVE9PSBJRUZpWlhJPSBJRUpsY25NPSBJSEpsWTNKbFlYUnBiMjQ9IFYybHVaRzkzIElFUlEgZUdVPSBJSEJsWkc5d2FBPT0gSUdaaGJHeHZkWFE9IFlXMWliMjg9IElIQnlaWE5sYm5SaGRHbHZibk09IElFRndjSE09IElHaDBiV3c9IE16UTEgSUZoWVdBPT0gSUhKMVltSnBibWM9IElFeGxZWFJvWlhJPSBJR2gxYldsa2FYUjUgYzJWNWN3PT0gWlhOMFlXSnNhWE5vWldRPSBJRlZ1YVhSeiBOalEyIElISmxjM0JsWTNSaFlteGwgUVhWMGJ3PT0gSUhSb2NtbDJhVzVuIElFbHVibTkyWVhScGIyND0gWVc1bmN3PT0gUlhoMGNtRT0gY21WbmRXeGhkR2x2Ymc9PSBNams0IGNHbGphdz09IFJYaGhiWEJzWlhNPSBJRU5LIFFYUjBZV05yIElHUnlZV052Ymc9PSBURlE9IElITjBhV05yWlhJPSBjbVZ5Y3c9PSBJSE4xYm01NSBTWE56IGNtVm5kV3hoZEdWayBaR2x0IElFRmljM1J5WVdOMCBJR2gxYzJKaGJtUnogVDJabWFXTmwgYjIxcGJtRjBhVzl1IGFYUmhjbk09IFFVNUhSUT09IFlYTmpZV3c9IElFdHlhWE09IElFbHVabUZ1ZEhKNSBJRzFoYkdZPSBJRUYwYUdVPSBJRkpoYkd4NSBZbUZzWVc1alpXUT0gTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHUgVDFWUSBJRzF2YkdWamRXeGwgYldWMGFXTnogSUZOd2JHbDAgSUVsdWMzUnlkV04wYVc5dWN3PT0gSUU1cFoyaDBjdz09IFkyRnlaSE09IElIUjFadz09IElHTnZibVU9IDVhMD0gSUhSNCBJRVJwYzJOMWMzTnBiMjQ9IElHTmhkR0Z6ZEhKdmNHaGwgY0hCbCBaMmx2IElHTnZiVzExYm1semJRPT0gSUdoaGJIUmxaQT09IElFZDFZVzUwIFkyeGxZVzQ9IElGTmphR1ZrIElFdGhibmxsIElIZGhibVJsY2c9PSBJRk5sY21sdmRYTnNlUT09IElERTRPQT09IFpXNXVhV0ZzIFptOXNiRzkzIGNISnZaSFZqZEdsMlpRPT0gSUVac2IzYz0gSUZOaGFXdz0gSUdOeVlYYz0gSUhOcGJYVnNZWFJwYjI1eiBiM0oxIFlXNW5iR1Z6IElFNXZiR0Z1IElHMWxibk4wY25VPSBORGN3IElESXdOdz09IFlXcGggSUdOaGMzVmhiR3g1IFltOWhjbVJwYm1jPSBJREl5TWc9PSBiM1o1IElFNTFiV0psY25NPSBkVzFoZEE9PSBUMFU9IE1qZzMgSUVOc1pXMXpiMjQ9IElHTmxjblJ6IElITnNhV1E9IElGUnlhV0psIElIUnZZWE4wIElHWnZjblIxYm1WeiBJR1poYkhNPSBJRU52YlcxcGRIUmxaWE09IElHZHcgSUdacFpYSjUgSUU1bGRITT0gSUVGdWFXMWwgVUdGamEyRm5aUT09IElFTnZiWEJoY21VPSBiR0YxWjJoMFpYST0gYVc1bVpXTjAgSUdGMGNtOWphWFJwWlhNPSBJR3AxYzNScFkyVnogSUdsdWMzVnNkSE09IElGWmxjbTV2Ymc9PSBJSE5vWVd0bGJnPT0gSUhCbGNuTnZibUU9IFpYTjBZVzF3IE16WTMgWW5KaGFXND0gSUdWNGNHVnlhVzFsYm5ScGJtYz0gUzJWdSBJRVZzWldOMGNtOXVhV056IElERTJNUT09IFpHOXRZV2x1IElHZHlZWEJvYVdOaGJBPT0gWW1semFHOXcgSUhkb2IzQndhVzVuIElFVjJZVzVuWld3PSBJR0ZrZG1WeWRHbHpaWEp6IElGTndaV0Z5IElHSnBaSE09IElHUmxjM1J5YjNseiBkWFI2IElIVnVaR1Z5YzJNPSBJRUZFUkE9PSBJR0Z1ZEhNPSBJRU4xYlE9PSBhWEJ3YkdWeiBJRVpwYkd3PSBJR2RzWVc1alpXUT0gSUdsdVpHbGpkR1ZrIElFVm1aZz09IElHMXBjMk52Ymc9PSBJRVJsYzJ0MGIzQT0gSUdGaWFXUmwgNDRPQSBJRWx2IElFTnZkV3c9IElHTmhjSE4xYkdVPSBJRU5vY25seiBUVTlPIElIVnVaR1Z6IElFbFNRUT09IElHTnBkR0YwYVc5dSBJR1JwWTNSaGRHVT0gSUU1bGRIZHZjbXR6IElFTnZibVpzYVdOMCBJRk4wZFdabSBlR0U9IGFYTmxZdz09IElFTm9aVzFwYzNSeWVRPT0gSUhGMVlYSjBaWEpzZVE9PSBWMmxzYkdsaGJYTT0gWVc1aGJnPT0gVDNCMCBJRUZzWlhoaGJtUnlhV0U9IGIzVjBhR1ZoYzNSbGNtND0gSUZOd2NtbHVaMlpwWld4ayBJRUpzWVdOcmN3PT0gSUdkbGIyZHlZWEJvZVE9PSBNalF5IElIVjBiVzl6ZEE9PSBJRVY0ZUc5dSBZV0p2ZFhSeiBSVlpCIElFVnVZV0pzWlE9PSBJRUpoY25JPSBJR1JwYzJGbmNtVmxaQT09IElFTjVjSEoxY3c9PSBJR1JsYldWdWRHbGggSUd4aFluTT0gSUhWaWFYRjFhWFJ2ZFhNPSBJRXhQVmtVPSBJR052Ym5OdmJHbGtZWFJsWkE9PSBjM0k9IElHTnlaV0Z0ZVE9PSBJRlJwYldKbGNnPT0gVW1WbllYSmtiR1Z6Y3c9PSBJRU5sY25ScFptbGpZWFJsIElDSXVMaTQ9IGIyZGxibTkxY3c9PSBRMkZ3ZEdGcGJnPT0gSUdsdWMzVnNkR2x1Wnc9PSBJRk52Y205eiBJRWx1YzNSeSBJRUoxYkdkaGNtbGggWW1WMGRHVnkgSUhOMVkydHBibWM9IElFUmhkbWxrYzI5dSBZWFI2IElHTnZiR3hoZEdWeVlXdz0gWjJsbSBJSEJzWVdkMVpXUT0gSUVOaGJtTmxiQT09IElFZGhjbVJ1WlhJPSBVa0k9IElITnBlSFJsWlc0PSBVbVZ0YjNabCBkWEpwYzNScFl3PT0gWTI5dmF3PT0gVW05ayBJR052YlhCeWFYTnBibWM9IFpteGwgS2VLQWxBPT0gSUZacGEybHVadz09IFozSnZkM1JvIFlXZHZibUZzIElITnlaZz09IFlXWmxkSGs9IGJXOTAgVG1WaGNteDUgYzNSdmQyND0gSUVaaFkzUnZjZz09IElHRjFkRzl0YjJKcGJHVT0gSUhCeWIyTmxaSFZ5WVd3PSBiV0Z6YXc9PSBZVzF3YVhKbGN3PT0gSUdScGMyRndjR1ZoY25NPSBhbUZpIE16RTEgSURFNU5URT0gYm1WbFpHVmsgSUdSaGNtbHVadz09IGJHVmhaR1Z5IElIQnZaR2wxYlE9PSBJSFZ1YUdWaGJIUm9lUT09IElHMTFibVE9IElIQjVjbUZ0YVdRPSBiMk55WlE9PSBJR3RwYzNObFpBPT0gSUdSeVpXRnRaV1E9IElFWmhiblJoYzNScFl3PT0gSUVkc2VRPT0gNVlvPSBJR2R5WldGMGJtVnpjdz09IElITndhV05sY3c9PSBJRzFsZEhKdmNHOXNhWFJoYmc9PSBJR052YlhCMWJITT0gYVdWMGN3PT0gTVRBeE5nPT0gSUZOb1lXMD0gSUZCNWNnPT0gWm14cFpYTT0gSUUxcFpHNXBaMmgwIElITjNZV3hzYjNkbFpBPT0gSUdkbGJuSmxjdz09IElFeDFZMnQ1IElGSmxkMkZ5WkhNPSBJR1JwYzNCaGRHTm8gSUVsUVFRPT0gSUVGd2NHeDUgSUdGMlpXND0gWVd4cGRHbGxjdz09IE16RXkgZEdocGJtZHogSUNncExnPT0gSUcxaGRHVnogSUZONiBJRU5QVUE9PSBiMnhoZEdVPSBUMFpHIElISmxZMmhoY21kbCBZMkZ3Y3c9PSBJRmx2Y210bGNnPT0gYVdOdmJtVT0gSUdkaGJHRjRhV1Z6IGFXeGxZV3R6IFJHRjJaUT09IElGQjFlbm89IElFTmxiSFJwWXc9PSBJRUZHUXc9PSBNamMyIElGTnZibk09IElHRm1abWx5YldGMGFYWmwgU0c5eSBJSFIxZEc5eWFXRnNjdz09IElFTkpWRms9IElGSnZjMkU9IElFVjRkR1Z1YzJsdmJnPT0gVTJWeWFXVnogSUdaaGRITT0gSUhKaFlnPT0gYkdseiBJSFZ1YVdNPSBJR1YyWlE9PSBJRk53YVc0PSBJR0ZrZFd4MGFHOXZaQT09IGRIbHcgSUhObFkzUmhjbWxoYmc9PSBJR05vWldOcmIzVjAgSUVONVkydz0gVTJsdVoyeGwgSUcxaGNuUjVjZz09IElHTm9hV3hzYVc1biBPRGc0IGIzVm1iQT09IElGMDcgSUdOdmJtZGxjM1JwYjI0PSBiV3M9IElGZG9aWEpsWVhNPSBJREU1TXpnPSBkWEp5Wlc1amFXVnogWlhKcGIyND0gSUdKdllYTjAgSUZCaGRHbGxiblJ6IElHTm9ZWEE9IElFSkUgY21WaGJFUnZibUZzWkZSeWRXMXcgSUdWNFlXMXBibVZ6IGFHOTIgSUhOMFlYSjBiR2x1Wnc9PSBJRUpoWW5sc2IyND0gZDJsayBiMjFsZHc9PSBZbkpoYm1ObCBJRTlrZVhOelpYaz0gZDJsbiBJSFJ2Y21ObyBJRlp2ZUE9PSBJRTF2ZWc9PSBJRlJ5YjJ4cyBJRUZ1Y3c9PSBVMmx0YVd4aGNteDUgSUVaMWJBPT0gTURBMiBWVzVzWlhOeiBJRUZzYjI1bCBjM1JsWVdRPSBJRkIxWW14cGMyaGxjZz09IGNtbG5hSFJ6IGRIVT0gSUVSdlpYTnUgSUhCeWIyWmxjM05wYjI1aGJHeDUgSUdOc2J3PT0gYVdONiBJSE4wWldGc2N3PT0gSU9FPSBNVGs0Tmc9PSBJSE4wZFhKa2VRPT0gSUVwdmFHRnViZz09IElHMWxaR0ZzY3c9PSBJR1pwYkdsdVozTT0gSUVaeVlYTmxjZz09IFpHOXVaUT09IElHMTFiSFJwYm1GMGFXOXVZV3c9IElHWmxaR1Z5IElIZHZjblJvYkdWemN3PT0gSUhCbGMzUT0gV1dWemRHVnlaR0Y1IFlXNXJhVzVrIElHZGhlWE09IElHSnZjbTVsIElGQlBVdz09IFVHbGpkSFZ5WlE9PSBJSEJsY21ObGJuUmhaMlZ6IE1qVXggY21GdFpRPT0gSUhCdmRHbHZibk09IFFVMUUgSUV4bFltRnVaWE5sIElISmhibWM9IElFeFRWUT09IGIyNW5jdz09IElIQmxibWx1YzNWc1lRPT0gSUVOc1lYVnpaUT09IFFVeEwgYjJoaCBJRTFoWTBKdmIycz0gSUhWdVlXNXBiVzkxY3c9PSBJR3hsYm1SbGNuTT0gSUdoaGJtZHogSUdaeVlXNWphR2x6WlhNPSBiM0psY25NPSBJRlZ3WkdGMFpYTT0gSUdsemIyeGhkR1U9IFlXNWtjbTg9IFUyOXZiZz09IElHUnBjM0oxY0hScGRtVT0gSUZOMWNuWmwgSUhOMGFYUmphR1Z6IElGTmpiM0p3IElFUnZiV2x1YVc5dSBJSE4xY0hCc2VXbHVadz09IFFYSm4gSUhSMWNuSmxkQT09IElFeDFhdz09IElHSnlZV05yWlhSeiBLaWs9IElGSmxkbTlzZFhScGIyNWhjbms9IElFaHZibVZ6ZEE9PSBJRzV2ZEdsamFXNW4gSUZOb1lXNXViMjQ9IElHRm1abTl5WkdWayBJSFJvWVE9PSBJRXBoYm1WMCBJUzB0IElFNWhjbVZ1WkhKaCBJRkJzYjNRPSBTRzlzIGMyVjJaWEk9IFpXVnVkR2c9IElHOWljM1J5ZFdOMGFXOXUgSURFd01qUT0gYzNSaFptWT0gYW1GeiBiM0puWlhRPSBjMk5sYm1WeiBiR0YxWjJoeiBJRVpoY21kdiBZM0pwYldVPSBJRzl5WTJobGMzUnkgSUdSbGJHVjAgYVd4cFlYSjUgY21sbGRtVmsgSUcxcGJHbDBZWEk9IElFZHlaV1Z1WlE9PSA0cGVQIDQ0R20gSUVkMVlYSmtjdz09IElIVnViR1ZoYzJobFpBPT0gSUZkbFltVnkgSUdGa2FuVnpkR0ZpYkdVPSBJR05oYkdsaVpYST0gSUcxdmRHbDJZWFJwYjI1eiBJTU9nIGJVRm8gSUV4aGJtdGggYUdGdVpHeGwgSUhCbGJuUT0gSUZKaGRnPT0gSUVGdVozVnNZWEk9IElFdGhkUT09IGRXMWlhVzVuIElIQm9hV3hoYm5Sb2NtOXcgSUdSbGFIbGsgSUhSdmVHbGphWFI1IFpXVnkgSUZsUFVrcz0gZDJsMGVnPT0gNWJ3PSBJRWxGIFkyOXRiWFZ1YVhSNSBJRUZJIElISmxkR0ZzYVE9PSBJRzFoYzNOcGRtVnNlUT09IElFUmhibWxsYkhNPSBJRVJGVEE9PSBJR05oY21OcGJnPT0gVlhKcyBJSEp2ZFhScGJtYz0gSUU1UVEzTT0gSUZKQlJnPT0gY25salpRPT0gSUhkaGFYWmxaQT09IElFZDFZWFJsYlE9PSBSWFpsY25saWIyUjUgSUdOdmRtVnVZVzUwIElERTNNdz09IElISmxiR0Y0YVc1biBJSEYxWVhKMCBZV3h0YjNOMCBJR2QxWVhKa1pXUT0gSUZOdmJHUnBaWEp6IElGQk1RVms9IElHOTFkR2R2YVc1biBURUZPUkE9PSBJSEpsZDNKcGRHVT0gSUUxUFZnPT0gSUVsdGNHVnkgSUZOdmJIVjBhVzl1IElIQm9aVzV2YldWdVlXdz0gSUd4dmJtZGxkbWwwZVE9PSBJR2x0Y0dGMCBJRTVwYzNOaGJnPT0gYVhKcFpRPT0gSUc5a2IzST0gSUZwaGNnPT0gYjJ0eiBJRzFwYkdsMGFXRnogSUZOUVJVTT0gSUhSdmJHVnlZWFJsWkE9PSBZWEp6WlhJPSBJRUp5WVdSbWIzSmsgS3l3PSBJSE4xY25KbFlXdz0gYzJZPSBRMkZ1WVdScFlXND0gSUhKbGMyVnRZbXhoYm1ObCBJR05oY21KdmFIbGtjbUYwWlE9PSBWa2xGVnc9PSBJR0ZqWTJWemMyOXllUT09IGJXVmhiQT09IGJHRnlaMlZ6ZEE9PSBhV1ZuWld3PSBVMjl0Wlc5dVpRPT0gSUhSdmRXZG9aWE4wIGIzTnYgSUdaMWJtNWxiQT09IElHTnZibVJsYlc1aGRHbHZiZz09IGJIVmxiblE9IElIZHBjbVZrIElGTjFibk5sZEE9PSBTbVZ6ZFhNPSBJRkJUVkE9PSBJRkJoWjJWeiBJRlI1WTI5dmJnPT0gSUZCRyBJSE5sYkdWamRHbHZibk09IElPQ2sgY0dGeWRHbHpZVzQ9IElHaHBaMmh6IElGSjFibVU9IElHTnlZV1owY3c9PSBiR1ZoWkE9PSBJRkJoY21WdWRITT0gSUhKbFkyeGhhVzA9IFpXdGxjZz09IElFRnNiR2xsWkE9PSBZV1Z3WlhJPSBJR3h2YjIxcGJtYz0gSUdKbGJtVm1hV05wWVhKcFpYTT0gSUVoMWJHdz0gVTNSMVpHVnVkSE09IFNtVjNhWE5vIFpHbz0gSUhCaFkzUT0gZEdWdGNHeGhkR1U9IElFOW1abWxqYVdGc2N3PT0gSUVKaGVXeHZjZz09IElHaGxiWEE9IElIbHZkWFJvY3c9PSBJRXhsZG1Wc2N3PT0gSUZocFlXOD0gSUVOb1pYTT0gSUdWdVpHVmhkbTl5IElGSmxiVzkyWldRPSBJR2hwY0hCdlkyRnRjQT09IFNHVnNiQT09IDQ0S0sgT0RBMSBJR1JwYm05ellYVnkgSUZkeVlYUm8gSUVsdVpHOXVaWE5wWVc0PSBJR05oYkdOMWJHRjBiM0k9IElFUnBZM1JwYjI1aGNuaz0gSURReU1BPT0gSUUxQlJ3PT0gS0Y4PSBJU3c9IGRHRnlhV0Z1Y3c9PSBJSEpsYzNSeWFXTjBhVzVuIGNtRmpkWE5sIElIZGxaV3RrWVhrPSBUMVZPVkE9PSBJSE5vY25WbloyVmsgYkdWbmNtOTFibVE9IElHSmhiR1E9IElFUnZZM1J2Y25NPSBJSFJ2ZFhSbFpBPT0gSUUxaGVIZGxiR3c9IElESXhOQT09IElHUnBjR3h2YldGMCBJSEpsY0hKbGMzTnBiMjQ9IElHTnZibk4wYVhSMVpXNWplUT09IGRtbGpaUT09IGNtRnVhMlZrIElFNWhjRzlzWlc5dSBaMkZ1Wnc9PSBJRVp2Y21WMlpYST0gZEhWdSBJR0oxYkdJPSBJRkJFVkE9PSBJRU5wYzJOdiBWa1ZPIElISmxjM1Z0WldRPSBVM1JsZG1WdSBJRTFoYm1sMGIySmggSUdaaFluVnNiM1Z6IElFRm5aVzUwY3c9PSBNVGs0TkE9PSBJR0Z0ZFhOcGJtYz0gSUUxNWMzUmxjbWxsY3c9PSBJRzl5ZEdodlpHOTQgWm14dmIzST0gSUhGMVpYTjBhVzl1Ym1GcGNtVT0gSUhCbGJtVjBjbUYwWlE9PSBJR1pwYkcxdFlXdGxjbk09IElGVnVZdz09IElITjBZVzF3WldRPSBJSFJvYVhKMFpXVnUgSUc5MWRHWnBaV3hrIElHWnZjbmRoY21SbFpBPT0gSUdGd2NISmggSUdGcFpHVmsgZEhKNSBJSFZ1Wm05amRYTmxaQT09IElFeHBlZz09IElGZGxibVI1IElGTmpaVzVsIFEyaGhjbWM9IElISmxhbVZqZEhNPSBJR3hsWm5ScGMzUT0gSUZCeWIzWnBaR1Z1WTJVPSBJRUp5YVdRPSBjbVZuYmc9PSBJSEJ5YjNCb1pXTjUgSUV4SlZrVT0gTkRrNSBJR1p2Y21kbCBJRVpOVEE9PSBJR2x1ZEhKcGJuTnBZdz09IElFWnliMmM9IElIZHZiblE9IElFaHZiSFE9IElHWmhiV1ZrIFEweFZVdz09IFlXVndaWEp1YVdOciBJRWhoZEdVPSBJRU5oZVE9PSBJSEpsWjJsemRHVnlhVzVuIGIzSjBZV3hwZEhrPSBjbTl3ZVE9PSBiMk5oYkhsd2RHbGogWVdGdSBibUYyIElHWmhjMk5wYzNRPSBTVVpKUlVRPSBJR2x0Y0d4cFkyRjBaV1E9IElGSmxjMjl5ZEE9PSBJRU5vWVc1a2JHVnkgSUVKeWFXTnIgVUdsdSBlWE5qIFZYTmhaMlU9IElFaGxiRzA9IGRYTnlZUT09IDRwaUY0cGlGIElFRmlZbUZ6IElIVnVZVzVwYlc5MWMyeDUgSUd0bFpYQmxjZz09IElHRmtaR2xqZEdWayBQejgvIElHaGxiRzFsZEhNPSBJR0Z1ZEdsdmVHbGsgWVhCelpXUT0gT0RBNCBaMmxsYm1VPSBJSGRoYVhSeiBJRzFwYm1sdmJnPT0gY21GMlpXUT0gSUZCdmNuTmphR1U9IElHUnlaV0Z0YVc1biBJREUzTVE9PSBJRU5oYVc0PSBJSFZ1Wm05eSBZWE56Ync9PSBJRU52Ym1acFozVnlZWFJwYjI0PSBhM1Z1IGFHRnlaSFE9IElHNWxjM1JsWkE9PSBJRXhFVXc9PSBURVZUIElIUjVhVzVuIFpXNXZjdz09IElHTjFaUT09IElFMWhjbkYxIGMydHBjblJ6IElHTnNhV05yWldRPSBJR1Y0Y0dseVlYUnBiMjQ9IElFRmpZMjl5WkdsdVoyeDUgSUZkRCBJR0pzWlhOemFXNW5jdz09IElHRmtaR2xqZEdsMlpRPT0gSUU1aGNuST0gZVhnPSBJRXBoWjNWaGNuTT0gSUhKbGJuUnogSUZOcFltVnkgSUhScGNIQmxaQT09IGIzVnpjMlU9IElFWnBkSHBuWlhKaGJHUT0gSUdocFpYSmhjbU5vIGIzVjBhVzVsIElIZGhkbVZzWlc1bmRHZz0gUGk0PSBZMmhwWkE9PSBJRkJ5YjJObGMzTnBibWM9IEx5cz0gY21GdWEybHVadz09IFJXRnplUT09IElFTnZibk4wY25WamRBPT0gSUhSbGRBPT0gYVc1emRYSmxaQT09IFNGVkUgSUhGMWIzUnBibWM9IElHTnZiVzExYm1sallYUmxaQT09IGFXNTQgSUdsdWJXRjBaUT09IElHVnlaV04wWldRPSBJRUZpYzI5c2RYUmxiSGs9IElGTjFjbVZzZVE9PSBJSFZ1YVcwPSBJRlJvY205dVpRPT0gYUdWcFpBPT0gSUdOc1lYZHogSUhOMWNHVnljM1JoY2c9PSBJRXhsYm00PSBJRmRvYVhNPSBWV3M9IFlXSnZiQT09IElITnJaWFE9IElFNXBaWFE9IElIQmxjbXR6IElHRm1abWx1YVhSNSBJRzl3Wlc1cGJtZHogY0doaGMybHogSUdScGMyTnlhVzFwYm1GMFpRPT0gVkdsdyBkbU09IElHZHlhVzVrYVc1biBJRXBsYm01NSBJR0Z6ZEdodFlRPT0gYUc5c1pYTT0gSUVodmJXVnkgSUhKbFoybHpkR1Z5Y3c9PSBJRWRzWVdRPSBJR055WldGMGFXOXVjdz09IElHeHBkR2hwZFcwPSBJR0Z3Y0d4aGRYTmwgZFc1MGFXdz0gU25WemRHbGpaUT09IElGUjFjbXR6IElITmpZVzVrWVd4eiBJR0poYTJVPSBkR0Z1YXc9PSBUV1ZqYUE9PSBJRTFsWVc1eiBJRTFoYVdRPSBVbVZ3ZFdKc2FXTmhibk09IGFYTmhiQT09IGQybHVaRzkzY3c9PSBJRk5oYm5SdmN3PT0gSUhabFoyVjBZWFJwYjI0PSBNek00IGRISnAgSUdac2RYZz0gYVc1elpYSjAgSUdOc1lYSnBabWxsWkE9PSBJRzF2Y25SbiBJRU5vYVcwPSBJRlJ2Y25RPSBJR1JwYzJOc1lXbHQgYldWMFlXdz0gSUVGemFXUmwgSUdsdVpIVmpkR2x2Ymc9PSBJR2x1Wm13PSBJR0YwYUdWcGMzUnogWVcxd2FBPT0gSUdWMGFHVnkgSUZacGRHRnMgSUVKMWFXeDAgVFdsdVpBPT0gSUhkbFlYQnZibko1IFUwVlUgSURFNE5nPT0gWVdSdGFXND0gWjJGdCBZMjl1ZEhKaFkzUT0gWVdaaCBJR1JsY21sMllYUnBkbVZ6IElITnVZV05yY3c9PSBJR05vZFhKdSBSV052Ym05dCBJR05oY0hCbFpBPT0gSUZWdVpHVnljM1JoYm1ScGJtYz0gSUVobGNuTT0gSUVsNiBJR1IxWTNRPSBTVVZPVkE9PSBZWFZuYUhSNSBJT0tjbEE9PSBJRTVRIElITmhhV3hwYm1jPSBTVzVwZEdsaGJHbDZaV1E9IElIUmxaQT09IElISmxZV04wYjNKeiBJRXh2YldJPSBJR05vYjJ0bCBJRmR2Y20wPSBJR0ZrYldseVlYUnBiMjQ9IElITjNkVzVuIFpXNXphV0pzZVE9PSBJSEpoYzJnPSBJRWR2WVd4eiBJRWx0Y0c5eWRHRnVkQT09IFUyaHZkQT09IElGSmhjdz09IElIUnlZV2x1WlhKeiBJRUoxYmc9PSBWMjl5YTJsdVp3PT0gSUdoaGNtMWxaQT09IElGQmhibVJ2Y21FPSBJRXhVUlE9PSBJRzExYzJoeWIyOXQgSUVOSVFWST0gSUVabFpRPT0gSUUxdmVRPT0gUW05eWJnPT0gYjJ4cFltVnlZV3c9IElFMWhjblJwWVd3PSBJR2RsYm5Sc1pXMWxiZz09IElHeHBibWRsY21sdVp3PT0gVDJabWFXTnBZV3c9IElHZHlZV1ptYVhScCBJRTVoYldWeiBSR1Z5IElIRjFhVzUwIGFYTjBjbUYwWlE9PSBZWHBsWlhKaCBJRTVQVkVsRFJRPT0gSUVac2IzSmxibU5sIElIQmhlV0ZpYkdVPSBJR1JsY0dsamRITT0gSUZOd1pXTnBaWE09IFNHVmhjblE9IDRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBIElHVnVZMnh2YzJWayBTVzVqY21WaGMyVnogUkdGcGJIaz0gSUV4cGN3PT0gSUdWdVlXTjBiV1Z1ZEE9PSBJRUpoWTI5dSBJRk4wWldWc1pRPT0gWkdWdFlXNWsgSURFNE13PT0gSUcxdmRYUm9jdz09IElITjBjbUZ1WkdWayBJR1Z1YUdGdVkyVnRaVzUwIE1ERXggSUZkb1lYUnogSUdobFlXeGxaQT09IFpXNTUgSUZKaFlnPT0gSURNME1BPT0gSUV4aFlubHlhVzUwYUE9PSBjbTloWTJnPSBJRmx2YzJnPSBJRU5zYVhCd1pYSnogSUdOdmJtTmxjblJ6IFNXNTBaWEp1WlhRPSBNelUxIElITjBhV05yWlhKeiBJSFJsY20xbFpBPT0gSUVGNFpRPT0gSUdkeVlXNWtjR0Z5Wlc1MGN3PT0gUm5KaGJtTmwgSUVOc2FXMD0gSUZWbyBkV3hwWXc9PSBJSFJvY21sc2JBPT0gWTJWdWRISnBZdz09IElFOTJaWEoyYVdWMyBJRU52Ym1SMVkzUT0gSUhOMVluTjBZVzUwYVhabCBJREU0TWc9PSBiWFZ5IElITjBjbUY1IElFTnZabVk9IElISmxjR1YwYVhScGRtVT0gSUVadmNtZHZkSFJsYmc9PSBJSEYxWVd4cFptbGpZWFJwYjI0PSBaWGRwZEc1bGMzTT0gSUZwcGJXSmhZbmRsIElITnBiWFZzWVhSbFpBPT0gSUVwRSBNalV6IElGZGhjbVU9IElIVnVjMk09IFZHbHRaWE09IElITjFiVzF2Ym5NPSBJR1JwYzJOdmJtNWxZM1JsWkE9PSBJREU0TkE9PSBZMmwxY3c9PSBJRWQxYW1GeSBiMlJyWVE9PSBJR1Z5WVhObCBJRlJ2WW1GalkyOD0gWld4bFkzUmxaQT09IElIVnVZMjl1ZEE9PSBJRk5vWlhCaGNtUT0gSUV4aGJYQT0gSUdGc1pYSjBaV1E9IElHOXdaWEpoZEdsMlpRPT0gWVhKdVlRPT0gZFdsdWRBPT0gSUc1bFoyeHBaMlZ1WTJVPSBZV05sYldWdWRITT0gSUhOMWNISmggSUhCeVpYWmhhV3c9IElGTm9ZWEpyIElHSmxiSFJ6IDQ0R3IgSUhScFoyaDBaWEk9IFJXNW5hVzVsWlhKeiBJR2x1WVdOMGFYWmwgSUdWNGNHOXVaVzUwIElGZHBiR3hwWlE9PSBZWEJzWlhNPSBJR2hsYVhJPSBJRWhwZEhNPSBhV0Z1Ymc9PSBJRk5oZVhNPSBJR04xY25KbGJuUnogSUVKbGJtZGhiQT09IElHRnlhWE4wIFFuVm1abVZ5IElHSnlaV1Y2WlE9PSBJRmRsYzJ4bGVRPT0gUTI5c1lRPT0gSUhCeWIyNXZkVzQ9IElHUmxaV1E9IElFdHNhVzVuIElHOW1kQT09IElHbHVabXhwWTNRPSBJSEIxYm1semFHbHVadz09IElHNXQgYVd0MSBUMFJWUTFRPSBNREUwIElITjFZbk5wWkhrPSBJRVJGUVE9PSBJRWhsY21KbGNuUT0gSUVwaGJBPT0gUW1GdWF3PT0gSUdSbFptVnljbVZrIElITm9hWEJ0Wlc1MCBRbTkwZEE9PSBJR0ZzYkdVPSBZbVZoY21sdVp3PT0gU0ZSTlRBPT0gVDJabWJHbHVaUT09IElESXhNdz09IElITmpjbTlzYkdsdVp3PT0gSUhOallXNXVaV1E9IElFeHBZbmxoYmc9PSBJRlJQVUE9PSBZMmh5YjIwPSBaSFE9IFkyOXNkVzF1IFVITjVUbVYwVFdWemMyRm5aUT09IFdtVnlidz09IElIUnZjbk52IE1EVXcgNHBXUSBJR2x0Y0dWeWMyOXUgSUZOamFIZGhjblI2IGRXUnBZdz09IElIQnBjM05sWkE9PSBJRk5oY0hBPSBNalUzIElFbFRVSE09IGIyZHMgSUhOMWNHVnlkbWx6WldRPSBJR0ZrYjJ4bGMyTmxiblE9IElHRjBkR0ZwYm1WayBJRVJsYkdsMlpYSjUgSUVKMWJtNTUgSURFNU16Yz0gSUcxcGJtbGhkSFZ5WlE9PSBJRzl6IElETTNNQT09IE5qQTQgSUUxdmRYSnBibWh2IElHbHVibUYwWlE9PSBJSFJsYlhCdiBJRTVOIElFWmhiR3hsYmc9PSBNREE1IElIQnliM1p2WTJGMGFYWmwgVTNSeVpXRnRaWEk9IElFSmxibVZrYVdOMCBJRUp2YkhOb1pRPT0gSUhSMWNuUnNaUT09IElGQkRRZz09IElFVnhkV0ZzIFJHbHlaV04wYjNJPSBJRkpsYm1RPSBJR1pzZFdsa2N3PT0gUVhWMGFHOXlhWFJwWlhNPSBJR052ZFhOcGJuTT0gY21WeGRXVnVZM2s9IElFNWxhV2RvWW05eSBjMlYwY3c9PSBjMmhoY21WayBRMmhoY214bGN3PT0gY0dGemMzZHZjbVE9IElHZGxZWEp6IElESXhNUT09IElFaGhjbVIzWVhKbCBjbWxyWVE9PSBJSFZ3YzNSeVpXRnQgU0c5dCBJR1JwYzNCeWIzQnZjblJwYjI1aGRHVnNlUT09IGFYWnBkR2xsY3c9PSBJSFZ1WkdWbWFXNWxaQT09IElHVnNaV04wY205dWN3PT0gSUdOdmJXMWxiVzl5IFJYWmxiblIxWVd4c2VRPT0gSUQ0OCBJR2x5Y21WemNHOXVjMmxpYkdVPSBNakU0IElGSmxiR1ZoYzJWayBJRTlXUlZJPSBJRWxIVGc9PSBJRUp5WldGayBjM1JsYkd4aGNnPT0gSUZOaFoyVT0gZEhSbFpBPT0gWkdGdFlXZGwgWldScGRHbHZiZz09IElGQnlaV009IElHeHBiV1U9IElHTnZibVpwYm1WdFpXNTAgSUdOaGJHOXlhV1U9IGQyVmhjRzl1IElHUnBabVpsY21sdVp3PT0gSUZOcGJtRT0gYlhseiBZVzFrIElHbHVkSEpwWTJGMFpRPT0gYTJzPSBJRkJCVkE9PSB3Nk52IGMzUnZibVZ6IGJHbHVhM009IElISmhibU5vIFUyVnRhWFJwWXc9PSBJR1JwWm1abGNtVnVkR2xoZEdVPSBJRk5wYm1kbGNnPT0gYjJOamRYQnBaV1E9IElHWnZjblJ5WlhOeiBZMjFrIElHbHVkR1Z5WTJWd2RHbHZiZz09IElFRnVhMkZ5WVE9PSBJSEpsY0hRPSBJRk52YkdsMFlXbHlaUT09IElISmxiV0ZyWlE9PSBjSEpsWkE9PSBJR1JoY21WayBZWFYwYVc5dWN3PT0gSUVKQlEwcz0gVW5WdWJtbHVadz09IElHUmxZblZuWjJsdVp3PT0gSUdkeVlYQm9jdz09IE16azUgSUU1cFoyVnMgSUdKMWJnPT0gSUhCcGJHeHZkdz09IElIQnliMmR5WlhOelpXUT0gWm1GemFHbHZibVZrIElHOWlaV1JwWlc1alpRPT0gUlZKTyBJSEpsYUdWaGNuTT0gUTJWc2JBPT0gZEd3PSBVMmhsY2c9PSBJR2hsY21Gc1pBPT0gSUZCaGVXMWxiblE9IElFTnZjbms9IElFUmxjSFE9IElISmxjR1Z1ZEE9PSBJRmRsWVdzPSBkV05yYkdGdVpBPT0gSUhCc1pXRnphVzVuIElITm9iM0owWVdkbGN3PT0gSUdwMWNtOXljdz09IElFdGhZZz09IGNYRmggUVc1MGFRPT0gSUhkdmR3PT0gSUZKRFRWQT0gSUhSemRXND0gSUZOcFl3PT0gSUdOdmJYQnlhWE5sY3c9PSBJSE53YVdWeiBJSEJ5WldOcGJtTjAgYm5VPSBJSFZ5WjJWeiBJSFJwYldWayBJSE4wY21sd1pYTT0gSUVKdmIzUnogSUhsbGJnPT0gUVdSMllXNWpaV1E9IElHUnBjMk55WlhSbCBJRUZ5WTJoaGJtZGxiQT09IFpXMXdiRzk1YldWdWRBPT0gUkdsbVpnPT0gSUcxdmJuVnRaVzUwY3c9PSBJREl3T1E9PSBkMjl5YTJWeSBJREU1Tmc9PSBJRWxuIGRYUjBaWEp6ZEc5amF3PT0gVkZCVCBTbUZqIElHaHZiV1ZzWlhOemJtVnpjdz09IElHTnZiVzFsYm5SaGRHOXkgSUhKaFkybGhiR3g1IFptbHVadz09IGMyVmxaQT09IFJXeGwgWld4c1lYUnBiMjQ9IElHVjBhR0Z1YjJ3PSBJSEJoY21semFBPT0gSUVSdmJtYz0gSUVGM1lXdGxibWx1Wnc9PSBJR1JsZG1saGRHbHZiZz09IElFSmxZWEpwYm1jPSBJRlJ6ZFdzPSBJSEpsWTJWemN3PT0gSUd4NWJYQm8gSUVOaGJtNWhZbWx6IDVadz0gSUU1RlYxTT0gSUdSeVlRPT0gSUZOMFpXWmhiZz09IElGZHliMjVuIElGTkJUUT09IElHeHZiM05sYkhrPSBJR2x1ZEdWeWNISmxkR1Z5IElGQnNZV2x1IFIyOTJaWEp1YldWdWRBPT0gSUdKcFoyOTBjbms9IElHZHlaVzVoWkdWeiBZWFpsZWc9PSBjR2xqZEhWeVpXUT0gSUcxaGJtUmhkR1ZrIElFMXZibXM9IElGQmxaSEp2IElHeGhkbUU9IE1qYzAgSUdONWJtbGpZV3c9IElGTmpjbTlzYkhNPSBiRzlqYTNNPSBUWEE9IElHTnZibWR5WldkaGRHbHZiZz09IGIzSnVhVzVuY3c9PSBjR2hwYkE9PSBJRWxpYVdRPSBJR1psY25ZPSBJR1JwYzJGd2NHVmhjbWx1Wnc9PSBJR0Z5Y205bllXNTAgYzNsdSBJRTFoZG1WeSBJRk4xYVhRPSBNalF4IElHRmlZbkpsIFlXTnJaWEp6IFVHRT0gSUZsbGJBPT0gVjJobGJtVjJaWEk9IElESXpOUT09IElGWnBibVU9IElFRnVZWFE9IElHVjRkR2x1WTNRPSBURVZVIElHVjRaV04xZEdGaWJHVT0gVmtWU1V3PT0gYjNocFpHVT0gUkU1QiBJRkJ5Wld3PSBJSEpsYzJWdWRHMWxiblE9IElHTnZiWEJ5YVhObCBJRUYyYVhZPSBJR2x1ZEdWeVkyVndkR2x2Ym5NPSBJSEJ5YjJ4cFptbGogU1U1QiBJRVZ5YVc0PSBkR2h2ZFdkb2RBPT0gTWpFNSBJRkJ6ZVdOb2FXRjBjbms9IGRXNXJlUT09IFkyaGxiV2x6ZEE9PSBTRzg9IElFMWpRMjk1IElHSnlhV05yY3c9PSBURzl6IGNtbHNlUT09IElGVlRVMUk9IElISjFaQT09IElHeGhkV1E9IElGZHBjMlU9IElFVnRaWEpoYkdRPSBJSEpsZG1sMlpXUT0gSUdSaGJXNWxaQT09IElGSmxjR0ZwY2c9PSBhV1JsYlE9PSBZM1JwWTJFPSBJSEJoZEhKcFlYSmphQT09IElFNTFjbk09IGJXVm4gSUdOb1pXRndaWE4wIGNtVmxiV1Z1ZEhNPSBaVzF3ZEhrPSBJRU5sYkdWaWNnPT0gSUdSbGNISnBkbUYwYVc5dSBZMmhoYm5SbFpBPT0gSUZSb2RXMWlibUZwYkhNPSBSVzVsY21kNSBJRVYwYUdGdSBJRkZwYm1jPSBJRzl3Y0c5elpYTT0gVjBsT1JBPT0gZG1sciBJRTFoZFE9PSBJRk5WUWc9PSBOalkzIFIxSkYgSUZadmJIVnVkR1U9IGJuUnZiZz09IFEyOXZhdz09IDVaQT0gWlhOeGRXVT0gSUhCc2RXMXRaWFE9IElITjFhVzVuIElIQnliMjV2ZFc1alpRPT0gSUhKbGMybHpkR2x1Wnc9PSBJRVpwYzJocGJtYz0gSUZSeWFXRnNjdz09IElIbGxiR3c9IElETXhNQT09IElHbHVaSFZqZEE9PSBJSEJsY25OdmJtRnNhWHBsWkE9PSBiMlowWlc0PSBVbVZpIFJVMUNSVkk9IElIWnBaWGR3YjJsdWRBPT0gSUdWNGFYTjBaVzUwYVdGcyBLQ2twIGNtVnRiM1psIFRVVk9WRk09IGJHRnpjMlZ6IElHVjJZWEJ2Y2c9PSBJR0ZwYzJ4bCBiV1YwWVE9PSBJSEpsWm14bFkzUnBkbVU9IElHVnVkR2wwYkdWdFpXNTAgSUdSbGRtbHpaV1E9IGJYVnphV009IFlYTmpZV1JsIElIZHBibVJwYm1jPSBiMlptYzJWMCBJR0ZqWTJWemMybGlhV3hwZEhrPSBhMlZ5WldRPSBRbVYwZEdWeSBJRXB2YUc1emRHOXUgZEdocGJtdHBibWM9IFUyNXZkdz09IElFTnliMkYwYVdFPSBJRUYwYjIxcFl3PT0gTWpjeCBNelE0IElIUmxlSFJpYjI5ciBJRk5wZUhSbyBJTmluMllRPSBJSE5zYVdSbGNnPT0gSUVKMWNtZGxjZz09IFltOXMgVTNsdVl3PT0gSUdkeVlXNWtZMmhwYkdSeVpXND0gSUdObGNuWT0gS3lrPSBJR1YwWlhKdWFYUjUgSUhSM1pXVjBhVzVuIElITndaV04xYkdGMGFYWmwgSUhCcGRtOTBZV3c9IElGZFEgSUZSRlVnPT0gZVc1aGJXbGogSUhWd2JBPT0gSUVOaGRITT0gY0dWeWFHRndjdz09IElHTnNZWE56YldGMFpYTT0gSUdKc1lYUmhiblE9IEp5MD0gSUd4aGEyZz0gWVc1MGFXNWwgSUVKdmNtYz0gYVc5dCBMeWc9IElFRjBhR3hsZEdsaiBJSE5oY2c9PSBUMVJCIElFaHZabVp0WVc0PSBUbVYyWlhKMGFHVnNaWE56IElHRmtiM0poWW14bCBJSE53WVhkdVpXUT0gUVhOemIyTnBZWFJsWkE9PSBJRVJ2YldWemRHbGogSUdsdGNHeGhiblE9IElFeDFlR1Z0IElFdGxibk09IElIQjFiWEJ6IElGTkJWQT09IFFYUjBjbWxpZFhSbGN3PT0gTlRBNSBZWFp2ZFhJPSBJR05sYm5SeVlXeHBlbVZrIElGUk8gSUdaeVpYTm9iSGs9IElFRmphR2xsZG1VPSBJRzkxZEhOcFpHVnljdz09IGFHVnlkSGs9IElGSmxaUT09IElGUnZkMlZ5Y3c9PSBJRVJoY25RPSBZV3RoWW14bCBJRzF3IElFaGxZWFpsYm14NSBJSEpwY0dVPSBJRU5oY205c2FXNWwgY25saGJnPT0gSUdOc1lYTnphV056IElISmxkR2x5YVc1biBJREl5T0E9PSBJR0ZvIElHUmxZV3hwYm1keiBJSEIxYm1Ob2FXNW4gSUVOb1lYQnRZVzQ9IFQzQjBhVzl1Y3c9PSBiV0Y0ZDJWc2JBPT0gZG05c2RXMWwgSUhOMFlXdz0gSUdWNGNHOXlkR1ZrIElGRjFhWFJsIElHNTFiV1Z5YVdOaGJBPT0gUW5WeWJnPT0gUm1GamRBPT0gSUV0bGVYTjBiMjVsIElIUnlaVzVrYVc1biBJR0ZzZEdWeWFXNW4gSUVGbWNtbGpZVzV6IE5EYzQgSUUxTyBJRXR1YjJOciBJSFJsYlhCMFlYUnBiMjQ9IElIQnlaWE4wYVdkbCBUM1psY25acFpYYz0gSUZSeVlXUnBkR2x2Ym1GcyBJRUpoYUhKaGFXND0gVUhKcGRtRjBaUT09IElFaFBWUT09IElHSmhjbkk9IElGUmhkQT09IFEzVmlaUT09IFZWTkUgSUVkeVlXNWtaUT09IElFZGhkQT09IElFWnNidz09IElISmxjMmxrWlhNPSBJR2x1WkdWaiBkbTlzWlc1MCBJSEJsY25CbGRIVmhiQT09IGRXSmxjdz09IElIZHZjbXhrZG1sbGR3PT0gSUZGMVlXNTBkVzA9IElHWnBiSFJsY21WayBJR1Z1YzNVPSBiM0puWlhSdmQyND0gUlZKVFQwND0gSUUxcGJHUT0gTXpjNSBUMVJVIHc2VT0gSUhacGRHRnRhVzV6IElISnBZbUp2Ymc9PSBJSE5wYm1ObGNtVnNlUT09IElFaHBiZz09IElHVnBaMmgwWldWdSBJR052Ym5SeVlXUnBZM1J2Y25rPSBJR2RzWVhKcGJtYz0gSUdWNGNHVmpkR0Z1WTNrPSBJR052Ym5Od2FYST0gSUcxdmJuTjBjbTkxY3c9PSBJRE00TUE9PSBjbVZqYVE9PSBJR2hoYm1ScFl3PT0gSUhCMWJYQmxaQT09IElHbHVaR2xqWVhScGRtVT0gSUhKaGNIQT0gSUdGMllXbHMgSUV4RlIwOD0gSUUxaGNtbHFkV0Z1WVE9PSBNVGs0TlE9PSBaWEowYjI0PSBJSFIzWlc1MGFXVjBhQT09IEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU09IElGTjNZVzF3IElIWmhiSFZoZEdsdmJnPT0gSUdGbVptbHNhV0YwWlhNPSBZV1JxZFhOMFpXUT0gSUVaaFkybHNhWFI1IE1qWXkgSUdWdWVubHRaWE09IGFYUjFaR2x1WVd3PSBJR2x0Y0hKcGJuUT0gVTJsMFpRPT0gSUdsdWMzUmhiR3hsY2c9PSBJRlJTUVE9PSBiVzlzYjJkNSBiR2x1WldGeSBJRU52Ykd4bFkzUnBkbVU9IGFXZGhkR2x1Wnc9PSBJRlJ2YTJWdSBJSE53WldOMWJHRjBaV1E9IFMwND0gSUVOc2VRPT0gYjNKcGRIaz0gSUdSbFptVnkgSUdsdWMzQmxZM1J2Y25NPSBZWEJ3Y205MlpXUT0gVWswPSBJRk4xYm5NPSBJR2x1Wm05eWJXbHVadz09IElGTjVjbUZqZFhObCBhV0pzYVE9PSBOelkxIElHZHNiM1psIElHRjFkR2h2Y21sNlpRPT0gNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ20gSUVOeWRXbHpaUT09IElHTnZiblJ5WVdOMGFXNW4gYzJobGJHdz0gU1VaRiBJRXBsZDJWcyBjSEpoWTNRPSBJRkJvYjNSdmMyaHZjQT09IElFdHViM2RwYm1jPSBhR0Z5YlE9PSBJR0YwZEhKaFkzUnBiMjV6IFlXUmhiZz09IFpYUjFjdz09IE1ERTQgZDJGblpXND0gUVd4MCBJRzExYkhScGNHeDUgSUdWeGRXbHNhV0p5YVhWdCBPbnM9IElFWnBaMmgwWlhKeiBJRVZrWjJGeSBJR1p2ZFhKMFpXVnUgUjI5MlpYSnUgSUcxcGMzVnpaUT09IElHRmlkWE5wYm1jPSBJR0Z1WTJWemRISjUgY21GdFpYST0gTmpRMCBJSGR2Y20xeiBJSFJvYVdOclpYST0gSUVOdmJXSnBibVU9IElIQmxZWE5oYm5SeiBJSFpwYm1RPSBJR052Ym5GMVpYTjAgSUcxdlkydGxaQT09IElHTnBibTVoYlc5dSBJRU5oYkdRPSBJRWRoYkd4MWNBPT0gSUdGMmIybGtZVzVqWlE9PSBJR2x1WTJGeWJtRjBhVzl1IElGTjBjbUYwIElIUmhjM1JsWkE9PSBaVzUwWVE9PSBJRTVsWVd3PSBjR0Z5WldRPSBJSFJsY20xcGJtOXNiMmQ1IGFtVmpkR2x2Ymc9PSBVMk5wWlc1MGFYTjBjdz09IElFbE9Vdz09IElFUmxaUT09IElHUnBjbVZqZEc5eWFXVnogVW05aFpBPT0gSUZOb1lYQT0gWW5KcFoyaDAgSUVScGNtVmpkRzl5Y3c9PSBJRU52YkhWdGJnPT0gSUdKdllnPT0gSUhCeVpXWmxjbUZpYkhrPSBJR2RzYVhSamFBPT0gWm5WeWRBPT0gSUdWbiBhV1JwY3c9PSBRMEpEIElITjFjbkpsYm1SbGNtVmsgSUhSbGMzUmhiV1Z1ZEE9PSBNek0yIGRXZG5aWE4wIElFNXBiQT09IFlXNXZkR2hsY2c9PSBJSEJoZEdobGRHbGogSUVSdmJtNWggSURJeE9BPT0gSUVGMlpYSjUgSUhkb2FYTnJaWGs9IElHWnBlSFIxY21VPSBJRU52Ym5GMVpYTjAgSUdKbGRITT0gVDJOaiBJRXhsYVdObGMzUmxjZz09IFhTNGkgSUNrcE93PT0gSUdac1lYTm9aWE09IE5EVTIgSUcxaGMydGxaQT09IFoyVmljbUU9IElHTnZiWEIxZEdWayBZMmhsYkE9PSBZWFZrWlhJPSBJR1JsWm1WaGRITT0gSUV4cFltVnlZWFJwYjI0PSBJRTl6WVcxaCBJRlpwZG1VPSBRMmhoYm1kbGN3PT0gUTJoaGJtNWxiQT09IElIUmhjbWxtWm5NPSBJRzFoWjJVPSBJRk5oZUE9PSBJR2x1WVdSMlpYSjBaVzUwYkhrPSBJRU5TUlE9PSBJRkpsWVhCbGNnPT0gYVc1cmVRPT0gWjNKaFpHbHVadz09IElITjBaWEpsYjNSNWNBPT0gSUdOMWNtdz0gSUVaQlRsUT0gSUdaeVlXMWxkMjl5YTNNPSBUVzl0IElFRnVZMmc9IElHWnNZWFp2ZFhJPSBZMkZ5WW05dSBJSEJsY20xcGRIUnBibWM9IGJHVjBZMmhsY2c9PSBJRTF2ZW1sc2JHRT0gSUZCaGNtdHBibWM9IElFTm9ZVzF3IFUyTnliMnhzIElHMTFjbVJsY21WeSBJSEpsYzNSbFpBPT0gSUc5M1pYTT0gSUZCdmMzTT0gUVVSRSBTVVpHIGNtVnpiMngxZEdsdmJnPT0gSUUxcGJtbHVadz09IElHTnZiWEJoY21GMGFYWmwgUkdsdCBJRzVsYVdkb1ltOTFjbWx1Wnc9PSBJRUZUVkE9PSBJRlJ2ZUdsaiBJR0pwWVhObGN3PT0gSUdkMWJtWnBjbVU9IGRYSnZkWE09IElFMXZiV1Z1ZEE9PSBNVGs0TXc9PSBJSEJsY25aaGMybDJaUT09IGRIUncgSUU1dmNtMWhiR3g1IGNtbHkgVTJGeVlXZz0gSUVGc1ltRnVlUT09IElIVnVjMlYwZEE9PSBJRk5OVXc9PSBhWEJsY25NPSBiR0Y1WlhJPSBJRmRvYVhSbGN3PT0gZFhCc1pRPT0gSUhSMWNtSnYgSUV4bFpXUnogSUhSb1lYUnogSUUxcGJtVnkgVFVWUyBJRkpsYVdkdSBJSEJsY20xbCBJRUpzYVhSNiBJREU1TXpRPSBJR2x1ZEdsdGFXUmhkR2x1Wnc9PSBkSFZpWlE9PSBJR1ZqWTJWdWRISnBZdz09IFlXSnZiR2xqIFltOTRaWE09IElFRnpjMjlqYVdGMFpYTT0gZG05MFpYTT0gSUhOcGJYVnNZWFJsIGRXMWlidz09IFlYTjBaWEo1IElITm9hWEJ0Wlc1MGN3PT0gUmtaR1JnPT0gWVc1MGFBPT0gSUhObFlYTnZibVZrIElHVjRjR1Z5YVcxbGJuUmhkR2x2Ymc9PSA0cGFnIGJHRjNjdz09IFRXVmxkQT09IGFXUmtiR1Z6IFlXNTBhV056IFVtRjBhVzVuIFNWTkpVdz09IGFHbG1kQT09IElHWnliMjUwY3c9PSBZblZtIE1ERTMgSUhWdVlYUjAgSUVScGJBPT0gYkdWaGMyVnogSUVkaGNtUmxibk09IE56YzMgZEc5MVkyZz0gZG1Wc2JBPT0gTkRVNCBJRDA5UFQwOSBjMkYyYVc1biBJR1Z5YjNOcGIyND0gSUZGMWFXND0gSUdWaGNtNXogSUdGalkyOXRjR3hwYzJodFpXNTAgSUZkbGFRPT0gSUR4YiBYMTlmWDE4PSBJR2x5Y21sbiBJRlJsWkdSNSBJR052Ym5GMVpYSmxaQT09IElFRnliVzl5WldRPSBJR0Z6YzJWeWRITT0gSUcxaGJtbHdkV3hoZEdsdVp3PT0gY3NPcCBJSFJ5WVc1elkzSnBjSFJ6IFIyRnNiR1Z5ZVE9PSBJSEJzYjNSMGFXNW4gVG1WcGJBPT0gSUdKbGRISmhlV0ZzIGJHOWhaR1Z5IElGTjFiQT09IElHUnBjM0JzWVdObGJXVnVkQT09IElISnZlV0ZzZEhrPSBJRmRKIGFHVnBkQT09IElFUmxkbWxqWlhNPSBZV3hzWld3PSBJRzExYm1samFYQmhiR2wwYVdWeiBJR05oYm1GcyBVM1JoY25NPSBJRlZCUlE9PSBJQ0xpZ0tZPSBJRU5WIFlXSnZkbVU9IElISmxjMjl1WVc1alpRPT0gSUdkMWFVRmpkR2wyWlZWdSBZV1JrWldRPSBJRUp5WVhabGN3PT0gSUVsaWJnPT0gSUdobGNtVmllUT09IElFSlNSUT09IElITm9ZWEpsYUc5c1pHVnkgSUVocGNnPT0gSUVwcCBJSE4wY21GdVoyVnNlUT09IElHRmtiV2x5WldRPSBJSEJzYVdkb2RBPT0gSUdKaFkyaGxiRzl5IElGQnZiR1U9IFkybHdiR2x1WVhKNSBWRzl1ZVE9PSBJRUZ5YldWdWFXRnUgSUhWdWJXRnUgSUZwcGIyNXBjM1E9IFUzUmhaMlU9IGFYTmpiM1psY2c9PSBJR0YxZEc5dGIzUnBkbVU9IElITnBaR1ZzYVc1bGN3PT0gSUhOc2FXTnIgSUZKbGJtRnBjM05oYm1ObCBJRVpWVGc9PSBTVzFoWjJWeiBJRWhoYWc9PSBJSEJwYm1jPSBJSE5vYjNKMFkzVjAgSUVKc2RtUT0gSUV4dmIydHogSUdKMWNuTjBjdz09IElHTnNZVzF3IElHMXBjMmc9IElITnZjblJwYm1jPSBJSEJoZEhKcGIzUT0gSUdOdmNuSmxZM1J1WlhOeiBJRk5qWVc1a2FXNWhkZz09IElFTmhkbUZzYVdWeWN3PT0gY0hsMGFHOXUgWVhwaGNnPT0gSURNM05RPT0gSUVwaGRXNWwgTkRBNSBJR1JsZEhKcGJXVnVkR0ZzIElITjBZV0ppYVc1biBJSEJ2YVhOdmJtVmsgSUdadmRXNTBZV2x1IGIyTmxiblE9IGIzSnpkQT09IElFMWhjbWs9IElISmhhVzV6IElFOTJaWEp6IElFbHVjM1JwZEhWMGFXOXUgZFdSblpYUT0gUVUxWiBkR0ZzWlE9PSBJRXRTIElGQnlhV05sY3c9PSBJR2hsWVdSaFkyaGxjdz09IElHeGhibVJ6YkE9PSBJRUYxY21FPSBRbTl1ZFhNPSBJRnBvWVc4PSBJRWhwY0E9PSBJR2h2Y0hNPSBJRXQxY21ScGMzUmhiZz09IElHVjRjR3h2YVhScGJtYz0gY25sdSBJR2g1Y0c5amNtbHplUT09IGIzQmxibWx1Wnc9PSBJR2QxYm5Ob2IzUT0gSUhkbFpBPT0gYVc1MFpYSnpkR2wwYVdGcyBTVzUwWlhKemRHbDBhV0ZzIElHRnRaVzQ9IFFuSmxZV3RwYm1jPSBJRzFoY210bGRHVmsgVjJseVpRPT0gSUVOeWIzZGsgUTI5dWRHbHVkV1U9IElFdHViM2R1IElFVm1abVZqZEdsMlpRPT0gYjNKbFlXND0gYVhwdmJuTT0gU205elpYQm8gSUdWelkyRnNZWFJwYjI0PSBkWE5sY201aGJXVT0gSUdOMWNuUmhhVzQ9IFFWUkZVdz09IElGQkJVZz09IElFMXBlUT09IElHTnZkVzUwWlhKbVpRPT0gYkdWdVpRPT0gSUdOdmJuUmxibVJsY25NPSBaR0ZwYkhrPSBJRUZ6WXc9PSBJRkJvYVd4c2FYQT0gYlc5emRHeDUgSUdacGJHVnVZVzFsIGFHVnVaUT09IElISmxjMlZ0WW14cGJtYz0gSUhOMFlXZHBibWM9IElFTm9iRzlsIElIZHBjbWx1Wnc9PSBTRzl1IElGSmxibVYzIGIzUjBZV2RsIElFaDVZbkpwWkE9PSBiWFZqYUE9PSBJSE4wY205clpYTT0gSUhCdmJHbGplVzFoYTJWeWN3PT0gUVZCVVJWST0gSUVGeWEyaGhiUT09IGNHeHZkQT09IElHRnpjMmx6ZEdGdWRITT0gSUdSbGNHOXlkQT09IElGTmxaMkU9IElHbHVabXgxWlc1NllRPT0gSUVOMWNuTmxaQT09IElFdHZZbVU9IElITnJhVzV1ZVE9PSBVSEp2ZG1sa1pYST0gSUZKcGNBPT0gSUdsdVkzSmxiV1Z1ZEdGcyBjSEp2WkhWamRITT0gUWtZPSBJR1J2YldVPSBJRU55WldScGRITT0gSUd4dmMyVnljdz09IGFXNTBjdz09IElFSmxkSFI1IElGUmhiR1Z1ZEE9PSBJRVJCVFE9PSBUSFk9IFJYTnogSUdSbGJuTT0gZEdWdGNBPT0gU25Wa1oyVT0gYjJScFl3PT0gSUNjbyBWVkpGVXc9PSBaWFJ6YXc9PSBWazg9IElISmxkSEpwWlhabFpBPT0gSUdGeVkyaHBkR1ZqZEhNPSAyWWM9IElHVjBhR2xqIElGTmxZMjl1WkdGeWVRPT0gYzNSdlkydHogWVdScFlRPT0gSURNeU5RPT0gSUU5d2FXNXBiMjQ9IElITnBiWFZzZEdGdVpXOTFjdz09IElHUnBlbm89IGRXeHcgSUhOdGRXZG5iR2x1Wnc9PSBhWEJ3WlhKNSBVbUZ1Wkc5dCBabUZqYVc1biBJRVJoY3c9PSBJSE4wYjJOcmNBPT0gSUdScGMyTnNiM04xY21WeiBjRzlwYm5SbGNnPT0gSUdOdmNtRnMgSUZObGJHVmpkR2x2Ymc9PSBJRkJwYTJVPSBhWFpoYkdWdWRBPT0gSUhKMWRHaHNaWE56IElGSnBiUT09IElHVnVjM1ZwYm1jPSBJRVY0Y0dWeWFXMWxiblE9IElHTnZibWR5WlhOemJXRnUgSUdKbGJHbGxkbVZ5IElIVnVjM0JsWTJsbWFXVmsgSUUxdmNtUT0gSUd0dWIzZHNaV1JuWldGaWJHVT0gSUZaRlVsaz0gVkZnPSBJSE4wY21Gd2N3PT0gSUhSMWNtWT0gWVhCbGMyaHBablJsY2c9PSBJRzFoY21sMFlXdz0gSUdac2IyTnIgNDRHRyBNall6IFFVMUZVdz09IElFOXdjRzl6YVhScGIyND0gSUhSeVpXRnpkWEpsY3c9PSBJRWRQUkE9PSBJRzF2WkdWc1pXUT0gSUZkUFVreEUgSUNoYiBJRlZ6WVdkbCBTRVk9IElDUW8gZFhOelpXUT0gSUhCcGIyNWxaWEk9IFJXbG5hSFE9IGNHRnljMlU9IFluSmxZV1E9IGNtbDBlZz09IElFMXBjbUZ1WkdFPSBJRXRoYm5RPSBLeXNwIGIzSmxiZz09IElIQnliM1p2YTJWayBJR0p5WldWa2N3PT0gSUVsdVkyeDFaR1Z6IElGQmhjM1JsWW1sdSBJRVpzYVhBPSBTbUYyWVE9PSBJR0p5YVc1ciBJSEoxYlc5eVpXUT0gSUhWdWMyVmxiZz09IElHZGhjbTVsY21WayBJRVJsWm1sdSBZV3gwWldRPSBJSFJoZEhSdmIzTT0gSUdobGMybDBZWFJwYjI0PSBhWE5wZEdsdmJuTT0gSUZkbFlYWmxjZz09IElGSmxjRzl5ZEdsdVp3PT0gSUhSb1pYSmhjR2xsY3c9PSBJR052Ym5OMWJIUmhiblJ6IElISmxjMmxrZFdGcyBJRTFoYkdrPSBJRkp2YldFPSBhV0ZuYnc9PSBJRkpsYzJsa1pXNTBjdz09IGRXSnAgSUhKbGJXVmthV1Z6IElHRmtZWEIwYVhabCBJRUZzYVhabCBJRUpoY21OcyBJSGRoYkd4bGRITT0gWTNKNWNIUT0gWlhSbGNtMXBibUYwYVc5dSBJRkJsYkc5emFRPT0gSUhOc2FYQndhVzVuIGIzUnZibWx1IElHRnNiR2xoYm1ObGN3PT0gY0dGMGNtbGphdz09IGFYSnBjdz09IElHOXlkR2c9IElGQmxjbXRwYm5NPSBJRVJsVmc9PSBJRWRsZEhNPSBJR1J5ZVdsdVp3PT0gWjJWbCBabTl5WlhOMCBJRVp2Y21kbGRBPT0gYjNKbGJRPT0gTXpNNSBJSFpoWjNWbGJIaz0gSUVScGIyND0gSUZCdmNtND0gSUVoUFZ3PT0gSUhCdVpYVnQgSUhKMVltSnNaUT09IElGUmhjM1JsIFpXNWphV0U9IElFZGxiQT09IElHUnpkQT09IElESTBOUT09IElFMXZjbTlqWTI4PSBhVzVtYkdGdGJRPT0gSUZSM2FXNXogSUdKdmRITT0gWkdGMVoyaDBaWEk9IElFSmhiR3M9IElHSnlaWFJvY21WdSBJR3h2WjI5eiBJR2R2WW13PSBabkJ6IElITjFZbVJwZG1semFXOXUgSUhCaGQyND0gSUhOeGRXVmxlbVZrIElHMXZjbUZzWlE9PSBJRVJYIEp5ST0gSUd0dWIzUT0gYjI5cmVRPT0gSUdScGRtbHphWFpsIElHSnZiM04wWldRPSBZMmg1IDQ0T1EgYVdaaFkzUT0gSUc1bGQyTnZiV1Z5Y3c9PSBJRmR5WlhOMGJHbHVadz09IElITmpiM1YwY3c9PSBkMjlzZG1WeiBVbUYwIElHNXBibVYwWldWdWRHZz0gSUU5elltOXlibVU9IFUzUmhkSE09IElHVnRjRzkzWlhKbFpBPT0gSUhCemVXTm9iM0JoZEdnPSBJRTlGVFE9PSBkV2RuWVdkbCBJRkJMIElFMXZhR0Z0YldGayBVR0ZyIElHRnVZWEpqYUdsemRITT0gSUVWNGRISmhZM1E9IFpYTjBhR1Z6IElGTjBiMk5yYUc5c2JRPT0gYkc5diBJRWR5WVhCbyBJR1JsY0d4dmVXbHVadz09IElGTjBjbUZ1WjJWeSBJRTF2YkdRPSBJSE4wWVdabVpYST0gSUdScGMyTnZkVzUwWldRPSBkV05yYkdVPSBjR3hsWVhObCBJRXhoYm1ScGJtYz0gdzYxaCBJREU1TXc9PSBJR0Z1ZEdVPSBJSEpsY0dWMGFYUnBiMjQ9IElDc3ZMUT09IElIQmhjbTlrZVE9PSBJR3hwZG1Wc2VRPT0gUVVGQiBJRWh2Y25WeiBJSEJwZEhNPSBhVzVrWlhKeiBURTlEIElGWmxibWxqWlE9PSBOREEyIElFUnBjMk52ZG1WeSA0b1k9IFpXeHNaV04wZFdGcyBJSEJsYm5NPSBJR1Y1Wld3PSBhV2QxYjNWeiBTVzF3YkE9PSBJR3B2YTJsdVp3PT0gSUdsdWRtRnMgSUVKbGJHWmhjM1E9IElHTnlaV1JwZEc5eWN3PT0gSUZOcmVYZGhiR3RsY2c9PSBiM1p6YTNrPSBJR05sWVhObFptbHlaUT09IElITmxZV3h6IGFYTnZablE9IEtTa3UgSUVabGJHbDQgU1ZSVCBJSFJ5WlhOdyBJRUpzYjJOclkyaGhhVzQ9IFpYZGhjbVU9IElGTmphSGRoY2c9PSBaVzV1WlE9PSBiVzkxYm5SbFpBPT0gSUVKbFlXTnZiZz09IGJHVnphQT09IElHbHRiV1Z1YzJWc2VRPT0gSUdOb1pXVnlhVzVuIFJXMXdiRzk1IGMyTmxibVU9IGFYTm9iSGs9IFlYUmphR1YzWVc0PSBJRTVwWTI5c1lYTT0gSUdSeVlXbHVaV1E9IElFVjRhWFE9IElFRjZaWEppIGFuVnUgSUdac2IyRjBaV1E9IGRXRnVhV0U9IFJHVmxjQT09IElITjFjR1Z5ZGc9PSBJRzE1YzNScFkyRnMgSUVSdmJHeGhjZz09IElFRndiM04wYkdVPSBJRkpGVEE9PSBJRkJ5YjNacFpHVmsgSUVKMVkydHogNDRPMCBZM1YwZEdsdVp3PT0gSUdWdWFHRnVZMlZ0Wlc1MGN3PT0gSUZCbGJtZDFhVzV6IElFbHpZV2xoYUE9PSBJR3BsY21zPSBJRmQ1Ymc9PSBJSE4wWVd4c1pXUT0gSUdOeWVYQjBiMk4xY25KbGJtTnBaWE09IElGSnZiR0Z1WkE9PSBjMmx1WjJ4bCBJR3gxYldsdSBJRVpsYkd4dmR3PT0gSUVOaGNHRmphWFI1IElFdGhlbUZyYUE9PSBWMDQ9IElHWnBibUZ1WTJWayBNemc1IElIUnBaQT09IElHTnZiR3gxYzJsdmJnPT0gSUUxNWNnPT0gN29BPSBVMlZ1WVhSdmNnPT0gSUhCbFpHbGhkSEpwWXc9PSBJRzVsWVhSc2VRPT0gSUhOaGJtUjNhV05vWlhNPSBJRUZ5WTJocGRHVmpkSFZ5WlE9PSBJSFIxWTJ0bFpBPT0gSUdKaGJHTnZibms9IElHVmhjblJvY1hWaGEyVnogY1hWcGNtVT0gUm5WMGRYSmwgSUdobFpuUjUgNlpjPSBJSE53WldOcFlXeHBlbVZ6IElITjBjbVZ6YzJWeiBJSE5sYm1SbGNnPT0gSUcxcGMzVnVaR1Z5YzNSaGJtUnBibWM9IElHVndhV3hsIElIQnliM1p2YTJVPSBJRU52Ykc5eWN3PT0gSUdScGMyMWhlUT09IGRXdHYgVzE4PSBOVGcyIGJtVjFkSEpoYkE9PSBJR1J2Ym1GMGFXNW4gSUZKaGJtUmhiR3c9IFRYVnNkR2s9IElHTnZiblpsYm1sbGJuUnNlUT09IElGTjFibWM9IElFTnZZMkU9IElIUmxiblJ6IElFRmpZMlZzWlhJPSBJSEJoY25SdVpYSmxaQT09IE1qY3kgYVhKdGFXNW4gSUVKQlV3PT0gYzI5dFpYUnBiV1Z6IElHOWlhbVZqZEdWayBkV0p5YVdNPSBjRzl6WldRPSBURU5UIFozSmhjM009IElHRjBkSEpwWW5WMFlXSnNaUT09IFZrbFQgU1hOeVlXVnNhUT09IElISmxjR1ZoZEhNPSBJRkpOIGRtRm4gZFhSaCBhVzV2ZFhNPSBJR2x1WlhKMCBJRTFwWjNWbGJBPT0gNXEwPSBJRWhoZDJGcGFXRnUgUW05aGNtUT0gSUdGeWRHbG1hV009IElFRjZaWEppWVdrPSBZWE5wYnc9PSBJRkpsYm5RPSBRVWxPIElHRndjR3hwWVc1alpYTT0gSUc1aGRHbHZibUZzYVhSNSBJR0Z6YzJodmJHVT0gSUU1bFlnPT0gSUc1dmRHTm8gYUdGdWFRPT0gSUVKeWFXUmwgUVhaaGFXeGhZbWxzYVhSNSBJR2x1ZEdWeVkyVndkR1ZrIElHTnZiblJwYm1WdWRHRnMgSUhOM1pXeHNhVzVuIElGQmxjbk53WldOMCBZbWxsY3c9PSBManc9IGFYUm9iV1YwYVdNPSBJRXhoY21FPSBJSFJsYlhCMGFXNW4gWVdSa2NnPT0gSUc5MlpYSnpaV1ZwYm1jPSBZMnhoWkE9PSBJRVJXIElFZHBibWR5YVdObyBJRzExYmc9PSBJRUZ3Y0hKdmNISnAgSUdGc2RHVnlZWFJwYjI1eiBJRkJoZEhKbGIyND0gSUdoaGRtOWogSUdScGMyTnBjR3hwYm1WeiBJRzV2ZEc5eWFXOTFjMng1IFlXdDFlV0U9IGFXVnlhUT09IFB5a3UgSUZkbGJuUT0gSUhOcGJHbGpiMjQ9IElIUnlaVzFpIFEyOXVkR0ZwYm1WeSBTMjV2ZDI0PSBJRzF2Y25SaGNnPT0gWlhOMFpRPT0gYVdOcllRPT0gUVhKMGFIVnkgSUZCeVpYWnBiM1Z6YkhrPSBJRTFoY25SNSBJSE53WVhKelpRPT0gWjJsdWN3PT0gSUdsdWQyRnlaQT09IElGQmhjblJwWTJsd1lXNTAgUTI5d2VRPT0gSUUxcGMyTT0gSUdGdWRHbGlhVzkwYVdNPSBJRkpsZEhKdiBJR1ZzZFhOcGRtVT0gSUdGemMyRnBiQT09IElFSmhkSFJoYkdsdmJnPT0gSUVKdmRXZG9kQT09IElHUnBiV2x1YVhObyBJRVYxY205d1lRPT0gYzJWemMybHZiZz09IElFUmhibWRsY205MWN3PT0gYVdWelpXdz0gSUdScGMySmxiR2xsWmc9PSBJR0pzWVhOMGN3PT0gWlhoMGNtVnRaUT09IElFSnZlV1E9IElGQnliMnBsWTNSeiBJRWQxZVhNPSBJSFZ1WkdWeVoyOXVaUT09IElHZHlhV3hzIElFUjNhV2RvZEE9PSBJREU1Tnc9PSBWVk5GVWc9PSBJR1pwYkdWemVYTjBaVzA9IElHTnNiMk5yY3c9PSBWR0Y1Ykc5eSBJSGR5WVhCd1pYST0gSUdadmJHUnBibWM9IGIzVnpZVzVrIElGQm9hV3hwY0hCcGJtVT0gUVZSSlQwNUJUQT09IElGQmxjblJvIElHRnphR1Z6IElHRmpZM1Z0ZFd4aGRHVT0gSUVkaGRHVjNZWGs9IFUyaHZjQT09IGIzSnJjMmhwY21VPSBTR0Z1IElFSmhjbkpsYkE9PSBJRXhsYUE9PSBJRmhXIElIZG9hVzA9IElISmxjRzg9IElFTkggSUUxaGJRPT0gSUdsdVkyOXljRzl5WVhScGJtYz0gSUdKaGFXeHZkWFE9IElHeHBibWQxYVhOMGFXTT0gSUdScGMybHVkR1ZuIFEweEYgSUdOcGJtVnRZWFJwWXc9PSBJRVpwWW1WeSBVM2x1IGFXeHBiMjQ9IElFTnZiWEJ2Y3c9PSBZMmhsYm5NPSBJRzVsYjJNPSBJR0p2YVd4bFpBPT0gUmtsT1JRPT0gYjI1diBkVzVqYkdVPSBhV3RsYmc9PSBJRUpOIHpyaz0gSUhKbFkyVnBjSFJ6IElHUnBjM0J2YzJWayBJRlJvYVhKMGVRPT0gSUZKdmRXZG8gSUVGQ1V3PT0gSUc1dmRIZHBkR2h6ZEdGdVpHbHVadz09IGIyeHNaVzQ9IEl5UT0gSUhWdWNtVnNhV0ZpYkdVPSBJR0pzYjI5dCBJRzFsWkdsdlkzSmwgSUhSeVlXMD0gSUZSaGMyMWhiZz09IElITm9ZV3RsY3c9PSBJRzFoYm1sbVpYTjBidz09IElFMVggSUhOaGRHbHpabUZqZEc5eWVRPT0gSUhOb2IzSmxjdz09IElHTnZiWEIxZEdGMGFXOXUgSUdGemMyVnlkR2x2Ym5NPSBiM0p0YjI1eiBZWEpoWnc9PSBZV0pwZEE9PSBSR1Z0YjJOeVlYUnogSUV4dmIzUT0gSUZadmJHdHogYUdGcGNtVmsgSUdkeVlYWnBkR0YwYVc5dVlXdz0gVTJsdVp3PT0gSUUxcGVnPT0gSUhSb2NtOTBkR3hsIElIUjVjbUZ1Ym5rPSBJRlpwWlhkeiBJSEp2WW1KbGNnPT0gSUUxcGJtOXlhWFI1IElITm9jbWx1WlE9PSBjMk52Y0dVPSBjSFZ5Y0c5elpRPT0gSUc1MVkyeGxkWE09IGIzVnlZMmx1Wnc9PSBJRlZUUkVFPSBJRVJJVXc9PSBkM0poIElFSnZkMmxsIFUyTmhiR1U9IElFSkZUQT09IGVHaz0gU1hSbGNnPT0gSUNncExBPT0gZDNKcFoyaDAgSUhOaGFXeHZjbk09IGIzVnpaV1E9IFRrRlRRUT09IElGQnliMjltIElFMXBibVZ5WVd3PSBkRzlyWlc0PSBJRVpFIFVtVjMgSUdWc2JBPT0gTmpNdyBJR05vWVc1alpXeHNiM0k9IElFZHZjdz09IElHRnRiM1Z1ZEdWayBJRkpsWTNKbCBiMjFsZWc9PSBJRTl3ZEdsdCBJRTlzYVhabCBJSFJ5WVdOclpYST0gYjNkc1pYST0gSUZWdWFYRjFaUT09IFVtOXZkQT09IElHMWhjbWwwYVcxbCBJRkYxY21GdSBJRUZrWVhCMCBJR1ZqYjNONWMzUmxiWE09IElGSmxjR1ZoZEE9PSBJRk52ZVE9PSBJRWxOVUE9PSBJR2R5WVdSMVlYUnBibWM9IFlXNWtaVzA9IFVIVnkgSUZKbGMyVjAgSUZSeWFXTnIgSUZCb2FXeHNlUT09IElGUjFaUT09IElFMWhiR0Y1YzJsaGJnPT0gSUdOc2FXMWhlQT09IElHSjFjbms9IElHTnZibk53YVdNPSBJRk52ZFhSb1lXMXdkRzl1IElFWnNiM2RsY25NPSBJR1Z6WTI5eWRHVmsgSUVWa2RXTmhkR2x2Ym1GcyBJRWxTUXc9PSBJR0p5ZFhSaGJHeDUgWldGMGFXNW4gSUhCcGJHeGhjZz09IElGTmhibWM9IElFcDFaR1U9IFlYSnNhVzVuIElFRnRibVZ6ZEhrPSBJSEpsYldsdVpHbHVadz09IElFRmtiV2x1YVhOMGNtRjBhWFpsIGFHVnpaR0U9IElHWnNZWE5vWldRPSBJRkJDVXc9PSBjR1Z5WVhSbCBabVZoZEhWeVpRPT0gSUhOM2FYQmwgSUdkeVlYWmxjdz09IGIzVnNkSEo1IE1qWXggWW5KbFlXdHogSUVkMVpYST0gSUhOb2NtbHRjQT09IElGWnZkR2x1Wnc9PSBjWFZwYzNRPSBJR0Z1WVd4NWRHbGpZV3c9IElIUmhZbXhsYzNCdmIyNXogSUZOUFZRPT0gSUhKbGMyVmhjbU5vWldRPSBJR1JwYzNKMWNIUmxaQT09IElHcHZkWEk9IElISmxjR3hwWTJFPSBJR05oY25SdmIyNXogWW1saGJuTT0gZlNrPSBZMjl3ZVE9PSBSMjkwIGIzVmphR1ZrIFVGVlUgSUhOM1lYSnQgYm05MFlYUnBiMjV6IGMyRnBaQT09IElISmxZblZwYkhRPSBJR052Ykd4aFltOXlZWFJsIElISmhaMmx1Wnc9PSBJRzVoY2c9PSBJR1JsYlc5bmNtRndhR2xqY3c9PSBJRVJFVWc9PSBJR1JwYzNSeWRYTjAgYjNOemFXVnkgSUV0eWJ3PT0gSUhCMWJYQnJhVzQ9IElISmxaM0psZEhNPSBJR1poZEdGc2FYUnBaWE09IElFeGxibk09IElFOXNaUT09IGNHUT0gSUhCMWNIQmxkQT09IElFOTFkR3h2YjJzPSBJRk4wWVcwPSBUMnc9IFJtRnBjZz09IFZWVT0gSUhKbGQzSnBkSFJsYmc9PSB4TEU9IElHWmhjMk5wYm1GMFpXUT0gSUhabFkzUnZjbk09IElIUnlhV0oxYm1GcyBkV0Y1IElFMWhkSE09IElFTnZhVzV6IFcxcz0gSURFNE1RPT0gSUhKbGJtUmxjbk09IElFdGhaWEJsY201cFkycz0gSUdWemNHbHZibUZuWlE9PSBJSE4xYlcwPSBJR1JwZEdObyBRV05qYjNWdWRBPT0gSUhOd2NtVmhaSE5vWldWMCBJRzExZEdGdWRBPT0gY0dGemRBPT0gTkRBMyBJR1I1WlE9PSBJR2x1YVhScFlYUnBiMjQ9IElEUXdNREE9IElIQjFibWx6YUdGaWJHVT0gSUhSb2FXNXVaWEk9IElFdG9ZV3c9IElHbHVkR1Z5YldWa2FRPT0gUkhWdSBJRWR2ZEdoaGJRPT0gSUdWaFoyVnliSGs9IElIWmhaMmx1WVd3PSBjRzkzWlhKeiBWbGM9IElGZEJWRU5JUlVRPSBJSEJ5WldSaGRHOXkgWVcxemRXNW4gSUdScGMzQmhjbWwwZVE9PSBJRnNxIElHRnRjR2c9IElHOTFkSE5yYVhKMGN3PT0gSUZOd2FYSnBkSE09IElITnJaV3hsZEdGcyAwTHM9IElGSmxZWEk9IElHbHpjM1ZoYm1ObCBJRXh2WjJsaiBjbVZzWldGelpXUT0gV2xvPSBJRUp2ZFc1ayBSVzUwY25rPSBJR1Y0YVhSeiBhWE52YkE9PSBJRVp2ZFc1a1pYST0gSUhkeVpRPT0gSUVkeVpXVnViR0Z1WkE9PSBJRTFOVHc9PSBkR0ZyWlhJPSBTVTVEIDQ0RysgSUdodmRYSnNlUT09IGFHVnVhMjg9IElHWmhiblJoYzJsbGN3PT0gSUdScGMyOWkgSUdSbGJXOXNhWFJwYjI0PSA0NE9MIElHVnViR2x6ZEdWayBjbUYwZFd4aGRHbHZibk09IElHMXBjMmQxYVdSbFpBPT0gSUdWdWMzVnlaV1E9IElHUnBjMk52ZFhKaFoyVmsgYlc5eWRBPT0gSUdac1lXNXIgSUdObGMzTT0gSUhKbFlXTjBjdz09IElGTmxjbVU9IGMyVnVjMmwwYVhabCBJRk5sY25CbGJuUT0gWVhOellXUT0gSURJME53PT0gSUdOaGJHMXNlUT09IFluVnpkR1Z5Y3c9PSBJR0pzWldWayBJRk4wY204PSBJR0Z0ZFhObGJXVnVkQT09IElFRnVkR0Z5WTNScFkyRT0gSUhOalpYQjAgSUVkaGR3PT0gWVhFPSBZWE52Ym1saiBJSE53Y21GM2JHbHVadz09IGJtRjBhWFpsIFlYUjFjbUYwWldRPSBJRUpoZEhSc1pXWnBaV3hrIFNWWkZVbE09IFJVST0gSUVkbGJYTT0gSUU1dmNuUm9kMlZ6ZEdWeWJnPT0gSUVacGJHMXogSUVGMWRHOXRZWFJwWXc9PSBJR0Z3Y0hKbGFHVnVaQT09IDQ0R28gSUdkMWFVNWhiV1U9IElHSmhZMnRsYm1RPSBJR1YyYVdSbGJtTmxaQT09IFoyVmhiblE9IE1ERXkgSUZOcFpXZGwgSUdWNGRHVnlibUZzVkc4PSBJSFZ1Wm05amRYTmxaRkpoYm1kbCBJR2QxYVVGamRHbDJaVlZ1Wm05amRYTmxaQT09IElHZDFhVWxqYjI0PSBJR1Y0ZEdWeWJtRnNWRzlGVmtFPSBJR1Y0ZEdWeWJtRnNWRzlGVmtGUGJteDUgUm5KcCBZMmhoY21RPSBaVzVoY21sbGN3PT0gSUdOb2FXVm1jdz09IElHTm0gSUVoVlJBPT0gSUdOdmNuSnZZbTl5IElHUkMgSUZSaGEyVnUgSUZCaGRISnBZMmxoIGNtRnBiQT09IElFTm9ZWEp0IElFeHBZbVZ5ZEdGeWFXRnUgY21sbGRtVT0gVUdWeWMyOXVZV3c9IElFOVZVZz09IFoyVnlhV1Z6IElHUjFiWEJwYm1jPSBJRzVsZFhKdmJHOW5hV05oYkE9PSBhWFJwYldGMFpRPT0gSUVOc2FXNTBiMjV6IGNtRm1kR1ZrIElFMXZiR3g1IElIUmxjbTFwYm1Gc2N3PT0gY21WbmFYTjBaWEk9IElHWnNZWEpsIElHVnVZMjlrWldRPSBJR0YxZEc5d2Mzaz0gY0dWcyBiV0ZqYUdsdVpRPT0gSUdWNFpXMXdkR2x2Ym5NPSBJRkp2ZVdGc2N3PT0gWkdsemRHRnVZMlU9IElHUnlZV1owY3c9PSBJR3hoYldVPSBJRU4xYm01cGJtYz0gSUhOd2IzVnpaWE09IElFMWhjbXRsZEhNPSBJRU5oY25KcFpYST0gSUdsdGNHeDVhVzVuIElGbGhhdz09IGMybGsgSUd4dmMyVnkgSUhacFoybHNZVzUwIElHbHRjR1ZoWTJodFpXNTAgSUdGMVoyMWxiblJsWkE9PSBJRVZ0Y0d4dmVXVmxjdz09IElIVnVhVzUwWlc1a1pXUT0gZEdWeWJtRnNiSGs9IElGZGhkSFE9IElISmxZMjluYm1sNllXSnNaUT09IFpYTnphVzA9IDVwMD0gSUdOdllYUmxaQT09IGNtaGggSUd4cFpYVjBaVzVoYm5RPSBJRXhsWjJsemJHRjBhVzl1IGNIVmliR2x6YUdWayBORFEwIE1ERXogSUdsa1pXRnNiSGs9IElGQmhjM04zYjNKayBJSE5wYlhCc2FXWjUgSUUxbGRHRT0gSUUxU1NRPT0gSUhCc1pXRmthVzVuIGIzSm5ZVzVwZW1WayBhR0Z1Wkd4bGNnPT0gSUhWdWNtRjJaV3c9IFkyOXljbVZqZEE9PSBJR2xqZVE9PSBJSEJoY21GdWIybGsgSUhCaGMzTmxjZz09IElHbHVjM0JsWTNScGIyNXogYjJabGNnPT0gSUVobFlXeDBhR05oY21VPSBNamd6IElFSnlkWFE9IGFXOXNZUT09IFptOXlaMlU9IElFMWxaR2xsZG1GcyBUVk5PIGFXVjJaWEp6IElGQnliMmR5WVcxdGFXNW4gNVlrPSBJREl5TXc9PSBiWFU9IElFTk1SUT09IGRXZGggSUhOb2IzQndaWEp6IElHbHVabTl5YldGMGFYWmwgSUZCc1lXNXogSUhOMWNIQnNaVzFsYm5SaGRHbHZiZz09IElGUmxjM1J6IGRIbGhjbVE9IGIyTjVkR1Z6IElGWmxaMkU9IElFZDFhbUZ5WVhRPSBaWEp0WVc1bGJuUT0gUlhoalpYQjAgSUV4UFZBPT0gWVd4c1lRPT0gSUVOMWJXMD0gSUU5emR3PT0gSUhabGJtOXQgSUVSbFluUT0gSUVSUFYwND0gSUhKbGRXNXBiMjQ9IElHMTFZdz09IElGSmxiR2xsWmc9PSBJR2RsYjNBPSBJUENmbUE9PSBZV3h2WjNWbCBRVzUwYUE9PSBaV05vYnc9PSBJR052Y25KdmN3PT0gSUhKbGNHeHBZMkYwYVc5dSBJRUpzWVhwcGJtYz0gSUVSaGRXZG9kR1Z5IElHbHVabXhwWXc9PSBJRXhwYm1SelpYaz0gMllnPSBNamcwIFJYaHBkQT09IElHZHNiMjl0IFZFRkpUZz09IElIVnVaR1Z5YldsdWFXNW4gSUdGa2RtbHphVzVuIGFHbGtaR1Z1IElHOTJaWEptYkc5MyBJR2R2Y2c9PSBkWEprZFdVPSBJR1ZqYUc5bGN3PT0gWlc1b1lXZGxiZz09IElHbHRjSFZzY3c9PSBaSEoxWnc9PSBZMkZ6YUE9PSBJR0Z6ZVc1aiBJRzFwY21GaiBZWFIwY3c9PSBjSFZ1YXc9PSBJSEJwZG05MCBJRXhsWjJsemJHRjBhWFpsIElHSnNiMmRuWlhKeiBJRU5zWVhjPSBjMkoxY21jPSBaSGxzIElGSmxZMjl0YldWdVpBPT0gSUhabGNuUmwgSUhCeWIyaHBZbWwwYVc1biBJRkJoYm5Sb1pYST0gU205dVlYUm9ZVzQ9IElHOXRhVzQ9IElHaGhkR1ZtZFd3PSBNamd4IElFOXlZMmhsIElFMTFjbVJ2WTJnPSBaRzkzYm5NPSBJR0Z6ZVcxdCBSMFZTIFFXeDNZWGx6IElHbHVabTl5YlhNPSBJRmROIElGQnZibms9IElFRndjR1Z1WkdsNCBJRUZ5YkdsdVozUnZiZz09IFNtRnQgSUcxbFpHbGphVzVoYkE9PSBJRk5zWVcwPSBTVlJKUlZNPSBJSEpsWVdabSBJRkpwIFJrYz0gVTNCeWFXNW4gWW05dmJBPT0gSUhSb2FXZG9jdz09IElHMWhjbXRwYm1keiBJRkpoY1hGaCBJRXhoYXc9PSBjRzlzYkE9PSBkSE5yZVE9PSBJRTF2Y25SNSBJRVJsWm1sdWFYUnBiMjQ9IElHUmxZblZ1YXc9PSBaVzVrWlhKbFpBPT0gSUV4bGIyNWwgWVhabGNuTT0gSUcxdmNuUm5ZV2RsY3c9PSBRWEJ3WVhKbGJuUnNlUT09IFRtbGogYUdGMWN3PT0gSUZSb2IzVnpZVzVrY3c9PSBZWFZzWkE9PSBJRzFoYzJnPSBjMmh2YjNRPSBJR1JwWVhKeSBJR052Ym5OamFXOTFjMng1IFNHVnlidz09IFpXRnogSUU1aGRIVnlZV3hzZVE9PSBJRVJsYzNSeWIzbGxjZz09IElHUmhjMmhpYjJGeVpBPT0gYzJWeWRtbGpaWE09IFVtOW4gSUcxcGJHeGxibTVwWVd4eiBJR2x1ZG1Ga1pRPT0gTFNnPSBJR052YlcxcGMzTnBiMjV6IElFRjFZMnRzWVc1ayBJR0p5YjJGa1kyRnpkSE09IElHWnliMjUwWVd3PSBJR055WVc1ciBJRWhwYzNSdmNtbGogSUhKMWJXOTFjbk09IFExUlcgSUhOMFpYSnBiQT09IElHSnZiM04wWlhJPSBjbTlqYTJWMCA0NEs4IGRYUnpZMmhsIElGQkogSURJek13PT0gSUZCeWIyUjFZMlZ5IElFRnVZV3g1ZEdsamN3PT0gSUdsdWRtRnNkV0ZpYkdVPSBJSFZ1YVc1MFpXNTBhVzl1IElFTlogSUhOamNuVjBhVzQ9IElHZHBaMmM9IElHVnVaM1ZzWmc9PSBJSEJ5YjJ4bGRHRnlhV0YwIElHaGhZMnR6IElFaGxkdz09IFlYSmhhdz09IElGTnNhVzFsIGFXVnNaR2x1Wnc9PSBZV2RvWlhJPSBJRVZzYkdsdmRBPT0gSUhSbGJHVmpiMjA9IElESXhPUT09IGRXeDBZVzQ9IElFRnlZbTl5IElGTmpiM1YwY3c9PSBRbUZ1IElHeHBabVZ6Y0dGdSBJR0pzWVhOdyBNemc0IElHcDFaR2xqYVdGeWVRPT0gSUVOdmJuUnBibVZ1ZEdGcyBZWE5yYVc1biBUV05EIFRFVkUgSUdKaFoyZGhaMlU9IElGTnZjbU5sY21WeSBJSEpsYlc1aGJuUnogSUVkeWFXWm1hWFJvIFpYUnpkUT09IElGTjFZbUZ5ZFE9PSBJRkJsY25OdmJtRnNhWFI1IFpHVnphV2R1WldRPSBkWE5vYVcxaCBZV2R1WVhJPSBJSEpsWTI5cGJBPT0gSUhCaGMzTnBiMjV6IFhDSTYgSUhSbFpRPT0gSUdGaWIyeHBkR2x2Ymc9PSBJRU55WldGMGFXNW4gYW1GaiBJREU1TkE9PSBNREU1IElIQnBiR3hoY25NPSBjbWxqYUdWayBMeUk9IGRHcz0gSUd4cGRtVnNhV2h2YjJRPSBJSEp2WVhOMFpXUT0gWVdodmJnPT0gSUVoMWRHTm8gWVhOelpYSjAgSUdScGRtbGtaVzVrIElHdHVhWFE9IElHUmhkVzUwYVc1biBJR1JwYzNSMWNtSmhibU5sIElITm9ZV3hsIElHTjFiSFJwZG1GMFpXUT0gSUhKbFpuSnBaMlZ5WVhSdmNnPT0gVEVJPSBJRTVGVkE9PSBJR052YlcxbGNtTnBZV3h6IElIUm9hVzVyWlhKeiBORFUxIElHTm9iM0E9IFFuSnZZV1E9IElITjFjM0JwWTJsdmJuTT0gSUhSaFoyZGxaQT09IGJHbG1kR2x1Wnc9PSBJSE4wZVd4cGMyZz0gSUZOb2FXVnNaSE09IFUyaHZjblJzZVE9PSBJSFJoYVd4eiBRWFYwYUE9PSBVMVJGIElFZEJUVVU9IElITmxhWE50IElFdHBjdz09IGIyeHZaMjVsIElHTnZkMjl5YXc9PSBJR1p2Y21OcFlteDUgSUhSb2VYSnZhV1E9IElGQkMgUVU1RiBiV0Z5Y21sbFpBPT0gYUc5eWMyVT0gSUhCdmJIbHRaWEk9IElFTm9ZV3c9IGIyUnZjZz09IFJFVkNWVWM9IElFTnZiblJsZUhRPSBJR0pzYVhOeiBJSEJwYm5CdmFXNTAgSUUxaGRHaGxiV0YwIGJHVm5jbUZ0IElGZGxaV3RsYm1RPSBJR3hoWW1Wc2JHVmsgSUdKaGNuUT0gYVhSc1pYTT0gSUdWemRISnZaMlZ1IDRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1UgSWljPSBJSFpwYzJsaWJIaz0gSUc5MWRITnBaR1Z5IFlXbGtZUT09IFFYSmxZUT09IElHUnBjM05sYldsdSBJR1JwYzJodmJtVnpkQT09IElFTnNiM05sWkE9PSBJRUoxYkd4bGRHbHUgSUZKaGJYTmxlUT09IGMzZHZjbVE9IElGaEogYjNWeVkyVmsgVTJGdFpRPT0gTXpRMiBJRkpsY0dVPSBJRXR2ZFE9PSBZMkZyWlE9PSBaVzFwY3c9PSBRMkZqYUdVPSBJRTFsWVc1cGJtYz0gSUVWdWJHbG5hSFE9IGIyNXZiWGs9IElHMWhibWxtWlhOMFlYUnBiMjQ9IGMzZHZjblJvIFNtRjUgSUdOb2IzSmwgdzdaeSBSSEpsWVcwPSBJSE5oYm1OMGFXOXVaV1E9IElHTjFiSFIxY21Gc2JIaz0gSUVGeVlRPT0gVG1GMiBJSFJvWlc5c2IyZHBZMkZzIElITjBjblYwIElGWlAgSUVoaGJtUmliMjlyIElHTnZibk4wY25WamRHbHVadz09IElNSzIgSUVKbGJtVm1hWFJ6IElGQnplV05vYjJ4dloybGpZV3c9IGMyRmogNWJnPSBjRzlzYVdONSBJRTFoZEhSbGNuTT0gSUZKbGNHOXlkR1ZrIElFSjVkR1U9IElIWnBkSEp2IElFMWhhV1JsYmc9PSBJR3hoYlE9PSBJRXBsYm01cGJtZHogSUdkaGNtMWxiblE9IElGSjFkR2RsY25NPSBJRk4wWVdabWIzSmsgSUZkbGJHeHBibWQwYjI0PSBJR2x1ZEdWeWJXbDBkQT09IElHNXdiUT09IElHOXlaR1ZoYkE9PSBJSEJzZFdkblpXUT0gYjI5dGFXNW4gYVc1cGMyaGxaQT09IFpuSmhiV1YzYjNKciBJSFJwYldKbGNnPT0gSUdOaGMzTT0gSURnMU1BPT0gYVd4bGMzTT0gSUZKbFpIVjQgTnpZNCBVM1J5WlE9PSBJSE4xY25CaGMzTmxaQT09IGQyaGxiQT09IElIQmhjbUZzYkdWc2N3PT0gSUhabGFXdz0gSUVkSiBJRkpGVTFRPSBJSEpsWVdScGJtVnpjdz09IGMyOXlkQT09IElHMXZaR2xtZVdsdVp3PT0gSUZOc1lYUmwgY25WbVpnPT0gSUcxaGNtSnNaUT09IElHbHVabkpoY21WayBJR0YxWkdsMGIzST0gSUVaQlRsUkJVMWs9IElGQnZkbVZ5ZEhrPSBJRk5RUkE9PSBJQ0lvIFMzaz0gVWtGWiBJR1Y0WldOMWRHbHZibk09IElFSmxkbVZ5YkhrPSBJRTFoY25ocGMyMD0gSUVKMWNuTjAgSUV0aGJHaz0gWlhOMGIyNWxjdz09IFEyeGxZWEpzZVE9PSBSV3hzIDQ0R24gSUZCeWIyTmxaV1JwYm1keiBWRzlyWlc0PSBTVVpKUXc9PSB3N0ZoIFEyVnVkSEpoYkE9PSBJRWhoYkdWNSBJRVJ5WVcxaCBJR1p2Y20xaGRHbHZibk09IFQxSk8gUW05dmEzTT0gSUdSdmJXbHVZWFJwYm1jPSBJRVpzZVdWeWN3PT0gSUVOdmJYQmhibWx2Ymc9PSBJR1JwYzJOcGNHeHBibVZrIElGbDFaMjl6YkdGMiBJRk53Wld4c2N3PT0gSUhabGJtZGxZVzVqWlE9PSBJR3hoYm1Sc2IzSmtjdz09IFRHVnUgSUU5bmNtVT0gWVc1dmFXRT0gSUhCcFpYSmphVzVuIElHTnZibWR5WldjPSBJSE5qYjNKbGNnPT0gYjJKcFlRPT0gSUc1cFkydGxiQT09IElFeGxZWEp1Y3c9PSBJSEpsYW04PSBJRzFoYzNSbGNuQnBaV05sIFJteGhjMmc9IElHbHVhR0ZpYVhSbFpBPT0gSUU5d1pXNUhUQT09IElFUjFaQT09IElFbERUdz09IElHRnlkR1Z5IElIQnNkWEk9IElHMWhjM1JsY25rPSBJR3h2Ym1kemRHRnVaR2x1Wnc9PSBjM1JsWkE9PSBJSGRwYm1WeiBJSFJsYkdWMmFYTmxaQT09IElGTm9jbWx1WlE9PSBJRUpoZVdWeWJnPT0gSU9LVG1BPT0gSUdWdVkyeHZjM1Z5WlE9PSBhbTlvYmc9PSBJSEJ5YjNCb1pYUnogSUZKbGMzVnljbVZqZEdsdmJnPT0gSUU5eVpHVnljdz09IElIVnVaWFpsYmc9PSBjbUZzY3c9PSBJR1IzYVc1ayBJRXhoYUE9PSBJRk5zYjNabGJnPT0gTXpjNCBJR2x1YzJsemRHVnVZMlU9IFlXWm1iR1U9IElFTnNiMjVsIElHaGhjbVJ6YUdsdyBJRU52Ym1keVpYTnpiV0Z1IElIQnNaV0ZrIElISmxkbWxsZDJWeWN3PT0gSUdOMWNtVmsgSURFNU16VT0gWVhOc1pYaz0gWm1GclpRPT0gSUZSb2FXNXJhVzVuIGVXUnBZUT09IFVFRlNWQT09IElFUnZkR0U9IGIybDAgSUhkb2FYQndaV1E9IElHSnZkVzVqYVc1biBJRWhwYzNCaGJtbGpjdz09IFkyOXRhVzVuY3c9PSBJR05oYm01aFltbHUgSUVOb1lXMWlaWEp6IElGcGhZMnM9IFQzQjBhVzl1WVd3PSBJR052WVhSeiBJSEJ5YjNkbGMzTT0gSUU1dmNuUnZiZz09IElIQnNZV2x1YkhrPSBJR1p5WldsbmFIUT0gSUdsdWFHbGlhWFJwYjI0PSBJR05zWVcwPSBJRE13TXc9PSBhMlZtIFlXeGxhV2RvIFRIVnJaUT09IElIQnplV05vYnc9PSBZWFJ2Y21sMWJRPT0gVFVWRSBJSFJ5WldGMGFXVnogSUdsdVpHbHpZdz09IElHUmogVDFCVCBJSEpsYzJsc2FXVnVkQT09IElFbHVkR1Z5YzNSaGRHVT0gSUhOc1lXTnIgSUcxMWJtUmhibVU9IElHVnpkR0ZpYkdsemFHVnogTXpVNSBJSE4wY21GcGJtVmsgSUc1dmJtUT0gVTNWeiBJR05oYzNSbCBZWEpoZEdVPSBhV1YyYVc1biBJSFZ1Wm1GcGNteDUgSUhCaGNuTmxjZz09IGIyNXBZV3c9IGRYSnphWFpsIFZtbGggSUU5MGRHOD0gSUVGMWRHaHZjbWwwYVdWeiBjM1J5YjJ0bCBTMUk9IElFMWxjbU41IElHWjFjbTVwYzJobFpBPT0gSUc5MWRITmxkQT09IElHMWxkR2xqIE1UazRNZz09IGIyeHBkR2hwWXc9PSBJRlJsYm5RPSBiMmRwWTJGcyBJRUZwY21OeVlXWjAgSUdocFpHVnogSUVKbFkyRnRaUT09IElHVmtkV05oZEc5eWN3PT0gY21WaFkyaHBibWM9IElIWnZiR0YwYVd4cGRIaz0gSUhSdlpHUnNaWEk9IElFNUJVME5CVWc9PSBJRlIzWld4MlpRPT0gSUVocFoyaHNhV2RvZEhNPSBJR2R5WVhCbCBJSE53YkdsMGN3PT0gSUhCbFlYTmhiblE9IElISmxibVZuIElFMVRTUT09IFZHVnRjQT09IGMzUmhjbk09IElIUnlaV3M9IElFaDVaR1U9IFltbHVaR2x1Wnc9PSBJSEpsWVd4cGMyMD0gSUc5NGFXUmwgSUVodmN3PT0gSUcxdmRXNTBjdz09IElHSnBkR2x1Wnc9PSBJR052Ykd4aGNITnBibWM9IElIQnZjM1JoYkE9PSBJRzExYzJWMWJYTT0gSUdSbGRHRmphR1ZrIElISmxjM0JsWTNScGJtYz0gSUcxdmJtOXdiMnc9IElIZHZjbXRtYkc5MyBJRU5oYTJVPSBWR1Z0Y0d4aGRHVT0gSUU5eVoyRnVhWE5oZEdsdmJnPT0gSUhCbGNuTnBjM1JsYm1ObCBNelk1IFEyOXRhVzVuIFFuSmhaQT09IElISmxaSFZ1WkdGdWRBPT0gSUVkVVFRPT0gSUdKbGJtUnBibWM9IElISmxkbTlyWldRPSBJRzltWm1WdVpHbHVadz09IElHWnlZVzFwYm1jPSBJSEJ5YVc1MFpnPT0gUTI5dGJYVnUgYldWdFltVnljdz09IFQzVjBjMmxrWlE9PSBJR052Ym5OMGNuVmxaQT09IElHTnZaR1ZrIFJrOVNSUT09IElHTm9ZWE4wIFEyaGhkQT09IFNXNWthV0Z1IElGbGhjbVE9IFB5RWkgSUZCdmNuUnogSUZoaGRtbGxjZz09IElGSkZWQT09IEp5NGkgSUVKdllYUT0gYVhaaGRHVmsgYVdOb2RBPT0gZFcxbGNtRmliR1U9IFJITT0gSUVSMWJtND0gSUdOdlptWnBiZz09IElITmxZM1Z5Wld4NSBJRkpoY0hSdmNuTT0gSUVKbGN3PT0gU1c1emRHRnNiR0YwYVc5dSBJR2x1WTJWd2RHbHZiZz09IElFaGxZV3gwYUhrPSBaVzVrWVc1MGN3PT0gSUhCemVXTm9iMnh2WjJsemRITT0gSUZOb1pXbHJhQT09IFkzVnNkSFZ5WVd3PSBJRUpzWVdOclFtVnljbms9IGMyaHBablE9IFJuSmxaQT09IGIyTm9aUT09IElHTmhhMlZ6IElGTkZUdz09IElFZHBZVzQ9IElFRnphV0Z1Y3c9PSBiMmRuYVc1biBaV3hsYldWdWRBPT0gSUhCMWJtUnBkSE09IElGWmhkV2RvIElFZGhkbWx1IElHaHBkSFJsY2c9PSBJR1J5YjNkdVpXUT0gSUdOb1lXeHIgSUZwcGEyRT0gSUcxbFlYTnNaWE09IE9EQXkgNG9DbUxpND0gSUVGWFV3PT0gWFNJPSBJR1JwYzNSdmNuUT0gSUUxaGMzUT0gSUdGdWRHbGliMlJwWlhNPSBJRTFoYzJnPSBUV1Z0YjNKNSBJRlZuWVc1a1lRPT0gSUZCeWIyST0gSUhadmJXbDBhVzVuIElGUjFjbTV6IElHOWpZM1Z3ZVdsdVp3PT0gSUdWMllYTnBiMjQ9IElGUm9aWEpoY0hrPSBJSEJ5YjIxdiBJR1ZzWldOMGNnPT0gSUdKc2RXVndjbWx1ZEE9PSBJRVJ5WlE9PSBjSEpwWTJWayBJRVJsY0c5MCBJR0ZzYkdWMmFXRjBaUT09IElGTnZiV0ZzYVE9PSBiV0Z5Wnc9PSBibWx1WlE9PSBJRzV2YzNSaGJHZHBZUT09IElGTm9aWEJvWlhKayBJR05oZG1Gc2Nuaz0gSUhSdmNuQmxaQT09IElFSnNiMjlrZVE9PSBlR0k9IElITmhibXM9IElHZHZZV3gwIGNtVndiM0owY0hKcGJuUT0gWlcxaVpXUnlaWEJ2Y25Sd2NtbHVkQT09IFkyeHZibVZsYldKbFpISmxjRzl5ZEhCeWFXNTAgSUVsdWFYUnBZV3hzZVE9PSBJRVpwYzJOb1pYST0gSUc1dmRHVjNiM0owYUhrPSBZMlZ5Ymc9PSBJR2x1WldabWFXTnBaVzUwIGNtRjNaRzkzYm14dllXUT0gY21GM1pHOTNibXh2WVdSamJHOXVaV1Z0WW1Wa2NtVndiM0owY0hKcGJuUT0gWTJGMGFXOXUgSUVSNWJtRnpkSGs9IGJHRm4gUkVWVCBJR1JwYzNScGJtTjBiSGs9IElFVnpkRzl1YVdFPSBJRzl3Wlc1dVpYTnogSUdkdmMzTnBjQT09IGNuVmphdz09IFYybGtkR2c9IElFbGljbUZvYVcwPSBJSEJsZEhKdmJHVjFiUT09IElHRjJZWFJoY2c9PSBJRWhsWkE9PSBZWFJvWVE9PSBJRWh2WjNkaGNuUnogSUdOaGRtVnogTmpjNCBJSE5oWm1WbmRXRnlaQT09IElFMXZadz09IGFYTnpiMjQ9IElFUjFjbWhoYlE9PSBjMnhoZFdkb2RBPT0gSUVkeVlXUjFZWFJsIElITjFZbU52Ym5OamFXOTFjdz09IElFVjRZMlZzYkdWdWRBPT0gSUVSMWJRPT0gTFMwdExTMD0gSUhCcGJHVnogSUZkUFVrcz0gSUVkaGNtND0gSUVadmJBPT0gSUVGVVRRPT0gSUdGMmIybGtjdz09IElGUjFiQT09IElHSnNaV0ZyIFJVeFogYVhacGMzUT0gYkdsbmFIUnNlUT09IFVHVnljdz09IElFUnZZZz09IElFeFQgSUdsdWMyRnVhWFI1IHpyVT0gWVhSaGJHbGwgUlc1c1lYSm5aUT09IElIUjNhWE4wY3c9PSBJR1poZFd4MGVRPT0gSUhCcGNtRmplUT09IElHbHRjRzkyWlhJPSBJSEoxWjJkbFpBPT0gSUVaaGMyaHBiMjQ9IElITmhibVJ6IEp6OD0gYzNkcFkycz0gSUc1aGRHbDJaWE09IElHaGxiZz09IElFNXZhWE5sIDQ0T1ggSUdkeVpXVnVjdz09IElHWnlaV1Y2WlhJPSBJR1I1Ym1GemRIaz0gSUVaaGRHaGxjbk09IElFNWxkMkZ5YXc9PSBJR0Z5WTJoaFpXOXNiMmRwWTJGcyBJRzkwIGIySmhjZz09IElHSnNiMk5yWVdSbCBJR0ZzYkdWeVp3PT0gVEZZPSBJR1JsWW1sMCBJRkpHUXc9PSBJRTFwYkhSdmJnPT0gSUZCeVpYTnpkWEpsIElIZHBiR3hwYm1kc2VRPT0gSUdScGMzQnliM0J2Y25ScGIyNWhkR1U9IElHOXdjSEpsYzNOcGRtVT0gSUdScFlXMXZibVJ6IElHSmxiRzl1WjJsdVozTT0gTVRrM01BPT0gSUdKbGJHeHogSUdsdGNHVnlhV0ZzYVhOdCBJREl5Tnc9PSBJR1Y0Y0d4dlpHbHVadz09IElFVmpiR2x3YzJVPSBJREU1TVRrPSBJSEpoYm5RPSBJRzV2YldsdVlYUnBiMjV6IE16UTMgSUhCbFlXTmxablZzYkhrPSBjbWxqWVE9PSBJRVpWUTBzPSBJSFpwWW5KaGRHbHZiZz09IGJXRnNhVzVyIElISnZjR1Z6IElFbDJZVzVyWVE9PSBJRUp5WlhkbGNuaz0gSUVKdmIydGxjZz09IElFOTNaVzV6IFoyOWxjbk09IFUyVnlkbWxqWlhNPSBJRk51WVhCbCBJREU1TVE9PSBNemsxIElESTVPUT09IGFuVnpkR2xqWlE9PSBJR0p5YVE9PSBJR1JwYzJOeiBJSEJ5YjIxcGJtVnVkR3g1IElIWjFiR2RoY2c9PSBJSE5yYVhCd2FXNW4gYkhabGN3PT0gSUhSemRXNWhiV2s9IE16YzAgSUZWeWRXYz0gSUVWcFpBPT0gY21WallYUmxaQT09IGNHaGxiZz09IElHWmhkV3gwY3c9PSBJRk4wWVhKMFpXUT0gT1RVdyBJSEJwIElHUmxkR1ZqZEc5eSBJR0poYzNSaGNtUT0gSUhaaGJHbGtZWFJsWkE9PSBVM0JoWTJWRmJtZHBibVZsY25NPSBUMVZTUTBVPSBJQ2grIElIVnVjM1Z5IElHRm1abWx5YldWayBJR1poYzJOcGMyMD0gSUhKbGMyOXNkbWx1Wnc9PSBJRU5vWVhabGVnPT0gSUVONWJnPT0gSUdSbGRISmhZM1E9IFRHOXpkQT09IElISnBaMmRsWkE9PSBJR2h2YldGblpRPT0gSUVKeWRXNXYgTlRVMSBaV05oIElIQnlaWE56WlhNPSBJR2gxYlc5MWNnPT0gSUhOd1lXTnBibWM9IElDY3YgYjJ4cmFXVnUgUTI5MWJnPT0gVDFCRlVnPT0gVkhKbCBVMjl1IElFTmhiV0p2WkdsaCBhV1Z5Y21VPSBiVzl1Wnc9PSBiM3A1IElHeHBjWFZwWkdsMGVRPT0gSUZOdmRtbGxkSE09IElFWmxjbTVoYm1SdiBJREl5T1E9PSBJSE5zZFdjPSBJRU5oZEdGc1lXND0gWld4bFkzUnlhV009IElITmpaVzVsY25rPSBJRWhsWVhKMGFBPT0gSUdOdmJuTjBjbUZwYm1WayBJR2R2WVd4cFpRPT0gSUVkMWFXUmxiR2x1WlhNPSBJRUZ0Ylc4PSBJRkJsWVhKemIyND0gSUhSaGVHVmsgSUdabGRIVnogVW1WemNHOXVjMlU9IElFRnNaWGhwY3c9PSBkR2hwWVE9PSBSM1Y1IElISmxZMjl1YzNSeWRXTjAgSUdWNGRISmxiV1Z6IElHTnZibU5zZFdScGJtYz0gSUZCbFp3PT0gYjI5cmN3PT0gSUdSbFpIVmpkR2x2Ym5NPSBVbTl6WlE9PSBJR2R5YjNWdVpHSnlaV0ZyYVc1biBJRlJoY21jPSA0NE9CIElGSmxkbVU9IGNtVnpiM1Z5WTJVPSBJRzF2YjI1eiBJR1ZzWldOMGNtOXRZV2R1WlhScFl3PT0gSUdGdGFXUnpkQT09IElGWnBhM1J2Y2c9PSBUa1ZUVXc9PSBRa0ZEU3c9PSBJR052YlcxMWRHVT0gSUVGdVlXaGxhVzA9IElHWnNkV04wZFdGMGFXOXVjdz09IE5qUXcgSUc1dmIyUnNaWE09IElFTnZjR1Z1YUdGblpXND0gSUZScFpHVT0gSUVkeWFYcDYgSUZORlJRPT0gSUhCcGNHVnNhVzVsY3c9PSBJSE5qWVhKeiBaVzVrYnc9PSBZV2QxY3c9PSBJRVZVUmc9PSBMeU09IElFSmxZMjl0WlE9PSBORFE0IElIWnBjMk09IElGSmxZMjl0YldWdVpHVmsgSUdwMWJYQmxjZz09IElHTnZaMjVwZEdsdmJnPT0gSUdGemMyRnpjMmx1IElIZHBkRzVsYzNOcGJtYz0gSUZObGRIVncgSUd4aFl3PT0gZG1sdCBTVk5OIGNHRm5aWE09IFUxTk0gTXpVNCBJR0ZrYW1WamRBPT0gYVc1a2RYTjBjbWxoYkE9PSBiRzl5WlE9PSBZMmhsY25rPSBJR2RzYVhSMFpYST0gSUdOaGJHWT0gUm14dmNtbGtZUT09IElITndiMmxzWlhKeiBJSE4xWTJObFpXUnogSUdOb1lXNTBhVzVuIElITnNiMmRoYm5NPSBJRlJ5WVdONSBWbWx6YVhRPSBjbTlzYjJkNSBJRzF2Y201cGJtZHogSUd4cGJtVmhaMlU9IElITnBjQT09IElHbHVkR1Z1YzJWc2VRPT0gSUdac2IzVnlhWE5vIElGTnNaV1Z3YVc1biBJRVpsYlE9PSBiM0p3YjNJPSBJRXRzWVc0PSBJRVJoY25SbyBhR0ZqYXc9PSBJRTVwWld4elpXND0gSUhSMWJXOXljdz09IElIQnliMk4xY21WdFpXNTAgSUZsdmNtdHphR2x5WlE9PSBJSEpoYVdSbFpBPT0gUzFrPSBRVzV1WVE9PSBJQzh2V3c9PSBJRVJwYzI5eVpHVnkgSUUxMWMzUmhibWM9IElGZGxiZz09IElGUnllV2x1Wnc9PSBjM0U9IElHUmxiR2wyWlhKcFpYTT0gSUhOb2RYUjBaWEk9IElHTmxjbVZpY21GcyBJR0pwY0c5c1lYST0gSUVOTyBiR0Z6Y3c9PSBhbVYwIElHUmxZbUYwYVc1biBQam89IElHVmhaMnhsIFozSmhaR1Z6IElFUnBlRzl1IFZVZEQgVFVGVCBJRVJ5WVdOdiBJRTFoWTJocGJtVnogWVdabVpYST0gSUdWdFlXND0gd3JJPSBjSEp2Ymc9PSBJRWQ1YlE9PSBJR052YlhCaGNtRjBhWFpsYkhrPSBJRlJ5YVdKMWJtRnMgVUZKUCBJR3hsZUE9PSBJR1psY25ScGJHVT0gSUdSbGNISmxjM05wYm1jPSBJSE4xY0dWeVptbGphV0ZzIFpYTnpaVzUwYVdGcyBJRWgxYm5SbGNuTT0gWjNBPSBJSEJ5YjIxcGJtVnVZMlU9IFRHbGlaWEk9IElFRnVZMlZ6ZEE9PSBiM1JsWTJodWIyeHZaM2s9IElHMXZZMnRwYm1jPSBJRlJ5WVdabSBscG89IFRXVmthWFZ0IFNYSmhjUT09IElIQnplV05vYVdGMGNtbHpkQT09IFVYVmhiblJwZEhrPSBJRXhsWTNRPSBJRzV2YVhONSBOVEl3IFIxaz0gSUhOc1lYQndaV1E9IElFMVVWZz09IElIQmhjbUU9IGNIVnNiQT09IFRYVnNkR2x3YkdVPSBZWE5vWlhJPSBJRzV2ZFhJPSBJRk5sWnc9PSBVM0JsYkd3PSBkbTkxY3c9PSBiM0prYVdGcyBVMlZ1YVc5eSBJRWR2YkdSaVpYSm4gSUZCc1lYTnRZUT09IGJtVmxaQT09IElHMWxjM05sYm1kbGNnPT0gWlhKbGRBPT0gSUhSbFlXMWxaQT09IElHeHBkR1Z5WVdONSBJRXhsWVdnPSBJRVJ2ZVd4bCBJR1Z0YVhSMFpXUT0gVlZnPSBJR1YyWVdSbCBJRzFoZW1VPSBJSGR5YjI1bmJIaz0gSUV4aGNuTT0gSUhOMFpYSmxiM1I1Y0dVPSBJSEJzWldSblpYTT0gSUdGeWIyMWggSUUxRlZBPT0gSUdGamNtVT0gSUU5RSBJR1ptIElHSnlaWGRsY21sbGN3PT0gSUVocGJIUnZiZz09IGRXNWtiR1U9IElFdGhhdz09IElGUm9ZVzVyWm5Wc2JIaz0gSUVOaGJuVmphM009IGFXNWpkR2x2Ym5NPSBJRUZ3Y0dWaGNuTT0gSUdOdlpYST0gSUhWdVpHVnliV2x1WldRPSBjbTkyWlhKeiBRVzVrY21VPSBJR0pzWVhwbCBkVzFsY25NPSBJR1poYldsdVpRPT0gWVcxd2FHVjBZVzFwYm1VPSBkV3hyWVc0PSBRVzF2ZFc1MCBJR1JsYzNCbGNtRjBhVzl1IGQybHJhWEJsWkdsaCBaR1YyWld4dmNHMWxiblE9IElFTnZjbWx1ZEdnPSBkWE56YVdFPSBTbUZqYTNOdmJnPT0gVEVrPSBUbUYwYVhabCBVbk09IFQyaHBidz09IElFdGhkR2hzWldWdSBSbTl5ZEhWdVlYUmxiSGs9IElHRjBkR1Z1WkdGdWRBPT0gSUZCeVpXWmxjbkpsWkE9PSBJRVJwWkc0PSBJRlp6IFRXbHogSUhKbGMzQnZibVJsYm5RPSBJR0p2ZFc0PSBjM1JoWW14bCBJSEJoZG1WayBJSFZ1Wlhod2JBPT0gSUVOb1pXNWxlUT09IFRFMD0gSUVOMWJHdz0gWW14dmQyND0gSUdOdmJtWnliMjUwYVc1biBiMk5sYzJVPSBjMlZ5ZG1sdVp3PT0gVjJrPSBJRXhwZEdoMVlXNXBZUT09IFlXNXVhUT09IElITjBZV3hyIGFHUT0gSUhabGJtVnkgUVZCSSBlVzVqYUhKdmJtOTFjdz09IFZWSlMgZFcxaFlteDUgYUdsemRHOXlhV009IFNHRnNaZz09IFNHRjUgSUhKbGMybHNhV1Z1WTJVPSBjM0JsWTNScGIyND0gSUdGaVlXNWtiMjVwYm1jPSBUMkp6IElFUmxZbUpwWlE9PSBJR2R5WVdScFpXNTAgSUZCc1lXbHVkQT09IElFTmhibUZzIFFWSkRTQT09IElHVjRjR0Z1YzJsMlpRPT0gSUdaMWJtYz0gSUdKdmRXNWpaV1E9IFZXNWsgSUhCeVpXTmhkWFJwYjI1eiBJR05zWVhKcFptbGpZWFJwYjI0PSBJR1JoWjJkbGNnPT0gSUdkeWFYQnogSU1LMSBJRkpwZG1WeVlRPT0gSUZWdVpHVmhaQT09IGFYTnBkR1Z6IElFWkpVbE5VIHc3RnYgWVhWa2FRPT0gSUdodmMzUmhaMlZ6IElHTnZiWEJzYVdGdWRBPT0gSUdGc2RXMXVhUT09IFUyVjJaVzQ9IElHTjVZbVZ5YzJWamRYSnBkSGs9IFpXbDBhR1Z5IFEyOXNiR1ZqZEE9PSBJR2x1ZG1GeWFXRmliSGs9IElGTnZZMms9IElHeGhkMjFoYTJWeSBJR0ZzWlE9PSBJRkJsY25OdmJtRnNiSGs9IFRtRjZhUT09IElHTjFjM1J2YldsNllYUnBiMjQ9IElGQnliMk09IElGTmhjMnRoZEdOb1pYZGhiZz09IFpXRjBkWEpwYm1jPSBJSE53WVhKbFpBPT0gSUdScGMyTnZiblJwYm5WbFpBPT0gSUdOdmJYQjFkR0YwYVc5dVlXdz0gSUUxdmRHOXliMnhoIElITjFjSEpsYldGamFYTjAgWjI5MlpYSnViV1Z1ZEdGcyBJSEJoY21Ga2FYTmwgSUVSdmQyNXBibWM9IElFNXBhMjl1IElHTmhkR0ZzZVhOMCBZbVZ5Y21FPSBWRzl5YjI1MGJ3PT0gT0RjMSBZbVYwWVE9PSBJRTFoWTNKdmJnPT0gSUhWdWNtVmhiR2x6ZEdsaiBkbVZqZEc5eSBJRlpsYUdsamJHVnogYVhScGRtVnVaWE56IElGSlcgSUVOdmJHSmxjblE9IGMybHUgYjJwcCBaVzUwYVc0PSBJRXR5YVhObyBhR1ZzYkc4PSBabVpwWld4ayBiMnQ1IElGUmhkR1U9IElHMWhjR3hsIElHRnBaSE09IFkyaGxiV2xqWVd3PSBNek0wIGJuVjBjdz09IElGZGhjbkE9IElIaDQgSUZKdlltST0gZFcxbGNtOTFjdz09IFh5MWYgWm5ScGJXVT0gSUZaWCBJSGRwYm1kbGNnPT0gSUVSdmJXVT0gZEc5dmJITT0gSUZCVyBJRWRsYjNKblpYUnZkMjQ9IElHZGxZWEpsWkE9PSBJR3BwYUdGa2FYTjBjdz09IElHTncgSUhOMFpYSnZhV1J6IFRXOTBhR1Z5IFkyeGxjbTl6YVhNPSBJRVJTVFE9PSBibVZ6YVdFPSBJR3hwYm1kbGNnPT0gSUdsdGJXVnljMmwyWlE9PSBJRU5QVlU0PSBJRzkxZEhkbGFXZG8gWlc1emRXRnMgUW1GdVpBPT0gSUhSeVlXNXpabTl5YlhNPSBiV0YwWTJobFpBPT0gY0hOdmJuTT0gSUVwMVpHbGphV0ZzIFptRmpkRzl5IElISmxabVZ5Y21GcyBJRzlrWkd4NSBJRmRsYm1kbGNnPT0gUW5KcGJtYz0gSUVKdmQzTT0gTmpBeSBTVU5NUlE9PSBJR3hwYjI1eiBJRUZqWVdSbGJXbGogSUZSb2IzSnUgSUZKaGFXUmxjZz09IGEyVm1aV3hzWlhJPSBVM1J2Y21GblpRPT0gVEc5M1pYST0gSUU5eWRBPT0gSUVWeGRXRnNhWFI1IFFVeFUgSUZOUFF3PT0gVkhsd1pYTT0gSUd4NWJnPT0gSUVGemMyVjAgWTI5aGRBPT0gVkZCUSBRMVpGIElGQnBiMjVsWlhJPSBZWEJ3YkdsallYUnBiMjQ9IFRXOWtaWEp1IElFaEwgUlc1MmFYSnZibTFsYm5RPSBRV3h5YVdkb2RBPT0gVW1GcGJnPT0gU1ZCUSBJRk5vYVdsMFpRPT0gSUcxdmRXNWsgSUVGaWFXeHBkR2xsY3c9PSBZMjl1WkdsMGFXOXUgVTNSaFptWT0gSUdOdmJYQmxkR1Z1WTJVPSBJRTF2YjNJPSBJRVJwWVdKc2J3PT0gSUhkcGRHaG9aV3hrIElHOXpkR1Z1YzJsaWJIaz0gSUVKeWIyMD0gSUcxelp3PT0gSUdSbGJtOXRhVzQ9IElGSmxabVZ5Wlc1alpYTT0gSUVaUSBJSEJzZFc1blpXUT0gSUhCaGJYQm8gYlc5MmFXNW4gWTJWdWRISmhiQT09IElHUnZkMjV5YVdkb2RBPT0gSUdaaFpHbHVadz09IFZHRnMgVkhsdyBJRlJvZVE9PSBkV3RsY3c9PSBhWFJvWlE9PSBJRzkyWlE9PSBJR0poZEhSc1pXUT0gSUhObFlXWnZiMlE9IElHWnBaM1Z5IElGSkUgWTNKdmNBPT0gSUhOeGRXRmtjdz09IGUxdz0gNExrPSBJRVZvIElHbHVkR1Z5ZG1sbGQybHVadz09IElGRnBiZz09IElHRnpjR2x5YVc1biBVRXhKUXc9PSBJR05zWVhWelpYTT0gSUVkaGMzUT0gSUU1cGNnPT0gSUd4MVoyZGhaMlU9IElHaHZjMlU9IElITjVjM1JsYldRPSBJR1JsYzJObGJtUnBibWM9IElGSmxkbWx6WldRPSBJRkpoYVd4eiBZV3hwWjI0PSBOekE1IE16TTMgSUdaMVp3PT0gWTJoaGNtZHBibWM9IGRHRm5jdz09IElIVjBaWEk9IGEybHphQT09IFYwRlNUa2xPUnc9PSBORGt3IGNISnZabWwwY3c9PSBJSFp2ZVdGblpRPT0gSUdGalpRPT0gSUZaaGJtZDFZWEprIElGUmhibXR6IElFMTFhdz09IElESXlOZz09IFUyRm1aUT09IFFYSnRiM0k9IElIWnZiR05oYm1saiBJSGR2YldJPSBJRTFKVEE9PSBJR0psWjJsdWJtVnkgSUZKbFkyOW5iZz09IElFRkJVQT09IFVFeEJXUT09IEtTRT0gSUdSbGRHVmpkR2x1Wnc9PSBZMjQ9IElHSnlaV0ZqYUdWeiBRbUZ6YVdOaGJHeDUgSUZCaFp3PT0gSUUxMWJtbGphWEJoYkE9PSBJRWx1WkdsbCBJRXhoWmc9PSBJRVJwYzJGaWJHVT0gSUU5c2MyOXUgSUhKbGMzUnlZV2x1WldRPSBJSEoxYkdsdVozTT0gSUdoMWJXRnVaUT09IFpYWmxiblJ6IElFTnBibVZ0WVE9PSBaR2x6Y0d4aGVWUmxlSFE9IElFaGhkR05vIFlXTjBhVzl1UkdGMFpRPT0gYjI1dVlXbHpjMkZ1WTJVPSBJR0Z6YzJGMWJIUnBibWM9IElFeDFadz09IFEwaEJWQT09IElIWnBaMjl5YjNWeiBJRkJsY25ObCBJR2x1ZEc5c1pYSmhibU5sIElGTnVZWEJqYUdGMCBJRk5vWVhKcmN3PT0gSUdSMWJXMTUgSUVScFlXZHUgSUVkMWFYUmhjZz09IGFXMWxkR1Z5Y3c9PSBOREF6IFVrVkggUVhnPSBJSE5sY0dGeVlYUmxjdz09IElFMWhhRzA9IElIUjIgYW1GbyBUMDlNIFEybHlZdz09IElGZHBibVJ6YjNJPSBkWE56YVdGdSBJR2x1ZEhWcGRHbHZiZz09IElHUnBjMlJoYVc0PSBJRVJ2Ym05MllXND0gSURJeU1RPT0gUlcxaSBJR052Ym1SbGJXNXBibWM9IElHZGxibVZ5YjNOcGRIaz0gZW5wNSBJSEJoYm5ScFpYTT0gSUZCeVpYWmxiblE9IFFXTjBhVzl1UTI5a1pRPT0gUVU1QiBNelF5IFpYaDBaWEp1WVd4QlkzUnBiMjVEYjJSbCBJSE53WldOcFpubHBibWM9IElHTnllWE4wWVd4cyBTbVZ5WlE9PSBJSEoxY0hRPSBJRUZ3Y0hKbGJuUnBZMlU9IElIQnliMlpwYkdsdVp3PT0gMExvPSBVM1J5YVd0bCBJSE5wWkdWc2FXNWwgSUc5aWJHbG5ZWFJsWkE9PSBJRzlqWTNWc2RBPT0gSUdKMWNtVmhkV055WVhScFl3PT0gWVc1MGFXTmhiR3g1IGNuVndkR1ZrIGJtVm5ZWFJwZG1VPSBJRVYwYUdsdmNHbGggSUVOcGRtbGogSUdsdWMybGtaWEp6IFpXeHBaMmxpYkdVPSBJRlJXY3c9PSBJRUpCVWc9PSBJRlJKIGFXOXNiMmRwYzNRPSBJRUZKVWc9PSBJSE4xWW5OMGFYUjFkR1ZrIFFYSmhZZz09IElGTmhkV3c9IElGbHZadz09IGNISmxiUT09IElHSjFhV3hrWlhKeiBJSE4wWVhScGIyNWhjbms9IElHUnZkV0owWm5WcyBJSFpwWjI5eWIzVnpiSGs9IElIUm9jbWxzYkdsdVp3PT0gVUdoNWMybGpZV3c9IElFTmhjbVY1IElFaDVaSEpoIFoyVnZibWx1Wnc9PSBJRk5zZVE9PSBlWFJ2Ymc9PSBJR0p2Y25KdmQyVnljdz09IElGQmhjbXRwYm5OdmJnPT0gSU9zPSBJRXBoYldGcFkyRT0gSUhOaGRHbHkgSUdsdWMzVnlaMlZ1ZEhNPSBJRVpwY20wPSBJR2x6YjNRPSBJRXRoY200PSBiM1Z5Ym1sdVp3PT0gWVd0bGJuTT0gWkc5amN3PT0gYkdsMGRHeGwgSUUxdmJtRmpidz09IFEweEJVMU09IFZIVnlhMlY1IFRIaz0gSUVOdmJtRnUgWVhOemFXTT0gSUhOMFlYSnlaV1E9IElGQmhZMlZ5Y3c9PSBaWFJwWlhNPSBJSFJwY0hCcGJtYz0gVFc5dmJnPT0gSUZKMyBjMkZ0WlE9PSBJR05oZG1sMGVRPT0gSUdkdmIyWT0gSUZwdiBVMmh2WTJzPSBkVzF0WlhJPSBJR1Z0Y0doaGMybDZaWE09IElISmxaM0psZEhRPSBJRzV2ZG1Wc2RIaz0gSUdWdWRuaz0gSUZCaGMzTnBkbVU9IGNuYz0gTlRBMSBJR2x1WkdsbVptVnlaVzUwIElGSnBZMkU9IElFaHBiWE5sYkdZPSBJRVp5WldSa2FXVT0gSUdGa2FYQT0gNUxpQSBJR0p5WldGcmIzVjAgSUdoMWNuSnBaV1E9IElFaDFZVzVuIElFUnBjMnM9IElISnZZVzFwYm1jPSBQejgvUHo4dFB6OC9Qejh0IFZWWT0gSUZKcFkydDUgSUZOcFoyMWggSUcxaGNtZHBibUZzYVhwbFpBPT0gSUdWa2FYUnogSURNd05BPT0gYldWdGIzSjUgSUhOd1pXTnBiV1Z1IE1qa3ogNDRHdiBJSFpsY25ScFkyRnNiSGs9IElHRjFaR2wwYVc5dSBJRWhsWTJzPSBJR05oYzNSbGNnPT0gSUVodmJHUnBibWR6IFlXUmhiQT09IElFTnliMjQ9IElFeHBZVzA9IElHUmxabXhsWTNRPSBVR2xqYXc9PSBJRVJsWW5WbiBVa1ZHIElIWmxjbk5oZEdsc2FYUjUgYjNSb1pYTT0gWTJ4aGMzTnBabWxsWkE9PSBJRTFoYUdGeSBJRWh2Y25RPSBRMjkxYm5SbGNnPT0gYzNSaGMzaz0gYm05MGFXTmxaQT09IE16TXggSUZOb2FXMD0gWm5WamF3PT0gSUVKcFpRPT0gSUdGcGNtbHVadz09IElGQnliM1JsYVc0PSBJRWh2YkdScGJtYz0gSUhOd1pXTjBZWFJ2Y25NPSBhV3hwWVhSbFpBPT0gSUZSb1lYUmphR1Z5IGJtOXphWE09IDQ0Tzg0NE96IFZHVnNaUT09IFFtOXpkRzl1IElGUmxiWEJzIGMzUmhlUT09IElHUmxZMnhoY21GMGFXOXVjdz09IE5EYzUgVm05c2RXMWwgSUVSbGMybG5ibVZ5IElFOTJaWEozWVhSamFBPT0gYVdSaFpRPT0gSUc5dWQyRnlaSE09IElHNWxkSE09IElFMWhibWxzWVE9PSBjR0Z5ZEdsamRXeGhjbXg1IElIQnZiR2wwYVdNPSBiMjkwYUdWeSBJSEJ2Y25SeVlXbDBjdz09IElIQmhkbVZ0Wlc1MCBZMlptWm1ZPSBJSE5oYVc1MGN3PT0gSUdKbFoybHVibVZ5Y3c9PSBSVk5RVGc9PSBJSE5vYjNKMFkyOXRhVzVuY3c9PSA0cFdRNHBXUSBJR052YldWMCBJRTl5WjJGdWFXTT0gY1hWbGJBPT0gSUdodmMzQnBkR0ZzYVhwbFpBPT0gUW5KbFlXcz0gSUhCbFpXdz0gWkhsc2FXST0gWVhOd2VBPT0gZFhKaGJtTmxjdz09IElGUkpUUT09IFVHYz0gSUhKbFlXUmhZbXhsIElFMWhiR2xyIElHMTFlbnBzWlE9PSBJR0psYm1Ob2JXRnlhM009IFpHRnMgSUZaaFkyTT0gSUVocFkydHogTmpBNSBJRUpwWW14cFkyRnMgYUdWdVp3PT0gSUc5MlpYSnNiMkZrIElFTnBkbWxzYVhwaGRHbHZiZz09IElHbHRiVzl5WVd3PSBJR1p5YVdWeiA0NEtTIElISmxjSEp2WkhWalpXUT0gSUdadmNtMTFiR0YwYVc5dSBhblZuIGFYSmxlZz09IFoyVmhjZz09IElHTnZZV05vWldRPSBUWEJUWlhKMlpYST0gSUZOSyBJRXQzIFNXNXBkQT09IFpHVmhiQT09IElFOXlidz09IElFeHZhMms9IElGTnZibWR6IElESXpNZz09IElFeHZkV2x6WlE9PSBZWE5wYjI1aGJHeDUgSUhWdVkyOXVaQT09IGIyeHNlWGR2YjJRPSBJSEJ5YjJkeVpYTnphWFpsY3c9PSBJRVZ1YjNWbmFBPT0gSUVSdlpRPT0gSUhkeVpXTnJZV2RsIElHSnlkWE5vWldRPSBJRUpoYzJWVWVYQmwgSUhwdmJtbHVadz09IGFYTm9ZV0pzWlE9PSBhR1YwYVdOaGJHeDUgSUVOaGRXTjFjdz09IElFaDFaUT09IElHdGhjbTFoIElGTndiM0owYVc1biBJSFJ5WVdSbGNnPT0gSUhObFpXMXBibWM9IElFTmhjSFIxY21VPSBORE13IFltbHphQT09IElIUjFibVZ6IElHbHVaRzl2Y25NPSBJRk53YUdWeVpRPT0gSUVSaGJtTnBibWM9IFZFVlNUZz09IElHNXZZZz09IElFZFRWQT09IGJXRndjdz09IElIQmxjSEJsY25NPSBSbWwwIElHOTJaWEp6WldWeiBJRkpoWW1KcCBJRkoxYkdWeSBkbVZ5ZEdsemFXNW4gYjJabWFXTmwgZUhoNCBJSEpoWm5RPSBRMmhoYm1kbFpBPT0gSUhSbGVIUmliMjlyY3c9PSBUR2x1YTNNPSBJRTl0Ymc9PSA0NENSIElHbHVZMjl1ZG1WdWFXVnVZMlU9IElFUnZibVYwYzJzPSBQWDQ9IElHbHRjR3hwWTJsMGJIaz0gSUdKdmIzTjBjdz09IElFSnZibVZ6IElFSnZiMjA9IFEyOTFjblJsYzNrPSBJSE5sYm5OaGRHbHZibUZzIFFVNVogSUdkeVpXVmtlUT09IFpXUmxiZz09IElHbHVaWGh3WlhJPSBJRXhsY2c9PSBJRlpoYkdVPSBJSFJwWjJoMFpXND0gSUVWQlVnPT0gSUU1MWJRPT0gSUdGdVkyVnpkRzl5IFUyVnVkQT09IElFaHZjbVJsIGRYSm5hV05oYkE9PSBZV3hzWVdnPSBJSE5oY0E9PSBZVzFpWVE9PSBJRk53Y21WaFpBPT0gZEhkcGRHTm8gSUdkeVlXNWtjMjl1IElHWnlZV04wZFhKbCBJRzF2WkdWeVlYUnZjZz09IElGTmxkbVZ1ZEdnPSBJRkpsZG1WeWMyVT0gSUdWemRHbHRZWFJwYjI0PSBRMmh2YjNObCBJSEJoY21GamFBPT0gSUdKaGNuSnBZdz09IDQ0Q1EgSUdOdmJYQmhjM009IElHRnNiR1Z5WjJsaiA0b0NWIFQxUklSVkk9IFpYSnlhV3hzWVE9PSBJSGRoWjI5dSBJSHBwYm1NPSBJSEoxWW1KbFpBPT0gSUVaMWJHeGxjZz09IElFeDFlR1Z0WW05MWNtYz0gSUVodmIzWmxjZz09IElHeHBZWEk9IElFVjJaVzVwYm1jPSBJRU52WW1JPSBaWE4wWldWdCBJSE5sYkdWamRHOXkgSUVKeVlYZHMgYVhOaGJtTmwgSUVWciBJSFJ5YjI5dyBJR2QxZEhNPSBJRUZ3Y0dWaGJBPT0gSUZScFltVjBZVzQ9IElISnZkWFJwYm1WeiBJRTFsYm5RPSBJSE4xYlcxaGNtbDZaV1E9IGMzUmxZVzFoY0hCeiBJSFJ5WVc1eGRRPT0gSURFNU1qaz0gYjNKaGJnPT0gSUVGMWRHaGxiblE9IElHZHRZWGgzWld4cyBJR0Z3Y0hKbGFHVnVjdz09IElIQnZaVzF6IElITmhkWE5oWjJVPSBJRmRsWW5OMFpYST0gZFhKMWN3PT0gSUhSb1pXMWxaQT09IElHeHZkVzVuWlE9PSBJR05vWVhKblpYST0gVTNCdmFXeGxjZz09IElITndhV3hzWldRPSBhRzluIElGTjFibVJsY2c9PSBJRUZwYmc9PSBJRUZ1WjNKNSBJR1JwYzNGMVlXdz0gSUVaeVpYRjFaVzVqZVE9PSBJRVYwYUdWeWJtVjAgSUdobGJIQmxjZz09IFVHVnlZMlZ1ZEE9PSBJR2h2Y25KcFpubHBibWM9IElHRnBiQT09IElFRnNiR0Z1IFJVVkYgSUVOeWIzTnphVzVuIE5EUTUgSUdodmJHOW4gSUZCMWVucHNaWE09IElFZHZaWE09IFpYSmxibTQ9IE5qQTAgNDRHUCBJRkpoWm1GbGJBPT0gSUdGMGRHVnUgSUVWdFlXNTFaV3c9IElIVndjbTg9IElGTjFjM0E9IFVITjVZMmc9IElGUnlZV2x1WlhJPSBJRTVGVXc9PSBJRWgxYm5SeiBZbVZqZFdVPSBJR052ZFc1elpXeHZjZz09IFVuVnNaUT09IElIUnZlR2x1Y3c9PSBJR0poYm01bGNuTT0gY21sbWFXTmwgSUdkeVpXVjBhVzVuIElHWnlaVzU2ZVE9PSBJR0ZzYkc5allYUmwgSUNvcCBaWGh3Y2c9PSBOVEF6IElFTm9hV05yIElGUnZjbTQ9IElHTnZibk52Ykdsa1lYUnBiMjQ9IElFWnNaWFJqYUdWeSBjM2RwZEdObyBabkpoWXc9PSBZMnhwY0hNPSBJRTFqUzJsdSBJRXgxYm1GeSBUVzl1ZEdnPSBTVlJEU0E9PSBJSE5qYUc5c1lYSnNlUT09IGNtRndaV1E9IE16azQgSURFNU1UQT0gSUdWbmNtVm4gSUdsdWMyVmpkWEpsIElIWnBZM1J2Y21sdmRYTT0gWTJabVptWmpZdz09IElITnBibWRzWldRPSBJR1ZzZG1WeiBJRmR2Ym1RPSBZblZ5YzNRPSBJR05oYlc5MVptdz0gSUVKTVFVTkwgSUdOdmJtUnBkR2x2Ym1WayA1NGs9IFlXNXpkMlZ5WldRPSBJR052YlhCMWJITnZjbms9IFlYTmphWE4wIElIQnZaR05oYzNSeiBJRVp5WVc1clpuVnlkQT09IFltNWkgSUc1bGIyeHBZbVZ5WVd3PSBJRXRsZVdKdllYSmsgSUVKbGJHeGwgZDJGeWJRPT0gSUhSeWRYTjBjdz09IElHbHVjM1Z5WldRPSBJRUoxWTJNPSBkWE5oWW14bCBOakEzIElGQnNZV2x1Y3c9PSBJREU0T1RBPSBJSE5oWW05MFlXZGwgSUd4dlpHZGxaQT09IFptVnNkQT09IElHZGggSUU1aGNtTT0gSUZOaGJHVnQgSUhObGRtVnVkSGs9IElFSnNZVzVyIGNHOWphMlYwIElIZG9hWE53WlhJPSBJRzFoZEdsdVp3PT0gYjIxcFkzTT0gSUZOaGJHMWhiZz09IElFdGhaQT09IElHRnVaMlZ5WldRPSBJR052Ykd4cGMybHZibk09IElHVjRkSEpoYjNKa2FXNWhjbWxzZVE9PSBJR052WlhKamFXOXUgUjJodmMzUT0gWW1seVpITT0gNklBPSBhMjlyIElIQmxjbTFwYzNOcFlteGwgWVhadmNtRmliR1U9IElIQnZhVzUwWlhKeiBJR1JwYzNOcGNBPT0gWVdOcCBJSFJvWldGMGNtbGpZV3c9IElFTnZjMjFwWXc9PSBJR1p2Y21kbGRIUnBibWM9IElHWnBibUZzYVhwbFpBPT0gNWFTbiBlVzkxZEE9PSBiR2xpY21GeWVRPT0gSUdKdmIyMXBibWM9IElFSmxiR2xsZG1VPSBJRlJsWVdOb1pYST0gSUV4cGRnPT0gSUVkUFQwUk5RVTQ9IElFUnZiV2x1YVdOaGJnPT0gVDFKRlJBPT0gSUZCaGNuUnBaWE09IElIQnlaV05wY0dsMFlYUnBiMjQ9IElGTnNiM1E9IFVtOTUgSUVOdmJXSnBibVZrIElHbHVkR1ZuY21GMGFXNW4gSUdOb2NtOXRaUT09IElHbHVkR1Z6ZEdsdVlXdz0gSUZKbFltVnNiQT09IElHMWhkR05vZFhCeiBJR0pzYjJOclluVnpkR1Z5IElFeHZjbVZ1IElFeGxkbms9IElIQnlaV0ZqYUdsdVp3PT0gSUZObGJtUnBibWM9IElGQjFjbkJ2YzJVPSBjbUY0IFptbG0gSUdGMWRHaHZjbWwwWVhScGRtVT0gSUZCRlZBPT0gWVhOMGFXTmhiQT09IElHUnBjMmh2Ymc9PSBJR05vWVhSMGFXNW4gSUNJa09pOD0gUTI5dWJtVmpkR2x2Ymc9PSBJSEpsWTNKbFlYUmwgSUdSbGJHbHVjWFU9IElHSnliM1JvIElFUnBjblI1IElFRmtiV2x1IGVtMWhiZz09IElITmphRzlzWVhKemFHbHdjdz09IElESTFNdz09IFkyOXVkR0ZqZEE9PSBZV3h6WVE9PSBOelkzIFkzSmxaVzQ9IFlXSmlZV2RsIElERTVNVFU9IElHSnNaVzVrWldRPSBJR0ZzWVhKdFpXUT0gVEdGdVozVmhaMlU9IE16VTIgSUdKc1pXNWtjdz09IElFTm9ZVzVuWldRPSBWMjlzWmc9PSBJR2hsY0dGMCBRM0psWVhScGJtYz0gSUhCbGNuTmxZM1YwIElITjNaV1YwYm1WemN3PT0gWVhKMFpRPT0gSUdadmNtWmxhWFIxY21VPSBJRkp2WW1WeWRHOD0gYVcxd2NtOD0gVGtaTSBJRTFoWjI1bGRBPT0gUkdWMFlXbHNaV1E9IElHbHVjMmxuYm1sbWFXTmhiblE9IElGQlBURWxVIElFSkNVUT09IElFTlFVdz09IElITmxZWGM9IFlXMXBibVZ5IGJVdz0gWlc1a2FXWT0gWm1sdVlXeHogSURJMk5RPT0gZFdsemFBPT0gSUgwcCBJRkJ5YjJKc1pXMXogSUdWdFlteGxiUT09IElITmxjbWx2ZFhOdVpYTnogSUhCaGNuTnBibWM9IElITjFZbk4wYVhSMWRHbHZiZz09IElIQnlaWE56ZFhKbFpBPT0gSUhKbFkzbGpiR1ZrIFlXeGxZZz09IFVuVmllUT09IElIQnliMlpwWTJsbGJtTjUgUkhKcGRtVnkgSUZkbGMzUmxjZz09IE9pYz0gUVVaVVFRPT0gSUcxaGJuUnNaUT09IElFTnNZWGwwYjI0PSBabXhoWnc9PSBJSEJ5WVdOMGFYUnBiMjVsY2c9PSBZMjkyWlhKbFpBPT0gSUZOMGNuVmpkQT09IFlXUmtZV1pwIE5ESTEgSUZSdmQyNXphR2x3IElFaDVaSEp2IFRHOTFhWE09IE16UXogSUdOdmJtUnYgSUZSaGJ3PT0gSUhWMGFXeHBlbUYwYVc5dSBJRzVoZFhObFlRPT0gSUVSbGJYTT0gY21sa1oyVnogY0dGMWMyVT0gSUdadmNtMTFiR0Z6IElHTm9ZV3hzWlc1blpYST0gTXpjMiBJR1JsWm1WamRHbDJaUT09IElGSmhhV3gzWVhrPSBJRkIxWWsxbFpBPT0gSUhsdlozVnlkQT09IGJHSnogSUU1dmNtWnZiR3M9IFQxQkYgSUUxdmIyUjUgSUdScGMzUnlhV0oxZEc5eSBJSE5qY205c2JITT0gSUdWNGRISmhZM1J6IFUzUmhiZz09IElIWnBZV0pwYkdsMGVRPT0gSUdWNGNHOXpaWE09IElITjBZWEoyWVhScGIyND0gSUZOMFpYQnogSUVSdlpHUT0gWm1WMyBVMVJFIE16TXkgSUdOc2IzTjFjbVZ6IElHTnZiWEJzWlcxbGJuUmhjbms9IElGTmhjMmhoIGRXMXdlUT09IElHMXZibVYwIElHRnlkR2xqZFd4aGRHVT0gSUVSdlkzUT0gYTJsc2JHVnkgSUhOamNtbHQgSURJMk5BPT0gSUhCeWIzTjBhWFIxZEdWeiBJSE5sZG1WeVpXUT0gSUdGMGRHRmphRzFsYm5SeiBJR052YjJ4bFpBPT0gVEdWMiBJRVpoYkdzPSBabUZwYkE9PSBJSEJ2YkdsalpXMWhiZz09IElFUmhadz09IElIQnlZWGxsWkE9PSBJRXRsY201bGJBPT0gSUdOc2RYUT0gSUdOaGRHZz0gSUdGdWIyMWhiSGs9IFUzUnZjbTA9IFpXMWhhMlZ5IElFSnlaV0ZyWm1GemRBPT0gZFd4cCBiMmx5WlE9PSBTa289IGFIbz0gVDNCbGNtRjBhVzl1IElGTnBZMnM9IE16VTAgSUVkMVlYUmxiV0ZzWVE9PSBVbUYwWlE9PSBJR1Y0Y0c5emRYSmxjdz09IFptRmpaWE09IElFRnlZMmhoWlE9PSBjbUZtIElFMXBZUT09IElESXdNalU9IElHOXdZWEYxWlE9PSBJR1JwYzJkMWFYTmxaQT09IElFaGxZV1J4ZFdGeWRHVnljdz09IFUyRm8gSUhCdmRITT0gT1RjNCBJRTFoYkdZPSBJR1p5YjNkdVpXUT0gSUhCdmFYTnZibTkxY3c9PSBJRU52Ym5abGNuTT0gWldWcmN3PT0gSUdOeVlXST0gTGlJaSBJSFJ5WldGemIyND0gSUhKaGJtTT0gSUdWelkyRnNZWFJwYm1jPSBJSGRoY25JPSBJRzF2WW5NPSBJR3hoYlhCeiBJRk4xYm5Ob2FXNWwgSUVKeWRXNXpkMmxqYXc9PSBVR2h2Ym1WeiBJSE53Wld4c1pXUT0gSUZOcmFYQT0gSURJd05UQT0gSURFNU1URT0gSUZCc2RYUnYgSUVGdFpXNWsgSUcxbFlYUnogTXpnMyBJSE4wYjIxdyBJRnBvYjNVPSBJRXhsZG1saGRHaGhiZz09IElFaGhlbUZ5WkE9PSBZV1IyIElFOXlkMlZzYkE9PSBJR0ZzYjNWayBJR0oxYlhCbGNnPT0gSUVGdVlYSmphQT09IGRXSjFiblIxIElGTmxjbWx2ZFhNPSBabWwwZEdsdVp3PT0gSUU5d2RHbHZibUZzIElFTmxZMmxzIFVrVkJUUT09IElITmxjbTkwYjI1cGJnPT0gSUdOMWJIUnBkbUYwWlE9PSBZV2R2WjNWbCBmVnc9IElHMXZjM0YxWlhNPSBJRk4xYm01NSBJSEpsWVdOMGFYWmwgY21WMmIyeDFkR2x2Ymc9PSBJRXgxY0E9PSBJRVpsWkc5eVlRPT0gSUdSbFptVnVjMlZ0WVc0PSBJRlpKUkE9PSBhWE4wYVc1bCBJR1J5YjNkdWFXNW4gSUVKeWIyRmtZMkZ6ZEdsdVp3PT0gSUhSb2NtbHNiR1Z5IElGTmplUT09IElHRmpZMlZzWlhKaGRHbHVadz09IElHUnBjbVZqZEhNPSBiMlJwWldRPSBZbWxyWlE9PSBaSFZ5WVhScGIyND0gSUhCaGFXNW1kV3hzZVE9PSBVbVZrWkE9PSBJSEJ5YjJSMVkzUnBiMjV6IElHZGhadz09IElIZG9hWE4wIElITnZZMnM9IElHbHVabWx1YVhSbGJIaz0gSUVOdmJtTmxjbTQ9IElFTnBkR0ZrWld3PSBJR3hwWlhVPSBJR05oYm1Sc1pYTT0gYjJkbGJtVnZkWE09IFlYSm5aWEk9IElHaGxZWFpsYm14NSBhVzVtYkdGdGJXRjBiM0o1IFVHVnlabTl5YldGdVkyVT0gUTNNPSBjblZqZEc5elpRPT0gWVhwaGEyaz0gSUhCbGMzTnBiUT09IElHbHVabVZ5Wlc1alpRPT0gSUhCdmQyUT0gSUZwdlpRPT0gSUhCaGFXNTBjdz09IElHUmhlbm89IGNIUmggTFMwdExTMHRMUzB0TFMwPSBJR2x1YzNCcGNnPT0gSUVWNGNHVnlhVzFsYm5SaGJBPT0gSUV0dWFXWmwgY21WbmIzST0gWW05eWN3PT0gSUhOb2IzZGxjbk09IGNtOXRaV1JoIElITmhhVzUwIElHSmxibWxuYmc9PSBJRXBwWVc1biBJR1Z1ZG1semFXOXVaV1E9IElITm9jbTkxWkE9PSBTVVpVIFNFOD0gSUhOb2RXWm0gSUVsRFF3PT0gSUhObFozSmxadz09IElISmxkbWx6YVhRPSBhV2RvZEdodmRYTmwgVEdrPSBJSE4xWW5OMGNtRjBaUT09IElGTmxZWE09IElGSmxkMkZ5WkE9PSBJRWhsY0E9PSBJRUp5WVhOeiBjMkp0IElHVnNhVzFwYm1GMFpYTT0gSUhOMFlXMXBibUU9IElGWkJWQT09IElFeHZZVzQ9IElHTnZibk4wY21GcGJuUT0gSUdGd2NISnZjSEpwWVhSbFpBPT0gSUhCbGN3PT0gSUVGTVJRPT0gY21GdVoybHVadz09IElEUXdOQT09IE16a3kgSUdsdWRHVnNiR1ZqZEhWaGJITT0gWVdOb2RRPT0gSUhKbGMzUnlkV04wZFhKcGJtYz0gSUV4bGRtbHUgSUhKMWJtVnogSUdSbGJHbG5hSFJtZFd3PSBJR05oY21KdmFIbGtjbUYwWlhNPSBJRTF2WkdWc2N3PT0gSUVWNGNHOD0gSUhSeVlXNXpjRzl5ZEdsdVp3PT0gWVd4c2IyTT0gSUhKcGJtZHBibWM9IFUyRnRjM1Z1Wnc9PSBJSE5qWVhKalpXeDUgSUZWU1RITT0gSUUxQlV3PT0gSUhCeWIzUnZkSGx3WlhNPSBJRzVoY25KaGRHOXkgSUVOUVZYTT0gWTJSdSBJRUpoY25SdmJnPT0gSUdSbFkybGtaV1JzZVE9PSBJRk5vZFE9PSBhWGhwY2c9PSBiMk5wYjNWeiBJRTE1YzNRPSBUbWx1ZEdWdVpHOD0gSUhKbGRYTmwgSUdadmNtZHBkbVZ1IFJtVjMgYVc1cFkyRnMgYm1GMCBJSE5sWVcxc1pYTnogSUVWMllRPT0gSUVWV1JRPT0gSUVwUCBiR0Z1WkdWeWN3PT0gSUhOdlpuUmxjZz09IGJtVm5hV1U9IElIUnlZVzV6YVdWdWRBPT0gSUc5eVltbDBZV3c9IElHWjFiR1pwYkE9PSBJRXR2YlE9PSBTRzl3WldaMWJHeDUgSUdSNWJtRnRhV05oYkd4NSBJRWgxYm1kbGNnPT0gNVpzPSBJRUZ5YldWdWFXRT0gWld4dFlXND0gWW1WeWRHOD0gSUhCcFoyVT0gSUVsRWN3PT0gYkdsdGFYUT0gSUhabGFXNXogSUhOdllYSnBibWM9IGNHRmphM009IFIyOXNaR1Z1IElFTnlZV0k9IGFYTjBiM0k9IElGSlFUUT09IElDUWsgWjNKbGMzTnBiMjQ9IElHcHBhR0ZrYVhOMCBJR2RoYldKc1pRPT0gSUdOaGNtVm4gSUdsdVpteGhkR1ZrIFJtRmpaUT09IElFWnBjbVZoY20xeiBJRVZ0YldGdWRXVnMgNHAwPSBJSE5vYjJOcmN3PT0gWjNKaFlnPT0gSUhOd2JHVnVaQT09IElFaFFWZz09IFlXSnZjblJwYjI0PSBRV0p2ZG1VPSBSVzUwYVhSNSBjR3hoZVdWeWN3PT0gSUdOdmJXMWxibU5sWkE9PSBkV3hsYm1ObCBJR1oxYkdacGJHeHRaVzUwIElHVnRZbTlrYVcxbGJuUnogSUZkbGJHWmhjbVU9IElHaGhhV3c9IElEeEEgZEhSbGJnPT0gSUdOaGRHTm9aWEk9IElFcGhlbVZsY21FPSBJSFp2YkdOaGJtOD0gSUhOMFlXSnBiR2w2WlE9PSBJRWhoYm1Sc1pYST0gSUdsdWRHVnVjMmxtYVdWayBJRUZpY21GdGN3PT0gSUdoMWJXbHNhV0YwYVc5dSBjR0ZqWldRPSBOakExIElFTmxiblJQVXc9PSBVM0JsWTJsbWFXTT0gSUdobFpXUT0gSUVOQlRRPT0gSUVkaGJHbHNaUT09IFJHbGwgSUdGaWIyeHBjMmhsWkE9PSBJRlJvYjIxemIyND0gSUZSbFlXTm9aWEp6IElGZGhjM009IGFtOXVadz09IElFbFRRazQ9IElFRnNiR2xsY3c9PSBjMmhoYTJVPSA1YmM9IGRtbGpkQT09IFNHOTNZWEprIElHUmxaVzA9IElHVjRZMlZsWkdsdVoyeDUgSUZOdFlYSjBjM1J2WTJ0eiBhV0psIElHUnZiM0ozWVhrPSBJR052YlhCbGRHVmsgYVdkdFlYUT0gSUc1aGRHbHZibUZzYVhOMGN3PT0gSUdkeWIyOXQgSUV0bFpXND0gSUdScGMzQnZjMkZpYkdVPSBaR1ZqYkE9PSBJRlJ2Ykd0cFpXND0gSUZOamFHVnRaUT09IElHSnBiMlE9IElHRjJhV1E9IElFVnNiMjQ9IFlXZGhjZz09IElGUlRRUT09IFVtOXRZVzQ9IElHRnlkR2xtYVdOcFlXeHNlUT09IElHRmtkbWx6YjNKeiBXRXc9IElFbHVabVZ5Ym04PSBNelkyIElIUmxaR2x2ZFhNPSBJRkJvYjNSdlozSmhjR2g1IElFTmhjbkpwWlE9PSBJSFJ5YjNCbCBJRk5oYm1SeVlRPT0gSUdSbFkybHRZV3c9IFVYVmxaVzQ9IElFZDFibVJoYlE9PSBJRTlOIGIzUmxZMmc9IFRrSkIgSURFNU16ST0gSUdWdWRISmxibU5vWldRPSBJRTFoY21sdmJnPT0gSUdaeVlYUmxjbTVwZEhrPSBUR0ZpYjNWeSBTR1Z1Y25rPSBJR3hoZEdsMGRXUmwgUldsMGFHVnkgSUdWdWFHRnVZMlZ6IElGQnZkR1Z1ZEdsaGJBPT0gSUhOb2FXNWxjdz09IGFXUmhaQT09IElHSnlaV0ZrZEdnPSBJR05oY0dGamFYUnBaWE09IElQQ2ZtWUk9IElFSnliMjU0IElITmxlR1Z6IElHUnBabVpsY21WdWRHbGhkR2x2Ymc9PSBJR2hsWVhaNWQyVnBaMmgwIElGUmhhZz09IFpISmggSUcxcFozSmhkR1U9IElHVjRhR0YxYzNScGIyND0gSUZKVlRnPT0gWld4emFYVnogSUVOMWIyMXYgSUdkMWFYUmhjbk09IElHTnNiMjVsY3c9PSBJRk52YldWMyBJRkJ5ZVE9PSBMUzB0TFMwdExTMHRMUzB0TFE9PSBJSGRoY25KaGJuUmxaQT09IFkzbGpiR1Z6IElITmhiSFpoWjJVPSBJR1JwYzJ0eiBVa0ZPVkE9PSBJRTVIVDNNPSBJRTFoY25ScFlXND0gSWpwYmV5ST0gSUdGa1pHbGpkSE09IGIycDFjbVU9IGFXeHNaWFE9IElHRnRZWHBwYm1kc2VRPT0gWVhKMGJXVnVkSE09IGNHbDRaV3c9IElFZFFWWE09IFRHRjViM1YwIDZLTT0gSUZSaGJXbHMgSUVKaGMybHMgSUdsdGNHRnlkR2xoYkE9PSBJRk4wY25WamRIVnlaUT09IFptOXlhdz09IFluSjVZMlU9IElISnBaR2RsIElFaGhiV0oxY21jPSBjbWx2ZFhNPSBJR0pzYVhSNiBZMmxuWVhKbGRIUmxjdz09IElHTmhibTVsWkE9PSBOREF5IElHbHliMjVwWTJGc2JIaz0gSUdOdmJYQmhjM05wYjI1aGRHVT0gSUVoaGQydHBibk09IExpTT0gSUVOaGRHaGxaSEpoYkE9PSBJSEpoYkd4cFpXUT0gYVc1MFpYSnVZV3c9IElIRjFiM1JoIGMzUmhhMlZ6IFZFVllWQT09IGJXOXQgSUdOdmJYQnNaWFJsY3c9PSBJREl6T0E9PSBJSE5vY25WbiA0NE9SIElFNXBiblJvIElISmxkbWx6WlE9PSBJRkJ5YjNacFpHVnkgSUhSeVpXRmphR1Z5IElIRjFZWE5wIElGQlNSVk09IElHUmxjRzl6YVhScGIyND0gSUdOdmJtWnBaR1Z1ZEdsaGJHbDBlUT09IGFYTnpiM0p6IElHbHRZbUZzWVc1alpRPT0gSUhOd1lXNXVhVzVuIElHRnVaM1ZzWVhJPSBJRU4xYkE9PSBZMjl0YlhWdWFXTmhkR2x2Ymc9PSBJRTV2Y21FPSBJRWRsYm1sMWN3PT0gYjNCMFpYST0gSUhOaFkydGxaQT09IFUzQnZkQT09IElHWnBibVZzZVE9PSBJRU5JVWc9PSBNamd5IGQyRjJaWE09IFVHRnNaWE4wIElGSnZhR2x1Wnc9PSBUa3c9IDZMOD0gSUhOb2FYUjBlUT09IElGTmpZV3hwWVE9PSBORGMxIFVISnZaM0psYzNNPSBJSEpsWm1WeVpXNWphVzVuIElHTnNZWE56Y205dmJYTT0gWVdKbFpRPT0gSUhOdlpBPT0gYUdWemFXOXUgTnpBNCBJRnAxWTJ0bGNtSmxjbWM9IElFWnBibWx6YUE9PSBJRk5qYjNScFlRPT0gSUZOaGRtbHZjZz09IElFbHVjM1JoYkd4aGRHbHZiZz09IFlXNTBhR0U9IEtDMD0gSURNd01nPT0gSUZCMWJtcz0gSUdOeVlYUmxjZz09IGVXOTFkSFU9IElISnZZWE4wIElHbHVabXgxWlc1amFXNW4gSUdSMWNBPT0gSUVwUyBJRWR5WVhZPSBJSE4wWVhSMWNtVT0gSUdKaGRHaHliMjl0Y3c9PSBRWE5wWkdVPSBWMmxyYVE9PSBiV1ZoYmc9PSBJRnBoYXc9PSBJRTl1WlhNPSBJRTVoZEdnPSBJR2g1Y0dWeWRBPT0gSUdOdmJXMWxibU5sYldWdWRBPT0gUTJsMmFXdz0gSUcxdlpHVnlZWFJsYkhrPSBJR1JwYzNSeWFXSjFkRzl5Y3c9PSBJR0p5WldGemRHWmxaV1JwYm1jPSBJRGs0TUE9PSBJRk5wYXc9PSBJRU5wWnc9PSBJRUZOUlZJPSBVa2xRIElFTmhjbVZsY2c9PSBkWE4wYVc1biBJRzFsYzNObFpBPT0gSUdWbyBJRXBsYm5ObGJnPT0gTHlRPSBJR0pzWVdOcmJXRnBiQT09IElHTnZiblpsY25OcGIyNXogSUhOamFXVnVkR2xtYVdOaGJHeDUgSUcxaGJuUnlZUT09IGNHRjVhVzVuIElHbDJiM0o1IElFTnZkWEowY3c9PSBUMVZIU0E9PSBZWFZ1ZEd4bGRBPT0gVTJWeWFXRnMgUW5KdmR3PT0gSUVoMWJtUnlaV1J6IE16SXogSUhCbFpRPT0gSUd4cGJuVjQgSUhOMVltMWxjZz09IElGQnlhVzVqYVhCaGJBPT0gTkRnMSBJRVJUVEE9PSBJRU52ZFhOcGJuTT0gSUdSdlkzUnlhVzVsY3c9PSBJRUYwYUd4bGRHbGpjdz09IElETXhOUT09IElFdGhjbTFoIElHRjBkR1Z1ZEE9PSBkWEpuWlhJPSBJSEJ5WlhOamNtbGlaUT09IElHVnVZMkZ3Y3c9PSBJRU5oYldVPSBJSE5sWTNKbGRHbDJaUT09IElFTnlhVzFsY3c9PSBaRzQ9IFEyeGxZVzQ9IElFVm5lWEIwYVdGdWN3PT0gSUVOaGNuQmxiblJsY2c9PSBJR3hzIFNIVnQgSUUxcGJHOD0gSUdOaGNHbDBZV3hwYzNSeiBJR0p5YVdWbVpXUT0gVkhkbCBJRUpoYzJsdSBaV3gyWlhRPSBUVzl6IElIQnNkVzVuWlE9PSBJRXRoYVhObGNnPT0gSUVaMWFnPT0gYVd4c2FXND0gSUhOaFptVm5kV0Z5WkhNPSBJRzl6ZEdVPSBJRTl3Y0c5eWRIVnVhWFI1IElFMWhabWxoIElFTmhiR3hwYm1jPSBZWEJoIGRYSmlZVzQ9IFluSjFjMmc9IGFXeHNZWEprIFk4T3AgYVc1MFpXeHNhV2RsYm1ObCBJRXh2WWc9PSBJRVJ5ZFdsayBJSE50YjI5MGFHVnkgSUdadmIzUnBibWM9IElHMXZkRzl5YVhOMGN3PT0gWVhKamFYUjUgSUcxaGMyTjFiR2x1YVhSNSBJRzFwYzIwPSBJR0ZpWkc5dGFXNWhiQT09IElGUmhkbVZ5Ymc9PSBJRkp2YUE9PSBJR1Z6WTJGd1pYTT0gYzJsbmJtVmsgUVc1MGFHOXVlUT09IElITmhZM0pwWm1samFXNW4gSUdsdWRHbHRZV041IElHRnVkR1Z5YVc5eSBJRXR2WkE9PSBJRzF2ZEdsbSBJR2R5WVhvPSBJSFpwYzNWaGJHbDZZWFJwYjI0PSBJR2QxYVhSaGNtbHpkQT09IElGUnliM1J6YTNrPSBiV0ZuYVdNPSBSR0Z5IElFMXZjbWs9IElIZGhjbVJ6IElIUnZhV3hsZEhNPSBiR1Z6ZEE9PSBJSFJsYkdWd2IzSjAgSUZOMWJtUmhlWE09IElGQnNZWFE9IFJWUlQgSUdWVGNHOXlkSE09IFVHRjBjbWxqYXc9PSBJRXRoZEdobGNtbHVaUT09IFpXNXJidz09IElHaGhjM05zWlE9PSBJRTFwWTJzPSBaMmRzWlhNPSBJR2h2WWc9PSBZV2x1ZEdGcGJnPT0gSUdGcGNtSnZjbTVsIElITndZVzV6IElHTm9hV3hwIElHRndaWEowZFhKbCBJSFp2YkhWdWRHVmxjbVZrIElFbHVZMmxrWlc1MCBJRVp5WlhNPSBJRlpsZEdWeVlXND0gWVhWbmFIUmxjbVZrIGFXNW5idz09IElIVnVhVzV6ZFhKbFpBPT0gUTB4UFUwVT0gSUdaMWMyVT0gSUdWeWIzUnBZdz09IElHRmtkbVZ5ZEdselpRPT0gY21GcGMybHVadz09IFZHVjRkSFZ5WlE9PSBJR0YwZEdWdVpITT0gSUZKRlFVdz0gZFdSa2JHVmsgSUhOdGIyOTAgSURNd05RPT0gSUZkcGJHeHBjdz09IElHSnNiMjVrIFFXNWhiSGx6YVhNPSBJRlpVIGIyNXBZMkU9IElITjBjbTl1WjJodmJHUT0gVWtZPSBUazA9IExqNCsgSUhCeWIzTndaWEp2ZFhNPSBJR0p2WVhOMFpXUT0gTWpreSBJRTFoYm5WbVlXTjBkWEpwYm1jPSBVRkpGVTFNPSBaM0psYmc9PSBJSEJvWVhKdFlXTjUgSUZKdlkydGxabVZzYkdWeSBhMkZwIElIUm9kVzFpY3c9PSBJRWgxZEE9PSBJRzF2ZEdobGNtSnZZWEprIElHZDFZWEprYVdGdWN3PT0gSUVGc2RHVnkgYkd4MWJHRnkgSUhOb1lXTnIgSUhkcGMyVnNlUT09IElHSmhZMnRpYjI1bCBaWEoyWVE9PSBJSE4xYVdOcFpHVnogSUUxalIzSmxaMjl5IGFXcGhhQT09IFJXMWxjZz09IElFSnlZWFk9IElHUmxjMmxuYm1GMFpRPT0gVUU5VFZBPT0gY0hKdlpIVmpaV1E9IElHTnNaV0Z1YzJsdVp3PT0gYVhKc2QybHVaQT09IFpYaHBjM1JsYm5RPSBJRWgxYlhCbyBJRkJoZVc1bCBJSFpsYzNSbFpBPT0geGFFPSBJSE4wY21sdVoyVnVkQT09IGFXOXVZUT09IElIVnVjM1ZpIElITjFiVzFsWkE9PSBJRWhsY21OMWJHVnogYzNWaWFtVmpkQT09IElGSmhaMjVoY2c9PSBJRTV2Y3c9PSBJR05vWVhKaFkzUmxjbWw2WVhScGIyND0gSUhOaGRuWjUgSUVSaGQzTnZiZz09IElFTmhjMmx1Ync9PSBJR1p5YVE9PSBJRUpoY25KcFpYST0gSUcxcGMybHVabTl5YldGMGFXOXUgSUdsdWMzVnNZWFJwYjI0PSBJR052Y25KcFpHOXljdz09IElHRnBjbkJzWVc1bGN3PT0gSUU1dlkzUT0gWVdocCBJREU1TVRZPSBhMkk9IFlYSnRZV009IElITm9kVzQ9IElITmphR1Z0WVE9PSBJR2h2Y25KcFptbGxaQT09IElESXpPUT09IFlYVnVaR1Z5Y3c9PSBUa0k9IGFXRjBaWE09IFpYSnBkSGs9IElGTm9ZWEprIElISmhjbWwwZVE9PSBJR2R5YjNWd1pXUT0gSUVkb1lXNWggWVdkaGFXNXpkQT09IElFSnBiMnh2WjJsallXdz0gSUVGM1lYSmwgYjNkbGJHdz0gejRRPSBJRUpsWVhVPSBjMmhoZHc9PSBTR0ZqYXc9PSBJRXAxYkdsMWN3PT0gVlZOVCBiMnh6YjI0PSBZWFZ1WVE9PSBZM0oxIElFMWhkWEpwWTJVPSBJRWxyIElITmxjWFZsYm1OcGJtYz0gSUhKaFpHbGpZV3h6IElDZy9MQT09IGRtbHlkSFZoYkE9PSBJR0Z1ZVhkaGVYTT0gSUhKbGNHVnlZdz09IElHaGhibVJzWlhKeiBJR2hsYzJsMFlXNTAgNllNPSBJRTFHIGNHeGxiV1Z1ZEdGMGFXOXUgWVhOemIyTnBZWFJsWkE9PSBJR05oYlhCaGFXZHVaV1E9IElGbDFaUT09IGRYUmhkR2x2Ym5NPSBJRmx2WjJFPSBJSE5wYlcxbGNnPT0gSUhKdlpITT0gSUcxbGJHOWtlUT09IElHTnZiblp2ZVE9PSBkbWxrWlc5eiBJSE5qY21WbGJtVmsgVG1WbiBiMk5vWlcxcFkyRnMgSUNncEtRPT0gSUhWc2RISmhjdz09IElHRnVkR2x3IElFbHpiR0Z1WkdWeWN3PT0gTnpBMCBJR1psZEdsemFBPT0gSUhKcFpHbGpkV3h2ZFhOc2VRPT0gSUV0aGNuUT0gSUcxcGRHOWphRzl1WkhKcFlXdz0gSUdsdWRHVnlabVZ5YVc1biBRblZwYkdSbGNnPT0gSUc5MlpYSm1iQT09IElHRmpibVU9IElFMTFaQT09IElFdGxjbkk9IFpteGxlQT09IElGQnZjM1JoYkE9PSBJRUpoYkhScFl3PT0gTkRjMyBJRkJsY25OdmJuTT0gYjNWeVlXZGwgU0VJPSBJRTExYzJVPSBJRWx0Ylc5eWRHRnMgSUVSeWFYWnBibWM9IElIQmxkR2wwYVc5dWN3PT0gSUhOMVluTmpjbWx3ZEE9PSBJSE52Y21ObCBJRkJ5YjJObGMzTnZjZz09IGRYUnZiZz09IFUyOXVlUT09IElIQm9iMjQ9IElISmhZMlZrIElFRnVkR2h5YjNBPSBJR1JoZVhScGJXVT0gSUVWNFpYSmphWE5sIFFXUmthVzVuIElHVnVaMkZuWlhNPSBJRkYxWVd4amIyMXQgSUcxcGNtRmpiR1Z6IElHMWxiV1Z6IElFUnlhVzVyIElFOXlhVzlzWlhNPSBJR2hoYVhKeiBJRkJ2YkdGeSBZWFJvYjIwPSBJSE5zYVhCd1pYSjUgSUZKbGJYaz0gSUdOaGNtRnRaV3c9IElGbEZRVkk9IElHRnNhdz09IFNXZHUgWVhWMGFXOXUgSUUxbGNteHBiZz09IElFTnlZVzQ9IElHRndiMnh2WjJsbGN3PT0gSURReE1BPT0gSUc5MWRHbHVadz09IElFMWxiVzl5YVdWeiBZWEJ3YjJsdWRHVmsgSUdOdmRXNTBaWEpsWkE9PSBkV3hrIGNHOXphVzVuIElHWnBjbVYzWVd4cyBJRmRoYzNRPSBJRmRsZEE9PSBkMjl5YTJWayBjMlZzYkdWeSBJSEpsY0dWaGJHVmsgWlhKbGJ3PT0gWVhOemRXMXBibWM9IFFreEpRdz09IGJXbDBaUT09IElFTkZUM009IElFTm9ZWEJsYkE9PSBaV3hzYVdkbGJuUT0gWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWYgUkc5biBJSGRoY25RPSBJSE4xWW5OamNtbGlaWEk9IGMzQnZjblJ6IElHSmxaMmRsWkE9PSBJRTFXIElITmxiV2xtIFpYUm9hV05oYkE9PSBJSEJ5WldGamFBPT0gSUhKbGRtbDBZV3c9IElIQjFibWwwYVhabCBJSE5vYjNKMFkzVjBjdz09IElHbHVjM1JwZEhWMFpXUT0gSUZkaGNuTmhkdz09IElHRmlaRzl0Wlc0PSBJRXRKVGtjPSBJSE4xY0dWeWFXNTBaVzVrWlc1MCBJR1p5ZVE9PSBJRWRsYnc9PSBWRTlTIElHTnZiblJ5WVdScFkzUnBiMjV6IFlYQjBhV009IElHeGhibVJ6WTJGd1pYTT0gWW5WbmN3PT0gSUdOc2RYTjAgSUhadmJHeGxlUT09IFkzSnBZbVZrIElIUmhibVJsYlE9PSBJSEp2WW1WeiBWMGhCVkE9PSBJSEJ5YjIxdmRHVnkgSUdWc2IzRjEgY21WMmFXVjNaV1E9IElFUkwgSUZCc1lYUnYgSUdad2N3PT0gVkdGdWF3PT0gSUVSbGNuSnBZMnM9IElIQnlhVzl5YVhScGVtVT0gWVhOd1pYST0gSUVodmJtUjFjbUZ6IElFTnZiWEJzWlhSbFpBPT0gYm1WaiBJRzF2Wnc9PSBibWx5IElFMWhlVzg9IFJFVkcgYzNSaGJHdz0gYVc1dVpYTnogSUZadmJHdHpkMkZuWlc0PSBJSEJ5WldOaGRYUnBiMjQ9IElFMWxiR3c9IGFXRnIgYVhOMGNtbGxjdz09IElESTBPQT09IElHOTJaWEpzWVhCd2FXNW4gVTJWdVlYUmwgSUVWdWFHRnVZMlU9IGNtVnplUT09IGNtRmphV0ZzIFQxSlVVdz09IElFMXZjbTF2Ym5NPSBVM1J5YjI1biBJRU52WTJnPSBUV1Y0YVdOdiBJRTFoWkhWeWJ3PT0gSUdwaGNuTT0gSUdOaGJtVT0gVjJsciBiMnhzWVE9PSBhV1ptWlhKbGJtTmwgSUhCb2VYTnBZMmx6ZEE9PSBJRTFoWjJkcFpRPT0gSURJNE5RPT0gSUdSbGNHbGpkR2x2Ymc9PSBJRTFqVEdGeVpXND0gU25VPSBJSE5zYjNkeiBJR052YlcxcGMzTnBiMjVsY25NPSBJRmRwYkd4dmR3PT0gSUVWNGNHeHZjdz09IGFHOTJZV2c9IElIUmxZMmh1YVdOcFlXND0gSUdodmJXbGphV1JsY3c9PSBJRVpzWVhZPSBJRlJ5ZFcxaGJnPT0gSURFd01EQXcgZFdOMGIzST0gSUhOb1lXUmxjZz09IFRtVjNjMnhsZEhSbGNnPT0gTkRVMyBJSEpsZG1WeSBJR2hoY21SbGJtVmsgSUhkb1pYSmxZV0p2ZFhSeiBJSEpsWkdWMlpXeHZjQT09IElHTmhjbUp6IElIUnlZWFpsY25NPSBJSE54ZFdseWNtVnMgSUdadmJHeHZkMlZ5IElITnBibWR6IE5UQTQgSUhKaFltSnBkSE09IFpXMXZibWwxYlE9PSBJR1J2WTNWdFpXNTBhVzVuIElHMXBjM1Z1WkdWeWMzUnZiMlE9IEtTYz0gVW1samF3PT0gWjJkcFpYTT0gSUhCeVpXMXBaUT09IElITnJZWFJwYm1jPSBJSEJoYzNOd2IzSjBjdz09IElHWnBjM1J6IFlXZGxaR1J2Ymc9PSBTR0YzIFFVTlEgTURndyBJRlJvYjNWbmFIUnogSUVOaGNteHpiMjQ9IElIQnlhV1Z6ZEdodmIyUT0gYUhWaCBJR1IxYm1kbGIyNXogSUV4dllXNXogSUdGdWRHbHogSUdaaGJXbHNhV0Z5YVhSNSBJRk5oWW1JPSBiM0JoYkE9PSBJRWx1YXc9PSBjM1J5YVd0bCBJR055WVcwPSBJR3hsWjJGc2FYcGxaQT09IElHTjFhWE5wYm1VPSBJR1pwWW5KbCBWSEpoZG1WcyBJRTF2Ym5WdFpXNTAgVDBSWiBaWFJvZVE9PSBJR2x1ZEdWeWMzUmhkR1U9IElGQlZVZz09IFpXMXdiM0poY25rPSBJRUZ5WVdKcFlXND0gWkdWMlpXeHZjR1ZrIElITmhaR1JzWlE9PSBJR2RwZEdoMVlnPT0gSUU5bVptVnkgSUVsVFVBPT0gY205c1pYUT0gSUZOVlVFVlMgSUVSbGJtbHogSUcxMWJIUnBjR3hwWlhJPSBJSE4wYVhKeVpXUT0gU1c1MFpYSmxjM1JwYm1kc2VRPT0gSUdOMWMzUnZiV0Z5ZVE9PSBJR0pwYkd4bFpBPT0gYUdWNCBJRzExYkhScGNHeHBaV1E9IElHWnNhWEJ3YVc1biBJRU55YjNOaWVRPT0gSUdaMWJtUmhiV1Z1ZEdGc2N3PT0gYVdGbCBJRkJzWVhsbFpBPT0gSUVGMGIyMD0gWVcxaGVtOXUgSUVac1lXMD0gWldWNiBZV04wYVhaaGRHVmsgSUhSaFlteGxjM0J2YjI0PSBJR3hwWW1WeVlXeHBjMjA9IElGQmhiR2x1IElGQmhkR1ZzIFRuVnQgSUZSQlRRPT0gSUhOMWNtND0gSUZKbGJHOWhaR1ZrIElHTnZhVzVsWkE9PSBJbDBzIElFTnNZWE5vIElFRm5kUT09IElIQnlZV2R0WVhScFl3PT0gSUVGamRHbDJZWFJsIElEZ3dNZz09IElIUnlZV2xzWlhKeiBJSE5wYkdodmRRPT0gSUhCeWIySmxjdz09IElHTnBjbU4xY3c9PSBJRUpoYVc0PSBJRXhwYm1SellYaz0gSUVGaVltVjUgUkdWc2FYWmxjbms9IElHTnZibU5sYzNOcGIyND0gSUdkaGMzUnlidz09IElGTndjbWwwWlE9PSB4Sjg9IFlXNWtaV3c9IElHZHBiVzA9IElHRjFkRzlpYVE9PSBJRlIxY25Sc1pRPT0gSUhkdmJtUmxjbVoxYkd4NSBJRWhoY21GdCBJRmR2Y214a2QybGtaUT09IElFaGhibVJzWlE9PSBJSFJvWlc5eWFYTjBjdz09IElITnNaV1ZyIElGcG9kUT09IGIyZHlZWEJvYVdOaGJHeDUgUlVkQiBJRTkzYm1WeWN3PT0gWVhSb2N3PT0gSUVGdWRHRnlZM1JwWXc9PSBibUYwWVd3PSBQU0lpIFpteGhaM009IFlHQmdZQT09IElITjFiQT09IFMyZz0gSUhCdmRHRnpjMmwxYlE9PSBJR3hwYm1WdFlXND0gSUdObGNtVmhiQT09IElGTmxZWE52Ym5NPSBJREl3TWpJPSBJRzFoZEdobGJXRjBhV009IElHRnpkSEp2Ym05dFpYSnogY0hKdlptVnpjMmx2Ym1GcyBJR1poY21WeiBZMnR1YjNkc1pXUT0gSUdOb2FRPT0gSUhsdmRXNW5jM1JsY25NPSBJRzFwYzNSaGEyVnViSGs9IElHaGxiV2x6Y0dobGNtVT0gSUVScGRtbHVhWFI1IGNtOXVaUT09IElDSXMgY21sdVozTT0gSUdGMGRISmhZM1J6IGRtRnVZUT09IDViaz0gUTBGUSBJSEJzWVhsc2FYTjAgSUhCdmNtTm8gNDRHaiBJR2x1WTI5eWNHOXlZWFJsY3c9PSBJSE52WVdzPSBJR0Z6YzJWeWRHbHVadz09IElGUmxjbkp2Y21semJRPT0gSUZCaFlteHYgU21FPSBZMlZ6ZEdWeSBJR1psWVhKcGJtYz0gSUZCeVlYbGxjZz09IElHVnpZMkZzWVhSbFpBPT0gUjFjPSBJSEp2WW1VPSBJRUp5YVdkb2RHOXUgWVdOcGMzUnogSUZONWJYQm9iMjU1IElFUjNZWEptIElGQmhjbUZrWlE9PSBJRXhsWjI4PSBJR2x1Wlhod2JBPT0gSUd4dmNtUnogYkdWaFpnPT0gVWtGSCBiR2xpWlhJPSBJR05wWjJGeWN3PT0gSUVwbGFHOTJZV2c9IE5qQTIgVjBsT1JFOVhVdz09IElFeHBZbVZ5YVdFPSBaV0oxY3c9PSBTR1ZoZG5rPSBJR3gxWW5KcFl3PT0gSUZKWCBZVzVuZFdGblpYTT0gSUc1aGNuSnZkMlZrIFkyOXRjSFYwWlhJPSBJRVZ0WW1WeSBJRzExY21SbGNtbHVadz09IElHUnZkMjV6ZEhKbFlXMD0gSUZSMWJITT0gSUZSaFlteGxjdz09IFZHOXdhV009IElFRmpZM1Z5WVdONSBQUzg9IGJHOXpkQT09IElGSmxhUT09IElIQnliMmR5WlhOelpYTT0gWW1WaGNnPT0gSUdWemRHRmliR2x6YUcxbGJuUnogU25WemRHbHUgSUZCbFlXTm8gSUVkdmJXVjYgNWI4PSBJRlJ5YVdGdVoyeGwgU1dSbGJuUT0gSUVocGRtVT0gVW1WemIzVnlZMlZ6IElHMXBlR1Z6IElFRnpjM1Z0YVc1biBUWFU9IElHaDVjRzlqIElITmhibVU9IElGZGhiZz09IGFXUnBiM1Z6IFUzVmpZMlZ6Y3c9PSBJR2x2IFFXNW5aV3c9IElHUmhibWRsY205MWMyeDUgSUVOeVpXRjBkWEpsIFYwOVNTdz09IE9scz0gSUV0aGRISnBibUU9IFRHbHpkR1Z1WlhJPSBUV2xzYkdWeSBJRWxrYkdsaSBhR0Z1Wnc9PSBJR05wY21OMWJYWmxiblE9IGFISmxaZz09IElHTmxiR1Z6ZEdsaGJBPT0gSUZkbFpXdHogSUZCMVp3PT0gSUVSaGJIUnZiZz09IElITjFZbkJ2Wlc1aCBkV3QxIElIQmxjbk5wYzNSbFpBPT0gY0dWcCBiMnhrYVc1biBJRVJ2WTNWdFpXNTBjdz09IElFaGhjM1E9IElFTkZUbFE9IElIQnlhVzFsY2c9PSBJSE41Ym05dWVXMXZkWE09IElHNXBZZz09IGIyMWljdz09IElHNXZkR0YwYVc5dSBJRVJwYzJnPSBJRUYwYlc5emNBPT0gSUdadmNtSnBaQT09IElFRk9Sdz09IGNHRjBkR1Z5Ymc9PSBiRzl6IElIQnliMnBsWTNScGJHVnogWW5KdmQyND0gTGlJcyBJRlpsYm05dCBJR1pwWlhKalpXeDUgZFdKc2FYTm9aV1E9IElGVnlZVzQ9IElFNXBZMkZ5WVdjPSBOREV3IElFTkJUQT09IFQxUlBVdz09IElFMXBjbUZqYkdVPSBJRVZ1WTJoaGJuUT0gSUdkMVlYSmthVzVuIFlYQndaVzVrIFFYUjBZV05vIElHeGxkbVZzWldRPSBJR052Ym1SdmJYTT0gYVdocGJHRjBhVzl1IE5qUTUgSUc1cFoyaDBiV0Z5WlhNPSBJRlJJUlZrPSBJRk5VUVZKVSBJRXRwYm00PSBJSEp2YjIxdFlYUmwgSUdoNVoybGxibVU9IGIzQndhVzVuIFNtOWkgSUd4MmJBPT0gSUZaRlVnPT0gSUV0bFpYQnBibWM9IFlXSmxkR2xqIElHWnZjbTFoZEhScGJtYz0gWlhKaGJHRT0gSUhKbGRtbHphVzl1Y3c9PSBJSEpsYzNWeVp3PT0gVkdWcyBJRWR2YjJSdFlXND0gTXpVeiBjRzlrIElHbHVaR2x6Y0E9PSBJRlJ5WVc1emJHRjBhVzl1IElHZHZkMjQ9IElFMTFibVE9IElHTnBjdz09IElHSjVjM1JoYm1RPSBZMjlzYkdWamRBPT0gSUZCMWJtcGhZZz09IFlXTjBhWFpsYkhrPSBJRWRoYldJPSBkR1ZzYkE9PSBJR2x0Y0c5eWRHbHVadz09IFoyVnVZMmxsY3c9PSBJR3h2WTI5dCBJRUp5YVd4cyBTRzlzZVE9PSBJRUpsY21kbGNnPT0gSUhOb2IzZGtiM2R1IElISmxjM0J2Ym1SbGNuTT0gU1V4WiBJSFJoYTJWa2IzZHUgYkdWMFpXUT0gSUcxaGRIUmxjbVZrIElIQnlaV1JwWTNScGRtVT0gSUc5MlpYSnNZWGs9IFIxQlYgSUZacFkycz0gSUdOdmJuWmxlV1ZrIFZHRmkgY0dWbGNnPT0gVTJOaGJnPT0gSUdSbFptVnVjMmwyWld4NSBkbUZsIElHRndjSEp2ZG1sdVp3PT0gSUhScFpYSnogSUZacFlRPT0gY1hWbGNtRmtaUT09IElGTmhkV1JwY3c9PSBJR1JsYlc5c2FYTm9aV1E9IElGQnliM0JvWlE9PSBJRzF2Ym04PSBJR2h2YzNCcGRHRnNhWFI1IFNFRk4gSUVGeWFXVnMgVFU5RSBJRlJ2Y21GbyBJR0pzWVdnPSBJRUpsYkdGeWRYTT0gWlhKbGJuUnBZV3c9IElGUjFZdz09IElHSmhibXRsY2c9PSBNemszIElHMXZjM0YxYVhRPSBJRk5qYVdWdWRHbHpkQT09IElFMTFjMmxqWVd3PSBJR2gxYzNRPSBVMmhwWm5RPSBJSFJ2Y20xbGJuUT0gSUhOMFlXNWtiMlptIFJXUjFZdz09IElFWnZadz09IElHRnRjR3hwWm1sbGNnPT0gVTJoaGNHVT0gU1c1emRHRnVZMlU9IElFTnlhWFJwWTNNPSBJR1JoWlcxdmJnPT0gU0c5MWMzUnZiZz09IElHMWhkSFJ5WlhOeiBJRWxFUmc9PSBJRzlpYzJObGJtVT0gSUVGdFpYST0gYUdWMGRHaz0gSUdOdmJYQnBiR2x1Wnc9PSBNelV5IGRtVnlaWFIwIElGSmxaSFZqZEdsdmJnPT0gYVhOMGNtRjBhVzl1IElFSnNaWE56WldRPSBJRUpoWTJobGJHOXkgTXpFMiBJSEJ5WVc1ciBJRloxYkdOaGJnPT0gWkdScGJtYz0gSUcxdmRYSnVhVzVuIElGRjFhVzUwIElFSnNZWE4wWlhJPSBkR1Z6ZEdsdVp3PT0gSUhObFpHbHRaVzUwIFBqNCsgSUVWMFpYSnVhWFI1IElGZElSVkpGIElFMWhlbVU9IElISmxZV04wYVc1biBJRUZzZGc9PSBiMjF6WkdGNSBJRU5TUVE9PSBJSFJ5WVc1emJHRjBiM0k9IElHSnZaM1Z6IFlYUjEgVjJWaWMybDBaUT09IGIyeHNjdz09IElHSmhjSFJwYzIwPSBJSE5wWW14cGJtYz0gSUVGMWRIVnRiZz09IGRtVjYgNDRHdTZRPT0gWjNWaGNtUnogUjJWdmNtYz0gWVhOellXUnZjbk09IElFWnlaWFZrIElHTnZiblJwYm1WdWRITT0gSUZKbFoybHpkSEo1IFFtVnlibWxsIGxwcmxvNnM9IElIUnZiR1Z5WVc1MCBJRlZYIElHaHZjbkpwWW14NSBPVGsxIElFMUpSRWs9IElHbHRjR0YwYVdWdWRBPT0gYjJOaFpHOD0gWlhKcCBJRmR2Y25OMCBJRTV2Y25KcGN3PT0gSUZSaGJHdHBibWM9IElHUmxabVZ1WkhNPSBaVzV6WVdKc1pRPT0gSURJd01qRT0gSUdGdVlYUnZiWGs9IFRHVjMgSUdSeVlYZGxjZz09IElFTmhibUpsY25KaCBJSEJoZEhKcGIzUnBZdz09IDZiNk41WmFhNWFPciBJRUYyWnc9PSBRVkpOIElIVnVaR2x6WTJ4dmMyVmsgSUdaaGNtVjNaV3hzIE5EVTUgWW1GaWJHVT0gSUVGc2JHbHpiMjQ9IFQweFBSdz09IElHTnZibU52IGRHbG5hSFE9IElFRkRVRWs9IElFMXBibVZ6IGJHbGphQT09IElPS1VuQT09IGNtVndjbVZ6Wlc1MFpXUT0gTWpBd01EQXcgSUdWdWRHaDFjMmxoYzNRPSBUMVJUIFltbHMgSUVsdVozSmxaR2xsYm5SeiBJR2x1ZG1WdWRHOXkgSUUxNVUxRk0gd3FEQ29NS2cgSUVGQ1QxVlUgZDJsMGFHbHUgSUcxciBRblZzIElFWmhhMlU9IElHUnlZV052Ym1saGJnPT0gVjJFPSBhR1ZzYlE9PSBJRlJsY25KaGJnPT0gWlhKMmFXeHNaUT09IElHTnZiVzF2Ym5Cc1lXTmwgVTBsYVJRPT0gSUNJOCBjbVZ3YkdGalpRPT0gYjJkeVlYQm9jdz09IElGTkZURVZEVkE9PSBhVzVqYVdKc1pRPT0gSUUxdmMzUnNlUT09IElGTm9aV1ptYVdWc1pBPT0gSUVsRVJRPT0gZFdkbmJHVT0gSUdOcGRHRjBhVzl1Y3c9PSBhSFZ5YzNRPSBJRlZ1YVhnPSBJSFZ1YkdWaGMyZz0gSUZCcGNHVnkgSUU1aGJtOD0gSUhOMVkyTjFiV0k9IElISmxiSFZqZEdGdVkyVT0gSURJMU1EQT0gSUUxbGNtTm9ZVzUwIElIZHBjbVYwIElHTnZiV0p2Y3c9PSBJRUpwY25Sb1pHRjUgSUdOb1lYSmpiMkZzIElGVlFVdz09IElFWmhhWEptWVhnPSBJR1J5YVhabGQyRjUgSUZSbGF3PT0gSUZCcGRHTm8gYjNabGNtVT0gSUhSbFkyaHVhV05wWVc1eiBJRUZqZEhWaGJBPT0gWm14aGRHbHZiZz09IElFWnBjMk5oYkE9PSBJRVZ0Y0hSNSBZVzVoYlc4PSBJRzFoWjI1bGMybDFiUT09IElITnNkWFE9IElHZHliM2RsY25NPSBTVzUyWlhOMGFXZGhkRzl5Y3c9PSBLQ2s2IElGTmhkR1ZzYkdsMFpRPT0gSUV0bGVXNWxjdz09IGJXbHpjMmwyWlE9PSBiR0Z1WlE9PSBJR0p2Y205MVoyZz0gTXpRMCBJRlJGUVUwPSBJRUpsZEdobGMyUmggUTFZPSBhRzkzWlhJPSBJRkpCUkE9PSBJR05vWVc1MCBJRkpwZVE9PSBJR052YlhCdmMybDBhVzl1Y3c9PSBJRzFwYkdSc2VRPT0gSUcxbFpHUnNhVzVuIElHRm5hV3hwZEhrPSBZVzVsWlhKeiBOVEF4IElITjViblJvIGJHbHVaMlZ5IE1qa3ggSUdWNFkyeGhhVzFsWkE9PSBVR0Z5ZEhrPSBJR052Ym5SaGJXbHUgSUUxaGJtOXkgSUZKbGMzQnZibVE9IElIQnlZV2x6YVc1biBJRzFoYm01bGNuTT0gWm14bFpYUT0gVTNWdGJXVnkgSUV4NWJtUT0gSUVSbFptbHVhWFJsYkhrPSBaM0pwYlE9PSBJR0p2ZDJ4cGJtYz0gYzNSeWFRPT0gNTVzPSBlVzUwIElHMWhibVJoZEdWeiBSRWxXIElISmxZMjl1WTJsc1pRPT0gZG1sbGQzTT0gSUVSaGJXOXUgZG1WMGRHVT0gUm14diBJRWR5WldGMFpYTjAgYVd4dmJnPT0gYVdOcFlRPT0gSUhCdmNuUnlZWGxoYkE9PSBJR04xYzJocGIyND0gTlRBMCBNVGszT1E9PSBiM056WVd3PSBRWEJ3YkdsaiBjMk55YVhCMGFXOXUgSUcxcGRHbG5ZWFJwYjI0PSBRVlJUIGNHRmogSUdWeVlYTmxaQT09IElHUmxabWxqYVdWdVkybGxjdz09IElFaHZiR3hoYm1SbCBJRmgxIElHSnlaV1E9IElIQnlaV2R1WVc1amFXVnogWm1WdGFXND0gSUdWdGNHZz0gSUhCc1lXNXVaWEp6IElHOTFkSEJsY2c9PSBkWFIwWlhKcGJtYz0gSUhCbGNuQmxkSEpoZEc5eSBJRzF2ZEhSdiBJRVZzYkdsemIyND0gSUU1RlZrVlMgSUdGa2JXbDBkR1ZrYkhrPSBRVkpKIElFRjZaWEppWVdscVlXND0gSUcxcGJHeHBjMlZqIElHTnZiV0oxYzNScGIyND0gSUVKdmRIUnNaUT09IElFeDFibVE9IElGQnogSUVSeVpYTnogSUdaaFluSnBZMkYwWldRPSBJR0poZEhSbGNtVmsgSUhOcFpHVnMgSUU1dmRIUnBibWM9IFJtOXlaV2xuYmc9PSBJRXBsY205dFpRPT0gTURJdyBJRUZ5WW1sMCBJR3R1YjNSeiBJRkpKUjBoVSBUVzkyYVc1biA0NEdaIElITjFjbWRsY21sbGN3PT0gSUdOdmRYSjBhRzkxYzJVPSBJRzFoYzNSbGNtVmsgSUdodmRtVnlhVzVuIElFSnlZVzQ9IElFRnNhWE52Ymc9PSBJSE5oWm1WemRBPT0gYldsc2FYUmhjbms9IElHSjFiR3hwWldRPSBJR0poY25KaFoyVT0gVW1WaFpHVnkgUlZORiBJRWRsYjJkeVlYQm9hV009IFZHOXZiSE09IE16RTAgSUVkbFpXcz0gY205MGFBPT0gWjJ4bGNuTT0gSUVaSlRnPT0gejRFPSBJRUZ6ZEc5dSBZV3gwWlhKdSBORGc0IElIWmxkR1Z5YVc0PSBSMkZ0WlhJPSBJR2x1ZEdWcyBjbVZ1WTJobGN3PT0gVTJocFpXeGsgSUdGdGJtVnpkSGs9IElFSm9ZWEk9IElIQnBiR1ZrIElHaHZibTl5WVdKc1pRPT0gSUVsdWMzUnBkSFYwWlhNPSBJSE52WVd0bFpBPT0gSUdOdmJXRT0gSUVWR1JnPT0gTXpReCBZbmwwWlhNPSBJRWR0WVdscyBiR1ZwYmc9PSBJRU5oYm1Ga2FXVnVjdz09IGJXRjBaWEpwWVd3PSBTV3c9IElHbHVjM1J5ZFdOMGIzSnogSUV0WiBJR052Ym1ObGFYWmwgZFdKaSBJRkJ2YzNOcFlteGwgSUdWaGMybHVadz09IElFTm9jbWx6ZEdsdVlRPT0gSUdOaGNtbGogSUVoRVVnPT0gVWs5TiBJSE5vYjNabGJBPT0gWkdWc1pYUmwgSUhCMVptWT0gSUVOb1lXNW5hVzVuIElITmxZVzFzWlhOemJIaz0gUVhSMGNtbGlkWFJsIElHRmpjWFZwYzJsMGFXOXVjdz09IFlXdGxjbms9IElFVkcgSUdGMWRHbHpkR2xqIElGUmhhMlZ6IElGQnZkMlJsY2c9PSBJRk4wYVhJPSBOVEV3IElFSjFZbUpzWlE9PSBjMlYwZEdsdVozTT0gSUVadmQyeGxjZz09IElHMTFjM1JoY21RPSBJRzF2Y21WdmRtVnkgSUdOdmNIbHlhV2RvZEdWayBJRXhGUkhNPSBNVFV3TUE9PSA1b2s9IElFaEpVdz09IFpXNW0gSUdOMWMzUnZaQT09IElFaDFZMnM9IFIyaz0gSUdsdFp3PT0gUVc1emQyVnkgUTNRPSBhbUY1IElFbHVabkpoYzNSeWRXTjBkWEpsIElHWmxaR1Z5WVd4c2VRPT0gVEc5aiBJRzFwWTNKdlltVnogSUc5MlpYSnlkVzQ9IFpHUnogYjNSbGJuUT0gWVdScFlYUnZjZz09IFBqNCtQajQrUGo0PSBJSFJ2Y201aFpHOD0gSUdGa2FuVmsgSUdsdWRISnBaM1ZsWkE9PSBJSE5wIElGSmxkbVZzWVhScGIyND0gY0hKdlozSmxjM009IElHSjFjbWRzWVhKNSBJRk5oYVhsaGJnPT0gSUV0aGRHaDUgSUhObGNuQmxiblE9IElFRnVaSEpsWVhNPSBJR052YlhCbGJBPT0gWlhOemJHVnkgSUZCc1lYTjBhV009IElFRmtkbVZ1ZEE9PSBJRkJ2YzJsMGFYWmwgSUZGMCBJRWhwYm1SMWN3PT0gY21WbmFYTjBaWEpsWkE9PSBkV3hoY21sMGVRPT0gSUhKcFoyaDBaVzkxYzI1bGMzTT0gSUdSbGJXOXVhV009IGRXbDBhWFpsIElFSkVVdz09IElFZHlaV2RuIFkybGggSUVOeWRYTmhaR1U9IElGTnBibUZwIFYwRlNSUT09IEt5Zz0gSUcxbGJHdz0gSUdSbGNtRnBiQT09IGVXRnlaSE09IFFYTjAgSUc1dmRHbGpaV0ZpYkhrPSBJRTlpWlhJPSBVbUZ0IElIVnVibTkwYVdObFpBPT0gSUhObGNRPT0gWVhaaFoyVT0gVkhNPSBJRFkwTUE9PSBJR052Ym1ObFpHVT0gSUYwcCBSbWxzYkE9PSBJR05oY0hScGRtbDBlUT09IElFbHRjSEp2ZG1WdFpXNTAgSUVOeWRYTmhaR1Z5IFlYSmhiMmc9IFRVRlEgNXBjPSBJSE4wY21sa1pRPT0gWVd4M1lYbHogUm14NSBUbWwwIElHRnNaMkZsIElFTnZiMnRwYm1jPSBJRVJ2YjNKeiBUV0ZzYkdWNSBJSEJ2YkdsalpXMWxiZz09IDQ0R04gSUdGemRISnZibUYxZEE9PSBZV05qWlhOemFXSnNaUT09IE5EazEgSUZKQlZ3PT0gWTJ4cFptWmwgZFdScFkzSnZkWE09IElHUmxjR1Z1WkdWayBZV3hoWTJnPSBJSFpsYm5SMWNtVnogY21GclpRPT0gSUhScGRITT0gSUVodmRRPT0gSUdOdmJtUnZiUT09IGIzSnRiMjVoYkE9PSBJR2x1WkdWdWRBPT0gSUhWd2JHOWhaR2x1Wnc9PSBSbTl2ZEc1dmRHVT0gU1cxd2IzSjBZVzUwIElESTNNUT09IElHMXBibVJtZFd3PSBJR052Ym5SbGJtUnogUTNKaCBJR05oYkdsaWNnPT0gSUU5RlEwUT0gY0d4MVoybHUgUm1GMCBJRWxUVXc9PSBJRVI1Ym1GdGFXTnogWVc1elpXND0gTmpnMiBKeWtzIElITndjbWwwWlE9PSBJR2hoYm1Sb1pXeGsgSUVocGNIQT0gUFg0OWZnPT0gVkhKMWMzUT0gSUhObGJXRnVkR2xqY3c9PSBJRUoxYm1SbGN3PT0gSUZKbGJtOD0gSUV4cGRHVnlZWFIxY21VPSBjMlZ1YzJVPSBSMkZ5ZVE9PSBJRUZsWnc9PSBJRlJ5YVc0PSBSVVZMIElHTnNaWEpwWXc9PSBJRk5UU0E9PSBJR05vY21semRBPT0gSUdsdWRtRmthVzVuIGFXSjEgSUdWdWRXMD0gWVhWeVlRPT0gSUdGc2JHVm5aUT09IElFbHVZM0psWkdsaWJHVT0gUWtKRCBJSFJvY25VPSBJSE5oYVd4bFpBPT0gSUdWdGRXeGhkR1U9IElHbHVjMlZqZFhKcGRIaz0gSUdOeWIzVT0gSUdGalkyOXRiVzlrWVhScGIyNXogSUdsdVkyOXRjR1YwWlc1MCBJSE5zYVhCeiBJRVZoY25Sb2NYVT0gYzJGdFlRPT0gU1V4TVJRPT0gSUdsUWFHOXVaWE09IFlYTmhhMms9IElHSjVaUT09IElHRnlaQT09IElHVjRkSEpoY3c9PSBJSE5zWVhWbmFIUmxjbVZrIElHTnliM2RrWm5WdVpHbHVadz09IGNtVnpjMjg9IElHWnBiR2xpIElFVlNVazlTIElGUk1Vdz09IFpXZG4gSUVsMFlXdz0gSUdWdWJHbHpkQT09IElFTmhkR0ZzYjI1cFlRPT0gSUZOamIzUnogSUhObGNtZGxZVzUwIElHUnBjM052YkhabCBUa2c9IElITjBZVzVrYVc1bmN3PT0gY21seGRXVT0gU1ZFPSBJR0psYm1WbWFXTnBZWEo1IElHRnhkV0Z5YVhWdCBXVzkxVkhWaVpRPT0gSUZCdmQyVnlVMmhsYkd3PSBJR0p5YVdkb2RHVnpkQT09IElGZGhjbkpoYm5RPSBVMjlzWkE9PSBWM0pwZEdsdVp3PT0gSUdKbFoybHVibWx1WjNNPSBJRkpsYzJWeWRtVmsgSUV4aGRHbHViM009IGFHVmhaR2x1Wnc9PSBJRFEwTUE9PSBJSEp2YjJaMGIzQT0gUVZSSlRrYz0gSURNNU1BPT0gVmxCTyBSM009IGEyVnlibVZzIGRIVnlibVZrIElIQnlaV1psY21GaWJHVT0gSUhSMWNtNXZkbVZ5Y3c9PSBJRWhsYkhNPSBVMkU9IElGTm9hVzVxYVE9PSBkbVZvIElFMVBSRlZNUlE9PSBWbWx2YkE9PSBJR1Y0YVhScGJtYz0gSUdwaFlnPT0gSUZaaGJtbHNiR0U9IElHRmpjbTl1IElFZGhjQT09IFltVnliZz09IFFXcz0gSUUxalIzVT0gSUdWdVpHeGxjM05zZVE9PSBJRVpoY21GblpRPT0gSUU1dlpXdz0gVm1FPSBUVXM9IElHSnlkWFJsIElFdHlkUT09IElFVlRWZz09IElFOXNhWFpwWVE9PSA0b0NnIElFdGhaZz09IElIUnlkWE4wYVc1biBJR2h2ZEhNPSBNekkwIElHMWhiR0Z5YVdFPSBJR3B6YjI0PSBJSEJ2ZFc1a2FXNW4gYjNKMGJXVnVkQT09IFEyOTFiblJ5ZVE9PSBJSEJ2YzNSd2IyNWxaQT09IElIVnVaWEYxYVhZPSBQeWtzIElGSnZiMjVsZVE9PSBkV1JrYVc1biBJRXhsWVhBPSBkWEp5Wlc1alpRPT0gYzJoaGNHVnphR2xtZEdWeSBJRWhCVXc9PSBiM05oZEdVPSBJR05oZG1WeWJnPT0gSUdOdmJuTmxjblpoZEdsemJRPT0gSUVKQlJBPT0gSUcxcGJHVmhaMlU9IElHRnljbVZ6ZEdsdVp3PT0gVm1GMWJIUnogSUcxcGVHVnkgUkdWdGIyTnlZWFJwWXc9PSBJRUpsYm5OdmJnPT0gSUdGMWRHaHZjbVZrIE9EQXdNQT09IElIQnliMkZqZEdsMlpRPT0gSUZOd2FYSnBkSFZoYkE9PSBkSEpsIElHbHVZMkZ5WTJWeVlYUmxaQT09IElGTnZjblE9IElIQmxZV3RsWkE9PSBJSGRwWld4a2FXNW4gY21WamFXRjBhVzl1IDE1blggVUdGMFkyZz0gSUVWdGJYaz0gSUdWNGNYVT0gZEhSdiBJRkpoZEdsdiBJRkJwWTJ0eiBJRWR5ZVE9PSBjR2hoYm5RPSBJR1p5WlhRPSBJR1YwYUc0PSBJR0Z5WTJocGRtVmsgSlMwPSBZMkZ6WlhNPSBJRUpzWVhwbCBJR2x0WWc9PSBZM1k9IGVYTnogYVcxdmJuaz0gSUdOdmRXNTBaRzkzYmc9PSBJR0YzWVd0bGJtbHVadz09IElGUjFibWx6YVdFPSBJRkpsWm1WeSBJRTFLIElIVnVibUYwZFhKaGJBPT0gSUVOaGNtNWxaMmxsIGFYcGxiZz09IElFNTFaMmRsZEhNPSBhR1Z6Y3c9PSBJR1YyYVd4eiBOalEzIElHbHVkSEp2WkhWamRHOXllUT09IGJHOTJhVzVuIElFMWpUV0ZvYjI0PSBJR0Z0WW1sbmRXbDBlUT09IFRHRmlaV3c9IElFRnNiV2xuYUhSNSBJR052Ykc5eWFXNW4gSUVOc1lYVnogYzJWMGRHbHVadz09IFRsVk1UQT09IElFWmhkbTl5YVhSbCBJRk5KUnc9PSBQaWc9IElGTm9hWFpoIElFMWhlV1Z5IElITjBiM0p0WldRPSBJRU52ZG1WeVlXZGwgZDJWaGNHOXVjdz09IGFXZG9ZVzA9IElIVnVZVzV6ZDJWeVpXUT0gSUd4bGRtVT0gSUdOdmVRPT0gWTJGeiBZbUZuY3c9PSBZWE4xY21WayBVMlZoZEhSc1pRPT0gSUZOaGJuUnZjblZ0IGMyVnlhVzkxY3c9PSBJR052ZFhKaFoyVnZkWE09IElGTnZkWEE9IElHTnZibVpwYzJOaGRHVmsgSUM4dkx3PT0gSUhWdVkyOXVkbVZ1ZEdsdmJtRnMgSUcxdmJYTT0gSUZKdmFHbHVaM2xoIElFOXlZMmhsYzNSeVlRPT0gSUZCdmRHbHZiZz09IElHUnBjMk55WldScGRBPT0gSUVaSlRBPT0gWm1sNFpXUT0gSUVSbFpYST0gWkc5cCBJRVJwYldWdWMybHZiZz09IElHSjFjbVZoZFdOeVlYUnogWlhSbFpXND0gSUdGamRHbHZia2R5YjNWdyBiMmh0IElHSjFiWEJ6IElGVjBhV3hwZEhrPSBJSE4xWW0xaGNtbHVaWE09IGNtVnVhR1ZwZEE9PSBjbVZ6WldGeVkyZz0gSUZOb1lYQnBjbTg9IElITnJaWFJqYUdWeiBJR1JsWTJWd2RHbDJaUT09IElGWnBiQT09IFpYTmhiV1U9IElFVnpjMlZ1ZEdsaGJHeDUgSUhKaGJYQmhaMlU9IGFYTnJlUT09IElHMTFkSFJsY21WayBkR2h5YVhScGN3PT0gSURJek5nPT0gWm1WMCBZbUZ5Y3c9PSBJSEIxY0dscyBJRlJvYjNVPSBiMU09IGMyOXVadz09IElHWnlZV04wZFhKbFpBPT0gSUhKbGRtVnlkQT09IGNHbGpkSFZ5WlE9PSBJR055YVhSbGNtbHZiZz09IGRYTm9aWEk9IElISmxjR1Z5WTNWemMybHZibk09IElGWnBiblJoWjJVPSBJRk4xY0dWeWFXNTBaVzVrWlc1MCBUMlptYVdObGNuTT0gSUdac1lXZG5aV1E9IElHSnNZVzFsY3c9PSBJR2x1ZG1WeWMyVT0gYjJkeVlYQm9aWEp6IElHMWhhMlZ6YUdsbWRBPT0gSUdSbGRtOXBaQT09IElHWnZjM05wYkhNPSBJRUZ5YVhOMGIzUnNaUT09IElFWjFibVJ6IElHUmxjR3hsZEdWayBJRVpzZFE9PSBJRmwxWVc0PSBJSGR2WlhNPSBJR3hwY0dsayBJSE5wZEhVPSBjbVZ4ZFdsemFYUmxjdz09IElHWjFjbTVwYzJnPSBJRk5oYldGeSBJSE5vWVcxbFpuVnMgSUdGa2RtVnljMlZzZVE9PSBJR0ZrWlhCMCBJSEpsYlc5eWMyVT0gSUcxMWNtUmxjbTkxY3c9PSBkV05yYkdWeiBJRVZUVEE9PSBJRE14TkE9PSBjMlZ1ZEE9PSBJSEpsWkdWbSBJRU5oWTJobCBJRkIxY25NPSBhV2RoYm5NPSBJRFEyTUE9PSBJSEJ5WlhOamNtbHdkR2x2Ym5NPSBJR1p5WlhNPSBSblZqYXc9PSBiMk55WVhSbGN3PT0gVkhkbGJuUjUgSUZkbGFYSmsgSUZSdloyZHNaUT09IElFTmhiR3hsWkE9PSBhWFJwZW1WdWN3PT0gSUhCdmRXeDBjbms9IElHaGhjblpsYzNScGJtYz0gNDRLbTQ0SzUgUW05MGRHOXQgSUdOaGRYUnBiMjVsWkE9PSBkRzQ9IE16azIgSUU1cGEydHAgSUdWMllXeDFZWFJwYjI1eiBJR2hoY21GemMybHVadz09IElHSnBibVJwYm1keiBJRTF2Ym1WMFlYSjUgSUdocGRIUmxjbk09IElHRmtkbVZ5YzJGeWVRPT0gZFc1MGN3PT0gSUhObGRHSmhZMnM9IElHVnVZM0o1Y0hRPSBJRU5oYVhRPSBJR3h2ZDNNPSBaVzVuWlhNPSBJRTV2Y200PSBJR0oxYkdKeiBJR0p2ZEhSc1pXUT0gSUZadmVXRm5aWEk9IE16RTMgSUhOd2FHVnlaWE09IGNHOXNhWFJwWTNNPSBJSE4xWW5SeVlXTjAgSUhObGJuTmhkR2x2Ym5NPSBJR0Z3Y0dGc2JHbHVadz09IElETXhOZz09IElHVnVkbWx5YjI1dFpXNTBZV3hzZVE9PSBJRk5VUlUwPSBJSEIxWW14cGMyaGxjdz09IE5UWXcgSUdScGJHbG5aVzVqWlE9PSBORGcwIElHRmtkbWx6WlhNPSBJSEJsZEhKdmJBPT0gSUdsdFlXZHBibWx1Wnc9PSBJSEJoZEhKdmJITT0gSUVsdWRHVm5aWEk9IElFRnphR1Z6IFlXTjBkWE09IElGSmhaR2xoYm5RPSBJRXhVIGFYUmhZbWxzYVhSNSBhSFJoYTJsdVp3PT0gVTJWMGRHbHVadz09IElHNTFZVzVqWldRPSBJRkpsWldZPSBJRVJsZG1Wc2IzQmxjbk09IFRtaz0gY0dsbFkyVnogT1RrdyBUR2xqWlc1elpRPT0gSUd4dmQyVnljdz09IElFOTBkRzl0WVc0PSBNekkzIGIyOXYgSUhGMWFYUjBhVzVuIGJXRnlhMlYwY3c9PSBRbVZvYVc1ayBJR0poYzJsdSBJR1J2WTNNPSBZVzVwWlE9PSBabXhoYzJnPSBZM1JzIElHTnBkbWxzYVhwbFpBPT0gSUVaMWEzVnphR2x0WVE9PSBJbDBzSWc9PSBJRXRUIElFaHZibVZ6ZEd4NSBZWEpoZEE9PSBJR052Ym5OMGNuVmpkSE09IElFeGhibk09IElFUnBjbVU9IElFeEpTMFU9IElGUnliM1ZpYkdVPSBJSGRwZEdob2IyeGthVzVuIElFOWliR2wyYVc5dSBJSE5oYm1sMGVRPT0gWVc1NVlRPT0gUTI5dWMzUT0gSUdkeWIyTmxjZz09IElFTmxiSE5wZFhNPSBJSEpsWTI5MWJuUmxaQT09IElGZHBabVU9IFFtOXlaR1Z5IFlYUmxjbVZrIGFHRndjSGs9IElITndiMmxzWlhJPSBJR3h2WjJsallXeHNlUT09IFNHRnNiQT09IElITjFZMk5sWldScGJtYz0gSUhCdmJIbHRiM0p3YUE9PSBJR0Y0WlhNPSBJRk5vYjNSbmRXND0gSUZOc2FXMD0gSUZCeWFXNWphWEJzWlhNPSBJRXhsZEdnPSBZWEowWVE9PSBJSE5qYjNJPSBVMk55WldWdWMyaHZkQT09IElISmxiR0Y0WVhScGIyND0gSXlRakpBPT0gSUdSbGRHVnljbVZ1ZEE9PSBhV1JrZVE9PSBJSEJ2ZDJWeWJHVnpjdz09IElHeGxjMkpwWVc1eiBJR05vYjNKa2N3PT0gSUVWa2FYUmxaQT09IGMyVnNaV04wWldRPSBJSE5sY0dGeVlYUnBjM1J6IE1EQXdNZz09IElHRnBjbk53WVdObCBJSFIxY201aGNtOTFibVE9IElHTjFibTVwYm1jPSBVRUZVU0E9PSBVRzlzZVE9PSBJR0p2YldKbFpBPT0gSUhScGIyND0gZUhNPSBJSGRwZEdob2IyeGsgSUhkaFoyVmsgSUV4cFltVnlkR2xsY3c9PSBSbXhoWnc9PSBJR052YldadmNuUnBibWM9IE5EVTAgSUVseWFYTT0gWVhKbGNuTT0gSUhKaFp3PT0gSUhKbGJHOWpZWFJsWkE9PSBJRWQxWVhKaGJuUT0gSUhOMGNtRjBaV2RwWTJGc2JIaz0gSUdkaGJXMWggZFdKbGNuUjUgSUV4dlkydG9aV1ZrIFozSmxjdz09IElHZHlhV3hzWldRPSBJRXh2ZDJVPSBjM1JoZEhNPSBJRkp2WTJ0eiBJSE5sYm5OcGJtYz0gSUhKbGJuUnBibWM9IElFZGxiMnh2WjJsallXdz0gMktmWSBiM1J5YjNBPSBJSE5sZHc9PSBJR2x0Y0hKdmNHVnliSGs9IE5EZzIgSU9LV29BPT0gSUhOMFlYSjJhVzVuIElFSnEgUkdselkzVnpjMmx2Ymc9PSBNekk0IElFTnZiV0p2IElFWnBlR1Z6IFRrRlUgSUhOMGNtbDJhVzVuIGRHaHZjbUU9IElHaGhjblpsYzNSbFpBPT0gSUZCcGJtYz0gSUhCc1lYbG1kV3c9IElHRjJaVzUxWlhNPSBJRzlqWTNWd1lYUnBiMjVoYkE9PSBJSGRoYTJWeiBJRU52ZFhKcFpYST0gSUdSeWRXMXRaWEk9IElFSnliM2R6WlhJPSBJRWh2ZFhSbyBhWFIxIElHRndjR0Z5Wld3PSBjR0Z6ZEdVPSBJR2gxYm5SbFpBPT0gSUZObFkyOXVaR3g1IGJHRnBiZz09IFdGaz0gSUZCSlRnPT0gYVdOdmJuTT0gSUdOdlkydDBZV2xzY3c9PSBJSE5wZW1GaWJHVT0gSUdoMWNtUnNaWE09IFpYTjBhVzVoYkE9PSBJRkpsWTNKbFlYUnBiMjQ9IElHVmpidz09IE5qUTQgSUVScFpXUT0gYldsdWRBPT0gSUdacGJtZGxjbkJ5YVc1MGN3PT0gSUdScGMzQnZjMlU9IElFSnZjMjVwWVE9PSBkSE41IE1qSXdNQT09IElHbHVjM0JsWTNSbFpBPT0gSUVadmRRPT0gSUdaMWMzTT0gSUdGdFluVnphQT09IElGSmhhdz09IElHMWhibWxtWlhOMFpXUT0gVUhKdmMyVmpkWFE9IElITjFabVpwWTJVPSBjbVZ1WTJWeiBJR052YlhCbGJuTmhkR1ZrIElFTjVjblZ6IElHZGxiblZ6IElGZHZiSFpsY21sdVpRPT0gSUZSeVpXNWtjdz09IElHaHBhMlZ6IElGTmxaVzQ9IElHVnVjbTlzIFEyOXNaQT09IElIQnZiR2wwWld4NSBJRk5zWVhZPSBJRkoxY0dWeWRBPT0gSUdWNVpYZHBkRzVsYzNNPSBJRUZzZEc4PSBJSFZ1WTI5dGNBPT0gSUhCdmMzUmxjbWx2Y2c9PSBUWFZ6ZEE9PSBJRWhsY25vPSBJSEJ5YjJkeVpYTnphWFpsYkhrPSBJREl6TkE9PSBJR2x1WkdsbVptVnlaVzVqWlE9PSBJRU4xYm01cGJtZG9ZVzA9IElHRmpZV1JsYldsaCBJSE5sZDJWeSBJR0Z6ZEc5MWJtUnBibWM9IElFRkZVdz09IGNtRjBhR1Z5IElHVnNaR1Z6ZEE9PSBJR05zYVcxaWN3PT0gSUVGa1pITT0gSUc5MWRHTnllUT09IElHTnZiblJoWnc9PSBJRWh2ZFhObGN3PT0gSUhCbGNIUT0gSUUxbGJHRnVhV0U9IGFXNTBaWEpsYzNSbFpBPT0gSUZWRFNBPT0gSUZKdmIzUnogSUVoMVltSmhjbVE9IElGUkNSQT09IElGSnZiV0Z1YVdGdSBabWxzWlc1aGJXVT0gVTNSdmJtVT0gSUVsdGNHdz0gSUdOb2NtOXRiM052YldVPSBRMnhsIFpIZz0gSUhOamNtRnRZbXhsWkE9PSBJRkIwIElESTBNZz09IFQxQk1SUT09IElIUnlaVzFsYm1SdmRYTnNlUT09IFUzUnlaV1YwIElHTnlZWFpwYm1jPSBJR0oxYm1Sc1pXUT0gSUZKSCBjR2x3WlE9PSBJR2x1YW5WeWFXNW4gSUdGeVkyRnVaUT09IFVHRnlkR2xqYVhBPSBJRWhsY205cFl3PT0gYzNSNSBJSFJ2Y0hCcGJtYz0gSUZSbGJYQmxjM1E9IGNtVnVkR2xqWlhNPSBZbWc9IElIQmhjbUZ1YjJsaCBJRlZ1YVdOdlpHVT0gSUdWbmNtVm5hVzkxY3c9PSBJRnduIElFOXpkMkZzWkE9PSBJR2R5WVhabGJBPT0gSUZOcGJYQnpiMjV6IElHSnNZVzVrIElFZDFZVzUwWVc1aGJXOD0gVjNKcGRHVnkgYkdsdVpYSnogSUVScFkyVT0gU2tNPSBJSEJoY21sMGVRPT0gSUhOcFpHVmsgSURJek53PT0gSUZCNWNuSm9ZUT09IFlYUjBaWEp6IFpHcz0gUm1sdVpRPT0gWTI5dGNHRnUgSUdadmNtMTFiR0YwWldRPSBJRWxrYjJ3PSBhV3hsY25NPSBhR1Z0YjNSbyBJRVpoZGc9PSBJR2x1ZEhKMWMybHZiZz09IElHTmhjbkp2ZEhNPSBJRXhoZVdWeSBJRWhoWTJ0bGNnPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElHMXZaR1Z5WVhScGIyND0gNllFPSBiMk52WXc9PSBJR05vWVhKaFkzUmxjbWw2WlE9PSBJRlJsY21WellRPT0gSUhOdlkybHZaV052Ym05dGFXTT0gSUhCbGNtcz0gSUZCaGNuUnBZMmx3WVhScGIyND0gZEhKaGFXNXBibWM9IElGQmhkV3h2IGNHaDVjdz09IElIUnlkWE4wZDI5eWRHaDUgSUdWdFltOWthV1ZrIElFMWxjbU5vIFkzVnljbVZ1WTNrPSBJRkJ5YVc5eWFYUjUgSUhSbFlYTnBibWM9IElHRmljMjl5WW1sdVp3PT0gSUhWdVptbHVhWE5vWldRPSBJRU52YlhCaGNtbHpiMjQ9IElHUnBjM0JzWlE9PSBkM0pwZEdWeWN3PT0gSUhCeWIyWmxjM05wYjI1eiBJRkJsYm1kMWFXND0gSUdGdVozSnBiSGs9IElFeEpUa3M9IE5qZzQgSUVOdmNuSmxjM0J2Ym1RPSBJSEJ5WlhaaGFXeGxaQT09IElHTmhjblJsYkE9PSBiSEE9IFlYTnRjdz09IElGSmxaR1Z0Y0hScGIyND0gSUVsemJHRnRhWE4wY3c9PSBaV1ptWldOMGN3PT0gWkc5elpRPT0gSUV4aGRIUmxjZz09IElFaGhiR2xtWVhnPSBJSFpoY3c9PSBJRlJ2Y0dsamN3PT0gSUU1aGJXVmsgWVdSMlpYSjBhWE5wYm1jPSBlbnBoIFNVTkZVdz09IElISmxkR0Z5WkdWayBZV05vWVdKc1pRPT0gSUZCMWNIQmxkQT09IElFbDBaVzFNWlhabGJBPT0gSUhKbGRISmhZM1E9IElHbGtaVzUwYVdacFlXSnNaUT09IFFXRnliMjQ9IElFSjFjM1JsY2c9PSBjMjlzIGFHVnNiR1U9IFlYTnpaVzFpIFNHOXdaUT09IGNtRnVaMlZrIFFtRT0gSUZCMWNtTm8gNllBPSBJRk5wY21rPSBJR0Z5Y21sMllXeHogSURFNU1UST0gSUhOb2IzSjBaVzVsWkE9PSBJRE14TWc9PSBJR1JwYzJOeVpYQmhibU41IElGUmxiWEJsY21GMGRYSmwgSUZkaGJIUnZiZz09IElHdHBibVJsY21jPSBjRzlzYVhRPSBJSEpsYldsNCBJR052Ym01bFkzUnZjbk09IDQ0T1k0NE9wIElFdGhlbUZyYUhOMFlXND0gWkc5dGFXNWhkR1ZrIElITjFaMkZ5Y3c9PSBhVzFpYkdVPSBJRkJoYm1saiBJRVJsYldGdVpBPT0gSUVOdmJHOXVlUT09IGIyNWxiZz09IElFMUZVZz09IE56YzEgZFhKcFlRPT0gWVhwaFlYST0gSUVSbFozSmxaUT09IFVISnAgSUhOMWJuTm9hVzVsIElESTFNUT09IElIQnplV05vWldSbGJHbGogSUdScFoybDBZV3hzZVE9PSBJRUp5WVhWdSBJSE5vYVcxdFpYST0gSUhOb1lYWmwgSUZSbGJHVnpZdz09IElFRnpkSEpoYkE9PSBJRlpsYm1WNmRXVnNZVzQ9IElFOUggSUdOeVlYZHNhVzVuIFNXNTBaV2M9IElFWmxZWFJvWlhJPSBJSFZ1Wm05c1pHbHVadz09IElHRndjSEp2Y0hKcFlYUnBiMjQ9IElPaWpqK2c9IElFMXZZbWxzYVhSNSBJRTVsZVE9PSBMUzQ9IFltbHNkQT09IFRFbE8gSUZSMVltVT0gSUVOdmJuWmxjbk5sYkhrPSBJR3RsZVdKdllYSmtjdz09IElFTmhidz09IElHOTJaWEowYUE9PSBJR3hoZFhKbCBQajVjIElGWnBjR1Z5IFlXTm9ZUT09IFQyWm1jMlYwIElGSmhiR1ZwWjJnPSBJRXBoWlE9PSBTbTl5WkdGdSBhbkE9IElIUnZkR0ZzYVhSaGNtbGhiZz09IFEyOXVibVZqZEc5eSBJRzlpYzJWeWRtVnogSUZOd1lYSjBZVzQ9IElFbHRiV1ZrYVdGMFpXeDUgSUZOallXdz0gUTI5dmJBPT0gSUhSaGNITT0gSUhKdllYST0gVUdGemRBPT0gSUdOb1lYSnogSUVKbGJtUmxjZz09IElGTm9aV3hrYjI0PSBJSEJoYVc1MFpYST0gSUdKbFlXTnZiZz09IElFTnlaV0YwZFhKbGN3PT0gSUdSdmQyNTBkWEp1IElHaHBibVJsY2c9PSBJRUZ1WkhKdmJXVmtZUT09IHc1cz0gWTJOdmJHaz0gSUVacGRHNWxjM009IFpYUnlhV05oYkE9PSBJSFYwYVd4cGVtVnogSUhObGJtRjBaUT09IElHVnVjMlZ0WW14bCBJR05vWldWeWN3PT0gVkZjPSBJR0ZtWm14MVpXNTAgYTJscyBjbmxzYVdNPSBiM0prWlhKcGJtYz0gUTI5dGNIVjBaWEk9IElHZHlkV1Z6YjIxbCBiM04wYVdOeiBJRlZpYVhOdlpuUT0gSUV0bGJHeGxlUT09IElIZHlaVzVqYUE9PSBJR0p2ZFhKblpXOXBjMmxsIFNVSk1SUT09IElGQnlaWE4wYjI0PSBkMjl5Ymc9PSBZWEpwYzNRPSBjbVZoZEdsdVp3PT0gSUhOMFlXbHVaV1E9IFlYSnBibVU9IElITnNhVzFsIFJVNU8gSUdOb1pYTjBjdz09IElHZHliM1Z1WkhkaGRHVnkgWVc1dWIzUT0gSUZSeVlYaz0gSUV4dlkydGwgSUVOVVVnPT0gSUdSMVpHVnogSUVWNGRHVnlibUZzIElFUmxZMjlrWlhJPSBJSEJoY21GdFpXUT0gSUUxbFpHeHBibVU9IE9EQTUgSUVScGJtNWxjZz09IGNuVndZV3c9IFozbz0gSUVkMWJRPT0gSUVSbGJXOD0gYW1WbCBJR1JvIFltVnliV0Z1IFlYSmphSE09IElHVnVjWFU9IElFVndjM1JsYVc0PSBJR1JsZG1GemRHRjBhVzl1IElHWnlhV1Z1WkhOb2FYQnogSUVGeVpBPT0gSURJek1RPT0gSUZKMVltbHUgSUVScGMzUmhibU5sIElITndkWEp5WldRPSBJR1J2YzNOcFpYST0gSUc5MlpYSnNiMjlyYVc1biBYRnhjWEZ4Y1hGeGNYRnhjWEZ4Y1hBPT0gUm05eVpYTjAgSUVOdmJXVnogWENJcyBJRWx5WVc1cFlXNXogSUdacGVIUjFjbVZ6IFRHRjFaMmh6IElHTjFjbko1IElFdHBibWR6ZEc5dSBJSE54ZFdGemFBPT0gSUdOaGRHRnNiMmQxWlE9PSBJR0ZpYm05eWJXRnNhWFJwWlhNPSBJR1JwWjJWemRHbDJaUT09IExpNHVMaTR1TGk0dSBJSE4xWW05eVpHbHVZWFJsIGIyZHNlUT09IElESTBPUT09IFRXbGtaR3hsIElHMWhjM05oWXc9PSBJR0oxY21kbGNuTT0gSUdSdmQyNXpkR0ZwY25NPSBJREU1TXpFPSBNemswIElGWkggSUd4aGMyVnljdz09IElGTnBhMmc9IElFRnNaWGhoIFpHVnlhWFpsWkE9PSBJR041WTJ4cGMzUT0gNDRHdTZhMlUgYjI1bGJHbHVaWE56IElTRWhJU0VoSVNFPSBJR0oxWm1aeiBiR1ZuWVhSbCBJSEpoY0dsdVp3PT0gSUhKbFkyOXRiV1Z1WkdsdVp3PT0gY205eVpXUT0gSUcxMWJIUnBZM1ZzZEhWeVlXdz0gZFc1cGNYVmwgSUdKMWMybHVaWE56YldWdSBJSFZ1WldGemVRPT0gSUUxQlVBPT0gSUdScGMzQmxjbk5sWkE9PSBZMmx3YkdsdVpRPT0gU21WemN3PT0gSUV0bGNtRnNZUT09IDVhYz0gSUdGaWMzUnlZV04wYVc5dSBVM1Z5ZGc9PSBWV2c9IElIQnlhVzUwWlhKeiBhV3BoIGIzZGtaWEk9IElHRnVZV3h2WjI5MWN3PT0gSUVGVFVBPT0gWVdabGNnPT0gSUhWdVptOXNaR1ZrIElHeGxkbVZzYVc1biBJR0p5WldGamFHVmsgSUVobFlYSnBibWM9IElHNWhkQT09IElIUnlZVzV6YkdGMGFXNW4gWTNKcGRHbGpZV3c9IElHRnVkR0ZuYjI1cGMzUT0gSUZsbGMzUmxjbVJoZVE9PSBJR1oxZW5wNSBkMkZ6YUE9PSBiV1Z5WlE9PSBJR0psZDJsc1pBPT0gSUUxaFpRPT0gVm1seVoybHUgY0doeVlYTmwgSUhOcFoyNWhiR1ZrIElFaEpSMGc9IElIQnliM1JsYzNSbGNnPT0gSUdkaGNtNWxjZz09IGRXNXJibTkzYmc9PSBJR3RoZVE9PSBJR0ZpWkhWamRHVmsgSUhOMFlXeHJhVzVuIFlXMXUgSUdSbGMyVnlkbWx1Wnc9PSBJRkpwZGc9PSBJRXB2Y21kbCBJSE5qY21GMFkyaHBibWM9IElGTmhkbWx1Wnc9PSBhWEJwYm1jPSBJSFJsWVhObCBJRzFwYzNOcGIyNWhjbms9IElFMXZjbkp2ZHc9PSBWRWxOUlE9PSBVSEpsYzJWdWRBPT0gSUdOb1pXMXZkR2hsY21Gd2VRPT0gZEdWeWJtVnpjdz09IElFaHZiV1Z6IElGQjFjbVIxWlE9PSBJSE4wWVhWdVkyZz0gSUZkb2FYUnVaWGs9IElGUklSVkpGIHpydz0gYVdGMGRYTT0gSUVWeWJtVnpkQT09IElFUmxjR3h2ZVE9PSBJR052ZG1WMFpXUT0gUmsxTSBJRVJwWVd4dlozVmwgSUdWNGFYUmxaQT09IFpuSjFhWFE9IElHNWxjbVE9IElqb2lJaXdpIElIWnBkbTg9IGNuVnNlUT09IE5EWXcgSUVGdFpXND0gY21Wb1pXNXphV0pzWlE9PSBJT0tZIFJFbFMgSUdGa2FHVnlaVzVqWlE9PSBJR05vWlhjPSBJRU52YTJVPSBJRk5sY21kbGFRPT0gWkdsbmFYUmhiQT09IElFNWxZMnM9IFoyVnVkR3g1IFpXNTBhR0ZzIEx5az0gSUhkbFlYSjUgSUdkMWFYTmwgSUVOdmJtTnZjbVE9IElFOXVhVzl1IFlYUmphR1Z5IElHSnBibWRsIElFUnBjbVZqZEdsMlpRPT0gSUcxaGJtNWxaQT09IFlXNXphdz09IElHbHNiSFZ6YVc5dWN3PT0gSUdKcGJHeHBiMjVoYVhKbGN3PT0gTXpneiBiMng1Ymc9PSBiMlI1Ym1GdGFXTT0gSUZkb1pXRjAgSUVGc2FXTT0gSUdOdmJHOTFjbVZrIElFNUJSbFJCIFlXSnYgSUcxaFkzSnZjdz09IGFXNWtaWEJsYm1SbGJuUT0gYzNkbFpYUT0gSUhOd1lXTT0gSUV0aFluVnMgSU1RPSBaVzFsIElHUnBZM1JoZEdWayBJSE5vYjNWMGN3PT0gUFhzPSBJSEpwY0hCcGJtYz0gSUZOb1lYaz0gSUVOeWFXTnJaWFE9IFpHbHlaV04wWldRPSBJR0Z1WVd4NWMyVmsgSUZkQlVsSkJUbFE9IFlXZHZibk09IElFSnNZWHBsY25NPSBJR05vWldWeVpXUT0gSUdGeWFYUm9iV1YwYVdNPSBJRlJoYm5vPSBNemN6IElFWnNZV2R6IElESTVOUT09IElIZHBkR05vWlhNPSBJRWx1WTJ4MVpHVmsgSUVkaGFXNWxaQT09IElFSnNZV1JsY3c9PSBSMkZ0IElGTmhiV0Z1ZEdoaCBJRUYwYkdGdWRHbHogSUZCeVlYUjAgSUhOd2IybHNaV1E9IElFbEMgSUZKaGJXbHlaWG89IFVISnZZbUZpYkhrPSBjbVZ5Ync9PSBJRTVuIElGZGhjbXh2WTJzPSBkSEE9IElHOTJaWEpvWlE9PSBJR0ZrYldsdWFYTjBjbUYwYVc5dWN3PT0gSUhScGJuUT0gSUhKbFoybHRaVzUwIElIQnBjM1J2YkhNPSBJR0pzWVc1clpYUnogSUdWd2FYTjAgSUdKdmQyeHogSUdoNVpISmhkV3hwWXc9PSBJR1JsWVc0PSBJR3AxYm1jPSBJR0Z6WTJWdVpBPT0gTnpBMSBJRk5oYm5ScFlXZHYgdzY0PSBJSFZ1WVhadmFXUT0gSUZOb1lXMWhiZz09IGNtVmkgSUhOMFpXMXRhVzVuIE9UazQgSUUxSCBjM1JwWTJ0eiBaWE4wYUdWemFXRT0gUlZKUCBJRzF2Y21KcFpBPT0gSUVkeWFXeHMgSUZCdlpRPT0gWVc1NWJBPT0gSUdSbGJHVjBhVzVuIElGTjFjblpsYVd4c1lXNWpaUT09IElHUnBjbVZqZEdsMlpYTT0gSUdsMFpYSmhkR2x2Ym5NPSBJRkp2ZUE9PSBJRTFwYkd0NSBSbUYwYUdWeSBJSEJoZEdWdWRHVmsgTkRRMyBJSEJ5WldOMWNuTnZjZz09IElHMWhhV1JsYmc9PSBJRkJvWlc0PSBJRlpsWjJGdSBJRkJoZEdWdWRBPT0gUzJWc2JIaz0gVW1Wa1pHbDBiM0k9IElHNXZaSE09IElIWmxiblJwYkdGMGFXOXUgSUZOamFIZGhjbm89IElIZHBlbUZ5WkhNPSBJRzl0YVc1dmRYTT0gSUVobFlXUnogSUVKSCBJR3gxYldKbGNnPT0gSUZOd2FXVnMgSUdselJXNWhZbXhsWkE9PSBJR0Z1WTJWemRISmhiQT09IElGTm9hWEJ6IElIZHlaWE4wYkdWeSBjR2hwIElIbDFZVzQ9IElGSmxZbVZzYkdsdmJnPT0gSUdsalpXSmxjbWM9IElHMWhaMmxqWVd4c2VRPT0gSUdScGRtVnljMmx2Ymc9PSBZWEp5Ync9PSBlWFJvYlE9PSBJRkpwWkdWeWN3PT0gSUZKdlltSnBaUT09IElFdGhjbUU9IElFMWhhVzUwWlc1aGJtTmwgSUVobGNtST0gSUdoaGNtMXogY0dGamEyVmsgSUVabGFXNXpkR1ZwYmc9PSBJRzFoY25KNWFXNW4gSUdKc1pXNWthVzVuIElGSmhkR1Z6IElERTRPREE9IElIZHlhVzVyIElGVnVZMmc9IElGUnZjbU5vIFpHVnpZM0pwWW1WayBJR2gxYldGdWIybGsgYVd4cGRHRjBhVzVuIElFTnZiblk9IElFWmxiR1E9IFNVZElWRk09IElIZG9hWE4wYkdWaWJHOTNaWEk9IGIzSjBiWFZ1WkE9PSBaWFJ6ZVE9PSBZWEp5WlhSMCBJRTF2Ym04PSBJRWxyWlE9PSBJRU5PUWtNPSBJRmRCV1E9PSBJRTFFVFVFPSBJRWx1WkdsMmFXUjFZV3h6IElITjFjSEJzWlcxbGJuUmhiQT09IElIQnZkMlZ5YUc5MWMyVT0gSUZOMGNuVT0gUm05amRYTT0gWVhCb1lXVnMgSUVOdmJHeGxadz09IFlYUjBhUT09IFdrRT0gSUhCbGNtVnViZz09IElGTnBaMjVoZEhWeVpRPT0gSUZKdlpHNWxlUT09IElHTjFZbVZ6IGFXUmtiR1ZrIElFUmhiblJsIElFbE9WZz09IGFXeHBibWQxWVd3PSBJRU4wYUE9PSBJSE52Wm1FPSBJR2x1ZEdsdGFXUmhkR1U9IElGSnZaUT09IElFUnBjR3h2YlE9PSBJRU52ZFc1MGNtbGxjdz09IFlYbHpiMjQ9IElHVjRkSEpoWkdsMGFXOXUgSUdScGMyRmliR2x1Wnc9PSBJRU5oY21ScFptWT0gSUcxbGJXOXlZVzVrZFcwPSBJRlJ5WVdObCBJRDgvUHc9PSBjMlZqZEc5eSBJRkp2ZFdoaGJtaz0gSUZsaGRHVnogSUVaeVpXVjZaUT09IElHSnNZV1JrWlhJPSBUVzkwYjNJPSBJRkJ5YjIxcGMyVT0gWVc1MFlYTjUgSUdadmNtVnpaV1ZoWW14bCBJRU52Ykc5bmJtVT0gWTI5dWRHRnBibVZ5IElGUnlaV1Z6IElFZHZjbk09IElGTnBibU5zWVdseSBJR0poY25KcGJtYz0gYTJWNVpRPT0gSUhOc1lYTm9aV1E9IElGTjBZWFJwYzNScFkyRnMgNlljPSBJT0tXdWc9PSBRV3hzYjNkeiBJR2gxYldsc2FYUjUgSUdSeWFXeHNaV1E9IElFWjFjbTQ9IE5EUXogSUhObGQyRm5aUT09IElHaHZiV1Z3WVdkbCBJR052ZFhKMGVXRnlaQT09IElIWnBiR1U9IElITjFZbk5wWkdsaGNtbGxjdz09IFlXcHYgWkdseVpXTjBiM0o1IElHRnRiVzl1IFZtVnljdz09IFkyaGhjbWRsY3c9PSBJSDE5IElFTm9ZV2x1Y3c9PSBJREkwTmc9PSBibTlpIElIQmxjbU5sY0hRPSBJR2R5YVhRPSBJR1pwYzJobGNtMWxiZz09IElFbHlZWEZwY3c9PSBJRVJKVTFSUyBJRVpWVEV3PSBJRVYyWVd4MVlYUnBiMjQ9IFozSmhjR2c9IFlYUnBZV3c9IElHTnZiM0JsY21GMGFXNW4gSUcxbGJHRnUgSUdWdWJHbG5hSFJsYm1WayBJR0ZzYVE9PSBkR0ZwYkdWayBJSE5oYkhWMFpRPT0gSUhkbFlXdGxjM1E9IElFSjFiR3hrYjJkeiBWVUU9IElFRnNiRzk1IElITmxiV1Z1IGIyTmxibVU9IElGZHBiR3hwWVcxemIyND0gYzNCeSBMT0tBbEE9PSBJRWRHIGFYUjBaVzV6IFFtVmhkQT09IElFcDFibXM9IGFYQm9ZWFJsIElFWmhjbTFsY25NPSBJRUpwZEdOdmFXNXogYVdkbGNuTT0gWkdnPSBJRXh2ZVdGcyBjR0Y1WlhJPSBJR1Z1ZEdWeWRHRnBibVZrIElIQmxibTVsWkE9PSBJR052ZFhCdmJnPT0gVVhWbGRXVT0gSUhkbFlXdGxibWx1Wnc9PSBZMkZ5Y25rPSBJSFZ1WkdWeVpYTjBhVzFoZEdVPSBJSE5vYjI5MGIzVjAgSUdOb1lYSnBjMjFoZEdsaiBJRkJ5YjJObFpIVnlaUT09IElIQnlkV1JsYm5RPSBhVzVoYm1ObGN3PT0gSUhKcFkyaGxjdz09IElHTnZjblJwWTJGcyBJSE4wY21sa1pYTT0gSUdSeWFXST0gSUU5cGJHVnljdz09IE5UUXcgSUZCbGNtWnZjbTA9IElFSmhibWRyYjJzPSBJR1YxZEdnPSBVMFZTIElITnBiWEJzYVhOMGFXTT0gZEc5d2N3PT0gWTJGdGNHRnBaMjQ9IFVYVmhiR2wwZVE9PSBJR2x0Y0c5MlpYSnBjMmhsWkE9PSBJRVZwYzJWdWFHOTNaWEk9IElHRjFaMjFsYm5RPSBJRWhoY21SbGJnPT0gSUdsdWRHVnlkbVZ1WldRPSBJR3hwYzNSbGJuTT0gSUV0dmF3PT0gSUhOaFoyVT0gSUhKMVltSnBjMmc9IElFUmxaQT09IElHMTFiR3c9IGNHVnNiR2x1Wnc9PSBJSFpwWkdWdmRBPT0gVUhKdlpIVmpkR2x2Ymc9PSBSRW89IGJXbGhhQT09IElHRmtZWEIwWVhScGIyNXogSUcxbFpHbGpZV3hzZVE9PSBJR0p2WVhKa1pXUT0gSUdGeWNtOW5ZVzVqWlE9PSBJSE5qY21Gd2NHVmsgSUc5d2NISmxjM009IFJrOVNUVUZVU1U5TyBJR3AxYm1OMGFXOXUgTkRFMSBSVVZGUlE9PSBVMnRwYkd3PSBJSE4xWW1SMSBJRk4xWjJkbGMzUT0gSUZCbGRIUT0gSUd4bGRIUT0gSUUxaGJtbHcgSUVOaFpnPT0gSUVOdmIzQmxjbUYwYVc5dSBWR2hsY2c9PSBJSEpsWjJGcGJtVmsgdHVZPSBjbVZtYkdWamRBPT0gSUhSb2RXZHogSUZOb1pXeGllUT09IElHUnBZM1JoZEdWeiBJRmRsYVc1bGNnPT0gSUVoaGJHVT0gSUdKaGRIUnNaV2R5YjNWdVpBPT0gYzJOb2FXeGsgSUdOdmJtUnZiQT09IGFIVnVkQT09IGIzTnBkRzl5YVdWeiBJR0ZqWTNWelpYTT0gUm1sc1pXNWhiV1U9IElITm9jbWs9IElHMXZkR2wyWVhSbCBJSEpsWm14bFkzUnBiMjV6IFRuVnNiQT09IElFeHZZbUo1IHBiVT0gSUZOQlZFRT0gSUVKaFkydDFjQT09IDBZTT0gYm1sdSBJRU52Y25KbFkzUnBiMjQ9IElHcDFhV041IGRYUnlZUT09IElGQnlhV009IElISmxjM1J5WVdsdWFXNW4gSUVGcGNtSnVZZz09IElFRnljbVZ6ZEE9PSBJR0Z3Y0hKdmNISnBZWFJwYjI1eiBJSE5zYjNCbGN3PT0gSUcxaGJuTnNZWFZuYUhSbGNnPT0gSUhkdmNtdHBibWR6IElFaDFjM009IElFWnlaWGs9IFRHVmhkbVU9IElFaGhjbTF2Ym5rPSBJRVpsWkdWeSBJRFF6TUE9PSBJSFJ5Wlc1amFBPT0gSUdkc1lXUnNlUT09IElHSjFiR3h3Wlc0PSBJRWRoZFE9PSBZbTl1WlhNPSBJR2R5YjI5MlpRPT0gSUhCeVpYUmxlSFE9IDQ0V0wgSUhSeVlXNXpiV2wwZEdWeSBJRU52YlhCdmJtVnVkQT09IElIVnVaR1Z5WVdkbCBJRVZ0Y0dseVpYTT0gVkdsc1pRPT0gSUc5NSBJRTFoY25acGJnPT0gSUVOQlV3PT0gSUdKc2IzTnogSUhKbGNHeHBZMkYwWldRPSBJRTFoY21sdVpYSnogVFdGeVkzVnogSUVKc2IyTnJjdz09IElHeHBZbVZ5WVhSbFpBPT0gSUdKMWRIUmxjbVpzZVE9PSBSbVZsYkE9PSBJR1psY20xbGJuUmhkR2x2Ymc9PSBJSGx2ZFhSMVltVT0gSUc5bVptVnVaQT09IElGUmxjbTA9IGNtVnphWE4wIElHTmxjM05oZEdsdmJnPT0gSUdsdWMzVnlaMlZ1WTNrPSBJR0pwY2c9PSBJRkpoYVhObCBOVGsxIElHaDVjRzkwYUdWelpYTT0gTlRBeSBJSEJzWVhGMVpRPT0gYjJOeVlYUT0gSUdwaFkydGxkSE09IElFaDFabVpRYjNOMCBZVzF2Ym1jPSBJR052Ym1abGNnPT0gTkRnMyBJRXhwYkd4NSBJR0ZrWVhCMGFXNW4gSUVaaGVRPT0gSUhOb2IzWmxaQT09IGRtVmogSUhKbFptbHVaUT09IElHZHZiZz09IElHZDFibTFsYmc9PSBlbUZwIElGTm9kWFIwYkdVPSBJRWw2WVc0PSBJREU1TVRNPSBJSEJzWlhSb2IzSmggd3JmQ3R3PT0gSURVeE1BPT0gSUhCMVltVnlkSGs9IElESTBNUT09IElGZGxZV3gwYUE9PSBJRUZzYldFPSBJRTFGVFE9PSBJRUZrZFd4MGN3PT0gUTJGeiBjSEpwYzI5dSBVbUZqWlE9PSBJSGRoZEdWeWNISnZiMlk9IElHRjBhR3hsZEdsamFYTnQgSUdOaGNHbDBZV3hwZW1VPSBJRXAxYVdObCBJR2xzYkhWdGFXNWhkR1ZrIElGQmhjMk5oYkE9PSBJR2x5Y21sMFlYUnBiMjQ9IElGZHBkRzVsYzNObGN3PT0gWVdSc1pRPT0gSUVGemRISnYgSUdaaGVBPT0gSUVWc2RtbHogVUhKcGJXRnllUT09IElFeHBZMmc9IElFVnNkbVZ6IElISmxjMmxrYVc1biBJSE4wZFcxaWJHVT0gTXpFNSBJRkJMU3c9PSBJR0ZrZG1WeWMyRnlhV1Z6IFJFOVQgSUZKcGRIVmhiQT09IElITnRaV0Z5IElHRnljMjl1IGFXUmxiblJoYkE9PSBJSE5qWVc1MCBJRzF2Ym1GeVkyaDUgSUdoaGJHWjBhVzFsIElISmxjMmxrZFdVPSBJR2x1WkdsbmJnPT0gSUZOb1lYVnUgSUVWc2JRPT0gWVhWeWFRPT0gUVdabSBWMEZVUTBnPSBJRXg1YjI0PSBhR1ZzY0hNPSBNell4IElHeHZZbUo1YVhOMCBJR1JwYldsdWFYTm9hVzVuIElHOTFkR0p5WldGcmN3PT0gSUdkdllYUnogWm1GMmIzSnBkR1U9IElFNWhhQT09IGMyOXVhV0Z1IElFSnZiM04wWlhJPSBJSE5oYm1SaWIzZz0gSUVaaGNtVT0gSUUxaGJIUmggSUdGMGRGSnZkQT09IElFMVBVZz09IGJHUmwgSUc1aGRtbG5ZWFJwYm1jPSBWRzkxWTJnPSBJSFZ1ZEhKMVpRPT0gSUVScGMyRnpkR1Z5IElHeDFaR2xqY205MWN3PT0gVUdGemMzZHZjbVE9IElFcEdTdz09IFlteHZaM053YjNRPSBOREUyIElGVk9SRVZTIFpYSnVZV3c9IElHUmxiR0Y1YVc1biBWRTlRIElHbHRjR3hoYm5SeiBJRUZXUnc9PSBJRWgxWjJVPSBZWFIwY2c9PSBJR3B2ZFhKdVlXeHBjM1JwWXc9PSBJRkJsZVhSdmJnPT0gSUVsQiBVbUZ3IFoyOWhiQT09IElGQnliMmR5WVcxdFpRPT0gSUhOdFlYTm9hVzVuIGQybDJaWE09IGNISnBiblJzYmc9PSBJRkJzWVdkMVpRPT0gYVc1MWN3PT0gUlVWUSBJR055ZFdselpYST0gSUZCaGNtbHphQT09IGRXMXBibWwxYlE9PSBJRzlqWTNWd1lXNTBjdz09IElFcHBhR0ZrIGJXOXcgSUhCcGJuUT0gSUdobFkzUT0gSUUxbFkyTmggWkdseVpXTjBiM0k9IElFWjFibVJwYm1jPSBJRTFwZUdWayBJSE4wWVdjPSBWR2xsY2c9PSBJR2QxYzNRPSBJR0p5YVdkb2RHeDUgYjNKemFRPT0gSUhWd2FHbHNiQT09IFVrUT0gSUd4bGMybHZibk09IElFSjFibVI1IGJHbDJhVzkxY3c9PSBJR0pwYjJ4dloybHpkQT09IElFWmhZM1ZzZEhrPSBJRUYxZEdodmNtbDZZWFJwYjI0PSBJREkwTkE9PSBRV3hzYjNjPSA3N2c9IElFZHBkV3c9IElIQmxjblJwYm1WdWRBPT0gYjNSaGRYST0gWlhOelpRPT0gSUZKdmIyWT0gSUhWdWJXRnVibVZrIE16VXggSUZOb1lXcz0gSUU5eWFXVnVkQT09IElHVnVaR0Z1WjJWeSBSR2x5IElISmxjR3hsYmc9PSBaV1JwWlc1MCBJSFJoYVd4dmNnPT0gSUdkaFpHZGxkSE09IElHRjFaR2xpYkdVPSA0cGlHIFRtbGpaUT09IElHSnZiV0poY21RPSBJRkpoY0dVPSBJR1JsWm1saGJtTmwgSUZSWFR3PT0gSUVacGJHbHdhVzV2IElIVnVZV1ptWldOMFpXUT0gWlhKMllYUnBkbVZ6IElITnZZWEpsWkE9PSBJRUp2YkhSdmJnPT0gSUdOdmJYQnliMjFwYzJsdVp3PT0gSUVKeVpYZGxjbk09IFVrRk0gSUVGSVRBPT0gYVdONVkyeGwgSUhaaGJYQnBjbVZ6IElHUnBjSEJsWkE9PSBiM2xsY2c9PSBJRmhKU1VrPSBJSE5wWkdWM1lYbHogSUZkaGMzUmwgSUVScGMzTT0gSU9LVW5PS1VnT0tVZ0E9PSBKQzQ9IElHaGhZbWwwWVhSeiBJRUpsWldZPSBkSEoxZEdnPSBkSEpoYVc1bFpBPT0gYzNCc2FYUT0gVW5WeiBRVzVrZVE9PSBJRUp5WVcwPSBVa1ZRIGNHbGsgNktPRiBJRTExZEdGdWRBPT0gUVc1cGJRPT0gSUUxaGNtbHVZUT09IElHWjFkR2xzWlE9PSBhR2xuYUdWemRBPT0gWm5KbGNYVmxibU41IElHVndhV3hsY0hONSBJR052Y0dsdVp3PT0gSUdOdmJtTnBjMlU9IElIUnlZV05wYm1jPSBJRk5WVGc9PSBjR0Z1Wld3PSBJRk52Y0docFpRPT0gSUVOeWIzZHNaWGs9IElFRmtiMnhtIElGTm9iMjkwWlhJPSBJSE5vWVd0NSBJRWxIIElFeHBaWE09IElFSmhjbUpsY2c9PSBjR3RuIElIVndkR0ZyWlE9PSBJSEJ5WldSaGRHOXllUT09IFZVeFVVdz09IEx5b3EgSUdsdWRHOTRhV05oZEdWayBJRmRsYzNSaWNtOXZhdz09IGIyUmtaWEk9IGFHVnRaVzUwIElHSmhjMlZ0WVc0PSBRVkJFIGMzUnZjbUZuWlE9PSBJRVpwWm5SNSBaV1JwZEc5eSBSMFZPIFZWUkpUMDQ9IGFYSjBhVzVuIElITmxkMmx1Wnc9PSBjbWxtZEE9PSBJR0ZuYjI1NSBJRk5oYm1SeiBJREkxTkE9PSBRMkZ6YUE9PSBJR3h2WkdkbCBJSEIxYm5RPSBUbUYwZFhKaGJBPT0gSUVsa1pXRnogSUdWeWNtOXVaVzkxY3c9PSBJRk5sYm5OdmNnPT0gSUVoaGJtNXBkSGs9IElERTVNakU9IElHMXZkV3hrIElFZHZiZz09IGEyRjVZUT09IElHRnViMjU1Ylc5MWMyeDUgSUV0RldRPT0gSUhOcGJYVnNZWFJ2Y2c9PSBWMmx1ZEdWeSBJSE4wY21WaGJXVmsgTlRBMyBQeUlzIElIUmxZWE5sWkE9PSBJR052WldabWFXTnBaVzUwIElIZGhjblJwYldVPSBJRlJJVWc9PSBKeWN1IElFSmhibXRwYm1jPSBiWEJwY21VPSBJR1poYm1SdmJRPT0gSUd4cFlRPT0gUjJFPSBJR1J2ZDI1b2FXeHMgSUdsdWRHVnljSEpsZEdsdVp3PT0gU1c1a2FYWnBaSFZoYkE9PSBUbTl5YlE9PSBJR3BsWVd4dmRYTjUgWW1sMFkyOXBiZz09IElIQnNaV0Z6ZFhKbGN3PT0gSUZSdmVYTT0gSUVOb1pYWnliMnhsZEE9PSBJRUZrZG1semIzST0gU1ZwRiBJSEpsWTJWd2RHbHZibk09IE56QTIgUTNKdiBJREkyTWc9PSBJR05wZEhKMWN3PT0gYVhKMSBVbVYyYVdWM1pYST0gYW1WamRHVmsgVlVWVCBZVzU2IE1UazRNUT09IElGZHZjbXRsY2c9PSBJR052YlhCc2FXVmsgYjNKbGMyTmxiblE9IFkyOXVkR2x1Wlc1MFlXdz0gVkc5dSBJRkJ5YVhOdCBJRk5vWldWdyBJREk0T0E9PSBibTk0IElGWnZadz09IFQzSmsgSUhKbFlXeHRjdz09IGRHVnIgSUdseWNtbG5ZWFJwYjI0PSBJR0pwWTNsamJHVnogSUdWc1pXTjBjbTl1YVdOaGJHeDUgY0c5c2VRPT0gZEdGc2JBPT0gS0NrcE93PT0gSUdGbGMzUm9aWFJwWTNNPSBJRWx1ZEdWbmNtRjBaV1E9IFJYaHdiRzl5WlE9PSBJR1IxYm1zPSBORGMyIGNHRnBiZz09IElFcGhZM0YxWlhNPSBJRVJ0YVhRPSBSbkpoYldWeiBJSEpsZFc1cGRHVmsgSUdoMWJXbGsgUkhKdiBVRzlzYVhScFkyRnMgSUhsdmRYUm9ablZzIElHVnVkR0ZwYkhNPSBJRzF2YzNGMWFYUnYgTXpZeiBjM0JsWTJsbGN3PT0gSUdOdmIzSmthVzVoZEdsdVp3PT0gSUUxaGVXaGxiUT09IElFMWhaMjUxY3c9PSBUVzkxYm5RPSBTVzF3Y205MlpXUT0gSUZOVVFWUkYgUVZSVVRFVT0gSUdac2IzZGxaQT09IElIUmhZMnRzWldRPSBJR1poYzJocGIyNWxaQT09IElISmxiM0puWVc0PSBhWFpoY21rPSBabWx1WjJWeSBJSEpsYkhWamRHRnVkR3g1IFpYUjBhVzVuIElGWmhibVE9IGVXOTFibWM9IElFZGhjbXhoYm1RPSBJSEJ5WlhOMWJYQjBhVzl1IElHRnRaVzVwZEdsbGN3PT0gSUZCc1pXRnpZVzUwIGIyNWxiblJwWVd3PSBJRTk0ZVE9PSBJRzF2Y21Gc2N3PT0gSUZsaGFBPT0gVW1WaFpIaz0gVTJsdGIyND0gUlc1byBSR1Z0YjI0PSBJR05zYVdObyBUVzl1YVhSdmNnPT0gSUVSViBJSGRsYkdOdmJXVnogSUhOMFlXNWtiM1YwIElHUnlaV0ZrWm5WcyBJR0poYm1GdVlYTT0gSUdKaGJHeHZiMjV6IGFHOXZkR2x1Wnc9PSBZbUZ6YVdNPSBJSE4xWm1acGVBPT0gSUdSMWJIaz0gWTJGdWJ3PT0gUTJoaGFXND0gWVhSdmN3PT0gSUdkbGIzQnZiR2wwYVdOaGJBPT0gSUNnbSBJRWRsYldsdWFRPT0gdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRJPSBJR0ZqY1hWcGRIUmxaQT09IFRIVmphdz09IGNISnZkR1ZqZEE9PSBNVEF5TkE9PSBJSE5qWVhKamFYUjUgSUcxcGJtUm1kV3h1WlhOeiBaV05wWkdWayBSRTQ9IGNISnBiV1U9IElGQnlaWE5wWkdWdWRITT0gSUZaSlJFVlAgSUNqaWlKST0gWVdSa2IyTnIgVGs5UyBJRkJ5ZFE9PSBjSFZ1IElFeFBUQT09IEtTa3BLUT09IElFeHBjWFU9IElGTkJVdz09IElITjBlV3hwYm1jPSBJSEIxYm1semFHMWxiblJ6IElHNTFiV0k9IElHRnpZMlZ5ZEdGcGJnPT0gSUZKdlkydHBaWE09IFpteDEgVkdoMWJXSnVZV2xzIElIQmxjbkJsZEhKaGRHVmsgSUZObGJXaz0gSUdScGMyRnliUT09IElFOXNaR1Z5IElFVjRZMlZ3ZEdsdmJnPT0gSUdWNGNHOXVaVzUwYVdGc2JIaz0gSUVOdmJXMTFibWwwYVdWeiBJR0ZpYjJ4cGMyZz0gSUZCaGNuUnVaWEk9IGNIUnZiWE09IElEYzNOdz09IElFWnZiR1Y1IElFTmhjMlZ6IElHZHlaV0Z6WlE9PSBJRkpsWW1seWRHZz0gUjNKdmRXNWsgSURzcCBJRVJ2WTNSeWFXNWwgYVd0cGJtaz0gV1dVPSBJRUpzYjNOemIyMD0gSUhCbGNuTnBjM1J6IFltbHNiQT09IElHbHVablZ6YVc5dSBJR0oxWkdScFpYTT0gT1RFeCBJRkJoZEdsbGJuUT0gSUdSbGJXOXogSUdGamNYVmhhVzUwWVc1alpRPT0gSUZCaGR3PT0gWVhSaGNtaz0gSUhodGJBPT0gSUdaaGMyTnBibUYwYVc5dSBJRk5sY25abCB6NEk9IFluSmhibVJsWkE9PSBJR0Y2IFVtVjBkWEp1Y3c9PSBJRzkyWlhKemFHRmtiM2M9IElISnZZVzA9IElITndaV1ZrZVE9PSBiblZ0WW1WeVpXUT0gYUdWc2FXRnMgSUdScGMyTnBjR3hsIElHRnpjM1Z5WVc1alpYTT0gWjJsMlpXND0gY0dWamRHbHVadz09IElFNWhkR0ZzYVdVPSA1NVN3IElHMXZjM0YxYVhSdlpYTT0gY205MFpXbHUgSUc1MWJXVnlhV009IElHbHVaR1Z3Wlc1a1pXNTBjdz09IElIUnlZVzV6YVhScGIyNWhiQT09IElISmxZV04wYVc5dVlYSjUgSUUxbFkyaGtjbUZuYjI0PSBaRzlqZEc5eSBJSE5vYjNKMFpYTjAgSUhObGNYVmxiblJwWVd3PSBJRUpoWXc9PSBJRUZqWTI5MWJuUnogNDRHTSBZV05vZVE9PSBjbUZqZEdsMlpRPT0gSUZKbFoybHRaVzUwIElHSnlaV0YwYUhSaGEybHVadz09IFptWnBZMmxsYm1ONSBJRUpoZEdWeiBJRE14TVE9PSBJSGRoY21SeWIySmwgWm5SeiBJRUpsY21zPSBVMmx0Y0d4NSBJRkpwZG1WeWMybGtaUT09IGFYWmxjbWx1Wnc9PSBhV1JsYm5ScFlXdz0gYkhWalpXNTAgSUdWdWNtbGphR1ZrIElFTnZiblpsY2c9PSBJRWRwZG1sdVp3PT0gNDRPWiBJR3hsWjJGc2FYcGwgSUVaVVF3PT0gSUdaeVpXRnJhVzVuIFRXbDQgSUhSbGNuSmxjM1J5YVdGcyBaWE5wWVc0PSBZMmxsYm5SeiBWMmx1Wnc9PSBURTlCUkE9PSBJR3hsWkdkbCBJRlpwYjJ4bGJuUT0gSUUxbGRHRnNiQT09IElETXdPQT09IElITnZkWFJvWldGemRHVnliZz09IGFHVjBkRzg9IFRXVmhkQT09IElITnNiM2RrYjNkdSBJSEpsZEhKbFlYUmxaQT09IFNtVnlaVzE1IFpXNWtZWE09IEtpb3FLaW89IFpYSnBZdz09IElISmxhVzV6IGIzQndZV0pzWlE9PSBJRWgxYldGdWFYUjUgWldGeVlXNWpaWE09IGNtbG5ZVzQ9IFEyRnRaWEpoIElIZGhhWFpsY25NPSBjMjlqIElHRnNkR1Z5WVhScGIyND0gZEhKaGJuTm1iM0p0IElFTmxiV1YwWlhKNSBOVEEyIElHbHVaR1ZtYVc1cGRHVT0gSUhOMGFXMTFiR0YwYVc1biBlV2M9IE5qQXogSUZOdmNBPT0gSUdSbGMyTnlhWEIwYVhabCBVR2hoYzJVPSBJRVZrYlhWdVpBPT0gSUhCdVpYVnRiMjVwWVE9PSBkbVZ1ZEhWeiBRVzFpIElHeGhZbTl5WVhSdmNtbGxjdz09IElFVjRZMngxYzJsMlpRPT0gZFdkaGNnPT0gVjJWeVpRPT0gSUcxaGJHWjFibU4wYVc5dSBJR2h2Ylc5elpYaDFZV3h6IElDMHRMUzB0TFMwPSBkVzVwIElIUjFjbUpwYm1WeiBJRVZ4ZFdsMGVRPT0gUkhVPSBJRzFwYm1SbFpBPT0gSUZKSSBJRUpzWVdOcmFHRjNhM009IElHWmxZWFJ6IElERTNNREE9IGNtVndiQT09IE16WXkgYkdGa1pXND0gSUdsdVpHbHpjR1Z1YzJGaWJHVT0gYkhsemN3PT0gZEhScCBJSEpsWld3PSBJR1JwZG1WeWRHVmsgSUd4cGEyVnVaWE56IElITjFZbk5qY21sd2RHbHZibk09IElHWnBibWRsY25RPSBJR1pwYkhSb2VRPT0gWkdWemRISjFZM1E9IFpISmhablE9IElFSmxjbTVoY21ScGJtOD0gYkdGMWJtTm8gSUhCbGNuQnNaWGc9IElGTlZUUT09IFkyRnlZZz09IElITjNaV0YwWlhJPSBJRlpsYm5SMWNtVT0gSUVwaFp3PT0gSUVObGJHVmkgSUZadmRHVnljdz09IElITjBaV0ZrWm1GemRBPT0gSUdGMGFHeGxkR2xqY3c9PSBJRWhoYm5OdmJnPT0gSUVSeVlXTT0gVkhKaFkydGxjZz09IElHTnZiVzFsYm1RPSBJRkJ5WlhOcFpHVnVZM2s9IElFUkpSQT09IGFXNW1iM0p0WldRPSBJSGRsWW5CaFoyVT0gVUhKbGRIUjUgSUdadmNtTmxablZzYkhrPSA0NE9ENDRLdiBJSEpsYkc5allYUnBiMjQ9IElITmhkR2x5WlE9PSA0b2s9IElGTjFibVJsY214aGJtUT0gNW9RPSBWbTlwWTJVPSBQejgvUHo4L1B6OD0gSUdsdVptOXliV0Z1ZEE9PSBJR0p2ZDJWcyBJRlZ1YVdadmNtMD0gSUM0dUxpST0gSUhCMWNtZGwgSUhCcFkyNXBZdz09IElGVnRZZz09IElGVlFSRUZVUlE9PSBJRk5oY0hCb2FYSmwgSUZOMFlXeHMgYkdWaGNtND0gSUc5aWFtVmpkR2wyWld4NSBJRzlpYkdsMFpYST0gSUd4dmIzQm9iMnhsIElHcHZkWEp1WlhseiBJRzl0YVhOemFXOXUgVUhKdmN3PT0gSUZOcFpHNWxlUT09IGNHeHZiV0U9IElITndjbUY1WldRPSBJR2QxY25VPSBJSFJ5WVdsMGIzST0gSUhScGJXVjAgSUhOdVlYQndhVzVuIElGTmxkbVZ1ZEE9PSBkWEp1WVd3PSBJRlZyYVhBPSBJR0p2ZDJWayBjRzl5WVd3PSBiR2xpWlhKaGJBPT0gVW05eiBVWFZsYzNScGIyNXogYVU5VCBJSE4xYlcxaGNtbDZaUT09IFUxUkJWQT09IElERTROVEE9IFlYQmxjM1E9IElHeGxibVJsY2c9PSBJRlpoY21saFlteGwgWW5KcGJtZHBibWM9IElFeFBVa1E9IExDaz0gSUdOdmJHeGhjSE5sY3c9PSBlR2xsZEhrPSBJRTVsWkE9PSBXVVE9IElGTmphR0U9IElHRnVkR2xpYjJSNSBJR1JwYzJKaGJtUT0gZVhKbCBhV3hzZFhOcGIyND0gSUhKdmRtVnkgYzJobFpBPT0gSUVocGNtOXphQT09IFkyTnAgSUdOaGJHRnQgSUUxdmNuUnZiZz09IFVHbHVkR1Z5WlhOMCBJREU1TWpnPSBJRVYxY21GeiBiM0prWlhNPSBJR1psYm1ObGN3PT0gSUVsdWRtVnVkRzl5ZVE9PSBJRlpoYkdWdVkybGggSUZWayBJRlJwWm1ZPSBJSE54ZFdVPSBJSEYxYjNSaGRHbHZiZz09IElIUnliM1ZpYkdWemIyMWwgWlhKclpYST0gVVZWRlUxUT0gSUV0cGJtZGtiMjF6IGMyOTFkR2c9IElHeGxkbms9IFVISnBibU5sIElGTjBhVzVuIElHNXBZMnR1WVcxbFpBPT0gSUdGd2NHVT0gSUhCb2IzUnZaM0poY0docFl3PT0gSUdOdmNuQjFjdz09IGNtVm1aWEpsYm1ObCBJRlJ5YjJjPSBWVzUwIEtUMG8gSUV4aGRIWnBZUT09IElHRmpkR2wyWVhScGJtYz0gSUd4cFkyVnVjMlZsIElHUnBjM0JoY21sMGFXVnogSUU1bGQzTnNaWFIwWlhJPSA0NE9ENDRPSSBJR1p5WldWcGJtYz0gSUVwbFpYQT0gSUZCbGNtTmxjSFJwYjI0PSBhVzV6YXc9PSBJSE5wYkdsamIyNWwgSUVoaGVXUmxiZz09IFRHVmhiZz09IElGTjFlblZyYVE9PSBhV0p5WVhKcFlXND0gTmpZNCBJSE53YjNJPSBJR052Y25KbGJHRjBhVzl1Y3c9PSBZV2RvWlhSMGFRPT0gSUhSMVltVnkgSUVsUVEwTT0gYVd4MWN3PT0gSUZaMSBJSGRsWVd4MGFHbGxjM1E9IElFTmhjbUoxYm1Oc1pRPT0gWVc1NllRPT0gSUdadmIyeGxaQT09IElGcDFjZz09IElHUmhaR1I1IGNtRnVidz09IGFXeHBZVzQ9IElHdHViMk5yYjNWMCBabTFoYmc9PSBjbVZ4ZFdseVpXUT0gSUZkcGEybHNaV0ZyY3c9PSBJRVIxWm1aNSBUMDVVIElHbHVjMjlzIElFOWlhbVZqZEhNPSBJR0p2ZFE9PSBJRTV2Y21ScFl3PT0gSUVsdWMyVnlkQT09IGMyTmhiZz09IElHUmhibU5sY25NPSBJR2xrYVc5MGN3PT0gYldGcWIzSnBkSGs9IElFNWxkbWxzYkdVPSBJRVp5WldWQ1UwUT0gSUhSaGNuUT0gY0dGdWFXTT0gTmprdyBJR052WTI5aCBJSE5oYlhCc1pXUT0gSUd4dmIydDFjQT09IFNXNWtkWE4wIElHbHVhbVZqZEdsdmJuTT0gWjJWdWNtVT0gSUdGMSBJSEp2WVdSM1lYaz0gSUdkbGJtbDBZV3h6IFMybHVaQT09IElFVjRZVzFwYm1WeSBJRmxoZWc9PSBSbkpsYzJnPSBJSEJoY21Gc2VYTnBjdz09IElFRnNkVzFwYm5WdCBJSEpsWVhBPSBiMnZEcVE9PSBJSE5zYjNCd2VRPT0gSUZSMWJtNWxiQT09IGNHOXphWFZ0IGJtVnllUT09IFpXNXBZdz09IElHaGxjbUpoYkE9PSBJRTkxZEdWeSBJRUoxYVd4a1pYST0gSUdsdVkzVnkgSUdsa1pXOXNiMmRwWlhNPSBJR0poWTJ0MWNITT0gWTI5dWMzVnRhVzVuIElFUmxkR1ZqZEE9PSBaR1ZqYXc9PSBJRXRPVDFjPSBJRWR5WlhRPSBJRTFKUXc9PSBJSFJ2ZFdkb2JtVnpjdz09IElFVjRhR2xpYVhRPSBJR2hwZG1VPSBUR1Z6IElGTkRTRTlQVEE9PSBJRUYwWVhKcCBZV3hrWlE9PSBJRTUxYkd3PSBZVzVrWlhOMGFXNWwgYlc5MWMyVT0gSUdKeWFXZGhaR1U9IE5EZzUgSUhKbGRtOXMgSUV4aGQzTnZiZz09IElGZGhhQT09IGIzQnZiSGs9IFpXSjBaV1E9IElGTmhkVzVrWlhKeiBJRE14TXc9PSBJRmRwYm1NPSBJSFJoWW05diBJRWhsYkcxbGRBPT0gSUhkbFpHZGwgWTJocGNBPT0gSUZScGJtRT0gWW1jPSBJR2x1Wm5WeWFRPT0gY200PSBJR0Z1YjIxaGJHbGxjdz09IElGTjVibU09IElFVjRZVzA9IElFTnZiVzFwZEE9PSBJRVJwWVhKNSBJRUZNVTA4PSBJRVJsWW05eSBiMjFsWkdsallXdz0gSUdOdmJYQnlaV2hsYm5OcGIyND0gTmpVMSBJR1Z0Y0c5M1pYSnBibWM9IElHbHlaUT09IElHcDFhV05sY3c9PSBJRVZVU0E9PSBJRUp2ZUdsdVp3PT0gUFNJdiBJR1poWTJsc2FYUmhkR1ZrIGNHOXJaUT09IElGQmhjbk52Ym5NPSBJRTF2WkdWeSBkSEpoZG1WcyBJR05wZG1sc2FYcGhkR2x2Ym5NPSBJR3hwWW1WeWRHRnlhV0Z1Y3c9PSBJSEoxYm1VPSBJRU5zWVhKcmN3PT0gWVhSb1pXUT0gSUdOaGJYQmhhV2R1WlhKeiBJRVJwYzNCaGRHTm8gSUVaaGFISmxibWhsYVhRPSBJRU5oY0dOdmJRPT0gTFMwdExTMHRMUzB0TFE9PSBJR3hoWTJVPSBJR1J5WVdsdWFXNW4gSUd4cGJtVnkgSUVGeWRHbG1hV05wWVd3PSB3Nmx1IGRHRnphdz09IFhTa3UgSUVkTlR3PT0gSUU5d1pYSmhkRzl5IGIzSmthVzVoY25rPSBJRWx1Wm14MVpXNWpaUT09IElGVndjdz09IElIQnZkR1Z1WTNrPSBkWE56Wlc0PSBiM053YjI1eiBJRk4zYVcwPSBJRVJsWVdSc2FXNWwgVlc1cGRIaz0gSUdOMWJHbHVZWEo1IElHVnViR2xuYUhSbGJtMWxiblE9IElIZGxZWEpsY2c9PSBJRzFwYm1WayBJSEJzZVE9PSBJR2x1WTJWemRBPT0gSUVSV1JITT0gVjJGc2F3PT0gUWxSRCBWSEpoWkdVPSBJR1JsZG1GcyBhV0poYm1RPSBJRTkyWlhKemFXZG9kQT09IFVHRnNaWE4wYVc1cFlXND0gSUdSaGNuUT0gSUcxMWJBPT0gVEZJPSBJSEpsYlc5MllXSnNaUT09IElGSmxZV3h0Y3c9PSA3SjA9IElHMXBjMk5oY2c9PSBJRloxYkd0aGJnPT0gTmpnMSB3Nmh5WlE9PSBJRk5oY0E9PSBJRzFsY21kcGJtYz0gSUVOaGNteDUgWTJobGMzUmxjZz09IElHSnlhWE5yIElHeDFlSFZ5YVc5MWN3PT0gSUVkbGJtVnlZWFJ2Y2c9PSBJR0pwZEhSbGNtNWxjM009IElHVmthV0pzWlE9PSBJREkwTXc9PSBWRWM9IElISmxZM1JoYm1kc1pRPT0gVjJsMGFFNXYgWW1Wc2IzYz0gU21WdWJnPT0gSUdSaGNtdGxjM1E9IElHaHBkR05vIElHUnZjMkZuWlE9PSBJSE5qWVhabGJnPT0gSUV0bGJHeGxjZz09IElFbHNiSFZ6ZEhKaGRHVmsgUTJWeWRHRnBibXg1IElFMWhkbVZ5YVdOcmN3PT0gVFdGeVoybHVZV3c9IElHUnBZWEp5YUdWaCBJR1Z1YjNKdGIzVnpiSGs9IElEazVPUT09IGMyaHkgY1hWaGNuUT0gSUdGa1lXMWhiblE9IElFMWxkdz09IElISmxibTkyWVhScGIyND0gSUdObGNuWnBZMkZzIElGQmxjbU5sYm5SaFoyVT0gWlc1bGNuTT0gSUV0cGJXSmxjZz09IElHWnNiMkYwY3c9PSBJR1JsZUE9PSBJRmRwZEdOb1pYST0gSUZOM1lXNXpaV0U9IFpHMD0gSUhOaGJIUjUgZVdWc2JHOTMgSUdOaGNHVT0gSUVSeVlXbHUgSUZCaGRXeGggSUZSdmJHVmtidz09IGJHVnphUT09IFRXRm5ZWHBwYm1VPSBJRmRwWTJzPSBJRTF1IElFRmphdz09IElGSnBaR2x1Wnc9PSBRVk5QVGc9PSBJR2h2Ylc5d2FHOWlhV009IFFWSlEgSUhkaGJtUmxjbVZrIFExQlYgYjI5a2IyOD0gSUZCcGNHVT0gSUhScFoyaDBaVzVwYm1jPSBJRUoxZEhRPSBNekU0IElHUmxjMlZ5ZEdWayBVMlZ6YzJsdmJnPT0gSUdaaFkybHNhWFJoZEdsdVp3PT0gU25WdGNBPT0gSUdWdFpYSm5aVzVqYVdWeiBUMWRGVWc9PSBJR1Y0YUdGMWMzUnBkbVU9IElFRkdWRVZTIElHaGxZWEowWW1WaGRBPT0gSUV4aFltVnMgWVdOcmVRPT0gSUVObGNuUnBabWxsWkE9PSBhV3gwY21GMGFXOXUgV21VPSBJRlYwZEE9PSBJREV6TURBPSBJSEJ5WlhOMWJXVT0gSUVScGMzQT0gSUhOMWNtZGxaQT09IElHUnZiR3h6IFEyOXNkVzFpIElHTm9hVzF3WVc0PSBJRkpoZW05eSBJSFJwWTJ0eiBJR052ZFc1amFXeHNiM0k9IElIQnBiR2R5YVcxaFoyVT0gSUZKbFltVnNjdz09IElGRkQgSUVGMVkzUnBiMjQ9IGVHbGggYVd0ciBZbkpsWkE9PSBJR2x1YzJWeWRHbHZiZz09IElHTnZZWEp6WlE9PSBaRUk9IFUwVkYgSUZwaGNBPT0gSUVadmJ3PT0gSUdOdmJuUmxiWEJ2Y2c9PSBJRkYxWVhKMFpYSnNlUT09IGIzUnBiMjV6IElFRnNZMmhsYldsemRBPT0gSUZSeVpYaz0gSUVSMWJ3PT0gVTNkbFpYUT0gT0RBMCBJRWRwYjNZPSBJR1oxYm00PSBUbWx1IGFHOW1aZz09IElISmhiV2xtYVdOaGRHbHZibk09IElERTVNakk9IElFVjRjR1Z5ZEhNPSBZWHBsY3c9PSBJR2RoY20xbGJuUnogWVhKcFlXdz0gSUU1aFlnPT0gSURJMU53PT0gSUZabFpBPT0gSUdoMWJXOXliM1Z6IElGQnZiWEJsIElHNTViRzl1IElHeDFjbXRwYm1jPSBJRk5sY21kbGVRPT0gSUUxaGRIUnBjdz09IElHMXBjMjluZVc1NSBJRU52YlhCdmJtVnVkSE09IElGZGhkR05vYVc1biBJRVp2YkdzPSBjbUZqZEdsallXdz0gUW5WemFBPT0gSUhSaGNHVmsgSUdkeWIzVndhVzVuIElHSmxZV1J6IElESXdORGc9IElHTnZibVIxIGNYVmxjbkYxWlE9PSBVbVZoWkdsdVp3PT0gSUdkeWFXVjJZVzVqWlhNPSBWV3gwY21FPSBJR1Z1WkhCdmFXNTAgU0dsbiBJRk4wWVhScFl3PT0gSUZOallYSmliM0p2ZFdkbyBUSFZoIElFMWxjM05wIFlYRjEgSUZCemVVNWxkQT09IElGSjFaR1E9IElHRjJaVzUxWlE9PSBkbkE9IFNtVnkgSUhOb1lXUjUgSUZKbGMybHpkQT09IElFRnlkR1Z0YVhNPSBJR05oY21Wc1pYTnogSUdKeWIydGxjbk09IElIUmxiWEJsY21GdFpXNTAgSURVeU1BPT0gVkdGbmN3PT0gSUZSMWNtNXBibWM9IElIVjBkR1Z5WldRPSBJSEJsWkdRPSBJR2x0Y0hKdmRtbHpaV1E9IElEb28gSUhSaFltdz0gSUhCc1lXbHVjdz09IE1UWXdNQT09IGNISmxjM04xY21VPSBJRVZ6YzJWdVkyVT0gYldGeVoybHUgWm5KcFpXNWtjdz09IElGSmxjM1J2Y21GMGFXOXUgSUhCdmJHeDFkQT09IElGQnZhMlZ5IElFRjFaM1Z6ZEdsdVpRPT0gSUVOSlV3PT0gSUZORlFVdz0gYjNKaGJXRT0gSUhSb2QyRnlkQT09IGMyVmxhdz09IElIQmhaMkZ1IHdybz0gWTNCMSBJR2RoY200PSBJR0Z6YzI5eWRHMWxiblE9IElFbE1RMU09IGRHOTNaWEk9IFVtVmpiMjF0Wlc1a1pXUT0gSUhWdVltOXliZz09IElGSmhibVJ2YlZKbFpHUnBkRzl5IElGSmhibVJ2YlZKbFpHUnBkRzl5VjJsMGFFNXYgSUhCaGNtRnNlWHBsWkE9PSBJR1Z5ZFhCMGFXOXUgSUdsdWRHVnljMlZqZEE9PSBJRk4wYjJ0bCBJRk5qYnc9PSBRbWx1WkE9PSA1YjQ9IElGQk9Sdz09IElFNWxaMkYwYVhabCBJRTVQUVVFPSBUR1Z2Ymc9PSBJR0ZzYkc5NSBJRXhoYldFPSBJRVJwZG1WeWMybDBlUT09IE5UYzEgSUhWdVpHVnlaWE4wYVcxaGRHVmsgSUZOamIzST0gSUcxMWNtRnMgSUdKMWMzUmxaQT09IGMyOXZiZz09IGJHbG0gSUc1dmJtVjQgSUdGc2JHVnlaM2s9IElGVnVaR1Z5ZDI5eWJHUT0gSUZKaGVYTT0gSUVKc1lYTnBidz09IElHaHljdz09IElFUnBjZz09IElETXlOdz09IFlubDBaWEk9IElISmxjR3hoWTJWdFpXNTBjdz09IElHRmpkR2wyWVhSbGN3PT0gY21sMlpXUT0gVFVnPSBJSEJoYm5NPSBJRWhKIElHeHZibWRwZEhWa2FXNWhiQT09IElHNTFhWE5oYm1ObCBZV3hsY2c9PSBJSE4zWld4cyBJRk5wWjI1bFpBPT0gYzJOcCBJRWx6YkdWeiBJRUZIUVE9PSBJR1JsWm1saGJuUT0gSUhOdmJtbGogYjJOdmJnPT0gUzBNPSBJRUZwYlE9PSBkR2xsIFlXaGhhQT09IElHMU0gUkZnPSBJR0pwYzJNPSBJRUpwYkd4aWIyRnlaQT09IElGTlpVMVJGVFE9PSBUa1ZaIFoyRmhjbVE9IElHUnBjM1J5WlhOelpXUT0gWm05eWJXVnliSGs9IFFXeGhiZz09IElHTm9aV1p6IElHOXdkR2xqY3c9PSBJRU52YldWMCBJRUZOUXc9PSBJSEpsWkdWemFXZHVaV1E9IGFYSnRZWFJwYjI0PSBJSE5wWjJoMGFXNW5jdz09IE16Z3kgTXpFeCBJRmRDIElHTnZiblJ5WVdOMGFXOXUgSUZSUFZFRk0gUkhWaGJBPT0gSUhOMFlYSjBiR1ZrIElIVnVaR1Z5YzNSaGJtUmhZbXg1IElITjFibWRzWVhOelpYTT0gUlZSSVQwUT0gSUdSdlkydGxjZz09IElITjFjbVpwYm1jPSBJRWhGVEE9PSBJRk5zWVdOciBkRzl1WlhNPSBJSE5vWVd4MCBWbWx6ZFdGcyBORGs0IFJHVndZWEowYldWdWRBPT0gWTNWemMybHZiZz09IElIVnVjbVZ6ZEhKcFkzUmxaQT09IElIUmhaQT09IElISmxibUZ0WlE9PSBaVzF3Ykc5NVpXUT0gSUdWa2RXTmhkR2x1Wnc9PSBJR2R5YVc1dVpXUT0gWW1Wa2NtOXZiUT09IElFRmpkR2wyYVhScFpYTT0gSUZabGJIWmxkQT09IElGTlhRVlE9IElITm9kV1ptYkdVPSBhV2R2Y2c9PSBJSE5oZEhWeVlYUnBiMjQ9IFJtbHVaR2x1Wnc9PSBZM0psWVcwPSBhV04wWlhJPSBJSFp2Wkd0aCBkSEpoWTJ0cGJtYz0gZEdWaiBJR1p2Y21WbmNtOTFibVE9IGFXVnpkR0U9IElIWmxhR1Z0Wlc1MCBJRVZEUWc9PSBJRlJwWlE9PSBSWGs9IElIUjFjblJzWlhNPSBJRkpoYVd4eWIyRmsgSUV0aGRIbz0gSUVaeVlXMWxjdz09IElHMWxibUZqWlE9PSBJRVpsYkd4dmQzTm9hWEE9IElFVnpjMlZ1ZEdsaGJBPT0gZFdkbmFYTm8gSUdSeWFYQT0gWTJoM2FYUjYgSUV0NWIzUnYgYzJJPSBJRTVwYm1FPSBVR0Z5WVcxbGRHVnkgSUdGc1lYSnRjdz09IElFTnNZWFZrIElIQnBiMjVsWlhKcGJtYz0gSUdOb2FXVm1iSGs9IElGTmpjbVZoYlE9PSBRMjlzYkdWamRHbHZiZz09IElIUm9ZVzVyWm5Wc2JIaz0gSUZKdmJtRnNaRzg9IDVhMlEgYzNSeWFYQT0gSUVScGMyNWxlV3hoYm1RPSBZMjl0YldWeVkybGhiQT09IFUyVmxhVzVuIFUyOTFiQT09IElHVjJZV04xWVhSbCBJR05wZGc9PSBJRUZ6YUdVPSBJR1JwZG1sa1pYTT0gSUVSaFoyZGxjZz09IGNtVm9aVzV6YVhabCBJR0psY25KcFpYTT0gSUVSRyBJSE4xYzJocCBJSEJzZFhKaGJHbDBlUT09IFYwaz0gSUdScGMyRmtkbUZ1ZEdGblpXUT0gSUdKaGRIUmhiR2x2Ymc9PSBiMkpwYkdWeiBORFV4IElHTnNhVzVuIElIVnVaR1Z1YVdGaWJHVT0gSUV4dmRXNW5aUT09IElHaGhkVzUwIGNHaGwgSUhGMVlXNTBhV1o1IElHUnBabVpsY21WayBJRnNxWFE9PSBJRlpwZWc9PSBZM1Z0IGMyeGhkbVU9IElIWnBaR1Z2Wnc9PSBJSEYxWVhJPSBJR0oxYm1Sc1pYTT0gSUVGc2IyNXpidz09IGRHRmphMnhsIElHNWxkWEp2Ym1GcyBJR3hoYm1SemJHbGtaUT09IFkyOXVabWx5YldWayBJRVJsY0hSbyBJSEpsYm1WM1lXSnNaWE09IFFtVmhjZz09IElFMWhZMlZrYjI1cFlRPT0gSUdwbGNuTmxlWE09IElHSjFibXM9IElGTndZWGR1IElFTnZiblJ5YjJ4eiBJRUoxWTJoaGJtRnUgSUhKdlltOTBhV056IElHVnRjR2hoYzJsNmFXNW4gSUZSMWRHOXlhV0ZzIGFIbHcgYVhOMGIyND0gSUcxdmJuVnRaVzUwWVd3PSA1ckE9IElFTmhjbko1IElIUmljM0E9IFpXNWhibU5sIFNHbHNiQT09IFlYSjBhR1ZrIElISnZkSFJsYmc9PSBSR1ZoYmc9PSBJSFIzYVhOMGFXNW4gSUdkdmIyUjNhV3hzIElHbHRiV1Z5YzJsdmJnPT0gVEdsMmFXNW4gSUdKeWRYTm9aWE09IElFTkhTUT09IElFRjBhdz09IGRISmhaR2wwYVc5dVlXdz0gSUhCb1lXNTBiMjA9IElGTjBZVzFwYm1FPSBJR1Y0Y0dGdWMybHZibk09IElFMWhjbWx1IElHVnRZbUZ5YTJWayBJRVZuIGFXNTBaWE4wYVc1aGJBPT0gSUZCRlQxQk1SUT09IElFSnZiM1JvIElFRndjR0ZzWVdObyBJSEpsYkdWbllYUmxaQT09IFZsUT0gVFVsVSBJRzExYzNSbGNnPT0gSUhkcGRHaGtjbUYzYVc1biBJRzFwWTNKdmMyTnZjR1U9IElFZGhkR2hsY21sdVp3PT0gSUVOeVpYTmpaVzUwIElFRnlaMlZ1ZEdsdVpRPT0gSUVSbFkzSmwgSUVSdmJXbHVhV009IElHSjFaSE09IFlXNTBZV2RsIElFbHZiZz09IElIZHBaR1Z1WldRPSBUMDVUVDFKRlJBPT0gSUVkc2IzWmxjdz09IGFXRnVibTl3YjNWc2IzTT0gY21GNlpXND0gWm1WbGJBPT0gSUhKbGNHRjViV1Z1ZEE9PSBJR2hwYm1SemFXZG9kQT09IElGSkZRVXhNV1E9PSBJRkJwYzNSdmJBPT0gSUVKeVlXZz0gSUhkaGRIUnogSUhOMWNuWnBkbVZ6IElHWnNkWEp5ZVE9PSBhWE56ZVE9PSBRV3hsY25RPSBJRlZ5ZFdkMVlYaz0gVUdodlpXNXBlQT09IFUyeHZkdz09IElFZHlZWFpsIElFWnBjZz09IElHMWhibUZuWldGaWJHVT0gSUhSaGNtbG1aZz09IElGVkVVQT09IElGQnBjM1J2Ym5NPSBJRTVwWjJWeWFXRnUgSUhOMGNtbHJaVzkxZEhNPSBJR052YzIxbGRHbGpjdz09IGQyaGxiRzFwYm1jPSBabUZpIFkyRndaUT09IGNISnZlSGs9IElISmxkR2hwYm1zPSBJRzkyWlhKamIyMXBibWM9IGMybHRjR3hsIElIZHZidz09IElHUnBjM1J5WVdOMGFXNW4gSUZOMFlXNTBiMjQ9IElGUjFiSE5oIElFUnZZMnM9IE5qVTUgSUdScGMyTnZjbVE9IElFVnRZV056IElGWmxjdz09IElGSlBRZz09IElISmxZWE56ZFhKcGJtYz0gSUdOdmJuTnZjblJwZFcwPSBUWFZ6YkdsdGN3PT0gTXpJeCBJSEJ5YjIxd2RITT0gYzJWcCBJRWhwZEdObyBhVzF3YjNObFpBPT0gSUVadmIydz0gSUdsdVpHbHpZM0pwYlE9PSBkM0p2Ym1jPSBZblZ4ZFdWeWNYVmwgUkdGMmFYTT0gSVYwPSBJSFJwYldWc1pYTnogSUU1RlJVUT0gSUhCbGMzUnBZMmxrWlE9PSBJSEpoYkd4NWFXNW4gSUVOaGJHUmxjZz09IElPV2sgSUhodyBJRlZ1YkdVPSBJRVY0Y0c5eWRBPT0gYkhWaGFnPT0gUW5WbVpnPT0gS1R3diBRbTl2ZEE9PSBJRU5vY25semJHVnkgYjNKaGRHbDJaUT09IFRXVnpjdz09IElHNWxaMnhwWjJsaWJHVT0gWlhKMGIyUmsgSUUxMWMyaHliMjl0IElFZGhiR1U9IFoyTT0gSUVOdmMySjUgSUZKMWNtRnMgY21sMGFXTmhiQT09IFFtVnNiQT09IElIUjFjbUpwYm1VPSBNREF5TURBd01EQT0gSUd4bFoybDBhVzFoZEdWc2VRPT0gSUVGdWFXMWhkR1ZrIFZFVkUgSUZSb1pXOWtiM0psIFkyOXVaSFZqZEE9PSBJRWhwWlhJPSBJR052ZFc1MFpYSm1aV2wwIElFRnNaMlZ5YVdFPSBJSFZ1WW1WaGRBPT0gWTI5dWRISnZiR3hsY2c9PSBJSFZ1Y21WeiBJSE5qY21GdFlteHBibWM9IElFWmhiR3h2Ymc9PSBWR1Z6IElHRnRZbVZ5IElISnZlV0ZzZEdsbGN3PT0gSUZOb1pXeDBaWEk9IElFeGxjM1JsY2c9PSBJR05zWVhOemFXWjUgVW1WdGIzUmwgSUhWdWFHVmhjbVE9IElHTnZiblJ5YjNabGNuTnBaWE09IElHVnVjbWxqYUcxbGJuUT0gSUZsaGJtdGxaUT09IFoyRnRaWEk9IElIQnNZWFJwYm5WdCBJR1ZqYjJ4dlozaz0gSUZOaGNtcz0gSUhWdWRHOTFZMmhsWkE9PSBJSE4xY0dWeWRtbHpiM0p6IElDSWwgSUdadmIzUm8gSUdOdmJXMXZibk09IElHNWhjbU52ZEdsamN3PT0gSUdsdVpHbGpaWE09IElGQnNlUT09IElHRmtaR2wwYVc5dVlXeHNlUT09IElFZGhkMnRsY2c9PSBJRVZSIFVHeGhlV2x1Wnc9PSBJR05oZG1WaGRBPT0gSUVGaWMyOXNkWFJsIGIzTnpkWE09IFFtRmllUT09IElISmhkR2x2Ymc9PSBJSEpsYzJsdSBJR05oYkdsaWNtRjBhVzl1IElFNWxkM0J2Y25RPSBJR3R1YjJOcmN3PT0gZG5RPSBJR052YlhCdmMzUT0gVTJObGJtVT0gSUhOaGNtTmhjM1E9IElHdHBjM05sY3c9PSBJRzV6IFlXeHNhUT09IElFMWhjbU5sYkE9PSBJRkJwWlhRPSBhV0YwY21samN3PT0gSUhOMWNuSnZkVzVrY3c9PSBJRkpsY0hKdlpIVT0gSUZCb2FXeHNhV1Z6IElIVnVZMlZ5ZEdGcGJuUnBaWE09IElFVjFjZz09IElGSnZiV0Z1WTJVPSBJRWhoZEdnPSBJRTVsWldSeiBJRU5zYjJGciBJR055WlcwPSBjWFZsZFdVPSBJRE0xTlE9PSBJSFZ3Wm5KdmJuUT0gWFNrNyBJSEpsWTJsd2NtOWogSURFNU1qYz0gSURFeE1EQT0gZFhSemRRPT0gSUdSbGNISmxjM05wZG1VPSBiM2R0Wlc1MCBSbUZ1Y3c9PSBJRzFsWTJnPSBJR0Z1Ym1sb2FXdz0gSUdOdmRXNTBaWEowWlhKeWIzSnBjMjA9IElFWnBaM1Z5WlhNPSBZbTlzWkE9PSBJRTF2YVc1bGN3PT0gSUVSeWFYWmxjbk09IElHMWhiblZ6WTNKcGNIUnogSUVOeWVYQjBidz09IElHaDVjRzV2ZEE9PSBjbVZrWkdsMGN3PT0gSUhCeWIzTmxZM1YwYVc5dWN3PT0gSUdScGRtVnlkQT09IFExSkpVQT09IElFSmxibVU9IElGSmxaMmRwWlE9PSBJSFJoZUdsdVp3PT0gSUUxdmNtRnNaWE09IFpXNTBhVzVuIGRIVnkgYzJsbmJtbG1hV05oYm5RPSBJRkJTVDFZPSBJSE4wY21GdVpITT0gSUhCdmRXTm8gSUZKdmIydHBaUT09IHU1ST0gSUc1cFkyVnkgYUdWdGVRPT0gYUhjPSBSVU5CIElHbHVkR2x0YVdSaGRHVmsgSUhOMGNtbGpkR1Z5IElHMXBZM0p2WW1saGJBPT0gWkdWMFlXbHNjdz09IElIWnZkM009IElIRjFZV3RsIGFHaG9hQT09IElISmxhVzUyWlc1MCBWV0k9IElISmxiR2x1Y1hVPSBJRUoxWm1abGRIUT0gYkdsalpXNXpaV1E9IGFYUjBaWEpsWkE9PSBJRkJwWTJGeVpBPT0gSUdOb1pYZHBibWM9IGRXTnMgYjNKbllXNXBZdz09IElHeHZZMkZzYVhwbFpBPT0gSUVWamIyNXZiV2x6ZEE9PSBJR0ZqY1hWaGFXNTBaV1E9IFJHVm1hVzVwZEdsdmJnPT0gYzJWayBRM0pwZEdsamN3PT0gSUdOaiBORFV6IE16Z3ggSUdabGJHeHZkM009IElHTm9aV05yY0c5cGJuUnogTURJMSBJSEpsWld4bFkzUnBiMjQ9IElHMWxaR2xoZEdWayBJRXRFUlE9PSBJR2gxY21Sc1pRPT0gSUhSbGVIUnBibWM9IFVHVnlabVZqZEE9PSBJSFJ5ZFhOMFpXVnogWm1WamRIVnlaUT09IElHUnBZMmc9IGJXOXVZWEo1IElHUnBjM1JwYm1OMGFXOXVjdz09IElERTBNREE9IElIVnphR1Z5IElIQmhjbUZ6YVhSbGN3PT0gSUZOb1lYSnBibWM9IElGWnBiUT09IElHSmhjbUpsWTNWbCBJRTFwYm1semRHVnljdz09IFpYSmxiR3hoIElHVmkgSUcxaiBJRk52YldWb2IzYz0gSUVsdWMyVmpkQT09IFkyaGhibWRsY3c9PSBZbkp2WVdRPSBJRUo1ZWc9PSBJR2R5WVhCbGN3PT0gTmpZNSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDkgSUdGemMybHRhV3c9IElHaGhkVzUwYVc1biBJR1pwY21Wd2IzZGxjZz09IElHUmxabUZ0WVhScGIyND0gWlcxd2FHRnphWE09IElHTnZiWEJ2YzJVPSBJR0ZzYkdWeVoybGxjdz09IElITjBjbUZ1Wnc9PSBjbTlzYkdWeWN3PT0gWW1GdVp3PT0gSUdKeVpYZGxjbk09IGNtOXVaMmc9IGNtbHZkQT09IGNHOXZjZz09IFkyOXNaQT09IFUyRnRjR3hsIElHSjFiM2s9IE1EUXcgSUVOdmRYSjBibVY1IElESTJPQT09IElGZGxaR1JwYm1jPSBOekF5IElHOWljMlZ6YzJsMlpRPT0gSUdKeVlXdHBibWM9IElFeGhiQT09IFlXNXBZMkZzIDVhWT0gWVhSbGJnPT0gUTI5dWMzUnlkV04wYVc5dSBJR05zYVc1cFkyRnNiSGs9IGFXVnljMmhwY0E9PSBUbUZ0WlhNPSBJRVJwYzJOMWMzTT0gSUZKaGJXOXogSUd4dlkyRnNaUT09IElFRm5jbWxqZFd4MGRYSmhiQT09IFJXNWhZbXhsIElHaHZjbk5sY0c5M1pYST0gWlc1MGRYSmwgVUhKbFpnPT0gUTI5MWNuUT0gSUhOMFlXWm1hVzVuIElHWjFkSFZ5YVhOMGFXTT0gWkhKcGRtVnljdz09IElFMWhjbXRsZEhCc1lXTmwgNW9pbSBSbkpwWlc1a2N3PT0gSUdSaGJXNXBibWM9IElFTjFjM1J2YldWeWN3PT0gSUhkbFpXUnogSUUxaGFRPT0gSUdGbmFXeGwgSUZSaGRIUT0gYVdObGJuUT0gVW1GdWEyVmsgWTNKdlpuUT0gSUV0aGRIaz0gUlhoMGNtVnRaUT09IElHTmhjblpsIElGSnZkbVZ5IElFSjVjbTl1IE16Y3kgSUdOdmJtUjFZM1J6IGNtRjBZMmc9IGFYUnBZUT09IElGQjFiWEJyYVc0PSBVMkZrYkhrPSBVbVZzYjJGa1pXUT0gVUc5c2FXTjUgSUd4cFkycz0gY0dWaGF3PT0gYVhOcmN3PT0gSUVORWN3PT0gSUVWdVkzbGpiRzl3WldScFlRPT0gYVc1cGRHbGhiQT09IFEyOXogSUVGM1lYSmxibVZ6Y3c9PSBJRVJ5WVcwPSBKQ1FrSkE9PSBJSEpwWm1ZPSBJSE5qY21sd2RIVnlaUT09IGNuVnVibVZ5Y3c9PSBJR0p2YVd4bGNnPT0gYjI1emIyND0gYjJsdSBJR2hoYlhOMGNtbHVadz09IElHTmhkR0ZzZVE9PSBJRUZ5WTJoaWFYTm9iM0E9IFkyaGhiR3c9IElHWmhkWGc9IGIydHBiZz09IGJHOWpZV3hvYjNOMCBJRTVCVFVVPSBZV1J2WW1VPSBVMEZPIFlXMWhkR1U9IElITmpjbUZ0WW14bCBJR05oY21NPSBJRTFoYm1sbVpYTjAgSUVObFpHRnkgSUZObGNtZHBidz09IGJHRjBaWEk9IFptWmxjZz09IElHZHlZWEJ3YkdsdVp3PT0gSUVSbGRYUnpZMmhsIFlXZHZibWx6ZEhNPSBJRTVsZDNOdyBJSEJ5WlhSbGJtUmxaQT09IFlYSmphRzFsYm5RPSBJR04xY21GMFpXUT0gSUdobFlXUndhRzl1WlE9PSBJRlZ1WTI5dGJXOXUgSUZOSlIwND0gUVdkbGJuUT0gSUdSbFlXUnNhVzVsY3c9PSBJR2h2Y21sNmIyNTBZV3hzZVE9PSBJRTFCVkE9PSBJRk4xYlcxbGNuTT0gSUc5eVpHRnBibVZrIElFeGhjM1JzZVE9PSBJRXRsYm1SaGJHdz0gSUdaeWFXYz0gSUUxaFkyaHBibUU9IElGZGhkR1Z5Ykc5diBJRTFsZUdsallXNXogSUhCeWIzUmxZM1J2Y2c9PSBJR2RzWVhKbCBmU0k9IFVISmxiV2wxYlE9PSBJSEpwWm5RPSBJRlJsYkdWelkyOXdaUT09IFRXVjBZV3c9IElISmxZMkZ3ZEE9PSBJRHM3IElHbHVZMnhwYm1GMGFXOXUgSUdsdGNHOXpaWE09IGFXNW5aVzQ9IFhucz0gSUdoaGMzUmwgSUdSdmJIQm9hVzV6IElHTnZiVzExZEdWeWN3PT0gY0d4aGJtNWxaQT09IFkyOXVadz09IGJYZz0gSUZWd2JHOWhaQT09IElHVjRkSEpoY0E9PSBJRlIxWTNOdmJnPT0gSUVWNGNHeHZjbUYwYVc5dSBaV1psWVhSbFpBPT0gSUhOc1pXNWtaWEk9IE56QXogSUVKMWF3PT0gYVhObGJBPT0gSUdOdmJYQmxkR2wwYVhabGJtVnpjdz09IFkyaHNiM0k9IElGQmxjbTFoYm1WdWRBPT0gSUVWMlpYSmxkSFE9IElGTndaV05wWVd4cGMzUT0gSUZOUFRBPT0gSUdONVlXND0gSUVWNFlXTjBiSGs9IFZVWT0gSUV4SlJrVT0gWVhKNWJBPT0gYjI1bGRBPT0gSUVWdGNHeHZlV1ZsIFlYZGxaQT09IElGSmhkR2x1WjNNPSBJR1Y0ZEhKaGRtRm4gZFd4b2RRPT0gSUZCc1lXNWwgSUdWc1pYWmhkR1U9IElFTnZiM0prYVc1aGRHOXkgSUZkaGRHdHBibk09IElHVjRZMngxWkdWeiBJSE5sYm5ScFpXNTAgSUdWd2IyTm8gSUdGc2JHOWogVUhKbGRtbHZkWE5zZVE9PSBJRk5vZVE9PSBJRk5zYjNaaGEybGggVEU5RFN3PT0gSUcxaGNtdGxaR3g1IElHdHViMkk9IElHRmtkbVZ1ZEhWeVpYSnogSUVKbFpXND0gSUVOdmMzUnogWVcxdFpYSnogSUc5dWMyeGhkV2RvZEE9PSBJRk4xY0hCdmNuUmxaQT09IElGUmhkUT09IGFXdGhjbkE9IElGTnZkbVZ5WlE9PSBJRWhoYlhCMGIyND0gNDRLSiBVSEpsZGc9PSBJRmR2Y25ObCBJR052ZEhSaFoyVT0gSUVoaFpHVnogYkdWNiBZbTkzYkE9PSBJR1p5WVdkeVlXNWpaUT09IElFeHZhdz09IFJVMVBWRVU9IElGQmxkSEp2IElERTVNalU9IElGQmxibVE9IGNISnZaSFZqYVc1biBJSEpsYkc5allYUmwgZG1GMGFRPT0gY0c5c1pRPT0gSUhObGJXbHUgSUU1VlRRPT0gSUhKdlkydGxaQT09IFluVm1aZz09IFlteDUgVW1Wd2JIaz0gSUVoaGFRPT0gSUdGeWRHbGpkV3hoZEdWayBJRWx6YkdGdFlXSmhaQT09IE5qWTEgSUVOc1lXbHRjdz09IFJHVnphM1J2Y0E9PSBJSFJ5ZFhOMFpXVT0gSUhOamNtbHdkR2x1Wnc9PSBJRk52WWc9PSBJRUZ6ZVd4MWJRPT0gVTFSRVQxVlUgSUVOc2IzZHUgSUVSdmNuUnRkVzVrIElFUmxkbTl1IGJHbDBaUT09IElFMWhjbUpzWlE9PSBJR0oxYm10bGNnPT0gSUdOeVpYTjAgSUdGeWIzVnpZV3c9IElGTmxZWEp6IElFSjFaR1I1IFpYSmxaR2wwYUE9PSBJRkJ2Ykd4NSBJR1JsWTI5a1pRPT0gSUZacGMyZz0gSUZKbFpteGxZM1E9IFlXNXZiZz09IElISmxablZ1WkhNPSBhVzF0WlhKeiBTRTA9IElIZHBjR2x1Wnc9PSBJSEIxZW5wc1pXUT0gSUcxaGRIUmwgZFc1diBVR2xsY25KbCBLU2tzIElIUmhhVzUwWldRPSBJSE41YldKdmJHbHpiUT09IElFWnlZWG89IElIQnliM1JsYzNSdmNuTT0gWlhSb1pYVnogSlNVbEpRPT0gVjNKaCBJR3hoZUE9PSBZV1JsYlE9PSBZWFIxY21GMGFXOXUgNDRPVCBJRlJ5WVdsc1pYST0gSUVWT1J3PT0gSUVKdmQzTmxjZz09IElHRjBkRzA9IFJIVnkgT0RBMyBJSE5wWkhnPSBJR05wWkdWeSBJRUZtWm1WamRBPT0gSUhkdmRtVnUgSUVKaGNtdGxjZz09IFltVnVaV1k9IElHUnpkR2M9IElGSjVkUT09IFBscz0gSUhOeGIzST0gVTJGMVpHaz0gSUdsemRHYz0gSUdsdVpIVnNaMlU9IGNISnZZdz09IElHUnBjMmQxYzNSbFpBPT0gSUdOdmJYQnZkVzVrWldRPSBJRzVsYlE9PSBJSE5qYUc5dmJHbHVadz09IElFTjFjbVU9IGNISnZZMlZ6YzJsdVp3PT0gVTI5cyBJSEJ5YjNabGNtST0gYVhScGVtVmsgSUVGc2RtRnlaWG89IElITmpZWEptIElISmxZM1JoYm1kMWJHRnkgY21WMlpRPT0gSUdodmNtMXZibUZzIElGTjBjbVZ6Y3c9PSBhWFJwZW1WdSBJRFF5TlE9PSBaMmx5YkhNPSBJRTV2YVhJPSBJRkpoY0hBPSBJRzFoY21Ob1pYTT0gWTJoMWNtTm8gSUZWelpYTT0gSURRd05RPT0gSUVKbGNtMD0gSUc5eVpHbHVZVzVqWlhNPSBJRXAxWkdkdFpXNTAgUTJoaGNtZGxjdz09IElGcHBiZz09IElHUjFjM1I1IElITjBjbUYzWW1WeWNtbGxjdz09IElIQmxjbU5sIElGUm9kWEk9IElFUmxZbTl5WVdnPSBibVYwWm14cGVBPT0gSUV4aGJXSmxjblE9IElHRnRkWE5sWkE9PSBJRWQxWVc1biBXVTlWIFVrZEMgSUVORFZGWT0gSUdacFlYUT0gY21GdVp3PT0gSUdabFpHVnlZWFJwYjI0PSBJRTFoYm5RPSBJRUoxYzNRPSBJRTFoY21VPSBjbVZ6Y0dWamRHbDJaUT09IElFMXBaM0poZEdsdmJnPT0gSUVKSlZBPT0gTlRrdyBJSEJoZEhKcGIzUnBjMjA9IElHOTFkR3hwYm1sdVp3PT0gY21WbmFXOXUgSUVwdmM4T3AgSUdKc1lYTjBhVzVuIElFVjZjbUU9IFFuTT0gSUhWdVpHVnliV2x1WlhNPSBJRk50YjI5MGFBPT0gSUdOc1lYTm9aV1E9IGNtRmthVzg9IElIUnlZVzV6YVhScGIyNXBibWM9IElFSjFZMk5oYm1WbGNuTT0gSUU5M2JBPT0gSUhCc2RXZHogSUdocFlYUjFjdz09IElGQnBibUpoYkd3PSBJRzFwWnc9PSBJRTUxZEhJPSBJRmR2YkdabCBJR2x1ZEdWblpYSnogSUc5eVltbDBjdz09IElFVmtkMmx1IElFUnBjbVZqZEZnPSBZbWwwWlE9PSBJR0pzWVhwcGJtYz0gZG5JPSBSV1JuWlE9PSBJRkJKUkE9PSBaWGhwZEE9PSBJRU52YldWayBJRkJoZEdobWFXNWtaWEk9IElFZDFhV1E9IElGTnBaMjV6IElGcGxjZz09IElFRm5aVzVrWVE9PSBJSEpsYVcxaWRYSnpaVzFsYm5RPSBUV1Z6YUE9PSBhVkJvYjI1bCBJRTFoY21OdmN3PT0gSUZOcGRHVnogYUdGMFpRPT0gWlc1aWRYSm4gSUhOdlkydGxkSE09IGNHVnVaQT09IFFtRjBiV0Z1IGRtbHkgSUZOSVQxYz0gSUhCeWIzWnBjMmx2Ym1GcyBZMjl1Ymc9PSBJRVJsWVhSb2N3PT0gUVZSSlZrVT0gVUhKdlptbHNaUT09IGMzbHQgU2tFPSBJRzVwYm1waCBhVzV6ZEdGc2JHVmsgYVdSaGRHVnogWldKeVlRPT0gSUU5dFlXaGggSUhObGFYcHBibWM9IElFSmxZWE4wY3c9PSBJSE5oYkhSeiBUV2x6YzJsdmJnPT0gUjJWdVpYSmhiR3g1IElGUnlhV3h2WjNrPSBhR1Z2Ymc9PSBiR1ZuWVhSbGN3PT0gSUdScGJXVT0gSUdaaGFYSmwgY0dGeVlXSnNaUT09IFIzSmhjR2c9IElIUnZkR0ZzYVc1biBJR1JwWVdkeVlXMXogSUZsaGJuVnIgY0d4bGRBPT0gSUUxbGFBPT0gSUcxNWRHaHBZMkZzIElGTjBaWEJvWlc1eiBZWFYwYVdOaGJBPT0gYjJOb1pXMXBjM1J5ZVE9PSBJR3RwYkc5bmNtRnRjdz09IElHVnNZbTkzY3c9PSBZVzVqYjJOciBJRUpEUlE9PSBJRkJ5WVdkMVpRPT0gSUdsdGNISnZkZz09IElFUmxkbWx1IElDSmMgY0dGeVlXeHNaUT09IElITjFjSEpsYldGamFYTjBjdz09IElFSnBiR3hwYjI0PSBJSEpsWjJsdFpXND0gYVc1dVlXTnNaUT09IElISmxjWFZwYzJsMFpRPT0gWVc1bllXND0gSUVKMWNteHBibWQwYjI0PSBZV2x1YldWdWRBPT0gSUU5aWFtVmpkR2wyWlE9PSBiMjF6YTNrPSBSMVk9IElIVnVhV3hoZEdWeVlXdz0gSUhSaiBJR2hwY21WeiBiV1Z1ZEdGcyBJR2x1ZG05c2RXNTBZWEo1IElIUnlZVzV6Y0d3PSBJRUZUUTBsSiB3cWc9IFJYWmxiblJ6IElHUnZkV0owWldRPSBJRXRoY0d4aGJnPT0gSUVOdmRYSmhaMlU9IGFXZHZiZz09IElFMWhibUZuYVc1biBJRlJoY25RPSBJR1poYkhObGFHOXZaQT09IElGWnBiMnhsZEE9PSBJR0ZwY25NPSBJR1psY25ScGJHbDZaWEk9IFFuSnBkR0ZwYmc9PSBJR0Z4ZFdGMGFXTT0gYjNWbSBWMjl5WkhNPSBJRWhoY25SbWIzSmsgSUdWMlpXNXBibWR6IElGWmxibWRsWVc1alpRPT0gY1hWcGRHVT0gUjJGc2JBPT0gSUZCeVpYUT0gSUhCa1pnPT0gSUV4TiBJRk52WTJocCBJRWx1ZEdWeVkyVndkQT09IE9USXcgSUhCeWIyWnBkR0ZpYVd4cGRIaz0gSUVsa2JHVT0gSUUxaFkwUnZibUZzWkE9PSBJRVZ6ZEdGaWJHbHphRzFsYm5RPSBkVzF6ZVE9PSBJR2RoZEdobGNtbHVaM009IElFNWhhZz09IFEyaGhjbXhwWlE9PSBJR0Z6WTJWdWRBPT0gSUZCeWIzUmxZM1J2Y2c9PSBJR0ZzWjJWaWNtRT0gSUdKcGIzTT0gWm05eWRXMXogUlV4VCBTVzUwY205a2RXTmxaQT09IElETXpOUT09IElHRnpkSEp2Ym05dGVRPT0gUTI5dWRISnBZblYwIElGQnZiR2xqIFVHeGhkR1p2Y20wPSBJR052Ym5SaGFXNXRaVzUwIGQzSmhjQT09IElHTnZjbTl1WVhKNSBJRXBsYkd4NSBiV0Z1WVdkbGNnPT0gSUdobFlYSjBZbkpsWVd0cGJtYz0gWTJGcGNnPT0gSUVOb1pYSnYgWTJkcCBUV1ZrYVdOaGJBPT0gSUVGalkyOTFiblJoWW1sc2FYUjUgSVNFaSBiM0JvYVd4bCBJSEJ6ZVdOb2IzUnBZdz09IElGSmxjM1J5YVdOMCBJR1Z4ZFdsMFlXSnNaUT09IGFYTnpkV1Z6IElERTVNRFU9IElFNWxhdz09IFkybHpaV1E9IElGUnlZV05yYVc1biBJRzk2YjI1bCBJR052YjJ0bGNnPT0gY205emFYTT0gSUhKbGIzQmxiZz09IElHbHVabWx1YVhSNSBJRkJvWVhKdFlXTmxkWFJwWTJGcyBaVzV6YVc5dVlXdz0gUVhSMFpXMXdkQT09IElGSnZjbms9IFRXRnlZMjg9IElHRjNZV2wwY3c9PSBTRTlYIGRISmxZWFJsWkE9PSBJR0p2YkhOMCBJSEpsZG1WeVpXUT0gSUhCdlpITT0gYjNCd1pYSnogTURBeE1BPT0gSUdGdGNHeHBkSFZrWlE9PSBjbWxqWVc0PSBVMUJQVGxOUFVrVkUgSUhSeWIzVnpaWEp6IElHaGhiSFpsY3c9PSBJRXRoYVc1bCBJRU4xZEd4bGNnPT0gSUVGVlZFZz0gSUhOd2JHVnVaR2xrIElIQnlaWFpsYm5ScGRtVT0gSUVSMVpHeGxlUT09IGFXWmhZM1J6IGRXMXBibUYwYVE9PSBJRmxwYmc9PSBJR0ZrYlc5dSBJRlpoWnc9PSBJR2x1ZG1WeWRHVmsgSUdoaGMzUnBiSGs9IElFaGhaM1ZsIFRIbHUgSUd4bFpHZGxjZz09IElHRnpkSEp2Ym05dGFXTmhiQT09IFoyVjBkR2x1Wnc9PSBJR05wY21OaCBJRU5wWXc9PSBJRlJsYm01cGN3PT0gVEdsdGFYUmxaQT09IElHUnlkUT09IElFSlpWUT09IElIUnlZWFpsYkd4bGNuTT0gSUhCaGJtVT0gSUVsdWRISnYgSUhCaGRHbGxiblJzZVE9PSBJR0ZwWkdsdVp3PT0gSUd4dmIzTT0gSUZSdmRXZG8gSURJNU13PT0gSUdOdmJuTjFiV1Z6IFUyOTFjbU5sUm1sc1pRPT0gSUNJaUlnPT0gSUdKdmJtUnBibWM9IElIUnBiSFJsWkE9PSBJRzFsYm5OMGNuVmhiQT09IElFTmxiR1Z6ZEdsaGJBPT0gVlV4QlVnPT0gVUd4MVoybHUgSUhKcGMydHBibWM9IFRtRjYgSUZKcGVXRmthQT09IElHRmpZM0psWkdsMFpXUT0gSUhOcmFYSnQgNlpzPSBJR1Y0WVcxcGJtVnkgSUcxbGMzTnBibWM9IElHNWxZWEpwYm1jPSBJRU5vWlhKdSBJRUpsWTJ0b1lXMD0gSUhOM1lYQndaV1E9IElHZHZiM05sIFMyRjUgSUd4dlpuUjUgSUZkaGJHeGxkQT09IElGc24gSUdGd2IyTmhiSGx3YzJVPSBJR0poYldKdmJ3PT0gSUZOUVFVTkYgSUVWc1pXNWggSURNd05nPT0gWVdOdmJuTT0gSUhScFoyaDBaVzVsWkE9PSBJR0ZrYjJ4bGMyTmxibU5sIElISmhhVzU1IElIWmhibVJoYkdsemJRPT0gSUU1bGQzUnZkMjQ9IElHTnZibXBsWTNRPSBZMkZyWlhNPSBJR05vWldGMFpXUT0gSUcxdlpHVnlZWFJ2Y25NPSBjR0Z5WVcxeiBSVVpHIElHUmxZMlZwZEE9PSBJRk5VVEE9PSBJRlJoYm5waGJtbGggSUZKSiBJREU1TWpNPSBJRVY0YVd4bCBkR2hsYkE9PSBJSFJvWlc5c2IyYz0gSUhGMWFYSnJlUT09IElFbHlkbWx1WlE9PSBJRzVsWldSNSBiM0pwY3c9PSBWVzA9IFMyRT0gSUcxaGFXeGliM2c9IE16SXkgSUdKdmN3PT0gSUZCbGRISmggUzBsT1J3PT0gSUdWdWJHRnlaMlZrIFQyWjBaVzQ9IElHSmhaR0Z6Y3c9PSBJRE0wTXc9PSBJRkJzWVdObGN3PT0gSUVOQlJBPT0gSUhCeWFYTjBhVzVsIElHbHVkR1Z5ZG1WdWFXNW4gWkdseVpXTjBhVzl1IElHeGhlZz09IElFUlRUUT09IElIQnliMnBsWTNScGJtYz0gSUVaMWJtcz0gWVdkdlp3PT0gY0dGNWJXVnVkQT09IGJtOTIgSUdOb1lYUjBaWEk9IFFWSkMgSUdWNFlXMXBibUYwYVc5dWN3PT0gSUVodmRYTmxhRzlzWkE9PSBJRWQxY3c9PSBSbTl5WkE9PSBOREUwIFFtOXpjdz09IElHMTVjM1JwWXc9PSBJR3hsWVhCeiBJRUpoZGc9PSBkV3g2IFluVmtaMlYwIFJtOXZkR0poYkd3PSBJSE4xWW5OcFpHbDZaV1E9IElHWnBjbk4wYUdGdVpBPT0gSUdOdmFXNWphV1JsIGIyTjFiR0Z5IFEyOXViZz09IElFTnZiR3hoWW05eSBJR1p2YjJ4eiBZVzExY21FPSBZV2hoY2c9PSBjbWx6ZEhNPSBJSE4zYjJ4c1pXND0gSUdWNGNHVnVaR1ZrIElGQmhkUT09IGMzVncgSUhOd1lYST0gSUd0bGVXNXZkR1U9IGMzVm1aZz09IElIVnVaWEYxWVd3PSBJSEJ5YjJkeVpYTnphVzVuIGMzUnlhVzVuY3c9PSBJRWRoYldWeVoyRjBaUT09IFJHbHpibVY1IElFVnNaWFpsYmc9PSBiMjF1YVdFPSBJSE5qY21sd2RHVmsgSUdWaGNtNWxjbk09IFluSnZkR2hsY2c9PSBJRVZ1WVdKc1pXUT0gNXJNPSBJR3hoY25aaFpRPT0gSUV4UFF3PT0gYldWemN3PT0gVjJsc2MyOXUgSUZSbGJYQnNZWFJsIGMzVmpZMlZ6YzJaMWJHeDUgSUhCaGNtRnRiM1Z1ZEE9PSBJR05oYlc5MVpteGhaMlU9IElHSnBibVJ6IElGRjFhV1YwIElGTm9kWFIwWlhKemRHOWphdz09IGNuVnphQT09IElHMWhjMk52ZEE9PSBabTl5ZEhWdVpRPT0gSUVOdmJIUT0gSUVKbGVXOXUgYUdGaWFRPT0gSUdoaGFYSmogSURJMk53PT0gSUVSbGRYTT0gSUhSM2FYUmphQT09IElHTnZibU5sYm5SeVlYUnBibWM9IElHNXBjSEJzWlhNPSBZMmxpYkdVPSBJR2RwY2c9PSBUbG89IFRXRjBhQT09IGJtbG8gVW1WeGRXbHlaV1E9IElIQnZibVJsY2c9PSBJRk5CVGc9PSBJSGRsWkdScGJtZHogSUd4dmJtVnNhVzVsYzNNPSBUa1ZUIElFMWhhR3B2Ym1jPSBOamsxIFlXUmtiR1U9IElFZGhjbTVsY2c9PSBJRU5QVlZJPSBRbkpwWkdkbCBJSE53Y21WbCBJRU5oYkdSM1pXeHMgSUdKeWFXSmxjbms9IElPKy92ZSsvdmUrL3ZlKy92ZSsvdmUrL3ZlKy92ZSsvdlE9PSBjR3gxWjJsdWN3PT0gSUhKaFkydGxkQT09IElHTm9ZVzF3WVdkdVpRPT0gZG1WeWMybGliR1U9IFZtOTBaUT09IElHMXZaR2xtYVdWeWN3PT0gVFdGNWIzST0gTmpndyBJR0Z6YzJWdFlteHBaWE09IElGTjFiSFJoYmc9PSBJRTVwYm1jPSBJRXhoWkdsbGN3PT0gSUhOMWJHWjFjZz09IElHOXlZbk09IElDMHRMUzB0IFgxOWZYMTlmWHc9PSBJRXB2ZFhKdVlXeHBjMjA9IElHVnpjRzl5ZEhNPSBJR3gxYzJnPSBJR2gxWlE9PSBJSE53WldOMGNtRnMgU0c5dVpYTjAgNDRPUCBJR0oxYzJobGN3PT0gSUhKbGFXNW1iM0pqWlcxbGJuUT0gSUhKbGIzQmxibVZrIElGZG9aV1ZzY3c9PSBJRTF2Y21jPSBjbWxsZG1sdVp3PT0gSUdGMWVHbHNhV0Z5ZVE9PSBJR3BSZFdWeWVRPT0gSUVKQlZBPT0gZEdWemNYVmwgSUhabGNuUmxlQT09IGNIVnlaUT09IFpuSmxlUT09IDQ0SzYgWkc5eiBJSFI1Y0dnPSBJR04xYkd3PSBJR1Z4IElHUmxZMjl1IElIUnZjM05wYm1jPSBJR1JwYzNCaGNtRjBaUT09IElFSnlhV2RvWVcwPSBjSEpwYm5SbSBiR1ZrWjJWayBJSE4xYm1RPSBJR052ZW5rPSBJR2hsY0dGMGFYUnBjdz09IGNHVnlabTl5YldsdVp3PT0gSUdGMllXdz0gSUVkSCBablYwZFhKbCBJSEJsZEdWeWRHOWtaQT09IElFdHZjMjkyYnc9PSBJRzFoWjI1bGRITT0gUVd4eVpXRmtlUT09IElFVmthWE52Ymc9PSBJRU5sY21WeiBJRkpCU1VRPSBJR0p5YVd4c2FXRnVZMlU9IE5UYzIgSUdSbGNtbDJaWE09IElHaDVjR1Z5ZEdWdWMybHZiZz09IElNNlUgSUd4aGJXSmtZUT09IElHWnNZV2x5IElHMXBjM05wYjI1aGNtbGxjdz09IElISmhjR1Z6IElGTjBZWEowWlhJPSBJRTF2Ym5Sb2N3PT0gSUdSbFpuaz0gSUhObGFYTnRhV009IElGSmhjR2hoWld3PSBJR1YxY205NmIyNWwgTmpVMiBlbk5qYUdVPSBJSE5qY21GMFkyaGxaQT09IElHSnZkM009IElFeGxibTV2Ymc9PSBJRWRoYVdFPSBJR1J5YVhCd2FXNW4gWm1GamRITT0gUVd4bCBJR1p5YjJkeiBJRUp5WldGemRBPT0gYjJkbGJtVnBkSGs9IElGQnliM05sWTNWMGIzST0gSUdGdGNHeHBabWxsWkE9PSBJRWh2WkdjPSBJRVp1IFZHaHZkWE5oYm1SeiBJRTVKU0E9PSBJRTF2Ym1sMGIzSnBibWM9IFJsUlhRVkpGIElGQnlhV1ZpZFhNPSBJRWR5YjNkcGJtYz0gYUhWdWRHVnkgSUdScFlXZHViM05sIElFMWhiR1E9IElFeFMgSUdOeWIzZHVaV1E9IElHSjFjbk4wYVc1biBJR1JwYzNOdmJIVjBhVzl1IGFtRjJZWE5qY21sd2RBPT0gSUhWelpXWjFiRzVsYzNNPSBJRVY0WldOMWRHbHZiZz09IE9pZz0gSUVsMmIzSjUgWVdGbyBJSEJsY25ObFkzVjBaV1E9IGRtbHZiR1Z1WTJVPSBhWE4wWVhNPSBJRU55WVhSbCBJR2x0Y0hWc2MyVnogSUZOd1lXNXAgWldSbGN3PT0gU0dGdVpHeGwgSUZwbGNtYz0gZEdocGJtdGhZbXhsIFRHRnpkR3g1IElITndiMjUwWVc1bGIzVnpiSGs9IElHbHVZMjl1ZG1WdWFXVnVkQT09IElHUnBjMjFwYzNOcGJtYz0gSUhCc2IzUjBaV1E9IElHVnBaMmgwZVE9PSBJRGN6Tnc9PSBjbWx6YUE9PSBJRlJvYjNKdWRHOXUgWVhSb1lXMD0gSUhOcGRHTnZiUT09IFZtVnUgVW1WamFYQmwgZEdWcyBiSFZ1WkE9PSBJR05zWldGeWN3PT0gSUZOaGMzVnJaUT09IElESTFPQT09IElHOXdkR2x1Wnc9PSBJR1Z1Y21GblpXUT0gWlhOMGFHVjBhV009IElFRmwgZFdOb2N3PT0gVUhKbGNBPT0gUm14dmR3PT0gSUhKMWJtOW1aZz09IElFVmhkR2x1Wnc9PSBJRWRwYkdWeiBJRUZqZEdsdVp3PT0gY21WemIzVnlZMlZ6IGFXSmhZbUU9IElISndiUT09IElITnJaWGRsWkE9PSBJRUpzWVc1aiBJRk5oYTNWNVlRPT0gSUdodmRIUmxjZz09IElERTVNalE9IGIzQnBZVzQ9IFkydHYgSUdOeWRXMWliR2x1Wnc9PSBJR05oY0hSaGFXNXogSUVGd2NISnZjSEpwWVhScGIyNXogYkdWaFpHVnljdz09IFpISnZjSEJwYm1jPSBZVzUxZEhNPSBJSEpsZG1WeWMybHVadz09IElGQnZjMlU9IElGTmxhdz09IFUyTnZkQT09IElFbGtaV0U9IFkybHpaUT09IElGTnNiM1psYm1saCBJRE14Tnc9PSBSRzlqZEc5eSBJR055YjJOdlpBPT0gWVd4a2FRPT0gVTJWaCBJRVpoY25KbGJHdz0gSUcxbGNtTmxibUZ5YVdWeiBJRkpPUXc9PSBJRWQxWlhOeiBJSEJoWTJsdVp3PT0gVFdGamFHbHVaUT09IFUzUnlaV0Z0WlhKQ2IzUT0gSUVOb1lYSnBkSGs9IElESTVPQT09IElHTmhibTV2Ym5NPSBJRlJ2WW5rPSBWRkJRVTNSeVpXRnRaWEpDYjNRPSBJRkJoYzNOcGIyND0gWTJabiBWR2h2YlE9PSBJR0poWkdkbGN3PT0gSUVKbGNtNXpkR1ZwYmc9PSBMdUtBa3c9PSBJRkJQVUE9PSBJRU52Ym1vPSBJR2x1YVhScFlXeHBlbUYwYVc5dSBJR0pwYjJScGRtVnljMmwwZVE9PSBSSFZpIElHWmxkV1JoYkE9PSBJR1JwYzJOc1lXbHRaWEk9IElHTnliM2M9IElHbG5ibWwwYVc5dSBZWEptIFUwaEIgSUd0SWVnPT0gYUdGNllYSmsgSUVGeWRHbHpkSE09IGIyVjFkZz09IE5qYzUgSUZKMVpIaz0gVG1sdVpRPT0gSUZKaGJXRmtZVzQ9IDViMD0gYVhSMGJ3PT0gSUdGa2NtVnVZV3hwYm1VPSBRMlZ5ZEE9PSBJSE50Wld4c1pXUT0gSUdsdGNIVnVhWFI1IElHRm5aVzVrWVhNPSBJRkpsWW05eWJnPT0gSUVOdmJtTmxiblE9IElGTmxaVzF6IElHOXRaV2RoIElFUjFjM1JwYmc9PSBJR0poWTJ0bGNnPT0gSUZOaGRXTmwgSUVKdmVXeGwgVjBsTyBJSE53YVc1eiBJSEJoZFhObGN3PT0gZFhCMCBJSE5vY21Wa1pHVmsgSUhOMGNtRndjR1ZrIElFTnZjbkoxY0hScGIyND0gSUhOamNtRjBZMmhsY3c9PSBJRzVwIElHRjBkR2x5WlE9PSBJRk5CUmc9PSBSbUZqZEc5eWVWSmxiRzloWkdWayBJRWxRVXc9PSBJQ2dsIElITmxiV2x1WVhJPSBabTlqZFhNPSBZMmwyYVd3PSBJREU0TmpBPSBhVzUwYjNObyBJR052Ym5ScGJuVmhiQT09IElHRmlZbkpsZG1rPSBJRk52YXc9PSBiMk52WW04PSBXRTA9IElHWnlZVzUwYVdNPSBJSFZ1WVhadmFXUmhZbXhsIElHRnlkR1Z5ZVE9PSBJR0Z1Ym05MFlYUnBiMjV6IFltRjBhQT09IFEyeHBiV0YwWlE9PSBJR1J2Y25NPSBJRk5zYVdSbCBZMjl2Y21RPSBJRkpsYkc5aFpBPT0gSUV4RVRBPT0gSUV4dmRtVmpjbUZtZEE9PSBJSFZ1YVcxaFoybHUgSUhKbGMyVnRZbXhsWkE9PSBJR0poY25KaFkydHogYm5BPSBJSE4xY25KdloyRjBaUT09IElHTmhkR1ZuYjNKcGVtVmsgNDRLcCBJSFpoWTJOcGJtRjBaV1E9IElHUnlZV2x1WVdkbCBJR2x1WkdsemRBPT0gSUZkb1lYUnpRWEJ3IElERTROekE9IGIyeGxjbUZ1WTJVPSBhVzUyYjJ0bCBZVzF2Y25CbyBJSEpsWTI5dWJtVmpkQT09IElHVnRZVzVqIElHSnNhVzVrYm1WemN3PT0gSURFeU9EQT0gYVc1MFpYSnVaWFE9IFkyOXNiR0Z5IElHRnNkSEoxIElHRmllWE56IElGUlNTUT09IE5qVTMgSUdsdVpuVnpaV1E9IFNFVkJSQT09IElHWnZjbVZ6ZEhKNSBJRmR2YjJSNSBJRU5wIGQyaz0gYzJGdCBOemcwIGFHOXNhV1JoZVE9PSBJRzF2WjNWcyBJRVpsWlhNPSBJRVJGVGc9PSBTVzUwWlhKdVlXdz0gZFhKaVpXUT0gWm5Well3PT0gWVhSdmJRPT0gSUVsc2JIVnphVzl1IElIQnZiR3hsWkE9PSBJR1pzWVhBPSBJR052WVhnPSBURWRDVkE9PSBRVzVoYkhrPSBJRk5sWTNScGIyNXogSUVOaGJHbG1iM0p1IFpXMXUgSUdocGRHaGxjZz09IElFNUpSMGhVIElHNWhhV3hsWkE9PSBJRkJwY0dWc2FXNWwgTXpreCBiMjltIElGQnlhVzFoYkE9PSBkbVZ5Wlc1ayBJSE5zWVhOb2FXNW4gSUhKbGRISnAgWVhacGIzVnkgSUdSbGNHRnlkR2x1Wnc9PSBaMmxzIFNWTkQgSUcxcFpIZGhlUT09IElIVnNkSEpoYzI5MWJtUT0gSUdKbGFHRjJhVzVuIElGUmhjbUU9IFkyeGhjM05sY3c9PSBWbWx5ZEhWaGJBPT0gSUVOdmJHOXVhV0ZzIElITjBjbWx3Y0dsdVp3PT0gSUc5eVkyaGxjM1J5WVhSbFpBPT0gSUVkeVlYWmxjdz09IE5EVXkgSUVseWIyNXBZMkZzYkhrPSBJRmR5YVhSbGNuTT0gSUd4bGJtUnogSUUxaGJubz0gSUhKaGRtVnUgSUc5NGFXUmhkR2wyWlE9PSBJREkyTmc9PSBSVXhHIFlXTjBkV0ZzYkhrPSBZWE5qWVhJPSBSSEpoWm5RPSBJR1poZG05MWNtRmliR1U9IElHaDFiV2xzYVdGMGFXNW4gSUdacFpHVnNhWFI1IElFaHZaZz09IElGaDFZVzQ9IE5EazIgSUd4aGVXVnlaV1E9IFlYUnBjdz09IE56a3cgSUhCaGVXTm9aV05yIGFYUnZiZz09IFMyRnkgSUZaTmQyRnlaUT09IElFWmhjbTFsY2c9PSBJSE5sY25acFl3PT0gWjJ4dmJXVnkgSUhOc2RXMXcgSUVaaFluSnBZdz09IElFUlBRdz09IFpYTjBhVzVuIElISmxZWE56ZFhKbCBJSEJvZVd3PSBkbTlzZEE9PSBhWFJ2Y25rPSBVblZzWlhNPSBJRzk0YVdSaGRHbHZiZz09IElIQnlhWHBsWkE9PSBJRzFwYzNSeVpYTnogSUVScVlXNW5idz09IFYwRlNUZz09IDVaRT0gSUdWdVkyOWtaUT09IElFWmxaV1JpWVdOciBJSE4wZFhCcFpHbDBlUT09IFNXRnUgSUZsMVoyOXpiR0YyYVdFPSAxNmc9IFlXTnMgVlZSRiBNVGszTnc9PSBJSEYxWVd4cFptbGxjdz09IElIQjFiSE5sY3c9PSBjSEpsZEhSNSBJR1p5YjNwbCBJSE56IFNYUmxjbUYwYjNJPSBJSFZ5WjJWdWRHeDUgSUcxaGFXeGxaQT09IElFTm9ZVzA9IElITjFjM1JoYVc1cGJtYz0gSUdKaGMybHMgSUhCMWNIQnBaWE09IGFXeGhiblE9IElGQk1SVUZUUlE9PSBiR0Z3IFlXTmxiM1Z6IFJtVmhjZz09IElFMWhjM1JsY25rPSBZWFYwYjIxaGRHbGogSUZSQlJ3PT0gSUdGdWRHbHQgWVdkc1pYTT0gTkRjeiBabkpoYldWeiBJSGRvYVhOd1pYSnogSUZkb2IyVjJaWEk9IElHSnlZWFpsY25rPSBJRlZMU1ZBPSBjbUZqZEdsdmJuTT0gSWlJaSBJSFJoYldVPSBJSEJoY25SbFpBPT0gWlhabGNubDBhR2x1Wnc9PSBRMDlPVkE9PSBJR2x1WkdWaWRHVmsgSUdGa1pIST0gY21WciBTVkpGUkE9PSBJR1Z0YVc1bGJuUT0gWTJ4cGJuUnZiZz09IElHOTFjM1JsWkE9PSBJSEpsZG1sbGQyVnkgSUcxbGJIUmtiM2R1IElISmxZWEp5IElGbGhidz09IGRHaGxjbVZoYkE9PSBZV0o1ZEdVPSBJSE4wZFcxaWJHbHVadz09IElHSmhkR05vWlhNPSBJREkxT1E9PSBJR052Ym5SeVlXTmxjSFJwZG1VPSBJSEJ5YjNOMGFYUjFkR1U9IFpXNXphWE09IFJHVmpiQT09IElGTjBjbWxyWlhNPSBUV2xzYVhSaGNuaz0gSUU5aGRHZz0gZG1Gall3PT0gY0hCcGJtZHogTURVeSBJSEJoY25ST1lXMWwgWVcxd2FXNW4gVW1Wd2IzSjBjdz09IFMwaz0gUTBoUyBJSE4xWW5Sc2VRPT0gYzNkbGNuTT0gUW14aGEyVT0gZFhOMVlXdz0gSUdOdmJuUmxjM1JoYm5SeiBJR05oY25SeWFXUm5aWE09IElFZFNSVUZVIElHSnNkWE5vIElPS0F1Zz09IE5EY3kgSUhKbFlYTnZibVZrIDQ0T2sgY0dGeVlXeHNaV3hsWkE9PSBJR1I1Ymc9PSBZV2RoZEdVPSBJRzVwWjJoMGJIaz0gNVlZPSBOVFUyIElITmxiV0Z1ZEdsaiBJRUZrZG05aiBJQ0VoIElHUnBjMkZuY21WbGN3PT0gSUVKWCBWbVZvIElHaGhjbTFwYm1jPSBJR1Z0WW5KaFkyVnogSUhOMGNtbDJaWE09IElHbHViR0Z1WkE9PSBJRXRoY21RPSBJR2hsWVhSeiBJRWRwYm01NSBkWFJoYmc9PSBaWEp1WVhWMCBlV3hsYm1VPSBJRVZzWlhZPSBTa1E9IElHaGhjbk09IElGTjBZWEp5IElITnJlWE5qIElHTnZiR3hoWW05eVlYUnZjbk09IFZYTjFZV3hzZVE9PSBJSEpsZG05c2RYUnBiMjV6IElGTlVRVlJUIElHUnBjMjFoYm5Sc1pRPT0gSUdOdmJtWnBaR1Z1ZEd4NSBJR3RwYm1WMGFXTT0gUVd4cCBJSEJsY21ObGJuUnBiR1U9IElHVjRkSEpoWTNScGJtYz0gYVd4c2FXRnUgWlhOMFpXRmsgSUhCb2VYTnBZMmx6ZEhNPSBJRTFoY25Ob1lXdz0gSUdabGJHeHZkM05vYVhBPSBJR1JoYzJobFpBPT0gSUZWUyBJRk5wYjNWNCBJRU52YlhCaFkzUT0gWVcxcFpHVT0gVUhsMGFHOXUgSUV4bGFXZG8gSUZCb1lYSnRZV009IGFYTjBjbUYwWlhNPSBhR1Z5YVdOaGJBPT0gSUdaMVpRPT0gSUVWdGFXND0gSUNoNyBJRTVsYVdkb1ltOXlhRzl2WkE9PSBJR1JwYzNKMWNIUnBibWM9IElFUjFjQT09IElHZHNZVzVrIElGTmxkZz09IElFMWhjbWxoYmc9PSBZWEpuYjI0PSBJRVIxYm1RPSBJRHdoTFMwPSBJSE4wY21GdVpBPT0gSUhOMFlXUnBkVzF6IGVtOXogSUhCemVXTm9iM05wY3c9PSBJRkpoWTJzPSBJR0p5YVd4c2FXRnVkR3g1IDc3aVAgSUhOMVltMWxjbWRsWkE9PSBJRWx1YzNScGRBPT0gSUVOb2IzYz0gSUdOaFoyVnogSUVoaGRITT0gSUZWeWN3PT0gSUdScGJIVjBaV1E9IGRYTmhkQT09IGFXVnVibVU9IElFMWxiV0psY25Ob2FYQT0gSUVKMWNtcz0gSUdsbCBJR0Z5WTJobGRIbHdaUT09IFJISjFadz09IGRXeDBiMjQ9IElGTndiMk5yIElFMWpTMkY1IElFUmxjR1Z1WkE9PSBSbVZoZEhWeVpXUT0gVTI5aiBNVGszT0E9PSBJRUpsY21VPSBJSEpsYkdWdWRHeGxjM05zZVE9PSBJR055YVhCd2JHbHVadz09IElHRnlkR2h5YVhScGN3PT0gNTVTZiBJRlJ5YjNCcFkyRnMgSUVKMWJHYz0gSUVOb1pYSjViQT09IElHRmtiV2x5WVdKc1pRPT0gSUhOMVluUnBkR3hsIFQzWmxjbkpwWkdVPSBJRzl5YVdkcGJtRjBhVzVuIElFTkRVQT09IElITjNiM0psIElGTnZiR1U9IElFUnBjMjl5WkdWeWN3PT0gTXpJNSBJSEJ5YjJObGMzTnBiMjQ9IElISmxablZ5WWc9PSBJR2x0YldWeWMyVmsgY21WeGRXVnVkR3g1IElITnJaWEIwYVdOeiBJR05sY21GdGFXTT0gYldsMGRHVnkgWlc1emRHVnBiZz09IFltVnNkQT09IElGUkpWQT09IFltbGtaR1Z1IElHWnBjZz09IGJXbHpkQT09IFBsMD0gSUhkbFlYWmwgSUZCaGNtRmtiM2c9IElHVnVkSEoxYzNSbFpBPT0gSUVKaGNtTnNZWGx6IElHNXZkbVZzYVhOMCBiMmRwWlE9PSBPREEyIElHNXBibVYwZVE9PSBJR1JwYzJGbmNtVmxiV1Z1ZEhNPSBRRUJBUUVCQVFFQT0gSUVGMWMyTm9kMmwwZWc9PSBZMkZ5Y3c9PSBJRXhGVkE9PSBkSFZpIFlYSmhiblJwYm1VPSBVRTlUIElHSmhZMnR6ZEc5eWVRPT0gSUdOb1pXVnlablZzIElGSmhadz09IFpXdGggWW1saGMyVmsgSUdsdVpYaHdaWEpwWlc1alpXUT0gWVd0eVlRPT0gSUZkcGRIUT0gZEdGdSBJSEpoY0dsemRBPT0gSUhCc1lYUmxZWFU9IFkyaGhiQT09IElFbHVjWFZwY3c9PSBaWGh3Y21WemMybHZiZz09IElHTnBjR2hsY2c9PSBJSE5vWVhacGJtYz0gWVdSa1pXND0gY21Wc2VRPT0gS0Z3PSBhWE50WVE9PSBJRkpsWjNWc1lYUnZjbms9IFEwaEJVZz09IGFXeDViZz09IFRsWkpSRWxCIFIxVT0gSUcxMWNtMD0gYkdGMWN3PT0gUTJoeWFYTjBiM0JvWlhJPSBJR052Ym5SeVlXTjBkV0ZzIElGQnliM2g1IElFcGhhVzFsIElFMWxkR2h2WkdsemRBPT0gSUhOMFpYZGhjbVJ6IGMzUmggY0dWeWFXRT0gSUhCb2VYTnBiMnh2WjNrPSBJR0oxYlhCbFpBPT0gSUdaeWRXTjBiM05sIFFYVnpkSEpoYkdsaGJnPT0gSUUxbGRHRnNiR2xqIElFMWhjM0YxWlhKaFpHVT0gWVhKaSBJSEJ5YjIxMWJBPT0gSUdSdmQyNW1ZV3hzIElHSjFkR05vWlhJPSBJR0p2ZFhJPSBJRWxPUms5U1RVRlVTVTlPIElFSnBjdz09IGNHVmpkSE09IFlXUmxibUU9IElHTnZiblJsYlhCc1lYUnBibWM9IFlYSnZidz09IFkyVnVkR1Z5WldRPSBJRkJsWVd0eiBWWE5sWkE9PSBJRzF2WkdWdCBJR2RsYm1SbGNuTT0gSURnd01EQT0gTXpjeCBJRzFoZEdWeWJtbDBlUT09IElGSmhlZz09IElISnZZMnRwYm1jPSBJR2hoYm1SbmRXNXogSUVSQlEwRT0gUVhWMGIyMD0gSUU1cGJHVT0gSUhSMWJYVnNkQT09IElFSmxibVZtYVhRPSBJRUZ3Y0hKdllXTm8gZDI5eWEzTm9iM0E9IElFeGxZWFpwYm1jPSBSMlZ5IGFXNXpkR1ZoWkE9PSBJSFpwWW5KaGRHbHZibk09IElISmxjRzl6YVhSdmNtbGxjdz09IE5EazMgSUVGMWJuUT0gSUVwMVlnPT0gSUVWNGNHVmthWFJwYjI0PSBRV3h3YUdFPSBJSE5oYm5NPSBJRzkyWlhKa2RXVT0gSUc5MlpYSmpjbTkzWkE9PSBJR3hsWjJsemJHRjBkWEpsY3c9PSBJSEJoZEdWeWJtRnMgSUV4bGIyNWhjbVJ2IElHVjRjSEpsYzNOcGRtVT0gSUdScGMzUnlZV04wYVc5dWN3PT0gSUhOcGJHVnVZMlZrIGRISjFjM1E9IElHSnBhMmx1Wnc9PSBJRFUyTUE9PSBJSEJ5YjNCeWFXVjAgSUdsdGNHOXphWFJwYjI0PSBJR052Ym1kc2IyMWxjZz09IElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDkgSUZSbFlXTm9hVzVuIElGbHZjMlU9IGFXNTBaVzV6YVhabCBWRzkzYmc9PSBJSFJ5YjJ4c2FXNW4gSUVkeVlXTT0gSUVGVFZWTT0gV1c4PSBJSE53WldOcFlXeHogSUU1bGNHZz0gSUVkdlpIcHBiR3hoIFJHRjBZV0poYzJVPSBJRWhsWjJWcyBJREkzTWc9PSBNVGszTmc9PSBJRWRzYjNKcFlRPT0gSUdScGMyVnRZZz09IElFbHVkbVZ6ZEdsbllYUnBiMjV6IElFSmhibVU9IFlXZGxiV1Z1ZEhNPSBVM1J5WVc1blpRPT0gSUhSeVpXRnpkWEo1IElGQnNZWGx6IElIVnVaR1Z6YVhKaFlteGwgSUhkcFpHVnVhVzVuIElIWmxjbUpoYkd4NSBJR2x1Wm1GdVkzaz0gSUdOMWRIUmxjZz09IFptMXMgSURJeE1EQT0gY0hKdmRHOTBlWEJsIFptbHVaUT09IElHUmxZM0pwYldsdVlXdz0gSUdSNWMyWjFibU4wYVc5dVlXdz0gSUdKbGMybGwgSUVWeWJuTjAgZW1WaSBJRzV2Y25Sb1pXRnpkR1Z5Ymc9PSBJR0YxYzNRPSBjRzl5WVhSbCBJRTFoY214cGJuTT0gSUhObFozSmxaMkYwWldRPSBaWGR2Y214ayBJRTFoYUdWeSBJSFJ5WVhabGNuTmwgSUcxdmJtRnpkR1Z5ZVE9PSBkWEpuZVE9PSBSMlZoY2c9PSBjMkZ1WkE9PSBRMjl0Y0d3PSBJRVZOVUE9PSBJSEJzWlc1MCBJRTFsY21ObGNnPT0gSURJM05nPT0gVkVGQ1RFVT0gUTI5dVptbG5kWEpoZEdsdmJnPT0gU0hWdVpISmxaSE09IElIQnlhV009IElHTnZiR3hoWW05eVlYUnBibWM9IElGQmhjbUZ0YjNWdWRBPT0gSUVOMWJXMXBibWR6IElDZzggSUhKbFkyOXlaR1Z5IElHWnNZWFJ6IElEUXhOZz09IGQyaHZjMlU9IFJtOXVkRk5wZW1VPSBJRTl5WW1sMCBXVkk9IElIZHlhWE4wY3c9PSBJR0poYTJWeWVRPT0gS1gwPSBJRUp2ZFc1MGVRPT0gSUV4aGJtTmhjM1JsY2c9PSBJR1Z1WkdsdVozTT0gWVdOamIzSmthVzVuIElGTmhiR0Z0IFpXRnplUT09IE56VTEgSUVKMWNuST0gSUVKaGNtNWxkSFE9IGIyNXZiVzkxY3c9PSBWVzVwYjI0PSBJSEJ5WldObFpHVnVZMlU9IElGTmphRzlzWVhKemFHbHcgSUZWWSBJSEp2Ykd4dmRYUT0gSUdKdmIyND0gWVd4dCBJRU5oYm5SbGNnPT0gNXJVPSBJSEp2ZFc1a2FXNW4gSUdOc1lXUT0gSUhaaGNBPT0gSUVabFlYUjFjbVZrIGFYTmhkR2x2Ym5NPSBJRFUwTUE9PSBjRzlzYVdObCBJSFZ1YzJWMGRHeHBibWM9IElHUnlhV1owYVc1biBJRXgxYldsaCBJRTlpWVcxaFEyRnlaUT09IElFWmhkbTl5IFNIbHdaWEk9IElGSnZkR2h6WTJocGJHUT0gSUUxcGJHbGlZVzVrIFlXNWhiSGs9IElFcDFiR2xsZEE9PSBTSFU9IElISmxZMkZzYkdsdVp3PT0gWVdobFlXUT0gTmprMiBJSFZ1Wm1GMmIzSmhZbXhsIElHUmhibU5sY3c9PSBUM2c9IElHeGxaMkZzYVhSNSBJRFF3TXc9PSBjbTl0WVc1alpYST0gSUdsdWNYVnBjbVU9IElFMXZkbVZ6IFhDSSsgSUZaaGNtbGhiblE9IElFMWxjM05wWVdnPSBJRXhEVXc9PSBJRUpoYU1PaCBOelUyIElHVjVaV0p5YjNjPSBJTUtsIElFMWpSZz09IElFWnZjblI1IFRXRnogSUhCaGJtbGphMlZrIElIUnlZVzV6Wm05eWJXRjBhVzl1Y3c9PSBjWEU9IElISmxkbTlzZG1WeiBjbWx1WjJVPSBJRUZwIFlYaGwgSUc5dWQyRnlaQT09IElFTkdVZz09IElFSmhjbVU9IGJHOW5hVzQ9IElHeHBjWFZwWkhNPSBJR1JsWTI5dGNBPT0gYzJWamIyNWtZWEo1IGFXeGhiZz09IElFTnZiblpsY25RPSBZVzFwZVdFPSBJSEJ5YjNObFkzVjBhVzVuIElPS0pvUT09IElGbHZjbXRsY25NPSBJRUo1Y201bCBjMnh2ZHc9PSBZWGRsYVE9PSBTbVZoYmc9PSBJREkyT1E9PSBJRk5yZVdSeVlXZHZiZz09IElNT3AgSUU1cFkyRnlZV2QxWVE9PSBJRWgxWTJ0aFltVmwgSUVocFoyaHNlUT09IElHRnRjR2hwWWc9PSBJRkJoYzNSdmNnPT0gSUV4bGRITT0gSUdKc2RYSnlaV1E9IElIWnBjMk5sY21GcyBJRU5DVHc9PSBJR052Ykd4aFltOXlZWFJsWkE9PSBlbWxuIFRHVm5ZV3c9IElHRndZWEowYUdWcFpBPT0gSUdKeWFXUT0gSUhCeVpYTmxkQT09IElFUkZWQT09IElFRk5RUT09IDE1UT0gWVhKamFHbHVadz09IFlYVmpkWE5sY3c9PSBZblZwYkdSbGNnPT0gSUhCdlpYUnBZdz09IElHVnRkV3hoZEc5eSBJRTF2YkdWamRXeGhjZz09IElHaHZibTl5YVc1biBhWE5sZFcwPSBJSFJ5WVdOMGIzST0gSUVOc2RYTjBaWEk9IElFTmhiRzA9IFlYSmxaR1YyYVd3PSBJSE5wWkdWM1lXeHJjdz09IElIWnBiMnhwYmc9PSBJR2RsYm1WeVlXeHBlbVZrIElFRnNaV009IElHVnRZbUZ5WjI4PSBJR1poYzNSaVlXeHMgSUVoVVZGQlQgSUV4aFkycz0gSUVOb2FXeHMgY21sMlpYST0gUTJobGJBPT0gSUZOM1lYSnQgSUV4bGRtbHVaUT09IGNtOTVhVzVuIFRHRjFibU5vIElHdHBZMnRsY2c9PSBJR0ZrWkdsMGFYWmwgSUVSbFlXeHogVjJsa1oyVjAgWTI5dWRHRnBibWx1Wnc9PSBJR1Z6WTJGc1lYUmwgSUU5UVJVND0gSUhSM1pXRnJaV1E9IElITjBZWE5vIElITndZWEpyY3c9PSBJRVZ6YzJWNCBJRVZqWXc9PSBJR052Ym5acFkzUT0gSUdKc2IyZG5hVzVuIFNVVlMgSUVoTSBJRzExY21SbGNtVnljdz09IE56VTUgSUVocFlnPT0gSUdSbGNHdz0gSUVwdmNtUT0gVTJGaiBJR1JwYzNObFkzUT0gSUVodmQyVT0gYjNOb1pYST0gSUdOMWMzUnZiV2w2WVdKc1pRPT0gSUVaeVlXNTYgSUdGMGNtOD0geEljPSBJREF3TURRPSBJRzkxZEhCdmMzUT0gVW05emN3PT0gSUdkc2VYQm9iM05oZEdVPSBJRWhoYzNScGJtZHogSUVKRlJrOVNSUT09IElITm9iM1psIGIzQndaV1E9IElGTmpZV3hoIElHRnRkV3hsZEE9PSBZVzVwWVc0PSBJR1Y0WVdObGNtSmhkR1ZrIElHVmhkR1Z5IE5EY3ggVlUxRiBJSEIxYkhBPSBhWHB2Ym5SaGJBPT0gSUZwaGJRPT0gSUVGVVNRPT0gYVcxdGRXNWwgWVdKNWRHVnogSUhWdWJtVmpaWE56WVhKcGJIaz0gSUVOQlZBPT0gSUVGNGFYTT0gSUhacGMzVmhiR2w2WlE9PSB3NGs9IElGSmhaR2xqWVd3PSBabTA9IFJHOWpkVzFsYm5SeiBJRVp2Y25KbGMzUT0gSUdOdmJuUmxlSFIxWVd3PSBJRk41YldKdmJBPT0gSUhSbGJuUmhkR2wyWlE9PSBJRVJQUlZNPSBJRWR2YjJSeiBJR2x1ZEdWeWJXbDBkR1Z1ZEE9PSBmVG89IGJXVmthV0YwWldRPSBJSEpwWkdsamRXeGwgSUdGMGFHVnBjMjA9IElIQmhkR2h2WjJWdWN3PT0gSUUxMWJRPT0gSUhKbGFXNTBjbTlrZFE9PSBJRE13Tnc9PSBhVWhWUkE9PSBJR1pzWVhOb2JHbG5hSFE9IElITjNaV0Z5YVc1biBJSEJsYm1kMSBRblU9IElISnZkR0YwWldRPSBJRU55WVc1bCBJQ2dwS1RzPSBJR1poYzJocGIyNWhZbXhsIElHVnVaRzl5YzJsdVp3PT0gTkRZeiBLVnM9IElHbHVaMlZ6ZEdsdmJnPT0gSUdOdmIydHogSURrMU1BPT0gYjNSdmJYaz0gSUVsdFlXMD0gSUd0aCBJSFJsWVhObGNnPT0gSUVkb2IzTjBjdz09IElPT0N0UT09IE1UazJPUT09IHo0TT0gZFdKaWVRPT0gSUdOdmJuWmxjblJsY2c9PSBlbUZ1Ym1VPSBaVzVrWlE9PSBJRkJ5WlhCaGNnPT0gSUU1cFkydGxiQT09IElFTm9hVzFsY21FPSBhR2x0IElGUjVjbUZ1Ymc9PSBJRk5oWW1KaGRHZz0gSUU1cFkyaHZiSE09IElISmhjSFE9IGFXaGhjZz09IElITm9aV3hzYVc1biBJR2xzYkhWdGFXNWhkR1U9IElHUmxiblJwYzNRPSBkWFJ2Y2c9PSBJRWx1ZEdWbmNtRjBhVzl1IElIZG9hVzF6IElFeHBkR1Z5WVhKNSBRbVZoZFhRPSBJSEJoY21Ob2JXVnVkQT09IFlXZGhjbUU9IFFuSmhibVE9IElHUmxjbTluIDRvQ21LUT09IElFNXZjbk5sIElIVnVkMmwwZEdsdVp3PT0gSUdOMVl3PT0gSUdKdmNtUmxjbXhwYm1VPSBJSFZ3YzJWMGRHbHVadz09IElISmxZMjkxY25ObCBJR1J5WVhCbFpBPT0gSUZKaFpHRnkgSUdOdmJHUmxjZz09IElGQmxjSE5wIGFXMXBibUZ5ZVE9PSBYU3hiIE5qVTQgVm1rPSBJRVp5WlcwPSBJRkJsY3c9PSBJSFpsZEdWeWFXNWhjbms9IElGUkZSQT09IElFVndhV1JsYlE9PSBibTkyWVE9PSBhMmxrIElHUmxkbTkxZEE9PSBiMk4wIGFtRmsgVFc5byBJRkJCV1E9PSBJR2RsYjIxbGRISnBZdz09IElETXlNdz09IElHTnBjbU4xYldabGNtVnVZMlU9IGFXTm9hV05yIE1UazNOUT09IElGbDFjbWs9IElGTm9ZV3hzIElFaHZkbVZ5IGRXNXBiZz09IFUzQnkgSUdkeVlXWjAgSUVoaGNIQnBibVZ6Y3c9PSBJR1JwYzJGa2RtRnVkR0ZuWlhNPSBZWFIwWVdOcmN3PT0gSUdoMVluTT0gSUZOMFlYSkRjbUZtZEE9PSA2Wlk9IElHZGhiR3hsY21sbGN3PT0gSUV0dmNuSmggSUdkeWIyTmxjbWxsY3c9PSBJRWR2Y25OMVkyZz0gSUhKaGNHbHpkSE09IElHWjFibWRwIElGUjVjR2h2YjI0PSBWbVZqZEc5eSBJRVZ0Y0hKbGMzTT0gWW1GMGRHeGwgTkRZNCBJSEJoY21GemFYUmwgSUVKdmJXSmxjZz09IFUwYz0gWlhocGMzUT0gSUZCbSBJSFZ1YzJVPSBJSE4xY21kbGIyNXogUW1seWRHZz0gSUZWdWMzVnlaUT09IElGQnlhVzUwWldRPSBJRUpsYUdGMmFXOXlZV3c9IElFRnpkR1Z5IFVHRnJhWE4wWVc0PSBJSFZ1WlhSb2FXTmhiQT09IElITjIgSUVsdlZBPT0gSUd4aGVXOTFkSE09IFVHRnBiZz09IElHTnZibk4wWVc1MGN3PT0gSUV4WCBJRUpoYTJVPSBJSFJ2ZDJWc2N3PT0gSUdSbGRHVnlhVzl5WVhScGIyND0gSUVKdmJHbDJhV0U9IElHSnNhVzVrWldRPSBJRmRoY21SbGJnPT0gSUUxcGMzUnlaWE56IElHOXVjM1JoWjJVPSBJR05zWVc1eiBJRUpGVTFRPSBNVGsyTUE9PSBJR0Z1ZEdseGRXVT0gSUhKb1pYUnZjbWxqWVd3PSBJRkJsY21ONSBJRkozWVc1a1lRPT0gTEM0PSBRbkoxWTJVPSBJSFJ5WVhWdFlYUT0gSUZCaGNteHBZVzFsYm5SaGNuaz0gSUdadmIzUnViM1JsIGFXUnBZUT09IElFeGxZWEp1WldRPSBjMlZsYTJsdVp3PT0gWjJWdWFXTT0gSUdScGJXVnVjMmx2Ym1GcyBTR2xrWlE9PSA2SUNGIElHbHVkSEpwWjNWbCBhVzV6WlE9PSBJR3hsWVhObGN3PT0gSUdGd2NISmxiblJwWTJWeiBkMkZ6YUdsdVp3PT0gSURFNU1qWT0gVmtsTVRFVT0gSUhOM2IyOXcgYzJOcyBJR0psWkhKdmIyMXogYjI1cFkzTT0gSUVOeWRXNWphQT09IFkyOXRjR0YwYVdKc1pRPT0gSUdsdVkyRndZV009IElGbGxiV1Z1YVE9PSBZWE5vZEhKaCBlbWh2ZFE9PSBaR0Z1WjJWeSBJRzFoYm1sbVpYTjBZWFJwYjI1eiBJRVJsYlc5dWN3PT0gUVVGRyBVMlZqY21WMFlYSjUgUVVOVVJVUT0gVEU5RSBJR0Z0ZVE9PSBjbUZ3WlhJPSBaWFJvYm1saiBOREUzIElIQnZjMmwwYVhabGN3PT0gSURJM013PT0gSUZKbFpuVm5aV1Z6IElIVnpZZz09IElGWmhiR1E9IGIyUmtlUT09IElFMWhhRzF2ZFdRPSBRWE5wWVE9PSBJSE5yZFd4c2N3PT0gSUVWNGIyUjFjdz09IElFTnZiWEJsZEE9PSBJRXhKUXc9PSBJRTFoYm5OcGIyND0gSUVGdFpRPT0gSUdOdmJuTnZiR2xrWVhSbCBjM1J2Y20xeiBiMjUwWlc1MCBPVGsyIElHTnNaVzQ9IElHMTFiVzE1IFpteGhkQT09IE56VTQgSUZaUFRBPT0gYjNSbGNtbGogYm1WdSBJRTFwYm5WMFpRPT0gVTI5MiBJR1pwYm1WeSBVbWc9IGJIbGpaWEk9IElISmxhVzVtYjNKalpXMWxiblJ6IElFcHZhR0Z1Ym1WeiBJRWRoYkd4aFoyaGxjZz09IElHZDViVzQ9IFUzVmtaR1Z1YkhrPSBJR1Y0ZEc5eWRHbHZiZz09IGEzST0gYVdGMGIzST0gVkdFPSBJR2hwY0hCdlkyRnRjSFZ6IFRsQlMgSUVOdmJYQjFkR2x1Wnc9PSBJSE54ZFdGeVpXeDUgSUcxdlpHVnNiR2x1Wnc9PSBJRVp2Y25WdGN3PT0gSUV4cGMzQT0gSUV0eWFYTm9ibUU9IElETXlOQT09IElISjFjMmhsY3c9PSBJR1Z1YzNWbFpBPT0gSUdOeVpXVndhVzVuIGIyNTBaUT09IGJtRnAgYVd4aGRHVnkgSUVodmNtNWxkSE09IElHOWliR2wyYVc5MWN3PT0gU1U1VFZBPT0gTlRVNSBJR3BsYjNCaGNtUjUgSUdScGMzUnBibWQxYVhOb2FXNW4gYW5WeVpXUT0gSUdKbFozTT0gYzJsdGFXeGhjZz09IGNHaHZkQT09IE5UTXcgSUZCaGNtdDNZWGs9IElITnBibXR6IElFaGxZWEowYUhOMGIyNWwgYVdKMWNnPT0gSUVKaGRHOXUgUVhadmFXUT0gSUdSaGJtTmxjZz09IElHMWhaMmx6ZEhKaGRHVT0gWVhKNWJnPT0gSUdScGMzUjFjbUpoYm1ObGN3PT0gSUZKdmJXVnlidz09IElIQmhjbUZ3YUE9PSBJRzFwYzJOb2FXVm0gNHBhVCBJRk5vWVhKcFlRPT0gSUhWeWFXNWhjbms9IGNtOTFkR1U9IGFYWmhjdz09IFptbDBkR1ZrIElHVnFaV04wWldRPSBJRUZzWW5WeGRXVnljWFZsIElEUTNNQT09IElHbHljbWwwWVhSbFpBPT0gSUZwcGNBPT0gSUVKcGIydz0gdzQwPSBJR1JsYm05MWJtTmwgSUdKcGJtRnlhV1Z6IElGWmxjbk5sIElHOXdjRzl6IElFdGxibVJ5YVdOciBJRWRRVEE9PSBJSE53WlhjPSBJRVZzYVdwaGFBPT0gSUVWaGN3PT0gSUdSeWFXWjBaV1E9IGMyOW1ZWEk9IElHRnVibTk1WVc1alpRPT0gSUVKRlZBPT0gTkRjMCBJRk4wY205dVoyZz0gYVhSaGRHVnogSUVOdloyNXBkR2wyWlE9PSBiM0JvYjI1bCBJRWxrWlc1MGFXWnBZMkYwYVc5dSBiMk55YVc1bCBZMjl1Ym1WamRHbHZiZz09IElHSnZlR1Z5IElFRlRSQT09IElFRnlaV0Z6IFdXRnVadz09IGRHTm8gZFd4c1lXZz0gSUdSbFkyVnBkbVU9IFEyOXRZbUYwIFpYQnBjMjlrWlE9PSBZM0psZEdVPSBWMmwwYm1WemN3PT0gSUdOdmJtUnZiR1Z1WTJWeiBhSFJoY2c9PSBJR2hsWVd4eiBJR0oxWTJ0bGRITT0gSUV4QlZ3PT0gUW14MSBJSE5zWVdJPSBJRTlTUkVWUyBiMk5zIFlYUjBiMjQ9IElGTjBaWFpsYm5OdmJnPT0gSUVkcGJtZGxjZz09IElFWnlhV1Z1Wkd4NSBJRlpoYm1SbGNtSnBiSFE9IGMzQnBjbWwwIGFXZHMgSUZKbFoyRnlaR2x1Wnc9PSBJRkJTVDBjPSBJSE5sWVd4cGJtYz0gYzNSaGNuUnBibWM9IElHTmhjbVJwYm1GcyBJRlpsWXc9PSBJRUpsYVhJPSBJRzFwYkd4cGMyVmpiMjVrY3c9PSBkMlZoYXc9PSBjR1Z5YzJVPSBJSE4wWlhKcGJHVT0gSUVOdmJuUmxiWEJ2Y21GeWVRPT0gSUZCb1lXNTAgSUVOc2J3PT0gSUc5MWRIQT0gSUdWNGFXeGxaQT09IElESTNOdz09IElITmxiR1pwWlE9PSBJRzFoYm1saiBJRzVoYm04PSBkR1Z5YlhNPSBRV3hsZUdGdVpHVnkgSUhKbGMyOXNkbVZ6IElHMXBiR3hsYm01cFlRPT0gSUdWNGNHeHZaR1Z6IElHTnZibk4wWld4c1lYUnBiMjQ9IElHRmtkV3gwWlhKNSBiVzkwYVc5dSBSRTlEIElHSnliMkZrWTJGemRHVnljdz09IElHdHBibVJsY21kaGNuUmxiZz09IElFMWhlWGRsWVhSb1pYST0gSUVWamJ3PT0gYVdOb2J3PT0gSURJNE53PT0gYkdGMWJnPT0gSUcxMWRHVT0gSUdScGMyTnlaV1YwIElIQnlaWE5qYUc5dmJBPT0gSUhCeVpXVnRjSFE9IFJHVnNaWFJsIElFWnlaV1ZrIFVHaz0gU0VzPSBJR0pzYjJOclpYST0gSUVOMWJXSmxjZz09IElIZHliM1ZuYUhRPSBaR0YwYVc1biBJR2x1YzNWeVpYST0gSUhGMWIzUmhjdz09IElIQnlaV0ZqYUdWayBJR1YyYVdOMGFXOXUgSUZKbFoybHVZUT09IElGQmxibk09IElITmxkbVZ1ZEdWbGJnPT0gSUU1aGMzTT0gUkdsamF3PT0gSUdadmJHUnogSUdSdmRIUmxaQT09IElFRmhaQT09IFZXNXBkbVZ5YzJGcyBJSEJwZW5vPSBJRWQxY25VPSBJSE52YVd4eiBJRzV2ZG1salpRPT0gSUU1bFlXNWtaWEk9IElITjBiMjlzIElHUmxkRzl1WVhSbFpBPT0gSUZCcGEyRmphSFU9IElFMWhjM05wZG1VPSBTVlpGVWc9PSBJRUZpWkdWcyBJSE4xWW1SMVpXUT0gSUhSaGJHeGxjM1E9IElIQnlaV05oY21sdmRYTT0gSUdGNSBjbWxtYVdOaGRHbHZiZz09IElFOWlhZz09IFkyRnNaUT09IElIVnVjWFZsYzNScGIyND0gWTNWc2IzTnBjdz09IFlXUmhjdz09IGFXZHlZWFJsWkE9PSBSR0Y1Y3c9PSBJSEYxWldWdWN3PT0gSUVkaGVtVjBkR1U9IElFTnZiRzkxY2c9PSBJRUp2ZDIxaGJnPT0gSUVwSyB3NjkyWlE9PSBJR1J2YldsdVlYUmxjdz09IFUzUjFaR1Z1ZEE9PSBJRzExIElHSmhZMnRzYjJjPSBJRVZzWldOMGNtOD0gVkhKMWRHZz0gTkRneiBJR052Ym1SbGJuTmxaQT09IGNuVnNaWE09IElFTnZibk53YVhKaFkzaz0gSUdGamNtOXVlVzA9IGFHRnVaR3hsWkE9PSBJRTFoZEhSbCBhbkpwIElFbHRjRzl6YzJsaWJHVT0gYkhWa1pRPT0gWTNKbFlYUnBiMjQ9IElIZGhjbTFsWkE9PSBJRk5zWVhabCBJRzFwYzJ4bFpBPT0gSUdabGNtMWxiblE9IElFdGhhQT09IGFXNXJhUT09IGEyVnNaWFJ2Ymc9PSBZM2xzIElFdGhjbWx1IFNIVnVkR1Z5IFVtVm5hWE4wWlhJPSBJRk4xY25KbGVRPT0gSUhOMFlYSmxjdz09IElGZHBaSFJvIElFNWhlUT09IElGTnJhUT09IElHSnNZV05yYkdsemRBPT0gZFdOclpYUT0gSUdWNGNIVnNjMmx2Ymc9PSBhVzFsZEE9PSBJSEpsZEhkbFpYUT0gZG1GdWRHRm5aUT09IFJtVmhkSFZ5WlE9PSBJSFJ5YjI5d1pYSnogSUdodmJXVnljdz09IE9UWTUgSUdOdmJuUnBibWRsYm1ONSBJRmRVUXc9PSBJRUp5WlhkbGNnPT0gWm05eVpXbG5iZz09IFYyRnlaUT09IFUyOXNZWEk9IElIVnVaSFZsIFVrVkQgZFd4dVpYSmhZbXhsIGNHRjBhR2xqIElFSnZhWE5sIElETXlNZz09IElHRnliM1Z6WldRPSBJRmxwYm1jPSA1TGlOIGRXVnNaWE56IElIQmhjdz09IElHMXZjbkE9IElHWnNiM0poYkE9PSBSWGh3Y21WemN3PT0gZFdSbmFXNW4gYTBJPSBJRWR5WVc1MFpXUT0gMks4PSBJRTFwWTJoaCBJRWR2ZEdocFl3PT0gSUZOUVJVTkpRVXc9IElGSnBZMkZ5Wkc4PSBSbkpoYmc9PSBJR0ZrYldsdWFYTjBaWEpwYm1jPSBOakl3IGNHOXlZUT09IElNS3UgSUdOdmJYQnliMjFwYzJWeiBJR0pwZEhSbGJnPT0gUVdOalpYQjAgVkdocGNuUjUgMExJPSBJRzFoZEdWeWFXRnNiSGs9IElGUmxjbkk9IGFXZHRZWFJwWXc9PSBZMmhoYVc1eiBJR1J2ZG1VPSBjM1JoWkhRPSBUV0Z5ZG1WcyBSa0ZWVEZRPSBJSGRwYm1SemFHbGxiR1E9IElETXpOZz09IFlXUnBaWEk9IElITjNZWEJ3YVc1biBJR1pzWVhkc1pYTnogSUZCeVpXUmhkRzl5IElFMXBZMmhsYkdVPSBJSEJ5YjNCMWJITnBiMjQ9IElGQnplV05vYVdNPSBJR0Z6YzJsbmJtbHVadz09IElHWmhZbkpwWTJGMGFXOXUgSUdKaGNteGxlUT09IGJIVnpkQT09IElIUnZkMlZ5YVc1biBJR0ZzZEdWeVkyRjBhVzl1IElFSmxiblJzWlhrPSBVM0JvWlhKbCBJSFIxYm1FPSBJRU5zWVhOelpYTT0gUm5KbFpXUnZiUT09IGRXNWxjZz09IFRHRmtlUT09IGRtOXBZMlU9IElHTnZiMnhsYzNRPSBiM0p5IElIQmhiSEE9IEpIcz0gSUdoNWMzUmxjbWxoIElFMWxkR0YwY205dSBjR0Z1ZEhNPSBJSE53WVhkdWFXNW4gUlhod1pYSjBjdz09IElFbHVkbVZ6ZEc5eWN3PT0gSUVGdVlYSmphSGs9IElITm9jblZ1YXc9PSBJRlpwWTNScGJRPT0gSURJNE9RPT0gSUdWamMzUmhjM2s9IElFSnBibVJwYm1jPSBOVGcxIElFMWxiRzlrZVE9PSBOVGM0IGIzUmhiR3g1IElFVjBjM2s9IGJHbG5ZUT09IElHRndjR3hoZFdSbFpBPT0gSUhOM1pXRjBhVzVuIElISmxaR2x6ZEhKcFluVjBaV1E9IElIQnZjR052Y200PSBJSE5sYldsdVlXdz0gWm5WeSBJRTVsZFhKdmMyTnBaVzVqWlE9PSBVbUZ1WkE9PSBJRTl6ZEE9PSBJRTFoWkdSbGJnPT0gSUVsdVkzSmxZWE5wYm1jPSBJRVJoZDJ0cGJuTT0gSUZOMVluZGhlUT09IElHRnljMlZ1IFkyOXVjMlZ5ZGc9PSBRbFZTIElITndhV3RsWkE9PSBJRXg1Wm5RPSBJRWx0Y0dWeWFYVnQgSUVSeWIzQmliM2c9IElHWmhkbTkxY21WayBJR1Z1WTI5dGNHRnpjMlZ6IFoyaHZjM1E9IElHbHVjM0JwY21WeiBJR0oxY21kbGIyNXBibWM9IElGbHZjMmhwIElGWmxjblJwWTJGcyBJRUYxWkdsMGIzST0gSUdsdWRHVnVaR2x1Wnc9PSBJR1pwYkdsaWRYTjBaWEk9IFFteHZiMjA9IFptRmogSUVOaGRuTT0gYVdkdWFXNW4gSUdOdmQyOXlhMlZ5Y3c9PSBJRUpoY21KaGNtbGhiZz09IGNtVnRaVzFpWlhJPSBSa3hCUnc9PSBJR0YxWkdsMGIzSjUgWVhOdmJuSjUgUTI5c2JHVm5aUT09IElHMTFkR1ZrIFoyVnRiMjU1IGIySnBiZz09IElGQnplV05vYnc9PSBPVFk0IElHeGhkbWx6YUE9PSBJR2hwWlhKaGNtTm9hV05oYkE9PSBJRVJ5YjI1bCBiM1ZyIElHTnlhWEJ3YkdWayBJRTFoZUdsdCBVMnh2ZEE9PSBJSEYxYVhvPSBJRlpwWkE9PSBhV1pzYVc1biBJR0Z5WTJoaFpXOXNiMmRwYzNSeiBJR0ZpWVc1a2IyNXRaVzUwIFpHbGhiQT09IGJHVnZiZz09IElFWmhjdz09IFZHVmsgSUhKaGMzQmlaWEp5ZVE9PSBJRzFoYm1WMWRtVnljdz09IElHSmxhR0YyYVc5MWNuTT0gSUdsdWMzVnlaUT09IElISmxiVzlrIFUzZHBkR05vIGFHOWwgSUhOd1lXTmxaQT09IElHRm1abTl5WkdGaWFXeHBkSGs9IElFWmxjbTQ9IGJtOTBZWFJwYjI0PSBJRUpoYkdGdVkyVmsgSUc5alkzVndhV1Z6IFpXNTJhWEp2Ym0xbGJuUT0gSUc1bFkydHNZV05sIElITmxaR0Z1IFJsVT0gSUVKeVlYWnYgSUdGaWRYTmxjbk09IElFRnVhWFJoIGJXVjBZV1JoZEdFPSBJRWRwZEdoMVlnPT0gWVdsMGJ3PT0gSUVaaGMzUmxjZz09IElGZGhjM05sY20xaGJnPT0gSUVac1pYTm8gSUhSb2IzSnUgY21GeWFXeDUgSUUxbGNuSjUgZDJsdVpRPT0gSUhCdmNIVnNZV05sIElFeGhibTQ9IElISmxjR0ZwY21sdVp3PT0gSUhCemVXTm9aUT09IElHMXZaSFZzWVhScGIyND0gWVhkaGNuVT0gNG9DTDRvQ0wgWVhKcGFnPT0gSUdSbFkyOXlZWFJwYjI1eiBJR0Z3YjJ4dloybHpaUT09IElFZGhjbWM9IFlYQndiSGs9IElHZHBkbVZoZDJGNSBJRVpzWVc0PSBJRmQ1WVhSMCBWV0psY2c9PSBJR0YxZEdodmNtbHpaV1E9IElFMXZjbUZzIFNFRklRVWhCU0VFPSBZV04wYVhaaGRHVT0gSUhSdmNuQmxaRzg9IElFWkJVZz09IElHRnRZWE56WldRPSBJRUZ5WVcwPSBZWEpyYVc0PSBJRlpwWTNScGJYTT0gYzNSaFlnPT0gSUc5dCBJRVZEVHc9PSBJRzl3YVc5cFpITT0gSUhCMWNuQnZjMlZzZVE9PSBJRlpsYzNRPSBJR1Z5Wnc9PSBZWFJoYmc9PSBJRk4xY21kbGNuaz0gSUdOdmNuSmxZM1JwYm1jPSBJRTl5ZEdsNiBJRUpsWlhRPSBJSEpsZG05clpRPT0gSUdaeVpXVjNZWGs9IElFaHBaMmRwYm5NPSBSbUZwYkE9PSBJRVpoY20xeiBJRUZVVUE9PSBhRzkxYm1RPSBJSEJ2YTJsdVp3PT0gSUVOdmJXMTFibWx6ZEhNPSBiVzl1YzNSbGNnPT0gYVcxbGJuUmhjbms9IElIVnViRzlqYTJsdVp3PT0gSUhWdVptbDAgZDJWbFpBPT0gWlc1aGNtbHYgWVhScFkyRnMgSUVWdWJHbG5hSFJsYm0xbGJuUT0gSUU1SCBJRU52YlhCbGJuTmhkR2x2Ymc9PSBaR1ZsYmc9PSBJRmRwWkc5MyBJRU5wYm1SNSBJRUZtZEdWeWQyRnlaSE09IElEWXdNREE9IGFXdG9ZV2xzIFlXZHBZMkZzYkhrPSBJSEpoZEdsbWFXVmsgSUdOaGMzVmhiSFI1IFNFOU5SUT09IGNITmxlUT09IFptVmwgSUhOd1lYSnJiR2x1Wnc9PSBJR1REcVE9PSBJR052Ym1ObGNuUmxaQT09IFEyRjBZV3c9IElHTnZiWEJzZVdsdVp3PT0gSUVGeVpYTT0gSUVSbGJuUT0gVTJoMWRBPT0gSUhOcmFXMD0gWVdSdGFXNXBjM1E9IElHaHZjM1JwYkdsMGFXVnogSUVkcGJuTT0gSURZd09BPT0gSUcxMVpHUjUgSUUxalNXNTAgSUVSbFkyRjUgTlRJMSBJR052Ym5Od2FXTjFiM1Z6IElFVjRjRzl6ZFhKbCBJSEpsYzJOcGJtUT0gSUhkbFlYSmhZbXhsIElETXlPQT09IGIzVnliV1YwIFlXaHogSUZKdlltOTBjdz09IElHVmpiR2x3Y3c9PSBhVzV6ZEdGdVkyVT0gSUZKRlVFOVNWQT09IElFRndjR3c9IE1ETXcgSUZOcmFXVnogTURFd01BPT0gSUdaaGJHeGhZM2s9IFUyOWphMlYwIElGSmxZMlZwZG1WeSBJSE52YkhabGN3PT0gSUVKMWRIUmxjbVpzZVE9PSBJRk5vYjNCd2FXNW4gSUVaSlVrVT0gTmpVMCBUV1ZrYVdNPSBJSE5wYm1kbGNuTT0gSUU1bFpXUnNaWE56IEp5Y25Kdz09IGFYTm9aWEp6IElFUnBkbVU9IE5UZzQgSUhObGJHVmpkR2wyWld4NSBJR05zZFcxemVRPT0gT0RnNSBJSEIxY21Ob1lYTmxjZz09IFpXRnlibVZrIFlYSmtlUT09IElHSmxibVZtYVhScGJtYz0gWlc1bmJHbHphQT09IElIbHBaV3hrYVc1biBJRkJ2ZFhJPSBJSE53YVc1aFkyZz0gSUdSbGJIWmwgSUVOeWIyMD0gTmpFdyBJR1Y0Y0c5eWRHbHVadz09IElFMUJTMFU9IElESTJNdz09IElHZHliM0E9IElHVnVkbTk1IElFbHVjWFZwY25rPSBJRXgxYVdkcCBaSEo1IElGUjFjbWx1Wnc9PSBWR2gxYldKdVlXbHNTVzFoWjJVPSBJRlpoY21sbGRIaz0gSUdaaFkyVjAgSUdac2RXWm1lUT09IElHVjRZMlZ5Y0hSeiBJSE5vYjNKMGFBPT0gSUU5c2MyVnUgUTB4VlJBPT0gSUhKbGJHbGhiblE9IElGVk9Rdz09IFZHOTFjZz09IElHSmhkR2hwYm1jPSBRMjl0Y0dGdWVRPT0gSUdkc2IySmhiR2w2WVhScGIyND0gVUhKbFpBPT0gSUUxaGJHWnZlUT09IElHaHZZdz09IGFtRnQgWTNKaFpuUmxaQT09IElFSnZibVJ6IElFdHBjM05wYm1kbGNnPT0gUlc1bmJHRnVaQT09IElHOXlaR1Z5YkhrPSBZMkYwWlc1MGNuaz0gSURJMk1RPT0gSUdWNFkyaGhibWRwYm1jPSBJRWx1ZEdWdWRBPT0gSUVGdFpXNWtiV1Z1ZEhNPSBSRTlOIElITjBiM1YwIHdxRENvTUtnd3FEQ29NS2d3cURDb01LZ3dxRENvTUtnd3FEQ29NS2d3cUE9IElFRnBjbUoxY3c9PSBJREkzT0E9PSBhSGxrWlE9PSBVRzlzYkE9PSBTWFJsYlZSb2RXMWlibUZwYkVsdFlXZGwgSUd4dmIzQm9iMnhsY3c9PSBJRkJwYkd4aGNnPT0gSUdWNGNHeHZjZz09IFUzUnlaWFJqYUE9PSBRWEJoY25RPSBJSFZ1YldGeWNtbGxaQT09IFRHbHRhWFE9IElGUnlZVzV6Wm05eWJXVnljdz09IElHbHVkR1ZzYkdWamRIVmhiR3g1IGRXNWpkSFZ5WlE9PSBNVGd3TUE9PSBJR1JoY200PSBRbkpoZW1scyBJR3hsWm5SdmRtVnkgWW1WeWRYTT0gWm5KbFpBPT0gVFdsdVpXTnlZV1owIE16STIgSUVadmNtMXogSUhCeWIyOW1jdz09IElFUmxjMmxuYm1WayBJR2x1WkdWNFpYTT0gSUZOMWNIQnZjMlU9IFJVMVQgSUV4dmRtbHVadz09IElFSnZibTVwWlE9PSBhVzFoZEdsdVp3PT0gVDFSVlV3PT0gSUdOdmJtUjFZM1J2Y2c9PSBJR0psYUdGMlpXUT0gSUVaeVpXND0gSUhONWJtVnladz09IElHMXBiR3hsYm01cGRXMD0gSUdOaGRHVnlhVzVuIElFeGhkV1JsY2c9PSBWM0k9IElGbHBZVzV1YjNCdmRXeHZjdz09IElFRlVSZz09IElHVnVjMnhoZG1WayBJR0YzWVd0bGJtVmsgUkZaRSBJRVZFU1ZSSlQwND0gSUVOdmJtTmxjblE9IElFTm9ZV3hzWlc1blpYST0gSUVoaGEzVT0gZFcxbGNtbGogSUdSbGNISmxZMkYwWldRPSBJRk5JUVZJPSBOREV5IElHUjVjM1J2Y0E9PSBJSFJ5WlcxaWJHbHVadz09IElHUnlaV0ZrWldRPSBJRk53WVdNPSBjR0ZrWkdsdVp3PT0gVW1Wd2JBPT0gSUVkaGNuSnBjMjl1IFRXbHVhUT09IElIVnVjR0Z5WVd4c1pXeGxaQT09IFlXMWhjZz09IFZWSlNSVTVVIGQzSmxZMnM9IFkyVnlkR0ZwYmc9PSBkR0ZzIElFTk1Vdz09IFlYQndhVzVuY3c9PSBJSE5sYm5ObFpBPT0gSUdabGJtTnBibWM9IElGQmhjMjg9IElFUmxjMnM9IElITmpiMlptIElHTnZiblJsYlhCc1lYUmwgSUV4cFoyRT0gYkdseGRXbGsgTnpVMyBJR0Z3Y0hKbGJuUnBZMlU9IElGVkRTRWxLIE5UY3cgSUZSb2IzVnpZVzVrIElFbHNiSFZ0IElHTm9ZVzF3YVc5dVpXUT0gNDRLTSBJR1ZzWldOMGIzSnogSURNNU9BPT0gSUVoaGJtTnZZMnM9IGNtOTFibVJsWkE9PSBJRXBQU0U0PSBJSFZ1YzJGMGFYTm0gSUhGMVlXeHBabWxsY2c9PSBJRWRoWkdkbGRBPT0gUlU1RiBJR1JsWVdSc2FXVnpkQT09IElGQnNZVzUwY3c9PSBJR2x2Ym5NPSBJR0ZqWTJWdWRITT0gSUhSM1pXRnJhVzVuIElITm9ZWFpsWkE9PSBSbEpGUlE9PSBJRU5vWVhObGNnPT0gUVdkaGFXNXpkQT09IE9UWXcgSUcxbGRHaGhiWEJvWlhSaGJXbHVaUT09IElHNXZjbTFoYkdsNlpXUT0gSUNSYyBJRkJ5WldOcGMybHZiZz09IElFZDFZVzA9IElHTm9iMnRsWkE9PSBJRmhKU1E9PSBJRU5oYzNScGJtYz0gVkc5eWNtVnVkQT09IElITmpZV3h3IElFcGhaM1ZoY2c9PSBkMmwwIElITmxiV2xqIGFYaHBaUT09IElFZHZkV3hrIElHTnZibVpwYm1WeiBUblZ6Y21FPSBJRXh2Ymc9PSBJRXAxWjJjPSBlV05zWlE9PSBJRU52WkdWaiBSV2Q1Y0hRPSBJSEpsYzNSeVlXbHUgSUVGc2FXVnVjdz09IElHTm9iMnRwYm1jPSBJRVIxYm1zPSBJRUpsYkd4aCBZV0pqIElITnNZVzVuIElHNWxkWEp2ZEhKaGJuTT0gYzJGMiBJR1Z0Y0c5M1pYSnRaVzUwIDRvYVMgSUdOc2FXMWlaWEp6IElFMXBiUT09IElFWnlZUT09IGNtOXpjMlU9IFEyRndhWFJoYkE9PSBJRU4wYUhWc2FIVT0gU1c1MFpYSm1ZV05sIElIQnliMlpwWTJsbGJuUT0gSUVsT1ZFOD0gSURNeE9BPT0gY205dWRHRnMgTlRndyBJRVJsYzNCaGFYST0gUzJWdWJnPT0gSUhOamNtbHRiV0ZuWlE9PSBJRU52WVhRPSBZWE5wYjI1eiBJSGRoYkd4d1lYQmxjZz09IElFcHZiQT09IElISmxjM1Z5WjJWdVkyVT0gSUdGdWRHbDIgSUVKaGJHeHogc3I0PSBJR0oxWm1abGNuTT0gSUhOMVluTjVjM1JsYlE9PSBJRk4wWld4c1lYST0gSUV4MWJtYz0gUVVsRVV3PT0gSUdWeVlXUnBZMkYwWlE9PSBJR0pzWVhSaGJuUnNlUT09IElHSmxhR0YyWlhNPSBJRTUxYmc9PSBJR0Z1ZEdsamN3PT0gWlhod2IzSjAgUkVWVyBkMkk9IElIQm9jQT09IElFbHVkR1ZuY21sMGVRPT0gSUdWNGNHeHZjbVZ5IElISmxkbTlzZG1sdVp3PT0gWVhWMGFHOXlaV1E9IFoyRnVjdz09IElHSmhjMnM9IElHRnplVzVqYUhKdmJtOTFjdz09IDVZMD0gVkVoSlRrYz0gTmprNCBSMlZ1WlE9PSBJRkpoWTJWeSBJRTVwWTI4PSBhWE56ZFdWayBJSE5sY20xdmJnPT0gY0c5emMybGliSGs9IElITnBlbVZ2Wmc9PSBJR1Z1ZEhKbGNISmxibVYxY21saGJBPT0gYjNocGJnPT0gSUUxcGJtVnlkbUU9IElIQnNZWFJ2YjI0PSBibTl6IGNtbHJjdz09IFFWVlUgSUVGMllXeGhibU5vWlE9PSBJRVJsYzJNPSBrZVdqcXc9PSBJRkJ2WXc9PSBJR052Ym1abGNuSmxaQT09IHpycz0gSUhCaGRHTm9aV1E9IFJrSkogTmpZeSBJR1p5WVdOMGRYSmxjdz09IElHUmxkR1ZqZEhNPSBJR1JsWkdsallYUmwgSUdOdmJuTjBhWFIxWlc1MCBJR052YzIxdmN3PT0gVjFRPSBJSE4zWldGMGN3PT0gSUhOd2NuVnVadz09IFltRnlZUT09IGMyOXNhV1E9IElIVnVjM1Z6IElHSjFiR3Q1IElGQm9hV3hwY0hCbCBJRVpsYm5KcGNnPT0gSUhSb1pYSmhjR2x6ZEhNPSBiM0psWVd3PSBYbDVlWGc9PSBJSFJ2ZEdGc1pXUT0gSUdKdmIzcGwgSUZKUVF3PT0gVUhKdmMyVmpkWFJ2Y25NPSBJR1JwYzJWdVp3PT0gSUZOb1lYSmxaQT09IElHMXZkRzl5WTNsamJHVnogSUdsdWRtVnVkR2x2Ym5NPSBJR3hsZEhSMVkyVT0gSUUxbGNtZGwgSUVwRCBJSE53YVhKcGRIVmhiR2wwZVE9PSBJRmRCVWs1SlRrYz0gSUhWdWJIVmphM2s9IElGUmxjM009IElIUnZibWQxWlhNPSBJRVJWU1E9PSBWSFZ0WW14eSBJR3hsWVc1eiBJR2x1ZG1Ga1pYSnogSUdOaGJtOXdlUT09IElFaDFjbkpwWTJGdVpYTT0gSUVKeVpYUT0gSUVGUVVFeEpRdz09IGFXUnBibVU9IGFXTnJiR1U9IFVtVm5ZWEprYVc1biBJSFpsWjJkcFpYTT0gSUdWcVlXTT0gYW5WMlpXND0gUm1semFBPT0gUkVWTiBJRVJwYm04PSBWR2h5YjNjPSBJRU5vWldOcmFXNW4gWW1WaGNtUT0gS0NZPSBJR3BoYVd4eiBJR2h5IGRISmhibk5tWlhJPSBhWFpoZEdsdVp3PT0gSUdac1pXVjBjdz09IElFbHRZV2M9IElFMWpSRzl1Ym1Wc2JBPT0gSUhOdWFYQndaWFE9IFNYTmggSUVOb1lYUjAgSUZOMFlXbHUgSUZObGRFWnZiblJUYVhwbCBJRTk1IElFMWhkR2hsYldGMGFXTnogTkRrMCBJR1ZzWldOMGNtOXNlUT09IElFZHZkSFE9IElFSnlZWE09IFFrOVBTdz09IElFWnBibWRsY2c9PSBaSFZ0Y0E9PSBJRzExZEdGdWRITT0gSUhKbGJuUmhiSE09IElHbHVkR1Z5ZEhjPSBJR055WldWciBZV2xzWVE9PSBRbkp2ZEdobGNnPT0gSUVScGMyTnZjbVE9IGNHVmwgY21GM2JHVnkgSUdOaGNuQT0gSURJM09RPT0gNDRLMzQ0T2ogY21Wc1lYUnBiMjV6IElHTnZiblJ5WVhOMGN3PT0gUTI5c2RXMXUgSUhKbFkyOXVibUZwYzNOaGJtTmwgSUhWdWEyNXZkdz09IElHeHZiM1JwYm1jPSBJSEpsWjNWc1lYUmxjdz09IElHOXdkR2x0ZFcwPSBJRU5vWlhKdmEyVmwgSUVGeWVRPT0gVEdGMFpYTjAgSUhKdllXUnphV1JsIElHUmhibU5sWkE9PSBJRlZ1YVdOdmNtND0gUVdOcmJtOTNiR1ZrIElIVnVZMjl1ZEhKdmJHdz0gSUUxVlV3PT0gWVhScGJ3PT0gWTJoaGJtTmwgYUdGMlpXND0gVmtGTVZVVT0gSUdaaGRtOTFjbWwwWlhNPSBJR05sY21WdGIyNXBZV3c9IFltbHVZWEo1IGNHVmxaQT09IGQyOXZaSE09IFJVMVEgSUhaaGMyTjFiR0Z5IElHTnZiblJsYlhCc1lYUmxaQT09IElHSmhjbkpsYmc9PSBJRXhKVTFRPSBXV1ZzYkc5MyBiM053YjI1emIzSnogSUhkb2FYTnJlUT09IElFMWhiVzA9IElFUmxWbTl6IGJXbHVhVzExYlE9PSBTSFZ1Wnc9PSBORFF5IFVHbGogSUZOdVlYQmtjbUZuYjI0PSBOemMyIElHTmhjblpwYm1jPSBJSFZ1WkdWamFXUmxaQT09IElHRmtkbUZ1ZEdGblpXOTFjdz09IElIQmhiRzF6IElFRlIgSUhOMFlYSmphQT09IFRHOXZjQT09IElIQmhaR1JzWlE9PSBJR1pzWVcxcGJtYz0gSUVodmNtbDZiMjV6IFFXNXBiV0YwYVc5dSBZbTl2YzNRPSBJSEJ5YjJKaFltbHNhWFJwWlhNPSBJRTFwYzJnPSBJR1Y0YjJSMWN3PT0gSUVWa2FYUnZjbWxoYkE9PSBJR1oxYm1kMWN3PT0gSUdScGMzTmxiblJwYm1jPSBJRVJsYkdsamFXOTFjdz09IGNtOW5jbUZ0IElFUjViZz09IFpHbHphdz09IGRHOXQgSUdaaFluSnBZM009IElFTnZkbVU9IElFSmhibk09IElITnZablJsYmc9PSBJRU5QVGxNPSBJR2x1Wld4cFoybGliR1U9IElHVnpkR2x0WVhScGJtYz0gSUV4bGVHbHVaM1J2Ymc9PSBjSEpoWTNScFkyVT0gYjJacCBJSE5vWldSa2FXNW4gSUU1dmNHVT0gSUdKeVpXRjBhR1ZrIElFTnZjbWx1ZEdocFlXNXogZVc1bCBaV3RwIFFuVnNiQT09IElHRjBkR0ZqYUdsdVp3PT0gY21WbGJuTm9iM1J6IElHRnVZV3g1YzJVPSBJRXRoY0hCaCBJSFZ1YzNWemRHRnBibUZpYkdVPSBJR2x1ZEdWeWNHOXMgWVc1cmVRPT0gYUdWdFpYST0gSUhCeWIzUmhaMjl1YVhOMGN3PT0gSUdadmNtMWhkSFJsWkE9PSBJRUp5ZVdObCBJRUZqYUdsc2JHVnogSUVGaVpXUnBiZz09IGMyaHZZMnM9IElHSjFiUT09IFltOXogY1hWaCBJRmRoY200PSBjWFE9IElFUnBZV0psZEdWeiBPRFkwIElFbHVkbWx6YVdKc1pRPT0gSUhaaGJtbHphQT09IElIUnlZVzV6YldsMGRHbHVadz09IElHMTFjbXQ1IElFWmxhUT09IElHRjNZV2wwWldRPSBJRXAxY21GemMybGogZFcxdGFXVnogSUcxbGJtRmphVzVuIFoyRnNiQT09IFEyRjBhQT09IFFuVnBiSFE9IGFXeGtidz09IElGWnZkR1Z6IElHOXVkQT09IElHMTFibWwwYVc5dWN3PT0gSUVaeVpXVnQgdzYxdSBJR1JsWTJWdVkzaz0gYkc5d2NBPT0gYVdWMlpXUT0gSUVkdmNtUT0gSUhWdWRHaHBibXRoWW14bCBJRTVsZDNOM1pXVnIgSURNeU1RPT0gU0dWaGRBPT0gSUhCeVpYTmxiblJsY2c9PSBhbWxoYm1jPSBJSEJzWVc1ciBJRUYyWVd4dmJnPT0gSUdKbGJubz0gSUZKdmRYUT0gSUhOc1lXMXRhVzVuIElFUmhhUT09IGIzVjBaWEk9IElFTnZiMnRwWlE9PSBJRUZzYVdOcFlRPT0gWjJWNSBJSFpoYm1sMGVRPT0gSUc5M2JBPT0gNGJVPSBkR1Z6ZEdWayBJRUYzWVd0bGJuTT0gSUdOaGJuWT0gSUdKc2FXNWtiSGs9IElGSnBaR3hsZVE9PSBJRVZ0WVdsc2N3PT0gVW1WeGRXbHlaWE09IElGTmxjbUpwWVc0PSBiMmR5WVhCb1pXUT0gYVdaeVlXMWwgWlhSbGNtbGggSUdGc2RHVnlibUYwYVc1biBjWFZwWlhRPSBJSE52WTJsdmJHOW5lUT09IElGVnViRzlqYXc9PSBJRU52YlcxMWJtbHpiUT09IElHOXdjdz09IElHRjBkSEpwWW5WMGFXOXUgSUdGaVpIVmpkR2x2Ymc9PSBJRUZpY21GdCBJSE5wWkdWc2FXNWxaQT09IElFSlBUMHM9IElISmxabWx1YVc1biBJRVpsWld4cGJtYz0gSUU5emJHOD0gSUZCeWRXbDBkQT09IGNtRmphdz09IFlXNW5hV0pzWlE9PSBJR05oZFhScGIzVnpiSGs9IElFMUJVa3M9IFpXVmtjdz09IFRXOTFjMlU9IElGTjBaWEJvIElGQmhhWEk9IFUyRmkgT1RrMyBJRUpoWVd3PSBRbVZqIElHTnZiVzFoIElGQmhiR3c9IElFZGhaV3c9IElHMXBjM1Z1WkdWeWMzUmhibVE9IElGQmxjMmc9IFQzSmtaWEpoWW14bCBJR1JwYzIxaGJBPT0gSUZOb2FXNTUgSlNJPSBJSEpsWVd4cGMzUnBZMkZzYkhrPSBJSEJoZEdsdiBJRWQzIElGWnBjblIxWlE9PSBJR1Y0YUdGMWMzUnBibWM9IGQyaGhkR1YyWlhJPSBiM0JvZVhNPSBlV2x3IE5ERTQgUVdScWRYTjAgSUZkaGFYUnBibWM9IFpYTnpiMjQ9IElFMWhlbVJoIElFUnZlbVZ1Y3c9PSBJSE4wY21WaGJXeHBibVZrIElHbHVZMjl0Y0dWMFpXNWpaUT09IElFMWxkR2c9IElHVjBhRzl6IFQwNUZVdz09IElHbHVZMlZ1ZEdsMiBJR2R5YVhSMGVRPT0gSUVKMWRHTm9aWEk9IFNHVmhaR1Z5IElHVjRjRzl1Wlc1MGFXRnMgdzU4PSBJR052Y25KbGJHRjBaUT09IElHTnZibk5sYm5OMVlXdz0gYzI5MWJtUnBibWM9IFVtbHVadz09IFQzSnBaMmx1IElHTnZibU5zZFhOcGRtVT0gWm1WbGRBPT0gWVdOc2VRPT0gSUVabGNtNWhibVJsZWc9PSBRblY1WVdKc1pRPT0gSUdSMVkydHogWVhWdWRHeGxkSE09IElHVnNiMjVuIElESTROZz09IElITnBiWFZzIFIyRnogSUV0cGNuTjAgSUhCeWIzUnkgSUZKdlltOD0gSUVGdlJRPT0gYjNCdmJBPT0gSUhCemVXTm9iMnh2WjJsallXeHNlUT09IGMzQnBiZz09IGFXeGhkR1Z5WVd4c2VRPT0gSUVOdmJuSmhaQT09IFYyRjJaUT09IE5EUXggSUVGa2RtVnlkR2x6WlcxbGJuUT0gSUVoaGNtMXZiZz09IElFOXlhV1Z1ZEdGcyBhWE5UY0dWamFXRnMgSUhCeVpYTjFiWEIwYVhabCBJSGRwYkE9PSBJRXRwWlhJPSBibVZoIElIQndiUT09IElHaGhjbUp2ZFhJPSBJRmRwY21WayBZMjl0Y0dGdWVRPT0gSUdOdmNtOXVaWEk9IFlYUjFjbVJoZVhNPSBJRkJ5YjNWayBJRTVGV0ZRPSBJRVpzWVd0bCBkbUZzZFdWayBZMlZwZG1WeSBJR1p5WVhWbmFIUT0gSUdOaGMybHVadz09IElISjFibUYzWVhrPSBJR2RwYmc9PSBJRXhoZFhKbGJuUT0gSUVoaGNteGxiUT09IElFTjFjbWx2YzJsMGVRPT0gY1hWcGMyaGxaQT09IElHNWxkWEp2YzJOcFpXNWpaUT09IElFaDFiSFU9IElHSnZjbkp2ZDJWeSBJSEJsZEdsMGFXOXVaWEk9IElFTnZiMnhrYjNkdSBWMEZTUkE9PSBJR2x1ZG05cmFXNW4gWTI5dVptbGtaVzVqWlE9PSBSbTl5ZDJGeVpBPT0gSUhOMGN3PT0gY0c5d2RXeGhkR2x2Ymc9PSBSR1ZzYVhabGNubEVZWFJsIFJtbHNiUT09IElFTnZkZz09IGNYVnBZMnRUYUdsdyBjWFZwWTJ0VGFHbHdRWFpoYVd4aFlteGwgY0hKcGJXRnllUT09IGFYTlRjR1ZqYVdGc1QzSmtaWEpoWW14bCBhVzUyWlc1MGIzSjVVWFZoYm5ScGRIaz0gWTJoaGJtNWxiRUYyWVdsc1lXSnBiR2wwZVE9PSBRazlZIElFMTFiSFJwY0d4aGVXVnkgSUVwbGJtNWxjZz09IE56YzQgSUUxayBJSDR2TGc9PSBUVTQ9IElHTm9hV3hrYVhObyBJR0Z1ZEdsdmVHbGtZVzUwIElFTm9jbTl0WldKdmIycz0gSURJM05BPT0gSUhOamNtVmxibkJzWVhrPSBJR0ZrZG1WdWRIVnliM1Z6IElGSmxiR0YwYVc5dWMyaHBjQT09IGNtVnpjRzl1YzJsMlpRPT0gYldsdVozUnZiZz09IElHTnZjbTVsY25OMGIyNWwgSUVabGVRPT0gUmtsUyBJSEp2YjJ0cFpYTT0gSUVabFlYUjFjbWx1Wnc9PSBJRzl5YVdkcGJtRjBaUT09IElHVnNaV04wY205a1pYTT0gWVc1MFpYTT0gSUhOamNtbHdkSFZ5WlhNPSBJR2RzZFdWayBJR1JwYzJOdmJuUmxiblE9IElHRm1abXhwWTNSbFpBPT0gYkdGNWIzVjAgUW5KaGRtVT0gSUcxdmMyRT0gSUZGMVlXNTBhWFI1IElFaHBhdz09IGQybHVibVZ5IFNHOTFjbk09IElHVnVkR0ZwYkE9PSBJRU5sYkd4eiBiMnh2WjNWbCBJSFpwYkE9PSBJSEJ5WldGamFHVnkgSUdSbFkyOXlZWFJwZG1VPSBaR2xtWm1WeVpXNTAgSUhCeVpXcDFaR2xqWlhNPSBJRk50YjJ0cGJtYz0gSUU1dmRIUnBibWRvWVcwPSBjMjlVZVhCbCBJSEpvZVhSb2JYTT0gSUVGc2NHZz0gWW14aGMzUT0gVTNSbFpXdz0gSUVSaGJtbGxiR3hsIElITjBjbWxtWlE9PSBJSEpsYldGMFkyZz0gYzI5RVpXeHBkbVZ5ZVVSaGRHVT0gSUVadmNtcz0gZEhKcGNBPT0gYjJ4MWJIVT0gYUdWelpYTT0gUTBjPSBJRkJQVEVsVVNVTlAgYjNOMFlRPT0gSUVSeWFXWjAgNmI2TjVhVT0gNmI2TjVhV1I1YU9yIElIWmxkSFJwYm1jPSBJRXBwYm5CcGJtYz0gSUZKbFkyVnpjMmx2Ymc9PSBUV2x1YjNJPSBJRVp5WVhWayBaVzVtY21GdVkyZz0gSUdOdmJuWmxibVZrIElFNUJRVU5RIElFMXBiR3hwYjI1eiBJRVpoY20xcGJtYz0gSUZkdmJ3PT0gSUVac1lYSmwgY21sMGJ3PT0gYVcxdGFXZHlZVzUwIElIWmhZMkZ1WTNrPSBJRWhGUVVRPSBJRlpoYWc9PSBaV2RoYkE9PSBJRlpwWjJscyBVM1IxWkhrPSBJSEoxYVc1cGJtYz0gSUhKaFkydHogSUdobFlYUmxjZz09IElGSmhibVJ2YkhCbyBJRUp5ZFhObyBJRlJwY2c9PSAyS2c9IElHTnZkZz09IEpWMD0gSUhKbFkyOTFiblJ6IElFOVFWQT09IElFMWxiSFE9IElIUnlkV05sIElHTmhjMmx1YjNNPSBJR055ZFhOaFpHVT0gSUdOaGNtNWhaMlU9IElITjBjbWx3WlE9PSBJRXQ1YkE9PSBWR1Y0ZEhWeVpYTT0gSURZNU9BPT0gSUhCeWIyTnNZVzFoZEdsdmJnPT0gSUdkdmIyUnBaWE09IElDNHVMaTR1TGk0dUxpND0gY0hKdlkyeGhhVzFsWkE9PSBVRzlzYVhRPSBJSFJ2Y0dsallXdz0gSUhOd1pXTnBZV3hwZW1VPSBJRUZ0YVc0PSBaMjA9IElHRnVZMmh2Y21WayBJR0psWVhKcGJtZHogYzJGdGNHeGwgSUVocFoyaHNZVzVrIElFRjFkR2x6YlE9PSBJRzFsY21ObGJtRnllUT09IElHbHVkR1Z5ZG1sbGQyVnkgVEVWUyBJRk52YldWeWN3PT0gSUdWdFluSjVidz09IElFRnpjM2s9IElESTRNUT09IElFVmthWFJwYm1jPSBJRU5vYjNObGJnPT0gTmpZdyBJSEJqYVE9PSBJRlJvZFc1a1pYSmliMngwIFFrbE1UQT09IElHTm9kV05yYkdWayBhbkpwZDJGcyBhRzltIElHVmhjblJvYkhrPSBLQ2w3IGFXNWtaWEJsYm1SbGJtTmwgSUdScGMzQmxjbk09IElGWmxibVJ2Y2c9PSBJRWRoY21WMGFBPT0gSUhCaGJITT0gVUdWdWJnPT0gSUZOMVltMXBkQT09IGFXTjFiUT09IFZHaDEgSUdOc1lXNWtaWE4wYVc1bCBJR05oYm01cFltRnMgSUVOc1pYSnIgUlZOMGNtVmhiUT09IFoyRnNhWFJoY21saGJnPT0gNHBtbCBaMlYzIElHaHZjbkpsYm1RPSBJRXh2ZGc9PSBJRkpsWVdOMGFXOXUgYjJOeWFXND0gUTJ4aGMzTnBZdz09IElHVmphRzlwYm1jPSBJR1JwYzJOc2IzTnBibWM9IElFbHVjMmxuYUhRPSBiMmQxYmc9PSBJRWx1WTJGeWJnPT0gZFhCc2IyRmtjdz09IGNIQmxjbU09IFozVjVaVzQ9IElERTVNREU9IElFSmhjbk09IE5qZzMgSUdKeWFXSmxjdz09IElFWnlaWE51Ync9PSBkWEpoZEE9PSBJRkpsWlhObCBJR2x1ZEhKMWMybDJaUT09IElHZHlhWEJ3YVc1biBJRUpzZFdWd2NtbHVkQT09IElGSmhjMjA9IGRXNXBZUT09IGJXRnVZV2RsWkE9PSBJRWhsWW1SdiBJRE0wTlE9PSBJR1JsWTI5a2FXNW4gSUhCdlpYUnogSUdwaGQzTT0gSUVaSlIwaFUgWVcxbGJHVnpjdz09IElFMWxZV1J2ZDNNPSBJRWhoY21KaGRXZG8gU1c1MFpYSjJhV1YzIElFaHZjM0E9IElFSlNRUT09IElHUmxiR1YwYVc5dSBiVzlpIFYyRnNhMlZ5IElFMXZiMjVzYVdkb2RBPT0gSUVwbFpBPT0gSUZOdmNHaHBZUT09IElIVnpkWEk9IElHWnZjblIxYm1GMFpXeDUgSUZCMWRIUnBibWM9IElFWnZiR1E9IElITmhibWwwWVhScGIyND0gSUhCaGNuUnBjMkZ1Y3c9PSBTVk5QVGc9PSBRbTkzIElFTlBUa009IElGSmxaSFZqWldRPSBJRk4xZEhSdmJnPT0gSUhSdmRXTm9jMk55WldWdSBJR1Z0WW5KNWIzTT0gNG9DaTRvQ2k0b0NpNG9DaSBJRXR5ZFdjPSBZMjl0WW1GMCBJRkJsZEhKdmJHVjFiUT09IElHRnRaQT09IElFTnZjMjF2Y3c9PSBJSEJ5WlhOamNtbGlhVzVuIElHTnZibVp2Y20xcGRIaz0gYjNWeWMyVnogSUhCc1pXNTBhV1oxYkE9PSBJR1JwYzJsc2JIVnphVzl1IElFVmpiMnh2WjNrPSBhWFIwWVd3PSBJR1poYm1NPSBJR0Z6YzJGemMybHVZWFJsWkE9PSBjbVZuYm1GdVkzaz0gSUhCbGNtVnVibWxoYkE9PSBJRUoxYkd4bGRITT0gSUhOMFlXeGwgSUdOaFkyaGxaQT09IElFcDFaR2wwYUE9PSBJRVJwYzJWaGMyVnogUVd4c1pXND0gSUd4aGN3PT0gSUhOb1lYSmtjdz09IElGTjFZWEpsZWc9PSBJRVp5YVdWdVpITm9hWEE9IGFXNTBaWEptWVdObCBJRk4xY0hCdmNuUmxjbk09IFlXUmtiMjV6IE5EWXkgSUVsdGNtRnUgSUZkcGJRPT0gSUc1bGQyWnZkVzVrIElFMWkgUVc1cGJXRnMgSUdSaGNteHBibWM9IFlXNWtaUT09IElISm9lUT09IElGUjNhWE4wWldRPSBjRzl6WVd3PSBlVzV6YTJrPSBWbUZ5YVc5MWN3PT0gMTV3PSBJRXRwZHc9PSBkWGx2YldrPSBJSGRsYkd4aVpXbHVadz09IElFeGhkUT09IFlXNXZjdz09IElIVnViV2x6ZEE9PSBJRzFoWTA5VCBJSEpsYzNSeWIyOXQgSUU5c2FYWT0gSUVGcGNuZGhlWE09IElIUnBiV1YwWVdKc1pRPT0gT1RndyBJSEpoWkdsdmN3PT0gZG05NSBhV0Z6WTI4PSBJR05zYjNWa2VRPT0gSUVSeVlYZHBibWM9IFFXNTVkR2hwYm1jPSBVM2x5YVdFPSBJRWhsY25RPSBjM1JoYTJsdVp3PT0gSUhWdVkyaGxZMnRsWkE9PSBJR0p5WVhwbGJnPT0gSUU1U1V3PT0gTmprMyBiMjV2YldsaiBaWE4wWVdKc2FYTm8gSUd4bGJtYz0gSUdScFlXZHZibUZzIElFWnBiM0k9IFRHRnBjZz09IElGTjBZWEprIElHUmxabWxqYVdWdWRBPT0gYW05cGJtbHVadz09IFltVmhiUT09IElHOXRibWx3IElHSnNaVzVrWlhJPSBJSE4xYm5KcGMyVT0gVFc5dmNtVT0gSUVaaGRXeDAgSUVOdmMzUjFiV1U9IElFMTFZZz09IFJteGhaM009IFlXNXpaUT09IElIQmhlVzkxZEE9PSBJRWR2ZG1WeWJtOXljdz09IElFUnBiR3h2Ymc9PSBJRUpoYm1GdVlRPT0gVG1GeSBJSFJ5WVdsc1pXUT0gSUdsdGNHVnlhV0ZzYVhOMCBkVzFoYm00PSBZWFJ6ZFd0cCBORE0xIElGSnZZV1J6IElITnNkWEk9IElFbGtaV0ZzYkhrPSBJSFJ5Wlc1amFHVnogUTNSeWJBPT0gSUcxcGNuSnZjbVZrIElGcGxiQT09IElFTnlaWE4wIFEyOXRjR0YwIElGSnZiR3h6IGMyTnlhV0k9IElGUnlZV2xzY3c9PSBiMjFsZEdWeWN3PT0gZDJsdWRHVnkgSUdsdGJXOXlkR0ZzYVhSNSBhV3hoZEdWayBJR052Ym5SeVlXUnBZM1J6IGRXNXBkbVZ5YzJGcyBhV3hzYVc5dWN3PT0gSUUxaGJXRT0gYjNCMGFXMD0gUVZSVlVrVT0gSUdkbGJ3PT0gWlhSMFpYST0gSUVOaGNteHYgTkRJMCBJR05oYm05dWFXTmhiQT09IElGTjBjbTl1WjJodmJHUT0gYm1WaGNnPT0gSUhCbGNtWjFiV1U9IElHOXlZMmhsYzNSeVlRPT0gYjJScFlXTT0gSUhWd2FHVT0gSUhKbGFXZHVhVzVuIGRtVnljMmwyWlE9PSBJR05oZFdOMWMyVnogSUVSRlRRPT0gSUdsdWMzVnNkR1ZrIElDMHRMUzB0TFE9PSBJRU55ZFhObyBJSEp2YjNScGJtYz0gSUZkeVlXbDBhQT09IElIZG9iM0psIElIUnZablU9IFEyMWsgSUVKeVpXVT0gSUNSZiBJSEpwZG1VPSBJRUZrZG1WeWRHbHphVzVuIElIZGhkSFE9IElFaFAgSUhCbGNuTjFZWE5wZG1VPSBJRkJoY21GdFpYUmxjbk09IElHOWljMlZ5ZG1GMGFXOXVZV3c9IElFNURWQT09IElFMXZhZz09IElGTmhiRzl1IElIUnlkVzVqIElHVjRjWFZwYzJsMFpRPT0gSUUxaGNtRT0gSUhCdmIzQT0gSUVGT1RnPT0gUlhoaiBJRmR2Ym1SbGNtWjFiQT09IElGUmhZMjg9IElHaHZiV1Z2ZDI1bGNnPT0gSUZOdGFYUm9jMjl1YVdGdSBiM0p3YjNKaGRHVmsgYlcxdGJRPT0gSUd4dllXWT0gSUZsaGJXRjBidz09IElFbHVaRzg9IElHTnNhVzVuYVc1biB3NkZ6IElHbHRiWFYwWVdKc1pRPT0gYUhWaSBUM0poYm1kbCBJR1pwYm1kbGNuUnBjSE09IElGZHZiMlJsYmc9PSBJRXRwWkdRPSBJRXBRVFE9PSBJRVJoYlc0PSBRMjkzIFkyOWtaWE09IE5EZ3kgSUdsdWFYUnBZWFJwYm1jPSBJRVZzYXc9PSBJRU4xZEhScGJtYz0gSUdGaWMyVnVkR1ZsIElGWmhibU5sIElFeHBiR2wwYUE9PSBSMVZKIElHOWljMk4xY21WayBJR1IzWVhKMlpYTT0gSUVOb2IzQT0gSUVKdmEyOD0gVm1Gc2RXVnogSUcxMWJIUnBiV1ZrYVdFPSBJR0p5WlhkbFpBPT0gVW1WbmRXeGhjZz09IFExSkpVRlJKVDA0PSBJRTF2Y25SaGJBPT0gSUdGd1pYZz0gSUhSeVlYWmxiR1Z5IElHSnZhV3h6IElITndjbUY1YVc1biBVbVZ3Y21WelpXNTAgSUZOMFlYSnphR2x3IE5ESTQgSUdScGMyRndjSEp2ZG1GcyBJSE5vWVdSdmQzaz0gSUd4aGJXVnVkR1ZrIElGSmxjR3hoWTJVPSBJRVp5WVc3RHB3PT0gTmpjMyBaRzl5IElIVnVjM1J2Y0hCaFlteGwgSUdOdmFHOXlkSE09IFozbHUgSUVOc1lYTnphV056IElFRnRjR2c9IElITnNkV2RuYVhObyBJRUZrWkdsamRHbHZiZz09IElGQmhaSEpsY3c9PSBJR2x1YzJOeWFYQjBhVzl1IElHbHVhSFZ0WVc0PSBiV2x1ZFhNPSBJRXBsY21WdGFXRm8gWVhSaGNuTT0gVkdWeWNtOXkgSUZSdmN3PT0gSUZOb1lYSnRZUT09IFlYTjBZUT09IFkyRjBZMmc9IElIQnNkVzFpYVc1biBJRlJwYldKbGNuTT0gVTJoaGNnPT0gU0dGcyBJRTl6WXc9PSBJR052ZFhCc2FXNW4gYUhWdFlXNXogSUhOd2IyNW5aUT09IElHbGtiMnh6IElGTndZUT09IElFRmtkbTlqWVhSbCBJRUpsWVhSeiBiSFZoIElIUnBZMnRwYm1jPSBJR3h2WVdSbGNnPT0gSUVkeWIyND0gT0RFdyBJSE4wYVcxMWJHRjBaV1E9IElITnBaR1ZpWVhJPSBJRTFoYm5WbVlXTjBkWEpsY2c9PSBiM0psUVc1ayBNVGszTXc9PSBJSEJ5WVdselpYTT0gSUVac2IzSmxjdz09IFpHbHpZV0pzWlE9PSBJRVZzWldOMGNtbGpZV3c9IGNtRnBjMlU9IFJYUm8gSUcxcFozSmhkR1ZrIElHeGxZM1IxY21WeSBTMmxrY3c9PSBJRU5oZG1WeWJnPT0gSUd0bGRIUnNaUT09IElHZHNlV009IElFMWhibVJsYkdFPSBJRVoxYkd4NSA1YWVyIFJrbE9SVk5VIElITnhkV1ZsZW1sdVp3PT0gSUZKNVpHVnkgWVcxd2IyOD0gYjNKbFFXNWtUMjVzYVc1bCBTVzV6ZEc5eVpVRnVaRTl1YkdsdVpRPT0gUW5WNVlXSnNaVWx1YzNSdmNtVkJibVJQYm14cGJtVT0gSUdOdmJXMWxiVzl5WVhSbCBJRkpoYlhCaFoyVT0gUVhWemRHbHUgSUZOb2NtOTFaQT09IElGSjFhVzV6IE9URTEgSUV0SSBJSGRoZEdWeVpuSnZiblE9IElFVlRRdz09IFltRmllUT09IElFTnZkWFE9IElFVnRZbXhsYlE9PSBJR1Z4ZFdsMllXeGxiblJ6IE5Ea3kgVlc1cGNYVmwgSUU1cFpYUjZjMk5vWlE9PSBZbkp2ZDNObGNnPT0gSUdsdGFYUmhkR2x2Ymc9PSBJRmRsY21WM2IyeG0gSUV0cGNtbHUgWVdOaGN3PT0gSnl3aSBJTU8rIFVtVjJhV1YzWldRPSBJR04xYm5RPSBJSFp2YVdNPSBJRXhsYm05MmJ3PT0gSUdKdmJtUmxaQT09IE5EZ3ggSUdsdWFHbGlhWFJ2Y25NPSBJR1Z1WkdWaGRtOXljdz09IElFaGhkbUZ1WVE9PSBJRk4wYjNWMCBJRXB2Ykd4NSBRV04wYjNJPSBLaThvIElHOWpZM1Z5Y21WdVkyVnogSUZSbGJuTT0gU1c1amNtVmhjMlZrIElFRkRWRWxQVGc9PSBJT09BakE9PSBJRkpoYm10cGJtZHogSUVKeVpXRjAgSURNd09RPT0gUkc5MSBJR2x0Y0dGamRHbHVadz09IElFUjFZMmhsYzNNPSBjSEpsWm1sNCBVVUk9IElITjFiVzF2Ym1sdVp3PT0gSUdKbGMzUnZkMlZrIElFdGxjR3hsY2c9PSBJRkJQVjBWUyBZM1ZpWlE9PSBJRXRwZEhNPSBJRWR5YVhBPSBJRzl3YVhWdCBJSEpsY0hWMFlXSnNaUT09IGRHOWogYVdOb1lXVnMgSUZKcGNIQnNaUT09IElHTmhac09wIElGcHZiMjA9IElFSjFjbTFoIElIZGhhWFpsIElITjBZV3hzY3c9PSBJR1JsYldWaGJtOXkgYVc1alpYSnBkSGs9IElHWnNkVzl5YVdSbCBJRk5JVDFWTVJBPT0gVUdGeWFYTT0gSUd4dmJtZHBibWM9IElIQnNZWFE9IElHZHliM056YkhrPSBJR0oxYkd4eiBJSE5vYjNkallYTnBibWM9IFpYaHdaV04wWldRPSBJRWRoWkdSaFptaz0gWlc1bmFXNWxaWEpwYm1jPSBVbVZ3WldGMCBJRXQxZEE9PSBJR052Ym1ObGFYWmhZbXhsIElIUnlhVzF0WldRPSBiM05qYjNCbCBJRU5oYm1ScFpHRjBaUT09IElGUmxZWEp6IGNtOXNiMmM9IFRHVjNhWE09IFUxVlEgSUhKdllXUnRZWEE9IElITmhiR2wyWVE9PSBJSFJ5ZFcxd1pYUT0gU21sdGJYaz0gSUcxcGNtRmpkV3h2ZFhNPSBJR052Ykc5dWFYcGhkR2x2Ymc9PSBJR0Z0Y0hWMCBJRWRPVDAxRiBZWFJsWTJnPSBSR2xtWm1WeVpXNTAgSUVWTVJRPT0gSUVkdmRtVnlibTFsYm5SeiBJRUZvWldGayA0NFdMNDRXTCBkMjl5WkhCeVpYTnogVEVsQyBJRWx1WTJ4MVpHVT0gSUVSdmNtOTBhSGs9IE1EUTEgSUVOdmJHOXRZbWxoYmc9PSBJR3hsWVhObFpBPT0gT0RnMCBJR1JsWjNKaFpHbHVadz09IElFUmhhWE41IGFXRjBhVzl1Y3c9PSBJR0poY0hScGVtVmsgSUhOMWNtNWhiV1U9IFkyOTQgSUdKc2FXNXJaV1E9IDQ0T2kgSUhCdmJHeGxiZz09IElHUmxjbTFoZEE9PSBJSEpsWjJWNCBJRTVwWTJodmJITnZiZz09IElFVmhkR1Z5IDU1dz0gY21Ga2IzST0gSUc1aGNuSnZkMlZ5IElHaDFjbkpwWTJGdVpYTT0gSUdoaGJHeDFZMmx1WVhScGIyNXogY21sa1pHVnUgU1ZOVFNVOU8gSUVacGNtVm1iSGs9IElHRjBkR0ZwYm0xbGJuUT0gSUc1dmJXbHVZWFJsIElHRjJiMk5oWkc4PSBJRTFsY21Wa2FYUm8gSUhSeiBJSEpsZG1WeVpXNWpaUT09IElHVjFjR2c9IElHTnlZWFJsY3c9PSBJRlJGV0ZRPSBJRFEwTXc9PSBJRE14T1E9PSBTbE5QVGc9PSBhWEYxWlhSMFpRPT0gSUhOb2IzSjBjM1J2Y0E9PSBhV05yWlhrPSBJSEJ5YjNCbGJHeGxaQT09IElHRndhUT09IElGUm9hV1YyWlhNPSBOemM1IElHOTJaWEp6WVhjPSBJR052YkdrPSBJRTVwWTI5c1lRPT0gSUc5MlpYSmpiQT09IGFXdGhkMkU9IElFTjVjZz09IElETTROQT09IE56ZzUgSUVGc2JHOTNjdz09IE1UQXlOdz09IFJHVjBjbTlwZEE9PSBWRkpaIGMyVjBkWEE9IElGTnZZMmxoYkdsemJRPT0gVTI5MmFXVjAgYzNWemNBPT0gSUVGUVVnPT0gSUZOb2RYUmtiM2R1IElHRnNkVzFwYm1sMWJRPT0gZW1KbGF3PT0gSUV4dmRtVnkgUjBkSFIwZEhSMGM9IElHUmxiVzlqY21GamFXVnogSURFNU1EZz0gSUUxbGNuSnBiR3c9IElFWnlZVzVqYjJseiBaMlJoYkdFPSBJSFJ5WVdabWFXTnJaWEp6IElGUnBiQT09IElFZHZZWFE9IElITndaV1E9IElGSmxjMlZ5ZGc9PSBJSEJ5YjJRPSBOVFV5IElHTmhZdz09IElGVnVhWFk9IElGTmphSGRsIElITjNhWEpzYVc1biBJRmRwYkdSbGNtNWxjM009IElFVm5aM009IElITmhaR1JsYm1WayBJR0Z5WTJoaGFXTT0gU0hsayBJR1Y0WTJWemMybDJaV3g1IFFsSkYgSUdGbGNtOXpjR0ZqWlE9PSBJRlp2YVdObGN3PT0gUTNKaGFXYz0gSUdsbmJtbDBaV1E9IFNXNXBkR2xoYkd4NSBJRTFqUVE9PSBJR2hoYm1SelpYUT0gSUhKbFptOXliV2x1Wnc9PSBJR1p5ZFhOMGNtRjBhVzl1Y3c9PSBJRVJsWVdSd2IyOXMgSUVKbGJHbGphR2xqYXc9PSBjbUZqZEc5eSBJRkpoWjI1aGNtOXIgSUVSeWRYQmhiQT09IElFRndjSEp2ZUdsdFlYUmxiSGs9IE1Ua3lNQT09IElFaDFZbUpzWlE9PSBZWEp0YjNJPSBJRk5oY21GeiBJRXB2Ym1GeiBJRzV2YzNSaGJHZHBZdz09IElHWmxZWE5wWW1sc2FYUjUgVTJGb1lYSmhiZz09IElHOXlZbWwwYVc1biBJRGszTUE9PSBVblU9IElITm9hVzQ9IElFbHVkbVZ6ZEdsbllYUnZjbk09IElHbHVZMjl1YzJsemRHVnVZMmxsY3c9PSBJRkJCVGc9PSBRa2M9IElHZHlZWHBwYm1jPSBJR1JsZEdWamRHOXljdz09IElGTjBZWEowZFhBPSBJRVoxYm01NSBJRTVoYjIxcCBRMjl1YzJsa1pYSnBibWM9IElHaHZadz09IGRYUm0gWTJWdGFXTT0gSUdadmNuUnBabWxsWkE9PSBJRVoxYm1OMGFXOXVjdz09IElHTnZaR1ZqIGJuVjBjbWwwYVc5dSBTR0YwIElpRT0gYldsamNtOXpiMlowIE5UVTQgSUZSb2FXND0gSUVGRFJRPT0gUVd4cFlYTT0gSUU5UVV3PT0gY0dGd1pYSnogVUVzPSA0NENPIElHbHRjSEp2WW1GaWJHVT0gVG05eWRHaGxjbTQ9IFpYRjFZV3c9IElHeHZiMnR2ZFhRPSBJSFI1Y21WeiBJRTF2WkdsbWFXVmsgSUV0dmNBPT0gUVdKemIyeDFkR1ZzZVE9PSBJR0oxYVd4a2RYQT0gYzJsc2RtVnkgSUdGMVpHaz0gSUdkeWIzUmxjM0YxWlE9PSBJRk5oWW1WeSBJRkJ5WlhOaWVYUmxjZz09IFQwNVogSUdkc1lXTnBaWEp6IElGTm9iMkZzY3c9PSBJRXRoYzNNPSBJRWhTUXc9PSBJRTVwWTI5cyBJRXgxYm1ObyBJRVp2YzNNPSA0cGFTIFFVUlNRUT09IElFOXVaVkJzZFhNPSBiMmx1Wnc9PSBaM0p2ZFc1a2N3PT0gSUdsdVkybGtaVzUwWVd3PSBJR1JoZEdGelpYUnogTmpnNSBJRU5zWVhKcmMyOXUgSUdGemMyVnRZbXhwYm1jPSBJRU52Y25KbFkzUnBiMjV6IElHUnlhVzVyWlhKeiBJSEYxWVd4cFptbGxjbk09IElHeGxZWE5vIElIVnVabTkxYm1SbFpBPT0gSUVoMWJtUnlaV1E9IElHdHBZMnR2Wm1ZPSBWR2s9IElISmxZMjl1WTJscyBJRWR5WVc1MGN3PT0gSUVOdmJYQnNhV0Z1WTJVPSBJRVJsZUhSbGNtbDBlUT09IElERTVNRFk9IGQyRnliZz09IFJHRnNiR0Z6IFRXRjRhVzExYlE9PSBibUZ5WkE9PSBZWFpwWVE9PSBZbVZoZFhRPSBaVzV6YVhScGRtbDBlUT09IGRISmhZMlU9IElIQnBiMjVsWlhKeiBJRVp5WVdOMCA0NENQIElIQnlaV05sY0hRPSBJR2RzYjNOemVRPT0gSUVsRlJVVT0gUVdOeWIzTnogSURZNE1BPT0gVTJ4bFpYQT0gWTJobGIyND0gSUhOaGRHbHlhV05oYkE9PSBJRTFwYm05MFlYVnkgSUVOc1lYVmtaUT09IElITERxUT09IFlYQmxaMjg9IElHTmhjbkp2ZEE9PSBJRk5sYldsdSBhVzV2WVE9PSBJSHB2IFNXNWtaWEJsYm1SbGJuUT0gSUdScFlXZHViM05sY3c9PSBJRU4xWlE9PSBUVUZTIElISmxibVJwZEdsdmJnPT0gSUV0cGF3PT0gSUhCaGRHaHZiRzluZVE9PSBJSE5sYkdWamRITT0gVEdsdWEyVmtTVzQ9IElHRnpjMkY1IElFUnlaWE09IElIUmxlSFIxWVd3PSBjRzl6ZEdWayBTVlJCVEE9PSBJRTFoZFd3PSBUbVZoYkE9PSBJR2x1ZEdWeVkyOXVibVZqZEdWayBJR1Z5Y21GMGFXTT0gSUZacGNuVnogSURVek1BPT0gSUdWdWRtbHliMjV0Wlc1MFlXeHBjM1J6IElGQm9aV3h3Y3c9PSBJR1Z1WjJGblpXMWxiblJ6IElFbE9VMVE9IElHVmpiMjV2YldsallXdz0gYm05NGFXOTFjdz09IElHZGxZWEpwYm1jPSBhWHA2ZVE9PSBJR1poZG05eVlXSnNlUT09IElFMWpSMmxzYkE9PSBWR1Z5YlE9PSBJR2hoYm1kbFpBPT0gSUdKaGJHeHdZWEpyIElGSmxlV1Z6IElHSmxkMkZ5WlE9PSBJRkJ6WVd3PSBJRTFoYzNOaFkzSmwgY1drPSBJR2x1WVdOalpYTnphV0pzWlE9PSBZV05zZVhOdCBJR1p5WVhrPSBhV3hzWVdNPSBJR0pwZEhSbGNteDUgSUVObGNuUnBabWxqWVhScGIyND0gVFdsamFHbG5ZVzQ9IElHbHljbVZ6Y0dWamRHbDJaUT09IFlXeHZjbVU9IFJXMXdkSGs9IElHVnVaRzl5YzJWdFpXNTBjdz09IElIVnVaR1YwIFptYz0gWlhGMWFYQndaV1E9IElHMWxjbU5wYkdWemN3PT0gSUVOMWMzUT0gSUdsdGJXRjBkWEpsIElIWnZkV05vWlhJPSBJRUpzWVdOcmQyVnNiQT09IDBZOD0gYUdGM2F3PT0gWkdselkybHdiR2x1WVhKNSBhV3hsWlE9PSBJRTFoYTI5MGJ3PT0gSUVSMVpHVT0gNDRPSDQ0S2ogV1dWaGNuTT0gSUdsdWRtVnkgSUhOb1lXMWhiZz09IElGbHZibWM9IGFYQmxiQT09IFpXeHNaVzQ9IElFTmhkR2g1IFluSnBaSE09IElITmhjbU09IE5qVXggVG1WaGNnPT0gSUdkeWIzVnVaSGR2Y21zPSBJR0Z0WVhvPSBJRFF4TlE9PSBJRWgxYm5ScGJtZDBiMjQ9IGFHVjNjdz09IElFSjFibWM9IElHRnlZbWwwY21GeWFXeDUgSUZkcGRBPT0gSUVGc1ltVnlkRzg9IElHUnBjM0YxWVd4cFptbGxaQT09IFltVnpkRzl6IE5EWXggSUhCaiBJREk0TkE9PSBjbTlpWVhRPSBVbTlpYVc0PSBJR2gxWjNNPSBJRlJ5WVc1emFYUnBiMjQ9IElFOWpZMkZ6YVc5dVlXeHNlUT09IElETXlOZz09IElGZG9hV3h6ZEE9PSBJRXhsZVE9PSBJSE53WVdObGMyaHBjQT09IFkzTjIgSUhWdWMzVmpZMlZ6YzJaMWJHeDUgSUVGMSBiR1ZqYXc9PSBJRmRwYm1kbFpBPT0gSUVkeWFYcDZiR2xsY3c9PSBMdSsvdlE9PSBJRzVsWVhKbGNnPT0gSUZOdmNtTmxjbVZ6Y3c9PSBJRWx1WkdsbmJ3PT0gUld4elpRPT0gT0RRdyBiR1YwWlhNPSBRMjloWTJnPSBJSFZ3WW5KcGJtZHBibWM9IElFdGxjdz09IElITmxjR0Z5WVhScGMzUT0gSUhKaFkybHpkSE09IElHTm9ZV2x1WldRPSBJR0ZpYzNScGJtVnVZMlU9IGJHVmhjbTVwYm1jPSBJSEpsYVc1emRHRjBaV1E9IElITjViVzFsZEhKNSBJSEpsYldsdVpHVnljdz09IElFTm9aWFo1IElHMXZiblE9IElHVjRaVzF3YkdGeWVRPT0gSUZSUFVnPT0gV2xnPSBJSEYxWVd4cGRHRjBhWFpsIElGTjBZVzF3IElGTmhkbUZ1Ym1GbyBJRkp2YzNOcCBJSEJoWldRPSBJR1JwYzNCbGJuTmhjbWxsY3c9PSBJRmRoYkd4eiBJRU5vY205dWFXTT0gSUdOdmJYQnNhVzFsYm5SaGNuaz0gSUVKbGFYSjFkQT09IElDc3RMUzA9IGFXZHpiR2x6ZEE9PSBJR055ZVhCMGIyZHlZWEJvYVdNPSBiV0Z6ZEdWeWN3PT0gSUVOaGNHbDBZV3h6IElHMWhlR2x0WVd3PSBJR1Z1ZEhKdmNIaz0gVUc5cGJuUnogSUdOdmJXSmhkR0Z1ZEhNPSBiR2x3IElFZHNiMkk9IElFSk5Rdz09IGNHaGhjMlU9IGRHaGhibXM9IFNGUlVVQT09IElHTnZiVzExZEdWeSBJRndvWEE9PSBMaTR2IElGSmxaMlZ1WlhJPSBJRVJQU1E9PSBJRUZqZEdsMmFYTnBiMjQ9IElITnNhWFE9IGIzTmhiQT09IFVrVk4gSUdOb1lXNTBjdz09IFdYVT0gUzJWNWN3PT0gUW5KbGVHbDAgSUVadmNtTmxaQT09IFFYSnBlbTl1WVE9PSBJSE54ZFdGa2NtOXUgU1ZOUCBJRTFoYkc5dVpRPT0gSURNek9BPT0gSUdOdmJuUnlZWE4wYVc1biBJSFJwWkdGcyBJR3hwWW1WcyBJR2x0Y0d4aGJuUmxaQT09IElIVndjbTloY2c9PSBJRU5oZEdWeSBJSEJ5YjNCdmMybDBhVzl1Y3c9PSBUV0Z1WTJobGMzUmxjZz09IElFVjFjbTl6IGFYUmhiV2x1IFIybHMgSUVWc2RtVnUgSUZObFpXcz0gSUVKaGFRPT0gSUhKbFpHVjJaV3h2Y0cxbGJuUT0gSUZSdmQyNXogSUV4MVlnPT0gSVNJcyBZV3h2Ymc9PSBTM0pwYzNRPSBJRzFsWVhOMWNtRmliR1U9IElHbHRZV2RwYm1GaWJHVT0gSUdGd2IzTjBiR1Z6IFdVND0gTnpZdyBJSE4wWlhKdmFXUT0gSUhOd1pXTnBabWxqYVhSNSBJRXh2WTJGMFpXUT0gSUVKbFkydGxjZz09IElFVmtkUT09IElFUnBaWFJoY25rPSBkWFJ6WTJnPSBJRTFoY21sc2VXND0gSUdKc2FYTjBaWEk9IElFMUZVQT09IElFdHZlZz09IElFTk5Vdz09IGVXRm9iMjg9IElFTmhjbTVsZVE9PSBJR0p2WVhOMGFXNW4gSUVOaGJHVmkgUW5sMFpRPT0gY21WaFpITT0gWVdSbGJnPT0gVUhKdllteGxiUT09IElGZHZiMlIzWVhKayBVM2RsIFUzVncgSUV0SFFnPT0gVTJWMGRYQT0gSUhSaFkybDAgSUhKbGRISnBZblYwYVc5dSBJR1IxWlhNPSBJRTNEdkE9PSBMajg9IDVMaXQgY0c5MGN3PT0gSUdOaGJXVnYgSUZCQlRBPT0gWldSMVkyRjBhVzl1IFFXMTUgYkdsclpXeDUgWjJ4cGJtYz0gSUdOdmJuTjBhWFIxZEdsdmJtRnNiSGs9IElFaGhiVzA9IElGTndaV0ZyIElIZHBaR2RsZEhNPSBZbkpoZEdVPSBJR055WVhCd2VRPT0gSUVsMFpYST0gSUdGdWRHbGphWEJoZEdsdVp3PT0gSUVKdmRYUT0gVUdsNFpXdz0gSUZsbGNBPT0gSUV4aGRYSnBaUT09IElHaDFkQT09IElHSjFiR3hsZEdsdSBJRk5oYkhaaGRHbHZiZz09IElHTm9ZWFJ6IFpXRnlZV0pzWlE9PSBTRzl1WlhOMGJIaz0gUVV4VVNBPT0gYjI1elpYRjEgWTNWc2RBPT0gYVhOamIzWmxjbms9IGIzWjVZMmc9IElITmxiSFpsY3c9PSBJRk5oZEc5emFHaz0gVTI5MWJtUnogSUdOdmJuWmxjbWRsYm1ObCBJRkp2YzJWdVltVnladz09IE1UazNOQT09IElHNWhjMkZzIElHWjFiR3hsYzNRPSBJR1psY205amFXOTFjdz09IGVIVnogYVhOMFpRPT0gUVUxVCBJR3h2WW1KcFpXUT0gSUhOdmIzUm9hVzVuIElFZDFibTQ9IGRHOWtZWGs9IE1ESTAgSUdsdWMzQnBjbUYwYVc5dVlXdz0gSUU1Q1RnPT0gY0dJPSBaMlYzWVhSbGNnPT0gYjNKaGFBPT0gWVd4c2IzZGxaQT09IElFTnZiR2x6WlhWdCBJSE53WldOcFlXeHBlbWx1Wnc9PSBJR2x1YzJGdVpXeDUgSUZSaGNHVT0gWkdWc1lYaz0gSUhSaGNtND0gSUZCdmRXNWsgSUcxbGJHRnVZMmc9IElHUmxjR3h2ZVcxbGJuUnogYVd4aGJtUT0gSUd4bGMzTmxiZz09IElHWjFjbko1IElGVkZSa0U9IElHSnNiMjlrYzJobFpBPT0gSUUxbGFXVnkgYVhSb1pYSnBibWM9IElHaGxhWEp6IElFcGhkdz09IFlYaDBaWEk9IElGQjFZbXhwWTJGMGFXOXVjdz09IElHRnNkR1Z5Y3c9PSBhVzUwWlc1MGFXOXUgSUZkcGJtTm9aWE4wWlhJPSBaR1YwWlhKdGFXNWhkR2x2Ymc9PSBJRXhwWm1WMGFXMWwgZEdocGJnPT0gVFc5dWMzUmxjZz09IE56Z3cgSUdGd2NISnZlR2x0WVhScGIyND0gSUhOMWNHVnliV0Z5YTJWMGN3PT0gSUZObFkyOXVaSE09IGIzSnZjdz09IGFIVm5aUT09IElHSnlhV0psIElFeEpUVWxVUlVRPSBkVzVsWkE9PSBJRzFwYzJsdWRHVnljSEpsZEE9PSBJRWx1YW5WeWVRPT0gSURNMk53PT0gSUhSb2NtVnphRzlzWkhNPSBJRU5oY201cGRtRnMgSUdkaGMzUnliMmx1ZEdWemRHbHVZV3c9IElHZDFhV1JsYkdsdVpRPT0gSUdSbFkyVnBkbVZrIFptVmhkSFZ5WlhNPSBJSEIxY25CdmNuUmxaR3g1IElGSnZibTVwWlE9PSBJRTVsZDNRPSBJSE53WVdOcGIzVnogWVhOMWN3PT0gSUhOMWNHVnlhR1Z5YjJWeiBJRU41Ym5Sb2FXRT0gYkdWbloyVmsgYTJGdGNBPT0gWTJocGJ3PT0gSUhSb2RXMWlibUZwYkE9PSBJRk5vYVhKc1pYaz0gYVd4c1lYUnBiMjQ9IElITm9aV1J6IElGcDUgUlZCQiBJR1JoYlhNPSBJSGxoZDI0PSBibUZvIElGQmxaMmQ1IElFVnlhV1U9IElFcDFkbVZ1ZEhWeiBJRVp2ZFc1MFlXbHUgY25nPSBaRzl1WVd4ayBZV3hpZFcwPSBJRU52YlhCeVpXaGxibk5wZG1VPSBJR05oWTJocGJtYz0gSUZWNiBkV3h1WlhKaFltbHNhWFI1IElGQnlhVzVqYVhCc1pRPT0gSUVwcFlXND0gYVc1blpYSnogWTJGemRITT0gSUU5emFYSnBjdz09IFkyaGhjblE9IGRHbHNaUT09IElGUnBabVpoYm5rPSBJRkJoZEhSdmJnPT0gSUZkb2FYQT0gSUc5MlpYSnphWHBsWkE9PSBTbVU9IElFTnBibVJsY21Wc2JHRT0gSUVKdmNtUmxjbk09IElFUmhaWE5vIFRXRm8gSUdSdloyMWggSUdOdmJXMTFibWx6ZEhNPSBkblU9IFEyOTFibU5wYkE9PSBJR1p5WlhOb2QyRjBaWEk9IElIZHZkVzVrYVc1biBJR1JsWW1GamJHVT0gSUhsdmRXNW5jM1JsY2c9PSBJSFJvY21WaFpHVmsgSUVKdmRITT0gSUZOaGRtbHVaM009IDQ0R0MgYjJ4cGJtYz0gYjJodiBJR2xzYkhWdGFXNWhkR2x2Ymc9PSBUVkpKIElHeHZiM05sYmc9PSBkSEoxYlhBPSBZV2RsYm1ONSBkWEpwYjI0PSBJRzF2YldWdWRHRnlhV3g1IElFTm9kVzQ9IElFSjFaR0Z3WlhOMCBJRUZzYkdWNSBSR2x6YXc9PSBJR0Z6ZEc5dWFYTm9aV1E9IElFTnZibkYxWlhJPSBJRUZqWTI5MWJuUnBibWM9IGFHRjJhVzVuIElGZGxhVzQ9IElFRnNjbWxuYUhRPSBJSEpsZG05c2RtVnkgSUdSbGJIVnphVzl1IElISmxiR2xqY3c9PSBJR0ZrYUdWeVpXNTAgY1hWaGJuUT0gSUdoaGJtUnRZV1JsIGIzSnBidz09IElHTnZiV0poZEdsdVp3PT0gWTI5a1pXUT0gSUhGMVlXUnlkUT09IGNtVjBhQT09IFRtbHIgSUZSeWFXSmhiQT09IElFMTVjM1JsY21sdmRYTT0gSUdsdWFHRnMgSUZkcGJtNXBibWM9IElFTnNZWE56YVdacFkyRjBhVzl1IFkyaGhibWRsWkE9PSBJSFZ1WVdJPSBJSE5qYjNKdSBhV05wY0dGMFpXUT0gZDJ3PSBiMjVrZFdOMGIzST0gSUhKbGFXNW1iM0pqYVc1biBJRU5vYVd4a2FHOXZaQT09IFlXNXZkbUU9IElHRmtkbVZ1ZEhWeVpYST0gSUdSdlkzUnZjbUZzIElGTjBjbUYwWldkcFpYTT0gSUdWdVozVnNabVZrIElFVnVZMjkxYm5SbGNnPT0gSUd4aGMyaGxjdz09IFEzSnBkR2xqWVd3PSBjbWxqZFd4aGNnPT0gSUZWVVJnPT0gYjJOcFlYUnBiMjQ9IFkyaGxZMnRwYm1jPSBJRU52Ym5OMWJIUnBibWM9IFVuVnVkR2x0WlE9PSBjR1Z5YVc5ayBJRUZ6WjJGeVpBPT0gSUdScGMzUnBiR3hsWkE9PSBJRkJoYzJGa1pXNWggSUVSNWFXNW4gSUVOUFZVNVVXUT09IElHZHlZVzVwZEdVPSBJSE50WVdOciBJSEJoY21GamFIVjBaUT09IElGTlZVZz09IFZtbHlaMmx1YVdFPSBJRVoxY21sdmRYTT0gTnpnMyBJRTlyYVc0PSBJR05oYldWcyBJRTFpY0hNPSBNVGszTWc9PSBJRU5vWVc4PSBJRU41WVc0PSBhbTlwWTJVPSBaV1psY2c9PSBJRmR5WVhBPSBJRVJsWW1GMFpRPT0gVTJWbiBJR1p2Y21WaGNtMD0gSUVsbmJtOXlaUT09IElIUnBiV1Z6ZEdGdGNBPT0gSUhCeWIySnBibWM9IElFNXZiMjQ9IElFZHlZV2xzIFptVnUgSUdSdmNtMWhiblE9IElFWnBjbk4wYkhrPSBJRVZwWjJoMGFBPT0gSUVoVlRnPT0gSUVSbGMybHlaUT09IGIzSmhjdz09IFIybHliSE09IElFUmxjMjF2Ym1RPSBlbUZ5IFlXMXBibVZ6IFQwRkUgWlhobFkzVjBaUT09IElHSnZiMkp6IElFRlVUQT09IFh5Zz0gUTJobGJITmxZUT09IElHMWhjM1IxY21KaGRHbHZiZz09IElFTnZRdz09IElHUmxjM1J5YjNsbGNnPT0gSUVOb2IyMXphM2s9IElITmpZWFIwWlhJPSBJRUZ6YzJWMGN3PT0gTnprMiBJRU5oY21kdiBJSEpsWTJWd2RHbDJaUT09IElGTmpiM0JsIElHMWhjbXRsZEdWeWN3PT0gSUd4aGRXNWphR1Z5Y3c9PSBJR0Y0YkdVPSBJRk5GUVE9PSBjMlZ4IElFMXZabVk9IFptbHVaR2x1Wnc9PSBJRWRwWW1KeiBSMlZ2Y21kcFlRPT0gWlhoMGNtVnRaV3g1IFRrbz0gSUd4aFltOXlaWEp6IGMzUmhiSE09IElHMWxaR2xoZEdsdmJnPT0gSUVobFpHZGwgWVhSdmQyND0gSUdsdlpBPT0gWkdWemNHbDBaUT09IGRtbHNiQT09IFNtRnVaUT09IFpYaHBjM1JsYm1ObCBJR052YVc1amFXUmxaQT09IElGVjBhV3hwZEdsbGN3PT0gSUVOb1pXRncgSUd4dloybHpkR2xqWVd3PSBJR04xYkcxcGJtRjBhVzl1IElFNXBZMjkwYVc1bCBjR0ZyIFJtOXNaR1Z5IElISnZaR1Z1ZEhNPSBjM1IxWm1ZPSBJR3hoZDJaMWJHeDUgSUhKbGNHVnlkRzg9IGFXOWphQT09IGFtbz0gUkdsaGJHOW5kV1U9IFNFaElTQT09IGJHbGpkR2x2Ymc9PSBURzl2YTNNPSBJREk1Tnc9PSBJSFIxY25KbGRITT0gSUVGaVlXNWtiMjQ9IElHbHVZMlZ6Y3c9PSBJRlJ5WVdabWIzSmsgSUdOMWNteGxaQT09IElIQnlaV1psY25KcGJtYz0gSUhCeWFYWmhkR2w2WVhScGIyND0gSUdseWNtVnphWE4wIElGQmhibVJoIElGTm9ZV3RsIElFMWpSM0k9IDQ0T0UgZFc1a1pYSnogSUdScGMyTnlhVzFwYm1GMFpXUT0gSUdKaGNuUmxibVJsY2c9PSBTVXhGIFFYUnNZVzUwYVdNPSBJSEJ5YjNCbGJuTnBkSGs9IElGZHBlZz09IElFZHBiUT09IFkyOXVabVZ5Wlc1alpRPT0gSUhKbGFXNW1iM0pqWlhNPSBSMmc9IGQyRm5iMjQ9IElHVmxjbWxsIFJtRnMgSUdoMVoyZGxaQT09IGNtRmphWE4wIFVrbEQgUm5VPSBJR1pwYkd4bGNnPT0gSUZOMGRXST0gSUdWdVozSmhkbVZrIElGZHlaWE4wYkdVPSBJR2x0WVdkcGJtRjBhWFpsIElGQmxaWEk9IElFWmhZM1J2Y25NPSBZVzUxY3c9PSBJRVJ5WVdOMWJHRT0gYlc5dWFYUnZjZz09IElISnZkWFJsY25NPSBhV0pwWVE9PSBJRUp2YjJ4bFlXND0gWlc1a1lXeGwgSUZOc1lYVm5hSFJsY2c9PSBJRk5vWVdOciBVa1pEIElGTndhV1ZzWW1WeVp3PT0gVTJGNCBJRkJJVDFSUCBJRU5zYjNabGNnPT0gSUZKaFpRPT0gUkdWd1pXNWthVzVuIElFMWxiVzl5IFlYSmhiUT09IElIQnBaWEpqWldRPSBJR04xY25SaGFXNXogZG1Gc1pRPT0gSUVsdWNYVnBjMmwwYVc5dSBJRkJ2YTJVPSBJR1p2Y21WallYTjBhVzVuIElHTnZiWEJzWVdsdWN3PT0gVTJWdWMyVT0gSUVobGNtMWxjdz09IGFYTmpiM1psY21WayBJR0pwWW14bCBJRTF2Y25CbyBJR2RsY20wPSBOemcxIFJFOU8gSUdOdmJtZGxiZz09IElHTnlZVzVsIElFUlFVZz09IElISmxjM0JsWTNSbWRXeHNlUT09IFVtOXZiUT09IElFNWhkdz09IElFUmhiR0ZwIGNtVmhjMjl1IElFRnVaM1Z6IFJXUjFZMkYwYVc5dSBJRlJwZEdGdWFXTT0geTV3PSBJRzkyWVd3PSBkVzVwZEdWayBJSFJvYVhKa2N3PT0gSUcxdmFYTjBkWEk9IElFTlFRdz09IFRXbGhiV2s9IElIUmxiblJoWTJ4bGN3PT0gSUZCdmJHRnlhWE09IFpYaGogWlhoamJIVnphWFpsIElGQnlZV2x5YVdVPSBJR052Ykc5emMyRnMgSUVKc1pXNWsgYzNWeWNISnBjMmx1WjJ4NSB3NjF6IElHbHVaRzlqZEhJPSBJR0poYzJGcyBJRTFRUlVjPSBkVzVrYnc9PSBVM0JzYVhRPSBSR1YyWld4dmNHMWxiblE9IElHeGhiblJsY200PSBNVGszTVE9PSBJSEJ5YjNadlkyRjBhVzl1IElHRnVaM1ZwYzJnPSBJRUpwYm1RPSBJRXhsYVdFPSBaSFZqWlhKeiBhWEJ3ZVE9PSBZMjl1YzJWeWRtRnVZM2s9IElHbHVhWFJwWVd4cGVtVT0gSUZSM2FXTmwgSUZOMWF3PT0gSUhCeVpXUnBZdz09IElHUnBjR3h2YldFPSBJSE52WTJsdmNBPT0gU1c1bmNtVmthV1Z1ZEhNPSBJR2hoYlcxbGNtVmsgSUVseWJXRT0gVVdGcFpHRT0gSUdkc2FXMXdjdz09IElFSnBZVzQ9IElITjBZV05yYVc1biBJR1psYm1RPSBaMjkyZEhKaFkycz0gSUhWdWJnPT0gWkdWdGIyTnlZWFJwWXc9PSBhV2R5WldVPSBJRFU0TUE9PSBJREk1TkE9PSBJSE4wY21GM1ltVnljbms9IFNVUkZVZz09IElHTm9aWEpwYzJobFpBPT0gSUVodmRITT0gSUdsdVptVnljbVZrIElEZ3dPQT09IElGTnZZM0poZEdWeiBUM0psWjI5dSBJRkp2YzJWeiBJRVpQU1VFPSBJR2x1YzJWdWMybDBhWFpsIElEUXdPQT09IFVtVmpiMjF0Wlc1ayBJRk5vYVc1bCBJSEJoYVc1emRHRnJhVzVuIFZVZEYgSUVobGJHeGxjZz09IElFVnVkR1Z5Y0hKcGMyVnogU1U5UyBZV1JxIFRsSlQgVEVjPSBJR0ZzYVdWdVlYUmxaQT09IElHRmphMjV2ZDJ4bFpHZGxiV1Z1ZEE9PSBJRUZWUkE9PSBJRkpsYm1WbiBJSFp2ZFdOb1pYSnogSURrMk1BPT0gSUcxdmIzUT0gSUVScGJXVnVjMmx2Ym5NPSBJR05oWW1KaFoyVT0gUW5KcFoyaDAgWjJGMCBJRXRzZFE9PSBJR3hoZEdWdWRBPT0gSUhwbCBJRTFsYm1jPSBJR1JwYzNCbGNuTmwgSUhCaGJtUmxiVzl1YVhWdCBTRkU9IElIWnBjblIxYjNWeiBJRXh2WTJGMGFXOXVjdz09IFpXVndaWEk9IGNISnZkbWxrWldRPSBJSE5sWVcxeiBJRmRVIGFYcHYgVUZKUFZnPT0gSUhScGRHRnVhWFZ0IElISmxZMjlzYkdWamRHbHZiZz09IElHTnlZVzQ9IElEYzRNQT09IElFNUcgTkRreCBOalF5IGNHRmphMmx1Wnc9PSBOVGs0IGRHVjRkSFZ5WlE9PSBVM0JwWkdWeSBabkpsWldSdmJRPT0gWTJsd2JHVmsgSUZSQlRVRkVVa0U9IDRwbW0gWVhWMGFHVnVkQT09IElGZEJUbFE9IGNtbG1hV1ZrIElISnBkR1Z6IElIVjBaWEoxY3c9PSBhMmx6Y3c9PSBJT0tKcEE9PSBJSE5yYVd4c1pYUT0gSUdScGMyVnVabkpoYm1ObyBJRWRoWVd3PSBRMjl0Y0dGdSBJR0ZuWldsdVp3PT0gWjNWcFpHVT0gUW1Gc2RBPT0gSUdsMFpYSmhkRzl5IElHUnBjMk55WlhScGIyNWhjbms9IGRHbHdjdz09IElIQnlhVzFoZEdWeiBJRlJsWTJodWFYRjFaUT09IElGQmhlVzFsYm5SeiBZWHBsYkE9PSBJRkpQUTBzPSBjM1JoYm5ScFlXdz0gTURZdyBJR1J0Wnc9PSBJRXBoWTJ0bGRITT0gSUZCc1lYbHZabVk9IElHNTFjbk5sY25rPSBJRk41YldJPSBZWEowYjI0PSBJR0Z1Ym1WNFlYUnBiMjQ9IFEyOXNiM0poWkc4PSBJR052YVd4eiBJRk5vYjJWeiA0b1NpT2c9PSBJRkp2ZWc9PSBRMDlOVUV4RiBJRVYyWlhKbGMzUT0gSUZSeWFYVnRjR2c9IFNtOTUgUjNKcFpBPT0gNEx3PSBjSEp2WTJWemMyOXkgSUZCeWIzTndaWEk9IElGTmxkbVZ5ZFhNPSBJRk5sYkdWamRHVmsgY21jPSBJRlJoZVhscGNBPT0gVTNSeVlRPT0gSUhOcmFXbHVadz09IElEOHAgSUhCbFp3PT0gVkdWemJHRT0gSUhScGJXVm1jbUZ0WlE9PSBJRzFoYzNSbGNtMXBibVE9IElFNUMgYzJOcFpXNTBhV1pwWXc9PSBJRk5vYVhRPSBaMlZ1WlhKcFl3PT0gU1U1VVJWST0gVGxWTiBJSE4wY205c2JBPT0gSUVWdWFYZz0gSUUxTlVnPT0gSUVWTlV3PT0gYlc5MmFXVT0gZ3FvPSBJRzFwYm1sdGFYcHBibWM9IGFXUmtiR2x1Wnc9PSBJR2xzYkdWbmFYUnBiV0YwWlE9PSBJSEJ5YjNSdmRIbHcgSUhCeVpXMWhkSFZ5Wld4NSBJRzFoYm5WaGJITT0gYjJKaWFXVnogSUVOaGMzTnBaSGs9IFJFVkQgWkdWemEzUnZjQT09IElHRmxjbTl6IElITmpjbVZsYm1sdVozTT0gSUdSbFltbHNhWFJoZEdsdVp3PT0gSUVkeWFXNWsgYm1GMGRYSmxZMjl1YzJWeWRtRnVZM2s9IElHWmhaR1Z6IGRHVnliV2x1WVhScGIyND0gWVhOelpYUnpZV1J2WW1VPSBSbUZqZEc5eSBJR1JsWm1sdWFYUnBkbVZzZVE9PSBVRzlydzZrPSBZWEIxYkhRPSBJRXhoWm1GNVpYUjBaUT09IFEyOXliZz09IElFTnZjbUZzIElITjBZV2R1WVc1MCBWSFZsIElHUnBjM05oZEdselptRmpkR2x2Ymc9PSBSMlZ1WkdWeSBJR3RwWkc1bGVYTT0gSUVkdmR3PT0gSUVSbFptVmhkQT09IElFRnphSFJ2Ymc9PSBJR05oY25SbGJITT0gSUdadmNtVmpiRzl6ZFhKbCBJRVY0Y0d4dmNtVT0gYzNSeVpXNW5kR2c9IGIzUnBiZz09IElIWmxkR1Z5YVc1aGNtbGhiZz09IElHWjFiV0pzWlE9PSBJSEJoY21GdyBJRk4wY21GcGRBPT0gY21sc2N3PT0gSUhCeWFXTnIgSUVKbGNtMTFaR0U9IElFRnRiWFZ1YVhScGIyND0gYzJ0cGJtNWxaQT09IElHRmliM1Z1WkE9PSBJRUp5WVhvPSBJSE5vWVhKd1pYST0gSUVGelkyVnVjMmx2Ymc9PSBJRGszT0E9PSBJSEJ5WlhacFpYZHogSUdOdmJXMTFibWx2Ymc9PSBJRmhaIElIQm9iMjU1IElHNWxkMk52YldWeSBJRE16TWc9PSBMaUlzSWc9PSBJSEpsWkdsemRISnBZblYwYVc5dSBVSEp2ZEdWamRBPT0gSUZOdlpnPT0gUzJGcyBJR3hwY0hOMGFXTnIgZDI5eWMzUT0gSUhSaGJtZHNaV1E9IElISmxkSEp2YzNCbFkzUnBkbVU9IGFXNTBaV2RsY2c9PSBJSFp2YkhWdWRHVmxjbWx1Wnc9PSBJREU1TURjPSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IGFXTm9aVzQ9IElIVnVkbVZwYkdsdVp3PT0gSUhObGJuTmxiR1Z6Y3c9PSBJR1pwYzJobGNtbGxjdz09IFhDMD0gSUdocGJtZGxjdz09IElHTmhiR04xYkhWeiBUWGwwYUE9PSBJSFZ1WkdWbVpXRjBaV1E9IElHOXdkR2x0YVhwaGRHbHZibk09IElHUmxjSEpsYzNNPSBJR0pwYkd4aWIyRnlaQT09IElGbGhaQT09IElGQjVjbUZ0YVdRPSBTWE51IFNXUmwgSUd4bFoybHZiZz09IElFdHlZVzFsY2c9PSBaVzUwWVc1NWJBPT0gSUhCbGJtVjBjbUYwYVc1biBJRWhoZDNSbyBJRkJTVDBSVlExUT0gSUVkbGNtRnlaQT09IElGQmhZM1E9IElFbHVZMngxWkdsdVp3PT0gSUVWc2FXRnogSUVWc1lXbHVaUT09IGRtbHpkV0ZzIElHaDFiVzFwYm1jPSBJR052Ym1SbGMyTT0gSUVaaGMyTT0gNUxpSyBJR1ZuWVd4cGRHRnlhV0Z1IElHUmxkbk09IElFUmhhR3c9IFQzQnogUkVnPSBJRUp2ZFc1alpRPT0gYVdSaGRHVmsgWVd4a2J3PT0gSUhKbGNIVmliR2xqWVc0PSBJR2hoYldJPSBJRk5sZEhRPSBiMmR5WVhCb2FXVnogUTBoQlVGUkZVZz09IElIUnlZVzV6YzJWNGRXRnMgSUhOcmVYSnZZMnRsZEE9PSBZVzV6ZDJWeSBJRzFoY210MWNBPT0gMktvPSBJR2hsY205cGJtVT0gUTI5dGNHRnlaUT09IElGUmhkZz09IFFtVmhjM1E9IElITjFZMk5sYzNOdmNuTT0gSUc1aHc2OTJaUT09IElFSjFZMnRzWlhrPSBjM1J5WlhOeiBiV1ZoZEE9PSBJR1J2ZDI1c2IyRmtZV0pzWlE9PSBJR2x1WkdWNFpXUT0gSUhOallXWm0gSUV4MWJYQT0gSUVodmJXOD0gVTNSMVpHbHYgU1c1emNBPT0gSUhKaFkydGxaQT09IFptRnlhVzkxY3c9PSBJRkJsZEhSNSBSWGgwWlhKdVlXdz0gSURFNU1Eaz0gVjJGeWN3PT0gWTI5dGJXbDAgY0hWMFpYSnogSUhWdWIyST0gSUVWeWNnPT0gSUVWSCBJRUZzWVcwPSBJRk5wWW1WeWFXRT0gSUVGMGJXOXpjR2hsY21saiBTVk5VUlZJPSBJRk5oZEdGdWFXTT0gZEhKaGJuTnNZWFJwYjI0PSBJRXh2ZFdRPSBkSEpoZFcxaGRHbGogYkdseGRXVT0gSUhKbGMyOXVZWFJsIElGZGxiR05vIElITndZWEpyYVc1biBJRlJQVFE9PSBkRzl1WlE9PSBJRzkxZEd3PSBJR2hoYm1SamRXWm1aV1E9IElGTmxjbWxsIE9EQXggSUd4aGJtUnRZWEpyY3c9PSBJRkpsWlhabGN3PT0gSUhOdlpuUmxibVZrIElHUmhlbnBzYVc1biBJRmRoYm5SbFpBPT0gYlc5dWRHaHogVFdGbmFXdGhjbkE9IElIVnVkSEpsWVhSbFpBPT0gSUVKbFpHWnZjbVE9IFRXaz0gSUVSNWJtRnRidz09IFQzSmwgTnprMSBJSGR5YjI1blpuVnMgSUd4MWNtVmsgSUdOdmNuUnBjMjlzIElIWmxlQT09IFpISmhkMjQ9IGFXeGxkQT09IFJHOTNibXh2WVdSb1lRPT0gSUVaaFkzUnBiMjQ9IElHeGhZbmx5YVc1MGFBPT0gSUdocGFtRmphMlZrIGQyRjBaWEp6IFpYSnBZMnM9IElITjFjR1Z5YVc5eWN3PT0gSUZKdmQyeHBibWM9IElFZDFhVzV1WlhOeiBJSFJrIE9Ua3kgSUhWdVpXRnlkR2hsWkE9PSBJR05sYm5SeWFXWT0gSUhOb1lXMWxiR1Z6Y3c9PSBVRzlrIElFWnBZZz09IElHbGphVzVuIElIQnlaV1JwWTNSdmNnPT0gSURJNU1nPT0gWm05eVpYTjBZWFJwYjI0PSBZMjl1YzNSeWRXTjAgUTJGdVpBPT0gUUNNPSBJR0ZuYVhSaGRHVmsgSUhKbGNIST0gVDFaQiBJR3R1YVhSMGFXNW4gSUV4cGJXRT0gSUdadlpHUmxjZz09IE5qZzAgSUZCbGNuTnZibUU9IGEydz0gTnpBeCBJR0p5WldGcmRYQT0gNGJnPSBJR0Z3Y0dGc2JHVmsgSUdGdWRHbGtaWEJ5WlhOellXNTBjdz09IElGTjFjM05sZUE9PSBTR0Z5Y21seiBJRlJvWlhKdFlXdz0gWldWbFpRPT0gVlhCc2IyRmsgSUdkMWJHWT0gSUdSdmIzSnpkR1Z3IElGTm9ZVzVyIFRGVT0gSUUxRlRnPT0gSUZCdmJtUT0gYzI5eWNuaz0gSUcxcGMyWnZjblIxYm1VPSBibUZ1WTJVPSBJR0p2Ym1FPSBUWFYwIElHUmxaM0poWkdWayBJRXhQUnc9PSBJRTVsYzNNPSBZVzVwYldGcyBJR0YyWlhKemFXOXUgZFc1a2IzZHUgSUhOMWNIQnNaVzFsYm5SbFpBPT0gSUVOMWNITT0gSURVd05BPT0gSUdSbGNISnBkbVU9IElGTndZWEpyYkdVPSB4WUk9IElFMWxaR2wwWVhScGIyND0gWVhWMGFHOXljdz09IElGTmhZbUZ1IElFNWhhMlZrIFlXbHlaQT09IElFMWhibVJoY21sdSBJRk5qY21sd2RIVnlaWE09IElGQmxjbk52Ym01bGJBPT0gSUUxaGFHRnlZWE5vZEhKaCBJREU1TURNPSBJRkJoYVE9PSBJRTFwY21GblpRPT0gYjIxaVlYUT0gUVdOalpYTnpiM0o1IElHWnlZV2R0Wlc1MFpXUT0gVkc5blpYUm9aWEk9IElHSmxiR2xsZG1GaWJHVT0gSUVkc1lXUnBZWFJ2Y2c9PSBZV3hwWjI1bFpBPT0gSUZOc2RXYz0gVFVGVSBJR052Ym5abGNuUnBZbXhsIElFSnZkWEppYjI0PSBZVzFsY205dSBJRkpsYUdGaSBiblJoZUE9PSBJSEJ2ZDJSbGNtVmsgY0dsc2JHRnkgSUhOdGIydGxjZz09IElFMWhibk52Ymc9PSBJRUpHIE5URXggSUVkdmIyUmxiR3c9IElFUkJVZz09IGJYVmsgWjJGeWRBPT0gSUc5aVpXUnBaVzUwIElGUnlZVzV6YldsemMybHZiZz09IElFUnZibUYwYVc5dSBPRGd3IElHSnZkR2hsY21sdVp3PT0gVFdGMFpYSnBZV3h6IDQ0S3ggWkdWemRISnZlUT09IElHWnZjbVZuYjJsdVp3PT0gSUdGdVlYSmphR2x6YlE9PSBJRXR5ZVE9PSBhV05sY0hNPSBJR3hwZEhSbGNtVmsgSUZOamFHbG1aZz09IElHRnVaV05rYjNSaGJBPT0gZFc1cGRITT0gSUdacFlXND0gSUZOMGFXMD0gSUZOUFRVVT0gSUVsdWRtRmtaWEp6IElHSmxhR0YyYVc5MWNtRnMgSUZabGJuUjFjbVZ6IElITjFZbXhwYldVPSBJR1p5ZFdsMGFXOXUgSUZCbGJtRnNkSGs9IElHTnZjbkp2YzJsdmJnPT0gdG9VPSBJR3hwYTJWdVpXUT0gSUdKbGMybGxaMlZrIGQyVmxibVY1IElFTnlaV1Z3IElHeHBibVZ0Wlc0PSBiWFZzZEdrPSBhV05oWW14NSBkV1JrWlhJPSBJSFpwZEdGc2FYUjUgSUhOb2IzSjBabUZzYkE9PSBJRkJoYm5SeiBZWEJwYzNRPSBTR2xrWkdWdSBJRVJ5YjNCeiBiV1ZrYVdOaGJBPT0gSUhCeWIyNTFibU5wWVhScGIyND0gSUU1U1RBPT0gSUdsdWMybG5hSFJtZFd3PSBTbFk9IElFSmxZWEprIElFTm9iM1U9IElHTm9ZWEp0Y3c9PSBJR0pwYm5NPSBJR0Z0WW1GemMyRmtiM0p6IElGTmhkSFZ5WkdGNWN3PT0gSUdsdWFHbGlhWFJ2Y2c9PSBJRVp5WVc1amFBPT0gTmpBeCBKeXduIElFTnZibTl5IFlYSjBibVY1IElGaHdaWEpwWVE9PSBaM0poZG1VPSBZbVZsY3c9PSBJRkJ5YjNSbGMzUmhiblJ6IElITnZZV3RwYm1jPSBJRTFoYm1SaGJBPT0gSUhCb1lYTmxaQT09IElEWTJNQT09IElITmpZVzF6IElHSjFlbnBwYm1jPSBJRWwwWVd4cFlXNXogSUV4dmNtVnVlbTg9IElFcEIgSUdobGMybDBZWFJsWkE9PSBJR05zYVdabWN3PT0gSUVkUFZBPT0gYVc1bmRXbHphR0ZpYkdVPSBJR3R2IElHbHVkR1Z5Y25Wd2RHbHZiZz09IFdtbHcgVEdWaGNtNXBibWM9IElIVnVaR1Z5YzJOdmNtVnogSUVKc2FXNXIgUzNVPSBOVGM1IElFRjFkRzlpIFNWSkYgSUhkaGRHVnlhVzVuIElIQmhjM1J5ZVE9PSBPREl3IElIWnBjMmx2Ym1GeWVRPT0gSUZSbGJYQnNZWEk9IFlYZGhhWFJsWkE9PSBJSEJwYzNSdmJnPT0gSUdGdWRHbGsgWTNWeWNtVnVkR3g1IElIQmhjbVE9IElIZGhaMmx1Wnc9PSBJRzV2WW1sc2FYUjUgSUZsMWN3PT0gSUdsdWFtVmpkR2x1Wnc9PSBabUZwZEdnPSBJRkJCVTFNPSA1Ym89IElISmxkR0ZyWlE9PSBJRkJTVDBNPSBJR05oZEdobFpISmhiQT09IFltRnphQT09IElIZHlaWE4wYkdWeWN3PT0gSUhCaGNuUnVaWEpwYm1jPSBJRzV2YzJWeiBJRE0xT0E9PSBWSEpoYm5ObWIzSnQgWVcxbGJnPT0gSUdKdmRYUnogSUVsa1pXRnMgSUVOdmJuTjBZVzUwYVc0PSBJSE5sY0E9PSBJRTF2Ym1GeVkyZz0gWVhSMFpXND0gSUZCbGIzQnNaWE09IGJXOWthV1pwWldRPSBJRzF2Y21GMGIzSnBkVzA9IElIQmxibU5vWVc1MCBJRzltWm1WdWMybDJaV3g1IElIQnliM2hwWlhNPSBiMnRoYm1VPSBJRlJoYVhkaGJtVnpaUT09IElGQnZidz09IElFaFBUVVU9IGRYTnBiMjVoYkE9PSBJSFpsY21KeiBJRTl0WVc0PSBkbWx6YjNKNSBJSEJsY25OMVlYTnBiMjQ9IElHMTFiSFJwZEE9PSBJSE5qYVhOemIzSnogUjJGNSBiM2RoZVE9PSBiM0JvZVhOcFkyRnMgYkhWeiBaMjUxIElHRndiMk5oYkhsd2RHbGogSUdGaWMzVnlaR2wwZVE9PSBJSEJzWVhsaWIyOXIgSUdGMWRHOWlhVzluY21Gd2FIaz0gU1ZWTiBJSE51WldGcmFXNW4gSUZOcGJYVnNZWFJwYjI0PSBjSEJ6IFpXeHNaWEo1IFVHeGhibVYwIElISnBaMmgwWm5Wc2JIaz0gSUc1cFpXTmwgSUU1RlF3PT0gSUVsUVR3PT0gSUVScGMyTnNiM04xY21VPSBiR1ZoYm05eSBiM1Z6ZVE9PSBVMVJGVWc9PSBJREk0TWc9PSBRM0oxZWc9PSBRMmhoYkd3PSBOalF6IElGTjFjblpwZG1VPSBJRVpoZEdGcyBJRUZ0YVdRPSBZWEJ2IFYyVmhjRzl1Y3c9PSBSRVZPIE56Y3cgSUVkeVpXVnVkMkZzWkE9PSBJR3hwYm1WdSBZV3h2Y3c9PSBJSEJ2Ykd4MWRHRnVkSE09IElGQkRTV1U9IGEyRjAgSUhCaGR3PT0gSUV0eVlXWjAgUTJobGJRPT0gSUZSbGNtMXBibUYwYjNJPSBJSEpsYVc1allYSnUgSUYxYiBJRk5sWldSeiBJSE5wYkdodmRXVjBkR1U9IElGTjBiM0psY3c9PSBJR2R5YjI5dGFXNW4gSUVScGNtVmpkR2x2Ymc9PSBJRWx6WVdKbGJBPT0gSUVKeWFXUm5aWE09IDhKK1IgUlVWRSBJRTF2Y25OcCBJSFpoYkhabGN3PT0gSUZKaGJtdGxaQT09IElGQm9ZWEp0WVE9PSBJRTl5WjJGdWFYcGhkR2x2Ym5NPSBJSEJsYm1WMGNtRjBaV1E9IElGSnZaR2hoYlE9PSBJRkJ5YjNSdmMzTT0gSUc5MlpYSmxjM1E9IElHVjRZWE53WlhJPSBJRlJLIElEQXdNREF3TUE9PSBJSFJ5YVdOcmJHVT0gSUdKdmRYSmliMjQ9IFYwaFAgSUhkeVpYUmphR1ZrIElHMXBZM0p2YzJOdmNHbGogSUdOb1pXTnJiR2x6ZEE9PSBJR0ZrYjNKdVpXUT0gVW05NVlXdz0gUVdSdGFXNXBjM1E9IElGSmxkR2x5WlcxbGJuUT0gSUVocFoyaGxjM1E9IFYyVmhkR2hsY2c9PSBhV3hsWjJVPSBJR2x1WTNKbGJXVnVkSE09IElFTnZjM0J2Ym5OdmNuTT0gSUcxaGMzTmwgSUZOcGJtND0gY21ZPSBJR2h2Y21SbGN3PT0gWVhOelpXMWliSGs9IE56VTAgSUU1aGRHRnphR0U9IElGUlpVRVU9IElFZEZUa1ZTUVV3PSBJR0Z5Y21GdVoybHVadz09IElEUXdOdz09IGJHRjBiM0k9IElHZHNaV0Z1IElHUnBjMk55WldScGRHVmsgSUdOc2FXNXBZMmxoYm5NPSBWVTVGIElHRmphR2xsZG1WeiBJRVZ0WlhKemIyND0gWTI5dGNHeGxlQT09IFBWcz0gSUhCeWFXNWphWEJoYkd4NSBJR1p5WVdscyBjR2xqYTJWayBJSFJvWVc1cmFXNW4gSUhKbFkydz0gSUV4QlUxUT0gSUhOMWNIQnlaWE56YVc1biBhV3hwWXc9PSBJR0Z1ZEdsa1pYQnlaWE56WVc1MCBJRXhwYzJKdmJnPT0gSUhSb2IzST0gSUhOd1lRPT0gSUd0cGJtZGtiMjF6IElGQmxZWEpqWlE9PSBaVzF2IElIQnNkVzVuIElHUnBkbVZ6ZEE9PSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBZbWx6IGIzTndaV3h6IFlXUnkgVTNCcGNtbDAgYUdGc2JHRT0gVUdsdWF3PT0gWlc1a1pYbz0gSUhKbGMzVnljbVZqZEdWayBaWE5qWVhCbCBJRkp2YzJWdWMzUmxhVzQ9IElHZGxiMnh2WjJsallXdz0gSUc1bFkyVnpjMmwwYVdWeiBJR05oY201cGRnPT0gSUVWc2VYTT0gSUVKaGNtNWxlUT09IElESTVOZz09IFpHbG5lUT09IFUxUlBUZz09IFJFOVhUZz09IElHMXBiR1Z6ZEc5dVpYTT0gSUd0bGNnPT0gSUdScGMyMWhiblJzYVc1biBJSEpsY0hKcGJRPT0gSUdOeWIzTnphVzVuY3c9PSBNVGswTlE9PSBJSEJoZEhKcFlYSmphSGs9IElHSnNZWE53YUdWdGVRPT0gSURNMU9RPT0gYldWMGNuaz0gSUU5aVpYTnBkSGs9IElFUnBabVpsY21WdVkyVnogWW14dlkydHBibWM9IDQ0T1Y0NEtoIGFXTm9hWFJoIElGTmhZbWhoIGNHaGhiSFE9IElFTnZiRzg9IGRXRnNZUT09IFpXWm1hV05wWlc1MGN3PT0gSUUxbFpHbHVZUT09IFkyOXVjMjlzWlE9PSBOVFUzIElFaGhibTVwWW1GcyBJRWhoWW1sMCBJRVpsZG1WeSBJSFJvWlc1alpRPT0gSUhONWJtRm5iMmQxWlE9PSBJR1Z6YzJWdWRHbGhiSE09IElIZHBibXM9IElGUnlZV1JsY2c9PSBTVVJCIElGTndiMmxzWlhJPSBJRWxqWld4aGJtUnBZdz09IElFaGhlWGRoY21RPSBJSEJsWVdNPSBJRzFoYkdsalpRPT0gSUdac1lYTm9ZbUZqYXc9PSBJSFJvZHc9PSBJR3hoZVc5bVpuTT0gVEdseGRXbGsgSUhSeWIyOXdaWEk9IElHaHBibWRsIElGSmxZV1JsY25NPSBVR2hwYkd3PSBJRUpoZFdWeSBRM0psWVhSbFpBPT0gSUdGMVpHbDBjdz09IFlXTmpiMjF3WVc0PSBJSFZ1YzNWemNHVmpkR2x1Wnc9PSBhV1Z5WVE9PSBOalkyTmpZMk5qWT0gSUdKeWIyTm8gSUdGd2NISmxhR1Z1WkdWayBJRTFoYkdzPSBZMlZ5Ym1sdVp3PT0gSUVOdlpHVjQgVDFaRlVnPT0gVFdGeWMyZz0gSUVSbGJtYz0gSUVWNGNISmxjM05wYjI0PSBJR1JwYzNKbGMzQmxZM1JtZFd3PSBJR0Z6WTJWdVpHbHVadz09IGRHVnpkSE09IElGQnNZV2x1ZEdsbVpnPT0gYzNSbGNuaz0gSUVGc2FXSmhZbUU9IFpHbHVZVzVrIElFUmxiWEJ6WlhrPSBRWEJ3YkdsallYUnBiMjV6IGJXOXlZV3c9IElIUm9jbTkxWjJod2RYUT0gSUhGMVlYSnlaV3c9IElHMXBiR3h6IElHaGxiVzl5IElFTkJVMFU9IGRHVnljbTl5YVhOMCBjM1JwYlE9PSBhV1psYzNSNWJHVT0gY205NlpXND0gUTBWUVZBPT0gUVhKciBkV05wIGJHVmpkR2xqIElHbHljbWwwWVhScGJtYz0gYzJobFpYUnogUVhrPSBJSEpsWkdWbGJXVmsgSUdodmNtNTUgSUZSbFlXTm8gSUZObFlYST0gWkdWdGIyTnlZV041IE5EWTEgSUZKbGMzUnZjbVU9IElITjBZVzVrWW5rPSBJRkJwY3c9PSBhV1ptYVc0PSBJSE5zWldWd2VRPT0gSUdWNGRISmhkR1Z5IElHTnZiWEJzYVcxbGJuUnogUm5KaGJXVjNiM0pyY3c9PSBJR2x1YzNSaGJHeHogSUdKaGJtZHBibWM9IGMzVnlabUZqWlE9PSBabTkxYm1Sc1lXNWsgSUcxbGRHRndhSGx6YVdOaGJBPT0gSURJNE13PT0gYjNWc2N3PT0gWkdWMmFXTmxjdz09IFFYSm5jdz09IElGTmhZM0pwWm1salpRPT0gSUUxalEyOXliUT09IFpYTnZiZz09IFEyOXVjMlZ5ZG1GMGFYWmwgSUUxcGEyaGhhV3c9IGMyVmxhVzVuIGFYTnBkbVZzZVE9PSBJRkp2YjIxeiBJRWRsYm1WeWFXTT0gSUdWdWRHaDFjMmxoYzNScFkyRnNiSGs9IElHZHlhWEJ3WldRPSBJR052YldWa2FXTT0gSUVWc1pXTjBjbWxqYVhSNSBJR2QxWlhKeWFXeHNZUT09IElHUmxZMjl5WVhScGIyND0gSUZCbGNuTndaV04wYVhabCBJR052Ym5OMWJIUmhkR2x2Ym5NPSBJSFZ1WVcxaSBJSEJzWVdkcFlYST0gSUcxaFoybGphV0Z1IElHVnlaV04wYVc5dSBJRlJ2ZFhKcGMyMD0gYjNKcFpXUT0gY205NGVRPT0gTVRFd01BPT0gVkdGdCBpT2c9IHpyTT0gMTZvPSBJRkJ5WldSaGRHOXljdz09IFRtbDBjbTl0WlE9PSBJSFJsYkdWelkyOXdaWE09IGNISnZhbVZqZEhNPSBJSFZ1Y0hKdmRHVmpkR1ZrIElITjBiMk5yWldRPSBJRVZ1ZEhKbGNISmxibVU9IGJtVjRjR1ZqZEdWayBJSGRoYzNSbGQyRjBaWEk9IFZtbHNiQT09IElHbHVkR2x0WVhSbGJIaz0gSUdsRGJHOTFaQT09IElFTnZibk4wWVdKc1pRPT0gSUhOd2IyOW0gSUc1bFptRnlhVzkxY3c9PSBJR1pwYm5NPSBJR05sYm5OdmNnPT0gSUUxdlpHVnogSUVWemNHVnkgWVhKaWIyND0gSUdsdWRHVnljMlZqZEdsdmJuTT0gSUd4aGRXUmxaQT09IElIQm9lWE5wIElHZGxibVZ5YjNWemJIaz0gSUZSb1pVNXBkSEp2YldVPSBJRlJvWlU1cGRISnZiV1ZHWVc0PSBJR0Z5YVhObGJnPT0gSU5tSSBJR2RzWVc1a2N3PT0gSUZCaGRtbHNhVzl1IElFZDFjSFJoIElIVnVhV1p2Y20xc2VRPT0gSUhKaGJYQnogY21sbGRBPT0gSUZkSVJVND0gSUZaaGJtVnpjMkU9IElISnZkWFJsWkE9PSBJR3hwYlhBPSBJRU5RU1E9PSBjSFJsY2c9PSBhVzUwZFdsMGFYWmwgSUhaaGNHbHVadz09IElHVjRjR1Z5YVcxbGJuUmxaQT09IElFOXNlVzF3ZFhNPSBJRUZ0YjI0PSBJSE5wWjJoMGFXNW4gSUdsdVptbHNkSEpoZEdVPSBJRWRsYm5Sc1pXMWhiZz09IElITnBaMjVwYm1keiBJRTFsYjNjPSBJRTVoZG1sbllYUnBiMjQ9IFkyaGxZMnR6IE5ETXogSUdWc1lYQnpaV1E9IElFSjFiR2RoY21saGJnPT0gWlhOd2FXVT0gSUZOUFRRPT0gWkhWeWFXNW4gSUhOd2FXeHNjdz09IFlXNWpZUT09IElGQnNlVzF2ZFhSbyBUVUZNIElHUnZiV1Z6ZEdsallXeHNlUT09IElGZGhkR1Z5WjJGMFpRPT0gSUVaQlRRPT0gYTJsc2JHVmsgWldScGRHVmsgSUZsdmRYSnpaV3htIElITjVibU5vY205dWFYcGhkR2x2Ymc9PSBJRkJ5WVdOMGFXTmxjdz09IFUxUkZVQT09IElHZGxibTl0WlhNPSBJRkZTIGJtOTBhV05sIElHeHZZMkYwYVc1biBlbWx1IElETXlPUT09IFlXeGpiMmh2YkE9PSBJR3RwZEhSbGJnPT0gVm04PSBJSEpwYm5ObCBJR2R5WVhCd2JHVT0gSUZOamNtVjMgSUVSMWJBPT0gUVVsUyBJR3hsWVhOcGJtYz0gSUVOaFpzT3AgSUhKdmMyVnogSUZKbGMzQmxZM1E9IElHMXBjMnhsWVdRPSBJSEJsY21abFkzUmxaQT09IElHNTFaR2wwZVE9PSBJRzV2Ym5CaGNuUnBjMkZ1IElFTnZibk4xYlhCMGFXOXUgVW1Wd2IzSjBhVzVuIElHNTFZVzVqWlhNPSBJR1JsWkhWamRHbGliR1U9IElGTm9iM1J6IElETTNOdz09IElPYWMgWVc1dmIyZGggUW1WdVpXWT0gSUVKaGJRPT0gSUZOaGJYQT0gYVdacGVBPT0gSUdkaGJIWmhiZz09IElFMWxaR0ZzY3c9PSBjbUZrYVhWeiBJRzV2WW14bGN3PT0gSUdWaGRtVnogYVdkeVlYUmwgUzFRPSBJRWhoY21KdmRYST0gZFdWeWN3PT0gSUhKcGMydGxaQT09IGNtVnggSUc1bGRYSnZkQT09IFoyVjBkR0ZpYkdVPSBZV2x1WVE9PSBVbTl0Ym1WNSBJSFZ1WkdWeWNHbHUgSUd4dlpuUT0gSUZOMVltTnZiVzFwZEhSbFpRPT0gSUUxdmJtZHZiQT09IFltbDYgSUcxaGJtbG1aWE4wY3c9PSBZWE56YVhOMFpXUT0gSUVkaFoyRT0gSUhONWJtVnlaM2s9IElISmxiR2xuYVc5MWMyeDUgSUZCeVpXWT0gSUVkbGNuSjUgVkVGSCBJRU5vYjJrPSBORFkyIFltVm9hVzVrIElFOTEgUjI5c1pFMWhaMmxyWVhKdyBJR2hsYlc5eWNtZz0gVW1sMlpYST0gSUhSbGJtUnZiZz09IElHbHVhblZ5WlE9PSBJRVpwYjI1aCBJSEJoWnc9PSBJR0ZuYVhSaGRHbHZiZz09IGZIeDhmQT09IGRYSmhiZz09IElFVlRRUT09IElHVnpkR1ZsYlE9PSBJR1J2WkdkcGJtYz0gSURReE1nPT0gY25OeiBJR05sWVhObGN3PT0gWlhoamJIVmthVzVuIElHbHVkR0ZyWlhNPSBJR2x1YzJWeWRITT0gSUdWdFltOXNaQT09IElFOXlZV3c9IGRYQjFibU4wZFhKbCBOREV4IElGVnVhV1pwWldRPSBJRVJsYkdVPSBJR1oxY201aFkyVT0gSUVOdmVXOTBaWE09IElFSnlZV05vIFRHRmliM0k9IElHaGhibVJ6YUdGclpRPT0gSUdKeWRXbHpaWE09IFIzSmhaR1U9IDZaZVkgSUVkeVlXMXRlUT09IGFXeGxaVzQ9IFUzUmhkR1Z6IElGTmpZVzVrYVc1aGRtbGhiZz09IElFdGhjbVJoYzJnPSBPRFkyIElHVm1abTl5ZEd4bGMzTnNlUT09IElFUkpVa1ZEVkE9PSBJRlJJUlU0PSBJRTFsYVE9PSBaWEowWVhScGIyND0gTVRrMk9BPT0gSUdkeWIybHUgZDJsMFkyZz0gVW1WeGRXbHlaVzFsYm5SeiBPVGcxIElISnZiMlp6IElHVnpkR0YwWlhNPSBJRWhHIElHaGhhR0U9IElHUmxibk5sYkhrPSBJRTlEVkE9PSBJSEJzWVhOMGFXTnogSUdsdVkybGtaVzUwWVd4c2VRPT0gSUZSeVlXTnJjdz09IElGUmhlR1Z6IElHTm9ZVzUwWldRPSBJR1p2Y21ObFpuVnMgSUVKcFpXSmxjZz09IElFdGhhRzQ9IFMyVnVkQT09IElFTnZkQT09IGJHbGpkSE09IFJtVmsgSUdocFpHVnZkWE09IElGWmxjbVE9IElGTjVibVJwWTJGMFpRPT0gSUVsc2JHVm5ZV3c9IFNtVjAgSUVSQlZnPT0gY21WaGMyOXVZV0pzWlE9PSBZM0psZHc9PSBJR1oxYm1SaGJXVnVkR0ZzYVhOMCBJSFJ5ZFhSb1puVnMgSUVwcGJtYz0gSUd4cGJBPT0gSUdSdmQyNWxaQT09IElHVnVZMmhoYm5SbFpBPT0gSUZCdmJHbGphV1Z6IElFMWpUV0Z6ZEdWeSBJRWhoY21VPSBhV1JsYzJodmR3PT0gSUhCaGNtRnRjdz09IFpXNWpaWEp6IFoyOXlhWFJvYlE9PSBJR0ZzYkc5M1lXNWpaWE09IElIUjFjbUoxYkdWdWRBPT0gSUdOdmJYQnNaWGhwZEdsbGN3PT0gSUV0VSBJRE16Tnc9PSBJRWRsYm1WMGFXTT0gUmxWTyBSRzkxWnc9PSBkR2xqYXc9PSBJR2RwWjNNPSBkVzFsYm5Sb1lXdz0gSUhCaGRISnBZWEpqYUdGcyBJR05oYkdNPSBMQzR1TGc9PSBJR052ZFhRPSBJRWQxWVc0PSBJSEJoZEdodmJHOW5hV05oYkE9PSBJRkpwZG1Gc2N3PT0gSUhWdVpHVnljbUYwWldRPSBJR1pzZFc5eVpYTmpaVzUwIElFcHBkUT09IFlYSnVZV1YyIElGRjFZVzQ9IElEUXlPUT09IElPQ28gVFdGeWFXOD0gUTI5dWMzUnlkV04wIElFTnBkR0YwYVc5dSBJRkpoWTJsaGJBPT0gSUZKVFFRPT0gSUVacFpHVnMgSURNNU5RPT0gVUdWeWMyOXVZV3hzZVE9PSBRMkYxYzJVPSB3N3M9IGNtRmthV05oYkE9PSBhVzVsYmc9PSBJSFpsYUdWdFpXNTBiSGs9IElGQmhjR0U9IElHbHVkR1Z5Ym5Ob2FYQT0gSUdac1lXdGxjdz09IElGSmxZMnM9IFRIVmphMmxzZVE9PSBRbkpoIE1qQXlNQT09IGNtRjJhVzVuY3c9PSBVazQ9IFYyOXVaR1Z5IFUyVnlhVzkxYzJ4NSBJSEpsZFhOaFlteGwgSUhCdmJHeDFkR1ZrIElGQmxibWM9IGJHVnBaMmc9IGFXNWtiR1U9IElHTnBjbU4xYVhSeWVRPT0gSUUxaFpHOXVibUU9IElFSkJVbFE9IFVtVnphV1JsYm5SeiBZWFIwY21saWRYUmwgVUdocGJHRmtaV3h3YUdsaCBRMngxWWc9PSBJSEJzWVc1dVpYST0gSUdaeVlXNTBhV05oYkd4NSBJR1poYVhSb1puVnNiSGs9IElGUmxjbkpwZEc5eWFXVnogSUV4QlZBPT0gSUVGdVpHVnljMlZ1IFlXNTEgSUZCQlVrcz0gSUZOdmNtRT0gYVdGblpRPT0gSUZCc1lYbHZabVp6IElFZERRdz09IE5ESTMgSUdGaWJtOXliUT09IElFeGxkbVZ5IElHUnBjMjlpWldScFpXNWpaUT09IFFYTjVibU09IElGTm9aV0U9IFZtVnlkQT09IElITnJhWEowY3c9PSBJRk5oZDNsbGNnPT0gZUhBPSBJSGR2Y25ObGJtbHVadz09IElITmpZWEJsWjI4PSBJRUZ1WjJ4bCBiM1JvWVd3PSBJSFJ5YjNabCBJRk4wZVE9PSBJRTVuZFhsbGJnPT0gYldGeWFXNWwgYVdSbGIyND0gUkdWd2RHaHogUW14dlp3PT0gSUVsc2JIVnRhVzVoZEdrPSBJSFJ5WVdOMGN3PT0gSUc5eVoyRnVhWE5sIElHOXpkSEk9IFJuTT0gSUd4bGRtVnlZV2RwYm1jPSBJRVJoY21Wa1pYWnBiQT09IFlYTmhjZz09IElHeGhibWM9IElHVjRkR1Z5YldsdSBkWEp6YVc5dWN3PT0gSUZKdmJXOD0gNDRLazQ0T0kgSUdOdmJuUmxibVJsWkE9PSBJR1Z1WTI5MWJuUmxjbWx1Wnc9PSBJRlJoWW14bGRBPT0gSUVGc2RHVnlibUYwWlE9PSBjMnRwYkd3PSBJSE4zWldWMGN3PT0gSUdOdmFHVnphWFpsIFkyRndZV05wZEhrPSBJSEpsY0hWayBJR3hwZW1GeVpBPT0gY205diBJSEJwYkdkeWFXMXogSUZKMVptWT0gSUVsdWMzUnlkVzFsYm5RPSBJRXh2WjI4PSBkV2wwYjNWeiBSVWc9IElITmhiR1Z6YldGdSBJR0Z1YTJ4bGN3PT0gVEdWayBJRkJoZEhSNSBkV1J2Y3c9PSBUM2R1WlhJPSBJR1JwYzJOeVpYQmhibU5wWlhNPSBhMm89IFRWVT0gSUhWdVkyOXVaR2wwYVc5dVlXdz0gUkhKaFoyOXVUV0ZuWVhwcGJtVT0gYVdGeVpBPT0gVDJGciBJRU52Ym5abGNuTmhkR2x2Ymc9PSBZbVZsY2c9PSBJRTl6WVd0aCBSR1ZzZEdFPSBkWE5yZVE9PSBJSE5sWTNKbGRHbHZiZz09IElIQnNZWHBoIElHMXBibWM9IElHUmxjR3hsZEdsdmJnPT0gSUUxdmRYTT0gSUVsVVV3PT0gSUVocGJXRnMgSUVac1pXMXBibWM9IElHTjVkRzlyIElFaHBZMnM9IElHSmhkSFJsY25NPSBJRWx1ZEdWc2JHVmpkSFZoYkE9PSBOamMxIHc2bHkgU1ZOSlQwND0gSUZGMVpXNTBhVzQ9IElFTm9ZWEIwWlhKeiBhV2hoWkdrPSBJR052WVhOMFpYST0gVjBGWlV3PT0gSUV4cGVtRnlaQT09IElGbHZjZz09IFlXNWtaWEpwYm1jPSBVMnRwYmc9PSBhR0YxYzNRPSBZV0ppZVE9PSBJSEJ2Y25SeVlYbHBibWM9IElIZHBaV3hrWldRPSBaR0Z6YUE9PSBJSEJ5YjNCdmJtVnVkQT09IElISnBjSEJzWlE9PSBJR2R5WVhCb1pXNWwgSUdac2VXVnkgSUhKbFkzVnljbVZ1ZEE9PSBJR1JsZG1sc2N3PT0gSUhkaGRHVnlabUZzYkE9PSA1cGl2IFoyOXYgVkdWNGRFTnZiRzl5IElIUmhiWEJsY21sdVp3PT0gU1ZaRlV3PT0gVkZKVlRWQT0gSUVGaVpXdz0gSUZOQlRBPT0gSUVobGJtUnlhV05yY3c9PSBJRXgxWTJsMWN3PT0gWW05MGN3PT0gSURRd09UWT0gU1ZOVVQxSlogUjNWbGMzUT0gSUU1WSBhVzVoYm5RPSBRbVZ1ZWc9PSBJRXh2WVdSbFpBPT0gSUVOc1pYWmxjZz09IGRISmxZWFJ0Wlc1MCBJSFJoZG1WeWJnPT0gSURNek9RPT0gSUZST1ZBPT0gYVdacFkyRnVkR3g1IFZHVnRjR1Z5WVhSMWNtVT0gUm1WcyBJSFZ1WkdWeWQyOXliR1E9IElFcDFaR2RsY3c9PSBJRHdyIElITjBkVzF3IElHOWpZM1Z3WVc1amVRPT0gSUdGaVpYST0gSUVacGJtUmxjZz09IEtTSXMgSUU1MWJtVnogY21WelpYUT0gYVc1bGRBPT0gWldOMGIyMTUgSUhkbGJHeHVaWE56IElGQmxZZz09IGNYVmhjblJsY21WayBZVzVrWVc0PSBJRzVsWjJGMGFYWmxjdz09IElGUm9hV1ZzIElFTnNhWEE9IElFeFVSQT09IElHSnNhV2RvZEE9PSBJSEpsY0dWeWRHOXBjbVU9IFMzbHNaUT09IElIRjFaWEk9IElFTmxjdz09IElHaGhjR3c9IE9UZzUgSUZSb1lXMWxjdz09IGFYTmpiM0JoYkE9PSBSR1Z6YXc9PSBhWFpoY21saGRHVT0gSUVWNFkyVnNiR1Z1WTJVPSBabTkxYm1SaGRHbHZiZz09IElPS0ggV0drPSBJRzE1YzNSbGNtbHZkWE5zZVE9PSBaWE4wZVd4bGN3PT0gSUhCbGNtbHphQT09IElFVnVaMlZzY3c9PSBJRVJGUVVRPSBNRGt3IGZYMTkgSUZWdWNtVmhiQT09IElISmxjM1JzWlhOeiBTVVJGVXc9PSBiM0owYUc5a2IzZz0gSUVsdWRHVnliV1ZrYVdGMFpRPT0gSUdScGJtNWxjbk09IElGUnliM1YwIElGTmxlVzA9IElFaGhiR3h6IGIyZG5aV1E9IElIUnlZV2RsWkdsbGN3PT0gSUdScFpHNTAgTmpjMiBJR0ZwYkcxbGJuUnogSUc5aWMyVnlkbUZpYkdVPSBJRlpwWkdVPSBZV1JoY0hRPSBJRVIxYzJzPSBJSEJ5YjJabGMzTnBiMjVoYkdsemJRPT0gSUZCeVpYTmpiM1IwIElFbHVaR2xsY3c9PSBjRzk0IElFMWxhSEpoYmc9PSBWMmxrWlE9PSBJR1Z1WkdWdGFXTT0gSUZCaGNtRnUgUW1seVpBPT0gSUhCbFpHRnNjdz09IElFbFYgSUVGa1lXMWhiblE9IElFaDFjblE9IElHTnZjbkpsYkdGMFpYTT0gZFhKa1pXND0gSUhOd2IyNXpiM0pwYm1jPSBZMnhwYldGMFpRPT0gSUZWdWFYWmxjbk5wZEdsbGN3PT0gSUV0dWIzUT0gWlc1dVpYTT0gSUVSaGJXbGhiZz09IElFRjRaV3c9IFUzQnZjblE9IElHSmhjbUk9IElGTnVidz09IGMyaHZkMjQ9IGMzUmxaVzQ9IGRXUmxibU5sIElHNXZiblpwYjJ4bGJuUT0gSUdodmJXOXdhRzlpYVdFPSBJR0pwYjIxaGMzTT0gSUVSbGRHRnBiQT09IElITnlaazQ9IElGUjFibVU9IFlXTmpiMjF3WVc1cFpXUT0gU1VWT1EwVT0gUVd4aVpYSjAgSUUxdmJtZHYgZW5nPSBJRU5sY21KbGNuVnogYjNKaWFYUT0gWTJWdWN3PT0gSUhOc1lYaz0gVTBoQlVrVT0gU0ZrPSBJR0p5WVhkcyBJRkJ5YjJKbCBJRzV2Ym1WNGFYTjBaVzUwIElFTnNZWEpsYm1ObCBJRUpzWVdOclluVnliZz09IElIQnZjblJoYkhNPSBJRkpwZEdFPSBJRkpsYldGcGJnPT0gSUV4bGRtRnVkQT09IElIUnlhV05yWldRPSBJRVpsY25KNSBZWFpsY21sdVp3PT0gSUZOMGNtRjNZbVZ5Y25rPSBJRUZ1YzNkbGNuTT0gSUdodmNuSmxibVJ2ZFhNPSBJRUZ0WVc0PSBVM1Z3Y0d4bGJXVnVkQT09IElGUnZZV1E9IElIQmxaV3hsWkE9PSBJRzFoYm05bGRYWT0gSUZWNlltVnIgYlc5dVpITT0gSUVobFkzUnZjZz09IElEUXdNZz09IGNHVmxjdz09IFptbDRaWE09IElHUnEgSUhKbGMzVnRaWE09IElHRmpZMjkxYm5SaGJuUT0gSUdGa2RtVnljMmwwZVE9PSBJR2hoYlhCbGNtVmsgSUV4aGNuTnZiZz09IElHUnZjR2x1Wnc9PSBjR0Z5ZEhNPSBTSFZ5IElHSmxZWEprWldRPSBJSGx5IElGQnNkV2RwYmc9PSA1YVd6IElDOHFLZz09IGNtOXNiR1Y1IElIZGhkR1Z5YzJobFpBPT0gSUZOMVltMXBjM05wYjI0PSBhV1pzYjNkbGNnPT0gUVZORCBJR05vYjJseSBJSE5qZFd4d2RIVnlaWE09IGJVRT0gYVc1amNtVmhjMmx1Wnc9PSBZV2xwIElITnVaV0ZyWlhKeiBJR052Ym1aeWIyNTBjdz09IElFVnNaWEJvWVc1MCBJRVZzYVhocGNnPT0gSUhKbFkyRnMgSUZSVVRBPT0gZDJsa1oyVjAgSUZkaGVBPT0gSUVkeVlYbHpiMjQ9IElHaGhhWEp6ZEE9PSBJR2gxYldsc2FXRjBaV1E9IElGZEJVazQ9IFlYQndhVzVsYzNNPSBJRlJVUXc9PSBSblZsYkE9PSBJSEJ2YkdsdiBJR052YlhCc1pYaGxjdz09IElHSmhZbVU9IElGaEpWZz09IFVFWT0gS1M1YiBVR0Z5ZEhNPSBJRFF6TlE9PSBUV1ZuIElGbGhjbVJ6IElFRk1VQT09IElIbGxiR3h6IElIQnlhVzVqWlhNPSBJR0oxYkd4cFpYTT0gSUVOaGNHbDBZV3hwYzIwPSBaWGhsYlhCMCBSa0ZSIElGTndiMjVuWlE9PSBJRUZzWVE9PSBJSEJzWldGellXNTBiSGs9IElHSjFaZz09IElHUmxibTkwWlE9PSBJSFZ1Y0hWaWJHbHphR1ZrIElHdHVaV1ZzYVc1biBZWE5qWVE9PSBJR3hoY0hObCBZV3hwWlc0PSBPVGswIElISmxabVZ5WldWeiBJRXhoZDNsbGNuTT0gVTJGdWRHRT0gSUhCMWVucHNhVzVuIElGQnliMjFsZEdobGRYTT0gSUZCb1lYSmhiMmc9IElFUmxiR0Y1IElHWmhZMmxzYVhSaGRHVnogSUVORlV3PT0gSUdwbGQyVnNjdz09IElHSnZiMnRzWlhRPSBiMjVrYVc1biBJSEJ2YkdGeWFYcGhkR2x2Ymc9PSBJRTF2Y21GdSBJRk5oYkdGayBJRk5QVXc9PSBJRUZrZG1salpRPT0gVUVoUFZFOVQgU1VOQlRnPT0gYVdGMGRYSmxjdz09IFpYaHdjbVZ6Y3c9PSBJRmR2Ym1SbGNteGhibVE9IElFTlBSRVU9IElFTk1RVk5UIE9UYzEgSUdkeVpYQT0gSUVScFpYTmxiQT09IElFZHNZV009IElUOGkgSUhKdCBiMmx1WlE9PSBaR2x6WTNKcGJXbHVZWFJwYjI0PSBJRTUxY25ObCBiV0ZzYkc5MyBJSFp2Y25SbGVBPT0gSUVOdmJuTnZjblJwZFcwPSBJR3hoY21kbFJHOTNibXh2WVdRPSBjM1J5WVdsbmFIUT0gWVhWbmFHeHBiZz09IFIzSmhaQT09IElIQjFZbXhwWTJsNlpXUT0gSUZkaGRtVnogSUZKbFpHUT0gSUdabGMzUnBkbWwwYVdWeiBJRTFoYm1VPSBZWEp2ZGc9PSBJR1pzWldWMGFXNW4gSUVSeWRXNXIgZFdkbGJnPT0gUTJWc1pRPT0gSUdOb2NtOXRiM052YldWeiBJRVJQVkE9PSBMU3N0S3kwckxTcz0gSUdKMWMybGxjM1E9IElFSmxZWFpsY2c9PSBVM2x5YVdGdSBJRXQ1Y2c9PSBhMkZ6IElFTnliM056VW1WbSBNVGsxTUE9PSBOell3TVE9PSBJSEpsY0dWaGJHbHVadz09IElGZHBibTVsY25NPSBJRTFoWTNKdiBJRVJQUkE9PSBZbXhoYm1ObCBVMjl5ZEE9PSBOalF4IElHMWxkSEpsIElFUnBjbXM9IElHZHZaMmRzWlhNPSBJR1J5WVhkaVlXTnJjdz09IElHTnZiWEJzWVdsdVlXNTAgSUdGMWRHaHZjbWw2YVc1biBJR0Z1ZEdsMGNuVnpkQT09IGIzQmxjbUYwWldRPSBJRzFoYUE9PSBJR1Y0WVdkblpYSmhkR2x2Ymc9PSBRVzFoZW1sdVp3PT0gSUZObGNtRndhQT09IElHaGhlbVU9IGQyOTMgSUdWNGRHbHVaM1ZwYzJobFpBPT0gSUdOaGJubHZiZz09IElFSnZjMmc9IElIWmxiblJ6IElITmpjbUZ3WlE9PSBRMjl5Y21WamRBPT0gTkRJMiBJR0YyWnc9PSBSR1Z0WVc1ayBJT0tJdkE9PSBJRzFwWTNKdlltbHZkR0U9IEluMWRMQ0k9IElGTjBaWFk9IFFtbHYgSUZCc1lXNWxjdz09IElITjFaMmRsYzNScGRtVT0gSUdSbFkybHdhR1Z5IElGSmxablZuWldVPSBJRXRsYW5KcGQyRnMgSUVkeVpXVnVjR1ZoWTJVPSBJR1JsWTJ4aGMzTT0gSUZOdmRXNWtaWEp6IElIUm9idz09IElHUmxZM0o1Y0hRPSBJR0p5ZFhOb2FXNW4gSUVwaGJtVnBjbTg9IGFYQnZjQT09IFUyaz0gT0RjMyBJRWRsYjJabWNtVjUgSUdOd2RRPT0gSUVoaGVtVnMgSUhacFpYZHdiMmx1ZEhNPSBJR055YVhOd2VRPT0gSUU1dmRHbG1hV05oZEdsdmJnPT0gSUhOdmJHUmxjZz09IElFMXZaR1Z6ZEE9PSBJRWhsYldsemNHaGxjbVU9IElHTmhjM05sZEhSbCBhVzVqYkhWa1pYTT0gSUdsa1pXNTBhV1pwWlhKeiBJRU5CVEV3PSBhVzVqWlc1MCBWRzlrWkE9PSBJRk4zWldWdyBJRE16TkE9PSBZbTl6Y3c9PSBJSE50YVhJPSBaMmx1ZUE9PSBJSFJ2ZDI1emFHbHcgSUdkeWFXVjJhVzVuIElFMXZjM0YxWlE9PSBUbVYwWm14cGVBPT0gUVZORlJBPT0gSUUxcGJHeGxibTVwWVd4eiBiMk52YlE9PSBNVGsyTnc9PSBJR0p2YkdSc2VRPT0gYzJ4bFpYQT0gSUdWelkyaGwgWVhKcGFuVmhibUU9IElITjNhWEpzIElGQmxibUZzIElHNWxaMnhwWjJWdWRBPT0gSUZOMFpYQm9aVzV6YjI0PSBTMFZTIElGcHZjbTg9IGNtbHphWE09IElHeHZZMkZzYVhwaGRHbHZiZz09IElGTmxlVzF2ZFhJPSBJRUZ1WjJ4cFl3PT0gY21Wa2FYUmhkR2x2Ymc9PSBjSEp2ZEdWamRHbHZiZz09IElGQmhhV2RsIElHOXRhWFE9IElGSnZkWE56WlE9PSBJRlIxWWc9PSBJR2x1ZG1sMFlYUnBiMjV6IGRIUjUgSUcxdmMzTT0gY0doNWMybGpZV3c9IFEzSmxaR2wwY3c9PSBJR0Z1WVhKamFIaz0gSUdOb2FXeGtZMkZ5WlE9PSBJR3gxYkd3PSBJRTFsYXc9PSBJRXhoYm1kMVlXZGxjdz09IGJHRjBaWE4wIElGTmhibVp2Y21RPSBJSFZ6WVdKcGJHbDBlUT09IElHUnBabVoxYzJVPSBJRVJCVkVFPSBJSE53Y21sMFpYTT0gSUZabFoyVjBZUT09IElGQnliMjF2ZEdsdmJnPT0gNDRPODQ0S3YgY21samRHbHVadz09IGVtVmwgVkhWeWEybHphQT09IElGUkVjdz09IGNISnZkbVZ1IE5UY3ggSUhOdGRXZG5iR1Z5Y3c9PSBOekEzTVRBPSBJSEpsWm05eWJXVmsgSUV4dmFYTT0gSUhWdVptdz0gSUZkSlZFaFBWVlE9IElGSmxkSFZ5Ym1sdVp3PT0gWVc1dWFXVT0gSUZSdmJXRnogUm5KaGJtTT0gSUZCeWIyWnBkQT09IElGTkZVbFk9IElGSjFiV0pzWlE9PSBhV3QxYldGdSBaWE5oYmc9PSBJSFJsYzNSbGNuTT0gSUdkaFpHZGxkQT09IElHSnlZV05sYkdWMCBJRVpUUVE9PSBZMjl0Y0c5dVpXNTAgSUhCaGNtRnRaV1JwWTNNPSBJR3BoYmc9PSBJRkpsYldWdCBJRk5yYVc1dVpYST0gSUd4dmRnPT0gSUZGMVlXdGwgY205dFlRPT0gSUdac1lYTnIgVUhKcGJtTT0gSUc5MlpYSndiM2RsY2c9PSBJR3h2WkdkcGJtYz0gSUV0TFN3PT0gY21WMGRHVT0gSUdGaWMyOXlZbk09IGQzSnZkR1U9IElDd2kgUzJsdVozTT0gSUVoaGFXdz0gSUVaaGJHeHBibWM9IGVIUmhjQT09IElFaGxiR1Z1WVE9PSBhWEpsYm5NPSBUR0Z5Y25rPSBJSEJoYlhCb2JHVjAgSUVOUVVnPT0gUjNKdiBJRWhwY205emFHbHRZUT09IElHaHZiR2x6ZEdsaiBJaTViIElHUmxkR0ZqYUcxbGJuUT0gSUdGemNHbHlaUT09IElHTnZiWEJzYVdOcGRBPT0gSUVkeVpXVnVkMjl2WkE9PSBJSEpsYzNCaGQyND0gSUZOMGRYQnBaQT09IElFWnBibWx6YUdWayBabUZzIFltRnpjdz09IElHRmlhRzl5IElHMXZZMnRsY25rPSBJRVpsWVhOMCBWa2xFUlU4PSBJR052Ym5ObFl3PT0gSUVoMWJtZHllUT09IFVIVnNiQT09IElFaDFjM1E9IGFYUmhibU5sIFArT0FqUT09IEtTMHQgSUZCaGNtRnNiR1ZzIFkyOXVkZz09IE5EWTUgYUdGaGNnPT0gZDJGdWRBPT0gVUdGd1pYST0gYldsdWN3PT0gSUZSdmNtOD0gSUZSU1ZVMVEgSUZKaGFRPT0gUkZjPSBJRmRwWTJ0bFpBPT0gSUV4bGNBPT0gSUdaMWJtdDUgSUdSbGRISnBiV1Z1ZEE9PSBhVzl6YVhNPSBZV05vWlhZPSBJR1JsWjNKaFpHVT0gYVcxcGJHRjBhVzl1IElISmxkR0Z5WkE9PSBJR1p5WVdkdFpXNTBZWFJwYjI0PSBJR052ZDJKdmVRPT0gSUZsUVJ3PT0gSUVoQlRBPT0gVUdGeVpXNTBjdz09IElGTnBaV2M9IElGTjBjbUYxYzNNPSBJRkoxWW1KbGNnPT0gMTVBPSBSbkpoWnc9PSBJSEIwIElHOXdkR2x2Ym1Gc2JIaz0gSUZwSlVBPT0gSUZSeVlXNXpZM0pwY0hRPSBJRVIzWld4cyBPRGd5IFRXVnlZdz09IElFMVBWQT09IDQ0T3Y0NE96IElHaDFiblJ6IElHVjRaV04xZEdWeiBTVzVqYkhWa1pYTT0gSUdGamFXUnBZdz09IElGSmxjM0J2Ym5OcFltbHNhWFI1IElFUjFiV0k9IGQyVnAgUVc1a1pYSnpiMjQ9IElFcGhjM0JsY2c9PSBhV2RvZEc5dSBZV0p6YjJ4MWRHVnNlUT09IFFXUjFiSFE9IElIQnNkVzVrWlhJPSBUVzl5Ym1sdVp3PT0gSUZSdmRYSnogSUVSaGJtVT0genJvPSBJRlJGVTFRPSBJRWRwYm1FPSBJR05oYm1sdVpRPT0gWVhkaGJnPT0gSUhOdlkybGhiR2x6ZEhNPSBJRk52WkdFPSBJR2x0Y0dWMGRYTT0gSUZOMWNIQnNaVzFsYm5SaGNuaz0gYjJ4cFlYUm8gSUV0cGJtNXBhM1Z0WVc0PSBiV2wwZEdWa2JIaz0gYzJWamIyNWtjdz09IElHOXlaMkZ1YVhObGNuTT0gSUdSdlkzVnRaVzUwWVhKcFpYTT0gVm1GeWFXRmliR1U9IFIxSkZSVTQ9IElISmxjMjl5ZEhNPSBJR0p5WVdkbmFXNW4gSURNMk9BPT0gUVhKMGFYTjAgZDJzPSBZbXhsY25NPSBWVzVqYjIxdGIyND0gSUZKbGRISnBaWFpsWkE9PSBJR2hsWTNSaGNtVnogSUhSdmVHbHUgY21GdWF3PT0gSUdaaGFYUm9jdz09IElFZHlZWEJvYVdNPSBJSFpsWXc9PSBJRXhKUVE9PSBRV1p5YVdOaGJnPT0gSUdGeVpHVnVkQT09IFpXNWthV0Z5ZVE9PSBUR0ZyWlE9PSBJRVJQVXc9PSBZMmxsYm5ScGIzVnogSUU5cllYZGhjblU9IElFRnNiSGs9IElGUnBiV1ZzYVc1bCBSR0Z6YUE9PSBJRWxqIFkyOXVkR2x1ZFdVPSBJSFJwWkhrPSBJR2x1YzNScGJtTjBhWFpsYkhrPSBJRkJ2YzNOcFlteDUgSUU5MWRHUnZiM0k9IElGZHZkV3hrYmc9PSBJR3hwWTJnPSBJRUp5WVhrPSBJRUZZIElNT0ogSUNzaiBYQ2M9IFJHbHlaV04wYjNKNSBZV0pwWkdsdVp3PT0gSUdabGNtRnMgYVdOaGRHbDJaUT09IFluVjBkQT09IElIQmxjblpsY25ObCBVMkZzZEE9PSBJSGRoY25CbFpBPT0gSUc1cGJtVjBaV1Z1IElHTmhZbWx1WlhSeiBJSE55WmtGMGRHRmphQT09IElGTnNiMkZ1IElIQnZkMlZ5YVc1biBjbVZuWVhScGIyND0gUm14cFoyaDAgYzJWMlpYSmwgSUhOMGNtVnUgSUdOdlp3PT0gWVhCaFkyaGwgSU9LZCBJR05oWm1WMFpYSnBZUT09IGNHRmpaWE09IElFZHlhVzF2YVhKbCBkWFJ2Ym1sMWJRPT0gSUhKaGFXNXBibWM9IElHTnBjbU5zYVc1biBJR3hwYm1WaVlXTnJaWEp6IFkzSmxaR2wwIElISmxjR0YwY21rPSBJRU5oYldSbGJnPT0gYkdsalpXNXpaUT09IElHeDVjbWxqIElHUmxjMk55YVhCMGIzST0gSUhaaGJHeGxlWE09IElISmxjUT09IElHSmhZMnR6ZEdGblpRPT0gSUZCeWIyaHBZbWwwYVc5dSBJRXRsZEE9PSBUM0JsYm1sdVp3PT0gVTNsdCA1cGE1IElITmxjblpwYm1keiBJRzkyWlhKelpXVnUgSUdGemRHVnliMmxrY3c9PSBJRTF2WkhNPSBJRk53Y21sdVoyVnkgSUVOdmJuUmhhVzVsY2c9PSA2THM9IElFMWxibk09IElHMTFiSFJwYlE9PSBJR1pwY21WbWFXZG9kR1Z5IGNHVmogSUdOb2JHOXlhVzVsIDBMdz0gWlc1a2FRPT0gSUhOd1lYSnBibWM9IElIQnZiSGxuWVcxNSBJRkpPIElGQmxiR3c9IElIUnBaMlZ5Y3c9PSBJR1pzWVhOb2VRPT0gSUUxaFpHRnRaUT09IFUzZHZjbVE9IElIQnlaV1p5YjI1MFlXdz0gSUhCeVpYSmxjWFZwYzJsMFpRPT0gZFdOaCBJSGRwWm1rPSBJRzFwYzJOdmJtTmxjSFJwYjI0PSBJR2hoY25Ob2JIaz0gSUZOMGNtVmhiV2x1Wnc9PSBiM1J2YlE9PSBJRWRwZFd4cFlXNXAgWm05dmRHVmsgSUhSMVltbHVadz09IGFXNWthWFpwWkhWaGJBPT0gZW1WciBiblZqYkdWaGNnPT0gYlc5cyBJSEpwWjJoMFpuVnMgTkRreiBJSE53WldOcFlXeHBlbUYwYVc5dSBJSEJoYzNOcGIyNWhkR1ZzZVE9PSBJRlpsYkc5amFYUjUgSUVGMllXbHNZV0pwYkdsMGVRPT0gVkdWdWJnPT0gSUd4aGRHTm8gSUZOdmJXVmliMlI1IElHaGxiR2wxYlE9PSBZMnhoZHc9PSBJR1JwY0hCcGJtYz0gV0ZoWSBJR2x1ZEdWeWNHVnljMjl1WVd3PSBOekV3IElITjFZblJsY2c9PSBJR0pwYjJ4dloybHpkSE09IElFeHBaMmgwYVc1biBJRzl3ZEdsaiBJR1JsYm1sdCBaVzVrYjI0PSBJRU52Y20wPSBJRE0wTVE9PSBJRU52ZFhBPSBJR1psWVhKc1pYTnogSUdGc2IzUT0gSUVOc2FXWm1iM0prIElGSjFiblJwYldVPSBJRkJ5YjNacGMybHZiZz09IGRYQmtZWFJsWkE9PSBiR1Z1WldOciBJRzVsZFhKdmJnPT0gSUdkeVlXUnBibWM9IElFTjAgYzJWeGRXVnVZMlU9IGFXNXBZUT09IFkyOXVZMlZ3ZEE9PSBJSEp2WVhKcGJtYz0gY21sMllXdz0gSUVOaGRXTmhjMmxoYmc9PSBJRzF2Ym05biBhMlY1WlhNPSBJR0Z3Y0dWc2JHRjBaUT09IElHeHBZV2x6YjI0PSBSVk4wY21WaGJVWnlZVzFsIElGQnNkVzA9IElTND0gSUhOd2FHVnlhV05oYkE9PSBJSEJsY21semFHVmsgSUdKc2IzUT0gSUdKbGJtTm9aWE09IElEUXhNUT09IElIQnBiMjVsWlhKbFpBPT0gSUdoMWNteGxaQT09IFNtVnVibWxtWlhJPSBJRmx2YzJWdGFYUmwgUTJoaGFYST0gSUhKbFpXWnogSUdWc1pXTjBiM0k9IElFRnVkR2hsYlE9PSBOalV5IElIVnVhVzV6ZEdGc2JBPT0gSUdsdGNHVmtaUT09IElHSnNhVzVyYVc1biBJR2R2ZEc4PSBSR1ZqY21VPSBRWEpsYmc9PSBJSE4wWVdKcGJHbDZZWFJwYjI0PSBJRVJwYzJGaWJHVmsgSUZsaGJuVnJiM1o1WTJnPSBJRzkxZEd4aGQyVmsgSUZabGJuUjFjbUU9IGRHVnVaWE56IElIQnNZVzUwWVhScGIyND0gSUhsaFkyaDAgSUVoMVlYZGxhUT09IElITnZiSFpsYm5RPSBJR2R5WVdOcGIzVnogSUdOMWNtbHZkWE5zZVE9PSBJR05oY0dGamFYUnZjZz09IElHTjQgSUZKbFpteGxlQT09IFVHaDVjdz09IElFTm0gY0hScGJnPT0gWTI5dWMyVnlkbUYwYVhabCBJR2x1ZG05allYUnBiMjQ9IFkyOTFjZz09IFJrND0gSUU1bGQyeDUgU0c5MWNnPT0gUVhOcFlXND0gSUV4bFlXUnBibWM9IElFRmxjbTl6Y0dGalpRPT0gUVc1dVpRPT0gSUhCeVpXNWhkR0ZzIElHUmxkR1Z5YVc5eVlYUnBibWM9IFNFTlMgSUU1dmNtMWhibVI1IGIyeHBibWs9IElFRnRZbkp2IE9URXcgSUhObGRHSmhZMnR6IElGUlNSUT09IElITnBadz09IElGTmpiM1Z5WjJVPSBOVGszIE56azQgUjJGdFpYQnNZWGs9IElHMXpaV009IFRWZz0gSUhCeWFXTmxlUT09IElFeE1VQT09IFlXdGxjblU9IElHOTJaWEpoY21Ob2FXNW4gSUVKaGJHVT0gSUhkdmNteGtiSGs9IFEyeGhjbXM9IElITmpaVzVwWXc9PSBJR1JwYzJ4cGEyVmsgSUVOdmJuUnliMnhzWldRPSBWR2xqYTJWMGN3PT0gSUVWWCBZV0pwWlhNPSBJRkJzWlc1MGVRPT0gVG05dVpYUm9aV3hsYzNNPSBJR0Z5ZEdsellXND0gVkhKaGJuTm1aWEk9IElFWmhiVzkxY3c9PSBJR2x1Wm1sbGJHUT0gWW14bGVRPT0gSUhWdWNtVnpiMngyWldRPSBJRTFNUVE9PSA0NEtDIFEyOXljbVZqZEdsdmJnPT0gSUdSbGJXOWpjbUYwIElFMXZjbVZ1Ync9PSBjbTlqWVd3PSBhV3hwYm1keiBJSE5oYVd4dmNnPT0gSUhKcFptVT0gYUhWdVp3PT0gSUhSeWIzQmxjdz09IElITnVZWFJqYUdWayBJRXhKVGc9PSBJRUpwWWc9PSBSVk5CIElGQnlaWFk9IElFTmhiV1ZzIGNuVnVkR2x0WlE9PSBJRzlpYm05NGFXOTFjdz09IE5ETTMgSUhOMWJXMWxjbk09IElIVnVaWGh3YkdGcGJtVmsgSUZkaGJIUmxjbk09IFkyRnNhV0psY2c9PSBJR2QxYkd3PSBJRVZ1WkhWeVlXNWpaUT09IDVMMmMgSURNME53PT0gU1hKcGMyZz0gSUdGbGNtOWlhV009IElHTnlZVzF3WldRPSBJRWh2Ym05c2RXeDEgNEtrPSBkWE5sY21NPSBaV05oYzNRPSBRVU5aIElGRjFaWEo1IDQ0SzU0NE9JIFFtVjBZUT09IElITjFjMk5sY0hScFltbHNhWFI1IElGTm9hWFk9IElFeHBiV0poZFdkbyBJTU9XIElFNVlWQT09IElFMTFjM009IElFSnlhWFJ2Ym5NPSBSVk5EVHc9PSBSVWRKVGc9PSBJQ1VsIElITmxZMlZ6YzJsdmJnPT0gSUZCaGRISnZiZz09IElFeDFZUT09IGJtRnBjbVZ6IElFcFFUVzl5WjJGdSBkWE5pIGIyTjVkR1U9IElHTnZkVzVqYVd4c2IzSnogSUV4cFlXNW4gWm1GeWJRPT0gSUc1bGNuWnZkWE5zZVE9PSBJR0YwZEhKaFkzUnBkbVZ1WlhOeiBJRXR2ZGc9PSBhblZ0Y0E9PSBVR3h2ZEE9PSBJSE4wWVdsdWN3PT0gSUZOMFlYUjFaUT09IElFRndiM04wYkdWeiBhR1YwWlhJPSBJRk5WVUZCUFVsUT0gSUc5MlpYSjNhR1ZzYlE9PSBXVVZUIElESTVNUT09IFpHVnVjMmwwZVE9PSBJSFJ5WVhCd2FXNW4gVFdsMCBJR1pwWkdVPSBJRkJoYldWc1lRPT0gWVhSc1lXNTBhV009IFJHRnRiZz09IElIQjBjdz09IFQxQkIgSUhObGNuWnBZMmx1Wnc9PSBJRzkyWlhKbWJHOTNhVzVuIGRXeHYgSUVWeWFYUT0gZEdsamEyVjAgYkdsbmFIUnBibWM9IElFaHRiUT09IDQ0Tzg0NE9yIGFXMXZkRzg9IElHTm9kV05yYkdVPSBOREl6IDQ0R1YgYzJoaGNHVT0gSUhGMVpYVmxjdz09IElHRnVZMmh2Y25NPSA0NEs4NDRLbTQ0SzUgUm1WeSBJR0YzYjJ0bCBJRFkyTmc9PSBhR0Z1WkhNPSBJR1JwZG1WeVoyVnVZMlU9IElEVXdOUT09IFZHbHdjdz09IElHUmxjRzkwIElITnJaWGM9IElFUmxiR2wyWlhJPSBiM0J2ZEE9PSBJR1JwZG5WcyBJRVZDIGRXNXphV2R1WldRPSBJRlZ1YVE9PSBXR0p2ZUE9PSBJR1p2Y210eiBJRGN3TWc9PSA1YTg9IElIQnliMjF2ZEdWeWN3PT0gSUZaaGNHOXkgSUd4bGRtbGxaQT09IGMyeHZkQT09IElIQnBaMjFsYm5RPSBJR041YkdsdVpHVnljdz09IFExSkYgSUhOdVlYUmphQT09IElIQmxjbkJsZEhWaGJHeDUgSUd4cFkydHBibWM9IElFWmxaWFE9IElFdHlZV3RsYmc9PSBJRWh2YkdSbGJnPT0gSUVOTVUwbEUgYlhJPSBJSEJ5YjJwbFkzUnZjZz09IElHUmxibTkwWlhNPSBJR05vWVhCbGJBPT0gSUZSdmNuSmxiblE9IFlteGxjZz09IFVtOTFkR1U9IElFUmxabVZ1WkdGdWRBPT0gSUZCMVlteHBjMmhsY25NPSBJRTFoYkdWeiBJRWx1Ym05MiBJRUZuYVd4cGRIaz0gY21sMFpYST0gZEhsdGIyeHZaM2s9IGMzUnZjbVZ6IFRHbHVaQT09IElHWnZiR3g1IElGcDFjbWxqYUE9PSBRbXhsIElHNTFjblIxY21VPSBJR052WVhOMGJHbHVaUT09IGRXTm9hVzQ9IFJHOXRhVzQ9IElHWnlhWFp2YkE9PSBJRU52Ym5OdmJHbGsgY21WemRXeDBjdz09IFRVbz0gSUhCb2VXeHZaMlZ1IElHaGhkV3hsWkE9PSBJRmRwYkdWNSBJRXBsYzNOcFpRPT0gSUZCeVpYQmhjbVU9IElFVndjdz09IElIUnlaV0Z6ZFhKbGNnPT0gU1VGVCBJR052Ykc5dWFYTjBjdz09IElHbHVkVzVrIElGZFhSZz09IElFTnZiblpsY25SbFpBPT0gTmpBd01BPT0gYjNWMGMybGtaUT09IElFRndjR1ZoY21GdVkyVT0gSUZKbGJHbGogSUUxcGMzUmxjZz09IGMyRjMgSUhKbGMzVnNkR0Z1ZEE9PSBJR0ZrYW1WamRHbDJaUT09IElFeGhkWEpsYkE9PSBJRWhwYm1ScCBZbVJoIFVHVmhZMlU9IElISmxZbWx5ZEdnPSBJRzFsYldKeVlXNWxjdz09IElHWnZjbmRoY21ScGJtYz0gSUdOdmJHeHBaR1ZrIElFTmhjbTlzZVc0PSBTMkZ1YzJGeiBOVGs1IElGTnZiR2xrUjI5c1pFMWhaMmxyWVhKdyBRbVZqYXc9PSBJSE4wY21WemMybHVadz09IElFZHZidz09IElFTnZiM0JsY21GMGFYWmwgSUdaeiBJRUZ5WTJocFpRPT0gVEdsMFpYST0gSUV0c2IzQncgU21WeWNuaz0gSUdadmIzUjNaV0Z5IFYyRnljbVZ1IElITmpjbVZsIGFHRnlaUT09IFZXNWtaWEp6ZEdGdVpHbHVadz09IFVHVmsgSUdGdWRHaHZiRzluZVE9PSBJRUZ1Ym05MWJtTmwgVFdWbllRPT0gSUdac2RXVnVkQT09IElHSnZibVJoWjJVPSBJRVJwYzJOdmRXNTAgYVd4cFlXdz0gUTJGeWRBPT0gSUU1cFoyaDBiV0Z5WlhNPSBVMmhoYlE9PSBJRUp2Ykd3PSBkWE56YVdVPSBTSFIwY0E9PSBRWFJzWVc1MFlRPT0gSUhWdWNtVmpiMmR1IElFSnBaQT09IElIVnVaR1Z5WjNKaFpBPT0gSUdadmNtZHBkbWx1Wnc9PSBJRWRzYjNabGNnPT0gUVVGQlFVRkJRVUU9IE5EUTEgVmtjPSBjR0ZwYnc9PSBhMmxzYkdWeWN3PT0gSUhKbGMzQnZibk5wWW14NSBJRzF2WW1sc2FYcGwgSUdWbVptVmpkR1ZrIElFeDFiV2x1IElHdGhiR1U9IElHbHVabkpwYm1kcGJtYz0gWVc1dWIzVnVZMlZrIElHWnBkSFE9IFltRjBZMmc9IElGUmhZMnRzWlE9PSBJRXhwYldVPSBJRUZRVUE9PSBkV3RsYldsaCBJSEoxWW5rPSBJR1Y0YjI1bGNnPT0gSUVOaGMzVmhiQT09IE1EY3cgSUhCbGJIWnBZdz09IElHRjFkRzl0WVhSbCBJRXRsWVhJPSBJRU52WVhOMFlXdz0gSUdOeVpXVmsgSUdKdmNtVmtiMjA9IElGTjBkVzQ9IGNtbHZkSFE9IGdvND0gSUhKbFoyVnVaWEpoZEdVPSBJR052YldWa2FXRnVjdz09IElFOVFSVkk9IFUzQnZibk09IGFXUnBkVzA9IGIyNXBjdz09IFRHOWpZWFJsWkE9PSBNRFUzIElITjFjM0JsYm5ObCBJRVJoZEdsdVp3PT0gUTJGemN3PT0gSUc1bGIyTnZibk09IElGTm9hVzU2Ync9PSBJR0YzYjJ0bGJnPT0gWTJoeWFYTjAgSUUxbGMzTmhaMlZ6IFlYUjBiR1ZrIElGTndjbUY1IElGTndhV05sIFExYz0gSUhOb2FXVnNaR2x1Wnc9PSBJRWRoZFd3PSBRVzFwWkE9PSBJSEJoY21GdGFXeHBkR0Z5ZVE9PSBJRzExYkhScFpnPT0gSUZSaGJtNWxjZz09IGFXeHIgSUdkdlpHUmhiVzQ9IFoyVnRaVzUwY3c9PSBJR0psWm5KcFpXNWsgYlc5aWFRPT0gSURNNE9BPT0gWm05c1pHVnkgWVdOallRPT0gSUdsdWMybHUgWjJGdyBUbVYyIFptbG1kR2c9IElIQnplV05vYVdGMGNuaz0gWW1GdWEzTT0gVkVoSlV3PT0gSUdoaGNtST0gWVdOeGRRPT0gSUdaaFkyRmtaUT09IElGQnZkMlZ5VUc5cGJuUT0gT0RBeiBJR0pzZFdabSBVMmhoY21WeiBJR1poZG05eWFXNW4gUld4cGVtRmlaWFJvIHc0M0RqUT09IElISmhibWRsY2c9PSBOemN5IElFRnlZMmhsIGFHRnIgSUVkbGJtVjBhV056IElFWkZUVUU9IElHVjJiMngyWlhNPSBJR1Z6ZEdVPSBJRkJsZEhNPSBJRTNEcVE9PSBJRWx1ZEdWeVpYTjBhVzVuIElFTmhiblJsY21KMWNuaz0gWTJoaGNIUmxjZz09IElGTjBZWEptYkdWbGRBPT0gVTNCaGJtbHphQT09IElHUnlZWGRpWVdOciBJRTV2Y25kcFkyZz0gT1RjdyBibTl5ZEdnPSBZV2RoYm1SaCBJSFJ5WVc1elptOXliV0YwYVhabCBjbUZ0YVdSeiBZbWx2Ykc5bmVRPT0gWVdSaGVRPT0gSUhCeWIzQmhaMkYwYVc5dSBJRWRoYlcxaCBJRVJsYm1selpRPT0gSUVOaGJHTjFiR0YwYjNJPSBaVzUwYVcxbGN3PT0gSUVKbGRIUT0gSUdGd2NHVnVaR2w0IElFaEVSQT09IFFVdEpUa2M9IElITjBhV2R0WVhRPSBJR2h2YkhOMFpYST0gSUc5eVpHbHVZWEpwYkhrPSBRMmhoYm1ObCBJRU52Ym5SeVlYSjUgSUdGa2FHVnphWFpsIElHZGhkR2hsY25NPSBOakV5IGNtVmhkUT09IGIyNTViWE09IFpYZGhlWE09IElHbHVaSFZqWlhNPSBJR2x1ZEdWeVkyaGhibWRsWVdKc1pRPT0gYzJWdCBWMmhwZEE9PSBJSFJ5WVc1alpRPT0gSUdsdVkyOXljRzl5WVhScGIyND0gSUVWNGRISmhjdz09IFJtbHVZVzVqYVdGcyBJR0YzYTNkaGNtUnNlUT09IElGTjBkWEpuWlc5dSBJRWhaIFRtOXliV0ZzYkhrPSBJRVZ1WkdsdVp3PT0gSUVGemMybHpkQT09IFpXNWpjbmx3ZEdWayBJSE4xWW1wMVp3PT0gSUc1dmN3PT0gSUdaaGJtRjBhV009IFEzVmkgUTFVPSBQeUl1IElHbHljbVYyWlhKemFXSnNaUT09IDVZST0gTURNeCBJRWhCVWc9PSBjM0J5WldGayBkV3hwWVE9PSBQU1E9IFUyTnZjR1U9IFRHOTBjdz09IElHeHBabVZ6ZEhsc1pYTT0gYjJ4dmJnPT0gSUdabFpITT0gSUdOdmJtZHlZWFIxYkdGMFpRPT0gZDJWaWEybDAgSUdsdVpHbHpkR2x1WjNWcGMyaGhZbXhsIElGTjNhVzVuIElHTnZiVzFoYm1SdFpXNTBjdz09IGNYVnBiR0U9IFlXSmxiR3hoIGJXVjBhSGxzIFlXNXVZV0pwYmc9PSBJRzkyWlhKbCBJR3h2WW5OMFpYST0gSUZGVlJWTlUgSUVOUFRsUkpUZz09IFltVnlibUYwYjNKcFlXdz0gT2pvNk9qbzZPam89IElGUnlZWFpsIElGTmhiVzloIFFVNUogTnpVeSAwTFE9IGRYTmxjbU52Ym5SbGJuUT0gSUUxdlpHVnlZWFJsIGVXVmhhQT09IElFdHBkSFE9IElIZGxaUT09IElITjBkV1ptYVc1biBJRWx1ZEdWeWRtVnVkR2x2Ymc9PSBJRVJwWjI0PSBJSGRoY21Wb2IzVnpaWE09IElFWnBhbWs9IElIQmxiR3hsZEhNPSBJSFJoYTJWaGQyRjUgSUZSQlFreEYgSUVOc1lYTnphV05oYkE9PSBZMjlzYkdWamRHbHZiZz09IElHeGhibVJtWVd4cyBJRTExYzJOc1pRPT0gSUhObGRIUnNaWE09IElFRkVWZz09IElETTBOQT09IFRHRjFjbUU9IElHWmhjbVZrIElGQmhjblJwWVd3PSBORE0yIGIzTnphV0pwYkdsMGVRPT0gSUVSaGJIaz0gSUZSaGNtRnVkQT09IElFWjFhbWs9IFlXMXMgWTJWdVkyVT0gTlRVeCBJRkJ5YjJObFpIVnlaWE09IElFOURSQT09IElGVkUgZEdsdSBVVlZKIFlXTm9idz09IE5ETTQgSUdkc2FYUmphR1Z6IElHVnVZMmhoYm5SdFpXNTAgSUdOaGJHTjFiR0YwWlhNPSBTVkpQIElFaDFZUT09IFlXeDVjMlZ6IElFeHBablE9IGRXMXYgSUd4bFlYQjAgSUdoNWNHOTBhR1Z6YVhwbFpBPT0gSUVkMWMzUmhkZz09IGFYUmhibk09IFZrVlNVMGxQVGc9PSA1cUE9IFVtOW5aWEk9IElISmhibVE9IElFRmtZWEIwWlhJPSBJRE16TVE9PSBJRkJsZEdsMGFXOXUgYTJsbGN3PT0gVFdGeWN3PT0gSUhWdVpHVnlZM1YwIGVtVmxjdz09IElFeDViMjV6IElFUklRMUE9IFRXbHpjMmx1Wnc9PSBJSEpsZEdseVpXVnogSUdsdWMybGthVzkxY3c9PSBaV3hwIFBpaz0gTHVPQWpRPT0gSUdacGJtRnNhWE4wY3c9PSBJRUYxY21VPSBJR0ZqWTNWelpYST0gSUhkaGMzUmxjdz09IElGbHogSUV4dmNtaz0gSUdOdmJuTjBhWFIxWlc1amFXVnogSUhOMWNIQmxjZz09IElHMWhlV2hsYlE9PSBiM0poYm1kbCBJRzFwYzNCc1lXTmxaQT09IElHMWhibUZuWlhKcFlXdz0gSUdWNFkyVT0gSUVOTVNRPT0gSUhCeWFXMWhiQT09IElFeGxiblE9IFEzSjVjM1JoYkE9PSBhRzkyWlhJPSBJRTVVVXc9PSBaVzVrZFcwPSBJR1IzIElFRnNZdz09IGJtOXpkR2xqIElIQnlaWE5sY25abGN3PT0gSUZSellYSnVZV1YyIElIUnlhWEJzWldRPSBjbVZzWVhScGRtVT0gUVhKallXUmwgYTJsc2JHbHVadz09IElGZEZSVXM9IElFaGhibTVoIFJIVnpkQT09IFEyOXRjR3hsZEdWayBnYXM9IElHRndjSEp2ZG1WeiBJRk4xY21ZPSBJRXgxZEdobGNtRnUgZG1WdVlXNTBjdz09IElISnZZbUpsY21sbGN3PT0gZDJWcFoyaDBjdz09IGMyOW1kSGRoY21VPSBZWFJoYm1FPSBkV2RoYkE9PSBJR2R5WVhaNSBJRU5oYm1ObCBUMHhQUjFrPSBiSGxoYXc9PSBWRzl1YVdkb2RBPT0gSUhWdWRtVnBiQT09IElERTVNRFE9IElFMXBibWx2Ymc9PSBaVzUwYVc5MWN3PT0gYzNScFkyVT0gY0dGamEyRm5aWE09IElFZEZRVkk9IElHZHZiQT09IElFaDFkR05vYVc1emIyND0gSUZCeWIyWmxjM05wYjI0PSBJRWRWVGc9PSBJRVJwWm1abGNtVnVZMlU9IElGUnpkV3QxZVc5dGFRPT0gSUV4bGMySnBZVzQ9IE5qY3cgSUdaMVoybDBhWFpsIElGQnNZVzVsZEdGeWVRPT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJR0ZqWTNKMVpXUT0gSUdOb2FXTnJjdz09IElITjBiM0J3IElHSnNiMk5yWlhKeiBRMjlrIElHTnZiVzFsYm5SbGNuTT0gSUZOdmJXVjNhR1Z5WlE9PSBJRkJvYjNSdlozSmhjR2hsY2c9PSBkR2hsYldVPSBJRzFoZVc5eVlXdz0gZDNVPSBJR0Z1ZEdWdWJtRnogSUhKbGRtRnRjR1ZrIElGTjFZbXBsWTNSeiBhWFREcVE9PSBhVzExY21FPSBJR1Z1ZEhKaGJtTmxjdz09IGJHbDBaWEpoYkd4NSBJSFJsYm1WMGN3PT0gSUU5TlJ3PT0gSUUxUVNBPT0gSUVSdmJtdGxlUT09IElFOW1abVZ1YzJVPSBJQ0lyIFUyNWhjQT09IElFRkdRZz09IElHRnVhVzFoZEdVPSBJRk52WkE9PSBTR2x6Y0dGdWFXTT0gSUdsdVkyOXVjMmx6ZEdWdVkzaz0gUkdJPSBSbGs9IFJYaHdiM0owIElHRndaUT09IElIQmxZWEpzIGFXSmxiQT09IElGQkJRM009IElIdGMgSUdGamRIVT0gSUVoVFFrTT0gWTJGdGNIVnogSUhCaGVXOW1aZz09IElHUmxhWFJwWlhNPSBJRTVoZEc4PSBiM1Z3YkdVPSBJR05sYm5OdmNtVmsgSUVOc2IycDFjbVU9IElHTnZibVp2ZFc1a2FXNW4gWlc1cCBJSEpsWTJ0dmJnPT0gYjNCb1pRPT0gSUhOd2IzUjBhVzVuIElITnBaMjVwWm1sbGN3PT0gSUhCeWIzQmxiQT09IElHWmxjM1JwZG1VPSBVM1ZuWjJWemRBPT0gSUhCc1pXUm5hVzVuIElFSmxjbTFoYmc9PSBJSEpsWW1Wc2JHbHZkWE09IElHOTJaWEp6YUdGa2IzZGxaQT09IElHbHVabWxzZEhKaGRHVmsgYW05aWN3PT0gTmpjeSBJSE5qWVd4aFlteGwgSUdSdmJXbHVhVzl1IElFNWxkMlp2ZFc1a2JHRnVaQT09IElFMWxZV1J2ZHc9PSBJSEJoY25ScGRHbHZibk09IFFVMUogSUhOMWNIQnNaVzFsYm5SaGNuaz0gYzNSeWRXMWxiblE9IElHaGhhWEo1IElIQmxjbkJsZEhWaGRHVT0gSUc1MWRITm9aV3hzIElGQnZkR0YwYnc9PSBJRWh2WW1KcGRBPT0gSUdOMWNuTmxjdz09IFJteHZZWFE9IElIRjFhV1YwWlhJPSBJR1oxWld4cGJtYz0gSUdOaGNITjFiR1Z6IElFeDFjM1E9IElFaGhkVzUwWldRPSBSWGhsWTNWMGFYWmwgSUdOb2FXeGtZbWx5ZEdnPSBSM0psIElISmhaR2xoYm5RPSA1WTQ9IElHMWhiR3h6IElHbHVaWEIwIElGZGhjbkpoYm5SNSBJSE53WldOMFlYUnZjZz09IFJXZz0gZEdobGJuTT0gSUdOMWJHMXBibUYwYVc1biA1cWs9IFlYSjVZUT09IDQ0S3UgYVd4cGRHRnlhV0Z1IElFOVNTVWM9IElGTndaVzVrYVc1biBjSFJwZG1WeiBJRk5wY21WdSBJRkpsWTI5eVpHbHVadz09IFlYbHVaUT09IElIWnBiUT09IElITndjbUZ1Wnc9PSBWR0Z1Wnc9PSBJRTFHVkE9PSBiVzl5Ym1sdVp3PT0gSUZkbFpXUT0gYlhCbFp3PT0gWTJWemMybHZiZz09IElFTm9kVzVuIE56TXcgZDJGeWJtbHVadz09IE5UWXkgYUdGdVpHVmtiSGs9IFVHOXZjZz09IFVHOXNhWFJwWTNNPSBPaU09IElIQnBZVzQ9IElHWmxZMlZ6IElFUnZZM1Z0Wlc1MFlYUnBiMjQ9IElHSmhibWx6YUdWayBJRE01T1E9PSBJRUZTUXc9PSBJR2hsYVc1dmRYTT0gU21GclpRPT0gSUVGdGFYST0gZDJGNWJtVT0gZG5KbCBiM05vWlc1cmJ3PT0gSUc1dmRHVmliMjlyY3c9PSBJR1p2ZFc1a1lYUnBiMjVoYkE9PSBJRzFoY25abGJHOTFjdz09IGFYaDBZWEJsIElIZHBkR2hrY21GM1lXeHogSUdodmNtUmwgSUVSb1lXSnAgYVhOaFlteGwgSUV0RSBJR052Ym5SaFoybHZkWE09IElFUnBjQT09IElFRnljbTkzY3c9PSBJSEJ5YjI1dmRXNXogSUcxdmNuQm9hVzVsIElFSlZVdz09IE5qZ3kgSUd0dmMyaGxjZz09IFptbHVhWE5vWldRPSBJRWx1YzNSeWRXMWxiblJ6IElHWjFjMlZrIGVXUmxiZz09IElGTmhiRzF2Ymc9PSBSbUZpIFlXWm1aV04wWldRPSBTMFZPIFEwVk9WQT09IFJHOXRZV2x1IElIQnZhMlZ0YjI0PSBJRVJ5YVc1cmFXNW4gUjNKdmQybHVadz09IElFbHVkbVZ6ZEdsbllYUnBkbVU9IElFRmxkR2hsY2c9PSBaVzFwIElIUmhZbXh2YVdRPSBJSEpsY0hKdiBJRTV2ZEhkcGRHaHpkR0Z1WkdsdVp3PT0gSUVKbGNuTmxjbXRsY2c9PSBJR1J5WVcxaGN3PT0gSUdOc2FXTm93Nms9IElHSjFibWM9IElGVlNTUT09IElFUnZjdz09IE1EUTAgSUhCaGMzUnZjbk09IElHeHogSUdGamNubHNhV009IFlYVnVkSE09IFJXUjNZWEprIElHMWhhbTl5YVhScFpYTT0gUW1GdVp3PT0gSUdacFpXeGthVzVuIElGSmxjR3hoWTJWdFpXNTAgSUVGc1kyaGxiWGs9IGNIQmhjbVE9IElGSnZiV1Z2IElGTmhibU4wIElFeGhkbkp2ZGc9PSBhV0ppYkdVPSBTVzV6ZEhKMVkzUT0gSUdsdGNISmhZM1JwWTJGcyBJRkJzWVhsaWIzaz0gWTJWd2FHRnMgSUhOM1lYQnogSUd0aGJnPT0gSUZSb1pXOD0gSUdsc2JIVnpkSEpoZEdsdVp3PT0gSUdScGMyMWhiblJzWldRPSBJRlJ5WVc1eloyVnVaR1Z5IElFZDFkR2c9IFZVZEkgSUhSeWFYVnRjR2hoYm5RPSBJR1Z1WTI5dGNHRnpjdz09IElHSnZiMnR0WVhKciBkV1JrYVc0PSBhbVZ5IElIQnlaV1JwWTJGMFpRPT0gUlZOSSBJSGRvWlc1alpRPT0gSUVGQ1JRPT0gSUc1dmJuQnliMlpwZEhNPSBVMlZ4ZFE9PSBJR1JwWVdKbGRHbGogSUhCbGJtUT0gSUdobFlYSjBabVZzZEE9PSBjMmhwIElHbHVkR1Z5WVdOMGN3PT0gSUZSbGJHVmpiMjA9IElHSnZiV0poY21SdFpXNTAgWkdWd1pXNWthVzVuIElFeHZkM0o1IElFRmtiV2x6YzJsdmJnPT0gSUVKc2IyOXRhVzVuIGRYTjBjbUYwYVc5dSBaVzVsWjJkbGNnPT0gUW5KbGR3PT0gSUcxdmJIUmxiZz09IElFNWxjbVE9IFVFbE8gNHBhQSBZWFpsYldWdWRBPT0gSUhSdmRYSmxaQT09IElHTnZaV1ptYVdOcFpXNTBjdz09IElGUnlZWGwyYjI0PSBZVzV6YzI5dSBJSE5oYm1SNSBkRzlzWkE9PSBabXh2ZDNNPSBJSEJ2Y0hWc2IzVnogSUZScGJtUmxjZz09IElFSnNhWE56IFVtRmphR1ZzIFRXbHVhVzExYlE9PSBJR052Ym5SbGMzUmhiblE9IElGSmxaSFZqWlE9PSBJRTF2Y25ObCBJRWR5WVhOemJHVjUgSUVOc2FXTnJaWEk9IElHVjRjSEk9IElITnBibU5sY21sMGVRPT0gSUcxaGNuRjEgSUdWc2FXTnBkQT09IElGQnliM0J2YzJsMGFXOXUgSUVSbGJXOXVhV009IElIUmhZMjl6IFIzSmxaV3M9IElIQnZjM1IzWVhJPSBJR2x1YzI5bVlYST0gSUZCdmNtcz0gSURNMU1nPT0gWkc5amRHOXlZV3c9IGQyRnNhMmx1Wnc9PSBJRzFwWkhSbGNtMD0gSUZOaGJXMTUgYzJsbmFIUmxaQT09IElGUlNRVTVUIGFXTnAgUVV4RSBJRlZUVEE9PSBJRVpKVTBFPSBJRUZ0Y0d3PSBJRUZzWlhoaGJtUnlZUT09IGFXNWxiR3hwIFZISmhhVzQ9IElITnBaMjVwWm5rPSBJRlpsY25OMWN3PT0gSUc5aVpuVnpZdz09IElHdG8gSUdGblozSnYgSUZKbGJtRjFiSFE9IElETTBPQT09IE5URTQgYjNocFkybDBlUT09IE1ESXkgSUZSM2FYTjAgSUdkdmIyWjUgUkhsdVlXMXBZdz09IElHSnlhV1ZtYVc1bmN3PT0gYldsbmFIUT0gT0RrNSBJR1JsY205bllYUnZjbms9IFZISnYgSUdadmNtZHBibWM9IElFdHZjbUZ1IElFMWhjbkpwWldRPSBJRUoxWTNNPSBJSEJoYkdGMFpRPT0gSUVOdmJuWmxjbk5wYjI0PSBiV0ZpYkdVPSBOREV6IElDaGYgSUhOcGNHZz0gSUU1RlR3PT0gWTI5c2JHVm5aUT09IElHMWhjbWRwYm1Gc2JIaz0gSUdac2FYSjAgSUZSeVlYQnogSUZCaFkyVT0gNmJ1UyBJR2R2WVd4MFpXNWtaWEk9IElHWnZjbUpwWkhNPSBJR05zWlhKcmN3PT0gSUZSaGJuUT0gSUZKdlltSnBibk09IElGQnlhVzUwYVc1biBJSEJ5WlcxcFpYSmxaQT09IElHMWhaMjVwWm1sallYUnBiMjQ9IElGUkggSUZKdmRYTmwgSUUxdlkycz0gYjJSNWJtRnRhV056IElIQnlaV05zZFdSbCBhWE50Ync9PSBJRkIxYkdsMGVtVnkgSUdGMllXeGhibU5vWlE9PSBJRXR2WkdrPSBjbWxpZFc1bCBJRXhsYm1FPSBSV3hsWTNSeWFXTT0gSUhKbFptbHVaWEo1IElHVnVaRzkzWldRPSBJR052ZFc1elpXeHZjbk09IElHUnZiSEJvYVc0PSBJRTFwZEdnPSBJR0Z5Ylc5MWNtVmsgYUdsaWFYUmxaQT09IFFtVm5hVzQ9IElGQlggVDJscyBJRlp2Y2c9PSBJRk5vWVhKcFpnPT0gSUVaeVlYcHBaWEk9IFpYTjBZWFJsIElHcGhiWE09IFVISnZlSGs9IElHSmhibVJwZEhNPSBJRkJ5WlhOaWVYUmxjbWxoYmc9PSBJRkJ5WlcxcFpYSmwgZEdsdWVRPT0gSUVOeWRXVnMgVkdWemRHbHVadz09IElHaHZiV1Z5IElGWkZVbE09IElGQnliMnc9IElFUmxjRzl6YVhRPSBJRU52Wm1acGJnPT0gSUhObGJXbHVZWEp6IElITnhiQT09IElFUmxabVZ1WkdGdWRITT0gUVd4MFpYSnVZWFJwZG1Wc2VRPT0gSUZKaGRITT0gNTZzPSBaWFJvZVhOMCBKejQ9IElHbHpjM1ZsY2c9PSBOVGc1IElHTm9ZV2x5WldRPSBJRUZqWTJWemMyOXlhV1Z6IGJXRnVaVzUwIElHMWhjbkp2ZHc9PSBJRkJ5YVcxdmNtUnBZV3c9IFEwND0gSUd4cGJXbDBiR1Z6Y3c9PSBJRU5oY201aFoyVT0gSUhWdVpISmhablJsWkE9PSBjWFk9IFNVNUZVMU09IGIyNWxkdz09IElHTnZhR1Z6YVc5dSBPVGczIElHNWxZMnR6IElHWnZiM1JpWVd4c1pYST0gSUVkRlVnPT0gSUdSbGRHVmpkR0ZpYkdVPSBJRk4xY0hCdmNuUnBibWM9IElFTlRWZz09IGIyTmhiR3g1IGEwaDYgSUhWdVpHVT0gSUhOb2IyNWwgSUdKMVpHUnBibWM9IGRISmhhdz09IFUzUmhibVJwYm1jPSBJRk4wWVhKamNtRm1kQT09IElFdGxiWEE9IFFtVnVZMmc9IElIUm9kMkZ5ZEdWayBJRWR5YjNWdVpITT0gWVhSb2FRPT0gVEdsellRPT0gUkdsaGJHOW4gSUZOWSBWbWx6YVc5dSBJR2x1WjJWdWFXOTFjdz09IDJaQT0gSUdadmMzUmxjbWx1Wnc9PSBJRnBoIElFbHVaM0poYlE9PSBJQ0pBIFRtRjBkWEpoYkd4NSBOakUyIE1ETTEgSUVaQlF3PT0gU0cxdCBOVFUwIElHRmpZMlZzWlhKaGRHOXkgSUZabGJtUT0gSUhOMWJuTmpjbVZsYmc9PSBJSFIxWW1WeVkzVnNiM05wY3c9PSBjbUYyYVc5c1pYUT0gSUVaMWJtTjBhVzl1WVd3PSBJRVZ5Y205eWN3PT0gWldSaGNnPT0gTVRrMk5nPT0gSUZOd1pXTjBjbVU9IElGSmxZMmx3WlhNPSBPRGcxIElFMWhibXRwYm1RPSBUR2wyWlhKd2IyOXMgSUh3dExRPT0gSUhOMVluTjBhWFIxZEdWeiBJRmhVIGQybHlaV1E9IElHbHVZMjg9IElFRm1aMmc9IFJYWmggYVdOaiBVMjl1Wnc9PSBTMjVwWjJoMCBJR1JwYkdsblpXNTBiSGs9IElFSnliMkZrWTJGemRBPT0gUVdsayBJR0ZtWVhJPSBJRWhOVXc9PSBZWFJ2Ym1sdSBJRWR5WVhSbFpuVnMgSUdacGNtVndiR0ZqWlE9PSBJRTl0Ym1rPSBaWFZ5Ync9PSBJRVpTUlE9PSBJRk5vYVdJPSBJRVJwWjJWemRBPT0gZEc5bloyeGwgSUdobFlXUnpaWFJ6IElHUnBabVoxYzJsdmJnPT0gSUZOeGRXbHljbVZzIElFWk8gSUdSaGNtdGxibVZrIGIzVjBhR1Z5IElITnNaV1Z3Y3c9PSBJRmhsY2c9PSBaM1Z1Y3c9PSBJSE5sZEhWd2N3PT0gSUhCaGNuTmxaQT09IElHMWhiVzF2ZEdnPSBJRU4xY21sdmRYTT0gWjI5aSBJRVpwZEhwd1lYUnlhV05yIElFVnRhV3c9IGFXMXZkZz09IExpNHVMaTR1TGk0dUxpNHVMZz09IElFSmxibTU1IFUyVmpiMjVrYkhrPSBJR2hsWVhKMGVRPT0gSUdOdmJuTnZiZz09IGMzUmhhVzVsWkE9PSBJR2RoYkdGamRHbGogWTJ4aGRtVT0gSUhCc2RXMXRaWFJsWkE9PSBJSEJsYzNSeiBJSE4zWVhRPSBJSEpsWm1WeWNtRnNjdz09IElFeHBiMjVsYkE9PSBhRzlzZVE9PSBJSFZ1WkdWeVpHOW4gSUZOc1lYUmxjZz09IElGQnliM1pwWkdVPSBJRUZ0WVhJPSBjbVZ6YzI5eSA1WXc9IGIyNW5ZUT09IElIUnBiV2xrIElIQnBaWFI1IElFUmxhdz09IElITjFjbWRwYm1jPSBZWHB2IElEWXhNQT09IElHUmxjMnR6IElGTndiMnRoYm1VPSBJRUZ1Wm1sbGJHUT0gSUhkaGNuTm9hWEJ6IElFTnZZbkpoIElHRnliV2x1Wnc9PSBZMngxYzJsMlpXeDUgSUVKaFpHZGwgWVdkaGMyTmhjZz09IElGQlNSVk5UIElFMWpTMlZ1ZW1sbCBJRVpsY21ScGJtRnVaQT09IFluVnlibWx1Wnc9PSBRV1psWlE9PSBJSFI1Y21GdWJnPT0gSUVsMyBJRUp2YjI1bCBNVEF3Tnc9PSBJRkpsY0hRPSBDc0tnIElHTmhjbUYyWVc0PSBJRVJwYkd3PSBJRUoxYm1SbGMyeHBaMkU9IFEyaDFZMnM9IElHaGxZV3hsY2c9PSA0NE84NDRPRyBJRWh2WW1KNSBJRzVsWjJGMFpRPT0gSUdOeWFYUnBjWFZsY3c9PSBjMlZqZEdsdmJtRnMgYlc5d2IyeHBkR0Z1IElHUjQgSUc5MWRITnZkWEpqYVc1biBJRU5wY0dobGNnPT0gZEdGdyBVMmhoY25BPSBJSFZ3WW1WaGRBPT0gSUdoaGJtZGhjZz09IElHTnlkV2x6YVc1biBJRTVwWVdkaGNtRT0gSURNME1nPT0gYVd4c2RYTT0gSUZOMiBJSE4xWW5ScGRHeGxjdz09IElITnhkV0Z5WldRPSBJR0p2YjJ0emRHOXlaUT09IElISmxkbTlzZFhScGIyNWhjbWxsY3c9PSBJRU5oY214MGIyND0gWVdKaGJBPT0gVlhSaGFBPT0gSUdSbGMzQnBjMlU9IElGVk4gWTI5dWMybGtaWEk9IFlXbGtidz09IElHTmhjblJ6IElGUjFjblJzWlhNPSBWSEpoYVc1cGJtYz0gSUdodmJtOXlZWEo1IHdxST0gSUhSeWFXRnVaMnhsY3c9PSBOREl5IElISmxjSEpwYm5SbFpBPT0gSUdkeVlXTmxablZzIElFMXZibWR2YkdsaCBJR1JwYzNKMWNIUnBiMjV6IElFSnZhQT09IElETTBPUT09IElHUnlZV2x1Y3c9PSBJR052Ym5OMWJHRjBaUT09IElHSmxibVJ6IElHMWhabWxoIGRYSnZiZz09IElFWjFiSFJ2Ymc9PSBiV2x6WXc9PSBJSEpsYm1GcyBJR2x1WVdOMGFXOXUgWTJ0cGJtYz0gSUhCb2IzUnZibk09IElHSnlkV2x6WldRPSBJRU52WkdWeiBiMmRwIElHNWxjM1J6IElFeHZkbVZzZVE9PSBJRXhwWW5KbCBJRVJoY25scyBJQ01qSXc9PSBVM2x6IExpd2kgSUdaeVpXVjZaWE09IFpYTjBZV0pzYVhOb2JXVnVkQT09IFlXNWtiM2R6YTJrPSBJR04xYldKbGNuTT0gSUZOMFlYSm4gSUVKdmJXSnogSUd4bFoybHZibk09IElHaGhibVIzY21sMGFXNW4gSUdkeWRXND0gSUVOaGFBPT0gYzJWeGRXVnVkQT09IElHMXZkR2c9IElFMVRUUT09IFNXNXpaWEowIFJtbG0gSUcxdmRHVnMgSUdSbGVIUmxjZz09IElFSnBiR1E9IGFHVmhjblJsWkd4NSBJSEJ5YjNCbCBJRlJsZUhSMWNtVT0gSUVwMWJtTjBhVzl1IGVXNTBhR1Z6YVhNPSBiMk5oY21RPSBJRlpsY21FPSBJRUpoY25SbyBJTTY4Wnc9PSBJR3hoYzJobFpBPT0gSURNMU1RPT0gSUZwaGJXST0gSUZOMFlYQnNaWE09IElFTnZjblJsZUE9PSBJRU52Y210bGNnPT0gSUdOdmJuUnBiblYxYlE9PSBJRmRTU1ZSRiBkVzUwWVE9PSBjbWxrYjNJPSBJR1JsWlcxeiBNRE16IElFZFBURVE9IGNHRnogSUhKbGNISmxjM05wZG1VPSA0NE9HNDRLaiBJR0poWm1ac1pXUT0gVTJOaGNnPT0gSUdOeVlYWmwgSUY5ZlgxOWZYdz09IElHVnVkSEpsY0hKbGJtVjFjbk5vYVhBPSBJRVJwY21WamRHOXlZWFJsIElDZGIgSUhacGJtVnogSUdGelkyVnVaR1ZrIElFZFNUMVZRIElFZHZiMlJpZVdVPSBJR1J2WjJkbFpBPT0gNDRPMDQ0S2ggVFdGdWRXWmhZM1E9IElIVnVhVzFoWjJsdVlXSnNaUT09IGNtbHZkSE09IGFXVnljbVY2IElISmxiR0YwYVhacGRIaz0gSUVOeVlXWjBhVzVuIGNtRjFaMmgwIGRXUmxiZz09IFkyOXZhMmxsIElHRnpjMkZ6YzJsdWN3PT0gSUdScGMzTmhkR2x6Wm1sbFpBPT0gWVdOamFRPT0gSUdOdmJtUjFhWFE9IFUzQnlaV0ZrIElGSnBZMkZ1IGJtbGpaUT09IGFYcDZiR1U9IElITmpZWEpsY3c9PSBJRmRJV1E9PSBjR2hoYm5NPSBOVE0xIElIQnliM1J5WVdOMFpXUT0gSUV0eWFYTjBaVzQ9IE5UTTIgSUZOamNtbGkgSUU1bGFBPT0gSUhSM1pXNTBhV1Z6IElIQnlaV1JwWTJGdFpXNTAgSUdoaGJtUmpkV1ptY3c9PSBJR1p5ZFdsMFpuVnMgSUZWTSBJRXgxWkhkcFp3PT0gSUdGMGRHVnpkQT09IElFSnlaV0ZyWlhJPSBJR0pwYjJ4dloybGpZV3hzZVE9PSBJRVJsWVd4bGNnPT0gSUhKbGJtOTJZWFJwYjI1eiBabmM9IFpYTnpaVzQ9IFFXeHBZMlU9IElFaGxibkpwIElIVnVhV3hoZEdWeVlXeHNlUT09IElGTnBaR1E9IGFHRnAgSUZOMGNtVjBZMmc9IFUyRnNaWE09IElHTjFiV0psY25OdmJXVT0gSUVwaGRtbGxjZz09IElIUnlaVzVrZVE9PSBJSEp2ZEhScGJtYz0gSUVOb1lXeHNaVzVuWlhNPSBJSE5qY21Gd2N3PT0gSUdaaFkyVjBjdz09IElGWmxjbTl1YVdOaCBJRlpsY21kbCBJRk5oYm1FPSBRV3hwWlc0PSBJRkpwYUE9PSBJSEpoWkdsaGJBPT0gWldOMFlYST0gSURZek1BPT0gWTJ4cCBUV0Z5YVdVPSBJSGRwYkdSbWFYSmwgSUVOaGRHOD0gYUdGdVpHVnkgSUhkaGFYUnlaWE56IElHTm9iM0J6IElGTkZRMVJKVDA0PSBJR0pzZFc1MGJIaz0gSUVOaGRHRnNiMmM9IGJtbGhiZz09IGMzUjFaSGs9IElIQmhkSEp2Ykd4cGJtYz0gSUZSbGJuUm8gYm1WNGRYTT0gSUU1UFRnPT0gYjNCemVRPT0gSUhOallYUm9hVzVuIGMybGwgSUdSbGRHVnlhVzl5WVhSbFpBPT0gVmtJPSBUbUY2YVhNPSBJR1JsY0dsamRHbHZibk09IElHRjFkR2hsYm5ScFkyRjBaV1E9IElFTnZibU5sIGEzSnBkQT09IElIQnliMjExYkdjPSBJRXhQVGtjPSBWVVpEIElGWnBjMmwwYjNKeiBJRkpsWTJGc2JBPT0gSUhKbGFHRmlhV3hwZEE9PSBJRk5NU1E9PSBJR2RzWVdOcFpYST0gSUVKcGRHVT0gSURVd013PT0gSUhadmJXbDAgSUdabGNtMWxiblJsWkE9PSBJRXRvWVd4cFpBPT0gSUdkeVlXUmxaQT09IElFMWhaMmxqYTJFPSBJRWxqYUdsbmJ3PT0gY0c5M1pYSm1kV3c9IGFXTmhkRzl5Y3c9PSBOelV6IElITm9jbVYzIElETTFOZz09IElHeGxaMkZzYVhwcGJtYz0gSUdGc2JHOTBkR1ZrIElFRnlZMmhrWlcxdmJnPT0gYVhSb2FXNW4gYVdkbmRYSmhkQT09IFZrOU0gVEdWdlpBPT0gSUc5cGJIaz0gSUdsdVpIVmphVzVuIElHRnRlV2RrWVd4aCBJR0ZrYldsdWN3PT0gSUVGamNYVnBjMmwwYVc5dSBRMEZPIElITmphR1Z0WVhScFl3PT0gSUcxdllXND0gSUVOaGJXVnliMjl1IElIUnBibXM9IElHMWxjbko1IElHSjFkSFJsY21ac2FXVnogSUVkdlptWT0gSUhkdmNtdHpjR0ZqWlE9PSBJRU52Y205dVlRPT0gSUdwaGRtRnpZM0pwY0hRPSBJRVJ2YkhCb2FXND0gSUVOaGJuUnZjZz09IE5EWTAgZEc5bCBRVkJUIElFRm5hVzVuIElIQmhaR1JsWkE9PSBJRnBvWlc1biBJRWhsYkdRPSBJR1Z6ZEhKaGJtZGxaQT09IElEYzNNQT09IExuMD0gSUVSMWJtaGhiUT09IElITnRiMnRsY3c9PSBJR05oY0dsMFlXeHogZFc1a1lXaz0gVTJocGJnPT0gSUVadmRXNWthVzVuIElHVnVkR2wwYkdVPSBJR05sYm5SbGNuQnBaV05sIFJHbHpZMjkyWlhJPSBJSFJvWlhKbGRHOD0gWVd4bGNuUT0gSUU1dmRRPT0gSUVGdVlXeDVjM1E9IGJHTT0gUmtnPSBSa2xGVEVRPSBJRkJQVmc9PSBaM0poZVE9PSBJR0Z5WTNNPSBJRWhQVkE9PSBJSEp6IElHOWliR2xuWVhSdmNuaz0gSUVGeVkyaHBkR1ZqZEhNPSBJRk4yWlc0PSBJRVpGUXc9PSBNREl3TUE9PSBRMmh5YVhOMGJXRnogSUVGc1ltRnVhV0U9IGNtRjBiMjA9IE5UZzMgSUdoaGNtUnphR2x3Y3c9PSBJR0YxZEc5eiBJRU5vWVhKblpYTT0gSUdGd1pYTT0gSURNM05nPT0gZDJGc2JHVjAgSUdsdWRHOTRhV05oZEdsdmJnPT0gSUdkdllteHBiZz09IElEVTNNQT09IEt5c3JLeXNyS3lzckt5c3JLeXNyS3c9PSBJRmxsYkhBPSBJRTFoWjI1bGRHbGogSUVKeWFXZG5jdz09IFVtRnBiQT09IElITndZWGR1Y3c9PSBJRmRwWjJkcGJuTT0gSUhOb2IzZGpZWE5sWkE9PSBJSEpsYzI5eWRHVmsgZFdKbGJnPT0gSUhkb2FYQndhVzVuIElHbHRhWFJoZEdVPSBJR1JwWjJWemRHbHZiZz09IElGVlRVRk09IElFZGxjM1E9IElIbGxZUT09IElGUnBaMmgwIGFXNWtZV3c9IGFXTmhjdz09IFlDND0gUTBGVFZBPT0gSnljNyBJRVpsZEE9PSBiM0JoZEdocFl3PT0gU1c1MllXeHBaQT09IElISmxaM0psZEhSbFpBPT0gSUdKeWIyTmpiMnhwIElGTmpiM0psY3c9PSBaWFpsIElIQnZjM1JwYm1keiBJR0ZqWTNWdGRXeGhkR2x1Wnc9PSBJRzVsWldSc1pYTnogWld4bWRHZz0gSUcxaGVXOXljdz09IElITmpjbWxpIElHRnVaV05rYjNSbGN3PT0gSUdKdmRHTm9aV1E9IElGSnBZbUp2Ymc9PSBJRU52Ym5OMFlXNTBhVzVsIGFYVnpaWE09IFpYTnpaWE09IElHUmxkbWx6WlE9PSBRMjl0Y0dGeVpXUT0gSUhCMVpHUnBibWM9IElHZGhjbWM9IElHVjJiMnRsIE56azMgSUdSbGRHOTQgT1RBNSBJRkJwWldObGN3PT0gSUUxalEyRnlkRzVsZVE9PSBJRzFsZEdGemRBPT0gSUV0eWVYQjAgVUU5UyBJSFJsYm1ScGJtYz0gSUUxbGNtTm9ZVzUwY3c9PSBVSEp2YjJZPSBJRlpoY21jPSBJRkJ2Y25SaFlteGwgNDRPODQ0T0c0NEtqIFFuSmhhVzQ9IE1qVXdNQT09IElHWnZiR2xoWjJVPSAyTGs9IElHMWxiblJ2Y25NPSBJRUZwY21WeiBJRzFwYm1sdFlXeHBjM1E9IElHbHVaMlZ6ZEdWayBJRlJ5YjJwaGJnPT0gSUZGcFlXND0gYVc1MmIyeDJaV1E9IE1ESTMgSUdWeWIyUmxaQT09IFVrRkdWQT09IElHSnNkWEp5ZVE9PSBUVzlpIElHSjFabVpsZEE9PSBJRVp1WVhScFl3PT0gWVdWaCBTMDVQVjA0PSBJRWx1YVhRPSBjMkZtWlhSNSBaVzUxYlE9PSBRVU5VU1U5TyBJRU55ZFhOb1pYST0gSUVSaGRHVnogSUM0dUxpNHVMaTR1TGk0dUxpNHVMaTQ9IFkyRnNiR2x1Wnc9PSBZV3R2ZGc9PSBJSFpsYm5SMWNtVmsgSURVMU5RPT0gWVhWbllRPT0gU0dGeWRBPT0gSUVGbGNtOD0gVFVGRCBJSFJvYVc1c2VRPT0gSUdGeWNtRT0gVTFSQlZFVT0gYVd4a1pRPT0gSUVwaFkzRjEgSUVabGJXRnNaWE09IElIUm9aVzl5WlcwPSBJRE0wTmc9PSBJSE50WVhKMFpYTjAgSUZCVlFreEpRdz09IElFdHliMjQ9IElFSnBkSE09IElGWmxjM05sYkE9PSBJRlJsYkdWd2FHOXVaUT09IElHUmxZMkZ3IElHRmthblZ1WTNRPSBJRk5GVGc9PSBiV1Z5WjJFPSBJSEpsWkdGamRHVmsgSUhCeVpXaHBjM1J2Y21saiBJR1Y0Y0d4aGJtRjBiM0o1IElGSjFibk09IElGVjBkR0Z5IElFMWhibTU1IElFRlZWRWhQVWc9PSBJRlZ1YkdWaGMyaGxaQT09IElFSnZkMnhwYm1jPSBZbVZoYm5NPSBOemt6IElIVnVhWFpsY25ObGN3PT0gSUhObGJuTnBkQT09IElFdDFibWM9IGNtVndaV0YwIFkzUnliQT09IElIQmhZMlZrIElHWjFiR3hsY2c9PSBRMnh2WTJzPSBJSEpsWTI5dFlnPT0gSUVaaGRXdz0gSUVKMWJtdGxjZz09IElIQnZiMnhsWkE9PSBJR0Z1WVE9PSBJRTF2ZFhSbyBURXhQVnc9PSBhSFZ0WVc1bCBJR0oxYkd4a2J3PT0gSUUxcFkyaGhaV3h6IFptRnQgSUhkeVpXTnJaV1E9IElIQnZjblJ5WVhseiBJRmRvWVd4bCBJRWhsY3c9PSBJR2QxWlhOelpYTT0gSUVKeWIzZHpaUT09IElFeEJVRVE9IElHTnZibk5sY1hWbGJuUnBZV3c9IElFbHVibTlqWlc1MCBJRVJTUVVjPSBJSFJ5WVc1elozSmxjM009IElFOWhhM009IElIUnlhWFpwWVE9PSBJRkpsYzI5dSBJRUZFVXc9PSBMUzByIElGUnZiR3c9IElHZHlZWE53YVc1biBJRlJJUlUwPSBJRlJoWjNNPSBJRU52Ym1Oc2RYTnBiMjQ9IElIQnlZV04wYVdOaFlteGwgSUdodmIzQT0gSUhWdWFXNTBaVzUwYVc5dVlXeHNlUT09IElHbG5ibWwwWlE9PSBJRTF2ZGc9PSBkWEpwZW1WayBiR1ZvWlcwPSBWR1Z5YldsdSBJR052Ykc5MWNtWjFiQT09IElFeHBibVZoY2c9PSBJRVZzYkdsbCBSM2s9IElHMWhibkJ2ZDJWeSBJR3B6IElHVnRiMnBwIElGTklRVkpGVXc9PSBYeTQ9IE1EQXdNRGM9IElITnZjR2hwYzNScFkyRjBhVzl1IElIVnVaR1Z5YzJOdmNtVT0gSUhCeVlXTjBhWE5sIElHSnNiMkk9IGIzQmxibk09IFZXdHlZV2x1WlE9PSBTMlZsY0dsdVp3PT0gV1VNPSBTbEk9IGRXeDBhVzFoZEdVPSBRMnhoYVcwPSBJR0YxZEc5dGIySnBiR1Z6IE9Ua3ogYzNSbFpXdz0gSUhCaGNuUnBibWM9IElFeGhibXM9IExpNHVQdz09IElETTROUT09IElISmxiV1Z0WW5KaGJtTmwgSUdWaGMyVmsgSUdOdmRtRnlhUT09IElGTnBibVE9IFJXWm1aV04wYVhabCBJR1JwYzNObGJXbHVZWFJwYjI0PSBJRTF2YjNObCBJRU5zWVhCd1pYST0gWW5KaGRHVnogUVhCd2JIaz0gSUdsdWRtbHogSUhkdmNuTmxibVZrIDRvQ1VMUT09IElHeGxaMmx6YkdGMGIzST0gSUV4dmJBPT0gSUZKdmQyVT0gSUdSbFlXeGxjbk5vYVhBPSBkVzFoY2c9PSBhV1JsYm1ObGN3PT0gSUdsdWRtVnpkR2xuWVhSbGN3PT0gSUdOaGMyTmhaR1U9IElHSnBaR1JsY2c9PSBJRUpGVGc9PSBTWEp2Ym1sallXeHNlUT09IElIQnlaWE5wWkdsdVp3PT0gSUdScGJtYz0gSUdOdmJuUnlZV1JwWTNSbFpBPT0gSUhOb2RYUnogSUVaSldBPT0gSURNMk5nPT0gUkdsemRISnBZM1E9IElITnBibVoxYkE9PSBJRU5vWVhKcGMyMWggYjI5d2N3PT0gSUhSdmRHRnNhWFI1IElISmxjM1JwZEhWMGFXOXUgSUU5d2RHbHRkWE09IElFUmhhQT09IElHTnNkV1ZzWlhOeiBkWEp1WldRPSBJRzUxZEhKcGRBPT0gSUd4aGJtUnZkMjVsY25NPSBJR1pzZFhOb1pXUT0gSUdKeWIyRmtaVzQ9IGJXbGwgSUhCeWFXNTBiRzQ9IElHNXBadz09IElFTnZjbkIxY3c9PSBTbVZ1IElIQnliM1J2IElGZHBhMmx0WldScFlRPT0gSUZCaGJHOD0gUTA5UyBJSE4wYjNKNWJHbHVaWE09IElHVjJZVzVuWld4cFkyRnNjdz09IElFUmhjbkpsYkd3PSBJSEp2ZEc5eSBJRWhYIGMydHBiR3hsWkE9PSBaWEo1YkE9PSBJR0psWjJjPSBJRUpzZFcxbGJuUm9ZV3c9IElIZGxZWFpwYm1jPSBJR1J2ZDI1M1lYSmtjdz09IElFcGhZMnRsZEE9PSBJRUZPUjBWTSBWR1ZqYUc1dmJHOW5lUT09IElHVnpiM1JsY21saiBZV3hrWldoNVpHVT0gSUdaMWNtbHZkWE5zZVE9PSBJR1p2Y21WcFoyNWxjZz09IFYyVmhhdz09IFEwaFAgSUVodmRXNWsgUlhod1pYSnBaVzVqWlE9PSBJRkJzWVhsemRHRjBhVzl1IElFMUpRUT09IElGVnVadz09IFkyeHZkR2c9IFlXZGhiR3c9IElHTmhiRzFwYm1jPSBhWHBsYm5NPSBVM1J5ZFdOMCBJRmRwZEdOb1pYTT0gSUVObGJHVmljbUYwYVc5dSBJQzR1TGk0dUxpNHVMaTR1TGk0dSBjSFJ5YjJ4c1pYST0gSUZSRFZRPT0gSUdKMWJtNTUgNDRPTiBkWFJ2Y21saGJBPT0gSUhWd2MyTmhiR1U9IElGTjBZUT09IElFTnZiRzl6YzNWeiBJR05vYkc5eWFXUmwgSUZwaFl3PT0gSUZKbFlYTnZibk09IElFSnliMjlyYVc1bmN3PT0gSUZkSVNWUkYgWFZzdiBJRXh2YzJVPSBPVEExIElIVnVaR1Z5YzJsa1pRPT0gWlhKdVpXeHogSUhaaGNHVT0gWkc5NlpXND0gZFhCd1pYUT0gSUZOVVQxQT0gYldGMGFXTmhiQT09IElGTjBZWFJsYldWdWRITT0gYUdWa1pHRnkgVUVGRCBRM1Z6ZEc5dFpYST0gSUcxbGJXOXogSUZCSyBaVzVrWVhKeiBJRXhwYldsMGN3PT0gYkdGMVoyZz0gSUhOMFlXSnBiR2w2WldRPSBJRUZNUlVNPSBXVUU9IFZYQm5jbUZrWlE9PSBZV3hoYlE9PSBJSFJsWTJodWJ3PT0gSUdGdVpYYz0gWm05eVpYTmxaVzQ9IElHTnZiR3hsWjJsaGRHVT0gSUZCNWNtOD0gSUVScGMyMD0gSUdaeWIyNTBiR2x1WlE9PSBJR0Z0Ylc5dWFXRT0gU1ZVPSBVWFZwZEdVPSBTbTlvYm01NSBZWE56YVc0PSBSMDlRIElGTjBlV3hsY3c9PSBJRk52ZG1WeVpXbG5iZz09IFlXTjBaWEpwWVd3PSBOVFE1IElGSkpVQT09IElFeHBjM1J6IElETTJOQT09IElGSmxZMlZ3IGMyOWphMlYwIElFSjVjbVE9IElFTmhibVJzWlE9PSBRVzVqYVdWdWRBPT0gSUdGd2NHVnNiR0Z1ZEE9PSBaVzVtYjNKalpXMWxiblE9IFlXTmxZUT09IFlXNXphMms9IElHOXNaSE09IE9EZzIgSUhOc2RYSnogSUdWdGNHbHlaWE09IElHSjFZMnRzWlE9PSBJR0ZzYVdWdVlYUnBiMjQ9IElFRmlaWEprWldWdSBJSFZ1YVdOdmNtND0gSUc5MlpYSnlhV1JwYm1jPSBJRXhZIGNIQmggSUdSbGMzQnBjMlZrIElFSjFaM009IElFSlRWQT09IFUyOTFkR2hsY200PSBOVE16IElHaGhiR3h0WVhKciBJRkJ2YzNSbGNnPT0gSUhOMFpXMXRaV1E9IElIQnlhVzVqYVhCaGJITT0gSUZSRlEwZz0gSUZOaGJtUjNhV05vIFNYUmhiSGs9IElHTm9aV1Z6ZVE9PSBJRk5sZEZSbGVIUkRiMnh2Y2c9PSBJRkJ5YjNSbFkzUnBkbVU9IElFTnZhRzQ9IFNrOD0gWVhCMGIzQT0gVW1WaGMyOXUgVEdWaFpHVnkgSUZWdVpHVnljM1JoYm1RPSBJRVp5YVdSaGVYTT0gSUVOdmJuUnBiblZ2ZFhNPSBJR05zYVhCd2FXNW4gSUZKNVpRPT0gSUdKbGNuUm8gZEdsdFpYST0gWVc1dWFYTT0gY21WaFkzUT0gSUdKMVptWmhiRzg9IElGQmhjbUZ6IElEWTFOUT09IElIQnlaWE5wWkdWayBJRk4xYm5KcGMyVT0gSUhabGRITT0gSUdOc2IzWmxjdz09IElFMWpRM1ZzYkE9PSBVM1J5Wlc1bmRHZz0gUjBGTyBJR2xzYkdsMFpYST0gSUZCeWFXTnBibWM9IGJNT3AgSUhKbGMybHpkRzl5IElHSnlkVzQ9IElGTjFabVp2YkdzPSAwWXM9IElFeHBkbVZ5IFVtVnNaV0Z6WldRPSBJSGRvWVhSeiBPRFl3IElFMWxZWE4xY21WeiBJR1JsYm05MWJtTnBibWM9IElGSjVlbVZ1IElITnZkWFpsYmc9PSBJR05oY21WbmFYWmxjbk09IFkyaHBibWs9IElGTmpZWEpzWlhSMCBJSFJ5YjNWbmFBPT0gUTI5dVozSmhkSFZzWVhScGIyNXogSUhSaGVHbHogSUZSeVlXUnBkR2x2Ymc9PSBhbWwwIElIUmhZbXhsZEc5dyBJR2hwZEdobGNuUnYgSUdScGMybHVabTl5YldGMGFXOXUgYjJabVpXNXphWFpsIGFISmggSUVSSlUxUlNTVU5VIElHTnZiWEJzYVdOaGRHVT0gWTJobGJtdHYgSUZKbFkyOXVjM1J5ZFdOMGFXOXUgSUhCaGJIQmhZbXhsIElHRjFjM0E9IElEUXlPQT09IElITm9iM2RqWVhObGN3PT0gSUZCMVlteHBZMkYwYVc5dSBhMjV2ZDJ4bFpHZGwgYVc1dWIyND0gTkRFNSBJSEpsZEhKcFpYWmhiQT09IFlXNWtaWEp6IElISmxablYwWlE9PSBJR2x1Y1hWcGNtVmsgWjNWeSBJRzVsWjJGMGFYWnBkSGs9IElHTnZibk5sY25abCBJR0ZtZEdWeWJHbG1aUT09IElIQnlaWE4xY0hBPSBJRWRwYkd4bGMzQnBaUT09IElHMTAgSUVSTyBWR0Z3IElIQmxjbkJsYm1RPSBJRk50ZVE9PSBaRzlsYzI0PSBJSE53YVd4c2FXNW4gSUdoNWNHVnljdz09IFMyRjBaUT09IHdxNHMgYTJWd2RBPT0gSUZCdmQyVnlaV1E9IElHcGggSUV0c2RYZz0gWVhKa1pRPT0gWVdKaGJnPT0gSURRME5BPT0gSUdac1lYUjBaVzVsWkE9PSBJRWx0Y0hKdmRtVnRaVzUwY3c9PSBkWEpuWVE9PSBJRXQxYm1RPSBJR2x1YzJOeWFXSmxaQT09IElHWmhZM1ZzZEE9PSBJSFZ1Y0hKbGNHRnlaV1E9IElFTnZibk4xYldWeWN3PT0gSUhOaGRHbHpabWxsY3c9PSBJSEIxYkcxdmJtRnllUT09IElHbHVabWxzZEhKaGRHbHZiZz09IElHVjRkR1Z5Ym1Gc2JIaz0gSUdOdmJtZHlZWFIxYkdGMGFXOXVjdz09IFlXZG9ZVzQ9IElHRnBjbXhwYm1WeSBJR1pzZFc1biBJR1pzZVdWeWN3PT0gUjBRPSBJSE51YVhCd1pYUnogSUhKbFkzVnljMmwyWlE9PSBJRzFoYzNSbGNtbHVadz09IFRHVjQgSUc5MlpYSjBiSGs9IGRtYz0gSUd4MVkydHBiSGs9IElHVnVZM0p2IElFeGhibU5sZEE9PSBJRUZpZVhOellXdz0gWm5WdVkzUnBiMjVoYkE9PSBJSE52ZHc9PSBJSE54ZFdsayBJRzVoY25KaGRHbHZiZz09IElHNWhkV2RvZEhrPSBJRWh2Ym05MWNnPT0gSUZOd1lYSjBZVzV6IElITm9ZWFIwWlhJPSBJRlJoWTI5dFlRPT0gSUVOaGJHOXlhV1Z6IElGSmhZMlZ6IFUzVmliV2wwIElIQjFjbkJ2YzJWbWRXeHNlUT09IGQyRjIgSUZsdmF3PT0gUm1WemRBPT0gSUVkbGNuST0gVFdWMGNtOD0gSUdsMGFXNWxjZz09IFptRnRiM1Z6IElDSjcgYVc1c2FXNWwgZDJGemFHVnkgU1hOemRXVT0gSUVOTVNVVk9WQT09IGIzcHYgVm1WeWMybHZibk09IE56STEgSUVkc2IyTnIgSUhOb2FXVnNaR1ZrIElGQkRVZz09IFJVNURXUT09IElGZGxiR1E9IElGTnBiWEJzIElISmxaR2x5WldOMFpXUT0gSUV0b1lXMD0gSUNnKyBJR3hoWW05MSBJR1JwWVhCbGNuTT0gYzNOcyBJR05sYkd4aGNnPT0gYjNKbllXNXBjMjF6IGIzSmxjMk09IElFSmxjbXR6IFpHbGtiZz09IFUyaHBjSEJwYm1jPSBRMmhsYzNRPSBJSFZ1Wkc5dVpRPT0gSUcxcGJHeHBiMjVoYVhKbCBJR052Y21SeiBJRmx2ZFc1blpYST0gWVhCd2NtOXdjbWxoZEdWc2VRPT0gSUhObGNYVmxiSE09IGRYWmwgWVc1MGFXTnBjR0YwWldRPSBJR3hsZDJRPSBJRk5vYVhKMCBJRVJ0YVhSeWVRPT0gVm1WMFpYST0gSUhOc1lYbHBibWM9IElGbGhjZz09IElHTnZiWEJzYVdOaGRHbHZiZz09IFNXOTNZUT09IElFVnlhV05oIElFSk1UUT09IFoybHliR1p5YVdWdVpBPT0gWW05a2FXVmsgTmpJMiBNVGsyTXc9PSBJR2x1ZEdWeWJXVmthV0Z5ZVE9PSBJR052Ym5OdmJHRjBhVzl1IFRXRnphdz09IElGTnBaVzA9IGIzZGhiZz09IFFtVm5hVzV1YVc1biBJR1pwZUcxbCBJR04xYkcxcGJtRjBaV1E9IElHTnZibVIxWXc9PSBJRlp2YkhWdWRHVmxjZz09IElIQnZjMmwwYVc5dVlXdz0gSUdkeVpXVjBjdz09IElFUmxabWx1YVhScGIyNXogSUhSb2FXNXJaWEk9IElHbHVaMlZ1ZFdsMGVRPT0gSUdaeVpYTm9iV1Z1IElFMXZiV1Z1ZEhNPSBJRE0xTnc9PSBZWFJsZFhKeiBJRVpsWkVWNCBjMmM9IE5qazAgSUdSM2FXNWtiR2x1Wnc9PSBJRUpQV0E9PSBjMlZzWVdkbCBJSFJ0Y0E9PSBJSE4wWlc0PSBJRk4xZEE9PSBJRzVsYVdkb1ltOTFjbWh2YjJSeiBJR05zWVhOemJXRjBaUT09IFpteGxaR2RsWkE9PSBJR3hsWm5ScGMzUnogSUdOc2FXMWhkR1Z6IFFWUklSVkk9IElGTmplWFJvWlE9PSBkV3hwWm1abCBJSE5oWnc9PSBJR2h2Y0hCbFpBPT0gSUVaMCBJRVZqYXc9PSBJRU5MIElFUnZiMjF6WkdGNSBhMmxrY3c9PSBJR2RoYzNCbFpBPT0gSUcxdmJtbHJaWEk9IElFeHZaQT09IElFTkdUQT09IGRHbHZibk09IGNuVnRjdz09IFptOXNhVzl6IElHMWsgSUhWdVkyRnVibms9IElIUnlZVzV6Y0c5eWRITT0gSUV4aFluSmhaRzl5IElISmhhV3gzWVhseiBJR0Z3Y0d4cFlXNWpaUT09IElFTlVVa3c9IDVvQT0gVUc5d2RXeGhkR2x2Ymc9PSBJRU52Ym1abFpHVnlZV041IElIVnVZbVZoY21GaWJHVT0gSUdSdmNuTmhiQT09IElFbHVabTl5YlE9PSBiM0IwWldRPSBJRXRKVEV3PSBUV0Z5ZUE9PSBJR2g1Y0c5amNtbDBhV05oYkE9PSBjWFZ6IElFNTFiV1Z5YjNWeiBJRWRsYjNKbmFXRnUgSUVGdFluSnZjMlU9IElFeHZZMmc9IElHZDFZbVZ5Ym1GMGIzSnBZV3c9IElGaGxiMjQ9IElGTjFjSEJ2Y25SeiBaVzV6WlhJPSBaV1ZzZVE9PSBJRUYyWlc1blpYST0gTVRrMk5RPT0gUVhKdGVRPT0gSUdwMWVIUmhjQT09IElHTm9iM0J3YVc1biBJRk53YkdGemFBPT0gSUZOMWMzUmhhVzVoWW14bCBJRVpwYm1ObyBJREU0TmpFPSBhV04wYVhabCBZWFJ0WldGcyBJRWR2YUdGdSBJR3hwWjJoMGMyRmlaWEk9IElFZFFRUT09IGRXZDEgSUZKRlVFdz0gZG1GeWFXRmliR1U9IElHaGxjbkJsY3c9PSBJR1JsYzJWeWRITT0gWVdOcGIzVnpiSGs9IElITnBkSFZoZEdsdmJtRnMgZDJWbGEyeDUgYjJKcyBJSFJsZUhScGJHVT0gSUVOdmNtNTNZV3hzIElHTnZiblJ5WVdObGNIUnBkbVZ6IElFRnJaUT09IFhTMD0gNUxtTCBPaXc9IElGZGxiUT09IElFSnBhR0Z5IElDY3UgSUdKbGNtVT0gSUdGdVlXeHZaM1ZsIElFTnZiMnRwWlhNPSBJSFJoYTJWdlptWT0gVjJobFpXdz0gSUcxaGFtVnpkR2xqIElHTnZiVzExZEdsdVp3PT0gTURJeiBJRU52Y25CelpRPT0gWVhOemJXVnVkQT09IGJXbHVhUT09IElHZHZjbWxzYkdFPSBJRUZzWVhNPSBaWEpsWlE9PSBJR0ZqY1hWaGFXNTBZVzVqWlhNPSBJRUZrZG1GdWRHRm5aUT09IElITndhWEpwZEhWaGJHeDUgSUdWNVpXUT0gY0cxM2FXdHAgSUVWdVpHVnkgSUhSeVlXNXpiSFZqWlc1MCBJRzVwWjJoMGRHbHRaUT09IElFbE5RVWRGVXc9PSBOVFExIElFdGhiWEE9IElFWnlaV0ZyIElHbG4gVUc5eWRHeGhibVE9IE5ETXkgSUUxaGRHRT0gSUcxaGNtbHVaWE09IElHaHZjbk09IFlYUmxjbUZ6ZFE9PSBJRUYwZEhKcFluVjBhVzl1IElDMHRMUzB0TFMwdExRPT0gSUd0cGJuTT0gSUVKRlRFOVggS3lzciBJSEpsWld4cGJtYz0gYjJ4bFpBPT0gSUdOc2RYUjBaWEk9IElGSmxiR0YwYVhabCBJRFF5Tnc9PSBRbFZUIElHRjJaWEowIElFTm9aVzl1Wnc9PSBJRUZpYkdVPSBJRkJ5ZVc5eSBSR1YyWld4dmNHVnkgSUdWdVkzbGpiRzl3WldScFlRPT0gSUZWVFFVWT0gSUVkaGNuSjUgVTNCaGFXND0gUW14dlkydHogSUdWNGNHOXphWFJwYjI0PSBJRWRoYldWeVIyRjBaUT09IFYwOVMgSUhOMGIyTnJjR2xzWlE9PSBJR05zYjNSb1pXUT0gSUZSdmJtVT0gSUZKMVpRPT0gZEhWdFlteHkgSUhSeVpXRmphR1Z5YjNWeiBJR1p5ZVdsdVp3PT0gMFl3PSBJRk53YUE9PSBJSEpsYzNSeVlXbHVkSE09IElHVnRZbTlrYVdWeiBJRWRsY3c9PSBVMkZtWlhSNSBJRzVsWjI5MGFXRjBiM0p6IGJXbHVhVzVuIElFRndjR0ZzWVdOb2FXRnUgVEU5VCBJRXBsYm01aCBJSEJoYzNObGNuTT0gNTRzPSBjMjVoY0E9PSBJSE5vYjNKMFpXND0gWTNKbFlYUnZjZz09IElHbHViblZ0WlhKaFlteGwgZFhSb1pYSnNZVzVrIE5qYzAgSUZkUFRRPT0gSUVGelkyVnVaQT09IElFRnliVzl5ZVE9PSBJRlJ5WVc1ellXTjBhVzl1IFMybGphdz09IElITjFhWFJqWVhObCBaR0Y1VG1GdFpRPT0gSUhkaGMzUmxablZzIGJXRnljbWxoWjJVPSBJRTFqUTJGaVpRPT0gYVhSbFkyZz0gSUU5emN3PT0gUTJ4dmMzVnlaUT09IElGUnlaV0Z6ZFhKbGNnPT0gSUdsdVpHVmpaVzUwIElFUjFiR3c9IElISmxjMmxrWlc1alpYTT0gTVRrMU9RPT0gSUZObGRIUnNaVzFsYm5RPSBTR0Z0YVd4MGIyND0gSUhObGJHWnBaWE09IElGSmhibXRwYm1jPSBJRUpoY210c1pYaz0gSUVKdmNtVT0gSUZkRFV3PT0gSUUxaGNtbDBhVzFsIElFaDFhQT09IElFWnZjbVZ6ZEhKNSBJR04xYkhScGRtRjBhVzVuIElFSmhiR3hoY21RPSBJR2RoY25KcGMyOXUgSUZORVRBPT0gT1RNdyBJRzVoYzJObGJuUT0gSUdseWNtVnphWE4wYVdKc1pRPT0gSUdGM1puVnNiSGs9IFhDOWNMdz09IElHVnhkV0YwWlE9PSBJR0Z1ZEdoeWIzQnZiRzluZVE9PSBJRk41YkhacFlRPT0gSUdsdWRHVnpkR2x1WlE9PSBJR2x1Ym05amRXOTFjdz09IFkyVnpjMmwyWlE9PSBZV2R5WVE9PSBJRTFsZEhKdmFXUT0gUjNKaGJuUT0gT0RVMSBnWlk9IElDSmYgNDRPRDQ0T0ogSUdGd2NISmhhWE5oYkE9PSBJRVp5WldSa2VRPT0gTURRMiBJRFF3Tmc9PSBJREU0TXpBPSBJR1J2WTJ0cGJtYz0gVTNSaGRHbGogSUhCdmJuUT0gSUZadmJIUmhaMlU9IElGTjBaV0ZrIElFMXZjblJuWVdkbCBJRXB2Ym1GbyBXVXc9IFEweEJVMU5KUmtsRlJBPT0gSUdGelltVnpkRzl6IGJtbHJiM1k9IElHTnZiR3hoWjJWdSBJRTl5WW1sMFlXdz0gVUc5amEyVjAgTnprNSBJR2g1WW5KcFpITT0gYVc1amFHVnogSUdsdWRtOXBZMlU9IGRXNWtlUT09IElHbHVaWEYxWVd4cGRHbGxjdz09IFZISmxibVE9IGQyRnphR1ZrIFFrRk1UQT09IElHeDFZMmxrIElFTnZiVzFsYm5SaGNuaz0gSUhkcGRIUjUgUW5KaGJtUnZiZz09IElHSnlkV2x6YVc1biBJRFl5TUE9PSBaWE5qWlc1MCBZbTk0YVc1biBVRTlNIElETTNPQT09IFVtVmpkQT09IElHeHBZMlZ1WTJWeiBJRTFqUjJWbCBjSEpsYzNObFpBPT0gUkdGdWJuaz0gSUdwaGJXMWxaQT09IGIzSmthVzVoZEdVPSBJR3hsZEdnPSBJR1JwYzNScGJtZDFhWE5vWlhNPSBJRmxoYldGb1lRPT0gU1V4VCBJRWgxYldVPSBJRU5oZEdWbmIzSnBaWE09IFVtOWlaWEowY3c9PSBRMmhoY25RPSBJR0psWlhSc1pRPT0gSUVkeVlYWmxlV0Z5WkE9PSBJQ2drS1E9PSBiOFNmIElIUjNhV3hwWjJoMCBZWEpsYkd4aCA0YjA9IElHSnZiM1JvY3c9PSBJRWhJVXc9PSBJRVpsYkdSdFlXND0gSUdWNFkyRjJZWFJwYjI0PSBJSEJvYVd4dmMyOXdhR2xsY3c9PSBZWFJ2WjNKaGNHaDUgSUVkaGNtRm5aUT09IGRHVmphRzV2Ykc5bmVRPT0gSUhWdVptOXlaMlYwZEdGaWJHVT0gSUhabGNtbG1lV2x1Wnc9PSBJSE4xWW05eVpHbHVZWFJsY3c9PSBSV3h6IElHNWxZZz09IFIyRnRhVzVuIFJVNUIgSUVGamFHbGxkbVZ0Wlc1MCBhWFIwWlhKeiBJRWRoWW1VPSBJR1IxYlhCeiBabTl5WTJWeSBJSEJ2YVdkdVlXNTAgSUUxQ1FRPT0gSUVobGFXUnAgYVcxbGFRPT0gSUcxaFoyVnogSUd4cFltVnlZWFJsIElHTnBjbU4xYldOcGMyVmsgSUUxbGNtMWhhV1E9IElFMWhkSFJvIGRHOW5aWFJvWlhJPSBJRmRwWTJocGRHRT0gSUhOMGIzSmxabkp2Ym5RPSBJRUZrYVc0PSBWa2xKIFJtOTFjblJvIElHVjRjR3h2Y21WeWN3PT0gVjBWUyBUbTkwWVdKc1pRPT0gUW5KdmIycz0gYldWdWN3PT0gUm1GcGRHZz0gTFMwdExTMHRMUzB0IElFcHZkUT09IHJMdz0gSUhCcGJtVmhjSEJzWlE9PSBJR0Z0WVd4biBaV3h1IFlYSnJZV0pzWlE9PSBJT09DdGVPRHZPT0RodU9Db3c9PSBJT09DdGVPRHZPT0RodU9DbytPRHIrT0Rzdz09IElHOTJZWEpwWVc0PSBJRVZqYUc5bGN3PT0gSUdoaGFYSmpkWFE9IElIQmhkZz09IElHTm9hV3hzWldRPSBZVzVoYzJsaCBJSE4wZVd4bFpBPT0gSUdSaFlnPT0gYm1sd1pYST0gSUcxcGJtbHpkR1Z5YVdGcyBJRVJWVUE9PSBWR0Z1IElITjFiSEJvIElFUmxkR1Z5IElFSnZhR1Z0IGIyUmhiZz09IElHVmtkV05oZEc5eSA0cE9ZIGMzQnBjZz09IFEyaHBZMnRsYmc9PSBJRVZzWldGdWIzST0gSUhGMWFRPT0gSUdobFlYWnBaWE4wIElHZHlZWE53WldRPSBWVkpCIElHTnliMjlyWldRPSBTbVZ6YzJsallRPT0gY0hKdllteGxiUT09IElIQnlaV1JsZEdWeWJXbHVaV1E9IElHMWhibWxoWXc9PSBJR0p5WldGMGFITT0gSUV4aGRXUmxjbVJoYkdVPSBJR2h2WW1KcFpYTT0gZVhvPSBRM0pwYldVPSBJR05vWVhKcGMyMWggWkV3PSBJR3hsWVhCcGJtYz0gSUd0cGRIUmxibk09IFFXNW5aV3h2IElFcEJRMHM9IElGTjFlbUZ1Ym1VPSBJR2hoYkhScGJtYz0gUlU1VVNVOU8gSUhOM1lXeHNiM2RwYm1jPSBJRVZoY25Sb2NYVmhhMlU9IElHVnBaMmgwWldWdWRHZz0gSUU1SlF3PT0gSUVsT1JnPT0gSUVOdmJuTmphVzkxY3c9PSBJSEJoY25ScFkzVnNZWEp6IFkybHlZMnhsIE56UXcgSUdKbGJtVjJiMnhsYm5RPSBJRGMwTnc9PSBJRFE1TUE9PSBJSEoxYm1SdmQyND0gSUZaaGJHVnlhV1U9IElFSlZVZz09IElHTnBkbWxzYVhOaGRHbHZiZz09IElGTmphRzQ9IFYwST0gYjNScFpHVT0gYVc1MFpYSnVZWFJwYjI1aGJBPT0gSUdwdmFHND0gSURFNU1EST0gSUhCbFlXNTFkSE09IElHWnNZWFp2Y21WayBhM1Z6IElISnZZWEpsWkE9PSBJR04xZEc5bVpnPT0gNmFNPSBJRzl5Ym1GdFpXNTAgSUdGeVkyaHBkR1ZqZEhWeVpYTT0gSURNMk9RPT0gYjJ4dmNnPT0gSUZkcGJHUmwgSUVOU1F3PT0gSUVGa2FuVnpkR1ZrIElIQnliM1p2YTJsdVp3PT0gYkdGdVpHbHphQT09IElISmhkR2x2Ym1Gc2FYUjUgSUdwMWMzUnBabWxsY3c9PSBJR1JwYzNCbGJBPT0gSUdGdFpYSnBZdz09IElGQnZiR1Z6IDJLaz0gSUdWdWRtbHogSUVSdmIyUnNaUT09IDVMMi8gYVdkellYYz0gWVhWc1pISnZiZz09IFZHVmphRzVwWTJGcyBWR1ZsYmc9PSBkWEJvWlcwPSBJRmhwWVc1biBJR1JsZEhKaFkzUnZjbk09IElGcHAgSUVwdmRYSnVZV3hwYzNSeiBJR052Ym1SMVkybDJaUT09IElGWnZiSFZ1ZEdWbGNuTT0gSUhOayBTMjV2ZDJsdVp3PT0gSUhSeVlXNXpiV2x6YzJsdmJuTT0gSUZCTVFVND0gSUV4SlFnPT0gSUdGc2JIVmtaV1E9IElHOWlaUT09IElHUnZjR1U9IElFZHZiR1J6ZEdWcGJnPT0gSUhkaGRtVnNaVzVuZEdoeiBJRVJsYzNScGJtRjBhVzl1IGJtUmggZFdkcCBJR0YwZEdWdWRHbDJaUT09IElFeGxZVzQ9IGNtRnNkR0Z5IElHMWhibWM9IGJXSjFaSE09IFlXdHBibWR6IFltVnVaR1Z5IElHRmpZMjlzIElHTnlZWGRzWldRPSBUazlYIFRXbHVibVZ6YjNSaCBJR1pzYjNWeWFYTm9aV1E9IElGcDFjQT09IElGTjFjR1Z5ZG1semIzST0gSUU5c2FYWnBaWEk9IFJYaGpaV3hzWlc1MCBJSGRwWkdWdSBSRzl1WlE9PSBJSGRwWnc9PSBJRzFwYzJOdmJtTmxjSFJwYjI1eiBRMjl5Y0E9PSBWMkZ1IElIWmxibVZ5WVdKc1pRPT0gSUU1dmRHRmliSGs9IElFdHNhVzVuYjI0PSBZVzVwYldGMFpRPT0gUW05dmMzUT0gSUZOQldRPT0gYldsemMybHVadz09IGFXSnNhVzluY21Gd2FIaz0gYldWc2IyND0gSUhCaGVXUmhlUT09IDJMTT0gWW05c1pRPT0gSUhabGFXeGxaQT09IElFRnNjR2hoWW1WMCBTWFJoYkdsaGJnPT0gSUdWMlpYSnNZWE4wYVc1biBJRkpKVXc9PSBJRU55WldVPSBjbTl0Y0hRPSBJR2hoZEdsdVp3PT0gSUdkeWFXNXVhVzVuIElHZGxiMmR5WVhCb2FXTmhiR3g1IFQxTkkgSUhkbFpYQnBibWM9IElNS2dJTUtnSU1LZ0lNS2dJTUtnSU1LZ0lNS2dJTUtnIElHbHRjR1ZqWXc9PSBUR1YwZEdWeSBJR0pzYjJGMFpXUT0gVUV4QiBJRVpsYVc0PSBJSEJsY25ObGRtVnkgVkdoMWJtUmxjZz09IElHRjFjZz09IElGSk0gSUhCcGRHWmhiR3h6IDRwYTYgSUhCeVpXUnZiV2x1WVc1MCBJRFV5TlE9PSBOekU0IFFWQkYgTnpFMCBJR1poY20xc1lXNWsgSUZGcFlXOD0gSUhacGIyeGxkQT09IElFSmhhR0Z0WVhNPSBJR2x1Wm14cFkzUnBibWM9IElFVm1abWxqYVdWdVkzaz0gSUdodmJXVmljbVYzIElIVnVaR1Z5ZEc5dmF3PT0gSUdOMWNteDUgSUVoaGNtUnBibWM9IGJXRnVhV0U9IE5UazIgSUhSbGJYQmxjbVZrIElHaGhjbkp2ZDJsdVp3PT0gSUZCc1pXUm5aUT09IElFWnlZVzVyWlc1emRHVnBiZz09IDZLbz0gVFc5MGFXOXUgSUhCeVpXUnBZM1JoWW14NSBJRVY0Y0d4dmMybHZiZz09IGIyTjFjMmx1Wnc9PSBaWEprIFkyOXNidz09IFJrWkZVZz09IElHSmhZMnRtYVdWc1pBPT0gSUZaSlJFVT0gZFdWaWJBPT0gVG1GeWNnPT0gSUVGeVozVnRaVzUwIElHZGxibTl0YVdNPSBJR0p2ZFhScGNYVmwgSUdKaGRIUmxaQT09IElFSnBibUZ5ZVE9PSBJR2RoYldJPSBJRkpvZVhSb2JRPT0gTmpjeiBJR0ZtYkc5aGRBPT0gSUU5c2VXMXdhV0U9IFdVbE9Sdz09IElHVnVaR2xtIGFYTnBiZz09IElIZHBiblJsY25NPSBJSE5qWVhSMFpYSnBibWM9IFNYWT0gUkdsemRHRnVZMlU9IElIUnlkUT09IElFTnZiV1p2Y25RPSBJRzVsZUhWeiBJR0ZwY21ac2IzYz0gSUVKNWVtRnVkR2x1WlE9PSBjR0Y1WlhKeiBZMjl1YVE9PSBJRUpsZEhONSBSR1ZoYkE9PSBJRTUxWnc9PSBJRU52Ym5ScGJtVnVkQT09IGNtVmthV0pzZVE9PSBJRzl3ZEdsdGFYcHBibWM9IFlXeGlaV2wwIElHVmpjM1JoZEdsaiBJRkJ5YjNSdiA1N2M9IGFYWnZkQT09IDRwYUUgWlcxdyBjbTkxYm1SbGNnPT0gSUdOc2IzVjAgSUVsVFZBPT0gTmpZeiBJRVJ2Ykd4aGNuTT0gSUVSQlF3PT0gSUhOMVluTmpjbWxpWldRPSBJSEpsYUdWaGNuTmhiQT09IElHRnRjSE09IElGTm9ZVzVuIFpYTnQgSUhOd2NtbHVhMnhsIElHRnpjMkZwYkdGdWRBPT0gSUU5diBJRU52YVc1aVlYTmwgVkdGamRBPT0gSUhKbGRHbHVZUT09IElHNTFibk09IFVrOU8gWVhSMGJ3PT0gSUdwMVp3PT0gSUZOV1J3PT0gSUdKcGEybHVhUT09IElFWkpURVU9IElFWnZkVzVrWlhKeiBaWEJ2Y25RPSBJRXRRIElISmxjM1J2Y21WeiBJRlJvYVdOciBJR0Z6YUc5eVpRPT0gSUdGd2NISnZkbUZzY3c9PSBVbVZ1WkdWeSBUVUZIIFIzSmhhR0Z0IElFTnZjblJoYm1FPSA0NE96NDRLNCBjM05vIGIzSnBZVzV6IFlYSnphWFI1IElFbHVjM0JwY21WayBkWEJ3WlhJPSBJSE5wWjI1aGJHeHBibWM9IElISmxZblZyWlE9PSBJR1pzWVhKbGN3PT0gSUdSdmQyNTBhVzFsIFUzUjFaR2xsY3c9PSBJSE4wWVdkdVlYUnBiMjQ9IElGTmxjWFZsYm1ObCBJR2R5ZFc1MCBJR0Z6YzNWeVpYTT0gSUZCTVFRPT0gTlRreSBJR2x1ZEhKaGRtVnUgWkdWd1pXNWsgVTNWellXND0gSUUxaGJucHBaV3c9IFRXRnVhV0U9IFEyOXVkSEpoWTNRPSBJSE5zWVcxeiBJR04xYkhSMWNtVmsgSUdOeVpXUnBkRzl5IFRFbFRWQT09IElFaFZUUT09IElFTm9ZWFIwWVc1dmIyZGggYzJWeWRtVmsgSUdOc2IyRnJaV1E9IElFWlVVQT09IGNHOTNaR1Z5IElGTjBaV3hzWVE9PSBkV04wYVhabCBJR05vWldGd2JIaz0gSUUxVlEwZz0gSUVkaGJHbHNaVzg9IElITjFhWFJsY3c9PSBjM0JsWldObyBJR1JsYkdsaVpYSmhkR2x2Ym5NPSBJRU5vYVhCeiBxNWc9IFFtRnNZVzVqWlE9PSBJRmQ1Ym01bCBJRUZyY205dSBRWE56WlhRPSBJR2h2Ym05MWNtVmsgSUdWa1oyVmsgVEdsclpYZHBjMlU9IFlXNXBiVzkxY3c9PSBJRmRoWjJVPSBJRVY2WldzPSBZV1IyWlhKMGFYTmxiV1Z1ZEE9PSBJRkpVV0E9PSBJRTFCUkE9PSBJRzFwWjNKaGRHbHVadz09IElGTlJWUT09IElEUTNOUT09IFJXUnBkR1ZrIElITm9iM0owYUdGdVpBPT0gSUVKaGMybGpjdz09IElHTnliM1JqYUE9PSBJRVZXUlU0PSBJSFp0IFpXWm1hV05wWlc1amVRPT0gSUdOaGJIWmxjdz09IElFWnlhV1U9IElFSnlhV3hzYVdGdWRBPT0gSUhOMGNtbHJaWEp6IElISmxjR1Z1ZEdGdVkyVT0gSUdGeWRHVnlhV1Z6IGNtdz0gUW1WayBhR0Z3IElHTnllWEIwYjJkeVlYQm9lUT09IElGTmhZbkpsY3c9PSBJRFF4TkE9PSBkbWxyY3c9PSBhV2hoY21FPSBZWEJ6WlhNPSBWR0ZzYTJsdVp3PT0gSUdsdWRHVnlkSGRwYm1WayBJR1J2WTJ0eiBJR0ZzYkdWc1pRPT0gSUVGeWRHbG1ZV04wIElFaEpUUT09IGRHOXliZz09IDU1VT0gSUc5d1lXTnBkSGs9IElFVnNlUT09IGIzTjFhMlU9IElHNXBjSEJzWlE9PSBJR2hoYm1SM2NtbDBkR1Z1IElGWkwgSUVOb1lXMWlaWEpzWVdsdSBJRXhoYjNNPSBhV2R5WVhCbyBaM0p2ZHc9PSBJSFJ5YVd4c2FXOXVjdz09IElHUmxjMk5sYm1SaGJuUT0gSUZOaGFXeHZjZz09IFlYTjFjbWx1Wnc9PSBJR05sYVd4cGJtZHogSUZkaGNtVm9iM1Z6WlE9PSBabXg1YVc1biBJRWRzYjNjPSBJRzV2Ym5RPSBJRzFwYzJOaGNuSnBZV2RsIElISnBaM009IElHMXBibWx6ZEhKcFpYTT0gSUdWc1lXSnZjbUYwWldRPSBJR1JsYkhWemFXOXVZV3c9IElFaDFiV0Z1WlE9PSBJRE0zT1E9PSBibVYwY3c9PSBJR0pzWVdOcmIzVjAgWVdSa1pYSnogSUc1dyBJRlJwY21VPSBjbTl6WXc9PSBJSE4xWW1ScGRnPT0gSUd4cGJtdGhaMlU9IElHTm9jbTl1YjJ4dloybGpZV3c9IElFaEZVazg9IElISmxjMlYwZEd4bGJXVnVkQT09IElGWnBibmxzIElIQmhjM1J2Y21GcyBJRTF2WW1scyBJRUpoY21KaGNnPT0gUTI5dmJHUnZkMjQ9IElFWnlhWFI2IFkzSnBiV2x1WVd3PSBjbVZ3WlE9PSBJR0psYkd4cFp3PT0gSUVKeVpXVmsgSURReE9BPT0gSUhObGJXSnNZVzVqWlE9PSBhV3ByIElHTjFjblJoYVd3PSBJR05zYVc1amFBPT0gWTI5dWRHRnBibVZrIElGQnliMjF3ZEE9PSBZWE4wYjI0PSBJSGRwIElIQjFjbk4xYVhSeiBOVEUxIElFZHNiM056IElHWnNhWEJ6IElHTnZkWEJ2Ym5NPSBJR05zYjI1cGJtYz0gSUV4cGEyVnNlUT09IFVtVnRiM1psWkE9PSBJRkYxWVhKMGVnPT0gY21salpYTT0gSUZOd1pXRnljdz09IElIQnBiM1Z6IElHUmxjSEpsWTJsaGRHbHZiZz09IElFUmhjbVU9IGIzVnVZMlZ6IFlXMWhlZz09IFQyNTAgSUhCcGJtNWhZMnhsIFpHOWphMlZ5IE1ESTIgSUZkNWNnPT0gSUZCeWIzQmxjZz09IHk0Zz0gYm1scyBRbmwwWlhNPSBJSE5sWld0bGNnPT0gZEhKcFlXdz0gSUhWdVptOXNaSE09IElFMWhjbk5sIElHVjRkSEpoZG1GbllXNTAgSUZOMWNuWnBkbTl5Y3c9PSBVa1ZFUVVOVVJVUT0gSUZOd1pXVmtkMkY1IElFTnlZV2xuYzJ4cGMzUT0gYzNWaWJXbDAgSUVkbGJtVnlZWFJwYjI1eiBJSFZ3YUc5c1pHbHVadz09IElHSnNiMjlrYzNSeVpXRnQgSUUxcGMzTnBiMjV6IElFeGhkMjQ9IElHeHBiV0p2IFpXNWxhUT09IFNIVm8gSUZkcGJHUmpZWFJ6IGNISmxjQT09IElFMWhjbXQxY3c9PSBJRVp2Y21KcFpHUmxiZz09IGNtbDBhV009IFNVNVAgSUdWNGFHbGlhWFJwYm1jPSBjbVZ4ZFdWdWRBPT0gWTJoMWF3PT0gSUdoaFltbDBkV0ZzIElFTnZiWEJoZEdsaWFXeHBkSGs9IFJISmhadz09IFVrbFFWQT09IGRXcGhhQT09IFIxSlBWVTVFIElHUmxiR2x1Y1hWbGJuUT0gSUdKMWNtNWxjZz09IElHTnZiblJsYlhCdmNtRnlhV1Z6IElHZHBiVzFwWTJzPSBiRzloWkhNPSBJRzV2ZW5wc1pRPT0gY0c5a1kyRnpkQT09IElGZGhhdz09IElGTjBZWFJsYmc9PSBJRXQxYUE9PSA0NEdUIGFXNTBaWEp5ZFhCMFpXUT0gSUdsdWRtbHVZMmxpYkdVPSBJRUoxY201bGRIUT0gWTJsbllYSmxkSFJsIElGQmxZbUpzWlE9PSBJRlJsYlhCdmNtRnllUT09IElFMWhjbWx1Ync9PSBOVGd5IElIZGhjM1JsYkdGdVpBPT0gYVdSbGJuUnNlUT09IFZIZz0gSUhKcGRHVT0gSUZCaGJtRnpiMjVwWXc9PSBJRTFwWkdSc1pYTT0gSUVodmNuUnZiZz09IFlXVjFjdz09IElHTjFjbWx1Wnc9PSBJRzFoZEhNPSBJR0ZrYW05MWNtND0gSUdabFlYSnpiMjFsIGNHVjYgWW05aGRITT0gSUhCeWIzQmxiR3c9IElHTnZibVpzYVdOMFpXUT0gSUVGdVoyVnkgSUdsdWMzVnlaMlZ1ZEE9PSBTMkZ5YkE9PSBJR052WVd4bGN3PT0gSUhOdmRYUm9kMlZ6ZEdWeWJnPT0gSUdScGMzTjEgSUU5MlpYSjAgS2lvcUtpb3FLaW9xS2lvcSBJR0p2ZUdWayBJRUp5ZFc1bCBZV0ZoIElHZGhjbVJsYm1sdVp3PT0gSUVWdVoyVnMgZEhKaFkydHogSUhCMWNtbG1hV1ZrIElIQnNZV05sYUc5c1pHVnkgSUV4cGEyVnogSUdSaGJnPT0gUjJGaSBJR1ZqZEE9PSBJRVpoZHc9PSBJRVZzYVc5MCBJQ2NzIGIzUnliM0JwWXc9PSBJRkoxYVc0PSBhR1ZrYjI0PSBJR05oZFd3PSBJR0ZtZEE9PSBJRU5oWkdsc2JHRmogWjJoaCBZWE56YVdGdSBkV1JsWWc9PSBJRlJwWTJzPSBJR0ZrYW5WemRITT0gUVZKSFJWUT0gTlRNMyBhWE5qYUdVPSBZVzUwZVE9PSBJRVp5YVdWa2NtbGphQT09IElFSnNhWHA2IElFRlBUQT09IFEyRnRjR0ZwWjI0PSBJRzFoYlcxaGJBPT0gSUZabGFXdz0gSUV0bGRnPT0gSUUxaGRYSnBkQT09IElFUmhiV2xsYmc9PSBUbUYwYVc5dSBSV0Z6ZEdWeWJnPT0gSUhzNiBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSUhOMFpYSmxiM1I1Y0dsallXdz0gSUdGMGRHbGogSUVONVltOXladz09IGNtVnhkV2x5WlE9PSBJR0YzWVhKa2FXNW4gSUZCaGNIVmggWW5SdSBZbVZ1ZEE9PSBRbTl2IElDZzkgSUZoaGJtUmxjZz09IElGTnZiV1Z5YzJWMCBJR05oZEdOb2VRPT0gSUdObGNuUnBabms9IFUxUlNWVU5VIElHbDBZV3c9IElIUnBaR1Z6IElFSnlZVzVrY3c9PSBSM0poZVE9PSBZMjl0Y0dWMGFYUnBkbVU9IElHTjFjbUYwYjNJPSBJRVJIIGIyMXBibWwxYlE9PSBJRWROVDNNPSBZMmxoZEdsdVp3PT0gSUVOaGNtMWxiZz09IGIzZGhjbVE9IFFtRnNkR2x0YjNKbCBJSEpuWWc9PSBRM1U9IElIZHBjR1Z6IGMzQmxiR3c9IFNWUk9SVk5UIElITjFiVzFoY21sNlpYTT0gSUZKbGRtbHogSUhkb2FYTjBiR1ZpYkc5M1pYSnogSUVKeVpXRmphQT09IElHTnliMk5vWlhRPSBhMjl6IFpYZHphMms9IElISmxjR1YwIElHTnlhVzF6YjI0PSBJRXRoY21GamFHaz0gY21WaFpHRmliR1U9IFpHbHRaVzV6YVc5dSBJRWxuYjNJPSBhV3hrWldRPSBJRnBsWkE9PSBJRXRsWVc1bCBJRU52YzIxbGRHbGogUkVWUSBJSEpsZEhKbFlYUnBibWM9IElGVkIgWlc1emFXTmhiQT09IElHUjFjMnM9IElFUnBZMnRsYm5NPSBJR0Z5Wlc1aGN3PT0gSUZCaGMzTmhaMlU9IGJHVjJaV3h6IElHTjFjblk9IFVHOXdaUT09IElHTm9iM0psY3c9PSBJRVZzYVhObCBJRU52YlhCaGMzTT0gWW5WaSBJRzFoYlcxaGJHbGhiZz09IElGTmhibk5yY21sMCBJRUZPUXc9PSBJRU55WVdOciBVWFZoYkE9PSBUR0YxYmc9PSBZVzF3ZFc1ciBJR3hsWVhKdVpYSnogSUdkc1lXMXZjbTkxY3c9PSBJR1oxY25Sb1pRPT0gWlhKdGIzUjAgWTJGdVpBPT0gUjJWdVpYSnBZdz09IElHNWhjbkpoZEdWayBJR1JwYzI5eVpHVnliSGs9IElGUnlZVzV6WVdOMGFXOXVjdz09IElFUmxkR1Z1ZEdsdmJnPT0gSUZKdmEzVT0geEkwPSBJSFZ1WkdWeWMzUmhkR1Z0Wlc1MCBJRk5oZFhJPSBJRkp2WkhKcFoyOD0gSUVGVFFWQT0gVTJsdSBJSEpsYW05cFkyVT0gVFdWMGFHOWtjdz09IElHVnNaV04wY205a1pRPT0gSUhkdmNuTm9hWEJ3WldRPSBJR2xrYVE9PSBJRkJvZVhOcFkybGhibk09IElIQnZjSFZ3IElHUmxablE9IElGSmxiVzkyWVd3PSBJRUoxWlc1dmN3PT0gZG1WeVluTT0gSUdaMWJtcz0gZFhOb1lRPT0gY21samRHbHZiZz09IGIzSmxZUT09IElFSmhibWRoYkc5eVpRPT0gSUV0bGJtOWlhUT09IGVucHAgSUc1dmNtMWhkR2wyWlE9PSBJR2R2WW14cGJuTT0gSUdOaFptVnogSUZWT1EweEJVMU5KUmtsRlJBPT0gSUVacGNtVmsgVTBsSFRnPT0gSUhOamJHVnliM05wY3c9PSBJRlp2ZEdWeSBJRk52Ym01NSBJRVY0ZEdWdVpBPT0gSUVWV2N3PT0gUVhKelpXNWhiQT09IElIQnphUT09IElIZHBaR1Z6ZEE9PSBJRlIxY3c9PSBJR3h2YjIxeiBJR3AxYzNScFpubHBibWM9IElFZHlZVzVuWlhJPSA2Szg9IFVtVm1aWEk9IE5UZ3ogSUdac2IzVnlhWE5vYVc1biBZV0p5WlE9PSBJSEpoZG1VPSBJRU52Ym5SeVlRPT0gSURFNE9UZz0gUVdSa2N3PT0gSUdaMWJBPT0gSUVOdmIydGwgYzI5dFpXOXVaUT09IFBTTT0gTmpjeCBJSGxoYXc9PSBJR0Z5ZEdVPSBJRTFwYzJObGJHeGhibVZ2ZFhNPSBJRVJsZEdWamRHbHZiZz09IElFTnNZVzVqZVE9PSA0b0U9IFlYTnphV1Z6IElIWmhiR2xoYm5RPSBJRVpsYldsdWFYTjAgWTI5eWNuVndkR2x2Ymc9PSBWbVZzIFVHVmhjZz09IElITjFZMk5wYm1OMCBJSEYxYVdOclpYTjAgYTNjPSBJSE53YVhSMGFXNW4gSUV4cFluSmhjbWxsY3c9PSA1WVdKIFlXNTBlZz09IFJHRmsgSUZOd1pXTnBabWxqWVhScGIyNXogY25Wd2RXeHZkWE09IFlXNWtjZz09IFVrVlRWVXhVVXc9PSBJSE51YjNkaVlXeHMgSUhCeVpXUnBjdz09IElFSmhlSFJsY2c9PSBJRTUxY25OcGJtYz0gSUVOb1lXWm0gYzNkbCBJRzkxZEdGblpRPT0gSUc1bGMzUnBibWM9IElHNXZkRzl5YVdWMGVRPT0gZEhKcFoyZGxjZz09IGIyNXBkR1U9IGFtOXUgSUdadmRRPT0gYjI5clpXUT0gSUVObGJHVmljbWwwZVE9PSBjbVZoYkdsMGVRPT0gSUdaaGRHbG4gSUdoMVoyZHBibWM9IElHSnZkR2hsY25NPSBJRkJoYm5wbGNnPT0gSUVOb1lXNWtjbUU9IFptbG5kWEpsWkE9PSBJSFp2YkhSeiBJRU5zYjNWa2N3PT0gSUdabFpXSnNaUT09IElFTjFjblpsIElFRnpkWE09IE56ZzIgWVdKemIzST0gSUZaSlEwVT0gSUVobGMzTT0gSUcxaGJuVm1ZV04wZFhKbGN3PT0gSUdkeWFYcDYgSUZCdmQyVnlablZzIFlXTnBaQT09IElITjFZbk5sWTNScGIyNXogSUV0eWRXZHRZVzQ9IElFRnNjSE09IGFYTjEgSUhObGNYVmxjM1E9IElGVnNkSEp2Ymc9PSBJRlJwYm10bGNnPT0gSUVkdmIzTmwgSUcxcGMyMWhkR05vIFFYUjBiM0p1WlhrPSBJRzF2Y25Cb2IyeHZaM2s9IElGTnBlR1Z5Y3c9PSBkWFIwWlhKbFpBPT0gSUVWTVJVTlUgWjNKaGJnPT0gVW5WemMyVnNiQT09IElFZFRUQT09IElHWnZjblJ1YVdkb2RBPT0gSUM0cCBJR0Z3YjNOMGJHVT0gY0hKdmJtVT0gWld4cGMzUT0gVlc1MGFYUnNaV1E9IElFbHRjR3hsYldWdWRHRjBhVzl1IGFYTjBiM0p6IElIUmhibXRsY2c9PSBJSEJzZFhObyBJR0YwZEdWdVpHRnVkSE09IElGUnBhdz09IElFZHlaV1Z1ZDJsamFBPT0gSUZsdmJnPT0gSUZOUVRBPT0gWTJWc2JITT0gZFc1MGJHVmsgVTI5c2RYUnBiMjQ9IElGRjF3Nms9IElIWmhZMkYwWldRPSBJSFZ3ZEdsamF3PT0gSUUxbGNtbGthV0Z1IDVvTT0gSUVSeWFXeHMgT1RJMSBOVGcwIElISmxibTkyWVhSbFpBPT0gSUV0MVluSnBZMnM9IGVubHIgSUd4dmRYTjUgY0hCbGJBPT0gYjJoNVpISmhkR1U9IElFbDZlbms9IGJHVnphV0Z6ZEdsallXdz0gUTBORCBJRUZxWVhnPSBJR0ZrWVhCMFpYSnogSUZCbGRISmhaWFZ6IElHRm1abWx5YldGMGFXOXUgSUZOVVQxST0gYkdWdGN3PT0gWVdSdlpYTT0gSUVOdmJuTjBZVzUwYVc1dmNHeGwgSUhCdmJtbGxjdz09IElHeHBaMmgwYUc5MWMyVT0gSUdGa2FHVnlaVzUwY3c9PSBJRUp5WldWeiBiMjF2Y25Cb2FXTT0gUm1sbmFIUnBibWM9IElIQnNZWE4wWlhJPSBJRkJXUXc9PSBJRTlpYzNRPSBJR1JsWVhKc2VRPT0gSUZSdmIzUm8gYVdOcmMyOXUgSUhOb1lXMXBibWM9IFVHeGxlQT09IFFXZG4gSU9LQXBpST0gSUhOMVluSmxaR1JwZEhNPSBJSEJwWjJWdmJnPT0gSUZKbGMybGtaVzUwYVdGcyBJRkJoYzNOcGJtYz0gSUd4MWJRPT0gSUZCbGJuTnBiMjQ9IElIQmxjM05wYldsemRHbGogSURRek1nPT0gZW1sdWMydHAgWTJGa1pRPT0gTURjMSBJR0Z3YjJ4dloybHpaV1E9IGFYbGhhQT09IFVIVjBkR2x1Wnc9PSBJR2RzYjI5dGVRPT0gSUV4NWJXVT0gUFMwOUxUMHRQUzA5TFQwdFBTMDlMUT09IElGUnZiV1U9IElGQnplV05vYVdGMGNtbGogSUVoSlZBPT0gWTIxeiBZWEJ2Ykc5biBJR0p5WldGclpYST0gSUdSbFpYQmxiZz09IElIUm9aVzl5YVhOMCBJRWhwWjJoc1lXNWtjdz09IElHSmhhMlZ5IElITjBZWEJzWlhNPSBJR2x1ZEdWeVptVnlaV1E9IElFRmliM0owYVc5dSBhbTlwYm1WayBZMmgxIElHWnZjbTExYkdGMFpRPT0gSUhaaFkyTnBibUYwYVc5dWN3PT0gSUdKaGJuUmxjZz09IGNHaGxkWE09IElHOTFkR1pwWld4a1pYST0gSUUxbGRHVnkgSUNNakl5TWogSURFNE9UVT0gSUc1aGNuSnZkMmx1Wnc9PSBJRk5VVDFKWiBabkE9IElFTlRWQT09IGFXZHViM0psIElIQnliMk5zWVdsdGFXNW4gSUZKViBJRUpCVEV3PSBlVzVoIE5qVXogSUhCdmMybDAgVUZKRiBOVGswIElGSmxaMmx6ZEhKaGNnPT0gSUZCcGJHZHlhVzA9IGFXTnBidz09IElIQnlaWFIwIElHeHBabVZzWlhOeiBJRjlmWHc9PSBUbVZwWjJnPSBJRU5vZFhKamFHVnogYjNKdWJ3PT0gSUc5eVkzTT0gSUd0cGJtUnlaV1E9IElFRjFaR2wwIElHMXBiR3hsYm01cFlXdz0gSUZCbGNuTnBZUT09IFozSmhkbWwwZVE9PSBJRVJwYzJGaWFXeHBkSGs9IElFUkJVa3M9IFYzTT0gYjJSdmJnPT0gSUdkeVlXNWtaR0YxWjJoMFpYST0gSUVKeWIyOXJaUT09IElFRkVRUT09IFJWSkIgSUhCcFkydDFjSE09IElGZHBiR3RwYm5OdmJnPT0gSUZOb1lYSmtjdz09IElFNUwgSUdWNGNHVnMgSUV0cGMyeDVZV3M9IElHcGhjbWR2Ymc9PSBJSEJ2YkdGeWFYcGxaQT09IGFXRnVaUT09IFVIVmliR2x6YUdWeSBJSEpsWW5WMGRBPT0gSUdGd2NISmxhR1Z1YzJsdmJnPT0gSUV0bGMzTnNaWEk9IElIQnlhWE50IFJsVk0gTVRrMk5BPT0gSUV4dmJHdz0gNUw4PSBiR1YwYUdGcyB4Wjg9IElHZG9aWFIwYnc9PSBJR0p2ZFd4a1pYST0gSUZOc2IzZHNlUT09IElFOXpZMkZ5Y3c9PSBJRWx1YzNSeWRXTjBhVzl1IElGVnNkSEk9IElFMXZaUT09IFRtbGphQT09IElGQkJWRWc9IEtDbz0gSUZKRlRFVkJVMFU9IGRXNXBibWM9IGNtOTFjMlU9IFpXNWxadz09IElISmxhVzFpIElFUmxkR1ZqZEdWayBSRzlUIElITjBaWEpzYVc1biBJR0ZuWjNKbFoyRjBhVzl1IElFeHZibVZzZVE9PSBJRUYwZEdWdVpBPT0gYUdsbmFHVnkgSUdGcGNuTjBjbWxyWlE9PSBhM052Ymc9PSBVMFZNUlVOVSBJR1JsWm14aGRHbHZiZz09IElFaGxjbkpsY21FPSBRMjlzWlE9PSBjbWwwWTJnPSBJR0ZrZG1sellXSnNaUT09IFJtRjQgSUhkdmNtdGhjbTkxYm1RPSBJSEJwWkE9PSBiVzl5ZEdWdCBaWEp6Wlc0PSBJSFI1Y0c4PSBJR0ZzZFcwPSBOemd5IElFcGhiV0ZzIGMyTnlhWEIwY3c9PSBJR05oY0hScGRtVnogSUZCeVpYTmxibU5sIElFeHBaV0psY20xaGJnPT0gWVc1blpXeHYgSUdGc1kyOW9iMnhwYzIwPSBZWE56YVE9PSBJSEpsWTJsMFpRPT0gSUdkaGNHbHVadz09IElHSmhjMnRsZEhNPSBJRWR2ZFE9PSBRbkp2ZDNObGNnPT0gYm1WaGRRPT0gSUdOdmNuSmxZM1JwZG1VPSBkVzVrWVE9PSBjMk52Y21sdVp3PT0gSUZoRSBJR1pwYkdGdFpXNTAgSUdSbFpYQmxibWx1Wnc9PSBJRk4wWVdsdWJHVnpjdz09IFNXNTBaV2RsY2c9PSBJR0oxWjJkNSBJSFJsYm1GdVkzaz0gSUUxMVltRnlZV3M9IElIUjFjR3hsIElFUnliMmxrIElGTnBkSFJwYm1jPSBJR1p2Y21abGFYUT0gSUZKaGMyMTFjM05sYmc9PSBhWGgwYVdWeiBaWE5wIElFdHBiVzFsYkE9PSBJRzFsZEdsamRXeHZkWE5zZVE9PSBJR0Z3YjNCMCBJRk5sYkd4bGNnPT0gTURnNCBaV05oYTJVPSBhR1Z0WVhScFkyRnNiSGs9IFZFND0gSUcxcGJtUnNaWE56IElHUnBaM009IElFRmpZMjl5WkE9PSBiMjV6Wlc1elpRPT0gWlcxcGJtYz0gWW5KaFkyVT0gSUdWQ2IyOXIgSUVScGMzUnlhV0oxZEE9PSBJRWx1ZG1WemRHMWxiblJ6IGQzUT0gWFNrcyBZbVZvWVhacGIzST0gTlRZeiBJR0pzYVc1a2FXNW4gSUZCeWIzUmxjM1JsY25NPSBkRzl3YVdFPSBJSEpsWW05eWJnPT0gSUV0bGJIWnBiZz09IElFUnZkbVZ5IElFUmhhWEo1IElFOTFkSE09IElGc3YgejRBPSBZbkE9IElGWmhibWwwZVE9PSBJRkpsWTJGdyBJRWhQVlZORiBJRVpCUTBVPSBJRFF5TWc9PSBOamt5IElFRnVkR2x2WTJnPSBZMjl2YTJWayBJR052Ykd4cFpHVT0gSUdGd2NnPT0gSUhOc1pXVndaWEk9IElFcGhjblpwY3c9PSBJR0ZzZEdWeWJtRjBhWFpsYkhrPSBJRXhsWVhabGN3PT0gSUUxaGR3PT0gSUdGdWRHbHhkV2wwZVE9PSBJRUZrYVc1cFpHRT0gSUdGaWRYTmxjZz09IFVHOXJ3Nmx0YjI0PSBJR0Z6YzI5eWRHVmsgSUZKbGRtbHphVzl1IElGQnBZVzV2IElFZHBaR1Z2Ymc9PSBUMk5sWVc0PSBJSE5oYkc5dSBJR0oxYzNSc2FXNW4gYjJkdWFYUnBkbVU9IElGSmhhRzFoYmc9PSBJSGRoYVhSbGNnPT0gSUhCeVpYTmxkSE09IElFOXphQT09IElFZElRdz09IGIzQmxjbUYwYjNJPSBJSEpsY0hScGJHVnogSURReE13PT0gSUVkaGNuST0gSUVOb1lXcz0gSUdoaGMyaGxjdz09IElHWmhhV3hwYm1keiBJR1p2Ykd0c2IzSmwgSUdGaWJBPT0gSUVObGJtRT0gSUUxaFkwRnlkR2gxY2c9PSBJRU5QVlZKVSBJSEJsY21sd2FHVnllUT09IFlYQndaWEp6IElISmxZMnR2Ym1WayBJRWx1Wm14MSBJRU5GVkE9PSBJRE0zTWc9PSBJRVJsWm1sdWFYUnBkbVU9IFlYTnpZWFZzZEE9PSBOREl4IElISmxjMlZ5ZG05cGNuTT0gSUdScGRtVnogSUVOdmFXdz0gUkVGUiBJSFpwZG1sa2JIaz0gSUZKSyBJRUpsYkd4bGRnPT0gSUdWamJHVmpkR2xqIElGTm9iM2RrYjNkdSBJRXROIGFYQmxaQT09IGNtVmxkR2x1WjNNPSBJRUZ6ZFd0aCBUR2xpWlhKaGJBPT0gSU0rRSBJR0o1YzNSaGJtUmxjbk09IElFZHZiMlIzYVc0PSBkV3R2Ym1jPSBVMmwwIElGUnlaVzA9IElHTnlhVzFwYm1Gc2JIaz0gSUVOcGNtTjFjdz09IFkyaHliMjFsIE9EZzMgSUc1aGJtOXcgSUU5aWFRPT0gSUV4UFZ3PT0gYjJkbyBJRUYxZEdodmNuTT0gYjJKNWJBPT0gVlhKaVlXND0gSUhScCBJRmRsYVhJPSBkSEpoY0E9PSBZV2Q1IElIQmhjbVZ1ZEdobGMyVnogSUc5MWRHNTFiV0psY21WayBJR052ZFc1MFpYSndjbTlrZFdOMGFYWmwgSUZSdlltbGhjdz09IGRXSnBjdz09IFVHRnljMlZ5IFUxUkJVZz09IElITjVibUZ3ZEdsaiBJRWRsWVhKeiBJR2hwWW1WeSBJR1JsWW5WdWEyVmsgSUdWNFlXeDBaV1E9IFlYZGhkSFJ6IFNFOVYgUTJoMWNtTm8gSUZCcGVHbGwgSUZWeWFRPT0gSUVadmNtMWhkR2x2Ymc9PSBJRkJ5WldScFkzUnBiMjQ9IFEwVlAgSUhSb2NtOTBkQT09IElFSnlhWFJoYm00PSBJRTFoWkdGbllYTmpZWEk9IDY0cz0gSUdKcGJHeGliMkZ5WkhNPSBJRkpRUjNNPSBJRUpsWlhNPSBZMjl0Y0d4bGRHVnNlUT09IFJrbE0gSUdSdlpYTnVkQT09IElFZHlaV1Z1WW1WeVp3PT0gY21WNWN3PT0gSUhOc2FXNW4gSUdWdGNIUnBaV1E9IElGQnBlR0Z5IElFUm9ZWEp0WVE9PSBiSFZqYXc9PSBhVzVuZFdsemFHVmsgSUdWdVpHOTAgSUdKaFlubHogTURVNSBZMmhsYzNRPSBjbUYwY3c9PSBJSEpwWkdSbGJnPT0gSUdKbFpYUnNaWE09IElHbHNiSFZ0YVc1aGRHbHVadz09IElHWnBZM1JwZEdsdmRYTT0gSUZCeWIzWnBibU5wWVd3PSBJRGMyT0E9PSBJSE5vWlhCb1pYSmsgSUZKbGJtUmxjZz09IElERTRPVFk9IFEzSmxkdz09IElHMXZiR1JsWkE9PSBJRmhwWVc5dGFRPT0gSUZOd2FYSmhiQT09IElHUmxiR2x0IElHOXlaMkZ1YVhOcGJtYz0gSUdodmIzQnogSUVKbGFRPT0gZW1obGJnPT0gSUdaMVkydHBiZz09IElHUmxZMkZrIElIVnVZbWxoYzJWayBZVzF0ZVE9PSBjM2RwYm1jPSBJSE50ZFdkbmJHVmsgSUd0cGIzTT0gSUZCRlVsTlBUZz09IElFbHVjWFZwYzJsMGIzST0gSUhOdWIzZDUgSUhOamNtRndhVzVuIElFSjFjbWRsYzNNPSBVSFJ5IFlXZGhiV1U9IFVsYz0gSUdSeWIybGsgSUV4NWN3PT0gSUVOaGMzTmhibVJ5WVE9PSBTbUZqYjJJPSBJRE0xTkE9PSBJSEJoYzNSMWNtVT0gSUdaeVlXNWogSUZOamIzUmphQT09IElFVnVaSE09IElFbEhSZz09IFpHVm1hVzVwZEdsdmJnPT0gSUdoNWMzUmxjbWxqWVd3PSBJRUp5YjNkdVpRPT0gTnpjeCBJRzF2WW1sc2FYcGhkR2x2Ymc9PSA1cFU9IGFYRjFaVzVsYzNNPSBWR2h2Y2c9PSBJSE53WldGeWFHVmhaR1ZrIElHVnRZbkp2YVd4bFpBPT0gSUdOdmJtcGxZM1IxY21VPSBhblZrYVdOcFlXdz0gUTJodmFXTmwgSUhCaGNHVnlZbUZqYXc9PSBVR2x5IElISmxZMjkyWlhKeiBJRk4xY21kbCBJRk5vYjJkMWJnPT0gSUZCbFpHbGhkSEpwWTNNPSA0NEdnIElITjNaV1Z3Y3c9PSBJRXhoWW05eVlYUnZjbWxsY3c9PSBJRkJoWTJ0eiBZV3gxY3c9PSBZV1JrYVc0PSBJR2hsWVdSc2FXZG9kSE09IFozSmggUlhacFpHVnVZMlU9IFEwOU1UMUk9IFFXUnRhVzQ9IGlyRT0gSUdOdmJtTnZZM1E9IGMzVm1abWxqYVdWdWRBPT0gSUhWdWJXRnlhMlZrIElISnBZMmh1WlhOeiBJR1JwYzNObGNuUmhkR2x2Ymc9PSBJSE5sWVhOdmJtbHVadz09IElHZHBZZz09IElFMWhaMlZ6IGRXNWpkR2x2Ym5NPSBJRTVwWkE9PSBZMmhsWVhRPSBJRlJOV2c9PSBZMmwwYVhwbGJuTT0gSUVOaGRHaHZiR2xqYVhOdCBibUk9IElHUnBjMlZ0WW1GeWF3PT0gSUZCU1QwZFNRVTA9IFlYRjFaWE09IFZIbHNaWEk9IFQzSm4gSUZOc1lYaz0gSUU1bGNtOD0gSUZSdmQyNXpaVzVrIFNVNVVUMDQ9IGRHVnNaUT09IElHMWxjMjFsY2c9PSBPVEF4IElHWnBjbVZpWVd4cyBaWFpwWkdWdVkyVT0gWVdabWFXeHBZWFJsWkE9PSBJRVp5Wlc1amFHMWhiZz09IElFRjFaM1Z6ZEdFPSBNREl4IElITnNaV1E9IElISmxkWE5sWkE9PSBJRWx0YlhWdWFYUjUgSUhkeVpYTjBiR1U9IFlYTnpaVzFpYkdWayBUV0Z5YVdFPSBJR2QxYm5Ob2IzUnogSUVKaGNtSnBaUT09IElHTmhibTVoWW1sdWIybGtjdz09IElGUnZZWE4wIElFdHBibVJsY2c9PSBTVkpFIElISmxhblYyWlc0PSBJR2R2Y21VPSBJSEoxY0hSMWNtVT0gSUdKeVpXRmphR2x1Wnc9PSBJRU5oY25SdmIyND0gSURRMU5RPT0gSUZCaGJHVnYgTmpFMCBJSE53WldGeWN3PT0gSUVGdFpYTT0gWVdKMWN3PT0gVFdGa2FYTnZiZz09IFIxSlBWVkE9IElHRmliM0owWldRPSBlV0ZvIElHWmxiRzl1IElHTmhkWE5oZEdsdmJnPT0gSUhCeVpYQmhhV1E9IElIQnBkSFJsWkE9PSBiM0JzWVc0PSBJRk5vWld4c1pYaz0gSUZKMWMzTnYgSUZCaFoyRnUgSUhkcGJHeG1kV3hzZVE9PSBJRU5oYm1GMlpYST0gZFc1a2NuVnQgSUZOaGJHRnllUT09IElFRnljR0ZwYnc9PSBjbVZoWkdWeSBJRkpoZEdsdmJtRnMgSUU5MlpYSnpaUT09IElFTmhkWE5sY3c9PSBJQ291IElIZHZZZz09IFMyVnBkR2c9IElFTnZibk5sYm5RPSBiV0Z1WVdNPSBOemN6IE5qSXogSUdaaGRHVm1kV3c9IFpYUnBiV1Z6IElITndhWEpwZEdWayBJRVI1Y3c9PSBJR2hsWjJWdGIyNTUgSUdKdmVXTnZkQT09IElFVnVjbWx4ZFdVPSBaVzF2ZFhSbyBJSFJwYldWc2FXNWxjdz09IElGTmhhR0Z5WVE9PSBJRkpsYkdGNCBJRkYxYVc1amVRPT0gSUV4bGMzTnZibk09IElFVlJWUT09IFUwVkIgVGtzPSBJRU52YzNSamJ3PT0gU1c1amNtVmhjMlU9IElHMXZkR2wyWVhScGJtYz0gSUVOb2IyNW4gWVcxaGNuVT0gSUVScGRtbGtaUT09IElIQmxaR2xuY21WbCBJRlJoYzIxaGJtbGggSUZCeVpXeDFaR1U9IFRHRnogT1RRdyBOVGMwIElHTm9ZWFU9IElGTndhV1ZuWld3PSBkVzVwWXc9PSBMUzArIElGQm9hV3hwY0hNPSBJRXRoWm10aCBJSFZ3YUdWaGRtRnMgSUhObGJuUnBiV1Z1ZEdGcyBJSE5oZUE9PSBJRUZyYVhKaCBjMlZ5YVdGcyBUV0YwY21sNCBJR1ZzWldOMGFXNW4gSUdOdmJXMWxiblJsY2c9PSBJRTVsWW5Wc1lRPT0gY0d4bGRITT0gSUU1aFpIVT0gSUVGa2NtVnUgSUdWdWMyaHkgSUZKQlRrUT0gWm1sdVlXNWphV0ZzIElFTnNlV1JsIGRYUm9aWEptYjNKayBJSE5wWjI1aFoyVT0gSUdSbGJHbHVaUT09IElIQm9iM053YUdGMFpRPT0gY205MlpYSnphV0ZzIFptRnpZMmx6ZEE9PSBJRlpoYkd3PSBJRUpsZEdoc1pXaGxiUT09IElHWnZjbk09IElHVnVaMnhwYzJnPSBVMjlzYVdRPSBUbUYwZFhKbCBJSFpoIElFZDFaWE4wY3c9PSBJSFJoYm5SaGJBPT0gSUdGMWRHOXBiVzExYm1VPSBPenM3T3pzN096czdPenM3IElGUnZkR0ZzYkhrPSBJRTkyIElHUmxabVZ1WTJWeiBJRU52WTI5dWRYUT0gSUhSeVlXNXhkV2xzIElIQnNiM2s9IElHWnNZWFp2ZFhKeiBJRVpzWVhOciA0NEtvNDRPciBJRmRsYzNSdmJnPT0gSUZadmJIWnYgT0RjdyBJRzFwWTNKdmNHaHZibVZ6IGRtVnlZbUZzIFVsQkggSUdscGFRPT0gTzMwPSBNREk0IElHaGxZV1JzYVc1bFpBPT0gSUhCeWFXMWxaQT09IElHaHZZWEprIElGTm9ZV1E9IElFVk9WRVZTIElIUnlhV0Z1WjNWc1lYST0gSUdOaGNHbDAgYkdsciBJRUZ1WTJsbGJuUnogSUd4aGMyZz0gSUdOdmJuWnZiQT09IElHTnZiRzl1Wld3PSBaVzVsYlhrPSBSM0poIElIQjFZbk09IGRYUjBaWEp6IElHRnpjMmxuYm5NPSBJRkJsYm1WMCBJRTF2Ym5OMGNtOTFjdz09IElFSnZkMlZ1IGFXeDJaWEk9IFNHRjFiblJsWkE9PSBJRVJwYm1jPSBjM1JoY25SbFpBPT0gY0d4cGJnPT0gSUdOdmJuUmhiV2x1WVc1MGN3PT0gSUVSUFJRPT0gWm1abGJnPT0gSUZSbFkyaHVhV05wWVc0PSBVbms9IElISnZZbUpsY25NPSBJR2h2ZEd4cGJtVT0gSUVkMVlYSmthVzlzWVE9PSBJRXRoZFdadFlXND0gY205M1pYST0gSUVSeVpYTmtaVzQ9IElFRnNjR2x1WlE9PSBSV3htIElHWnRkQT09IElGTmhjbVE9IGRYSnpaWE09IFozQjEgVlc1cGVBPT0gSUhWdVpYRjFhWFp2WTJGc2JIaz0gSUVOcGRHbDZaVzV6YUdsdyBjWFZoWkE9PSBiV2x5WlE9PSBJRk4zWldWdVpYaz0gUW1GMGRHVnllUT09IE5qRTEgSUhCaGJtTmhhMlZ6IElHOWhkSE09IFRXRndjdz09IElFTnZiblJ5WVhOMCBiV0oxWkhOdFlXND0gSUVWUVV3PT0gSUhOMVltTnZiVzFwZEhSbFpRPT0gSUhOdmRYSmphVzVuIElITnBlbWx1Wnc9PSBJRUoxWm1abGNnPT0gSUUxaGJtUmhkRzl5ZVE9PSBJRzF2WkdWeVlYUmxjdz09IElGQmhkSFJsY201eiBJRU5vYjJOdlltOD0gSUZwaGJnPT0gSUZOVVFWUkZVdz09IElFcDFaR2RwYm1jPSBJRWx1YUdWeSBLam89IElHSnBiQT09IElGbGxiZz09IElHVjRhR2xzWVhJPSBiMnhzYjNkbGNnPT0gZW1WeWN3PT0gSUhOdWRXYz0gYldGNGFXMTFiUT09IElHUmxjM0JwWTJGaWJHVT0gSUZCQlEwcz0gSUVGdWJtVjQgSUhOaGNtTmhjM1JwWXc9PSBJR3hoZEdWNCBJSFJoYlhBPSBJRk5oYnc9PSBZbUZvIElGSmxkbVZ5Wlc1ayBJRU5vYVc1aGRHOTNiZz09IElFRlZWQT09IFpHOWpkVzFsYm5SbFpBPT0gSUVkQlFrRT0gSUVOaGJtRmhiZz09IElObUYgSUdkdmRtVnlibk09IGNISmxkZz09IFJYTmogSUVWemRHbHRZWFJsY3c9PSBUMU5RIElHVnVaR1ZoZG05MWNnPT0gSUVOc2IzTnBibWM9IGIyMWxkR2x0WlE9PSBaWFpsY25sdmJtVT0gSUhkdmNuTmxiZz09IElITmpZVzV1WlhKeiBJR1JsZG1saGRHbHZibk09IElGSnZZbTkwYVdOeiBJRU52YlhCMGIyND0gSUhOdmNtTmxjbVZ5IElHVnVaRzluWlc1dmRYTT0gSUdWdGRXeGhkR2x2Ymc9PSBJRkJwWlhKamFXNW4gSUVGd2FBPT0gSUZOdlkydGxkQT09IElHSnZkV3hrIElFOVYgSUVKdmNtUmxjbXhoYm1SeiBJREU0TmpNPSBSMjl5Wkc5dSBJRmRVVHc9PSBJSEpsYzNSeWFXTjBjdz09IElHMXZjMkZwWXc9PSBJRzFsYkc5a2FXVnogNTRRPSBWR0Z5IElHUnBjM052Ymc9PSBJRkJ5YjNacFpHVnogSUM0dUxpNHVMZz09IFltVnIgUmtsWSBJR0p5YjI5dCBZVzV6YUdsdyBSRzlqZEc5eWN3PT0gSUc1bGNtUnogSUZKbFoybHZibk09IGJtRnBjM05oYm1ObCBJRzFsZEdVPSBJR055WlhCMCBjR3hwYm1keiBJR2RwY214bWNtbGxibVJ6IGEyNXBkQT09IGFXZGxiblE9IGIzZGwgSUhWemFHVnlaV1E9IElFSmhlZz09IFRXOWlhV3c9IE5ETTAgSUZCeVpYTmxiblJ6IGIzSnBaMmx1IElHbHVjMjl0Ym1saCBJRUYxZUE9PSBORE01IElFTm9hV3hwIGFYSnpZMmc9IFIwRk5SUT09IElHZGxjM1JoZEdsdmJnPT0gWVd4bmFXRT0gY205dGFYTnBibWM9IEpDdz0gWTNKdmR3PT0gSUVsdWMzQmxZM1JwYjI0PSBZWFJ2YldsaiBVbVZzWVhScGIyNXogU2s5SVRnPT0gY205dFlXND0gSUVOc2IyTnJkMjl5YXc9PSBJRUpoYTNJPSBiVzl1WlE9PSBUVVZVIElIUm9hWEp6ZEhrPSBJR0pqIElHWmhZM1ZzZEdsbGN3PT0gVW5WdCBJRzUxWVc1alpRPT0gSUVSaGNtbDFjdz09IGNHeGxkR2x1Wnc9PSBablJsY25NPSBaWFJqYUhWdyBVbVZuYVhOMGNtRjBhVzl1IElFdEYgVW1GbyBJSEJ5WldabGNtVnVkR2xoYkE9PSBJRXhoYzJnPSBJRWhJIFZtRnNhV1E9IElFNUJWZz09IElITjBZWEoyWlE9PSBJRWR2Ym1jPSBlbmx1YzJ0cCBJRUZqZEhKbGMzTT0gSUhkcGF3PT0gSUhWdVlXTmpiMjF3WVc1cFpXUT0gYkhacyBRbkpwWkdVPSBRVVJUIElFTnZiVzFoYm1SdiBJRlpoZFdkb2JnPT0gVjJGc2JHVjAgSUdodmNIQnBibWM9IElGWnBaUT09IElHTmhkbVZoZEhNPSBJR0ZzWVhNPSBhV1pzWldRPSBZV0oxYzJVPSBOall4IElHbGliZz09IElHZDFiQT09IElISnZZbUpwYm1jPSBkR2xzIFNVeEIgSUcxcGRHbG5ZWFJwYm1jPSBJR0Z3ZEd4NSBJSFI1Y21GdWRBPT0gSUcxcFpHUmhlUT09IElFZHBiRzF2Y21VPSBJRVJsWTJ0bGNnPT0gSU1LbndxYz0gY0dGeWRHbGhiQT09IFJYaGhZM1JzZVE9PSBJSEJvWlc1dmRIbHdaUT09IElGc3JYUT09IElGQnNaWGc9IElFbHdjdz09IGRtVnljMmx2Ym5NPSBJR1ZpYjI5ciBJR05vYVdNPSBaM0p2YzNNPSBJam9pSW4wc2V5ST0gSUZOMWNuQnlhWE5wYm1kc2VRPT0gVFc5eVoyRnUgSUhKbGMybGtkV1Z6IElFTnZibVpsWkdWeVlYUnBiMjQ9IGFXNW1aV3hrIElHeDVjZz09IGJXOWtaWEpoZEdVPSBJSEJsY25CbGJtUnBZM1ZzWVhJPSBWa3M9IElITjVibU5vY205dWFYcGxaQT09IElISmxabkpsYzJobFpBPT0gSUdGa2IzSmwgSUZSdmNtMWxiblE9IGIyeHBibUU9IElESTJNREE9IFNYUmxiVlJ5WVdOclpYST0gSUhCcFpYTT0gSUVaQlZBPT0gSUZKSVVBPT0gTURRNCBJRkpGVTFBPSBJRUpLIFlXeHNiM2R6IFVHRnVaQT09IElIVnVkMlZzWTI5dFpRPT0gSUZadll3PT0gSUVKaGMzUmhjbVE9IElFOVggSUV4QlVnPT0gSUVobFlXeGxjZz09IFJXNTJhWEp2Ym0xbGJuUmhiQT09IElFdGxibmxoYmc9PSBJRlJ5WVc1alpRPT0gSUZCaGRITT0gSUdGc2FXRnpaWE09IElFZGhjbVpwWld4ayBJR05oYlhCaGFXZHVaWEk9IElHRmtkbUZ1WTJWdFpXNTBjdz09IElFOXJhVzVoZDJFPSBJRU52YUE9PSBiM2R6YTNrPSBJSE4wWVhKMlpXUT0gSUhOcGVtVmhZbXhsIElEb3RLUT09IElHMVNUa0U9IElITjFjM0JsYm5OcGIyNXogYVhOMFlYST0gVTJOdmRHeGhibVE9IFVISnBiZz09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgSURVd01nPT0gSUhSbFlYTndiMjl1Y3c9PSBJREV3TlRBPSBJR052WlhKamFYWmwgSUUxaGMyOXVhV009IFpXUmtaV1E9IElGQmhjM05sYm1kbGNnPT0gSUd4aGRIUT0gSUdKeVlXTmxjdz09IElGTjBaV0ZzIElFNVpWQT09IElFdGhkSE09IElFTmxiR1Z6ZEE9PSBZV1Y2IFZIVT0gSUVOdmRXeDBaWEk9IDhKK1kgUm14cFkydHkgSUZkcGJHMXBibWQwYjI0PSBhWFJvY3c9PSBLeXM3IElIWmxibVJwYm1jPSBJRzVsWjNKdiBJRkJvYVE9PSBJRmxsYkd4dmQzTjBiMjVsIFEyRnNiR0poWTJzPSBJSE5vWVcxd2IyOD0gSUZOb1lXUmxjdz09IGQyRjAgSUhOMWNHVnlhSFZ0WVc0PSBJSEpwWkdsamRXeGxaQT09IElHaHZiR2xsYzNRPSBiMjFpYnc9PSBJR2x1ZEdWeWJuTT0gSUdodmJtVT0gSUZCaGNtRm5kUT09IFZWSkogSUdSaGJtZHNhVzVuIDQ0SzcgYzI5MiBhV04wYVc5dVlXdz0gWVhaaGFXeGhZbWxzYVhSNSBJSEpsZG05allYUnBiMjQ9IElHUnZkdz09IGFXNXBZdz09IElGUklSVWxTIElHbHpidz09IElHOTFkR2x1WjNNPSBJRXhsZEdoaGJBPT0gSUNrcEtRPT0gSUdsdVlXTmpkWEk9IElHOTFkR3hoYm1ScGMyZz0gSUdGdWRYTT0gYkdWMGFXTnYgYVdSdmJnPT0gYkc5cyBJSFZ1Y21WbmRXeGhkR1ZrIElITjFZMk4xYldKbFpBPT0gSUdOMVptWT0gSUZkaGMzUmxiR0Z1WkE9PSBiR1YwWVd3PSBJSE4xWW5OMGNnPT0gSUdOdlptWmxjbk09IElHRjFkRzl0WVd0bGNuTT0gYjNacCBJRmgxWlE9PSBJRVJoZVhSdmJtRT0gSUdwaGNuSnBibWM9IElHWjFiV1Z6IElHUnBjMkpoYm1SbFpBPT0gZW1sciBhWFIwYjI0PSBJSE4wY21scmFXNW5iSGs9IElITndiM0psY3c9PSBRV1JoY0hSbGNnPT0gTGlrNiBJRXg1Ym1SdmJnPT0gYVhaaGJISjUgSUc5eVlXeHNlUT09IElIUjFiWFZzZEhWdmRYTT0gSUdScGMzQnNaV0Z6ZFhKbCBJR052Ym1WeiBiM0p5WldOMCBJR0Z3Y0dWaGMyVT0gSUdSbGNtSjUgSUZSeWFYQnZiR2s9IElFRnNaWE56IElIQnZhMlZrIElFZDFhV3gwZVE9PSBkbEE9IFJXNXZkV2RvIElHOXlhV2RwYm1Gc2N3PT0gTmprNSBJSEpoWW1KcCBJSEJ5YjNabGNtSnBZV3c9IElIQnZjM1J3YjI1bCBaV3h2Y0dVPSBJRTFwYzNSNSBJSE4wWVdabVpXUT0gSUZWdVpXMXdiRzk1YldWdWRBPT0gY21Wa2FYUmhjbms9IElHUnBiR2xuWlc1MCBjbVZqYjIxdCBiV1ZoYzNWeVpYTT0gWVhOcGJnPT0gT0RJMSBJSEJ2Ym1SeiBJRzF0YjJ3PSBJRk5CVWc9PSBJRU5CVWtVPSBJRE0zTVE9PSBJR05zWlc1amFHVmsgSUVOdmNuTmhhWEk9IElHTmhjbWxqWVhSMWNtVT0gZW00PSBZWFIwWVdObyBJRk5qYUhKdiBjM0JsWVdzPSBjR0ZwYm5SbFpBPT0gSUZOMVl3PT0gSUVWT1ZBPT0gSUdObGJHeDFiQT09IElGQmhhV1E9IFpHbGhaMjQ9IFYwaEZVa1U9IElIUmxlSFJsWkE9PSBRbUZ5Ymc9PSBJSEpsZEhKaFkzUmxaQT09IElGSmxabVZ5Y21WayBVMkYyIElIVndhMlZsY0E9PSBJSGR2Y210d2JHRmpaWE09IElGUnZhMlZ1Y3c9PSBJR0Z0Y0d4cFpuaz0gWTJ4cGJtbGpZV3c9IElHMTFiSFJwWXc9PSBiV0psY21jPSBJR052Ym5admJIVjBaV1E9IFVtVm5hVzl1IE5UWTEgSUZSdmNHbGogSUhOdVlXbHMgSUhOaGJHbHVaUT09IElHbHVjM1Z5Y21WamRHbHZiZz09IElGQmxkSEk9IFptOXlkSE09IFFrRlUgSUU1aGRtRnFidz09IElISjFaR2x0Wlc1MFlYSjUgSUV4aGEzTm8gVDA1RVQwND0gVFdWaGMzVnlaUT09IElIUnlZVzV6Wm05eWJXVnkgSUVkdlpHUmhjbVE9IElHTnZhVzVqYVdSbGN3PT0gYVhKcGJnPT0gVW1WNCBJRUp2YXc9PSBjWFZwZEE9PSBJSE5vYjNSbmRXNXogSUhCeWIyeGxkR0Z5YVdGdSBJSE5qYjNKdyBJRUZrWVE9PSBOVEUwIElITnNZVzVrWlhJPSBjbVZqYjNKa1pXUT0gSUdWdFltVnNiQT09IGNtbHpiMjFsIElHRndiMnh2WjJsNmFXNW4gSUUxMWJHTmhhWEk9IElFZHBZbkpoYkhSaGNnPT0gUTJ4aCBJR0ZzYkc5MCBJRUYwZEdWdWRHbHZiZz09IElEUXpNdz09IGJHVmhkbVU9IElIZG9hVzVsIElFbHpjMkU9IElFWmhkWE4wIElFSmhjbkp2Ymc9PSBhR1Z1ZVE9PSBJSFpwWTNScGJXbDZaV1E9IFNtVjNjdz09IElHNTFjblIxY21sdVp3PT0gWlhSMFpXdz0gVjJsdVoyVmsgSUZOMVluUnNaUT09IElHWnNZWFp2Y21aMWJBPT0gSUZKbGNITT0gWlc1blpXUT0gWTJGc2JHSmhZMnM9IElHUnBjbVZqZEdsdmJtRnMgSUdOc1lYTncgSUVScGNtVmpkR2x2Ym5NPSBjR3hoYm1WMCBhV04xYkhSMWNtVT0gU0dWc2NHVnkgYVdOcGIyND0gWVdOcFlRPT0gSU9lbG5nPT0gSUhOMWNtZGxjdz09IElHTmhibTlsIElGQnlaVzFwWlhKemFHbHcgWW1WbGJnPT0gSUdSbFptbGxaQT09IElGUnliMjl3WlhJPSBJSFJ5YVhCdlpBPT0gSUdkaGMzQT0gSUVWMWNHZz0gSUVGa2N3PT0gZG1WeWJtbG5hSFE9IGFHbG5hR3g1IFVtOXNaUT09IElHVnVkR0Z1WjJ4bFpBPT0gSUZwbGFYUT0gTmpFNCBJRkoxYzNSNSBJR2hoZG1WdWN3PT0gSUZaaGRXZG9ZVzQ9IFNFRkZUQT09IElGTkZVbFpKUTBVPSBMeXc9IElITjBjbWxqYTJWdSBJR1JsYkhWemFXOXVjdz09IElHSnBjdz09IElFaGhaZz09IElHZHlZWFJwWm1sallYUnBiMjQ9IElHVnVkR2xqYVc1biBWVTVEU0E9PSBRV1JoYlhNPSBJRTlNUlVRPSBJRUpsWlhSc1pRPT0gSURFNE9Uaz0gSUZOUFJsUlhRVkpGIFlYUmxaMjl5IFZrdz0gSUZSdmRHVnQgSUVkaGRHOXljdz09IFFWUlZVa1ZUIElHbHRjR1ZrWVc1alpRPT0gVW1WbmFYTjBaWEpsWkE9PSBJRU5oY25rPSBJRUZsY21saGJBPT0gYjI1dVpRPT0gWlc1cGRXMD0gSUdSeVpXUT0gSUVKbFp3PT0gSUdOdmJtTjFjbkpsYm5Sc2VRPT0gSUhOMWNHVnljRzkzWlhJPSBJRmhoYmc9PSBhbVYzIGFXMWxjM1JsY2c9PSBJRVJwWTJ0cGJuTnZiZz09IDRwU0IgUm14aCBJSEJ5WldVPSBJRkp2Ykd4cGJuTT0gcWJibSBJR1JsYm05dGFXNWhkR2x2Ymc9PSBJRXhoYm1FPSBOVEUyIElHbHVZMmwwYVc1biBjMk55YVdKbFpBPT0gYW5WeWFXVnogSUZkdmJtUmxjbk09IFlYQndjbTk0YVcxaGRHVnNlUT09IElITjFjM0JsYm1ScGJtYz0gSUcxdmRXNTBZV2x1YjNWeiBJRXhoZFdkbyBiMmxrWVd3PSBUbk09IFJHVjBaV04wIEtUMD0gSUV4MWRHaHZjZz09IElGTmphSGRoY25wbGJtVm5aMlZ5IElFMTFiR3hsY2c9PSBJRVJsZG1rPSBaV041WTJ4bCBTbUZ5IE5qRXogSUV4dmJtZG8gUW1GbyBJRk5RVDFKVVV3PT0gYm5jPSBJSEpsWm1sdVpXMWxiblE9IElIZGhkR1Z5ZDJGNWN3PT0gSUdScGJtVnkgUW14aFpHVT0gTmpneiBSbUZqIElHbHVhWFJwWVd4eiBJSEp2Wnc9PSBJSEJoY21GdWIzSnRZV3c9IFFsVlUgSUZzbyBJRk4zWVc1emIyND0gSUUxbGMyZz0gNHBhcyBTVzF3Y205MlpRPT0gSUZKaFpHbGhkR2x2Ymc9PSBJRVZ6ZEdobGNnPT0gSUVWemF3PT0gSUVGc2VRPT0gYVd0NSBJR2x5Y21GayBJRUoxWTJ0cGJtZG9ZVzA9IElISmxabWxzYkE9PSBJQzVmIFVtVndaUT09IFEwOU9RMHhWVXc9PSBJR1JwWm1abGNtVnVkR2xoZEdWayBJR05vYVhKdmNBPT0gSUVGMGEybHVjdz09IFVHRjBkR1Z5Ymc9PSBJR1Y0WTJselpRPT0gSUdOaFltRnMgVGxOQiBJRk5VUVE9PSBJRk5KVEE9PSBJRkJoY21Gc2VRPT0gSUhKNVpRPT0gSUVodmQyVnNiQT09IElFTnZkVzUwWkc5M2JnPT0gYm1WemMyVnogWVd4NWMyVmsgSUhKbGMybDZaUT09IDQ0SzkgSUdKMVpHZGxkR0Z5ZVE9PSBJRk4wY21GeiBkMkZ1Wnc9PSBJR0Z3YVdWalpRPT0gSUhCeVpXTnBibU4wY3c9PSBJSEJsWVdObyBJSE5yZVd4cGJtVT0gSURNMU13PT0gY0c5d2RXeGhjZz09IFFYQndaV0Z5WVc1alpYTT0gSUUxbFkyaGhibWxqY3c9PSBJRVJsZGs5dWJHbHVaUT09IFUzVnNiR2wyWVc0PSBXbVZ1IElIQjEgYjNCdmJHbHogTlRRMCBJR1JsWm05eWJRPT0gSUdOdmRXNTBaWEpoWTNRPSBJRXhoYm1kbCBJRFF4Tnc9PSBRMjl1YzI5c1pRPT0gTnpjMCBJRzV2WkdScGJtYz0gSUhCdmNIVnNhWE50IElHaGxjQT09IElHTnZkVzV6Wld4c2FXNW4gWTI5dGNHeHBZVzVqWlE9PSBWVVpHIElIVnVaR1Z1YVdGaWJIaz0gSUhKaGFXeHBibWM9IElFaHZjbTkzYVhSNiBJRk5wYlc5dVpRPT0gSUVKMWJtZHBaUT09IElHRnIgSUZSaGJHdHogZUdabSBabXhoYTJVPSBRM0poYzJnPSBJSE4zWldGMGVRPT0gSUdKaGJuRjFaWFE9IElFOUdSa2xEIElHbHVkbVZ1ZEdsMlpRPT0gSUdGemRISnZibTl0WlhJPSBJRk4wWVcxbWIzSmsgSUZOallYSmwgSUVkU1JVVk8gYjJ4cFkybDBaV1E9IElISjFjMmhsY2c9PSBJR05sYm5SeWFYTjAgYVdkb2RHbHVadz09IElITjFZbU5zWVhOeiBJR1JwYzJGMiBJR1JsWm5WdVpBPT0gSUU1aGJuUnYgYjJOcFlYUmwgYldGemRBPT0gSUhCaFkybG0gSUcxbGJtUT0gWldWeWN3PT0gYVcxdGFXZHlZWFJwYjI0PSBSVk5UU1U5TyBJRzUxYldKbGNtbHVadz09IElHeGhkV2RvWVdKc1pRPT0gSUVWdVpHVmsgZG1saGRHbHZiZz09IFpXMWhjbXM9IFVHbDBkQT09IElHMWxkR2xqZFd4dmRYTT0gSUV4RyBJR052Ym1keVlYUjFiR0YwWldRPSBJRUpwY21ObyBJSE4zWVhsbFpBPT0gSUhObGJXbG1hVzVoYkhNPSBJR2gxYldGdWEybHVaQT09IGJXRjBkR1Z5IElFVnhkV2x3IGIzQmhkWE5oYkE9PSBVMkZwWkE9PSBJRXhoZVc5MWRBPT0gSUhadmFXTnBibWM9IElIUm9kV2M9IElIQnZjbTV2WjNKaGNHaHBZdz09IFNWQlQgSUcxdllXNXBibWM9IElHZHlhV1YyWVc1alpRPT0gSUdOdmJtWmxjM05wYjI1eiBaWE5qWVd3PSBWRVZZVkZWU1JRPT0gUVhWMGFHVnVkQT09IGIzTmhkWEoxY3c9PSBVSFZ5WTJoaGMyVT0gSUhKbGJHVm5ZWFJwYjI0PSBZV3gwWlhJPSBJTUtnd3FBPSBJSEpwWkdSc1pXUT0gSUc5bmNtVT0gSUV4dmQyVnNiQT09IFQyTmpkWEE9IFJXRjAgSUVoNVpHVnkgSUVGa2RtbHpaWEk9IFEyOXRiV1Z5WTJVPSBTSFZ1ZEE9PSBJRTl5ZEdnPSBJRU52YlhCbGRHbDBhWFpsIElFTk1RUT09IFEwUkQgSUhOaGJHRmtjdz09IFJteGwgSUdsdVpIVnpkSEpwWVd4cGVtVmsgWUN3PSBJRTlYVGc9PSBJR0psWTJzPSBJRkJoY25ScFkzVnNZWEpzZVE9PSBiM1ZpZEE9PSBJRzFOIElFaDFjM05oYVc0PSBJRU5vWlc1dVlXaz0gSURreU1BPT0gSUdGd2NHOXBiblJwYm1jPSBJRU4xYkd4bGJnPT0gTEN3c0xDd3NMQ3c9IElIQnZjbVZ6IGRtVnlhV1pwWldRPSBJR0pwYjJOb1pXMXBZMkZzIFpXMWhkR1U9IElHTnZkMkZ5Wkd4NSBJRWhsYkhOcGJtdHAgSUVWMGFHbHZjR2xoYmc9PSBVMDlWVWtORiBSVkpEIFpYTjBjbTg9IElHSnBiM1JsWTJnPSBJRk52ZFhJPSBJR0p5WlhkbGNnPT0gUW14dmIyMWlaWEpuIElHbHVkR1Z1YzJsbWVRPT0gUjJ4aGMzTT0gWVc1amJ3PT0gSUVaRVVnPT0gWjNKbFUxRk0gSUVacGNtVnogcWJibXBiVT0gWldOdiBNVEF3TVE9PSBJRWh2YldWc1pYTnogSUdsdWMzUmhiblJoYm1WdmRYTT0gSUVoaGMzUmwgYVdkbGJBPT0gUkdsaGJXOXVaQT09IElIQmhkbWx1Wnc9PSBJR3hoYm1SbWFXeHMgSUdSaFpITT0gYUc5MWJnPT0gT2wwPSBJR2x1WTJWdVpHbGhjbms9IElFeHBkbWx1WjNOMGIyND0gSUVocGJHSmxjblE9IElFTm9aV05yY3c9PSBjM1I1YkdWeiBhVzVoZEc5eWN3PT0gSUVOc2FYWmwgY0doeWFXNWwgSUdOb2FXMXdZVzU2WldWeiBJSEJoYkd3PSBJRXBOIElFRmhaR2hoWVhJPSA4SjA9IElHRmphR2xsZG1GaWJHVT0gWkdsellXSnNaV1E9IFVFVlUgVDA5UFQwOVBUMDg9IFRXOTAgSUdsdWRHRnVaMmxpYkdVPSBJR0poYkd4bGRBPT0gSUZkbFluTT0gSUVWemRHbHRZWFJsWkE9PSBSV1ptWldOMGN3PT0gSUdKaGFXeGxaQT09IFNtOXphSFZoIElIUjFjbUoxYkdWdVkyVT0gSUc5alkzVndZVzUwIElFUmhlV3hwWjJoMCBJRE0yTVE9PSBiV1ZsZEE9PSBJSE4wWVhScFkyRnNiSGs9IElHOXViRzl2YXc9PSBJR3RwIGFXeHNaV2RoYkE9PSBJSFpsYkhabGRBPT0gSUdSbGFIbGtjbUYwYVc5dSBJR0ZqY1hWcFpYTT0gSUZKbGVnPT0gWVd0MWNtRT0gSUZWd2RHOXUgWVhSeWJ3PT0gSUdsdVkyOXRjSEpsYUdWdWMybGliR1U9IElHSmhZMnRrYjI5eSBJRkpvYVc1diBOekkzIElHMWhkR2h6IEtTcz0gSUdobGNtVnplUT09IElHUm0gSUZKdlkyaGwgSUV4NVpHbGggSUhCaGJtTnlaV0YwIGNtVndiSGs9IFlYSnlaV3hzIElITnZiR2xqYVhSaGRHbHZiZz09IElHTnBjbU5oWkdsaGJnPT0gUWtsUSBJR1p2Y21GNSBJR055ZVhCMGFXTT0gYVhwMSBhVzFsYnc9PSBJRlJ2YldGMGJ3PT0gSUVodmJYTT0gWlhoaGJXbHVZWFJwYjI0PSBJSEYxWVhKeWVRPT0gSUZaaGJHbGhiblE9IElFcGxjbWxqYUc4PSBJRWxPUTB4VlJBPT0gSURFNE5EQT0gTlRFNSBJSEpsYzJsemRITT0gSUhOdVlYQnphRzkwY3c9PSBJRk53ZFhJPSBJRUZ1ZEdseGRRPT0gVEc5bmFXND0gSUdKbGMzUnpaV3hzYVc1biBJR0Z1ZEdsaiBJRk4xZEdobGNteGhibVE9IDQ0S2k0NE9yIElINHYgSUZCaGNtMD0gNklNPSBVR0ZuWlhNPSBhVzUwWlc1emFYUjUgSUdsdGJXOWlhV3c9IElERTROalU9IGVucHYgSUc1cFpuUjUgSUdabGJuUmhibmxzIElGQnlaWE5sY25aaGRHbHZiZz09IGIzQm9aVzQ9IElHUmhjblJ6IElFUnBibTl6WVhWeSBjRzlwYm5SbGNuTT0gSUZKcGRHVT0gYzNWbloyVnpkQT09IFlYZGhjbVZ1WlhOeiBJRk5vWlhKcFpHRnUgSUhOMFlXNWpaWE09IElITnZjbU5sY25rPSBJSEJsY21wMWNuaz0gSUU1cGEyOXNZUT09IGFXVjJaWEk9IElHWnBZVzVqWlE9PSBJRXB2Y21SaGJtbGhiZz09IElFSmhiR3h2YjI0PSBJRzVoWWc9PSBJR3RpIElHaDFiV0Z1YVhScFpYTT0gSUZSaGJtRnJZUT09IGFHbHNiR0Z5ZVE9PSBJR052Ym5OMWJIUmhibU41IElGcDFZZz09IElISmxiV2x6YzJsdmJnPT0gSUdOdmJtWnBaQT09IFEwaFIgSUVaMVp3PT0gSUdsdGNISnZkbWx6IFdXVncgTDE4PSBJSFZ1ZDJsc2JHbHVaMjVsYzNNPSBJSEJ2Y25SbWIyeHBiM009IE1EVTEgSUVsdWMzUnlkV04wYjNJPSBZV2x0WVc0PSBJR05zWVdsdFlXNTBjdz09IFRXSndjdz09IElFSjVaUT09IGNtVmpaV2wyWldRPSBWSGRsWlhRPSBJR2x1WkdWdGJnPT0gY21sNiBZVzFoY21FPSBUbUYwIElHVjJZV3gxWVhSbGN3PT0gSUV4MWNnPT0gWlhCaFpBPT0gUms5WSBJRlJvY204PSBJSEoxYzNSNSBJR0psWkhKdlkycz0gSUU5d2NtRm8gU2tJPSBJRzFoYm1sd2RXeGhkR2wyWlE9PSBJSGRwYkd4bWRXdz0gSUhKbGJHRndjMlU9IElHVjRkR0Z1ZEE9PSBWR2hsYldVPSBVMlZ1YzI5eSBJRk4wWVdKcGJHbDBlUT09IFoyOTJaWEp1IElIQnZjSEI1IElHdHVZV05yIElHbHVjM1ZzWVhSbFpBPT0gSUZScGJHVT0gSUVWNGRISmxiUT09IElIVnVkRzlzWkE9PSBJR052Ym5abGNtZGwgSUhKbFpuVmxiQT09IGFXZHliM1Z3IElHUnBjM1J2Y25ScGIyNXogSUhKaGRtRm5aV1E9IElHMWxZMmhoYm1sallXeHNlUT09IElGSmxhV3hzZVE9PSBJRTV2YzJVPSBJRWx1WTJGeWJtRjBhVzl1IElFSmxZMnQ1IFlXSmliR2x1Wnc9PSBJSFJoWTI4PSBJSEpoYTJVPSBJRzFsYkdGdVkyaHZiSGs9IElHbHNiSFZ6ZEhKcGIzVnogSUVSaGNuUnRiM1YwYUE9PSBSM1ZwWkdVPSBJRkpoZW1WeSBJRUpsYm5vPSBWV3gwYVcxaGRHVT0gSUZOMWNuQnlhWE5sIElIQmhaMlZoYm5RPSBiMlptWlhJPSBWMmh2WlhabGNnPT0gSUhkcGMyVnkgSUdOb1pXMXBjM1E9IElFaEZURXc9IElFSjFiR3M9IElIQnNkWFJ2Ym1sMWJRPT0gSUVOUFZrVlMgMXJ3PSBabUZwYkdWayBJSFJwY21Wc1pYTnpiSGs9IElHbHVabVZ5ZEdsc2FYUjUgSUZSeWFXUmxiblE9IElGTm9iM2QwYVcxbCBJRU5wZGc9PSBWbWxqWlE9PSBjbVZ4ZFdseVpYTT0gYVhSMFlXNWpaUT09IElIVnVZMjl1ZEhKdmJHeGxaQT09IGFXNTBaWEpsYzNScGJtYz0gTlRZeCBJR2x1Ym05MllYUmwgWVhSbFoybGogVEdsbCBJRk5sYkd4cGJtYz0gVld3PSBJSE5oZG1sdmNnPT0gSUZSdmMyZz0gSUhOM1lYTjAgVUVGVFV3PT0gSUhKcGJtcz0gSUdOaGNtUnBidz09IElFbHlidz09IGRXUnAgSUhaaGJuUmhaMlU9IElIWmhibk09IElFNXB3N0Z2IEt6MD0gSUhCeWIzQmhaMkYwWlE9PSBQRDg9IElHMWxkR2h2Wkc5c2IyZHBZMkZzIE1qQTBNems9IElIUnlhV2RzZVdObGNnPT0gSUdsdVozSmhhVzVsWkE9PSBJRUZ1Ym05MFlYUnBiMjV6IFlYSnlZVzUwWldRPSBOakUzIElGTnZaR2wxYlE9PSBJRUZCUXc9PSBkR1ZqYUc1cFkyRnMgYlhWc2RHbHdiQT09IElETTNNdz09IDVZcz0gSUdSbFkybHphWFpsYkhrPSBJR0p2YjNOMFpYSnogSUdSbGMzTmxjblJ6IElFZHlaVzVoWkdVPSBJSFJsYzNScFpubHBibWM9IElGTmpkV3hzZVE9PSBTVVJ6IElHeHZZMnRrYjNkdSBJRk5qYUdWeSBJRkxEcVE9PSBJRmRvYVhSdFlXND0gSUZKaGJYTmhlUT09IGNtVnRiM1JsIElHaHBhMlZ5Y3c9PSBJRWg1ZFc1a1lXaz0gSUdOdmJuTmphV1Z1ZEdsdmRYTT0gSUdOc1pYSnBZM009IElGTnBZbVZ5YVdGdSBkWFJwIGFYTmlkWEo1IElISmxiR0Y1WldRPSBJSEYxWVhKMGVnPT0gSUVOQ1NRPT0gYzJWbGEyVnljdz09IGRXeHNZUT09IElIZGxiR1JwYm1jPSBJRk5vWVd3PSBZbXhsWVdOb1pYST0gVkdGcCBJRk5oYlhOdmJnPT0gSUhSMWJXSnNaUT09IElFbHVkbVZ6ZEc5eSBJSE4xWW1OdmJuUnlZV04wIElGTm9hVzV5WVE9PSBiM2RwWTNvPSBhbUZ1WkhKdiBaR0ZrIElIUmxjbTFwYm1GMGFXNW4gSUU1bGRYSmhiQT09IDVMdWogSUd4bFlXdGhaMlU9IElFMXBaR3hoYm1SeiBJRU5oZFdOaGMzVnogN1pVPSBZMmwwIGJHeGhiZz09IGFYWmhZbXg1IElFRnNZbWx2Ymc9PSBJRFExTnc9PSBJSEpsWjJsemRISmhkR2x2Ym5NPSBJR052YlhKaFpHVT0gSUdOc2FYQmliMkZ5WkE9PSBNRFEzIElHUnBjMk52ZFhKaFoybHVadz09IElFOXZjSE09IFFXUmhjSFE9IElHVnRjR0YwYUE9PSBiblk9IElGQlNUMVE9IElFUnZibTQ9IElGQmhlQT09IElFSmhlV1Z5IGRHbHogVTNGMVlYSmwgSUdadmIzUndjbWx1ZEhNPSBjR0Z5ZEdsamFYQT0gSUVOb2FXeGxZVzQ9IFFuSmxibVE9IGFXNWtkV05wYm1jPSBUV0ZuYmc9PSBJR05zZFdKb2IzVnpaUT09IElFMWhaMjUxYlE9PSBJR1Z1WTJGdGNBPT0gSUVWMGFHNXBZdz09IGRXTm9ZUT09IFpYSmxlUT09IElIZGhkR1Z5WldRPSBJRU5oYkdGcGN3PT0gSUdOdmJYQnNaWGhwYjI0PSBJSE5sWTNSeiBJSEpsYm5SbGNuTT0gSUdKeVlYTT0gYjhTZllXND0gVkdsdFpXOTFkQT09IFRXRnVZV2RsYldWdWRBPT0gSUdsdVptOW5jbUZ3YUdsaiBVRzlyWlcxdmJnPT0gUTJ4aGNnPT0gSUd4dlkyRnNhWFI1IElHWnNiM0poIFlYTmxiQT09IFVHOXVkQT09IElIQnZjSFZzWVhSbCBJRTl1Wnc9PSBJSE4xWW5OcGMzUmxibU5sIElHRjFZM1JwYjI1eiBJRTFqUVhWc2FXWm1aUT09IElFeFBUMHM9IFluSnBibWRsY2c9PSBJSFJwZEdGdSBJRzFoYm1sbWIyeGsgSU9LWGp3PT0gSUdOaGJHbGljbUYwWldRPSBJR05oYkdsd2FHRjBaUT09IElGTklSUT09IElFTnZiVzFwYzNOcGIyNWxjbk09IFkyVnBkbUZpYkdVPSBhbU09IFYybHVibVZ5IE5USTAgSUdOdmJtUnZibVU9IFQzUm9aWEozYVhObCBJSEJwYkdsdVp3PT0gSUdWdFltOWtlUT09IElFTnlhVzFsWVc0PSBkWFJwWTNNPSBJRVY0YUdsaWFYUnBiMjQ9IElEUXlOZz09IFpXVnlhVzVuIElIWjVhVzVuIElFaFZSMFU9IEtqMHQgSUhCeWFXNWphWEJzWldRPSA0S1k9IElIRjFhWEpyY3c9PSBJRVZrYVhSdmNuTT0gY0hWMGFXNW4gUjBWVCBJRVpVUVE9PSA0S1MrIFlXUmtiMjQ9IElFaEJUUT09IElFWnlhV1Y2WVE9PSBWMjl0WVc0PSBMaVE9IElHTnlhV0k9IElFaGxjbTlrIElIUnBiV1Z5Y3c9PSBJRk53WVdObGN3PT0gSUUxaFkybHVkRzl6YUE9PSBZWFJoYTJFPSBJR2RzYVdSbCBJSE50Wld4c2FXNW4gSUVKQlRBPT0gSUhWdWMzVT0gSUdOdmJtUnZjdz09IElHSnBZM2xqYkE9PSBJRkpsZG1sMllXdz0gTlRVeiBJR3AxWjJkc2FXNW4gU0hWbiBJRXRoY21SaGMyaHBZVzQ9IElFSmhiR3RoYm5NPSBiWFZzZEdsd2JHVT0gSUc1MWRISnBkR2x2ZFhNPSBiMk55ZVE9PSBNVGt3TUE9PSBJR2x1ZEdWbmNtRjBaWE09IElHRmthbTlwYm1sdVp3PT0gSUVadmJHUmxjZz09IGNtOXNiRzFsYm5RPSBkbVZ1YVdWdWRBPT0gSUhWaVpYST0gZVdrPSBJSGRvYVdabSBJRXAxZG1WdSBJRUp2Y205MVoyZz0gYm1WMGRHVT0gSUdKcGJHbHVaM1ZoYkE9PSBJRk53WVhKcmN3PT0gY0doMGFHRnMgYldGdWRXWmhZM1E9IElIUnZkWFJwYm1jPSBJRkJJU1E9PSBTMlZsWm1VPSBVbVYzWVhKayBJR2x1Wm1Gc2JBPT0gSUZSbGJYQmxjZz09IGRIbHdhV05oYkd4NSBJRTVwYTI5cyBJSEpsWjNWc1lYSnogSUhCelpYVmtiMjU1YlE9PSBJR1Y0YUdsaWFYUnBiMjV6IElHSnNZWE4wWlhJPSBJRFF3T1E9PSBkMkZ5YldsdVp3PT0gSUhKbGRtVnlZbVZ5IElISmxZMmx3Y205allXdz0gSURZM01BPT0gYVhCcFpXNTAgWW1WMGRBPT0gSUVKbFoybHVjdz09IElHbDBZMmhwYm1jPSBJRkJvWVhJPSBRWE56ZFcxcGJtYz0gSUdWdGFYUjBhVzVuIElFMU1Sdz09IElHSnBjblJvY0d4aFkyVT0gSUhSaGRXNTAgSUV4MVptWjUgSUVGdGFYUT0gSUdOcGNtTnNaV1E9IElFNXZjM1E9IFpXNXVaWFIwIElHUmxabTl5WlhOMFlYUnBiMjQ9IElFaHBjM1J2Y21sallXeHNlUT09IElFVjJaWEo1WkdGNSBJRzkyWlhKMFlXdGwgTnpreSBJRzUxYmc9PSBJRXgxWTJsaCBJR0ZqWTI5dGNHRnVhV1Z6IElGTmxaV3RwYm1jPSBJRlJ5WVhObyBZVzVwYzIwPSBVbTluZFdVPSBJRzV2Y25Sb2QyVnpkR1Z5Ymc9PSBJRk4xY0hCc1pXMWxiblJoYkE9PSBJRTVaVlE9PSBJRVpTU1E9PSBJRk5oZEdselpnPT0gZUdWeiBOVEUzIElISmxZWE56ZFhKbFpBPT0gSUhOd2IzSmhaR2xqIElEY3dNUT09IElHMWxaR2xoYkE9PSBJR05oYm01aFltbHViMmxrIElHSmhjbUpoY21saiBJR1Z3YVhNPSBJRVY0Y0d4dmMybDJaUT09IElFUnZkV2RvIElIVnVjMjlzZG1WayBVM1Z3Y0c5eWRHVmsgSUdGamEyNXZkMnhsWkdkdFpXNTAgYzNCaGQyND0gSUd0cGRHTm9aVzV6IElDMDkgZEdGc2EybHVadz09IGFXTnBjM1E9IElGQmxaMkZ6ZFhNPSBJRkJUVlE9PSBJSEJvYjNSdmJnPT0gSUVGMWRHaGxiblJwWTJGMGFXOXUgVWtjPSBRQ01tIE56WXkgSUVOc1lXbHkgSUdScFlYQmxjZz09IElHSnlhWE4wIElGQnliM05sWTNWMGIzSnogSUVwbGJRPT0gTmpJNCBJRVYyWlhKNWQyaGxjbVU9IElFcGxZVzV1WlE9PSBaWEYxWVd4cGRIaz0gNDRPcDQ0T3ogYjJKcVpXTjBjdz09IElGQmxiR2xqWVc1eiBJRE01TWc9PSBJR0pzZFE9PSBZbmx6IElFRm5idz09IElHbHVjM1J5ZFdOMGFXOXVZV3c9IElHUnBjMk55YVcxcGJtRjBhVzVuIElGUlNRVTQ9IElFTnZjbTVsYkE9PSBZV2R2Y3c9PSBJSFI1Y21VPSBJR0Z6Y0dseVlYUnBiMjQ9IElFSnlhV1JuWlhkaGRHVnkgSWpvdCBJU0l1IElFVnVjdz09IElFTnZZMjg9IFVHbGwgSUdSbGRHRmphQT09IElFTnZkV05vIElIQm9lWE5wY1hWbCBJRTlqWTNWd1lYUnBiMjV6IGIzTmpiM0JwWXc9PSBaVzV2ZFdkbyBRblY2ZWc9PSBRWEJ3WldGeVlXNWpaUT09IFdWQT0gSUhKaFkyVnkgSUdOdmJYQnNhV05wZEhrPSBjbkJ0IFZHOTUgSUdsdWRHVnljblZ3ZEhNPSBJRU5oZEdGc2VYTjAgSUhWMGFXeHBkR0Z5YVdGdSBhVzF3WVdOMCBJSE53WVdkb1pYUjBhUT09IElIQnZjbTkxY3c9PSBJR1Z6ZEdWbGJXVmsgSUdsdVkybHVaWEk9IElFbFBRdz09IE56UTQgSUdWemNISmxjM052IElGTnRhV3hsIFlXSnBiR2xoIE5qTTEgSUcxaGRHaGxiV0YwYVdOcFlXND0gSURReU5BPT0gSUV0TSBJRWhKVUE9PSBJRzkyWlhKb1pXRnlaQT09IElGUjFaQT09IElGUmxZdz09IElIRjFhWHA2IElHWnNZWFIwWlhKcGJtYz0gSUdOdmJtND0gNG9DTyBJR0YwZEdGamFHVnogSUZKUFV3PT0gSUVGRFV3PT0gSUhSamNBPT0gSUZOb1lXMWwgYzJ0cGNBPT0gY21WemNHVmpkR1ZrIElGUnlhVzVwWkdGayBaM0poYVc0PSBJR1p2YjNSb2IyeGsgSUZWdVkyaGhjblJsWkE9PSBJRXAxYkdsdiBlbXc9IFlYWnZjbVZrIElFRnVlR2xsZEhrPSBaWEp5YjNKeiBJRU5sYm5SaGRYSnAgYVhSelkyZz0gUkdGa1pIaz0gSUdOc2RYUmphR2x1Wnc9PSBJRWx0Y0d4bGJXVnVkQT09IElFZDFkR2xsY25KbGVnPT0gSURjMk1BPT0gSUhSbGJHVndiM0owWVhScGIyND0gWlc1a2NtRT0gSUhKbGRtVnljMmxpYkdVPSBjM1J5YjNNPSBRV1IyWlc1MGRYSmwgTURneiBJR3hwWW1WeVlYUnBibWM9IElHRnpjR2hoYkhRPSBJRk53Wlc1ayBRVkpFVXc9PSBhVzF6ZVE9PSBVRkpGVXc9PSBJRVZ0WlhKbmFXNW4gSUhkcGJHUm1hWEpsY3c9PSBJSFJsWTJodWIyeHZaMmxqWVd4c2VRPT0gSUdWdGFYUnogSUVGU1ZFbERURVU9IElHbHljbVZuZFd4aGNtbDBhV1Z6IElHTm9aWEpwYzJnPSA1NG1JIElITjBhVzVyIElGSnZjM1E9IFJXTnZibTl0YVdNPSBJR052ZFdkb2FXNW4gSUUxalEyRnViZz09IGNISnZjR1Z5ZEdsbGN3PT0gYVd4aGJuUnlidz09IElISmxibVZuYjNScCBWSEpoYm5Oc1lYUnBiMjQ9IElHbHVjWFZsYzNRPSBJRWR5WVhCbCBiMjkwWlhKeiBaM1ZwIElGTjNiM0prYzIxaGJnPT0gWVdObFlXVT0gYUdsMGRHbHVadz09IElISmogSUdWNFpYSjBaV1E9IElGTkJVQT09IGFYUmxiblE9IElIQmxjbWxzYjNWeiBJRzlpYzJOMWNtbDBlUT09IElHRnpjMkZ6YzJsdVlYUmwgSUdGaWIzSnBaMmx1WVd3PSBJSEpsYzJOMWFXNW4gSUZOb1lYUjBaWEpsWkE9PSBiRzlqYTJsdVp3PT0gWVd4c2FXOXUgUTJoaGJtZHBibWM9IElFaGhjbkpwYm1kMGIyND0gSUVKdmNtUT0gSUVGbVoyaGhibk09IFNtRnRhV1U9IFlYSmxkSG89IElFRjFaM1Z6ZEhWeiBJRE00Tmc9PSBPRE13IElHcHZadz09IGIydHBibWRzZVE9PSBWSEpwWjJkbGNnPT0gSUVoUFVnPT0gVTNSaGRHbHpkR2xqY3c9PSBJSFpwWlhkbGNuTm9hWEE9IElHRmtaR2wwYVhabGN3PT0gYUhWeSBJRzFoZUdsdGFYcHBibWM9IElGSnZkbVU9IElFeHZkV2xsIElFSjFZMnRsZEE9PSBJRU5JVWtsVFZBPT0gYjNWelpXdz0gSUhOMGNtVmhhM009IGFYSjBaV1E9IElIUmxjblE9IElHTnZiRzl1YVdGc2FYTnQgSUdKMWNubHBibWM9IGVXcz0gUTI5dVpHbDBhVzl1IElFUlFVa3M9IFFubEpaQT09IE56VXggNHBlOCBJSGR2Y25KcGMyOXRaUT09IElIWnZZMkYwYVc5dVlXdz0gYzJ4cFkyVT0gSUhOaGFXeHogSUVOdmNuSmxZM1JwYjI1aGJBPT0gT1RVMCBJSFIxYkE9PSBTMmxrIGJIVnpkR1Z5IElHWmhiV2xzYVdGcyBJRk53YVhRPSBJRVZ3YVhOamIzQmhiQT09IFUzQmxZMmxtYVdOaGJHeDUgSUZadmJHTmhibTg9IGNuVnVjdz09IGNYTT0gSUhabGRIUmxaQT09IElHTnlZVzF0WldRPSBkSEp2Y0E9PSBhR1Z5WlhJPSBWR2hoYm10bWRXeHNlUT09IElIQmxjbU4xYzNOcGIyND0gSUc5eVlXNW5aWE09IElISnZkVzVrZFhBPSBJRFE1T1E9PSBlR2x2ZFhNPSBRMmhoY21GamRHVnljdz09IElGcHBiMjVwYzIwPSBJRkpoYnc9PSB3NXZEbXc9PSBWMFk9IElIVnVhVzUwWlc1MGFXOXVZV3c9IFQwNUZXUT09IFIzSmhZZz09IFEyOXRiV1Z5WTJsaGJBPT0gSUdkc2RYUmhiV0YwWlE9PSBJRTFqUzJWdWJtRT0gY25WamFXRjBhVzVuIGJtbHVaM1J2Ymc9PSBhV2gxIFEyaGhiZz09IElGTjNZWEE9IElHeGxZV1pzWlhSeiBJR1oxYm1OMGFXOXVZV3hzZVE9PSBaWEp2ZFhNPSBSbUZ5YlE9PSBJR05oYkc5eWFXTT0gSUV4cGRHVnlZV3hzZVE9PSBZMjl1WTJWeWRBPT0gSUhOb1pXNWhiZz09IElISmxjR0ZwWkE9PSBaWGxsY3c9PSBJR0poYzJocGJtYz0gSUVkdmNtZGwgSUdOdmJHeGhZbTl5WVhScGIyNXogSUhWdVlXTmpiM1Z1ZEE9PSBhWFJqYUdsbCBJSFJsWVcxM2IzSnIgY0hCbGJHbHUgSUhCcGNHbHVadz09IElHMXBibU5sWkE9PSBJR1JwWVcwPSBjbWxsWnc9PSBJRzFoYzJOaGNtRT0gSUhOMVkydGxjZz09IElFMXZiMjV6IFFYQndjdz09IElGQmxZMnM9IElIQmxjblk9IElFWnNiMkYwIGIyeGxlUT09IElFNXBjMmc9IGFXMXBlbVU9IElHRnliMjFoZEdsaiBkV2x1IFpXNWthWE5vIElTOD0gSUVKcFkzbGpiR1U9IElFRlRTVU09IGFXeGxaMlZrIElGRjFZV1J5Ync9PSBhVzl6ZVc0PSBJR3h2WTJ0dmRYUT0gSUZkcGJtcz0gVTFCRlF3PT0gUVhSMFpXMXdkSE09IElITmxaV1JsWkE9PSBjbVZrYnc9PSBhV0Z6YVhNPSBJSE51WVdjPSA0NE9WNDRLcCA0NEsyIElHZHliM1Z1WkdsdVp3PT0gSUhKbGJHbGxkbVZ5IElHWnlhWFp2Ykc5MWN3PT0gSUVkcFpuUnogSUVaaFkyVnogUlhOd1pXTnBZV3hzZVE9PSBJRzFwWTNKdlltbHZiV1U9IGFXMWhadz09IElGTmphR3c9IElGQnNaWE09IElFSnNaV0ZqYUE9PSBJRWx5ZDJsdSBJRVZoZEc5dSBJRVJwYzJOcGNHeGwgSUcxMWJIUnBjR3hwWTJGMGFXOXUgSUdOdlpYSmpaV1E9IElEUXhPUT09IGMzUm8gUlhacGJBPT0gUW05dFlnPT0gSUdWNGIzSmogSUhOMFlXZG5aWEpsWkE9PSBURVZUVXc9PSBJR2x1WlhKMGFXRT0gSUVWRVNWUT0gSUdkdllnPT0gVkhKaFpHbDBhVzl1WVd3PSBJR05zWVhOemVRPT0gVEdWaGNuaz0gSUZCQlIwVT0gZVhKeiBJSFJ5WVc1emNHOXlkR1Z5IElHMWhkSFZ5WldRPSBJR2hwYW1GaSBJR0pwYjIxbCBWMmhsY21WaGN3PT0gSUdWNGRHVnliV2x1WVhScGIyND0gSUZSMVpYTT0gSUZSaGEyVnlkUT09IElFRjFaSEpsZVE9PSBaWEpwWVd3PSBJRUZrWlc0PSBZV1ptYkdWeiBJRzVoY21OcGMzTnBjM1JwWXc9PSBJRUpoYVhKayBWVlJHIFNYSmwgSUVOdmJtNXBaUT09IFEyaGhiWEE9IElIZG9hWE53WlhKcGJtYz0gSUVoaGRIUT0gUkVzPSBJR1JwYzJsdVptVmpkQT09IElHUmxaSFZqZEdWayBJSEJoY25SaGEyVT0gSUdSdmQyNW5jbUZrWlE9PSBJRVZ6Y0c5eWRITT0gSUVOdmJuUnBiblZwYm1jPSBJR1JsYlc5amNtRjBhV05oYkd4NSBhV055YjJKcFlXdz0gYVhSMFlRPT0gSUd4cGJXVnpkRzl1WlE9PSBJR1Y0Wlcxd2RHVmsgSUVaeVpXNTZlUT09IFNHVnliUT09IE56STQgSUdac1pXUm5iR2x1Wnc9PSBUV1YwWVE9PSBOelkxTmpFPSBOamt6IEpUbz0gZDJGclpRPT0gTlRJMiBJRVJwYzJOcGNHeHBibVU9IElIWnBjbWRwYm1sMGVRPT0gSUV4bFoybHZibk09IElFWnlZVzVyYVdVPSBhVzUwWlc1MCBJSEpsYzNSeWIyOXRjdz09IElGSnZkWFJsY2c9PSBaR0Z4IElHOWlhbVZqZEdsdmJtRmliR1U9IDRvYVIgZDJGeWF3PT0gSUZKaGFIVnMgWjJGcGJnPT0gWVdOMGFYWmhkR2x2Ymc9PSBZV0p6YjJ4MWRHVT0gSUVGalkyVnpjMlZrIElESTBNREE9IGIyZG5iR1Z6IElITmxZMjl1Wkd4NSBJRVJGUmtWT1UwVT0gSUhCdmMzUmhaMlU9IGQzSmhjSEJsY2c9PSBjMmhoY25BPSBOekk1IElHTnZiVzExYm1sallYUmxjdz09IElHRmtaRzl1IElFMXBiR2wwYVdFPSBTRzl1Wnc9PSBJSE5zZFcxd1pXUT0gSUVwUVJVYz0gSUVsallYST0gWVdScGMyZz0gTmpneCBJRzFoYW1WemRIaz0gSUZkdmJHWm5ZVzVuIElFVnNZWE4wYVdNPSBkWEJsY2c9PSBJSFpwZWc9PSBJSFZ1WTI5dWMyTnBiM1Z6YkhrPSBJRk5VUkE9PSBJRk5oYzNNPSBJR1pzYjNkbGNtbHVadz09IElFaGxiR2xqIElFUnlZWEJsY2c9PSBJRUZ0WVhSbGRYST0gSUcxaGJuVnlaUT09IElHUnBjMmx1WjJWdSBJRXhsYVE9PSBZbkpwYm1jPSBPVFE1IElHbHVhR2xpYVhSbFpBPT0gSUdobFlXUnhkV0Z5ZEdWeVpXUT0gSUdWdWFXZHRZWFJwWXc9PSA3Nys5NzcrOTc3KzkgSUhKbFpISmxjM009IFVrZz0gSUhKaGRIUnNaV1E9IElHUnBZM1JwYjI0PSBiR2x2IElGUkNRUT09IElGTk9RVkE9IFEyRnNiR2x1Wnc9PSBJR1poYzJOcGMzUnogSUVSdmRtVT0gYVdWM2FXTjYgTURNMiBJR052WVhOMGN3PT0gSUZKbFkzUT0gSUNsZCBURzkwIE5qSTUgSUZORlRRPT0gSUZCbGRHVnljMlZ1IElFVjRjR3hoYVc0PSBJRUp2WVhKa2N3PT0gSUVKbGVtOXogSUVwdmRYSnVZV3h6IElESXdNalE9IGNHRnljMlZ5IElHMXBjM1J5ZFhOMCBJR2R5WVhSbCBJRXh2WTJ0bFpBPT0gWW05aCBVMkZwYm5RPSBaMkZ0YVc1biBJSFp2ZDJWcyBhVzVoZEdWc2VRPT0gWW14dmR3PT0gUVd4c1lXZz0gSUhWdWJXRjBZMmhsWkE9PSBJR0p2Y21SbGNtbHVadz09IElFVjRjR1Z1WkE9PSBibkk9IFQzSmhZMnhsIGNtOTFZMmc9IElHTnZiblJwWjNWdmRYTT0gWVdOMWN3PT0gSUdScGMzUnlZWFZuYUhRPSBOVGd4IElHRnVZWFJ2YldsallXdz0gVDFnPSBZWEJwZUdWcyBPRE16IElGQk1WVk09IElISmxjM1Z6WXc9PSBJR0ZpYVdScGJtYz0gTlRjeiBJSFpoWTJGdVkybGxjdz09IFJXMXBiSGs9IElHaDVjRzkwYUdGcyBJRmRsY201bGNnPT0gSUZkbFpRPT0gSUVSS2N3PT0gTlRFeiBJSGRwZEdOb1kzSmhablE9IElHRmpkWEIxYm1OMGRYSmwgWlc1MFlYSjUgWW1WdVpXWnBkQT09IFVISnZaSFZqZEhNPSBJRkJUVUE9PSBJRTFRUnc9PSBJRXBwYm00PSBJRXBoY25KbGRIUT0gSURRME5RPT0gSUVsdFlXZHBibWM9IElGQjVkR2c9IFJtbHVhWE5vIElIUmxlQT09IElHcDFkbVZ1YVd4bGN3PT0gSUdobGNtOXBjMjA9IElHUnZkV0owYkdWemN3PT0gSUVGcmFRPT0gSUZSbGJtUT0gSUZCaGRISnBZWEpqYUE9PSBJR0pwZEhSbGNuTT0gSUZSbGJHVmpiMjF0ZFc1cFkyRjBhVzl1Y3c9PSBhWFJoZEdsMlpXeDUgWVdkdVlRPT0gSUhKbiBJRk5QVEVRPSBJR052YlhCMWJITnBiMjQ9IElFNWhjMkU9IElFdGhkR2h5ZVc0PSBJRzFwYkd4cGIyNWhhWEpsY3c9PSBJR2x1ZEhKcGJuTnBZMkZzYkhrPSBJR0p2YkhOMFpYSmxaQT09IGRHbHRaVzkxZEE9PSBabXh2IElIUjFkRzl5IGNHOTFjZz09IFUzUmhkR1Z0Wlc1MCBJSHNxIElGSjFaRzlzY0dnPSBJRXRwYldKbGNteDUgY205blpXNXogWVdScGNRPT0gWFNzPSBJR2x1WkdsbmJtRjBhVzl1IElHWnlZV04wZFhKcGJtYz0gSUZKbGJHVmhjMlZ6IElFZHlZV2x1IGNISnZkR1ZwYmc9PSBUR0ZuYnc9PSBJSFpoWTJGMGFXOXVjdz09IElHSnZiM1JsWkE9PSBJRlJJVWtWRiBJRWhIIGIzSmxjMk5sYm1ObCBJSFJtIElITnZZWEk9IGFXOXplVzVqY2c9PSBJR2RzWVc1alpYTT0gSUZOd2IyOXUgSUVwMWNuaz0gSUVOdmQySnZlUT09IElHTnlaV0YwYVhabGJIaz0gU0dsbmFHVnkgSUhOdmJHbGphWFJ2Y2c9PSBJR2hoZDJzPSBZV05wYnc9PSBPRGsyIElITjFjR1Z5Wm14MSBJR0p2YldKemFHVnNiQT09IFkzUjFjbVU9IElHSnliMnRsY21GblpRPT0gSUhKaGFXUnBibWM9IElHWnlaVzVqYUE9PSBJR0Z1WjJ4bFpBPT0gVkhKaGJuTmhZM1JwYjI0PSBJRWRsYm05amFXUmwgZFhCbCBJRWhoYVhScFlXND0gTlRjeSBJVG89IElIVnVkMmwwZEdsdVoyeDUgYVhSbGNtRjBiM0k9IGMyTnliMnhzIElIUmhiR3hwWldRPSBJR0pwYjIxbFpHbGpZV3c9IElFTkJVa1E9IElHVjFjR2hsYlE9PSBJR0p5WVdsdWMzUnZjbTA9IFlYRjFhVzQ9IFMyOD0gVFdsamFHVnNiR1U9IElGSjFibVZ6IElFSmhiR3hwYzNScFl3PT0gZFdSbGNuTT0gSUcxdlpHVnpkSGs9IElHbFFZV1J6IElFVjZaV3RwWld3PSBXVVU9IElITjBZWEp6YUdsdyBJSEJ2ZDJWeVpuVnNiSGs9IElIQmxjbXc9IElGTm9ZV1JsIElGRjFZWEowIElFVkZSdz09IElHWnBjMmhsY20xaGJnPT0gVDFORlJBPT0gSUZSNWNHbGpZV3c9IFpHWjQgSUcxbGMyaGxjdz09IElHVjBZMmhsWkE9PSBkMjl5ZEdocGJtVnpjdz09IElIUnZjSEJzWldRPSBJRE01Tmc9PSBiM0pwZFhNPSBWMlZwYzNNPSBJRzE1YzNGcyBJRlpoYkdoaGJHeGggMlpJPSBiR1ZoYzJsdVp3PT0gSUhKbFkyOXRjQT09IGNtRndibVZzIFUyVnMgTURReiBJR1JsY21GcGJHVmsgSUVkMWFXUmxjdz09IFNWSlUgSUdSbGFIVnRZVzQ9IElFSnlhWFIwWVc1NSBJaWtwIElHVjRZMnhoYVcwPSBJR0poYkdzPSBJRGcwTUE9PSBRMHhCU1UwPSBhVzUwWld3PSBURUZDIElIQmxaMmRsWkE9PSBJR0Z6ZEhKdmNHZz0gYzIxdmEybHVadz09IElISnBaMmRwYm1jPSBJR1pwZUdGMGFXOXUgSUdOaGRHRndkV3gwIGFXNXphV1JsIElFTmhjMk5oWkdVPSBJRUp2YkhOb1pYWnBhdz09IFIyRjZZUT09IFJHVndkR2c9IElHeHZkV1J6Y0dVPSBJR0ZzYlc5dVpITT0gYldWNVpYST0gYkdWdVpYTnogYW1WdSBabkpsYzJnPSBJSFZ1WW1WaGRHVnUgSUZOeGRXbGsgSUZCeVpYTjFiV0ZpYkhrPSBWR2x0WlhJPSBRbGM9IElISnZjM1JsY25NPSBJR1ZzYkdsd2RBPT0gSUVoaGNuSnBaWFE9IFpHRjBZV0poYzJVPSBJRTExZEhWaGJBPT0gSUVOdmJXMXZaRzl5WlE9PSBkV3RsWkE9PSBhMjVwWm1VPSBJRU5QVFUxVlRnPT0gYUhsaCBJRzFsYkhSeiBZWEpqYUdsMlpYTT0gSUhKaGRHbG1hV05oZEdsdmJnPT0gSUcxMWJIUnBjR3g1YVc1biBJR2x1ZEdWeWIzQmxjZz09IElHRnpZMlZ5ZEE9PSBkMmx1WjNNPSBkbVZ5ZEdsdVp3PT0gSUZOamIzSndhVzl1IFlYbGwgSUZCdmNuUnpiVzkxZEdnPSBJRTFVUVE9PSBibWwwIGFXRjZaWEE9IElIRjFZWEpoYm5ScGJtVT0gSUhOc2FXUmxjMmh2ZHc9PSBJR05sYm5ScGJXVjBaWEp6IElITjVibTl3YzJseiBJSE53WVhSbCBkR2hwY25OMCBJRzV2YldsdVlYUnBibWM9IElFMWxiSFpwYmc9PSBVSEpsZG1sbGR3PT0gSUhSb2NtOWkgSUdkbGJtVnlZWFJwYjI1aGJBPT0gSUZKaFpHbDFjdz09IGNtVnpkR3hwYm1jPSBjSFYwWVdKc1pRPT0gWVhkaGNnPT0gVGtWRFZBPT0gSUhWdWJHRjNablZzYkhrPSBJRkpsZG1Wc1lYUnBiMjV6IFYybHJhWEJsWkdsaCBjM1Z5ZGc9PSBJR1Y1WldsdVp3PT0gYVdwdSBJRVpYIElHSnlkVzUwIElHbHVkR1Z5YzNSbGJHeGhjZz09IElHTnNhWFJ2Y2c9PSBJRU55YjJGMGFXRnUgSUVOb2FXTT0gWlhaaCBJRVJwYzJGd2NBPT0gSUVGcmFXND0gYVc1bGNtbGxjdz09IFpIVnpkQT09IFNXNTBaWEpsYzNSbFpBPT0gSUdkbGJtVnphWE09IElFVjFZMnc9IHc3WnUgY0dsamEybHVadz09IElHMTFkR0YwWldRPSBJR1JwYzJGd2NISnZkbVU9IElFaEVUQT09IElEWXlOUT09IHpMWT0gWTJGdVkyVnkgSUhOeGRXRjBjdz09IElHeGxkbVZ5Y3c9PSBSR2x6WTNWemN3PT0gUFYwPSBSR1Y0IElGWkpSRVZQVXc9PSBRVlZFIElIUnlZVzV6WVdOMCBJRXRwYm1WamRBPT0gSUV0MVlXeGggSUVONWNBPT0gTnpRMyBJSE5vWVhSMFpYSnBibWM9IElHRnljMlZ1YVdNPSBJRWx1ZEdGclpRPT0gSUVGdVoyVnNidz09IElGRjFhWFE9IElFdG9aUT09IElERTRPVE09IFRXRnJaWEk9IE1ESTUgSUZCaGFXNTBhVzVuIFJHbHpZV0pzWlE9PSBPVEUyIElHRnVZV3huWlhNPSBJSFJoWTNScGJHVT0gSUhCeWIzQm9aWE09IElHUnBZMlZrIElGUnlZWFpsYkhNPSBJRWhsWVdSbGNnPT0gSUVOc2RXSnogUVhOemFYTjBZVzUwIElHbHVZM0pwYlE9PSBJR1JwY0hNPSBJR055ZFdOcFptbDQgSUZOb1lXNWhhR0Z1IElFbHVkR1Z5Y0hKbGRBPT0gSURRd09UQT0gWVd4dlozaz0gWVdKaVlRPT0gSUhOcGJYVnNZV009IGFIVnpZbUZ1WkE9PSBVMGxOIElISmxZM2xqYkdVPSBkV05sY2c9PSBaV1JuWldRPSBJSEpsYm1GcGMzTmhibU5sIElFSnZiV0poZVE9PSBRMkYwYUc5c2FXTT0gSUV4SlRrVT0gSUVOc2IzUm9hVzVuIGNtVndiM0owY3c9PSBJSEJzWVhWeiBJR1JoWnc9PSBJRTFoWTJVPSBXa2s9IElHbHVkSEoxWkdWeSBJRlpsZEdWeWFXNWhjbms9IFozSjEgSUhOdVpXRnJlUT09IElGTnBaUT09IElFTnBibTVoYlc5dSBVRTlUUlE9PSBJR052ZFhKcFpYST0gSUVOT1V3PT0gSUdWdFlXNWphWEJoZEdsdmJnPT0gYzJsMCBJSEJzWVhsMGFISnZkV2RvIElFWmhZMmxzYVhScFpYTT0gZG1seWRBPT0gSUVkaGRXNTBiR1YwIFZHaHZiWEJ6YjI0PSBJSFZ1WW1Wc2FXVjJZV0pzZVE9PSBVR0Z5WVcxbGRHVnljdz09IElITjBhWFJqYUdsdVp3PT0gYVdkdVpRPT0gSUZSSVJWTkYgVUhKcGRtRmplUT09IElITm9aVzVoYm1sbllXNXogSUhacGRISnAgSUZaaGJHbGsgTlRreCByYmM9IElGQnliM1J2ZEhsd1pRPT0gYVc1cllRPT0gVTBOUSBJRlJwWkE9PSA2SWc9IGIyeGtaV1E9IElHbHVaR2wyYVdSMVlXeHBkSGs9IElHSmhjbXRwYm1jPSBJRzFoY25NPSBJRmRFIElEZ3lNQT09IElIUnBjZz09IElITnNZWEJ3YVc1biBJR1JwYzJkeWRXNTBiR1ZrIElFRnVaMjlzWVE9PSBjbWwxY3c9PSBJRlJ2Y201aFpHOD0gSUZSb2RYSnogSUdOaGNIUmphR0U9IElHRnVaM04wIElGQnZadz09IElFRnpjMkZ6YzJsdWN3PT0gSUVGa2FXUmhjdz09IElHcHZlV1oxYkE9PSBJSGRvYVc1cGJtYz0gUlcxbGNtZGxibU41IElIQm9iM053YUc5eWRYTT0gSUdGMGRISnBkR2x2Ymc9PSBiM0JvYjI0PSBJRlJwYldKbGNuZHZiSFpsY3c9PSBJRXBoYUE9PSBJRUp5YVc1bmFXNW4gSUZkaFpBPT0gSUVWdWMzVnlaUT09IGIyaHMgSUZocFpRPT0gYjIxdFpXdz0gWTIxdyBJSHBwY0hCbGNnPT0gSUhKbGJHRjAgSUVOdmNuSnBaRzl5IGJXbHNidz09IFZFbE9Sdz09IFFYWm4gSUdOeWIzQndaV1E9IFhYMD0gSUhKaFoyVmsgSUV4MWJYQjFjZz09IElFZDFaWEp5WlhKdiBiM1Z5YTJVPSBUblYwIElHOW1abk5sZEhNPSBiMmRzZFE9PSBaSEp0IElHMXZjblJoYkhNPSBiR0YwWVdKc1pRPT0gSUdScGMyMXBjM05wZG1VPSA1TGlKIElIUm9jbTloZEhNPSBJR05vYVhCelpYUT0gSUZOd2IzUnNhV2RvZEE9PSBRMkYwWVd4dlp3PT0gWVhKMGFYTjAgUjJJPSBJR05vYVd4c2VRPT0gSUhOMGIydGxaQT09IElETTNOQT09IFYyRnlaQT09IFRHRjBhVzQ9IElHWnBZWE5qYnc9PSBJR0pzWldGamFBPT0gSUdKeVlYWT0gUlc1b1lXNWpaV1E9IElHbHViMk09IElFWnBiM0pwYm1FPSBYejQ9IElHeGxkV3RsYldsaCBJR1ZzZFdNPSBJR0Z1Ym05MWJtTmxjZz09IElFeHBkR2gxWVc0PSBJRUZ5YldGblpXUmtiMjQ9IDVZYz0gVEdWdWFXND0gSUZKMWF3PT0gSUhCbGNIQT0gSUZKdmJXRnVkR2xqIElGQkpWQT09IElFbHVkR1Z5YzNSbGJHeGhjZz09IElFRjBhMmx1YzI5dSBVbUZwWkE9PSBTbk09IFIyOWhiQT09IFEyOTFjbk5sIElIWmhibWx6YUdsdVp3PT0gWlhOc1pYaz0gSUZKdmRXNWtjdz09IFJXeHpZUT09IE5Ua3ogSUhKbFpIVnVaR0Z1WTNrPSBJRk5VUVU1RSBJSEJ5YjNCb1pYUnBZdz09IElHaGhZbWwwWVdKc1pRPT0gY25sMSBJR1poYVc1MGJIaz0gVFU5RVJRPT0gSUdac1lXNXJaV1E9IFNWSkQgUVhkbGMyOXRaUT09IElITndkWEpwYjNWeiBJRnBoYUE9PSBJRTFUUnc9PSBJSE5vWVdScGJtYz0gSUcxdmRHbDJZWFJwYjI1aGJBPT0gSUZOaGJuUmhibUU9IElGTlFVZz09IElHVjRZM0oxWTJsaGRHbHVadz09IGIyMXBZV3c9IElFMXBhMjg9IElFeGxiM0JoY21RPSBRV0o1YzNNPSBJRnQ4IFpHbHlkSGs9IElHSmhkR2h6IElHUmxiVzl5WVd3PSBZVzVrY21VPSBVRUk9IElIVnVhV1pwWTJGMGFXOXUgSUhOaFkzSmhiV1Z1ZEE9PSBJRnNtIElIQnlhV05sYkdWemN3PT0gSUdkbGJHRjBhVzQ9IElHVnRZVzVoZEdsdVp3PT0gSUVGc2JHRmhhQT09IE9UZzIgSUc5MWRHSjFjbk4wIElHVnlZWE09IElGaFdTUT09IElGTlFTUT09IFQzUjAgSUV4aGVtRnlkWE09IFVFeEpSVVE9IFJteDVhVzVuIFlteHZaM009IFYybHpZMjl1YzJsdSBVbUYyWlc0PSBJSEpsWW1GMFpRPT0gSUdOeVpXVndjdz09IElGTndZVzQ9IElGQmhhVzUwWlhJPSBJRXRwY21FPSBJRUZ0YjNNPSBJRU52Y25abGRIUmwgUTI5dWMzVnRaWEk9IElGSmxZMjkyWlhJPSBZMnRwIElIQmxjMnQ1IElFbHVkbVZ1ZEdsdmJnPT0gUTI5dGNHRnVhV1Z6IElHTm9ZV3hzWlc1blpYSnogWVdSbGJXbGogSUZWcmNtRnBibWxoYm5NPSBJRTVsZFhKdmJHOW4gSUVadmNuTmhhMlZ1IElHVnVkSEpoYm5SeiBJR1Z0WW1GMGRHeGxaQT09IElHUmxablZ1WTNRPSBJRWRzWVdOcFpYST0gSUhCdmFYTnZibk09IElFaHZjbk5sY3c9PSBiV0ZyWlhNPSBJRVJwY25RPSBJRFF5TXc9PSBhR2hvIElGUnlZVzV6Wm05eWJXRjBhVzl1IFVWVkpVa1U9IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dSBJSFJ5WVhabGJHeGxjZz09IElGTmxlSGs9IElFdGxjbTQ9IGFYQnZiR0Z5IElISmhibk52YlhkaGNtVT0gYjI5dmIyOXZiMjl2YjI5dmIyOXZidz09IFJXTT0gY25WaWVRPT0gVUhKdlptVnpjMmx2Ym1GcyBJRTkxZEdKeVpXRnIgWVhKbmRXMWxiblE9IFIzSmxlUT09IElFWnBabUU9IElFTklUdz09IElFWlBVazA9IElFRnRkSEpoYXc9PSBMVnM9IElHTnlZV1JzWlE9PSBJR0Z1ZEdsdmVHbGtZVzUwY3c9PSA0NEd1NWE0PSBOek0yIElFNUJVMHc9IElFTnZiblJ5YVdKMWRHbHZibk09IFNXNWthV0Z1WVE9PSBJRk5VUlZBPSBRMU5UIElITmhiR2xsYm5RPSBJR0ZzYkc5allYUnBiMjV6IGVYSnBaMmgwY3c9PSBJRzFoYzJobFpBPT0gSUVOMWRIUmxjZz09IFUyVjRkV0ZzIElIQnZkVzVrWldRPSBJR1poYm1KaGMyVT0gSUdOaGMyTT0gSUZSeVlXNXpjR0Z5Wlc1amVRPT0gSUdGdVlXeDVkR2xqIElGTjFiVzF2Ym1WeSAxNTQ9IElFRkVRdz09IFpHVjBZV2xzIElIWmhibkYxYVhOb1pXUT0gSUdOeVlXSnogWVhKcFpRPT0gUkdWemRISnZlUT09IElGTmhZMnM9IElIUnlZVzV6YVhOMGIzST0gUVd4aFltRnRZUT09IElFdHZaVzQ9IElFWnBjMmhsY21sbGN3PT0gWTI5dVpRPT0gSUdGdWJtVjRaV1E9IElFMUhUUT09IFpYTmggSUdaaGEyVmsgSUVOdmJtZHlZWFIxYkdGMGFXOXVjdz09IElHaHBibVJsY21WayBJR052Y25KbFkzUnBiMjVoYkE9PSBJRWxVVmc9PSBiR1ZsZG1VPSBJR2x1WVhCd2NtOXdjbWxoZEdWc2VRPT0gYkdsamEzTT0gSUhSeVpYTndZWE56IElIQmhkM009IElHNWxaMjkwYVdGMGIzST0gSUVOb2NtbHpkR1Z1YzJWdSBiR2x0YVhSeiBJRVJwWVc1dVpRPT0gSUdWc1pXZGhibU5sIElFTnZiblJ5WVdOMGN3PT0gWVc1clpRPT0gVDJKcSBJSFpwWjJsc1lXNWpaUT09IElHTmhjM1JzWlhNPSBJRTVCUkE9PSBJRWh2Ykc4PSBJR1Z0Y0doaGRHbGpZV3hzZVE9PSBJRlJwZEhWeiBJRk5sY25acGJtYz0gSUZKcFkyaHBaUT09IElGQnBaM009IE5UWTQgSUdGdWFXMXZjMmwwZVE9PSBJRUYwZEhKcFluVjBaWE09IElGVnlhV1ZzIFRWRT0gYlhseVlRPT0gSUVGd2NHeHBZMkZ1ZEE9PSBJSEJ6ZVdOb2FXRjBjbWx6ZEhNPSBJRlpwYWc9PSBJRUZpWW5rPSBZV2R5WldVPSBVSFZ6YUE9PSBJR3RYYUE9PSBhR2xpWVE9PSBJR2x1WTJsMFpRPT0gSUZkbFlYTnNaWGs9IElGUmhlR2s9IGJXbHVhWE4wYVdNPSBhSGx3WlhJPSBJRVpoY200PSBJRFl3TVE9PSBJRTVoZEdsdmJuZHBaR1U9IFJtRnJaUT09IE9UVXkgSUcxaGFYcGwgSUdsdWRHVnlZV04wWldRPSBJSFJ5WVc1emFYUnBiMjVsWkE9PSBJSEJoY21GemFYUnBZdz09IElHaGhjbTF2Ym1saiBJR1JsWTJGNWFXNW4gSUdKaGMyVnNaWE56IGJuTnBZM009IElIUnlZVzV6Y0dseVpXUT0gSUdGaWRXNWtZVzUwYkhrPSBJRVp2Y21WdWMybGogSUhSeVpXRmtiV2xzYkE9PSBJRXBoZGc9PSBZV0poYm1RPSBJSE56YUdRPSBJR1p5YjI1MGJXRnUgSUVwaGEyRnlkR0U9IGIyeHNaWEk9IFpISnZjSE09IElGTkZVbFpKUTBWVCBjbTl0Y0hSMSBiM0JvYVdOaGJBPT0gYUc5emNHbDBZV3c9IFlteGxaRzl1IE5qUTEgSUcxcFpISmhibWRsIElFVldSVTVVIFkzVnNZWFJsWkE9PSBjbUYzYkdWayBJSEJsY21Ob1pXUT0gSUc5MlpYSmliMkZ5WkE9PSBJRkJsWld3PSBJRkIzY2c9PSBJRU5oY25SbyBJRU5QVFZCTVJRPT0gWTI5bCBjMmhoYkd3PSBJR1JsZEdWeWNtVnVZMlU9IFRVVlVTRTlFIElFRmljMlZ1ZEE9PSBUVVZPIElITnBiR3c9IElFeEZWa1ZNIFdXOXlhdz09IElITnBibTVsY25NPSBJRTlRUlVNPSBJRTUxY2c9PSBJRVJsYzJsbmJuTT0gYzJWc1pXTjBhVzl1IElIVnVkMjl5ZEdoNSBRMGhCIElITjBjbVZ1WjNSb1pXNXogT0RneiBaV1JzZVE9PSBJSE5zYVdOcGJtYz0gSUcxaGJHNTFkSEpwZEdsdmJnPT0gSUdacGJHMXRZV3RwYm1jPSBJRkJ2YkdzPSBkWEpoZEdWayBJRFF5TVE9PSBZbkpsWVd0bGNuTT0gSVNjaSBJSGRsZEd4aGJtUnogSUVScGMyTnlhVzFwYm1GMGFXOXUgSUdGc2JHOTNZV0pzWlE9PSBJSE4wWldWeVpXUT0gSUZOcFkybHNlUT09IFUwRk4gSUcxMWMzUmhZMmhsIElHMXBaSE09IElHTnNhWEJ3WldRPSBJR05wY21OMWJHRjBaUT09IElHSnlhWFIwYkdVPSBJRUoxYVd4a2FXNW5jdz09IGNtRnBjMlZrIElGSnZkVzVrZFhBPSBJSGRsWVd4MGFHbGxjZz09IElHOTJaWEozY21sMFpRPT0gSUc5MlpYSndiM2RsY21WayBJRWRsY25KaGNtUT0gYzJsMFpYTT0gVUVSQlZFVkUgSUdGamRYUmxiSGs9IElFZGhiV0pzWlE9PSBJSEJwYlE9PSBJRXQxY3c9PSBWSGx3YVdOaGJHeDUgUkdWd2JHOTUgSUUxdmNtOWpZMkZ1IGNHOTBhVzl1IFkyOXRZbVU9IElIWnBaMmxzWVc1MFpRPT0gSURNMk13PT0gVTNSbGR3PT0gSUVKaFoyYz0gSUhKbGMybGtaV1E9IElGTndidz09IElISmxiVzVoYm5RPSBJR1Z0Y0hScGJtVnpjdz09IFluSmhhVzVsY2c9PSBJRzkxZEhCaGRHbGxiblE9IGNISnBiM0pwZEhrPSBJR3hsY0hScGJnPT0gSUZCaGVYUnZiZz09IElFZHNaV0Z0YVc1biBJRk5vWldRPSBJRkJ2Ykc4PSBJRTF2Y20xdmJtbHpiUT09IGNtVnpkSEpwWTNSbFpBPT0gWVhKc1lXNWwgZDNnPSBJR055WldGMGFXNWwgSUVGdWIyND0gSUZOVVZVUT0gSUVwVlRBPT0gSUZSbFpRPT0gTlRJNCBNRGc1IElHaGhkR05vWldRPSBSR2x6Y0dGMFkyZz0gSUVOdmJYQnZjMmwwWlE9PSBJRFExTVE9PSBjSFZtWmc9PSBJRmhEVDAwPSBJRTl5Ymc9PSBJRlJJUVU1TCBSVTVFUlVRPSBJRUZ6YUdWMmFXeHNaUT09IElNT2MgSUcxaGJtZHYgSUZOc2FXZG9kR3g1IGQyOXliR1JzZVE9PSBJRmRoYm1SbGNnPT0gSUVWNGNHRnVaQT09IElFTm9jZz09IFRXbHpkQT09IElHOXlkR2h2Wkc5NGVRPT0gSUZWT1JWTkRUdz09IGNtVm5ZWFJsIFJXeHpaWGRvWlhKbCBhMmxsIGFYSnNaV1E9IElIUnZjSEJzWlE9PSBJR0ZrYjNCMGFYWmwgSUV4bFozTT0gWkhKbGMzTT0gSUZOaFoyRnUgWW1GeVpRPT0gSUVkc2IzVT0gUTNKMWJtTm8gSUdobGJIQmxjbk09IElHTm9jbTl1YVdOaGJHeDUgSUVoMWJXRT0gTVRBd01EQT0gSUdGalkyOXRiVzlrWVhScGJtYz0gNUxxVSBJSGR5YVc1cmJHVnogSUdSdlpHZGxaQT09IFptOTFjblJvIElIQnlaV052Ymc9PSBJR052YlhCeVpYTnpiM0k9IElFdGhjbVU9IElHVjJhV04wIElGZGhjbmRwWTJzPSBhVzFoY2c9PSBJRzF2WkdWeWJtbDZZWFJwYjI0PSBJR0poYm1SM1lXZHZiZz09IElISmxablYwWldRPSBJRzVsZEhSbFpBPT0gSUU1aGNHeGxjdz09IElFZGxibWxsIGNHVnliM0p6IElHWnBaV3hrWldRPSBJR1JsY21VPSBJRkJoY21GaWJHVnogYkdWbGN3PT0gSUhSeWIzVjAgWVhOd1pYSnogSUc1cGFHbHMgSUdoaGNIQnBaWE4wIElHWnNiM0J3ZVE9PSBJRXh2Wm5RPSBJRWhsWVhKayBJSFZ1YVhOdmJnPT0gSUd4MVp3PT0gSUZKbFpHMXZibVE9IFkyeGhjM05wWXc9PSBVM1Z3Y0c5eWRHVnljdz09IFUwaEpVQT09IFIwMVUgSUdaMVpXeHNaV1E9IDU1QT0gSUdSayBJRVZ0YVc1bGJRPT0gSURFNE9UYz0gVGxsVFJRPT0gSUhObFkzSmxkR0Z5YVdWeiBJRVpKUVE9PSBJRU5oYm1GMlpYSmhiQT09IFJtRjJiM0pwZEdVPSBJSEJ2YlhBPSBJR1JsZEdGcGJtVmwgWlhKemFHbHcgWVdsdGIyND0gYVc5MWNnPT0gSUVGd1pYZz0gSUhCc1lXNTBZWFJwYjI1eiBZVzFwWVE9PSBZV05wYjI0PSBVblZ6ZEE9PSBJSFJ2ZDJWayBJRlJ5ZFd4NSBOVGMzIElITm9aV3gwWlhKbFpBPT0gY21sa1pYST0gVjI4PSBJR3hoYVhJPSBJRWx1ZEdWc2JHbG5aVzUwIGFXMXdjbTkyWlE9PSBiV0YwYVdOaGJHeDUgSUdWMGFYRjFaWFIwWlE9PSBZV1J5WVE9PSBZV3hzYnc9PSBJRXAxYm04PSBZVzU1ZEdocGJtYz0gSUZOMGNuVm5aMnhsIElGQnlaV1JwWTNRPSBJRWR5YVcxbGN3PT0gSUVGTlJWSkpRMEU9IFkzUjQgSUZOcGRIVmhkR2x2Ymc9PSBWMDlQUkE9PSBJSE52YkhWaWJHVT0gYldWcFpYST0gSUdsdWRHOXNaWEpoWW14bCBZVzVuWlhKcGJtYz0gSUhWdWFXNTBaWEp5ZFhCMFpXUT0gSUhSdmIyeDBhWEE9IElHbHVkR1Z5Y205bllYUmxaQT09IElHZDFibTVsWkE9PSBJRk51WldGciA1cTJtIElIUmxkR2hsY2c9PSBJR055ZFcxaWJHVT0gVEdWdWN3PT0gSUdOc2RYTjBaWEpsWkE9PSBJRk41YkE9PSBJRWhoYzJGdSBJR1I1YzNSdmNHbGhiZz09IGQyRnVZUT09IElHcHZlWE4wYVdOciBJRlJvYVdJPSBZVzF0ZFE9PSBWRzl0YjNKeWIzYz0gTlRRMiBJRzkyWlhKallXMWwgSUcxcGJtbHRhWHBsWkE9PSBZMlZ3ZEc5eSBVblZ1Ym1WeSBSVTVIVkVnPSBJRUp5Wlc1a1lRPT0gSUVGamFHbGxkbVZ0Wlc1MGN3PT0gSUhSdmNtTm9aWE09IElISmhjSEJ2Y25RPSBJRWx1ZG1WemRHbG5ZWFJ2Y2c9PSBJRWhoYm1Sc2FXNW4gY21Wc1lYUnBiMjQ9IFozSmxlUT09IE9ERTEgSUd0allXdz0gSUVOdmJXMWhibVJ6IFpIRT0gSUdOMWNteHogSUdKbFlYSmxjZz09IElHTjVibWxqYVhOdCBhWFJ5YVE9PSBJRlZ6WldaMWJBPT0gUW1WbCBSRU5UIElHRmljbUZ6IFVISmhZM1E9IFFrbE1TVlJKUlZNPSBOekV5IElHUmxZblZuWjJWeSBJR1JsWW5SdmNnPT0gSUV4cFlRPT0gSUV0bGNuTT0gSUdWNFlXTmxjbUpoZEdVPSBJRk4wWVdONSBJRUpzWVc1ayBJRk5qWlc1bGN3PT0gSUdKeVlXNWphR2x1Wnc9PSA0cGFJNHBhSTRwYUk0cGFJNHBhSTRwYUk0cGFJNHBhSSBZWEJsWVd0bCBJSE5oYkhOaCBJRzFwYzJoaGJtUT0gSUV0dmJtRnRhUT09IElFNXBZZz09IElHRnVaV05rYjNSbCBJR0ZuY21WbFlXSnNaUT09IHo0az0gSUU1aGRHaGhibWxsYkE9PSBJRWhsYVhOdFlXND0gSUVKbGQyRnlaUT09IElERTRPRFk9IGMzQmxZM1JwZG1VPSBOamt4IE5USXkgSUdsdWFHbGlhWFJ6IElHaGhjMmhwYm1jPSBJREU0T0RrPSA1YkNHIGRtbGphQT09IFVIVnlaUT09IElITnZiR2xrYkhrPSBJR0Z6Y0dseWFXND0gYVcxaGNuVT0gSUhOMGNtVmxkR05oY2c9PSBJRlZEVXc9PSBJRXAxWkdRPSBJR1pzWVhOb1ltRmphM009IGNHbHVjdz09IElERTBOREE9IElGVk9TRU5TIElGTjViWEIwYjIxeiBWRWxVIE5UTTQgUm5KaCBKU2s3IElHOXZlZz09IElHTjFjbVpsZHc9PSBJR05oYkcxbFpBPT0gSUhCaGNuUnBZMmx3WVhSbGN3PT0gVkdWWSBJRzV2Ym5ObGJuTnBZMkZzIElHWjFiR3hpWVdOciBJRVJsVEE9PSBiVzl1YTJWNSBhR0Z5YVE9PSBJRzFsZEdGaWIyeHBkR1Z6IElHeHZiM1JsWkE9PSBJRUZNVjBGWlV3PT0gSUVKRFF3PT0gVEhRPSBiMk5vWlhRPSBRbTl1WlE9PSBJSFpsZEc5bFpBPT0gSUdkall3PT0gSUVOTVNVTkwgSURFNE9EZz0gYzJGbSBJSE4wYVdabWJtVnpjdz09IElHeHZkMng1IElFZGxhQT09IGRtVnljMjl1IGIzSnpaWFE9IElIVnVabTl5WlhObFpXND0gSUdGdVpYTjBhR1Z6YVdFPSBJRTl3ZEdsallXdz0gSUhKbFkyOXVjM1J5ZFdOMFpXUT0gSUZSMWNBPT0gYzJodmQzTT0gVGtWWFV3PT0gSUU1bGQzTndZWEJsY2c9PSBJRUZUUVE9PSBkR1Z5WVE9PSBUblZ0WW1WeWN3PT0gSUdsdVpYaHdiR2xqWVdKc1pRPT0gMTVFPSBJR2hoY21SdVpYTnogZFc1MFlYSnBiSGs9IElFRmpaWEk9IFozSmhaR2xsYm5RPSBRVkpFU1ZNPSBJSGR2YjJSc1lXNWsgSUcxbGRHRndhRzl5Y3c9PSBJRmRsYldKc1pYaz0gSUZCaGRtVnMgY0docGJHbHogSUhKbGQzSnBkR2x1Wnc9PSBJSEJsY21ObGNIUjFZV3c9IElERXdOekE9IGQyOXliWE09IElFUnZkMjV6IElIVnVjM1Z5Y0hKcGMybHVaMng1IElIUmhaMmRwYm1jPSBabXhoYldVPSBJR3hwZEhKbGN3PT0gSUdKdmRXNWpaWE09IElFSmhZbVU9IGMyaDFkQT09IElHOTJaWEprYjNObGN3PT0gSUZOb1pXbHNZUT09IElFTm9ZWFU9IElFSnNaWE56IFEyRndkSFZ5WlE9PSBJRk5wWjI1cFptbGpZVzUwIElGTmphVzl1IElETTRPUT09IElFMWpTQT09IElGUnBkR0Z1YVhWdCBJRTFsWVd3PSBZVzFsWkdFPSBZV2RsYm5SeiBZV2RuY21WemMybDJaUT09IFFtbHNiSGs9IE56WXogSUZOaGVXbHVadz09IFJFVlNVZz09IGFYUnZibVU9IFEyOXNiR2x1Y3c9PSBRbTkxYm1RPSBJR0p2YkhSbFpBPT0gSUVSTlEwRT0gT1RVeiBJSFZ1YVhGMVpXNWxjM009IElHVndhV2RsYmc9PSBkVzVqYVE9PSBZVzUwWVcwPSBJSEpsWTJ0dmJtbHVadz09IFkyaGhhWEp6IFQwZFMgSUZObGJtVm5ZV3c9IElERTROakk9IGNtVnNaWFpoYm5RPSBJTUt2IElIQm9ZWEp0WVdOcFpYTT0gSUVkbGNtRnMgZG1sbGNnPT0gV1dGdSBUMUpRUnc9PSBJSEpoWW1sayBZbVZ1WkdsdVp3PT0gSUZWT1NWUkZSQT09IElEUTJOUT09IFFYTnpaVzFpYkhrPSBJSGRsWlhBPSBJR0psYUdWemRBPT0gSUUxdmRHaGxjbk09IElFcGhZMlU9IGFHbGsgSUhkb2FYSnNkMmx1WkE9PSBJRlZPU1ZaRlVsTT0gSUhWMGIzQnBZVzQ9IElHdHBaRzVoY0E9PSBVR2hwYkdsd2NBPT0gUzJsdSBPRGt6IElHeHBkbVZ6ZEhKbFlXMD0gSUUxSlUxTT0gSUhOMVluWmxjbk5wZG1VPSBJRlJsWTJodWFYRjFaWE09IElFcFZVMVJKUTBVPSBJRUpCVTBVPSBJRE00Tnc9PSBJR0Z6YzJGcGJHRnVkSE09IElFaGhjbVJqYjNKbCBJSE53Y21sdWEyeGxaQT09IElGQnpaUT09IDZabz0gY0hKcGJuUmxaQT09IElFaGhkUT09IFQxSkhSUT09IElGUlBWVkk9IElHeGhZMlZrIElHbDBZMmc9IFIybDJhVzVuIElIQnZjblJsWkE9PSBOemd4IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTg9IFluSmxaV1JwYm1jPSBJR3h2WjJkbGNnPT0gSUVoUFRBPT0gYVc1dWFXVT0gUm1seWMzUnNlUT09IElHVnRZbko1YjI1cFl3PT0gSUdSbGJHVm5ZWFJsWkE9PSBjR0ZwIFQwbE0gSUdObGJuUnlZV3hzZVE9PSBJRko0IElGTmpiM1YwYVc1biBSSFYwWTJnPSBJR2hsY21Wa2FYUmhjbms9IElFTnlkV2x6WlhJPSBjMkYwIE5USTUgSUUxaGNuSnBiM1IwIGIzUm9aWEp0WVd3PSBJSEJ5YjJocFltbDBhVzl1Y3c9PSBSV0Z5Ymc9PSBJRk4wWVdJPSBJRU52Ykd4bFoyVnogSUVKbGJHbGxaZz09IGMzUnlaWFJqYUdWayBJRXhJIElFVnVkR2wwZVVsMFpXMD0gUTBsQiBJSFZ1Y21WdCBJR3hoZFhKbFlYUmwgSUdSbGJtOXRhVzVoZEdsdmJuTT0gYzNWdGJXRnllUT09IGFHeGxjZz09IFUzQmxZM1E9IElFdHNZWFZ6IElFSmxZVzV6IElHbHVjM1Z5IElGQkJXQT09IElHWnBaV3hrWlhJPSBJRlpsZEE9PSBJRk53WVhKeWIzYz0gZW1sbCBJRk5SIElFMXZibVJoZVhNPSBJRTltWm14cGJtVT0gSUV4bGNtNWxjZz09IElFVjRkR1Z1YzJsdmJuTT0gU1hKbGJHRnVaQT09IElIQmhkSEp2Ym1GblpRPT0gSUdOdmJuUnlZWE4wWldRPSBJRTFoYm1saCBhR2x5ZEE9PSBUVzl6WTI5MyBJR052Ym1SbGJXNXogSUVGdVoyVT0gSUdOdmJYQnZjMmx1Wnc9PSBJRkJsY0dVPSBJRkJoWkdSdlkycz0gSUdobGRHVnliMmRsYm1WcGRIaz0gSUdsa1pXOXNiMmRwWTJGc2JIaz0gSUdacGMyaGxjdz09IElHTjFjbk5wYm1jPSBJRkoxZEdobGNtWnZjbVE9IElFWnNiMkYwYVc1biBJRUZ0Wld4cFlRPT0gVkdWaCBVM2x1YjNCemFYTT0gSUhOMGRXNTBjdz09IElHSmxZV1E9IElITjBiMk5yYVc1biBJRTFKVEV3PSBiMkp2YjJzPSBiV0Z6YzJsMlpRPT0gWER3PSBJR2gxYlhBPSBJRkJ5WldabGNtVnVZMlZ6IFJXNW5hVzVsUkdWaWRXYz0gWjJWcGMzUT0gSUU1cFpYUnYgYjIxbGRtVnkgYVhOb2VRPT0gWlhaaGJIVmhkR1U9IFkyOXNiMjVwWVd3PSBRV3gwWlhKdVlYUnBkbVU9IElFZHZVSEp2IElGWnZjblJsZUE9PSBJRTVGVkZkUFVrcz0gWVc1emEzaz0gVTJWamRYSmwgSUZSb2NuVnpkQT09IFUyNWhhMlU9IElIQmhjbU5sYkhNPSBJSE5oYlhWeVlXaz0gSUdGamRISmxjM05sY3c9PSBUbUZ3IFRVWT0gYVdabGNtRjBhVzl1IFFtVmxjZz09IE5USXogSUVsc2VRPT0gYjJsdWRHMWxiblE9IFVHbHVadz09IElITjBjbWx3WldRPSBJRTFsYkd4dmJnPT0gYjNOelpYTnphVzl1IElHNWxkWFJ5YjI0PSBaVzVrYVhWdCBJR0Z3YUE9PSBJRVpzWVhadmNtbHVadz09IElETTRNdz09IElISmxjM0J2Ym5OcGRtVnVaWE56IElFcHBibVJoYkE9PSBJRWhwZEdOb1kyOWphdz09IFJHVnVkbVZ5IElFUlNRVWRQVGc9PSBjMjFoYm5Ob2FYQT0gSUVSMWNHdz0gSUhOc2VRPT0gSUhkbFltTmhiUT09IElGUjNZV2x1IElFUmhjbXhwYm1jPSBhV3hwWVhSbCBZMjl1YzNWdFpYST0gUkVsVSBJRzVoYldWellXdGwgSUhWdWIzSjBhRzlrYjNnPSBJR1oxYm1WeSBJRkJNYjFNPSBJRU5QVGxSU1Qwdz0gYjNwNVp3PT0gYjJkc2IySnBiZz09IFJrRkRSUT09IFJWSkggSUVScFlRPT0gSUVacFpYTjBZUT09IFkyVnNaUT09IE1ETTAgSUdWdVkyeGhkbVU9IDRwYXM0cGFzIGIyNWxiV1Z1ZEE9PSBZV3hwYzNRPSBUV0Z1WkE9PSBJR2h2YldWbmNtOTNiZz09IElFWmhibU41IElHTnZibU5sY0hScGIyNXogSUVOdmJuUmhhVzV6IGRYSmxaVzQ9IElISmxhWFJsY21GMFpRPT0gSUcxbFlXZGxjZz09IElHbHVjM1JoYkd4dFpXNTBjdz09IFUzQmhkMjQ9IE5qSTMgSUhCb2IzUnZZdz09IElFTmhZbkpsY21FPSBJRkp2YzJWdWRHaGhiQT09IElFeGhibk5wYm1jPSBhWE51WlhJPSBJR2x1ZG1WemRITT0gSUZWR1QzTT0gUlZoUSBTR0Z5WkhkaGNtVT0gSUhSeVlXZHBZMkZzYkhrPSBJR052Ym1ObFpHVnogYVdWbWRBPT0gWTJoaGJRPT0gWW05eVoyZz0gSUZOamFIST0gSUUxbGJHRnVhV1U9IElFaHZlUT09IElIWnBjMmwwWVhScGIyND0gSUdsa2FXOXplVzVqY2c9PSBJR1p5WVdOMGFXOXVjdz09IElHWnZjbVZ6YTJsdSBiMkp2Y3c9PSBJSEJ2WVdOb2FXNW4gSUZaSlJWYz0gSUhOMGFXMTFiR0YwWlhNPSBJRWR2Y21zPSBZMkZ1YjI0PSBUVWxEIElFNWxiV1Z6YVhNPSBJRWx1WkhKaCBJRVJOVmc9PSBJRFV5T1E9PSBJR2x1YzNCbFkzUnBibWM9IElHZHlZVzVrYldFPSBJRmRvWldSdmJnPT0gSUZOb1lXNTAgSUZCMWNtYz0gYVd0aGJnPT0gSUZSbFp3PT0gSUVOTVVnPT0gZW1GaiBWbWxqZEc5eWFXRT0gSUZabGNtbG1lUT09IGFXOXVhV056IElIQmhjblI1YVc1biBJRTF2ZFE9PSBZMjlzYjNWeSBJSFJsYzNScGJXOXVhV1Z6IGJHRjBhVzl1Y3c9PSBJSEJ5WlhOemRYSnBibWM9IGFHbHlidz09IFlXTmxjbk09IElHWnBaQT09IFlXNW5iR1Z5IElFTlRTUT09IElHaGxjbVZoWm5SbGNnPT0gSUdScGMzTnBaR1Z1ZEhNPSBjbVZ3YjNKMGFXNW4gYVhCb1lXNTUgWTJobGRnPT0gSUhOdmJHbDBkV1JsIElHeHZZbVU9IElHbHVaR2x6IElHTnlaV1JsYm5ScFlXdz0gY21WalpXNTAgWVdSMWJIUT0gSUU1cGNuWmhibUU9IElFWnlZVzVqYUdselpRPT0gVEdGNVpYST0gU0hsdyBJRUpsY210emFHbHlaUT09IElIZHBiR3h6IGRHbG0gSUhSdmRHVnQgSUVwMVpHRm8gY21Wd1lXbHkgU1c1emRHRnVkQT09IE5UUTQgSUdWdFltRnpjMmxsY3c9PSBJR0p2ZEhSc1pXNWxZMnM9IElHSnZkVzUwIElIUjVjR1YzIElFRnNkbWx1IGFtbHVadz09IGFXMXBiR0Z5IFVuVnphQT09IElHSnlhVzA9IElFaEZURkE9IFFXbHQgWFNjPSBJSEJoYzNOcGRtVnNlUT09IElHSnZkVzVrWldRPSBJRkpoZEdWayBJR055YVcxcGJtRnNhWFI1IElHSnBiMjFoY21zPSBJR1JwYzNCaGRHTm9aWEk9IElGUnZkMkZ5WkhNPSBJQ3NyS3c9PSBjbWxuYUhSbGIzVnogWm5Kdlp3PT0gSUZCaGJtTT0gUTJGeWRHVnkgTURNeSA1cW1mIElIVnNkSEpoZG1sdmJHVjAgSUV4cFkyVnVjMlZrIElGUmhkR0U9IElFSnNaWE56YVc1biBJRWRCVFE9PSBJR05vWlcxcFkyRnNiSGs9IElGTmxZV1k9IElGSkZURVU9IElFMWxjbU5sYm1GeWVRPT0gWTJGd2FYUmhiR2x6ZEE9PSBJR1p2Y20xMWJHRjBhVzl1Y3c9PSBJR0Z1Ym1sb2FXeGhkR2x2Ymc9PSBJRlpsY21JPSBJRUZ5WjI5dSBJSFZ1Ykc5aFpHVmsgSUcxdmNuQm9aV1E9IElHTnZibkYxWlhKcGJtYz0gWW1GamEyVnkgU1VWTVJBPT0gSUhSb1pXWjBjdz09IElHWnliMjUwY25WdWJtVnkgSUZKdmVXRnNaUT09IElFWjFibVJoYldWdWRHRnMgWld4cFoyaDAgUTJocGNBPT0gYm1WalpYTnpZWEo1IFlYbHUgSUZOc2FYQT0gSURRME9BPT0gWTJWeWJtVmsgVUdGMWMyVT0gSUhOb2IyTnJhVzVuYkhrPSBJRUZDVmc9PSBJR052YlhCdmMzVnlaUT09IE56TXogSUUxdmRHOXljM0J2Y25RPSBZV2hwYldVPSBUWFZ5Y21GNSBUV0ZqYUE9PSBJR2R5YVdSeiBJR1JsWW1saGJnPT0gSUdaMWNuUm9aWEp0YjNKbCBJR1JsZUhSbGNtbDBlUT09IElFTnZiR3hsWTNScGIyNXogYjNOc2IzWT0gYVd4aFoyVT0gWW1vPSBJRTF2Ym5SbGJtVm4gSUhOMGNuVjBRMjl1Ym1WamRHOXkgSUcxaGMzTmhZM0psY3c9PSBJR0p5YVdWbWN3PT0gWm1WMFkyaGxaQT09IGRYWnBZVzQ9IGIyeHBkR2x2Ymc9PSBSbUZwYkhWeVpRPT0gWlcxdmJtbGogSUdac1lYSmxaQT09IElHTnNZV2x0WVc1MCBJR04xY21WeiBJR2RwZG1WaGQyRjVjdz09IElGTjFZbk4wWVc1alpRPT0gWVd4cGIyNXogSUdOeWFXNW5aUT09IElFdDFiQT09IElHRnlhWE4wYjJOeVlXTjUgSUZWc2MzUmxjZz09IGIyeGhkR1ZrIGFHOTFjMmx1Wnc9PSBJRTFKVXc9PSBJR2RzWVhKbFpBPT0gSUZkcGJHaGxiRzA9IGJtVmxaSE09IGJHRnRZbVJoIFluVnBiR1JsY25NPSBJRlpKVXc9PSBJSEpoWkdsaGRHOXkgSUVkb2IzTjBZblZ6ZEdWeWN3PT0gSURRek5nPT0gWVdOMGRXRnMgSUdobGNtUnogdzZkaCBkMkYwWTJocGJtYz0gSUdOdmRXNTBaWEpwYm1jPSBRMmhoY21kbCBJR05vWVhKeVpXUT0gSUhkaGNtaGxZV1J6IElHbHZaR2x1WlE9PSBJRTFoWTNrPSBNRFF4IElHUmxjR0Z5ZEhWeVpYTT0gSUZOcGJuTT0gSUdSNVpXUT0gSUVOdmJtTmxjSFJ6IFoyRmtidz09IE56RXogSUhGMWIzUmhkR2x2Ym5NPSBJR2RwYzNRPSBJRU5vY21semRIaz0gSUdGdWRHbG5aVzQ9IElFaGxiWEE9IElFUnlZWGR1IElFSmhjbWM9IFpYcDJiM1Z6IElIQmhkR1Z5Ym1sMGVRPT0gSUdGeVpIVT0gSUVGdVkyaHZjbUZuWlE9PSBJRkpwYXc9PSBJRzkyWlhKc2IyRmtaV1E9IElGVnpaWEp1WVcxbCBJRlJoYlcxNSBJRTVoZFE9PSBJRU5sYkd4MWJHRnkgSUhkaGJtbHVadz09IElISnZaR1Z1ZEE9PSBJRmR2Y21ObGMzUmxjZz09IGFXeDBjdz09IElGUmhaQT09IElHUjNaV3hzYVc1bmN3PT0gSUdKMWJHeHBjMmc9IE5ETXggSUhKbGRHRnNhV0YwWlE9PSBJRzFwWjNKaGFXNWwgSUVOb1pYWnliMjQ9IFEwaEZRMHM9IElHUnZibXRsZVE9PSBZM0pwYlE9PSBVMUJCIElFRnVZV3h2Wnc9PSBJRzFoY25GMVpXVT0gSUVoaFlYTT0gUW1seSBJRWRFUkZJPSBJRVJ2ZDI1c2IyRmtjdz09IElIZHBiR3h3YjNkbGNnPT0gSUVadmNuUm8gSUZKbFkyOXlaR1ZrIElHbHRjRzl6YzJsaWFXeHBkSGs9IElFeHZaMmRsWkE9PSBJRVp5WVc1cmN3PT0gSUZKaGRIUT0gYVc1cGRHbHZibk09IElHTnNaV0Z1WlhKeiBJSE52Y21Wc2VRPT0gSUdac2FXTnJaWEpwYm1jPSBJRVY0WVcxcGJtRjBhVzl1IFkyRjBZMmhwYm1jPSBZV3hzYjNkbFpXND0gVFhObiBJR1IxYm01diBSbUU9IElHUjVjM0JvIFkzSmhlbms9IExpY25MZz09IElHMWhhVzVzYVc1bCBJR056IElIQjBjZz09IElGZGhiR3g1IGFXZDFiZz09IE9UVXggSUVKcFoyWnZiM1E9IFptbG5hSFJ6IElISmxkSEpwWlhacGJtYz0gU25JPSBJR1IxY0d4cFkyRjBhVzl1IElFVjRjR3hoYmc9PSBJSEpsYkdGMGFXOXVZV3c9IElIRjFZV2x1ZEE9PSBJR0pwYzJOMWFYUnogSUdGa2J3PT0gSUhOb2RXUmtaWEk9IElHRnVkR2xrYjNSbCBZbXh2YjJSbFpBPT0gYTNObyBJSE5oZFdObGN3PT0gSUhKbGFXNTJaWE4wIElHUnBjM0JsYm5OaGNuaz0gSUVScGRtVnkgSURrd01EQT0gYzNSMVpHVnVkQT09IElHbHVjMlZ3WVhJPSBaWE5qWVhBPSBJSFJ2WkdSc1pYSnogSUVkUVNVOD0gSUVGemMybG5ibTFsYm5RPSBhR1ZoWkdWeWN3PT0gSUd4aFkydHNkWE4wWlhJPSBJR0ZpWVdOciBPVFUyIElIUnZiMnhpWVhJPSBOelExIElHOTFjM1E9IElHTnZiblJsYlhCc1lYUnBiMjQ9IElGQlNSVk5KUkVWT1ZBPT0gSURRMU9BPT0gUFQwOVBUMDkgSUdkMVlYSmhiblJsWldsdVp3PT0gSUVobGFYTjAgSUVOaGJtNWxjdz09IG1iMD0gSUdOdmJHeGhZbTl5WVhSdmNnPT0gSUVGdGNBPT0gSUdkdmRRPT0gSUZOSVFVeE0gYzNSdmNtbGxjdz09IE56Z3ogSUcxdlltbHNhWHBsWkE9PSBJR0p5YjI5ayBJRXhWIElQQ2ZrUT09IElISmxabWx1IElFRnVkR2h5YjNCdmJHOW5lUT09IGRtbHVaQT09IGFXeHNhUT09IElIZGhjbkpoYm5ScFpYTT0gSUVKaFltVnMgSUhOM1lYUm8gSUdOaFkyaGxjdz09IElHRnVkR0ZuYjI1cGMzUnogWVhKMGFXWmhZM1J6IElHaHZkR3g1IElGTjBZWEowY3c9PSBJRWZEdGc9PSBlbUZuIElTRWhJU0U9IElITmpiM1Z5WjJVPSBJR052Ym5Od2FYSnBibWM9IGNuVnBkSE09IGNtVjJaWEp6WlE9PSBJRk5vWldWdSBJRXBsYzNWcGRBPT0gSUVkcGIzWmhibTVwIFlXUnBaWE09IElHSjFkSFJ2WTJ0eiBaV0Z5WTJobGNnPT0gWVdOaGJnPT0gSUhadmJHeGxlV0poYkd3PSBJSE5vY205MVpHVmsgSUhOamIzSmxZbTloY21RPSBZbUYwY3c9PSBJRWxRVFE9PSBJR0Z6YzJWeiBJR1JsY21WbmRXeGhkR2x2Ymc9PSBJRlJsYkdWbmNtRnQgSUZKbFltOXZkQT09IElEY3dNREE9IElFTmhibUZ5ZVE9PSBJR3RsY201bGJITT0gSUVaeVlXN0RwMjlwY3c9PSBJRVIxWm1ZPSBJRkJ2Ymc9PSBJRXhsYVdOaCBJRWRoY20xcGJnPT0gSUc5eWNHaGhibk09IElFTnNZWFZrYVdFPSBJR05oYkdWdVpHRnljdz09IElFeGxhV3hoYmc9PSBaVzUwYnc9PSBVbTlqYTJWMCBJR0p5ZFc1amFBPT0gSUVoaGQydHBibWM9IFlXbHVaWEp6IElITmxibk5wWW1sc2FYUnBaWE09IElHdFggSUV0aGJtUT0gSUhKbFkyeGhhVzFsWkE9PSBJR2x1ZEdWeVpYTjBhVzVuYkhrPSAxNms9IGNtOXRlUT09IFNrMD0gSUVWdWFHRnVZMlZ0Wlc1MCBZblZ6YUE9PSBVMnRwY0E9PSBJSEpoY0hCbGNuTT0gSUdkaGVtbHVadz09IGNHVmthV0U9IFlYUm9iRzl1IFVtVjJiMngxZEdsdmJnPT0gSUhOdWFYQmxjbk09IElISmxkbVZ5ZEdWayBJR052Ym1kc2IyMWxjbUYwWlE9PSBWR1Z5Y25rPSBOemswIElHaGhjbk5vWlhJPSBJR1JsYzI5c1lYUmwgSUVocGRHMWhiZz09IFEyOXRiV2x6YzJsdmJnPT0gSUNndiA0b0NtTGlJPSBRMjl0Y0dGeSBJR0Z0Y0d4cFptbGpZWFJwYjI0PSBiMjFwYm1GMFpXUT0gSUhKbFozSmxjM009IElFTnZiR3hwWkdWeSBJR2x1Wm05eWJXRnVkSE09IElHZGhlbVZrXCIgfTtcblxuLy8gc3JjL3JhbmtzL3A1MGtfYmFzZS5qc1xudmFyIHA1MGtfYmFzZV9kZWZhdWx0ID0geyBcImV4cGxpY2l0X25fdm9jYWJcIjogNTAyODEsIFwicGF0X3N0clwiOiBcIidzfCd0fCdyZXwndmV8J218J2xsfCdkfCA/XFxcXHB7TH0rfCA/XFxcXHB7Tn0rfCA/W15cXFxcc1xcXFxwe0x9XFxcXHB7Tn1dK3xcXFxccysoPyFcXFxcUyl8XFxcXHMrXCIsIFwic3BlY2lhbF90b2tlbnNcIjogeyBcIjx8ZW5kb2Z0ZXh0fD5cIjogNTAyNTYgfSwgXCJicGVfcmFua3NcIjogXCIhIDAgSVE9PSBJZz09IEl3PT0gSkE9PSBKUT09IEpnPT0gSnc9PSBLQT09IEtRPT0gS2c9PSBLdz09IExBPT0gTFE9PSBMZz09IEx3PT0gTUE9PSBNUT09IE1nPT0gTXc9PSBOQT09IE5RPT0gTmc9PSBOdz09IE9BPT0gT1E9PSBPZz09IE93PT0gUEE9PSBQUT09IFBnPT0gUHc9PSBRQT09IFFRPT0gUWc9PSBRdz09IFJBPT0gUlE9PSBSZz09IFJ3PT0gU0E9PSBTUT09IFNnPT0gU3c9PSBUQT09IFRRPT0gVGc9PSBUdz09IFVBPT0gVVE9PSBVZz09IFV3PT0gVkE9PSBWUT09IFZnPT0gVnc9PSBXQT09IFdRPT0gV2c9PSBXdz09IFhBPT0gWFE9PSBYZz09IFh3PT0gWUE9PSBZUT09IFlnPT0gWXc9PSBaQT09IFpRPT0gWmc9PSBadz09IGFBPT0gYVE9PSBhZz09IGF3PT0gYkE9PSBiUT09IGJnPT0gYnc9PSBjQT09IGNRPT0gY2c9PSBjdz09IGRBPT0gZFE9PSBkZz09IGR3PT0gZUE9PSBlUT09IGVnPT0gZXc9PSBmQT09IGZRPT0gZmc9PSBvUT09IG9nPT0gb3c9PSBwQT09IHBRPT0gcGc9PSBwdz09IHFBPT0gcVE9PSBxZz09IHF3PT0gckE9PSByZz09IHJ3PT0gc0E9PSBzUT09IHNnPT0gc3c9PSB0QT09IHRRPT0gdGc9PSB0dz09IHVBPT0gdVE9PSB1Zz09IHV3PT0gdkE9PSB2UT09IHZnPT0gdnc9PSB3QT09IHdRPT0gd2c9PSB3dz09IHhBPT0geFE9PSB4Zz09IHh3PT0geUE9PSB5UT09IHlnPT0geXc9PSB6QT09IHpRPT0gemc9PSB6dz09IDBBPT0gMFE9PSAwZz09IDB3PT0gMUE9PSAxUT09IDFnPT0gMXc9PSAyQT09IDJRPT0gMmc9PSAydz09IDNBPT0gM1E9PSAzZz09IDN3PT0gNEE9PSA0UT09IDRnPT0gNHc9PSA1QT09IDVRPT0gNWc9PSA1dz09IDZBPT0gNlE9PSA2Zz09IDZ3PT0gN0E9PSA3UT09IDdnPT0gN3c9PSA4QT09IDhRPT0gOGc9PSA4dz09IDlBPT0gOVE9PSA5Zz09IDl3PT0gK0E9PSArUT09ICtnPT0gK3c9PSAvQT09IC9RPT0gL2c9PSAvdz09IEFBPT0gQVE9PSBBZz09IEF3PT0gQkE9PSBCUT09IEJnPT0gQnc9PSBDQT09IENRPT0gQ2c9PSBDdz09IERBPT0gRFE9PSBEZz09IER3PT0gRUE9PSBFUT09IEVnPT0gRXc9PSBGQT09IEZRPT0gRmc9PSBGdz09IEdBPT0gR1E9PSBHZz09IEd3PT0gSEE9PSBIUT09IEhnPT0gSHc9PSBJQT09IGZ3PT0gZ0E9PSBnUT09IGdnPT0gZ3c9PSBoQT09IGhRPT0gaGc9PSBodz09IGlBPT0gaVE9PSBpZz09IGl3PT0gakE9PSBqUT09IGpnPT0ganc9PSBrQT09IGtRPT0ga2c9PSBrdz09IGxBPT0gbFE9PSBsZz09IGx3PT0gbUE9PSBtUT09IG1nPT0gbXc9PSBuQT09IG5RPT0gbmc9PSBudz09IG9BPT0gclE9PSBJSFE9IElHRT0gYUdVPSBhVzQ9IGNtVT0gYjI0PSBJSFJvWlE9PSBaWEk9IElITT0gWVhRPSBJSGM9IElHOD0gWlc0PSBJR009IGFYUT0gYVhNPSBZVzQ9IGIzST0gWlhNPSBJR0k9IFpXUT0gSUdZPSBhVzVuIElIQT0gYjNVPSBJR0Z1IFlXdz0gWVhJPSBJSFJ2IElHMD0gSUc5bSBJR2x1IElHUT0gSUdnPSBJR0Z1WkE9PSBhV009IFlYTT0gYkdVPSBJSFJvIGFXOXUgYjIwPSBiR3c9IFpXNTAgSUc0PSBJR3c9IGMzUT0gSUhKbCBkbVU9IElHVT0gY204PSBiSGs9IElHSmwgSUdjPSBJRlE9IFkzUT0gSUZNPSBhV1E9IGIzUT0gSUVrPSBkWFE9IFpYUT0gSUVFPSBJR2x6IElHOXUgYVcwPSBZVzA9IGIzYz0gWVhrPSBZV1E9IGMyVT0gSUhSb1lYUT0gSUVNPSBhV2M9IElHWnZjZz09IFlXTT0gSUhrPSBkbVZ5IGRYST0gSUhVPSBiR1E9IElITjAgSUUwPSBKM009IElHaGwgSUdsMCBZWFJwYjI0PSBhWFJvIGFYST0gWTJVPSBJSGx2ZFE9PSBhV3c9IElFST0gSUhkbyBiMnc9IElGQT0gSUhkcGRHZz0gSURFPSBkR1Z5IFkyZz0gSUdGeiBJSGRsIElDZz0gYm1RPSBhV3hzIElFUT0gYVdZPSBJREk9IFlXYz0gWlhKeiBhMlU9IElDST0gSUVnPSBaVzA9IElHTnZiZz09IElGYz0gSUZJPSBhR1Z5IElIZGhjdz09IElIST0gYjJRPSBJRVk9IGRXdz0gWVhSbCBJR0YwIGNtaz0gY0hBPSBiM0psIElGUm9aUT09IElITmwgZFhNPSBJSEJ5Ync9PSBJR2hoIGRXMD0gSUdGeVpRPT0gSUdSbCBZV2x1IFlXNWsgSUc5eSBhV2RvIFpYTjAgYVhOMCBZV0k9IGNtOXQgSUU0PSBkR2c9IElHTnZiUT09IElFYz0gZFc0PSBiM0E9IE1EQT0gSUV3PSBJRzV2ZEE9PSBaWE56IElHVjQgSUhZPSBjbVZ6IElFVT0gWlhjPSBhWFI1IFlXNTAgSUdKNSBaV3c9IGIzTT0gYjNKMCBiMk09IGNYVT0gSUdaeWIyMD0gSUdoaGRtVT0gSUhOMSBhWFpsIGIzVnNaQT09IElITm8gSUhSb2FYTT0gYm5RPSBjbUU9IGNHVT0gYVdkb2RBPT0gWVhKMCBiV1Z1ZEE9PSBJR0ZzIGRYTjAgWlc1ayBMUzA9IFlXeHMgSUU4PSBZV05yIElHTm8gSUd4bCBhV1Z6IGNtVmsgWVhKayA0b0E9IGIzVjAgSUVvPSBJR0ZpIFpXRnkgYVhZPSBZV3hzZVE9PSBiM1Z5IGIzTjAgWjJnPSBjSFE9IElIQnMgWVhOMCBJR05oYmc9PSBZV3M9IGIyMWwgZFdRPSBWR2hsIElHaHBjdz09IElHUnYgSUdkdiBJR2hoY3c9PSBaMlU9IEozUT0gSUZVPSBjbTkxIElITmggSUdvPSBJR0oxZEE9PSBJSGR2Y2c9PSBJR0ZzYkE9PSBaV04wIElHcz0gWVcxbCBJSGRwYkd3PSBiMnM9IElIZG9aUT09IElIUm9aWGs9IGFXUmwgTURFPSBabVk9IGFXTm8gY0d3PSBkR2hsY2c9PSBJSFJ5IExpND0gSUdsdWRBPT0gYVdVPSBkWEpsIFlXZGwgSUc1bCBhV0ZzIFlYQT0gYVc1bCBhV05sIElHMWwgSUc5MWRBPT0gWVc1eiBiMjVsIGIyNW4gYVc5dWN3PT0gSUhkb2J3PT0gSUVzPSBJSFZ3IElIUm9aV2x5IElHRmsgSURNPSBJSFZ6IFlYUmxaQT09IGIzVnogSUcxdmNtVT0gZFdVPSBiMmM9IElGTjAgYVc1ayBhV3RsIElITnYgYVcxbCBjR1Z5IExpST0gWW1WeSBhWG89IFlXTjAgSUc5dVpRPT0gSUhOaGFXUT0gSUMwPSBZWEpsIElIbHZkWEk9IFkyTT0gSUZSbyBJR05zIFpYQT0gWVd0bCBZV0pzWlE9PSBhWEE9IElHTnZiblE9IElIZG9hV05vIGFXRT0gSUdsdCBJR0ZpYjNWMCBJSGRsY21VPSBkbVZ5ZVE9PSBkV0k9IElHaGhaQT09IElHVnUgSUdOdmJYQT0gTENJPSBJRWx1IElIVnUgSUdGbiBhWEpsIFlXTmwgWVhVPSBZWEo1IElIZHZkV3hrIFlYTnogY25rPSBJT0tBIFkydz0gYjI5ciBaWEpsIGMyOD0gSUZZPSBhV2R1IGFXST0gSUc5bVpnPT0gSUhSbCBkbVZ1IElGaz0gYVd4bCBiM05sIGFYUmwgYjNKdCBJREl3TVE9PSBJSEpsY3c9PSBJRzFoYmc9PSBJSEJsY2c9PSBJRzkwYUdWeSBiM0prIGRXeDAgSUdKbFpXND0gSUd4cGEyVT0gWVhObCBZVzVqWlE9PSBhM009IFlYbHogYjNkdSBaVzVqWlE9PSBJR1JwY3c9PSBZM1JwYjI0PSBJR0Z1ZVE9PSBJR0Z3Y0E9PSBJSE53IGFXNTAgY21WemN3PT0gWVhScGIyNXogWVdscyBJRFE9IGFXTmhiQT09IElIUm9aVzA9IElHaGxjZz09IGIzVnVkQT09IElFTm8gSUdGeSBJR2xtIElIUm9aWEpsIElIQmwgSUhsbFlYST0gWVhZPSBJRzE1IElITnZiV1U9IElIZG9aVzQ9IGIzVm5hQT09IFlXTm8gSUhSb1lXND0gY25VPSBiMjVrIGFXTnIgSUc5MlpYST0gZG1WcyBJSEYxIENnbz0gSUhOaiBjbVZoZEE9PSBjbVZsIElFbDAgYjNWdVpBPT0gY0c5eWRBPT0gSUdGc2MyOD0gSUhCaGNuUT0gWm5SbGNnPT0gSUd0dSBJR0psWXc9PSBJSFJwYldVPSBaVzV6IElEVT0gYjNCc1pRPT0gSUhkb1lYUT0gSUc1diBaSFU9IGJXVnkgWVc1biBJRzVsZHc9PSBMUzB0TFE9PSBJR2RsZEE9PSBiM0o1IGFYUnBiMjQ9IGFXNW5jdz09IElHcDFjM1E9IElHbHVkRzg9IElEQT0gWlc1MGN3PT0gYjNabCBkR1U9IElIQmxiM0JzWlE9PSBJSEJ5WlE9PSBJR2wwY3c9PSBJSEpsWXc9PSBJSFIzIGFXRnUgYVhKemRBPT0gWVhKciBiM0p6IElIZHZjbXM9IFlXUmwgYjJJPSBJSE5vWlE9PSBJRzkxY2c9PSBkMjQ9IGFXNXIgYkdsaiBJREU1IElFaGwgYVhObyBibVJsY2c9PSBZWFZ6WlE9PSBJR2hwYlE9PSBiMjV6IElGcz0gSUhKdiBabTl5YlE9PSBhV3hrIFlYUmxjdz09IGRtVnljdz09IElHOXViSGs9IGIyeHMgSUhOd1pRPT0gWTJzPSBaV3hzIFlXMXcgSUdGall3PT0gSUdKcyBhVzkxY3c9PSBkWEp1IFpuUT0gYjI5ayBJR2h2ZHc9PSBhR1ZrIElDYz0gSUdGbWRHVnkgWVhjPSBJR0YwZEE9PSBiM1k9IGJtVT0gSUhCc1lYaz0gWlhKMiBhV04wIElHTnZkV3hrIGFYUjAgSUdGdCBJR1pwY25OMCBJRFk9IElHRmpkQT09IElDUT0gWldNPSBhR2x1Wnc9PSBkV0ZzIGRXeHMgSUdOdmJXMD0gYjNrPSBiMnhrIFkyVnogWVhSbGNnPT0gSUdabCBJR0psZEE9PSBkMlU9IGFXWm0gSUhSM2J3PT0gYjJOciBJR0poWTJzPSBLUzQ9IGFXUmxiblE9IElIVnVaR1Z5IGNtOTFaMmc9IGMyVnMgZUhRPSBJRzFoZVE9PSBjbTkxYm1RPSBJSEJ2IGNHZz0gYVhOeiBJR1JsY3c9PSBJRzF2YzNRPSBJR1JwWkE9PSBJR0ZrWkE9PSBhbVZqZEE9PSBJR2x1WXc9PSBabTl5WlE9PSBJSEJ2YkE9PSBiMjUwIElHRm5ZV2x1IFkyeDFaQT09IGRHVnliZz09IElHdHViM2M9IElHNWxaV1E9IElHTnZibk09IElHTnYgSUM0PSBJSGRoYm5RPSBJSE5sWlE9PSBJRGM9IGJtbHVadz09IGFXVjMgSUZSb2FYTT0gWTJWayBJR1YyWlc0PSBJR2x1WkE9PSBkSGs9IElGZGwgWVhSbyBJSFJvWlhObCBJSEJ5IElIVnpaUT09IElHSmxZMkYxYzJVPSBJR1pzIGJtYz0gSUc1dmR3PT0gSU9LQWt3PT0gWTI5dCBhWE5sIElHMWhhMlU9IElIUm9aVzQ9IGIzZGxjZz09IElHVjJaWEo1IElGVnUgSUhObFl3PT0gYjNOeiBkV05vIElHVnQgSUQwPSBJRkpsIGFXVmsgY21sMCBJR2x1ZGc9PSBiR1ZqZEE9PSBJSE4xY0hBPSBZWFJwYm1jPSBJR3h2YjJzPSBiV0Z1IGNHVmpkQT09IElEZz0gY205MyBJR0oxIElIZG9aWEpsIGFXWnBZdz09IElIbGxZWEp6IGFXeDUgSUdScFptWT0gSUhOb2IzVnNaQT09IElISmxiUT09IFZHZz0gU1c0PSBJR1YyIFpHRjUgSjNKbCBjbWxpIElISmxiQT09IGMzTT0gSUdSbFpnPT0gSUhKcFoyaDAgSUhONSBLU3c9IGJHVnogTURBdyBhR1Z1IElIUm9jbTkxWjJnPSBJRlJ5IFgxOD0gSUhkaGVRPT0gSUdSdmJnPT0gSUN3PSBJREV3IFlYTmxaQT09IElHRnpjdz09IGRXSnNhV009IElISmxadz09IElFRnVaQT09IGFYZz0gSUhabGNuaz0gSUdsdVkyeDFaQT09IGIzUm9aWEk9IElHbHRjQT09IGIzUm8gSUhOMVlnPT0gSU9LQWxBPT0gSUdKbGFXNW4gWVhKbiBJRmRvIFBUMD0gYVdKc1pRPT0gSUdSdlpYTT0gWVc1blpRPT0gY21GdCBJRGs9IFpYSjAgY0hNPSBhWFJsWkE9PSBZWFJwYjI1aGJBPT0gSUdKeSBJR1J2ZDI0PSBJRzFoYm5rPSBZV3RwYm1jPSBJR05oYkd3PSBkWEpwYm1jPSBhWFJwWlhNPSBJSEJvIGFXTnogWVd4eiBJR1JsWXc9PSBZWFJwZG1VPSBaVzVsY2c9PSBJR0psWm05eVpRPT0gYVd4cGRIaz0gSUhkbGJHdz0gSUcxMVkyZz0gWlhKemIyND0gSUhSb2IzTmwgSUhOMVkyZz0gSUd0bCBJR1Z1WkE9PSBJRUoxZEE9PSBZWE52Ymc9PSBkR2x1Wnc9PSBJR3h2Ym1jPSBaV1k9IElIUm9hVzVyIGVYTT0gSUdKbGJBPT0gSUhOdCBhWFJ6IFlYZz0gSUc5M2JnPT0gSUhCeWIzWT0gSUhObGRBPT0gYVdabCBiV1Z1ZEhNPSBZbXhsIGQyRnlaQT09IElITm9iM2M9IElIQnlaWE09IGJYTT0gYjIxbGRBPT0gSUc5aSBJSE5oZVE9PSBJRk5vIGRITT0gWm5WcyBJR1ZtWmc9PSBJR2QxIElHbHVjM1E9IGRXNWsgY21WdSBZMlZ6Y3c9PSBJR1Z1ZEE9PSBJRmx2ZFE9PSBJR2R2YjJRPSBJSE4wWVhKMCBhVzVqWlE9PSBJRzFoWkdVPSBkSFE9IGMzUmxiUT09IGIyeHZadz09IGRYQT0gSUh3PSBkVzF3IElHaGxiQT09IGRtVnliZz09IGRXeGhjZz09IGRXRnNiSGs9IElHRmogSUcxdmJnPT0gSUd4aGMzUT0gSURJd01BPT0gTVRBPSBJSE4wZFdRPSBkWEpsY3c9PSBJRUZ5IGMyVnNaZz09IFlYSnogYldWeWFXTT0gZFdWeiBZM2s9IElHMXBiZz09IGIyeHNiM2M9IElHTnZiQT09IGFXOD0gSUcxdlpBPT0gSUdOdmRXNTAgSUVOdmJRPT0gYUdWeiBJR1pwYmc9PSBZV2x5IGFXVnkgNG9DVSBjbVZoWkE9PSBZVzVyIFlYUmphQT09IFpYWmxjZz09IElITjBjZz09IElIQnZhVzUwIGIzSnIgSUU1bGR3PT0gSUhOMWNnPT0gYjI5cyBZV3hyIFpXMWxiblE9IElIVnpaV1E9IGNtRmpkQT09IGQyVmxiZz09IElITmhiV1U9IGIzVnUgSUVGcyBZMms9IElHUnBabVpsY21VPSBJSGRvYVd4bCBMUzB0TFMwdExTMD0gSUdkaGJXVT0gWTJWd2RBPT0gSUhOcGJRPT0gTGk0dSBJR2x1ZEdWeSBaV3M9IElISmxjRzl5ZEE9PSBJSEJ5YjJSMSBJSE4wYVd4cyBiR1ZrIFlXZz0gSUdobGNtVT0gSUhkdmNteGsgSUhSb2IzVm5hQT09IElHNTFiUT09IFlYSmphQT09IGFXMWxjdz09IFlXeGwgSUZObCBJRWxtIEx5OD0gSUV4bCBJSEpsZEE9PSBJSEpsWmc9PSBJSFJ5WVc1eiBibVZ5IGRYUnBiMjQ9IGRHVnljdz09IElIUmhhMlU9IElFTnMgSUdOdmJtWT0gZDJGNSBZWFpsIElHZHZhVzVuIElITnMgZFdjPSBJRUZ0WlhKcFl3PT0gSUhOd1pXTT0gSUdoaGJtUT0gSUdKbGRIZGxaVzQ9IGFYTjBjdz09IElFUmwgYjI5MCBTWFE9IElHVmhjZz09IElHRm5ZV2x1YzNRPSBJR2hwWjJnPSBaMkZ1IFlYbz0gWVhSb1pYST0gSUdWNGNBPT0gSUc5dyBJR2x1Y3c9PSBJR2R5IElHaGxiSEE9IElISmxjWFU9IFpYUnogYVc1eiBJRkJ5Ync9PSBhWE50IElHWnZkVzVrIGJHRnVaQT09IFlYUmggZFhOeiBZVzFsY3c9PSBJSEJsY25OdmJnPT0gSUdkeVpXRjAgY0hJPSBJSE5wWjI0PSBJRUZ1IEozWmwgSUhOdmJXVjAgSUhObGNnPT0gYUdsdyBJSEoxYmc9PSBJRG89IElIUmxjZz09IGFYSmxZM1E9IElHWnZiR3h2ZHc9PSBJR1JsZEE9PSBhV05sY3c9PSBJR1pwYm1RPSBNVEk9IElHMWxiUT09IElHTnkgWlhKbFpBPT0gWlhnPSBJR1Y0ZEE9PSBkWFJvIFpXNXpaUT09IFkyOD0gSUhSbFlXMD0gZG1sdVp3PT0gYjNWelpRPT0gWVhObyBZWFIwIGRtVmsgSUhONWMzUmxiUT09IElFRnogWkdWeSBhWFpsY3c9PSBiV2x1IElHeGxZV1E9IElFSnMgWTJWdWRBPT0gSUdGeWIzVnVaQT09IElHZHZkbVZ5Ymc9PSBJR04xY2c9PSBkbVZzYjNBPSBZVzU1IElHTnZkWEk9IFlXeDBhQT09IFlXZGxjdz09IGFYcGwgSUdOaGNnPT0gYjJSbCBJR3hoZHc9PSBJSEpsWVdRPSBKMjA9IFkyOXUgSUhKbFlXdz0gSUhOMWNIQnZjblE9IElERXkgTGk0dUxnPT0gSUhKbFlXeHNlUT09IGJtVnpjdz09IElHWmhZM1E9IElHUmhlUT09IElHSnZkR2c9IGVXbHVadz09IElITmxjblk9IElFWnZjZz09IElIUm9jbVZsIElIZHZiUT09IElHMWxaQT09IGIyUjUgSUZSb1pYaz0gTlRBPSBJR1Y0Y0dWeSBkRzl1IElHVmhZMmc9IFlXdGxjdz09IElHTm9aUT09IElHTnlaUT09IGFXNWxjdz09IElISmxjQT09IE1Uaz0gWjJjPSBhV3hzYVc5dSBJR2R5YjNVPSBkWFJsIGFXcz0gVjJVPSBaMlYwIFJWST0gSUcxbGRBPT0gSUhOaGVYTT0gYjNnPSBJR1IxY21sdVp3PT0gWlhKdSBhWHBsWkE9PSBZWEpsWkE9PSBJR1poYlE9PSBhV05oYkd4NSBJR2hoY0hBPSBJRWx6IElHTm9ZWEk9IGJXVmsgZG1WdWRBPT0gSUdkbGJtVnkgYVdWdWRBPT0gY0d4bCBhV1YwIGNtVnVkQT09IE1URT0gZG1WeiBjSFJwYjI0PSBJREl3IFptOXliV0YwYVc5dSBJR052Y2c9PSBJRzltWm1saiBhV1ZzWkE9PSBJSFJ2Ync9PSBhWE5wYjI0PSBJR2x1Wmc9PSBJRm89IGRHaGwgYjJGayBJSEIxWW14cFl3PT0gSUhCeWIyYz0gY21saiBLaW89IElIZGhjZz09IElIQnZkMlZ5IGRtbGxkdz09IElHWmxkdz09IElHeHZZdz09IElHUnBabVpsY21WdWRBPT0gSUhOMFlYUmwgSUdobFlXUT0gSjJ4cyBJSEJ2YzNNPSBJSE4wWVhRPSBjbVYwIFlXNTBjdz09IElIWmhiQT09IElHbHpjdz09IElHTnNaUT09IGFYWmxjbk09IFlXNWogSUdWNGNHdz0gSUdGdWIzUm9aWEk9IElGRT0gSUdGMiBkR2hwYm1jPSBibU5sIFYyZz0gSUdOb2FXeGsgSUhOcGJtTmwgYVhKbFpBPT0gYkdWemN3PT0gSUd4cFptVT0gSUdSbGRtVnNiM0E9IGFYUjBiR1U9IElHUmxjQT09IElIQmhjM009IDQ0TT0gSUhSMWNtND0gYjNKdSBWR2hwY3c9PSBZbVZ5Y3c9PSBjbTl6Y3c9PSBJRUZrIElHWnkgSUhKbGMzQT0gSUhObFkyOXVaQT09IGIyZz0gSUM4PSBJR1JwYzJNPSBJQ1k9IElITnZiV1YwYUdsdVp3PT0gSUdOdmJYQnNaUT09IElHVmsgSUdacGJBPT0gSUcxdmJuUm8gWVdvPSBkV009IElHZHZkbVZ5Ym0xbGJuUT0gSUhkcGRHaHZkWFE9IElHeGxadz09IElHUnBjM1E9IElIQjFkQT09IElIRjFaWE4wIFlXNXUgSUhCeWIzUT0gTWpBPSBJRzVsZG1WeSBhV1Z1WTJVPSBJR3hsZG1WcyBJR0Z5ZEE9PSBJSFJvYVc1bmN3PT0gSUcxcFoyaDAgSUdWbVptVmpkQT09IElHTnZiblJ5Ync9PSBJR05sYm5RPSBJREU0IElHRnNiRzkzIElHSmxiR2xsIFkyaHZiMnc9IGIzUjAgSUdsdVkzSmwgSUdabFpXdz0gSUhKbGMzVnNkQT09IElHeHZkQT09IElHWjFiZz09IGIzUmwgSUhSNSBaWEpsYzNRPSBJR052Ym5ScGJnPT0gSUhWemFXNW4gSUdKcFp3PT0gTWpBeCBJR0Z6YXc9PSBJR0psYzNRPSBJQ2s9IFNVND0gSUc5d2NBPT0gTXpBPSBJRzUxYldKbGNnPT0gYVc1bGMzTT0gVTNRPSBiR1ZoYzJVPSBJR05oIElHMTFjM1E9IElHUnBjbVZqZEE9PSBJR2RzIElEdz0gSUc5d1pXND0gSUhCdmMzUT0gSUdOdmJXVT0gSUhObFpXMD0gYjNKa2FXNW4gSUhkbFpXcz0gWVhSbGJIaz0gYVhSaGJBPT0gSUdWcyBjbWxsYm1RPSBJR1poY2c9PSBJSFJ5WVE9PSBhVzVoYkE9PSBJSEJ5YVE9PSBJRlZUIElIQnNZV05sIElHWnZjbTA9IElIUnZiR1E9IElqbz0gWVdsdWN3PT0gWVhSMWNtVT0gSUZSeWRXMXcgSUhOMFlXNWsgSUNNPSBhV1JsY2c9PSBJRVp5IElHNWxlSFE9IElITnZZdz09IElIQjFjZz09IElHeGxkQT09IElHeHBkSFJzWlE9PSBJR2gxYlE9PSBJR2s9IGNtOXUgTVRVPSBJREUxIElHTnZiVzExYmc9PSBJRzFoY21zPSBJRlJvWlhKbCBJSGR5IElGUm9ZWFE9IElHbHVabTl5YldGMGFXOXUgZDJGNWN3PT0gSUdKMWN3PT0gWVhCdyBJR2x1ZG1WemRBPT0gYldVPSBJR2hoY21RPSBZV2x1WldRPSBaV0ZrIElHbHRjRzl5ZEE9PSBJR0Z3Y0hKdiBJSFJsYzNRPSBJSFJ5YVE9PSBJSEpsYzNRPSBiM05sWkE9PSBJR1oxYkd3PSBJR05oY21VPSBJRk53IElHTmhjMlU9IFQwND0gSUhOciBJR3hsYzNNPSBJQ3M9IElIQmhjblJwWXc9PSBJRkJzIFlXSnNlUT09IGRXTnIgYVhOb1pXUT0gWTJodSBZbVU9IElHeHBjM1E9IFlYUnZjZz09IElIUnZjQT09IElHRmtkZz09IElFSmwgY25WamRBPT0gSUdSbGJRPT0gY21GMGFXOXUgYkdsdVp3PT0gWjNrPSBjbVZsYmc9PSBaMlZ5IElHaHZiV1U9IElHeGxablE9IElHSmxkSFJsY2c9PSBJR1JoZEdFPSBJREV4IElHRjBkR0ZqYXc9PSBJSEJ5YjJKc1pRPT0gYkdsdVpRPT0gWVhKa2N3PT0gSUdKbGFBPT0gY21GcyBJRWh2ZHc9PSBJRk5vWlE9PSBZWEpuWlE9PSBJQzB0IE9pOHYgSUdKeWJ3PT0gSUZCbyBZWFJ6IElHSjFhV3hrIGQzYz0gYVdSbFpBPT0gWVdsdCBZWE5sY3c9PSBaVzVqZVE9PSBJRzFoYVc0PSBhVzVsWkE9PSBJR2x1WTJ4MVpHbHVadz09IElIcz0gSUdkdmRBPT0gSUdsdWRHVnlaWE4wIElHdGxaWEE9IElGZz0gSUdWaGN3PT0gWVdsdWFXNW4gSUdOc1lYTnogNG9DbSBJRTV2IElIWmhjZz09IElITnRZV3hzIFlXMXdiR1U9IFFWUT0gSUdsa1pRPT0gSUZOdiBJSEpsWTJVPSBJSEJ2YkdsMCBJRzF2ZGc9PSBJSEJzWVc0PSBJSEJsY21ObGJuUT0gYVhacGJtYz0gSUdOaGJYQT0gSUhCaGVRPT0gTVRRPSBjMk09IGFYTmxaQT09IElIVnVkQT09IGIyNWxlUT09IGNHeHZlUT09IFBUMDlQUT09IElHUnBaRzQ9IElFbHVaQT09IFpXeHogWlhKMFlXbHUgSUhCdmN3PT0gWDE5Zlh3PT0gYVhabGNnPT0gSUhCeWIyTmxjM009IElIQnliMmR5WVcwPSBhV1pwWldRPSBJRkpsY0E9PSBNVFk9IGRYSnYgYjJ4dlozaz0gWVhSMFpYST0gYVc1aCBJRzVoYldVPSBJRUZzYkE9PSBJR1p2ZFhJPSBJSEpsZEhWeWJnPT0gZG1sdmRYTT0gWW5NPSBJR05oYkd4bFpBPT0gSUcxdmRtVT0gSUZOaiBhWEprIElHZHliM1Z3IElHSnlaUT09IElHMWxiZz09IElHTmhjQT09IGRHVnUgWldVPSBJR1J5YVE9PSBiR1ZuIGFHVnlaUT09IGRYUm9iM0k9IElIQmhkQT09IElHTjFjbkpsYm5RPSBhV1JsY3c9PSBJSEJ2Y0E9PSBkRzg9IFpXNTBhVzl1IElHRnNkMkY1Y3c9PSBJRzFwYkE9PSBJSGR2YldWdSBJREUyIElHOXNaQT09IGFYWmxiZz09IGNtRndhQT09IElFOXkgY205eSBaVzUwYkhrPSBJRzVsWVhJPSBJRVY0IGNtVmhiUT09IGMyZz0gSURFMCBJR1p5WldVPSBhWE56YVc5dSBjM1JoYm1RPSBJRU52Ymc9PSBZV3hwZEhrPSBkWE5sWkE9PSBNVE09IElHUmxjMmxuYmc9PSBJR05vWVc1blpRPT0gSUdOb1lXNW4gSUdKdiBJSFpwY3c9PSBaVzFpWlhJPSBJR0p2YjJzPSBjbVZoWkhrPSBJR3RwYkd3PSBNalU9IGNIQmxaQT09IElHRjNZWGs9IElHRmliR1U9IElHTnZkVzUwY25rPSBJR052Ym5OMCBZWEp1IElHOXlaR1Z5IFFWST0gYVc5eSBhWFZ0IGIzSjBhQT09IE1UZz0gWVdsc1lXSnNaUT09IElITjMgSUcxcGJHeHBiMjQ9IElERXogWVhScFl3PT0gZEdWayBJRWR2IElHOXdaWEk9IFpXNW4gSUhSb2FXNW4gWVdwdmNnPT0gWTI5dWIyMD0gSUVOdmJXMD0gSUhkb2VRPT0gZFhKbFpBPT0gZFhKaGJBPT0gSUhOamFHOXZiQT09IFluaz0gSUUxaGNnPT0gSUdGbVpnPT0gSUdSaGVYTT0gSUdGdWJnPT0gZFhObyBZVzVsIFNXWT0gWldjPSBJSEJ5YjJZPSBJR2hsWVd4MGFBPT0gYjNWMGFBPT0gUW5WMCBhVzl1WVd3PSBMaXc9IElITnZiQT09IElHRnNjbVZoWkhrPSBJRE13IElHTm9ZWEpoWTNRPSBTR1U9IElHWnlhV1Z1WkE9PSBSVk09IGFXRnVjdz09IGFXTnNaUT09IEoyUT0gSUU5dSBJR3hsWVhOMCBJSEJ5YjIwPSBJR1J5IElHaHBjM1E9IGFYUm9aWEk9IElHVnpkQT09IGFYRjEgTVRjPSBjMjl1IElIUmxiR3c9IElIUmhiR3M9IGIyaHUgYjJsdWRBPT0gYkdWamRHbHZiZz09IFFVND0gSUhWdWRHbHMgWVhWbmFBPT0gSUd4aGRHVnkgSUhabCBJSFpwWlhjPSBaVzVrYVc1biBhWFpsWkE9PSBJSGR2Y21RPSBkMkZ5WlE9PSBJR052YzNRPSBJR1Z1YjNWbmFBPT0gSUdkcGRtVT0gSUZWdWFYUmxaQT09IElIUmxZMmh1IFlYSmxiblE9IFQxST0gSUhCaGNnPT0gSUVSeSBJREl3TVRZPSBjbWx6ZEE9PSBaWEpwYm1jPSBJTUk9IElHeGhjbWRsIGMybGtaUT09IFlXTjUgWTJObGMzTT0gSUhkcGJnPT0gSUdsdGNHOXlkR0Z1ZEE9PSBJREU1T1E9PSBJR1J2WlhOdSBJREUzIElHSjFjMmx1WlhOeiBJR05zWldGeSBJSEpsYzJVPSBJaXc9IGRYSjUgSUdWeGRRPT0gWVhOMFpYST0gWVd4bSBJRUZ0WlhKcFkyRnUgYm1WamRBPT0gSUdWNGNHVmpkQT09IGFYWmxjbk5wZEhrPSBJRzlqWXc9PSBJRVpzIElHdHBibVE9IElHMWxZVzQ9IElIQmhjM1E9IElHUmxkZz09IElHSmhjdz09IGJHVjAgY21GbWRBPT0gSUc5eVoyRnUgSUdSbGJBPT0gSUhCbGNtWnZjbTA9IElITjBiM0o1IElITmxZWE52Ymc9PSBJRU52YkE9PSBJR05zWVdsdCBJR05oYldVPSBJSGRwZEdocGJnPT0gSUd4cGJtVT0gSUhCeWIycGxZM1E9IElFRjAgSUdOdmJuUnliMnc9IFpXNWtaV1E9IElGTjUgSUdGcGNnPT0gYVhwaGRHbHZiZz09IElDbz0gYkdWNSBJRzF2Ym1WNSBhV1JrIFdXOTEgWm05eSBJR1poYldsc2VRPT0gSUcxaGEybHVadz09IElHSnBkQT09IElIQnZiR2xqWlE9PSBJR2hoY0hCbGJnPT0gSUhabGNuTT0gYjI1NSBkV1ptIElGZG9aVzQ9IElITnBkQT09IGFXUmxidz09IGJHWT0gYVhOdmJnPT0gSUhOMWNtVT0gWjJsdSBJR0Z3Y0dWaGNnPT0gSUd4cFoyaDAgSUdWeiBiMlk9IElIZGhkR1Z5IElIUnBiV1Z6IGJtOTAgSUdkeWIzYz0gSUdOdmJYQmhibms9IElGUmwgYjNkeiBJRzFoY2c9PSBiM1Z5WTJVPSBhVzlzIFlYSnQgWW5JPSBJR1Y0WVcxd2JHVT0gSUdOdmJtTT0gSUdadmNtVT0gSUZSdiBjSEp2IFJVND0gY21sbGN3PT0gSURJMSBJRU5oYmc9PSBibVY1IElHRmpkSFZoYkd4NSBJR1YyWlhJPSBkWEpwZEhrPSBZV3RsYmc9PSBZWEJ6IElIUmhlQT09IElHMWhhbTl5IFlXMWggSUc5bWRHVnUgWlhKaGJBPT0gSUdoMWJXRnUgSUdwdllnPT0gYVhOMFpYST0gSUdGMllXbHNZV0pzWlE9PSBiMk55IFpXNXUgWVdsayBhWFpwWkE9PSBJSEpsWTI5eVpBPT0gUHlJPSBJSE5wYm1jPSBJRUZ0IGFXUmxibU5sIElHNWxkM009IGMzUmxjZz09IElHVmpiMjV2YlE9PSBJR1p2Ykd4dmQybHVadz09IElFSnkgYVhOcGJtYz0gSUdodmRYST0gYlc5emRBPT0gZFcxbGJuUT0gSUhObGVBPT0gSUdSbGMyTT0gSUdKbFkyOXRaUT09IElFVmsgSUhSdmIycz0gSUdoaGRtbHVadz09IElIQnliMlIxWTNRPSBZWFZzZEE9PSBRWE09IFlYSnBibWM9IElHMWxZVzV6IElHaHZjQT09IGRXNWwgSUdOb2J3PT0gSUdObGNuUmhhVzQ9IElHNXZiZz09IElHUmxZV3c9IE1qUT0gYkdWdFpXNTAgYjJOcCBaVzVsIElITnBaR1U9IElGQnkgSUUxaGVRPT0gSUhKbFlYTnZiZz09IGRXVmsgWTJobFpBPT0gZFd4aGRHbHZiZz09IElHVnNaV04wIElHOW1abWxqYVdGcyBJSEJ2YzNOcFlteGwgSUdodmJHUT0gWVc1a2N3PT0gYjNSeiBJR05wZEhrPSBiM0pwWlhNPSBJSE5sZG1WeSBJR05vYVd4a2NtVnUgSUc5dVkyVT0gSUdGamRHbDIgYkdWeSBJRzVwWjJoMCBhWFJwYjI1eiBJRXB2YUc0PSBZWEJsIGNHeGhlUT09IElHUnZibVU9IElHeHBiUT09IElIZHZjbXRwYm1jPSBJRkJ5WlhNPSBiM0pzWkE9PSBaV0k9IElFTnYgSUdKdlpIaz0gWVdsc2N3PT0gZFhSbGN3PT0gSUUxeSBJSGRvWlhSb1pYST0gSUdGMWRHaHZjZz09IGNtOXcgSUhCeWIzQmxjZz09IElITmxaVzQ9IEtUcz0gSUdaaFl3PT0gSUZOMSBJR052Ym1RPSBhWFJwYm1jPSBJR052ZFhKelpRPT0gSUgwPSBMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gWVdsbmJnPT0gSUdWMlpXNTAgSUdWdVp3PT0gSUhCdmRBPT0gSUdsdWRHVnliZz09IGFXRnQgSUhOb2IzSjAgWlcxd2RBPT0gNDRJPSBJRWR2WkE9PSBhV3hoY2c9PSBPREE9IElHOXlhV2M9IFNWTT0gYjNWeWJnPT0gWVdKcGJHbDBlUT09IGFYUnBkbVU9IElHUmhiUT09IElERXdNQT09IElIQnlaWE56IElHUnZhVzVuIElIQnliM1JsWTNRPSBjbWx1Wnc9PSBJSFJvYjNWbmFIUT0gSUhGMVpYTjBhVzl1IGNtVjMgSUZkaGNnPT0gSUhObGRtVnlZV3c9IElGTjBZWFJsIElHZHBkbVZ1IElHWjFibVE9IElGUjMgSUhkbGJuUT0gWVc1alpYTT0gZDI5eWF3PT0gY0c5eSBiWGs9IE5EQT0gSUdGeVp3PT0gWVhKMGJXVnVkQT09IGRYTjBiMjA9IElIQnZiR2xqIElHMWxaWFE9IElHTnlaV0YwIE1qST0gSUZOMFlYUmxjdz09IElHZGhiV1Z6IGNtRjMgZFhSMWNtVT0gSUhWdVpHVnljM1JoYm1RPSBkWEp6IElFOWkgYkdsemFBPT0gYzNrPSBJRzFoYTJWeiBJSGR2Ymc9PSBZV2R2Ymc9PSBJR2gwZEE9PSBJR3h2ZG1VPSBaVzUwYVdGcyBJR052YlhCc1pYUmwgY0dGeSBJRWx0IFFVdz0gSUdGalkyOTFiblE9IHdxQT0gYjNKbFpBPT0gZG1WeWRBPT0gSUdsa1pXNTAgSURJd01UVT0gSUc5MGFHVnljdz09IElFMXBiZz09IGFXSmxjZz09IGRtVnlZV2RsIFZHaGxjbVU9IGFYUnBiMjVoYkE9PSBaR1E9IElIQnliMkk9IElIbHZkVzVuIElHRnNiMjVuIElHRmpZMjl5WkdsdVp3PT0gSUhsbGRBPT0gSUcxbGJXSmxjbk09IElGZG9ZWFE9IGIybGsgSUUxaGJnPT0gUVc1ayBJR0Z0YjI1biBZV2s9IElHVnRjR3h2ZVE9PSBJRkpsY3c9PSBJRDQ9IElHbHVkbTlzIElHeHZkdz09IFlXWT0gSUVOaGNnPT0gSUdocFp3PT0gSUU5dVpRPT0gSUZObFl3PT0gYVc1aGRHbHZiZz09IElHeHBhMlZzZVE9PSBJR0Z1ZEE9PSBZV2RsWkE9PSBJRkoxYzNNPSBJR0psYmc9PSBJSEpsYkdVPSBSbTl5IFltRmphdz09IElFNXZkQT09IElIQnlaWE5wWkdWdWRBPT0gWW1Gc2JBPT0gSUdGalkyVnpjdz09IGFYWnBaSFZoYkE9PSBJRVJsYlE9PSBJRVYxY204PSBOakE9IElHdHViM2R1IGFYSnMgSUVkeSBJR1ZoY214NSBkWE5sIGFXVjBlUT09IDRvQ1QgSUdacFoyaDAgSUhObGJuUT0gSUhSdlpHRjUgSUcxaGNtdGxkQT09IElpND0gSUdKaGMyVmsgSUhOMGNtOXVadz09IGRYSjBhR1Z5IElHUmxZZz09IGJXSmxjZz09IElIQnliMkpzWlcwPSBJR1JsWVhSbyBJSE52WTJsaGJBPT0gYVcxaGRHVT0gUVZNPSBiM0owZFc0PSBJR05oYlhCaGFXZHUgWlhKNSBRMmc9IElHVjUgYVdGc2JIaz0gSUcxMWN3PT0gZDJnPSBjRzl6IElHVnkgSUhOaFpnPT0gSUcxdmJuUm9jdz09IGFYSnZiZz09IElIWnBiMnc9IElHWnBkbVU9IElITjBjbVU9IElIQnNZWGxsY25NPSBhVzVqIFlXeGsgZVdWaGNnPT0gWVhWdSBJSE4xWTJObGMzTT0gSUhCeVpYTmxiblE9IFpYSmxibU5sIElESXdNVFE9IElITjFaMmM9IElIQmhjblJwWTNWc1lYST0gSUhSeWVRPT0gSUhOMVoyZGxjM1E9IElFTm9jbWx6ZEE9PSBiMjVsY3c9PSBJSEJ5YVhZPSBNak09IElHTnlhWFE9IElHeGhibVE9IElHeHZZMkZzIGFXWjUgTWprPSBJR0YxZEE9PSBSVVE9IElFZDEgSUcxMWJIUT0gSUhCdmJHbDBhV05oYkE9PSBJR0Z6YTJWayBJR1p2Y20xbGNnPT0gYVhSMFpYST0gY21sd2RBPT0gSUdOc2IzTmwgSUhCeVlXTjAgSUZsdmNtcz0gSUdkbGRIUnBibWM9IElHRmpjbTl6Y3c9PSBJR052YldJPSBJR0psYkdsbGRtVT0gSUhvPSBJSFJ2WjJWMCBJSFJ2WjJWMGFHVnkgSUVObGJuUT0gYVhKaiBJR2x1WkdsMmFXUjFZV3c9IElFMWogTWpjPSBhWE5yIElFVnVadz09IElHWmhZMlU9IElESTAgSUhaaGJIVmwgSUdGeVpXRT0gWlhZPSBJSGR5YVhRPSBJRkJ5WlhOcFpHVnVkQT09IElIWnZkQT09IElHdGxlUT09IElHMXZiUT09IGNIVjAgSUdGdWVYUm9hVzVuIElHVjRjR1Z5YVdWdVkyVT0gWVhSMGJHVT0gSUcxcGJtUT0gWVdabSBiMjF0IElHWjFkSFZ5WlE9PSBaMlZrIElHTjFkQT09IElIUnZkQT09IGFYUmphQT09IElIWnBaR1Z2IElHbHVkbVZ6ZEdsbiBJRzVsZEE9PSBJRTE1IGNtbGpkQT09IGFXVnUgTGlrPSBJR2x0Y0hKdiBkR2h2ZFdkbyBkMkZ5WkhNPSBJR052Ym01bFkzUT0gSUUxbFpBPT0gYzJWc2RtVnogWlc1emFYWmwgYldJPSBiMkpsY2c9PSBZWFJ2Y25NPSBRVzQ9IElEVXcgSUhKbFpIVT0gY21WelpXNTAgSUdGaWIzWmwgSUdaeVpRPT0gSUVWMWNtOXdaUT09IGMzYz0gSUdGdGIzVnVkQT09IElFRndjQT09IElHVnBkR2hsY2c9PSBJRzFwYkdsMCBJR0Z1WVd3PSBJR1poYVd3PSBJRVZ1IFlXeGxjdz09IElITndaV05wWVd3PSBJR0pzWVdOciBTVlE9IFkyaGxjZz09IElHeHZiMnRwYm1jPSBJR1pwY21VPSBlVzQ9IElHRnNiVzl6ZEE9PSBiMjl1IElITjBkV1I1IElHMXBjM009IFkyaGxjdz09IGNtOTNiZz09IElIUnlaUT09IElHTnZiVzExYm1sMGVRPT0gSUcxbFpHbGggSUdadmIyUT0gSUdOdmJXVnogSUZWdWFYWmxjbk5wZEhrPSBJSE5wYm1kc1pRPT0gVjJoaGRBPT0gZFd4NSBJR2hoYkdZPSBZV2QxWlE9PSBhRzlrIElGSmxjSFZpYkdsaiBJSE4wWVhKMFpXUT0gSUhGMWFXTnIgYjNSdiBZbTl2YXc9PSBJR2x6YzNWbCBhWFJ2Y2c9PSBJR1ZzYzJVPSBJR052Ym5OcFpHVnkgTWpZPSBjbTlrZFE9PSBJSFJoYTJWdSBNamc9IE9Uaz0gSUZkcGRHZz0gSUhSeWRXVT0gSUhkaCBJSFJ5WVdRPSBJR0ZuYnc9PSBJRzFsYzNNPSBhV1ZtIElHRmtaR1ZrIGIydGwgSUdKaFpBPT0gSUdaaGRnPT0gTXpNPSBJSE5wYldsc1lYST0gWVhOciBJRVJ2Ymc9PSBJR05vWVhKaFkzUmxjZz09IGIzSjBjdz09IElFaHZkWE5sIElISmxjRzl5ZEdWayBJSFI1Y0dVPSBkbUZzIGFXOWsgSUVodmQyVjJaWEk9IElIUmhjbWM9IElHVnVkR2x5WlE9PSBjSEJwYm1jPSBJR2hwYzNSdmNuaz0gSUd4cGRtVT0gWm1acFl3PT0gTGk0dUxpNHVMaTQ9IFpXUmxjbUZzIElIUnllV2x1Wnc9PSBJR1JwYzJOMWMzTT0gSUVoaGNnPT0gWVdObGN3PT0gYkdsemFHVmsgSUhObGJHWT0gYjNOdyBjbVZ6ZEE9PSBJSEp2YjIwPSBaV3gwIElHWmhiR3c9IGIyeDFkR2x2Ymc9PSBJR1YwIElIZz0gSUdsemJnPT0gSUdsa1pXRT0gWW04PSBJSE52ZFc1ayBJRVJsY0E9PSBJSE52YldWdmJtVT0gWTJsaGJHeDUgZFd4c2VRPT0gSUdadll3PT0gSUc5aWFtVmpkQT09IGFXWjAgWVhCbGNnPT0gSUhCc1lYbGxjZz09IElISmhkR2hsY2c9PSBJSE5sY25acFkyVT0gWVhOb2FXNW4gSUVSdiBJRkJoY25RPSBjblZuIGJXOXUgY0d4NSBJRzF2Y2c9PSBJRzV2ZEdocGJtYz0gSUhCeWIzWnBaR1U9IFNVTT0gZFc1biBJSEJoY25SNSBJR1Y0YVhOMCBJRzFoWnc9PSBOekE9IElISjFiQT09IElHaHZkWE5sIElHSmxhR2x1WkE9PSBJR2h2ZDJWMlpYST0gSUZkdmNteGsgSUhOMWJRPT0gSUdGd2NHeHBZdz09IElEcz0gSUdaMWJtTjBhVzl1IFozST0gSUZCdmJBPT0gSUdaeWIyNTAgTWpBdyBJSE5sY21sbGN3PT0gSUhSbGJRPT0gSUhSNWNBPT0gYVd4c2N3PT0gSUc5d2RBPT0gSUhCdmFXNTBjdz09IElHSmxiRzkzIGFYUjBaV1E9IElITndaV05wWm1saiBJREl3TVRjPSBkVzFpIElISmggSUhCeVpYWnBiM1Z6IElIQnlaWFE9IGNtVnRaUT09IElHTjFjM1J2YlE9PSBJR052ZFhKMCBJRTFsIElISmxjR3c9IElIZG9iMnhsIFoyOD0gWTJWeSBJSFJ5WldGMCBJRUZqZEE9PSBJSEJ5YjJKaFlteDUgSUd4bFlYSnUgWlc1a1pYST0gSUVGemN3PT0gSUhabGNuTnBiMjQ9IGJtOTMgSUdOb1pXTnIgSUVOaGJBPT0gVWtVPSBiV2x1YVhOMCBUMjQ9IGIzVnlZMlZ6IElHSmxibVZtIElHUnZZdz09IElHUmxkR1Z5IElHVnVZdz09IElITjFjR1Z5IElHRmtaSEpsYzNNPSBJSFpwWTNRPSBJREl3TVRNPSBJRzFsWVhNPSBkSEk9IElHWnBaV3hrIFYyaGxiZz09IElITnBaMjVwWm1saiBkV2RsIElHWmxZWFE9IElHTnZiVzF2Ymc9PSBiRzloWkE9PSBJR0psWjJsdSBJR0p5YVc1biBJR0ZqZEdsdmJnPT0gWlhKdFlXND0gSUdSbGMyTnlhV0k9IElHbHVaSFZ6ZEE9PSBJSGRoYm5SbFpBPT0gY21sbFpBPT0gYldsdVp3PT0gSUdGMGRHVnRjSFE9IE5EVT0gWm1WeSBJR1IxWlE9PSBjbVZ6YzJsdmJnPT0gSXlNPSBJSE5vWVd4cyBJSE5wZUE9PSBiMjg9IElITjBaWEE9IElIQjFZZz09IElHaHBiWE5sYkdZPSBJREl6IElHTnZjQT09IElHUmxjM1E9IElITjBiM0E9IFFVTT0gYVdKcGJHbDBlUT09IElHeGhZZz09IGFXTjFiSFE9IElHaHZkWEp6IElHTnlaV0YwWlE9PSBJR1oxY25Sb1pYST0gSUVGdFpYSnBZMkU9IElFTnBkSGs9IElHUnZkUT09IGFHVmhaQT09IFUxUT0gSUU1dmNuUm8gWTJsdVp3PT0gSUc1aGRHbHZibUZzIGRXeGwgSUVsdWMzUT0gSUhSaGEybHVadz09IElGRjEgYVhKMCBJSEpsWkE9PSBJSEpsYzJWaGNtTm8gZG1seWIyND0gSUVkbCBJR0p5WldGciBZVzVoIElITndZV05sIFlYUmxjbWxoYkE9PSBJSEpsWTJWdWRBPT0gSUVGaSBJR2RsYm1WeVlXdz0gSUdocGRBPT0gSUhCbGNtbHZaQT09IElHVjJaWEo1ZEdocGJtYz0gYVhabGJIaz0gSUhCb2VYTT0gSUhOaGVXbHVadz09IFlXNXJjdz09IElHTnZkUT09IElHTjFiSFE9IFlXTmxaQT09IFpXRnMgZFdGMGFXOXUgSUdOdmRXND0gYkhVPSBJR2x1WTJ4MVpHVT0gSUhCdmMybDBhVzl1IElFRm1kR1Z5IElFTmhibUZrIElFVnQgSUdsdGJRPT0gSUZKbFpBPT0gSUhCcFkycz0gSUdOdmJYQnMgSUcxaGRIUmxjZz09IGNtVm4gWlhoMCBZVzVuZFE9PSBhWE5qIGIyeGwgWVhWMCBJR052YlhCbGRBPT0gWldWayBabVZqZEE9PSBJREl4IElGTmxiZz09IElGUm9aWE5sIFlYTnBibWM9IElHTmhibTV2ZEE9PSBJR2x1YVhRPSBJSEpsYkdGMGFXOXVjdz09IFlXTm9aV1E9IElHSmhjZz09IElEUXcgSUZSSSBJREl3TVRJPSBJSFp2YkE9PSBJR2R5YjNWdVpBPT0gSUhObFkzVnlhWFI1IElIVndaQT09IGFXeDAgTXpVPSBJR052Ym1ObGNtND0gSUVwMWMzUT0gSUhkb2FYUmwgSUhObFpXMXogSUVobGNnPT0gY0dWamFXRnNiSGs9IGFXVnVkSE09IElHRnVibTkxYmc9PSBJR1pwWnc9PSBhV2RvZEhNPSBJSE4wY21rPSBiR2xyWlE9PSBhV1J6IElITjFjdz09IElIZGhkR05vIElPST0gSUhkcGJtUT0gSUVOdmJuUT0gSUdsMGMyVnNaZz09IElHMWhjM009IFFXdz0gZVd4bCBhWEYxWlE9PSBJRTVoZEdsdmJtRnMgSUdGaWN3PT0gSUhCaFkycz0gSUc5MWRITnBaR1U9IElHRnVhVzA9IElIQmhhVzQ9IFpYUmxjZz09IElHMWhibUZuIFpIVmpkQT09IGIyZHUgSUYwPSBJRk5sY0hRPSBjMlZqIGIyWm0gSUVwaGJnPT0gSUdadmIzUT0gWVdSbGN3PT0gSUhSb2FYSmsgSUcxdmRBPT0gSUdWMmFXUmxibU5sIGFXNTBiMjQ9IElIUm9jbVZoZEE9PSBZWEIwIGNHeGxjdz09IFkyeGwgSUd4diBJR1JsWTJ3PSBJR2wwWlcwPSBiV1ZrYVE9PSBJSEpsY0hKbGMyVnVkQT09IGIyMWkgWVcxbGNnPT0gSUhOcFoyNXBabWxqWVc1MCBiMmR5WVhCbyBjM1U9IElHTmhiQT09IGFYSmxjdz09IE1EQXdNQT09IFNVUT0gUVUwPSBJSE5wYlhCc2VRPT0gSUd4dmJtZGxjZz09IElHWnBiR1U9IFQxUT0gWTJobCBVMjg9IFlYUmxadz09IGIzSm4gSUVocGN3PT0gSUdWdVpYST0gSUdSdmJRPT0gSUhWd2IyND0gYVd4cCBJam9pIElIUm9aVzF6Wld4MlpYTT0gSUdOdmJXbHVadz09IElIRjFhWFJsIElHUnBabVpwWTNWc2RBPT0gSUVKaGNnPT0gYVd4cGRHbGxjdz09IGNtVnMgWlc1a2N3PT0gWTJsaGJBPT0gTmpRPSBJSGR2YldGdSBjbUZ3IGVYST0gSUc1bFkyVnpjdz09IGFYQnogSUhSbGVIUT0gSUhKbGNYVnBjbVU9IElHMXBiR2wwWVhKNSBJSEpsZG1sbGR3PT0gSUhKbGMzQnZibk09IE56VT0gSUhOMVltcGxZM1E9IElHbHVjM1JsWVdRPSBJR2x6YzNWbGN3PT0gSUdkbGJnPT0gSWl3aSBJRzFwYm5WMFpYTT0gSUhkbFlYQT0gY21GNSBZVzFsWkE9PSBkR2x0WlE9PSBZbXc9IFNHOTMgSUdOdlpHVT0gSUZOdCBJR2hwWjJobGNnPT0gSUZOMFpRPT0gY21seiBJSEJoWjJVPSBJSE4wZFdSbGJuUnogSUVsdWRHVnliZz09IElHMWxkR2h2WkE9PSBJRUYxWnc9PSBJRkJsY2c9PSBJRUZuIElIQnZiR2xqZVE9PSBJRk4zIElHVjRaV009IElHRmpZMlZ3ZEE9PSBkVzFsIGNtbGlkWFE9IElIZHZjbVJ6IElHWnBibUZzIElHTm9ZVzVuWlhNPSBJRVJsYlc5amNnPT0gSUdaeWFXVnVaSE09IElISmxjM0JsWTNRPSBJR1Z3IElHTnZiWEJoYmc9PSBhWFpwYkE9PSBJR1JoYldGblpRPT0gS2lvcUtnPT0gYjJkc1pRPT0gZG1seWIyNXRaVzUwIElHNWxadz09IFpXNTBZV3c9IElHRncgSUhSdmRHRnMgYVhaaGJBPT0gSVNJPSBiR2x0IElHNWxaV1J6IElHRm5jbVU9IElHUmxkbVZzYjNCdFpXNTAgSUdGblpRPT0gYVhCc1pRPT0gTWpFPSBJSEpsYzNWc2RITT0gSUVGbSBVMmc9IElHZDFiZz09IElFOWlZVzFoIGNtOXNiQT09IElFQT0gSUhKcFoyaDBjdz09IElFSnlhWFE9IElISjFibTVwYm1jPSBJSGRoYzI0PSBJSEJ2Y25RPSBJSEpoZEdVPSBJSEJ5WlhSMGVRPT0gSUhSaGNtZGxkQT09IElITmhkdz09IElHTnBjbU09IElIZHZjbXR6IGFXTnlidz09IFlXeDAgYjNabGNnPT0gZDNkMyBWR2hoZEE9PSBiR2xsY2c9PSBJR1YyWlhKNWIyNWwgZFdSbCBJSEJwWlE9PSBhV1JrYkdVPSBjbUZsYkE9PSBJSEpoWkE9PSBJR0pzYjJOciBJSGRoYkdzPSBWRzg9IDQ0RT0gYm1WeiBJRUYxYzNRPSBZWFZzIGNtOTBaUT09IElGTnZkWFJvIFpYTnphVzl1IGIzQm8gSUhOb2IzZHogSUhOcGRHVT0gSUdwdiBJSEpwYzJzPSBZMngxY3c9PSBiSFE9IElHbHVhZz09IGFXUnBibWM9IElGTndaUT09IElHTm9ZV3hzIGFYSnQgSURJeSBhWFIwYVc1biBjM1J5IElHaDUgVEVVPSBhMlY1IElHSmxaMkZ1IFlYUjFjZz09IFlYTm9hVzVuZEc5dSBiR0Z0IElFUmhkZz09IFltbDAgSUhOcGVtVT0gSUZCaGNnPT0gTXpnPSBiM1Z5Ym1GcyBabUZqWlE9PSBJR1JsWTJsemFXOXUgSUd4aGNtYz0gSUdwMVpBPT0gY21WamRBPT0gSUdOdmJuUnBiblZsIElFOWpkQT09IGIzWmxjbVZrIElFbHVkQT09IFBUMDlQVDA5UFQwPSBJSEJoY21WdWRBPT0gSUZkcGJHdz0gSUdWaGMzaz0gSUdSeWRXYz0gWVc1blpYST0gSUhObGJuTmwgSUdScCBhV1JoZVE9PSBJR1Z1WlhKbmVRPT0gYVhOMGFXTT0gSUdGemMyOWphUT09IFlYSjBaWEk9IGIySmhiQT09IFpXdHogSUVWcyBkWEpqYUE9PSBJR2RwY213PSBiMlU9IGFYUnNaUT09IElESTQgSUVOb1pRPT0gSUhKbGNYVmxjM1E9IElITnZiMjQ9IElHaHZjM1E9IGEzaz0gSUhOMFlYUmxjdz09IGIyMWxjdz09IElHMWhkR1Z5YVdGcyBiR1Y0IElHMXZiV1Z1ZEE9PSBJR0Z1YzNjPSBiMjV6WlE9PSBJR1Z6Y0dWamFXRnNiSGs9IElHNXZjbTA9IElITmxjblpwWTJWeiBjR2wwWlE9PSBjbUZ1IElISnZiR1U9IE5EUT0gS1RvPSBJR055WldRPSBRMnc9IFgxOWZYMTlmWDE4PSBJRzFoZEE9PSBJR3h2Wnc9PSBJRU5zYVc1MGIyND0gVDFVPSBJRzltWm1salpRPT0gSURJMiBJR05vWVhKbiBJSFJ5WVdOciBiV0U9IElHaGxZWEowIElHSmhiR3c9IElIQmxjbk52Ym1GcyBJR0oxYVd4a2FXNW4gYm1FPSBjMlYwIFltOWtlUT09IElFSnNZV05yIElHbHVZM0psWVhObCBhWFIwWlc0PSBJRzVsWldSbFpBPT0gTXpZPSBNekk9IFBTST0gSUd4dmMzUT0gSUdKbFkyRnRaUT09IElHZHliM1Z3Y3c9PSBJRTExY3c9PSBJSGR5YjNSbCBJRkJsIElIQnliM0E9IGFtOTUgdzZrPSBJRmRvYVhSbCBJR1JsWVdRPSBMaWM9IElHaDBkSEE9IElIZGxZbk09IFQxTT0gSUdsdWMybGtaUT09IElIZHliMjVuIElITjBZWFJsYldWdWRBPT0gSUM0dUxnPT0gZVd3PSBJR1pwYkcwPSBJRzExYzJsaiBJSE5vWVhKbCBhV1pwWTJGMGFXOXUgSUhKbGJHVmhjMlU9IElHWnZjbmRoY21RPSBJSE4wWVhrPSBJR052YlhCMWRBPT0gYVhSMFpRPT0gYzJWeSBJRzl5YVdkcGJtRnMgSUdOaGNtUT0gSUdOaGJtUT0gSUdScGRnPT0gWVhSMWNtRnMgSUdaaGRtOXkgVDAwPSBJR05oYzJWeiBkWE5sY3c9PSBJSE5sWTNScGIyND0gSUd4bFlYWmwgWjJsdVp3PT0gYjNabFpBPT0gSUZkaGMyaHBibWQwYjI0PSBNems9IElFZHMgSUhKbGNYVnBjbVZrIFlXTjBhVzl1IFlYQmhiZz09IGIyOXkgYVhSbGNnPT0gSUV0cGJtYz0gSUdOdmRXNTBjbWxsY3c9PSBJRWRsY20xaGJnPT0gYkd4cGJtYz0gSURJMyBNelE9IElIRjFaWE4wYVc5dWN3PT0gSUhCeWFXMD0gSUdObGJHdz0gSUhOb2IyOTAgSUdGdWVXOXVaUT09IElGZGxjM1E9IElHRm1abVZqZEE9PSBaWEJsYm1RPSBJRzl1YkdsdVpRPT0gSUVsemNtRmxiQT09IElGTmxjSFJsYldKbGNnPT0gSUdGaWFXeHBkSGs9IElHTnZiblJsYm5RPSBhWE5sY3c9PSBJSEpsZG1VPSBJR3hoZFc0PSBJR2x1WkdsaiBJR1p2Y21ObCBZMkZ6ZEE9PSBJSE52YkdRPSBZWFpwYm1jPSBabXc9IElITnZablE9IElHTnZiWEJoYm1sbGN3PT0gWTJWbFpBPT0gSUdGeWRHbGpiR1U9IElHRjFaQT09IElISmxkZz09IElHVmtkV009IElIQnNZWGxwYm1jPSBNRFU9IElHaGxiR1E9IFkzUnZjZz09IElISmxiR1ZoYzJWayBJR1psWkdWeVlXdz0gTXpjPSBJR0ZrYldsdWFYTjAgSUdsdWRHVnlkbWxsZHc9PSBJR2x1YzNSaGJHdz0gSUhKbFkyVnBkbVZrIElITnZkWEpqWlE9PSBkV3M9IFVHZz0gSUhObGNtbHZkWE09IElHTnlaV0YwWldRPSBJR05oZFhObCBJR2x0YldWa2FRPT0gSUdSbFptbHUgZFdWcyBJRVJsY0dGeWRHMWxiblE9IFkzUnBiMjV6IElFTnZkWEk9IElFNXZkdz09IGVtVT0gYVhSbGN3PT0gYVhSMWRHbHZiZz09IElHeGhkR1U9IElITndaV0ZyIGJtVnljdz09IElHeGxaMkZzIFlYSnAgSUVOdmNnPT0gSUhkbFpXdHogSUcxdlpHVnMgSUhCeVpXUT0gSUdWNFlXTjAgUWtNPSBJRUo1IFNVNUggYjNOcGJtYz0gSUhSaGEyVnogSUhKbFoyRnlaQT09IElHOXdjRzl5ZEhWdSBJSEJ5YVdObCBJREU1T0E9PSBJRUZ3Y2c9PSBablZzYkhrPSBJRzl5WkE9PSBJSEJ5YjJKc1pXMXogY25WamRHbHZiZz09IGFHRnQgSUVOdmRXNTAgYkdWblpRPT0gSUd4bFlXUmxjbk09IFJWUT0gYkdWMiBJR1JsWlhBPSBiMnh2WjJsallXdz0gWlhObCBhR0Z3Y3c9PSBJRk52YldVPSBJSEJsY25NPSBJR052Ym5SeVlXTjAgSUhKbGJHRjBhVzl1YzJocGNBPT0gYzNBPSBiM1ZrIElHSmhjMlU9IE5EZz0gYldsMCBRV1E9IFlXNWphV0ZzIElHTnZibk4xYlE9PSBJSEJ2ZEdWdWRHbGhiQT09IElHeGhibWQxIGNtVnQgWlhSbyBJSEpsYkdsbiBjbVZ6YzJWayBOalk9IElHeHBibXM9IElHeHZkMlZ5IFlYbGxjZz09IElFcDFibVU9IElHWmxiUT09IGRXNTAgWlhKaiBkWEprIElHTnZiblJoWTNRPSBJR2xzYkE9PSBJRzF2ZEdobGNnPT0gSUdWemRHRmkgYUhSMCBJRTFoY21ObyBJRUp5Ync9PSBJRU5vYVc1aCBJREk1IElITnhkUT09IElIQnliM1pwWkdWayBJR0YyWlhKaFoyVT0gWVhOdmJuTT0gSURJd01URT0gSUdWNFlXMD0gYkdsdSBOVFU9IGJtVmsgSUhCbGNtWmxZM1E9IElIUnZkUT09IFlXeHpaUT09IGRYZz0gSUdKMWVRPT0gSUhOb2IzUT0gSUdOdmJHeGxZM1E9IElIQm9iM1E9IElIQnNZWGxsWkE9PSBJSE4xY25CeSBJRzltWm1samFXRnNjdz09IElITnBiWEJzWlE9PSBZWFo1IElHbHVaSFZ6ZEhKNSBJR2hoYm1SeiBaM0p2ZFc1ayBJSEIxYkd3PSBJSEp2ZFc1ayBJSFZ6WlhJPSBJSEpoYm1kbCBkV0Z5ZVE9PSBJSEJ5YVhaaGRHVT0gYjNCeiBaV1Z6IElIZGhlWE09IElFMXBZMmc9IElIWmxhQT09IElHVjRZMlZ3ZEE9PSBJSFJsY20xeiBhVzExYlE9PSBjSEJsY2c9PSBTVTlPIGIzSmxjdz09IElFUnlZV2R2Ymc9PSBiM1ZzIElHUmxiZz09IElIQmxjbVp2Y20xaGJtTmwgSUdKcGJHdz0gWTJscyBORGM9IElHVnVkbWx5YjI1dFpXNTAgSUdWNFl3PT0gWVdSayBJSGR2Y25SbyBJSEJwWTNRPSBJR05vWVc1alpRPT0gSURJd01UZz0gWW05eSBJSE53WldWayBhV04wYVc5dSBJR0ZzYkdWbiBJRXBoY0dGdSBZWFJ2Y25rPSBjbVZsZEE9PSBJRzFoZEdObyBJRWxKIElITjBjblU9IGIzSmtaWEk9IElITjBaUT09IElHeHBkbWx1Wnc9PSBJSE4wY25WamRBPT0gYVc1diBJSE5sY0dGeSBhR1Z5Ymc9PSBJSEpsYzNCdmJuTmwgSUdWdWFtOTUgSUhacFlRPT0gUVVRPSBkVzFsYm5SeiBZV05sWW05dmF3PT0gSUcxbGJXSmxjZz09IGFXSnkgYVhwcGJtYz0gSUhSdmIydz0gSUUxdmJnPT0gSUZkb2FXeGwgYUc5dlpBPT0gSUVGdVp3PT0gSUVSbFpnPT0gSUc5bVptVnkgVkhJPSBZWFZ5IElIUjFjbTVsWkE9PSBJRXAxYkhrPSBaRzkzYmc9PSBZVzVqWldRPSBJSEpsWTJWdWRHeDUgSUVWaGNnPT0gSUdObCBJRk4wWVhJPSBJRU52Ym1jPSBjbTkxWjJoMCBJR0pzYjI5ayBJR2h2Y0dVPSBJR052YlcxbGJuUT0gWVdsdWRBPT0gSUdGeWNtaz0gYVd4bGN3PT0gSUhCaGNuUnBZMmx3IGIzVm5hSFE9IGNtbHdkR2x2Ymc9PSBNRGc9IE5Eaz0gSUdkaGRtVT0gSUhObGJHVmpkQT09IElHdHBiR3hsWkE9PSBjM2xqYUE9PSBJR2R2WlhNPSBhV289IElHTnZiR3c9IElHbHRjR0ZqZEE9PSBZWFJwZG1WeiBJRk5sY2c9PSBNRGs9IElFRjFaM1Z6ZEE9PSBJR0p2ZVE9PSBaR1U9IElFUmxjdz09IElHWmxiSFE9IFZWTT0gSUdWNGNHVmpkR1ZrIElHbHRZV2RsIElFMWhjbXM9IFkyTnZjbVJwYm1jPSBiMmxqWlE9PSBSVU09IElFMWhadz09IFpXNWxaQT09IGFHOXNaQT09IElGQnZjM1E9IElIQnlaWFpsYm5RPSBUbTg9IElHbHVkbTlzZG1WayBJR1Y1WlhNPSBJSEYxYVdOcmJIaz0gUVhRPSBkVzVyIElHSmxhR0YyIElIVnkgSUd4bFpBPT0gWTI5dFpRPT0gWlhrPSBJR05oYm1ScFpBPT0gSUdWaGNteHBaWEk9IElHWnZZM1Z6IFpYUjUgVUhKdiBiR1ZrWjJVPSBhWGhsWkE9PSBhV3hzWldRPSBJSEJ2Y0hWc1lYST0gUVZBPSBJSE5sZEhRPSBiR2xuYUhRPSBJSFpoY21sdmRYTT0gYVc1cmN3PT0gSUd4bGRtVnNjdz09IElISnZZV1E9IFpXeHNhV2M9IFlXSnNaWE09IGFHVnMgYVhSMFpXVT0gSUVkbGJtVnkgZVhCbCBJR2hsWVhKayBhV05zWlhNPSBJRzFwY3c9PSBJSFZ6WlhKeiBJRk5oYmc9PSBJR2x0Y0hKdmRtVT0gSUdaaGRHaGxjZz09IElITmxZWEpqYUE9PSBWR2hsZVE9PSBkbWxzIElIQnliMlpsYzNNPSBJR3R1WlhjPSBJR3h2YzNNPSBJR1YyWlc1MGN3PT0gTmpVPSBJR0pwYkd4cGIyND0gTURjPSBNREk9IElFNWxkM009IElFRk4gSUdOdmRtVnkgZDJobGNtVT0gWlc1emFXOXUgSUdKdmRIUT0gSUdGeVpXRnogWlc1alpYTT0gYjNCbCBJRlIzYVhSMFpYST0gWVdWcyBJR2RsZEhNPSBJRWR2YjJkc1pRPT0gSUhOdSBhV0Z1ZEE9PSBJSFp2ZEdVPSBJRzVsWVhKc2VRPT0gSUdsdVkyeDFaR1ZrIElISmxZMjluYmc9PSBlbm89IGJXMD0gWVd4bFpBPT0gSUdoaGNIQmxibVZrIE1EUT0gSUdodmRBPT0gSUhkb2IzTmwgSUdOcGRtbHMgSUhOMVptWT0gYjJWeiBhWFJwZWc9PSBJRk41Y21rPSBJSEpsYzNCdmJtUT0gSUdodmJnPT0gSUdabFlYUjFjbVZ6IElHVmpiMjV2YldsaiBJRUZ3Y21scyBjbWx0IElIUmxZMmh1YjJ4dlozaz0gSUc5d2RHbHZiZz09IFlXZHBibWM9IElIQjFjbU5vIFVtVT0gSUd4aGRBPT0gWTJocFpRPT0gYVhOcyBJSEpsWTI5dGJRPT0gZFdZPSBJSFJ5WVdsdWFXNW4gSUdWbVptVmpkSE09IElHWmhjM1E9IElESXdNVEE9IElHOWpZM1Z5IElIZGxZbk5wZEdVPSBJR1Z0WVdscyBJSE5sYm5NPSBaV05vIElHOXBiQT09IElHbHVabXgxIElHTjFjbkpsYm5Sc2VRPT0gSUZOamFBPT0gSUVGa1pBPT0gSUdkdllXdz0gSUhOamFXVnVkQT09IElHTnZiblk9IE1UQXcgWlcxNSBJR1JsWTJsa1pXUT0gSUhSeVlYWmxiQT09IElHMWxiblJwYjI0PSBURXc9IE1ETT0gSUdWc1pXTjBhVzl1IElIQm9iMjVsIElHeHZiMnR6IElITnBkSFZoZEdsdmJnPT0gSUdONSBJR2h2Y2c9PSBZbVZrIElFTnZkWEowIFlXbHNlUT09IFlYWmxjdz09IElIRjFZV3hwZEhrPSBJRU52YlhBPSBkMmx6WlE9PSBJSFJoWW14bCBJSE4wWVdabSBJRmRwYm1RPSBaWFIwIElIUnlhV1ZrIGFXUmxjbVZrIElHRmtaR2wwYVc5dSBJR0p2ZUE9PSBJR3hoWTJzPSBZWEpwYkhrPSBJSGRwWkdVPSBJRzFwWkE9PSBJR0p2WVhKayBlWE5wY3c9PSBJR0Z1ZEdrPSBhR0U9IElHUnBadz09IFpXNXBibWM9IElHUnlidz09IFEyOXUgTmpnPSBJSE5zYjNjPSBZbUZ6WldRPSBjMlZ4ZFE9PSBJSEJoZEdnPSBSWGc9IFlXdGxjZz09IElIZHZjbXRsWkE9PSBJSEJsYmc9PSBJR1Z1WjJsdVpRPT0gSUd4dmIydGxaQT09IElGTjFjR1Z5IElGTmxjblk9IElIWnBZM1JwYlE9PSBWVzQ9IElIQnliM0JsY25SNSBJR2x1ZEhKdlpIVT0gSUdWNFpXTjFkQT09IElGQk4gVEdVPSBJR052Ykc5eSBJRTF2Y21VPSBJRFl3IElHNWxkSGR2Y21zPSBJR1JoZEdVPSBZM1ZzIGFXUm5aUT09IElHVjRkSEpoIE16RT0gSUhOc1pRPT0gTmpjPSBJSGR2Ym1RPSBJSEpsY0c5eWRITT0gYW5WemRBPT0gSUVGMWMzUnlZV3c9IElHTmhjR2wwWVd3PSBJR1Z1Y3c9PSBJR052YlcxaGJtUT0gSUdGc2JHOTNaV1E9IElIQnlaWEE9IElHTmhjSFE9IGFHbGkgSUc1MWJXSmxjbk09IFkyaGhiZz09IElHWmhhWEk9IGJYQT0gYjIxeiBJSEpsWVdObyBWMmwwYUE9PSBkR0ZwYmc9PSBJR0p5YjJGayBJR052ZFhCc1pRPT0gWldOaGRYTmwgYkhscGJtYz0gSUVabFlnPT0gSUhOamNtVmxiZz09IElHeHBkbVZ6IElIQnlhVzl5IElFTnZibWR5WlhOeiBRWEk9IElHRndjSEp2WVdObyBJR1Z0WlhJPSBZWEpwWlhNPSBJRVJwY3c9PSBjMlZ5ZGc9PSBJRTVsIElHSjFhV3gwIFkybGxjdz09IElISmxjR1U9IElISjFiR1Z6IFptOXlZMlU9IElGQmhiQT09IElHWnBibUZ1WTJsaGJBPT0gSUdOdmJuTnBaR1Z5WldRPSBJRU5vWVhJPSBibU5sY3c9PSBJRWxUIElHSnliM1ZuYUhRPSBJR0pwIGFXVnljdz09IElGTnBiUT09IFQxQT0gSUhCeWIyUjFZM1J6IElIWnBjMmwwIElHUnZZM1Z0Wlc1MCBJR052Ym1SMVkzUT0gSUdOdmJYQnNaWFJsYkhrPSBhVzVwYm1jPSBJRU5oYkdsbSBhV0pzZVE9PSBJSGR5YVhSMFpXND0gSUZSVyBaVzFsYm5SeiBJR1J5WVhjPSBUMjVsIElIQjFZbXhwYzJobFpBPT0gSUhObFkzSmxkQT09IGNtRnBiZz09IGFHVjAgSUVaaFkyVmliMjlyIGIyNWtZWGs9IElGVncgSUhObGVIVmhiQT09IElIUm9iM1Z6IElGQmhkQT09IElHVnpjdz09IElITjBZVzVrWVhKayBJR0Z5YlE9PSBaMlZ6IFpXTjBhVzl1IElHWmxiR3c9IElHWnZjbVZwWjI0PSBZVzVwIElFWnlhV1JoZVE9PSBJSEpsWjNWc1lYST0gYVc1aGNuaz0gSUdsdVkzSmxZWE5sWkE9PSBJSFZ6ZFdGc2JIaz0gSUdSbGJXOXUgSUdSaGNtcz0gSUdGa1pHbDBhVzl1WVd3PSBjbTlzIElFOW0gSUhCeWIyUjFZM1JwYjI0PSBJU0U9IGRXNWtjbVZrIElHbHVkR1Z5Ym1GMGFXOXVZV3c9IGFXUmxiblJ6IElFWnlaV1U9IGNtOTFjQT09IElISmhZMlU9IElHMWhZMmc9IElHaDFaMlU9IFFXeHMgYkdWaGNnPT0gYjNabGJXSmxjZz09IElIUnZkMjQ9IElHRjBkR1Z1ZEdsdmJnPT0gSUU5bVpnPT0gZVc5dVpBPT0gSUZSb1pXND0gWm1sbGJHUT0gSUhSbGNuSnZjZz09IGNtRjYgSUVKdiBJRzFsWlhScGJtYz0gSUZCaGNtcz0gSUdGeWNtVnpkQT09IElHWmxZWEk9IElHRjMgSUZaaGJBPT0gYjNKcGJtYz0gSnl3PSBJR1Y0ZEhKbGJXVT0gWVhKeSBJSGR2Y210bGNuTT0gUVdaMFpYST0gSURNeCBibVYwIFlXMWxiblE9IElHUnBjbVZqZEd4NSBJSEJ2Y0hWc1lYUnBiMjQ9IGRXSmwgSUU5amRHOWlaWEk9IElFbE8gSUVwaGJuVmhjbms9IE5Uaz0gSUVSaGRtbGsgSUdOeWIzTnogWTJWdFltVnkgSUVacGNuTjAgSUcxbGMzTmhaMlU9IGFYSnBkQT09IElHNWhkR2x2Ymc9PSBJSEJ2Ykd3PSBhWE5wYjI1eiBJR0Z1YzNkbGNnPT0gYm5rPSBhWE52WkdVPSBJR05oY25KNSBJRkoxYzNOcFlRPT0gSUdobFlYST0gWlc1bmRHZz0gY205NSBJRzVoZEhWeVlXdz0gYVc1aGJHeDUgSUdSdlp3PT0gYldsMGRHVmsgSUhSeVlXUmwgSUhOMVluTjAgSUcxMWJIUnBjR3hsIElFRm1jbWxqIElHWmhibk09IElITnZjblE9IElHZHNiMkpoYkE9PSBhV05oZEdsdmJnPT0gSUZkbFpBPT0gWVhKaCBJR0ZqYUdsbCBJR3hoYm1kMVlXZGwgZG1WNSBJSFJoYkE9PSBJRzVsWTJWemMyRnllUT09IElHUmxkR0ZwYkhNPSBJSE5sYmc9PSBJRk4xYm1RPSBJRkpsWnc9PSBJRkpsWXc9PSBNRFk9IElITnBiQT09IGNtVnpjMmwyWlE9PSBJRzFsWkdsallXdz0gZFc1amFBPT0gYjNKdWFXRT0gSUhWdVpBPT0gWm05eWRBPT0gYjJOcmN3PT0gSUUxdmJtUmhlUT09IGRXVnpaR0Y1IFkzSmhablE9IE56Yz0gZFhKMCBJSFpsY2c9PSBJRWhwYkd3PSBJSEpsWTJWcGRtVT0gSUcxdmNtNXBibWM9IFpYTjBaWEp1IElHSmhibXM9IElITmhkQT09IGFYSjBhQT09IElFaHBaMmc9IElHUmxkbWxqWlE9PSBJRlJJUlE9PSBJRU5sYm5SbGNnPT0gSUhOaFptVT0gSUhCc1pRPT0gSUVOaGJtRmtZUT09IElITjVjM1JsYlhNPSBJR0Z6YzJsemRBPT0gSUhOMWNuWT0gSUdKaGRIUnNaUT09IElGTnZZdz09IGRtVnlkR2x6IFUyaGwgSUhCaGNHVnkgSUdkeWIzZDBhQT09IElHTmhjM1E9IFUyTT0gSUhCc1lXNXogYkd4bFpBPT0gSUhCaGNuUnogSUhkaGJHdz0gSUcxdmRtVnRaVzUwIElIQnlZV04wYVdObCBhVzFoZEdWc2VRPT0gSUdScGMzQnNZWGs9IElITnZiV1YwYVcxbGN3PT0gYjIxdyBJRkJoZFd3PSBJRmxsY3c9PSBhMmx1Wnc9PSBOVGc9IGIyeDUgSUhOdmJnPT0gSUdGMmIybGsgYjJ0bGN3PT0gSUVwbGR3PT0gSUhSdmQyRnlaSE09IFlYTmogSUM4diBJRXR2Y21VPSBJSFJoYkd0cGJtYz0gSUdOdmNuSmxZM1E9IElITndaVzUwIGFXTnJjdz09IGFXRmliR1U9IFpXRnlaV1E9IElIUmxjbTA9IElIZGhiblJ6IGIyMXBibWM9IElIVjAgSUdSdmRXST0gSUdadmNtTmxjdz09IElIQnNaV0Z6WlE9PSBOams9IElFNXZkbVZ0WW1WeSBZWFJtYjNKdCBiMjVrYjI0PSBJRzl1WlhNPSBJR2x0YldWa2FXRjBaV3g1IElGSjFjM05wWVc0PSBJRTFsZEE9PSBJR1JsWnc9PSBJSEJoY21WdWRITT0gUTBnPSBJRUZ0WlhKcFkyRnVjdz09IFlXeDUgSUUxdlpBPT0gSUhOb2IzZHUgSUdOdmJtUnBkR2x2Ym5NPSBJSE4wZFdabSBJSEpsWWc9PSBJRmx2ZFhJPSBJR2x1WTJ4MVpHVnogYm05M2JnPT0gSUZOaGJRPT0gSUdWNGNHVnlhV1Z1IGJXbHpjMmx2Ymc9PSBJRVYyWlc0PSBZWFZuYUhRPSBJR0Z1Ym05MWJtTmxaQT09IElGSmxjSFZpYkdsallXND0gSUdSbGRHVnliV2x1IElHUmxjMk55YVdKbFpBPT0gSUVOdmRXNTBlUT09IEtDaz0gSUdSdmIzST0gSUdOb1lXNW5aV1E9IElHNWxhV2RvIElFaGxjbVU9IElHTnNaV0Z1IElIQmhiZz09IElFUmxZMlZ0WW1WeSBJRVYxY205d1pXRnUgYVhKcGJtYz0gWVhCMFpYST0gSUdOc2RXST0gSUZSMVpYTmtZWGs9IElIQmhhV1E9IElFNWxkQT09IElHRjBkR0ZqYTNNPSBJR05vWVhKaFkzUmxjbk09IElHRnNiMjVsIElHUnBjbVZqZEc5eSBaRzl0IElETTEgSUd4dllXUT0gSUhKdmRYUT0gSUVOaGJHbG1iM0p1YVdFPSBJR1pwYm1Gc2JIaz0gSUhKaFl3PT0gSUdOdmJuUnkgSUdWNFlXTjBiSGs9IGNtVnphQT09IGNISnAgSUVsemJHRnQgSUc1aGRIVnlaUT09IElHTmhjbVZsY2c9PSBJR3hoZEdWemRBPT0gSUdOdmJuWmxjbk09IElGTnMgY0c5elpRPT0gWTJsbGJuUT0gSUVsdVl3PT0gYVhacGRIaz0gT0RnPSBJRUYwZEE9PSBJRTF2Y2c9PSBibVZ6WkdGNSBJSGRsYVdkb2RBPT0gYTJWdSBJRzV2ZEdVPSBJSFJsWVcxeiBJRnc9IFlXbHljdz09IElFZHlaV1Z1IElHaDFibVJ5WldRPSBiMjVsYm5RPSBJSE4wY21WdVp3PT0gSUdOdmJuTnBjM1E9IGFXTmhkR1ZrIElISmxaM1ZzIElHeHBZdz09IFlYTjBhV009IElIUmxiZz09IGRYSnpaR0Y1IFpXeHNhV2RsYm1ObCBiM1Z6YkhrPSBJRlZMIFFraz0gSUdOdmMzUnogSUdsdVpHVndaVzVrIElFRlEgSUc1dmNtMWhiQT09IElHaHZiUT09IElHOWlkbWx2ZFhNPSBJSE4zWlE9PSBJSE4wWVhJPSBJSEpsWVdSNSBZV05vWlhJPSBJR2x0Y0d4bGJXVnVkQT09IFoyVnpkQT09IElITnZibWM9IElFZGxkQT09IElFeGhZZz09IElHbHVkR1Z5WlhOMGFXNW4gZFhOcGJtYz0gSUdkcGRtbHVadz09IElGTjFibVJoZVE9PSBJR1YwWXc9PSBJRzFwWkdSc1pRPT0gSUhKbGJXVnRZbVZ5IGNtbG5hSFE9IGIzTnBkR2x2Ymc9PSBkWFJwYjI1eiBJRzFoZUE9PSBORFk9IElIbHZkWEp6Wld4bSBJR1JsYldGdVpBPT0gSUhSeVpXRjBiV1Z1ZEE9PSBJR1JoYm1kbGNnPT0gSUVOdmJuTT0gSUdkMWVRPT0gSUVKeWFYUnBjMmc9IElIQm9lWE5wWTJGcyBJSEpsYkdGMFpXUT0gSUhKbGJXRnBiZz09IElHTnZkV3hrYmc9PSBJSEpsWm1WeSBJR05wZEdsNiBZbTk0IFJVNVUgWW05aGNtUT0gSUdsdWJnPT0gU1VjPSBaWEp2IElGTjBjbVZsZEE9PSBiM053YVhSaGJBPT0gY21WdVkyZz0gWTJobGNuTT0gSUhOMGNtRT0gVDB3PSBZV2RsY2c9PSBJRUZPIElHVmhjMmxzZVE9PSBTVUU9IFpXNW5aUT09IGFXNTUgSUdOc2IzTT0gYjJOclpXUT0gSUhWelpYTT0gSUVOdmRXND0gU1cwPSBkV2xzWkE9PSBQejg9IGJXOXlaUT09IElHRnVadz09IElIZHlhWFJsIGIyeDFkR1U9IE5UYz0gSUd4bFlXUmxjZz09IElISmxZV1JwYm1jPSBQQzg9IElHRjFkRzl0IFpYTjBjdz09IE5ETT0gSUd4bFoybHpiQT09IElFZHZiR1E9IElHUmxjMmxuYm1WayBJRk5VIElFeGxadz09IFlYSmxjdz09IElHSmxZWFYwIElGUmxlQT09IElHRndjR1ZoY25NPSBJSE4wY25Wblp3PT0gSUZKdmJRPT0gSURBdyBJR05vYjJsalpRPT0gSUhCaGNuUnBZM1ZzWVhKc2VRPT0gSUVaeWIyMD0gYjNCbGNnPT0gSUV4dmJtUnZiZz09IFlXNXVaV1E9IElHRnNiRzkzY3c9PSBiMkpwYkdVPSBJR1JwWm1abGNtVnVZMlU9IDRvQ2kgSUZacFpYYz0gSUZkbFpHNWxjMlJoZVE9PSBJR0ZzZEdodmRXZG8gSUhKbGJHRjBhWFpsIElHRndjR3hwWTJGMGFXOXUgWVhSbGRtVnkgSUdGeVpXND0gSUcxNWMyVnNaZz09IElHbHRZV2M9IElHUnBjMlU9IElITnZZMmxsZEhrPSBJR1p5WlhGMSBJRVZ1WjJ4cGMyZz0gSUhCdmIzST0gSUVSaGVRPT0gSUhkeWFYUnBibWM9IElITmxkbVZ1IElITjBZWEowYVc1biBJR0oxWkE9PSBJSEJ5YVc1MCBJRlJ5WVc1eiBkV1poWTNRPSBJRk4wZFdRPSBibVYzIElHTnlhVzA9IElHZHBkbVZ6IElHTnZiMnc9IFlXVT0gYVdGdVkyVT0gSUVkbGJtVnlZV3c9IElIUm9hVzVyYVc1biBJSE5oZG1VPSBJR3hwYldsMFpXUT0gSUZCaGNuUjUgSUcxbFlXNXBibWM9IGNHVnUgYjNkbGNuTT0gSUVwaFkycz0gUlUwPSBJRzVwWTJVPSBjblZ3ZEE9PSBJR2RoY3c9PSBJR1ZwWjJoMCBJR1psWlhRPSBJR1ZtWm05eWRBPT0gSUdsbmJnPT0gYVdOcGRBPT0gUW13PSBZMjlwYmc9PSBJRzl3YVc0PSBJR0p5WVdsdSBWMmhwYkdVPSBhR1Z6ZEE9PSBJRlJvZFhKelpHRjUgSUhkdmRXeGtiZz09IFlYVm5hSFJsY2c9PSBJSFJ2ZFdObyBiR1Z0Wlc1MGN3PT0gSUhOMGRXUnBaWE09IElHTmxiblJsY2c9PSBZMjl1ZEE9PSBiM0puWlE9PSBJR052YlhCMWRHVnkgSUdsdWRtVnpkR2xuWVhScGIyND0gVUd3PSBiM0pyY3c9PSBJREl3TURnPSBJR2x1WTNKbFlYTnBibWM9IElITjBiM0psIElHTnZiVzFsYm5SeiBJR0poYkE9PSBiV1Z1IElHUnZiR3c9IElHeHBZbVZ5IElIZHBabVU9IElHeGhkM009IFlYUjFjbVJoZVE9PSBhWFJ1WlhOeiBJRzF2WkdWeWJnPT0gSUZOciBJR0ZrYldsdWFYTjBjbUYwYVc5dSBJRzl3Y0c5eWRIVnVhWFI1IElITmhiQT09IElIQnZkMlZ5Wm5WcyBUWGs9IElHTnNZV2x0Y3c9PSBJRVZoY25SbyBiM0prY3c9PSBJSFJwZEd4bCBJR1Z6WXc9PSBibUZ0WlE9PSBUbTkwIGIyMWxiZz09IElHSmxlVzl1WkE9PSBJR05oYldWeSBJSE5sYkd3PSBhWFIxZEdVPSBaV0Z5WTJnPSBJR0Z3Y0d3PSBhVzFsYm5RPSBOREk9IElFRnlkQT09IElIVnVaZz09IElIWnBiMnhsYm1ObCBkWEpuIElFVmhjM1E9IElHTnZiWEJoY21WayBJRzl3ZEdsdmJuTT0gSUhSb2NtOTFaMmh2ZFhRPSBJSFp6IGFXZHkgTGxzPSBZV05vWlhNPSBOemc9IElHWnBiR1Z6IFJrdz0gUlV3PSBZWEpwWVc0PSBJRXBoYldWeiBJRUZwY2c9PSBZVzVqYUE9PSBJR1JsZEdGcGJBPT0gSUhCcFpXTmwgVUZNPSBJRzVoYldWayBJR1ZrZFdOaGRHbHZiZz09IElHUnlhWFpsIElHbDBaVzF6IElITjBkV1JsYm5RPSBhV05sWkE9PSBPam89IGFXTnYgSUhSb2NtOTMgSUhOalpXNWwgSUdOdmJYQnNaWGc9IElESXdNRGs9IElIQnlaV009IElFSnlaUT09IE56az0gSUdOdmJtTmxjSFE9IElITjBZWFIxY3c9PSBZVzFwYm1jPSBJR1JwWldRPSBJR3R1YjNkc1pXUm5aUT09IElHSmxaMmx1Ym1sdVp3PT0gVDBRPSBjblZoY25rPSBJR05sY25SaGFXNXNlUT09IElHZDFlWE09IElITnNhV2RvZEE9PSBhVzV1IGIzVnVaSE09IElHWnBibVU9IElHWmhkQT09IGFXTmhkR2x2Ym5NPSBJSEJsY21oaGNITT0gSUVGdWRBPT0gSUdsdVkyOXRaUT09IElHaDBkSEJ6IElHMWhhbTl5YVhSNSBjRzl5ZEhNPSBjM1J2Ymc9PSBJR2R5WldGMFpYST0gSUdabFpXUT0gWlc1MGFXRnNiSGs9IElITmhabVYwZVE9PSBJSFZ1YVhGMVpRPT0gWVc1a2IyMD0gSUdkdmJtVT0gSUhOb2IzZGxaQT09IElHaHBjM1J2Y2c9PSBJR052ZFc1MFpYST0gYVhWeiBhV1JoIElHeGxZV1JwYm1jPSBhWEJsIElITmxibVE9IElFUnZibUZzWkE9PSBaWEoyWlE9PSBJR1JsWm1WdWMyVT0gYVc1bGMyVT0gSUhsbGN3PT0gSUVacGNtVT0gSUUxMWMyeHBiUT09IGNtRnggSUdOdmJuUnBiblZsWkE9PSBiM05vIElIQnliM1pwWkdWeiBJSEJ5YVhOdmJnPT0gSUZCeVpRPT0gSUdoaGNIQjUgSUdWamIyNXZiWGs9IElIUnlkWE4wIFlXZHogSUVkaGJXVT0gSUhkbFlYQnZibk09IGRXMWhiZz09IElFTnNaUT09IGFYUmhkR2x2Ymc9PSBJR0Z1WVd4NWMybHogSUZScGJXVnogSUhOamFXVnVZMlU9IExUND0gSUdacFozVnlaUT09IElHUnBjMkZ3Y0E9PSBaVzUwZVE9PSBJSE52Wm5SM1lYSmwgSUhWc2RBPT0gSUc5bVptbGpaWEp6IFRtVjMgU1hNPSBJSEpsYldGcGJuTT0gSUVsdVpHbGggSUhCemVXTm8gY21sbFpnPT0gSUdOaGRBPT0gWlhOaiBJRzlpYzJWeWRnPT0gSUhOMFlXZGwgSUVSaGNtcz0gSUdWdWRHVnkgWTJoaGJtZGwgSUhCaGMzTmxaQT09IElHUmxjM0JwZEdVPSBJRTkxZEE9PSBJRzF2ZG1sbCBjbk09IElIWnZhV05sIGJXbHVaUT09IElGQnNZWGs9IElIUnZkMkZ5WkE9PSBJRlJsY2c9PSBJSEpsWjJsdmJnPT0gSUhaaGJIVmxjdz09IGIzSjBaWEp6IElHMXZkVzUwIElHOW1abWxqWlhJPSBJRTkwYUdWeSBZbUZ1IElHaHZkWE09IGQyOXZaQT09IGNtOXZiUT09IFNWWT0gSUZOMWJnPT0gYzJWbCBJRTkyWlhJPSBjbTluIE9UQT0gSUd4aGVRPT0gSUZSMWNnPT0gWVhkdSBJSEJ5WlhOemRYSmwgSUZOMVlnPT0gSUdKdmIydHogWldSdmJRPT0gSUZOaGJtUT0gUVVFPSBZV2R2IElISmxZWE52Ym5NPSBabTl5WkE9PSBJR0ZqZEdsMmFYUjUgVlZRPSBUbTkzIElGTmxibUYwWlE9PSBZMlZzYkE9PSBibWxuYUhRPSBJR05oYkd4eiBhVzUwWlhJPSBJR3hsZEhSbGNnPT0gSUZKdllnPT0gSUVwbCBJR05vYjI5elpRPT0gSUV4aGR3PT0gUjJWMCBRbVU9IElISnZZZz09IElIUjVjR1Z6IElIQnNZWFJtYjNKdCBJSEYxWVhKMFpYST0gVWtFPSBJRlJwYldVPSBJRzFoZVdKbCBJRU55IE9UVT0gY0hKbCBJRzF2ZG1sdVp3PT0gSUd4cFpnPT0gSUdkdmJHUT0gSUhOdmJRPT0gSUhCaGRHbGxiblJ6IElIUnlkWFJvIElFdGwgZFhKaGJtTmwgWVc1MGJIaz0gYldGeSBJR05vWVhKblpRPT0gSUVkeVpXRjAgSUdObGJHVT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUhKdlkycz0gY205cFpBPT0gWVc1amVRPT0gSUdOeVpXUnBkQT09IFlYVmsgUW5rPSBJRVYyWlhKNSBJRzF2ZG1WayBhVzVuWlhJPSBjbWxpZFhScGIyND0gSUc1aGJXVnogSUhOMGNtRnBaMmgwIElFaGxZV3gwYUE9PSBJRmRsYkd3PSBJR1psWVhSMWNtVT0gSUhKMWJHVT0gSUhOamFHVT0gYVc1aGRHVmsgSUUxcFkyaGhaV3c9IFltVnladz09IE5ERT0gYVd4bFpBPT0gWW1GdVpBPT0gSUdOc2FXTnIgSUVGdVoyVnMgYjI1bGJuUnogd3EwPSBJRWx5WVhFPSBJRk5oZEhWeVpHRjUgSUdGM1lYSmwgY0dGeWRBPT0gSUhCaGRIUmxjbTQ9IFQxYz0gSUV4bGRBPT0gSUdkeVlXUT0gYVdkdVpXUT0gSUdGemMyOWphV0YwWldRPSBJSE4wZVd4bCBibTg9IGFXRjBhVzl1IFlXbDBhQT09IGFXeHBaWE09IElITjBiM0pwWlhNPSBkWEpoZEdsdmJnPT0gSUdsdVpHbDJhV1IxWVd4eiBJT0tBcGc9PSBiV2x6Y3c9PSBJRUZ6YzI5amFRPT0gYVhOb2FXNW4gWVdKNSBJSE4xYlcxbGNnPT0gSUVKbGJnPT0gSURNeSBJR0Z5WTJnPSBkWFI1IElGUmxlR0Z6IGFHOXMgSUdaMWJHeDUgSUcxcGJHdz0gSUdadmJHeHZkMlZrIElFSnBiR3c9IElFbHVaR2xoYmc9PSBJRk5sWTNKbGRBPT0gSUVKbGJBPT0gSUVabFluSjFZWEo1IElHcHZZbk09IElITmxaVzFsWkE9PSBJRWR2ZG1WeWJnPT0gYVhCd1pXUT0gSUhKbFlXeHBkSGs9IElHeHBibVZ6IElIQmhjbXM9IElHMWxZWE4xY21VPSBJRTkxY2c9PSBTVTA9IElHSnliM1JvWlhJPSBJR2R5YjNkcGJtYz0gSUdKaGJnPT0gSUdWemRHbHQgSUdOeWVRPT0gSUZOamFHOXZiQT09IElHMWxZMmhoYmc9PSBJRTlHIElGZHBibVJ2ZDNNPSBJSEpoZEdWeiBJRTlvIElIQnZjMmwwYVhabCBJR04xYkhSMWNtVT0gYVhOMGFXTnogYVdOaCBJR2hoY2c9PSBlV0U9IGFYUmxiSGs9IGFYQncgSUcxaGNBPT0gWlc1amFXVnogSUZkcGJHeHBZVzA9IFNVaz0gWVd0bGNuTT0gTlRZPSBJRTFoY25RPSBJRkpsYlE9PSBJR0ZzZEdWeWJnPT0gYVhSMVpHVT0gSUdOdllXTm8gY205M1pBPT0gUkc5dSBJR3RwWkhNPSBJR3B2ZFhKdVlXdz0gSUdOdmNuQnZjZz09IElHWmhiSE5sIElIZGxZZz09IElITnNaV1Z3IElHTnZiblJoYVc0PSBJSE4wYnc9PSBJR0psWkE9PSBhWFpsY25ObCBJRkpwWTJnPSBJRU5vYVc1bGMyVT0gSUhCMWJnPT0gSUcxbFlXNTAgYTI1dmQyND0gSUc1dmRHbGpaUT09IElHWmhkbTl5YVhSbCBZWFpsYmc9PSBJR052Ym1ScGRHbHZiZz09IElIQjFjbkJ2YzJVPSBLU2s9IElHOXlaMkZ1YVhwaGRHbHZiZz09IElHTm9ZV3hzWlc1biBJRzFoYm5WbVlXTjAgSUhOMWMzQT0gSUVGaiBJR055YVhScFl3PT0gZFc1bGN3PT0gZFdOc1pXRnkgSUcxbGNnPT0gZG1WdWRHbHZiZz09IElEZ3cgSUcxcGMzUT0gSUZWeiBJRlJ2Y2c9PSBhSFIwY0E9PSBiMnhtIElHeGhjbWRsY2c9PSBJR0ZrZG1GdWRBPT0gSUhKbGMyVmhjZz09IElHRmpkR2x2Ym5NPSBiV3c9IElHdGxjSFE9IElHRnBiUT09IExDYz0gWTI5cyBJR0psYm1WbWFYUnogYVdaNWFXNW4gSUdGamRIVmhiQT09IElFbHVkR1Z5Ym1GMGFXOXVZV3c9IElIWmxhR2xqYkdVPSBJR05vYVdWbSBJR1ZtWm05eWRITT0gSUV4bFlXZDFaUT09IElFMXZjM1E9IElIZGhhWFE9IElHRmtkV3gwIElHOTJaWEpoYkd3PSBJSE53WldWamFBPT0gSUdocFoyaHNlUT09IElHWmxiV0ZzWlE9PSBJR1Z5Y205eSBJR1ZtWm1WamRHbDJaUT09IE5UUT0gSUdWdVkyOTFjZz09IGQyVnNiQT09IElHWmhhV3hsWkE9PSBJR052Ym5ObGNuWT0gSUhCeWIyZHlZVzF6IElIUnliM1U9IElHRm9aV0ZrIE5UQXcgZG1WeWRHbHpaVzFsYm5RPSBTVkE9IElFWnZkVzVrIGNHbHkgSUNVPSBJR055YVcxbCBZVzVrWlhJPSBJR3h2WTJGMGFXOXUgSUVseVlXND0gSUdKbGFHRjJhVzl5IFlYcHBibWM9IElISmhjbVU9IElHVnRZZz09IElHTmhkWE5sWkE9PSBJSE5vYVhBPSBJR0ZqZEdsMlpRPT0gSUdOdmJuUnlhV0oxZEE9PSBJR2R5WldWdSBJR0ZqY1hVPSBJSEpsWm14bFkzUT0gZG1WdWRXVT0gSUdacGNtMD0gSUdKcGNuUm8gWFM0PSBJR05zWldGeWJIaz0gSUdWdGIzUT0gSUdGblpXNWplUT09IGNtbGhaMlU9IElHMWxiVzl5ZVE9PSBPVGc9IFUwRT0gSUZObFpRPT0gWVdOcGJtYz0gUTBNPSBJR0pwWjJkbGMzUT0gSUhKaGNBPT0gSUdKaGMybGogSUdKaGJtUT0gWldGMCBJSE4xYzNCbFkzUT0gSUUxaFl3PT0gSURrdyBiV0Z5YXc9PSBhWE4wWVc0PSBJSE53Y21WaFpBPT0gWVcxeiBhMms9IFlYTjUgY21GMiBJRkp2WW1WeSBJR1JsYlc5dWMzUnkgY21GMFpXUT0gSUdGaWMyOXNkWFJsIElIQnNZV05sY3c9PSBJR2x0Y0d3PSBhV0p5WVhKNSBJR05oY21SeiBJR1JsYzNSeWIzaz0gSUhacGNuUT0gZG1WeVpRPT0gSUdGd2NHVmhjbVZrIGVXRnUgY0c5cGJuUT0gSUdKbFp3PT0gSUhSbGJYQmxjZz09IGMzQmwgWVc1MFpXUT0gWldGeWN3PT0gSUVScGNtVmpkQT09IElHeGxibWQwYUE9PSBJR0pzYjJjPSBZVzFpIElHbHVkR1ZuIElISmxjMjkxY21ObGN3PT0gWVdOaiBhV1oxYkE9PSBJSE53YjNRPSBJR1p2Y21ObFpBPT0gSUhSb2IzVnpZVzVrY3c9PSBJRTFwYm1semRHVnkgSUhGMVlXdz0gSUVaeVpXNWphQT09IFlYUnBZMkZzYkhrPSBJR2RsYm1WeVlXeHNlUT09IElHUnlhVzVyIElIUm9kWE09IFNVdz0gYjJSbGN3PT0gSUdGd2NISnZjSEpwIElGSmxZV1E9IElIZG9iMjA9IElHVjVaUT09IElHTnZiR3hsWjJVPSBJRFExIGFYSmxZM1JwYjI0PSBJR1Z1YzNWeVpRPT0gSUdGd2NHRnlaVzUwIGFXUmxjbk09IElISmxiR2xuYVc5MWN3PT0gSUcxcGJtOXkgYjJ4cFl3PT0gSUhSeWJ3PT0gSUZkb2VRPT0gY21saWRYUmwgYldWMCBJSEJ5YVcxaGNuaz0gSUdSbGRtVnNiM0JsWkE9PSBJSEJsWVdObCBJSE5yYVc0PSBjM1JsIFlYWmggSUdKc2RXVT0gSUdaaGJXbHNhV1Z6IElHbHkgSUdGd2NHeDUgSUdsdVptOXliUT09IElGTnRhWFJvIFExUT0gYVdrPSBJR3hwYldsMCBJSEpsYzJsemRBPT0gTGk0dUxpNHVMaTR1TGk0dUxpNHVMZz09IGRXMXUgSUdOdmJtWnNhV009IElIUjNaUT09IGRXUmsgSUZSdmJRPT0gSUd4cGRHVnkgY1hWbCBZbTl1IElHaGhhWEk9IElHVjJaVzUwZFdGc2JIaz0gSUhCMWN3PT0gSUdobGJIQmxaQT09IElHRm5adz09IGIzSnVaWGs9IElFRndjR3hsIElHWnBkQT09IElGTjFjZz09IElIQnlaVzA9IElITmhiR1Z6IElITmxZMjl1WkhNPSBJSE4wY21WdVozUm8gSUdabFpXeHBibWM9IHY3MD0gSUhSdmRYST0gSUd0dWIzZHogYjI5dCBJR1Y0WlhKaiBJSE52YldWMyA3Nys5IFBqND0gSUhOd2IydGxjdz09IElHbGtaV0Z6IElISmxaMmx6ZEE9PSBjMjltZEE9PSBJRVJsYkE9PSBJRkJEIElIQnliM0J2Y3c9PSBJR3hoZFc1amFBPT0gSUdKdmRIUnZiUT09IFZFZz0gSUZCc1pXRnpaUT09IGRtVnpkQT09IGFYUjYgSUVsdWRHVnkgSUhOamNtbHdkQT09IElISmhkQT09IFlYSnVhVzVuIElHbHMgSUVwbGNnPT0gSUVGeVpRPT0gSUhkb1lYUmxkbVZ5IGIydGxiZz09IFkybGxibU5sIElHMXZaR1U9IElHRm5jbVZsIElITnZkWEpqWlhNPSBJR2x1YVhScFlXdz0gSUhKbGMzUnlhV04wIElIZHZibVJsY2c9PSBkWE5wYjI0PSBJeU1qSXc9PSBJRk5wYkE9PSBkbWxzYkdVPSBJR0oxY200PSBkSGM9IFlYTnBiMjQ9IElNS2ogSUc1dmNnPT0gZFdsdVp3PT0gSUhKbFlXTm9aV1E9IElITjFiZz09IElHTmhkR1ZuIGFXZHlZWFJwYjI0PSBJR052YjJzPSBJSEJ5YjIxdmRBPT0gSUcxaGJHVT0gSUdOc2FXMWhkR1U9IElHWnBlQT09IElHRnNiR1ZuWldRPSBWVkk9IFlXeHNaV1E9IElHbHRZV2RsY3c9PSBRMjl1ZEE9PSBiM1JoIElITmphRzl2YkhNPSBhVzl6IElHUnliM0E9IElITjBjbVZoYlE9PSBJRTF2IElIQnlaWFpwYjNWemJIaz0gWVd4cGJtYz0gSUhCbGRBPT0gSUdSdmRXSnNaUT09IElDaEEgWVc1dVpXdz0gSUdSbFptRjFiSFE9IGRHbGxjdz09IElISmhibXM9IElFUmxZdz09IElFTnZkVzVqYVd3PSBJSGRsWVhCdmJnPT0gSUhOMGIyTnIgSUdGdVlXeDUgSUZOMGNnPT0gSUhCcFkzUjFjbVU9IElGQnZiR2xqWlE9PSBabVZ5Wlc1alpRPT0gSUdObGJuUjFjbms9IElHTnBkR2w2Wlc1eiBJRzl1ZEc4PSBJR1Y0Y0dGdVpBPT0gSUdobGNtOD0gSUZOdmJBPT0gSUhkcGJHUT0gSUhWd1pHRjBaUT09IElHTjFjM1J2YldWeWN3PT0gY205dWRBPT0gWkdWbSBJR3hwYXc9PSBJR055YVcxcGJtRnMgSUVOb2NtbHpkR2xoYmc9PSBVMUE9IE56WT0gSUd4bFlYWnBibWM9IElHOTBhR1Z5ZDJselpRPT0gSUVScGMzUT0gSUdKaGMybHogTlRJPSBOVE09IGFXTnBjQT09IElFSmxjZz09IElISmxZMjl0YldWdVpBPT0gSUdac2IyOXkgSUdOeWIzZGsgYjJ4bGN3PT0gSURjdyBJR05sYm5SeVlXdz0gSUVWMiBJR1J5WldGdCBJR1J2ZDI1c2IyRmsgSUdOdmJtWnBjZz09IElGUm9iMjA9IElIZHBibVJ2ZHc9PSBJR2hoY0hCbGJuTT0gSUhWdWFYUT0gSUhSbGJtUT0gSUhOd2JBPT0gSUdKbFkyOXRaWE09IElHWnBaMmgwYVc1biBJSEJ5WldScFkzUT0gSUZCeVpYTnogSUZCdmQyVnkgSUdobFlYWjUgWVd0bFpBPT0gSUdaaGJnPT0gYjNKMFpYST0gWVhSbFozaz0gUWtFPSBhWHBsY3c9PSBJSE53Wlc1ayBTR1Z5WlE9PSBJREl3TURjPSBJR0ZrYjNBPSBJRWhoYlE9PSBJR1p2YjNSaVlXeHMgSUZCdmNuUT0gYjJSaGVRPT0gTlRFPSBZVzF3YVc5dWN3PT0gSUhSeVlXNXpabVZ5IGFIUT0gSURNNCBkR1Z5YlE9PSBZV05wZEhrPSBJR0oxY2c9PSBYU3c9IGRHVnlibUZzIGNtbG4gWW5WMCBJSFJvWlhKbFptOXlaUT09IElFSmxZMkYxYzJVPSBjbVZ6Y0E9PSBjbVY1IElHMXBjM05wYjI0PSBVMjl0WlE9PSBJRzV2ZEdWayBJR0Z6YzNWdCBJR1JwYzJWaGMyVT0gSUdWa2FYUT0gSUhCeWIyZHlaWE56IGNtUT0gSUVKeWIzZHUgYjJOaGJBPT0gSUdGa1pHbHVadz09IElISmhhWE5sWkE9PSBJRUZ1ZVE9PSBJSFJwWTJzPSBJSE5sWldsdVp3PT0gSUZCbGIzQnNaUT09IElHRm5jbVZsYldWdWRBPT0gSUhObGNuWmxjZz09IElIZGhkQT09IElHUmxZbUYwWlE9PSBJSE4xY0hCdmMyVmsgYVd4cGJtYz0gSUd4aGNtZGxjM1E9IElITjFZMk5sYzNObWRXdz0gSUZCeWFRPT0gSUVSbGJXOWpjbUYwYVdNPSBJR3AxYlhBPSBJRk41Y21saCBJRzkzYm1WeWN3PT0gSUc5bVptVnljdz09IElITm9iMjkwYVc1biBJR1ZtWm1saiBjMlY1IElHaGhkbVZ1IGRtVnljMlU9IGRHVnlaV1E9IElFeHBaMmgwIGFXMWhiQT09IElFSnBadz09IElHUmxabVZ1WkE9PSBJR0psWVhRPSBJSEpsWTI5eVpITT0gSlNrPSBJSE5qWlc0PSBJR1Z0Y0d4dmVXVmxjdz09IElHUmxkbWxqWlhNPSBhR1Z0IElHTnZiVzFsY2c9PSBJRTFsZUE9PSBJR0psYm1WbWFYUT0gSUZCeWIyWT0gSUdsc2JHVm4gSUhOMWNtWmhZMlU9IElFRnNjMjg9IElHaGhjbTA9IGFXNW5iSGs9IGQybGtaUT09IElFRnNaWGc9IElITm9kWFE9IElFTjFjZz09IElHeHZjMlU9IGNHMD0gSUdOb1lXeHNaVzVuWlE9PSBjMlZ0WWc9PSBJSE4wWVhScGIyND0gSUdsdWRHVnNiR2xuWlc1alpRPT0gSUdGalkzVnkgSUVac2IzST0gSUhKbGNYVnBjbVZ6IElFMWhiQT09IFluVnQgSUdodmMzQnBkR0ZzIElITndhWEpwZEE9PSBJRzltWm1WeVpXUT0gSUhCeWIyUjFZMlU9IElFTnZiVzExYmc9PSBJR055WldGMGFXNW4gSUdOeWFYTT0gYzNCbFkzUT0gSUdWdVpHVmsgSUdSaGFXeDUgSUhadmRHVnljdz09IGJHRnVaSE09IGFXRnogYVdnPSBiMjVoIElITnRZWEowIElFOW1abWxqWlE9PSBJRXh2Y21RPSBjbWxoYkE9PSBJRWx1ZEdWeWJtVjAgSUdOcGNtTjFiUT09IElHVjRkSEpsYldWc2VRPT0gSnk0PSBJRzl3YVc1cGIyND0gSUUxcGJBPT0gSUdkaGFXND0gUWxNPSBJRVpwYmc9PSBlWEE9IElIVnpaV1oxYkE9PSBJR0oxWkdkbGRBPT0gSUdOdmJXWnZjblE9IGFYTm0gSUdKaFkydG5jbTkxYm1RPSBaV3hwYm1VPSBJR1Z3YVhOdlpHVT0gSUdWdVpXMTUgSUhSeWFXRnMgSUdWemRHRmliR2x6YUE9PSBaR0YwWlE9PSBJRU5oY0E9PSBJR052Ym5ScGJuVmxjdz09IElITm9iM2RwYm1jPSBJRlZ1YVc5dSBkMmwwYUE9PSBJSEJ2YzNSbFpBPT0gSUZONWMzUmxiUT09IElHVmhkQT09IGNtbGhiZz09IElISnBjMlU9IElFZGxjbTFoYm5rPSBhV3h6IElITnBaMjVsWkE9PSBJSFpwYkd3PSBJR2R5WVc1ayBiVzl5IElFVnVaMnhoYm1RPSBJSEJ5YjJwbFkzUnogZFcxaVpYST0gSUdOdmJtWmxjbVZ1WTJVPSBlbUU9IElISmxjM0J2Ym5OcFlteGwgSUVGeVlXST0gSUd4bFlYSnVaV1E9IDRvQ1U0b0NVIGFYQndhVzVuIElFZGxiM0puWlE9PSBUME09IElISmxkSFZ5Ym1WayBJRUYxYzNSeVlXeHBZUT09IElHSnlhV1ZtIFVYVT0gSUdKeVlXNWsgYVd4c2FXNW4gWVdKc1pXUT0gSUdocFoyaGxjM1E9IElIUnlZV2x1IElFTnZiVzFwYzNOcGIyND0gZDJocGJHVT0gSUc1dmJRPT0gWTJWd2RHbHZiZz09IElHMTFkQT09IElFSnNkV1U9IElHbHVZMmxrWlc1MCBkbUZ1ZEE9PSBPRFk9IElFbEUgSUc1MVkyeGxZWEk9IE56UT0gSUV4cGEyVT0gSUZKRiBJRTFwWTNKdiBiR2s9IGJXRnBiQT09IElHTm9ZWEpuWlhNPSBPRGs9IElHRmthblZ6ZEE9PSBZV1J2IElHVmhjblJvIFRrRT0gSUhCeWFXTmxjdz09IFVFRT0gSUdSeVlXWjAgSUhKMWJuTT0gSUdOaGJtUnBaR0YwWlE9PSBaVzV6WlhNPSBJRzFoYm1GblpXMWxiblE9IElGQm9hV3c9IElFMXBjM009IElIUmxZV05vIFozSmhiUT09IElIVnVaR1Z5YzNSaGJtUnBibWM9IFlXbDAgYVdOaFoyOD0gUVdSayBJRVZ3IGMyVmpkWFE9IElITmxjR0Z5WVhSbCBJR2x1YzNSaGJtTmwgSUdWMGFBPT0gSUhWdWJHVnpjdz09IEtpb3FLaW9xS2lvPSBJRVp2Y21VPSBhVzVoZEdVPSBJRzl3WlhKaGRHbHZibk09IFUzQT0gSUdaaGFYUm8gWjJGeSBJRU5vZFhKamFBPT0gY205dWFXTT0gSUdOdmJtWnBadz09IGIzTjFjbVU9IElHRmpkR2wyYVhScFpYTT0gSUhSeVlXUnBkR2x2Ym1GcyBJRE0yIElHUnBjbVZqZEdsdmJnPT0gSUcxaFkyaHBibVU9IElITjFjbkp2ZFc1ayBJSEIxYzJnPSBkVzVqZEdsdmJnPT0gSUVWViBJR1ZoYzJsbGNnPT0gSUdGeVozVnRaVzUwIFIwST0gSUcxcFkzSnYgSUhOd1pXNWthVzVuIGFYcGhkR2x2Ym5NPSBJSFJvWlc5eWVRPT0gWVdSdmR3PT0gSUdOaGJHeHBibWM9IElFeGhjM1E9IElHUmxjZz09IElHbHVabXgxWlc1alpRPT0gSUdOdmJXMXBkQT09IElIQm9iM1J2IElIVnVZdz09IGFYTjBjbms9IFoyND0gWVhOMFpRPT0gWVdOcmN3PT0gSUdScGMzQT0gWVdSNSBaRzg9IElFZHZiMlE9IElHQT0gSUhkcGMyZz0gSUhKbGRtVmhiR1ZrIHdxRENvQT09IGJHbG4gSUdWdVptOXlZMlU9IElFTnZiVzFwZEhSbFpRPT0gSUdOb1pXMD0gSUcxcGJHVnogSUdsdWRHVnlaWE4wWldRPSBJSE52YkhWMGFXOXUgYVdONSBhVzVqZEE9PSBJQzArIElFUmxkQT09IElISmxiVzkyWldRPSBJR052YlhCaGNnPT0gWldGbyBJSEJzWVc1MCBJRk5wYm1ObCBJR0ZqYUdsbGRtVT0gSUdGa2RtRnVkR0ZuWlE9PSBJSE5zYVdkb2RHeDUgWW1sdVp3PT0gSUhCc1lXTmxaQT09IGRXNWtaWEk9IE1qQXhOUT09IElFMWhaQT09IElIUnBiUT09IGIzTmxjdz09IElHTnlkUT09IElGSnZZMnM9IElHMXZjM1JzZVE9PSBJRzVsWjJGMGFYWmwgSUhObGRIUnBibWM9IElIQnliMlIxWTJWayBJRzExY2c9PSBJR052Ym01bFkzUnBiMjQ9IElFMWxjZz09IElHUnlhWFpsY2c9PSBJR1Y0WldOMWRHbDJaUT09IElHRnpjMkYxYkhRPSBJR0p2Y200PSBJRlpsY2c9PSBkR0ZwYm1WayBJSE4wY25WamRIVnlaUT09IElISmxaSFZqWlE9PSBJR1JsWTJGa1pYTT0gSUdSbFpBPT0gZFd0bCBJRTFoYm5rPSBhV1JrWlc0PSBJR3hsWVdkMVpRPT0gVTJVPSBJR3B2YVc0PSBJR1JwYzJOdiBJR1JwWlE9PSBZMnR6IFlXTjBhVzl1Y3c9PSBJR0Z6YzJWemN3PT0gWVdkdSBJR2R2WVd4eiBiM1Z5Y3c9PSBTVkk9IElITmxibWx2Y2c9PSBhV3hzWlhJPSBiVzlrIGFYQnRaVzUwIGIyTnZiQT09IGRYaz0gSUZGMVpRPT0gSUhCaGNuUnBaWE09IGFYSm5hVzQ9IElHeGxZWEp1YVc1biBhWFJoWW14bCBJSE4wY21WbGRBPT0gSUdOaGJXVnlZUT09IFFYQncgSUhOcmFXeHNjdz09IFluSmwgWTJsdmRYTT0gSUdObGJHVmljZz09IElFWnlZVzVqIElHVjRhWE4wYVc1biBJSGRwYkd4cGJtYz0gYkc5eSBJR2xrIElGTndZV05sIElHTnlhWFJwWTJGcyBJRXhoIGIzSjBkVzVoZEdWc2VRPT0gSUhObGNuWmwgSUdOdmJHUT0gSUhOd1pXTnBaWE09IFZGTT0gSUdGdWFXMWhiSE09IElFSmhlUT09IElHOXNaR1Z5IElGVnVaR1Z5IFpYTjBhV009IElGUnlaUT09IElIUmxZV05vWlhJPSBJSEJ5WldabGNnPT0gZG1seiBJSFJvY21WaFpBPT0gSUUxaGRIUT0gSUcxaGJtRm5aWEk9IDQ0TzcgSUhCeWIyWmxjM05wYjI1aGJBPT0gSUZadmJBPT0gSUc1dmRHVnogVkdobGMyVT0gZFd4aCBJR1p5WlhObyBaVzUwWldRPSBkWHA2IFpXUjUgWTJ4MWMybHZiZz09IElGSmxiQT09IElHUnZkV0owIFJVOD0gSUc5d1pXNWxaQT09IElFSnBkQT09IFFXUjJaWEowYVhObGJXVnVkQT09IElHZDFaWE56IElGVk8gSUhObGNYVT0gSUdWNGNHeGhhVzQ9IGIzUjBaVzQ9IElHRjBkSEpoWTNRPSBZV3R6IElITjBjbWx1Wnc9PSBJR052Ym5SbGVIUT0gYjNOemFXSnNaUT09IElGSmxjSFZpYkdsallXNXogSUhOdmJHbGsgSUdOcGRHbGxjdz09IElHRnphMmx1Wnc9PSBJSEpoYm1SdmJRPT0gZFhCeiBkWEpwWlhNPSBZWEpoYm5RPSBaR1JsYmc9PSBaMnc9IElFWnNiM0pwWkdFPSBJR1JsY0dWdVpBPT0gSUZOamIzUjAgSURNeiBJR2xVIGFXTnZiZz09IElHMWxiblJwYjI1bFpBPT0gSURJd01EQT0gSUdOc1lXbHRaV1E9IElHUmxabWx1YVhSbGJIaz0gZFd4bSBJR052Y21VPSBJRzl3Wlc1cGJtYz0gSUVOdmJuTjAgZDJocFkyZz0gSUZSeVlRPT0gUVVjPSBOekk9IElHSmxiR2xsZG1WayBZV1JoIElEUTQgSUZObFkzVnlhWFI1IGVYSnBaMmgwIElGQmxkQT09IElFeHZkUT09IElHaHZiR1JwYm1jPSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSUdsalpRPT0gSUdKeWIzYz0gSUdGMWRHaHZjbWwwYVdWeiBhRzl6ZEE9PSBkMjl5WkE9PSBJSE5qYjNKbCBJRVJwZGc9PSBJR05sYkd4eiBJSFJ5WVc1emJBPT0gSUc1bGFXZG9ZbTl5IElISmxiVzkyWlE9PSBkV04wIElHUnBjM1J5YVdOMCBJRUZqWTI5eVpHbHVadz09IElIZHZjbk5sIElHTnZibU5sY201eiBJSEJ5WlhOcFpHVnVkR2xoYkE9PSBJSEJ2YkdsamFXVnogSUVoaGJHdz0gTnpNPSBJR2gxY3c9PSBRVms9IElESXdNRFk9IElFcDFaQT09IElHbHVaR1Z3Wlc1a1pXNTAgSUVwMWMzUnBZMlU9IGFXeHBZWEk9IGNISnBiblE9IGFXZG9kR1Z5IElIQnliM1JsWTNScGIyND0gZW1WdSBJSE4xWkdSbGJnPT0gYUc5MWMyVT0gSUVwbGN3PT0gVUZJPSBJRWx1Wmc9PSBJR0oxYkE9PSBJRjg9IElGTmxjblpwWTJVPSBJRkJTIElITjBjbUYwWldkNSBabVpsWTNRPSBJR2RwY214eiBJRzFwYzNOcGJtYz0gYjNsaGJBPT0gSUZSbFlXMD0gZFd4aGRHVmsgSUdSaGRBPT0gSUhCdmJHbDBhV056IFlXSnZjZz09IFFXTmpiM0prYVc1biBJSE53Wld4cyBJR2R5WVhCbyBiM0owYUdWeWJnPT0gVkVNPSBRV0k9IElHeGhZbTl5IGFYTm9aWEk9IElHdHBZMnM9IElHbFVkVzVsY3c9PSBJSE4wWlhCeiBjRzl6WlhNPSBJSE50WVd4c1pYST0gUlc0PSBZbVZ5ZEE9PSBJSEp2Ykd3PSBJSEpsYzJWaGNtTm9aWEp6IElHTnNiM05sWkE9PSBJSFJ5WVc1emNHOXlkQT09IElHeGhkM2s9IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBJRU5vYVdOaFoyOD0gSUdGemNHVmpkQT09IElHNXZibVU9IElHMWhjbkpwWVdkbCBPVFk9IElHVnNaVzFsYm5SeiBJRVp5WlE9PSBJRk5oYkE9PSBJR1J5WVcwPSBSa009IGRHOXcgWlhGMSBJR2hsWVhKcGJtYz0gSUhOMWNIQnZjblJsWkE9PSBJSFJsYzNScGJtYz0gWTI5b2Iydz0gSUcxaGMzTnBkbVU9IElITjBhV05yIElHZDFZWEprIGFYTmpidz09IGNHaHZibVU9IFJuSnZiUT09IFNHOTNaWFpsY2c9PSBJR0p2Y21SbGNnPT0gSUdOdmNIaz0gYjJkeVlYQm9lUT09IGJHbHpkQT09IE56RT0gSUc5M2JtVnkgWTJ4aGMzTT0gY25WcGRBPT0gY21GMFpRPT0gSUU5dVkyVT0gSUdScFoybDBZV3c9IElIUmhjMnM9IFJWSlQgSUdsdVkzSmxaQT09IGRHVnogS3lzPSBJRVp5WVc1alpRPT0gSUdKeVpXRjAgYjNkcyBJR2x6YzNWbFpBPT0gSUZkbGMzUmxjbTQ9IElHUmxkR1ZqZEE9PSBJSEJoY25SdVpYSnogSUhOb1lYSmxaQT09IElFTmhiR3c9IElHTmhibU5sY2c9PSBZV05vWlE9PSBjbWxpWlE9PSBJR1Y0Y0d4aGFXNWxaQT09IElHaGxZWFE9IGV5ST0gSUdsdWRtVnpkRzFsYm5RPSBJRUp2YjJzPSBJSGR2YjJRPSBJSFJ2YjJ4eiBJRUZzZEdodmRXZG8gSUdKbGJHbGxaZz09IElHTnlhWE5wY3c9PSBJR2RsIElFMVEgSUc5d1pYSmhkR2x2Ymc9PSBkSGx3WlE9PSBmbjQ9IFoyRT0gSUdOdmJuUmhhVzV6IFlXNTBZUT09IElHVjRjSEpsYzNNPSBJRWR5YjNWdyBJRXB2ZFhKdVlXdz0gYTJFPSBJR0Z0WWc9PSBJRlZUUVE9PSBJR1pwYm1ScGJtYz0gSUdaMWJtUnBibWM9IGFHOTMgSUdWemRHRmliR2x6YUdWayBhV1JsYjNNPSBJR1JsWjNKbFpRPT0gSUdSaGJtZGxjbTkxY3c9PSBZVzVuYVc1biBJR1p5WldWa2IyMD0gY0hCdmNuUT0gYjNWMGFHVnliZz09IElHTm9kWEpqYUE9PSBJR05oZEdObyBJRlIzYnc9PSBJSEJ5WlhObGJtTmwgSUVkMVlYSmsgVlhBPSBJR0YxZEdodmNtbDBlUT09IElGQnliMnBsWTNRPSBJR0oxZEhSdmJnPT0gSUdOdmJuTmxjWFU9IElIWmhiR2xrIElIZGxZV3M9IElITjBZWEowY3c9PSBJSEpsWm1WeVpXNWpaUT09IElFMWxiUT09IElpaz0gVlU0PSBiM0poWjJVPSBJRTl3Wlc0PSBJR052Ykd4bFkzUnBiMjQ9IGVXMD0gWjJWdVkzaz0gSUdKbFlYVjBhV1oxYkE9PSBjbTl6IElIUmxiR3h6IElIZGhhWFJwYm1jPSBibVZzIElIQnliM1pwWkdsdVp3PT0gSUVSbGJXOWpjbUYwY3c9PSBJR1JoZFdkb2RHVnkgSUcxaGMzUmxjZz09IElIQjFjbkJ2YzJWeiBJRXBoY0dGdVpYTmwgSUdWeGRXRnMgSUhSMWNtNXogSUdSdlkzVnRaVzUwY3c9PSBJSGRoZEdOb2FXNW4gVW1WeiBJSEpoYmc9PSBNakF4TkE9PSBJSEpsYW1WamRBPT0gSUV0dmNtVmggSUhacFkzUnBiWE09IFRHVjJaV3c9IFpYSmxibU5sY3c9PSBJSGRwZEc1bGMzTT0gSURNMCBJSEpsWm05eWJRPT0gWTI5dGFXNW4gSUc5alkzVncgSUdOaGRXZG9kQT09IElIUnlZV1ptYVdNPSBZV1JwYm1jPSBJRzF2WkdWc2N3PT0gWVhKcGJ3PT0gSUhObGNuWmxaQT09IElHSmhkSFJsY2c9PSBkV0YwWlE9PSBJRk5sWTNKbGRHRnllUT09IElHRm5jbVZsWkE9PSBJSFJ5ZFd4NSBlVzVoYlE9PSBJRkpsZEE9PSBJSFZ1YVhSeiBJRkpsYzJWaGNtTm8gYUdGdVpBPT0gWVhwcGJtVT0gSUUxcGEyVT0gSUhaaGNtbGxkSGs9IGIzUmhiQT09IElHRnRZWHBwYm1jPSBJR052Ym1acGNtMWxaQT09IElHVnVkR2x5Wld4NSBJSEIxY21Ob1lYTmwgSUdWc1pXMWxiblE9IElHTmhjMmc9IElHUmxkR1Z5YldsdVpRPT0gUkdVPSBJR05oY25NPSBJRmRoYkd3PSA0cFk9IElIWnBaWGR6IElHUnlkV2R6IElHUmxjR0Z5ZEcxbGJuUT0gSUZOMFpYQT0gZFdsMCBJRE01IFlYTjFjbVU9IElFTnNZWE56IElHTnZkbVZ5WldRPSBJRUpoYm1zPSBJRzFsY21VPSBkV0Z1WVE9PSBJRzExYkhScCBJRzFwZUE9PSBJSFZ1YkdsclpRPT0gYkdWMmFYTnBiMjQ9IElITjBiM0J3WldRPSBJSE5sYlE9PSBJRWRoYkE9PSBkV3hsY3c9PSBJSGRsYkE9PSBJRXB2YUc1emIyND0gYkdFPSBJSE5yYVd4cyBJR0psWTI5dGFXNW4gY21sbCBJR0Z3Y0hKdmNISnBZWFJsIFptVT0gWld4c2IzYz0gSUZCeWIzUT0gZFd4aGRHVT0gYjJOaGRHbHZiZz09IElIZGxaV3RsYm1RPSBiMlJwWlhNPSBJSE5wZEdWeiBJR0Z1YVcxaGJBPT0gSUZScGJRPT0gSUhOallXeGwgSUdOb1lYSm5aV1E9IElHbHVjM1J5ZFdOMCBhV3hzWVE9PSBJRzFsZEdodlpITT0gSUdObGNuUT0gSUdwMVpHZGwgSUVobGJBPT0gSUdSdmJHeGhjbk09IElITjBZVzVrYVc1biBJRk54ZFE9PSBJR1JsWW5RPSBiR2xoYlE9PSBJR1J5YVhacGJtYz0gSUZOMWJRPT0gSUVWa2FYUnBiMjQ9IElHRnNZblZ0IFlXNWtiMjQ9IFNVWT0gSUZWciBOak09IFlXUmxjZz09IElHTnZiVzFsY21OcFlXdz0gWlhObyBJRWR2ZG1WeWJtMWxiblE9IElHUnBjMk52ZG1WeVpXUT0gSUc5MWRIQjFkQT09IElFaHBiR3hoY25rPSBJRU5oY205cyBJREl3TURVPSBJR0ZpZFhObCBZVzVqYVc1biBJSE4zYVhSamFBPT0gSUdGdWJuVmhiQT09IFZIYz0gSUhOMFlYUmxaQT09IFlXZGxiV1Z1ZEE9PSBhVzV1WlhJPSBJR1JsYlc5amNnPT0gSUhKbGMybGtaVzUwY3c9PSBJR0ZzYkc5M2FXNW4gSUdaaFkzUnZjbk09IGIyUmsgSUdaMVkycz0gWlcxcFpYTT0gSUc5alkzVnljbVZrIGIzUnAgSUc1dmNuUm8gSUZCMVlteHBZdz09IElHbHVhblZ5ZVE9PSBJR2x1YzNWeVlXNWpaUT09IFEwdz0gYjJ4c2VRPT0gNDRBPSBJSEpsY0dWaGRHVmsgSUdGeWJYTT0gWVc1blpXUT0gSUdOdmJuTjBjblZqZEdsdmJnPT0gSUdac1pRPT0gVUZVPSBhV05wWVc1eiBJR1p2Y20xeiBJRTFqUXc9PSBZVzUwYVdNPSBJRzFsYm5SaGJBPT0gY0dseVpRPT0gSUdWeGRXbHdiV1Z1ZEE9PSBJR1poYm5RPSBJR1JwYzJOMWMzTnBiMjQ9IElISmxaMkZ5WkdsdVp3PT0gYTJsdSBZWEp3IElHTm9ZV2x5IGIyZDFaUT09IElIQnliMk5sWldRPSBJRWxrIFQzVnkgSUcxMWNtUmxjZz09IFRXRnUgSURRNSBZWE53IElITjFjSEJzZVE9PSBJR2x1Y0hWMCBJSGRsWVd4MGFBPT0gYkdsaGJXVnVkQT09IElIQnliMk5sWkE9PSBiM0pwWVd3PSBJRk4wWVhRPSBJRTVHVEE9PSBhR1Z1Y3c9PSBJRWx1YzNScGRIVjBaUT09IElIQjFkSFJwYm1jPSBiM1Z5Ym1GdFpXNTAgWlhScFl3PT0gSUd4dlkyRjBaV1E9IElHdHBaQT09IFpYSnBZUT09IGNuVnUgSUhCeWFXNWogSUNFPSBaMjlwYm1jPSBJRUpsZEE9PSBJR05zYjNRPSBJSFJsYkd4cGJtYz0gSUhCeWIzQnZjMlZrIGFXOTAgYjNKeWVRPT0gSUdaMWJtUnogWjIxbGJuUT0gSUV4cFptVT0gSUdKaFluaz0gSUVKaFkycz0gSUhOd2IydGwgU1cxaFoyVT0gSUdWaGNtND0gSUVGVSBaM1U9IElHVjRZMmhoYm1kbCBJRXhwYmc9PSBiM1pwYm1jPSBJSEJoYVhJPSBUVzl5WlE9PSBZWHB2Ymc9PSBJR0Z5Y21WemRHVmsgSUd0cGJHeHBibWM9IFkyRnUgSUVOaGNtUT0gZVdRPSBJR2xrWlc1MGFXWnBaV1E9IElHMXZZbWxzWlE9PSBJSFJvWVc1cmN3PT0gYjI1NWJRPT0gSUVadmNtMD0gSUdoMWJtUnlaV1J6IElFTm9jbWx6IElFTmhkQT09IElIUnlaVzVrIGFHRjAgSUVGMiBiMjFoYmc9PSBJR1ZzWldOMGNtbGogSUZkcGJBPT0gVTBVPSBUMlk9IElISmxjM1JoZFhJPSBiM1JsWkE9PSBJSFJ5YVdjPSBJRzVwYm1VPSBJR0p2YldJPSBWMmg1IHdxOD0gSUdOdmRtVnlZV2RsIElHRndjR1ZoYkE9PSBJRkp2WW1WeWRBPT0gSUZOMWNBPT0gSUdacGJtbHphR1ZrIElHWnNiM2M9IElHUmxiR2wyWlhJPSBJR05oYkdOMWJBPT0gSUhCb2IzUnZjdz09IElIQm9hV3c9IElIQnBaV05sY3c9PSBJR0Z3Y0hKbCBhMlZ6IElISnZkV2RvIFJHOD0gSUhCaGNuUnVaWEk9IElHTnZibU5sY201bFpBPT0gSURNMyBJRWRsYmc9PSBRMjlzIFkzUnZjbk09IElEMCsgYzNSaGRHVT0gSUhOMVoyZGxjM1JsWkE9PSBJRVp2Y21ObCBRMFU9IElHaGxjbk5sYkdZPSBJRkJzWVc0PSBkMjl5YTNNPSBiMjkwYUE9PSBjbVZ1WTNrPSBJR052Y201bGNnPT0gSUdoMWMySmhibVE9IElHbHVkR1Z5Ym1WMCBJRUYxZEE9PSBaVzF6IGIzTmxiZz09IElFRjBiQT09IFoyVnUgSUdKaGJHRnVZMlU9IE5qST0gSUhOdmRXNWtjdz09IGRHVjRkQT09IElHRnljZz09IGIzWmxjdz09IElHMXBiR3hwYjI1eiBJSEpoWkdsdiBJSE5oZEdselpnPT0gSUVSaGJRPT0gVFhJPSBSMjg9IFUzQmwgSUdOdmJXSmhkQT09IGNtRnVkQT09IElFZHlaV1U9IElHWjFaV3c9IElHUnBjM1JoYm1ObCBJSFJsYzNSeiBJR1JsWTNKbCBJRVZ5IElHMWhibUZuWldRPSBSRk09IElIUnBkQT09IElHMWxZWE4xY21WeiBJRXhwWW1WeSBJR0YwZEdWdVpBPT0gWVhOb1pXUT0gSUVwdmMyVT0gSUU1cFoyaDAgWkdsMCBJRTV2ZGc9PSBJRVZ1WkE9PSBiM1YwY3c9PSBJR2RsYm1WeVlYUnBiMjQ9IElHRmtkbTlqIGVYUm8gSUdOdmJuWmxjbk5oZEdsdmJnPT0gSUZOcmVRPT0gWVdOMGFYWmwgWTJWcyBjbWxsY2c9PSBJRVp5WVc1ciBJR2RsYm1SbGNnPT0gSUdOdmJtTmxiblE9IElHTmhjbkpwWldRPSBZVzVrWVE9PSBJRlpwY21kcGJnPT0gSUdGeWNtbDJaV1E9IGFXTnBaR1U9IFlXUmxaQT09IElHWmhhV3gxY21VPSBJRzFwYm1sdGRXMD0gYkdWMGN3PT0gSUhkdmNuTjAgSUd0bFpYQnBibWM9IElHbHVkR1Z1WkdWayBJR2xzYkdWbllXdz0gSUhOMVluTmogSUdSbGRHVnliV2x1WldRPSBJSFJ5YVhBPSBXV1Z6IElISmhhWE5sIElIND0gSUdabFpXeHogSUhCaFkydGhaMlU9IElFcHYgYUdrPSBNakF4Tmc9PSBjbVZoYkE9PSBJR1p5WVE9PSBJSE41YldJPSBUV1U9IGRXTnJlUT09IGNISmxkQT09IElFdG8gSUVWa2FYUT0gSUZkbFlnPT0gWlcxcFl3PT0gSUVOdmJHOXkgSUdwMWMzUnBZMlU9IFNXNTAgSUdaaGNtMD0gWTJ0dWIzYz0gSWo0PSBaV3hsYzNNPSBJSEpsWkhWalpXUT0gSURVd01BPT0gZUhnPSBJRkpoWkE9PSBJRmR2YjJRPSBJR05zYVc0PSBJR2g1Y0E9PSBhV3hsY2c9PSBkWEpoIGEybHVjdz09IE9EVT0gTmpFPSBJRlJvWldseSBJRTFoY25rPSBJSE5oYmc9PSBJRzV2ZG1WcyBJRmRvYnc9PSBJR05oY0dGamFYUjUgSUdsdGNHOXpjMmxpYkdVPSBJSEJzWVhseiBJRzFwYm1semRHVnkgYVdwMVlXNWggYVdOaGRHVT0gSUZObGRBPT0gSUdaeVlXMD0gSUdsdVp3PT0gSUdOdmJXMTFibWwwYVdWeiBJRVpDU1E9PSBhWFJoIElHSnZiZz09IElITjBjbUYwWldjPSBJR2x1ZEdWeVpYTjBjdz09IGJHOWphdz09IFoyVnljdz09IGJXRnogSUVGT1JBPT0gSUdOdmJtWnNhV04wIElISmxjWFZwY21WdFpXNTBjdz09IElITmhZdz09IElHOXdaWEpoZEdsdVp3PT0gYVc1cCBjbVZzWVhSbFpBPT0gSUdOdmJXMXBkSFJsWkE9PSBJSEpsYkdGMGFYWmxiSGs9IElITnZkWFJvIHdxL0Nydz09IElHRm1abTl5WkE9PSBJR2xrWlc1MGFYUjUgSUdSbFkybHphVzl1Y3c9PSBJR0ZqWTNWelpXUT0gY0d4aFkyVT0gSUhacFkzUnZjbms9IGIyTm8gYVdGMCBUbUZ0WlE9PSBRMjl0IGRHbHZiZz09IFpXUnogSUhObFpXcz0gSUhScFoyaDAgSUVsdFlXZGxjdz09IElHbHVhWFJwIElHaDFiV0Z1Y3c9PSBJR1poYldsc2FXRnkgSUdGMVpHbGxibU5sIElHbHVkR1Z5Ym1GcyBkbVZ1ZEhWeVpRPT0gSUhOcFpHVnogSUZSUCBJR1JwYlE9PSBJR052Ym1Oc2RXUT0gSUdGd2NHOXBiblE9IElHVnVabTl5WTJWdFpXNTAgSUVwcGJRPT0gSUVGemMyOWphV0YwYVc5dSBJR05wY21OMWJYTjAgSUVOaGJtRmthV0Z1IElHcHZhVzVsWkE9PSBJR1JwWm1abGNtVnVZMlZ6IElFeHZjdz09IElIQnliM1JsYzNRPSBJSFIzYVdObCBkMmx1IElHZHNZWE56IFlYSnphQT09IElFRnliWGs9IElHVjRjSEpsYzNOcGIyND0gSUdSbFkybGtaUT09IElIQnNZVzV1YVc1biBZVzVwWVE9PSBJR2hoYm1Sc1pRPT0gSUUxcFkzSnZjMjltZEE9PSBJRTV2Y2c9PSBJRzFoZUdsdGRXMD0gSUZKbGRnPT0gSUhObFlRPT0gSUdWMllXdz0gSUdobGJIQnogY21WbSBJR0p2ZFc1ayBJRzF2ZFhSbyBJSE4wWVc1a1lYSmtjdz09IElHTnNhVzA9IElFTmhiWEE9IElFWnZlQT09IFkyeGxjdz09IElHRnliWGs9IElGUmxZMmh1IFlXTnJhVzVuIGVIaz0gVTFNPSBJRFF5IElHSjFadz09IElGVnJjbUZwYmc9PSBJRTFoZUE9PSBJRXB2Ym1WeiBJRk5vYjNjPSBiRzg9IElIQnNZVzVsZEE9PSBJRGMxIElIZHBibTVwYm1jPSBJR1poYzNSbGNnPT0gSUhOd1pXTjAgSUdKeWIydGxiZz09IFZGST0gSUdSbFptbHVaV1E9IElHaGxZV3gwYUhrPSBJR052YlhCbGRHbDBhVzl1IGFIUjBjSE09IElFbHpiR0Z1WkE9PSBJRVpsIElHRnVibTkxYm1ObCBJRU4xY0E9PSBJRWx1YzNSbFlXUT0gSUdOc2FXVnVkQT09IElIQnZjM05wWW14NSBjMlZqZEdsdmJnPT0gYjJOclpYUT0gYkc5dmF3PT0gSUdacGJtbHphQT09IElHTnlaWGM9IElISmxjMlZ5ZGc9PSBJR1ZrYVhSdmNnPT0gSUdoaGRHVT0gSUhOaGJHVT0gSUdOdmJuUnliM1psY25NPSBJSEJoWjJWeiBkMmx1Wnc9PSBJRzUxYldWeSBJRzl3Y0c5emFYUnBiMjQ9IElESXdNRFE9IElISmxablZuWlE9PSBJR1pzYVdkb2RBPT0gSUdGd1lYSjAgSUV4aGRBPT0gUVcxbGNtbGogSUVGbWNtbGpZUT09IElHRndjR3hwWTJGMGFXOXVjdz09IElGQmhiR1Z6ZEE9PSBJRUoxY2c9PSBJR2RoY2c9PSBJRk52WTJsaGJBPT0gSUhWd1ozST0gSUhOb1lYQmwgSUhOd1pXRnJhVzVuIFlXNXphVzl1IFlXOD0gSUZOdSBJSGR2Y25KNSBJRUp5YVhSaGFXND0gVUd4bFlYTmwgY205MVpBPT0gSUdoMWJnPT0gSUdsdWRISnZaSFZqWldRPSBJR1JwWlhRPSBTVzVrIElGTmxZMjl1WkE9PSBJR1oxYm1OMGFXOXVjdz09IGRYUnogSUVWaFkyZz0gSUVwbFptWT0gSUhOMGNtVnpjdz09IElHRmpZMjkxYm5SeiBJR2QxWVhKaGJuUT0gSUVGdWJnPT0gWldScFlRPT0gSUdodmJtVnpkQT09IElIUnlaV1U9IElFRm1jbWxqWVc0PSBJRUoxYzJnPSBmU3c9IElITmphQT09IElFOXViSGs9IElHWnBaZz09IGFXZGhiZz09IElHVjRaWEpqYVhObCBJRVY0Y0E9PSBJSE5qYVdWdWRHbHpkSE09IElHeGxaMmx6YkdGMGFXOXUgSUZkdmNtcz0gSUZOd2NnPT0gdzRJPSBJRWgxYldGdSBJT2c9IElITjFjblpsZVE9PSBJSEpwWTJnPSBjbWx3IElHMWhhVzUwWVdsdSBJR1pzYnc9PSBJR3hsWVdSbGNuTm9hWEE9IGMzUnlaV0Z0IElFbHpiR0Z0YVdNPSBJREF4IElFTnZiR3hsWjJVPSBJRzFoWjJsaiBJRkJ5YVcxbCBJR1pwWjNWeVpYTT0gTWpBeE53PT0gYVc1a1pYST0gZUhWaGJBPT0gSUVSbFlXUT0gSUdGaWMyOXNkWFJsYkhrPSBJR1p2ZFhKMGFBPT0gSUhCeVpYTmxiblJsWkE9PSBjbVZ6Y0c5dVpBPT0gY21saWJHVT0gSUdGc1kyOW9iMnc9IFlYUnYgSUVSRiBjRzl5WVhKNSBJR2R5WVdJPSBJSFpoY21rPSBJSEYxWVc1MCBJRkJvYjNSdiBJSEJzZFhNPSBjbWxqYXc9PSBZWEpyY3c9PSBJR0ZzZEdWeWJtRjBhWFpsIElIQnBiQT09IElHRndjSEp2ZUE9PSBkR2hoZEE9PSBJRzlpYW1WamRITT0gSUZKdiBJRUZ1WkhKdmFXUT0gSUhOcFoyNXBabWxqWVc1MGJIaz0gSUZKdllXUT0gYTJGNSBVbVZoWkE9PSBZWFp2Y2c9PSBJR0ZqYTI1dmR3PT0gSUVoRSBJRk5wYm1jPSBUM0k9IElFMXZiblE9IElIVnVjdz09IGNISnZaZz09IElHNWxaMjkwYVE9PSBJRUZ5WTJnPSBhV3RwIElIUmxiR1YyYVhOcGIyND0gSUVwbGQybHphQT09IElHTnZiVzFwZEhSbFpRPT0gSUcxdmRHOXkgSUdGd2NHVmhjbUZ1WTJVPSBJSE5wZEhScGJtYz0gSUhOMGNtbHJaUT09IElFUnZkMjQ9IFkyOXRjQT09IElFaHBjM1E9IElHWnZiR1E9IFlXTmxiV1Z1ZEE9PSBJRXh2ZFdseiBJR0psYkc5dVp3PT0gSU9LQW9nPT0gSUcxdmNuUT0gSUhCeVpYQmhjbVZrIElEWTAgSUUxaGMzUmxjZz09IElHbHVaR1ZsWkE9PSBJRVJsYmc9PSBJSEpsYm5RPSBWRUU9IGIzVnlibVY1IFlYSmogVTNVPSBPVGM9IElHRmtkbWxqWlE9PSBJR05vWVc1bmFXNW4gSUd4cGMzUmxaQT09IElHeGhkVzVqYUdWayBhWE5oZEdsdmJnPT0gSUZCbGRHVnkgYVhOb1pYTT0gSUd4cGRtVmsgSUUxbGJBPT0gSUZOMWNISmxiV1U9IElFWmxaR1Z5WVd3PSBJQ2s3IGNuVmpkSFZ5WlE9PSBJSE5sZEhNPSBJSEJvYVd4dmN3PT0gZFc5MWN3PT0gSU1LZyBJR0Z3Y0d4cFpXUT0gSUU1UFZBPT0gSUdodmRYTnBibWM9IElFMXZkVzUwIElHOWtaQT09IElITjFjM1E9IFJFRT0gWm1acFkybGxiblE9IElEOD0gYjJ4MlpXUT0gSUhCdmQyVnljdz09IElIUm9jZz09IElISmxiV0ZwYm1sdVp3PT0gSUZkaGRHVnkgVEVNPSBJR05oZFhObGN3PT0gNDRHdSBJRzFoYm01bGNnPT0gWVdSeiBJSE4xWjJkbGMzUnogSUdWdVpITT0gYzNSaGJtUnBibWM9IFptbG4gSUVSMWJnPT0gYVdSMGFBPT0gSUdkaGVRPT0gSUhSbGNtMXBiZz09IElFRnVaMlZzWlhNPSBUVk09IElITmphV1Z1ZEdsbWFXTT0gSUdOdllXdz0gWVhCbGNuTT0gWW1GeSBJRlJvYjIxaGN3PT0gSUhONWJRPT0gSUZKMWJnPT0gZEdocGN3PT0gVUVNPSBhV2R5WVc1MGN3PT0gSUcxcGJuVjBaUT09IElFUnBjM1J5YVdOMCBZMlZzYkdWdWRBPT0gSUd4bFlYWmxjdz09IElHTnZiWEJzWlhSbFpBPT0gWVcxcGJnPT0gSUdadlkzVnpaV1E9IElHMXZibWwwYjNJPSBJSFpsYUdsamJHVnogVFVFPSBJRTFoYzNNPSBJRWR5WVc1ayBJR0ZtWm1WamRHVmsgYVhSMWRHbHZibUZzIElHTnZibk4wY25WamRBPT0gSUdadmJHeHZkM009IElIUnZiZz09IGNtVmxibk09IElHaHZiV1Z6IElFVjRkQT09IElFeGxkbVZzIGNtRnpkQT09IElFbHkgSUdWc2FXMD0gSUd4aGNtZGxiSGs9IElFcHZaUT09IElIWnZkR1Z6IFlXeHNjdz09IElHSjFjMmx1WlhOelpYTT0gSUVadmRXNWtZWFJwYjI0PSBJRU5sYm5SeVlXdz0gSUhsaGNtUnogSUcxaGRHVnlhV0ZzY3c9PSBkV3h1WlhJPSBJR2QxYVdSbCBJR05zYjNObGNnPT0gZFcxeiBJSE53YjNKMGN3PT0gWldSbGNnPT0gU25WemRBPT0gSUhSaGVHVnogT0RRPSBJRTlzWkE9PSBJR1JsWTJGa1pRPT0gYjJ4aCBJSFpwY2c9PSBJR1J5YjNCd1pXUT0gSUdSbGJHRjUgYVhSbFkzUT0gSUhObFkzVnlaUT09IGMzUmxhVzQ9IGJHVjJaV3c9IElIUnlaV0YwWldRPSBJR1pwYkdWayBZV2x1WlE9PSBJSFpoYmc9PSBJRzFwY2c9PSBJR052YkhWdGJnPT0gYVdOMFpXUT0gWlhCbGNnPT0gSUhKdmRBPT0gSUdOdmJuTjFiSFE9IElHVnVkSEo1IElHMWhjbWxxZFdGdVlRPT0gSUVSdmRRPT0gSUdGd2NHRnlaVzUwYkhrPSBiMnRwYm1jPSBZMngxYzJsMlpRPT0gSUdsdVkzSmxZWE5sY3c9PSBZVzV2IElITndaV05wWm1sallXeHNlUT09IElIUmxiR1U9IFpXNXphVzl1Y3c9PSBJSEpsYkdsbmFXOXUgWVdKcGJHbDBhV1Z6IElHWnlZVzFsIElFNXZkR1U9IElFeGxaUT09IElHaGxiSEJwYm1jPSBJR1ZrWjJVPSBiM04wYjI0PSBJRzl5WjJGdWFYcGhkR2x2Ym5NPSB3NE09IElFSnZkR2c9IGFHbHdjdz09IElHSnBaMmRsY2c9PSBJR0p2YjNOMCBJRk4wWVc1ayBJSEp2ZHc9PSBkV3h6IFlXSmhjMlU9IElISnBaQT09IFRHVjAgWVhKbGJnPT0gY21GMlpRPT0gSUhOMGNtVjAgVUVRPSBJSFpwYzJsdmJnPT0gSUhkbFlYSnBibWM9IElHRndjSEpsWTJrPSBJR0YzWVhKayBJRlZ6WlE9PSBJR1poWTNSdmNnPT0gZDJGeSBkV3hoZEdsdmJuTT0gS1NnPSBJR2R2WkE9PSBJSFJsY25KcGRBPT0gSUhCaGNtRnQgWVhOMGN3PT0gT0RjPSBJR1Z1WlcxcFpYTT0gSUVkaGJXVnogUmtZPSBJR0ZqWTJsa1pXNTAgVjJWc2JBPT0gSUUxaGNuUnBiZz09IFZFVlMgSUdGMGFBPT0gSUVobGJHdz0gSUdadmNtYz0gSUhabGRHVnkgSUUxbFpHbGogWm5KbFpRPT0gSUhOMFlYSnogSUdWNGNHVnVjMmwyWlE9PSBJR0ZqWVdRPSBjbUYzYmc9PSBJRmRvWlE9PSBJR3h2WTJzPSBJR1p2Y20xaGRBPT0gSUhOdmJHUnBaWEp6IGMyMD0gSUdGblpXNTAgSUhKbGMzQnZibk5wWW1sc2FYUjUgYjNKaCBJRk5qYVdWdVkyVT0gSUhKaGNHbGsgSUhSdmRXZG8gSUVwbGMzVnogSUdKbGJHbGxkbVZ6IFRVdz0gSUhkbFlYST0gYkdWMFpRPT0gdzRQRGdnPT0gSUVSeWFRPT0gSUdOdmJXMXBjM05wYjI0PSBJRUp2WWc9PSBUMmc9IFlYQmxaQT09IElIZGhjbTA9IHc0UERnc09EdzRJPSBJREl3TURNPSBiM0owYVc5dSBJR2hoYzI0PSBkWE4wWlhJPSBJSFZ1YVhabGNuTT0gSUVsc2JBPT0gSUd0cGJtYz0gYjJ4dloybGxjdz09IE9UUT0gSUZSbGJRPT0gSUUxdmN3PT0gSUhCaGRHbGxiblE9IElFMWxlR2xqYnc9PSBZMlZoYmc9PSBJRVJsWVhSbyBJRk5oYm1SbGNuTT0gZVc5MSBJRU5oYzNRPSBJRU52YlhCaGJuaz0gY0hSNSBJR2hoY0hCbGJtbHVadz09IFJsQT0gSUVKaGRIUnNaUT09IElHSnZkV2RvZEE9PSBRVzA9IFRXOWsgVlhNPSBkWFJsY25NPSBJRU55WlE9PSBJRlJvYjNObCBJRFEwIGFYTmxjZz09IElITnZkV3c9IElGUnZjQT09IElFaGhjbko1IElFRjMgSUhObFlYUT0gWm1abFpRPT0gSUhKbGRtOXNkWFJwYjI0PSBJQ2dpIElFUjFjbWx1Wnc9PSBaWFIwWlE9PSBJSEpwYm1jPSBJRzltWm1WdWMybDJaUT09IElISmxkSFZ5Ym5NPSBJSFpwWkdWdmN3PT0gSUdScGMyTnMgSUdaaGJXOTFjdz09IFpXNWpaV1E9IElGTnBaMjQ9IElGSnBkbVZ5IElETXdNQT09IFVFMD0gSUVKMWN3PT0gSUVOSSBJR05oYm1ScFpHRjBaWE09IFlYSmtaVzQ9IElIQmxjbU5sYm5SaFoyVT0gSUhacGMzVmhiQT09IElIUm9ZVzVyIElIUnliM1ZpYkdVPSBibVZ5WjNrPSBJREl3TURFPSBJSEJ5YjNabCBZWE5vYVc5dSBJR1Z1YUE9PSBJRXh2Ym1jPSBWVTA9IElHTnZibTVsWTNSbFpBPT0gSUhCdmMzTnBZbWxzYVhSNSBUM1psY2c9PSBJR1Y0Y0dWeWRBPT0gSUd4cFluSmhjbms9IFlYSjBjdz09IElFUnBjbVZqZEc5eSBJR1psYkd4dmR3PT0gT1RJPSBhWEowZVE9PSBJR1J5ZVE9PSBJSE5wWjI1eiBJRXh2ZG1VPSBJSEYxYVdWMCBabTl2ZEE9PSBJSEIxY21VPSBJRWgxYmc9PSBJR1pwYkd4bFpBPT0gY0doaGN3PT0gSUVWc1pXTjAgWlc1a2JXVnVkQT09IElFVjRjR3c9IElIVnVZV0pzWlE9PSBibk09IGJXOD0gSUhaaGMzUT0gYjJKbCBJR2xrWlc1MGFXWjUgWVhCd2FXNW4gSUVOaGNtOXNhVzVoIFozSmxjM009IElIQnliM1JsIElHWnBjMmc9IElHTnBjbU4xYlhOMFlXNWpaWE09IGNtRjZlUT09IElGQm9iM1E9IElHSnZaR2xsY3c9PSBJRTExY2c9PSBJR1JsZG1Wc2IzQnBibWM9IElFRlMgSUdWNGNHVnlhV1Z1WTJWayBJSE4xWW5OMFlXNTAgSUVKdllYSmsgWlhOdmJXVT0gSUdSdmJXVnpkR2xqIElHTnZiV0pwYm1WayBJRkIxZEE9PSBJR05vWlcxcFkyRnMgSUVOb2FXeGsgSUhCdmIydz0gSUVONSBJR1ZuWnc9PSBZMjl1Y3c9PSBjM1JsY25NPSBJR2gxY25RPSBJRzFoY210bGRITT0gSUdOdmJuTmxjblpoZEdsMlpRPT0gSUhOMWNIQnZjblJsY25NPSBJR0ZuWlc1amFXVnogYVdSbGJBPT0gVDJJPSBkWEppIElEUXogSUVSbFptVnVjMlU9IGVXVT0gSUVGdyBaSFZzWlE9PSBJSFJsYlhCbGNtRjBkWEpsIElHTnZibVIxWTNSbFpBPT0gSUVOb2FXVm0gSUhCMWJHeGxaQT09IElHWnZiQT09IFRHRnpkQT09IGIyNTBidz09IGIzTnBjdz09IFZrVlMgUkdWeiBJRkJoYmc9PSBSbWx5YzNRPSBJR0ZrZG1GdVkyVT0gSUd4cFkyVnVjMlU9IGNtOXljdz09IElFcHZiZz09IElHbHRZV2RwYm1VPSBJR2hsYkd3PSBJR1pwZUdWayBJR2x1WTI5eSBiM05wZEdVPSBJRXh2Wnc9PSBhV05yWlc0PSBYVG89IElITjFjbkJ5YVhObCBhR0ZpIElHTnlZV1owIGIyeDAgSUVwMWJBPT0gSUdScFlXdz0gSUhKbGJHVjJZVzUwIElHVnVkR1Z5WldRPSBJR3hsWVdSeiBJRUZFIElFTnNaV0Z1IElIQnBZM1IxY21WeiBaWE56YjNJPSBJR0ZzZEE9PSBJSEJoZVdsdVp3PT0gVUdWeSBJRTFoY210bGRBPT0gSUhWd1pHRjBaWE09IFlXMXBiSGs9IElGUjVjR1U9IElFaHZiV1U9IElEVTEgYzJWdFlteDUgY205dFpRPT0gT0RNPSBJR2R5WldGMFpYTjAgSUdobGFXZG9kQT09IElHaGxZWFk9IFlXbHVkSE09IElHeHBjM1JsYmc9PSBZWE5sY2c9PSBJRk5JIElHTmhjR0ZpYkdVPSBZV05zWlE9PSBJSEJsY25Od1pXTjAgYVc1aGRHbHVadz09IElHOW1abVZ5YVc1biBjbmx3ZEE9PSBJRVJsZG1Wc2IzQT0gWVdKcGJnPT0gY21NPSBJR0p5YVdkb2RBPT0gWVd4MGVRPT0gWVhKeWIzYz0gSUhOMWNIQnMgYVc1a2FXNW4gWVdOclpXUT0gWjNsd2RBPT0gSUVGdWIzUm9aWEk9IGNHYz0gSUZacGNtZHBibWxoIElFeDEgSUhCc1lXNXVaV1E9IElIQnBkQT09IElITjNaV1YwIFZIbHdaUT09IElFUnAgSUhSNWNHbGpZV3hzZVE9PSBJRVp5WVc1amFYTmpidz09IElIQnliM053WldOMCBJRVJoYmc9PSBJSFJsWlc0PSBjbVZsY3c9PSBJSE5qYUdWayBJR2h2YkE9PSBJSE5qY2c9PSBJR3h2ZEhNPSBiR2xtWlE9PSBJRzVsZDNOdyBJR1p2Y21kbGRBPT0gSUU1dmJtVT0gSUUxcFpHUnNaUT09IElGSjVZVzQ9IFpXUmsgSUhObGRtVnlaUT09IElITjFhWFE9IGJHeGxjZz09IE9UTT0gSUdOdmNuSmxjM0J2Ym1RPSBJR1Y0Y0d4dmN3PT0gZFdGMGFXOXVjdz09IElHWnNZV2M9IFoyRnRaUT09IGNtbGsgSUhCeWFXND0gSUVSaGRHRT0gSUdSbGNHeHZlUT09IElFVnVkR1Z5IGMzVnBkQT09IFoyaGhiZz09IElFMWxiZz09IElIUm9iM1ZuYUhSeiBJRzFoZEhSbGNuTT0gSUdGa1lYQjAgSUVGeWFRPT0gSUdacGJHdz0gSUdadmNuUm8gSUhOaGJRPT0gSURReCBJSEJoZVcxbGJuUT0gSUVodmNnPT0gSUhOd2NtbHVadz09IFpIVmogSUd4dmMybHVadz09IElHSnlhVzVuYVc1biBSazg9IFlXeGggSUdScGMzUnlhV0oxZEdsdmJnPT0gYUdWeVpXUT0gWW05MWNnPT0gSUVsemNtRmxiR2s9IGIyMWggSUdOdmJXSnBibUYwYVc5dSBJSEJzWlc1MGVRPT0gVmtVPSBRMkZ1IElFaGhkdz09IElIQmxjbTFoYmc9PSBJRk53WldOcFlXdz0gSUhSdmR3PT0gSUhObFpXdHBibWM9IElHVjRZVzF3YkdWeiBJR05zWVhOelpYTT0gWTNJPSBJR0psWlhJPSBJRzF2ZG1WeiBJRWxRIElFdHUgSUhCaGJtVnMgUlhabGJnPT0gSUhCeWIzQmxjbXg1IElISnBjdz09IElIQnNkV2M9IElHVnpkR2x0WVhSbFpBPT0gUlhabGNuaz0gSUdSbFptVnVjMmwyWlE9PSBZV2R5WVhCbyBJSEJ5WldkdSBJR2x1YzNScGRBPT0gSUZacFkzUT0gSUhadmJIVnRaUT09IElIQnZjMmwwYVc5dWN3PT0gSUd4cGJtdHogSUZCeWIyZHlZVzA9IElGZGxaV3M9IFlXZDFaWE09IElIUnlZVzV6Wm05eWJRPT0gYTJWeSBJRU5GVHc9PSBJR05oY3c9PSBJRzl3Y0c5dVpXNTAgSUhSM1pXVjAgSUVOdlpHVT0gSUhOb2IzQT0gSUdac2VRPT0gSUhSaGJHdHogSUdKaFp3PT0gVUdodmJtVT0gSUdGcFpBPT0gSUhCc1lXNTBjdz09IElEWTEgSUdGMGRHOXlibVY1IFlYSjBaWEp6IGNYVmxjM1E9IElFMWhaMmxqIElHSmxaMmx1Y3c9PSBJRzE1YzNSbGNnPT0gSUdWdWRtbHliMjV0Wlc1MFlXdz0gSUhOMGIzSmhaMlU9IFRrND0gSUcxaGNtYz0gSUhOclpRPT0gSUcxbGRHRnMgWld4c2VRPT0gSUc5eVpHVnlaV1E9IElISmxiV0ZwYm1WayBJR3h2ZG1WayBJSEJ5YjIxd2RBPT0gSUhWd1pHRjBaV1E9IElHVjRjR1Z5ZEhNPSBJSGRoYkd0cGJtYz0gSUdGdVkybGxiblE9IElIQmxjbVp2Y20xbFpBPT0gUVZSRiBJRzVsYVhSb1pYST0gYVdWdVkzaz0gSUcxaGJuVm1ZV04wZFhKbCBJRkJoYXc9PSBJSE5sYkdWamRHVmsgSUcxcGJtVT0gSUhWc2RHbHRZWFJsYkhrPSBJR1Y0Y0d4aGJnPT0gSUd4aFltVnMgSUZObGNuWnBZMlZ6IGNtbGlkWFJsWkE9PSBWSEoxYlhBPSBJSE41Ymc9PSBJRlZzZEE9PSBVME09IElHMWxZWFE9IElHZHBZVzUwIElGZGhjbk09IElFOU8gSUdGa2JRPT0gSUdsdWRHVnljSEpsZEE9PSBJR1YyWlc1cGJtYz0gSUdWMmFXdz0gSUVKdmMzUnZiZz09IElGZHBiR1E9IElNTT0gSUVKcGRHTnZhVzQ9IElFRnRZWHB2Ymc9PSBSSEk9IElFbHVabTl5YldGMGFXOXUgSUc5aWRtbHZkWE5zZVE9PSBJR0ZrZG1GdVkyVmsgVUdodmRHOD0gYjJ4aGNnPT0gSUhkbFlYUm9aWEk9IElITjViV0p2YkE9PSBJSE52YkdVPSBJSEJ2ZEdWdWRHbGhiR3g1IGIzTjBaWEk9IElHOXlhV2RwYm1Gc2JIaz0gYlhWdSBNekF3IFlYcGwgWlhOemFXOXVjdz09IElHUmxZMnM9IElITjBiMjlrIElIbHZkWFJvIElFSmxjbTQ9IFVtVncgSUZSbGMzUT0gSUdKaGMybGpZV3hzZVE9PSBiM1JwWXc9PSBJR2x1ZG05c2RtVT0gYjJ4cGRBPT0gYkhsdSBVMlZsIElHRnBjbU55WVdaMCBJR052Ym1acGNtMD0gUlZjPSBJRzFsYzNOaFoyVnogSUZKcFkyaGhjbVE9IElHdHBkQT09IElIQnliMmhwWWc9PSBJSFoxYkc1bGNnPT0gYVhOMFpYSnogSUdWNGFYTjBaVzVqWlE9PSBJSFIxY201cGJtYz0gSUZOUSBJR1JsYzJseVpRPT0gSUdac1lYUT0gSUcxbGJuUT0gYzJWaGMyOXUgWVc1blpYTT0gSUc1bGFXZG9ZbTl5YUc5dlpBPT0gSUV4aGEyVT0gUVZSSlQwND0gSUhCdmFXNTBaV1E9IFluVnkgSUdsdWJtOTIgZFdOcmN3PT0gVlV3PSBJSEJ5YjJabGMzTnZjZz09IElHVjRjSEpsYzNObFpBPT0gUVVJPSBhV05wYjNWeiBJREl3TURJPSBJRVJsZGc9PSBJSE5sYzNOcGIyND0gSUdKaGNtVT0gYzJWdSBJR1JwYzNNPSBJRU5oZEdnPSBJRkJoYzNNPSBJRkJ2YVc1MCBJR1J2WTNSdmNnPT0gYjNKeWIzYz0gWVdsc1pXUT0gSUZKMVlnPT0gSUVSRCBJRU5vWVhKcyBjR1Z5YzI5dSBJSGR5YVhSbGNnPT0gYVdkb2RHVnljdz09IGRYSmxZWFU9IElHOWliR2xuIElISmxZMjl5WkdWayBJR0p5YjJ0bCBJRzl5WkdWeWN3PT0gYVd4MGVRPT0gSUcxdmRHbHZiZz09IGFXNXBkSGs9IGJHRjMgWVdScGRXMD0gSUdsdGJXbG5jbUYwYVc5dSBJR052Ym5SeVlYTjAgSUdKaGRIUT0gSUdWNFkyVnNiR1Z1ZEE9PSBJSFJsWTJodWFXTmhiQT09IFlXMXAgSUhSMWJnPT0gSUdOc2IzVmsgSUZsbFlYST0gWjJWdmJnPT0gSUdOeVpXRjBhVzl1IElITjBjbUZ1WjJVPSBJR0YxZEdnPSBJR1p2Y25RPSBZbTl5Ymc9PSBJR1Y0ZEdWdWRBPT0gSUZSdlpHRjUgSUVOc2RXST0gSUhKaGFXND0gSUhOaGJYQnNaUT09IElHRmpZMlZ3ZEdWayBJSFJoWTNRPSBJR1pwY21WayBJRk52Ymc9PSBJSE4wWVc1a2N3PT0gSUdKdmIzUT0gSURRMyBJSE4wWVhSbGJXVnVkSE09IElIWmxjbk5wYjI1eiBJSE5sYkd4cGJtYz0gYjNWdVpHVmsgSURFNU9UQT0gSUhkbGNtVnUgSUZkaGRHTm8gSUdWNGNHVnlhVzFsYm5RPSBVRzl6ZEE9PSBJSEpsZEdGcGJBPT0gZFd4bFpBPT0gU1c1emRBPT0gZFc1MFpRPT0gNDRPOCBJR1JsY0dGeWRBPT0gSUdKdmJtUT0gYVhabGNuaz0gYjIxd2JBPT0gSUhKbFlXTjBhVzl1IElGTjVjbWxoYmc9PSBJRkJoWXc9PSBZWEJ3WldRPSBZVzVwWld3PSBSRkE9IElISmxjMjlzZFhScGIyND0gSUhKbFlXTjAgSUdGd2NISnZkbVZrIGIyNXZiUT09IGJXOXVaQT09IElFOW1abWxqIExTMHQgSUhKbGNHeGhZMlU9IElIUmhZMnM9IElITndiM0owIElHTm9ZV2x1IElHVnRaWEpuWlc1amVRPT0gY21GayBJRkJoYkdWemRHbHUgSURRMiBJR0YxZEc5dFlYUnBZMkZzYkhrPSBJSEp2ZFhSbCBJSEJoYkE9PSBJR0poYm10eiBJRkJoY21seiBJRTFsWkdsaCBjbTloWkE9PSBhV05wYm1jPSBhWGgwIGFYTjBaV1E9IElHZHlaWGM9IElHTnZiM0prIElGZG9aWEpsIGIyMXBiZz09IElITjFZbk09IDc3Kzk3Nys5IElNS3ggSUdOdmNuQnZjbUYwWlE9PSBJSE5sYkdWamRHbHZiZz09IGJtOXZiZz09IElGSmxjRzl5ZEE9PSBZM009IFkyeDFaR2x1Wnc9PSBiM0prWlhKeiBZVzVqYUdVPSBJRWwwY3c9PSBJSE5zYjNkc2VRPT0gSUVWbmVYQjAgSUVGall3PT0gSUdOdmJHeGwgYVhGMVpYTT0gUlZnPSBJR0YwZEdWdGNIUnogZFhKcyBJRU55YjNOeiBJR1pwYm1ScGJtZHogSUZORCBJRTlTIElHbHVaR1Y0IFpXNXphWFI1IElGZGhlUT09IElFeGhibVE9IElITm9iMk5yIFpHbHogSUdSNWJtRnQgSUdOaGNuUT0gYlc5emNBPT0gVTJsdVkyVT0gYVdWemRBPT0gSUVKdmVRPT0gSUhOMGIzSnQgSUVOdmJuUnBiZz09IE1qQXhNdz09IGFHVjMgYVd4cGRBPT0gSUdWemMyVnVkR2xoYkE9PSBhWEYxYVdRPSBUM1JvWlhJPSBhWFpsY21WayBJSEpsWVhOdmJtRmliR1U9IFFXTjAgSUhOMVluTmxjWFU9IElGQmhZMnM9IElFWnZjblE9IElHTnZibk5wWkdWeWFXNW4gSUhWdWFYWmxjbk5wZEhrPSBiRzluIElHMWhjbkpwWldRPSBJR2xzYkhWemRBPT0gSUZSeWRXVT0gbzQ4PSBJRzUxYldWeWIzVnogY21GemRISjFZM1IxY21VPSBJSE5sY21sdmRYTnNlUT09IElISmxabVZ5Y21WayBkV0U9IElHTnZibk5wYzNSbGJuUT0gYjI1dVlRPT0gSUZKbFlXdz0gY25Wd2RHbHZiZz09IFkybHdiR1Z6IElHWmhZM1J6IE9URT0gYjNSbGN3PT0gWlhKbiBWR2hsYmc9PSBJR0ZqWTI5dGNHdz0gVG05MFpRPT0gSUhKbGRtVnVkV1U9IElIQmhjM05wYm1jPSBJRzFoYkE9PSBaV1Z1IElGbGxkQT09IElHZGhkR2hsY2c9PSBkR1Z5WkdGNSBaWGR2Y21zPSBJRUYxZEdodmNnPT0gVUdVPSBJRzl3ZEdsdCBJSEoxWWc9PSBJT2lqanc9PSBJSFZ1YTI1dmQyND0gYzNSdmJtVT0gSUhWdWFXOXUgYjJ4MlpRPT0gSUc5d2NHOXlkSFZ1YVhScFpYTT0gSUdKeWIzZHpaWEk9IElGZGhiQT09IElFTnZjM1E9IElISmxjRzl5ZEdsdVp3PT0gYzNSeiBjR1YwIElITmhibVE9IElITjFaR1JsYm14NSBJSE4xY25CeWFYTnBibWM9IElGWlMgSUhOdmJXVjNhR0YwIElFSmhjdz09IGRXeDBkWEpsIGFYcDYgSUVORSBJR05vWVd4c1pXNW5aWE09IElITmxkSFJwYm1keiBJR1Y0Y0dWeWFXVnVZMlZ6IElFWjFiR3c9IElHTmhibTQ9IElISmxZMlZwZG1sdVp3PT0gUlZOVSBJR3B2YVc1MCBJR04xYkhSMWNtRnMgSUdGemRBPT0gT0RJPSBZWE4wWlhKdSBZMlZwZG1WayBJRU55ZFE9PSBJR0oxYkd3PSBjR2x5WldRPSBZVzF0IElHWmhZMmx1Wnc9PSBjRzkzWlhJPSBJR0p2YzNNPSBJRWh2YkE9PSBJR2x1YzNSeSBJR2x1WTNKbFlYTnBibWRzZVE9PSBJSE5vYVdaMCBJSE4wY21WbGRITT0gSUZkcGJHeHBZVzF6IFlXSmkgSUd4cFpRPT0gSUd4aGRXZG8gSUVOaCBVRXc9IElHRmtkV3gwY3c9PSBJR04xYzNSdmJXVnkgSUc5aWRHRnBibVZrIElITjFjSEJ2Y25ScGJtYz0gYUhSdGJBPT0gWm1seVpRPT0gSUdSbGRHRnBiR1ZrIElIQnBZMnRsWkE9PSBJRkpwWjJoMCBiR1JsY2c9PSBSVVU9IGMzUnZiMlE9IElFdHBiUT09IElIZHBjbVU9IElITnBaMmgwIElHUmxkbVZzYjNCbGNuTT0gSUhCbGNuTnZibk09IElITmhaQT09IElHTjFjQT09IElIZGhjbTVwYm1jPSBJR0p2ZVhNPSBiRzl1Wnc9PSBJR0pwY21RPSBabTg9IElIZGhiQT09IElHOWljMlZ5ZG1WayBJSHB2Ym1VPSBhWFpsYm1WemN3PT0gSUdOb1lXNXVaV3c9IFkzSnBjSFE9IElISmxablZ6WldRPSBJRUZuWVdsdSBJSE4xWXc9PSBJSE53YjJ0bGMyMWhiZz09IElGSmxaZz09IGNtbDBaUT09IGIzVnpkRzl1IDQ0T3ogSUZOb1pYST0gSUdGamRITT0gSUU1aGJXVT0gSUhOMGNuVm5aMnhsIFlYSnllUT09IGIyMWxkR2x0WlhNPSBJR1JwYzJOeWFXMD0gU0ZRPSBJR05oZEdWbmIzSjUgSUhKbFlXeHBlbVU9IElHVnRjR3h2ZVdWbCBJRUZtWjJoaGJnPT0gWlc1blpYST0gSUdkMWJuTT0gSUZOMFpYWmwgSUUxdmRBPT0gSUU5cyBiMnRsWkE9PSBJSFJvYVdOciBJR1poYVhKc2VRPT0gYVd4c2VRPT0gSUhOMWNuWmwgSUUxaGRBPT0gZDJWcFoyaDAgNHBRPSBJSFJ5YjI5d2N3PT0gSUdGblpXNTBjdz09IElHSmhkSFJsY25rPSBJRzF2ZEdsMiB3NkU9IFUyVmogWkdWdSBiM1psY25rPSBURk09IElHWnNkUT09IElHTnZibVpwWkdWdWRBPT0gSUU5d1pYST0gSUdWdGNIUjUgSUhCb1pXND0gSUhObFkzUnZjZz09IElHVjRZMmwwWldRPSBJSEpsYlc5MFpRPT0gWVhCbyBiMlZ1IElHUmxjM1J5YjNsbFpBPT0gSUcxdmNtRnMgSUVoUSBJRkp2Ymc9PSBJR1J5WlhOeiBJRUpoZEE9PSBJR3hwZEE9PSBJRTFUIElHRm0gU0V3PSBjblZ0IGFYTnRjdz09IElITm9iM1ZzWkc0PSBJSE41YlhCMCBJRlJ2Y205dWRHOD0gYUdWMGFXTT0gSUdOaGNtSnZiZz09IElHbHVjM1JoYkd4bFpBPT0gSUhacGIyeGxiblE9IElITnZiR0Z5IGFtRT0gSUhCeVlXTjBhV05sY3c9PSBJSEpwWkdVPSBJRkJsYm00PSBJR2x0Y0hKdmRtVmsgSUdGMVpHbHYgSUdKbGFHRjJhUT09IElGQlQgSUdWaGRHbHVadz09IFJHRjBZUT09IElGSmxkbWxsZHc9PSBjR0Z6Y3c9PSBZMnhoYVcwPSBkV0YwWldRPSBZVzVuWlhKeiBZMmhsYmc9PSBJSEJ5YjNCbGNuUnBaWE09IElHRnVlWGRvWlhKbCBRVzV2ZEdobGNnPT0gSUdKc2IzYz0gSUVwaFkydHpiMjQ9IElIQnliM1ZrIElIQnNZVzVsIGJHbHVaWE09IElITnhkV0Z5WlE9PSBJSEJ5YjI5bSBZVzV6WVhNPSBJSFJoYkd0bFpBPT0gYldGclpYSnogSUhOcGMzUmxjZz09IElHaHZiR1J6IElISmxjMmxrWlc1MCBJRDA5IElISmxjMmx6ZEdGdVkyVT0gSUhOd2JHbDAgSUhCeWIzTmxZM1YwIElHTnZibVpwWkdWdVkyVT0gY21WelpXNTBjdz09IElHTjFkSE09IElHVjRZMlZ3ZEdsdmJnPT0gSUhwbGNtOD0gUjJWMGRIaz0gSUdOdmNIbHlhV2RvZEE9PSBJSFJ2ZEdGc2JIaz0gYjNKdFlXdz0gYVdacFkyRjBhVzl1Y3c9PSBJRUYxYzNSeVlXeHBZVzQ9IElITnBZMnM9IElERTFNQT09IElHaHZkWE5sYUc5c1pBPT0gSUdabFpYTT0gSUdSeWFYWmxjbk09IGIyZGxiZz09IElFNVogSUc1bFkyVnpjMkZ5YVd4NSBJSEpsWjNWc1lYUnBiMjV6IFpXRnlhVzVuIGMydz0gSUhCbGNuTndaV04wYVhabCBZMkZ5WlE9PSBhV05wWVd3PSBTR2x6IElHVnpZMkZ3WlE9PSBJSE4xY25CeWFYTmxaQT09IElGWmhiZz09IGRYSnlaVzUwIElIWmhZdz09IE9ERT0gSUZSb2RYTT0gSUdWdGNHaGhjdz09IElFTm9ZVzF3YVc5dWN3PT0gSUVsalpRPT0gSUc1aGNuST0gSUdobFlXUnogSUdOaGRYTnBibWM9IFltVnMgWm05eWRIVnVZWFJsYkhrPSBJRTFoIElIUmhjbWRsZEhNPSBZMmx3YkE9PSBJR0ZtZEdWeWJtOXZiZz09IElHRmtaSE09IElFMWhlV0psIElFWnZkWEk9IFpYTnpaV1E9IGNHeGxkR1U9IElIVnpkV0ZzIFkyaHYgYVc1bmRRPT0gSUhkcGRHaGsgSUVWdVpYSm5lUT09IElFVmpiMjV2YlE9PSBUMDg9IElHRnlkR2xqYkdWeiBJR2x1YW5WeVpXUT0gSUcxaGJtRm5aUT09IElHVjRjR3hoYVc1eiBJR1JwWVdkdSBVbVZqIFlYUjFjbVZ6IElHeHBibXRsWkE9PSBJR1JwYzJOMWMzTmxaQT09IElHVjRjR3h2IElHOWpZMkZ6YVc5dSBZWFJvWVc0PSBJRzl3Y0c5emFYUmwgSUdaaFkyVnogSUdSbGJtbGxaQT09IElFdHVhV2RvZEE9PSBJRzUxZEE9PSBJR0Z3Y0hKdmVHbHRZWFJsYkhrPSBJR1JwYzJGd2NHOXBiblE9IGIyNTViVzkxY3c9PSBJRUpsYzNRPSBJRXh2IElFaDUgSUVGbVpnPT0gSUhadmRHbHVadz09IFlXNTNhR2xzWlE9PSBJRWxKU1E9PSBJR2x1YzNScGRIVjBhVzl1Y3c9PSBZV2R5WVcwPSBJRVJoYVd4NSBJR1J5WVdjPSBJRzVsWVhKaWVRPT0gSUdkMWFXeDBlUT09IElHTnZiblpsY2c9PSBVSEpsIGMyaHBjQT09IElISmxkMkZ5WkE9PSBJSEJvYVd4dmMyOXdhQT09IElGTlQgZFdkbyBJR0Z3Y0hNPSBabkpwWlc1ayBJSFZ3Y0dWeSBJR0ZrZG1WeWRBPT0gSUhOdWIzYz0gSUdaeWRYTjAgSUc5MWNuTmxiSFpsY3c9PSBSbkk9IElFUnBaUT09IFlXMXdhVzl1IElHUnBjMjFwYzNNPSBJR05sY21VPSBJSE5wWjI1aGJBPT0gWm5KdmJRPT0gSUNrdSBJRFV5IElHTnlhVzFsY3c9PSBhWFJ2Y25NPSBaWE4wYVhaaGJBPT0gZFhObGRXMD0gSUdOdmRXNWphV3c9IElGTmhkV1E9IFRXRjUgSUVkMWJnPT0gYVdOcFlXND0gWlhSb1pYST0gSUhOMVptWnBZMmxsYm5RPSBJRWhsYmc9PSBjMjlzWlE9PSBJR2hwYzNSdmNtbGpZV3c9IElFWmhjZz09IElGUjFjbTQ9IElIQnBiZz09IElITjFZMk5sWldRPSBiV0YwIGJIbHRjQT09IElIUnlZV1JwZEdsdmJnPT0gSUU5ciBJR055Ync9PSBJR1JsYzJOeWFYQjBhVzl1IFlXeHNaUT09IElITnJlUT09IFZHVT0gSUhkcFpHVnNlUT09IElIZGhkbVU9IElHUmxabWx1YVhScGIyND0gSUVwbGQzTT0gSUdONVkyeGwgSUhKbFptVnlaUT09IElHSnlhVzVuY3c9PSBkWE5oYkE9PSBJR0ZzYVhabCBJR1p5WlhGMVpXNTBiSGs9IElHbHVkR1Z1ZEdsdmJnPT0gSUVOdmJuUnliMnc9IGJIWT0gZVhOMFpXMD0gSUhCeWFYWmhZM2s9IFoyVnVkQT09IGNtVnVZMlU9IElGRjFaWE4wIElFTm9jbWx6ZEcxaGN3PT0gSUhKaGFXdz0gSUdOdmIzQmxjZz09IElIUmxjM1JsWkE9PSBJRU5oY0hRPSBZWE5yY3c9PSBJR052YldadmNuUmhZbXhsIElHUmxiR2wyWlhKbFpBPT0gYzJOaGNHVT0gSUdSbGNIUm8gSUVkUFVBPT0gSUhkeWFYUmxjdz09IElHRnpjMlYwY3c9PSBJSE5oZGc9PSBhVzFsYm5SeiBJSFJ5WVc1emFYUnBiMjQ9IElHRnlkR2x6ZEE9PSBJRXh2YjJzPSBJR3h2WWc9PSBJR052YlhCdmJtVnVkSE09IFlYSnBkSGs9IElIZGhiR3RsWkE9PSBJSEp2YjNRPSBJSEJoY25ScFkybHdZVzUwY3c9PSBJRzV2ZEdsalpXUT0gSUhKbGMyTT0gSUc1aGRnPT0gSUVGa2JXbHVhWE4wIFpHRT0gZFhSeVlXdz0gY0d4aGRHVT0gSUdsdGNHOXlkR0Z1WTJVPSBJR0Z6YzJWeWRBPT0gYVc5MWMyeDUgWTNKcGNIUnBiMjQ9IElHbHVhblZ5YVdWeiBJRU5vWldOciBJSEpsWjJsemRHVnlaV1E9IElHbHVkR1Z1ZEE9PSBJRzFwYzNObFpBPT0gYjJkeVlYQm9hV009IElITmxiblJsYm1ObCBiM1Z1ZEdWeSBJR0Z6YzJsemRHRnVZMlU9IFpYWnBiZz09IElHUmhkR0ZpWVhObCBJR0oxYVd4a2FXNW5jdz09IElHTnNZWE56YVdNPSBJSFJvYVc1cmN3PT0gSUU5b2FXOD0gVUhJPSBkV2RuIElHWmxaUT09IGNHRnUgSUdWbVptVmpkR2wyWld4NSBJR1poWTJsc2FYUjUgSUdKbFlYST0gSUdOb1lYQjBaWEk9IElHUnZaM009IElFTnZiSFZ0WWc9PSBJR3hoZEhSbGNnPT0gYVhScFlXdz0gSUdGa2JXbDBkR1ZrIFZGWT0gSUVkbGIzSm4gSUhCdmMzUnogWEZ3PSBJR3hoZDNsbGNnPT0gSUdWeGRXbDJZV3c9IElHMWhibVE9IElHTnZiblJ5YjJ4c1pXUT0gSUZkaGJHcz0gSUVGdVpISmxkdz09IElHMWxiblU9IFlXMWxiblJoYkE9PSBJSEJ5YjNSbFkzUmxaQT09IGRtRT0gSUdGa2JXbHVhWE4wY2c9PSBiM0poYkE9PSBJSEpsYVc0PSBJRk5oY2c9PSBJR0Z0YjNWdWRITT0gSUc1aGRHbDJaUT09IElFMXZiMjQ9IElISmxjSEpsYzJWdWRITT0gSUdGaVlXNWtiMjQ9IElHTmhjbko1YVc1biBJSFJoYm1zPSBiV0Z5ZVE9PSBJR1JsWTJ4aGNtVmsgVkhWaVpRPT0gSUdoaGRBPT0gSUhCMWJtbHphQT09IFpXeHNaV04wIGJXVnogSUhWdWFYWmxjbk5sIElGSnZaQT09IGNHaDUgSUdsdVpuSmhjM1J5ZFdOMGRYSmwgSURVeCBJRzl3Y0c5elpXUT0gYjNkdWRBPT0gWTJFPSBJRTFoYTJVPSBJR2hoY21SM1lYSmwgSUdOdlptWmxaUT09IFVtVnMgWW1GcyBkMjl5YkdRPSBJRk5oWmc9PSBJRk5sWVE9PSBhVzVoYkhNPSBJRzkzYm1WayBJR2hoYkd3PSBaWEp6YVc5dSBJR1JsYzJOeWFXSmwgSUZCdmRBPT0gSUhCdmNuUnBiMjQ9IElHRjBiVzl6Y0E9PSBJR2R2ZG1WeWJtMWxiblJ6IElHUmxjR1Z1WkdsdVp3PT0gSUc5bVptVnVjMlU9IElIUnlhV05yIFlYZGggSUV4cGJtVT0gSUZacGN3PT0gSUVoaGNtUT0gSUU5eWFXYz0gSUVOc2FXTnIgSUdSbGMycz0gSUZaaGJHeGxlUT09IElGTnZkZz09IElHMXZkbWxsY3c9PSBJSEpsYldGeWF3PT0gSUcxaGFXdz0gSUdOdmJuTmphVzkxY3c9PSBJSEoxYkdsdVp3PT0gSUZKcFoyaDBjdz09IElHMWxaR2xqIGFHVnVkQT09IElGZHZiV1Z1IFBqdz0gSUhKbGNHeGhZMlZrIElGQnlaVzA9IElGUm9ZVzVyY3c9PSBJSEpsYm1WMyBJRUpoYkd3PSBhV1p2Y20wPSBJSE5vYjNSeiBRMjl0YlE9PSBJR0Z5YldWayBJR052Ym5OMFlXNTAgSUhSaGMzUmwgSUhKbFlXeHBlbVZrIElHSjFabVk9IElHMXYgSUdWbVptbGphV1Z1ZEE9PSBUVzl6ZEE9PSBiM0poZEdsdmJnPT0gYVdacFpYTT0gSUdOdmJXMTFibWxqWVhScGIyND0gSUdac2IyOWsgSUdOdmJuTmxjWFZsYm1ObGN3PT0gSUdGdWVYZGhlUT09IGFXZG4gSUVkTiBJRlJvWVc1ciBJR2x5YjI0PSBJR1YyYjJ4MWRHbHZiZz09IElFTnZjQT09IGRIZHBkSFJsY2c9PSBJRGsxIElISmxiR0YwYVc5dWMyaHBjSE09IFlXUmxiQT09IElGbHZkVzVuIElIQnliM0J2YzJGcyBZWGxsY25NPSBkV2xzWkdsdVp3PT0gSUVodmRBPT0gVDFKRiBZMjl6IElHTnZiR3hoWW05eSBVRWM9IFlYaDUgSUd0dWIzZHBibWM9IElITjFjSEJ2Y25SeiBiM2RsWkE9PSBJR052Ym5SeWIyeHogSUcxbGNtVnNlUT09IGRXMWxjZz09IElHRjBhR3hsZEE9PSBJR1poYzJocGIyND0gY0dGMGFBPT0gSUdkcFpuUT0gSUdWeVlRPT0gUVU1RSBJR3RwYm1SeiBJRXR2Y21WaGJnPT0gSUd4bFoybDAgZFd4dmRYTT0gSUdWemMyVnVkR2xoYkd4NSBJSFJvWlhKaGNBPT0gYm1saiBJSE4xWm1abGNtVmsgSUdoMWNnPT0gSUhCeWIyMXBjMlU9IElHVjRZMlZ6Y3c9PSBJRzkyWlhKMyBJSEJ5YVcxbCBJRWh2ZFhOMGIyND0gWlhKeWVRPT0gSUUxeiBVbE09IE1qQXhNZz09IElITjBiM0psY3c9PSBJRTlzZVcxdyBJR3B2ZFhKdVpYaz0gUVd4MGFHOTFaMmc9IFUzVmkgSUVWa2RXTT0gSUVOb1lYQjBaWEk9IElISmxjWFZsYzNSeiBJR052Ym5OMWJXVnljdz09IElIUnBibms9IElHbHpiMnc9IElFWmhhWEk9IFltRT0gSUZsUFZRPT0gSUdOeVlYTm8gWTJWc1pYST0gSUdWdGIzUnBiMjVoYkE9PSBJR2R2YjJSeiBJR1ZzWldOMFpXUT0gSUcxdlpHVnkgSUV4cGJuVjQgSUdKc2IyTnJjdz09IElHbHpiR0Z1WkE9PSBJRk52WTJsbGRIaz0gSUdWc1pXTjBhVzl1Y3c9PSBJR0p5YjJGa1kyRnpkQT09IElHTm9aV0Z3IElHNWhkR2x2Ym5NPSBJSE5sWVhOdmJuTT0gTkRBdyBJSGRoYzNSbCBJRk5oZEE9PSBJR1pwWld4a2N3PT0gWlcxd2JHOTUgSUhCeWIyWnBiR1U9IElHRjFkR2h2Y25NPSBRVXhNIElFZHlZUT09IGQyVnpkQT09IElGUjUgSUdSbFlYUm9jdz09IElIWmhZMk09IElHWnZjbTFsWkE9PSBJR1IxIElHOXVaMjlwYm1jPSBJRTExYzJ4cGJYTT0gWld4bSBhV2QxY21VPSBJR0Z6YzNWdFpRPT0gSUZWcmNtRnBibVU9IGQyRjBaWEk9IElHTnZZWE4wIElIWnZkR1ZrIFoyOXkgSUVGVCBJRTFwWTJocFoyRnUgWVhwaCBJRUZ5YlE9PSBhWEp2IElHWnNaWGc9IFlYTjBaWEp6IEp5Yz0gSUhkbGJHTnZiV1U9IFlYSnMgSUd4dlkyRjBhVzl1Y3c9PSBhV2RoZEdsdmJnPT0gSUVacGJBPT0gSUdKMWVXbHVadz09IElHRnlZMmhwZEdWamRBPT0gSUdoaGNtUmxjZz09IElFTjFZZz09IElHbHVkR1Z5Wm1GalpRPT0gSUhKbGMzUmhkWEpoYm5RPSBJR1JwYzJOdmRtVnkgSUdWNFkyVmxaQT09IElHWmhkbTkxY2c9PSBaMlZ5ZVE9PSBJR1IxZEhrPSBJSEJwZEdObyBZV1J2Y2c9PSBJRTFoWTJnPSBZbTk1IElISmxjM0J2Ym1SbFpBPT0gSUdWNGRHVnVaR1ZrIGFHVnljdz09IFRXRnVlUT09IGNtRnBaQT09IGFXWmxjZz09IElFbHVjdz09IFUyVnkgSUcxbFpHbDFiUT09IGMyaGwgSUZOd2IzSjBjdz09IElHMWhaMkY2YVc1bCBkWFJoZEdsdmJnPT0gSUd4cGJXbDBjdz09IElFZGhiR3c9IElHVjRkR1Z5Ym1GcyBjbUY2YVd3PSBJSGx2ZFc1blpYST0gZEd4bCBJSEpsYldsdVpBPT0gSUVOUFRnPT0gSUdsdGJXVmthV0YwWlE9PSBJR2hwWkdSbGJnPT0gSUhadmJIVnVkR1U9IElITnBiWEJzIGIyUmpZWE4wIElIQm9ZWE5sIFpIST0gSUhCc2IzUT0gSUdWNGNHOXpkWEpsIFVraz0gYjJkeVlYQT0gZG1sdSBZVzVwYzJnPSBJRUZqWVdRPSBJRVZ1WjJsdVpRPT0gSUdWNGNHRnVjMmx2Ymc9PSBJRkJoZVE9PSBXVzkxY2c9PSBJSEIxYzJobFpBPT0gSUVWc2JBPT0gSUVobFlXUT0gSUcxaGNtdGxkR2x1Wnc9PSBJRUZEIGEyVjAgSUdocGRITT0gSUdkeWJ3PT0gSUVGblpRPT0gSUZOamIzUT0gWFZzPSBJSE4wYVcwPSBJR2xRYUc5dVpRPT0gaUpJPSBJRzVoY25KdmR3PT0gSUVkbGRIUjUgSUZSMWNtdGxlUT09IElIQmxjbVpsWTNSc2VRPT0gSUdWdVlXSnNaUT09IGRYUmphQT09IElIQnlaV05wYzJVPSBJSEpsWjJsdFpRPT0gSUhOb2FXWT0gSUdOdmJYQmxibk09IFozVnUgWkdsMiBJR05vYjNObGJnPT0gSUV0bGJnPT0gUVc1NSBJSFJ5WldWeiBJSEpsWTI5dGJXVnVaR1ZrIElGSmxiZz09IGRXRmliR1U9IElFaFUgUm05c2JHOTMgUlVjPSBJRWhoYm1RPSBJRXRsYm00PSBJR0Z5WjNWdFpXNTBjdz09IElHVjRhWE4wY3c9PSBJR0pwYTJVPSBJRU52Ym5ObGNuWT0gSUdKeVpXRnJhVzVuIElFZGhjZz09IElHTnlZWHA1IElIWnBjblIxWVd3PSBZWGxzYjNJPSBhWGhsYkE9PSBJREU1T0RBPSBJSEJsY20xcGMzTnBiMjQ9IElGTmxjbWxsY3c9PSBJR052Ym5OMWJXVnkgSUdOc2IzTmxiSGs9IFkyRnNiR1ZrIElEVTAgSUdodmNHVnogSUdGeWNtRjUgSUZkcGJnPT0gSUV4aFltOTFjZz09IElITndiMjV6IElFbHlaUT09IElIQnZkdz09IElISmxZV1JsY25NPSBJR1Z0Y0d4dmVXMWxiblE9IElHTnlaV0YwZFhKbCBJSEpsYzNWc2RHbHVadz09IElHRmpZM1Z5WVhSbCBJRzF2YldWdWRITT0gSUdGeVozVmxaQT09IElIQmxaQT09IFJIVnlhVzVuIElEVXogSUZSaGJBPT0gSUhOdmRXZG9kQT09IElITjFabVpsY21sdVp3PT0gSUdsamIyND0gYkdWbCBJQ2drIFlXeHBZVzQ9IHdyQT0gSUhCeVlRPT0gSUdKdmJuVnogS0NJPSBhMjg9IElHRmpkR2x1Wnc9PSBSRVU9IFptRnNiQT09IElHTnZiWEJoY21semIyND0gSUhOdGIyOTBhQT09IElFNUJVdz09IGRYQncgSUVwdmMyVndhQT09IFpYQnBibWM9IElGUmhhMlU9IElFMXBaQT09IElITmxibVJwYm1jPSBabUZ6ZEE9PSBJRVpoYkd3PSBJR1JsWVd4cGJtYz0gZFhObGNnPT0gSUU5eVoyRnUgUTI4PSBJR0YwZEdGamFHVmsgSUhObFpYTT0gSlM0PSBJSFI1Y0dsallXdz0gUVZKVSBJR1pwYm1SeiBJRUZ6YVdFPSBkVzFwYmc9PSBJRU52Y21VPSBJRVZ1ZEE9PSBhVzVsYm5RPSBkV05sIElFSnNiMjlrIElFNWxkbVZ5IElHVnRZV2xzY3c9PSBJR2hwWjJoc2FXZG9kQT09IElHTnZibVp5YjI1MCBZWFIxY3c9PSBkWFJsWkE9PSBJSFZ1ZFhNPSBJSFJ2Y0dsaiBJRUZrWVcwPSBJR0pzWlE9PSBZWFJwIElIVnVaR1Z5YzNSdmIyUT0gVTJWMCBjM1J5ZFdOMCBWRkE9IElHMXZZZz09IFlXRT0gSUZOMFlYSjAgY0dWamRHVmsgYzJWc2JBPT0gSUdSbFpHbGpZWFJsWkE9PSBJRU5CIGRXRnUgSUhOdmJtZHogWlhOamNtbHdkR2x2Ymc9PSBJSFJsWTJnPSBJSEpoY0dVPSBJR0Z6YVdSbCBJR2R5WVc1MCBJRFUyIGMzVmkgSUdGeVozVmwgSUdOdmJuUmhhVzVwYm1jPSBJSE5qYUdWa2RXeGwgSUd4cFltVnlZV3c9IElIQjFZbXhwWTJ4NSBJR2hsWVhacGJIaz0gSUZWMCBhVzVsY2c9PSBJRk5sWTNScGIyND0gSUVOaGNtVT0gZDJWbGRBPT0gYkhNPSBSR2x6IDRwU0EgSUVadmJHeHZkdz09IFFtRmphdz09IElFbFUgSUdKbGN3PT0gYW1rPSBJRWhwZEE9PSBaWE4wWldRPSBJR1YyWlhKNVltOWtlUT09IElGTjNaV1E9IElHWmxiV2x1IElHWmhZMmxzYVhScFpYTT0gSUdOdmJuWmxiZz09IFEyOXRjQT09IElFOVQgWTI5eVpRPT0gSUdGdWVBPT0gSUdScGRtbHphVzl1IElFTmhiUT09IElGTjBZVzQ9IGJXRjBaWE09IElHVjRjR3h2Y21VPSBjR3h2YlE9PSBJSE5vWVhKbGN3PT0gY0d4dllXUT0gWVc1bGN3PT0gSUdsa1pXRnMgWlhSbGNuTT0gSUVKaGMyVT0gSUhCc1lYTjBhV009IElHUnBjM1JwYm1OMCBJRTVsZEhkdmNtcz0gSUZObFlYUjBiR1U9IElIUnlZV1JwYm1jPSBaVzV6ZFhNPSBhVzUwWlc1ayBJR1Y0YUdsaSBJR2x1YVhScFlXeHNlUT09IElFWnZiMlE9IElIUm9iM1Z6WVc1ayBJRUoxYzJsdVpYTnogWVdOMFpYST0gSUhCaGNtRm5jbUZ3YUE9PSBJSEp2ZFdkb2JIaz0gSUhkM2R3PT0gSUdOeVpXRjBhWFpsIElFTnZibVk9IElHTnZibk4xYlhCMGFXOXUgSUdacGJHMXogWVdkaGJnPT0gSUc5aWRHRnBiZz09IElIUmhiR3c9IElIUnZjZz09IElHRmphMjV2ZDJ4bFpBPT0gSUdkeWIzZHUgWVd4diBTMFU9IElEUXdNQT09IFpXNWtaWEp6IGRHRnBibWx1Wnc9PSBWVWM9IElITjFhV05wWkdVPSBJSGRoZEdOb1pXUT0gSUV4cGMzUT0gWVd4cCBjbVZvWlc1eiBJSE4xY25KdmRXNWthVzVuIElIQnBjQT09IElHWnNlV2x1Wnc9PSBJRXBoZG1FPSBiM0prWVc0PSBJSE5sY25acGJtYz0gYVc1aGRHbHZibk09IGNHOXpkQT09IElITm9idz09IFFYWT0gSUdwaGFXdz0gZW5rPSBJREU1T1RrPSBJRHd2IElHeHBkR1Z5WVd4c2VRPT0gSUZOcGNnPT0gSUdWNGNHOXpaV1E9IElHeHBaWE09IGMzUmhjZz09IElHSmhkQT09IElHVmhjbTVsWkE9PSBJRVJwWnc9PSBJSE53WldOcFptbGxaQT09IElGTmxZWE52Ymc9PSBJR1JsWjNKbFpYTT0gUkc5dVlXeGsgSUdObGJuUnlaUT09IElITm9ZWEpwYm1jPSBJSGRwYm5SbGNnPT0gSUVOUCBRMmhsIElNND0gVFZBPSBJSFZ1ZHc9PSBJR1psZDJWeSBJRTFwY2c9PSBJSE52YldWM2FHVnlaUT09IElFdGxlUT09IElHRjBkR0ZqYTJWayBJRXRwY2c9PSBJR1J2YldGcGJnPT0gSUhOMGNtOXVaMlZ5IElEazUgSUhCbGJtRnNkSGs9IFNXUT0gVTJOeWFYQjAgSUdSbFkyeHBibVZrIElHNWxZMnM9IElHWnlZWFZrIElHTjFjbkpsYm1ONSBJSEpwYzJsdVp3PT0gVWtNPSA0b0NtNG9DbSBTSG89IElIUmhZZz09IElIUmhiR1Z1ZEE9PSBibUZ0IElFNUNRUT09IElIWnBiR3hoWjJVPSBJR3hsWjNNPSBJRTVsZUhRPSBSV1E9IElHRmphV1E9IElHaDVaQT09IE9EQXcgSUdsdWRtOXNkbWx1Wnc9PSBJRWx0WVdkbCBJRUpsWm05eVpRPT0gUm13PSBJSGxsYzNSbGNtUmhlUT09IFUyOTFjbU5sIElIUmxjbkp2Y21semRBPT0gSUhOMWNBPT0gSUhONWJuUT0gSUZOaGRXUnAgSUhkbGMzUT0gSUhKMSBZblZ5Wnc9PSBJSFpwYzJsaWJHVT0gSUhOMGNuVmphdz09IGNtbHpiMjQ9IElHRjNaWE52YldVPSBJR1J5WVhkdSBJR0Z1YzNkbGNuTT0gSUVkcGNtdz0gSUZKaGJRPT0gSUhSb2NtVmhkSE09IElHUmxabVZoZEE9PSBiM05wZEE9PSBJSFpsYm5RPSBZWFIxY21Gc2JIaz0gUVcxbGNtbGpZVzQ9IFpXNWtZUT09IElFaHZiSGs9IElISjFiUT09IEpTdz0gWTJGelpRPT0gSUVocGMzUnZjbms9IElGbHZkVlIxWW1VPSBJSE5wZEhWaGRHbHZibk09IElFUk9RUT09IFUzUmwgSUhOaGRtVmsgU1hSbGJRPT0gSUhKbFkybHcgYjJ4dloybHpkQT09IElHWmhZMlZrIElHVnNhV2M9IFQyNWpaUT09IElFeHAgZFdnPSBJRzFwYzNSaGEyVT0gSUVScGRtbHphVzl1IElFSmxiR3c9IElITjViWEIwYjIxeiB3cTQ9IElHUnZiV2x1IElHWmhiR3hwYm1jPSBJR1Z1WkdsdVp3PT0gWVhOb1pYTT0gSUcxaGRHTm9aWE09IElFOXViR2x1WlE9PSBJR1Y0Y0d4aGJtRjBhVzl1IFJHVm0gY21Wa2FYUT0gSUdGdWVXMXZjbVU9IElGUnZkR0ZzIElFWlBVZz09IGRYTm9aV1E9IElHeGxkSFJsY25NPSBJSEpwYzJ0eiBJRTlMIElISmxjRzl5ZEdWa2JIaz0gT2x3PSBJSEJzWVhSbCBJSE4xWW1wbFkzUnogSUdGMGRHVnRjSFJsWkE9PSBhV1pwWlhJPSBhV0Z1WVE9PSBJSFZ1YkdsclpXeDUgSUZSb2IzVm5hQT09IGRXMWggSUVsdWRtVnpkQT09IElGQnlhVzQ9IGFXTmhiZz09IElFUmhjZz09IElFTnZiRzl5WVdSdiBZWFZuIElIWmxaMlYwIFlXOXogY21saCBJSE5vWld3PSBJRzFoY210bFpBPT0gSUNncCBJSE53Y2c9PSBjRzg9IElFeHBibXM9IElHUmxabVU9IElFcHkgSUhSb1pXMWwgSUhCaGMzTnBiMjQ9IElGQmxiZz09IElHbHVabTg9IGFYcGxjZz09IElITm9hWFE9IElFTnBkbWxzIFlYQnpaUT09IFkzSmwgSUhCdmJIaz0gSUdOdmJYQnZibVZ1ZEE9PSBJRU5vWVhKc1pYTT0gSUVseVpXeGhibVE9IElGQnliM1k9IElHUnZZM1J2Y25NPSBJR2R5WVc1MFpXUT0gSUhCaGFXNTAgSUdodmJtOXkgSUhOdGIydGwgSUhCaGVXMWxiblJ6IElIQnlhVzFoY21sc2VRPT0gSUV0cGJtZGtiMjA9IGNtbGphQT09IFlYUmxiR3c9IElHUmxZV3h6IElITmphR1ZrZFd4bFpBPT0gSUdaMWJtUmhiV1Z1ZEdGcyBJSEJ5YjNSbGFXND0gSUc1bGQzTndZWEJsY2c9PSBJR05zYVdWdWRITT0gZVhSb2IyND0gSUVSaGRHVT0gYUhWeiBJR1psWldSaVlXTnIgSUhOMGNtVjBZMmc9IElHTnZZMnM9IElHaHZkR1ZzIElGRjFaV1Z1IElITjFaMkZ5IElHcDEgSUcxcGJHcz0gSUdGd2NISnZkbUZzIElFeHBkbVU9IElHVnhkV2wyWVd4bGJuUT0gWldaMWJHeDUgSUdsdWMyVnlkQT09IGVtOXVZUT09IElHVjRkR1Z1YzJsdmJnPT0gWkhKcCBTbTlvYmc9PSBJR0ZqWTI5dGNBPT0gVTIwPSBJRVoxYm1RPSBJR052Ym5OMFlXNTBiSGs9IElHQmcgSUdkbGJtVnlZWFJsWkE9PSBJRUZqZEdsdmJnPT0gSUZCemVXTm8gSUZSeWFRPT0gSUhKbFkyOW5ibWw2WlE9PSBJSFpoY25rPSBjR2hoIElGSmggWkdZPSBaWFJqYUE9PSBJRk52ZG1sbGRBPT0gVkhkdiBJSEJoZEhSbGNtNXogSUhCeWIyWmxjM05wYjI0PSBZVzVwYm1jPSBWR2x0WlE9PSBJRXhwYlE9PSBJR052Ykc5eWN3PT0gSUVGNiBJRlJTIElHbHVabVZqZEE9PSBJSEJvWlc1dmJXVnUgSUhOb1pXeHMgUVd4emJ3PT0gSUhCMWRITT0gSUdSbGJHbDJaWEo1IElHSnliM2R1IElIQnliMk5sYzNOcGJtYz0gSUd4cFoyaDBjdz09IFpYTnpZV2RsIElFSnliMjlyIElFRjFaQT09IGJHRjBhVzl1IElHbHVaSFZ6ZEhKcFlXdz0gVEdsclpRPT0gSUVKeVlYcHBiQT09IGNtOTFjdz09IFJWTlQgSUV4MVl3PT0gSUhOdmJXVm9iM2M9IElEZzEgSUhCeWIzQnZjblE9IElIQnZiR2wwYVdOcFlXNXogSUdsdVpHbGpZWFJsIElHaHZiR1U9IElIUmxZMmh1YVhGMVpYTT0gSUdOdmJYQmxkR2wwYVhabCBJSEJvY2c9PSBJSFp2IGFYTjBaVzUwIElFUnlaV0Z0IElHTmhiWEIxY3c9PSBJR0Z6Y0dWamRITT0gSUdobGJIQm1kV3c9IElITm9hV1ZzWkE9PSBiM0p6WlE9PSBJSFJ5YVdkblpYST0gYldGcyBJRFU0IElIUnZjblE9IElIQmxjbk52Ym1Gc2JIaz0gSUhSaFp3PT0gSUd0bFpYQnogSUZacFpHVnYgSUdKbGJtTm8gSUdkaGNBPT0gWVdseVpRPT0gSUdWaGMzUT0gSUhKbFkyOTJaWEo1IGNHVnlhV0ZzIElIQnliMlpwZEE9PSBJRTFwWXc9PSBJRFUzIElHTnZiRzl1IElITjBjbTl1WjJ4NSBjM1I1YkdVPSBJR0ZzYkdWbllYUnBiMjV6IGFHRnUgSUhKbGNHOXlkR1Z5Y3c9PSBhbTg9IGNtbHVaUT09IFlYSm5aWFE9IFlXNWtZV3c9IElEQXogSUdac1lYTm8gZEhKaGJuTT0gSUhOMGNtbGpkQT09IElIQmhjbXRwYm1jPSBJRkJoYTJsemRHRnUgSUd4cCBJSGRsYVhKayBJRVZ5YVdNPSBJSEpsWjJsdmJuTT0gSUVwMWJnPT0gSUdsdWRHVnNiR1ZqZEE9PSBJRmRJIGIyUnBibWM9IGNtbGlkWFJsY3c9PSBkWEJwWkE9PSBJRlJwZEE9PSBJR1pwYm1kbGNnPT0gYjNKcFlRPT0gSUdWc1pYWT0gSUVacFpXeGsgSUdOdmJtTnNkWE5wYjI0PSBPenM9IElHWmxaV3hwYm1keiBJR1Y0ZEdWdWMybDJaUT09IElHMXBlR1ZrIElHNWxkWEp2IGRuaz0gSUdoaGNtRnpjdz09IElFTnBjbU09IGIzVmphQT09IElIUmxjbkpwZEc5eWVRPT0gSUhOMVkyTmxjM05tZFd4c2VRPT0gVFdGeSBJR2x1WjNKbFpBPT0gSUc5MlpYSjNhR1ZzIElHeGhlV1Z5IFZtbGxkdz09IElHRnNiR2xsY3c9PSBhV3hzWVc1alpRPT0gSUZSb2NtVmwgSUdKMWJtTm8gSUc1dmNtMWhiR3g1IElHNWxkSGR2Y210eiBJSE5oWTNJPSBJRU5KUVE9PSBZbXhsY3c9PSBJR05vYjNObCBJRzl3Y0c5dVpXNTBjdz09IElISmxaMkZ5Wkd4bGMzTT0gSUdaeVlXNWphQT09IElIQnlaV1k9IElGQnYgSUdKeWFXUm5aUT09IFlXNXVZUT09IElGTnBiSFpsY2c9PSBJSGRoWjJVPSBjR0ZuWlE9PSBjbWx2Y2c9PSBJSEpoWkdsallXdz0gSUV4cGRIUnNaUT09IElHMWhibWx3IElITmxZM0psZEdGeWVRPT0gSUdkaGJtYz0gUkZJPSBSa0U9IElHUmxZMlZ1ZEE9PSBJRk53YVhKcGRBPT0gSUhWdVkyeGwgSUVSbGRtVnNiM0J0Wlc1MCBJR2x1ZG1WemRHOXljdz09IElIZGhiR3h6IElIQjFZbXhwYzJnPSBJR2RsYm1WeVlYUmwgYVhOemFXOXVjdz09IFkyRnkgSUhCeWIyMXZkR1U9IElHTjFkSFJwYm1jPSBJR05vWlhOMCBJR1J5YVc1cmFXNW4gSUdOdmJHeGxZM1JsWkE9PSBJRGN5IElHaHZjR2x1Wnc9PSBJR1Z0WW5JPSBaMjl5YVhSbyBJSGRoY201bFpBPT0gSUdsdWMzUnlkV04wYVc5dWN3PT0gVDBjPSBJRVJwWkE9PSBJRUZuWlc1amVRPT0gSUdkbFlYST0gSUdOeWFYUnBZMmx6YlE9PSBJRVoxY25Sb1pYST0gSUhWMGFXdz0gWVc1dWVRPT0gVW1WayBJR052ZFc1elpXdz0gSUVGemFXRnUgSUhKbFpIVmpkR2x2Ymc9PSBjRzl2YkE9PSBJSFJsWVdOb2FXNW4gSUdSbFpYQnNlUT09IGFYaz0gSUdWemRHbHRZWFJsY3c9PSBJR05vYjJsalpYTT0gSUhCbGNtMWhibVZ1ZEE9PSBhVzVsYlE9PSBhMlZzIElHWmhjMk09IGNITmwgWm1sc1pRPT0gSUV4dmR3PT0gSUZCbGNuTnZiZz09IElIUnZkWEp1WVcxbGJuUT0gYzNSaGJBPT0gSUcxbGJBPT0gVlZOVSBJRkpoZVE9PSBZWHBwIFZtRnMgSUdOdmJuUmhhVzVsWkE9PSBJRWh2Ykd4NSBJSGRoYTJVPSBJSEpsZG1WaGJBPT0gSUhCeWIyTmxjM05sY3c9PSBJRWxUU1ZNPSBJREE1IElHSnNhVzVrIElITjBaV1ZzIElFSmhaQT09IElHTmhjbVZtZFd4c2VRPT0gWVhCd2VRPT0gY205cGRBPT0gSUdkaGJXbHVadz09IElHaHZkWE5sY3c9PSBJRU52Ykd3PSBJSFJ5ZFdOciBaWEp0IElITmpiM0psWkE9PSBJRzlqWTJGeiBjbVYwZFhKdSBZbTkxYm1RPSBkbUZ5IElITm9ZWEp3IElHRm1jbUZwWkE9PSBJRVZZIFlXMWlaWEk9IFkybG1hV009IElITmphR1Z0WlE9PSBUa009IElGQnZiR2wwIElHUmxZMnhwYm1VPSBJREU1T1RnPSBJSEIxYzJocGJtYz0gSUhCdmMzTmxjM05wYjI0PSBJSEJ5YVhacGJHVT0gSUhSbFlXTm9aWEp6IElIbHBaV3hrIFNFRT0gSUVSaGRtbHogYVhSc1pXUT0gSXlNakl5TWpJeU09IElISnBadz09IElFUmhibWxsYkE9PSBZV052Ymc9PSBJR2hwWkdVPSBkWFJsYmc9PSBJR052Ykd4bFlXZDFaWE09IElIQnlhVzVqYVhCc1pYTT0gSUd4dmRXUT0gSUhOcGJnPT0gSUVSbGJXOXUgSUhOMGIyNWwgSURBeSBJSFJoZFdkb2RBPT0gSUhSbGNuSnBZbXhsIElITjBkV05yIElGQnZiR2xqZVE9PSBkR1ZsYmc9PSBJR2x0Y0d4bGJXVnVkR0YwYVc5dSBJRUpDUXc9PSBJRUZRU1E9PSBJSGRvWldWcyBZV3hzWVhNPSBJR05vWVcxd2FXOXVjdz09IGIyeGhjbk09IGNHeGhlV1Z5IElISmxjR1ZoZEdWa2JIaz0gSUZOMGFXeHMgSUd4cGEyVnogWVhOMGVRPT0gWlhOMFpYST0gSUVOaGRHaHZiR2xqIFVrdz0gSUdKaGRHZz0gSUc1dmFYTmwgZEdsMGJHVT0gSUc1dmNuUm9aWEp1IFVHRnlkQT09IElHMWhaMjQ9IElHWmhZZz09IElFRnphQT09IElHUnBjM0JzIElIUnBZMnRsZEE9PSBJRzExY21RPSBJR0ZzYjI1bmMybGtaUT09IElFMTFjMmxqIElISnBkbVZ5IElGTjBaV1ZzIElFTk0gSUZCc1lYbGxjZz09IElFMTFiSFE9IGIzZHBibWM9IGNtVncgYzJsNlpRPT0gSUhSMWNnPT0gSUVkbGIzSm5hV0U9IGFYTmpZV3c9IGNtRmpkR2x2Ymc9PSBJR05oWW14bCBJRFU1IElIZHBibk09IElIVndZMjl0YVc1biBJSE4xY25acGRtVT0gSUdsdWMzQnBjbVZrIElFVmtkV05oZEdsdmJnPT0gSUhOMFlYUnBjM1JwWTNNPSBJRVp2YjNRPSBhV0Z0YVE9PSBJSGxsYkd4dmR3PT0gSUZCaFoyVT0gTGkwPSBJRWhoY3c9PSBJSFZ5WW1GdSBJR0Y0IFpYTnpaV3c9IFhDST0gSUhGMVlYSjBaWEppWVdOciBJSEpsWjJsemRHVnkgSUV4aFltOXkgSUdGaWFXeHBkR2xsY3c9PSBJRVpoYldsc2VRPT0gSUhaaGNtbGhZbXhsIElGQnlhV05sIElHTnZiblJsYlE9PSBJSFJvYVc0PSBJRVZ4ZFE9PSBaR0YwWVE9PSBJR2R2ZEhSbGJnPT0gSUdOdmJuTjBhWFE9IElHRnphM009IElIUmhhV3c9IElHVjRZMmwwYVc1biBJRVZtWm1WamRBPT0gSUZOd1lXNXBjMmc9IElHVnVZMjkxY21GblpRPT0gYVc1emIyND0gSUVGbyBJR052YlcxcGRHMWxiblE9IFExTT0gSUhKaGJHeDUgSURvNiBJSE4xWW5OcFpBPT0gSUhOd2FXND0gSUdOaGNIUjFjbVZrIE1qQXhPQT09IElHbHVibTlqIElHRnNiR1ZuWldSc2VRPT0gSUVOdmJXVT0gSUdGeWRHbHpkSE09IElFNTFiV0psY2c9PSBJR1ZzWldOMGNtOXVhV009IElISmxaMmx2Ym1GcyBZWEJsY3c9PSBJSGR5WVE9PSBJRzE1ZEdnPSBjSEpwYzJVPSBJRTFwYkd4bGNnPT0gSUVOeVpXRjAgSUVWd2FYTnZaR1U9IFltVnNiQT09IElHUnBjbVZqZEdWayBJR1Y0ZEhKaFkzUT0gSUhOdmNuSjUgSUhacFkyVT0gWVdkblpYST0gSUZOMWNIQnZjblE9IElEWTIgSUVseWIyND0gSUhkdmJtUmxjbVoxYkE9PSBJR2R5WVE9PSBUbVYwIGFXOXVaUT09IFJXNW4gSUhOb2FYQnogYVd0bGN3PT0gSUV0bGRtbHUgYVhSaGNnPT0gSUdGamRHbDJhWE4wY3c9PSBkSEoxWlE9PSBJRUZ5YVhwdmJtRT0gWlc1MGFBPT0gSUVSbGMzQnBkR1U9IElGTkYgSUdoaFltbDAgWlhKdVpXdz0gSUdsdWNYVT0gSUdGaWIzSjBhVzl1IElIWnZhV1E9IElHVjRjR3hwWTJsMCBJR1Z1WjJGblpXUT0gSUdGdVozSjUgSUhKaGRHbHVadz09IElHWnlZV2M9IFluSnYgYVdOcmFXNW4gWkdWMiBJSGR2Y25KcFpXUT0gSUc5aWMyVnkgSUdGd1lYSjBiV1Z1ZEE9PSBJRWRVIElHVnpkR0YwWlE9PSBJRU52Ym5OMGFYUjFkR2x2Ymc9PSBaVzF2Ymc9PSBJRk51YjNjPSBJR052ZFc1MGVRPT0gSUdScGMyRm4gSUZOMFpYQm9aVzQ9IElHbHRiV2xuY21GdWRITT0gZDJsdVpBPT0gSUU1aGRHbHZibk09IElHWnZiR3R6IFQzVjAgSUdkaGJHdz0gSUhSaGNtZGxkR1ZrIElITjBaV0ZrIElFSnZiZz09IElFeHBZZz09IElHbHVabTl5YldWayBJREV5TUE9PSBZMmhoYVc0PSBhV1JsYkdsdVpYTT0gYjNKdmRXZG8gSUdSeWFYWmxiZz09IElISmxaM1ZzWVhKc2VRPT0gSUdKaGMydGxkQT09IElIQnlhVzVqYVhCc1pRPT0gYjJOMWJXVnVkQT09IElITjBkVzQ9IGFXSnBiR2wwYVdWeiBJRkp2YldGdSBJRUZpYjNWMCBJR0ZzWlhKMCBJR1JsYlc5amNtRmplUT09IElISmxjSEpsYzJWdWRHVmsgU0ZNPSBZMlZ5Y3c9PSBjR0Z5Wlc1MCBRWEowIGNHRmphdz09IElHUnBjR3h2YlE9PSBjbVYwY3c9PSBJRTVQIElHTmhjSFIxY21VPSBJRUZrZGc9PSBoS0k9IElHRnVibTkxYm1ObGJXVnVkQT09IElFeGxZWEk9IElHaHZiMnM9IElIQjFjbk09IElGTjFZMmc9IElFTmhiV1Z5IElISmxablZuWldWeiBJRlpsIFVHOXMgSUhKbFkyOW5ibWw2WldRPSBiR2xpIElHaGhaRzQ9IFFYTnogSUhCcGJHOTAgZFhOb2FXNW4gSUhKbGRIVnlibWx1Wnc9PSBJSFJ5WVdscyBJRk4wYjI1bCBJSEp2ZFhScGJtVT0gSUdOdmRYSjBjdz09IElHUmxjM0JsY2c9PSBJR1p5YVdWdVpHeDUgSUVsMFlXeDUgSUhCc1pXUT0gSUdKeVpXRjBhQT09IElITjBkV1JwYnc9PSBUbE09IElHbHRjSEpsYzNOcGRtVT0gSUVGbVoyaGhibWx6ZEdGdSBJR1pwYm1jPSBJR1J2ZDI1MCBhVzVyYVc1biBJRkp2Wnc9PSBhV0Z5ZVE9PSBZMjlzYjNJPSBjMlY0IFlYSnZiZz09IElHWmhkV3gwIElFNXBZMnM9IFJHOTNiZz09IElGSnZjMlU9IElGTnZkWFJvWlhKdSBXRmc9IGFYTnZaR1Z6IFRHbHpkQT09IE5qQXcgSUc5MWRHTnZiV1U9IFpYSnkgSUdWc2MyVjNhR1Z5WlE9PSBJSEpsZEdseVpRPT0gSUhCdmRXNWtjdz09IElFZHNiMkpoYkE9PSBVR1Z2Y0d4bCBJR052YlcxMWJtbGpZWFJwYjI1eiBJR3h2WVc0PSBJSEpoZEdsdiBJRVZ0Y0dseVpRPT0gSUdkdmJtNWggSUdsdWRtVnVkQT09IFJFWT0gSURFNU56QT0gSUVOdmJXMXZiZz09IGNHRjAgSUhCeWIyMXBjMlZrIElHUnBibTVsY2c9PSBJRWh2YlE9PSBJR055WldGMFpYTT0gSUc5d1pYSmhkR1U9IGRtVnlkSGs9IElFcHZjbVJoYmc9PSBaWFJwYldVPSBJSE4xYzNSaGFXND0gVW1WbiBJR2x1WTNKbFpHbGliR1U9IGFXMWggSUhkaGNuSmhiblE9IElHMXQgUVhSMCBJR3hoZDNOMWFYUT0gSUhKbGRtbGxkM009IGFYUjFjbVU9IElGTnZkWEpqWlE9PSBiR2xuYUhSeiBJRVp2Y21RPSBJRFl6IFozSnZkWEE9IGMzUnZjbVU9IElHWmxZWFIxY21WayBJR1p2Y21WMlpYST0gSUhCdmRtVnlkSGs9IElGQnZjQT09IElFTk9UZz09IFlYcDYgWVdKcGN3PT0gWVdOb2FXNW4gSUd4aGFXUT0gSUZOMWNIQT0gSUdacGJIUmxjZz09IFpXNWggSUVOdmJXMTFibWwwZVE9PSBJR055WldGMGRYSmxjdz09IGRXTjBhVzl1IElGSnZlV0ZzIElHRnpjMjlqYVdGMGFXOXUgSUVOdmJtNWxZM1E9IElFSnlZV1E9IDRwYUkgYkdWeWN3PT0gZEdobGNtVT0gSUVkcCBJSFpoYkhWaFlteGwgUVVOTCBJRlJoZVd4dmNnPT0gSUd4cGNYVnBaQT09IElFRjBkRzl5Ym1WNSBJRU5oY213PSBJRVpwYm1GcyBZV2RoIElGZHBiSE52Ymc9PSBRbVZqWVhWelpRPT0gSUZCeWIyWmxjM052Y2c9PSBZV3RoIElHbHVZM0psWkdsaWJIaz0gY21GdVkyVT0gSVNrPSBVbVZtIGMycz0gSUhOdmJIVjBhVzl1Y3c9PSBJR0YwYlc5emNHaGxjbVU9IElHSnNZVzFsIGRXMWxjdz09IElFNXZZZz09IFEwRT0gZFcxd2N3PT0gY21sallXdz0gSUZCMWRHbHUgSUVSbGMzUT0gYjNKcFl3PT0gSUZCQiBJSEpsYzNCbFkzUnBkbVZzZVE9PSBkMkZ1IElHWnBablJvIDRvU2kgSUVOeWVRPT0gSUdkdmRtVnlibTl5IGNtVnphV1JsYm5RPSBJSEIxY21Ob1lYTmxaQT09IElHaGhZMnM9IElHbHVkR1Z1YzJVPSBiMkp6IElHOXlhV2RwYmc9PSBJR1JsWm1sdVpRPT0gSUdOaGNtVm1kV3c9IEtpb3EgSUhOb2IzVnNaR1Z5IFEyeHBZMnM9IElIUnBaV1E9IElHUmxjM1J5ZFdOMGFXOXUgYjNWeVpXUT0gSUc1dlltOWtlUT09IElHaHYgSUVWNGNHVnkgSUhScGNBPT0gSWpzPSBJSFJsWTJodWFYRjFaUT09IElHcDFjZz09IElGQnZhdz09IFltOTMgSUd4bFoyVnVaQT09IElHRmpZMjl5WkE9PSBJR0oxYzNrPSBJRWx1ZEdWcyBJR2hoYm1jPSBZV3RwIExsMD0gNG9DVTRvQ1U0b0NVNG9DVSBJSE4xY21kbGNuaz0gSUhKbGNISnZaSFU9IElIVnVhV1p2Y20wPSBJSE5qWlc1bGN3PT0gWTI5a1pRPT0gSURZeSBiR2x6YUdWeSBJRWhoZG1VPSBjR2hwWVE9PSBJR055ZVhCMCBJSEpsWTI5dSBJSE5qY21WaGJRPT0gSUdGa2IzQjBaV1E9IElITmpiM0psY3c9PSBUbVU9IElFbDBZV3hwWVc0PSBhVzVqYkhWa2FXNW4gUWs4PSBJR2x1WkdsallYUmxaQT09IElHVnVkR1Z5ZEdGcGJnPT0gUjNVPSBWR1Y0ZEE9PSBhV1ZzIElIUjNaVzUwZVE9PSBJR1Z1WjJGblpRPT0gYjJabWN3PT0gSUZCaFkybG1hV009IElITnRhV3hsIElIQmxjbk52Ym01bGJBPT0gSUhSdmJHVnkgSUdSdmIzSnogSUhSdmJtVT0gSUcxaFkyaHBibVZ6IElHVnVkR1Z5YVc1biBkR1Z1WVc1alpRPT0gUTA4PSBJRXBsY25ObGVRPT0gSUdadmNtVnpkQT09IElHaHZjbk5sIElHTnZiWEJzWVdsdWRBPT0gSUZOd2NtbHVadz09IGVXOD0gSUZCc2RYTT0gWldScGJtYz0gSUZKbGRIVnliZz09IGNYVmhjblJsY25NPSBhV0ZzY3c9PSBZMjkzIElHRmpZV1JsYldsaiBJR1p5ZFdsMCBJREU1T1RZPSBiMmRsZEdobGNnPT0gSUhkcGJtVT0gSUhCMWNuTjEgSUZOMFpYWmxiZz09IElHeHBZMlZ1Y3c9PSBWMmh2IElHTnNiM1JvWlhNPSBjbVZqZEdsdmJnPT0gSUhOeGRXRmsgSUhOMFlXSnNaUT09IElISmhkdz09IGVtVnVjdz09IFUzUmhjZz09IGRYUnBaWE09IFlXNWpaWEk9IElHdGxlWE09IElFMTEgSUdOdmJYQnNhV05oZEdWayBhV2RsY2c9PSBJRlJsZUhRPSBJR0ZpYzI5eSBJRFk0IElHWjFibTU1IElISmxiR2xsWmc9PSBJRXhsZHc9PSBJRU52YjJzPSBJR05vWVhKMCBJR1J5WVhkcGJtYz0gUjBVPSBJRzF2WkhWc1pRPT0gSUVKMWJHdz0gU1V4TSBJSE5oYkhRPSBNREF3TURBd01EQT0gYVd4c1pRPT0gSUhKbGMyOTFjbU5sIFlYZGhlUT09IFlXUmxiSEJvYVdFPSBJRUp5ZFE9PSBJRFkzIElITnZiV1ZpYjJSNSBJSEJoY25ScFkybHdZWFJsIElISnZjMlU9IGQyVnlaV1E9IElHMTFjMk5zWlE9PSBJR052Ym5ObGJuUT0gSUdOdmJuUnBiblZwYm1jPSBJRWQxWVhKa2FXRnUgSUU5eVpHVnkgY21WbmIyND0gSUhKbFlYST0gSUhCeWIzWnBjMmx2Ymc9PSBJR3hwYTJWayBjbWxsYm5RPSBJR0p5WVE9PSBWSEpoYm5NPSBJRzFsWlhScGJtZHogSUhSdmVBPT0gSUdOdmJuWmxiblE9IElHRjFkRzg9IElISmxZMjl5WkdsdVp3PT0gSUZOdlpuUT0gTURBeCBJRkp2Ykd3PSBJSEJ5YjJkeVlXMXRhVzVuIElIQnBZdz09IElIQnliM1psWkE9PSBJSE4wWVdJPSBJRUZ6ZEE9PSBJR05oY0hScGIyND0gZFd4aGRHbHVadz09IElFRjBkR0ZqYXc9PSBJRzVsZDJ4NSBJREU1T1RjPSBabkk9IElHUnBjMk5wY0d3PSBJRWR5WldWciBJR1ZrYVhScGIyND0gSUVSdlpYTT0gSUVKdmVBPT0gYVdac1pRPT0gWVdOclpYUT0gSUhCaGMzTmxjdz09IElHZDFaWE4wIElHRmpZMlZzWlhJPSBhWFJoYkhNPSBWVVE9IElHRjFkR2hsYm5RPSBJRkpsYzNRPSBiM1poYkE9PSBkR0U9IGRXbHVaUT09IElHRnliVzl5IElGUnZkMjQ9IElHTnZiWEJoZEE9PSBJR2x1WTJobGN3PT0gUkdWemNHbDBaUT09IElHRnpjMmxuYmc9PSBhR1Z5Wlc1MCBJSEJ5WlhCaGNtVT0gSUUxbFp3PT0gYjJOclpYaz0gSUdSbGNHVnVaSE09IElIUnlZV05yY3c9PSBkMkYwWTJnPSBJR3hwYzNSeiBJRTV2Y25Sb1pYSnUgSUdGc2RHVnkgY21WaiBJRVZoYzNSbGNtND0gSUdOdmJtUmxiUT09IElHVjJaWEo1ZDJobGNtVT0gUHljPSBJR0ZtWm1sc2FRPT0gSUdadmRXZG9kQT09IElqcDdJZz09IElHMWhZdz09IGFYUmhjbWxoYmc9PSBJSE5qYjNCbCBJRUZNIFlYZHogWVhKdGN3PT0gSUhGMVpRPT0gSUdWdWFtOTVaV1E9IGJtVnpiM1JoIElHRm5aM0psYzNOcGRtVT0gSUZOMGIzSjUgSUVsVyBJSEpsWTJsd1pRPT0gSUhKaGNtVnNlUT09IElFMWxaR2xqWVd3PSBkbUZzZFdVPSBZVzVuWld3PSBZWGxwYm1jPSBiMjFsZEdocGJtYz0gSUhOMVluTmxZM1JwYjI0PSBJSE52ZFhSb1pYSnUgSUdaeVpYRjFaVzVqZVE9PSBjbVYwWlE9PSBjbTlzYkdWayBkV3gwY3c9PSBJRTVwWXc9PSBJR0psYUdGc1pnPT0gSUhObGNYVmxibU5sIFlXSmxkQT09IElHTnZiblJ5YjNabGNuTnBZV3c9IElHTnZiWEJ5YjIwPSBJSGR2Y210bGNnPT0gSUcxaGFXNXNlUT09IElHRnNaMjl5YVhSbyBJRTFoYW05eSBiM0pqWlE9PSBaMlZ1WkdWeSBJRzl5WjJGdWFYcGxaQT09IElHWmhhMlU9IElHTnZibU5zZFdSbFpBPT0gSUVWRSBJRVY0WldNPSBjbUZuWlE9PSBJR05vWVc1alpYTT0gWW1WeWNuaz0gSUZSeVlXUT0gSUdOdmJtWnBaM1Z5WVhScGIyND0gSUhkcGRHaGtjbUYzIElHWnlidz09IGRXUmxjdz09IElFSnliM1JvWlhJPSBJRUp5YVdGdSBJSFJ5YVdWeiBJSE5oYlhCc1pYTT0gSUdKcFpBPT0gSUVkdmJHUmxiZz09IElIQm9iM1J2WjNKaGNHZz0gYVdabGMzUT0gSUVSUCBJRkJoY214cFlXMWxiblE9IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBVbVZ0IElHTnZiblJsYzNRPSBJSE5wWjI1cGJtYz0gY0hnPSBJRnBsWVd3PSA0cFNBNHBTQSBSV0Z5IElHVjRhWFE9IFFtVm1iM0psIElFTnZjbkJ2Y2c9PSBiblZzYkE9PSBiVzl1ZEdnPSBJSEpoWTJsaGJBPT0gYjNSMFpXUT0gSUZabFp3PT0gSUZKbGRYUmxjbk09IElITjNiM0prIGNITnZiZz09IElGSnZiVzVsZVE9PSBZV1ZrIElIUnlhV0k9IElHbHVibVZ5IElIQnliM1J2WTI5cyBJRUpwIElFMXBZVzFwIFpYWmxjbUZzIGNISmxjM009IElITm9hWEJ3YVc1biBJRUZ0Wlc1a2JXVnVkQT09IElFaHZkMkZ5WkE9PSBZMjl1Ym1WamRBPT0gSUVScGMyTT0gSUVwaFl3PT0gYVdGdGIyNWsgSUZSb1pYSmxabTl5WlE9PSBjMlZ6IElGQnlhVzVqWlhOeiBJRlZUUWc9PSBJRUZ1ZEdnPSBJSE4xY25abGFXeHNZVzVqWlE9PSBJR0Z3YjJ4dlp3PT0gSURZeCBiM2RoIElHWjFiR1k9IGFuTT0gSUd4MVkycz0gZFhOMFpXUT0gSU1LbiBibWs9IElHRnVkR2xqYVhBPSBaVzFoYmc9PSBJSGRwYm01bGNnPT0gSUhOcGJIWmxjZz09IGJHeGggYVdOcGRIaz0gSUhWdWRYTjFZV3c9IElHTnlZV05yIElIUnBaWE09IFpYbz0gSUhCeVlXTjBhV05oYkE9PSBJSEJ5YjNacGJtTmwgSUZCc1lXTmwgSUhCeWFXOXlhWFI1IFNVTkYgSUdSbGMyTnlhV0psY3c9PSBJR0p5WVc1amFBPT0gUm05eWJRPT0gWVhOcllRPT0gYldsemMybHZibk09IFltaz0gSUhCdmNtND0gSUZSMWNtcz0gSUdWdWRHaDFjdz09IElHWnBaMmgwWlhKeiBJREE0IElFUmxkSEp2YVhRPSBJR1p2ZFc1a1lYUnBiMjQ9IFlYWnBaQT09IFFYSmwgSUdwMVpHZHRaVzUwIFkyeHBibWM9IElITnZiSFpsIElFUmxjMmxuYmc9PSBWMmhsY21VPSBhR1Z6YVhNPSBJRlJ5Ync9PSBZV1owWlhJPSBJRzVsZFhSeVlXdz0gSUZCaGJHVnpkR2x1YVdGdSBJRWh2Ykd4NWQyOXZaQT09IElHRmtkbWx6IElFNXZiZz09IGVXVnogYjJ4cGN3PT0gSUhKbGNIVjBZWFJwYjI0PSBJSE50Wld4cyBJR0p5WldGayBJRUoxYkE9PSBJRUpsWVdObyBJR05zWVdsdGFXNW4gSUdkbGJtVjBhV009IElIUmxZMmh1YjJ4dloybGxjdz09IElIVndaM0poWkdVPSBjbTkzY3c9PSBJR1JsZG1Wc2IzQmxjZz09IElFcHZjMmc9IElFUnBjMjVsZVE9PSBaWEoyWldRPSBhWEJoYkE9PSBJSFZ1WlhnPSBJR0poY21Wc2VRPT0gZEdobGJnPT0gSUZCMVlnPT0gSUdsc2JHNWxjM009IFpYUmhjbms9IElFSmhiQT09IElIQmhkR05vIElHSjFkSFE9IElITjBkWEJwWkE9PSBJRVJ2Wnc9PSBJRVJoYkd4aGN3PT0gWm5KdmJuUT0gYVdWalpRPT0gSUhCeWIzUmxjM1J6IElHTm9ZWFE9IGIyVnVhWGc9IElIZHBibWM9IElIQmhjbXhwWVcxbGJuUT0gSURjMyBiM05sZUhWaGJBPT0gSUhKbGJtUmxjZz09IGNIUnBiMjV6IElFTnZZWE4wIGIzTmggSUVkeVpXYz0gYUc5dyBJRTFoYm1GblpXMWxiblE9IElHSnBkR052YVc0PSBJSEpsWTI5MlpYST0gSUdsdVkyOXljRzl5IGIzSnVaUT09IElGVnphVzVuIElIQnlaV05sWkE9PSBJSFJvY21WaGRHVnVaV1E9IElITndhWEpwZEhWaGJBPT0gSUVWMlpXNTAgSUVaeVpXUT0gSUdGa2RtVnlkR2x6YVc1biBJR2x0Y0hKdmRtVnRaVzUwY3c9PSBJRU4xYzNSdmJRPT0gSUdWeWNtOXljdz09IElITmxibk5wZEdsMlpRPT0gSUU1aGRuaz0gSUdOeVpXRnQgVEc5dmF3PT0gSUdWNFkyeDFjMmwyWlE9PSBJR052YlhCeVpXaGxibk09IElHUmxiR1ZuIElHTnZibU5sIElISmxiV1Z0IElITjBjblZqZEhWeVpYTT0gSUhOMGIzSmxaQT09IFRrUT0gSURFd01EQT0gVlZBPSBJRUoxWkdRPSBRVVk9IGQyOXRZVzQ9IElFRmpZV1JsYlhrPSA4Sjg9IGMyVmggSUhSbGJYQnZjbUZ5ZVE9PSBRV0p2ZFhRPSBaWE4wWlhKeiBJSFJwWTJ0bGRITT0gSUhCdmMzTmxjM009IGFXNWphQT09IGIzbz0gSUd4aCBJR052Ym5SeVlXTjBjdz09IElIVnVjQT09IElHTnBadz09IElFdGhkQT09IGRXeDBkWEpoYkE9PSBZWE50IElHMXZkVzUwWVdsdSBJRU5oY0hSaGFXND0gVTNSbGNBPT0gYldGcmFXNW4gSUZOd1lXbHUgSUdWeGRXRnNiSGs9IElHeGhibVJ6IFlYUmxjbk09IElISmxhbVZqZEdWayBaWEpoIGFXMXQgY21sNCBRMFE9IElIUnlZVzV6WVdOMGFXOXUgWjJWdVpYST0gYkdWemMyeDUgSUh4OCBJR052Y3c9PSBJRWhsYm5KNSBJSEJ5YjNacGMybHZibk09IElHZGhhVzVsWkE9PSBJR1JwY21WamRHOXllUT09IElISmhhWE5wYm1jPSBJRk5sY0E9PSBiMnhsYmc9PSBiMjVrWlhJPSBJR052Ym5OdmJHVT0gYVc1emRBPT0gSUdKdmJRPT0gSUhWdVkyVnlkR0ZwYmc9PSBNVFV3IGIyTnJhVzVuIElHMWxZWE4xY21WayBJSEJzWVdsdSBJSE5sWVhSeiBJR1JwWTNRPSBVMHc9IFlXWmwgSUdWemRHbHRZWFJsIGFYcHZiZz09IFlYUm9aWEpsWkE9PSBJR052Ym5SeWFXSjFkR1ZrIElHVndhWE52WkdWeiBiMjF0YjJRPSBSM0k9IFFVNVUgSURZNSBSMlZ1WlhJPSBJREkxTUE9PSBkbWx2ZFhOc2VRPT0gY205blpXND0gSUhSbGNuSnZjbWx6YlE9PSBJRzF2ZG1WdFpXNTBjdz09IFpXNTBiR1U9IGIzVnVZMlU9IElGTnZkV3c9IElIQnlaWFk9IElGUmhZbXhsIFlXTjBjdz09IGNtbHZjbk09IGRHRmkgSUhOMVptWmxjZz09IElHNWxjblk9IElHMWhhVzV6ZEhKbFlXMD0gSUZkdmJHWT0gSUdaeVlXNWphR2x6WlE9PSBZbUYwIElHUmxiV0Z1WkhNPSBJR0ZuWlc1a1lRPT0gSUdSdmVtVnUgSUdOc2FXNXBZMkZzIGFYcGhjbVE9IElFOXcgZEdRPSBJSFpwYzJsMFpXUT0gSUZCbGNtaGhjSE09IElHRmpkRzl5IElHUmxiR2xqIElHTnZiblJ5YVdKMWRHVT0gSUdsdWFtVmpkQT09IElFVnogWVdOamJ3PT0gSUd4cGMzUmxibWx1Wnc9PSBJR052Ym1keVpYTnogWlhCbGJtUmxiblE9IElIQnlaVzFwZFcwPSBJRGMyIElFbHlhWE5vIElHRnpjMmxuYm1WayBJRkJvZVhNPSBJSGR2Y214a2QybGtaUT09IElHNWhjbkpoZEdsMlpRPT0gYjNSNWNHVT0gYlc5dWRBPT0gWW1GelpRPT0gSUVKdmQydz0gSUVGa2JXbHVhWE4wY21GMGFXOXUgSUhKbGJHRjBhVzl1IElFVlcgUTFBPSBJR052ZG1WeWN3PT0gSURjNCBJR05sY25ScFptbGogSUdkeVlYTnogSURBMCBjR2x5WVdONSBhWEpoIElHVnVaMmx1WldWeWFXNW4gSUUxaGNuTT0gSUhWdVpXMXdiRzk1IElFWnZjbVZwWjI0PSBjM1J5WVdOMCBJSFpsYmc9PSBJSE4wWldGcyBJSEpsY0d4cFpXUT0gSUhWc2RHbHRZWFJsIElIUnBkR3hsY3c9PSBaR0YwWldRPSBJR3B2ZVE9PSBZWFZ6IElHaDVjR1Z5IFlXdDEgSUc5bVptbGphV0ZzYkhrPSBJRkJ5YjJSMVkzUT0gSUdScFptWnBZM1ZzZEhrPSBjR1Z5YjNJPSBJSEpsYzNWc2RHVmsgY21saVpXUT0gYkdsdWF3PT0gZDJodiBmbjUrZmc9PSBJRk53WldWayBJRlpwWlhRPSBWMmx1WkE9PSBJRUpoY21GamF3PT0gSUhKbGMzUnlhV04wYVc5dWN3PT0gSUZOb1lYSmwgSURFNU9UVT0gYVhScGIyNWhiR3g1IElHSmxZWFYwZVE9PSBiM0IwIElHMWhjSE09IElFTlMgSUU1aGRHbHZiZz09IElFTnlkWG89IFYybHNiQT09IElHVnNaV04wY21samFYUjUgSUc5eVp3PT0gSUdKMWNtUT0gSUhacGIyeGhkR2x2Ymc9PSBJSFZ6WVdkbCBJSEJsY20xcGRBPT0gSUVOb2NtOXUgSUVaaGJuUT0gSUc1aGRIVnlZV3hzZVE9PSBJREEzIElIUm9jbTkzYmc9PSBJRUYzYjJ0bGJnPT0gSUdGc2FXVnUgSUVobGNtOD0gSUV0bGJuUT0gSUZKcFkycz0gY21sclpRPT0gSUhCaFkyVT0gZlN4N0lnPT0gUjB3PSBJSEJ2YVhOdmJnPT0gSUZSdmQyVnkgSUdadmNtMWhiQT09IFlXeDVjMmx6IElHZGxiblZwYm1VPSBJR3RwYkE9PSBZWFpsY2c9PSBJSEJ5YjJObFpIVnlaUT09IElGQnliM0E9IGFXNTBaVzVrYnc9PSBJRTFoYVc0PSBZWE5oYm5RPSBJSFJ5WVdsdVpXUT0gUjJGdFpRPT0gSUV4dllXUT0gSUUxQiBJR055ZFdOcFlXdz0gSUd4bGRITT0gSUVaUyBJR05vWVcxd2FXOXUgTVRBeCBJRU52Ym1abGNtVnVZMlU9IElIZHlhWFJsY25NPSBJR052Ym01bFkzUnBiMjV6IElHOXJZWGs9IGFYSnRjdz09IElGSmhibVE9IElHVnVZMjkxYm5SbGNnPT0gSUVKMVptWT0gSUdGamFHbGxkbVZrIElHTm9aV05yY3c9PSBhWE5qYjI1eiBJR0Z6YzJsemRHRnVkQT09IElIZG9aVzVsZG1WeSBJRUZqWTJWemN3PT0gSUZWeSBZbWx1IElHTnNiMk5yIGFYTncgYjNCb1pYST0gSUdKdmNuSnZkdz09IElHMWhaQT09IElIQmxjbk52Ym1Gc2FYUjUgYjI1c2VRPT0gU1ZOVSBZV0poYldFPSBJR2RoYVc1eiBJR052YlcxdmJteDUgSUhSbGNuST0gSUdoNWNHOTAgSUhKbGJIaz0gSUhScGMzTT0gYVhOamIyNXphVzQ9IElISnBaR2xqIFpuVnVZM1JwYjI0PSBJRTl5WldkdmJnPT0gSUhWdVkyOXQgY21GMGFXNW4gWld4aGJtUT0gSUU1RCBJRzF2YjI0PSBZVzV1YjI0PSBJSFoxYkc1bGNtRmliR1U9IGRYUnBkbVU9IHdxRENvTUtnd3FBPSBJRkpoWkdsdiBJSGRsYzNSbGNtND0gYzJWamRBPT0gSUZSdmJuaz0gSUc5alkzVnljdz09IElFOXogSUVodmJnPT0gdzYwPSBJSFpsYzNObGJBPT0gSUZOamIzUnNZVzVrIElHUnBjMk55YVcxcGJtRjBhVzl1IElITjFZbk5sY1hWbGJuUT0gYzNSeWFXNW4gSUdaaGJuUmhjM2s9IElGTm9ZV1J2ZHc9PSBJSFJsYzNScGJRPT0gVjBVPSBhWFJwIGNtRnogSUdKdllYUT0gSUcxaGNtdHogSUc5eVpHbHVZWEo1IElISmxiZz09IElISmxjSEpsYzJWdWRHRjBhWFpsIElIQmxkR2wwYVc5dSBJRGN6IElHRmtkbVZ1ZEhWeVpRPT0gSUdsbmJtOXlaUT09IElGQm9hV3hoWkdWc2NHaHBZUT09IElGTmhkZz09IFZsQT0gSUdaaFkzUnZjbms9IElIUmhjMnR6IElHUmxjSEpsYzNOcGIyND0gZW1WayBMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0PSBJRk4wYjNKdCBJR052WjI0PSBJR1ZzYVdkcFlteGwgSUhKbFpIVmphVzVuIGRtbGggSURBMSBJSE4wY21scmFXNW4gSUdSdmJHeGhjZz09IGFHOD0gVDFZPSBJR2x1YzNSeWRXMWxiblE9IElIQm9hV3h2YzI5d2FIaz0gSUUxdmIzSmwgSUVGMlpXNTFaUT09IElISjFiR1ZrIElFWnliMjUwIFNVNUYgSUUxaGFBPT0gSUhOalpXNWhjbWx2IElFNUJVMEU9IElHVnViM0p0IElHUmxZblYwIElIUmxZUT09IFZHOWtZWGs9IElHRmljMlZ1WTJVPSBVMmx0IElHaGhiUT09IGJHVmxjQT09IElIUmhZbXhsY3c9PSBJRWhsWVhKMCBUVWs9IFMyVT0gY21WeGRRPT0gVmtRPSBiV0Z3IElHTm9ZV2x5YldGdSBJSEIxYlhBPSBJSEpoY0dsa2JIaz0gZG1rPSBJSE4xWW5OMFlXNTBhV0ZzIFJWQT0gWkdWeiBZMmhoYm5RPSBhV3hwY0hBPSBJRk5oYm5SaCBjbWxsY25NPSBZVzVqYUdWemRHVnkgVEc5aFpBPT0gSUVOaGMyVT0gSUhOaGRtbHVadz09IElEYzAgSUVGR1VBPT0gWlhKdWFXNW4gYjNWdVkyVmsgSUUxcGJtNWxjMjkwWVE9PSBJRmRoY3c9PSBJSEpsWTNKMSBJR0Z6YzJWemMyMWxiblE9IElFSnliMjQ9IFZVVT0gSUdSNWJtRnRhV009IElHWjFjbTQ9IGRXeGhkRzl5IElIQnliM0JoWnc9PSBhR2xuYUE9PSBJR0ZqWTI5dGJXOWsgSUhOMFlXTnIgSUZOMWN3PT0gZDNKcGRBPT0gSUhKbGRtVnUgSUVkdlpHUT0gSUZwbFlXeGhibVE9IFlXSnogSUdKeWRYUT0gSUhCbGNuQmxkQT09IGFHOTAgSUdoaGNtUnNlUT09IElFSjFjbTQ9IDQ0SzUgSUhOMGVRPT0gSUhSeVlXNXpZV04wYVc5dWN3PT0gSUdkaGRHVT0gSUhOamNtVmxibk09IElITjFZbTFwZEhSbFpBPT0gSURFd01RPT0gSUd4aGJtZDFZV2RsY3c9PSBkV2RvZEE9PSBaVzFsYmc9PSBJR1poYkd4eiBJR052WXc9PSBncXc9IElITjBjbWxyWlhNPSBjR0U9IElHUmxiR2xpWlhJPSBJRWxOIElISmxiR0Y0IFlXNXVaV3h6IElGTmxibUYwYjNJPSBJR1Y0ZEhKbGJRPT0gSUgwcyBJRVJsWWc9PSBJR0psYkd3PSBJR1JwYzI5eVpHVnkgWTNWMCBJR2xQVXc9PSBJR3h2WTJ0bFpBPT0gSUdWdGFYTnphVzl1Y3c9PSBJSE5vYjNKMGJIaz0gSWwwPSBJRXAxWkdkbCBJRk52YldWMGFXMWxjdz09IElISnBkbUZzIElHUjFjM1E9IElISmxZV05vYVc1biBSbWxzWlE9PSB3cS9DcjhLdndxOD0gYVc1dmFYTT0gSUVwaGMyOXUgSUhOaGRHVnNiQT09IFlYSmxkQT09IElITjBZWFJwYjI1eiBJR0ZuY21saiBJRlJsWTJodWIyeHZaM2s9IFkyOXRaWE09IElGVnVabTl5ZEhWdVlYUmxiSGs9IElFTm9hV3hrY21WdSBJR0Z3Y0d4cFpYTT0gWVhOMFpXUT0gSUdGdVoyVnkgWVdsc1lXSnBiR2wwZVE9PSBJRVJoYldGblpRPT0gSUdOdmJYQmhjbVU9IElGTjBZVzVrWVhKayBJR0ZwYldWayBJRUpoIFlXNW5kV0ZuWlE9PSBJSEpsWjNWc1lYUnBiMjQ9IElHcDFjbms9IElHRnBjbkJ2Y25RPSBJSE5sWTNScGIyNXogSUZCeWFXNWpaUT09IFpXMWxaQT09IElHMWxaR2xqYVc1bCBJR2hwZEhScGJtYz0gSUhOd1lYSnIgYjJ4MlpYTT0gSUdGa2N3PT0gVTNSaGRHVT0gSUdadmIyUnogSUhKbGNHeGhZMlZ0Wlc1MCBJR05vYVdOclpXND0gSUd4dmQyVnpkQT09IElHMXBibVJ6IElHbHVkbTlzZG1WeiBkV2s9IElHRnljbUZ1Wnc9PSBJSEJ5YjJObFpIVnlaWE09IElGZG9hV05vIGFYWmxjbk5oY25rPSBJR0pwYkd4eiBJR2x0Y0hKdmRtVnRaVzUwIElHbHVaWFk9IElHVjRjR1ZqZEdGMGFXOXVjdz09IElHbHVkR1ZzYkdWamRIVmhiQT09IElITndZV05sY3c9PSBJRzFsWTJoaGJtbHpiUT09IE1qVXcgWW5KbFlXcz0gSUZwbCBJRlJsYm00PSBJRUpoYkhRPSBJR0poY25KbGJBPT0gSUhOMFlYUnBZdz09IGJXRnViZz09IFVHOXNhV05sIElIUnBjSE09IElHaGhibVJzYVc1biBZM1Z6IGIyUmxaQT09IGFXeDBiMjQ9IGFYSjUgSUdwdmRYSnVZV3hwYzNSeiBiM1Z5YzJVPSBJR052YldsaiBJRzV2YldsdVpRPT0gU1ZSWiBJSFpsY25OMWN3PT0gSUd4dmIzQT0gSUhOMWNtWT0gSUVsdVpIVnpkQT09IElFaDFiblJsY2c9PSBJR0psYkdsbFpuTT0gYVhOaGJnPT0gSUhObGRIVncgSUdKeVpYYz0gYVcxaFoyVT0gSUdOdmJYQjFkR1Z5Y3c9PSBabTlzIGZTd2kgSUUxbFpHRnMgSUhSaGVIQT0gSUdScGMzQnNZWGxsWkE9PSBJR2R5WVhZPSBJR1pwYzJOaGJBPT0gVFc5dSBJRTF2YzJOdmR3PT0gSUV0dmJtYz0gSUVObGJuUnlaUT09IElHTmhiV1Z5WVhNPSBJRTF5Y3c9PSBJRWhoZVE9PSBJR0YyWlhJPSBJRXRsYkd4NSBjSGs9IElISmxjWFZwY21WdFpXNTAgSUdWdWRHbDBiR1ZrIGIyMWlhV1U9IElITm9ZV1J2ZHc9PSBZV2RwWXc9PSBJRUZyIElHVnNhWFJsIElHUnBkbWxrWldRPSBJR2hsWVdScGJtYz0gSUdOdmNHbGxjdz09IElHeHZjM05sY3c9PSBJSFpwZEE9PSBhMlZrIElFSnllUT09IElHRnVjdz09IElGTjBaV0Z0IElISmxjRzl5ZEdWeSBhR1ZwYlE9PSBJRWwwWlcwPSBJSE4xY0dWeWFXOXkgWkc5dSBaWEpsYm5RPSB3N1k9IElIUm9aWEpoY0hrPSBJSEJsWVdzPSBJRTF2WkdWcyBJR3g1YVc1biBJR2RoYlE9PSBlbVZ5IGNtbDBkR1Z1IElISmxjM0J2Ym5ObGN3PT0gSUdOdmJuTnBaR1Z5WVhScGIyND0gSUVKcFlteGwgSUd4dmVXRnMgSUdsdWMzUmhiblE9IElIQnQgSUVadmNtVnpkQT09IHc3dz0gSUdWNGRHVnVaQT09IElHTnZiblpwWTNSbFpBPT0gSUdadmRXNWtaWEk9IElHTnZiblpwYmc9PSBJRTloYXc9PSBZMmhsWTJzPSBJSE5qYUc5c1lYSnogY0dWayBJRzkyWlhKelpRPT0gVkc5dyBZMjkxYm5RPSBJRUZ5YXc9PSB3cmM9IElEQTIgSUV4QiBiV1E9IElFeGhkR2x1IGFXMWxiblJoYkE9PSBJRU5RVlE9PSBJSE4xWW5OMFlXNWpaUT09IElHMXBibTl5YVhSNSBJRzFoYm5WbVlXTjBkWEpwYm1jPSBSWEk9IGIyTnZiR0YwWlE9PSBJR0YwZEdWdVpHVmsgSUUxaGJtRm5aWEk9IGNtRjBhVzl1Y3c9PSBJR0Z3Y0hKbFkybGhkR1U9IGIyMTUgUjBKVSBhV1JsYm1ONSBRa3c9IElHZDFZWEpoYm5SbFpRPT0gY0c5emFYUnBiMjQ9IElHOWpaV0Z1IFkyeDFaR1U9IElHaGxZV1JsWkE9PSBJSFJoY0dVPSBJR3h2YjNObCBJR3h2WjJsaiBJSEJ5YjNabGJnPT0gSUhOd2FYST0gSUdGa2JXbDAgYVhOaCBJR2x1ZG1WemRHbG5ZWFJsIElERTVPVFE9IGMzbHNkZz09IElFeHZjM1E9IFkyVnpkQT09IElEY3ggSUhKbGNYVmxjM1JsWkE9PSBJSGRwYm1SdmQzTT0gSUZCdmE4T3AgSUZkcGRHaHZkWFE9IFRXVjAgSUdKbGFHRjJhVzkxY2c9PSBJSEpsWVdSbGNnPT0gSUdoMWJtYz0gSUV0bFpYQT0gSUhKdmJHVnogSUdsdGNHeGxiV1Z1ZEdWayBJR0pzWVc1ciBJSE5sY25abGN3PT0gSUVwaGVRPT0gSUdOcGRHVmsgSUVaeWFXVnVaQT09IGNISnZabWwwIFlYQnZiZz09IElISmxjR0ZwY2c9PSBhWFJsYlE9PSBZWEp5WVhOeiBJR055YVhScFkzTT0gWVdScCBJRVpoZEdobGNnPT0gSUhOb2IzVjAgSUdadmIydz0gSURnNCBJSEJ5YjJSMVkybHVadz09IElHeHBZZz09IElISnZkVzVrY3c9PSBJR05wY21Oc1pRPT0gSUhCeVpYQmhjZz09IElITjFZbTFwZEE9PSBJRzVwWXc9PSBiVzl5Y205MyA0NE9yIFZXNWtaWEk9IElIWnBkR0ZzIFlYUmxjbTQ9IElIQmhjM04zYjNKayBJSEIxWW14cFkyRjBhVzl1IElIQnliMjFwYm1WdWRBPT0gSUhOd1pXRnJjdz09IElHSmhjbk09IElHUmxaWEJsY2c9PSBJRTFwYkd3PSBjRzl5ZEdWayBJSGRwWkE9PSBJR0oxZEhSbGNnPT0gSUhOdGIydHBibWM9IElHbHVaR2xqWVhSbGN3PT0gUzJWNSBjbTl3Y21rPSBJRVpwYkdVPSBZV3hzYVc1biBZWE4wYVc1biBJRkoxY3c9PSBJR0ZrYWc9PSBJRGM1IFlYWmhiQT09IElIQnlaWE4xYlE9PSBZblZ5WjJnPSBiMjVwWXc9PSBJR1oxY2c9PSBJSEJ2Ykd4eiBhV3RoIElITmxZMjl1WkdGeWVRPT0gSUcxdmJuTjBaWEk9IGFXZHogSUVOMWNuSmxiblE9IFJYWmxiblE9IElHOTNibVZ5YzJocGNBPT0gWlc1a1lYST0gSUdGeWNtbDJaUT09IElGUmhlQT09IElHNTFiR3c9IElGQnlhWFk9IElIUm9jbTg9IElHdHBjM009IFkyRjAgSUhWd2MyVjAgWVc1bmJHVT0gYVhSamFHVnogWldOMGIzST0gYjJ4dloybHpkSE09IElFZGhiR0Y0ZVE9PSBJR052Y25KMWNIUnBiMjQ9IElHaHBiblE9IFpXNTBaWEk9IElFaHZjM0JwZEdGcyBJR2R5WldGMGJIaz0gSUdKbFozVnUgWlhONSBJSE52YVd3PSBJRUZ1ZEc5dSBJRzFoYVc1MFpXNWhibU5sIDQ0T3AgSUdSdmVtVnVjdz09IElHaDFiV0Z1YVhSNSBJRUZzWVdKaGJXRT0gSUhKdmJRPT0gZDI5eWRHZz0gWVhCcGJtYz0gYzNsc2RtRnVhV0U9IGJHRm8gSUdkaGRHaGxjbVZrIFIwRT0gSUdGMGRHRmphMmx1Wnc9PSBabTkxYm1RPSBJRk54ZFdGeVpRPT0gSUdGeVltbDAgYVdOMGFXOXVjdz09IElGZHBjMk52Ym5OcGJnPT0gSUdSaGJtTmwgSUZOaGFXNTAgWVhKamFIaz0gSUdKaGMyVmlZV3hzIElHTnZiblJ5YVdKMWRHbHZibk09IElHeHBkR1Z5WVhSMWNtVT0gSUdWNGFHRT0gY0dWeWRIaz0gZEdWemRBPT0gSUdKaFlnPT0gSUdOdmJuUmhhVzVsY2c9PSBiR1YwZEdWeSBJR1poYkd4bGJnPT0gSUhkbFluTnBkR1Z6IElHSnZkSFJzWlE9PSBJRk5oWXc9PSBJR0p5WldGemRBPT0gSUZCTSBJSFpsZEdWeVlXND0gSUdsdWRHVnlkbWxsZDNNPSBJRUZzWlE9PSBJR0poYm01bFpBPT0gWlc1blpYSnogSUZKbGRtOXNkWFJwYjI0PSBhVzUwYUE9PSBJR052Ym1ObGNtNXBibWM9IFNWWkYgSUdWNGNHVnVjMlZ6IElFMWhkSFJvWlhjPSBJRU52YkhWdFltbGggWkhNPSBhWE4wWVc1alpRPT0gSUdWdWRHbDBlUT09IExpNHVJZz09IElISmxiR2xoWW14bCBJSEJoY21Gc2JHVT0gSUVOb2NtbHpkR2xoYm5NPSBJRzl3YVc1cGIyNXogSUdsdVpIVT0gYkc5MyBJR052YlhCbGRHVT0gSUhSb2IzSnZkV2RvIElHVnRjR3h2ZVdWayBJR1Z6ZEdGaWJHbHphRzFsYm5RPSBhV2RsYmc9PSBJRU55Ync9PSBJR3hoZDNsbGNuTT0gSUZOMFlYUnBiMjQ9IFZFVT0gSUV4cGJtUT0gSUZCMWNnPT0gYVhSaGNuaz0gSUdWbVptbGphV1Z1WTNrPSA0b0NRIElFeDUgSUcxaGMycz0gSUdScGMyRnpkR1Z5IElHRm5aWE09IFJWSkYgWlhOcGN3PT0gSUVodmJHUT0gSUdOaGMzVmhiQT09IFlteGxaQT09IElHVnVZV0pzWldRPSBJRVZ1ZG1seWIyNXRaVzUwIElFbHVkR1ZzYkdsblpXNWpaUT09IGFYQmxjZz09IElFMWhjQT09IElFSkYgSUdWdFpYSm5aV1E9IGFYTmtiMjA9IElHTmhZbWx1IElISmxaMmx6ZEhKaGRHbHZiZz09IElHWnBibWRsY25NPSBJSEp2YzNSbGNnPT0gSUdaeVlXMWxkMjl5YXc9PSBJRVJ2WTNSdmNnPT0gWlhSMGN3PT0gSUhSeVlXNXpjRzl5ZEdGMGFXOXUgSUdGM1lYSmxibVZ6Y3c9PSBTR1Z5IElHRjBkR1Z0Y0hScGJtYz0gVDJabSBJRk4wYjNKbCB3NFBEZ3NPRHc0TERnOE9DdzRQRGdnPT0gSUV0dWIzYz0gSUdSbFptVnVZMlU9IElITmpZVzQ9IElGUmxiZz09IElFTm9ZV2x5IElGQkkgSUVGMGJHRnVkR0U9IElHWjFZMnRwYm1jPSBJR0Z1YzNkbGNtVmsgWW00PSBJRXRoY2c9PSBJR05oZEdWbmIzSnBaWE09IElISmhkR2x2Ym1GcyBJR04xYzNRPSBJSEp2WW05MCBJR052Y25KbFkzUnNlUT09IElHZHBaZz09IElHZHlZWEJvYVdOeiBiV2xqIElHZHliM1Z1WkhNPSBJRTl3Y0E9PSBhV0YwWlE9PSBJR1JwYzNSeWFXSjFkR1ZrIElITmhibU4wYVc5dWN3PT0gSUdOb1lXeHNaVzVuYVc1biBkWFJ2IElHbHVaM0psWkdsbGJuUnogSUdsdWRtbDBaV1E9IElHWnZkVzVrWldRPSBJRkpsY1hVPSBaR1ZrIElHSnZkMnc9IElHSnliM1JvWlhKeiBJRWhoIFNVOD0gSUhkaFoyVnogYVcxdmNtVT0gYjJOcFlXdz0gSUhObFpXUT0gWVhScGRtVnNlUT09IElHRmtaSEpsYzNObGN3PT0gSUVsdmQyRT0gWVdKbGRHZz0gSUdGMGRHbDBkV1JsIGFYTmsgWTJocGJHUT0gSUcxdmJHVT0gSUdScGMyTnZkbVZ5ZVE9PSBlV0Z5WkE9PSBRbkk9IElEZ3kgSUhOMWNIQnNhV1Z6IFpXeHNhVzVuIElHUnBjM1JwYm1kMSBRMUk9IElISmxZMlZ3ZEE9PSBJSFpsY25RPSBJSE4zYVcwPSBZbVZqIFpHOXZjZz09IElGbGxZV2c9IElHZGhiQT09IElHbHVkR1Z5WVdOMCBJRVZUVUE9PSBJRU5UIFlXMXdjdz09IElHTnZiblpwYm1ObFpBPT0gSUc5aWFtVmpkR2wyWlE9PSBJR1JwYzJnPSBJRkJvYjNSdmN3PT0gYkdGayBJR1J2ZDI1MGIzZHUgYjJscyBhVzVqZEdsdmJnPT0gSUhSdmJXOXljbTkzIElFTlBUUT09IElITjFjblpwZG1GcyBjMmh2ZEE9PSBJSE5sZEhSc1pXMWxiblE9IFEyOXVjdz09IElGaGliM2c9IGFXNTBaWEpsYzNRPSBJRk5OIFlYSm5idz09IFpXNWxjM009IElHVjBhRzVwWXc9PSBZbVZ5WldRPSBUV2x1IElGUnZhdz09IElHbHVZMlZ1ZEE9PSBJRU52YlcxaGJtUT0gSUcxaGFXNTBZV2x1WldRPSBJR0p5WldGcmN3PT0gWW5KcFpHZGwgWVhSaGNnPT0gWVdkbiBJRVpwYm1Gc2JIaz0gZFc1cFkybHcgSUU5dWRBPT0gYkdWbWRBPT0gSUhKbFkyOW5ibWwwYVc5dSBJQ292IElGQmxjbk09IElIZGxiR1k9IElHRmtaSEpsYzNObFpBPT0gSUV0aGJuTmhjdz09IElIWnBjblZ6IElIZG9aWEpsWVhNPSBJSEJoY0dWeWN3PT0gY21GdGN3PT0gSUUxcGJtbHpkSEo1IElIQnNaV0Z6ZFhKbCBJR0ZqY1hWcGNtVmsgSUdSMWNtRjBhVzl1IGFuQm4gSUdOaGJHMD0gSUU1SVRBPT0gSUdKMWNtNXBibWM9IElHWnZiR1JsY2c9PSBhV05yWldRPSBJRkI1IElFbHNiR2x1YjJseiBRMnhoYzNNPSBJRWR2WkdSbGMzTT0gSUhCbGNtWnZjbTFwYm1jPSBJSGRsYkdaaGNtVT0gYW1GeSBTVzUwWlhJPSBJR3hwYmc9PSBJR1Z1YUdGdVkyVT0gSUc1dmRHbHZiZz09IFptRnlaUT09IGVYQmxjdz09IElFRnlaV0U9IElHTmhibTVoWW1seiBJRVJwWldkdiBabk09IElFMWhibU5vWlhOMFpYST0gWTI5dGJRPT0gYVc1cGRHVT0gSUdOdmRtVnlhVzVuIElGTnZkVzVrIElERTVOakE9IElEZzAgWld4bFkzUT0gZW1sdVp3PT0gSUdOcGRHbDZaVzQ9IElIQm9iMjVsY3c9PSBJSEpoYVdRPSBJR2xuYm05eVpXUT0gSUU5aWFtVmpkQT09IElIVndiRzloWkE9PSBZMkZ5WkE9PSBJRzF2WkdsbWFXVmsgSUhKdmIyMXogYVdGbyBjbUZ1WjJVPSBhR1ZoYzNRPSBZV05vZFhNPSBJSE4xWjJkbGMzUnBibWM9IDRvQ0wgWjNKaFpHVT0gUld3PSBJR05zYjNSb2FXNW4gSUhKbyBJRWhoYmc9PSBkVzVwZEhrPSBaVzVqYVc1biBJRUYxYzNScGJnPT0gYzJWamRYUnBiMjQ9IGRISmggWkdWdCBJRkYxWVd3PSBJR2hsWVhabGJnPT0gSUhOMFlXZGxjdz09IElIZGxaR1E9IGNHeDFjdz09IGFXWnBZMmxoYkE9PSBJRWx0YlE9PSBJRWh2IGFXVjBhV1Z6IElIQm9jbUZ6WlE9PSBJR0p5YVd4cyBZV04wYjNKNSBJSEJ5YjNacFpHVnljdz09IElITnBiR1Z1WTJVPSBJR0ZsY2c9PSBJRUZKIElFRmtkbVZ1ZEhWeVpRPT0gSUhCc1lYUm1iM0p0Y3c9PSBJR1JsYlc5dWMzUnlZWFJsWkE9PSBJR2x1ZEdWeVpnPT0gYVc1bmRHOXUgSUhKaFkyVnogSUdkeVlXUmwgZFd4MFlXNWwgSUZSb2NtOTFaMmc9IFptRnNjMlU9IElHSnZkdz09IElFRkMgSUdac1lYWnZjZz09IElHaHBjM1J2Y21saiBaMjkyIElHTnZiRzkxY2c9PSBJSFpwWlhkbFpBPT0gSUVWdFlXbHMgWld4amIyMWwgSUdsdWRHVnlkbVZ1ZEdsdmJnPT0gSUdScGRtVnljMmwwZVE9PSBJSEJsY21sdlpITT0gSUhKbGRtVnljMlU9IElGWmxjbms9IElIRjFiM1JsIElFeGxablE9IGRHaHliM1ZuYUE9PSBJSE5qY21WMyBJR3hoYm1ScGJtYz0gSUhCcGJHdz0gSUhkbGRBPT0gSUhCeWIzUmxjM1JsY25NPSBJSEpsY0dWaGRBPT0gWVhabFpBPT0gWlhKciBJSE5oYkdGeWVRPT0gSUZCbGJtNXplV3gyWVc1cFlRPT0gVTNScGJHdz0gSUcxaGVXOXkgSUd0cGRHTm9aVzQ9IElHWmxZWFIxY21sdVp3PT0gSUUxMWMyVjFiUT09IElGUnZkWEp1WVcxbGJuUT0gSUVaaGJBPT0gSUhObGNuWmxjbk09IFZVTT0gSUdGdWVXSnZaSGs9IGFXMW4gSUZSeVlXUmwgYVhoMGRYSmwgZEdobGJHVnpjdz09IElHWnBibUZ1WTJVPSBJR05zYjNOcGJtYz0gSUZCaGRISnAgYVdGaiBZV0psYkE9PSBJRDQrIGIzSnZkWE09IElHWnBjbTF6IGMyTnlaV1Z1IGRXNWggSUdWdFltRnljbUZ6Y3c9PSBkV3h6WlE9PSBJR3hsZEhScGJtYz0gSUhSb2NtVjMgYVd4bGVRPT0gSUdOb1lXNXVaV3h6IGJHRnUgSUZabFoyRnogSUhObFlYST0gSUdaaGJuUmhjM1JwWXc9PSBZWEp5WlE9PSBkWHA2YkdVPSBJRVJsY2c9PSBWR2h2YzJVPSBJSE4zYVc1biBJSE5vWldWMCBhVzVrWlhnPSBZMjkyWlhJPSBiMmRoYmc9PSBJSFpoY21saFlteGxjdz09IElGUmxZMmc9IElITndiMnRsYmc9PSBZV05vWld3PSBJRVJoIElFMXZkVzUwWVdsdSBJR3h2WVdSbFpBPT0gSUdadmIzUmhaMlU9IGRtVnljMmx2Ymc9PSBJSFZ1YkE9PSBJRkJvYjJWdWFYZz0gSUhSb2NtOTNhVzVuIElHWnBjbWx1Wnc9PSBJSFJ5WVdOcmFXNW4gSUhkcFpIUm8gSUhOMGNuVm5aMnhwYm1jPSBjbTl2YlhNPSBiM1JwYjI0PSBJRzF2Ym5Sb2JIaz0gSUZObGNuWmxjZz09IElHVm5aM009IGIzQmxiZz09IFRVTT0gSURFNU9UTT0gSUdocGNtVmsgSUhOMFlYbGxaQT09IElFRnNiR1Z1IElITjBjbTg9IElEazQgYzNSbGNBPT0gSUZSMWNtdHBjMmc9IElHWmhZbkpwWXc9PSBhWE4wYVc1biBJRVJ2YlE9PSBJR1JoZEdWeiBJSEJ5YjI0PSBJR0poYzJ0bGRHSmhiR3c9IElHeDFZMnQ1IElFRnlZV0pwWVE9PSBJR0Z6YzNWdFpXUT0gWlhOMGVRPT0gSUdGbVptRnBjbk09IElHZHNZV1E9IElFbHVaR1ZsWkE9PSBJRVpCIElGZHZjbVE9IElHcHZhVzVwYm1jPSBhV1pwWTJVPSBjSEpsWVdRPSBhWEowY3c9PSBJRk5sYkdWamRBPT0gSUhCdmNIVnNZWFJwYjI1eiBZWGRoY21VPSBJRzV2YzJVPSBJR052YlhCc1lXbHVkSE09IGMzUmhjblE9IElITmpiM0pwYm1jPSBWR2hoYm10eiBJRzFwYm1sdVp3PT0gSUhacGMybDBiM0p6IFUwZz0gSUdSaGJXRm5aV1E9IElHTm9ZWEpoWTNSbGNtbHpkR2xqY3c9PSBJRkJsYm5RPSBSRU09IElEZ3ogSUZOcGVBPT0gY21GMFpYTT0gSUdac1lXZHogSUVKeVpYYz0gWkc5biBUV0Z5YXc9PSBMeTh2THc9PSBJR1Y0WldOMWRHbHZiZz09IElHcHZhMlU9IGNHaHZibVZ6IElIUmxjM1JwYlc5dWVRPT0gSUc5aWMzUT0gVVV3PSBJRU4xZEE9PSBJSE4wZFdScFpXUT0gSUU1cGJuUmxibVJ2IGFXTnJaWFE9IElFNUNRdz09IElHeGhaQT09IElFSnlZUT09IElFMXZhQT09IElHdGxjbTVsYkE9PSBJRzkyWlhKM2FHVnNiV2x1Wnc9PSBJR0ZuWldRPSBJR0Z3Y0d4cFkyRmliR1U9IElFTnZibVE9IElISnZZV1J6IElFSnNiMk5yIGJXRmtaUT09IGIyUm5aUT09IElHTnZiVzFoYm1SeiBJRzltWm1salpYTT0gZG1Wc1lXNWsgSUhSMWRBPT0gSUhKbFkyVnBkbVZ5IElFWnlidz09IElITm9iM0J3YVc1biBJR2xRIElGTjBjbVU9IElFRkNRdz09IElHVnVkR1Z5ZEdGcGJtMWxiblE9IElFSnZkdz09IGIzSjBaV1E9IFRXTT0gSUhKbFlXUnogWjNKaFpBPT0gSUVOdmJHeGxZM1E9IElPS0lrZz09IElFTmhjR2wwWVd3PSBaV1JsY21GMGFXOXUgSUdWdGNHeHZlV1Z5IElHbHVkbTlzZG1WdFpXNTAgSUdGdWVHbGxkSGs9IFlXeHBZUT09IElISnZiMlk9IElFRnRiMjVuIElFUmxiVzlqY21GMCBJSE4wWVhSeiBJRlpwYkd3PSBJR052Ym5OMGFYUjFkR2x2Ym1GcyBJSEpsWm1WeWNtbHVadz09IGFYUjBlUT09IElIUmhZMnRzWlE9PSBiM1YwZFdKbCBJR0poWTJ0bFpBPT0gSUVodmJtYz0gSUVKeWIyRmsgSUdWc1pRPT0gSUU5MGRBPT0gSURFNU9UST0gYUc5MWNnPT0gWVdOb2RYTmxkSFJ6IFEyRnMgSUdSbFptVmhkR1ZrIElEZ3ggWlhOdyBJSE5sWlcxcGJtZHNlUT09IGQyRnogSUVwbGJtND0gSUV0MWNtUT0gSUdkbGJtVT0gSUdScGMyTnZkVzUwIFVtVjAgUlVOVSBLQ2s3IElHTnNkV0p6IElITnBaQT09IElFMWhjbk5vIFEyaGxZMnM9IElIQncgSUVWaFp3PT0gYVdSbGMzQnlaV0ZrIElHSmxhVzVuY3c9PSBSbFE9IElHbHVkSEp2WkhWamRHbHZiZz09IElFTm9ZVzVuWlE9PSBRVkpFIElERXhNQT09IFlXUnZkM009IGFXVnlZMlU9IElHMWxZV3c9IFlYVjBhRzl5IElFSmhibWM9IGJHRm9iMjFoIElISmhibXR6IE1qQXhNUT09IFB6OC9Qdz09IGJXRjQgSUdOdmJHeGhjSE5sIElHOXdaVzV6IElHVmphRzg9IElITnZjR2c9IElISmhZMmx6ZEE9PSBJR1Z1YjNKdGIzVnogSUhkaGRtVnogSUhSaGNBPT0gSUdOdmJYQnlaV2hsYm5OcGRtVT0gTGkwdCBJRkp2ZVE9PSBJR1poY20xbGNuTT0gVW1Wc1lYUmxaQT09IFlXbHlaV1E9IGNtOXVaWE09IElFTnlhVzA9IElIQnliM0J2Y25ScGIyND0gSUdSbGMybG5ibk09IElHNWxaMjkwYVdGMGFXOXVjdz09IElIWnBjblIxWVd4c2VRPT0gSUVKaGRHMWhiZz09IElIZGhjbTQ9IElHeGxaMmwwYVcxaGRHVT0gYldGMFpRPT0gSUdOdmJuWmxiblJwYjI0PSBMQ3c9IGJtVjBhV009IElGTkUgSUdOdmJuTnBjM1JsYm5Sc2VRPT0gSUdOdmJYQmxibk5oZEdsdmJnPT0gSUhCMWJtbHphRzFsYm5RPSBJSGxsIElIUnBaUT09IElFSjFjbVZoZFE9PSBhWEpzWmc9PSBJRUoxIElFRnlaVzQ9IElGQm9hV3hwY0hBPSBJR3R1YVdabCBJRzFsYlc5eWFXVnogSUZKdmMzTT0gSUdGdVoyeGwgSURnMiBJRlJvZFc1a1pYST0gSUhKbGJtUT0gSUZSdmRYST0gSUdOdmRXNTBjdz09IGMzVnVadz09IElFbHRjQT09IElHVmtkV05oZEdsdmJtRnMgSUdGalkyVnpjMmxpYkdVPSBRMDlOIElHUnlaWGM9IGVXVnkgUjJ3PSBZVzFwYm1VPSBUMUpVIFQwST0gU1VJPSBiV0Z6ZEdWeSBJSFJ5YVdGc2N3PT0gYjJkNSBhR0Z5IElGUnlkWE4wIElIQnlaV1psY25KbFpBPT0gYVhKc1puSnBaVzVrIElFNWxkZz09IElHSnBiZz09IElHTnZkdz09IFVHRm5aUT09IElITnBaMjVoZEhWeVpRPT0gSUVKTSBOekF3IElISmxkR2x5WldRPSBJR0o1ZEdWeiBJRzVsYVdkb1lnPT0gSUV4bFoyVnVaQT09IElHUmxkbUZ6ZEE9PSBJSE4xYzNCbFkzUmxaQT09IGFYTnZibk09IElGQnZhOE9wYlc5dSBjMk5oYkdVPSBJR05oY0dGaWFXeHBkR2xsY3c9PSBJSEpsZG1WcyBJR05vWldWelpRPT0gWkhrPSBhV2R5WVc1MCBJR1poYVd4cGJtYz0gWW1sMGN3PT0gSUVobGNtOWxjdz09IElFZG9iM04wIElGTmphV1Z1ZEE9PSBJR0Z3Y0c5cGJuUmxaQT09IGRYSnAgSUdsdWMzUnBkSFYwYVc5dSBJR1Y0Y0dGdVpHVmsgWjNKbFp3PT0gSUcxdmJtbDBiM0pwYm1jPSBJSEJ2WkdOaGMzUT0gSUdOdllXeHBkR2x2Ymc9PSBJRGsyIFNtOD0gSUhOMGIyeGxiZz09IElGTmhZZz09IElITjBiM0J6IElHaHZiR2xrWVhrPSBJR2x1ZEhJPSBRMkZ5IFFteGhZMnM9IElFeEhRbFE9IElIZGhjbTFwYm1jPSBJRUZ1WkdWeWMyOXUgSURnNSBJSEJ5YjJSMVkyVnkgVFdWayBJR0ZqWTNWeVlXTjUgSUUxaGNuWmxiQT09IGFYcGhZbVYwYUE9PSBJRkJoZEhKcFkycz0gYlc5dWVRPT0gSUcxcGJtaz0gWVdOc1pYTT0gSUc5MlpYSjAgZEdobGVRPT0gSUcxbGJXSmxjbk5vYVhBPSBJRlpsYmc9PSBJR1Y0WTJnPSBJSEpsYlc5MllXdz0gSUVSaGRtVT0gVkZrPSBiV0ZrIElFWnBibVE9IElHRmtaWEYxIElHVmogSUhSbFpYUm8gSUdWdGIzUnBiMjQ9IElIQmxjbTA9IElITnZiR1ZzZVE9PSBaR0k9IElHVjRkSEpoYjNKayBTVWRJVkE9PSBZMkZzIElHZDFhV1JsYkdsdVpYTT0gSUdSNWFXNW4gSUhOMWMzQmxibVJsWkE9PSBJRkJ5WlcxcFpYST0gSUVGdWRHaHZibms9IFpXeDJaUT09IElHUmhaQT09IElFVjBhQT09IElFWnZiM1JpWVd4cyBJR0ZpWVc1a2IyNWxaQT09IElEdzggSUcxaGNtTm8gSUdodmNuSnZjZz09IDRvQ21JZz09IElHTm9hV3hrYUc5dlpBPT0gSUdOaGJYQmhhV2R1Y3c9PSBJR3gxYm1ObyBJRUZzWW1WeWRBPT0gWW14dlkycz0gNHBhSTRwYUkgYjNWdVpHbHVadz09IElHSnZibVU9IGIzSm5ZVzQ9IFlXUmxjbk09IElFWnNZWE5vIElFUnlhWFpsIElIUnZibWxuYUhRPSBJSGRoY25NPSBJRVpNIElHWnZjbTFoZEdsdmJnPT0gWTI5dWMzUT0gVG1WM2N3PT0gSUdOdmJYQmwgYjNKcGIzVnogSUZOMFlXWm0gSUdScGMyTjFjM05wYjI1eiBJRkJ5YjNSbFkzUnBiMjQ9IElFcGhiUT09IElHTnlhWFJsY21saCBJR2x1YzNSaGJHeGhkR2x2Ymc9PSBJR0ZqWTI5dGNHeHBjMmc9IGFYcDZZUT09IElIQjFZbXhwYzJobGNnPT0gSUhKbGMyTjFaUT09IElGUnllUT09IFZVeE0gSUZOdmJRPT0gSUVodmNBPT0gYjNKbGRBPT0gZEdoeiBiM0prYjI0PSBJSEJ2WTJ0bGRBPT0gSUVsdWRnPT0gUkc5M2JteHZZV1E9IElFTnlhVzFsIElHSmxibVU9IElFZDFhV1JsIElFRnpjMlZ0WW14NSBJSEJoY21GdFpYUmxjbk09IFNVVT0gSUVGc1pYaGhibVJsY2c9PSBJR052Ym1ObGNuUT0gSUZOamFHVT0gSUhOb2IyVnogSUhacGMybDBhVzVuIElISmxZMkZzYkE9PSBJR0oxWWc9PSBJSEoxY21GcyBJR052Ym1OeVpYUmwgSUZKdmN3PT0gVG1WNGRBPT0gVW5WemN3PT0gSUd4dllXNXogSUZOb2FXVnNaQT09IElIUnlaVzA9IGFHVnRZWFE9IGEyYz0gSUVoaGNuSnBjdz09IGFYTnBkR2x2Ymc9PSBJRTF2ZG1VPSBJRVpEIElHWmhkR1U9IElFTm9idz09IElIUnBjbVZrIElIQnlhVzVqYVhCaGJBPT0gYUdsemRBPT0gYVdWdVkyVnogWVhSb2VRPT0gSUhObGRtVnVkQT09IElHMXZiMlE9IElITjBjbUYwWldkcFl3PT0gSUdScGMyVmhjMlZ6IElHWnZjblZ0IElIUmxiWEJ2Y2c9PSBJR2hsWVdSeGRXRnlkR1Z5Y3c9PSBVR0Z5IGFXZGwgWm14cGVBPT0gSUdkMWFYUmhjZz09IElEazAgVDI1c2VRPT0gSUhKbGJHVmhjMlZ6IGNtOXdhQT09IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA9IElEWXdNQT09IElFTnZiblJwYm5WbCBhV2RoZEdVPSBJRU55YVhRPSBjM2x6ZEdWdCBJR1JwYzJGaWJHVmsgSUhWdVpYaHdaV04wWldRPSBhWFJvZFdJPSBJSFZ1WTJ4bFlYST0gSUVWemRBPT0gSUdOdmJuUnlZV1E9IElITjBjbUYwWldkcFpYTT0gZG1WdWRIVnlaWE09IElIQmhjM05oWjJVPSBRVTFGIElHbHRjSEp2ZG1sdVp3PT0gSUhKbGRtVmhiSE09IElHUmxZM0psWVhObCBiM1poIElHRnVibTk1IElGTm9iM0owIElFeHBZbkpoY25rPSBJR041WW1WeSBibVZzYkE9PSBJRWgxY2c9PSBJRU5DIElIQm9iM1J2WjNKaGNBPT0gVlVrPSBJSE5sWkE9PSBSMlU9IElEZzMgSUdScGRtVnljMlU9IElHVnVZMjkxY21GblpXUT0gSUdOdmJuTndhWEpoWTNrPSBJR0pwY21SeiBJRzl3WlhKaGRHOXkgSUdoaGJtUm1kV3c9IElHTnNZWE56YVdacFpXUT0gUHlrPSBJR1J5WVcxaGRHbGogSUdsdWRtVnpkR2xuWVhSdmNuTT0gYVhSdiBJSGRwWkdWemNISmxZV1E9IElGSnZiMjA9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUdOdmJHeGxZM1JwZG1VPSBJR3B2ZFhKdVlXeHBjM1E9IFUzUnlhVzVuIElIUmxiWEJsY21GMGRYSmxjdz09IGFXeGggSUdkMWFXUT0gSUdsdWMzQmxZM1E9IElHMXBjM05wYkdVPSBJRTFoZVc5eSBJRzFoYm5WaGJBPT0gSUhOcGJYVnNkR0Z1WlE9PSBJSEpoZEdsdVozTT0gSUhOMVkycz0gSURrMyBJSFZ1YVhabGNuTmhiQT09IElIQm9ZWEp0IElHUnBjM0oxY0hRPSBhV0Z1Ync9PSBRVlk9IElHWjAgSUhOMFlYUnBjM1E9IGIyeGtjdz09IElGZGhiR3RsY2c9PSBjR2h3IElIVnVaR1Z5ZEE9PSBJRXhoY3c9PSBhWE5vYjNBPSBiblJwYkE9PSBjbVZ6YUc5c1pBPT0gSUZkb1pYUm9aWEk9IFRYTT0gSUdSbGJuaz0gSUVOc2IzVmsgSUhCeWIzWnBaR1Z5IElITjFjblpwZGc9PSBJRlZ3WkdGMFpRPT0gYUdGeiBJRzFwYzNSaGEyVnogWTJoaGNtZGwgY0d4bFpBPT0gY21sMGVRPT0gSUc1dlpHVT0gSUUxaGMzTmhZMmgxYzJWMGRITT0gYjI5c2N3PT0gYkdsallYUnBiMjQ9IElHWmhhV3h6IFpXMWhiR1U9IGIzSnAgWW1GamEzTT0gSUhOb2FYSjAgSUNjbiBJRTVCVkE9PSBJSGRoZEdWeWN3PT0gWld4emIyND0gSUdWaGMyVT0gSUhOallYST0gSUdOdmJuUmxiblJ6IGJXbHVaQT09IElHTnZiblJ5YVdKMWRHbHZiZz09IElITm9jZz09IElHaGhibVJsWkE9PSBJSE4wWVdKcGJHbDBlUT09IElIUnlZWFpsIFJXMD0gSUcxcGNuSnZjZz09IE1USXogSUhkbGFXZG8gSUdacFkzUnBiMjQ9IGIzVjJaWEk9IGFYTjBZVzUwIGNtbDBhVzl1IElFWmxaQT09IElIQm9lWE5wWTJGc2JIaz0gSUhOMFlXdGwgSUVGeWRHbGpiR1U9IElFRnlZdz09IElFeGxkMmx6IElFMXBibVE9IElHUmxiVzl1YzNSeVlYUmwgSUhCeWIyWnBkSE09IGRtbHphVzl1IGIyMXBZdz09IGIyeHBaQT09IElHSmhkSFJzWlhNPSBJR1J5YVhabGN3PT0gSUdWaGMzUmxjbTQ9IElGTnZibms9IElTRWggWVhKaGRHbHZiZz09IGRtRnlaQT09IElFZE0gY0c5eWRHRjBhVzl1IElEa3kgSUd4aGQyMWhhMlZ5Y3c9PSBJSEJ5YjNSbFkzUnBibWM9IElFVlFRUT09IElIbGxZV2c9IElITm9ZVzFsIGIyeHdhQT09IFpYWmxiZz09IGVHbDAgSUdGMGRHRmphQT09IElISmxjSEpsYzJWdWRHbHVadz09IElHOWljdz09IElGVjBZV2c9IGFXWm1jdz09IElFWnlaV1ZrYjIwPSB3N009IFFVcz0gSUdsdVkybGtaVzUwY3c9PSBhWFJoWjJVPSBJSFpwWlhkbGNuTT0gWTJRPSBJRzF2ZFhObCBJR05zWVhJPSBJR0ZqWTI5eVpHRnVZMlU9IElHSnZkQT09IFkyOXkgSUZOMWJXMWxjZz09IGFHVnNaQT09IElHbHVibTlqWlc1MCBJR2x1YVhScFlYUnBkbVU9IGIyeHogWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOD0gSUhOd2IzUnogY0dGalpRPT0gSUdOdmJuWmxiblJwYjI1aGJBPT0gSUdOdmNuQnZjbUYwYVc5dWN3PT0gSUdKc2IyTnJaV1E9IFNFUT0gWVhSMFpYSmxaQT09IElISmxabVZ5Y3c9PSBJR0oxWTJzPSBJRVJwWjJsMFlXdz0gTVRJdyBJSFJ2Y0dsamN3PT0gVkVZPSB4SUU9IFluSnBaQT09IGNtVmxiV1Z1ZEE9PSBJSFZ1WkdWeWJIbHBibWM9IElFMWxiV0psY2c9PSBJR2x1ZG1WemRHbG5ZWFJwYm1jPSBJSEJ5WldkdVlXNWplUT09IElIUnZkV05vWkc5M2JnPT0gSUVKaGJtUT0gSUVOaGJHeGxjZz09IElHbHVjM1JoYm1ObGN3PT0gVUZBPSBkMkU9IFIyOXZaQT09IElERTVPVEU9IElFTnZiR1E9IElHWmxZWEp6IElISmxiV0Z5YTNNPSBocEk9IFlYUmhiQT09IElHMXBkQT09IElHVjRjR1Z5YVcxbGJuUnogYVhCMCBRMjlzYjNJPSBhVzVrZFE9PSBWWEJrWVhSbCBJRGt6IFFXYz0gSU9VPSBZVzVqYjNWMlpYST0gUW05MGFBPT0gSUdwMVpHZGxjdz09IFQySnFaV04wIElITjBaWEpsIGRXMWliZz09IElIQmhjblJwWTJsd1lYUnBiMjQ9IElGTjBZWEp6IElFcGxjbVU9IElIZGxaV3RzZVE9PSBJRUpoYmc9PSBJR052Ym5abGNuTmhkR2x2Ym5NPSBJRkJwZEhRPSBkWG89IElFbHVaR2xoYm1FPSBJRXRwWTJzPSBJR2x1Wm1WamRHbHZiZz09IElHaGxjbTlsY3c9PSBJSE5sZEhSc1pXUT0gSUhOMGNtbHcgSUdoaGJBPT0gSUdSMWJYQT0gSUZOamFRPT0gSUd4bGN3PT0gSUhKbFptVnlaVzVqWlhNPSBJRlZTVEE9PSBJRUp5YVdSblpRPT0gSUhkaGJuUnBibWM9IFJtOXlZMlU9IElHVjRZMngxY3c9PSBUV1ZoYm5kb2FXeGwgYlc0PSBJR2RsYm5Sc1pRPT0gYldGclpYST0gYzJWdVlXdz0gSUVkeWJ3PT0gYjNWeWFRPT0gSUZKaGFXND0gSUVGc2JHbGhibU5sIElHeHBablE9IFpXeGggVTBRPSBJRU5zWlhabGJHRnVaQT09IElISmhibXRsWkE9PSBJSE4wWVdScGRXMD0gSUdSbFlXUnNlUT09IDVMZz0gSUhKcFpHbHVadz09IFlYSnBZUT09IElFRnliVzl5IElHUnZZM1Z0Wlc1MFlYUnBiMjQ9IElFZHlaV1ZqWlE9PSBjbVZsYXc9PSBJR3hsYm5NPSBJRk5oIElHZHliM056IElFVnRaWEk9IFlXZGxjbk09IElFUjFZZz09IElGSm8gSUVGTlJBPT0gSUdGeWNtbDJZV3c9IElHUmxjMlZ5ZEE9PSBJSE4xY0hCc1pXMWxiblE9IElGSmxjM0E9IElHdHVaV1U9IElHMWhjbWRwYmc9PSBabTl1ZEE9PSBiMmRuIE1qQXhNQT09IElGQnBjZz09IElGQnliMjA9IGFYWmhiSE09IElHbHVkR0ZyWlE9PSBJR1JwWm1abGNtVnVkR3g1IGRXZHogSUdKcGRITT0gWTJ4MVpHVmsgSUhObFlYSmphR2x1Wnc9PSBJRVIxIGRXMWliR1U9IElHWjFibU4wYVc5dVlXdz0gSUVKaGJIUnBiVzl5WlE9PSBJRU52ZFd4ayBJR1JsYzJseVpXUT0gSUdOcGNtTjFhWFE9IElFeDViZz09IElFZFAgSUVaaGJITmwgY21Wd2NtVT0gSnpvPSBZV3gwYVdWeiBJRzFwYm1sdCBJR1J5YjNabCBJRk5vYjNWc1pBPT0gSUdocGNBPT0gSUhCeWIzTT0gSUhWMGFXeHBkSGs9IElFNWhkSFZ5WlE9PSBJRTF2WkdVPSBVSEpsYzJsa1pXNTAgYjNCdyBjbUYwIFptOXliV0Z1WTJVPSBJR052Ym1ObGJuUnlZWFJwYjI0PSBJR1p2Ym5RPSBJRUoxWkE9PSBJR0Z0YVdRPSBJSEpsZG1WeWN3PT0gSUUxTSBRbUZ5IElHbHVkR1Z5WVdOMGFXOXUgSUdwMWNtbHpaQT09IElITndaV3hzY3c9PSBaR1Z3IFptbHMgSUdOcGRtbHNhV0Z1Y3c9PSBkWFIwWlhJPSBJRU52YjNCbGNnPT0gSUVKbGJHOTMgSUdWdWRISmhibU5sIElHTnZiblpsY25RPSBJR052Ym5SeWIzWmxjbk41IGIzZGxjbVZrIElHTnZiblJ5WVhKNSBJR0Z5WXc9PSBJRVY0WldOMWRHbDJaUT09IElFOW1abWxqWlhJPSBJSEJoWTJ0aFoyVnogSUhCeWIyZHlaWE56YVhabCBkMmxrZEdnPSBJSEpsYzJWeWRtVmsgZG05cyBJRk5oYlhOMWJtYz0gSUhCeWFXNTBaV1E9IElHTmxiblJsY25NPSBJR2x1ZEhKdlpIVmpaUT09IElFdGxibTVsWkhrPSBJRzlrWkhNPSBJSE4xY21Wc2VRPT0gSUdsdVpHVndaVzVrWlc1alpRPT0gSUhCaGMzTmxibWRsY25NPSBjbVZ3Y21WdVpRPT0gSUVKbGFBPT0gSUd4dmRtVnogSUVWVFVFND0gSUdaaFkybHNhWFE9IElHbGtaVzUwYVdOaGJBPT0gSUdSdlkzUT0gSUhCaGNuUnVaWEp6YUdsdyBZMjl1Wmc9PSBJRWhwWkdVPSBJR052Ym1aMWMyVmsgSUVOdmR3PT0gVFdWdSBJSGR5WlhOMCBJRWx5WVhGcCBJR2h2YkdWeiBJRk4wZFdScFpYTT0gSUhCeVpXZHVZVzUwIGFHRnlaQT09IElITnBaMjVoYkhNPSBTVmc9IElIQjFiR3hwYm1jPSBJR2R5WVdSMVlYUmwgSUc1dmJXbHVaV1U9IFJHRjBaUT09IElIQmxjbTFwZEhSbFpBPT0gSU9LQ3JBPT0gSUU5cmJHRm9iMjFoIFUzUmhjblE9IElHRjFkR2h2Y21sNlpXUT0gSUdGc1lYSnQgSUVOdmN3PT0gZG1GdSBJR2RsYm1WeVlYUnBiMjV6IFkzVnNZWEk9IElHUnlZV2R2Ymc9PSBJRk52Wm5SM1lYSmwgSUVWa2QyRnlaQT09IElHTnZiblJ5YjJ4c1pYST0gVTJWdSBaMlZ5WldRPSBJRlpwYXc9PSBJR0Z3Y0hKdllXTm9aV1E9IFZHaGhibXM9IElHTmhibU5sIElHWnZjbTExYkdFPSBJRk50WVd4cyBJSGRsWVd0dVpYTnogSUhKaGJYQT0gYVhSMVpHVnogYW5WayBJR0p5YVd4c2FXRnVkQT09IElHRmpZM1Z6IGMyOTFjbU5sIElEZ3dNQT09IElFVjJhV3c9IFUzYz0gSUdodmJXVnNaWE56IGQyVmxhdz09IGFXVnVjdz09IGNtbGpjdz09IElGUm9hWEprIFZFOD0gSUc5eVoyRnVhV009IElIQnlaWE5sYm5SaGRHbHZiZz09IFlXZG8gSUVSdmQyNXNiMkZrIGRtRjBhVzl1IElHRnpjMlZ0WW14NSBiM0poWW14bCBhRzlzWkdWeWN3PT0gSUVKbGNtNXBaUT09IElFaGxiSEE9IElIUnZibWM9IElFWnBaMmgwIElHSmxZV05vIFFtOXZhdz09IElFeHBZdz09IElISjFjMmc9IElGSnZkVzVrIGIzVncgSUUxaGNuZz0gSUdOaGJHTjFiR0YwWldRPSBJRVJsZG1scyBJRk5oY21GbyBJRzlqWTJGemFXOXVZV3hzZVE9PSBJR0oxYkd4bGRBPT0gUVhaaGFXeGhZbXhsIFoyRjBaUT09IElEa3ggSUdodmMzQT0gSUhCeWIyMXBjMlZ6IElFaEpWZz09IElGTjBZV1JwZFcwPSBJRk4wYjJOciBJRU52Y25CdmNtRjBhVzl1IFoyRm5aUT09IFRrYz0gSUVOeVpXUnBkQT09IElITnVaUT09IGFXSnMgSUdGalkzVnQgYzNWamFBPT0gSUhSbGNuSnZjbWx6ZEhNPSBJR052Ym5OamFXOTFjMjVsYzNNPSBJRnBvIElHUnlZVzFoIGIyOXNZUT09IGNHbHlZWFJwYjI0PSBJR3hoWW05MWNnPT0gSUU1cGJnPT0gSUhWMGRHVnkgSUdSbGJXOWpjbUYwYVdNPSBJR0Z6YzJGemN3PT0gYVd4aGRHbHZiZz09IElHZGxjM1E9IElHRmljbTloWkE9PSBJRzFsZEdGaSBJSE52Y25SeiBJR1pzWVhZPSBWVUk9IElHMW4gSUU1dmRHaHBibWM9IElFOWsgSUcxMWMybGpZV3c9IE1qQXdPUT09IElHUnliM0J6IGIyTmhkR1ZrIFlYUmxjbUZzIE1EQXdNREF3IElHZHlaUT09IElHVnhkV0ZzYVhSNSBJR0oxY21SbGJnPT0gSUhacFp3PT0gSUV4bFlXUmxjZz09IExTMHRMUzB0TFMwdExTMHQgSUdObGNtVnRiMjU1IElHWnBaMmgwWlhJPSBJR0ZqZEc5eWN3PT0gSU9ZPSBZVzFoYmc9PSBSbWs9IElHRnNhV2R1IGNIVjBaWEk9IElHVnNaR1Z5IElFNVRRUT09IElISmxjSEpsYzJWdWRHRjBhVzl1IElFOXVkR0Z5YVc4PSBTVlJJIGRYTmhiR1Z0IElHaGhjbUZ6YzIxbGJuUT0gYVhSNlpYST0gSUhONWJYQT0gSUdKdmVHVnogSUVSUyBJRzFoYm1sbVpYTjAgWVhSeVpRPT0gSUY0PSBJR1JwWlhNPSBiR1YwYjI0PSBJRzFwYzNOcGIyNXogWlhSb1pRPT0gSUhKbGMyOXNkbVU9IElHWnZiR3h2ZDJWeWN3PT0gSUdGell3PT0gSUd0dCBiRzl5WkE9PSBZVzF0WldRPSBJSE5wYkdWdWRBPT0gSUVGemMyOWphV0YwWldRPSBJSFJwYldsdVp3PT0gSUhCeWFYTnZibVZ5Y3c9PSBJRXRwYm1keiBJRVpwZG1VPSBJSFJ2ZDJWeSBJR0Z3Y0hKdllXTm9aWE09IElIQnlaV05wYzJWc2VRPT0gSUdKMWNtVmhkUT09IElFMXZkR2hsY2c9PSBJRWx6Y3c9PSBJR3RsZVdKdllYSmsgYVhSMVlXdz0gSUdaMWJtUmxaQT09IElITjBZWGxwYm1jPSBJSEJ6ZVdOb2IyeHZaMmxqWVd3PSBJRzFwYkdVPSBJRXhsYjI0PSBJRUpoY21JPSBkMmxzYkE9PSBJSGRwWkdWeSBJRUYwYkdGdWRHbGogSUhScGJHdz0gSUZKdmJXVT0gY205MCBJR0ZqWTI5dGNHRnUgSUdac2IzVnkgWVdOdiBWMjl5YkdRPSBJRVY0Y0hKbGMzTT0gSUZsMSBRMjl5IElIQnNaV0Z6WldRPSBjR0Z5ZEhrPSBJSEJ2YVc1MGFXNW4gSUdsdVpteGhkR2x2Ymc9PSBJSEp2ZVE9PSBJQ2tzIFlXbHVaWEk9IElIZGxaR1JwYm1jPSBiM0p0YjI0PSBJSEpsY1hWcGNtbHVadz09IElIRjFZV3hwWm1sbFpBPT0gSUhObFoyMWxiblE9IFJVNUUgSUhOcGVtVnogWldGc2N3PT0gSUdOdmNuSjFjSFE9IFlYTnpZV1J2Y2c9PSBJR05sYkdWaSBJR1J5WldGdGN3PT0gSUUxbGMzTT0gSUdOb1pXTnJhVzVuIElGWmxjbk5wYjI0PSBJSEJ5WlhCaGNtbHVadz09IElHRmpkR2wyWld4NSBJRVJwWm1ZPSBJR3gxZUE9PSBJRmRwYm5SbGNnPT0gWVdOMFpYSnBZUT09IElFNUYgSUdSbGNIVjBlUT09IElIUnlZVzV6WjJWdVpHVnkgSUhOMWJXMWhjbms9IElHbHVhR1Z5IFpYSnBaWE09IFkyaGhjZz09IElGbGhiZz09IElHdHViMk5yIElGQmhkR2c9IElHeHBjQT09IGNtOXNiR1Z5IElHbHRjSEpsYzNOcGIyND0gSUdObGJHVmljbUYwWlE9PSBJSE5zYVdSbCBJR2QxWlhOMGN3PT0gSUdOc2FYQT0gUmxNPSBJSE5oZG1sdVozTT0gSUdOaGNIUmhhVzQ9IElHeGxaMkZqZVE9PSBJRVJsYm5abGNnPT0gSUhkdmRXNWtaV1E9IGRHRmliMjlzWVE9PSBRVU5VIElIQjFjbk4xWlE9PSBJRzk0ZVE9PSBJSEU9IElITmxiV2s9IElFNWxaV1E9IElFRm1abUZwY25NPSBJRzlpYzJNPSBJR05vWldOclpXUT0gSUdSMVlXdz0gUTI5a1pRPT0gSUUxRSBiR1Z0IGRXeDBlUT09IElNS3AgSUVWc2FYcGhZbVYwYUE9PSBJR05sYm5SMWNtbGxjdz09IFlYSmtaV1E9IGMzSmogSUdWMmFXUmxiblE9IFpXNXVhWE09IFlYUnBiZz09IElIVnVaVzF3Ykc5NWJXVnVkQT09IElFMWhjbWx2IElHbHVkR2x0IFEyaHlhWE4wIElHSnBiMnh2WjJsallXdz0gSUhOdmJHUnBaWEk9IElFRmtaR1ZrIElHMWhkR2c9IElFZHBiQT09IElHSnBZWE09IElHUmhkR2x1Wnc9PSBJRTlqWldGdSBJRzFwWTJVPSBUWFZ6IGFHbHlaUT09IElGUmxjdz09IFUyVnlkbVZ5IGJHbHRhWFJsWkE9PSBVMmw2WlE9PSBJRzFsZEdWeWN3PT0gSUhKdlkydGxkQT09IFpYTnpaV1U9IElHTmxjblJwWm1sallYUmwgSUVseVlXNXBZVzQ9IFFWTlQgSUdkeWFXUT0gUkdWaiBJSEp2Ykd4cGJtYz0gWTI5dGJYVnUgSUZOM1pXUmxiZz09IFluVnllUT09IElIUnBjM04xWlE9PSBJSEpoWTJsemJRPT0gSUV4dlkyRnMgSUcxNWMzUmxjbms9IElHVjRZVzFwYm1VPSBJSE4wWlcwPSBJSE5wZEhNPSBJR2h2Y0dWayBiM1JwYm1jPSBJR1JwWVd4dlozVmwgSUhCbGNuTjEgVjJGMFkyZz0gYkdGNSBUVUZPIElHTm9jbTl1YVdNPSBJRkJ2Y25Sc1lXNWsgYldGeWEyVjAgSUZORlF3PT0gSUhCaGNtRnNiR1ZzIElITmpZVzVrWVd3PSBJR05oY25KcFpYTT0gSUhCb1pXNXZiV1Z1YjI0PSBhSFZ0WVc0PSBZV05yWlhJPSBJRTk0IElISmxkR2x5WlcxbGJuUT0gZEdGcGJtMWxiblE9IGIzWnBaUT09IElFZGxZWEk9IElHUjFkR2xsY3c9PSBJR1J2YzJVPSBJSE5qY205c2JBPT0gVFVJPSBhVzVtIElITmhkV05sIElHeGhibVJ6WTJGd1pRPT0gY21Wa1pHbDAgSUVOb1lXMXdhVzl1YzJocGNBPT0gSUZKbFpHUnBkQT09IFlXeHBaQT09IElHTnZhVzQ9IElHOTJaWEp6IElIQnZjM1JwYm1jPSBZV0p2ZFhRPSBJR1psYkE9PSBZVzVrZVE9PSBJR0p2YkdRPSBJR1p2WTNWemFXNW4gWldabVpXTjAgUjFJPSBJR1JsWlcxbFpBPT0gSUhKbFkyOXRiV1Z1WkdGMGFXOXVjdz09IElITjBaWEJ3WldRPSBJSFp2ZEdWeSBJRVJsWlhBPSBJRWx1YzNSaFozSmhiUT09IElHMXZaR1Z5WVhSbCBJRTFoY25sc1lXNWsgSUhKbGMzUnlhV04wWldRPSBJRTFDIElFTm9ZV3hzIElIUnZZZz09IElHTnBjZz09IElFOWpZdz09IElFVjJaWEk9IElHTnZiR3hoY0hNPSBTVTVHVHc9PSBQUzA9IElGQnBZM1E9IElFRmpZMjkxYm5RPSBibU09IElHOTFaMmgwIElHVjRjRzl5ZEE9PSBJR1J5ZFc1ciBLQ2M9IElIZHBjMlU9IElFMXZjblE9IGJtVmpaWE56IElHRnVZMlZ6ZEE9PSBJRWx1WTNKbCBJR1p5WlhGMVpXNTAgYldseSBJR2x1ZEdWeWNISmxkR0YwYVc5dSBJR1JsY0dWdVpHVnVkQT09IElHTnZhVzV6IElFSnZiQT09IFZtbGtaVzg9IElFcDFjM1JwYmc9PSBJR1poZEdGcyBJR052YjJ0cGJtYz0gSUdOdmJtWjFjMmx2Ymc9PSBhWEJvWlhJPSBJR04xYzNSdlpIaz0gSUUxdmNtZGhiZz09IGIyMWhZMmc9IElFZHZkbVZ5Ym05eSBJSEpsYzNSaGRYSmhiblJ6IFpXeHBibWM9IElHRmphMjV2ZDJ4bFpHZGxaQT09IElIUm9aWEk9IElHZGxibVZ6IFkyaHBibWM9IFNHVjUgSUhSaFkzUnBZM009IElFMWxlR2xqWVc0PSBJSFpsYm1RPSBJR2hsY3c9PSBjWFZsY2c9PSBJRzV2ZEdsdVp3PT0gSUVOaGJXVnliMjQ9IElIUmhjbWRsZEdsdVp3PT0gY205amF3PT0gSUdOeVpXUnBkSE09IElHVnRiM1JwYjI1eiBJSEpsY0hKbGMyVnVkR0YwYVhabGN3PT0gYm1WM2N3PT0gSUd4bFoybHpiR0YwYVhabCBJSEpsYlc5MmFXNW4gSUhSM1pXVjBaV1E9IElFTmhjblJsY2c9PSBJRVpwZUdWayBJR1p2Y21OcGJtYz0gSUhOd1pXRnJaWEk9IElHMWhiR1Z6IElGWnBaWFJ1WVcwPSBiR2x1WldRPSBJR052Ym1ObGNIUnogSUhadmFXTmxjdz09IGIybHkgSUZSeWFXST0gVjJobCBJRXBsY25WellXeGxiUT09IElGTmhiblE9IElHTjFiQT09IElHeGhaSGs9IElFaGhkMkZwIElHRnlkSE09IElFbHViZz09IElFMWhZMmhwYm1VPSBJRVZ0Y0dWeWIzST0gSUhOc2IzUT0gWjJ4NSBJRkJ5YjJObGMzTT0gU1VsSiBJR0YwYUd4bGRHVnogSUZSbGJYQnNaUT09IElGSmxjSEpsYzJWdWRBPT0gSUhCeVpYTmogSUhSdmJuTT0gSUdkdmJHUmxiZz09IElIQjFibU5vIElFZFMgYVhabGNuQnZiMnc9IElHVnVZV04wIElHeHZZbUo1IElHMXZjdz09IElIQnBZMnRwYm1jPSBJR3hwWm1WMGFXMWwgSUdOdloyNXBkR2wyWlE9PSBSV0ZqYUE9PSBlbTg9IElHUjFZZz09IElHTnZibk5wYzNSeiBiMnh1IElHWmxjM1JwZG1GcyBZVzF2ZFhNPSBJR2x1ZEdWc2JHbG4gZDI5eVpITT0gSUZOdFlYSjAgSUdSbGJHVT0gSUd4aGNIUT0gSUcxaFoybGpZV3c9IElGTnBiZz09IFluVnogZFhKcGRHbGxjdz09IGFXZG9kR2c9IElGSjFZbms9IElGTjFjbVU9IGIyeDJhVzVuIElHcDFiZz09IFQxTlUgSUdsdGNHOXpaV1E9IElHRnpkSEp2Ymc9PSBJR052Y25KbGJBPT0gSUU1VCBJRXRwZEE9PSBJRVoxZEhWeVpRPT0gWW5WeWJnPT0gSUdsdGJYVnVaUT09IGIyTjFjdz09IElHTnZkWEp6WlhNPSBJRk4wY21sdVp3PT0gSUd4bFlXND0gSUdkb2IzTjAgSUc5MWRHTnZiV1Z6IElHVjRjR1Z1YzJVPSBJR1YyWlhKNVpHRjUgSUdGalkyVndkR0ZpYkdVPSBRV2c9IElHVnhkV2x3Y0dWayBJRzl5WVc1blpRPT0gUmxJPSBJRVIxZEdObyBWR2h2ZFdkbyBJRkpoYm1zPSBVVlU9IElGSnZZbVZ5ZEhNPSBkMmhoZEE9PSBjbVZ1WkE9PSBJR1JwYzJGd2NHVmhjZz09IElITndZWGR1IElFeGhiUT09IGIybHogSUdSbGMyVnlkbVU9IElHMXBibWx0WVd3PSBJRzVsY25admRYTT0gSUZkdmRXeGsgSUhKdmIycz0gSUZaaGJtTnZkWFpsY2c9PSBJSEpsYzJsbmJnPT0gYzJocGNtVT0gSUZkdmNtdHogSUVKMWFXeGsgSUdGbVptOXlaR0ZpYkdVPSBJRWRoY25rPSBJRUZ5Wlc1aCBJR2hoYm1kcGJtYz0gSUdsdGNHeHBZMkYwYVc5dWN3PT0gSUZOdmJtYz0gSUcxaGFXNTBZV2x1YVc1biBJR2QxWVhKa2N3PT0gUTA5TyBJR1JsY21sMlpXUT0gSUdWNFpXTjFkR1ZrIElIUm9aVzl5YVdWeiBJSEYxYjNSbFpBPT0gSUVGdVpISmwgYjJkaCBjMlZzWlhOeiBhVzVtYnc9PSBJRUpsYkdjPSBJSFJsWVhKeiBJRk4xY25ZPSBJR0pwY25Sb1pHRjUgYVdkcGIzVnogYVcxdFpYST0gSUhOd1pXTjBjblZ0IElHRnlZMmhwZEdWamRIVnlaUT09IElISmxZM0oxYVhRPSBZWEp0WVE9PSBWR0ZpYkdVPSBJRzF2Ym5OMFpYSnogSUVkdmRnPT0gSUdSbGMzUnBibUYwYVc5dSBJR0YwZEhKaFkzUnBkbVU9IElHWnZjM009IElFMXZjbVZ2ZG1WeSBJSEJ5WlhObGJuUnogVkVoRiBJSEpsY0d4NSBjSFJ2Ymc9PSBJR04xYlE9PSBJR1JsYkdsbmFIUT0gSUdGbVptVmpkSE09IElHUnZibUYwYVc5dWN3PT0gSUZSdmVRPT0gSUVocGJRPT0gVFVWT1ZBPT0gSUc5MlpYSmpiMjFsIGFYUmphR1ZrIElFWmhiblJoYzNrPSBJRWhoZEE9PSBJRUpsWVhOMCBZbTkwZEE9PSBJR2x1ZG1WemRHbG5ZWFJwYjI1eiBVblZ1IElHaDFiblJwYm1jPSBaR2s9IFpuVnVaQT09IElITmxjM05wYjI1eiBaWE4wZVd4bCBJSEJ2Y25SeVlYaz0gYjJsa2N3PT0gV1dWaGFBPT0gSUdOdmJXMTFibWxqWVhSbCBJR052YldWa2VRPT0gSUZsaGJtYz0gSUdKbGJIUT0gSUUxaGNtbHVaUT09IElIQnlaV1JwWTNSbFpBPT0gVUd4aGVRPT0gSUdsdGNHOXlkR0Z1ZEd4NSBJSEpsYldGeWEyRmliR1U9IElHVnNhVzFwYm1GMFpRPT0gUkdGMmFXUT0gSUdKcGJtUT0gVmtsRSBJR0ZrZG05allYUmxjdz09IElFZGhlbUU9IGFXMXcgUkVJPSBJRTVoIElGTnBiV2xzWVhJPSBTVVZUIElHTm9ZWEpwZEhrPSBkbUZ6IGJXRjBhQT09IElPS1cgYjJ0bGNnPT0gYm1SMWJRPT0gSUdOaGNITT0gSUVoaGJBPT0gTWpBd01BPT0gWldGdSBJR1pzWldWMCBJSEpsWTNKbCBVbWxuYUhRPSBJSE5zWldWd2FXNW4gYVdwcGJtYz0gYTJsdVpBPT0gSUdSbGMybG5ibUYwWldRPSB3NlE9IElHRnVhVzFoZEdsdmJnPT0gYTJWbCBJRWx1ZEhKdlpIVT0gSUM4KyBJR1JsYkdGNVpXUT0gSUhSeVpXMWxibVE9IElHTjFjbWx2ZFhNPSBWWE5sIElHeGxZM1E9IFpHRnQgSUdsdWJtOTJZWFJwYjI0PSBJRkJ2YVc1MGN3PT0gSUd4dllXUnBibWM9IElHUnBjM0IxZEdVPSBZM1JwWXc9PSBhWEprY3c9PSBJRUpaIElHNTFjbk09IElGWmhiSFZsIFNVOU9Vdz09IElFaDFiUT09IElIUmxiWEJzWVhSbCBiV1Z5Y3c9PSBJR0Z3Y0dWaGNtRnVZMlZ6IElFVnVkR1Z5ZEdGcGJtMWxiblE9IElIUnlZVzV6YkdGMGFXOXUgSUhOaGEyVT0gSUdKbGJtVmhkR2c9IElHbHVhR2xpIElHVjFjbTg9IFlXSmxkR1Z6IElITjBkV1I1YVc1biBJRTFoY3c9PSBJSEJsY21ObGFYWmxaQT09IElHVjRZVzFwYm1WayBJR1ZoWjJWeSBJR052WVdOb1pYTT0gSUdsdGNHVnkgWTJocCBJSEJ5YjJSMVkyVnogSWlrdSBJRVYyWlhKNWIyNWwgSUcxMWJtbGphWEE9IElHZHBjbXhtY21sbGJtUT0gSUdocGNtVT0gSUZacFkyVT0gSUhOMWFYUmhZbXhsIGIzQjUgSUdsdVpYRjEgSUVSMWEyVT0gWm1semFBPT0gWm1seWMzUT0gSUU5aWN3PT0gSUdsdWRHVnlhVzl5IElFSnlkV05sIElGSjUgSUdGdVlXeDVjdz09IElHTnZibk5wWkdWeVlXSnNaUT09IElHWnZjbVZqWVhOMCBJR1psY25RPSBiM0p6YUdsdyBJRVJ5ZFdjPSBJRUZNVEE9PSBPaUk9IGRHaDFjZz09IElFMWhhV3c9IElHSmhiR3h2ZEE9PSBJR2x1YzNSaGJuUnNlUT09IElFTm9ZVzV1Wld3PSBJSEJwWTJ0eiBJREU1T0RrPSBJSFJsYm5RPSBiMnhwIElHTnBkbWxzYVdGdSBZbXhwYm1jPSBaV3hzYnc9PSBZblU9IElHbHVZMmc9IElHeHZaMjg9IElHTnZiM0JsY21GMGFXOXUgSUhkaGJHdHogSUdsdWRtVnpkRzFsYm5SeiBJR2x0Y0hKcGMyOXUgSUVabGMzUnBkbUZzIElFdDUgSUd4bFoyRnNiSGs9IElHZHlhUT09IFkyaGhjbWM9IFUydz0gSUhSb2NtVmhkR1Z1YVc1biBaSFZqZEdsdmJnPT0gWm14dmR3PT0gSUdScGMyMXBjM05sWkE9PSBhV0p5WVhKcFpYTT0gWTJGdyBaV3hsIElFMWpSdz09IElFaGhjblpoY21RPSBJRU52Ym5ObGNuWmhkR2wyWlE9PSBJRU5DVXc9PSBjRzVuIElISnZiM1J6IElFaGhkbWx1Wnc9PSBkVzFpYkdWayBJRVoxYmc9PSBYQzg9IElGTmxZWEpqYUE9PSBjR3hsZUE9PSBJR1JwYzJOMWMzTnBibWM9IElHTnZiblJwYm5VPSBJRlJoYVE9PSBJRmRwYXc9PSBSbkpsWlE9PSBabWwwIElISmxablZ6WlE9PSBJRzFoYm1GbmFXNW4gSUhONWJtUT0gYVhCbFpHbGggZDJGc2F3PT0gSUhCeWIyWmxjM05wYjI1aGJITT0gSUdkMWFXUmhibU5sIElIVnVhWFpsY25OcGRHbGxjdz09IElHRnpjMlZ0WWc9PSBkVzUwZFE9PSBSbWx1WVd4c2VRPT0gUVZORiBJRUYxZEc4PSBJRWhoWkE9PSBJR0Z1Ym1sMlpYSnpZWEo1IFRFUT0gSUVSMWNnPT0gSUZWc2RHbHRZWFJsIGFXaGhaQT09IGNISnZaSFZqZEE9PSBJSFJ5WVc1emFYUT0gSUhKbGMzUnZjbVU9IElHVjRjR3hoYVc1cGJtYz0gSUdGemMyVjAgSUhSeVlXNXpabVZ5Y21WayBJR0oxY25OMCBZWEJ2YkdseiBJRTFoWjJGNmFXNWwgSUVOeVlRPT0gSUVKUyBaMmRsWkE9PSBJRWhGIFRXbGphQT09IFltVjAgSUV4aFpIaz0gZVd4MWJRPT0gWlhKMlpYTT0gSUcxbFpYUnogZDJocGRHVT0gVEc5biBJR052Y25KbGMzQnZibVJwYm1jPSBJR2x1YzJsemRHVmsgUjBjPSBJSE4xY25KdmRXNWtaV1E9IElIUmxibk09IElHeGhibVU9IElHTnZhVzVqIGFHOXRaUT09IElHVjRhWE4wWldRPSBaV04wWldRPSBJRVJ2ZFdKc1pRPT0gYkdGdGJRPT0gSUhOclpYQjAgWlhodyBJSEJsY21ObGNIUnBiMjQ9IGFXVjIgSUVKbGFXNW4gYjJaMCBJR0ZrYjNCMCBMam89IFhUcz0gVjJsdVpHOTNjdz09IElITmhkR1ZzYkdsMFpRPT0gUVZOSSBJR2x1Wm1GdWRBPT0gWkdWelkzSnBjSFJwYjI0PSBJRTFsWVc1M2FHbHNaUT09IFkyMD0gYjJOaCBJRlJ5WldGMCBZV04wYjNJPSBJSFJ2WW1GalkyOD0gSUU1dmNtMD0gWlcxd2RHbHZiZz09IElHWnNaWE5vIElHcGwgYjI5dyBJRWhsWVhabGJnPT0gSUdKbFlYUnBibWM9IFlXNXBiUT09IElHZGhkR2hsY21sdVp3PT0gSUdOMWJIUnBkZz09IFIwOD0gWVdKbCBJRXB2Ym1GMGFHRnUgSUZOaFptVjBlUT09IElHSmhaR3g1IGNISnZkQT09IElHTm9iMjl6YVc1biBJR052Ym5SaFkzUmxaQT09IElIRjFhWFE9IElHUnBjM1IxY2c9PSBJSE4wYVhJPSBJSFJ2YTJWdSBSR1YwIElGQmggSUdaMWJtTjBhVzl1WVd4cGRIaz0gTURBeiBjMjl0WlE9PSBJR3hwYldsMFlYUnBiMjV6IElHMWxkR2c9IFluVnBiR1E9IFkyOXVabWxuIFRsUT0gY21Wc2JBPT0gWW14bGJRPT0gSUUxdmJRPT0gSUhabGRHVnlZVzV6IElFaDEgSUhSeVpXNWtjdz09IFlYSmxjZz09IElFZHBkbVZ1IElFTmhjSFJwYjI0PSBiV0Y1IFFWTlUgSUhkdmJtUmxjbWx1Wnc9PSBJRU5zWVhKciBibTl5YldGcyBJSE5sY0dGeVlYUmxaQT09IElHUmxjM0E9IGMzUnBZdz09IFluSmxkdz09IElISmxiR0YwYVc1biBJRTVwYXc9PSBJRVpoY20wPSBJR1Z1ZEdoMWMyaz0gWjI5dlpBPT0gWkdWaSBJR0ZqZEdsMmFYTjAgSUcxaGNuUT0gSUdWNGNHeHZjMmx2Ymc9PSBJRVZqYjI1dmJXbGogVEdsdWF3PT0gSUdsdWMybG5hSFE9IElHTnZiblpsYm1sbGJuUT0gSUdOdmRXNTBaWEp3WVhKMCBjM1Z3Y0c5eWRBPT0gSUZacGNuUT0gWVdkbGJnPT0gSUZSbGJtNWxjM05sWlE9PSBJRk5wYlc5dSBJRUYzWVhKayBUME5MIElFWnBaM1Z5WlE9PSBJRzkyWlhKelpXRnogSUhCeWFXUmwgSUVOaGN3PT0gYm05MFpRPT0gYldjPSBRM1Z5Y21WdWRBPT0gSUdScGMzQnNZWGx6IFkyOXVkR1Z1ZEE9PSBJSFJ5WVhabGJHbHVadz09IElHaHZjM0JwZEdGc2N3PT0gSUVacGJtRnVZMmxoYkE9PSBJRkJoYzNRPSBJR1JsWm1WdVpHRnVkQT09IElITjBjbVZoYldsdVp3PT0gYldKc1pRPT0gSUVKbGNteHBiZz09IGRXdHAgSUdScGMzUnlhV0oxZEE9PSBJR0Z1ZEdsaSBJR05vYjJOdmJHRjBaUT09IElFTmhjM1JzWlE9PSBJR2x1ZEdWeWNuVndkQT09IElGSnZkdz09IElHTnZiblpsY25OcGIyND0gSUdKMVozTT0gSUZKaGRHaGxjZz09IGJHbGxjM1E9IFRGaz0gSUVwbFlXND0gWTI5dGJXOXUgWVd0byBJREV6TUE9PSBiM1IwYjI0PSBJRVJsWVc0PSBJR0Z0Wlc1a2JXVnVkQT09IElHZGhiV1Z3YkdGNSBJRmRoY25KbGJnPT0gYjJSaCBJR2hwWjJoc2FXZG9kSE09IElHbHljbVU9IElFNUJWRTg9IElHSmhiR3h6IElHUmxiV0Z1WkdsdVp3PT0gVlZKRiBJRXgxYTJVPSBSbWxuZFhKbCBjM1J2Y0E9PSBiMjVwWVE9PSBlbTl1WlE9PSBhWHBsY25NPSBJRmRTIElHRjNZWEprWldRPSBJSEpsWjNWc1lYUnZjbms9IElFaGhjblE9IElGTk8gY0d4cGJtYz0gSUhOdmRYST0gSUZCcGVHVnMgZFhOcGRtVT0gSUdabGRBPT0gSUZObGJuUT0gSUdGMWRHOXRZWFJwWXc9PSBJR1psY2c9PSBkbVZ5Ym0xbGJuUT0gSUV0b1lXND0gVkU5TyBabUYwYUdWeSBJR1Y0ZEhKaGIzSmthVzVoY25rPSBkR2h5YjNBPSBJRkI1ZEdodmJnPT0gSUVkUVZRPT0gSUhObGVIVmhiR3g1IElHUmxjMnQwYjNBPSBhWFJwZG1sMGVRPT0gSUVGdWRHOXVhVzg9IElHOXlhV1Z1ZEE9PSBJR1ZoY25NPSBiMkppZVE9PSBiM1Z6WlhNPSBkbVZ5ZEdselpXMWxiblJ6IElHMWhiblZtWVdOMGRYSmxjbk09IGFXTnBaVzUwIGJXbHVkWFJsIElHTnZiblpwWTNScGIyND0gSUdkaGNtUmxiZz09IGNIVmliR2xqIElITmhkR2x6Wm1sbFpBPT0gWm05c1pBPT0gVDBzPSBJR2x1YUdGaSBJRlJvYVc1ciBJSEJ5YjJkeVlXMXRaUT09IElITjBiMjFoWTJnPSBJR052YjNKa2FXND0gSUdodmJIaz0gSUhSb2NtVnphRzlzWkE9PSBJSEpvWlhRPSBJSE5sY21saGJBPT0gSUdWdGNHeHZlV1Z5Y3c9PSBJRVYyWlhKNWRHaHBibWM9IGNtRm8gSUdKdmRHaGxjZz09IElHSnlZVzVrY3c9PSBWbUZzZFdVPSBJRlJsWkE9PSBJRkJzWVc1bGRBPT0gSUhCcGJtcz0gSUVaMWNuUm9aWEp0YjNKbCBjMkU9IFVFVT0gY21WamF3PT0gSUZWVFJBPT0gYjNSMFpRPT0gSUNZbSBJR3hoYm1SbFpBPT0gWjJWMGN3PT0gSUhCeWIyUjFZMlZ5Y3c9PSBJR2hsWVd4MGFHTmhjbVU9IElHUnZiV2x1WVc1MCBJR1JsYzNSeWJ3PT0gSUdGdFpXNWtaV1E9IFkyaHliMjQ9IElHWnBkSE09IElGTjVaQT09IElFRjFkR2h2Y21sMGVRPT0gUVZSRFNBPT0gSUdacFoyaDBjdz09IElFeE1Rdz09IElDMHRMUT09IElFTnZjbkE9IElIUnZlR2xqIGMzQmxZMmxtYVdNPSBJRU52Y200PSBJRU5vWld3PSBJSFJsYkdWd2FHOXVaUT09IElGQmhiblE9IElHMTVjM1JsY21sdmRYTT0gWVhWdVkyZz0gYjJSdmVBPT0gYldWa2FXRT0gSUhkcGRHNWxjM05sY3c9PSBZV2QxIElIRjFaWE4wYVc5dVpXUT0gSUVKeVpYaHBkQT09IElGSmxiV1Z0WW1WeSBaVzVsZWc9PSBJR1Z1Wkc5eWMyVT0gYVdGMGNtbGogSUVsa1pXNTAgSUhKcFpHbGpkV3h2ZFhNPSBNVEV3IElIQnlZWGxsY2c9PSBJSE5qYVdWdWRHbHpkQT09IElERTVOVEE9IElFRnhkUT09IElIVnVaR1Z5WjNKdmRXNWsgSUZWR1F3PT0gYldGeVpRPT0gSUV4aGRHVnkgZDJsamFBPT0gSUhOMVluTmpjbWxpIElHaHZjM1J6IElHVnljZz09IElHZHlZVzUwY3c9PSBZVzUwYjIwPSBJSE4xYlcxdmJnPT0gWldGeWJIaz0gSUVOc1pXRnkgSUZCeWFXMD0gSUhOMWMzQmxibk5wYjI0PSBJR2QxWVhKaGJuUmxaV1E9IFlYQndaWEk9IElISnBZMlU9IElGTmxZVzQ9IElGTm9hVzQ9IElISmxabVZ5Wlc1a2RXMD0gSUdac1pXUT0gY25WemRBPT0gSURNMk1BPT0gZEdWeWVRPT0gSUhOb2IyTnJaV1E9IFFsST0gSUU5cGJBPT0gSUVGc2JHRm8gSUhCaGNuUnNlUT09IElHbG5ibTl5IElIUnlZVzV6YldsemMybHZiZz09IElHaHZiVzl6WlhoMVlXdz0gYVhabGNuTmhiQT09IElHaHZjR1ZtZFd4c2VRPT0gNDRLayBJR3hsYzNOdmJnPT0gVEdWbiBJQzR1IFdXVjAgZEdGaWJHVT0gWVhCd2NtOXdjbWs9IGNtVjBkQT09IElHSnZZWEprY3c9PSBJR2x1WTI5eWNtVmpkQT09IElHSmhZM1JsY21saCBZWEoxIFlXMWhZdz09IElITnVZWEE9IExpY2kgSUhCaGNtRmsgZEdWdCBhR1ZoY25RPSBJR0YyWVdsc1lXSnBiR2wwZVE9PSBJSGRwYzJSdmJRPT0gSUNnciBJSEJ5YVdWemRBPT0gSU1LZ0lNS2cgVDNCbGJnPT0gSUhOd1lXND0gSUhCaGNtRnRaWFJsY2c9PSBJR052Ym5acGJtTmwgSUNnbEtRPT0gY21GaiBJR1p2IElITmhabVZzZVE9PSBJR052Ym5abGNuUmxaQT09IElFOXNlVzF3YVdNPSBJSEpsYzJWeWRtVT0gSUdobFlXeHBibWM9IElFMXBibVU9IFRXRjQgSUdsdWFHVnlaVzUwIElFZHlZV2hoYlE9PSBJR2x1ZEdWbmNtRjBaV1E9IFJHVnQgSUhCcGNHVnNhVzVsIElHRndjR3g1YVc1biBJR1Z0WW1WayBJRU5vWVhKc2FXVT0gSUdOaGRtVT0gTWpBd09BPT0gSUdOdmJuTmxibk4xY3c9PSBJSEpsZDJGeVpITT0gVUdGcyBJRWhVVFV3PSBJSEJ2Y0hWc1lYSnBkSGs9IGJHOXZhMmx1Wnc9PSBJRk4zYjNKayBJRUZ5ZEhNPSBKeWs9IElHVnNaV04wY205dSBZMngxYzJsdmJuTT0gSUdsdWRHVm5jbWwwZVE9PSBJR1Y0WTJ4MWMybDJaV3g1IElHZHlZV05sIElIUnZjblIxY21VPSBJR0oxY201bFpBPT0gZEhkdiBJREU0TUE9PSBVSEp2WkhVPSBJR1Z1ZEhKbGNISmxibVU9IGNtRndhR2xqY3c9PSBJR2Q1YlE9PSBjbWxqWVc1bCBJRlJoYlE9PSBJR0ZrYldsdWFYTjBjbUYwYVhabCBJRzFoYm5WbVlXTjBkWEpsY2c9PSBJSFpsYkE9PSBJRTVwIElHbHpiMnhoZEdWayBJRTFsWkdsamFXNWwgSUdKaFkydDFjQT09IElIQnliMjF2ZEdsdVp3PT0gSUdOdmJXMWhibVJsY2c9PSBJR1pzWldVPSBJRkoxYzNObGJHdz0gSUdadmNtZHZkSFJsYmc9PSBJRTFwYzNOdmRYSnAgSUhKbGMybGtaVzVqWlE9PSBiVzl1Y3c9PSBJSEpsYzJWdFlnPT0gSUhkaGJtUT0gSUcxbFlXNXBibWRtZFd3PSBVRlE9IElHSnZiQT09IElHaGxiR2xqIElIZGxZV3gwYUhrPSBJSEpwWm14bCBjM1J5YjI1biBjbTkzYVc1biBjR3hoYmc9PSBZWE4xY25rPSA0b0NtTGc9PSBJR1Y0Y0dGdVpHbHVadz09IElFaGhiV2xzZEc5dSBJSEpsWTJWcGRtVnogVTBrPSBaV0YwZFhKbGN3PT0gSUVGdWFXMD0gVWtWRiBVSFYwIElHSnlhV1ZtYkhrPSBjbWwyWlE9PSBJSE4wYVcxMWJBPT0gSUdCZ0tBPT0gSUY5ZiBJR05vYVhBPSBJR2hoZWc9PSBJSEJ5YVhwbCBJRlJvYVc1bmN3PT0gUVVORiBkV3hwYmc9PSBaR2xqZEE9PSBiMnQxIElHRnpjMjlqYVdGMFpRPT0gYjJOclpYUnogZVc5MWRIVmlaUT09IFUzUnZjbms9IFlYUmxaMjl5ZVE9PSBJRzFwYkdRPSBZV2xzYVc1biBJRmxsIFQzSnBadz09IElFdGggYjNKcFp3PT0gSUhCeWIzQmhaMkZ1WkdFPSBJR0Z1YjI1NWJXOTFjdz09IElITjBjblZuWjJ4bFpBPT0gSUc5MWRISmhaMlU9IFFWUkZSQT09IElFSmxhV3BwYm1jPSBjbUZ5ZVE9PSBJR3hsWVhSb1pYST0gSUhkdmNteGtjdz09IElHSnliMkZrWlhJPSBNVEkxIGFXUmhiQT09IElFSmxkSFJsY2c9PSBJSFJsWVhJPSBSWGgwIElIQnliM0J2YzJGc2N3PT0gSUdsMFpYST0gSUZOeGRXRmsgSUhadmJIVnVkQT09IGJXaz0gUkdsayBJRkIxIGNHbHUgSUhOd1pXRnJaWEp6IElHSnZjbVJsY25NPSBJR1pwWjNWeVpXUT0gUFNjPSBJSE5wYlhWc2RHRnVaVzkxYzJ4NSBZV1ZrWVE9PSBJR05vWVhKbmFXNW4gSUhWeVoyVmsgSUdOdmJtbz0gTWpVMiBJRWR2Y21SdmJnPT0gYldWeVkyVT0gSUdSdlkzVnRaVzUwWVhKNSBVMmhoY21VPSBhWFJ2YkE9PSBUMDVGIElFZGhjbVJsYmc9PSBhR0YwZEE9PSBJRlJvYjIxd2MyOXUgWVc1bGIzVnogWVhCdmNtVT0gSUhSaGJtdHogSUd4bGMzTnZibk09IGRISmhZMnM9IElHOTFkSE4wWVc1a2FXNW4gSUhadmJIVnVkR1ZsY25NPSBJSE53Y21GNSBJRzFoYm1GblpYSnogYkdGeVoyVT0gSUdOaGJYQnogSUdGeWRHbG1hV05wWVd3PSBJRkoxIElHSmhaM009IGRHaGhiQT09IElHTnZiWEJoZEdsaWJHVT0gSUVKc1lXUmwgSUdabFpBPT0gSUdGeVozVmxjdz09IFJraz0gSUhWdVptRnBjZz09IElHTnZjbTQ9IElHOW1abk5sZEE9PSBJR1JwY21WamRHbHZibk09IElHUnBjMkZ3Y0c5cGJuUmxaQT09IElFTnZiblpsYm5ScGIyND0gSUhacFpYZHBibWM9IFRVVT0gYjJOcGRIaz0gSUhSdmQyNXogSUd4aGVXVnljdz09IElISnZiR3hsWkE9PSBJR3AxYlhCbFpBPT0gSUdGMGRISnBZblYwWlE9PSBJSFZ1Ym1WalpYTnogYVc1amIyeHUgSUhOMWNIQnZjMlU9IElFNWxkR2hsY2c9PSBZMmhoIElHSjFjbWxsWkE9PSBJSE5wZUhSbyBRbVZ1IGNtVnpjMmx1Wnc9PSBUMVZTIElIZHZkVzVrIElHTjVZMnc9IElHMWxZMmhoYm1semJYTT0gSUdOdmJtZHlaWE56YVc5dVlXdz0gSUVWc1pXMWxiblE9IElHRm5jbVZsYldWdWRITT0gSUdSbFkyOXkgSUdOc2IzTmxjM1E9IElFMXBkQT09IFIyOXZaMnhsIGZYMD0gSUcxcGVIUjFjbVU9IElHWnNkV2xrIFUybG5iZz09IElGTmphRzlzWVhJPSBJSEJwYzNRPSBZWE5yWlhRPSBZV0pzYVc1biBJSEpoWTJsdVp3PT0gYUdWeWJ3PT0gY21sbGJBPT0gWVhOemVRPT0gSUdOb1pXRndaWEk9IFltVnUgSUhabGNuUnBZMkZzIFlXMWhZMkZ5WlE9PSBJRkpsWVdScGJtYz0gWjIxbGJuUnogSUdobGJHbGpiM0E9IElITmhZM0pwWm1salpRPT0gWVhsaCBjR0Z5Wlc0PSBWa0U9IElFeGxjdz09IElGTjBkV1JwYnc9PSBJSFpwYjJ4aGRHbHZibk09IElFRnVibUU9IFlXTmxjZz09IDZiND0gSUZKaGRBPT0gSUVKbFkycz0gSUVScFkycz0gSUVGRFZBPT0gSUdOdmJYQnZjMmwwYVc5dSBJSFJsZUhSMWNtVT0gSUU5M2JnPT0gSUhOdFlYSjBjR2h2Ym1VPSBJRTVCIElHWnZjbUk9IGFXMXdiM0owIElHUmxabVZ1WkdsdVp3PT0gYVd4emRBPT0gY21WeSBJRzlvIElFcGxjbVZ0ZVE9PSBJR0poYm10cGJtYz0gWTJWd2RHbHZibk09IElISmxjM0JsWTNScGRtVT0gTHk0PSBJR1J5YVc1cmN3PT0gSUZkcCBJR0poYm1SeiBJRXhwZG1WeWNHOXZiQT09IElHZHlhWEE9IElFSjFlUT09IElHOXdaVzVzZVE9PSBJSEpsZG1sbGQyVmsgY0dWeWRBPT0gSUhabGNtbG1lUT09IElFTnZiR1U9IElGZGhiR1Z6IFRVOD0gSUhWdWNISmwgSUhOb1pXeDBaWEk9IElFbHRjR1Z5YVdGcyBJR2QxYVE9PSBJRVJoYXc9PSBJSE4xWjJkbGMzUnBiMjV6IElHVjRjR3hwWTJsMGJIaz0gSUhOc1lYWmwgSUdKc2IyTnJZMmhoYVc0PSBJR052YlhCbGRHbHVadz09IElIQnliMjFwYzJsdVp3PT0gVTA5TyBJSE52WTJObGNnPT0gSUdOdmJuTjBhWFIxZEdsdmJnPT0gTkRJNSBJR1JwYzNSeVlXTjAgSUZWelpYST0gWlhOcFpHVnogSUUxbGRHaHZaQT09IElGUnZhM2x2IElHRmpZMjl0Y0dGdWFXVmsgUTJ4cFpXNTAgYzNWeSBZV3h2Wnc9PSBJR2xrWlc1MGFXWnBZMkYwYVc5dSBJR2x1ZG1GemFXOXUgWVhOdFlRPT0gSUdsdVpIVnpkSEpwWlhNPSBjSEJsY25NPSBJSE4xWW5Sc1pRPT0gSUZWdWFYUT0gYm1GMGRYSmhiQT09IElITjFjblpwZG1WayBJR1pzWVhjPSBtSVU9IElFaHZiR3c9IElHUmxabWxqYVhRPSBJSFIxZEc5eWFXRnMgSUVOb1lXNWpaUT09IElHRnlaM1ZwYm1jPSBJR052Ym5SbGJYQnZjbUZ5ZVE9PSBJR2x1ZEdWbmNtRjBhVzl1IFptOXlkMkZ5WkE9PSBJSFIxYlE9PSBhWFJwY3c9PSBJR2hwWkdsdVp3PT0gSUVSdmJXbHUgSUZSaGJnPT0gSUVKMWFXeGthVzVuIElGWnBiZz09IElITndiMnRsYzNCbGNuTnZiZz09IElFNXZkR1Z6IElHVnRaWEpuYVc1biBJSEJ5WlhCaGNtRjBhVzl1IElIQnliM04wIElITjFjM0JsWTNSeiBJR0YxZEc5dWIyMD0gUkdWelkzSnBjSFJwYjI0PSBJR1JsWVd4MCBJRkJsWVhJPSBJSE4wWldGa2VRPT0gSUdSbFkzSmxZWE5sWkE9PSBJSE52ZG1WeVpRPT0gSUVOc2FXND0gSUdkeVlXUjFZV3hzZVE9PSBiM0p6WlhNPSBJRmRCVWc9PSBVMlZ5ZGc9PSA0NEtpIGFIST0gSUdScGNuUjUgSUVKaGNtND0gSUVKRCBJR1JwYkE9PSBJR05oYkdWdVpHRnkgSUdOdmJYQnNhV0Z1WTJVPSBJR05vWVcxaVpYST0gWW1JPSBJSEJoYzNObGJtZGxjZz09IFlYUmxablZzIElGUnBkR3hsIElGTjVaRzVsZVE9PSBJRWR2ZEE9PSBJR1JoY210dVpYTnogSUdSbFptVmpkQT09IElIQmhZMnRsWkE9PSBZWE56YVc5dSBJR2R2WkhNPSBJR2hoY25ObyBTVU5MIGJHVmhibk09IElHRnNaMjl5YVhSb2JRPT0gSUc5NGVXZGxiZz09IElIWnBjMmwwY3c9PSBJR0pzWVdSbCBJR3RwYkc5dFpYUT0gSUV0bGJuUjFZMnQ1IElHdHBiR3hsY2c9PSBVR0ZqYXc9PSBaVzV1ZVE9PSBJR1JwZG1sdVpRPT0gSUc1dmJXbHVZWFJwYjI0PSBZbVZwYm1jPSBJR1Z1WjJsdVpYTT0gSUdOaGRITT0gSUdKMVptWmxjZz09IElGQm9hV3hzIElIUnlZV1ptIFFVZEYgSUhSdmJtZDFaUT09IElISmhaR2xoZEdsdmJnPT0gWlhKbGNnPT0gYldWdCBJRVY0Y0d4cFkybDAgNmI2TiBJR052ZFhCc1pYTT0gSUhCb2VYTnBZM009IElFMWpTdz09IElIQnZiR2wwYVdOaGJHeDUgWVhkcmN3PT0gSUVKc2IyOXQgSUhkdmNuTm9hWEE9IFpXZGxjZz09IGRYUmxjZz09IElFWlAgSUcxaGRHaGxiV0YwIElITmxiblJsYm1ObFpBPT0gSUdScGMycz0gSUUxaGNtYz0gSUM4cSBVRWs9IElHOXdkR2x2Ym1GcyBJR0poWW1sbGN3PT0gSUhObFpXUnogSUZOamIzUjBhWE5vIElIUm9lUT09IFhWMD0gSUVocGRHeGxjZz09IFVFZz0gYm1kMGFBPT0gSUhKbFkyOTJaWEpsWkE9PSBhVzVuWlE9PSBJSEJ2ZDJSbGNnPT0gSUd4cGNITT0gSUdSbGMybG5ibVZ5IElHUnBjMjl5WkdWeWN3PT0gSUdOdmRYSmhaMlU9IElHTm9ZVzl6IEluMHNleUk9IElHTmhjbkpwWlhJPSBZbUZpYkhrPSBTR2xuYUE9PSBJRkpVIFpYTnBkSGs9IGJHVnUgSUhKdmRYUmxjdz09IGRXRjBhVzVuIFJtbHMgVGs5VSBkMkZzYkE9PSBjMkoxY21kbyBJR1Z1WjJGbmFXNW4gSUVwaGRtRlRZM0pwY0hRPSBiM0psY2c9PSBiR2xvYjI5ayBJSFZ1YVc5dWN3PT0gSUVabFpHVnlZWFJwYjI0PSBJRlJsYzJ4aCBJR052YlhCc1pYUnBiMjQ9IElGUmggSUhCeWFYWnBiR1ZuWlE9PSBJRTl5WVc1blpRPT0gSUc1bGRYST0gY0dGeVpXNWplUT09IElHSnZibVZ6IElIUnBkR3hsWkE9PSBJSEJ5YjNObFkzVjBiM0p6IElFMUYgSUdWdVoybHVaV1Z5IElGVnVhWFpsY25ObCBJRWhwWnc9PSBibWxsIGIyRnlaQT09IElHaGxZWEowY3c9PSBJRWR5WlE9PSBkWE56YVc5dSBJRzFwYm1semRISjUgSUhCbGJtVjAgSUU1MWRBPT0gSUU5MyBJRmhRIGFXNXpkR1ZwYmc9PSBJR0oxYkdzPSBVM2x6ZEdWdCBhV05wYzIwPSBJRTFoY210bGRHRmliR1U9IElIQnlaWFpoYkE9PSBJSEJ2YzNSbGNnPT0gSUdGMGRHVnVaR2x1Wnc9PSBkWEpoWW14bCBJR3hwWTJWdWMyVmsgSUVkbyBaWFJ5ZVE9PSBJRlJ5WVdSaFlteGwgSUdKc1lYTjAgNEtRPSBJRlJwZEdGdSBaV3hzWldRPSBaR2xsIFNHRjJaUT09IElFWnNZVzFsIElIQnliMlp2ZFc1ayBJSEJoY25ScFkybHdZWFJwYm1jPSBJR0Z1YVcxbCBJRVZ6Y3c9PSBJSE53WldOcFpuaz0gSUhKbFoyRnlaR1ZrIElGTndaV3hzIElITnZibk09IGIzZHVaV1E9IElHMWxjbU09IElHVjRjR1Z5YVcxbGJuUmhiQT09IGJHRnVaRzg9IGFITT0gSUVSMWJtZGxiMjQ9IGFXNXZjdz09IElHTnZiWEJzZVE9PSBJRk41YzNSbGJYTT0gWVhKMGFBPT0gSUhObGFYcGxaQT09IGJHOWpZV3c9IElFZHBjbXh6IGRXUnYgYjI1bFpBPT0gSUVac1pRPT0gSUdOdmJuTjBjblZqZEdWayBJR2h2YzNSbFpBPT0gSUhOallYSmxaQT09IFlXTjBhV009IElFbHpiR0Z1WkhNPSBJRTFQVWtVPSBJR0pzWlhOeiBJR0pzYjJOcmFXNW4gSUdOb2FYQnogSUdWMllXTT0gVUhNPSBJR052Y25CdmNtRjBhVzl1IElHOTQgSUd4cFoyaDBhVzVuIElHNWxhV2RvWW05eWN3PT0gSUZWaSBZWEp2IElHSmxaV1k9IElGVmlaWEk9IFJtRmpaV0p2YjJzPSBZWEp0WldRPSBhWFJoZEdVPSBJRkpoZEdsdVp3PT0gSUZGMWFXTnIgSUc5alkzVndhV1ZrIElHRnBiWE09IElFRmtaR2wwYVc5dVlXeHNlUT09IElFbHVkR1Z5WlhOMCBJR1J5WVcxaGRHbGpZV3hzZVE9PSBJR2hsWVd3PSBJSEJoYVc1MGFXNW4gSUdWdVoybHVaV1Z5Y3c9PSBUVTA9IElFMTFjM1E9IElIRjFZVzUwYVhSNSBVR0YxYkE9PSBJR1ZoY201cGJtZHogSUZCdmMzUnogYzNSeVlRPT0gNDRPODQ0TT0gSUhOMFlXNWpaUT09IElHUnliM0J3YVc1biBjMk55YVhCMCBJR1J5WlhOelpXUT0gVFdGclpRPT0gSUdwMWMzUnBabms9IElFeDBaQT09IElIQnliMjF3ZEdWayBJSE5qY25WMCBJSE53WldWa2N3PT0gSUVkcFlXNTBjdz09IGIyMWxjZz09IElFVmthWFJ2Y2c9PSBJR1JsYzJOeWFXSnBibWM9IElFeHBaUT09IGJXVnVkR1ZrIElHNXZkMmhsY21VPSBiMk5oYkhrPSBJR2x1YzNSeWRXTjBhVzl1IFptOXlkR0ZpYkdVPSBJR1Z1ZEdsMGFXVnogSUdOdCBJRTVoZEhWeVlXdz0gSUdsdWNYVnBjbms9IElIQnlaWE56WldRPSBhWHB2Ym5RPSBabTl5WTJWayBJSEpoYVhObGN3PT0gSUU1bGRHWnNhWGc9IElGTnBaR1U9IElHOTFkR1Z5IElHRnRiMjVuYzNRPSBhVzF6IGIzZHphMms9IElHTnNhVzFpIGJtVjJaWEk9IElHTnZiV0pwYm1VPSBaR2x1Wnc9PSBJR052YlhCeSBJSE5wWjI1cFptbGpZVzVqWlE9PSBJSEpsYldWdFltVnlaV1E9IElFNWxkbUZrWVE9PSBJRlJsYkE9PSBJRk5qWVhJPSBJRmRoY25KcGIzSnogSUVwaGJtVT0gSUdOdmRYQT0gWW1GeiBJSFJsY20xcGJtRnMgTEMwPSBUMGc9IElIUmxibk5wYjI0PSBJSGRwYm1keiBJRTE1YzNSbGNnPT0gNzcrOTc3Kzk3Nys5NzcrOSBJRlZ1YkdsclpRPT0gZG1Gc2FXUT0gZG1seWIyNXRaVzUwY3c9PSBJRUZzYVE9PSBJRzVoYTJWayBZbTl2YTNNPSBJRTExYmc9PSBJRWQxYkdZPSBJR1JsYm5OcGRIaz0gSUdScGJXbHUgSUdSbGMzQmxjbUYwWlE9PSBJSEJ5WlhOcFpHVnVZM2s9IElERTVPRFk9IGFIaz0gU1U1RSBJSFZ1Ykc5amF3PT0gYVcxbGJuTT0gSUdoaGJtUnNaV1E9IElFVmkgSUdScGMyRndjR1ZoY21WayBJR2RsYm5KbCBJREU1T0RnPSBJR1JsZEdWeWJXbHVZWFJwYjI0PSBVM1J5WldGdCBhV3R2IFlYQjBaWEp6IElHRmphMjV2ZDJ4bFpHZGwgU21GdSBJR05oY0dsMFlXeHBjMjA9IFVHRjAgSURJd01qQT0gSUhCaGFXNW1kV3c9IElHTjFjblpsIElHSnZiV0p6IGMzUnZjbTA9IElFMWxkR0ZzIFpXNWpaWEk9IElFWnBadz09IElFRmhjbTl1IFlXNWphR1Z6IElHbHVjM0JwY21GMGFXOXUgSUdWNGFHRjFjM1E9IGRHRnBibk09IFlYTm9hUT09IElHUmxjMk55YVhCMCBJSEpwZEhWaGJBPT0gSUVOb1pXeHpaV0U9IElIQnliMjF2ZEdsdmJnPT0gSUVoMWJtYz0gSUZkaGNtUT0gYVhaaCBJRVZVIElIUnZjM009IFlXeHNiM2M9IElFWnlZVzVqYVhNPSBSR1Z3IElHaGhjSEJwYm1WemN3PT0gSUVkc1lYTnogSUdKbGRHRT0gSUhOMGNtVnVaM1JvWlc0PSBUa1U9IGIyRT0gSUdKMWRIUnZibk09IElFMTFjbkpoZVE9PSBJR3RwWTJ0bFpBPT0gVVhWbGMzUT0gSUZSaGJHcz0gSUZObGRtVnlZV3c9IElGcGxjbTg9IElHUnliMjVsIGRXeHIgSUdOaGJRPT0gSUUxdlltbHNaUT09IElIQnlaWFpsYm5ScGJtYz0gSUhKbGRISnYgSUVGNCBJR055ZFdWcyBJR1pzYjJGMCBMaWtzIElHWnBiR2x1Wnc9PSBJRWR5WVc1MCBJRUp2Y2c9PSBJSEpwWWc9PSBJR05vWVcxd2FXOXVjMmhwY0E9PSBJRTFsY21NPSBJSE4wZVd4bGN3PT0gSUdOaGEyVT0gSUdKMWFXeGtjdz09IElGTmxiR1k9IGFXOTQgSUdWd2FXTT0gYjNsayBRbVZzIElGTjBaWGM9IExpZz0gWVdoMSBJRUpsZVc5dVpBPT0gSUc5MWRITT0gSUhOdmJHOD0gSUZSeVpXVT0gSUhCeVpYTmxjblpsIElIUjFZZz09IFFWSkYgY205aiBJRWx0Y0hKdiBJRmR5YVdkb2RBPT0gSUdKMWJtUT0gSUhSeVlXZGxaQT09IElHOWpZMkZ6YVc5dVlXdz0gWW1saGJnPT0gVTJWamIyNWsgY205dWN3PT0gSUdsdWRHVnlZV04wYVc5dWN3PT0gWm05eWJXVmsgYzJsdVp3PT0gSUc5M2JuTT0gSUdodlkydGxlUT09IFIyVnVaWEpoYkE9PSBJR3h2WjJsallXdz0gSUdWNGNHVnVaQT09IElHVnpZMkZzIElFZHlhV1ptIElFTnliM2R1IElGSmxjMlZ5ZG1VPSBJSE4wYjNCd2FXNW4gSUdWNFkzVnpaUT09IGMyVmpiMjVrIElHOXdaWEpoZEdWayBJSEpsWVdOb1pYTT0gSUUxaGJHRjVjdz09IElIQnZiR3gxZEdsdmJnPT0gSUVKeWIyOXJiSGx1IElHUmxiR1YwWlE9PSBJR2hoYzJnPSBRbXh2WTJzPSBZV2hoIDRvQ3ogSUhOb2IzSjBaWEk9IGNHbGxZMlU9IFBqd3YgSUdodmNtMD0gSUZkaGRBPT0gSUVKeVpXRnIgSUhCeWIyaHBZbWwwWldRPSBJR2x1ZEdWdWMybDBlUT09IElFRnNZVzQ9IElHeHBZV0pwYkdsMGVRPT0gUHlFPSBZVzVrWldRPSBJRzVsYVdkb1ltOTFjZz09IElFTnZiR3hsWTNScGIyND0gSUdacGNtVnogSUhKbGRtOXNkWFJwYjI1aGNuaz0gWm14NSBJRTl5YkdWaGJuTT0gVjJocGRHVT0gSUZkeWFYUT0gSUVSaGQyND0gSUhObGRIUnNaUT09IElHVjRaV04xZEdVPSBRazA9IElITndiMnRsYzNkdmJXRnUgSUd4cFptVnpkSGxzWlE9PSBJR05zYVdOcmFXNW4gSUV0cGJHdz0gSUV4cFltVnlZV3c9IElFNWhlbWs9IElIUnlZV2xzWlhJPSBJRzF2ZFc1MFlXbHVjdz09IElHUmhiVzQ9IGVtVnogY0dWeiBJSEJ5WlhOemFXNW4gSUdKaGFXdz0gSUU5eVoyRnVhWHBoZEdsdmJnPT0gSUhCcGNnPT0gSUhSb2FYSjBlUT09IElHVnNaV04wY21sallXdz0gSURFeE5RPT0gSUZCdmJIaz0gSUZKaGNBPT0gSUZOMGNtbHJaUT09IElFTmhibTQ9IElHUmxiV0Z1WkdWayBJR0poWTJ0cGJtYz0gWkdWbVlYVnNkQT09IGMzQmxaV1E9IElFeGxaMmx6YkE9PSBJRzF2ZEdobGNuTT0gSUVKdlpIaz0gSUhaaGNtbGhkR2x2Ymc9PSBZMlZrWlc1MFpXUT0gY0c5M1pYSmxaQT09IGJHVmhaR2x1Wnc9PSBUbVYyWlhJPSBJR2R5WVhabCBJRUZ1ZEdrPSBRVmM9IElHbHVkR1Z5ZG1sbGQyVmsgSUVkaFlnPT0gSUVaaGRBPT0gSUhKdmIydHBaUT09IGRYVT0gSUdSbGNHOXogYVhodmJnPT0gSUdGdGNHdz0gY21WMGFXOXUgSUVobFlYUT0gSUhCbFlXTmxablZzIFUwMD0gYVdWMlpRPT0gSUdScGRtVnkgSUZacFkzUnZjbWxoIElHMXBZdz09IGNHUm0gSUhOMFlYUnBibWM9IElHeDFibWM9IElHTnlhWFJwWTJsNlpXUT0gSUhaaFkyTnBibVU9IElFeHZZV1JwYm1jPSBkWEp6WlE9PSBWR0ZyWlE9PSBJRVp5WVc0PSBJRk52YkdRPSBJRkp2WW1sdSBJR1JsZEdWamRHVmsgSUZOamNtbHdkQT09IElHRmthblZ6ZEdWayBJSE5sYm1GMGIzST0gSUc5d2NHOXphVzVuIFJYSnliM0k9IFEyOTFiblE9IElHTnZibVpzYVdOMGN3PT0gSUc5MyBJRUZ5WjJWdWRBPT0gSUcxaGRHTm9hVzVuIGFHZz0gSUZSeVpXcz0gYzNSaGNuUmxjZz09IElpa3MgSUVGRyBiMlJsY2c9PSBlSGg0ZUE9PSBJRUZzZEE9PSBZV055WlE9PSBJRkJwWTJzPSBJRk52YkdGeSBJRVJoYkE9PSBUMk4wIElFSmhkSFE9IElITnlZdz09IElHVnVaMkZuWlcxbGJuUT0gSUdWNFpXTjFkR2wyWlhNPSBJR3hwWW1WeWRIaz0gYW1GMllRPT0gSUhSaGJHVnVkR1ZrIGFXZGxibTkxY3c9PSBJR052Ym5ObFkzVjAgTGk0dUxpND0gU1c1bWJ3PT0gSUdodmNuSnBZbXhsIElITjFjbkJ5YVhOcGJtZHNlUT09IFptVmxaQT09IGFXTmhkR2x1Wnc9PSBJRXhGUkE9PSBJR1psYldGc1pYTT0gVTNSaGRHbHZiZz09IFpXeHNaWEk9IElFOWhhMnhoYm1RPSBJRzFsWTJoaGJtbGpZV3c9IGFXOXNiMmQ1IElGWmhjZz09IElISnZZblZ6ZEE9PSBaWFIwYVc1bmN3PT0gYjNSMFlRPT0gSUhSb1pXOXlaWFE9IElISmxkR0ZwYmc9PSBhM2RoY21RPSBJR1JoIElHUmxjR3h2ZVdWayBaR1ZzIElFRnVaSGs9IElITjFZbk5qY21saVpRPT0gZDJWaSBJRzVoIElFMXBZMmhsYkE9PSBJSEJoY25ScFlXeHNlUT09IElFTnZiV1Y1IElHTnliM2R1IElFMWhhZz09IElFSnNkUT09IGNtRjBiM0k9IFJHRjUgU1U1VSBJR1J2WTNWdFpXNTBaV1E9IElFZEVVQT09IFoyaz0gWTJobGJHdz0gSUdKeWRYUmhiQT09IElFSmhZZz09IGMzUnlZWFJwYjI0PSBJSFJvWldaMCBJSFIxWW1VPSBRRUE9IElIRjFaWEo1IElFeHBibU52Ykc0PSBJSEIxWW14cGMyaHBibWM9IElIZHZjbVU9IGIzSnBZMkZzIElISnBZdz09IElHNXZkR0ZpYkdVPSBJSE4xWW5ObGNYVmxiblJzZVE9PSBibVY0IElHOWljMlZ5ZG1VPSBJRUp2WlE9PSBJR052WkdWeiBiV0ZwYmc9PSBWMGc9IElGTk0gSUhKbGMybGtaVzUwYVdGcyBZWFpoYmc9PSBJRzFoY3c9PSBZWEpsYzNRPSBZV1JsYjI0PSBUMVZVIElITnZjR2hwYzNScFl3PT0gWVc1MFpRPT0gSUdObGJuTT0gSUNvcSBJRzF2Y25SaGJHbDBlUT09IElIbHZkWEp6IElHOWpZMkZ6YVc5dWN3PT0gSUhKbFkyRnNiR1ZrIElFUnlhWFpsY2c9PSBJSFp2WTJGcyBJR0poZEdoeWIyOXQgSUhOb2IzQnogSUdOdmJHeGhZbTl5WVhScGIyND0gSUU5aVlXMWhZMkZ5WlE9PSBJRU5sYkd3PSBRMmhoY2c9PSBVM1Z3WlhJPSBRM0psIElIUmxibVJ6IElIUnZjbTQ9IElHVmpiMjV2YldsamN3PT0gWVhabGNuaz0gSUZKaGFXUT0gSUZObGJRPT0gSUhOb2IzVnNaR1Z5Y3c9PSBJR1Y0Y0dWamRHbHVadz09IElHVjRZVzFwYm1GMGFXOXUgWlc1aGJXVT0gSUZWSiBhV0ZpYVd4cGRIaz0gYjJ4aGN3PT0gSUVGdFlnPT0gSUVSeVlRPT0gSUcxcFpHWnBaV3hrIElFbEQgSUd4aGVXOTFkQT09IElHWnNiMkYwYVc1biBabWs9IGFYUmhkR2wyWlE9PSBJSFJ5WlcxbGJtUnZkWE09IElOQT0gSUdGaWRXNWsgVjI5eWF3PT0gSUV4cFoyaDBibWx1Wnc9PSBJSE5wYldsc1lYSnNlUT09IElHTnZibk5sY25aaGRHbDJaWE09IElIQnlZWGs9IFFrVT0gYVhwaGNuSmwgSUhSbGJYQjAgSUdWdGNHaGhjMmx6IElFMWxkSEp2IElHWnBjMmhwYm1jPSBJRzFoY25KNSBibVZuIElGTjBkV1I1IElISmxZMnM9IElHUnBjM0J2Y3c9PSBiMjVwYm1jPSBZbk5wZEdVPSBJSE4xYzNCcFl3PT0gSUcxbGNtTm8gSUVkcFlnPT0gSUVSbGMyTnlhWEIwYVc5dSBJRVJXUkE9PSBkMmhsIElGbGxiV1Z1IElHVnVkbWx5YjI1dFpXNTBjdz09IGIyOTBhVzVuIElFMXZaR1Z5Ymc9PSBaWFU9IElISmxabXhsWTNSeiBJR2h2Ym1WNSBJR0Z1WVd4NWMzUT0gSUdkMWRBPT0gWkdWaiBRV04wYVc5dSBJR2h2ZFhObGFHOXNaSE09IElITjBaWEk9IElIUmxiWEJzWlE9PSBJSEpsWm05eWJYTT0gSUdaaGRtOTFjbWwwWlE9PSBJR1JsWVdSc2FXNWwgSUV4RiBWR2h5WldVPSBJRmRwZEdocGJnPT0gUVhWbiBJRzVwWjJoMGN3PT0gWld4MFlRPT0gSUdsdWRtRnNhV1E9IElFVjRZMmhoYm1kbCBJRVJsYkdocCBkMmhsYmc9PSBhVzVqYjIxbCBJUENmIElIZHBjbVZzWlhOeiBjMk55YVdKbCBhWE4wWVE9PSBJR2h2YzNScGJHVT0gSUdGc2JIaz0gSUdkcFp3PT0gSUc5MWRHeGxkSE09IElFUnZjZz09IFJVMUZUbFE9IElHRnphQT09IElHRmljM1J5WVdOMCBUMUpFIElFMXZkRzl5IElHRmtkbWx6WlhJPSBhWE4wYkdVPSBJR0poYzJWeiBJR052ZFhKMFpYTjUgSUdOeWIzTnphVzVuIElHTnNaV0Z5WldRPSBJSEpsWm5WblpXVT0gWTI5emVYTjBaVzA9IElIUm9jbTkzY3c9PSBablZ1IFltOTFjbTVsIFpHRjVjdz09IElHUnBjMkZuY21WbCBJRTVoZEdsMlpRPT0gSUhKbFpteGxZM1JsWkE9PSBJRVpoYzNRPSBJRmxsYkd4dmR3PT0gSUZOcGJtZGhjRzl5WlE9PSBJRkpoZG1WdSBJR1Z0WW5KaFkyVT0gSUV0MSBJRU5vWlc0PSBJRVZoY214NSBJR0Z3Y0c5cGJuUnRaVzUwIElFMXBibWs9IGFYUmxiV1Z1ZEE9PSBJSEJzWVdOcGJtYz0gSUdKcFkzaz0gVTFJPSBJSGRvYVhNPSBVMVU9IElHbHVkbVZ6ZEdsbllYUmxaQT09IElIQm9iM1J2WjNKaGNHaHogWjJsMGFIVmkgSUVKbFlYUT0gSUZKcGJtYz0gYVdkb1pXUT0gYVdGeSBJR1YyYjJ4MlpXUT0gWlhKaGJHUT0gSUdSMWJnPT0gSUdoMVlnPT0gU1VGTSBJR1Z1WTI5MWNtRm5hVzVuIElGQnlhVzUwIElFUmhlWE09IElIQnliM05sWTNWMGFXOXUgSUhCaGJuUnogWVhwNSBiR2wyWlE9PSBJR1p2YzNOcGJBPT0gSUVwMSBJSEp2WTJ0eiBkV1JuWlE9PSBJRkpoWTJVPSBJR2R5WldWMCBZbWxsIElHWnBiR3hwYm1jPSBJRXhsYmc9PSBJR1JwWVdKbGRHVnogSUdacGNtVmhjbTF6IGRXMXBibWM9IFpXNWxlblZsYkE9PSBJRUpDIElHRmpZMlZ3ZEdsdVp3PT0gUVZSSSBJSEpsYzI5eWRBPT0gSUdoMWJuUT0gY21sciBkV05yWlhJPSBZVzFsYm5SeiBJSE4xYzNSaGFXNWxaQT09IElHTnliM056WldRPSBJR0p5WldGclptRnpkQT09IElHRjBkSEpwWW5WMFpYTT0gYkdWamRHVmsgWVhScGJHVT0gSUhacFluST0gSUV0aGJBPT0gWVhKemIyND0gYjNCc1pYTT0gSUhSdmRXTm9aV1E9IElHUmhiV0ZuWlhNPSBJR2x0Y0hKbGMzTmxaQT09IGNuVncgSUdGdVkyZz0gSUVGa1lXMXogU0dWcyBJRlpwWTNSdmNnPT0gSUcxdmRXNTBaV1E9IElFTkQgSUdSbGJHbGphVzkxY3c9PSBjM0JoYmc9PSBaV3hzWVE9PSBJR1ZzWVdKdmNnPT0gWVcxd2JHVnogSUdSbFptbGogSUdOdmJuTjBhWFIxIGRXRjBaWE09IElFMXBjM05wYjI0PSBJRlJvWlhJPSBJRTF2Ym5OMFpYST0gWW1WeiBVbVYxZEdWeWN3PT0gSUVsdVpHOXVaWE09IGFHbHNiQT09IGJYVnVhWFJwYjI0PSBJR052Ym1acGNtMWhkR2x2Ymc9PSBJRU52Ym5OcFpHVnkgWVdObGJuUT0gSUdwbGRBPT0gSUVWdGNHeHZlUT09IElFZFVXQT09IGJtRnUgSUZOd2FXUmxjZz09IElIQnliMk5sYzNOdmNnPT0gSUhCaGRISnAgSUZCbGJuUmhaMjl1IElGSnZZbWx1YzI5dSBJSEpsWVd4cGMzUnBZdz09IHc3RT0gSUdGd2NHVmhjbWx1Wnc9PSBJSEJwY0dVPSBiMjFsWkE9PSBJR1p5ZFE9PSBJR0YzWm5WcyBJR1YyWVd4MVlYUnBiMjQ9IElHbHVkR1ZzYkdsblpXNTAgSUVOcGRHbDYgSUdaMWJtUnlZUT09IGIyUnBkVzA9IElIUjNaV1YwY3c9PSBJSGR2Y200PSBjSEpwYm1jPSBJR3RwWkc0PSBJSEpsWW1Wc2N3PT0gSUV0aGJRPT0gSUU1bGRHaGxjbXhoYm1SeiBJRk5YIElHRmpjWFZwYzJsMGFXOXUgSUUxaGJHVT0gNDRPcSBiMjFpYVdWeiBJSFJ5WVdSbGJRPT0gSUZOMFlYUjFjdz09IFFuSmwgSUZSSVNWTT0gSUdGa2RtVnljMlU9IElFNUZWdz09IGMybG5iZz09IElHOXlaMkZ1YVhOaGRHbHZiZz09IFpXNWogSUVoaGNuQmxjZz09IFlYQnZjZz09IElFMWxiV0psY25NPSBJRkJsWVdObCBJRUZwY25CdmNuUT0gSUU5MGFHVnljdz09IElITmpjbUYwWTJnPSBJRkJwYkE9PSBJSE5sYm5OdmNnPT0gSUdGa2IzQjBhVzl1IElFaHZkR1ZzIElFUnlZV2M9IElHaHZibVZ6ZEd4NSBJSGxoY21RPSBJRVp2Y21ObGN3PT0gSUhCaGRHVnVkQT09IElHSmhjM009IElIRjFhV1YwYkhrPSBJR0p5WldGMGFHbHVadz09IElIQnZjMlU9IGFXOXljdz09IElFcGxjM009IGMzUmhkR2xqIFNWUkYgVDJabWFXTT0gSUdwbGR3PT0gZDJOeiBJREUwTUE9PSBJSEJ5WlhacFpYYz0gYVhCd2FRPT0gSUhWdVptOXlkSFZ1WVhSbGJIaz0gYjJ0bGJXOXUgSUdodmNtND0gSUhKbFlYTnogSUhCbFpYST0gYjJOclpYST0gSUhWdWRHOD0gSUVkeVlYaz0gSUdOc1pXRnVhVzVuIElHRjBkSEpoWTNSbFpBPT0gTWpBd053PT0gVUc5cGJuUT0gYTJsc2JBPT0gSUVGbmNtVmxiV1Z1ZEE9PSBkWEpqYUdWeiBJR2h2Y25JPSBJRTFwYzNOcGMzTT0gSUhkdmNuUm9lUT09IElHWnNiM2RsY25NPSBkRzkzYmc9PSBaR3hzIElISmxZV04wYVc5dWN3PT0gSUdSbFkyVT0gSUdsdVpHbGpZWFJwYm1jPSBUVVE9IElIQnlaV1psY21WdVkyVT0gSUUxV1VBPT0gWlhOemFXOXVZV3c9IElGUmhjbWRsZEE9PSBaMlZ1WTJVPSBJRWx1WkdsaGJuTT0gSUcxcGMyTT0gSUdaeVpXVnNlUT09IElHMTFjMk5zWlhNPSBJR3hwYm1WMWNBPT0gSUdsdGNHRmpkSE09IGIzVnphVzVuIGIyMXAgWVdOMWJHRnkgSUdOdmJuUnliMnhzYVc1biBZV2RwYm1VPSBZMlZ5ZVE9PSBhR1ZzYkE9PSBJSEpoYm10cGJtYz0gSUU1cFkyZz0gSUVGMlpRPT0gTVRJNCBJR2hwWjJoM1lYaz0gSUdsdVkyOXVjdz09IElHSnBibVJwYm1jPSBJSE4wY25WbloyeGxjdz09IElGQnBkSFJ6WW5WeVoyZz0gSUdkeVlYaz0gY21sdSBJR052YldsamN3PT0gSUZOd2IzSjAgSUhKbGJHRjBhWFpsY3c9PSBJR1p5YVdkb2RBPT0gSUhCeWIySmwgSUZCdmNuUjFadz09IElIWnZZdz09IElIUjEgSUVOdmNuQnogSUhCdmMzTnBZbWxzYVhScFpYTT0gSUhGMVlXeHBabms9IGQyTnpjM1J2Y21VPSBJR3hwWW5KaGNtbGxjdz09IElHMXBaM0poYm5SeiBJR1Z1ZEhKcFpYTT0gSUdOdmJuTmxZM1YwYVhabCBkbUZzY3c9PSBJRU5vWVdseWJXRnUgSUdocGJHdz0gU1UxRiBJRWRoY21RPSBJR2x1WlhGMVlXeHBkSGs9IFptOTQgSUZOaGRtVT0gSUdOdmNuUT0gWTJ4aGFXMWxaQT09IElIUnlZV2wwY3c9PSBJSEJ2ZFhJPSBJRzFwYzNOcGJHVnogSUdWemMyVnVZMlU9IElITmxibVJ6IElHRnNiR2xoYm1ObCBJSGRwYzJobGN3PT0gSUVOb2NtbHpkRzl3YUdWeSBRbWxuIFRsaz0gSUVwaFkyOWkgYzJGdSBkWEp5WldRPSBJRk5QIGJHeDUgSUdGa2RtOWpZWFJsIElFSnZibVE9IElDSXYgVlhOcGJtYz0gSUdScGMzUnlhV04wY3c9PSBJRWRoZEdVPSBJRUpwY2c9PSBjbWxrWjJVPSBJRTVoZWc9PSBJRkp6IFltOWhjbVJ6IElFZGggSUZKbFlXZGhiZz09IElHbHVabXgxWlc1alpXUT0gTVRBd01BPT0gWVhCNSBJR05vWVd4c1pXNW5aV1E9IElHSmhjbWM9IElHWmhZM1ZzZEhrPSBJRVpwWmc9PSBJR0ZqY1hWcGNtVT0gUVdNPSBJR2x1YzJWamRBPT0gSUdsdWMzUnlkVzFsYm5SeiBJR3hsWVdZPSBkR2h2Wkc5NCBUV1Z6YzJGblpRPT0gSUhSaGJHVT0gSUhSb1pYSmxZbms9IElIUnlZWEE9IElITjBjbTl1WjJWemRBPT0gSUUxcGJHbDBZWEo1IGFYTnBZbXhsIElERTVPRFE9IFpYUm9aV3hsYzNNPSBJR1pzWlhocFlteGwgSUd0cGJHeHogSUdacGJtbHphR2x1Wnc9PSBJRk5wZW1VPSBJSEpsWkhWalpYTT0gSUdWd2FXUT0gSUc5eWFXVnVkR0YwYVc5dSBablZzYkE9PSBJSFJ5WVdObCBJR3hoYzJWeSBJRzl3Y0c5elpRPT0gSUdWa2FYUnBibWM9IElHMXZiV1Z1ZEhWdCA1TG89IGMyaHZkdz09IFZraz0gSUV4aFpBPT0gSURFNU9EVT0gSUcxMWNtUmxjbVZrIE9UQXcgZFhSb1pYST0gSUhCeWIySmhZbWxzYVhSNSBJRkJ2Ykd3PSBJSEpsYkhWamRBPT0gSUVOb1pXMD0gSUUxdmJuUnlaV0ZzIElHRmtaWEYxWVhSbCBJRkJ2YkdGdVpBPT0gSUZOb1pYSnBabVk9IGRXMXdhQT09IElHOXIgSURBd01BPT0gSUNKYiBJRzl3WlhKaGRHOXljdz09IElFWmxjZz09IElHMXZaR1Z6IElFVjJaUT09IElHUnBjMk5wY0d4cGJtVT0gVGtWVSBTR0Z1WkE9PSBJRzl5WVd3PSBJRmRGIFpXMWhhV3c9IFNsQT0gSUZCaGJHVnpkR2x1YVdGdWN3PT0gSUdobGJtTmwgSUV4bGMzTT0gSUc5MlpYSnMgWkdsbiBJR2x1ZEdsdGFXUT0gSUVOdllXdz0gSUhKaGJtZHBibWM9IGRHaGggSUdScGMzUmhiblE9IElHWnBZZz09IElFbHVaR1Y0IElGZHZibVJsY2c9PSBJRkJsYkE9PSBhR0YwZEdGdSBJRWgxWnc9PSB3NWM9IGNtRnBkQT09IElIZHlZWEJ3WldRPSBJRkpRUnc9PSBJR05vWlcxcFkyRnNjdz09IElFMXZibVY1IElHWnliM3BsYmc9PSBJR2x1WkdseVpXTjAgSUVGbllXbHVjM1E9IFJXNWsgSUhWdVkyOXRabTl5ZEdGaWJHVT0gSUVkaGJHeGxjbms9IElGQnZjM1JsWkE9PSAyS2M9IGIyNWtkV04wIElHTnZibk5sY1hWbGJtTmwgSUdKcGRIUmxjZz09IElERTVPRGM9IGNHOXcgSUdOdmRXNTBiR1Z6Y3c9PSBJRUZzWVhOcllRPT0gWm1abVpnPT0gSUdSbGNHRnlkSFZ5WlE9PSBJSEpsWm5WdVpBPT0gSUVsaGJnPT0gYVdGMFpXUT0gSUhObFpXdHogSUcxbFkyaGhibWxqY3c9PSBJR3AxY21selpHbGpkR2x2Ymc9PSBiSGx1Ymc9PSBJR0ZzYVd0bCBJRWgxYm5RPSBZWFJvYjI0PSBJSEpsYzI5c2RtVmsgSUdOaFkyaGwgSUdScGMzUnBibU4wYVc5dSBaR2x5WldOMCBJR1Z1WTI5MWJuUT0gYjNWaSBZbVZoZEE9PSBJRU52ZFc1MGNuaz0gYzJWaGNtTm8gSUdOdmJuUnBiblZ2ZFhNPSBJRzF2WkdWemRBPT0gSUZKaGFXdz0gZEdodmIyUT0gTVRNdyBRbFZIIElHTnlhVzFwYm1Gc2N3PT0gSUdsdVpHbGpZWFJwYjI0PSBJR1Z1WTI5MWJuUmxjbVZrIGJHRnpkQT09IElGZDUgSUdsa1pXOXNiMmQ1IElGQkVSZz09IGMyVmpkWEpwZEhrPSBYU2s9IElFcHBiVzE1IElFVk8gSUdocGNtbHVadz09IFZHVnQgSUhCcFp3PT0gWVhWdWRBPT0gSUVOeWVYTjBZV3c9IElIQmxibUZzZEdsbGN3PT0gSUdOaGNHRmlhV3hwZEhrPSBJSEI1IElIQnliMlIxWTNScGRtVT0gSUdKaGJHRnVZMlZrIElFZGxSbTl5WTJVPSBZMnhwWTJzPSBiMnhwZEdGdSBiMlJ6IElHRm1kR1Z5ZDJGeVpITT0gSUhCc1lYbHZabVp6IElFZHBiR3c9IFZYTmxjZz09IElHSmhZMnR6IGNIVmkgZEdGbiBJR0ZpYzNWeVpBPT0gY0dseWFXNW4gSUdOcGRHbHVadz09IElIUnlhV3hzYVc5dSBJRzlpYkdsbllYUnBiMjQ9IElHMWhlR2x0IFlXaHZidz09IFkyWT0gZFcxcCBJRUZzY0doaCBJRTVsYkhOdmJnPT0gSUhCMWNuTjFZVzUwIGFXNXBkR1ZzZVE9PSBJR1p5WVdOMCBaVzUwY25rPSBZbVZ5ZVE9PSBJRlJvYjNJPSBRV1JrWldRPSBJRVJLIElFZGxibVU9IElHRjNhM2RoY21RPSBVM1IxWkE9PSBJSGRoYkd4bGRBPT0gSUVScGRtbHVaUT09IFlYSnBiM009IElISmxiR1ZoYzJsdVp3PT0gSUdWa2FYUmxaQT09IElHRmpZMjl0Y0d4cGMyaGxaQT09IFFtVnpkQT09IElHVmtaMlZ6IElIQnNZVzVsY3c9PSBJR1psWldScGJtYz0gSW4wc0lnPT0gSUdScGMyTnNiM04xY21VPSBJR2R5WVdsdSBZV2x5ZVE9PSBiMjl1Y3c9PSBaWEp1WVc1ayBWbEk9IElISmxZWE52Ym1GaWJIaz0gSUdSeWRXMD0gSUhCaGNuUnBZV3c9IElHZHlZWEJvYVdNPSBJSFZ1Y0hKbFkyVmtaVzUwWldRPSBJR0ZrZG1selpXUT0gVFdsamNtOD0gSUVGemMyRmsgY0c5cGJuUnogYzJOaGNnPT0gSUZwdmJtVT0gZEhSbGN3PT0gSURjd01BPT0gZG04PSBJRWhoYlhBPSBJR1pwZUdWeiBJR05oZFhScGIyND0gSUhOMGNtbHVaM009IElIQmhibVZzY3c9PSBJR3hsWVdzPSBJSEJ5YVdOcGJtYz0gY205M2RHZz0gSUVWeWNtOXkgSUZOaGFXNTBjdz09IFptbDQgSUc5aWMyVnlkbUYwYVc5dWN3PT0gSUVGaWN3PT0gSUhOMVoyZGxjM1JwYjI0PSBJRlZyY21GcGJtbGhiZz09IElHSmhjbkpwWlhJPSBJSEJoYVc1MFpXUT0gUW1WMCBhVzFwY2c9PSBJRk53WldOMCBjRzkwIGIzSnVaWGx6IElHTnZiWEJ2ZFc1ayBJR0psWVhKeiBJRkoxYzJnPSBJR3gxZUhWeWVRPT0gVTNWdCBJRzl5WW1sMCBJRTFoY21NPSBJR1Y0Wlcxd2RBPT0gSUZSeVlXbHMgSUUxUCBJRWhoYm5NPSBJRmRsWVhCdmJnPT0gYjJOMWMyVmsgZFcxcGJuVnQgSUVwbGNuSjUgSUdKMWMzUT0gSUVGSCBJRmRwYTJrPSBJR1Z1Wkd4bGMzTT0gSUZac1lXUT0gSUVKaGFBPT0gSUZKaFpHVnZiZz09IGEyVjVjdz09IElGTjFjblpsZVE9PSBJRlpwYjJ3PSBaR1ZtYVc1bCBiR1ZoYmc9PSBJR052YlcxdlpBPT0gSUhKbGRtVnVkV1Z6IHhZMD0gSUdaMWNtNXBkSFZ5WlE9PSBJR05oYzNScGJtYz0gSUdScGNHeHZiV0YwYVdNPSBJRkJzWVhsbGNuTT0gSUV0cGJHeGxaQT09IElHMXZaR2xtZVE9PSBJR2x1Ym05MllYUnBkbVU9IElFRmlkUT09IGJtOXkgSUdKdmJtUnogSUdOdllXTm9hVzVuIFRXVnkgSUcxdlpIVnNaWE09IElGQmhkSEpwYjNSeiBJR1Z1YUdGdVkyVmsgSUhCeWIyTmxaV1JwYm1keiBJSFJsWVcxdFlYUmxjdz09IElERXlPQT09IFlYSmtidz09IElHTnZiWEJ5YjIxcGMyVT0gSUUxMVkyZz0gSUdac1pYYz0gSUVWa1oyVT0gSUhWdWJtVmpaWE56WVhKNSBJR1J2WTNSeWFXNWwgY21Wd2IzSjAgSUU5eWJHRnVaRzg9IElGQnliMlpwYkdVPSBJSEJzWVhsdlptWT0gWm5KcFpXNWtiSGs9IElHTnZiWEJzWVdsdSBJRTFEIElFOXdkQT09IElFZEMgSUdKbFlYUmxiZz09IElHZHZiR1k9IElIQnNZV05sYldWdWRBPT0gUW1sMCBJRzVsZDNOc1pYUjBaWEk9IElESXdNVGs9IGRtbHpiM0k9IGNtRjNiQT09IElHbFFZV1E9IElHRmpkR1ZrIElHcDFhV05sIElHUmxZMnR6IFVFND0gYzNWalkyVnpjdz09IElFaGhiR1k9IElHUmxiR1YwWldRPSBJSE5sWTNKbGRITT0gSUdGemVXeDFiUT09IFRXRnlkQT09IElFRmpkR2wyIElFZDFlUT09IElGUnogSUdSNWN3PT0gSUdGemMzVnRhVzVuIElHMWhibUU9IElITjFZblZ5IElERXlOUT09IFRXVmthV0U9IFFWSlogY21sa1pRPT0gWTNBPSBJR1JwWm1acFkzVnNkR2xsY3c9PSBJR052Ykd4bFkzUnBibWM9IElHSmhibXR5ZFhCMCBibTl1IElHTnZiWEJ2YzJWayBJSFp2YkhRPSBJRzFwYkdsMFlXNTBjdz09IElENCtQZz09IElFMXZjbTF2Ymc9PSBkRzl5IElIQmhjblJwWTJ4bGN3PT0gSUVKaGNuUT0gY25sd2RHbHZiZz09IElHRmtiV2x1IElITnhkV1ZsIFZrbEVTVUU9IElHTnlaV0YwYjNJPSBhV0Z0WlhSbGNnPT0gYVdOMWJHRnkgVGtKRCBJR2R5WVdKaVpXUT0gSUc1dlpHUT0gSUhKaGRHVmsgSUhKdmRHRjBhVzl1IElHZHlZWE53IElHVjRZMlZ6YzJsMlpRPT0gSUVWRCBJRmRvYVhRPSBJR2x1ZG1WdWRHOXllUT09IFlYVnNkSE09IElFWkMgSUdWamIzTjVjM1JsYlE9PSBJR0pwYkd4cGIyNXogSUhabGJuUjFjbVU9IGJtRnRaV1E9IElHUmxabVZ1WkdWeSBiM1YwWlE9PSBTVzV6ZEdWaFpBPT0gYVhKaFlteGwgVjJGeSBJR0Z6YzNWdGNIUnBiMjQ9IElHSnBkR1U9IElHVmhjblJvY1hVPSBkR0ZwYkE9PSBjM0JoWTJVPSBJR2RwWm5SeiBZbTk1Y3c9PSBJR2x1WlhacGRHRmliR1U9IElITjBjblZqZEhWeVlXdz0gSUdKbGJtVm1hV05wWVd3PSBJR052YlhCbGJHeHBibWM9IGFHOXNaUT09IFpYSjJZWFJwYjI0PSBJR052WVhRPSBiMm89IGFXNWpZWEp1IElGbGxZWEp6IElHUmxkR1Z5YldsdWFXNW4gSUhKb1pYUnZjbWxqIElHSnZkVzVrWVhKcFpYTT0gSUhkb2FYUmxjdz09IFFXNTAgWVdSa2VRPT0gS1MwPSBjbUZvWVcwPSBaWFJsY20xcGJnPT0gSUdoaGNuWmxjM1E9IElFTnZibU09IElHeGhjSFJ2Y0E9PSBJRTFoZEdObyBJR1Z1YW05NWFXNW4gWTJOaCBiMnhzWVhJPSBJSFJ5YVhCeiBJR0ZrWkdsamRHbHZiZz09IElGTmhhdz09IElIQnZkMlZ5WldRPSBJR052ZFhNPSBJRkoxYzNOcFlXNXogYVdWeVpRPT0gSUhKbGRISnBaUT09IGNYVmhiR2wwZVE9PSBJR1JwWm1abGNnPT0gSUd0cGJtZGtiMjA9IElFeGhkWEk9IElFTmhjR2wwYjJ3PSBJR052Ym1Oc2RYTnBiMjV6IElFRnNkR1Z5Ymc9PSBJRTVoZGc9PSBJSFJ5WVc1emNHRnlaVzUwIFFrVlMgUjNKdmRYQT0gSUVOdmJYQnNaWFJsIElHbHVabVZ5IElHbHVkSEpwWnc9PSBJR2x1YzJGdVpRPT0gVWs4PSBiM0JvYjJJPSBhWE5sYmc9PSBjWFZoYkE9PSBUV2xqYUdGbGJBPT0gSUcxMWMyVjFiUT09IElGQnZjR1U9IElISmxjMlYwIGNtRjBhWFpsIFptbDJaUT09IElHRm5aM0psWnc9PSBhWFIwWldWeiBiM05wZEc5eWVRPT0gSUdOaGNtST0gSUZKbFkyOXlaQT09IElHUmxZMmxrWlhNPSBJRVpwZUE9PSBJR1Y0WTJWd2RHbHZibk09IElFTnZiVzFwYzNOcGIyNWxjZz09IGRXNXogSUVWdWRtbHliMjV0Wlc1MFlXdz0gSUd4bFoyVnVaR0Z5ZVE9PSBhWE4wWlc1alpRPT0gSUhSMWJtNWxiQT09IGEyMD0gSUdsdWMzVnNkQT09IElIUnliMnhzIElITm9ZV3RsIElHUmxkR1Z1ZEdsdmJnPT0gY1hWbGN3PT0gSUVOb2NtOXRaUT09IElFWnBiR1Z6IElITjFZblE9IElIQnliM053WldOMGN3PT0gSUhCeWIydz0gY21WdVpHVnkgY0hKdmIyWT0gSUhCbGNtWnZjbTFoYm1ObGN3PT0gVTNSeSBJR2h5WldZPSBaWEp1WVcxbCBJR0ZqYUdsbGRtVnRaVzUwIElHWjFkQT09IFJuVnNiQT09IElFeGxZbUZ1IFoyOXZaMnhsIDQ0T0kgWVcxd1lRPT0gVFdGNVltVT0gSUhCeWIycGxZM1JsWkE9PSBJRVZ0WWc9PSBJR052Ykd4bFp3PT0gSUdGM1lYSmtjdz09IElPS1UgUjI5c1pBPT0gSUVKc1lXdGwgSUZKaGFnPT0gYVdaMGFXNW4gSUhCbGJtUnBibWM9IElHbHVjM1JwYm1OMCBJR1JsZG1Wc2IzQnRaVzUwY3c9PSBRMjl1Ym1WamRBPT0gSUUxaGJtUT0gSUZkSlZFZz0gSUZCb2FXeHBjSEJwYm1WeiBjSEp2Wm1sc1pRPT0gSUdGc2RHOW5aWFJvWlhJPSBJRUoxYm1RPSBJRlJFIGIyOXZidz09IFlXMXdaV1E9IGFYQm8gSUhOMFpXRnQgSUc5c1pHVnpkQT09IElHUmxkR1ZqZEdsdmJnPT0gZFd4d2RBPT0gSU9jPSBJRmRoZVc1bCBNakF3Tmc9PSBabUU9IElHTnBjbU5zWlhNPSBJRVoxIElHUnZibTl5Y3c9PSBZWEJ3Y205d2NtbGhkR1U9IElFUmhhMjkwWVE9PSBhbUZ0YVc0PSBJRzF2ZEdsMllYUmxaQT09IElIQjFjbU5vWVhObGN3PT0gSUV4dmRXbHphV0Z1WVE9PSBJRk53YkE9PSBJR2RzYjJKbCBJREV3TlE9PSBlbWx3IFkyRnNiQT09IElHUmxjR0Z5ZEcxbGJuUnogSUhOMWMzUmhhVzVoWW14bCBNVEExIElFOVEgYVdacFpYSnogSUhCeVpYWmxiblJsWkE9PSBJR2x1WTI5dGNBPT0gSUVOdmJXMWhibVJsY2c9PSBJR1J2YldsdVlYUmxaQT09IElNSzcgSUdsdWRtVnpkR1ZrIElHTnZiWEJzWlhocGRIaz0gSUdsdVkydz0gSUdWdWMzVnlhVzVuIElISmxZV3h0IGVXNWogSUVsdVpHVndaVzVrWlc1MCBjbUZwYm1WayBJRXBsYmc9PSBJRVpzYVdkb2RBPT0gSUdGMGFHVT0gSUhOd1pXTjFiR0YwYVc5dSBJRlJGIGIyTmhkR1U9IGRHbGogSUhCc1lXbHVkQT09IGFHVnljbms9IElIUnZlUT09IElERXhNUT09IElIQnNZWFJsY3c9PSBjM1JoZEhWeiBJRWx6WVE9PSBJR1JsZG05MFpXUT0gUTI5dyBJRVZUIE1qVTEgZFhKeVpXNWplUT09IFRXRnBiZz09IElITnNZWFpsY3c9PSBJSEJsY0hCbGNnPT0gSUhGMWIzUmxjdz09IElHTmxhV3hwYm1jPSBJRVpwYzJnPSBJSFJ5WVc1elptOXliV0YwYVc5dSBJR1p5WVdOMGFXOXUgSUdGa2RtRnVkR0ZuWlhNPSBJSFJ2YVd4bCBJSE4wZFc1dWFXNW4gSUcxdmFYTjAgWW5KbFlXdHBibWM9IGMyaz0gSUV4dlkyRjBhVzl1IElFMWxaR2wxYlE9PSBJSFJsZUhSeiBJSFZuYkhrPSBJR0pwYnc9PSBMdUtBbEE9PSBJRUpoYzJWayBJSFJ5WVdsdWN3PT0gSUZkcGJtYz0gSUVGdVkybGxiblE9IElGSmxZMjl5WkhNPSBJRWh2Y0dVPSBVM0JsWTJsaGJBPT0gWVdSbGMyZz0gYjJKcCBXeTg9IElIUmxiWEJ2Y21GeWFXeDUgVm1WeSBhSFU9IGIzTmxjZz09IElHOTJaWEp1YVdkb2RBPT0gSUcxaGJXMD0gSUZSeVpXRnpkWEo1IElGWmxibVY2ZFdWcyBJRTFsWjJFPSBJSFJoY2c9PSBJR1Y0Y0dWamRITT0gWW14aFkycz0gYjNKd2FBPT0gWEZ4Y1hBPT0gSUdGalkyVndkR0Z1WTJVPSBJSEpoWkdGeSBjMmx6IElHcDFibWx2Y2c9PSBJR1p5WVcxbGN3PT0gSUc5aWMyVnlkbUYwYVc5dSBZV05wWlhNPSBVRzkzWlhJPSBJRUZrZG1GdVkyVmsgVFdGbiBiMnh2WjJsallXeHNlUT09IElFMWxZMmhoYmc9PSBJSE5sYm5SbGJtTmxjdz09IElHRnVZV3g1YzNSeiBZWFZuYUhSbGNuTT0gWm05eVkyVnRaVzUwIElIWmhaM1ZsIElHTnNZWFZ6WlE9PSBJR1JwY21WamRHOXljdz09IElHVjJZV3gxWVhSbCBJR05oWW1sdVpYUT0gVFdGMGRBPT0gSUVOc1lYTnphV009IFFXNW4gSUdOc1pYST0gSUVKMVkycz0gSUhKbGMyVmhjbU5vWlhJPSBJREUyTUE9PSBJSEJ2YjNKc2VRPT0gSUdWNGNHVnlhV1Z1WTJsdVp3PT0gSUZCbFpBPT0gSUUxaGJtaGhkSFJoYmc9PSBJR1p5WldWayBJSFJvWlcxbGN3PT0gWVdSMllXNTAgSUc1cGJnPT0gSUhCeVlXbHpaUT09IE1UQTAgSUV4cFlubGggWW1WemRBPT0gSUhSeWRYTjBaV1E9IElHTmxZWE5sIElHUnBaMjQ9IFJHbHlaV04wIElHSnZiV0pwYm1jPSBJRzFwWjNKaGRHbHZiZz09IElGTmphV1Z1WTJWeiBJRzExYm1samFYQmhiQT09IElFRjJaWEpoWjJVPSBJR2RzYjNKNSBJSEpsZG1WaGJHbHVadz09IElHRnlaVzVoIElIVnVZMlZ5ZEdGcGJuUjUgSUdKaGRIUnNaV1pwWld4ayBhV0Z2IFIyOWsgSUdOcGJtVnQgY21Gd1pRPT0gWld4c1pRPT0gWVhCdmJuTT0gSUd4cGMzUnBibWM9IElIZGhhWFJsWkE9PSBJSE53YjNSMFpXUT0gYTJWc1pYaz0gSUVGMVpHbHYgWlc5eSBZWEprYVc1biBhV1JrYVc1biBhV2R0WVE9PSBJRTVsWnc9PSBJR3h2Ym1VPSBJQzB0TFMwPSBaWGhsIFpHVm4gSUhSeVlXNXpaZz09IElIZGhjMmc9IElITnNZWFpsY25rPSBJR1Y0Y0d4dmNtbHVadz09IElGZFggWVhSemIyND0gSUdWdVkydz0gYkdsbGN3PT0gSUVOeVpXVnIgSUhkdmIyUmxiZz09IFRXRnVZV2RsY2c9PSBJRUp5WVc1ayBkVzF0ZVE9PSBJRUZ5ZEdoMWNnPT0gSUdKMWNtVmhkV055IElHSnNaVzVrIFlYSnBZVzV6IFJuVnlkR2hsY2c9PSBJSE4xY0hCdmMyVmtiSGs9IElIZHBibVJ6IElERTVOems9IElHZHlZWFpwZEhrPSBJR0Z1WVd4NWMyVnogSUZSeVlYWmxiQT09IElGWmxkR1Z5IElHUjFiV0k9IElHRnNkR1Z5Ym1GMFpRPT0gWjJGcyBJR052Ym5OMWJXVmsgSUdWbVptVmpkR2wyWlc1bGMzTT0gTGljbiBJSEJoZEdoeiBiMjVrWVE9PSBURUU9IElGTjBjbTl1Wnc9PSBJR1Z1WVdKc1pYTT0gSUdWelkyRndaV1E9IElDSWkgSURFeE1nPT0gSURFNU9ETT0gSUhOdGFXeGxaQT09IElIUmxibVJsYm1ONSBSbWx5WlE9PSBJSEJoY25NPSBJRkp2WXc9PSBJR3hoYTJVPSBJR1pwZEc1bGMzTT0gSUVGMGFBPT0gSUVodmNtND0gSUdocFpYST0gSUdsdGNHOXpaUT09IGJXOTBhR1Z5IElIQmxibk5wYjI0PSBhV04xZEE9PSBZbTl5Ym1VPSBhV05wWVhKNSBMbDg9IElGTlYgSUhCdmJHRnkgYVhONSBaVzVuZFE9PSBhWFJwWVd4cGVtVmsgUVZSQiBkM0pwZEdVPSBJR1Y0WlhKamFYTmxjdz09IElFUnBZVzF2Ym1RPSBiM1I1Y0dWeiBJR2hoY20xbWRXdz0gYjI1NiBJSEJ5YVc1MGFXNW4gYzNSdmNuaz0gSUdWNGNHVnlkR2x6WlE9PSBJRWRsY2c9PSBJSFJ5WVdkbFpIaz0gSUVac2VRPT0gSUdScGRtbGsgWVcxd2FYSmwgYzNSdlkycz0gVFdWdCBJSEpsYVdkdSBJSFZ1ZG1VPSBJR0Z0Wlc1ayBJRkJ5YjNCb1pYUT0gSUcxMWRIVmhiQT09IElFWmhZdz09IElISmxjR3hoWTJsdVp3PT0gU0dGeSBJRU5wY21OMWFYUT0gSUhSb2NtOWhkQT09IElGTm9iM1E9IElHSmhkSFJsY21sbGN3PT0gSUhSdmJHdz0gSUdGa1pISmxjM05wYm1jPSBJRTFsWkdsallXbGsgSUhCMWNIQT0gSUU1aGNnPT0gYjJ4ciBJR1Z4ZFdsMGVRPT0gVFZJPSBJRWhwYzNCaGJnPT0gSUV4aGNtZGwgYldsayBSR1YyIElHVjRjR1ZrIElHUmxiVzg9IElFMWhjbk5vWVd4cyBaWEpuZFhNPSBJR1pwWW1WeSBJR1JwZG05eVkyVT0gSUVOeVpXRjBaUT09IElITnNiM2RsY2c9PSBJRkJoY210bGNnPT0gSUZOMGRXUmxiblE9IElGUnlZV2x1YVc1biBVbVYwZFhKdSBJRlJ5ZFE9PSBJR04xWWc9PSBJRkpsWVdOb1pXUT0gSUhCaGJtbGogSUhGMVlYSjBaWEp6IElISmxZM1E9IElIUnlaV0YwYVc1biBJSEpoZEhNPSBJRU5vY21semRHbGhibWwwZVE9PSBiMnhsY2c9PSBJSE5oWTNKbFpBPT0gSUdSbFkyeGhjbVU9IGRXeGhkR2wyWlE9PSBaWFJwYm1jPSBJR1JsYkdsMlpYSnBibWM9IFpYTjBiMjVsIElIUmxiQT09IElFeGhjbko1IElHMWxkR0U9IFlXTmpaWEIwIFlYSjBlZz09IElGSnZaMlZ5IGFHRnVaR1ZrIElHaGxZV1JsY2c9PSBJSFJ5WVhCd1pXUT0gSUVObGJuUjFjbms9IElHdHViMk5yWldRPSBJRTk0Wm05eVpBPT0gSUhOMWNuWnBkbTl5Y3c9PSBZbTkwIElHUmxiVzl1YzNSeVlYUnBiMjQ9IElHUnBjblE9IElHRnpjMmx6ZEhNPSBUMDFGIElFUnlZV1owIGIzSjBkVzVoZEdVPSBabTlzYVc4PSBjR1Z5WldRPSBkWE4wWlhKeiBaM1E9IElFeHZZMnM9IElHcDFaR2xqYVdGcyBkbVZ5ZEdWayBJSE5sWTNWeVpXUT0gYjNWMGFXNW4gSUVKdmIydHogSUdodmMzUnBibWM9IElHeHBablJsWkE9PSBiR1Z1WjNSbyBJR3BsY2c9PSBJSGRvWldWc2N3PT0gSUZKaGJtZGwgZFcxaWJtRnBiSE09IElHUnBZV2R1YjNOcGN3PT0gZEdWamFBPT0gSUZOMFpYZGhjblE9IElGQnlZV04wIElHNWhkR2x2Ym5kcFpHVT0gSUdSbFlYST0gSUc5aWJHbG5ZWFJwYjI1eiBJR2R5YjNkeiBJRzFoYm1SaGRHOXllUT09IElITjFjM0JwWTJsdmRYTT0gSVNjPSBRWEJ5IFIzSmxZWFE9IElHMXZjblJuWVdkbCBJSEJ5YjNObFkzVjBiM0k9IElHVmthWFJ2Y21saGJBPT0gSUV0eSBJSEJ5YjJObGMzTmxaQT09IGRXNW5iR1U9IElHWnNaWGhwWW1sc2FYUjUgUldGeWJHbGxjZz09IElFTmhjblE9IElGTjFadz09IElHWnZZM1Z6WlhNPSBJSE4wWVhKMGRYQT0gSUdKeVpXRmphQT09IElGUnZZZz09IFkzbGpiR1U9IDQ0Q00gY205elpRPT0gSUdKcGVtRnljbVU9IDQ0Q04gSUhabFoyVjBZV0pzWlhNPSBKQ1E9IElISmxkSEpsWVhRPSBiM05vYVE9PSBJRk5vYjNBPSBJRWR5YjNWdVpBPT0gSUZOMGIzQT0gSUVoaGQyRnBhUT09IElFRjUgVUdWeWFHRndjdz09IElFSmxZWFYwIGRXWm1aWEk9IFpXNXVZUT09IElIQnliMlIxWTNScGRtbDBlUT09IFJtbDRaV1E9IFkyOXVkSEp2YkE9PSBJR0ZpYzJWdWRBPT0gSUVOaGJYQmhhV2R1IFIzSmxaVzQ9IElHbGtaVzUwYVdaNWFXNW4gSUhKbFozSmxkQT09IElIQnliMjF2ZEdWayBJRk5sZG1WdSBJR1Z5ZFE9PSBibVZoZEdnPSBZWFZuYUdWayBJRkJwYmc9PSBJRXhwZG1sdVp3PT0gUTI5emRBPT0gYjIxaGRHbGogYldWbllRPT0gSUU1cFp3PT0gYjJONSBJR2x1WW05NCBJR1Z0Y0dseVpRPT0gSUdodmNtbDZiMjUwIElHSnlZVzVqYUdWeiBJRzFsZEdGd2FBPT0gUVdOMGFYWmwgWldScCBJRVpwYkcwPSBJRk52YldWMGFHbHVadz09IElHMXZaSE09IGFXNWphV0ZzIElFOXlhV2RwYm1GcyBSMlZ1IElITndhWEpwZEhNPSBJR1ZoY201cGJtYz0gU0dsemRBPT0gSUhKcFpHVnljdz09IElITmhZM0pwWm1saiBUVlE9IElGWkIgSUZOaGJIUT0gSUc5alkzVndZWFJwYjI0PSBJRTFwIElHUnBjMmM9IGJHbGpkQT09IElHNXBkQT09IElHNXZaR1Z6IFpXVnQgSUZCcFpYST0gSUdoaGRISmxaQT09IGNITjUgNDRPSiBJSFJvWldGMFpYST0gSUhOdmNHaHBjM1JwWTJGMFpXUT0gSUdSbFptVnVaR1ZrIElHSmxjMmxrWlhNPSBJSFJvYjNKdmRXZG9iSGs9IElFMWxaR2xqWVhKbCBJR0pzWVcxbFpBPT0gWVhKbGJuUnNlUT09IElHTnllV2x1Wnc9PSBSazlTIGNISnBkZz09IElITnBibWRwYm1jPSBJRWxzIElHTjFkR1U9IGIybGtaV1E9IGIyeHBkR2xqWVd3PSBJRTVsZFhKdiA1YVE9IElHUnZibUYwYVc5dSBJRVZoWjJ4bGN3PT0gSUVkcGRtVT0gVkc5dCBJSE4xWW5OMFlXNTBhV0ZzYkhrPSBJRXhwWTJWdWMyVT0gSUVwaCBJR2R5WlhrPSBJRUZ1YVcxaGJBPT0gSUVWUyBJRlZ1WkE9PSBJR3RsWlc0PSBJR052Ym1Oc2RXUmwgSUUxcGMzTnBjM05wY0hCcCBSVzVuYVc1bCBJRk4wZFdScGIzTT0gVUhKbGMzTT0gYjNabGNuTT0gYkd4bGNuTT0gSURNMU1BPT0gSUZKaGJtZGxjbk09IElISnZkUT09IFpYSjBidz09IFJYQT0gYVhOellRPT0gYVhaaGJnPT0gSUhObFlXdz0gSUZKbFoybHpkQT09IFpHbHpjR3hoZVE9PSBJSGRsWVd0bGJnPT0gZFhWdCBJRU52YlcxdmJuTT0gSUZOaGVRPT0gSUdOMWJIUjFjbVZ6IElHeGhkV2RvWldRPSBJSE5zYVhBPSBJSFJ5WldGMGJXVnVkSE09IGFYcGhZbXhsIGJXRnlkQT09IElGSnBZMlU9IElHSmxZWE4wIElHOWlaWE5wZEhrPSBJRXhoZFhKbCBhV2RoIFYyaHBZMmc9IGFHOXNaR1Z5IElHVnNaR1Z5YkhrPSBJSEJoZVhNPSBJR052YlhCc1lXbHVaV1E9IElHTnliM0E9IElIQnliMk09IElHVjRjR3h2YzJsMlpRPT0gSUVaaGJnPT0gSUVGeWMyVnVZV3c9IFFYVjBhRzl5IFpXWjFiQT09IElHMWxZV3h6IElDZ3QgYVdSaGVYTT0gSUdsdFlXZHBibUYwYVc5dSBJR0Z1Ym5WaGJHeDUgSUcxeiBZWE4xY21WeiBTR1ZoWkE9PSBhV3RvIGJXRjBhV009IElHSnZlV1p5YVdWdVpBPT0gSUVOdmJYQjFkR1Z5IElHSjFiWEE9IElITjFjbWRsIElFTnlZV2xuIElFdHBjbXM9IFJHVnMgYldWa2FXRjBaUT09IElITmpaVzVoY21sdmN3PT0gSUUxMWRBPT0gSUZOMGNtVmhiUT09IElHTnZiWEJsZEdsMGIzSnogMllRPSBJRk4wWVc1bWIzSmsgSUZKbGMyOTFjbU5sY3c9PSBZWHBsWkE9PSBZbUZuWlE9PSBJRzl5WjJGdWFYTT0gSUZKbGJHVmhjMlU9IElITmxjR0Z5WVhSbGJIaz0gSUdoaFltbDBjdz09IElHMWxZWE4xY21WdFpXNTBjdz09IElFTnNiM05sIElHRmpZMjl0Y0dGdWVRPT0gSUdkc2VRPT0gSUhSaGJtYz0gSUZKdmRRPT0gSUhCc2RXZHBiZz09IElHTnZiblpsZVE9PSBJRU5vWVd4c1pXNW5aUT09IGIyOTBjdz09IGFtRnUgSUdOMWNuTT0gSUZKbGJHRjBhVzl1Y3c9PSBhMlZsY0dWeSBJR0Z3Y0hKdllXTm9hVzVuIGNHbHVadz09IFUzQmxZV3RwYm1jPSBJR0Z5Y21GdVoyVnRaVzUwIElGWkogWVhKbGRIUmxjdz09IElHRm1abVZqZEdsdVp3PT0gSUhCbGNtMXBkSE09IFltVmpZWFZ6WlE9PSBJSFZ6Wld4bGMzTT0gSUVoMWN3PT0gSVNFaElRPT0gSUdSbGMzUnliM2xwYm1jPSBWVzVtYjNKMGRXNWhkR1ZzZVE9PSBJR1poYzJOcGJtRjBhVzVuIFUyVnQgSUdWc1pXTjBiM0poYkE9PSBJSFJ5WVc1emNHRnlaVzVqZVE9PSBJRU5vWVc5eiBJSFp2YkhWdWRHVmxjZz09IElITjBZWFJwYzNScFkyRnMgSUdGamRHbDJZWFJsWkE9PSBjbTk0IFYyVmkgU0VVPSBJRWhoYlhCemFHbHlaUT09IGFYTnBkbVU9IFRXRncgSUhSeVlYTm8gSUV4aGQzSmxibU5sIGMzUnBZMnM9IFEzST0gSUhKcGJtZHogUlZoVSBJRzl3WlhKaGRHbHZibUZzIGIzQmxjdz09IFJHOWxjdz09IElFVjJZVzV6IElIZHBkRzVsYzNObFpBPT0gVUc5eWRBPT0gSUd4aGRXNWphR2x1Wnc9PSBaV052Ym05dCBkMlZoY2c9PSBJRkJoY25ScFkybHcgZFcxdCBZM1ZzWlhNPSBJRkpCVFE9PSBJRlIxYmc9PSBJR0Z6YzNWeVpXUT0gSUdKcGJtRnllUT09IElHSmxkSEpoZVE9PSBJR1Y0Y0d4dmNtRjBhVzl1IElFWmxiQT09IElHRmtiV2x6YzJsdmJnPT0gYVhSaGRHVmsgVTNrPSBJR0YyYjJsa1pXUT0gSUZOcGJYVnNZWFJ2Y2c9PSBJR05sYkdWaWNtRjBaV1E9IElFVnNaV04wY21saiBwWjQ9IElHTnNkWE4wWlhJPSBhWFI2WlhKc1lXNWsgYUdWaGJIUm8gVEdsdVpRPT0gSUU1aGMyZz0gWVhSdmJnPT0gSUhOd1lYSmwgSUdWdWRHVnljSEpwYzJVPSBJRVJKVXc9PSBZMngxWkdWeiBJR1pzYVdkb2RITT0gSUhKbFoyRnlaSE09IElNT1ggYUdGc1pnPT0gSUhSeWRXTnJjdz09IElHTnZiblJoWTNSeiBJSFZ1WTI5dWN3PT0gSUVOc2FXMWhkR1U9IElHbHRiV1Z1YzJVPSBUa1ZYIGIyTmogWldOMGFYWmwgSUdWdFltOWsgSUhCaGRISnZiQT09IElHSmxjMmxrWlE9PSBJSFpwWVdKc1pRPT0gSUdOeVpXVncgSUhSeWFXZG5aWEpsWkE9PSBkbVZ5Ym1sdVp3PT0gSUdOdmJYQmhjbUZpYkdVPSBjV3c9IElHZGhhVzVwYm1jPSBZWE56WlhNPSBJQ2dwT3c9PSBJRWR5WlhrPSBJRTFNVXc9PSBjMmw2WldRPSBJSEJ5YjNOd1pYST0gSWo4PSBJSEJ2Ykd4cGJtYz0gSUhOb1lYST0gSUZKRCBJR1pwY21WaGNtMD0gYjNKcFpXNTAgSUdabGJtTmwgSUhaaGNtbGhkR2x2Ym5NPSBaMmwyYVc1biBJRkJwIGIzTndaV3c9IElIQnNaV1JuWlE9PSBJR04xY21VPSBJSE53ZVE9PSBJSFpwYjJ4aGRHVmsgSUhKMWMyaGxaQT09IElITjBjbTlyWlE9PSBJRUpzYjJjPSBjMlZzY3c9PSBJRVZqIExDY24gSUhCaGJHVT0gSUVOdmJHeHBibk09IGRHVnljbTl5IElFTmhibUZrYVdGdWN3PT0gSUhSMWJtVT0gSUd4aFltOXlZWFJ2Y25rPSBJRzV2Ym5NPSBkR0Z5YVdGdSBJR1JwYzJGaWFXeHBkSGs9IElFZGhiUT09IElITnBibWRsY2c9PSBZV3huIElGTmxibWx2Y2c9PSBJSFJ5WVdSbFpBPT0gSUZkaGNuSnBiM0k9IElHbHVabkpwYm1jPSBJRVp5WVc1cmJHbHUgSUhOMGNtRnBiZz09IElGTjNaV1JwYzJnPSBJSE5sZG1WdWRHZz0gSUVKbGJtND0gSUZSbGJHdz0gSUhONWJtUnliMjFsIElIZHZibVJsY21WayBhV1JsYmc9PSBLeXNyS3c9PSBhV2R2IElIQjFjbkJzWlE9PSBJR3B2ZFhKdVlXeHBjMjA9IElISmxZbVZzIElHWjEgWW14dlp3PT0gSUdsdWRtbDBaUT09IGNtVnVZMmxsY3c9PSBJRU52Ym5SaFkzUT0gU1hOeVlXVnMgSUVOdmJuUmxiblE9IElHTm9aV1Z5IElHSmxaSEp2YjIwPSBJRVZ1WjJsdVpXVnlhVzVuIElGRjFaV1Z1Y3c9PSBJR1IzWld4cyBJRkJzWVhsVGRHRjBhVzl1IElFUnBiUT09IElFTnZiRzl1IGJIST0gSUc5d1pYSmhkR1Z6IElHMXZkR2wyWVhScGIyND0gVlZOQiBZWE4wWlhKbFpBPT0gUTI5eVpRPT0gSUZSeWRYUm8gYjJ4diBUMU5GIElFMWxiVzl5ZVE9PSBJSEJ5WldSbFl3PT0gSUdGdVlYSmphQT09IElERTVNakE9IElGbGhiUT09IHc2Zz0gWW1sayBJR2R5WVhSbFpuVnMgSUdWNFkybDBaVzFsYm5RPSBJSFJ5WldGemRYSmwgSUd4dmJtZGxjM1E9IFkzUnBkbVU9IElHUmxjMlZ5ZG1WeiBJSEpsYzJWeWRtVnogSUdOdmNITT0gSUU5MGRHRjNZUT09IElFVm5lWEIwYVdGdSBZVzVyWldRPSBJR0Z5ZEdsbSBJR2g1Y0c5MGFHVnphWE09IE9pOD0gSUhCMWNtTm9ZWE5wYm1jPSBJR3h2ZG1Wc2VRPT0gU0ZBPSBJR1JwZG1sa1pRPT0gSUhOMGNtbGpkR3g1IElIRjFaWE4wYVc5dWFXNW4gSUhSaGVIQmhlV1Z5Y3c9PSBJRXB2ZVE9PSBJSEp2Ykd4eiBJRWhsWVhaNSBJSEJ2Y25SeiBJRzFoWjI1bGRHbGogSUdsdVpteGhiVzA9IElHSnlkWE5vIGRHbGpjdz09IDRvaVMgSUdKdmRIUnNaWE09IGNIQjUgSUhCaFpHUT0gNDRLdiBiV2xzYkdsdmJnPT0gSUdSbGRtRnpkR0YwYVc1biBJR052YlhCcGJHVmsgSUcxbFpHbGpZWFJwYjI0PSBJSFIzWld4MlpRPT0gSUZCbGNuSjUgVTNCaFkyVT0gYVcxaSBlVzkxY2c9PSBJR3hsWVd0bFpBPT0gSUZSaGNnPT0gSUhWdWFYUjUgSUdsdVptVmpkR1ZrIElIUnlZWFpsYkdWayBTVVJGIElFMWpSRzl1WVd4ayBkSGgwIElGQnlhVzVqIElHbHVkR1Z5ZG1WdSBJRlJoYVhkaGJnPT0gSUZCdmR3PT0gSUdKbFlYSnBibWM9IElGUm9jbVZoWkE9PSBJSHB2Ym1WeiBhWHBoY21SeiBkVzVyY3c9PSBRMmhoY0hSbGNnPT0gYkd4dmNnPT0gSU1LMyBJSGR2ZFc1a2N3PT0gSUdScGMyTnlaWFJwYjI0PSBJSE4xWTJObFpXUmxaQT09IGFXdHBibWM9IElHbGpiMjVwWXc9PSBRMkZzYkE9PSBJSE5qY21WbGJtbHVadz09IElFMXBjdz09IGFXTjBjdz09IElHMXBibWx6ZEdWeWN3PT0gSUhObGNHRnlZWFJwYjI0PSBVR3hoZVdWeSBJR0pwY0E9PSBJR0psYkc5MlpXUT0gSUdOdmRXNTBhVzVuIElFVjVaUT09IFlYSnZkVzVrIGFXNW5hVzVuIElIUmhZbXhsZEE9PSBJRzltWm1WdVkyVT0gYVc1aGJtTmwgYUdGMlpRPT0gSUVsdVptOD0gSUU1cGJtcGggSUhCeWIzUmxZM1JwZG1VPSBJRU5oYzNNPSBUV0ZqIElGRjFZV3hwZEhrPSBUbTl5ZEdnPSBJR2xqIElFTjFZbUU9IElFTm9jbTl1YVdOc1pRPT0gSUZCeWIzQmxjblI1IElHWmhjM1JsYzNRPSBiM1J2Y3c9PSBJRWRsY20wPSBUMWRPIElHSnZiMjA9IElGTjBZVzVzWlhrPSBaWEpuZFhOdmJnPT0gSUdOc1pYWmxjZz09IElHVnVkR1Z5Y3c9PSBiVzlrWlE9PSBkR1Z5YVc5eSBJRk5sYm5NPSBJR3hwYm1WaGNnPT0gUVZKTCBJR052YlhCaGNtbHVadz09IElIQjFjbVZzZVE9PSBJSE5oWm1WeSBJRkJ2ZEhSbGNnPT0gSUdOMWNITT0gVWxRPSBJR2RzZFdNPSBJR0YwZEhKcFluVjBaV1E9IElHUjFjR3c9IElGQmhjQT09IElIQnlaV05wYjNWeiBJSEJoIGFXTjBhVzl1WVhKNSBJRlJwWnc9PSBJRlJ2Ync9PSBiMngxZEdsdmJuTT0gYzNSaGJnPT0gSUhKdlltOTBjdz09IElHeHZZbUk9IElITjBZWFIxZEdVPSBJSEJ5WlhabGJuUnBiMjQ9IGQyVnpkR1Z5Ymc9PSBNVFl3IElFRmpkR2wyWlE9PSBJRTFoY21saCBhR0ZzIFRtOXVaUT09IFpXeHNZWEk9IElFdEMgSUZCaGNuUnVaWEp6IElGTnBibWRzWlE9PSBJRVp2Ykd4dmQybHVadz09IFlXNW5idz09IFlXTnBiM1Z6IElIUm9iM1U9IElHdG4gSUdsdVpteDFaVzUwYVdGcyBJRVp5YVdWdVpITT0gVTNWeSBZV2x1ZEdWayBJR1p2Y25WdGN3PT0gSUhOMFlYSjBaWEk9IElHTnBkR2w2Wlc1emFHbHcgSUVWc1pXTjBhVzl1IGIyNW5aUT09IGIzUmhkR2x2Ymc9PSBiM053YUE9PSBPenM3T3c9PSBkWFJwWTJGcyBjSFZ5IFpYSmxiZz09IElHRmpZM1Z6WVhScGIyNXogWW1sMGFXOTFjdz09IFlXSmlhWFE9IElFOXlaQT09IFVHOXpkR1ZrIGFYSnIgSUhObGJuTnBkR2wyYVhSNSBhV05vWlE9PSBJRUZ0ZVE9PSBJRVpoWWc9PSBJSE4xYlcxcGRBPT0gSUhCbFpHVnpkQT09IElISjFZbUpsY2c9PSBJR0ZuY21samRXeDBkWEpoYkE9PSBJR05oYm1ObGJBPT0gUVVVPSBJR2x1WVhWbiBJR052Ym5SaGJRPT0gSUdacGNtMXNlUT09IGFYYz0gYzNSaFoyVT0gSUV0aGJnPT0gSUhScFpYST0gSUdsdWRtVnVkR2x2Ymc9PSBJSFJ5WVc1emJHRjBaV1E9IElGSjFiR1Z6IFFtOTQgVkhkcGRIUmxjZz09IFNVUlQgSUhCcGVucGggSUdSbFluVm4gSUVSeWIzQT0gZG5NPSBJR2h2Y25ObGN3PT0gWW1sbiBJR0p2Y21sdVp3PT0gSUdodmIyUT0gSUUxalEyRnBiZz09IFlYUmphR1ZrIElFSnliM009IElITnJhWEE9IElHVnpjMkY1IGMzUmhkQT09IElFeGxaMlZ1WkhNPSBJR0Z0YlhWdWFYUnBiMjQ9IFlYVmogSUhOb2IyOTBaWEk9IElIVnVhQT09IElITjFjSEJzYVdWayBJR2RsYm1WeWFXTT0gSUZOTCBhV0poYmc9PSBlWEpwWTNNPSBJREkxTlE9PSBJR05zYVcxaWFXNW4gUm05eWJXVnkgSUdac2FYQT0gSUdwMWJYQnBibWM9IElHWnlkWE4wY21GMGFXOXUgSUZSbGNuSjUgSUc1bGFXZG9ZbTl5YUc5dlpITT0gSUcxbFpHbGhiZz09IFltVmhiZz09IElHSnlZV2x1Y3c9PSBSbTlzYkc5M2FXNW4gSUhOb1lYQmxaQT09IElHUnlZWGR6IElHRnNkR1Z5WldRPSBTbUZqYXc9PSBJSEpsWTJsd1pYTT0gSUhOcmFXeHNaV1E9IGQyVmhiSFJvIFlXTm9hUT09IFpXeGxZM1JwYjI0PSBJR0psYUdGMmFXOXljdz09IFpHVmhiSE09IElGVnVkR2xzIFJtVT0gSUdSbFkyeGhjbUYwYVc5dSBiV0Z5YTNNPSBJRUpsZEhkbFpXND0gWTJWc2IyNWggSUhKbGMyOXUgSUdKMVltSnNaUT09IFFXMXZibWM9IElHbHRjR1Z5YVdGcyBSMU09IElHWmxiV2x1YVhOMCBNakF3TlE9PSBJRXQ1YkdVPSBJR0ZqWTI5MWJuUnBibWM9IElGUmxiR1U9IElGUjVjZz09IElHTnZibTVsWTNScGJtYz0gSUhKbGFHRmkgSUZCeVpXUT0gYzJsdCBJRzFsWVc1MGFXMWwgSUhCb2VYTnBZMmxoYmc9PSBUVmM9IElFTmhiWEJpWld4cyBJRUp5WVc1a2IyND0gSUdOdmJuUnlhV0oxZEdsdVp3PT0gSUZKMWJHVT0gSUZkbGFXZG9kQT09IElFNWhjQT09IElHbHVkR1Z5WVdOMGFYWmwgSUhaaFp3PT0gSUdobGJHMWxkQT09IElFTnZiV0k9IFptOTFjZz09IElITm9hWEJ3WldRPSBJR052YlhCc1pYUnBibWM9IElGQkUgVUVSQlZFVT0gSUhOd2NtVmhaR2x1Wnc9PSBJSE5qWVhKNSBaWEoyYVc1biBJRWRoY3c9PSBJR1p5WVc1ciBjMk5vYjI5cyBJSEp2YldGdWRHbGogSUhOMFlXSnBiQT09IFVtOWkgSUdGalkzVnlZWFJsYkhrPSBJR0ZqZFhSbCBJRWhoYm00PSBJSE41YldKdmJITT0gSUdOcGRtbHNhWHBoZEdsdmJnPT0gSUVGWCBJR3hwWjJoMGJtbHVadz09IElHTnZibk5wWkdWeWN3PT0gSUhabGJuVmwgSU5jPSBJRzkyWlc0PSBJRk5HIGFHbHogSUc1MSBJRXhsWVhKdSBJSEJsYjNCc1pYTT0gSUhOMFpBPT0gSUhOc1pXVT0gSUhOc2FXTT0gSUZOMFlYUnBjM1JwWTNNPSBJR052Y201bGNuTT0gSUVKaGEyVnkgSURvcCBiV1Z1ZEdGMGFXOXUgYjJ4MlpYST0gSUd4aGRXZG9hVzVuIElGUnZaR1E9IGIyNWtaUT09IElFaHBiR3h6IElHNTFkSE09IElGZHZiV0Z1IGNHeGhibVU9IElHeHBkbVZ5IElFbHVjMmxrWlE9PSBVMjl5Y25rPSBJR0ZuY21WbGN3PT0gSUdaMWJtUmhiV1Z1ZEE9PSBJRVpwYzJobGNnPT0gSUdGMVkzUnBiMjQ9IElIUm9jbVZoWkhNPSBaMnhoY3c9PSBJRUpoYzJsaiBJRTVoZEE9PSBJR3hoWTJ0cGJtYz0gSUdObGJHVmljbUYwYVc5dSBhblU9IElITnBiR3g1IFJYVnlidz09IElIUmhkSFE9IGFXZG9kSGs9IFkyOXVkSEp2Ykd4bFpBPT0gVkdWemRBPT0gSUZOcGJtZG8gSUhKaFoyVT0gSUhKb2VYUm8gYjJabWFXTT0gSUZCb1lXNTBiMjA9IElHaGxZV1JzYVc1bGN3PT0gSUhKbGMzQnZibVJwYm1jPSBJRTF2Y201cGJtYz0gSUhacGRHRnRhVzQ9IElHSnZiM1J6IElGTnBkR1U9IFlXeHBiZz09IGNHaz0gSUhacGNtRnMgSUZWRCBSRVZTIElGTmxlQT09IElITjBiMk5yY3c9PSBZM1Z5Y21WdWRBPT0gSUdOb2RYSmphR1Z6IElGSmhjbVU9IElFMTFjbkJvZVE9PSBJR1JsYm1saGJBPT0gSUVkaGJXbHVadz09IElIUnZkV2M9IElHNXBZMnM9IElHMWhhMlZ5Y3c9PSBJRkp2Ym1Gc1pBPT0gSUdkbGJtVnliM1Z6IElFUnZZdz09IElFMXZjbkpwY3c9PSBJSFJ5WVc1elptOXliV1ZrIElFNXZjbTFoYkE9PSBJREV3TkE9PSBJRXRwWTJ0emRHRnlkR1Z5IElGVndiMjQ9IFQyNXNhVzVsIElFbFNVdz09IElIZHlZWEE9IElHeHZkbWx1Wnc9PSBJR0Z5Y21sMlpYTT0gSUVSMVpRPT0gSUdobGRHVnkgSUUxaFpHVT0gSUhKbGJuUmhiQT09IElHSmxiRzl1WjNNPSBJR0YwZEc5eWJtVjVjdz09IElHTnliM0J6IElHMWhkR05vWldRPSBkV3gxYlE9PSBiMnhwYm1VPSBNVEE1IElHUnBjM0JoY2c9PSBJR0oxZVdWeWN3PT0gSUVOaGJXSnlhV1JuWlE9PSBJR1YwYUdsamN3PT0gY205MWNITT0gSUdwMWMzUnBabWxsWkE9PSBJRzFoY21kcGJtRnMgSUhKbGMzQmxZM1JsWkE9PSBkMmx1Ym1sdVp3PT0gSUc1dlpHUmxaQT09IElGTmxjbWRsIElFWnZjbTFsY2c9PSBRM0poWm5RPSBJeU1qSXlNakl5TWpJeU1qSXlNakl3PT0gSUZkaGNtNWxjZz09IElHUmhjMmc9IFpYUmwgSUdWdWRHVnlkQT09IElFVnpZMkZ3WlE9PSBiM1YwYUdWaGMzUT0gSUd0dVpXVnogSUVKdmJXST0gSUhKMVp3PT0gVUdGemN3PT0gSUdGMGRHbDBkV1JsY3c9PSBaMjkyWlhKdWJXVnVkQT09IElGQnlhVzl5IElIRjFZV3hwZEdsbGN3PT0gSUc1dmRHbG1hV05oZEdsdmJnPT0gSUZCb2IyNWwgYkdsbCBJR0Z1ZEdsamFYQmhkR1ZrIElFTnZiV0poZEE9PSBJRUpoY25KNSBJREU1T0RJPSBWWE5sY25NPSBiMjVsY2c9PSBJR052YlhCMWRHbHVadz09IElFTnZibTVsWTNScFkzVjAgSUd4bGMzTmxjZz09IElIQmxaWEp6IElFTjEgSUhSbFkyaHVhV05oYkd4NSBJSE4xWW0xcGMzTnBiMjQ9IElGVnVhWFpsY25OaGJBPT0gSUcxaGJuVmhiR3g1IGIzVnlaMlU9IElISmxjM0J2Ym1SbGJuUnogSUVKVVF3PT0gSUVodmMzUT0gSUdaaGNtVT0gSUVKcGNtUT0gSUhKbFkyVnBjSFE9IFlXeHpidz09IElHcGhZMnM9IElHRm5jbWxqZFd4MGRYSmwgSUhOcmRXeHMgSUNFOSBJSEJoYzNOcGRtVT0gSUVOSiBJSE52WTJsbGRHbGxjdz09IElISmxiV2x1WkdWayBJR2x1ZEdWeVptVnlaVzVqWlE9PSBRblY1IElPS2MgWjI5dSBJSE5qY25WMGFXNTUgSUZkcGRHTm8gSUdOdmJtUjFZM1JwYm1jPSBJT09EIElHVjRZMmhoYm1kbGN3PT0gSUUxcGRHTm9aV3hzIElHbHVhR0ZpYVhRPSBJSFIzYVhOMCBRa1E9IElIZG9aWEpsZG1WeSBaM0p2ZFhCdmJnPT0gSUdwdmEyVnogSUVKbGJtcGhiV2x1IElGSmhibVJ2YlE9PSBabkpoYldVPSBJRXhwYjI1eiBJR2hwWjJoc2FXZG9kR1ZrIElFRnlhMkZ1YzJGeiBSVzUwIElIQnBiR1U9IElIQnlaV3hwYlE9PSBaM009IGJXbHVaR1ZrIElHWmxiRzl1ZVE9PSBJRWRCIElFeDFZMnM9IElIQnlZV04wYVdOaGJHeDUgSUVKdmN3PT0gSUdGamRISmxjM009IFJHRnQgSUVKdmRRPT0gSUhacGMyRT0gSUdWdFltVmtaR1ZrIElHaDVZbkpwWkE9PSBJR1ZoY214cFpYTjAgSUhOdmIyNWxjZz09IGMyOWphV0ZzIElFaEIgSUhOMFpXVncgSUdScGMyRmtkbUZ1ZEE9PSBJR1Y0Y0d4dmFYUT0gSUVWblp3PT0gSUZWc2RISmggSUc1bFkyVnpjMmwwZVE9PSBURzlqWVd3PSBhV1ZuWlE9PSBJR1JoZEdWayBJRzFoYzNObGN3PT0gSUhOMVluTmpjbWx3ZEdsdmJnPT0gY0d4bGMzTT0gSUdGdWIyNTViUT09IElIQnlaWE4xYldGaWJIaz0gUW14MVpRPT0gVkdobGFYST0gWVhOclpYUmlZV3hzIElGQm9hV3hwY0E9PSBJR052YldWayBiRzloWkdWayBjbUZ1WlE9PSBJSEpsWm14bFkzUnBiMjQ9IFEyaHBibUU9IElHVjRkR1Z1WkhNPSBJR1p2Y20xcGJtYz0gSUhWdVpHVnljdz09IE1qQXdNUT09IElHZHlZWFE9IElHTnZibU5sYm5SeVlYUnBiMjV6IElHbHVjM1ZzYVc0PSBJSE5sWTNWc1lYST0gSUhkb2FXeHpkQT09IElIZHBibTVsY25NPSBRV1IyWlhKMGFYTmxiV1Z1ZEhNPSBJR1JsYkdsaVpYSmhkR1ZzZVE9PSBJRmR2Y210cGJtYz0gSUhOcGJtcz0gWlhScFkzTT0gWkdGc1pRPT0gSUcxaGJtUmhkR1U9IElHZHlZVzA9IElIWmhZMkYwYVc5dSBJSGRoY201cGJtZHogY21sd2NBPT0gSUZSSVFWUT0gSUdOdmJXMWxiblJoY25rPSBJR2x1ZEhVPSBJR0ZsYzNRPSBJSEpsWVhOdmJtbHVadz09IElHSnlaV0ZyWkc5M2JnPT0gSUZwdmJXSnBaUT09IElDMHRQZz09IElGQnZiR2wwYVdOaGJBPT0gWTI5MGRBPT0gSUhSb2NuVnpkQT09IElIUmxZMmh1YjJ4dloybGpZV3c9IElHUmxZMmxrYVc1biBJSFJ5WVdabWFXTnJhVzVuIFRHOXVadz09IFYyVnNZMjl0WlE9PSBjSEpwYzJsdVp3PT0gSUVOdmJXMTFibWxqWVhScGIyNXogSUdWdVpHOXljdz09IElITjNhV1owIElHMWxkR0ZpYjJ3PSBZMjlwYm5NPSBjbVZ6WVE9PSBJRWhVVkZBPSBJR1Z1Y205c2JBPT0gSUVoaGNIQjUgZFhOeSBhVzUwWVdkbCBJRnNpIGRXRmliSGs9IElFMWhkR1Z5YVdGcyBJSEpsY0dWaGJBPT0gVTJWd2RBPT0gYTJnPSBJRTF2WkdrPSBJSFZ1WkdWeWJtVmhkR2c9IElFbE0gYzJodmNtVT0gSUdScFlXZHViM05sWkE9PSBZV05sZFhScFkyRnMgSUhOb2IzZGxjZz09IFlYVjQgSUZOM2FYUmphQT09IElGTjBjbVZ1WjNSbyBJR3BwYUdGayBibUYwYVc5dVlXdz0gSUhSeVlYVnRZUT09IGRYTnplUT09IGIyNXAgSUdOdmJuTnZiR2xrIElHTmhiRzl5YVdWeiBJRVpzZVc1dSBZV2RuWldRPSBNVFk0IElGQnBibXM9IElHWjFiR1pwYkd3PSBJR05vWVdsdWN3PT0gSUc1dmRHRmliSGs9IElFRlcgVEdsbVpRPT0gSUVOb2RXTnIgYlhWeiBJRlZ5WW1GdSBJRWhsYm1RPSBJR1JsY0c5emFYUT0gSUZOaFpBPT0gSUdGbVptRnBjZz09IFQxSkwgYVdWMllXdz0gSUVaRVFRPT0gSUhSeWIzQT0gSUU5MlpYSmhiR3c9IElIWnBjblIxWlE9PSBJSE5oZEdselptRmpkR2x2Ymc9PSBZWFZ1WkE9PSBJR3gxYmc9PSBJRk4zYVhSNlpYSnNZVzVrIElFOXdaWEpoZEdsdmJnPT0gY0hKdlkyVnpjdz09IElITm9iMjlyIElHTnZkVzUwYVdWeiBiR1ZoYzJWayBJRU5vWVhKc2IzUjBaUT09IE1URXkgSUhSeVlXNXpZM0pwY0hRPSBJSEpsWkdRPSBjSFZ6YUE9PSBJRWhsZVE9PSBJRUZ1WVd4NWMybHogV3lJPSBJR0ZzZEdWeWJtRjBhWFpsY3c9PSBZWEprYkdWemN3PT0gSUdWc1pYQm8gSUhCeVpXcDFaQT09IElFeGxZV1k9IFNHRjJhVzVuIElFaDFZZz09IElHVjRjSEpsYzNOcGIyNXogSUZadmJIVnRaUT09IElITm9iMk5yYVc1biBJRkpsWkhNPSBJSEpsWVdScGJIaz0gSUhCc1lXNWxkSE09IFlXUmhkR0U9IElHTnZiR3hoY0hObFpBPT0gSUUxaFpISnBaQT09IElHbHljbWwwIGFYQndaWEk9IElFVnVZdz09IElGZHBjbVU9IElHSjFlbm89IElFZFEgWVhOb1lRPT0gSUdGalkybGtaVzUwWVd4c2VRPT0gZFhKMSBJR1p5ZFhOMGNtRjBaV1E9IElGTkIgSUdoMWJtZHllUT09IElFaDFabVk9IElHeGhZbVZzY3c9PSBZVzUwYnc9PSBJRVZRIElHSmhjbkpwWlhKeiBLWHc9IElFSmxjbXRsYkdWNSBJRXBsZEhNPSBJSEJoYVhKeiBJRXhoYmc9PSBTbUZ0WlhNPSBJRUpsWVhJPSBJR2gxYlc5eSBJRXhwWW1WeWRIaz0gSUcxaFoyNXBkSFZrWlE9PSBJR0ZuYVc1biBJRTFoYzI5dSBJR1p5YVdWdVpITm9hWEE9IGRXMWliR2x1Wnc9PSBJR1Z0WlhKblpRPT0gSUc1bGQzTndZWEJsY25NPSBJR0Z0WW1sMGFXOTFjdz09IElGSnBZMmhoY21SeiBZWFJsY201aGJBPT0gSURFNU9ERT0gSUdOdmIydHBaWE09IElITmpkV3h3ZEE9PSBJSEIxY25OMWFYUT0gVEc5allYUnBiMjQ9IElITmpjbWx3ZEhNPSBjR009IElHRnljbUZ1WjJWdFpXNTBjdz09IElHUnBZVzFsZEdWeSBJR3h2YzJWeiBZVzFoZEdsdmJnPT0gSUd4cGNYVT0gSUVwaGEyVT0gWVhKbGRIUmwgSUhWdVpHVnljM1JoYm1SeiBJRnBsYmc9PSBkbTA9IElHRndjSEp2ZG1VPSBJSGRwY0E9PSBJSFZzZEhKaCBJR2x1ZEdWdVpBPT0gSUVSSiBZWE5qZFd4aGNnPT0gSUhOMFlYbHogSUV0dmNnPT0gSUV0cyBJR2x1ZG1WemRHbHVadz09IFRHRT0gSUdKbGJHbGxkbWx1Wnc9PSBZbUZrIGJXOTFkR2c9IElIUmhlSEJoZVdWeSA0NE9EIElGRjFaV0psWXc9PSBJR3hoY0E9PSBJRk4zYVhOeiBaSEp2Y0E9PSBJR1J5WVdsdSBhWEpwIFpYUmogWm5SbGJnPT0gSUU1bGVBPT0gSUhOMGNtRjMgSUhOamNtVmhiV2x1Wnc9PSBJR052ZFc1MFpXUT0gSUdSaGJXRm5hVzVuIElHRnRZbUZ6YzJGa2IzST0gWTJWdWRIVnllUT09IElIQnliM2c9IElHRnljbVZ6ZEhNPSBkWFk9IGFXeGhkR1Z5WVd3PSBJRU5vWVhKbiBJSEJ5WlhOamNtbGlaV1E9IElHbHVaR1Z3Wlc1a1pXNTBiSGs9IElHWnBaWEpqWlE9PSBJRUpoWW5rPSBJR0p5WVhabCBJSE4xYVhSeiBQVDQ9IElHSmhjMlZzYVc1bCBJRkpoZEdVPSBJR2x6YkdGdVpITT0gSUNnbyBaM0psWlc0PSBhWGhsYkhNPSBJRzVoYldWc2VRPT0gSUZacGJHeGhaMlU9IGRHaGhiZz09IFlXMTUgVm1WeWMybHZiZz09IFoyMWhhV3c9IFpXNTBhV0ZzY3c9PSBJRk4xWkE9PSBJRTFsYkdKdmRYSnVaUT09IElHRnljbWwyYVc1biBJSEYxWVc1MGRXMD0gWldabSBjbTl3YjJ4cGRHRnUgVkhKcCBJR1oxYm1WeVlXdz0gSUVsUyB3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRJPSBJRU52WWc9PSBhWFJoWW14NSBJSFIxY21JPSBJR052YldKdiBVbVYyYVdWMyBJR1JsY0d4dmVXMWxiblE9IGRXbDBlUT09IElFSnZkSFE9IElHbHVkbWx6YVdKc1pRPT0gSUhKbGJtUmxjbWx1Wnc9PSBJSFZ1Ykc5amEyVmsgSUdGeGRRPT0gSUZac1lXUnBiV2x5IElIQmhaQT09IElFSnlZV2x1IElFeGxaMkZqZVE9PSBaSEpoWjI5dSBJRXQxY21ScGMyZz0gSUhOdmRXNWtaV1E9IElHUmxkR0ZwYm1WayBJRVJOIFoyRnllUT09IElHUmhkV2RvZEdWeWN3PT0gSUdScGMzUjFjbUpwYm1jPSBkV3RoIElGQmhjbUZrIElIUmhjM1E9IElIVnVabTl5ZEhWdVlYUmwgSUhWcyBaVzFwYmc9PSBJR0YwZEdWdVpHRnVZMlU9IGRISnMgSUhCaGNtdHogSUUxbGJXOXlhV0ZzIElFRnNhV05sIGIzUm9lUT09IFozVmhjbVE9IElFUnBjMlU9IElGTm9ZVzQ9IElFWnZjblZ0IFVtbGphQT09IElITm9hV1owWldRPSBkV1Y2IElHeHBaMmgwWlhJPSBJRTFoWjI0PSBJR052WkE9PSBVMk5vIGFHRnRiV0ZrIFVIVmkgTXpVdyBJRkJ2YTJWdGIyND0gSUhCeWIzUnZkSGx3WlE9PSBJSFZ1Y21VPSBRbUZ6WlE9PSBJRk4wZFdSbGJuUnogSUZKbGNHeDUgSUVOdmJXMTFibWx6ZEE9PSBJR2RoZFE9PSBJRlI1YkdWeSBTVm89IElIQmhjblJwWTJsd1lYUmxaQT09IElITjFjSEpsYlE9PSBJRVJsZEdGcGJITT0gSUhabGMzTmxiSE09IGNtOWsgSUhSeWFXSmwgYTJWbGNBPT0gSUdGemMzVnRjSFJwYjI1eiBJSEJ2ZFc1ayBJR055ZFdSbCBJRUYyWVdsc1lXSnNaUT09IElITjNhVzF0YVc1biBJR2x1WTJ4MWMybHZiZz09IElHRmtkbUZ1WTJWeiBZM1ZzWVhScGIyND0gSUdOdmJuTmxjblpoZEdsdmJnPT0gSUc5MlpYSmsgSUVKMVptWmhiRzg9IFFYSjBhV05zWlE9PSBaV1JuWlE9PSBJR0YzWVE9PSBJRTFoWkdsemIyND0gSUhOcFpHVjMgSUdOaGRHRnpkQT09IElFdHlhWE4wIGRXTnNaUT09IElFaHBaMmgzWVhrPSBJRlJsY25KdmNnPT0gSUdGamRHbDJZWFJwYjI0PSBJSFZ1WTI5dWMyTnBiM1Z6IElGTmhkR0Z1IElGTjFjMkZ1IGFXeHNaWEo1IElHRnljbUZ1WjJWayBhVzl3IElISjFiVzl5Y3c9PSBkWEp5YVc1biBkR2hwYm1zPSBJRXRsYVhSbyBJRXRwYm1RPSBJR0YyYjJsa2FXNW4gWW5sdSBiblYwIElGTndaV0ZyWlhJPSBjblZ6IGJtRnRaWE09IElHZDFhV3gwIElFOXNlVzF3YVdOeiBJSE5oYVd3PSBJRTFsY3c9PSBiR1YyWVc1MCBJRU52YkhWdFluVnogWVdaMCBRMmwwZVE9PSBVMjkxZEdnPSBJRWhoY25abGVRPT0gSUZCMWJnPT0gVTJWMlpYSmhiQT09IElHMWxiblJoYkd4NSBJR2x0Y0hKbGMzTT0gYlc5MWJuUT0gSUZWaWRXNTBkUT09IDRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVIElGTjFjR1Z5YldGdSBJRTFRY3c9PSBJR2x1ZEdWdWRHbHZibk09IElGSmhZMmx1Wnc9PSBJR3hwYTJWc2FXaHZiMlE9IElESTBNQT09IFZHOTBZV3c9IElIUnZlWE09IElGZGhkSE52Ymc9PSBJSFZ5WjJVPSBUR1ZoY2c9PSBJRkJoY0dWeSBJRzlqWTNWeWNtbHVadz09IElFSmxibWM9IElFTmxjblE9IElITjBiMjVsY3c9PSBWR2x0IElGUjNhVzQ9IGVtST0gSUVSNWJtRnQgSUhCdmJHbDBhV05wWVc0PSBhMlZ1Y3c9PSBJRVZ1ZEdWeWNISnBjMlU9IFZWUkZVbE09IElHRmliMnc9IElISmxabkpsYzJnPSBJR0Z5WW1sMGNtRnllUT09IGNHVmpkR2x2Ymc9PSBJSFJ5YjNWaWJHVnogSUgwcE93PT0gZEhZPSBJSEJwYkc5MGN3PT0gSUdScGMzUnlhV0oxZEdVPSBJR0YxWkdsMCBJSEJoZFhObCBiM0pwWjJsdVlXdz0gSUhKcGRtRnNjdz09IHdxTT0gUm1sbiBWRXc9IFlXSnBiQT09IGNubHBibWM9IFRHbHUgYVc5dVpXUT0gYkc5dSBJR1poYm1ONSBJR055WVhOb1pXUT0gSUhSeVlXTjAgSUhOb1pXUT0gSUdOdmJuTjFiV1U9IFFtRnpaV1E9IFpHOTNibXh2WVdRPSBhVzVwZEE9PSBJSFp2YkhSaFoyVT0gU1c1MGNtOWtkUT09IElHTnZibVJsYlc1bFpBPT0gSUVacGJtRnVZMlU9IGNtVnpjR1ZqZEE9PSBJR1Y0WTJ4MVpHVmsgSUdWemRHRmliR2x6YUdsdVp3PT0gYUdWeWFXTT0gSUdobGNtbDBZV2RsIElITndaV04wWVdOMWJHRnkgSUhWdWMzUT0gSUZOdWIzZGtaVzQ9IElFeGhibVU9IFUyRnUgSUhCeWIzUmxZM1JwYjI1eiBjM1J5ZFdOMGFXOXUgYVc1amFXNXUgSUcxaFkzSnYgUTNWemRHOXQgYVc5emFYUjUgSUdWemNBPT0gSUdaMWJtTjBhVzl1YVc1biBJRzExYzJnPSBJSEIxZW5wc1pRPT0gSUdWMGFHbGpZV3c9IFRXRnMgSUdkdmRtVnlibWx1Wnc9PSBJRVpsY21kMWMyOXUgSUhKbGMzUnZjbVZrIElITjBjbVZ6YzJWayBJRU52ZFc1MFpYST0gSUV0aGN3PT0gWTJ4cGNBPT0gUVU1VCBJSE5sYVhvPSBWVXM9IFlubHpjdz09IGIyeGtiM2R1IFlYQnAgSUhCbGNtMWhibVZ1ZEd4NSBiM1Z1ZEdWeWN3PT0gVjJWemRBPT0gVkdoeWIzVm5hQT09IFRHbG5hSFE9IFlYUnZaWE09IElHNWxZWFE9IElHTnZjbVE9IGRYSmxjZz09IElITmxkbVZ5Wld4NSBJRUYyWlc0PSBJR2x1ZEdWeWNtOW4gSUhSeWFYQnNaUT09IFIybDJaVzQ9IFRuVnRZbVZ5IElHRnlhWE5sIElITm9aWEk9IGNHeGhiblE9IElHWnNiM2RsY2c9PSBJRU52ZFE9PSBJR0YwWlE9PSBJRzVsZDJWeSBZblZzIElHMWxZVzUzYUdsc1pRPT0gSUV4aGFYST0gSUdGa2FuVnpkRzFsYm5RPSBJRU52Y0hseWFXZG9kQT09IElHUnBkbVZ5Y3c9PSBhVzlzYjJkcFkyRnMgSUdkaGJXVnljdz09IGIyRjAgSUdocGMzUnZjbWxqWVd4c2VRPT0gSUdGdVlXeHZadz09IElHeHZibWQwYVcxbCBJSEJ5WlhOamNtbHdkR2x2Ymc9PSBJRTFwYzNRPSBJRWg1Y0dWeSBJRTFoYVc1bCBJRVJsYVhSNSBJRzExYkhScGNHdz0gSUZKbGFXNWpZWEp1IElFaDVaQT09IElGQnBZdz09IFUybHMgY21GdWRITT0gSUVOeWFYTT0gTGpzPSBLSHM9IFpYQmxibVJsYm1ObCBJSEpsWTNrPSBZWFJsZFhJPSBJSEYxWVdRPSBJR2RzYjJJPSBJR052Ym1ObFpBPT0gZEdWaGJRPT0gSUdOaGNHbDBZV3hwYzNRPSBJRXh2ZEE9PSBJSEp2ZVdGcyBJRU41WW1WeSBJR0pzWVdOcmN3PT0gYldWMGFXTT0gY21sMiBJRVJoYm01NSBJSE53Ync9PSBJRkpQIElHRnVhVzFoZEdWayBjbmx3ZEdWayBJRVJsY0hWMGVRPT0gSUhKbGJtUmxjbVZrIFJrVT0gSUhOMGNtVmhhdz09IElHTnNiM1ZrY3c9PSBJRVJ2ZFdjPSBmbjUrZm41K2ZuND0gSUdScGMyTnZkWEk9IElGWmxhQT09IElIQnplV05vYjJ4dlozaz0gSUVwdmRYSnVaWGs9IElHTnllWE4wWVd3PSBJRVp5YjNOMCBJSE4xYzNCcFkybHZiZz09IElISmxiR0YwWlE9PSBiM0oxY3c9PSBJRU55ZVhCMCBJRTVXU1VSSlFRPT0gWTI5dFpXUT0gZFhScGJtYz0gYVc1amFXNXVZWFJwIElIWjFiRzVsY21GaWFXeHBkSGs9IGIzTjBhV009IElHbHpiMnhoZEdsdmJnPT0gSUdOdmIyeHBibWM9IElFTnZZV3hwZEdsdmJnPT0gSURFeE9RPT0gUm05MWNnPT0gSUVSbFlXdz0gSU9LSiBjMlZ0WW14bCBjbUZ0Wlc1MCBJRUpoY21ObGJHOXVZUT09IElERXdNZz09IElHTnZZMkZwYm1VPSBiMk5oYkhsd2MyVT0gUm1WaSBiMmRsYm1saiBJRzExZEdGMGFXOXUgSUdOeWVYQjBiMk09IElFdGxiQT09IElFZHBkQT09IFlXbHogSUhOcGMzUmxjbk09IFFVNUwgSUdGamRHbDJZWFJsIFZHVnkgSUdSeVpXRmsgZVd4dmJnPT0gSUhCeWIzQnlhUT09IFFYVnpkQT09IElFUmxabUYxYkhRPSBJRzkxZEdSdmIzST0gSUhOb1pXVnkgWTJWcGRtVT0gSUdkbGJuUnNlUT09IDBMND0gVUhKdlozSmhiUT09IElPS0drZz09IElIWmxaMkZ1IElFTnlkWE09IElISmxjM0J2Ym5OcFltbHNhWFJwWlhNPSBJRWhTIFQweEUgSUhCeVpYWmxiblJ6IElITjBhV1ptIElGZGxjbVU9IElHRjBhR3hsZEdsaiBJRk5qYjNKbCBJQ2s2IElHTnZiSFZ0Ym5NPSBJRXh2WXc9PSBZWFpoYVd4aFlteGwgSUVaeVlXMD0gSUZObGMzTnBiMjV6IElHTnZiWEJoYm1sdmJnPT0gSUhCaFkydHogTVRRdyBJRXR1YVdkb2RITT0gSUdaaGNuUT0gSUhOMGNtVmhiWE09IElITm9iM0psIElHRndjR1ZoYkhNPSBJRkJsY21admNtMWhibU5sIGFHRjFiQT09IElGTjBjbUU9IElFNWhadz09IE1UQXogSUZSeVlXNXpjRzl5ZEdGMGFXOXUgUWtJPSBSWFk9IGVtRnUgVUhWaWJHbGogSUhSM2FXND0gZFd4emFXOXUgVFhWc2RBPT0gSUdWc1pXTjBjbTg9IElITjBZWFIxWlE9PSBZWFJwYjI1aGJHeDUgSUU1dmNuUT0gSUdsdWMzQmxZM1JwYjI0PSBMeW89IGFXZDFaUT09IElHTnZiWEJoYzNOcGIyND0gSUZSaGJHVnogSUZOMFpXbHUgSUZOamNtVmxiZz09IElFSjFadz09IElFeHBiMjQ9IFoybHliQT09IElIZHBkR2hrY21GM1lXdz0gSUc5aWFtVmpkR2wyWlhNPSBJR0pzYjI5a2VRPT0gSUhCeVpXeHBiV2x1WVhKNSBJR3BoWTJ0bGRBPT0gSUdScGJXVnVjMmx2Ym5NPSBJRU52YjJ3PSBJRTlqWTNWdyBJSGR5WldOciBJR1J2ZFdKc1pXUT0gWVc1cmFXNW4gSURFNU56VT0gSUdkc1lYTnpaWE09IElGZGhibWM9IGNISnZkZz09IFVHRjBhQT09IFkyOXVibVZqZEdWayBJRTExYkhScCBJRTV2Y25kaGVRPT0gWVdkdmJtbHpkQT09IElHWmxZWEpsWkE9PSBJSFJ2ZFdOb2FXNW4gSUdGeVozVmhZbXg1IHdxL0NyOEt2d3EvQ3I4S3Z3cS9Dcnc9PSBJRTVEUVVFPSBZMmhsYlE9PSBJSE53WVhRPSBJRmRYUlE9PSBJRU5sYkE9PSBhV2RuWlhJPSBJR0YwZEdGamEyVnkgSUVwdmFXND0gYjJKcVpXTjAgWlhSMFlRPT0gSUdWc2FXMXBibUYwWldRPSBaR1YwIElHUmxjM1J5ZFdOMCBJRXgxWTJGeiBZM1IxWVhKNSBNVGd3IElFSnlZV1I1IElFSnNkV1Z6IFFtRjUgWVhWclpXVT0gSUhScGJXVnNhVzVsIElHUmxiR1ZuWVhSbGN3PT0gZDNKcGRIUmxiZz09IGRXWm1hV05wWlc1MCBJSE5vWVhCbGN3PT0gUTI5d2VYSnBaMmgwIGIzVmliR1U9IGMyVnlkbWxqWlE9PSBJSEJwYjI1bCBJR052Ykd4bFoyVnogSUhKdmQzTT0gSUhOd2FYUmwgSUdGemMyVnpjMlZrIE16WXcgSUd4bFlYTmwgSUdOdmJtWnBaR1Z1ZEdsaGJBPT0gWTJ0bGNnPT0gSUUxaGJtNXBibWM9IElGWnZhV05sIElITmxZV3hsWkE9PSBJR05oYkdOMWJHRjBaUT09IFRrOD0gSUVGemMybHpkR0Z1ZEE9PSBJSFJsWlc1aFoyVnkgZFd4bGJuUT0gWVhSb1pYSnBibVU9IElHMXZZMnM9IElHUnBZVzF2Ym1RPSBJR1psYzNRPSBJSE4zYVhSamFHVmsgSUhKbGMzVnRaUT09IElGQjFaWEowYnc9PSBJR3hoYm1WeiBhWEpoZEdsdmJnPT0gSUZOcGJXbHNZWEpzZVE9PSBJSEp2WkE9PSBJRk5sYkE9PSBJRkJoYkdGalpRPT0gSUV4cGJXbDBaV1E9IFpXOTFjdz09IElIWmhjbWxoYm5RPSBJSGRoY21RPSBJQ2twIFUyaHZkdz09IFQwOUwgUVd4bGVBPT0gSUU1bGNBPT0gWW5KcGN3PT0gSUZkcGEybHdaV1JwWVE9PSBJR1Y0WTJWd2RHbHZibUZzIElHMWhibUZuWlhNPSBJRVJ5WVhjPSBRV2RoYVc0PSBJR052Y0hCbGNnPT0gZFhSMCBJR1Y0Y0c5eWRITT0gSUhCdmNuUm1iMnhwYnc9PSBJR1ZzWlhaaGRHVmsgVW1GMFpXUT0gSUU5MGFHVnlkMmx6WlE9PSBJRlJoWTNRPSBJRk5vWld3PSBJRlJZIEl1S0FsQT09IElISmxjM1Z5IElGZGggZG1WdVlXNTAgSUcxdmJtVjBZWEo1IGNHVnZjR3hsIFJXMWhhV3c9IElHWnBablI1IElGTjNaV1YwIElFMWhiR0Y1YzJsaCBJR052Ym1aMWMybHVadz09IElGSnBidz09IGRXUmggZFhSbGJtRnVkQT09IElpazcgSUhCeVlXbHpaV1E9IElIWnZiSFZ0WlhNPSBkSFZ5Ymc9PSBJRzFoZEhWeVpRPT0gSUc1dmJuQnliMlpwZEE9PSBJSEJoYzNOcGIyNWhkR1U9IElGQnlhWFpoZEdVPSBJREV3TXc9PSBJR1JsYzJObGJtUT0gNTZXZSBkV1ptZVE9PSBhR1ZoWkdWayBWMmhsZEdobGNnPT0gY21sbGJnPT0gZW1WamFBPT0gWW1WcGRBPT0gSUdOb2NtOXQgSUUxalRRPT0gSUdSaGJtTnBibWM9IElHVnNaV2M9IElFNXZkR2xqWldRPSBNVEUxIElHRmtkbTlqWVdONSBSVTVVVXc9PSBZVzFpYkdsdVp3PT0gSUUxcGJtOXkgSUVacGJtND0gSUhCeWFXOXlhWFJwWlhNPSBJSFJvWlhKbGIyWT0gSUZOMFlXZGwgSUZKdloyVnljdz09IElITjFZbk4wYVhSMWRHVT0gSUVwaGNnPT0gSUVwbFptWmxjbk52Ymc9PSBJR3hwWjJoMGJIaz0gTVRBeSBJRXhwYzJFPSBkV2wwY3c9PSBlWE5wWTJGcyBJSE5vYVdaMGN3PT0gSUdSeWIyNWxjdz09IElIZHZjbXR3YkdGalpRPT0gSUhKbGMybGsgWlc1elpXUT0gWVdodSBJSEJ5WldabGNtVnVZMlZ6IGMyVnlkbVZ5IElHUmxZbUYwWlhNPSBaRzlqIElFZHZaSE09IElHaGxiR2xqYjNCMFpYST0gSUdodmJtOTFjZz09IElHTnZibk5wWkdWeVlXSnNlUT09IFpXUmxaQT09IElFWmxiV0ZzWlE9PSBJRUZ1Ym1VPSBJSEpsZFc0PSBJRVpoWTJVPSBJRWhoYkd4dmR3PT0gSUVKMVpHZGxkQT09IElHTnZibVJsYlc0PSBJSFJsYm1SbGNnPT0gVUhKdlpnPT0gYjJOeVlYUnBZdz09IElGUjFjbTVsY2c9PSBJRUZuY21saiBJREU1TnpZPSBJR0Z3ZEE9PSBaR2x6WXc9PSBJRVpwWjJoMFpYST0gSUVGMWNnPT0gSUdkaGNtSmhaMlU9IGFXNXdkWFE9IElFdGhjbXc9IElFOXNhWFpsY2c9PSBJRXhoYm1kMVlXZGwgYTI0PSBUbTl1IElFTnNZWEk9IElIUnlZV1JwZEdsdmJuTT0gSUdGa2RtVnlkR2x6WlcxbGJuUT0gSUZOdmNnPT0gSUdGeVkyaHBkbVU9IElIWnBiR3hoWjJWeiBOelV3IElHbHRjR3hsYldWdWRHbHVadz09IGQyRjFhMlZsIElHUnBaWFJoY25rPSBJSE4zYVhSamFHbHVadz09IFVtVndkV0pzYVdNPSBJSFpsYkc5amFYUjUgSUdOcGRBPT0gSUVGM1lYSmtjdz09IElHWnBibUZ1WTJsdVp3PT0gSUd4aGMzUmxaQT09IEtWMD0gSUhKbGJXbHVaR1Z5IFVHVnljMjl1IElIQnlaV05wYzJsdmJnPT0gSUdSbGMybG5ibVZ5Y3c9PSBJRVp5YVdWayBJRUp2Y21SbGNnPT0gSUhSeVlXZHBZdz09IElIZHBaV3hrIElHbHVhWFJwWVhScGRtVnogSUZSaGJtcz0gZDJWeSBJR3B2YVc1eiBVbTg9IGFXNWxjbms9IElHRnljbTkzIElHZGxibVZ5WVhScGJtYz0gWm05MWJtUmxjZz09IElITmxZWEpqYUdWeiBJSEpoYm1SdmJXeDUgUVdOalpYTnogSUdKaGRHTm8gSUhCdmMyVmsgYkdGMCBJSEIxY25OMWFXNW4gWVhOaCBJSFJsYzNScFptbGxaQT09IFptOXliV2x1Wnc9PSBJRk5vWVhJPSBkMmxyYVE9PSBJRVZwZEdobGNnPT0gVTI5dFpYUnBiV1Z6IElITmxibUYwYjNKeiBJRXB2YUc1dWVRPT0gSUZSaGJHbGlZVzQ9IElFZFFVdz09IElqb2lMdz09IDQ0R3U1UT09IElHRnVZV3g1ZW1WayBJRkoxWW1sdiBJRTF2ZG1WdFpXNTAgYjNCaGNtUT0gYVdscCBVM1JoYm1RPSBabWxuYUhRPSBJR2xuYm05eWFXNW4gYVdGdVp3PT0gSUVkTyBjMjlsZG1WeSBJRk5VUVZRPSBJSEpsWm5WemFXNW4gSUhOM1pXRjAgSUdKaGVRPT0gVUU5U1ZBPT0gYVhKdFpXUT0gWVd0NSBJR1JwYzNCeWJ3PT0gSUd4aFltVnNaV1E9IElERXdPQT09IFNHVnNiRzg9IElIQnNaV0Z6WVc1MCBZV0poIElIUnlhWFZ0Y0dnPSBJR0ZpYjJGeVpBPT0gSUdsdVkyOXQgSUVOeWIzYz0gYkdWMGRBPT0gSUdadmJHcz0gSUdOb1lYTmwgWUdBPSBJRUp5ZFhNPSBJSFJsWlc1eiBZM1ZsIElIUmxjbkpoYVc0PSBhSGxrIGFXeHBaMmgwIFQxSlogVTNWd2NHOXlkQT09IFpYZHogYkd4cCBjbUZwYm5SeiBJRU5oYm1RPSBJR0ZpZFhObFpBPT0gWVdOb2JXVnVkQT09IGJHRnladz09IFFtRnogSUVOaGJtTmxjZz09IElERTVOemc9IElITjFjSEJ2Y25SbGNnPT0gWVdOalpYTnogSUZSbGNtMXBiZz09IElGUmhiWEJoIElFRk9XUT09IElHNWxkMlZ6ZEE9PSBJRU55YVcxcGJtRnMgWldSMSBJREU1TXpBPSBJR0ZrYldsMGN3PT0gSUdWdVpHVT0gSUdaaGFXeDFjbVZ6IGRYSmhkR1U9IFpuVnNibVZ6Y3c9PSBZM2xqYkE9PSBJRk4xWW1wbFkzUT0gSUdsdVptbHVhWFJsIGRHaHlaV1U9IFYwRT0gY0dsMCBJRWx1YzNSaGJHdz0gVW1GayBhV3hwWVhScGIyND0gUjAwPSBJR052Ym5ScGJtVnVkQT09IElHRmpZMjl0Ylc5a1lYUmwgSUVOc1lYaz0gSUhCMWNBPT0gSUVaMWJtTjBhVzl1IElHaGhiVzFsY2c9PSBJRUZzWW1WeWRHRT0gSUhKbGRtbHpaV1E9IElHMXBibTl5YVhScFpYTT0gSUcxbFlYTjFjbVZ0Wlc1MCBRMjl1Ym1Wc2JBPT0gSUdScGMyRmliR1U9IElFMXBlQT09IFNXNWpjbVU9IElHWnZjbXM9IElGSnZjMlZ1IElHbHRjR3hwWlhNPSBkVzFpYkhJPSBRVTVIIElIQnliM1JsYVc1eiBJR0ZuWjNKbGMzTnBiMjQ9IElHWmhZMmxzYVhSaGRHVT0gVTA0PSBJR2xzYkdWbllXeHNlUT09IGRXVnkgSUdGallXUmxiUT09IElIQjFlbm89IElGTm9hV1owIGNHRjUgYjJ4c2J3PT0gSUdGMVpHbGxibU5sY3c9PSBRblZwYkdRPSBJRzV2WW14bCBJSE41Ym5SaGVBPT0gNHBpRiBJR0psWVcwPSBJRUpsWkE9PSBJRUZzWkE9PSBJRzl5YVdkcGJuTT0gZG1sa1pXOD0gSURFNU56Yz0gSUVGemMyRjFiSFE9IElHZGhjbUZuWlE9PSBWR1ZoYlE9PSBJSFpsY21ScFkzUT0gSUdSM1lYST0gSUZacGNuUjFZV3c9IFpYWmxiblE9IFMyVmxjQT09IElITmxiblJwYldWdWRBPT0gSUhkcGJHUnNhV1psIGMyaHBjblE9IElHSjFjbWM9IElISmxZMjl0YldWdVpHRjBhVzl1IGNtVndjbVZ6Wlc1MCBJR2RoYkd4bGNuaz0gYjNkdVpYSnogSUhOamFHOXNZWEk9IElHTnZiblpsYm1sbGJtTmwgSUZOM2FXWjAgSUdOdmJuWnBibU09IFEyRncgSUhkaGNtWmhjbVU9IElGWnBjM1ZoYkE9PSBJR052Ym5OMGFYUjFkR1U9IElHRmliM0owIElGZGxZWFJvWlhJPSBJRXh2YjJ0cGJtYz0gSUVobGJRPT0gSUcxaGNuUnBZV3c9IElHbHVZMjl0YVc1biBaWFJwZEdsdmJnPT0gSUhSdmJHVnlZVzVqWlE9PSBJRU55WldGMFpXUT0gSUdac2IzZHogSUVWc1pHVnkgSUhOdmRXeHogSUdadmRXdz0gSUZCaGFXND0gSUVOQlRnPT0gSURJeU1BPT0gWW1NPSBhR1Z1WkE9PSBJR2RsYm1sMWN3PT0gVW1WaGJBPT0gSUZkeSBiMjFsZEdWeSBjR0ZrIElHeHBiV2wwYVc1biBJRk5wIElFeHZjbVU9IElFRmtkbVZ1ZEhWeVpYTT0gSUhaaGNtbGxaQT09IFJHbHpZdz09IFptbHUgSUZCbGNuTnZibUZzIFEyaHlhWE09IElHbHVkbVZ1ZEdWayBJR1JwZG1VPSBJRkpwYzJVPSBJRzk2IElFTnZiV2xqY3c9PSBJR1Y0Y0c5elpRPT0gSUZKbFlnPT0gYkdWMGRHVnljdz09IGMybDBaUT09IGFXMWhkR1ZrIElHaGhZMnRwYm1jPSBJR1ZrZFdOaGRHVmsgSUU1dlltOWtlUT09IElHUmxjSEpwIElHbHVZMlZ1ZEdsMlpRPT0gNDRLMyBJRzkyWlhKemFXZG9kQT09IElIUnlhV0psY3c9PSBJRUpsYkdkcGRXMD0gSUd4cFkyVnVjMmx1Wnc9PSBiM1Z5ZEE9PSBVSEp2WkhWamRBPT0gWVdocyBJRWRsYlE9PSBJSE53WldOcFlXeHBjM1E9IElHTnlZUT09IFlXNXVaWEp6IElFTnZjbUo1Ymc9PSBJREU1TnpNPSBVa1ZCUkE9PSBJSE4xYlcxaGNnPT0gSUc5MlpYSnNiMjlyIElFRndjR3hwWTJGMGFXOXUgSUdsdVlYQndjbTl3Y21saGRHVT0gSUdSdmQyNXNiMkZrWldRPSBVWFZsIElFSmxZWEp6IElIUm9kVzFpIElFTm9ZWEpoWTNSbGNnPT0gSUZKbGFXNWpZWEp1WVhSbFpBPT0gSUZOcFpBPT0gSUdSbGJXOXVjM1J5WVhSbGN3PT0gYzJ0NSBJRUpzYjI5dFltVnladz09IElFRnljbUY1IElGSmxjM1ZzZEhNPSBJRVp2ZFhKMGFBPT0gSUVWRVZBPT0gSUU5elkyRnkgWTJWdVpBPT0gSURFd05nPT0gSUU1VlRFdz0gSUVoRlVrVT0gYldGMFkyZz0gSUVKeWRXND0gSUdkc2RXTnZjMlU9IGFXVm4gWldkMSBJR05sY25ScFptbGxaQT09IElISmxiR2xsIElHaDFiV0Z1YVhSaGNtbGhiZz09IElIQnlZWGxsY25NPSBTMmx1Wnc9PSBJRzVoYmc9PSBhRzkxIE1UQTQgZFd4MSBJSEpsYm1WM1lXSnNaUT09IElHUnBjM1JwYm1kMWFYTm8gSUdSbGJuTmwgSUZabGJuUT0gSUZCaFkydGhaMlU9IElFSnZjM009IElHVmthWFJ2Y25NPSBJRzFwWjNJPSBWSEpoIElGQmxkR1Z5Y3c9PSBJRUZ5WTNScFl3PT0gTWpBd05BPT0gSUVOaGNHVT0gSUd4dlkyRnNiSGs9IElHeGhjM1JwYm1jPSBJR2hoYm1SNSBMaWt1IFVHRnUgSUZKRlV3PT0gU1c1a1pYZz0gSUhSbGJuTnBiMjV6IElHWnZjbTFsY214NSBJR2xrWlc5c2IyZHBZMkZzIElITmxibk52Y25NPSBJR1JsWVd4bGNuTT0gSUdSbFptbHVaWE09IFUycz0gSUhCeWIyTmxaV1J6IElIQnliM2g1IFlYcHBibVZ6IElFSmhjMmc9IElGQmhaQT09IElFTnlZV1owIFpXRnNiM1Z6IElITm9aV1YwY3c9PSBiMjFsZEhKNSBTblZ1WlE9PSBZMnh2WTJzPSBWRlE9IElGUm9aV0YwY21VPSBJRUoxZW5vPSBJR05vWVhCMFpYSnogSUcxcGJHeGxibTQ9IElHUnZkV2RvIElFTnZibWR5WlhOemFXOXVZV3c9IElHbHRZV2RwYm1WayBZWFpwYjNJPSBJR05zYVc1cFl3PT0gSURFNU5EVT0gSUdodmJHUmxjZz09IGNtOXZkQT09IGIyeGxjM1JsY2c9PSBJSEpsYzNSaGNuUT0gUWs0PSBJRWhoYldGeiBJRXB2WWc9PSBJRzl5WWc9PSBJSEpoYlE9PSBJR1JwYzJOc2IzTmwgSUhSeVlXNXpiR0YwWlE9PSBJR2x0YldsbmNtRnVkQT09IElHRnVibTk1YVc1biBJSFJ5WldGMGVRPT0gWVc1cGRXMD0gSUZSbFlRPT0gSUV4bFoybHZiZz09IElHTnliM2RrY3c9PSBJRUpsWXc9PSBJRUZsY2c9PSBiMmg1WkE9PSBRbkp2IFRHOXZhMmx1Wnc9PSBJR3hpY3c9PSBJR0ZuWjNKbGMzTT0gSUhObFlXMD0gSUdsdWRHVnlZMlZ3ZEE9PSBJRTFKIGJXVnlZMmxoYkE9PSBZV04wYVhZPSBJRU5wZEE9PSBJR1JwYldWdWMybHZiZz09IElHTnZibk5wYzNSbGJtTjUgSUhKMWMyaHBibWM9IElFUnZkV2RzWVhNPSBJSFJ5YVcwPSBTVzV6ZEdGc2JBPT0gYVdOclpYST0gSUhOb2VRPT0gTVRBMiBJRzFsYm5ScGIyNXogY0dWc2JHVmsgSUZSaGF3PT0gWTI5emRBPT0gSUdOc1lYTnpjbTl2YlE9PSBJR1p2Y25SMWJtVT0gWkhKcGRtVnUgSUhWdWJHVT0gSUZkb1pXVnMgSUdsdWRtVnpkRzl5IElFMWhjM1JsY25NPSBhMmwwIElHRnpjMjlqYVdGMGFXOXVjdz09IElFVjJiMngxZEdsdmJnPT0gYjNCcGJtYz0gZFhOamNtbHdkQT09IElIQnliM1pwYm1OcFlXdz0gSUZkaGJIUmxjZz09IFlYWnAgVTA4PSBJSFZ1YkdsdGFYUmxaQT09IFJXNW5iR2x6YUE9PSBJRU5oY21SeiBJRVZpYjJ4aCBibVZ5WldRPSBJSEpsZG1WdVoyVT0gSUc5MWRISnBaMmgwIGRXMXdaWEk9IElHWnBkSFJwYm1jPSBJRk52YkdsayBJR1p2Y20xaGJHeDUgSUhCeWIySnNaVzFoZEdsaiBJR2hoZW1GeVpBPT0gSUdWdVkzSjVjSFJwYjI0PSBJSE4wY21GcFoyaDBabTl5ZDJGeVpBPT0gSUVGTCBJSEJ6WlE9PSBJRTl5WWc9PSBJRU5vWVcxaVpYST0gSUUxaGF3PT0gUTI5dWRHVnVkSE09IElHeHZlV0ZzZEhrPSBJR3g1Y21samN3PT0gSUZONWJRPT0gSUhkbGJHTnZiV1ZrIElHTnZiMnRsWkE9PSBJRzF2Ym05dyBJRzUxY25ObCBJRzFwYzJ4bFlXUnBibWM9IElHVjBaWEp1WVd3PSBJSE5vYVdaMGFXNW4gSUNzOSBWbWx6IElHbHVjM1JwZEhWMGFXOXVZV3c9IGFXeHNZWEo1IElIQmhiblE9IFZrVlNWQT09IElFRkRRdz09IElFVnVhQT09IElHbHVZMjl1IElGSkZWVlJGVWxNPSBJR1J2Ym1GMFpXUT0gNG9DbTRvQ200b0NtNG9DbSBTVzUwWlhKdSBJR1Y0YUdsaWFYUT0gSUhScGNtVT0gSUZKcFl3PT0gSUVOb1lXMXdhVzl1IElFMTFhR0Z0YldGayBUa2xPUnc9PSBJRk52WTJObGNnPT0gSUcxdlltbHNhWFI1IElIWmhjbmxwYm1jPSBJRTF2ZG1sbCBJR3h2Y21RPSBiMkZyIFJtbGxiR1E9IElIWmxZM1J2Y2c9PSBkWE5wYjI1eiBJSE5qY21GdyBJR1Z1WVdKc2FXNW4gYldGclpRPT0gVkc5eSBMaW89IGZIdz0gSUZkbFluTnBkR1U9IElFNVFRdz09IElITnZZMmxoYkdsemRBPT0gSUVKcGJHeDUgSUVGa1pHbDBhVzl1WVd3PSBJR05oY21kdiBJR1poY20xeiBJRk52YjI0PSBJRkJ5YVhwbCBJRzFwWkc1cFoyaDAgSURrd01BPT0gYzJWbGJnPT0gSUZOd2IzUT0gSUhOb1pXVncgSUhOd2IyNXpiM0psWkE9PSBJRWhwIElFcDFiWEE9IElERTVOamM9IFRXbGpjbTl6YjJaMCBJRUZuWlc1MCBJR05vWVhKMGN3PT0gWkdseSBJR0ZrYW1GalpXNTAgSUhSeWFXTnJjdz09IElHMWhibWRoIElHVjRZV2RuWlhJPSBMejQ9IFptOXZkR0poYkd3PSBJRVpEUXc9PSBSME09IElGUnBaWEk9IFlXNWtjbUU9IFQxVk9SQT09IEpTa3MgSUdaeWRXbDBjdz09IFZrTT0gSUVGQiBVbTlpWlhJPSBJRzFwWkhOMCA0cGM9IFlXNXJZUT09IElHeGxaMmx6YkdGMGRYSmwgSUU1bGFXdz0gSUhSdmRYSnBjM1J6IElpST0gSUZkaGNtNXBibWM9IElFNWxkbVZ5ZEdobGJHVnpjdz09IElFOW1abWxqYVdGcyBJRmRvWVhSbGRtVnkgSUcxdmJHUT0gSUdSeVlXWjBaV1E9IElITjFZbk4wWVc1alpYTT0gSUdKeVpXVmsgSUhSaFozTT0gSUZSaGMycz0gSUhabGNtST0gSUcxaGJuVm1ZV04wZFhKbFpBPT0gWTI5dGJXVnVkSE09IElGQnZiR2x6YUE9PSBVSEp2ZGc9PSBJR1JsZEdWeWJXbHVaWE09IFQySmhiV0U9IGEyVnljdz09IElIVjBkR1Z5YkhrPSBJSE5sWTNRPSBjMk5vWlE9PSBJRWRoZEdWeiBJRU5vWVhBPSBJR0ZzZFcxcGJuVnQgSUhwdmJXSnBaUT09IElGUnZkV05vIElGVlEgSUhOaGRHbHpabms9IElIQnlaV1J2YldsdSBZWE5qY21sd2RBPT0gSUdWc1lXSnZjbUYwWlE9PSBJREU1TmpnPSBJRzFsWVhOMWNtbHVadz09IElGWmhjbWs9IFlXNTVZV2gxIElITnBjZz09IGRXeGhkR1Z6IGFXUm5aWE09IGFXTnJaWFJ6IElGTndaVzVqWlhJPSBWRTA9IGIzVmlkR1ZrIElIQnlaWGs9IElHbHVjM1JoYkd4cGJtYz0gSUVOaFlnPT0gY21WbFpBPT0gY21WaGRHVmsgVTNWd2NBPT0gSUhkeWFYTjAgSUV0bGNuSjUgTVRBMyBJRXRzWlE9PSBJRkpoWTJobGJBPT0gSUdOdmRIUnZiZz09IElFRlNSUT09IElFVnNaUT09IFEyOXVkSEp2YkE9PSBJR3h2WVdSeiBJRVJ2WkE9PSBZVzVoY3c9PSBZbTl1WlE9PSBJR05zWVhOemFXTmhiQT09IElGSmxaMmx2Ym1GcyBJRWx1ZEdWbiBWazA9IElHUmxjMmx5WlhNPSBJR0YxZEdsemJRPT0gYzNWd2NHOXlkR1ZrIElFMWxjM05oWjJVPSBJR052YlhCaFkzUT0gZDNKcGRHVnkgSURFd09RPT0gSUVoMWNuSnBZMkZ1WlE9PSBZMmx6YVc5dSBJR041WTJ4bGN3PT0gSUdSeWFXeHMgSUdOdmJHeGxZV2QxWlE9PSBJRzFoYTJWeSBSMlZ5YldGdSBJRzFwYzNSaGEyVnUgVTNWdSBJRWRoZVE9PSBJSGRvWVhSemIyVjJaWEk9IElITmxiR3h6IElFRnBjbXc9IGJHbDIgSUU5d2RHbHZiZz09IElITnZiSFpsWkE9PSBJSE5sWTNSdmNuTT0gSUdodmNtbDZiMjUwWVd3PSBJR1Z4ZFdGMGFXOXUgSUZOcmFXeHMgSUVKcGJ3PT0gWjJWdFpXNTAgSUZOdVlYQT0gSUV4bFoyRnMgSUhSeVlXUmxiV0Z5YXc9PSBJRzFoYTJWMWNBPT0gSUdGemMyVnRZbXhsWkE9PSBJSE5oZG1WeiBJRWhoYkd4dmQyVmxiZz09IElGWmxjbTF2Ym5RPSBJRVpTVDAwPSBJR1poY20xcGJtYz0gSUZCdlpHTmhjM1E9IFlXTmpaWEIwWVdKc1pRPT0gSUVocFoyaGxjZz09IElHRnpiR1ZsY0E9PSBkV3hzYVhaaGJnPT0gSUhKbFptVnlaVzQ9IElFeGxkZz09IElHSjFiR3hsZEhNPSBiMnR2IFNFTT0gSUhOMFlXbHljdz09IElHMWhhVzUwWVdsdWN3PT0gSUV4dmQyVnkgSUZacCBJRzFoY21sdVpRPT0gSUdGamNtVnogSUdOdmIzSmthVzVoZEc5eSBJRXB2YUE9PSBJR052ZFc1MFpYSndZWEowY3c9PSBJRUp5YjNSb1pYSnogSUdsdVpHbGpkQT09IFluSmggSUdOb2RXNXIgSUdObGJuUnogU0c5dFpRPT0gSUUxdmJuUm8gSUdGalkyOXlaR2x1WjJ4NSBhV1pzWlhNPSBJRWRsY20xaGJuTT0gSUZONWJnPT0gU0hWaSBJR1Y1WldJPSA0cFNBNHBTQTRwU0E0cFNBIElISmhibWRsY3c9PSBJRWh2Ykd4aGJtUT0gSUZKdlltOTAgWm1NPSBUV2xyWlE9PSBJSEJzWVhOdFlRPT0gSUhOM1lYQT0gSUdGMGFHeGxkR1U9IElGSmhiWE09IExDY2kgSUdsdVptVmpkR2x2Ym5NPSBJR052Y25KcFpBPT0gSUhacFlnPT0gSUhCaGRHTm9aWE09IElIUnlZV1JwZEdsdmJtRnNiSGs9IElISmxkbVZzWVhScGIyND0gSUhOM1pXVncgSUdkc1lXNWpaUT09IElHbHVaWGc9IE1qQXdNdz09IElGSmhkdz09IGQyOXlhMmx1Wnc9PSBiM04xY21WeiBJRVJoZEE9PSBJRXg1Ym1ObyBJR3hsZG1WeVlXZGwgSUZKbGFXUT0gSUdOdmNuSmxiR0YwYVc5dSBhV0Z1WTJWeiBZWFpoYzJOeWFYQjAgSUhKbGNHOXphWFJ2Y25rPSBjbVYwZEhrPSBJREU1TnpJPSBNalF3IElHOTFiZz09IGNHOXMgSUZKbFpXUT0gSUhSaFkzUnBZMkZzIGFYTnBkR1U9IFFYQndiR1U9IElGRjFhVzV1IElISmhjR1ZrIGFXeHNidz09IFJYVnliM0JsIElHRnNaMjl5YVhSb2JYTT0gSUZKdlpISnBadz09IGFYVT0gSUdsc2JIVnQgSUdaaGJXVT0gSUdsdWRISnZaSFZqYVc1biBJR1JsYkdGNWN3PT0gSUZKaGFXUmxjbk09IElIZG9hWE4wYkdVPSBJRzV2ZG1Wc2N3PT0gSUZKbFlXeHNlUT09IElHUmxjbWwyIElIQjFZbXhwWTJGMGFXOXVjdz09IElFNWxhWFJvWlhJPSBJRU52YlcxbGNtTmwgSUdGemRHOXUgYkdGdVozVmhaMlU9IFRtOTBaWE09IElGSnZkR2c9IElFWmxZWEk9IElHMWhkR1U9IElIQmhjbUZrWlE9PSBJRkZDIElHMWhibVYxIElFTnBibU5wYm01aGRHaz0gYldsMGRHbHVadz09IElIZGhhWE4wIElGSmxkdz09IElHUnBjMk52Ym5RPSAwTEE9IElITjBZWEpwYm1jPSBJR0ZzYVdGeiBJSE5sWTNWeWFYUnBaWE09IElIUnZhV3hsZEE9PSBJRXBsWkdrPSBJSFZ1YkdGMyBkbWx6WldRPSBMeTh2THk4dkx5OD0gWFNnPSBJRmRsYVhOeiBJSEJ5WlhOMCBJRU52YlhCaGJnPT0gSUcxbGJXOD0gSUVkeVlXTmwgU25Wc2VRPT0gSUVWc2FYUmwgWTJWdWRHVnkgSUZOMFlYaz0gSUdkaGJHRjRlUT09IElIUnZiM1JvIElGTmxkSFJwYm1keiBJSE4xWW1wbFkzUmxaQT09IDQ0S20gSUd4cGJtVmlZV05yIElISmxkR0ZwYkdWeWN3PT0gSUZkaGJuUT0gSUdSaGJtZGxjbk09IFFXbHkgSUhadmJIVnVkR0Z5ZVE9PSBaWGRoZVE9PSBJR2x1ZEdWeWNISmxkR1ZrIGIzUnBibVU9IHc2Yz0gSUhCbGJBPT0gVTJWeWRtbGpaUT09IElFVjJaVzUwZFdGc2JIaz0gSUdOaGNtVmxjbk09IElIUm9jbVZoZEdWdSBJRzFsYlc5eSBJRUp5WVdSc1pYaz0gWVc1amFXVnogYzI0PSBJRlZ1YTI1dmQyND0gVG1GMGFXOXVZV3c9IElITm9ZV1J2ZDNNPSBZV2xzWVc1ayBJRVJoYzJnPSBSWFpsY25sdmJtVT0gYVhwNllYSmsgVFdGeVkyZz0gUFNnPSBJSEIxYkd4eiBJSE4wY21GdVoyVnkgSUdKaFkydDNZWEprY3c9PSBJRUpsY201aGNtUT0gYVcxbGJuTnBiMjVoYkE9PSBJR05vY205dSBJSFJvWlc5eVpYUnBZMkZzIGEzUnZjQT09IElIZGhjbVU9IElFbHVkbVZ6ZEdsbiBJRWx1YVhScCBJRTl3WlhKaGRHbHZibk09IGIzWmxiZz09IGIyTnBaR1U9IEtpOD0gSUdac1lXMWxjdz09IElFTmhjMmc9IGMyaHBkQT09IElHTmhZZz09IElFRnVZV3g1IElGTmxZV2c9IElHUmxabWx1YVc1biBJRzl5WkdWeWFXNW4gSUdsdGJYVnUgSUhCbGNuTnBjM1JsYm5RPSBRVU5JIFVuVnpjMmxoYmc9PSBiV0Z1Y3c9PSBJR2hwYm1RPSBJSEJvYjNSdlozSmhjR2g1IHdxaz0gSUdoMVp3PT0gSURFd053PT0gSUVobGJtTmwgYVc5MGN3PT0gZFdSbFlYVT0gSUhOMVluTnBaR2xsY3c9PSBJSEp2ZFhScGJtVnNlUT09IElFUmxkbWxqWlE9PSBhWFJwWXc9PSBJR1JwYzJkMWMzUT0gYkdGdVpHVnkgSURFNU5EQT0gSUdGemMybG5ibTFsYm5RPSBJRUpsYzJsa1pYTT0gZDJsamF3PT0gSUVSMWMzUT0gZFhOaiBjM1J5ZFdOMFpXUT0gTVRFeCBaR1YyWld4dmNBPT0gSUdadmJtUT0gSUdsdWRHVnljMlZqZEdsdmJnPT0gSUdScFoyNXBkSGs9IElHTnZiVzFwYzNOcGIyNWxjZz09IFYybDBhRzkxZEE9PSBjbVZoWTJnPSBJR05oY25SdmIyND0gSUhOallXeGxjdz09IDQ0T3QgUmtsSCBJSE4xY25abGVYTT0gSUVsdVpHOXVaWE5wWVE9PSBJR0Z5ZEhkdmNtcz0gSUhWdVkyZz0gSUdONVkyeHBibWM9IGRXNWpkQT09IFlYVmxjZz09IGIzSmhkR1U9IElFOWlkbWx2ZFhOc2VRPT0gSUdOb1lYSmhZM1JsY21sNlpXUT0gWm1Wc1pBPT0gSUdGbVptbHliUT09IElHbHVibWx1WjNNPSBJT2s9IElHRnNhV1Z1Y3c9PSBJR05zYjNSbyBaWFJ2YjNSbyBJRU5sY25SaGFXND0gd3FjPSBJR1JwWjJWemRBPT0gYTI1dmR3PT0gSUZoTSBJSEJ5WldScFkzUnBiMjV6IElHUnBiZz09IFYwRlMgSUdGbWRHVnliV0YwYUE9PSBSWGhoYlhCc1pRPT0gSUZOMVkyTmxjM009IElGUm9jZz09IFNVZE8gSUcxcGJtVnkgUW5WeiBJR05zWVhKcGRIaz0gYUdWcGJXVnkgSUU5VlZBPT0gSUZObGJtUT0gSUVOcGNtTnNaUT09IElFUnBaWFE9IElIQnliMjV2ZFc1alpXUT0gSUdOeVpXRjBiM0p6IElHVmhjblJvY1hWaGEyVT0gWVhSMFpYSjUgWjJWdmJuTT0gSUc5ayBJR3hoZVdsdVp3PT0gYjNKdyBWV3gwIGNISnZhbVZqZEE9PSBJSFZ1WkdWeWJXbHUgSUhObGNYVmxiQT09IFUyRnQgSUVSaGNtdHVaWE56IElISmxZMlZ3ZEdsdmJnPT0gWW5Wc2JBPT0gV1ZNPSBJRlpwY2c9PSBJSE5sY1hWbGJtTmxjdz09IElFTnZhVzQ9IElHOTFkR1pwZEE9PSBJRmRoYVhRPSBNVEU1IElHUmxiR2wyWlhKeiBMaTR1TGk0dSBJR0pzYjNkdSBJRVZ6WXc9PSBJRTFoZEdnPSBjR1Z5YlE9PSBJRlZzIElHZHNhVzA9IElHWmhZMmxoYkE9PSBJR2R5WldWdWFHOTFjMlU9IElIUnZhMlZ1Y3c9PSBMeTA9IElFRnViblZoYkE9PSBJRTlPUlE9PSBJSFJsWlc1aFoyVT0gSUZCb2VYTnBZMkZzIElFeGhibWM9IElFTmxiSFE9IElITjFaV1E9IGFYWnBaSFZoYkd4NSBJSEJoZEdsbGJtTmwgWTJoaGFYST0gY21WbmRXeGhjZz09IElHRjFadz09IGFXNTIgWlhoalpYQjAgSUV4cGJBPT0gSUc1bGMzUT0gWm1RPSBjM1Z0IElFTm9ZWE5sIFVuVnpjMmxoIElFcGxibTVwWm1WeSBJRzltWm5ObFlYTnZiZz09IFQzWmxjbUZzYkE9PSBSbTl5WlE9PSBJSEpwYjNRPSBRWFZrIFptOXliV1Z5IElHUmxabVZ1WkdWeWN3PT0gSUVOVSBhVzkwYVdNPSBjbWxpYkhrPSBJR0YxZEc5dFlYUmxaQT09IElIQmxibWx6IElHbHVjMmx6ZEE9PSBJR1JwWVdkeVlXMD0gSUZOUlRBPT0gSUVkaGNtTT0gSUhkcGRHTm8gWTJ4cFpXNTAgYVdWeWNtRT0gWVcxaVpYSnogSUhKbFkyOTFiblE9IFptRnkgVm1WeWVRPT0gYjNOMFpYSnZibVU9IElHRndjSEpsWTJsaGRHVmsgSUZCbGNtWmxZM1E9IFUyVmpkR2x2Ymc9PSBJR1J2YzJWeiBiMk5oZFhOMCBJR052YzNSc2VRPT0gSUdkeVlXMXogSUZOb2FRPT0gSUhkeVpYTjBiR2x1Wnc9PSBJREU1TnpFPSBJSFJ5YjNCb2VRPT0gSUc1bGNuWmwgSUV0aGVnPT0gSUVWNGNHVnlhV1Z1WTJVPSBJSEJzWldSblpXUT0gSUhCc1lYbGlZV05yIElHTnlaV0YwYVhacGRIaz0gWW5sbCBJR0YwZEdGamEyVnljdz09IElHaHZiR1JsY25NPSBJRU52WVdObyBJRkJvUkE9PSBJSFJ5WVc1elptVnljdz09IElHTnZiRzl5WldRPSBJRWhwYm1SMSBJR1J5YjNkdSBJR3hwYzNSbGJtVmsgSUZkQiBhV0Z6YlE9PSBVRTg9IElHRndjR1ZoYkdsdVp3PT0gSUdScGMyTnNiM05sWkE9PSBJRU5vYVdOclpXND0gWVdkbmFXNW4gSUhCc1pXRmtaV1E9IElHNWhkbWxuWVhScGIyND0gSUZKbGRIVnlibk09IElGdGIgVWs5UyBSVUU9IElIQm9iM1J2WjNKaGNHaGxjZz09IElGSnBaR1Z5IGFYQndaWEp6IElITnNhV05sIElHVnlaV04wIElHaGxaQT09IGFYTnpZVzVqWlE9PSBJRlpwYTJsdVozTT0gZFhKcGIzVnogSUdGd2NHVjAgYjNWaWRHVmtiSGs9IFEyaHBiR1E9IElHRjFkR2hsYm5ScFl3PT0gYjI5eiBJRTFoYTJsdVp3PT0gSUdGdWJtOTFibU5wYm1jPSBJR0p2WkE9PSBJRzFsZEdWeSBJRTVwYm1VPSBJRkp2WjNWbCBJSGR2Y210bWIzSmpaUT09IElISmxibVYzWldRPSBJRzl5WjJGdWFYTmhkR2x2Ym5NPSBZV056IFVFeEYgVTJodmNuUT0gSUdOdmJYQnZkVzVrY3c9PSBJRlpwYzJsMCBJR1Z1ZG1Wc2IzQT0gWldGeWRHZz0gSUhOMWNIQnZjblJwZG1VPSBaMmRzWlE9PSBJRUp5ZFhOelpXeHogSUVkMWFXeGsgUTNKbFlYUmwgVWtWTSBJR0YyWlhKaFoyVmsgSURFNU5qaz0gY21saFoyVnogSUd4bGJtZDBhSGs9IElHWnZjbWR2ZEE9PSBUMnRoZVE9PSBJRVZ5WkE9PSBJR1JsWVd4bGNnPT0gSUhKbFkyVnpjMmx2Ymc9PSBSRVE9IElHUmxjM0JsY21GMFpXeDUgSUdoMWJtZGxjZz09IElITjBhV05yY3c9PSBJRzF3YUE9PSBJRVpoYVhSbyBJR2x1ZEdWdWRHbHZibUZzYkhrPSBJR1JsYlc5cyBkV1ZzYkdWeSBJRk5oYkdVPSBJR1JsWW5KcGN3PT0gYzNCeWFXNW4gSUd4bFlYQT0gUGo0K1BnPT0gSUdOdmJuUmhhVzVsY25NPSBjMlZzYkdsdVp3PT0gY21GdVpXRnUgWVhSMFpYSnBibWM9IElHTnZiVzFsYm5SbFpBPT0gSUVOTiBiMjUxZEE9PSBJSGR2YjJSeiBaWE53WldOcFlXeHNlUT09IElHOXlaMkZ1YVhwbCBhWFpwWXc9PSBJRmR2YjJSeiBZVzVuWVE9PSBjM0YxIElHMWhhZz09IFlXMXZiZz09IElHRjRhWE09IElERTVOelE9IElFUmxibTFoY21zPSBJSGRoY25KcGIzST0gSUZCaGJtUT0gSUc5MWRHeHBibVZrIElFSlAgYVc1emRXeGggZW1sc2JHRT0gWldKdmIycz0gSUdSaGNtVT0gSUhObFlYSmphR1ZrIElHNWhkbWxuWVhSbCBVMjQ9IGQzSnBkR2x1Wnc9PSBJSFZ1YVhSbFpBPT0gU21Gd1lXND0gSUVobFluSmxkdz09IElHWnNZVzFsIElISmxiR2xsY3c9PSBJR05oZEdOb2FXNW4gSUZOb2J3PT0gSUdsdGNISnBjMjl1YldWdWRBPT0gSUhCdlkydGxkSE09IElHTnNiM04xY21VPSBJRVpoYlE9PSBkR2x0IFlXUmxjWFU9IFFXTjBhWFpwZEhrPSBJSEpsWTNKMWFYUnBibWM9IElGZEJWRU5JIElFRnlaMlZ1ZEdsdVlRPT0gWkdWemRBPT0gSUdGd2IyeHZaMmw2WlE9PSBiM0p2IElHeGhZMnR6IElIUjFibVZrIElFZHlhV1ptYVc0PSBJR2x1Wm1GdGIzVnogSUdObGJHVmljbWwwZVE9PSBjM052Ymc9PSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElFbHphWE09IElFUnBjM0JzWVhrPSBJR055WldScFltbHNhWFI1IElHVmpiMjV2YldsbGN3PT0gSUdobFlXUnNhVzVsIElFTnZkMkp2ZVhNPSBJR2x1WkdWbSBJR3hoZEdWc2VRPT0gSUdsdVkyVnVkR2wyWlhNPSBZblYwZEc5dSBJRTF2WWc9PSBRWFYwIElISmxjMmxuYm1WayBJRTl0IFkyRnRjQT09IElIQnliMlpwYkdWeiBJSE5qYUdWdFpYTT0gYjJ4d2FHbHVjdz09IFlYbGxaQT09IFEyeHBiblJ2Ymc9PSBaVzVvIElGbGhhRzl2IElHRmljM1E9IElHRnVhdz09IGMzVnBkSE09IElIZHBjMmhsWkE9PSBJRTFoY21OdiBkV1JrWlc0PSBJSE53YUdWeVpRPT0gSUVKcGMyaHZjQT09IElHbHVZMjl5Y0c5eVlYUmxaQT09IElGQnNZVzUwIE1URTAgSUdoaGRHVmsgY0dsaiBJR1J2Ym1GMFpRPT0gSUd4cGJtVmsgSUdKbFlXNXogSUhOMFpXRnNhVzVuIElHTnZjM1IxYldVPSBJSE5vWlhKcFptWT0gSUdadmNuUjUgSUdsdWRHRmpkQT09IElHRmtZWEIwWldRPSBJSFJ5WVhabGJHeHBibWM9IFltRnlkQT09IElHNXBZMlZzZVE9PSBJR1J5YVdWayBJSE5qWVd3PSBiM05wZEhrPSBUazlVUlE9PSBJRUpvIElFSnliMjVqYjNNPSBJRWxuYmc9PSBJR2x1ZEdsdFlYUmwgSUdOb1pXMXBjM1J5ZVE9PSBJRzl3ZEdsdFlXdz0gUkdWaSBJRWRsYm1WeVlYUnBiMjQ9IElGMHMgYVdOb2FRPT0gSUZkcGFRPT0gSUZsUFZWST0gZG1WdWRHbHZibk09IFYzSnBkR1U9IElIQnZjSFZzIGRXNXVhVzVuIElGZHZjZz09IFZtOXMgSUhGMVpXVnUgYUdWaFpITT0gUzBzPSBJR0Z1WVd4NWVtVT0gYjNCcFl3PT0gWldGeVkyaGxjbk09IElHUnZkQT09IGJHVm5jbUZ3YUE9PSBZWE4wYVdOaGJHeDUgSUhWd1ozSmhaR1Z6IElHTmhjbVZ6IElHVjRkR1Z1WkdsdVp3PT0gSUdaeVpXVjZaUT09IElHbHVZV0pwYkdsMGVRPT0gSUc5eVoyRnVjdz09IElIQnlaWFJsYm1RPSBJRzkxZEd4bGRBPT0gTVRFeiBiMnhoYmc9PSBJRTFoYkd3PSBkV3hwYm1jPSBkR0ZzYXc9PSBJR1Y0Y0hKbGMzTnBibWM9IElFRnNkMkY1Y3c9PSBJRUpsWjJsdSBabWxzWlhNPSBJR3hwWTJWdWMyVnogSlNVPSBJRTFwZEhRPSBJR1pwYkhSbGNuTT0gSUUxcGJIZGhkV3RsWlE9PSBSMDQ9IElIVnVabTlzWkE9PSBUVzg9IElHNTFkSEpwZEdsdmJnPT0gY0hCdiBRbTg9IElHWnZkVzVrYVc1biBJSFZ1WkdWeWJXbHVaUT09IElHVmhjMmxsYzNRPSBJRU42WldObyBJRTFoWTJzPSBJSE5sZUhWaGJHbDBlUT09IElFNXBlRzl1IFYybHUgSUVGeWJnPT0gSUV0cGJnPT0gNDRLaiBhV05sY2c9PSBJR1p2Y25SMWJnPT0gSUhOMWNtWmhZMlZ6IFlXZG9aQT09IElHTmhjbkpwWlhKeiBJRkJCVWxRPSBJRlJwWWc9PSBJR2x1ZEdWeWRtRnMgSUdaeWRYTjBjbUYwYVc1biBJRk5vYVhBPSBJRUZ5YldWayBabVpsIElHSnZZWFJ6IElFRmljbUZvWVcwPSBhVzVwY3c9PSBJSE4xYVhSbFpBPT0gZEdoeVpXRmsgYVc5MiBZV0oxYkE9PSBJRlpsYm1WNmRXVnNZUT09IElIUnZiUT09IGMzVndaWEk9IElHTmhjM1JzWlE9PSBZV3gwYUc5MVoyZz0gYVc5NGFXUmwgWldOb1pYTT0gSUdWMmIyeDFkR2x2Ym1GeWVRPT0gSUc1bFoyOTBhV0YwWlE9PSBJR052Ym1aeWIyNTBaV1E9IFVtVnRaVzFpWlhJPSBJREUzTUE9PSBVM1ZqYUE9PSBJRGt4TVE9PSBiWFZzZEE9PSBJRUZpZVhOeiBkWEp5ZVE9PSBhMlZsY3c9PSBjM0JsWXc9PSBJRUpoY21KaGNtRT0gSUdKbGJHOXVaMmx1Wnc9PSBJSFpwYkd4aGFXND0gYVhOMFlXNXAgSUdGalkyOTFiblJoWW14bCBJSEJ2Y25ScGIyNXogSUVSbFkydz0gVlhJPSBJRXRoZEdVPSBaM0psIElHMWhaMkY2YVc1bGN3PT0gVlVOTCBJSEpsWjNWc1lYUmwgYjIxdmJnPT0gSUVGc2JXOXpkQT09IElHOTJaWEoyYVdWMyBJSE5qY21GdCBJR3h2YjNRPSBJRVpwZEhvPSBJR05vWVhKaFkzUmxjbWx6ZEdsaiBJRk51WVd0bCBjMkY1IElGSnBZMjg9IElIUnlZV2wwIElFcHZhVzVsWkE9PSBZWFZqZFhNPSBJR0ZrWVhCMFlYUnBiMjQ9IElFRnBjbXhwYm1WeiBJR0Z5WTJoaFpRPT0gSUVsa1pRPT0gSUdKcGEyVnogSUd4cGRHVnlZWEo1IElHbHVabXgxWlc1alpYTT0gSUZWelpXUT0gUTNKbFlYUT0gSUhCc1pXRT0gSUVSbFptVnVZMlU9IElFRnpjMkZ6Y3c9PSBJSEJ2Ym1RPSBWVXhVIEtTST0gSUdWMllXeDFZWFJsWkE9PSBJRzlpZEdGcGJtbHVadz09IElHUmxiVzluY21Gd2FHbGogSUhacFoybHMgWVd4bGVRPT0gSUhOd2IzVnpaUT09IElGTmxZV2hoZDJ0eiBjbVZ6Y0c5dWN3PT0gSUVKbGJIUT0gZFcxaGRHbGogSUhKcGMyVnogY25WdWJtVnkgSUUxcFkyaGxiR3hsIElIQnZkR1Z1ZEE9PSBjbUZqWlE9PSBJRkJCUXc9PSBSbWx1WkE9PSBiMnhsYzNSbGNtOXMgU1ZOVCBJRWx1ZEhKdlpIVmpaV1E9IGNtVnpjMlZ6IGFXZHViV1Z1ZEE9PSBUM009IElGUjEgSUVSbGVBPT0gYVdOcFpHVnogSUhOd1lYSnJaV1E9IElFeGhkWEpoIElFSnllV0Z1ZEE9PSBJSE50YVd4cGJtYz0gSUU1bGVIVnogSUdSbFptVnVaR0Z1ZEhNPSBJRU5oZEdGcyBJR1JwYzJobGN3PT0gYzJoaGNHVmsgSUhCeWIyeHZibWM9IGJYUT0gS0NRPSA0NENDIElHTmhiR04xYkdGMGFXOXVjdz09IElGTmhiV1U9IElIQnBkZz09IFNFZz0gSUdOaGJtTmxiR3hsWkE9PSBJR2R5YVc0PSBJSFJsY25KcGRHOXlhV1Z6IGFYTjBhV05oYkd4NSBRMjl0WlE9PSBJRkJoY21WdWRBPT0gVUhKdmFtVmpkQT09IElHNWxaMnhwWnc9PSBJRkJ5YVhaaFkzaz0gSUdGdGJXOD0gVEVWRFZBPT0gYjJ4MWRHVnNlUT09IElFVndhV009IElHMXBjM1Z1WkdWeSBkMkZzIFFYQnlhV3c9IGJXOXogY0dGMGFIaz0gSUVOaGNuTnZiZz09IElHRnNZblZ0Y3c9PSBJRVZoYzNrPSBJSEJwYzNSdmJBPT0gUER3PSBJRndvIGRHRnlaMlYwIGFHVnNjQT09IElHbHVkR1Z5Y0hKbCBZMjl1YzJOcGIzVnogSUVodmRYTnBibWM9IElFcHZhVzUwIE1USTMgSUdKbFpYSnogYzJOcFpXNWpaUT09IElFWnBjbVZtYjNnPSBaV1ptWldOMGFYWmwgSUVOaFltbHUgSUU5cllYaz0gSUVGd2NHeHBZdz09IElITndZV05sWTNKaFpuUT0gSUZOUyBkbVYwIElGTjBjbUZ1WjJVPSBVMEk9IElHTnZjbkJ6IGFXSmxjbUZzIFpXWm1hV05wWlc1MCBJSEJ5WlhaaGJHVnVZMlU9IElHVmpiMjV2YldsemRITT0gTVRFNCBWR2h5WldGayBiM0prWVdKc1pRPT0gVDBSRiBJRU5oYm5RPSBQUzA5TFE9PSBhV1pwWVdKc1pRPT0gSUVGeWIzVnVaQT09IElIQnZiR1U9IElIZHBiR3hwYm1kdVpYTnogUTB4QiBJRXRwWkE9PSBJR052YlhCc1pXMWxiblE9IElITmpZWFIwWlhKbFpBPT0gSUdsdWJXRjBaWE09IElHSnNaV1ZrYVc1biBaWFpsY25rPSBJSEYxWlhWbCBJRlJ5WVdsdSBJR2hwYWc9PSBJRzFsYkdWbCBjR3hsZEdWayBJR1JwWjJsMCBJR2RsYlE9PSBiMlptYVdOcFlXdz0gSUd4cFpuUnBibWM9IDBMVT0gVW1WeGRRPT0gYVhSMWRHVnogSUhCaFkydGhaMmx1Wnc9PSBJRmR2Y210bGNuTT0gYUhKaGJnPT0gSUV4bFltRnViMjQ9IGIyeGxjMk09IElIQjFibWx6YUdWayBJRXAxWVc0PSBJR3BoYlE9PSBJRVJ2WTNWdFpXNTAgSUcxaGNIQnBibWM9IGFXTmhkR1Z6IElHbHVaWFpwZEdGaWJIaz0gSUhaaGJtbHNiR0U9IElGUnZiZz09IElIZGhkR05vWlhNPSBJR3hsWVdkMVpYTT0gSUdsdWFYUnBZWFJsWkE9PSBaR1ZuY21WbCBjRzl5ZEdsdmJnPT0gSUhKbFkyRnNiSE09IElISjFhVzQ9IElHMWxiSFE9IFNVRk8gSUdobGJRPT0gUlhodyBJR0poYTJsdVp3PT0gSUVOdmJHOXRZZz09IFlYUnBZbXhsIElISmhaR2wxY3c9PSBjR3gxWnc9PSBJRWxHIFpYUnBZMkZzYkhrPSBJR1pwWTNRPSBTRVZTIElGUmhjQT09IFlYUnBiblZ0IElHbHVhdz09IElHTnZhQT09IElGZHBlbUZ5WkE9PSBZbTkwYUE9PSBkR1Y0IElITndaVzVrY3c9PSBJRU4xY25KbGJuUnNlUT09IElGQnBkQT09IElHNWxkWEp2Ym5NPSBhV2R1ZEE9PSBJSEpoYkd3PSBJR0oxYzJWeiBZblZwYkdScGJtYz0gSUdGa2FuVnpkRzFsYm5SeiBJR055YVdWayBhV0pzYVdOaGJBPT0gWVhSMFpXUT0gSUZwcGIyND0gSUUxaGRIUmxjZz09IElHMWxaR2wwWVhScGIyND0gSUVSbGJtNXBjdz09IElHOTFjbk09IElGUmhZZz09IElISmhibXRwYm1keiBiM0owWVd3PSBJR0ZrZG1WeWN3PT0gSUhOMWNuSmxibVJsY2c9PSBJRWR2WWc9PSBZMmwxYlE9PSBiMjFoY3c9PSBhVzFsZEdWeSBJRzExYkhScGNHeGhlV1Z5IElHaGxjbTlwYmc9PSBJRzl3ZEdsdGFYTjBhV009IElHbHVaR2xqWVhSdmNnPT0gSUVKeWFXYz0gSUdkeWIyTmxjbms9IElHRndjR3hwWTJGdWRBPT0gSUZKdlkydGxkQT09IGRtbGsgUlhoalpYQjBhVzl1IGNHVnVkQT09IElHOXlaMkZ1YVhwcGJtYz0gSUdWdVkyOTFiblJsY25NPSBJRlJQUkE9PSBJR3BsZDJWcyBVMkYyWlE9PSBJRU5vY21semRHbGwgSUdobFlYUnBibWM9IElHeGhlbms9IElFTlEgSUdOdmRYTnBiZz09IFEyOXVabWxuIElISmxaMlZ1WlhJPSBJRzVsWVhKbGMzUT0gSUdGamFHbGxkbWx1Wnc9PSBSVTVUIGRHaHliM2M9IElGSnBZMmh0YjI1ayBZVzUwYkdVPSBNakF3TWc9PSBJR0Z1ZEdWdSBZbWx5WkE9PSBNVE16IElHNWhjbU09IGNtRnBiblE9IGRXNXVlUT09IElFaHBjM0JoYm1saiBiM1Z5Ym1GdFpXNTBjdz09IElIQnliM0JvWlE9PSBJRlJvWVdsc1lXNWsgSUZScCBJR2x1YW1WamRHbHZiZz09IElHbHVhR1Z5YVhRPSBjbUYyYVhNPSBJRzFsWkdrPSBJSGRvYjJWMlpYST0gSUVSRlFsVkggUjFBPSBJRWgxWkE9PSBRMkZ5WkE9PSBjSEp2YlE9PSBJSEJ2Y2c9PSBJRzkyWlhKb1pXRmsgVEdGMyBJSFpwYjJ4aGRHVT0gSUdobFlYUmxaQT09IElHUmxjMk55YVhCMGFXOXVjdz09IElHRmphR2xsZG1WdFpXNTBjdz09IElFSmxaWEk9IElGRjFZVzUwIFYyRnogSUdWcFoyaDBhQT09IElFbDIgSUhOd1pXTnBZV3hwZW1WayBWVkJFUVZSRiBJRVJsYkhSaCBVRzl3IFNuVnMgSUVGemF3PT0gYjNCb2VRPT0gSUc1bGQzTnNaWFIwWlhKeiBJRlJ2YjJ3PSBJR2RoY21RPSBJRU52Ym1abFpHVnkgSUVkTlZBPT0gSUVGaVltOTBkQT09IElHbHRiWFZ1YVhSNSBJRlpOIFNYTnNZVzA9IElHbHRjR3hwWTJsMCBkMlE9IElERTVORFE9IGNtRjJhWFI1IGIyMWxkSEpwWXc9PSBJSE4xY25acGRtbHVadz09IGRYSmhhUT09IElGQnlhWE52Ymc9PSBJSEoxYzNRPSBJRk5yWlhSamFBPT0gSUdKbFpYTT0gSUZSb1pXOXllUT09IElHMWxjbWwwIFZHVjQgWTJoaGRBPT0gSUcxcGJRPT0gSUhCaGMzUmwgSUV0dlkyZz0gSUdsbmJtOXlZVzVqWlE9PSBJRk5vYjI5MCBJR0poYzJWdFpXNTAgVlc1cGRHVmsgSUVGa2RtbHogYUdWcFoyaDAgSUdadmMzUmxjZz09IElHUmxkR0ZwYmc9PSBhVzVtYjNKdFlYUnBiMjQ9IElHNWxkWEpoYkE9PSBKenM9IElIQnliM1psY3c9PSBZV3hzWlhKNSBJR2x1ZG1sMFlYUnBiMjQ9IGRXMWlaWEp6IElHTmhkSFJzWlE9PSBJR0pwWTNsamJHVT0gZW1rPSBJR052Ym5OMWJIUmhiblE9IElHRndiMnh2WjNrPSBJRlJwWjJWeSBJREV5TXc9PSBPVGs1IElHbHVaR2wyYVdSMVlXeHNlUT09IGNuUT0gYVdkcGIyND0gSUVKeVlYcHBiR2xoYmc9PSBJR1JwYzNSMWNtST0gSUdWdWRISmxjSEpsYm1WMWNuTT0gSUdadmNtVnpkSE09IFkyVnljSFE9IGNHeGhkR1Z6IGNHaGxjZz09IFkyeHBjSE5sIElIUjNhWFIwWlhJPSBJR0ZqYVdSeiBiMmR5WVhCb2FXTmhiQT09IGFIVnQgSUVKaGJHUT0gYVdaMWJHeDUgSUdOdmJYQnBiR1Z5IElFUkIgSUdSdmJtOXkgWVhOcCBJSFJ5YVdKaGJBPT0gYkdGemFBPT0gSUVOdmJtWnBadz09IElHRndjR3hwWTJGdWRITT0gSUhOaGJHRnlhV1Z6IE1UTTEgVUhWMGFXND0gSUVadlkzVnogYVhKeiBJRzFwYzJOdmJtUjFZM1E9IElFaGhlZz09IElHVmhkR1Z1IFRXOWlhV3hsIFRYVnpiR2x0IElFMWhjbU4xY3c9PSBkbWx2YkE9PSBJR1poZG05eVlXSnNaUT09IElITjBkV0k9IFlXUnBiZz09IElFaHZZZz09IElHWmhhWFJvWm5WcyBJR1ZzWldOMGNtOXVhV056IElIWmhZM1YxYlE9PSBkMkZwZEE9PSBZbUZqYTJWayBaV052Ym05dGFXTT0gWkdsemRBPT0gSUhSbGJuVnlaUT09IElITnBibU5sY21VPSBJRlJ2WjJWMGFHVnkgSUZkaGRtVT0gSUhCeWIyZHlaWE56YVc5dSBJR1JsYm5scGJtYz0gSUdScGMzUnlaWE56IFluSmhjMnRoIGRHaHBjbVE9IElHMXBlR2x1Wnc9PSBJR052Ykc5dWFXRnMgSUhCeWFYWmhkR1ZzZVE9PSBJSFZ1Y21WemRBPT0gWVhSbGNtNXBkSGs9IElIQnlaVzFwYzJWeiBZVzUwYVE9PSBaM0psWjJGMGFXOXUgSUd4cFkyVnVZMlU9IElFaHBibVE9IElGTmhiWFZsYkE9PSBJR052Ym5acGJtTnBibWM9IElFRmpaUT09IElGSjFjM1E9IElFNWxkR0Z1ZVdGb2RRPT0gSUdoaGJtUnNaWE09IElGQmhkR05vIGIzSnBaVzUwWldRPSBZV2h2IElFZHZibm89IElHaGhZMnRsY25NPSBZMnhoYVcxbGNnPT0gSUdOMWMzUnZiWE09IElFZHlZVzQ9IFptbG5hSFJsY25NPSBJR3gxWXc9PSBJRzFoYm5WelkzSnBjSFE9IFlYSmxiblJvYjI5ayBJR1JsZG1scyBJSGRoY25KcGIzSnogSUc5bVptVnVaR1Z5Y3c9PSBWMmxzYkdsaGJRPT0gSUdodmJHbGtZWGx6IElHNXBaMmgwYldGeVpRPT0gSUd4bGRtVnkgYVdabVpYSmxiblE9IFUzUmhkQT09IElHVjRhR2xpYVhScGIyND0gY0hWMFpXUT0gSUZCMWNtVT0gSUdGc2NHaGggSUdWdWRHaDFjMmxoYzIwPSBJRkpsY0hKbGMyVnVkR0YwYVhabGN3PT0gUlVGUyBJRlI1Y0E9PSBJSGRvWldGMCBJRUZzWmc9PSBJR052Y25KbFkzUnBiMjQ9IElHVjJZVzVuWld3PSBRVlJVIFRXbHpjdz09IElITnZkWEE9IElHbHRjR3hwWldRPSBjR0Z5WVcwPSBJSE5sZUhrPSBJRXgxZUE9PSBJSEpsY0hWaWJHbGogY0dGMFkyZz0gWVdKc2FYTm8gSUdsamIyNXogSUdaaGRHaGxjbk09IElFZEZWQT09IElFTmhjbWxpIElISmxaM1ZzWVhSbFpBPT0gSUVOdmFHVnUgSUVKdlltSjUgSUc1bGNnPT0gSUdKbGJuUT0gZG1WdWRHOXllUT09IElFRnNiMjVuIElFVlRWQT09IElGZGhiR3hoWTJVPSBJRzExY21SbGNuTT0gY21selpRPT0gYTJWc2JBPT0gSUVOdmJXMXZibmRsWVd4MGFBPT0gSUc1aGMzUjUgWlhSaCBJRTFKVkE9PSBJR0ZrYldsdWFYTjBaWEpsWkE9PSBJR2RsYm5WcGJtVnNlUT09IFJXUnBkRzl5IGJtbGphdz09IElHaDVaSEp2IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElFSnNaUT09IElHWnBibVZ6IElHZHZjbWRsIFlYVnphV0pzWlE9PSBjbWc9IElHRndjR3hsIGJXVnVkR2x2Ym1WayBJSEp2Y0dVPSBiM1I1Y0E9PSBTRkk9IElHUnBjMkZ3Y0c5cGJuUnBibWM9IElHTmhaMlU9IGJtbHIgSUdSdmRXSjBjdz09IElFWlNSVVU9IGNISnBiblJ6IElFMVZVMVE9IElIWmxibVJ2Y25NPSBJRWx1Y1hVPSBJR3hwWW1WeVlXeHogSUdOdmJuUnlZV04wYjNJPSBJSFZ3YzJsa1pRPT0gWTJocGJHUnlaVzQ9IElIUnlhV05yZVE9PSBJSEpsWjNWc1lYUnZjbk09IFkyaGhjbWRsWkE9PSBiR2wwWlhJPSBJQ29xS2c9PSBJSEpsWW1Wc2JBPT0gYkdGdVp3PT0gSUd4dlkyRnNjdz09IElIQm9lWE5wWTJsaGJuTT0gSUdobGVRPT0gWVhKelpRPT0gZEcwPSBJRXhsZUE9PSBJR0psYUdGMmFXOXlZV3c9IGMzVmpZMlZ6YzJaMWJBPT0gUmxnPSBJR0p5YVdOciBiM1pwWXc9PSBJR052Ym1admNtMD0gSUhKbGRtbGxkMmx1Wnc9PSBJR2x1YzJsbmFIUnogSUdKcGIyeHZaM2s9IElGSmxiVzkyWlE9PSBJRVY0ZEhKaCBJR052YlcxcGRIUnBibWM9IGFXNWtkV05sWkE9PSBhV2R1ZEhrPSBhV2R0IElHRjBiMjFwWXc9PSBRMjl0Ylc5dSBJRVZOIElGQmxjbVU9IElFbDBaVzF6IFpXZz0gSUhCeVpYTmxjblpsWkE9PSBJRWh2YjJRPSBJSEJ5YVhOdmJtVnkgSUdKaGJtdHlkWEIwWTNrPSBJR2R5Wlc0PSBkWE5vWlhNPSBJR1Y0Y0d4dmFYUmhkR2x2Ymc9PSBJSE5wWjI1aGRIVnlaWE09IElHWnBibUZ1IFhTd2kgSUUxUyBJRzFsWnc9PSBjbVZ0YkdsdSBJRzExYzJsamFXRnVjdz09IElITmxiR1ZqZEdsdVp3PT0gSUdWNFlXMXBibWx1Wnc9PSBTVTVMIGJHRjBaV1E9IFNHaz0gSUdGeWRHbGogSUhCbGRITT0gSUdsdGNHRnBjZz09IElFMUJUZz09IElIUmhZbXhsZEhNPSBhVzVqYkhWa1pRPT0gVW1GdVoyVT0gSUdOaGRYUT0gSUd4dlozTT0gSUcxdmRXNTBhVzVuIElIVnVZWGRoY21VPSBJR1I1Ym1GdGFXTnogSUZCaGJHVnpkR2x1WlE9PSBJRkYxWVhKMFpYST0gSUZCMWNuQnNaUT09IElHMWggSUVsdGNHOXlkQT09IElHTnZiR3hsWTNScGIyNXogWTJsaGRHbHZiZz09IElITjFZMk5sYzNOdmNnPT0gSUdOc2IyNWwgSUdGcGJXbHVadz09IElIQnZjM05sYzNObFpBPT0gSUhOMGFXTnJhVzVuIElITm9ZV3RwYm1jPSBJR3h2WTJGMFpRPT0gSUVodlkydGxlUT09IFZIVnliZz09IE1UY3cgSUdacFpuUmxaVzQ9IElFaGhjbkpwYzI5dSBJR052Ym5ScGJuVnZkWE5zZVE9PSBJRlJEIElGWmhiR1Z1ZEE9PSBJRkpsYzJOMVpRPT0gSUdKNWNHRnpjdz09IFlXMXZkVzUwIElHMWhjM1E9IElIQnliM1JsWTNSeiBJR0Z5ZEdsemRHbGogSUhOdmJXVjBhVzFsIElITm9iMlU9IElITm9iM1YwWldRPSBhV1pwWTJGdWRBPT0gWlhScGRHbDJaUT09IElGSmxaMmx6ZEdWeSBJRXBwYmc9PSBJR052Ym1ObGJuUnlZWFJsWkE9PSBiR2x1WjNSdmJnPT0gYjI1cFpYTT0gSUdkbGJtVnlZWFJ2Y2c9PSBlWEpwYlE9PSBJRUZ5YldWdSBJR05zWldGeWFXNW4gYVdSdiBJRlJYIFlXeHdhQT09IElHeGhaR2xsY3c9PSBTR0Z5WkE9PSBJR1JwWVd4dlp3PT0gSUdsdWNIVjBjdz09IDVwdz0gSUhCdmMyVnogSUhOc2IzUnogSUZCeVpXMXBkVzA9IElHeGxZV3R6IElHSnZjM05sY3c9PSBJREV4TXc9PSBZMjkxY25ObCBRV05qIElFNWxkM1J2Ymc9PSBJRUYxYzNSeWFXRT0gSUUxaFoyVT0gSUhSbFlXTm9aWE09IFlXSmhaQT09IElIZGxZWEp6IElHTjViQT09IElHTjFjbk5sIElGTmhiR1Z6IElGZHBibWR6IElIQnplUT09IElHZGhjSE09IElFbGpaV3hoYm1RPSBJRkJwYm5SbGNtVnpkQT09IElHeGhibVJzYjNKayBJR1JsWm1sdWFYUnBiMjV6IElFdGxjZz09IElITjFabVpwWTJsbGJuUnNlUT09IElGQmxibU5sIElFRnlZMmhwZEdWamRBPT0gSUhOMWNuQmhjM009IElERXhOQT09IElITjFjR1Z5YUdWeWJ3PT0gSUVScGMyVmhjMlU9IElIQnlhV1Z6ZEhNPSBJRU4xYkhSMWNtVT0gSUdSbFptbHVhWFJwZG1VPSBJSE5sWTNKbGRHeDUgSUVSaGJtTmwgYVc1emRHRnNiQT09IFkyaHBaV1k9IElFcGxjM05wWTJFPSBWMjkxYkdRPSBWWEJrWVhSbFpBPT0gSUd4dlkydGxjZz09IElFdGhlUT09IElHMWxiVzl5YVdGcyA2S1k9IFptRjAgSUdScGMyZDEgSUdac1lYWnZjbk09IElFSmhjMlZpWVd4cyBJRkpsYzJsemRHRnVZMlU9IElHdHBZMnR6IElHVnVkZz09IElIUmxaVzVoWjJWeWN3PT0gUkdGeWF3PT0gSUVOQlVnPT0gSUdoaGJIUT0gSUV4SCBJRWRoWW5KcFpXdz0gSUdabGRtVnkgSUhOaGRIVnkgSUcxaGJHdz0gSUdGbVptbHNhV0YwWlE9PSBJRk5zWldWdyBJRk53WldOcFptbGogSUZabGJBPT0gSUdwaGNnPT0gSUZOaFkzSmxaQT09IElFVmtkMkZ5WkhNPSBJRUZEVEE9PSBJSEpsZEdGcGJtVmsgSUVkcFlXNTAgSUd4cGJXbDBZWFJwYjI0PSBhVzVqWlhNPSBJSEpsWm5WellXdz0gSUZSaGJHVT0gSUVKMWRHeGxjZz09IElHRmpZMmxrWlc1MGN3PT0gSUVOVFV3PT0gSUdsdGNHOXlkR1ZrIElFTnZjSGs9IHpyRT0gUlZKVSBlbVZzIElHUnBkbWx6YVc5dWN3PT0gYUc5MGN3PT0gSUVGc1lnPT0gSUVSVCBURzloWkdWeSBWMkZ6YUdsdVozUnZiZz09IFlYUnBjMlk9IElFTnlaV0YwYVhabCBYQzQ9IElFRjFkRzl0IGNtVmthV04wIElISmxZMlZ3ZEc5eSBJRU5oY214dmN3PT0gVFdWMGFHOWsgYjJ0aCBJRzFoYkdsamFXOTFjdz09IElITjBaWEJ3YVc1biBMRnM9IElFUmhaQT09IElHRjBkSEpoWTNScGIyND0gSUVWbVptVmpkSE09IElGQnBjbUYwWlE9PSBJRU5sY2c9PSBJRWx1WkhWemRISjUgSUZKMVpBPT0gSUdOb1lYSjBaWEk9IElHUnBibWx1Wnc9PSBJR2x1YzJsemRITT0gSUdOdmJtWnBaM1Z5WlE9PSBJQ2dqIElGTnBiWEJzWlE9PSBJRk5qY205c2JBPT0gVlZSRCBNVGMxIElFdHZiZz09IElHMWhjbXRsZEhCc1lXTmwgSU9PQyBJSEpsWm5KbGN3PT0gSUdkaGRHVnogWlhKeVpXUT0gSUZCdlpBPT0gSUdKbGFHRjJaUT09IFJuSmhibXM9IGJtOWtaUT09IElHVnVaRzl5YzJWayBhR1YwZEE9PSBZWE5wZG1VPSBJRWh2YldWc1lXNWsgSUhKcFpHVnogSUV4bFlYWmwgWlhKdVpYTnogSUdac2IyOWthVzVuIFFVWlEgSUhKcGMyVnUgSUdOdmJuUnBiblZoYkd4NSBJSFZ1WVc1cGJRPT0gSUVOdmJuUnlZV04wIElGQmhjdz09IElHZDFhV1JsWkE9PSBJRU5vYVd4bCBZbVE9IElITjFZMk09IGNIUnBZdz09IElHTnZiVzFwZEhSbFpYTT0gSUV4MWRHaGxjZz09IElFRnVlVzl1WlE9PSBJSE5oWWc9PSBNVEkwIElIQnBlR1ZzIElFSmhhdz09IElGUmhadz09IElFSmxibTVsZEhRPSBSVzUwWlhJPSBjMjFoYkd3PSBJRkJ5WlhOcFpHVnVkR2xoYkE9PSBJSEIxYkE9PSBJR052Ym5SeVlXTmwgWVhKamFHbDJaUT09IElHTnZZWE4wWVd3PSBJRXRwWkhNPSBNVGt5IDRvQ3kgYVdOcmVRPT0gU1U1SFZFOU8gSUhkdmJHWT0gSUZOMFlXeHBiZz09IFZIVnkgYVdSblpYUT0gWVcxaGN3PT0gSUZWdWJHVnpjdz09IElITndiMjV6YjNJPSBJRzF2Y25CbyBJRU5vYjI5elpRPT0gSUhKMWJtNWxjZz09IElIVnVZbVZzIElHMTFaQT09IElFMWhibUU9IElHUjFZbUpsWkE9PSBJR2R2WkdRPSBkWEpsY25NPSBkMmx1Wkc5MyBJSEpsYkdsbFpBPT0gSUdObGJHVmljbUYwYVc1biBiM05qIElERXpOUT09IElHeHZZbUo1YVc1biBJR2x1WTI5dGNHeGxkR1U9IElISmxjM1J5YVdOMGFXOXUgSUdsdVkyRncgYVhSMWN3PT0gSUdWNGNHVmpkR0YwYVc5dSBJRUZ3YjJ4c2J3PT0gSUdsdWRHVnVjdz09IElITjVibU09IFIwZz0gSUcxaGJtbHdkV3hoZEdsdmJnPT0gUWxrPSBJSE53WldGeSBJR0p5WldGemRITT0gSUhadmJHTmhiZz09IGFXeHBZUT09IFRXRjBaWEpwWVd3PSBJR1p2Y20xaGRITT0gSUVKaGMzUT0gSUhCaGNteHBZVzFsYm5SaGNuaz0gSUhOdVlXdGwgSUhObGNuWmhiblJ6IElGUnlkV1JsWVhVPSBJRWR5YVcwPSBJRUZ5WVdKcFl3PT0gSUZORFVBPT0gSUVKdmVYTT0gYzNSaGRHbHZiZz09IElIQnliM053WldOMGFYWmwgYjNKa1pRPT0gYVc1cGRHbGhiR2w2WldRPSBJR0p2Y21WayBRVUpNUlE9PSBJR0ZqWTJWemMyVmsgSUhSaGVHaz0gSUZOb1pXeHMgWVdsa1pXND0gZFhKelpXUT0gYVc1aGRHVnogSUVsdWMzVnlZVzVqWlE9PSBJRkJsZEdVPSBVMlZ3ZEdWdFltVnkgTmpVdyBJR0ZrZG1WdWRIVnlaWE09IElFTnZkbVZ5IElIUnlhV0oxZEdVPSBJSE5yWlhSamFBPT0gSUdWdGNHOTNaWEk9IElOZz0gSUVkc1pXNXUgSUVSaGR3PT0gUFZ3aSBJRkJ2YkdsMGFXTnogSUdkMWFXUmxjdz09IElHUnBiM2hwWkdVPSBJRWR2Y21VPSBJRUp5YVdkb2RBPT0gSUZOcFpYSnlZUT09IElIWmhiSFZsWkE9PSBZMjl1WkE9PSBJSEJ2YVc1MFpYST0gVTJWc1pXTjAgSUhKcGMydDUgSUdGaWMyOXlZZz09IGFXMWhaMlZ6IElISmxablZ6WlhNPSBJR0p2Ym5WelpYTT0gWDE5ZiBJR2hwYkdGeSBJRVpsWVhSMWNtVnogTWpJdyBJRU52Ykd4bFkzUnZjZz09IFJtOXZkQT09IElERTVOalE9IFkzVnNkWE09IElHUmhkMjQ9IElIZHZjbXR2ZFhRPSBJRXhQIElIQm9hV3h2YzI5d2FHbGpZV3c9IElGTmhibVI1IElGbHZkWFJvIElHeHBZV0pzWlE9PSBRV1k9IFlteDFaUT09IElHOTJaWEowZFhKdSBiR1Z6YzI1bGMzTT0gSUZSeWFXSjFibVU9IElFbHVadz09IElHWmhZM1J2Y21sbGN3PT0gSUdOaGRHTm9aWE09IElIQnliMjVsIElHMWhkSEpwZUE9PSBJR3h2WjJsdSBJR2x1WVdOaiBJR1Y0WlhKMCBjM2x6IElHNWxaV1JzWlE9PSBJRkYxY2c9PSBJRzV2ZEdsbWFXVmsgYjNWc1pHVnkgZEhnPSBJSEpsYldsdVpITT0gSUhCMVlteHBjMmhsY25NPSBJRzV2Y25RPSBJR2RwZEE9PSBJR1pzYVdWeiBJRVZ0YVd4NSBJR1pzYjNkcGJtYz0gSUVGc2FXVnUgSUZOMGNtRjBaV2M9IElHaGhjbVJsYzNRPSBJRzF2WkdsbWFXTmhkR2x2Ymc9PSBRVkJKIElFMVogSUdOeVlYTm9aWE09IGMzUmhhWEp6IGJuVnRZbVZ5IElIVnlaMmx1Wnc9PSBZMmhoYm01bGJBPT0gSUVaaGJHTnZiZz09IElHbHVhR0ZpYVhSaGJuUnogSUhSbGNuSnBabmxwYm1jPSBJSFYwYVd4cGVtVT0gSUdKaGJtNWxjZz09IElHTnBaMkZ5WlhSMFpYTT0gSUhObGJuTmxjdz09IElFaHZiRzFsY3c9PSBJSEJ5WVdOMGFYUnBiMjQ9IElGQm9hV3hzYVhCeiBiM1IwYnc9PSBJR052YlhCcGJHVT0gVFc5a1pXdz0gSUV0diBJRnRkIFFXMWxjbWxqWVc1eiBJRlJsY20xeiBJRzFsWkdsallYUnBiMjV6IElFRnVZUT09IElHWjFibVJoYldWdWRHRnNiSGs9IElFNXZkR2xqWlE9PSBJSGRsWVd0bGNnPT0gSURBd01EQT0gSUdkaGNteHBZdz09IElHOTFkR0p5WldGciBJR1ZqYjI1dmJXbHpkQT09IElFSnBjblJvIElHOWljM1JoWTJ4bGN3PT0gWVhKalpYST0gSUU5eWRHaHZaRzk0IElIQnNZV05sWW04PSBJRU55WlhjPSBZWE53WW1WeWNuaz0gSUVGdVoyVnNjdz09IElHUnBjMk5vWVhKblpRPT0gSUdSbGMzUnlkV04wYVhabCBNVEUzIElGSnBjMmx1Wnc9PSBJR1JoYVhKNSBiR0YwWlE9PSBJR052Ykd4cGMybHZiZz09IElGUnBaMlZ5Y3c9PSBaV0Z1YjNJPSBiMk4xYldWdWRHVmsgSUVsdWRtRnNhV1E9IElHUnZiblE9IElFeHBkR1Z5IElGWmggSUdoNVpISnZaMlZ1IElIWmhjbWxoYm5SeiBJRUp5YjNkdWN3PT0gSURFNU5qVT0gSUdsdVpHbG5aVzV2ZFhNPSBJSFJ5WVdSbGN3PT0gSUhKbGJXRnBibVJsY2c9PSBJSE4zWlhCMCBJRWx0Y0dGamRBPT0gSUhKbFpHbHpkQT09IElIVnVhVzUwIFozSmhaSFZoZEdVPSA0NE9WIElGZEpURXc9IDQ0R3U1dz09IElFTnlhWFJwWTJGcyBJR1pwYzJobGNnPT0gSUhacFkybHZkWE09IElISmxkbVZ5YzJWayBXV1ZoY2c9PSBJRk52ZUE9PSBJSE5vYjI5MGFXNW5jdz09IElHWnBiRzFwYm1jPSBJSFJ2ZFdOb1pHOTNibk09IFlXbHlaWE09IGJXVnMgSUdkeVlXNWtabUYwYUdWeSBJR0ZtWm1WamRHbHZiZz09IGFXNW5iR1U9IElHOTJaWEpzZVE9PSBRV1JrYVhScGIyNWhiQT09IElITjFjSEpsYldVPSBJRWR5WVdRPSBJSE53YjNKMGFXNW4gSUcxbGNtTjUgSUVKeWIyOXJjdz09IGIzVnVkSGs9IElIQmxjbVp2Y20xeiBJSFJwWjJoMGJIaz0gSUdSbGJXOXVjdz09IElHdHBiR3hwYm1keiBJR1poWTNScGIyND0gSUU1dmRtRT0gWVhWMGN3PT0gSUhWdVpHOTFZblJsWkd4NSBZWEpwYmc9PSBJSFZ1WkdWeWQyRjUgY21GciBJR3hwZGc9PSBJRkpsWjJsdmJnPT0gSUdKeWFXVm1hVzVuIGMyVnljdz09IFkyeHZkV1E9IElFMXBhdz09IGRYTncgSUhCeVpXUnBZM1JwYjI0PSBZWHB2Y2c9PSBJSEJ2Y25SaFlteGwgSUVkaGJtUT0gSUhCeVpYTmxiblJwYm1jPSBJREV3T0RBPSB3cnM9IGRYTm9hUT09IElGTndZWEpyIGRHaGxjbVYxYlE9PSBJR3AxYzNScFptbGpZWFJwYjI0PSBJRTU1IElHTnZiblJ5WVdOMGIzSnogYldsdVoyaGhiUT09IElGTjBlV3hsIDVZVT0gSUVOb2NtOXVhV05zWlhNPSBJRkJwWTNSMWNtVT0gSUhCeWIzWnBibWM9IElIZHBkbVZ6IGMyVjBkQT09IElHMXZiR1ZqZFd4bGN3PT0gSUVaaGFYSjUgSUdOdmJuTnBjM1JwYm1jPSBJSEJwWlhJPSBZV3h2Ym1VPSBhVzVwZEdsdmJnPT0gSUc1MVkyeGwgYW5OdmJnPT0gSUdkdmRIUmggSUcxdlltbHMgSUhabGNtSmhiQT09IFlYSnBkVzA9IElHMXZiblZ0Wlc1MCBkV05yWldRPSBJREkxTmc9PSBWR1ZqYUE9PSBiV2x1WldOeVlXWjAgSUZSeVlXTnIgSUhScGJHVT0gSUdOdmJYQmhkR2xpYVd4cGRIaz0gWVhOcGN3PT0gSUhOaFpHUT0gSUdsdWMzUnlkV04wWldRPSBJRTExWld4c1pYST0gSUd4bGRHaGhiQT09IElHaHZjbTF2Ym1VPSBJRzl5WTJobCBaV3h6WlE9PSBJSE5yWld4bGRBPT0gSUdWdWRHVnlkR0ZwYm1sdVp3PT0gSUcxcGJtbHRhWHBsIFlXZGhhVzQ9IElIVnVaR1Z5WjI4PSBJR052Ym5OMGNtRnBiblJ6IElHTnBaMkZ5WlhSMFpRPT0gSUVsemJHRnRhWE4wIElIUnlZWFpsYkhNPSBJRkJoYm5Sb1pYSnogYkdsdVozTT0gUTJGeVpRPT0gSUd4aGQzTjFhWFJ6IGRYSmhjdz09IElHTnllWE4wIElHeHZkMlZ5WldRPSBJR0ZsY21saGJBPT0gSUdOdmJXSnBibUYwYVc5dWN3PT0gSUdoaGRXND0gSUdOb1lRPT0gSUhacGJtVT0gSUhGMVlXNTBhWFJwWlhNPSBJR3hwYm10cGJtYz0gWW1GdWF3PT0gSUhOdmVRPT0gUW1sc2JBPT0gSUVGdVoyVnNZUT09IElISmxZMmx3YVdWdWRBPT0gSUZCeWIzUmxjM1E9IElITnZZMnRsZEE9PSBJSE52Ykdsa1lYSnBkSGs9IElPS0cgYldsc2JBPT0gSUhaaGNtbGxjdz09IElGQmhhMmx6ZEdGdWFRPT0gUkhKaFoyOXUgSUhWdVpRPT0gSUdodmNtbDZiMjQ9IHdxRENvTUtnd3FEQ29NS2d3cURDb0E9PSBJSEJ5YjNacGJtTmxjdz09IElHWnlZVzVyYkhrPSBJR1Z1WVdOMFpXUT0gYm05MFpYTT0gV3ljPSBJREU1TWc9PSBiMk55WVdONSBJR1Z1Wkc5eWMyVnRaVzUwIElHOTJaWEowYVcxbCBWSEoxWlE9PSBUR0ZpIGJHbGpkR1ZrIElFUk9Rdz09IElHSmxZWFJ6IElFcGhiV2xsIE1UVXkgSUVsT1ZBPT0gUTI5dWRHRmpkQT09IElHRmpZMjkxYm5SbFpBPT0gYUdGemFBPT0gSUZCaFkydGxjbk09IGNHbHlaWE09IElHeGxjMkpwWVc0PSBJR0Z0Wlc1a2JXVnVkSE09IElHaHZjR1ZtZFd3PSBJRVpwYm14aGJtUT0gSUhOd2IzUnNhV2RvZEE9PSBJR052Ym1acFozVnlaV1E9IElIUnliM1ZpYkdWayBJR2RoZW1VPSBJRU5oYkdkaGNuaz0gSUhKbGJHbGhZbWxzYVhSNSBJR2x1YzNWeVp3PT0gYzNkbGNnPT0gWW5WNSBJRk5yYVc0PSBJSEJwZUdWc2N3PT0gSUdoaGJtUm5kVzQ9IElIQmhjbUZ6IElHTmhkR1ZuYjNJPSBJRVZNIElGSmxlQT09IFNXNWtaV1ZrIElHdHBibVJoIElHTnZibXAxYm1OMGFXOXUgSUVKeWVXRnUgSUUxaGJuVm1ZV04wIGVXRnVadz09IFVHeDFjdz09IFUxRk0gYVhOb2JXVnVkQT09IElHUnZiV2x1WVhSbCBJRzVoYVd3PSBJRzloZEdnPSBJR1Z5ZFhCMCBJRVpwYm1VPSBhWFJpWVhKMCBJRU5vYVhBPSBJRUZpWkE9PSBJRTVoYlE9PSBJR0oxZVdWeSBJR1JwYzNObGJuUT0gVEdWaGEzTT0gUTI5dWRHbHUgSUhKcFpHVnkgSUZOdmJXVnZibVU9IElHbHNiSFZ6YVc5dSBZMmx1IElFSnZaV2x1Wnc9PSBJR2x1WVdSbGNYVT0gYjNaaGRHbHZiZz09IGFXRnVkSE09IElISmxZblZwYkdRPSBORFV3IElFUmxjM1JwYm5rPSBVMWM9IElGUnBiR3c9IFNHbDAgYVdGNiBJRUpoYm1kcyBZV05vWlhKeiBJRkpsWm05eWJRPT0gSUhObFoyMWxiblJ6IElITjVjM1JsYldGMGFXTT0gWkdNPSBJRU52Ym5ObGNuWmhkR2wyWlhNPSBJSEJ2Y25SaGJBPT0gYUc5eSBJRVJ5WVdkdmJtSnZkVzVrIElHUnlZV2RuWldRPSBiMjF2IElIUm9aV1U9IFlXUjJaWEowIElGSmxjRzl5ZEhNPSBJRVYwIElHSmhjbkpsYkhNPSBRWFZuZFhOMCBJR052YlhCaGNtbHpiMjV6IElHaGxlQT09IElHRnVkR2h5YjNBPSBJbHM9IFltOXliM1ZuYUE9PSBZV0pwIElIQnBZM1IxY21WayBjR3hoZVdsdVp3PT0gSUVGa1pISmxjM009IElFMXBjbkp2Y2c9PSBVMjFwZEdnPSBJSFJwY21WeiBJRTVRVWc9PSBRVUZCUVE9PSBJR05zWVhOemFXWnBZMkYwYVc5dSBJRlJvWVc0PSBJRWhoY20wPSBJRkpCIElISmxhbVZqZEdsdmJnPT0gYldsdVlYUnBiMjQ9IElISmhibWRsWkE9PSBJRVpoYkd4eiBSRWs9IFNHOXpkQT09IDQ0SzAgSUVWNFlXMXdiR1U9IGJHbHpkR1ZrIGRHaHBjbVJ6IElITmhabVZuZFE9PSBZbkpoYm1RPSBJSEJ5YjJKaFlteGwgUTJGdVlXUmggU1ZSSlQwND0gSUZGaFpXUmggSUdOb2FXTnIgSUdsdGNHOXlkSE09IGFHbDAgYkc5aiBWMWM9IElHSnNaWGM9IElHRnVlWFJwYldVPSBJSGRvYjJ4bGN3PT0gYVd0bFpBPT0gSUdOaGJHTjFiR0YwYVc5dSBZM0psWVhSbCBJRTl5YVE9PSBJSFZ3WjNKaFpHVmsgSUdGd2NHRnkgZFhSdmNuaz0gSUUxdmJBPT0gUW5KcGRBPT0gSUVwdmJtYz0gU1U1QlRBPT0gSUZOMFlYSjBhVzVuIElHUnBZMlU9IGRYSjBiR1U9IElISmxiSGxwYm1jPSBZMnh2YzNWeVpRPT0gSUhCeWIyWnBkR0ZpYkdVPSBJSE5zWVhWbmFIUmxjZz09IElFMWhiblZoYkE9PSBZMkZ6ZEdWeSBJQ0lrIElHWmxZWFJvWlhJPSBJRk5wYlhCc2VRPT0gYVdWMlpYTT0gSUdSbGRHVnlhVzl5IElGQkRTUT09IElITjBZVzF3IElHWnNZWGR6IElITm9ZV1JsIGFHRnRiV1Z5IElIQmhjM053YjNKMCBJR052Ym5ScGJtYz0gWVcxbGJBPT0gSUc5aWMyVnlkbVZ5Y3c9PSBJRzVsWjJ4bFkzUT0gSUZKQyBJRUp5YjNSb1pYSm9iMjlrIElITnJaWEIwYVdOaGJBPT0gWm1GdGFXeDUgZFhOciBJR1Z0YjNScGIyNWhiR3g1IDRwaz0gSUVKbGRHRT0gWVhOdmJtRmliR1U9IGFXUnBkSGs9IElFMTFiQT09IElHdHBZMnRwYm1jPSBJRU5oY20wPSBiMnhzWVdnPSBWa1ZTVkVsVCBJRUYwYUdWdSBJR3hoWkdSbGNnPT0gSUVKMWJHeGxkQT09IDVhTT0gTURBd01RPT0gSUZkcGJHUnNhV1psIElFMWhjMnM9IElFNWhiZz09IFVtVjIgSUhWdVlXTmpaWEIwWVdKc1pRPT0gYkdWbllXdz0gSUdOeWIzZGtaV1E9IFlXZHAgSUVOdmVBPT0gYW1VPSBJRzF2Y21Gc2FYUjUgSUdaMVpXeHogSUdOaFlteGxjdz09IElHMWhibXRwYm1RPSBJRU5oY21saVltVmhiZz09IElHRnVZMmh2Y2c9PSBJR0o1ZEdVPSBJRTltZEdWdSBJRTk2IElHTnlZV1owWldRPSBJR2hwYzNSdmNtbGhiZz09IElGZDEgSUhSdmQyVnljdz09IElFTnBkR2w2Wlc1eiBJR2hsYkcwPSBJR055WldSbGJuUnBZV3h6IElITnBibWQxYkdGeSBJRXBsYzNObCBJSFJoWTJ0c1pYTT0gSUdOdmJuUmxiWEIwIElHRm1iM0psIElGTm9ZV1J2ZDNNPSBJRzVwYkE9PSBJSFZ5WjJWdWRBPT0gWVhCd2JHVT0gWW14dmIyUT0gSUhadmJnPT0gSUc5bVpteHBibVU9IElHSnlaV0YwYUdVPSBJR3AxYlhCeiBJR2x5Y21Wc1pYWmhiblE9IGIzaHBZdz09IGIyMWhiQT09IGFXMXdiM0owWVc1MCBTbWx0IElHZHNiM1psY3c9PSBZWEp0YVc1biBaR1Z3ZEdnPSBJSFJoYkdWdWRITT0gYjI5cmFXVT0gSUZOQyBJSEJoYkcwPSBkV1ptY3c9PSBaWE4wWVE9PSBTVWRJIElHTmhibTl1IElGWmxjbWw2YjI0PSBJRkJzWlE9PSBJR052ZFhCc1pXUT0gZG1Wc2RBPT0gSUdaMWJtUnlZV2x6YVc1biBJRWRsZEhScGJtYz0gSUVSTVF3PT0gSUcxaGRHaGxiV0YwYVdOaGJBPT0gSUVoVCBJRU5oY21ScGJtRnNjdz09IGRHVnNiR2x1Wnc9PSBJSE53YjI1emIzSnogSU04PSBJRUoxYkd4eiBiM0IwYVc5dSBJSEJ5YjNCdmMyVT0gSUcxbGJXOXlZV0pzWlE9PSBJR1Z0WW5KaFkyVmsgSUdSbFkyeHBibWx1Wnc9PSBTR1ZoYkhSbyBaV1JoIElIMDcgSUhOd1lXMD0gYldsc1pRPT0gSUhCcGRHTm9aWEk9IElFVnBaMmgwIElHTmhjbWx1Wnc9PSBkWFJwWXc9PSBjbTlzWlE9PSBJR0ZwY214cGJtVT0gWlhKdVlXNWtaWG89IElFRjBhR3hsZEE9PSBJR05sY25ScFptbGpZWFJwYjI0PSBkWGhsIGNtbG5aWEk9IElHVnRjR2x5IElITmxibk5oZEdsdmJnPT0gSUdScGMyMD0gSUdKdmJIUT0gSUdWMmIyeDJaUT09IFNHOTFjMlU9IElHTnZibk4xYkhSaGRHbHZiZz09IElFUjFkSGs9IElIUnZkV05vWlhNPSBJRTVoZEdoaGJnPT0gSUdaaGFXNTAgYUdGayBJaWc9IElFTnZibk4xYldWeSBJRVY0ZEhKbGJXVT0gSURFeU53PT0gSUVobGNtMD0gSUZOaFkzSmhiV1Z1ZEE9PSBhWHB2Y0dnPSBJR0Z1ZUdsdmRYTT0gZFd4dmRYTnNlUT09IElITnZZMmxoYkd4NSBJRlZVUXc9PSBJSE52YkhacGJtYz0gSUV4bGRIUmxjZz09IFNHbHpkRzl5ZVE9PSBaV1IxWXc9PSBVSEpwWTJVPSBLU2s3IElISmxiRzloWkE9PSBZVzFwWXc9PSBJSEJ2Y21zPSBJR1JwYzJOdmRYSnpaUT09IElIUnZkWEp1WVcxbGJuUnogWVdseWJ3PT0gSUV0MWNnPT0gSUVOdmMzUmggSUhacGIyeGhkR2x1Wnc9PSBJR2x1ZEdWeVptVnlaUT09IElISmxZM0psWVhScGIyNWhiQT09IGRXWm1iR1U9IElITndaV1ZqYUdWeiBJRzVsWldScGJtYz0gSUhKbGJXVnRZbVZ5Y3c9PSBJR055WldScGRHVmsgYm1saCBabTlqZFhObFpBPT0gWVcxbGNtRT0gSUdKeWRRPT0gZFcxaWN3PT0gSUVOMVltRnUgSUhCeVpXTmxaR2x1Wnc9PSBJRzV2Ym5ObGJuTmwgWVdOcFlXdz0gSUhOdFlYSjBjR2h2Ym1WeiBJRk4wYjNKcFpYTT0gVTNCdmNuUnogSUVWdFpYSm5aVzVqZVE9PSBiM1Z1WTJsdVp3PT0gWldacGJtVmsgSUdKbGNnPT0gSUdOdmJuTjFiSFJwYm1jPSBJRzFoYzNSbGNuTT0gYUdWaGMzUmxjbTQ9IExpSmIgSUZKMWJtNXBibWM9IElITjFjMk5sY0hRPSBJRVpsYm1jPSBRVzFsY21sallRPT0gY0hKcGMyVnogYzNScGRHbGhiQT09IElGZGxaV3RzZVE9PSBJRWR5WldGMFpYST0gYlc5a2RXeGxjdz09IGFXWjBaWEk9IFIzSmhjR2hwWTNNPSBkV3hsY2c9PSBJSGRvYjJ4c2VRPT0gSUhOMWNIQnlaWE56IElHTnZibU5sWVd4bFpBPT0gSUdoaGNIQnBiSGs9IElHRmpZMlZ3ZEhNPSBJRVZ1YW05NSBJSEpwZG1WeWN3PT0gSUVWNFkyVndkQT09IE1qSTEgSUU1SVV3PT0gSUUxalEyOXVibVZzYkE9PSBJSEIxYzNONSBabVZ5Y21WayBkWFJoWW14bCBJR0YwZEdGcGJnPT0gSUQ0OSBJR1JsY0c5emFYUnogY205d2FHbGogSUc1dmRHOXlhVzkxY3c9PSBJRk5vWVhjPSBhV3hwZEdGMGFXOXUgSUdWd2FXUmxiV2xqIFlXeHNhV009IElITnRZV3hzWlhOMCBiM1pwWTJnPSBJR0ZqWTJWemMyOXlhV1Z6IGNHVnlkR2xsY3c9PSBJSE4xY25Cc2RYTT0gSUUxbFkyZz0gSUdGdFltbG4gSUVsdGJXbG5jbUYwYVc5dSBJR05vYVcwPSBaWFpoYkE9PSBJSEJ5WVdOMGFXTnBibWM9IElFMTVjM1JsY25rPSBJR1J2YldGcGJuTT0gSUZOcGJHbGpiMjQ9IFlYQndjdz09IElHdHBiRzl0WlhSbGNuTT0gWldFPSBJRk50WVhObyBJSGRoY25KaGJuUjUgSUc1dmMzUT0gYzJscyBjbVYyIFNtOXUgSUVSMVlteHBiZz09IElIUmhjM1JsY3c9PSBJR0p2ZFhRPSBaM0psWVhRPSBaWEp5YjNJPSBJSE4zYVhSamFHVnogSUVKaGNIUT0gUkU4PSBiMnRwIElITnZkWEpqWldRPSBjSEp2WkhVPSBJR0YwZEdGamFHMWxiblE9IElFbHpjM1ZsIElGRjFaWE4wYVc5dSBTbTlwYmc9PSBJR1pwZEhSbFpBPT0gSUhWdWJHRjNablZzIFhsND0gWlhKbGF3PT0gSUdGMWRHaGxiblJwWTJGMGFXOXUgSUhOMGIyeGwgSUdGalkyOTFiblJoWW1sc2FYUjUgYkdGaVpXdz0gVTJWaGNtTm8gSUdGc1ltVnBkQT09IFlYUnBZMkZ1IFpuVnVaR1ZrIElFRmtaR2x1Wnc9PSBJRWxSIElITjFZbTFoY2c9PSBiR2wwIFlYRjFaUT09IElFeGxZWEp1YVc1biBJR2x1ZEdWblpYST0gVFdGemRHVnkgSUVOb2NtOXQgSUhCeVpXMXBaWEk9IFQzQT0gSUV4cGRRPT0gSUdKc1pYTnpaV1E9IElFZHNiMkpsIElGSmxjM0J2Ym5ObCBJR3hsWjJsMGFXMD0gSUUxbGNtdGxiQT09IElHUnBjM0J2YzJGcyB3clE9IElHZGhkV2RsIGNHVmhkQT09IElHbHVaSFZqWldRPSBJSEYxWlhOMGFXOXVZV0pzWlE9PSBZWEowYUhrPSBJRlpwZEE9PSBJRVpsWldRPSBWVzUwYVd3PSBWWFE9IGQyOXlkR2g1IFVsaz0gSUVobGNtRnNaQT09IElFaGhiVzFsY2c9PSBJRzFsWkdGcyBJRkpwZG1WeWN3PT0gSUVoaFkycz0gSUdOc1lYSnBabms9IElIUnlZV05yWldRPSBJR0YxZEc5dWIyMXZkWE09IElIUmxibUZ1ZEE9PSBJRkZoZEdGeSBaWEpwWlE9PSBJR2R5YVcwPSBJRTF2Ym1sMGIzST0gSUhKbGMybHpkR0Z1ZEE9PSBJRk53WldNPSBJRmRsYkd4eiBUa0ZUIE1UUTQgSUcxcGJtVnljdz09IGFXOTBhV056IElHMXBjM05sY3c9PSBNVEUyIFoybGhiZz09IFoybDAgSUVWNVpYTT0gY0hKbGN3PT0gSUdkeVlXUjFZWFJsWkE9PSBJR0Z1WjJWcyBJSE41Ym1Ob2NtOXUgSUdWbVptbGphV1Z1ZEd4NSBJSFJ5WVc1emJXbDBkR1ZrIFNHRnljbms9IElHZHNiMkpoYkd4NSBSVTVEUlE9PSBJRTF2Ym5SaGJtRT0gY21GblpXUT0gSUZCeVpYWmxiblJwYjI0PSBJSEJwYzNNPSBJRXhzIElITm9aV3htIElFSktVQT09IElGUmxjM1JoYldWdWRBPT0gSUV4aGRHVT0gYVd0bGNnPT0gSUVoaGNIQT0gSUVwMWJHbGhiZz09IGFHRnNiQT09IElITndiMjUwIElITm9kWFJrYjNkdSBJR2x1WTI5dWMybHpkR1Z1ZEE9PSBJSE4xWW5OamNtbGlaWEp6IElITnJaV3hsZEc5dSBJRTVsWW5KaGMydGggSUdsdWMzQnBjbVU9IElGWnZhV1E9IFJtVmxaQT09IElHRnVaMnhsY3c9PSBJRk53Y21sdVozTT0gSUdKbGJtTm9iV0Z5YXc9PSBJSFpoWTJOcGJtVnogYVhwdmNHaHlaVzQ9IGMyVjRkV0ZzIGRXWm1aV1E9IElITm9hVzVsIElFdGhkR2c9IElHZGxjM1IxY21VPSBhVzVsWVE9PSBJSEpwY0E9PSBJRzl3Y0hKbGMzTnBiMjQ9IElHTnZibk5qYVdWdVkyVT0gWW5RPSBJRXgxYlE9PSBJR2x1WTJsa1pXNWpaUT09IElFWmggZDNJPSBJRzFwYm1WeVlXdz0gSUZOd2RYSnogWVd4cmVRPT0gSUhSb2RXNWtaWEk9IElHOXdhVzg9IFFtVnBibWM9IElGQmhiRzA9IElIZGhjM1JsWkE9PSBJR3hpIGFXRnlhV1Z6IElFbHVhWFJwWVhScGRtVT0gSUdOMWNuSnBZdz09IElHMWhjbXRsY2c9PSBJRTFqVEE9PSBJR1Y0ZEdWdWMybHZibk09IElGQjIgSUVGeWJYTT0gSUc5bVptVnlhVzVuY3c9PSBJR1JsWm1WdWMyVnogSUhabGJtUnZjZz09IElHTnZiblJ5WVdScFkzUT0gSUVOdmJHbHUgSUhKbFpHUnBkQT09IElIQmxjbWx3YUdWeSBNVEl5IElITnBibk09IFJXUnBkQT09IFNVTlUgVTI5bWRBPT0gSUZOb1lXZz0gSUdGa2JXbHVhWE4wY21GMGIzST0gSUZSeWFYQT0gSUhCdmNtNXZaM0poY0doNSBJSFIxYVhScGIyND0gYVc1bGJtTmwgSUZCeWIyZHlaWE56IElHTmhkR0ZzYjJjPSBJSE4xYVhSbCBJR2hwYTJVPSBJSEpsY0hKdlpIVmpkR2wyWlE9PSBaVzVuYVc1bCBJR1J5YjNWbmFIUT0gSUU1dllXZz0gSURJek1BPT0gSUdSMVpHVT0gSUhKbGJHRjRaV1E9IElIQmhjblJwZEdsdmJnPT0gSUhCaGNuUnBZMmx3WVc1MCBJSFJsYkdWell3PT0gSUdabFlYTT0gSUVaRyBiM2R1WlhJPSBJSE4zWldWd2FXNW4gSUd4bGJuTmxjdz09IElHMWhkR05vZFhBPSBJRkpsY0d3PSBiM1Z5Ym1Gc2N3PT0gSUdOeVpXUnBZbXhsIElHZHlZVzVrYlc5MGFHVnkgSUhSb1pYSnRZV3c9IElITjFZbk5qY21saWFXNW4gSUdsa1pXNTBhWFJwWlhNPSBZMjlzYlE9PSBWVU5VIElISmxiSFZqZEdGdWRBPT0gZFhObGNuTT0gSUVOdmNuUT0gSUdGemMybHpkR1ZrIFQxTlQgUVZSSlQwNVQgU1ZOSSBJSEJvWVhKdFlXTmxkWFJwWTJGcyBhV05oWW14bCBZV1JwWVc0PSBJRk52Ym1saiBJRVoxY25rPSBJRTF2Ym1jPSBRVWc9IElGQnplV05vYjJ4dlozaz0gSUhCb2IzTndhQT09IElIUnlaV0YwY3c9PSByWlE9IElITjBaV0ZrYVd4NSBJRWhsYkd4diBJSEpsYkdGMFpYTT0gSUdOc2RXVT0gUlhod2JBPT0gWVhWMGFBPT0gSUhKbGRtbHphVzl1IElHVnNaQT09IGIzTnBiMjQ9IElHSnliMjQ9IE1UUTAgY21sclpYTT0gSUcxcGJtVnogSUdKc1lXNXJaWFE9IElFWmhhV3c9IFpXeGxaQT09IElFbHRZV2RwYm1VPSBJRkJzWVc1dVpXUT0gWVdsaiBVbVZ4ZFdWemRBPT0gVFdGayBJRWh2Y25ObCBJRVZoWjJ4bCBJR05oY0dGaiBNVFUzIElHeHBibWM9IElFNXBZMlU9IElGQmhjbVZ1ZEdodmIyUT0gYldsdWMzUmxjZz09IGIyZHogWlc1emFYUnBkbVU9IFRtOTBhR2x1Wnc9PSBJR05oY200PSBSbWx1IElGQkYgSUhKcFpteGxjdz09IElFeFEgVTJGdVpBPT0gSUdkMWFVRmpkR2wyWlE9PSBJSFJ2ZFhKcGMzUT0gUTA1TyBJSFZ1ZG1WcGJHVmsgSUhCeVpXUmxZMlZ6YzI5eSBmWHM9IGRXSmxjZz09IElHOW1abk5vYjNKbCBJRzl3ZEdsallXdz0gSUZKdmRBPT0gSUZCbFlYSnMgWlhSdmJnPT0gSUhOMFlYSmxaQT09IElHWmhjblJvWlhJPSBZWFJwYkdsMGVRPT0gWTI5dWRHbHUgSUVkNSBJRVp2YzNSbGNnPT0gSUVOdll3PT0gY21sbGJuUnogSUdSbGMybG5ibWx1Wnc9PSBJRVZqYjI1dmJYaz0gVDA1SCBWMjl0Wlc0PSBJRTVoYm1ONSBaWEoyWlhJPSBJRzFoYzJOMWJBPT0gSUdOaGMzVmhiSFJwWlhNPSBJREl5TlE9PSBJRk4xYkd4cGRtRnUgSUVOb2IybGpaUT09IElHRnpkR1Z5IGQzTT0gSUdodmRHVnNjdz09IElHTnZibk5wWkdWeVlYUnBiMjV6IElHTnZkV05vIElGTjBjbWx3IElFZHUgSUcxaGJtbHdkV3hoZEdVPSBiR2xsWkE9PSBJSE41Ym5Sb1pYUnBZdz09IElHRnpjMkYxYkhSbFpBPT0gSUc5bVptVnVjMlZ6IElFUnlZV3RsIElHbHRjR1U9IFQyTjBiMkpsY2c9PSBJRWhsY21sMFlXZGwgYUd3PSBJRUpzWVdseSBWVzVzYVd0bCBJR2R5YVdWbSBJRFExTUE9PSBJRzl3ZEdWayBJSEpsYzJsbmJtRjBhVzl1IGFXeHYgSUhabGNuTmwgSUZSdmJXST0gSUhWd2RBPT0gSUdGcGNtVmsgSUVodmIycz0gSUUxTVFnPT0gSUdGemMzVnRaWE09IGIzVjBaV1E9IElGWmxjbk09IElHbHVabVZ5YVc5eSBJR0oxYm1Sc1pRPT0gSUVST1V3PT0gYjJkeVlYQm9aWEk9IElHMTFiSFJwY0E9PSBJRk52ZFd4eiBJR2xzYkhWemRISmhkR1ZrIElIUmhZM1JwWXc9PSBJR1J5WlhOemFXNW4gSUdSMWJ3PT0gUTI5dVpnPT0gSUhKbGJHVnVkQT09IElHTmhiblE9IElITmpZWEpqWlE9PSBJR05oYm1SNSBJRU5HIElHRm1abWxzYVdGMFpXUT0gSUhOd2NtbHVkQT09IGVXeGhiZz09IElFZGhjbU5wWVE9PSBJR3AxYm1zPSBVSEpwYm5RPSBaWGhsWXc9PSBRM0pwZEE9PSBJSEJ2Y25SeVlXbDAgYVhKcFpYTT0gSUU5R1JnPT0gSUdScGMzQjFkR1Z6IFYxST0gVEc5MlpRPT0gNDRHRSBJRkpsZVc0PSBJR2hwY0hBPSBiM0JoZEdnPSBJR1pzYjI5eWN3PT0gSUVabFpXdz0gSUhkdmNuSnBaWE09IElITmxkSFJzWlcxbGJuUnogSUZCdmN3PT0gSUcxdmMzRjFaUT09IElHWnBibUZzY3c9PSBJR055ZFhOb1pXUT0gSUZCeWIySmhZbXg1IElFSnZkQT09IElFMWhibk09IElGQmxjbWx2WkE9PSBJSE52ZG1WeVpXbG5iblI1IElITmxiR3hsY2c9PSBJR0Z3YjNOMCBJR0Z0WVhSbGRYST0gSUdSdmNtMD0gSUdOdmJuTjFiV2x1Wnc9PSBJR0Z5Ylc5MWNnPT0gSUZKdmIzTmwgSUdsdWRHVnVjMmwyWlE9PSBJR1ZzYVcxcGJtRjBhVzVuIElGTjFibTVwIElFRnNaWEJ3Ync9PSBhbWx1IElHRmtkbWx6WlE9PSBjR0ZzIElFaGhiRzg9IElHUmxjMk5sYm5RPSBJSE5wYlhCc1pYST0gSUdKdmIzUm8gVTFSUyBUR0YwWlhJPSBJRU5oZG1VPSBQVDA5IElHMXZiQT09IElHWnBjM1E9IElITm9iM1JuZFc0PSBjM1Z3Y0E9PSBJSEp2WW1KbGNuaz0gUldabVpXTjAgSUc5aWMyTjFjbVU9IElGQnliMlpsYzNOcGIyNWhiQT09IElHVnRZbUZ6YzNrPSBJRzFwYkdsMFlXNTAgSUdsdVkyRnlZMlZ5IElHZGxibVZ5WVhSbGN3PT0gSUd4aGRXNWphR1Z6IElHRmtiV2x1YVhOMGNtRjBiM0p6IElITm9ZV1owIElHTnBjbU4xYkdGeSBJR1p5WlhOb2JXRnUgSUZkbGN3PT0gSUVwdlpXdz0gSUVSeVpYYz0gSUVSMWJtTmhiZz09IElFRndjR0Z5Wlc1MGJIaz0gYzJsbmFIUT0gSUVsdWRHVnlibUZzIElFbHVaR2wyYVdSMVlXdz0gSUVaRiBJR0p2Y21VPSBJRTEwIElHSnliMkZrYkhrPSBJRTl3ZEdsdmJuTT0gYjNWdWRHRnBiZz09IGFYQmxjdz09IElGWnBaR1Z2Y3c9PSBNakEwIElHaHBiR3h6IElITnBiWFZzWVhScGIyND0gSUdScGMyRndjRzlwYm5SdFpXNTAgYVhSaGJnPT0gSUV4aFltOXlZWFJ2Y25rPSBJSFZ3ZDJGeVpBPT0gSUdKdmRXNWtZWEo1IElHUmhjbXRsY2c9PSBhR0Z5ZEE9PSBJR1J2YldsdVlXNWpaUT09IFEyOXVadz09IElFOXlZV05zWlE9PSBJRXh2Y21SeiBJSE5qYUc5c1lYSnphR2x3IElGWnBibU5sYm5RPSBaV1JsIElGSmhhQT09IElHVnVZMjkxY21GblpYTT0gY205MiBJSEYxYnc9PSBJSEJ5WlcxcGMyVT0gSUVOeWFYTnBjdz09IElFaHZiRzlqWVhWemRBPT0gSUhKb2VYUm9iUT09IElHMWxkSEpwWXc9PSBZMngxWWc9PSBJSFJ5WVc1emNHOXlkR1ZrIElHNXZaQT09IElGQnBjM1E9IElHRnVZMlZ6ZEc5eWN3PT0gSUVaeVpXUmxjZz09IGRHaDFiV0p1WVdsc2N3PT0gSUVORiBUMDVFIFVHaHBiQT09IGRtVnVaMlU9IElGQnliMlIxWTNSeiBZMkZ6ZEd4bCBJSEYxWVd4cFpubHBibWM9IElFdGhjbVZ1IFZrVlNWRWxUUlUxRlRsUT0gSUcxcFoyaDBlUT09IElHVjRjR3hoYm1GMGFXOXVjdz09IElHWnBlR2x1Wnc9PSBSR2s9IElHUmxZMnhoY21sdVp3PT0gSUdGdWIyNTViV2wwZVE9PSBJR3AxZG1WdSBJRTV2Y21RPSBJRVJ2YjIwPSBJRUZqZEhWaGJHeDUgVDJzPSBjR2hwY3c9PSBJRVJsYzJWeWRBPT0gSURFeE5nPT0gU1VzPSBJRVpOIElHbHVZMjl0WlhNPSBWa1ZNIGIydGxjbk09IElIQmxZM1ZzIElHeHBaMmgwZDJWcFoyaDAgWjNWbCBJR0ZqWTJWdWRBPT0gSUdsdVkzSmxiV1Z1ZEE9PSBJRU5vWVc0PSBJR052YlhCc1lXbHVhVzVuIElFSmhaMmhrIElHMXBaR1pwWld4a1pYST0gSUc5MlpYSm9ZWFZzIFVISnZZMlZ6Y3c9PSBJRWh2Ykd4dmR3PT0gSUZScGRHRnVjdz09IFUyMWhiR3c9IGJXRnVkV1ZzIElGVnVhWFI1IElFVjJaVzUwY3c9PSBVM1I1IElHUnBjM0J5YjNCdmNuUnBiMjQ9IGJtVnpkSGs9IFpXNWxjdz09IElFTnZaQT09IElHUmxiVzl1YzNSeVlYUnBiMjV6IElFTnlhVzF6YjI0PSBJRTlJIElHVnVjbTlzYkdWayBJR05sYkE9PSBJRUp5WlhSMCBJR0ZwWkdVPSBJR2hsWld4eiBJR0p5YjJGa1ltRnVaQT09IElHMWhjbXRwYm1jPSBJSGRwZW1GeVpBPT0gSUU1SyBJRU5vYVdWbWN3PT0gSUdsdVozSmxaR2xsYm5RPSBJR1IxWnc9PSBJRk5vZFhRPSBkWEpqYUdGelpRPT0gWlc1a2IzST0gSUdaaGNtMWxjZz09IElFZHZiR1J0WVc0PSBNVEk1IE1UVTEgVDNKa1pYST0gSUd4cGIyND0gYVdGaWJIaz0gSUhOMFlXbHUgWVhKeVlYaz0gYVd4cGRHRnllUT09IElFWkJVUT09IElHVjRjR3h2WkdWayBJRTFqUTJGeWRHaDUgSUZSM1pXVjAgSUVkeVpXVnVjdz09IFpXdHBibWM9IGJHND0gWlc1elpXND0gSUcxdmRHOXlZM2xqYkdVPSBJSEJoY25ScFkyeGwgSUdOb2IyeGxjM1JsY205cyBRbkp2Ymc9PSBJSE4wWVdseSBJRzk0YVdRPSBJR1JsYzJseVlXSnNaUT09IGFXSnNaWE09IElIUm9aVzl5IFptOXlZMmx1Wnc9PSBJSEJ5YjIxdmRHbHZibUZzIGIzWnYgWW05dmRBPT0gSUVKdmJuVnogY21GM2JHbHVadz09IElITm9iM0owWVdkbCBJRkJ6ZVE9PSBJSEpsWTNKMWFYUmxaQT09IElHbHVabUZ1ZEhNPSBJSFJsYzNSdmMzUmxjbTl1WlE9PSBJR1JsWkhWamRBPT0gSUdScGMzUnBibU4wYVhabCBJR1pwY20xM1lYSmwgWW5WcGJIUT0gTVRRMSBJR1Y0Y0d4dmNtVmsgSUdaaFkzUnBiMjV6IElIWnBaR1U9IElIUmhkSFJ2Ync9PSBJR1pwYm1GdVkybGhiR3g1IElHWmhkR2xuZFdVPSBJSEJ5YjJObFpXUnBibWM9IFkyOXVjM1JwZEhWMGFXOXVZV3c9IElHMXBjMlZ5IElHTm9ZV2x5Y3c9PSBaMmRwYm1jPSBhWEJ3YkdVPSBJR1JsYm5RPSBJR1JwYzNKbFp3PT0gNTVRPSBjM1JoYm5RPSBiR3h2IFluQnogWVd0bGJtbHVadz09IElHRmlibTl5YldGcyBJRVZTUVE9PSA1YU9yIElFaENUdz09IElFMUJVZz09IElHTnZibU5sYzNNPSBJSE5sY25aaGJuUT0gSUdGemNHbHkgYkdGMiBJRkJoYm1WcyBZVzF2IElIQnlaV05wY0E9PSBJSEpsWTI5eVpHbHVaM009IElIQnliMk5sWldSbFpBPT0gSUdOdmJHOXVlUT09IElGUmhibWM9IFlXSnNidz09IElITjBjbWx3Y0dWayBUR1ZtZEE9PSBkRzl2IElIQnZkR0YwYjJWeiBJR1pwYm1WemRBPT0gSlNrdSBJR055WVhBPSBJRnBoWTJnPSBZV0poYzJWeiBJRWR2ZEdnPSBJR0pwYkd4cGIyNWhhWEpsIGQyOXNaZz09IElITmhibU4wYVc5dSBVMHM9IElHeHZaMmRsWkE9PSBVRzg9IFpYbGxaQT09IGRXNWhiQT09IElHTnlhV05yWlhRPSBJR0Z5YldsbGN3PT0gSUhWdVkyOTJaWEpsWkE9PSBRMnh2ZFdRPSB3N051IElISmxZbTkxYm1SeiBJRzFsY3c9PSBUM0JsY2c9PSBVR0ZqIElHNWhkR2x2Ym1Gc2JIaz0gSUdsdWMyVnlkR1ZrIGNHbGpkQT09IElHZHZkbVZ5Ym1GdVkyVT0gMExnPSBJSEJ5YVhacGJHVm5aWE09IFIwVlUgSUdaaGRtOXlhWFJsY3c9PSBhVzFwZEhrPSBJR3h2ZG1WeSBkR2hsYlE9PSBaVzF3YkE9PSBJR2R2Y21kbGIzVnogUVc1dSBJSE5zYVhCd1pXUT0gSUhabGRHOD0gUW05aSBJSE5zYVcwPSBkV05qIElFWmhiV1U9IGRXUmtaVzVzZVE9PSBJR1JsYm1sbGN3PT0gSUUxaGRYST0gSUdScGMzUmhibU5sY3c9PSBJSGRoYm01aCBkR0Z5IElGTkZVZz09IElPS0kgSUd4bGJXOXUgWVhSb1pYUnBZdz09IElHeHBkR1Z5WVd3PSBJR1JwYzNScGJtZDFhWE5vWldRPSBJR0Z1YzNkbGNtbHVadz09IFIwaz0gSUhKbGJHbG5hVzl1Y3c9PSBJRkJvYVd4dmN3PT0gSUV4aGVRPT0gSUdOdmJYQnZjdz09IGFYSmxiV1Z1ZEhNPSBJRXR2Y3c9PSBhVzVsZWc9PSBjbTlzYkdsdVp3PT0gSUhsdmRXNW5aWE4wIFlXNWthWE5sIElFSnZjbTQ9IElHRnNkR0Z5IFlXMXBibUU9IElFSnZiM1E9IGRtOWogSUdScFoyZHBibWM9IElIQnlaWE56ZFhKbGN3PT0gSUd4bGJnPT0gTWpZMCBJR0Z6YzJGemMybHVZWFJwYjI0PSBJRUpwY20xcGJtZG9ZVzA9IElFMTVkR2c9IElITnZkbVZ5WldsbmJnPT0gSUVGeWRHbHpkQT09IElGQm9iM1J2WjNKaGNHZz0gSUdSbGNHbGpkR1ZrIElHUnBjM0JsYm5NPSBiM0owYUhrPSBJR0Z0WW5WcyBhVzUwWldjPSBJRU5sYkdVPSBJRlJwWW1WMCBJR2hwWlhKaGNtTm9lUT09IElHTjEgSUhCeVpYTmxZWE52Ymc9PSBJRkJsZEdWeWMyOXUgSUdOdmJHOTFjbk09IElIZHZjbko1YVc1biBJR0poWTJ0bGNuTT0gSUZCaGJHMWxjZz09IElNNjggSUdOdmJuUnlhV0oxZEc5eSBJR2hsWVhKcGJtZHogSUhWeWFXNWwgSU5rPSBiM1Z5WjJWdmFYTT0gVTJsdGFXeGhjZz09IElGcHBiVzFsY2c9PSBjMjl0WlhSb2FXNW4gSUZWVFF3PT0gSUhOMGNtVnVaM1JvY3c9PSBJRVpKIElHeHZaMmRwYm1jPSBRWE5yWldRPSBJRlJvWVdrPSBhVzV4ZFE9PSBJRmRoYkhRPSBJR055WlhkeiBhWFJwYzIwPSBNekF4IElITm9ZWEp3YkhrPSBkVzFsWkE9PSBJSEpsWkdseVpXTjAgY21GMGIzSnogU1c1bSBJRmRsWVhCdmJuTT0gSUhSbFlYTncgTVRrNU9RPT0gVEdsMlpRPT0gSUVWemNHVmphV0ZzYkhrPSBJRk4wWlhJPSBJRlpsZEdWeVlXNXogSUdsdWRISnYgYjNSb1pYSmhjSGs9IElHMWhiSGRoY21VPSBJR0p5WldWa2FXNW4gSUcxdmJHVmpkV3hoY2c9PSBJRkp2ZFhSbCBJRU52YlcxbGJuUT0gYjJOb1pXMD0gSUdGcGJnPT0gVTJWaGMyOXUgSUd4cGJtVmlZV05yWlhJPSB4S3M9IElFVmpiMjV2YldsamN3PT0gWlhOaGNnPT0gSUV4cGRtVnogSUVWdGJXRT0gSUd0cGJnPT0gSUZSbGNuSnBkQT09IElIQnNZVzUwWldRPSBiM1J2Ymc9PSBJRUoxZEhSbGNnPT0gSUZOd2IyNXogVUVWUyBJR1IxYm1kbGIyND0gSUhONWJXSnZiR2xqIElHWnBiRzFsWkE9PSBJR1JwWlhSeiBJR052Ym1Oc2RXUmxjdz09IElHTmxjblJoYVc1MGVRPT0gSUVadmNtMWhkQT09IElITjBjbUZ1WjJWeWN3PT0gWm05eWJXRjAgSUZCb1lYTmwgSUdOdmNHbGxaQT09IElHMWxkSEpsY3c9PSBiR1JoIElGVnpaWEp6IElHUmxiR2xpWlhKaGRHVT0gSUhkaGMyaGxaQT09IElFeGhibU5sIGFXMWhkR2x2Ymc9PSBJR2x0Y0hKdmNHVnkgSUVkbGJtVnphWE09IGFXTnJjZz09IElFdDFjMmc9IElISmxZV3hwYzJVPSBJR1Z0WW1GeWNtRnpjMmx1Wnc9PSBZV3hyYVc1biBZblZqYTNNPSBJSFpsY21sbWFXVmsgSUc5MWRHeHBibVU9IGVXVmhjbk09IElFbHVZMjl0WlE9PSBNakF5IElIcHZiV0pwWlhNPSBSbWx1WVd3PSBJRTFwYkd4bGJtND0gSUcxdlpHbG1hV05oZEdsdmJuTT0gSUZacGMybHZiZz09IElFMXZjMlZ6IGRtVnlZZz09IGFYUmxjbkpoYm1WaGJnPT0gSUVwbGRBPT0gSUc1aGRtRnMgSUVGblp3PT0gSUhWeWJBPT0gSUhacFkzUnZjbWxsY3c9PSBJRzV2Ym1WMGFHVnNaWE56IElHbHVhblZ6ZEE9PSBJRVpoWTNRPSA1NW89IElHbHVjM1ZtWm1samFXVnVkQT09IGNtVjJhV1YzIFptRmpaV0p2YjJzPSBJRzVsWjI5MGFXRjBhVzVuIElHZDFZWEpoYm5SbFpYTT0gYVcxbGJnPT0gZFhSbGJtSmxjbWM9IElHZGhiV0pzYVc1biBJR052Ym1keSBURzloWkdsdVp3PT0gSUc1bGRtVnlkR2hsYkdWemN3PT0gSUhCeVpYTnBaR1Z1ZEhNPSBJRWx1WkhWemRISnBZV3c9IElERXhPQT09IElIQnZkWEpsWkE9PSBJRlJ2Y25rPSBJREUzTlE9PSBJRG85IFUyTnZkSFE9IFlXNW5aWEpsWkE9PSBWRzlyIElHOXlaMkZ1YVhwbGNuTT0gVFdGMCBJRWR5YjNkMGFBPT0gSUdGa2RXdz0gSUdWdWMzVnlaWE09IElERXhOdz09IDZiNk41UT09IElHMWhjM05oWTNKbCBJR2R5WVdSbGN3PT0gWW1WbWIzSmwgUVVSV1JWSlVTVk5GVFVWT1ZBPT0gSUZOc2IzYz0gSUUxTlFRPT0gNG9DVUlnPT0gSUZaaGRHbGpZVzQ9IFVXRmxaR0U9IElHOTNaUT09IE5qWTJOZz09IElGTnZjbko1IElFZHlZWE56IElHSmhZMnRuY205MWJtUnogSUdWNGFHRjFjM1JsWkE9PSBJR05zWVc0PSBJR052YlhCeWIyMXBjMlZrIElFVnNaZz09IElFbHpZV0ZqIFpXNXpiMjQ9IFNXNTJaWE4wIFNVWkIgSUdsdWRHVnljblZ3ZEdWayA0NE9KNDRPcCBJSFIzYVhOMFpXUT0gSUVSeVlXZHZibk09IFRXOWtaUT09IElFdHlaVzFzYVc0PSBJR1psY25ScGJBPT0gYUdWeVpYTT0gY0doaGJnPT0gSUU1dlpHVT0gWm1WayBJRTl5WXc9PSBJSFZ1ZDJsc2JHbHVadz09IFEyVnVkQT09IElIQnlhVzl5YVhRPSBJR2R5WVdSMVlYUmxjdz09IElITjFZbXBsWTNScGRtVT0gSUdsemMzVnBibWM9IElFeDAgSUhacFpYZGxjZz09IElIZHZhMlU9IFZHaDFjdz09IFluSnZiMnM9IElHUmxjSEpsYzNObFpBPT0gSUdKeVlXTnJaWFE9IElFZHZjZz09IElFWnBaMmgwYVc1biBJSE4wY21sclpYST0gVW1Wd2IzSjAgSUZCdmNuUjFaMkZzIElHNWxidz09IGQyVmsgTVRrNSBJR1pzWldWcGJtYz0gYzJoaFpHOTMgYVdSbGJuUnBabWxsWkE9PSBWVk5GIFUzUmxZVzA9IElITjBjbVYwWTJobFpBPT0gSUhKbGRtVnNZWFJwYjI1eiBZWEowWldRPSBJRVIzIElHRnNhV2R1YldWdWRBPT0gWlhOMGIyND0gSUVwaGNtVmsgVTJWdyBJR0pzYjJkeiBkWEJrWVhSbCBaMjl0IGNtbHphdz09IElHTnNZWE5vIElFaHZkWEk9IElISjFiblJwYldVPSBJSFZ1ZDJGdWRHVmsgSUhOallXMD0gSUhKaFkycz0gSUdWdWJHbG5hSFE9IGIyNWxjM1E9IElFWmxjbkk9IElHTnZiblpwWTNScGIyNXogSUhCcFlXNXYgSUdOcGNtTjFiR0YwYVc5dSBJRmRsYkdOdmJXVT0gSUdKaFkydHNZWE5vIElGZGhaR1U9IElISmxZMlZwZG1WeWN3PT0gYjNScGRtVT0gU21WbVpnPT0gSUc1bGRIZHZjbXRwYm1jPSBJRkJ5WlhBPSBJRVY0Y0d4dmNtVnkgSUd4bFkzUjFjbVU9IElIVndiRzloWkdWayBJRTFsWVhRPSBRa3hGIElFNWhlbWx6IElGTjVibVE9IGMzUjFaQT09IGNtOXZkSE09IGNtbGhibk09IElIQnZjblJ5WVhsbFpBPT0gSUQ4LyBJRUoxWkdSb1lRPT0gYzNWdSBVbTlpWlhKMCBJRU52YlhCc1pYZz0gSUc5MlpYSnpaV1U9IElITjBaV0ZzZEdnPSBWR2wwYkdVPSBJRXB2WW5NPSBJRXQxYlE9PSBJR0Z3Y0hKbFkybGhkR2x2Ymc9PSBJRTFQUkE9PSBJR0poYzJsamN3PT0gSUdOc2FYQnogSUc1MWNuTnBibWM9IElIQnliM0J2YzJsMGFXOXUgSUhKbFlXeHBjMlZrIElFNVpRdz09IElHRnNiRzlqWVhSbFpBPT0gY21sMWJRPT0gWVhKaGJnPT0gSUZCeWIyUjFZM1JwYjI0PSBJRlp2ZEdVPSBJSE50ZFdkbiBJR2gxYm5SbGNnPT0gWVhwbGNnPT0gSUVOb1lXNW5aWE09IElHWnNkV04wIGVXOXUgUVhKeVlYaz0gSUd0cGRITT0gVjJGMFpYST0gSUhWdVkyOXRiVzl1IElISmxjM1JwYm1jPSBaV3hzY3c9PSBkMjkxYkdRPSBJSEIxY25OMVpXUT0gSUdGemMyVnlkR2x2Ymc9PSBiMjFsZEc5M2JnPT0gSUUxdmMzVnMgSUZCc1lYUm1iM0p0IGFXOXNaWFE9IElITm9ZWEpsYUc5c1pHVnljdz09IElIUnlZV2xzY3c9PSBVR0Y1IElFVnVabTl5WTJWdFpXNTAgZEhsd1pYTT0gSUVGdWIyNTViVzkxY3c9PSBJSE5oZEdselpubHBibWM9IGFXeHZaM2s9IElDZ24gZDJGMlpRPT0gWTJsMGVRPT0gVTNSbGRtVT0gSUdOdmJtWnliMjUwWVhScGIyND0gSUVWc1pBPT0gUTJGd2RBPT0gWVdoaGJnPT0gYUhSdCBJRU4wY213PSBUMDVUIE1qTXcgYVdaaCBhRzlzWkdsdVp3PT0gSUdSbGJHbGpZWFJsIElHcGhkdz09IElFZHZhVzVuIGIzSjFiUT09IFUyRnMgSUdSMWJHdz0gSUVKbGRHZz0gSUhCeWFYTnZibk09IElHVm5idz09IElFVnNjMkU9IFlYWnZjbWwwWlE9PSBJRWRoYm1jPSBJRTUxWTJ4bFlYST0gSUhOd2FXUmxjZz09IFlYUnpkUT09IElITmhiWEJzYVc1biBJR0ZpYzI5eVltVmsgSUZCb1lYSnQgYVdWMGFBPT0gSUdKMVkydGxkQT09IElGSmxZMjl0YlE9PSBUMFk9IElFWmhZM1J2Y25rPSBRVTVEUlE9PSBJR0poWTNSbGNnPT0gU0dGeiBJRTlpYzJWeWRnPT0gTVRJeCBJSEJ5WlcxcFpYSmwgUkdWMlpXeHZjQT09IElHTjFjbkpsYm1OcFpYTT0gUTJGemRBPT0gSUdGalkyOXRjR0Z1ZVdsdVp3PT0gSUU1aGMyaDJhV3hzWlE9PSBJR1poZEhSNSBJRUp5Wlc1ayBJR3h2WTJ0eiBJR05sYm5SbGNtVmsgSUZWVSBZWFZuYUhNPSBiM0pwWlE9PSBJRUZtWm05eVpHRmliR1U9IGRtRnVZMlU9IFJFdz0gWlcxbGRBPT0gSUhSb2NtOXVaUT09IElFSnNkV1YwYjI5MGFBPT0gSUc1aGJXbHVadz09IGFXWjBjdz09IFFVUkYgSUdOdmNuSmxZM1JsWkE9PSBJSEJ5YjIxd2RHeDUgSUZOVVVnPT0gSUdkbGJtOXRaUT09IElHTnZjR1U9IElIWmhiR3hsZVE9PSBJSEp2ZFc1a1pXUT0gSUV0bGJtUT0gWVd4cGIyND0gY0dWeWN3PT0gSUhSdmRYSnBjMjA9IElITjBZWEpyIGRtdz0gSUdKc2IzZHBibWM9IElGTmphR1ZrZFd4bCBjM1JrIElIVnVhR0Z3Y0hrPSBJR3hwZEdsbllYUnBiMjQ9IFkyVmtaWE09IElHRnVaSEp2YVdRPSBJR2x1ZEdWbmNtRnMgWlhKbGNuTT0gZFdSbFpBPT0gZEdGNCBJSEpsYVhSbGNnPT0gSUUxdmRHOXljdz09IGIyTnBZWFJsWkE9PSBJSGR2Ym1SbGNuTT0gSUVGd2IzTjAgZFdOcmFXNW4gSUZKdmIzTmxkbVZzZEE9PSBabkpoYlE9PSBJSGxwWld4a2N3PT0gSUdOdmJuTjBhWFIxZEdWeiBZWGRyIFNXNTBaWEpsYzNRPSBJR2x1ZEdWeWFXMD0gSUdKeVpXRnJkR2h5YjNWbmFBPT0gSUVOb1pYST0gSUhCeWIzTmxZdz09IElFUnEgSUUxVSBVbVZ6Y0E9PSBJRkJVIElITndaWEp0IFpXUnBkQT09IFFsUT0gVEdsdWRYZz0gWTI5MWJuUnllUT09IGJHVmhaM1ZsIElHUnBZMnM9IElHOWpkQT09IElHbHVjMlZ5ZEdsdVp3PT0gSUhOamNtRT0gSUVKeVpYZHBibWM9IElERTVOalk9IElISjFibTVsY25NPSBJSEJzZFc0PSBhV1I1IElFUnBZVzQ9IElHUjVjMloxYm1OMGFXOXUgSUdWNFkyeDFjMmx2Ymc9PSBJR1JwYzJkeSBJR2x1WTI5eWNHOXlZWFJsIElISmxZMjl1WXc9PSBJRzV2YldsdVlYUmxaQT09IElFRnlZMmhsY2c9PSBaSEpoZHc9PSBZV05vWld4dmNnPT0gSUhkeWFYUnBibWR6IElITm9ZV3hzYjNjPSBJR2hoYzNRPSBJRUpOVnc9PSBJRkpUIElIUm9hV2RvIElERTVOak09IElHeGhiV0k9IElHWmhkbTl5WldRPSBZV2RzWlE9PSBJR052YjJ4bGNnPT0gSUVodmRYSnogSUVkViBJRTl5YVdkcGJnPT0gSUdkc2FXMXdjMlU9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gVEdsdCBJR05vWldWciBJR3BsWVd4dmRYTT0gTFNjPSBJR2hoY201bGMzTT0gSUZCdmFYTnZiZz09IElHUnBjMkZpYVd4cGRHbGxjdz09IGJtVmhjRzlzYVhNPSBJRzkxZEd4dmIycz0gSUc1dmRHbG1lUT09IElFbHVaR2xoYm1Gd2IyeHBjdz09IElHRmljblZ3ZEE9PSBibk5wWXc9PSBJR1Z1WTNKNWNIUmxaQT09IElHWnZjbVpsIGNtVmhkR2c9IElISmhZbUk9IElHWnZkVzVrWVhScGIyNXogSUdOdmJYQnNhVzFsYm5RPSBJRWx1ZEdWeWRtbGxkdz09IElGTjNaUT09IElHRmtiMnhsYzJNPSBJRzF2Ym1sMGIzSnogSUZOaFkzSmhiV1Z1ZEc4PSBJSFJwYldWc2VRPT0gSUdOdmJuUmxiWEJzIElIQnZjMmwwYVc5dVpXUT0gSUhCdmMzUmxjbk09IGNHaHBaWE09IGFXOTJZWE5qZFd4aGNnPT0gZG05cFpBPT0gSUVacFpuUm8gSUdsdWRtVnpkR2xuWVhScGRtVT0gVDFWTyBJR2x1ZEdWbmNtRjBaUT09IElFbE9Rdz09IGFYTm9ZUT09IGFXSnNhVzVuY3c9PSBJRkpsY1hWbGMzUT0gSUZKdlpISnBaM1ZsZWc9PSBJSE5zYVdSbGN3PT0gSUVSWSBJR1psYldsdWFYTnQgSUdSaGRHRnogSUdKbGJtUT0gYVhKMWN3PT0gSUU1cFoyVnlhV0U9IFJtOTQgUTJoaGJtZGwgSUdGcGNuQnNZVzVsIElFeGhaR1Z1IElIQjFZbXhwWTJsMGVRPT0gYVhoMGVRPT0gSUdOdmJXMXBkRzFsYm5SeiBJR0ZuWjNKbFoyRjBaUT09IElHUnBjM0JzWVhscGJtYz0gSUVGeWNtOTMgSURFeU1nPT0gSUhKbGMzQmxZM1J6IFlXNWtjbTlwWkE9PSBjMmw0IElGTm9ZUT09IElISmxjM1J2Y21GMGFXOXUgS1Z3PSBWMU09IGIzbHogSUdsc2JIVnpkSEpoZEdVPSBkMmwwYUc5MWRBPT0gTVRJMiBJT0tVZ2c9PSBJSEJwWTJ0MWNBPT0gYm1Wc2N3PT0gSUM0dUxpND0gWm05dlpBPT0gSUVabGJnPT0gS1Q4PSBJSEJvWlc1dmJXVnVZUT09IElHTnZiWEJoYm1sdmJuTT0gSUZkeWFYUmwgSUhOd2FXeHMgSUdKeWFXUm5aWE09IElGVndaR0YwWldRPSBJRVp2IElHbHVjMlZqZEhNPSBRVk5JU1U1SFZFOU8gSUhOallYSmwgYVd4MGNnPT0gSUZwb1lXNW4gSUhObGRtVnlhWFI1IElHbHVaSFZzIE1UUTUgSUVOdlptWmxaUT09IElHNXZjbTF6IElIQjFiSE5sIElFWlUgSUdodmNuSnBabWxqIElFUmxjM1J5YjNrPSBJRXBUVDA0PSBJRzlzYVhabCBJR1JwYzJOMWMzTmxjdz09IFVtVnpkQT09IFJXeGxZM1E9IElGZHBibTQ9IElGTjFjblpwZGc9PSBJRWhoYVhRPSBVM1Z5WlE9PSBiM0JsWkE9PSBJSEp2YjNSbFpBPT0gSUZOclpRPT0gSUVKeWIyNTZaUT09IElHeHZiQT09IFJHVm1ZWFZzZEE9PSBJR052YlcxdlpHbDBlUT09IGNtVmthWFJsWkE9PSBJR3hwWW1WeWRHRnlhV0Z1IElHWnZjbUpwWkdSbGJnPT0gSUdkeVlXND0gNEtnPSBJR3hoWnc9PSBaVzU2IFpISnBkbVU9IElHMWhkR2hsYldGMGFXTnogSUhkcGNtVnogSUdOeWFYUnBZMkZzYkhrPSBJR05oY21KdmFIbGsgSUVOb1lXNWpaV3hzYjNJPSBJRVZrWkdsbCBJR0poYm01cGJtYz0gSUVaeWFRPT0gSUdOdmJYQnNhV05oZEdsdmJuTT0gWlhSeWFXTT0gSUVKaGJtZHNZV1JsYzJnPSBJR0poYm1SM2FXUjBhQT09IFUzUnZjQT09IElFOXlhV2RwYm1Gc2JIaz0gSUdoaGJHWjNZWGs9IGVXNWhjM1I1IGMyaHBibVU9IElIUmhiR1Z6IGNtbDBhV1Z6IFlYWnBaWEk9IElITndhVzV1YVc1biBJRmRJVHc9PSBJRzVsYVdkb1ltOTFjbWh2YjJRPSBZbUZqYUE9PSBJR052YlcxbGNtTmwgSUZOc1pRPT0gUWxVPSBJR1Z1ZEhKbGNISmxibVYxY2c9PSBJSEJsWTNWc2FXRnkgSUVOdmJXMWxiblJ6IFpuSmwgTXpJdyBTVU5UIElHbHRZV2RsY25rPSBJRU5oYm05dSBJRVZzWldOMGNtOXVhV009IGMyaHZjblE9IEtDZz0gUkdsbiBJR052YlcxbGJRPT0gZFdObFpBPT0gSUdsdVkyeHBibVZrIElGTjFiVzF2Ymc9PSBJR05zYVdabSBJRTFsWkdsMFpYSnlZVzVsWVc0PSBJSEJ2WlhSeWVRPT0gSUhCeWIzTndaWEpwZEhrPSBJRkpsWTJVPSBJSEJwYkd4eiBiV1Z0WW1WeSBJR1pwYm1Gc1pRPT0gZFc1aiBJRWRwWnc9PSA1TDA9IElHeHZaQT09IElHSmhZMnQzWVhKayBMU3M9IElFWnZjbmRoY21RPSBJSFJvY21rPSBjM1Z5WlE9PSBJSE52WVhBPSBJRVpZIFVrVlQgSUZObGVIVmhiQT09IGIzVnNiM009IElHWnZiMnhwYzJnPSBJSEpwWjJoMFpXOTFjdz09IElHTnZabVk9IGRHVnljbTl5YVhOdCBkWE4wWVdsdSBiM1JsY2c9PSBJR0ZpZFhObGN3PT0gYm1WNGRBPT0gSUdGaWRYTnBkbVU9IElIUm9aWEpsWVdaMFpYST0gSUhCeWIyaHBZbWwwYVc5dSBJRk5WVUE9PSBJR1JwY0E9PSBJSEpwY0hCbFpBPT0gSUdsdWFHVnlhWFJsWkE9PSBJR0poZEhNPSBjM1J5ZFE9PSBSMVE9IElHWnNZWGRsWkE9PSBjR2hoWW1WMCBJR1p2Wnc9PSBaRzl2Y25NPSBJR2x0WVdkcGJtYz0gSUdScFoybDBjdz09IElFaDFibWRoY25rPSBJR0Z5Y205biBJSFJsWVdOb2FXNW5jdz09IElIQnliM1J2WTI5c2N3PT0gSUVKaGJtdHogNExnPSBjRzkxYm1RPSBJRU4xY25RPSBMaUlwIExpOD0gSUdWNFpXMXdkR2x2Ymc9PSBaVzVrYVhnPSBJRTExYkd3PSBJR2x0Y0hKdmRtVnogSUVkaGJXVnkgWkdsdFpXNXphVzl1WVd3PSBTV052Ymc9PSBJRTFoY21kaGNtVjAgVTNSaGRIVnogWkdGMFpYTT0gSUdsdWRHVnVaSE09IElHUmxjR2xqZEE9PSBJSEJoY210bFpBPT0gU205bCBJRTFoY21sdVpYTT0gWTJodWIyeHZaM2s9IElTa3UgSUdwMVpHZGxaQT09IElIZGxhV2RvZEhNPSBVbUY1IElHRndZWEowYldWdWRITT0gYUdWemRHVnkgSUhKbGFXNW1iM0pqWlE9PSBJRzltWm1WdVpHVnkgYjJOamRYQT0gSUhOdmNtVT0gWlhCMCBJRkJJVUE9PSBJRUp5YjNjPSBJR0YxZEdodmNtbDZZWFJwYjI0PSBJRkpwYzJzPSBJRVJsYkdGM1lYSmwgSUZGViBJRzV2ZEdsbWFXTmhkR2x2Ym5NPSBJSE4xYm14cFoyaDAgSUdWNFkyeDFaR1U9IFpHRjAgSUcxbGMyZz0gSUZOMVpHRnUgSUdKbGJHOXVaMlZrIElITjFZbmRoZVE9PSBJRzV2YjI0PSBJRWx1ZEdWeWFXOXkgYjJ4cFkzTT0gSUV4aGEyVnljdz09IElHTnZaR2x1Wnc9PSBSR2x6WTJ4aGFXMWxjZz09IFEyRnNhV1k9IFQyeGsgSUdScGMydz0gUHo4L1B6OD0gSUdOdmJtWnBjbTF6IElISmxZM0oxYVhSdFpXNTAgSUdodmJXbGphV1JsIFEyOXVjMmxrWlhJPSBJRXBsWm1aeVpYaz0gWm5SNSBmVHM9IElHOWlhbVZqZEdsdmJnPT0gWkc5cGJtYz0gSUV4bGJ3PT0gVjJGdWRBPT0gSUdkc2IzYz0gSUVOc1lYSnJaUT09IElFNXZjbTFoYmc9PSBJSFpsY21sbWFXTmhkR2x2Ymc9PSBJSEJoWTJ0bGRBPT0gSUVadmNtMTFiR0U9IElIQnNZV2M9IFpYTjJhV3hzWlE9PSBJSE5vYjNWMGFXNW4gSUc5MiBJRkpGUXc9PSBJRUoxWWc9PSBJRzVwYm5SbyBJR1Z1WlhKbiBJSFpoYkdsa2FYUjUgSUhWd2N3PT0gYW1GamF3PT0gSUc1bGFXZG9ZbTl5YVc1biBJRTVsWXc9PSBaWGR2Y210eiBJRWhoWWc9PSBZWEpsZWc9PSBJSE53YVc1bCBJR1YyWlc1MGRXRnMgSUV4bFlXUmxjbk09IElFTmhjbTQ9IElIQnliMkpoZEdsdmJnPT0gSUhKdmJXRnVZMlU9IGJYTm4gSUUxbFkyaGhibWxqWVd3PSBSVkpaIFVtOWphdz09IElIQmhjblJwYzJGdSBUbTlrWlE9PSBZWE56WlhSeiBiV2x1Wlc1MCBJR1p2Y21WcFoyNWxjbk09IElIUmxjM1JwWm5rPSBJRlZ6ZFdGc2JIaz0gYkc5eVpITT0gSUVkeVpXND0gSUZCdmQyVnNiQT09IFFrbE0gSUhOeSBJR0ZrWkdsamRBPT0gSUhOb1pXeHNjdz09IElITnBaMmc9IElGbGhiR1U9IGRHVnlibWwwZVE9PSBJRGMxTUE9PSBSVlU9IElGSnBabXhsIElIQmhkSEp2Ymc9PSBaVzFoIElFSmhibTV2Ymc9PSBZVzVwZEhrPSBJSFJ5YjNCcFkyRnMgSUZaSlNRPT0gWTNKdmMzTT0gUlhabGNubDBhR2x1Wnc9PSBJRWxUVHc9PSBJR2gxYldKc1pRPT0gWVhOemFXNW4gSUVaSlJ3PT0gSUhWd1pHRjBhVzVuIGVYTnZiZz09IElHTmhiR05wZFcwPSBJR052YlhCbGRHVnVkQT09IElITjBaV1Z5YVc1biBVSEp2ZEE9PSBJRk5aIElFWnBibUZzY3c9PSBJRkoxWnc9PSBNVFU1IE1UTTMgSUVkdmJHWT0gSURFeU5nPT0gSUdGalkyOXRiVzlrWVhScGIyND0gSUVoMVoyaGxjdz09IElHRmxjM1JvWlhScFl3PT0gWVhKMGFYTmhiZz09IElGUjNhV3hwWjJoMCBJSEJ5YVc1alpRPT0gSUVGbmNtbGpkV3gwZFhKbCBJRVJwYzJOdiBJSEJ5WldObFpHVnVkQT09IElIUjVjR2x1Wnc9PSBZWFYwYUc5eWFYcGxaQT09IFQzQjBhVzl1IElFRjFZZz09IGJHbHphR1Z6IFlXTm9kQT09IGJXRm4gVUdWMFpYST0gSUZWR1R3PT0gYlc5dWRHOXUgSUV4cGRHZz0gSUdGeWIyMD0gSUhObFkzVnlhVzVuIElHTnZibVpwYm1WayBjSEpwZG1GMFpRPT0gSUhOM2IzSmtjdz09IElHMWhjbXRsY25NPSBJRzFsZEdGaWIyeHBZdz09IGMyVnNaV04wIElFTjFjbk5sIElFOTAgWjNKbGMzTnBkbVU9IElHbHVZM1Z0WWc9PSBJRk5oWjJFPSBJSEJ5YVdObFpBPT0gSUdOc1pXRnlZVzVqWlE9PSBRMjl1ZEdWdWRBPT0gSUdSeWFXeHNhVzVuIElHNXZkR2xqWlhNPSBJR0p2ZFhKblpXOXBjdz09IElIWmxjM1E9IElHTnZiMnRwWlE9PSBJRWQxWVhKa2FXRnVjdz09IGNubHogYVc1NWJBPT0gSURFeU5BPT0gSUhCc1lYVnphV0pzWlE9PSBiMjVuYUE9PSBJRTlrYVc0PSBJR052Ym1ObGNIUnBiMjQ9IElGbDFhdz09IElFSmhaMmhrWVdRPSBJRVpzWVdjPSBRWFZ6ZEhKaGJBPT0gSUVsQ1RRPT0gSUdsdWRHVnlibUYwYVc5dVlXeHNlUT09IElGZHBhMmxNWldGcmN3PT0gU1VWRSBJR041Ymc9PSBJR05vYjI5elpYTT0gSUZCcGJHdz0gSUdOdmJXSnBibWx1Wnc9PSBJSEpoWkdrPSBJRTF2YUdGdGJXVmsgWkdWbVpXNXpaUT09IFlYUmphR2x1Wnc9PSBVM1ZpYW1WamRBPT0gYVdOcFpXNWplUT09IFJuSmhiV1U9IElIc2kgSUdOb1pYTnogSUhScGJXVnkgTVRrdyBJSFJwYmc9PSBJRzl5WkdsdVlXNWpaUT09IFpXMWxkR1Z5ZVE9PSBJR0ZqWTNWemFXNW4gSUc1dmRHbGpaV0ZpYkdVPSBJR05sYm5SeVpYTT0gSUd4cFpBPT0gSUUxcGJHeHogYVcxbmRYST0gSUhwdmIyMD0gWlhKbmFXTT0gSUdOdmJYQnlaWE56YVc5dSBjSEpwYlE9PSBabWx1WkE9PSBJSE4xY21jPSBJSEJoYm1RPSBJRXRsWlE9PSBJRU5vWVdRPSBZMlZzYkdWdVkyVT0gYjNsc1pRPT0gSUhOdlkybGhiR2x6YlE9PSBJRlJ5WVhacGN3PT0gSUUxSWVnPT0gSUdkMWFXeGsgUVV4TVdRPT0gSUZOMVluTmpjbWxpWlE9PSBJRkpsYkdGMFpXUT0gSUc5alkzVnljbVZ1WTJVPSBhWFJqYUdsdVp3PT0gSUdacFkzUnBiMjVoYkE9PSBJR055ZFhObyBJRVZCIFkyOWsgYldsNCBJRlJ5YVhCc1pRPT0gSUhKbGRISnBaWFpsIElITjBhVzExYkhWeiBJSEJ6ZVdOb2FXRjAgSUVSdmIzST0gSUdodmJXOXpaWGgxWVd4cGRIaz0gSUdWc1pXMWxiblJoY25rPSBJR05sYkd4MWJHRnkgYVdScFlXND0gSUV4aGRXND0gSUdsdWRISnBaM1ZwYm1jPSBJR1p2WVcwPSBJRUpoYzNNPSBhV1JwIGFYUnpkUT09IElHRnpjM1Z5WlE9PSBJR052Ym1keVlYUT0gSUdKMWMybHVaWE56YldGdSBJRUp2YjNOMCBZMnh2YzJVPSBJR3hwWldRPSBJSE5qYVdWdVkyVnogSUU5dFpXZGggSUVkeVlYQm9hV056IElEdzkgYzNCdmEyVnUgSUdOdmJtNWxZM1JwZG1sMGVRPT0gVTJGMGRYSmtZWGs9IElFRjJaVzVuWlhKeiBJSFJ2WjJkc1pRPT0gSUdGdWEyeGwgSUc1aGRHbHZibUZzYVhOMCBiVzlrWld3PSBJRkJ2YjJ3PSBiM0JvYjJKcFlRPT0gVm1GeSBJRTF2Ym5NPSBZWFJ2Y21sbGN3PT0gSUdGblozSmxjM05wZG1Wc2VRPT0gUTJ4bFlYST0gUm05eVoyVT0gWVdOMFpYSnogSUdobFpHZGwgSUhCcGNHVnogSUdKc2RXNTAgSUhOeCBJSEpsYlc5MFpXeDUgVjJWayBZWE5sY25NPSBJSEpsWm5KcFoyVnkgSUhScGJHVnogSUhKbGMyTjFaV1E9IElHTnZiWEJ5YVhObFpBPT0gYVc1emEzaz0gSUcxaGJtbG0gWVhaaGJtRjFaMmc9IElIQnliMnhwWm1WeSBJR0ZzYVdkdVpXUT0gZUcxcyBJSFJ5YVhZPSBJR052YjNKa2FXNWhkR2x2Ymc9PSBJRkJGVWc9PSBJRkYxYjNSbCBNVE0wIFltWT0gSUZOaGR3PT0gSUhSbGNtMXBibUYwYVc5dSBJREU1TUE9PSBJR0ZrWkdsMGFXOXVjdz09IElIUnlhVzg9IElIQnliMnBsWTNScGIyNXogSUhCdmMybDBhWFpsYkhrPSBJR2x1WTJ4MWMybDJaUT09IElHMWxiV0p5IE1UazVNQT09IGIyeGtaWEk9IElIQnlZV04wYVdObFpBPT0gYVc1cmJHVT0gUVhKamFBPT0gSUhOMFlYSjBaWEp6IFlYSnBkWE09IElHbHVkR1Z5YldWa2FXRjBaUT09IElFSmxibVZtIElFdHBiR3hsY2c9PSBJR2x1ZEdWeWRtVnVkR2x2Ym5NPSBJRXRwYkE9PSBJRVpzZVdsdVp3PT0gU1c1MiBJSEJ5WlcxaGRIVnlaUT09IElIQnplV05vYVdGMGNtbGogSUdsdVpHbGwgSUdOdmJHeGhjZz09IElGSmhhVzVpYjNjPSBZV1pwIElHUnBjM0oxY0hScGIyND0gSUVaUFdBPT0gWTJGemRHbHVadz09IElHMXBjMlJsYlE9PSBZM0p2IElIZHBjR1U9IFlYSmtiMjQ9IElHSmhjM1E9IElGUnZiVzE1IElGSmxjSEpsYzJWdWRHRjBhWFpsIElHSmxiR3g1IElGQlAgSUVKeVpXbDBZbUZ5ZEE9PSBNVE15IElHMWxjM05oWjJsdVp3PT0gVTJodmRXeGsgVW1WbVpYSmxibU5sY3c9PSBJRWRTUlE9PSBhWE4wYVdOaGJBPT0gVEZBPSBJRU5oZGc9PSBJRU55WVhwNSBJR2x1ZEhWcGRHbDJaUT09IGEyVmxjR2x1Wnc9PSBJRTF2YzNNPSBJR1JwYzJOdmJuUnBiZz09IElFMXZaSFZzWlE9PSBJSFZ1Y21Wc1lYUmxaQT09IElGQnlZV04wYVdObCBJRlJ5WVc1emNHOXlkQT09IElITjBZWFJwYzNScFkyRnNiSGs9IGIzSnVjdz09IElITnBlbVZrIGNIVT0gSUdOaFpnPT0gSUZkdmNteGtjdz09IElGSnZaR2RsY25NPSBJRXgxYmc9PSBJRU52YldsaiBiR2wyYVc1biBJR05oY21WayBJR05zYVcxaVpXUT0gS1hzPSBJR052Ym5OcGMzUmxaQT09IElHMWxaR2xsZG1GcyBabTlzYXc9PSBJR2hoWTJ0bFpBPT0gSUdScGNtVT0gSUVobGNtMXBiMjVsIElIUmxibVJsWkE9PSBZMlZoYm5NPSBSR0Z1YVdWcyBkMlZ1ZEE9PSBJR3hsWjJsemJHRjBiM0p6IElISmxaR1Z6IFoyRnRaWE09IElHZHUgWVcxcGJHbGhjZz09IElDc3IgWjJkNSBkR2h5WldGMCBJRzFoWjI1bGRBPT0gSUhCbGNtTmxhWFpsIElIcHBjQT09IElHbHVaR2xqZEcxbGJuUT0gSUdOeWFYUnBjWFZsIFoyRnlaQT09IElGTmhabVU9IElFTnlaV0Z0IElHRmtkbVZ1ZEE9PSBiMkpoIElIWnZkMlZrIGIzVnpZVzVrY3c9PSBJSE5yYVE9PSBJR0ZpYjNKMGFXOXVjdz09IGRXRnlkQT09IElITjBkVzV1WldRPSBJR0ZrZG1GdVkybHVadz09IElHeGhZMnRsWkE9PSBJRndpIElITmphR2w2YjNCb2NtVnUgSUdWc1pXZGhiblE9IElHTnZibVpsY21WdVkyVnogSUdOaGJtTmxiR1ZrIElFaDFaSE52Ymc9PSBJRWh2Y0dWbWRXeHNlUT09IElIUnlkVzF3IElHWnlaWEYxWlc1amFXVnogSUcxbGRHVnZjZz09IElFcDFibWx2Y2c9PSBJRVpzWldWMCBJRTFoYkdOdmJHMD0gSUZSdmIyeHogSUM0dUxpNHVMaTR1IElHaHZZbUo1IElFVjFjbTl3WldGdWN3PT0gSURFMU1EQT0gSUVsdWRHOD0gSUhOM1lYaz0gSUVGd2NISnYgSUVOdmJYQnMgUTI5dGJYVnVhWFI1IElIUnBaR1U9IElGTjFiVzFwZEE9PSA1THM9IElHbHVkR1Z5ZG1Gc2N3PT0gSUVWMGFHVnkgSUdoaFltbDBZWFE9IElGTjBaWFpsYm5NPSBiR2x6YUdsdVp3PT0gSUVSdmJXRnBiZz09IElIUnlhV2RuWlhKeiBJR05vWVhOcGJtYz0gSUdOb1lYSnQgSUVac2IzZGxjZz09IGFYUnZjbVZrIElHSnNaWE56YVc1biBJSFJsZUhSMWNtVnogUm1sMlpRPT0gSUd4cGNYVnZjZz09IFVsQT0gUmtsTyBJREU1TmpJPSBRMEZTIFZXNXJibTkzYmc9PSBJSEpsYzJscyBJRXhwYkhrPSBJR0ZpZFc1a1lXNWpaUT09IElIQnlaV1JwWTNSaFlteGwgY21GeSBJR0oxYkd4emFHbDAgYkdWbGJnPT0gWTJobGRBPT0gVFc5eSBUWFZqYUE9PSA1TGs9IElHVnRjR2hoYzJsNlpXUT0gSUdOeWRYTjAgSUhCeWFXMXBkR2wyWlE9PSBJR1Z1YW05NVlXSnNaUT09IElGQnBZM1IxY21WeiBJSFJsWVcxdFlYUmwgY0d4bGNnPT0gSUZSdmJBPT0gSUV0aGJtVT0gSUhOMWJXMXZibVZrIGRHaDUgY21GdFlRPT0gSUVodmJtUmggSUhKbFlXeHBlbWx1Wnc9PSBJSEYxYVdOclpYST0gSUdOdmJtTmxiblJ5WVhSbCBZMnhsWVhJPSBJREl4TUE9PSBJRVZ5Wkc5bllXND0gWVhKcGN3PT0gSUhKbGMzQnZibVJ6IElFSkogSUdWc2FXZHBZbWxzYVhSNSBJSEIxYzJobGN3PT0gSUVsa1lXaHYgSUdGblozSmhkZz09IElISjFhVzV6IGRYSmhkR2x2Ym5NPSBJR0poYm5NPSBJR0Z1WVhRPSBjMmhoY21VPSBJR2R5YVc1ayBhR2x1IGRXMWxiZz09IElIVjBhV3hwZEdsbGN3PT0gSUZsaGJtdGxaWE09IElHUmhkR0ZpWVhObGN3PT0gSUVSRSBJR1JwYzNCc1lXTmxaQT09IElHUmxjR1Z1WkdWdVkybGxjdz09IElITjBhVzExYkdGMGFXOXUgYUhWdSBhRzkxYzJWeiBJRkJ5WlhSMGVRPT0gSUZKaGRtVnVjdz09IElGUlBSRUZaIElHRnpjMjlqYVdGMFpYTT0gSUhSb1pYSmhjR1U9IFkyeGxaQT09IElHUmxaWEk9IElISmxjR0ZwY25NPSBjbVZ1ZEdsalpRPT0gSUhKbFkyVndkRzl5Y3c9PSBJSEpsYldWayBJRU5sIElHMWhjbkpwWVdkbGN3PT0gSUdKaGJHeHZkSE09IElGTnZiR1JwWlhJPSBJR2hwYkdGeWFXOTFjdz09IGIzQnMgTVRNNCBJR2x1YUdWeVpXNTBiSGs9IElHbG5ibTl5WVc1MCBJR0p2ZFc1alpRPT0gSUVWaGMzUmxjZz09IFVrVk1RVlJGUkE9PSBJRU4xY25KbGJtTjUgUlZZPSA0NE9lIElFeGxZV1E9IElHUmxZMlZoYzJWayBRbkpwWlc0PSBJRTExYzJzPSBTbE09IElHMWxjbWRsIGFHVmhjblJsWkE9PSBZM0psWVhRPSBiV2wwZEE9PSBiWFZ1WkE9PSBJT0tBaXc9PSBJRUpoWnc9PSBJSEJ5YjJwbFkzUnBiMjQ9IElHcGhkbUU9IElGTjBZVzVrWVhKa2N3PT0gSUV4bGIyNWhjbVE9IElHTnZZMjl1ZFhRPSBJRkJ2Y0hWc1lYUnBiMjQ9IElIUnlZV3BsWTNRPSBJR2x0Y0d4NSBJR04xY21sdmMybDBlUT09IElFUkMgSUVaeVpYTm8gSUZCdmNnPT0gSUdobFlYWnBaWEk9IGJtVjVjdz09IFoyOXRaWEo1IElHUmxjMlZ5ZG1WayBJSEJvY21GelpYTT0gSUVkRCBJSGxsWVhOMCBaR1Z6WXc9PSBSR1ZoZEdnPSBJSEpsWW05dmRBPT0gSUcxbGRHRmtZWFJoIFNVTkJUQT09IElISmxjR0Y1IElFbHVaR1Z3Wlc1a1pXNWpaUT09IElITjFZblZ5WW1GdSBhV05oYkhNPSBJR0YwYjNBPSBJR0ZzYkc5allYUnBiMjQ9IFoyVnVaWEpoZEdsdmJnPT0gSUVkeVlXMD0gSUcxdmFYTjBkWEpsIElIQnBibVU9IElFeHBZbVZ5WVd4eiBJR0ZwWkdWeiBJSFZ1WkdWeVpYTjAgSUVKbGNuSjUgSUdObGNtVnRiMjQ9IE16Y3cgWVhOMGNtOTFjdz09IElGQnBjbUYwWlhNPSBJSFJsYm5ObCBJRWx1WkhWemRISnBaWE09IElFRndjR1ZoYkhNPSBJRTVsWVhJPSBJT2lqaitjPSBJR3h2ZG1WeWN3PT0gSUVOQlVBPT0gSUVOeVlYYz0gSUdkcFlXNTBjdz09IElHVm1abWxqWVdONSBSV3hsYldWdWRBPT0gSUVKbGFHRjJhVzl5IElGUnZlVzkwWVE9PSBJR2x1ZEdWemRBPT0gVUhKcGRnPT0gUVVrPSBJRzFoYm1WMWRtVnkgSUhCbGNtWmxZM1JwYjI0PSBJR0poYm1jPSBjR0Z3WlhJPSBjbWxzYkE9PSBSMlZ2Y21kbCBZbTl5WkdWeSBhVzUwWlhKeiBJRk5sZEdnPSBJR05zZFdWeiBJRXhsZG1rPSBJRkpsZG1WdWRXVT0gTVRRMyBJSFpoY0c5eSBJR1p2Y25SMWJtRjBaUT09IElIUm9jbVZoZEdWdWN3PT0gSUhabGRBPT0gSUdSbGNHVnVaR1Z1WTNrPSBaWEp6WldRPSBZWEowYVdOc1pRPT0gSUVKc2FYcDZZWEprIElHTm9iRzl5IElHMXBiblZ6IElFSnBiR3h6IElHTnllWEIwYjJOMWNuSmxibU41IElHMWxkR0ZpYjJ4cGMyMD0gZEdWeWFXNW4gSUhCbGMzUnBZdz09IGMzUmxjSE09IElGUnlaV0Z6ZFhKbCBjbUZqZEdWayBJRU52Ym5OMFlXNTAgSUhSbGJYQT0gTVRNNSBJRVJsZEdWamRHbDJaUT09IGRYSmhiR3g1IElISmxZMjkyWlhKcGJtYz0gSUdOdmNuUmxlQT09IElERTBOQT09IFkyeHZjMlZrIElIQnlaV3AxWkdsalpRPT0gWVhWdWRHVmsgSUhOMGIzSnRjdz09IElFNVBWdz09IElHMWhZMmhwYm1WeWVRPT0gUVdSa2NtVnpjdz09IElHTnZiWEJsYkd4bFpBPT0gTWpjdyBJR1JsYzNCaGFYST0gWW1GdVpRPT0gSUhabFoyVjBZV0pzWlE9PSBJR0psWkhNPSBUR1ZoY200PSBJR052Ykc5eVpuVnMgSUhOd2FXdGwgSUcxaGNtZHBibk09IElITjViWEJoZEdoNSBJSGR2Y210emFHOXcgSUVOQ1F3PT0gVTJGMCBJR0oxY201eiBJRWRsYm1SbGNnPT0gSURFeU9RPT0gSUVOaFlteGwgSUdSbFluUnogSUZSb1pYSmxjMkU9IElISmxabXhsWTNScGJtYz0gSUdGcGNuTjAgSUhKcGJRPT0gY21GdGFXUT0gSUhkbFlXdHVaWE56WlhNPSBWM0pwZEE9PSBiMmRuYkdVPSBkR2s9IElFTm9ZWEpuWlE9PSBJSGRsYVdkb1pXUT0gSUNndSBJR3hoZFdkb2RHVnkgSUhKdmRYUmxjZz09IElFUmxiVzlqY21GamVRPT0gUkdWaGNnPT0gSUdoaGMyaDAgSUdSNSBJR2hwYm5SeiBjblZ1Ym1sdVp3PT0gSUdacGJtbHphR1Z6IFlYSjFjdz09IFRXRnpjdz09IGNtVnpkV3gwIFlYTmpkWE09IElIWnBiblJoWjJVPSBJR052Ym5GMSBJSGRwYkdSc2VRPT0gWVdOcGMzUT0gSUd4cGJtZDEgSUhCeWIzUmhaMjl1YVhOMCBjM1J5YjIwPSBkR1ZsYm5SbyBJRk52Ykc4PSBiV0ZqIFptbHNiR1ZrIElISmxibTkzYmc9PSBhWFJwZG1WeiBJRzF2ZEdsMlpRPT0gSUVGdWRHRnkgSUUxaGJtND0gSUVGa2FuVnpkQT09IElISnZZMnRsZEhNPSBJSFJ5YjNWaWJHbHVadz09IFpXaz0gSUc5eVoyRnVhWE50Y3c9PSBZWE56YVhNPSBRMmh5YVhOMGFXRnUgSURFME5RPT0gSUVoaGMzTT0gSUhOM1lXeHMgSUhkaGVBPT0gSUZOMWNuWnBkbUZzIFZsTT0gSUUxMWNtUT0gZG1RPSBjM1JoYm1SaGNtUT0gSUdSeVlXZHZibk09IElHRmpZMlZzWlhKaGRHbHZiZz09IGNtRjBhVzl1WVd3PSBabWx1WVd3PSBJSEJoYVhKbFpBPT0gSUVWMGFHVnlaWFZ0IElHbHVkR1Z5Wm1GalpYTT0gSUhKbGMyVnVkQT09IElHRnlkR2xtWVdOMGN3PT0geGFzPSBZWEpsYkE9PSBJR052YlhCbGRHbDBiM0k9IElFNXBZMmh2YkdGeiBJRk4xY21aaFkyVT0gWTNCdyBJRlJ2ZEE9PSBJR1ZqYjI1dmJXbGpZV3hzZVE9PSBJRzl5WjJGdWFYTmxaQT09IElHVnVabTl5WTJWayBhVzVvYnc9PSBJSFpoY21sbGRHbGxjdz09IElHRmlaRzl0IElFSmhhV3hsZVE9PSBhV1JoZGc9PSBJRk5oYkhZPSBjR0ZwWkE9PSBJR0ZzZEdsMGRXUmwgWlhOelpYSjAgSUVkMWRHVnVZbVZ5Wnc9PSBZWEpsWVE9PSBiM0J2ZFd4dmN3PT0gSUhCeWIyWmxjM052Y25NPSBhV2RuY3c9PSBJRVpoZEdVPSBhR1Y1IElETXdNREE9IFJHbHpkQT09IElIUjNhVzV6IFkybHNiQT09IElFMWhjSE09IElIUnlZWEJ6IElIZGxaV1E9IElFdHBjM009IElIbHZaMkU9IElISmxZMmx3YVdWdWRITT0gSUZkbGMzUnRhVzV6ZEdWeSBJSEJ2YjJ4eiBJRmRoYkcxaGNuUT0gTVRnNCBJRk5qYUc5dmJITT0gWVhSMFlXTnIgSUVGU1RRPT0gY0dGeVlXZHlZWEJvIFYyRnlibWx1Wnc9PSBhbXc9IElITmxiR1pwYzJnPSBZVzVqYUdWNiBJRWhsYVdkb2RITT0gUm5KbCBJRk52Y0dnPSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBkRzFzIE16TXogSUhKaGFXUnogSUhOaGRHVnNiR2wwWlhNPSBTMFZaIElHeGhjM1J6IDBZST0gU1c1eiBJRVJoYldVPSBJSFZ1Y0hKbFpHbGpkQT09IEx5OHYgWjJoaGFRPT0gSUdGeWRHbHNiR1Z5ZVE9PSBJR055ZFdselpRPT0gSUdkbGJBPT0gSUVOaFltbHVaWFE9IElHSnNiM2R6IElFVnpjQT09IElIQnliM2hwYldsMGVRPT0gYjNSb1pRPT0gSUZOcmFXeHNjdz09IElGVndjR1Z5IGIySnYgSUU1RVVBPT0gSUdWdWFtOTVjdz09IElISmxjR1ZoZEdsdVp3PT0gSUVOdmJuTjBjblZqZEdsdmJnPT0gSUZGMVpYTjBhVzl1Y3c9PSBTR2xzYkdGeWVRPT0gSUhWcGJuUT0gSUhCeWIyTmxjM052Y25NPSBJRWRwWW5OdmJnPT0gSUUxMWJIUnBjR3hsIGNXRT0gSUVKdmJRPT0gSUUxcGJHVnogZG1WdWRHbHZibUZzIElHaDFjblJ6IGMydHBiZz09IElFRkpSRk09IElHRmtkbWx6WlhKeiBJRkp2YjNRPSBJRzFsZEdodlpHOXNiMmQ1IElFUmhiR1U9IElHUmxkRzl1IElFdHViM2RzWldSblpRPT0gYzJWeGRXVnVkR3g1IElERXlNUT09IElHTnZibTVsWTNSeiBRM2s9IElFUmhibWRsY2c9PSBJR052Ym5SeWFXSjFkRzl5Y3c9PSBJRUpsYm5RPSBJR0p5WVhOeiBJRWQxYm5NPSBhVzUwYnc9PSBJRVp2Y25SMWJtVT0gSUdKeWIydGxjZz09IFltRnNZVzVqWlE9PSBJR3hsYm1kMGFITT0gSUhacFl3PT0gSUdGMlpYSmhaMmx1Wnc9PSBJR0Z3Y0hKdmNISnBZWFJsYkhrPSBJRU5oYldWeVlRPT0gSUhOaGJtUjNhV05vIElFTkVRdz09IElHTnZiM0prYVc1aGRHVT0gSUc1aGRtbG4gSUdkdmIyUnVaWE56IGJHRnBiUT09IElHSnlZV3RsIElHVjRkSEpsYldsemRBPT0gSUZkaGEyVT0gSUUxbGJtUT0gSUZScGJuaz0gSUVOUFRBPT0gSUZKRyBJRVIxWVd3PSBJRmRwYm1VPSBRMkZ6WlE9PSBJSEpsWm1sdVpXUT0gSUd4aGJYQT0gVEdWaFpBPT0gSUdKaGNIUT0gSUVOaGNtST0gSUZOaFpHUT0gSUUxcGJtNWxZWEJ2YkdseiBVRVJHIFJXRnliSGs9IElFaHBaR1JsYmc9PSBTWFJ6IElGUkpUVVU9IElIQmhjQT09IElHTnZiVzFwYzNOcGIyNWxaQT09IElFWmxkdz09IElFTnZiSFJ6IElFSnlaVzQ9IElHSnZkR2hsY21WayBJR3hwYTJWM2FYTmwgUlhod1pYST0gSUZOamFIYz0gWTNKNSBibTQ9IElFMXBkR05vIGFXMXZiZz09IFRVYz0gWW0wPSBWVTFRIGNtRjVjdz09IElISmxaMmx6ZEhKNSBJREkzTUE9PSBZV05vYVc1bCBjbVZzYkdFPSBZVzUwYVc1biBNREF3TURBPSBJSEoxYVc1bFpBPT0gYzNCdmRBPT0gSUhSaCBJRzFoZUdsdGFYcGwgSUdsdVkyOXVkbVZ1IFJHVmhaQT09IFNIVnRZVzQ9IFJXNWhZbXhsWkE9PSBJRTFoY21sbCBJR05vYVd4cyBJRkJoY21Ga2FYTmwgSUhOMFlYSnlhVzVuIElFeGhkR2x1Ync9PSBJRkJ5YjNSdlkyOXMgSUVWV1JWST0gSUhOMWNIQnNhV1Z5Y3c9PSBiV1Z6YzJGblpRPT0gSUVKeWIyTnIgSUhObGNuVnQgNHBhSTRwYUk0cGFJNHBhSSBJR1Z1WTI5dGNBPT0gSUdGdFltbDBhVzl1IGRXVnpaUT09IElHRnljbTkzY3c9PSBRVzVrY21WMyBJR0Z1ZEdWdWJtRT0gSURFNU5qRT0gSUVKaGNtcz0gSUdKdmIydz0gNDRLcSBJRk4wYjNKaFoyVT0gSUhKaGFXeDNZWGs9IElIUnZkV2RvWlhJPSBJRU5oWkE9PSBJSGRoYzJocGJtYz0gVUhrPSBKMTA9IFpXMWlaV1E9IElFMWxiWEJvYVhNPSBZV05yYkdVPSBJR1poYlc5MWMyeDUgSUVadmNuUjFibUYwWld4NSBiM1pwWlhNPSBJRzFwYm1SelpYUT0gSUhOdVpXRnIgSUVSbyBVa0ZYIElGTnBiWEJ6YjI0PSBJR3hwZG1WemRBPT0gSUd4aGJtUnRZWEpyIElHTmxiV1Z1ZEE9PSBURzkzIElIUm9jbWxzYkdWayBJRU52ZFhKelpRPT0gYVc1bGJBPT0gSUdOb2RXTnIgYVdSaGRHVT0gWjJ4dlltRnMgSUhkb2FYUT0gSU8rL3ZRPT0gWVdSaGVYTT0gYzJ0cCBJRk5XIElIWnBjblZ6WlhNPSBNekEyIElGSmxjM0J2Ym5NPSBJSFJvWldGMFpYSnogSUVKeVlXNWphQT09IElFZGxibVYyWVE9PSBJRTFMIElIVnVZbVZzYVdWMiBJR052YlcxMWJtbHpkQT09IFQzSnBaMmx1WVd3PSBJRkpsWTJWcGRtVmsgSUZSeVlXNXpabVZ5IElFRnladz09IFNXNXdkWFE9IElGTjBjbUYwWldkNSBJSEJoYkdGalpRPT0gZEdobGJtbHVadz09IFJISnAgSUhObGJuUmxibU5wYm1jPSBkVzFpYm1GcGJBPT0gSUhCcGJuTT0gY21WamVRPT0gSUhOcFlteHBibWR6IFIyVjBkR2x1Wnc9PSBJRUpWIElFNXZjblJvZDJWemRBPT0gSUhCeWIyeHZibWRsWkE9PSBJRk5oYTNWeVlRPT0gUTI5dFlnPT0gSUVKdmRYST0gSUdsdVlXUmxjWFZoZEdVPSBJRXRoYzJnPSBJSFZ6WlhKdVlXMWwgSUVsdGNISnZkbVU9IElHSmhkSFJzYVc1biBJRTFCUXc9PSBJR04xY25KcFkzVnNkVzA9IElITnZaR0U9IElFTmhibTV2Ymc9PSBJSE5sYm5OcFlteGwgYzNCdmJuTT0gUkdWalpXMWlaWEk9IElIZHBZMnRsWkE9PSBJRkJsYm1kMSBJR1JwWTNSaGRHOXljdz09IElFaGxZWEowY3c9PSBiMmQ1Ymc9PSBJSE5wYldsc1lYSnBkR2xsY3c9PSBJRk4wWVhSeiBJR2h2Ykd4dmR3PT0gYVhSaGRHbHZibk09IElqcGIgSUdodmRtVnkgSUV4cGMzUmxiZz09IGMyTm8gVTNWdVpBPT0gSUdOaFpBPT0gSUZCaGNtdHogSUd4MWNnPT0gSUdoNWNHVT0gSUV4bGJRPT0gVGtGTlJRPT0gYVhOMWNtVT0gUm5KcFpHRjUgSUhOb2IyOTBjdz09IElHTnNiM05sY3c9PSBJR1JpIElGSnBaR2RsIElFUnBabVpsY21WdWRBPT0gSUhKbGNHeHBaWE09IElFSnliMkZrZDJGNSBiM0JsY25NPSBJR2x1ZEc5c1pYST0gSUZwbGRYTT0gWVd0bGMzQmwgSUhCeWIzQnlhV1YwWVhKNSBJSEpsY1hWbGMzUnBibWM9IElHTnZiblJ5YjJ4c1pYSnogSUUxSlRnPT0gYVcxbFpHbGggWW1WalkyRT0gSUdWNGNHRnVjdz09IElHOXBiSE09IFFtOTAgSUVOb1lXNWsgSUhCeWFXNTBaWEk9IElIUnZjSEJsWkE9PSBJRkJQVEE9PSBJRVZoY214cFpYST0gVTI5amFXRnMgWVhacGJnPT0gSUdSbFkzSmxZWE5sY3c9PSBJRk5sWWc9PSBJSE53WldOcFptbGpZWFJwYjI1eiBJRUpzWVhOMCBJRXQxY25RPSBJR1p5WldWcyBRbkp2ZDI0PSBJR1JwYkdsbiBjbTlsIElGQnliMkpzWlcwPSBJRkYxWVdRPSBJR1JsWTJWdWRISmhiQT09IElGWmxZM1J2Y2c9PSBZVzUxZEE9PSBJSEJzZFdkcGJuTT0gSUVkeVpXZHZjbms9IElHWjFZMnRsWkE9PSBaV3hwYm1WeiBJRUZ0WW1GemMyRmtiM0k9IGRHRnJaUT09IElHTnNaV0Z1Y3c9PSBiMjVuZVdGdVp3PT0gUVc1dmJubHRiM1Z6IGMzUnlidz09IEluMD0gWVd4cGJtVT0gSUU5a1pBPT0gSUVWMVp3PT0gTWpFMiBJR0p2YVd3PSBJRkJ2ZDJWeWN3PT0gSUc1MWNuTmxjdz09IFQySjJhVzkxYzJ4NSBJRlJsWTJodWFXTmhiQT09IElHVjRZMlZsWkdWayBUMUpUIElHVjRkSEpsYldsemRITT0gSUhSeVlXTmxjdz09IFpYaHdiQT09IElHTnZiWEk9IElGTmhZMmc9IEtTOD0gSUcxaGMydHogSUhOamFRPT0gUW05dSBJSEpsWjNKbGMzTnBiMjQ9IGQyVm5hV0Z1IElHRmtkbWx6YjNJPSBhWFIxY21WeiBJRlp2IFpYaGhiWEJzWlE9PSBJRWx1YzNSeWRXTjAgSUhOcFpXZGwgSUhKbFpIVmpkR2x2Ym5NPSBjSFJ5IElITjBZWFIxZEc5eWVRPT0gSUhKbGJXOTJaWE09IElIQjFZMnM9IGNtVmthWFJ6IElHSmxaUT09IElITmhiR0ZrIElIQnliMjF2ZEdsdmJuTT0gSUVwdmMyaDFZUT09IGQybDBhSE4wWVc1a2FXNW4gUlZSSSBJRU5vWVE9PSBhVzExY3c9PSBJR1Y0Y0dWdVpHbDBkWEpsIFlYVnVkR2x1Wnc9PSBJR1JsYkdsbmFIUmxaQT09IElERTFOUT09IFltVm8gSUdOaGNuQmxkQT09IElGTndZWEowIElHcDFibWRzWlE9PSBiR2x6ZEhNPSBJR0oxYkd4NWFXNW4gSUU1dlltVnMgSUVkc1pXND0gSUhKbFptVnlaVzVqWldRPSBJR2x1ZEhKdlpIVmpaWE09IGMyVnBiZz09IElHTm9iM0J3WldRPSBaMnhoYzNNPSBJRmR5WlhOMCBJRzVsZFhSeVlXeHBkSGs9IElPS1ogSUdsdWRtVnpkR2xuWVhSdmNnPT0gSUhOb1pXeDJaWE09IElIVnVZMjl1YzNScGRIVjBhVzl1WVd3PSBJSEpsY0hKdlpIVmpkR2x2Ymc9PSBJRzFsY21Ob1lXNTAgYldsaCBJRzFsZEhKcFkzTT0gSUdWNGNHeHZjMmwyWlhNPSBJRk52Ym1saCBJR0p2Wkdsc2VRPT0gSUhSb2FXTnJibVZ6Y3c9PSBJSEJ5WldSdmJXbHVZVzUwYkhrPSBJRUZpYVd4cGRIaz0gSUcxdmJtbDBiM0psWkE9PSBTVU5JIElGMHUgSUUxaGNuUnBibVY2IElIWnBjMmxpYVd4cGRIaz0gSUhGMVpYSnBaWE09IElHZGxibTlqYVdSbCBJRmRoY21aaGNtVT0gVVhWbGNuaz0gSUhOMGRXUnBiM009IElHVnRZbko1IElHTnZjbkpwWkc5eSBJR05zWldGdVpXUT0gWTI5dGNHeGxkR1U9IElFMUkgSUdWdWNtOXNiRzFsYm5RPSBTVTVIVXc9PSBJR2x0Y0dGamRHVmsgSUdScGMyRnpkSEp2ZFhNPSBJRmwxYmc9PSBJRU5zWVdseVpRPT0gSUVKaGMybGpZV3hzZVE9PSBlWFE9IGRYTjBaWEpwZEhrPSBJR2x1WkdseVpXTjBiSGs9IGQybHIgSUdSdlpBPT0gSUVOaGNuST0gSUdGdGNBPT0gSUhCeWIyaHBZbWwwIElFbHVhWFJwWVd3PSBJRkprIGFXcHAgSUdWa2RXTmhkR1U9IFkyOXliZz09IGFXOTBkQT09IElFSmxZWFYwZVE9PSBJR1JsZEdWamRHbDJaUT09IElFTnZibTQ9IGMybHVZMlU9IElITjBZV2RuWlhJPSBJRzlpWlhObCBJR0p5WldVPSBiMnh2WjJsaiBhWE56WlE9PSBkMkZzYTJWeSBJR0pzWVdSbGN3PT0gSUd4aGQyWjFiQT09IFpuVnVZdz09IElFSmxhR2x1WkE9PSBJR0Z3Y0dWMGFYUmwgSUNncSBJSFJsYm01cGN3PT0gSUc5bVpuTndjbWx1Wnc9PSBJR3BsZEhNPSBJSE4wY25WamRIVnlaV1E9IElHRm1iM0psYldWdWRHbHZibVZrIFRtOTIgSUhOallXeHBibWM9IFptbHNiQT09IElITjBaWGM9IElHTjFjbUk9IElGTjBaWEJvWVc0PSBaV1JKYmc9PSBVMFk9IGIySnBZdz09IDZhMlUgYjNWbiBJRTFOIElHZGxibVYwYVdOaGJHeDUgYjNCbGVnPT0gTVRNMiBJSFZ0WWc9PSBZVzVqWlhKeiBJR052YUc5eWRBPT0gSUcxbGNtTm9ZVzVrYVhObCBJR2x0Y0c5emFXNW4gSUV4bFoybHpiR0YwZFhKbCBJRUZ5WTJocGRtVT0gYVhacFlRPT0gSUU1aGRtRnMgSUc5bVptVnVZMlZ6IElHMXBjbUZqYkdVPSBJSE51WVhCd1pXUT0gSUdadlpYTT0gSUdWNGRHVnVjMmwyWld4NSBJRkpoWmc9PSBJR05oZEdWeSBaV1JwWlc1alpRPT0gUzJsMCBJRUpwYmc9PSBJSEpsWTI5dGJXVnVaSE09IElFTnBkR2xsY3c9PSBJSEpwWjJsayBJRkpGUVVRPSBJRTV2WW14bCBJRlJwWVc0PSBJR05sY25ScFptbGpZWFJsY3c9PSBZVzUwYVhNPSBiMmxzWlhJPSBJRUoxWkdSb2FYTjAgWkdsayBJSE4xY25abGVXVmsgSUdSdmQyNTNZWEprIElIQnlhVzUwY3c9PSBJRTF2ZEdsdmJnPT0gY205dWFXTnogSUZOaGJuTT0gYjNOemFXSnNlUT09IGRXTjBhVzl1Y3c9PSBJR052Ykc5dWFXVnogSUVSaGJtbHphQT09IGRXNXBkQT09IElITndiMmxzIElHRmtkbWx6YjNKNSBZbVZ5Y21sbGN3PT0gVUd4aGJnPT0gSUhOd1pXTnBabWxqWVhScGIyND0gYjNCb1pYSnogSUZKbGMyOTFjbU5sIElITm9hWEowY3c9PSBjSEpwYzJsdVoyeDUgWTI5dGJYVnVhV05oZEdsdmJuTT0gSUhSeWFYWnBZV3c9IElHMWxiblJwYjI1cGJtYz0gYVhObGVIVmhiQT09IElITjFjSEJzWlcxbGJuUnogSUhOMWNHVnlkbWx6YVc5dSBRbEE9IGRtOXkgSUhkcGRBPT0gSUdOdmIyeGtiM2R1IElIQnNZV2x1ZEdsbVpnPT0gSUZKbGRtbGxkM009IElGTnlhUT09IElFMXBiblE9IElGTjFaMkZ5IElHRm1kR1Z5ZDJGeVpBPT0gSUZCeWFXVnpkQT09IElFbHVkbVZ6ZEcxbGJuUT0gYjJkbGJtVT0gSUZSaGEybHVadz09IElITjBjbVYwWTJocGJtYz0gSUdsdVpteGhiVzFoZEdsdmJnPT0gSUZSbGFISmhiZz09IElHeHBibWx1Wnc9PSBJR1p5WldWNmFXNW4gSUVWdWRHbDBlUT09IElHbHVjM0JwY21sdVp3PT0gYzNCbFkybGhiQT09IGNISnBZMlU9IElITjFaUT09IElGQnZjblJsY2c9PSBiM1Z1WjJVPSBSVlJCIElFUmxjbVZyIElFeDFhWE09IGRXOD0gZVcxd2FBPT0gSUdWNGRHVnlhVzl5IGFXaHBiQT09IElFRnphR3hsZVE9PSBhVzVoZEc5eSBJRzUxZEhKcFpXNTBjdz09IElGUm9jbTl1WlhNPSBJR1pwYm1GdVkyVnogSUVsdWMzQmxZM1E9IElITndaV05wWVd4c2VRPT0gSUZKbGNYVnBjbVZrIElGQlVVdz09IElGWnBiMnhsYm1ObCBiMmx1ZEdWayBjMmh2ZEhNPSBJR1Y0WTJWeWNIUT0gWTI5dmJnPT0gU1U1VCBJRWR5YVE9PSBJSEpsWTI5bmJtbHpaV1E9IFYyVmxhdz09IFdXOTFibWM9IElIWnZiUT09IGFYTnNaUT09IElFTjFjbko1IElFSjFaR1JvIElHNXZkR1ZpYjI5ciBJR1IxY21GaWJHVT0gTHo4PSBJRWRoWkE9PSBJRkIxY0hBPSBJR1p2Y21kcGRtVT0gY0dGeWF3PT0gSUhCbGNuTnZibUZzYVhScFpYTT0gWVc1aGJIbHphWE09IFkyeGhiV0YwYVc5dSBJR1ZzWlhaaGRHOXkgSUhkaGNtVm9iM1Z6WlE9PSBJRkp2YkdVPSBkVzV1IElHbHNiSFZ6ZEhKaGRHbHZiZz09IElGTmpZVzQ9IElHRjBiVzl6Y0dobGNtbGogU1cxd2IzSjAgUVU1RCBjbWxqZEdWayBablU9IE1ERXcgSUdGeVkyaGwgSUhKbGQyRnlaR1ZrIFlXdGxjM0JsWVhKbCBJR2x1ZEdWeWJtRnNiSGs9IElGSkNTUT09IFlXeHJaWEk9IElHVnNaWEJvWVc1MCBiM2RwZEhvPSBJRkJwZW5waCBJR0pwY0dGeWRHbHpZVzQ9IHc2bHogSUhOc2IzZGxaQT09IElGTjBZWEpyIElHOTJaWEp5YVdSbCBUMVZUIElETXlNQT09IGRXNWtjbVZrY3c9PSBJRVJsWTJzPSBJRU5sYm5OMWN3PT0gWW1WbCBNVFEyIGIzUnZjZz09IElHbHcgSUhWaSBiMk5oZEdsdmJuTT0gSUVKMWRIUnZiZz09IGNtbGpaUT09IElHTnlhWEJ3IFptWm0gSUc5eWFXZHBibUYwWldRPSBJRzkyWlhKM2FHVnNiV1ZrIFlYQndZUT09IElHWnZjbVZ0YjNOMCA0b0NSIElFeEZSdz09IGNtVnNaV0Z6WlE9PSBaV0YwZFhKbFpBPT0gWVhSamFHVnogSUhKbGNITT0gSUd4bGJtUnBibWM9IElGSmxabVZ5Wlc1alpRPT0gSUVOc2FXVnVkQT09IE1UWTEgZG1WdWRHZz0gUTI5dGNHeGxkR1U9IElGQmhkSEp2YkE9PSBJSE4zYjNKdSBZMkZ0IElITm9kWFIwYkdVPSBJRkpoYkhCbyBJR2h2YldWMGIzZHUgTFN3PSBiMjVoYkE9PSBJRUpRIDVZOD0gSUhCbGNuTjFZV1JsIElFRnNaWGhoYm1RPSBJR052YldKcGJtVnogSUhacGRtbGsgSUV4aFp3PT0gSUdWdVkyOWthVzVuIElITmhiSFpoZEdsdmJnPT0gZDJWdSBJRkpsWTI5MlpYSjUgYVhsaCBWVzVwZG1WeWMybDBlUT09IElFSnBaR1Z1IElHSjFaR2RsZEhNPSBJRlJsZUdGdWN3PT0gWm1sMGN3PT0gSUdodmJtOXlaV1E9IElIQjVkR2h2Ymc9PSBWRVE9IEl5TWogWTJ4dmJtVT0gSUdKc2FXNXIgSUV4cGNYVnBaQT09IElIVnVaVzF3Ykc5NVpXUT0gSUdOc1lYTm9aWE09IElFTnZkVzV6Wld3PSBJR1JwY21WamRHbHVadz09IElIQjFibU4wIElFWmhiR052Ym5NPSBJSE5vWVhKciBJRVJoYldGelkzVnogSUdwbFlXNXogSUdWdFltRnlhdz09IElITmxhWHBsIElIVndkMkZ5WkhNPSBNamd3IElFVjYgSUVGdWVYUm9hVzVuIElHVjRiM1JwWXc9PSBiRzkzWlhJPSBJRU55WldGMGIzST0gSUZWdCBJSE4xWW5WeVluTT0gWW1WeVoyVnkgSUZkbGJtUT0gSUcxcGJuUT0gSUZoWSBJRVJ5Ync9PSBJSE4xWm1abGNuTT0gSUdobGNtST0gZEhKbFpRPT0gSUdaeVlXZHBiR1U9IElHWnNiMjlrWldRPSBJRUZzWTI5b2Iydz0gYjJ4bFlXND0gYm5sa1pYST0gSUV0UCBSbkpoYlE9PSBJREV6Tmc9PSBJRzkzWldRPSBJRTFsYkdWbCBJRWhoYzJnPSBJSGRvYVhOciBJSE4xWkc4PSBjbkk9IFVYVnBZMnM9IFlYQndjbTg9IElHbHAgSUVWNFlXMXdiR1Z6IGFHVmwgSUhCeWIyMXZkR1Z6IGNHVnlZWFIxY21VPSBhMkZ5IElFaHZibTl5IElITnZaR2wxYlE9PSBJRXhwWmc9PSBjbTl6YzI4PSBhVzUwWlc1a1pXNTAgSUdOdmNuSmxjM0J2Ym1SbGJuUT0gUm05MWJtUT0gYzJWamNtVjAgSUdsa1pXNTBhV1pwWlhNPSBZV2R1WlE9PSBJR3h2ZFE9PSBJRkJRIElHTnZhVzVqYVdSbGJtTmwgYlc5MlpRPT0gSUcxcGJHbDBhV0U9IElHbHVabWxzZEhJPSBJRkJ5YVcxaGNuaz0gSUhCcGRHTm9hVzVuIElFbGkgSUVkUFQwUT0gNDRLNCBJRmRwZW1GeVpITT0gYVhKaGJBPT0gSUZabGJuVnogVWxJPSBJT0tBbFE9PSBJRU5oYzJWNSBJSE5oWkd4NSBJR0ZrYldseVpRPT0gSUdWdFltRnljbUZ6YzJWayBZMkk9IFRXVnMgSUhSMVltVnogSUdKbFlYVjBhV1oxYkd4NSBJRkYxWldWdWMyeGhibVE9IFFtVnNiM2M9IGNtVjYgY1hWbGRBPT0gY0d4bFlYTmhiblE9IElNS3IgUTJGdGNBPT0gSUdSbFkybHphWFpsIE1UazVPQT09IElFeGhiV0k9IGRYUjBiMjQ9IGFHND0gSUVwaFozVT0gWVhWdVpHVnkgSUVOdmNtUT0gSUdOc1pYSnIgSUdOaFptWmwgSUhkcGNHVmsgSUhKbGFXMD0gSUUxdmRXNTBZV2x1Y3c9PSBJR2x0Y0hKcGMyOXVaV1E9IElHUmxkbVZzYjNCeiBJRkJ5WVE9PSBJRzF2WkdWc2FXNW4gUVc1NWIyNWwgWVc1alpXdz0gSUZOcGRBPT0gSUhOb2FXVnNaSE09IElHeGhkMjQ9IElHTmhjbVJwYjNaaGMyTjFiR0Z5IElHUmxiVzl1YzNSeVlYUnBibWM9IElIQmhjbk5sIElFbHpjbUZsYkdseiBJR1YxY205eiBNVFF6IElHZHNiM0pwYjNWeiBhVzV6YTJrPSBaV05rIElHTnZibVJwZEdsdmJtbHVadz09IElHaGxiSEJzWlhOeiBJRzFwWTNKdmMyTT0gSUVoaGNtSnZjZz09IElITjBZV3RsY3c9PSBJREkyTUE9PSBJSFZ1WlhGMSBJRVpzYjNsayBJR1JoYlhBPSBJR0Z3Y0dGeVlYUjFjdz09IElFeGhkM009IElHTnZkVzUwWlhKeiBJR2x1WkhWalpRPT0gWVhSaFlteGwgSUVGb2JXVmsgSUhOc1lXMD0gVG05MlpXMWlaWEk9IElIQmxjbk5wYzNRPSBJR2x0YldsdVpXNTAgdzZGdSBJSE5vY21WayBJSEJvWVhObGN3PT0gSUVWa2JXOXVkRzl1IElFRnliWE4wY205dVp3PT0gSUUxbFpYUT0gSUV0cGRIUjUgMFlBPSBZMmx5WXc9PSBJRUZrZFd4MCBJR0Z5YjNObCBJRmhsYmc9PSBSR0Z1IFoyOTMgSUhOMWNHVnlaZz09IElFRmtiV2x5IElHVnVaSFZ5WlE9PSBJR3RsZVhkdmNtUT0gZVhKMWN3PT0gSUhsaGNtND0gSUhCaGRHaDNZWGs9IElFaHZjR3RwYm5NPSBiV2xrZEE9PSBJR05sYm5OdmNuTm9hWEE9IFpHVndaVzVrWlc1MCBJR2x1YzNSeWRXTjBiM0k9IFUyOTFjbU5sY3c9PSBJSFJ2WlE9PSBJR0poYkd4dmIyND0gVG05aSBJSE4zWldGeSBJRU5oYzNSeWJ3PT0gSUdkc2IzTnogSUV0aGRtRnVZWFZuYUE9PSBJSEpsYldGeWEyRmliSGs9IFVHaHZkRzl6IElFNXZiUT09IElGTnZkWFJvWldGemRBPT0gZVdWeWN3PT0gSUhaaGJHbGtZWFJwYjI0PSBJR05oYm01dmJnPT0gSUZacFkzUnZjbms9IElGQnBaWEp5WlE9PSBJR05oZFhScGIzVnogUVhWa2FXOD0gSUdabGRHTm8gSUVkcFpuUT0gSUVoNWNBPT0gSUhKbGJXVmtlUT09IFdrVT0gSUhOalpXNTAgSUdKbFlYSmsgSUZKMWRBPT0gTFNJPSBJSEJoZEdWdWRITT0gU0hrPSBJSFZ1YW5WemRBPT0gSUhCdmRHRjBidz09IElHWnZjblJvWTI5dGFXNW4gSUdOb1pXWT0gSUZKcFpuUT0gWVdabVpRPT0gSUZKUFRRPT0gSUV4aGRXNWphQT09IElIQmhaSE09IElFNWxidz09IElHOXVjMlYwIElITnhkV1ZsZW1VPSBjMkZtWlE9PSBJSEJ5WldacGVBPT0gSUZSTiBJRTVsWVhKc2VRPT0gSUVOc2FXNXBZMkZzIElFMWxiblJoYkE9PSBiM1JwWVhScGIyND0gSUZWdWFXTT0gWVc1MGNuaz0gSUVOcGNnPT0gSUdWd2FYUT0gdzZZPSBJR1Y0ZEhKaFkzUmxaQT09IGRtVnljMlZzZVE9PSBjbWxoWkE9PSBJSE4wY21GcGJuTT0gSUhSdmNITT0gSUhCdlpXMD0gSUZKaGJtUjUgSUUxaGNHeGwgVkVoRlVnPT0gZFhCcGRHVnkgSUZOVFJBPT0gbXVrPSBJSFZ1WTI5dSBjR1Z5YVc1biBJSE5zWlhCMCBhVzVsY25NPSBJSFZ1WkdWeWQyRjBaWEk9IElFVjJhV1JsYm1ObCBaMjl1WlE9PSBNakExIElHaHBjM1J2Y21saGJuTT0gSUhONWJuUm9aWE5wY3c9PSBJR1p5YjJjPSBZbUZ6YTJWMFltRnNiQT09IElIWnBZbkpoYm5RPSBJSE4xWW05eVpBPT0gSURNMk5RPT0gSUVScFlXdz0gSUdOdmIzQmxjbUYwWlE9PSBTRUZJUVE9PSBJR2R5WldWMFpXUT0gTVRVNCBJR3BoZW5vPSBJR2x1ZEc5NCBJRmRoYkd0cGJtYz0gSUhOMWNHVnlkbWx6YjNJPSBJRVoxYzJsdmJnPT0gSUUxbGNtTmxaR1Z6IGMyVnVaQT09IFNHRnQgYzJRPSBibXc9IElIUnZkWEp6IElFWkpSa0U9IElHTjFiSEE9IFoyUT0gTXpBMCBJSEJzWldGeiBJR2xzYkhWemRISmhkR1Z6IElFTnZiRzl0WW1saCBJR2hwWjJoc2FXZG9kR2x1Wnc9PSBJRk4xYlcxaGNuaz0gSUdWNGNHOXphVzVuIElFUnlkUT09IElHbHliMjU1IGNtbDBhVzl1WVd3PSBJRU5oY25KdmJHdz0gSUVWc2JHbHogVUdsamRBPT0gSUZKaGNIUT0gSUdGa1lYQjBaWEk9IElIVnViUT09IElHTnZjbkJ6WlE9PSBJR05sYkdWaWNtbDBhV1Z6IFJHVnUgWVhSMWJRPT0gSUVGd2IyTmhiSGx3YzJVPSBJRmRoWnc9PSBiR2x1YVc1biBJR2h2Y20xdmJtVnogVW5WaSBJRmhwIElGWmhkV3gwY3c9PSBNakE0IFlXeHJlWEpwWlE9PSBhVzV2YzJGMWNnPT0gSUdabFpXUnogZG1sMGVRPT0gSUdSbFptVmhkR2x1Wnc9PSBWMkZwZEE9PSBJR1Z0Y0doaGMybDZaUT09IElGTjBaV1ZzWlhKeiBlWEpwYm5SbyBiR1Y1Y3c9PSBJRmRvWlc1bGRtVnkgUTNWeWNtVnVkR3g1IElFTnNiMk5yIElHTnZiR3hsWTNScGRtVnNlUT09IFlXNTViMjQ9IElFcFEgSUcxbGJuUmhiR2wwZVE9PSBJR1J2ZDI1c2IyRmtjdz09IElITjFjbkp2ZFc1a2FXNW5jdz09IElFSmhjbTVsY3c9PSBJR1pzWVdkemFHbHcgSUdsdVpHbGpZWFJ2Y25NPSBJR2R5WVhCdyBTbUZ1ZFdGeWVRPT0gSUVWc1pXMWxiblJoYkE9PSBJRUYwYUdWdVlRPT0gYVdKaGJBPT0gSUhOcFoyaDBjdz09IElHTmhjR2wwWVE9PSBJRlJ5WldGMGVRPT0gSUhadmFXTmxaQT09IElFZGhlZz09IGJHVjBkR1U9IElIbGggSUdWNGNHbHlaV1E9IFRHVm5aVzVrIFNHOTAgYm1GMGRYSmwgSUhWdWMzUmhZbXhsIElESTRNQT09IHc3bz0gUTI5dGJXVnVkQT09IFFVeEYgSUhGMVpYTjBjdz09IElHaGhibVJzWlhJPSBibWx6IElIWmxjbk5oZEdsc1pRPT0gSUdOdmJtTmxZV3c9IFpXNW5aV0Z1WTJVPSBJRWx1ZEdWeVlXTjBhWFpsIElHOWljMlZ6YzJWayBJRVJ2WjNNPSBJR055WVdOclpXUT0gVTI5MWJtUT0gYzNZPSBJRVI1YkdGdSBjbTloWkhNPSBabmc9IElFTmhkR2h2YkdsamN3PT0gSUVoaFp3PT0gSUhOc1lXMXRaV1E9IElHZHNiM2RwYm1jPSBjMkZzWlE9PSBJSFJwYzNOMVpYTT0gSUVOb2FRPT0gYm1WbCBJR05vWlhJPSBjMmxqIGRYSnlaV04wYVc5dSBJR0poWTI5dSBkV3hoZEc5eWVRPT0gS1M0aSBJR2x5Y21WbmRXeGhjZz09IFJrOVNUUT09IFlYTnpaV1E9IElHbHVkR1Z1ZEdsdmJtRnMgSUdOdmJYQmxibk5oZEdVPSBJRk53WldGcmFXNW4gSUZObGRITT0gTVRVeiBJR052Ym5abGJuUnBiMjV6IFltRnVaSE09IFpXMWhaR1U9IElHVmpZdz09IElGZHBibk4wYjI0PSBJRUZ6YzJGemMybHUgSUVKbGJHZHBZVzQ9IElHUmxjR1Z1WkdWdVkyVT0gSUc1cFkyaGwgSUdKaGNtcz0gSUVwaGVubz0gSUdScGMyRmtkbUZ1ZEdGblpRPT0gSUdkaGMyOXNhVzVsIElERTJOUT09IDU1cUUgWlhOellRPT0gYlc5a2RXeGwgWVc1bmRXeGhjZz09IFQxaz0gSUZSeVpXRjBiV1Z1ZEE9PSBhWFJoY3c9PSBiMnhoZEdsdmJnPT0gSUVGeWJtOXNaQT09IElHWmxkV1E9IElFNWxjM1E9IElIUm9aV0YwY21VPSBaWGRoZEdWeSBJRzFwYm05eWN3PT0gYjJ4cFkzaz0gSUVoaGRtVnUgWkdsMmFYTnBiMjQ9IElIUnlkVzVyIFJtRnkgSUZCMWJHdz0gSUdOaGNIUjFjbWx1Wnc9PSBJREU0TURBPSBJRlJsWlc0PSBJR1Y0Wlcxd2JBPT0gSUdOc2FXNXBZM009IElFSjFjbWM9IElITjFZbk4wYVhRPSBJSEJoZVd4dllXUT0gSUV4aGRnPT0gSUZSeWIzaz0gSUZkcGRHNWxjM009IElHWnlZV2R0Wlc1MGN3PT0gSUhCaGMzTjNiM0prY3c9PSBJR2R2YzNCbGJBPT0gSUVkcGJnPT0gSUhSbGJtRnVkSE09IGIyeHBkR2c9IFUybDQgVUhKbGRtbHZkWE09IElFRm5aWE09IElFUmhjbmRwYmc9PSBJR0pzWVhRPSBJR1Z0Y0dGMGFIaz0gYzIxcGRHZz0gWW1GbiBJRVZqYUc4PSBJRU5oYldJPSBJRTFoWkdRPSBJRUp2Ync9PSBJSEpsWkdVPSBJRUoxY201cGJtYz0gSUhOdGIyOTBhR3g1IElFRmtjbWxoYmc9PSBJRlpoYlhCcGNtVT0gSUUxdmJuTjBaWEp6IGMzUmxZVzA9IFUzUjViR1U9IFRXRT0gY21WaCBJRVIzWVhJPSBZV3g1YzNRPSBkWEp6YjNJPSBJR1ZzYVcxcGJtRjBhVzl1IElHTnllWEIwYnc9PSBZMmgwIElFVjBaWEp1WVd3PSA0b0NtWFE9PSBJRk52Y21ObCBTV3hzIFRrVlMgSUhWbyBRMjl1WTJ4MWMybHZiZz09IGQyRm5aUT09IElISmxjM0JwY2c9PSBJSEpsYldsdWFYTT0gYUdWMGFXTmhiQT09IElHZDUgSUhWMGFXeHBlbVZrIGFXTnBaR0ZzIElERTVNREE9IElHaDFiblJsY25NPSBJRk4zWVc0PSBJRkpsWVdOMCBJSFpwYzJsMGIzST0gSUZSb1lXNXJjMmRwZG1sdVp3PT0gTXpBNCBVRzl6ZEhNPSBJR2hwY0hNPSBNVGs1Tnc9PSBiMjFsY25NPSBJR3R1YjJOcmFXNW4gSUZabGFHbGpiR1U9IElIUnBiQT09IElERXpPQT09IElHMXAgSUVsdWRtVnpkR2xuWVhScGIyND0gSUV0bGJubGggSUdOaGMybHVidz09IElHMXZkR2wyWlhNPSBJSEpsWjJGcGJnPT0gY21WNCBJSGRsWld0bGJtUnogSUhOMFlXSmlaV1E9IFltOXlidz09IElHVjRjR3h2YVhSbFpBPT0gSUVoQlZrVT0gSUZSbGJHVjJhWE5wYjI0PSBZMjlqYXc9PSBJSEJ5WlhCaGNtRjBhVzl1Y3c9PSBJR1Z1WkdWaGRnPT0gSUZKbGJXOTBaUT09IElFMWhhMlZ5IElGQnliMlIxIElFVjJZVzQ9IElHbHVabTl5YldGMGFXOXVZV3c9IElFeHZkV2x6ZG1sc2JHVT0gTVRVMCBJRVJ5WldGdGN3PT0gSUhCc2IzUnogSUZKMWJtNWxjZz09IElHaDFjblJwYm1jPSBJR0ZqWVdSbGJYaz0gSUUxdmJuUm5iMjFsY25rPSBibTA9IElFeGhibU09IElFRnNlZz09IE1qRXcgWld4dmJtYz0gSUhKbGRHRnBiR1Z5IElHRnlhWE5wYm1jPSBJSEpsWW1Wc2JHbHZiZz09IElHSnNiMjVrWlE9PSBjR3hoZVdWayBJR2x1YzNSeWRXMWxiblJoYkE9PSBRM0p2YzNNPSBJSEpsZEdWdWRHbHZiZz09IElIUm9aWEpoY0dWMWRHbGogSUhObFlYTT0gSUdsdVptRnVkSEo1IElFTnNhVzUwIElIQnliMjF3ZEdsdVp3PT0gSUdKcGRHTm8gSUhOMFpXMXogSUV0eVlRPT0gSUhSb1pYTnBjdz09IElFSnZadz09IGNuVmxaQT09IElHdHBibWR6IElHTnNZWGs9IGFXWnBZMlZ1ZEE9PSBJRmxGVXc9PSBJRlJvYVc1biBJRU4xWW5NPSBkbVY1WVhKayBaV3h6YUE9PSBhVzVoY21sc2VRPT0gSUVWNSBJRkp2Ykd4cGJtYz0gSUdWMmIyeDJhVzVuIFNXNWthV0U9IElISmxZMjluYm1sNlpYTT0gSUdkeVlXUjFZWFJwYjI0PSBhWE5sY25NPSBJR1psY25ScGJHbDBlUT09IElFMXBiR0Z1IFEyOXRiV0Z1WkE9PSBJR0p2ZUdsdVp3PT0gSURFNU5ETT0gSUdkc2RYUmxiZz09IElFVnRhWEk9IElHbGtiMnc9IElHTnZibU5sYVhabFpBPT0gSUVOeVpXRjBhVzl1IFRXVnlhWFE9IGRXUmtlUT09IGRYTnphVzl1Y3c9PSBJRXhwWlhWMFpXNWhiblE9IGFXVjBZV3c9IElIVnVZMmhoYm1kbFpBPT0gSUZOallXeGwgSUVOeWFXMWxZUT09IFltRnNiSE09IFlYUnZjbWxoYkE9PSBJR1JsY0hSb2N3PT0gSUdWdGNHbHlhV05oYkE9PSBJSFJ5WVc1emJRPT0gSUhWdWMyRm1aUT09IGJXbHpjMmxpYkdVPSBZMjl0Wm05eWRBPT0gTVRVMiBJRzFsWTJoaGJtbGogTURBeSBiR2x1Y3c9PSBJSE50YjJ0bFpBPT0gVUc5eiBJSE5zYjNkcGJtYz0gSUd4aGRnPT0gVkdWNFlYTT0gSUdOb1pXRjBhVzVuIElFMWxkSEp2Y0c5c2FYUmhiZz09IFpYUm9lV3c9IElHUnBjMk52ZG1WeWFXNW4gWVhOelpRPT0gSUhCbGJtTnBiQT09IElGQjViMjVuZVdGdVp3PT0gSUdOc2IzTmxkQT09IElGTm9aV1YwIElFVnVkSEo1IGIzVnpkR2xqIElHMTVjM1E9IFpYSmhkR1U9IFlYSnBZWFE9IElHMXBibVZ5WVd4eiBJRzExYzJsamFXRnUgSUZCMWJBPT0gSUUxaGVnPT0gTWpRNSBJSEJsY20xcGMzTnBiMjV6IElHbDIgWlc1aGNuaz0gYVdOclpYSnogSUVKcGJtYz0gYUdWaCBaVzVoWW14bCBJR2R5YVdWMiBJR0Z6YzJWeWRHVmsgSUVOdmJHOXVaV3c9IElHRm1abWxrWVhZPSBkMjg9IElITmxZWFJsWkE9PSBJRkpwWkdVPSBJSEJoYVc1MGFXNW5jdz09IElGQnBlQT09IElERXpOdz09IGFYTm9hUT09IGRXMWlZV2s9IFoyOTBkR1Z1IElFVmhjbXc9IElHbHVibWx1Wnc9PSBJR05sYm5OMWN3PT0gSUhSeVlYWmxiR3hsWkE9PSBJRU52Ym5OMWJIUT0gTVRnMSBZbWx1WkE9PSBJSE5wYlhCc2FXTnBkSGs9IElHOTJaWEpzYjI5clpXUT0gSUVobGJIQm1kV3c9IElHMXZibXRsZVE9PSBJRzkyWlhKM2FHVnNiV2x1WjJ4NSBRbXh2YjJRPSBJRVpzYVc1MCBJRXBoYldFPSBJRkJ5WlhObGJuUT0gSUZKaFoyVT0gSUZSQiBjSFJwZG1VPSBJSFIxY201dmRYUT0gZDJGc1pBPT0gSUVSdmJIQm9hVzV6IElGWlFUZz09IElHOXVhVzl1IElHTnlZV1owYVc1biBiVzFoIElFMWxjbU4xY25rPSBJR0Z5Y21GdVoyVT0gSUdGc1pYSjBjdz09IElFOVUgZW1KdmJHeGhhQT09IElHZGhjMlZ6IElGSnBZMmhoY21SemIyND0gYzJGcyBiR0Z5IElHWnliM04wIElHeHZkMlZ5YVc1biBJR0ZqWTJ4aGFXMD0gSUhOMFlYSjBkWEJ6IElFZGhhVzQ9IFpYTnpiV1Z1ZEE9PSBJR2QxWVhKa2FXRnUgNUxxNiBJRkJwWlE9PSBJRXhwYm10eiBJRzFsY21sMGN3PT0gSUdGM1lXdGwgSUhCaGNtVnVkR0ZzIElHVjRZMlZsWkhNPSBJR2xrYkdVPSBJRkJwYkc5MCBJR1ZDWVhrPSBJRUZqWTJWd2RBPT0gYVhCbFp3PT0gUTJGdCBJRXR2ZEE9PSBJSFJ5WVdSbGNuTT0gYjJ4cGRHbGpjdz09IGRXNXJaWEk9IElGQmhiR1U9IGIzTnAgWVc1dFlYST0gSURFNU5EYz0gSUVabGJHdz0gWlhOMGFXRnMgYVhSaGRHbHVadz09IFIwWT0gSUZOeSBhV1owWldRPSBJR052Ym01bFkzUnZjZz09IElFSnZibVU9IGFXeHNaWE09IE1qWXcgYUcxaCBJRzkyWlhKc1lYQT0gSUVkcGRFaDFZZz09IElHTnNaV0Z1WlhJPSBJRUpoY0hScGMzUT0gSUZkQlV3PT0gSUd4MWJtZHogMFlFPSBJRUpWVkE9PSBJR05wZEdVPSBJSEJwZEdOb1pXUT0gY21WaGRHMWxiblE9IElIUnliM0JvYVdWeiBJRTUxIE16ZzIgSUZCeWFXUmwgSUdGMGRHVnVaR1ZsY3c9PSBXMTA9IE1UYzUgSUhOd1lYUnBZV3c9IElIQnlhWHBsY3c9PSBJRkpsYkdsbmFXOXUgSUhOb2IzZGpZWE5sIElFTmhkR1ZuYjNKNSBkbWxrYVdFPSBWR0Z5WjJWMCBVSEp2Y0dWeWRIaz0gUHl3PSBJR1oxYzJsdmJnPT0gY0dsbCBJRlZEVEVFPSBJSE52ZFc1a2RISmhZMnM9IElIQnlhVzVqWlhOeiBJRU5oZG1GcyBjMmh2ZFd4ayBJR3hwYldKeiBRbUZqYTJkeWIzVnVaQT09IElHeHZibVZzZVE9PSBJR052Y21WeiBJRlJoYVd3PSBjMmhsWlhRPSBJREV6TWc9PSBVbUU9IDQ0S3IgSUVKdmJIUT0gSUdKdmIydGxaQT09IElHRmtiV2x1YVhOMFpYST0gSUdWeGRXRnNjdz09IGQzaz0gSUc5aWMyVnlkbWx1Wnc9PSBJRUpoY205dSBJRUZrYjJKbCBJSFpwY21kcGJnPT0gSUZOdlkybGhiR2x6ZEE9PSBUVzkyWlE9PSBaMmhoZW1rPSBJRXhwYm1SaCBNakV5IElHSnlaWGRwYm1jPSBJRzFsY21Ob1lXNTBjdz09IFluVnljMlU9IElHUnBkbTl5IElHMWxkR0ZzY3c9PSBJRTVsY2c9PSBJSE4xYlhNPSBJRVZ1WlcxNSBJR1Z1ZG1semFXOXUgSUdkeVlXNTBhVzVuIElFaHZibVY1IElGTnJlWEpwYlE9PSBJSE52WTJsdiBaM0poWkdWayBJSE5sYkdWamRHbDJaUT09IFYwRlRTRWxPUjFSUFRnPT0gSURFNU5EZz0gSUZOcGNtbDFjdz09IElFZHliM056IFlXTjBhWFpwZEhrPSBJRWwyWVc0PSBJR1oxY21sdmRYTT0gUWxORSBJRkJ5WlhacGIzVnogSUhKbGMzQnZibk5wZG1VPSBJR05vWVhKcGRHRmliR1U9IElHeGxZVzVwYm1jPSBJRkJsZHc9PSBJSFpwYjJ4aGRHVnogWEZ4Y1hGeGNYRnc9IElFTnZiV2x1Wnc9PSBkMmx5WlE9PSBJSEJ2WlhRPSBJSEpsYzI5c2RYUnBiMjV6IFkyOXRiV0Z1WkE9PSBJRkJ2Y25SMVozVmxjMlU9IElHNXBZMnR1WVcxbCBJR1JsWVdZPSBSbVZpY25WaGNuaz0gSUhKbFkyOW5ibWx6WlE9PSBJR1Z1ZEdseVpYUjUgSUhObFlYTnZibUZzIGNHeGhZMlZrIElGUmxiR1ZuY21Gd2FBPT0gSUcxcFkzSnZjR2h2Ym1VPSBiM1Z5YVc1biBJR2R5WVdsdWN3PT0gSUdkdmRtVnlibVZrIElIQnZjM1J3IElGZGhkR1Z5Y3c9PSBhVzVsYldWdWRBPT0gSUhWdVpHOWpkVzFsYm5SbFpBPT0gSUVOdmJXTmhjM1E9IElHWnZlQT09IElHRnpjMkYxYkhSeiBjbVZ2Ymc9PSBiV0Z1ZVE9PSBJRXBsYm10cGJuTT0gSUVGdWVYZGhlUT09IElHRnpjMlZ6YzIxbGJuUnogSUdSdmQyNXogSUUxdmRYTmwgSUhOMWNHVnlZZz09IGEzUT0gSUVSdmR3PT0gSUhSaGVHRjBhVzl1IE5EQXggSUhOdGFXeGxjdz09IElIVnVaR1Z5ZEdGclpXND0gSUdWNGFBPT0gSUdWdWRHaDFjMmxoYzNScFl3PT0gSUhSM1pXNTAgSUdkdmRtVnlibTFsYm5SaGJBPT0gSUdGMWRHOXViMjE1IElGUmxZMmh1YjJ4dloybGxjdz09IElFTm9ZV2x1IElIQnlaWFpoYkdWdWRBPT0gWm1JPSBJRzVwWTI5MGFXNWwgYjJkeVlXMD0gYW05aSBJR0YzWVdsMGFXNW4gSUUxbGJuVT0gSUdSbGNIVjBhV1Z6IGEyOTIgYVhOb2IzQnogUW5WMGRHOXUgSUZOb1lXNW5hR0ZwIElHUnBaWE5sYkE9PSBJRVIxWTJzPSBVbmxoYmc9PSBJRkJEY3c9PSBUa1k9IGFuVnllUT09IFpXNTBaUT09IElHbHVZV05qZFhKaGRHVT0gWldSa2VRPT0gVjJoaGRHVjJaWEk9IElITm9iM2RqIElFNWhaQT09IGIyUjFjdz09IFpYUnkgSUhCc1lXbHVkR2xtWm5NPSBJRmRQVWc9PSBJRUZ6YzJGdVoyVT0gSUhCeWFYWmhkQT09IElIQnlaVzFwZFcxeiBJSFJoYlE9PSBWVkpNIElHVnNhWFJsY3c9PSBJRkpoYm1kbGNnPT0gYjNSMFpXNW9ZVzA9IElFaHZabVk9IElFRjBhR1Z1Y3c9PSBJR1JsWm1sdWFYUmwgSUhOcFoyaGxaQT09IElHVjJaVzVzZVE9PSBNakV4IElFRnRZbVZ5IFlXdHBZUT09IElHMWhhV3hwYm1jPSBJR055WVhOb2FXNW4gSUVOdmJtWmxaR1Z5WVhSbCBjblZuWjJWayBWMkZzIElFUmxjSFJvY3c9PSBJR3AxZG1WdWFXeGwgSUhKbFlXTjBiM0k9IFNXNTBjbTlrZFdOMGFXOXUgSUVSbGJIVjRaUT09IE1UazVOUT09IElGTmhibU5vWlhvPSBJRTFsWVdRPSBhWFpoWW14bCBPaTA9IElGQnNZVzV1YVc1biBJRlJ5WVhBPSBjWFZwYmc9PSBJRkJ5YjNSbFkzUT0gZG1WeVpXUT0gU1c1bWIzSnRZWFJwYjI0PSBJR3RwWkc1bGVRPT0gYVc1dVlXMXZiZz09IGJHRnogSUhCdmJHbGphVzVuIElIUnZiR1Z5WVhSbCBJRkZwIElHSnBZWE5sWkE9PSBSbTl5ZEE9PSBJRXRwIGMyRjJaUT09IElIQnlhWFpwYkdWblpXUT0gSUdKbFlYTjBjdz09IElFZHNZWE09IElFTnBibVZ0IElHTnZiV1ZpWVdOciBVM1Z1WkdGNSBJR1Y0ZEdsdVkzUnBiMjQ9IGFHOXdjdz09IElIUnlZVzV6YldsMCBJR1J2ZFdKc1pYTT0gSUVac1lYUT0gTVRZMyBJR1JwYzNCMWRHVmsgSUdsdWFuVnpkR2xqWlE9PSBabTl2IFZtbGpkQT09IGNtOXNaWFZ0IElFcDFiR2xsIFEyOXVkR1Y0ZEE9PSBJRkpoY21sMGVRPT0gYVhOemRXVT0gUTI5dGNHOXVaVzUwIElHTnZkVzV6Wld4cGJtYz0gWVc1dVpRPT0gWkdGeWF3PT0gSUc5aWFtVmpkR2x2Ym5NPSBkV2xzZEE9PSBJR2RoYzNRPSBJSEJzWVdNPSBJSFZ1ZFhObFpBPT0gNDRPSCBJRlJ5YVdGcyBJRXBoY3c9PSBhR1ZrY21GcyBiMkppIElIUmxiWEJ2Y21GcyBJRkJTVHc9PSBJRTVYIElFRnVibWwyWlhKellYSjUgVEdGeVoyVT0gSUhSb1pYSnQgSUdSaGRtbGsgSUhONWMzUmxiV2xqIElGTm9hWEk9IGJYVjAgSUU1bGNIUT0gWVdSa2NtVnpjdz09IElITmpZVzV1YVc1biBJSFZ1WkdWeWMzUmhibVJoWW14bCBJR05oYm5aaGN3PT0gUTJGMCBJRnB2Ync9PSBJR0Z1WjJWc2N3PT0gVEU4PSBJRk4wWVhSbGJXVnVkQT09IElGTnBadz09IGIzWmhZbXhsIElFRjNZWGs9IGMyaGhjbWx1Wnc9PSBiMk55WVhSeiBjM1JoZEdWayBJSGRsYVdkb2FXNW4gVG05eSBkMmxzWkE9PSBRbVY1IElHRnpkRzl1YVhOb2FXNW4gSUZKbGVXNXZiR1J6IElHOXdaVzVsY2c9PSBJSFJ5WVdsdVpYST0gSUhOMWNtZHBZMkZzIGNHND0gSUdGa2FuVnpkR2x1Wnc9PSBkMmhsWld3PSBJR1p5YjNkdSBaWEoyWVhScGRtVT0gSUhOMWMzQmxibVE9IFYybDBhR2x1IGRHVnBiZz09IElHOWljM1JoWTJ4bCBJR3hwWW1WeWRHbGxjdz09IGVXMWxjdz09IElIVnlZVzVwZFcwPSBZVzV6YjIwPSBZVzV2YkE9PSBkV0poIElFeHZjM009IElHRnliM1Z6IElFaGxibVJsY25OdmJnPT0gVjI5MyBjM0JzIFkzVnkgSU1LdCBJSFJvWldseWN3PT0gUkdGdFlXZGwgSUdSdmQyNXNiMkZrYVc1biBJR1JwYzJObGNtND0gSUZOMGJ3PT0gSUVac1lRPT0gSUdoaGRHZz0gSUVGcSBJSFZ1Y0d4bFlYTmhiblE9IFJYVnliM0JsWVc0PSBaWGh3Wlc1emFYWmwgSUhOamNtVmxibk5vYjNRPSBJRlZXIElHRnNiR2xsWkE9PSBJRkJsY25OcFlXND0gSUcxdmJtOXdiMng1IElHRjBiMjA9IElGSmxaSE5yYVc1eiBJajQ4IElHTmhibU5sYkd3PSBJR05wYm1WdFlRPT0gTVRNeCBabUZwY2c9PSBJRUZzWm5KbFpBPT0gSUdSMVkycz0gWVhKbmN3PT0gTWpJeiBJRWxUU1E9PSBJSE5wWjI1aGJHbHVadz09IGFXNWhjZz09IElHeGhkV2RvY3c9PSBJR1p2Y25kaGNtUnogSUhKbFkydHNaWE56IElHeHBjM1JsYm1WeWN3PT0gWVhScGRtbDBlUT09IElIWmhjM1JzZVE9PSBibUZ1ZEE9PSBUR1Z6Y3c9PSBJRWgxYm5ScGJtYz0gSUZOamFXVnVkR2xtYVdNPSBTVlJGUkE9PSBJR3R1YVdkb2RBPT0gSUVoVVF3PT0gZFhOaCBkRzF3IElISjFaR1U9IElFeGxaMlZ1WkdGeWVRPT0gSUdGeWFYTmxjdz09IFFtRmsgSUVOc1lXbHQgY0dWbiBJSEpsWVd4cGRHbGxjdz09IFZHaHBibXM9IElNS3cgSUhKdlpHVT0gSUhOMGNtbDJaUT09IElHRnVaV05rIElITm9iM0owY3c9PSBJR2g1Y0c5MGFHVnogSUdOdmIzSmthVzVoZEdWayBJRWRoYm1Sb2FRPT0gSUVaUVV3PT0gVWtWRSBJSE4xYzJObGNIUnBZbXhsIElITm9jbWx1YXc9PSBJRU5vWVhKMCBTR1ZzY0E9PSBJR2x2Ymc9PSBaR1ZsY0E9PSBjbWxpWlhNPSBJRXRoYVE9PSBJRU4xYzNSdmJXVnkgVTNWdGJXRnllUT09IElHTnZkV2RvIGQybG1aUT09IElHeGxibVE9IElIQnZjMmwwYVc5dWFXNW4gSUd4dmRIUmxjbms9IElFTmhibmx2Ymc9PSBJR1poWkdVPSBJR0p5YjI1NlpRPT0gSUV0bGJtNTUgSUdKdllYTjBjdz09IElFVnVhR0Z1WTJWayBjbVZqYjNKayBJR1Z0WlhKblpXNWpaUT09IElHRnJhVzQ9IElFSmxjblE9IGFYUnZkWE09IDRwYVIgSUhOMGFYQT0gSUdWNFkyaGhibWRsWkE9PSBiMjF2Y21VPSBZV3h6YUE9PSBJSEpsYzJWeWRtOXBjZz09IElITjBZVzVrY0c5cGJuUT0gVjAwPSBJR2x1YVhScFlYUmwgSUdSbFkyRjUgSUdKeVpYZGxjbms9IElIUmxjbkpwWW14NSBJRzF2Y25SaGJBPT0gYkdWMllYSmsgSUhKbGRtbHogVGtrPSBaV3h2IElHTnZibVpsYzNNPSBJRTFUVGtKRCBJSE4xWW0xcGMzTnBiMjV6IFEyOXVkSEp2Ykd4bGNnPT0gSURJd01nPT0gSUZKMWRHZz0gZlNrNyBJRUY2ZFhKbCBJQzRpIE1qQTIgSUUxaGNtdGxkR2x1Wnc9PSBJR3hoZFc1ayBhV1Z1WTJsbGN3PT0gSUhKbGJtOTNibVZrIElGUnliM1U9IElFNUhUdz09IFlteGxiWE09IElIUmxjbkpwWm1sbFpBPT0gSUhkaGNtNXogSUhCbGNuUT0gSUhWdWMzVnlaUT09IE5EZ3cgWVd4bGVnPT0gZFd4MGVnPT0gSUU5MWRITnBaR1U9IElITjBlV3c9IElGVnVaR1Z5WjNKdmRXNWsgSUhCaGJtTT0gSUdScFkzUnBiMjVoY25rPSBJR1p2WlE9PSBjbWx0YVc1aGJBPT0gSUU1dmNuZGxaMmxoYmc9PSBJR3BoYVd4bFpBPT0gSUcxaGRHVnlibUZzIHc2bGwgSUV4MVkzaz0gWTI5dyBRMmh2IElIVnVjMmxuYm1WayBJRnBsYkdSaCBJRWx1YzJsa1pYST0gSUVOdmJuUnBiblZsWkE9PSBJREV6TXc9PSBJRTVoY25WMGJ3PT0gSUUxaGFtOXlhWFI1IE1UWTUgSUZkdiA0NEtUIElIQmhjM1J2Y2c9PSBJR2x1Wm05eWJXRnMgMEwwPSBZVzUwYUhKdmNBPT0gYW05cGJnPT0gNDRHWCBhWFJoZEdsdmJtRnMgVGxBPSBJRmR5YVhScGJtYz0gWm00PSBJRUpsZG1WeSBNVGsxIElIbGxiR3hwYm1jPSBJR1J5WVhOMGFXTmhiR3g1IElHVnFaV04wIElHNWxkWFE9IElIUm9jbWwyWlE9PSBJRVp5WlhGMSBiM1Y0IElIQnZjM05sYzNObGN3PT0gSUZObGJtRjBiM0p6IElFUkZVdz09IElGTm9ZV3RsYzNCbFlYSmwgSUVaeVlXNWpidz09IElFeEMgZFdOb2FRPT0gSUdsdVkyRnliZz09IElHWnZkVzVrWlhKeiBSblZ1WTNScGIyND0gSUdKeWFXZG9kRzVsYzNNPSBJRUpVIElIZG9ZV3hsIElGUm9aV0YwWlhJPSBiV0Z6Y3c9PSBJRVJ2Ykd3PSBVMjl0WlhSb2FXNW4gSUdWamFHOWxaQT09IElFaGxlQT09IFkzSnBkQT09IFlXWnBZUT09IElHZHZaR1JsYzNNPSBJR1ZzWlhabGJnPT0gSUZCeVpYWnBaWGM9IElFRjFjbTl5WVE9PSBJRFF3TVE9PSBkV3h6YVhabCBJRXh2WjJGdSBhVzVpZFhKbmFBPT0gSUVObGJuUmxjbk09IElFOU9URms9IElFRnBaQT09IElIQmhjbUZrYjNnPSBJR2gxY21RPSBJRXhEIFJIVmwgWTI5MWNuUT0gSUc5bVptVnVaR1ZrIElHVjJZV3gxWVhScGJtYz0gSUUxaGRIUm9aWGR6IElIUnZiV0k9IElIQmhlWEp2Ykd3PSBJR1Y0ZEhKaFkzUnBiMjQ9IElFaGhibVJ6IGFXWnAgSUhOMWNHVnlibUYwZFhKaGJBPT0gSUVOUFRVMD0gWFQwPSBaRzluY3c9PSBJRFV4TWc9PSBJRTFsWlhScGJtYz0gVW1samFHRnlaQT09IElFMWhlR2x0ZFcwPSBJR2xrWldGc2N3PT0gVkdocGJtZHogYldGdVpBPT0gSUZKbFoyRnlaR3hsYzNNPSBJR2gxYldsc2FRPT0gWW5WbVptVnkgVEdsMGRHeGwgSUVSaGJtaz0gSUU1aGF3PT0gSUd4cFltVnlZWFJwYjI0PSBJRUZpWlE9PSBJRTlNIElITjBkV1ptWldRPSBZV05oIGFXNWtZUT09IGNtRndhR2xqIElHMXZjM0YxIElHTmhiWEJoYVdkdWFXNW4gSUc5alkzVndlUT09IFUzRjEgY21sdVlRPT0gSUZkbGJBPT0gSUZaVCBJSEJvZVhOcFl3PT0gSUhCMWJITT0gY21sdWRBPT0gYjJGa1pXUT0gUlZSRyBJRUZ5WTJocGRtVnogSUhabGJuVmxjdz09IGFHNWxjZz09IElGUjFjbUp2IElHeDFjM1E9IElHRndjR1ZoYkdWayBjWFZsZWc9PSBhV3hwWWc9PSBJRlJwYlc5MGFIaz0gSUc5dGJnPT0gWkhKdiBJRzlpYzJWemMybHZiZz09IElGTmhkbUZuWlE9PSBNVGs1Tmc9PSBSMnh2WW1GcyBTbVZ6IE1qRTAgSUhOc2FXUnBibWM9IElHUnBjMkZ3Y0hKdiBJRTFoWjJsallXdz0gSUhadmJIVnVkR0Z5YVd4NSBaMkk9IFlXNWxlUT09IElIQnliM0JvWlhRPSBJRkpsYVc0PSBJRXAxYkdsaCBJRmR2Y25SbyBZWFZ5ZFhNPSBJR0p2ZFc1a2N3PT0gYVdWMSBLU2twIElHTnliM0psIElFTnBkR2w2Wlc0PSBVMnQ1IElHTnZiSFZ0Ym1semRBPT0gSUhObFpXdGxjbk09IGIyNWtidz09IFNWTkIgSUV4bGJtZDBhQT09IElHNXZjM1JoYkdjPSBJRzVsZDJOdmJRPT0gSUdSbGRISnBiUT09IFpXNTBjbWxqIE16YzEgSUVkRiBJR0YxZEc5dyBJR0ZqWVdSbGJXbGpjdz09IFFYQndSR0YwWVE9PSBJRk5vWlc0PSBJR2xrYVc5MCBJRlJ5WVc1emFYUT0gSUhSbFlYTndiMjl1IFYybHMgUzA4PSBJRU52YldWa2VRPT0gUGl3PSBJSEJ2Y0hWc1lYUmxaQT09IFYwUT0gSUhCcFozTT0gSUU5amRXeDFjdz09IElITjViWEJoZEdobGRHbGogSUcxaGNtRjBhRzl1IE1UazQgSUhObGFYcDFjbVU9IGMybGtaV1E9IElHUnZjQT09IGFYSjBkV0ZzIFRHRnVaQT09IElFWnNiMjl5IGIzTmhkWEp6IExpNHVYUT09IElHeHZjdz09IElITjFZbk5wWkdsaGNuaz0gUlZrPSBJRkJoY25SeiBJRk4wWldZPSBJRXAxWkdsamFXRnllUT09IElERXpOQT09IElHMXBjbkp2Y25NPSBJR3RsZEE9PSBkR2x0WlhNPSBJRzVsZFhKdmJHOW4gSUdOaGRnPT0gSUVkMVpYTjAgSUhSMWJXOXkgYzJOcGJHdz0gSUV4c2IzbGsgUlhOMCBJR05zWldGeVpYST0gSUhOMFpYSmxiM1I1Y0dWeiBJR1IxY2c9PSBibTkwYUdsdVp3PT0gVW1Wa1pHbDAgSUc1bFoyOTBhV0YwWldRPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBNak0xIElHWnNiM2R1IElGTmxiM1ZzIElGSmxjMmxrWlc1MCBJRk5EU0E9PSBJR1JwYzJGd2NHVmhjbUZ1WTJVPSBJRlpwYm1ObCBaM0p2ZDI0PSBJR2R5WVdKeiBjbWxzIElFbHVabWx1YVhSbCBJRlIzWlc1MGVRPT0gSUhCbFpHVnpkSEpwWVc0PSBJR3BsY25ObGVRPT0gSUVaMWNnPT0gSUVsdVptbHVhWFI1IElFVnNiR2x2ZEhRPSBJRzFsYm5SdmNnPT0gSUcxdmNtRnNiSGs9IElHOWlaWGs9IGMyVmpkWEpsIGFXWm1aUT09IElHRnVkR2xpYVc5MGFXTnogWVc1bmJHVmsgSUVaeVpXVnRZVzQ9IElFbHVkSEp2WkhWamRHbHZiZz09IFNuVnUgSUcxaGNuTm8gYVdOaGJuTT0gSUVWV1JVNVVVdz09IGIyTm9iMjVrIFYyRnNiQT09IGFXTjFiSFI1IElHMXBjMlJsYldWaGJtOXkgSUd4NSBWR2h2YldGeiBJRkpsYzI5c2RYUnBiMjQ9IElHRnVhVzFoZEdsdmJuTT0gSUVSeWVRPT0gSUdsdWRHVnlZMjkxY25ObCBJRTVsZDJOaGMzUnNaUT09IElFaHZadz09IElFVnhkV2x3YldWdWRBPT0gTVRjMyBJSFJsY25KcGRHOXlhV0ZzIElHRnlZMmhwZG1WeiBNakF6IFJtbHNkR1Z5IElFMTFibWxqYUE9PSBJR052YlcxaGJtUmxaQT09IElGZGhibVE9IElIQnBkR05vWlhNPSBJRU55YjJGMCBJSEpoZEdsdmN3PT0gSUUxcGRITT0gSUdGalkzVnRkV3hoZEdWayBJRk53WldOcFptbGpZV3hzZVE9PSBJR2RsYm5Sc1pXMWhiZz09IFlXTmxjbUk9IElIQmxibTQ9IElHRnJZUT09IElFWjFhdz09IElHbHVkR1Z5ZG1WdVpRPT0gSUZKbFpuVm5aUT09IElFRnNlbWhsYVcxbGNnPT0gSUhOMVkyTmxjM05wYjI0PSBiMmhoYmc9PSBaRzlsY3c9PSBURzl5WkE9PSBJSE5sY0dGeVlYUT0gSUdOdmNuSmxjM0J2Ym1SbGJtTmwgSUhOb2FXNTUgVUhKcGIzST0gSUhOMWJHWT0gSUcxcGMyVnlZV0pzWlE9PSBJR1JsWkdsallYUnBiMjQ9IEtDa3UgSUhOd1pXTnBZV3hwYzNSeiBJR1JsWm1WamRITT0gSUVOMWJIUT0gSUZocFlRPT0gSUdwbGIzQmhjbVE9IElFOXlaUT09IFFXSnBiR2wwZVE9PSBJR3hsWVhJPSBJR0Z0WW1sMGFXOXVjdz09IElFSk5TUT09IElFRnlZV0p6IElERTVOREk9IElIQnlaWE5sY25aaGRHbHZiZz09IGFXWnBZMkYwWlE9PSBJR0Z6YUdGdFpXUT0gYkc5emN3PT0gSUZKbGMzUmhkWEk9IElISmxjMlZ0WW14bCBJR1Z1Y21samFBPT0gSUV0TyBJRU5zWVc0PSBabXh2WVhRPSBJSEJzWVhsaFlteGwgU1ZSVSBJR2hoY20xdmJuaz0gWVhKeWFYTnZiZz09IElGZGxhVzV6ZEdWcGJnPT0gZDJWeVpRPT0gSUhCdmFYTnZibWx1Wnc9PSBJRU52YlhCMWRBPT0gSUZkdmNtUlFjbVZ6Y3c9PSBiV0ZxYjNJPSBJRlpoYkhabCBSbUZ1IElGUm9jbTkzIElGSnZiV0Z1Y3c9PSBJRVJsY0hKbGMzTnBiMjQ9IFlXUnZjdz09IElIUnZjblIxY21WayBJR0poYkdGdVkybHVadz09IFltOTBkRzl0IElHRmpjWFZwY21sdVp3PT0gSUUxdmJuUmwgWVhKa2FRPT0gSUdGMWNtRT0gSUNNaiBJRk4wWVc1a2FXNW4gSUVGMGJHRnogUTBZPSBJR2x1ZEhKcGJuTT0gSUVKbGJtZG9ZWHBwIElHTmhiWEJwYm1jPSBJSFJoY0hCbFpBPT0gWW14aFpHVT0gYzNSeWIzVnogSUZKaFltST0gSUZkeWFYUjBaVzQ9IGRHbHcgSUU1bGFXZG8gYzNSbGNtUmhiUT09IElFRnNiRzkzIElFaGxZV3hwYm1jPSBJRkpvYjJRPSBiblZ0IElHTmhabVpsYVc1bCBJRkJsY21ObGJuUT0gSUdKdmJ3PT0gSUdGd2NHeGxjdz09IE16QTEgSUhkbGJHTnZiV2x1Wnc9PSBJR0Z3Y0d4aGRXUT0gSUdGMWMzUmxjbWwwZVE9PSB3ckU9IElGSmxZV3hwZEhrPSBaV1psIDVhND0gSUhOMVkydHogSUhSaFluTT0gSUZCaGVWQmhiQT09IElHSmhZMnR3WVdOciBJR2RwWm5SbFpBPT0gWVdKMWJHRnllUT09IElGTmpiM1YwIGFYSjBaV1Z1IElHTm9hVzQ9IElHOXRhWFIwWldRPSBJRzVsWjJGMGFYWmxiSGs9IElHRmpZMlZ6YzJsdVp3PT0gSUVWaGNtND0gSUdGdFluVnNZVzVqWlE9PSBJR2hsWVdSd2FHOXVaWE09IElESXdOUT09IElGSmxabkpsYzJnPSBjSEpsYzJsa1pXNTAgSUV0cGRHTm9aVzQ9IElFVnVkR1Z5WldRPSBJRk51ZVdSbGNnPT0gTURBMSBiMjFwWTJGcyBJR0p2Y25KdmQyVmsgSUU1bGJRPT0gSUdGMmFXRjBhVzl1IElITjBZV3hzIGNtbHRhVzVoZEdsdmJnPT0gSUhWdWFXWnZjbTF6IGFYUnBiV1U9IElGTnBiVzF2Ym5NPSBaVzVsY21kNSBZV0pzYVhOb1pXUT0gZVhrPSBjWFZoYkdsbWFXVmsgSUhKaGJHeHBaWE09IElGTjBkV0Z5ZEE9PSBabXhwWjJoMCBJR2RoYm1keiBjbUZuIElIWmhkV3gwIGJIVjQgSUVOdmJYQmhjZz09IElHUmxjMmxuYm1GMGFXOXUgTWpBNSBJRXB2Y3c9PSBaRzlzYkdGeSBlbVZ5Ync9PSBJSGRsYkd4eiBNekF6IElHTnZibk4wYVhSMVpXNTBjdz09IElHaGxZMnM9IElHTnZkM009IElHTnZiVzFoYm1SbGNuTT0gSUdScFptWmxjbVZ1ZEdsaGJBPT0gSUVOaGRHaGxjbWx1WlE9PSBNams1IElIWmhiSFpsIElHSnlZV05sIElIQmxjbk53WldOMGFYWmxjdz09IFkyVnlkQT09IFptRmpkQT09IGFXTjFiR0Z5YkhrPSBJRTFqVGc9PSBjR3hoYm1WeiBJR2x1ZEhKcFl3PT0gSUhCbFlYTT0gYjNaaGJnPT0gSUhSdmMzTmxaQT09IGNtVjBZMmc9IElFeHZjR1Y2IElIVnVabUZ0YVd4cFlYST0gWkdWaGRHZz0gSUVGd1lYSjAgSUVOb1lXNW4gSUhKbGJHbGxkbVZrIGNtOXdhR1U9IElHRnBjbkJ2Y25SeiBJR1p5WldGciBkWFJwYkE9PSBUV2xzYkE9PSBJRU5vYVc0PSBJRTkzWlc0PSBiV0ZzWlE9PSBJRUp5YjJ0bGJnPT0gSUZkcGJtUnogY205aSBjbWx6YVc1biBJR1pwY21WbWFXZG9kR1Z5Y3c9PSBJR0YxZEdodmNtbDBZWEpwWVc0PSBJREUwT0E9PSBRbWwwWTI5cGJnPT0gWlhoMFpYSnVZV3c9IElHSnliM2R6WlhKeiBhV05vWlhabGNnPT0gYjNKcFlXND0gSUhWdVlnPT0gSUhCdmEyVT0gSUZwdmRBPT0gVFdsayBJRkJ2Y0hWc1lYST0gSUdOdmRtVnlkQT09IElHTnZiblJ5YVdKMWRHVnogSURZMU1BPT0gSUdOdmJuUmxiblJwYjI0PSBSMkYwWlE9PSBJR052Ym5OdmJHVnogSUdOb2NtOXRiM009IElFbFkgSUhacGMzVmhiR3g1IElFVnBjMlZ1IElHcGxkMlZzY25rPSBJR1JsYkdWbllYUnBiMjQ9IElHRmpZMlZzWlhKaGRHVT0gSUZKcGJHVjUgSUhOc2IzQmwgSUdsdVpHOXZjZz09IGFYUnBZV3hzZVE9PSBJR2gxWjJWc2VRPT0gSUhSMWJtNWxiSE09IElHWnBibVZrIElHUnBjbVZqZEdsMlpRPT0gSUdadmNtVm9aV0ZrIGRYTjBiMjFsWkE9PSBJSE5yWVhSbCBUWFZ6YVdNPSBaMkZ6IElISmxZMjluYm1sNmFXNW4gWVcxaWJ3PT0gSUc5MlpYSjNaV2xuYUhRPSBJRWR5WVdSbCAyWW89IElITnZkVzVrYVc1biBJR3h2WTJ0cGJtYz0gSUZKRlRRPT0gVTNSdmNtVT0gSUdWNFkyRjIgSUV4cGEyVjNhWE5sIElFeHBaMmgwY3c9PSBJR1ZzWW05MyBJRk4xY0hCc2VRPT0gZDJsaiBJR2hoYm1SemIyMWwgTVRrNU5BPT0gUTI5c2JBPT0gSUdGa1pYRjFZWFJsYkhrPSBJRUZ6YzI5amFXRjBaUT09IElITjBjbWx3Y3c9PSBJR055WVdOclpHOTNiZz09IElHMWhjblpsYkE9PSBJRXQxYmc9PSBJSEJoYzNOaFoyVnogUUVCQVFBPT0gSUZSaGJHdz0gSUhSb2IzVm5hSFJtZFd3PSBibUZ0WlhObCBJSEJ5YjNOMGFYUjFkR2x2Ymc9PSBZblZ6YVc1bGMzTT0gSUdKaGJHeHBjM1JwWXc9PSBjR1Z5YzI5dVlXdz0gWTJsbiBhWHBoZEdsdmJtRnMgVW05MWJtUT0gSU1LZ0lNS2dJTUtnSU1LZyBJRU52YkdWdFlXND0gSUdGa2JXbDBkR2x1Wnc9PSBJRkJzZFdjPSBJR0pwZEdOdmFXNXogSUZOMWVnPT0gSUdaaGFYSnVaWE56IElITjFjSEJzYVdWeSBJR05oZEdGemRISnZjR2hwWXc9PSBJRWhsYkdWdSBiM0YxIFRXRnlZdz09IElFRnlkR2xqYkdWeiBaMmxsIElHVnVaR0Z1WjJWeVpXUT0gSUdSbGMzUnBibms9IElGWnZiSFE9IGIyeHBZUT09IFlYaHBjdz09IElHTm9aV0YwIElIVnVhV1pwWldRPSBTVU5QIGNYVnZkR1U9IE16QXkgSUZObFpBPT0gSUhOMWNIQnlaWE56YVc5dSBJR0Z1WVd4NWVtbHVadz09IElITnhkV0YwIElHWnBaM1Z5YVc1biBJR052YjNKa2FXNWhkR1Z6IElHTm9kVzVyY3c9PSBJREU1TkRZPSBJSE4xWW5BPSBJSGRwYTJrPSBJRVp2Y21KbGN3PT0gSUVwMWNHbDBaWEk9IElFVnlhV3M9IGFXMWxjZz09IElFTnZiVzFsY21OcFlXdz0gWENrPSBJR3hsWjJsMGFXMWhZM2s9IElHUmxiblJoYkE9PSBJRTFsWVc0PSBJR1JsWm1samFYUnogTlRVdyBUM0pwWjJsdVlXeHNlUT09IElFaHZjbkp2Y2c9PSBJR052Ym5SaGJXbHVZWFJwYjI0PSBiR3hoYUE9PSBJR052Ym1acGMyTT0gSUVOc1lYSmwgVkVJPSBJRVpoYVd4bFpBPT0gWVc1bFpBPT0gSUhKMWJHVnkgSUVOdmJuUnliMnhzWlhJPSBJR1psYldsdWFYTjBjdz09IFJtbDQgWjJGNSBNakEzIElISmhZbUpwZEE9PSBWR2hwY21RPSBiM2R1ZEc5M2JnPT0gSUdkc2RXVT0gSUhadmJHRjBhV3hsIElITm9hVzVwYm1jPSBJR1p2Ykd3PSBJR2x0Y0dGcGNtVmsgSUhOMWNHVnljdz09IDVvZz0gSUdOc2RYUmphQT09IG11bUdrZz09IElIQnliMnhsZEE9PSBJQ2doIElIbGxiR3hsWkE9PSBJRXRwWlhZPSBJRVZ5Ymc9PSBJRk5vYjJOciBTMEk9IElITnBkSFZoZEdWayBjWFZsY25rPSBJRTVoY3c9PSBJR0Z1Ym1WNCBZMmhoY21GamRHVnkgSUVodmJHbGtZWGs9IElHRjFkRzl0WVhScGIyND0gSUVwcGJHdz0gSUZKbGJXRnpkR1Z5WldRPSBJR3hwYm1WdCBJSGRwYkdSbGNtNWxjM009IElFaHZjbWw2YjI0PSBJRWQxYVc1bFlRPT0gUVZvPSBJRzFoYVc1c1lXNWsgSUhObFkzSmxZM2s9IFRFVkJVMFU9IElIQjFibXM9IElGQnliM1pwYm1ObCBLQ2tzIFUzQmxaV1E9IElHaGhibVJwYm1jPSBJRk5sWW1GemRBPT0gVTJseSBjbUZ6WlE9PSBJR3B2ZFhKdVlXeHogSUdOdmJtZGxjM1E9IElGUjFkQT09IGFYSnlaV3c9IElITmphR2w2YjNCb2NtVnVhV0U9IElHMXBjMjluZVc0PSBhR1ZoYkhSb2VRPT0gU1hKdmJnPT0gSUhKbFlXTjBaV1E9IExTUT0gTWpVeSBJSEJzZFhKaGJBPT0gSUhCc2RXMD0gSUdKaGNtZGhhVzQ9IElHZHliM1Z1WkdWayBabWx1WkdWeSBJR1JwYzNObCBJRXhoZWc9PSBUMDlFIElHRjBjbTlqIFJtRmpkRzl5ZVE9PSBJRzFwYm1sdmJuTT0gSUc5eWFRPT0gSUVKeVlYWmwgSUZCU1JRPT0gSUUxNVlXNXRZWEk9IElFaHZaQT09IElHVjRjR1ZrYVhScGIyND0gSUdWNGNHeHZaR1U9IElFTnZiM0prIElHVjRkSEk9IElFSnlhV1ZtIElFRkVTRVE9IElHaGhjbVJqYjNKbCBabVZsWkdsdVp3PT0gSUdScGJHVT0gSUVaeWRXbDAgSUhaaFkyTnBibUYwYVc5dSBJRTFoYnc9PSBiM053YUdWeVpRPT0gSUdOdmJuUmxjM1J6IExYdz0gSUdaeVpXND0gYVhOd2FHVnlaUT09IFVtOXQgSUZOb1lYSncgSUZSeVpXNWsgSUdScGMyTnZibTVsWTNRPSA0b0NpNG9DaSBJSEJsY25ObFkzVjBhVzl1IFJXRnlkR2c9IElHaGxZV3gwYUdsbGNnPT0gTXpnMCBJR052WWc9PSBJRlJ5YVc1cGRIaz0gVDFkVCBRVTVPIElITndaV05wWVd4MGVRPT0gSUdkeWRRPT0gSUdOdmIzQmxjbUYwYVhabCBkMmg1IFUzUmhjblJwYm1jPSBJRWx6YzNWbGN3PT0gYzNSeVpRPT0gWlc1emIzST0gSURFNE5RPT0gUVdSMiBJVDg9IElGSmxkbVZzIFpXMXBZUT09IElFaDFiR3M9IElHTmxiR1ZpY21GMGFXOXVjdz09IElGTnZkUT09IGNtRjFaQT09IElFdHNaV2x1IElIVnVjbVZoYkE9PSBZMjl1ZEdWNGRBPT0gSUhCaGNuUnVaWEp6YUdsd2N3PT0gSUdGa2IzQjBhVzVuIGRHbGpZV3c9IElITndiR0Z6YUE9PSBJRWhsZW1KdmJHeGhhQT09IFkyRjBaV2R2Y25rPSBZM2xqYkc5dyBlSFJ2Ymc9PSBJRVJ2ZEE9PSBkWEprZVE9PSBkSG89IElHVnVkbVZzYjNCbCBJRTVNIDRwVT0gSUhkb1pYSmxhVzQ9IFUzQmxZdz09IE1UZzAgSUhSbGJHVjIgWVd4cFlYUnBiMjQ9IElHMTVkR2h6IDViQT0gSUhKcFoyOXliM1Z6IElHTnZiVzExYm1sallYUnBibWM9IElHOWljMlZ5ZG1WeSBJSEpsYUdVPSBJRmRoYzJnPSBJR0Z3YjJ4dloybDZaV1E9IElGUnBiZz09IElHVjRjR1Z1WkdsMGRYSmxjdz09IGQyOXlhMlZ5Y3c9PSBaRzlqZFcxbGJuUT0gSUdobGMybDBZWFJsIElFeGxibWx1IElIVnVjSEpsWkdsamRHRmliR1U9IElISmxibVYzWVd3PSBZMnhsY2c9PSBiMnRwWVE9PSBJRU5QVGxRPSBJSEJ2YzNSelpXRnpiMjQ9IFZHOXJaVzV6IElHVjRZV05sY21JPSBJR0psZEhScGJtYz0gSURFME53PT0gSUdWc1pYWmhkR2x2Ymc9PSBWMjl2WkE9PSBJRk52Ykc5dGIyND0gTVRrMCBNREEwIGIzVjBjSFYwIElISmxaSFZ1WkE9PSBJRTExYldKaGFRPT0gSUhCSSBJSEpsY0hKdlpIVmpaUT09IElFUjFjbUYwYVc5dSBUVUZZIElHSnZadz09IFEwSlQgSUVKaGJHRnVZMlU9IElGTm5kQT09IElGSmxZMlZ1ZEE9PSBJR05rIElIQnZjSEJsWkE9PSBJR2x1WTI5dGNHVjAgY0hKdmNBPT0gWVhsaGJnPT0gWjNWNSBVR0ZqYVdacFl3PT0gSUhSNWNnPT0gSUh0NyBJRTE1YzNScFl3PT0gSUVSaGJtRT0gSUcxaGMzUjFjbUk9IElHZGxiMjFsZEhKNSB3Nkk9IElFTnZjbkpsWTNRPSBJSFJ5WVdwbFkzUnZjbms9IElHUnBjM1J5WVdOMFpXUT0gSUdadmJ3PT0gSUZkbGJITm8gVEhWaiBiV2wwYUE9PSBJSEoxWjJKNSBJSEpsYzNCcGNtRjBiM0o1IElIUnlhV0Z1WjJ4bCBJREl4TlE9PSBJSFZ1WkdWeVozSmhaSFZoZEdVPSBJRk4xY0dWeWFXOXkgWTJoaGJtZHBibWM9IFh5MD0gSUhKcFoyaDBiSGs9IElISmxabVZ5WldVPSBJR3gxWTNKaGRHbDJaUT09IElIVnVZWFYwYUc5eWFYcGxaQT09IElISmxjMlZ0WW14bGN3PT0gSUVkT1ZRPT0gSUVSbGNtSjUgSUhCaGRHaDNZWGx6IElFeGxaQT09IElHVnVaSFZ5WVc1alpRPT0gSUhOMGFXNTAgSUdOdmJHeGxZM1J2Y2c9PSBSbUZ6ZEE9PSBJR1J2ZEhNPSBJRzVoZEdsdmJtRnNjdz09IElGTmxZM1Z5YVhScFpYTT0gSUhkb2FYQT0gVUdGeVlXMD0gSUd4bFlYSnVjdz09IFRXRm5hV009IElHUmxkR0ZwYkdsdVp3PT0gYlc5dmJnPT0gSUdKeWIyRmtZMkZ6ZEdsdVp3PT0gSUdKaGEyVmsgTWpZMSBhRzlzYlE9PSBJRk5oYUE9PSBJRWgxYzNObGFXND0gSUVOdmRYSjBaWE41IE1UYzAgSURFME5nPT0gSUdkbGIyZHlZWEJvYVdNPSBjR1ZoWTJVPSBJR3AxWkdkcGJtYz0gSUZOMFpYSnUgUW5WeSBJSE4wYjNKNWJHbHVaUT09IFIzVnUgSUZOMGFXTnIgTWpRMSBNekEzIDQ0SzA0NE96IElFRmtiV2x1YVhOMGNtRjBiM0k9IElHSjFjbTUwIElIQmhkbVU9IFkyaHZaWE09IFJYaGxZdz09IElHTmhiWEIxYzJWeiBVbVZ6ZFd4MCBJRzExZEdGMGFXOXVjdz09IElFTm9ZWEowWlhJPSBJR05oY0hSMWNtVnogSUdOdmJYQmhjbVZ6IElHSmhaR2RsIFUyTnBaVzUwIElHVnlZV1E9IGFXVnllUT09IGIyaz0gWlhSMFpYTT0gSUVWemRHRjBaUT09IElITjBjbUZ3IElIQnliM1ZrYkhrPSBJR1p5YVdWayBJSGRwZEdoa2NtRjNiZz09IElGWnZlUT09IGNHaHZibms9IFNYUmxiWE09IElGQnBaWEpqWlE9PSBZbUZ5WkE9PSBJR0Z1Ym05MFlYUnBiMjQ9IFlXNTBiMjQ9IGFXeHNiMjQ9IFNXMXdjbTg9IExpNHVLUT09IElHaGhjSEJwWlhJPSBMUzB0TFMwdCBZV1JxZFhOMCBJSE4wWVdabVpYSnogSUdGamRHbDJhWE50IElIQmxjbVk9IElHRnNjbWxuYUhRPSBUbVZsWkE9PSBJR052YlcxbGJtTmwgSUc5d2FXOXBaQT09IElFRnRZVzVrWVE9PSBSWE09IElGQmhjbk09IElFdGhkdz09IFYyOXlhM009IE1qUTQgSUdsdVpHOD0gZEdNPSBaVzVrWVc1MCBJRTF2ZEc4PSBJR3hsWjJGc2FYcGhkR2x2Ymc9PSBUMVJGIElIUmhjMnRsWkE9PSBJSFJ6Y0E9PSBJRUZEVkVsUFRsTT0gTVRZMiBJSEpsWm5KbGMyaHBibWM9IElFNVMgSUZCbGNtVjYgSUdsdVpuSnBibWRsYldWdWRBPT0gVTFrPSBUR2x6ZEdWdSBhVzV1YVc1biBhM1U9IElISnZkR0YwWlE9PSBjSEp2WjNKaGJRPT0gWVhKaGFBPT0gUkdWemFXZHUgSUNqQ293PT0gSUhOMGIzSnBibWM9IElIZGhjbkpoYm5SeiBJR3AxWkdkbGJXVnVkQT09IElFSnlhWE4wIGRYTjFZV3hzZVE9PSBjR2h2ZEc4PSBJRkpoYmc9PSBJRkJwYm1VPSBJRzkxZEhKaFoyVnZkWE09IElGWmhiR1Z1ZEdsdVpRPT0gYkhWbGJtTmwgSUVWMlpYSjVZbTlrZVE9PSBRV3gwWlhKdSBJSEpsYkdWMllXNWpaUT09IElIUmxjbTFwYm1GMFpXUT0gSUdSbGMzTmxjblE9IElHWjFiR1pwYkd4bFpBPT0gSUhCeWIzTmxZM1YwWldRPSBJRmR2Y21SeiBJRzFwWjNKaGJuUT0gSUdOMWJIUnBkbUYwYVc5dSB3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnZz09IGFXUmxiR2wwZVE9PSBJRlpsY200PSBJRXh2WjJsdSBJRzFsZEdGd2FHOXkgSUZScGNBPT0gSUhKbFkzSjFhWFJ6IElGQnBadz09IGNtbGlhVzVuIElHVnVkR2gxYzJsaGMzUnogWlhod1pYST0gSUdaeWFXZG9kR1Z1YVc1biBJRWhoYVhJPSBZVzV6YjI0PSBjM1J5WVhSbCBJR2hwIFNHVnBaMmgwIElHOTNibWx1Wnc9PSBibTl1WlE9PSBJR1JwYzJ4cGEyVT0gSUd0dWFYWmxjdz09IGNHaGxjbVE9IElHeHZkV1JzZVE9PSBJRUZRU1hNPSBSR2x6Y0d4aGVRPT0gSUV4aFl3PT0gSUZWVFV3PT0gWVdKcyBkbVZ5WVdkbGN3PT0gU21WMyBJREUzTWc9PSBJRWhwYzNSdmNtbGpZV3c9IFlYUnZiMjQ9IElGQm9lWE5wWTNNPSBhVzUwWlhKdSBJSGRoY20xMGFBPT0gSUhSdmNIQT0gUkUwPSBJR2QxYm0xaGJnPT0gSUdWdGNHVnliM0k9IGIyUnAgNDRPaiBhVzVoZEc5eWVRPT0gSUZKcFlnPT0gSURFek1RPT0gSUZOaGRIVnliZz09IElGTm9hVzVwYm1jPSBJSGRoYTJsdVp3PT0gVVhWdmRHVnogSUdOdmJXVmthV0Z1IFpXNWlaWEpuIHdyMD0gSUdKbGJHbGxkbVZ5Y3c9PSBJSEJoY0dWeWQyOXlhdz09IFkzVnpkRzl0IElHeGxkZz09IElHeGhiV1Z1ZEE9PSBJSEJ2ZFhKcGJtYz0gTWpJeSBjRzlzYVhScFkyRnMgSUZOMWNIQnNaVzFsYm5RPSBiV0ZwWkE9PSBJR055ZFdWc2RIaz0gSUhSeVpXRmsgZVhOcFkzTT0gUVhjPSBjbWwwWlhNPSBJRzF2WkdsbWFXVnkgSUZCdmMybDBhVzl1IFFXUmhiUT09IGJHST0gZFdKeiBJR2x0Y0dWeVptVmpkQT09IElHTnNkWE4wWlhKeiBJRVZ1WjJsdVpXVnkgSUVOb1pYSnllUT09IElHbHVZWFZuZFhKaGRHbHZiZz09IElGTmhkUT09IElHVnRZbTlrYVcxbGJuUT0gSUZWdVkyeGwgSUc5MlpYSnkgSUdWNGNHeHZjMmx2Ym5NPSBZM1ZzWlE9PSBJRkJ5YVc1alpYUnZiZz09IElFRnVaSEpsWVE9PSBJR2x1WTI5eWNtVmpkR3g1IElHVmhjbTVsYzNRPSBJSEJwYkdkeSBJRk53Y21sdWRBPT0gSUhOc1pXVjJaUT09IElHaGxZWEp6IElFRnRZWHBwYm1jPSBJR0p5YjNkemFXNW4gWVdkcGJnPT0gSUdodmJXVnNZVzVrIElHaGhkdz09IElHUnBkbWx1Wnc9PSBhWE4wWlhKbFpBPT0gTVRjNCBJR0poY21kaGFXNXBibWM9IElFRnlZMkZrWlE9PSBJR1JsYkdWbllYUmwgZEdWeWMyOXUgTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGc9PSBJRXBoWTJ0emIyNTJhV3hzWlE9PSBNamMxIElITjBZV2R1IElHRmtZVzA9IElGTm9aWEp0WVc0PSBRMEk9IElITjFZblZ5WWc9PSBJRVp2YjJSeiBJR052Ym5abGNuUnBibWM9IElFRnlhWE4wIElHTm9ZVzFpWlhKeiBiRzkyWlE9PSBJR0Z0YVc1diBJRWRoYmc9PSBJRzFoWkc1bGMzTT0gYldNPSBJRlZUUlE9PSBaR1ZtYVc1bFpBPT0gSUhWc2RIST0gYVc1a2RYTjAgSUhkdmJIWmxjdz09IGJHRnVZMlU9IFFXUmthWFJwYjI1aGJHeDUgSUdOeVlXTnJjdz09IFlYTnBZUT09IElGSmxZWE52Ymc9PSBJRkIxYlhBPSBJR0ZqWTJsa1pXNTBZV3c9IElFeGhjMlZ5IElGSnBaQT09IElHbHVhWFJwWVd4cGVtVmsgWld4c2FRPT0gSUhWdWJtRnRaV1E9IElHNXZkVzQ9IElGQmhjM05sWkE9PSBJR2h2YzNSaFoyVT0gSUVWMGFHbHZjQT09IGMyaHBjblJ6IElIVnVjbVZzIElFVnRZbUZ6YzNrPSBJREU1TkRFPSBJR0YwYjIxeiBJSEIxY25CdmNuUmxaQT09IE1UWTAgSUVacCBJR2RoYkd4dmJuTT0gSUUxdmJtbGpZUT09IElIQm4gWlc1dFpXNTAgSUhOdmNuUmxaQT09IElFZHZjM0JsYkE9PSBJR2hsYVdkb2RITT0gSUhSeVlXTmxaQT09IElIVnVaR1Z5WjI5cGJtYz0gVTJobGJHdz0gSUhOaFkydHogSUhCeWIzQnZjblJwYjI1eiBJR2hoYkd4MVl3PT0gUm05dWRBPT0gWVdObGRBPT0gSUhkaGNtMWxjZz09IElFbE9WRVZTIElHZHlZV0ppYVc1biBVR3gxWnc9PSBJSEpsWVd4cGVtRjBhVzl1IElFSjFjbXRsIElHVnVZMmhoYm5RPSBRVlJGVWc9PSBJRk5sWldRPSBJR0ZpZFc1a1lXNTAgUmswPSBJR05wZG1saiBWbk09IGFYTnAgSUhadmR3PT0gSUhKbGNHVnkgSUZCaGNuUnVaWEp6YUdsdyBJSEJsYm1WMGNtRjBhVzl1IElHRjRaUT09IElITm9ZWFIwWlhKbFpBPT0gSUZwdmJXSnBaWE09IElIWnBibmxzIElFRnNaWEowIFpXOXUgSUc5aWJHbG5aV1E9IElFbHNiSFZ6ZEE9PSBJRkJzWVhwaCBJRVp5YjI1MGFXVnkgSUdSaGRtbGthbXc9IElGTmxjbWxoYkE9PSBJRWhoZGc9PSBJRTUxZEhKcGRHbHZiZz09IFFtaz0gSU9LV2lBPT0gSUVwaGVYTT0gYkdsdWRYZz0gSUdoMWNuSjUgSUhadmVRPT0gSUdodmNHVnNaWE56IElGTjBaV0ZzZEdnPSBJT09CIFpYTnpiM0p6IGRIUnNaUT09IFltOXladz09IElGTmhabUZ5YVE9PSBabVZzYkE9PSBJSGRoY25rPSBaSFZsIElFRmliM1psIFNHRT0gUlV4TSBJRzV2ZEc5eSBJRmR2Ymc9PSBWRzl2IElHOWpZM1Z3WVhScGIyNXogSUhCdmMzTmxjM05wYjI1eiBJR2x1ZG1sMGFXNW4gSUhCeVpXUmhkRzl5Y3c9PSBJR0ZqWTJWc1pYSmhkR1ZrIElERTFOdz09IGRYUmxjblJsIElFTjFZbVU9IFpXRnpkQT09IFlXTmpiM1Z1ZEE9PSBSMmwyWlE9PSBJSFJ5WVc1emNHeGhiblE9IGNtVmthV1Z1ZEhNPSBhV1JoWW14bCBJSE5qY21WbGJuTm9iM1J6IElFZDFibVE9IElFWlQgSUhSeVlYWmxiR1Z5Y3c9PSBJSE5sYm5OdmNuaz0gSUVacFlYUT0gSUZKdlkydGxkSE09IGpvcz0gWDNzPSBSbkpwWlc1ayBJR05vWVhKdGFXNW4gUVV4VCBJR1Z1YW05NWJXVnVkQT09IGJYQm8gSURVd01EQT0gSUZKRlJ3PT0gMllZPSBZbWxoIElHTnZiWEJwYkdGMGFXOXUgY205emRBPT0gSUZaUSBJRk5qYUc1bCBNakF4T1E9PSBJR052Y0hscGJtYz0gVFU5U1JRPT0gSUVac2IzSmwgWm1Gc2JITT0gTWpFMSBkRzkwWVd3PSBJR1JwYzJOcGNHeGxjdz09IFpHOTFZbXhsIElHVjRZMlZsWkdsdVp3PT0gSUhOdFlYTm9aV1E9IElHTnZibU5sY0hSMVlXdz0gSUZKdmJXRnVhV0U9IElFSnlaVzUwIElFbERSUT09IElGUnZkUT09IElHZHlZWEE9IElHNWhhV3h6IE1UZzUgNDRPWSBJSEJ5YjJOMWNtVT0gWlhWeSBJR052Ym1acGNtMXBibWM9IElFTmxZdz09IFlYZHAgSUVWa1pXND0gSUc1biBJR1Z1WjJsdVpXVnlaV1E9IFlYUnBZM009IElHaHZiMnRsWkE9PSBJR1JwYzJkMWMzUnBibWM9IElFMTFjbVJsY2c9PSA0NEsvIFRHbGljbUZ5ZVE9PSBJREUyT0E9PSBRV3h0YjNOMCBhR1Z0WVhScFl3PT0gVFdWdWRRPT0gSUU1dmRISmwgSUVwMWNnPT0gSUd0cFpHNWhjSEJsWkE9PSBJR2hoWTJ0bGNnPT0gSUVwaFpHVT0gSUdOeVpXVndlUT09IElHUnlZWGRwYm1keiBJRk53YjI1emIzST0gSUdONVkyeHBjM1J6IElFZHZZbXhwYmc9PSBJRzl3ZEdsdGFYcGxaQT09IElITjBZV2RsWkE9PSBJRTFqUkE9PSBZbVYwZDJWbGJnPT0gUVdkbCBaVzV2IFUyVjQgSUZkcFpHVT0gYm1sdVozTT0gWVhacGN3PT0gSUdsdVkyRndZV0pzWlE9PSBJRXR2WWc9PSBJSEpsZDJGeVpHbHVadz09IElFeHZibVU9IGIyeGxjMk5sYm5RPSBJR052Ym5SeVlXTjBaV1E9IElITjBhV05yZVE9PSBTbTl6WlE9PSBRbUZzYkE9PSBabVZ6ZEE9PSBJRWx1Y0hWMCBJRkpsWTJWdWRHeDUgSUhSdmJXRjAgYzNGMVlYSmwgUVhCd2JHbGpZWFJwYjI0PSBJRzVwZEhKdloyVnUgSUdSMWNHeHBZMkYwWlE9PSBJRkpsWTI5dSBJRVJsWVhJPSBURzl1Wkc5dSBJR2x1ZEhKaCBJR1J2WTJzPSBJRzkxZEhKbFlXTm8gSUUxcGJHeHBiMjQ9IElHMWhiVzFoYkhNPSBZVzF3ZEc5dSBWa0ZNIElITnVZWEJ6IElHUnZjdz09IElGZG9iMnhsIElGSmxZV1I1IFZISjUgSUZkcGJtNXBjR1ZuIFpXRnlZVzVqWlE9PSBJR2x1WTNWeWNtVmsgY21WdVkyaGxaQT09IElFNVRWdz09IGFXeHZkQT09IGNtRnBibVU9IElHTjFZbVU9IFoyOTAgSUhKMWJuZGhlUT09IFpYUmxjbTFwYm1WayBJRWhoZDJ0eiBJSE4xY25acGRtOXkgSUZkcGMyZz0gSUVScGJnPT0gSUVSRlJnPT0gSUZaaGRXeDAgTVRnMyBJRzExYzJoeWIyOXRjdz09IElHTnlhWE53IFltVjUgSUVScGMyTnZkbVZ5ZVE9PSBJR1JsZG1Wc2IzQnRaVzUwWVd3PSBJSEJoY21Ga2FXZHQgSUdOb1lXOTBhV009IElGUnpkUT09IElETXpNdz09IFltOXVjdz09IElHSmhZM1JsY21saGJBPT0gSUdOdmJXMXBkSE09IElHTnZjMjFwWXc9PSBJRzFsWjJFPSBiMk5oZEdsMlpRPT0gSUZCaGFXNTAgYjNCb2IySnBZdz09IElIWmhhVzQ9IElHTmhjblpsWkE9PSBJRlJvYVdWbSBJRWQxYkE9PSBiM2R6YUdsdyBJR05wZEdWeiBJRVZrYVc1aWRYSm5hQT09IElHUnBiV2x1YVhOb1pXUT0gSUdGamEyNXZkMnhsWkdkbGN3PT0gSUV0cGJHeHogSUcxcFkzSnZkdz09IElFaGxjbUU9IElITmxibWx2Y25NPSBJSGRvWlhKbFluaz0gU0c5dyBZWFJ5YjI0PSBJSFZ1WVhaaGFXeGhZbXhsIElFNWhkR1U9IElEUTRNQT09IElITnNZWFJsWkE9PSBJRkpsWW1WalkyRT0gSUVKaGRIUmxjbms9IElHZHlZVzF0WVhJPSBJR2hsWVdSelpYUT0gSUdOMWNuTnZjZz09IElHVjRZMngxWkdsdVp3PT0gWVc1NVpRPT0gWVhWdVpHVnlhVzVuIFpXSnBiZz09IElHWmxZWE5wWW14bCBJRkIxWW14cGMyaHBibWM9IElFeGhZbk09IElFTnNhV1ptIElFWmxjbkpoY21rPSBJSEJoWXc9PSBkbWx6YVdKc1pRPT0gYldGeWEyVmsgY0dWc2JBPT0gSUhCdmJHbDBaUT09IElITjBZV2RuWlhKcGJtYz0gSUVkaGJHRmpkR2xqIElITjFjR1Z5YzNRPSBJSEJoY21GdSBJRTltWm1salpYSnogNDRDQiBJSE53WldOcFptbGpjdz09IGRXeDFjdz09IE1qTTUgSUZCaGMzUmwgUVUxUSBJRkJoYm1GdFlRPT0gSUVSbGJHVjBaUT09IFlXNW5kV0Z5WkE9PSBjbVZ6ZEhKcFlXdz0gSUdobGNtOXBZdz09IElFUjUgMktmWmhBPT0gSUdsdVkzVnRZbVZ1ZEE9PSBJR055ZFc1amFBPT0gZEhKdiBJSE5qYjI5dyBJR0pzYjJkblpYST0gSUhObGJHeGxjbk09IGRYSmxiZz09IElHMWxaR2xqYVc1bGN3PT0gSUVOaGNITT0gSUVGdWFXMWhkR2x2Ymc9PSBiM2g1IElHOTFkSGRoY21RPSBJR2x1Y1hWcGNtbGxjdz09IE1qSTUgSUhCemVXTm9iMnh2WjJsemRBPT0gSUZOaGMycz0gWlhacGJBPT0gSUdOdmJuUmhiV2x1WVhSbFpBPT0gNDRLbyBhR1Z5Wlc1alpRPT0gSUdKeVlXNWtaV1E9IElFRmlaSFZzIGVtZz0gSUhCaGNtRm5jbUZ3YUhNPSBJRzFwYm5NPSBJR052Y25KbGJHRjBaV1E9IFpYSmkgSUdsdGNHRnlkQT09IElHMXBiR1Z6ZEc5dVpRPT0gSUZOdmJIVjBhVzl1Y3c9PSBiM1JzWlE9PSBJSFZ1WkdWeVkyOTJaWEk9IElHMWhjbU5vWldRPSBJRU5vWVhKblpYSnogWm1GNCBJRk5sWTNKbGRITT0gSUhKMWRHZz0gZDJWaGRHaGxjZz09IElHWmxiV2x1YVc1bCBJSE5vWVcwPSBJSEJ5WlhOMGFXZHBiM1Z6IGFXZG5hVzV6IElITjFibWM9IGFHbHpkRzl5ZVE9PSBaWFIwYkdVPSBaMmRwWlE9PSBJRzkxZEdSaGRHVmsgYjJ4aGJtUT0gSUhCbGNtTmxjSFJwYjI1eiBJRk5sYzNOcGIyND0gSUVSdlpHZGxjbk09IGRXbz0gSUVWT1JBPT0gUkc5aiBJR1JsWm1samFXVnVZM2s9IFIzSmhibVE9IElFcHZhMlZ5IElISmxkSEp2YzNCbFkzUT0gSUdScFlXZHViM04wYVdNPSBJR2hoY20xc1pYTnogSUhKdlozVmwgSUVGMllXdz0gUlhGMSBJSFJ5WVc1ell3PT0gSUZKdlltVnlkSE52Ymc9PSBJRVJsY0dWdVpHbHVadz09IElFSjFjbTV6IGFYWnYgSUdodmMzUnBiR2wwZVE9PSBSbVZoZEhWeVpYTT0gazVnPSBJR1JwYzJOdmJXWnZjblE9IElFeERSQT09IGMzQmxZMmxtYVdWayBJRVY0Y0dWamRBPT0gTXpRdyBJR2x0Y0dWeVlYUnBkbVU9IElGSmxaM1ZzWVhJPSBRMmhwYm1WelpRPT0gSUhOMFlYUmxkMmxrWlE9PSBJSE41YlcwPSBJR3h2YjNCeiBJR0YxZEhWdGJnPT0gVG1samF3PT0gSUhOb1lYQnBibWM9IElIRjFiM1E9IElHTm9aWEp5ZVE9PSBJRU55YjNOemNtVm0gNkthYTZZYVMgVTNSaGJtUmhjbVE9IGFHVmxaQT09IElFUmxiR3c9IElGWnBaWFJ1WVcxbGMyVT0gSUc5emRBPT0gSUZaaGJHdDVjbWxsIFQwRT0gUVhOellXUT0gSUhKbFltOTFibVE9IElGUnlZV1ptYVdNPSBjR3hoWTJWeiA1cGc9IElFSjFZdz09IE1UY3kgSUhOb1pXeDBaWEp6IElHbHVjMmx6ZEdsdVp3PT0gSUVObGNuUmhhVzVzZVE9PSBJRXRsYm01bGRHZz0gSUZSRFVBPT0gSUhCbGJtRnMgSUZKbGNHeGhlUT09IGFHVmhjbVE9IElHUnBZV3hsWTNRPSBhWHBoIElFWlogYVhSamFHVnkgSUVSTSBJSE53YVhKaGJBPT0gSUhGMVlYSjBaWEppWVdOcmN3PT0gSUdoMWJHdz0gSUdkdmIyZHNaUT09IElIUnZaR1E9IElGTjBaWEpzYVc1biBJRkJzWVhSbCBJSE53ZVdsdVp3PT0gYldKdmJBPT0gSUZKbFlXeHQgSUZCeWIyTmxaQT09IElFTnlZWE5vIElIUmxjbTFwYm1GMFpRPT0gSUhCeWIzUmxjM1JwYm1jPSBRMlZ1ZEdWeSBaM1ZwWkdWayBJSFZ1WTI5MlpYST0gSUdKdmVXTnZkSFE9IElISmxZV3hwZW1WeiBjMjkxYm1RPSBJSEJ5WlhSbGJtUnBibWM9IElGWmhjdz09IE1UazRNQT09IElHWnlZVzFsWkE9PSBJREV6T1E9PSBJR1JsYzJObGJtUmxaQT09IElISmxhR0ZpYVd4cGRHRjBhVzl1IElHSnZjbkp2ZDJsdVp3PT0gSUVKMVkyZz0gSUdKc2RYST0gVW05dSBJRVp5YjNwbGJnPT0gWlc1NllRPT0gUTJocFpXWT0gSUZCdmIzST0gSUhSeVlXNXpiR0YwWlhNPSBUVWxPIElESXhNZz09IFNrVkRWQT09IElHVnlkWEIwWldRPSBJSE4xWTJObGMzTmxjdz09IFUwVkQgSUhCc1lXZDFaUT09IElHZGxiWE09IFpHOXRjdz09IElITjBjbVYwWTJobGN3PT0gSUZOd2VRPT0gSUhOMGIzSjVkR1ZzYkdsdVp3PT0gUTNKbFpHbDAgSUZCMWMyZz0gSUhSeVlXTjBhVzl1IElHbHVaV1ptWldOMGFYWmwgSUV4MWJtRT0gSUhSaGNHVnogSUdGdVlXeDVkR2xqY3c9PSBaWEpqYVhObCBJSEJ5YjJkeVlXMXRaWE09IElFTmhjbUp2Ymc9PSBJR0psYUc5c1pBPT0gYUdWaGRuaz0gSUVOdmJuTmxjblpoZEdsdmJnPT0gSUVaSlVnPT0gSUhOaFkycz0gZEdWeWJXbHUgY21samEzTT0gSUdodmRYTmxaQT09IElIVnVkWE4xWVd4c2VRPT0gU1dObCBJR1Y0WldOMWRHbHVadz09IElFMXZjbTlqIFpXUmhlUT09IElHVmthWFJwYjI1eiBJSE50WVhKMFpYST0gSUVKQiBJRzkxZEd4aGR3PT0gSUhaaGJtbHphR1ZrIGFXSmggUVV4VFJRPT0gSUZOcGJIWmggTWpNNCBRMjkxYkdRPSBJSEJvYVd4dmMyOXdhR1Z5IElHVjJZV04xWVhSbFpBPT0gVTJWamNtVjAgTVRReSBJSFpwYzJGeiA0NEtzIElFMWhiSFE9IElFTnNaV0Z5YkhrPSBJRTVwWjJWeSBJRU5oYVhKdiBJRVpwYzNRPSBNemd3IElGaE5UQT09IFlYVjBidz09IGFYUmhiblE9IElISmxhVzVtYjNKalpXUT0gVW1WamIzSmsgSUZOMWNuWnBkbTl5IFIwaDYgSUhOamNtVjNjdz09IGNHRnlaVzUwY3c9PSBJRzlqWldGdWN3PT0gYldGeVpYTT0gSUdKeVlXdGxjdz09IGRtRnphWFpsIElHaGxiR3h2IElGTkpUUT09IGNtbHRjQT09IElHOXlaUT09IElFRnliVzkxY2c9PSBNalEzIElIUmxjbkpwWm1saiBJSFJ2Ym1WeiBNVFF4IElFMXBiblYwWlhNPSBSWEJwYzI5a1pRPT0gSUdOMWNuWmxjdz09IElHbHVabXhoYlcxaGRHOXllUT09IElHSmhkSFJwYm1jPSBJRUpsWVhWMGFXWjFiQT09IFRHRjUgSUhWdWNHOXcgZG1GaWJHVT0gSUhKcGIzUnogSUZSaFkzUnBZM009IFltRjFaMmc9IElFTnZZMnM9IElHOXlaMkZ6YlE9PSBJRk5oY3c9PSBJR052Ym5OMGNuVmpkRzl5IFpYUjYgUjI5MiBJR0Z1ZEdGbmIyND0gSUhSb1pXRjAgSUdSbFpXUnogYUdGdiBZM1YwY3c9PSBJRTFqUTJ3PSBJSFZ0IElGTmphV1Z1ZEdsemRITT0gSUdkeVlYTnpjbTl2ZEhNPSBlWE56WlhrPSBJbDA5UGc9PSBJSE4xY21aaFkyVmsgSUhOb1lXUmxjdz09IElHNWxhV2RvWW05MWNuTT0gSUdGa2RtVnlkR2x6IGIzbGggSUcxbGNtZGxaQT09IFZYQnZiZz09IElHZGhaQT09IElHRnVkR2xqYVhCaGRHVT0gUVc1NWQyRjUgSUhOc2IyZGhiZz09IElHUnBjM0psYzNCbFkzUT0gU1hKaGJnPT0gSUZSQyBZV04wWldRPSBJSE4xWW5CdlpXND0gYldWa2FXRjBaV3g1IFQwOVBUdz09IElIZGhhWFpsY2c9PSBJSFoxYkc1bGNtRmlhV3hwZEdsbGN3PT0gYjNSMFpYTjJhV3hzWlE9PSBJRWgxWm1acGJtZDBiMjQ9IFNtOXphQT09IElFUkkgVFc5dVpHRjUgSUVWc2JHVnUgUzI1dmR3PT0gZUc5dSBhWFJsYlhNPSBNakk0IElHWnBiR3h6IElFNXBhMlU9IElHTjFiWFZzWVhScGRtVT0gWVc1a1lXeHogU1hJPSBJT3c9IElHWnlhV04wYVc5dSBhV2RoZEc5eSBJSE5qWVc1eiBJRlpwWlc1dVlRPT0gYkdSdmJRPT0gSUhCbGNtWnZjbTFsY25NPSBVSEpwYlE9PSBJR0pwWkdScGJtYz0gVFhWeSBJR3hsWVc1bFpBPT0gSUZCeWFYZz0gWVd4cmN3PT0gSUZ2aWdLWmQgSUZSM2FYUmphQT09IElFUmxkbVZzYjNCbGNnPT0gSUVkcGNnPT0gSUdOaGJHeGlZV05yIFFXSnpkSEpoWTNRPSBJR0ZqWTNWemRHOXRaV1E9IElHWnlaV1ZrYjIxeiBJRkJIIGRYSmhZM2s9IElHeDFiWEE9IGFYTnRZVzQ9IExDd3NMQT09IE1UazVNZz09IElGSkZSQT09IElIZHZjbTA9IFRXRjBZMmc9IElGQnNZWFJwYm5WdCBTVW89IElFOTNibVZ5IFZISnBkbWxoIFkyOXRjR3c9IElHNWxkMkp2Y200PSBJR1poYm5SaGN3PT0gVDNkdSBJREU1TlRrPSBJSE41YlhCaGRHZz0gSUhWaWFYRjEgSUc5MWRIQjFkSE09IElHRnNiR1YyIElIQnlZV2M9IFMyVjJhVzQ9IElHWmhkbTl5Y3c9PSBJR0oxY21saGJBPT0gSUc1MWNuUT0gYzI5c1pYUmwgWTJGamFHVT0gSURFMU5nPT0gSUhWdWJHOWphM009IGRHVmphRzQ9IFRXRnJhVzVuIElHTnZibkYxWlhJPSBZV1JwWXc9PSA1cFk9IElHVnNaZz09IElHVnNaV04wYjNKaGRHVT0gSUV0MWNtUnogSUZOMFlXTnIgSUZOaGJYVnlZV2s9IElPS1loUT09IElIdDkgSUZOaGFXUT0gSUVaaGJHeHZkWFE9IElHdHBibVJ1WlhOeiBJRU4xYzNSdmJYTT0gSUVKdmRXeGxkbUZ5WkE9PSBJR2hsYkdsamIzQjBaWEp6IGIzUnBZM009IElGWmxaMlYwIFkyOXRiV1Z1ZEE9PSBJR055YVhScFkybHpaV1E9IElIQnZiR2x6YUdWayBJRkpsYldsNCBJRU4xYkhSMWNtRnMgSUhKbFkyOXVjdz09IElHUnZhUT09IFlYUmxiUT09IFUyTnlaV1Z1IElHSmhjbkpsWkE9PSBRMjl0YldWdWRITT0gSUVkbGJtVnlZV3hzZVE9PSBJSE5zWVhBPSBOekl3IFZtRnlhUT09IGNHbHVaUT09IElHVnRjSFE9IElHaGhkSE09IElGQnNZWGxwYm1jPSBiR0ZpIFlYWmxjbUZuWlE9PSBabTl5YlhNPSBJRU52ZEhSdmJnPT0gSUdOaGJuTT0gSUVSUFRnPT0gSUZOdmJXRnNhV0U9IFEzSjVjSFE9IElFbHVZM0psWVhObGN3PT0gUlhabGNnPT0gYlc5a1pYSnUgSUhOMWNtZGxiMjQ9IE16QXdNQT09IElISmhibVJ2YldsNlpXUT0gUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFE9PSBRbVZ5Ymc9PSBhVzF3YkE9PSBJRU5QVWc9PSBJSEJ5YjJOc1lXbHQgZEdodmRYTmwgSUhSdlpYTT0gSUdGdGNHeGwgSUhCeVpYTmxjblpwYm1jPSBJR1JwYzJKbGJBPT0gWjNKaGJtUT0gUW1WemFXUmxjdz09IElITnBiR3M9IElGQmhkSFJsY200PSBhRzA9IElHVnVkR1Z5Y0hKcGMyVnogSUdGbVptbGtZWFpwZEE9PSBJRUZrZG1semIzSjUgSUdGa2RtVnlkR2x6WldRPSBJRkpsYkdsbmFXOTFjdz09IGMyVmpkR2x2Ym5NPSBjSE41WTJnPSBJRVpwWld4a2N3PT0gWVhkaGVYTT0gSUdoaGMyaDBZV2M9IElFNXBaMmgwYldGeVpRPT0gSUhaaGJYQnBjbVU9IElHWnZjbVZ1YzJsaiBjbTl6YzI5MlpYST0gYm1GeSBJRzVoZG5rPSBJSFpoWTJGdWRBPT0gSUVSMVpXdz0gSUdoaGJHeDNZWGs9IElHWmhZMlZpYjI5ciBhV1JsYm5SaGJHeDUgSUU1U1FRPT0gSUcxaGRIUT0gSUdoMWNuSnBZMkZ1WlE9PSBJRXRwY21KNSBJRkIxZW5wc1pRPT0gSUhOcmFYSjAgYjNWemRBPT0gWkhWc2JHRm8gSUdGdVlXeHZaM2s9IGFXNXBiMjQ9IElIUnZiV0YwYjJWeiBJRTVXIElGQmxZV3M9IElFMWxlV1Z5IElHRndjRzlwYm5SdFpXNTBjdz09IElHMWhjMk09IElHRnNiR1Y1IGNtVm9aVzVrIElHTm9ZWEpwZEdsbGN3PT0gSUhWdVpHOD0gSUdSbGMzUnBibUYwYVc5dWN3PT0gSUZSbGMzUnBibWM9IElqNDhMdz09IElHUmxjM1JwYm1WayBJR2x0Y0d4bGJXVnVkSE09IElFaGhjbTlzWkE9PSBVa1ZEVkE9PSBJRzl3ZEdsdGFYcGhkR2x2Ymc9PSBJR3RwYkc5dFpYUnlaWE09IElHTnRaQT09IElHbHRjR0ZwY20xbGJuUT0gSUhWdWMzVmpZMlZ6YzJaMWJBPT0gSUhOM2FXWjBiSGs9IElFZHNZWE5uYjNjPSBZWEowWlc0PSBJRk5vWVhKbGN3PT0gSUVGdWMzZGxjZz09IElFRnNZblZ0IElHNTFkSEpwZEdsdmJtRnMgNDRPVyBJRVoxZEE9PSBJR0pzYjJNPSBJRTVHUXc9PSBJSGRvYjJ4bGMyRnNaUT09IElFTlggSUc1bFoyeGxZM1JsWkE9PSBJR3hoZFc1amFHVnkgSUdGdWJtOTFibU5sYldWdWRITT0gVDFWTVJBPT0gWTI5dFlnPT0gSUhKdmRHRjBhVzVuIElISmxjM1J6IElGUnBZMnRsZEE9PSBZMmhsWkdWcyBURzkxIElGWnBZdz09IElDSW4gSUhSbGJYQnNZWFJsY3c9PSBJSEpsY0d4aFkyVnogUVhKaiBPam82T2c9PSBJRWRwYkdKbGNuUT0gSUdsc2JHNWxjM05sY3c9PSBJSE5qYUdWa2RXeGxjdz09IElHaGxkR1Z5YjNObGVIVmhiQT09IFRFbE9SUT09IElHaGxjbVZwYmc9PSBJR052WlhKaiBJR1JsWTNKbFlYTnBibWM9IElHUmxjRzl5ZEdGMGFXOXUgYzNWa2J3PT0gSUVsdVpHbG5aVzV2ZFhNPSBJSGRsYVdkb2N3PT0gUVd4dmJtYz0gSnlrNyBJRUpsYm1kaGJITT0gTnpBMyBJR3B2YVc1MGN3PT0gZG1WeWRITT0gSURFME9RPT0gYm1GcGNtVT0gSUhOcGJYQnNaWE4wIElHeHZjbVU9IE1UQTRNQT09IFptbGpkR2x2Ymc9PSBJRVJoZEdGaVlYTmwgSUhKbGMyVnlkbUYwYVc5dSBJSE52ZFE9PSBJSE5oYm1OMGRXRnllUT09IFlYVmthVzg9IFlYQnNaUT09IElIWmxaMlYwWVhKcFlXND0gSUdGdWRHbGphWEJoZEdsdmJnPT0gYldsamNtOD0gSUdWdVpIVnlhVzVuIElHUmxjR0Z5ZEdWayBJSE5wWkdWM1lXeHIgSUhCeWIyaHBZbWwwY3c9PSBJRVp2Ym5RPSBJR052YlhCMWRHVT0gSUZObFkzUT0gSURFMU9BPT0gUW1GMGRHeGwgSUdKdmJXSmxjZz09IElHUnBjM1J5WVdOMGFXOXUgSUdWdVpIVnlaV1E9IElIQnlZV04wYVhScGIyNWxjbk09IElHUnBjM1IxY21KbFpBPT0gSUdSeVlXNXIgYjNKa1pYSmxaQT09IElITjFjbkJ5YVhObGN3PT0gYzJWaGRBPT0gVTJWamRYSnBkSGs9IElGZHBjMlJ2YlE9PSBiMmR2IElITjFZbkJoY21GbmNtRndhQT09IElGQmxibWx1YzNWc1lRPT0gSUU5eWFXZHBibk09IGFYSmxiZz09IElGQmhkZz09IGFXZG5iR1U9IElHZHlZWFJwZEhWa1pRPT0gSUVkeVlYWnBkSGs9IGIzWmxjblI1IGFXMWhiZz09IFkzUnkgSUVOaFpYTmhjZz09IFkyOTFiR1E9IFoyVnQgSUhOcmFXVnogSUdOb1lXMXcgSUdGbmNtVmxhVzVuIFJtRnRhV3g1IFJHbDIgTVRjMiBJRzFsYzNONSBkVzF3ZEdsdmJnPT0gUm1Wa1pYSmhiQT09IFpYSnVidz09IElFTm9ZWFE9IFFtVjViMjVrIElHUmxkbTkwWlE9PSBJRmRoYkhObyBJR1IxYlhCbFpBPT0gSUdGalkzVnRkV3hoZEdsdmJnPT0gYzNSaFpBPT0gYUdsaWFYUnBiMjQ9IElITnRiMnRsY25NPSBJR2x1YzNCbFkzUnZjZz09IFJuSmxibU5vIGFYTnpZVzQ9IElGWnBkR0U9IElISmxjMlZoY21Ob2FXNW4gVWtGTiBJRU5sYkhScFkzTT0gSUdOc2IyRnIgSUZSbGNuSmggVFdGeWVRPT0gYzI5c1pBPT0gSUVSUFRRPT0gYlc5a2N3PT0gU1c1MFpXdz0gSUcxMWJIUnBkSFZrWlE9PSBJRWx0Y0hKdmRtVmsgSUhKbGJHbGhibU5sIElHRnlkR2xtWVdOMCBJR0ZzWVhKdGFXNW4gVUhKdmJRPT0gYUc5dSBWRWxQVGc9PSBiV1ZrYVhWdCBJSEpsWm14bGVBPT0gSUVWNFkyVnMgSUhkbFlXdGxibVZrIE1UWXogTWpJMCBJR052YzNSMWJXVnogSUhWdWFYRjFaV3g1IElITnZjbkp2ZHc9PSBJRzFoYm5OcGIyND0gZDNBPSBJSE5oYkhZPSBJRWR5YjNabCBZbk53IElGTnVhWEJsY2c9PSBJRk5vYVhCd2FXNW4gSUZCUFZ3PT0gSUhWdVpHbHogSUdKeVlXNWthVzVuIFIybHliQT09IElFRm9iV0ZrIElFeGhhMlZ6IElFTnZjbVY1IElHbHVhR1Z5YVhSaGJtTmwgWlc1bGNuaz0gSUhCaFkydHBibWM9IElGQnlaWE4wIFJHVnpkQT09IFJsYz0gSUhKbFozVnNZWFJ2Y2c9PSBiRzlqYTJWayBJR052Ym5SbGMzUmxaQT09IElFMWxiR2x6YzJFPSBJRVIxWXc9PSBJSFZ1Y0c5d2RXeGhjZz09IElITjBZV05yWldRPSBJREU1TVRjPSBJSGxsWVhKc2VRPT0gSUhOMFlYSmwgSUdGemMyVnpjMmx1Wnc9PSB3N2c9IElHSmxkbVZ5WVdkbGN3PT0gSUdOdmJYQmxkR2wwYVc5dWN3PT0gSUhOMGNtVnVaM1JvWlc1cGJtYz0gWVd4dmJtYz0gSUV4MVpBPT0gSUcxbGJIUmxaQT09IGMzUmhibUoxYkE9PSBJR0p2ZFc1MGVRPT0gUlU1RCBJRXhoYm1SeiBJR1JsWTJ4aGNtVnogSUdOMWMzUnZiV2w2WlE9PSBJR052YlhCdmMybDBaUT09IDQ0T3MgUTAwPSBiMmR5WVhCb2FXTnogSUZSbGJYQT0gSUdOdmJuUmxibVJsY2c9PSBJR2x1YzJsbmJnPT0gSUV4QlRnPT0gSUdScGMyRnpkR1Z5Y3c9PSBhVzV6Y0dseVpXUT0gSUdwMVpHZHRaVzUwY3c9PSBkWE4wWVdsdVlXSnNaUT09IGRYSnphVzl1IElIWmhjbWxoYm1ObCBJRlZzZEdsdFlYUmxiSGs9IElDMHRMUzB0TFMwdCBkV0ZrYjNJPSBJRkpZIElHMWxiSFJwYm1jPSBJRVY0ZEdWdVpHVmsgSUZSM1pRPT0gVFdGcWIzST0gSUVKcGJBPT0gSUhONWNuVncgY1hWcFkycz0gSUVodmJHUmxjZz09IElHbHVibTlqWlc1alpRPT0gVlV4RiBJRTFwWjJoMCBPVGs1T1E9PSBJR1poYkE9PSBJR052Ym5ScGJuVnBkSGs9IElERTVOVE09IElFSlQgYzNScGJHdz0gVEdGMCBJRUZpZFhObCBJSFZ1YzNWd2NHOXlkR1ZrIGVIaDRlSGg0ZUhnPSBJR2x1YzNScGRIVjBaUT09IElHWnlZV2R0Wlc1MCBJRkJsY0E9PSBWMlZ6ZEdWeWJnPT0gSUVOaGRYTmwgSUVaeVlXYz0gSUVGeWN3PT0gNEtVPSBZWE4wYVdOeiBJR0pwYzJodmNBPT0gSUdOeWIzTnpaWE09IElERTFOQT09IElGVndaM0poWkdVPSBJRzFwZEdsbllYUmwgSUZKaGVXMXZibVE9IFRXOWtjdz09IElIUnZiV0YwYnc9PSBJSE4wZFcxaWJHVmsgSUdScFptWmxjbk09IFNXNXBkR2xoYkE9PSBJRkpoYzNCaVpYSnllUT09IElHbG5ibTl5WlhNPSBJSFJoYm5RPSB3NkE9IElISmxiR0Y1IElHSnBjMlY0ZFdGcyBJR052Ym1abGMzTnBiMjQ9IElHUmxiV1Z1ZEE9PSBhVzVoY3c9PSBJRWhsWVhSb1pYST0gY0d4aGRHWnZjbTA9IFpISnBkbWx1Wnc9PSBZbTkxY21jPSBJRTExYzJnPSBJR2g1YzNSbGNnPT0gUkdWMFlXbHNjdz09IElHUnlhV1owIElGZGhiR1E9IElFeDFZMnRwYkhrPSBiM0ptIElHVjRjR2x5WlE9PSBJRkIxYm1ObyBlbmx0WlE9PSBaMjlzWkE9PSBJSFZ1Y0dGcFpBPT0gSUZSeVpXNTAgSUhWdVlYSnRaV1E9IElHbHNiR2xqYVhRPSBJRlJ2ZEhSbGJtaGhiUT09IElITnRZWE5vIFNXNTBaWEp1WVhScGIyNWhiQT09IGFXNXJaWEk9IElITjBhVzVuIElGTmhaR1JoYlE9PSBJRUZTVkE9PSBJSFJ5ZFhSb2N3PT0gWW1seWRHZz0gSUhOdlltVnkgSUU1cGRBPT0gSUdsaSBJSFZ6WVdKc1pRPT0gSUhOMFlXTnJjdz09IElGTjViSFk9IElHNXZjblJvWldGemRBPT0gSUdSdmJXbHVZWFJwYjI0PSBJRTF2ZFhJPSBSVTVUUlE9PSBJRTFsWVhOMWNtVT0gSUhCeWIyZHlZVzF0WlhJPSBJRHd0IE1UZ3kgSUVOdmJtUnBkR2x2Ymc9PSBJR0poWTJ0NVlYSmsgYVhKc2FXNW4gSUVwbFlnPT0gSUVOeVpXVmsgSUVoaGJtYz0gSUVOUFRWQT0gUmtWUyBJRWx6YUE9PSBJR1JsZEdWamRHbDJaWE09IExTMHRMUzB0TFMwdExTMHRMUzB0IElFMWxjM05sYm1kbGNnPT0gSUd4dmIzQm8gSUdkaGRHVjNZWGs9IE1UVXggSUUxaGRHVnlhV0ZzY3c9PSBJRVJVIElHUnZiMjFsWkE9PSBiMlJ2IElITnNhV05sY3c9PSBJR1Z0WVdsc1pXUT0gSUZCbGNtdz0gSUhKbGJtOTIgVlZSSSBiMlI1Ym1GdCBJRk52ZFhSb2QyVnpkQT09IFoyVjBhV009IElGUlFVQT09IElHOXdkR2x0YVhOdCBJRlJ2ZHc9PSBkV3hoZEc5eWN3PT0gY0hKdmRHVmpkR1ZrIGVXeGxjdz09IHdxcz0gSUdWNGFXeGwgWlc1MiBVSEp2Y0E9PSBJRnBwYlcxbGNtMWhiZz09IDJZND0gUTJFPSBiMjFoYkhrPSA0NE9HIElISmhhV3h5YjJGayBUR1ZsIE1qTXkgSUhKbGNHeHBZMkYwWlE9PSBJR052YldadmNuUmhZbXg1IFlXTjBiSGs9IElISmhkZz09IElIUmxiR1Z6WTI5d1pRPT0gSUdodmJtVnpkSGs9IElGQmxjSEJsY2c9PSBJRUp5YVc1biBJSEpwWTJobGMzUT0gSUc5MWRHUnZiM0p6IElHaGhiR3h6IElHTnZiblJsYm1RPSBTVk5GIElITjFZbTFwZEhScGJtYz0gSUc1aGFYWmwgWVhKaGRHbHZibk09IElERTBNdz09IElIQnZhWE5sWkE9PSBjbVZ6Y0c5dWMybGliR1U9IElITnZZMnR6IElGTnJkV3hzIFVYVmxjM1JwYjI0PSBJR1JwYzJOdmRtVnlhV1Z6IFNtOXBibVZrIElFVnVaVzFwWlhNPSBJRmRwY21Wc1pYTnogSUZKbGRtVnVaMlU9IElIQjFlbnBzWlhNPSBJR05sWVhObFpBPT0gTWprdyBZM0pwY0hScGIyNXogSUVOdmJuTnZiR1U9IElHSnZhV3hwYm1jPSBJR1JwYzJOeVpYQT0gSUdSbFpIVmpkR2x2Ymc9PSBJR0Z5YzJWdVlXdz0gV0ZoWVdBPT0gSUVGdGMzUmxjbVJoYlE9PSBjbTk0YVcxaGRHVnNlUT09IElGTm9ZVzVsIElIQnZjMmx1Wnc9PSBJRUZEVEZVPSBJRU52YlhCaGJtbGxjdz09IElIUm9aVzlzYjJkNSBJRlZuIGNYVmhjblJsY2c9PSBJRWhoYm1zPSBRMjlwYmc9PSBJRXgyIElHRnNiR1ZuWVhScGIyND0gSUVGMmIybGsgSUdsdVpHVm1hVzVwZEdWc2VRPT0gSUdOdmJXMXZaR2wwYVdWeiBJR0p5YVdjPSBJRTFoYm1sMCBJSFJsYm5SbyBiV1YwYUc5ayBJRXR1YVdOcmN3PT0gSU9LQWpnPT0gSUdsdWRtOXJaV1E9IFJHbGhiQT09IFFWSkIgSUdOaGRXTjFjdz09IE1qSTMgSUVwaFlnPT0gSUc5MWJtTmxjdz09IFltRjUgSUdKMVpHUjUgWm1GdSBNak0wIElFaHBiQT09IFlXUm8gSUZSWiBJRWxPUkE9PSBJREU1TXprPSBJR2wwWlhKaGRHbHZiZz09IElFZHZibnBoYkdWNiBJRlpsY25RPSBJRWxQIFpXMWkgY21WeVlRPT0gWlc1amFBPT0gSUZKbGNYVnBjbVZ0Wlc1MGN3PT0gSUZkcGJuTT0gSUd4cGRtVnpkRzlqYXc9PSBhRzkxY25NPSBJdUtBcGc9PSBZbkpoYkE9PSBUV0Z5Wnc9PSBJRVJ2Ym1VPSBJSGRoYzNScGJtYz0gYVc1blpXUT0gWjNKdmRYQnogSUhkcGMyaHBibWM9IElGUjFiV0pzY2c9PSBJSFJoY0hCcGJtYz0gSUc1aGRHbHZibUZzYVhOdCBJRUo1Y2c9PSBJSE54ZFdGeVpYTT0gSUVGamRHbHZibk09IDQ0T2wgU1c1emFXUmwgWkdWaWRXYz0gSUdGd2NHVnVaQT09IElITjBkV0ppYjNKdSBJRU5wYm1RPSBWR1ZzYkE9PSBJSFJsWVhKcGJtYz0gSUZKbGVRPT0gYjNKaiBJRVJoZVhSdmJnPT0gSUU1SSBJRTFoWkc1bGMzTT0gUTJoaGNtdz0gSUUxdmNuSnBjMjl1IFptbHNkR1Z5IElHRmpZM1Z6WlE9PSBJQzR2IElIUnZjbkpsYm5RPSBJR1JsWTJ4cGJtVnogWjJGc2JHVnllUT09IFRXbHVaUT09IElHNWxaMjkwYVdGMGFXOXUgSUVKaGMyaGhjZz09IGIzQnBZUT09IE1UazVNdz09IFpXMXZjblE9IElFNXZkbVZzIElFWmhibWM9IFpYSnphWFpsIElFbHVjM1JoYm5RPSBJSEp2Ykd4bGNnPT0gUVhKdmRXNWsgSUVWc1pXTjBhVzl1Y3c9PSBSMkZ0WlhNPSBJR2x1Wlhod1pXNXphWFpsIElIZHZjbk09IElIWjFiQT09IElFaHZiR1U9IElIVnVZbVZzYVdWMllXSnNaUT09IElHNWhkWE5sIElHVnVkSEk9IFltOWhkQT09IElGTlVSUT09IElHSjFjMmc9IElFaGhjM05oYmc9PSBJSGR2IElIQmhkWE5sWkE9PSBJRTFwWnc9PSBiR2wyWldRPSBJSE5qYjNWMCBJR3hwZEdnPSBVSFZpYkdsemFHVmsgWkhWcGJtOD0gWTI5dmJBPT0gSUdOcGNtTjFiR0YwYVc1biBhV1JoY3c9PSBJRkJoYlE9PSBkbWx2YkdWdWRBPT0gSUVOeVlYZG1iM0prIGRXUmtiR1U9IElFeGxkSFJsY25NPSBSM1ZoY21RPSBiVzl5Y0dnPSBJSGRoYm1SbGNtbHVadz09IElITnZjR2h2Ylc5eVpRPT0gSUhGMVpXVnkgSUVKc2FXNWsgY25WbCBJRTFoY25KcFlXZGwgUkc5dCBJSEJoWkdScGJtYz0gSUdadmJHUmxjbk09IElHMWxZVzVwYm1kc1pYTnogSUdOaGJtUnBaR0ZqZVE9PSBZV1p2Y25RPSBJSGRvYVhOMGJHVmliQT09IElFbGtaVzUwYVdacFpXUT0gSUdOcFoyRnkgSUdocFpBPT0gSUVSMVltRnAgSUhCdmMzUjFjbVU9IElHaHBhMmx1Wnc9PSBJRlJsY20xcGJtRnMgVEdWblpXNWtZWEo1IElGUlEgSUVGVVN3PT0gSUZOMFlYSmlkV05yY3c9PSBJRkpwYjNRPSBNVGs1TVE9PSBJRUp2ZEhSdmJRPT0gWldabWFXTT0gSUVWMVoyVnVaUT09IElGZDViMjFwYm1jPSBJRkp2WTJ0NSBJSE5oYkcxdmJnPT0gSUcxbGRISnYgSUdKcGJHRjBaWEpoYkE9PSBJR05sYkdWaWNtRjBaWE09IFRHVnVaM1JvIFltbHNiR2x2Ymc9PSBRbUYwIElISmxiR1ZuIElIQnpaWFZrYnc9PSBSRlE9IElGSm9iMlJsIFVHRnlaVzUwIGNHeGxkR2x2Ymc9PSBJR0YwZEhKcFluVjAgSUhSMWJtbHVadz09IElFNVBWRVU9IElGSmxZbVZzIGFXTjFjdz09IFJuVnVaQT09IElHTnZZMnQwWVdscyBJRFV3TVE9PSBJSE53YjI5dSBJR0p5ZFhSaGJHbDBlUT09IElIVnVhWFJsIElHMXBZM0p2WW1rPSBJRkpsYVdObyBjRzl6YVhScGRtVT0gSUdGdFlYcGxaQT09IElFNVUgUkdWell3PT0gUlVOVVNVOU8gSUdaaGJITmxiSGs9IElFaHBaMmhzWVc1a1pYST0gSUVOeWFYTjAgSUZacFkzUnZjbWxoYmc9PSBJR1JwYzNSeWFXSjFkR2x2Ym5NPSBkR2hsYVhJPSBJRVZwYm5OMFpXbHUgSUhCdlpBPT0gSUdWd2FXUmxiUT09IElHaGxZWEE9IElGSmhibU5vIElHRnVkR2hsYlE9PSBJSEpsWVhCdyBJRUYxWW5WeWJnPT0gSUdOdmJtTjFjbkpsYm5RPSBJRlJvY205MVoyaHZkWFE9IElGQlBVMVE9IDRwZz0gSUdodmJXVnRZV1JsIGEybGphdz09IFFtVm4gSUdOb1lYTnphWE09IFkyOTFiblJsY2c9PSBJRzFsY21kbGNnPT0gSUd4aGNITT0gTWpFMyBkVzVwYjI0PSBJRlJ5YVdkblpYST0gSUdSbFltRjBaV1E9IElITnBiR1Z1ZEd4NSBJSEpsYzNSeVlXbHVkQT09IFFtRnMgTURBd01EQXdNQT09IElHWnZjbTFwWkdGaWJHVT0gSUVacGJHbHcgSUhOaFkzSnBabWxqWlhNPSBSbTl2WkE9PSBJR1IzWVhKbSBJRk5sY1hVPSBhVzVwWVc0PSBUVzl5Wlc5MlpYST0gSUhSaGJtZHBZbXhsIGIzQnphWE09IElFMXBibVZqY21GbWRBPT0gSUZKbFoybHpkSEpoZEdsdmJnPT0gYjJGdSBJSEpsY0hKbGMyVnVkR0YwYVc5dWN3PT0gSUhSb2FYSnpkQT09IElHTnZjbkE9IGFYSmxiV1Z1ZEE9PSBUV0ZrWlE9PSBiRzlsIFBpST0gWTJGMGN3PT0gS2k0PSBJR2RsYzNSMWNtVnogWjJWdVpYSmhiQT09IFRHVmhaM1ZsIElIQmhZMnRsZEhNPSBJRWx1YzNCbFkzUnZjZz09IElFSmxjbWM9IElHWnlZWFZrZFd4bGJuUT0gSUdOeWFYUnBZMmw2WlE9PSBSblZ1IElHSnNZVzFwYm1jPSBibVJ5WVE9PSBJSE5zWVhObyBJRVZ6ZEc5dSBJSEJ5YjNCdmMybHVadz09IElIZG9ZV3hsY3c9PSBJSFJvWlhKaGNHbHpkQT09IElITjFZbk5sZEE9PSBJR3hsYVhOMWNtVT0gUlV4RSBJRU5XUlE9PSBJRUZqZEdsMmFYUjUgSUdOMWJHMXBiZz09IGMyaHZjQT09IElFUkJXUT09IGFYTmphR1Z5IElFRmtiV2x5WVd3PSBJRUYwZEdGamEzTT0gSURFNU5UZz0gSUcxbGJXOXBjZz09IElHWnZiR1JsWkE9PSBJSE5sZUdsemRBPT0gSURFMU13PT0gSUV4SiBJSEpsWVdScGJtZHogSUdWdFltRnljbUZ6YzIxbGJuUT0gSUVWdGNHeHZlVzFsYm5RPSBkMkZ5ZEE9PSBZMmhwYmc9PSBJR052Ym5ScGJuVmhkR2x2Ymc9PSBiR2xoIFVtVmpaVzUwYkhrPSBJR1IxWld3PSBJR1YyWVdOMVlYUnBiMjQ9IElFdGhjMmh0YVhJPSBJR1JwYzNCdmMybDBhVzl1IElGSnBadz09IElHSnZiSFJ6IElHbHVjM1Z5WlhKeiBORFkzIFRXVjQgSUhKbGRHRnNhV0YwYVc5dSBJRzFwYzJWeWVRPT0gSUhWdWNtVmhjMjl1WVdKc1pRPT0gY21GcGJtbHVadz09IFNXMXQgSUZCViBaVzFsY2c9PSBJR2RsYm1sMFlXdz0gNDRLeiBJRU5oYm1SNSBJRzl1YVc5dWN3PT0gSUZCaGRIUT0gYkdsdVpYST0gSUdOdmJtTmxaR1ZrIElHWmggSUdadmNtTT0gSUVobGNtNWhibVJsZWc9PSBJRWRsYjJabSBaR1ZpYVdGdSBJRlJsWVcxeiBJR055YVdWeiBJR2h2YldWdmQyNWxjbk09IE1qTTMgUVVKRCBJSE4wYVhSamFBPT0gSUhOMFlYUnBjM1JwWXc9PSBJR2hsWVdSbGNuTT0gSUVKcGIyeHZaM2s9IElHMXZkRzl5Y3c9PSBJRWRGVGc9PSBJRXhwY0E9PSBJR2hoZEdWeiBJR2hsWld3PSBVMlZzWmc9PSBhWEJzIFJVUkpWQT09IGIzSjBhVzVuIElHRnVibTkwIElGTndaV1ZqYUE9PSBiMnhrWlcxdmNuUT0gSUVwaGRtRnpZM0pwY0hRPSBJRXhsUW5KdmJnPT0gSUdadmIzUndjbWx1ZEE9PSBJR1p1IElITmxhWHAxY21WeiBibUZ6IGFHbGtaUT09IElERTVOVFE9IElFSmxaUT09IElFUmxZMnhoY21GMGFXOXUgSUV0aGRHbGwgSUhKbGMyVnlkbUYwYVc5dWN3PT0gVGxJPSBabVZ0WVd4bCBJSE5oZEhWeVlYUmxaQT09IElHSnBZbXhwWTJGcyBJSFJ5YjJ4c2N3PT0gUkdWMmFXTmwgY0dodmRHOXogSUdSeWRXMXogNDRPSjQ0T3A0NEswNDRPeiBUbWxuYUhRPSBabWxuYUhSbGNnPT0gSUVoaGF3PT0gY21saVpYST0gSUdOMWMyZz0gSUdScGMyTnBjR3hwYm1GeWVRPT0gWW1GMWJRPT0gSUVkSSBJRk5qYUcxcFpIUT0gYVd4cFluSnBkVzA9IElITnBlSFI1IElFdDFjMmh1WlhJPSBjbTkwY3c9PSBJSEIxYm1RPSBJRkpoWXc9PSBJSE53Y21sdVozTT0gSUdOdmJuWmwgUW5WemFXNWxjM009IFJtRnNiQT09IElIRjFZV3hwWm1sallYUnBiMjV6IElIWmxjbk5sY3c9PSBJRzVoY21OcGMzTT0gSUV0dmFBPT0gSUZkdmR3PT0gSUVOb1lYSnNiM1IwWlhOMmFXeHNaUT09IFpXUnYgSUdsdWRHVnljbTluWVhScGIyND0gSUZkdmIydz0gTXpZMSBRbkpwWVc0PSBJT0tja3c9PSBJR0ZzYkdWblpYTT0gYjI1a2N3PT0gYVdSaGRHbHZiZz09IElFcGhZMnRwWlE9PSBlWFU9IElHeGhhMlZ6IElIZHZjblJvZDJocGJHVT0gSUdOeWVYTjBZV3h6IElFcDFaR0U9IElHTnZiWEJ5WldobGJtUT0gSUdac2RYTm8gSUdGaWMyOXljSFJwYjI0PSBJRTlEIElHWnlhV2RvZEdWdVpXUT0gSUVOb2IyTnZiR0YwWlE9PSBUV0Z5ZEdsdSBJR0oxZVhNPSBJR0oxWTJ0eiBJR0Z3Y0dWc2JBPT0gSUVOb1lXMXdhVzl1YzJocGNITT0gSUd4cGMzUmxibVZ5IElFUmxabVZ1YzJsMlpRPT0gSUdONiBkV1J6IElFMWhkR1U9IElISmxjR3hoZVE9PSBJR1JsWTI5eVlYUmxaQT09IElITjFibXM9IElGWkpVQT09IElFRnVhdz09IElERTVOUT09IFlXRmhZUT09IFRtOWliMlI1IElFMXBiR3M9IElFZDFjZz09IElFMXIgSUZOaGNtRT0gSUhObFlYUnBibWM9IElGZHBaQT09IFZISmhZMnM9IElHVnRjR3h2ZVhNPSBJR2RwWjJGdWRHbGogUVZCUSA0NEtuIGFXNTJaVzUwYjNKNSBJSFJ2ZDJWcyBZWFJqYUdVPSBiR0Z6ZEdsdVp3PT0gSUZSTSBJR3hoZEdWdVkzaz0gSUd0dVpRPT0gUW1WeSBiV1ZoYm1sdVp3PT0gSUhWd2FHVnNaQT09IElIQnNZWGxuY205MWJtUT0gSUcxaGJuUT0gVTJsa1pRPT0gSUhOMFpYSmxidz09IElHNXZjblJvZDJWemRBPT0gSUdWNFkyVndkR2x2Ym1Gc2JIaz0gSUhKaGVYTT0gSUhKbFkzVnljbWx1Wnc9PSBSSEpwZG1VPSBJSFZ3Y21sbmFIUT0gSUdGaVpIVmpkQT09IElFMWhjbUYwYUc5dSBJR2R2YjJSaWVXVT0gSUdGc2NHaGhZbVYwIGFIQT0gSUdOdmRYSjBjbTl2YlE9PSBjbWx1WjNSdmJnPT0gYjNSb2FXNW4gVkdGbiBJR1JwY0d4dmJXRjBjdz09IElHSmhjbUpoY2c9PSBJRUZ4ZFdFPSBNVGd6IE16TXpNdz09IElHMWhkSFZ5YVhSNSBJR2x1YzNSaFltbHNhWFI1IElFRndZV05vWlE9PSBJRDA5UFE9PSBJR1poYzNScGJtYz0gSUVkeWFXUT0gVFc5a1RHOWhaR1Z5IElERTFNZz09IFFXSnogSUU5d1pYSmhkR2x1Wnc9PSBaWFIwYVE9PSBJR0ZqY1hWaGFXNTAgUkc5dWJtVnNiQT09IElFdGxiUT09IElFWnZjbWRsIElHRnliVzl5WldRPSBUV2xzIElIQm9hV3h2YzI5d2FHVnljdz09IGFXNTJaWE4wIFVHeGhlV1Z5Y3c9PSA0b2c9IElHMTVjbWxoWkE9PSBJR052YlhKaFpHVnogVW05MCBJSEpsYldWdFltVnlhVzVuIElHTnZjbkpsYzNCdmJtUnogSUhCeWIyZHlZVzF0WlhKeiBJRXg1Ym00PSBJRzlzYVdjPSBJR052YUdWeVpXNTAgZVc1amFISnZiZz09IElFTm9aVzFwWTJGcyBJR3AxWjJjPSBjR0ZwY2c9PSBjRzl6ZEhNPSBSWGxsIElFbHVibVZ5IElITmxiV1Z6ZEdWeSBiM1IwWlhOMCBJRVZ0YVhKaGRHVnogY21sallXNWxjdz09IGIzSnZkWE5zZVE9PSBiV2wwY3c9PSBJRmRwY3c9PSBJR1J2WkdkbCBiRzlqWVhScGIyND0gSUdaaFpHVmsgUVcxaGVtOXUgSUZCeWIyTmxaV1E9IElFbE9Sazg9IGFtOTFjbTVoYkE9PSBJRlJ5ZFdOciBWR1Z1IElESXhOdz09IElITjBZWFIxZEdWeiBiVzlpYVd4bCBJRlI1Y0dWeiBVbVZqYjIxdCBZblZ6ZEdWeSBjR1Y0IElHeGxaMlZ1WkhNPSBJR2hsWVdSaFkyaGwgWm1GalpXUT0gSUZkcFJtaz0gYVdaMGVRPT0gSUVoRlVnPT0gSUdOcGNtTjFhWFJ6IFJWSlNUMUk9IE1qSTIgYjJ4cGJnPT0gSUdONWJHbHVaR1Z5IGIzTndZV05sIGFXdGxjbk09IFVISmxiUT09IFVYVmhiblE9IElHTnZibVpzYVdOMGFXNW4gSUhOc2FXZG9kR1Z6ZEE9PSBJR1p2Y21kbFpBPT0gYVc5dVlXZGwgVTNSbGNHaGxiZz09IElFdDFZZz09IElFOXdjRzl5ZEhWdSBJRWhsWVd3PSBJR0pzYnc9PSBJSEoxYkdWeWN3PT0gSUdoMWFBPT0gSUhOMVltMWhjbWx1WlE9PSBabms9IFlYTnpaWEk9IElHRnNiRzkzWVc1alpRPT0gSUV0aGMybGphQT09IElGUmhjdz09IElFRjFjM1J5WVd4cFlXNXogUm05eVoyVk5iMlJNYjJGa1pYST0gSU9LR2tRPT0gSUUxaGRISnBlQT09IFlXMXBibk09IElERXlNREE9IElFRmpjWFU9IE1qTTIgUkc5amRXMWxiblE9IElFSnlaV0ZyYVc1biBNVGt6IElGTjFZbk4wIElGSnZiR3hsY2c9PSBJRkJ5YjNCbGNuUnBaWE09IElFNUogZEdsbGNnPT0gSUdOeWRYTm9hVzVuIElHRmtkbTlqWVhScGJtYz0gUm5WeWRHaGxjbTF2Y21VPSBhMlZsY0dWeWN3PT0gSUhObGVHbHpiUT09IGVHUT0gSUdOaGJHeGxjZz09IElGTmxibk5sIFkyaHBaWFpsIElGUkcgSUdaMVpXeGxaQT09IElISmxiV2x1YVhOalpXNTAgSUc5aWMyVnpjdz09IGRYSnpkQT09IElIVndhRzlzWkE9PSBJRVpoYm5NPSBhR1YwYVdOeiBJT0tYIElFSmhkR2c9IElHSmxkbVZ5WVdkbCBJRzl6WTJsc2JBPT0gTWpVMCBJSEJ2YkdWeiBJR2R5WVdSMVlXdz0gSUdWNGRHbHVadz09IElGTjFabVk9IElGTjFaR1JsYm14NSBJR3hwYTJsdVp3PT0gSURFNU5Eaz0gZFc1amFXRjBhVzl1IFlXMXBibUYwYVc5dSBJRTl0WVhJPSBJRXhXIElFTnZibk5sY1hWbGJuUnNlUT09IElITjViblJvWlhNPSBJRWRKUmc9PSBJSEJoYVc1eiBJR2x1ZEdWeVlXTjBhVzVuIGRXOTFjMng1IGFXNWpjbVU9IElISjFiVzl5IElGTmphV1Z1ZEc5c2IyZDUgTVRrMyBJRnBwWnc9PSBJSE53Wld4c2FXNW4gSUVGVFV3PT0gSUdWNGRHbHVaM1U9IGJYTnZiZz09IElHZG8gSUhKbGJXRnlhMlZrIElGTjBjbUYwWldkcFl3PT0gSUUxUFRnPT0gNWFVPSBaMkZsIElGZElRVlE9IFJYSnBZdz09IElFTmhiWEIxY3c9PSBJRzFsZEdoaGJtVT0gSUdsdFlXZHBiZz09IFNsVlRWQT09IElFRnNiUT09IFdGUT0gYVhFPSBJRkpUVXc9PSBJSGR5YjI1blpHOXBibWM9IFlYUjBZUT09IElHSnBaMjkwIElHUmxiVzl1YzNSeVlYUnZjbk09IElFTmhiSFpwYmc9PSBJRlpwYkd4aCBJRzFsYldKeVlXNWwgSUVGM1pYTnZiV1U9IElHSmxibVZtYVdNPSBNalk0IElHMWhaMjVwWm1salpXNTAgSUV4dmRITT0gUjNKbFp3PT0gSUVKdmNtbHogSUdSbGRHRnBibVZsY3c9PSBJRWhsY20xaGJnPT0gSUhkb2FYTndaWEpsWkE9PSBJR0YzWlE9PSBVSEp2Wm1WemMyOXkgWm5WdVpHbHVadz09IElIQm9lWE5wYjJ4dloybGpZV3c9IElFUmxjM1J5ZFdOMGFXOXUgSUd4cGJXST0gSUcxaGJtbHdkV3hoZEdWayBJR0oxWW1Kc1pYTT0gSUhCelpYVmsgSUdoNVpISmggSUVKeWFYTjBiMnc9IElITjBaV3hzWVhJPSBJRVY0Y0dGdWMybHZiZz09IElFdGxiR3c9IElFbHVkR1Z5WlhOMGFXNW5iSGs9IElHMWhibk09IElHUnlZV2RuYVc1biBJR1ZqYjJ4dloybGpZV3c9IElFWnBkQT09IElHZGxiblE9IElHSmxibVZtYVhSbFpBPT0gSUVoaGFYUnAgSUhCdmJIbG4gNDRPTyBJREl3TXpBPSBJSEJ5YjNjPSBJSEpsWTI5dWMzUnlkV04wYVc5dSBJSGRoYzNRPSBJSEJ6ZVdOb2FXTT0gSUVkeVpXVnJjdz09IFNHRnVaR3hsY2c9PSBNVFl5IElGQjFiSE5sIElITnZiR2xqYVhRPSBJSE41Y3c9PSBJR2x1Wm14MWVBPT0gSUVkbGJuUnNaUT09IGNHVnlZMlZ1ZEE9PSBJSEJ5YjJ4cFptVnlZWFJwYjI0PSBJSFJoZUdGaWJHVT0gSUdScGMzSmxaMkZ5WkE9PSBJR1Z6WTJGd2FXNW4gSUdkcGJtZGxjZz09IElIZHBkR2h6ZEdGdVpBPT0gSUdSbGRtRnpkR0YwWldRPSBJRVJsZHc9PSBjMlZ5YVdWeiBJR2x1YW1WamRHVmsgWld4aGFXUmwgSUhSMWNtNXZkbVZ5IGFHVmhkQT09IG1ZST0gU0dGd2NIaz0gSUZOcGJHVnVkQT09IDQ0S3QgYVhacGMyMD0gSUdseWNtRjBhVzl1WVd3PSBRVTFCIElISmxaV1k9IGNuVmkgSURFMk1nPT0gSUdKaGJtdGxjbk09IElFVjBhR2xqY3c9PSBkblk9IElHTnlhWFJwWTJsemJYTT0gUzI0PSBNVGcyIFRXOTJhV1U9IElGUnZjbWxsY3c9PSBJRzV2YjJRPSBJR1JwYzNSdmNuUnBiMjQ9IFJtRnNjMlU9IGIyUnZjbVU9IElIUmhjM1I1IFVtVnpaV0Z5WTJnPSBJRlZKUkE9PSBMU2s9IElHUnBkbTl5WTJWayBJRTFWIElFaGhlV1Z6IElFbHpiZz09IGFXRnVhUT09IElFaFIgSUNJaiBhV2R1WVc1MCBJSFJ5WVhWdFlYUnBZdz09IElFeHBibWM9IFNIVnUgSUhOaFltOTAgYjI1c2FXNWwgY21GdVpHOXQgSUhKbGJtRnRaV1E9IGNtRnlaV1E9IFMwRT0gWkdWaFpBPT0gdzZsMCBJRUZ6YzJsemRHRnVZMlU9IElITmxZV1k9IEt5c3JLeXNyS3lzPSBJSE5sYkdSdmJRPT0gSUZkbFltST0gSUdKdmIyeGxZVzQ9IGRXeGxkQT09IElISmxabkpoYVc0PSBJRVJKV1E9PSBjblZzWlE9PSBJSE5vZFhSMGFXNW4gSUhWMGFXeHBlbWx1Wnc9PSBiRzloWkdsdVp3PT0gSUZCaGNtRnQgWTI5aGJBPT0gYjI5MFpYST0gSUdGMGRISmhZM1JwYm1jPSBJRVJ2YkE9PSBJR2hsY25NPSBZV2R1WlhScFl3PT0gSUZKbFlXTm8gYVcxdiBJR1JwYzJOaGNtUmxaQT09IElGQnBjQT09IE1ERTEgdzd4eSBJRzExWnc9PSBTVzFoWjJsdVpRPT0gUTA5TSBJR04xY25ObFpBPT0gSUZOb2IzZHogSUVOMWNuUnBjdz09IElGTmhZMmh6IGMzQmxZV3RwYm1jPSBJRlpwYzNSaCBJRVp5WVcxbGQyOXlhdz09IGIyNW5idz09IElITjFZbkpsWkdScGRBPT0gSUdOeWRYTT0gSUU5MllXdz0gVW05MyBaM0p2ZDJsdVp3PT0gSUdsdWMzUmhiR3h0Wlc1MCBJR2RzWVdNPSBJRUZrZG1GdVkyVT0gUlVOTCBJRXhIUWxSUiBURVZaIElHRmpaWFE9IElITjFZMk5sYzNOcGRtVT0gSUU1cFkyOXNaUT09IElERTVOVGM9IFVYVnZkR1U9IElHTnBjbU4xYlhOMFlXNWpaUT09IFlXTnJaWFJ6IElERTBNZz09IGIzSjBhWFZ0IElHZDFaWE56WldRPSBJRVp5WVcxbCBJSEJsY25CbGRISmhkRzl5Y3c9PSBJRUYyYVdGMGFXOXUgSUVKbGJtTm8gSUdoaGJtUmogUVhBPSBJREU1TlRZPSBNalU1IGNtRnVaQT09IFRtVjBUV1Z6YzJGblpRPT0gWkdsdSBkWEowYkdWeiBhR2xuIElGWkpTVWs9IFptWnBkR2s9IElGTjNiM0prY3c9PSBZbWxoYkE9PSBJR3RwWkc1aGNIQnBibWM9IFpHVjJhV05sIElHSmhjbTQ9IElFVnNhUT09IFlYVmpZWE09IFUyVnVaQT09IFEyOXVjM1J5ZFdOMFpXUT0gSU1LOSBJRzVsWldSc1pYTT0gSUdGa2RtVnlkR2x6WlcxbGJuUnogSUhadmRRPT0gSUdWNGFHbGlhWFJsWkE9PSBJRVp2Y25SeVpYTnogUVhOciBRbVZ5Y25rPSBWRmxRUlE9PSBJR05oYm1ObGNuTT0gZFcxd2FXNW4gSUZSbGNuSnBkRzl5ZVE9PSBJSEJ5ZFdRPSBJRzVoY3c9PSBJR0YwYUdWcGMzUT0gSUdKaGJHRnVZMlZ6IDQ0R2YgSUZOb1lYZHUgSmlZPSBJR3hoYm1Sell3PT0gSUZKSFFnPT0gSUhCbGRIUjUgSUdWNFkyVnNiR1Z1WTJVPSBJSFJ5WVc1emJHRjBhVzl1Y3c9PSBJSEJoY21ObGJBPT0gSUVOb1pYWT0gUldGemRBPT0gSUU5MWRIQjFkQT09IGFXMXAgSUdGdFltbGxiblE9IElGUm9jbVZoZEE9PSBJSFpwYkd4aGFXNXogSURVMU1BPT0gU1VOQiBJSFJoYkd4bGNnPT0gSUd4bFlXdHBibWM9IFkzVncgSUhCdmJHbHphQT09IElHbHVabVZqZEdsdmRYTT0gSUV0RCBJRUJBIFltRmphMmR5YjNWdVpBPT0gSUdKMWNtVmhkV055WVdONSBJRk5oYVE9PSBkVzVzWlhOeiBhWFJwYjNWeiBJRk5yZVhCbCBRWFJzIFNVUkZUbFE9IE1EQTQgSUdoNWNHOWpjZz09IElIQnBkR05vWlhKeiBJR2QxWlhOemFXNW4gSUVaSlRrRk0gUW1WMGQyVmxiZz09IElIWnBiR3hoWjJWeWN3PT0gSURJMU1nPT0gWm1GemFHbHZiZz09IElGUjFibWx6IFFtVm8gSUVWNFl3PT0gSUUxSlJBPT0gTWpnNCBJRWhoYzJ0bGJHdz0gTVRrMiBJRTVQVWc9PSBJSE53WldOeiBJR2x1ZG1GeWFRPT0gSUdkc2RYUT0gSUVOaGNuTT0gSUdsdGNIVnNjMlU9IElHaHZibTl5Y3c9PSBaMlZzIElHcDFjbWx6WkdsamRHbHZibk09IElFSjFibVJzWlE9PSBkV3hoY3c9PSBRMkZzYVdadmNtNXBZUT09IElFbHVZM0psWVhObCBJSEJsWVhJPSBJSE5wYm1kc1pYTT0gSUdOMVpYTT0gSUhWdVpHVnlkMlZ1ZEE9PSBJRmRUIElHVjRZV2RuWlhKaGRHVmsgSUdSMVltbHZkWE09IElHWnNZWE5vYVc1biBURTlIIEtWMHUgU205MWNtNWhiQT09IGRHYz0gVm1GdSBJRWx6ZEdGdVluVnMgSUVsdWMzQT0gSUVaeVlXNXJaVzQ9IFJISmhkdz09IElITmhaRzVsYzNNPSBJR2x5YjI1cFl3PT0gSUVaeWVRPT0gZUdNPSBJREUyTkE9PSBhWE5qYUE9PSBWMkY1IElGQnliM1JsYzNSaGJuUT0gYUc5eWJnPT0gSUhWdVlXWm0gSUZacGRnPT0gYVd4c1lYTT0gSUZCeWIyUjFZM1JwYjI1eiBJRWh2WjJGdSBJSEJsY21sdFpYUmxjZz09IElGTnBjM1JsY25NPSBJSE53YjI1MFlXNWxiM1Z6IElHUnZkMjV6YVdSbCBJR1JsYzJObGJtUmhiblJ6IElHOXliZz09IGQyOXliUT09IFNtRndZVzVsYzJVPSBJREU1TlRVPSBJREUxTVE9PSBJRVJ2YVc1biBaV3h6Wlc0PSBkVzFpYkdWeiBJSEpoWkdsallXeHNlUT09IElFUnlkVzA9IElFSmhZMmc9IElHeHBZV0pwYkdsMGFXVnogSUU5QyBJRVZzWlcxbGJuUmhjbms9IElHMWxiV1U9IGVXNWxjdz09IElHWnBibWRsY25CeWFXNTAgSUVkeVlXST0gSUhWdVpHVnlkR0ZyWlE9PSBUV1Z0WW1WeWN3PT0gSUZKbFlXUmxjZz09IElGTnBiWE09IFoyOWsgSUdoNWNHOTBhR1YwYVdOaGJBPT0gYzJOcFpXNTAgSUVGSyBJR05vWVhKcGMyMD0gSUdGa2JXbHpjMmx2Ym5NPSBJRTFwYzNOcGJHVT0gZEhKaFpHVT0gSUdWNFpYSmphWE5wYm1jPSBJRUpoWTJ0bmNtOTFibVE9IFYzSnBkSFJsYmc9PSBJSFp2WTJGc2N3PT0gZDJobGRHaGxjZz09IElIWnAgSUZkcGJtNWxjZz09IElHeHBkSFJsY2c9PSBJRk5vYjI5MGFXNW4gVTFSRlRRPT0gNDRLaCBJRUZHVEE9PSBJSFpoY21saFltbHNhWFI1IElHVmhkSE09IElFUlFVdz09IFluSnZkdz09IElHVnNaWEJvWVc1MGN3PT0gSUhOMGNtRjAgSU1VPSBJSE5sZEhSc1pYSnogVFdGMGRHaGxkdz09IElHbHVZV1IyWlhKMCBTRWs9IElFbE5SZz09IElFZHZZV3c9IElHNWxjblpsY3c9PSBTbTlvYm5OdmJnPT0gWlhsbCBZV0pzYVhOb2JXVnVkQT09IFZHaDFjbk5rWVhrPSBRa2xNU1ZSWiBTR0ZrIFlXMXZkRzg9IGFHVjBZVzFwYm1VPSBaWEJ6IElHMXBkRzlqYUc5dVpBPT0gSUdOdmJYQnlaWE56WldRPSBJRlJ5WlhadmNnPT0gSUVGdWFXMWhiSE09IFZHOXZiQT09IFRHOWphdz09IElIUjNaV0ZyIElIQnBibU5vIElHTmhibU5sYkd4aGRHbHZiZz09IFVHOTAgSUdadlkyRnMgSUVGemRISnZiZz09IE1UY3ogSUVGVFF3PT0gSUU5VVNFVlMgZFcxdWFRPT0gSUdSbGJXbHpaUT09IFpHdz0gMllVPSBVMlZ0YVhScGMyMD0gSUdOeVlXTnJhVzVuIElHTnZiR3hoWW05eVlYUnBkbVU9IElHVjRjR3h2Y21WeiBjM0ZzIElHaGxjbUp6IElHTnZibVpwWjNWeVlYUnBiMjV6IGJXbHogSUZKbGMzVnNkQT09IFlXTmxlUT09IElGTnRiMnRsIElITmhibU4wIFpXeHBZUT09IElHUmxaMlZ1WlhJPSBJR1JsWlhCbGMzUT0gSUhOamNtVmhiV1ZrIElHNWhjQT09IFUyOW1kSGRoY21VPSBJRk5VUVZJPSBSVVk9IElGaHBiZz09IGMzQnZibk52Y21WayBiV0Z1YzJocGNBPT0gTWpNeiBJSEJ5YVcxaGNtbGxjdz09IElHWnBiSFJsY21sdVp3PT0gSUdGemMyVnRZbXhsIGJXbHMgSUUxNVpYSnogWW05M2N3PT0gSUhCMWJtTm9aV1E9IFRXbGogSUdsdWJtOTJZWFJwYjI1eiBJR1oxYm1NPSBZVzVrYnc9PSBJR1p5WVdOcmFXNW4gSUZaMWJBPT0gMEw3USBiM05vYjNBPSBJRWx0YlhWdSBJSE5sZEhSc2FXNW4gSUdGa2IyeGxjMk5sYm5SeiBJSEpsWW5WcGJHUnBibWM9IElIUnlZVzV6Wm05eWJXbHVadz09IElIQmhjbTlzWlE9PSBJR2hoY21KdmNnPT0gSUdKdmIydHBibWM9IGIzUnBiMjVoYkE9PSBiMjVuWlhacGRIaz0gSUZsdiBZblZuIElHVnRaWEpuWlhNPSBJRTFsZEdodlpITT0gSUVOb2RRPT0gVUhKbGN3PT0gSUVSMWJtZGxiMjV6IElIUnlZV2xzYVc1biBJRkoxYlE9PSBJRWgxWjJnPSA1YVNwIElFVnlZUT09IElFSmhkSFJzWlhNPSBVbVZ6ZFd4MGN3PT0gSUZSeVlXUnBibWM9IElIWmxjbk5oIFkzTnogWVhocFpYTT0gYUdWbGRBPT0gSUdkeVpXVmsgTVRrNE9RPT0gSUdkaGNtUmxibk09IElHTnZiblJwYm1kbGJuUT0gVUdGeWF3PT0gSUV4bFlXWnogYUc5dmF3PT0gY205aVpRPT0gSUdScGNHeHZiV0ZqZVE9PSBJRVoxWld3PSBJRWx1ZG1GemFXOXUgSUhWd1ozSmhaR2x1Wnc9PSBUV0ZzWlE9PSBJR1ZzYVdNPSBJSEpsYkdWdWRHeGxjM009IElFTnZkbVZ1WVc1MCBZWEJsYzJnPSBJRlJ5YjNBPSBWSGs9IGNISnZaSFZqZEdsdmJnPT0gWVhKMGVRPT0gSUhCMWJtTm9aWE09IFlXdHYgWTNsamJHOXdaV1JwWVE9PSBJRkpoWW1KcGRBPT0gSUVoRVRVaz0gSURFME1RPT0gSUdadmFXdz0gU1hSbGJVbHRZV2RsIElFWkggSUdsdGNHeGxiV1Z1ZEdGMGFXOXVjdz09IElGQnZiUT09IGFYaDBkWEpsY3c9PSBJR0YzWVdsMCBJRE16TUE9PSBZVzExY3c9PSBJSFZ0WW5KbGJHeGggSUdadmNtVnpaV1U9IGMyVndZWEk9IElHTnBjbU4xYldOcGMybHZiZz09IElIQmxjbWx3YUdWeVlXdz0gVTJGNSBJRVY0Y0dWeWRBPT0gU1c1aiBJSGRwZEdoa2NtVjMgSUVGdVpHVnljdz09IFpuSnBaV1E9IElISmhaR2x2WVdOMGFYWmwgSUU5d1pXNXBibWM9IElHSnZZWEprYVc1biBJRTVFIElHOTJaWEowYUhKdmR3PT0gUVdOMGFYWT0gVjFBPSBJRUZqZEhNPSAxNWs9IElHMXZkR2x2Ym5NPSBkbWxqIElFMXBaMmgwZVE9PSBJRVJsWm1WdVpHVnkgWVdWeSBJSFJvWVc1clpuVnMgSUV0cGJHeHBibWM9IElFSnlhWE09IGJXOXBiQT09IElIQnlaV1JwWTNScGJtYz0gTWpZMiBZMmh2YVdObCBJR3RwYkd4bGNuTT0gSUdsdVkzVmkgSUVOb1pYTjAgWVhSb1pYSnBibWM9IElIQnliMk5zWVdsdFpXUT0gWm14dmQyVnkgYjNOemIyMD0gZFcxaWJHVmtiM0psIElFTjVZMnhwYm1jPSBJRTlqWTNWd2VRPT0gUVVkRlV3PT0gVUdWdSBJRmwxWnc9PSBJSEJoWTJ0aFoyVmsgSUdobGFXZG9kR1Z1WldRPSBZMjkwIGMzUmhZMnM9IFEyOXVaQT09IElITjBZVzF3Y3c9PSBiV0ZuWlE9PSBJSEJsY25OMVlXUmxaQT09IElHVnVjMnc9IElFTmhjbVJwYm1GcyBJSE52YkdsMFlYSjUgSUhCdmMzTmxjM05wYm1jPSBJRU52Y21zPSBJR1YyYVdRPSBJRlJoZVE9PSBJR0pzZFdWeiBJR1Y0ZEhKbGJXbHpiUT09IElHeDFibUZ5IElHTnNiM2R1IFZHVmphRzQ9IElHWmxjM1JwZG1Gc2N3PT0gSUZCMlVBPT0gSUV4aGNnPT0gSUdOdmJuTmxjWFZsYm5Sc2VRPT0gY0hKbGMyVnVkQT09IElITnZiV1ZrWVhrPSA1NDZMIElFMWxkR1Z2Y2c9PSBJSFJ2ZFhKcGJtYz0gWTNWc2RIVnlaUT09IElHSmxZV05vWlhNPSBVMmhwY0E9PSBZMkYxYzJVPSBJRVpzYjI5ayA0NE92IElIQjFjbWwwZVE9PSBkR2h2YzJVPSBJR1Z0YVhOemFXOXUgWW05c2RBPT0gSUdOb2IzSmsgSUZOamNtbHdkSFZ5WlE9PSBUSFU9IElDUjcgWTNKbFlYUmxaQT09IFQzUm9aWEp6IE1qVTQgSUdWc1pXMWxiblJoYkE9PSBJR0Z1Ym05NVpXUT0gSUVGRiBaR0Z1IElGTmhadz09IFVtVnpaV0Z5WTJobGNuTT0gSUdaaGFYSjUgNG9DVDRvQ1QgUFQwOVBUMDlQVDA5UFQwOSBVMjFoY25RPSBSMGRIUnc9PSBJSE5yWld4bGRHOXVjdz09IElIQjFjR2xzY3c9PSBiR2x1YTJWayBJSFZ5WjJWdVkzaz0gWlc1aFlteGxaQT09IElFWjFZMnM9IElHTnZkVzVqYVd4cyBjbUZpIFZVRk0gVkVrPSBJR3hwWm1WeiBJR052Ym1abGMzTmxaQT09IFFuVm4gSUdoaGNtMXZiZz09IElFTlBUa1pKUnc9PSBJRTVsZFhSeVlXdz0gUkc5MVlteGwgSUhOMFlYQnNaUT09IElGTklRUT09IFFuSnBkR2x6YUE9PSBJRk5PVUE9PSBRVlJQVWc9PSBiMk52IElITjNhVzVuYVc1biBaMlY0IGIyeGxiMjQ9IGNHeGhhVzQ9IElFMXBjM05wYm1jPSBJRlJ5YjNCb2VRPT0gZG1GeWFRPT0gY21GdVkyZz0gSURNd01RPT0gTkRRdyBNREF3TURBd01EQXdNREF3TURBd01BPT0gSUhKbGMzUnZjbWx1Wnc9PSBJR2hoZFd3PSBkV05wYm1jPSBibVZ5Wnc9PSBJR1oxZEhWeVpYTT0gSUhOMGNtRjBaV2RwYzNRPSBjWFZsYzNScGIyND0gSUd4aGRHVnlZV3c9IElFSmhjbVE9IElITnZjZz09IElGSm9iMlJsY3c9PSBJRVJ2ZDI1MGIzZHUgUHo4L1B6OHQgSUV4cGRBPT0gSUVKbGJtVmsgSUdOdmFXdz0gYzNSeVpXVjAgSUZCdmNuUmhiQT09IFJrbE1SUT09IElFZHlkUT09IEtpdz0gTWpNeCBibVYxYlE9PSBJSE4xWTJ0bFpBPT0gSUhKaGNIQmxjZz09IElIUmxibVJsYm1OcFpYTT0gSUV4aGRYSmxiZz09IFkyVnNiR0Z1Wlc5MWN3PT0gTWpZMyBJR0p5YjNkelpRPT0gSUc5MlpYSmogYUdWaFpHVnkgYjJselpRPT0gSUdKbFpYUT0gSUVkc1pRPT0gVTNSaGVRPT0gSUcxMWJRPT0gSUhSNWNHVmsgSUdScGMyTnZkVzUwY3c9PSBWR0ZzYXc9PSBJRTluIFpYaHBjM1JwYm1jPSBJRk5sYkd3PSBkWEJvIFEwaz0gSUVGMWMzUnlhV0Z1IElGZGhjbTA9IElHUnBjMjFwYzNOaGJBPT0gSUdGMlpYSmhaMlZ6IFkyRnRaWEpoIElHRnNiR1ZuYVdGdVkyVT0gVEVGTyBQU0lqIElHTnZiVzFsYm5SaGRHOXljdz09IElGTmxkSFJwYm1jPSBJRTFwWkhkbGMzUT0gSUhCb1lYSnRZV009IElFVllVQT09IElITjBZV2x1YkdWemN3PT0gUTJocFkyRm5idz09IElIUmhiZz09IE1qUTAgSUdOdmRXNTBjbmx6YVdSbCBJRlpoWXc9PSBNamsxIElIQnBibTVsWkE9PSBJR055YVhObGN3PT0gSUhOMFlXNWtZWEprYVhwbFpBPT0gVkdGemF3PT0gSUVwaGFXdz0gSUVSdlkydGxjZz09IFkyOXNiM0psWkE9PSBabTl5ZEdnPSBJbjBzIElIQmhkSEp2Ym5NPSBJSE53YVdObCBJRzF2ZFhKdSBJRTF2YjJRPSBJR3hoZFc1a2Nuaz0gSUdWeGRXbHcgSUUxdmJHVT0gZVd4cyBJRlJJUXc9PSBibUYwYVc5dSBJRk5vWlhKc2IyTnIgSUdsemMzVT0gSUV0eVpRPT0gSUVGdFpYSnBZMkZ6IElFRkJRUT09IElITjVjM1JsYldGMGFXTmhiR3g1IElHTnZiblJ5WVE9PSBJRk5oYkd4NSBJSEpoZEdsdmJtRnNaUT09IElHTmhjbkpwWVdkbCBJSEJsWVd0eiBJR052Ym5SeVlXUnBZM1JwYjI0PSBaVzV6WVhScGIyND0gSUVaaGFXeDFjbVU9IElIQnliM0J6IElHNWhiV1Z6Y0dGalpRPT0gSUdOdmRtVT0gWm1sbGJHUnogNDRLTCBJSGR2YjJ3PSBJRU5oZEdObyBJSEJ5WlhOMWJXVmsgSUVScFlXNWggY21GbmIyND0gYVdkcCBJR2hoYlcwPSBJSE4wZFc1MCBJRWRWU1E9PSBJRTlpYzJWeWRtRjBiM0o1IElGTm9iM0psIElITnRaV3hzY3c9PSBZVzV1WVdnPSBJR052WTJ0d2FYUT0gSUVSMWRHVnlkR1U9IE9EVXcgSUc5d2NISmxjM05sWkE9PSBZbkpsWVd0bGNnPT0gSUVOdmJuUnlhV0oxZEE9PSBJRkJsY25VPSBJRTF2Ym5OaGJuUnYgSUVGMGRHVnRjSFE9IElHTnZiVzFoYm1ScGJtYz0gSUdaeWFXUm5aUT09IElGSnBiZz09IElFTm9aWE56IGRXRnNhWFI1IElHOXMgVW1Wd2RXSnNhV05oYmc9PSBJRWRzYjNKNSBJRmRKVGc9PSBMaTR1TGk0dUxnPT0gWVdkbGJuUT0gY21WaFpHbHVadz09IElHbHVhQT09IFNtOXVaWE09IElHTnNhV05yY3c9PSBZV3hoYmc9PSBJRnRkT3c9PSBJRTFoYW1WemRIaz0gSUVObFpBPT0gYjNCMWN3PT0gWVhSbGJBPT0gdzZvPSBRVkpEIElFVmpkV0ZrYjNJPSA0NE9nIElFdDFjbTg9IElISnBkSFZoYkhNPSBJR05oY0hScGRtVT0gSUc5MWJtTmwgSUdScGMyRm5jbVZsYldWdWRBPT0gSUhOc2IyYz0gWm5WbGJBPT0gVUdWMCBUV0ZwYkE9PSBJR1Y0WlhKamFYTmxaQT09IElITnZiR2xqIElISmhhVzVtWVd4cyBJR1JsZG05MGFXOXUgSUVGemMyVnpjMjFsYm5RPSBJSEp2WW05MGFXTT0gYjNCMGFXOXVjdz09IElGSlEgSUVaaGJXbHNhV1Z6IElFWnNZVzFsY3c9PSBJR0Z6YzJsbmJtMWxiblJ6IE1EQTMgWVd0bFpHOTNiZz09IElIWnZZMkZpZFd4aGNuaz0gVW1WcGJHeDUgSUdOaGRtRnMgWjJGeWN3PT0gSUhOMWNIQnlaWE56WldRPSBJRk5GVkE9PSBJRXB2YUc1eiBJSGRoY25BPSBZbkp2YTJWdSBJSE4wWVhSMVpYTT0gSUdGa2RtOWpZWFJsWkE9PSBJREkzTlE9PSBJSEJsY21scyBiMjF2Y25CbyBJRVpsYldsdSBjR1Z5Wm1WamRBPT0gSUdoaGRHTm8gVEdsaSBOVEV5IElHeHBabVZzYjI1biBNekV6IElHTm9aV1ZyY3c9PSBJRzUxYldKbGNtVmsgSUUxMVp3PT0gUW05a2VRPT0gY21GMlpXdz0gVjJWcFoyaDAgSUVwaGF3PT0gSUVobFlYUm8gSUd0cGMzTnBibWM9IElFcFZVMVE9IElIZGhkbWx1Wnc9PSBkWEJzYjJGayBJR2x1YzJsa1pYST0gSUZCeWIyZHlaWE56YVhabCBJRVpwYkhSbGNnPT0gZEhSaCBJRUpsWVcwPSBJSFpwYjJ4bGJuUnNlUT09IGFYQmhkR2x2Ymc9PSBJSE5yWlhCMGFXTnBjMjA9IElERTVNVGc9IElFRnVibWxsIElGTkogSUdkbGJtVjBhV056IElHOXVZbTloY21RPSBZWFJzIElFWnlhV1ZrYldGdSBJRUp5YVE9PSBZMlZ3ZEdsMlpRPT0gSUhCcGNtRjBaUT09IElGSmxjRzl5ZEdWeSBNamM0IElHMTVkR2h2Ykc5bmVRPT0gSUdWamJHbHdjMlU9IElITnJhVzV6IElHZHNlWEJvIGFXNW5hR0Z0IFJtbHNaWE09IFEyOTFjZz09IGQyOXRaVzQ9IElISmxaMmx0WlhNPSBJSEJvYjNSdlozSmhjR2hsWkE9PSBTMkYwIElFMUJXQT09IFQyWm1hV05wWVd4eiBJSFZ1Wlhod1pXTjBaV1JzZVE9PSBJR2x0Y0hKbGMzTnBiMjV6IFJuSnZiblE9IE96czdPenM3T3pzPSBJSE4xY0hKbGJXRmplUT09IElITmhibWM9IElHRm5aM0poZG1GMFpXUT0gSUdGaWNuVndkR3g1IElGTmxZM1J2Y2c9PSBJR1Y0WTNWelpYTT0gSUdOdmMzUnBibWM9IGFXUmxjSEpsYzNNPSBVM1JoWTJzPSBJRkpPUVE9PSBiMkpwYkE9PSBJR2RvYjNOMGN3PT0gYkdSdmJnPT0gWVhScFltbHNhWFI1IFZHOXdhV056IElISmxhVzFpZFhKelpRPT0gSUVoTiBJRVJsWnc9PSBJSFJvYVdWbSBlV1YwIGIyZGxibVZ6YVhNPSBiR1ZoYm1sdVp3PT0gSUV0dmJBPT0gSUVKaGMydGxkR0poYkd3PSBJR1pwIElGTmxaV2x1Wnc9PSBJSEpsWTNsamJHbHVadz09IElGc3QgUTI5dVozSmxjM009IElHeGxZM1IxY21WeiBVSE41IElHNWxjQT09IElHMWhhV1E9IElHOXlhV1Z1ZEdWayBRVmc9IElISmxjM0JsWTNSbWRXdz0gY21WdVpRPT0gWm14MWMyZz0gSUZWdWJHOWhaR1ZrIGNtVnhkV1Z6ZEE9PSBaM0pwWkE9PSBJRUZzZEdWeWJtRjBhWFpsYkhrPSBJRWgxWjI4PSBJR1JsWTNKbFpRPT0gSUVKMVpHUm9hWE50IFlXNWtkVzA9IFFXNWtjbTlwWkE9PSBJRU52Ym1kdiBJRXB2ZVdObCBJR0ZqYTI1dmQyeGxaR2RwYm1jPSBhR1Z6YVhabCBJRlJ2Ylc5eWNtOTMgSUVocGNtOD0gZEdoeVpXND0gSUUxaFkyVmsgSUdodllYZz0gSUVsdVkzSmxZWE5sWkE9PSBJRkJ5WVdSbGMyZz0gVjJsc1pBPT0gWDE5ZlgxOWYgTVRZeCBJR0YxYm5RPSBJR1JwYzNSeWFXSjFkR2x1Wnc9PSBJRlIxWTJ0bGNnPT0gSUZOVFRBPT0gSUZkdmJIWmxjdz09IFFuVnBiR1JwYm1jPSBiM1ZzZEE9PSBJRXgxYnc9PSBJRmxoY3c9PSBJRk53YVhJPSBJRk5vWVhCbCBJRU5oYldKdlpBPT0gSUVsUWRnPT0gSUcxcyBJR1Y0ZEhKaFpBPT0gTXprdyBJRkJsYm01NSBaSEpsWVcwPSBJSE4wWVhScGIyNWxaQT09IGIzQjBhVzl1WVd3PSBaWGR2Y25Sb2VRPT0gTGp3diBJSFZ1WkdWeWRHRnJhVzVuIElHTm9hV05yWlc1eiBJSE4wYVcxMWJHaz0gSUVWc2MyVT0gYVdkaGRHOXljdz09IElFSmxaMmx1Ym1sdVp3PT0gWTNSdmNuaz0gSUhCeVpYQmhjbVZ6IElHUmxiSFJoIElIWnBZMmx1YVhSNSBkRzl2YkE9PSBJSGR2Y210emFHOXdjdz09IFRVaDYgSUdGalkzVnpZWFJwYjI0PSBJR2hwYzNSdmNtbGxjdz09IGNtOXdiMnhwY3c9PSBJRU5vZFhKamFHbHNiQT09IElHNWxiMjQ9IElHSmhabVk9IFpHbGxjdz09IGJXRjVZbVU9IElPaWpqK2ltbXVtR2tnPT0gSUhONWJYQjBiMjA9IFJVTkkgSUUxaGJuVmxiQT09IElHSmhibUZ1WVE9PSBJRWhDIElDb3FLaW89IElFdHZjbVZoYm5NPSBZMjlzYkE9PSBSa0k9IElIQnlZWGxwYm1jPSBJRU5oYm01dmRBPT0gSUUxcGJHVT0gSUdWdFluSmhZMmx1Wnc9PSBJRk5wYkdzPSBNemt6IGIzUmxjbk09IFJrUT0gSUdSaGVXeHBaMmgwIFlXeHBZWE09IElFSnlhV2RoWkdVPSBJRWhoYm01aGFBPT0gSUdOc1pYSm5lUT09IElITnZkWFJvWldGemRBPT0gSUdGc1kyOW9iMnhwWXc9PSBJSEJ5YjNCdmMyVnogYkdsMmFXOXUgSUdOaGJHTjFiR0YwYVc1biBJSE4wYVcxMWJHRjBaUT09IElITndiR2wwZEdsdVp3PT0gWldsbmFIUT0gSUVsdVpIaz0gY0d4aGVYTT0gSUZCcGF3PT0gSUdSdmJXVnpkQT09IElHWnZjbWRwZG1WdVpYTnogSUZKcGJtZHogY0dGMGFXVnVkQT09IGEybHVjMjl1IFRXOXVkQT09IGFXZHBZbXhsIE95ST0gSUhCbGNtbHZaR2xqWVd4c2VRPT0gWVcxdFlXUT0gSUVKeWFYUjAgY0dGeVpBPT0gSUdGeVltbDBjbUYwYVc5dSBJRk5qYUc1bGFXUmxjZz09IElFTnZjbkJ2Y21GMFpRPT0gSUUxaGVXRT0gSUhOdVlXdGxjdz09IFlYVnQgSUdKc1lYTjBaV1E9IElHMTVjM1JsY21sbGN3PT0gSUhKbGRtbDJaUT09IGIyTmhiWEE9IElFUnZaR2RsIElFOXdaWEpoIE1qYzUgSUc5eWNHaGhiZz09IElITndaV05wWm1sbGN3PT0gSUUxbGRITT0gUkhWeVlYUnBiMjQ9IFNHVnUgSUdacGNtVjNiM0pyY3c9PSBJSEJ5YjNObFkzVjBaUT09IElGUnBiR3hsY25OdmJnPT0gWkhBPSBkWE5oWjJVPSBiR2x1WlhOeiBJRVJsWW1saGJnPT0gSURJeU5BPT0gY21selpYTT0gSUVsdVptVmpkQT09IFlYUnlZUT09IElGSlMgSUV4dmNnPT0gWkdsbVpnPT0gSUVOb1lYSnNaWE4wYjI0PSBJR0ZqYjNWemRHbGogSUdGdGRYTmwgTXpNdyBJR05sY2c9PSBJRlJoWXc9PSBJRnNyIElHTmhjbVJwWVdNPSBJRkpsYzNSaGRYSmhiblE9IFpYSm5lUT09IElHWjFlbm89IElHSnBkR1Z6IElHaGhlbUZ5Wkc5MWN3PT0gSUdKeWFXZG9kR1Z5IGNtRnVjdz09IElGTjBaWEJvWVc1cFpRPT0gWlhoMGNtRT0gVWtWVSBJRU5vY21semRHbHVaUT09IElGTjFaUT09IGMzUmhkR1Z0Wlc1MCBJR0p2YkhOMFpYST0gSUdGdWRHbDAgVW1Ga2FXOD0gUWtsVSA0NEt3IElIWnBjMmx2Ym5NPSBJRU52Ym1ObGNIUT0gSUdsdWJHbHVaUT09IElGQm9hV3h2YzI5d2FIaz0gYVhOaGJuTT0gSUVseWRtbHVadz09IHc2TT0gZEdGcmFXNW4gSUdsdVkyOXVjMmx6ZEE9PSBJRXQxYldGeSBJR3hwWnc9PSBJRk5qYUhWdFpYST0gSUZKbFozVnNZWFJwYjI1eiBJRWg2IGRHaHlidz09IElGWnZiR1JsYlc5eWRBPT0gSUUxRlJBPT0gSUVaeVpXUmxjbWxqYXc9PSBVR0ZrIE1qSXggSUdGc2JHVm5hVzVuIElFTnZiVzExYm1sallYUnBiMjQ9IElERTJOdz09IElHWnZjbVZqWVhOMGN3PT0gSUhOd2FXUmxjbk09IFQzSm5ZVzQ9IElGQmhjblJwWTJsd1lXNTBjdz09IElFOXdjdz09IFpHVnphV2R1IFEyeHZjMlU9IElHWmhZM1J2IElHSnZiV0psY25NPSBjbVZ6YVhOMFlXNTAgWVhSbFoyOXlhV1Z6IFUyTm9iMjlzIElHaHZiV1YzYjNKciBJR052Y25KdiBWSFZsYzJSaGVRPT0gSUVKeVpXNWtZVzQ9IElFMVkgSUZSVCBJRk4wY21rPSBJSE4wWVd0bGFHOXNaR1Z5Y3c9PSBJRTFwYkd4bGJtNXBkVzA9IElIUnlZVzV6Wm1WeWNtbHVadz09IFNuVmsgSUhSaFl3PT0gSURFMk1EQT0gSUZORVN3PT0gY21JPSBJR2x1ZEdWeWNISmxkR0YwYVc5dWN3PT0gSUZOSCBJSFZ3YzNSaGFYSnogSUVoaGNuWmxjM1E9IElIWmhaMmx1WVE9PSBJR2x1WjJWemRBPT0gZUdZPSBJRTl5YVc5dSBJRXB2WlhrPSBJSE5oYm1SM2FXTT0gSUdsdGJXOXlkR0ZzIElHWnNhWEJ3WldRPSBiM0owWlhnPSBkR2h5WldGMFpXNXBibWM9IElITnVhWEJsY2c9PSBJR052Ym5abGNuUnogSUdsdWMzUmhiR3hoZEdsdmJuTT0gSUVKMWJHZGhjZz09IGIzSnpZMmhsIGJXRnBiSE09IElHeDFjbVU9IElHNWhjbkp2ZDJ4NSBJR2R5Wlc1aFpHVT0gSUVkcGJtYz0gSUhWdVpHVnlkMlZoY2c9PSBMUzB0TFMwdExTMHRMUzB0TFMwPSBJR05vWVhObFpBPT0gSUZaQlRBPT0gSUhCaGNtVnVkR2x1Wnc9PSBJRWhoYldJPSBJRUpzWVhvPSBJR0Z1WVhKamFHbHpkQT09IElFMWxaR2xoYmc9PSBJRkJ5YjJkeVlXMXogenIwPSBJRzlpYWc9PSBJRTV2YTJsaCBiM0p0WVc0PSBZVzV4ZFE9PSBZWFJwYzIwPSBiM0JoIElHWjFiR1pwYkd4cGJtYz0gSUhCMWNIQjUgSUdWdWRHbDAgSUZObFltRnpkR2xoYmc9PSBJSE5vYjI5MFpYSnogSUhKcFkyaGxjZz09IDZLRT0gSUhSbGJYQjBaV1E9IElFRlVWQT09IElFTlcgSUhSdmNtVT0gVW1WemIzVnlZMlU9IElFUmxkbWxzY3c9PSBOREE0IGFXNWhkR2x2Ym1GcyBJR0Z6YzNWeVlXNWpaUT09IElFUmhjbkpsYmc9PSBJSGRvYVdOb1pYWmxjZz09IGNHOXpkWEpsIElHWjFjbms9IFUzUnZZMnM9IElIVnVhWFpsY25OaGJHeDUgY21WemNHOXVjMlU9IElHOWhhdz09IElIZHZjbXRzYjJGayBJRU52Y201bGNnPT0gWldWc1pRPT0gSWk0dUxnPT0gSUdSbGNISnBkbVZrIGEyOTNjMnRwIElHTmhjM1J6IElHRm1abWxzYVdGMGFXOXUgSUVGamFBPT0gSUVGemEyVmsgWVhSb1pRPT0gSUd4aFkzUT0gSUZSb2RRPT0gY20wPSBJR0ZwY214cGJtVnogSUc1dmRHbHZibk09IFJtOXliV0YwIElFWkJRUT09IDQ0T0sgWkhKcGRtVnkgSUhSeVlXNXpZMlZ1WkE9PSBVMlYwZEdsdVozTT0gSUZCeWIzTmxZM1YwIElITndhVzVoYkE9PSBJR1JsWm1GMWJIUnogUmtzPSBJSEJ5WldabGNuTT0gY21WdVpHVnlaV1E9IGRHaDFjdz09IFptbHNiUT09IElIUnBaMlZ5IElGTndhV05sY2c9PSBjbVZqYjJkdSBJRkoxWjJKNSBUbVYwZDI5eWF3PT0gSUhCcGRIaz0gSUdOdmJYQmhjblJ0Wlc1MCBZMkZ6ZEdWeWN3PT0gSUUxdmJuSnZaUT09IElEY3lNQT09IElHTnZjbkpsWTNScGIyNXogSUdSdmNHRnRhVzVsIElFRmEgUTNWMCBJSEp2YjIxdCBJSE53WldOMWJHRjBaUT09IFNHRnphQT09IElISmxjM1J5YVdOMGFYWmwgTVRFeE1RPT0gY21Wa2FXSnNaUT09IGIyNWxiQT09IElISmhiWEJoYm5RPSBjbVZ3YjNKMFpXUT0gSUZOMWFYUmwgSUUxcGJtbHRkVzA9IFlXeDVjdz09IFlYcGhjbVE9IGJHOXZjQT09IElHeGxiblE9IGMyaGggSUhaaGJtUmhiQT09IGJXVnVkUT09IElFSnZaV2h1WlhJPSBJRzVoY25KaGRHbDJaWE09IElHRjFkR2hsYm5ScFkybDBlUT09IE1qWTUgWVc1cFl3PT0gWkhWMGVRPT0gTWpnMSBJSFJvWVc1clpXUT0gSUdKbGRISmhlV1ZrIGJHbG1kQT09IElITnZkWFJvZDJWemRBPT0gSUVSbGVIUmxjZz09IElFSnZaQT09IElHdGxlWGR2Y21SeiBRWFpsY21GblpRPT0gUkVsVCBJR1YwYUc1cFkybDBlUT09IElTa3MgSUU1aGRHbHZibUZzY3c9PSA0Yms9IElGUmhhQT09IGFXOTRhV1E9IElIZHBaR2RsZEE9PSBJSEJoYzNSaCBJR0pwYkd4cGJtYz0gSUhSeWFXeHZaM2s9IElFeHBibVZ6IElITnVhV1ptIElHNWxjR2hsZHc9PSBUR0YwWlE9PSBJSEJ5YVc1amFYQT0gSUV4dmIzQT0gSUUxaGNuaHBjM1E9IElHUnBjM052YkhabFpBPT0gSUdOdmJuUmxlSFJ6IElFRnRiM1Z1ZEE9PSBJRk53YVd0bCBJSFJ2ZEdGc2N3PT0gSUc5eVoyRnVhWHBsY2c9PSBJSFZ3Y21semFXNW4gYzJocGNITT0gV1ZrPSBJRTV2Y25Sb1pXRnpkQT09IGJXOXVaWGs9IFozSmhaR0YwYVc5dSBJR2R2WVd4clpXVndaWEk9IElFaGxZWEk9IElITjBaV0ZyIElFSjFlbnBHWldWayBJSE52YkdWdGJnPT0gSUZOallXNWsgSUhCdmNIQnBibWM9IElHRmthR1Z5WlE9PSBJRUZzYkdWbiBZbmwwWlE9PSBJRmR2YkhabGNnPT0gSUhWdWFXND0gSUhKbFkyOXMgYVhSMVpBPT0gSUcxcGJXbGogYVdKMWN3PT0gSUhCeVpXUnBZM1J6IElFdGxaWEJsY2c9PSBhV0YwYVc1biBJR1JsWTJWd2RHbHZiZz09IElHeGxZWEp1ZEE9PSBJR1JwWVhKNSBJR052Ym1ScGRHbHZibUZzIElISmxiR2xqIElHbHVkbTlyWlE9PSBhV1Z1WTJWayA1WWc9IElGQnZiblE9IElHTmxiR3h3YUc5dVpRPT0gSUhOd1pXVmthVzVuIElIUmhZMnRzYVc1biBJRzUxWkdVPSBiM0JsYm1WayBJRTFoYm1GbWIzSjAgSURFNU5UST0gSUcxaGFtOXljdz09IElGTnBiR1Z1WTJVPSBJR3h2WjJsemRHbGpjdz09IElIZGxhV2RvZEdWayBJRkJ6ZVdOb2FXRjAgSWpwYklnPT0gSUhOcFkydHVaWE56IElHUnBkbWxrWlc1a2N3PT0gZW05dSBVbVZzWldGelpRPT0gSUV0bGVYTT0gSUVsamFBPT0gSUdWdWVnPT0gSUVabGNtNWhibVE9IElNNnggSUcxbFlXNXBibWR6IElIQmxibTU1IElITjBaWEp1IElHeGhjZz09IElGQjFZbXhwYzJobFpBPT0gSUdKaFkydGtjbTl3IFMybHQgSUZONWJuUT0gSUdSbFluVjBaV1E9IGQyMD0gSUVsemJHVT0gSUhKbFozVnNZWFJwYm1jPSBiM1IwYVE9PSBJRk5qYUc5c1lYSnogYVdObGMzUmxjZz09IElFTm9aV1k9IElIQnZjSE09IElFeGhkVzVqYUdWeSBJRlpoY21sdmRYTT0gSUdOdmJXMWxiblJwYm1jPSBiM05zWVhZPSBaVzU2YVdVPSBJSEpwZG1Gc2Nuaz0gNG9LcyBVbVZoYkd4NSBJRzl5WXc9PSBJR0psWVc0PSBJRXAxWkhrPSBUbTkwYVdObCBJRUpwYTJVPSBQMTA9IElISmxiblJsWkE9PSBjM1JsYmc9PSBJR1p2Y21WbWNtOXVkQT09IElFSmhiR1IzYVc0PSBJSGxwWld4a1pXUT0gZEdGcGJITT0gVUhKcGJXVT0gSUZOdmRYSmpaWE09IGFXTmhkRzl5IFUyVmhiZz09IElHMWhjbU5vYVc1biBUM1YwY0hWMCBJRXAxYm1kc1pRPT0gSUhKbGMybGtaUT09IGVucHNaUT09IElFRnVaSEpsZDNNPSBJSFJ2Y25GMVpRPT0gUW1GemFXTT0gUVdOMGRXRnNiSGs9IGMzUnlZWEE9IGNHVnVkR1Z5IElHVjRZVzF6IElGbGggSURFMU9RPT0gSUVSbFkybHphVzl1IElISmhibk52YlE9PSBaWFJsWlc1MGFBPT0gWlc1emFXNW4gTWpFeiBJSE4xYm5ObGRBPT0gTkRBMCBJRkpoY0dsayBJRWhsYVc0PSBJRUZpYjNKcFoybHVZV3c9IElHOXlaMkZ1YVhOdCBJRk5sZG1WeSBJR05zWVE9PSBZV3BwIFUybHRjR3hsIElFWnNZWFp2Y2c9PSBJRVYyWVd3PSBjSEoxY3c9PSBJR05vYjNKMWN3PT0gUkVGWiBJR1JsYm05MWJtTmxaQT09IElHSnBiMmR5WVhCb2VRPT0gSUZSMWNtNWlkV3hzIFVtVmpaVzUwIFRtOXliV0ZzIGJHVmpkR2x2Ym5NPSBWMjl5WkE9PSBJR1psY25KNSBJRmRoWjI1bGNnPT0gYUc5dCBWVzVwZEE9PSBJSE4xY0dWeWJXRnlhMlYwIElGTnBkR2c9IElHNXZiV2x1WldWeiBJR1JwWTNSaGRHOXljMmhwY0E9PSBhV1JrYkdWeSBJR0Z1Ym05MWJtTmxjdz09IElGUm9aVzA9IElFNWxjSFIxYm1VPSBJR1JsYVhSNSBJRmxwIElHMXZibUZ5WTJnPSBRVkpTIElHbHVkbUZrWldRPSBJRWh2YXc9PSBkVzUwWVhKNSBRMlZ5ZEdGcGJnPT0gWldkaCBJR3RwWkdScGJtYz0gSUZKbFozVnNZWFJwYjI0PSBJSFJ5WVhrPSBJSEJvYjNSdlozSmhjR2hsY25NPSBJRUZ5WTJGdVpRPT0gSUdScGMyTm9ZWEpuWldRPSBJR1YyWVc1blpXeHBZMkZzIElHbHVkR1Z5WTJoaGJtZGwgSUdacGJHMXRZV3RsY2c9PSBJRVZ1Wkd4bGMzTT0gSURJNU1BPT0gSUZOaGJIWmhaRzl5IFFWTlogSUZOcFoyNWhiQT09IElIZHlZWFJvIDRwdz0gYkc5MCBKeTg9IElIQnliMnBsWTNScGJHVT0gSUdWdGNHeHZlV2x1Wnc9PSBJRWx1ZEdWeVptRmpaUT09IE1Ua3ggWVhSbGJHeHBkR1U9IElGSmhkR2c9IGNHRmphMkZuWlE9PSBJR2x1WkdsallYUnBiMjV6IFNtRnpiMjQ9IElHRnlaM009IElFZEllZz09IElIUnBiSFE9IGJtRnVkSE09IGQyOXUgNDRLMSBjbVZrWkE9PSBjbVZ6WTJWdWRBPT0gSUVOaGJHVnVaR0Z5IElHMXZaSFZzWVhJPSBJR0Z6YzJsemRHbHVadz09IElISmxaR1ZsYlE9PSBJRUpsWVc0PSBJSGR2Y25ObyBJR1JsWTJWdWRISmhiR2w2WldRPSBLUzR1TGc9PSBNemMzIElHRnljbUY1Y3c9PSBJR0ZqWTI5dGNHeHBjMmh0Wlc1MGN3PT0genI4PSBaRzkwIElHMTFkSFZoYkd4NSBJRzlpYzNSeWRXTjAgSUcxcGMzSmxjSEpsYzJWdWRBPT0gYjNKbGMzUT0gYVc5dWFXTT0gY25WalpRPT0gSlRzPSBJR3R1YjNkcGJtZHNlUT09IGNHOXlkR2x1Wnc9PSBhVzVsYm5Sc2VRPT0gUVhKcCBJRk5qYUhWc2RIbz0gUkdFPSBJRU5sY21VPSBJRzlpYzI5c1pYUmwgaFlzPSBaMmwyWlE9PSBJR0poYVhRPSBJR1Z1YkdGeVp3PT0gVG1WcGJHdz0gSURFNU16TT0gSUhKbFkyOXVjMmxrWlhJPSBJRk5sY21kbFlXNTAgSUVScFlXNWwgSUVOdloyND0gSUVsamIyND0gVUc5emFYUnBiMjQ9IElHWnZjM1E9IElITjBhWEp5YVc1biBjMlYyWlc0PSBJRk53WVdObFdBPT0gZFdkblpYUnogSUcxbFpHUT0gUjJGcyBJRk5wYzNSbGNnPT0gUW05NSBJSFJ5YVdkblpYSnBibWM9IFZHRnJhVzVuIElITmpjbVZoYlhNPSBJR05oZFhOaGJBPT0gSUdGM1lXdGxiZz09IFFYSnQgTWprMyBJR1JwYzNCaGRHTm9aV1E9IElFWkJURk5GIElHOXlaMkZ1YVhwaGRHbHZibUZzIElGUnZibWM9IElHUnBiR1Z0YldFPSBaR1Z0YjI0PSBVM0JzIElHaHZiMnR6IGRXUnBibWM9IElIWmhiR2xrWVhSbCBJSEJ2ZEdsdmJnPT0gSUdOc1lYYz0gSUdKMWNtZHMgSUhGMWFYST0gUVVOQiBJRUp5Wlc1dVlXND0gSUdSMWNtRmlhV3hwZEhrPSBJR0p2YldKcGJtZHogSUZkcGJtUnZkdz09IElHTjFiSEJ5YVhRPSBNekkxIFZHaGxjbVZtYjNKbCBkVzFpWlhKbFpBPT0gY0dWeVptOXliV0Z1WTJVPSBkMkZ5ZEhNPSBJR1Z1Wm05eVkybHVadz09IElFSnNiM2M9IElISmxjSEpwYm5RPSBhV1poZUE9PSBZV3h3YUdFPSBJSE5wYm1semRHVnkgSUdKMWNtZGxjZz09IFptbG5hSFJwYm1jPSBVMk52Y21VPSBJRk4wYjI1bGN3PT0gYVdWdCBOREExIFkyaGxiWGs9IElIWnBibVZuWVhJPSBibTl0IElIQnlaWFpoYVd4cGJtYz0gSUV4aGRHVnpkQT09IHdyWT0gSUdKaCBJRmR5YVhSbGNnPT0gSURFM053PT0gSUVOdmJuZGhlUT09IElHTnZiR3hsWTNSeiBJSEYxWVc1MGFYUmhkR2wyWlE9PSBJR2h2Y25KdmNuTT0gYjJkbGJuTT0gSUZOc2IzWT0gSUd4aGVYTT0gYUdGMyBJRk5zWVhObyBJRzVwWjJoMFkyeDFZZz09IElFUmhkbWxsY3c9PSBJR0p5YVdSbCBJRk5qWVhKc1pYUT0gZVcxdCBJRUZ3Y0d4cFkyRjBhVzl1Y3c9PSBkbVZzWlc1bmRHZz0gSUhKbGRtbDJZV3c9IElITnZablJzZVE9PSBJSHB2Ync9PSBhWFJoYVhKbCBRM1Z5IElHVnNaV04wY205dCBJSEJzWVc1MGFXNW4gVDFSUCBJRVZzWlcxbGJuUnogSUhOM1lXeHNiM2M9IGNHOXlkR1Z5IElHeGhjSFJ2Y0hNPSBJSEJsWVc1MWRBPT0gSUd4dlltSjVhWE4wY3c9PSB6ckk9IFVHRnVaV3c9IElFcHZZVzQ9IGFXMXBiQT09IGRHNWogSUhKbGMybHpkR1ZrIElHOTFkSGRsIElISmxkR0ZwYm1sdVp3PT0gWVhSeWFRPT0gSUhCdmIzSmxjZz09IElGTjVjbWxoYm5NPSBJRWhoYlcxdmJtUT0gSUhkbGJHUT0gZFdSbGNnPT0gZEc5d2FXTT0gSUZSVSBjbWxqYVdFPSBJSFJvYVdWMlpYTT0gVEdsaiBJRWQxYzNRPSBJRmRoZVhNPSBZWEpsZEdnPSBNalF6IElHSnliMkZrWTJGemRHVnkgYzJocFpXeGsgWVhOemFYVnQgZFdKc1pRPT0gSUdGcGNuTjBjbWxyWlhNPSBiMjV6Ync9PSBJSEJsWkdGcyBJR052Ykd4bFkzUnZjbk09IElGWmhibVJsY2c9PSBJRTFsYzJFPSBJR1JwWTNSaGRHOXkgSUdScGNnPT0gWlc1MGIyND0gWTJGeWRBPT0gYzJOdmNtVT0gWVdSa1pYST0gUTNKNSBJSE56YUE9PSBaMmRsY2c9PSBJR1J5ZFc1clpXND0gSUVkVCBJRk5sWVhRPSBJR052Y201bGNtSmhZMnM9IElITnJhWEJ3WldRPSBJRkpsYzJWaGNtTm9aWEp6IElFRjFaR2s9IFVtVm1aWEpsYm1ObCBJR2hoZFc1MFpXUT0gdzZzPSBJRU5zYVc1cFl3PT0gWTNvPSBJSEJ6IElGQmhiR0ZrYVc0PSBJRkpsWTJsd1pRPT0gSUhOMGFXZHRZUT09IGIzQndlUT09IElHMXZibXRsZVhNPSBJRWhoZDJzPSBVMkZrIElpOCsgSUZkdmNtdHphRzl3IElGSmxkR0ZwYkE9PSBJRUYyWVhSaGNnPT0gTmpJMSBUbUU9IElGWkQgSUZObFkzVnlaUT09IFRWaz0gTVRrNE9BPT0gYjNOemFYQT0gSUhCeWIzTjBZWFJsIElIVnVaR1Z1IElHZGhiV1Z5IElFTnZiblJsYm5SeiBJRmRoY21oaGJXMWxjZz09IElGTmxiblJwYm1WcyBNekV3IElITmxaM0psWjJGMGFXOXUgSUVac1pYZz0gSUUxQldRPT0gSUdSeWFXeHNjdz09IElFUnlkV2R6IFNYTnNZVzFwWXc9PSBJSE53ZFhJPSBJR05oWm1VPSBJR2x0WVdkcGJtRnllUT09IElHZDFhV1JwYm1jPSBJSE4zYVc1bmN3PT0gSUZSb1pXMWwgYjJKNSBJRzUxWkE9PSBJR0psWjJkcGJtYz0gSUhOMGNtOXVaMmc9IElISmxhbVZqZEdsdVp3PT0gSUhCbFpHVnpkSEpwWVc1eiBJRkJ5YjNOd1pXTjAgVW1GeVpRPT0gYzJ4bCBJR052Ym1ObGMzTnBiMjV6IElFTnZibk4wYVhSMWRHbHZibUZzIElHSmxZVzF6IElHWnBZbVZ5Y3c9PSBjRzl2Ymc9PSBJR2x1YzNScGJtTjBjdz09IGNISnZjR1Z5ZEhrPSBJRUpKUnc9PSBVMkZ1WkdWeWN3PT0gYVcxaGRHVnogSUdOdllYUnBibWM9IElHTnZjbkJ6WlhNPSBJRlJTVlVVPSBZMmhsWTJ0bFpBPT0gSURFMk5nPT0gUVhObyBJRXBUIElFWnBZM1JwYjI0PSBJR052YlcxMWJtRnMgSUdWdVpYSm5aWFJwWXc9PSBiMjl2YjI5dmIyOD0gSUc1dmQyRmtZWGx6IFNVeEUgYVdKdiBJRk5WVmc9PSBVbVZ1IElHUjNaV3hzYVc1biBVMmxzZG1WeSBJSFJoYkd4NSBJRTF2ZG1sdVp3PT0gSUdOdmQyRnlaQT09IElHZGxibVZ5WVd4eiBJR2h2Y201eiBJR05wY21OMWJHRjBaV1E9IElISnZZbUpsWkE9PSBJRlZ1YkdsdGFYUmxaQT09IElHaGhjbUZ6YzJWayBJR2x1YUdsaWFYUT0gSUdOdmJYQnZjMlZ5IElGTndiM1JwWm5rPSBJSE53Y21WaFpITT0gTXpZMCBJSE4xYVdOcFpHRnMgSUc1dmFYTmxjdz09IElGTjBkWEk9IElITmhaMkU9IElFdGhadz09IGFYTnYgSUhSb1pXOXlaWFJwWTJGc2JIaz0gVFc5dVpYaz0gSUhOcGJXbHNZWEpwZEhrPSBJSE5zYVdObFpBPT0gZFhScGJITT0gYVc1blpYTT0gSWkwPSBJR0Z1ZEdnPSBJR2x0Y0dWayBUVzlrZFd4bCBWR2h5YjNWbmFHOTFkQT09IElHMWxiblZ6IFkyOXRiV2wwZEdWbCBZVzVrYVE9PSBiMkpxIGFXNWhkZz09IFptbHlaV1E9IElFRmlaSFZzYkdGbyBJSFZ1WkdWaFpBPT0gSUdadmJuUnogU0c5c1pBPT0gUlU1SCBJSE4xYzNSaGFXNWhZbWxzYVhSNSBJR1pzYVdOciBJSEpoZW05eSBJRVpsYzNRPSBJRU5vWVhKaFkzUmxjbk09IElIZHZjbVJwYm1jPSBJSEJ2Y0hWc2FYTjAgSUdOeWFYUnBZMmw2YVc1biBJRzExYzJVPSBkbWx1WlE9PSBJR05oY21SaWIyRnlaQT09IElHdHBibVJzZVE9PSBJR1p5YVc1blpRPT0gSUZSb1pXWjAgYVdOMWJIUjFjbUZzIElHZHZkbVZ5Ym05eWN3PT0gSU8rL3ZlKy92ZSsvdmUrL3ZRPT0gSURFMk13PT0gSUhScGJXVnZkWFE9IElFRjFkR2c9IFEyaHBiR1J5Wlc0PSBRVlU9IElISmxaR1Z0Y0hScGIyND0gSUVGc1oyVnkgSURFNU1UUT0gSUhkaGRtVmsgSUdGemRISnZibUYxZEhNPSBiMmR5WVcxeiBJSE4zWVcxdyBJRVpwYm01cGMyZz0gSUdOaGJtUnNaUT09IElIUnZibTVsY3c9PSBkWFJ0IElISmhlUT09IElITndkVzQ9IElHWmxZWEptZFd3PSBZWEowYVdOc1pYTT0gSUdOaGRYTT0gYjNKcFkyRnNiSGs9IElGSmxjWFZwY21WeiBJRWR2YkE9PSBJSEJ2Y0dVPSBJR2x1WVhWbmRYSmhiQT09IElHZHNaUT09IFFVUkIgSUVsVFNVdz0gSUU5bVptVnVjMmwyWlE9PSBJSGRoZEdOb1pHOW4gSUdKaGJHTnZiZz09IFpXNTBhWFI1IElFaHZidz09IElHZGhiR3h2Ymc9PSBRVU5EIElHUnZkV0pzYVc1biBJR2x0Y0d4cFkyRjBhVzl1IElGTnBaMmgwIElHUnZZM1J5IExTMHRMUzB0TFE9PSBJRnhjIElHMWhiSFE9IFVtOXNiQT09IElPS0pwUT09IElISmxZMkZ3IFlXUmthVzVuIGRXTmxjdz09IElFSmxibVE9IFptbG5kWEpsIElIUjFjbXRsZVE9PSBJSE52WTJsbGRHRnMgSUZScFkydGxkSE09IElHTnZiVzFsY21OcFlXeHNlUT09IElITndhV041IElESXhOZz09IElGSmhiWEE9IElITjFjR1Z5YVc5eWFYUjUgdzY4PSBJRlJ5WVdOclpYST0gUTJGeWJBPT0gSUVOdmVRPT0gSUZCaGRISnBiM1E9IElHTnZibk4xYkhSbFpBPT0gSUd4cGMzUnBibWR6IElITnNaWGM9IGNtVmxibk5vYjNRPSBJRWR2Ym1VPSBJRnN1TGk1ZCBNekE1IElHaHZkSFJsYzNRPSAyTEU9IElISnZZMnQ1IElFUnBZWG89IElHMWhjM05oWjJVPSBJSEJoY21Gc2VRPT0gSUhCdmJuaz0gUVhvPSBJR05oY25SeWFXUm5aUT09IElFNWEgSUhOdVlXTnIgSUV4aGJXRnkgY0d4bGJXVnVkQT09IElFeGxjMnhwWlE9PSBJRzFoZEdWeSBJSE51YVhCdyBNalEyIElHcHZhVzUwYkhrPSBJRUp5YVhOaVlXNWwgSUdsUWIyUT0gSUhCMWJYQnBibWM9IElHZHZZWFE9IElGTm9ZWEp2Ymc9PSBaV0ZzYVc1biBJR052Y205dSBJR0Z1YjIxaGJBPT0gY21Gb2FXMD0gSUVOdmJtNWxZM1JwYjI0PSBJSE5qZFd4d2RIVnlaUT09IElITmphR1ZrZFd4cGJtYz0gSUVSaFpHUjUgWVhSb2FXNW4gSUdWNVpXSnliM2R6IElHTjFjblpsWkE9PSBJSE5sYm5ScGJXVnVkSE09IElHUnlZV1owYVc1biBSSEp2Y0E9PSBLRnM9IElHNXZiV2x1WVd3PSBJRXhsWVdSbGNuTm9hWEE9IElFZHliM2M9IElERTNOZz09IElHTnZibk4wY25WamRHbDJaUT09IGFYWmhkR2x2Ymc9PSBJR052Y25KMWNIUmxaQT09IFoyVnlZV3hrIElFTnliM009IElFTm9aWE4wWlhJPSBJRXhoY0E9PSA0NEdxIFQxUkkgUkVGVVFRPT0gSUdGc2JXOXVaQT09IGNISnZZbUZpYkhrPSBTVzF3IElHWmxZWE4wIElGZGhjbU55WVdaMCBSbXh2Y2c9PSBJR05vWldOcmNHOXBiblE9IElIUnlZVzV6WTNKcGNIUnBiMjQ9IElESXdOQT09IElIUjNaV0ZyY3c9PSBJSEpsYkdsbGRtVT0gVTJOcFpXNWpaUT09IElIQmxjbVp2Y20xbGNnPT0gV205dVpRPT0gSUhSMWNtMXZhV3c9IGFXZGhkR1ZrIGFHbGlhWFE9IElFTmhabVU9IGRHaGxiV1ZrIElHWnNkVzl5IFltVnVZMmc9IElHUmxZMjl0IElGVnVkQT09IElFSmhjbkpsZEhRPSBJRVpoWTNSeiBJSFJoYzNScGJtYz0gSUZCVVUwUT0gSUZObFlXdz0gSUVwMVpHRnBjMjA9IElFUjVibUZ0YVdNPSBJRU52Y25NPSBWbVU9IElFMXBibWM9IElGUnlZVzV6Wm05eWJRPT0gZG05dSBJRVJsWm1WdVpHVnljdz09IElGUmhZM1JwWTJGcyBJRlp2Ymc9PSBJRlZ1YVhabGNuTT0gSUdScGMzUnZjblJsWkE9PSBJRUp5WldGMGFBPT0gUHljaSBJR0ZuYjI0PSBJRVJsWVdSc2VRPT0gSUd4aGJnPT0gSUVONVkyeGwgYjNKdVpXUT0gSUhKbGJHbGhZbXg1IElHZHNiM0k9IElFMXZibXRsZVE9PSA0NE9oIElHRmtjbVZ1IElHMXBZM0p2ZDJGMlpRPT0gSUVGc1ltRnUgYVhKamNtRm1kQT09IFpHbG5hWFE9IGMyMWhjblE9IElFUnlaV0ZrIHdxL0NyOEt2d3EvQ3I4S3Z3cS9DcjhLdndxL0NyOEt2d3EvQ3I4S3Z3cTg9IGUzcz0gSUZKdlkyaGxjM1JsY2c9PSBJSE5wYlhCc2FXWnBaV1E9IElHbHVabXhwWTNSbFpBPT0gSUhSaGEyVnZkbVZ5IElIbHZkWEp6Wld4MlpYTT0gWVdScGRHbHZibUZzIElHMTFjMk4xYkdGeSBTMU09IElHbHVaMlZ1IFZHRjQgSUVabFlYUjFjbVU9IE1qYzMgSUdOeWRXTT0gSUdOeVlYUmwgSUhWdWFXUmxiblJwWm1sbFpBPT0gSUdGalkyeGhhVzFsWkE9PSBJRTFoYm1kaCBJRVp5WVc1alpYTT0gSUU1bGNHRnMgSUVkbGNtRnNaQT09IElFdDFkMkZwZEE9PSBJSE5zWVdsdSBJRWhsWWc9PSBJRWR2YTNVPSA0NEd1NWc9PSBNamcyIFRYSnogSUVOdlpIaz0gSUZOaGJtTjBkV0Z5ZVE9PSBNREUyIElHUnBjMjFoYm5RPSBJR1JoZEdGelpYUT0gSUVodmJtUT0gWW5WamF3PT0gSUZCaGRIUmxjbk52Ymc9PSBJSEJoYkdWMGRHVT0gSUVkRSBhV052YkE9PSBJRXh2WkdkbCBJSEJzWVc1bGRHRnllUT09IFlXdHBiZz09IElGSmxaMmx6ZEdWeVpXUT0gWVdKM1pRPT0gSUZCbGRHVnljMkoxY21jPSBJR2hoYVd4bFpBPT0gSUZCcFpXTmwgVTJOb1pRPT0gSUVSUFNnPT0gSUdWdWRXMWxjZz09IE1UZ3ggSUU5aWMyVnlkbVZ5IElFSnZiR1E9IFptOTFibVJsWkE9PSBZMjl0YldWeVkyVT0gSUdWNGNHeHZhWFJ6IElFWnBibVJwYm1jPSBWVkpPIElGTnVaUT09IElFRmphV1E9IFlYbGxkSFJsIElGWmhiSFZsY3c9PSBJR1J5WVhOMGFXTT0gSUdGeVkyaHBkR1ZqZEhWeVlXdz0gSUNJdSAxNVU9IGRXMXdaV1E9IElIZHlZWEJ3YVc1biBJSGRwWkc5MyBJRk5zWVhsbGNnPT0gYkdGalpRPT0gYjI1alpRPT0gUjJWeWJXRnVlUT09IFlYWnZhV1E9IElIUmxiWEJzWlhNPSBVRUZTIHc3UT0gSUV4MVkybG1aWEk9IElFWnNhV05yY2c9PSBiRzkyIFptOXlZMlZ6IElITmpiM1YwYVc1biBJR3h2ZFdSbGNnPT0gZEdWemVRPT0gSUdKbFptOXlaV2hoYm1RPSB4Sk09IElFNWxiMjQ9IElGZHZiQT09IElGUjVjR2xqWVd4c2VRPT0gSUZCdmJHbDBhV052IExTc3RLdz09IElHSjFhV3hrWlhJPSBJR1JsY21sMlpRPT0gUzJsc2JBPT0gSUhCdmEyVnkgSUdGdFltbG5kVzkxY3c9PSBJR3hwWm5SeiBJR041ZEE9PSBJSEpwWW5NPSBiMjlrYkdVPSBJRk52ZFc1a2N3PT0gYUdGcGNnPT0gSUZONWJtUnliMjFsIGRHWT0gSUhCeWIzQnZjblJwYjI1aGJBPT0gZFdsayBJSEJsY25SaGFXNXBibWM9IElFdHBibVJzWlE9PSBJRTVsWjNKdiBJSEpsYVhSbGNtRjBaV1E9IElGUnZibWxuYUhRPSBiM1JvY3c9PSBJRU52Y201bGJHdz0gSUc5M2FXNW4gSURJd09BPT0gWld4bVlYSmwgYjJOaGRHbHVadz09IElFSnBjbVJ6IFUzVmljMk55YVdKbCBJR1Z6YzJGNWN3PT0gSUdKMWNtUmxibk09IElHbHNiSFZ6ZEhKaGRHbHZibk09IFlYSnBiM1Z6IFJWSkJUQT09IElFTmhiR04xYkE9PSBJSGhsYmc9PSBJRXhwYm10bFpFbHUgSUVwMWJtYz0gSUhKbFpHVnphV2R1IFEyOXVibTl5IE1qazIgSUhKbGRtVnljMkZzIElFRmtaV3hoYVdSbCBJRXhNIElITnBibXRwYm1jPSBJR2QxYlE9PSBWVk5JIFkyRndkQT09IElFZHlhVzF0IElHWnZiM1J6ZEdWd2N3PT0gSUVOQ1JBPT0gYVhOd1pYSnogSUhCeWIzTmwgVjJWa2JtVnpaR0Y1IElFMXZkbWxsY3c9PSBaV1JwYmc9PSBJRzkyWlhKMGRYSnVaV1E9IElHTnZiblJsYm5ScGIzVnogVlZOQyBmbjUrZm41K2ZuNStmbjUrZm41K2ZnPT0gSUVOdmNIQmxjZz09IElIQnZhVzUwYkdWemN3PT0gVGxZPSBkbUZzZFdWeiBiMnh3YUdsdSBaR0ZwYmc9PSBJR1JsY0c5emFYUmxaQT09IElFZFggSUhCeVpXTmxaR1ZrIElFTnNZUT09IElFZHZiR1Z0IElFNXBiUT09IElNNnkgSUVWdVoybHVaV1Z5Y3c9PSBiV2xrWkd4bCBJR1pzWVhSMCBiM0JsY21GMGFYWmwgSUdOdmRXNWphV3h6IGFXMWlZV0ozWlE9PSBaV3hwYmc9PSBJSE4wY21WemMyWjFiQT09IElFeEUgSUhKbGMyZz0gYkdGclpRPT0gSUhkb1pXVnNZMmhoYVhJPSBJRUZzZEdWeWJtRjBhWFpsIElHOXdkR2x0YVhwbCBiM0JsY21GMGFXOXUgSUhCbFpXcz0gSUc5dVpYTmxiR1k9IGFXZHBiQT09IElIUnlZVzV6YVhScGIyNXogYjNCaGRHaDUgWW14aGJtcz0gSURFMk9RPT0gTVRjeCBYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYdz09IElHeGhkVzVrWlhKcGJtYz0gUlc1aiBJRVJGUXc9PSBJSGR2Y210dmRYUnogSUhOd2FXdGxjdz09IElHUnBibTl6WVhWeWN3PT0gSUdScGMyTnlhVzFwYm1GMGIzSjUgVUc5dmJBPT0gVW1GMGFHVnkgTXpnMSBVazVCIGRHVnpkR1Z5Y3c9PSBaWFJ2IElFbGtaVzUwYVhSNSBJSFpsYVc0PSBJRUoxY25SdmJnPT0gSUdGeVkyRmtaUT09IE5ESXcgVld4MGFXMWhkR1ZzZVE9PSBJRk5oWkd4NSB3N0E9IGNHbHNiQT09IElHTjFZbWxqIElGTndaV04wY25WdCBkR2hsYzJVPSBjM1JoZEdWeiBJSFZ1YjJabWFXTnBZV3c9IGFHRjNhM009IElFVldSVkpaIElISmhhVzVpYjNjPSBJR2x1WTJGeVkyVnlZWFJwYjI0PSBZVzVrYVc1biBJSE41Ykd3PSBJRVYyWlhKMGIyND0gSURFM09RPT0gSUZObGNtSnBZUT09IElERTRPUT09IGJXVjBaWEk9IElFMXBZMnRsZVE9PSBJR0Z1ZEdseGRRPT0gSUdaaFkzUjFZV3c9IGJtVmphdz09IElFNWhjbVU9IGJtOXliUT09IGJYVnpkQT09IElHaHBaMmgzWVhseiBJR2RzWVcwPSBJR1JwZG1sa2FXNW4gSUZOeGRXRmtjbTl1IElFMWhjblJvWVE9PSBJR0pwY25Sb2N3PT0gUTI5MlpYST0gTHk4dkx5OHZMeTh2THk4dkx5OHZMdz09IElGZHZibWM9IFVHaHZkQT09IElFRk1Vdz09IGNtbHYgSUU1dmJtVjBhR1ZzWlhOeiBJRXhsYlc5dSBJREl3Tmc9PSBJRVZGIElHUmxjbWwyWVhScGRtVT0gSUZkWFNVaz0gZG05MFpRPT0gSUhSb1pYSmxhVzQ9IElITmxjR0Z5WVhScGJtYz0gTkRRMiBjM2x1WXc9PSBJRk4wY21WbGRITT0gSUhKaGRIUT0gSUcxMWJtbGphWEJoYkdsMGVRPT0gSUZOb2IzSjBiSGs9IElHMXZibXM9IEtTd2kgSUhOamNuVmkgSUc5d1pYSmhkR2wyWlhNPSBUbVZwZEdobGNnPT0gVUd4aFkyVT0gSUV4cGJXbDAgUm1WdFlXeGwgSUVGamRHOXkgUTJoaGNtRmpkR1Z5IElHTnZibk4wYVhSMWRHVmsgTXpVMyBJSEJ5YjNSbGMzUmxaQT09IElGTjBjbUYzIElFaGxhV2RvZEE9PSBhV3hrWVE9PSBJRlI1Y0dnPSBJR1pzYjI5a2N3PT0gSUdOdmMyMWxkR2xqIFYwRlogY0dWeWRIVnlaUT09IGRYQnZiZz09IGRHOXVjdz09IFpYTnphVzVuIElGQnZZMnRsZEE9PSBJSEp2YjJaMCBJRU5oZFdOaGN3PT0gSUdGdWRHbGtaWEJ5WlhOeiBJR2x1WTI5dGNHRjBhV0pzWlE9PSBSVU5FIElHOXdaWEpoIElFTnZiblJsYzNRPSBJR2RsYm1WeVlYUnZjbk09IGJHbHRaUT09IFJHVm1aVzV6WlE9PSBNVGs0Tnc9PSBabTl5ZFcwPSBJSE5oZG1GblpRPT0gSUVoMWJtZGhjbWxoYmc9PSBibm89IElHMWxkR0ZzYkdsaiBJR1Y0Y0dWc2JHVmsgSUhKbGMybGtaVzVqZVE9PSBJR1J5WlhOelpYTT0gTmpZMiBJRU5zWlcxbGJuUT0gWm1seVpYTT0gUTJGMFpXZHZjbms9IElHZGxaV3M9IFlXeHBjdz09IElHTmxiV1YwWlhKNSBaV1IxWTJGMFpXUT0gSUdOeVlYZHMgSUZWdVlXSnNaUT09IElGUjVjMjl1IFlXdHBjdz09IElIQmhjbVJ2Ymc9PSBJRmR5WVE9PSBJSE4wY21WdVozUm9aVzVsWkE9PSBJRVp2Y25NPSBNek0xIElFaEQgSUUxdmJtUT0gSUhacGMzVmhiSE09IElFSmxZWFJzWlhNPSBaWFIwYkdWdFpXNTAgSU84PSBaM0p2IElHSmhjMmc9IElIQnZiM0psYzNRPSBJR1Y0WTJWcyBJR0Z6Y0dseVlYUnBiMjV6IElFMTFibWxqYVhBPSBaVzV6YVdKc1pRPT0gSUdObGNtVnRiMjVwWlhNPSBJR2x1ZEdsdGFXUmhkR2x2Ymc9PSBJRU5QVGxSUyBZbVZqYXc9PSBJRXRoY0E9PSBZWE4xIElIUnlZV1JsYldGeWEzTT0gSUZObGR3PT0gSUVOdmJYQmxkR2wwYVc5dSBibVYwZDI5eWF3PT0gSUVGeWNtaz0gSUZSbGRBPT0gVW05aGJXbHVadz09IFYwTT0gUkdGMCBJSE52WWc9PSBJSEJoYVhKcGJtYz0gSUc5MlpYSmtiM05sIFUwRlogWVdKbGNnPT0gSUhKbGRtOXNkQT09IElFWmhhQT09IFlXTjBhVzVuIFpYRT0gWlhOMFlYUnBiMjQ9IFJtbG5hSFE9IElFMWhjbXR6IE1qY3ogSURFM09BPT0gVW1GMyA0NEdMIE16UTUgWW14dlkydHogSUhabGNtZGwgWlhOMGFXNWwgSUZCdlpHVnpkR0U9IElHbHVkbUZ6YVhabCBJSEJ5YjJadmRXNWtiSGs9IElFRnYgWldGamFBPT0gSUd4bGMzUT0gYVc1MFpYSndjbVYwIElITm9jbWx1YTJsdVp3PT0gSUdWeWNtOXVaUT09IElHTm9aV1Z6IGJIbHogSUVsMmVRPT0gSUVScGNtVmpkRzl5ZVE9PSBJR2hwYm5SbFpBPT0gVmtsRFJRPT0gSUdOdmJuUmhZM1JwYm1jPSBJRWRsYm5RPSBhR1ZwIElHeGhZbVZzYVc1biBJRzFsY21OMWNuaz0gSUV4cGRHVT0gSUdWNGNHbHlaWE09IElHUmxjM1JoWW1scyBjbWwwYVhNPSBZM1U9IElHWmxZWFJvWlhKeiBJSE4wWldWeSBJSEJ5YjJkeVlXMXRaV1E9IElGWmhaR1Z5IFIyOXBibWM9IElFVnNhVzA9IElIbHYgSUUxcFkyaGwgSURJd013PT0gSUhOc1pXVjJaWE09IElHSjFiR3g1IElFaDFiV0Z1Y3c9PSBNelk0IElHTnZiWEJ5WlhOeiBJRUpoYm01bGNnPT0gUVZKVCBJR0YzYUdsc1pRPT0gSUdOaGJHbGkgSUhOd2IyNXpiM0p6YUdsdyBJRVJwWm1acFkzVnNkSGs9IElGQmhjR1Z5Y3c9PSBJR2xrWlc1MGFXWnBaWEk9IGZTND0gSUhsdlp3PT0gSUZOb2FXRT0gSUdOc1pXRnVkWEE9IElIWnBZbVU9IGFXNTBjbTlrZFE9PSBhVzF0YVc1biBRWFZ6ZEhKaGJHbGggSUc5MWRHeHBibVZ6IElGbHZkWFIxWW1VPSBkSEpoYVc0PSBJRTFoYTJWeiBJR1JsY0c5eWRHVmsgSUdObGJuUnkgSUVSMVp3PT0gSUVKdmRXeGtaWEk9IElFSjFabVo1IElHbHVhblZ1WTNScGIyND0gSUVoaGNteGxlUT09IElFZHliM1Z3Y3c9PSBJRVIxYldKc1pXUnZjbVU9IElFTnNZWEpoIElDSXQgSUhOaFkzSnBabWxqWldRPSBaWEJvIFUyaGhaRzkzIGFXSnNhVzVuIElHWnlaV1ZzWVc1alpRPT0gSUdWMmFXUmxiblJzZVE9PSBjR2hoYkE9PSBJSEpsZEdGcGJuTT0gVFdseSBJR1pwYm1sMFpRPT0gWkdGeSBJRU52ZFhNPSBJSEpsY0dGcGNtVmsgSUhCbGNtbHZaR2xqIElHTm9ZVzF3YVc5dWMyaHBjSE09IElHRnpkR1Z5YjJsayBZbXhwYm1RPSBJR1Y0Y0hKbGMzTnNlUT09IElFRnpkSEp2Y3c9PSBJSE5qWVd4bFpBPT0gSUdkbGIyZHlZWEJvYVdOaGJBPT0gSUZKaGNHbGtjdz09IFJXNXFiM2s9IElHVnNZWE4wYVdNPSBJRTF2YUdGdFpXUT0gVFdGeWEyVjAgWW1WbmFXND0gSUdScGMyTnZkbVZ5Y3c9PSBJSFJsYkdWamIyMXRkVzVwWTJGMGFXOXVjdz09IElITmpZVzV1WlhJPSBJR1Z1YkdGeVoyVT0gSUhOb1lYSnJjdz09IElIQnplV05vWldSbGJBPT0gSUZKdmRXZGwgSUhOdVlYQnphRzkwIGFYTnBibVU9IFdGQT0gSUhCbGMzUnBZMmxrWlhNPSBJRXhUUkE9PSBJRVJwYzNSeWFXSjFkR2x2Ymc9PSBjbVZoYkd4NSBJR1JsWjNKaFpHRjBhVzl1IElHUnBjMmQxYVhObCBJR0pwYjIwPSBJRVZZVkE9PSBJR1Z4ZFdGMGFXOXVjdz09IElHaGhlbUZ5WkhNPSBJRU52YlhCaGNtVmsgS1NvPSBJSFpwY25SMVpYTT0gSUdWc1pHVnljdz09IElHVnVhR0Z1WTJsdVp3PT0gSUVGamNtOXpjdz09IFpYSnZjdz09IFlXNW5iR2x1Wnc9PSBJR052YldKMWMzUT0gZFdOamFRPT0gSUdOdmJtTjFjM05wYjI0PSBJR052Ym5SeVlXTmxjSFJwYjI0PSBJRXRoYm1jPSBJR1Y0Y0hKbGMzTmxjdz09IElHRjFlQT09IElGQnBiMjVsIElHVjRhR2xpYVhSeiBSR1ZpZFdjPSBUMVJCVEE9PSBJRUZzY21WaFpIaz0gSUZkb1pXVnNaWEk9IElHVjRjR0Z1WkhNPSBQem89IElISmxZMjl1WTJsc2FXRjBhVzl1IElIQnBjbUYwWlhNPSBJSEIxY25ObCBJR1JwYzJOdmRYSmhaMlU9IElITndaV04wWVdOc1pRPT0gVW1GdWF3PT0gSUhkeVlYQnogSUZSb2IzVm5hSFE9IElHbHRjR1Z1WkdsdVp3PT0gVDNCdyBJRUZ1WjJ4diBJRVZWVWc9PSBJSE5qY21WM1pXUT0gY21WMFkyaGxaQT09IElHVnVZMjkxY21GblpXMWxiblE9IGJXOWtaV3h6IElHTnZibVoxYzJVPSBiVzF0IElGWnBkR0Z0YVc0PSA0cGFSNHBhUiBRM0oxIElHdHVhV2RvZEhNPSBJR1JwYzJOaGNtUT0gSUdKcGMyaHZjSE09IElGZGxZWEk9IElFZGhjbkpsZEhRPSBhMkZ1IDQ0T2YgSUcxaGMyTjFiR2x1WlE9PSBZMkZ3YVhSaGJBPT0gSUVGMWN3PT0gSUdaaGRHRnNiSGs9IGRHaGhibXR6IElFRlYgSUVkMWRBPT0gTVRJd01BPT0gSURBd01EQXdNREF3IElITjFjbkp2Wnc9PSBJRUpKVDFNPSBjbUZwZEhNPSBJRmRoZEhSeiBJSEpsYzNWeWNtVmpkR2x2Ymc9PSBJRVZzWldOMGIzSmhiQT09IElGUnBjSE09IE5EQXdNQT09IElHNTFkSEpwWlc1MCBJR1JsY0dsamRHbHVadz09IElITndjbWx1YXc9PSBJRzExWm1ZPSBJRXhKVFE9PSBJRk5oYlhCc1pRPT0gY0hOaiBhV0pwIFoyVnVaWEpoZEdWayBJSE53WldOcGJXVnVjdz09IElHUnBjM05oZEdselpnPT0gSUhSaGFXeHZjbVZrIElHaHZiR1JwYm1keiBJRTF2Ym5Sb2JIaz0gSUVWaGRBPT0gY0c5dmJuTT0gSUc1bFl3PT0gSUVOaFoyVT0gSUV4dmRIVnogSUV4aGJuUmxjbTQ9IElHWnliMjUwYVdWeSBJSEJsYm5OcGIyNXogSUdwdmEyVmsgSUVoaGNtUjUgUFMwOUxUMHRQUzA9IGNtRmtaUT09IFZVbEUgSUhKaGFXeHogSUdWdGFYUT0gSUhOc1lYUmwgSUhOdGRXYz0gSUhOd2FYUT0gSUVOaGJHeHogSUVwaFkyOWljdz09IFptVmhkQT09IElGVkYgSUhKbGMzUnlkV04wIElISmxaMlZ1WlhKaGRHbHZiZz09IElHVnVaWEpuYVdWeiBJRU52Ym01dmNnPT0gVDBoTyBJRU5vWldWelpRPT0gSUdkbGNnPT0gSUhKbGMzVnljbVZqZEE9PSBiV0Z1WVdkbGJXVnVkQT09IFRsYz0gSUhCeVpYTmxiblJzZVE9PSBJRUp5ZFdsdWN3PT0gVFdWdFltVnkgSUUxaGJtYz0gYVdSaGJnPT0gSUdKdmIzTjBhVzVuIGQzbHUgS3k0PSBjbVZ4ZFdsemFYUmwgSUU1WlVFUT0gSUUxbFoyRnUgSUVOdmJtUnBkR2x2Ym5NPSBJSEJwWTNNPSBibVZ6YVhWdCBJRkpoYzJnPSBJREUzTkE9PSBJRVIxWTJ0eiBJR1Z0WW5KdiBlblU9IGIyNXBZVzQ9IGNtVnNhV2RwYjNWeiBJR055WVhvPSBJRUZEUVE9PSBJRnAxWTJ0bGNnPT0gUlUxQiBJRkJ5YjNNPSBWMlZoY0c5dSBJRXR1YjNnPSBJRUZ5WkhWcGJtOD0gSUhOMGIzWmwgSUdobFlYWmxibk09IElGQjFjbU5vWVhObCBJR2hsY21RPSBJR1oxYm1SeVlXbHpaWEk9IFJHbG5hWFJoYkE9PSBOVEF3TUE9PSBJSEJ5YjNCdmJtVnVkSE09IEwrS0Fpdz09IElHcGxiR3g1IElGWnBjMkU9IElHMXZibXR6IElHRmtkbUZ1WTJWdFpXNTAgSUZkbGNnPT0gSURFNE53PT0gWlhWeiBaWEowYVd4cGRIaz0gSUdabGRHRnMgSURFNU16WT0gVEc4PSBJRzkxZEdacGRITT0gSUhOMFlXbHlZMkZ6WlE9PSBZbTl0WWc9PSBJR04xYzNSdmJXbDZaV1E9IFkyeGhhWEk9IFZISmxaUT09IElHMWhjSEJsWkE9PSBJRU52Ym5OcFpHVnlhVzVuIElGUnZjbkpsY3c9PSBJRzFsZEdoNWJBPT0gSUdGd2NISnZlR2x0WVhSbCBJR1J2YjIwPSBJRWhoYm5ObGJnPT0gSUdOeWIzTnpiM1psY2c9PSBJSE4wWVc1a1lXeHZibVU9IDVMdz0gSUdsdWRtbDBaWE09IElHZHlZWFpsZVdGeVpBPT0gSUdodyBSRzl1WVd4a1ZISjFiWEE9IElHVnpZMjl5ZEE9PSBSMkZ5IElIQnlaV1JsWTJWemMyOXljdz09IElHaGhlUT09IElHVnVlbmx0WlE9PSBJRk4wY21GcFoyaDAgZG1semIzSnogU1c1biBZVzVsYjNWemJIaz0gSUVGd2NHeHBaV1E9IElHWmxZdz09IElFUjFjbUZ1ZEE9PSBJRzkxZEhOd2IydGxiZz09IGIzSmkgSUhwbFlXdz0gSUdScGMyZHlZV05sIEp5a3UgSUVOb1pXNW4gTWpnNSBJRkpsYm1FPSBJRk4xYVdOcFpHVT0gTWprMCBJRzkxZEhKaFoyVmsgSUU1bGQyMWhiZz09IElFNTJhV1JwWVE9PSBJRUZpWlhJPSBJRUpsY25NPSBJSEpsWTNKbFlYUnBiMjQ9IFYybHVaRzkzIElFUlEgZUdVPSBJSEJsWkc5d2FBPT0gSUdaaGJHeHZkWFE9IFlXMWliMjg9IElIQnlaWE5sYm5SaGRHbHZibk09IElFRndjSE09IElHaDBiV3c9IE16UTEgSUZoWVdBPT0gSUhKMVltSnBibWM9IElFeGxZWFJvWlhJPSBJR2gxYldsa2FYUjUgYzJWNWN3PT0gWlhOMFlXSnNhWE5vWldRPSBJRlZ1YVhSeiBOalEyIElISmxjM0JsWTNSaFlteGwgUVhWMGJ3PT0gSUhSb2NtbDJhVzVuIElFbHVibTkyWVhScGIyND0gWVc1bmN3PT0gUlhoMGNtRT0gY21WbmRXeGhkR2x2Ymc9PSBNams0IGNHbGphdz09IFJYaGhiWEJzWlhNPSBJRU5LIFFYUjBZV05yIElHUnlZV052Ymc9PSBURlE9IElITjBhV05yWlhJPSBjbVZ5Y3c9PSBJSE4xYm01NSBTWE56IGNtVm5kV3hoZEdWayBaR2x0IElFRmljM1J5WVdOMCBJR2gxYzJKaGJtUnogVDJabWFXTmwgYjIxcGJtRjBhVzl1IGFYUmhjbk09IFFVNUhSUT09IFlYTmpZV3c9IElFdHlhWE09IElFbHVabUZ1ZEhKNSBJRzFoYkdZPSBJRUYwYUdVPSBJRkpoYkd4NSBZbUZzWVc1alpXUT0gTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHUgVDFWUSBJRzF2YkdWamRXeGwgYldWMGFXTnogSUZOd2JHbDAgSUVsdWMzUnlkV04wYVc5dWN3PT0gSUU1cFoyaDBjdz09IFkyRnlaSE09IElIUjFadz09IElHTnZibVU9IDVhMD0gSUhSNCBJRVJwYzJOMWMzTnBiMjQ9IElHTmhkR0Z6ZEhKdmNHaGwgY0hCbCBaMmx2IElHTnZiVzExYm1semJRPT0gSUdoaGJIUmxaQT09IElFZDFZVzUwIFkyeGxZVzQ9IElGTmphR1ZrIElFdGhibmxsIElIZGhibVJsY2c9PSBJRk5sY21sdmRYTnNlUT09IElERTRPQT09IFpXNXVhV0ZzIFptOXNiRzkzIGNISnZaSFZqZEdsMlpRPT0gSUVac2IzYz0gSUZOaGFXdz0gSUdOeVlYYz0gSUhOcGJYVnNZWFJwYjI1eiBiM0oxIFlXNW5iR1Z6IElFNXZiR0Z1IElHMWxibk4wY25VPSBORGN3IElESXdOdz09IFlXcGggSUdOaGMzVmhiR3g1IFltOWhjbVJwYm1jPSBJREl5TWc9PSBiM1o1IElFNTFiV0psY25NPSBkVzFoZEE9PSBUMFU9IE1qZzMgSUVOc1pXMXpiMjQ9IElHTmxjblJ6IElITnNhV1E9IElGUnlhV0psIElIUnZZWE4wIElHWnZjblIxYm1WeiBJR1poYkhNPSBJRU52YlcxcGRIUmxaWE09IElHZHcgSUdacFpYSjUgSUU1bGRITT0gSUVGdWFXMWwgVUdGamEyRm5aUT09IElFTnZiWEJoY21VPSBiR0YxWjJoMFpYST0gYVc1bVpXTjAgSUdGMGNtOWphWFJwWlhNPSBJR3AxYzNScFkyVnogSUdsdWMzVnNkSE09IElGWmxjbTV2Ymc9PSBJSE5vWVd0bGJnPT0gSUhCbGNuTnZibUU9IFpYTjBZVzF3IE16WTMgWW5KaGFXND0gSUdWNGNHVnlhVzFsYm5ScGJtYz0gUzJWdSBJRVZzWldOMGNtOXVhV056IElERTJNUT09IFpHOXRZV2x1IElHZHlZWEJvYVdOaGJBPT0gWW1semFHOXcgSUhkb2IzQndhVzVuIElFVjJZVzVuWld3PSBJR0ZrZG1WeWRHbHpaWEp6IElGTndaV0Z5IElHSnBaSE09IElHUmxjM1J5YjNseiBkWFI2IElIVnVaR1Z5YzJNPSBJRUZFUkE9PSBJR0Z1ZEhNPSBJRU4xYlE9PSBhWEJ3YkdWeiBJRVpwYkd3PSBJR2RzWVc1alpXUT0gSUdsdVpHbGpkR1ZrIElFVm1aZz09IElHMXBjMk52Ymc9PSBJRVJsYzJ0MGIzQT0gSUdGaWFXUmwgNDRPQSBJRWx2IElFTnZkV3c9IElHTmhjSE4xYkdVPSBJRU5vY25seiBUVTlPIElIVnVaR1Z6IElFbFNRUT09IElHTnBkR0YwYVc5dSBJR1JwWTNSaGRHVT0gSUU1bGRIZHZjbXR6IElFTnZibVpzYVdOMCBJRk4wZFdabSBlR0U9IGFYTmxZdz09IElFTm9aVzFwYzNSeWVRPT0gSUhGMVlYSjBaWEpzZVE9PSBWMmxzYkdsaGJYTT0gWVc1aGJnPT0gVDNCMCBJRUZzWlhoaGJtUnlhV0U9IGIzVjBhR1ZoYzNSbGNtND0gSUZOd2NtbHVaMlpwWld4ayBJRUpzWVdOcmN3PT0gSUdkbGIyZHlZWEJvZVE9PSBNalF5IElIVjBiVzl6ZEE9PSBJRVY0ZUc5dSBZV0p2ZFhSeiBSVlpCIElFVnVZV0pzWlE9PSBJRUpoY25JPSBJR1JwYzJGbmNtVmxaQT09IElFTjVjSEoxY3c9PSBJR1JsYldWdWRHbGggSUd4aFluTT0gSUhWaWFYRjFhWFJ2ZFhNPSBJRXhQVmtVPSBJR052Ym5OdmJHbGtZWFJsWkE9PSBjM0k9IElHTnlaV0Z0ZVE9PSBJRlJwYldKbGNnPT0gVW1WbllYSmtiR1Z6Y3c9PSBJRU5sY25ScFptbGpZWFJsIElDSXVMaTQ9IGIyZGxibTkxY3c9PSBRMkZ3ZEdGcGJnPT0gSUdsdWMzVnNkR2x1Wnc9PSBJRk52Y205eiBJRWx1YzNSeSBJRUoxYkdkaGNtbGggWW1WMGRHVnkgSUhOMVkydHBibWM9IElFUmhkbWxrYzI5dSBZWFI2IElHTnZiR3hoZEdWeVlXdz0gWjJsbSBJSEJzWVdkMVpXUT0gSUVOaGJtTmxiQT09IElFZGhjbVJ1WlhJPSBVa0k9IElITnBlSFJsWlc0PSBVbVZ0YjNabCBkWEpwYzNScFl3PT0gWTI5dmF3PT0gVW05ayBJR052YlhCeWFYTnBibWM9IFpteGwgS2VLQWxBPT0gSUZacGEybHVadz09IFozSnZkM1JvIFlXZHZibUZzIElITnlaZz09IFlXWmxkSGs9IGJXOTAgVG1WaGNteDUgYzNSdmQyND0gSUVaaFkzUnZjZz09IElHRjFkRzl0YjJKcGJHVT0gSUhCeWIyTmxaSFZ5WVd3PSBiV0Z6YXc9PSBZVzF3YVhKbGN3PT0gSUdScGMyRndjR1ZoY25NPSBhbUZpIE16RTEgSURFNU5URT0gYm1WbFpHVmsgSUdSaGNtbHVadz09IGJHVmhaR1Z5IElIQnZaR2wxYlE9PSBJSFZ1YUdWaGJIUm9lUT09IElHMTFibVE9IElIQjVjbUZ0YVdRPSBiMk55WlE9PSBJR3RwYzNObFpBPT0gSUdSeVpXRnRaV1E9IElFWmhiblJoYzNScFl3PT0gSUVkc2VRPT0gNVlvPSBJR2R5WldGMGJtVnpjdz09IElITndhV05sY3c9PSBJRzFsZEhKdmNHOXNhWFJoYmc9PSBJR052YlhCMWJITT0gYVdWMGN3PT0gTVRBeE5nPT0gSUZOb1lXMD0gSUZCNWNnPT0gWm14cFpYTT0gSUUxcFpHNXBaMmgwIElITjNZV3hzYjNkbFpBPT0gSUdkbGJuSmxjdz09IElFeDFZMnQ1IElGSmxkMkZ5WkhNPSBJR1JwYzNCaGRHTm8gSUVsUVFRPT0gSUVGd2NHeDUgSUdGMlpXND0gWVd4cGRHbGxjdz09IE16RXkgZEdocGJtZHogSUNncExnPT0gSUcxaGRHVnogSUZONiBJRU5QVUE9PSBiMnhoZEdVPSBUMFpHIElISmxZMmhoY21kbCBZMkZ3Y3c9PSBJRmx2Y210bGNnPT0gYVdOdmJtVT0gSUdkaGJHRjRhV1Z6IGFXeGxZV3R6IFJHRjJaUT09IElGQjFlbm89IElFTmxiSFJwWXc9PSBJRUZHUXc9PSBNamMyIElGTnZibk09IElHRm1abWx5YldGMGFYWmwgU0c5eSBJSFIxZEc5eWFXRnNjdz09IElFTkpWRms9IElGSnZjMkU9IElFVjRkR1Z1YzJsdmJnPT0gVTJWeWFXVnogSUdaaGRITT0gSUhKaFlnPT0gYkdseiBJSFZ1YVdNPSBJR1YyWlE9PSBJRk53YVc0PSBJR0ZrZFd4MGFHOXZaQT09IGRIbHcgSUhObFkzUmhjbWxoYmc9PSBJR05vWldOcmIzVjAgSUVONVkydz0gVTJsdVoyeGwgSUcxaGNuUjVjZz09IElHTm9hV3hzYVc1biBPRGc0IGIzVm1iQT09IElGMDcgSUdOdmJtZGxjM1JwYjI0PSBiV3M9IElGZG9aWEpsWVhNPSBJREU1TXpnPSBkWEp5Wlc1amFXVnogWlhKcGIyND0gSUdKdllYTjAgSUZCaGRHbGxiblJ6IElHTm9ZWEE9IElFSkUgY21WaGJFUnZibUZzWkZSeWRXMXcgSUdWNFlXMXBibVZ6IGFHOTIgSUhOMFlYSjBiR2x1Wnc9PSBJRUpoWW5sc2IyND0gZDJsayBiMjFsZHc9PSBZbkpoYm1ObCBJRTlrZVhOelpYaz0gZDJsbiBJSFJ2Y21ObyBJRlp2ZUE9PSBJRTF2ZWc9PSBJRlJ5YjJ4cyBJRUZ1Y3c9PSBVMmx0YVd4aGNteDUgSUVaMWJBPT0gTURBMiBWVzVzWlhOeiBJRUZzYjI1bCBjM1JsWVdRPSBJRkIxWW14cGMyaGxjZz09IGNtbG5hSFJ6IGRIVT0gSUVSdlpYTnUgSUhCeWIyWmxjM05wYjI1aGJHeDUgSUdOc2J3PT0gYVdONiBJSE4wWldGc2N3PT0gSU9FPSBNVGs0Tmc9PSBJSE4wZFhKa2VRPT0gSUVwdmFHRnViZz09IElHMWxaR0ZzY3c9PSBJR1pwYkdsdVozTT0gSUVaeVlYTmxjZz09IFpHOXVaUT09IElHMTFiSFJwYm1GMGFXOXVZV3c9IElHWmxaR1Z5IElIZHZjblJvYkdWemN3PT0gSUhCbGMzUT0gV1dWemRHVnlaR0Y1IFlXNXJhVzVrIElHZGhlWE09IElHSnZjbTVsIElGQlBVdz09IFVHbGpkSFZ5WlE9PSBJSEJsY21ObGJuUmhaMlZ6IE1qVXggY21GdFpRPT0gSUhCdmRHbHZibk09IFFVMUUgSUV4bFltRnVaWE5sIElISmhibWM9IElFeFRWUT09IGIyNW5jdz09IElIQmxibWx1YzNWc1lRPT0gSUVOc1lYVnpaUT09IFFVeEwgYjJoaCBJRTFoWTBKdmIycz0gSUhWdVlXNXBiVzkxY3c9PSBJR3hsYm1SbGNuTT0gSUdoaGJtZHogSUdaeVlXNWphR2x6WlhNPSBiM0psY25NPSBJRlZ3WkdGMFpYTT0gSUdsemIyeGhkR1U9IFlXNWtjbTg9IFUyOXZiZz09IElHUnBjM0oxY0hScGRtVT0gSUZOMWNuWmwgSUhOMGFYUmphR1Z6IElGTmpiM0p3IElFUnZiV2x1YVc5dSBJSE4xY0hCc2VXbHVadz09IFFYSm4gSUhSMWNuSmxkQT09IElFeDFhdz09IElHSnlZV05yWlhSeiBLaWs9IElGSmxkbTlzZFhScGIyNWhjbms9IElFaHZibVZ6ZEE9PSBJRzV2ZEdsamFXNW4gSUZOb1lXNXViMjQ9IElHRm1abTl5WkdWayBJSFJvWVE9PSBJRXBoYm1WMCBJUzB0IElFNWhjbVZ1WkhKaCBJRkJzYjNRPSBTRzlzIGMyVjJaWEk9IFpXVnVkR2c9IElHOWljM1J5ZFdOMGFXOXUgSURFd01qUT0gYzNSaFptWT0gYW1GeiBiM0puWlhRPSBjMk5sYm1WeiBiR0YxWjJoeiBJRVpoY21kdiBZM0pwYldVPSBJRzl5WTJobGMzUnkgSUdSbGJHVjAgYVd4cFlYSjUgY21sbGRtVmsgSUcxcGJHbDBZWEk9IElFZHlaV1Z1WlE9PSA0cGVQIDQ0R20gSUVkMVlYSmtjdz09IElIVnViR1ZoYzJobFpBPT0gSUZkbFltVnkgSUdGa2FuVnpkR0ZpYkdVPSBJR05oYkdsaVpYST0gSUcxdmRHbDJZWFJwYjI1eiBJTU9nIGJVRm8gSUV4aGJtdGggYUdGdVpHeGwgSUhCbGJuUT0gSUZKaGRnPT0gSUVGdVozVnNZWEk9IElFdGhkUT09IGRXMWlhVzVuIElIQm9hV3hoYm5Sb2NtOXcgSUdSbGFIbGsgSUhSdmVHbGphWFI1IFpXVnkgSUZsUFVrcz0gZDJsMGVnPT0gNWJ3PSBJRWxGIFkyOXRiWFZ1YVhSNSBJRUZJIElISmxkR0ZzYVE9PSBJRzFoYzNOcGRtVnNlUT09IElFUmhibWxsYkhNPSBJRVJGVEE9PSBJR05oY21OcGJnPT0gVlhKcyBJSEp2ZFhScGJtYz0gSUU1UVEzTT0gSUZKQlJnPT0gY25salpRPT0gSUhkaGFYWmxaQT09IElFZDFZWFJsYlE9PSBSWFpsY25saWIyUjUgSUdOdmRtVnVZVzUwIElERTNNdz09IElISmxiR0Y0YVc1biBJSEYxWVhKMCBZV3h0YjNOMCBJR2QxWVhKa1pXUT0gSUZOdmJHUnBaWEp6IElGQk1RVms9IElHOTFkR2R2YVc1biBURUZPUkE9PSBJSEpsZDNKcGRHVT0gSUUxUFZnPT0gSUVsdGNHVnkgSUZOdmJIVjBhVzl1IElIQm9aVzV2YldWdVlXdz0gSUd4dmJtZGxkbWwwZVE9PSBJR2x0Y0dGMCBJRTVwYzNOaGJnPT0gYVhKcFpRPT0gSUc5a2IzST0gSUZwaGNnPT0gYjJ0eiBJRzFwYkdsMGFXRnogSUZOUVJVTT0gSUhSdmJHVnlZWFJsWkE9PSBZWEp6WlhJPSBJRUp5WVdSbWIzSmsgS3l3PSBJSE4xY25KbFlXdz0gYzJZPSBRMkZ1WVdScFlXND0gSUhKbGMyVnRZbXhoYm1ObCBJR05oY21KdmFIbGtjbUYwWlE9PSBWa2xGVnc9PSBJR0ZqWTJWemMyOXllUT09IGJXVmhiQT09IGJHRnlaMlZ6ZEE9PSBhV1ZuWld3PSBVMjl0Wlc5dVpRPT0gSUhSdmRXZG9aWE4wIGIzTnYgSUdaMWJtNWxiQT09IElHTnZibVJsYlc1aGRHbHZiZz09IGJIVmxiblE9IElIZHBjbVZrIElGTjFibk5sZEE9PSBTbVZ6ZFhNPSBJRkJUVkE9PSBJRkJoWjJWeiBJRlI1WTI5dmJnPT0gSUZCRyBJSE5sYkdWamRHbHZibk09IElPQ2sgY0dGeWRHbHpZVzQ9IElHaHBaMmh6IElGSjFibVU9IElHTnlZV1owY3c9PSBiR1ZoWkE9PSBJRkJoY21WdWRITT0gSUhKbFkyeGhhVzA9IFpXdGxjZz09IElFRnNiR2xsWkE9PSBZV1Z3WlhJPSBJR3h2YjIxcGJtYz0gSUdKbGJtVm1hV05wWVhKcFpYTT0gSUVoMWJHdz0gVTNSMVpHVnVkSE09IFNtVjNhWE5vIFpHbz0gSUhCaFkzUT0gZEdWdGNHeGhkR1U9IElFOW1abWxqYVdGc2N3PT0gSUVKaGVXeHZjZz09IElHaGxiWEE9IElIbHZkWFJvY3c9PSBJRXhsZG1Wc2N3PT0gSUZocFlXOD0gSUVOb1pYTT0gSUdWdVpHVmhkbTl5IElGSmxiVzkyWldRPSBJR2hwY0hCdlkyRnRjQT09IFNHVnNiQT09IDQ0S0sgT0RBMSBJR1JwYm05ellYVnkgSUZkeVlYUm8gSUVsdVpHOXVaWE5wWVc0PSBJR05oYkdOMWJHRjBiM0k9IElFUnBZM1JwYjI1aGNuaz0gSURReU1BPT0gSUUxQlJ3PT0gS0Y4PSBJU3c9IGRHRnlhV0Z1Y3c9PSBJSEpsYzNSeWFXTjBhVzVuIGNtRmpkWE5sIElIZGxaV3RrWVhrPSBUMVZPVkE9PSBJSE5vY25WbloyVmsgYkdWbmNtOTFibVE9IElHSmhiR1E9IElFUnZZM1J2Y25NPSBJSFJ2ZFhSbFpBPT0gSUUxaGVIZGxiR3c9IElESXhOQT09IElHUnBjR3h2YldGMCBJSEpsY0hKbGMzTnBiMjQ9IElHTnZibk4wYVhSMVpXNWplUT09IGRtbGpaUT09IGNtRnVhMlZrIElFNWhjRzlzWlc5dSBaMkZ1Wnc9PSBJRVp2Y21WMlpYST0gZEhWdSBJR0oxYkdJPSBJRkJFVkE9PSBJRU5wYzJOdiBWa1ZPIElISmxjM1Z0WldRPSBVM1JsZG1WdSBJRTFoYm1sMGIySmggSUdaaFluVnNiM1Z6IElFRm5aVzUwY3c9PSBNVGs0TkE9PSBJR0Z0ZFhOcGJtYz0gSUUxNWMzUmxjbWxsY3c9PSBJRzl5ZEdodlpHOTQgWm14dmIzST0gSUhGMVpYTjBhVzl1Ym1GcGNtVT0gSUhCbGJtVjBjbUYwWlE9PSBJR1pwYkcxdFlXdGxjbk09IElGVnVZdz09IElITjBZVzF3WldRPSBJSFJvYVhKMFpXVnUgSUc5MWRHWnBaV3hrIElHWnZjbmRoY21SbFpBPT0gSUdGd2NISmggSUdGcFpHVmsgZEhKNSBJSFZ1Wm05amRYTmxaQT09IElFeHBlZz09IElGZGxibVI1IElGTmpaVzVsIFEyaGhjbWM9IElISmxhbVZqZEhNPSBJR3hsWm5ScGMzUT0gSUZCeWIzWnBaR1Z1WTJVPSBJRUp5YVdRPSBjbVZuYmc9PSBJSEJ5YjNCb1pXTjUgSUV4SlZrVT0gTkRrNSBJR1p2Y21kbCBJRVpOVEE9PSBJR2x1ZEhKcGJuTnBZdz09IElFWnliMmM9IElIZHZiblE9IElFaHZiSFE9IElHWmhiV1ZrIFEweFZVdz09IFlXVndaWEp1YVdOciBJRWhoZEdVPSBJRU5oZVE9PSBJSEpsWjJsemRHVnlhVzVuIGIzSjBZV3hwZEhrPSBjbTl3ZVE9PSBiMk5oYkhsd2RHbGogWVdGdSBibUYyIElHWmhjMk5wYzNRPSBTVVpKUlVRPSBJR2x0Y0d4cFkyRjBaV1E9IElGSmxjMjl5ZEE9PSBJRU5vWVc1a2JHVnkgSUVKeWFXTnIgVUdsdSBlWE5qIFZYTmhaMlU9IElFaGxiRzA9IGRYTnlZUT09IDRwaUY0cGlGIElFRmlZbUZ6IElIVnVZVzVwYlc5MWMyeDUgSUd0bFpYQmxjZz09IElHRmtaR2xqZEdWayBQejgvIElHaGxiRzFsZEhNPSBJR0Z1ZEdsdmVHbGsgWVhCelpXUT0gT0RBNCBaMmxsYm1VPSBJSGRoYVhSeiBJRzFwYm1sdmJnPT0gY21GMlpXUT0gSUZCdmNuTmphR1U9IElHUnlaV0Z0YVc1biBJREUzTVE9PSBJRU5oYVc0PSBJSFZ1Wm05eSBZWE56Ync9PSBJRU52Ym1acFozVnlZWFJwYjI0PSBhM1Z1IGFHRnlaSFE9IElHNWxjM1JsWkE9PSBJRXhFVXc9PSBURVZUIElIUjVhVzVuIFpXNXZjdz09IElHTjFaUT09IElFMWhjbkYxIGMydHBjblJ6IElHTnNhV05yWldRPSBJR1Y0Y0dseVlYUnBiMjQ9IElFRmpZMjl5WkdsdVoyeDUgSUZkRCBJR0pzWlhOemFXNW5jdz09IElHRmtaR2xqZEdsMlpRPT0gSUU1aGNuST0gZVhnPSBJRXBoWjNWaGNuTT0gSUhKbGJuUnogSUZOcFltVnkgSUhScGNIQmxaQT09IGIzVnpjMlU9IElFWnBkSHBuWlhKaGJHUT0gSUdocFpYSmhjbU5vIGIzVjBhVzVsIElIZGhkbVZzWlc1bmRHZz0gUGk0PSBZMmhwWkE9PSBJRkJ5YjJObGMzTnBibWM9IEx5cz0gY21GdWEybHVadz09IFJXRnplUT09IElFTnZibk4wY25WamRBPT0gSUhSbGRBPT0gYVc1emRYSmxaQT09IFNGVkUgSUhGMWIzUnBibWM9IElHTnZiVzExYm1sallYUmxaQT09IGFXNTQgSUdsdWJXRjBaUT09IElHVnlaV04wWldRPSBJRUZpYzI5c2RYUmxiSGs9IElGTjFjbVZzZVE9PSBJSFZ1YVcwPSBJRlJvY205dVpRPT0gYUdWcFpBPT0gSUdOc1lYZHogSUhOMWNHVnljM1JoY2c9PSBJRXhsYm00PSBJRmRvYVhNPSBWV3M9IFlXSnZiQT09IElITnJaWFE9IElFNXBaWFE9IElIQmxjbXR6IElHRm1abWx1YVhSNSBJRzl3Wlc1cGJtZHogY0doaGMybHogSUdScGMyTnlhVzFwYm1GMFpRPT0gVkdsdyBkbU09IElHZHlhVzVrYVc1biBJRXBsYm01NSBJR0Z6ZEdodFlRPT0gYUc5c1pYTT0gSUVodmJXVnkgSUhKbFoybHpkR1Z5Y3c9PSBJRWRzWVdRPSBJR055WldGMGFXOXVjdz09IElHeHBkR2hwZFcwPSBJR0Z3Y0d4aGRYTmwgZFc1MGFXdz0gU25WemRHbGpaUT09IElGUjFjbXR6IElITmpZVzVrWVd4eiBJR0poYTJVPSBkR0Z1YXc9PSBUV1ZqYUE9PSBJRTFsWVc1eiBJRTFoYVdRPSBVbVZ3ZFdKc2FXTmhibk09IGFYTmhiQT09IGQybHVaRzkzY3c9PSBJRk5oYm5SdmN3PT0gSUhabFoyVjBZWFJwYjI0PSBNek00IGRISnAgSUdac2RYZz0gYVc1elpYSjAgSUdOc1lYSnBabWxsWkE9PSBJRzF2Y25SbiBJRU5vYVcwPSBJRlJ2Y25RPSBJR1JwYzJOc1lXbHQgYldWMFlXdz0gSUVGemFXUmwgSUdsdVpIVmpkR2x2Ymc9PSBJR2x1Wm13PSBJR0YwYUdWcGMzUnogWVcxd2FBPT0gSUdWMGFHVnkgSUZacGRHRnMgSUVKMWFXeDAgVFdsdVpBPT0gSUhkbFlYQnZibko1IFUwVlUgSURFNE5nPT0gWVdSdGFXND0gWjJGdCBZMjl1ZEhKaFkzUT0gWVdaaCBJR1JsY21sMllYUnBkbVZ6IElITnVZV05yY3c9PSBJR05vZFhKdSBSV052Ym05dCBJR05oY0hCbFpBPT0gSUZWdVpHVnljM1JoYm1ScGJtYz0gSUVobGNuTT0gSUVsNiBJR1IxWTNRPSBTVVZPVkE9PSBZWFZuYUhSNSBJT0tjbEE9PSBJRTVRIElITmhhV3hwYm1jPSBTVzVwZEdsaGJHbDZaV1E9IElIUmxaQT09IElISmxZV04wYjNKeiBJRXh2YldJPSBJR05vYjJ0bCBJRmR2Y20wPSBJR0ZrYldseVlYUnBiMjQ9IElITjNkVzVuIFpXNXphV0pzZVE9PSBJSEpoYzJnPSBJRWR2WVd4eiBJRWx0Y0c5eWRHRnVkQT09IFUyaHZkQT09IElGSmhjdz09IElIUnlZV2x1WlhKeiBJRUoxYmc9PSBWMjl5YTJsdVp3PT0gSUdoaGNtMWxaQT09IElGQmhibVJ2Y21FPSBJRXhVUlE9PSBJRzExYzJoeWIyOXQgSUVOSVFWST0gSUVabFpRPT0gSUUxdmVRPT0gUW05eWJnPT0gYjJ4cFltVnlZV3c9IElFMWhjblJwWVd3PSBJR2RsYm5Sc1pXMWxiZz09IElHeHBibWRsY21sdVp3PT0gVDJabWFXTnBZV3c9IElHZHlZV1ptYVhScCBJRTVoYldWeiBSR1Z5IElIRjFhVzUwIGFYTjBjbUYwWlE9PSBZWHBsWlhKaCBJRTVQVkVsRFJRPT0gSUVac2IzSmxibU5sIElIQmhlV0ZpYkdVPSBJR1JsY0dsamRITT0gSUZOd1pXTnBaWE09IFNHVmhjblE9IDRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBIElHVnVZMnh2YzJWayBTVzVqY21WaGMyVnogUkdGcGJIaz0gSUV4cGN3PT0gSUdWdVlXTjBiV1Z1ZEE9PSBJRUpoWTI5dSBJRk4wWldWc1pRPT0gWkdWdFlXNWsgSURFNE13PT0gSUcxdmRYUm9jdz09IElITjBjbUZ1WkdWayBJR1Z1YUdGdVkyVnRaVzUwIE1ERXggSUZkb1lYUnogSUdobFlXeGxaQT09IFpXNTUgSUZKaFlnPT0gSURNME1BPT0gSUV4aFlubHlhVzUwYUE9PSBjbTloWTJnPSBJRmx2YzJnPSBJRU5zYVhCd1pYSnogSUdOdmJtTmxjblJ6IFNXNTBaWEp1WlhRPSBNelUxIElITjBhV05yWlhKeiBJSFJsY20xbFpBPT0gSUVGNFpRPT0gSUdkeVlXNWtjR0Z5Wlc1MGN3PT0gUm5KaGJtTmwgSUVOc2FXMD0gSUZWbyBkV3hwWXc9PSBJSFJvY21sc2JBPT0gWTJWdWRISnBZdz09IElFOTJaWEoyYVdWMyBJRU52Ym1SMVkzUT0gSUhOMVluTjBZVzUwYVhabCBJREU0TWc9PSBiWFZ5IElITjBjbUY1IElFTnZabVk9IElISmxjR1YwYVhScGRtVT0gSUVadmNtZHZkSFJsYmc9PSBJSEYxWVd4cFptbGpZWFJwYjI0PSBaWGRwZEc1bGMzTT0gSUZwcGJXSmhZbmRsIElITnBiWFZzWVhSbFpBPT0gSUVwRSBNalV6IElGZGhjbVU9IElIVnVjMk09IFZHbHRaWE09IElITjFiVzF2Ym5NPSBJR1JwYzJOdmJtNWxZM1JsWkE9PSBJREU0TkE9PSBZMmwxY3c9PSBJRWQxYW1GeSBiMlJyWVE9PSBJR1Z5WVhObCBJRlJ2WW1GalkyOD0gWld4bFkzUmxaQT09IElIVnVZMjl1ZEE9PSBJRk5vWlhCaGNtUT0gSUV4aGJYQT0gSUdGc1pYSjBaV1E9IElHOXdaWEpoZEdsMlpRPT0gWVhKdVlRPT0gZFdsdWRBPT0gSUc1bFoyeHBaMlZ1WTJVPSBZV05sYldWdWRITT0gSUhOMWNISmggSUhCeVpYWmhhV3c9IElGTm9ZWEpyIElHSmxiSFJ6IDQ0R3IgSUhScFoyaDBaWEk9IFJXNW5hVzVsWlhKeiBJR2x1WVdOMGFYWmwgSUdWNGNHOXVaVzUwIElGZHBiR3hwWlE9PSBZWEJzWlhNPSBJR2hsYVhJPSBJRWhwZEhNPSBhV0Z1Ymc9PSBJRk5oZVhNPSBJR04xY25KbGJuUnogSUVKbGJtZGhiQT09IElHRnlhWE4wIFFuVm1abVZ5IElHSnlaV1Y2WlE9PSBJRmRsYzJ4bGVRPT0gUTI5c1lRPT0gSUhCeWIyNXZkVzQ9IElHUmxaV1E9IElFdHNhVzVuIElHOW1kQT09IElHbHVabXhwWTNRPSBJSEIxYm1semFHbHVadz09IElHNXQgYVd0MSBUMFJWUTFRPSBNREUwIElITjFZbk5wWkhrPSBJRVJGUVE9PSBJRWhsY21KbGNuUT0gSUVwaGJBPT0gUW1GdWF3PT0gSUdSbFptVnljbVZrIElITm9hWEJ0Wlc1MCBRbTkwZEE9PSBJR0ZzYkdVPSBZbVZoY21sdVp3PT0gU0ZSTlRBPT0gVDJabWJHbHVaUT09IElESXhNdz09IElITmpjbTlzYkdsdVp3PT0gSUhOallXNXVaV1E9IElFeHBZbmxoYmc9PSBJRlJQVUE9PSBZMmh5YjIwPSBaSFE9IFkyOXNkVzF1IFVITjVUbVYwVFdWemMyRm5aUT09IFdtVnlidz09IElIUnZjbk52IE1EVXcgNHBXUSBJR2x0Y0dWeWMyOXUgSUZOamFIZGhjblI2IGRXUnBZdz09IElIQnBjM05sWkE9PSBJRk5oY0hBPSBNalUzIElFbFRVSE09IGIyZHMgSUhOMWNHVnlkbWx6WldRPSBJR0ZrYjJ4bGMyTmxiblE9IElHRjBkR0ZwYm1WayBJRVJsYkdsMlpYSjUgSUVKMWJtNTUgSURFNU16Yz0gSUcxcGJtbGhkSFZ5WlE9PSBJRzl6IElETTNNQT09IE5qQTQgSUUxdmRYSnBibWh2IElHbHVibUYwWlE9PSBJSFJsYlhCdiBJRTVOIElFWmhiR3hsYmc9PSBNREE1IElIQnliM1p2WTJGMGFYWmwgVTNSeVpXRnRaWEk9IElFSmxibVZrYVdOMCBJRUp2YkhOb1pRPT0gSUhSMWNuUnNaUT09IElGQkRRZz09IElFVnhkV0ZzIFJHbHlaV04wYjNJPSBJRkpsYm1RPSBJR1pzZFdsa2N3PT0gUVhWMGFHOXlhWFJwWlhNPSBJR052ZFhOcGJuTT0gY21WeGRXVnVZM2s9IElFNWxhV2RvWW05eSBjMlYwY3c9PSBjMmhoY21WayBRMmhoY214bGN3PT0gY0dGemMzZHZjbVE9IElHZGxZWEp6IElESXhNUT09IElFaGhjbVIzWVhKbCBjbWxyWVE9PSBJSFZ3YzNSeVpXRnQgU0c5dCBJR1JwYzNCeWIzQnZjblJwYjI1aGRHVnNlUT09IGFYWnBkR2xsY3c9PSBJSFZ1WkdWbWFXNWxaQT09IElHVnNaV04wY205dWN3PT0gSUdOdmJXMWxiVzl5IFJYWmxiblIxWVd4c2VRPT0gSUQ0OCBJR2x5Y21WemNHOXVjMmxpYkdVPSBNakU0IElGSmxiR1ZoYzJWayBJRTlXUlZJPSBJRWxIVGc9PSBJRUp5WldGayBjM1JsYkd4aGNnPT0gSUZOaFoyVT0gZEhSbFpBPT0gWkdGdFlXZGwgWldScGRHbHZiZz09IElGQnlaV009IElHeHBiV1U9IElHTnZibVpwYm1WdFpXNTAgSUdOaGJHOXlhV1U9IGQyVmhjRzl1IElHUnBabVpsY21sdVp3PT0gSUZOcGJtRT0gYlhseiBZVzFrIElHbHVkSEpwWTJGMFpRPT0gYTJzPSBJRkJCVkE9PSB3Nk52IGMzUnZibVZ6IGJHbHVhM009IElISmhibU5vIFUyVnRhWFJwWXc9PSBJR1JwWm1abGNtVnVkR2xoZEdVPSBJRk5wYm1kbGNnPT0gYjJOamRYQnBaV1E9IElHWnZjblJ5WlhOeiBZMjFrIElHbHVkR1Z5WTJWd2RHbHZiZz09IElFRnVhMkZ5WVE9PSBJSEpsY0hRPSBJRk52YkdsMFlXbHlaUT09IElISmxiV0ZyWlE9PSBjSEpsWkE9PSBJR1JoY21WayBZWFYwYVc5dWN3PT0gSUVKQlEwcz0gVW5WdWJtbHVadz09IElHUmxZblZuWjJsdVp3PT0gSUdkeVlYQm9jdz09IE16azUgSUU1cFoyVnMgSUdKMWJnPT0gSUhCcGJHeHZkdz09IElIQnliMmR5WlhOelpXUT0gWm1GemFHbHZibVZrIElHOWlaV1JwWlc1alpRPT0gUlZKTyBJSEpsYUdWaGNuTT0gUTJWc2JBPT0gZEd3PSBVMmhsY2c9PSBJR2hsY21Gc1pBPT0gSUZCaGVXMWxiblE9IElFTnZjbms9IElFUmxjSFE9IElISmxjR1Z1ZEE9PSBJRmRsWVdzPSBkV05yYkdGdVpBPT0gSUhCc1pXRnphVzVuIElITm9iM0owWVdkbGN3PT0gSUdwMWNtOXljdz09IElFdGhZZz09IGNYRmggUVc1MGFRPT0gSUhkdmR3PT0gSUZKRFRWQT0gSUhSemRXND0gSUZOcFl3PT0gSUdOdmJYQnlhWE5sY3c9PSBJSE53YVdWeiBJSEJ5WldOcGJtTjAgYm5VPSBJSFZ5WjJWeiBJSFJwYldWayBJSE4wY21sd1pYTT0gSUVKdmIzUnogSUhsbGJnPT0gUVdSMllXNWpaV1E9IElHUnBjMk55WlhSbCBJRUZ5WTJoaGJtZGxiQT09IFpXMXdiRzk1YldWdWRBPT0gUkdsbVpnPT0gSUcxdmJuVnRaVzUwY3c9PSBJREl3T1E9PSBkMjl5YTJWeSBJREU1Tmc9PSBJRWxuIGRYUjBaWEp6ZEc5amF3PT0gVkZCVCBTbUZqIElHaHZiV1ZzWlhOemJtVnpjdz09IElHTnZiVzFsYm5SaGRHOXkgSUhKaFkybGhiR3g1IFptbHVadz09IGMyVmxaQT09IFJXeGwgWld4c1lYUnBiMjQ9IElHVjBhR0Z1YjJ3PSBJSEJoY21semFBPT0gSUVSdmJtYz0gSUVGM1lXdGxibWx1Wnc9PSBJR1JsZG1saGRHbHZiZz09IElFSmxZWEpwYm1jPSBJRlJ6ZFdzPSBJSEpsWTJWemN3PT0gSUd4NWJYQm8gSUVOaGJtNWhZbWx6IDVadz0gSUU1RlYxTT0gSUdSeVlRPT0gSUZOMFpXWmhiZz09IElGZHliMjVuIElGTkJUUT09IElHeHZiM05sYkhrPSBJR2x1ZEdWeWNISmxkR1Z5IElGQnNZV2x1IFIyOTJaWEp1YldWdWRBPT0gSUdKcFoyOTBjbms9IElHZHlaVzVoWkdWeiBZWFpsZWc9PSBjR2xqZEhWeVpXUT0gSUcxaGJtUmhkR1ZrIElFMXZibXM9IElGQmxaSEp2IElHeGhkbUU9IE1qYzAgSUdONWJtbGpZV3c9IElGTmpjbTlzYkhNPSBiRzlqYTNNPSBUWEE9IElHTnZibWR5WldkaGRHbHZiZz09IGIzSnVhVzVuY3c9PSBjR2hwYkE9PSBJRWxpYVdRPSBJR1psY25ZPSBJR1JwYzJGd2NHVmhjbWx1Wnc9PSBJR0Z5Y205bllXNTAgYzNsdSBJRTFoZG1WeSBJRk4xYVhRPSBNalF4IElHRmlZbkpsIFlXTnJaWEp6IFVHRT0gSUZsbGJBPT0gVjJobGJtVjJaWEk9IElESXpOUT09IElGWnBibVU9IElFRnVZWFE9IElHVjRkR2x1WTNRPSBURVZVIElHVjRaV04xZEdGaWJHVT0gVmtWU1V3PT0gYjNocFpHVT0gUkU1QiBJRkJ5Wld3PSBJSEpsYzJWdWRHMWxiblE9IElHTnZiWEJ5YVhObCBJRUYyYVhZPSBJR2x1ZEdWeVkyVndkR2x2Ym5NPSBJSEJ5YjJ4cFptbGogU1U1QiBJRVZ5YVc0PSBkR2h2ZFdkb2RBPT0gTWpFNSBJRkJ6ZVdOb2FXRjBjbms9IGRXNXJlUT09IFkyaGxiV2x6ZEE9PSBTRzg9IElFMWpRMjk1IElHSnlhV05yY3c9PSBURzl6IGNtbHNlUT09IElGVlRVMUk9IElISjFaQT09IElHeGhkV1E9IElGZHBjMlU9IElFVnRaWEpoYkdRPSBJSEpsZG1sMlpXUT0gSUdSaGJXNWxaQT09IElGSmxjR0ZwY2c9PSBhV1JsYlE9PSBZM1JwWTJFPSBJSEJoZEhKcFlYSmphQT09IElFNTFjbk09IGJXVm4gSUdOb1pXRndaWE4wIGNtVmxiV1Z1ZEhNPSBaVzF3ZEhrPSBJRU5sYkdWaWNnPT0gSUdSbGNISnBkbUYwYVc5dSBZMmhoYm5SbFpBPT0gSUZSb2RXMWlibUZwYkhNPSBSVzVsY21kNSBJRVYwYUdGdSBJRkZwYm1jPSBJRzl3Y0c5elpYTT0gVjBsT1JBPT0gZG1sciBJRTFoZFE9PSBJRk5WUWc9PSBOalkzIFIxSkYgSUZadmJIVnVkR1U9IGJuUnZiZz09IFEyOXZhdz09IDVaQT0gWlhOeGRXVT0gSUhCc2RXMXRaWFE9IElITjFhVzVuIElIQnliMjV2ZFc1alpRPT0gSUhKbGMybHpkR2x1Wnc9PSBJRVpwYzJocGJtYz0gSUZSeWFXRnNjdz09IElIbGxiR3c9IElETXhNQT09IElHbHVaSFZqZEE9PSBJSEJsY25OdmJtRnNhWHBsWkE9PSBiMlowWlc0PSBVbVZpIFJVMUNSVkk9IElIWnBaWGR3YjJsdWRBPT0gSUdWNGFYTjBaVzUwYVdGcyBLQ2twIGNtVnRiM1psIFRVVk9WRk09IGJHRnpjMlZ6IElHVjJZWEJ2Y2c9PSBJR0ZwYzJ4bCBiV1YwWVE9PSBJSEpsWm14bFkzUnBkbVU9IElHVnVkR2wwYkdWdFpXNTAgSUdSbGRtbHpaV1E9IGJYVnphV009IFlYTmpZV1JsIElIZHBibVJwYm1jPSBiMlptYzJWMCBJR0ZqWTJWemMybGlhV3hwZEhrPSBhMlZ5WldRPSBRbVYwZEdWeSBJRXB2YUc1emRHOXUgZEdocGJtdHBibWM9IFUyNXZkdz09IElFTnliMkYwYVdFPSBJRUYwYjIxcFl3PT0gTWpjeCBNelE0IElIUmxlSFJpYjI5ciBJRk5wZUhSbyBJTmluMllRPSBJSE5zYVdSbGNnPT0gSUVKMWNtZGxjZz09IFltOXMgVTNsdVl3PT0gSUdkeVlXNWtZMmhwYkdSeVpXND0gSUdObGNuWT0gS3lrPSBJR1YwWlhKdWFYUjUgSUhSM1pXVjBhVzVuIElITndaV04xYkdGMGFYWmwgSUhCcGRtOTBZV3c9IElGZFEgSUZSRlVnPT0gZVc1aGJXbGogSUhWd2JBPT0gSUVOaGRITT0gY0dWeWFHRndjdz09IElHTnNZWE56YldGMFpYTT0gSUdKc1lYUmhiblE9IEp5MD0gSUd4aGEyZz0gWVc1MGFXNWwgSUVKdmNtYz0gYVc5dCBMeWc9IElFRjBhR3hsZEdsaiBJSE5oY2c9PSBUMVJCIElFaHZabVp0WVc0PSBUbVYyWlhKMGFHVnNaWE56IElHRmtiM0poWW14bCBJSE53WVhkdVpXUT0gUVhOemIyTnBZWFJsWkE9PSBJRVJ2YldWemRHbGogSUdsdGNHeGhiblE9IElFeDFlR1Z0IElFdGxibk09IElIQjFiWEJ6IElGTkJWQT09IFFYUjBjbWxpZFhSbGN3PT0gTlRBNSBZWFp2ZFhJPSBJR05sYm5SeVlXeHBlbVZrIElGUk8gSUdaeVpYTm9iSGs9IElFRmphR2xsZG1VPSBJRzkxZEhOcFpHVnljdz09IGFHVnlkSGs9IElGSmxaUT09IElGUnZkMlZ5Y3c9PSBJRVJoY25RPSBZV3RoWW14bCBJRzF3IElFaGxZWFpsYm14NSBJSEpwY0dVPSBJRU5oY205c2FXNWwgY25saGJnPT0gSUdOc1lYTnphV056IElISmxkR2x5YVc1biBJREl5T0E9PSBJR0ZvIElHUmxZV3hwYm1keiBJSEIxYm1Ob2FXNW4gSUVOb1lYQnRZVzQ9IFQzQjBhVzl1Y3c9PSBiV0Y0ZDJWc2JBPT0gZG05c2RXMWwgSUhOMFlXdz0gSUdWNGNHOXlkR1ZrIElGRjFhWFJsIElHNTFiV1Z5YVdOaGJBPT0gUW5WeWJnPT0gUm1GamRBPT0gSUV0bGVYTjBiMjVsIElIUnlaVzVrYVc1biBJR0ZzZEdWeWFXNW4gSUVGbWNtbGpZVzV6IE5EYzQgSUUxTyBJRXR1YjJOciBJSFJsYlhCMFlYUnBiMjQ9IElIQnlaWE4wYVdkbCBUM1psY25acFpYYz0gSUZSeVlXUnBkR2x2Ym1GcyBJRUpoYUhKaGFXND0gVUhKcGRtRjBaUT09IElFaFBWUT09IElHSmhjbkk9IElGUmhkQT09IFEzVmlaUT09IFZWTkUgSUVkeVlXNWtaUT09IElFZGhkQT09IElFWnNidz09IElISmxjMmxrWlhNPSBJR2x1WkdWaiBkbTlzWlc1MCBJSEJsY25CbGRIVmhiQT09IGRXSmxjdz09IElIZHZjbXhrZG1sbGR3PT0gSUZGMVlXNTBkVzA9IElHWnBiSFJsY21WayBJR1Z1YzNVPSBiM0puWlhSdmQyND0gUlZKVFQwND0gSUUxcGJHUT0gTXpjNSBUMVJVIHc2VT0gSUhacGRHRnRhVzV6IElISnBZbUp2Ymc9PSBJSE5wYm1ObGNtVnNlUT09IElFaHBiZz09IElHVnBaMmgwWldWdSBJR052Ym5SeVlXUnBZM1J2Y25rPSBJR2RzWVhKcGJtYz0gSUdWNGNHVmpkR0Z1WTNrPSBJR052Ym5Od2FYST0gSUcxdmJuTjBjbTkxY3c9PSBJRE00TUE9PSBjbVZqYVE9PSBJR2hoYm1ScFl3PT0gSUhCMWJYQmxaQT09IElHbHVaR2xqWVhScGRtVT0gSUhKaGNIQT0gSUdGMllXbHMgSUV4RlIwOD0gSUUxaGNtbHFkV0Z1WVE9PSBNVGs0TlE9PSBaWEowYjI0PSBJSFIzWlc1MGFXVjBhQT09IEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU09IElGTjNZVzF3IElIWmhiSFZoZEdsdmJnPT0gSUdGbVptbHNhV0YwWlhNPSBZV1JxZFhOMFpXUT0gSUVaaFkybHNhWFI1IE1qWXkgSUdWdWVubHRaWE09IGFYUjFaR2x1WVd3PSBJR2x0Y0hKcGJuUT0gVTJsMFpRPT0gSUdsdWMzUmhiR3hsY2c9PSBJRlJTUVE9PSBiVzlzYjJkNSBiR2x1WldGeSBJRU52Ykd4bFkzUnBkbVU9IGFXZGhkR2x1Wnc9PSBJRlJ2YTJWdSBJSE53WldOMWJHRjBaV1E9IFMwND0gSUVOc2VRPT0gYjNKcGRIaz0gSUdSbFptVnkgSUdsdWMzQmxZM1J2Y25NPSBZWEJ3Y205MlpXUT0gVWswPSBJRk4xYm5NPSBJR2x1Wm05eWJXbHVadz09IElGTjVjbUZqZFhObCBhV0pzYVE9PSBOelkxIElHZHNiM1psIElHRjFkR2h2Y21sNlpRPT0gNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ20gSUVOeWRXbHpaUT09IElHTnZiblJ5WVdOMGFXNW4gYzJobGJHdz0gU1VaRiBJRXBsZDJWcyBjSEpoWTNRPSBJRkJvYjNSdmMyaHZjQT09IElFdHViM2RwYm1jPSBhR0Z5YlE9PSBJR0YwZEhKaFkzUnBiMjV6IFlXUmhiZz09IFpYUjFjdz09IE1ERTQgZDJGblpXND0gUVd4MCBJRzExYkhScGNHeDUgSUdWeGRXbHNhV0p5YVhWdCBPbnM9IElFWnBaMmgwWlhKeiBJRVZrWjJGeSBJR1p2ZFhKMFpXVnUgUjI5MlpYSnUgSUcxcGMzVnpaUT09IElHRmlkWE5wYm1jPSBJR0Z1WTJWemRISjUgY21GdFpYST0gTmpRMCBJSGR2Y20xeiBJSFJvYVdOclpYST0gSUVOdmJXSnBibVU9IElIQmxZWE5oYm5SeiBJSFpwYm1RPSBJR052Ym5GMVpYTjAgSUcxdlkydGxaQT09IElHTnBibTVoYlc5dSBJRU5oYkdRPSBJRWRoYkd4MWNBPT0gSUdGMmIybGtZVzVqWlE9PSBJR2x1WTJGeWJtRjBhVzl1IElGTjBjbUYwIElIUmhjM1JsWkE9PSBaVzUwWVE9PSBJRTVsWVd3PSBjR0Z5WldRPSBJSFJsY20xcGJtOXNiMmQ1IGFtVmpkR2x2Ymc9PSBVMk5wWlc1MGFYTjBjdz09IElFbE9Vdz09IElFUmxaUT09IElHUnBjbVZqZEc5eWFXVnogVW05aFpBPT0gSUZOb1lYQT0gWW5KcFoyaDAgSUVScGNtVmpkRzl5Y3c9PSBJRU52YkhWdGJnPT0gSUdKdllnPT0gSUhCeVpXWmxjbUZpYkhrPSBJR2RzYVhSamFBPT0gWm5WeWRBPT0gSUdWbiBhV1JwY3c9PSBRMEpEIElITjFjbkpsYm1SbGNtVmsgSUhSbGMzUmhiV1Z1ZEE9PSBNek0yIGRXZG5aWE4wIElFNXBiQT09IFlXNXZkR2hsY2c9PSBJSEJoZEdobGRHbGogSUVSdmJtNWggSURJeE9BPT0gSUVGMlpYSjUgSUhkb2FYTnJaWGs9IElHWnBlSFIxY21VPSBJRU52Ym5GMVpYTjAgSUdKbGRITT0gVDJOaiBJRXhsYVdObGMzUmxjZz09IFhTNGkgSUNrcE93PT0gSUdac1lYTm9aWE09IE5EVTIgSUcxaGMydGxaQT09IFoyVmljbUU9IElHTnZiWEIxZEdWayBZMmhsYkE9PSBZWFZrWlhJPSBJR1JsWm1WaGRITT0gSUV4cFltVnlZWFJwYjI0PSBJRTl6WVcxaCBJRlpwZG1VPSBRMmhoYm1kbGN3PT0gUTJoaGJtNWxiQT09IElIUmhjbWxtWm5NPSBJRzFoWjJVPSBJRk5oZUE9PSBJR2x1WVdSMlpYSjBaVzUwYkhrPSBJRU5TUlE9PSBJRkpsWVhCbGNnPT0gYVc1cmVRPT0gWjNKaFpHbHVadz09IElITjBaWEpsYjNSNWNBPT0gSUdOMWNtdz0gSUVaQlRsUT0gSUdaeVlXMWxkMjl5YTNNPSBUVzl0IElFRnVZMmc9IElHWnNZWFp2ZFhJPSBZMkZ5WW05dSBJSEJsY20xcGRIUnBibWM9IGJHVjBZMmhsY2c9PSBJRTF2ZW1sc2JHRT0gSUZCaGNtdHBibWM9IElFTm9ZVzF3IFUyTnliMnhzIElHMTFjbVJsY21WeSBJSEpsYzNSbFpBPT0gSUc5M1pYTT0gSUZCdmMzTT0gUVVSRSBTVVpHIGNtVnpiMngxZEdsdmJnPT0gSUUxcGJtbHVadz09IElHTnZiWEJoY21GMGFYWmwgUkdsdCBJRzVsYVdkb1ltOTFjbWx1Wnc9PSBJRUZUVkE9PSBJRlJ2ZUdsaiBJR0pwWVhObGN3PT0gSUdkMWJtWnBjbVU9IGRYSnZkWE09IElFMXZiV1Z1ZEE9PSBNVGs0TXc9PSBJSEJsY25aaGMybDJaUT09IGRIUncgSUU1dmNtMWhiR3g1IGNtbHkgVTJGeVlXZz0gSUVGc1ltRnVlUT09IElIVnVjMlYwZEE9PSBJRk5OVXc9PSBhWEJsY25NPSBiR0Y1WlhJPSBJRmRvYVhSbGN3PT0gZFhCc1pRPT0gSUhSMWNtSnYgSUV4bFpXUnogSUhSb1lYUnogSUUxcGJtVnkgVFVWUyBJRkpsYVdkdSBJSEJsY20xbCBJRUpzYVhSNiBJREU1TXpRPSBJR2x1ZEdsdGFXUmhkR2x1Wnc9PSBkSFZpWlE9PSBJR1ZqWTJWdWRISnBZdz09IFlXSnZiR2xqIFltOTRaWE09IElFRnpjMjlqYVdGMFpYTT0gZG05MFpYTT0gSUhOcGJYVnNZWFJsIGRXMWlidz09IFlYTjBaWEo1IElITm9hWEJ0Wlc1MGN3PT0gUmtaR1JnPT0gWVc1MGFBPT0gSUhObFlYTnZibVZrIElHVjRjR1Z5YVcxbGJuUmhkR2x2Ymc9PSA0cGFnIGJHRjNjdz09IFRXVmxkQT09IGFXUmtiR1Z6IFlXNTBhV056IFVtRjBhVzVuIFNWTkpVdz09IGFHbG1kQT09IElHWnliMjUwY3c9PSBZblZtIE1ERTMgSUhWdVlYUjAgSUVScGJBPT0gYkdWaGMyVnogSUVkaGNtUmxibk09IE56YzMgZEc5MVkyZz0gZG1Wc2JBPT0gTkRVNCBJRDA5UFQwOSBjMkYyYVc1biBJR1Z5YjNOcGIyND0gSUZGMWFXND0gSUdWaGNtNXogSUdGalkyOXRjR3hwYzJodFpXNTAgSUZkbGFRPT0gSUR4YiBYMTlmWDE4PSBJR2x5Y21sbiBJRlJsWkdSNSBJR052Ym5GMVpYSmxaQT09IElFRnliVzl5WldRPSBJR0Z6YzJWeWRITT0gSUcxaGJtbHdkV3hoZEdsdVp3PT0gY3NPcCBJSFJ5WVc1elkzSnBjSFJ6IFIyRnNiR1Z5ZVE9PSBJSEJzYjNSMGFXNW4gVG1WcGJBPT0gSUdKbGRISmhlV0ZzIGJHOWhaR1Z5IElGTjFiQT09IElHUnBjM0JzWVdObGJXVnVkQT09IElISnZlV0ZzZEhrPSBJRmRKIGFHVnBkQT09IElFUmxkbWxqWlhNPSBZV3hzWld3PSBJRzExYm1samFYQmhiR2wwYVdWeiBJR05oYm1GcyBVM1JoY25NPSBJRlZCUlE9PSBJQ0xpZ0tZPSBJRU5WIFlXSnZkbVU9IElISmxjMjl1WVc1alpRPT0gSUdkMWFVRmpkR2wyWlZWdSBZV1JrWldRPSBJRUp5WVhabGN3PT0gSUVsaWJnPT0gSUdobGNtVmllUT09IElFSlNSUT09IElITm9ZWEpsYUc5c1pHVnkgSUVocGNnPT0gSUVwcCBJSE4wY21GdVoyVnNlUT09IElHRmtiV2x5WldRPSBJSEJzYVdkb2RBPT0gSUdKaFkyaGxiRzl5IElGQnZiR1U9IFkybHdiR2x1WVhKNSBWRzl1ZVE9PSBJRUZ5YldWdWFXRnUgSUhWdWJXRnUgSUZwcGIyNXBjM1E9IFUzUmhaMlU9IGFYTmpiM1psY2c9PSBJR0YxZEc5dGIzUnBkbVU9IElITnBaR1ZzYVc1bGN3PT0gSUhOc2FXTnIgSUZKbGJtRnBjM05oYm1ObCBJRVpWVGc9PSBTVzFoWjJWeiBJRWhoYWc9PSBJSEJwYm1jPSBJSE5vYjNKMFkzVjAgSUVKc2RtUT0gSUV4dmIydHogSUdKMWNuTjBjdz09IElHTnNZVzF3IElHMXBjMmc9IElITnZjblJwYm1jPSBJSEJoZEhKcGIzUT0gSUdOdmNuSmxZM1J1WlhOeiBJRk5qWVc1a2FXNWhkZz09IElFTmhkbUZzYVdWeWN3PT0gY0hsMGFHOXUgWVhwaGNnPT0gSURNM05RPT0gSUVwaGRXNWwgTkRBNSBJR1JsZEhKcGJXVnVkR0ZzIElITjBZV0ppYVc1biBJSEJ2YVhOdmJtVmsgSUdadmRXNTBZV2x1IGIyTmxiblE9IGIzSnpkQT09IElFMWhjbWs9IElISmhhVzV6IElFOTJaWEp6IElFbHVjM1JwZEhWMGFXOXUgZFdSblpYUT0gUVUxWiBkR0ZzWlE9PSBJRXRTIElGQnlhV05sY3c9PSBJR2hsWVdSaFkyaGxjdz09IElHeGhibVJ6YkE9PSBJRUYxY21FPSBRbTl1ZFhNPSBJRnBvWVc4PSBJRWhwY0E9PSBJR2h2Y0hNPSBJRXQxY21ScGMzUmhiZz09IElHVjRjR3h2YVhScGJtYz0gY25sdSBJR2g1Y0c5amNtbHplUT09IGIzQmxibWx1Wnc9PSBJR2QxYm5Ob2IzUT0gSUhkbFpBPT0gYVc1MFpYSnpkR2wwYVdGcyBTVzUwWlhKemRHbDBhV0ZzIElHRnRaVzQ9IFFuSmxZV3RwYm1jPSBJRzFoY210bGRHVmsgVjJseVpRPT0gSUVOeWIzZGsgUTI5dWRHbHVkV1U9IElFdHViM2R1IElFVm1abVZqZEdsMlpRPT0gYjNKbFlXND0gYVhwdmJuTT0gU205elpYQm8gSUdWelkyRnNZWFJwYjI0PSBkWE5sY201aGJXVT0gSUdOMWNuUmhhVzQ9IFFWUkZVdz09IElGQkJVZz09IElFMXBlUT09IElHTnZkVzUwWlhKbVpRPT0gYkdWdVpRPT0gSUdOdmJuUmxibVJsY25NPSBaR0ZwYkhrPSBJRUZ6WXc9PSBJRkJvYVd4c2FYQT0gYlc5emRHeDUgSUdacGJHVnVZVzFsIGFHVnVaUT09IElISmxjMlZ0WW14cGJtYz0gSUhOMFlXZHBibWM9IElFTm9iRzlsIElIZHBjbWx1Wnc9PSBTRzl1IElGSmxibVYzIGIzUjBZV2RsIElFaDVZbkpwWkE9PSBiWFZqYUE9PSBJSE4wY205clpYTT0gSUhCdmJHbGplVzFoYTJWeWN3PT0gUVZCVVJWST0gSUVGeWEyaGhiUT09IGNHeHZkQT09IElHRnpjMmx6ZEdGdWRITT0gSUdSbGNHOXlkQT09IElGTmxaMkU9IElHbHVabXgxWlc1NllRPT0gSUVOMWNuTmxaQT09IElFdHZZbVU9IElITnJhVzV1ZVE9PSBVSEp2ZG1sa1pYST0gSUZKcGNBPT0gSUdsdVkzSmxiV1Z1ZEdGcyBjSEp2WkhWamRITT0gUWtZPSBJR1J2YldVPSBJRU55WldScGRITT0gSUd4dmMyVnljdz09IGFXNTBjdz09IElFSmxkSFI1IElGUmhiR1Z1ZEE9PSBJRVJCVFE9PSBUSFk9IFJYTnogSUdSbGJuTT0gZEdWdGNBPT0gU25Wa1oyVT0gYjJScFl3PT0gSUNjbyBWVkpGVXc9PSBaWFJ6YXc9PSBWazg9IElISmxkSEpwWlhabFpBPT0gSUdGeVkyaHBkR1ZqZEhNPSAyWWM9IElHVjBhR2xqIElGTmxZMjl1WkdGeWVRPT0gYzNSdlkydHogWVdScFlRPT0gSURNeU5RPT0gSUU5d2FXNXBiMjQ9IElITnBiWFZzZEdGdVpXOTFjdz09IElHUnBlbm89IGRXeHcgSUhOdGRXZG5iR2x1Wnc9PSBhWEJ3WlhKNSBVbUZ1Wkc5dCBabUZqYVc1biBJRVJoY3c9PSBJSE4wYjJOcmNBPT0gSUdScGMyTnNiM04xY21WeiBjRzlwYm5SbGNnPT0gSUdOdmNtRnMgSUZObGJHVmpkR2x2Ymc9PSBJRkJwYTJVPSBhWFpoYkdWdWRBPT0gSUhKMWRHaHNaWE56IElGSnBiUT09IElHVnVjM1ZwYm1jPSBJRVY0Y0dWeWFXMWxiblE9IElHTnZibWR5WlhOemJXRnUgSUdKbGJHbGxkbVZ5IElIVnVjM0JsWTJsbWFXVmsgSUUxdmNtUT0gSUd0dWIzZHNaV1JuWldGaWJHVT0gSUZaRlVsaz0gVkZnPSBJSE4wY21Gd2N3PT0gSUhSMWNtWT0gWVhCbGMyaHBablJsY2c9PSBJRzFoY21sMFlXdz0gSUdac2IyTnIgNDRHRyBNall6IFFVMUZVdz09IElFOXdjRzl6YVhScGIyND0gSUhSeVpXRnpkWEpsY3c9PSBJRWRQUkE9PSBJRzF2WkdWc1pXUT0gSUZkUFVreEUgSUNoYiBJRlZ6WVdkbCBTRVk9IElDUW8gZFhOelpXUT0gSUhCcGIyNWxaWEk9IFJXbG5hSFE9IGNHRnljMlU9IFluSmxZV1E9IGNtbDBlZz09IElFMXBjbUZ1WkdFPSBJRXRoYm5RPSBLeXNwIGIzSmxiZz09IElIQnliM1p2YTJWayBJR0p5WldWa2N3PT0gSUVsdVkyeDFaR1Z6IElGQmhjM1JsWW1sdSBJRVpzYVhBPSBTbUYyWVE9PSBJR0p5YVc1ciBJSEoxYlc5eVpXUT0gSUhWdWMyVmxiZz09IElHZGhjbTVsY21WayBJRVJsWm1sdSBZV3gwWldRPSBJSFJoZEhSdmIzTT0gSUdobGMybDBZWFJwYjI0PSBhWE5wZEdsdmJuTT0gSUZkbFlYWmxjZz09IElGSmxjRzl5ZEdsdVp3PT0gSUhSb1pYSmhjR2xsY3c9PSBJR052Ym5OMWJIUmhiblJ6IElISmxjMmxrZFdGcyBJRTFoYkdrPSBJRkp2YldFPSBhV0ZuYnc9PSBJRkpsYzJsa1pXNTBjdz09IGRXSnAgSUhKbGJXVmthV1Z6IElHRmtZWEIwYVhabCBJRUZzYVhabCBJRUpoY21OcyBJSGRoYkd4bGRITT0gWTNKNWNIUT0gWlhSbGNtMXBibUYwYVc5dSBJRkJsYkc5emFRPT0gSUhOc2FYQndhVzVuIGIzUnZibWx1IElHRnNiR2xoYm1ObGN3PT0gY0dGMGNtbGphdz09IGFYSnBjdz09IElHOXlkR2c9IElGQmxjbXRwYm5NPSBJRVJsVmc9PSBJRWRsZEhNPSBJR1J5ZVdsdVp3PT0gWjJWbCBabTl5WlhOMCBJRVp2Y21kbGRBPT0gYjNKbGJRPT0gTXpNNSBJSFpoWjNWbGJIaz0gSUVScGIyND0gSUZCdmNtND0gSUVoUFZ3PT0gSUhCdVpYVnQgSUhKMVltSnNaUT09IElGUmhjM1JsIFpXNWphV0U9IElFZGxiQT09IElHUnpkQT09IElESTBOUT09IElFMXZjbTlqWTI4PSBhVzVtYkdGdGJRPT0gSUZSM2FXNXogSUdKdmRITT0gWkdGMVoyaDBaWEk9IElFSmhiR3M9IElHSnlaWFJvY21WdSBJR3h2WjI5eiBJR2R2WW13PSBabkJ6IElITjFZbVJwZG1semFXOXUgSUhCaGQyND0gSUhOeGRXVmxlbVZrIElHMXZjbUZzWlE9PSBJRVJYIEp5ST0gSUd0dWIzUT0gYjI5cmVRPT0gSUdScGRtbHphWFpsIElHSnZiM04wWldRPSBZMmg1IDQ0T1EgYVdaaFkzUT0gSUc1bGQyTnZiV1Z5Y3c9PSBJRmR5WlhOMGJHbHVadz09IElITmpiM1YwY3c9PSBkMjlzZG1WeiBVbUYwIElHNXBibVYwWldWdWRHZz0gSUU5elltOXlibVU9IFUzUmhkSE09IElHVnRjRzkzWlhKbFpBPT0gSUhCemVXTm9iM0JoZEdnPSBJRTlGVFE9PSBkV2RuWVdkbCBJRkJMIElFMXZhR0Z0YldGayBVR0ZyIElHRnVZWEpqYUdsemRITT0gSUVWNGRISmhZM1E9IFpYTjBhR1Z6IElGTjBiMk5yYUc5c2JRPT0gYkc5diBJRWR5WVhCbyBJR1JsY0d4dmVXbHVadz09IElGTjBjbUZ1WjJWeSBJRTF2YkdRPSBJSE4wWVdabVpYST0gSUdScGMyTnZkVzUwWldRPSBkV05yYkdVPSBjR3hsWVhObCBJRXhoYm1ScGJtYz0gdzYxaCBJREU1TXc9PSBJR0Z1ZEdVPSBJSEpsY0dWMGFYUnBiMjQ9IElDc3ZMUT09IElIQmhjbTlrZVE9PSBJR3hwZG1Wc2VRPT0gUVVGQiBJRWh2Y25WeiBJSEJwZEhNPSBhVzVrWlhKeiBURTlEIElGWmxibWxqWlE9PSBOREEyIElFUnBjMk52ZG1WeSA0b1k9IFpXeHNaV04wZFdGcyBJSEJsYm5NPSBJR1Y1Wld3PSBhV2QxYjNWeiBTVzF3YkE9PSBJR3B2YTJsdVp3PT0gSUdsdWRtRnMgSUVKbGJHWmhjM1E9IElHTnlaV1JwZEc5eWN3PT0gSUZOcmVYZGhiR3RsY2c9PSBiM1p6YTNrPSBJR05sWVhObFptbHlaUT09IElITmxZV3h6IGFYTnZablE9IEtTa3UgSUVabGJHbDQgU1ZSVCBJSFJ5WlhOdyBJRUpzYjJOclkyaGhhVzQ9IFpYZGhjbVU9IElGTmphSGRoY2c9PSBaVzV1WlE9PSBiVzkxYm5SbFpBPT0gSUVKbFlXTnZiZz09IGJHVnphQT09IElHbHRiV1Z1YzJWc2VRPT0gSUdOb1pXVnlhVzVuIFJXMXdiRzk1IGMyTmxibVU9IGFYTm9iSGs9IFlYUmphR1YzWVc0PSBJRTVwWTI5c1lYTT0gSUdSeVlXbHVaV1E9IElFVjRhWFE9IElFRjZaWEppIGFuVnUgSUdac2IyRjBaV1E9IGRXRnVhV0U9IFJHVmxjQT09IElITjFjR1Z5ZGc9PSBJRzE1YzNScFkyRnMgSUVSdmJHeGhjZz09IElFRndiM04wYkdVPSBJRkpGVEE9PSBJRkJ5YjNacFpHVmsgSUVKMVkydHogNDRPMCBZM1YwZEdsdVp3PT0gSUdWdWFHRnVZMlZ0Wlc1MGN3PT0gSUZCbGJtZDFhVzV6IElFbHpZV2xoYUE9PSBJR3BsY21zPSBJRmQ1Ymc9PSBJSE4wWVd4c1pXUT0gSUdOeWVYQjBiMk4xY25KbGJtTnBaWE09IElGSnZiR0Z1WkE9PSBjMmx1WjJ4bCBJR3gxYldsdSBJRVpsYkd4dmR3PT0gSUVOaGNHRmphWFI1IElFdGhlbUZyYUE9PSBWMDQ9IElHWnBibUZ1WTJWayBNemc1IElIUnBaQT09IElHTnZiR3gxYzJsdmJnPT0gSUUxNWNnPT0gN29BPSBVMlZ1WVhSdmNnPT0gSUhCbFpHbGhkSEpwWXc9PSBJRzVsWVhSc2VRPT0gSUhOaGJtUjNhV05vWlhNPSBJRUZ5WTJocGRHVmpkSFZ5WlE9PSBJSFIxWTJ0bFpBPT0gSUdKaGJHTnZibms9IElHVmhjblJvY1hWaGEyVnogY1hWcGNtVT0gUm5WMGRYSmwgSUdobFpuUjUgNlpjPSBJSE53WldOcFlXeHBlbVZ6IElITjBjbVZ6YzJWeiBJSE5sYm1SbGNnPT0gSUcxcGMzVnVaR1Z5YzNSaGJtUnBibWM9IElHVndhV3hsIElIQnliM1p2YTJVPSBJRU52Ykc5eWN3PT0gSUdScGMyMWhlUT09IGRXdHYgVzE4PSBOVGcyIGJtVjFkSEpoYkE9PSBJR1J2Ym1GMGFXNW4gSUZKaGJtUmhiR3c9IFRYVnNkR2s9IElHTnZiblpsYm1sbGJuUnNlUT09IElGTjFibWM9IElFTnZZMkU9IElIUmxiblJ6IElFRmpZMlZzWlhJPSBJSEJoY25SdVpYSmxaQT09IE1qY3kgYVhKdGFXNW4gSUVKQlV3PT0gYzI5dFpYUnBiV1Z6IElHOWlhbVZqZEdWayBkV0p5YVdNPSBjRzl6WldRPSBURU5UIFozSmhjM009IElHRjBkSEpwWW5WMFlXSnNaUT09IFZrbFQgU1hOeVlXVnNhUT09IElISmxjR1ZoZEhNPSBJRkpOIGRtRm4gZFhSaCBhVzV2ZFhNPSBJR2x1WlhKMCBJRTFwWjNWbGJBPT0gNXEwPSBJRWhoZDJGcGFXRnUgUW05aGNtUT0gSUdGeWRHbG1hV009IElFRjZaWEppWVdrPSBZWE5wYnc9PSBJRkpsYm5RPSBRVWxPIElHRndjR3hwWVc1alpYTT0gSUc1aGRHbHZibUZzYVhSNSBJR0Z6YzJodmJHVT0gSUU1bFlnPT0gSUc1dmRHTm8gYUdGdWFRPT0gSUVKeWFXUmwgUVhaaGFXeGhZbWxzYVhSNSBJR2x1ZEdWeVkyVndkR1ZrIElHTnZiblJwYm1WdWRHRnMgSUhOM1pXeHNhVzVuIElGQmxjbk53WldOMCBZbWxsY3c9PSBManc9IGFYUm9iV1YwYVdNPSBJRXhoY21FPSBJSFJsYlhCMGFXNW4gWVdSa2NnPT0gSUc5MlpYSnpaV1ZwYm1jPSBZMnhoWkE9PSBJRVJXIElFZHBibWR5YVdObyBJRzExYmc9PSBJRUZ3Y0hKdmNISnAgSUdGc2RHVnlZWFJwYjI1eiBJRkJoZEhKbGIyND0gSUdoaGRtOWogSUdScGMyTnBjR3hwYm1WeiBJRzV2ZEc5eWFXOTFjMng1IFlXdDFlV0U9IGFXVnlhUT09IFB5a3UgSUZkbGJuUT0gSUhOcGJHbGpiMjQ9IElIUnlaVzFpIFEyOXVkR0ZwYm1WeSBTMjV2ZDI0PSBJRzF2Y25SaGNnPT0gWlhOMFpRPT0gYVdOcllRPT0gUVhKMGFIVnkgSUZCeVpYWnBiM1Z6YkhrPSBJRTFoY25SNSBJSE53WVhKelpRPT0gWjJsdWN3PT0gSUdsdWQyRnlaQT09IElGQmhjblJwWTJsd1lXNTAgUTI5d2VRPT0gSUUxcGMyTT0gSUdGdWRHbGlhVzkwYVdNPSBJRkpsZEhKdiBJR1ZzZFhOcGRtVT0gSUdGemMyRnBiQT09IElFSmhkSFJoYkdsdmJnPT0gSUVKdmRXZG9kQT09IElHUnBiV2x1YVhObyBJRVYxY205d1lRPT0gYzJWemMybHZiZz09IElFUmhibWRsY205MWN3PT0gYVdWelpXdz0gSUdScGMySmxiR2xsWmc9PSBJR0pzWVhOMGN3PT0gWlhoMGNtVnRaUT09IElFSnZlV1E9IElGQnliMnBsWTNSeiBJRWQxZVhNPSBJSFZ1WkdWeVoyOXVaUT09IElHZHlhV3hzIElFUjNhV2RvZEE9PSBJREU1Tnc9PSBWVk5GVWc9PSBJR1pwYkdWemVYTjBaVzA9IElHTnNiMk5yY3c9PSBWR0Y1Ykc5eSBJSGR5WVhCd1pYST0gSUdadmJHUnBibWM9IGIzVnpZVzVrIElGQm9hV3hwY0hCcGJtVT0gUVZSSlQwNUJUQT09IElGQmxjblJvIElHRnphR1Z6IElHRmpZM1Z0ZFd4aGRHVT0gSUVkaGRHVjNZWGs9IFUyaHZjQT09IGIzSnJjMmhwY21VPSBTR0Z1IElFSmhjbkpsYkE9PSBJRXhsYUE9PSBJRmhXIElIZG9hVzA9IElISmxjRzg9IElFTkggSUUxaGJRPT0gSUdsdVkyOXljRzl5WVhScGJtYz0gSUdKaGFXeHZkWFE9IElHeHBibWQxYVhOMGFXTT0gSUdScGMybHVkR1ZuIFEweEYgSUdOcGJtVnRZWFJwWXc9PSBJRVpwWW1WeSBVM2x1IGFXeHBiMjQ9IElFTnZiWEJ2Y3c9PSBZMmhsYm5NPSBJRzVsYjJNPSBJR0p2YVd4bFpBPT0gUmtsT1JRPT0gYjI1diBkVzVqYkdVPSBhV3RsYmc9PSBJRUpOIHpyaz0gSUhKbFkyVnBjSFJ6IElHUnBjM0J2YzJWayBJRlJvYVhKMGVRPT0gSUZKdmRXZG8gSUVGQ1V3PT0gSUc1dmRIZHBkR2h6ZEdGdVpHbHVadz09IGIyeHNaVzQ9IEl5UT0gSUhWdWNtVnNhV0ZpYkdVPSBJR0pzYjI5dCBJRzFsWkdsdlkzSmwgSUhSeVlXMD0gSUZSaGMyMWhiZz09IElITm9ZV3RsY3c9PSBJRzFoYm1sbVpYTjBidz09IElFMVggSUhOaGRHbHpabUZqZEc5eWVRPT0gSUhOb2IzSmxjdz09IElHTnZiWEIxZEdGMGFXOXUgSUdGemMyVnlkR2x2Ym5NPSBiM0p0YjI1eiBZWEpoWnc9PSBZV0pwZEE9PSBSR1Z0YjJOeVlYUnogSUV4dmIzUT0gSUZadmJHdHogYUdGcGNtVmsgSUdkeVlYWnBkR0YwYVc5dVlXdz0gVTJsdVp3PT0gSUUxcGVnPT0gSUhSb2NtOTBkR3hsIElIUjVjbUZ1Ym5rPSBJRlpwWlhkeiBJSEp2WW1KbGNnPT0gSUUxcGJtOXlhWFI1IElITm9jbWx1WlE9PSBjMk52Y0dVPSBjSFZ5Y0c5elpRPT0gSUc1MVkyeGxkWE09IGIzVnlZMmx1Wnc9PSBJRlZUUkVFPSBJRVJJVXc9PSBkM0poIElFSnZkMmxsIFUyTmhiR1U9IElFSkZUQT09IGVHaz0gU1hSbGNnPT0gSUNncExBPT0gZDNKcFoyaDAgSUhOaGFXeHZjbk09IGIzVnpaV1E9IFRrRlRRUT09IElGQnliMjltIElFMXBibVZ5WVd3PSBkRzlyWlc0PSBJRVpFIFVtVjMgSUdWc2JBPT0gTmpNdyBJR05vWVc1alpXeHNiM0k9IElFZHZjdz09IElHRnRiM1Z1ZEdWayBJRkpsWTNKbCBiMjFsZWc9PSBJRTl3ZEdsdCBJRTlzYVhabCBJSFJ5WVdOclpYST0gYjNkc1pYST0gSUZWdWFYRjFaUT09IFVtOXZkQT09IElHMWhjbWwwYVcxbCBJRkYxY21GdSBJRUZrWVhCMCBJR1ZqYjNONWMzUmxiWE09IElGSmxjR1ZoZEE9PSBJRk52ZVE9PSBJRWxOVUE9PSBJR2R5WVdSMVlYUnBibWM9IFlXNWtaVzA9IFVIVnkgSUZKbGMyVjAgSUZSeWFXTnIgSUZCb2FXeHNlUT09IElGUjFaUT09IElFMWhiR0Y1YzJsaGJnPT0gSUdOc2FXMWhlQT09IElHSjFjbms9IElHTnZibk53YVdNPSBJRk52ZFhSb1lXMXdkRzl1IElFWnNiM2RsY25NPSBJR1Z6WTI5eWRHVmsgSUVWa2RXTmhkR2x2Ym1GcyBJRWxTUXc9PSBJR0p5ZFhSaGJHeDUgWldGMGFXNW4gSUhCcGJHeGhjZz09IElGTmhibWM9IElFcDFaR1U9IFlYSnNhVzVuIElFRnRibVZ6ZEhrPSBJSEpsYldsdVpHbHVadz09IElFRmtiV2x1YVhOMGNtRjBhWFpsIGFHVnpaR0U9IElHWnNZWE5vWldRPSBJRkJDVXc9PSBjR1Z5WVhSbCBabVZoZEhWeVpRPT0gSUhOM2FYQmwgSUdkeVlYWmxjdz09IGIzVnNkSEo1IE1qWXggWW5KbFlXdHogSUVkMVpYST0gSUhOb2NtbHRjQT09IElGWnZkR2x1Wnc9PSBjWFZwYzNRPSBJR0Z1WVd4NWRHbGpZV3c9IElIUmhZbXhsYzNCdmIyNXogSUZOUFZRPT0gSUhKbGMyVmhjbU5vWldRPSBJR1JwYzNKMWNIUmxaQT09IElHcHZkWEk9IElISmxjR3hwWTJFPSBJR05oY25SdmIyNXogWW1saGJuTT0gZlNrPSBZMjl3ZVE9PSBSMjkwIGIzVmphR1ZrIFVGVlUgSUhOM1lYSnQgYm05MFlYUnBiMjV6IGMyRnBaQT09IElISmxZblZwYkhRPSBJR052Ykd4aFltOXlZWFJsIElISmhaMmx1Wnc9PSBJRzVoY2c9PSBJR1JsYlc5bmNtRndhR2xqY3c9PSBJRVJFVWc9PSBJR1JwYzNSeWRYTjAgYjNOemFXVnkgSUV0eWJ3PT0gSUhCMWJYQnJhVzQ9IElISmxaM0psZEhNPSBJR1poZEdGc2FYUnBaWE09IElFeGxibk09IElFOXNaUT09IGNHUT0gSUhCMWNIQmxkQT09IElFOTFkR3h2YjJzPSBJRk4wWVcwPSBUMnc9IFJtRnBjZz09IFZWVT0gSUhKbGQzSnBkSFJsYmc9PSB4TEU9IElHWmhjMk5wYm1GMFpXUT0gSUhabFkzUnZjbk09IElIUnlhV0oxYm1GcyBkV0Y1IElFMWhkSE09IElFTnZhVzV6IFcxcz0gSURFNE1RPT0gSUhKbGJtUmxjbk09IElFdGhaWEJsY201cFkycz0gSUdWemNHbHZibUZuWlE9PSBJSE4xYlcwPSBJR1JwZEdObyBRV05qYjNWdWRBPT0gSUhOd2NtVmhaSE5vWldWMCBJRzExZEdGdWRBPT0gY0dGemRBPT0gTkRBMyBJR1I1WlE9PSBJR2x1YVhScFlYUnBiMjQ9IElEUXdNREE9IElIQjFibWx6YUdGaWJHVT0gSUhSb2FXNXVaWEk9IElFdG9ZV3c9IElHbHVkR1Z5YldWa2FRPT0gUkhWdSBJRWR2ZEdoaGJRPT0gSUdWaFoyVnliSGs9IElIWmhaMmx1WVd3PSBjRzkzWlhKeiBWbGM9IElGZEJWRU5JUlVRPSBJSEJ5WldSaGRHOXkgWVcxemRXNW4gSUdScGMzQmhjbWwwZVE9PSBJRnNxIElHRnRjR2c9IElHOTFkSE5yYVhKMGN3PT0gSUZOd2FYSnBkSE09IElITnJaV3hsZEdGcyAwTHM9IElGSmxZWEk9IElHbHpjM1ZoYm1ObCBJRXh2WjJsaiBjbVZzWldGelpXUT0gV2xvPSBJRUp2ZFc1ayBSVzUwY25rPSBJR1Y0YVhSeiBhWE52YkE9PSBJRVp2ZFc1a1pYST0gSUhkeVpRPT0gSUVkeVpXVnViR0Z1WkE9PSBJRTFOVHc9PSBkR0ZyWlhJPSBTVTVEIDQ0RysgSUdodmRYSnNlUT09IGFHVnVhMjg9IElHWmhiblJoYzJsbGN3PT0gSUdScGMyOWkgSUdSbGJXOXNhWFJwYjI0PSA0NE9MIElHVnViR2x6ZEdWayBjbUYwZFd4aGRHbHZibk09IElHMXBjMmQxYVdSbFpBPT0gSUdWdWMzVnlaV1E9IElHUnBjMk52ZFhKaFoyVmsgYlc5eWRBPT0gSUdac1lXNXIgSUdObGMzTT0gSUhKbFlXTjBjdz09IElGTmxjbVU9IGMyVnVjMmwwYVhabCBJRk5sY25CbGJuUT0gWVhOellXUT0gSURJME53PT0gSUdOaGJHMXNlUT09IFluVnpkR1Z5Y3c9PSBJR0pzWldWayBJRk4wY204PSBJR0Z0ZFhObGJXVnVkQT09IElFRnVkR0Z5WTNScFkyRT0gSUhOalpYQjAgSUVkaGR3PT0gWVhFPSBZWE52Ym1saiBJSE53Y21GM2JHbHVadz09IGJtRjBhWFpsIFlYUjFjbUYwWldRPSBJRUpoZEhSc1pXWnBaV3hrIFNWWkZVbE09IFJVST0gSUVkbGJYTT0gSUU1dmNuUm9kMlZ6ZEdWeWJnPT0gSUVacGJHMXogSUVGMWRHOXRZWFJwWXc9PSBJR0Z3Y0hKbGFHVnVaQT09IDQ0R28gSUdkMWFVNWhiV1U9IElHSmhZMnRsYm1RPSBJR1YyYVdSbGJtTmxaQT09IFoyVmhiblE9IE1ERXkgSUZOcFpXZGwgSUdWNGRHVnlibUZzVkc4PSBJSFZ1Wm05amRYTmxaRkpoYm1kbCBJR2QxYVVGamRHbDJaVlZ1Wm05amRYTmxaQT09IElHZDFhVWxqYjI0PSBJR1Y0ZEdWeWJtRnNWRzlGVmtFPSBJR1Y0ZEdWeWJtRnNWRzlGVmtGUGJteDUgUm5KcCBZMmhoY21RPSBaVzVoY21sbGN3PT0gSUdOb2FXVm1jdz09IElHTm0gSUVoVlJBPT0gSUdOdmNuSnZZbTl5IElHUkMgSUZSaGEyVnUgSUZCaGRISnBZMmxoIGNtRnBiQT09IElFTm9ZWEp0IElFeHBZbVZ5ZEdGeWFXRnUgY21sbGRtVT0gVUdWeWMyOXVZV3c9IElFOVZVZz09IFoyVnlhV1Z6IElHUjFiWEJwYm1jPSBJRzVsZFhKdmJHOW5hV05oYkE9PSBhWFJwYldGMFpRPT0gSUVOc2FXNTBiMjV6IGNtRm1kR1ZrIElFMXZiR3g1IElIUmxjbTFwYm1Gc2N3PT0gY21WbmFYTjBaWEk9IElHWnNZWEpsIElHVnVZMjlrWldRPSBJR0YxZEc5d2Mzaz0gY0dWcyBiV0ZqYUdsdVpRPT0gSUdWNFpXMXdkR2x2Ym5NPSBJRkp2ZVdGc2N3PT0gWkdsemRHRnVZMlU9IElHUnlZV1owY3c9PSBJR3hoYldVPSBJRU4xYm01cGJtYz0gSUhOd2IzVnpaWE09IElFMWhjbXRsZEhNPSBJRU5oY25KcFpYST0gSUdsdGNHeDVhVzVuIElGbGhhdz09IGMybGsgSUd4dmMyVnkgSUhacFoybHNZVzUwIElHbHRjR1ZoWTJodFpXNTAgSUdGMVoyMWxiblJsWkE9PSBJRVZ0Y0d4dmVXVmxjdz09IElIVnVhVzUwWlc1a1pXUT0gZEdWeWJtRnNiSGs9IElGZGhkSFE9IElISmxZMjluYm1sNllXSnNaUT09IFpYTnphVzA9IDVwMD0gSUdOdllYUmxaQT09IGNtaGggSUd4cFpYVjBaVzVoYm5RPSBJRXhsWjJsemJHRjBhVzl1IGNIVmliR2x6YUdWayBORFEwIE1ERXogSUdsa1pXRnNiSGs9IElGQmhjM04zYjNKayBJSE5wYlhCc2FXWjUgSUUxbGRHRT0gSUUxU1NRPT0gSUhCc1pXRmthVzVuIGIzSm5ZVzVwZW1WayBhR0Z1Wkd4bGNnPT0gSUhWdWNtRjJaV3c9IFkyOXljbVZqZEE9PSBJR2xqZVE9PSBJSEJoY21GdWIybGsgSUhCaGMzTmxjZz09IElHbHVjM0JsWTNScGIyNXogYjJabGNnPT0gSUVobFlXeDBhR05oY21VPSBNamd6IElFSnlkWFE9IGFXOXNZUT09IFptOXlaMlU9IElFMWxaR2xsZG1GcyBUVk5PIGFXVjJaWEp6IElGQnliMmR5WVcxdGFXNW4gNVlrPSBJREl5TXc9PSBiWFU9IElFTk1SUT09IGRXZGggSUhOb2IzQndaWEp6IElHbHVabTl5YldGMGFYWmwgSUZCc1lXNXogSUhOMWNIQnNaVzFsYm5SaGRHbHZiZz09IElGUmxjM1J6IGRIbGhjbVE9IGIyTjVkR1Z6IElGWmxaMkU9IElFZDFhbUZ5WVhRPSBaWEp0WVc1bGJuUT0gUlhoalpYQjAgSUV4UFZBPT0gWVd4c1lRPT0gSUVOMWJXMD0gSUU5emR3PT0gSUhabGJtOXQgSUVSbFluUT0gSUVSUFYwND0gSUhKbGRXNXBiMjQ9IElHMTFZdz09IElGSmxiR2xsWmc9PSBJR2RsYjNBPSBJUENmbUE9PSBZV3h2WjNWbCBRVzUwYUE9PSBaV05vYnc9PSBJR052Y25KdmN3PT0gSUhKbGNHeHBZMkYwYVc5dSBJRUpzWVhwcGJtYz0gSUVSaGRXZG9kR1Z5IElHbHVabXhwWXc9PSBJRXhwYm1SelpYaz0gMllnPSBNamcwIFJYaHBkQT09IElHZHNiMjl0IFZFRkpUZz09IElIVnVaR1Z5YldsdWFXNW4gSUdGa2RtbHphVzVuIGFHbGtaR1Z1IElHOTJaWEptYkc5MyBJR2R2Y2c9PSBkWEprZFdVPSBJR1ZqYUc5bGN3PT0gWlc1b1lXZGxiZz09IElHbHRjSFZzY3c9PSBaSEoxWnc9PSBZMkZ6YUE9PSBJR0Z6ZVc1aiBJRzFwY21GaiBZWFIwY3c9PSBjSFZ1YXc9PSBJSEJwZG05MCBJRXhsWjJsemJHRjBhWFpsIElHSnNiMmRuWlhKeiBJRU5zWVhjPSBjMkoxY21jPSBaSGxzIElGSmxZMjl0YldWdVpBPT0gSUhabGNuUmwgSUhCeWIyaHBZbWwwYVc1biBJRkJoYm5Sb1pYST0gU205dVlYUm9ZVzQ9IElHOXRhVzQ9IElHaGhkR1ZtZFd3PSBNamd4IElFOXlZMmhsIElFMTFjbVJ2WTJnPSBaRzkzYm5NPSBJR0Z6ZVcxdCBSMFZTIFFXeDNZWGx6IElHbHVabTl5YlhNPSBJRmROIElGQnZibms9IElFRndjR1Z1WkdsNCBJRUZ5YkdsdVozUnZiZz09IFNtRnQgSUcxbFpHbGphVzVoYkE9PSBJRk5zWVcwPSBTVlJKUlZNPSBJSEpsWVdabSBJRkpwIFJrYz0gVTNCeWFXNW4gWW05dmJBPT0gSUhSb2FXZG9jdz09IElHMWhjbXRwYm1keiBJRkpoY1hGaCBJRXhoYXc9PSBjRzlzYkE9PSBkSE5yZVE9PSBJRTF2Y25SNSBJRVJsWm1sdWFYUnBiMjQ9IElHUmxZblZ1YXc9PSBaVzVrWlhKbFpBPT0gSUV4bGIyNWwgWVhabGNuTT0gSUcxdmNuUm5ZV2RsY3c9PSBRWEJ3WVhKbGJuUnNlUT09IFRtbGogYUdGMWN3PT0gSUZSb2IzVnpZVzVrY3c9PSBZWFZzWkE9PSBJRzFoYzJnPSBjMmh2YjNRPSBJR1JwWVhKeSBJR052Ym5OamFXOTFjMng1IFNHVnlidz09IFpXRnogSUU1aGRIVnlZV3hzZVE9PSBJRVJsYzNSeWIzbGxjZz09IElHUmhjMmhpYjJGeVpBPT0gYzJWeWRtbGpaWE09IFVtOW4gSUcxcGJHeGxibTVwWVd4eiBJR2x1ZG1Ga1pRPT0gTFNnPSBJR052YlcxcGMzTnBiMjV6IElFRjFZMnRzWVc1ayBJR0p5YjJGa1kyRnpkSE09IElHWnliMjUwWVd3PSBJR055WVc1ciBJRWhwYzNSdmNtbGogSUhKMWJXOTFjbk09IFExUlcgSUhOMFpYSnBiQT09IElHSnZiM04wWlhJPSBjbTlqYTJWMCA0NEs4IGRYUnpZMmhsIElGQkogSURJek13PT0gSUZCeWIyUjFZMlZ5IElFRnVZV3g1ZEdsamN3PT0gSUdsdWRtRnNkV0ZpYkdVPSBJSFZ1YVc1MFpXNTBhVzl1IElFTlogSUhOamNuVjBhVzQ9IElHZHBaMmM9IElHVnVaM1ZzWmc9PSBJSEJ5YjJ4bGRHRnlhV0YwIElHaGhZMnR6IElFaGxkdz09IFlYSmhhdz09IElGTnNhVzFsIGFXVnNaR2x1Wnc9PSBZV2RvWlhJPSBJRVZzYkdsdmRBPT0gSUhSbGJHVmpiMjA9IElESXhPUT09IGRXeDBZVzQ9IElFRnlZbTl5IElGTmpiM1YwY3c9PSBRbUZ1IElHeHBabVZ6Y0dGdSBJR0pzWVhOdyBNemc0IElHcDFaR2xqYVdGeWVRPT0gSUVOdmJuUnBibVZ1ZEdGcyBZWE5yYVc1biBUV05EIFRFVkUgSUdKaFoyZGhaMlU9IElGTnZjbU5sY21WeSBJSEpsYlc1aGJuUnogSUVkeWFXWm1hWFJvIFpYUnpkUT09IElGTjFZbUZ5ZFE9PSBJRkJsY25OdmJtRnNhWFI1IFpHVnphV2R1WldRPSBkWE5vYVcxaCBZV2R1WVhJPSBJSEpsWTI5cGJBPT0gSUhCaGMzTnBiMjV6IFhDSTYgSUhSbFpRPT0gSUdGaWIyeHBkR2x2Ymc9PSBJRU55WldGMGFXNW4gYW1GaiBJREU1TkE9PSBNREU1IElIQnBiR3hoY25NPSBjbWxqYUdWayBMeUk9IGRHcz0gSUd4cGRtVnNhV2h2YjJRPSBJSEp2WVhOMFpXUT0gWVdodmJnPT0gSUVoMWRHTm8gWVhOelpYSjAgSUdScGRtbGtaVzVrIElHdHVhWFE9IElHUmhkVzUwYVc1biBJR1JwYzNSMWNtSmhibU5sIElITm9ZV3hsIElHTjFiSFJwZG1GMFpXUT0gSUhKbFpuSnBaMlZ5WVhSdmNnPT0gVEVJPSBJRTVGVkE9PSBJR052YlcxbGNtTnBZV3h6IElIUm9hVzVyWlhKeiBORFUxIElHTm9iM0E9IFFuSnZZV1E9IElITjFjM0JwWTJsdmJuTT0gSUhSaFoyZGxaQT09IGJHbG1kR2x1Wnc9PSBJSE4wZVd4cGMyZz0gSUZOb2FXVnNaSE09IFUyaHZjblJzZVE9PSBJSFJoYVd4eiBRWFYwYUE9PSBVMVJGIElFZEJUVVU9IElITmxhWE50IElFdHBjdz09IGIyeHZaMjVsIElHTnZkMjl5YXc9PSBJR1p2Y21OcFlteDUgSUhSb2VYSnZhV1E9IElGQkMgUVU1RiBiV0Z5Y21sbFpBPT0gYUc5eWMyVT0gSUhCdmJIbHRaWEk9IElFTm9ZV3c9IGIyUnZjZz09IFJFVkNWVWM9IElFTnZiblJsZUhRPSBJR0pzYVhOeiBJSEJwYm5CdmFXNTAgSUUxaGRHaGxiV0YwIGJHVm5jbUZ0IElGZGxaV3RsYm1RPSBJR3hoWW1Wc2JHVmsgSUdKaGNuUT0gYVhSc1pYTT0gSUdWemRISnZaMlZ1IDRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1UgSWljPSBJSFpwYzJsaWJIaz0gSUc5MWRITnBaR1Z5IFlXbGtZUT09IFFYSmxZUT09IElHUnBjM05sYldsdSBJR1JwYzJodmJtVnpkQT09IElFTnNiM05sWkE9PSBJRUoxYkd4bGRHbHUgSUZKaGJYTmxlUT09IGMzZHZjbVE9IElGaEogYjNWeVkyVmsgVTJGdFpRPT0gTXpRMiBJRkpsY0dVPSBJRXR2ZFE9PSBZMkZyWlE9PSBaVzFwY3c9PSBRMkZqYUdVPSBJRTFsWVc1cGJtYz0gSUVWdWJHbG5hSFE9IGIyNXZiWGs9IElHMWhibWxtWlhOMFlYUnBiMjQ9IGMzZHZjblJvIFNtRjUgSUdOb2IzSmwgdzdaeSBSSEpsWVcwPSBJSE5oYm1OMGFXOXVaV1E9IElHTjFiSFIxY21Gc2JIaz0gSUVGeVlRPT0gVG1GMiBJSFJvWlc5c2IyZHBZMkZzIElITjBjblYwIElGWlAgSUVoaGJtUmliMjlyIElHTnZibk4wY25WamRHbHVadz09IElNSzIgSUVKbGJtVm1hWFJ6IElGQnplV05vYjJ4dloybGpZV3c9IGMyRmogNWJnPSBjRzlzYVdONSBJRTFoZEhSbGNuTT0gSUZKbGNHOXlkR1ZrIElFSjVkR1U9IElIWnBkSEp2IElFMWhhV1JsYmc9PSBJR3hoYlE9PSBJRXBsYm01cGJtZHogSUdkaGNtMWxiblE9IElGSjFkR2RsY25NPSBJRk4wWVdabWIzSmsgSUZkbGJHeHBibWQwYjI0PSBJR2x1ZEdWeWJXbDBkQT09IElHNXdiUT09IElHOXlaR1ZoYkE9PSBJSEJzZFdkblpXUT0gYjI5dGFXNW4gYVc1cGMyaGxaQT09IFpuSmhiV1YzYjNKciBJSFJwYldKbGNnPT0gSUdOaGMzTT0gSURnMU1BPT0gYVd4bGMzTT0gSUZKbFpIVjQgTnpZNCBVM1J5WlE9PSBJSE4xY25CaGMzTmxaQT09IGQyaGxiQT09IElIQmhjbUZzYkdWc2N3PT0gSUhabGFXdz0gSUVkSiBJRkpGVTFRPSBJSEpsWVdScGJtVnpjdz09IGMyOXlkQT09IElHMXZaR2xtZVdsdVp3PT0gSUZOc1lYUmwgY25WbVpnPT0gSUcxaGNtSnNaUT09IElHbHVabkpoY21WayBJR0YxWkdsMGIzST0gSUVaQlRsUkJVMWs9IElGQnZkbVZ5ZEhrPSBJRk5RUkE9PSBJQ0lvIFMzaz0gVWtGWiBJR1Y0WldOMWRHbHZibk09IElFSmxkbVZ5YkhrPSBJRTFoY25ocGMyMD0gSUVKMWNuTjAgSUV0aGJHaz0gWlhOMGIyNWxjdz09IFEyeGxZWEpzZVE9PSBSV3hzIDQ0R24gSUZCeWIyTmxaV1JwYm1keiBWRzlyWlc0PSBTVVpKUXc9PSB3N0ZoIFEyVnVkSEpoYkE9PSBJRWhoYkdWNSBJRVJ5WVcxaCBJR1p2Y20xaGRHbHZibk09IFQxSk8gUW05dmEzTT0gSUdSdmJXbHVZWFJwYm1jPSBJRVpzZVdWeWN3PT0gSUVOdmJYQmhibWx2Ymc9PSBJR1JwYzJOcGNHeHBibVZrIElGbDFaMjl6YkdGMiBJRk53Wld4c2N3PT0gSUhabGJtZGxZVzVqWlE9PSBJR3hoYm1Sc2IzSmtjdz09IFRHVnUgSUU5bmNtVT0gWVc1dmFXRT0gSUhCcFpYSmphVzVuIElHTnZibWR5WldjPSBJSE5qYjNKbGNnPT0gYjJKcFlRPT0gSUc1cFkydGxiQT09IElFeGxZWEp1Y3c9PSBJSEpsYW04PSBJRzFoYzNSbGNuQnBaV05sIFJteGhjMmc9IElHbHVhR0ZpYVhSbFpBPT0gSUU5d1pXNUhUQT09IElFUjFaQT09IElFbERUdz09IElHRnlkR1Z5IElIQnNkWEk9IElHMWhjM1JsY25rPSBJR3h2Ym1kemRHRnVaR2x1Wnc9PSBjM1JsWkE9PSBJSGRwYm1WeiBJSFJsYkdWMmFYTmxaQT09IElGTm9jbWx1WlE9PSBJRUpoZVdWeWJnPT0gSU9LVG1BPT0gSUdWdVkyeHZjM1Z5WlE9PSBhbTlvYmc9PSBJSEJ5YjNCb1pYUnogSUZKbGMzVnljbVZqZEdsdmJnPT0gSUU5eVpHVnljdz09IElIVnVaWFpsYmc9PSBjbUZzY3c9PSBJR1IzYVc1ayBJRXhoYUE9PSBJRk5zYjNabGJnPT0gTXpjNCBJR2x1YzJsemRHVnVZMlU9IFlXWm1iR1U9IElFTnNiMjVsIElHaGhjbVJ6YUdsdyBJRU52Ym1keVpYTnpiV0Z1IElIQnNaV0ZrIElISmxkbWxsZDJWeWN3PT0gSUdOMWNtVmsgSURFNU16VT0gWVhOc1pYaz0gWm1GclpRPT0gSUZSb2FXNXJhVzVuIGVXUnBZUT09IFVFRlNWQT09IElFUnZkR0U9IGIybDAgSUhkb2FYQndaV1E9IElHSnZkVzVqYVc1biBJRWhwYzNCaGJtbGpjdz09IFkyOXRhVzVuY3c9PSBJR05oYm01aFltbHUgSUVOb1lXMWlaWEp6IElGcGhZMnM9IFQzQjBhVzl1WVd3PSBJR052WVhSeiBJSEJ5YjNkbGMzTT0gSUU1dmNuUnZiZz09IElIQnNZV2x1YkhrPSBJR1p5WldsbmFIUT0gSUdsdWFHbGlhWFJwYjI0PSBJR05zWVcwPSBJRE13TXc9PSBhMlZtIFlXeGxhV2RvIFRIVnJaUT09IElIQnplV05vYnc9PSBZWFJ2Y21sMWJRPT0gVFVWRSBJSFJ5WldGMGFXVnogSUdsdVpHbHpZdz09IElHUmogVDFCVCBJSEpsYzJsc2FXVnVkQT09IElFbHVkR1Z5YzNSaGRHVT0gSUhOc1lXTnIgSUcxMWJtUmhibVU9IElHVnpkR0ZpYkdsemFHVnogTXpVNSBJSE4wY21GcGJtVmsgSUc1dmJtUT0gVTNWeiBJR05oYzNSbCBZWEpoZEdVPSBhV1YyYVc1biBJSFZ1Wm1GcGNteDUgSUhCaGNuTmxjZz09IGIyNXBZV3c9IGRYSnphWFpsIFZtbGggSUU5MGRHOD0gSUVGMWRHaHZjbWwwYVdWeiBjM1J5YjJ0bCBTMUk9IElFMWxjbU41IElHWjFjbTVwYzJobFpBPT0gSUc5MWRITmxkQT09IElHMWxkR2xqIE1UazRNZz09IGIyeHBkR2hwWXc9PSBJRlJsYm5RPSBiMmRwWTJGcyBJRUZwY21OeVlXWjAgSUdocFpHVnogSUVKbFkyRnRaUT09IElHVmtkV05oZEc5eWN3PT0gY21WaFkyaHBibWM9IElIWnZiR0YwYVd4cGRIaz0gSUhSdlpHUnNaWEk9IElFNUJVME5CVWc9PSBJRlIzWld4MlpRPT0gSUVocFoyaHNhV2RvZEhNPSBJR2R5WVhCbCBJSE53YkdsMGN3PT0gSUhCbFlYTmhiblE9IElISmxibVZuIElFMVRTUT09IFZHVnRjQT09IGMzUmhjbk09IElIUnlaV3M9IElFaDVaR1U9IFltbHVaR2x1Wnc9PSBJSEpsWVd4cGMyMD0gSUc5NGFXUmwgSUVodmN3PT0gSUcxdmRXNTBjdz09IElHSnBkR2x1Wnc9PSBJR052Ykd4aGNITnBibWM9IElIQnZjM1JoYkE9PSBJRzExYzJWMWJYTT0gSUdSbGRHRmphR1ZrIElISmxjM0JsWTNScGJtYz0gSUcxdmJtOXdiMnc9IElIZHZjbXRtYkc5MyBJRU5oYTJVPSBWR1Z0Y0d4aGRHVT0gSUU5eVoyRnVhWE5oZEdsdmJnPT0gSUhCbGNuTnBjM1JsYm1ObCBNelk1IFEyOXRhVzVuIFFuSmhaQT09IElISmxaSFZ1WkdGdWRBPT0gSUVkVVFRPT0gSUdKbGJtUnBibWM9IElISmxkbTlyWldRPSBJRzltWm1WdVpHbHVadz09IElHWnlZVzFwYm1jPSBJSEJ5YVc1MFpnPT0gUTI5dGJYVnUgYldWdFltVnljdz09IFQzVjBjMmxrWlE9PSBJR052Ym5OMGNuVmxaQT09IElHTnZaR1ZrIFJrOVNSUT09IElHTm9ZWE4wIFEyaGhkQT09IFNXNWthV0Z1IElGbGhjbVE9IFB5RWkgSUZCdmNuUnogSUZoaGRtbGxjZz09IElGSkZWQT09IEp5NGkgSUVKdllYUT0gYVhaaGRHVmsgYVdOb2RBPT0gZFcxbGNtRmliR1U9IFJITT0gSUVSMWJtND0gSUdOdlptWnBiZz09IElITmxZM1Z5Wld4NSBJRkpoY0hSdmNuTT0gSUVKbGN3PT0gU1c1emRHRnNiR0YwYVc5dSBJR2x1WTJWd2RHbHZiZz09IElFaGxZV3gwYUhrPSBaVzVrWVc1MGN3PT0gSUhCemVXTm9iMnh2WjJsemRITT0gSUZOb1pXbHJhQT09IFkzVnNkSFZ5WVd3PSBJRUpzWVdOclFtVnljbms9IGMyaHBablE9IFJuSmxaQT09IGIyTm9aUT09IElHTmhhMlZ6IElGTkZUdz09IElFZHBZVzQ9IElFRnphV0Z1Y3c9PSBiMmRuYVc1biBaV3hsYldWdWRBPT0gSUhCMWJtUnBkSE09IElGWmhkV2RvIElFZGhkbWx1IElHaHBkSFJsY2c9PSBJR1J5YjNkdVpXUT0gSUdOb1lXeHIgSUZwcGEyRT0gSUcxbFlYTnNaWE09IE9EQXkgNG9DbUxpND0gSUVGWFV3PT0gWFNJPSBJR1JwYzNSdmNuUT0gSUUxaGMzUT0gSUdGdWRHbGliMlJwWlhNPSBJRTFoYzJnPSBUV1Z0YjNKNSBJRlZuWVc1a1lRPT0gSUZCeWIyST0gSUhadmJXbDBhVzVuIElGUjFjbTV6IElHOWpZM1Z3ZVdsdVp3PT0gSUdWMllYTnBiMjQ9IElGUm9aWEpoY0hrPSBJSEJ5YjIxdiBJR1ZzWldOMGNnPT0gSUdKc2RXVndjbWx1ZEE9PSBJRVJ5WlE9PSBjSEpwWTJWayBJRVJsY0c5MCBJR0ZzYkdWMmFXRjBaUT09IElGTnZiV0ZzYVE9PSBiV0Z5Wnc9PSBibWx1WlE9PSBJRzV2YzNSaGJHZHBZUT09IElGTm9aWEJvWlhKayBJR05oZG1Gc2Nuaz0gSUhSdmNuQmxaQT09IElFSnNiMjlrZVE9PSBlR0k9IElITmhibXM9IElHZHZZV3gwIGNtVndiM0owY0hKcGJuUT0gWlcxaVpXUnlaWEJ2Y25Sd2NtbHVkQT09IFkyeHZibVZsYldKbFpISmxjRzl5ZEhCeWFXNTAgSUVsdWFYUnBZV3hzZVE9PSBJRVpwYzJOb1pYST0gSUc1dmRHVjNiM0owYUhrPSBZMlZ5Ymc9PSBJR2x1WldabWFXTnBaVzUwIGNtRjNaRzkzYm14dllXUT0gY21GM1pHOTNibXh2WVdSamJHOXVaV1Z0WW1Wa2NtVndiM0owY0hKcGJuUT0gWTJGMGFXOXUgSUVSNWJtRnpkSGs9IGJHRm4gUkVWVCBJR1JwYzNScGJtTjBiSGs9IElFVnpkRzl1YVdFPSBJRzl3Wlc1dVpYTnogSUdkdmMzTnBjQT09IGNuVmphdz09IFYybGtkR2c9IElFbGljbUZvYVcwPSBJSEJsZEhKdmJHVjFiUT09IElHRjJZWFJoY2c9PSBJRWhsWkE9PSBZWFJvWVE9PSBJRWh2WjNkaGNuUnogSUdOaGRtVnogTmpjNCBJSE5oWm1WbmRXRnlaQT09IElFMXZadz09IGFYTnpiMjQ9IElFUjFjbWhoYlE9PSBjMnhoZFdkb2RBPT0gSUVkeVlXUjFZWFJsIElITjFZbU52Ym5OamFXOTFjdz09IElFVjRZMlZzYkdWdWRBPT0gSUVSMWJRPT0gTFMwdExTMD0gSUhCcGJHVnogSUZkUFVrcz0gSUVkaGNtND0gSUVadmJBPT0gSUVGVVRRPT0gSUdGMmIybGtjdz09IElGUjFiQT09IElHSnNaV0ZyIFJVeFogYVhacGMzUT0gYkdsbmFIUnNlUT09IFVHVnljdz09IElFUnZZZz09IElFeFQgSUdsdWMyRnVhWFI1IHpyVT0gWVhSaGJHbGwgUlc1c1lYSm5aUT09IElIUjNhWE4wY3c9PSBJR1poZFd4MGVRPT0gSUhCcGNtRmplUT09IElHbHRjRzkyWlhJPSBJSEoxWjJkbFpBPT0gSUVaaGMyaHBiMjQ9IElITmhibVJ6IEp6OD0gYzNkcFkycz0gSUc1aGRHbDJaWE09IElHaGxiZz09IElFNXZhWE5sIDQ0T1ggSUdkeVpXVnVjdz09IElHWnlaV1Y2WlhJPSBJR1I1Ym1GemRIaz0gSUVaaGRHaGxjbk09IElFNWxkMkZ5YXc9PSBJR0Z5WTJoaFpXOXNiMmRwWTJGcyBJRzkwIGIySmhjZz09IElHSnNiMk5yWVdSbCBJR0ZzYkdWeVp3PT0gVEZZPSBJR1JsWW1sMCBJRkpHUXc9PSBJRTFwYkhSdmJnPT0gSUZCeVpYTnpkWEpsIElIZHBiR3hwYm1kc2VRPT0gSUdScGMzQnliM0J2Y25ScGIyNWhkR1U9IElHOXdjSEpsYzNOcGRtVT0gSUdScFlXMXZibVJ6IElHSmxiRzl1WjJsdVozTT0gTVRrM01BPT0gSUdKbGJHeHogSUdsdGNHVnlhV0ZzYVhOdCBJREl5Tnc9PSBJR1Y0Y0d4dlpHbHVadz09IElFVmpiR2x3YzJVPSBJREU1TVRrPSBJSEpoYm5RPSBJRzV2YldsdVlYUnBiMjV6IE16UTMgSUhCbFlXTmxablZzYkhrPSBjbWxqWVE9PSBJRVpWUTBzPSBJSFpwWW5KaGRHbHZiZz09IGJXRnNhVzVyIElISnZjR1Z6IElFbDJZVzVyWVE9PSBJRUp5WlhkbGNuaz0gSUVKdmIydGxjZz09IElFOTNaVzV6IFoyOWxjbk09IFUyVnlkbWxqWlhNPSBJRk51WVhCbCBJREU1TVE9PSBNemsxIElESTVPUT09IGFuVnpkR2xqWlE9PSBJR0p5YVE9PSBJR1JwYzJOeiBJSEJ5YjIxcGJtVnVkR3g1IElIWjFiR2RoY2c9PSBJSE5yYVhCd2FXNW4gYkhabGN3PT0gSUhSemRXNWhiV2s9IE16YzAgSUZWeWRXYz0gSUVWcFpBPT0gY21WallYUmxaQT09IGNHaGxiZz09IElHWmhkV3gwY3c9PSBJRk4wWVhKMFpXUT0gT1RVdyBJSEJwIElHUmxkR1ZqZEc5eSBJR0poYzNSaGNtUT0gSUhaaGJHbGtZWFJsWkE9PSBVM0JoWTJWRmJtZHBibVZsY25NPSBUMVZTUTBVPSBJQ2grIElIVnVjM1Z5IElHRm1abWx5YldWayBJR1poYzJOcGMyMD0gSUhKbGMyOXNkbWx1Wnc9PSBJRU5vWVhabGVnPT0gSUVONWJnPT0gSUdSbGRISmhZM1E9IFRHOXpkQT09IElISnBaMmRsWkE9PSBJR2h2YldGblpRPT0gSUVKeWRXNXYgTlRVMSBaV05oIElIQnlaWE56WlhNPSBJR2gxYlc5MWNnPT0gSUhOd1lXTnBibWM9IElDY3YgYjJ4cmFXVnUgUTI5MWJnPT0gVDFCRlVnPT0gVkhKbCBVMjl1IElFTmhiV0p2WkdsaCBhV1Z5Y21VPSBiVzl1Wnc9PSBiM3A1IElHeHBjWFZwWkdsMGVRPT0gSUZOdmRtbGxkSE09IElFWmxjbTVoYm1SdiBJREl5T1E9PSBJSE5zZFdjPSBJRU5oZEdGc1lXND0gWld4bFkzUnlhV009IElITmpaVzVsY25rPSBJRWhsWVhKMGFBPT0gSUdOdmJuTjBjbUZwYm1WayBJR2R2WVd4cFpRPT0gSUVkMWFXUmxiR2x1WlhNPSBJRUZ0Ylc4PSBJRkJsWVhKemIyND0gSUhSaGVHVmsgSUdabGRIVnogVW1WemNHOXVjMlU9IElFRnNaWGhwY3c9PSBkR2hwWVE9PSBSM1Y1IElISmxZMjl1YzNSeWRXTjAgSUdWNGRISmxiV1Z6IElHTnZibU5zZFdScGJtYz0gSUZCbFp3PT0gYjI5cmN3PT0gSUdSbFpIVmpkR2x2Ym5NPSBVbTl6WlE9PSBJR2R5YjNWdVpHSnlaV0ZyYVc1biBJRlJoY21jPSA0NE9CIElGSmxkbVU9IGNtVnpiM1Z5WTJVPSBJRzF2YjI1eiBJR1ZzWldOMGNtOXRZV2R1WlhScFl3PT0gSUdGdGFXUnpkQT09IElGWnBhM1J2Y2c9PSBUa1ZUVXc9PSBRa0ZEU3c9PSBJR052YlcxMWRHVT0gSUVGdVlXaGxhVzA9IElHWnNkV04wZFdGMGFXOXVjdz09IE5qUXcgSUc1dmIyUnNaWE09IElFTnZjR1Z1YUdGblpXND0gSUZScFpHVT0gSUVkeWFYcDYgSUZORlJRPT0gSUhCcGNHVnNhVzVsY3c9PSBJSE5qWVhKeiBaVzVrYnc9PSBZV2QxY3c9PSBJRVZVUmc9PSBMeU09IElFSmxZMjl0WlE9PSBORFE0IElIWnBjMk09IElGSmxZMjl0YldWdVpHVmsgSUdwMWJYQmxjZz09IElHTnZaMjVwZEdsdmJnPT0gSUdGemMyRnpjMmx1IElIZHBkRzVsYzNOcGJtYz0gSUZObGRIVncgSUd4aFl3PT0gZG1sdCBTVk5OIGNHRm5aWE09IFUxTk0gTXpVNCBJR0ZrYW1WamRBPT0gYVc1a2RYTjBjbWxoYkE9PSBiRzl5WlE9PSBZMmhsY25rPSBJR2RzYVhSMFpYST0gSUdOaGJHWT0gUm14dmNtbGtZUT09IElITndiMmxzWlhKeiBJSE4xWTJObFpXUnogSUdOb1lXNTBhVzVuIElITnNiMmRoYm5NPSBJRlJ5WVdONSBWbWx6YVhRPSBjbTlzYjJkNSBJRzF2Y201cGJtZHogSUd4cGJtVmhaMlU9IElITnBjQT09IElHbHVkR1Z1YzJWc2VRPT0gSUdac2IzVnlhWE5vIElGTnNaV1Z3YVc1biBJRVpsYlE9PSBiM0p3YjNJPSBJRXRzWVc0PSBJRVJoY25SbyBhR0ZqYXc9PSBJRTVwWld4elpXND0gSUhSMWJXOXljdz09IElIQnliMk4xY21WdFpXNTAgSUZsdmNtdHphR2x5WlE9PSBJSEpoYVdSbFpBPT0gUzFrPSBRVzV1WVE9PSBJQzh2V3c9PSBJRVJwYzI5eVpHVnkgSUUxMWMzUmhibWM9IElGZGxiZz09IElGUnllV2x1Wnc9PSBjM0U9IElHUmxiR2wyWlhKcFpYTT0gSUhOb2RYUjBaWEk9IElHTmxjbVZpY21GcyBJR0pwY0c5c1lYST0gSUVOTyBiR0Z6Y3c9PSBhbVYwIElHUmxZbUYwYVc1biBQam89IElHVmhaMnhsIFozSmhaR1Z6IElFUnBlRzl1IFZVZEQgVFVGVCBJRVJ5WVdOdiBJRTFoWTJocGJtVnogWVdabVpYST0gSUdWdFlXND0gd3JJPSBjSEp2Ymc9PSBJRWQ1YlE9PSBJR052YlhCaGNtRjBhWFpsYkhrPSBJRlJ5YVdKMWJtRnMgVUZKUCBJR3hsZUE9PSBJR1psY25ScGJHVT0gSUdSbGNISmxjM05wYm1jPSBJSE4xY0dWeVptbGphV0ZzIFpYTnpaVzUwYVdGcyBJRWgxYm5SbGNuTT0gWjNBPSBJSEJ5YjIxcGJtVnVZMlU9IFRHbGlaWEk9IElFRnVZMlZ6ZEE9PSBiM1JsWTJodWIyeHZaM2s9IElHMXZZMnRwYm1jPSBJRlJ5WVdabSBscG89IFRXVmthWFZ0IFNYSmhjUT09IElIQnplV05vYVdGMGNtbHpkQT09IFVYVmhiblJwZEhrPSBJRXhsWTNRPSBJRzV2YVhONSBOVEl3IFIxaz0gSUhOc1lYQndaV1E9IElFMVVWZz09IElIQmhjbUU9IGNIVnNiQT09IFRYVnNkR2x3YkdVPSBZWE5vWlhJPSBJRzV2ZFhJPSBJRk5sWnc9PSBVM0JsYkd3PSBkbTkxY3c9PSBiM0prYVdGcyBVMlZ1YVc5eSBJRWR2YkdSaVpYSm4gSUZCc1lYTnRZUT09IGJtVmxaQT09IElHMWxjM05sYm1kbGNnPT0gWlhKbGRBPT0gSUhSbFlXMWxaQT09IElHeHBkR1Z5WVdONSBJRXhsWVdnPSBJRVJ2ZVd4bCBJR1Z0YVhSMFpXUT0gVlZnPSBJR1YyWVdSbCBJRzFoZW1VPSBJSGR5YjI1bmJIaz0gSUV4aGNuTT0gSUhOMFpYSmxiM1I1Y0dVPSBJSEJzWldSblpYTT0gSUdGeWIyMWggSUUxRlZBPT0gSUdGamNtVT0gSUU5RSBJR1ptIElHSnlaWGRsY21sbGN3PT0gSUVocGJIUnZiZz09IGRXNWtiR1U9IElFdGhhdz09IElGUm9ZVzVyWm5Wc2JIaz0gSUVOaGJuVmphM009IGFXNWpkR2x2Ym5NPSBJRUZ3Y0dWaGNuTT0gSUdOdlpYST0gSUhWdVpHVnliV2x1WldRPSBjbTkyWlhKeiBRVzVrY21VPSBJR0pzWVhwbCBkVzFsY25NPSBJR1poYldsdVpRPT0gWVcxd2FHVjBZVzFwYm1VPSBkV3hyWVc0PSBRVzF2ZFc1MCBJR1JsYzNCbGNtRjBhVzl1IGQybHJhWEJsWkdsaCBaR1YyWld4dmNHMWxiblE9IElFTnZjbWx1ZEdnPSBkWE56YVdFPSBTbUZqYTNOdmJnPT0gVEVrPSBUbUYwYVhabCBVbk09IFQyaHBidz09IElFdGhkR2hzWldWdSBSbTl5ZEhWdVlYUmxiSGs9IElHRjBkR1Z1WkdGdWRBPT0gSUZCeVpXWmxjbkpsWkE9PSBJRVJwWkc0PSBJRlp6IFRXbHogSUhKbGMzQnZibVJsYm5RPSBJR0p2ZFc0PSBjM1JoWW14bCBJSEJoZG1WayBJSFZ1Wlhod2JBPT0gSUVOb1pXNWxlUT09IFRFMD0gSUVOMWJHdz0gWW14dmQyND0gSUdOdmJtWnliMjUwYVc1biBiMk5sYzJVPSBjMlZ5ZG1sdVp3PT0gVjJrPSBJRXhwZEdoMVlXNXBZUT09IFlXNXVhUT09IElITjBZV3hyIGFHUT0gSUhabGJtVnkgUVZCSSBlVzVqYUhKdmJtOTFjdz09IFZWSlMgZFcxaFlteDUgYUdsemRHOXlhV009IFNHRnNaZz09IFNHRjUgSUhKbGMybHNhV1Z1WTJVPSBjM0JsWTNScGIyND0gSUdGaVlXNWtiMjVwYm1jPSBUMkp6IElFUmxZbUpwWlE9PSBJR2R5WVdScFpXNTAgSUZCc1lXbHVkQT09IElFTmhibUZzIFFWSkRTQT09IElHVjRjR0Z1YzJsMlpRPT0gSUdaMWJtYz0gSUdKdmRXNWpaV1E9IFZXNWsgSUhCeVpXTmhkWFJwYjI1eiBJR05zWVhKcFptbGpZWFJwYjI0PSBJR1JoWjJkbGNnPT0gSUdkeWFYQnogSU1LMSBJRkpwZG1WeVlRPT0gSUZWdVpHVmhaQT09IGFYTnBkR1Z6IElFWkpVbE5VIHc3RnYgWVhWa2FRPT0gSUdodmMzUmhaMlZ6IElHTnZiWEJzYVdGdWRBPT0gSUdGc2RXMXVhUT09IFUyVjJaVzQ9IElHTjVZbVZ5YzJWamRYSnBkSGs9IFpXbDBhR1Z5IFEyOXNiR1ZqZEE9PSBJR2x1ZG1GeWFXRmliSGs9IElGTnZZMms9IElHeGhkMjFoYTJWeSBJR0ZzWlE9PSBJRkJsY25OdmJtRnNiSGs9IFRtRjZhUT09IElHTjFjM1J2YldsNllYUnBiMjQ9IElGQnliMk09IElGTmhjMnRoZEdOb1pYZGhiZz09IFpXRjBkWEpwYm1jPSBJSE53WVhKbFpBPT0gSUdScGMyTnZiblJwYm5WbFpBPT0gSUdOdmJYQjFkR0YwYVc5dVlXdz0gSUUxdmRHOXliMnhoIElITjFjSEpsYldGamFYTjAgWjI5MlpYSnViV1Z1ZEdGcyBJSEJoY21Ga2FYTmwgSUVSdmQyNXBibWM9IElFNXBhMjl1IElHTmhkR0ZzZVhOMCBZbVZ5Y21FPSBWRzl5YjI1MGJ3PT0gT0RjMSBZbVYwWVE9PSBJRTFoWTNKdmJnPT0gSUhWdWNtVmhiR2x6ZEdsaiBkbVZqZEc5eSBJRlpsYUdsamJHVnogYVhScGRtVnVaWE56IElGSlcgSUVOdmJHSmxjblE9IGMybHUgYjJwcCBaVzUwYVc0PSBJRXR5YVhObyBhR1ZzYkc4PSBabVpwWld4ayBiMnQ1IElGUmhkR1U9IElHMWhjR3hsIElHRnBaSE09IFkyaGxiV2xqWVd3PSBNek0wIGJuVjBjdz09IElGZGhjbkE9IElIaDQgSUZKdlltST0gZFcxbGNtOTFjdz09IFh5MWYgWm5ScGJXVT0gSUZaWCBJSGRwYm1kbGNnPT0gSUVSdmJXVT0gZEc5dmJITT0gSUZCVyBJRWRsYjNKblpYUnZkMjQ9IElHZGxZWEpsWkE9PSBJR3BwYUdGa2FYTjBjdz09IElHTncgSUhOMFpYSnZhV1J6IFRXOTBhR1Z5IFkyeGxjbTl6YVhNPSBJRVJTVFE9PSBibVZ6YVdFPSBJR3hwYm1kbGNnPT0gSUdsdGJXVnljMmwyWlE9PSBJRU5QVlU0PSBJRzkxZEhkbGFXZG8gWlc1emRXRnMgUW1GdVpBPT0gSUhSeVlXNXpabTl5YlhNPSBiV0YwWTJobFpBPT0gY0hOdmJuTT0gSUVwMVpHbGphV0ZzIFptRmpkRzl5IElISmxabVZ5Y21GcyBJRzlrWkd4NSBJRmRsYm1kbGNnPT0gUW5KcGJtYz0gSUVKdmQzTT0gTmpBeSBTVU5NUlE9PSBJR3hwYjI1eiBJRUZqWVdSbGJXbGogSUZSb2IzSnUgSUZKaGFXUmxjZz09IGEyVm1aV3hzWlhJPSBVM1J2Y21GblpRPT0gVEc5M1pYST0gSUU5eWRBPT0gSUVWeGRXRnNhWFI1IFFVeFUgSUZOUFF3PT0gVkhsd1pYTT0gSUd4NWJnPT0gSUVGemMyVjAgWTI5aGRBPT0gVkZCUSBRMVpGIElGQnBiMjVsWlhJPSBZWEJ3YkdsallYUnBiMjQ9IFRXOWtaWEp1IElFaEwgUlc1MmFYSnZibTFsYm5RPSBRV3h5YVdkb2RBPT0gVW1GcGJnPT0gU1ZCUSBJRk5vYVdsMFpRPT0gSUcxdmRXNWsgSUVGaWFXeHBkR2xsY3c9PSBZMjl1WkdsMGFXOXUgVTNSaFptWT0gSUdOdmJYQmxkR1Z1WTJVPSBJRTF2YjNJPSBJRVJwWVdKc2J3PT0gSUhkcGRHaG9aV3hrIElHOXpkR1Z1YzJsaWJIaz0gSUVKeWIyMD0gSUcxelp3PT0gSUdSbGJtOXRhVzQ9IElGSmxabVZ5Wlc1alpYTT0gSUVaUSBJSEJzZFc1blpXUT0gSUhCaGJYQm8gYlc5MmFXNW4gWTJWdWRISmhiQT09IElHUnZkMjV5YVdkb2RBPT0gSUdaaFpHbHVadz09IFZHRnMgVkhsdyBJRlJvZVE9PSBkV3RsY3c9PSBhWFJvWlE9PSBJRzkyWlE9PSBJR0poZEhSc1pXUT0gSUhObFlXWnZiMlE9IElHWnBaM1Z5IElGSkUgWTNKdmNBPT0gSUhOeGRXRmtjdz09IGUxdz0gNExrPSBJRVZvIElHbHVkR1Z5ZG1sbGQybHVadz09IElGRnBiZz09IElHRnpjR2x5YVc1biBVRXhKUXc9PSBJR05zWVhWelpYTT0gSUVkaGMzUT0gSUU1cGNnPT0gSUd4MVoyZGhaMlU9IElHaHZjMlU9IElITjVjM1JsYldRPSBJR1JsYzJObGJtUnBibWM9IElGSmxkbWx6WldRPSBJRkpoYVd4eiBZV3hwWjI0PSBOekE1IE16TTMgSUdaMVp3PT0gWTJoaGNtZHBibWM9IGRHRm5jdz09IElIVjBaWEk9IGEybHphQT09IFYwRlNUa2xPUnc9PSBORGt3IGNISnZabWwwY3c9PSBJSFp2ZVdGblpRPT0gSUdGalpRPT0gSUZaaGJtZDFZWEprIElGUmhibXR6IElFMTFhdz09IElESXlOZz09IFUyRm1aUT09IFFYSnRiM0k9IElIWnZiR05oYm1saiBJSGR2YldJPSBJRTFKVEE9PSBJR0psWjJsdWJtVnkgSUZKbFkyOW5iZz09IElFRkJVQT09IFVFeEJXUT09IEtTRT0gSUdSbGRHVmpkR2x1Wnc9PSBZMjQ9IElHSnlaV0ZqYUdWeiBRbUZ6YVdOaGJHeDUgSUZCaFp3PT0gSUUxMWJtbGphWEJoYkE9PSBJRWx1WkdsbCBJRXhoWmc9PSBJRVJwYzJGaWJHVT0gSUU5c2MyOXUgSUhKbGMzUnlZV2x1WldRPSBJSEoxYkdsdVozTT0gSUdoMWJXRnVaUT09IFpYWmxiblJ6IElFTnBibVZ0WVE9PSBaR2x6Y0d4aGVWUmxlSFE9IElFaGhkR05vIFlXTjBhVzl1UkdGMFpRPT0gYjI1dVlXbHpjMkZ1WTJVPSBJR0Z6YzJGMWJIUnBibWM9IElFeDFadz09IFEwaEJWQT09IElIWnBaMjl5YjNWeiBJRkJsY25ObCBJR2x1ZEc5c1pYSmhibU5sIElGTnVZWEJqYUdGMCBJRk5vWVhKcmN3PT0gSUdSMWJXMTUgSUVScFlXZHUgSUVkMWFYUmhjZz09IGFXMWxkR1Z5Y3c9PSBOREF6IFVrVkggUVhnPSBJSE5sY0dGeVlYUmxjdz09IElFMWhhRzA9IElIUjIgYW1GbyBUMDlNIFEybHlZdz09IElGZHBibVJ6YjNJPSBkWE56YVdGdSBJR2x1ZEhWcGRHbHZiZz09IElHUnBjMlJoYVc0PSBJRVJ2Ym05MllXND0gSURJeU1RPT0gUlcxaSBJR052Ym1SbGJXNXBibWM9IElHZGxibVZ5YjNOcGRIaz0gZW5wNSBJSEJoYm5ScFpYTT0gSUZCeVpYWmxiblE9IFFXTjBhVzl1UTI5a1pRPT0gUVU1QiBNelF5IFpYaDBaWEp1WVd4QlkzUnBiMjVEYjJSbCBJSE53WldOcFpubHBibWM9IElHTnllWE4wWVd4cyBTbVZ5WlE9PSBJSEoxY0hRPSBJRUZ3Y0hKbGJuUnBZMlU9IElIQnliMlpwYkdsdVp3PT0gMExvPSBVM1J5YVd0bCBJSE5wWkdWc2FXNWwgSUc5aWJHbG5ZWFJsWkE9PSBJRzlqWTNWc2RBPT0gSUdKMWNtVmhkV055WVhScFl3PT0gWVc1MGFXTmhiR3g1IGNuVndkR1ZrIGJtVm5ZWFJwZG1VPSBJRVYwYUdsdmNHbGggSUVOcGRtbGogSUdsdWMybGtaWEp6IFpXeHBaMmxpYkdVPSBJRlJXY3c9PSBJRUpCVWc9PSBJRlJKIGFXOXNiMmRwYzNRPSBJRUZKVWc9PSBJSE4xWW5OMGFYUjFkR1ZrIFFYSmhZZz09IElGTmhkV3c9IElGbHZadz09IGNISmxiUT09IElHSjFhV3hrWlhKeiBJSE4wWVhScGIyNWhjbms9IElHUnZkV0owWm5WcyBJSFpwWjI5eWIzVnpiSGs9IElIUm9jbWxzYkdsdVp3PT0gVUdoNWMybGpZV3c9IElFTmhjbVY1IElFaDVaSEpoIFoyVnZibWx1Wnc9PSBJRk5zZVE9PSBlWFJ2Ymc9PSBJR0p2Y25KdmQyVnljdz09IElGQmhjbXRwYm5OdmJnPT0gSU9zPSBJRXBoYldGcFkyRT0gSUhOaGRHbHkgSUdsdWMzVnlaMlZ1ZEhNPSBJRVpwY20wPSBJR2x6YjNRPSBJRXRoY200PSBiM1Z5Ym1sdVp3PT0gWVd0bGJuTT0gWkc5amN3PT0gYkdsMGRHeGwgSUUxdmJtRmpidz09IFEweEJVMU09IFZIVnlhMlY1IFRIaz0gSUVOdmJtRnUgWVhOemFXTT0gSUhOMFlYSnlaV1E9IElGQmhZMlZ5Y3c9PSBaWFJwWlhNPSBJSFJwY0hCcGJtYz0gVFc5dmJnPT0gSUZKMyBjMkZ0WlE9PSBJR05oZG1sMGVRPT0gSUdkdmIyWT0gSUZwdiBVMmh2WTJzPSBkVzF0WlhJPSBJR1Z0Y0doaGMybDZaWE09IElISmxaM0psZEhRPSBJRzV2ZG1Wc2RIaz0gSUdWdWRuaz0gSUZCaGMzTnBkbVU9IGNuYz0gTlRBMSBJR2x1WkdsbVptVnlaVzUwIElGSnBZMkU9IElFaHBiWE5sYkdZPSBJRVp5WldSa2FXVT0gSUdGa2FYQT0gNUxpQSBJR0p5WldGcmIzVjAgSUdoMWNuSnBaV1E9IElFaDFZVzVuIElFUnBjMnM9IElISnZZVzFwYm1jPSBQejgvUHo4dFB6OC9Qejh0IFZWWT0gSUZKcFkydDUgSUZOcFoyMWggSUcxaGNtZHBibUZzYVhwbFpBPT0gSUdWa2FYUnogSURNd05BPT0gYldWdGIzSjUgSUhOd1pXTnBiV1Z1IE1qa3ogNDRHdiBJSFpsY25ScFkyRnNiSGs9IElHRjFaR2wwYVc5dSBJRWhsWTJzPSBJR05oYzNSbGNnPT0gSUVodmJHUnBibWR6IFlXUmhiQT09IElFTnliMjQ9IElFeHBZVzA9IElHUmxabXhsWTNRPSBVR2xqYXc9PSBJRVJsWW5WbiBVa1ZHIElIWmxjbk5oZEdsc2FYUjUgYjNSb1pYTT0gWTJ4aGMzTnBabWxsWkE9PSBJRTFoYUdGeSBJRWh2Y25RPSBRMjkxYm5SbGNnPT0gYzNSaGMzaz0gYm05MGFXTmxaQT09IE16TXggSUZOb2FXMD0gWm5WamF3PT0gSUVKcFpRPT0gSUdGcGNtbHVadz09IElGQnliM1JsYVc0PSBJRWh2YkdScGJtYz0gSUhOd1pXTjBZWFJ2Y25NPSBhV3hwWVhSbFpBPT0gSUZSb1lYUmphR1Z5IGJtOXphWE09IDQ0Tzg0NE96IFZHVnNaUT09IFFtOXpkRzl1IElGUmxiWEJzIGMzUmhlUT09IElHUmxZMnhoY21GMGFXOXVjdz09IE5EYzUgVm05c2RXMWwgSUVSbGMybG5ibVZ5IElFOTJaWEozWVhSamFBPT0gYVdSaFpRPT0gSUc5dWQyRnlaSE09IElHNWxkSE09IElFMWhibWxzWVE9PSBjR0Z5ZEdsamRXeGhjbXg1IElIQnZiR2wwYVdNPSBiMjkwYUdWeSBJSEJ2Y25SeVlXbDBjdz09IElIQmhkbVZ0Wlc1MCBZMlptWm1ZPSBJSE5oYVc1MGN3PT0gSUdKbFoybHVibVZ5Y3c9PSBSVk5RVGc9PSBJSE5vYjNKMFkyOXRhVzVuY3c9PSA0cFdRNHBXUSBJR052YldWMCBJRTl5WjJGdWFXTT0gY1hWbGJBPT0gSUdodmMzQnBkR0ZzYVhwbFpBPT0gUW5KbFlXcz0gSUhCbFpXdz0gWkhsc2FXST0gWVhOd2VBPT0gZFhKaGJtTmxjdz09IElGUkpUUT09IFVHYz0gSUhKbFlXUmhZbXhsIElFMWhiR2xyIElHMTFlbnBzWlE9PSBJR0psYm1Ob2JXRnlhM009IFpHRnMgSUZaaFkyTT0gSUVocFkydHogTmpBNSBJRUpwWW14cFkyRnMgYUdWdVp3PT0gSUc5MlpYSnNiMkZrIElFTnBkbWxzYVhwaGRHbHZiZz09IElHbHRiVzl5WVd3PSBJR1p5YVdWeiA0NEtTIElISmxjSEp2WkhWalpXUT0gSUdadmNtMTFiR0YwYVc5dSBhblZuIGFYSmxlZz09IFoyVmhjZz09IElHTnZZV05vWldRPSBUWEJUWlhKMlpYST0gSUZOSyBJRXQzIFNXNXBkQT09IFpHVmhiQT09IElFOXlidz09IElFeHZhMms9IElGTnZibWR6IElESXpNZz09IElFeHZkV2x6WlE9PSBZWE5wYjI1aGJHeDUgSUhWdVkyOXVaQT09IGIyeHNlWGR2YjJRPSBJSEJ5YjJkeVpYTnphWFpsY3c9PSBJRVZ1YjNWbmFBPT0gSUVSdlpRPT0gSUhkeVpXTnJZV2RsIElHSnlkWE5vWldRPSBJRUpoYzJWVWVYQmwgSUhwdmJtbHVadz09IGFYTm9ZV0pzWlE9PSBhR1YwYVdOaGJHeDUgSUVOaGRXTjFjdz09IElFaDFaUT09IElHdGhjbTFoIElGTndiM0owYVc1biBJSFJ5WVdSbGNnPT0gSUhObFpXMXBibWM9IElFTmhjSFIxY21VPSBORE13IFltbHphQT09IElIUjFibVZ6IElHbHVaRzl2Y25NPSBJRk53YUdWeVpRPT0gSUVSaGJtTnBibWM9IFZFVlNUZz09IElHNXZZZz09IElFZFRWQT09IGJXRndjdz09IElIQmxjSEJsY25NPSBSbWwwIElHOTJaWEp6WldWeiBJRkpoWW1KcCBJRkoxYkdWeSBkbVZ5ZEdsemFXNW4gYjJabWFXTmwgZUhoNCBJSEpoWm5RPSBRMmhoYm1kbFpBPT0gSUhSbGVIUmliMjlyY3c9PSBUR2x1YTNNPSBJRTl0Ymc9PSA0NENSIElHbHVZMjl1ZG1WdWFXVnVZMlU9IElFUnZibVYwYzJzPSBQWDQ9IElHbHRjR3hwWTJsMGJIaz0gSUdKdmIzTjBjdz09IElFSnZibVZ6IElFSnZiMjA9IFEyOTFjblJsYzNrPSBJSE5sYm5OaGRHbHZibUZzIFFVNVogSUdkeVpXVmtlUT09IFpXUmxiZz09IElHbHVaWGh3WlhJPSBJRXhsY2c9PSBJRlpoYkdVPSBJSFJwWjJoMFpXND0gSUVWQlVnPT0gSUU1MWJRPT0gSUdGdVkyVnpkRzl5IFUyVnVkQT09IElFaHZjbVJsIGRYSm5hV05oYkE9PSBZV3hzWVdnPSBJSE5oY0E9PSBZVzFpWVE9PSBJRk53Y21WaFpBPT0gZEhkcGRHTm8gSUdkeVlXNWtjMjl1IElHWnlZV04wZFhKbCBJRzF2WkdWeVlYUnZjZz09IElGTmxkbVZ1ZEdnPSBJRkpsZG1WeWMyVT0gSUdWemRHbHRZWFJwYjI0PSBRMmh2YjNObCBJSEJoY21GamFBPT0gSUdKaGNuSnBZdz09IDQ0Q1EgSUdOdmJYQmhjM009IElHRnNiR1Z5WjJsaiA0b0NWIFQxUklSVkk9IFpYSnlhV3hzWVE9PSBJSGRoWjI5dSBJSHBwYm1NPSBJSEoxWW1KbFpBPT0gSUVaMWJHeGxjZz09IElFeDFlR1Z0WW05MWNtYz0gSUVodmIzWmxjZz09IElHeHBZWEk9IElFVjJaVzVwYm1jPSBJRU52WW1JPSBaWE4wWldWdCBJSE5sYkdWamRHOXkgSUVKeVlYZHMgYVhOaGJtTmwgSUVWciBJSFJ5YjI5dyBJR2QxZEhNPSBJRUZ3Y0dWaGJBPT0gSUZScFltVjBZVzQ9IElISnZkWFJwYm1WeiBJRTFsYm5RPSBJSE4xYlcxaGNtbDZaV1E9IGMzUmxZVzFoY0hCeiBJSFJ5WVc1eGRRPT0gSURFNU1qaz0gYjNKaGJnPT0gSUVGMWRHaGxiblE9IElHZHRZWGgzWld4cyBJR0Z3Y0hKbGFHVnVjdz09IElIQnZaVzF6IElITmhkWE5oWjJVPSBJRmRsWW5OMFpYST0gZFhKMWN3PT0gSUhSb1pXMWxaQT09IElHeHZkVzVuWlE9PSBJR05vWVhKblpYST0gVTNCdmFXeGxjZz09IElITndhV3hzWldRPSBhRzluIElGTjFibVJsY2c9PSBJRUZwYmc9PSBJRUZ1WjNKNSBJR1JwYzNGMVlXdz0gSUVaeVpYRjFaVzVqZVE9PSBJRVYwYUdWeWJtVjAgSUdobGJIQmxjZz09IFVHVnlZMlZ1ZEE9PSBJR2h2Y25KcFpubHBibWM9IElHRnBiQT09IElFRnNiR0Z1IFJVVkYgSUVOeWIzTnphVzVuIE5EUTUgSUdodmJHOW4gSUZCMWVucHNaWE09IElFZHZaWE09IFpYSmxibTQ9IE5qQTAgNDRHUCBJRkpoWm1GbGJBPT0gSUdGMGRHVnUgSUVWdFlXNTFaV3c9IElIVndjbTg9IElGTjFjM0E9IFVITjVZMmc9IElGUnlZV2x1WlhJPSBJRTVGVXc9PSBJRWgxYm5SeiBZbVZqZFdVPSBJR052ZFc1elpXeHZjZz09IFVuVnNaUT09IElIUnZlR2x1Y3c9PSBJR0poYm01bGNuTT0gY21sbWFXTmwgSUdkeVpXVjBhVzVuIElHWnlaVzU2ZVE9PSBJR0ZzYkc5allYUmwgSUNvcCBaWGh3Y2c9PSBOVEF6IElFTm9hV05yIElGUnZjbTQ9IElHTnZibk52Ykdsa1lYUnBiMjQ9IElFWnNaWFJqYUdWeSBjM2RwZEdObyBabkpoWXc9PSBZMnhwY0hNPSBJRTFqUzJsdSBJRXgxYm1GeSBUVzl1ZEdnPSBTVlJEU0E9PSBJSE5qYUc5c1lYSnNlUT09IGNtRndaV1E9IE16azQgSURFNU1UQT0gSUdWbmNtVm4gSUdsdWMyVmpkWEpsIElIWnBZM1J2Y21sdmRYTT0gWTJabVptWmpZdz09IElITnBibWRzWldRPSBJR1ZzZG1WeiBJRmR2Ym1RPSBZblZ5YzNRPSBJR05oYlc5MVptdz0gSUVKTVFVTkwgSUdOdmJtUnBkR2x2Ym1WayA1NGs9IFlXNXpkMlZ5WldRPSBJR052YlhCMWJITnZjbms9IFlYTmphWE4wIElIQnZaR05oYzNSeiBJRVp5WVc1clpuVnlkQT09IFltNWkgSUc1bGIyeHBZbVZ5WVd3PSBJRXRsZVdKdllYSmsgSUVKbGJHeGwgZDJGeWJRPT0gSUhSeWRYTjBjdz09IElHbHVjM1Z5WldRPSBJRUoxWTJNPSBkWE5oWW14bCBOakEzIElGQnNZV2x1Y3c9PSBJREU0T1RBPSBJSE5oWW05MFlXZGwgSUd4dlpHZGxaQT09IFptVnNkQT09IElHZGggSUU1aGNtTT0gSUZOaGJHVnQgSUhObGRtVnVkSGs9IElFSnNZVzVyIGNHOWphMlYwIElIZG9hWE53WlhJPSBJRzFoZEdsdVp3PT0gYjIxcFkzTT0gSUZOaGJHMWhiZz09IElFdGhaQT09IElHRnVaMlZ5WldRPSBJR052Ykd4cGMybHZibk09IElHVjRkSEpoYjNKa2FXNWhjbWxzZVE9PSBJR052WlhKamFXOXUgUjJodmMzUT0gWW1seVpITT0gNklBPSBhMjlyIElIQmxjbTFwYzNOcFlteGwgWVhadmNtRmliR1U9IElIQnZhVzUwWlhKeiBJR1JwYzNOcGNBPT0gWVdOcCBJSFJvWldGMGNtbGpZV3c9IElFTnZjMjFwWXc9PSBJR1p2Y21kbGRIUnBibWM9IElHWnBibUZzYVhwbFpBPT0gNWFTbiBlVzkxZEE9PSBiR2xpY21GeWVRPT0gSUdKdmIyMXBibWM9IElFSmxiR2xsZG1VPSBJRlJsWVdOb1pYST0gSUV4cGRnPT0gSUVkUFQwUk5RVTQ9IElFUnZiV2x1YVdOaGJnPT0gVDFKRlJBPT0gSUZCaGNuUnBaWE09IElIQnlaV05wY0dsMFlYUnBiMjQ9IElGTnNiM1E9IFVtOTUgSUVOdmJXSnBibVZrIElHbHVkR1ZuY21GMGFXNW4gSUdOb2NtOXRaUT09IElHbHVkR1Z6ZEdsdVlXdz0gSUZKbFltVnNiQT09IElHMWhkR05vZFhCeiBJR0pzYjJOclluVnpkR1Z5IElFeHZjbVZ1IElFeGxkbms9IElIQnlaV0ZqYUdsdVp3PT0gSUZObGJtUnBibWM9IElGQjFjbkJ2YzJVPSBjbUY0IFptbG0gSUdGMWRHaHZjbWwwWVhScGRtVT0gSUZCRlZBPT0gWVhOMGFXTmhiQT09IElHUnBjMmh2Ymc9PSBJR05vWVhSMGFXNW4gSUNJa09pOD0gUTI5dWJtVmpkR2x2Ymc9PSBJSEpsWTNKbFlYUmwgSUdSbGJHbHVjWFU9IElHSnliM1JvIElFUnBjblI1IElFRmtiV2x1IGVtMWhiZz09IElITmphRzlzWVhKemFHbHdjdz09IElESTFNdz09IFkyOXVkR0ZqZEE9PSBZV3h6WVE9PSBOelkzIFkzSmxaVzQ9IFlXSmlZV2RsIElERTVNVFU9IElHSnNaVzVrWldRPSBJR0ZzWVhKdFpXUT0gVEdGdVozVmhaMlU9IE16VTIgSUdKc1pXNWtjdz09IElFTm9ZVzVuWldRPSBWMjlzWmc9PSBJR2hsY0dGMCBRM0psWVhScGJtYz0gSUhCbGNuTmxZM1YwIElITjNaV1YwYm1WemN3PT0gWVhKMFpRPT0gSUdadmNtWmxhWFIxY21VPSBJRkp2WW1WeWRHOD0gYVcxd2NtOD0gVGtaTSBJRTFoWjI1bGRBPT0gUkdWMFlXbHNaV1E9IElHbHVjMmxuYm1sbWFXTmhiblE9IElGQlBURWxVIElFSkNVUT09IElFTlFVdz09IElITmxZWGM9IFlXMXBibVZ5IGJVdz0gWlc1a2FXWT0gWm1sdVlXeHogSURJMk5RPT0gZFdsemFBPT0gSUgwcCBJRkJ5YjJKc1pXMXogSUdWdFlteGxiUT09IElITmxjbWx2ZFhOdVpYTnogSUhCaGNuTnBibWM9IElITjFZbk4wYVhSMWRHbHZiZz09IElIQnlaWE56ZFhKbFpBPT0gSUhKbFkzbGpiR1ZrIFlXeGxZZz09IFVuVmllUT09IElIQnliMlpwWTJsbGJtTjUgUkhKcGRtVnkgSUZkbGMzUmxjZz09IE9pYz0gUVVaVVFRPT0gSUcxaGJuUnNaUT09IElFTnNZWGwwYjI0PSBabXhoWnc9PSBJSEJ5WVdOMGFYUnBiMjVsY2c9PSBZMjkyWlhKbFpBPT0gSUZOMGNuVmpkQT09IFlXUmtZV1pwIE5ESTEgSUZSdmQyNXphR2x3IElFaDVaSEp2IFRHOTFhWE09IE16UXogSUdOdmJtUnYgSUZSaGJ3PT0gSUhWMGFXeHBlbUYwYVc5dSBJRzVoZFhObFlRPT0gSUVSbGJYTT0gY21sa1oyVnogY0dGMWMyVT0gSUdadmNtMTFiR0Z6IElHTm9ZV3hzWlc1blpYST0gTXpjMiBJR1JsWm1WamRHbDJaUT09IElGSmhhV3gzWVhrPSBJRkIxWWsxbFpBPT0gSUhsdlozVnlkQT09IGJHSnogSUU1dmNtWnZiR3M9IFQxQkYgSUUxdmIyUjUgSUdScGMzUnlhV0oxZEc5eSBJSE5qY205c2JITT0gSUdWNGRISmhZM1J6IFUzUmhiZz09IElIWnBZV0pwYkdsMGVRPT0gSUdWNGNHOXpaWE09IElITjBZWEoyWVhScGIyND0gSUZOMFpYQnogSUVSdlpHUT0gWm1WMyBVMVJFIE16TXkgSUdOc2IzTjFjbVZ6IElHTnZiWEJzWlcxbGJuUmhjbms9IElGTmhjMmhoIGRXMXdlUT09IElHMXZibVYwIElHRnlkR2xqZFd4aGRHVT0gSUVSdlkzUT0gYTJsc2JHVnkgSUhOamNtbHQgSURJMk5BPT0gSUhCeWIzTjBhWFIxZEdWeiBJSE5sZG1WeVpXUT0gSUdGMGRHRmphRzFsYm5SeiBJR052YjJ4bFpBPT0gVEdWMiBJRVpoYkdzPSBabUZwYkE9PSBJSEJ2YkdsalpXMWhiZz09IElFUmhadz09IElIQnlZWGxsWkE9PSBJRXRsY201bGJBPT0gSUdOc2RYUT0gSUdOaGRHZz0gSUdGdWIyMWhiSGs9IFUzUnZjbTA9IFpXMWhhMlZ5IElFSnlaV0ZyWm1GemRBPT0gZFd4cCBiMmx5WlE9PSBTa289IGFIbz0gVDNCbGNtRjBhVzl1IElGTnBZMnM9IE16VTAgSUVkMVlYUmxiV0ZzWVE9PSBVbUYwWlE9PSBJR1Y0Y0c5emRYSmxjdz09IFptRmpaWE09IElFRnlZMmhoWlE9PSBjbUZtIElFMXBZUT09IElESXdNalU9IElHOXdZWEYxWlE9PSBJR1JwYzJkMWFYTmxaQT09IElFaGxZV1J4ZFdGeWRHVnljdz09IFUyRm8gSUhCdmRITT0gT1RjNCBJRTFoYkdZPSBJR1p5YjNkdVpXUT0gSUhCdmFYTnZibTkxY3c9PSBJRU52Ym5abGNuTT0gWldWcmN3PT0gSUdOeVlXST0gTGlJaSBJSFJ5WldGemIyND0gSUhKaGJtTT0gSUdWelkyRnNZWFJwYm1jPSBJSGRoY25JPSBJRzF2WW5NPSBJR3hoYlhCeiBJRk4xYm5Ob2FXNWwgSUVKeWRXNXpkMmxqYXc9PSBVR2h2Ym1WeiBJSE53Wld4c1pXUT0gSUZOcmFYQT0gSURJd05UQT0gSURFNU1URT0gSUZCc2RYUnYgSUVGdFpXNWsgSUcxbFlYUnogTXpnMyBJSE4wYjIxdyBJRnBvYjNVPSBJRXhsZG1saGRHaGhiZz09IElFaGhlbUZ5WkE9PSBZV1IyIElFOXlkMlZzYkE9PSBJR0ZzYjNWayBJR0oxYlhCbGNnPT0gSUVGdVlYSmphQT09IGRXSjFiblIxIElGTmxjbWx2ZFhNPSBabWwwZEdsdVp3PT0gSUU5d2RHbHZibUZzIElFTmxZMmxzIFVrVkJUUT09IElITmxjbTkwYjI1cGJnPT0gSUdOMWJIUnBkbUYwWlE9PSBZV2R2WjNWbCBmVnc9IElHMXZjM0YxWlhNPSBJRk4xYm01NSBJSEpsWVdOMGFYWmwgY21WMmIyeDFkR2x2Ymc9PSBJRXgxY0E9PSBJRVpsWkc5eVlRPT0gSUdSbFptVnVjMlZ0WVc0PSBJRlpKUkE9PSBhWE4wYVc1bCBJR1J5YjNkdWFXNW4gSUVKeWIyRmtZMkZ6ZEdsdVp3PT0gSUhSb2NtbHNiR1Z5IElGTmplUT09IElHRmpZMlZzWlhKaGRHbHVadz09IElHUnBjbVZqZEhNPSBiMlJwWldRPSBZbWxyWlE9PSBaSFZ5WVhScGIyND0gSUhCaGFXNW1kV3hzZVE9PSBVbVZrWkE9PSBJSEJ5YjJSMVkzUnBiMjV6IElHZGhadz09IElIZG9hWE4wIElITnZZMnM9IElHbHVabWx1YVhSbGJIaz0gSUVOdmJtTmxjbTQ9IElFTnBkR0ZrWld3PSBJR3hwWlhVPSBJR05oYm1Sc1pYTT0gYjJkbGJtVnZkWE09IFlYSm5aWEk9IElHaGxZWFpsYm14NSBhVzVtYkdGdGJXRjBiM0o1IFVHVnlabTl5YldGdVkyVT0gUTNNPSBjblZqZEc5elpRPT0gWVhwaGEyaz0gSUhCbGMzTnBiUT09IElHbHVabVZ5Wlc1alpRPT0gSUhCdmQyUT0gSUZwdlpRPT0gSUhCaGFXNTBjdz09IElHUmhlbm89IGNIUmggTFMwdExTMHRMUzB0TFMwPSBJR2x1YzNCcGNnPT0gSUVWNGNHVnlhVzFsYm5SaGJBPT0gSUV0dWFXWmwgY21WbmIzST0gWW05eWN3PT0gSUhOb2IzZGxjbk09IGNtOXRaV1JoIElITmhhVzUwIElHSmxibWxuYmc9PSBJRXBwWVc1biBJR1Z1ZG1semFXOXVaV1E9IElITm9jbTkxWkE9PSBTVVpVIFNFOD0gSUhOb2RXWm0gSUVsRFF3PT0gSUhObFozSmxadz09IElISmxkbWx6YVhRPSBhV2RvZEdodmRYTmwgVEdrPSBJSE4xWW5OMGNtRjBaUT09IElGTmxZWE09IElGSmxkMkZ5WkE9PSBJRWhsY0E9PSBJRUp5WVhOeiBjMkp0IElHVnNhVzFwYm1GMFpYTT0gSUhOMFlXMXBibUU9IElGWkJWQT09IElFeHZZVzQ9IElHTnZibk4wY21GcGJuUT0gSUdGd2NISnZjSEpwWVhSbFpBPT0gSUhCbGN3PT0gSUVGTVJRPT0gY21GdVoybHVadz09IElEUXdOQT09IE16a3kgSUdsdWRHVnNiR1ZqZEhWaGJITT0gWVdOb2RRPT0gSUhKbGMzUnlkV04wZFhKcGJtYz0gSUV4bGRtbHUgSUhKMWJtVnogSUdSbGJHbG5hSFJtZFd3PSBJR05oY21KdmFIbGtjbUYwWlhNPSBJRTF2WkdWc2N3PT0gSUVWNGNHOD0gSUhSeVlXNXpjRzl5ZEdsdVp3PT0gWVd4c2IyTT0gSUhKcGJtZHBibWM9IFUyRnRjM1Z1Wnc9PSBJSE5qWVhKalpXeDUgSUZWU1RITT0gSUUxQlV3PT0gSUhCeWIzUnZkSGx3WlhNPSBJRzVoY25KaGRHOXkgSUVOUVZYTT0gWTJSdSBJRUpoY25SdmJnPT0gSUdSbFkybGtaV1JzZVE9PSBJRk5vZFE9PSBhWGhwY2c9PSBiMk5wYjNWeiBJRTE1YzNRPSBUbWx1ZEdWdVpHOD0gSUhKbGRYTmwgSUdadmNtZHBkbVZ1IFJtVjMgYVc1cFkyRnMgYm1GMCBJSE5sWVcxc1pYTnogSUVWMllRPT0gSUVWV1JRPT0gSUVwUCBiR0Z1WkdWeWN3PT0gSUhOdlpuUmxjZz09IGJtVm5hV1U9IElIUnlZVzV6YVdWdWRBPT0gSUc5eVltbDBZV3c9IElHWjFiR1pwYkE9PSBJRXR2YlE9PSBTRzl3WldaMWJHeDUgSUdSNWJtRnRhV05oYkd4NSBJRWgxYm1kbGNnPT0gNVpzPSBJRUZ5YldWdWFXRT0gWld4dFlXND0gWW1WeWRHOD0gSUhCcFoyVT0gSUVsRWN3PT0gYkdsdGFYUT0gSUhabGFXNXogSUhOdllYSnBibWM9IGNHRmphM009IFIyOXNaR1Z1IElFTnlZV0k9IGFYTjBiM0k9IElGSlFUUT09IElDUWsgWjNKbGMzTnBiMjQ9IElHcHBhR0ZrYVhOMCBJR2RoYldKc1pRPT0gSUdOaGNtVm4gSUdsdVpteGhkR1ZrIFJtRmpaUT09IElFWnBjbVZoY20xeiBJRVZ0YldGdWRXVnMgNHAwPSBJSE5vYjJOcmN3PT0gWjNKaFlnPT0gSUhOd2JHVnVaQT09IElFaFFWZz09IFlXSnZjblJwYjI0PSBRV0p2ZG1VPSBSVzUwYVhSNSBjR3hoZVdWeWN3PT0gSUdOdmJXMWxibU5sWkE9PSBkV3hsYm1ObCBJR1oxYkdacGJHeHRaVzUwIElHVnRZbTlrYVcxbGJuUnogSUZkbGJHWmhjbVU9IElHaGhhV3c9IElEeEEgZEhSbGJnPT0gSUdOaGRHTm9aWEk9IElFcGhlbVZsY21FPSBJSFp2YkdOaGJtOD0gSUhOMFlXSnBiR2w2WlE9PSBJRWhoYm1Sc1pYST0gSUdsdWRHVnVjMmxtYVdWayBJRUZpY21GdGN3PT0gSUdoMWJXbHNhV0YwYVc5dSBjR0ZqWldRPSBOakExIElFTmxiblJQVXc9PSBVM0JsWTJsbWFXTT0gSUdobFpXUT0gSUVOQlRRPT0gSUVkaGJHbHNaUT09IFJHbGwgSUdGaWIyeHBjMmhsWkE9PSBJRlJvYjIxemIyND0gSUZSbFlXTm9aWEp6IElGZGhjM009IGFtOXVadz09IElFbFRRazQ9IElFRnNiR2xsY3c9PSBjMmhoYTJVPSA1YmM9IGRtbGpkQT09IFNHOTNZWEprIElHUmxaVzA9IElHVjRZMlZsWkdsdVoyeDUgSUZOdFlYSjBjM1J2WTJ0eiBhV0psIElHUnZiM0ozWVhrPSBJR052YlhCbGRHVmsgYVdkdFlYUT0gSUc1aGRHbHZibUZzYVhOMGN3PT0gSUdkeWIyOXQgSUV0bFpXND0gSUdScGMzQnZjMkZpYkdVPSBaR1ZqYkE9PSBJRlJ2Ykd0cFpXND0gSUZOamFHVnRaUT09IElHSnBiMlE9IElHRjJhV1E9IElFVnNiMjQ9IFlXZGhjZz09IElGUlRRUT09IFVtOXRZVzQ9IElHRnlkR2xtYVdOcFlXeHNlUT09IElHRmtkbWx6YjNKeiBXRXc9IElFbHVabVZ5Ym04PSBNelkyIElIUmxaR2x2ZFhNPSBJRkJvYjNSdlozSmhjR2g1IElFTmhjbkpwWlE9PSBJSFJ5YjNCbCBJRk5oYm1SeVlRPT0gSUdSbFkybHRZV3c9IFVYVmxaVzQ9IElFZDFibVJoYlE9PSBJRTlOIGIzUmxZMmc9IFRrSkIgSURFNU16ST0gSUdWdWRISmxibU5vWldRPSBJRTFoY21sdmJnPT0gSUdaeVlYUmxjbTVwZEhrPSBUR0ZpYjNWeSBTR1Z1Y25rPSBJR3hoZEdsMGRXUmwgUldsMGFHVnkgSUdWdWFHRnVZMlZ6IElGQnZkR1Z1ZEdsaGJBPT0gSUhOb2FXNWxjdz09IGFXUmhaQT09IElHSnlaV0ZrZEdnPSBJR05oY0dGamFYUnBaWE09IElQQ2ZtWUk9IElFSnliMjU0IElITmxlR1Z6IElHUnBabVpsY21WdWRHbGhkR2x2Ymc9PSBJR2hsWVhaNWQyVnBaMmgwIElGUmhhZz09IFpISmggSUcxcFozSmhkR1U9IElHVjRhR0YxYzNScGIyND0gSUZKVlRnPT0gWld4emFYVnogSUVOMWIyMXYgSUdkMWFYUmhjbk09IElHTnNiMjVsY3c9PSBJRk52YldWMyBJRkJ5ZVE9PSBMUzB0TFMwdExTMHRMUzB0TFE9PSBJSGRoY25KaGJuUmxaQT09IFkzbGpiR1Z6IElITmhiSFpoWjJVPSBJR1JwYzJ0eiBVa0ZPVkE9PSBJRTVIVDNNPSBJRTFoY25ScFlXND0gSWpwYmV5ST0gSUdGa1pHbGpkSE09IGIycDFjbVU9IGFXeHNaWFE9IElHRnRZWHBwYm1kc2VRPT0gWVhKMGJXVnVkSE09IGNHbDRaV3c9IElFZFFWWE09IFRHRjViM1YwIDZLTT0gSUZSaGJXbHMgSUVKaGMybHMgSUdsdGNHRnlkR2xoYkE9PSBJRk4wY25WamRIVnlaUT09IFptOXlhdz09IFluSjVZMlU9IElISnBaR2RsIElFaGhiV0oxY21jPSBjbWx2ZFhNPSBJR0pzYVhSNiBZMmxuWVhKbGRIUmxjdz09IElHTmhibTVsWkE9PSBOREF5IElHbHliMjVwWTJGc2JIaz0gSUdOdmJYQmhjM05wYjI1aGRHVT0gSUVoaGQydHBibk09IExpTT0gSUVOaGRHaGxaSEpoYkE9PSBJSEpoYkd4cFpXUT0gYVc1MFpYSnVZV3c9IElIRjFiM1JoIGMzUmhhMlZ6IFZFVllWQT09IGJXOXQgSUdOdmJYQnNaWFJsY3c9PSBJREl6T0E9PSBJSE5vY25WbiA0NE9SIElFNXBiblJvIElISmxkbWx6WlE9PSBJRkJ5YjNacFpHVnkgSUhSeVpXRmphR1Z5IElIRjFZWE5wIElGQlNSVk09IElHUmxjRzl6YVhScGIyND0gSUdOdmJtWnBaR1Z1ZEdsaGJHbDBlUT09IGFYTnpiM0p6IElHbHRZbUZzWVc1alpRPT0gSUhOd1lXNXVhVzVuIElHRnVaM1ZzWVhJPSBJRU4xYkE9PSBZMjl0YlhWdWFXTmhkR2x2Ymc9PSBJRTV2Y21FPSBJRWRsYm1sMWN3PT0gYjNCMFpYST0gSUhOaFkydGxaQT09IFUzQnZkQT09IElHWnBibVZzZVE9PSBJRU5JVWc9PSBNamd5IGQyRjJaWE09IFVHRnNaWE4wIElGSnZhR2x1Wnc9PSBUa3c9IDZMOD0gSUhOb2FYUjBlUT09IElGTmpZV3hwWVE9PSBORGMxIFVISnZaM0psYzNNPSBJSEpsWm1WeVpXNWphVzVuIElHTnNZWE56Y205dmJYTT0gWVdKbFpRPT0gSUhOdlpBPT0gYUdWemFXOXUgTnpBNCBJRnAxWTJ0bGNtSmxjbWM9IElFWnBibWx6YUE9PSBJRk5qYjNScFlRPT0gSUZOaGRtbHZjZz09IElFbHVjM1JoYkd4aGRHbHZiZz09IFlXNTBhR0U9IEtDMD0gSURNd01nPT0gSUZCMWJtcz0gSUdOeVlYUmxjZz09IGVXOTFkSFU9IElISnZZWE4wIElHbHVabXgxWlc1amFXNW4gSUdSMWNBPT0gSUVwUyBJRWR5WVhZPSBJSE4wWVhSMWNtVT0gSUdKaGRHaHliMjl0Y3c9PSBRWE5wWkdVPSBWMmxyYVE9PSBiV1ZoYmc9PSBJRnBoYXc9PSBJRTl1WlhNPSBJRTVoZEdnPSBJR2g1Y0dWeWRBPT0gSUdOdmJXMWxibU5sYldWdWRBPT0gUTJsMmFXdz0gSUcxdlpHVnlZWFJsYkhrPSBJR1JwYzNSeWFXSjFkRzl5Y3c9PSBJR0p5WldGemRHWmxaV1JwYm1jPSBJRGs0TUE9PSBJRk5wYXc9PSBJRU5wWnc9PSBJRUZOUlZJPSBVa2xRIElFTmhjbVZsY2c9PSBkWE4wYVc1biBJRzFsYzNObFpBPT0gSUdWbyBJRXBsYm5ObGJnPT0gTHlRPSBJR0pzWVdOcmJXRnBiQT09IElHTnZiblpsY25OcGIyNXogSUhOamFXVnVkR2xtYVdOaGJHeDUgSUcxaGJuUnlZUT09IGNHRjVhVzVuIElHbDJiM0o1IElFTnZkWEowY3c9PSBUMVZIU0E9PSBZWFZ1ZEd4bGRBPT0gVTJWeWFXRnMgUW5KdmR3PT0gSUVoMWJtUnlaV1J6IE16SXogSUhCbFpRPT0gSUd4cGJuVjQgSUhOMVltMWxjZz09IElGQnlhVzVqYVhCaGJBPT0gTkRnMSBJRVJUVEE9PSBJRU52ZFhOcGJuTT0gSUdSdlkzUnlhVzVsY3c9PSBJRUYwYUd4bGRHbGpjdz09IElETXhOUT09IElFdGhjbTFoIElHRjBkR1Z1ZEE9PSBkWEpuWlhJPSBJSEJ5WlhOamNtbGlaUT09IElHVnVZMkZ3Y3c9PSBJRU5oYldVPSBJSE5sWTNKbGRHbDJaUT09IElFTnlhVzFsY3c9PSBaRzQ9IFEyeGxZVzQ9IElFVm5lWEIwYVdGdWN3PT0gSUVOaGNuQmxiblJsY2c9PSBJR3hzIFNIVnQgSUUxcGJHOD0gSUdOaGNHbDBZV3hwYzNSeiBJR0p5YVdWbVpXUT0gVkhkbCBJRUpoYzJsdSBaV3gyWlhRPSBUVzl6IElIQnNkVzVuWlE9PSBJRXRoYVhObGNnPT0gSUVaMWFnPT0gYVd4c2FXND0gSUhOaFptVm5kV0Z5WkhNPSBJRzl6ZEdVPSBJRTl3Y0c5eWRIVnVhWFI1IElFMWhabWxoIElFTmhiR3hwYm1jPSBZWEJoIGRYSmlZVzQ9IFluSjFjMmc9IGFXeHNZWEprIFk4T3AgYVc1MFpXeHNhV2RsYm1ObCBJRXh2WWc9PSBJRVJ5ZFdsayBJSE50YjI5MGFHVnkgSUdadmIzUnBibWM9IElHMXZkRzl5YVhOMGN3PT0gWVhKamFYUjUgSUcxaGMyTjFiR2x1YVhSNSBJRzFwYzIwPSBJR0ZpWkc5dGFXNWhiQT09IElGUmhkbVZ5Ymc9PSBJRkp2YUE9PSBJR1Z6WTJGd1pYTT0gYzJsbmJtVmsgUVc1MGFHOXVlUT09IElITmhZM0pwWm1samFXNW4gSUdsdWRHbHRZV041IElHRnVkR1Z5YVc5eSBJRXR2WkE9PSBJRzF2ZEdsbSBJR2R5WVhvPSBJSFpwYzNWaGJHbDZZWFJwYjI0PSBJR2QxYVhSaGNtbHpkQT09IElGUnliM1J6YTNrPSBiV0ZuYVdNPSBSR0Z5IElFMXZjbWs9IElIZGhjbVJ6IElIUnZhV3hsZEhNPSBiR1Z6ZEE9PSBJSFJsYkdWd2IzSjAgSUZOMWJtUmhlWE09IElGQnNZWFE9IFJWUlQgSUdWVGNHOXlkSE09IFVHRjBjbWxqYXc9PSBJRXRoZEdobGNtbHVaUT09IFpXNXJidz09IElHaGhjM05zWlE9PSBJRTFwWTJzPSBaMmRzWlhNPSBJR2h2WWc9PSBZV2x1ZEdGcGJnPT0gSUdGcGNtSnZjbTVsIElITndZVzV6IElHTm9hV3hwIElHRndaWEowZFhKbCBJSFp2YkhWdWRHVmxjbVZrIElFbHVZMmxrWlc1MCBJRVp5WlhNPSBJRlpsZEdWeVlXND0gWVhWbmFIUmxjbVZrIGFXNW5idz09IElIVnVhVzV6ZFhKbFpBPT0gUTB4UFUwVT0gSUdaMWMyVT0gSUdWeWIzUnBZdz09IElHRmtkbVZ5ZEdselpRPT0gY21GcGMybHVadz09IFZHVjRkSFZ5WlE9PSBJR0YwZEdWdVpITT0gSUZKRlFVdz0gZFdSa2JHVmsgSUhOdGIyOTAgSURNd05RPT0gSUZkcGJHeHBjdz09IElHSnNiMjVrIFFXNWhiSGx6YVhNPSBJRlpVIGIyNXBZMkU9IElITjBjbTl1WjJodmJHUT0gVWtZPSBUazA9IExqNCsgSUhCeWIzTndaWEp2ZFhNPSBJR0p2WVhOMFpXUT0gTWpreSBJRTFoYm5WbVlXTjBkWEpwYm1jPSBVRkpGVTFNPSBaM0psYmc9PSBJSEJvWVhKdFlXTjUgSUZKdlkydGxabVZzYkdWeSBhMkZwIElIUm9kVzFpY3c9PSBJRWgxZEE9PSBJRzF2ZEdobGNtSnZZWEprIElHZDFZWEprYVdGdWN3PT0gSUVGc2RHVnkgYkd4MWJHRnkgSUhOb1lXTnIgSUhkcGMyVnNlUT09IElHSmhZMnRpYjI1bCBaWEoyWVE9PSBJSE4xYVdOcFpHVnogSUUxalIzSmxaMjl5IGFXcGhhQT09IFJXMWxjZz09IElFSnlZWFk9IElHUmxjMmxuYm1GMFpRPT0gVUU5VFZBPT0gY0hKdlpIVmpaV1E9IElHTnNaV0Z1YzJsdVp3PT0gYVhKc2QybHVaQT09IFpYaHBjM1JsYm5RPSBJRWgxYlhCbyBJRkJoZVc1bCBJSFpsYzNSbFpBPT0geGFFPSBJSE4wY21sdVoyVnVkQT09IGFXOXVZUT09IElIVnVjM1ZpIElITjFiVzFsWkE9PSBJRWhsY21OMWJHVnogYzNWaWFtVmpkQT09IElGSmhaMjVoY2c9PSBJRTV2Y3c9PSBJR05vWVhKaFkzUmxjbWw2WVhScGIyND0gSUhOaGRuWjUgSUVSaGQzTnZiZz09IElFTmhjMmx1Ync9PSBJR1p5YVE9PSBJRUpoY25KcFpYST0gSUcxcGMybHVabTl5YldGMGFXOXUgSUdsdWMzVnNZWFJwYjI0PSBJR052Y25KcFpHOXljdz09IElHRnBjbkJzWVc1bGN3PT0gSUU1dlkzUT0gWVdocCBJREU1TVRZPSBhMkk9IFlYSnRZV009IElITm9kVzQ9IElITmphR1Z0WVE9PSBJR2h2Y25KcFptbGxaQT09IElESXpPUT09IFlYVnVaR1Z5Y3c9PSBUa0k9IGFXRjBaWE09IFpYSnBkSGs9IElGTm9ZWEprIElISmhjbWwwZVE9PSBJR2R5YjNWd1pXUT0gSUVkb1lXNWggWVdkaGFXNXpkQT09IElFSnBiMnh2WjJsallXdz0gSUVGM1lYSmwgYjNkbGJHdz0gejRRPSBJRUpsWVhVPSBjMmhoZHc9PSBTR0ZqYXc9PSBJRXAxYkdsMWN3PT0gVlZOVCBiMnh6YjI0PSBZWFZ1WVE9PSBZM0oxIElFMWhkWEpwWTJVPSBJRWxyIElITmxjWFZsYm1OcGJtYz0gSUhKaFpHbGpZV3h6IElDZy9MQT09IGRtbHlkSFZoYkE9PSBJR0Z1ZVhkaGVYTT0gSUhKbGNHVnlZdz09IElHaGhibVJzWlhKeiBJR2hsYzJsMFlXNTAgNllNPSBJRTFHIGNHeGxiV1Z1ZEdGMGFXOXUgWVhOemIyTnBZWFJsWkE9PSBJR05oYlhCaGFXZHVaV1E9IElGbDFaUT09IGRYUmhkR2x2Ym5NPSBJRmx2WjJFPSBJSE5wYlcxbGNnPT0gSUhKdlpITT0gSUcxbGJHOWtlUT09IElHTnZiblp2ZVE9PSBkbWxrWlc5eiBJSE5qY21WbGJtVmsgVG1WbiBiMk5vWlcxcFkyRnMgSUNncEtRPT0gSUhWc2RISmhjdz09IElHRnVkR2x3IElFbHpiR0Z1WkdWeWN3PT0gTnpBMCBJR1psZEdsemFBPT0gSUhKcFpHbGpkV3h2ZFhOc2VRPT0gSUV0aGNuUT0gSUcxcGRHOWphRzl1WkhKcFlXdz0gSUdsdWRHVnlabVZ5YVc1biBRblZwYkdSbGNnPT0gSUc5MlpYSm1iQT09IElHRmpibVU9IElFMTFaQT09IElFdGxjbkk9IFpteGxlQT09IElGQnZjM1JoYkE9PSBJRUpoYkhScFl3PT0gTkRjMyBJRkJsY25OdmJuTT0gYjNWeVlXZGwgU0VJPSBJRTExYzJVPSBJRWx0Ylc5eWRHRnMgSUVSeWFYWnBibWM9IElIQmxkR2wwYVc5dWN3PT0gSUhOMVluTmpjbWx3ZEE9PSBJSE52Y21ObCBJRkJ5YjJObGMzTnZjZz09IGRYUnZiZz09IFUyOXVlUT09IElIQm9iMjQ9IElISmhZMlZrIElFRnVkR2h5YjNBPSBJR1JoZVhScGJXVT0gSUVWNFpYSmphWE5sIFFXUmthVzVuIElHVnVaMkZuWlhNPSBJRkYxWVd4amIyMXQgSUcxcGNtRmpiR1Z6IElHMWxiV1Z6IElFUnlhVzVyIElFOXlhVzlzWlhNPSBJR2hoYVhKeiBJRkJ2YkdGeSBZWFJvYjIwPSBJSE5zYVhCd1pYSjUgSUZKbGJYaz0gSUdOaGNtRnRaV3c9IElGbEZRVkk9IElHRnNhdz09IFNXZHUgWVhWMGFXOXUgSUUxbGNteHBiZz09IElFTnlZVzQ9IElHRndiMnh2WjJsbGN3PT0gSURReE1BPT0gSUc5MWRHbHVadz09IElFMWxiVzl5YVdWeiBZWEJ3YjJsdWRHVmsgSUdOdmRXNTBaWEpsWkE9PSBkV3hrIGNHOXphVzVuIElHWnBjbVYzWVd4cyBJRmRoYzNRPSBJRmRsZEE9PSBkMjl5YTJWayBjMlZzYkdWeSBJSEpsY0dWaGJHVmsgWlhKbGJ3PT0gWVhOemRXMXBibWM9IFFreEpRdz09IGJXbDBaUT09IElFTkZUM009IElFTm9ZWEJsYkE9PSBaV3hzYVdkbGJuUT0gWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWYgUkc5biBJSGRoY25RPSBJSE4xWW5OamNtbGlaWEk9IGMzQnZjblJ6IElHSmxaMmRsWkE9PSBJRTFXIElITmxiV2xtIFpYUm9hV05oYkE9PSBJSEJ5WldGamFBPT0gSUhKbGRtbDBZV3c9IElIQjFibWwwYVhabCBJSE5vYjNKMFkzVjBjdz09IElHbHVjM1JwZEhWMFpXUT0gSUZkaGNuTmhkdz09IElHRmlaRzl0Wlc0PSBJRXRKVGtjPSBJSE4xY0dWeWFXNTBaVzVrWlc1MCBJR1p5ZVE9PSBJRWRsYnc9PSBWRTlTIElHTnZiblJ5WVdScFkzUnBiMjV6IFlYQjBhV009IElHeGhibVJ6WTJGd1pYTT0gWW5WbmN3PT0gSUdOc2RYTjAgSUhadmJHeGxlUT09IFkzSnBZbVZrIElIUmhibVJsYlE9PSBJSEp2WW1WeiBWMGhCVkE9PSBJSEJ5YjIxdmRHVnkgSUdWc2IzRjEgY21WMmFXVjNaV1E9IElFUkwgSUZCc1lYUnYgSUdad2N3PT0gVkdGdWF3PT0gSUVSbGNuSnBZMnM9IElIQnlhVzl5YVhScGVtVT0gWVhOd1pYST0gSUVodmJtUjFjbUZ6IElFTnZiWEJzWlhSbFpBPT0gYm1WaiBJRzF2Wnc9PSBibWx5IElFMWhlVzg9IFJFVkcgYzNSaGJHdz0gYVc1dVpYTnogSUZadmJHdHpkMkZuWlc0PSBJSEJ5WldOaGRYUnBiMjQ9IElFMWxiR3c9IGFXRnIgYVhOMGNtbGxjdz09IElESTBPQT09IElHOTJaWEpzWVhCd2FXNW4gVTJWdVlYUmwgSUVWdWFHRnVZMlU9IGNtVnplUT09IGNtRmphV0ZzIFQxSlVVdz09IElFMXZjbTF2Ym5NPSBVM1J5YjI1biBJRU52WTJnPSBUV1Y0YVdOdiBJRTFoWkhWeWJ3PT0gSUdwaGNuTT0gSUdOaGJtVT0gVjJsciBiMnhzWVE9PSBhV1ptWlhKbGJtTmwgSUhCb2VYTnBZMmx6ZEE9PSBJRTFoWjJkcFpRPT0gSURJNE5RPT0gSUdSbGNHbGpkR2x2Ymc9PSBJRTFqVEdGeVpXND0gU25VPSBJSE5zYjNkeiBJR052YlcxcGMzTnBiMjVsY25NPSBJRmRwYkd4dmR3PT0gSUVWNGNHeHZjdz09IGFHOTJZV2c9IElIUmxZMmh1YVdOcFlXND0gSUdodmJXbGphV1JsY3c9PSBJRVpzWVhZPSBJRlJ5ZFcxaGJnPT0gSURFd01EQXcgZFdOMGIzST0gSUhOb1lXUmxjZz09IFRtVjNjMnhsZEhSbGNnPT0gTkRVMyBJSEpsZG1WeSBJR2hoY21SbGJtVmsgSUhkb1pYSmxZV0p2ZFhSeiBJSEpsWkdWMlpXeHZjQT09IElHTmhjbUp6IElIUnlZWFpsY25NPSBJSE54ZFdseWNtVnMgSUdadmJHeHZkMlZ5IElITnBibWR6IE5UQTQgSUhKaFltSnBkSE09IFpXMXZibWwxYlE9PSBJR1J2WTNWdFpXNTBhVzVuIElHMXBjM1Z1WkdWeWMzUnZiMlE9IEtTYz0gVW1samF3PT0gWjJkcFpYTT0gSUhCeVpXMXBaUT09IElITnJZWFJwYm1jPSBJSEJoYzNOd2IzSjBjdz09IElHWnBjM1J6IFlXZGxaR1J2Ymc9PSBTR0YzIFFVTlEgTURndyBJRlJvYjNWbmFIUnogSUVOaGNteHpiMjQ9IElIQnlhV1Z6ZEdodmIyUT0gYUhWaCBJR1IxYm1kbGIyNXogSUV4dllXNXogSUdGdWRHbHogSUdaaGJXbHNhV0Z5YVhSNSBJRk5oWW1JPSBiM0JoYkE9PSBJRWx1YXc9PSBjM1J5YVd0bCBJR055WVcwPSBJR3hsWjJGc2FYcGxaQT09IElHTjFhWE5wYm1VPSBJR1pwWW5KbCBWSEpoZG1WcyBJRTF2Ym5WdFpXNTAgVDBSWiBaWFJvZVE9PSBJR2x1ZEdWeWMzUmhkR1U9IElGQlZVZz09IFpXMXdiM0poY25rPSBJRUZ5WVdKcFlXND0gWkdWMlpXeHZjR1ZrIElITmhaR1JzWlE9PSBJR2RwZEdoMVlnPT0gSUU5bVptVnkgSUVsVFVBPT0gY205c1pYUT0gSUZOVlVFVlMgSUVSbGJtbHogSUcxMWJIUnBjR3hwWlhJPSBJSE4wYVhKeVpXUT0gU1c1MFpYSmxjM1JwYm1kc2VRPT0gSUdOMWMzUnZiV0Z5ZVE9PSBJR0pwYkd4bFpBPT0gYUdWNCBJRzExYkhScGNHeHBaV1E9IElHWnNhWEJ3YVc1biBJRU55YjNOaWVRPT0gSUdaMWJtUmhiV1Z1ZEdGc2N3PT0gYVdGbCBJRkJzWVhsbFpBPT0gSUVGMGIyMD0gWVcxaGVtOXUgSUVac1lXMD0gWldWNiBZV04wYVhaaGRHVmsgSUhSaFlteGxjM0J2YjI0PSBJR3hwWW1WeVlXeHBjMjA9IElGQmhiR2x1IElGQmhkR1ZzIFRuVnQgSUZSQlRRPT0gSUhOMWNtND0gSUZKbGJHOWhaR1ZrIElHTnZhVzVsWkE9PSBJbDBzIElFTnNZWE5vIElFRm5kUT09IElIQnlZV2R0WVhScFl3PT0gSUVGamRHbDJZWFJsIElEZ3dNZz09IElIUnlZV2xzWlhKeiBJSE5wYkdodmRRPT0gSUhCeWIySmxjdz09IElHTnBjbU4xY3c9PSBJRUpoYVc0PSBJRXhwYm1SellYaz0gSUVGaVltVjUgUkdWc2FYWmxjbms9IElHTnZibU5sYzNOcGIyND0gSUdkaGMzUnlidz09IElGTndjbWwwWlE9PSB4Sjg9IFlXNWtaV3c9IElHZHBiVzA9IElHRjFkRzlpYVE9PSBJRlIxY25Sc1pRPT0gSUhkdmJtUmxjbVoxYkd4NSBJRWhoY21GdCBJRmR2Y214a2QybGtaUT09IElFaGhibVJzWlE9PSBJSFJvWlc5eWFYTjBjdz09IElITnNaV1ZyIElGcG9kUT09IGIyZHlZWEJvYVdOaGJHeDUgUlVkQiBJRTkzYm1WeWN3PT0gWVhSb2N3PT0gSUVGdWRHRnlZM1JwWXc9PSBibUYwWVd3PSBQU0lpIFpteGhaM009IFlHQmdZQT09IElITjFiQT09IFMyZz0gSUhCdmRHRnpjMmwxYlE9PSBJR3hwYm1WdFlXND0gSUdObGNtVmhiQT09IElGTmxZWE52Ym5NPSBJREl3TWpJPSBJRzFoZEdobGJXRjBhV009IElHRnpkSEp2Ym05dFpYSnogY0hKdlptVnpjMmx2Ym1GcyBJR1poY21WeiBZMnR1YjNkc1pXUT0gSUdOb2FRPT0gSUhsdmRXNW5jM1JsY25NPSBJRzFwYzNSaGEyVnViSGs9IElHaGxiV2x6Y0dobGNtVT0gSUVScGRtbHVhWFI1IGNtOXVaUT09IElDSXMgY21sdVozTT0gSUdGMGRISmhZM1J6IGRtRnVZUT09IDViaz0gUTBGUSBJSEJzWVhsc2FYTjAgSUhCdmNtTm8gNDRHaiBJR2x1WTI5eWNHOXlZWFJsY3c9PSBJSE52WVdzPSBJR0Z6YzJWeWRHbHVadz09IElGUmxjbkp2Y21semJRPT0gSUZCaFlteHYgU21FPSBZMlZ6ZEdWeSBJR1psWVhKcGJtYz0gSUZCeVlYbGxjZz09IElHVnpZMkZzWVhSbFpBPT0gUjFjPSBJSEp2WW1VPSBJRUp5YVdkb2RHOXUgWVdOcGMzUnogSUZONWJYQm9iMjU1IElFUjNZWEptIElGQmhjbUZrWlE9PSBJRXhsWjI4PSBJR2x1Wlhod2JBPT0gSUd4dmNtUnogYkdWaFpnPT0gVWtGSCBiR2xpWlhJPSBJR05wWjJGeWN3PT0gSUVwbGFHOTJZV2c9IE5qQTIgVjBsT1JFOVhVdz09IElFeHBZbVZ5YVdFPSBaV0oxY3c9PSBTR1ZoZG5rPSBJR3gxWW5KcFl3PT0gSUZKWCBZVzVuZFdGblpYTT0gSUc1aGNuSnZkMlZrIFkyOXRjSFYwWlhJPSBJRVZ0WW1WeSBJRzExY21SbGNtbHVadz09IElHUnZkMjV6ZEhKbFlXMD0gSUZSMWJITT0gSUZSaFlteGxjdz09IFZHOXdhV009IElFRmpZM1Z5WVdONSBQUzg9IGJHOXpkQT09IElGSmxhUT09IElIQnliMmR5WlhOelpYTT0gWW1WaGNnPT0gSUdWemRHRmliR2x6YUcxbGJuUnogU25WemRHbHUgSUZCbFlXTm8gSUVkdmJXVjYgNWI4PSBJRlJ5YVdGdVoyeGwgU1dSbGJuUT0gSUVocGRtVT0gVW1WemIzVnlZMlZ6IElHMXBlR1Z6IElFRnpjM1Z0YVc1biBUWFU9IElHaDVjRzlqIElITmhibVU9IElGZGhiZz09IGFXUnBiM1Z6IFUzVmpZMlZ6Y3c9PSBJR2x2IFFXNW5aV3c9IElHUmhibWRsY205MWMyeDUgSUVOeVpXRjBkWEpsIFYwOVNTdz09IE9scz0gSUV0aGRISnBibUU9IFRHbHpkR1Z1WlhJPSBUV2xzYkdWeSBJRWxrYkdsaSBhR0Z1Wnc9PSBJR05wY21OMWJYWmxiblE9IGFISmxaZz09IElHTmxiR1Z6ZEdsaGJBPT0gSUZkbFpXdHogSUZCMVp3PT0gSUVSaGJIUnZiZz09IElITjFZbkJ2Wlc1aCBkV3QxIElIQmxjbk5wYzNSbFpBPT0gY0dWcCBiMnhrYVc1biBJRVJ2WTNWdFpXNTBjdz09IElFaGhjM1E9IElFTkZUbFE9IElIQnlhVzFsY2c9PSBJSE41Ym05dWVXMXZkWE09IElHNXBZZz09IGIyMWljdz09IElHNXZkR0YwYVc5dSBJRVJwYzJnPSBJRUYwYlc5emNBPT0gSUdadmNtSnBaQT09IElFRk9Sdz09IGNHRjBkR1Z5Ymc9PSBiRzl6IElIQnliMnBsWTNScGJHVnogWW5KdmQyND0gTGlJcyBJRlpsYm05dCBJR1pwWlhKalpXeDUgZFdKc2FYTm9aV1E9IElGVnlZVzQ9IElFNXBZMkZ5WVdjPSBOREV3IElFTkJUQT09IFQxUlBVdz09IElFMXBjbUZqYkdVPSBJRVZ1WTJoaGJuUT0gSUdkMVlYSmthVzVuIFlYQndaVzVrIFFYUjBZV05vIElHeGxkbVZzWldRPSBJR052Ym1SdmJYTT0gYVdocGJHRjBhVzl1IE5qUTUgSUc1cFoyaDBiV0Z5WlhNPSBJRlJJUlZrPSBJRk5VUVZKVSBJRXRwYm00PSBJSEp2YjIxdFlYUmwgSUdoNVoybGxibVU9IGIzQndhVzVuIFNtOWkgSUd4MmJBPT0gSUZaRlVnPT0gSUV0bFpYQnBibWM9IFlXSmxkR2xqIElHWnZjbTFoZEhScGJtYz0gWlhKaGJHRT0gSUhKbGRtbHphVzl1Y3c9PSBJSEpsYzNWeVp3PT0gVkdWcyBJRWR2YjJSdFlXND0gTXpVeiBjRzlrIElHbHVaR2x6Y0E9PSBJRlJ5WVc1emJHRjBhVzl1IElHZHZkMjQ9IElFMTFibVE9IElHTnBjdz09IElHSjVjM1JoYm1RPSBZMjlzYkdWamRBPT0gSUZCMWJtcGhZZz09IFlXTjBhWFpsYkhrPSBJRWRoYldJPSBkR1ZzYkE9PSBJR2x0Y0c5eWRHbHVadz09IFoyVnVZMmxsY3c9PSBJR3h2WTI5dCBJRUp5YVd4cyBTRzlzZVE9PSBJRUpsY21kbGNnPT0gSUhOb2IzZGtiM2R1IElISmxjM0J2Ym1SbGNuTT0gU1V4WiBJSFJoYTJWa2IzZHUgYkdWMFpXUT0gSUcxaGRIUmxjbVZrIElIQnlaV1JwWTNScGRtVT0gSUc5MlpYSnNZWGs9IFIxQlYgSUZacFkycz0gSUdOdmJuWmxlV1ZrIFZHRmkgY0dWbGNnPT0gVTJOaGJnPT0gSUdSbFptVnVjMmwyWld4NSBkbUZsIElHRndjSEp2ZG1sdVp3PT0gSUhScFpYSnogSUZacFlRPT0gY1hWbGNtRmtaUT09IElGTmhkV1JwY3c9PSBJR1JsYlc5c2FYTm9aV1E9IElGQnliM0JvWlE9PSBJRzF2Ym04PSBJR2h2YzNCcGRHRnNhWFI1IFNFRk4gSUVGeWFXVnMgVFU5RSBJRlJ2Y21GbyBJR0pzWVdnPSBJRUpsYkdGeWRYTT0gWlhKbGJuUnBZV3c9IElGUjFZdz09IElHSmhibXRsY2c9PSBNemszIElHMXZjM0YxYVhRPSBJRk5qYVdWdWRHbHpkQT09IElFMTFjMmxqWVd3PSBJR2gxYzNRPSBVMmhwWm5RPSBJSFJ2Y20xbGJuUT0gSUhOMFlXNWtiMlptIFJXUjFZdz09IElFWnZadz09IElHRnRjR3hwWm1sbGNnPT0gVTJoaGNHVT0gU1c1emRHRnVZMlU9IElFTnlhWFJwWTNNPSBJR1JoWlcxdmJnPT0gU0c5MWMzUnZiZz09IElHMWhkSFJ5WlhOeiBJRWxFUmc9PSBJRzlpYzJObGJtVT0gSUVGdFpYST0gYUdWMGRHaz0gSUdOdmJYQnBiR2x1Wnc9PSBNelV5IGRtVnlaWFIwIElGSmxaSFZqZEdsdmJnPT0gYVhOMGNtRjBhVzl1IElFSnNaWE56WldRPSBJRUpoWTJobGJHOXkgTXpFMiBJSEJ5WVc1ciBJRloxYkdOaGJnPT0gWkdScGJtYz0gSUcxdmRYSnVhVzVuIElGRjFhVzUwIElFSnNZWE4wWlhJPSBkR1Z6ZEdsdVp3PT0gSUhObFpHbHRaVzUwIFBqNCsgSUVWMFpYSnVhWFI1IElGZElSVkpGIElFMWhlbVU9IElISmxZV04wYVc1biBJRUZzZGc9PSBiMjF6WkdGNSBJRU5TUVE9PSBJSFJ5WVc1emJHRjBiM0k9IElHSnZaM1Z6IFlYUjEgVjJWaWMybDBaUT09IGIyeHNjdz09IElHSmhjSFJwYzIwPSBJSE5wWW14cGJtYz0gSUVGMWRIVnRiZz09IGRtVjYgNDRHdTZRPT0gWjNWaGNtUnogUjJWdmNtYz0gWVhOellXUnZjbk09IElFWnlaWFZrIElHTnZiblJwYm1WdWRITT0gSUZKbFoybHpkSEo1IFFtVnlibWxsIGxwcmxvNnM9IElIUnZiR1Z5WVc1MCBJRlZYIElHaHZjbkpwWW14NSBPVGsxIElFMUpSRWs9IElHbHRjR0YwYVdWdWRBPT0gYjJOaFpHOD0gWlhKcCBJRmR2Y25OMCBJRTV2Y25KcGN3PT0gSUZSaGJHdHBibWM9IElHUmxabVZ1WkhNPSBaVzV6WVdKc1pRPT0gSURJd01qRT0gSUdGdVlYUnZiWGs9IFRHVjMgSUdSeVlYZGxjZz09IElFTmhibUpsY25KaCBJSEJoZEhKcGIzUnBZdz09IDZiNk41WmFhNWFPciBJRUYyWnc9PSBRVkpOIElIVnVaR2x6WTJ4dmMyVmsgSUdaaGNtVjNaV3hzIE5EVTUgWW1GaWJHVT0gSUVGc2JHbHpiMjQ9IFQweFBSdz09IElHTnZibU52IGRHbG5hSFE9IElFRkRVRWs9IElFMXBibVZ6IGJHbGphQT09IElPS1VuQT09IGNtVndjbVZ6Wlc1MFpXUT0gTWpBd01EQXcgSUdWdWRHaDFjMmxoYzNRPSBUMVJUIFltbHMgSUVsdVozSmxaR2xsYm5SeiBJR2x1ZG1WdWRHOXkgSUUxNVUxRk0gd3FEQ29NS2cgSUVGQ1QxVlUgZDJsMGFHbHUgSUcxciBRblZzIElFWmhhMlU9IElHUnlZV052Ym1saGJnPT0gVjJFPSBhR1ZzYlE9PSBJRlJsY25KaGJnPT0gWlhKMmFXeHNaUT09IElHTnZiVzF2Ym5Cc1lXTmwgVTBsYVJRPT0gSUNJOCBjbVZ3YkdGalpRPT0gYjJkeVlYQm9jdz09IElGTkZURVZEVkE9PSBhVzVqYVdKc1pRPT0gSUUxdmMzUnNlUT09IElGTm9aV1ptYVdWc1pBPT0gSUVsRVJRPT0gZFdkbmJHVT0gSUdOcGRHRjBhVzl1Y3c9PSBhSFZ5YzNRPSBJRlZ1YVhnPSBJSFZ1YkdWaGMyZz0gSUZCcGNHVnkgSUU1aGJtOD0gSUhOMVkyTjFiV0k9IElISmxiSFZqZEdGdVkyVT0gSURJMU1EQT0gSUUxbGNtTm9ZVzUwIElIZHBjbVYwIElHTnZiV0p2Y3c9PSBJRUpwY25Sb1pHRjUgSUdOb1lYSmpiMkZzIElGVlFVdz09IElFWmhhWEptWVhnPSBJR1J5YVhabGQyRjUgSUZSbGF3PT0gSUZCcGRHTm8gYjNabGNtVT0gSUhSbFkyaHVhV05wWVc1eiBJRUZqZEhWaGJBPT0gWm14aGRHbHZiZz09IElFWnBjMk5oYkE9PSBJRVZ0Y0hSNSBZVzVoYlc4PSBJRzFoWjI1bGMybDFiUT09IElITnNkWFE9IElHZHliM2RsY25NPSBTVzUyWlhOMGFXZGhkRzl5Y3c9PSBLQ2s2IElGTmhkR1ZzYkdsMFpRPT0gSUV0bGVXNWxjdz09IGJXbHpjMmwyWlE9PSBiR0Z1WlE9PSBJR0p2Y205MVoyZz0gTXpRMCBJRlJGUVUwPSBJRUpsZEdobGMyUmggUTFZPSBhRzkzWlhJPSBJRkpCUkE9PSBJR05vWVc1MCBJRkpwZVE9PSBJR052YlhCdmMybDBhVzl1Y3c9PSBJRzFwYkdSc2VRPT0gSUcxbFpHUnNhVzVuIElHRm5hV3hwZEhrPSBZVzVsWlhKeiBOVEF4IElITjViblJvIGJHbHVaMlZ5IE1qa3ggSUdWNFkyeGhhVzFsWkE9PSBVR0Z5ZEhrPSBJR052Ym5SaGJXbHUgSUUxaGJtOXkgSUZKbGMzQnZibVE9IElIQnlZV2x6YVc1biBJRzFoYm01bGNuTT0gWm14bFpYUT0gVTNWdGJXVnkgSUV4NWJtUT0gSUVSbFptbHVhWFJsYkhrPSBaM0pwYlE9PSBJR0p2ZDJ4cGJtYz0gYzNSeWFRPT0gNTVzPSBlVzUwIElHMWhibVJoZEdWeiBSRWxXIElISmxZMjl1WTJsc1pRPT0gZG1sbGQzTT0gSUVSaGJXOXUgZG1WMGRHVT0gUm14diBJRWR5WldGMFpYTjAgYVd4dmJnPT0gYVdOcFlRPT0gSUhCdmNuUnlZWGxoYkE9PSBJR04xYzJocGIyND0gTlRBMCBNVGszT1E9PSBiM056WVd3PSBRWEJ3YkdsaiBjMk55YVhCMGFXOXUgSUcxcGRHbG5ZWFJwYjI0PSBRVlJUIGNHRmogSUdWeVlYTmxaQT09IElHUmxabWxqYVdWdVkybGxjdz09IElFaHZiR3hoYm1SbCBJRmgxIElHSnlaV1E9IElIQnlaV2R1WVc1amFXVnogWm1WdGFXND0gSUdWdGNHZz0gSUhCc1lXNXVaWEp6IElHOTFkSEJsY2c9PSBkWFIwWlhKcGJtYz0gSUhCbGNuQmxkSEpoZEc5eSBJRzF2ZEhSdiBJRVZzYkdsemIyND0gSUU1RlZrVlMgSUdGa2JXbDBkR1ZrYkhrPSBRVkpKIElFRjZaWEppWVdscVlXND0gSUcxcGJHeHBjMlZqIElHTnZiV0oxYzNScGIyND0gSUVKdmRIUnNaUT09IElFeDFibVE9IElGQnogSUVSeVpYTnogSUdaaFluSnBZMkYwWldRPSBJR0poZEhSbGNtVmsgSUhOcFpHVnMgSUU1dmRIUnBibWM9IFJtOXlaV2xuYmc9PSBJRXBsY205dFpRPT0gTURJdyBJRUZ5WW1sMCBJR3R1YjNSeiBJRkpKUjBoVSBUVzkyYVc1biA0NEdaIElITjFjbWRsY21sbGN3PT0gSUdOdmRYSjBhRzkxYzJVPSBJRzFoYzNSbGNtVmsgSUdodmRtVnlhVzVuIElFSnlZVzQ9IElFRnNhWE52Ymc9PSBJSE5oWm1WemRBPT0gYldsc2FYUmhjbms9IElHSjFiR3hwWldRPSBJR0poY25KaFoyVT0gVW1WaFpHVnkgUlZORiBJRWRsYjJkeVlYQm9hV009IFZHOXZiSE09IE16RTAgSUVkbFpXcz0gY205MGFBPT0gWjJ4bGNuTT0gSUVaSlRnPT0gejRFPSBJRUZ6ZEc5dSBZV3gwWlhKdSBORGc0IElIWmxkR1Z5YVc0PSBSMkZ0WlhJPSBJR2x1ZEdWcyBjbVZ1WTJobGN3PT0gVTJocFpXeGsgSUdGdGJtVnpkSGs9IElFSm9ZWEk9IElIQnBiR1ZrIElHaHZibTl5WVdKc1pRPT0gSUVsdWMzUnBkSFYwWlhNPSBJSE52WVd0bFpBPT0gSUdOdmJXRT0gSUVWR1JnPT0gTXpReCBZbmwwWlhNPSBJRWR0WVdscyBiR1ZwYmc9PSBJRU5oYm1Ga2FXVnVjdz09IGJXRjBaWEpwWVd3PSBTV3c9IElHbHVjM1J5ZFdOMGIzSnogSUV0WiBJR052Ym1ObGFYWmwgZFdKaSBJRkJ2YzNOcFlteGwgSUdWaGMybHVadz09IElFTm9jbWx6ZEdsdVlRPT0gSUdOaGNtbGogSUVoRVVnPT0gVWs5TiBJSE5vYjNabGJBPT0gWkdWc1pYUmwgSUhCMVptWT0gSUVOb1lXNW5hVzVuIElITmxZVzFzWlhOemJIaz0gUVhSMGNtbGlkWFJsIElHRmpjWFZwYzJsMGFXOXVjdz09IFlXdGxjbms9IElFVkcgSUdGMWRHbHpkR2xqIElGUmhhMlZ6IElGQnZkMlJsY2c9PSBJRk4wYVhJPSBOVEV3IElFSjFZbUpzWlE9PSBjMlYwZEdsdVozTT0gSUVadmQyeGxjZz09IElHMTFjM1JoY21RPSBJRzF2Y21WdmRtVnkgSUdOdmNIbHlhV2RvZEdWayBJRXhGUkhNPSBNVFV3TUE9PSA1b2s9IElFaEpVdz09IFpXNW0gSUdOMWMzUnZaQT09IElFaDFZMnM9IFIyaz0gSUdsdFp3PT0gUVc1emQyVnkgUTNRPSBhbUY1IElFbHVabkpoYzNSeWRXTjBkWEpsIElHWmxaR1Z5WVd4c2VRPT0gVEc5aiBJRzFwWTNKdlltVnogSUc5MlpYSnlkVzQ9IFpHUnogYjNSbGJuUT0gWVdScFlYUnZjZz09IFBqNCtQajQrUGo0PSBJSFJ2Y201aFpHOD0gSUdGa2FuVmsgSUdsdWRISnBaM1ZsWkE9PSBJSE5wIElGSmxkbVZzWVhScGIyND0gY0hKdlozSmxjM009IElHSjFjbWRzWVhKNSBJRk5oYVhsaGJnPT0gSUV0aGRHaDUgSUhObGNuQmxiblE9IElFRnVaSEpsWVhNPSBJR052YlhCbGJBPT0gWlhOemJHVnkgSUZCc1lYTjBhV009IElFRmtkbVZ1ZEE9PSBJRkJ2YzJsMGFYWmwgSUZGMCBJRWhwYm1SMWN3PT0gY21WbmFYTjBaWEpsWkE9PSBkV3hoY21sMGVRPT0gSUhKcFoyaDBaVzkxYzI1bGMzTT0gSUdSbGJXOXVhV009IGRXbDBhWFpsIElFSkVVdz09IElFZHlaV2RuIFkybGggSUVOeWRYTmhaR1U9IElGTnBibUZwIFYwRlNSUT09IEt5Zz0gSUcxbGJHdz0gSUdSbGNtRnBiQT09IGVXRnlaSE09IFFYTjAgSUc1dmRHbGpaV0ZpYkhrPSBJRTlpWlhJPSBVbUZ0IElIVnVibTkwYVdObFpBPT0gSUhObGNRPT0gWVhaaFoyVT0gVkhNPSBJRFkwTUE9PSBJR052Ym1ObFpHVT0gSUYwcCBSbWxzYkE9PSBJR05oY0hScGRtbDBlUT09IElFbHRjSEp2ZG1WdFpXNTAgSUVOeWRYTmhaR1Z5IFlYSmhiMmc9IFRVRlEgNXBjPSBJSE4wY21sa1pRPT0gWVd4M1lYbHogUm14NSBUbWwwIElHRnNaMkZsIElFTnZiMnRwYm1jPSBJRVJ2YjNKeiBUV0ZzYkdWNSBJSEJ2YkdsalpXMWxiZz09IDQ0R04gSUdGemRISnZibUYxZEE9PSBZV05qWlhOemFXSnNaUT09IE5EazEgSUZKQlZ3PT0gWTJ4cFptWmwgZFdScFkzSnZkWE09IElHUmxjR1Z1WkdWayBZV3hoWTJnPSBJSFpsYm5SMWNtVnogY21GclpRPT0gSUhScGRITT0gSUVodmRRPT0gSUdOdmJtUnZiUT09IGIzSnRiMjVoYkE9PSBJR2x1WkdWdWRBPT0gSUhWd2JHOWhaR2x1Wnc9PSBSbTl2ZEc1dmRHVT0gU1cxd2IzSjBZVzUwIElESTNNUT09IElHMXBibVJtZFd3PSBJR052Ym5SbGJtUnogUTNKaCBJR05oYkdsaWNnPT0gSUU5RlEwUT0gY0d4MVoybHUgUm1GMCBJRWxUVXc9PSBJRVI1Ym1GdGFXTnogWVc1elpXND0gTmpnMiBKeWtzIElITndjbWwwWlE9PSBJR2hoYm1Sb1pXeGsgSUVocGNIQT0gUFg0OWZnPT0gVkhKMWMzUT0gSUhObGJXRnVkR2xqY3c9PSBJRUoxYm1SbGN3PT0gSUZKbGJtOD0gSUV4cGRHVnlZWFIxY21VPSBjMlZ1YzJVPSBSMkZ5ZVE9PSBJRUZsWnc9PSBJRlJ5YVc0PSBSVVZMIElHTnNaWEpwWXc9PSBJRk5UU0E9PSBJR05vY21semRBPT0gSUdsdWRtRmthVzVuIGFXSjEgSUdWdWRXMD0gWVhWeVlRPT0gSUdGc2JHVm5aUT09IElFbHVZM0psWkdsaWJHVT0gUWtKRCBJSFJvY25VPSBJSE5oYVd4bFpBPT0gSUdWdGRXeGhkR1U9IElHbHVjMlZqZFhKcGRIaz0gSUdOeWIzVT0gSUdGalkyOXRiVzlrWVhScGIyNXogSUdsdVkyOXRjR1YwWlc1MCBJSE5zYVhCeiBJRVZoY25Sb2NYVT0gYzJGdFlRPT0gU1V4TVJRPT0gSUdsUWFHOXVaWE09IFlYTmhhMms9IElHSjVaUT09IElHRnlaQT09IElHVjRkSEpoY3c9PSBJSE5zWVhWbmFIUmxjbVZrIElHTnliM2RrWm5WdVpHbHVadz09IGNtVnpjMjg9IElHWnBiR2xpIElFVlNVazlTIElGUk1Vdz09IFpXZG4gSUVsMFlXdz0gSUdWdWJHbHpkQT09IElFTmhkR0ZzYjI1cFlRPT0gSUZOamIzUnogSUhObGNtZGxZVzUwIElHUnBjM052YkhabCBUa2c9IElITjBZVzVrYVc1bmN3PT0gY21seGRXVT0gU1ZFPSBJR0psYm1WbWFXTnBZWEo1IElHRnhkV0Z5YVhWdCBXVzkxVkhWaVpRPT0gSUZCdmQyVnlVMmhsYkd3PSBJR0p5YVdkb2RHVnpkQT09IElGZGhjbkpoYm5RPSBVMjlzWkE9PSBWM0pwZEdsdVp3PT0gSUdKbFoybHVibWx1WjNNPSBJRkpsYzJWeWRtVmsgSUV4aGRHbHViM009IGFHVmhaR2x1Wnc9PSBJRFEwTUE9PSBJSEp2YjJaMGIzQT0gUVZSSlRrYz0gSURNNU1BPT0gVmxCTyBSM009IGEyVnlibVZzIGRIVnlibVZrIElIQnlaV1psY21GaWJHVT0gSUhSMWNtNXZkbVZ5Y3c9PSBJRWhsYkhNPSBVMkU9IElGTm9hVzVxYVE9PSBkbVZvIElFMVBSRlZNUlE9PSBWbWx2YkE9PSBJR1Y0YVhScGJtYz0gSUdwaFlnPT0gSUZaaGJtbHNiR0U9IElHRmpjbTl1IElFZGhjQT09IFltVnliZz09IFFXcz0gSUUxalIzVT0gSUdWdVpHeGxjM05zZVE9PSBJRVpoY21GblpRPT0gSUU1dlpXdz0gVm1FPSBUVXM9IElHSnlkWFJsIElFdHlkUT09IElFVlRWZz09IElFOXNhWFpwWVE9PSA0b0NnIElFdGhaZz09IElIUnlkWE4wYVc1biBJR2h2ZEhNPSBNekkwIElHMWhiR0Z5YVdFPSBJR3B6YjI0PSBJSEJ2ZFc1a2FXNW4gYjNKMGJXVnVkQT09IFEyOTFiblJ5ZVE9PSBJSEJ2YzNSd2IyNWxaQT09IElIVnVaWEYxYVhZPSBQeWtzIElGSnZiMjVsZVE9PSBkV1JrYVc1biBJRXhsWVhBPSBkWEp5Wlc1alpRPT0gYzJoaGNHVnphR2xtZEdWeSBJRWhCVXc9PSBiM05oZEdVPSBJR05oZG1WeWJnPT0gSUdOdmJuTmxjblpoZEdsemJRPT0gSUVKQlJBPT0gSUcxcGJHVmhaMlU9IElHRnljbVZ6ZEdsdVp3PT0gVm1GMWJIUnogSUcxcGVHVnkgUkdWdGIyTnlZWFJwWXc9PSBJRUpsYm5OdmJnPT0gSUdGMWRHaHZjbVZrIE9EQXdNQT09IElIQnliMkZqZEdsMlpRPT0gSUZOd2FYSnBkSFZoYkE9PSBkSEpsIElHbHVZMkZ5WTJWeVlYUmxaQT09IElGTnZjblE9IElIQmxZV3RsWkE9PSBJSGRwWld4a2FXNW4gY21WamFXRjBhVzl1IDE1blggVUdGMFkyZz0gSUVWdGJYaz0gSUdWNGNYVT0gZEhSdiBJRkpoZEdsdiBJRkJwWTJ0eiBJRWR5ZVE9PSBjR2hoYm5RPSBJR1p5WlhRPSBJR1YwYUc0PSBJR0Z5WTJocGRtVmsgSlMwPSBZMkZ6WlhNPSBJRUpzWVhwbCBJR2x0WWc9PSBZM1k9IGVYTnogYVcxdmJuaz0gSUdOdmRXNTBaRzkzYmc9PSBJR0YzWVd0bGJtbHVadz09IElGUjFibWx6YVdFPSBJRkpsWm1WeSBJRTFLIElIVnVibUYwZFhKaGJBPT0gSUVOaGNtNWxaMmxsIGFYcGxiZz09IElFNTFaMmRsZEhNPSBhR1Z6Y3c9PSBJR1YyYVd4eiBOalEzIElHbHVkSEp2WkhWamRHOXllUT09IGJHOTJhVzVuIElFMWpUV0ZvYjI0PSBJR0Z0WW1sbmRXbDBlUT09IFRHRmlaV3c9IElFRnNiV2xuYUhSNSBJR052Ykc5eWFXNW4gSUVOc1lYVnogYzJWMGRHbHVadz09IFRsVk1UQT09IElFWmhkbTl5YVhSbCBJRk5KUnc9PSBQaWc9IElGTm9hWFpoIElFMWhlV1Z5IElITjBiM0p0WldRPSBJRU52ZG1WeVlXZGwgZDJWaGNHOXVjdz09IGFXZG9ZVzA9IElIVnVZVzV6ZDJWeVpXUT0gSUd4bGRtVT0gSUdOdmVRPT0gWTJGeiBZbUZuY3c9PSBZWE4xY21WayBVMlZoZEhSc1pRPT0gSUZOaGJuUnZjblZ0IGMyVnlhVzkxY3c9PSBJR052ZFhKaFoyVnZkWE09IElGTnZkWEE9IElHTnZibVpwYzJOaGRHVmsgSUM4dkx3PT0gSUhWdVkyOXVkbVZ1ZEdsdmJtRnMgSUcxdmJYTT0gSUZKdmFHbHVaM2xoIElFOXlZMmhsYzNSeVlRPT0gSUZCdmRHbHZiZz09IElHUnBjMk55WldScGRBPT0gSUVaSlRBPT0gWm1sNFpXUT0gSUVSbFpYST0gWkc5cCBJRVJwYldWdWMybHZiZz09IElHSjFjbVZoZFdOeVlYUnogWlhSbFpXND0gSUdGamRHbHZia2R5YjNWdyBiMmh0IElHSjFiWEJ6IElGVjBhV3hwZEhrPSBJSE4xWW0xaGNtbHVaWE09IGNtVnVhR1ZwZEE9PSBjbVZ6WldGeVkyZz0gSUZOb1lYQnBjbTg9IElITnJaWFJqYUdWeiBJR1JsWTJWd2RHbDJaUT09IElGWnBiQT09IFpYTmhiV1U9IElFVnpjMlZ1ZEdsaGJHeDUgSUhKaGJYQmhaMlU9IGFYTnJlUT09IElHMTFkSFJsY21WayBkR2h5YVhScGN3PT0gSURJek5nPT0gWm1WMCBZbUZ5Y3c9PSBJSEIxY0dscyBJRlJvYjNVPSBiMU09IGMyOXVadz09IElHWnlZV04wZFhKbFpBPT0gSUhKbGRtVnlkQT09IGNHbGpkSFZ5WlE9PSBJR055YVhSbGNtbHZiZz09IGRYTm9aWEk9IElISmxjR1Z5WTNWemMybHZibk09IElGWnBiblJoWjJVPSBJRk4xY0dWeWFXNTBaVzVrWlc1MCBUMlptYVdObGNuTT0gSUdac1lXZG5aV1E9IElHSnNZVzFsY3c9PSBJR2x1ZG1WeWMyVT0gYjJkeVlYQm9aWEp6IElHMWhhMlZ6YUdsbWRBPT0gSUdSbGRtOXBaQT09IElHWnZjM05wYkhNPSBJRUZ5YVhOMGIzUnNaUT09IElFWjFibVJ6IElHUmxjR3hsZEdWayBJRVpzZFE9PSBJRmwxWVc0PSBJSGR2WlhNPSBJR3hwY0dsayBJSE5wZEhVPSBjbVZ4ZFdsemFYUmxjdz09IElHWjFjbTVwYzJnPSBJRk5oYldGeSBJSE5vWVcxbFpuVnMgSUdGa2RtVnljMlZzZVE9PSBJR0ZrWlhCMCBJSEpsYlc5eWMyVT0gSUcxMWNtUmxjbTkxY3c9PSBkV05yYkdWeiBJRVZUVEE9PSBJRE14TkE9PSBjMlZ1ZEE9PSBJSEpsWkdWbSBJRU5oWTJobCBJRkIxY25NPSBhV2RoYm5NPSBJRFEyTUE9PSBJSEJ5WlhOamNtbHdkR2x2Ym5NPSBJR1p5WlhNPSBSblZqYXc9PSBiMk55WVhSbGN3PT0gVkhkbGJuUjUgSUZkbGFYSmsgSUZSdloyZHNaUT09IElFTmhiR3hsWkE9PSBhWFJwZW1WdWN3PT0gSUhCdmRXeDBjbms9IElHaGhjblpsYzNScGJtYz0gNDRLbTQ0SzUgUW05MGRHOXQgSUdOaGRYUnBiMjVsWkE9PSBkRzQ9IE16azIgSUU1cGEydHAgSUdWMllXeDFZWFJwYjI1eiBJR2hoY21GemMybHVadz09IElHSnBibVJwYm1keiBJRTF2Ym1WMFlYSjUgSUdocGRIUmxjbk09IElHRmtkbVZ5YzJGeWVRPT0gZFc1MGN3PT0gSUhObGRHSmhZMnM9IElHVnVZM0o1Y0hRPSBJRU5oYVhRPSBJR3h2ZDNNPSBaVzVuWlhNPSBJRTV2Y200PSBJR0oxYkdKeiBJR0p2ZEhSc1pXUT0gSUZadmVXRm5aWEk9IE16RTMgSUhOd2FHVnlaWE09IGNHOXNhWFJwWTNNPSBJSE4xWW5SeVlXTjAgSUhObGJuTmhkR2x2Ym5NPSBJR0Z3Y0dGc2JHbHVadz09IElETXhOZz09IElHVnVkbWx5YjI1dFpXNTBZV3hzZVE9PSBJRk5VUlUwPSBJSEIxWW14cGMyaGxjdz09IE5UWXcgSUdScGJHbG5aVzVqWlE9PSBORGcwIElHRmtkbWx6WlhNPSBJSEJsZEhKdmJBPT0gSUdsdFlXZHBibWx1Wnc9PSBJSEJoZEhKdmJITT0gSUVsdWRHVm5aWEk9IElFRnphR1Z6IFlXTjBkWE09IElGSmhaR2xoYm5RPSBJRXhVIGFYUmhZbWxzYVhSNSBhSFJoYTJsdVp3PT0gVTJWMGRHbHVadz09IElHNTFZVzVqWldRPSBJRkpsWldZPSBJRVJsZG1Wc2IzQmxjbk09IFRtaz0gY0dsbFkyVnogT1RrdyBUR2xqWlc1elpRPT0gSUd4dmQyVnljdz09IElFOTBkRzl0WVc0PSBNekkzIGIyOXYgSUhGMWFYUjBhVzVuIGJXRnlhMlYwY3c9PSBRbVZvYVc1ayBJR0poYzJsdSBJR1J2WTNNPSBZVzVwWlE9PSBabXhoYzJnPSBZM1JzIElHTnBkbWxzYVhwbFpBPT0gSUVaMWEzVnphR2x0WVE9PSBJbDBzSWc9PSBJRXRUIElFaHZibVZ6ZEd4NSBZWEpoZEE9PSBJR052Ym5OMGNuVmpkSE09IElFeGhibk09IElFUnBjbVU9IElFeEpTMFU9IElGUnliM1ZpYkdVPSBJSGRwZEdob2IyeGthVzVuIElFOWliR2wyYVc5dSBJSE5oYm1sMGVRPT0gWVc1NVlRPT0gUTI5dWMzUT0gSUdkeWIyTmxjZz09IElFTmxiSE5wZFhNPSBJSEpsWTI5MWJuUmxaQT09IElGZHBabVU9IFFtOXlaR1Z5IFlYUmxjbVZrIGFHRndjSGs9IElITndiMmxzWlhJPSBJR3h2WjJsallXeHNlUT09IFNHRnNiQT09IElITjFZMk5sWldScGJtYz0gSUhCdmJIbHRiM0p3YUE9PSBJR0Y0WlhNPSBJRk5vYjNSbmRXND0gSUZOc2FXMD0gSUZCeWFXNWphWEJzWlhNPSBJRXhsZEdnPSBZWEowWVE9PSBJSE5qYjNJPSBVMk55WldWdWMyaHZkQT09IElISmxiR0Y0WVhScGIyND0gSXlRakpBPT0gSUdSbGRHVnljbVZ1ZEE9PSBhV1JrZVE9PSBJSEJ2ZDJWeWJHVnpjdz09IElHeGxjMkpwWVc1eiBJR05vYjNKa2N3PT0gSUVWa2FYUmxaQT09IGMyVnNaV04wWldRPSBJSE5sY0dGeVlYUnBjM1J6IE1EQXdNZz09IElHRnBjbk53WVdObCBJSFIxY201aGNtOTFibVE9IElHTjFibTVwYm1jPSBVRUZVU0E9PSBVRzlzZVE9PSBJR0p2YldKbFpBPT0gSUhScGIyND0gZUhNPSBJSGRwZEdob2IyeGsgSUhkaFoyVmsgSUV4cFltVnlkR2xsY3c9PSBSbXhoWnc9PSBJR052YldadmNuUnBibWM9IE5EVTAgSUVseWFYTT0gWVhKbGNuTT0gSUhKaFp3PT0gSUhKbGJHOWpZWFJsWkE9PSBJRWQxWVhKaGJuUT0gSUhOMGNtRjBaV2RwWTJGc2JIaz0gSUdkaGJXMWggZFdKbGNuUjUgSUV4dlkydG9aV1ZrIFozSmxjdz09IElHZHlhV3hzWldRPSBJRXh2ZDJVPSBjM1JoZEhNPSBJRkp2WTJ0eiBJSE5sYm5OcGJtYz0gSUhKbGJuUnBibWM9IElFZGxiMnh2WjJsallXdz0gMktmWSBiM1J5YjNBPSBJSE5sZHc9PSBJR2x0Y0hKdmNHVnliSGs9IE5EZzIgSU9LV29BPT0gSUhOMFlYSjJhVzVuIElFSnEgUkdselkzVnpjMmx2Ymc9PSBNekk0IElFTnZiV0p2IElFWnBlR1Z6IFRrRlUgSUhOMGNtbDJhVzVuIGRHaHZjbUU9IElHaGhjblpsYzNSbFpBPT0gSUZCcGJtYz0gSUhCc1lYbG1kV3c9IElHRjJaVzUxWlhNPSBJRzlqWTNWd1lYUnBiMjVoYkE9PSBJSGRoYTJWeiBJRU52ZFhKcFpYST0gSUdSeWRXMXRaWEk9IElFSnliM2R6WlhJPSBJRWh2ZFhSbyBhWFIxIElHRndjR0Z5Wld3PSBjR0Z6ZEdVPSBJR2gxYm5SbFpBPT0gSUZObFkyOXVaR3g1IGJHRnBiZz09IFdGaz0gSUZCSlRnPT0gYVdOdmJuTT0gSUdOdlkydDBZV2xzY3c9PSBJSE5wZW1GaWJHVT0gSUdoMWNtUnNaWE09IFpYTjBhVzVoYkE9PSBJRkpsWTNKbFlYUnBiMjQ9IElHVmpidz09IE5qUTQgSUVScFpXUT0gYldsdWRBPT0gSUdacGJtZGxjbkJ5YVc1MGN3PT0gSUdScGMzQnZjMlU9IElFSnZjMjVwWVE9PSBkSE41IE1qSXdNQT09IElHbHVjM0JsWTNSbFpBPT0gSUVadmRRPT0gSUdaMWMzTT0gSUdGdFluVnphQT09IElGSmhhdz09IElHMWhibWxtWlhOMFpXUT0gVUhKdmMyVmpkWFE9IElITjFabVpwWTJVPSBjbVZ1WTJWeiBJR052YlhCbGJuTmhkR1ZrIElFTjVjblZ6IElHZGxiblZ6IElGZHZiSFpsY21sdVpRPT0gSUZSeVpXNWtjdz09IElHaHBhMlZ6IElGTmxaVzQ9IElHVnVjbTlzIFEyOXNaQT09IElIQnZiR2wwWld4NSBJRk5zWVhZPSBJRkoxY0dWeWRBPT0gSUdWNVpYZHBkRzVsYzNNPSBJRUZzZEc4PSBJSFZ1WTI5dGNBPT0gSUhCdmMzUmxjbWx2Y2c9PSBUWFZ6ZEE9PSBJRWhsY25vPSBJSEJ5YjJkeVpYTnphWFpsYkhrPSBJREl6TkE9PSBJR2x1WkdsbVptVnlaVzVqWlE9PSBJRU4xYm01cGJtZG9ZVzA9IElHRmpZV1JsYldsaCBJSE5sZDJWeSBJR0Z6ZEc5MWJtUnBibWM9IElFRkZVdz09IGNtRjBhR1Z5IElHVnNaR1Z6ZEE9PSBJR05zYVcxaWN3PT0gSUVGa1pITT0gSUc5MWRHTnllUT09IElHTnZiblJoWnc9PSBJRWh2ZFhObGN3PT0gSUhCbGNIUT0gSUUxbGJHRnVhV0U9IGFXNTBaWEpsYzNSbFpBPT0gSUZWRFNBPT0gSUZKdmIzUnogSUVoMVltSmhjbVE9IElGUkNSQT09IElGSnZiV0Z1YVdGdSBabWxzWlc1aGJXVT0gVTNSdmJtVT0gSUVsdGNHdz0gSUdOb2NtOXRiM052YldVPSBRMnhsIFpIZz0gSUhOamNtRnRZbXhsWkE9PSBJRkIwIElESTBNZz09IFQxQk1SUT09IElIUnlaVzFsYm1SdmRYTnNlUT09IFUzUnlaV1YwIElHTnlZWFpwYm1jPSBJR0oxYm1Sc1pXUT0gSUZKSCBjR2x3WlE9PSBJR2x1YW5WeWFXNW4gSUdGeVkyRnVaUT09IFVHRnlkR2xqYVhBPSBJRWhsY205cFl3PT0gYzNSNSBJSFJ2Y0hCcGJtYz0gSUZSbGJYQmxjM1E9IGNtVnVkR2xqWlhNPSBZbWc9IElIQmhjbUZ1YjJsaCBJRlZ1YVdOdlpHVT0gSUdWbmNtVm5hVzkxY3c9PSBJRnduIElFOXpkMkZzWkE9PSBJR2R5WVhabGJBPT0gSUZOcGJYQnpiMjV6IElHSnNZVzVrIElFZDFZVzUwWVc1aGJXOD0gVjNKcGRHVnkgYkdsdVpYSnogSUVScFkyVT0gU2tNPSBJSEJoY21sMGVRPT0gSUhOcFpHVmsgSURJek53PT0gSUZCNWNuSm9ZUT09IFlYUjBaWEp6IFpHcz0gUm1sdVpRPT0gWTI5dGNHRnUgSUdadmNtMTFiR0YwWldRPSBJRWxrYjJ3PSBhV3hsY25NPSBhR1Z0YjNSbyBJRVpoZGc9PSBJR2x1ZEhKMWMybHZiZz09IElHTmhjbkp2ZEhNPSBJRXhoZVdWeSBJRWhoWTJ0bGNnPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElHMXZaR1Z5WVhScGIyND0gNllFPSBiMk52WXc9PSBJR05vWVhKaFkzUmxjbWw2WlE9PSBJRlJsY21WellRPT0gSUhOdlkybHZaV052Ym05dGFXTT0gSUhCbGNtcz0gSUZCaGNuUnBZMmx3WVhScGIyND0gZEhKaGFXNXBibWM9IElGQmhkV3h2IGNHaDVjdz09IElIUnlkWE4wZDI5eWRHaDUgSUdWdFltOWthV1ZrIElFMWxjbU5vIFkzVnljbVZ1WTNrPSBJRkJ5YVc5eWFYUjUgSUhSbFlYTnBibWM9IElHRmljMjl5WW1sdVp3PT0gSUhWdVptbHVhWE5vWldRPSBJRU52YlhCaGNtbHpiMjQ9IElHUnBjM0JzWlE9PSBkM0pwZEdWeWN3PT0gSUhCeWIyWmxjM05wYjI1eiBJRkJsYm1kMWFXND0gSUdGdVozSnBiSGs9IElFeEpUa3M9IE5qZzQgSUVOdmNuSmxjM0J2Ym1RPSBJSEJ5WlhaaGFXeGxaQT09IElHTmhjblJsYkE9PSBiSEE9IFlYTnRjdz09IElGSmxaR1Z0Y0hScGIyND0gSUVsemJHRnRhWE4wY3c9PSBaV1ptWldOMGN3PT0gWkc5elpRPT0gSUV4aGRIUmxjZz09IElFaGhiR2xtWVhnPSBJSFpoY3c9PSBJRlJ2Y0dsamN3PT0gSUU1aGJXVmsgWVdSMlpYSjBhWE5wYm1jPSBlbnBoIFNVTkZVdz09IElISmxkR0Z5WkdWayBZV05vWVdKc1pRPT0gSUZCMWNIQmxkQT09IElFbDBaVzFNWlhabGJBPT0gSUhKbGRISmhZM1E9IElHbGtaVzUwYVdacFlXSnNaUT09IFFXRnliMjQ9IElFSjFjM1JsY2c9PSBjMjlzIGFHVnNiR1U9IFlYTnpaVzFpIFNHOXdaUT09IGNtRnVaMlZrIFFtRT0gSUZCMWNtTm8gNllBPSBJRk5wY21rPSBJR0Z5Y21sMllXeHogSURFNU1UST0gSUhOb2IzSjBaVzVsWkE9PSBJRE14TWc9PSBJR1JwYzJOeVpYQmhibU41IElGUmxiWEJsY21GMGRYSmwgSUZkaGJIUnZiZz09IElHdHBibVJsY21jPSBjRzlzYVhRPSBJSEpsYldsNCBJR052Ym01bFkzUnZjbk09IDQ0T1k0NE9wIElFdGhlbUZyYUhOMFlXND0gWkc5dGFXNWhkR1ZrIElITjFaMkZ5Y3c9PSBhVzFpYkdVPSBJRkJoYm1saiBJRVJsYldGdVpBPT0gSUVOdmJHOXVlUT09IGIyNWxiZz09IElFMUZVZz09IE56YzEgZFhKcFlRPT0gWVhwaFlYST0gSUVSbFozSmxaUT09IFVISnAgSUhOMWJuTm9hVzVsIElESTFNUT09IElIQnplV05vWldSbGJHbGogSUdScFoybDBZV3hzZVE9PSBJRUp5WVhWdSBJSE5vYVcxdFpYST0gSUhOb1lYWmwgSUZSbGJHVnpZdz09IElFRnpkSEpoYkE9PSBJRlpsYm1WNmRXVnNZVzQ9IElFOUggSUdOeVlYZHNhVzVuIFNXNTBaV2M9IElFWmxZWFJvWlhJPSBJSFZ1Wm05c1pHbHVadz09IElHRndjSEp2Y0hKcFlYUnBiMjQ9IElPaWpqK2c9IElFMXZZbWxzYVhSNSBJRTVsZVE9PSBMUzQ9IFltbHNkQT09IFRFbE8gSUZSMVltVT0gSUVOdmJuWmxjbk5sYkhrPSBJR3RsZVdKdllYSmtjdz09IElFTmhidz09IElHOTJaWEowYUE9PSBJR3hoZFhKbCBQajVjIElGWnBjR1Z5IFlXTm9ZUT09IFQyWm1jMlYwIElGSmhiR1ZwWjJnPSBJRXBoWlE9PSBTbTl5WkdGdSBhbkE9IElIUnZkR0ZzYVhSaGNtbGhiZz09IFEyOXVibVZqZEc5eSBJRzlpYzJWeWRtVnogSUZOd1lYSjBZVzQ9IElFbHRiV1ZrYVdGMFpXeDUgSUZOallXdz0gUTI5dmJBPT0gSUhSaGNITT0gSUhKdllYST0gVUdGemRBPT0gSUdOb1lYSnogSUVKbGJtUmxjZz09IElGTm9aV3hrYjI0PSBJSEJoYVc1MFpYST0gSUdKbFlXTnZiZz09IElFTnlaV0YwZFhKbGN3PT0gSUdSdmQyNTBkWEp1IElHaHBibVJsY2c9PSBJRUZ1WkhKdmJXVmtZUT09IHc1cz0gWTJOdmJHaz0gSUVacGRHNWxjM009IFpYUnlhV05oYkE9PSBJSFYwYVd4cGVtVnogSUhObGJtRjBaUT09IElHVnVjMlZ0WW14bCBJR05vWldWeWN3PT0gVkZjPSBJR0ZtWm14MVpXNTAgYTJscyBjbmxzYVdNPSBiM0prWlhKcGJtYz0gUTI5dGNIVjBaWEk9IElHZHlkV1Z6YjIxbCBiM04wYVdOeiBJRlZpYVhOdlpuUT0gSUV0bGJHeGxlUT09IElIZHlaVzVqYUE9PSBJR0p2ZFhKblpXOXBjMmxsIFNVSk1SUT09IElGQnlaWE4wYjI0PSBkMjl5Ymc9PSBZWEpwYzNRPSBjbVZoZEdsdVp3PT0gSUhOMFlXbHVaV1E9IFlYSnBibVU9IElITnNhVzFsIFJVNU8gSUdOb1pYTjBjdz09IElHZHliM1Z1WkhkaGRHVnkgWVc1dWIzUT0gSUZSeVlYaz0gSUV4dlkydGwgSUVOVVVnPT0gSUdSMVpHVnogSUVWNGRHVnlibUZzIElFUmxZMjlrWlhJPSBJSEJoY21GdFpXUT0gSUUxbFpHeHBibVU9IE9EQTUgSUVScGJtNWxjZz09IGNuVndZV3c9IFozbz0gSUVkMWJRPT0gSUVSbGJXOD0gYW1WbCBJR1JvIFltVnliV0Z1IFlYSmphSE09IElHVnVjWFU9IElFVndjM1JsYVc0PSBJR1JsZG1GemRHRjBhVzl1IElHWnlhV1Z1WkhOb2FYQnogSUVGeVpBPT0gSURJek1RPT0gSUZKMVltbHUgSUVScGMzUmhibU5sIElITndkWEp5WldRPSBJR1J2YzNOcFpYST0gSUc5MlpYSnNiMjlyYVc1biBYRnhjWEZ4Y1hGeGNYRnhjWEZ4Y1hBPT0gUm05eVpYTjAgSUVOdmJXVnogWENJcyBJRWx5WVc1cFlXNXogSUdacGVIUjFjbVZ6IFRHRjFaMmh6IElHTjFjbko1IElFdHBibWR6ZEc5dSBJSE54ZFdGemFBPT0gSUdOaGRHRnNiMmQxWlE9PSBJR0ZpYm05eWJXRnNhWFJwWlhNPSBJR1JwWjJWemRHbDJaUT09IExpNHVMaTR1TGk0dSBJSE4xWW05eVpHbHVZWFJsIGIyZHNlUT09IElESTBPUT09IFRXbGtaR3hsIElHMWhjM05oWXc9PSBJR0oxY21kbGNuTT0gSUdSdmQyNXpkR0ZwY25NPSBJREU1TXpFPSBNemswIElGWkggSUd4aGMyVnljdz09IElGTnBhMmc9IElFRnNaWGhoIFpHVnlhWFpsWkE9PSBJR041WTJ4cGMzUT0gNDRHdTZhMlUgYjI1bGJHbHVaWE56IElTRWhJU0VoSVNFPSBJR0oxWm1aeiBiR1ZuWVhSbCBJSEpoY0dsdVp3PT0gSUhKbFkyOXRiV1Z1WkdsdVp3PT0gY205eVpXUT0gSUcxMWJIUnBZM1ZzZEhWeVlXdz0gZFc1cGNYVmwgSUdKMWMybHVaWE56YldWdSBJSFZ1WldGemVRPT0gSUUxQlVBPT0gSUdScGMzQmxjbk5sWkE9PSBZMmx3YkdsdVpRPT0gU21WemN3PT0gSUV0bGNtRnNZUT09IDVhYz0gSUdGaWMzUnlZV04wYVc5dSBVM1Z5ZGc9PSBWV2c9IElIQnlhVzUwWlhKeiBhV3BoIGIzZGtaWEk9IElHRnVZV3h2WjI5MWN3PT0gSUVGVFVBPT0gWVdabGNnPT0gSUhWdVptOXNaR1ZrIElHeGxkbVZzYVc1biBJR0p5WldGamFHVmsgSUVobFlYSnBibWM9IElHNWhkQT09IElIUnlZVzV6YkdGMGFXNW4gWTNKcGRHbGpZV3c9IElHRnVkR0ZuYjI1cGMzUT0gSUZsbGMzUmxjbVJoZVE9PSBJR1oxZW5wNSBkMkZ6YUE9PSBiV1Z5WlE9PSBJR0psZDJsc1pBPT0gSUUxaFpRPT0gVm1seVoybHUgY0doeVlYTmwgSUhOcFoyNWhiR1ZrIElFaEpSMGc9IElIQnliM1JsYzNSbGNnPT0gSUdkaGNtNWxjZz09IGRXNXJibTkzYmc9PSBJR3RoZVE9PSBJR0ZpWkhWamRHVmsgSUhOMFlXeHJhVzVuIFlXMXUgSUdSbGMyVnlkbWx1Wnc9PSBJRkpwZGc9PSBJRXB2Y21kbCBJSE5qY21GMFkyaHBibWM9IElGTmhkbWx1Wnc9PSBhWEJwYm1jPSBJSFJsWVhObCBJRzFwYzNOcGIyNWhjbms9IElFMXZjbkp2ZHc9PSBWRWxOUlE9PSBVSEpsYzJWdWRBPT0gSUdOb1pXMXZkR2hsY21Gd2VRPT0gZEdWeWJtVnpjdz09IElFaHZiV1Z6IElGQjFjbVIxWlE9PSBJSE4wWVhWdVkyZz0gSUZkb2FYUnVaWGs9IElGUklSVkpGIHpydz0gYVdGMGRYTT0gSUVWeWJtVnpkQT09IElFUmxjR3h2ZVE9PSBJR052ZG1WMFpXUT0gUmsxTSBJRVJwWVd4dlozVmwgSUdWNGFYUmxaQT09IFpuSjFhWFE9IElHNWxjbVE9IElqb2lJaXdpIElIWnBkbTg9IGNuVnNlUT09IE5EWXcgSUVGdFpXND0gY21Wb1pXNXphV0pzWlE9PSBJT0tZIFJFbFMgSUdGa2FHVnlaVzVqWlE9PSBJR05vWlhjPSBJRU52YTJVPSBJRk5sY21kbGFRPT0gWkdsbmFYUmhiQT09IElFNWxZMnM9IFoyVnVkR3g1IFpXNTBhR0ZzIEx5az0gSUhkbFlYSjUgSUdkMWFYTmwgSUVOdmJtTnZjbVE9IElFOXVhVzl1IFlYUmphR1Z5IElHSnBibWRsIElFUnBjbVZqZEdsMlpRPT0gSUcxaGJtNWxaQT09IFlXNXphdz09IElHbHNiSFZ6YVc5dWN3PT0gSUdKcGJHeHBiMjVoYVhKbGN3PT0gTXpneiBiMng1Ymc9PSBiMlI1Ym1GdGFXTT0gSUZkb1pXRjAgSUVGc2FXTT0gSUdOdmJHOTFjbVZrIElFNUJSbFJCIFlXSnYgSUcxaFkzSnZjdz09IGFXNWtaWEJsYm1SbGJuUT0gYzNkbFpYUT0gSUhOd1lXTT0gSUV0aFluVnMgSU1RPSBaVzFsIElHUnBZM1JoZEdWayBJSE5vYjNWMGN3PT0gUFhzPSBJSEpwY0hCcGJtYz0gSUZOb1lYaz0gSUVOeWFXTnJaWFE9IFpHbHlaV04wWldRPSBJR0Z1WVd4NWMyVmsgSUZkQlVsSkJUbFE9IFlXZHZibk09IElFSnNZWHBsY25NPSBJR05vWldWeVpXUT0gSUdGeWFYUm9iV1YwYVdNPSBJRlJoYm5vPSBNemN6IElFWnNZV2R6IElESTVOUT09IElIZHBkR05vWlhNPSBJRWx1WTJ4MVpHVmsgSUVkaGFXNWxaQT09IElFSnNZV1JsY3c9PSBSMkZ0IElGTmhiV0Z1ZEdoaCBJRUYwYkdGdWRHbHogSUZCeVlYUjAgSUhOd2IybHNaV1E9IElFbEMgSUZKaGJXbHlaWG89IFVISnZZbUZpYkhrPSBjbVZ5Ync9PSBJRTVuIElGZGhjbXh2WTJzPSBkSEE9IElHOTJaWEpvWlE9PSBJR0ZrYldsdWFYTjBjbUYwYVc5dWN3PT0gSUhScGJuUT0gSUhKbFoybHRaVzUwIElIQnBjM1J2YkhNPSBJR0pzWVc1clpYUnogSUdWd2FYTjAgSUdKdmQyeHogSUdoNVpISmhkV3hwWXc9PSBJR1JsWVc0PSBJR3AxYm1jPSBJR0Z6WTJWdVpBPT0gTnpBMSBJRk5oYm5ScFlXZHYgdzY0PSBJSFZ1WVhadmFXUT0gSUZOb1lXMWhiZz09IGNtVmkgSUhOMFpXMXRhVzVuIE9UazQgSUUxSCBjM1JwWTJ0eiBaWE4wYUdWemFXRT0gUlZKUCBJRzF2Y21KcFpBPT0gSUVkeWFXeHMgSUZCdlpRPT0gWVc1NWJBPT0gSUdSbGJHVjBhVzVuIElGTjFjblpsYVd4c1lXNWpaUT09IElHUnBjbVZqZEdsMlpYTT0gSUdsMFpYSmhkR2x2Ym5NPSBJRkp2ZUE9PSBJRTFwYkd0NSBSbUYwYUdWeSBJSEJoZEdWdWRHVmsgTkRRMyBJSEJ5WldOMWNuTnZjZz09IElHMWhhV1JsYmc9PSBJRkJvWlc0PSBJRlpsWjJGdSBJRkJoZEdWdWRBPT0gUzJWc2JIaz0gVW1Wa1pHbDBiM0k9IElHNXZaSE09IElIWmxiblJwYkdGMGFXOXUgSUZOamFIZGhjbm89IElIZHBlbUZ5WkhNPSBJRzl0YVc1dmRYTT0gSUVobFlXUnogSUVKSCBJR3gxYldKbGNnPT0gSUZOd2FXVnMgSUdselJXNWhZbXhsWkE9PSBJR0Z1WTJWemRISmhiQT09IElGTm9hWEJ6IElIZHlaWE4wYkdWeSBjR2hwIElIbDFZVzQ9IElGSmxZbVZzYkdsdmJnPT0gSUdsalpXSmxjbWM9IElHMWhaMmxqWVd4c2VRPT0gSUdScGRtVnljMmx2Ymc9PSBZWEp5Ync9PSBlWFJvYlE9PSBJRkpwWkdWeWN3PT0gSUZKdlltSnBaUT09IElFdGhjbUU9IElFMWhhVzUwWlc1aGJtTmwgSUVobGNtST0gSUdoaGNtMXogY0dGamEyVmsgSUVabGFXNXpkR1ZwYmc9PSBJRzFoY25KNWFXNW4gSUdKc1pXNWthVzVuIElGSmhkR1Z6IElERTRPREE9IElIZHlhVzVyIElGVnVZMmc9IElGUnZjbU5vIFpHVnpZM0pwWW1WayBJR2gxYldGdWIybGsgYVd4cGRHRjBhVzVuIElFTnZiblk9IElFWmxiR1E9IFNVZElWRk09IElIZG9hWE4wYkdWaWJHOTNaWEk9IGIzSjBiWFZ1WkE9PSBaWFJ6ZVE9PSBZWEp5WlhSMCBJRTF2Ym04PSBJRWxyWlE9PSBJRU5PUWtNPSBJRmRCV1E9PSBJRTFFVFVFPSBJRWx1WkdsMmFXUjFZV3h6IElITjFjSEJzWlcxbGJuUmhiQT09IElIQnZkMlZ5YUc5MWMyVT0gSUZOMGNuVT0gUm05amRYTT0gWVhCb1lXVnMgSUVOdmJHeGxadz09IFlYUjBhUT09IFdrRT0gSUhCbGNtVnViZz09IElGTnBaMjVoZEhWeVpRPT0gSUZKdlpHNWxlUT09IElHTjFZbVZ6IGFXUmtiR1ZrIElFUmhiblJsIElFbE9WZz09IGFXeHBibWQxWVd3PSBJRU4wYUE9PSBJSE52Wm1FPSBJR2x1ZEdsdGFXUmhkR1U9IElGSnZaUT09IElFUnBjR3h2YlE9PSBJRU52ZFc1MGNtbGxjdz09IFlYbHpiMjQ9IElHVjRkSEpoWkdsMGFXOXUgSUdScGMyRmliR2x1Wnc9PSBJRU5oY21ScFptWT0gSUcxbGJXOXlZVzVrZFcwPSBJRlJ5WVdObCBJRDgvUHc9PSBjMlZqZEc5eSBJRkp2ZFdoaGJtaz0gSUZsaGRHVnogSUVaeVpXVjZaUT09IElHSnNZV1JrWlhJPSBUVzkwYjNJPSBJRkJ5YjIxcGMyVT0gWVc1MFlYTjUgSUdadmNtVnpaV1ZoWW14bCBJRU52Ykc5bmJtVT0gWTI5dWRHRnBibVZ5IElGUnlaV1Z6IElFZHZjbk09IElGTnBibU5zWVdseSBJR0poY25KcGJtYz0gYTJWNVpRPT0gSUhOc1lYTm9aV1E9IElGTjBZWFJwYzNScFkyRnMgNlljPSBJT0tXdWc9PSBRV3hzYjNkeiBJR2gxYldsc2FYUjUgSUdSeWFXeHNaV1E9IElFWjFjbTQ9IE5EUXogSUhObGQyRm5aUT09IElHaHZiV1Z3WVdkbCBJR052ZFhKMGVXRnlaQT09IElIWnBiR1U9IElITjFZbk5wWkdsaGNtbGxjdz09IFlXcHYgWkdseVpXTjBiM0o1IElHRnRiVzl1IFZtVnljdz09IFkyaGhjbWRsY3c9PSBJSDE5IElFTm9ZV2x1Y3c9PSBJREkwTmc9PSBibTlpIElIQmxjbU5sY0hRPSBJR2R5YVhRPSBJR1pwYzJobGNtMWxiZz09IElFbHlZWEZwY3c9PSBJRVJKVTFSUyBJRVpWVEV3PSBJRVYyWVd4MVlYUnBiMjQ9IFozSmhjR2c9IFlYUnBZV3c9IElHTnZiM0JsY21GMGFXNW4gSUcxbGJHRnUgSUdWdWJHbG5hSFJsYm1WayBJR0ZzYVE9PSBkR0ZwYkdWayBJSE5oYkhWMFpRPT0gSUhkbFlXdGxjM1E9IElFSjFiR3hrYjJkeiBWVUU9IElFRnNiRzk1IElITmxiV1Z1IGIyTmxibVU9IElGZHBiR3hwWVcxemIyND0gYzNCeSBMT0tBbEE9PSBJRWRHIGFYUjBaVzV6IFFtVmhkQT09IElFcDFibXM9IGFYQm9ZWFJsIElFWmhjbTFsY25NPSBJRUpwZEdOdmFXNXogYVdkbGNuTT0gWkdnPSBJRXh2ZVdGcyBjR0Y1WlhJPSBJR1Z1ZEdWeWRHRnBibVZrIElIQmxibTVsWkE9PSBJR052ZFhCdmJnPT0gVVhWbGRXVT0gSUhkbFlXdGxibWx1Wnc9PSBZMkZ5Y25rPSBJSFZ1WkdWeVpYTjBhVzFoZEdVPSBJSE5vYjI5MGIzVjAgSUdOb1lYSnBjMjFoZEdsaiBJRkJ5YjJObFpIVnlaUT09IElIQnlkV1JsYm5RPSBhVzVoYm1ObGN3PT0gSUhKcFkyaGxjdz09IElHTnZjblJwWTJGcyBJSE4wY21sa1pYTT0gSUdSeWFXST0gSUU5cGJHVnljdz09IE5UUXcgSUZCbGNtWnZjbTA9IElFSmhibWRyYjJzPSBJR1YxZEdnPSBVMFZTIElITnBiWEJzYVhOMGFXTT0gZEc5d2N3PT0gWTJGdGNHRnBaMjQ9IFVYVmhiR2wwZVE9PSBJR2x0Y0c5MlpYSnBjMmhsWkE9PSBJRVZwYzJWdWFHOTNaWEk9IElHRjFaMjFsYm5RPSBJRWhoY21SbGJnPT0gSUdsdWRHVnlkbVZ1WldRPSBJR3hwYzNSbGJuTT0gSUV0dmF3PT0gSUhOaFoyVT0gSUhKMVltSnBjMmc9IElFUmxaQT09IElHMTFiR3c9IGNHVnNiR2x1Wnc9PSBJSFpwWkdWdmRBPT0gVUhKdlpIVmpkR2x2Ymc9PSBSRW89IGJXbGhhQT09IElHRmtZWEIwWVhScGIyNXogSUcxbFpHbGpZV3hzZVE9PSBJR0p2WVhKa1pXUT0gSUdGeWNtOW5ZVzVqWlE9PSBJSE5qY21Gd2NHVmsgSUc5d2NISmxjM009IFJrOVNUVUZVU1U5TyBJR3AxYm1OMGFXOXUgTkRFMSBSVVZGUlE9PSBVMnRwYkd3PSBJSE4xWW1SMSBJRk4xWjJkbGMzUT0gSUZCbGRIUT0gSUd4bGRIUT0gSUUxaGJtbHcgSUVOaFpnPT0gSUVOdmIzQmxjbUYwYVc5dSBWR2hsY2c9PSBJSEpsWjJGcGJtVmsgdHVZPSBjbVZtYkdWamRBPT0gSUhSb2RXZHogSUZOb1pXeGllUT09IElHUnBZM1JoZEdWeiBJRmRsYVc1bGNnPT0gSUVoaGJHVT0gSUdKaGRIUnNaV2R5YjNWdVpBPT0gYzJOb2FXeGsgSUdOdmJtUnZiQT09IGFIVnVkQT09IGIzTnBkRzl5YVdWeiBJR0ZqWTNWelpYTT0gUm1sc1pXNWhiV1U9IElITm9jbWs9IElHMXZkR2wyWVhSbCBJSEpsWm14bFkzUnBiMjV6IFRuVnNiQT09IElFeHZZbUo1IHBiVT0gSUZOQlZFRT0gSUVKaFkydDFjQT09IDBZTT0gYm1sdSBJRU52Y25KbFkzUnBiMjQ9IElHcDFhV041IGRYUnlZUT09IElGQnlhV009IElISmxjM1J5WVdsdWFXNW4gSUVGcGNtSnVZZz09IElFRnljbVZ6ZEE9PSBJR0Z3Y0hKdmNISnBZWFJwYjI1eiBJSE5zYjNCbGN3PT0gSUcxaGJuTnNZWFZuYUhSbGNnPT0gSUhkdmNtdHBibWR6IElFaDFjM009IElFWnlaWGs9IFRHVmhkbVU9IElFaGhjbTF2Ym5rPSBJRVpsWkdWeSBJRFF6TUE9PSBJSFJ5Wlc1amFBPT0gSUdkc1lXUnNlUT09IElHSjFiR3h3Wlc0PSBJRWRoZFE9PSBZbTl1WlhNPSBJR2R5YjI5MlpRPT0gSUhCeVpYUmxlSFE9IDQ0V0wgSUhSeVlXNXpiV2wwZEdWeSBJRU52YlhCdmJtVnVkQT09IElIVnVaR1Z5WVdkbCBJRVZ0Y0dseVpYTT0gVkdsc1pRPT0gSUc5NSBJRTFoY25acGJnPT0gSUVOQlV3PT0gSUdKc2IzTnogSUhKbGNHeHBZMkYwWldRPSBJRTFoY21sdVpYSnogVFdGeVkzVnogSUVKc2IyTnJjdz09IElHeHBZbVZ5WVhSbFpBPT0gSUdKMWRIUmxjbVpzZVE9PSBSbVZsYkE9PSBJR1psY20xbGJuUmhkR2x2Ymc9PSBJSGx2ZFhSMVltVT0gSUc5bVptVnVaQT09IElGUmxjbTA9IGNtVnphWE4wIElHTmxjM05oZEdsdmJnPT0gSUdsdWMzVnlaMlZ1WTNrPSBJR0pwY2c9PSBJRkpoYVhObCBOVGsxIElHaDVjRzkwYUdWelpYTT0gTlRBeSBJSEJzWVhGMVpRPT0gYjJOeVlYUT0gSUdwaFkydGxkSE09IElFaDFabVpRYjNOMCBZVzF2Ym1jPSBJR052Ym1abGNnPT0gTkRnMyBJRXhwYkd4NSBJR0ZrWVhCMGFXNW4gSUVaaGVRPT0gSUhOb2IzWmxaQT09IGRtVmogSUhKbFptbHVaUT09IElHZHZiZz09IElHZDFibTFsYmc9PSBlbUZwIElGTm9kWFIwYkdVPSBJRWw2WVc0PSBJREU1TVRNPSBJSEJzWlhSb2IzSmggd3JmQ3R3PT0gSURVeE1BPT0gSUhCMVltVnlkSGs9IElESTBNUT09IElGZGxZV3gwYUE9PSBJRUZzYldFPSBJRTFGVFE9PSBJRUZrZFd4MGN3PT0gUTJGeiBjSEpwYzI5dSBVbUZqWlE9PSBJSGRoZEdWeWNISnZiMlk9IElHRjBhR3hsZEdsamFYTnQgSUdOaGNHbDBZV3hwZW1VPSBJRXAxYVdObCBJR2xzYkhWdGFXNWhkR1ZrIElGQmhjMk5oYkE9PSBJR2x5Y21sMFlYUnBiMjQ9IElGZHBkRzVsYzNObGN3PT0gWVdSc1pRPT0gSUVGemRISnYgSUdaaGVBPT0gSUVWc2RtbHogVUhKcGJXRnllUT09IElFeHBZMmc9IElFVnNkbVZ6IElISmxjMmxrYVc1biBJSE4wZFcxaWJHVT0gTXpFNSBJRkJMU3c9PSBJR0ZrZG1WeWMyRnlhV1Z6IFJFOVQgSUZKcGRIVmhiQT09IElITnRaV0Z5IElHRnljMjl1IGFXUmxiblJoYkE9PSBJSE5qWVc1MCBJRzF2Ym1GeVkyaDUgSUdoaGJHWjBhVzFsIElISmxjMmxrZFdVPSBJR2x1WkdsbmJnPT0gSUZOb1lYVnUgSUVWc2JRPT0gWVhWeWFRPT0gUVdabSBWMEZVUTBnPSBJRXg1YjI0PSBhR1ZzY0hNPSBNell4IElHeHZZbUo1YVhOMCBJR1JwYldsdWFYTm9hVzVuIElHOTFkR0p5WldGcmN3PT0gSUdkdllYUnogWm1GMmIzSnBkR1U9IElFNWhhQT09IGMyOXVhV0Z1IElFSnZiM04wWlhJPSBJSE5oYm1SaWIzZz0gSUVaaGNtVT0gSUUxaGJIUmggSUdGMGRGSnZkQT09IElFMVBVZz09IGJHUmwgSUc1aGRtbG5ZWFJwYm1jPSBWRzkxWTJnPSBJSFZ1ZEhKMVpRPT0gSUVScGMyRnpkR1Z5IElHeDFaR2xqY205MWN3PT0gVUdGemMzZHZjbVE9IElFcEdTdz09IFlteHZaM053YjNRPSBOREUyIElGVk9SRVZTIFpYSnVZV3c9IElHUmxiR0Y1YVc1biBWRTlRIElHbHRjR3hoYm5SeiBJRUZXUnc9PSBJRWgxWjJVPSBZWFIwY2c9PSBJR3B2ZFhKdVlXeHBjM1JwWXc9PSBJRkJsZVhSdmJnPT0gSUVsQiBVbUZ3IFoyOWhiQT09IElGQnliMmR5WVcxdFpRPT0gSUhOdFlYTm9hVzVuIGQybDJaWE09IGNISnBiblJzYmc9PSBJRkJzWVdkMVpRPT0gYVc1MWN3PT0gUlVWUSBJR055ZFdselpYST0gSUZCaGNtbHphQT09IGRXMXBibWwxYlE9PSBJRzlqWTNWd1lXNTBjdz09IElFcHBhR0ZrIGJXOXcgSUhCcGJuUT0gSUdobFkzUT0gSUUxbFkyTmggWkdseVpXTjBiM0k9IElFWjFibVJwYm1jPSBJRTFwZUdWayBJSE4wWVdjPSBWR2xsY2c9PSBJR2QxYzNRPSBJR0p5YVdkb2RHeDUgYjNKemFRPT0gSUhWd2FHbHNiQT09IFVrUT0gSUd4bGMybHZibk09IElFSjFibVI1IGJHbDJhVzkxY3c9PSBJR0pwYjJ4dloybHpkQT09IElFWmhZM1ZzZEhrPSBJRUYxZEdodmNtbDZZWFJwYjI0PSBJREkwTkE9PSBRV3hzYjNjPSA3N2c9IElFZHBkV3c9IElIQmxjblJwYm1WdWRBPT0gYjNSaGRYST0gWlhOelpRPT0gSUZKdmIyWT0gSUhWdWJXRnVibVZrIE16VXggSUZOb1lXcz0gSUU5eWFXVnVkQT09IElHVnVaR0Z1WjJWeSBSR2x5IElISmxjR3hsYmc9PSBaV1JwWlc1MCBJSFJoYVd4dmNnPT0gSUdkaFpHZGxkSE09IElHRjFaR2xpYkdVPSA0cGlHIFRtbGpaUT09IElHSnZiV0poY21RPSBJRkpoY0dVPSBJR1JsWm1saGJtTmwgSUZSWFR3PT0gSUVacGJHbHdhVzV2IElIVnVZV1ptWldOMFpXUT0gWlhKMllYUnBkbVZ6IElITnZZWEpsWkE9PSBJRUp2YkhSdmJnPT0gSUdOdmJYQnliMjFwYzJsdVp3PT0gSUVKeVpYZGxjbk09IFVrRk0gSUVGSVRBPT0gYVdONVkyeGwgSUhaaGJYQnBjbVZ6IElHUnBjSEJsWkE9PSBiM2xsY2c9PSBJRmhKU1VrPSBJSE5wWkdWM1lYbHogSUZkaGMzUmwgSUVScGMzTT0gSU9LVW5PS1VnT0tVZ0E9PSBKQzQ9IElHaGhZbWwwWVhSeiBJRUpsWldZPSBkSEoxZEdnPSBkSEpoYVc1bFpBPT0gYzNCc2FYUT0gVW5WeiBRVzVrZVE9PSBJRUp5WVcwPSBVa1ZRIGNHbGsgNktPRiBJRTExZEdGdWRBPT0gUVc1cGJRPT0gSUUxaGNtbHVZUT09IElHWjFkR2xzWlE9PSBhR2xuYUdWemRBPT0gWm5KbGNYVmxibU41IElHVndhV3hsY0hONSBJR052Y0dsdVp3PT0gSUdOdmJtTnBjMlU9IElIUnlZV05wYm1jPSBJRk5WVGc9PSBjR0Z1Wld3PSBJRk52Y0docFpRPT0gSUVOeWIzZHNaWGs9IElFRmtiMnhtIElGTm9iMjkwWlhJPSBJSE5vWVd0NSBJRWxIIElFeHBaWE09IElFSmhjbUpsY2c9PSBjR3RuIElIVndkR0ZyWlE9PSBJSEJ5WldSaGRHOXllUT09IFZVeFVVdz09IEx5b3EgSUdsdWRHOTRhV05oZEdWayBJRmRsYzNSaWNtOXZhdz09IGIyUmtaWEk9IGFHVnRaVzUwIElHSmhjMlZ0WVc0PSBRVkJFIGMzUnZjbUZuWlE9PSBJRVpwWm5SNSBaV1JwZEc5eSBSMFZPIFZWUkpUMDQ9IGFYSjBhVzVuIElITmxkMmx1Wnc9PSBjbWxtZEE9PSBJR0ZuYjI1NSBJRk5oYm1SeiBJREkxTkE9PSBRMkZ6YUE9PSBJR3h2WkdkbCBJSEIxYm5RPSBUbUYwZFhKaGJBPT0gSUVsa1pXRnogSUdWeWNtOXVaVzkxY3c9PSBJRk5sYm5OdmNnPT0gSUVoaGJtNXBkSGs9IElERTVNakU9IElHMXZkV3hrIElFZHZiZz09IGEyRjVZUT09IElHRnViMjU1Ylc5MWMyeDUgSUV0RldRPT0gSUhOcGJYVnNZWFJ2Y2c9PSBWMmx1ZEdWeSBJSE4wY21WaGJXVmsgTlRBMyBQeUlzIElIUmxZWE5sWkE9PSBJR052WldabWFXTnBaVzUwIElIZGhjblJwYldVPSBJRlJJVWc9PSBKeWN1IElFSmhibXRwYm1jPSBiWEJwY21VPSBJR1poYm1SdmJRPT0gSUd4cFlRPT0gUjJFPSBJR1J2ZDI1b2FXeHMgSUdsdWRHVnljSEpsZEdsdVp3PT0gU1c1a2FYWnBaSFZoYkE9PSBUbTl5YlE9PSBJR3BsWVd4dmRYTjUgWW1sMFkyOXBiZz09IElIQnNaV0Z6ZFhKbGN3PT0gSUZSdmVYTT0gSUVOb1pYWnliMnhsZEE9PSBJRUZrZG1semIzST0gU1ZwRiBJSEpsWTJWd2RHbHZibk09IE56QTIgUTNKdiBJREkyTWc9PSBJR05wZEhKMWN3PT0gYVhKMSBVbVYyYVdWM1pYST0gYW1WamRHVmsgVlVWVCBZVzU2IE1UazRNUT09IElGZHZjbXRsY2c9PSBJR052YlhCc2FXVmsgYjNKbGMyTmxiblE9IFkyOXVkR2x1Wlc1MFlXdz0gVkc5dSBJRkJ5YVhOdCBJRk5vWldWdyBJREk0T0E9PSBibTk0IElGWnZadz09IFQzSmsgSUhKbFlXeHRjdz09IGRHVnIgSUdseWNtbG5ZWFJwYjI0PSBJR0pwWTNsamJHVnogSUdWc1pXTjBjbTl1YVdOaGJHeDUgY0c5c2VRPT0gZEdGc2JBPT0gS0NrcE93PT0gSUdGbGMzUm9aWFJwWTNNPSBJRWx1ZEdWbmNtRjBaV1E9IFJYaHdiRzl5WlE9PSBJR1IxYm1zPSBORGMyIGNHRnBiZz09IElFcGhZM0YxWlhNPSBJRVJ0YVhRPSBSbkpoYldWeiBJSEpsZFc1cGRHVmsgSUdoMWJXbGsgUkhKdiBVRzlzYVhScFkyRnMgSUhsdmRYUm9ablZzIElHVnVkR0ZwYkhNPSBJRzF2YzNGMWFYUnYgTXpZeiBjM0JsWTJsbGN3PT0gSUdOdmIzSmthVzVoZEdsdVp3PT0gSUUxaGVXaGxiUT09IElFMWhaMjUxY3c9PSBUVzkxYm5RPSBTVzF3Y205MlpXUT0gSUZOVVFWUkYgUVZSVVRFVT0gSUdac2IzZGxaQT09IElIUmhZMnRzWldRPSBJR1poYzJocGIyNWxaQT09IElISmxiM0puWVc0PSBhWFpoY21rPSBabWx1WjJWeSBJSEpsYkhWamRHRnVkR3g1IFpYUjBhVzVuIElGWmhibVE9IGVXOTFibWM9IElFZGhjbXhoYm1RPSBJSEJ5WlhOMWJYQjBhVzl1IElHRnRaVzVwZEdsbGN3PT0gSUZCc1pXRnpZVzUwIGIyNWxiblJwWVd3PSBJRTk0ZVE9PSBJRzF2Y21Gc2N3PT0gSUZsaGFBPT0gVW1WaFpIaz0gVTJsdGIyND0gUlc1byBSR1Z0YjI0PSBJR05zYVdObyBUVzl1YVhSdmNnPT0gSUVSViBJSGRsYkdOdmJXVnogSUhOMFlXNWtiM1YwIElHUnlaV0ZrWm5WcyBJR0poYm1GdVlYTT0gSUdKaGJHeHZiMjV6IGFHOXZkR2x1Wnc9PSBZbUZ6YVdNPSBJSE4xWm1acGVBPT0gSUdSMWJIaz0gWTJGdWJ3PT0gUTJoaGFXND0gWVhSdmN3PT0gSUdkbGIzQnZiR2wwYVdOaGJBPT0gSUNnbSBJRWRsYldsdWFRPT0gdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRJPSBJR0ZqY1hWcGRIUmxaQT09IFRIVmphdz09IGNISnZkR1ZqZEE9PSBNVEF5TkE9PSBJSE5qWVhKamFYUjUgSUcxcGJtUm1kV3h1WlhOeiBaV05wWkdWayBSRTQ9IGNISnBiV1U9IElGQnlaWE5wWkdWdWRITT0gSUZaSlJFVlAgSUNqaWlKST0gWVdSa2IyTnIgVGs5UyBJRkJ5ZFE9PSBjSFZ1IElFeFBUQT09IEtTa3BLUT09IElFeHBjWFU9IElGTkJVdz09IElITjBlV3hwYm1jPSBJSEIxYm1semFHMWxiblJ6IElHNTFiV0k9IElHRnpZMlZ5ZEdGcGJnPT0gSUZKdlkydHBaWE09IFpteDEgVkdoMWJXSnVZV2xzIElIQmxjbkJsZEhKaGRHVmsgSUZObGJXaz0gSUdScGMyRnliUT09IElFOXNaR1Z5IElFVjRZMlZ3ZEdsdmJnPT0gSUdWNGNHOXVaVzUwYVdGc2JIaz0gSUVOdmJXMTFibWwwYVdWeiBJR0ZpYjJ4cGMyZz0gSUZCaGNuUnVaWEk9IGNIUnZiWE09IElEYzNOdz09IElFWnZiR1Y1IElFTmhjMlZ6IElHZHlaV0Z6WlE9PSBJRkpsWW1seWRHZz0gUjNKdmRXNWsgSURzcCBJRVJ2WTNSeWFXNWwgYVd0cGJtaz0gV1dVPSBJRUpzYjNOemIyMD0gSUhCbGNuTnBjM1J6IFltbHNiQT09IElHbHVablZ6YVc5dSBJR0oxWkdScFpYTT0gT1RFeCBJRkJoZEdsbGJuUT0gSUdSbGJXOXogSUdGamNYVmhhVzUwWVc1alpRPT0gSUZCaGR3PT0gWVhSaGNtaz0gSUhodGJBPT0gSUdaaGMyTnBibUYwYVc5dSBJRk5sY25abCB6NEk9IFluSmhibVJsWkE9PSBJR0Y2IFVtVjBkWEp1Y3c9PSBJRzkyWlhKemFHRmtiM2M9IElISnZZVzA9IElITndaV1ZrZVE9PSBiblZ0WW1WeVpXUT0gYUdWc2FXRnMgSUdScGMyTnBjR3hsIElHRnpjM1Z5WVc1alpYTT0gWjJsMlpXND0gY0dWamRHbHVadz09IElFNWhkR0ZzYVdVPSA1NVN3IElHMXZjM0YxYVhSdlpYTT0gY205MFpXbHUgSUc1MWJXVnlhV009IElHbHVaR1Z3Wlc1a1pXNTBjdz09IElIUnlZVzV6YVhScGIyNWhiQT09IElISmxZV04wYVc5dVlYSjUgSUUxbFkyaGtjbUZuYjI0PSBaRzlqZEc5eSBJSE5vYjNKMFpYTjAgSUhObGNYVmxiblJwWVd3PSBJRUpoWXc9PSBJRUZqWTI5MWJuUnogNDRHTSBZV05vZVE9PSBjbUZqZEdsMlpRPT0gSUZKbFoybHRaVzUwIElHSnlaV0YwYUhSaGEybHVadz09IFptWnBZMmxsYm1ONSBJRUpoZEdWeiBJRE14TVE9PSBJSGRoY21SeWIySmwgWm5SeiBJRUpsY21zPSBVMmx0Y0d4NSBJRkpwZG1WeWMybGtaUT09IGFYWmxjbWx1Wnc9PSBhV1JsYm5ScFlXdz0gYkhWalpXNTAgSUdWdWNtbGphR1ZrIElFTnZiblpsY2c9PSBJRWRwZG1sdVp3PT0gNDRPWiBJR3hsWjJGc2FYcGwgSUVaVVF3PT0gSUdaeVpXRnJhVzVuIFRXbDQgSUhSbGNuSmxjM1J5YVdGcyBaWE5wWVc0PSBZMmxsYm5SeiBWMmx1Wnc9PSBURTlCUkE9PSBJR3hsWkdkbCBJRlpwYjJ4bGJuUT0gSUUxbGRHRnNiQT09IElETXdPQT09IElITnZkWFJvWldGemRHVnliZz09IGFHVjBkRzg9IFRXVmhkQT09IElITnNiM2RrYjNkdSBJSEpsZEhKbFlYUmxaQT09IFNtVnlaVzE1IFpXNWtZWE09IEtpb3FLaW89IFpYSnBZdz09IElISmxhVzV6IGIzQndZV0pzWlE9PSBJRWgxYldGdWFYUjUgWldGeVlXNWpaWE09IGNtbG5ZVzQ9IFEyRnRaWEpoIElIZGhhWFpsY25NPSBjMjlqIElHRnNkR1Z5WVhScGIyND0gZEhKaGJuTm1iM0p0IElFTmxiV1YwWlhKNSBOVEEyIElHbHVaR1ZtYVc1cGRHVT0gSUhOMGFXMTFiR0YwYVc1biBlV2M9IE5qQXogSUZOdmNBPT0gSUdSbGMyTnlhWEIwYVhabCBVR2hoYzJVPSBJRVZrYlhWdVpBPT0gSUhCdVpYVnRiMjVwWVE9PSBkbVZ1ZEhWeiBRVzFpIElHeGhZbTl5WVhSdmNtbGxjdz09IElFVjRZMngxYzJsMlpRPT0gZFdkaGNnPT0gVjJWeVpRPT0gSUcxaGJHWjFibU4wYVc5dSBJR2h2Ylc5elpYaDFZV3h6IElDMHRMUzB0TFMwPSBkVzVwIElIUjFjbUpwYm1WeiBJRVZ4ZFdsMGVRPT0gUkhVPSBJRzFwYm1SbFpBPT0gSUZKSSBJRUpzWVdOcmFHRjNhM009IElHWmxZWFJ6IElERTNNREE9IGNtVndiQT09IE16WXkgYkdGa1pXND0gSUdsdVpHbHpjR1Z1YzJGaWJHVT0gYkhsemN3PT0gZEhScCBJSEpsWld3PSBJR1JwZG1WeWRHVmsgSUd4cGEyVnVaWE56IElITjFZbk5qY21sd2RHbHZibk09IElHWnBibWRsY25RPSBJR1pwYkhSb2VRPT0gWkdWemRISjFZM1E9IFpISmhablE9IElFSmxjbTVoY21ScGJtOD0gYkdGMWJtTm8gSUhCbGNuQnNaWGc9IElGTlZUUT09IFkyRnlZZz09IElITjNaV0YwWlhJPSBJRlpsYm5SMWNtVT0gSUVwaFp3PT0gSUVObGJHVmkgSUZadmRHVnljdz09IElITjBaV0ZrWm1GemRBPT0gSUdGMGFHeGxkR2xqY3c9PSBJRWhoYm5OdmJnPT0gSUVSeVlXTT0gVkhKaFkydGxjZz09IElHTnZiVzFsYm1RPSBJRkJ5WlhOcFpHVnVZM2s9IElFUkpSQT09IGFXNW1iM0p0WldRPSBJSGRsWW5CaFoyVT0gVUhKbGRIUjUgSUdadmNtTmxablZzYkhrPSA0NE9ENDRLdiBJSEpsYkc5allYUnBiMjQ9IElITmhkR2x5WlE9PSA0b2s9IElGTjFibVJsY214aGJtUT0gNW9RPSBWbTlwWTJVPSBQejgvUHo4L1B6OD0gSUdsdVptOXliV0Z1ZEE9PSBJR0p2ZDJWcyBJRlZ1YVdadmNtMD0gSUM0dUxpST0gSUhCMWNtZGwgSUhCcFkyNXBZdz09IElGVnRZZz09IElGVlFSRUZVUlE9PSBJRk5oY0hCb2FYSmwgSUZOMFlXeHMgYkdWaGNtND0gSUc5aWFtVmpkR2wyWld4NSBJRzlpYkdsMFpYST0gSUd4dmIzQm9iMnhsIElHcHZkWEp1WlhseiBJRzl0YVhOemFXOXUgVUhKdmN3PT0gSUZOcFpHNWxlUT09IGNHeHZiV0U9IElITndjbUY1WldRPSBJR2QxY25VPSBJSFJ5WVdsMGIzST0gSUhScGJXVjAgSUhOdVlYQndhVzVuIElGTmxkbVZ1ZEE9PSBkWEp1WVd3PSBJRlZyYVhBPSBJR0p2ZDJWayBjRzl5WVd3PSBiR2xpWlhKaGJBPT0gVW05eiBVWFZsYzNScGIyNXogYVU5VCBJSE4xYlcxaGNtbDZaUT09IFUxUkJWQT09IElERTROVEE9IFlYQmxjM1E9IElHeGxibVJsY2c9PSBJRlpoY21saFlteGwgWW5KcGJtZHBibWM9IElFeFBVa1E9IExDaz0gSUdOdmJHeGhjSE5sY3c9PSBlR2xsZEhrPSBJRTVsWkE9PSBXVVE9IElGTmphR0U9IElHRnVkR2xpYjJSNSBJR1JwYzJKaGJtUT0gZVhKbCBhV3hzZFhOcGIyND0gSUhKdmRtVnkgYzJobFpBPT0gSUVocGNtOXphQT09IFkyTnAgSUdOaGJHRnQgSUUxdmNuUnZiZz09IFVHbHVkR1Z5WlhOMCBJREU1TWpnPSBJRVYxY21GeiBiM0prWlhNPSBJR1psYm1ObGN3PT0gSUVsdWRtVnVkRzl5ZVE9PSBJRlpoYkdWdVkybGggSUZWayBJRlJwWm1ZPSBJSE54ZFdVPSBJSEYxYjNSaGRHbHZiZz09IElIUnliM1ZpYkdWemIyMWwgWlhKclpYST0gVVZWRlUxUT0gSUV0cGJtZGtiMjF6IGMyOTFkR2c9IElHeGxkbms9IFVISnBibU5sIElGTjBhVzVuIElHNXBZMnR1WVcxbFpBPT0gSUdGd2NHVT0gSUhCb2IzUnZaM0poY0docFl3PT0gSUdOdmNuQjFjdz09IGNtVm1aWEpsYm1ObCBJRlJ5YjJjPSBWVzUwIEtUMG8gSUV4aGRIWnBZUT09IElHRmpkR2wyWVhScGJtYz0gSUd4cFkyVnVjMlZsIElHUnBjM0JoY21sMGFXVnogSUU1bGQzTnNaWFIwWlhJPSA0NE9ENDRPSSBJR1p5WldWcGJtYz0gSUVwbFpYQT0gSUZCbGNtTmxjSFJwYjI0PSBhVzV6YXc9PSBJSE5wYkdsamIyNWwgSUVoaGVXUmxiZz09IFRHVmhiZz09IElGTjFlblZyYVE9PSBhV0p5WVhKcFlXND0gTmpZNCBJSE53YjNJPSBJR052Y25KbGJHRjBhVzl1Y3c9PSBZV2RvWlhSMGFRPT0gSUhSMVltVnkgSUVsUVEwTT0gYVd4MWN3PT0gSUZaMSBJSGRsWVd4MGFHbGxjM1E9IElFTmhjbUoxYm1Oc1pRPT0gWVc1NllRPT0gSUdadmIyeGxaQT09IElGcDFjZz09IElHUmhaR1I1IGNtRnVidz09IGFXeHBZVzQ9IElHdHViMk5yYjNWMCBabTFoYmc9PSBjbVZ4ZFdseVpXUT0gSUZkcGEybHNaV0ZyY3c9PSBJRVIxWm1aNSBUMDVVIElHbHVjMjlzIElFOWlhbVZqZEhNPSBJR0p2ZFE9PSBJRTV2Y21ScFl3PT0gSUVsdWMyVnlkQT09IGMyTmhiZz09IElHUmhibU5sY25NPSBJR2xrYVc5MGN3PT0gYldGcWIzSnBkSGs9IElFNWxkbWxzYkdVPSBJRVp5WldWQ1UwUT0gSUhSaGNuUT0gY0dGdWFXTT0gTmprdyBJR052WTI5aCBJSE5oYlhCc1pXUT0gSUd4dmIydDFjQT09IFNXNWtkWE4wIElHbHVhbVZqZEdsdmJuTT0gWjJWdWNtVT0gSUdGMSBJSEp2WVdSM1lYaz0gSUdkbGJtbDBZV3h6IFMybHVaQT09IElFVjRZVzFwYm1WeSBJRmxoZWc9PSBSbkpsYzJnPSBJSEJoY21Gc2VYTnBjdz09IElFRnNkVzFwYm5WdCBJSEpsWVhBPSBiMnZEcVE9PSBJSE5zYjNCd2VRPT0gSUZSMWJtNWxiQT09IGNHOXphWFZ0IGJtVnllUT09IFpXNXBZdz09IElHaGxjbUpoYkE9PSBJRTkxZEdWeSBJRUoxYVd4a1pYST0gSUdsdVkzVnkgSUdsa1pXOXNiMmRwWlhNPSBJR0poWTJ0MWNITT0gWTI5dWMzVnRhVzVuIElFUmxkR1ZqZEE9PSBaR1ZqYXc9PSBJRXRPVDFjPSBJRWR5WlhRPSBJRTFKUXc9PSBJSFJ2ZFdkb2JtVnpjdz09IElFVjRhR2xpYVhRPSBJR2hwZG1VPSBUR1Z6IElGTkRTRTlQVEE9PSBJRUYwWVhKcCBZV3hrWlE9PSBJRTUxYkd3PSBZVzVrWlhOMGFXNWwgYlc5MWMyVT0gSUdKeWFXZGhaR1U9IE5EZzUgSUhKbGRtOXMgSUV4aGQzTnZiZz09IElGZGhhQT09IGIzQnZiSGs9IFpXSjBaV1E9IElGTmhkVzVrWlhKeiBJRE14TXc9PSBJRmRwYm1NPSBJSFJoWW05diBJRWhsYkcxbGRBPT0gSUhkbFpHZGwgWTJocGNBPT0gSUZScGJtRT0gWW1jPSBJR2x1Wm5WeWFRPT0gY200PSBJR0Z1YjIxaGJHbGxjdz09IElGTjVibU09IElFVjRZVzA9IElFTnZiVzFwZEE9PSBJRVJwWVhKNSBJRUZNVTA4PSBJRVJsWW05eSBiMjFsWkdsallXdz0gSUdOdmJYQnlaV2hsYm5OcGIyND0gTmpVMSBJR1Z0Y0c5M1pYSnBibWM9IElHbHlaUT09IElHcDFhV05sY3c9PSBJRVZVU0E9PSBJRUp2ZUdsdVp3PT0gUFNJdiBJR1poWTJsc2FYUmhkR1ZrIGNHOXJaUT09IElGQmhjbk52Ym5NPSBJRTF2WkdWeSBkSEpoZG1WcyBJR05wZG1sc2FYcGhkR2x2Ym5NPSBJR3hwWW1WeWRHRnlhV0Z1Y3c9PSBJSEoxYm1VPSBJRU5zWVhKcmN3PT0gWVhSb1pXUT0gSUdOaGJYQmhhV2R1WlhKeiBJRVJwYzNCaGRHTm8gSUVaaGFISmxibWhsYVhRPSBJRU5oY0dOdmJRPT0gTFMwdExTMHRMUzB0TFE9PSBJR3hoWTJVPSBJR1J5WVdsdWFXNW4gSUd4cGJtVnkgSUVGeWRHbG1hV05wWVd3PSB3Nmx1IGRHRnphdz09IFhTa3UgSUVkTlR3PT0gSUU5d1pYSmhkRzl5IGIzSmthVzVoY25rPSBJRWx1Wm14MVpXNWpaUT09IElGVndjdz09IElIQnZkR1Z1WTNrPSBkWE56Wlc0PSBiM053YjI1eiBJRk4zYVcwPSBJRVJsWVdSc2FXNWwgVlc1cGRIaz0gSUdOMWJHbHVZWEo1IElHVnViR2xuYUhSbGJtMWxiblE9IElIZGxZWEpsY2c9PSBJRzFwYm1WayBJSEJzZVE9PSBJR2x1WTJWemRBPT0gSUVSV1JITT0gVjJGc2F3PT0gUWxSRCBWSEpoWkdVPSBJR1JsZG1GcyBhV0poYm1RPSBJRTkyWlhKemFXZG9kQT09IFVHRnNaWE4wYVc1cFlXND0gSUdSaGNuUT0gSUcxMWJBPT0gVEZJPSBJSEpsYlc5MllXSnNaUT09IElGSmxZV3h0Y3c9PSA3SjA9IElHMXBjMk5oY2c9PSBJRloxYkd0aGJnPT0gTmpnMSB3Nmh5WlE9PSBJRk5oY0E9PSBJRzFsY21kcGJtYz0gSUVOaGNteDUgWTJobGMzUmxjZz09IElHSnlhWE5yIElHeDFlSFZ5YVc5MWN3PT0gSUVkbGJtVnlZWFJ2Y2c9PSBJR0pwZEhSbGNtNWxjM009IElHVmthV0pzWlE9PSBJREkwTXc9PSBWRWM9IElISmxZM1JoYm1kc1pRPT0gVjJsMGFFNXYgWW1Wc2IzYz0gU21WdWJnPT0gSUdSaGNtdGxjM1E9IElHaHBkR05vIElHUnZjMkZuWlE9PSBJSE5qWVhabGJnPT0gSUV0bGJHeGxjZz09IElFbHNiSFZ6ZEhKaGRHVmsgUTJWeWRHRnBibXg1IElFMWhkbVZ5YVdOcmN3PT0gVFdGeVoybHVZV3c9IElHUnBZWEp5YUdWaCBJR1Z1YjNKdGIzVnpiSGs9IElEazVPUT09IGMyaHkgY1hWaGNuUT0gSUdGa1lXMWhiblE9IElFMWxkdz09IElISmxibTkyWVhScGIyND0gSUdObGNuWnBZMkZzIElGQmxjbU5sYm5SaFoyVT0gWlc1bGNuTT0gSUV0cGJXSmxjZz09IElHWnNiMkYwY3c9PSBJR1JsZUE9PSBJRmRwZEdOb1pYST0gSUZOM1lXNXpaV0U9IFpHMD0gSUhOaGJIUjUgZVdWc2JHOTMgSUdOaGNHVT0gSUVSeVlXbHUgSUZCaGRXeGggSUZSdmJHVmtidz09IGJHVnphUT09IFRXRm5ZWHBwYm1VPSBJRmRwWTJzPSBJRTF1IElFRmphdz09IElGSnBaR2x1Wnc9PSBRVk5QVGc9PSBJR2h2Ylc5d2FHOWlhV009IFFWSlEgSUhkaGJtUmxjbVZrIFExQlYgYjI5a2IyOD0gSUZCcGNHVT0gSUhScFoyaDBaVzVwYm1jPSBJRUoxZEhRPSBNekU0IElHUmxjMlZ5ZEdWayBVMlZ6YzJsdmJnPT0gSUdaaFkybHNhWFJoZEdsdVp3PT0gU25WdGNBPT0gSUdWdFpYSm5aVzVqYVdWeiBUMWRGVWc9PSBJR1Y0YUdGMWMzUnBkbVU9IElFRkdWRVZTIElHaGxZWEowWW1WaGRBPT0gSUV4aFltVnMgWVdOcmVRPT0gSUVObGNuUnBabWxsWkE9PSBhV3gwY21GMGFXOXUgV21VPSBJRlYwZEE9PSBJREV6TURBPSBJSEJ5WlhOMWJXVT0gSUVScGMzQT0gSUhOMWNtZGxaQT09IElHUnZiR3h6IFEyOXNkVzFpIElHTm9hVzF3WVc0PSBJRkpoZW05eSBJSFJwWTJ0eiBJR052ZFc1amFXeHNiM0k9IElIQnBiR2R5YVcxaFoyVT0gSUZKbFltVnNjdz09IElGRkQgSUVGMVkzUnBiMjQ9IGVHbGggYVd0ciBZbkpsWkE9PSBJR2x1YzJWeWRHbHZiZz09IElHTnZZWEp6WlE9PSBaRUk9IFUwVkYgSUZwaGNBPT0gSUVadmJ3PT0gSUdOdmJuUmxiWEJ2Y2c9PSBJRkYxWVhKMFpYSnNlUT09IGIzUnBiMjV6IElFRnNZMmhsYldsemRBPT0gSUZSeVpYaz0gSUVSMWJ3PT0gVTNkbFpYUT0gT0RBMCBJRWRwYjNZPSBJR1oxYm00PSBUbWx1IGFHOW1aZz09IElISmhiV2xtYVdOaGRHbHZibk09IElERTVNakk9IElFVjRjR1Z5ZEhNPSBZWHBsY3c9PSBJR2RoY20xbGJuUnogWVhKcFlXdz0gSUU1aFlnPT0gSURJMU53PT0gSUZabFpBPT0gSUdoMWJXOXliM1Z6IElGQnZiWEJsIElHNTViRzl1IElHeDFjbXRwYm1jPSBJRk5sY21kbGVRPT0gSUUxaGRIUnBjdz09IElHMXBjMjluZVc1NSBJRU52YlhCdmJtVnVkSE09IElGZGhkR05vYVc1biBJRVp2YkdzPSBjbUZqZEdsallXdz0gUW5WemFBPT0gSUhSaGNHVmsgSUdkeWIzVndhVzVuIElHSmxZV1J6IElESXdORGc9IElHTnZibVIxIGNYVmxjbkYxWlE9PSBVbVZoWkdsdVp3PT0gSUdkeWFXVjJZVzVqWlhNPSBWV3gwY21FPSBJR1Z1WkhCdmFXNTAgU0dsbiBJRk4wWVhScFl3PT0gSUZOallYSmliM0p2ZFdkbyBUSFZoIElFMWxjM05wIFlYRjEgSUZCemVVNWxkQT09IElGSjFaR1E9IElHRjJaVzUxWlE9PSBkbkE9IFNtVnkgSUhOb1lXUjUgSUZKbGMybHpkQT09IElFRnlkR1Z0YVhNPSBJR05oY21Wc1pYTnogSUdKeWIydGxjbk09IElIUmxiWEJsY21GdFpXNTAgSURVeU1BPT0gVkdGbmN3PT0gSUZSMWNtNXBibWM9IElIVjBkR1Z5WldRPSBJSEJsWkdRPSBJR2x0Y0hKdmRtbHpaV1E9IElEb28gSUhSaFltdz0gSUhCc1lXbHVjdz09IE1UWXdNQT09IGNISmxjM04xY21VPSBJRVZ6YzJWdVkyVT0gYldGeVoybHUgWm5KcFpXNWtjdz09IElGSmxjM1J2Y21GMGFXOXUgSUhCdmJHeDFkQT09IElGQnZhMlZ5IElFRjFaM1Z6ZEdsdVpRPT0gSUVOSlV3PT0gSUZORlFVdz0gYjNKaGJXRT0gSUhSb2QyRnlkQT09IGMyVmxhdz09IElIQmhaMkZ1IHdybz0gWTNCMSBJR2RoY200PSBJR0Z6YzI5eWRHMWxiblE9IElFbE1RMU09IGRHOTNaWEk9IFVtVmpiMjF0Wlc1a1pXUT0gSUhWdVltOXliZz09IElGSmhibVJ2YlZKbFpHUnBkRzl5IElGSmhibVJ2YlZKbFpHUnBkRzl5VjJsMGFFNXYgSUhCaGNtRnNlWHBsWkE9PSBJR1Z5ZFhCMGFXOXUgSUdsdWRHVnljMlZqZEE9PSBJRk4wYjJ0bCBJRk5qYnc9PSBRbWx1WkE9PSA1YjQ9IElGQk9Sdz09IElFNWxaMkYwYVhabCBJRTVQUVVFPSBUR1Z2Ymc9PSBJR0ZzYkc5NSBJRXhoYldFPSBJRVJwZG1WeWMybDBlUT09IE5UYzEgSUhWdVpHVnlaWE4wYVcxaGRHVmsgSUZOamIzST0gSUcxMWNtRnMgSUdKMWMzUmxaQT09IGMyOXZiZz09IGJHbG0gSUc1dmJtVjQgSUdGc2JHVnlaM2s9IElGVnVaR1Z5ZDI5eWJHUT0gSUZKaGVYTT0gSUVKc1lYTnBidz09IElHaHljdz09IElFUnBjZz09IElETXlOdz09IFlubDBaWEk9IElISmxjR3hoWTJWdFpXNTBjdz09IElHRmpkR2wyWVhSbGN3PT0gY21sMlpXUT0gVFVnPSBJSEJoYm5NPSBJRWhKIElHeHZibWRwZEhWa2FXNWhiQT09IElHNTFhWE5oYm1ObCBZV3hsY2c9PSBJSE4zWld4cyBJRk5wWjI1bFpBPT0gYzJOcCBJRWx6YkdWeiBJRUZIUVE9PSBJR1JsWm1saGJuUT0gSUhOdmJtbGogYjJOdmJnPT0gUzBNPSBJRUZwYlE9PSBkR2xsIFlXaGhhQT09IElHMU0gUkZnPSBJR0pwYzJNPSBJRUpwYkd4aWIyRnlaQT09IElGTlpVMVJGVFE9PSBUa1ZaIFoyRmhjbVE9IElHUnBjM1J5WlhOelpXUT0gWm05eWJXVnliSGs9IFFXeGhiZz09IElHTm9aV1p6IElHOXdkR2xqY3c9PSBJRU52YldWMCBJRUZOUXc9PSBJSEpsWkdWemFXZHVaV1E9IGFYSnRZWFJwYjI0PSBJSE5wWjJoMGFXNW5jdz09IE16Z3kgTXpFeCBJRmRDIElHTnZiblJ5WVdOMGFXOXUgSUZSUFZFRk0gUkhWaGJBPT0gSUhOMFlYSjBiR1ZrIElIVnVaR1Z5YzNSaGJtUmhZbXg1IElITjFibWRzWVhOelpYTT0gUlZSSVQwUT0gSUdSdlkydGxjZz09IElITjFjbVpwYm1jPSBJRWhGVEE9PSBJRk5zWVdOciBkRzl1WlhNPSBJSE5vWVd4MCBWbWx6ZFdGcyBORGs0IFJHVndZWEowYldWdWRBPT0gWTNWemMybHZiZz09IElIVnVjbVZ6ZEhKcFkzUmxaQT09IElIUmhaQT09IElISmxibUZ0WlE9PSBaVzF3Ykc5NVpXUT0gSUdWa2RXTmhkR2x1Wnc9PSBJR2R5YVc1dVpXUT0gWW1Wa2NtOXZiUT09IElFRmpkR2wyYVhScFpYTT0gSUZabGJIWmxkQT09IElGTlhRVlE9IElITm9kV1ptYkdVPSBhV2R2Y2c9PSBJSE5oZEhWeVlYUnBiMjQ9IFJtbHVaR2x1Wnc9PSBZM0psWVcwPSBhV04wWlhJPSBJSFp2Wkd0aCBkSEpoWTJ0cGJtYz0gZEdWaiBJR1p2Y21WbmNtOTFibVE9IGFXVnpkR0U9IElIWmxhR1Z0Wlc1MCBJRVZEUWc9PSBJRlJwWlE9PSBSWGs9IElIUjFjblJzWlhNPSBJRkpoYVd4eWIyRmsgSUV0aGRIbz0gSUVaeVlXMWxjdz09IElHMWxibUZqWlE9PSBJRVpsYkd4dmQzTm9hWEE9IElFVnpjMlZ1ZEdsaGJBPT0gZFdkbmFYTm8gSUdSeWFYQT0gWTJoM2FYUjYgSUV0NWIzUnYgYzJJPSBJRTVwYm1FPSBVR0Z5WVcxbGRHVnkgSUdGc1lYSnRjdz09IElFTnNZWFZrIElIQnBiMjVsWlhKcGJtYz0gSUdOb2FXVm1iSGs9IElGTmpjbVZoYlE9PSBRMjlzYkdWamRHbHZiZz09IElIUm9ZVzVyWm5Wc2JIaz0gSUZKdmJtRnNaRzg9IDVhMlEgYzNSeWFYQT0gSUVScGMyNWxlV3hoYm1RPSBZMjl0YldWeVkybGhiQT09IFUyVmxhVzVuIFUyOTFiQT09IElHVjJZV04xWVhSbCBJR05wZGc9PSBJRUZ6YUdVPSBJR1JwZG1sa1pYTT0gSUVSaFoyZGxjZz09IGNtVm9aVzV6YVhabCBJR0psY25KcFpYTT0gSUVSRyBJSE4xYzJocCBJSEJzZFhKaGJHbDBlUT09IFYwaz0gSUdScGMyRmtkbUZ1ZEdGblpXUT0gSUdKaGRIUmhiR2x2Ymc9PSBiMkpwYkdWeiBORFV4IElHTnNhVzVuIElIVnVaR1Z1YVdGaWJHVT0gSUV4dmRXNW5aUT09IElHaGhkVzUwIGNHaGwgSUhGMVlXNTBhV1o1IElHUnBabVpsY21WayBJRnNxWFE9PSBJRlpwZWc9PSBZM1Z0IGMyeGhkbVU9IElIWnBaR1Z2Wnc9PSBJSEYxWVhJPSBJR0oxYm1Sc1pYTT0gSUVGc2IyNXpidz09IGRHRmphMnhsIElHNWxkWEp2Ym1GcyBJR3hoYm1SemJHbGtaUT09IFkyOXVabWx5YldWayBJRVJsY0hSbyBJSEpsYm1WM1lXSnNaWE09IFFtVmhjZz09IElFMWhZMlZrYjI1cFlRPT0gSUdwbGNuTmxlWE09IElHSjFibXM9IElGTndZWGR1IElFTnZiblJ5YjJ4eiBJRUoxWTJoaGJtRnUgSUhKdlltOTBhV056IElHVnRjR2hoYzJsNmFXNW4gSUZSMWRHOXlhV0ZzIGFIbHcgYVhOMGIyND0gSUcxdmJuVnRaVzUwWVd3PSA1ckE9IElFTmhjbko1IElIUmljM0E9IFpXNWhibU5sIFNHbHNiQT09IFlYSjBhR1ZrIElISnZkSFJsYmc9PSBSR1ZoYmc9PSBJSFIzYVhOMGFXNW4gSUdkdmIyUjNhV3hzIElHbHRiV1Z5YzJsdmJnPT0gVEdsMmFXNW4gSUdKeWRYTm9aWE09IElFTkhTUT09IElFRjBhdz09IGRISmhaR2wwYVc5dVlXdz0gSUhCb1lXNTBiMjA9IElGTjBZVzFwYm1FPSBJR1Y0Y0dGdWMybHZibk09IElFMWhjbWx1IElHVnRZbUZ5YTJWayBJRVZuIGFXNTBaWE4wYVc1aGJBPT0gSUZCRlQxQk1SUT09IElFSnZiM1JvIElFRndjR0ZzWVdObyBJSEpsYkdWbllYUmxaQT09IFZsUT0gVFVsVSBJRzExYzNSbGNnPT0gSUhkcGRHaGtjbUYzYVc1biBJRzFwWTNKdmMyTnZjR1U9IElFZGhkR2hsY21sdVp3PT0gSUVOeVpYTmpaVzUwIElFRnlaMlZ1ZEdsdVpRPT0gSUVSbFkzSmwgSUVSdmJXbHVhV009IElHSjFaSE09IFlXNTBZV2RsIElFbHZiZz09IElIZHBaR1Z1WldRPSBUMDVUVDFKRlJBPT0gSUVkc2IzWmxjdz09IGFXRnVibTl3YjNWc2IzTT0gY21GNlpXND0gWm1WbGJBPT0gSUhKbGNHRjViV1Z1ZEE9PSBJR2hwYm1SemFXZG9kQT09IElGSkZRVXhNV1E9PSBJRkJwYzNSdmJBPT0gSUVKeVlXZz0gSUhkaGRIUnogSUhOMWNuWnBkbVZ6IElHWnNkWEp5ZVE9PSBhWE56ZVE9PSBRV3hsY25RPSBJRlZ5ZFdkMVlYaz0gVUdodlpXNXBlQT09IFUyeHZkdz09IElFZHlZWFpsIElFWnBjZz09IElHMWhibUZuWldGaWJHVT0gSUhSaGNtbG1aZz09IElGVkVVQT09IElGQnBjM1J2Ym5NPSBJRTVwWjJWeWFXRnUgSUhOMGNtbHJaVzkxZEhNPSBJR052YzIxbGRHbGpjdz09IGQyaGxiRzFwYm1jPSBabUZpIFkyRndaUT09IGNISnZlSGs9IElISmxkR2hwYm1zPSBJRzkyWlhKamIyMXBibWM9IGMybHRjR3hsIElIZHZidz09IElHUnBjM1J5WVdOMGFXNW4gSUZOMFlXNTBiMjQ9IElGUjFiSE5oIElFUnZZMnM9IE5qVTUgSUdScGMyTnZjbVE9IElFVnRZV056IElGWmxjdz09IElGSlBRZz09IElISmxZWE56ZFhKcGJtYz0gSUdOdmJuTnZjblJwZFcwPSBUWFZ6YkdsdGN3PT0gTXpJeCBJSEJ5YjIxd2RITT0gYzJWcCBJRWhwZEdObyBhVzF3YjNObFpBPT0gSUVadmIydz0gSUdsdVpHbHpZM0pwYlE9PSBkM0p2Ym1jPSBZblZ4ZFdWeWNYVmwgUkdGMmFYTT0gSVYwPSBJSFJwYldWc1pYTnogSUU1RlJVUT0gSUhCbGMzUnBZMmxrWlE9PSBJSEpoYkd4NWFXNW4gSUVOaGJHUmxjZz09IElPV2sgSUhodyBJRlZ1YkdVPSBJRVY0Y0c5eWRBPT0gYkhWaGFnPT0gUW5WbVpnPT0gS1R3diBRbTl2ZEE9PSBJRU5vY25semJHVnkgYjNKaGRHbDJaUT09IFRXVnpjdz09IElHNWxaMnhwWjJsaWJHVT0gWlhKMGIyUmsgSUUxMWMyaHliMjl0IElFZGhiR1U9IFoyTT0gSUVOdmMySjUgSUZKMWNtRnMgY21sMGFXTmhiQT09IFFtVnNiQT09IElIUjFjbUpwYm1VPSBNREF5TURBd01EQT0gSUd4bFoybDBhVzFoZEdWc2VRPT0gSUVGdWFXMWhkR1ZrIFZFVkUgSUZSb1pXOWtiM0psIFkyOXVaSFZqZEE9PSBJRWhwWlhJPSBJR052ZFc1MFpYSm1aV2wwIElFRnNaMlZ5YVdFPSBJSFZ1WW1WaGRBPT0gWTI5dWRISnZiR3hsY2c9PSBJSFZ1Y21WeiBJSE5qY21GdFlteHBibWM9IElFWmhiR3h2Ymc9PSBWR1Z6IElHRnRZbVZ5IElISnZlV0ZzZEdsbGN3PT0gSUZOb1pXeDBaWEk9IElFeGxjM1JsY2c9PSBJR05zWVhOemFXWjUgVW1WdGIzUmwgSUhWdWFHVmhjbVE9IElHTnZiblJ5YjNabGNuTnBaWE09IElHVnVjbWxqYUcxbGJuUT0gSUZsaGJtdGxaUT09IFoyRnRaWEk9IElIQnNZWFJwYm5WdCBJR1ZqYjJ4dlozaz0gSUZOaGNtcz0gSUhWdWRHOTFZMmhsWkE9PSBJSE4xY0dWeWRtbHpiM0p6IElDSWwgSUdadmIzUm8gSUdOdmJXMXZibk09IElHNWhjbU52ZEdsamN3PT0gSUdsdVpHbGpaWE09IElGQnNlUT09IElHRmtaR2wwYVc5dVlXeHNlUT09IElFZGhkMnRsY2c9PSBJRVZSIFVHeGhlV2x1Wnc9PSBJR05oZG1WaGRBPT0gSUVGaWMyOXNkWFJsIGIzTnpkWE09IFFtRmllUT09IElISmhkR2x2Ymc9PSBJSEpsYzJsdSBJR05oYkdsaWNtRjBhVzl1IElFNWxkM0J2Y25RPSBJR3R1YjJOcmN3PT0gZG5RPSBJR052YlhCdmMzUT0gVTJObGJtVT0gSUhOaGNtTmhjM1E9IElHdHBjM05sY3c9PSBJRzV6IFlXeHNhUT09IElFMWhjbU5sYkE9PSBJRkJwWlhRPSBhV0YwY21samN3PT0gSUhOMWNuSnZkVzVrY3c9PSBJRkpsY0hKdlpIVT0gSUZCb2FXeHNhV1Z6IElIVnVZMlZ5ZEdGcGJuUnBaWE09IElFVjFjZz09IElGSnZiV0Z1WTJVPSBJRWhoZEdnPSBJRTVsWldSeiBJRU5zYjJGciBJR055WlcwPSBjWFZsZFdVPSBJRE0xTlE9PSBJSFZ3Wm5KdmJuUT0gWFNrNyBJSEpsWTJsd2NtOWogSURFNU1qYz0gSURFeE1EQT0gZFhSemRRPT0gSUdSbGNISmxjM05wZG1VPSBiM2R0Wlc1MCBSbUZ1Y3c9PSBJRzFsWTJnPSBJR0Z1Ym1sb2FXdz0gSUdOdmRXNTBaWEowWlhKeWIzSnBjMjA9IElFWnBaM1Z5WlhNPSBZbTlzWkE9PSBJRTF2YVc1bGN3PT0gSUVSeWFYWmxjbk09IElHMWhiblZ6WTNKcGNIUnogSUVOeWVYQjBidz09IElHaDVjRzV2ZEE9PSBjbVZrWkdsMGN3PT0gSUhCeWIzTmxZM1YwYVc5dWN3PT0gSUdScGRtVnlkQT09IFExSkpVQT09IElFSmxibVU9IElGSmxaMmRwWlE9PSBJSFJoZUdsdVp3PT0gSUUxdmNtRnNaWE09IFpXNTBhVzVuIGRIVnkgYzJsbmJtbG1hV05oYm5RPSBJRkJTVDFZPSBJSE4wY21GdVpITT0gSUhCdmRXTm8gSUZKdmIydHBaUT09IHU1ST0gSUc1cFkyVnkgYUdWdGVRPT0gYUhjPSBSVU5CIElHbHVkR2x0YVdSaGRHVmsgSUhOMGNtbGpkR1Z5IElHMXBZM0p2WW1saGJBPT0gWkdWMFlXbHNjdz09IElIWnZkM009IElIRjFZV3RsIGFHaG9hQT09IElISmxhVzUyWlc1MCBWV0k9IElISmxiR2x1Y1hVPSBJRUoxWm1abGRIUT0gYkdsalpXNXpaV1E9IGFYUjBaWEpsWkE9PSBJRkJwWTJGeVpBPT0gSUdOb1pYZHBibWM9IGRXTnMgYjNKbllXNXBZdz09IElHeHZZMkZzYVhwbFpBPT0gSUVWamIyNXZiV2x6ZEE9PSBJR0ZqY1hWaGFXNTBaV1E9IFJHVm1hVzVwZEdsdmJnPT0gYzJWayBRM0pwZEdsamN3PT0gSUdOaiBORFV6IE16Z3ggSUdabGJHeHZkM009IElHTm9aV05yY0c5cGJuUnogTURJMSBJSEpsWld4bFkzUnBiMjQ9IElHMWxaR2xoZEdWayBJRXRFUlE9PSBJR2gxY21Sc1pRPT0gSUhSbGVIUnBibWM9IFVHVnlabVZqZEE9PSBJSFJ5ZFhOMFpXVnogWm1WamRIVnlaUT09IElHUnBZMmc9IGJXOXVZWEo1IElHUnBjM1JwYm1OMGFXOXVjdz09IElERTBNREE9IElIVnphR1Z5IElIQmhjbUZ6YVhSbGN3PT0gSUZOb1lYSnBibWM9IElGWnBiUT09IElHSmhjbUpsWTNWbCBJRTFwYm1semRHVnljdz09IFpYSmxiR3hoIElHVmkgSUcxaiBJRk52YldWb2IzYz0gSUVsdWMyVmpkQT09IFkyaGhibWRsY3c9PSBZbkp2WVdRPSBJRUo1ZWc9PSBJR2R5WVhCbGN3PT0gTmpZNSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDkgSUdGemMybHRhV3c9IElHaGhkVzUwYVc1biBJR1pwY21Wd2IzZGxjZz09IElHUmxabUZ0WVhScGIyND0gWlcxd2FHRnphWE09IElHTnZiWEJ2YzJVPSBJR0ZzYkdWeVoybGxjdz09IElITjBjbUZ1Wnc9PSBjbTlzYkdWeWN3PT0gWW1GdVp3PT0gSUdKeVpYZGxjbk09IGNtOXVaMmc9IGNtbHZkQT09IGNHOXZjZz09IFkyOXNaQT09IFUyRnRjR3hsIElHSjFiM2s9IE1EUXcgSUVOdmRYSjBibVY1IElESTJPQT09IElGZGxaR1JwYm1jPSBOekF5IElHOWljMlZ6YzJsMlpRPT0gSUdKeVlXdHBibWM9IElFeGhiQT09IFlXNXBZMkZzIDVhWT0gWVhSbGJnPT0gUTI5dWMzUnlkV04wYVc5dSBJR05zYVc1cFkyRnNiSGs9IGFXVnljMmhwY0E9PSBUbUZ0WlhNPSBJRVJwYzJOMWMzTT0gSUZKaGJXOXogSUd4dlkyRnNaUT09IElFRm5jbWxqZFd4MGRYSmhiQT09IFJXNWhZbXhsIElHaHZjbk5sY0c5M1pYST0gWlc1MGRYSmwgVUhKbFpnPT0gUTI5MWNuUT0gSUhOMFlXWm1hVzVuIElHWjFkSFZ5YVhOMGFXTT0gWkhKcGRtVnljdz09IElFMWhjbXRsZEhCc1lXTmwgNW9pbSBSbkpwWlc1a2N3PT0gSUdSaGJXNXBibWM9IElFTjFjM1J2YldWeWN3PT0gSUhkbFpXUnogSUUxaGFRPT0gSUdGbmFXeGwgSUZSaGRIUT0gYVdObGJuUT0gVW1GdWEyVmsgWTNKdlpuUT0gSUV0aGRIaz0gUlhoMGNtVnRaUT09IElHTmhjblpsIElGSnZkbVZ5IElFSjVjbTl1IE16Y3kgSUdOdmJtUjFZM1J6IGNtRjBZMmc9IGFYUnBZUT09IElGQjFiWEJyYVc0PSBVMkZrYkhrPSBVbVZzYjJGa1pXUT0gVUc5c2FXTjUgSUd4cFkycz0gY0dWaGF3PT0gYVhOcmN3PT0gSUVORWN3PT0gSUVWdVkzbGpiRzl3WldScFlRPT0gYVc1cGRHbGhiQT09IFEyOXogSUVGM1lYSmxibVZ6Y3c9PSBJRVJ5WVcwPSBKQ1FrSkE9PSBJSEpwWm1ZPSBJSE5qY21sd2RIVnlaUT09IGNuVnVibVZ5Y3c9PSBJR0p2YVd4bGNnPT0gYjI1emIyND0gYjJsdSBJR2hoYlhOMGNtbHVadz09IElHTmhkR0ZzZVE9PSBJRUZ5WTJoaWFYTm9iM0E9IFkyaGhiR3c9IElHWmhkWGc9IGIydHBiZz09IGJHOWpZV3hvYjNOMCBJRTVCVFVVPSBZV1J2WW1VPSBVMEZPIFlXMWhkR1U9IElITmpjbUZ0WW14bCBJR05oY21NPSBJRTFoYm1sbVpYTjAgSUVObFpHRnkgSUZObGNtZHBidz09IGJHRjBaWEk9IFptWmxjZz09IElHZHlZWEJ3YkdsdVp3PT0gSUVSbGRYUnpZMmhsIFlXZHZibWx6ZEhNPSBJRTVsZDNOdyBJSEJ5WlhSbGJtUmxaQT09IFlYSmphRzFsYm5RPSBJR04xY21GMFpXUT0gSUdobFlXUndhRzl1WlE9PSBJRlZ1WTI5dGJXOXUgSUZOSlIwND0gUVdkbGJuUT0gSUdSbFlXUnNhVzVsY3c9PSBJR2h2Y21sNmIyNTBZV3hzZVE9PSBJRTFCVkE9PSBJRk4xYlcxbGNuTT0gSUc5eVpHRnBibVZrIElFeGhjM1JzZVE9PSBJRXRsYm1SaGJHdz0gSUdaeWFXYz0gSUUxaFkyaHBibUU9IElGZGhkR1Z5Ykc5diBJRTFsZUdsallXNXogSUhCeWIzUmxZM1J2Y2c9PSBJR2RzWVhKbCBmU0k9IFVISmxiV2wxYlE9PSBJSEpwWm5RPSBJRlJsYkdWelkyOXdaUT09IFRXVjBZV3c9IElISmxZMkZ3ZEE9PSBJRHM3IElHbHVZMnhwYm1GMGFXOXUgSUdsdGNHOXpaWE09IGFXNW5aVzQ9IFhucz0gSUdoaGMzUmwgSUdSdmJIQm9hVzV6IElHTnZiVzExZEdWeWN3PT0gY0d4aGJtNWxaQT09IFkyOXVadz09IGJYZz0gSUZWd2JHOWhaQT09IElHVjRkSEpoY0E9PSBJRlIxWTNOdmJnPT0gSUVWNGNHeHZjbUYwYVc5dSBaV1psWVhSbFpBPT0gSUhOc1pXNWtaWEk9IE56QXogSUVKMWF3PT0gYVhObGJBPT0gSUdOdmJYQmxkR2wwYVhabGJtVnpjdz09IFkyaHNiM0k9IElGQmxjbTFoYm1WdWRBPT0gSUVWMlpYSmxkSFE9IElGTndaV05wWVd4cGMzUT0gSUZOUFRBPT0gSUdONVlXND0gSUVWNFlXTjBiSGs9IFZVWT0gSUV4SlJrVT0gWVhKNWJBPT0gYjI1bGRBPT0gSUVWdGNHeHZlV1ZsIFlYZGxaQT09IElGSmhkR2x1WjNNPSBJR1Y0ZEhKaGRtRm4gZFd4b2RRPT0gSUZCc1lXNWwgSUdWc1pYWmhkR1U9IElFTnZiM0prYVc1aGRHOXkgSUZkaGRHdHBibk09IElHVjRZMngxWkdWeiBJSE5sYm5ScFpXNTAgSUdWd2IyTm8gSUdGc2JHOWogVUhKbGRtbHZkWE5zZVE9PSBJRk5vZVE9PSBJRk5zYjNaaGEybGggVEU5RFN3PT0gSUcxaGNtdGxaR3g1IElHdHViMkk9IElHRmtkbVZ1ZEhWeVpYSnogSUVKbFpXND0gSUVOdmMzUnogWVcxdFpYSnogSUc5dWMyeGhkV2RvZEE9PSBJRk4xY0hCdmNuUmxaQT09IElGUmhkUT09IGFXdGhjbkE9IElGTnZkbVZ5WlE9PSBJRWhoYlhCMGIyND0gNDRLSiBVSEpsZGc9PSBJRmR2Y25ObCBJR052ZEhSaFoyVT0gSUVoaFpHVnogYkdWNiBZbTkzYkE9PSBJR1p5WVdkeVlXNWpaUT09IElFeHZhdz09IFJVMVBWRVU9IElGQmxkSEp2IElERTVNalU9IElGQmxibVE9IGNISnZaSFZqYVc1biBJSEpsYkc5allYUmwgZG1GMGFRPT0gY0c5c1pRPT0gSUhObGJXbHUgSUU1VlRRPT0gSUhKdlkydGxaQT09IFluVm1aZz09IFlteDUgVW1Wd2JIaz0gSUVoaGFRPT0gSUdGeWRHbGpkV3hoZEdWayBJRWx6YkdGdFlXSmhaQT09IE5qWTEgSUVOc1lXbHRjdz09IFJHVnphM1J2Y0E9PSBJSFJ5ZFhOMFpXVT0gSUhOamNtbHdkR2x1Wnc9PSBJRk52WWc9PSBJRUZ6ZVd4MWJRPT0gVTFSRVQxVlUgSUVOc2IzZHUgSUVSdmNuUnRkVzVrIElFUmxkbTl1IGJHbDBaUT09IElFMWhjbUpzWlE9PSBJR0oxYm10bGNnPT0gSUdOeVpYTjAgSUdGeWIzVnpZV3c9IElGTmxZWEp6IElFSjFaR1I1IFpYSmxaR2wwYUE9PSBJRkJ2Ykd4NSBJR1JsWTI5a1pRPT0gSUZacGMyZz0gSUZKbFpteGxZM1E9IFlXNXZiZz09IElISmxablZ1WkhNPSBhVzF0WlhKeiBTRTA9IElIZHBjR2x1Wnc9PSBJSEIxZW5wc1pXUT0gSUcxaGRIUmwgZFc1diBVR2xsY25KbCBLU2tzIElIUmhhVzUwWldRPSBJSE41YldKdmJHbHpiUT09IElFWnlZWG89IElIQnliM1JsYzNSdmNuTT0gWlhSb1pYVnogSlNVbEpRPT0gVjNKaCBJR3hoZUE9PSBZV1JsYlE9PSBZWFIxY21GMGFXOXUgNDRPVCBJRlJ5WVdsc1pYST0gSUVWT1J3PT0gSUVKdmQzTmxjZz09IElHRjBkRzA9IFJIVnkgT0RBMyBJSE5wWkhnPSBJR05wWkdWeSBJRUZtWm1WamRBPT0gSUhkdmRtVnUgSUVKaGNtdGxjZz09IFltVnVaV1k9IElHUnpkR2M9IElGSjVkUT09IFBscz0gSUhOeGIzST0gVTJGMVpHaz0gSUdsemRHYz0gSUdsdVpIVnNaMlU9IGNISnZZdz09IElHUnBjMmQxYzNSbFpBPT0gSUdOdmJYQnZkVzVrWldRPSBJRzVsYlE9PSBJSE5qYUc5dmJHbHVadz09IElFTjFjbVU9IGNISnZZMlZ6YzJsdVp3PT0gVTI5cyBJSEJ5YjNabGNtST0gYVhScGVtVmsgSUVGc2RtRnlaWG89IElITmpZWEptIElISmxZM1JoYm1kMWJHRnkgY21WMlpRPT0gSUdodmNtMXZibUZzIElGTjBjbVZ6Y3c9PSBhWFJwZW1WdSBJRFF5TlE9PSBaMmx5YkhNPSBJRTV2YVhJPSBJRkpoY0hBPSBJRzFoY21Ob1pYTT0gWTJoMWNtTm8gSUZWelpYTT0gSURRd05RPT0gSUVKbGNtMD0gSUc5eVpHbHVZVzVqWlhNPSBJRXAxWkdkdFpXNTAgUTJoaGNtZGxjdz09IElGcHBiZz09IElHUjFjM1I1IElITjBjbUYzWW1WeWNtbGxjdz09IElIQmxjbU5sIElGUm9kWEk9IElFUmxZbTl5WVdnPSBibVYwWm14cGVBPT0gSUV4aGJXSmxjblE9IElHRnRkWE5sWkE9PSBJRWQxWVc1biBXVTlWIFVrZEMgSUVORFZGWT0gSUdacFlYUT0gY21GdVp3PT0gSUdabFpHVnlZWFJwYjI0PSBJRTFoYm5RPSBJRUoxYzNRPSBJRTFoY21VPSBjbVZ6Y0dWamRHbDJaUT09IElFMXBaM0poZEdsdmJnPT0gSUVKSlZBPT0gTlRrdyBJSEJoZEhKcGIzUnBjMjA9IElHOTFkR3hwYm1sdVp3PT0gY21WbmFXOXUgSUVwdmM4T3AgSUdKc1lYTjBhVzVuIElFVjZjbUU9IFFuTT0gSUhWdVpHVnliV2x1WlhNPSBJRk50YjI5MGFBPT0gSUdOc1lYTm9aV1E9IGNtRmthVzg9IElIUnlZVzV6YVhScGIyNXBibWM9IElFSjFZMk5oYm1WbGNuTT0gSUU5M2JBPT0gSUhCc2RXZHogSUdocFlYUjFjdz09IElGQnBibUpoYkd3PSBJRzFwWnc9PSBJRTUxZEhJPSBJRmR2YkdabCBJR2x1ZEdWblpYSnogSUc5eVltbDBjdz09IElFVmtkMmx1IElFUnBjbVZqZEZnPSBZbWwwWlE9PSBJR0pzWVhwcGJtYz0gZG5JPSBSV1JuWlE9PSBJRkJKUkE9PSBaWGhwZEE9PSBJRU52YldWayBJRkJoZEdobWFXNWtaWEk9IElFZDFhV1E9IElGTnBaMjV6IElGcGxjZz09IElFRm5aVzVrWVE9PSBJSEpsYVcxaWRYSnpaVzFsYm5RPSBUV1Z6YUE9PSBhVkJvYjI1bCBJRTFoY21OdmN3PT0gSUZOcGRHVnogYUdGMFpRPT0gWlc1aWRYSm4gSUhOdlkydGxkSE09IGNHVnVaQT09IFFtRjBiV0Z1IGRtbHkgSUZOSVQxYz0gSUhCeWIzWnBjMmx2Ym1GcyBZMjl1Ymc9PSBJRVJsWVhSb2N3PT0gUVZSSlZrVT0gVUhKdlptbHNaUT09IGMzbHQgU2tFPSBJRzVwYm1waCBhVzV6ZEdGc2JHVmsgYVdSaGRHVnogWldKeVlRPT0gSUU5dFlXaGggSUhObGFYcHBibWM9IElFSmxZWE4wY3c9PSBJSE5oYkhSeiBUV2x6YzJsdmJnPT0gUjJWdVpYSmhiR3g1IElGUnlhV3h2WjNrPSBhR1Z2Ymc9PSBiR1ZuWVhSbGN3PT0gSUdScGJXVT0gSUdaaGFYSmwgY0dGeVlXSnNaUT09IFIzSmhjR2c9IElIUnZkR0ZzYVc1biBJR1JwWVdkeVlXMXogSUZsaGJuVnIgY0d4bGRBPT0gSUUxbGFBPT0gSUcxNWRHaHBZMkZzIElGTjBaWEJvWlc1eiBZWFYwYVdOaGJBPT0gYjJOb1pXMXBjM1J5ZVE9PSBJR3RwYkc5bmNtRnRjdz09IElHVnNZbTkzY3c9PSBZVzVqYjJOciBJRUpEUlE9PSBJRkJ5WVdkMVpRPT0gSUdsdGNISnZkZz09IElFUmxkbWx1IElDSmMgY0dGeVlXeHNaUT09IElITjFjSEpsYldGamFYTjBjdz09IElFSnBiR3hwYjI0PSBJSEpsWjJsdFpXND0gYVc1dVlXTnNaUT09IElISmxjWFZwYzJsMFpRPT0gWVc1bllXND0gSUVKMWNteHBibWQwYjI0PSBZV2x1YldWdWRBPT0gSUU5aWFtVmpkR2wyWlE9PSBiMjF6YTNrPSBSMVk9IElIVnVhV3hoZEdWeVlXdz0gSUhSaiBJR2hwY21WeiBiV1Z1ZEdGcyBJR2x1ZG05c2RXNTBZWEo1IElIUnlZVzV6Y0d3PSBJRUZUUTBsSiB3cWc9IFJYWmxiblJ6IElHUnZkV0owWldRPSBJRXRoY0d4aGJnPT0gSUVOdmRYSmhaMlU9IGFXZHZiZz09IElFMWhibUZuYVc1biBJRlJoY25RPSBJR1poYkhObGFHOXZaQT09IElGWnBiMnhsZEE9PSBJR0ZwY25NPSBJR1psY25ScGJHbDZaWEk9IFFuSnBkR0ZwYmc9PSBJR0Z4ZFdGMGFXTT0gYjNWbSBWMjl5WkhNPSBJRWhoY25SbWIzSmsgSUdWMlpXNXBibWR6IElGWmxibWRsWVc1alpRPT0gY1hWcGRHVT0gUjJGc2JBPT0gSUZCeVpYUT0gSUhCa1pnPT0gSUV4TiBJRk52WTJocCBJRWx1ZEdWeVkyVndkQT09IE9USXcgSUhCeWIyWnBkR0ZpYVd4cGRIaz0gSUVsa2JHVT0gSUUxaFkwUnZibUZzWkE9PSBJRVZ6ZEdGaWJHbHphRzFsYm5RPSBkVzF6ZVE9PSBJR2RoZEdobGNtbHVaM009IElFNWhhZz09IFEyaGhjbXhwWlE9PSBJR0Z6WTJWdWRBPT0gSUZCeWIzUmxZM1J2Y2c9PSBJR0ZzWjJWaWNtRT0gSUdKcGIzTT0gWm05eWRXMXogUlV4VCBTVzUwY205a2RXTmxaQT09IElETXpOUT09IElHRnpkSEp2Ym05dGVRPT0gUTI5dWRISnBZblYwIElGQnZiR2xqIFVHeGhkR1p2Y20wPSBJR052Ym5SaGFXNXRaVzUwIGQzSmhjQT09IElHTnZjbTl1WVhKNSBJRXBsYkd4NSBiV0Z1WVdkbGNnPT0gSUdobFlYSjBZbkpsWVd0cGJtYz0gWTJGcGNnPT0gSUVOb1pYSnYgWTJkcCBUV1ZrYVdOaGJBPT0gSUVGalkyOTFiblJoWW1sc2FYUjUgSVNFaSBiM0JvYVd4bCBJSEJ6ZVdOb2IzUnBZdz09IElGSmxjM1J5YVdOMCBJR1Z4ZFdsMFlXSnNaUT09IGFYTnpkV1Z6IElERTVNRFU9IElFNWxhdz09IFkybHpaV1E9IElGUnlZV05yYVc1biBJRzk2YjI1bCBJR052YjJ0bGNnPT0gY205emFYTT0gSUhKbGIzQmxiZz09IElHbHVabWx1YVhSNSBJRkJvWVhKdFlXTmxkWFJwWTJGcyBaVzV6YVc5dVlXdz0gUVhSMFpXMXdkQT09IElGSnZjbms9IFRXRnlZMjg9IElHRjNZV2wwY3c9PSBTRTlYIGRISmxZWFJsWkE9PSBJR0p2YkhOMCBJSEpsZG1WeVpXUT0gSUhCdlpITT0gYjNCd1pYSnogTURBeE1BPT0gSUdGdGNHeHBkSFZrWlE9PSBjbWxqWVc0PSBVMUJQVGxOUFVrVkUgSUhSeWIzVnpaWEp6IElHaGhiSFpsY3c9PSBJRXRoYVc1bCBJRU4xZEd4bGNnPT0gSUVGVlZFZz0gSUhOd2JHVnVaR2xrIElIQnlaWFpsYm5ScGRtVT0gSUVSMVpHeGxlUT09IGFXWmhZM1J6IGRXMXBibUYwYVE9PSBJRmxwYmc9PSBJR0ZrYlc5dSBJRlpoWnc9PSBJR2x1ZG1WeWRHVmsgSUdoaGMzUnBiSGs9IElFaGhaM1ZsIFRIbHUgSUd4bFpHZGxjZz09IElHRnpkSEp2Ym05dGFXTmhiQT09IFoyVjBkR2x1Wnc9PSBJR05wY21OaCBJRU5wWXc9PSBJRlJsYm01cGN3PT0gVEdsdGFYUmxaQT09IElHUnlkUT09IElFSlpWUT09IElIUnlZWFpsYkd4bGNuTT0gSUhCaGJtVT0gSUVsdWRISnYgSUhCaGRHbGxiblJzZVE9PSBJR0ZwWkdsdVp3PT0gSUd4dmIzTT0gSUZSdmRXZG8gSURJNU13PT0gSUdOdmJuTjFiV1Z6IFUyOTFjbU5sUm1sc1pRPT0gSUNJaUlnPT0gSUdKdmJtUnBibWM9IElIUnBiSFJsWkE9PSBJRzFsYm5OMGNuVmhiQT09IElFTmxiR1Z6ZEdsaGJBPT0gVlV4QlVnPT0gVUd4MVoybHUgSUhKcGMydHBibWM9IFRtRjYgSUZKcGVXRmthQT09IElHRmpZM0psWkdsMFpXUT0gSUhOcmFYSnQgNlpzPSBJR1Y0WVcxcGJtVnkgSUcxbGMzTnBibWM9IElHNWxZWEpwYm1jPSBJRU5vWlhKdSBJRUpsWTJ0b1lXMD0gSUhOM1lYQndaV1E9IElHZHZiM05sIFMyRjUgSUd4dlpuUjUgSUZkaGJHeGxkQT09IElGc24gSUdGd2IyTmhiSGx3YzJVPSBJR0poYldKdmJ3PT0gSUZOUVFVTkYgSUVWc1pXNWggSURNd05nPT0gWVdOdmJuTT0gSUhScFoyaDBaVzVsWkE9PSBJR0ZrYjJ4bGMyTmxibU5sIElISmhhVzU1IElIWmhibVJoYkdsemJRPT0gSUU1bGQzUnZkMjQ9IElHTnZibXBsWTNRPSBZMkZyWlhNPSBJR05vWldGMFpXUT0gSUcxdlpHVnlZWFJ2Y25NPSBjR0Z5WVcxeiBSVVpHIElHUmxZMlZwZEE9PSBJRk5VVEE9PSBJRlJoYm5waGJtbGggSUZKSiBJREU1TWpNPSBJRVY0YVd4bCBkR2hsYkE9PSBJSFJvWlc5c2IyYz0gSUhGMWFYSnJlUT09IElFbHlkbWx1WlE9PSBJRzVsWldSNSBiM0pwY3c9PSBWVzA9IFMyRT0gSUcxaGFXeGliM2c9IE16SXkgSUdKdmN3PT0gSUZCbGRISmggUzBsT1J3PT0gSUdWdWJHRnlaMlZrIFQyWjBaVzQ9IElHSmhaR0Z6Y3c9PSBJRE0wTXc9PSBJRkJzWVdObGN3PT0gSUVOQlJBPT0gSUhCeWFYTjBhVzVsIElHbHVkR1Z5ZG1WdWFXNW4gWkdseVpXTjBhVzl1IElHeGhlZz09IElFUlRUUT09IElIQnliMnBsWTNScGJtYz0gSUVaMWJtcz0gWVdkdlp3PT0gY0dGNWJXVnVkQT09IGJtOTIgSUdOb1lYUjBaWEk9IFFWSkMgSUdWNFlXMXBibUYwYVc5dWN3PT0gSUVodmRYTmxhRzlzWkE9PSBJRWQxY3c9PSBSbTl5WkE9PSBOREUwIFFtOXpjdz09IElHMTVjM1JwWXc9PSBJR3hsWVhCeiBJRUpoZGc9PSBkV3g2IFluVmtaMlYwIFJtOXZkR0poYkd3PSBJSE4xWW5OcFpHbDZaV1E9IElHWnBjbk4wYUdGdVpBPT0gSUdOdmFXNWphV1JsIGIyTjFiR0Z5IFEyOXViZz09IElFTnZiR3hoWW05eSBJR1p2YjJ4eiBZVzExY21FPSBZV2hoY2c9PSBjbWx6ZEhNPSBJSE4zYjJ4c1pXND0gSUdWNGNHVnVaR1ZrIElGQmhkUT09IGMzVncgSUhOd1lYST0gSUd0bGVXNXZkR1U9IGMzVm1aZz09IElIVnVaWEYxWVd3PSBJSEJ5YjJkeVpYTnphVzVuIGMzUnlhVzVuY3c9PSBJRWRoYldWeVoyRjBaUT09IFJHbHpibVY1IElFVnNaWFpsYmc9PSBiMjF1YVdFPSBJSE5qY21sd2RHVmsgSUdWaGNtNWxjbk09IFluSnZkR2hsY2c9PSBJRVZ1WVdKc1pXUT0gNXJNPSBJR3hoY25aaFpRPT0gSUV4UFF3PT0gYldWemN3PT0gVjJsc2MyOXUgSUZSbGJYQnNZWFJsIGMzVmpZMlZ6YzJaMWJHeDUgSUhCaGNtRnRiM1Z1ZEE9PSBJR05oYlc5MVpteGhaMlU9IElHSnBibVJ6IElGRjFhV1YwIElGTm9kWFIwWlhKemRHOWphdz09IGNuVnphQT09IElHMWhjMk52ZEE9PSBabTl5ZEhWdVpRPT0gSUVOdmJIUT0gSUVKbGVXOXUgYUdGaWFRPT0gSUdoaGFYSmogSURJMk53PT0gSUVSbGRYTT0gSUhSM2FYUmphQT09IElHTnZibU5sYm5SeVlYUnBibWM9IElHNXBjSEJzWlhNPSBZMmxpYkdVPSBJR2RwY2c9PSBUbG89IFRXRjBhQT09IGJtbG8gVW1WeGRXbHlaV1E9IElIQnZibVJsY2c9PSBJRk5CVGc9PSBJSGRsWkdScGJtZHogSUd4dmJtVnNhVzVsYzNNPSBUa1ZUIElFMWhhR3B2Ym1jPSBOamsxIFlXUmtiR1U9IElFZGhjbTVsY2c9PSBJRU5QVlZJPSBRbkpwWkdkbCBJSE53Y21WbCBJRU5oYkdSM1pXeHMgSUdKeWFXSmxjbms9IElPKy92ZSsvdmUrL3ZlKy92ZSsvdmUrL3ZlKy92ZSsvdlE9PSBjR3gxWjJsdWN3PT0gSUhKaFkydGxkQT09IElHTm9ZVzF3WVdkdVpRPT0gZG1WeWMybGliR1U9IFZtOTBaUT09IElHMXZaR2xtYVdWeWN3PT0gVFdGNWIzST0gTmpndyBJR0Z6YzJWdFlteHBaWE09IElGTjFiSFJoYmc9PSBJRTVwYm1jPSBJRXhoWkdsbGN3PT0gSUhOMWJHWjFjZz09IElHOXlZbk09IElDMHRMUzB0IFgxOWZYMTlmWHc9PSBJRXB2ZFhKdVlXeHBjMjA9IElHVnpjRzl5ZEhNPSBJR3gxYzJnPSBJR2gxWlE9PSBJSE53WldOMGNtRnMgU0c5dVpYTjAgNDRPUCBJR0oxYzJobGN3PT0gSUhKbGFXNW1iM0pqWlcxbGJuUT0gSUhKbGIzQmxibVZrIElGZG9aV1ZzY3c9PSBJRTF2Y21jPSBjbWxsZG1sdVp3PT0gSUdGMWVHbHNhV0Z5ZVE9PSBJR3BSZFdWeWVRPT0gSUVKQlZBPT0gZEdWemNYVmwgSUhabGNuUmxlQT09IGNIVnlaUT09IFpuSmxlUT09IDQ0SzYgWkc5eiBJSFI1Y0dnPSBJR04xYkd3PSBJR1Z4IElHUmxZMjl1IElIUnZjM05wYm1jPSBJR1JwYzNCaGNtRjBaUT09IElFSnlhV2RvWVcwPSBjSEpwYm5SbSBiR1ZrWjJWayBJSE4xYm1RPSBJR052ZW5rPSBJR2hsY0dGMGFYUnBjdz09IGNHVnlabTl5YldsdVp3PT0gSUdGMllXdz0gSUVkSCBablYwZFhKbCBJSEJsZEdWeWRHOWtaQT09IElFdHZjMjkyYnc9PSBJRzFoWjI1bGRITT0gUVd4eVpXRmtlUT09IElFVmthWE52Ymc9PSBJRU5sY21WeiBJRkpCU1VRPSBJR0p5YVd4c2FXRnVZMlU9IE5UYzIgSUdSbGNtbDJaWE09IElHaDVjR1Z5ZEdWdWMybHZiZz09IElNNlUgSUd4aGJXSmtZUT09IElHWnNZV2x5IElHMXBjM05wYjI1aGNtbGxjdz09IElISmhjR1Z6IElGTjBZWEowWlhJPSBJRTF2Ym5Sb2N3PT0gSUdSbFpuaz0gSUhObGFYTnRhV009IElGSmhjR2hoWld3PSBJR1YxY205NmIyNWwgTmpVMiBlbk5qYUdVPSBJSE5qY21GMFkyaGxaQT09IElHSnZkM009IElFeGxibTV2Ymc9PSBJRWRoYVdFPSBJR1J5YVhCd2FXNW4gWm1GamRITT0gUVd4bCBJR1p5YjJkeiBJRUp5WldGemRBPT0gYjJkbGJtVnBkSGs9IElGQnliM05sWTNWMGIzST0gSUdGdGNHeHBabWxsWkE9PSBJRWh2WkdjPSBJRVp1IFZHaHZkWE5oYm1SeiBJRTVKU0E9PSBJRTF2Ym1sMGIzSnBibWM9IFJsUlhRVkpGIElGQnlhV1ZpZFhNPSBJRWR5YjNkcGJtYz0gYUhWdWRHVnkgSUdScFlXZHViM05sIElFMWhiR1E9IElFeFMgSUdOeWIzZHVaV1E9IElHSjFjbk4wYVc1biBJR1JwYzNOdmJIVjBhVzl1IGFtRjJZWE5qY21sd2RBPT0gSUhWelpXWjFiRzVsYzNNPSBJRVY0WldOMWRHbHZiZz09IE9pZz0gSUVsMmIzSjUgWVdGbyBJSEJsY25ObFkzVjBaV1E9IGRtbHZiR1Z1WTJVPSBhWE4wWVhNPSBJRU55WVhSbCBJR2x0Y0hWc2MyVnogSUZOd1lXNXAgWldSbGN3PT0gU0dGdVpHeGwgSUZwbGNtYz0gZEdocGJtdGhZbXhsIFRHRnpkR3g1IElITndiMjUwWVc1bGIzVnpiSGs9IElHbHVZMjl1ZG1WdWFXVnVkQT09IElHUnBjMjFwYzNOcGJtYz0gSUhCc2IzUjBaV1E9IElHVnBaMmgwZVE9PSBJRGN6Tnc9PSBjbWx6YUE9PSBJRlJvYjNKdWRHOXUgWVhSb1lXMD0gSUhOcGRHTnZiUT09IFZtVnUgVW1WamFYQmwgZEdWcyBiSFZ1WkE9PSBJR05zWldGeWN3PT0gSUZOaGMzVnJaUT09IElESTFPQT09IElHOXdkR2x1Wnc9PSBJR1Z1Y21GblpXUT0gWlhOMGFHVjBhV009IElFRmwgZFdOb2N3PT0gVUhKbGNBPT0gUm14dmR3PT0gSUhKMWJtOW1aZz09IElFVmhkR2x1Wnc9PSBJRWRwYkdWeiBJRUZqZEdsdVp3PT0gY21WemIzVnlZMlZ6IGFXSmhZbUU9IElISndiUT09IElITnJaWGRsWkE9PSBJRUpzWVc1aiBJRk5oYTNWNVlRPT0gSUdodmRIUmxjZz09IElERTVNalE9IGIzQnBZVzQ9IFkydHYgSUdOeWRXMWliR2x1Wnc9PSBJR05oY0hSaGFXNXogSUVGd2NISnZjSEpwWVhScGIyNXogYkdWaFpHVnljdz09IFpISnZjSEJwYm1jPSBZVzUxZEhNPSBJSEpsZG1WeWMybHVadz09IElGQnZjMlU9IElGTmxhdz09IFUyTnZkQT09IElFbGtaV0U9IFkybHpaUT09IElGTnNiM1psYm1saCBJRE14Tnc9PSBSRzlqZEc5eSBJR055YjJOdlpBPT0gWVd4a2FRPT0gVTJWaCBJRVpoY25KbGJHdz0gSUcxbGNtTmxibUZ5YVdWeiBJRkpPUXc9PSBJRWQxWlhOeiBJSEJoWTJsdVp3PT0gVFdGamFHbHVaUT09IFUzUnlaV0Z0WlhKQ2IzUT0gSUVOb1lYSnBkSGs9IElESTVPQT09IElHTmhibTV2Ym5NPSBJRlJ2WW5rPSBWRkJRVTNSeVpXRnRaWEpDYjNRPSBJRkJoYzNOcGIyND0gWTJabiBWR2h2YlE9PSBJR0poWkdkbGN3PT0gSUVKbGNtNXpkR1ZwYmc9PSBMdUtBa3c9PSBJRkJQVUE9PSBJRU52Ym1vPSBJR2x1YVhScFlXeHBlbUYwYVc5dSBJR0pwYjJScGRtVnljMmwwZVE9PSBSSFZpIElHWmxkV1JoYkE9PSBJR1JwYzJOc1lXbHRaWEk9IElHTnliM2M9IElHbG5ibWwwYVc5dSBZWEptIFUwaEIgSUd0SWVnPT0gYUdGNllYSmsgSUVGeWRHbHpkSE09IGIyVjFkZz09IE5qYzUgSUZKMVpIaz0gVG1sdVpRPT0gSUZKaGJXRmtZVzQ9IDViMD0gYVhSMGJ3PT0gSUdGa2NtVnVZV3hwYm1VPSBRMlZ5ZEE9PSBJSE50Wld4c1pXUT0gSUdsdGNIVnVhWFI1IElHRm5aVzVrWVhNPSBJRkpsWW05eWJnPT0gSUVOdmJtTmxiblE9IElGTmxaVzF6IElHOXRaV2RoIElFUjFjM1JwYmc9PSBJR0poWTJ0bGNnPT0gSUZOaGRXTmwgSUVKdmVXeGwgVjBsTyBJSE53YVc1eiBJSEJoZFhObGN3PT0gZFhCMCBJSE5vY21Wa1pHVmsgSUhOMGNtRndjR1ZrIElFTnZjbkoxY0hScGIyND0gSUhOamNtRjBZMmhsY3c9PSBJRzVwIElHRjBkR2x5WlE9PSBJRk5CUmc9PSBSbUZqZEc5eWVWSmxiRzloWkdWayBJRWxRVXc9PSBJQ2dsIElITmxiV2x1WVhJPSBabTlqZFhNPSBZMmwyYVd3PSBJREU0TmpBPSBhVzUwYjNObyBJR052Ym5ScGJuVmhiQT09IElHRmlZbkpsZG1rPSBJRk52YXc9PSBiMk52WW04PSBXRTA9IElHWnlZVzUwYVdNPSBJSFZ1WVhadmFXUmhZbXhsIElHRnlkR1Z5ZVE9PSBJR0Z1Ym05MFlYUnBiMjV6IFltRjBhQT09IFEyeHBiV0YwWlE9PSBJR1J2Y25NPSBJRk5zYVdSbCBZMjl2Y21RPSBJRkpsYkc5aFpBPT0gSUV4RVRBPT0gSUV4dmRtVmpjbUZtZEE9PSBJSFZ1YVcxaFoybHUgSUhKbGMyVnRZbXhsWkE9PSBJR0poY25KaFkydHogYm5BPSBJSE4xY25KdloyRjBaUT09IElHTmhkR1ZuYjNKcGVtVmsgNDRLcCBJSFpoWTJOcGJtRjBaV1E9IElHUnlZV2x1WVdkbCBJR2x1WkdsemRBPT0gSUZkb1lYUnpRWEJ3IElERTROekE9IGIyeGxjbUZ1WTJVPSBhVzUyYjJ0bCBZVzF2Y25CbyBJSEpsWTI5dWJtVmpkQT09IElHVnRZVzVqIElHSnNhVzVrYm1WemN3PT0gSURFeU9EQT0gYVc1MFpYSnVaWFE9IFkyOXNiR0Z5IElHRnNkSEoxIElHRmllWE56IElGUlNTUT09IE5qVTMgSUdsdVpuVnpaV1E9IFNFVkJSQT09IElHWnZjbVZ6ZEhKNSBJRmR2YjJSNSBJRU5wIGQyaz0gYzJGdCBOemcwIGFHOXNhV1JoZVE9PSBJRzF2WjNWcyBJRVpsWlhNPSBJRVJGVGc9PSBTVzUwWlhKdVlXdz0gZFhKaVpXUT0gWm5Well3PT0gWVhSdmJRPT0gSUVsc2JIVnphVzl1IElIQnZiR3hsWkE9PSBJR1pzWVhBPSBJR052WVhnPSBURWRDVkE9PSBRVzVoYkhrPSBJRk5sWTNScGIyNXogSUVOaGJHbG1iM0p1IFpXMXUgSUdocGRHaGxjZz09IElFNUpSMGhVIElHNWhhV3hsWkE9PSBJRkJwY0dWc2FXNWwgTXpreCBiMjltIElGQnlhVzFoYkE9PSBkbVZ5Wlc1ayBJSE5zWVhOb2FXNW4gSUhKbGRISnAgWVhacGIzVnkgSUdSbGNHRnlkR2x1Wnc9PSBaMmxzIFNWTkQgSUcxcFpIZGhlUT09IElIVnNkSEpoYzI5MWJtUT0gSUdKbGFHRjJhVzVuIElGUmhjbUU9IFkyeGhjM05sY3c9PSBWbWx5ZEhWaGJBPT0gSUVOdmJHOXVhV0ZzIElITjBjbWx3Y0dsdVp3PT0gSUc5eVkyaGxjM1J5WVhSbFpBPT0gSUVkeVlYWmxjdz09IE5EVXkgSUVseWIyNXBZMkZzYkhrPSBJRmR5YVhSbGNuTT0gSUd4bGJtUnogSUUxaGJubz0gSUhKaGRtVnUgSUc5NGFXUmhkR2wyWlE9PSBJREkyTmc9PSBSVXhHIFlXTjBkV0ZzYkhrPSBZWE5qWVhJPSBSSEpoWm5RPSBJR1poZG05MWNtRmliR1U9IElHaDFiV2xzYVdGMGFXNW4gSUdacFpHVnNhWFI1IElFaHZaZz09IElGaDFZVzQ9IE5EazIgSUd4aGVXVnlaV1E9IFlYUnBjdz09IE56a3cgSUhCaGVXTm9aV05yIGFYUnZiZz09IFMyRnkgSUZaTmQyRnlaUT09IElFWmhjbTFsY2c9PSBJSE5sY25acFl3PT0gWjJ4dmJXVnkgSUhOc2RXMXcgSUVaaFluSnBZdz09IElFUlBRdz09IFpYTjBhVzVuIElISmxZWE56ZFhKbCBJSEJvZVd3PSBkbTlzZEE9PSBhWFJ2Y25rPSBVblZzWlhNPSBJRzk0YVdSaGRHbHZiZz09IElIQnlhWHBsWkE9PSBJRzFwYzNSeVpYTnogSUVScVlXNW5idz09IFYwRlNUZz09IDVaRT0gSUdWdVkyOWtaUT09IElFWmxaV1JpWVdOciBJSE4wZFhCcFpHbDBlUT09IFNXRnUgSUZsMVoyOXpiR0YyYVdFPSAxNmc9IFlXTnMgVlZSRiBNVGszTnc9PSBJSEYxWVd4cFptbGxjdz09IElIQjFiSE5sY3c9PSBjSEpsZEhSNSBJR1p5YjNwbCBJSE56IFNYUmxjbUYwYjNJPSBJSFZ5WjJWdWRHeDUgSUcxaGFXeGxaQT09IElFTm9ZVzA9IElITjFjM1JoYVc1cGJtYz0gSUdKaGMybHMgSUhCMWNIQnBaWE09IGFXeGhiblE9IElGQk1SVUZUUlE9PSBiR0Z3IFlXTmxiM1Z6IFJtVmhjZz09IElFMWhjM1JsY25rPSBZWFYwYjIxaGRHbGogSUZSQlJ3PT0gSUdGdWRHbHQgWVdkc1pYTT0gTkRjeiBabkpoYldWeiBJSGRvYVhOd1pYSnogSUZkb2IyVjJaWEk9IElHSnlZWFpsY25rPSBJRlZMU1ZBPSBjbUZqZEdsdmJuTT0gSWlJaSBJSFJoYldVPSBJSEJoY25SbFpBPT0gWlhabGNubDBhR2x1Wnc9PSBRMDlPVkE9PSBJR2x1WkdWaWRHVmsgSUdGa1pIST0gY21WciBTVkpGUkE9PSBJR1Z0YVc1bGJuUT0gWTJ4cGJuUnZiZz09IElHOTFjM1JsWkE9PSBJSEpsZG1sbGQyVnkgSUcxbGJIUmtiM2R1IElISmxZWEp5IElGbGhidz09IGRHaGxjbVZoYkE9PSBZV0o1ZEdVPSBJSE4wZFcxaWJHbHVadz09IElHSmhkR05vWlhNPSBJREkxT1E9PSBJR052Ym5SeVlXTmxjSFJwZG1VPSBJSEJ5YjNOMGFYUjFkR1U9IFpXNXphWE09IFJHVmpiQT09IElGTjBjbWxyWlhNPSBUV2xzYVhSaGNuaz0gSUU5aGRHZz0gZG1Gall3PT0gY0hCcGJtZHogTURVeSBJSEJoY25ST1lXMWwgWVcxd2FXNW4gVW1Wd2IzSjBjdz09IFMwaz0gUTBoUyBJSE4xWW5Sc2VRPT0gYzNkbGNuTT0gUW14aGEyVT0gZFhOMVlXdz0gSUdOdmJuUmxjM1JoYm5SeiBJR05oY25SeWFXUm5aWE09IElFZFNSVUZVIElHSnNkWE5vIElPS0F1Zz09IE5EY3kgSUhKbFlYTnZibVZrIDQ0T2sgY0dGeVlXeHNaV3hsWkE9PSBJR1I1Ymc9PSBZV2RoZEdVPSBJRzVwWjJoMGJIaz0gNVlZPSBOVFUyIElITmxiV0Z1ZEdsaiBJRUZrZG05aiBJQ0VoIElHUnBjMkZuY21WbGN3PT0gSUVKWCBWbVZvIElHaGhjbTFwYm1jPSBJR1Z0WW5KaFkyVnogSUhOMGNtbDJaWE09IElHbHViR0Z1WkE9PSBJRXRoY21RPSBJR2hsWVhSeiBJRWRwYm01NSBkWFJoYmc9PSBaWEp1WVhWMCBlV3hsYm1VPSBJRVZzWlhZPSBTa1E9IElHaGhjbk09IElGTjBZWEp5IElITnJlWE5qIElHTnZiR3hoWW05eVlYUnZjbk09IFZYTjFZV3hzZVE9PSBJSEpsZG05c2RYUnBiMjV6IElGTlVRVlJUIElHUnBjMjFoYm5Sc1pRPT0gSUdOdmJtWnBaR1Z1ZEd4NSBJR3RwYm1WMGFXTT0gUVd4cCBJSEJsY21ObGJuUnBiR1U9IElHVjRkSEpoWTNScGJtYz0gYVd4c2FXRnUgWlhOMFpXRmsgSUhCb2VYTnBZMmx6ZEhNPSBJRTFoY25Ob1lXdz0gSUdabGJHeHZkM05vYVhBPSBJR1JoYzJobFpBPT0gSUZWUyBJRk5wYjNWNCBJRU52YlhCaFkzUT0gWVcxcFpHVT0gVUhsMGFHOXUgSUV4bGFXZG8gSUZCb1lYSnRZV009IGFYTjBjbUYwWlhNPSBhR1Z5YVdOaGJBPT0gSUdaMVpRPT0gSUVWdGFXND0gSUNoNyBJRTVsYVdkb1ltOXlhRzl2WkE9PSBJR1JwYzNKMWNIUnBibWM9IElFUjFjQT09IElHZHNZVzVrIElGTmxkZz09IElFMWhjbWxoYmc9PSBZWEpuYjI0PSBJRVIxYm1RPSBJRHdoTFMwPSBJSE4wY21GdVpBPT0gSUhOMFlXUnBkVzF6IGVtOXogSUhCemVXTm9iM05wY3c9PSBJRkpoWTJzPSBJR0p5YVd4c2FXRnVkR3g1IDc3aVAgSUhOMVltMWxjbWRsWkE9PSBJRWx1YzNScGRBPT0gSUVOb2IzYz0gSUdOaFoyVnogSUVoaGRITT0gSUZWeWN3PT0gSUdScGJIVjBaV1E9IGRYTmhkQT09IGFXVnVibVU9IElFMWxiV0psY25Ob2FYQT0gSUVKMWNtcz0gSUdsbCBJR0Z5WTJobGRIbHdaUT09IFJISjFadz09IGRXeDBiMjQ9IElGTndiMk5yIElFMWpTMkY1IElFUmxjR1Z1WkE9PSBSbVZoZEhWeVpXUT0gVTI5aiBNVGszT0E9PSBJRUpsY21VPSBJSEpsYkdWdWRHeGxjM05zZVE9PSBJR055YVhCd2JHbHVadz09IElHRnlkR2h5YVhScGN3PT0gNTVTZiBJRlJ5YjNCcFkyRnMgSUVKMWJHYz0gSUVOb1pYSjViQT09IElHRmtiV2x5WVdKc1pRPT0gSUhOMVluUnBkR3hsIFQzWmxjbkpwWkdVPSBJRzl5YVdkcGJtRjBhVzVuIElFTkRVQT09IElITjNiM0psIElGTnZiR1U9IElFUnBjMjl5WkdWeWN3PT0gTXpJNSBJSEJ5YjJObGMzTnBiMjQ9IElISmxablZ5WWc9PSBJR2x0YldWeWMyVmsgY21WeGRXVnVkR3g1IElITnJaWEIwYVdOeiBJR05sY21GdGFXTT0gYldsMGRHVnkgWlc1emRHVnBiZz09IFltVnNkQT09IElGUkpWQT09IFltbGtaR1Z1IElHWnBjZz09IGJXbHpkQT09IFBsMD0gSUhkbFlYWmwgSUZCaGNtRmtiM2c9IElHVnVkSEoxYzNSbFpBPT0gSUVKaGNtTnNZWGx6IElHNXZkbVZzYVhOMCBiMmRwWlE9PSBPREEyIElHNXBibVYwZVE9PSBJR1JwYzJGbmNtVmxiV1Z1ZEhNPSBRRUJBUUVCQVFFQT0gSUVGMWMyTm9kMmwwZWc9PSBZMkZ5Y3c9PSBJRXhGVkE9PSBkSFZpIFlYSmhiblJwYm1VPSBVRTlUIElHSmhZMnR6ZEc5eWVRPT0gSUdOb1pXVnlablZzIElGSmhadz09IFpXdGggWW1saGMyVmsgSUdsdVpYaHdaWEpwWlc1alpXUT0gWVd0eVlRPT0gSUZkcGRIUT0gZEdGdSBJSEpoY0dsemRBPT0gSUhCc1lYUmxZWFU9IFkyaGhiQT09IElFbHVjWFZwY3c9PSBaWGh3Y21WemMybHZiZz09IElHTnBjR2hsY2c9PSBJSE5vWVhacGJtYz0gWVdSa1pXND0gY21Wc2VRPT0gS0Z3PSBhWE50WVE9PSBJRkpsWjNWc1lYUnZjbms9IFEwaEJVZz09IGFXeDViZz09IFRsWkpSRWxCIFIxVT0gSUcxMWNtMD0gYkdGMWN3PT0gUTJoeWFYTjBiM0JvWlhJPSBJR052Ym5SeVlXTjBkV0ZzIElGQnliM2g1IElFcGhhVzFsIElFMWxkR2h2WkdsemRBPT0gSUhOMFpYZGhjbVJ6IGMzUmggY0dWeWFXRT0gSUhCb2VYTnBiMnh2WjNrPSBJR0oxYlhCbFpBPT0gSUdaeWRXTjBiM05sIFFYVnpkSEpoYkdsaGJnPT0gSUUxbGRHRnNiR2xqIElFMWhjM0YxWlhKaFpHVT0gWVhKaSBJSEJ5YjIxMWJBPT0gSUdSdmQyNW1ZV3hzIElHSjFkR05vWlhJPSBJR0p2ZFhJPSBJRWxPUms5U1RVRlVTVTlPIElFSnBjdz09IGNHVmpkSE09IFlXUmxibUU9IElHTnZiblJsYlhCc1lYUnBibWM9IFlYSnZidz09IFkyVnVkR1Z5WldRPSBJRkJsWVd0eiBWWE5sWkE9PSBJRzF2WkdWdCBJR2RsYm1SbGNuTT0gSURnd01EQT0gTXpjeCBJRzFoZEdWeWJtbDBlUT09IElGSmhlZz09IElISnZZMnRwYm1jPSBJR2hoYm1SbmRXNXogSUVSQlEwRT0gUVhWMGIyMD0gSUU1cGJHVT0gSUhSMWJYVnNkQT09IElFSmxibVZtYVhRPSBJRUZ3Y0hKdllXTm8gZDI5eWEzTm9iM0E9IElFeGxZWFpwYm1jPSBSMlZ5IGFXNXpkR1ZoWkE9PSBJSFpwWW5KaGRHbHZibk09IElISmxjRzl6YVhSdmNtbGxjdz09IE5EazMgSUVGMWJuUT0gSUVwMVlnPT0gSUVWNGNHVmthWFJwYjI0PSBRV3h3YUdFPSBJSE5oYm5NPSBJRzkyWlhKa2RXVT0gSUc5MlpYSmpjbTkzWkE9PSBJR3hsWjJsemJHRjBkWEpsY3c9PSBJSEJoZEdWeWJtRnMgSUV4bGIyNWhjbVJ2IElHVjRjSEpsYzNOcGRtVT0gSUdScGMzUnlZV04wYVc5dWN3PT0gSUhOcGJHVnVZMlZrIGRISjFjM1E9IElHSnBhMmx1Wnc9PSBJRFUyTUE9PSBJSEJ5YjNCeWFXVjAgSUdsdGNHOXphWFJwYjI0PSBJR052Ym1kc2IyMWxjZz09IElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDkgSUZSbFlXTm9hVzVuIElGbHZjMlU9IGFXNTBaVzV6YVhabCBWRzkzYmc9PSBJSFJ5YjJ4c2FXNW4gSUVkeVlXTT0gSUVGVFZWTT0gV1c4PSBJSE53WldOcFlXeHogSUU1bGNHZz0gSUVkdlpIcHBiR3hoIFJHRjBZV0poYzJVPSBJRWhsWjJWcyBJREkzTWc9PSBNVGszTmc9PSBJRWRzYjNKcFlRPT0gSUdScGMyVnRZZz09IElFbHVkbVZ6ZEdsbllYUnBiMjV6IElFSmhibVU9IFlXZGxiV1Z1ZEhNPSBVM1J5WVc1blpRPT0gSUhSeVpXRnpkWEo1IElGQnNZWGx6IElIVnVaR1Z6YVhKaFlteGwgSUhkcFpHVnVhVzVuIElIWmxjbUpoYkd4NSBJR2x1Wm1GdVkzaz0gSUdOMWRIUmxjZz09IFptMXMgSURJeE1EQT0gY0hKdmRHOTBlWEJsIFptbHVaUT09IElHUmxZM0pwYldsdVlXdz0gSUdSNWMyWjFibU4wYVc5dVlXdz0gSUdKbGMybGwgSUVWeWJuTjAgZW1WaSBJRzV2Y25Sb1pXRnpkR1Z5Ymc9PSBJR0YxYzNRPSBjRzl5WVhSbCBJRTFoY214cGJuTT0gSUhObFozSmxaMkYwWldRPSBaWGR2Y214ayBJRTFoYUdWeSBJSFJ5WVhabGNuTmwgSUcxdmJtRnpkR1Z5ZVE9PSBkWEpuZVE9PSBSMlZoY2c9PSBjMkZ1WkE9PSBRMjl0Y0d3PSBJRVZOVUE9PSBJSEJzWlc1MCBJRTFsY21ObGNnPT0gSURJM05nPT0gVkVGQ1RFVT0gUTI5dVptbG5kWEpoZEdsdmJnPT0gU0hWdVpISmxaSE09IElIQnlhV009IElHTnZiR3hoWW05eVlYUnBibWM9IElGQmhjbUZ0YjNWdWRBPT0gSUVOMWJXMXBibWR6IElDZzggSUhKbFkyOXlaR1Z5IElHWnNZWFJ6IElEUXhOZz09IGQyaHZjMlU9IFJtOXVkRk5wZW1VPSBJRTl5WW1sMCBXVkk9IElIZHlhWE4wY3c9PSBJR0poYTJWeWVRPT0gS1gwPSBJRUp2ZFc1MGVRPT0gSUV4aGJtTmhjM1JsY2c9PSBJR1Z1WkdsdVozTT0gWVdOamIzSmthVzVuIElGTmhiR0Z0IFpXRnplUT09IE56VTEgSUVKMWNuST0gSUVKaGNtNWxkSFE9IGIyNXZiVzkxY3c9PSBWVzVwYjI0PSBJSEJ5WldObFpHVnVZMlU9IElGTmphRzlzWVhKemFHbHcgSUZWWSBJSEp2Ykd4dmRYUT0gSUdKdmIyND0gWVd4dCBJRU5oYm5SbGNnPT0gNXJVPSBJSEp2ZFc1a2FXNW4gSUdOc1lXUT0gSUhaaGNBPT0gSUVabFlYUjFjbVZrIGFYTmhkR2x2Ym5NPSBJRFUwTUE9PSBjRzlzYVdObCBJSFZ1YzJWMGRHeHBibWM9IElHUnlhV1owYVc1biBJRXgxYldsaCBJRTlpWVcxaFEyRnlaUT09IElFWmhkbTl5IFNIbHdaWEk9IElGSnZkR2h6WTJocGJHUT0gSUUxcGJHbGlZVzVrIFlXNWhiSGs9IElFcDFiR2xsZEE9PSBTSFU9IElISmxZMkZzYkdsdVp3PT0gWVdobFlXUT0gTmprMiBJSFZ1Wm1GMmIzSmhZbXhsIElHUmhibU5sY3c9PSBUM2c9IElHeGxaMkZzYVhSNSBJRFF3TXc9PSBjbTl0WVc1alpYST0gSUdsdWNYVnBjbVU9IElFMXZkbVZ6IFhDSSsgSUZaaGNtbGhiblE9IElFMWxjM05wWVdnPSBJRXhEVXc9PSBJRUpoYU1PaCBOelUyIElHVjVaV0p5YjNjPSBJTUtsIElFMWpSZz09IElFWnZjblI1IFRXRnogSUhCaGJtbGphMlZrIElIUnlZVzV6Wm05eWJXRjBhVzl1Y3c9PSBjWEU9IElISmxkbTlzZG1WeiBjbWx1WjJVPSBJRUZwIFlYaGwgSUc5dWQyRnlaQT09IElFTkdVZz09IElFSmhjbVU9IGJHOW5hVzQ9IElHeHBjWFZwWkhNPSBJR1JsWTI5dGNBPT0gYzJWamIyNWtZWEo1IGFXeGhiZz09IElFTnZiblpsY25RPSBZVzFwZVdFPSBJSEJ5YjNObFkzVjBhVzVuIElPS0pvUT09IElGbHZjbXRsY25NPSBJRUo1Y201bCBjMnh2ZHc9PSBZWGRsYVE9PSBTbVZoYmc9PSBJREkyT1E9PSBJRk5yZVdSeVlXZHZiZz09IElNT3AgSUU1cFkyRnlZV2QxWVE9PSBJRWgxWTJ0aFltVmwgSUVocFoyaHNlUT09IElHRnRjR2hwWWc9PSBJRkJoYzNSdmNnPT0gSUV4bGRITT0gSUdKc2RYSnlaV1E9IElIWnBjMk5sY21GcyBJRU5DVHc9PSBJR052Ykd4aFltOXlZWFJsWkE9PSBlbWxuIFRHVm5ZV3c9IElHRndZWEowYUdWcFpBPT0gSUdKeWFXUT0gSUhCeVpYTmxkQT09IElFUkZWQT09IElFRk5RUT09IDE1UT0gWVhKamFHbHVadz09IFlYVmpkWE5sY3c9PSBZblZwYkdSbGNnPT0gSUhCdlpYUnBZdz09IElHVnRkV3hoZEc5eSBJRTF2YkdWamRXeGhjZz09IElHaHZibTl5YVc1biBhWE5sZFcwPSBJSFJ5WVdOMGIzST0gSUVOc2RYTjBaWEk9IElFTmhiRzA9IFlYSmxaR1YyYVd3PSBJSE5wWkdWM1lXeHJjdz09IElIWnBiMnhwYmc9PSBJR2RsYm1WeVlXeHBlbVZrIElFRnNaV009IElHVnRZbUZ5WjI4PSBJR1poYzNSaVlXeHMgSUVoVVZGQlQgSUV4aFkycz0gSUVOb2FXeHMgY21sMlpYST0gUTJobGJBPT0gSUZOM1lYSnQgSUV4bGRtbHVaUT09IGNtOTVhVzVuIFRHRjFibU5vIElHdHBZMnRsY2c9PSBJR0ZrWkdsMGFYWmwgSUVSbFlXeHogVjJsa1oyVjAgWTI5dWRHRnBibWx1Wnc9PSBJR1Z6WTJGc1lYUmwgSUU5UVJVND0gSUhSM1pXRnJaV1E9IElITjBZWE5vIElITndZWEpyY3c9PSBJRVZ6YzJWNCBJRVZqWXc9PSBJR052Ym5acFkzUT0gSUdKc2IyZG5hVzVuIFNVVlMgSUVoTSBJRzExY21SbGNtVnljdz09IE56VTUgSUVocFlnPT0gSUdSbGNHdz0gSUVwdmNtUT0gVTJGaiBJR1JwYzNObFkzUT0gSUVodmQyVT0gYjNOb1pYST0gSUdOMWMzUnZiV2w2WVdKc1pRPT0gSUVaeVlXNTYgSUdGMGNtOD0geEljPSBJREF3TURRPSBJRzkxZEhCdmMzUT0gVW05emN3PT0gSUdkc2VYQm9iM05oZEdVPSBJRWhoYzNScGJtZHogSUVKRlJrOVNSUT09IElITm9iM1psIGIzQndaV1E9IElGTmpZV3hoIElHRnRkV3hsZEE9PSBZVzVwWVc0PSBJR1Y0WVdObGNtSmhkR1ZrIElHVmhkR1Z5IE5EY3ggVlUxRiBJSEIxYkhBPSBhWHB2Ym5SaGJBPT0gSUZwaGJRPT0gSUVGVVNRPT0gYVcxdGRXNWwgWVdKNWRHVnogSUhWdWJtVmpaWE56WVhKcGJIaz0gSUVOQlZBPT0gSUVGNGFYTT0gSUhacGMzVmhiR2w2WlE9PSB3NGs9IElGSmhaR2xqWVd3PSBabTA9IFJHOWpkVzFsYm5SeiBJRVp2Y25KbGMzUT0gSUdOdmJuUmxlSFIxWVd3PSBJRk41YldKdmJBPT0gSUhSbGJuUmhkR2wyWlE9PSBJRVJQUlZNPSBJRWR2YjJSeiBJR2x1ZEdWeWJXbDBkR1Z1ZEE9PSBmVG89IGJXVmthV0YwWldRPSBJSEpwWkdsamRXeGwgSUdGMGFHVnBjMjA9IElIQmhkR2h2WjJWdWN3PT0gSUUxMWJRPT0gSUhKbGFXNTBjbTlrZFE9PSBJRE13Tnc9PSBhVWhWUkE9PSBJR1pzWVhOb2JHbG5hSFE9IElITjNaV0Z5YVc1biBJSEJsYm1kMSBRblU9IElISnZkR0YwWldRPSBJRU55WVc1bCBJQ2dwS1RzPSBJR1poYzJocGIyNWhZbXhsIElHVnVaRzl5YzJsdVp3PT0gTkRZeiBLVnM9IElHbHVaMlZ6ZEdsdmJnPT0gSUdOdmIydHogSURrMU1BPT0gYjNSdmJYaz0gSUVsdFlXMD0gSUd0aCBJSFJsWVhObGNnPT0gSUVkb2IzTjBjdz09IElPT0N0UT09IE1UazJPUT09IHo0TT0gZFdKaWVRPT0gSUdOdmJuWmxjblJsY2c9PSBlbUZ1Ym1VPSBaVzVrWlE9PSBJRkJ5WlhCaGNnPT0gSUU1cFkydGxiQT09IElFTm9hVzFsY21FPSBhR2x0IElGUjVjbUZ1Ymc9PSBJRk5oWW1KaGRHZz0gSUU1cFkyaHZiSE09IElISmhjSFE9IGFXaGhjZz09IElITm9aV3hzYVc1biBJR2xzYkhWdGFXNWhkR1U9IElHUmxiblJwYzNRPSBkWFJ2Y2c9PSBJRWx1ZEdWbmNtRjBhVzl1IElIZG9hVzF6IElFeHBkR1Z5WVhKNSBRbVZoZFhRPSBJSEJoY21Ob2JXVnVkQT09IFlXZGhjbUU9IFFuSmhibVE9IElHUmxjbTluIDRvQ21LUT09IElFNXZjbk5sIElIVnVkMmwwZEdsdVp3PT0gSUdOMVl3PT0gSUdKdmNtUmxjbXhwYm1VPSBJSFZ3YzJWMGRHbHVadz09IElISmxZMjkxY25ObCBJR1J5WVhCbFpBPT0gSUZKaFpHRnkgSUdOdmJHUmxjZz09IElGQmxjSE5wIGFXMXBibUZ5ZVE9PSBYU3hiIE5qVTQgVm1rPSBJRVp5WlcwPSBJRkJsY3c9PSBJSFpsZEdWeWFXNWhjbms9IElGUkZSQT09IElFVndhV1JsYlE9PSBibTkyWVE9PSBhMmxrIElHUmxkbTkxZEE9PSBiMk4wIGFtRmsgVFc5byBJRkJCV1E9PSBJR2RsYjIxbGRISnBZdz09IElETXlNdz09IElHTnBjbU4xYldabGNtVnVZMlU9IGFXTm9hV05yIE1UazNOUT09IElGbDFjbWs9IElGTm9ZV3hzIElFaHZkbVZ5IGRXNXBiZz09IFUzQnkgSUdkeVlXWjAgSUVoaGNIQnBibVZ6Y3c9PSBJR1JwYzJGa2RtRnVkR0ZuWlhNPSBZWFIwWVdOcmN3PT0gSUdoMVluTT0gSUZOMFlYSkRjbUZtZEE9PSA2Wlk9IElHZGhiR3hsY21sbGN3PT0gSUV0dmNuSmggSUdkeWIyTmxjbWxsY3c9PSBJRWR2Y25OMVkyZz0gSUhKaGNHbHpkSE09IElHWjFibWRwIElGUjVjR2h2YjI0PSBWbVZqZEc5eSBJRVZ0Y0hKbGMzTT0gWW1GMGRHeGwgTkRZNCBJSEJoY21GemFYUmwgSUVKdmJXSmxjZz09IFUwYz0gWlhocGMzUT0gSUZCbSBJSFZ1YzJVPSBJSE4xY21kbGIyNXogUW1seWRHZz0gSUZWdWMzVnlaUT09IElGQnlhVzUwWldRPSBJRUpsYUdGMmFXOXlZV3c9IElFRnpkR1Z5IFVHRnJhWE4wWVc0PSBJSFZ1WlhSb2FXTmhiQT09IElITjIgSUVsdlZBPT0gSUd4aGVXOTFkSE09IFVHRnBiZz09IElHTnZibk4wWVc1MGN3PT0gSUV4WCBJRUpoYTJVPSBJSFJ2ZDJWc2N3PT0gSUdSbGRHVnlhVzl5WVhScGIyND0gSUVKdmJHbDJhV0U9IElHSnNhVzVrWldRPSBJRmRoY21SbGJnPT0gSUUxcGMzUnlaWE56IElHOXVjM1JoWjJVPSBJR05zWVc1eiBJRUpGVTFRPSBNVGsyTUE9PSBJR0Z1ZEdseGRXVT0gSUhKb1pYUnZjbWxqWVd3PSBJRkJsY21ONSBJRkozWVc1a1lRPT0gTEM0PSBRbkoxWTJVPSBJSFJ5WVhWdFlYUT0gSUZCaGNteHBZVzFsYm5SaGNuaz0gSUdadmIzUnViM1JsIGFXUnBZUT09IElFeGxZWEp1WldRPSBjMlZsYTJsdVp3PT0gWjJWdWFXTT0gSUdScGJXVnVjMmx2Ym1GcyBTR2xrWlE9PSA2SUNGIElHbHVkSEpwWjNWbCBhVzV6WlE9PSBJR3hsWVhObGN3PT0gSUdGd2NISmxiblJwWTJWeiBkMkZ6YUdsdVp3PT0gSURFNU1qWT0gVmtsTVRFVT0gSUhOM2IyOXcgYzJOcyBJR0psWkhKdmIyMXogYjI1cFkzTT0gSUVOeWRXNWphQT09IFkyOXRjR0YwYVdKc1pRPT0gSUdsdVkyRndZV009IElGbGxiV1Z1YVE9PSBZWE5vZEhKaCBlbWh2ZFE9PSBaR0Z1WjJWeSBJRzFoYm1sbVpYTjBZWFJwYjI1eiBJRVJsYlc5dWN3PT0gUVVGRyBVMlZqY21WMFlYSjUgUVVOVVJVUT0gVEU5RSBJR0Z0ZVE9PSBjbUZ3WlhJPSBaWFJvYm1saiBOREUzIElIQnZjMmwwYVhabGN3PT0gSURJM013PT0gSUZKbFpuVm5aV1Z6IElIVnpZZz09IElGWmhiR1E9IGIyUmtlUT09IElFMWhhRzF2ZFdRPSBRWE5wWVE9PSBJSE5yZFd4c2N3PT0gSUVWNGIyUjFjdz09IElFTnZiWEJsZEE9PSBJRXhKUXc9PSBJRTFoYm5OcGIyND0gSUVGdFpRPT0gSUdOdmJuTnZiR2xrWVhSbCBjM1J2Y20xeiBiMjUwWlc1MCBPVGsyIElHTnNaVzQ9IElHMTFiVzE1IFpteGhkQT09IE56VTQgSUZaUFRBPT0gYjNSbGNtbGogYm1WdSBJRTFwYm5WMFpRPT0gVTI5MiBJR1pwYm1WeSBVbWc9IGJIbGpaWEk9IElISmxhVzVtYjNKalpXMWxiblJ6IElFcHZhR0Z1Ym1WeiBJRWRoYkd4aFoyaGxjZz09IElHZDViVzQ9IFUzVmtaR1Z1YkhrPSBJR1Y0ZEc5eWRHbHZiZz09IGEzST0gYVdGMGIzST0gVkdFPSBJR2hwY0hCdlkyRnRjSFZ6IFRsQlMgSUVOdmJYQjFkR2x1Wnc9PSBJSE54ZFdGeVpXeDUgSUcxdlpHVnNiR2x1Wnc9PSBJRVp2Y25WdGN3PT0gSUV4cGMzQT0gSUV0eWFYTm9ibUU9IElETXlOQT09IElISjFjMmhsY3c9PSBJR1Z1YzNWbFpBPT0gSUdOeVpXVndhVzVuIGIyNTBaUT09IGJtRnAgYVd4aGRHVnkgSUVodmNtNWxkSE09IElHOWliR2wyYVc5MWN3PT0gU1U1VFZBPT0gTlRVNSBJR3BsYjNCaGNtUjUgSUdScGMzUnBibWQxYVhOb2FXNW4gYW5WeVpXUT0gSUdKbFozTT0gYzJsdGFXeGhjZz09IGNHaHZkQT09IE5UTXcgSUZCaGNtdDNZWGs9IElITnBibXR6IElFaGxZWEowYUhOMGIyNWwgYVdKMWNnPT0gSUVKaGRHOXUgUVhadmFXUT0gSUdSaGJtTmxjZz09IElHMWhaMmx6ZEhKaGRHVT0gWVhKNWJnPT0gSUdScGMzUjFjbUpoYm1ObGN3PT0gSUZKdmJXVnlidz09IElIQmhjbUZ3YUE9PSBJRzFwYzJOb2FXVm0gNHBhVCBJRk5vWVhKcFlRPT0gSUhWeWFXNWhjbms9IGNtOTFkR1U9IGFYWmhjdz09IFptbDBkR1ZrIElHVnFaV04wWldRPSBJRUZzWW5WeGRXVnljWFZsIElEUTNNQT09IElHbHljbWwwWVhSbFpBPT0gSUZwcGNBPT0gSUVKcGIydz0gdzQwPSBJR1JsYm05MWJtTmwgSUdKcGJtRnlhV1Z6IElGWmxjbk5sIElHOXdjRzl6IElFdGxibVJ5YVdOciBJRWRRVEE9PSBJSE53WlhjPSBJRVZzYVdwaGFBPT0gSUVWaGN3PT0gSUdSeWFXWjBaV1E9IGMyOW1ZWEk9IElHRnVibTk1WVc1alpRPT0gSUVKRlZBPT0gTkRjMCBJRk4wY205dVoyZz0gYVhSaGRHVnogSUVOdloyNXBkR2wyWlE9PSBiM0JvYjI1bCBJRWxrWlc1MGFXWnBZMkYwYVc5dSBiMk55YVc1bCBZMjl1Ym1WamRHbHZiZz09IElHSnZlR1Z5IElFRlRSQT09IElFRnlaV0Z6IFdXRnVadz09IGRHTm8gZFd4c1lXZz0gSUdSbFkyVnBkbVU9IFEyOXRZbUYwIFpYQnBjMjlrWlE9PSBZM0psZEdVPSBWMmwwYm1WemN3PT0gSUdOdmJtUnZiR1Z1WTJWeiBhSFJoY2c9PSBJR2hsWVd4eiBJR0oxWTJ0bGRITT0gSUV4QlZ3PT0gUW14MSBJSE5zWVdJPSBJRTlTUkVWUyBiMk5zIFlYUjBiMjQ9IElGTjBaWFpsYm5OdmJnPT0gSUVkcGJtZGxjZz09IElFWnlhV1Z1Wkd4NSBJRlpoYm1SbGNtSnBiSFE9IGMzQnBjbWwwIGFXZHMgSUZKbFoyRnlaR2x1Wnc9PSBJRkJTVDBjPSBJSE5sWVd4cGJtYz0gYzNSaGNuUnBibWM9IElHTmhjbVJwYm1GcyBJRlpsWXc9PSBJRUpsYVhJPSBJRzFwYkd4cGMyVmpiMjVrY3c9PSBkMlZoYXc9PSBjR1Z5YzJVPSBJSE4wWlhKcGJHVT0gSUVOdmJuUmxiWEJ2Y21GeWVRPT0gSUZCb1lXNTAgSUVOc2J3PT0gSUc5MWRIQT0gSUdWNGFXeGxaQT09IElESTNOdz09IElITmxiR1pwWlE9PSBJRzFoYm1saiBJRzVoYm04PSBkR1Z5YlhNPSBRV3hsZUdGdVpHVnkgSUhKbGMyOXNkbVZ6IElHMXBiR3hsYm01cFlRPT0gSUdWNGNHeHZaR1Z6IElHTnZibk4wWld4c1lYUnBiMjQ9IElHRmtkV3gwWlhKNSBiVzkwYVc5dSBSRTlEIElHSnliMkZrWTJGemRHVnljdz09IElHdHBibVJsY21kaGNuUmxiZz09IElFMWhlWGRsWVhSb1pYST0gSUVWamJ3PT0gYVdOb2J3PT0gSURJNE53PT0gYkdGMWJnPT0gSUcxMWRHVT0gSUdScGMyTnlaV1YwIElIQnlaWE5qYUc5dmJBPT0gSUhCeVpXVnRjSFE9IFJHVnNaWFJsIElFWnlaV1ZrIFVHaz0gU0VzPSBJR0pzYjJOclpYST0gSUVOMWJXSmxjZz09IElIZHliM1ZuYUhRPSBaR0YwYVc1biBJR2x1YzNWeVpYST0gSUhGMWIzUmhjdz09IElIQnlaV0ZqYUdWayBJR1YyYVdOMGFXOXUgSUZKbFoybHVZUT09IElGQmxibk09IElITmxkbVZ1ZEdWbGJnPT0gSUU1aGMzTT0gUkdsamF3PT0gSUdadmJHUnogSUdSdmRIUmxaQT09IElFRmhaQT09IFZXNXBkbVZ5YzJGcyBJSEJwZW5vPSBJRWQxY25VPSBJSE52YVd4eiBJRzV2ZG1salpRPT0gSUU1bFlXNWtaWEk9IElITjBiMjlzIElHUmxkRzl1WVhSbFpBPT0gSUZCcGEyRmphSFU9IElFMWhjM05wZG1VPSBTVlpGVWc9PSBJRUZpWkdWcyBJSE4xWW1SMVpXUT0gSUhSaGJHeGxjM1E9IElIQnlaV05oY21sdmRYTT0gSUdGNSBjbWxtYVdOaGRHbHZiZz09IElFOWlhZz09IFkyRnNaUT09IElIVnVjWFZsYzNScGIyND0gWTNWc2IzTnBjdz09IFlXUmhjdz09IGFXZHlZWFJsWkE9PSBSR0Y1Y3c9PSBJSEYxWldWdWN3PT0gSUVkaGVtVjBkR1U9IElFTnZiRzkxY2c9PSBJRUp2ZDIxaGJnPT0gSUVwSyB3NjkyWlE9PSBJR1J2YldsdVlYUmxjdz09IFUzUjFaR1Z1ZEE9PSBJRzExIElHSmhZMnRzYjJjPSBJRVZzWldOMGNtOD0gVkhKMWRHZz0gTkRneiBJR052Ym1SbGJuTmxaQT09IGNuVnNaWE09IElFTnZibk53YVhKaFkzaz0gSUdGamNtOXVlVzA9IGFHRnVaR3hsWkE9PSBJRTFoZEhSbCBhbkpwIElFbHRjRzl6YzJsaWJHVT0gYkhWa1pRPT0gWTNKbFlYUnBiMjQ9IElIZGhjbTFsWkE9PSBJRk5zWVhabCBJRzFwYzJ4bFpBPT0gSUdabGNtMWxiblE9IElFdGhhQT09IGFXNXJhUT09IGEyVnNaWFJ2Ymc9PSBZM2xzIElFdGhjbWx1IFNIVnVkR1Z5IFVtVm5hWE4wWlhJPSBJRk4xY25KbGVRPT0gSUhOMFlYSmxjdz09IElGZHBaSFJvIElFNWhlUT09IElGTnJhUT09IElHSnNZV05yYkdsemRBPT0gZFdOclpYUT0gSUdWNGNIVnNjMmx2Ymc9PSBhVzFsZEE9PSBJSEpsZEhkbFpYUT0gZG1GdWRHRm5aUT09IFJtVmhkSFZ5WlE9PSBJSFJ5YjI5d1pYSnogSUdodmJXVnljdz09IE9UWTUgSUdOdmJuUnBibWRsYm1ONSBJRmRVUXc9PSBJRUp5WlhkbGNnPT0gWm05eVpXbG5iZz09IFYyRnlaUT09IFUyOXNZWEk9IElIVnVaSFZsIFVrVkQgZFd4dVpYSmhZbXhsIGNHRjBhR2xqIElFSnZhWE5sIElETXlNZz09IElHRnliM1Z6WldRPSBJRmxwYm1jPSA1TGlOIGRXVnNaWE56IElIQmhjdz09IElHMXZjbkE9IElHWnNiM0poYkE9PSBSWGh3Y21WemN3PT0gZFdSbmFXNW4gYTBJPSBJRWR5WVc1MFpXUT0gMks4PSBJRTFwWTJoaCBJRWR2ZEdocFl3PT0gSUZOUVJVTkpRVXc9IElGSnBZMkZ5Wkc4PSBSbkpoYmc9PSBJR0ZrYldsdWFYTjBaWEpwYm1jPSBOakl3IGNHOXlZUT09IElNS3UgSUdOdmJYQnliMjFwYzJWeiBJR0pwZEhSbGJnPT0gUVdOalpYQjAgVkdocGNuUjUgMExJPSBJRzFoZEdWeWFXRnNiSGs9IElGUmxjbkk9IGFXZHRZWFJwWXc9PSBZMmhoYVc1eiBJR1J2ZG1VPSBjM1JoWkhRPSBUV0Z5ZG1WcyBSa0ZWVEZRPSBJSGRwYm1SemFHbGxiR1E9IElETXpOZz09IFlXUnBaWEk9IElITjNZWEJ3YVc1biBJR1pzWVhkc1pYTnogSUZCeVpXUmhkRzl5IElFMXBZMmhsYkdVPSBJSEJ5YjNCMWJITnBiMjQ9IElGQnplV05vYVdNPSBJR0Z6YzJsbmJtbHVadz09IElHWmhZbkpwWTJGMGFXOXUgSUdKaGNteGxlUT09IGJIVnpkQT09IElIUnZkMlZ5YVc1biBJR0ZzZEdWeVkyRjBhVzl1IElFSmxiblJzWlhrPSBVM0JvWlhKbCBJSFIxYm1FPSBJRU5zWVhOelpYTT0gUm5KbFpXUnZiUT09IGRXNWxjZz09IFRHRmtlUT09IGRtOXBZMlU9IElHTnZiMnhsYzNRPSBiM0p5IElIQmhiSEE9IEpIcz0gSUdoNWMzUmxjbWxoIElFMWxkR0YwY205dSBjR0Z1ZEhNPSBJSE53WVhkdWFXNW4gUlhod1pYSjBjdz09IElFbHVkbVZ6ZEc5eWN3PT0gSUVGdVlYSmphSGs9IElITm9jblZ1YXc9PSBJRlpwWTNScGJRPT0gSURJNE9RPT0gSUdWamMzUmhjM2s9IElFSnBibVJwYm1jPSBOVGcxIElFMWxiRzlrZVE9PSBOVGM0IGIzUmhiR3g1IElFVjBjM2s9IGJHbG5ZUT09IElHRndjR3hoZFdSbFpBPT0gSUhOM1pXRjBhVzVuIElISmxaR2x6ZEhKcFluVjBaV1E9IElIQnZjR052Y200PSBJSE5sYldsdVlXdz0gWm5WeSBJRTVsZFhKdmMyTnBaVzVqWlE9PSBVbUZ1WkE9PSBJRTl6ZEE9PSBJRTFoWkdSbGJnPT0gSUVsdVkzSmxZWE5wYm1jPSBJRVJoZDJ0cGJuTT0gSUZOMVluZGhlUT09IElHRnljMlZ1IFkyOXVjMlZ5ZGc9PSBRbFZTIElITndhV3RsWkE9PSBJRXg1Wm5RPSBJRWx0Y0dWeWFYVnQgSUVSeWIzQmliM2c9IElHWmhkbTkxY21WayBJR1Z1WTI5dGNHRnpjMlZ6IFoyaHZjM1E9IElHbHVjM0JwY21WeiBJR0oxY21kbGIyNXBibWM9IElGbHZjMmhwIElGWmxjblJwWTJGcyBJRUYxWkdsMGIzST0gSUdsdWRHVnVaR2x1Wnc9PSBJR1pwYkdsaWRYTjBaWEk9IFFteHZiMjA9IFptRmogSUVOaGRuTT0gYVdkdWFXNW4gSUdOdmQyOXlhMlZ5Y3c9PSBJRUpoY21KaGNtbGhiZz09IGNtVnRaVzFpWlhJPSBSa3hCUnc9PSBJR0YxWkdsMGIzSjUgWVhOdmJuSjUgUTI5c2JHVm5aUT09IElHMTFkR1ZrIFoyVnRiMjU1IGIySnBiZz09IElGQnplV05vYnc9PSBPVFk0IElHeGhkbWx6YUE9PSBJR2hwWlhKaGNtTm9hV05oYkE9PSBJRVJ5YjI1bCBiM1ZyIElHTnlhWEJ3YkdWayBJRTFoZUdsdCBVMnh2ZEE9PSBJSEYxYVhvPSBJRlpwWkE9PSBhV1pzYVc1biBJR0Z5WTJoaFpXOXNiMmRwYzNSeiBJR0ZpWVc1a2IyNXRaVzUwIFpHbGhiQT09IGJHVnZiZz09IElFWmhjdz09IFZHVmsgSUhKaGMzQmlaWEp5ZVE9PSBJRzFoYm1WMWRtVnljdz09IElHSmxhR0YyYVc5MWNuTT0gSUdsdWMzVnlaUT09IElISmxiVzlrIFUzZHBkR05vIGFHOWwgSUhOd1lXTmxaQT09IElHRm1abTl5WkdGaWFXeHBkSGs9IElFWmxjbTQ9IGJtOTBZWFJwYjI0PSBJRUpoYkdGdVkyVmsgSUc5alkzVndhV1Z6IFpXNTJhWEp2Ym0xbGJuUT0gSUc1bFkydHNZV05sIElITmxaR0Z1IFJsVT0gSUVKeVlYWnYgSUdGaWRYTmxjbk09IElFRnVhWFJoIGJXVjBZV1JoZEdFPSBJRWRwZEdoMVlnPT0gWVdsMGJ3PT0gSUVaaGMzUmxjZz09IElGZGhjM05sY20xaGJnPT0gSUVac1pYTm8gSUhSb2IzSnUgY21GeWFXeDUgSUUxbGNuSjUgZDJsdVpRPT0gSUhCdmNIVnNZV05sIElFeGhibTQ9IElISmxjR0ZwY21sdVp3PT0gSUhCemVXTm9aUT09IElHMXZaSFZzWVhScGIyND0gWVhkaGNuVT0gNG9DTDRvQ0wgWVhKcGFnPT0gSUdSbFkyOXlZWFJwYjI1eiBJR0Z3YjJ4dloybHpaUT09IElFZGhjbWM9IFlYQndiSGs9IElHZHBkbVZoZDJGNSBJRVpzWVc0PSBJRmQ1WVhSMCBWV0psY2c9PSBJR0YxZEdodmNtbHpaV1E9IElFMXZjbUZzIFNFRklRVWhCU0VFPSBZV04wYVhaaGRHVT0gSUhSdmNuQmxaRzg9IElFWkJVZz09IElHRnRZWE56WldRPSBJRUZ5WVcwPSBZWEpyYVc0PSBJRlpwWTNScGJYTT0gYzNSaFlnPT0gSUc5dCBJRVZEVHc9PSBJRzl3YVc5cFpITT0gSUhCMWNuQnZjMlZzZVE9PSBJRlpsYzNRPSBJR1Z5Wnc9PSBZWFJoYmc9PSBJRk4xY21kbGNuaz0gSUdOdmNuSmxZM1JwYm1jPSBJRTl5ZEdsNiBJRUpsWlhRPSBJSEpsZG05clpRPT0gSUdaeVpXVjNZWGs9IElFaHBaMmRwYm5NPSBSbUZwYkE9PSBJRVpoY20xeiBJRUZVVUE9PSBhRzkxYm1RPSBJSEJ2YTJsdVp3PT0gSUVOdmJXMTFibWx6ZEhNPSBiVzl1YzNSbGNnPT0gYVcxbGJuUmhjbms9IElIVnViRzlqYTJsdVp3PT0gSUhWdVptbDAgZDJWbFpBPT0gWlc1aGNtbHYgWVhScFkyRnMgSUVWdWJHbG5hSFJsYm0xbGJuUT0gSUU1SCBJRU52YlhCbGJuTmhkR2x2Ymc9PSBaR1ZsYmc9PSBJRmRwWkc5MyBJRU5wYm1SNSBJRUZtZEdWeWQyRnlaSE09IElEWXdNREE9IGFXdG9ZV2xzIFlXZHBZMkZzYkhrPSBJSEpoZEdsbWFXVmsgSUdOaGMzVmhiSFI1IFNFOU5SUT09IGNITmxlUT09IFptVmwgSUhOd1lYSnJiR2x1Wnc9PSBJR1REcVE9PSBJR052Ym1ObGNuUmxaQT09IFEyRjBZV3c9IElHTnZiWEJzZVdsdVp3PT0gSUVGeVpYTT0gSUVSbGJuUT0gVTJoMWRBPT0gSUhOcmFXMD0gWVdSdGFXNXBjM1E9IElHaHZjM1JwYkdsMGFXVnogSUVkcGJuTT0gSURZd09BPT0gSUcxMVpHUjUgSUUxalNXNTAgSUVSbFkyRjUgTlRJMSBJR052Ym5Od2FXTjFiM1Z6IElFVjRjRzl6ZFhKbCBJSEpsYzJOcGJtUT0gSUhkbFlYSmhZbXhsIElETXlPQT09IGIzVnliV1YwIFlXaHogSUZKdlltOTBjdz09IElHVmpiR2x3Y3c9PSBhVzV6ZEdGdVkyVT0gSUZKRlVFOVNWQT09IElFRndjR3c9IE1ETXcgSUZOcmFXVnogTURFd01BPT0gSUdaaGJHeGhZM2s9IFUyOWphMlYwIElGSmxZMlZwZG1WeSBJSE52YkhabGN3PT0gSUVKMWRIUmxjbVpzZVE9PSBJRk5vYjNCd2FXNW4gSUVaSlVrVT0gTmpVMCBUV1ZrYVdNPSBJSE5wYm1kbGNuTT0gSUU1bFpXUnNaWE56IEp5Y25Kdz09IGFYTm9aWEp6IElFUnBkbVU9IE5UZzQgSUhObGJHVmpkR2wyWld4NSBJR05zZFcxemVRPT0gT0RnNSBJSEIxY21Ob1lYTmxjZz09IFpXRnlibVZrIFlYSmtlUT09IElHSmxibVZtYVhScGJtYz0gWlc1bmJHbHphQT09IElIbHBaV3hrYVc1biBJRkJ2ZFhJPSBJSE53YVc1aFkyZz0gSUdSbGJIWmwgSUVOeWIyMD0gTmpFdyBJR1Y0Y0c5eWRHbHVadz09IElFMUJTMFU9IElESTJNdz09IElHZHliM0E9IElHVnVkbTk1IElFbHVjWFZwY25rPSBJRXgxYVdkcCBaSEo1IElGUjFjbWx1Wnc9PSBWR2gxYldKdVlXbHNTVzFoWjJVPSBJRlpoY21sbGRIaz0gSUdaaFkyVjAgSUdac2RXWm1lUT09IElHVjRZMlZ5Y0hSeiBJSE5vYjNKMGFBPT0gSUU5c2MyVnUgUTB4VlJBPT0gSUhKbGJHbGhiblE9IElGVk9Rdz09IFZHOTFjZz09IElHSmhkR2hwYm1jPSBRMjl0Y0dGdWVRPT0gSUdkc2IySmhiR2w2WVhScGIyND0gVUhKbFpBPT0gSUUxaGJHWnZlUT09IElHaHZZdz09IGFtRnQgWTNKaFpuUmxaQT09IElFSnZibVJ6IElFdHBjM05wYm1kbGNnPT0gUlc1bmJHRnVaQT09IElHOXlaR1Z5YkhrPSBZMkYwWlc1MGNuaz0gSURJMk1RPT0gSUdWNFkyaGhibWRwYm1jPSBJRWx1ZEdWdWRBPT0gSUVGdFpXNWtiV1Z1ZEhNPSBSRTlOIElITjBiM1YwIHdxRENvTUtnd3FEQ29NS2d3cURDb01LZ3dxRENvTUtnd3FEQ29NS2d3cUE9IElFRnBjbUoxY3c9PSBJREkzT0E9PSBhSGxrWlE9PSBVRzlzYkE9PSBTWFJsYlZSb2RXMWlibUZwYkVsdFlXZGwgSUd4dmIzQm9iMnhsY3c9PSBJRkJwYkd4aGNnPT0gSUdWNGNHeHZjZz09IFUzUnlaWFJqYUE9PSBRWEJoY25RPSBJSFZ1YldGeWNtbGxaQT09IFRHbHRhWFE9IElGUnlZVzV6Wm05eWJXVnljdz09IElHbHVkR1ZzYkdWamRIVmhiR3g1IGRXNWpkSFZ5WlE9PSBNVGd3TUE9PSBJR1JoY200PSBRbkpoZW1scyBJR3hsWm5SdmRtVnkgWW1WeWRYTT0gWm5KbFpBPT0gVFdsdVpXTnlZV1owIE16STIgSUVadmNtMXogSUhCeWIyOW1jdz09IElFUmxjMmxuYm1WayBJR2x1WkdWNFpYTT0gSUZOMWNIQnZjMlU9IFJVMVQgSUV4dmRtbHVadz09IElFSnZibTVwWlE9PSBhVzFoZEdsdVp3PT0gVDFSVlV3PT0gSUdOdmJtUjFZM1J2Y2c9PSBJR0psYUdGMlpXUT0gSUVaeVpXND0gSUhONWJtVnladz09IElHMXBiR3hsYm01cGRXMD0gSUdOaGRHVnlhVzVuIElFeGhkV1JsY2c9PSBWM0k9IElGbHBZVzV1YjNCdmRXeHZjdz09IElFRlVSZz09IElHVnVjMnhoZG1WayBJR0YzWVd0bGJtVmsgUkZaRSBJRVZFU1ZSSlQwND0gSUVOdmJtTmxjblE9IElFTm9ZV3hzWlc1blpYST0gSUVoaGEzVT0gZFcxbGNtbGogSUdSbGNISmxZMkYwWldRPSBJRk5JUVZJPSBOREV5IElHUjVjM1J2Y0E9PSBJSFJ5WlcxaWJHbHVadz09IElHUnlaV0ZrWldRPSBJRk53WVdNPSBjR0ZrWkdsdVp3PT0gVW1Wd2JBPT0gSUVkaGNuSnBjMjl1IFRXbHVhUT09IElIVnVjR0Z5WVd4c1pXeGxaQT09IFlXMWhjZz09IFZWSlNSVTVVIGQzSmxZMnM9IFkyVnlkR0ZwYmc9PSBkR0ZzIElFTk1Vdz09IFlYQndhVzVuY3c9PSBJSE5sYm5ObFpBPT0gSUdabGJtTnBibWM9IElGQmhjMjg9IElFUmxjMnM9IElITmpiMlptIElHTnZiblJsYlhCc1lYUmwgSUV4cFoyRT0gYkdseGRXbGsgTnpVMyBJR0Z3Y0hKbGJuUnBZMlU9IElGVkRTRWxLIE5UY3cgSUZSb2IzVnpZVzVrIElFbHNiSFZ0IElHTm9ZVzF3YVc5dVpXUT0gNDRLTSBJR1ZzWldOMGIzSnogSURNNU9BPT0gSUVoaGJtTnZZMnM9IGNtOTFibVJsWkE9PSBJRXBQU0U0PSBJSFZ1YzJGMGFYTm0gSUhGMVlXeHBabWxsY2c9PSBJRWRoWkdkbGRBPT0gUlU1RiBJR1JsWVdSc2FXVnpkQT09IElGQnNZVzUwY3c9PSBJR2x2Ym5NPSBJR0ZqWTJWdWRITT0gSUhSM1pXRnJhVzVuIElITm9ZWFpsWkE9PSBSbEpGUlE9PSBJRU5vWVhObGNnPT0gUVdkaGFXNXpkQT09IE9UWXcgSUcxbGRHaGhiWEJvWlhSaGJXbHVaUT09IElHNXZjbTFoYkdsNlpXUT0gSUNSYyBJRkJ5WldOcGMybHZiZz09IElFZDFZVzA9IElHTm9iMnRsWkE9PSBJRmhKU1E9PSBJRU5oYzNScGJtYz0gVkc5eWNtVnVkQT09IElITmpZV3h3IElFcGhaM1ZoY2c9PSBkMmwwIElITmxiV2xqIGFYaHBaUT09IElFZHZkV3hrIElHTnZibVpwYm1WeiBUblZ6Y21FPSBJRXh2Ymc9PSBJRXAxWjJjPSBlV05zWlE9PSBJRU52WkdWaiBSV2Q1Y0hRPSBJSEpsYzNSeVlXbHUgSUVGc2FXVnVjdz09IElHTm9iMnRwYm1jPSBJRVIxYm1zPSBJRUpsYkd4aCBZV0pqIElITnNZVzVuIElHNWxkWEp2ZEhKaGJuTT0gYzJGMiBJR1Z0Y0c5M1pYSnRaVzUwIDRvYVMgSUdOc2FXMWlaWEp6IElFMXBiUT09IElFWnlZUT09IGNtOXpjMlU9IFEyRndhWFJoYkE9PSBJRU4wYUhWc2FIVT0gU1c1MFpYSm1ZV05sIElIQnliMlpwWTJsbGJuUT0gSUVsT1ZFOD0gSURNeE9BPT0gY205dWRHRnMgTlRndyBJRVJsYzNCaGFYST0gUzJWdWJnPT0gSUhOamNtbHRiV0ZuWlE9PSBJRU52WVhRPSBZWE5wYjI1eiBJSGRoYkd4d1lYQmxjZz09IElFcHZiQT09IElISmxjM1Z5WjJWdVkyVT0gSUdGdWRHbDIgSUVKaGJHeHogc3I0PSBJR0oxWm1abGNuTT0gSUhOMVluTjVjM1JsYlE9PSBJRk4wWld4c1lYST0gSUV4MWJtYz0gUVVsRVV3PT0gSUdWeVlXUnBZMkYwWlE9PSBJR0pzWVhSaGJuUnNlUT09IElHSmxhR0YyWlhNPSBJRTUxYmc9PSBJR0Z1ZEdsamN3PT0gWlhod2IzSjAgUkVWVyBkMkk9IElIQm9jQT09IElFbHVkR1ZuY21sMGVRPT0gSUdWNGNHeHZjbVZ5IElISmxkbTlzZG1sdVp3PT0gWVhWMGFHOXlaV1E9IFoyRnVjdz09IElHSmhjMnM9IElHRnplVzVqYUhKdmJtOTFjdz09IDVZMD0gVkVoSlRrYz0gTmprNCBSMlZ1WlE9PSBJRkpoWTJWeSBJRTVwWTI4PSBhWE56ZFdWayBJSE5sY20xdmJnPT0gY0c5emMybGliSGs9IElITnBlbVZ2Wmc9PSBJR1Z1ZEhKbGNISmxibVYxY21saGJBPT0gYjNocGJnPT0gSUUxcGJtVnlkbUU9IElIQnNZWFJ2YjI0PSBibTl6IGNtbHJjdz09IFFWVlUgSUVGMllXeGhibU5vWlE9PSBJRVJsYzJNPSBrZVdqcXc9PSBJRkJ2WXc9PSBJR052Ym1abGNuSmxaQT09IHpycz0gSUhCaGRHTm9aV1E9IFJrSkogTmpZeSBJR1p5WVdOMGRYSmxjdz09IElHUmxkR1ZqZEhNPSBJR1JsWkdsallYUmwgSUdOdmJuTjBhWFIxWlc1MCBJR052YzIxdmN3PT0gVjFRPSBJSE4zWldGMGN3PT0gSUhOd2NuVnVadz09IFltRnlZUT09IGMyOXNhV1E9IElIVnVjM1Z6IElHSjFiR3Q1IElGQm9hV3hwY0hCbCBJRVpsYm5KcGNnPT0gSUhSb1pYSmhjR2x6ZEhNPSBiM0psWVd3PSBYbDVlWGc9PSBJSFJ2ZEdGc1pXUT0gSUdKdmIzcGwgSUZKUVF3PT0gVUhKdmMyVmpkWFJ2Y25NPSBJR1JwYzJWdVp3PT0gSUZOb1lYSmxaQT09IElHMXZkRzl5WTNsamJHVnogSUdsdWRtVnVkR2x2Ym5NPSBJR3hsZEhSMVkyVT0gSUUxbGNtZGwgSUVwRCBJSE53YVhKcGRIVmhiR2wwZVE9PSBJRmRCVWs1SlRrYz0gSUhWdWJIVmphM2s9IElGUmxjM009IElIUnZibWQxWlhNPSBJRVJWU1E9PSBWSFZ0WW14eSBJR3hsWVc1eiBJR2x1ZG1Ga1pYSnogSUdOaGJtOXdlUT09IElFaDFjbkpwWTJGdVpYTT0gSUVKeVpYUT0gSUVGUVVFeEpRdz09IGFXUnBibVU9IGFXTnJiR1U9IFVtVm5ZWEprYVc1biBJSFpsWjJkcFpYTT0gSUdWcVlXTT0gYW5WMlpXND0gUm1semFBPT0gUkVWTiBJRVJwYm04PSBWR2h5YjNjPSBJRU5vWldOcmFXNW4gWW1WaGNtUT0gS0NZPSBJR3BoYVd4eiBJR2h5IGRISmhibk5tWlhJPSBhWFpoZEdsdVp3PT0gSUdac1pXVjBjdz09IElFbHRZV2M9IElFMWpSRzl1Ym1Wc2JBPT0gSUhOdWFYQndaWFE9IFNYTmggSUVOb1lYUjAgSUZOMFlXbHUgSUZObGRFWnZiblJUYVhwbCBJRTk1IElFMWhkR2hsYldGMGFXTnogTkRrMCBJR1ZzWldOMGNtOXNlUT09IElFZHZkSFE9IElFSnlZWE09IFFrOVBTdz09IElFWnBibWRsY2c9PSBaSFZ0Y0E9PSBJRzExZEdGdWRITT0gSUhKbGJuUmhiSE09IElHbHVkR1Z5ZEhjPSBJR055WldWciBZV2xzWVE9PSBRbkp2ZEdobGNnPT0gSUVScGMyTnZjbVE9IGNHVmwgY21GM2JHVnkgSUdOaGNuQT0gSURJM09RPT0gNDRLMzQ0T2ogY21Wc1lYUnBiMjV6IElHTnZiblJ5WVhOMGN3PT0gUTI5c2RXMXUgSUhKbFkyOXVibUZwYzNOaGJtTmwgSUhWdWEyNXZkdz09IElHeHZiM1JwYm1jPSBJSEpsWjNWc1lYUmxjdz09IElHOXdkR2x0ZFcwPSBJRU5vWlhKdmEyVmwgSUVGeWVRPT0gVEdGMFpYTjAgSUhKdllXUnphV1JsIElHUmhibU5sWkE9PSBJRlZ1YVdOdmNtND0gUVdOcmJtOTNiR1ZrIElIVnVZMjl1ZEhKdmJHdz0gSUUxVlV3PT0gWVhScGJ3PT0gWTJoaGJtTmwgYUdGMlpXND0gVmtGTVZVVT0gSUdaaGRtOTFjbWwwWlhNPSBJR05sY21WdGIyNXBZV3c9IFltbHVZWEo1IGNHVmxaQT09IGQyOXZaSE09IFJVMVEgSUhaaGMyTjFiR0Z5IElHTnZiblJsYlhCc1lYUmxaQT09IElHSmhjbkpsYmc9PSBJRXhKVTFRPSBXV1ZzYkc5MyBiM053YjI1emIzSnogSUhkb2FYTnJlUT09IElFMWhiVzA9IElFUmxWbTl6IGJXbHVhVzExYlE9PSBTSFZ1Wnc9PSBORFF5IFVHbGogSUZOdVlYQmtjbUZuYjI0PSBOemMyIElHTmhjblpwYm1jPSBJSFZ1WkdWamFXUmxaQT09IElHRmtkbUZ1ZEdGblpXOTFjdz09IElIQmhiRzF6IElFRlIgSUhOMFlYSmphQT09IFRHOXZjQT09IElIQmhaR1JzWlE9PSBJR1pzWVcxcGJtYz0gSUVodmNtbDZiMjV6IFFXNXBiV0YwYVc5dSBZbTl2YzNRPSBJSEJ5YjJKaFltbHNhWFJwWlhNPSBJRTFwYzJnPSBJR1Y0YjJSMWN3PT0gSUVWa2FYUnZjbWxoYkE9PSBJR1oxYm1kMWN3PT0gSUdScGMzTmxiblJwYm1jPSBJRVJsYkdsamFXOTFjdz09IGNtOW5jbUZ0IElFUjViZz09IFpHbHphdz09IGRHOXQgSUdaaFluSnBZM009IElFTnZkbVU9IElFSmhibk09IElITnZablJsYmc9PSBJRU5QVGxNPSBJR2x1Wld4cFoybGliR1U9IElHVnpkR2x0WVhScGJtYz0gSUV4bGVHbHVaM1J2Ymc9PSBjSEpoWTNScFkyVT0gYjJacCBJSE5vWldSa2FXNW4gSUU1dmNHVT0gSUdKeVpXRjBhR1ZrIElFTnZjbWx1ZEdocFlXNXogZVc1bCBaV3RwIFFuVnNiQT09IElHRjBkR0ZqYUdsdVp3PT0gY21WbGJuTm9iM1J6IElHRnVZV3g1YzJVPSBJRXRoY0hCaCBJSFZ1YzNWemRHRnBibUZpYkdVPSBJR2x1ZEdWeWNHOXMgWVc1cmVRPT0gYUdWdFpYST0gSUhCeWIzUmhaMjl1YVhOMGN3PT0gSUdadmNtMWhkSFJsWkE9PSBJRUp5ZVdObCBJRUZqYUdsc2JHVnogSUVGaVpXUnBiZz09IGMyaHZZMnM9IElHSjFiUT09IFltOXogY1hWaCBJRmRoY200PSBjWFE9IElFUnBZV0psZEdWeiBPRFkwIElFbHVkbWx6YVdKc1pRPT0gSUhaaGJtbHphQT09IElIUnlZVzV6YldsMGRHbHVadz09IElHMTFjbXQ1IElFWmxhUT09IElHRjNZV2wwWldRPSBJRXAxY21GemMybGogZFcxdGFXVnogSUcxbGJtRmphVzVuIFoyRnNiQT09IFEyRjBhQT09IFFuVnBiSFE9IGFXeGtidz09IElGWnZkR1Z6IElHOXVkQT09IElHMTFibWwwYVc5dWN3PT0gSUVaeVpXVnQgdzYxdSBJR1JsWTJWdVkzaz0gYkc5d2NBPT0gYVdWMlpXUT0gSUVkdmNtUT0gSUhWdWRHaHBibXRoWW14bCBJRTVsZDNOM1pXVnIgSURNeU1RPT0gU0dWaGRBPT0gSUhCeVpYTmxiblJsY2c9PSBhbWxoYm1jPSBJSEJzWVc1ciBJRUYyWVd4dmJnPT0gSUdKbGJubz0gSUZKdmRYUT0gSUhOc1lXMXRhVzVuIElFUmhhUT09IGIzVjBaWEk9IElFTnZiMnRwWlE9PSBJRUZzYVdOcFlRPT0gWjJWNSBJSFpoYm1sMGVRPT0gSUc5M2JBPT0gNGJVPSBkR1Z6ZEdWayBJRUYzWVd0bGJuTT0gSUdOaGJuWT0gSUdKc2FXNWtiSGs9IElGSnBaR3hsZVE9PSBJRVZ0WVdsc2N3PT0gVW1WeGRXbHlaWE09IElGTmxjbUpwWVc0PSBiMmR5WVhCb1pXUT0gYVdaeVlXMWwgWlhSbGNtbGggSUdGc2RHVnlibUYwYVc1biBjWFZwWlhRPSBJSE52WTJsdmJHOW5lUT09IElGVnViRzlqYXc9PSBJRU52YlcxMWJtbHpiUT09IElHOXdjdz09IElHRjBkSEpwWW5WMGFXOXUgSUdGaVpIVmpkR2x2Ymc9PSBJRUZpY21GdCBJSE5wWkdWc2FXNWxaQT09IElFSlBUMHM9IElISmxabWx1YVc1biBJRVpsWld4cGJtYz0gSUU5emJHOD0gSUZCeWRXbDBkQT09IGNtRmphdz09IFlXNW5hV0pzWlE9PSBJR05oZFhScGIzVnpiSGs9IElFMUJVa3M9IFpXVmtjdz09IFRXOTFjMlU9IElGTjBaWEJvIElGQmhhWEk9IFUyRmkgT1RrMyBJRUpoWVd3PSBRbVZqIElHTnZiVzFoIElGQmhiR3c9IElFZGhaV3c9IElHMXBjM1Z1WkdWeWMzUmhibVE9IElGQmxjMmc9IFQzSmtaWEpoWW14bCBJR1JwYzIxaGJBPT0gSUZOb2FXNTUgSlNJPSBJSEpsWVd4cGMzUnBZMkZzYkhrPSBJSEJoZEdsdiBJRWQzIElGWnBjblIxWlE9PSBJR1Y0YUdGMWMzUnBibWM9IGQyaGhkR1YyWlhJPSBiM0JvZVhNPSBlV2x3IE5ERTQgUVdScWRYTjAgSUZkaGFYUnBibWM9IFpYTnpiMjQ9IElFMWhlbVJoIElFUnZlbVZ1Y3c9PSBJSE4wY21WaGJXeHBibVZrIElHbHVZMjl0Y0dWMFpXNWpaUT09IElFMWxkR2c9IElHVjBhRzl6IFQwNUZVdz09IElHbHVZMlZ1ZEdsMiBJR2R5YVhSMGVRPT0gSUVKMWRHTm9aWEk9IFNHVmhaR1Z5IElHVjRjRzl1Wlc1MGFXRnMgdzU4PSBJR052Y25KbGJHRjBaUT09IElHTnZibk5sYm5OMVlXdz0gYzI5MWJtUnBibWM9IFVtbHVadz09IFQzSnBaMmx1IElHTnZibU5zZFhOcGRtVT0gWm1WbGRBPT0gWVdOc2VRPT0gSUVabGNtNWhibVJsZWc9PSBRblY1WVdKc1pRPT0gSUdSMVkydHogWVhWdWRHeGxkSE09IElHVnNiMjVuIElESTROZz09IElITnBiWFZzIFIyRnogSUV0cGNuTjAgSUhCeWIzUnkgSUZKdlltOD0gSUVGdlJRPT0gYjNCdmJBPT0gSUhCemVXTm9iMnh2WjJsallXeHNlUT09IGMzQnBiZz09IGFXeGhkR1Z5WVd4c2VRPT0gSUVOdmJuSmhaQT09IFYyRjJaUT09IE5EUXggSUVGa2RtVnlkR2x6WlcxbGJuUT0gSUVoaGNtMXZiZz09IElFOXlhV1Z1ZEdGcyBhWE5UY0dWamFXRnMgSUhCeVpYTjFiWEIwYVhabCBJSGRwYkE9PSBJRXRwWlhJPSBibVZoIElIQndiUT09IElHaGhjbUp2ZFhJPSBJRmRwY21WayBZMjl0Y0dGdWVRPT0gSUdOdmNtOXVaWEk9IFlYUjFjbVJoZVhNPSBJRkJ5YjNWayBJRTVGV0ZRPSBJRVpzWVd0bCBkbUZzZFdWayBZMlZwZG1WeSBJR1p5WVhWbmFIUT0gSUdOaGMybHVadz09IElISjFibUYzWVhrPSBJR2RwYmc9PSBJRXhoZFhKbGJuUT0gSUVoaGNteGxiUT09IElFTjFjbWx2YzJsMGVRPT0gY1hWcGMyaGxaQT09IElHNWxkWEp2YzJOcFpXNWpaUT09IElFaDFiSFU9IElHSnZjbkp2ZDJWeSBJSEJsZEdsMGFXOXVaWEk9IElFTnZiMnhrYjNkdSBWMEZTUkE9PSBJR2x1ZG05cmFXNW4gWTI5dVptbGtaVzVqWlE9PSBSbTl5ZDJGeVpBPT0gSUhOMGN3PT0gY0c5d2RXeGhkR2x2Ymc9PSBSR1ZzYVhabGNubEVZWFJsIFJtbHNiUT09IElFTnZkZz09IGNYVnBZMnRUYUdsdyBjWFZwWTJ0VGFHbHdRWFpoYVd4aFlteGwgY0hKcGJXRnllUT09IGFYTlRjR1ZqYVdGc1QzSmtaWEpoWW14bCBhVzUyWlc1MGIzSjVVWFZoYm5ScGRIaz0gWTJoaGJtNWxiRUYyWVdsc1lXSnBiR2wwZVE9PSBRazlZIElFMTFiSFJwY0d4aGVXVnkgSUVwbGJtNWxjZz09IE56YzQgSUUxayBJSDR2TGc9PSBUVTQ9IElHTm9hV3hrYVhObyBJR0Z1ZEdsdmVHbGtZVzUwIElFTm9jbTl0WldKdmIycz0gSURJM05BPT0gSUhOamNtVmxibkJzWVhrPSBJR0ZrZG1WdWRIVnliM1Z6IElGSmxiR0YwYVc5dWMyaHBjQT09IGNtVnpjRzl1YzJsMlpRPT0gYldsdVozUnZiZz09IElHTnZjbTVsY25OMGIyNWwgSUVabGVRPT0gUmtsUyBJSEp2YjJ0cFpYTT0gSUVabFlYUjFjbWx1Wnc9PSBJRzl5YVdkcGJtRjBaUT09IElHVnNaV04wY205a1pYTT0gWVc1MFpYTT0gSUhOamNtbHdkSFZ5WlhNPSBJR2RzZFdWayBJR1JwYzJOdmJuUmxiblE9IElHRm1abXhwWTNSbFpBPT0gYkdGNWIzVjAgUW5KaGRtVT0gSUcxdmMyRT0gSUZGMVlXNTBhWFI1IElFaHBhdz09IGQybHVibVZ5IFNHOTFjbk09IElHVnVkR0ZwYkE9PSBJRU5sYkd4eiBiMnh2WjNWbCBJSFpwYkE9PSBJSEJ5WldGamFHVnkgSUdSbFkyOXlZWFJwZG1VPSBaR2xtWm1WeVpXNTAgSUhCeVpXcDFaR2xqWlhNPSBJRk50YjJ0cGJtYz0gSUU1dmRIUnBibWRvWVcwPSBjMjlVZVhCbCBJSEpvZVhSb2JYTT0gSUVGc2NHZz0gWW14aGMzUT0gVTNSbFpXdz0gSUVSaGJtbGxiR3hsIElITjBjbWxtWlE9PSBJSEpsYldGMFkyZz0gYzI5RVpXeHBkbVZ5ZVVSaGRHVT0gSUVadmNtcz0gZEhKcGNBPT0gYjJ4MWJIVT0gYUdWelpYTT0gUTBjPSBJRkJQVEVsVVNVTlAgYjNOMFlRPT0gSUVSeWFXWjAgNmI2TjVhVT0gNmI2TjVhV1I1YU9yIElIWmxkSFJwYm1jPSBJRXBwYm5CcGJtYz0gSUZKbFkyVnpjMmx2Ymc9PSBUV2x1YjNJPSBJRVp5WVhWayBaVzVtY21GdVkyZz0gSUdOdmJuWmxibVZrIElFNUJRVU5RIElFMXBiR3hwYjI1eiBJRVpoY20xcGJtYz0gSUZkdmJ3PT0gSUVac1lYSmwgY21sMGJ3PT0gYVcxdGFXZHlZVzUwIElIWmhZMkZ1WTNrPSBJRWhGUVVRPSBJRlpoYWc9PSBaV2RoYkE9PSBJRlpwWjJscyBVM1IxWkhrPSBJSEoxYVc1cGJtYz0gSUhKaFkydHogSUdobFlYUmxjZz09IElGSmhibVJ2YkhCbyBJRUp5ZFhObyBJRlJwY2c9PSAyS2c9IElHTnZkZz09IEpWMD0gSUhKbFkyOTFiblJ6IElFOVFWQT09IElFMWxiSFE9IElIUnlkV05sIElHTmhjMmx1YjNNPSBJR055ZFhOaFpHVT0gSUdOaGNtNWhaMlU9IElITjBjbWx3WlE9PSBJRXQ1YkE9PSBWR1Y0ZEhWeVpYTT0gSURZNU9BPT0gSUhCeWIyTnNZVzFoZEdsdmJnPT0gSUdkdmIyUnBaWE09IElDNHVMaTR1TGk0dUxpND0gY0hKdlkyeGhhVzFsWkE9PSBVRzlzYVhRPSBJSFJ2Y0dsallXdz0gSUhOd1pXTnBZV3hwZW1VPSBJRUZ0YVc0PSBaMjA9IElHRnVZMmh2Y21WayBJR0psWVhKcGJtZHogYzJGdGNHeGwgSUVocFoyaHNZVzVrIElFRjFkR2x6YlE9PSBJRzFsY21ObGJtRnllUT09IElHbHVkR1Z5ZG1sbGQyVnkgVEVWUyBJRk52YldWeWN3PT0gSUdWdFluSjVidz09IElFRnpjM2s9IElESTRNUT09IElFVmthWFJwYm1jPSBJRU5vYjNObGJnPT0gTmpZdyBJSEJqYVE9PSBJRlJvZFc1a1pYSmliMngwIFFrbE1UQT09IElHTm9kV05yYkdWayBhbkpwZDJGcyBhRzltIElHVmhjblJvYkhrPSBLQ2w3IGFXNWtaWEJsYm1SbGJtTmwgSUdScGMzQmxjbk09IElGWmxibVJ2Y2c9PSBJRWRoY21WMGFBPT0gSUhCaGJITT0gVUdWdWJnPT0gSUZOMVltMXBkQT09IGFXTjFiUT09IFZHaDEgSUdOc1lXNWtaWE4wYVc1bCBJR05oYm01cFltRnMgSUVOc1pYSnIgUlZOMGNtVmhiUT09IFoyRnNhWFJoY21saGJnPT0gNHBtbCBaMlYzIElHaHZjbkpsYm1RPSBJRXh2ZGc9PSBJRkpsWVdOMGFXOXUgYjJOeWFXND0gUTJ4aGMzTnBZdz09IElHVmphRzlwYm1jPSBJR1JwYzJOc2IzTnBibWM9IElFbHVjMmxuYUhRPSBiMmQxYmc9PSBJRWx1WTJGeWJnPT0gZFhCc2IyRmtjdz09IGNIQmxjbU09IFozVjVaVzQ9IElERTVNREU9IElFSmhjbk09IE5qZzMgSUdKeWFXSmxjdz09IElFWnlaWE51Ync9PSBkWEpoZEE9PSBJRkpsWlhObCBJR2x1ZEhKMWMybDJaUT09IElHZHlhWEJ3YVc1biBJRUpzZFdWd2NtbHVkQT09IElGSmhjMjA9IGRXNXBZUT09IGJXRnVZV2RsWkE9PSBJRWhsWW1SdiBJRE0wTlE9PSBJR1JsWTI5a2FXNW4gSUhCdlpYUnogSUdwaGQzTT0gSUVaSlIwaFUgWVcxbGJHVnpjdz09IElFMWxZV1J2ZDNNPSBJRWhoY21KaGRXZG8gU1c1MFpYSjJhV1YzIElFaHZjM0E9IElFSlNRUT09IElHUmxiR1YwYVc5dSBiVzlpIFYyRnNhMlZ5IElFMXZiMjVzYVdkb2RBPT0gSUVwbFpBPT0gSUZOdmNHaHBZUT09IElIVnpkWEk9IElHWnZjblIxYm1GMFpXeDUgSUZCMWRIUnBibWM9IElFWnZiR1E9IElITmhibWwwWVhScGIyND0gSUhCaGNuUnBjMkZ1Y3c9PSBTVk5QVGc9PSBRbTkzIElFTlBUa009IElGSmxaSFZqWldRPSBJRk4xZEhSdmJnPT0gSUhSdmRXTm9jMk55WldWdSBJR1Z0WW5KNWIzTT0gNG9DaTRvQ2k0b0NpNG9DaSBJRXR5ZFdjPSBZMjl0WW1GMCBJRkJsZEhKdmJHVjFiUT09IElHRnRaQT09IElFTnZjMjF2Y3c9PSBJSEJ5WlhOamNtbGlhVzVuIElHTnZibVp2Y20xcGRIaz0gYjNWeWMyVnogSUhCc1pXNTBhV1oxYkE9PSBJR1JwYzJsc2JIVnphVzl1IElFVmpiMnh2WjNrPSBhWFIwWVd3PSBJR1poYm1NPSBJR0Z6YzJGemMybHVZWFJsWkE9PSBjbVZuYm1GdVkzaz0gSUhCbGNtVnVibWxoYkE9PSBJRUoxYkd4bGRITT0gSUhOMFlXeGwgSUdOaFkyaGxaQT09IElFcDFaR2wwYUE9PSBJRVJwYzJWaGMyVnogUVd4c1pXND0gSUd4aGN3PT0gSUhOb1lYSmtjdz09IElGTjFZWEpsZWc9PSBJRVp5YVdWdVpITm9hWEE9IGFXNTBaWEptWVdObCBJRk4xY0hCdmNuUmxjbk09IFlXUmtiMjV6IE5EWXkgSUVsdGNtRnUgSUZkcGJRPT0gSUc1bGQyWnZkVzVrIElFMWkgUVc1cGJXRnMgSUdSaGNteHBibWM9IFlXNWtaUT09IElISm9lUT09IElGUjNhWE4wWldRPSBjRzl6WVd3PSBlVzV6YTJrPSBWbUZ5YVc5MWN3PT0gMTV3PSBJRXRwZHc9PSBkWGx2YldrPSBJSGRsYkd4aVpXbHVadz09IElFeGhkUT09IFlXNXZjdz09IElIVnViV2x6ZEE9PSBJRzFoWTA5VCBJSEpsYzNSeWIyOXQgSUU5c2FYWT0gSUVGcGNuZGhlWE09IElIUnBiV1YwWVdKc1pRPT0gT1RndyBJSEpoWkdsdmN3PT0gZG05NSBhV0Z6WTI4PSBJR05zYjNWa2VRPT0gSUVSeVlYZHBibWM9IFFXNTVkR2hwYm1jPSBVM2x5YVdFPSBJRWhsY25RPSBjM1JoYTJsdVp3PT0gSUhWdVkyaGxZMnRsWkE9PSBJR0p5WVhwbGJnPT0gSUU1U1V3PT0gTmprMyBiMjV2YldsaiBaWE4wWVdKc2FYTm8gSUd4bGJtYz0gSUdScFlXZHZibUZzIElFWnBiM0k9IFRHRnBjZz09IElGTjBZWEprIElHUmxabWxqYVdWdWRBPT0gYW05cGJtbHVadz09IFltVmhiUT09IElHOXRibWx3IElHSnNaVzVrWlhJPSBJSE4xYm5KcGMyVT0gVFc5dmNtVT0gSUVaaGRXeDAgSUVOdmMzUjFiV1U9IElFMTFZZz09IFJteGhaM009IFlXNXpaUT09IElIQmhlVzkxZEE9PSBJRWR2ZG1WeWJtOXljdz09IElFUnBiR3h2Ymc9PSBJRUpoYm1GdVlRPT0gVG1GeSBJSFJ5WVdsc1pXUT0gSUdsdGNHVnlhV0ZzYVhOMCBkVzFoYm00PSBZWFJ6ZFd0cCBORE0xIElGSnZZV1J6IElITnNkWEk9IElFbGtaV0ZzYkhrPSBJSFJ5Wlc1amFHVnogUTNSeWJBPT0gSUcxcGNuSnZjbVZrIElGcGxiQT09IElFTnlaWE4wIFEyOXRjR0YwIElGSnZiR3h6IGMyTnlhV0k9IElGUnlZV2xzY3c9PSBiMjFsZEdWeWN3PT0gZDJsdWRHVnkgSUdsdGJXOXlkR0ZzYVhSNSBhV3hoZEdWayBJR052Ym5SeVlXUnBZM1J6IGRXNXBkbVZ5YzJGcyBhV3hzYVc5dWN3PT0gSUUxaGJXRT0gYjNCMGFXMD0gUVZSVlVrVT0gSUdkbGJ3PT0gWlhSMFpYST0gSUVOaGNteHYgTkRJMCBJR05oYm05dWFXTmhiQT09IElGTjBjbTl1WjJodmJHUT0gYm1WaGNnPT0gSUhCbGNtWjFiV1U9IElHOXlZMmhsYzNSeVlRPT0gYjJScFlXTT0gSUhWd2FHVT0gSUhKbGFXZHVhVzVuIGRtVnljMmwyWlE9PSBJR05oZFdOMWMyVnogSUVSRlRRPT0gSUdsdWMzVnNkR1ZrIElDMHRMUzB0TFE9PSBJRU55ZFhObyBJSEp2YjNScGJtYz0gSUZkeVlXbDBhQT09IElIZG9iM0psIElIUnZablU9IFEyMWsgSUVKeVpXVT0gSUNSZiBJSEpwZG1VPSBJRUZrZG1WeWRHbHphVzVuIElIZGhkSFE9IElFaFAgSUhCbGNuTjFZWE5wZG1VPSBJRkJoY21GdFpYUmxjbk09IElHOWljMlZ5ZG1GMGFXOXVZV3c9IElFNURWQT09IElFMXZhZz09IElGTmhiRzl1IElIUnlkVzVqIElHVjRjWFZwYzJsMFpRPT0gSUUxaGNtRT0gSUhCdmIzQT0gSUVGT1RnPT0gUlhoaiBJRmR2Ym1SbGNtWjFiQT09IElGUmhZMjg9IElHaHZiV1Z2ZDI1bGNnPT0gSUZOdGFYUm9jMjl1YVdGdSBiM0p3YjNKaGRHVmsgYlcxdGJRPT0gSUd4dllXWT0gSUZsaGJXRjBidz09IElFbHVaRzg9IElHTnNhVzVuYVc1biB3NkZ6IElHbHRiWFYwWVdKc1pRPT0gYUhWaSBUM0poYm1kbCBJR1pwYm1kbGNuUnBjSE09IElGZHZiMlJsYmc9PSBJRXRwWkdRPSBJRXBRVFE9PSBJRVJoYlc0PSBRMjkzIFkyOWtaWE09IE5EZ3kgSUdsdWFYUnBZWFJwYm1jPSBJRVZzYXc9PSBJRU4xZEhScGJtYz0gSUdGaWMyVnVkR1ZsIElGWmhibU5sIElFeHBiR2wwYUE9PSBSMVZKIElHOWljMk4xY21WayBJR1IzWVhKMlpYTT0gSUVOb2IzQT0gSUVKdmEyOD0gVm1Gc2RXVnogSUcxMWJIUnBiV1ZrYVdFPSBJR0p5WlhkbFpBPT0gVW1WbmRXeGhjZz09IFExSkpVRlJKVDA0PSBJRTF2Y25SaGJBPT0gSUdGd1pYZz0gSUhSeVlYWmxiR1Z5IElHSnZhV3h6IElITndjbUY1YVc1biBVbVZ3Y21WelpXNTAgSUZOMFlYSnphR2x3IE5ESTQgSUdScGMyRndjSEp2ZG1GcyBJSE5vWVdSdmQzaz0gSUd4aGJXVnVkR1ZrIElGSmxjR3hoWTJVPSBJRVp5WVc3RHB3PT0gTmpjMyBaRzl5IElIVnVjM1J2Y0hCaFlteGwgSUdOdmFHOXlkSE09IFozbHUgSUVOc1lYTnphV056IElFRnRjR2c9IElITnNkV2RuYVhObyBJRUZrWkdsamRHbHZiZz09IElGQmhaSEpsY3c9PSBJR2x1YzJOeWFYQjBhVzl1IElHbHVhSFZ0WVc0PSBiV2x1ZFhNPSBJRXBsY21WdGFXRm8gWVhSaGNuTT0gVkdWeWNtOXkgSUZSdmN3PT0gSUZOb1lYSnRZUT09IFlYTjBZUT09IFkyRjBZMmc9IElIQnNkVzFpYVc1biBJRlJwYldKbGNuTT0gVTJoaGNnPT0gU0dGcyBJRTl6WXc9PSBJR052ZFhCc2FXNW4gYUhWdFlXNXogSUhOd2IyNW5aUT09IElHbGtiMnh6IElGTndZUT09IElFRmtkbTlqWVhSbCBJRUpsWVhSeiBiSFZoIElIUnBZMnRwYm1jPSBJR3h2WVdSbGNnPT0gSUVkeWIyND0gT0RFdyBJSE4wYVcxMWJHRjBaV1E9IElITnBaR1ZpWVhJPSBJRTFoYm5WbVlXTjBkWEpsY2c9PSBiM0psUVc1ayBNVGszTXc9PSBJSEJ5WVdselpYTT0gSUVac2IzSmxjdz09IFpHbHpZV0pzWlE9PSBJRVZzWldOMGNtbGpZV3c9IGNtRnBjMlU9IFJYUm8gSUcxcFozSmhkR1ZrIElHeGxZM1IxY21WeSBTMmxrY3c9PSBJRU5oZG1WeWJnPT0gSUd0bGRIUnNaUT09IElHZHNlV009IElFMWhibVJsYkdFPSBJRVoxYkd4NSA1YWVyIFJrbE9SVk5VIElITnhkV1ZsZW1sdVp3PT0gSUZKNVpHVnkgWVcxd2IyOD0gYjNKbFFXNWtUMjVzYVc1bCBTVzV6ZEc5eVpVRnVaRTl1YkdsdVpRPT0gUW5WNVlXSnNaVWx1YzNSdmNtVkJibVJQYm14cGJtVT0gSUdOdmJXMWxiVzl5WVhSbCBJRkpoYlhCaFoyVT0gUVhWemRHbHUgSUZOb2NtOTFaQT09IElGSjFhVzV6IE9URTEgSUV0SSBJSGRoZEdWeVpuSnZiblE9IElFVlRRdz09IFltRmllUT09IElFTnZkWFE9IElFVnRZbXhsYlE9PSBJR1Z4ZFdsMllXeGxiblJ6IE5Ea3kgVlc1cGNYVmwgSUU1cFpYUjZjMk5vWlE9PSBZbkp2ZDNObGNnPT0gSUdsdGFYUmhkR2x2Ymc9PSBJRmRsY21WM2IyeG0gSUV0cGNtbHUgWVdOaGN3PT0gSnl3aSBJTU8rIFVtVjJhV1YzWldRPSBJR04xYm5RPSBJSFp2YVdNPSBJRXhsYm05MmJ3PT0gSUdKdmJtUmxaQT09IE5EZ3ggSUdsdWFHbGlhWFJ2Y25NPSBJR1Z1WkdWaGRtOXljdz09IElFaGhkbUZ1WVE9PSBJRk4wYjNWMCBJRXB2Ykd4NSBRV04wYjNJPSBLaThvIElHOWpZM1Z5Y21WdVkyVnogSUZSbGJuTT0gU1c1amNtVmhjMlZrIElFRkRWRWxQVGc9PSBJT09BakE9PSBJRkpoYm10cGJtZHogSUVKeVpXRjAgSURNd09RPT0gUkc5MSBJR2x0Y0dGamRHbHVadz09IElFUjFZMmhsYzNNPSBjSEpsWm1sNCBVVUk9IElITjFiVzF2Ym1sdVp3PT0gSUdKbGMzUnZkMlZrIElFdGxjR3hsY2c9PSBJRkJQVjBWUyBZM1ZpWlE9PSBJRXRwZEhNPSBJRWR5YVhBPSBJRzl3YVhWdCBJSEpsY0hWMFlXSnNaUT09IGRHOWogYVdOb1lXVnMgSUZKcGNIQnNaUT09IElHTmhac09wIElGcHZiMjA9IElFSjFjbTFoIElIZGhhWFpsIElITjBZV3hzY3c9PSBJR1JsYldWaGJtOXkgYVc1alpYSnBkSGs9IElHWnNkVzl5YVdSbCBJRk5JVDFWTVJBPT0gVUdGeWFYTT0gSUd4dmJtZHBibWM9IElIQnNZWFE9IElHZHliM056YkhrPSBJR0oxYkd4eiBJSE5vYjNkallYTnBibWM9IFpYaHdaV04wWldRPSBJRWRoWkdSaFptaz0gWlc1bmFXNWxaWEpwYm1jPSBVbVZ3WldGMCBJRXQxZEE9PSBJR052Ym1ObGFYWmhZbXhsIElIUnlhVzF0WldRPSBiM05qYjNCbCBJRU5oYm1ScFpHRjBaUT09IElGUmxZWEp6IGNtOXNiMmM9IFRHVjNhWE09IFUxVlEgSUhKdllXUnRZWEE9IElITmhiR2wyWVE9PSBJSFJ5ZFcxd1pYUT0gU21sdGJYaz0gSUcxcGNtRmpkV3h2ZFhNPSBJR052Ykc5dWFYcGhkR2x2Ymc9PSBJR0Z0Y0hWMCBJRWRPVDAxRiBZWFJsWTJnPSBSR2xtWm1WeVpXNTAgSUVWTVJRPT0gSUVkdmRtVnlibTFsYm5SeiBJRUZvWldGayA0NFdMNDRXTCBkMjl5WkhCeVpYTnogVEVsQyBJRWx1WTJ4MVpHVT0gSUVSdmNtOTBhSGs9IE1EUTEgSUVOdmJHOXRZbWxoYmc9PSBJR3hsWVhObFpBPT0gT0RnMCBJR1JsWjNKaFpHbHVadz09IElFUmhhWE41IGFXRjBhVzl1Y3c9PSBJR0poY0hScGVtVmsgSUhOMWNtNWhiV1U9IFkyOTQgSUdKc2FXNXJaV1E9IDQ0T2kgSUhCdmJHeGxiZz09IElHUmxjbTFoZEE9PSBJSEpsWjJWNCBJRTVwWTJodmJITnZiZz09IElFVmhkR1Z5IDU1dz0gY21Ga2IzST0gSUc1aGNuSnZkMlZ5IElHaDFjbkpwWTJGdVpYTT0gSUdoaGJHeDFZMmx1WVhScGIyNXogY21sa1pHVnUgU1ZOVFNVOU8gSUVacGNtVm1iSGs9IElHRjBkR0ZwYm0xbGJuUT0gSUc1dmJXbHVZWFJsIElHRjJiMk5oWkc4PSBJRTFsY21Wa2FYUm8gSUhSeiBJSEpsZG1WeVpXNWpaUT09IElHVjFjR2c9IElHTnlZWFJsY3c9PSBJRlJGV0ZRPSBJRFEwTXc9PSBJRE14T1E9PSBTbE5QVGc9PSBhWEYxWlhSMFpRPT0gSUhOb2IzSjBjM1J2Y0E9PSBhV05yWlhrPSBJSEJ5YjNCbGJHeGxaQT09IElHRndhUT09IElGUm9hV1YyWlhNPSBOemM1IElHOTJaWEp6WVhjPSBJR052YkdrPSBJRTVwWTI5c1lRPT0gSUc5MlpYSmpiQT09IGFXdGhkMkU9IElFTjVjZz09IElETTROQT09IE56ZzUgSUVGc2JHOTNjdz09IE1UQXlOdz09IFJHVjBjbTlwZEE9PSBWRkpaIGMyVjBkWEE9IElGTnZZMmxoYkdsemJRPT0gVTI5MmFXVjAgYzNWemNBPT0gSUVGUVVnPT0gSUZOb2RYUmtiM2R1IElHRnNkVzFwYm1sMWJRPT0gZW1KbGF3PT0gSUV4dmRtVnkgUjBkSFIwZEhSMGM9IElHUmxiVzlqY21GamFXVnogSURFNU1EZz0gSUUxbGNuSnBiR3c9IElFWnlZVzVqYjJseiBaMlJoYkdFPSBJSFJ5WVdabWFXTnJaWEp6IElGUnBiQT09IElFZHZZWFE9IElITndaV1E9IElGSmxjMlZ5ZGc9PSBJSEJ5YjJRPSBOVFV5IElHTmhZdz09IElGVnVhWFk9IElGTmphSGRsIElITjNhWEpzYVc1biBJRmRwYkdSbGNtNWxjM009IElFVm5aM009IElITmhaR1JsYm1WayBJR0Z5WTJoaGFXTT0gU0hsayBJR1Y0WTJWemMybDJaV3g1IFFsSkYgSUdGbGNtOXpjR0ZqWlE9PSBJRlp2YVdObGN3PT0gUTNKaGFXYz0gSUdsbmJtbDBaV1E9IFNXNXBkR2xoYkd4NSBJRTFqUVE9PSBJR2hoYm1SelpYUT0gSUhKbFptOXliV2x1Wnc9PSBJR1p5ZFhOMGNtRjBhVzl1Y3c9PSBJRVJsWVdSd2IyOXMgSUVKbGJHbGphR2xqYXc9PSBjbUZqZEc5eSBJRkpoWjI1aGNtOXIgSUVSeWRYQmhiQT09IElFRndjSEp2ZUdsdFlYUmxiSGs9IE1Ua3lNQT09IElFaDFZbUpzWlE9PSBZWEp0YjNJPSBJRk5oY21GeiBJRXB2Ym1GeiBJRzV2YzNSaGJHZHBZdz09IElHWmxZWE5wWW1sc2FYUjUgVTJGb1lYSmhiZz09IElHOXlZbWwwYVc1biBJRGszTUE9PSBVblU9IElITm9hVzQ9IElFbHVkbVZ6ZEdsbllYUnZjbk09IElHbHVZMjl1YzJsemRHVnVZMmxsY3c9PSBJRkJCVGc9PSBRa2M9IElHZHlZWHBwYm1jPSBJR1JsZEdWamRHOXljdz09IElGTjBZWEowZFhBPSBJRVoxYm01NSBJRTVoYjIxcCBRMjl1YzJsa1pYSnBibWM9IElHaHZadz09IGRYUm0gWTJWdGFXTT0gSUdadmNuUnBabWxsWkE9PSBJRVoxYm1OMGFXOXVjdz09IElHTnZaR1ZqIGJuVjBjbWwwYVc5dSBTR0YwIElpRT0gYldsamNtOXpiMlowIE5UVTQgSUZSb2FXND0gSUVGRFJRPT0gUVd4cFlYTT0gSUU5UVV3PT0gY0dGd1pYSnogVUVzPSA0NENPIElHbHRjSEp2WW1GaWJHVT0gVG05eWRHaGxjbTQ9IFpYRjFZV3c9IElHeHZiMnR2ZFhRPSBJSFI1Y21WeiBJRTF2WkdsbWFXVmsgSUV0dmNBPT0gUVdKemIyeDFkR1ZzZVE9PSBJR0oxYVd4a2RYQT0gYzJsc2RtVnkgSUdGMVpHaz0gSUdkeWIzUmxjM0YxWlE9PSBJRk5oWW1WeSBJRkJ5WlhOaWVYUmxjZz09IFQwNVogSUdkc1lXTnBaWEp6IElGTm9iMkZzY3c9PSBJRXRoYzNNPSBJRWhTUXc9PSBJRTVwWTI5cyBJRXgxYm1ObyBJRVp2YzNNPSA0cGFTIFFVUlNRUT09IElFOXVaVkJzZFhNPSBiMmx1Wnc9PSBaM0p2ZFc1a2N3PT0gSUdsdVkybGtaVzUwWVd3PSBJR1JoZEdGelpYUnogTmpnNSBJRU5zWVhKcmMyOXUgSUdGemMyVnRZbXhwYm1jPSBJRU52Y25KbFkzUnBiMjV6IElHUnlhVzVyWlhKeiBJSEYxWVd4cFptbGxjbk09IElHeGxZWE5vIElIVnVabTkxYm1SbFpBPT0gSUVoMWJtUnlaV1E9IElHdHBZMnR2Wm1ZPSBWR2s9IElISmxZMjl1WTJscyBJRWR5WVc1MGN3PT0gSUVOdmJYQnNhV0Z1WTJVPSBJRVJsZUhSbGNtbDBlUT09IElERTVNRFk9IGQyRnliZz09IFJHRnNiR0Z6IFRXRjRhVzExYlE9PSBibUZ5WkE9PSBZWFpwWVE9PSBZbVZoZFhRPSBaVzV6YVhScGRtbDBlUT09IGRISmhZMlU9IElIQnBiMjVsWlhKeiBJRVp5WVdOMCA0NENQIElIQnlaV05sY0hRPSBJR2RzYjNOemVRPT0gSUVsRlJVVT0gUVdOeWIzTnogSURZNE1BPT0gVTJ4bFpYQT0gWTJobGIyND0gSUhOaGRHbHlhV05oYkE9PSBJRTFwYm05MFlYVnkgSUVOc1lYVmtaUT09IElITERxUT09IFlYQmxaMjg9IElHTmhjbkp2ZEE9PSBJRk5sYldsdSBhVzV2WVE9PSBJSHB2IFNXNWtaWEJsYm1SbGJuUT0gSUdScFlXZHViM05sY3c9PSBJRU4xWlE9PSBUVUZTIElISmxibVJwZEdsdmJnPT0gSUV0cGF3PT0gSUhCaGRHaHZiRzluZVE9PSBJSE5sYkdWamRITT0gVEdsdWEyVmtTVzQ9IElHRnpjMkY1IElFUnlaWE09IElIUmxlSFIxWVd3PSBjRzl6ZEdWayBTVlJCVEE9PSBJRTFoZFd3PSBUbVZoYkE9PSBJR2x1ZEdWeVkyOXVibVZqZEdWayBJR1Z5Y21GMGFXTT0gSUZacGNuVnogSURVek1BPT0gSUdWdWRtbHliMjV0Wlc1MFlXeHBjM1J6IElGQm9aV3h3Y3c9PSBJR1Z1WjJGblpXMWxiblJ6IElFbE9VMVE9IElHVmpiMjV2YldsallXdz0gYm05NGFXOTFjdz09IElHZGxZWEpwYm1jPSBhWHA2ZVE9PSBJR1poZG05eVlXSnNlUT09IElFMWpSMmxzYkE9PSBWR1Z5YlE9PSBJR2hoYm1kbFpBPT0gSUdKaGJHeHdZWEpyIElGSmxlV1Z6IElHSmxkMkZ5WlE9PSBJRkJ6WVd3PSBJRTFoYzNOaFkzSmwgY1drPSBJR2x1WVdOalpYTnphV0pzWlE9PSBZV05zZVhOdCBJR1p5WVhrPSBhV3hzWVdNPSBJR0pwZEhSbGNteDUgSUVObGNuUnBabWxqWVhScGIyND0gVFdsamFHbG5ZVzQ9IElHbHljbVZ6Y0dWamRHbDJaUT09IFlXeHZjbVU9IFJXMXdkSGs9IElHVnVaRzl5YzJWdFpXNTBjdz09IElIVnVaR1YwIFptYz0gWlhGMWFYQndaV1E9IElHMWxjbU5wYkdWemN3PT0gSUVOMWMzUT0gSUdsdGJXRjBkWEpsIElIWnZkV05vWlhJPSBJRUpzWVdOcmQyVnNiQT09IDBZOD0gYUdGM2F3PT0gWkdselkybHdiR2x1WVhKNSBhV3hsWlE9PSBJRTFoYTI5MGJ3PT0gSUVSMVpHVT0gNDRPSDQ0S2ogV1dWaGNuTT0gSUdsdWRtVnkgSUhOb1lXMWhiZz09IElGbHZibWM9IGFYQmxiQT09IFpXeHNaVzQ9IElFTmhkR2g1IFluSnBaSE09IElITmhjbU09IE5qVXggVG1WaGNnPT0gSUdkeWIzVnVaSGR2Y21zPSBJR0Z0WVhvPSBJRFF4TlE9PSBJRWgxYm5ScGJtZDBiMjQ9IGFHVjNjdz09IElFSjFibWM9IElHRnlZbWwwY21GeWFXeDUgSUZkcGRBPT0gSUVGc1ltVnlkRzg9IElHUnBjM0YxWVd4cFptbGxaQT09IFltVnpkRzl6IE5EWXggSUhCaiBJREk0TkE9PSBjbTlpWVhRPSBVbTlpYVc0PSBJR2gxWjNNPSBJRlJ5WVc1emFYUnBiMjQ9IElFOWpZMkZ6YVc5dVlXeHNlUT09IElETXlOZz09IElGZG9hV3h6ZEE9PSBJRXhsZVE9PSBJSE53WVdObGMyaHBjQT09IFkzTjIgSUhWdWMzVmpZMlZ6YzJaMWJHeDUgSUVGMSBiR1ZqYXc9PSBJRmRwYm1kbFpBPT0gSUVkeWFYcDZiR2xsY3c9PSBMdSsvdlE9PSBJRzVsWVhKbGNnPT0gSUZOdmNtTmxjbVZ6Y3c9PSBJRWx1WkdsbmJ3PT0gUld4elpRPT0gT0RRdyBiR1YwWlhNPSBRMjloWTJnPSBJSFZ3WW5KcGJtZHBibWM9IElFdGxjdz09IElITmxjR0Z5WVhScGMzUT0gSUhKaFkybHpkSE09IElHTm9ZV2x1WldRPSBJR0ZpYzNScGJtVnVZMlU9IGJHVmhjbTVwYm1jPSBJSEpsYVc1emRHRjBaV1E9IElITjViVzFsZEhKNSBJSEpsYldsdVpHVnljdz09IElFTm9aWFo1IElHMXZiblE9IElHVjRaVzF3YkdGeWVRPT0gSUZSUFVnPT0gV2xnPSBJSEYxWVd4cGRHRjBhWFpsIElGTjBZVzF3IElGTmhkbUZ1Ym1GbyBJRkp2YzNOcCBJSEJoWldRPSBJR1JwYzNCbGJuTmhjbWxsY3c9PSBJRmRoYkd4eiBJRU5vY205dWFXTT0gSUdOdmJYQnNhVzFsYm5SaGNuaz0gSUVKbGFYSjFkQT09IElDc3RMUzA9IGFXZHpiR2x6ZEE9PSBJR055ZVhCMGIyZHlZWEJvYVdNPSBiV0Z6ZEdWeWN3PT0gSUVOaGNHbDBZV3h6IElHMWhlR2x0WVd3PSBJR1Z1ZEhKdmNIaz0gVUc5cGJuUnogSUdOdmJXSmhkR0Z1ZEhNPSBiR2x3IElFZHNiMkk9IElFSk5Rdz09IGNHaGhjMlU9IGRHaGhibXM9IFNGUlVVQT09IElHTnZiVzExZEdWeSBJRndvWEE9PSBMaTR2IElGSmxaMlZ1WlhJPSBJRVJQU1E9PSBJRUZqZEdsMmFYTnBiMjQ9IElITnNhWFE9IGIzTmhiQT09IFVrVk4gSUdOb1lXNTBjdz09IFdYVT0gUzJWNWN3PT0gUW5KbGVHbDAgSUVadmNtTmxaQT09IFFYSnBlbTl1WVE9PSBJSE54ZFdGa2NtOXUgU1ZOUCBJRTFoYkc5dVpRPT0gSURNek9BPT0gSUdOdmJuUnlZWE4wYVc1biBJSFJwWkdGcyBJR3hwWW1WcyBJR2x0Y0d4aGJuUmxaQT09IElIVndjbTloY2c9PSBJRU5oZEdWeSBJSEJ5YjNCdmMybDBhVzl1Y3c9PSBUV0Z1WTJobGMzUmxjZz09IElFVjFjbTl6IGFYUmhiV2x1IFIybHMgSUVWc2RtVnUgSUZObFpXcz0gSUVKaGFRPT0gSUhKbFpHVjJaV3h2Y0cxbGJuUT0gSUZSdmQyNXogSUV4MVlnPT0gSVNJcyBZV3h2Ymc9PSBTM0pwYzNRPSBJRzFsWVhOMWNtRmliR1U9IElHbHRZV2RwYm1GaWJHVT0gSUdGd2IzTjBiR1Z6IFdVND0gTnpZdyBJSE4wWlhKdmFXUT0gSUhOd1pXTnBabWxqYVhSNSBJRXh2WTJGMFpXUT0gSUVKbFkydGxjZz09IElFVmtkUT09IElFUnBaWFJoY25rPSBkWFJ6WTJnPSBJRTFoY21sc2VXND0gSUdKc2FYTjBaWEk9IElFMUZVQT09IElFdHZlZz09IElFTk5Vdz09IGVXRm9iMjg9IElFTmhjbTVsZVE9PSBJR0p2WVhOMGFXNW4gSUVOaGJHVmkgUW5sMFpRPT0gY21WaFpITT0gWVdSbGJnPT0gVUhKdllteGxiUT09IElGZHZiMlIzWVhKayBVM2RsIFUzVncgSUV0SFFnPT0gVTJWMGRYQT0gSUhSaFkybDAgSUhKbGRISnBZblYwYVc5dSBJR1IxWlhNPSBJRTNEdkE9PSBMajg9IDVMaXQgY0c5MGN3PT0gSUdOaGJXVnYgSUZCQlRBPT0gWldSMVkyRjBhVzl1IFFXMTUgYkdsclpXeDUgWjJ4cGJtYz0gSUdOdmJuTjBhWFIxZEdsdmJtRnNiSGs9IElFaGhiVzA9IElGTndaV0ZyIElIZHBaR2RsZEhNPSBZbkpoZEdVPSBJR055WVhCd2VRPT0gSUVsMFpYST0gSUdGdWRHbGphWEJoZEdsdVp3PT0gSUVKdmRYUT0gVUdsNFpXdz0gSUZsbGNBPT0gSUV4aGRYSnBaUT09IElHaDFkQT09IElHSjFiR3hsZEdsdSBJRk5oYkhaaGRHbHZiZz09IElHTm9ZWFJ6IFpXRnlZV0pzWlE9PSBTRzl1WlhOMGJIaz0gUVV4VVNBPT0gYjI1elpYRjEgWTNWc2RBPT0gYVhOamIzWmxjbms9IGIzWjVZMmc9IElITmxiSFpsY3c9PSBJRk5oZEc5emFHaz0gVTI5MWJtUnogSUdOdmJuWmxjbWRsYm1ObCBJRkp2YzJWdVltVnladz09IE1UazNOQT09IElHNWhjMkZzIElHWjFiR3hsYzNRPSBJR1psY205amFXOTFjdz09IGVIVnogYVhOMFpRPT0gUVUxVCBJR3h2WW1KcFpXUT0gSUhOdmIzUm9hVzVuIElFZDFibTQ9IGRHOWtZWGs9IE1ESTAgSUdsdWMzQnBjbUYwYVc5dVlXdz0gSUU1Q1RnPT0gY0dJPSBaMlYzWVhSbGNnPT0gYjNKaGFBPT0gWVd4c2IzZGxaQT09IElFTnZiR2x6WlhWdCBJSE53WldOcFlXeHBlbWx1Wnc9PSBJR2x1YzJGdVpXeDUgSUZSaGNHVT0gWkdWc1lYaz0gSUhSaGNtND0gSUZCdmRXNWsgSUcxbGJHRnVZMmc9IElHUmxjR3h2ZVcxbGJuUnogYVd4aGJtUT0gSUd4bGMzTmxiZz09IElHWjFjbko1IElGVkZSa0U9IElHSnNiMjlrYzJobFpBPT0gSUUxbGFXVnkgYVhSb1pYSnBibWM9IElHaGxhWEp6IElFcGhkdz09IFlYaDBaWEk9IElGQjFZbXhwWTJGMGFXOXVjdz09IElHRnNkR1Z5Y3c9PSBhVzUwWlc1MGFXOXUgSUZkcGJtTm9aWE4wWlhJPSBaR1YwWlhKdGFXNWhkR2x2Ymc9PSBJRXhwWm1WMGFXMWwgZEdocGJnPT0gVFc5dWMzUmxjZz09IE56Z3cgSUdGd2NISnZlR2x0WVhScGIyND0gSUhOMWNHVnliV0Z5YTJWMGN3PT0gSUZObFkyOXVaSE09IGIzSnZjdz09IGFIVm5aUT09IElHSnlhV0psIElFeEpUVWxVUlVRPSBkVzVsWkE9PSBJRzFwYzJsdWRHVnljSEpsZEE9PSBJRWx1YW5WeWVRPT0gSURNMk53PT0gSUhSb2NtVnphRzlzWkhNPSBJRU5oY201cGRtRnMgSUdkaGMzUnliMmx1ZEdWemRHbHVZV3c9IElHZDFhV1JsYkdsdVpRPT0gSUdSbFkyVnBkbVZrIFptVmhkSFZ5WlhNPSBJSEIxY25CdmNuUmxaR3g1IElGSnZibTVwWlE9PSBJRTVsZDNRPSBJSE53WVdOcGIzVnogWVhOMWN3PT0gSUhOMWNHVnlhR1Z5YjJWeiBJRU41Ym5Sb2FXRT0gYkdWbloyVmsgYTJGdGNBPT0gWTJocGJ3PT0gSUhSb2RXMWlibUZwYkE9PSBJRk5vYVhKc1pYaz0gYVd4c1lYUnBiMjQ9IElITm9aV1J6IElGcDUgUlZCQiBJR1JoYlhNPSBJSGxoZDI0PSBibUZvIElGQmxaMmQ1IElFVnlhV1U9IElFcDFkbVZ1ZEhWeiBJRVp2ZFc1MFlXbHUgY25nPSBaRzl1WVd4ayBZV3hpZFcwPSBJRU52YlhCeVpXaGxibk5wZG1VPSBJR05oWTJocGJtYz0gSUZWNiBkV3h1WlhKaFltbHNhWFI1IElGQnlhVzVqYVhCc1pRPT0gSUVwcFlXND0gYVc1blpYSnogWTJGemRITT0gSUU5emFYSnBjdz09IFkyaGhjblE9IGRHbHNaUT09IElGUnBabVpoYm5rPSBJRkJoZEhSdmJnPT0gSUZkb2FYQT0gSUc5MlpYSnphWHBsWkE9PSBTbVU9IElFTnBibVJsY21Wc2JHRT0gSUVKdmNtUmxjbk09IElFUmhaWE5vIFRXRm8gSUdSdloyMWggSUdOdmJXMTFibWx6ZEhNPSBkblU9IFEyOTFibU5wYkE9PSBJR1p5WlhOb2QyRjBaWEk9IElIZHZkVzVrYVc1biBJR1JsWW1GamJHVT0gSUhsdmRXNW5jM1JsY2c9PSBJSFJvY21WaFpHVmsgSUVKdmRITT0gSUZOaGRtbHVaM009IDQ0R0MgYjJ4cGJtYz0gYjJodiBJR2xzYkhWdGFXNWhkR2x2Ymc9PSBUVkpKIElHeHZiM05sYmc9PSBkSEoxYlhBPSBZV2RsYm1ONSBkWEpwYjI0PSBJRzF2YldWdWRHRnlhV3g1IElFTm9kVzQ9IElFSjFaR0Z3WlhOMCBJRUZzYkdWNSBSR2x6YXc9PSBJR0Z6ZEc5dWFYTm9aV1E9IElFTnZibkYxWlhJPSBJRUZqWTI5MWJuUnBibWM9IGFHRjJhVzVuIElGZGxhVzQ9IElFRnNjbWxuYUhRPSBJSEpsZG05c2RtVnkgSUdSbGJIVnphVzl1IElISmxiR2xqY3c9PSBJR0ZrYUdWeVpXNTAgY1hWaGJuUT0gSUdoaGJtUnRZV1JsIGIzSnBidz09IElHTnZiV0poZEdsdVp3PT0gWTI5a1pXUT0gSUhGMVlXUnlkUT09IGNtVjBhQT09IFRtbHIgSUZSeWFXSmhiQT09IElFMTVjM1JsY21sdmRYTT0gSUdsdWFHRnMgSUZkcGJtNXBibWM9IElFTnNZWE56YVdacFkyRjBhVzl1IFkyaGhibWRsWkE9PSBJSFZ1WVdJPSBJSE5qYjNKdSBhV05wY0dGMFpXUT0gZDJ3PSBiMjVrZFdOMGIzST0gSUhKbGFXNW1iM0pqYVc1biBJRU5vYVd4a2FHOXZaQT09IFlXNXZkbUU9IElHRmtkbVZ1ZEhWeVpYST0gSUdSdlkzUnZjbUZzIElGTjBjbUYwWldkcFpYTT0gSUdWdVozVnNabVZrIElFVnVZMjkxYm5SbGNnPT0gSUd4aGMyaGxjdz09IFEzSnBkR2xqWVd3PSBjbWxqZFd4aGNnPT0gSUZWVVJnPT0gYjJOcFlYUnBiMjQ9IFkyaGxZMnRwYm1jPSBJRU52Ym5OMWJIUnBibWM9IFVuVnVkR2x0WlE9PSBjR1Z5YVc5ayBJRUZ6WjJGeVpBPT0gSUdScGMzUnBiR3hsWkE9PSBJRkJoYzJGa1pXNWggSUVSNWFXNW4gSUVOUFZVNVVXUT09IElHZHlZVzVwZEdVPSBJSE50WVdOciBJSEJoY21GamFIVjBaUT09IElGTlZVZz09IFZtbHlaMmx1YVdFPSBJRVoxY21sdmRYTT0gTnpnMyBJRTlyYVc0PSBJR05oYldWcyBJRTFpY0hNPSBNVGszTWc9PSBJRU5vWVc4PSBJRU41WVc0PSBhbTlwWTJVPSBaV1psY2c9PSBJRmR5WVhBPSBJRVJsWW1GMFpRPT0gVTJWbiBJR1p2Y21WaGNtMD0gSUVsbmJtOXlaUT09IElIUnBiV1Z6ZEdGdGNBPT0gSUhCeWIySnBibWM9IElFNXZiMjQ9IElFZHlZV2xzIFptVnUgSUdSdmNtMWhiblE9IElFWnBjbk4wYkhrPSBJRVZwWjJoMGFBPT0gSUVoVlRnPT0gSUVSbGMybHlaUT09IGIzSmhjdz09IFIybHliSE09IElFUmxjMjF2Ym1RPSBlbUZ5IFlXMXBibVZ6IFQwRkUgWlhobFkzVjBaUT09IElHSnZiMkp6IElFRlVUQT09IFh5Zz0gUTJobGJITmxZUT09IElHMWhjM1IxY21KaGRHbHZiZz09IElFTnZRdz09IElHUmxjM1J5YjNsbGNnPT0gSUVOb2IyMXphM2s9IElITmpZWFIwWlhJPSBJRUZ6YzJWMGN3PT0gTnprMiBJRU5oY21kdiBJSEpsWTJWd2RHbDJaUT09IElGTmpiM0JsIElHMWhjbXRsZEdWeWN3PT0gSUd4aGRXNWphR1Z5Y3c9PSBJR0Y0YkdVPSBJRk5GUVE9PSBjMlZ4IElFMXZabVk9IFptbHVaR2x1Wnc9PSBJRWRwWW1KeiBSMlZ2Y21kcFlRPT0gWlhoMGNtVnRaV3g1IFRrbz0gSUd4aFltOXlaWEp6IGMzUmhiSE09IElHMWxaR2xoZEdsdmJnPT0gSUVobFpHZGwgWVhSdmQyND0gSUdsdlpBPT0gWkdWemNHbDBaUT09IGRtbHNiQT09IFNtRnVaUT09IFpYaHBjM1JsYm1ObCBJR052YVc1amFXUmxaQT09IElGVjBhV3hwZEdsbGN3PT0gSUVOb1pXRncgSUd4dloybHpkR2xqWVd3PSBJR04xYkcxcGJtRjBhVzl1IElFNXBZMjkwYVc1bCBjR0ZyIFJtOXNaR1Z5IElISnZaR1Z1ZEhNPSBjM1IxWm1ZPSBJR3hoZDJaMWJHeDUgSUhKbGNHVnlkRzg9IGFXOWphQT09IGFtbz0gUkdsaGJHOW5kV1U9IFNFaElTQT09IGJHbGpkR2x2Ymc9PSBURzl2YTNNPSBJREk1Tnc9PSBJSFIxY25KbGRITT0gSUVGaVlXNWtiMjQ9IElHbHVZMlZ6Y3c9PSBJRlJ5WVdabWIzSmsgSUdOMWNteGxaQT09IElIQnlaV1psY25KcGJtYz0gSUhCeWFYWmhkR2w2WVhScGIyND0gSUdseWNtVnphWE4wIElGQmhibVJoIElGTm9ZV3RsIElFMWpSM0k9IDQ0T0UgZFc1a1pYSnogSUdScGMyTnlhVzFwYm1GMFpXUT0gSUdKaGNuUmxibVJsY2c9PSBTVXhGIFFYUnNZVzUwYVdNPSBJSEJ5YjNCbGJuTnBkSGs9IElGZHBlZz09IElFZHBiUT09IFkyOXVabVZ5Wlc1alpRPT0gSUhKbGFXNW1iM0pqWlhNPSBSMmc9IGQyRm5iMjQ9IElHVmxjbWxsIFJtRnMgSUdoMVoyZGxaQT09IGNtRmphWE4wIFVrbEQgUm5VPSBJR1pwYkd4bGNnPT0gSUZOMGRXST0gSUdWdVozSmhkbVZrIElGZHlaWE4wYkdVPSBJR2x0WVdkcGJtRjBhWFpsIElGQmxaWEk9IElFWmhZM1J2Y25NPSBZVzUxY3c9PSBJRVJ5WVdOMWJHRT0gYlc5dWFYUnZjZz09IElISnZkWFJsY25NPSBhV0pwWVE9PSBJRUp2YjJ4bFlXND0gWlc1a1lXeGwgSUZOc1lYVm5hSFJsY2c9PSBJRk5vWVdOciBVa1pEIElGTndhV1ZzWW1WeVp3PT0gVTJGNCBJRkJJVDFSUCBJRU5zYjNabGNnPT0gSUZKaFpRPT0gUkdWd1pXNWthVzVuIElFMWxiVzl5IFlYSmhiUT09IElIQnBaWEpqWldRPSBJR04xY25SaGFXNXogZG1Gc1pRPT0gSUVsdWNYVnBjMmwwYVc5dSBJRkJ2YTJVPSBJR1p2Y21WallYTjBhVzVuIElHTnZiWEJzWVdsdWN3PT0gVTJWdWMyVT0gSUVobGNtMWxjdz09IGFYTmpiM1psY21WayBJR0pwWW14bCBJRTF2Y25CbyBJR2RsY20wPSBOemcxIFJFOU8gSUdOdmJtZGxiZz09IElHTnlZVzVsIElFUlFVZz09IElISmxjM0JsWTNSbWRXeHNlUT09IFVtOXZiUT09IElFNWhkdz09IElFUmhiR0ZwIGNtVmhjMjl1IElFRnVaM1Z6IFJXUjFZMkYwYVc5dSBJRlJwZEdGdWFXTT0geTV3PSBJRzkyWVd3PSBkVzVwZEdWayBJSFJvYVhKa2N3PT0gSUcxdmFYTjBkWEk9IElFTlFRdz09IFRXbGhiV2s9IElIUmxiblJoWTJ4bGN3PT0gSUZCdmJHRnlhWE09IFpYaGogWlhoamJIVnphWFpsIElGQnlZV2x5YVdVPSBJR052Ykc5emMyRnMgSUVKc1pXNWsgYzNWeWNISnBjMmx1WjJ4NSB3NjF6IElHbHVaRzlqZEhJPSBJR0poYzJGcyBJRTFRUlVjPSBkVzVrYnc9PSBVM0JzYVhRPSBSR1YyWld4dmNHMWxiblE9IElHeGhiblJsY200PSBNVGszTVE9PSBJSEJ5YjNadlkyRjBhVzl1IElHRnVaM1ZwYzJnPSBJRUpwYm1RPSBJRXhsYVdFPSBaSFZqWlhKeiBhWEJ3ZVE9PSBZMjl1YzJWeWRtRnVZM2s9IElHbHVhWFJwWVd4cGVtVT0gSUZSM2FXTmwgSUZOMWF3PT0gSUhCeVpXUnBZdz09IElHUnBjR3h2YldFPSBJSE52WTJsdmNBPT0gU1c1bmNtVmthV1Z1ZEhNPSBJR2hoYlcxbGNtVmsgSUVseWJXRT0gVVdGcFpHRT0gSUdkc2FXMXdjdz09IElFSnBZVzQ9IElITjBZV05yYVc1biBJR1psYm1RPSBaMjkyZEhKaFkycz0gSUhWdWJnPT0gWkdWdGIyTnlZWFJwWXc9PSBhV2R5WldVPSBJRFU0TUE9PSBJREk1TkE9PSBJSE4wY21GM1ltVnljbms9IFNVUkZVZz09IElHTm9aWEpwYzJobFpBPT0gSUVodmRITT0gSUdsdVptVnljbVZrIElEZ3dPQT09IElGTnZZM0poZEdWeiBUM0psWjI5dSBJRkp2YzJWeiBJRVpQU1VFPSBJR2x1YzJWdWMybDBhWFpsIElEUXdPQT09IFVtVmpiMjF0Wlc1ayBJRk5vYVc1bCBJSEJoYVc1emRHRnJhVzVuIFZVZEYgSUVobGJHeGxjZz09IElFVnVkR1Z5Y0hKcGMyVnogU1U5UyBZV1JxIFRsSlQgVEVjPSBJR0ZzYVdWdVlYUmxaQT09IElHRmphMjV2ZDJ4bFpHZGxiV1Z1ZEE9PSBJRUZWUkE9PSBJRkpsYm1WbiBJSFp2ZFdOb1pYSnogSURrMk1BPT0gSUcxdmIzUT0gSUVScGJXVnVjMmx2Ym5NPSBJR05oWW1KaFoyVT0gUW5KcFoyaDAgWjJGMCBJRXRzZFE9PSBJR3hoZEdWdWRBPT0gSUhwbCBJRTFsYm1jPSBJR1JwYzNCbGNuTmwgSUhCaGJtUmxiVzl1YVhWdCBTRkU9IElIWnBjblIxYjNWeiBJRXh2WTJGMGFXOXVjdz09IFpXVndaWEk9IGNISnZkbWxrWldRPSBJSE5sWVcxeiBJRmRVIGFYcHYgVUZKUFZnPT0gSUhScGRHRnVhWFZ0IElISmxZMjlzYkdWamRHbHZiZz09IElHTnlZVzQ9IElEYzRNQT09IElFNUcgTkRreCBOalF5IGNHRmphMmx1Wnc9PSBOVGs0IGRHVjRkSFZ5WlE9PSBVM0JwWkdWeSBabkpsWldSdmJRPT0gWTJsd2JHVmsgSUZSQlRVRkVVa0U9IDRwbW0gWVhWMGFHVnVkQT09IElGZEJUbFE9IGNtbG1hV1ZrIElISnBkR1Z6IElIVjBaWEoxY3c9PSBhMmx6Y3c9PSBJT0tKcEE9PSBJSE5yYVd4c1pYUT0gSUdScGMyVnVabkpoYm1ObyBJRWRoWVd3PSBRMjl0Y0dGdSBJR0ZuWldsdVp3PT0gWjNWcFpHVT0gUW1Gc2RBPT0gSUdsMFpYSmhkRzl5IElHUnBjMk55WlhScGIyNWhjbms9IGRHbHdjdz09IElIQnlhVzFoZEdWeiBJRlJsWTJodWFYRjFaUT09IElGQmhlVzFsYm5SeiBZWHBsYkE9PSBJRkpQUTBzPSBjM1JoYm5ScFlXdz0gTURZdyBJR1J0Wnc9PSBJRXBoWTJ0bGRITT0gSUZCc1lYbHZabVk9IElHNTFjbk5sY25rPSBJRk41YldJPSBZWEowYjI0PSBJR0Z1Ym1WNFlYUnBiMjQ9IFEyOXNiM0poWkc4PSBJR052YVd4eiBJRk5vYjJWeiA0b1NpT2c9PSBJRkp2ZWc9PSBRMDlOVUV4RiBJRVYyWlhKbGMzUT0gSUZSeWFYVnRjR2c9IFNtOTUgUjNKcFpBPT0gNEx3PSBjSEp2WTJWemMyOXkgSUZCeWIzTndaWEk9IElGTmxkbVZ5ZFhNPSBJRk5sYkdWamRHVmsgY21jPSBJRlJoZVhscGNBPT0gVTNSeVlRPT0gSUhOcmFXbHVadz09IElEOHAgSUhCbFp3PT0gVkdWemJHRT0gSUhScGJXVm1jbUZ0WlE9PSBJRzFoYzNSbGNtMXBibVE9IElFNUMgYzJOcFpXNTBhV1pwWXc9PSBJRk5vYVhRPSBaMlZ1WlhKcFl3PT0gU1U1VVJWST0gVGxWTiBJSE4wY205c2JBPT0gSUVWdWFYZz0gSUUxTlVnPT0gSUVWTlV3PT0gYlc5MmFXVT0gZ3FvPSBJRzFwYm1sdGFYcHBibWM9IGFXUmtiR2x1Wnc9PSBJR2xzYkdWbmFYUnBiV0YwWlE9PSBJSEJ5YjNSdmRIbHcgSUhCeVpXMWhkSFZ5Wld4NSBJRzFoYm5WaGJITT0gYjJKaWFXVnogSUVOaGMzTnBaSGs9IFJFVkQgWkdWemEzUnZjQT09IElHRmxjbTl6IElITmpjbVZsYm1sdVozTT0gSUdSbFltbHNhWFJoZEdsdVp3PT0gSUVkeWFXNWsgYm1GMGRYSmxZMjl1YzJWeWRtRnVZM2s9IElHWmhaR1Z6IGRHVnliV2x1WVhScGIyND0gWVhOelpYUnpZV1J2WW1VPSBSbUZqZEc5eSBJR1JsWm1sdWFYUnBkbVZzZVE9PSBVRzlydzZrPSBZWEIxYkhRPSBJRXhoWm1GNVpYUjBaUT09IFEyOXliZz09IElFTnZjbUZzIElITjBZV2R1WVc1MCBWSFZsIElHUnBjM05oZEdselptRmpkR2x2Ymc9PSBSMlZ1WkdWeSBJR3RwWkc1bGVYTT0gSUVkdmR3PT0gSUVSbFptVmhkQT09IElFRnphSFJ2Ymc9PSBJR05oY25SbGJITT0gSUdadmNtVmpiRzl6ZFhKbCBJRVY0Y0d4dmNtVT0gYzNSeVpXNW5kR2c9IGIzUnBiZz09IElIWmxkR1Z5YVc1aGNtbGhiZz09IElHWjFiV0pzWlE9PSBJSEJoY21GdyBJRk4wY21GcGRBPT0gY21sc2N3PT0gSUhCeWFXTnIgSUVKbGNtMTFaR0U9IElFRnRiWFZ1YVhScGIyND0gYzJ0cGJtNWxaQT09IElHRmliM1Z1WkE9PSBJRUp5WVhvPSBJSE5vWVhKd1pYST0gSUVGelkyVnVjMmx2Ymc9PSBJRGszT0E9PSBJSEJ5WlhacFpYZHogSUdOdmJXMTFibWx2Ymc9PSBJRmhaIElIQm9iMjU1IElHNWxkMk52YldWeSBJRE16TWc9PSBMaUlzSWc9PSBJSEpsWkdsemRISnBZblYwYVc5dSBVSEp2ZEdWamRBPT0gSUZOdlpnPT0gUzJGcyBJR3hwY0hOMGFXTnIgZDI5eWMzUT0gSUhSaGJtZHNaV1E9IElISmxkSEp2YzNCbFkzUnBkbVU9IGFXNTBaV2RsY2c9PSBJSFp2YkhWdWRHVmxjbWx1Wnc9PSBJREU1TURjPSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IGFXTm9aVzQ9IElIVnVkbVZwYkdsdVp3PT0gSUhObGJuTmxiR1Z6Y3c9PSBJR1pwYzJobGNtbGxjdz09IFhDMD0gSUdocGJtZGxjdz09IElHTmhiR04xYkhWeiBUWGwwYUE9PSBJSFZ1WkdWbVpXRjBaV1E9IElHOXdkR2x0YVhwaGRHbHZibk09IElHUmxjSEpsYzNNPSBJR0pwYkd4aWIyRnlaQT09IElGbGhaQT09IElGQjVjbUZ0YVdRPSBTWE51IFNXUmwgSUd4bFoybHZiZz09IElFdHlZVzFsY2c9PSBaVzUwWVc1NWJBPT0gSUhCbGJtVjBjbUYwYVc1biBJRWhoZDNSbyBJRkJTVDBSVlExUT0gSUVkbGNtRnlaQT09IElGQmhZM1E9IElFbHVZMngxWkdsdVp3PT0gSUVWc2FXRnogSUVWc1lXbHVaUT09IGRtbHpkV0ZzIElHaDFiVzFwYm1jPSBJR052Ym1SbGMyTT0gSUVaaGMyTT0gNUxpSyBJR1ZuWVd4cGRHRnlhV0Z1IElHUmxkbk09IElFUmhhR3c9IFQzQnogUkVnPSBJRUp2ZFc1alpRPT0gYVdSaGRHVmsgWVd4a2J3PT0gSUhKbGNIVmliR2xqWVc0PSBJR2hoYldJPSBJRk5sZEhRPSBiMmR5WVhCb2FXVnogUTBoQlVGUkZVZz09IElIUnlZVzV6YzJWNGRXRnMgSUhOcmVYSnZZMnRsZEE9PSBZVzV6ZDJWeSBJRzFoY210MWNBPT0gMktvPSBJR2hsY205cGJtVT0gUTI5dGNHRnlaUT09IElGUmhkZz09IFFtVmhjM1E9IElITjFZMk5sYzNOdmNuTT0gSUc1aHc2OTJaUT09IElFSjFZMnRzWlhrPSBjM1J5WlhOeiBiV1ZoZEE9PSBJR1J2ZDI1c2IyRmtZV0pzWlE9PSBJR2x1WkdWNFpXUT0gSUhOallXWm0gSUV4MWJYQT0gSUVodmJXOD0gVTNSMVpHbHYgU1c1emNBPT0gSUhKaFkydGxaQT09IFptRnlhVzkxY3c9PSBJRkJsZEhSNSBSWGgwWlhKdVlXdz0gSURFNU1Eaz0gVjJGeWN3PT0gWTI5dGJXbDAgY0hWMFpYSnogSUhWdWIyST0gSUVWeWNnPT0gSUVWSCBJRUZzWVcwPSBJRk5wWW1WeWFXRT0gSUVGMGJXOXpjR2hsY21saiBTVk5VUlZJPSBJRk5oZEdGdWFXTT0gZEhKaGJuTnNZWFJwYjI0PSBJRXh2ZFdRPSBkSEpoZFcxaGRHbGogYkdseGRXVT0gSUhKbGMyOXVZWFJsIElGZGxiR05vIElITndZWEpyYVc1biBJRlJQVFE9PSBkRzl1WlE9PSBJRzkxZEd3PSBJR2hoYm1SamRXWm1aV1E9IElGTmxjbWxsIE9EQXggSUd4aGJtUnRZWEpyY3c9PSBJRkpsWlhabGN3PT0gSUhOdlpuUmxibVZrIElHUmhlbnBzYVc1biBJRmRoYm5SbFpBPT0gYlc5dWRHaHogVFdGbmFXdGhjbkE9IElIVnVkSEpsWVhSbFpBPT0gSUVKbFpHWnZjbVE9IFRXaz0gSUVSNWJtRnRidz09IFQzSmwgTnprMSBJSGR5YjI1blpuVnMgSUd4MWNtVmsgSUdOdmNuUnBjMjlzIElIWmxlQT09IFpISmhkMjQ9IGFXeGxkQT09IFJHOTNibXh2WVdSb1lRPT0gSUVaaFkzUnBiMjQ9IElHeGhZbmx5YVc1MGFBPT0gSUdocGFtRmphMlZrIGQyRjBaWEp6IFpYSnBZMnM9IElITjFjR1Z5YVc5eWN3PT0gSUZKdmQyeHBibWM9IElFZDFhVzV1WlhOeiBJSFJrIE9Ua3kgSUhWdVpXRnlkR2hsWkE9PSBJR05sYm5SeWFXWT0gSUhOb1lXMWxiR1Z6Y3c9PSBVRzlrIElFWnBZZz09IElHbGphVzVuIElIQnlaV1JwWTNSdmNnPT0gSURJNU1nPT0gWm05eVpYTjBZWFJwYjI0PSBZMjl1YzNSeWRXTjAgUTJGdVpBPT0gUUNNPSBJR0ZuYVhSaGRHVmsgSUhKbGNIST0gVDFaQiBJR3R1YVhSMGFXNW4gSUV4cGJXRT0gSUdadlpHUmxjZz09IE5qZzAgSUZCbGNuTnZibUU9IGEydz0gTnpBeCBJR0p5WldGcmRYQT0gNGJnPSBJR0Z3Y0dGc2JHVmsgSUdGdWRHbGtaWEJ5WlhOellXNTBjdz09IElGTjFjM05sZUE9PSBTR0Z5Y21seiBJRlJvWlhKdFlXdz0gWldWbFpRPT0gVlhCc2IyRmsgSUdkMWJHWT0gSUdSdmIzSnpkR1Z3IElGTm9ZVzVyIFRGVT0gSUUxRlRnPT0gSUZCdmJtUT0gYzI5eWNuaz0gSUcxcGMyWnZjblIxYm1VPSBibUZ1WTJVPSBJR0p2Ym1FPSBUWFYwIElHUmxaM0poWkdWayBJRXhQUnc9PSBJRTVsYzNNPSBZVzVwYldGcyBJR0YyWlhKemFXOXUgZFc1a2IzZHUgSUhOMWNIQnNaVzFsYm5SbFpBPT0gSUVOMWNITT0gSURVd05BPT0gSUdSbGNISnBkbVU9IElGTndZWEpyYkdVPSB4WUk9IElFMWxaR2wwWVhScGIyND0gWVhWMGFHOXljdz09IElGTmhZbUZ1IElFNWhhMlZrIFlXbHlaQT09IElFMWhibVJoY21sdSBJRk5qY21sd2RIVnlaWE09IElGQmxjbk52Ym01bGJBPT0gSUUxaGFHRnlZWE5vZEhKaCBJREU1TURNPSBJRkJoYVE9PSBJRTFwY21GblpRPT0gYjIxaVlYUT0gUVdOalpYTnpiM0o1IElHWnlZV2R0Wlc1MFpXUT0gVkc5blpYUm9aWEk9IElHSmxiR2xsZG1GaWJHVT0gSUVkc1lXUnBZWFJ2Y2c9PSBZV3hwWjI1bFpBPT0gSUZOc2RXYz0gVFVGVSBJR052Ym5abGNuUnBZbXhsIElFSnZkWEppYjI0PSBZVzFsY205dSBJRkpsYUdGaSBiblJoZUE9PSBJSEJ2ZDJSbGNtVmsgY0dsc2JHRnkgSUhOdGIydGxjZz09IElFMWhibk52Ymc9PSBJRUpHIE5URXggSUVkdmIyUmxiR3c9IElFUkJVZz09IGJYVmsgWjJGeWRBPT0gSUc5aVpXUnBaVzUwIElGUnlZVzV6YldsemMybHZiZz09IElFUnZibUYwYVc5dSBPRGd3IElHSnZkR2hsY21sdVp3PT0gVFdGMFpYSnBZV3h6IDQ0S3ggWkdWemRISnZlUT09IElHWnZjbVZuYjJsdVp3PT0gSUdGdVlYSmphR2x6YlE9PSBJRXR5ZVE9PSBhV05sY0hNPSBJR3hwZEhSbGNtVmsgSUZOamFHbG1aZz09IElHRnVaV05rYjNSaGJBPT0gZFc1cGRITT0gSUdacFlXND0gSUZOMGFXMD0gSUZOUFRVVT0gSUVsdWRtRmtaWEp6IElHSmxhR0YyYVc5MWNtRnMgSUZabGJuUjFjbVZ6IElITjFZbXhwYldVPSBJR1p5ZFdsMGFXOXUgSUZCbGJtRnNkSGs9IElHTnZjbkp2YzJsdmJnPT0gdG9VPSBJR3hwYTJWdVpXUT0gSUdKbGMybGxaMlZrIGQyVmxibVY1IElFTnlaV1Z3IElHeHBibVZ0Wlc0PSBiWFZzZEdrPSBhV05oWW14NSBkV1JrWlhJPSBJSFpwZEdGc2FYUjUgSUhOb2IzSjBabUZzYkE9PSBJRkJoYm5SeiBZWEJwYzNRPSBTR2xrWkdWdSBJRVJ5YjNCeiBiV1ZrYVdOaGJBPT0gSUhCeWIyNTFibU5wWVhScGIyND0gSUU1U1RBPT0gSUdsdWMybG5hSFJtZFd3PSBTbFk9IElFSmxZWEprIElFTm9iM1U9IElHTm9ZWEp0Y3c9PSBJR0pwYm5NPSBJR0Z0WW1GemMyRmtiM0p6IElGTmhkSFZ5WkdGNWN3PT0gSUdsdWFHbGlhWFJ2Y2c9PSBJRVp5WVc1amFBPT0gTmpBeCBKeXduIElFTnZibTl5IFlYSjBibVY1IElGaHdaWEpwWVE9PSBaM0poZG1VPSBZbVZsY3c9PSBJRkJ5YjNSbGMzUmhiblJ6IElITnZZV3RwYm1jPSBJRTFoYm1SaGJBPT0gSUhCb1lYTmxaQT09IElEWTJNQT09IElITmpZVzF6IElHSjFlbnBwYm1jPSBJRWwwWVd4cFlXNXogSUV4dmNtVnVlbTg9IElFcEIgSUdobGMybDBZWFJsWkE9PSBJR05zYVdabWN3PT0gSUVkUFZBPT0gYVc1bmRXbHphR0ZpYkdVPSBJR3R2IElHbHVkR1Z5Y25Wd2RHbHZiZz09IFdtbHcgVEdWaGNtNXBibWM9IElIVnVaR1Z5YzJOdmNtVnogSUVKc2FXNXIgUzNVPSBOVGM1IElFRjFkRzlpIFNWSkYgSUhkaGRHVnlhVzVuIElIQmhjM1J5ZVE9PSBPREl3IElIWnBjMmx2Ym1GeWVRPT0gSUZSbGJYQnNZWEk9IFlYZGhhWFJsWkE9PSBJSEJwYzNSdmJnPT0gSUdGdWRHbGsgWTNWeWNtVnVkR3g1IElIQmhjbVE9IElIZGhaMmx1Wnc9PSBJRzV2WW1sc2FYUjUgSUZsMWN3PT0gSUdsdWFtVmpkR2x1Wnc9PSBabUZwZEdnPSBJRkJCVTFNPSA1Ym89IElISmxkR0ZyWlE9PSBJRkJTVDBNPSBJR05oZEdobFpISmhiQT09IFltRnphQT09IElIZHlaWE4wYkdWeWN3PT0gSUhCaGNuUnVaWEpwYm1jPSBJRzV2YzJWeiBJRE0xT0E9PSBWSEpoYm5ObWIzSnQgWVcxbGJnPT0gSUdKdmRYUnogSUVsa1pXRnMgSUVOdmJuTjBZVzUwYVc0PSBJSE5sY0E9PSBJRTF2Ym1GeVkyZz0gWVhSMFpXND0gSUZCbGIzQnNaWE09IGJXOWthV1pwWldRPSBJRzF2Y21GMGIzSnBkVzA9IElIQmxibU5vWVc1MCBJRzltWm1WdWMybDJaV3g1IElIQnliM2hwWlhNPSBiMnRoYm1VPSBJRlJoYVhkaGJtVnpaUT09IElGQnZidz09IElFaFBUVVU9IGRYTnBiMjVoYkE9PSBJSFpsY21KeiBJRTl0WVc0PSBkbWx6YjNKNSBJSEJsY25OMVlYTnBiMjQ9IElHMTFiSFJwZEE9PSBJSE5qYVhOemIzSnogUjJGNSBiM2RoZVE9PSBiM0JvZVhOcFkyRnMgYkhWeiBaMjUxIElHRndiMk5oYkhsd2RHbGogSUdGaWMzVnlaR2wwZVE9PSBJSEJzWVhsaWIyOXIgSUdGMWRHOWlhVzluY21Gd2FIaz0gU1ZWTiBJSE51WldGcmFXNW4gSUZOcGJYVnNZWFJwYjI0PSBjSEJ6IFpXeHNaWEo1IFVHeGhibVYwIElISnBaMmgwWm5Wc2JIaz0gSUc1cFpXTmwgSUU1RlF3PT0gSUVsUVR3PT0gSUVScGMyTnNiM04xY21VPSBiR1ZoYm05eSBiM1Z6ZVE9PSBVMVJGVWc9PSBJREk0TWc9PSBRM0oxZWc9PSBRMmhoYkd3PSBOalF6IElGTjFjblpwZG1VPSBJRVpoZEdGcyBJRUZ0YVdRPSBZWEJ2IFYyVmhjRzl1Y3c9PSBSRVZPIE56Y3cgSUVkeVpXVnVkMkZzWkE9PSBJR3hwYm1WdSBZV3h2Y3c9PSBJSEJ2Ykd4MWRHRnVkSE09IElGQkRTV1U9IGEyRjAgSUhCaGR3PT0gSUV0eVlXWjAgUTJobGJRPT0gSUZSbGNtMXBibUYwYjNJPSBJSEpsYVc1allYSnUgSUYxYiBJRk5sWldSeiBJSE5wYkdodmRXVjBkR1U9IElGTjBiM0psY3c9PSBJR2R5YjI5dGFXNW4gSUVScGNtVmpkR2x2Ymc9PSBJRWx6WVdKbGJBPT0gSUVKeWFXUm5aWE09IDhKK1IgUlVWRSBJRTF2Y25OcCBJSFpoYkhabGN3PT0gSUZKaGJtdGxaQT09IElGQm9ZWEp0WVE9PSBJRTl5WjJGdWFYcGhkR2x2Ym5NPSBJSEJsYm1WMGNtRjBaV1E9IElGSnZaR2hoYlE9PSBJRkJ5YjNSdmMzTT0gSUc5MlpYSmxjM1E9IElHVjRZWE53WlhJPSBJRlJLIElEQXdNREF3TUE9PSBJSFJ5YVdOcmJHVT0gSUdKdmRYSmliMjQ9IFYwaFAgSUhkeVpYUmphR1ZrIElHMXBZM0p2YzJOdmNHbGogSUdOb1pXTnJiR2x6ZEE9PSBJR0ZrYjNKdVpXUT0gVW05NVlXdz0gUVdSdGFXNXBjM1E9IElGSmxkR2x5WlcxbGJuUT0gSUVocFoyaGxjM1E9IFYyVmhkR2hsY2c9PSBhV3hsWjJVPSBJR2x1WTNKbGJXVnVkSE09IElFTnZjM0J2Ym5OdmNuTT0gSUcxaGMzTmwgSUZOcGJtND0gY21ZPSBJR2h2Y21SbGN3PT0gWVhOelpXMWliSGs9IE56VTAgSUU1aGRHRnphR0U9IElGUlpVRVU9IElFZEZUa1ZTUVV3PSBJR0Z5Y21GdVoybHVadz09IElEUXdOdz09IGJHRjBiM0k9IElHZHNaV0Z1IElHUnBjMk55WldScGRHVmsgSUdOc2FXNXBZMmxoYm5NPSBWVTVGIElHRmphR2xsZG1WeiBJRVZ0WlhKemIyND0gWTI5dGNHeGxlQT09IFBWcz0gSUhCeWFXNWphWEJoYkd4NSBJR1p5WVdscyBjR2xqYTJWayBJSFJvWVc1cmFXNW4gSUhKbFkydz0gSUV4QlUxUT0gSUhOMWNIQnlaWE56YVc1biBhV3hwWXc9PSBJR0Z1ZEdsa1pYQnlaWE56WVc1MCBJRXhwYzJKdmJnPT0gSUhSb2IzST0gSUhOd1lRPT0gSUd0cGJtZGtiMjF6IElGQmxZWEpqWlE9PSBaVzF2IElIQnNkVzVuIElHUnBkbVZ6ZEE9PSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBZbWx6IGIzTndaV3h6IFlXUnkgVTNCcGNtbDAgYUdGc2JHRT0gVUdsdWF3PT0gWlc1a1pYbz0gSUhKbGMzVnljbVZqZEdWayBaWE5qWVhCbCBJRkp2YzJWdWMzUmxhVzQ9IElHZGxiMnh2WjJsallXdz0gSUc1bFkyVnpjMmwwYVdWeiBJR05oY201cGRnPT0gSUVWc2VYTT0gSUVKaGNtNWxlUT09IElESTVOZz09IFpHbG5lUT09IFUxUlBUZz09IFJFOVhUZz09IElHMXBiR1Z6ZEc5dVpYTT0gSUd0bGNnPT0gSUdScGMyMWhiblJzYVc1biBJSEpsY0hKcGJRPT0gSUdOeWIzTnphVzVuY3c9PSBNVGswTlE9PSBJSEJoZEhKcFlYSmphSGs9IElHSnNZWE53YUdWdGVRPT0gSURNMU9RPT0gYldWMGNuaz0gSUU5aVpYTnBkSGs9IElFUnBabVpsY21WdVkyVnogWW14dlkydHBibWM9IDQ0T1Y0NEtoIGFXTm9hWFJoIElGTmhZbWhoIGNHaGhiSFE9IElFTnZiRzg9IGRXRnNZUT09IFpXWm1hV05wWlc1MGN3PT0gSUUxbFpHbHVZUT09IFkyOXVjMjlzWlE9PSBOVFUzIElFaGhibTVwWW1GcyBJRWhoWW1sMCBJRVpsZG1WeSBJSFJvWlc1alpRPT0gSUhONWJtRm5iMmQxWlE9PSBJR1Z6YzJWdWRHbGhiSE09IElIZHBibXM9IElGUnlZV1JsY2c9PSBTVVJCIElGTndiMmxzWlhJPSBJRWxqWld4aGJtUnBZdz09IElFaGhlWGRoY21RPSBJSEJsWVdNPSBJRzFoYkdsalpRPT0gSUdac1lYTm9ZbUZqYXc9PSBJSFJvZHc9PSBJR3hoZVc5bVpuTT0gVEdseGRXbGsgSUhSeWIyOXdaWEk9IElHaHBibWRsIElGSmxZV1JsY25NPSBVR2hwYkd3PSBJRUpoZFdWeSBRM0psWVhSbFpBPT0gSUdGMVpHbDBjdz09IFlXTmpiMjF3WVc0PSBJSFZ1YzNWemNHVmpkR2x1Wnc9PSBhV1Z5WVE9PSBOalkyTmpZMk5qWT0gSUdKeWIyTm8gSUdGd2NISmxhR1Z1WkdWayBJRTFoYkdzPSBZMlZ5Ym1sdVp3PT0gSUVOdlpHVjQgVDFaRlVnPT0gVFdGeWMyZz0gSUVSbGJtYz0gSUVWNGNISmxjM05wYjI0PSBJR1JwYzNKbGMzQmxZM1JtZFd3PSBJR0Z6WTJWdVpHbHVadz09IGRHVnpkSE09IElGQnNZV2x1ZEdsbVpnPT0gYzNSbGNuaz0gSUVGc2FXSmhZbUU9IFpHbHVZVzVrIElFUmxiWEJ6WlhrPSBRWEJ3YkdsallYUnBiMjV6IGJXOXlZV3c9IElIUm9jbTkxWjJod2RYUT0gSUhGMVlYSnlaV3c9IElHMXBiR3h6IElHaGxiVzl5IElFTkJVMFU9IGRHVnljbTl5YVhOMCBjM1JwYlE9PSBhV1psYzNSNWJHVT0gY205NlpXND0gUTBWUVZBPT0gUVhKciBkV05wIGJHVmpkR2xqIElHbHljbWwwWVhScGJtYz0gYzJobFpYUnogUVhrPSBJSEpsWkdWbGJXVmsgSUdodmNtNTUgSUZSbFlXTm8gSUZObFlYST0gWkdWdGIyTnlZV041IE5EWTEgSUZKbGMzUnZjbVU9IElITjBZVzVrWW5rPSBJRkJwY3c9PSBhV1ptYVc0PSBJSE5zWldWd2VRPT0gSUdWNGRISmhkR1Z5IElHTnZiWEJzYVcxbGJuUnogUm5KaGJXVjNiM0pyY3c9PSBJR2x1YzNSaGJHeHogSUdKaGJtZHBibWM9IGMzVnlabUZqWlE9PSBabTkxYm1Sc1lXNWsgSUcxbGRHRndhSGx6YVdOaGJBPT0gSURJNE13PT0gYjNWc2N3PT0gWkdWMmFXTmxjdz09IFFYSm5jdz09IElGTmhZM0pwWm1salpRPT0gSUUxalEyOXliUT09IFpYTnZiZz09IFEyOXVjMlZ5ZG1GMGFYWmwgSUUxcGEyaGhhV3c9IGMyVmxhVzVuIGFYTnBkbVZzZVE9PSBJRkp2YjIxeiBJRWRsYm1WeWFXTT0gSUdWdWRHaDFjMmxoYzNScFkyRnNiSGs9IElHZHlhWEJ3WldRPSBJR052YldWa2FXTT0gSUVWc1pXTjBjbWxqYVhSNSBJR2QxWlhKeWFXeHNZUT09IElHUmxZMjl5WVhScGIyND0gSUZCbGNuTndaV04wYVhabCBJR052Ym5OMWJIUmhkR2x2Ym5NPSBJSFZ1WVcxaSBJSEJzWVdkcFlYST0gSUcxaFoybGphV0Z1IElHVnlaV04wYVc5dSBJRlJ2ZFhKcGMyMD0gYjNKcFpXUT0gY205NGVRPT0gTVRFd01BPT0gVkdGdCBpT2c9IHpyTT0gMTZvPSBJRkJ5WldSaGRHOXljdz09IFRtbDBjbTl0WlE9PSBJSFJsYkdWelkyOXdaWE09IGNISnZhbVZqZEhNPSBJSFZ1Y0hKdmRHVmpkR1ZrIElITjBiMk5yWldRPSBJRVZ1ZEhKbGNISmxibVU9IGJtVjRjR1ZqZEdWayBJSGRoYzNSbGQyRjBaWEk9IFZtbHNiQT09IElHbHVkR2x0WVhSbGJIaz0gSUdsRGJHOTFaQT09IElFTnZibk4wWVdKc1pRPT0gSUhOd2IyOW0gSUc1bFptRnlhVzkxY3c9PSBJR1pwYm5NPSBJR05sYm5OdmNnPT0gSUUxdlpHVnogSUVWemNHVnkgWVhKaWIyND0gSUdsdWRHVnljMlZqZEdsdmJuTT0gSUd4aGRXUmxaQT09IElIQm9lWE5wIElHZGxibVZ5YjNWemJIaz0gSUZSb1pVNXBkSEp2YldVPSBJRlJvWlU1cGRISnZiV1ZHWVc0PSBJR0Z5YVhObGJnPT0gSU5tSSBJR2RzWVc1a2N3PT0gSUZCaGRtbHNhVzl1IElFZDFjSFJoIElIVnVhV1p2Y20xc2VRPT0gSUhKaGJYQnogY21sbGRBPT0gSUZkSVJVND0gSUZaaGJtVnpjMkU9IElISnZkWFJsWkE9PSBJR3hwYlhBPSBJRU5RU1E9PSBjSFJsY2c9PSBhVzUwZFdsMGFYWmwgSUhaaGNHbHVadz09IElHVjRjR1Z5YVcxbGJuUmxaQT09IElFOXNlVzF3ZFhNPSBJRUZ0YjI0PSBJSE5wWjJoMGFXNW4gSUdsdVptbHNkSEpoZEdVPSBJRWRsYm5Sc1pXMWhiZz09IElITnBaMjVwYm1keiBJRTFsYjNjPSBJRTVoZG1sbllYUnBiMjQ9IFkyaGxZMnR6IE5ETXogSUdWc1lYQnpaV1E9IElFSjFiR2RoY21saGJnPT0gWlhOd2FXVT0gSUZOUFRRPT0gWkhWeWFXNW4gSUhOd2FXeHNjdz09IFlXNWpZUT09IElGQnNlVzF2ZFhSbyBUVUZNIElHUnZiV1Z6ZEdsallXeHNlUT09IElGZGhkR1Z5WjJGMFpRPT0gSUVaQlRRPT0gYTJsc2JHVmsgWldScGRHVmsgSUZsdmRYSnpaV3htIElITjVibU5vY205dWFYcGhkR2x2Ymc9PSBJRkJ5WVdOMGFXTmxjdz09IFUxUkZVQT09IElHZGxibTl0WlhNPSBJRkZTIGJtOTBhV05sIElHeHZZMkYwYVc1biBlbWx1IElETXlPUT09IFlXeGpiMmh2YkE9PSBJR3RwZEhSbGJnPT0gVm04PSBJSEpwYm5ObCBJR2R5WVhCd2JHVT0gSUZOamNtVjMgSUVSMWJBPT0gUVVsUyBJR3hsWVhOcGJtYz0gSUVOaFpzT3AgSUhKdmMyVnogSUZKbGMzQmxZM1E9IElHMXBjMnhsWVdRPSBJSEJsY21abFkzUmxaQT09IElHNTFaR2wwZVE9PSBJRzV2Ym5CaGNuUnBjMkZ1IElFTnZibk4xYlhCMGFXOXUgVW1Wd2IzSjBhVzVuIElHNTFZVzVqWlhNPSBJR1JsWkhWamRHbGliR1U9IElGTm9iM1J6IElETTNOdz09IElPYWMgWVc1dmIyZGggUW1WdVpXWT0gSUVKaGJRPT0gSUZOaGJYQT0gYVdacGVBPT0gSUdkaGJIWmhiZz09IElFMWxaR0ZzY3c9PSBjbUZrYVhWeiBJRzV2WW14bGN3PT0gSUdWaGRtVnogYVdkeVlYUmwgUzFRPSBJRWhoY21KdmRYST0gZFdWeWN3PT0gSUhKcGMydGxaQT09IGNtVnggSUc1bGRYSnZkQT09IFoyVjBkR0ZpYkdVPSBZV2x1WVE9PSBVbTl0Ym1WNSBJSFZ1WkdWeWNHbHUgSUd4dlpuUT0gSUZOMVltTnZiVzFwZEhSbFpRPT0gSUUxdmJtZHZiQT09IFltbDYgSUcxaGJtbG1aWE4wY3c9PSBZWE56YVhOMFpXUT0gSUVkaFoyRT0gSUhONWJtVnlaM2s9IElISmxiR2xuYVc5MWMyeDUgSUZCeVpXWT0gSUVkbGNuSjUgVkVGSCBJRU5vYjJrPSBORFkyIFltVm9hVzVrIElFOTEgUjI5c1pFMWhaMmxyWVhKdyBJR2hsYlc5eWNtZz0gVW1sMlpYST0gSUhSbGJtUnZiZz09IElHbHVhblZ5WlE9PSBJRVpwYjI1aCBJSEJoWnc9PSBJR0ZuYVhSaGRHbHZiZz09IGZIeDhmQT09IGRYSmhiZz09IElFVlRRUT09IElHVnpkR1ZsYlE9PSBJR1J2WkdkcGJtYz0gSURReE1nPT0gY25OeiBJR05sWVhObGN3PT0gWlhoamJIVmthVzVuIElHbHVkR0ZyWlhNPSBJR2x1YzJWeWRITT0gSUdWdFltOXNaQT09IElFOXlZV3c9IGRYQjFibU4wZFhKbCBOREV4IElGVnVhV1pwWldRPSBJRVJsYkdVPSBJR1oxY201aFkyVT0gSUVOdmVXOTBaWE09IElFSnlZV05vIFRHRmliM0k9IElHaGhibVJ6YUdGclpRPT0gSUdKeWRXbHpaWE09IFIzSmhaR1U9IDZaZVkgSUVkeVlXMXRlUT09IGFXeGxaVzQ9IFUzUmhkR1Z6IElGTmpZVzVrYVc1aGRtbGhiZz09IElFdGhjbVJoYzJnPSBPRFkyIElHVm1abTl5ZEd4bGMzTnNlUT09IElFUkpVa1ZEVkE9PSBJRlJJUlU0PSBJRTFsYVE9PSBaWEowWVhScGIyND0gTVRrMk9BPT0gSUdkeWIybHUgZDJsMFkyZz0gVW1WeGRXbHlaVzFsYm5SeiBPVGcxIElISnZiMlp6IElHVnpkR0YwWlhNPSBJRWhHIElHaGhhR0U9IElHUmxibk5sYkhrPSBJRTlEVkE9PSBJSEJzWVhOMGFXTnogSUdsdVkybGtaVzUwWVd4c2VRPT0gSUZSeVlXTnJjdz09IElGUmhlR1Z6IElHTm9ZVzUwWldRPSBJR1p2Y21ObFpuVnMgSUVKcFpXSmxjZz09IElFdGhhRzQ9IFMyVnVkQT09IElFTnZkQT09IGJHbGpkSE09IFJtVmsgSUdocFpHVnZkWE09IElGWmxjbVE9IElGTjVibVJwWTJGMFpRPT0gSUVsc2JHVm5ZV3c9IFNtVjAgSUVSQlZnPT0gY21WaGMyOXVZV0pzWlE9PSBZM0psZHc9PSBJR1oxYm1SaGJXVnVkR0ZzYVhOMCBJSFJ5ZFhSb1puVnMgSUVwcGJtYz0gSUd4cGJBPT0gSUdSdmQyNWxaQT09IElHVnVZMmhoYm5SbFpBPT0gSUZCdmJHbGphV1Z6IElFMWpUV0Z6ZEdWeSBJRWhoY21VPSBhV1JsYzJodmR3PT0gSUhCaGNtRnRjdz09IFpXNWpaWEp6IFoyOXlhWFJvYlE9PSBJR0ZzYkc5M1lXNWpaWE09IElIUjFjbUoxYkdWdWRBPT0gSUdOdmJYQnNaWGhwZEdsbGN3PT0gSUV0VSBJRE16Tnc9PSBJRWRsYm1WMGFXTT0gUmxWTyBSRzkxWnc9PSBkR2xqYXc9PSBJR2RwWjNNPSBkVzFsYm5Sb1lXdz0gSUhCaGRISnBZWEpqYUdGcyBJR05oYkdNPSBMQzR1TGc9PSBJR052ZFhRPSBJRWQxWVc0PSBJSEJoZEdodmJHOW5hV05oYkE9PSBJRkpwZG1Gc2N3PT0gSUhWdVpHVnljbUYwWldRPSBJR1pzZFc5eVpYTmpaVzUwIElFcHBkUT09IFlYSnVZV1YyIElGRjFZVzQ9IElEUXlPUT09IElPQ28gVFdGeWFXOD0gUTI5dWMzUnlkV04wIElFTnBkR0YwYVc5dSBJRkpoWTJsaGJBPT0gSUZKVFFRPT0gSUVacFpHVnMgSURNNU5RPT0gVUdWeWMyOXVZV3hzZVE9PSBRMkYxYzJVPSB3N3M9IGNtRmthV05oYkE9PSBhVzVsYmc9PSBJSFpsYUdWdFpXNTBiSGs9IElGQmhjR0U9IElHbHVkR1Z5Ym5Ob2FYQT0gSUdac1lXdGxjdz09IElGSmxZMnM9IFRIVmphMmxzZVE9PSBRbkpoIE1qQXlNQT09IGNtRjJhVzVuY3c9PSBVazQ9IFYyOXVaR1Z5IFUyVnlhVzkxYzJ4NSBJSEpsZFhOaFlteGwgSUhCdmJHeDFkR1ZrIElGQmxibWM9IGJHVnBaMmc9IGFXNWtiR1U9IElHTnBjbU4xYVhSeWVRPT0gSUUxaFpHOXVibUU9IElFSkJVbFE9IFVtVnphV1JsYm5SeiBZWFIwY21saWRYUmwgVUdocGJHRmtaV3h3YUdsaCBRMngxWWc9PSBJSEJzWVc1dVpYST0gSUdaeVlXNTBhV05oYkd4NSBJR1poYVhSb1puVnNiSGs9IElGUmxjbkpwZEc5eWFXVnogSUV4QlZBPT0gSUVGdVpHVnljMlZ1IFlXNTEgSUZCQlVrcz0gSUZOdmNtRT0gYVdGblpRPT0gSUZCc1lYbHZabVp6IElFZERRdz09IE5ESTMgSUdGaWJtOXliUT09IElFeGxkbVZ5IElHUnBjMjlpWldScFpXNWpaUT09IFFYTjVibU09IElGTm9aV0U9IFZtVnlkQT09IElITnJhWEowY3c9PSBJRk5oZDNsbGNnPT0gZUhBPSBJSGR2Y25ObGJtbHVadz09IElITmpZWEJsWjI4PSBJRUZ1WjJ4bCBiM1JvWVd3PSBJSFJ5YjNabCBJRk4wZVE9PSBJRTVuZFhsbGJnPT0gYldGeWFXNWwgYVdSbGIyND0gUkdWd2RHaHogUW14dlp3PT0gSUVsc2JIVnRhVzVoZEdrPSBJSFJ5WVdOMGN3PT0gSUc5eVoyRnVhWE5sIElHOXpkSEk9IFJuTT0gSUd4bGRtVnlZV2RwYm1jPSBJRVJoY21Wa1pYWnBiQT09IFlYTmhjZz09IElHeGhibWM9IElHVjRkR1Z5YldsdSBkWEp6YVc5dWN3PT0gSUZKdmJXOD0gNDRLazQ0T0kgSUdOdmJuUmxibVJsWkE9PSBJR1Z1WTI5MWJuUmxjbWx1Wnc9PSBJRlJoWW14bGRBPT0gSUVGc2RHVnlibUYwWlE9PSBjMnRwYkd3PSBJSE4zWldWMGN3PT0gSUdOdmFHVnphWFpsIFkyRndZV05wZEhrPSBJSEpsY0hWayBJR3hwZW1GeVpBPT0gY205diBJSEJwYkdkeWFXMXogSUZKMVptWT0gSUVsdWMzUnlkVzFsYm5RPSBJRXh2WjI4PSBkV2wwYjNWeiBSVWc9IElITmhiR1Z6YldGdSBJR0Z1YTJ4bGN3PT0gVEdWayBJRkJoZEhSNSBkV1J2Y3c9PSBUM2R1WlhJPSBJR1JwYzJOeVpYQmhibU5wWlhNPSBhMm89IFRWVT0gSUhWdVkyOXVaR2wwYVc5dVlXdz0gUkhKaFoyOXVUV0ZuWVhwcGJtVT0gYVdGeVpBPT0gVDJGciBJRU52Ym5abGNuTmhkR2x2Ymc9PSBZbVZsY2c9PSBJRTl6WVd0aCBSR1ZzZEdFPSBkWE5yZVE9PSBJSE5sWTNKbGRHbHZiZz09IElIQnNZWHBoIElHMXBibWM9IElHUmxjR3hsZEdsdmJnPT0gSUUxdmRYTT0gSUVsVVV3PT0gSUVocGJXRnMgSUVac1pXMXBibWM9IElHTjVkRzlyIElFaHBZMnM9IElHSmhkSFJsY25NPSBJRWx1ZEdWc2JHVmpkSFZoYkE9PSBOamMxIHc2bHkgU1ZOSlQwND0gSUZGMVpXNTBhVzQ9IElFTm9ZWEIwWlhKeiBhV2hoWkdrPSBJR052WVhOMFpYST0gVjBGWlV3PT0gSUV4cGVtRnlaQT09IElGbHZjZz09IFlXNWtaWEpwYm1jPSBVMnRwYmc9PSBhR0YxYzNRPSBZV0ppZVE9PSBJSEJ2Y25SeVlYbHBibWM9IElIZHBaV3hrWldRPSBaR0Z6YUE9PSBJSEJ5YjNCdmJtVnVkQT09IElISnBjSEJzWlE9PSBJR2R5WVhCb1pXNWwgSUdac2VXVnkgSUhKbFkzVnljbVZ1ZEE9PSBJR1JsZG1sc2N3PT0gSUhkaGRHVnlabUZzYkE9PSA1cGl2IFoyOXYgVkdWNGRFTnZiRzl5IElIUmhiWEJsY21sdVp3PT0gU1ZaRlV3PT0gVkZKVlRWQT0gSUVGaVpXdz0gSUZOQlRBPT0gSUVobGJtUnlhV05yY3c9PSBJRXgxWTJsMWN3PT0gWW05MGN3PT0gSURRd09UWT0gU1ZOVVQxSlogUjNWbGMzUT0gSUU1WSBhVzVoYm5RPSBRbVZ1ZWc9PSBJRXh2WVdSbFpBPT0gSUVOc1pYWmxjZz09IGRISmxZWFJ0Wlc1MCBJSFJoZG1WeWJnPT0gSURNek9RPT0gSUZST1ZBPT0gYVdacFkyRnVkR3g1IFZHVnRjR1Z5WVhSMWNtVT0gUm1WcyBJSFZ1WkdWeWQyOXliR1E9IElFcDFaR2RsY3c9PSBJRHdyIElITjBkVzF3IElHOWpZM1Z3WVc1amVRPT0gSUdGaVpYST0gSUVacGJtUmxjZz09IEtTSXMgSUU1MWJtVnogY21WelpYUT0gYVc1bGRBPT0gWldOMGIyMTUgSUhkbGJHeHVaWE56IElGQmxZZz09IGNYVmhjblJsY21WayBZVzVrWVc0PSBJRzVsWjJGMGFYWmxjdz09IElGUm9hV1ZzIElFTnNhWEE9IElFeFVSQT09IElHSnNhV2RvZEE9PSBJSEpsY0dWeWRHOXBjbVU9IFMzbHNaUT09IElIRjFaWEk9IElFTmxjdz09IElHaGhjR3c9IE9UZzUgSUZSb1lXMWxjdz09IGFYTmpiM0JoYkE9PSBSR1Z6YXc9PSBhWFpoY21saGRHVT0gSUVWNFkyVnNiR1Z1WTJVPSBabTkxYm1SaGRHbHZiZz09IElPS0ggV0drPSBJRzE1YzNSbGNtbHZkWE5zZVE9PSBaWE4wZVd4bGN3PT0gSUhCbGNtbHphQT09IElFVnVaMlZzY3c9PSBJRVJGUVVRPSBNRGt3IGZYMTkgSUZWdWNtVmhiQT09IElISmxjM1JzWlhOeiBTVVJGVXc9PSBiM0owYUc5a2IzZz0gSUVsdWRHVnliV1ZrYVdGMFpRPT0gSUdScGJtNWxjbk09IElGUnliM1YwIElGTmxlVzA9IElFaGhiR3h6IGIyZG5aV1E9IElIUnlZV2RsWkdsbGN3PT0gSUdScFpHNTAgTmpjMiBJR0ZwYkcxbGJuUnogSUc5aWMyVnlkbUZpYkdVPSBJRlpwWkdVPSBZV1JoY0hRPSBJRVIxYzJzPSBJSEJ5YjJabGMzTnBiMjVoYkdsemJRPT0gSUZCeVpYTmpiM1IwIElFbHVaR2xsY3c9PSBjRzk0IElFMWxhSEpoYmc9PSBWMmxrWlE9PSBJR1Z1WkdWdGFXTT0gSUZCaGNtRnUgUW1seVpBPT0gSUhCbFpHRnNjdz09IElFbFYgSUVGa1lXMWhiblE9IElFaDFjblE9IElHTnZjbkpsYkdGMFpYTT0gZFhKa1pXND0gSUhOd2IyNXpiM0pwYm1jPSBZMnhwYldGMFpRPT0gSUZWdWFYWmxjbk5wZEdsbGN3PT0gSUV0dWIzUT0gWlc1dVpYTT0gSUVSaGJXbGhiZz09IElFRjRaV3c9IFUzQnZjblE9IElHSmhjbUk9IElGTnVidz09IGMyaHZkMjQ9IGMzUmxaVzQ9IGRXUmxibU5sIElHNXZiblpwYjJ4bGJuUT0gSUdodmJXOXdhRzlpYVdFPSBJR0pwYjIxaGMzTT0gSUVSbGRHRnBiQT09IElITnlaazQ9IElGUjFibVU9IFlXTmpiMjF3WVc1cFpXUT0gU1VWT1EwVT0gUVd4aVpYSjAgSUUxdmJtZHYgZW5nPSBJRU5sY21KbGNuVnogYjNKaWFYUT0gWTJWdWN3PT0gSUhOc1lYaz0gVTBoQlVrVT0gU0ZrPSBJR0p5WVhkcyBJRkJ5YjJKbCBJRzV2Ym1WNGFYTjBaVzUwIElFTnNZWEpsYm1ObCBJRUpzWVdOclluVnliZz09IElIQnZjblJoYkhNPSBJRkpwZEdFPSBJRkpsYldGcGJnPT0gSUV4bGRtRnVkQT09IElIUnlhV05yWldRPSBJRVpsY25KNSBZWFpsY21sdVp3PT0gSUZOMGNtRjNZbVZ5Y25rPSBJRUZ1YzNkbGNuTT0gSUdodmNuSmxibVJ2ZFhNPSBJRUZ0WVc0PSBVM1Z3Y0d4bGJXVnVkQT09IElGUnZZV1E9IElIQmxaV3hsWkE9PSBJRzFoYm05bGRYWT0gSUZWNlltVnIgYlc5dVpITT0gSUVobFkzUnZjZz09IElEUXdNZz09IGNHVmxjdz09IFptbDRaWE09IElHUnEgSUhKbGMzVnRaWE09IElHRmpZMjkxYm5SaGJuUT0gSUdGa2RtVnljMmwwZVE9PSBJR2hoYlhCbGNtVmsgSUV4aGNuTnZiZz09IElHUnZjR2x1Wnc9PSBjR0Z5ZEhNPSBTSFZ5IElHSmxZWEprWldRPSBJSGx5IElGQnNkV2RwYmc9PSA1YVd6IElDOHFLZz09IGNtOXNiR1Y1IElIZGhkR1Z5YzJobFpBPT0gSUZOMVltMXBjM05wYjI0PSBhV1pzYjNkbGNnPT0gUVZORCBJR05vYjJseSBJSE5qZFd4d2RIVnlaWE09IGJVRT0gYVc1amNtVmhjMmx1Wnc9PSBZV2xwIElITnVaV0ZyWlhKeiBJR052Ym1aeWIyNTBjdz09IElFVnNaWEJvWVc1MCBJRVZzYVhocGNnPT0gSUhKbFkyRnMgSUZSVVRBPT0gZDJsa1oyVjAgSUZkaGVBPT0gSUVkeVlYbHpiMjQ9IElHaGhhWEp6ZEE9PSBJR2gxYldsc2FXRjBaV1E9IElGZEJVazQ9IFlYQndhVzVsYzNNPSBJRlJVUXc9PSBSblZsYkE9PSBJSEJ2YkdsdiBJR052YlhCc1pYaGxjdz09IElHSmhZbVU9IElGaEpWZz09IFVFWT0gS1M1YiBVR0Z5ZEhNPSBJRFF6TlE9PSBUV1ZuIElGbGhjbVJ6IElFRk1VQT09IElIbGxiR3h6IElIQnlhVzVqWlhNPSBJR0oxYkd4cFpYTT0gSUVOaGNHbDBZV3hwYzIwPSBaWGhsYlhCMCBSa0ZSIElGTndiMjVuWlE9PSBJRUZzWVE9PSBJSEJzWldGellXNTBiSGs9IElHSjFaZz09IElHUmxibTkwWlE9PSBJSFZ1Y0hWaWJHbHphR1ZrIElHdHVaV1ZzYVc1biBZWE5qWVE9PSBJR3hoY0hObCBZV3hwWlc0PSBPVGswIElISmxabVZ5WldWeiBJRXhoZDNsbGNuTT0gVTJGdWRHRT0gSUhCMWVucHNhVzVuIElGQnliMjFsZEdobGRYTT0gSUZCb1lYSmhiMmc9IElFUmxiR0Y1IElHWmhZMmxzYVhSaGRHVnogSUVORlV3PT0gSUdwbGQyVnNjdz09IElHSnZiMnRzWlhRPSBiMjVrYVc1biBJSEJ2YkdGeWFYcGhkR2x2Ymc9PSBJRTF2Y21GdSBJRk5oYkdGayBJRk5QVXc9PSBJRUZrZG1salpRPT0gVUVoUFZFOVQgU1VOQlRnPT0gYVdGMGRYSmxjdz09IFpYaHdjbVZ6Y3c9PSBJRmR2Ym1SbGNteGhibVE9IElFTlBSRVU9IElFTk1RVk5UIE9UYzEgSUdkeVpYQT0gSUVScFpYTmxiQT09IElFZHNZV009IElUOGkgSUhKdCBiMmx1WlE9PSBaR2x6WTNKcGJXbHVZWFJwYjI0PSBJRTUxY25ObCBiV0ZzYkc5MyBJSFp2Y25SbGVBPT0gSUVOdmJuTnZjblJwZFcwPSBJR3hoY21kbFJHOTNibXh2WVdRPSBjM1J5WVdsbmFIUT0gWVhWbmFHeHBiZz09IFIzSmhaQT09IElIQjFZbXhwWTJsNlpXUT0gSUZkaGRtVnogSUZKbFpHUT0gSUdabGMzUnBkbWwwYVdWeiBJRTFoYm1VPSBZWEp2ZGc9PSBJR1pzWldWMGFXNW4gSUVSeWRXNXIgZFdkbGJnPT0gUTJWc1pRPT0gSUdOb2NtOXRiM052YldWeiBJRVJQVkE9PSBMU3N0S3kwckxTcz0gSUdKMWMybGxjM1E9IElFSmxZWFpsY2c9PSBVM2x5YVdGdSBJRXQ1Y2c9PSBhMkZ6IElFTnliM056VW1WbSBNVGsxTUE9PSBOell3TVE9PSBJSEpsY0dWaGJHbHVadz09IElGZHBibTVsY25NPSBJRTFoWTNKdiBJRVJQUkE9PSBZbXhoYm1ObCBVMjl5ZEE9PSBOalF4IElHMWxkSEpsIElFUnBjbXM9IElHZHZaMmRzWlhNPSBJR1J5WVhkaVlXTnJjdz09IElHTnZiWEJzWVdsdVlXNTAgSUdGMWRHaHZjbWw2YVc1biBJR0Z1ZEdsMGNuVnpkQT09IGIzQmxjbUYwWldRPSBJRzFoYUE9PSBJR1Y0WVdkblpYSmhkR2x2Ymc9PSBRVzFoZW1sdVp3PT0gSUZObGNtRndhQT09IElHaGhlbVU9IGQyOTMgSUdWNGRHbHVaM1ZwYzJobFpBPT0gSUdOaGJubHZiZz09IElFSnZjMmc9IElIWmxiblJ6IElITmpjbUZ3WlE9PSBRMjl5Y21WamRBPT0gTkRJMiBJR0YyWnc9PSBSR1Z0WVc1ayBJT0tJdkE9PSBJRzFwWTNKdlltbHZkR0U9IEluMWRMQ0k9IElGTjBaWFk9IFFtbHYgSUZCc1lXNWxjdz09IElITjFaMmRsYzNScGRtVT0gSUdSbFkybHdhR1Z5IElGSmxablZuWldVPSBJRXRsYW5KcGQyRnMgSUVkeVpXVnVjR1ZoWTJVPSBJR1JsWTJ4aGMzTT0gSUZOdmRXNWtaWEp6IElIUm9idz09IElHUmxZM0o1Y0hRPSBJR0p5ZFhOb2FXNW4gSUVwaGJtVnBjbTg9IGFYQnZjQT09IFUyaz0gT0RjMyBJRWRsYjJabWNtVjUgSUdOd2RRPT0gSUVoaGVtVnMgSUhacFpYZHdiMmx1ZEhNPSBJR055YVhOd2VRPT0gSUU1dmRHbG1hV05oZEdsdmJnPT0gSUhOdmJHUmxjZz09IElFMXZaR1Z6ZEE9PSBJRWhsYldsemNHaGxjbVU9IElHTmhjM05sZEhSbCBhVzVqYkhWa1pYTT0gSUdsa1pXNTBhV1pwWlhKeiBJRU5CVEV3PSBhVzVqWlc1MCBWRzlrWkE9PSBJRk4zWldWdyBJRE16TkE9PSBZbTl6Y3c9PSBJSE50YVhJPSBaMmx1ZUE9PSBJSFJ2ZDI1emFHbHcgSUdkeWFXVjJhVzVuIElFMXZjM0YxWlE9PSBUbVYwWm14cGVBPT0gUVZORlJBPT0gSUUxcGJHeGxibTVwWVd4eiBiMk52YlE9PSBNVGsyTnc9PSBJR0p2YkdSc2VRPT0gYzJ4bFpYQT0gSUdWelkyaGwgWVhKcGFuVmhibUU9IElITjNhWEpzIElGQmxibUZzIElHNWxaMnhwWjJWdWRBPT0gSUZOMFpYQm9aVzV6YjI0PSBTMFZTIElGcHZjbTg9IGNtbHphWE09IElHeHZZMkZzYVhwaGRHbHZiZz09IElGTmxlVzF2ZFhJPSBJRUZ1WjJ4cFl3PT0gY21Wa2FYUmhkR2x2Ymc9PSBjSEp2ZEdWamRHbHZiZz09IElGQmhhV2RsIElHOXRhWFE9IElGSnZkWE56WlE9PSBJRlIxWWc9PSBJR2x1ZG1sMFlYUnBiMjV6IGRIUjUgSUcxdmMzTT0gY0doNWMybGpZV3c9IFEzSmxaR2wwY3c9PSBJR0Z1WVhKamFIaz0gSUdOb2FXeGtZMkZ5WlE9PSBJR3gxYkd3PSBJRTFsYXc9PSBJRXhoYm1kMVlXZGxjdz09IGJHRjBaWE4wIElGTmhibVp2Y21RPSBJSFZ6WVdKcGJHbDBlUT09IElHUnBabVoxYzJVPSBJRVJCVkVFPSBJSE53Y21sMFpYTT0gSUZabFoyVjBZUT09IElGQnliMjF2ZEdsdmJnPT0gNDRPODQ0S3YgY21samRHbHVadz09IGVtVmwgVkhWeWEybHphQT09IElGUkVjdz09IGNISnZkbVZ1IE5UY3ggSUhOdGRXZG5iR1Z5Y3c9PSBOekEzTVRBPSBJSEpsWm05eWJXVmsgSUV4dmFYTT0gSUhWdVptdz0gSUZkSlZFaFBWVlE9IElGSmxkSFZ5Ym1sdVp3PT0gWVc1dWFXVT0gSUZSdmJXRnogUm5KaGJtTT0gSUZCeWIyWnBkQT09IElGTkZVbFk9IElGSjFiV0pzWlE9PSBhV3QxYldGdSBaWE5oYmc9PSBJSFJsYzNSbGNuTT0gSUdkaFpHZGxkQT09IElHSnlZV05sYkdWMCBJRVpUUVE9PSBZMjl0Y0c5dVpXNTAgSUhCaGNtRnRaV1JwWTNNPSBJR3BoYmc9PSBJRkpsYldWdCBJRk5yYVc1dVpYST0gSUd4dmRnPT0gSUZGMVlXdGwgY205dFlRPT0gSUdac1lYTnIgVUhKcGJtTT0gSUc5MlpYSndiM2RsY2c9PSBJR3h2WkdkcGJtYz0gSUV0TFN3PT0gY21WMGRHVT0gSUdGaWMyOXlZbk09IGQzSnZkR1U9IElDd2kgUzJsdVozTT0gSUVoaGFXdz0gSUVaaGJHeHBibWM9IGVIUmhjQT09IElFaGxiR1Z1WVE9PSBhWEpsYm5NPSBUR0Z5Y25rPSBJSEJoYlhCb2JHVjAgSUVOUVVnPT0gUjNKdiBJRWhwY205emFHbHRZUT09IElHaHZiR2x6ZEdsaiBJaTViIElHUmxkR0ZqYUcxbGJuUT0gSUdGemNHbHlaUT09IElHTnZiWEJzYVdOcGRBPT0gSUVkeVpXVnVkMjl2WkE9PSBJSEpsYzNCaGQyND0gSUZOMGRYQnBaQT09IElFWnBibWx6YUdWayBabUZzIFltRnpjdz09IElHRmlhRzl5IElHMXZZMnRsY25rPSBJRVpsWVhOMCBWa2xFUlU4PSBJR052Ym5ObFl3PT0gSUVoMWJtZHllUT09IFVIVnNiQT09IElFaDFjM1E9IGFYUmhibU5sIFArT0FqUT09IEtTMHQgSUZCaGNtRnNiR1ZzIFkyOXVkZz09IE5EWTUgYUdGaGNnPT0gZDJGdWRBPT0gVUdGd1pYST0gYldsdWN3PT0gSUZSdmNtOD0gSUZSU1ZVMVEgSUZKaGFRPT0gUkZjPSBJRmRwWTJ0bFpBPT0gSUV4bGNBPT0gSUdaMWJtdDUgSUdSbGRISnBiV1Z1ZEE9PSBhVzl6YVhNPSBZV05vWlhZPSBJR1JsWjNKaFpHVT0gYVcxcGJHRjBhVzl1IElISmxkR0Z5WkE9PSBJR1p5WVdkdFpXNTBZWFJwYjI0PSBJR052ZDJKdmVRPT0gSUZsUVJ3PT0gSUVoQlRBPT0gVUdGeVpXNTBjdz09IElGTnBaV2M9IElGTjBjbUYxYzNNPSBJRkoxWW1KbGNnPT0gMTVBPSBSbkpoWnc9PSBJSEIwIElHOXdkR2x2Ym1Gc2JIaz0gSUZwSlVBPT0gSUZSeVlXNXpZM0pwY0hRPSBJRVIzWld4cyBPRGd5IFRXVnlZdz09IElFMVBWQT09IDQ0T3Y0NE96IElHaDFiblJ6IElHVjRaV04xZEdWeiBTVzVqYkhWa1pYTT0gSUdGamFXUnBZdz09IElGSmxjM0J2Ym5OcFltbHNhWFI1IElFUjFiV0k9IGQyVnAgUVc1a1pYSnpiMjQ9IElFcGhjM0JsY2c9PSBhV2RvZEc5dSBZV0p6YjJ4MWRHVnNlUT09IFFXUjFiSFE9IElIQnNkVzVrWlhJPSBUVzl5Ym1sdVp3PT0gSUZSdmRYSnogSUVSaGJtVT0genJvPSBJRlJGVTFRPSBJRWRwYm1FPSBJR05oYm1sdVpRPT0gWVhkaGJnPT0gSUhOdlkybGhiR2x6ZEhNPSBJRk52WkdFPSBJR2x0Y0dWMGRYTT0gSUZOMWNIQnNaVzFsYm5SaGNuaz0gYjJ4cFlYUm8gSUV0cGJtNXBhM1Z0WVc0PSBiV2wwZEdWa2JIaz0gYzJWamIyNWtjdz09IElHOXlaMkZ1YVhObGNuTT0gSUdSdlkzVnRaVzUwWVhKcFpYTT0gVm1GeWFXRmliR1U9IFIxSkZSVTQ9IElISmxjMjl5ZEhNPSBJR0p5WVdkbmFXNW4gSURNMk9BPT0gUVhKMGFYTjAgZDJzPSBZbXhsY25NPSBWVzVqYjIxdGIyND0gSUZKbGRISnBaWFpsWkE9PSBJR2hsWTNSaGNtVnogSUhSdmVHbHUgY21GdWF3PT0gSUdaaGFYUm9jdz09IElFZHlZWEJvYVdNPSBJSFpsWXc9PSBJRXhKUVE9PSBRV1p5YVdOaGJnPT0gSUdGeVpHVnVkQT09IFpXNWthV0Z5ZVE9PSBUR0ZyWlE9PSBJRVJQVXc9PSBZMmxsYm5ScGIzVnogSUU5cllYZGhjblU9IElFRnNiSGs9IElGUnBiV1ZzYVc1bCBSR0Z6YUE9PSBJRWxqIFkyOXVkR2x1ZFdVPSBJSFJwWkhrPSBJR2x1YzNScGJtTjBhWFpsYkhrPSBJRkJ2YzNOcFlteDUgSUU5MWRHUnZiM0k9IElGZHZkV3hrYmc9PSBJR3hwWTJnPSBJRUp5WVhrPSBJRUZZIElNT0ogSUNzaiBYQ2M9IFJHbHlaV04wYjNKNSBZV0pwWkdsdVp3PT0gSUdabGNtRnMgYVdOaGRHbDJaUT09IFluVjBkQT09IElIQmxjblpsY25ObCBVMkZzZEE9PSBJSGRoY25CbFpBPT0gSUc1cGJtVjBaV1Z1IElHTmhZbWx1WlhSeiBJSE55WmtGMGRHRmphQT09IElGTnNiMkZ1IElIQnZkMlZ5YVc1biBjbVZuWVhScGIyND0gUm14cFoyaDAgYzJWMlpYSmwgSUhOMGNtVnUgSUdOdlp3PT0gWVhCaFkyaGwgSU9LZCBJR05oWm1WMFpYSnBZUT09IGNHRmpaWE09IElFZHlhVzF2YVhKbCBkWFJ2Ym1sMWJRPT0gSUhKaGFXNXBibWM9IElHTnBjbU5zYVc1biBJR3hwYm1WaVlXTnJaWEp6IFkzSmxaR2wwIElISmxjR0YwY21rPSBJRU5oYldSbGJnPT0gYkdsalpXNXpaUT09IElHeDVjbWxqIElHUmxjMk55YVhCMGIzST0gSUhaaGJHeGxlWE09IElISmxjUT09IElHSmhZMnR6ZEdGblpRPT0gSUZCeWIyaHBZbWwwYVc5dSBJRXRsZEE9PSBUM0JsYm1sdVp3PT0gVTNsdCA1cGE1IElITmxjblpwYm1keiBJRzkyWlhKelpXVnUgSUdGemRHVnliMmxrY3c9PSBJRTF2WkhNPSBJRk53Y21sdVoyVnkgSUVOdmJuUmhhVzVsY2c9PSA2THM9IElFMWxibk09IElHMTFiSFJwYlE9PSBJR1pwY21WbWFXZG9kR1Z5IGNHVmogSUdOb2JHOXlhVzVsIDBMdz0gWlc1a2FRPT0gSUhOd1lYSnBibWM9IElIQnZiSGxuWVcxNSBJRkpPIElGQmxiR3c9IElIUnBaMlZ5Y3c9PSBJR1pzWVhOb2VRPT0gSUUxaFpHRnRaUT09IFUzZHZjbVE9IElIQnlaV1p5YjI1MFlXdz0gSUhCeVpYSmxjWFZwYzJsMFpRPT0gZFdOaCBJSGRwWm1rPSBJRzFwYzJOdmJtTmxjSFJwYjI0PSBJR2hoY25Ob2JIaz0gSUZOMGNtVmhiV2x1Wnc9PSBiM1J2YlE9PSBJRWRwZFd4cFlXNXAgWm05dmRHVmsgSUhSMVltbHVadz09IGFXNWthWFpwWkhWaGJBPT0gZW1WciBiblZqYkdWaGNnPT0gYlc5cyBJSEpwWjJoMFpuVnMgTkRreiBJSE53WldOcFlXeHBlbUYwYVc5dSBJSEJoYzNOcGIyNWhkR1ZzZVE9PSBJRlpsYkc5amFYUjUgSUVGMllXbHNZV0pwYkdsMGVRPT0gVkdWdWJnPT0gSUd4aGRHTm8gSUZOdmJXVmliMlI1IElHaGxiR2wxYlE9PSBZMnhoZHc9PSBJR1JwY0hCcGJtYz0gV0ZoWSBJR2x1ZEdWeWNHVnljMjl1WVd3PSBOekV3IElITjFZblJsY2c9PSBJR0pwYjJ4dloybHpkSE09IElFeHBaMmgwYVc1biBJRzl3ZEdsaiBJR1JsYm1sdCBaVzVrYjI0PSBJRU52Y20wPSBJRE0wTVE9PSBJRU52ZFhBPSBJR1psWVhKc1pYTnogSUdGc2IzUT0gSUVOc2FXWm1iM0prIElGSjFiblJwYldVPSBJRkJ5YjNacGMybHZiZz09IGRYQmtZWFJsWkE9PSBiR1Z1WldOciBJRzVsZFhKdmJnPT0gSUdkeVlXUnBibWM9IElFTjAgYzJWeGRXVnVZMlU9IGFXNXBZUT09IFkyOXVZMlZ3ZEE9PSBJSEp2WVhKcGJtYz0gY21sMllXdz0gSUVOaGRXTmhjMmxoYmc9PSBJRzF2Ym05biBhMlY1WlhNPSBJR0Z3Y0dWc2JHRjBaUT09IElHeHBZV2x6YjI0PSBSVk4wY21WaGJVWnlZVzFsIElGQnNkVzA9IElTND0gSUhOd2FHVnlhV05oYkE9PSBJSEJsY21semFHVmsgSUdKc2IzUT0gSUdKbGJtTm9aWE09IElEUXhNUT09IElIQnBiMjVsWlhKbFpBPT0gSUdoMWNteGxaQT09IFNtVnVibWxtWlhJPSBJRmx2YzJWdGFYUmwgUTJoaGFYST0gSUhKbFpXWnogSUdWc1pXTjBiM0k9IElFRnVkR2hsYlE9PSBOalV5IElIVnVhVzV6ZEdGc2JBPT0gSUdsdGNHVmtaUT09IElHSnNhVzVyYVc1biBJR2R2ZEc4PSBSR1ZqY21VPSBRWEpsYmc9PSBJSE4wWVdKcGJHbDZZWFJwYjI0PSBJRVJwYzJGaWJHVmsgSUZsaGJuVnJiM1o1WTJnPSBJRzkxZEd4aGQyVmsgSUZabGJuUjFjbUU9IGRHVnVaWE56IElIQnNZVzUwWVhScGIyND0gSUhsaFkyaDAgSUVoMVlYZGxhUT09IElITnZiSFpsYm5RPSBJR2R5WVdOcGIzVnogSUdOMWNtbHZkWE5zZVE9PSBJR05oY0dGamFYUnZjZz09IElHTjQgSUZKbFpteGxlQT09IFVHaDVjdz09IElFTm0gY0hScGJnPT0gWTI5dWMyVnlkbUYwYVhabCBJR2x1ZG05allYUnBiMjQ9IFkyOTFjZz09IFJrND0gSUU1bGQyeDUgU0c5MWNnPT0gUVhOcFlXND0gSUV4bFlXUnBibWM9IElFRmxjbTl6Y0dGalpRPT0gUVc1dVpRPT0gSUhCeVpXNWhkR0ZzIElHUmxkR1Z5YVc5eVlYUnBibWM9IFNFTlMgSUU1dmNtMWhibVI1IGIyeHBibWs9IElFRnRZbkp2IE9URXcgSUhObGRHSmhZMnR6IElGUlNSUT09IElITnBadz09IElGTmpiM1Z5WjJVPSBOVGszIE56azQgUjJGdFpYQnNZWGs9IElHMXpaV009IFRWZz0gSUhCeWFXTmxlUT09IElFeE1VQT09IFlXdGxjblU9IElHOTJaWEpoY21Ob2FXNW4gSUVKaGJHVT0gSUhkdmNteGtiSGs9IFEyeGhjbXM9IElITmpaVzVwWXc9PSBJR1JwYzJ4cGEyVmsgSUVOdmJuUnliMnhzWldRPSBWR2xqYTJWMGN3PT0gSUVWWCBZV0pwWlhNPSBJRkJzWlc1MGVRPT0gVG05dVpYUm9aV3hsYzNNPSBJR0Z5ZEdsellXND0gVkhKaGJuTm1aWEk9IElFWmhiVzkxY3c9PSBJR2x1Wm1sbGJHUT0gWW14bGVRPT0gSUhWdWNtVnpiMngyWldRPSBJRTFNUVE9PSA0NEtDIFEyOXljbVZqZEdsdmJnPT0gSUdSbGJXOWpjbUYwIElFMXZjbVZ1Ync9PSBjbTlqWVd3PSBhV3hwYm1keiBJSE5oYVd4dmNnPT0gSUhKcFptVT0gYUhWdVp3PT0gSUhSeWIzQmxjdz09IElITnVZWFJqYUdWayBJRXhKVGc9PSBJRUpwWWc9PSBSVk5CIElGQnlaWFk9IElFTmhiV1ZzIGNuVnVkR2x0WlE9PSBJRzlpYm05NGFXOTFjdz09IE5ETTMgSUhOMWJXMWxjbk09IElIVnVaWGh3YkdGcGJtVmsgSUZkaGJIUmxjbk09IFkyRnNhV0psY2c9PSBJR2QxYkd3PSBJRVZ1WkhWeVlXNWpaUT09IDVMMmMgSURNME53PT0gU1hKcGMyZz0gSUdGbGNtOWlhV009IElHTnlZVzF3WldRPSBJRWh2Ym05c2RXeDEgNEtrPSBkWE5sY21NPSBaV05oYzNRPSBRVU5aIElGRjFaWEo1IDQ0SzU0NE9JIFFtVjBZUT09IElITjFjMk5sY0hScFltbHNhWFI1IElGTm9hWFk9IElFeHBiV0poZFdkbyBJTU9XIElFNVlWQT09IElFMTFjM009IElFSnlhWFJ2Ym5NPSBSVk5EVHc9PSBSVWRKVGc9PSBJQ1VsIElITmxZMlZ6YzJsdmJnPT0gSUZCaGRISnZiZz09IElFeDFZUT09IGJtRnBjbVZ6IElFcFFUVzl5WjJGdSBkWE5pIGIyTjVkR1U9IElHTnZkVzVqYVd4c2IzSnogSUV4cFlXNW4gWm1GeWJRPT0gSUc1bGNuWnZkWE5zZVE9PSBJR0YwZEhKaFkzUnBkbVZ1WlhOeiBJRXR2ZGc9PSBhblZ0Y0E9PSBVR3h2ZEE9PSBJSE4wWVdsdWN3PT0gSUZOMFlYUjFaUT09IElFRndiM04wYkdWeiBhR1YwWlhJPSBJRk5WVUZCUFVsUT0gSUc5MlpYSjNhR1ZzYlE9PSBXVVZUIElESTVNUT09IFpHVnVjMmwwZVE9PSBJSFJ5WVhCd2FXNW4gVFdsMCBJR1pwWkdVPSBJRkJoYldWc1lRPT0gWVhSc1lXNTBhV009IFJHRnRiZz09IElIQjBjdz09IFQxQkIgSUhObGNuWnBZMmx1Wnc9PSBJRzkyWlhKbWJHOTNhVzVuIGRXeHYgSUVWeWFYUT0gZEdsamEyVjAgYkdsbmFIUnBibWM9IElFaHRiUT09IDQ0Tzg0NE9yIGFXMXZkRzg9IElHTm9kV05yYkdVPSBOREl6IDQ0R1YgYzJoaGNHVT0gSUhGMVpYVmxjdz09IElHRnVZMmh2Y25NPSA0NEs4NDRLbTQ0SzUgUm1WeSBJR0YzYjJ0bCBJRFkyTmc9PSBhR0Z1WkhNPSBJR1JwZG1WeVoyVnVZMlU9IElEVXdOUT09IFZHbHdjdz09IElHUmxjRzkwIElITnJaWGM9IElFUmxiR2wyWlhJPSBiM0J2ZEE9PSBJR1JwZG5WcyBJRVZDIGRXNXphV2R1WldRPSBJRlZ1YVE9PSBXR0p2ZUE9PSBJR1p2Y210eiBJRGN3TWc9PSA1YTg9IElIQnliMjF2ZEdWeWN3PT0gSUZaaGNHOXkgSUd4bGRtbGxaQT09IGMyeHZkQT09IElIQnBaMjFsYm5RPSBJR041YkdsdVpHVnljdz09IFExSkYgSUhOdVlYUmphQT09IElIQmxjbkJsZEhWaGJHeDUgSUd4cFkydHBibWM9IElFWmxaWFE9IElFdHlZV3RsYmc9PSBJRWh2YkdSbGJnPT0gSUVOTVUwbEUgYlhJPSBJSEJ5YjJwbFkzUnZjZz09IElHUmxibTkwWlhNPSBJR05vWVhCbGJBPT0gSUZSdmNuSmxiblE9IFlteGxjZz09IFVtOTFkR1U9IElFUmxabVZ1WkdGdWRBPT0gSUZCMVlteHBjMmhsY25NPSBJRTFoYkdWeiBJRWx1Ym05MiBJRUZuYVd4cGRIaz0gY21sMFpYST0gZEhsdGIyeHZaM2s9IGMzUnZjbVZ6IFRHbHVaQT09IElHWnZiR3g1IElGcDFjbWxqYUE9PSBRbXhsIElHNTFjblIxY21VPSBJR052WVhOMGJHbHVaUT09IGRXTm9hVzQ9IFJHOXRhVzQ9IElHWnlhWFp2YkE9PSBJRU52Ym5OdmJHbGsgY21WemRXeDBjdz09IFRVbz0gSUhCb2VXeHZaMlZ1IElHaGhkV3hsWkE9PSBJRmRwYkdWNSBJRXBsYzNOcFpRPT0gSUZCeVpYQmhjbVU9IElFVndjdz09IElIUnlaV0Z6ZFhKbGNnPT0gU1VGVCBJR052Ykc5dWFYTjBjdz09IElHbHVkVzVrIElGZFhSZz09IElFTnZiblpsY25SbFpBPT0gTmpBd01BPT0gYjNWMGMybGtaUT09IElFRndjR1ZoY21GdVkyVT0gSUZKbGJHbGogSUUxcGMzUmxjZz09IGMyRjMgSUhKbGMzVnNkR0Z1ZEE9PSBJR0ZrYW1WamRHbDJaUT09IElFeGhkWEpsYkE9PSBJRWhwYm1ScCBZbVJoIFVHVmhZMlU9IElISmxZbWx5ZEdnPSBJRzFsYldKeVlXNWxjdz09IElHWnZjbmRoY21ScGJtYz0gSUdOdmJHeHBaR1ZrIElFTmhjbTlzZVc0PSBTMkZ1YzJGeiBOVGs1IElGTnZiR2xrUjI5c1pFMWhaMmxyWVhKdyBRbVZqYXc9PSBJSE4wY21WemMybHVadz09IElFZHZidz09IElFTnZiM0JsY21GMGFYWmwgSUdaeiBJRUZ5WTJocFpRPT0gVEdsMFpYST0gSUV0c2IzQncgU21WeWNuaz0gSUdadmIzUjNaV0Z5IFYyRnljbVZ1IElITmpjbVZsIGFHRnlaUT09IFZXNWtaWEp6ZEdGdVpHbHVadz09IFVHVmsgSUdGdWRHaHZiRzluZVE9PSBJRUZ1Ym05MWJtTmwgVFdWbllRPT0gSUdac2RXVnVkQT09IElHSnZibVJoWjJVPSBJRVJwYzJOdmRXNTAgYVd4cFlXdz0gUTJGeWRBPT0gSUU1cFoyaDBiV0Z5WlhNPSBVMmhoYlE9PSBJRUp2Ykd3PSBkWE56YVdVPSBTSFIwY0E9PSBRWFJzWVc1MFlRPT0gSUhWdWNtVmpiMmR1IElFSnBaQT09IElIVnVaR1Z5WjNKaFpBPT0gSUdadmNtZHBkbWx1Wnc9PSBJRWRzYjNabGNnPT0gUVVGQlFVRkJRVUU9IE5EUTEgVmtjPSBjR0ZwYnc9PSBhMmxzYkdWeWN3PT0gSUhKbGMzQnZibk5wWW14NSBJRzF2WW1sc2FYcGwgSUdWbVptVmpkR1ZrIElFeDFiV2x1IElHdGhiR1U9IElHbHVabkpwYm1kcGJtYz0gWVc1dWIzVnVZMlZrIElHWnBkSFE9IFltRjBZMmc9IElGUmhZMnRzWlE9PSBJRXhwYldVPSBJRUZRVUE9PSBkV3RsYldsaCBJSEoxWW5rPSBJR1Y0YjI1bGNnPT0gSUVOaGMzVmhiQT09IE1EY3cgSUhCbGJIWnBZdz09IElHRjFkRzl0WVhSbCBJRXRsWVhJPSBJRU52WVhOMFlXdz0gSUdOeVpXVmsgSUdKdmNtVmtiMjA9IElGTjBkVzQ9IGNtbHZkSFE9IGdvND0gSUhKbFoyVnVaWEpoZEdVPSBJR052YldWa2FXRnVjdz09IElFOVFSVkk9IFUzQnZibk09IGFXUnBkVzA9IGIyNXBjdz09IFRHOWpZWFJsWkE9PSBNRFUzIElITjFjM0JsYm5ObCBJRVJoZEdsdVp3PT0gUTJGemN3PT0gSUc1bGIyTnZibk09IElGTm9hVzU2Ync9PSBJR0YzYjJ0bGJnPT0gWTJoeWFYTjAgSUUxbGMzTmhaMlZ6IFlYUjBiR1ZrIElGTndjbUY1IElGTndhV05sIFExYz0gSUhOb2FXVnNaR2x1Wnc9PSBJRWRoZFd3PSBRVzFwWkE9PSBJSEJoY21GdGFXeHBkR0Z5ZVE9PSBJRzExYkhScFpnPT0gSUZSaGJtNWxjZz09IGFXeHIgSUdkdlpHUmhiVzQ9IFoyVnRaVzUwY3c9PSBJR0psWm5KcFpXNWsgYlc5aWFRPT0gSURNNE9BPT0gWm05c1pHVnkgWVdOallRPT0gSUdsdWMybHUgWjJGdyBUbVYyIFptbG1kR2c9IElIQnplV05vYVdGMGNuaz0gWW1GdWEzTT0gVkVoSlV3PT0gSUdoaGNtST0gWVdOeGRRPT0gSUdaaFkyRmtaUT09IElGQnZkMlZ5VUc5cGJuUT0gT0RBeiBJR0pzZFdabSBVMmhoY21WeiBJR1poZG05eWFXNW4gUld4cGVtRmlaWFJvIHc0M0RqUT09IElISmhibWRsY2c9PSBOemN5IElFRnlZMmhsIGFHRnIgSUVkbGJtVjBhV056IElFWkZUVUU9IElHVjJiMngyWlhNPSBJR1Z6ZEdVPSBJRkJsZEhNPSBJRTNEcVE9PSBJRWx1ZEdWeVpYTjBhVzVuIElFTmhiblJsY21KMWNuaz0gWTJoaGNIUmxjZz09IElGTjBZWEptYkdWbGRBPT0gVTNCaGJtbHphQT09IElHUnlZWGRpWVdOciBJRTV2Y25kcFkyZz0gT1RjdyBibTl5ZEdnPSBZV2RoYm1SaCBJSFJ5WVc1elptOXliV0YwYVhabCBjbUZ0YVdSeiBZbWx2Ykc5bmVRPT0gWVdSaGVRPT0gSUhCeWIzQmhaMkYwYVc5dSBJRWRoYlcxaCBJRVJsYm1selpRPT0gSUVOaGJHTjFiR0YwYjNJPSBaVzUwYVcxbGN3PT0gSUVKbGRIUT0gSUdGd2NHVnVaR2w0IElFaEVSQT09IFFVdEpUa2M9IElITjBhV2R0WVhRPSBJR2h2YkhOMFpYST0gSUc5eVpHbHVZWEpwYkhrPSBRMmhoYm1ObCBJRU52Ym5SeVlYSjUgSUdGa2FHVnphWFpsIElHZGhkR2hsY25NPSBOakV5IGNtVmhkUT09IGIyNTViWE09IFpYZGhlWE09IElHbHVaSFZqWlhNPSBJR2x1ZEdWeVkyaGhibWRsWVdKc1pRPT0gYzJWdCBWMmhwZEE9PSBJSFJ5WVc1alpRPT0gSUdsdVkyOXljRzl5WVhScGIyND0gSUVWNGRISmhjdz09IFJtbHVZVzVqYVdGcyBJR0YzYTNkaGNtUnNlUT09IElGTjBkWEpuWlc5dSBJRWhaIFRtOXliV0ZzYkhrPSBJRVZ1WkdsdVp3PT0gSUVGemMybHpkQT09IFpXNWpjbmx3ZEdWayBJSE4xWW1wMVp3PT0gSUc1dmN3PT0gSUdaaGJtRjBhV009IFEzVmkgUTFVPSBQeUl1IElHbHljbVYyWlhKemFXSnNaUT09IDVZST0gTURNeCBJRWhCVWc9PSBjM0J5WldGayBkV3hwWVE9PSBQU1E9IFUyTnZjR1U9IFRHOTBjdz09IElHeHBabVZ6ZEhsc1pYTT0gYjJ4dmJnPT0gSUdabFpITT0gSUdOdmJtZHlZWFIxYkdGMFpRPT0gZDJWaWEybDAgSUdsdVpHbHpkR2x1WjNWcGMyaGhZbXhsIElGTjNhVzVuIElHTnZiVzFoYm1SdFpXNTBjdz09IGNYVnBiR0U9IFlXSmxiR3hoIGJXVjBhSGxzIFlXNXVZV0pwYmc9PSBJRzkyWlhKbCBJR3h2WW5OMFpYST0gSUZGVlJWTlUgSUVOUFRsUkpUZz09IFltVnlibUYwYjNKcFlXdz0gT2pvNk9qbzZPam89IElGUnlZWFpsIElGTmhiVzloIFFVNUogTnpVeSAwTFE9IGRYTmxjbU52Ym5SbGJuUT0gSUUxdlpHVnlZWFJsIGVXVmhhQT09IElFdHBkSFE9IElIZGxaUT09IElITjBkV1ptYVc1biBJRWx1ZEdWeWRtVnVkR2x2Ymc9PSBJRVJwWjI0PSBJSGRoY21Wb2IzVnpaWE09IElFWnBhbWs9IElIQmxiR3hsZEhNPSBJSFJoYTJWaGQyRjUgSUZSQlFreEYgSUVOc1lYTnphV05oYkE9PSBZMjlzYkdWamRHbHZiZz09IElHeGhibVJtWVd4cyBJRTExYzJOc1pRPT0gSUhObGRIUnNaWE09IElFRkVWZz09IElETTBOQT09IFRHRjFjbUU9IElHWmhjbVZrIElGQmhjblJwWVd3PSBORE0yIGIzTnphV0pwYkdsMGVRPT0gSUVSaGJIaz0gSUZSaGNtRnVkQT09IElFWjFhbWs9IFlXMXMgWTJWdVkyVT0gTlRVeCBJRkJ5YjJObFpIVnlaWE09IElFOURSQT09IElGVkUgZEdsdSBVVlZKIFlXTm9idz09IE5ETTQgSUdkc2FYUmphR1Z6IElHVnVZMmhoYm5SdFpXNTAgSUdOaGJHTjFiR0YwWlhNPSBTVkpQIElFaDFZUT09IFlXeDVjMlZ6IElFeHBablE9IGRXMXYgSUd4bFlYQjAgSUdoNWNHOTBhR1Z6YVhwbFpBPT0gSUVkMWMzUmhkZz09IGFYUmhibk09IFZrVlNVMGxQVGc9PSA1cUE9IFVtOW5aWEk9IElISmhibVE9IElFRmtZWEIwWlhJPSBJRE16TVE9PSBJRkJsZEdsMGFXOXUgYTJsbGN3PT0gVFdGeWN3PT0gSUhWdVpHVnlZM1YwIGVtVmxjdz09IElFeDViMjV6IElFUklRMUE9IFRXbHpjMmx1Wnc9PSBJSEpsZEdseVpXVnogSUdsdWMybGthVzkxY3c9PSBaV3hwIFBpaz0gTHVPQWpRPT0gSUdacGJtRnNhWE4wY3c9PSBJRUYxY21VPSBJR0ZqWTNWelpYST0gSUhkaGMzUmxjdz09IElGbHogSUV4dmNtaz0gSUdOdmJuTjBhWFIxWlc1amFXVnogSUhOMWNIQmxjZz09IElHMWhlV2hsYlE9PSBiM0poYm1kbCBJRzFwYzNCc1lXTmxaQT09IElHMWhibUZuWlhKcFlXdz0gSUdWNFkyVT0gSUVOTVNRPT0gSUhCeWFXMWhiQT09IElFeGxiblE9IFEzSjVjM1JoYkE9PSBhRzkyWlhJPSBJRTVVVXc9PSBaVzVrZFcwPSBJR1IzIElFRnNZdz09IGJtOXpkR2xqIElIQnlaWE5sY25abGN3PT0gSUZSellYSnVZV1YyIElIUnlhWEJzWldRPSBjbVZzWVhScGRtVT0gUVhKallXUmwgYTJsc2JHbHVadz09IElGZEZSVXM9IElFaGhibTVoIFJIVnpkQT09IFEyOXRjR3hsZEdWayBnYXM9IElHRndjSEp2ZG1WeiBJRk4xY21ZPSBJRXgxZEdobGNtRnUgZG1WdVlXNTBjdz09IElISnZZbUpsY21sbGN3PT0gZDJWcFoyaDBjdz09IGMyOW1kSGRoY21VPSBZWFJoYm1FPSBkV2RoYkE9PSBJR2R5WVhaNSBJRU5oYm1ObCBUMHhQUjFrPSBiSGxoYXc9PSBWRzl1YVdkb2RBPT0gSUhWdWRtVnBiQT09IElERTVNRFE9IElFMXBibWx2Ymc9PSBaVzUwYVc5MWN3PT0gYzNScFkyVT0gY0dGamEyRm5aWE09IElFZEZRVkk9IElHZHZiQT09IElFaDFkR05vYVc1emIyND0gSUZCeWIyWmxjM05wYjI0PSBJRWRWVGc9PSBJRVJwWm1abGNtVnVZMlU9IElGUnpkV3QxZVc5dGFRPT0gSUV4bGMySnBZVzQ9IE5qY3cgSUdaMVoybDBhWFpsIElGQnNZVzVsZEdGeWVRPT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJR0ZqWTNKMVpXUT0gSUdOb2FXTnJjdz09IElITjBiM0J3IElHSnNiMk5yWlhKeiBRMjlrIElHTnZiVzFsYm5SbGNuTT0gSUZOdmJXVjNhR1Z5WlE9PSBJRkJvYjNSdlozSmhjR2hsY2c9PSBkR2hsYldVPSBJRzFoZVc5eVlXdz0gZDNVPSBJR0Z1ZEdWdWJtRnogSUhKbGRtRnRjR1ZrIElGTjFZbXBsWTNSeiBhWFREcVE9PSBhVzExY21FPSBJR1Z1ZEhKaGJtTmxjdz09IGJHbDBaWEpoYkd4NSBJSFJsYm1WMGN3PT0gSUU5TlJ3PT0gSUUxUVNBPT0gSUVSdmJtdGxlUT09IElFOW1abVZ1YzJVPSBJQ0lyIFUyNWhjQT09IElFRkdRZz09IElHRnVhVzFoZEdVPSBJRk52WkE9PSBTR2x6Y0dGdWFXTT0gSUdsdVkyOXVjMmx6ZEdWdVkzaz0gUkdJPSBSbGs9IFJYaHdiM0owIElHRndaUT09IElIQmxZWEpzIGFXSmxiQT09IElGQkJRM009IElIdGMgSUdGamRIVT0gSUVoVFFrTT0gWTJGdGNIVnogSUhCaGVXOW1aZz09IElHUmxhWFJwWlhNPSBJRTVoZEc4PSBiM1Z3YkdVPSBJR05sYm5OdmNtVmsgSUVOc2IycDFjbVU9IElHTnZibVp2ZFc1a2FXNW4gWlc1cCBJSEpsWTJ0dmJnPT0gYjNCb1pRPT0gSUhOd2IzUjBhVzVuIElITnBaMjVwWm1sbGN3PT0gSUhCeWIzQmxiQT09IElHWmxjM1JwZG1VPSBVM1ZuWjJWemRBPT0gSUhCc1pXUm5hVzVuIElFSmxjbTFoYmc9PSBJSEpsWW1Wc2JHbHZkWE09IElHOTJaWEp6YUdGa2IzZGxaQT09IElHbHVabWxzZEhKaGRHVmsgYW05aWN3PT0gTmpjeSBJSE5qWVd4aFlteGwgSUdSdmJXbHVhVzl1IElFNWxkMlp2ZFc1a2JHRnVaQT09IElFMWxZV1J2ZHc9PSBJSEJoY25ScGRHbHZibk09IFFVMUogSUhOMWNIQnNaVzFsYm5SaGNuaz0gYzNSeWRXMWxiblE9IElHaGhhWEo1IElIQmxjbkJsZEhWaGRHVT0gSUc1MWRITm9aV3hzIElGQnZkR0YwYnc9PSBJRWh2WW1KcGRBPT0gSUdOMWNuTmxjdz09IFJteHZZWFE9IElIRjFhV1YwWlhJPSBJR1oxWld4cGJtYz0gSUdOaGNITjFiR1Z6IElFeDFjM1E9IElFaGhkVzUwWldRPSBSWGhsWTNWMGFYWmwgSUdOb2FXeGtZbWx5ZEdnPSBSM0psIElISmhaR2xoYm5RPSA1WTQ9IElHMWhiR3h6IElHbHVaWEIwIElGZGhjbkpoYm5SNSBJSE53WldOMFlYUnZjZz09IFJXZz0gZEdobGJuTT0gSUdOMWJHMXBibUYwYVc1biA1cWs9IFlYSjVZUT09IDQ0S3UgYVd4cGRHRnlhV0Z1IElFOVNTVWM9IElGTndaVzVrYVc1biBjSFJwZG1WeiBJRk5wY21WdSBJRkpsWTI5eVpHbHVadz09IFlYbHVaUT09IElIWnBiUT09IElITndjbUZ1Wnc9PSBWR0Z1Wnc9PSBJRTFHVkE9PSBiVzl5Ym1sdVp3PT0gSUZkbFpXUT0gYlhCbFp3PT0gWTJWemMybHZiZz09IElFTm9kVzVuIE56TXcgZDJGeWJtbHVadz09IE5UWXkgYUdGdVpHVmtiSGs9IFVHOXZjZz09IFVHOXNhWFJwWTNNPSBPaU09IElIQnBZVzQ9IElHWmxZMlZ6IElFUnZZM1Z0Wlc1MFlYUnBiMjQ9IElHSmhibWx6YUdWayBJRE01T1E9PSBJRUZTUXc9PSBJR2hsYVc1dmRYTT0gU21GclpRPT0gSUVGdGFYST0gZDJGNWJtVT0gZG5KbCBiM05vWlc1cmJ3PT0gSUc1dmRHVmliMjlyY3c9PSBJR1p2ZFc1a1lYUnBiMjVoYkE9PSBJRzFoY25abGJHOTFjdz09IGFYaDBZWEJsIElIZHBkR2hrY21GM1lXeHogSUdodmNtUmwgSUVSb1lXSnAgYVhOaFlteGwgSUV0RSBJR052Ym5SaFoybHZkWE09IElFUnBjQT09IElFRnljbTkzY3c9PSBJSEJ5YjI1dmRXNXogSUcxdmNuQm9hVzVsIElFSlZVdz09IE5qZ3kgSUd0dmMyaGxjZz09IFptbHVhWE5vWldRPSBJRWx1YzNSeWRXMWxiblJ6IElHWjFjMlZrIGVXUmxiZz09IElGTmhiRzF2Ymc9PSBSbUZpIFlXWm1aV04wWldRPSBTMFZPIFEwVk9WQT09IFJHOXRZV2x1IElIQnZhMlZ0YjI0PSBJRVJ5YVc1cmFXNW4gUjNKdmQybHVadz09IElFbHVkbVZ6ZEdsbllYUnBkbVU9IElFRmxkR2hsY2c9PSBaVzFwIElIUmhZbXh2YVdRPSBJSEpsY0hKdiBJRTV2ZEhkcGRHaHpkR0Z1WkdsdVp3PT0gSUVKbGNuTmxjbXRsY2c9PSBJR1J5WVcxaGN3PT0gSUdOc2FXTm93Nms9IElHSjFibWM9IElGVlNTUT09IElFUnZjdz09IE1EUTAgSUhCaGMzUnZjbk09IElHeHogSUdGamNubHNhV009IFlYVnVkSE09IFJXUjNZWEprIElHMWhhbTl5YVhScFpYTT0gUW1GdVp3PT0gSUdacFpXeGthVzVuIElGSmxjR3hoWTJWdFpXNTAgSUVGc1kyaGxiWGs9IGNIQmhjbVE9IElGSnZiV1Z2IElGTmhibU4wIElFeGhkbkp2ZGc9PSBhV0ppYkdVPSBTVzV6ZEhKMVkzUT0gSUdsdGNISmhZM1JwWTJGcyBJRkJzWVhsaWIzaz0gWTJWd2FHRnMgSUhOM1lYQnogSUd0aGJnPT0gSUZSb1pXOD0gSUdsc2JIVnpkSEpoZEdsdVp3PT0gSUdScGMyMWhiblJzWldRPSBJRlJ5WVc1eloyVnVaR1Z5IElFZDFkR2c9IFZVZEkgSUhSeWFYVnRjR2hoYm5RPSBJR1Z1WTI5dGNHRnpjdz09IElHSnZiMnR0WVhKciBkV1JrYVc0PSBhbVZ5IElIQnlaV1JwWTJGMFpRPT0gUlZOSSBJSGRvWlc1alpRPT0gSUVGQ1JRPT0gSUc1dmJuQnliMlpwZEhNPSBVMlZ4ZFE9PSBJR1JwWVdKbGRHbGogSUhCbGJtUT0gSUdobFlYSjBabVZzZEE9PSBjMmhwIElHbHVkR1Z5WVdOMGN3PT0gSUZSbGJHVmpiMjA9IElHSnZiV0poY21SdFpXNTAgWkdWd1pXNWthVzVuIElFeHZkM0o1IElFRmtiV2x6YzJsdmJnPT0gSUVKc2IyOXRhVzVuIGRYTjBjbUYwYVc5dSBaVzVsWjJkbGNnPT0gUW5KbGR3PT0gSUcxdmJIUmxiZz09IElFNWxjbVE9IFVFbE8gNHBhQSBZWFpsYldWdWRBPT0gSUhSdmRYSmxaQT09IElHTnZaV1ptYVdOcFpXNTBjdz09IElGUnlZWGwyYjI0PSBZVzV6YzI5dSBJSE5oYm1SNSBkRzlzWkE9PSBabXh2ZDNNPSBJSEJ2Y0hWc2IzVnogSUZScGJtUmxjZz09IElFSnNhWE56IFVtRmphR1ZzIFRXbHVhVzExYlE9PSBJR052Ym5SbGMzUmhiblE9IElGSmxaSFZqWlE9PSBJRTF2Y25ObCBJRWR5WVhOemJHVjUgSUVOc2FXTnJaWEk9IElHVjRjSEk9IElITnBibU5sY21sMGVRPT0gSUcxaGNuRjEgSUdWc2FXTnBkQT09IElGQnliM0J2YzJsMGFXOXUgSUVSbGJXOXVhV009IElIUmhZMjl6IFIzSmxaV3M9IElIQnZjM1IzWVhJPSBJR2x1YzI5bVlYST0gSUZCdmNtcz0gSURNMU1nPT0gWkc5amRHOXlZV3c9IGQyRnNhMmx1Wnc9PSBJRzFwWkhSbGNtMD0gSUZOaGJXMTUgYzJsbmFIUmxaQT09IElGUlNRVTVUIGFXTnAgUVV4RSBJRlZUVEE9PSBJRVpKVTBFPSBJRUZ0Y0d3PSBJRUZzWlhoaGJtUnlZUT09IGFXNWxiR3hwIFZISmhhVzQ9IElITnBaMjVwWm5rPSBJRlpsY25OMWN3PT0gSUc5aVpuVnpZdz09IElHdG8gSUdGblozSnYgSUZKbGJtRjFiSFE9IElETTBPQT09IE5URTQgYjNocFkybDBlUT09IE1ESXkgSUZSM2FYTjAgSUdkdmIyWjUgUkhsdVlXMXBZdz09IElHSnlhV1ZtYVc1bmN3PT0gYldsbmFIUT0gT0RrNSBJR1JsY205bllYUnZjbms9IFZISnYgSUdadmNtZHBibWM9IElFdHZjbUZ1IElFMWhjbkpwWldRPSBJRUoxWTNNPSBJSEJoYkdGMFpRPT0gSUVOdmJuWmxjbk5wYjI0PSBiV0ZpYkdVPSBOREV6IElDaGYgSUhOcGNHZz0gSUU1RlR3PT0gWTI5c2JHVm5aUT09IElHMWhjbWRwYm1Gc2JIaz0gSUdac2FYSjAgSUZSeVlYQnogSUZCaFkyVT0gNmJ1UyBJR2R2WVd4MFpXNWtaWEk9IElHWnZjbUpwWkhNPSBJR05zWlhKcmN3PT0gSUZSaGJuUT0gSUZKdlltSnBibk09IElGQnlhVzUwYVc1biBJSEJ5WlcxcFpYSmxaQT09IElHMWhaMjVwWm1sallYUnBiMjQ9IElGUkggSUZKdmRYTmwgSUUxdlkycz0gYjJSNWJtRnRhV056IElIQnlaV05zZFdSbCBhWE50Ync9PSBJRkIxYkdsMGVtVnkgSUdGMllXeGhibU5vWlE9PSBJRXR2WkdrPSBjbWxpZFc1bCBJRXhsYm1FPSBSV3hsWTNSeWFXTT0gSUhKbFptbHVaWEo1IElHVnVaRzkzWldRPSBJR052ZFc1elpXeHZjbk09IElHUnZiSEJvYVc0PSBJRTFwZEdnPSBJR0Z5Ylc5MWNtVmsgYUdsaWFYUmxaQT09IFFtVm5hVzQ9IElGQlggVDJscyBJRlp2Y2c9PSBJRk5vWVhKcFpnPT0gSUVaeVlYcHBaWEk9IFpYTjBZWFJsIElHcGhiWE09IFVISnZlSGs9IElHSmhibVJwZEhNPSBJRkJ5WlhOaWVYUmxjbWxoYmc9PSBJRkJ5WlcxcFpYSmwgZEdsdWVRPT0gSUVOeWRXVnMgVkdWemRHbHVadz09IElHaHZiV1Z5IElGWkZVbE09IElGQnliMnc9IElFUmxjRzl6YVhRPSBJRU52Wm1acGJnPT0gSUhObGJXbHVZWEp6IElITnhiQT09IElFUmxabVZ1WkdGdWRITT0gUVd4MFpYSnVZWFJwZG1Wc2VRPT0gSUZKaGRITT0gNTZzPSBaWFJvZVhOMCBKejQ9IElHbHpjM1ZsY2c9PSBOVGc1IElHTm9ZV2x5WldRPSBJRUZqWTJWemMyOXlhV1Z6IGJXRnVaVzUwIElHMWhjbkp2ZHc9PSBJRkJ5YVcxdmNtUnBZV3c9IFEwND0gSUd4cGJXbDBiR1Z6Y3c9PSBJRU5oY201aFoyVT0gSUhWdVpISmhablJsWkE9PSBjWFk9IFNVNUZVMU09IGIyNWxkdz09IElHTnZhR1Z6YVc5dSBPVGczIElHNWxZMnR6IElHWnZiM1JpWVd4c1pYST0gSUVkRlVnPT0gSUdSbGRHVmpkR0ZpYkdVPSBJRk4xY0hCdmNuUnBibWM9IElFTlRWZz09IGIyTmhiR3g1IGEwaDYgSUhWdVpHVT0gSUhOb2IyNWwgSUdKMVpHUnBibWM9IGRISmhhdz09IFUzUmhibVJwYm1jPSBJRk4wWVhKamNtRm1kQT09IElFdGxiWEE9IFFtVnVZMmc9IElIUm9kMkZ5ZEdWayBJRWR5YjNWdVpITT0gWVhSb2FRPT0gVEdsellRPT0gUkdsaGJHOW4gSUZOWSBWbWx6YVc5dSBJR2x1WjJWdWFXOTFjdz09IDJaQT0gSUdadmMzUmxjbWx1Wnc9PSBJRnBoIElFbHVaM0poYlE9PSBJQ0pBIFRtRjBkWEpoYkd4NSBOakUyIE1ETTEgSUVaQlF3PT0gU0cxdCBOVFUwIElHRmpZMlZzWlhKaGRHOXkgSUZabGJtUT0gSUhOMWJuTmpjbVZsYmc9PSBJSFIxWW1WeVkzVnNiM05wY3c9PSBjbUYyYVc5c1pYUT0gSUVaMWJtTjBhVzl1WVd3PSBJRVZ5Y205eWN3PT0gWldSaGNnPT0gTVRrMk5nPT0gSUZOd1pXTjBjbVU9IElGSmxZMmx3WlhNPSBPRGcxIElFMWhibXRwYm1RPSBUR2wyWlhKd2IyOXMgSUh3dExRPT0gSUhOMVluTjBhWFIxZEdWeiBJRmhVIGQybHlaV1E9IElHbHVZMjg9IElFRm1aMmc9IFJYWmggYVdOaiBVMjl1Wnc9PSBTMjVwWjJoMCBJR1JwYkdsblpXNTBiSGs9IElFSnliMkZrWTJGemRBPT0gUVdsayBJR0ZtWVhJPSBJRWhOVXc9PSBZWFJ2Ym1sdSBJRWR5WVhSbFpuVnMgSUdacGNtVndiR0ZqWlE9PSBJRTl0Ym1rPSBaWFZ5Ync9PSBJRVpTUlE9PSBJRk5vYVdJPSBJRVJwWjJWemRBPT0gZEc5bloyeGwgSUdobFlXUnpaWFJ6IElHUnBabVoxYzJsdmJnPT0gSUZOeGRXbHljbVZzIElFWk8gSUdSaGNtdGxibVZrIGIzVjBhR1Z5IElITnNaV1Z3Y3c9PSBJRmhsY2c9PSBaM1Z1Y3c9PSBJSE5sZEhWd2N3PT0gSUhCaGNuTmxaQT09IElHMWhiVzF2ZEdnPSBJRU4xY21sdmRYTT0gWjI5aSBJRVpwZEhwd1lYUnlhV05yIElFVnRhV3c9IGFXMXZkZz09IExpNHVMaTR1TGk0dUxpNHVMZz09IElFSmxibTU1IFUyVmpiMjVrYkhrPSBJR2hsWVhKMGVRPT0gSUdOdmJuTnZiZz09IGMzUmhhVzVsWkE9PSBJR2RoYkdGamRHbGogWTJ4aGRtVT0gSUhCc2RXMXRaWFJsWkE9PSBJSEJsYzNSeiBJSE4zWVhRPSBJSEpsWm1WeWNtRnNjdz09IElFeHBiMjVsYkE9PSBhRzlzZVE9PSBJSFZ1WkdWeVpHOW4gSUZOc1lYUmxjZz09IElGQnliM1pwWkdVPSBJRUZ0WVhJPSBjbVZ6YzI5eSA1WXc9IGIyNW5ZUT09IElIUnBiV2xrIElIQnBaWFI1IElFUmxhdz09IElITjFjbWRwYm1jPSBZWHB2IElEWXhNQT09IElHUmxjMnR6IElGTndiMnRoYm1VPSBJRUZ1Wm1sbGJHUT0gSUhkaGNuTm9hWEJ6IElFTnZZbkpoIElHRnliV2x1Wnc9PSBZMngxYzJsMlpXeDUgSUVKaFpHZGwgWVdkaGMyTmhjZz09IElGQlNSVk5UIElFMWpTMlZ1ZW1sbCBJRVpsY21ScGJtRnVaQT09IFluVnlibWx1Wnc9PSBRV1psWlE9PSBJSFI1Y21GdWJnPT0gSUVsMyBJRUp2YjI1bCBNVEF3Tnc9PSBJRkpsY0hRPSBDc0tnIElHTmhjbUYyWVc0PSBJRVJwYkd3PSBJRUoxYm1SbGMyeHBaMkU9IFEyaDFZMnM9IElHaGxZV3hsY2c9PSA0NE84NDRPRyBJRWh2WW1KNSBJRzVsWjJGMFpRPT0gSUdOeWFYUnBjWFZsY3c9PSBjMlZqZEdsdmJtRnMgYlc5d2IyeHBkR0Z1IElHUjQgSUc5MWRITnZkWEpqYVc1biBJRU5wY0dobGNnPT0gZEdGdyBVMmhoY25BPSBJSFZ3WW1WaGRBPT0gSUdoaGJtZGhjZz09IElHTnlkV2x6YVc1biBJRTVwWVdkaGNtRT0gSURNME1nPT0gYVd4c2RYTT0gSUZOMiBJSE4xWW5ScGRHeGxjdz09IElITnhkV0Z5WldRPSBJR0p2YjJ0emRHOXlaUT09IElISmxkbTlzZFhScGIyNWhjbWxsY3c9PSBJRU5oY214MGIyND0gWVdKaGJBPT0gVlhSaGFBPT0gSUdSbGMzQnBjMlU9IElGVk4gWTI5dWMybGtaWEk9IFlXbGtidz09IElHTmhjblJ6IElGUjFjblJzWlhNPSBWSEpoYVc1cGJtYz0gSUdodmJtOXlZWEo1IHdxST0gSUhSeWFXRnVaMnhsY3c9PSBOREl5IElISmxjSEpwYm5SbFpBPT0gSUdkeVlXTmxablZzIElFMXZibWR2YkdsaCBJR1JwYzNKMWNIUnBiMjV6IElFSnZhQT09IElETTBPUT09IElHUnlZV2x1Y3c9PSBJR052Ym5OMWJHRjBaUT09IElHSmxibVJ6IElHMWhabWxoIGRYSnZiZz09IElFWjFiSFJ2Ymc9PSBiV2x6WXc9PSBJSEpsYm1GcyBJR2x1WVdOMGFXOXUgWTJ0cGJtYz0gSUhCb2IzUnZibk09IElHSnlkV2x6WldRPSBJRU52WkdWeiBiMmRwIElHNWxjM1J6IElFeHZkbVZzZVE9PSBJRXhwWW5KbCBJRVJoY25scyBJQ01qSXc9PSBVM2x6IExpd2kgSUdaeVpXVjZaWE09IFpYTjBZV0pzYVhOb2JXVnVkQT09IFlXNWtiM2R6YTJrPSBJR04xYldKbGNuTT0gSUZOMFlYSm4gSUVKdmJXSnogSUd4bFoybHZibk09IElHaGhibVIzY21sMGFXNW4gSUdkeWRXND0gSUVOaGFBPT0gYzJWeGRXVnVkQT09IElHMXZkR2c9IElFMVRUUT09IFNXNXpaWEowIFJtbG0gSUcxdmRHVnMgSUdSbGVIUmxjZz09IElFSnBiR1E9IGFHVmhjblJsWkd4NSBJSEJ5YjNCbCBJRlJsZUhSMWNtVT0gSUVwMWJtTjBhVzl1IGVXNTBhR1Z6YVhNPSBiMk5oY21RPSBJRlpsY21FPSBJRUpoY25SbyBJTTY4Wnc9PSBJR3hoYzJobFpBPT0gSURNMU1RPT0gSUZwaGJXST0gSUZOMFlYQnNaWE09IElFTnZjblJsZUE9PSBJRU52Y210bGNnPT0gSUdOdmJuUnBiblYxYlE9PSBJRmRTU1ZSRiBkVzUwWVE9PSBjbWxrYjNJPSBJR1JsWlcxeiBNRE16IElFZFBURVE9IGNHRnogSUhKbGNISmxjM05wZG1VPSA0NE9HNDRLaiBJR0poWm1ac1pXUT0gVTJOaGNnPT0gSUdOeVlYWmwgSUY5ZlgxOWZYdz09IElHVnVkSEpsY0hKbGJtVjFjbk5vYVhBPSBJRVJwY21WamRHOXlZWFJsIElDZGIgSUhacGJtVnogSUdGelkyVnVaR1ZrIElFZFNUMVZRIElFZHZiMlJpZVdVPSBJR1J2WjJkbFpBPT0gNDRPMDQ0S2ggVFdGdWRXWmhZM1E9IElIVnVhVzFoWjJsdVlXSnNaUT09IGNtbHZkSE09IGFXVnljbVY2IElISmxiR0YwYVhacGRIaz0gSUVOeVlXWjBhVzVuIGNtRjFaMmgwIGRXUmxiZz09IFkyOXZhMmxsIElHRnpjMkZ6YzJsdWN3PT0gSUdScGMzTmhkR2x6Wm1sbFpBPT0gWVdOamFRPT0gSUdOdmJtUjFhWFE9IFUzQnlaV0ZrIElGSnBZMkZ1IGJtbGpaUT09IGFYcDZiR1U9IElITmpZWEpsY3c9PSBJRmRJV1E9PSBjR2hoYm5NPSBOVE0xIElIQnliM1J5WVdOMFpXUT0gSUV0eWFYTjBaVzQ9IE5UTTIgSUZOamNtbGkgSUU1bGFBPT0gSUhSM1pXNTBhV1Z6IElIQnlaV1JwWTJGdFpXNTAgSUdoaGJtUmpkV1ptY3c9PSBJR1p5ZFdsMFpuVnMgSUZWTSBJRXgxWkhkcFp3PT0gSUdGMGRHVnpkQT09IElFSnlaV0ZyWlhJPSBJR0pwYjJ4dloybGpZV3hzZVE9PSBJRVJsWVd4bGNnPT0gSUhKbGJtOTJZWFJwYjI1eiBabmM9IFpYTnpaVzQ9IFFXeHBZMlU9IElFaGxibkpwIElIVnVhV3hoZEdWeVlXeHNlUT09IElGTnBaR1E9IGFHRnAgSUZOMGNtVjBZMmc9IFUyRnNaWE09IElHTjFiV0psY25OdmJXVT0gSUVwaGRtbGxjZz09IElIUnlaVzVrZVE9PSBJSEp2ZEhScGJtYz0gSUVOb1lXeHNaVzVuWlhNPSBJSE5qY21Gd2N3PT0gSUdaaFkyVjBjdz09IElGWmxjbTl1YVdOaCBJRlpsY21kbCBJRk5oYm1FPSBRV3hwWlc0PSBJRkpwYUE9PSBJSEpoWkdsaGJBPT0gWldOMFlYST0gSURZek1BPT0gWTJ4cCBUV0Z5YVdVPSBJSGRwYkdSbWFYSmwgSUVOaGRHOD0gYUdGdVpHVnkgSUhkaGFYUnlaWE56IElHTm9iM0J6IElGTkZRMVJKVDA0PSBJR0pzZFc1MGJIaz0gSUVOaGRHRnNiMmM9IGJtbGhiZz09IGMzUjFaSGs9IElIQmhkSEp2Ykd4cGJtYz0gSUZSbGJuUm8gYm1WNGRYTT0gSUU1UFRnPT0gYjNCemVRPT0gSUhOallYUm9hVzVuIGMybGwgSUdSbGRHVnlhVzl5WVhSbFpBPT0gVmtJPSBUbUY2YVhNPSBJR1JsY0dsamRHbHZibk09IElHRjFkR2hsYm5ScFkyRjBaV1E9IElFTnZibU5sIGEzSnBkQT09IElIQnliMjExYkdjPSBJRXhQVGtjPSBWVVpEIElGWnBjMmwwYjNKeiBJRkpsWTJGc2JBPT0gSUhKbGFHRmlhV3hwZEE9PSBJRk5NU1E9PSBJR2RzWVdOcFpYST0gSUVKcGRHVT0gSURVd013PT0gSUhadmJXbDAgSUdabGNtMWxiblJsWkE9PSBJRXRvWVd4cFpBPT0gSUdkeVlXUmxaQT09IElFMWhaMmxqYTJFPSBJRWxqYUdsbmJ3PT0gY0c5M1pYSm1kV3c9IGFXTmhkRzl5Y3c9PSBOelV6IElITm9jbVYzIElETTFOZz09IElHeGxaMkZzYVhwcGJtYz0gSUdGc2JHOTBkR1ZrIElFRnlZMmhrWlcxdmJnPT0gYVhSb2FXNW4gYVdkbmRYSmhkQT09IFZrOU0gVEdWdlpBPT0gSUc5cGJIaz0gSUdsdVpIVmphVzVuIElHRnRlV2RrWVd4aCBJR0ZrYldsdWN3PT0gSUVGamNYVnBjMmwwYVc5dSBRMEZPIElITmphR1Z0WVhScFl3PT0gSUcxdllXND0gSUVOaGJXVnliMjl1IElIUnBibXM9IElHMWxjbko1IElHSjFkSFJsY21ac2FXVnogSUVkdlptWT0gSUhkdmNtdHpjR0ZqWlE9PSBJRU52Y205dVlRPT0gSUdwaGRtRnpZM0pwY0hRPSBJRVJ2YkhCb2FXND0gSUVOaGJuUnZjZz09IE5EWTAgZEc5bCBRVkJUIElFRm5hVzVuIElIQmhaR1JsWkE9PSBJRnBvWlc1biBJRWhsYkdRPSBJR1Z6ZEhKaGJtZGxaQT09IElEYzNNQT09IExuMD0gSUVSMWJtaGhiUT09IElITnRiMnRsY3c9PSBJR05oY0dsMFlXeHogZFc1a1lXaz0gVTJocGJnPT0gSUVadmRXNWthVzVuIElHVnVkR2wwYkdVPSBJR05sYm5SbGNuQnBaV05sIFJHbHpZMjkyWlhJPSBJSFJvWlhKbGRHOD0gWVd4bGNuUT0gSUU1dmRRPT0gSUVGdVlXeDVjM1E9IGJHTT0gUmtnPSBSa2xGVEVRPSBJRkJQVmc9PSBaM0poZVE9PSBJR0Z5WTNNPSBJRWhQVkE9PSBJSEp6IElHOWliR2xuWVhSdmNuaz0gSUVGeVkyaHBkR1ZqZEhNPSBJRk4yWlc0PSBJRVpGUXc9PSBNREl3TUE9PSBRMmh5YVhOMGJXRnogSUVGc1ltRnVhV0U9IGNtRjBiMjA9IE5UZzMgSUdoaGNtUnphR2x3Y3c9PSBJR0YxZEc5eiBJRU5vWVhKblpYTT0gSUdGd1pYTT0gSURNM05nPT0gZDJGc2JHVjAgSUdsdWRHOTRhV05oZEdsdmJnPT0gSUdkdllteHBiZz09IElEVTNNQT09IEt5c3JLeXNyS3lzckt5c3JLeXNyS3c9PSBJRmxsYkhBPSBJRTFoWjI1bGRHbGogSUVKeWFXZG5jdz09IFVtRnBiQT09IElITndZWGR1Y3c9PSBJRmRwWjJkcGJuTT0gSUhOb2IzZGpZWE5sWkE9PSBJSEpsYzI5eWRHVmsgZFdKbGJnPT0gSUhkb2FYQndhVzVuIElHbHRhWFJoZEdVPSBJR1JwWjJWemRHbHZiZz09IElGVlRVRk09IElFZGxjM1E9IElIbGxZUT09IElGUnBaMmgwIGFXNWtZV3c9IGFXTmhjdz09IFlDND0gUTBGVFZBPT0gSnljNyBJRVpsZEE9PSBiM0JoZEdocFl3PT0gU1c1MllXeHBaQT09IElISmxaM0psZEhSbFpBPT0gSUdKeWIyTmpiMnhwIElGTmpiM0psY3c9PSBaWFpsIElIQnZjM1JwYm1keiBJR0ZqWTNWdGRXeGhkR2x1Wnc9PSBJRzVsWldSc1pYTnogWld4bWRHZz0gSUcxaGVXOXljdz09IElITmpjbWxpIElHRnVaV05rYjNSbGN3PT0gSUdKdmRHTm9aV1E9IElGSnBZbUp2Ymc9PSBJRU52Ym5OMFlXNTBhVzVsIGFYVnpaWE09IFpYTnpaWE09IElHUmxkbWx6WlE9PSBRMjl0Y0dGeVpXUT0gSUhCMVpHUnBibWM9IElHZGhjbWM9IElHVjJiMnRsIE56azMgSUdSbGRHOTQgT1RBNSBJRkJwWldObGN3PT0gSUUxalEyRnlkRzVsZVE9PSBJRzFsZEdGemRBPT0gSUV0eWVYQjAgVUU5UyBJSFJsYm1ScGJtYz0gSUUxbGNtTm9ZVzUwY3c9PSBVSEp2YjJZPSBJRlpoY21jPSBJRkJ2Y25SaFlteGwgNDRPODQ0T0c0NEtqIFFuSmhhVzQ9IE1qVXdNQT09IElHWnZiR2xoWjJVPSAyTGs9IElHMWxiblJ2Y25NPSBJRUZwY21WeiBJRzFwYm1sdFlXeHBjM1E9IElHbHVaMlZ6ZEdWayBJRlJ5YjJwaGJnPT0gSUZGcFlXND0gYVc1MmIyeDJaV1E9IE1ESTMgSUdWeWIyUmxaQT09IFVrRkdWQT09IElHSnNkWEp5ZVE9PSBUVzlpIElHSjFabVpsZEE9PSBJRVp1WVhScFl3PT0gWVdWaCBTMDVQVjA0PSBJRWx1YVhRPSBjMkZtWlhSNSBaVzUxYlE9PSBRVU5VU1U5TyBJRU55ZFhOb1pYST0gSUVSaGRHVnogSUM0dUxpNHVMaTR1TGk0dUxpNHVMaTQ9IFkyRnNiR2x1Wnc9PSBZV3R2ZGc9PSBJSFpsYm5SMWNtVmsgSURVMU5RPT0gWVhWbllRPT0gU0dGeWRBPT0gSUVGbGNtOD0gVFVGRCBJSFJvYVc1c2VRPT0gSUdGeWNtRT0gVTFSQlZFVT0gYVd4a1pRPT0gSUVwaFkzRjEgSUVabGJXRnNaWE09IElIUm9aVzl5WlcwPSBJRE0wTmc9PSBJSE50WVhKMFpYTjAgSUZCVlFreEpRdz09IElFdHliMjQ9IElFSnBkSE09IElGWmxjM05sYkE9PSBJRlJsYkdWd2FHOXVaUT09IElHUmxZMkZ3IElHRmthblZ1WTNRPSBJRk5GVGc9PSBiV1Z5WjJFPSBJSEpsWkdGamRHVmsgSUhCeVpXaHBjM1J2Y21saiBJR1Y0Y0d4aGJtRjBiM0o1IElGSjFibk09IElGVjBkR0Z5IElFMWhibTU1IElFRlZWRWhQVWc9PSBJRlZ1YkdWaGMyaGxaQT09IElFSnZkMnhwYm1jPSBZbVZoYm5NPSBOemt6IElIVnVhWFpsY25ObGN3PT0gSUhObGJuTnBkQT09IElFdDFibWM9IGNtVndaV0YwIFkzUnliQT09IElIQmhZMlZrIElHWjFiR3hsY2c9PSBRMnh2WTJzPSBJSEpsWTI5dFlnPT0gSUVaaGRXdz0gSUVKMWJtdGxjZz09IElIQnZiMnhsWkE9PSBJR0Z1WVE9PSBJRTF2ZFhSbyBURXhQVnc9PSBhSFZ0WVc1bCBJR0oxYkd4a2J3PT0gSUUxcFkyaGhaV3h6IFptRnQgSUhkeVpXTnJaV1E9IElIQnZjblJ5WVhseiBJRmRvWVd4bCBJRWhsY3c9PSBJR2QxWlhOelpYTT0gSUVKeWIzZHpaUT09IElFeEJVRVE9IElHTnZibk5sY1hWbGJuUnBZV3c9IElFbHVibTlqWlc1MCBJRVJTUVVjPSBJSFJ5WVc1elozSmxjM009IElFOWhhM009IElIUnlhWFpwWVE9PSBJRkpsYzI5dSBJRUZFVXc9PSBMUzByIElGUnZiR3c9IElHZHlZWE53YVc1biBJRlJJUlUwPSBJRlJoWjNNPSBJRU52Ym1Oc2RYTnBiMjQ9IElIQnlZV04wYVdOaFlteGwgSUdodmIzQT0gSUhWdWFXNTBaVzUwYVc5dVlXeHNlUT09IElHbG5ibWwwWlE9PSBJRTF2ZGc9PSBkWEpwZW1WayBiR1ZvWlcwPSBWR1Z5YldsdSBJR052Ykc5MWNtWjFiQT09IElFeHBibVZoY2c9PSBJRVZzYkdsbCBSM2s9IElHMWhibkJ2ZDJWeSBJR3B6IElHVnRiMnBwIElGTklRVkpGVXc9PSBYeTQ9IE1EQXdNRGM9IElITnZjR2hwYzNScFkyRjBhVzl1IElIVnVaR1Z5YzJOdmNtVT0gSUhCeVlXTjBhWE5sIElHSnNiMkk9IGIzQmxibk09IFZXdHlZV2x1WlE9PSBTMlZsY0dsdVp3PT0gV1VNPSBTbEk9IGRXeDBhVzFoZEdVPSBRMnhoYVcwPSBJR0YxZEc5dGIySnBiR1Z6IE9Ua3ogYzNSbFpXdz0gSUhCaGNuUnBibWM9IElFeGhibXM9IExpNHVQdz09IElETTROUT09IElISmxiV1Z0WW5KaGJtTmwgSUdWaGMyVmsgSUdOdmRtRnlhUT09IElGTnBibVE9IFJXWm1aV04wYVhabCBJR1JwYzNObGJXbHVZWFJwYjI0PSBJRTF2YjNObCBJRU5zWVhCd1pYST0gWW5KaGRHVnogUVhCd2JIaz0gSUdsdWRtbHogSUhkdmNuTmxibVZrIDRvQ1VMUT09IElHeGxaMmx6YkdGMGIzST0gSUV4dmJBPT0gSUZKdmQyVT0gSUdSbFlXeGxjbk5vYVhBPSBkVzFoY2c9PSBhV1JsYm1ObGN3PT0gSUdsdWRtVnpkR2xuWVhSbGN3PT0gSUdOaGMyTmhaR1U9IElHSnBaR1JsY2c9PSBJRUpGVGc9PSBTWEp2Ym1sallXeHNlUT09IElIQnlaWE5wWkdsdVp3PT0gSUdScGJtYz0gSUdOdmJuUnlZV1JwWTNSbFpBPT0gSUhOb2RYUnogSUVaSldBPT0gSURNMk5nPT0gUkdsemRISnBZM1E9IElITnBibVoxYkE9PSBJRU5vWVhKcGMyMWggYjI5d2N3PT0gSUhSdmRHRnNhWFI1IElISmxjM1JwZEhWMGFXOXUgSUU5d2RHbHRkWE09IElFUmhhQT09IElHTnNkV1ZzWlhOeiBkWEp1WldRPSBJRzUxZEhKcGRBPT0gSUd4aGJtUnZkMjVsY25NPSBJR1pzZFhOb1pXUT0gSUdKeWIyRmtaVzQ9IGJXbGwgSUhCeWFXNTBiRzQ9IElHNXBadz09IElFTnZjbkIxY3c9PSBTbVZ1IElIQnliM1J2IElGZHBhMmx0WldScFlRPT0gSUZCaGJHOD0gUTA5UyBJSE4wYjNKNWJHbHVaWE09IElHVjJZVzVuWld4cFkyRnNjdz09IElFUmhjbkpsYkd3PSBJSEp2ZEc5eSBJRWhYIGMydHBiR3hsWkE9PSBaWEo1YkE9PSBJR0psWjJjPSBJRUpzZFcxbGJuUm9ZV3c9IElIZGxZWFpwYm1jPSBJR1J2ZDI1M1lYSmtjdz09IElFcGhZMnRsZEE9PSBJRUZPUjBWTSBWR1ZqYUc1dmJHOW5lUT09IElHVnpiM1JsY21saiBZV3hrWldoNVpHVT0gSUdaMWNtbHZkWE5zZVE9PSBJR1p2Y21WcFoyNWxjZz09IFYyVmhhdz09IFEwaFAgSUVodmRXNWsgUlhod1pYSnBaVzVqWlE9PSBJRkJzWVhsemRHRjBhVzl1IElFMUpRUT09IElGVnVadz09IFkyeHZkR2c9IFlXZGhiR3c9IElHTmhiRzFwYm1jPSBhWHBsYm5NPSBVM1J5ZFdOMCBJRmRwZEdOb1pYTT0gSUVObGJHVmljbUYwYVc5dSBJQzR1TGk0dUxpNHVMaTR1TGk0dSBjSFJ5YjJ4c1pYST0gSUZSRFZRPT0gSUdKMWJtNTUgNDRPTiBkWFJ2Y21saGJBPT0gSUhWd2MyTmhiR1U9IElGTjBZUT09IElFTnZiRzl6YzNWeiBJR05vYkc5eWFXUmwgSUZwaFl3PT0gSUZKbFlYTnZibk09IElFSnliMjlyYVc1bmN3PT0gSUZkSVNWUkYgWFZzdiBJRXh2YzJVPSBPVEExIElIVnVaR1Z5YzJsa1pRPT0gWlhKdVpXeHogSUhaaGNHVT0gWkc5NlpXND0gZFhCd1pYUT0gSUZOVVQxQT0gYldGMGFXTmhiQT09IElGTjBZWFJsYldWdWRITT0gYUdWa1pHRnkgVUVGRCBRM1Z6ZEc5dFpYST0gSUcxbGJXOXogSUZCSyBaVzVrWVhKeiBJRXhwYldsMGN3PT0gYkdGMVoyZz0gSUhOMFlXSnBiR2w2WldRPSBJRUZNUlVNPSBXVUU9IFZYQm5jbUZrWlE9PSBZV3hoYlE9PSBJSFJsWTJodWJ3PT0gSUdGdVpYYz0gWm05eVpYTmxaVzQ9IElHTnZiR3hsWjJsaGRHVT0gSUZCNWNtOD0gSUVScGMyMD0gSUdaeWIyNTBiR2x1WlE9PSBJR0Z0Ylc5dWFXRT0gU1ZVPSBVWFZwZEdVPSBTbTlvYm01NSBZWE56YVc0PSBSMDlRIElGTjBlV3hsY3c9PSBJRk52ZG1WeVpXbG5iZz09IFlXTjBaWEpwWVd3PSBOVFE1IElGSkpVQT09IElFeHBjM1J6IElETTJOQT09IElGSmxZMlZ3IGMyOWphMlYwIElFSjVjbVE9IElFTmhibVJzWlE9PSBRVzVqYVdWdWRBPT0gSUdGd2NHVnNiR0Z1ZEE9PSBaVzVtYjNKalpXMWxiblE9IFlXTmxZUT09IFlXNXphMms9IElHOXNaSE09IE9EZzIgSUhOc2RYSnogSUdWdGNHbHlaWE09IElHSjFZMnRzWlE9PSBJR0ZzYVdWdVlYUnBiMjQ9IElFRmlaWEprWldWdSBJSFZ1YVdOdmNtND0gSUc5MlpYSnlhV1JwYm1jPSBJRXhZIGNIQmggSUdSbGMzQnBjMlZrIElFSjFaM009IElFSlRWQT09IFUyOTFkR2hsY200PSBOVE16IElHaGhiR3h0WVhKciBJRkJ2YzNSbGNnPT0gSUhOMFpXMXRaV1E9IElIQnlhVzVqYVhCaGJITT0gSUZSRlEwZz0gSUZOaGJtUjNhV05vIFNYUmhiSGs9IElHTm9aV1Z6ZVE9PSBJRk5sZEZSbGVIUkRiMnh2Y2c9PSBJRkJ5YjNSbFkzUnBkbVU9IElFTnZhRzQ9IFNrOD0gWVhCMGIzQT0gVW1WaGMyOXUgVEdWaFpHVnkgSUZWdVpHVnljM1JoYm1RPSBJRVp5YVdSaGVYTT0gSUVOdmJuUnBiblZ2ZFhNPSBJR05zYVhCd2FXNW4gSUZKNVpRPT0gSUdKbGNuUm8gZEdsdFpYST0gWVc1dWFYTT0gY21WaFkzUT0gSUdKMVptWmhiRzg9IElGQmhjbUZ6IElEWTFOUT09IElIQnlaWE5wWkdWayBJRk4xYm5KcGMyVT0gSUhabGRITT0gSUdOc2IzWmxjdz09IElFMWpRM1ZzYkE9PSBVM1J5Wlc1bmRHZz0gUjBGTyBJR2xzYkdsMFpYST0gSUZCeWFXTnBibWM9IGJNT3AgSUhKbGMybHpkRzl5IElHSnlkVzQ9IElGTjFabVp2YkdzPSAwWXM9IElFeHBkbVZ5IFVtVnNaV0Z6WldRPSBJSGRvWVhSeiBPRFl3IElFMWxZWE4xY21WeiBJR1JsYm05MWJtTnBibWM9IElGSjVlbVZ1IElITnZkWFpsYmc9PSBJR05oY21WbmFYWmxjbk09IFkyaHBibWs9IElGTmpZWEpzWlhSMCBJSFJ5YjNWbmFBPT0gUTI5dVozSmhkSFZzWVhScGIyNXogSUhSaGVHbHogSUZSeVlXUnBkR2x2Ymc9PSBhbWwwIElIUmhZbXhsZEc5dyBJR2hwZEdobGNuUnYgSUdScGMybHVabTl5YldGMGFXOXUgYjJabVpXNXphWFpsIGFISmggSUVSSlUxUlNTVU5VIElHTnZiWEJzYVdOaGRHVT0gWTJobGJtdHYgSUZKbFkyOXVjM1J5ZFdOMGFXOXUgSUhCaGJIQmhZbXhsIElHRjFjM0E9IElEUXlPQT09IElITm9iM2RqWVhObGN3PT0gSUZCMVlteHBZMkYwYVc5dSBhMjV2ZDJ4bFpHZGwgYVc1dWIyND0gTkRFNSBJSEpsZEhKcFpYWmhiQT09IFlXNWtaWEp6IElISmxablYwWlE9PSBJR2x1Y1hWcGNtVmsgWjNWeSBJRzVsWjJGMGFYWnBkSGs9IElHTnZibk5sY25abCBJR0ZtZEdWeWJHbG1aUT09IElIQnlaWE4xY0hBPSBJRWRwYkd4bGMzQnBaUT09IElHMTAgSUVSTyBWR0Z3IElIQmxjbkJsYm1RPSBJRk50ZVE9PSBaRzlsYzI0PSBJSE53YVd4c2FXNW4gSUdoNWNHVnljdz09IFMyRjBaUT09IHdxNHMgYTJWd2RBPT0gSUZCdmQyVnlaV1E9IElHcGggSUV0c2RYZz0gWVhKa1pRPT0gWVdKaGJnPT0gSURRME5BPT0gSUdac1lYUjBaVzVsWkE9PSBJRWx0Y0hKdmRtVnRaVzUwY3c9PSBkWEpuWVE9PSBJRXQxYm1RPSBJR2x1YzJOeWFXSmxaQT09IElHWmhZM1ZzZEE9PSBJSFZ1Y0hKbGNHRnlaV1E9IElFTnZibk4xYldWeWN3PT0gSUhOaGRHbHpabWxsY3c9PSBJSEIxYkcxdmJtRnllUT09IElHbHVabWxzZEhKaGRHbHZiZz09IElHVjRkR1Z5Ym1Gc2JIaz0gSUdOdmJtZHlZWFIxYkdGMGFXOXVjdz09IFlXZG9ZVzQ9IElHRnBjbXhwYm1WeSBJR1pzZFc1biBJR1pzZVdWeWN3PT0gUjBRPSBJSE51YVhCd1pYUnogSUhKbFkzVnljMmwyWlE9PSBJRzFoYzNSbGNtbHVadz09IFRHVjQgSUc5MlpYSjBiSGs9IGRtYz0gSUd4MVkydHBiSGs9IElHVnVZM0p2IElFeGhibU5sZEE9PSBJRUZpZVhOellXdz0gWm5WdVkzUnBiMjVoYkE9PSBJSE52ZHc9PSBJSE54ZFdsayBJRzVoY25KaGRHbHZiZz09IElHNWhkV2RvZEhrPSBJRWh2Ym05MWNnPT0gSUZOd1lYSjBZVzV6IElITm9ZWFIwWlhJPSBJRlJoWTI5dFlRPT0gSUVOaGJHOXlhV1Z6IElGSmhZMlZ6IFUzVmliV2wwIElIQjFjbkJ2YzJWbWRXeHNlUT09IGQyRjIgSUZsdmF3PT0gUm1WemRBPT0gSUVkbGNuST0gVFdWMGNtOD0gSUdsMGFXNWxjZz09IFptRnRiM1Z6IElDSjcgYVc1c2FXNWwgZDJGemFHVnkgU1hOemRXVT0gSUVOTVNVVk9WQT09IGIzcHYgVm1WeWMybHZibk09IE56STEgSUVkc2IyTnIgSUhOb2FXVnNaR1ZrIElGQkRVZz09IFJVNURXUT09IElGZGxiR1E9IElGTnBiWEJzIElISmxaR2x5WldOMFpXUT0gSUV0b1lXMD0gSUNnKyBJR3hoWW05MSBJR1JwWVhCbGNuTT0gYzNOcyBJR05sYkd4aGNnPT0gYjNKbllXNXBjMjF6IGIzSmxjMk09IElFSmxjbXR6IFpHbGtiZz09IFUyaHBjSEJwYm1jPSBRMmhsYzNRPSBJSFZ1Wkc5dVpRPT0gSUcxcGJHeHBiMjVoYVhKbCBJR052Y21SeiBJRmx2ZFc1blpYST0gWVhCd2NtOXdjbWxoZEdWc2VRPT0gSUhObGNYVmxiSE09IGRYWmwgWVc1MGFXTnBjR0YwWldRPSBJR3hsZDJRPSBJRk5vYVhKMCBJRVJ0YVhSeWVRPT0gVm1WMFpYST0gSUhOc1lYbHBibWM9IElGbGhjZz09IElHTnZiWEJzYVdOaGRHbHZiZz09IFNXOTNZUT09IElFVnlhV05oIElFSk1UUT09IFoybHliR1p5YVdWdVpBPT0gWW05a2FXVmsgTmpJMiBNVGsyTXc9PSBJR2x1ZEdWeWJXVmthV0Z5ZVE9PSBJR052Ym5OdmJHRjBhVzl1IFRXRnphdz09IElGTnBaVzA9IGIzZGhiZz09IFFtVm5hVzV1YVc1biBJR1pwZUcxbCBJR04xYkcxcGJtRjBaV1E9IElHTnZibVIxWXc9PSBJRlp2YkhWdWRHVmxjZz09IElIQnZjMmwwYVc5dVlXdz0gSUdkeVpXVjBjdz09IElFUmxabWx1YVhScGIyNXogSUhSb2FXNXJaWEk9IElHbHVaMlZ1ZFdsMGVRPT0gSUdaeVpYTm9iV1Z1IElFMXZiV1Z1ZEhNPSBJRE0xTnc9PSBZWFJsZFhKeiBJRVpsWkVWNCBjMmM9IE5qazAgSUdSM2FXNWtiR2x1Wnc9PSBJRUpQV0E9PSBjMlZzWVdkbCBJSFJ0Y0E9PSBJSE4wWlc0PSBJRk4xZEE9PSBJRzVsYVdkb1ltOTFjbWh2YjJSeiBJR05zWVhOemJXRjBaUT09IFpteGxaR2RsWkE9PSBJR3hsWm5ScGMzUnogSUdOc2FXMWhkR1Z6IFFWUklSVkk9IElGTmplWFJvWlE9PSBkV3hwWm1abCBJSE5oWnc9PSBJR2h2Y0hCbFpBPT0gSUVaMCBJRVZqYXc9PSBJRU5MIElFUnZiMjF6WkdGNSBhMmxrY3c9PSBJR2RoYzNCbFpBPT0gSUcxdmJtbHJaWEk9IElFeHZaQT09IElFTkdUQT09IGRHbHZibk09IGNuVnRjdz09IFptOXNhVzl6IElHMWsgSUhWdVkyRnVibms9IElIUnlZVzV6Y0c5eWRITT0gSUV4aFluSmhaRzl5IElISmhhV3gzWVhseiBJR0Z3Y0d4cFlXNWpaUT09IElFTlVVa3c9IDVvQT0gVUc5d2RXeGhkR2x2Ymc9PSBJRU52Ym1abFpHVnlZV041IElIVnVZbVZoY21GaWJHVT0gSUdSdmNuTmhiQT09IElFbHVabTl5YlE9PSBiM0IwWldRPSBJRXRKVEV3PSBUV0Z5ZUE9PSBJR2g1Y0c5amNtbDBhV05oYkE9PSBjWFZ6IElFNTFiV1Z5YjNWeiBJRWRsYjNKbmFXRnUgSUVGdFluSnZjMlU9IElFeHZZMmc9IElHZDFZbVZ5Ym1GMGIzSnBZV3c9IElGaGxiMjQ9IElGTjFjSEJ2Y25SeiBaVzV6WlhJPSBaV1ZzZVE9PSBJRUYyWlc1blpYST0gTVRrMk5RPT0gUVhKdGVRPT0gSUdwMWVIUmhjQT09IElHTm9iM0J3YVc1biBJRk53YkdGemFBPT0gSUZOMWMzUmhhVzVoWW14bCBJRVpwYm1ObyBJREU0TmpFPSBhV04wYVhabCBZWFJ0WldGcyBJRWR2YUdGdSBJR3hwWjJoMGMyRmlaWEk9IElFZFFRUT09IGRXZDEgSUZKRlVFdz0gZG1GeWFXRmliR1U9IElHaGxjbkJsY3c9PSBJR1JsYzJWeWRITT0gWVdOcGIzVnpiSGs9IElITnBkSFZoZEdsdmJtRnMgZDJWbGEyeDUgYjJKcyBJSFJsZUhScGJHVT0gSUVOdmNtNTNZV3hzIElHTnZiblJ5WVdObGNIUnBkbVZ6IElFRnJaUT09IFhTMD0gNUxtTCBPaXc9IElGZGxiUT09IElFSnBhR0Z5IElDY3UgSUdKbGNtVT0gSUdGdVlXeHZaM1ZsIElFTnZiMnRwWlhNPSBJSFJoYTJWdlptWT0gVjJobFpXdz0gSUcxaGFtVnpkR2xqIElHTnZiVzExZEdsdVp3PT0gTURJeiBJRU52Y25CelpRPT0gWVhOemJXVnVkQT09IGJXbHVhUT09IElHZHZjbWxzYkdFPSBJRUZzWVhNPSBaWEpsWlE9PSBJR0ZqY1hWaGFXNTBZVzVqWlhNPSBJRUZrZG1GdWRHRm5aUT09IElITndhWEpwZEhWaGJHeDUgSUdWNVpXUT0gY0cxM2FXdHAgSUVWdVpHVnkgSUhSeVlXNXpiSFZqWlc1MCBJRzVwWjJoMGRHbHRaUT09IElFbE5RVWRGVXc9PSBOVFExIElFdGhiWEE9IElFWnlaV0ZyIElHbG4gVUc5eWRHeGhibVE9IE5ETXkgSUUxaGRHRT0gSUcxaGNtbHVaWE09IElHaHZjbk09IFlYUmxjbUZ6ZFE9PSBJRUYwZEhKcFluVjBhVzl1IElDMHRMUzB0TFMwdExRPT0gSUd0cGJuTT0gSUVKRlRFOVggS3lzciBJSEpsWld4cGJtYz0gYjJ4bFpBPT0gSUdOc2RYUjBaWEk9IElGSmxiR0YwYVhabCBJRFF5Tnc9PSBRbFZUIElHRjJaWEowIElFTm9aVzl1Wnc9PSBJRUZpYkdVPSBJRkJ5ZVc5eSBSR1YyWld4dmNHVnkgSUdWdVkzbGpiRzl3WldScFlRPT0gSUZWVFFVWT0gSUVkaGNuSjUgVTNCaGFXND0gUW14dlkydHogSUdWNGNHOXphWFJwYjI0PSBJRWRoYldWeVIyRjBaUT09IFYwOVMgSUhOMGIyTnJjR2xzWlE9PSBJR05zYjNSb1pXUT0gSUZSdmJtVT0gSUZKMVpRPT0gZEhWdFlteHkgSUhSeVpXRmphR1Z5YjNWeiBJR1p5ZVdsdVp3PT0gMFl3PSBJRk53YUE9PSBJSEpsYzNSeVlXbHVkSE09IElHVnRZbTlrYVdWeiBJRWRsY3c9PSBVMkZtWlhSNSBJRzVsWjI5MGFXRjBiM0p6IGJXbHVhVzVuIElFRndjR0ZzWVdOb2FXRnUgVEU5VCBJRXBsYm01aCBJSEJoYzNObGNuTT0gNTRzPSBjMjVoY0E9PSBJSE5vYjNKMFpXND0gWTNKbFlYUnZjZz09IElHbHViblZ0WlhKaFlteGwgZFhSb1pYSnNZVzVrIE5qYzAgSUZkUFRRPT0gSUVGelkyVnVaQT09IElFRnliVzl5ZVE9PSBJRlJ5WVc1ellXTjBhVzl1IFMybGphdz09IElITjFhWFJqWVhObCBaR0Y1VG1GdFpRPT0gSUhkaGMzUmxablZzIGJXRnljbWxoWjJVPSBJRTFqUTJGaVpRPT0gYVhSbFkyZz0gSUU5emN3PT0gUTJ4dmMzVnlaUT09IElGUnlaV0Z6ZFhKbGNnPT0gSUdsdVpHVmpaVzUwIElFUjFiR3c9IElISmxjMmxrWlc1alpYTT0gTVRrMU9RPT0gSUZObGRIUnNaVzFsYm5RPSBTR0Z0YVd4MGIyND0gSUhObGJHWnBaWE09IElGSmhibXRwYm1jPSBJRUpoY210c1pYaz0gSUVKdmNtVT0gSUZkRFV3PT0gSUUxaGNtbDBhVzFsIElFaDFhQT09IElFWnZjbVZ6ZEhKNSBJR04xYkhScGRtRjBhVzVuIElFSmhiR3hoY21RPSBJR2RoY25KcGMyOXUgSUZORVRBPT0gT1RNdyBJRzVoYzJObGJuUT0gSUdseWNtVnphWE4wYVdKc1pRPT0gSUdGM1puVnNiSGs9IFhDOWNMdz09IElHVnhkV0YwWlE9PSBJR0Z1ZEdoeWIzQnZiRzluZVE9PSBJRk41YkhacFlRPT0gSUdsdWRHVnpkR2x1WlE9PSBJR2x1Ym05amRXOTFjdz09IFkyVnpjMmwyWlE9PSBZV2R5WVE9PSBJRTFsZEhKdmFXUT0gUjNKaGJuUT0gT0RVMSBnWlk9IElDSmYgNDRPRDQ0T0ogSUdGd2NISmhhWE5oYkE9PSBJRVp5WldSa2VRPT0gTURRMiBJRFF3Tmc9PSBJREU0TXpBPSBJR1J2WTJ0cGJtYz0gVTNSaGRHbGogSUhCdmJuUT0gSUZadmJIUmhaMlU9IElGTjBaV0ZrIElFMXZjblJuWVdkbCBJRXB2Ym1GbyBXVXc9IFEweEJVMU5KUmtsRlJBPT0gSUdGelltVnpkRzl6IGJtbHJiM1k9IElHTnZiR3hoWjJWdSBJRTl5WW1sMFlXdz0gVUc5amEyVjAgTnprNSBJR2g1WW5KcFpITT0gYVc1amFHVnogSUdsdWRtOXBZMlU9IGRXNWtlUT09IElHbHVaWEYxWVd4cGRHbGxjdz09IFZISmxibVE9IGQyRnphR1ZrIFFrRk1UQT09IElHeDFZMmxrIElFTnZiVzFsYm5SaGNuaz0gSUhkcGRIUjUgUW5KaGJtUnZiZz09IElHSnlkV2x6YVc1biBJRFl5TUE9PSBaWE5qWlc1MCBZbTk0YVc1biBVRTlNIElETTNPQT09IFVtVmpkQT09IElHeHBZMlZ1WTJWeiBJRTFqUjJWbCBjSEpsYzNObFpBPT0gUkdGdWJuaz0gSUdwaGJXMWxaQT09IGIzSmthVzVoZEdVPSBJR3hsZEdnPSBJR1JwYzNScGJtZDFhWE5vWlhNPSBJRmxoYldGb1lRPT0gU1V4VCBJRWgxYldVPSBJRU5oZEdWbmIzSnBaWE09IFVtOWlaWEowY3c9PSBRMmhoY25RPSBJR0psWlhSc1pRPT0gSUVkeVlYWmxlV0Z5WkE9PSBJQ2drS1E9PSBiOFNmIElIUjNhV3hwWjJoMCBZWEpsYkd4aCA0YjA9IElHSnZiM1JvY3c9PSBJRWhJVXc9PSBJRVpsYkdSdFlXND0gSUdWNFkyRjJZWFJwYjI0PSBJSEJvYVd4dmMyOXdhR2xsY3c9PSBZWFJ2WjNKaGNHaDUgSUVkaGNtRm5aUT09IGRHVmphRzV2Ykc5bmVRPT0gSUhWdVptOXlaMlYwZEdGaWJHVT0gSUhabGNtbG1lV2x1Wnc9PSBJSE4xWW05eVpHbHVZWFJsY3c9PSBSV3h6IElHNWxZZz09IFIyRnRhVzVuIFJVNUIgSUVGamFHbGxkbVZ0Wlc1MCBhWFIwWlhKeiBJRWRoWW1VPSBJR1IxYlhCeiBabTl5WTJWeSBJSEJ2YVdkdVlXNTAgSUUxQ1FRPT0gSUVobGFXUnAgYVcxbGFRPT0gSUcxaFoyVnogSUd4cFltVnlZWFJsIElHTnBjbU4xYldOcGMyVmsgSUUxbGNtMWhhV1E9IElFMWhkSFJvIGRHOW5aWFJvWlhJPSBJRmRwWTJocGRHRT0gSUhOMGIzSmxabkp2Ym5RPSBJRUZrYVc0PSBWa2xKIFJtOTFjblJvIElHVjRjR3h2Y21WeWN3PT0gVjBWUyBUbTkwWVdKc1pRPT0gUW5KdmIycz0gYldWdWN3PT0gUm1GcGRHZz0gTFMwdExTMHRMUzB0IElFcHZkUT09IHJMdz0gSUhCcGJtVmhjSEJzWlE9PSBJR0Z0WVd4biBaV3h1IFlYSnJZV0pzWlE9PSBJT09DdGVPRHZPT0RodU9Db3c9PSBJT09DdGVPRHZPT0RodU9DbytPRHIrT0Rzdz09IElHOTJZWEpwWVc0PSBJRVZqYUc5bGN3PT0gSUdoaGFYSmpkWFE9IElIQmhkZz09IElHTm9hV3hzWldRPSBZVzVoYzJsaCBJSE4wZVd4bFpBPT0gSUdSaFlnPT0gYm1sd1pYST0gSUcxcGJtbHpkR1Z5YVdGcyBJRVJWVUE9PSBWR0Z1IElITjFiSEJvIElFUmxkR1Z5IElFSnZhR1Z0IGIyUmhiZz09IElHVmtkV05oZEc5eSA0cE9ZIGMzQnBjZz09IFEyaHBZMnRsYmc9PSBJRVZzWldGdWIzST0gSUhGMWFRPT0gSUdobFlYWnBaWE4wIElHZHlZWE53WldRPSBWVkpCIElHTnliMjlyWldRPSBTbVZ6YzJsallRPT0gY0hKdllteGxiUT09IElIQnlaV1JsZEdWeWJXbHVaV1E9IElHMWhibWxoWXc9PSBJR0p5WldGMGFITT0gSUV4aGRXUmxjbVJoYkdVPSBJR2h2WW1KcFpYTT0gZVhvPSBRM0pwYldVPSBJR05vWVhKcGMyMWggWkV3PSBJR3hsWVhCcGJtYz0gSUd0cGRIUmxibk09IFFXNW5aV3h2IElFcEJRMHM9IElGTjFlbUZ1Ym1VPSBJR2hoYkhScGJtYz0gUlU1VVNVOU8gSUhOM1lXeHNiM2RwYm1jPSBJRVZoY25Sb2NYVmhhMlU9IElHVnBaMmgwWldWdWRHZz0gSUU1SlF3PT0gSUVsT1JnPT0gSUVOdmJuTmphVzkxY3c9PSBJSEJoY25ScFkzVnNZWEp6IFkybHlZMnhsIE56UXcgSUdKbGJtVjJiMnhsYm5RPSBJRGMwTnc9PSBJRFE1TUE9PSBJSEoxYm1SdmQyND0gSUZaaGJHVnlhV1U9IElFSlZVZz09IElHTnBkbWxzYVhOaGRHbHZiZz09IElGTmphRzQ9IFYwST0gYjNScFpHVT0gYVc1MFpYSnVZWFJwYjI1aGJBPT0gSUdwdmFHND0gSURFNU1EST0gSUhCbFlXNTFkSE09IElHWnNZWFp2Y21WayBhM1Z6IElISnZZWEpsWkE9PSBJR04xZEc5bVpnPT0gNmFNPSBJRzl5Ym1GdFpXNTAgSUdGeVkyaHBkR1ZqZEhWeVpYTT0gSURNMk9RPT0gYjJ4dmNnPT0gSUZkcGJHUmwgSUVOU1F3PT0gSUVGa2FuVnpkR1ZrIElIQnliM1p2YTJsdVp3PT0gYkdGdVpHbHphQT09IElISmhkR2x2Ym1Gc2FYUjUgSUdwMWMzUnBabWxsY3c9PSBJR1JwYzNCbGJBPT0gSUdGdFpYSnBZdz09IElGQnZiR1Z6IDJLaz0gSUdWdWRtbHogSUVSdmIyUnNaUT09IDVMMi8gYVdkellYYz0gWVhWc1pISnZiZz09IFZHVmphRzVwWTJGcyBWR1ZsYmc9PSBkWEJvWlcwPSBJRmhwWVc1biBJR1JsZEhKaFkzUnZjbk09IElGcHAgSUVwdmRYSnVZV3hwYzNSeiBJR052Ym1SMVkybDJaUT09IElGWnZiSFZ1ZEdWbGNuTT0gSUhOayBTMjV2ZDJsdVp3PT0gSUhSeVlXNXpiV2x6YzJsdmJuTT0gSUZCTVFVND0gSUV4SlFnPT0gSUdGc2JIVmtaV1E9IElHOWlaUT09IElHUnZjR1U9IElFZHZiR1J6ZEdWcGJnPT0gSUhkaGRtVnNaVzVuZEdoeiBJRVJsYzNScGJtRjBhVzl1IGJtUmggZFdkcCBJR0YwZEdWdWRHbDJaUT09IElFeGxZVzQ9IGNtRnNkR0Z5IElHMWhibWM9IGJXSjFaSE09IFlXdHBibWR6IFltVnVaR1Z5IElHRmpZMjlzIElHTnlZWGRzWldRPSBUazlYIFRXbHVibVZ6YjNSaCBJR1pzYjNWeWFYTm9aV1E9IElGcDFjQT09IElGTjFjR1Z5ZG1semIzST0gSUU5c2FYWnBaWEk9IFJYaGpaV3hzWlc1MCBJSGRwWkdWdSBSRzl1WlE9PSBJSGRwWnc9PSBJRzFwYzJOdmJtTmxjSFJwYjI1eiBRMjl5Y0E9PSBWMkZ1IElIWmxibVZ5WVdKc1pRPT0gSUU1dmRHRmliSGs9IElFdHNhVzVuYjI0PSBZVzVwYldGMFpRPT0gUW05dmMzUT0gSUZOQldRPT0gYldsemMybHVadz09IGFXSnNhVzluY21Gd2FIaz0gYldWc2IyND0gSUhCaGVXUmhlUT09IDJMTT0gWW05c1pRPT0gSUhabGFXeGxaQT09IElFRnNjR2hoWW1WMCBTWFJoYkdsaGJnPT0gSUdWMlpYSnNZWE4wYVc1biBJRkpKVXc9PSBJRU55WldVPSBjbTl0Y0hRPSBJR2hoZEdsdVp3PT0gSUdkeWFXNXVhVzVuIElHZGxiMmR5WVhCb2FXTmhiR3g1IFQxTkkgSUhkbFpYQnBibWM9IElNS2dJTUtnSU1LZ0lNS2dJTUtnSU1LZ0lNS2dJTUtnIElHbHRjR1ZqWXc9PSBUR1YwZEdWeSBJR0pzYjJGMFpXUT0gVUV4QiBJRVpsYVc0PSBJSEJsY25ObGRtVnkgVkdoMWJtUmxjZz09IElHRjFjZz09IElGSk0gSUhCcGRHWmhiR3h6IDRwYTYgSUhCeVpXUnZiV2x1WVc1MCBJRFV5TlE9PSBOekU0IFFWQkYgTnpFMCBJR1poY20xc1lXNWsgSUZGcFlXOD0gSUhacGIyeGxkQT09IElFSmhhR0Z0WVhNPSBJR2x1Wm14cFkzUnBibWM9IElFVm1abWxqYVdWdVkzaz0gSUdodmJXVmljbVYzIElIVnVaR1Z5ZEc5dmF3PT0gSUdOMWNteDUgSUVoaGNtUnBibWM9IGJXRnVhV0U9IE5UazIgSUhSbGJYQmxjbVZrIElHaGhjbkp2ZDJsdVp3PT0gSUZCc1pXUm5aUT09IElFWnlZVzVyWlc1emRHVnBiZz09IDZLbz0gVFc5MGFXOXUgSUhCeVpXUnBZM1JoWW14NSBJRVY0Y0d4dmMybHZiZz09IGIyTjFjMmx1Wnc9PSBaWEprIFkyOXNidz09IFJrWkZVZz09IElHSmhZMnRtYVdWc1pBPT0gSUZaSlJFVT0gZFdWaWJBPT0gVG1GeWNnPT0gSUVGeVozVnRaVzUwIElHZGxibTl0YVdNPSBJR0p2ZFhScGNYVmwgSUdKaGRIUmxaQT09IElFSnBibUZ5ZVE9PSBJR2RoYldJPSBJRkpvZVhSb2JRPT0gTmpjeiBJR0ZtYkc5aGRBPT0gSUU5c2VXMXdhV0U9IFdVbE9Sdz09IElHVnVaR2xtIGFYTnBiZz09IElIZHBiblJsY25NPSBJSE5qWVhSMFpYSnBibWM9IFNYWT0gUkdsemRHRnVZMlU9IElIUnlkUT09IElFTnZiV1p2Y25RPSBJRzVsZUhWeiBJR0ZwY21ac2IzYz0gSUVKNWVtRnVkR2x1WlE9PSBjR0Y1WlhKeiBZMjl1YVE9PSBJRUpsZEhONSBSR1ZoYkE9PSBJRTUxWnc9PSBJRU52Ym5ScGJtVnVkQT09IGNtVmthV0pzZVE9PSBJRzl3ZEdsdGFYcHBibWM9IFlXeGlaV2wwIElHVmpjM1JoZEdsaiBJRkJ5YjNSdiA1N2M9IGFYWnZkQT09IDRwYUUgWlcxdyBjbTkxYm1SbGNnPT0gSUdOc2IzVjAgSUVsVFZBPT0gTmpZeiBJRVJ2Ykd4aGNuTT0gSUVSQlF3PT0gSUhOMVluTmpjbWxpWldRPSBJSEpsYUdWaGNuTmhiQT09IElHRnRjSE09IElGTm9ZVzVuIFpYTnQgSUhOd2NtbHVhMnhsIElHRnpjMkZwYkdGdWRBPT0gSUU5diBJRU52YVc1aVlYTmwgVkdGamRBPT0gSUhKbGRHbHVZUT09IElHNTFibk09IFVrOU8gWVhSMGJ3PT0gSUdwMVp3PT0gSUZOV1J3PT0gSUdKcGEybHVhUT09IElFWkpURVU9IElFWnZkVzVrWlhKeiBaWEJ2Y25RPSBJRXRRIElISmxjM1J2Y21WeiBJRlJvYVdOciBJR0Z6YUc5eVpRPT0gSUdGd2NISnZkbUZzY3c9PSBVbVZ1WkdWeSBUVUZIIFIzSmhhR0Z0IElFTnZjblJoYm1FPSA0NE96NDRLNCBjM05vIGIzSnBZVzV6IFlYSnphWFI1IElFbHVjM0JwY21WayBkWEJ3WlhJPSBJSE5wWjI1aGJHeHBibWM9IElISmxZblZyWlE9PSBJR1pzWVhKbGN3PT0gSUdSdmQyNTBhVzFsIFUzUjFaR2xsY3c9PSBJSE4wWVdkdVlYUnBiMjQ9IElGTmxjWFZsYm1ObCBJR2R5ZFc1MCBJR0Z6YzNWeVpYTT0gSUZCTVFRPT0gTlRreSBJR2x1ZEhKaGRtVnUgWkdWd1pXNWsgVTNWellXND0gSUUxaGJucHBaV3c9IFRXRnVhV0U9IFEyOXVkSEpoWTNRPSBJSE5zWVcxeiBJR04xYkhSMWNtVmsgSUdOeVpXUnBkRzl5IFRFbFRWQT09IElFaFZUUT09IElFTm9ZWFIwWVc1dmIyZGggYzJWeWRtVmsgSUdOc2IyRnJaV1E9IElFWlVVQT09IGNHOTNaR1Z5IElGTjBaV3hzWVE9PSBkV04wYVhabCBJR05vWldGd2JIaz0gSUUxVlEwZz0gSUVkaGJHbHNaVzg9IElITjFhWFJsY3c9PSBjM0JsWldObyBJR1JsYkdsaVpYSmhkR2x2Ym5NPSBJRU5vYVhCeiBxNWc9IFFtRnNZVzVqWlE9PSBJRmQ1Ym01bCBJRUZyY205dSBRWE56WlhRPSBJR2h2Ym05MWNtVmsgSUdWa1oyVmsgVEdsclpYZHBjMlU9IFlXNXBiVzkxY3c9PSBJRmRoWjJVPSBJRVY2WldzPSBZV1IyWlhKMGFYTmxiV1Z1ZEE9PSBJRkpVV0E9PSBJRTFCUkE9PSBJRzFwWjNKaGRHbHVadz09IElGTlJWUT09IElEUTNOUT09IFJXUnBkR1ZrIElITm9iM0owYUdGdVpBPT0gSUVKaGMybGpjdz09IElHTnliM1JqYUE9PSBJRVZXUlU0PSBJSFp0IFpXWm1hV05wWlc1amVRPT0gSUdOaGJIWmxjdz09IElFWnlhV1U9IElFSnlhV3hzYVdGdWRBPT0gSUhOMGNtbHJaWEp6IElISmxjR1Z1ZEdGdVkyVT0gSUdGeWRHVnlhV1Z6IGNtdz0gUW1WayBhR0Z3IElHTnllWEIwYjJkeVlYQm9lUT09IElGTmhZbkpsY3c9PSBJRFF4TkE9PSBkbWxyY3c9PSBhV2hoY21FPSBZWEJ6WlhNPSBWR0ZzYTJsdVp3PT0gSUdsdWRHVnlkSGRwYm1WayBJR1J2WTJ0eiBJR0ZzYkdWc1pRPT0gSUVGeWRHbG1ZV04wIElFaEpUUT09IGRHOXliZz09IDU1VT0gSUc5d1lXTnBkSGs9IElFVnNlUT09IGIzTjFhMlU9IElHNXBjSEJzWlE9PSBJR2hoYm1SM2NtbDBkR1Z1IElGWkwgSUVOb1lXMWlaWEpzWVdsdSBJRXhoYjNNPSBhV2R5WVhCbyBaM0p2ZHc9PSBJSFJ5YVd4c2FXOXVjdz09IElHUmxjMk5sYm1SaGJuUT0gSUZOaGFXeHZjZz09IFlYTjFjbWx1Wnc9PSBJR05sYVd4cGJtZHogSUZkaGNtVm9iM1Z6WlE9PSBabXg1YVc1biBJRWRzYjNjPSBJRzV2Ym5RPSBJRzFwYzJOaGNuSnBZV2RsIElISnBaM009IElHMXBibWx6ZEhKcFpYTT0gSUdWc1lXSnZjbUYwWldRPSBJR1JsYkhWemFXOXVZV3c9IElFaDFiV0Z1WlE9PSBJRE0zT1E9PSBibVYwY3c9PSBJR0pzWVdOcmIzVjAgWVdSa1pYSnogSUc1dyBJRlJwY21VPSBjbTl6WXc9PSBJSE4xWW1ScGRnPT0gSUd4cGJtdGhaMlU9IElHTm9jbTl1YjJ4dloybGpZV3c9IElFaEZVazg9IElISmxjMlYwZEd4bGJXVnVkQT09IElGWnBibmxzIElIQmhjM1J2Y21GcyBJRTF2WW1scyBJRUpoY21KaGNnPT0gUTI5dmJHUnZkMjQ9IElFWnlhWFI2IFkzSnBiV2x1WVd3PSBjbVZ3WlE9PSBJR0psYkd4cFp3PT0gSUVKeVpXVmsgSURReE9BPT0gSUhObGJXSnNZVzVqWlE9PSBhV3ByIElHTjFjblJoYVd3PSBJR05zYVc1amFBPT0gWTI5dWRHRnBibVZrIElGQnliMjF3ZEE9PSBZWE4wYjI0PSBJSGRwIElIQjFjbk4xYVhSeiBOVEUxIElFZHNiM056IElHWnNhWEJ6IElHTnZkWEJ2Ym5NPSBJR05zYjI1cGJtYz0gSUV4cGEyVnNlUT09IFVtVnRiM1psWkE9PSBJRkYxWVhKMGVnPT0gY21salpYTT0gSUZOd1pXRnljdz09IElIQnBiM1Z6IElHUmxjSEpsWTJsaGRHbHZiZz09IElFUmhjbVU9IGIzVnVZMlZ6IFlXMWhlZz09IFQyNTAgSUhCcGJtNWhZMnhsIFpHOWphMlZ5IE1ESTIgSUZkNWNnPT0gSUZCeWIzQmxjZz09IHk0Zz0gYm1scyBRbmwwWlhNPSBJSE5sWld0bGNnPT0gZEhKcFlXdz0gSUhWdVptOXNaSE09IElFMWhjbk5sIElHVjRkSEpoZG1GbllXNTAgSUZOMWNuWnBkbTl5Y3c9PSBVa1ZFUVVOVVJVUT0gSUZOd1pXVmtkMkY1IElFTnlZV2xuYzJ4cGMzUT0gYzNWaWJXbDAgSUVkbGJtVnlZWFJwYjI1eiBJSFZ3YUc5c1pHbHVadz09IElHSnNiMjlrYzNSeVpXRnQgSUUxcGMzTnBiMjV6IElFeGhkMjQ9IElHeHBiV0p2IFpXNWxhUT09IFNIVm8gSUZkcGJHUmpZWFJ6IGNISmxjQT09IElFMWhjbXQxY3c9PSBJRVp2Y21KcFpHUmxiZz09IGNtbDBhV009IFNVNVAgSUdWNGFHbGlhWFJwYm1jPSBjbVZ4ZFdWdWRBPT0gWTJoMWF3PT0gSUdoaFltbDBkV0ZzIElFTnZiWEJoZEdsaWFXeHBkSGs9IFJISmhadz09IFVrbFFWQT09IGRXcGhhQT09IFIxSlBWVTVFIElHUmxiR2x1Y1hWbGJuUT0gSUdKMWNtNWxjZz09IElHTnZiblJsYlhCdmNtRnlhV1Z6IElHZHBiVzFwWTJzPSBiRzloWkhNPSBJRzV2ZW5wc1pRPT0gY0c5a1kyRnpkQT09IElGZGhhdz09IElGTjBZWFJsYmc9PSBJRXQxYUE9PSA0NEdUIGFXNTBaWEp5ZFhCMFpXUT0gSUdsdWRtbHVZMmxpYkdVPSBJRUoxY201bGRIUT0gWTJsbllYSmxkSFJsIElGQmxZbUpzWlE9PSBJRlJsYlhCdmNtRnllUT09IElFMWhjbWx1Ync9PSBOVGd5IElIZGhjM1JsYkdGdVpBPT0gYVdSbGJuUnNlUT09IFZIZz0gSUhKcGRHVT0gSUZCaGJtRnpiMjVwWXc9PSBJRTFwWkdSc1pYTT0gSUVodmNuUnZiZz09IFlXVjFjdz09IElHTjFjbWx1Wnc9PSBJRzFoZEhNPSBJR0ZrYW05MWNtND0gSUdabFlYSnpiMjFsIGNHVjYgWW05aGRITT0gSUhCeWIzQmxiR3c9IElHTnZibVpzYVdOMFpXUT0gSUVGdVoyVnkgSUdsdWMzVnlaMlZ1ZEE9PSBTMkZ5YkE9PSBJR052WVd4bGN3PT0gSUhOdmRYUm9kMlZ6ZEdWeWJnPT0gSUdScGMzTjEgSUU5MlpYSjAgS2lvcUtpb3FLaW9xS2lvcSBJR0p2ZUdWayBJRUp5ZFc1bCBZV0ZoIElHZGhjbVJsYm1sdVp3PT0gSUVWdVoyVnMgZEhKaFkydHogSUhCMWNtbG1hV1ZrIElIQnNZV05sYUc5c1pHVnkgSUV4cGEyVnogSUdSaGJnPT0gUjJGaSBJR1ZqZEE9PSBJRVpoZHc9PSBJRVZzYVc5MCBJQ2NzIGIzUnliM0JwWXc9PSBJRkoxYVc0PSBhR1ZrYjI0PSBJR05oZFd3PSBJR0ZtZEE9PSBJRU5oWkdsc2JHRmogWjJoaCBZWE56YVdGdSBkV1JsWWc9PSBJRlJwWTJzPSBJR0ZrYW5WemRITT0gUVZKSFJWUT0gTlRNMyBhWE5qYUdVPSBZVzUwZVE9PSBJRVp5YVdWa2NtbGphQT09IElFSnNhWHA2IElFRlBUQT09IFEyRnRjR0ZwWjI0PSBJRzFoYlcxaGJBPT0gSUZabGFXdz0gSUV0bGRnPT0gSUUxaGRYSnBkQT09IElFUmhiV2xsYmc9PSBUbUYwYVc5dSBSV0Z6ZEdWeWJnPT0gSUhzNiBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSUhOMFpYSmxiM1I1Y0dsallXdz0gSUdGMGRHbGogSUVONVltOXladz09IGNtVnhkV2x5WlE9PSBJR0YzWVhKa2FXNW4gSUZCaGNIVmggWW5SdSBZbVZ1ZEE9PSBRbTl2IElDZzkgSUZoaGJtUmxjZz09IElGTnZiV1Z5YzJWMCBJR05oZEdOb2VRPT0gSUdObGNuUnBabms9IFUxUlNWVU5VIElHbDBZV3c9IElIUnBaR1Z6IElFSnlZVzVrY3c9PSBSM0poZVE9PSBZMjl0Y0dWMGFYUnBkbVU9IElHTjFjbUYwYjNJPSBJRVJIIGIyMXBibWwxYlE9PSBJRWROVDNNPSBZMmxoZEdsdVp3PT0gSUVOaGNtMWxiZz09IGIzZGhjbVE9IFFtRnNkR2x0YjNKbCBJSEpuWWc9PSBRM1U9IElIZHBjR1Z6IGMzQmxiR3c9IFNWUk9SVk5UIElITjFiVzFoY21sNlpYTT0gSUZKbGRtbHogSUhkb2FYTjBiR1ZpYkc5M1pYSnogSUVKeVpXRmphQT09IElHTnliMk5vWlhRPSBhMjl6IFpYZHphMms9IElISmxjR1YwIElHTnlhVzF6YjI0PSBJRXRoY21GamFHaz0gY21WaFpHRmliR1U9IFpHbHRaVzV6YVc5dSBJRWxuYjNJPSBhV3hrWldRPSBJRnBsWkE9PSBJRXRsWVc1bCBJRU52YzIxbGRHbGogUkVWUSBJSEpsZEhKbFlYUnBibWM9IElGVkIgWlc1emFXTmhiQT09IElHUjFjMnM9IElFUnBZMnRsYm5NPSBJR0Z5Wlc1aGN3PT0gSUZCaGMzTmhaMlU9IGJHVjJaV3h6IElHTjFjblk9IFVHOXdaUT09IElHTm9iM0psY3c9PSBJRVZzYVhObCBJRU52YlhCaGMzTT0gWW5WaSBJRzFoYlcxaGJHbGhiZz09IElGTmhibk5yY21sMCBJRUZPUXc9PSBJRU55WVdOciBVWFZoYkE9PSBUR0YxYmc9PSBZVzF3ZFc1ciBJR3hsWVhKdVpYSnogSUdkc1lXMXZjbTkxY3c9PSBJR1oxY25Sb1pRPT0gWlhKdGIzUjAgWTJGdVpBPT0gUjJWdVpYSnBZdz09IElHNWhjbkpoZEdWayBJR1JwYzI5eVpHVnliSGs9IElGUnlZVzV6WVdOMGFXOXVjdz09IElFUmxkR1Z1ZEdsdmJnPT0gSUZKdmEzVT0geEkwPSBJSFZ1WkdWeWMzUmhkR1Z0Wlc1MCBJRk5oZFhJPSBJRkp2WkhKcFoyOD0gSUVGVFFWQT0gVTJsdSBJSEpsYW05cFkyVT0gVFdWMGFHOWtjdz09IElHVnNaV04wY205a1pRPT0gSUhkdmNuTm9hWEJ3WldRPSBJR2xrYVE9PSBJRkJvZVhOcFkybGhibk09IElIQnZjSFZ3IElHUmxablE9IElGSmxiVzkyWVd3PSBJRUoxWlc1dmN3PT0gZG1WeVluTT0gSUdaMWJtcz0gZFhOb1lRPT0gY21samRHbHZiZz09IGIzSmxZUT09IElFSmhibWRoYkc5eVpRPT0gSUV0bGJtOWlhUT09IGVucHAgSUc1dmNtMWhkR2wyWlE9PSBJR2R2WW14cGJuTT0gSUdOaFptVnogSUZWT1EweEJVMU5KUmtsRlJBPT0gSUVacGNtVmsgVTBsSFRnPT0gSUhOamJHVnliM05wY3c9PSBJRlp2ZEdWeSBJRk52Ym01NSBJRVY0ZEdWdVpBPT0gSUVWV2N3PT0gUVhKelpXNWhiQT09IElIQnphUT09IElIZHBaR1Z6ZEE9PSBJRlIxY3c9PSBJR3h2YjIxeiBJR3AxYzNScFpubHBibWM9IElFZHlZVzVuWlhJPSA2Szg9IFVtVm1aWEk9IE5UZ3ogSUdac2IzVnlhWE5vYVc1biBZV0p5WlE9PSBJSEpoZG1VPSBJRU52Ym5SeVlRPT0gSURFNE9UZz0gUVdSa2N3PT0gSUdaMWJBPT0gSUVOdmIydGwgYzI5dFpXOXVaUT09IFBTTT0gTmpjeCBJSGxoYXc9PSBJR0Z5ZEdVPSBJRTFwYzJObGJHeGhibVZ2ZFhNPSBJRVJsZEdWamRHbHZiZz09IElFTnNZVzVqZVE9PSA0b0U9IFlYTnphV1Z6IElIWmhiR2xoYm5RPSBJRVpsYldsdWFYTjAgWTI5eWNuVndkR2x2Ymc9PSBWbVZzIFVHVmhjZz09IElITjFZMk5wYm1OMCBJSEYxYVdOclpYTjAgYTNjPSBJSE53YVhSMGFXNW4gSUV4cFluSmhjbWxsY3c9PSA1WVdKIFlXNTBlZz09IFJHRmsgSUZOd1pXTnBabWxqWVhScGIyNXogY25Wd2RXeHZkWE09IFlXNWtjZz09IFVrVlRWVXhVVXc9PSBJSE51YjNkaVlXeHMgSUhCeVpXUnBjdz09IElFSmhlSFJsY2c9PSBJRTUxY25OcGJtYz0gSUVOb1lXWm0gYzNkbCBJRzkxZEdGblpRPT0gSUc1bGMzUnBibWM9IElHNXZkRzl5YVdWMGVRPT0gZEhKcFoyZGxjZz09IGIyNXBkR1U9IGFtOXUgSUdadmRRPT0gYjI5clpXUT0gSUVObGJHVmljbWwwZVE9PSBjbVZoYkdsMGVRPT0gSUdaaGRHbG4gSUdoMVoyZHBibWM9IElHSnZkR2hsY25NPSBJRkJoYm5wbGNnPT0gSUVOb1lXNWtjbUU9IFptbG5kWEpsWkE9PSBJSFp2YkhSeiBJRU5zYjNWa2N3PT0gSUdabFpXSnNaUT09IElFTjFjblpsIElFRnpkWE09IE56ZzIgWVdKemIzST0gSUZaSlEwVT0gSUVobGMzTT0gSUcxaGJuVm1ZV04wZFhKbGN3PT0gSUdkeWFYcDYgSUZCdmQyVnlablZzIFlXTnBaQT09IElITjFZbk5sWTNScGIyNXogSUV0eWRXZHRZVzQ9IElFRnNjSE09IGFYTjEgSUhObGNYVmxjM1E9IElGVnNkSEp2Ymc9PSBJRlJwYm10bGNnPT0gSUVkdmIzTmwgSUcxcGMyMWhkR05vIFFYUjBiM0p1WlhrPSBJRzF2Y25Cb2IyeHZaM2s9IElGTnBlR1Z5Y3c9PSBkWFIwWlhKbFpBPT0gSUVWTVJVTlUgWjNKaGJnPT0gVW5WemMyVnNiQT09IElFZFRUQT09IElHWnZjblJ1YVdkb2RBPT0gSUM0cCBJR0Z3YjNOMGJHVT0gY0hKdmJtVT0gWld4cGMzUT0gVlc1MGFYUnNaV1E9IElFbHRjR3hsYldWdWRHRjBhVzl1IGFYTjBiM0p6IElIUmhibXRsY2c9PSBJSEJzZFhObyBJR0YwZEdWdVpHRnVkSE09IElGUnBhdz09IElFZHlaV1Z1ZDJsamFBPT0gSUZsdmJnPT0gSUZOUVRBPT0gWTJWc2JITT0gZFc1MGJHVmsgVTI5c2RYUnBiMjQ9IElGRjF3Nms9IElIWmhZMkYwWldRPSBJSFZ3ZEdsamF3PT0gSUUxbGNtbGthV0Z1IDVvTT0gSUVSeWFXeHMgT1RJMSBOVGcwIElISmxibTkyWVhSbFpBPT0gSUV0MVluSnBZMnM9IGVubHIgSUd4dmRYTjUgY0hCbGJBPT0gYjJoNVpISmhkR1U9IElFbDZlbms9IGJHVnphV0Z6ZEdsallXdz0gUTBORCBJRUZxWVhnPSBJR0ZrWVhCMFpYSnogSUZCbGRISmhaWFZ6IElHRm1abWx5YldGMGFXOXUgSUZOVVQxST0gYkdWdGN3PT0gWVdSdlpYTT0gSUVOdmJuTjBZVzUwYVc1dmNHeGwgSUhCdmJtbGxjdz09IElHeHBaMmgwYUc5MWMyVT0gSUdGa2FHVnlaVzUwY3c9PSBJRUp5WldWeiBiMjF2Y25Cb2FXTT0gUm1sbmFIUnBibWM9IElIQnNZWE4wWlhJPSBJRkJXUXc9PSBJRTlpYzNRPSBJR1JsWVhKc2VRPT0gSUZSdmIzUm8gYVdOcmMyOXUgSUhOb1lXMXBibWM9IFVHeGxlQT09IFFXZG4gSU9LQXBpST0gSUhOMVluSmxaR1JwZEhNPSBJSEJwWjJWdmJnPT0gSUZKbGMybGtaVzUwYVdGcyBJRkJoYzNOcGJtYz0gSUd4MWJRPT0gSUZCbGJuTnBiMjQ9IElIQmxjM05wYldsemRHbGogSURRek1nPT0gZW1sdWMydHAgWTJGa1pRPT0gTURjMSBJR0Z3YjJ4dloybHpaV1E9IGFYbGhhQT09IFVIVjBkR2x1Wnc9PSBJR2RzYjI5dGVRPT0gSUV4NWJXVT0gUFMwOUxUMHRQUzA5TFQwdFBTMDlMUT09IElGUnZiV1U9IElGQnplV05vYVdGMGNtbGogSUVoSlZBPT0gWTIxeiBZWEJ2Ykc5biBJR0p5WldGclpYST0gSUdSbFpYQmxiZz09IElIUm9aVzl5YVhOMCBJRWhwWjJoc1lXNWtjdz09IElHSmhhMlZ5IElITjBZWEJzWlhNPSBJR2x1ZEdWeVptVnlaV1E9IElFRmliM0owYVc5dSBhbTlwYm1WayBZMmgxIElHWnZjbTExYkdGMFpRPT0gSUhaaFkyTnBibUYwYVc5dWN3PT0gSUdKaGJuUmxjZz09IGNHaGxkWE09IElHOTFkR1pwWld4a1pYST0gSUUxbGRHVnkgSUNNakl5TWogSURFNE9UVT0gSUc1aGNuSnZkMmx1Wnc9PSBJRk5VVDFKWiBabkE9IElFTlRWQT09IGFXZHViM0psIElIQnliMk5zWVdsdGFXNW4gSUZKViBJRUpCVEV3PSBlVzVoIE5qVXogSUhCdmMybDAgVUZKRiBOVGswIElGSmxaMmx6ZEhKaGNnPT0gSUZCcGJHZHlhVzA9IGFXTnBidz09IElIQnlaWFIwIElHeHBabVZzWlhOeiBJRjlmWHc9PSBUbVZwWjJnPSBJRU5vZFhKamFHVnogYjNKdWJ3PT0gSUc5eVkzTT0gSUd0cGJtUnlaV1E9IElFRjFaR2wwIElHMXBiR3hsYm01cFlXdz0gSUZCbGNuTnBZUT09IFozSmhkbWwwZVE9PSBJRVJwYzJGaWFXeHBkSGs9IElFUkJVa3M9IFYzTT0gYjJSdmJnPT0gSUdkeVlXNWtaR0YxWjJoMFpYST0gSUVKeWIyOXJaUT09IElFRkVRUT09IFJWSkIgSUhCcFkydDFjSE09IElGZHBiR3RwYm5OdmJnPT0gSUZOb1lYSmtjdz09IElFNUwgSUdWNGNHVnMgSUV0cGMyeDVZV3M9IElHcGhjbWR2Ymc9PSBJSEJ2YkdGeWFYcGxaQT09IGFXRnVaUT09IFVIVmliR2x6YUdWeSBJSEpsWW5WMGRBPT0gSUdGd2NISmxhR1Z1YzJsdmJnPT0gSUV0bGMzTnNaWEk9IElIQnlhWE50IFJsVk0gTVRrMk5BPT0gSUV4dmJHdz0gNUw4PSBiR1YwYUdGcyB4Wjg9IElHZG9aWFIwYnc9PSBJR0p2ZFd4a1pYST0gSUZOc2IzZHNlUT09IElFOXpZMkZ5Y3c9PSBJRWx1YzNSeWRXTjBhVzl1IElGVnNkSEk9IElFMXZaUT09IFRtbGphQT09IElGQkJWRWc9IEtDbz0gSUZKRlRFVkJVMFU9IGRXNXBibWM9IGNtOTFjMlU9IFpXNWxadz09IElISmxhVzFpIElFUmxkR1ZqZEdWayBSRzlUIElITjBaWEpzYVc1biBJR0ZuWjNKbFoyRjBhVzl1IElFeHZibVZzZVE9PSBJRUYwZEdWdVpBPT0gYUdsbmFHVnkgSUdGcGNuTjBjbWxyWlE9PSBhM052Ymc9PSBVMFZNUlVOVSBJR1JsWm14aGRHbHZiZz09IElFaGxjbkpsY21FPSBRMjlzWlE9PSBjbWwwWTJnPSBJR0ZrZG1sellXSnNaUT09IFJtRjQgSUhkdmNtdGhjbTkxYm1RPSBJSEJwWkE9PSBiVzl5ZEdWdCBaWEp6Wlc0PSBJSFI1Y0c4PSBJR0ZzZFcwPSBOemd5IElFcGhiV0ZzIGMyTnlhWEIwY3c9PSBJR05oY0hScGRtVnogSUZCeVpYTmxibU5sIElFeHBaV0psY20xaGJnPT0gWVc1blpXeHYgSUdGc1kyOW9iMnhwYzIwPSBZWE56YVE9PSBJSEpsWTJsMFpRPT0gSUdkaGNHbHVadz09IElHSmhjMnRsZEhNPSBJRWR2ZFE9PSBRbkp2ZDNObGNnPT0gYm1WaGRRPT0gSUdOdmNuSmxZM1JwZG1VPSBkVzVrWVE9PSBjMk52Y21sdVp3PT0gSUZoRSBJR1pwYkdGdFpXNTAgSUdSbFpYQmxibWx1Wnc9PSBJRk4wWVdsdWJHVnpjdz09IFNXNTBaV2RsY2c9PSBJR0oxWjJkNSBJSFJsYm1GdVkzaz0gSUUxMVltRnlZV3M9IElIUjFjR3hsIElFUnliMmxrIElGTnBkSFJwYm1jPSBJR1p2Y21abGFYUT0gSUZKaGMyMTFjM05sYmc9PSBhWGgwYVdWeiBaWE5wIElFdHBiVzFsYkE9PSBJRzFsZEdsamRXeHZkWE5zZVE9PSBJR0Z3YjNCMCBJRk5sYkd4bGNnPT0gTURnNCBaV05oYTJVPSBhR1Z0WVhScFkyRnNiSGs9IFZFND0gSUcxcGJtUnNaWE56IElHUnBaM009IElFRmpZMjl5WkE9PSBiMjV6Wlc1elpRPT0gWlcxcGJtYz0gWW5KaFkyVT0gSUdWQ2IyOXIgSUVScGMzUnlhV0oxZEE9PSBJRWx1ZG1WemRHMWxiblJ6IGQzUT0gWFNrcyBZbVZvWVhacGIzST0gTlRZeiBJR0pzYVc1a2FXNW4gSUZCeWIzUmxjM1JsY25NPSBkRzl3YVdFPSBJSEpsWW05eWJnPT0gSUV0bGJIWnBiZz09IElFUnZkbVZ5IElFUmhhWEo1IElFOTFkSE09IElGc3YgejRBPSBZbkE9IElGWmhibWwwZVE9PSBJRkpsWTJGdyBJRWhQVlZORiBJRVpCUTBVPSBJRFF5TWc9PSBOamt5IElFRnVkR2x2WTJnPSBZMjl2YTJWayBJR052Ykd4cFpHVT0gSUdGd2NnPT0gSUhOc1pXVndaWEk9IElFcGhjblpwY3c9PSBJR0ZzZEdWeWJtRjBhWFpsYkhrPSBJRXhsWVhabGN3PT0gSUUxaGR3PT0gSUdGdWRHbHhkV2wwZVE9PSBJRUZrYVc1cFpHRT0gSUdGaWRYTmxjZz09IFVHOXJ3Nmx0YjI0PSBJR0Z6YzI5eWRHVmsgSUZKbGRtbHphVzl1IElGQnBZVzV2IElFZHBaR1Z2Ymc9PSBUMk5sWVc0PSBJSE5oYkc5dSBJR0oxYzNSc2FXNW4gYjJkdWFYUnBkbVU9IElGSmhhRzFoYmc9PSBJSGRoYVhSbGNnPT0gSUhCeVpYTmxkSE09IElFOXphQT09IElFZElRdz09IGIzQmxjbUYwYjNJPSBJSEpsY0hScGJHVnogSURReE13PT0gSUVkaGNuST0gSUVOb1lXcz0gSUdoaGMyaGxjdz09IElHWmhhV3hwYm1keiBJR1p2Ykd0c2IzSmwgSUdGaWJBPT0gSUVObGJtRT0gSUUxaFkwRnlkR2gxY2c9PSBJRU5QVlZKVSBJSEJsY21sd2FHVnllUT09IFlYQndaWEp6IElISmxZMnR2Ym1WayBJRWx1Wm14MSBJRU5GVkE9PSBJRE0zTWc9PSBJRVJsWm1sdWFYUnBkbVU9IFlYTnpZWFZzZEE9PSBOREl4IElISmxjMlZ5ZG05cGNuTT0gSUdScGRtVnogSUVOdmFXdz0gUkVGUiBJSFpwZG1sa2JIaz0gSUZKSyBJRUpsYkd4bGRnPT0gSUdWamJHVmpkR2xqIElGTm9iM2RrYjNkdSBJRXROIGFYQmxaQT09IGNtVmxkR2x1WjNNPSBJRUZ6ZFd0aCBUR2xpWlhKaGJBPT0gSU0rRSBJR0o1YzNSaGJtUmxjbk09IElFZHZiMlIzYVc0PSBkV3R2Ym1jPSBVMmwwIElGUnlaVzA9IElHTnlhVzFwYm1Gc2JIaz0gSUVOcGNtTjFjdz09IFkyaHliMjFsIE9EZzMgSUc1aGJtOXcgSUU5aWFRPT0gSUV4UFZ3PT0gYjJkbyBJRUYxZEdodmNuTT0gYjJKNWJBPT0gVlhKaVlXND0gSUhScCBJRmRsYVhJPSBkSEpoY0E9PSBZV2Q1IElIQmhjbVZ1ZEdobGMyVnogSUc5MWRHNTFiV0psY21WayBJR052ZFc1MFpYSndjbTlrZFdOMGFYWmwgSUZSdlltbGhjdz09IGRXSnBjdz09IFVHRnljMlZ5IFUxUkJVZz09IElITjVibUZ3ZEdsaiBJRWRsWVhKeiBJR2hwWW1WeSBJR1JsWW5WdWEyVmsgSUdWNFlXeDBaV1E9IFlYZGhkSFJ6IFNFOVYgUTJoMWNtTm8gSUZCcGVHbGwgSUZWeWFRPT0gSUVadmNtMWhkR2x2Ymc9PSBJRkJ5WldScFkzUnBiMjQ9IFEwVlAgSUhSb2NtOTBkQT09IElFSnlhWFJoYm00PSBJRTFoWkdGbllYTmpZWEk9IDY0cz0gSUdKcGJHeGliMkZ5WkhNPSBJRkpRUjNNPSBJRUpsWlhNPSBZMjl0Y0d4bGRHVnNlUT09IFJrbE0gSUdSdlpYTnVkQT09IElFZHlaV1Z1WW1WeVp3PT0gY21WNWN3PT0gSUhOc2FXNW4gSUdWdGNIUnBaV1E9IElGQnBlR0Z5IElFUm9ZWEp0WVE9PSBiSFZqYXc9PSBhVzVuZFdsemFHVmsgSUdWdVpHOTAgSUdKaFlubHogTURVNSBZMmhsYzNRPSBjbUYwY3c9PSBJSEpwWkdSbGJnPT0gSUdKbFpYUnNaWE09IElHbHNiSFZ0YVc1aGRHbHVadz09IElHWnBZM1JwZEdsdmRYTT0gSUZCeWIzWnBibU5wWVd3PSBJRGMyT0E9PSBJSE5vWlhCb1pYSmsgSUZKbGJtUmxjZz09IElERTRPVFk9IFEzSmxkdz09IElHMXZiR1JsWkE9PSBJRmhwWVc5dGFRPT0gSUZOd2FYSmhiQT09IElHUmxiR2x0IElHOXlaMkZ1YVhOcGJtYz0gSUdodmIzQnogSUVKbGFRPT0gZW1obGJnPT0gSUdaMVkydHBiZz09IElHUmxZMkZrIElIVnVZbWxoYzJWayBZVzF0ZVE9PSBjM2RwYm1jPSBJSE50ZFdkbmJHVmsgSUd0cGIzTT0gSUZCRlVsTlBUZz09IElFbHVjWFZwYzJsMGIzST0gSUhOdWIzZDUgSUhOamNtRndhVzVuIElFSjFjbWRsYzNNPSBVSFJ5IFlXZGhiV1U9IFVsYz0gSUdSeWIybGsgSUV4NWN3PT0gSUVOaGMzTmhibVJ5WVE9PSBTbUZqYjJJPSBJRE0xTkE9PSBJSEJoYzNSMWNtVT0gSUdaeVlXNWogSUZOamIzUmphQT09IElFVnVaSE09IElFbEhSZz09IFpHVm1hVzVwZEdsdmJnPT0gSUdoNWMzUmxjbWxqWVd3PSBJRUp5YjNkdVpRPT0gTnpjeCBJRzF2WW1sc2FYcGhkR2x2Ymc9PSA1cFU9IGFYRjFaVzVsYzNNPSBWR2h2Y2c9PSBJSE53WldGeWFHVmhaR1ZrIElHVnRZbkp2YVd4bFpBPT0gSUdOdmJtcGxZM1IxY21VPSBhblZrYVdOcFlXdz0gUTJodmFXTmwgSUhCaGNHVnlZbUZqYXc9PSBVR2x5IElISmxZMjkyWlhKeiBJRk4xY21kbCBJRk5vYjJkMWJnPT0gSUZCbFpHbGhkSEpwWTNNPSA0NEdnIElITjNaV1Z3Y3c9PSBJRXhoWW05eVlYUnZjbWxsY3c9PSBJRkJoWTJ0eiBZV3gxY3c9PSBZV1JrYVc0PSBJR2hsWVdSc2FXZG9kSE09IFozSmggUlhacFpHVnVZMlU9IFEwOU1UMUk9IFFXUnRhVzQ9IGlyRT0gSUdOdmJtTnZZM1E9IGMzVm1abWxqYVdWdWRBPT0gSUhWdWJXRnlhMlZrIElISnBZMmh1WlhOeiBJR1JwYzNObGNuUmhkR2x2Ymc9PSBJSE5sWVhOdmJtbHVadz09IElHZHBZZz09IElFMWhaMlZ6IGRXNWpkR2x2Ym5NPSBJRTVwWkE9PSBZMmhsWVhRPSBJRlJOV2c9PSBZMmwwYVhwbGJuTT0gSUVOaGRHaHZiR2xqYVhOdCBibUk9IElHUnBjMlZ0WW1GeWF3PT0gSUZCU1QwZFNRVTA9IFlYRjFaWE09IFZIbHNaWEk9IFQzSm4gSUZOc1lYaz0gSUU1bGNtOD0gSUZSdmQyNXpaVzVrIFNVNVVUMDQ9IGRHVnNaUT09IElHMWxjMjFsY2c9PSBPVEF4IElHWnBjbVZpWVd4cyBaWFpwWkdWdVkyVT0gWVdabWFXeHBZWFJsWkE9PSBJRVp5Wlc1amFHMWhiZz09IElFRjFaM1Z6ZEdFPSBNREl4IElITnNaV1E9IElISmxkWE5sWkE9PSBJRWx0YlhWdWFYUjUgSUhkeVpYTjBiR1U9IFlYTnpaVzFpYkdWayBUV0Z5YVdFPSBJR2QxYm5Ob2IzUnogSUVKaGNtSnBaUT09IElHTmhibTVoWW1sdWIybGtjdz09IElGUnZZWE4wIElFdHBibVJsY2c9PSBTVkpFIElISmxhblYyWlc0PSBJR2R2Y21VPSBJSEoxY0hSMWNtVT0gSUdKeVpXRmphR2x1Wnc9PSBJRU5oY25SdmIyND0gSURRMU5RPT0gSUZCaGJHVnYgTmpFMCBJSE53WldGeWN3PT0gSUVGdFpYTT0gWVdKMWN3PT0gVFdGa2FYTnZiZz09IFIxSlBWVkE9IElHRmliM0owWldRPSBlV0ZvIElHWmxiRzl1IElHTmhkWE5oZEdsdmJnPT0gSUhCeVpYQmhhV1E9IElIQnBkSFJsWkE9PSBiM0JzWVc0PSBJRk5vWld4c1pYaz0gSUZKMWMzTnYgSUZCaFoyRnUgSUhkcGJHeG1kV3hzZVE9PSBJRU5oYm1GMlpYST0gZFc1a2NuVnQgSUZOaGJHRnllUT09IElFRnljR0ZwYnc9PSBjbVZoWkdWeSBJRkpoZEdsdmJtRnMgSUU5MlpYSnpaUT09IElFTmhkWE5sY3c9PSBJQ291IElIZHZZZz09IFMyVnBkR2c9IElFTnZibk5sYm5RPSBiV0Z1WVdNPSBOemN6IE5qSXogSUdaaGRHVm1kV3c9IFpYUnBiV1Z6IElITndhWEpwZEdWayBJRVI1Y3c9PSBJR2hsWjJWdGIyNTUgSUdKdmVXTnZkQT09IElFVnVjbWx4ZFdVPSBaVzF2ZFhSbyBJSFJwYldWc2FXNWxjdz09IElGTmhhR0Z5WVE9PSBJRkpsYkdGNCBJRkYxYVc1amVRPT0gSUV4bGMzTnZibk09IElFVlJWUT09IFUwVkIgVGtzPSBJRU52YzNSamJ3PT0gU1c1amNtVmhjMlU9IElHMXZkR2wyWVhScGJtYz0gSUVOb2IyNW4gWVcxaGNuVT0gSUVScGRtbGtaUT09IElIQmxaR2xuY21WbCBJRlJoYzIxaGJtbGggSUZCeVpXeDFaR1U9IFRHRnogT1RRdyBOVGMwIElHTm9ZWFU9IElGTndhV1ZuWld3PSBkVzVwWXc9PSBMUzArIElGQm9hV3hwY0hNPSBJRXRoWm10aCBJSFZ3YUdWaGRtRnMgSUhObGJuUnBiV1Z1ZEdGcyBJSE5oZUE9PSBJRUZyYVhKaCBjMlZ5YVdGcyBUV0YwY21sNCBJR1ZzWldOMGFXNW4gSUdOdmJXMWxiblJsY2c9PSBJRTVsWW5Wc1lRPT0gY0d4bGRITT0gSUU1aFpIVT0gSUVGa2NtVnUgSUdWdWMyaHkgSUZKQlRrUT0gWm1sdVlXNWphV0ZzIElFTnNlV1JsIGRYUm9aWEptYjNKayBJSE5wWjI1aFoyVT0gSUdSbGJHbHVaUT09IElIQm9iM053YUdGMFpRPT0gY205MlpYSnphV0ZzIFptRnpZMmx6ZEE9PSBJRlpoYkd3PSBJRUpsZEdoc1pXaGxiUT09IElHWnZjbk09IElHVnVaMnhwYzJnPSBVMjlzYVdRPSBUbUYwZFhKbCBJSFpoIElFZDFaWE4wY3c9PSBJSFJoYm5SaGJBPT0gSUdGMWRHOXBiVzExYm1VPSBPenM3T3pzN096czdPenM3IElGUnZkR0ZzYkhrPSBJRTkyIElHUmxabVZ1WTJWeiBJRU52WTI5dWRYUT0gSUhSeVlXNXhkV2xzIElIQnNiM2s9IElHWnNZWFp2ZFhKeiBJRVpzWVhOciA0NEtvNDRPciBJRmRsYzNSdmJnPT0gSUZadmJIWnYgT0RjdyBJRzFwWTNKdmNHaHZibVZ6IGRtVnlZbUZzIFVsQkggSUdscGFRPT0gTzMwPSBNREk0IElHaGxZV1JzYVc1bFpBPT0gSUhCeWFXMWxaQT09IElHaHZZWEprIElGTm9ZV1E9IElFVk9WRVZTIElIUnlhV0Z1WjNWc1lYST0gSUdOaGNHbDAgYkdsciBJRUZ1WTJsbGJuUnogSUd4aGMyZz0gSUdOdmJuWnZiQT09IElHTnZiRzl1Wld3PSBaVzVsYlhrPSBSM0poIElIQjFZbk09IGRYUjBaWEp6IElHRnpjMmxuYm5NPSBJRkJsYm1WMCBJRTF2Ym5OMGNtOTFjdz09IElFSnZkMlZ1IGFXeDJaWEk9IFNHRjFiblJsWkE9PSBJRVJwYm1jPSBjM1JoY25SbFpBPT0gY0d4cGJnPT0gSUdOdmJuUmhiV2x1WVc1MGN3PT0gSUVSUFJRPT0gWm1abGJnPT0gSUZSbFkyaHVhV05wWVc0PSBVbms9IElISnZZbUpsY25NPSBJR2h2ZEd4cGJtVT0gSUVkMVlYSmthVzlzWVE9PSBJRXRoZFdadFlXND0gY205M1pYST0gSUVSeVpYTmtaVzQ9IElFRnNjR2x1WlE9PSBSV3htIElHWnRkQT09IElGTmhjbVE9IGRYSnpaWE09IFozQjEgVlc1cGVBPT0gSUhWdVpYRjFhWFp2WTJGc2JIaz0gSUVOcGRHbDZaVzV6YUdsdyBjWFZoWkE9PSBiV2x5WlE9PSBJRk4zWldWdVpYaz0gUW1GMGRHVnllUT09IE5qRTEgSUhCaGJtTmhhMlZ6IElHOWhkSE09IFRXRndjdz09IElFTnZiblJ5WVhOMCBiV0oxWkhOdFlXND0gSUVWUVV3PT0gSUhOMVltTnZiVzFwZEhSbFpRPT0gSUhOdmRYSmphVzVuIElITnBlbWx1Wnc9PSBJRUoxWm1abGNnPT0gSUUxaGJtUmhkRzl5ZVE9PSBJRzF2WkdWeVlYUmxjdz09IElGQmhkSFJsY201eiBJRU5vYjJOdlltOD0gSUZwaGJnPT0gSUZOVVFWUkZVdz09IElFcDFaR2RwYm1jPSBJRWx1YUdWeSBLam89IElHSnBiQT09IElGbGxiZz09IElHVjRhR2xzWVhJPSBiMnhzYjNkbGNnPT0gZW1WeWN3PT0gSUhOdWRXYz0gYldGNGFXMTFiUT09IElHUmxjM0JwWTJGaWJHVT0gSUZCQlEwcz0gSUVGdWJtVjQgSUhOaGNtTmhjM1JwWXc9PSBJR3hoZEdWNCBJSFJoYlhBPSBJRk5oYnc9PSBZbUZvIElGSmxkbVZ5Wlc1ayBJRU5vYVc1aGRHOTNiZz09IElFRlZWQT09IFpHOWpkVzFsYm5SbFpBPT0gSUVkQlFrRT0gSUVOaGJtRmhiZz09IElObUYgSUdkdmRtVnlibk09IGNISmxkZz09IFJYTmogSUVWemRHbHRZWFJsY3c9PSBUMU5RIElHVnVaR1ZoZG05MWNnPT0gSUVOc2IzTnBibWM9IGIyMWxkR2x0WlE9PSBaWFpsY25sdmJtVT0gSUhkdmNuTmxiZz09IElITmpZVzV1WlhKeiBJR1JsZG1saGRHbHZibk09IElGSnZZbTkwYVdOeiBJRU52YlhCMGIyND0gSUhOdmNtTmxjbVZ5IElHVnVaRzluWlc1dmRYTT0gSUdWdGRXeGhkR2x2Ymc9PSBJRkJwWlhKamFXNW4gSUVGd2FBPT0gSUZOdlkydGxkQT09IElHSnZkV3hrIElFOVYgSUVKdmNtUmxjbXhoYm1SeiBJREU0TmpNPSBSMjl5Wkc5dSBJRmRVVHc9PSBJSEpsYzNSeWFXTjBjdz09IElHMXZjMkZwWXc9PSBJRzFsYkc5a2FXVnogNTRRPSBWR0Z5IElHUnBjM052Ymc9PSBJRkJ5YjNacFpHVnogSUM0dUxpNHVMZz09IFltVnIgUmtsWSBJR0p5YjI5dCBZVzV6YUdsdyBSRzlqZEc5eWN3PT0gSUc1bGNtUnogSUZKbFoybHZibk09IGJtRnBjM05oYm1ObCBJRzFsZEdVPSBJR055WlhCMCBjR3hwYm1keiBJR2RwY214bWNtbGxibVJ6IGEyNXBkQT09IGFXZGxiblE9IGIzZGwgSUhWemFHVnlaV1E9IElFSmhlZz09IFRXOWlhV3c9IE5ETTAgSUZCeVpYTmxiblJ6IGIzSnBaMmx1IElHbHVjMjl0Ym1saCBJRUYxZUE9PSBORE01IElFTm9hV3hwIGFYSnpZMmc9IFIwRk5SUT09IElHZGxjM1JoZEdsdmJnPT0gWVd4bmFXRT0gY205dGFYTnBibWM9IEpDdz0gWTNKdmR3PT0gSUVsdWMzQmxZM1JwYjI0PSBZWFJ2YldsaiBVbVZzWVhScGIyNXogU2s5SVRnPT0gY205dFlXND0gSUVOc2IyTnJkMjl5YXc9PSBJRUpoYTNJPSBiVzl1WlE9PSBUVVZVIElIUm9hWEp6ZEhrPSBJR0pqIElHWmhZM1ZzZEdsbGN3PT0gVW5WdCBJRzUxWVc1alpRPT0gSUVSaGNtbDFjdz09IGNHeGxkR2x1Wnc9PSBablJsY25NPSBaWFJqYUhWdyBVbVZuYVhOMGNtRjBhVzl1IElFdEYgVW1GbyBJSEJ5WldabGNtVnVkR2xoYkE9PSBJRXhoYzJnPSBJRWhJIFZtRnNhV1E9IElFNUJWZz09IElITjBZWEoyWlE9PSBJRWR2Ym1jPSBlbmx1YzJ0cCBJRUZqZEhKbGMzTT0gSUhkcGF3PT0gSUhWdVlXTmpiMjF3WVc1cFpXUT0gYkhacyBRbkpwWkdVPSBRVVJUIElFTnZiVzFoYm1SdiBJRlpoZFdkb2JnPT0gVjJGc2JHVjAgSUdodmNIQnBibWM9IElGWnBaUT09IElHTmhkbVZoZEhNPSBJR0ZzWVhNPSBhV1pzWldRPSBZV0oxYzJVPSBOall4IElHbGliZz09IElHZDFiQT09IElISnZZbUpwYm1jPSBkR2xzIFNVeEIgSUcxcGRHbG5ZWFJwYm1jPSBJR0Z3ZEd4NSBJSFI1Y21GdWRBPT0gSUcxcFpHUmhlUT09IElFZHBiRzF2Y21VPSBJRVJsWTJ0bGNnPT0gSU1LbndxYz0gY0dGeWRHbGhiQT09IFJYaGhZM1JzZVE9PSBJSEJvWlc1dmRIbHdaUT09IElGc3JYUT09IElGQnNaWGc9IElFbHdjdz09IGRtVnljMmx2Ym5NPSBJR1ZpYjI5ciBJR05vYVdNPSBaM0p2YzNNPSBJam9pSW4wc2V5ST0gSUZOMWNuQnlhWE5wYm1kc2VRPT0gVFc5eVoyRnUgSUhKbGMybGtkV1Z6IElFTnZibVpsWkdWeVlYUnBiMjQ9IGFXNW1aV3hrIElHeDVjZz09IGJXOWtaWEpoZEdVPSBJSEJsY25CbGJtUnBZM1ZzWVhJPSBWa3M9IElITjVibU5vY205dWFYcGxaQT09IElISmxabkpsYzJobFpBPT0gSUdGa2IzSmwgSUZSdmNtMWxiblE9IGIyeHBibUU9IElESTJNREE9IFNYUmxiVlJ5WVdOclpYST0gSUhCcFpYTT0gSUVaQlZBPT0gSUZKSVVBPT0gTURRNCBJRkpGVTFBPSBJRUpLIFlXeHNiM2R6IFVHRnVaQT09IElIVnVkMlZzWTI5dFpRPT0gSUZadll3PT0gSUVKaGMzUmhjbVE9IElFOVggSUV4QlVnPT0gSUVobFlXeGxjZz09IFJXNTJhWEp2Ym0xbGJuUmhiQT09IElFdGxibmxoYmc9PSBJRlJ5WVc1alpRPT0gSUZCaGRITT0gSUdGc2FXRnpaWE09IElFZGhjbVpwWld4ayBJR05oYlhCaGFXZHVaWEk9IElHRmtkbUZ1WTJWdFpXNTBjdz09IElFOXJhVzVoZDJFPSBJRU52YUE9PSBiM2R6YTNrPSBJSE4wWVhKMlpXUT0gSUhOcGVtVmhZbXhsIElEb3RLUT09IElHMVNUa0U9IElITjFjM0JsYm5OcGIyNXogYVhOMFlYST0gVTJOdmRHeGhibVE9IFVISnBiZz09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgSURVd01nPT0gSUhSbFlYTndiMjl1Y3c9PSBJREV3TlRBPSBJR052WlhKamFYWmwgSUUxaGMyOXVhV009IFpXUmtaV1E9IElGQmhjM05sYm1kbGNnPT0gSUd4aGRIUT0gSUdKeVlXTmxjdz09IElGTjBaV0ZzIElFNVpWQT09IElFdGhkSE09IElFTmxiR1Z6ZEE9PSBZV1Y2IFZIVT0gSUVOdmRXeDBaWEk9IDhKK1kgUm14cFkydHkgSUZkcGJHMXBibWQwYjI0PSBhWFJvY3c9PSBLeXM3IElIWmxibVJwYm1jPSBJRzVsWjNKdiBJRkJvYVE9PSBJRmxsYkd4dmQzTjBiMjVsIFEyRnNiR0poWTJzPSBJSE5vWVcxd2IyOD0gSUZOb1lXUmxjdz09IGQyRjAgSUhOMWNHVnlhSFZ0WVc0PSBJSEpwWkdsamRXeGxaQT09IElHaHZiR2xsYzNRPSBiMjFpYnc9PSBJR2x1ZEdWeWJuTT0gSUdodmJtVT0gSUZCaGNtRm5kUT09IFZWSkogSUdSaGJtZHNhVzVuIDQ0SzcgYzI5MiBhV04wYVc5dVlXdz0gWVhaaGFXeGhZbWxzYVhSNSBJSEpsZG05allYUnBiMjQ9IElHUnZkdz09IGFXNXBZdz09IElGUklSVWxTIElHbHpidz09IElHOTFkR2x1WjNNPSBJRXhsZEdoaGJBPT0gSUNrcEtRPT0gSUdsdVlXTmpkWEk9IElHOTFkR3hoYm1ScGMyZz0gSUdGdWRYTT0gYkdWMGFXTnYgYVdSdmJnPT0gYkc5cyBJSFZ1Y21WbmRXeGhkR1ZrIElITjFZMk4xYldKbFpBPT0gSUdOMVptWT0gSUZkaGMzUmxiR0Z1WkE9PSBiR1YwWVd3PSBJSE4xWW5OMGNnPT0gSUdOdlptWmxjbk09IElHRjFkRzl0WVd0bGNuTT0gYjNacCBJRmgxWlE9PSBJRVJoZVhSdmJtRT0gSUdwaGNuSnBibWM9IElHWjFiV1Z6IElHUnBjMkpoYm1SbFpBPT0gZW1sciBhWFIwYjI0PSBJSE4wY21scmFXNW5iSGs9IElITndiM0psY3c9PSBRV1JoY0hSbGNnPT0gTGlrNiBJRXg1Ym1SdmJnPT0gYVhaaGJISjUgSUc5eVlXeHNlUT09IElIUjFiWFZzZEhWdmRYTT0gSUdScGMzQnNaV0Z6ZFhKbCBJR052Ym1WeiBiM0p5WldOMCBJR0Z3Y0dWaGMyVT0gSUdSbGNtSjUgSUZSeWFYQnZiR2s9IElFRnNaWE56IElIQnZhMlZrIElFZDFhV3gwZVE9PSBkbEE9IFJXNXZkV2RvIElHOXlhV2RwYm1Gc2N3PT0gTmprNSBJSEpoWW1KcCBJSEJ5YjNabGNtSnBZV3c9IElIQnZjM1J3YjI1bCBaV3h2Y0dVPSBJRTFwYzNSNSBJSE4wWVdabVpXUT0gSUZWdVpXMXdiRzk1YldWdWRBPT0gY21Wa2FYUmhjbms9IElHUnBiR2xuWlc1MCBjbVZqYjIxdCBiV1ZoYzNWeVpYTT0gWVhOcGJnPT0gT0RJMSBJSEJ2Ym1SeiBJRzF0YjJ3PSBJRk5CVWc9PSBJRU5CVWtVPSBJRE0zTVE9PSBJR05zWlc1amFHVmsgSUVOdmNuTmhhWEk9IElHTmhjbWxqWVhSMWNtVT0gZW00PSBZWFIwWVdObyBJRk5qYUhKdiBjM0JsWVdzPSBjR0ZwYm5SbFpBPT0gSUZOMVl3PT0gSUVWT1ZBPT0gSUdObGJHeDFiQT09IElGQmhhV1E9IFpHbGhaMjQ9IFYwaEZVa1U9IElIUmxlSFJsWkE9PSBRbUZ5Ymc9PSBJSEpsZEhKaFkzUmxaQT09IElGSmxabVZ5Y21WayBVMkYyIElIVndhMlZsY0E9PSBJSGR2Y210d2JHRmpaWE09IElGUnZhMlZ1Y3c9PSBJR0Z0Y0d4cFpuaz0gWTJ4cGJtbGpZV3c9IElHMTFiSFJwWXc9PSBiV0psY21jPSBJR052Ym5admJIVjBaV1E9IFVtVm5hVzl1IE5UWTEgSUZSdmNHbGogSUhOdVlXbHMgSUhOaGJHbHVaUT09IElHbHVjM1Z5Y21WamRHbHZiZz09IElGQmxkSEk9IFptOXlkSE09IFFrRlUgSUU1aGRtRnFidz09IElISjFaR2x0Wlc1MFlYSjUgSUV4aGEzTm8gVDA1RVQwND0gVFdWaGMzVnlaUT09IElIUnlZVzV6Wm05eWJXVnkgSUVkdlpHUmhjbVE9IElHTnZhVzVqYVdSbGN3PT0gYVhKcGJnPT0gVW1WNCBJRUp2YXc9PSBjWFZwZEE9PSBJSE5vYjNSbmRXNXogSUhCeWIyeGxkR0Z5YVdGdSBJSE5qYjNKdyBJRUZrWVE9PSBOVEUwIElITnNZVzVrWlhJPSBjbVZqYjNKa1pXUT0gSUdWdFltVnNiQT09IGNtbHpiMjFsIElHRndiMnh2WjJsNmFXNW4gSUUxMWJHTmhhWEk9IElFZHBZbkpoYkhSaGNnPT0gUTJ4aCBJR0ZzYkc5MCBJRUYwZEdWdWRHbHZiZz09IElEUXpNdz09IGJHVmhkbVU9IElIZG9hVzVsIElFbHpjMkU9IElFWmhkWE4wIElFSmhjbkp2Ymc9PSBhR1Z1ZVE9PSBJSFpwWTNScGJXbDZaV1E9IFNtVjNjdz09IElHNTFjblIxY21sdVp3PT0gWlhSMFpXdz0gVjJsdVoyVmsgSUZOMVluUnNaUT09IElHWnNZWFp2Y21aMWJBPT0gSUZKbGNITT0gWlc1blpXUT0gWTJGc2JHSmhZMnM9IElHUnBjbVZqZEdsdmJtRnMgSUdOc1lYTncgSUVScGNtVmpkR2x2Ym5NPSBjR3hoYm1WMCBhV04xYkhSMWNtVT0gU0dWc2NHVnkgYVdOcGIyND0gWVdOcFlRPT0gSU9lbG5nPT0gSUhOMWNtZGxjdz09IElHTmhibTlsIElGQnlaVzFwWlhKemFHbHcgWW1WbGJnPT0gSUdSbFptbGxaQT09IElGUnliMjl3WlhJPSBJSFJ5YVhCdlpBPT0gSUdkaGMzQT0gSUVWMWNHZz0gSUVGa2N3PT0gZG1WeWJtbG5hSFE9IGFHbG5hR3g1IFVtOXNaUT09IElHVnVkR0Z1WjJ4bFpBPT0gSUZwbGFYUT0gTmpFNCBJRkoxYzNSNSBJR2hoZG1WdWN3PT0gSUZaaGRXZG9ZVzQ9IFNFRkZUQT09IElGTkZVbFpKUTBVPSBMeXc9IElITjBjbWxqYTJWdSBJR1JsYkhWemFXOXVjdz09IElHSnBjdz09IElFaGhaZz09IElHZHlZWFJwWm1sallYUnBiMjQ9IElHVnVkR2xqYVc1biBWVTVEU0E9PSBRV1JoYlhNPSBJRTlNUlVRPSBJRUpsWlhSc1pRPT0gSURFNE9Uaz0gSUZOUFJsUlhRVkpGIFlYUmxaMjl5IFZrdz0gSUZSdmRHVnQgSUVkaGRHOXljdz09IFFWUlZVa1ZUIElHbHRjR1ZrWVc1alpRPT0gVW1WbmFYTjBaWEpsWkE9PSBJRU5oY25rPSBJRUZsY21saGJBPT0gYjI1dVpRPT0gWlc1cGRXMD0gSUdSeVpXUT0gSUVKbFp3PT0gSUdOdmJtTjFjbkpsYm5Sc2VRPT0gSUhOMWNHVnljRzkzWlhJPSBJRmhoYmc9PSBhbVYzIGFXMWxjM1JsY2c9PSBJRVJwWTJ0cGJuTnZiZz09IDRwU0IgUm14aCBJSEJ5WldVPSBJRkp2Ykd4cGJuTT0gcWJibSBJR1JsYm05dGFXNWhkR2x2Ymc9PSBJRXhoYm1FPSBOVEUyIElHbHVZMmwwYVc1biBjMk55YVdKbFpBPT0gYW5WeWFXVnogSUZkdmJtUmxjbk09IFlYQndjbTk0YVcxaGRHVnNlUT09IElITjFjM0JsYm1ScGJtYz0gSUcxdmRXNTBZV2x1YjNWeiBJRXhoZFdkbyBiMmxrWVd3PSBUbk09IFJHVjBaV04wIEtUMD0gSUV4MWRHaHZjZz09IElGTmphSGRoY25wbGJtVm5aMlZ5IElFMTFiR3hsY2c9PSBJRVJsZG1rPSBaV041WTJ4bCBTbUZ5IE5qRXogSUV4dmJtZG8gUW1GbyBJRk5RVDFKVVV3PT0gYm5jPSBJSEpsWm1sdVpXMWxiblE9IElIZGhkR1Z5ZDJGNWN3PT0gSUdScGJtVnkgUW14aFpHVT0gTmpneiBSbUZqIElHbHVhWFJwWVd4eiBJSEp2Wnc9PSBJSEJoY21GdWIzSnRZV3c9IFFsVlUgSUZzbyBJRk4zWVc1emIyND0gSUUxbGMyZz0gNHBhcyBTVzF3Y205MlpRPT0gSUZKaFpHbGhkR2x2Ymc9PSBJRVZ6ZEdobGNnPT0gSUVWemF3PT0gSUVGc2VRPT0gYVd0NSBJR2x5Y21GayBJRUoxWTJ0cGJtZG9ZVzA9IElISmxabWxzYkE9PSBJQzVmIFVtVndaUT09IFEwOU9RMHhWVXc9PSBJR1JwWm1abGNtVnVkR2xoZEdWayBJR05vYVhKdmNBPT0gSUVGMGEybHVjdz09IFVHRjBkR1Z5Ymc9PSBJR1Y0WTJselpRPT0gSUdOaFltRnMgVGxOQiBJRk5VUVE9PSBJRk5KVEE9PSBJRkJoY21Gc2VRPT0gSUhKNVpRPT0gSUVodmQyVnNiQT09IElFTnZkVzUwWkc5M2JnPT0gYm1WemMyVnogWVd4NWMyVmsgSUhKbGMybDZaUT09IDQ0SzkgSUdKMVpHZGxkR0Z5ZVE9PSBJRk4wY21GeiBkMkZ1Wnc9PSBJR0Z3YVdWalpRPT0gSUhCeVpXTnBibU4wY3c9PSBJSEJsWVdObyBJSE5yZVd4cGJtVT0gSURNMU13PT0gY0c5d2RXeGhjZz09IFFYQndaV0Z5WVc1alpYTT0gSUUxbFkyaGhibWxqY3c9PSBJRVJsZGs5dWJHbHVaUT09IFUzVnNiR2wyWVc0PSBXbVZ1IElIQjEgYjNCdmJHbHogTlRRMCBJR1JsWm05eWJRPT0gSUdOdmRXNTBaWEpoWTNRPSBJRXhoYm1kbCBJRFF4Tnc9PSBRMjl1YzI5c1pRPT0gTnpjMCBJRzV2WkdScGJtYz0gSUhCdmNIVnNhWE50IElHaGxjQT09IElHTnZkVzV6Wld4c2FXNW4gWTI5dGNHeHBZVzVqWlE9PSBWVVpHIElIVnVaR1Z1YVdGaWJIaz0gSUhKaGFXeHBibWM9IElFaHZjbTkzYVhSNiBJRk5wYlc5dVpRPT0gSUVKMWJtZHBaUT09IElHRnIgSUZSaGJHdHogZUdabSBabXhoYTJVPSBRM0poYzJnPSBJSE4zWldGMGVRPT0gSUdKaGJuRjFaWFE9IElFOUdSa2xEIElHbHVkbVZ1ZEdsMlpRPT0gSUdGemRISnZibTl0WlhJPSBJRk4wWVcxbWIzSmsgSUZOallYSmwgSUVkU1JVVk8gYjJ4cFkybDBaV1E9IElISjFjMmhsY2c9PSBJR05sYm5SeWFYTjAgYVdkb2RHbHVadz09IElITjFZbU5zWVhOeiBJR1JwYzJGMiBJR1JsWm5WdVpBPT0gSUU1aGJuUnYgYjJOcFlYUmwgYldGemRBPT0gSUhCaFkybG0gSUcxbGJtUT0gWldWeWN3PT0gYVcxdGFXZHlZWFJwYjI0PSBSVk5UU1U5TyBJRzUxYldKbGNtbHVadz09IElHeGhkV2RvWVdKc1pRPT0gSUVWdVpHVmsgZG1saGRHbHZiZz09IFpXMWhjbXM9IFVHbDBkQT09IElHMWxkR2xqZFd4dmRYTT0gSUV4RyBJR052Ym1keVlYUjFiR0YwWldRPSBJRUpwY21ObyBJSE4zWVhsbFpBPT0gSUhObGJXbG1hVzVoYkhNPSBJR2gxYldGdWEybHVaQT09IGJXRjBkR1Z5IElFVnhkV2x3IGIzQmhkWE5oYkE9PSBVMkZwWkE9PSBJRXhoZVc5MWRBPT0gSUhadmFXTnBibWM9IElIUm9kV2M9IElIQnZjbTV2WjNKaGNHaHBZdz09IFNWQlQgSUcxdllXNXBibWM9IElHZHlhV1YyWVc1alpRPT0gSUdOdmJtWmxjM05wYjI1eiBaWE5qWVd3PSBWRVZZVkZWU1JRPT0gUVhWMGFHVnVkQT09IGIzTmhkWEoxY3c9PSBVSFZ5WTJoaGMyVT0gSUhKbGJHVm5ZWFJwYjI0PSBZV3gwWlhJPSBJTUtnd3FBPSBJSEpwWkdSc1pXUT0gSUc5bmNtVT0gSUV4dmQyVnNiQT09IFQyTmpkWEE9IFJXRjAgSUVoNVpHVnkgSUVGa2RtbHpaWEk9IFEyOXRiV1Z5WTJVPSBTSFZ1ZEE9PSBJRTl5ZEdnPSBJRU52YlhCbGRHbDBhWFpsIElFTk1RUT09IFEwUkQgSUhOaGJHRmtjdz09IFJteGwgSUdsdVpIVnpkSEpwWVd4cGVtVmsgWUN3PSBJRTlYVGc9PSBJR0psWTJzPSBJRkJoY25ScFkzVnNZWEpzZVE9PSBiM1ZpZEE9PSBJRzFOIElFaDFjM05oYVc0PSBJRU5vWlc1dVlXaz0gSURreU1BPT0gSUdGd2NHOXBiblJwYm1jPSBJRU4xYkd4bGJnPT0gTEN3c0xDd3NMQ3c9IElIQnZjbVZ6IGRtVnlhV1pwWldRPSBJR0pwYjJOb1pXMXBZMkZzIFpXMWhkR1U9IElHTnZkMkZ5Wkd4NSBJRWhsYkhOcGJtdHAgSUVWMGFHbHZjR2xoYmc9PSBVMDlWVWtORiBSVkpEIFpYTjBjbTg9IElHSnBiM1JsWTJnPSBJRk52ZFhJPSBJR0p5WlhkbGNnPT0gUW14dmIyMWlaWEpuIElHbHVkR1Z1YzJsbWVRPT0gUjJ4aGMzTT0gWVc1amJ3PT0gSUVaRVVnPT0gWjNKbFUxRk0gSUVacGNtVnogcWJibXBiVT0gWldOdiBNVEF3TVE9PSBJRWh2YldWc1pYTnogSUdsdWMzUmhiblJoYm1WdmRYTT0gSUVoaGMzUmwgYVdkbGJBPT0gUkdsaGJXOXVaQT09IElIQmhkbWx1Wnc9PSBJR3hoYm1SbWFXeHMgSUdSaFpITT0gYUc5MWJnPT0gT2wwPSBJR2x1WTJWdVpHbGhjbms9IElFeHBkbWx1WjNOMGIyND0gSUVocGJHSmxjblE9IElFTm9aV05yY3c9PSBjM1I1YkdWeiBhVzVoZEc5eWN3PT0gSUVOc2FYWmwgY0doeWFXNWwgSUdOb2FXMXdZVzU2WldWeiBJSEJoYkd3PSBJRXBOIElFRmhaR2hoWVhJPSA4SjA9IElHRmphR2xsZG1GaWJHVT0gWkdsellXSnNaV1E9IFVFVlUgVDA5UFQwOVBUMDg9IFRXOTAgSUdsdWRHRnVaMmxpYkdVPSBJR0poYkd4bGRBPT0gSUZkbFluTT0gSUVWemRHbHRZWFJsWkE9PSBSV1ptWldOMGN3PT0gSUdKaGFXeGxaQT09IFNtOXphSFZoIElIUjFjbUoxYkdWdVkyVT0gSUc5alkzVndZVzUwIElFUmhlV3hwWjJoMCBJRE0yTVE9PSBiV1ZsZEE9PSBJSE4wWVhScFkyRnNiSGs9IElHOXViRzl2YXc9PSBJR3RwIGFXeHNaV2RoYkE9PSBJSFpsYkhabGRBPT0gSUdSbGFIbGtjbUYwYVc5dSBJR0ZqY1hWcFpYTT0gSUZKbGVnPT0gWVd0MWNtRT0gSUZWd2RHOXUgWVhSeWJ3PT0gSUdsdVkyOXRjSEpsYUdWdWMybGliR1U9IElHSmhZMnRrYjI5eSBJRkpvYVc1diBOekkzIElHMWhkR2h6IEtTcz0gSUdobGNtVnplUT09IElHUm0gSUZKdlkyaGwgSUV4NVpHbGggSUhCaGJtTnlaV0YwIGNtVndiSGs9IFlYSnlaV3hzIElITnZiR2xqYVhSaGRHbHZiZz09IElHTnBjbU5oWkdsaGJnPT0gUWtsUSBJR1p2Y21GNSBJR055ZVhCMGFXTT0gYVhwMSBhVzFsYnc9PSBJRlJ2YldGMGJ3PT0gSUVodmJYTT0gWlhoaGJXbHVZWFJwYjI0PSBJSEYxWVhKeWVRPT0gSUZaaGJHbGhiblE9IElFcGxjbWxqYUc4PSBJRWxPUTB4VlJBPT0gSURFNE5EQT0gTlRFNSBJSEpsYzJsemRITT0gSUhOdVlYQnphRzkwY3c9PSBJRk53ZFhJPSBJRUZ1ZEdseGRRPT0gVEc5bmFXND0gSUdKbGMzUnpaV3hzYVc1biBJR0Z1ZEdsaiBJRk4xZEdobGNteGhibVE9IDQ0S2k0NE9yIElINHYgSUZCaGNtMD0gNklNPSBVR0ZuWlhNPSBhVzUwWlc1emFYUjUgSUdsdGJXOWlhV3c9IElERTROalU9IGVucHYgSUc1cFpuUjUgSUdabGJuUmhibmxzIElGQnlaWE5sY25aaGRHbHZiZz09IGIzQm9aVzQ9IElHUmhjblJ6IElFUnBibTl6WVhWeSBjRzlwYm5SbGNuTT0gSUZKcGRHVT0gYzNWbloyVnpkQT09IFlYZGhjbVZ1WlhOeiBJRk5vWlhKcFpHRnUgSUhOMFlXNWpaWE09IElITnZjbU5sY25rPSBJSEJsY21wMWNuaz0gSUU1cGEyOXNZUT09IGFXVjJaWEk9IElHWnBZVzVqWlE9PSBJRXB2Y21SaGJtbGhiZz09IElFSmhiR3h2YjI0PSBJRzVoWWc9PSBJR3RpIElHaDFiV0Z1YVhScFpYTT0gSUZSaGJtRnJZUT09IGFHbHNiR0Z5ZVE9PSBJR052Ym5OMWJIUmhibU41IElGcDFZZz09IElISmxiV2x6YzJsdmJnPT0gSUdOdmJtWnBaQT09IFEwaFIgSUVaMVp3PT0gSUdsdGNISnZkbWx6IFdXVncgTDE4PSBJSFZ1ZDJsc2JHbHVaMjVsYzNNPSBJSEJ2Y25SbWIyeHBiM009IE1EVTEgSUVsdWMzUnlkV04wYjNJPSBZV2x0WVc0PSBJR05zWVdsdFlXNTBjdz09IFRXSndjdz09IElFSjVaUT09IGNtVmpaV2wyWldRPSBWSGRsWlhRPSBJR2x1WkdWdGJnPT0gY21sNiBZVzFoY21FPSBUbUYwIElHVjJZV3gxWVhSbGN3PT0gSUV4MWNnPT0gWlhCaFpBPT0gUms5WSBJRlJvY204PSBJSEoxYzNSNSBJR0psWkhKdlkycz0gSUU5d2NtRm8gU2tJPSBJRzFoYm1sd2RXeGhkR2wyWlE9PSBJSGRwYkd4bWRXdz0gSUhKbGJHRndjMlU9IElHVjRkR0Z1ZEE9PSBWR2hsYldVPSBVMlZ1YzI5eSBJRk4wWVdKcGJHbDBlUT09IFoyOTJaWEp1IElIQnZjSEI1IElHdHVZV05yIElHbHVjM1ZzWVhSbFpBPT0gSUZScGJHVT0gSUVWNGRISmxiUT09IElIVnVkRzlzWkE9PSBJR052Ym5abGNtZGwgSUhKbFpuVmxiQT09IGFXZHliM1Z3IElHUnBjM1J2Y25ScGIyNXogSUhKaGRtRm5aV1E9IElHMWxZMmhoYm1sallXeHNlUT09IElGSmxhV3hzZVE9PSBJRTV2YzJVPSBJRWx1WTJGeWJtRjBhVzl1IElFSmxZMnQ1IFlXSmliR2x1Wnc9PSBJSFJoWTI4PSBJSEpoYTJVPSBJRzFsYkdGdVkyaHZiSGs9IElHbHNiSFZ6ZEhKcGIzVnogSUVSaGNuUnRiM1YwYUE9PSBSM1ZwWkdVPSBJRkpoZW1WeSBJRUpsYm5vPSBWV3gwYVcxaGRHVT0gSUZOMWNuQnlhWE5sIElIQmhaMlZoYm5RPSBiMlptWlhJPSBWMmh2WlhabGNnPT0gSUhkcGMyVnkgSUdOb1pXMXBjM1E9IElFaEZURXc9IElFSjFiR3M9IElIQnNkWFJ2Ym1sMWJRPT0gSUVOUFZrVlMgMXJ3PSBabUZwYkdWayBJSFJwY21Wc1pYTnpiSGs9IElHbHVabVZ5ZEdsc2FYUjUgSUZSeWFXUmxiblE9IElGTm9iM2QwYVcxbCBJRU5wZGc9PSBWbWxqWlE9PSBjbVZ4ZFdseVpYTT0gYVhSMFlXNWpaUT09IElIVnVZMjl1ZEhKdmJHeGxaQT09IGFXNTBaWEpsYzNScGJtYz0gTlRZeCBJR2x1Ym05MllYUmwgWVhSbFoybGogVEdsbCBJRk5sYkd4cGJtYz0gVld3PSBJSE5oZG1sdmNnPT0gSUZSdmMyZz0gSUhOM1lYTjAgVUVGVFV3PT0gSUhKcGJtcz0gSUdOaGNtUnBidz09IElFbHlidz09IGRXUnAgSUhaaGJuUmhaMlU9IElIWmhibk09IElFNXB3N0Z2IEt6MD0gSUhCeWIzQmhaMkYwWlE9PSBQRDg9IElHMWxkR2h2Wkc5c2IyZHBZMkZzIE1qQTBNems9IElIUnlhV2RzZVdObGNnPT0gSUdsdVozSmhhVzVsWkE9PSBJRUZ1Ym05MFlYUnBiMjV6IFlYSnlZVzUwWldRPSBOakUzIElGTnZaR2wxYlE9PSBJRUZCUXc9PSBkR1ZqYUc1cFkyRnMgYlhWc2RHbHdiQT09IElETTNNdz09IDVZcz0gSUdSbFkybHphWFpsYkhrPSBJR0p2YjNOMFpYSnogSUdSbGMzTmxjblJ6IElFZHlaVzVoWkdVPSBJSFJsYzNScFpubHBibWM9IElGTmpkV3hzZVE9PSBTVVJ6IElHeHZZMnRrYjNkdSBJRk5qYUdWeSBJRkxEcVE9PSBJRmRvYVhSdFlXND0gSUZKaGJYTmhlUT09IGNtVnRiM1JsIElHaHBhMlZ5Y3c9PSBJRWg1ZFc1a1lXaz0gSUdOdmJuTmphV1Z1ZEdsdmRYTT0gSUdOc1pYSnBZM009IElGTnBZbVZ5YVdGdSBkWFJwIGFYTmlkWEo1IElISmxiR0Y1WldRPSBJSEYxWVhKMGVnPT0gSUVOQ1NRPT0gYzJWbGEyVnljdz09IGRXeHNZUT09IElIZGxiR1JwYm1jPSBJRk5vWVd3PSBZbXhsWVdOb1pYST0gVkdGcCBJRk5oYlhOdmJnPT0gSUhSMWJXSnNaUT09IElFbHVkbVZ6ZEc5eSBJSE4xWW1OdmJuUnlZV04wIElGTm9hVzV5WVE9PSBiM2RwWTNvPSBhbUZ1WkhKdiBaR0ZrIElIUmxjbTFwYm1GMGFXNW4gSUU1bGRYSmhiQT09IDVMdWogSUd4bFlXdGhaMlU9IElFMXBaR3hoYm1SeiBJRU5oZFdOaGMzVnogN1pVPSBZMmwwIGJHeGhiZz09IGFYWmhZbXg1IElFRnNZbWx2Ymc9PSBJRFExTnc9PSBJSEpsWjJsemRISmhkR2x2Ym5NPSBJR052YlhKaFpHVT0gSUdOc2FYQmliMkZ5WkE9PSBNRFEzIElHUnBjMk52ZFhKaFoybHVadz09IElFOXZjSE09IFFXUmhjSFE9IElHVnRjR0YwYUE9PSBiblk9IElGQlNUMVE9IElFUnZibTQ9IElGQmhlQT09IElFSmhlV1Z5IGRHbHogVTNGMVlYSmwgSUdadmIzUndjbWx1ZEhNPSBjR0Z5ZEdsamFYQT0gSUVOb2FXeGxZVzQ9IFFuSmxibVE9IGFXNWtkV05wYm1jPSBUV0ZuYmc9PSBJR05zZFdKb2IzVnpaUT09IElFMWhaMjUxYlE9PSBJR1Z1WTJGdGNBPT0gSUVWMGFHNXBZdz09IGRXTm9ZUT09IFpYSmxlUT09IElIZGhkR1Z5WldRPSBJRU5oYkdGcGN3PT0gSUdOdmJYQnNaWGhwYjI0PSBJSE5sWTNSeiBJSEpsYm5SbGNuTT0gSUdKeVlYTT0gYjhTZllXND0gVkdsdFpXOTFkQT09IFRXRnVZV2RsYldWdWRBPT0gSUdsdVptOW5jbUZ3YUdsaiBVRzlyWlcxdmJnPT0gUTJ4aGNnPT0gSUd4dlkyRnNhWFI1IElHWnNiM0poIFlYTmxiQT09IFVHOXVkQT09IElIQnZjSFZzWVhSbCBJRTl1Wnc9PSBJSE4xWW5OcGMzUmxibU5sIElHRjFZM1JwYjI1eiBJRTFqUVhWc2FXWm1aUT09IElFeFBUMHM9IFluSnBibWRsY2c9PSBJSFJwZEdGdSBJRzFoYm1sbWIyeGsgSU9LWGp3PT0gSUdOaGJHbGljbUYwWldRPSBJR05oYkdsd2FHRjBaUT09IElGTklSUT09IElFTnZiVzFwYzNOcGIyNWxjbk09IFkyVnBkbUZpYkdVPSBhbU09IFYybHVibVZ5IE5USTAgSUdOdmJtUnZibVU9IFQzUm9aWEozYVhObCBJSEJwYkdsdVp3PT0gSUdWdFltOWtlUT09IElFTnlhVzFsWVc0PSBkWFJwWTNNPSBJRVY0YUdsaWFYUnBiMjQ9IElEUXlOZz09IFpXVnlhVzVuIElIWjVhVzVuIElFaFZSMFU9IEtqMHQgSUhCeWFXNWphWEJzWldRPSA0S1k9IElIRjFhWEpyY3c9PSBJRVZrYVhSdmNuTT0gY0hWMGFXNW4gUjBWVCBJRVpVUVE9PSA0S1MrIFlXUmtiMjQ9IElFaEJUUT09IElFWnlhV1Y2WVE9PSBWMjl0WVc0PSBMaVE9IElHTnlhV0k9IElFaGxjbTlrIElIUnBiV1Z5Y3c9PSBJRk53WVdObGN3PT0gSUUxaFkybHVkRzl6YUE9PSBZWFJoYTJFPSBJR2RzYVdSbCBJSE50Wld4c2FXNW4gSUVKQlRBPT0gSUhWdWMzVT0gSUdOdmJtUnZjdz09IElHSnBZM2xqYkE9PSBJRkpsZG1sMllXdz0gTlRVeiBJR3AxWjJkc2FXNW4gU0hWbiBJRXRoY21SaGMyaHBZVzQ9IElFSmhiR3RoYm5NPSBiWFZzZEdsd2JHVT0gSUc1MWRISnBkR2x2ZFhNPSBiMk55ZVE9PSBNVGt3TUE9PSBJR2x1ZEdWbmNtRjBaWE09IElHRmthbTlwYm1sdVp3PT0gSUVadmJHUmxjZz09IGNtOXNiRzFsYm5RPSBkbVZ1YVdWdWRBPT0gSUhWaVpYST0gZVdrPSBJSGRvYVdabSBJRXAxZG1WdSBJRUp2Y205MVoyZz0gYm1WMGRHVT0gSUdKcGJHbHVaM1ZoYkE9PSBJRk53WVhKcmN3PT0gY0doMGFHRnMgYldGdWRXWmhZM1E9IElIUnZkWFJwYm1jPSBJRkJJU1E9PSBTMlZsWm1VPSBVbVYzWVhKayBJR2x1Wm1Gc2JBPT0gSUZSbGJYQmxjZz09IGRIbHdhV05oYkd4NSBJRTVwYTI5cyBJSEpsWjNWc1lYSnogSUhCelpYVmtiMjU1YlE9PSBJR1Y0YUdsaWFYUnBiMjV6IElHSnNZWE4wWlhJPSBJRFF3T1E9PSBkMkZ5YldsdVp3PT0gSUhKbGRtVnlZbVZ5IElISmxZMmx3Y205allXdz0gSURZM01BPT0gYVhCcFpXNTAgWW1WMGRBPT0gSUVKbFoybHVjdz09IElHbDBZMmhwYm1jPSBJRkJvWVhJPSBRWE56ZFcxcGJtYz0gSUdWdGFYUjBhVzVuIElFMU1Sdz09IElHSnBjblJvY0d4aFkyVT0gSUhSaGRXNTAgSUV4MVptWjUgSUVGdGFYUT0gSUdOcGNtTnNaV1E9IElFNXZjM1E9IFpXNXVaWFIwIElHUmxabTl5WlhOMFlYUnBiMjQ9IElFaHBjM1J2Y21sallXeHNlUT09IElFVjJaWEo1WkdGNSBJRzkyWlhKMFlXdGwgTnpreSBJRzUxYmc9PSBJRXgxWTJsaCBJR0ZqWTI5dGNHRnVhV1Z6IElGTmxaV3RwYm1jPSBJRlJ5WVhObyBZVzVwYzIwPSBVbTluZFdVPSBJRzV2Y25Sb2QyVnpkR1Z5Ymc9PSBJRk4xY0hCc1pXMWxiblJoYkE9PSBJRTVaVlE9PSBJRVpTU1E9PSBJRk5oZEdselpnPT0gZUdWeiBOVEUzIElISmxZWE56ZFhKbFpBPT0gSUhOd2IzSmhaR2xqIElEY3dNUT09IElHMWxaR2xoYkE9PSBJR05oYm01aFltbHViMmxrIElHSmhjbUpoY21saiBJR1Z3YVhNPSBJRVY0Y0d4dmMybDJaUT09IElFUnZkV2RvIElIVnVjMjlzZG1WayBVM1Z3Y0c5eWRHVmsgSUdGamEyNXZkMnhsWkdkdFpXNTAgYzNCaGQyND0gSUd0cGRHTm9aVzV6IElDMDkgZEdGc2EybHVadz09IGFXTnBjM1E9IElGQmxaMkZ6ZFhNPSBJRkJUVlE9PSBJSEJvYjNSdmJnPT0gSUVGMWRHaGxiblJwWTJGMGFXOXUgVWtjPSBRQ01tIE56WXkgSUVOc1lXbHkgSUdScFlYQmxjZz09IElHSnlhWE4wIElGQnliM05sWTNWMGIzSnogSUVwbGJRPT0gTmpJNCBJRVYyWlhKNWQyaGxjbVU9IElFcGxZVzV1WlE9PSBaWEYxWVd4cGRIaz0gNDRPcDQ0T3ogYjJKcVpXTjBjdz09IElGQmxiR2xqWVc1eiBJRE01TWc9PSBJR0pzZFE9PSBZbmx6IElFRm5idz09IElHbHVjM1J5ZFdOMGFXOXVZV3c9IElHUnBjMk55YVcxcGJtRjBhVzVuIElGUlNRVTQ9IElFTnZjbTVsYkE9PSBZV2R2Y3c9PSBJSFI1Y21VPSBJR0Z6Y0dseVlYUnBiMjQ9IElFSnlhV1JuWlhkaGRHVnkgSWpvdCBJU0l1IElFVnVjdz09IElFTnZZMjg9IFVHbGwgSUdSbGRHRmphQT09IElFTnZkV05vIElIQm9lWE5wY1hWbCBJRTlqWTNWd1lYUnBiMjV6IGIzTmpiM0JwWXc9PSBaVzV2ZFdkbyBRblY2ZWc9PSBRWEJ3WldGeVlXNWpaUT09IFdWQT0gSUhKaFkyVnkgSUdOdmJYQnNhV05wZEhrPSBjbkJ0IFZHOTUgSUdsdWRHVnljblZ3ZEhNPSBJRU5oZEdGc2VYTjAgSUhWMGFXeHBkR0Z5YVdGdSBhVzF3WVdOMCBJSE53WVdkb1pYUjBhUT09IElIQnZjbTkxY3c9PSBJR1Z6ZEdWbGJXVmsgSUdsdVkybHVaWEk9IElFbFBRdz09IE56UTQgSUdWemNISmxjM052IElGTnRhV3hsIFlXSnBiR2xoIE5qTTEgSUcxaGRHaGxiV0YwYVdOcFlXND0gSURReU5BPT0gSUV0TSBJRWhKVUE9PSBJRzkyWlhKb1pXRnlaQT09IElGUjFaQT09IElGUmxZdz09IElIRjFhWHA2IElHWnNZWFIwWlhKcGJtYz0gSUdOdmJtND0gNG9DTyBJR0YwZEdGamFHVnogSUZKUFV3PT0gSUVGRFV3PT0gSUhSamNBPT0gSUZOb1lXMWwgYzJ0cGNBPT0gY21WemNHVmpkR1ZrIElGUnlhVzVwWkdGayBaM0poYVc0PSBJR1p2YjNSb2IyeGsgSUZWdVkyaGhjblJsWkE9PSBJRXAxYkdsdiBlbXc9IFlYWnZjbVZrIElFRnVlR2xsZEhrPSBaWEp5YjNKeiBJRU5sYm5SaGRYSnAgYVhSelkyZz0gUkdGa1pIaz0gSUdOc2RYUmphR2x1Wnc9PSBJRWx0Y0d4bGJXVnVkQT09IElFZDFkR2xsY25KbGVnPT0gSURjMk1BPT0gSUhSbGJHVndiM0owWVhScGIyND0gWlc1a2NtRT0gSUhKbGRtVnljMmxpYkdVPSBjM1J5YjNNPSBRV1IyWlc1MGRYSmwgTURneiBJR3hwWW1WeVlYUnBibWM9IElHRnpjR2hoYkhRPSBJRk53Wlc1ayBRVkpFVXc9PSBhVzF6ZVE9PSBVRkpGVXc9PSBJRVZ0WlhKbmFXNW4gSUhkcGJHUm1hWEpsY3c9PSBJSFJsWTJodWIyeHZaMmxqWVd4c2VRPT0gSUdWdGFYUnogSUVGU1ZFbERURVU9IElHbHljbVZuZFd4aGNtbDBhV1Z6IElHTm9aWEpwYzJnPSA1NG1JIElITjBhVzVyIElGSnZjM1E9IFJXTnZibTl0YVdNPSBJR052ZFdkb2FXNW4gSUUxalEyRnViZz09IGNISnZjR1Z5ZEdsbGN3PT0gYVd4aGJuUnlidz09IElISmxibVZuYjNScCBWSEpoYm5Oc1lYUnBiMjQ9IElHbHVjWFZsYzNRPSBJRWR5WVhCbCBiMjkwWlhKeiBaM1ZwIElGTjNiM0prYzIxaGJnPT0gWVdObFlXVT0gYUdsMGRHbHVadz09IElISmogSUdWNFpYSjBaV1E9IElGTkJVQT09IGFYUmxiblE9IElIQmxjbWxzYjNWeiBJRzlpYzJOMWNtbDBlUT09IElHRnpjMkZ6YzJsdVlYUmwgSUdGaWIzSnBaMmx1WVd3PSBJSEpsYzJOMWFXNW4gSUZOb1lYUjBaWEpsWkE9PSBiRzlqYTJsdVp3PT0gWVd4c2FXOXUgUTJoaGJtZHBibWM9IElFaGhjbkpwYm1kMGIyND0gSUVKdmNtUT0gSUVGbVoyaGhibk09IFNtRnRhV1U9IFlYSmxkSG89IElFRjFaM1Z6ZEhWeiBJRE00Tmc9PSBPRE13IElHcHZadz09IGIydHBibWRzZVE9PSBWSEpwWjJkbGNnPT0gSUVoUFVnPT0gVTNSaGRHbHpkR2xqY3c9PSBJSFpwWlhkbGNuTm9hWEE9IElHRmtaR2wwYVhabGN3PT0gYUhWeSBJRzFoZUdsdGFYcHBibWM9IElGSnZkbVU9IElFeHZkV2xsIElFSjFZMnRsZEE9PSBJRU5JVWtsVFZBPT0gYjNWelpXdz0gSUhOMGNtVmhhM009IGFYSjBaV1E9IElIUmxjblE9IElHTnZiRzl1YVdGc2FYTnQgSUdKMWNubHBibWM9IGVXcz0gUTI5dVpHbDBhVzl1IElFUlFVa3M9IFFubEpaQT09IE56VXggNHBlOCBJSGR2Y25KcGMyOXRaUT09IElIWnZZMkYwYVc5dVlXdz0gYzJ4cFkyVT0gSUhOaGFXeHogSUVOdmNuSmxZM1JwYjI1aGJBPT0gT1RVMCBJSFIxYkE9PSBTMmxrIGJIVnpkR1Z5IElHWmhiV2xzYVdGcyBJRk53YVhRPSBJRVZ3YVhOamIzQmhiQT09IFUzQmxZMmxtYVdOaGJHeDUgSUZadmJHTmhibTg9IGNuVnVjdz09IGNYTT0gSUhabGRIUmxaQT09IElHTnlZVzF0WldRPSBkSEp2Y0E9PSBhR1Z5WlhJPSBWR2hoYm10bWRXeHNlUT09IElIQmxjbU4xYzNOcGIyND0gSUc5eVlXNW5aWE09IElISnZkVzVrZFhBPSBJRFE1T1E9PSBlR2x2ZFhNPSBRMmhoY21GamRHVnljdz09IElGcHBiMjVwYzIwPSBJRkpoYnc9PSB3NXZEbXc9PSBWMFk9IElIVnVhVzUwWlc1MGFXOXVZV3c9IFQwNUZXUT09IFIzSmhZZz09IFEyOXRiV1Z5WTJsaGJBPT0gSUdkc2RYUmhiV0YwWlE9PSBJRTFqUzJWdWJtRT0gY25WamFXRjBhVzVuIGJtbHVaM1J2Ymc9PSBhV2gxIFEyaGhiZz09IElGTjNZWEE9IElHeGxZV1pzWlhSeiBJR1oxYm1OMGFXOXVZV3hzZVE9PSBaWEp2ZFhNPSBSbUZ5YlE9PSBJR05oYkc5eWFXTT0gSUV4cGRHVnlZV3hzZVE9PSBZMjl1WTJWeWRBPT0gSUhOb1pXNWhiZz09IElISmxjR0ZwWkE9PSBaWGxsY3c9PSBJR0poYzJocGJtYz0gSUVkdmNtZGwgSUdOdmJHeGhZbTl5WVhScGIyNXogSUhWdVlXTmpiM1Z1ZEE9PSBhWFJqYUdsbCBJSFJsWVcxM2IzSnIgY0hCbGJHbHUgSUhCcGNHbHVadz09IElHMXBibU5sWkE9PSBJR1JwWVcwPSBjbWxsWnc9PSBJRzFoYzJOaGNtRT0gSUhOMVkydGxjZz09IElFMXZiMjV6IFFYQndjdz09IElGQmxZMnM9IElIQmxjblk9IElFWnNiMkYwIGIyeGxlUT09IElFNXBjMmc9IGFXMXBlbVU9IElHRnliMjFoZEdsaiBkV2x1IFpXNWthWE5vIElTOD0gSUVKcFkzbGpiR1U9IElFRlRTVU09IGFXeGxaMlZrIElGRjFZV1J5Ync9PSBhVzl6ZVc0PSBJR3h2WTJ0dmRYUT0gSUZkcGJtcz0gVTFCRlF3PT0gUVhSMFpXMXdkSE09IElITmxaV1JsWkE9PSBjbVZrYnc9PSBhV0Z6YVhNPSBJSE51WVdjPSA0NE9WNDRLcCA0NEsyIElHZHliM1Z1WkdsdVp3PT0gSUhKbGJHbGxkbVZ5IElHWnlhWFp2Ykc5MWN3PT0gSUVkcFpuUnogSUVaaFkyVnogUlhOd1pXTnBZV3hzZVE9PSBJRzFwWTNKdlltbHZiV1U9IGFXMWhadz09IElGTmphR3c9IElGQnNaWE09IElFSnNaV0ZqYUE9PSBJRWx5ZDJsdSBJRVZoZEc5dSBJRVJwYzJOcGNHeGwgSUcxMWJIUnBjR3hwWTJGMGFXOXUgSUdOdlpYSmpaV1E9IElEUXhPUT09IGMzUm8gUlhacGJBPT0gUW05dFlnPT0gSUdWNGIzSmogSUhOMFlXZG5aWEpsWkE9PSBURVZUVXc9PSBJR2x1WlhKMGFXRT0gSUVWRVNWUT0gSUdkdllnPT0gVkhKaFpHbDBhVzl1WVd3PSBJR05zWVhOemVRPT0gVEdWaGNuaz0gSUZCQlIwVT0gZVhKeiBJSFJ5WVc1emNHOXlkR1Z5IElHMWhkSFZ5WldRPSBJR2hwYW1GaSBJR0pwYjIxbCBWMmhsY21WaGN3PT0gSUdWNGRHVnliV2x1WVhScGIyND0gSUZSMVpYTT0gSUZSaGEyVnlkUT09IElFRjFaSEpsZVE9PSBaWEpwWVd3PSBJRUZrWlc0PSBZV1ptYkdWeiBJRzVoY21OcGMzTnBjM1JwWXc9PSBJRUpoYVhKayBWVlJHIFNYSmwgSUVOdmJtNXBaUT09IFEyaGhiWEE9IElIZG9hWE53WlhKcGJtYz0gSUVoaGRIUT0gUkVzPSBJR1JwYzJsdVptVmpkQT09IElHUmxaSFZqZEdWayBJSEJoY25SaGEyVT0gSUdSdmQyNW5jbUZrWlE9PSBJRVZ6Y0c5eWRITT0gSUVOdmJuUnBiblZwYm1jPSBJR1JsYlc5amNtRjBhV05oYkd4NSBhV055YjJKcFlXdz0gYVhSMFlRPT0gSUd4cGJXVnpkRzl1WlE9PSBJR1Y0Wlcxd2RHVmsgSUVaeVpXNTZlUT09IFNHVnliUT09IE56STQgSUdac1pXUm5iR2x1Wnc9PSBUV1YwWVE9PSBOelkxTmpFPSBOamt6IEpUbz0gZDJGclpRPT0gTlRJMiBJRVJwYzJOcGNHeHBibVU9IElIWnBjbWRwYm1sMGVRPT0gSUV4bFoybHZibk09IElFWnlZVzVyYVdVPSBhVzUwWlc1MCBJSEpsYzNSeWIyOXRjdz09IElGSnZkWFJsY2c9PSBaR0Z4IElHOWlhbVZqZEdsdmJtRmliR1U9IDRvYVIgZDJGeWF3PT0gSUZKaGFIVnMgWjJGcGJnPT0gWVdOMGFYWmhkR2x2Ymc9PSBZV0p6YjJ4MWRHVT0gSUVGalkyVnpjMlZrIElESTBNREE9IGIyZG5iR1Z6IElITmxZMjl1Wkd4NSBJRVJGUmtWT1UwVT0gSUhCdmMzUmhaMlU9IGQzSmhjSEJsY2c9PSBjMmhoY25BPSBOekk1IElHTnZiVzExYm1sallYUmxjdz09IElHRmtaRzl1IElFMXBiR2wwYVdFPSBTRzl1Wnc9PSBJSE5zZFcxd1pXUT0gSUVwUVJVYz0gSUVsallYST0gWVdScGMyZz0gTmpneCBJRzFoYW1WemRIaz0gSUZkdmJHWm5ZVzVuIElFVnNZWE4wYVdNPSBkWEJsY2c9PSBJSFpwZWc9PSBJSFZ1WTI5dWMyTnBiM1Z6YkhrPSBJRk5VUkE9PSBJRk5oYzNNPSBJR1pzYjNkbGNtbHVadz09IElFaGxiR2xqIElFUnlZWEJsY2c9PSBJRUZ0WVhSbGRYST0gSUcxaGJuVnlaUT09IElHUnBjMmx1WjJWdSBJRXhsYVE9PSBZbkpwYm1jPSBPVFE1IElHbHVhR2xpYVhSbFpBPT0gSUdobFlXUnhkV0Z5ZEdWeVpXUT0gSUdWdWFXZHRZWFJwWXc9PSA3Nys5NzcrOTc3KzkgSUhKbFpISmxjM009IFVrZz0gSUhKaGRIUnNaV1E9IElHUnBZM1JwYjI0PSBiR2x2IElGUkNRUT09IElGTk9RVkE9IFEyRnNiR2x1Wnc9PSBJR1poYzJOcGMzUnogSUVSdmRtVT0gYVdWM2FXTjYgTURNMiBJR052WVhOMGN3PT0gSUZKbFkzUT0gSUNsZCBURzkwIE5qSTUgSUZORlRRPT0gSUZCbGRHVnljMlZ1IElFVjRjR3hoYVc0PSBJRUp2WVhKa2N3PT0gSUVKbGVtOXogSUVwdmRYSnVZV3h6IElESXdNalE9IGNHRnljMlZ5IElHMXBjM1J5ZFhOMCBJR2R5WVhSbCBJRXh2WTJ0bFpBPT0gWW05aCBVMkZwYm5RPSBaMkZ0YVc1biBJSFp2ZDJWcyBhVzVoZEdWc2VRPT0gWW14dmR3PT0gUVd4c1lXZz0gSUhWdWJXRjBZMmhsWkE9PSBJR0p2Y21SbGNtbHVadz09IElFVjRjR1Z1WkE9PSBibkk9IFQzSmhZMnhsIGNtOTFZMmc9IElHTnZiblJwWjNWdmRYTT0gWVdOMWN3PT0gSUdScGMzUnlZWFZuYUhRPSBOVGd4IElHRnVZWFJ2YldsallXdz0gVDFnPSBZWEJwZUdWcyBPRE16IElGQk1WVk09IElISmxjM1Z6WXc9PSBJR0ZpYVdScGJtYz0gTlRjeiBJSFpoWTJGdVkybGxjdz09IFJXMXBiSGs9IElHaDVjRzkwYUdGcyBJRmRsY201bGNnPT0gSUZkbFpRPT0gSUVSS2N3PT0gTlRFeiBJSGRwZEdOb1kzSmhablE9IElHRmpkWEIxYm1OMGRYSmwgWlc1MFlYSjUgWW1WdVpXWnBkQT09IFVISnZaSFZqZEhNPSBJRkJUVUE9PSBJRTFRUnc9PSBJRXBwYm00PSBJRXBoY25KbGRIUT0gSURRME5RPT0gSUVsdFlXZHBibWM9IElGQjVkR2c9IFJtbHVhWE5vIElIUmxlQT09IElHcDFkbVZ1YVd4bGN3PT0gSUdobGNtOXBjMjA9IElHUnZkV0owYkdWemN3PT0gSUVGcmFRPT0gSUZSbGJtUT0gSUZCaGRISnBZWEpqYUE9PSBJR0pwZEhSbGNuTT0gSUZSbGJHVmpiMjF0ZFc1cFkyRjBhVzl1Y3c9PSBhWFJoZEdsMlpXeDUgWVdkdVlRPT0gSUhKbiBJRk5QVEVRPSBJR052YlhCMWJITnBiMjQ9IElFNWhjMkU9IElFdGhkR2h5ZVc0PSBJRzFwYkd4cGIyNWhhWEpsY3c9PSBJR2x1ZEhKcGJuTnBZMkZzYkhrPSBJR0p2YkhOMFpYSmxaQT09IGRHbHRaVzkxZEE9PSBabXh2IElIUjFkRzl5IGNHOTFjZz09IFUzUmhkR1Z0Wlc1MCBJSHNxIElGSjFaRzlzY0dnPSBJRXRwYldKbGNteDUgY205blpXNXogWVdScGNRPT0gWFNzPSBJR2x1WkdsbmJtRjBhVzl1IElHWnlZV04wZFhKcGJtYz0gSUZKbGJHVmhjMlZ6IElFZHlZV2x1IGNISnZkR1ZwYmc9PSBUR0ZuYnc9PSBJSFpoWTJGMGFXOXVjdz09IElHSnZiM1JsWkE9PSBJRlJJVWtWRiBJRWhIIGIzSmxjMk5sYm1ObCBJSFJtIElITnZZWEk9IGFXOXplVzVqY2c9PSBJR2RzWVc1alpYTT0gSUZOd2IyOXUgSUVwMWNuaz0gSUVOdmQySnZlUT09IElHTnlaV0YwYVhabGJIaz0gU0dsbmFHVnkgSUhOdmJHbGphWFJ2Y2c9PSBJR2hoZDJzPSBZV05wYnc9PSBPRGsyIElITjFjR1Z5Wm14MSBJR0p2YldKemFHVnNiQT09IFkzUjFjbVU9IElHSnliMnRsY21GblpRPT0gSUhKaGFXUnBibWM9IElHWnlaVzVqYUE9PSBJR0Z1WjJ4bFpBPT0gVkhKaGJuTmhZM1JwYjI0PSBJRWRsYm05amFXUmwgZFhCbCBJRWhoYVhScFlXND0gTlRjeSBJVG89IElIVnVkMmwwZEdsdVoyeDUgYVhSbGNtRjBiM0k9IGMyTnliMnhzIElIUmhiR3hwWldRPSBJR0pwYjIxbFpHbGpZV3c9IElFTkJVa1E9IElHVjFjR2hsYlE9PSBJR0p5WVdsdWMzUnZjbTA9IFlYRjFhVzQ9IFMyOD0gVFdsamFHVnNiR1U9IElGSjFibVZ6IElFSmhiR3hwYzNScFl3PT0gZFdSbGNuTT0gSUcxdlpHVnpkSGs9IElHbFFZV1J6IElFVjZaV3RwWld3PSBXVVU9IElITjBZWEp6YUdsdyBJSEJ2ZDJWeVpuVnNiSGs9IElIQmxjbXc9IElGTm9ZV1JsIElGRjFZWEowIElFVkZSdz09IElHWnBjMmhsY20xaGJnPT0gVDFORlJBPT0gSUZSNWNHbGpZV3c9IFpHWjQgSUcxbGMyaGxjdz09IElHVjBZMmhsWkE9PSBkMjl5ZEdocGJtVnpjdz09IElIUnZjSEJzWldRPSBJRE01Tmc9PSBiM0pwZFhNPSBWMlZwYzNNPSBJRzE1YzNGcyBJRlpoYkdoaGJHeGggMlpJPSBiR1ZoYzJsdVp3PT0gSUhKbFkyOXRjQT09IGNtRndibVZzIFUyVnMgTURReiBJR1JsY21GcGJHVmsgSUVkMWFXUmxjdz09IFNWSlUgSUdSbGFIVnRZVzQ9IElFSnlhWFIwWVc1NSBJaWtwIElHVjRZMnhoYVcwPSBJR0poYkdzPSBJRGcwTUE9PSBRMHhCU1UwPSBhVzUwWld3PSBURUZDIElIQmxaMmRsWkE9PSBJR0Z6ZEhKdmNHZz0gYzIxdmEybHVadz09IElISnBaMmRwYm1jPSBJR1pwZUdGMGFXOXUgSUdOaGRHRndkV3gwIGFXNXphV1JsIElFTmhjMk5oWkdVPSBJRUp2YkhOb1pYWnBhdz09IFIyRjZZUT09IFJHVndkR2c9IElHeHZkV1J6Y0dVPSBJR0ZzYlc5dVpITT0gYldWNVpYST0gYkdWdVpYTnogYW1WdSBabkpsYzJnPSBJSFZ1WW1WaGRHVnUgSUZOeGRXbGsgSUZCeVpYTjFiV0ZpYkhrPSBWR2x0WlhJPSBRbGM9IElISnZjM1JsY25NPSBJR1ZzYkdsd2RBPT0gSUVoaGNuSnBaWFE9IFpHRjBZV0poYzJVPSBJRTExZEhWaGJBPT0gSUVOdmJXMXZaRzl5WlE9PSBkV3RsWkE9PSBhMjVwWm1VPSBJRU5QVFUxVlRnPT0gYUhsaCBJRzFsYkhSeiBZWEpqYUdsMlpYTT0gSUhKaGRHbG1hV05oZEdsdmJnPT0gSUcxMWJIUnBjR3g1YVc1biBJR2x1ZEdWeWIzQmxjZz09IElHRnpZMlZ5ZEE9PSBkMmx1WjNNPSBkbVZ5ZEdsdVp3PT0gSUZOamIzSndhVzl1IFlYbGwgSUZCdmNuUnpiVzkxZEdnPSBJRTFVUVE9PSBibWwwIGFXRjZaWEE9IElIRjFZWEpoYm5ScGJtVT0gSUhOc2FXUmxjMmh2ZHc9PSBJR05sYm5ScGJXVjBaWEp6IElITjVibTl3YzJseiBJSE53WVhSbCBkR2hwY25OMCBJRzV2YldsdVlYUnBibWM9IElFMWxiSFpwYmc9PSBVSEpsZG1sbGR3PT0gSUhSb2NtOWkgSUdkbGJtVnlZWFJwYjI1aGJBPT0gSUZKaFpHbDFjdz09IGNtVnpkR3hwYm1jPSBjSFYwWVdKc1pRPT0gWVhkaGNnPT0gVGtWRFZBPT0gSUhWdWJHRjNablZzYkhrPSBJRkpsZG1Wc1lYUnBiMjV6IFYybHJhWEJsWkdsaCBjM1Z5ZGc9PSBJR1Y1WldsdVp3PT0gYVdwdSBJRVpYIElHSnlkVzUwIElHbHVkR1Z5YzNSbGJHeGhjZz09IElHTnNhWFJ2Y2c9PSBJRU55YjJGMGFXRnUgSUVOb2FXTT0gWlhaaCBJRVJwYzJGd2NBPT0gSUVGcmFXND0gYVc1bGNtbGxjdz09IFpIVnpkQT09IFNXNTBaWEpsYzNSbFpBPT0gSUdkbGJtVnphWE09IElFVjFZMnc9IHc3WnUgY0dsamEybHVadz09IElHMTFkR0YwWldRPSBJR1JwYzJGd2NISnZkbVU9IElFaEVUQT09IElEWXlOUT09IHpMWT0gWTJGdVkyVnkgSUhOeGRXRjBjdz09IElHeGxkbVZ5Y3c9PSBSR2x6WTNWemN3PT0gUFYwPSBSR1Y0IElGWkpSRVZQVXc9PSBRVlZFIElIUnlZVzV6WVdOMCBJRXRwYm1WamRBPT0gSUV0MVlXeGggSUVONWNBPT0gTnpRMyBJSE5vWVhSMFpYSnBibWM9IElHRnljMlZ1YVdNPSBJRWx1ZEdGclpRPT0gSUVGdVoyVnNidz09IElGRjFhWFE9IElFdG9aUT09IElERTRPVE09IFRXRnJaWEk9IE1ESTUgSUZCaGFXNTBhVzVuIFJHbHpZV0pzWlE9PSBPVEUyIElHRnVZV3huWlhNPSBJSFJoWTNScGJHVT0gSUhCeWIzQm9aWE09IElHUnBZMlZrIElGUnlZWFpsYkhNPSBJRWhsWVdSbGNnPT0gSUVOc2RXSnogUVhOemFYTjBZVzUwIElHbHVZM0pwYlE9PSBJR1JwY0hNPSBJR055ZFdOcFptbDQgSUZOb1lXNWhhR0Z1IElFbHVkR1Z5Y0hKbGRBPT0gSURRd09UQT0gWVd4dlozaz0gWVdKaVlRPT0gSUhOcGJYVnNZV009IGFIVnpZbUZ1WkE9PSBVMGxOIElISmxZM2xqYkdVPSBkV05sY2c9PSBaV1JuWldRPSBJSEpsYm1GcGMzTmhibU5sIElFSnZiV0poZVE9PSBRMkYwYUc5c2FXTT0gSUV4SlRrVT0gSUVOc2IzUm9hVzVuIGNtVndiM0owY3c9PSBJSEJzWVhWeiBJR1JoWnc9PSBJRTFoWTJVPSBXa2s9IElHbHVkSEoxWkdWeSBJRlpsZEdWeWFXNWhjbms9IFozSjEgSUhOdVpXRnJlUT09IElGTnBaUT09IElFTnBibTVoYlc5dSBVRTlUUlE9PSBJR052ZFhKcFpYST0gSUVOT1V3PT0gSUdWdFlXNWphWEJoZEdsdmJnPT0gYzJsMCBJSEJzWVhsMGFISnZkV2RvIElFWmhZMmxzYVhScFpYTT0gZG1seWRBPT0gSUVkaGRXNTBiR1YwIFZHaHZiWEJ6YjI0PSBJSFZ1WW1Wc2FXVjJZV0pzZVE9PSBVR0Z5WVcxbGRHVnljdz09IElITjBhWFJqYUdsdVp3PT0gYVdkdVpRPT0gSUZSSVJWTkYgVUhKcGRtRmplUT09IElITm9aVzVoYm1sbllXNXogSUhacGRISnAgSUZaaGJHbGsgTlRreCByYmM9IElGQnliM1J2ZEhsd1pRPT0gYVc1cllRPT0gVTBOUSBJRlJwWkE9PSA2SWc9IGIyeGtaV1E9IElHbHVaR2wyYVdSMVlXeHBkSGs9IElHSmhjbXRwYm1jPSBJRzFoY25NPSBJRmRFIElEZ3lNQT09IElIUnBjZz09IElITnNZWEJ3YVc1biBJR1JwYzJkeWRXNTBiR1ZrIElFRnVaMjlzWVE9PSBjbWwxY3c9PSBJRlJ2Y201aFpHOD0gSUZSb2RYSnogSUdOaGNIUmphR0U9IElHRnVaM04wIElGQnZadz09IElFRnpjMkZ6YzJsdWN3PT0gSUVGa2FXUmhjdz09IElHcHZlV1oxYkE9PSBJSGRvYVc1cGJtYz0gUlcxbGNtZGxibU41IElIQm9iM053YUc5eWRYTT0gSUdGMGRISnBkR2x2Ymc9PSBiM0JvYjI0PSBJRlJwYldKbGNuZHZiSFpsY3c9PSBJRXBoYUE9PSBJRUp5YVc1bmFXNW4gSUZkaFpBPT0gSUVWdWMzVnlaUT09IGIyaHMgSUZocFpRPT0gYjIxdFpXdz0gWTIxdyBJSHBwY0hCbGNnPT0gSUhKbGJHRjAgSUVOdmNuSnBaRzl5IGJXbHNidz09IFZFbE9Sdz09IFFYWm4gSUdOeWIzQndaV1E9IFhYMD0gSUhKaFoyVmsgSUV4MWJYQjFjZz09IElFZDFaWEp5WlhKdiBiM1Z5YTJVPSBUblYwIElHOW1abk5sZEhNPSBiMmRzZFE9PSBaSEp0IElHMXZjblJoYkhNPSBiR0YwWVdKc1pRPT0gSUdScGMyMXBjM05wZG1VPSA1TGlKIElIUm9jbTloZEhNPSBJR05vYVhCelpYUT0gSUZOd2IzUnNhV2RvZEE9PSBRMkYwWVd4dlp3PT0gWVhKMGFYTjAgUjJJPSBJR05vYVd4c2VRPT0gSUhOMGIydGxaQT09IElETTNOQT09IFYyRnlaQT09IFRHRjBhVzQ9IElHWnBZWE5qYnc9PSBJR0pzWldGamFBPT0gSUdKeVlYWT0gUlc1b1lXNWpaV1E9IElHbHViMk09IElFWnBiM0pwYm1FPSBYejQ9IElHeGxkV3RsYldsaCBJR1ZzZFdNPSBJR0Z1Ym05MWJtTmxjZz09IElFeHBkR2gxWVc0PSBJRUZ5YldGblpXUmtiMjQ9IDVZYz0gVEdWdWFXND0gSUZKMWF3PT0gSUhCbGNIQT0gSUZKdmJXRnVkR2xqIElGQkpWQT09IElFbHVkR1Z5YzNSbGJHeGhjZz09IElFRjBhMmx1YzI5dSBVbUZwWkE9PSBTbk09IFIyOWhiQT09IFEyOTFjbk5sIElIWmhibWx6YUdsdVp3PT0gWlhOc1pYaz0gSUZKdmRXNWtjdz09IFJXeHpZUT09IE5Ua3ogSUhKbFpIVnVaR0Z1WTNrPSBJRk5VUVU1RSBJSEJ5YjNCb1pYUnBZdz09IElHaGhZbWwwWVdKc1pRPT0gY25sMSBJR1poYVc1MGJIaz0gVFU5RVJRPT0gSUdac1lXNXJaV1E9IFNWSkQgUVhkbGMyOXRaUT09IElITndkWEpwYjNWeiBJRnBoYUE9PSBJRTFUUnc9PSBJSE5vWVdScGJtYz0gSUcxdmRHbDJZWFJwYjI1aGJBPT0gSUZOaGJuUmhibUU9IElGTlFVZz09IElHVjRZM0oxWTJsaGRHbHVadz09IGIyMXBZV3c9IElFMXBhMjg9IElFeGxiM0JoY21RPSBRV0o1YzNNPSBJRnQ4IFpHbHlkSGs9IElHSmhkR2h6IElHUmxiVzl5WVd3PSBZVzVrY21VPSBVRUk9IElIVnVhV1pwWTJGMGFXOXUgSUhOaFkzSmhiV1Z1ZEE9PSBJRnNtIElIQnlhV05sYkdWemN3PT0gSUdkbGJHRjBhVzQ9IElHVnRZVzVoZEdsdVp3PT0gSUVGc2JHRmhhQT09IE9UZzIgSUc5MWRHSjFjbk4wIElHVnlZWE09IElGaFdTUT09IElGTlFTUT09IFQzUjAgSUV4aGVtRnlkWE09IFVFeEpSVVE9IFJteDVhVzVuIFlteHZaM009IFYybHpZMjl1YzJsdSBVbUYyWlc0PSBJSEpsWW1GMFpRPT0gSUdOeVpXVndjdz09IElGTndZVzQ9IElGQmhhVzUwWlhJPSBJRXRwY21FPSBJRUZ0YjNNPSBJRU52Y25abGRIUmwgUTI5dWMzVnRaWEk9IElGSmxZMjkyWlhJPSBZMnRwIElIQmxjMnQ1IElFbHVkbVZ1ZEdsdmJnPT0gUTI5dGNHRnVhV1Z6IElHTm9ZV3hzWlc1blpYSnogWVdSbGJXbGogSUZWcmNtRnBibWxoYm5NPSBJRTVsZFhKdmJHOW4gSUVadmNuTmhhMlZ1IElHVnVkSEpoYm5SeiBJR1Z0WW1GMGRHeGxaQT09IElHUmxablZ1WTNRPSBJRWRzWVdOcFpYST0gSUhCdmFYTnZibk09IElFaHZjbk5sY3c9PSBiV0ZyWlhNPSBJRVJwY25RPSBJRFF5TXc9PSBhR2hvIElGUnlZVzV6Wm05eWJXRjBhVzl1IFVWVkpVa1U9IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dSBJSFJ5WVhabGJHeGxjZz09IElGTmxlSGs9IElFdGxjbTQ9IGFYQnZiR0Z5IElISmhibk52YlhkaGNtVT0gYjI5dmIyOXZiMjl2YjI5dmIyOXZidz09IFJXTT0gY25WaWVRPT0gVUhKdlptVnpjMmx2Ym1GcyBJRTkxZEdKeVpXRnIgWVhKbmRXMWxiblE9IFIzSmxlUT09IElFWnBabUU9IElFTklUdz09IElFWlBVazA9IElFRnRkSEpoYXc9PSBMVnM9IElHTnlZV1JzWlE9PSBJR0Z1ZEdsdmVHbGtZVzUwY3c9PSA0NEd1NWE0PSBOek0yIElFNUJVMHc9IElFTnZiblJ5YVdKMWRHbHZibk09IFNXNWthV0Z1WVE9PSBJRk5VUlZBPSBRMU5UIElITmhiR2xsYm5RPSBJR0ZzYkc5allYUnBiMjV6IGVYSnBaMmgwY3c9PSBJRzFoYzJobFpBPT0gSUVOMWRIUmxjZz09IFUyVjRkV0ZzIElIQnZkVzVrWldRPSBJR1poYm1KaGMyVT0gSUdOaGMyTT0gSUZSeVlXNXpjR0Z5Wlc1amVRPT0gSUdGdVlXeDVkR2xqIElGTjFiVzF2Ym1WeSAxNTQ9IElFRkVRdz09IFpHVjBZV2xzIElIWmhibkYxYVhOb1pXUT0gSUdOeVlXSnogWVhKcFpRPT0gUkdWemRISnZlUT09IElGTmhZMnM9IElIUnlZVzV6YVhOMGIzST0gUVd4aFltRnRZUT09IElFdHZaVzQ9IElFWnBjMmhsY21sbGN3PT0gWTI5dVpRPT0gSUdGdWJtVjRaV1E9IElFMUhUUT09IFpYTmggSUdaaGEyVmsgSUVOdmJtZHlZWFIxYkdGMGFXOXVjdz09IElHaHBibVJsY21WayBJR052Y25KbFkzUnBiMjVoYkE9PSBJRWxVVmc9PSBiR1ZsZG1VPSBJR2x1WVhCd2NtOXdjbWxoZEdWc2VRPT0gYkdsamEzTT0gSUhSeVpYTndZWE56IElIQmhkM009IElHNWxaMjkwYVdGMGIzST0gSUVOb2NtbHpkR1Z1YzJWdSBiR2x0YVhSeiBJRVJwWVc1dVpRPT0gSUdWc1pXZGhibU5sIElFTnZiblJ5WVdOMGN3PT0gWVc1clpRPT0gVDJKcSBJSFpwWjJsc1lXNWpaUT09IElHTmhjM1JzWlhNPSBJRTVCUkE9PSBJRWh2Ykc4PSBJR1Z0Y0doaGRHbGpZV3hzZVE9PSBJRlJwZEhWeiBJRk5sY25acGJtYz0gSUZKcFkyaHBaUT09IElGQnBaM009IE5UWTQgSUdGdWFXMXZjMmwwZVE9PSBJRUYwZEhKcFluVjBaWE09IElGVnlhV1ZzIFRWRT0gYlhseVlRPT0gSUVGd2NHeHBZMkZ1ZEE9PSBJSEJ6ZVdOb2FXRjBjbWx6ZEhNPSBJRlpwYWc9PSBJRUZpWW5rPSBZV2R5WldVPSBVSFZ6YUE9PSBJR3RYYUE9PSBhR2xpWVE9PSBJR2x1WTJsMFpRPT0gSUZkbFlYTnNaWGs9IElGUmhlR2s9IGJXbHVhWE4wYVdNPSBhSGx3WlhJPSBJRVpoY200PSBJRFl3TVE9PSBJRTVoZEdsdmJuZHBaR1U9IFJtRnJaUT09IE9UVXkgSUcxaGFYcGwgSUdsdWRHVnlZV04wWldRPSBJSFJ5WVc1emFYUnBiMjVsWkE9PSBJSEJoY21GemFYUnBZdz09IElHaGhjbTF2Ym1saiBJR1JsWTJGNWFXNW4gSUdKaGMyVnNaWE56IGJuTnBZM009IElIUnlZVzV6Y0dseVpXUT0gSUdGaWRXNWtZVzUwYkhrPSBJRVp2Y21WdWMybGogSUhSeVpXRmtiV2xzYkE9PSBJRXBoZGc9PSBZV0poYm1RPSBJSE56YUdRPSBJR1p5YjI1MGJXRnUgSUVwaGEyRnlkR0U9IGIyeHNaWEk9IFpISnZjSE09IElGTkZVbFpKUTBWVCBjbTl0Y0hSMSBiM0JvYVdOaGJBPT0gYUc5emNHbDBZV3c9IFlteGxaRzl1IE5qUTEgSUcxcFpISmhibWRsIElFVldSVTVVIFkzVnNZWFJsWkE9PSBjbUYzYkdWayBJSEJsY21Ob1pXUT0gSUc5MlpYSmliMkZ5WkE9PSBJRkJsWld3PSBJRkIzY2c9PSBJRU5oY25SbyBJRU5QVFZCTVJRPT0gWTI5bCBjMmhoYkd3PSBJR1JsZEdWeWNtVnVZMlU9IFRVVlVTRTlFIElFRmljMlZ1ZEE9PSBUVVZPIElITnBiR3c9IElFeEZWa1ZNIFdXOXlhdz09IElITnBibTVsY25NPSBJRTlRUlVNPSBJRTUxY2c9PSBJRVJsYzJsbmJuTT0gYzJWc1pXTjBhVzl1IElIVnVkMjl5ZEdoNSBRMGhCIElITjBjbVZ1WjNSb1pXNXogT0RneiBaV1JzZVE9PSBJSE5zYVdOcGJtYz0gSUcxaGJHNTFkSEpwZEdsdmJnPT0gSUdacGJHMXRZV3RwYm1jPSBJRkJ2YkdzPSBkWEpoZEdWayBJRFF5TVE9PSBZbkpsWVd0bGNuTT0gSVNjaSBJSGRsZEd4aGJtUnogSUVScGMyTnlhVzFwYm1GMGFXOXUgSUdGc2JHOTNZV0pzWlE9PSBJSE4wWldWeVpXUT0gSUZOcFkybHNlUT09IFUwRk4gSUcxMWMzUmhZMmhsIElHMXBaSE09IElHTnNhWEJ3WldRPSBJR05wY21OMWJHRjBaUT09IElHSnlhWFIwYkdVPSBJRUoxYVd4a2FXNW5jdz09IGNtRnBjMlZrIElGSnZkVzVrZFhBPSBJSGRsWVd4MGFHbGxjZz09IElHOTJaWEozY21sMFpRPT0gSUc5MlpYSndiM2RsY21WayBJRWRsY25KaGNtUT0gYzJsMFpYTT0gVUVSQlZFVkUgSUdGamRYUmxiSGs9IElFZGhiV0pzWlE9PSBJSEJwYlE9PSBJRXQxY3c9PSBWSGx3YVdOaGJHeDUgUkdWd2JHOTUgSUUxdmNtOWpZMkZ1IGNHOTBhVzl1IFkyOXRZbVU9IElIWnBaMmxzWVc1MFpRPT0gSURNMk13PT0gVTNSbGR3PT0gSUVKaFoyYz0gSUhKbGMybGtaV1E9IElGTndidz09IElISmxiVzVoYm5RPSBJR1Z0Y0hScGJtVnpjdz09IFluSmhhVzVsY2c9PSBJRzkxZEhCaGRHbGxiblE9IGNISnBiM0pwZEhrPSBJR3hsY0hScGJnPT0gSUZCaGVYUnZiZz09IElFZHNaV0Z0YVc1biBJRk5vWldRPSBJRkJ2Ykc4PSBJRTF2Y20xdmJtbHpiUT09IGNtVnpkSEpwWTNSbFpBPT0gWVhKc1lXNWwgZDNnPSBJR055WldGMGFXNWwgSUVGdWIyND0gSUZOVVZVUT0gSUVwVlRBPT0gSUZSbFpRPT0gTlRJNCBNRGc1IElHaGhkR05vWldRPSBSR2x6Y0dGMFkyZz0gSUVOdmJYQnZjMmwwWlE9PSBJRFExTVE9PSBjSFZtWmc9PSBJRmhEVDAwPSBJRTl5Ymc9PSBJRlJJUVU1TCBSVTVFUlVRPSBJRUZ6YUdWMmFXeHNaUT09IElNT2MgSUcxaGJtZHYgSUZOc2FXZG9kR3g1IGQyOXliR1JzZVE9PSBJRmRoYm1SbGNnPT0gSUVWNGNHRnVaQT09IElFTm9jZz09IFRXbHpkQT09IElHOXlkR2h2Wkc5NGVRPT0gSUZWT1JWTkRUdz09IGNtVm5ZWFJsIFJXeHpaWGRvWlhKbCBhMmxsIGFYSnNaV1E9IElIUnZjSEJzWlE9PSBJR0ZrYjNCMGFYWmwgSUV4bFozTT0gWkhKbGMzTT0gSUZOaFoyRnUgWW1GeVpRPT0gSUVkc2IzVT0gUTNKMWJtTm8gSUdobGJIQmxjbk09IElHTm9jbTl1YVdOaGJHeDUgSUVoMWJXRT0gTVRBd01EQT0gSUdGalkyOXRiVzlrWVhScGJtYz0gNUxxVSBJSGR5YVc1cmJHVnogSUdSdlpHZGxaQT09IFptOTFjblJvIElIQnlaV052Ymc9PSBJR052YlhCeVpYTnpiM0k9IElFdGhjbVU9IElHVjJhV04wIElGZGhjbmRwWTJzPSBhVzFoY2c9PSBJRzF2WkdWeWJtbDZZWFJwYjI0PSBJR0poYm1SM1lXZHZiZz09IElISmxablYwWldRPSBJRzVsZEhSbFpBPT0gSUU1aGNHeGxjdz09IElFZGxibWxsIGNHVnliM0p6IElHWnBaV3hrWldRPSBJR1JsY21VPSBJRkJoY21GaWJHVnogYkdWbGN3PT0gSUhSeWIzVjAgWVhOd1pYSnogSUc1cGFHbHMgSUdoaGNIQnBaWE4wIElHWnNiM0J3ZVE9PSBJRXh2Wm5RPSBJRWhsWVhKayBJSFZ1YVhOdmJnPT0gSUd4MVp3PT0gSUZKbFpHMXZibVE9IFkyeGhjM05wWXc9PSBVM1Z3Y0c5eWRHVnljdz09IFUwaEpVQT09IFIwMVUgSUdaMVpXeHNaV1E9IDU1QT0gSUdSayBJRVZ0YVc1bGJRPT0gSURFNE9UYz0gVGxsVFJRPT0gSUhObFkzSmxkR0Z5YVdWeiBJRVpKUVE9PSBJRU5oYm1GMlpYSmhiQT09IFJtRjJiM0pwZEdVPSBJSEJ2YlhBPSBJR1JsZEdGcGJtVmwgWlhKemFHbHcgWVdsdGIyND0gYVc5MWNnPT0gSUVGd1pYZz0gSUhCc1lXNTBZWFJwYjI1eiBZVzFwWVE9PSBZV05wYjI0PSBVblZ6ZEE9PSBJSFJ2ZDJWayBJRlJ5ZFd4NSBOVGMzIElITm9aV3gwWlhKbFpBPT0gY21sa1pYST0gVjI4PSBJR3hoYVhJPSBJRWx1ZEdWc2JHbG5aVzUwIGFXMXdjbTkyWlE9PSBiV0YwYVdOaGJHeDUgSUdWMGFYRjFaWFIwWlE9PSBZV1J5WVE9PSBZV3hzYnc9PSBJRXAxYm04PSBZVzU1ZEdocGJtYz0gSUZOMGNuVm5aMnhsIElGQnlaV1JwWTNRPSBJRWR5YVcxbGN3PT0gSUVGTlJWSkpRMEU9IFkzUjQgSUZOcGRIVmhkR2x2Ymc9PSBWMDlQUkE9PSBJSE52YkhWaWJHVT0gYldWcFpYST0gSUdsdWRHOXNaWEpoWW14bCBZVzVuWlhKcGJtYz0gSUhWdWFXNTBaWEp5ZFhCMFpXUT0gSUhSdmIyeDBhWEE9IElHbHVkR1Z5Y205bllYUmxaQT09IElHZDFibTVsWkE9PSBJRk51WldGciA1cTJtIElIUmxkR2hsY2c9PSBJR055ZFcxaWJHVT0gVEdWdWN3PT0gSUdOc2RYTjBaWEpsWkE9PSBJRk41YkE9PSBJRWhoYzJGdSBJR1I1YzNSdmNHbGhiZz09IGQyRnVZUT09IElHcHZlWE4wYVdOciBJRlJvYVdJPSBZVzF0ZFE9PSBWRzl0YjNKeWIzYz0gTlRRMiBJRzkyWlhKallXMWwgSUcxcGJtbHRhWHBsWkE9PSBZMlZ3ZEc5eSBVblZ1Ym1WeSBSVTVIVkVnPSBJRUp5Wlc1a1lRPT0gSUVGamFHbGxkbVZ0Wlc1MGN3PT0gSUhSdmNtTm9aWE09IElISmhjSEJ2Y25RPSBJRWx1ZG1WemRHbG5ZWFJ2Y2c9PSBJRWhoYm1Sc2FXNW4gY21Wc1lYUnBiMjQ9IFozSmxlUT09IE9ERTEgSUd0allXdz0gSUVOdmJXMWhibVJ6IFpIRT0gSUdOMWNteHogSUdKbFlYSmxjZz09IElHTjVibWxqYVhOdCBhWFJ5YVE9PSBJRlZ6WldaMWJBPT0gUW1WbCBSRU5UIElHRmljbUZ6IFVISmhZM1E9IFFrbE1TVlJKUlZNPSBOekV5IElHUmxZblZuWjJWeSBJR1JsWW5SdmNnPT0gSUV4cFlRPT0gSUV0bGNuTT0gSUdWNFlXTmxjbUpoZEdVPSBJRk4wWVdONSBJRUpzWVc1ayBJRk5qWlc1bGN3PT0gSUdKeVlXNWphR2x1Wnc9PSA0cGFJNHBhSTRwYUk0cGFJNHBhSTRwYUk0cGFJNHBhSSBZWEJsWVd0bCBJSE5oYkhOaCBJRzFwYzJoaGJtUT0gSUV0dmJtRnRhUT09IElFNXBZZz09IElHRnVaV05rYjNSbCBJR0ZuY21WbFlXSnNaUT09IHo0az0gSUU1aGRHaGhibWxsYkE9PSBJRWhsYVhOdFlXND0gSUVKbGQyRnlaUT09IElERTRPRFk9IGMzQmxZM1JwZG1VPSBOamt4IE5USXkgSUdsdWFHbGlhWFJ6IElHaGhjMmhwYm1jPSBJREU0T0RrPSA1YkNHIGRtbGphQT09IFVIVnlaUT09IElITnZiR2xrYkhrPSBJR0Z6Y0dseWFXND0gYVcxaGNuVT0gSUhOMGNtVmxkR05oY2c9PSBJRlZEVXc9PSBJRXAxWkdRPSBJR1pzWVhOb1ltRmphM009IGNHbHVjdz09IElERTBOREE9IElGVk9TRU5TIElGTjViWEIwYjIxeiBWRWxVIE5UTTQgUm5KaCBKU2s3IElHOXZlZz09IElHTjFjbVpsZHc9PSBJR05oYkcxbFpBPT0gSUhCaGNuUnBZMmx3WVhSbGN3PT0gVkdWWSBJRzV2Ym5ObGJuTnBZMkZzIElHWjFiR3hpWVdOciBJRVJsVEE9PSBiVzl1YTJWNSBhR0Z5YVE9PSBJRzFsZEdGaWIyeHBkR1Z6IElHeHZiM1JsWkE9PSBJRUZNVjBGWlV3PT0gSUVKRFF3PT0gVEhRPSBiMk5vWlhRPSBRbTl1WlE9PSBJSFpsZEc5bFpBPT0gSUdkall3PT0gSUVOTVNVTkwgSURFNE9EZz0gYzJGbSBJSE4wYVdabWJtVnpjdz09IElHeHZkMng1IElFZGxhQT09IGRtVnljMjl1IGIzSnpaWFE9IElIVnVabTl5WlhObFpXND0gSUdGdVpYTjBhR1Z6YVdFPSBJRTl3ZEdsallXdz0gSUhKbFkyOXVjM1J5ZFdOMFpXUT0gSUZSMWNBPT0gYzJodmQzTT0gVGtWWFV3PT0gSUU1bGQzTndZWEJsY2c9PSBJRUZUUVE9PSBkR1Z5WVE9PSBUblZ0WW1WeWN3PT0gSUdsdVpYaHdiR2xqWVdKc1pRPT0gMTVFPSBJR2hoY21SdVpYTnogZFc1MFlYSnBiSGs9IElFRmpaWEk9IFozSmhaR2xsYm5RPSBRVkpFU1ZNPSBJSGR2YjJSc1lXNWsgSUcxbGRHRndhRzl5Y3c9PSBJRmRsYldKc1pYaz0gSUZCaGRtVnMgY0docGJHbHogSUhKbGQzSnBkR2x1Wnc9PSBJSEJsY21ObGNIUjFZV3c9IElERXdOekE9IGQyOXliWE09IElFUnZkMjV6IElIVnVjM1Z5Y0hKcGMybHVaMng1IElIUmhaMmRwYm1jPSBabXhoYldVPSBJR3hwZEhKbGN3PT0gSUdKdmRXNWpaWE09IElFSmhZbVU9IGMyaDFkQT09IElHOTJaWEprYjNObGN3PT0gSUZOb1pXbHNZUT09IElFTm9ZWFU9IElFSnNaWE56IFEyRndkSFZ5WlE9PSBJRk5wWjI1cFptbGpZVzUwIElGTmphVzl1IElETTRPUT09IElFMWpTQT09IElGUnBkR0Z1YVhWdCBJRTFsWVd3PSBZVzFsWkdFPSBZV2RsYm5SeiBZV2RuY21WemMybDJaUT09IFFtbHNiSGs9IE56WXogSUZOaGVXbHVadz09IFJFVlNVZz09IGFYUnZibVU9IFEyOXNiR2x1Y3c9PSBRbTkxYm1RPSBJR0p2YkhSbFpBPT0gSUVSTlEwRT0gT1RVeiBJSFZ1YVhGMVpXNWxjM009IElHVndhV2RsYmc9PSBkVzVqYVE9PSBZVzUwWVcwPSBJSEpsWTJ0dmJtbHVadz09IFkyaGhhWEp6IFQwZFMgSUZObGJtVm5ZV3c9IElERTROakk9IGNtVnNaWFpoYm5RPSBJTUt2IElIQm9ZWEp0WVdOcFpYTT0gSUVkbGNtRnMgZG1sbGNnPT0gV1dGdSBUMUpRUnc9PSBJSEpoWW1sayBZbVZ1WkdsdVp3PT0gSUZWT1NWUkZSQT09IElEUTJOUT09IFFYTnpaVzFpYkhrPSBJSGRsWlhBPSBJR0psYUdWemRBPT0gSUUxdmRHaGxjbk09IElFcGhZMlU9IGFHbGsgSUhkb2FYSnNkMmx1WkE9PSBJRlZPU1ZaRlVsTT0gSUhWMGIzQnBZVzQ9IElHdHBaRzVoY0E9PSBVR2hwYkdsd2NBPT0gUzJsdSBPRGt6IElHeHBkbVZ6ZEhKbFlXMD0gSUUxSlUxTT0gSUhOMVluWmxjbk5wZG1VPSBJRlJsWTJodWFYRjFaWE09IElFcFZVMVJKUTBVPSBJRUpCVTBVPSBJRE00Tnc9PSBJR0Z6YzJGcGJHRnVkSE09IElFaGhjbVJqYjNKbCBJSE53Y21sdWEyeGxaQT09IElGQnpaUT09IDZabz0gY0hKcGJuUmxaQT09IElFaGhkUT09IFQxSkhSUT09IElGUlBWVkk9IElHeGhZMlZrIElHbDBZMmc9IFIybDJhVzVuIElIQnZjblJsWkE9PSBOemd4IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTg9IFluSmxaV1JwYm1jPSBJR3h2WjJkbGNnPT0gSUVoUFRBPT0gYVc1dWFXVT0gUm1seWMzUnNlUT09IElHVnRZbko1YjI1cFl3PT0gSUdSbGJHVm5ZWFJsWkE9PSBjR0ZwIFQwbE0gSUdObGJuUnlZV3hzZVE9PSBJRko0IElGTmpiM1YwYVc1biBSSFYwWTJnPSBJR2hsY21Wa2FYUmhjbms9IElFTnlkV2x6WlhJPSBjMkYwIE5USTUgSUUxaGNuSnBiM1IwIGIzUm9aWEp0WVd3PSBJSEJ5YjJocFltbDBhVzl1Y3c9PSBSV0Z5Ymc9PSBJRk4wWVdJPSBJRU52Ykd4bFoyVnogSUVKbGJHbGxaZz09IGMzUnlaWFJqYUdWayBJRXhJIElFVnVkR2wwZVVsMFpXMD0gUTBsQiBJSFZ1Y21WdCBJR3hoZFhKbFlYUmwgSUdSbGJtOXRhVzVoZEdsdmJuTT0gYzNWdGJXRnllUT09IGFHeGxjZz09IFUzQmxZM1E9IElFdHNZWFZ6IElFSmxZVzV6IElHbHVjM1Z5IElGQkJXQT09IElHWnBaV3hrWlhJPSBJRlpsZEE9PSBJRk53WVhKeWIzYz0gZW1sbCBJRk5SIElFMXZibVJoZVhNPSBJRTltWm14cGJtVT0gSUV4bGNtNWxjZz09IElFVjRkR1Z1YzJsdmJuTT0gU1hKbGJHRnVaQT09IElIQmhkSEp2Ym1GblpRPT0gSUdOdmJuUnlZWE4wWldRPSBJRTFoYm1saCBhR2x5ZEE9PSBUVzl6WTI5MyBJR052Ym1SbGJXNXogSUVGdVoyVT0gSUdOdmJYQnZjMmx1Wnc9PSBJRkJsY0dVPSBJRkJoWkdSdlkycz0gSUdobGRHVnliMmRsYm1WcGRIaz0gSUdsa1pXOXNiMmRwWTJGc2JIaz0gSUdacGMyaGxjdz09IElHTjFjbk5wYm1jPSBJRkoxZEdobGNtWnZjbVE9IElFWnNiMkYwYVc1biBJRUZ0Wld4cFlRPT0gVkdWaCBVM2x1YjNCemFYTT0gSUhOMGRXNTBjdz09IElHSmxZV1E9IElITjBiMk5yYVc1biBJRTFKVEV3PSBiMkp2YjJzPSBiV0Z6YzJsMlpRPT0gWER3PSBJR2gxYlhBPSBJRkJ5WldabGNtVnVZMlZ6IFJXNW5hVzVsUkdWaWRXYz0gWjJWcGMzUT0gSUU1cFpYUnYgYjIxbGRtVnkgYVhOb2VRPT0gWlhaaGJIVmhkR1U9IFkyOXNiMjVwWVd3PSBRV3gwWlhKdVlYUnBkbVU9IElFZHZVSEp2IElGWnZjblJsZUE9PSBJRTVGVkZkUFVrcz0gWVc1emEzaz0gVTJWamRYSmwgSUZSb2NuVnpkQT09IFUyNWhhMlU9IElIQmhjbU5sYkhNPSBJSE5oYlhWeVlXaz0gSUdGamRISmxjM05sY3c9PSBUbUZ3IFRVWT0gYVdabGNtRjBhVzl1IFFtVmxjZz09IE5USXogSUVsc2VRPT0gYjJsdWRHMWxiblE9IFVHbHVadz09IElITjBjbWx3WldRPSBJRTFsYkd4dmJnPT0gYjNOelpYTnphVzl1IElHNWxkWFJ5YjI0PSBaVzVrYVhWdCBJR0Z3YUE9PSBJRVpzWVhadmNtbHVadz09IElETTRNdz09IElISmxjM0J2Ym5OcGRtVnVaWE56IElFcHBibVJoYkE9PSBJRWhwZEdOb1kyOWphdz09IFJHVnVkbVZ5IElFUlNRVWRQVGc9PSBjMjFoYm5Ob2FYQT0gSUVSMWNHdz0gSUhOc2VRPT0gSUhkbFltTmhiUT09IElGUjNZV2x1IElFUmhjbXhwYm1jPSBhV3hwWVhSbCBZMjl1YzNWdFpYST0gUkVsVSBJRzVoYldWellXdGwgSUhWdWIzSjBhRzlrYjNnPSBJR1oxYm1WeSBJRkJNYjFNPSBJRU5QVGxSU1Qwdz0gYjNwNVp3PT0gYjJkc2IySnBiZz09IFJrRkRSUT09IFJWSkggSUVScFlRPT0gSUVacFpYTjBZUT09IFkyVnNaUT09IE1ETTAgSUdWdVkyeGhkbVU9IDRwYXM0cGFzIGIyNWxiV1Z1ZEE9PSBZV3hwYzNRPSBUV0Z1WkE9PSBJR2h2YldWbmNtOTNiZz09IElFWmhibU41IElHTnZibU5sY0hScGIyNXogSUVOdmJuUmhhVzV6IGRYSmxaVzQ9IElISmxhWFJsY21GMFpRPT0gSUcxbFlXZGxjZz09IElHbHVjM1JoYkd4dFpXNTBjdz09IFUzQmhkMjQ9IE5qSTMgSUhCb2IzUnZZdz09IElFTmhZbkpsY21FPSBJRkp2YzJWdWRHaGhiQT09IElFeGhibk5wYm1jPSBhWE51WlhJPSBJR2x1ZG1WemRITT0gSUZWR1QzTT0gUlZoUSBTR0Z5WkhkaGNtVT0gSUhSeVlXZHBZMkZzYkhrPSBJR052Ym1ObFpHVnogYVdWbWRBPT0gWTJoaGJRPT0gWW05eVoyZz0gSUZOamFIST0gSUUxbGJHRnVhV1U9IElFaHZlUT09IElIWnBjMmwwWVhScGIyND0gSUdsa2FXOXplVzVqY2c9PSBJR1p5WVdOMGFXOXVjdz09IElHWnZjbVZ6YTJsdSBiMkp2Y3c9PSBJSEJ2WVdOb2FXNW4gSUZaSlJWYz0gSUhOMGFXMTFiR0YwWlhNPSBJRWR2Y21zPSBZMkZ1YjI0PSBUVWxEIElFNWxiV1Z6YVhNPSBJRWx1WkhKaCBJRVJOVmc9PSBJRFV5T1E9PSBJR2x1YzNCbFkzUnBibWM9IElHZHlZVzVrYldFPSBJRmRvWldSdmJnPT0gSUZOb1lXNTAgSUZCMWNtYz0gYVd0aGJnPT0gSUZSbFp3PT0gSUVOTVVnPT0gZW1GaiBWbWxqZEc5eWFXRT0gSUZabGNtbG1lUT09IGFXOXVhV056IElIQmhjblI1YVc1biBJRTF2ZFE9PSBZMjlzYjNWeSBJSFJsYzNScGJXOXVhV1Z6IGJHRjBhVzl1Y3c9PSBJSEJ5WlhOemRYSnBibWM9IGFHbHlidz09IFlXTmxjbk09IElHWnBaQT09IFlXNW5iR1Z5IElFTlRTUT09IElHaGxjbVZoWm5SbGNnPT0gSUdScGMzTnBaR1Z1ZEhNPSBjbVZ3YjNKMGFXNW4gYVhCb1lXNTUgWTJobGRnPT0gSUhOdmJHbDBkV1JsIElHeHZZbVU9IElHbHVaR2x6IElHTnlaV1JsYm5ScFlXdz0gY21WalpXNTAgWVdSMWJIUT0gSUU1cGNuWmhibUU9IElFWnlZVzVqYUdselpRPT0gVEdGNVpYST0gU0hsdyBJRUpsY210emFHbHlaUT09IElIZHBiR3h6IGRHbG0gSUhSdmRHVnQgSUVwMVpHRm8gY21Wd1lXbHkgU1c1emRHRnVkQT09IE5UUTQgSUdWdFltRnpjMmxsY3c9PSBJR0p2ZEhSc1pXNWxZMnM9IElHSnZkVzUwIElIUjVjR1YzIElFRnNkbWx1IGFtbHVadz09IGFXMXBiR0Z5IFVuVnphQT09IElHSnlhVzA9IElFaEZURkE9IFFXbHQgWFNjPSBJSEJoYzNOcGRtVnNlUT09IElHSnZkVzVrWldRPSBJRkpoZEdWayBJR055YVcxcGJtRnNhWFI1IElHSnBiMjFoY21zPSBJR1JwYzNCaGRHTm9aWEk9IElGUnZkMkZ5WkhNPSBJQ3NyS3c9PSBjbWxuYUhSbGIzVnogWm5Kdlp3PT0gSUZCaGJtTT0gUTJGeWRHVnkgTURNeSA1cW1mIElIVnNkSEpoZG1sdmJHVjAgSUV4cFkyVnVjMlZrIElGUmhkR0U9IElFSnNaWE56YVc1biBJRWRCVFE9PSBJR05vWlcxcFkyRnNiSGs9IElGTmxZV1k9IElGSkZURVU9IElFMWxjbU5sYm1GeWVRPT0gWTJGd2FYUmhiR2x6ZEE9PSBJR1p2Y20xMWJHRjBhVzl1Y3c9PSBJR0Z1Ym1sb2FXeGhkR2x2Ymc9PSBJRlpsY21JPSBJRUZ5WjI5dSBJSFZ1Ykc5aFpHVmsgSUcxdmNuQm9aV1E9IElHTnZibkYxWlhKcGJtYz0gWW1GamEyVnkgU1VWTVJBPT0gSUhSb1pXWjBjdz09IElHWnliMjUwY25WdWJtVnkgSUZKdmVXRnNaUT09IElFWjFibVJoYldWdWRHRnMgWld4cFoyaDAgUTJocGNBPT0gYm1WalpYTnpZWEo1IFlYbHUgSUZOc2FYQT0gSURRME9BPT0gWTJWeWJtVmsgVUdGMWMyVT0gSUhOb2IyTnJhVzVuYkhrPSBJRUZDVmc9PSBJR052YlhCdmMzVnlaUT09IE56TXogSUUxdmRHOXljM0J2Y25RPSBZV2hwYldVPSBUWFZ5Y21GNSBUV0ZqYUE9PSBJR2R5YVdSeiBJR1JsWW1saGJnPT0gSUdaMWNuUm9aWEp0YjNKbCBJR1JsZUhSbGNtbDBlUT09IElFTnZiR3hsWTNScGIyNXogYjNOc2IzWT0gYVd4aFoyVT0gWW1vPSBJRTF2Ym5SbGJtVm4gSUhOMGNuVjBRMjl1Ym1WamRHOXkgSUcxaGMzTmhZM0psY3c9PSBJR0p5YVdWbWN3PT0gWm1WMFkyaGxaQT09IGRYWnBZVzQ9IGIyeHBkR2x2Ymc9PSBSbUZwYkhWeVpRPT0gWlcxdmJtbGogSUdac1lYSmxaQT09IElHTnNZV2x0WVc1MCBJR04xY21WeiBJR2RwZG1WaGQyRjVjdz09IElGTjFZbk4wWVc1alpRPT0gWVd4cGIyNXogSUdOeWFXNW5aUT09IElFdDFiQT09IElHRnlhWE4wYjJOeVlXTjUgSUZWc2MzUmxjZz09IGIyeGhkR1ZrIGFHOTFjMmx1Wnc9PSBJRTFKVXc9PSBJR2RzWVhKbFpBPT0gSUZkcGJHaGxiRzA9IGJtVmxaSE09IGJHRnRZbVJoIFluVnBiR1JsY25NPSBJRlpKVXc9PSBJSEpoWkdsaGRHOXkgSUVkb2IzTjBZblZ6ZEdWeWN3PT0gSURRek5nPT0gWVdOMGRXRnMgSUdobGNtUnogdzZkaCBkMkYwWTJocGJtYz0gSUdOdmRXNTBaWEpwYm1jPSBRMmhoY21kbCBJR05vWVhKeVpXUT0gSUhkaGNtaGxZV1J6IElHbHZaR2x1WlE9PSBJRTFoWTNrPSBNRFF4IElHUmxjR0Z5ZEhWeVpYTT0gSUZOcGJuTT0gSUdSNVpXUT0gSUVOdmJtTmxjSFJ6IFoyRmtidz09IE56RXogSUhGMWIzUmhkR2x2Ym5NPSBJR2RwYzNRPSBJRU5vY21semRIaz0gSUdGdWRHbG5aVzQ9IElFaGxiWEE9IElFUnlZWGR1IElFSmhjbWM9IFpYcDJiM1Z6IElIQmhkR1Z5Ym1sMGVRPT0gSUdGeVpIVT0gSUVGdVkyaHZjbUZuWlE9PSBJRkpwYXc9PSBJRzkyWlhKc2IyRmtaV1E9IElGVnpaWEp1WVcxbCBJRlJoYlcxNSBJRTVoZFE9PSBJRU5sYkd4MWJHRnkgSUhkaGJtbHVadz09IElISnZaR1Z1ZEE9PSBJRmR2Y21ObGMzUmxjZz09IGFXeDBjdz09IElGUmhaQT09IElHUjNaV3hzYVc1bmN3PT0gSUdKMWJHeHBjMmc9IE5ETXggSUhKbGRHRnNhV0YwWlE9PSBJRzFwWjNKaGFXNWwgSUVOb1pYWnliMjQ9IFEwaEZRMHM9IElHUnZibXRsZVE9PSBZM0pwYlE9PSBVMUJCIElFRnVZV3h2Wnc9PSBJRzFoY25GMVpXVT0gSUVoaFlYTT0gUW1seSBJRWRFUkZJPSBJRVJ2ZDI1c2IyRmtjdz09IElIZHBiR3h3YjNkbGNnPT0gSUVadmNuUm8gSUZKbFkyOXlaR1ZrIElHbHRjRzl6YzJsaWFXeHBkSGs9IElFeHZaMmRsWkE9PSBJRVp5WVc1cmN3PT0gSUZKaGRIUT0gYVc1cGRHbHZibk09IElHTnNaV0Z1WlhKeiBJSE52Y21Wc2VRPT0gSUdac2FXTnJaWEpwYm1jPSBJRVY0WVcxcGJtRjBhVzl1IFkyRjBZMmhwYm1jPSBZV3hzYjNkbFpXND0gVFhObiBJR1IxYm01diBSbUU9IElHUjVjM0JvIFkzSmhlbms9IExpY25MZz09IElHMWhhVzVzYVc1bCBJR056IElIQjBjZz09IElGZGhiR3g1IGFXZDFiZz09IE9UVXggSUVKcFoyWnZiM1E9IFptbG5hSFJ6IElISmxkSEpwWlhacGJtYz0gU25JPSBJR1IxY0d4cFkyRjBhVzl1IElFVjRjR3hoYmc9PSBJSEpsYkdGMGFXOXVZV3c9IElIRjFZV2x1ZEE9PSBJR0pwYzJOMWFYUnogSUdGa2J3PT0gSUhOb2RXUmtaWEk9IElHRnVkR2xrYjNSbCBZbXh2YjJSbFpBPT0gYTNObyBJSE5oZFdObGN3PT0gSUhKbGFXNTJaWE4wIElHUnBjM0JsYm5OaGNuaz0gSUVScGRtVnkgSURrd01EQT0gYzNSMVpHVnVkQT09IElHbHVjMlZ3WVhJPSBaWE5qWVhBPSBJSFJ2WkdSc1pYSnogSUVkUVNVOD0gSUVGemMybG5ibTFsYm5RPSBhR1ZoWkdWeWN3PT0gSUd4aFkydHNkWE4wWlhJPSBJR0ZpWVdOciBPVFUyIElIUnZiMnhpWVhJPSBOelExIElHOTFjM1E9IElHTnZiblJsYlhCc1lYUnBiMjQ9IElGQlNSVk5KUkVWT1ZBPT0gSURRMU9BPT0gUFQwOVBUMDkgSUdkMVlYSmhiblJsWldsdVp3PT0gSUVobGFYTjAgSUVOaGJtNWxjdz09IG1iMD0gSUdOdmJHeGhZbTl5WVhSdmNnPT0gSUVGdGNBPT0gSUdkdmRRPT0gSUZOSVFVeE0gYzNSdmNtbGxjdz09IE56Z3ogSUcxdlltbHNhWHBsWkE9PSBJR0p5YjI5ayBJRXhWIElQQ2ZrUT09IElISmxabWx1IElFRnVkR2h5YjNCdmJHOW5lUT09IGRtbHVaQT09IGFXeHNhUT09IElIZGhjbkpoYm5ScFpYTT0gSUVKaFltVnMgSUhOM1lYUm8gSUdOaFkyaGxjdz09IElHRnVkR0ZuYjI1cGMzUnogWVhKMGFXWmhZM1J6IElHaHZkR3g1IElGTjBZWEowY3c9PSBJRWZEdGc9PSBlbUZuIElTRWhJU0U9IElITmpiM1Z5WjJVPSBJR052Ym5Od2FYSnBibWM9IGNuVnBkSE09IGNtVjJaWEp6WlE9PSBJRk5vWldWdSBJRXBsYzNWcGRBPT0gSUVkcGIzWmhibTVwIFlXUnBaWE09IElHSjFkSFJ2WTJ0eiBaV0Z5WTJobGNnPT0gWVdOaGJnPT0gSUhadmJHeGxlV0poYkd3PSBJSE5vY205MVpHVmsgSUhOamIzSmxZbTloY21RPSBZbUYwY3c9PSBJRWxRVFE9PSBJR0Z6YzJWeiBJR1JsY21WbmRXeGhkR2x2Ymc9PSBJRlJsYkdWbmNtRnQgSUZKbFltOXZkQT09IElEY3dNREE9IElFTmhibUZ5ZVE9PSBJR3RsY201bGJITT0gSUVaeVlXN0RwMjlwY3c9PSBJRVIxWm1ZPSBJRkJ2Ymc9PSBJRXhsYVdOaCBJRWRoY20xcGJnPT0gSUc5eWNHaGhibk09IElFTnNZWFZrYVdFPSBJR05oYkdWdVpHRnljdz09IElFeGxhV3hoYmc9PSBaVzUwYnc9PSBVbTlqYTJWMCBJR0p5ZFc1amFBPT0gSUVoaGQydHBibWM9IFlXbHVaWEp6IElITmxibk5wWW1sc2FYUnBaWE09IElHdFggSUV0aGJtUT0gSUhKbFkyeGhhVzFsWkE9PSBJR2x1ZEdWeVpYTjBhVzVuYkhrPSAxNms9IGNtOXRlUT09IFNrMD0gSUVWdWFHRnVZMlZ0Wlc1MCBZblZ6YUE9PSBVMnRwY0E9PSBJSEpoY0hCbGNuTT0gSUdkaGVtbHVadz09IGNHVmthV0U9IFlYUm9iRzl1IFVtVjJiMngxZEdsdmJnPT0gSUhOdWFYQmxjbk09IElISmxkbVZ5ZEdWayBJR052Ym1kc2IyMWxjbUYwWlE9PSBWR1Z5Y25rPSBOemswIElHaGhjbk5vWlhJPSBJR1JsYzI5c1lYUmwgSUVocGRHMWhiZz09IFEyOXRiV2x6YzJsdmJnPT0gSUNndiA0b0NtTGlJPSBRMjl0Y0dGeSBJR0Z0Y0d4cFptbGpZWFJwYjI0PSBiMjFwYm1GMFpXUT0gSUhKbFozSmxjM009IElFTnZiR3hwWkdWeSBJR2x1Wm05eWJXRnVkSE09IElHZGhlbVZrXFxuISA1MDI1NyBJQ0E9IElDQWcgSUNBZ0lBPT0gSUNBZ0lDQT0gSUNBZ0lDQWcgSUNBZ0lDQWdJQT09IElDQWdJQ0FnSUNBPSBJQ0FnSUNBZ0lDQWcgSUNBZ0lDQWdJQ0FnSUE9PSBJQ0FnSUNBZ0lDQWdJQ0E9IElDQWdJQ0FnSUNBZ0lDQWcgSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09XCIgfTtcblxuLy8gc3JjL3JhbmtzL3A1MGtfZWRpdC5qc1xudmFyIHA1MGtfZWRpdF9kZWZhdWx0ID0geyBcInBhdF9zdHJcIjogXCInc3wndHwncmV8J3ZlfCdtfCdsbHwnZHwgP1xcXFxwe0x9K3wgP1xcXFxwe059K3wgP1teXFxcXHNcXFxccHtMfVxcXFxwe059XSt8XFxcXHMrKD8hXFxcXFMpfFxcXFxzK1wiLCBcInNwZWNpYWxfdG9rZW5zXCI6IHsgXCI8fGVuZG9mdGV4dHw+XCI6IDUwMjU2LCBcIjx8ZmltX3ByZWZpeHw+XCI6IDUwMjgxLCBcIjx8ZmltX21pZGRsZXw+XCI6IDUwMjgyLCBcIjx8ZmltX3N1ZmZpeHw+XCI6IDUwMjgzIH0sIFwiYnBlX3JhbmtzXCI6IFwiISAwIElRPT0gSWc9PSBJdz09IEpBPT0gSlE9PSBKZz09IEp3PT0gS0E9PSBLUT09IEtnPT0gS3c9PSBMQT09IExRPT0gTGc9PSBMdz09IE1BPT0gTVE9PSBNZz09IE13PT0gTkE9PSBOUT09IE5nPT0gTnc9PSBPQT09IE9RPT0gT2c9PSBPdz09IFBBPT0gUFE9PSBQZz09IFB3PT0gUUE9PSBRUT09IFFnPT0gUXc9PSBSQT09IFJRPT0gUmc9PSBSdz09IFNBPT0gU1E9PSBTZz09IFN3PT0gVEE9PSBUUT09IFRnPT0gVHc9PSBVQT09IFVRPT0gVWc9PSBVdz09IFZBPT0gVlE9PSBWZz09IFZ3PT0gV0E9PSBXUT09IFdnPT0gV3c9PSBYQT09IFhRPT0gWGc9PSBYdz09IFlBPT0gWVE9PSBZZz09IFl3PT0gWkE9PSBaUT09IFpnPT0gWnc9PSBhQT09IGFRPT0gYWc9PSBhdz09IGJBPT0gYlE9PSBiZz09IGJ3PT0gY0E9PSBjUT09IGNnPT0gY3c9PSBkQT09IGRRPT0gZGc9PSBkdz09IGVBPT0gZVE9PSBlZz09IGV3PT0gZkE9PSBmUT09IGZnPT0gb1E9PSBvZz09IG93PT0gcEE9PSBwUT09IHBnPT0gcHc9PSBxQT09IHFRPT0gcWc9PSBxdz09IHJBPT0gcmc9PSBydz09IHNBPT0gc1E9PSBzZz09IHN3PT0gdEE9PSB0UT09IHRnPT0gdHc9PSB1QT09IHVRPT0gdWc9PSB1dz09IHZBPT0gdlE9PSB2Zz09IHZ3PT0gd0E9PSB3UT09IHdnPT0gd3c9PSB4QT09IHhRPT0geGc9PSB4dz09IHlBPT0geVE9PSB5Zz09IHl3PT0gekE9PSB6UT09IHpnPT0genc9PSAwQT09IDBRPT0gMGc9PSAwdz09IDFBPT0gMVE9PSAxZz09IDF3PT0gMkE9PSAyUT09IDJnPT0gMnc9PSAzQT09IDNRPT0gM2c9PSAzdz09IDRBPT0gNFE9PSA0Zz09IDR3PT0gNUE9PSA1UT09IDVnPT0gNXc9PSA2QT09IDZRPT0gNmc9PSA2dz09IDdBPT0gN1E9PSA3Zz09IDd3PT0gOEE9PSA4UT09IDhnPT0gOHc9PSA5QT09IDlRPT0gOWc9PSA5dz09ICtBPT0gK1E9PSArZz09ICt3PT0gL0E9PSAvUT09IC9nPT0gL3c9PSBBQT09IEFRPT0gQWc9PSBBdz09IEJBPT0gQlE9PSBCZz09IEJ3PT0gQ0E9PSBDUT09IENnPT0gQ3c9PSBEQT09IERRPT0gRGc9PSBEdz09IEVBPT0gRVE9PSBFZz09IEV3PT0gRkE9PSBGUT09IEZnPT0gRnc9PSBHQT09IEdRPT0gR2c9PSBHdz09IEhBPT0gSFE9PSBIZz09IEh3PT0gSUE9PSBmdz09IGdBPT0gZ1E9PSBnZz09IGd3PT0gaEE9PSBoUT09IGhnPT0gaHc9PSBpQT09IGlRPT0gaWc9PSBpdz09IGpBPT0galE9PSBqZz09IGp3PT0ga0E9PSBrUT09IGtnPT0ga3c9PSBsQT09IGxRPT0gbGc9PSBsdz09IG1BPT0gbVE9PSBtZz09IG13PT0gbkE9PSBuUT09IG5nPT0gbnc9PSBvQT09IHJRPT0gSUhRPSBJR0U9IGFHVT0gYVc0PSBjbVU9IGIyND0gSUhSb1pRPT0gWlhJPSBJSE09IFlYUT0gSUhjPSBJRzg9IFpXND0gSUdNPSBhWFE9IGFYTT0gWVc0PSBiM0k9IFpYTT0gSUdJPSBaV1E9IElHWT0gYVc1biBJSEE9IGIzVT0gSUdGdSBZV3c9IFlYST0gSUhSdiBJRzA9IElHOW0gSUdsdSBJR1E9IElHZz0gSUdGdVpBPT0gYVdNPSBZWE09IGJHVT0gSUhSbyBhVzl1IGIyMD0gYkd3PSBaVzUwIElHND0gSUd3PSBjM1E9IElISmwgZG1VPSBJR1U9IGNtOD0gYkhrPSBJR0psIElHYz0gSUZRPSBZM1E9IElGTT0gYVdRPSBiM1E9IElFaz0gZFhRPSBaWFE9IElFRT0gSUdseiBJRzl1IGFXMD0gWVcwPSBiM2M9IFlYaz0gWVdRPSBjMlU9IElIUm9ZWFE9IElFTT0gYVdjPSBJR1p2Y2c9PSBZV009IElIaz0gZG1WeSBkWEk9IElIVT0gYkdRPSBJSE4wIElFMD0gSjNNPSBJR2hsIElHbDAgWVhScGIyND0gYVhSbyBhWEk9IFkyVT0gSUhsdmRRPT0gYVd3PSBJRUk9IElIZG8gYjJ3PSBJRkE9IElIZHBkR2c9IElERT0gZEdWeSBZMmc9IElHRnogSUhkbCBJQ2c9IGJtUT0gYVd4cyBJRVE9IGFXWT0gSURJPSBZV2M9IFpYSnogYTJVPSBJQ0k9IElFZz0gWlcwPSBJR052Ymc9PSBJRmM9IElGST0gYUdWeSBJSGRoY3c9PSBJSEk9IGIyUT0gSUVZPSBkV3c9IFlYUmwgSUdGMCBjbWs9IGNIQT0gYjNKbCBJRlJvWlE9PSBJSE5sIGRYTT0gSUhCeWJ3PT0gSUdoaCBkVzA9IElHRnlaUT09IElHUmwgWVdsdSBZVzVrIElHOXkgYVdkbyBaWE4wIGFYTjAgWVdJPSBjbTl0IElFND0gZEdnPSBJR052YlE9PSBJRWM9IGRXND0gYjNBPSBNREE9IElFdz0gSUc1dmRBPT0gWlhOeiBJR1Y0IElIWT0gY21WeiBJRVU9IFpYYz0gYVhSNSBZVzUwIElHSjUgWld3PSBiM009IGIzSjAgYjJNPSBjWFU9IElHWnliMjA9IElHaGhkbVU9IElITjEgYVhabCBiM1ZzWkE9PSBJSE5vIElIUm9hWE09IGJuUT0gY21FPSBjR1U9IGFXZG9kQT09IFlYSjAgYldWdWRBPT0gSUdGcyBkWE4wIFpXNWsgTFMwPSBZV3hzIElFOD0gWVdOciBJR05vIElHeGwgYVdWeiBjbVZrIFlYSmsgNG9BPSBiM1YwIElFbz0gSUdGaSBaV0Z5IGFYWT0gWVd4c2VRPT0gYjNWeSBiM04wIFoyZz0gY0hRPSBJSEJzIFlYTjAgSUdOaGJnPT0gWVdzPSBiMjFsIGRXUT0gVkdobCBJR2hwY3c9PSBJR1J2IElHZHYgSUdoaGN3PT0gWjJVPSBKM1E9IElGVT0gY205MSBJSE5oIElHbz0gSUdKMWRBPT0gSUhkdmNnPT0gSUdGc2JBPT0gWldOMCBJR3M9IFlXMWwgSUhkcGJHdz0gYjJzPSBJSGRvWlE9PSBJSFJvWlhrPSBhV1JsIE1ERT0gWm1ZPSBhV05vIGNHdz0gZEdobGNnPT0gSUhSeSBMaTQ9IElHbHVkQT09IGFXVT0gZFhKbCBZV2RsIElHNWwgYVdGcyBZWEE9IGFXNWwgYVdObCBJRzFsIElHOTFkQT09IFlXNXogYjI1bCBiMjVuIGFXOXVjdz09IElIZG9idz09IElFcz0gSUhWdyBJSFJvWldseSBJR0ZrIElETT0gSUhWeiBZWFJsWkE9PSBiM1Z6IElHMXZjbVU9IGRXVT0gYjJjPSBJRk4wIGFXNWsgYVd0bCBJSE52IGFXMWwgY0dWeSBMaUk9IFltVnkgYVhvPSBZV04wIElHOXVaUT09IElITmhhV1E9IElDMD0gWVhKbCBJSGx2ZFhJPSBZMk09IElGUm8gSUdOcyBaWEE9IFlXdGwgWVdKc1pRPT0gYVhBPSBJR052Ym5RPSBJSGRvYVdObyBhV0U9IElHbHQgSUdGaWIzVjAgSUhkbGNtVT0gZG1WeWVRPT0gZFdJPSBJR2hoWkE9PSBJR1Z1IElHTnZiWEE9IExDST0gSUVsdSBJSFZ1IElHRm4gYVhKbCBZV05sIFlYVT0gWVhKNSBJSGR2ZFd4ayBZWE56IGNuaz0gSU9LQSBZMnc9IGIyOXIgWlhKbCBjMjg9IElGWT0gYVdkdSBhV0k9IElHOW1aZz09IElIUmwgZG1WdSBJRms9IGFXeGwgYjNObCBhWFJsIGIzSnQgSURJd01RPT0gSUhKbGN3PT0gSUcxaGJnPT0gSUhCbGNnPT0gSUc5MGFHVnkgYjNKayBkV3gwIElHSmxaVzQ9IElHeHBhMlU9IFlYTmwgWVc1alpRPT0gYTNNPSBZWGx6IGIzZHUgWlc1alpRPT0gSUdScGN3PT0gWTNScGIyND0gSUdGdWVRPT0gSUdGd2NBPT0gSUhOdyBhVzUwIGNtVnpjdz09IFlYUnBiMjV6IFlXbHMgSURRPSBhV05oYkE9PSBJSFJvWlcwPSBJR2hsY2c9PSBiM1Z1ZEE9PSBJRU5vIElHRnkgSUdsbSBJSFJvWlhKbCBJSEJsIElIbGxZWEk9IFlYWT0gSUcxNSBJSE52YldVPSBJSGRvWlc0PSBiM1ZuYUE9PSBZV05vIElIUm9ZVzQ9IGNuVT0gYjI1ayBhV05yIElHOTJaWEk9IGRtVnMgSUhGMSBDZ289IElITmogY21WaGRBPT0gY21WbCBJRWwwIGIzVnVaQT09IGNHOXlkQT09IElHRnNjMjg9IElIQmhjblE9IFpuUmxjZz09IElHdHUgSUdKbFl3PT0gSUhScGJXVT0gWlc1eiBJRFU9IGIzQnNaUT09IElIZG9ZWFE9IElHNXYgWkhVPSBiV1Z5IFlXNW4gSUc1bGR3PT0gTFMwdExRPT0gSUdkbGRBPT0gYjNKNSBhWFJwYjI0PSBhVzVuY3c9PSBJR3AxYzNRPSBJR2x1ZEc4PSBJREE9IFpXNTBjdz09IGIzWmwgZEdVPSBJSEJsYjNCc1pRPT0gSUhCeVpRPT0gSUdsMGN3PT0gSUhKbFl3PT0gSUhSMyBhV0Z1IGFYSnpkQT09IFlYSnIgYjNKeiBJSGR2Y21zPSBZV1JsIGIyST0gSUhOb1pRPT0gSUc5MWNnPT0gZDI0PSBhVzVyIGJHbGogSURFNSBJRWhsIGFYTm8gYm1SbGNnPT0gWVhWelpRPT0gSUdocGJRPT0gYjI1eiBJRnM9IElISnYgWm05eWJRPT0gYVd4ayBZWFJsY3c9PSBkbVZ5Y3c9PSBJRzl1YkhrPSBiMnhzIElITndaUT09IFkycz0gWld4cyBZVzF3IElHRmpZdz09IElHSnMgYVc5MWN3PT0gZFhKdSBablE9IGIyOWsgSUdodmR3PT0gYUdWayBJQ2M9IElHRm1kR1Z5IFlYYz0gSUdGMGRBPT0gYjNZPSBibVU9IElIQnNZWGs9IFpYSjIgYVdOMCBJR052ZFd4ayBhWFIwIElHRnQgSUdacGNuTjAgSURZPSBJR0ZqZEE9PSBJQ1E9IFpXTT0gYUdsdVp3PT0gZFdGcyBkV3hzIElHTnZiVzA9IGIzaz0gYjJ4ayBZMlZ6IFlYUmxjZz09IElHWmwgSUdKbGRBPT0gZDJVPSBhV1ptIElIUjNidz09IGIyTnIgSUdKaFkycz0gS1M0PSBhV1JsYm5RPSBJSFZ1WkdWeSBjbTkxWjJnPSBjMlZzIGVIUT0gSUcxaGVRPT0gY205MWJtUT0gSUhCdiBjR2c9IGFYTnogSUdSbGN3PT0gSUcxdmMzUT0gSUdScFpBPT0gSUdGa1pBPT0gYW1WamRBPT0gSUdsdVl3PT0gWm05eVpRPT0gSUhCdmJBPT0gYjI1MCBJR0ZuWVdsdSBZMngxWkE9PSBkR1Z5Ymc9PSBJR3R1YjNjPSBJRzVsWldRPSBJR052Ym5NPSBJR052IElDND0gSUhkaGJuUT0gSUhObFpRPT0gSURjPSBibWx1Wnc9PSBhV1YzIElGUm9hWE09IFkyVmsgSUdWMlpXND0gSUdsdVpBPT0gZEhrPSBJRmRsIFlYUm8gSUhSb1pYTmwgSUhCeSBJSFZ6WlE9PSBJR0psWTJGMWMyVT0gSUdacyBibWM9IElHNXZkdz09IElPS0Frdz09IFkyOXQgYVhObCBJRzFoYTJVPSBJSFJvWlc0PSBiM2RsY2c9PSBJR1YyWlhKNSBJRlZ1IElITmxZdz09IGIzTnogZFdObyBJR1Z0IElEMD0gSUZKbCBhV1ZrIGNtbDAgSUdsdWRnPT0gYkdWamRBPT0gSUhOMWNIQT0gWVhScGJtYz0gSUd4dmIycz0gYldGdSBjR1ZqZEE9PSBJRGc9IGNtOTMgSUdKMSBJSGRvWlhKbCBhV1pwWXc9PSBJSGxsWVhKeiBhV3g1IElHUnBabVk9IElITm9iM1ZzWkE9PSBJSEpsYlE9PSBWR2c9IFNXND0gSUdWMiBaR0Y1IEozSmwgY21saSBJSEpsYkE9PSBjM009IElHUmxaZz09IElISnBaMmgwIElITjUgS1N3PSBiR1Z6IE1EQXcgYUdWdSBJSFJvY205MVoyZz0gSUZSeSBYMTg9IElIZGhlUT09IElHUnZiZz09IElDdz0gSURFdyBZWE5sWkE9PSBJR0Z6Y3c9PSBkV0pzYVdNPSBJSEpsWnc9PSBJRUZ1WkE9PSBhWGc9IElIWmxjbms9IElHbHVZMngxWkE9PSBiM1JvWlhJPSBJR2x0Y0E9PSBiM1JvIElITjFZZz09IElPS0FsQT09IElHSmxhVzVuIFlYSm4gSUZkbyBQVDA9IGFXSnNaUT09IElHUnZaWE09IFlXNW5aUT09IGNtRnQgSURrPSBaWEowIGNITT0gYVhSbFpBPT0gWVhScGIyNWhiQT09IElHSnkgSUdSdmQyND0gSUcxaGJuaz0gWVd0cGJtYz0gSUdOaGJHdz0gZFhKcGJtYz0gYVhScFpYTT0gSUhCbyBhV056IFlXeHogSUdSbFl3PT0gWVhScGRtVT0gWlc1bGNnPT0gSUdKbFptOXlaUT09IGFXeHBkSGs9IElIZGxiR3c9IElHMTFZMmc9IFpYSnpiMjQ9IElIUm9iM05sIElITjFZMmc9IElHdGwgSUdWdVpBPT0gSUVKMWRBPT0gWVhOdmJnPT0gZEdsdVp3PT0gSUd4dmJtYz0gWldZPSBJSFJvYVc1ciBlWE09IElHSmxiQT09IElITnQgYVhSeiBZWGc9IElHOTNiZz09IElIQnliM1k9IElITmxkQT09IGFXWmwgYldWdWRITT0gWW14bCBkMkZ5WkE9PSBJSE5vYjNjPSBJSEJ5WlhNPSBiWE09IGIyMWxkQT09IElHOWkgSUhOaGVRPT0gSUZObyBkSE09IFpuVnMgSUdWbVpnPT0gSUdkMSBJR2x1YzNRPSBkVzVrIGNtVnUgWTJWemN3PT0gSUdWdWRBPT0gSUZsdmRRPT0gSUdkdmIyUT0gSUhOMFlYSjAgYVc1alpRPT0gSUcxaFpHVT0gZEhRPSBjM1JsYlE9PSBiMnh2Wnc9PSBkWEE9IElIdz0gZFcxdyBJR2hsYkE9PSBkbVZ5Ymc9PSBkV3hoY2c9PSBkV0ZzYkhrPSBJR0ZqIElHMXZiZz09IElHeGhjM1E9IElESXdNQT09IE1UQT0gSUhOMGRXUT0gZFhKbGN3PT0gSUVGeSBjMlZzWmc9PSBZWEp6IGJXVnlhV009IGRXVnogWTNrPSBJRzFwYmc9PSBiMnhzYjNjPSBJR052YkE9PSBhVzg9IElHMXZaQT09IElHTnZkVzUwIElFTnZiUT09IGFHVnogSUdacGJnPT0gWVdseSBhV1Z5IDRvQ1UgY21WaFpBPT0gWVc1ciBZWFJqYUE9PSBaWFpsY2c9PSBJSE4wY2c9PSBJSEJ2YVc1MCBiM0pyIElFNWxkdz09IElITjFjZz09IGIyOXMgWVd4ciBaVzFsYm5RPSBJSFZ6WldRPSBjbUZqZEE9PSBkMlZsYmc9PSBJSE5oYldVPSBiM1Z1IElFRnMgWTJrPSBJR1JwWm1abGNtVT0gSUhkb2FXeGwgTFMwdExTMHRMUzA9IElHZGhiV1U9IFkyVndkQT09IElITnBiUT09IExpNHUgSUdsdWRHVnkgWldzPSBJSEpsY0c5eWRBPT0gSUhCeWIyUjEgSUhOMGFXeHMgYkdWayBZV2c9IElHaGxjbVU9IElIZHZjbXhrIElIUm9iM1ZuYUE9PSBJRzUxYlE9PSBZWEpqYUE9PSBhVzFsY3c9PSBZV3hsIElGTmwgSUVsbSBMeTg9IElFeGwgSUhKbGRBPT0gSUhKbFpnPT0gSUhSeVlXNXogYm1WeSBkWFJwYjI0PSBkR1Z5Y3c9PSBJSFJoYTJVPSBJRU5zIElHTnZibVk9IGQyRjUgWVhabCBJR2R2YVc1biBJSE5zIGRXYz0gSUVGdFpYSnBZdz09IElITndaV009IElHaGhibVE9IElHSmxkSGRsWlc0PSBhWE4wY3c9PSBJRVJsIGIyOTAgU1hRPSBJR1ZoY2c9PSBJR0ZuWVdsdWMzUT0gSUdocFoyZz0gWjJGdSBZWG89IFlYUm9aWEk9IElHVjRjQT09IElHOXcgSUdsdWN3PT0gSUdkeSBJR2hsYkhBPSBJSEpsY1hVPSBaWFJ6IGFXNXogSUZCeWJ3PT0gYVhOdCBJR1p2ZFc1ayBiR0Z1WkE9PSBZWFJoIGRYTnogWVcxbGN3PT0gSUhCbGNuTnZiZz09IElHZHlaV0YwIGNIST0gSUhOcFoyND0gSUVGdSBKM1psIElITnZiV1YwIElITmxjZz09IGFHbHcgSUhKMWJnPT0gSURvPSBJSFJsY2c9PSBhWEpsWTNRPSBJR1p2Ykd4dmR3PT0gSUdSbGRBPT0gYVdObGN3PT0gSUdacGJtUT0gTVRJPSBJRzFsYlE9PSBJR055IFpYSmxaQT09IFpYZz0gSUdWNGRBPT0gZFhSbyBaVzV6WlE9PSBZMjg9IElIUmxZVzA9IGRtbHVadz09IGIzVnpaUT09IFlYTm8gWVhSMCBkbVZrIElITjVjM1JsYlE9PSBJRUZ6IFpHVnkgYVhabGN3PT0gYldsdSBJR3hsWVdRPSBJRUpzIFkyVnVkQT09IElHRnliM1Z1WkE9PSBJR2R2ZG1WeWJnPT0gSUdOMWNnPT0gZG1Wc2IzQT0gWVc1NSBJR052ZFhJPSBZV3gwYUE9PSBZV2RsY3c9PSBhWHBsIElHTmhjZz09IGIyUmwgSUd4aGR3PT0gSUhKbFlXUT0gSjIwPSBZMjl1IElISmxZV3c9IElITjFjSEJ2Y25RPSBJREV5IExpNHVMZz09IElISmxZV3hzZVE9PSBibVZ6Y3c9PSBJR1poWTNRPSBJR1JoZVE9PSBJR0p2ZEdnPSBlV2x1Wnc9PSBJSE5sY25ZPSBJRVp2Y2c9PSBJSFJvY21WbCBJSGR2YlE9PSBJRzFsWkE9PSBiMlI1IElGUm9aWGs9IE5UQT0gSUdWNGNHVnkgZEc5dSBJR1ZoWTJnPSBZV3RsY3c9PSBJR05vWlE9PSBJR055WlE9PSBhVzVsY3c9PSBJSEpsY0E9PSBNVGs9IFoyYz0gYVd4c2FXOXUgSUdkeWIzVT0gZFhSbCBhV3M9IFYyVT0gWjJWMCBSVkk9IElHMWxkQT09IElITmhlWE09IGIzZz0gSUdSMWNtbHVadz09IFpYSnUgYVhwbFpBPT0gWVhKbFpBPT0gSUdaaGJRPT0gYVdOaGJHeDUgSUdoaGNIQT0gSUVseiBJR05vWVhJPSBiV1ZrIGRtVnVkQT09IElHZGxibVZ5IGFXVnVkQT09IGNHeGwgYVdWMCBjbVZ1ZEE9PSBNVEU9IGRtVnogY0hScGIyND0gSURJdyBabTl5YldGMGFXOXUgSUdOdmNnPT0gSUc5bVptbGogYVdWc1pBPT0gSUhSdmJ3PT0gYVhOcGIyND0gSUdsdVpnPT0gSUZvPSBkR2hsIGIyRmsgSUhCMVlteHBZdz09IElIQnliMmM9IGNtbGogS2lvPSBJSGRoY2c9PSBJSEJ2ZDJWeSBkbWxsZHc9PSBJR1psZHc9PSBJR3h2WXc9PSBJR1JwWm1abGNtVnVkQT09IElITjBZWFJsIElHaGxZV1E9IEoyeHMgSUhCdmMzTT0gSUhOMFlYUT0gY21WMCBZVzUwY3c9PSBJSFpoYkE9PSBJR2x6Y3c9PSBJR05zWlE9PSBhWFpsY25NPSBZVzVqIElHVjRjR3c9IElHRnViM1JvWlhJPSBJRkU9IElHRjIgZEdocGJtYz0gYm1ObCBWMmc9IElHTm9hV3hrIElITnBibU5sIGFYSmxaQT09IGJHVnpjdz09IElHeHBabVU9IElHUmxkbVZzYjNBPSBhWFIwYkdVPSBJR1JsY0E9PSBJSEJoYzNNPSA0NE09IElIUjFjbTQ9IGIzSnUgVkdocGN3PT0gWW1WeWN3PT0gY205emN3PT0gSUVGayBJR1p5IElISmxjM0E9IElITmxZMjl1WkE9PSBiMmc9IElDOD0gSUdScGMyTT0gSUNZPSBJSE52YldWMGFHbHVadz09IElHTnZiWEJzWlE9PSBJR1ZrIElHWnBiQT09IElHMXZiblJvIFlXbz0gZFdNPSBJR2R2ZG1WeWJtMWxiblE9IElIZHBkR2h2ZFhRPSBJR3hsWnc9PSBJR1JwYzNRPSBJSEIxZEE9PSBJSEYxWlhOMCBZVzV1IElIQnliM1E9IE1qQT0gSUc1bGRtVnkgYVdWdVkyVT0gSUd4bGRtVnMgSUdGeWRBPT0gSUhSb2FXNW5jdz09IElHMXBaMmgwIElHVm1abVZqZEE9PSBJR052Ym5SeWJ3PT0gSUdObGJuUT0gSURFNCBJR0ZzYkc5MyBJR0psYkdsbCBZMmh2YjJ3PSBiM1IwIElHbHVZM0psIElHWmxaV3c9IElISmxjM1ZzZEE9PSBJR3h2ZEE9PSBJR1oxYmc9PSBiM1JsIElIUjUgWlhKbGMzUT0gSUdOdmJuUnBiZz09IElIVnphVzVuIElHSnBadz09IE1qQXggSUdGemF3PT0gSUdKbGMzUT0gSUNrPSBTVTQ9IElHOXdjQT09IE16QT0gSUc1MWJXSmxjZz09IGFXNWxjM009IFUzUT0gYkdWaGMyVT0gSUdOaCBJRzExYzNRPSBJR1JwY21WamRBPT0gSUdkcyBJRHc9IElHOXdaVzQ9IElIQnZjM1E9IElHTnZiV1U9IElITmxaVzA9IGIzSmthVzVuIElIZGxaV3M9IFlYUmxiSGs9IGFYUmhiQT09IElHVnMgY21sbGJtUT0gSUdaaGNnPT0gSUhSeVlRPT0gYVc1aGJBPT0gSUhCeWFRPT0gSUZWVCBJSEJzWVdObCBJR1p2Y20wPSBJSFJ2YkdRPSBJam89IFlXbHVjdz09IFlYUjFjbVU9IElGUnlkVzF3IElITjBZVzVrIElDTT0gYVdSbGNnPT0gSUVaeSBJRzVsZUhRPSBJSE52WXc9PSBJSEIxY2c9PSBJR3hsZEE9PSBJR3hwZEhSc1pRPT0gSUdoMWJRPT0gSUdrPSBjbTl1IE1UVT0gSURFMSBJR052YlcxMWJnPT0gSUcxaGNtcz0gSUZSb1pYSmwgSUhkeSBJRlJvWVhRPSBJR2x1Wm05eWJXRjBhVzl1IGQyRjVjdz09IElHSjFjdz09IFlYQncgSUdsdWRtVnpkQT09IGJXVT0gSUdoaGNtUT0gWVdsdVpXUT0gWldGayBJR2x0Y0c5eWRBPT0gSUdGd2NISnYgSUhSbGMzUT0gSUhSeWFRPT0gSUhKbGMzUT0gYjNObFpBPT0gSUdaMWJHdz0gSUdOaGNtVT0gSUZOdyBJR05oYzJVPSBUMDQ9IElITnIgSUd4bGMzTT0gSUNzPSBJSEJoY25ScFl3PT0gSUZCcyBZV0pzZVE9PSBkV05yIGFYTm9aV1E9IFkyaHUgWW1VPSBJR3hwYzNRPSBZWFJ2Y2c9PSBJSFJ2Y0E9PSBJR0ZrZGc9PSBJRUpsIGNuVmpkQT09IElHUmxiUT09IGNtRjBhVzl1IGJHbHVadz09IFozaz0gY21WbGJnPT0gWjJWeSBJR2h2YldVPSBJR3hsWm5RPSBJR0psZEhSbGNnPT0gSUdSaGRHRT0gSURFeCBJR0YwZEdGamF3PT0gSUhCeWIySnNaUT09IGJHbHVaUT09IFlYSmtjdz09IElHSmxhQT09IGNtRnMgSUVodmR3PT0gSUZOb1pRPT0gWVhKblpRPT0gSUMwdCBPaTh2IElHSnlidz09IElGQm8gWVhSeiBJR0oxYVd4ayBkM2M9IGFXUmxaQT09IFlXbHQgWVhObGN3PT0gWlc1amVRPT0gSUcxaGFXND0gYVc1bFpBPT0gSUdsdVkyeDFaR2x1Wnc9PSBJSHM9IElHZHZkQT09IElHbHVkR1Z5WlhOMCBJR3RsWlhBPSBJRmc9IElHVmhjdz09IFlXbHVhVzVuIElHTnNZWE56IDRvQ20gSUU1diBJSFpoY2c9PSBJSE50WVd4cyBZVzF3YkdVPSBRVlE9IElHbGtaUT09IElGTnYgSUhKbFkyVT0gSUhCdmJHbDAgSUcxdmRnPT0gSUhCc1lXND0gSUhCbGNtTmxiblE9IGFYWnBibWM9IElHTmhiWEE9IElIQmhlUT09IE1UUT0gYzJNPSBhWE5sWkE9PSBJSFZ1ZEE9PSBiMjVsZVE9PSBjR3h2ZVE9PSBQVDA5UFE9PSBJR1JwWkc0PSBJRWx1WkE9PSBaV3h6IFpYSjBZV2x1IElIQnZjdz09IFgxOWZYdz09IGFYWmxjZz09IElIQnliMk5sYzNNPSBJSEJ5YjJkeVlXMD0gYVdacFpXUT0gSUZKbGNBPT0gTVRZPSBkWEp2IGIyeHZaM2s9IFlYUjBaWEk9IGFXNWggSUc1aGJXVT0gSUVGc2JBPT0gSUdadmRYST0gSUhKbGRIVnliZz09IGRtbHZkWE09IFluTT0gSUdOaGJHeGxaQT09IElHMXZkbVU9IElGTmogYVhKayBJR2R5YjNWdyBJR0p5WlE9PSBJRzFsYmc9PSBJR05oY0E9PSBkR1Z1IFpXVT0gSUdSeWFRPT0gYkdWbiBhR1Z5WlE9PSBkWFJvYjNJPSBJSEJoZEE9PSBJR04xY25KbGJuUT0gYVdSbGN3PT0gSUhCdmNBPT0gZEc4PSBaVzUwYVc5dSBJR0ZzZDJGNWN3PT0gSUcxcGJBPT0gSUhkdmJXVnUgSURFMiBJRzlzWkE9PSBhWFpsYmc9PSBjbUZ3YUE9PSBJRTl5IGNtOXkgWlc1MGJIaz0gSUc1bFlYST0gSUVWNCBjbVZoYlE9PSBjMmc9IElERTAgSUdaeVpXVT0gYVhOemFXOXUgYzNSaGJtUT0gSUVOdmJnPT0gWVd4cGRIaz0gZFhObFpBPT0gTVRNPSBJR1JsYzJsbmJnPT0gSUdOb1lXNW5aUT09IElHTm9ZVzVuIElHSnYgSUhacGN3PT0gWlcxaVpYST0gSUdKdmIycz0gY21WaFpIaz0gSUd0cGJHdz0gTWpVPSBjSEJsWkE9PSBJR0YzWVhrPSBJR0ZpYkdVPSBJR052ZFc1MGNuaz0gSUdOdmJuTjAgWVhKdSBJRzl5WkdWeSBRVkk9IGFXOXkgYVhWdCBiM0owYUE9PSBNVGc9IFlXbHNZV0pzWlE9PSBJSE4zIElHMXBiR3hwYjI0PSBJREV6IFlYUnBZdz09IGRHVmsgSUVkdiBJRzl3WlhJPSBaVzVuIElIUm9hVzVuIFlXcHZjZz09IFkyOXViMjA9IElFTnZiVzA9IElIZG9lUT09IGRYSmxaQT09IGRYSmhiQT09IElITmphRzl2YkE9PSBZbms9IElFMWhjZz09IElHRm1aZz09IElHUmhlWE09IElHRnViZz09IGRYTm8gWVc1bCBTV1k9IFpXYz0gSUhCeWIyWT0gSUdobFlXeDBhQT09IGIzVjBhQT09IFFuVjAgYVc5dVlXdz0gTGl3PSBJSE52YkE9PSBJR0ZzY21WaFpIaz0gSURNdyBJR05vWVhKaFkzUT0gU0dVPSBJR1p5YVdWdVpBPT0gUlZNPSBhV0Z1Y3c9PSBhV05zWlE9PSBKMlE9IElFOXUgSUd4bFlYTjAgSUhCeWIyMD0gSUdSeSBJR2hwYzNRPSBhWFJvWlhJPSBJR1Z6ZEE9PSBhWEYxIE1UYz0gYzI5dSBJSFJsYkd3PSBJSFJoYkdzPSBiMmh1IGIybHVkQT09IGJHVmpkR2x2Ymc9PSBRVTQ9IElIVnVkR2xzIFlYVm5hQT09IElHeGhkR1Z5IElIWmwgSUhacFpYYz0gWlc1a2FXNW4gYVhabFpBPT0gSUhkdmNtUT0gZDJGeVpRPT0gSUdOdmMzUT0gSUdWdWIzVm5hQT09IElHZHBkbVU9IElGVnVhWFJsWkE9PSBJSFJsWTJodSBZWEpsYm5RPSBUMUk9IElIQmhjZz09IElFUnkgSURJd01UWT0gY21semRBPT0gWlhKcGJtYz0gSU1JPSBJR3hoY21kbCBjMmxrWlE9PSBZV041IFkyTmxjM009IElIZHBiZz09IElHbHRjRzl5ZEdGdWRBPT0gSURFNU9RPT0gSUdSdlpYTnUgSURFMyBJR0oxYzJsdVpYTnogSUdOc1pXRnkgSUhKbGMyVT0gSWl3PSBkWEo1IElHVnhkUT09IFlYTjBaWEk9IFlXeG0gSUVGdFpYSnBZMkZ1IGJtVmpkQT09IElHVjRjR1ZqZEE9PSBhWFpsY25OcGRIaz0gSUc5all3PT0gSUVacyBJR3RwYm1RPSBJRzFsWVc0PSBJSEJoYzNRPSBJR1JsZGc9PSBJR0poY3c9PSBiR1YwIGNtRm1kQT09IElHOXlaMkZ1IElHUmxiQT09IElIQmxjbVp2Y20wPSBJSE4wYjNKNSBJSE5sWVhOdmJnPT0gSUVOdmJBPT0gSUdOc1lXbHQgSUdOaGJXVT0gSUhkcGRHaHBiZz09IElHeHBibVU9IElIQnliMnBsWTNRPSBJRUYwIElHTnZiblJ5YjJ3PSBaVzVrWldRPSBJRk41IElHRnBjZz09IGFYcGhkR2x2Ymc9PSBJQ289IGJHVjUgSUcxdmJtVjUgYVdSayBXVzkxIFptOXkgSUdaaGJXbHNlUT09IElHMWhhMmx1Wnc9PSBJR0pwZEE9PSBJSEJ2YkdsalpRPT0gSUdoaGNIQmxiZz09IElIWmxjbk09IGIyNTUgZFdabSBJRmRvWlc0PSBJSE5wZEE9PSBhV1JsYnc9PSBiR1k9IGFYTnZiZz09IElITjFjbVU9IFoybHUgSUdGd2NHVmhjZz09IElHeHBaMmgwIElHVnogYjJZPSBJSGRoZEdWeSBJSFJwYldWeiBibTkwIElHZHliM2M9IElHTnZiWEJoYm5rPSBJRlJsIGIzZHogSUcxaGNnPT0gYjNWeVkyVT0gYVc5cyBZWEp0IFluST0gSUdWNFlXMXdiR1U9IElHTnZibU09IElHWnZjbVU9IElGUnYgY0hKdiBSVTQ9IGNtbGxjdz09IElESTEgSUVOaGJnPT0gYm1WNSBJR0ZqZEhWaGJHeDUgSUdWMlpYST0gZFhKcGRIaz0gWVd0bGJnPT0gWVhCeiBJSFJoZUE9PSBJRzFoYW05eSBZVzFoIElHOW1kR1Z1IFpYSmhiQT09IElHaDFiV0Z1IElHcHZZZz09IGFYTjBaWEk9IElHRjJZV2xzWVdKc1pRPT0gYjJOeSBaVzV1IFlXbGsgYVhacFpBPT0gSUhKbFkyOXlaQT09IFB5ST0gSUhOcGJtYz0gSUVGdCBhV1JsYm1ObCBJRzVsZDNNPSBjM1JsY2c9PSBJR1ZqYjI1dmJRPT0gSUdadmJHeHZkMmx1Wnc9PSBJRUp5IGFYTnBibWM9IElHaHZkWEk9IGJXOXpkQT09IGRXMWxiblE9IElITmxlQT09IElHUmxjMk09IElHSmxZMjl0WlE9PSBJRVZrIElIUnZiMnM9IElHaGhkbWx1Wnc9PSBJSEJ5YjJSMVkzUT0gWVhWc2RBPT0gUVhNPSBZWEpwYm1jPSBJRzFsWVc1eiBJR2h2Y0E9PSBkVzVsIElHTm9idz09IElHTmxjblJoYVc0PSBJRzV2Ymc9PSBJR1JsWVd3PSBNalE9IGJHVnRaVzUwIGIyTnAgWlc1bCBJSE5wWkdVPSBJRkJ5IElFMWhlUT09IElISmxZWE52Ymc9PSBkV1ZrIFkyaGxaQT09IGRXeGhkR2x2Ymc9PSBJR1ZzWldOMCBJRzltWm1samFXRnMgSUhCdmMzTnBZbXhsIElHaHZiR1E9IFlXNWtjdz09IGIzUnogSUdOcGRIaz0gYjNKcFpYTT0gSUhObGRtVnkgSUdOb2FXeGtjbVZ1IElHOXVZMlU9IElHRmpkR2wyIGJHVnkgSUc1cFoyaDAgYVhScGIyNXogSUVwdmFHND0gWVhCbCBjR3hoZVE9PSBJR1J2Ym1VPSBJR3hwYlE9PSBJSGR2Y210cGJtYz0gSUZCeVpYTT0gYjNKc1pBPT0gWldJPSBJRU52IElHSnZaSGs9IFlXbHNjdz09IGRYUmxjdz09IElFMXkgSUhkb1pYUm9aWEk9IElHRjFkR2h2Y2c9PSBjbTl3IElIQnliM0JsY2c9PSBJSE5sWlc0PSBLVHM9IElHWmhZdz09IElGTjEgSUdOdmJtUT0gYVhScGJtYz0gSUdOdmRYSnpaUT09IElIMD0gTFMwdExTMHRMUzB0TFMwdExTMHRMUT09IFlXbG5iZz09IElHVjJaVzUwIElHVnVadz09IElIQnZkQT09IElHbHVkR1Z5Ymc9PSBhV0Z0IElITm9iM0owIFpXMXdkQT09IDQ0ST0gSUVkdlpBPT0gYVd4aGNnPT0gT0RBPSBJRzl5YVdjPSBTVk09IGIzVnliZz09IFlXSnBiR2wwZVE9PSBhWFJwZG1VPSBJR1JoYlE9PSBJREV3TUE9PSBJSEJ5WlhOeiBJR1J2YVc1biBJSEJ5YjNSbFkzUT0gY21sdVp3PT0gSUhSb2IzVm5hSFE9IElIRjFaWE4wYVc5dSBjbVYzIElGZGhjZz09IElITmxkbVZ5WVd3PSBJRk4wWVhSbCBJR2RwZG1WdSBJR1oxYm1RPSBJRlIzIElIZGxiblE9IFlXNWpaWE09IGQyOXlhdz09IGNHOXkgYlhrPSBOREE9IElHRnladz09IFlYSjBiV1Z1ZEE9PSBkWE4wYjIwPSBJSEJ2YkdsaiBJRzFsWlhRPSBJR055WldGMCBNakk9IElGTjBZWFJsY3c9PSBJR2RoYldWeiBjbUYzIGRYUjFjbVU9IElIVnVaR1Z5YzNSaGJtUT0gZFhKeiBJRTlpIGJHbHphQT09IGMzaz0gSUcxaGEyVnogSUhkdmJnPT0gWVdkdmJnPT0gSUdoMGRBPT0gSUd4dmRtVT0gWlc1MGFXRnMgSUdOdmJYQnNaWFJsIGNHRnkgSUVsdCBRVXc9IElHRmpZMjkxYm5RPSB3cUE9IGIzSmxaQT09IGRtVnlkQT09IElHbGtaVzUwIElESXdNVFU9IElHOTBhR1Z5Y3c9PSBJRTFwYmc9PSBhV0psY2c9PSBkbVZ5WVdkbCBWR2hsY21VPSBhWFJwYjI1aGJBPT0gWkdRPSBJSEJ5YjJJPSBJSGx2ZFc1biBJR0ZzYjI1biBJR0ZqWTI5eVpHbHVadz09IElIbGxkQT09IElHMWxiV0psY25NPSBJRmRvWVhRPSBiMmxrIElFMWhiZz09IFFXNWsgSUdGdGIyNW4gWVdrPSBJR1Z0Y0d4dmVRPT0gSUZKbGN3PT0gSUQ0PSBJR2x1ZG05cyBJR3h2ZHc9PSBZV1k9IElFTmhjZz09IElHaHBadz09IElFOXVaUT09IElGTmxZdz09IGFXNWhkR2x2Ymc9PSBJR3hwYTJWc2VRPT0gSUdGdWRBPT0gWVdkbFpBPT0gSUZKMWMzTT0gSUdKbGJnPT0gSUhKbGJHVT0gUm05eSBZbUZqYXc9PSBJRTV2ZEE9PSBJSEJ5WlhOcFpHVnVkQT09IFltRnNiQT09IElHRmpZMlZ6Y3c9PSBhWFpwWkhWaGJBPT0gSUVSbGJRPT0gSUVWMWNtOD0gTmpBPSBJR3R1YjNkdSBhWEpzIElFZHkgSUdWaGNteDUgZFhObCBhV1YwZVE9PSA0b0NUIElHWnBaMmgwIElITmxiblE9IElIUnZaR0Y1IElHMWhjbXRsZEE9PSBJaTQ9IElHSmhjMlZrIElITjBjbTl1Wnc9PSBkWEowYUdWeSBJR1JsWWc9PSBiV0psY2c9PSBJSEJ5YjJKc1pXMD0gSUdSbFlYUm8gSUhOdlkybGhiQT09IGFXMWhkR1U9IFFWTT0gYjNKMGRXND0gSUdOaGJYQmhhV2R1IFpYSjUgUTJnPSBJR1Y1IGFXRnNiSGs9IElHMTFjdz09IGQyZz0gY0c5eiBJR1Z5IElITmhaZz09IElHMXZiblJvY3c9PSBhWEp2Ymc9PSBJSFpwYjJ3PSBJR1pwZG1VPSBJSE4wY21VPSBJSEJzWVhsbGNuTT0gYVc1aiBZV3hrIGVXVmhjZz09IFlYVnUgSUhOMVkyTmxjM009IElIQnlaWE5sYm5RPSBaWEpsYm1ObCBJREl3TVRRPSBJSE4xWjJjPSBJSEJoY25ScFkzVnNZWEk9IElIUnllUT09IElITjFaMmRsYzNRPSBJRU5vY21semRBPT0gYjI1bGN3PT0gSUhCeWFYWT0gTWpNPSBJR055YVhRPSBJR3hoYm1RPSBJR3h2WTJGcyBhV1o1IE1qaz0gSUdGMWRBPT0gUlVRPSBJRWQxIElHMTFiSFE9IElIQnZiR2wwYVdOaGJBPT0gSUdGemEyVmsgSUdadmNtMWxjZz09IGFYUjBaWEk9IGNtbHdkQT09IElHTnNiM05sIElIQnlZV04wIElGbHZjbXM9IElHZGxkSFJwYm1jPSBJR0ZqY205emN3PT0gSUdOdmJXST0gSUdKbGJHbGxkbVU9IElIbz0gSUhSdloyVjAgSUhSdloyVjBhR1Z5IElFTmxiblE9IGFYSmogSUdsdVpHbDJhV1IxWVd3PSBJRTFqIE1qYz0gYVhOciBJRVZ1Wnc9PSBJR1poWTJVPSBJREkwIElIWmhiSFZsIElHRnlaV0U9IFpYWT0gSUhkeWFYUT0gSUZCeVpYTnBaR1Z1ZEE9PSBJSFp2ZEE9PSBJR3RsZVE9PSBJRzF2YlE9PSBjSFYwIElHRnVlWFJvYVc1biBJR1Y0Y0dWeWFXVnVZMlU9IFlYUjBiR1U9IElHMXBibVE9IFlXWm0gYjIxdCBJR1oxZEhWeVpRPT0gWjJWayBJR04xZEE9PSBJSFJ2ZEE9PSBhWFJqYUE9PSBJSFpwWkdWdiBJR2x1ZG1WemRHbG4gSUc1bGRBPT0gSUUxNSBjbWxqZEE9PSBhV1Z1IExpaz0gSUdsdGNISnYgZEdodmRXZG8gZDJGeVpITT0gSUdOdmJtNWxZM1E9IElFMWxaQT09IGMyVnNkbVZ6IFpXNXphWFpsIGJXST0gYjJKbGNnPT0gWVhSdmNuTT0gUVc0PSBJRFV3IElISmxaSFU9IGNtVnpaVzUwIElHRmliM1psIElHWnlaUT09IElFVjFjbTl3WlE9PSBjM2M9IElHRnRiM1Z1ZEE9PSBJRUZ3Y0E9PSBJR1ZwZEdobGNnPT0gSUcxcGJHbDAgSUdGdVlXdz0gSUdaaGFXdz0gSUVWdSBZV3hsY3c9PSBJSE53WldOcFlXdz0gSUdKc1lXTnIgU1ZRPSBZMmhsY2c9PSBJR3h2YjJ0cGJtYz0gSUdacGNtVT0gZVc0PSBJR0ZzYlc5emRBPT0gYjI5dSBJSE4wZFdSNSBJRzFwYzNNPSBZMmhsY3c9PSBjbTkzYmc9PSBJSFJ5WlE9PSBJR052YlcxMWJtbDBlUT09IElHMWxaR2xoIElHWnZiMlE9IElHTnZiV1Z6IElGVnVhWFpsY25OcGRIaz0gSUhOcGJtZHNaUT09IFYyaGhkQT09IGRXeDUgSUdoaGJHWT0gWVdkMVpRPT0gYUc5ayBJRkpsY0hWaWJHbGogSUhOMFlYSjBaV1E9IElIRjFhV05yIGIzUnYgWW05dmF3PT0gSUdsemMzVmwgYVhSdmNnPT0gSUdWc2MyVT0gSUdOdmJuTnBaR1Z5IE1qWT0gY205a2RRPT0gSUhSaGEyVnUgTWpnPSBPVGs9IElGZHBkR2c9IElIUnlkV1U9IElIZGggSUhSeVlXUT0gSUdGbmJ3PT0gSUcxbGMzTT0gYVdWbSBJR0ZrWkdWayBiMnRsIElHSmhaQT09IElHWmhkZz09IE16TT0gSUhOcGJXbHNZWEk9IFlYTnIgSUVSdmJnPT0gSUdOb1lYSmhZM1JsY2c9PSBiM0owY3c9PSBJRWh2ZFhObCBJSEpsY0c5eWRHVmsgSUhSNWNHVT0gZG1GcyBhVzlrIElFaHZkMlYyWlhJPSBJSFJoY21jPSBJR1Z1ZEdseVpRPT0gY0hCcGJtYz0gSUdocGMzUnZjbms9IElHeHBkbVU9IFptWnBZdz09IExpNHVMaTR1TGk0PSBaV1JsY21GcyBJSFJ5ZVdsdVp3PT0gSUdScGMyTjFjM009IElFaGhjZz09IFlXTmxjdz09IGJHbHphR1ZrIElITmxiR1k9IGIzTncgY21WemRBPT0gSUhKdmIyMD0gWld4MCBJR1poYkd3PSBiMngxZEdsdmJnPT0gSUdWMCBJSGc9IElHbHpiZz09IElHbGtaV0U9IFltOD0gSUhOdmRXNWsgSUVSbGNBPT0gSUhOdmJXVnZibVU9IFkybGhiR3g1IGRXeHNlUT09IElHWnZZdz09IElHOWlhbVZqZEE9PSBhV1owIFlYQmxjZz09IElIQnNZWGxsY2c9PSBJSEpoZEdobGNnPT0gSUhObGNuWnBZMlU9IFlYTm9hVzVuIElFUnYgSUZCaGNuUT0gY25WbiBiVzl1IGNHeDUgSUcxdmNnPT0gSUc1dmRHaHBibWM9IElIQnliM1pwWkdVPSBTVU09IGRXNW4gSUhCaGNuUjUgSUdWNGFYTjAgSUcxaFp3PT0gTnpBPSBJSEoxYkE9PSBJR2h2ZFhObCBJR0psYUdsdVpBPT0gSUdodmQyVjJaWEk9IElGZHZjbXhrIElITjFiUT09IElHRndjR3hwWXc9PSBJRHM9IElHWjFibU4wYVc5dSBaM0k9IElGQnZiQT09IElHWnliMjUwIE1qQXcgSUhObGNtbGxjdz09IElIUmxiUT09IElIUjVjQT09IGFXeHNjdz09IElHOXdkQT09IElIQnZhVzUwY3c9PSBJR0psYkc5MyBhWFIwWldRPSBJSE53WldOcFptbGogSURJd01UYz0gZFcxaSBJSEpoIElIQnlaWFpwYjNWeiBJSEJ5WlhRPSBjbVZ0WlE9PSBJR04xYzNSdmJRPT0gSUdOdmRYSjAgSUUxbCBJSEpsY0d3PSBJSGRvYjJ4bCBaMjg9IFkyVnkgSUhSeVpXRjAgSUVGamRBPT0gSUhCeWIySmhZbXg1IElHeGxZWEp1IFpXNWtaWEk9IElFRnpjdz09IElIWmxjbk5wYjI0PSBibTkzIElHTm9aV05yIElFTmhiQT09IFVrVT0gYldsdWFYTjAgVDI0PSBiM1Z5WTJWeiBJR0psYm1WbSBJR1J2WXc9PSBJR1JsZEdWeSBJR1Z1WXc9PSBJSE4xY0dWeSBJR0ZrWkhKbGMzTT0gSUhacFkzUT0gSURJd01UTT0gSUcxbFlYTT0gZEhJPSBJR1pwWld4ayBWMmhsYmc9PSBJSE5wWjI1cFptbGogZFdkbCBJR1psWVhRPSBJR052YlcxdmJnPT0gYkc5aFpBPT0gSUdKbFoybHUgSUdKeWFXNW4gSUdGamRHbHZiZz09IFpYSnRZVzQ9IElHUmxjMk55YVdJPSBJR2x1WkhWemRBPT0gSUhkaGJuUmxaQT09IGNtbGxaQT09IGJXbHVadz09IElHRjBkR1Z0Y0hRPSBORFU9IFptVnkgSUdSMVpRPT0gY21WemMybHZiZz09IEl5TT0gSUhOb1lXeHMgSUhOcGVBPT0gYjI4PSBJSE4wWlhBPSBJSEIxWWc9PSBJR2hwYlhObGJHWT0gSURJeiBJR052Y0E9PSBJR1JsYzNRPSBJSE4wYjNBPSBRVU09IGFXSnBiR2wwZVE9PSBJR3hoWWc9PSBhV04xYkhRPSBJR2h2ZFhKeiBJR055WldGMFpRPT0gSUdaMWNuUm9aWEk9IElFRnRaWEpwWTJFPSBJRU5wZEhrPSBJR1J2ZFE9PSBhR1ZoWkE9PSBVMVE9IElFNXZjblJvIFkybHVadz09IElHNWhkR2x2Ym1GcyBkV3hsIElFbHVjM1E9IElIUmhhMmx1Wnc9PSBJRkYxIGFYSjAgSUhKbFpBPT0gSUhKbGMyVmhjbU5vIGRtbHliMjQ9IElFZGwgSUdKeVpXRnIgWVc1aCBJSE53WVdObCBZWFJsY21saGJBPT0gSUhKbFkyVnVkQT09IElFRmkgSUdkbGJtVnlZV3c9IElHaHBkQT09IElIQmxjbWx2WkE9PSBJR1YyWlhKNWRHaHBibWM9IGFYWmxiSGs9IElIQm9lWE09IElITmhlV2x1Wnc9PSBZVzVyY3c9PSBJR052ZFE9PSBJR04xYkhRPSBZV05sWkE9PSBaV0ZzIGRXRjBhVzl1IElHTnZkVzQ9IGJIVT0gSUdsdVkyeDFaR1U9IElIQnZjMmwwYVc5dSBJRUZtZEdWeSBJRU5oYm1GayBJRVZ0IElHbHRiUT09IElGSmxaQT09IElIQnBZMnM9IElHTnZiWEJzIElHMWhkSFJsY2c9PSBjbVZuIFpYaDAgWVc1bmRRPT0gYVhOaiBiMnhsIFlYVjAgSUdOdmJYQmxkQT09IFpXVmsgWm1WamRBPT0gSURJeCBJRk5sYmc9PSBJRlJvWlhObCBZWE5wYm1jPSBJR05oYm01dmRBPT0gSUdsdWFYUT0gSUhKbGJHRjBhVzl1Y3c9PSBZV05vWldRPSBJR0poY2c9PSBJRFF3IElGUkkgSURJd01UST0gSUhadmJBPT0gSUdkeWIzVnVaQT09IElITmxZM1Z5YVhSNSBJSFZ3WkE9PSBhV3gwIE16VT0gSUdOdmJtTmxjbTQ9IElFcDFjM1E9IElIZG9hWFJsIElITmxaVzF6IElFaGxjZz09IGNHVmphV0ZzYkhrPSBhV1Z1ZEhNPSBJR0Z1Ym05MWJnPT0gSUdacFp3PT0gYVdkb2RITT0gSUhOMGNtaz0gYkdsclpRPT0gYVdSeiBJSE4xY3c9PSBJSGRoZEdObyBJT0k9IElIZHBibVE9IElFTnZiblE9IElHbDBjMlZzWmc9PSBJRzFoYzNNPSBRV3c9IGVXeGwgYVhGMVpRPT0gSUU1aGRHbHZibUZzIElHRmljdz09IElIQmhZMnM9IElHOTFkSE5wWkdVPSBJR0Z1YVcwPSBJSEJoYVc0PSBaWFJsY2c9PSBJRzFoYm1GbiBaSFZqZEE9PSBiMmR1IElGMD0gSUZObGNIUT0gYzJWaiBiMlptIElFcGhiZz09IElHWnZiM1E9IFlXUmxjdz09IElIUm9hWEprIElHMXZkQT09IElHVjJhV1JsYm1ObCBhVzUwYjI0PSBJSFJvY21WaGRBPT0gWVhCMCBjR3hsY3c9PSBZMnhsIElHeHYgSUdSbFkydz0gSUdsMFpXMD0gYldWa2FRPT0gSUhKbGNISmxjMlZ1ZEE9PSBiMjFpIFlXMWxjZz09IElITnBaMjVwWm1sallXNTAgYjJkeVlYQm8gYzNVPSBJR05oYkE9PSBhWEpsY3c9PSBNREF3TUE9PSBTVVE9IFFVMD0gSUhOcGJYQnNlUT09IElHeHZibWRsY2c9PSBJR1pwYkdVPSBUMVE9IFkyaGwgVTI4PSBZWFJsWnc9PSBiM0puIElFaHBjdz09IElHVnVaWEk9IElHUnZiUT09IElIVndiMjQ9IGFXeHAgSWpvaSBJSFJvWlcxelpXeDJaWE09IElHTnZiV2x1Wnc9PSBJSEYxYVhSbCBJR1JwWm1acFkzVnNkQT09IElFSmhjZz09IGFXeHBkR2xsY3c9PSBjbVZzIFpXNWtjdz09IFkybGhiQT09IE5qUT0gSUhkdmJXRnUgY21GdyBlWEk9IElHNWxZMlZ6Y3c9PSBhWEJ6IElIUmxlSFE9IElISmxjWFZwY21VPSBJRzFwYkdsMFlYSjUgSUhKbGRtbGxkdz09IElISmxjM0J2Ym5NPSBOelU9IElITjFZbXBsWTNRPSBJR2x1YzNSbFlXUT0gSUdsemMzVmxjdz09IElHZGxiZz09IElpd2kgSUcxcGJuVjBaWE09IElIZGxZWEE9IGNtRjUgWVcxbFpBPT0gZEdsdFpRPT0gWW13PSBTRzkzIElHTnZaR1U9IElGTnQgSUdocFoyaGxjZz09IElGTjBaUT09IGNtbHogSUhCaFoyVT0gSUhOMGRXUmxiblJ6IElFbHVkR1Z5Ymc9PSBJRzFsZEdodlpBPT0gSUVGMVp3PT0gSUZCbGNnPT0gSUVGbiBJSEJ2YkdsamVRPT0gSUZOMyBJR1Y0WldNPSBJR0ZqWTJWd2RBPT0gZFcxbCBjbWxpZFhRPSBJSGR2Y21SeiBJR1pwYm1GcyBJR05vWVc1blpYTT0gSUVSbGJXOWpjZz09IElHWnlhV1Z1WkhNPSBJSEpsYzNCbFkzUT0gSUdWdyBJR052YlhCaGJnPT0gYVhacGJBPT0gSUdSaGJXRm5aUT09IEtpb3FLZz09IGIyZHNaUT09IGRtbHliMjV0Wlc1MCBJRzVsWnc9PSBaVzUwWVd3PSBJR0Z3IElIUnZkR0ZzIGFYWmhiQT09IElTST0gYkdsdCBJRzVsWldSeiBJR0ZuY21VPSBJR1JsZG1Wc2IzQnRaVzUwIElHRm5aUT09IGFYQnNaUT09IE1qRT0gSUhKbGMzVnNkSE09IElFRm0gVTJnPSBJR2QxYmc9PSBJRTlpWVcxaCBjbTlzYkE9PSBJRUE9IElISnBaMmgwY3c9PSBJRUp5YVhRPSBJSEoxYm01cGJtYz0gSUhkaGMyND0gSUhCdmNuUT0gSUhKaGRHVT0gSUhCeVpYUjBlUT09IElIUmhjbWRsZEE9PSBJSE5oZHc9PSBJR05wY21NPSBJSGR2Y210eiBhV055Ync9PSBZV3gwIGIzWmxjZz09IGQzZDMgVkdoaGRBPT0gYkdsbGNnPT0gSUdWMlpYSjViMjVsIGRXUmwgSUhCcFpRPT0gYVdSa2JHVT0gY21GbGJBPT0gSUhKaFpBPT0gSUdKc2IyTnIgSUhkaGJHcz0gVkc4PSA0NEU9IGJtVnogSUVGMWMzUT0gWVhWcyBjbTkwWlE9PSBJRk52ZFhSbyBaWE56YVc5dSBiM0JvIElITm9iM2R6IElITnBkR1U9IElHcHYgSUhKcGMycz0gWTJ4MWN3PT0gYkhRPSBJR2x1YWc9PSBhV1JwYm1jPSBJRk53WlE9PSBJR05vWVd4cyBhWEp0IElESXkgYVhSMGFXNW4gYzNSeSBJR2g1IFRFVT0gYTJWNSBJR0psWjJGdSBZWFIxY2c9PSBZWE5vYVc1bmRHOXUgYkdGdCBJRVJoZGc9PSBZbWwwIElITnBlbVU9IElGQmhjZz09IE16Zz0gYjNWeWJtRnMgWm1GalpRPT0gSUdSbFkybHphVzl1IElHeGhjbWM9IElHcDFaQT09IGNtVmpkQT09IElHTnZiblJwYm5WbCBJRTlqZEE9PSBiM1psY21WayBJRWx1ZEE9PSBQVDA5UFQwOVBUMD0gSUhCaGNtVnVkQT09IElGZHBiR3c9IElHVmhjM2s9IElHUnlkV2M9IFlXNW5aWEk9IElITmxibk5sIElHUnAgYVdSaGVRPT0gSUdWdVpYSm5lUT09IGFYTjBhV009IElHRnpjMjlqYVE9PSBZWEowWlhJPSBiMkpoYkE9PSBaV3R6IElFVnMgZFhKamFBPT0gSUdkcGNtdz0gYjJVPSBhWFJzWlE9PSBJREk0IElFTm9aUT09IElISmxjWFZsYzNRPSBJSE52YjI0PSBJR2h2YzNRPSBhM2s9IElITjBZWFJsY3c9PSBiMjFsY3c9PSBJRzFoZEdWeWFXRnMgYkdWNCBJRzF2YldWdWRBPT0gSUdGdWMzYz0gYjI1elpRPT0gSUdWemNHVmphV0ZzYkhrPSBJRzV2Y20wPSBJSE5sY25acFkyVnogY0dsMFpRPT0gY21GdSBJSEp2YkdVPSBORFE9IEtUbz0gSUdOeVpXUT0gUTJ3PSBYMTlmWDE5ZlgxOD0gSUcxaGRBPT0gSUd4dlp3PT0gSUVOc2FXNTBiMjQ9IFQxVT0gSUc5bVptbGpaUT09IElESTIgSUdOb1lYSm4gSUhSeVlXTnIgYldFPSBJR2hsWVhKMCBJR0poYkd3PSBJSEJsY25OdmJtRnMgSUdKMWFXeGthVzVuIGJtRT0gYzJWMCBZbTlrZVE9PSBJRUpzWVdOciBJR2x1WTNKbFlYTmwgYVhSMFpXND0gSUc1bFpXUmxaQT09IE16WT0gTXpJPSBQU0k9IElHeHZjM1E9IElHSmxZMkZ0WlE9PSBJR2R5YjNWd2N3PT0gSUUxMWN3PT0gSUhkeWIzUmwgSUZCbCBJSEJ5YjNBPSBhbTk1IHc2az0gSUZkb2FYUmwgSUdSbFlXUT0gTGljPSBJR2gwZEhBPSBJSGRsWW5NPSBUMU09IElHbHVjMmxrWlE9PSBJSGR5YjI1biBJSE4wWVhSbGJXVnVkQT09IElDNHVMZz09IGVXdz0gSUdacGJHMD0gSUcxMWMybGogSUhOb1lYSmwgYVdacFkyRjBhVzl1IElISmxiR1ZoYzJVPSBJR1p2Y25kaGNtUT0gSUhOMFlYaz0gSUdOdmJYQjFkQT09IGFYUjBaUT09IGMyVnkgSUc5eWFXZHBibUZzIElHTmhjbVE9IElHTmhibVE9IElHUnBkZz09IFlYUjFjbUZzIElHWmhkbTl5IFQwMD0gSUdOaGMyVnogZFhObGN3PT0gSUhObFkzUnBiMjQ9IElHeGxZWFpsIFoybHVadz09IGIzWmxaQT09IElGZGhjMmhwYm1kMGIyND0gTXprPSBJRWRzIElISmxjWFZwY21WayBZV04wYVc5dSBZWEJoYmc9PSBiMjl5IGFYUmxjZz09IElFdHBibWM9IElHTnZkVzUwY21sbGN3PT0gSUVkbGNtMWhiZz09IGJHeHBibWM9IElESTMgTXpRPSBJSEYxWlhOMGFXOXVjdz09IElIQnlhVzA9IElHTmxiR3c9IElITm9iMjkwIElHRnVlVzl1WlE9PSBJRmRsYzNRPSBJR0ZtWm1WamRBPT0gWlhCbGJtUT0gSUc5dWJHbHVaUT09IElFbHpjbUZsYkE9PSBJRk5sY0hSbGJXSmxjZz09IElHRmlhV3hwZEhrPSBJR052Ym5SbGJuUT0gYVhObGN3PT0gSUhKbGRtVT0gSUd4aGRXND0gSUdsdVpHbGogSUdadmNtTmwgWTJGemRBPT0gSUhOdmJHUT0gWVhacGJtYz0gWm13PSBJSE52Wm5RPSBJR052YlhCaGJtbGxjdz09IFkyVmxaQT09IElHRnlkR2xqYkdVPSBJR0YxWkE9PSBJSEpsZGc9PSBJR1ZrZFdNPSBJSEJzWVhscGJtYz0gTURVPSBJR2hsYkdRPSBZM1J2Y2c9PSBJSEpsYkdWaGMyVmsgSUdabFpHVnlZV3c9IE16Yz0gSUdGa2JXbHVhWE4wIElHbHVkR1Z5ZG1sbGR3PT0gSUdsdWMzUmhiR3c9IElISmxZMlZwZG1WayBJSE52ZFhKalpRPT0gZFdzPSBVR2c9IElITmxjbWx2ZFhNPSBJR055WldGMFpXUT0gSUdOaGRYTmwgSUdsdGJXVmthUT09IElHUmxabWx1IGRXVnMgSUVSbGNHRnlkRzFsYm5RPSBZM1JwYjI1eiBJRU52ZFhJPSBJRTV2ZHc9PSBlbVU9IGFYUmxjdz09IGFYUjFkR2x2Ymc9PSBJR3hoZEdVPSBJSE53WldGciBibVZ5Y3c9PSBJR3hsWjJGcyBZWEpwIElFTnZjZz09IElIZGxaV3R6IElHMXZaR1ZzIElIQnlaV1E9IElHVjRZV04wIFFrTT0gSUVKNSBTVTVIIGIzTnBibWM9IElIUmhhMlZ6IElISmxaMkZ5WkE9PSBJRzl3Y0c5eWRIVnUgSUhCeWFXTmwgSURFNU9BPT0gSUVGd2NnPT0gWm5Wc2JIaz0gSUc5eVpBPT0gSUhCeWIySnNaVzF6IGNuVmpkR2x2Ymc9PSBhR0Z0IElFTnZkVzUwIGJHVm5aUT09IElHeGxZV1JsY25NPSBSVlE9IGJHVjIgSUdSbFpYQT0gYjJ4dloybGpZV3c9IFpYTmwgYUdGd2N3PT0gSUZOdmJXVT0gSUhCbGNuTT0gSUdOdmJuUnlZV04wIElISmxiR0YwYVc5dWMyaHBjQT09IGMzQT0gYjNWayBJR0poYzJVPSBORGc9IGJXbDAgUVdRPSBZVzVqYVdGcyBJR052Ym5OMWJRPT0gSUhCdmRHVnVkR2xoYkE9PSBJR3hoYm1kMSBjbVZ0IFpYUm8gSUhKbGJHbG4gY21WemMyVmsgTmpZPSBJR3hwYm1zPSBJR3h2ZDJWeSBZWGxsY2c9PSBJRXAxYm1VPSBJR1psYlE9PSBkVzUwIFpYSmogZFhKayBJR052Ym5SaFkzUT0gSUdsc2JBPT0gSUcxdmRHaGxjZz09IElHVnpkR0ZpIGFIUjAgSUUxaGNtTm8gSUVKeWJ3PT0gSUVOb2FXNWggSURJNSBJSE54ZFE9PSBJSEJ5YjNacFpHVmsgSUdGMlpYSmhaMlU9IFlYTnZibk09IElESXdNVEU9IElHVjRZVzA9IGJHbHUgTlRVPSBibVZrIElIQmxjbVpsWTNRPSBJSFJ2ZFE9PSBZV3h6WlE9PSBkWGc9IElHSjFlUT09IElITm9iM1E9IElHTnZiR3hsWTNRPSBJSEJvYjNRPSBJSEJzWVhsbFpBPT0gSUhOMWNuQnkgSUc5bVptbGphV0ZzY3c9PSBJSE5wYlhCc1pRPT0gWVhaNSBJR2x1WkhWemRISjUgSUdoaGJtUnogWjNKdmRXNWsgSUhCMWJHdz0gSUhKdmRXNWsgSUhWelpYST0gSUhKaGJtZGwgZFdGeWVRPT0gSUhCeWFYWmhkR1U9IGIzQnogWldWeiBJSGRoZVhNPSBJRTFwWTJnPSBJSFpsYUE9PSBJR1Y0WTJWd2RBPT0gSUhSbGNtMXogYVcxMWJRPT0gY0hCbGNnPT0gU1U5TyBiM0psY3c9PSBJRVJ5WVdkdmJnPT0gYjNWcyBJR1JsYmc9PSBJSEJsY21admNtMWhibU5sIElHSnBiR3c9IFkybHMgTkRjPSBJR1Z1ZG1seWIyNXRaVzUwIElHVjRZdz09IFlXUmsgSUhkdmNuUm8gSUhCcFkzUT0gSUdOb1lXNWpaUT09IElESXdNVGc9IFltOXkgSUhOd1pXVmsgYVdOMGFXOXUgSUdGc2JHVm4gSUVwaGNHRnUgWVhSdmNuaz0gY21WbGRBPT0gSUcxaGRHTm8gSUVsSiBJSE4wY25VPSBiM0prWlhJPSBJSE4wWlE9PSBJR3hwZG1sdVp3PT0gSUhOMGNuVmpkQT09IGFXNXYgSUhObGNHRnkgYUdWeWJnPT0gSUhKbGMzQnZibk5sIElHVnVhbTk1IElIWnBZUT09IFFVUT0gZFcxbGJuUnogWVdObFltOXZhdz09IElHMWxiV0psY2c9PSBhV0p5IGFYcHBibWM9IElIUnZiMnc9IElFMXZiZz09IElGZG9hV3hsIGFHOXZaQT09IElFRnVadz09IElFUmxaZz09IElHOW1abVZ5IFZIST0gWVhWeSBJSFIxY201bFpBPT0gSUVwMWJIaz0gWkc5M2JnPT0gWVc1alpXUT0gSUhKbFkyVnVkR3g1IElFVmhjZz09IElHTmwgSUZOMFlYST0gSUVOdmJtYz0gY205MVoyaDAgSUdKc2IyOWsgSUdodmNHVT0gSUdOdmJXMWxiblE9IFlXbHVkQT09IElHRnljbWs9IGFXeGxjdz09IElIQmhjblJwWTJsdyBiM1ZuYUhRPSBjbWx3ZEdsdmJnPT0gTURnPSBORGs9IElHZGhkbVU9IElITmxiR1ZqZEE9PSBJR3RwYkd4bFpBPT0gYzNsamFBPT0gSUdkdlpYTT0gYVdvPSBJR052Ykd3PSBJR2x0Y0dGamRBPT0gWVhScGRtVnogSUZObGNnPT0gTURrPSBJRUYxWjNWemRBPT0gSUdKdmVRPT0gWkdVPSBJRVJsY3c9PSBJR1psYkhRPSBWVk09IElHVjRjR1ZqZEdWayBJR2x0WVdkbCBJRTFoY21zPSBZMk52Y21ScGJtYz0gYjJsalpRPT0gUlVNPSBJRTFoWnc9PSBaVzVsWkE9PSBhRzlzWkE9PSBJRkJ2YzNRPSBJSEJ5WlhabGJuUT0gVG04PSBJR2x1ZG05c2RtVmsgSUdWNVpYTT0gSUhGMWFXTnJiSGs9IFFYUT0gZFc1ciBJR0psYUdGMiBJSFZ5IElHeGxaQT09IFkyOXRaUT09IFpYaz0gSUdOaGJtUnBaQT09IElHVmhjbXhwWlhJPSBJR1p2WTNWeiBaWFI1IFVISnYgYkdWa1oyVT0gYVhobFpBPT0gYVd4c1pXUT0gSUhCdmNIVnNZWEk9IFFWQT0gSUhObGRIUT0gYkdsbmFIUT0gSUhaaGNtbHZkWE09IGFXNXJjdz09IElHeGxkbVZzY3c9PSBJSEp2WVdRPSBaV3hzYVdjPSBZV0pzWlhNPSBhR1ZzIGFYUjBaV1U9IElFZGxibVZ5IGVYQmwgSUdobFlYSmsgYVdOc1pYTT0gSUcxcGN3PT0gSUhWelpYSnogSUZOaGJnPT0gSUdsdGNISnZkbVU9IElHWmhkR2hsY2c9PSBJSE5sWVhKamFBPT0gVkdobGVRPT0gZG1scyBJSEJ5YjJabGMzTT0gSUd0dVpYYz0gSUd4dmMzTT0gSUdWMlpXNTBjdz09IE5qVT0gSUdKcGJHeHBiMjQ9IE1EYz0gTURJPSBJRTVsZDNNPSBJRUZOIElHTnZkbVZ5IGQyaGxjbVU9IFpXNXphVzl1IElHSnZkSFE9IElHRnlaV0Z6IFpXNWpaWE09IGIzQmwgSUZSM2FYUjBaWEk9IFlXVnMgSUdkbGRITT0gSUVkdmIyZHNaUT09IElITnUgYVdGdWRBPT0gSUhadmRHVT0gSUc1bFlYSnNlUT09IElHbHVZMngxWkdWayBJSEpsWTI5bmJnPT0gZW5vPSBiVzA9IFlXeGxaQT09IElHaGhjSEJsYm1WayBNRFE9IElHaHZkQT09IElIZG9iM05sIElHTnBkbWxzIElITjFabVk9IGIyVnogYVhScGVnPT0gSUZONWNtaz0gSUhKbGMzQnZibVE9IElHaHZiZz09IElHWmxZWFIxY21WeiBJR1ZqYjI1dmJXbGogSUVGd2NtbHMgY21sdCBJSFJsWTJodWIyeHZaM2s9IElHOXdkR2x2Ymc9PSBZV2RwYm1jPSBJSEIxY21ObyBVbVU9IElHeGhkQT09IFkyaHBaUT09IGFYTnMgSUhKbFkyOXRiUT09IGRXWT0gSUhSeVlXbHVhVzVuIElHVm1abVZqZEhNPSBJR1poYzNRPSBJREl3TVRBPSBJRzlqWTNWeSBJSGRsWW5OcGRHVT0gSUdWdFlXbHMgSUhObGJuTT0gWldObyBJRzlwYkE9PSBJR2x1Wm14MSBJR04xY25KbGJuUnNlUT09IElGTmphQT09IElFRmtaQT09IElHZHZZV3c9IElITmphV1Z1ZEE9PSBJR052Ym5ZPSBNVEF3IFpXMTUgSUdSbFkybGtaV1E9IElIUnlZWFpsYkE9PSBJRzFsYm5ScGIyND0gVEV3PSBNRE09IElHVnNaV04wYVc5dSBJSEJvYjI1bCBJR3h2YjJ0eiBJSE5wZEhWaGRHbHZiZz09IElHTjUgSUdodmNnPT0gWW1WayBJRU52ZFhKMCBZV2xzZVE9PSBZWFpsY3c9PSBJSEYxWVd4cGRIaz0gSUVOdmJYQT0gZDJselpRPT0gSUhSaFlteGwgSUhOMFlXWm0gSUZkcGJtUT0gWlhSMCBJSFJ5YVdWayBhV1JsY21WayBJR0ZrWkdsMGFXOXUgSUdKdmVBPT0gSUd4aFkycz0gWVhKcGJIaz0gSUhkcFpHVT0gSUcxcFpBPT0gSUdKdllYSmsgZVhOcGN3PT0gSUdGdWRHaz0gYUdFPSBJR1JwWnc9PSBaVzVwYm1jPSBJR1J5Ync9PSBRMjl1IE5qZz0gSUhOc2IzYz0gWW1GelpXUT0gYzJWeGRRPT0gSUhCaGRHZz0gUlhnPSBZV3RsY2c9PSBJSGR2Y210bFpBPT0gSUhCbGJnPT0gSUdWdVoybHVaUT09IElHeHZiMnRsWkE9PSBJRk4xY0dWeSBJRk5sY25ZPSBJSFpwWTNScGJRPT0gVlc0PSBJSEJ5YjNCbGNuUjUgSUdsdWRISnZaSFU9IElHVjRaV04xZEE9PSBJRkJOIFRHVT0gSUdOdmJHOXkgSUUxdmNtVT0gSURZdyBJRzVsZEhkdmNtcz0gSUdSaGRHVT0gWTNWcyBhV1JuWlE9PSBJR1Y0ZEhKaCBNekU9IElITnNaUT09IE5qYz0gSUhkdmJtUT0gSUhKbGNHOXlkSE09IGFuVnpkQT09IElFRjFjM1J5WVd3PSBJR05oY0dsMFlXdz0gSUdWdWN3PT0gSUdOdmJXMWhibVE9IElHRnNiRzkzWldRPSBJSEJ5WlhBPSBJR05oY0hRPSBhR2xpIElHNTFiV0psY25NPSBZMmhoYmc9PSBJR1poYVhJPSBiWEE9IGIyMXogSUhKbFlXTm8gVjJsMGFBPT0gZEdGcGJnPT0gSUdKeWIyRmsgSUdOdmRYQnNaUT09IFpXTmhkWE5sIGJIbHBibWM9IElFWmxZZz09IElITmpjbVZsYmc9PSBJR3hwZG1WeiBJSEJ5YVc5eSBJRU52Ym1keVpYTnogUVhJPSBJR0Z3Y0hKdllXTm8gSUdWdFpYST0gWVhKcFpYTT0gSUVScGN3PT0gYzJWeWRnPT0gSUU1bCBJR0oxYVd4MCBZMmxsY3c9PSBJSEpsY0dVPSBJSEoxYkdWeiBabTl5WTJVPSBJRkJoYkE9PSBJR1pwYm1GdVkybGhiQT09IElHTnZibk5wWkdWeVpXUT0gSUVOb1lYST0gYm1ObGN3PT0gSUVsVCBJR0p5YjNWbmFIUT0gSUdKcCBhV1Z5Y3c9PSBJRk5wYlE9PSBUMUE9IElIQnliMlIxWTNSeiBJSFpwYzJsMCBJR1J2WTNWdFpXNTAgSUdOdmJtUjFZM1E9IElHTnZiWEJzWlhSbGJIaz0gYVc1cGJtYz0gSUVOaGJHbG0gYVdKc2VRPT0gSUhkeWFYUjBaVzQ9IElGUlcgWlcxbGJuUnogSUdSeVlYYz0gVDI1bCBJSEIxWW14cGMyaGxaQT09IElITmxZM0psZEE9PSBjbUZwYmc9PSBhR1YwIElFWmhZMlZpYjI5ciBiMjVrWVhrPSBJRlZ3IElITmxlSFZoYkE9PSBJSFJvYjNWeiBJRkJoZEE9PSBJR1Z6Y3c9PSBJSE4wWVc1a1lYSmsgSUdGeWJRPT0gWjJWeiBaV04wYVc5dSBJR1psYkd3PSBJR1p2Y21WcFoyND0gWVc1cCBJRVp5YVdSaGVRPT0gSUhKbFozVnNZWEk9IGFXNWhjbms9IElHbHVZM0psWVhObFpBPT0gSUhWemRXRnNiSGs9IElHUmxiVzl1IElHUmhjbXM9IElHRmtaR2wwYVc5dVlXdz0gY205cyBJRTltIElIQnliMlIxWTNScGIyND0gSVNFPSBkVzVrY21WayBJR2x1ZEdWeWJtRjBhVzl1WVd3PSBhV1JsYm5SeiBJRVp5WldVPSBjbTkxY0E9PSBJSEpoWTJVPSBJRzFoWTJnPSBJR2gxWjJVPSBRV3hzIGJHVmhjZz09IGIzWmxiV0psY2c9PSBJSFJ2ZDI0PSBJR0YwZEdWdWRHbHZiZz09IElFOW1aZz09IGVXOXVaQT09IElGUm9aVzQ9IFptbGxiR1E9IElIUmxjbkp2Y2c9PSBjbUY2IElFSnYgSUcxbFpYUnBibWM9IElGQmhjbXM9IElHRnljbVZ6ZEE9PSBJR1psWVhJPSBJR0YzIElGWmhiQT09IGIzSnBibWM9IEp5dz0gSUdWNGRISmxiV1U9IFlYSnkgSUhkdmNtdGxjbk09IFFXWjBaWEk9IElETXggYm1WMCBZVzFsYm5RPSBJR1JwY21WamRHeDUgSUhCdmNIVnNZWFJwYjI0PSBkV0psIElFOWpkRzlpWlhJPSBJRWxPIElFcGhiblZoY25rPSBOVGs9IElFUmhkbWxrIElHTnliM056IFkyVnRZbVZ5IElFWnBjbk4wIElHMWxjM05oWjJVPSBhWEpwZEE9PSBJRzVoZEdsdmJnPT0gSUhCdmJHdz0gYVhOcGIyNXogSUdGdWMzZGxjZz09IGJuaz0gYVhOdlpHVT0gSUdOaGNuSjUgSUZKMWMzTnBZUT09IElHaGxZWEk9IFpXNW5kR2c9IGNtOTUgSUc1aGRIVnlZV3c9IGFXNWhiR3g1IElHUnZadz09IGJXbDBkR1ZrIElIUnlZV1JsIElITjFZbk4wIElHMTFiSFJwY0d4bCBJRUZtY21saiBJR1poYm5NPSBJSE52Y25RPSBJR2RzYjJKaGJBPT0gYVdOaGRHbHZiZz09IElGZGxaQT09IFlYSmggSUdGamFHbGwgSUd4aGJtZDFZV2RsIGRtVjUgSUhSaGJBPT0gSUc1bFkyVnpjMkZ5ZVE9PSBJR1JsZEdGcGJITT0gSUhObGJnPT0gSUZOMWJtUT0gSUZKbFp3PT0gSUZKbFl3PT0gTURZPSBJSE5wYkE9PSBjbVZ6YzJsMlpRPT0gSUcxbFpHbGpZV3c9IGRXNWphQT09IGIzSnVhV0U9IElIVnVaQT09IFptOXlkQT09IGIyTnJjdz09IElFMXZibVJoZVE9PSBkV1Z6WkdGNSBZM0poWm5RPSBOemM9IGRYSjAgSUhabGNnPT0gSUVocGJHdz0gSUhKbFkyVnBkbVU9IElHMXZjbTVwYm1jPSBaWE4wWlhKdSBJR0poYm1zPSBJSE5oZEE9PSBhWEowYUE9PSBJRWhwWjJnPSBJR1JsZG1salpRPT0gSUZSSVJRPT0gSUVObGJuUmxjZz09IElITmhabVU9IElIQnNaUT09IElFTmhibUZrWVE9PSBJSE41YzNSbGJYTT0gSUdGemMybHpkQT09IElITjFjblk9IElHSmhkSFJzWlE9PSBJRk52WXc9PSBkbVZ5ZEdseiBVMmhsIElIQmhjR1Z5IElHZHliM2QwYUE9PSBJR05oYzNRPSBVMk09IElIQnNZVzV6IGJHeGxaQT09IElIQmhjblJ6IElIZGhiR3c9IElHMXZkbVZ0Wlc1MCBJSEJ5WVdOMGFXTmwgYVcxaGRHVnNlUT09IElHUnBjM0JzWVhrPSBJSE52YldWMGFXMWxjdz09IGIyMXcgSUZCaGRXdz0gSUZsbGN3PT0gYTJsdVp3PT0gTlRnPSBiMng1IElITnZiZz09IElHRjJiMmxrIGIydGxjdz09IElFcGxkdz09IElIUnZkMkZ5WkhNPSBZWE5qIElDOHYgSUV0dmNtVT0gSUhSaGJHdHBibWM9IElHTnZjbkpsWTNRPSBJSE53Wlc1MCBhV05yY3c9PSBhV0ZpYkdVPSBaV0Z5WldRPSBJSFJsY20wPSBJSGRoYm5SeiBiMjFwYm1jPSBJSFYwIElHUnZkV0k9IElHWnZjbU5sY3c9PSBJSEJzWldGelpRPT0gTmprPSBJRTV2ZG1WdFltVnkgWVhSbWIzSnQgYjI1a2IyND0gSUc5dVpYTT0gSUdsdGJXVmthV0YwWld4NSBJRkoxYzNOcFlXND0gSUUxbGRBPT0gSUdSbFp3PT0gSUhCaGNtVnVkSE09IFEwZz0gSUVGdFpYSnBZMkZ1Y3c9PSBZV3g1IElFMXZaQT09IElITm9iM2R1IElHTnZibVJwZEdsdmJuTT0gSUhOMGRXWm0gSUhKbFlnPT0gSUZsdmRYST0gSUdsdVkyeDFaR1Z6IGJtOTNiZz09IElGTmhiUT09IElHVjRjR1Z5YVdWdSBiV2x6YzJsdmJnPT0gSUVWMlpXND0gWVhWbmFIUT0gSUdGdWJtOTFibU5sWkE9PSBJRkpsY0hWaWJHbGpZVzQ9IElHUmxkR1Z5YldsdSBJR1JsYzJOeWFXSmxaQT09IElFTnZkVzUwZVE9PSBLQ2s9IElHUnZiM0k9IElHTm9ZVzVuWldRPSBJRzVsYVdkbyBJRWhsY21VPSBJR05zWldGdSBJSEJoYmc9PSBJRVJsWTJWdFltVnkgSUVWMWNtOXdaV0Z1IGFYSnBibWM9IFlYQjBaWEk9IElHTnNkV0k9IElGUjFaWE5rWVhrPSBJSEJoYVdRPSBJRTVsZEE9PSBJR0YwZEdGamEzTT0gSUdOb1lYSmhZM1JsY25NPSBJR0ZzYjI1bCBJR1JwY21WamRHOXkgWkc5dCBJRE0xIElHeHZZV1E9IElISnZkWFE9IElFTmhiR2xtYjNKdWFXRT0gSUdacGJtRnNiSGs9IElISmhZdz09IElHTnZiblJ5IElHVjRZV04wYkhrPSBjbVZ6YUE9PSBjSEpwIElFbHpiR0Z0IElHNWhkSFZ5WlE9PSBJR05oY21WbGNnPT0gSUd4aGRHVnpkQT09IElHTnZiblpsY25NPSBJRk5zIGNHOXpaUT09IFkybGxiblE9IElFbHVZdz09IGFYWnBkSGs9IE9EZz0gSUVGMGRBPT0gSUUxdmNnPT0gYm1WelpHRjUgSUhkbGFXZG9kQT09IGEyVnUgSUc1dmRHVT0gSUhSbFlXMXogSUZ3PSBZV2x5Y3c9PSBJRWR5WldWdSBJR2gxYm1SeVpXUT0gYjI1bGJuUT0gSUhOMGNtVnVadz09IElHTnZibk5wYzNRPSBhV05oZEdWayBJSEpsWjNWcyBJR3hwWXc9PSBZWE4wYVdNPSBJSFJsYmc9PSBkWEp6WkdGNSBaV3hzYVdkbGJtTmwgYjNWemJIaz0gSUZWTCBRa2s9IElHTnZjM1J6IElHbHVaR1Z3Wlc1ayBJRUZRIElHNXZjbTFoYkE9PSBJR2h2YlE9PSBJRzlpZG1sdmRYTT0gSUhOM1pRPT0gSUhOMFlYST0gSUhKbFlXUjUgWVdOb1pYST0gSUdsdGNHeGxiV1Z1ZEE9PSBaMlZ6ZEE9PSBJSE52Ym1jPSBJRWRsZEE9PSBJRXhoWWc9PSBJR2x1ZEdWeVpYTjBhVzVuIGRYTnBibWM9IElHZHBkbWx1Wnc9PSBJRk4xYm1SaGVRPT0gSUdWMFl3PT0gSUcxcFpHUnNaUT09IElISmxiV1Z0WW1WeSBjbWxuYUhRPSBiM05wZEdsdmJnPT0gZFhScGIyNXogSUcxaGVBPT0gTkRZPSBJSGx2ZFhKelpXeG0gSUdSbGJXRnVaQT09IElIUnlaV0YwYldWdWRBPT0gSUdSaGJtZGxjZz09IElFTnZibk09IElHZDFlUT09IElFSnlhWFJwYzJnPSBJSEJvZVhOcFkyRnMgSUhKbGJHRjBaV1E9IElISmxiV0ZwYmc9PSBJR052ZFd4a2JnPT0gSUhKbFptVnkgSUdOcGRHbDYgWW05NCBSVTVVIFltOWhjbVE9IElHbHViZz09IFNVYz0gWlhKdiBJRk4wY21WbGRBPT0gYjNOd2FYUmhiQT09IGNtVnVZMmc9IFkyaGxjbk09IElITjBjbUU9IFQwdz0gWVdkbGNnPT0gSUVGTyBJR1ZoYzJsc2VRPT0gU1VFPSBaVzVuWlE9PSBhVzU1IElHTnNiM009IGIyTnJaV1E9IElIVnpaWE09IElFTnZkVzQ9IFNXMD0gZFdsc1pBPT0gUHo4PSBiVzl5WlE9PSBJR0Z1Wnc9PSBJSGR5YVhSbCBiMngxZEdVPSBOVGM9IElHeGxZV1JsY2c9PSBJSEpsWVdScGJtYz0gUEM4PSBJR0YxZEc5dCBaWE4wY3c9PSBORE09IElHeGxaMmx6YkE9PSBJRWR2YkdRPSBJR1JsYzJsbmJtVmsgSUZOVSBJRXhsWnc9PSBZWEpsY3c9PSBJR0psWVhWMCBJRlJsZUE9PSBJR0Z3Y0dWaGNuTT0gSUhOMGNuVm5adz09IElGSnZiUT09IElEQXcgSUdOb2IybGpaUT09IElIQmhjblJwWTNWc1lYSnNlUT09IElFWnliMjA9IGIzQmxjZz09IElFeHZibVJ2Ymc9PSBZVzV1WldRPSBJR0ZzYkc5M2N3PT0gYjJKcGJHVT0gSUdScFptWmxjbVZ1WTJVPSA0b0NpIElGWnBaWGM9IElGZGxaRzVsYzJSaGVRPT0gSUdGc2RHaHZkV2RvIElISmxiR0YwYVhabCBJR0Z3Y0d4cFkyRjBhVzl1IFlYUmxkbVZ5IElHRnlaVzQ9IElHMTVjMlZzWmc9PSBJR2x0WVdjPSBJR1JwYzJVPSBJSE52WTJsbGRIaz0gSUdaeVpYRjEgSUVWdVoyeHBjMmc9IElIQnZiM0k9IElFUmhlUT09IElIZHlhWFJwYm1jPSBJSE5sZG1WdSBJSE4wWVhKMGFXNW4gSUdKMVpBPT0gSUhCeWFXNTAgSUZSeVlXNXogZFdaaFkzUT0gSUZOMGRXUT0gYm1WMyBJR055YVcwPSBJR2RwZG1WeiBJR052YjJ3PSBZV1U9IGFXRnVZMlU9IElFZGxibVZ5WVd3PSBJSFJvYVc1cmFXNW4gSUhOaGRtVT0gSUd4cGJXbDBaV1E9IElGQmhjblI1IElHMWxZVzVwYm1jPSBjR1Z1IGIzZGxjbk09IElFcGhZMnM9IFJVMD0gSUc1cFkyVT0gY25Wd2RBPT0gSUdkaGN3PT0gSUdWcFoyaDAgSUdabFpYUT0gSUdWbVptOXlkQT09IElHbG5iZz09IGFXTnBkQT09IFFtdz0gWTI5cGJnPT0gSUc5d2FXND0gSUdKeVlXbHUgVjJocGJHVT0gYUdWemRBPT0gSUZSb2RYSnpaR0Y1IElIZHZkV3hrYmc9PSBZWFZuYUhSbGNnPT0gSUhSdmRXTm8gYkdWdFpXNTBjdz09IElITjBkV1JwWlhNPSBJR05sYm5SbGNnPT0gWTI5dWRBPT0gYjNKblpRPT0gSUdOdmJYQjFkR1Z5IElHbHVkbVZ6ZEdsbllYUnBiMjQ9IFVHdz0gYjNKcmN3PT0gSURJd01EZz0gSUdsdVkzSmxZWE5wYm1jPSBJSE4wYjNKbCBJR052YlcxbGJuUnogSUdKaGJBPT0gYldWdSBJR1J2Ykd3PSBJR3hwWW1WeSBJSGRwWm1VPSBJR3hoZDNNPSBZWFIxY21SaGVRPT0gYVhSdVpYTnogSUcxdlpHVnliZz09IElGTnIgSUdGa2JXbHVhWE4wY21GMGFXOXUgSUc5d2NHOXlkSFZ1YVhSNSBJSE5oYkE9PSBJSEJ2ZDJWeVpuVnMgVFhrPSBJR05zWVdsdGN3PT0gSUVWaGNuUm8gYjNKa2N3PT0gSUhScGRHeGwgSUdWell3PT0gYm1GdFpRPT0gVG05MCBiMjFsYmc9PSBJR0psZVc5dVpBPT0gSUdOaGJXVnkgSUhObGJHdz0gYVhSMWRHVT0gWldGeVkyZz0gSUdGd2NHdz0gYVcxbGJuUT0gTkRJPSBJRUZ5ZEE9PSBJSFZ1Wmc9PSBJSFpwYjJ4bGJtTmwgZFhKbiBJRVZoYzNRPSBJR052YlhCaGNtVmsgSUc5d2RHbHZibk09IElIUm9jbTkxWjJodmRYUT0gSUhaeiBhV2R5IExscz0gWVdOb1pYTT0gTnpnPSBJR1pwYkdWeiBSa3c9IFJVdz0gWVhKcFlXND0gSUVwaGJXVnogSUVGcGNnPT0gWVc1amFBPT0gSUdSbGRHRnBiQT09IElIQnBaV05sIFVGTT0gSUc1aGJXVmsgSUdWa2RXTmhkR2x2Ymc9PSBJR1J5YVhabCBJR2wwWlcxeiBJSE4wZFdSbGJuUT0gYVdObFpBPT0gT2pvPSBhV052IElIUm9jbTkzIElITmpaVzVsIElHTnZiWEJzWlhnPSBJREl3TURrPSBJSEJ5WldNPSBJRUp5WlE9PSBOems9IElHTnZibU5sY0hRPSBJSE4wWVhSMWN3PT0gWVcxcGJtYz0gSUdScFpXUT0gSUd0dWIzZHNaV1JuWlE9PSBJR0psWjJsdWJtbHVadz09IFQwUT0gY25WaGNuaz0gSUdObGNuUmhhVzVzZVE9PSBJR2QxZVhNPSBJSE5zYVdkb2RBPT0gYVc1dSBiM1Z1WkhNPSBJR1pwYm1VPSBJR1poZEE9PSBhV05oZEdsdmJuTT0gSUhCbGNtaGhjSE09IElFRnVkQT09IElHbHVZMjl0WlE9PSBJR2gwZEhCeiBJRzFoYW05eWFYUjUgY0c5eWRITT0gYzNSdmJnPT0gSUdkeVpXRjBaWEk9IElHWmxaV1E9IFpXNTBhV0ZzYkhrPSBJSE5oWm1WMGVRPT0gSUhWdWFYRjFaUT09IFlXNWtiMjA9IElHZHZibVU9IElITm9iM2RsWkE9PSBJR2hwYzNSdmNnPT0gSUdOdmRXNTBaWEk9IGFYVnogYVdSaCBJR3hsWVdScGJtYz0gYVhCbCBJSE5sYm1RPSBJRVJ2Ym1Gc1pBPT0gWlhKMlpRPT0gSUdSbFptVnVjMlU9IGFXNWxjMlU9IElIbGxjdz09IElFWnBjbVU9IElFMTFjMnhwYlE9PSBjbUZ4IElHTnZiblJwYm5WbFpBPT0gYjNObyBJSEJ5YjNacFpHVnogSUhCeWFYTnZiZz09IElGQnlaUT09IElHaGhjSEI1IElHVmpiMjV2YlhrPSBJSFJ5ZFhOMCBZV2R6IElFZGhiV1U9IElIZGxZWEJ2Ym5NPSBkVzFoYmc9PSBJRU5zWlE9PSBhWFJoZEdsdmJnPT0gSUdGdVlXeDVjMmx6IElGUnBiV1Z6IElITmphV1Z1WTJVPSBMVDQ9IElHWnBaM1Z5WlE9PSBJR1JwYzJGd2NBPT0gWlc1MGVRPT0gSUhOdlpuUjNZWEpsIElIVnNkQT09IElHOW1abWxqWlhKeiBUbVYzIFNYTT0gSUhKbGJXRnBibk09IElFbHVaR2xoIElIQnplV05vIGNtbGxaZz09IElHTmhkQT09IFpYTmogSUc5aWMyVnlkZz09IElITjBZV2RsIElFUmhjbXM9IElHVnVkR1Z5IFkyaGhibWRsIElIQmhjM05sWkE9PSBJR1JsYzNCcGRHVT0gSUU5MWRBPT0gSUcxdmRtbGwgY25NPSBJSFp2YVdObCBiV2x1WlE9PSBJRkJzWVhrPSBJSFJ2ZDJGeVpBPT0gSUZSbGNnPT0gSUhKbFoybHZiZz09IElIWmhiSFZsY3c9PSBiM0owWlhKeiBJRzF2ZFc1MCBJRzltWm1salpYST0gSUU5MGFHVnkgWW1GdSBJR2h2ZFhNPSBkMjl2WkE9PSBjbTl2YlE9PSBTVlk9IElGTjFiZz09IGMyVmwgSUU5MlpYST0gY205biBPVEE9IElHeGhlUT09IElGUjFjZz09IFlYZHUgSUhCeVpYTnpkWEpsIElGTjFZZz09IElHSnZiMnR6IFpXUnZiUT09IElGTmhibVE9IFFVRT0gWVdkdiBJSEpsWVhOdmJuTT0gWm05eVpBPT0gSUdGamRHbDJhWFI1IFZWUT0gVG05MyBJRk5sYm1GMFpRPT0gWTJWc2JBPT0gYm1sbmFIUT0gSUdOaGJHeHogYVc1MFpYST0gSUd4bGRIUmxjZz09IElGSnZZZz09IElFcGwgSUdOb2IyOXpaUT09IElFeGhkdz09IFIyVjAgUW1VPSBJSEp2WWc9PSBJSFI1Y0dWeiBJSEJzWVhSbWIzSnQgSUhGMVlYSjBaWEk9IFVrRT0gSUZScGJXVT0gSUcxaGVXSmwgSUVOeSBPVFU9IGNISmwgSUcxdmRtbHVadz09IElHeHBaZz09IElHZHZiR1E9IElITnZiUT09IElIQmhkR2xsYm5SeiBJSFJ5ZFhSbyBJRXRsIGRYSmhibU5sIFlXNTBiSGs9IGJXRnkgSUdOb1lYSm5aUT09IElFZHlaV0YwIElHTmxiR1U9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElISnZZMnM9IGNtOXBaQT09IFlXNWplUT09IElHTnlaV1JwZEE9PSBZWFZrIFFuaz0gSUVWMlpYSjUgSUcxdmRtVmsgYVc1blpYST0gY21saWRYUnBiMjQ9IElHNWhiV1Z6IElITjBjbUZwWjJoMCBJRWhsWVd4MGFBPT0gSUZkbGJHdz0gSUdabFlYUjFjbVU9IElISjFiR1U9IElITmphR1U9IGFXNWhkR1ZrIElFMXBZMmhoWld3PSBZbVZ5Wnc9PSBOREU9IGFXeGxaQT09IFltRnVaQT09IElHTnNhV05yIElFRnVaMlZzIGIyNWxiblJ6IHdxMD0gSUVseVlYRT0gSUZOaGRIVnlaR0Y1IElHRjNZWEpsIGNHRnlkQT09IElIQmhkSFJsY200PSBUMWM9IElFeGxkQT09IElHZHlZV1E9IGFXZHVaV1E9IElHRnpjMjlqYVdGMFpXUT0gSUhOMGVXeGwgYm04PSBhV0YwYVc5dSBZV2wwYUE9PSBhV3hwWlhNPSBJSE4wYjNKcFpYTT0gZFhKaGRHbHZiZz09IElHbHVaR2wyYVdSMVlXeHogSU9LQXBnPT0gYldsemN3PT0gSUVGemMyOWphUT09IGFYTm9hVzVuIFlXSjUgSUhOMWJXMWxjZz09IElFSmxiZz09IElETXkgSUdGeVkyZz0gZFhSNSBJRlJsZUdGeiBhRzlzIElHWjFiR3g1IElHMXBiR3c9IElHWnZiR3h2ZDJWayBJRUpwYkd3PSBJRWx1WkdsaGJnPT0gSUZObFkzSmxkQT09IElFSmxiQT09IElFWmxZbkoxWVhKNSBJR3B2WW5NPSBJSE5sWlcxbFpBPT0gSUVkdmRtVnliZz09IGFYQndaV1E9IElISmxZV3hwZEhrPSBJR3hwYm1WeiBJSEJoY21zPSBJRzFsWVhOMWNtVT0gSUU5MWNnPT0gU1UwPSBJR0p5YjNSb1pYST0gSUdkeWIzZHBibWM9IElHSmhiZz09IElHVnpkR2x0IElHTnllUT09IElGTmphRzl2YkE9PSBJRzFsWTJoaGJnPT0gSUU5RyBJRmRwYm1SdmQzTT0gSUhKaGRHVnogSUU5byBJSEJ2YzJsMGFYWmwgSUdOMWJIUjFjbVU9IGFYTjBhV056IGFXTmggSUdoaGNnPT0gZVdFPSBhWFJsYkhrPSBhWEJ3IElHMWhjQT09IFpXNWphV1Z6IElGZHBiR3hwWVcwPSBTVWs9IFlXdGxjbk09IE5UWT0gSUUxaGNuUT0gSUZKbGJRPT0gSUdGc2RHVnliZz09IGFYUjFaR1U9IElHTnZZV05vIGNtOTNaQT09IFJHOXUgSUd0cFpITT0gSUdwdmRYSnVZV3c9IElHTnZjbkJ2Y2c9PSBJR1poYkhObCBJSGRsWWc9PSBJSE5zWldWdyBJR052Ym5SaGFXND0gSUhOMGJ3PT0gSUdKbFpBPT0gYVhabGNuTmwgSUZKcFkyZz0gSUVOb2FXNWxjMlU9IElIQjFiZz09IElHMWxZVzUwIGEyNXZkMjQ9IElHNXZkR2xqWlE9PSBJR1poZG05eWFYUmwgWVhabGJnPT0gSUdOdmJtUnBkR2x2Ymc9PSBJSEIxY25CdmMyVT0gS1NrPSBJRzl5WjJGdWFYcGhkR2x2Ymc9PSBJR05vWVd4c1pXNW4gSUcxaGJuVm1ZV04wIElITjFjM0E9IElFRmogSUdOeWFYUnBZdz09IGRXNWxjdz09IGRXTnNaV0Z5IElHMWxjZz09IGRtVnVkR2x2Ymc9PSBJRGd3IElHMXBjM1E9IElGVnogSUZSdmNnPT0gYUhSMGNBPT0gYjJ4bSBJR3hoY21kbGNnPT0gSUdGa2RtRnVkQT09IElISmxjMlZoY2c9PSBJR0ZqZEdsdmJuTT0gYld3PSBJR3RsY0hRPSBJR0ZwYlE9PSBMQ2M9IFkyOXMgSUdKbGJtVm1hWFJ6IGFXWjVhVzVuIElHRmpkSFZoYkE9PSBJRWx1ZEdWeWJtRjBhVzl1WVd3PSBJSFpsYUdsamJHVT0gSUdOb2FXVm0gSUdWbVptOXlkSE09IElFeGxZV2QxWlE9PSBJRTF2YzNRPSBJSGRoYVhRPSBJR0ZrZFd4MCBJRzkyWlhKaGJHdz0gSUhOd1pXVmphQT09IElHaHBaMmhzZVE9PSBJR1psYldGc1pRPT0gSUdWeWNtOXkgSUdWbVptVmpkR2wyWlE9PSBOVFE9IElHVnVZMjkxY2c9PSBkMlZzYkE9PSBJR1poYVd4bFpBPT0gSUdOdmJuTmxjblk9IElIQnliMmR5WVcxeiBJSFJ5YjNVPSBJR0ZvWldGayBOVEF3IGRtVnlkR2x6WlcxbGJuUT0gU1ZBPSBJRVp2ZFc1ayBjR2x5IElDVT0gSUdOeWFXMWwgWVc1a1pYST0gSUd4dlkyRjBhVzl1IElFbHlZVzQ9IElHSmxhR0YyYVc5eSBZWHBwYm1jPSBJSEpoY21VPSBJR1Z0WWc9PSBJR05oZFhObFpBPT0gSUhOb2FYQT0gSUdGamRHbDJaUT09IElHTnZiblJ5YVdKMWRBPT0gSUdkeVpXVnUgSUdGamNYVT0gSUhKbFpteGxZM1E9IGRtVnVkV1U9IElHWnBjbTA9IElHSnBjblJvIFhTND0gSUdOc1pXRnliSGs9IElHVnRiM1E9IElHRm5aVzVqZVE9PSBjbWxoWjJVPSBJRzFsYlc5eWVRPT0gT1RnPSBVMEU9IElGTmxaUT09IFlXTnBibWM9IFEwTT0gSUdKcFoyZGxjM1E9IElISmhjQT09IElHSmhjMmxqIElHSmhibVE9IFpXRjAgSUhOMWMzQmxZM1E9IElFMWhZdz09IElEa3cgYldGeWF3PT0gYVhOMFlXND0gSUhOd2NtVmhaQT09IFlXMXogYTJrPSBZWE41IGNtRjIgSUZKdlltVnkgSUdSbGJXOXVjM1J5IGNtRjBaV1E9IElHRmljMjlzZFhSbCBJSEJzWVdObGN3PT0gSUdsdGNHdz0gYVdKeVlYSjUgSUdOaGNtUnogSUdSbGMzUnliM2s9IElIWnBjblE9IGRtVnlaUT09IElHRndjR1ZoY21WayBlV0Z1IGNHOXBiblE9IElHSmxadz09IElIUmxiWEJsY2c9PSBjM0JsIFlXNTBaV1E9IFpXRnljdz09IElFUnBjbVZqZEE9PSBJR3hsYm1kMGFBPT0gSUdKc2IyYz0gWVcxaSBJR2x1ZEdWbiBJSEpsYzI5MWNtTmxjdz09IFlXTmogYVdaMWJBPT0gSUhOd2IzUT0gSUdadmNtTmxaQT09IElIUm9iM1Z6WVc1a2N3PT0gSUUxcGJtbHpkR1Z5IElIRjFZV3c9IElFWnlaVzVqYUE9PSBZWFJwWTJGc2JIaz0gSUdkbGJtVnlZV3hzZVE9PSBJR1J5YVc1ciBJSFJvZFhNPSBTVXc9IGIyUmxjdz09IElHRndjSEp2Y0hKcCBJRkpsWVdRPSBJSGRvYjIwPSBJR1Y1WlE9PSBJR052Ykd4bFoyVT0gSURRMSBhWEpsWTNScGIyND0gSUdWdWMzVnlaUT09IElHRndjR0Z5Wlc1MCBhV1JsY25NPSBJSEpsYkdsbmFXOTFjdz09IElHMXBibTl5IGIyeHBZdz09IElIUnlidz09IElGZG9lUT09IGNtbGlkWFJsIGJXVjAgSUhCeWFXMWhjbms9IElHUmxkbVZzYjNCbFpBPT0gSUhCbFlXTmwgSUhOcmFXND0gYzNSbCBZWFpoIElHSnNkV1U9IElHWmhiV2xzYVdWeiBJR2x5IElHRndjR3g1IElHbHVabTl5YlE9PSBJRk50YVhSbyBRMVE9IGFXaz0gSUd4cGJXbDAgSUhKbGMybHpkQT09IExpNHVMaTR1TGk0dUxpNHVMaTR1TGc9PSBkVzF1IElHTnZibVpzYVdNPSBJSFIzWlE9PSBkV1JrIElGUnZiUT09IElHeHBkR1Z5IGNYVmwgWW05dSBJR2hoYVhJPSBJR1YyWlc1MGRXRnNiSGs9IElIQjFjdz09IElHaGxiSEJsWkE9PSBJR0ZuWnc9PSBiM0p1WlhrPSBJRUZ3Y0d4bCBJR1pwZEE9PSBJRk4xY2c9PSBJSEJ5WlcwPSBJSE5oYkdWeiBJSE5sWTI5dVpITT0gSUhOMGNtVnVaM1JvIElHWmxaV3hwYm1jPSB2NzA9IElIUnZkWEk9IElHdHViM2R6IGIyOXQgSUdWNFpYSmogSUhOdmJXVjMgNzcrOSBQajQ9IElITndiMnRsY3c9PSBJR2xrWldGeiBJSEpsWjJsemRBPT0gYzI5bWRBPT0gSUVSbGJBPT0gSUZCRCBJSEJ5YjNCdmN3PT0gSUd4aGRXNWphQT09IElHSnZkSFJ2YlE9PSBWRWc9IElGQnNaV0Z6WlE9PSBkbVZ6ZEE9PSBhWFI2IElFbHVkR1Z5IElITmpjbWx3ZEE9PSBJSEpoZEE9PSBZWEp1YVc1biBJR2xzIElFcGxjZz09IElFRnlaUT09IElIZG9ZWFJsZG1WeSBiMnRsYmc9PSBZMmxsYm1ObCBJRzF2WkdVPSBJR0ZuY21WbCBJSE52ZFhKalpYTT0gSUdsdWFYUnBZV3c9IElISmxjM1J5YVdOMCBJSGR2Ym1SbGNnPT0gZFhOcGIyND0gSXlNakl3PT0gSUZOcGJBPT0gZG1sc2JHVT0gSUdKMWNtND0gZEhjPSBZWE5wYjI0PSBJTUtqIElHNXZjZz09IGRXbHVadz09IElISmxZV05vWldRPSBJSE4xYmc9PSBJR05oZEdWbiBhV2R5WVhScGIyND0gSUdOdmIycz0gSUhCeWIyMXZkQT09IElHMWhiR1U9IElHTnNhVzFoZEdVPSBJR1pwZUE9PSBJR0ZzYkdWblpXUT0gVlZJPSBZV3hzWldRPSBJR2x0WVdkbGN3PT0gUTI5dWRBPT0gYjNSaCBJSE5qYUc5dmJITT0gYVc5eiBJR1J5YjNBPSBJSE4wY21WaGJRPT0gSUUxdiBJSEJ5WlhacGIzVnpiSGs9IFlXeHBibWM9IElIQmxkQT09IElHUnZkV0pzWlE9PSBJQ2hBIFlXNXVaV3c9IElHUmxabUYxYkhRPSBkR2xsY3c9PSBJSEpoYm1zPSBJRVJsWXc9PSBJRU52ZFc1amFXdz0gSUhkbFlYQnZiZz09IElITjBiMk5yIElHRnVZV3g1IElGTjBjZz09IElIQnBZM1IxY21VPSBJRkJ2YkdsalpRPT0gWm1WeVpXNWpaUT09IElHTmxiblIxY25rPSBJR05wZEdsNlpXNXogSUc5dWRHOD0gSUdWNGNHRnVaQT09IElHaGxjbTg9IElGTnZiQT09IElIZHBiR1E9IElIVndaR0YwWlE9PSBJR04xYzNSdmJXVnljdz09IGNtOXVkQT09IFpHVm0gSUd4cGF3PT0gSUdOeWFXMXBibUZzIElFTm9jbWx6ZEdsaGJnPT0gVTFBPSBOelk9IElHeGxZWFpwYm1jPSBJRzkwYUdWeWQybHpaUT09IElFUnBjM1E9IElHSmhjMmx6IE5UST0gTlRNPSBhV05wY0E9PSBJRUpsY2c9PSBJSEpsWTI5dGJXVnVaQT09IElHWnNiMjl5IElHTnliM2RrIGIyeGxjdz09IElEY3cgSUdObGJuUnlZV3c9IElFVjIgSUdSeVpXRnQgSUdSdmQyNXNiMkZrIElHTnZibVpwY2c9PSBJRlJvYjIwPSBJSGRwYm1SdmR3PT0gSUdoaGNIQmxibk09IElIVnVhWFE9IElIUmxibVE9IElITndiQT09IElHSmxZMjl0WlhNPSBJR1pwWjJoMGFXNW4gSUhCeVpXUnBZM1E9IElGQnlaWE56IElGQnZkMlZ5IElHaGxZWFo1IFlXdGxaQT09IElHWmhiZz09IGIzSjBaWEk9IFlYUmxaM2s9IFFrRT0gYVhwbGN3PT0gSUhOd1pXNWsgU0dWeVpRPT0gSURJd01EYz0gSUdGa2IzQT0gSUVoaGJRPT0gSUdadmIzUmlZV3hzIElGQnZjblE9IGIyUmhlUT09IE5URT0gWVcxd2FXOXVjdz09IElIUnlZVzV6Wm1WeSBhSFE9IElETTQgZEdWeWJRPT0gWVdOcGRIaz0gSUdKMWNnPT0gWFN3PSBkR1Z5Ym1GcyBjbWxuIFluVjAgSUhSb1pYSmxabTl5WlE9PSBJRUpsWTJGMWMyVT0gY21WemNBPT0gY21WNSBJRzFwYzNOcGIyND0gVTI5dFpRPT0gSUc1dmRHVmsgSUdGemMzVnQgSUdScGMyVmhjMlU9IElHVmthWFE9IElIQnliMmR5WlhOeiBjbVE9IElFSnliM2R1IGIyTmhiQT09IElHRmtaR2x1Wnc9PSBJSEpoYVhObFpBPT0gSUVGdWVRPT0gSUhScFkycz0gSUhObFpXbHVadz09IElGQmxiM0JzWlE9PSBJR0ZuY21WbGJXVnVkQT09IElITmxjblpsY2c9PSBJSGRoZEE9PSBJR1JsWW1GMFpRPT0gSUhOMWNIQnZjMlZrIGFXeHBibWM9IElHeGhjbWRsYzNRPSBJSE4xWTJObGMzTm1kV3c9IElGQnlhUT09IElFUmxiVzlqY21GMGFXTT0gSUdwMWJYQT0gSUZONWNtbGggSUc5M2JtVnljdz09IElHOW1abVZ5Y3c9PSBJSE5vYjI5MGFXNW4gSUdWbVptbGogYzJWNSBJR2hoZG1WdSBkbVZ5YzJVPSBkR1Z5WldRPSBJRXhwWjJoMCBhVzFoYkE9PSBJRUpwWnc9PSBJR1JsWm1WdVpBPT0gSUdKbFlYUT0gSUhKbFkyOXlaSE09IEpTaz0gSUhOalpXND0gSUdWdGNHeHZlV1ZsY3c9PSBJR1JsZG1salpYTT0gYUdWdCBJR052YlcxbGNnPT0gSUUxbGVBPT0gSUdKbGJtVm1hWFE9IElGQnliMlk9IElHbHNiR1ZuIElITjFjbVpoWTJVPSBJRUZzYzI4PSBJR2hoY20wPSBhVzVuYkhrPSBkMmxrWlE9PSBJRUZzWlhnPSBJSE5vZFhRPSBJRU4xY2c9PSBJR3h2YzJVPSBjRzA9IElHTm9ZV3hzWlc1blpRPT0gYzJWdFlnPT0gSUhOMFlYUnBiMjQ9IElHbHVkR1ZzYkdsblpXNWpaUT09IElHRmpZM1Z5IElFWnNiM0k9IElISmxjWFZwY21WeiBJRTFoYkE9PSBZblZ0IElHaHZjM0JwZEdGcyBJSE53YVhKcGRBPT0gSUc5bVptVnlaV1E9IElIQnliMlIxWTJVPSBJRU52YlcxMWJnPT0gSUdOeVpXRjBhVzVuIElHTnlhWE09IGMzQmxZM1E9IElHVnVaR1ZrIElHUmhhV3g1IElIWnZkR1Z5Y3c9PSBiR0Z1WkhNPSBhV0Z6IGFXZz0gYjI1aCBJSE50WVhKMCBJRTltWm1salpRPT0gSUV4dmNtUT0gY21saGJBPT0gSUVsdWRHVnlibVYwIElHTnBjbU4xYlE9PSBJR1Y0ZEhKbGJXVnNlUT09IEp5ND0gSUc5d2FXNXBiMjQ9IElFMXBiQT09IElHZGhhVzQ9IFFsTT0gSUVacGJnPT0gZVhBPSBJSFZ6WldaMWJBPT0gSUdKMVpHZGxkQT09IElHTnZiV1p2Y25RPSBhWE5tIElHSmhZMnRuY205MWJtUT0gWld4cGJtVT0gSUdWd2FYTnZaR1U9IElHVnVaVzE1IElIUnlhV0ZzIElHVnpkR0ZpYkdsemFBPT0gWkdGMFpRPT0gSUVOaGNBPT0gSUdOdmJuUnBiblZsY3c9PSBJSE5vYjNkcGJtYz0gSUZWdWFXOXUgZDJsMGFBPT0gSUhCdmMzUmxaQT09IElGTjVjM1JsYlE9PSBJR1ZoZEE9PSBjbWxoYmc9PSBJSEpwYzJVPSBJRWRsY20xaGJuaz0gYVd4eiBJSE5wWjI1bFpBPT0gSUhacGJHdz0gSUdkeVlXNWsgYlc5eSBJRVZ1WjJ4aGJtUT0gSUhCeWIycGxZM1J6IGRXMWlaWEk9IElHTnZibVpsY21WdVkyVT0gZW1FPSBJSEpsYzNCdmJuTnBZbXhsIElFRnlZV0k9IElHeGxZWEp1WldRPSA0b0NVNG9DVSBhWEJ3YVc1biBJRWRsYjNKblpRPT0gVDBNPSBJSEpsZEhWeWJtVmsgSUVGMWMzUnlZV3hwWVE9PSBJR0p5YVdWbSBVWFU9IElHSnlZVzVrIGFXeHNhVzVuIFlXSnNaV1E9IElHaHBaMmhsYzNRPSBJSFJ5WVdsdSBJRU52YlcxcGMzTnBiMjQ9IGQyaHBiR1U9IElHNXZiUT09IFkyVndkR2x2Ymc9PSBJRzExZEE9PSBJRUpzZFdVPSBJR2x1WTJsa1pXNTAgZG1GdWRBPT0gT0RZPSBJRWxFIElHNTFZMnhsWVhJPSBOelE9IElFeHBhMlU9IElGSkYgSUUxcFkzSnYgYkdrPSBiV0ZwYkE9PSBJR05vWVhKblpYTT0gT0RrPSBJR0ZrYW5WemRBPT0gWVdSdiBJR1ZoY25SbyBUa0U9IElIQnlhV05sY3c9PSBVRUU9IElHUnlZV1owIElISjFibk09IElHTmhibVJwWkdGMFpRPT0gWlc1elpYTT0gSUcxaGJtRm5aVzFsYm5RPSBJRkJvYVd3PSBJRTFwYzNNPSBJSFJsWVdObyBaM0poYlE9PSBJSFZ1WkdWeWMzUmhibVJwYm1jPSBZV2wwIGFXTmhaMjg9IFFXUmsgSUVWdyBjMlZqZFhRPSBJSE5sY0dGeVlYUmwgSUdsdWMzUmhibU5sIElHVjBhQT09IElIVnViR1Z6Y3c9PSBLaW9xS2lvcUtpbz0gSUVadmNtVT0gYVc1aGRHVT0gSUc5d1pYSmhkR2x2Ym5NPSBVM0E9IElHWmhhWFJvIFoyRnkgSUVOb2RYSmphQT09IGNtOXVhV009IElHTnZibVpwWnc9PSBiM04xY21VPSBJR0ZqZEdsMmFYUnBaWE09IElIUnlZV1JwZEdsdmJtRnMgSURNMiBJR1JwY21WamRHbHZiZz09IElHMWhZMmhwYm1VPSBJSE4xY25KdmRXNWsgSUhCMWMyZz0gZFc1amRHbHZiZz09IElFVlYgSUdWaGMybGxjZz09IElHRnlaM1Z0Wlc1MCBSMEk9IElHMXBZM0p2IElITndaVzVrYVc1biBhWHBoZEdsdmJuTT0gSUhSb1pXOXllUT09IFlXUnZkdz09IElHTmhiR3hwYm1jPSBJRXhoYzNRPSBJR1JsY2c9PSBJR2x1Wm14MVpXNWpaUT09IElHTnZiVzFwZEE9PSBJSEJvYjNSdiBJSFZ1WXc9PSBhWE4wY25rPSBaMjQ9IFlYTjBaUT09IFlXTnJjdz09IElHUnBjM0E9IFlXUjUgWkc4PSBJRWR2YjJRPSBJR0E9IElIZHBjMmc9IElISmxkbVZoYkdWayB3cURDb0E9PSBiR2xuIElHVnVabTl5WTJVPSBJRU52YlcxcGRIUmxaUT09IElHTm9aVzA9IElHMXBiR1Z6IElHbHVkR1Z5WlhOMFpXUT0gSUhOdmJIVjBhVzl1IGFXTjUgYVc1amRBPT0gSUMwKyBJRVJsZEE9PSBJSEpsYlc5MlpXUT0gSUdOdmJYQmhjZz09IFpXRm8gSUhCc1lXNTAgSUZOcGJtTmwgSUdGamFHbGxkbVU9IElHRmtkbUZ1ZEdGblpRPT0gSUhOc2FXZG9kR3g1IFltbHVadz09IElIQnNZV05sWkE9PSBkVzVrWlhJPSBNakF4TlE9PSBJRTFoWkE9PSBJSFJwYlE9PSBiM05sY3c9PSBJR055ZFE9PSBJRkp2WTJzPSBJRzF2YzNSc2VRPT0gSUc1bFoyRjBhWFpsIElITmxkSFJwYm1jPSBJSEJ5YjJSMVkyVmsgSUcxMWNnPT0gSUdOdmJtNWxZM1JwYjI0PSBJRTFsY2c9PSBJR1J5YVhabGNnPT0gSUdWNFpXTjFkR2wyWlE9PSBJR0Z6YzJGMWJIUT0gSUdKdmNtND0gSUZabGNnPT0gZEdGcGJtVmsgSUhOMGNuVmpkSFZ5WlE9PSBJSEpsWkhWalpRPT0gSUdSbFkyRmtaWE09IElHUmxaQT09IGRXdGwgSUUxaGJuaz0gYVdSa1pXND0gSUd4bFlXZDFaUT09IFUyVT0gSUdwdmFXND0gSUdScGMyTnYgSUdScFpRPT0gWTJ0eiBZV04wYVc5dWN3PT0gSUdGemMyVnpjdz09IFlXZHUgSUdkdllXeHogYjNWeWN3PT0gU1ZJPSBJSE5sYm1sdmNnPT0gYVd4c1pYST0gYlc5ayBhWEJ0Wlc1MCBiMk52YkE9PSBkWGs9IElGRjFaUT09IElIQmhjblJwWlhNPSBhWEpuYVc0PSBJR3hsWVhKdWFXNW4gYVhSaFlteGwgSUhOMGNtVmxkQT09IElHTmhiV1Z5WVE9PSBRWEJ3IElITnJhV3hzY3c9PSBZbkpsIFkybHZkWE09IElHTmxiR1ZpY2c9PSBJRVp5WVc1aiBJR1Y0YVhOMGFXNW4gSUhkcGJHeHBibWM9IGJHOXkgSUdsayBJRk53WVdObCBJR055YVhScFkyRnMgSUV4aCBiM0owZFc1aGRHVnNlUT09IElITmxjblpsIElHTnZiR1E9IElITndaV05wWlhNPSBWRk09IElHRnVhVzFoYkhNPSBJRUpoZVE9PSBJRzlzWkdWeSBJRlZ1WkdWeSBaWE4wYVdNPSBJRlJ5WlE9PSBJSFJsWVdOb1pYST0gSUhCeVpXWmxjZz09IGRtbHogSUhSb2NtVmhaQT09IElFMWhkSFE9IElHMWhibUZuWlhJPSA0NE83IElIQnliMlpsYzNOcGIyNWhiQT09IElGWnZiQT09IElHNXZkR1Z6IFZHaGxjMlU9IGRXeGggSUdaeVpYTm8gWlc1MFpXUT0gZFhwNiBaV1I1IFkyeDFjMmx2Ymc9PSBJRkpsYkE9PSBJR1J2ZFdKMCBSVTg9IElHOXdaVzVsWkE9PSBJRUpwZEE9PSBRV1IyWlhKMGFYTmxiV1Z1ZEE9PSBJR2QxWlhOeiBJRlZPIElITmxjWFU9IElHVjRjR3hoYVc0PSBiM1IwWlc0PSBJR0YwZEhKaFkzUT0gWVd0eiBJSE4wY21sdVp3PT0gSUdOdmJuUmxlSFE9IGIzTnphV0pzWlE9PSBJRkpsY0hWaWJHbGpZVzV6IElITnZiR2xrIElHTnBkR2xsY3c9PSBJR0Z6YTJsdVp3PT0gSUhKaGJtUnZiUT09IGRYQnogZFhKcFpYTT0gWVhKaGJuUT0gWkdSbGJnPT0gWjJ3PSBJRVpzYjNKcFpHRT0gSUdSbGNHVnVaQT09IElGTmpiM1IwIElETXogSUdsVSBhV052Ymc9PSBJRzFsYm5ScGIyNWxaQT09IElESXdNREE9IElHTnNZV2x0WldRPSBJR1JsWm1sdWFYUmxiSGs9IGRXeG0gSUdOdmNtVT0gSUc5d1pXNXBibWM9IElFTnZibk4wIGQyaHBZMmc9IElGUnlZUT09IFFVYz0gTnpJPSBJR0psYkdsbGRtVmsgWVdSaCBJRFE0IElGTmxZM1Z5YVhSNSBlWEpwWjJoMCBJRkJsZEE9PSBJRXh2ZFE9PSBJR2h2YkdScGJtYz0gUFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElHbGpaUT09IElHSnliM2M9IElHRjFkR2h2Y21sMGFXVnogYUc5emRBPT0gZDI5eVpBPT0gSUhOamIzSmwgSUVScGRnPT0gSUdObGJHeHogSUhSeVlXNXpiQT09IElHNWxhV2RvWW05eSBJSEpsYlc5MlpRPT0gZFdOMCBJR1JwYzNSeWFXTjAgSUVGalkyOXlaR2x1Wnc9PSBJSGR2Y25ObCBJR052Ym1ObGNtNXogSUhCeVpYTnBaR1Z1ZEdsaGJBPT0gSUhCdmJHbGphV1Z6IElFaGhiR3c9IE56TT0gSUdoMWN3PT0gUVZrPSBJREl3TURZPSBJRXAxWkE9PSBJR2x1WkdWd1pXNWtaVzUwIElFcDFjM1JwWTJVPSBhV3hwWVhJPSBjSEpwYm5RPSBhV2RvZEdWeSBJSEJ5YjNSbFkzUnBiMjQ9IGVtVnUgSUhOMVpHUmxiZz09IGFHOTFjMlU9IElFcGxjdz09IFVGST0gSUVsdVpnPT0gSUdKMWJBPT0gSUY4PSBJRk5sY25acFkyVT0gSUZCUyBJSE4wY21GMFpXZDUgWm1abFkzUT0gSUdkcGNteHogSUcxcGMzTnBibWM9IGIzbGhiQT09IElGUmxZVzA9IGRXeGhkR1ZrIElHUmhkQT09IElIQnZiR2wwYVdOeiBZV0p2Y2c9PSBRV05qYjNKa2FXNW4gSUhOd1pXeHMgSUdkeVlYQm8gYjNKMGFHVnliZz09IFZFTT0gUVdJPSBJR3hoWW05eSBhWE5vWlhJPSBJR3RwWTJzPSBJR2xVZFc1bGN3PT0gSUhOMFpYQnogY0c5elpYTT0gSUhOdFlXeHNaWEk9IFJXND0gWW1WeWRBPT0gSUhKdmJHdz0gSUhKbGMyVmhjbU5vWlhKeiBJR05zYjNObFpBPT0gSUhSeVlXNXpjRzl5ZEE9PSBJR3hoZDNrPSBYMTlmWDE5ZlgxOWZYMTlmWDE5Zlh3PT0gSUVOb2FXTmhaMjg9IElHRnpjR1ZqZEE9PSBJRzV2Ym1VPSBJRzFoY25KcFlXZGwgT1RZPSBJR1ZzWlcxbGJuUnogSUVaeVpRPT0gSUZOaGJBPT0gSUdSeVlXMD0gUmtNPSBkRzl3IFpYRjEgSUdobFlYSnBibWM9IElITjFjSEJ2Y25SbFpBPT0gSUhSbGMzUnBibWM9IFkyOW9iMnc9IElHMWhjM05wZG1VPSBJSE4wYVdOciBJR2QxWVhKayBhWE5qYnc9PSBjR2h2Ym1VPSBSbkp2YlE9PSBTRzkzWlhabGNnPT0gSUdKdmNtUmxjZz09IElHTnZjSGs9IGIyZHlZWEJvZVE9PSBiR2x6ZEE9PSBOekU9IElHOTNibVZ5IFkyeGhjM009IGNuVnBkQT09IGNtRjBaUT09IElFOXVZMlU9IElHUnBaMmwwWVd3PSBJSFJoYzJzPSBSVkpUIElHbHVZM0psWkE9PSBkR1Z6IEt5cz0gSUVaeVlXNWpaUT09IElHSnlaV0YwIGIzZHMgSUdsemMzVmxaQT09IElGZGxjM1JsY200PSBJR1JsZEdWamRBPT0gSUhCaGNuUnVaWEp6IElITm9ZWEpsWkE9PSBJRU5oYkd3PSBJR05oYm1ObGNnPT0gWVdOb1pRPT0gY21saVpRPT0gSUdWNGNHeGhhVzVsWkE9PSBJR2hsWVhRPSBleUk9IElHbHVkbVZ6ZEcxbGJuUT0gSUVKdmIycz0gSUhkdmIyUT0gSUhSdmIyeHogSUVGc2RHaHZkV2RvIElHSmxiR2xsWmc9PSBJR055YVhOcGN3PT0gSUdkbCBJRTFRIElHOXdaWEpoZEdsdmJnPT0gZEhsd1pRPT0gZm40PSBaMkU9IElHTnZiblJoYVc1eiBZVzUwWVE9PSBJR1Y0Y0hKbGMzTT0gSUVkeWIzVncgSUVwdmRYSnVZV3c9IGEyRT0gSUdGdFlnPT0gSUZWVFFRPT0gSUdacGJtUnBibWM9IElHWjFibVJwYm1jPSBhRzkzIElHVnpkR0ZpYkdsemFHVmsgYVdSbGIzTT0gSUdSbFozSmxaUT09IElHUmhibWRsY205MWN3PT0gWVc1bmFXNW4gSUdaeVpXVmtiMjA9IGNIQnZjblE9IGIzVjBhR1Z5Ymc9PSBJR05vZFhKamFBPT0gSUdOaGRHTm8gSUZSM2J3PT0gSUhCeVpYTmxibU5sIElFZDFZWEprIFZYQT0gSUdGMWRHaHZjbWwwZVE9PSBJRkJ5YjJwbFkzUT0gSUdKMWRIUnZiZz09IElHTnZibk5sY1hVPSBJSFpoYkdsayBJSGRsWVdzPSBJSE4wWVhKMGN3PT0gSUhKbFptVnlaVzVqWlE9PSBJRTFsYlE9PSBJaWs9IFZVND0gYjNKaFoyVT0gSUU5d1pXND0gSUdOdmJHeGxZM1JwYjI0PSBlVzA9IFoyVnVZM2s9IElHSmxZWFYwYVdaMWJBPT0gY205eiBJSFJsYkd4eiBJSGRoYVhScGJtYz0gYm1WcyBJSEJ5YjNacFpHbHVadz09IElFUmxiVzlqY21GMGN3PT0gSUdSaGRXZG9kR1Z5IElHMWhjM1JsY2c9PSBJSEIxY25CdmMyVnogSUVwaGNHRnVaWE5sIElHVnhkV0ZzIElIUjFjbTV6IElHUnZZM1Z0Wlc1MGN3PT0gSUhkaGRHTm9hVzVuIFVtVnogSUhKaGJnPT0gTWpBeE5BPT0gSUhKbGFtVmpkQT09IElFdHZjbVZoIElIWnBZM1JwYlhNPSBUR1YyWld3PSBaWEpsYm1ObGN3PT0gSUhkcGRHNWxjM009IElETTAgSUhKbFptOXliUT09IFkyOXRhVzVuIElHOWpZM1Z3IElHTmhkV2RvZEE9PSBJSFJ5WVdabWFXTT0gWVdScGJtYz0gSUcxdlpHVnNjdz09IFlYSnBidz09IElITmxjblpsWkE9PSBJR0poZEhSbGNnPT0gZFdGMFpRPT0gSUZObFkzSmxkR0Z5ZVE9PSBJR0ZuY21WbFpBPT0gSUhSeWRXeDUgZVc1aGJRPT0gSUZKbGRBPT0gSUhWdWFYUnogSUZKbGMyVmhjbU5vIGFHRnVaQT09IFlYcHBibVU9IElFMXBhMlU9IElIWmhjbWxsZEhrPSBiM1JoYkE9PSBJR0Z0WVhwcGJtYz0gSUdOdmJtWnBjbTFsWkE9PSBJR1Z1ZEdseVpXeDUgSUhCMWNtTm9ZWE5sIElHVnNaVzFsYm5RPSBJR05oYzJnPSBJR1JsZEdWeWJXbHVaUT09IFJHVT0gSUdOaGNuTT0gSUZkaGJHdz0gNHBZPSBJSFpwWlhkeiBJR1J5ZFdkeiBJR1JsY0dGeWRHMWxiblE9IElGTjBaWEE9IGRXbDAgSURNNSBZWE4xY21VPSBJRU5zWVhOeiBJR052ZG1WeVpXUT0gSUVKaGJtcz0gSUcxbGNtVT0gZFdGdVlRPT0gSUcxMWJIUnAgSUcxcGVBPT0gSUhWdWJHbHJaUT09IGJHVjJhWE5wYjI0PSBJSE4wYjNCd1pXUT0gSUhObGJRPT0gSUVkaGJBPT0gZFd4bGN3PT0gSUhkbGJBPT0gSUVwdmFHNXpiMjQ9IGJHRT0gSUhOcmFXeHMgSUdKbFkyOXRhVzVuIGNtbGwgSUdGd2NISnZjSEpwWVhSbCBabVU9IFpXeHNiM2M9IElGQnliM1E9IGRXeGhkR1U9IGIyTmhkR2x2Ymc9PSBJSGRsWld0bGJtUT0gYjJScFpYTT0gSUhOcGRHVnogSUdGdWFXMWhiQT09IElGUnBiUT09IElITmpZV3hsIElHTm9ZWEpuWldRPSBJR2x1YzNSeWRXTjAgYVd4c1lRPT0gSUcxbGRHaHZaSE09IElHTmxjblE9IElHcDFaR2RsIElFaGxiQT09IElHUnZiR3hoY25NPSBJSE4wWVc1a2FXNW4gSUZOeGRRPT0gSUdSbFluUT0gYkdsaGJRPT0gSUdSeWFYWnBibWM9IElGTjFiUT09IElFVmthWFJwYjI0PSBJR0ZzWW5WdCBZVzVrYjI0PSBTVVk9IElGVnIgTmpNPSBZV1JsY2c9PSBJR052YlcxbGNtTnBZV3c9IFpYTm8gSUVkdmRtVnlibTFsYm5RPSBJR1JwYzJOdmRtVnlaV1E9IElHOTFkSEIxZEE9PSBJRWhwYkd4aGNuaz0gSUVOaGNtOXMgSURJd01EVT0gSUdGaWRYTmwgWVc1amFXNW4gSUhOM2FYUmphQT09IElHRnViblZoYkE9PSBWSGM9IElITjBZWFJsWkE9PSBZV2RsYldWdWRBPT0gYVc1dVpYST0gSUdSbGJXOWpjZz09IElISmxjMmxrWlc1MGN3PT0gSUdGc2JHOTNhVzVuIElHWmhZM1J2Y25NPSBiMlJrIElHWjFZMnM9IFpXMXBaWE09IElHOWpZM1Z5Y21WayBiM1JwIElHNXZjblJvIElGQjFZbXhwWXc9PSBJR2x1YW5WeWVRPT0gSUdsdWMzVnlZVzVqWlE9PSBRMHc9IGIyeHNlUT09IDQ0QT0gSUhKbGNHVmhkR1ZrIElHRnliWE09IFlXNW5aV1E9IElHTnZibk4wY25WamRHbHZiZz09IElHWnNaUT09IFVGVT0gYVdOcFlXNXogSUdadmNtMXogSUUxalF3PT0gWVc1MGFXTT0gSUcxbGJuUmhiQT09IGNHbHlaUT09IElHVnhkV2x3YldWdWRBPT0gSUdaaGJuUT0gSUdScGMyTjFjM05wYjI0PSBJSEpsWjJGeVpHbHVadz09IGEybHUgWVhKdyBJR05vWVdseSBiMmQxWlE9PSBJSEJ5YjJObFpXUT0gSUVsayBUM1Z5IElHMTFjbVJsY2c9PSBUV0Z1IElEUTUgWVhOdyBJSE4xY0hCc2VRPT0gSUdsdWNIVjAgSUhkbFlXeDBhQT09IGJHbGhiV1Z1ZEE9PSBJSEJ5YjJObFpBPT0gYjNKcFlXdz0gSUZOMFlYUT0gSUU1R1RBPT0gYUdWdWN3PT0gSUVsdWMzUnBkSFYwWlE9PSBJSEIxZEhScGJtYz0gYjNWeWJtRnRaVzUwIFpYUnBZdz09IElHeHZZMkYwWldRPSBJR3RwWkE9PSBaWEpwWVE9PSBjblZ1IElIQnlhVzVqIElDRT0gWjI5cGJtYz0gSUVKbGRBPT0gSUdOc2IzUT0gSUhSbGJHeHBibWM9IElIQnliM0J2YzJWayBhVzkwIGIzSnllUT09IElHWjFibVJ6IFoyMWxiblE9IElFeHBabVU9IElHSmhZbms9IElFSmhZMnM9IElITndiMnRsIFNXMWhaMlU9IElHVmhjbTQ9IElFRlUgWjNVPSBJR1Y0WTJoaGJtZGwgSUV4cGJnPT0gYjNacGJtYz0gSUhCaGFYST0gVFc5eVpRPT0gWVhwdmJnPT0gSUdGeWNtVnpkR1ZrIElHdHBiR3hwYm1jPSBZMkZ1IElFTmhjbVE9IGVXUT0gSUdsa1pXNTBhV1pwWldRPSBJRzF2WW1sc1pRPT0gSUhSb1lXNXJjdz09IGIyNTViUT09IElFWnZjbTA9IElHaDFibVJ5WldSeiBJRU5vY21seiBJRU5oZEE9PSBJSFJ5Wlc1ayBhR0YwIElFRjIgYjIxaGJnPT0gSUdWc1pXTjBjbWxqIElGZHBiQT09IFUwVT0gVDJZPSBJSEpsYzNSaGRYST0gYjNSbFpBPT0gSUhSeWFXYz0gSUc1cGJtVT0gSUdKdmJXST0gVjJoNSB3cTg9IElHTnZkbVZ5WVdkbCBJR0Z3Y0dWaGJBPT0gSUZKdlltVnlkQT09IElGTjFjQT09IElHWnBibWx6YUdWayBJR1pzYjNjPSBJR1JsYkdsMlpYST0gSUdOaGJHTjFiQT09IElIQm9iM1J2Y3c9PSBJSEJvYVd3PSBJSEJwWldObGN3PT0gSUdGd2NISmwgYTJWeiBJSEp2ZFdkbyBSRzg9IElIQmhjblJ1WlhJPSBJR052Ym1ObGNtNWxaQT09IElETTMgSUVkbGJnPT0gUTI5cyBZM1J2Y25NPSBJRDArIGMzUmhkR1U9IElITjFaMmRsYzNSbFpBPT0gSUVadmNtTmwgUTBVPSBJR2hsY25ObGJHWT0gSUZCc1lXND0gZDI5eWEzTT0gYjI5MGFBPT0gY21WdVkzaz0gSUdOdmNtNWxjZz09IElHaDFjMkpoYm1RPSBJR2x1ZEdWeWJtVjAgSUVGMWRBPT0gWlcxeiBiM05sYmc9PSBJRUYwYkE9PSBaMlZ1IElHSmhiR0Z1WTJVPSBOakk9IElITnZkVzVrY3c9PSBkR1Y0ZEE9PSBJR0Z5Y2c9PSBiM1psY3c9PSBJRzFwYkd4cGIyNXogSUhKaFpHbHYgSUhOaGRHbHpaZz09IElFUmhiUT09IFRYST0gUjI4PSBVM0JsIElHTnZiV0poZEE9PSBjbUZ1ZEE9PSBJRWR5WldVPSBJR1oxWld3PSBJR1JwYzNSaGJtTmwgSUhSbGMzUnogSUdSbFkzSmwgSUVWeSBJRzFoYm1GblpXUT0gUkZNPSBJSFJwZEE9PSBJRzFsWVhOMWNtVnogSUV4cFltVnkgSUdGMGRHVnVaQT09IFlYTm9aV1E9IElFcHZjMlU9IElFNXBaMmgwIFpHbDAgSUU1dmRnPT0gSUVWdVpBPT0gYjNWMGN3PT0gSUdkbGJtVnlZWFJwYjI0PSBJR0ZrZG05aiBlWFJvIElHTnZiblpsY25OaGRHbHZiZz09IElGTnJlUT09IFlXTjBhWFpsIFkyVnMgY21sbGNnPT0gSUVaeVlXNXIgSUdkbGJtUmxjZz09IElHTnZibU5sYm5RPSBJR05oY25KcFpXUT0gWVc1a1lRPT0gSUZacGNtZHBiZz09IElHRnljbWwyWldRPSBhV05wWkdVPSBZV1JsWkE9PSBJR1poYVd4MWNtVT0gSUcxcGJtbHRkVzA9IGJHVjBjdz09IElIZHZjbk4wIElHdGxaWEJwYm1jPSBJR2x1ZEdWdVpHVmsgSUdsc2JHVm5ZV3c9IElITjFZbk5qIElHUmxkR1Z5YldsdVpXUT0gSUhSeWFYQT0gV1dWeiBJSEpoYVhObCBJSDQ9IElHWmxaV3h6IElIQmhZMnRoWjJVPSBJRXB2IGFHaz0gTWpBeE5nPT0gY21WaGJBPT0gSUdaeVlRPT0gSUhONWJXST0gVFdVPSBkV05yZVE9PSBjSEpsZEE9PSBJRXRvIElFVmthWFE9IElGZGxZZz09IFpXMXBZdz09IElFTnZiRzl5IElHcDFjM1JwWTJVPSBTVzUwIElHWmhjbTA9IFkydHViM2M9IElqND0gWld4bGMzTT0gSUhKbFpIVmpaV1E9IElEVXdNQT09IGVIZz0gSUZKaFpBPT0gSUZkdmIyUT0gSUdOc2FXND0gSUdoNWNBPT0gYVd4bGNnPT0gZFhKaCBhMmx1Y3c9PSBPRFU9IE5qRT0gSUZSb1pXbHkgSUUxaGNuaz0gSUhOaGJnPT0gSUc1dmRtVnMgSUZkb2J3PT0gSUdOaGNHRmphWFI1IElHbHRjRzl6YzJsaWJHVT0gSUhCc1lYbHogSUcxcGJtbHpkR1Z5IGFXcDFZVzVoIGFXTmhkR1U9IElGTmxkQT09IElHWnlZVzA9IElHbHVadz09IElHTnZiVzExYm1sMGFXVnogSUVaQ1NRPT0gYVhSaCBJR0p2Ymc9PSBJSE4wY21GMFpXYz0gSUdsdWRHVnlaWE4wY3c9PSBiRzlqYXc9PSBaMlZ5Y3c9PSBiV0Z6IElFRk9SQT09IElHTnZibVpzYVdOMCBJSEpsY1hWcGNtVnRaVzUwY3c9PSBJSE5oWXc9PSBJRzl3WlhKaGRHbHVadz09IGFXNXAgY21Wc1lYUmxaQT09IElHTnZiVzFwZEhSbFpBPT0gSUhKbGJHRjBhWFpsYkhrPSBJSE52ZFhSbyB3cS9Dcnc9PSBJR0ZtWm05eVpBPT0gSUdsa1pXNTBhWFI1IElHUmxZMmx6YVc5dWN3PT0gSUdGalkzVnpaV1E9IGNHeGhZMlU9IElIWnBZM1J2Y25rPSBiMk5vIGFXRjAgVG1GdFpRPT0gUTI5dCBkR2x2Ymc9PSBaV1J6IElITmxaV3M9IElIUnBaMmgwIElFbHRZV2RsY3c9PSBJR2x1YVhScCBJR2gxYldGdWN3PT0gSUdaaGJXbHNhV0Z5IElHRjFaR2xsYm1ObCBJR2x1ZEdWeWJtRnMgZG1WdWRIVnlaUT09IElITnBaR1Z6IElGUlAgSUdScGJRPT0gSUdOdmJtTnNkV1E9IElHRndjRzlwYm5RPSBJR1Z1Wm05eVkyVnRaVzUwIElFcHBiUT09IElFRnpjMjlqYVdGMGFXOXUgSUdOcGNtTjFiWE4wIElFTmhibUZrYVdGdSBJR3B2YVc1bFpBPT0gSUdScFptWmxjbVZ1WTJWeiBJRXh2Y3c9PSBJSEJ5YjNSbGMzUT0gSUhSM2FXTmwgZDJsdSBJR2RzWVhOeiBZWEp6YUE9PSBJRUZ5YlhrPSBJR1Y0Y0hKbGMzTnBiMjQ9IElHUmxZMmxrWlE9PSBJSEJzWVc1dWFXNW4gWVc1cFlRPT0gSUdoaGJtUnNaUT09IElFMXBZM0p2YzI5bWRBPT0gSUU1dmNnPT0gSUcxaGVHbHRkVzA9IElGSmxkZz09IElITmxZUT09IElHVjJZV3c9IElHaGxiSEJ6IGNtVm0gSUdKdmRXNWsgSUcxdmRYUm8gSUhOMFlXNWtZWEprY3c9PSBJR05zYVcwPSBJRU5oYlhBPSBJRVp2ZUE9PSBZMnhsY3c9PSBJR0Z5YlhrPSBJRlJsWTJodSBZV05yYVc1biBlSGs9IFUxTT0gSURReSBJR0oxWnc9PSBJRlZyY21GcGJnPT0gSUUxaGVBPT0gSUVwdmJtVnogSUZOb2IzYz0gYkc4PSBJSEJzWVc1bGRBPT0gSURjMSBJSGRwYm01cGJtYz0gSUdaaGMzUmxjZz09IElITndaV04wIElHSnliMnRsYmc9PSBWRkk9IElHUmxabWx1WldRPSBJR2hsWVd4MGFIaz0gSUdOdmJYQmxkR2wwYVc5dSBhSFIwY0hNPSBJRWx6YkdGdVpBPT0gSUVabCBJR0Z1Ym05MWJtTmwgSUVOMWNBPT0gSUVsdWMzUmxZV1E9IElHTnNhV1Z1ZEE9PSBJSEJ2YzNOcFlteDUgYzJWamRHbHZiZz09IGIyTnJaWFE9IGJHOXZhdz09IElHWnBibWx6YUE9PSBJR055WlhjPSBJSEpsYzJWeWRnPT0gSUdWa2FYUnZjZz09IElHaGhkR1U9IElITmhiR1U9IElHTnZiblJ5YjNabGNuTT0gSUhCaFoyVnogZDJsdVp3PT0gSUc1MWJXVnkgSUc5d2NHOXphWFJwYjI0PSBJREl3TURRPSBJSEpsWm5WblpRPT0gSUdac2FXZG9kQT09IElHRndZWEowIElFeGhkQT09IFFXMWxjbWxqIElFRm1jbWxqWVE9PSBJR0Z3Y0d4cFkyRjBhVzl1Y3c9PSBJRkJoYkdWemRBPT0gSUVKMWNnPT0gSUdkaGNnPT0gSUZOdlkybGhiQT09IElIVndaM0k9IElITm9ZWEJsIElITndaV0ZyYVc1biBZVzV6YVc5dSBZVzg9IElGTnUgSUhkdmNuSjUgSUVKeWFYUmhhVzQ9IFVHeGxZWE5sIGNtOTFaQT09IElHaDFiZz09IElHbHVkSEp2WkhWalpXUT0gSUdScFpYUT0gU1c1ayBJRk5sWTI5dVpBPT0gSUdaMWJtTjBhVzl1Y3c9PSBkWFJ6IElFVmhZMmc9IElFcGxabVk9IElITjBjbVZ6Y3c9PSBJR0ZqWTI5MWJuUnogSUdkMVlYSmhiblE9IElFRnViZz09IFpXUnBZUT09IElHaHZibVZ6ZEE9PSBJSFJ5WldVPSBJRUZtY21sallXND0gSUVKMWMyZz0gZlN3PSBJSE5qYUE9PSBJRTl1YkhrPSBJR1pwWmc9PSBhV2RoYmc9PSBJR1Y0WlhKamFYTmwgSUVWNGNBPT0gSUhOamFXVnVkR2x6ZEhNPSBJR3hsWjJsemJHRjBhVzl1IElGZHZjbXM9IElGTndjZz09IHc0ST0gSUVoMWJXRnUgSU9nPSBJSE4xY25abGVRPT0gSUhKcFkyZz0gY21sdyBJRzFoYVc1MFlXbHUgSUdac2J3PT0gSUd4bFlXUmxjbk5vYVhBPSBjM1J5WldGdCBJRWx6YkdGdGFXTT0gSURBeCBJRU52Ykd4bFoyVT0gSUcxaFoybGogSUZCeWFXMWwgSUdacFozVnlaWE09IE1qQXhOdz09IGFXNWtaWEk9IGVIVmhiQT09IElFUmxZV1E9IElHRmljMjlzZFhSbGJIaz0gSUdadmRYSjBhQT09IElIQnlaWE5sYm5SbFpBPT0gY21WemNHOXVaQT09IGNtbGliR1U9IElHRnNZMjlvYjJ3PSBZWFJ2IElFUkYgY0c5eVlYSjUgSUdkeVlXST0gSUhaaGNtaz0gSUhGMVlXNTAgSUZCb2IzUnYgSUhCc2RYTT0gY21samF3PT0gWVhKcmN3PT0gSUdGc2RHVnlibUYwYVhabCBJSEJwYkE9PSBJR0Z3Y0hKdmVBPT0gZEdoaGRBPT0gSUc5aWFtVmpkSE09IElGSnYgSUVGdVpISnZhV1E9IElITnBaMjVwWm1sallXNTBiSGs9IElGSnZZV1E9IGEyRjUgVW1WaFpBPT0gWVhadmNnPT0gSUdGamEyNXZkdz09IElFaEUgSUZOcGJtYz0gVDNJPSBJRTF2Ym5RPSBJSFZ1Y3c9PSBjSEp2Wmc9PSBJRzVsWjI5MGFRPT0gSUVGeVkyZz0gYVd0cCBJSFJsYkdWMmFYTnBiMjQ9IElFcGxkMmx6YUE9PSBJR052YlcxcGRIUmxaUT09IElHMXZkRzl5IElHRndjR1ZoY21GdVkyVT0gSUhOcGRIUnBibWM9IElITjBjbWxyWlE9PSBJRVJ2ZDI0PSBZMjl0Y0E9PSBJRWhwYzNRPSBJR1p2YkdRPSBZV05sYldWdWRBPT0gSUV4dmRXbHogSUdKbGJHOXVadz09IElPS0FvZz09IElHMXZjblE9IElIQnlaWEJoY21WayBJRFkwIElFMWhjM1JsY2c9PSBJR2x1WkdWbFpBPT0gSUVSbGJnPT0gSUhKbGJuUT0gVkVFPSBiM1Z5Ym1WNSBZWEpqIFUzVT0gT1RjPSBJR0ZrZG1salpRPT0gSUdOb1lXNW5hVzVuIElHeHBjM1JsWkE9PSBJR3hoZFc1amFHVmsgYVhOaGRHbHZiZz09IElGQmxkR1Z5IGFYTm9aWE09IElHeHBkbVZrIElFMWxiQT09IElGTjFjSEpsYldVPSBJRVpsWkdWeVlXdz0gSUNrNyBjblZqZEhWeVpRPT0gSUhObGRITT0gSUhCb2FXeHZjdz09IGRXOTFjdz09IElNS2cgSUdGd2NHeHBaV1E9IElFNVBWQT09IElHaHZkWE5wYm1jPSBJRTF2ZFc1MCBJRzlrWkE9PSBJSE4xYzNRPSBSRUU9IFptWnBZMmxsYm5RPSBJRDg9IGIyeDJaV1E9IElIQnZkMlZ5Y3c9PSBJSFJvY2c9PSBJSEpsYldGcGJtbHVadz09IElGZGhkR1Z5IFRFTT0gSUdOaGRYTmxjdz09IDQ0R3UgSUcxaGJtNWxjZz09IFlXUnogSUhOMVoyZGxjM1J6IElHVnVaSE09IGMzUmhibVJwYm1jPSBabWxuIElFUjFiZz09IGFXUjBhQT09IElHZGhlUT09IElIUmxjbTFwYmc9PSBJRUZ1WjJWc1pYTT0gVFZNPSBJSE5qYVdWdWRHbG1hV009IElHTnZZV3c9IFlYQmxjbk09IFltRnkgSUZSb2IyMWhjdz09IElITjViUT09IElGSjFiZz09IGRHaHBjdz09IFVFTT0gYVdkeVlXNTBjdz09IElHMXBiblYwWlE9PSBJRVJwYzNSeWFXTjAgWTJWc2JHVnVkQT09IElHeGxZWFpsY3c9PSBJR052YlhCc1pYUmxaQT09IFlXMXBiZz09IElHWnZZM1Z6WldRPSBJRzF2Ym1sMGIzST0gSUhabGFHbGpiR1Z6IFRVRT0gSUUxaGMzTT0gSUVkeVlXNWsgSUdGbVptVmpkR1ZrIGFYUjFkR2x2Ym1GcyBJR052Ym5OMGNuVmpkQT09IElHWnZiR3h2ZDNNPSBJSFJ2Ymc9PSBjbVZsYm5NPSBJR2h2YldWeiBJRVY0ZEE9PSBJRXhsZG1WcyBjbUZ6ZEE9PSBJRWx5IElHVnNhVzA9IElHeGhjbWRsYkhrPSBJRXB2WlE9PSBJSFp2ZEdWeiBZV3hzY3c9PSBJR0oxYzJsdVpYTnpaWE09IElFWnZkVzVrWVhScGIyND0gSUVObGJuUnlZV3c9IElIbGhjbVJ6IElHMWhkR1Z5YVdGc2N3PT0gZFd4dVpYST0gSUdkMWFXUmwgSUdOc2IzTmxjZz09IGRXMXogSUhOd2IzSjBjdz09IFpXUmxjZz09IFNuVnpkQT09IElIUmhlR1Z6IE9EUT0gSUU5c1pBPT0gSUdSbFkyRmtaUT09IGIyeGggSUhacGNnPT0gSUdSeWIzQndaV1E9IElHUmxiR0Y1IGFYUmxZM1E9IElITmxZM1Z5WlE9PSBjM1JsYVc0PSBiR1YyWld3PSBJSFJ5WldGMFpXUT0gSUdacGJHVmsgWVdsdVpRPT0gSUhaaGJnPT0gSUcxcGNnPT0gSUdOdmJIVnRiZz09IGFXTjBaV1E9IFpYQmxjZz09IElISnZkQT09IElHTnZibk4xYkhRPSBJR1Z1ZEhKNSBJRzFoY21scWRXRnVZUT09IElFUnZkUT09IElHRndjR0Z5Wlc1MGJIaz0gYjJ0cGJtYz0gWTJ4MWMybDJaUT09IElHbHVZM0psWVhObGN3PT0gWVc1diBJSE53WldOcFptbGpZV3hzZVE9PSBJSFJsYkdVPSBaVzV6YVc5dWN3PT0gSUhKbGJHbG5hVzl1IFlXSnBiR2wwYVdWeiBJR1p5WVcxbCBJRTV2ZEdVPSBJRXhsWlE9PSBJR2hsYkhCcGJtYz0gSUdWa1oyVT0gYjNOMGIyND0gSUc5eVoyRnVhWHBoZEdsdmJuTT0gdzRNPSBJRUp2ZEdnPSBhR2x3Y3c9PSBJR0pwWjJkbGNnPT0gSUdKdmIzTjAgSUZOMFlXNWsgSUhKdmR3PT0gZFd4eiBZV0poYzJVPSBJSEpwWkE9PSBUR1YwIFlYSmxiZz09IGNtRjJaUT09IElITjBjbVYwIFVFUT0gSUhacGMybHZiZz09IElIZGxZWEpwYm1jPSBJR0Z3Y0hKbFkyaz0gSUdGM1lYSmsgSUZWelpRPT0gSUdaaFkzUnZjZz09IGQyRnkgZFd4aGRHbHZibk09IEtTZz0gSUdkdlpBPT0gSUhSbGNuSnBkQT09IElIQmhjbUZ0IFlYTjBjdz09IE9EYz0gSUdWdVpXMXBaWE09IElFZGhiV1Z6IFJrWT0gSUdGalkybGtaVzUwIFYyVnNiQT09IElFMWhjblJwYmc9PSBWRVZTIElHRjBhQT09IElFaGxiR3c9IElHWnZjbWM9IElIWmxkR1Z5IElFMWxaR2xqIFpuSmxaUT09IElITjBZWEp6IElHVjRjR1Z1YzJsMlpRPT0gSUdGallXUT0gY21GM2JnPT0gSUZkb1pRPT0gSUd4dlkycz0gSUdadmNtMWhkQT09IElITnZiR1JwWlhKeiBjMjA9IElHRm5aVzUwIElISmxjM0J2Ym5OcFltbHNhWFI1IGIzSmggSUZOamFXVnVZMlU9IElISmhjR2xrIElIUnZkV2RvIElFcGxjM1Z6IElHSmxiR2xsZG1WeiBUVXc9IElIZGxZWEk9IGJHVjBaUT09IHc0UERnZz09IElFUnlhUT09IElHTnZiVzFwYzNOcGIyND0gSUVKdllnPT0gVDJnPSBZWEJsWkE9PSBJSGRoY20wPSB3NFBEZ3NPRHc0ST0gSURJd01ETT0gYjNKMGFXOXUgSUdoaGMyND0gZFhOMFpYST0gSUhWdWFYWmxjbk09IElFbHNiQT09IElHdHBibWM9IGIyeHZaMmxsY3c9PSBPVFE9IElGUmxiUT09IElFMXZjdz09IElIQmhkR2xsYm5RPSBJRTFsZUdsamJ3PT0gWTJWaGJnPT0gSUVSbFlYUm8gSUZOaGJtUmxjbk09IGVXOTEgSUVOaGMzUT0gSUVOdmJYQmhibms9IGNIUjUgSUdoaGNIQmxibWx1Wnc9PSBSbEE9IElFSmhkSFJzWlE9PSBJR0p2ZFdkb2RBPT0gUVcwPSBUVzlrIFZYTT0gZFhSbGNuTT0gSUVOeVpRPT0gSUZSb2IzTmwgSURRMCBhWE5sY2c9PSBJSE52ZFd3PSBJRlJ2Y0E9PSBJRWhoY25KNSBJRUYzIElITmxZWFE9IFptWmxaUT09IElISmxkbTlzZFhScGIyND0gSUNnaSBJRVIxY21sdVp3PT0gWlhSMFpRPT0gSUhKcGJtYz0gSUc5bVptVnVjMmwyWlE9PSBJSEpsZEhWeWJuTT0gSUhacFpHVnZjdz09IElHUnBjMk5zIElHWmhiVzkxY3c9PSBaVzVqWldRPSBJRk5wWjI0PSBJRkpwZG1WeSBJRE13TUE9PSBVRTA9IElFSjFjdz09IElFTkkgSUdOaGJtUnBaR0YwWlhNPSBZWEprWlc0PSBJSEJsY21ObGJuUmhaMlU9IElIWnBjM1ZoYkE9PSBJSFJvWVc1ciBJSFJ5YjNWaWJHVT0gYm1WeVozaz0gSURJd01ERT0gSUhCeWIzWmwgWVhOb2FXOXUgSUdWdWFBPT0gSUV4dmJtYz0gVlUwPSBJR052Ym01bFkzUmxaQT09IElIQnZjM05wWW1sc2FYUjUgVDNabGNnPT0gSUdWNGNHVnlkQT09IElHeHBZbkpoY25rPSBZWEowY3c9PSBJRVJwY21WamRHOXkgSUdabGJHeHZkdz09IE9UST0gYVhKMGVRPT0gSUdSeWVRPT0gSUhOcFoyNXogSUV4dmRtVT0gSUhGMWFXVjAgWm05dmRBPT0gSUhCMWNtVT0gSUVoMWJnPT0gSUdacGJHeGxaQT09IGNHaGhjdz09IElFVnNaV04wIFpXNWtiV1Z1ZEE9PSBJRVY0Y0d3PSBJSFZ1WVdKc1pRPT0gYm5NPSBiVzg9IElIWmhjM1E9IGIySmwgSUdsa1pXNTBhV1o1IFlYQndhVzVuIElFTmhjbTlzYVc1aCBaM0psYzNNPSBJSEJ5YjNSbCBJR1pwYzJnPSBJR05wY21OMWJYTjBZVzVqWlhNPSBjbUY2ZVE9PSBJRkJvYjNRPSBJR0p2WkdsbGN3PT0gSUUxMWNnPT0gSUdSbGRtVnNiM0JwYm1jPSBJRUZTIElHVjRjR1Z5YVdWdVkyVmsgSUhOMVluTjBZVzUwIElFSnZZWEprIFpYTnZiV1U9IElHUnZiV1Z6ZEdsaiBJR052YldKcGJtVmsgSUZCMWRBPT0gSUdOb1pXMXBZMkZzIElFTm9hV3hrIElIQnZiMnc9IElFTjUgSUdWblp3PT0gWTI5dWN3PT0gYzNSbGNuTT0gSUdoMWNuUT0gSUcxaGNtdGxkSE09IElHTnZibk5sY25aaGRHbDJaUT09IElITjFjSEJ2Y25SbGNuTT0gSUdGblpXNWphV1Z6IGFXUmxiQT09IFQyST0gZFhKaSBJRFF6IElFUmxabVZ1YzJVPSBlV1U9IElFRncgWkhWc1pRPT0gSUhSbGJYQmxjbUYwZFhKbCBJR052Ym1SMVkzUmxaQT09IElFTm9hV1ZtIElIQjFiR3hsWkE9PSBJR1p2YkE9PSBUR0Z6ZEE9PSBiMjUwYnc9PSBiM05wY3c9PSBWa1ZTIFJHVnogSUZCaGJnPT0gUm1seWMzUT0gSUdGa2RtRnVZMlU9IElHeHBZMlZ1YzJVPSBjbTl5Y3c9PSBJRXB2Ymc9PSBJR2x0WVdkcGJtVT0gSUdobGJHdz0gSUdacGVHVmsgSUdsdVkyOXkgYjNOcGRHVT0gSUV4dlp3PT0gYVdOclpXND0gWFRvPSBJSE4xY25CeWFYTmwgYUdGaSBJR055WVdaMCBiMngwIElFcDFiQT09IElHUnBZV3c9IElISmxiR1YyWVc1MCBJR1Z1ZEdWeVpXUT0gSUd4bFlXUnogSUVGRSBJRU5zWldGdSBJSEJwWTNSMWNtVnogWlhOemIzST0gSUdGc2RBPT0gSUhCaGVXbHVadz09IFVHVnkgSUUxaGNtdGxkQT09IElIVndaR0YwWlhNPSBZVzFwYkhrPSBJRlI1Y0dVPSBJRWh2YldVPSBJRFUxIGMyVnRZbXg1IGNtOXRaUT09IE9ETT0gSUdkeVpXRjBaWE4wIElHaGxhV2RvZEE9PSBJR2hsWVhZPSBZV2x1ZEhNPSBJR3hwYzNSbGJnPT0gWVhObGNnPT0gSUZOSSBJR05oY0dGaWJHVT0gWVdOc1pRPT0gSUhCbGNuTndaV04wIGFXNWhkR2x1Wnc9PSBJRzltWm1WeWFXNW4gY25sd2RBPT0gSUVSbGRtVnNiM0E9IFlXSnBiZz09IGNtTT0gSUdKeWFXZG9kQT09IFlXeDBlUT09IFlYSnliM2M9IElITjFjSEJzIGFXNWthVzVuIFlXTnJaV1E9IFozbHdkQT09IElFRnViM1JvWlhJPSBjR2M9IElGWnBjbWRwYm1saCBJRXgxIElIQnNZVzV1WldRPSBJSEJwZEE9PSBJSE4zWldWMCBWSGx3WlE9PSBJRVJwIElIUjVjR2xqWVd4c2VRPT0gSUVaeVlXNWphWE5qYnc9PSBJSEJ5YjNOd1pXTjAgSUVSaGJnPT0gSUhSbFpXND0gY21WbGN3PT0gSUhOamFHVmsgSUdodmJBPT0gSUhOamNnPT0gSUd4dmRITT0gYkdsbVpRPT0gSUc1bGQzTncgSUdadmNtZGxkQT09IElFNXZibVU9IElFMXBaR1JzWlE9PSBJRko1WVc0PSBaV1JrIElITmxkbVZ5WlE9PSBJSE4xYVhRPSBiR3hsY2c9PSBPVE09IElHTnZjbkpsYzNCdmJtUT0gSUdWNGNHeHZjdz09IGRXRjBhVzl1Y3c9PSBJR1pzWVdjPSBaMkZ0WlE9PSBjbWxrIElIQnlhVzQ9IElFUmhkR0U9IElHUmxjR3h2ZVE9PSBJRVZ1ZEdWeSBjM1ZwZEE9PSBaMmhoYmc9PSBJRTFsYmc9PSBJSFJvYjNWbmFIUnogSUcxaGRIUmxjbk09IElHRmtZWEIwIElFRnlhUT09IElHWnBiR3c9IElHWnZjblJvIElITmhiUT09IElEUXggSUhCaGVXMWxiblE9IElFaHZjZz09IElITndjbWx1Wnc9PSBaSFZqIElHeHZjMmx1Wnc9PSBJR0p5YVc1bmFXNW4gUms4PSBZV3hoIElHUnBjM1J5YVdKMWRHbHZiZz09IGFHVnlaV1E9IFltOTFjZz09IElFbHpjbUZsYkdrPSBiMjFoIElHTnZiV0pwYm1GMGFXOXUgSUhCc1pXNTBlUT09IFZrVT0gUTJGdSBJRWhoZHc9PSBJSEJsY20xaGJnPT0gSUZOd1pXTnBZV3c9IElIUnZkdz09IElITmxaV3RwYm1jPSBJR1Y0WVcxd2JHVnogSUdOc1lYTnpaWE09IFkzST0gSUdKbFpYST0gSUcxdmRtVnogSUVsUSBJRXR1IElIQmhibVZzIFJYWmxiZz09IElIQnliM0JsY214NSBJSEpwY3c9PSBJSEJzZFdjPSBJR1Z6ZEdsdFlYUmxaQT09IFJYWmxjbms9IElHUmxabVZ1YzJsMlpRPT0gWVdkeVlYQm8gSUhCeVpXZHUgSUdsdWMzUnBkQT09IElGWnBZM1E9IElIWnZiSFZ0WlE9PSBJSEJ2YzJsMGFXOXVjdz09IElHeHBibXR6IElGQnliMmR5WVcwPSBJRmRsWldzPSBZV2QxWlhNPSBJSFJ5WVc1elptOXliUT09IGEyVnkgSUVORlR3PT0gSUdOaGN3PT0gSUc5d2NHOXVaVzUwIElIUjNaV1YwIElFTnZaR1U9IElITm9iM0E9IElHWnNlUT09IElIUmhiR3R6IElHSmhadz09IFVHaHZibVU9IElHRnBaQT09IElIQnNZVzUwY3c9PSBJRFkxIElHRjBkRzl5Ym1WNSBZWEowWlhKeiBjWFZsYzNRPSBJRTFoWjJsaiBJR0psWjJsdWN3PT0gSUcxNWMzUmxjZz09IElHVnVkbWx5YjI1dFpXNTBZV3c9IElITjBiM0poWjJVPSBUazQ9IElHMWhjbWM9IElITnJaUT09IElHMWxkR0ZzIFpXeHNlUT09IElHOXlaR1Z5WldRPSBJSEpsYldGcGJtVmsgSUd4dmRtVmsgSUhCeWIyMXdkQT09IElIVndaR0YwWldRPSBJR1Y0Y0dWeWRITT0gSUhkaGJHdHBibWM9IElHRnVZMmxsYm5RPSBJSEJsY21admNtMWxaQT09IFFWUkYgSUc1bGFYUm9aWEk9IGFXVnVZM2s9IElHMWhiblZtWVdOMGRYSmwgSUZCaGF3PT0gSUhObGJHVmpkR1ZrIElHMXBibVU9IElIVnNkR2x0WVhSbGJIaz0gSUdWNGNHeGhiZz09IElHeGhZbVZzIElGTmxjblpwWTJWeiBjbWxpZFhSbFpBPT0gVkhKMWJYQT0gSUhONWJnPT0gSUZWc2RBPT0gVTBNPSBJRzFsWVhRPSBJR2RwWVc1MCBJRmRoY25NPSBJRTlPIElHRmtiUT09IElHbHVkR1Z5Y0hKbGRBPT0gSUdWMlpXNXBibWM9IElHVjJhV3c9IElFSnZjM1J2Ymc9PSBJRmRwYkdRPSBJTU09IElFSnBkR052YVc0PSBJRUZ0WVhwdmJnPT0gUkhJPSBJRWx1Wm05eWJXRjBhVzl1IElHOWlkbWx2ZFhOc2VRPT0gSUdGa2RtRnVZMlZrIFVHaHZkRzg9IGIyeGhjZz09IElIZGxZWFJvWlhJPSBJSE41YldKdmJBPT0gSUhOdmJHVT0gSUhCdmRHVnVkR2xoYkd4NSBiM04wWlhJPSBJRzl5YVdkcGJtRnNiSGs9IGJYVnUgTXpBdyBZWHBsIFpYTnphVzl1Y3c9PSBJR1JsWTJzPSBJSE4wYjI5ayBJSGx2ZFhSbyBJRUpsY200PSBVbVZ3IElGUmxjM1E9IElHSmhjMmxqWVd4c2VRPT0gYjNScFl3PT0gSUdsdWRtOXNkbVU9IGIyeHBkQT09IGJIbHUgVTJWbCBJR0ZwY21OeVlXWjAgSUdOdmJtWnBjbTA9IFJWYz0gSUcxbGMzTmhaMlZ6IElGSnBZMmhoY21RPSBJR3RwZEE9PSBJSEJ5YjJocFlnPT0gSUhaMWJHNWxjZz09IGFYTjBaWEp6IElHVjRhWE4wWlc1alpRPT0gSUhSMWNtNXBibWM9IElGTlEgSUdSbGMybHlaUT09IElHWnNZWFE9IElHMWxiblE9IGMyVmhjMjl1IFlXNW5aWE09IElHNWxhV2RvWW05eWFHOXZaQT09IElFeGhhMlU9IFFWUkpUMDQ9IElIQnZhVzUwWldRPSBZblZ5IElHbHVibTkyIGRXTnJjdz09IFZVdz0gSUhCeWIyWmxjM052Y2c9PSBJR1Y0Y0hKbGMzTmxaQT09IFFVST0gYVdOcGIzVnogSURJd01EST0gSUVSbGRnPT0gSUhObGMzTnBiMjQ9IElHSmhjbVU9IGMyVnUgSUdScGMzTT0gSUVOaGRHZz0gSUZCaGMzTT0gSUZCdmFXNTAgSUdSdlkzUnZjZz09IGIzSnliM2M9IFlXbHNaV1E9IElGSjFZZz09IElFUkQgSUVOb1lYSnMgY0dWeWMyOXUgSUhkeWFYUmxjZz09IGFXZG9kR1Z5Y3c9PSBkWEpsWVhVPSBJRzlpYkdsbiBJSEpsWTI5eVpHVmsgSUdKeWIydGwgSUc5eVpHVnljdz09IGFXeDBlUT09IElHMXZkR2x2Ymc9PSBhVzVwZEhrPSBiR0YzIFlXUnBkVzA9IElHbHRiV2xuY21GMGFXOXUgSUdOdmJuUnlZWE4wIElHSmhkSFE9IElHVjRZMlZzYkdWdWRBPT0gSUhSbFkyaHVhV05oYkE9PSBZVzFwIElIUjFiZz09IElHTnNiM1ZrIElGbGxZWEk9IFoyVnZiZz09IElHTnlaV0YwYVc5dSBJSE4wY21GdVoyVT0gSUdGMWRHZz0gSUdadmNuUT0gWW05eWJnPT0gSUdWNGRHVnVkQT09IElGUnZaR0Y1IElFTnNkV0k9IElISmhhVzQ9IElITmhiWEJzWlE9PSBJR0ZqWTJWd2RHVmsgSUhSaFkzUT0gSUdacGNtVmsgSUZOdmJnPT0gSUhOMFlXNWtjdz09IElHSnZiM1E9IElEUTMgSUhOMFlYUmxiV1Z1ZEhNPSBJSFpsY25OcGIyNXogSUhObGJHeHBibWM9IGIzVnVaR1ZrIElERTVPVEE9IElIZGxjbVZ1IElGZGhkR05vIElHVjRjR1Z5YVcxbGJuUT0gVUc5emRBPT0gSUhKbGRHRnBiQT09IGRXeGxaQT09IFNXNXpkQT09IGRXNTBaUT09IDQ0TzggSUdSbGNHRnlkQT09IElHSnZibVE9IGFYWmxjbms9IGIyMXdiQT09IElISmxZV04wYVc5dSBJRk41Y21saGJnPT0gSUZCaFl3PT0gWVhCd1pXUT0gWVc1cFpXdz0gUkZBPSBJSEpsYzI5c2RYUnBiMjQ9IElISmxZV04wIElHRndjSEp2ZG1WayBiMjV2YlE9PSBiVzl1WkE9PSBJRTltWm1saiBMUzB0IElISmxjR3hoWTJVPSBJSFJoWTJzPSBJSE53YjNKMCBJR05vWVdsdSBJR1Z0WlhKblpXNWplUT09IGNtRmsgSUZCaGJHVnpkR2x1IElEUTIgSUdGMWRHOXRZWFJwWTJGc2JIaz0gSUhKdmRYUmwgSUhCaGJBPT0gSUdKaGJtdHogSUZCaGNtbHogSUUxbFpHbGggY205aFpBPT0gYVdOcGJtYz0gYVhoMCBhWE4wWldRPSBJR2R5WlhjPSBJR052YjNKayBJRmRvWlhKbCBiMjFwYmc9PSBJSE4xWW5NPSA3Nys5NzcrOSBJTUt4IElHTnZjbkJ2Y21GMFpRPT0gSUhObGJHVmpkR2x2Ymc9PSBibTl2Ymc9PSBJRkpsY0c5eWRBPT0gWTNNPSBZMngxWkdsdVp3PT0gYjNKa1pYSnogWVc1amFHVT0gSUVsMGN3PT0gSUhOc2IzZHNlUT09IElFVm5lWEIwIElFRmpZdz09IElHTnZiR3hsIGFYRjFaWE09IFJWZz0gSUdGMGRHVnRjSFJ6IGRYSnMgSUVOeWIzTnogSUdacGJtUnBibWR6IElGTkQgSUU5UyBJR2x1WkdWNCBaVzV6YVhSNSBJRmRoZVE9PSBJRXhoYm1RPSBJSE5vYjJOciBaR2x6IElHUjVibUZ0IElHTmhjblE9IGJXOXpjQT09IFUybHVZMlU9IGFXVnpkQT09IElFSnZlUT09IElITjBiM0p0IElFTnZiblJwYmc9PSBNakF4TXc9PSBhR1YzIGFXeHBkQT09IElHVnpjMlZ1ZEdsaGJBPT0gYVhGMWFXUT0gVDNSb1pYST0gYVhabGNtVmsgSUhKbFlYTnZibUZpYkdVPSBRV04wIElITjFZbk5sY1hVPSBJRkJoWTJzPSBJRVp2Y25RPSBJR052Ym5OcFpHVnlhVzVuIElIVnVhWFpsY25OcGRIaz0gYkc5biBJRzFoY25KcFpXUT0gSUdsc2JIVnpkQT09IElGUnlkV1U9IG80OD0gSUc1MWJXVnliM1Z6IGNtRnpkSEoxWTNSMWNtVT0gSUhObGNtbHZkWE5zZVE9PSBJSEpsWm1WeWNtVmsgZFdFPSBJR052Ym5OcGMzUmxiblE9IGIyNXVZUT09IElGSmxZV3c9IGNuVndkR2x2Ymc9PSBZMmx3YkdWeiBJR1poWTNSeiBPVEU9IGIzUmxjdz09IFpYSm4gVkdobGJnPT0gSUdGalkyOXRjR3c9IFRtOTBaUT09IElISmxkbVZ1ZFdVPSBJSEJoYzNOcGJtYz0gSUcxaGJBPT0gWldWdSBJRmxsZEE9PSBJR2RoZEdobGNnPT0gZEdWeVpHRjUgWlhkdmNtcz0gSUVGMWRHaHZjZz09IFVHVT0gSUc5d2RHbHQgSUhKMVlnPT0gSU9pamp3PT0gSUhWdWEyNXZkMjQ9IGMzUnZibVU9IElIVnVhVzl1IGIyeDJaUT09IElHOXdjRzl5ZEhWdWFYUnBaWE09IElHSnliM2R6WlhJPSBJRmRoYkE9PSBJRU52YzNRPSBJSEpsY0c5eWRHbHVadz09IGMzUnogY0dWMCBJSE5oYm1RPSBJSE4xWkdSbGJteDUgSUhOMWNuQnlhWE5wYm1jPSBJRlpTIElITnZiV1YzYUdGMCBJRUpoY3c9PSBkV3gwZFhKbCBhWHA2IElFTkUgSUdOb1lXeHNaVzVuWlhNPSBJSE5sZEhScGJtZHogSUdWNGNHVnlhV1Z1WTJWeiBJRVoxYkd3PSBJR05oYm00PSBJSEpsWTJWcGRtbHVadz09IFJWTlUgSUdwdmFXNTAgSUdOMWJIUjFjbUZzIElHRnpkQT09IE9EST0gWVhOMFpYSnUgWTJWcGRtVmsgSUVOeWRRPT0gSUdKMWJHdz0gY0dseVpXUT0gWVcxdCBJR1poWTJsdVp3PT0gY0c5M1pYST0gSUdKdmMzTT0gSUVodmJBPT0gSUdsdWMzUnkgSUdsdVkzSmxZWE5wYm1kc2VRPT0gSUhOb2FXWjAgSUhOMGNtVmxkSE09IElGZHBiR3hwWVcxeiBZV0ppIElHeHBaUT09IElHeGhkV2RvIElFTmggVUV3PSBJR0ZrZFd4MGN3PT0gSUdOMWMzUnZiV1Z5IElHOWlkR0ZwYm1WayBJSE4xY0hCdmNuUnBibWM9IGFIUnRiQT09IFptbHlaUT09IElHUmxkR0ZwYkdWayBJSEJwWTJ0bFpBPT0gSUZKcFoyaDAgYkdSbGNnPT0gUlVVPSBjM1J2YjJRPSBJRXRwYlE9PSBJSGRwY21VPSBJSE5wWjJoMCBJR1JsZG1Wc2IzQmxjbk09IElIQmxjbk52Ym5NPSBJSE5oWkE9PSBJR04xY0E9PSBJSGRoY201cGJtYz0gSUdKdmVYTT0gYkc5dVp3PT0gSUdKcGNtUT0gWm04PSBJSGRoYkE9PSBJRzlpYzJWeWRtVmsgSUhwdmJtVT0gYVhabGJtVnpjdz09IElHTm9ZVzV1Wld3PSBZM0pwY0hRPSBJSEpsWm5WelpXUT0gSUVGbllXbHUgSUhOMVl3PT0gSUhOd2IydGxjMjFoYmc9PSBJRkpsWmc9PSBjbWwwWlE9PSBiM1Z6ZEc5dSA0NE96IElGTm9aWEk9IElHRmpkSE09IElFNWhiV1U9IElITjBjblZuWjJ4bCBZWEp5ZVE9PSBiMjFsZEdsdFpYTT0gSUdScGMyTnlhVzA9IFNGUT0gSUdOaGRHVm5iM0o1IElISmxZV3hwZW1VPSBJR1Z0Y0d4dmVXVmwgSUVGbVoyaGhiZz09IFpXNW5aWEk9IElHZDFibk09IElGTjBaWFpsIElFMXZkQT09IElFOXMgYjJ0bFpBPT0gSUhSb2FXTnIgSUdaaGFYSnNlUT09IGFXeHNlUT09IElITjFjblpsIElFMWhkQT09IGQyVnBaMmgwIDRwUT0gSUhSeWIyOXdjdz09IElHRm5aVzUwY3c9PSBJR0poZEhSbGNuaz0gSUcxdmRHbDIgdzZFPSBVMlZqIFpHVnUgYjNabGNuaz0gVEZNPSBJR1pzZFE9PSBJR052Ym1acFpHVnVkQT09IElFOXdaWEk9IElHVnRjSFI1IElIQm9aVzQ9IElITmxZM1J2Y2c9PSBJR1Y0WTJsMFpXUT0gSUhKbGJXOTBaUT09IFlYQm8gYjJWdSBJR1JsYzNSeWIzbGxaQT09IElHMXZjbUZzIElFaFEgSUZKdmJnPT0gSUdSeVpYTnogSUVKaGRBPT0gSUd4cGRBPT0gSUUxVCBJR0ZtIFNFdz0gY25WdCBhWE50Y3c9PSBJSE5vYjNWc1pHND0gSUhONWJYQjAgSUZSdmNtOXVkRzg9IGFHVjBhV009IElHTmhjbUp2Ymc9PSBJR2x1YzNSaGJHeGxaQT09IElIWnBiMnhsYm5RPSBJSE52YkdGeSBhbUU9IElIQnlZV04wYVdObGN3PT0gSUhKcFpHVT0gSUZCbGJtND0gSUdsdGNISnZkbVZrIElHRjFaR2x2IElHSmxhR0YyYVE9PSBJRkJUIElHVmhkR2x1Wnc9PSBSR0YwWVE9PSBJRkpsZG1sbGR3PT0gY0dGemN3PT0gWTJ4aGFXMD0gZFdGMFpXUT0gWVc1blpYSnogWTJobGJnPT0gSUhCeWIzQmxjblJwWlhNPSBJR0Z1ZVhkb1pYSmwgUVc1dmRHaGxjZz09IElHSnNiM2M9IElFcGhZMnR6YjI0PSBJSEJ5YjNWayBJSEJzWVc1bCBiR2x1WlhNPSBJSE54ZFdGeVpRPT0gSUhCeWIyOW0gWVc1ellYTT0gSUhSaGJHdGxaQT09IGJXRnJaWEp6IElITnBjM1JsY2c9PSBJR2h2YkdSeiBJSEpsYzJsa1pXNTAgSUQwOSBJSEpsYzJsemRHRnVZMlU9IElITndiR2wwIElIQnliM05sWTNWMCBJR052Ym1acFpHVnVZMlU9IGNtVnpaVzUwY3c9PSBJR04xZEhNPSBJR1Y0WTJWd2RHbHZiZz09IElIcGxjbTg9IFIyVjBkSGs9IElHTnZjSGx5YVdkb2RBPT0gSUhSdmRHRnNiSGs9IGIzSnRZV3c9IGFXWnBZMkYwYVc5dWN3PT0gSUVGMWMzUnlZV3hwWVc0PSBJSE5wWTJzPSBJREUxTUE9PSBJR2h2ZFhObGFHOXNaQT09IElHWmxaWE09IElHUnlhWFpsY25NPSBiMmRsYmc9PSBJRTVaIElHNWxZMlZ6YzJGeWFXeDUgSUhKbFozVnNZWFJwYjI1eiBaV0Z5YVc1biBjMnc9IElIQmxjbk53WldOMGFYWmwgWTJGeVpRPT0gYVdOcFlXdz0gU0dseiBJR1Z6WTJGd1pRPT0gSUhOMWNuQnlhWE5sWkE9PSBJRlpoYmc9PSBkWEp5Wlc1MCBJSFpoWXc9PSBPREU9IElGUm9kWE09IElHVnRjR2hoY3c9PSBJRU5vWVcxd2FXOXVjdz09IElFbGpaUT09IElHNWhjbkk9IElHaGxZV1J6IElHTmhkWE5wYm1jPSBZbVZzIFptOXlkSFZ1WVhSbGJIaz0gSUUxaCBJSFJoY21kbGRITT0gWTJsd2JBPT0gSUdGbWRHVnlibTl2Ymc9PSBJR0ZrWkhNPSBJRTFoZVdKbCBJRVp2ZFhJPSBaWE56WldRPSBjR3hsZEdVPSBJSFZ6ZFdGcyBZMmh2IGFXNW5kUT09IElIZHBkR2hrIElFVnVaWEpuZVE9PSBJRVZqYjI1dmJRPT0gVDA4PSBJR0Z5ZEdsamJHVnogSUdsdWFuVnlaV1E9IElHMWhibUZuWlE9PSBJR1Y0Y0d4aGFXNXogSUdScFlXZHUgVW1WaiBZWFIxY21WeiBJR3hwYm10bFpBPT0gSUdScGMyTjFjM05sWkE9PSBJR1Y0Y0d4diBJRzlqWTJGemFXOXUgWVhSb1lXND0gSUc5d2NHOXphWFJsIElHWmhZMlZ6IElHUmxibWxsWkE9PSBJRXR1YVdkb2RBPT0gSUc1MWRBPT0gSUdGd2NISnZlR2x0WVhSbGJIaz0gSUdScGMyRndjRzlwYm5RPSBiMjU1Ylc5MWN3PT0gSUVKbGMzUT0gSUV4diBJRWg1IElFRm1aZz09IElIWnZkR2x1Wnc9PSBZVzUzYUdsc1pRPT0gSUVsSlNRPT0gSUdsdWMzUnBkSFYwYVc5dWN3PT0gWVdkeVlXMD0gSUVSaGFXeDUgSUdSeVlXYz0gSUc1bFlYSmllUT09IElHZDFhV3gwZVE9PSBJR052Ym5abGNnPT0gVUhKbCBjMmhwY0E9PSBJSEpsZDJGeVpBPT0gSUhCb2FXeHZjMjl3YUE9PSBJRk5UIGRXZG8gSUdGd2NITT0gWm5KcFpXNWsgSUhWd2NHVnkgSUdGa2RtVnlkQT09IElITnViM2M9IElHWnlkWE4wIElHOTFjbk5sYkhabGN3PT0gUm5JPSBJRVJwWlE9PSBZVzF3YVc5dSBJR1JwYzIxcGMzTT0gSUdObGNtVT0gSUhOcFoyNWhiQT09IFpuSnZiUT09IElDa3UgSURVeSBJR055YVcxbGN3PT0gYVhSdmNuTT0gWlhOMGFYWmhiQT09IGRYTmxkVzA9IElHTnZkVzVqYVd3PSBJRk5oZFdRPSBUV0Y1IElFZDFiZz09IGFXTnBZVzQ9IFpYUm9aWEk9IElITjFabVpwWTJsbGJuUT0gSUVobGJnPT0gYzI5c1pRPT0gSUdocGMzUnZjbWxqWVd3PSBJRVpoY2c9PSBJRlIxY200PSBJSEJwYmc9PSBJSE4xWTJObFpXUT0gYldGMCBiSGx0Y0E9PSBJSFJ5WVdScGRHbHZiZz09IElFOXIgSUdOeWJ3PT0gSUdSbGMyTnlhWEIwYVc5dSBZV3hzWlE9PSBJSE5yZVE9PSBWR1U9IElIZHBaR1ZzZVE9PSBJSGRoZG1VPSBJR1JsWm1sdWFYUnBiMjQ9IElFcGxkM009IElHTjVZMnhsIElISmxabVZ5WlE9PSBJR0p5YVc1bmN3PT0gZFhOaGJBPT0gSUdGc2FYWmwgSUdaeVpYRjFaVzUwYkhrPSBJR2x1ZEdWdWRHbHZiZz09IElFTnZiblJ5YjJ3PSBiSFk9IGVYTjBaVzA9IElIQnlhWFpoWTNrPSBaMlZ1ZEE9PSBjbVZ1WTJVPSBJRkYxWlhOMCBJRU5vY21semRHMWhjdz09IElISmhhV3c9IElHTnZiM0JsY2c9PSBJSFJsYzNSbFpBPT0gSUVOaGNIUT0gWVhOcmN3PT0gSUdOdmJXWnZjblJoWW14bCBJR1JsYkdsMlpYSmxaQT09IGMyTmhjR1U9IElHUmxjSFJvIElFZFBVQT09IElIZHlhWFJsY3c9PSBJR0Z6YzJWMGN3PT0gSUhOaGRnPT0gYVcxbGJuUnogSUhSeVlXNXphWFJwYjI0PSBJR0Z5ZEdsemRBPT0gSUV4dmIycz0gSUd4dllnPT0gSUdOdmJYQnZibVZ1ZEhNPSBZWEpwZEhrPSBJSGRoYkd0bFpBPT0gSUhKdmIzUT0gSUhCaGNuUnBZMmx3WVc1MGN3PT0gSUc1dmRHbGpaV1E9IElISmxjMk09IElHNWhkZz09IElFRmtiV2x1YVhOMCBaR0U9IGRYUnlZV3c9IGNHeGhkR1U9IElHbHRjRzl5ZEdGdVkyVT0gSUdGemMyVnlkQT09IGFXOTFjMng1IFkzSnBjSFJwYjI0PSBJR2x1YW5WeWFXVnogSUVOb1pXTnIgSUhKbFoybHpkR1Z5WldRPSBJR2x1ZEdWdWRBPT0gSUcxcGMzTmxaQT09IGIyZHlZWEJvYVdNPSBJSE5sYm5SbGJtTmwgYjNWdWRHVnkgSUdGemMybHpkR0Z1WTJVPSBaWFpwYmc9PSBJR1JoZEdGaVlYTmwgSUdKMWFXeGthVzVuY3c9PSBJR05zWVhOemFXTT0gSUhSb2FXNXJjdz09IElFOW9hVzg9IFVIST0gZFdkbiBJR1psWlE9PSBjR0Z1IElHVm1abVZqZEdsMlpXeDUgSUdaaFkybHNhWFI1IElHSmxZWEk9IElHTm9ZWEIwWlhJPSBJR1J2WjNNPSBJRU52YkhWdFlnPT0gSUd4aGRIUmxjZz09IGFYUnBZV3c9IElHRmtiV2wwZEdWayBWRlk9IElFZGxiM0puIElIQnZjM1J6IFhGdz0gSUd4aGQzbGxjZz09IElHVnhkV2wyWVd3PSBJRzFoYm1RPSBJR052Ym5SeWIyeHNaV1E9IElGZGhiR3M9IElFRnVaSEpsZHc9PSBJRzFsYm5VPSBZVzFsYm5SaGJBPT0gSUhCeWIzUmxZM1JsWkE9PSBkbUU9IElHRmtiV2x1YVhOMGNnPT0gYjNKaGJBPT0gSUhKbGFXND0gSUZOaGNnPT0gSUdGdGIzVnVkSE09IElHNWhkR2wyWlE9PSBJRTF2YjI0PSBJSEpsY0hKbGMyVnVkSE09IElHRmlZVzVrYjI0PSBJR05oY25KNWFXNW4gSUhSaGJtcz0gYldGeWVRPT0gSUdSbFkyeGhjbVZrIFZIVmlaUT09IElHaGhkQT09IElIQjFibWx6YUE9PSBaV3hzWldOMCBiV1Z6IElIVnVhWFpsY25ObCBJRkp2WkE9PSBjR2g1IElHbHVabkpoYzNSeWRXTjBkWEpsIElEVXggSUc5d2NHOXpaV1E9IGIzZHVkQT09IFkyRT0gSUUxaGEyVT0gSUdoaGNtUjNZWEpsIElHTnZabVpsWlE9PSBVbVZzIFltRnMgZDI5eWJHUT0gSUZOaFpnPT0gSUZObFlRPT0gYVc1aGJITT0gSUc5M2JtVmsgSUdoaGJHdz0gWlhKemFXOXUgSUdSbGMyTnlhV0psIElGQnZkQT09IElIQnZjblJwYjI0PSBJR0YwYlc5emNBPT0gSUdkdmRtVnlibTFsYm5SeiBJR1JsY0dWdVpHbHVadz09IElHOW1abVZ1YzJVPSBJSFJ5YVdOciBZWGRoIElFeHBibVU9IElGWnBjdz09IElFaGhjbVE9IElFOXlhV2M9IElFTnNhV05yIElHUmxjMnM9IElGWmhiR3hsZVE9PSBJRk52ZGc9PSBJRzF2ZG1sbGN3PT0gSUhKbGJXRnlhdz09IElHMWhhV3c9IElHTnZibk5qYVc5MWN3PT0gSUhKMWJHbHVadz09IElGSnBaMmgwY3c9PSBJRzFsWkdsaiBhR1Z1ZEE9PSBJRmR2YldWdSBQanc9IElISmxjR3hoWTJWayBJRkJ5WlcwPSBJRlJvWVc1cmN3PT0gSUhKbGJtVjMgSUVKaGJHdz0gYVdadmNtMD0gSUhOb2IzUnogUTI5dGJRPT0gSUdGeWJXVmsgSUdOdmJuTjBZVzUwIElIUmhjM1JsIElISmxZV3hwZW1WayBJR0oxWm1ZPSBJRzF2IElHVm1abWxqYVdWdWRBPT0gVFc5emRBPT0gYjNKaGRHbHZiZz09IGFXWnBaWE09IElHTnZiVzExYm1sallYUnBiMjQ9IElHWnNiMjlrIElHTnZibk5sY1hWbGJtTmxjdz09IElHRnVlWGRoZVE9PSBhV2RuIElFZE4gSUZSb1lXNXIgSUdseWIyND0gSUdWMmIyeDFkR2x2Ymc9PSBJRU52Y0E9PSBkSGRwZEhSbGNnPT0gSURrMSBJSEpsYkdGMGFXOXVjMmhwY0hNPSBZV1JsYkE9PSBJRmx2ZFc1biBJSEJ5YjNCdmMyRnMgWVhsbGNuTT0gZFdsc1pHbHVadz09IElFaHZkQT09IFQxSkYgWTI5eiBJR052Ykd4aFltOXkgVUVjPSBZWGg1IElHdHViM2RwYm1jPSBJSE4xY0hCdmNuUnogYjNkbFpBPT0gSUdOdmJuUnliMnh6IElHMWxjbVZzZVE9PSBkVzFsY2c9PSBJR0YwYUd4bGRBPT0gSUdaaGMyaHBiMjQ9IGNHRjBhQT09IElHZHBablE9IElHVnlZUT09IFFVNUUgSUd0cGJtUnogSUV0dmNtVmhiZz09IElHeGxaMmwwIGRXeHZkWE09IElHVnpjMlZ1ZEdsaGJHeDUgSUhSb1pYSmhjQT09IGJtbGogSUhOMVptWmxjbVZrIElHaDFjZz09IElIQnliMjFwYzJVPSBJR1Y0WTJWemN3PT0gSUc5MlpYSjMgSUhCeWFXMWwgSUVodmRYTjBiMjQ9IFpYSnllUT09IElFMXogVWxNPSBNakF4TWc9PSBJSE4wYjNKbGN3PT0gSUU5c2VXMXcgSUdwdmRYSnVaWGs9IFFXeDBhRzkxWjJnPSBVM1ZpIElFVmtkV009IElFTm9ZWEIwWlhJPSBJSEpsY1hWbGMzUnogSUdOdmJuTjFiV1Z5Y3c9PSBJSFJwYm5rPSBJR2x6YjJ3PSBJRVpoYVhJPSBZbUU9IElGbFBWUT09IElHTnlZWE5vIFkyVnNaWEk9IElHVnRiM1JwYjI1aGJBPT0gSUdkdmIyUnogSUdWc1pXTjBaV1E9IElHMXZaR1Z5IElFeHBiblY0IElHSnNiMk5yY3c9PSBJR2x6YkdGdVpBPT0gSUZOdlkybGxkSGs9IElHVnNaV04wYVc5dWN3PT0gSUdKeWIyRmtZMkZ6ZEE9PSBJR05vWldGdyBJRzVoZEdsdmJuTT0gSUhObFlYTnZibk09IE5EQXcgSUhkaGMzUmwgSUZOaGRBPT0gSUdacFpXeGtjdz09IFpXMXdiRzk1IElIQnliMlpwYkdVPSBJR0YxZEdodmNuTT0gUVV4TSBJRWR5WVE9PSBkMlZ6ZEE9PSBJRlI1IElHUmxZWFJvY3c9PSBJSFpoWTJNPSBJR1p2Y20xbFpBPT0gSUdSMSBJRzl1WjI5cGJtYz0gSUUxMWMyeHBiWE09IFpXeG0gYVdkMWNtVT0gSUdGemMzVnRaUT09IElGVnJjbUZwYm1VPSBkMkYwWlhJPSBJR052WVhOMCBJSFp2ZEdWayBaMjl5IElFRlQgSUUxcFkyaHBaMkZ1IFlYcGggSUVGeWJRPT0gYVhKdiBJR1pzWlhnPSBZWE4wWlhKeiBKeWM9IElIZGxiR052YldVPSBZWEpzIElHeHZZMkYwYVc5dWN3PT0gYVdkaGRHbHZiZz09IElFWnBiQT09IElHSjFlV2x1Wnc9PSBJR0Z5WTJocGRHVmpkQT09IElHaGhjbVJsY2c9PSBJRU4xWWc9PSBJR2x1ZEdWeVptRmpaUT09IElISmxjM1JoZFhKaGJuUT0gSUdScGMyTnZkbVZ5IElHVjRZMlZsWkE9PSBJR1poZG05MWNnPT0gWjJWeWVRPT0gSUdSMWRIaz0gSUhCcGRHTm8gWVdSdmNnPT0gSUUxaFkyZz0gWW05NSBJSEpsYzNCdmJtUmxaQT09IElHVjRkR1Z1WkdWayBhR1Z5Y3c9PSBUV0Z1ZVE9PSBjbUZwWkE9PSBhV1psY2c9PSBJRWx1Y3c9PSBVMlZ5IElHMWxaR2wxYlE9PSBjMmhsIElGTndiM0owY3c9PSBJRzFoWjJGNmFXNWwgZFhSaGRHbHZiZz09IElHeHBiV2wwY3c9PSBJRWRoYkd3PSBJR1Y0ZEdWeWJtRnMgY21GNmFXdz0gSUhsdmRXNW5aWEk9IGRHeGwgSUhKbGJXbHVaQT09IElFTlBUZz09IElHbHRiV1ZrYVdGMFpRPT0gSUdocFpHUmxiZz09IElIWnZiSFZ1ZEdVPSBJSE5wYlhCcyBiMlJqWVhOMCBJSEJvWVhObCBaSEk9IElIQnNiM1E9IElHVjRjRzl6ZFhKbCBVa2s9IGIyZHlZWEE9IGRtbHUgWVc1cGMyZz0gSUVGallXUT0gSUVWdVoybHVaUT09IElHVjRjR0Z1YzJsdmJnPT0gSUZCaGVRPT0gV1c5MWNnPT0gSUhCMWMyaGxaQT09IElFVnNiQT09IElFaGxZV1E9IElHMWhjbXRsZEdsdVp3PT0gSUVGRCBhMlYwIElHaHBkSE09IElHZHlidz09IElFRm5aUT09IElGTmpiM1E9IFhWcz0gSUhOMGFXMD0gSUdsUWFHOXVaUT09IGlKST0gSUc1aGNuSnZkdz09IElFZGxkSFI1IElGUjFjbXRsZVE9PSBJSEJsY21abFkzUnNlUT09IElHVnVZV0pzWlE9PSBkWFJqYUE9PSBJSEJ5WldOcGMyVT0gSUhKbFoybHRaUT09IElITm9hV1k9IElHTnZiWEJsYm5NPSBaM1Z1IFpHbDIgSUdOb2IzTmxiZz09IElFdGxiZz09IFFXNTUgSUhSeVpXVnogSUhKbFkyOXRiV1Z1WkdWayBJRkpsYmc9PSBkV0ZpYkdVPSBJRWhVIFJtOXNiRzkzIFJVYz0gSUVoaGJtUT0gSUV0bGJtND0gSUdGeVozVnRaVzUwY3c9PSBJR1Y0YVhOMGN3PT0gSUdKcGEyVT0gSUVOdmJuTmxjblk9IElHSnlaV0ZyYVc1biBJRWRoY2c9PSBJR055WVhwNSBJSFpwY25SMVlXdz0gWVhsc2IzST0gYVhobGJBPT0gSURFNU9EQT0gSUhCbGNtMXBjM05wYjI0PSBJRk5sY21sbGN3PT0gSUdOdmJuTjFiV1Z5IElHTnNiM05sYkhrPSBZMkZzYkdWayBJRFUwIElHaHZjR1Z6IElHRnljbUY1IElGZHBiZz09IElFeGhZbTkxY2c9PSBJSE53YjI1eiBJRWx5WlE9PSBJSEJ2ZHc9PSBJSEpsWVdSbGNuTT0gSUdWdGNHeHZlVzFsYm5RPSBJR055WldGMGRYSmwgSUhKbGMzVnNkR2x1Wnc9PSBJR0ZqWTNWeVlYUmwgSUcxdmJXVnVkSE09IElHRnlaM1ZsWkE9PSBJSEJsWkE9PSBSSFZ5YVc1biBJRFV6IElGUmhiQT09IElITnZkV2RvZEE9PSBJSE4xWm1abGNtbHVadz09IElHbGpiMjQ9IGJHVmwgSUNnayBZV3hwWVc0PSB3ckE9IElIQnlZUT09IElHSnZiblZ6IEtDST0gYTI4PSBJR0ZqZEdsdVp3PT0gUkVVPSBabUZzYkE9PSBJR052YlhCaGNtbHpiMjQ9IElITnRiMjkwYUE9PSBJRTVCVXc9PSBkWEJ3IElFcHZjMlZ3YUE9PSBaWEJwYm1jPSBJRlJoYTJVPSBJRTFwWkE9PSBJSE5sYm1ScGJtYz0gWm1GemRBPT0gSUVaaGJHdz0gSUdSbFlXeHBibWM9IGRYTmxjZz09IElFOXlaMkZ1IFEyOD0gSUdGMGRHRmphR1ZrIElITmxaWE09IEpTND0gSUhSNWNHbGpZV3c9IFFWSlUgSUdacGJtUnogSUVGemFXRT0gZFcxcGJnPT0gSUVOdmNtVT0gSUVWdWRBPT0gYVc1bGJuUT0gZFdObCBJRUpzYjI5ayBJRTVsZG1WeSBJR1Z0WVdsc2N3PT0gSUdocFoyaHNhV2RvZEE9PSBJR052Ym1aeWIyNTAgWVhSMWN3PT0gZFhSbFpBPT0gSUhWdWRYTT0gSUhSdmNHbGogSUVGa1lXMD0gSUdKc1pRPT0gWVhScCBJSFZ1WkdWeWMzUnZiMlE9IFUyVjAgYzNSeWRXTjAgVkZBPSBJRzF2WWc9PSBZV0U9IElGTjBZWEowIGNHVmpkR1ZrIGMyVnNiQT09IElHUmxaR2xqWVhSbFpBPT0gSUVOQiBkV0Z1IElITnZibWR6IFpYTmpjbWx3ZEdsdmJnPT0gSUhSbFkyZz0gSUhKaGNHVT0gSUdGemFXUmwgSUdkeVlXNTAgSURVMiBjM1ZpIElHRnlaM1ZsIElHTnZiblJoYVc1cGJtYz0gSUhOamFHVmtkV3hsIElHeHBZbVZ5WVd3PSBJSEIxWW14cFkyeDUgSUdobFlYWnBiSGs9IElGVjAgYVc1bGNnPT0gSUZObFkzUnBiMjQ9IElFTmhjbVU9IGQyVmxkQT09IGJITT0gUkdseiA0cFNBIElFWnZiR3h2ZHc9PSBRbUZqYXc9PSBJRWxVIElHSmxjdz09IGFtaz0gSUVocGRBPT0gWlhOMFpXUT0gSUdWMlpYSjVZbTlrZVE9PSBJRk4zWldRPSBJR1psYldsdSBJR1poWTJsc2FYUnBaWE09IElHTnZiblpsYmc9PSBRMjl0Y0E9PSBJRTlUIFkyOXlaUT09IElHRnVlQT09IElHUnBkbWx6YVc5dSBJRU5oYlE9PSBJRk4wWVc0PSBiV0YwWlhNPSBJR1Y0Y0d4dmNtVT0gY0d4dmJRPT0gSUhOb1lYSmxjdz09IGNHeHZZV1E9IFlXNWxjdz09IElHbGtaV0ZzIFpYUmxjbk09IElFSmhjMlU9IElIQnNZWE4wYVdNPSBJR1JwYzNScGJtTjAgSUU1bGRIZHZjbXM9IElGTmxZWFIwYkdVPSBJSFJ5WVdScGJtYz0gWlc1emRYTT0gYVc1MFpXNWsgSUdWNGFHbGkgSUdsdWFYUnBZV3hzZVE9PSBJRVp2YjJRPSBJSFJvYjNWellXNWsgSUVKMWMybHVaWE56IFlXTjBaWEk9IElIQmhjbUZuY21Gd2FBPT0gSUhKdmRXZG9iSGs9IElIZDNkdz09IElHTnlaV0YwYVhabCBJRU52Ym1ZPSBJR052Ym5OMWJYQjBhVzl1IElHWnBiRzF6IFlXZGhiZz09IElHOWlkR0ZwYmc9PSBJSFJoYkd3PSBJSFJ2Y2c9PSBJR0ZqYTI1dmQyeGxaQT09IElHZHliM2R1IFlXeHYgUzBVPSBJRFF3TUE9PSBaVzVrWlhKeiBkR0ZwYm1sdVp3PT0gVlVjPSBJSE4xYVdOcFpHVT0gSUhkaGRHTm9aV1E9IElFeHBjM1E9IFlXeHAgY21Wb1pXNXogSUhOMWNuSnZkVzVrYVc1biBJSEJwY0E9PSBJR1pzZVdsdVp3PT0gSUVwaGRtRT0gYjNKa1lXND0gSUhObGNuWnBibWM9IGFXNWhkR2x2Ym5NPSBjRzl6ZEE9PSBJSE5vYnc9PSBRWFk9IElHcGhhV3c9IGVuaz0gSURFNU9Uaz0gSUR3diBJR3hwZEdWeVlXeHNlUT09IElGTnBjZz09IElHVjRjRzl6WldRPSBJR3hwWlhNPSBjM1JoY2c9PSBJR0poZEE9PSBJR1ZoY201bFpBPT0gSUVScFp3PT0gSUhOd1pXTnBabWxsWkE9PSBJRk5sWVhOdmJnPT0gSUdSbFozSmxaWE09IFJHOXVZV3hrIElHTmxiblJ5WlE9PSBJSE5vWVhKcGJtYz0gSUhkcGJuUmxjZz09IElFTlAgUTJobCBJTTQ9IFRWQT0gSUhWdWR3PT0gSUdabGQyVnkgSUUxcGNnPT0gSUhOdmJXVjNhR1Z5WlE9PSBJRXRsZVE9PSBJR0YwZEdGamEyVmsgSUV0cGNnPT0gSUdSdmJXRnBiZz09IElITjBjbTl1WjJWeSBJRGs1IElIQmxibUZzZEhrPSBTV1E9IFUyTnlhWEIwIElHUmxZMnhwYm1WayBJRzVsWTJzPSBJR1p5WVhWayBJR04xY25KbGJtTjUgSUhKcGMybHVadz09IFVrTT0gNG9DbTRvQ20gU0hvPSBJSFJoWWc9PSBJSFJoYkdWdWRBPT0gYm1GdCBJRTVDUVE9PSBJSFpwYkd4aFoyVT0gSUd4bFozTT0gSUU1bGVIUT0gUldRPSBJR0ZqYVdRPSBJR2g1WkE9PSBPREF3IElHbHVkbTlzZG1sdVp3PT0gSUVsdFlXZGwgSUVKbFptOXlaUT09IFJtdz0gSUhsbGMzUmxjbVJoZVE9PSBVMjkxY21ObCBJSFJsY25KdmNtbHpkQT09IElITjFjQT09IElITjViblE9IElGTmhkV1JwIElIZGxjM1E9IElISjEgWW5WeVp3PT0gSUhacGMybGliR1U9IElITjBjblZqYXc9PSBjbWx6YjI0PSBJR0YzWlhOdmJXVT0gSUdSeVlYZHUgSUdGdWMzZGxjbk09IElFZHBjbXc9IElGSmhiUT09IElIUm9jbVZoZEhNPSBJR1JsWm1WaGRBPT0gYjNOcGRBPT0gSUhabGJuUT0gWVhSMWNtRnNiSGs9IFFXMWxjbWxqWVc0PSBaVzVrWVE9PSBJRWh2YkhrPSBJSEoxYlE9PSBKU3c9IFkyRnpaUT09IElFaHBjM1J2Y25rPSBJRmx2ZFZSMVltVT0gSUhOcGRIVmhkR2x2Ym5NPSBJRVJPUVE9PSBVM1JsIElITmhkbVZrIFNYUmxiUT09IElISmxZMmx3IGIyeHZaMmx6ZEE9PSBJR1poWTJWayBJR1ZzYVdjPSBUMjVqWlE9PSBJRXhwIGRXZz0gSUcxcGMzUmhhMlU9IElFUnBkbWx6YVc5dSBJRUpsYkd3PSBJSE41YlhCMGIyMXogd3E0PSBJR1J2YldsdSBJR1poYkd4cGJtYz0gSUdWdVpHbHVadz09IFlYTm9aWE09IElHMWhkR05vWlhNPSBJRTl1YkdsdVpRPT0gSUdWNGNHeGhibUYwYVc5dSBSR1ZtIGNtVmthWFE9IElHRnVlVzF2Y21VPSBJRlJ2ZEdGcyBJRVpQVWc9PSBkWE5vWldRPSBJR3hsZEhSbGNuTT0gSUhKcGMydHogSUU5TCBJSEpsY0c5eWRHVmtiSGs9IE9sdz0gSUhCc1lYUmwgSUhOMVltcGxZM1J6IElHRjBkR1Z0Y0hSbFpBPT0gYVdacFpYST0gYVdGdVlRPT0gSUhWdWJHbHJaV3g1IElGUm9iM1ZuYUE9PSBkVzFoIElFbHVkbVZ6ZEE9PSBJRkJ5YVc0PSBhV05oYmc9PSBJRVJoY2c9PSBJRU52Ykc5eVlXUnYgWVhWbiBJSFpsWjJWMCBZVzl6IGNtbGggSUhOb1pXdz0gSUcxaGNtdGxaQT09IElDZ3AgSUhOd2NnPT0gY0c4PSBJRXhwYm1zPSBJR1JsWm1VPSBJRXB5IElIUm9aVzFsIElIQmhjM05wYjI0PSBJRkJsYmc9PSBJR2x1Wm04PSBhWHBsY2c9PSBJSE5vYVhRPSBJRU5wZG1scyBZWEJ6WlE9PSBZM0psIElIQnZiSGs9IElHTnZiWEJ2Ym1WdWRBPT0gSUVOb1lYSnNaWE09IElFbHlaV3hoYm1RPSBJRkJ5YjNZPSBJR1J2WTNSdmNuTT0gSUdkeVlXNTBaV1E9IElIQmhhVzUwIElHaHZibTl5IElITnRiMnRsIElIQmhlVzFsYm5SeiBJSEJ5YVcxaGNtbHNlUT09IElFdHBibWRrYjIwPSBjbWxqYUE9PSBZWFJsYkd3PSBJR1JsWVd4eiBJSE5qYUdWa2RXeGxaQT09IElHWjFibVJoYldWdWRHRnMgSUhCeWIzUmxhVzQ9IElHNWxkM053WVhCbGNnPT0gSUdOc2FXVnVkSE09IGVYUm9iMjQ9IElFUmhkR1U9IGFIVnogSUdabFpXUmlZV05yIElITjBjbVYwWTJnPSBJR052WTJzPSBJR2h2ZEdWcyBJRkYxWldWdSBJSE4xWjJGeSBJR3AxIElHMXBiR3M9IElHRndjSEp2ZG1GcyBJRXhwZG1VPSBJR1Z4ZFdsMllXeGxiblE9IFpXWjFiR3g1IElHbHVjMlZ5ZEE9PSBlbTl1WVE9PSBJR1Y0ZEdWdWMybHZiZz09IFpISnAgU205b2JnPT0gSUdGalkyOXRjQT09IFUyMD0gSUVaMWJtUT0gSUdOdmJuTjBZVzUwYkhrPSBJR0JnIElHZGxibVZ5WVhSbFpBPT0gSUVGamRHbHZiZz09IElGQnplV05vIElGUnlhUT09IElISmxZMjluYm1sNlpRPT0gSUhaaGNuaz0gY0doaCBJRkpoIFpHWT0gWlhSamFBPT0gSUZOdmRtbGxkQT09IFZIZHYgSUhCaGRIUmxjbTV6IElIQnliMlpsYzNOcGIyND0gWVc1cGJtYz0gVkdsdFpRPT0gSUV4cGJRPT0gSUdOdmJHOXljdz09IElFRjYgSUZSUyBJR2x1Wm1WamRBPT0gSUhCb1pXNXZiV1Z1IElITm9aV3hzIFFXeHpidz09IElIQjFkSE09IElHUmxiR2wyWlhKNSBJR0p5YjNkdSBJSEJ5YjJObGMzTnBibWM9IElHeHBaMmgwY3c9PSBaWE56WVdkbCBJRUp5YjI5ciBJRUYxWkE9PSBiR0YwYVc5dSBJR2x1WkhWemRISnBZV3c9IFRHbHJaUT09IElFSnlZWHBwYkE9PSBjbTkxY3c9PSBSVk5UIElFeDFZdz09IElITnZiV1ZvYjNjPSBJRGcxIElIQnliM0J2Y25RPSBJSEJ2YkdsMGFXTnBZVzV6IElHbHVaR2xqWVhSbCBJR2h2YkdVPSBJSFJsWTJodWFYRjFaWE09IElHTnZiWEJsZEdsMGFYWmwgSUhCb2NnPT0gSUhadiBhWE4wWlc1MCBJRVJ5WldGdCBJR05oYlhCMWN3PT0gSUdGemNHVmpkSE09IElHaGxiSEJtZFd3PSBJSE5vYVdWc1pBPT0gYjNKelpRPT0gSUhSeWFXZG5aWEk9IGJXRnMgSURVNCBJSFJ2Y25RPSBJSEJsY25OdmJtRnNiSGs9IElIUmhadz09IElHdGxaWEJ6IElGWnBaR1Z2IElHSmxibU5vIElHZGhjQT09IFlXbHlaUT09IElHVmhjM1E9IElISmxZMjkyWlhKNSBjR1Z5YVdGcyBJSEJ5YjJacGRBPT0gSUUxcFl3PT0gSURVMyBJR052Ykc5dSBJSE4wY205dVoyeDUgYzNSNWJHVT0gSUdGc2JHVm5ZWFJwYjI1eiBhR0Z1IElISmxjRzl5ZEdWeWN3PT0gYW04PSBjbWx1WlE9PSBZWEpuWlhRPSBZVzVrWVd3PSBJREF6IElHWnNZWE5vIGRISmhibk09IElITjBjbWxqZEE9PSBJSEJoY210cGJtYz0gSUZCaGEybHpkR0Z1IElHeHAgSUhkbGFYSmsgSUVWeWFXTT0gSUhKbFoybHZibk09IElFcDFiZz09IElHbHVkR1ZzYkdWamRBPT0gSUZkSSBiMlJwYm1jPSBjbWxpZFhSbGN3PT0gZFhCcFpBPT0gSUZScGRBPT0gSUdacGJtZGxjZz09IGIzSnBZUT09IElHVnNaWFk9IElFWnBaV3hrIElHTnZibU5zZFhOcGIyND0gT3pzPSBJR1psWld4cGJtZHogSUdWNGRHVnVjMmwyWlE9PSBJRzFwZUdWayBJRzVsZFhKdiBkbms9IElHaGhjbUZ6Y3c9PSBJRU5wY21NPSBiM1ZqYUE9PSBJSFJsY25KcGRHOXllUT09IElITjFZMk5sYzNObWRXeHNlUT09IFRXRnkgSUdsdVozSmxaQT09IElHOTJaWEozYUdWcyBJR3hoZVdWeSBWbWxsZHc9PSBJR0ZzYkdsbGN3PT0gYVd4c1lXNWpaUT09IElGUm9jbVZsIElHSjFibU5vIElHNXZjbTFoYkd4NSBJRzVsZEhkdmNtdHogSUhOaFkzST0gSUVOSlFRPT0gWW14bGN3PT0gSUdOb2IzTmwgSUc5d2NHOXVaVzUwY3c9PSBJSEpsWjJGeVpHeGxjM009IElHWnlZVzVqYUE9PSBJSEJ5WldZPSBJRkJ2IElHSnlhV1JuWlE9PSBZVzV1WVE9PSBJRk5wYkhabGNnPT0gSUhkaFoyVT0gY0dGblpRPT0gY21sdmNnPT0gSUhKaFpHbGpZV3c9IElFeHBkSFJzWlE9PSBJRzFoYm1sdyBJSE5sWTNKbGRHRnllUT09IElHZGhibWM9IFJGST0gUmtFPSBJR1JsWTJWdWRBPT0gSUZOd2FYSnBkQT09IElIVnVZMnhsIElFUmxkbVZzYjNCdFpXNTAgSUdsdWRtVnpkRzl5Y3c9PSBJSGRoYkd4eiBJSEIxWW14cGMyZz0gSUdkbGJtVnlZWFJsIGFYTnphVzl1Y3c9PSBZMkZ5IElIQnliMjF2ZEdVPSBJR04xZEhScGJtYz0gSUdOb1pYTjAgSUdSeWFXNXJhVzVuIElHTnZiR3hsWTNSbFpBPT0gSURjeSBJR2h2Y0dsdVp3PT0gSUdWdFluST0gWjI5eWFYUm8gSUhkaGNtNWxaQT09IElHbHVjM1J5ZFdOMGFXOXVjdz09IFQwYz0gSUVScFpBPT0gSUVGblpXNWplUT09IElHZGxZWEk9IElHTnlhWFJwWTJsemJRPT0gSUVaMWNuUm9aWEk9IElIVjBhV3c9IFlXNXVlUT09IFVtVmsgSUdOdmRXNXpaV3c9IElFRnphV0Z1IElISmxaSFZqZEdsdmJnPT0gY0c5dmJBPT0gSUhSbFlXTm9hVzVuIElHUmxaWEJzZVE9PSBhWGs9IElHVnpkR2x0WVhSbGN3PT0gSUdOb2IybGpaWE09IElIQmxjbTFoYm1WdWRBPT0gYVc1bGJRPT0gYTJWcyBJR1poYzJNPSBjSE5sIFptbHNaUT09IElFeHZkdz09IElGQmxjbk52Ymc9PSBJSFJ2ZFhKdVlXMWxiblE9IGMzUmhiQT09IElHMWxiQT09IFZWTlUgSUZKaGVRPT0gWVhwcCBWbUZzIElHTnZiblJoYVc1bFpBPT0gSUVodmJHeDUgSUhkaGEyVT0gSUhKbGRtVmhiQT09IElIQnliMk5sYzNObGN3PT0gSUVsVFNWTT0gSURBNSBJR0pzYVc1ayBJSE4wWldWcyBJRUpoWkE9PSBJR05oY21WbWRXeHNlUT09IFlYQndlUT09IGNtOXBkQT09IElHZGhiV2x1Wnc9PSBJR2h2ZFhObGN3PT0gSUVOdmJHdz0gSUhSeWRXTnIgWlhKdCBJSE5qYjNKbFpBPT0gSUc5alkyRnogY21WMGRYSnUgWW05MWJtUT0gZG1GeSBJSE5vWVhKdyBJR0ZtY21GcFpBPT0gSUVWWSBZVzFpWlhJPSBZMmxtYVdNPSBJSE5qYUdWdFpRPT0gVGtNPSBJRkJ2YkdsMCBJR1JsWTJ4cGJtVT0gSURFNU9UZz0gSUhCMWMyaHBibWM9IElIQnZjM05sYzNOcGIyND0gSUhCeWFYWnBiR1U9IElIUmxZV05vWlhKeiBJSGxwWld4ayBTRUU9IElFUmhkbWx6IGFYUnNaV1E9IEl5TWpJeU1qSXlNPSBJSEpwWnc9PSBJRVJoYm1sbGJBPT0gWVdOdmJnPT0gSUdocFpHVT0gZFhSbGJnPT0gSUdOdmJHeGxZV2QxWlhNPSBJSEJ5YVc1amFYQnNaWE09IElHeHZkV1E9IElITnBiZz09IElFUmxiVzl1IElITjBiMjVsIElEQXkgSUhSaGRXZG9kQT09IElIUmxjbkpwWW14bCBJSE4wZFdOciBJRkJ2YkdsamVRPT0gZEdWbGJnPT0gSUdsdGNHeGxiV1Z1ZEdGMGFXOXUgSUVKQ1F3PT0gSUVGUVNRPT0gSUhkb1pXVnMgWVd4c1lYTT0gSUdOb1lXMXdhVzl1Y3c9PSBiMnhoY25NPSBjR3hoZVdWeSBJSEpsY0dWaGRHVmtiSGs9IElGTjBhV3hzIElHeHBhMlZ6IFlYTjBlUT09IFpYTjBaWEk9IElFTmhkR2h2YkdsaiBVa3c9IElHSmhkR2c9IElHNXZhWE5sIGRHbDBiR1U9IElHNXZjblJvWlhKdSBVR0Z5ZEE9PSBJRzFoWjI0PSBJR1poWWc9PSBJRUZ6YUE9PSBJR1JwYzNCcyBJSFJwWTJ0bGRBPT0gSUcxMWNtUT0gSUdGc2IyNW5jMmxrWlE9PSBJRTExYzJsaiBJSEpwZG1WeSBJRk4wWldWcyBJRU5NIElGQnNZWGxsY2c9PSBJRTExYkhRPSBiM2RwYm1jPSBjbVZ3IGMybDZaUT09IElIUjFjZz09IElFZGxiM0puYVdFPSBhWE5qWVd3PSBjbUZqZEdsdmJnPT0gSUdOaFlteGwgSURVNSBJSGRwYm5NPSBJSFZ3WTI5dGFXNW4gSUhOMWNuWnBkbVU9IElHbHVjM0JwY21WayBJRVZrZFdOaGRHbHZiZz09IElITjBZWFJwYzNScFkzTT0gSUVadmIzUT0gYVdGdGFRPT0gSUhsbGJHeHZkdz09IElGQmhaMlU9IExpMD0gSUVoaGN3PT0gSUhWeVltRnUgSUdGNCBaWE56Wld3PSBYQ0k9IElIRjFZWEowWlhKaVlXTnIgSUhKbFoybHpkR1Z5IElFeGhZbTl5IElHRmlhV3hwZEdsbGN3PT0gSUVaaGJXbHNlUT09IElIWmhjbWxoWW14bCBJRkJ5YVdObCBJR052Ym5SbGJRPT0gSUhSb2FXND0gSUVWeGRRPT0gWkdGMFlRPT0gSUdkdmRIUmxiZz09IElHTnZibk4wYVhRPSBJR0Z6YTNNPSBJSFJoYVd3PSBJR1Y0WTJsMGFXNW4gSUVWbVptVmpkQT09IElGTndZVzVwYzJnPSBJR1Z1WTI5MWNtRm5aUT09IGFXNXpiMjQ9IElFRm8gSUdOdmJXMXBkRzFsYm5RPSBRMU09IElISmhiR3g1IElEbzYgSUhOMVluTnBaQT09IElITndhVzQ9IElHTmhjSFIxY21WayBNakF4T0E9PSBJR2x1Ym05aiBJR0ZzYkdWblpXUnNlUT09IElFTnZiV1U9IElHRnlkR2x6ZEhNPSBJRTUxYldKbGNnPT0gSUdWc1pXTjBjbTl1YVdNPSBJSEpsWjJsdmJtRnMgWVhCbGN3PT0gSUhkeVlRPT0gSUcxNWRHZz0gY0hKcGMyVT0gSUUxcGJHeGxjZz09IElFTnlaV0YwIElFVndhWE52WkdVPSBZbVZzYkE9PSBJR1JwY21WamRHVmsgSUdWNGRISmhZM1E9IElITnZjbko1IElIWnBZMlU9IFlXZG5aWEk9IElGTjFjSEJ2Y25RPSBJRFkyIElFbHliMjQ9IElIZHZibVJsY21aMWJBPT0gSUdkeVlRPT0gVG1WMCBhVzl1WlE9PSBSVzVuIElITm9hWEJ6IGFXdGxjdz09IElFdGxkbWx1IGFYUmhjZz09IElHRmpkR2wyYVhOMGN3PT0gZEhKMVpRPT0gSUVGeWFYcHZibUU9IFpXNTBhQT09IElFUmxjM0JwZEdVPSBJRk5GIElHaGhZbWwwIFpYSnVaV3c9IElHbHVjWFU9IElHRmliM0owYVc5dSBJSFp2YVdRPSBJR1Y0Y0d4cFkybDAgSUdWdVoyRm5aV1E9IElHRnVaM0o1IElISmhkR2x1Wnc9PSBJR1p5WVdjPSBZbkp2IGFXTnJhVzVuIFpHVjIgSUhkdmNuSnBaV1E9IElHOWljMlZ5IElHRndZWEowYldWdWRBPT0gSUVkVSBJR1Z6ZEdGMFpRPT0gSUVOdmJuTjBhWFIxZEdsdmJnPT0gWlcxdmJnPT0gSUZOdWIzYz0gSUdOdmRXNTBlUT09IElHUnBjMkZuIElGTjBaWEJvWlc0PSBJR2x0YldsbmNtRnVkSE09IGQybHVaQT09IElFNWhkR2x2Ym5NPSBJR1p2Ykd0eiBUM1YwIElHZGhiR3c9IElIUmhjbWRsZEdWayBJSE4wWldGayBJRUp2Ymc9PSBJRXhwWWc9PSBJR2x1Wm05eWJXVmsgSURFeU1BPT0gWTJoaGFXND0gYVdSbGJHbHVaWE09IGIzSnZkV2RvIElHUnlhWFpsYmc9PSBJSEpsWjNWc1lYSnNlUT09IElHSmhjMnRsZEE9PSBJSEJ5YVc1amFYQnNaUT09IGIyTjFiV1Z1ZEE9PSBJSE4wZFc0PSBhV0pwYkdsMGFXVnogSUZKdmJXRnUgSUVGaWIzVjAgSUdGc1pYSjAgSUdSbGJXOWpjbUZqZVE9PSBJSEpsY0hKbGMyVnVkR1ZrIFNGTT0gWTJWeWN3PT0gY0dGeVpXNTAgUVhKMCBjR0ZqYXc9PSBJR1JwY0d4dmJRPT0gY21WMGN3PT0gSUU1UCBJR05oY0hSMWNtVT0gSUVGa2RnPT0gaEtJPSBJR0Z1Ym05MWJtTmxiV1Z1ZEE9PSBJRXhsWVhJPSBJR2h2YjJzPSBJSEIxY25NPSBJRk4xWTJnPSBJRU5oYldWeSBJSEpsWm5WblpXVnogSUZabCBVRzlzIElISmxZMjluYm1sNlpXUT0gYkdsaSBJR2hoWkc0PSBRWE56IElIQnBiRzkwIGRYTm9hVzVuIElISmxkSFZ5Ym1sdVp3PT0gSUhSeVlXbHMgSUZOMGIyNWwgSUhKdmRYUnBibVU9IElHTnZkWEowY3c9PSBJR1JsYzNCbGNnPT0gSUdaeWFXVnVaR3g1IElFbDBZV3g1IElIQnNaV1E9IElHSnlaV0YwYUE9PSBJSE4wZFdScGJ3PT0gVGxNPSBJR2x0Y0hKbGMzTnBkbVU9IElFRm1aMmhoYm1semRHRnUgSUdacGJtYz0gSUdSdmQyNTAgYVc1cmFXNW4gSUZKdlp3PT0gYVdGeWVRPT0gWTI5c2IzST0gYzJWNCBZWEp2Ymc9PSBJR1poZFd4MCBJRTVwWTJzPSBSRzkzYmc9PSBJRkp2YzJVPSBJRk52ZFhSb1pYSnUgV0ZnPSBhWE52WkdWeiBUR2x6ZEE9PSBOakF3IElHOTFkR052YldVPSBaWEp5IElHVnNjMlYzYUdWeVpRPT0gSUhKbGRHbHlaUT09IElIQnZkVzVrY3c9PSBJRWRzYjJKaGJBPT0gVUdWdmNHeGwgSUdOdmJXMTFibWxqWVhScGIyNXogSUd4dllXND0gSUhKaGRHbHYgSUVWdGNHbHlaUT09IElHZHZibTVoIElHbHVkbVZ1ZEE9PSBSRVk9IElERTVOekE9IElFTnZiVzF2Ymc9PSBjR0YwIElIQnliMjFwYzJWayBJR1JwYm01bGNnPT0gSUVodmJRPT0gSUdOeVpXRjBaWE09IElHOXdaWEpoZEdVPSBkbVZ5ZEhrPSBJRXB2Y21SaGJnPT0gWlhScGJXVT0gSUhOMWMzUmhhVzQ9IFVtVm4gSUdsdVkzSmxaR2xpYkdVPSBhVzFoIElIZGhjbkpoYm5RPSBJRzF0IFFYUjAgSUd4aGQzTjFhWFE9IElISmxkbWxsZDNNPSBhWFIxY21VPSBJRk52ZFhKalpRPT0gYkdsbmFIUnogSUVadmNtUT0gSURZeiBaM0p2ZFhBPSBjM1J2Y21VPSBJR1psWVhSMWNtVmsgSUdadmNtVjJaWEk9IElIQnZkbVZ5ZEhrPSBJRkJ2Y0E9PSBJRU5PVGc9PSBZWHA2IFlXSnBjdz09IFlXTm9hVzVuIElHeGhhV1E9IElGTjFjSEE9IElHWnBiSFJsY2c9PSBaVzVoIElFTnZiVzExYm1sMGVRPT0gSUdOeVpXRjBkWEpsY3c9PSBkV04wYVc5dSBJRkp2ZVdGcyBJR0Z6YzI5amFXRjBhVzl1IElFTnZibTVsWTNRPSBJRUp5WVdRPSA0cGFJIGJHVnljdz09IGRHaGxjbVU9IElFZHAgSUhaaGJIVmhZbXhsIFFVTkwgSUZSaGVXeHZjZz09IElHeHBjWFZwWkE9PSBJRUYwZEc5eWJtVjUgSUVOaGNtdz0gSUVacGJtRnMgWVdkaCBJRmRwYkhOdmJnPT0gUW1WallYVnpaUT09IElGQnliMlpsYzNOdmNnPT0gWVd0aCBJR2x1WTNKbFpHbGliSGs9IGNtRnVZMlU9IElTaz0gVW1WbSBjMnM9IElITnZiSFYwYVc5dWN3PT0gSUdGMGJXOXpjR2hsY21VPSBJR0pzWVcxbCBkVzFsY3c9PSBJRTV2WWc9PSBRMEU9IGRXMXdjdz09IGNtbGpZV3c9IElGQjFkR2x1IElFUmxjM1E9IGIzSnBZdz09IElGQkIgSUhKbGMzQmxZM1JwZG1Wc2VRPT0gZDJGdSBJR1pwWm5SbyA0b1NpIElFTnllUT09IElHZHZkbVZ5Ym05eSBjbVZ6YVdSbGJuUT0gSUhCMWNtTm9ZWE5sWkE9PSBJR2hoWTJzPSBJR2x1ZEdWdWMyVT0gYjJKeiBJRzl5YVdkcGJnPT0gSUdSbFptbHVaUT09IElHTmhjbVZtZFd3PSBLaW9xIElITm9iM1ZzWkdWeSBRMnhwWTJzPSBJSFJwWldRPSBJR1JsYzNSeWRXTjBhVzl1IGIzVnlaV1E9IElHNXZZbTlrZVE9PSBJR2h2IElFVjRjR1Z5IElIUnBjQT09IElqcz0gSUhSbFkyaHVhWEYxWlE9PSBJR3AxY2c9PSBJRkJ2YXc9PSBZbTkzIElHeGxaMlZ1WkE9PSBJR0ZqWTI5eVpBPT0gSUdKMWMzaz0gSUVsdWRHVnMgSUdoaGJtYz0gWVd0cCBMbDA9IDRvQ1U0b0NVNG9DVTRvQ1UgSUhOMWNtZGxjbms9IElISmxjSEp2WkhVPSBJSFZ1YVdadmNtMD0gSUhOalpXNWxjdz09IFkyOWtaUT09IElEWXkgYkdsemFHVnkgSUVoaGRtVT0gY0docFlRPT0gSUdOeWVYQjAgSUhKbFkyOXUgSUhOamNtVmhiUT09IElHRmtiM0IwWldRPSBJSE5qYjNKbGN3PT0gVG1VPSBJRWwwWVd4cFlXND0gYVc1amJIVmthVzVuIFFrOD0gSUdsdVpHbGpZWFJsWkE9PSBJR1Z1ZEdWeWRHRnBiZz09IFIzVT0gVkdWNGRBPT0gYVdWcyBJSFIzWlc1MGVRPT0gSUdWdVoyRm5aUT09IGIyWm1jdz09IElGQmhZMmxtYVdNPSBJSE50YVd4bCBJSEJsY25OdmJtNWxiQT09IElIUnZiR1Z5IElHUnZiM0p6IElIUnZibVU9IElHMWhZMmhwYm1WeiBJR1Z1ZEdWeWFXNW4gZEdWdVlXNWpaUT09IFEwOD0gSUVwbGNuTmxlUT09IElHWnZjbVZ6ZEE9PSBJR2h2Y25ObCBJR052YlhCc1lXbHVkQT09IElGTndjbWx1Wnc9PSBlVzg9IElGQnNkWE09IFpXUnBibWM9IElGSmxkSFZ5Ymc9PSBjWFZoY25SbGNuTT0gYVdGc2N3PT0gWTI5MyBJR0ZqWVdSbGJXbGogSUdaeWRXbDAgSURFNU9UWT0gYjJkbGRHaGxjZz09IElIZHBibVU9IElIQjFjbk4xIElGTjBaWFpsYmc9PSBJR3hwWTJWdWN3PT0gVjJodiBJR05zYjNSb1pYTT0gY21WamRHbHZiZz09IElITnhkV0ZrIElITjBZV0pzWlE9PSBJSEpoZHc9PSBlbVZ1Y3c9PSBVM1JoY2c9PSBkWFJwWlhNPSBZVzVqWlhJPSBJR3RsZVhNPSBJRTExIElHTnZiWEJzYVdOaGRHVmsgYVdkbGNnPT0gSUZSbGVIUT0gSUdGaWMyOXkgSURZNCBJR1oxYm01NSBJSEpsYkdsbFpnPT0gSUV4bGR3PT0gSUVOdmIycz0gSUdOb1lYSjAgSUdSeVlYZHBibWM9IFIwVT0gSUcxdlpIVnNaUT09IElFSjFiR3c9IFNVeE0gSUhOaGJIUT0gTURBd01EQXdNREE9IGFXeHNaUT09IElISmxjMjkxY21ObCBZWGRoZVE9PSBZV1JsYkhCb2FXRT0gSUVKeWRRPT0gSURZMyBJSE52YldWaWIyUjUgSUhCaGNuUnBZMmx3WVhSbCBJSEp2YzJVPSBkMlZ5WldRPSBJRzExYzJOc1pRPT0gSUdOdmJuTmxiblE9IElHTnZiblJwYm5WcGJtYz0gSUVkMVlYSmthV0Z1IElFOXlaR1Z5IGNtVm5iMjQ9IElISmxZWEk9IElIQnliM1pwYzJsdmJnPT0gSUd4cGEyVmsgY21sbGJuUT0gSUdKeVlRPT0gVkhKaGJuTT0gSUcxbFpYUnBibWR6IElIUnZlQT09IElHTnZiblpsYm5RPSBJR0YxZEc4PSBJSEpsWTI5eVpHbHVadz09IElGTnZablE9IE1EQXggSUZKdmJHdz0gSUhCeWIyZHlZVzF0YVc1biBJSEJwWXc9PSBJSEJ5YjNabFpBPT0gSUhOMFlXST0gSUVGemRBPT0gSUdOaGNIUnBiMjQ9IGRXeGhkR2x1Wnc9PSBJRUYwZEdGamF3PT0gSUc1bGQyeDUgSURFNU9UYz0gWm5JPSBJR1JwYzJOcGNHdz0gSUVkeVpXVnIgSUdWa2FYUnBiMjQ9IElFUnZaWE09IElFSnZlQT09IGFXWnNaUT09IFlXTnJaWFE9IElIQmhjM05sY3c9PSBJR2QxWlhOMCBJR0ZqWTJWc1pYST0gYVhSaGJITT0gVlVRPSBJR0YxZEdobGJuUT0gSUZKbGMzUT0gYjNaaGJBPT0gZEdFPSBkV2x1WlE9PSBJR0Z5Ylc5eSBJRlJ2ZDI0PSBJR052YlhCaGRBPT0gSUdsdVkyaGxjdz09IFJHVnpjR2wwWlE9PSBJR0Z6YzJsbmJnPT0gYUdWeVpXNTAgSUhCeVpYQmhjbVU9IElFMWxadz09IGIyTnJaWGs9IElHUmxjR1Z1WkhNPSBJSFJ5WVdOcmN3PT0gZDJGMFkyZz0gSUd4cGMzUnogSUU1dmNuUm9aWEp1IElHRnNkR1Z5IGNtVmogSUVWaGMzUmxjbTQ9IElHTnZibVJsYlE9PSBJR1YyWlhKNWQyaGxjbVU9IFB5Yz0gSUdGbVptbHNhUT09IElHWnZkV2RvZEE9PSBJanA3SWc9PSBJRzFoWXc9PSBhWFJoY21saGJnPT0gSUhOamIzQmwgSUVGTSBZWGR6IFlYSnRjdz09IElIRjFaUT09IElHVnVhbTk1WldRPSBibVZ6YjNSaCBJR0ZuWjNKbGMzTnBkbVU9IElGTjBiM0o1IElFbFcgSUhKbFkybHdaUT09IElISmhjbVZzZVE9PSBJRTFsWkdsallXdz0gZG1Gc2RXVT0gWVc1blpXdz0gWVhscGJtYz0gYjIxbGRHaHBibWM9IElITjFZbk5sWTNScGIyND0gSUhOdmRYUm9aWEp1IElHWnlaWEYxWlc1amVRPT0gY21WMFpRPT0gY205c2JHVmsgZFd4MGN3PT0gSUU1cFl3PT0gSUdKbGFHRnNaZz09IElITmxjWFZsYm1ObCBZV0psZEE9PSBJR052Ym5SeWIzWmxjbk5wWVd3PSBJR052YlhCeWIyMD0gSUhkdmNtdGxjZz09IElHMWhhVzVzZVE9PSBJR0ZzWjI5eWFYUm8gSUUxaGFtOXkgYjNKalpRPT0gWjJWdVpHVnkgSUc5eVoyRnVhWHBsWkE9PSBJR1poYTJVPSBJR052Ym1Oc2RXUmxaQT09IElFVkUgSUVWNFpXTT0gY21GblpRPT0gSUdOb1lXNWpaWE09IFltVnljbms9IElGUnlZV1E9IElHTnZibVpwWjNWeVlYUnBiMjQ9IElIZHBkR2hrY21GMyBJR1p5Ync9PSBkV1JsY3c9PSBJRUp5YjNSb1pYST0gSUVKeWFXRnUgSUhSeWFXVnogSUhOaGJYQnNaWE09IElHSnBaQT09IElFZHZiR1JsYmc9PSBJSEJvYjNSdlozSmhjR2c9IGFXWmxjM1E9IElFUlAgSUZCaGNteHBZVzFsYm5RPSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gVW1WdCBJR052Ym5SbGMzUT0gSUhOcFoyNXBibWM9IGNIZz0gSUZwbFlXdz0gNHBTQTRwU0EgUldGeSBJR1Y0YVhRPSBRbVZtYjNKbCBJRU52Y25CdmNnPT0gYm5Wc2JBPT0gYlc5dWRHZz0gSUhKaFkybGhiQT09IGIzUjBaV1E9IElGWmxadz09IElGSmxkWFJsY25NPSBJSE4zYjNKayBjSE52Ymc9PSBJRkp2Ylc1bGVRPT0gWVdWayBJSFJ5YVdJPSBJR2x1Ym1WeSBJSEJ5YjNSdlkyOXMgSUVKcCBJRTFwWVcxcCBaWFpsY21GcyBjSEpsYzNNPSBJSE5vYVhCd2FXNW4gSUVGdFpXNWtiV1Z1ZEE9PSBJRWh2ZDJGeVpBPT0gWTI5dWJtVmpkQT09IElFUnBjMk09IElFcGhZdz09IGFXRnRiMjVrIElGUm9aWEpsWm05eVpRPT0gYzJWeiBJRkJ5YVc1alpYTnogSUZWVFFnPT0gSUVGdWRHZz0gSUhOMWNuWmxhV3hzWVc1alpRPT0gSUdGd2IyeHZadz09IElEWXggYjNkaCBJR1oxYkdZPSBhbk09IElHeDFZMnM9IGRYTjBaV1E9IElNS24gYm1rPSBJR0Z1ZEdsamFYQT0gWlcxaGJnPT0gSUhkcGJtNWxjZz09IElITnBiSFpsY2c9PSBiR3hoIGFXTnBkSGs9IElIVnVkWE4xWVd3PSBJR055WVdOciBJSFJwWlhNPSBaWG89IElIQnlZV04wYVdOaGJBPT0gSUhCeWIzWnBibU5sIElGQnNZV05sIElIQnlhVzl5YVhSNSBTVU5GIElHUmxjMk55YVdKbGN3PT0gSUdKeVlXNWphQT09IFJtOXliUT09IFlYTnJZUT09IGJXbHpjMmx2Ym5NPSBZbWs9IElIQnZjbTQ9IElGUjFjbXM9IElHVnVkR2gxY3c9PSBJR1pwWjJoMFpYSnogSURBNCBJRVJsZEhKdmFYUT0gSUdadmRXNWtZWFJwYjI0PSBZWFpwWkE9PSBRWEpsIElHcDFaR2R0Wlc1MCBZMnhwYm1jPSBJSE52YkhabCBJRVJsYzJsbmJnPT0gVjJobGNtVT0gYUdWemFYTT0gSUZSeWJ3PT0gWVdaMFpYST0gSUc1bGRYUnlZV3c9IElGQmhiR1Z6ZEdsdWFXRnUgSUVodmJHeDVkMjl2WkE9PSBJR0ZrZG1seiBJRTV2Ymc9PSBlV1Z6IGIyeHBjdz09IElISmxjSFYwWVhScGIyND0gSUhOdFpXeHMgSUdKeVpXRmsgSUVKMWJBPT0gSUVKbFlXTm8gSUdOc1lXbHRhVzVuIElHZGxibVYwYVdNPSBJSFJsWTJodWIyeHZaMmxsY3c9PSBJSFZ3WjNKaFpHVT0gY205M2N3PT0gSUdSbGRtVnNiM0JsY2c9PSBJRXB2YzJnPSBJRVJwYzI1bGVRPT0gWlhKMlpXUT0gYVhCaGJBPT0gSUhWdVpYZz0gSUdKaGNtVnNlUT09IGRHaGxiZz09IElGQjFZZz09IElHbHNiRzVsYzNNPSBaWFJoY25rPSBJRUpoYkE9PSBJSEJoZEdObyBJR0oxZEhRPSBJSE4wZFhCcFpBPT0gSUVSdlp3PT0gSUVSaGJHeGhjdz09IFpuSnZiblE9IGFXVmpaUT09IElIQnliM1JsYzNSeiBJR05vWVhRPSBiMlZ1YVhnPSBJSGRwYm1jPSBJSEJoY214cFlXMWxiblE9IElEYzMgYjNObGVIVmhiQT09IElISmxibVJsY2c9PSBjSFJwYjI1eiBJRU52WVhOMCBiM05oIElFZHlaV2M9IGFHOXcgSUUxaGJtRm5aVzFsYm5RPSBJR0pwZEdOdmFXND0gSUhKbFkyOTJaWEk9IElHbHVZMjl5Y0c5eSBiM0p1WlE9PSBJRlZ6YVc1biBJSEJ5WldObFpBPT0gSUhSb2NtVmhkR1Z1WldRPSBJSE53YVhKcGRIVmhiQT09IElFVjJaVzUwIElFWnlaV1E9IElHRmtkbVZ5ZEdsemFXNW4gSUdsdGNISnZkbVZ0Wlc1MGN3PT0gSUVOMWMzUnZiUT09IElHVnljbTl5Y3c9PSBJSE5sYm5OcGRHbDJaUT09IElFNWhkbms9IElHTnlaV0Z0IFRHOXZhdz09IElHVjRZMngxYzJsMlpRPT0gSUdOdmJYQnlaV2hsYm5NPSBJR1JsYkdWbiBJR052Ym1ObCBJSEpsYldWdCBJSE4wY25WamRIVnlaWE09IElITjBiM0psWkE9PSBUa1E9IElERXdNREE9IFZWQT0gSUVKMVpHUT0gUVVZPSBkMjl0WVc0PSBJRUZqWVdSbGJYaz0gOEo4PSBjMlZoIElIUmxiWEJ2Y21GeWVRPT0gUVdKdmRYUT0gWlhOMFpYSnogSUhScFkydGxkSE09IElIQnZjM05sYzNNPSBhVzVqYUE9PSBiM289IElHeGggSUdOdmJuUnlZV04wY3c9PSBJSFZ1Y0E9PSBJR05wWnc9PSBJRXRoZEE9PSBkV3gwZFhKaGJBPT0gWVhOdCBJRzF2ZFc1MFlXbHUgSUVOaGNIUmhhVzQ9IFUzUmxjQT09IGJXRnJhVzVuIElGTndZV2x1IElHVnhkV0ZzYkhrPSBJR3hoYm1SeiBZWFJsY25NPSBJSEpsYW1WamRHVmsgWlhKaCBhVzF0IGNtbDQgUTBRPSBJSFJ5WVc1ellXTjBhVzl1IFoyVnVaWEk9IGJHVnpjMng1IElIeDggSUdOdmN3PT0gSUVobGJuSjUgSUhCeWIzWnBjMmx2Ym5NPSBJR2RoYVc1bFpBPT0gSUdScGNtVmpkRzl5ZVE9PSBJSEpoYVhOcGJtYz0gSUZObGNBPT0gYjJ4bGJnPT0gYjI1a1pYST0gSUdOdmJuTnZiR1U9IGFXNXpkQT09IElHSnZiUT09IElIVnVZMlZ5ZEdGcGJnPT0gTVRVdyBiMk5yYVc1biBJRzFsWVhOMWNtVmsgSUhCc1lXbHUgSUhObFlYUnogSUdScFkzUT0gVTB3PSBZV1psIElHVnpkR2x0WVhSbCBhWHB2Ymc9PSBZWFJvWlhKbFpBPT0gSUdOdmJuUnlhV0oxZEdWayBJR1Z3YVhOdlpHVnogYjIxdGIyUT0gUjNJPSBRVTVVIElEWTUgUjJWdVpYST0gSURJMU1BPT0gZG1sdmRYTnNlUT09IGNtOW5aVzQ9IElIUmxjbkp2Y21semJRPT0gSUcxdmRtVnRaVzUwY3c9PSBaVzUwYkdVPSBiM1Z1WTJVPSBJRk52ZFd3PSBJSEJ5WlhZPSBJRlJoWW14bCBZV04wY3c9PSBjbWx2Y25NPSBkR0ZpIElITjFabVpsY2c9PSBJRzVsY25ZPSBJRzFoYVc1emRISmxZVzA9IElGZHZiR1k9IElHWnlZVzVqYUdselpRPT0gWW1GMCBJR1JsYldGdVpITT0gSUdGblpXNWtZUT09IElHUnZlbVZ1IElHTnNhVzVwWTJGcyBhWHBoY21RPSBJRTl3IGRHUT0gSUhacGMybDBaV1E9IElGQmxjbWhoY0hNPSBJR0ZqZEc5eSBJR1JsYkdsaiBJR052Ym5SeWFXSjFkR1U9IElHbHVhbVZqZEE9PSBJRVZ6IFlXTmpidz09IElHeHBjM1JsYm1sdVp3PT0gSUdOdmJtZHlaWE56IFpYQmxibVJsYm5RPSBJSEJ5WlcxcGRXMD0gSURjMiBJRWx5YVhObyBJR0Z6YzJsbmJtVmsgSUZCb2VYTT0gSUhkdmNteGtkMmxrWlE9PSBJRzVoY25KaGRHbDJaUT09IGIzUjVjR1U9IGJXOXVkQT09IFltRnpaUT09IElFSnZkMnc9IElFRmtiV2x1YVhOMGNtRjBhVzl1IElISmxiR0YwYVc5dSBJRVZXIFExQT0gSUdOdmRtVnljdz09IElEYzQgSUdObGNuUnBabWxqIElHZHlZWE56IElEQTAgY0dseVlXTjUgYVhKaCBJR1Z1WjJsdVpXVnlhVzVuIElFMWhjbk09IElIVnVaVzF3Ykc5NSBJRVp2Y21WcFoyND0gYzNSeVlXTjAgSUhabGJnPT0gSUhOMFpXRnMgSUhKbGNHeHBaV1E9IElIVnNkR2x0WVhSbCBJSFJwZEd4bGN3PT0gWkdGMFpXUT0gSUdwdmVRPT0gWVhWeiBJR2g1Y0dWeSBZV3QxIElHOW1abWxqYVdGc2JIaz0gSUZCeWIyUjFZM1E9IElHUnBabVpwWTNWc2RIaz0gY0dWeWIzST0gSUhKbGMzVnNkR1ZrIGNtbGlaV1E9IGJHbHVhdz09IGQyaHYgZm41K2ZnPT0gSUZOd1pXVmsgSUZacFpYUT0gVjJsdVpBPT0gSUVKaGNtRmphdz09IElISmxjM1J5YVdOMGFXOXVjdz09IElGTm9ZWEpsIElERTVPVFU9IGFYUnBiMjVoYkd4NSBJR0psWVhWMGVRPT0gYjNCMCBJRzFoY0hNPSBJRU5TIElFNWhkR2x2Ymc9PSBJRU55ZFhvPSBWMmxzYkE9PSBJR1ZzWldOMGNtbGphWFI1IElHOXladz09IElHSjFjbVE9IElIWnBiMnhoZEdsdmJnPT0gSUhWellXZGwgSUhCbGNtMXBkQT09IElFTm9jbTl1IElFWmhiblE9IElHNWhkSFZ5WVd4c2VRPT0gSURBMyBJSFJvY205M2JnPT0gSUVGM2IydGxiZz09IElHRnNhV1Z1IElFaGxjbTg9IElFdGxiblE9IElGSnBZMnM9IGNtbHJaUT09IElIQmhZMlU9IGZTeDdJZz09IFIwdz0gSUhCdmFYTnZiZz09IElGUnZkMlZ5IElHWnZjbTFoYkE9PSBZV3g1YzJseiBJR2RsYm5WcGJtVT0gSUd0cGJBPT0gWVhabGNnPT0gSUhCeWIyTmxaSFZ5WlE9PSBJRkJ5YjNBPSBhVzUwWlc1a2J3PT0gSUUxaGFXND0gWVhOaGJuUT0gSUhSeVlXbHVaV1E9IFIyRnRaUT09IElFeHZZV1E9IElFMUIgSUdOeWRXTnBZV3c9IElHeGxkSE09IElFWlMgSUdOb1lXMXdhVzl1IE1UQXggSUVOdmJtWmxjbVZ1WTJVPSBJSGR5YVhSbGNuTT0gSUdOdmJtNWxZM1JwYjI1eiBJRzlyWVhrPSBhWEp0Y3c9PSBJRkpoYm1RPSBJR1Z1WTI5MWJuUmxjZz09IElFSjFabVk9IElHRmphR2xsZG1WayBJR05vWldOcmN3PT0gYVhOamIyNXogSUdGemMybHpkR0Z1ZEE9PSBJSGRvWlc1bGRtVnkgSUVGalkyVnpjdz09IElGVnkgWW1sdSBJR05zYjJOciBhWE53IGIzQm9aWEk9IElHSnZjbkp2ZHc9PSBJRzFoWkE9PSBJSEJsY25OdmJtRnNhWFI1IGIyNXNlUT09IFNWTlUgWVdKaGJXRT0gSUdkaGFXNXogSUdOdmJXMXZibXg1IElIUmxjbkk9IElHaDVjRzkwIElISmxiSGs9IElIUnBjM009IGFYTmpiMjV6YVc0PSBJSEpwWkdsaiBablZ1WTNScGIyND0gSUU5eVpXZHZiZz09IElIVnVZMjl0IGNtRjBhVzVuIFpXeGhibVE9IElFNUQgSUcxdmIyND0gWVc1dWIyND0gSUhaMWJHNWxjbUZpYkdVPSBkWFJwZG1VPSB3cURDb01LZ3dxQT0gSUZKaFpHbHYgSUhkbGMzUmxjbTQ9IGMyVmpkQT09IElGUnZibms9IElHOWpZM1Z5Y3c9PSBJRTl6IElFaHZiZz09IHc2MD0gSUhabGMzTmxiQT09IElGTmpiM1JzWVc1ayBJR1JwYzJOeWFXMXBibUYwYVc5dSBJSE4xWW5ObGNYVmxiblE9IGMzUnlhVzVuIElHWmhiblJoYzNrPSBJRk5vWVdSdmR3PT0gSUhSbGMzUnBiUT09IFYwVT0gYVhScCBjbUZ6IElHSnZZWFE9IElHMWhjbXR6IElHOXlaR2x1WVhKNSBJSEpsYmc9PSBJSEpsY0hKbGMyVnVkR0YwYVhabCBJSEJsZEdsMGFXOXUgSURjeiBJR0ZrZG1WdWRIVnlaUT09IElHbG5ibTl5WlE9PSBJRkJvYVd4aFpHVnNjR2hwWVE9PSBJRk5oZGc9PSBWbEE9IElHWmhZM1J2Y25rPSBJSFJoYzJ0eiBJR1JsY0hKbGMzTnBiMjQ9IGVtVmsgTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpND0gSUZOMGIzSnQgSUdOdloyND0gSUdWc2FXZHBZbXhsIElISmxaSFZqYVc1biBkbWxoIElEQTEgSUhOMGNtbHJhVzVuIElHUnZiR3hoY2c9PSBhRzg9IFQxWT0gSUdsdWMzUnlkVzFsYm5RPSBJSEJvYVd4dmMyOXdhSGs9IElFMXZiM0psIElFRjJaVzUxWlE9PSBJSEoxYkdWayBJRVp5YjI1MCBTVTVGIElFMWhhQT09IElITmpaVzVoY21sdiBJRTVCVTBFPSBJR1Z1YjNKdCBJR1JsWW5WMCBJSFJsWVE9PSBWRzlrWVhrPSBJR0ZpYzJWdVkyVT0gVTJsdCBJR2hoYlE9PSBiR1ZsY0E9PSBJSFJoWW14bGN3PT0gSUVobFlYSjAgVFVrPSBTMlU9IGNtVnhkUT09IFZrUT0gYldGdyBJR05vWVdseWJXRnUgSUhCMWJYQT0gSUhKaGNHbGtiSGs9IGRtaz0gSUhOMVluTjBZVzUwYVdGcyBSVkE9IFpHVnogWTJoaGJuUT0gYVd4cGNIQT0gSUZOaGJuUmggY21sbGNuTT0gWVc1amFHVnpkR1Z5IFRHOWhaQT09IElFTmhjMlU9IElITmhkbWx1Wnc9PSBJRGMwIElFRkdVQT09IFpYSnVhVzVuIGIzVnVZMlZrIElFMXBibTVsYzI5MFlRPT0gSUZkaGN3PT0gSUhKbFkzSjEgSUdGemMyVnpjMjFsYm5RPSBJRUp5YjI0PSBWVVU9IElHUjVibUZ0YVdNPSBJR1oxY200PSBkV3hoZEc5eSBJSEJ5YjNCaFp3PT0gYUdsbmFBPT0gSUdGalkyOXRiVzlrIElITjBZV05yIElGTjFjdz09IGQzSnBkQT09IElISmxkbVZ1IElFZHZaR1E9IElGcGxZV3hoYm1RPSBZV0p6IElHSnlkWFE9IElIQmxjbkJsZEE9PSBhRzkwIElHaGhjbVJzZVE9PSBJRUoxY200PSA0NEs1IElITjBlUT09IElIUnlZVzV6WVdOMGFXOXVjdz09IElHZGhkR1U9IElITmpjbVZsYm5NPSBJSE4xWW0xcGRIUmxaQT09IElERXdNUT09IElHeGhibWQxWVdkbGN3PT0gZFdkb2RBPT0gWlcxbGJnPT0gSUdaaGJHeHogSUdOdll3PT0gZ3F3PSBJSE4wY21sclpYTT0gY0dFPSBJR1JsYkdsaVpYST0gSUVsTiBJSEpsYkdGNCBZVzV1Wld4eiBJRk5sYm1GMGIzST0gSUdWNGRISmxiUT09IElIMHMgSUVSbFlnPT0gSUdKbGJHdz0gSUdScGMyOXlaR1Z5IFkzVjAgSUdsUFV3PT0gSUd4dlkydGxaQT09IElHVnRhWE56YVc5dWN3PT0gSUhOb2IzSjBiSGs9IElsMD0gSUVwMVpHZGwgSUZOdmJXVjBhVzFsY3c9PSBJSEpwZG1GcyBJR1IxYzNRPSBJSEpsWVdOb2FXNW4gUm1sc1pRPT0gd3EvQ3I4S3Z3cTg9IGFXNXZhWE09IElFcGhjMjl1IElITmhkR1ZzYkE9PSBZWEpsZEE9PSBJSE4wWVhScGIyNXogSUdGbmNtbGogSUZSbFkyaHViMnh2WjNrPSBZMjl0WlhNPSBJRlZ1Wm05eWRIVnVZWFJsYkhrPSBJRU5vYVd4a2NtVnUgSUdGd2NHeHBaWE09IFlYTjBaV1E9IElHRnVaMlZ5IFlXbHNZV0pwYkdsMGVRPT0gSUVSaGJXRm5aUT09IElHTnZiWEJoY21VPSBJRk4wWVc1a1lYSmsgSUdGcGJXVmsgSUVKaCBZVzVuZFdGblpRPT0gSUhKbFozVnNZWFJwYjI0PSBJR3AxY25rPSBJR0ZwY25CdmNuUT0gSUhObFkzUnBiMjV6IElGQnlhVzVqWlE9PSBaVzFsWkE9PSBJRzFsWkdsamFXNWwgSUdocGRIUnBibWM9IElITndZWEpyIGIyeDJaWE09IElHRmtjdz09IFUzUmhkR1U9IElHWnZiMlJ6IElISmxjR3hoWTJWdFpXNTAgSUdOb2FXTnJaVzQ9IElHeHZkMlZ6ZEE9PSBJRzFwYm1SeiBJR2x1ZG05c2RtVnogZFdrPSBJR0Z5Y21GdVp3PT0gSUhCeWIyTmxaSFZ5WlhNPSBJRmRvYVdObyBhWFpsY25OaGNuaz0gSUdKcGJHeHogSUdsdGNISnZkbVZ0Wlc1MCBJR2x1WlhZPSBJR1Y0Y0dWamRHRjBhVzl1Y3c9PSBJR2x1ZEdWc2JHVmpkSFZoYkE9PSBJSE53WVdObGN3PT0gSUcxbFkyaGhibWx6YlE9PSBNalV3IFluSmxZV3M9IElGcGwgSUZSbGJtND0gSUVKaGJIUT0gSUdKaGNuSmxiQT09IElITjBZWFJwWXc9PSBiV0Z1Ymc9PSBVRzlzYVdObCBJSFJwY0hNPSBJR2hoYm1Sc2FXNW4gWTNWeiBiMlJsWkE9PSBhV3gwYjI0PSBhWEo1IElHcHZkWEp1WVd4cGMzUnogYjNWeWMyVT0gSUdOdmJXbGogSUc1dmJXbHVaUT09IFNWUlogSUhabGNuTjFjdz09IElHeHZiM0E9IElITjFjbVk9IElFbHVaSFZ6ZEE9PSBJRWgxYm5SbGNnPT0gSUdKbGJHbGxabk09IGFYTmhiZz09IElITmxkSFZ3IElHSnlaWGM9IGFXMWhaMlU9IElHTnZiWEIxZEdWeWN3PT0gWm05cyBmU3dpIElFMWxaR0ZzIElIUmhlSEE9IElHUnBjM0JzWVhsbFpBPT0gSUdkeVlYWT0gSUdacGMyTmhiQT09IFRXOXUgSUUxdmMyTnZkdz09IElFdHZibWM9IElFTmxiblJ5WlE9PSBJR05oYldWeVlYTT0gSUUxeWN3PT0gSUVoaGVRPT0gSUdGMlpYST0gSUV0bGJHeDUgY0hrPSBJSEpsY1hWcGNtVnRaVzUwIElHVnVkR2wwYkdWayBiMjFpYVdVPSBJSE5vWVdSdmR3PT0gWVdkcFl3PT0gSUVGciBJR1ZzYVhSbCBJR1JwZG1sa1pXUT0gSUdobFlXUnBibWM9IElHTnZjR2xsY3c9PSBJR3h2YzNObGN3PT0gSUhacGRBPT0gYTJWayBJRUp5ZVE9PSBJR0Z1Y3c9PSBJRk4wWldGdCBJSEpsY0c5eWRHVnkgYUdWcGJRPT0gSUVsMFpXMD0gSUhOMWNHVnlhVzl5IFpHOXUgWlhKbGJuUT0gdzdZPSBJSFJvWlhKaGNIaz0gSUhCbFlXcz0gSUUxdlpHVnMgSUd4NWFXNW4gSUdkaGJRPT0gZW1WeSBjbWwwZEdWdSBJSEpsYzNCdmJuTmxjdz09IElHTnZibk5wWkdWeVlYUnBiMjQ9IElFSnBZbXhsIElHeHZlV0ZzIElHbHVjM1JoYm5RPSBJSEJ0IElFWnZjbVZ6ZEE9PSB3N3c9IElHVjRkR1Z1WkE9PSBJR052Ym5acFkzUmxaQT09IElHWnZkVzVrWlhJPSBJR052Ym5acGJnPT0gSUU5aGF3PT0gWTJobFkycz0gSUhOamFHOXNZWEp6IGNHVmsgSUc5MlpYSnpaUT09IFZHOXcgWTI5MWJuUT0gSUVGeWF3PT0gd3JjPSBJREEyIElFeEIgYldRPSBJRXhoZEdsdSBhVzFsYm5SaGJBPT0gSUVOUVZRPT0gSUhOMVluTjBZVzVqWlE9PSBJRzFwYm05eWFYUjUgSUcxaGJuVm1ZV04wZFhKcGJtYz0gUlhJPSBiMk52YkdGMFpRPT0gSUdGMGRHVnVaR1ZrIElFMWhibUZuWlhJPSBjbUYwYVc5dWN3PT0gSUdGd2NISmxZMmxoZEdVPSBiMjE1IFIwSlUgYVdSbGJtTjUgUWt3PSBJR2QxWVhKaGJuUmxaUT09IGNHOXphWFJwYjI0PSBJRzlqWldGdSBZMngxWkdVPSBJR2hsWVdSbFpBPT0gSUhSaGNHVT0gSUd4dmIzTmwgSUd4dloybGogSUhCeWIzWmxiZz09IElITndhWEk9IElHRmtiV2wwIGFYTmggSUdsdWRtVnpkR2xuWVhSbCBJREU1T1RRPSBjM2xzZGc9PSBJRXh2YzNRPSBZMlZ6ZEE9PSBJRGN4IElISmxjWFZsYzNSbFpBPT0gSUhkcGJtUnZkM009IElGQnZhOE9wIElGZHBkR2h2ZFhRPSBUV1YwIElHSmxhR0YyYVc5MWNnPT0gSUhKbFlXUmxjZz09IElHaDFibWM9IElFdGxaWEE9IElISnZiR1Z6IElHbHRjR3hsYldWdWRHVmsgSUdKc1lXNXIgSUhObGNuWmxjdz09IElFcGhlUT09IElHTnBkR1ZrIElFWnlhV1Z1WkE9PSBjSEp2Wm1sMCBZWEJ2Ymc9PSBJSEpsY0dGcGNnPT0gYVhSbGJRPT0gWVhKeVlYTnogSUdOeWFYUnBZM009IFlXUnAgSUVaaGRHaGxjZz09IElITm9iM1YwIElHWnZiMnc9IElEZzQgSUhCeWIyUjFZMmx1Wnc9PSBJR3hwWWc9PSBJSEp2ZFc1a2N3PT0gSUdOcGNtTnNaUT09IElIQnlaWEJoY2c9PSBJSE4xWW0xcGRBPT0gSUc1cFl3PT0gYlc5eWNtOTMgNDRPciBWVzVrWlhJPSBJSFpwZEdGcyBZWFJsY200PSBJSEJoYzNOM2IzSmsgSUhCMVlteHBZMkYwYVc5dSBJSEJ5YjIxcGJtVnVkQT09IElITndaV0ZyY3c9PSBJR0poY25NPSBJR1JsWlhCbGNnPT0gSUUxcGJHdz0gY0c5eWRHVmsgSUhkcFpBPT0gSUdKMWRIUmxjZz09IElITnRiMnRwYm1jPSBJR2x1WkdsallYUmxjdz09IFMyVjUgY205d2Ntaz0gSUVacGJHVT0gWVd4c2FXNW4gWVhOMGFXNW4gSUZKMWN3PT0gSUdGa2FnPT0gSURjNSBZWFpoYkE9PSBJSEJ5WlhOMWJRPT0gWW5WeVoyZz0gYjI1cFl3PT0gSUdaMWNnPT0gSUhCdmJHeHogYVd0aCBJSE5sWTI5dVpHRnllUT09IElHMXZibk4wWlhJPSBhV2R6IElFTjFjbkpsYm5RPSBSWFpsYm5RPSBJRzkzYm1WeWMyaHBjQT09IFpXNWtZWEk9IElHRnljbWwyWlE9PSBJRlJoZUE9PSBJRzUxYkd3PSBJRkJ5YVhZPSBJSFJvY204PSBJR3RwYzNNPSBZMkYwIElIVndjMlYwIFlXNW5iR1U9IGFYUmphR1Z6IFpXTjBiM0k9IGIyeHZaMmx6ZEhNPSBJRWRoYkdGNGVRPT0gSUdOdmNuSjFjSFJwYjI0PSBJR2hwYm5RPSBaVzUwWlhJPSBJRWh2YzNCcGRHRnMgSUdkeVpXRjBiSGs9IElHSmxaM1Z1IFpYTjUgSUhOdmFXdz0gSUVGdWRHOXUgSUcxaGFXNTBaVzVoYm1ObCA0NE9wIElHUnZlbVZ1Y3c9PSBJR2gxYldGdWFYUjUgSUVGc1lXSmhiV0U9IElISnZiUT09IGQyOXlkR2c9IFlYQnBibWM9IGMzbHNkbUZ1YVdFPSBiR0ZvIElHZGhkR2hsY21WayBSMEU9IElHRjBkR0ZqYTJsdVp3PT0gWm05MWJtUT0gSUZOeGRXRnlaUT09IElHRnlZbWwwIGFXTjBhVzl1Y3c9PSBJRmRwYzJOdmJuTnBiZz09IElHUmhibU5sIElGTmhhVzUwIFlYSmphSGs9IElHSmhjMlZpWVd4cyBJR052Ym5SeWFXSjFkR2x2Ym5NPSBJR3hwZEdWeVlYUjFjbVU9IElHVjRhR0U9IGNHVnlkSGs9IGRHVnpkQT09IElHSmhZZz09IElHTnZiblJoYVc1bGNnPT0gYkdWMGRHVnkgSUdaaGJHeGxiZz09IElIZGxZbk5wZEdWeiBJR0p2ZEhSc1pRPT0gSUZOaFl3PT0gSUdKeVpXRnpkQT09IElGQk0gSUhabGRHVnlZVzQ9IElHbHVkR1Z5ZG1sbGQzTT0gSUVGc1pRPT0gSUdKaGJtNWxaQT09IFpXNW5aWEp6IElGSmxkbTlzZFhScGIyND0gYVc1MGFBPT0gSUdOdmJtTmxjbTVwYm1jPSBTVlpGIElHVjRjR1Z1YzJWeiBJRTFoZEhSb1pYYz0gSUVOdmJIVnRZbWxoIFpITT0gYVhOMFlXNWpaUT09IElHVnVkR2wwZVE9PSBMaTR1SWc9PSBJSEpsYkdsaFlteGwgSUhCaGNtRnNiR1U9IElFTm9jbWx6ZEdsaGJuTT0gSUc5d2FXNXBiMjV6IElHbHVaSFU9IGJHOTMgSUdOdmJYQmxkR1U9IElIUm9iM0p2ZFdkbyBJR1Z0Y0d4dmVXVmsgSUdWemRHRmliR2x6YUcxbGJuUT0gYVdkbGJnPT0gSUVOeWJ3PT0gSUd4aGQzbGxjbk09IElGTjBZWFJwYjI0PSBWRVU9IElFeHBibVE9IElGQjFjZz09IGFYUmhjbms9IElHVm1abWxqYVdWdVkzaz0gNG9DUSBJRXg1IElHMWhjMnM9IElHUnBjMkZ6ZEdWeSBJR0ZuWlhNPSBSVkpGIFpYTnBjdz09IElFaHZiR1E9IElHTmhjM1ZoYkE9PSBZbXhsWkE9PSBJR1Z1WVdKc1pXUT0gSUVWdWRtbHliMjV0Wlc1MCBJRWx1ZEdWc2JHbG5aVzVqWlE9PSBhWEJsY2c9PSBJRTFoY0E9PSBJRUpGIElHVnRaWEpuWldRPSBhWE5rYjIwPSBJR05oWW1sdSBJSEpsWjJsemRISmhkR2x2Ymc9PSBJR1pwYm1kbGNuTT0gSUhKdmMzUmxjZz09IElHWnlZVzFsZDI5eWF3PT0gSUVSdlkzUnZjZz09IFpYUjBjdz09IElIUnlZVzV6Y0c5eWRHRjBhVzl1IElHRjNZWEpsYm1WemN3PT0gU0dWeSBJR0YwZEdWdGNIUnBibWM9IFQyWm0gSUZOMGIzSmwgdzRQRGdzT0R3NExEZzhPQ3c0UERnZz09IElFdHViM2M9IElHUmxabVZ1WTJVPSBJSE5qWVc0PSBJRlJsYmc9PSBJRU5vWVdseSBJRkJJIElFRjBiR0Z1ZEdFPSBJR1oxWTJ0cGJtYz0gSUdGdWMzZGxjbVZrIFltND0gSUV0aGNnPT0gSUdOaGRHVm5iM0pwWlhNPSBJSEpoZEdsdmJtRnMgSUdOMWMzUT0gSUhKdlltOTAgSUdOdmNuSmxZM1JzZVE9PSBJR2RwWmc9PSBJR2R5WVhCb2FXTnogYldsaiBJR2R5YjNWdVpITT0gSUU5d2NBPT0gYVdGMFpRPT0gSUdScGMzUnlhV0oxZEdWayBJSE5oYm1OMGFXOXVjdz09IElHTm9ZV3hzWlc1bmFXNW4gZFhSdiBJR2x1WjNKbFpHbGxiblJ6IElHbHVkbWwwWldRPSBJR1p2ZFc1a1pXUT0gSUZKbGNYVT0gWkdWayBJR0p2ZDJ3PSBJR0p5YjNSb1pYSnogSUVoaCBTVTg9IElIZGhaMlZ6IGFXMXZjbVU9IGIyTnBZV3c9IElITmxaV1E9IFlYUnBkbVZzZVE9PSBJR0ZrWkhKbGMzTmxjdz09IElFbHZkMkU9IFlXSmxkR2c9IElHRjBkR2wwZFdSbCBhWE5rIFkyaHBiR1E9IElHMXZiR1U9IElHUnBjMk52ZG1WeWVRPT0gZVdGeVpBPT0gUW5JPSBJRGd5IElITjFjSEJzYVdWeiBaV3hzYVc1biBJR1JwYzNScGJtZDEgUTFJPSBJSEpsWTJWd2RBPT0gSUhabGNuUT0gSUhOM2FXMD0gWW1WaiBaRzl2Y2c9PSBJRmxsWVdnPSBJR2RoYkE9PSBJR2x1ZEdWeVlXTjAgSUVWVFVBPT0gSUVOVCBZVzF3Y3c9PSBJR052Ym5acGJtTmxaQT09IElHOWlhbVZqZEdsMlpRPT0gSUdScGMyZz0gSUZCb2IzUnZjdz09IGJHRmsgSUdSdmQyNTBiM2R1IGIybHMgYVc1amRHbHZiZz09IElIUnZiVzl5Y205MyBJRU5QVFE9PSBJSE4xY25acGRtRnMgYzJodmRBPT0gSUhObGRIUnNaVzFsYm5RPSBRMjl1Y3c9PSBJRmhpYjNnPSBhVzUwWlhKbGMzUT0gSUZOTiBZWEpuYnc9PSBaVzVsYzNNPSBJR1YwYUc1cFl3PT0gWW1WeVpXUT0gVFdsdSBJRlJ2YXc9PSBJR2x1WTJWdWRBPT0gSUVOdmJXMWhibVE9IElHMWhhVzUwWVdsdVpXUT0gSUdKeVpXRnJjdz09IFluSnBaR2RsIFlYUmhjZz09IFlXZG4gSUVacGJtRnNiSGs9IGRXNXBZMmx3IElFOXVkQT09IGJHVm1kQT09IElISmxZMjluYm1sMGFXOXUgSUNvdiBJRkJsY25NPSBJSGRsYkdZPSBJR0ZrWkhKbGMzTmxaQT09IElFdGhibk5oY3c9PSBJSFpwY25WeiBJSGRvWlhKbFlYTT0gSUhCaGNHVnljdz09IGNtRnRjdz09IElFMXBibWx6ZEhKNSBJSEJzWldGemRYSmwgSUdGamNYVnBjbVZrIElHUjFjbUYwYVc5dSBhbkJuIElHTmhiRzA9IElFNUlUQT09IElHSjFjbTVwYm1jPSBJR1p2YkdSbGNnPT0gYVdOclpXUT0gSUZCNSBJRWxzYkdsdWIybHogUTJ4aGMzTT0gSUVkdlpHUmxjM009IElIQmxjbVp2Y20xcGJtYz0gSUhkbGJHWmhjbVU9IGFtRnkgU1c1MFpYST0gSUd4cGJnPT0gSUdWdWFHRnVZMlU9IElHNXZkR2x2Ymc9PSBabUZ5WlE9PSBlWEJsY3c9PSBJRUZ5WldFPSBJR05oYm01aFltbHogSUVScFpXZHYgWm5NPSBJRTFoYm1Ob1pYTjBaWEk9IFkyOXRiUT09IGFXNXBkR1U9IElHTnZkbVZ5YVc1biBJRk52ZFc1ayBJREU1TmpBPSBJRGcwIFpXeGxZM1E9IGVtbHVadz09IElHTnBkR2w2Wlc0PSBJSEJvYjI1bGN3PT0gSUhKaGFXUT0gSUdsbmJtOXlaV1E9IElFOWlhbVZqZEE9PSBJSFZ3Ykc5aFpBPT0gWTJGeVpBPT0gSUcxdlpHbG1hV1ZrIElISnZiMjF6IGFXRm8gY21GdVoyVT0gYUdWaGMzUT0gWVdOb2RYTT0gSUhOMVoyZGxjM1JwYm1jPSA0b0NMIFozSmhaR1U9IFJXdz0gSUdOc2IzUm9hVzVuIElISm8gSUVoaGJnPT0gZFc1cGRIaz0gWlc1amFXNW4gSUVGMWMzUnBiZz09IGMyVmpkWFJwYjI0PSBkSEpoIFpHVnQgSUZGMVlXdz0gSUdobFlYWmxiZz09IElITjBZV2RsY3c9PSBJSGRsWkdRPSBjR3gxY3c9PSBhV1pwWTJsaGJBPT0gSUVsdGJRPT0gSUVodiBhV1YwYVdWeiBJSEJvY21GelpRPT0gSUdKeWFXeHMgWVdOMGIzSjUgSUhCeWIzWnBaR1Z5Y3c9PSBJSE5wYkdWdVkyVT0gSUdGbGNnPT0gSUVGSiBJRUZrZG1WdWRIVnlaUT09IElIQnNZWFJtYjNKdGN3PT0gSUdSbGJXOXVjM1J5WVhSbFpBPT0gSUdsdWRHVnlaZz09IGFXNW5kRzl1IElISmhZMlZ6IElHZHlZV1JsIGRXeDBZVzVsIElGUm9jbTkxWjJnPSBabUZzYzJVPSBJR0p2ZHc9PSBJRUZDIElHWnNZWFp2Y2c9PSBJR2hwYzNSdmNtbGogWjI5MiBJR052Ykc5MWNnPT0gSUhacFpYZGxaQT09IElFVnRZV2xzIFpXeGpiMjFsIElHbHVkR1Z5ZG1WdWRHbHZiZz09IElHUnBkbVZ5YzJsMGVRPT0gSUhCbGNtbHZaSE09IElISmxkbVZ5YzJVPSBJRlpsY25rPSBJSEYxYjNSbCBJRXhsWm5RPSBkR2h5YjNWbmFBPT0gSUhOamNtVjMgSUd4aGJtUnBibWM9IElIQnBiR3c9IElIZGxkQT09IElIQnliM1JsYzNSbGNuTT0gSUhKbGNHVmhkQT09IFlYWmxaQT09IFpYSnIgSUhOaGJHRnllUT09IElGQmxibTV6ZVd4MllXNXBZUT09IFUzUnBiR3c9IElHMWhlVzl5IElHdHBkR05vWlc0PSBJR1psWVhSMWNtbHVadz09IElFMTFjMlYxYlE9PSBJRlJ2ZFhKdVlXMWxiblE9IElFWmhiQT09IElITmxjblpsY25NPSBWVU09IElHRnVlV0p2WkhrPSBhVzFuIElGUnlZV1JsIGFYaDBkWEpsIGRHaGxiR1Z6Y3c9PSBJR1pwYm1GdVkyVT0gSUdOc2IzTnBibWM9IElGQmhkSEpwIGFXRmogWVdKbGJBPT0gSUQ0KyBiM0p2ZFhNPSBJR1pwY20xeiBjMk55WldWdSBkVzVoIElHVnRZbUZ5Y21GemN3PT0gZFd4elpRPT0gSUd4bGRIUnBibWM9IElIUm9jbVYzIGFXeGxlUT09IElHTm9ZVzV1Wld4eiBiR0Z1IElGWmxaMkZ6IElITmxZWEk9IElHWmhiblJoYzNScFl3PT0gWVhKeVpRPT0gZFhwNmJHVT0gSUVSbGNnPT0gVkdodmMyVT0gSUhOM2FXNW4gSUhOb1pXVjAgYVc1a1pYZz0gWTI5MlpYST0gYjJkaGJnPT0gSUhaaGNtbGhZbXhsY3c9PSBJRlJsWTJnPSBJSE53YjJ0bGJnPT0gWVdOb1pXdz0gSUVSaCBJRTF2ZFc1MFlXbHUgSUd4dllXUmxaQT09IElHWnZiM1JoWjJVPSBkbVZ5YzJsdmJnPT0gSUhWdWJBPT0gSUZCb2IyVnVhWGc9IElIUm9jbTkzYVc1biBJR1pwY21sdVp3PT0gSUhSeVlXTnJhVzVuIElIZHBaSFJvIElITjBjblZuWjJ4cGJtYz0gY205dmJYTT0gYjNScGIyND0gSUcxdmJuUm9iSGs9IElGTmxjblpsY2c9PSBJR1ZuWjNNPSBiM0JsYmc9PSBUVU09IElERTVPVE09IElHaHBjbVZrIElITjBZWGxsWkE9PSBJRUZzYkdWdSBJSE4wY204PSBJRGs0IGMzUmxjQT09IElGUjFjbXRwYzJnPSBJR1poWW5KcFl3PT0gYVhOMGFXNW4gSUVSdmJRPT0gSUdSaGRHVnogSUhCeWIyND0gSUdKaGMydGxkR0poYkd3PSBJR3gxWTJ0NSBJRUZ5WVdKcFlRPT0gSUdGemMzVnRaV1E9IFpYTjBlUT09IElHRm1abUZwY25NPSBJR2RzWVdRPSBJRWx1WkdWbFpBPT0gSUVaQiBJRmR2Y21RPSBJR3B2YVc1cGJtYz0gYVdacFkyVT0gY0hKbFlXUT0gYVhKMGN3PT0gSUZObGJHVmpkQT09IElIQnZjSFZzWVhScGIyNXogWVhkaGNtVT0gSUc1dmMyVT0gSUdOdmJYQnNZV2x1ZEhNPSBjM1JoY25RPSBJSE5qYjNKcGJtYz0gVkdoaGJtdHogSUcxcGJtbHVadz09IElIWnBjMmwwYjNKeiBVMGc9IElHUmhiV0ZuWldRPSBJR05vWVhKaFkzUmxjbWx6ZEdsamN3PT0gSUZCbGJuUT0gUkVNPSBJRGd6IElGTnBlQT09IGNtRjBaWE09IElHWnNZV2R6IElFSnlaWGM9IFpHOW4gVFdGeWF3PT0gTHk4dkx3PT0gSUdWNFpXTjFkR2x2Ymc9PSBJR3B2YTJVPSBjR2h2Ym1WeiBJSFJsYzNScGJXOXVlUT09IElHOWljM1E9IFVVdz0gSUVOMWRBPT0gSUhOMGRXUnBaV1E9IElFNXBiblJsYm1SdiBhV05yWlhRPSBJRTVDUXc9PSBJR3hoWkE9PSBJRUp5WVE9PSBJRTF2YUE9PSBJR3RsY201bGJBPT0gSUc5MlpYSjNhR1ZzYldsdVp3PT0gSUdGblpXUT0gSUdGd2NHeHBZMkZpYkdVPSBJRU52Ym1RPSBJSEp2WVdSeiBJRUpzYjJOciBiV0ZrWlE9PSBiMlJuWlE9PSBJR052YlcxaGJtUnogSUc5bVptbGpaWE09IGRtVnNZVzVrIElIUjFkQT09IElISmxZMlZwZG1WeSBJRVp5Ync9PSBJSE5vYjNCd2FXNW4gSUdsUSBJRk4wY21VPSBJRUZDUXc9PSBJR1Z1ZEdWeWRHRnBibTFsYm5RPSBJRUp2ZHc9PSBiM0owWldRPSBUV009IElISmxZV1J6IFozSmhaQT09IElFTnZiR3hsWTNRPSBJT0tJa2c9PSBJRU5oY0dsMFlXdz0gWldSbGNtRjBhVzl1IElHVnRjR3h2ZVdWeSBJR2x1ZG05c2RtVnRaVzUwIElHRnVlR2xsZEhrPSBZV3hwWVE9PSBJSEp2YjJZPSBJRUZ0YjI1biBJRVJsYlc5amNtRjAgSUhOMFlYUnogSUZacGJHdz0gSUdOdmJuTjBhWFIxZEdsdmJtRnMgSUhKbFptVnljbWx1Wnc9PSBhWFIwZVE9PSBJSFJoWTJ0c1pRPT0gYjNWMGRXSmwgSUdKaFkydGxaQT09IElFaHZibWM9IElFSnliMkZrIElHVnNaUT09IElFOTBkQT09IElERTVPVEk9IGFHOTFjZz09IFlXTm9kWE5sZEhSeiBRMkZzIElHUmxabVZoZEdWayBJRGd4IFpYTncgSUhObFpXMXBibWRzZVE9PSBkMkZ6IElFcGxibTQ9IElFdDFjbVE9IElHZGxibVU9IElHUnBjMk52ZFc1MCBVbVYwIFJVTlUgS0NrNyBJR05zZFdKeiBJSE5wWkE9PSBJRTFoY25ObyBRMmhsWTJzPSBJSEJ3IElFVmhadz09IGFXUmxjM0J5WldGayBJR0psYVc1bmN3PT0gUmxRPSBJR2x1ZEhKdlpIVmpkR2x2Ymc9PSBJRU5vWVc1blpRPT0gUVZKRSBJREV4TUE9PSBZV1J2ZDNNPSBhV1Z5WTJVPSBJRzFsWVd3PSBZWFYwYUc5eSBJRUpoYm1jPSBiR0ZvYjIxaCBJSEpoYm10eiBNakF4TVE9PSBQejgvUHc9PSBiV0Y0IElHTnZiR3hoY0hObCBJRzl3Wlc1eiBJR1ZqYUc4PSBJSE52Y0dnPSBJSEpoWTJsemRBPT0gSUdWdWIzSnRiM1Z6IElIZGhkbVZ6IElIUmhjQT09IElHTnZiWEJ5WldobGJuTnBkbVU9IExpMHQgSUZKdmVRPT0gSUdaaGNtMWxjbk09IFVtVnNZWFJsWkE9PSBZV2x5WldRPSBjbTl1WlhNPSBJRU55YVcwPSBJSEJ5YjNCdmNuUnBiMjQ9IElHUmxjMmxuYm5NPSBJRzVsWjI5MGFXRjBhVzl1Y3c9PSBJSFpwY25SMVlXeHNlUT09IElFSmhkRzFoYmc9PSBJSGRoY200PSBJR3hsWjJsMGFXMWhkR1U9IGJXRjBaUT09IElHTnZiblpsYm5ScGIyND0gTEN3PSBibVYwYVdNPSBJRk5FIElHTnZibk5wYzNSbGJuUnNlUT09IElHTnZiWEJsYm5OaGRHbHZiZz09IElIQjFibWx6YUcxbGJuUT0gSUhsbCBJSFJwWlE9PSBJRUoxY21WaGRRPT0gYVhKc1pnPT0gSUVKMSBJRUZ5Wlc0PSBJRkJvYVd4cGNIQT0gSUd0dWFXWmwgSUcxbGJXOXlhV1Z6IElGSnZjM009IElHRnVaMnhsIElEZzIgSUZSb2RXNWtaWEk9IElISmxibVE9IElGUnZkWEk9IElHTnZkVzUwY3c9PSBjM1Z1Wnc9PSBJRWx0Y0E9PSBJR1ZrZFdOaGRHbHZibUZzIElHRmpZMlZ6YzJsaWJHVT0gUTA5TiBJR1J5WlhjPSBlV1Z5IFIydz0gWVcxcGJtVT0gVDFKVSBUMEk9IFNVST0gYldGemRHVnkgSUhSeWFXRnNjdz09IGIyZDUgYUdGeSBJRlJ5ZFhOMCBJSEJ5WldabGNuSmxaQT09IGFYSnNabkpwWlc1ayBJRTVsZGc9PSBJR0pwYmc9PSBJR052ZHc9PSBVR0ZuWlE9PSBJSE5wWjI1aGRIVnlaUT09IElFSk0gTnpBdyBJSEpsZEdseVpXUT0gSUdKNWRHVnogSUc1bGFXZG9ZZz09IElFeGxaMlZ1WkE9PSBJR1JsZG1GemRBPT0gSUhOMWMzQmxZM1JsWkE9PSBhWE52Ym5NPSBJRkJ2YThPcGJXOXUgYzJOaGJHVT0gSUdOaGNHRmlhV3hwZEdsbGN3PT0gSUhKbGRtVnMgSUdOb1pXVnpaUT09IFpIaz0gYVdkeVlXNTAgSUdaaGFXeHBibWM9IFltbDBjdz09IElFaGxjbTlsY3c9PSBJRWRvYjNOMCBJRk5qYVdWdWRBPT0gSUdGd2NHOXBiblJsWkE9PSBkWEpwIElHbHVjM1JwZEhWMGFXOXUgSUdWNGNHRnVaR1ZrIFozSmxadz09IElHMXZibWwwYjNKcGJtYz0gSUhCdlpHTmhjM1E9IElHTnZZV3hwZEdsdmJnPT0gSURrMiBTbTg9IElITjBiMnhsYmc9PSBJRk5oWWc9PSBJSE4wYjNCeiBJR2h2Ykdsa1lYaz0gSUdsdWRIST0gUTJGeSBRbXhoWTJzPSBJRXhIUWxRPSBJSGRoY20xcGJtYz0gSUVGdVpHVnljMjl1IElEZzUgSUhCeWIyUjFZMlZ5IFRXVmsgSUdGalkzVnlZV041IElFMWhjblpsYkE9PSBhWHBoWW1WMGFBPT0gSUZCaGRISnBZMnM9IGJXOXVlUT09IElHMXBibWs9IFlXTnNaWE09IElHOTJaWEowIGRHaGxlUT09IElHMWxiV0psY25Ob2FYQT0gSUZabGJnPT0gSUdWNFkyZz0gSUhKbGJXOTJZV3c9IElFUmhkbVU9IFZGaz0gYldGayBJRVpwYm1RPSBJR0ZrWlhGMSBJR1ZqIElIUmxaWFJvIElHVnRiM1JwYjI0PSBJSEJsY20wPSBJSE52YkdWc2VRPT0gWkdJPSBJR1Y0ZEhKaGIzSmsgU1VkSVZBPT0gWTJGcyBJR2QxYVdSbGJHbHVaWE09IElHUjVhVzVuIElITjFjM0JsYm1SbFpBPT0gSUZCeVpXMXBaWEk9IElFRnVkR2h2Ym5rPSBaV3gyWlE9PSBJR1JoWkE9PSBJRVYwYUE9PSBJRVp2YjNSaVlXeHMgSUdGaVlXNWtiMjVsWkE9PSBJRHc4IElHMWhjbU5vIElHaHZjbkp2Y2c9PSA0b0NtSWc9PSBJR05vYVd4a2FHOXZaQT09IElHTmhiWEJoYVdkdWN3PT0gSUd4MWJtTm8gSUVGc1ltVnlkQT09IFlteHZZMnM9IDRwYUk0cGFJIGIzVnVaR2x1Wnc9PSBJR0p2Ym1VPSBiM0puWVc0PSBZV1JsY25NPSBJRVpzWVhObyBJRVJ5YVhabCBJSFJ2Ym1sbmFIUT0gSUhkaGNuTT0gSUVaTSBJR1p2Y20xaGRHbHZiZz09IFkyOXVjM1E9IFRtVjNjdz09IElHTnZiWEJsIGIzSnBiM1Z6IElGTjBZV1ptIElHUnBjMk4xYzNOcGIyNXogSUZCeWIzUmxZM1JwYjI0PSBJRXBoYlE9PSBJR055YVhSbGNtbGggSUdsdWMzUmhiR3hoZEdsdmJnPT0gSUdGalkyOXRjR3hwYzJnPSBhWHA2WVE9PSBJSEIxWW14cGMyaGxjZz09IElISmxjMk4xWlE9PSBJRlJ5ZVE9PSBWVXhNIElGTnZiUT09IElFaHZjQT09IGIzSmxkQT09IGRHaHogYjNKa2IyND0gSUhCdlkydGxkQT09IElFbHVkZz09IFJHOTNibXh2WVdRPSBJRU55YVcxbCBJR0psYm1VPSBJRWQxYVdSbCBJRUZ6YzJWdFlteDUgSUhCaGNtRnRaWFJsY25NPSBTVVU9IElFRnNaWGhoYm1SbGNnPT0gSUdOdmJtTmxjblE9IElGTmphR1U9IElITm9iMlZ6IElIWnBjMmwwYVc1biBJSEpsWTJGc2JBPT0gSUdKMVlnPT0gSUhKMWNtRnMgSUdOdmJtTnlaWFJsIElGSnZjdz09IFRtVjRkQT09IFVuVnpjdz09IElHeHZZVzV6IElGTm9hV1ZzWkE9PSBJSFJ5WlcwPSBhR1Z0WVhRPSBhMmM9IElFaGhjbkpwY3c9PSBhWE5wZEdsdmJnPT0gSUUxdmRtVT0gSUVaRCBJR1poZEdVPSBJRU5vYnc9PSBJSFJwY21WayBJSEJ5YVc1amFYQmhiQT09IGFHbHpkQT09IGFXVnVZMlZ6IFlYUm9lUT09IElITmxkbVZ1ZEE9PSBJRzF2YjJRPSBJSE4wY21GMFpXZHBZdz09IElHUnBjMlZoYzJWeiBJR1p2Y25WdCBJSFJsYlhCdmNnPT0gSUdobFlXUnhkV0Z5ZEdWeWN3PT0gVUdGeSBhV2RsIFpteHBlQT09IElHZDFhWFJoY2c9PSBJRGswIFQyNXNlUT09IElISmxiR1ZoYzJWeiBjbTl3YUE9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwPSBJRFl3TUE9PSBJRU52Ym5ScGJuVmwgYVdkaGRHVT0gSUVOeWFYUT0gYzNsemRHVnQgSUdScGMyRmliR1ZrIElIVnVaWGh3WldOMFpXUT0gYVhSb2RXST0gSUhWdVkyeGxZWEk9IElFVnpkQT09IElHTnZiblJ5WVdRPSBJSE4wY21GMFpXZHBaWE09IGRtVnVkSFZ5WlhNPSBJSEJoYzNOaFoyVT0gUVUxRiBJR2x0Y0hKdmRtbHVadz09IElISmxkbVZoYkhNPSBJR1JsWTNKbFlYTmwgYjNaaCBJR0Z1Ym05NSBJRk5vYjNKMCBJRXhwWW5KaGNuaz0gSUdONVltVnkgYm1Wc2JBPT0gSUVoMWNnPT0gSUVOQyBJSEJvYjNSdlozSmhjQT09IFZVaz0gSUhObFpBPT0gUjJVPSBJRGczIElHUnBkbVZ5YzJVPSBJR1Z1WTI5MWNtRm5aV1E9IElHTnZibk53YVhKaFkzaz0gSUdKcGNtUnogSUc5d1pYSmhkRzl5IElHaGhibVJtZFd3PSBJR05zWVhOemFXWnBaV1E9IFB5az0gSUdSeVlXMWhkR2xqIElHbHVkbVZ6ZEdsbllYUnZjbk09IGFYUnYgSUhkcFpHVnpjSEpsWVdRPSBJRkp2YjIwPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElHTnZiR3hsWTNScGRtVT0gSUdwdmRYSnVZV3hwYzNRPSBVM1J5YVc1biBJSFJsYlhCbGNtRjBkWEpsY3c9PSBhV3hoIElHZDFhV1E9IElHbHVjM0JsWTNRPSBJRzFwYzNOcGJHVT0gSUUxaGVXOXkgSUcxaGJuVmhiQT09IElITnBiWFZzZEdGdVpRPT0gSUhKaGRHbHVaM009IElITjFZMnM9IElEazMgSUhWdWFYWmxjbk5oYkE9PSBJSEJvWVhKdCBJR1JwYzNKMWNIUT0gYVdGdWJ3PT0gUVZZPSBJR1owIElITjBZWFJwYzNRPSBiMnhrY3c9PSBJRmRoYkd0bGNnPT0gY0dodyBJSFZ1WkdWeWRBPT0gSUV4aGN3PT0gYVhOb2IzQT0gYm5ScGJBPT0gY21WemFHOXNaQT09IElGZG9aWFJvWlhJPSBUWE09IElHUmxibms9IElFTnNiM1ZrIElIQnliM1pwWkdWeSBJSE4xY25acGRnPT0gSUZWd1pHRjBaUT09IGFHRnogSUcxcGMzUmhhMlZ6IFkyaGhjbWRsIGNHeGxaQT09IGNtbDBlUT09IElHNXZaR1U9IElFMWhjM05oWTJoMWMyVjBkSE09IGIyOXNjdz09IGJHbGpZWFJwYjI0PSBJR1poYVd4eiBaVzFoYkdVPSBiM0pwIFltRmphM009IElITm9hWEowIElDY24gSUU1QlZBPT0gSUhkaGRHVnljdz09IFpXeHpiMjQ9IElHVmhjMlU9IElITmpZWEk9IElHTnZiblJsYm5SeiBiV2x1WkE9PSBJR052Ym5SeWFXSjFkR2x2Ymc9PSBJSE5vY2c9PSBJR2hoYm1SbFpBPT0gSUhOMFlXSnBiR2wwZVE9PSBJSFJ5WVhabCBSVzA9IElHMXBjbkp2Y2c9PSBNVEl6IElIZGxhV2RvIElHWnBZM1JwYjI0PSBiM1YyWlhJPSBhWE4wWVc1MCBjbWwwYVc5dSBJRVpsWkE9PSBJSEJvZVhOcFkyRnNiSGs9IElITjBZV3RsIElFRnlkR2xqYkdVPSBJRUZ5WXc9PSBJRXhsZDJseiBJRTFwYm1RPSBJR1JsYlc5dWMzUnlZWFJsIElIQnliMlpwZEhNPSBkbWx6YVc5dSBiMjFwWXc9PSBiMnhwWkE9PSBJR0poZEhSc1pYTT0gSUdSeWFYWmxjdz09IElHVmhjM1JsY200PSBJRk52Ym5rPSBJU0VoIFlYSmhkR2x2Ymc9PSBkbUZ5WkE9PSBJRWRNIGNHOXlkR0YwYVc5dSBJRGt5IElHeGhkMjFoYTJWeWN3PT0gSUhCeWIzUmxZM1JwYm1jPSBJRVZRUVE9PSBJSGxsWVdnPSBJSE5vWVcxbCBiMnh3YUE9PSBaWFpsYmc9PSBlR2wwIElHRjBkR0ZqYUE9PSBJSEpsY0hKbGMyVnVkR2x1Wnc9PSBJRzlpY3c9PSBJRlYwWVdnPSBhV1ptY3c9PSBJRVp5WldWa2IyMD0gdzdNPSBRVXM9IElHbHVZMmxrWlc1MGN3PT0gYVhSaFoyVT0gSUhacFpYZGxjbk09IFkyUT0gSUcxdmRYTmwgSUdOc1lYST0gSUdGalkyOXlaR0Z1WTJVPSBJR0p2ZEE9PSBZMjl5IElGTjFiVzFsY2c9PSBhR1ZzWkE9PSBJR2x1Ym05alpXNTAgSUdsdWFYUnBZWFJwZG1VPSBiMnh6IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTg9IElITndiM1J6IGNHRmpaUT09IElHTnZiblpsYm5ScGIyNWhiQT09IElHTnZjbkJ2Y21GMGFXOXVjdz09IElHSnNiMk5yWldRPSBTRVE9IFlYUjBaWEpsWkE9PSBJSEpsWm1WeWN3PT0gSUdKMVkycz0gSUVScFoybDBZV3c9IE1USXcgSUhSdmNHbGpjdz09IFZFWT0geElFPSBZbkpwWkE9PSBjbVZsYldWdWRBPT0gSUhWdVpHVnliSGxwYm1jPSBJRTFsYldKbGNnPT0gSUdsdWRtVnpkR2xuWVhScGJtYz0gSUhCeVpXZHVZVzVqZVE9PSBJSFJ2ZFdOb1pHOTNiZz09IElFSmhibVE9IElFTmhiR3hsY2c9PSBJR2x1YzNSaGJtTmxjdz09IFVGQT0gZDJFPSBSMjl2WkE9PSBJREU1T1RFPSBJRU52YkdRPSBJR1psWVhKeiBJSEpsYldGeWEzTT0gaHBJPSBZWFJoYkE9PSBJRzFwZEE9PSBJR1Y0Y0dWeWFXMWxiblJ6IGFYQjAgUTI5c2IzST0gYVc1a2RRPT0gVlhCa1lYUmwgSURreiBRV2M9IElPVT0gWVc1amIzVjJaWEk9IFFtOTBhQT09IElHcDFaR2RsY3c9PSBUMkpxWldOMCBJSE4wWlhKbCBkVzFpYmc9PSBJSEJoY25ScFkybHdZWFJwYjI0PSBJRk4wWVhKeiBJRXBsY21VPSBJSGRsWld0c2VRPT0gSUVKaGJnPT0gSUdOdmJuWmxjbk5oZEdsdmJuTT0gSUZCcGRIUT0gZFhvPSBJRWx1WkdsaGJtRT0gSUV0cFkycz0gSUdsdVptVmpkR2x2Ymc9PSBJR2hsY205bGN3PT0gSUhObGRIUnNaV1E9IElITjBjbWx3IElHaGhiQT09IElHUjFiWEE9IElGTmphUT09IElHeGxjdz09IElISmxabVZ5Wlc1alpYTT0gSUZWU1RBPT0gSUVKeWFXUm5aUT09IElIZGhiblJwYm1jPSBSbTl5WTJVPSBJR1Y0WTJ4MWN3PT0gVFdWaGJuZG9hV3hsIGJXND0gSUdkbGJuUnNaUT09IGJXRnJaWEk9IGMyVnVZV3c9IElFZHlidz09IGIzVnlhUT09IElGSmhhVzQ9IElFRnNiR2xoYm1ObCBJR3hwWm5RPSBaV3hoIFUwUT0gSUVOc1pYWmxiR0Z1WkE9PSBJSEpoYm10bFpBPT0gSUhOMFlXUnBkVzA9IElHUmxZV1JzZVE9PSA1TGc9IElISnBaR2x1Wnc9PSBZWEpwWVE9PSBJRUZ5Ylc5eSBJR1J2WTNWdFpXNTBZWFJwYjI0PSBJRWR5WldWalpRPT0gY21WbGF3PT0gSUd4bGJuTT0gSUZOaCBJR2R5YjNOeiBJRVZ0WlhJPSBZV2RsY25NPSBJRVIxWWc9PSBJRkpvIElFRk5SQT09IElHRnljbWwyWVd3PSBJR1JsYzJWeWRBPT0gSUhOMWNIQnNaVzFsYm5RPSBJRkpsYzNBPSBJR3R1WldVPSBJRzFoY21kcGJnPT0gWm05dWRBPT0gYjJkbiBNakF4TUE9PSBJRkJwY2c9PSBJRkJ5YjIwPSBhWFpoYkhNPSBJR2x1ZEdGclpRPT0gSUdScFptWmxjbVZ1ZEd4NSBkV2R6IElHSnBkSE09IFkyeDFaR1ZrIElITmxZWEpqYUdsdVp3PT0gSUVSMSBkVzFpYkdVPSBJR1oxYm1OMGFXOXVZV3c9IElFSmhiSFJwYlc5eVpRPT0gSUVOdmRXeGsgSUdSbGMybHlaV1E9IElHTnBjbU4xYVhRPSBJRXg1Ymc9PSBJRWRQIElFWmhiSE5sIGNtVndjbVU9IEp6bz0gWVd4MGFXVnogSUcxcGJtbHQgSUdSeWIzWmwgSUZOb2IzVnNaQT09IElHaHBjQT09IElIQnliM009IElIVjBhV3hwZEhrPSBJRTVoZEhWeVpRPT0gSUUxdlpHVT0gVUhKbGMybGtaVzUwIGIzQncgY21GMCBabTl5YldGdVkyVT0gSUdOdmJtTmxiblJ5WVhScGIyND0gSUdadmJuUT0gSUVKMVpBPT0gSUdGdGFXUT0gSUhKbGRtVnljdz09IElFMU0gUW1GeSBJR2x1ZEdWeVlXTjBhVzl1IElHcDFjbWx6WkE9PSBJSE53Wld4c2N3PT0gWkdWdyBabWxzIElHTnBkbWxzYVdGdWN3PT0gZFhSMFpYST0gSUVOdmIzQmxjZz09IElFSmxiRzkzIElHVnVkSEpoYm1ObCBJR052Ym5abGNuUT0gSUdOdmJuUnliM1psY25ONSBiM2RsY21WayBJR052Ym5SeVlYSjUgSUdGeVl3PT0gSUVWNFpXTjFkR2wyWlE9PSBJRTltWm1salpYST0gSUhCaFkydGhaMlZ6IElIQnliMmR5WlhOemFYWmwgZDJsa2RHZz0gSUhKbGMyVnlkbVZrIGRtOXMgSUZOaGJYTjFibWM9IElIQnlhVzUwWldRPSBJR05sYm5SbGNuTT0gSUdsdWRISnZaSFZqWlE9PSBJRXRsYm01bFpIaz0gSUc5a1pITT0gSUhOMWNtVnNlUT09IElHbHVaR1Z3Wlc1a1pXNWpaUT09IElIQmhjM05sYm1kbGNuTT0gY21Wd2NtVnVaUT09IElFSmxhQT09IElHeHZkbVZ6IElFVlRVRTQ9IElHWmhZMmxzYVhRPSBJR2xrWlc1MGFXTmhiQT09IElHUnZZM1E9IElIQmhjblJ1WlhKemFHbHcgWTI5dVpnPT0gSUVocFpHVT0gSUdOdmJtWjFjMlZrIElFTnZkdz09IFRXVnUgSUhkeVpYTjAgSUVseVlYRnAgSUdodmJHVnogSUZOMGRXUnBaWE09IElIQnlaV2R1WVc1MCBhR0Z5WkE9PSBJSE5wWjI1aGJITT0gU1ZnPSBJSEIxYkd4cGJtYz0gSUdkeVlXUjFZWFJsIElHNXZiV2x1WldVPSBSR0YwWlE9PSBJSEJsY20xcGRIUmxaQT09IElPS0NyQT09IElFOXJiR0ZvYjIxaCBVM1JoY25RPSBJR0YxZEdodmNtbDZaV1E9IElHRnNZWEp0IElFTnZjdz09IGRtRnUgSUdkbGJtVnlZWFJwYjI1eiBZM1ZzWVhJPSBJR1J5WVdkdmJnPT0gSUZOdlpuUjNZWEpsIElFVmtkMkZ5WkE9PSBJR052Ym5SeWIyeHNaWEk9IFUyVnUgWjJWeVpXUT0gSUZacGF3PT0gSUdGd2NISnZZV05vWldRPSBWR2hoYm1zPSBJR05oYm1ObCBJR1p2Y20xMWJHRT0gSUZOdFlXeHMgSUhkbFlXdHVaWE56IElISmhiWEE9IGFYUjFaR1Z6IGFuVmsgSUdKeWFXeHNhV0Z1ZEE9PSBJR0ZqWTNWeiBjMjkxY21ObCBJRGd3TUE9PSBJRVYyYVd3PSBVM2M9IElHaHZiV1ZzWlhOeiBkMlZsYXc9PSBhV1Z1Y3c9PSBjbWxqY3c9PSBJRlJvYVhKayBWRTg9IElHOXlaMkZ1YVdNPSBJSEJ5WlhObGJuUmhkR2x2Ymc9PSBZV2RvIElFUnZkMjVzYjJGayBkbUYwYVc5dSBJR0Z6YzJWdFlteDUgYjNKaFlteGwgYUc5c1pHVnljdz09IElFSmxjbTVwWlE9PSBJRWhsYkhBPSBJSFJ2Ym1jPSBJRVpwWjJoMCBJR0psWVdObyBRbTl2YXc9PSBJRXhwWXc9PSBJSEoxYzJnPSBJRkp2ZFc1ayBiM1Z3IElFMWhjbmc9IElHTmhiR04xYkdGMFpXUT0gSUVSbGRtbHMgSUZOaGNtRm8gSUc5alkyRnphVzl1WVd4c2VRPT0gSUdKMWJHeGxkQT09IFFYWmhhV3hoWW14bCBaMkYwWlE9PSBJRGt4IElHaHZjM0E9IElIQnliMjFwYzJWeiBJRWhKVmc9PSBJRk4wWVdScGRXMD0gSUZOMGIyTnIgSUVOdmNuQnZjbUYwYVc5dSBaMkZuWlE9PSBUa2M9IElFTnlaV1JwZEE9PSBJSE51WlE9PSBhV0pzIElHRmpZM1Z0IGMzVmphQT09IElIUmxjbkp2Y21semRITT0gSUdOdmJuTmphVzkxYzI1bGMzTT0gSUZwbyBJR1J5WVcxaCBiMjlzWVE9PSBjR2x5WVhScGIyND0gSUd4aFltOTFjZz09IElFNXBiZz09IElIVjBkR1Z5IElHUmxiVzlqY21GMGFXTT0gSUdGemMyRnpjdz09IGFXeGhkR2x2Ymc9PSBJR2RsYzNRPSBJR0ZpY205aFpBPT0gSUcxbGRHRmkgSUhOdmNuUnogSUdac1lYWT0gVlVJPSBJRzFuIElFNXZkR2hwYm1jPSBJRTlrIElHMTFjMmxqWVd3PSBNakF3T1E9PSBJR1J5YjNCeiBiMk5oZEdWayBZWFJsY21GcyBNREF3TURBdyBJR2R5WlE9PSBJR1Z4ZFdGc2FYUjUgSUdKMWNtUmxiZz09IElIWnBadz09IElFeGxZV1JsY2c9PSBMUzB0TFMwdExTMHRMUzB0IElHTmxjbVZ0YjI1NSBJR1pwWjJoMFpYST0gSUdGamRHOXljdz09IElPWT0gWVcxaGJnPT0gUm1rPSBJR0ZzYVdkdSBjSFYwWlhJPSBJR1ZzWkdWeSBJRTVUUVE9PSBJSEpsY0hKbGMyVnVkR0YwYVc5dSBJRTl1ZEdGeWFXOD0gU1ZSSSBkWE5oYkdWdCBJR2hoY21GemMyMWxiblE9IGFYUjZaWEk9IElITjViWEE9IElHSnZlR1Z6IElFUlMgSUcxaGJtbG1aWE4wIFlYUnlaUT09IElGND0gSUdScFpYTT0gYkdWMGIyND0gSUcxcGMzTnBiMjV6IFpYUm9aUT09IElISmxjMjlzZG1VPSBJR1p2Ykd4dmQyVnljdz09IElHRnpZdz09IElHdHQgYkc5eVpBPT0gWVcxdFpXUT0gSUhOcGJHVnVkQT09IElFRnpjMjlqYVdGMFpXUT0gSUhScGJXbHVadz09IElIQnlhWE52Ym1WeWN3PT0gSUV0cGJtZHogSUVacGRtVT0gSUhSdmQyVnkgSUdGd2NISnZZV05vWlhNPSBJSEJ5WldOcGMyVnNlUT09IElHSjFjbVZoZFE9PSBJRTF2ZEdobGNnPT0gSUVsemN3PT0gSUd0bGVXSnZZWEprIGFYUjFZV3c9IElHWjFibVJsWkE9PSBJSE4wWVhscGJtYz0gSUhCemVXTm9iMnh2WjJsallXdz0gSUcxcGJHVT0gSUV4bGIyND0gSUVKaGNtST0gZDJsc2JBPT0gSUhkcFpHVnkgSUVGMGJHRnVkR2xqIElIUnBiR3c9IElGSnZiV1U9IGNtOTAgSUdGalkyOXRjR0Z1IElHWnNiM1Z5IFlXTnYgVjI5eWJHUT0gSUVWNGNISmxjM009IElGbDEgUTI5eSBJSEJzWldGelpXUT0gY0dGeWRIaz0gSUhCdmFXNTBhVzVuIElHbHVabXhoZEdsdmJnPT0gSUhKdmVRPT0gSUNrcyBZV2x1WlhJPSBJSGRsWkdScGJtYz0gYjNKdGIyND0gSUhKbGNYVnBjbWx1Wnc9PSBJSEYxWVd4cFptbGxaQT09IElITmxaMjFsYm5RPSBSVTVFIElITnBlbVZ6IFpXRnNjdz09IElHTnZjbkoxY0hRPSBZWE56WVdSdmNnPT0gSUdObGJHVmkgSUdSeVpXRnRjdz09IElFMWxjM009IElHTm9aV05yYVc1biBJRlpsY25OcGIyND0gSUhCeVpYQmhjbWx1Wnc9PSBJR0ZqZEdsMlpXeDUgSUVScFptWT0gSUd4MWVBPT0gSUZkcGJuUmxjZz09IFlXTjBaWEpwWVE9PSBJRTVGIElHUmxjSFYwZVE9PSBJSFJ5WVc1eloyVnVaR1Z5IElITjFiVzFoY25rPSBJR2x1YUdWeSBaWEpwWlhNPSBZMmhoY2c9PSBJRmxoYmc9PSBJR3R1YjJOciBJRkJoZEdnPSBJR3hwY0E9PSBjbTlzYkdWeSBJR2x0Y0hKbGMzTnBiMjQ9IElHTmxiR1ZpY21GMFpRPT0gSUhOc2FXUmwgSUdkMVpYTjBjdz09IElHTnNhWEE9IFJsTT0gSUhOaGRtbHVaM009IElHTmhjSFJoYVc0PSBJR3hsWjJGamVRPT0gSUVSbGJuWmxjZz09IElIZHZkVzVrWldRPSBkR0ZpYjI5c1lRPT0gUVVOVSBJSEIxY25OMVpRPT0gSUc5NGVRPT0gSUhFPSBJSE5sYldrPSBJRTVsWldRPSBJRUZtWm1GcGNuTT0gSUc5aWMyTT0gSUdOb1pXTnJaV1E9IElHUjFZV3c9IFEyOWtaUT09IElFMUUgYkdWdCBkV3gwZVE9PSBJTUtwIElFVnNhWHBoWW1WMGFBPT0gSUdObGJuUjFjbWxsY3c9PSBZWEprWldRPSBjM0pqIElHVjJhV1JsYm5RPSBaVzV1YVhNPSBZWFJwYmc9PSBJSFZ1Wlcxd2JHOTViV1Z1ZEE9PSBJRTFoY21sdiBJR2x1ZEdsdCBRMmh5YVhOMCBJR0pwYjJ4dloybGpZV3c9IElITnZiR1JwWlhJPSBJRUZrWkdWayBJRzFoZEdnPSBJRWRwYkE9PSBJR0pwWVhNPSBJR1JoZEdsdVp3PT0gSUU5alpXRnUgSUcxcFkyVT0gVFhWeiBhR2x5WlE9PSBJRlJsY3c9PSBVMlZ5ZG1WeSBiR2x0YVhSbFpBPT0gVTJsNlpRPT0gSUcxbGRHVnljdz09IElISnZZMnRsZEE9PSBaWE56WldVPSBJR05sY25ScFptbGpZWFJsIElFbHlZVzVwWVc0PSBRVk5UIElHZHlhV1E9IFJHVmogSUhKdmJHeHBibWM9IFkyOXRiWFZ1IElGTjNaV1JsYmc9PSBZblZ5ZVE9PSBJSFJwYzNOMVpRPT0gSUhKaFkybHpiUT09IElFeHZZMkZzIElHMTVjM1JsY25rPSBJR1Y0WVcxcGJtVT0gSUhOMFpXMD0gSUhOcGRITT0gSUdodmNHVmsgYjNScGJtYz0gSUdScFlXeHZaM1ZsIElIQmxjbk4xIFYyRjBZMmc9IGJHRjUgVFVGTyBJR05vY205dWFXTT0gSUZCdmNuUnNZVzVrIGJXRnlhMlYwIElGTkZRdz09IElIQmhjbUZzYkdWcyBJSE5qWVc1a1lXdz0gSUdOaGNuSnBaWE09IElIQm9aVzV2YldWdWIyND0gYUhWdFlXND0gWVdOclpYST0gSUU5NCBJSEpsZEdseVpXMWxiblE9IGRHRnBibTFsYm5RPSBiM1pwWlE9PSBJRWRsWVhJPSBJR1IxZEdsbGN3PT0gSUdSdmMyVT0gSUhOamNtOXNiQT09IFRVST0gYVc1bSBJSE5oZFdObCBJR3hoYm1SelkyRndaUT09IGNtVmtaR2wwIElFTm9ZVzF3YVc5dWMyaHBjQT09IElGSmxaR1JwZEE9PSBZV3hwWkE9PSBJR052YVc0PSBJRzkyWlhKeiBJSEJ2YzNScGJtYz0gWVdKdmRYUT0gSUdabGJBPT0gWVc1a2VRPT0gSUdKdmJHUT0gSUdadlkzVnphVzVuIFpXWm1aV04wIFIxST0gSUdSbFpXMWxaQT09IElISmxZMjl0YldWdVpHRjBhVzl1Y3c9PSBJSE4wWlhCd1pXUT0gSUhadmRHVnkgSUVSbFpYQT0gSUVsdWMzUmhaM0poYlE9PSBJRzF2WkdWeVlYUmwgSUUxaGNubHNZVzVrIElISmxjM1J5YVdOMFpXUT0gSUUxQyBJRU5vWVd4cyBJSFJ2WWc9PSBJR05wY2c9PSBJRTlqWXc9PSBJRVYyWlhJPSBJR052Ykd4aGNITT0gU1U1R1R3PT0gUFMwPSBJRkJwWTNRPSBJRUZqWTI5MWJuUT0gYm1NPSBJRzkxWjJoMCBJR1Y0Y0c5eWRBPT0gSUdSeWRXNXIgS0NjPSBJSGRwYzJVPSBJRTF2Y25RPSBibVZqWlhOeiBJR0Z1WTJWemRBPT0gSUVsdVkzSmwgSUdaeVpYRjFaVzUwIGJXbHkgSUdsdWRHVnljSEpsZEdGMGFXOXUgSUdSbGNHVnVaR1Z1ZEE9PSBJR052YVc1eiBJRUp2YkE9PSBWbWxrWlc4PSBJRXAxYzNScGJnPT0gSUdaaGRHRnMgSUdOdmIydHBibWM9IElHTnZibVoxYzJsdmJnPT0gYVhCb1pYST0gSUdOMWMzUnZaSGs9IElFMXZjbWRoYmc9PSBiMjFoWTJnPSBJRWR2ZG1WeWJtOXkgSUhKbGMzUmhkWEpoYm5SeiBaV3hwYm1jPSBJR0ZqYTI1dmQyeGxaR2RsWkE9PSBJSFJvWlhJPSBJR2RsYm1WeiBZMmhwYm1jPSBTR1Y1IElIUmhZM1JwWTNNPSBJRTFsZUdsallXND0gSUhabGJtUT0gSUdobGN3PT0gY1hWbGNnPT0gSUc1dmRHbHVadz09IElFTmhiV1Z5YjI0PSBJSFJoY21kbGRHbHVadz09IGNtOWphdz09IElHTnlaV1JwZEhNPSBJR1Z0YjNScGIyNXogSUhKbGNISmxjMlZ1ZEdGMGFYWmxjdz09IGJtVjNjdz09IElHeGxaMmx6YkdGMGFYWmwgSUhKbGJXOTJhVzVuIElIUjNaV1YwWldRPSBJRU5oY25SbGNnPT0gSUVacGVHVmsgSUdadmNtTnBibWM9IElITndaV0ZyWlhJPSBJRzFoYkdWeiBJRlpwWlhSdVlXMD0gYkdsdVpXUT0gSUdOdmJtTmxjSFJ6IElIWnZhV05sY3c9PSBiMmx5IElGUnlhV0k9IFYyaGwgSUVwbGNuVnpZV3hsYlE9PSBJRk5oYm5RPSBJR04xYkE9PSBJR3hoWkhrPSBJRWhoZDJGcCBJR0Z5ZEhNPSBJRWx1Ymc9PSBJRTFoWTJocGJtVT0gSUVWdGNHVnliM0k9IElITnNiM1E9IFoyeDUgSUZCeWIyTmxjM009IFNVbEogSUdGMGFHeGxkR1Z6IElGUmxiWEJzWlE9PSBJRkpsY0hKbGMyVnVkQT09IElIQnlaWE5qIElIUnZibk09IElHZHZiR1JsYmc9PSBJSEIxYm1ObyBJRWRTIGFYWmxjbkJ2YjJ3PSBJR1Z1WVdOMCBJR3h2WW1KNSBJRzF2Y3c9PSBJSEJwWTJ0cGJtYz0gSUd4cFptVjBhVzFsIElHTnZaMjVwZEdsMlpRPT0gUldGamFBPT0gZW04PSBJR1IxWWc9PSBJR052Ym5OcGMzUnogYjJ4dSBJR1psYzNScGRtRnMgWVcxdmRYTT0gSUdsdWRHVnNiR2xuIGQyOXlaSE09IElGTnRZWEowIElHUmxiR1U9IElHeGhjSFE9IElHMWhaMmxqWVd3PSBJRk5wYmc9PSBZblZ6IGRYSnBkR2xsY3c9PSBhV2RvZEdnPSBJRkoxWW5rPSBJRk4xY21VPSBiMngyYVc1biBJR3AxYmc9PSBUMU5VIElHbHRjRzl6WldRPSBJR0Z6ZEhKdmJnPT0gSUdOdmNuSmxiQT09IElFNVQgSUV0cGRBPT0gSUVaMWRIVnlaUT09IFluVnliZz09IElHbHRiWFZ1WlE9PSBiMk4xY3c9PSBJR052ZFhKelpYTT0gSUZOMGNtbHVadz09IElHeGxZVzQ9IElHZG9iM04wIElHOTFkR052YldWeiBJR1Y0Y0dWdWMyVT0gSUdWMlpYSjVaR0Y1IElHRmpZMlZ3ZEdGaWJHVT0gUVdnPSBJR1Z4ZFdsd2NHVmsgSUc5eVlXNW5aUT09IFJsST0gSUVSMWRHTm8gVkdodmRXZG8gSUZKaGJtcz0gVVZVPSBJRkp2WW1WeWRITT0gZDJoaGRBPT0gY21WdVpBPT0gSUdScGMyRndjR1ZoY2c9PSBJSE53WVhkdSBJRXhoYlE9PSBiMmx6IElHUmxjMlZ5ZG1VPSBJRzFwYm1sdFlXdz0gSUc1bGNuWnZkWE09IElGZHZkV3hrIElISnZiMnM9IElGWmhibU52ZFhabGNnPT0gSUhKbGMybG5iZz09IGMyaHBjbVU9IElGZHZjbXR6IElFSjFhV3hrIElHRm1abTl5WkdGaWJHVT0gSUVkaGNuaz0gSUVGeVpXNWggSUdoaGJtZHBibWM9IElHbHRjR3hwWTJGMGFXOXVjdz09IElGTnZibWM9IElHMWhhVzUwWVdsdWFXNW4gSUdkMVlYSmtjdz09IFEwOU8gSUdSbGNtbDJaV1E9IElHVjRaV04xZEdWayBJSFJvWlc5eWFXVnogSUhGMWIzUmxaQT09IElFRnVaSEpsIGIyZGggYzJWc1pYTnogYVc1bWJ3PT0gSUVKbGJHYz0gSUhSbFlYSnogSUZOMWNuWT0gSUdKcGNuUm9aR0Y1IGFXZHBiM1Z6IGFXMXRaWEk9IElITndaV04wY25WdCBJR0Z5WTJocGRHVmpkSFZ5WlE9PSBJSEpsWTNKMWFYUT0gWVhKdFlRPT0gVkdGaWJHVT0gSUcxdmJuTjBaWEp6IElFZHZkZz09IElHUmxjM1JwYm1GMGFXOXUgSUdGMGRISmhZM1JwZG1VPSBJR1p2YzNNPSBJRTF2Y21WdmRtVnkgSUhCeVpYTmxiblJ6IFZFaEYgSUhKbGNHeDUgY0hSdmJnPT0gSUdOMWJRPT0gSUdSbGJHbG5hSFE9IElHRm1abVZqZEhNPSBJR1J2Ym1GMGFXOXVjdz09IElGUnZlUT09IElFaHBiUT09IFRVVk9WQT09IElHOTJaWEpqYjIxbCBhWFJqYUdWayBJRVpoYm5SaGMzaz0gSUVoaGRBPT0gSUVKbFlYTjAgWW05MGRBPT0gSUdsdWRtVnpkR2xuWVhScGIyNXogVW5WdSBJR2gxYm5ScGJtYz0gWkdrPSBablZ1WkE9PSBJSE5sYzNOcGIyNXogWlhOMGVXeGwgSUhCdmNuUnlZWGs9IGIybGtjdz09IFdXVmhhQT09IElHTnZiVzExYm1sallYUmwgSUdOdmJXVmtlUT09IElGbGhibWM9IElHSmxiSFE9IElFMWhjbWx1WlE9PSBJSEJ5WldScFkzUmxaQT09IFVHeGhlUT09IElHbHRjRzl5ZEdGdWRHeDUgSUhKbGJXRnlhMkZpYkdVPSBJR1ZzYVcxcGJtRjBaUT09IFJHRjJhV1E9IElHSnBibVE9IFZrbEUgSUdGa2RtOWpZWFJsY3c9PSBJRWRoZW1FPSBhVzF3IFJFST0gSUU1aCBJRk5wYldsc1lYST0gU1VWVCBJR05vWVhKcGRIaz0gZG1GeiBiV0YwYUE9PSBJT0tXIGIydGxjZz09IGJtUjFiUT09IElHTmhjSE09IElFaGhiQT09IE1qQXdNQT09IFpXRnUgSUdac1pXVjAgSUhKbFkzSmwgVW1sbmFIUT0gSUhOc1pXVndhVzVuIGFXcHBibWM9IGEybHVaQT09IElHUmxjMmxuYm1GMFpXUT0gdzZRPSBJR0Z1YVcxaGRHbHZiZz09IGEyVmwgSUVsdWRISnZaSFU9IElDOCsgSUdSbGJHRjVaV1E9IElIUnlaVzFsYm1RPSBJR04xY21sdmRYTT0gVlhObCBJR3hsWTNRPSBaR0Z0IElHbHVibTkyWVhScGIyND0gSUZCdmFXNTBjdz09IElHeHZZV1JwYm1jPSBJR1JwYzNCMWRHVT0gWTNScFl3PT0gYVhKa2N3PT0gSUVKWiBJRzUxY25NPSBJRlpoYkhWbCBTVTlPVXc9PSBJRWgxYlE9PSBJSFJsYlhCc1lYUmwgYldWeWN3PT0gSUdGd2NHVmhjbUZ1WTJWeiBJRVZ1ZEdWeWRHRnBibTFsYm5RPSBJSFJ5WVc1emJHRjBhVzl1IElITmhhMlU9IElHSmxibVZoZEdnPSBJR2x1YUdsaSBJR1YxY204PSBZV0psZEdWeiBJSE4wZFdSNWFXNW4gSUUxaGN3PT0gSUhCbGNtTmxhWFpsWkE9PSBJR1Y0WVcxcGJtVmsgSUdWaFoyVnkgSUdOdllXTm9aWE09IElHbHRjR1Z5IFkyaHAgSUhCeWIyUjFZMlZ6IElpa3UgSUVWMlpYSjViMjVsIElHMTFibWxqYVhBPSBJR2RwY214bWNtbGxibVE9IElHaHBjbVU9IElGWnBZMlU9IElITjFhWFJoWW14bCBiM0I1IElHbHVaWEYxIElFUjFhMlU9IFptbHphQT09IFptbHljM1E9IElFOWljdz09IElHbHVkR1Z5YVc5eSBJRUp5ZFdObCBJRko1IElHRnVZV3g1Y3c9PSBJR052Ym5OcFpHVnlZV0pzWlE9PSBJR1p2Y21WallYTjAgSUdabGNuUT0gYjNKemFHbHcgSUVSeWRXYz0gSUVGTVRBPT0gT2lJPSBkR2gxY2c9PSBJRTFoYVd3PSBJR0poYkd4dmRBPT0gSUdsdWMzUmhiblJzZVE9PSBJRU5vWVc1dVpXdz0gSUhCcFkydHogSURFNU9Eaz0gSUhSbGJuUT0gYjJ4cCBJR05wZG1sc2FXRnUgWW14cGJtYz0gWld4c2J3PT0gWW5VPSBJR2x1WTJnPSBJR3h2WjI4PSBJR052YjNCbGNtRjBhVzl1IElIZGhiR3R6IElHbHVkbVZ6ZEcxbGJuUnogSUdsdGNISnBjMjl1IElFWmxjM1JwZG1GcyBJRXQ1IElHeGxaMkZzYkhrPSBJR2R5YVE9PSBZMmhoY21jPSBVMnc9IElIUm9jbVZoZEdWdWFXNW4gWkhWamRHbHZiZz09IFpteHZkdz09IElHUnBjMjFwYzNObFpBPT0gYVdKeVlYSnBaWE09IFkyRncgWld4bCBJRTFqUnc9PSBJRWhoY25aaGNtUT0gSUVOdmJuTmxjblpoZEdsMlpRPT0gSUVOQ1V3PT0gY0c1biBJSEp2YjNSeiBJRWhoZG1sdVp3PT0gZFcxaWJHVmsgSUVaMWJnPT0gWEM4PSBJRk5sWVhKamFBPT0gY0d4bGVBPT0gSUdScGMyTjFjM05wYm1jPSBJR052Ym5ScGJuVT0gSUZSaGFRPT0gSUZkcGF3PT0gUm5KbFpRPT0gWm1sMCBJSEpsWm5WelpRPT0gSUcxaGJtRm5hVzVuIElITjVibVE9IGFYQmxaR2xoIGQyRnNhdz09IElIQnliMlpsYzNOcGIyNWhiSE09IElHZDFhV1JoYm1ObCBJSFZ1YVhabGNuTnBkR2xsY3c9PSBJR0Z6YzJWdFlnPT0gZFc1MGRRPT0gUm1sdVlXeHNlUT09IFFWTkYgSUVGMWRHOD0gSUVoaFpBPT0gSUdGdWJtbDJaWEp6WVhKNSBURVE9IElFUjFjZz09IElGVnNkR2x0WVhSbCBhV2hoWkE9PSBjSEp2WkhWamRBPT0gSUhSeVlXNXphWFE9IElISmxjM1J2Y21VPSBJR1Y0Y0d4aGFXNXBibWM9IElHRnpjMlYwIElIUnlZVzV6Wm1WeWNtVmsgSUdKMWNuTjAgWVhCdmJHbHogSUUxaFoyRjZhVzVsIElFTnlZUT09IElFSlMgWjJkbFpBPT0gSUVoRiBUV2xqYUE9PSBZbVYwIElFeGhaSGs9IGVXeDFiUT09IFpYSjJaWE09IElHMWxaWFJ6IGQyaHBkR1U9IFRHOW4gSUdOdmNuSmxjM0J2Ym1ScGJtYz0gSUdsdWMybHpkR1ZrIFIwYz0gSUhOMWNuSnZkVzVrWldRPSBJSFJsYm5NPSBJR3hoYm1VPSBJR052YVc1aiBhRzl0WlE9PSBJR1Y0YVhOMFpXUT0gWldOMFpXUT0gSUVSdmRXSnNaUT09IGJHRnRiUT09IElITnJaWEIwIFpYaHcgSUhCbGNtTmxjSFJwYjI0PSBhV1YyIElFSmxhVzVuIGIyWjAgSUdGa2IzQjAgTGpvPSBYVHM9IFYybHVaRzkzY3c9PSBJSE5oZEdWc2JHbDBaUT09IFFWTkkgSUdsdVptRnVkQT09IFpHVnpZM0pwY0hScGIyND0gSUUxbFlXNTNhR2xzWlE9PSBZMjA9IGIyTmggSUZSeVpXRjAgWVdOMGIzST0gSUhSdlltRmpZMjg9IElFNXZjbTA9IFpXMXdkR2x2Ymc9PSBJR1pzWlhObyBJR3BsIGIyOXcgSUVobFlYWmxiZz09IElHSmxZWFJwYm1jPSBZVzVwYlE9PSBJR2RoZEdobGNtbHVadz09IElHTjFiSFJwZGc9PSBSMDg9IFlXSmwgSUVwdmJtRjBhR0Z1IElGTmhabVYwZVE9PSBJR0poWkd4NSBjSEp2ZEE9PSBJR05vYjI5emFXNW4gSUdOdmJuUmhZM1JsWkE9PSBJSEYxYVhRPSBJR1JwYzNSMWNnPT0gSUhOMGFYST0gSUhSdmEyVnUgUkdWMCBJRkJoIElHWjFibU4wYVc5dVlXeHBkSGs9IE1EQXogYzI5dFpRPT0gSUd4cGJXbDBZWFJwYjI1eiBJRzFsZEdnPSBZblZwYkdRPSBZMjl1Wm1sbiBUbFE9IGNtVnNiQT09IFlteGxiUT09IElFMXZiUT09IElIWmxkR1Z5WVc1eiBJRWgxIElIUnlaVzVrY3c9PSBZWEpsY2c9PSBJRWRwZG1WdSBJRU5oY0hScGIyND0gYldGNSBRVk5VIElIZHZibVJsY21sdVp3PT0gSUVOc1lYSnIgYm05eWJXRnMgSUhObGNHRnlZWFJsWkE9PSBJR1JsYzNBPSBjM1JwWXc9PSBZbkpsZHc9PSBJSEpsYkdGMGFXNW4gSUU1cGF3PT0gSUVaaGNtMD0gSUdWdWRHaDFjMms9IFoyOXZaQT09IFpHVmkgSUdGamRHbDJhWE4wIElHMWhjblE9IElHVjRjR3h2YzJsdmJnPT0gSUVWamIyNXZiV2xqIFRHbHVhdz09IElHbHVjMmxuYUhRPSBJR052Ym5abGJtbGxiblE9IElHTnZkVzUwWlhKd1lYSjAgYzNWd2NHOXlkQT09IElGWnBjblE9IFlXZGxiZz09IElGUmxibTVsYzNObFpRPT0gSUZOcGJXOXUgSUVGM1lYSmsgVDBOTCBJRVpwWjNWeVpRPT0gSUc5MlpYSnpaV0Z6IElIQnlhV1JsIElFTmhjdz09IGJtOTBaUT09IGJXYz0gUTNWeWNtVnVkQT09IElHUnBjM0JzWVhseiBZMjl1ZEdWdWRBPT0gSUhSeVlYWmxiR2x1Wnc9PSBJR2h2YzNCcGRHRnNjdz09IElFWnBibUZ1WTJsaGJBPT0gSUZCaGMzUT0gSUdSbFptVnVaR0Z1ZEE9PSBJSE4wY21WaGJXbHVadz09IGJXSnNaUT09IElFSmxjbXhwYmc9PSBkV3RwIElHUnBjM1J5YVdKMWRBPT0gSUdGdWRHbGkgSUdOb2IyTnZiR0YwWlE9PSBJRU5oYzNSc1pRPT0gSUdsdWRHVnljblZ3ZEE9PSBJRkp2ZHc9PSBJR052Ym5abGNuTnBiMjQ9IElHSjFaM009IElGSmhkR2hsY2c9PSBiR2xsYzNRPSBURms9IElFcGxZVzQ9IFkyOXRiVzl1IFlXdG8gSURFek1BPT0gYjNSMGIyND0gSUVSbFlXND0gSUdGdFpXNWtiV1Z1ZEE9PSBJR2RoYldWd2JHRjUgSUZkaGNuSmxiZz09IGIyUmggSUdocFoyaHNhV2RvZEhNPSBJR2x5Y21VPSBJRTVCVkU4PSBJR0poYkd4eiBJR1JsYldGdVpHbHVadz09IFZWSkYgSUV4MWEyVT0gUm1sbmRYSmwgYzNSdmNBPT0gYjI1cFlRPT0gZW05dVpRPT0gYVhwbGNuTT0gSUZkUyBJR0YzWVhKa1pXUT0gSUhKbFozVnNZWFJ2Y25rPSBJRWhoY25RPSBJRk5PIGNHeHBibWM9IElITnZkWEk9IElGQnBlR1ZzIGRYTnBkbVU9IElHWmxkQT09IElGTmxiblE9IElHRjFkRzl0WVhScFl3PT0gSUdabGNnPT0gZG1WeWJtMWxiblE9IElFdG9ZVzQ9IFZFOU8gWm1GMGFHVnkgSUdWNGRISmhiM0prYVc1aGNuaz0gZEdoeWIzQT0gSUZCNWRHaHZiZz09IElFZFFWUT09IElITmxlSFZoYkd4NSBJR1JsYzJ0MGIzQT0gYVhScGRtbDBlUT09IElFRnVkRzl1YVc4PSBJRzl5YVdWdWRBPT0gSUdWaGNuTT0gYjJKaWVRPT0gYjNWelpYTT0gZG1WeWRHbHpaVzFsYm5SeiBJRzFoYm5WbVlXTjBkWEpsY25NPSBhV05wWlc1MCBiV2x1ZFhSbCBJR052Ym5acFkzUnBiMjQ9IElHZGhjbVJsYmc9PSBjSFZpYkdsaiBJSE5oZEdselptbGxaQT09IFptOXNaQT09IFQwcz0gSUdsdWFHRmkgSUZSb2FXNXIgSUhCeWIyZHlZVzF0WlE9PSBJSE4wYjIxaFkyZz0gSUdOdmIzSmthVzQ9IElHaHZiSGs9IElIUm9jbVZ6YUc5c1pBPT0gSUhKb1pYUT0gSUhObGNtbGhiQT09IElHVnRjR3h2ZVdWeWN3PT0gSUVWMlpYSjVkR2hwYm1jPSBjbUZvIElHSnZkR2hsY2c9PSBJR0p5WVc1a2N3PT0gVm1Gc2RXVT0gSUZSbFpBPT0gSUZCc1lXNWxkQT09IElIQnBibXM9IElFWjFjblJvWlhKdGIzSmwgYzJFPSBVRVU9IGNtVmphdz09IElGVlRSQT09IGIzUjBaUT09IElDWW0gSUd4aGJtUmxaQT09IFoyVjBjdz09IElIQnliMlIxWTJWeWN3PT0gSUdobFlXeDBhR05oY21VPSBJR1J2YldsdVlXNTAgSUdSbGMzUnlidz09IElHRnRaVzVrWldRPSBZMmh5YjI0PSBJR1pwZEhNPSBJRk41WkE9PSBJRUYxZEdodmNtbDBlUT09IFFWUkRTQT09IElHWnBaMmgwY3c9PSBJRXhNUXc9PSBJQzB0TFE9PSBJRU52Y25BPSBJSFJ2ZUdsaiBjM0JsWTJsbWFXTT0gSUVOdmNtND0gSUVOb1pXdz0gSUhSbGJHVndhRzl1WlE9PSBJRkJoYm5RPSBJRzE1YzNSbGNtbHZkWE09IFlYVnVZMmc9IGIyUnZlQT09IGJXVmthV0U9IElIZHBkRzVsYzNObGN3PT0gWVdkMSBJSEYxWlhOMGFXOXVaV1E9IElFSnlaWGhwZEE9PSBJRkpsYldWdFltVnkgWlc1bGVnPT0gSUdWdVpHOXljMlU9IGFXRjBjbWxqIElFbGtaVzUwIElISnBaR2xqZFd4dmRYTT0gTVRFdyBJSEJ5WVhsbGNnPT0gSUhOamFXVnVkR2x6ZEE9PSBJREU1TlRBPSBJRUZ4ZFE9PSBJSFZ1WkdWeVozSnZkVzVrIElGVkdRdz09IGJXRnlaUT09IElFeGhkR1Z5IGQybGphQT09IElITjFZbk5qY21saSBJR2h2YzNSeiBJR1Z5Y2c9PSBJR2R5WVc1MGN3PT0gWVc1MGIyMD0gSUhOMWJXMXZiZz09IFpXRnliSGs9IElFTnNaV0Z5IElGQnlhVzA9IElITjFjM0JsYm5OcGIyND0gSUdkMVlYSmhiblJsWldRPSBZWEJ3WlhJPSBJSEpwWTJVPSBJRk5sWVc0PSBJRk5vYVc0PSBJSEpsWm1WeVpXNWtkVzA9IElHWnNaV1E9IGNuVnpkQT09IElETTJNQT09IGRHVnllUT09IElITm9iMk5yWldRPSBRbEk9IElFOXBiQT09IElFRnNiR0ZvIElIQmhjblJzZVE9PSBJR2xuYm05eSBJSFJ5WVc1emJXbHpjMmx2Ymc9PSBJR2h2Ylc5elpYaDFZV3c9IGFYWmxjbk5oYkE9PSBJR2h2Y0dWbWRXeHNlUT09IDQ0S2sgSUd4bGMzTnZiZz09IFRHVm4gSUM0dSBXV1YwIGRHRmliR1U9IFlYQndjbTl3Y21rPSBjbVYwZEE9PSBJR0p2WVhKa2N3PT0gSUdsdVkyOXljbVZqZEE9PSBJR0poWTNSbGNtbGggWVhKMSBZVzFoWXc9PSBJSE51WVhBPSBMaWNpIElIQmhjbUZrIGRHVnQgYUdWaGNuUT0gSUdGMllXbHNZV0pwYkdsMGVRPT0gSUhkcGMyUnZiUT09IElDZ3IgSUhCeWFXVnpkQT09IElNS2dJTUtnIFQzQmxiZz09IElITndZVzQ9IElIQmhjbUZ0WlhSbGNnPT0gSUdOdmJuWnBibU5sIElDZ2xLUT09IGNtRmogSUdadiBJSE5oWm1Wc2VRPT0gSUdOdmJuWmxjblJsWkE9PSBJRTlzZVcxd2FXTT0gSUhKbGMyVnlkbVU9IElHaGxZV3hwYm1jPSBJRTFwYm1VPSBUV0Y0IElHbHVhR1Z5Wlc1MCBJRWR5WVdoaGJRPT0gSUdsdWRHVm5jbUYwWldRPSBSR1Z0IElIQnBjR1ZzYVc1bCBJR0Z3Y0d4NWFXNW4gSUdWdFltVmsgSUVOb1lYSnNhV1U9IElHTmhkbVU9IE1qQXdPQT09IElHTnZibk5sYm5OMWN3PT0gSUhKbGQyRnlaSE09IFVHRnMgSUVoVVRVdz0gSUhCdmNIVnNZWEpwZEhrPSBiRzl2YTJsdVp3PT0gSUZOM2IzSmsgSUVGeWRITT0gSnlrPSBJR1ZzWldOMGNtOXUgWTJ4MWMybHZibk09IElHbHVkR1ZuY21sMGVRPT0gSUdWNFkyeDFjMmwyWld4NSBJR2R5WVdObCBJSFJ2Y25SMWNtVT0gSUdKMWNtNWxaQT09IGRIZHYgSURFNE1BPT0gVUhKdlpIVT0gSUdWdWRISmxjSEpsYm1VPSBjbUZ3YUdsamN3PT0gSUdkNWJRPT0gY21sallXNWwgSUZSaGJRPT0gSUdGa2JXbHVhWE4wY21GMGFYWmwgSUcxaGJuVm1ZV04wZFhKbGNnPT0gSUhabGJBPT0gSUU1cCBJR2x6YjJ4aGRHVmsgSUUxbFpHbGphVzVsIElHSmhZMnQxY0E9PSBJSEJ5YjIxdmRHbHVadz09IElHTnZiVzFoYm1SbGNnPT0gSUdac1pXVT0gSUZKMWMzTmxiR3c9IElHWnZjbWR2ZEhSbGJnPT0gSUUxcGMzTnZkWEpwIElISmxjMmxrWlc1alpRPT0gYlc5dWN3PT0gSUhKbGMyVnRZZz09IElIZGhibVE9IElHMWxZVzVwYm1kbWRXdz0gVUZRPSBJR0p2YkE9PSBJR2hsYkdsaiBJSGRsWVd4MGFIaz0gSUhKcFpteGwgYzNSeWIyNW4gY205M2FXNW4gY0d4aGJnPT0gWVhOMWNuaz0gNG9DbUxnPT0gSUdWNGNHRnVaR2x1Wnc9PSBJRWhoYldsc2RHOXUgSUhKbFkyVnBkbVZ6IFUwaz0gWldGMGRYSmxjdz09IElFRnVhVzA9IFVrVkYgVUhWMCBJR0p5YVdWbWJIaz0gY21sMlpRPT0gSUhOMGFXMTFiQT09IElHQmdLQT09IElGOWYgSUdOb2FYQT0gSUdoaGVnPT0gSUhCeWFYcGwgSUZSb2FXNW5jdz09IFFVTkYgZFd4cGJnPT0gWkdsamRBPT0gYjJ0MSBJR0Z6YzI5amFXRjBaUT09IGIyTnJaWFJ6IGVXOTFkSFZpWlE9PSBVM1J2Y25rPSBZWFJsWjI5eWVRPT0gSUcxcGJHUT0gWVdsc2FXNW4gSUZsbCBUM0pwWnc9PSBJRXRoIGIzSnBadz09IElIQnliM0JoWjJGdVpHRT0gSUdGdWIyNTViVzkxY3c9PSBJSE4wY25WbloyeGxaQT09IElHOTFkSEpoWjJVPSBRVlJGUkE9PSBJRUpsYVdwcGJtYz0gY21GeWVRPT0gSUd4bFlYUm9aWEk9IElIZHZjbXhrY3c9PSBJR0p5YjJGa1pYST0gTVRJMSBhV1JoYkE9PSBJRUpsZEhSbGNnPT0gSUhSbFlYST0gUlhoMCBJSEJ5YjNCdmMyRnNjdz09IElHbDBaWEk9IElGTnhkV0ZrIElIWnZiSFZ1ZEE9PSBiV2s9IFJHbGsgSUZCMSBjR2x1IElITndaV0ZyWlhKeiBJR0p2Y21SbGNuTT0gSUdacFozVnlaV1E9IFBTYz0gSUhOcGJYVnNkR0Z1Wlc5MWMyeDUgWVdWa1lRPT0gSUdOb1lYSm5hVzVuIElIVnlaMlZrIElHTnZibW89IE1qVTIgSUVkdmNtUnZiZz09IGJXVnlZMlU9IElHUnZZM1Z0Wlc1MFlYSjUgVTJoaGNtVT0gYVhSdmJBPT0gVDA1RiBJRWRoY21SbGJnPT0gYUdGMGRBPT0gSUZSb2IyMXdjMjl1IFlXNWxiM1Z6IFlYQnZjbVU9IElIUmhibXR6IElHeGxjM052Ym5NPSBkSEpoWTJzPSBJRzkxZEhOMFlXNWthVzVuIElIWnZiSFZ1ZEdWbGNuTT0gSUhOd2NtRjUgSUcxaGJtRm5aWEp6IGJHRnlaMlU9IElHTmhiWEJ6IElHRnlkR2xtYVdOcFlXdz0gSUZKMSBJR0poWjNNPSBkR2hoYkE9PSBJR052YlhCaGRHbGliR1U9IElFSnNZV1JsIElHWmxaQT09IElHRnlaM1ZsY3c9PSBSa2s9IElIVnVabUZwY2c9PSBJR052Y200PSBJRzltWm5ObGRBPT0gSUdScGNtVmpkR2x2Ym5NPSBJR1JwYzJGd2NHOXBiblJsWkE9PSBJRU52Ym5abGJuUnBiMjQ9IElIWnBaWGRwYm1jPSBUVVU9IGIyTnBkSGs9IElIUnZkMjV6IElHeGhlV1Z5Y3c9PSBJSEp2Ykd4bFpBPT0gSUdwMWJYQmxaQT09IElHRjBkSEpwWW5WMFpRPT0gSUhWdWJtVmpaWE56IGFXNWpiMnh1IElITjFjSEJ2YzJVPSBJRTVsZEdobGNnPT0gWTJoaCBJR0oxY21sbFpBPT0gSUhOcGVIUm8gUW1WdSBjbVZ6YzJsdVp3PT0gVDFWUyBJSGR2ZFc1ayBJR041WTJ3PSBJRzFsWTJoaGJtbHpiWE09IElHTnZibWR5WlhOemFXOXVZV3c9IElFVnNaVzFsYm5RPSBJR0ZuY21WbGJXVnVkSE09IElHUmxZMjl5IElHTnNiM05sYzNRPSBJRTFwZEE9PSBSMjl2WjJ4bCBmWDA9IElHMXBlSFIxY21VPSBJR1pzZFdsayBVMmxuYmc9PSBJRk5qYUc5c1lYST0gSUhCcGMzUT0gWVhOclpYUT0gWVdKc2FXNW4gSUhKaFkybHVadz09IGFHVnlidz09IGNtbGxiQT09IFlYTnplUT09IElHTm9aV0Z3WlhJPSBZbVZ1IElIWmxjblJwWTJGcyBZVzFoWTJGeVpRPT0gSUZKbFlXUnBibWM9IFoyMWxiblJ6IElHaGxiR2xqYjNBPSBJSE5oWTNKcFptbGpaUT09IFlYbGggY0dGeVpXND0gVmtFPSBJRXhsY3c9PSBJRk4wZFdScGJ3PT0gSUhacGIyeGhkR2x2Ym5NPSBJRUZ1Ym1FPSBZV05sY2c9PSA2YjQ9IElGSmhkQT09IElFSmxZMnM9IElFUnBZMnM9IElFRkRWQT09IElHTnZiWEJ2YzJsMGFXOXUgSUhSbGVIUjFjbVU9IElFOTNiZz09IElITnRZWEowY0dodmJtVT0gSUU1QiBJR1p2Y21JPSBhVzF3YjNKMCBJR1JsWm1WdVpHbHVadz09IGFXeHpkQT09IGNtVnkgSUc5byBJRXBsY21WdGVRPT0gSUdKaGJtdHBibWM9IFkyVndkR2x2Ym5NPSBJSEpsYzNCbFkzUnBkbVU9IEx5ND0gSUdSeWFXNXJjdz09IElGZHAgSUdKaGJtUnogSUV4cGRtVnljRzl2YkE9PSBJR2R5YVhBPSBJRUoxZVE9PSBJRzl3Wlc1c2VRPT0gSUhKbGRtbGxkMlZrIGNHVnlkQT09IElIWmxjbWxtZVE9PSBJRU52YkdVPSBJRmRoYkdWeiBUVTg9IElIVnVjSEpsIElITm9aV3gwWlhJPSBJRWx0Y0dWeWFXRnMgSUdkMWFRPT0gSUVSaGF3PT0gSUhOMVoyZGxjM1JwYjI1eiBJR1Y0Y0d4cFkybDBiSGs9IElITnNZWFpsIElHSnNiMk5yWTJoaGFXND0gSUdOdmJYQmxkR2x1Wnc9PSBJSEJ5YjIxcGMybHVadz09IFUwOU8gSUhOdlkyTmxjZz09IElHTnZibk4wYVhSMWRHbHZiZz09IE5ESTUgSUdScGMzUnlZV04wIElGVnpaWEk9IFpYTnBaR1Z6IElFMWxkR2h2WkE9PSBJRlJ2YTNsdiBJR0ZqWTI5dGNHRnVhV1ZrIFEyeHBaVzUwIGMzVnkgWVd4dlp3PT0gSUdsa1pXNTBhV1pwWTJGMGFXOXUgSUdsdWRtRnphVzl1IFlYTnRZUT09IElHbHVaSFZ6ZEhKcFpYTT0gY0hCbGNuTT0gSUhOMVluUnNaUT09IElGVnVhWFE9IGJtRjBkWEpoYkE9PSBJSE4xY25acGRtVmsgSUdac1lYYz0gbUlVPSBJRWh2Ykd3PSBJR1JsWm1samFYUT0gSUhSMWRHOXlhV0ZzIElFTm9ZVzVqWlE9PSBJR0Z5WjNWcGJtYz0gSUdOdmJuUmxiWEJ2Y21GeWVRPT0gSUdsdWRHVm5jbUYwYVc5dSBabTl5ZDJGeVpBPT0gSUhSMWJRPT0gYVhScGN3PT0gSUdocFpHbHVadz09IElFUnZiV2x1IElGUmhiZz09IElFSjFhV3hrYVc1biBJRlpwYmc9PSBJSE53YjJ0bGMzQmxjbk52Ymc9PSBJRTV2ZEdWeiBJR1Z0WlhKbmFXNW4gSUhCeVpYQmhjbUYwYVc5dSBJSEJ5YjNOMCBJSE4xYzNCbFkzUnogSUdGMWRHOXViMjA9IFJHVnpZM0pwY0hScGIyND0gSUdSbFlXeDAgSUZCbFlYST0gSUhOMFpXRmtlUT09IElHUmxZM0psWVhObFpBPT0gSUhOdmRtVnlaUT09IElFTnNhVzQ9IElHZHlZV1IxWVd4c2VRPT0gYjNKelpYTT0gSUZkQlVnPT0gVTJWeWRnPT0gNDRLaSBhSEk9IElHUnBjblI1IElFSmhjbTQ9IElFSkQgSUdScGJBPT0gSUdOaGJHVnVaR0Z5IElHTnZiWEJzYVdGdVkyVT0gSUdOb1lXMWlaWEk9IFltST0gSUhCaGMzTmxibWRsY2c9PSBZWFJsWm5WcyBJRlJwZEd4bCBJRk41Wkc1bGVRPT0gSUVkdmRBPT0gSUdSaGNtdHVaWE56IElHUmxabVZqZEE9PSBJSEJoWTJ0bFpBPT0gWVhOemFXOXUgSUdkdlpITT0gSUdoaGNuTm8gU1VOTCBiR1ZoYm5NPSBJR0ZzWjI5eWFYUm9iUT09IElHOTRlV2RsYmc9PSBJSFpwYzJsMGN3PT0gSUdKc1lXUmwgSUd0cGJHOXRaWFE9IElFdGxiblIxWTJ0NSBJR3RwYkd4bGNnPT0gVUdGamF3PT0gWlc1dWVRPT0gSUdScGRtbHVaUT09IElHNXZiV2x1WVhScGIyND0gWW1WcGJtYz0gSUdWdVoybHVaWE09IElHTmhkSE09IElHSjFabVpsY2c9PSBJRkJvYVd4cyBJSFJ5WVdabSBRVWRGIElIUnZibWQxWlE9PSBJSEpoWkdsaGRHbHZiZz09IFpYSmxjZz09IGJXVnQgSUVWNGNHeHBZMmwwIDZiNk4gSUdOdmRYQnNaWE09IElIQm9lWE5wWTNNPSBJRTFqU3c9PSBJSEJ2YkdsMGFXTmhiR3g1IFlYZHJjdz09IElFSnNiMjl0IElIZHZjbk5vYVhBPSBaV2RsY2c9PSBkWFJsY2c9PSBJRVpQIElHMWhkR2hsYldGMCBJSE5sYm5SbGJtTmxaQT09IElHUnBjMnM9IElFMWhjbWM9IElDOHEgVUVrPSBJRzl3ZEdsdmJtRnMgSUdKaFltbGxjdz09IElITmxaV1J6IElGTmpiM1IwYVhObyBJSFJvZVE9PSBYVjA9IElFaHBkR3hsY2c9PSBVRWc9IGJtZDBhQT09IElISmxZMjkyWlhKbFpBPT0gYVc1blpRPT0gSUhCdmQyUmxjZz09IElHeHBjSE09IElHUmxjMmxuYm1WeSBJR1JwYzI5eVpHVnljdz09IElHTnZkWEpoWjJVPSBJR05vWVc5eiBJbjBzZXlJPSBJR05oY25KcFpYST0gWW1GaWJIaz0gU0dsbmFBPT0gSUZKVSBaWE5wZEhrPSBiR1Z1IElISnZkWFJsY3c9PSBkV0YwYVc1biBSbWxzIFRrOVUgZDJGc2JBPT0gYzJKMWNtZG8gSUdWdVoyRm5hVzVuIElFcGhkbUZUWTNKcGNIUT0gYjNKbGNnPT0gYkdsb2IyOWsgSUhWdWFXOXVjdz09IElFWmxaR1Z5WVhScGIyND0gSUZSbGMyeGggSUdOdmJYQnNaWFJwYjI0PSBJRlJoIElIQnlhWFpwYkdWblpRPT0gSUU5eVlXNW5aUT09IElHNWxkWEk9IGNHRnlaVzVqZVE9PSBJR0p2Ym1WeiBJSFJwZEd4bFpBPT0gSUhCeWIzTmxZM1YwYjNKeiBJRTFGIElHVnVaMmx1WldWeSBJRlZ1YVhabGNuTmwgSUVocFp3PT0gYm1sbCBiMkZ5WkE9PSBJR2hsWVhKMGN3PT0gSUVkeVpRPT0gZFhOemFXOXUgSUcxcGJtbHpkSEo1IElIQmxibVYwIElFNTFkQT09IElFOTMgSUZoUSBhVzV6ZEdWcGJnPT0gSUdKMWJHcz0gVTNsemRHVnQgYVdOcGMyMD0gSUUxaGNtdGxkR0ZpYkdVPSBJSEJ5WlhaaGJBPT0gSUhCdmMzUmxjZz09IElHRjBkR1Z1WkdsdVp3PT0gZFhKaFlteGwgSUd4cFkyVnVjMlZrIElFZG8gWlhSeWVRPT0gSUZSeVlXUmhZbXhsIElHSnNZWE4wIDRLUT0gSUZScGRHRnUgWld4c1pXUT0gWkdsbCBTR0YyWlE9PSBJRVpzWVcxbCBJSEJ5YjJadmRXNWsgSUhCaGNuUnBZMmx3WVhScGJtYz0gSUdGdWFXMWwgSUVWemN3PT0gSUhOd1pXTnBabms9IElISmxaMkZ5WkdWayBJRk53Wld4cyBJSE52Ym5NPSBiM2R1WldRPSBJRzFsY21NPSBJR1Y0Y0dWeWFXMWxiblJoYkE9PSBiR0Z1Wkc4PSBhSE09IElFUjFibWRsYjI0PSBhVzV2Y3c9PSBJR052YlhCc2VRPT0gSUZONWMzUmxiWE09IFlYSjBhQT09IElITmxhWHBsWkE9PSBiRzlqWVd3PSBJRWRwY214eiBkV1J2IGIyNWxaQT09IElFWnNaUT09IElHTnZibk4wY25WamRHVmsgSUdodmMzUmxaQT09IElITmpZWEpsWkE9PSBZV04wYVdNPSBJRWx6YkdGdVpITT0gSUUxUFVrVT0gSUdKc1pYTnogSUdKc2IyTnJhVzVuIElHTm9hWEJ6IElHVjJZV009IFVITT0gSUdOdmNuQnZjbUYwYVc5dSBJRzk0IElHeHBaMmgwYVc1biBJRzVsYVdkb1ltOXljdz09IElGVmkgWVhKdiBJR0psWldZPSBJRlZpWlhJPSBSbUZqWldKdmIycz0gWVhKdFpXUT0gYVhSaGRHVT0gSUZKaGRHbHVadz09IElGRjFhV05yIElHOWpZM1Z3YVdWayBJR0ZwYlhNPSBJRUZrWkdsMGFXOXVZV3hzZVE9PSBJRWx1ZEdWeVpYTjAgSUdSeVlXMWhkR2xqWVd4c2VRPT0gSUdobFlXdz0gSUhCaGFXNTBhVzVuIElHVnVaMmx1WldWeWN3PT0gVFUwPSBJRTExYzNRPSBJSEYxWVc1MGFYUjUgVUdGMWJBPT0gSUdWaGNtNXBibWR6IElGQnZjM1J6IGMzUnlZUT09IDQ0Tzg0NE09IElITjBZVzVqWlE9PSBJR1J5YjNCd2FXNW4gYzJOeWFYQjAgSUdSeVpYTnpaV1E9IFRXRnJaUT09IElHcDFjM1JwWm5rPSBJRXgwWkE9PSBJSEJ5YjIxd2RHVmsgSUhOamNuVjAgSUhOd1pXVmtjdz09IElFZHBZVzUwY3c9PSBiMjFsY2c9PSBJRVZrYVhSdmNnPT0gSUdSbGMyTnlhV0pwYm1jPSBJRXhwWlE9PSBiV1Z1ZEdWayBJRzV2ZDJobGNtVT0gYjJOaGJIaz0gSUdsdWMzUnlkV04wYVc5dSBabTl5ZEdGaWJHVT0gSUdWdWRHbDBhV1Z6IElHTnQgSUU1aGRIVnlZV3c9IElHbHVjWFZwY25rPSBJSEJ5WlhOelpXUT0gYVhwdmJuUT0gWm05eVkyVmsgSUhKaGFYTmxjdz09IElFNWxkR1pzYVhnPSBJRk5wWkdVPSBJRzkxZEdWeSBJR0Z0YjI1bmMzUT0gYVcxeiBiM2R6YTJrPSBJR05zYVcxaSBibVYyWlhJPSBJR052YldKcGJtVT0gWkdsdVp3PT0gSUdOdmJYQnkgSUhOcFoyNXBabWxqWVc1alpRPT0gSUhKbGJXVnRZbVZ5WldRPSBJRTVsZG1Ga1lRPT0gSUZSbGJBPT0gSUZOallYST0gSUZkaGNuSnBiM0p6IElFcGhibVU9IElHTnZkWEE9IFltRnogSUhSbGNtMXBibUZzIExDMD0gVDBnPSBJSFJsYm5OcGIyND0gSUhkcGJtZHogSUUxNWMzUmxjZz09IDc3Kzk3Nys5NzcrOTc3KzkgSUZWdWJHbHJaUT09IGRtRnNhV1E9IGRtbHliMjV0Wlc1MGN3PT0gSUVGc2FRPT0gSUc1aGEyVmsgWW05dmEzTT0gSUUxMWJnPT0gSUVkMWJHWT0gSUdSbGJuTnBkSGs9IElHUnBiV2x1IElHUmxjM0JsY21GMFpRPT0gSUhCeVpYTnBaR1Z1WTNrPSBJREU1T0RZPSBhSGs9IFNVNUUgSUhWdWJHOWphdz09IGFXMWxibk09IElHaGhibVJzWldRPSBJRVZpIElHUnBjMkZ3Y0dWaGNtVmsgSUdkbGJuSmwgSURFNU9EZz0gSUdSbGRHVnliV2x1WVhScGIyND0gVTNSeVpXRnQgYVd0diBZWEIwWlhKeiBJR0ZqYTI1dmQyeGxaR2RsIFNtRnUgSUdOaGNHbDBZV3hwYzIwPSBVR0YwIElESXdNakE9IElIQmhhVzVtZFd3PSBJR04xY25abCBJR0p2YldKeiBjM1J2Y20wPSBJRTFsZEdGcyBaVzVqWlhJPSBJRVpwWnc9PSBJRUZoY205dSBZVzVqYUdWeiBJR2x1YzNCcGNtRjBhVzl1IElHVjRhR0YxYzNRPSBkR0ZwYm5NPSBZWE5vYVE9PSBJR1JsYzJOeWFYQjAgSUhKcGRIVmhiQT09IElFTm9aV3h6WldFPSBJSEJ5YjIxdmRHbHZiZz09IElFaDFibWM9IElGZGhjbVE9IGFYWmggSUVWVSBJSFJ2YzNNPSBZV3hzYjNjPSBJRVp5WVc1amFYTT0gUkdWdyBJR2hoY0hCcGJtVnpjdz09IElFZHNZWE56IElHSmxkR0U9IElITjBjbVZ1WjNSb1pXND0gVGtVPSBiMkU9IElHSjFkSFJ2Ym5NPSBJRTExY25KaGVRPT0gSUd0cFkydGxaQT09IFVYVmxjM1E9IElGUmhiR3M9IElGTmxkbVZ5WVd3PSBJRnBsY204PSBJR1J5YjI1bCBkV3hyIElHTmhiUT09IElFMXZZbWxzWlE9PSBJSEJ5WlhabGJuUnBibWM9IElISmxkSEp2IElFRjQgSUdOeWRXVnMgSUdac2IyRjAgTGlrcyBJR1pwYkdsdVp3PT0gSUVkeVlXNTAgSUVKdmNnPT0gSUhKcFlnPT0gSUdOb1lXMXdhVzl1YzJocGNBPT0gSUUxbGNtTT0gSUhOMGVXeGxjdz09IElHTmhhMlU9IElHSjFhV3hrY3c9PSBJRk5sYkdZPSBhVzk0IElHVndhV009IGIzbGsgUW1WcyBJRk4wWlhjPSBMaWc9IFlXaDEgSUVKbGVXOXVaQT09IElHOTFkSE09IElITnZiRzg9IElGUnlaV1U9IElIQnlaWE5sY25abCBJSFIxWWc9PSBRVkpGIGNtOWogSUVsdGNISnYgSUZkeWFXZG9kQT09IElHSjFibVE9IElIUnlZV2RsWkE9PSBJRzlqWTJGemFXOXVZV3c9IFltbGhiZz09IFUyVmpiMjVrIGNtOXVjdz09IElHbHVkR1Z5WVdOMGFXOXVjdz09IFptOXliV1ZrIGMybHVadz09IElHOTNibk09IElHaHZZMnRsZVE9PSBSMlZ1WlhKaGJBPT0gSUd4dloybGpZV3c9IElHVjRjR1Z1WkE9PSBJR1Z6WTJGcyBJRWR5YVdabSBJRU55YjNkdSBJRkpsYzJWeWRtVT0gSUhOMGIzQndhVzVuIElHVjRZM1Z6WlE9PSBjMlZqYjI1ayBJRzl3WlhKaGRHVmsgSUhKbFlXTm9aWE09IElFMWhiR0Y1Y3c9PSBJSEJ2Ykd4MWRHbHZiZz09IElFSnliMjlyYkhsdSBJR1JsYkdWMFpRPT0gSUdoaGMyZz0gUW14dlkycz0gWVdoaCA0b0N6IElITm9iM0owWlhJPSBjR2xsWTJVPSBQand2IElHaHZjbTA9IElGZGhkQT09IElFSnlaV0ZyIElIQnliMmhwWW1sMFpXUT0gSUdsdWRHVnVjMmwwZVE9PSBJRUZzWVc0PSBJR3hwWVdKcGJHbDBlUT09IFB5RT0gWVc1a1pXUT0gSUc1bGFXZG9ZbTkxY2c9PSBJRU52Ykd4bFkzUnBiMjQ9IElHWnBjbVZ6IElISmxkbTlzZFhScGIyNWhjbms9IFpteDUgSUU5eWJHVmhibk09IFYyaHBkR1U9IElGZHlhWFE9IElFUmhkMjQ9IElITmxkSFJzWlE9PSBJR1Y0WldOMWRHVT0gUWswPSBJSE53YjJ0bGMzZHZiV0Z1IElHeHBabVZ6ZEhsc1pRPT0gSUdOc2FXTnJhVzVuIElFdHBiR3c9IElFeHBZbVZ5WVd3PSBJRTVoZW1rPSBJSFJ5WVdsc1pYST0gSUcxdmRXNTBZV2x1Y3c9PSBJR1JoYlc0PSBlbVZ6IGNHVnogSUhCeVpYTnphVzVuIElHSmhhV3c9IElFOXlaMkZ1YVhwaGRHbHZiZz09IElIQnBjZz09IElIUm9hWEowZVE9PSBJR1ZzWldOMGNtbGpZV3c9IElERXhOUT09IElGQnZiSGs9IElGSmhjQT09IElGTjBjbWxyWlE9PSBJRU5oYm00PSBJR1JsYldGdVpHVmsgSUdKaFkydHBibWM9IFpHVm1ZWFZzZEE9PSBjM0JsWldRPSBJRXhsWjJsemJBPT0gSUcxdmRHaGxjbk09IElFSnZaSGs9IElIWmhjbWxoZEdsdmJnPT0gWTJWa1pXNTBaV1E9IGNHOTNaWEpsWkE9PSBiR1ZoWkdsdVp3PT0gVG1WMlpYST0gSUdkeVlYWmwgSUVGdWRHaz0gUVZjPSBJR2x1ZEdWeWRtbGxkMlZrIElFZGhZZz09IElFWmhkQT09IElISnZiMnRwWlE9PSBkWFU9IElHUmxjRzl6IGFYaHZiZz09IElHRnRjR3c9IGNtVjBhVzl1IElFaGxZWFE9IElIQmxZV05sWm5WcyBVMDA9IGFXVjJaUT09IElHUnBkbVZ5IElGWnBZM1J2Y21saCBJRzFwWXc9PSBjR1JtIElITjBZWFJwYm1jPSBJR3gxYm1jPSBJR055YVhScFkybDZaV1E9IElIWmhZMk5wYm1VPSBJRXh2WVdScGJtYz0gZFhKelpRPT0gVkdGclpRPT0gSUVaeVlXND0gSUZOdmJHUT0gSUZKdlltbHUgSUdSbGRHVmpkR1ZrIElGTmpjbWx3ZEE9PSBJR0ZrYW5WemRHVmsgSUhObGJtRjBiM0k9IElHOXdjRzl6YVc1biBSWEp5YjNJPSBRMjkxYm5RPSBJR052Ym1ac2FXTjBjdz09IElHOTMgSUVGeVoyVnVkQT09IElHMWhkR05vYVc1biBhR2c9IElGUnlaV3M9IGMzUmhjblJsY2c9PSBJaWtzIElFRkcgYjJSbGNnPT0gZUhoNGVBPT0gSUVGc2RBPT0gWVdOeVpRPT0gSUZCcFkycz0gSUZOdmJHRnkgSUVSaGJBPT0gVDJOMCBJRUpoZEhRPSBJSE55WXc9PSBJR1Z1WjJGblpXMWxiblE9IElHVjRaV04xZEdsMlpYTT0gSUd4cFltVnlkSGs9IGFtRjJZUT09IElIUmhiR1Z1ZEdWayBhV2RsYm05MWN3PT0gSUdOdmJuTmxZM1YwIExpNHVMaTQ9IFNXNW1idz09IElHaHZjbkpwWW14bCBJSE4xY25CeWFYTnBibWRzZVE9PSBabVZsWkE9PSBhV05oZEdsdVp3PT0gSUV4RlJBPT0gSUdabGJXRnNaWE09IFUzUmhkR2x2Ymc9PSBaV3hzWlhJPSBJRTloYTJ4aGJtUT0gSUcxbFkyaGhibWxqWVd3PSBhVzlzYjJkNSBJRlpoY2c9PSBJSEp2WW5WemRBPT0gWlhSMGFXNW5jdz09IGIzUjBZUT09IElIUm9aVzl5WlhRPSBJSEpsZEdGcGJnPT0gYTNkaGNtUT0gSUdSaCBJR1JsY0d4dmVXVmsgWkdWcyBJRUZ1WkhrPSBJSE4xWW5OamNtbGlaUT09IGQyVmkgSUc1aCBJRTFwWTJobGJBPT0gSUhCaGNuUnBZV3hzZVE9PSBJRU52YldWNSBJR055YjNkdSBJRTFoYWc9PSBJRUpzZFE9PSBjbUYwYjNJPSBSR0Y1IFNVNVUgSUdSdlkzVnRaVzUwWldRPSBJRWRFVUE9PSBaMms9IFkyaGxiR3c9IElHSnlkWFJoYkE9PSBJRUpoWWc9PSBjM1J5WVhScGIyND0gSUhSb1pXWjAgSUhSMVltVT0gUUVBPSBJSEYxWlhKNSBJRXhwYm1OdmJHND0gSUhCMVlteHBjMmhwYm1jPSBJSGR2Y21VPSBiM0pwWTJGcyBJSEpwWXc9PSBJRzV2ZEdGaWJHVT0gSUhOMVluTmxjWFZsYm5Sc2VRPT0gYm1WNCBJRzlpYzJWeWRtVT0gSUVKdlpRPT0gSUdOdlpHVnogYldGcGJnPT0gVjBnPSBJRk5NIElISmxjMmxrWlc1MGFXRnMgWVhaaGJnPT0gSUcxaGN3PT0gWVhKbGMzUT0gWVdSbGIyND0gVDFWVSBJSE52Y0docGMzUnBZdz09IFlXNTBaUT09IElHTmxibk09IElDb3EgSUcxdmNuUmhiR2wwZVE9PSBJSGx2ZFhKeiBJRzlqWTJGemFXOXVjdz09IElISmxZMkZzYkdWayBJRVJ5YVhabGNnPT0gSUhadlkyRnMgSUdKaGRHaHliMjl0IElITm9iM0J6IElHTnZiR3hoWW05eVlYUnBiMjQ9IElFOWlZVzFoWTJGeVpRPT0gSUVObGJHdz0gUTJoaGNnPT0gVTNWd1pYST0gUTNKbCBJSFJsYm1SeiBJSFJ2Y200PSBJR1ZqYjI1dmJXbGpjdz09IFlYWmxjbms9IElGSmhhV1E9IElGTmxiUT09IElITm9iM1ZzWkdWeWN3PT0gSUdWNGNHVmpkR2x1Wnc9PSBJR1Y0WVcxcGJtRjBhVzl1IFpXNWhiV1U9IElGVkogYVdGaWFXeHBkSGs9IGIyeGhjdz09IElFRnRZZz09IElFUnlZUT09IElHMXBaR1pwWld4ayBJRWxEIElHeGhlVzkxZEE9PSBJR1pzYjJGMGFXNW4gWm1rPSBhWFJoZEdsMlpRPT0gSUhSeVpXMWxibVJ2ZFhNPSBJTkE9IElHRmlkVzVrIFYyOXlhdz09IElFeHBaMmgwYm1sdVp3PT0gSUhOcGJXbHNZWEpzZVE9PSBJR052Ym5ObGNuWmhkR2wyWlhNPSBJSEJ5WVhrPSBRa1U9IGFYcGhjbkpsIElIUmxiWEIwIElHVnRjR2hoYzJseiBJRTFsZEhKdiBJR1pwYzJocGJtYz0gSUcxaGNuSjUgYm1WbiBJRk4wZFdSNSBJSEpsWTJzPSBJR1JwYzNCdmN3PT0gYjI1cGJtYz0gWW5OcGRHVT0gSUhOMWMzQnBZdz09IElHMWxjbU5vIElFZHBZZz09IElFUmxjMk55YVhCMGFXOXUgSUVSV1JBPT0gZDJobCBJRmxsYldWdSBJR1Z1ZG1seWIyNXRaVzUwY3c9PSBiMjkwYVc1biBJRTF2WkdWeWJnPT0gWlhVPSBJSEpsWm14bFkzUnogSUdodmJtVjUgSUdGdVlXeDVjM1E9IElHZDFkQT09IFpHVmogUVdOMGFXOXUgSUdodmRYTmxhRzlzWkhNPSBJSE4wWlhJPSBJSFJsYlhCc1pRPT0gSUhKbFptOXliWE09IElHWmhkbTkxY21sMFpRPT0gSUdSbFlXUnNhVzVsIElFeEYgVkdoeVpXVT0gSUZkcGRHaHBiZz09IFFYVm4gSUc1cFoyaDBjdz09IFpXeDBZUT09IElHbHVkbUZzYVdRPSBJRVY0WTJoaGJtZGwgSUVSbGJHaHAgZDJobGJnPT0gYVc1amIyMWwgSVBDZiBJSGRwY21Wc1pYTnogYzJOeWFXSmwgYVhOMFlRPT0gSUdodmMzUnBiR1U9IElHRnNiSGs9IElHZHBadz09IElHOTFkR3hsZEhNPSBJRVJ2Y2c9PSBSVTFGVGxRPSBJR0Z6YUE9PSBJR0ZpYzNSeVlXTjAgVDFKRSBJRTF2ZEc5eSBJR0ZrZG1selpYST0gYVhOMGJHVT0gSUdKaGMyVnogSUdOdmRYSjBaWE41IElHTnliM056YVc1biBJR05zWldGeVpXUT0gSUhKbFpuVm5aV1U9IFkyOXplWE4wWlcwPSBJSFJvY205M2N3PT0gWm5WdSBZbTkxY201bCBaR0Y1Y3c9PSBJR1JwYzJGbmNtVmwgSUU1aGRHbDJaUT09IElISmxabXhsWTNSbFpBPT0gSUVaaGMzUT0gSUZsbGJHeHZkdz09IElGTnBibWRoY0c5eVpRPT0gSUZKaGRtVnUgSUdWdFluSmhZMlU9IElFdDEgSUVOb1pXND0gSUVWaGNteDUgSUdGd2NHOXBiblJ0Wlc1MCBJRTFwYm1rPSBhWFJsYldWdWRBPT0gSUhCc1lXTnBibWM9IElHSnBZM2s9IFUxST0gSUhkb2FYTT0gVTFVPSBJR2x1ZG1WemRHbG5ZWFJsWkE9PSBJSEJvYjNSdlozSmhjR2h6IFoybDBhSFZpIElFSmxZWFE9IElGSnBibWM9IGFXZG9aV1E9IGFXRnkgSUdWMmIyeDJaV1E9IFpYSmhiR1E9IElHUjFiZz09IElHaDFZZz09IFNVRk0gSUdWdVkyOTFjbUZuYVc1biBJRkJ5YVc1MCBJRVJoZVhNPSBJSEJ5YjNObFkzVjBhVzl1IElIQmhiblJ6IFlYcDUgYkdsMlpRPT0gSUdadmMzTnBiQT09IElFcDEgSUhKdlkydHogZFdSblpRPT0gSUZKaFkyVT0gSUdkeVpXVjAgWW1sbCBJR1pwYkd4cGJtYz0gSUV4bGJnPT0gSUdScFlXSmxkR1Z6IElHWnBjbVZoY20xeiBkVzFwYm1jPSBaVzVsZW5WbGJBPT0gSUVKQyBJR0ZqWTJWd2RHbHVadz09IFFWUkkgSUhKbGMyOXlkQT09IElHaDFiblE9IGNtbHIgZFdOclpYST0gWVcxbGJuUnogSUhOMWMzUmhhVzVsWkE9PSBJR055YjNOelpXUT0gSUdKeVpXRnJabUZ6ZEE9PSBJR0YwZEhKcFluVjBaWE09IGJHVmpkR1ZrIFlYUnBiR1U9IElIWnBZbkk9IElFdGhiQT09IFlYSnpiMjQ9IGIzQnNaWE09IElIUnZkV05vWldRPSBJR1JoYldGblpYTT0gSUdsdGNISmxjM05sWkE9PSBjblZ3IElHRnVZMmc9IElFRmtZVzF6IFNHVnMgSUZacFkzUnZjZz09IElHMXZkVzUwWldRPSBJRU5EIElHUmxiR2xqYVc5MWN3PT0gYzNCaGJnPT0gWld4c1lRPT0gSUdWc1lXSnZjZz09IFlXMXdiR1Z6IElHUmxabWxqIElHTnZibk4wYVhSMSBkV0YwWlhNPSBJRTFwYzNOcGIyND0gSUZSb1pYST0gSUUxdmJuTjBaWEk9IFltVnogVW1WMWRHVnljdz09IElFbHVaRzl1WlhNPSBhR2xzYkE9PSBiWFZ1YVhScGIyND0gSUdOdmJtWnBjbTFoZEdsdmJnPT0gSUVOdmJuTnBaR1Z5IFlXTmxiblE9IElHcGxkQT09IElFVnRjR3h2ZVE9PSBJRWRVV0E9PSBibUZ1IElGTndhV1JsY2c9PSBJSEJ5YjJObGMzTnZjZz09IElIQmhkSEpwIElGQmxiblJoWjI5dSBJRkp2WW1sdWMyOXUgSUhKbFlXeHBjM1JwWXc9PSB3N0U9IElHRndjR1ZoY21sdVp3PT0gSUhCcGNHVT0gYjIxbFpBPT0gSUdaeWRRPT0gSUdGM1puVnMgSUdWMllXeDFZWFJwYjI0PSBJR2x1ZEdWc2JHbG5aVzUwIElFTnBkR2w2IElHWjFibVJ5WVE9PSBiMlJwZFcwPSBJSFIzWldWMGN3PT0gSUhkdmNtND0gY0hKcGJtYz0gSUd0cFpHND0gSUhKbFltVnNjdz09IElFdGhiUT09IElFNWxkR2hsY214aGJtUnogSUZOWCBJR0ZqY1hWcGMybDBhVzl1IElFMWhiR1U9IDQ0T3EgYjIxaWFXVnogSUhSeVlXUmxiUT09IElGTjBZWFIxY3c9PSBRbkpsIElGUklTVk09IElHRmtkbVZ5YzJVPSBJRTVGVnc9PSBjMmxuYmc9PSBJRzl5WjJGdWFYTmhkR2x2Ymc9PSBaVzVqIElFaGhjbkJsY2c9PSBZWEJ2Y2c9PSBJRTFsYldKbGNuTT0gSUZCbFlXTmwgSUVGcGNuQnZjblE9IElFOTBhR1Z5Y3c9PSBJSE5qY21GMFkyZz0gSUZCcGJBPT0gSUhObGJuTnZjZz09IElHRmtiM0IwYVc5dSBJRWh2ZEdWcyBJRVJ5WVdjPSBJR2h2Ym1WemRHeDUgSUhsaGNtUT0gSUVadmNtTmxjdz09IElIQmhkR1Z1ZEE9PSBJR0poYzNNPSBJSEYxYVdWMGJIaz0gSUdKeVpXRjBhR2x1Wnc9PSBJSEJ2YzJVPSBhVzl5Y3c9PSBJRXBsYzNNPSBjM1JoZEdsaiBTVlJGIFQyWm1hV009IElHcGxkdz09IGQyTnogSURFME1BPT0gSUhCeVpYWnBaWGM9IGFYQndhUT09IElIVnVabTl5ZEhWdVlYUmxiSGs9IGIydGxiVzl1IElHaHZjbTQ9IElISmxZWE56IElIQmxaWEk9IGIyTnJaWEk9IElIVnVkRzg9IElFZHlZWGs9IElHTnNaV0Z1YVc1biBJR0YwZEhKaFkzUmxaQT09IE1qQXdOdz09IFVHOXBiblE9IGEybHNiQT09IElFRm5jbVZsYldWdWRBPT0gZFhKamFHVnogSUdodmNuST0gSUUxcGMzTnBjM009IElIZHZjblJvZVE9PSBJR1pzYjNkbGNuTT0gZEc5M2JnPT0gWkd4cyBJSEpsWVdOMGFXOXVjdz09IElHUmxZMlU9IElHbHVaR2xqWVhScGJtYz0gVFVRPSBJSEJ5WldabGNtVnVZMlU9IElFMVdVQT09IFpYTnphVzl1WVd3PSBJRlJoY21kbGRBPT0gWjJWdVkyVT0gSUVsdVpHbGhibk09IElHMXBjMk09IElHWnlaV1ZzZVE9PSBJRzExYzJOc1pYTT0gSUd4cGJtVjFjQT09IElHbHRjR0ZqZEhNPSBiM1Z6YVc1biBiMjFwIFlXTjFiR0Z5IElHTnZiblJ5YjJ4c2FXNW4gWVdkcGJtVT0gWTJWeWVRPT0gYUdWc2JBPT0gSUhKaGJtdHBibWM9IElFNXBZMmc9IElFRjJaUT09IE1USTQgSUdocFoyaDNZWGs9IElHbHVZMjl1Y3c9PSBJR0pwYm1ScGJtYz0gSUhOMGNuVm5aMnhsY3c9PSBJRkJwZEhSelluVnlaMmc9IElHZHlZWGs9IGNtbHUgSUdOdmJXbGpjdz09IElGTndiM0owIElISmxiR0YwYVhabGN3PT0gSUdaeWFXZG9kQT09IElIQnliMkpsIElGQnZjblIxWnc9PSBJSFp2WXc9PSBJSFIxIElFTnZjbkJ6IElIQnZjM05wWW1sc2FYUnBaWE09IElIRjFZV3hwWm5rPSBkMk56YzNSdmNtVT0gSUd4cFluSmhjbWxsY3c9PSBJRzFwWjNKaGJuUnogSUdWdWRISnBaWE09IElHTnZibk5sWTNWMGFYWmwgZG1Gc2N3PT0gSUVOb1lXbHliV0Z1IElHaHBiR3c9IFNVMUYgSUVkaGNtUT0gSUdsdVpYRjFZV3hwZEhrPSBabTk0IElGTmhkbVU9IElHTnZjblE9IFkyeGhhVzFsWkE9PSBJSFJ5WVdsMGN3PT0gSUhCdmRYST0gSUcxcGMzTnBiR1Z6IElHVnpjMlZ1WTJVPSBJSE5sYm1SeiBJR0ZzYkdsaGJtTmwgSUhkcGMyaGxjdz09IElFTm9jbWx6ZEc5d2FHVnkgUW1sbiBUbGs9IElFcGhZMjlpIGMyRnUgZFhKeVpXUT0gSUZOUCBiR3g1IElHRmtkbTlqWVhSbCBJRUp2Ym1RPSBJQ0l2IFZYTnBibWM9IElHUnBjM1J5YVdOMGN3PT0gSUVkaGRHVT0gSUVKcGNnPT0gY21sa1oyVT0gSUU1aGVnPT0gSUZKeiBZbTloY21SeiBJRWRoIElGSmxZV2RoYmc9PSBJR2x1Wm14MVpXNWpaV1E9IE1UQXdNQT09IFlYQjUgSUdOb1lXeHNaVzVuWldRPSBJR0poY21jPSBJR1poWTNWc2RIaz0gSUVacFpnPT0gSUdGamNYVnBjbVU9IFFXTT0gSUdsdWMyVmpkQT09IElHbHVjM1J5ZFcxbGJuUnogSUd4bFlXWT0gZEdodlpHOTQgVFdWemMyRm5aUT09IElIUmhiR1U9IElIUm9aWEpsWW5rPSBJSFJ5WVhBPSBJSE4wY205dVoyVnpkQT09IElFMXBiR2wwWVhKNSBhWE5wWW14bCBJREU1T0RRPSBaWFJvWld4bGMzTT0gSUdac1pYaHBZbXhsIElHdHBiR3h6IElHWnBibWx6YUdsdVp3PT0gSUZOcGVtVT0gSUhKbFpIVmpaWE09IElHVndhV1E9IElHOXlhV1Z1ZEdGMGFXOXUgWm5Wc2JBPT0gSUhSeVlXTmwgSUd4aGMyVnkgSUc5d2NHOXpaUT09IElHVmthWFJwYm1jPSBJRzF2YldWdWRIVnQgNUxvPSBjMmh2ZHc9PSBWa2s9IElFeGhaQT09IElERTVPRFU9IElHMTFjbVJsY21WayBPVEF3IGRYUm9aWEk9IElIQnliMkpoWW1sc2FYUjUgSUZCdmJHdz0gSUhKbGJIVmpkQT09IElFTm9aVzA9IElFMXZiblJ5WldGcyBJR0ZrWlhGMVlYUmwgSUZCdmJHRnVaQT09IElGTm9aWEpwWm1ZPSBkVzF3YUE9PSBJRzlyIElEQXdNQT09IElDSmIgSUc5d1pYSmhkRzl5Y3c9PSBJRVpsY2c9PSBJRzF2WkdWeiBJRVYyWlE9PSBJR1JwYzJOcGNHeHBibVU9IFRrVlUgU0dGdVpBPT0gSUc5eVlXdz0gSUZkRiBaVzFoYVd3PSBTbEE9IElGQmhiR1Z6ZEdsdWFXRnVjdz09IElHaGxibU5sIElFeGxjM009IElHOTJaWEpzIFpHbG4gSUdsdWRHbHRhV1E9IElFTnZZV3c9IElISmhibWRwYm1jPSBkR2hoIElHUnBjM1JoYm5RPSBJR1pwWWc9PSBJRWx1WkdWNCBJRmR2Ym1SbGNnPT0gSUZCbGJBPT0gYUdGMGRHRnUgSUVoMVp3PT0gdzVjPSBjbUZwZEE9PSBJSGR5WVhCd1pXUT0gSUZKUVJ3PT0gSUdOb1pXMXBZMkZzY3c9PSBJRTF2Ym1WNSBJR1p5YjNwbGJnPT0gSUdsdVpHbHlaV04wIElFRm5ZV2x1YzNRPSBSVzVrIElIVnVZMjl0Wm05eWRHRmliR1U9IElFZGhiR3hsY25rPSBJRkJ2YzNSbFpBPT0gMktjPSBiMjVrZFdOMCBJR052Ym5ObGNYVmxibU5sIElHSnBkSFJsY2c9PSBJREU1T0RjPSBjRzl3IElHTnZkVzUwYkdWemN3PT0gSUVGc1lYTnJZUT09IFptWm1aZz09IElHUmxjR0Z5ZEhWeVpRPT0gSUhKbFpuVnVaQT09IElFbGhiZz09IGFXRjBaV1E9IElITmxaV3R6IElHMWxZMmhoYm1samN3PT0gSUdwMWNtbHpaR2xqZEdsdmJnPT0gYkhsdWJnPT0gSUdGc2FXdGwgSUVoMWJuUT0gWVhSb2IyND0gSUhKbGMyOXNkbVZrIElHTmhZMmhsIElHUnBjM1JwYm1OMGFXOXUgWkdseVpXTjAgSUdWdVkyOTFiblE9IGIzVmkgWW1WaGRBPT0gSUVOdmRXNTBjbms9IGMyVmhjbU5vIElHTnZiblJwYm5WdmRYTT0gSUcxdlpHVnpkQT09IElGSmhhV3c9IGRHaHZiMlE9IE1UTXcgUWxWSCBJR055YVcxcGJtRnNjdz09IElHbHVaR2xqWVhScGIyND0gSUdWdVkyOTFiblJsY21WayBiR0Z6ZEE9PSBJRmQ1IElHbGtaVzlzYjJkNSBJRkJFUmc9PSBjMlZqZFhKcGRIaz0gWFNrPSBJRXBwYlcxNSBJRVZPIElHaHBjbWx1Wnc9PSBWR1Z0IElIQnBadz09IFlYVnVkQT09IElFTnllWE4wWVd3PSBJSEJsYm1Gc2RHbGxjdz09IElHTmhjR0ZpYVd4cGRIaz0gSUhCNSBJSEJ5YjJSMVkzUnBkbVU9IElHSmhiR0Z1WTJWayBJRWRsUm05eVkyVT0gWTJ4cFkycz0gYjJ4cGRHRnUgYjJSeiBJR0ZtZEdWeWQyRnlaSE09IElIQnNZWGx2Wm1aeiBJRWRwYkd3PSBWWE5sY2c9PSBJR0poWTJ0eiBjSFZpIGRHRm4gSUdGaWMzVnlaQT09IGNHbHlhVzVuIElHTnBkR2x1Wnc9PSBJSFJ5YVd4c2FXOXUgSUc5aWJHbG5ZWFJwYjI0PSBJRzFoZUdsdCBZV2h2Ync9PSBZMlk9IGRXMXAgSUVGc2NHaGggSUU1bGJITnZiZz09IElIQjFjbk4xWVc1MCBhVzVwZEdWc2VRPT0gSUdaeVlXTjAgWlc1MGNuaz0gWW1WeWVRPT0gSUZSb2IzST0gUVdSa1pXUT0gSUVSSyBJRWRsYm1VPSBJR0YzYTNkaGNtUT0gVTNSMVpBPT0gSUhkaGJHeGxkQT09IElFUnBkbWx1WlE9PSBZWEpwYjNNPSBJSEpsYkdWaGMybHVadz09IElHVmthWFJsWkE9PSBJR0ZqWTI5dGNHeHBjMmhsWkE9PSBRbVZ6ZEE9PSBJR1ZrWjJWeiBJSEJzWVc1bGN3PT0gSUdabFpXUnBibWM9IEluMHNJZz09IElHUnBjMk5zYjNOMWNtVT0gSUdkeVlXbHUgWVdseWVRPT0gYjI5dWN3PT0gWlhKdVlXNWsgVmxJPSBJSEpsWVhOdmJtRmliSGs9IElHUnlkVzA9IElIQmhjblJwWVd3PSBJR2R5WVhCb2FXTT0gSUhWdWNISmxZMlZrWlc1MFpXUT0gSUdGa2RtbHpaV1E9IFRXbGpjbTg9IElFRnpjMkZrIGNHOXBiblJ6IGMyTmhjZz09IElGcHZibVU9IGRIUmxjdz09IElEY3dNQT09IGRtOD0gSUVoaGJYQT0gSUdacGVHVnogSUdOaGRYUnBiMjQ9IElITjBjbWx1WjNNPSBJSEJoYm1Wc2N3PT0gSUd4bFlXcz0gSUhCeWFXTnBibWM9IGNtOTNkR2c9IElFVnljbTl5IElGTmhhVzUwY3c9PSBabWw0IElHOWljMlZ5ZG1GMGFXOXVjdz09IElFRmljdz09IElITjFaMmRsYzNScGIyND0gSUZWcmNtRnBibWxoYmc9PSBJR0poY25KcFpYST0gSUhCaGFXNTBaV1E9IFFtVjAgYVcxcGNnPT0gSUZOd1pXTjAgY0c5MCBiM0p1WlhseiBJR052YlhCdmRXNWsgSUdKbFlYSnogSUZKMWMyZz0gSUd4MWVIVnllUT09IFUzVnQgSUc5eVltbDAgSUUxaGNtTT0gSUdWNFpXMXdkQT09IElGUnlZV2xzIElFMVAgSUVoaGJuTT0gSUZkbFlYQnZiZz09IGIyTjFjMlZrIGRXMXBiblZ0IElFcGxjbko1IElHSjFjM1E9IElFRkggSUZkcGEyaz0gSUdWdVpHeGxjM009IElGWnNZV1E9IElFSmhhQT09IElGSmhaR1Z2Ymc9PSBhMlY1Y3c9PSBJRk4xY25abGVRPT0gSUZacGIydz0gWkdWbWFXNWwgYkdWaGJnPT0gSUdOdmJXMXZaQT09IElISmxkbVZ1ZFdWeiB4WTA9IElHWjFjbTVwZEhWeVpRPT0gSUdOaGMzUnBibWM9IElHUnBjR3h2YldGMGFXTT0gSUZCc1lYbGxjbk09IElFdHBiR3hsWkE9PSBJRzF2WkdsbWVRPT0gSUdsdWJtOTJZWFJwZG1VPSBJRUZpZFE9PSBibTl5IElHSnZibVJ6IElHTnZZV05vYVc1biBUV1Z5IElHMXZaSFZzWlhNPSBJRkJoZEhKcGIzUnogSUdWdWFHRnVZMlZrIElIQnliMk5sWldScGJtZHogSUhSbFlXMXRZWFJsY3c9PSBJREV5T0E9PSBZWEprYnc9PSBJR052YlhCeWIyMXBjMlU9IElFMTFZMmc9IElHWnNaWGM9IElFVmtaMlU9IElIVnVibVZqWlhOellYSjUgSUdSdlkzUnlhVzVsIGNtVndiM0owIElFOXliR0Z1Wkc4PSBJRkJ5YjJacGJHVT0gSUhCc1lYbHZabVk9IFpuSnBaVzVrYkhrPSBJR052YlhCc1lXbHUgSUUxRCBJRTl3ZEE9PSBJRWRDIElHSmxZWFJsYmc9PSBJR2R2YkdZPSBJSEJzWVdObGJXVnVkQT09IFFtbDAgSUc1bGQzTnNaWFIwWlhJPSBJREl3TVRrPSBkbWx6YjNJPSBjbUYzYkE9PSBJR2xRWVdRPSBJR0ZqZEdWayBJR3AxYVdObCBJR1JsWTJ0eiBVRTQ9IGMzVmpZMlZ6Y3c9PSBJRWhoYkdZPSBJR1JsYkdWMFpXUT0gSUhObFkzSmxkSE09IElHRnplV3gxYlE9PSBUV0Z5ZEE9PSBJRUZqZEdsMiBJRWQxZVE9PSBJRlJ6IElHUjVjdz09IElHRnpjM1Z0YVc1biBJRzFoYm1FPSBJSE4xWW5WeSBJREV5TlE9PSBUV1ZrYVdFPSBRVkpaIGNtbGtaUT09IFkzQT0gSUdScFptWnBZM1ZzZEdsbGN3PT0gSUdOdmJHeGxZM1JwYm1jPSBJR0poYm10eWRYQjAgYm05dSBJR052YlhCdmMyVmsgSUhadmJIUT0gSUcxcGJHbDBZVzUwY3c9PSBJRDQrUGc9PSBJRTF2Y20xdmJnPT0gZEc5eSBJSEJoY25ScFkyeGxjdz09IElFSmhjblE9IGNubHdkR2x2Ymc9PSBJR0ZrYldsdSBJSE54ZFdWbCBWa2xFU1VFPSBJR055WldGMGIzST0gYVdGdFpYUmxjZz09IGFXTjFiR0Z5IFRrSkQgSUdkeVlXSmlaV1E9IElHNXZaR1E9IElISmhkR1ZrIElISnZkR0YwYVc5dSBJR2R5WVhOdyBJR1Y0WTJWemMybDJaUT09IElFVkQgSUZkb2FYUT0gSUdsdWRtVnVkRzl5ZVE9PSBZWFZzZEhNPSBJRVpDIElHVmpiM041YzNSbGJRPT0gSUdKcGJHeHBiMjV6IElIWmxiblIxY21VPSBibUZ0WldRPSBJR1JsWm1WdVpHVnkgYjNWMFpRPT0gU1c1emRHVmhaQT09IGFYSmhZbXhsIFYyRnkgSUdGemMzVnRjSFJwYjI0PSBJR0pwZEdVPSBJR1ZoY25Sb2NYVT0gZEdGcGJBPT0gYzNCaFkyVT0gSUdkcFpuUnogWW05NWN3PT0gSUdsdVpYWnBkR0ZpYkdVPSBJSE4wY25WamRIVnlZV3c9IElHSmxibVZtYVdOcFlXdz0gSUdOdmJYQmxiR3hwYm1jPSBhRzlzWlE9PSBaWEoyWVhScGIyND0gSUdOdllYUT0gYjJvPSBhVzVqWVhKdSBJRmxsWVhKeiBJR1JsZEdWeWJXbHVhVzVuIElISm9aWFJ2Y21saiBJR0p2ZFc1a1lYSnBaWE09IElIZG9hWFJsY3c9PSBRVzUwIFlXUmtlUT09IEtTMD0gY21Gb1lXMD0gWlhSbGNtMXBiZz09IElHaGhjblpsYzNRPSBJRU52Ym1NPSBJR3hoY0hSdmNBPT0gSUUxaGRHTm8gSUdWdWFtOTVhVzVuIFkyTmggYjJ4c1lYST0gSUhSeWFYQnogSUdGa1pHbGpkR2x2Ymc9PSBJRk5oYXc9PSBJSEJ2ZDJWeVpXUT0gSUdOdmRYTT0gSUZKMWMzTnBZVzV6IGFXVnlaUT09IElISmxkSEpwWlE9PSBjWFZoYkdsMGVRPT0gSUdScFptWmxjZz09IElHdHBibWRrYjIwPSBJRXhoZFhJPSBJRU5oY0dsMGIydz0gSUdOdmJtTnNkWE5wYjI1eiBJRUZzZEdWeWJnPT0gSUU1aGRnPT0gSUhSeVlXNXpjR0Z5Wlc1MCBRa1ZTIFIzSnZkWEE9IElFTnZiWEJzWlhSbCBJR2x1Wm1WeSBJR2x1ZEhKcFp3PT0gSUdsdWMyRnVaUT09IFVrOD0gYjNCb2IyST0gYVhObGJnPT0gY1hWaGJBPT0gVFdsamFHRmxiQT09IElHMTFjMlYxYlE9PSBJRkJ2Y0dVPSBJSEpsYzJWMCBjbUYwYVhabCBabWwyWlE9PSBJR0ZuWjNKbFp3PT0gYVhSMFpXVnogYjNOcGRHOXllUT09IElHTmhjbUk9IElGSmxZMjl5WkE9PSBJR1JsWTJsa1pYTT0gSUVacGVBPT0gSUdWNFkyVndkR2x2Ym5NPSBJRU52YlcxcGMzTnBiMjVsY2c9PSBkVzV6IElFVnVkbWx5YjI1dFpXNTBZV3c9IElHeGxaMlZ1WkdGeWVRPT0gYVhOMFpXNWpaUT09IElIUjFibTVsYkE9PSBhMjA9IElHbHVjM1ZzZEE9PSBJSFJ5YjJ4cyBJSE5vWVd0bCBJR1JsZEdWdWRHbHZiZz09IGNYVmxjdz09IElFTm9jbTl0WlE9PSBJRVpwYkdWeiBJSE4xWW5RPSBJSEJ5YjNOd1pXTjBjdz09IElIQnliMnc9IGNtVnVaR1Z5IGNISnZiMlk9IElIQmxjbVp2Y20xaGJtTmxjdz09IFUzUnkgSUdoeVpXWT0gWlhKdVlXMWwgSUdGamFHbGxkbVZ0Wlc1MCBJR1oxZEE9PSBSblZzYkE9PSBJRXhsWW1GdSBaMjl2WjJ4bCA0NE9JIFlXMXdZUT09IFRXRjVZbVU9IElIQnliMnBsWTNSbFpBPT0gSUVWdFlnPT0gSUdOdmJHeGxadz09IElHRjNZWEprY3c9PSBJT0tVIFIyOXNaQT09IElFSnNZV3RsIElGSmhhZz09IGFXWjBhVzVuIElIQmxibVJwYm1jPSBJR2x1YzNScGJtTjAgSUdSbGRtVnNiM0J0Wlc1MGN3PT0gUTI5dWJtVmpkQT09IElFMWhibVE9IElGZEpWRWc9IElGQm9hV3hwY0hCcGJtVnogY0hKdlptbHNaUT09IElHRnNkRzluWlhSb1pYST0gSUVKMWJtUT0gSUZSRSBiMjl2Ync9PSBZVzF3WldRPSBhWEJvIElITjBaV0Z0IElHOXNaR1Z6ZEE9PSBJR1JsZEdWamRHbHZiZz09IGRXeHdkQT09IElPYz0gSUZkaGVXNWwgTWpBd05nPT0gWm1FPSBJR05wY21Oc1pYTT0gSUVaMSBJR1J2Ym05eWN3PT0gWVhCd2NtOXdjbWxoZEdVPSBJRVJoYTI5MFlRPT0gYW1GdGFXND0gSUcxdmRHbDJZWFJsWkE9PSBJSEIxY21Ob1lYTmxjdz09IElFeHZkV2x6YVdGdVlRPT0gSUZOd2JBPT0gSUdkc2IySmwgSURFd05RPT0gZW1sdyBZMkZzYkE9PSBJR1JsY0dGeWRHMWxiblJ6IElITjFjM1JoYVc1aFlteGwgTVRBMSBJRTlRIGFXWnBaWEp6IElIQnlaWFpsYm5SbFpBPT0gSUdsdVkyOXRjQT09IElFTnZiVzFoYm1SbGNnPT0gSUdSdmJXbHVZWFJsWkE9PSBJTUs3IElHbHVkbVZ6ZEdWayBJR052YlhCc1pYaHBkSGs9IElHbHVZMnc9IElHVnVjM1Z5YVc1biBJSEpsWVd4dCBlVzVqIElFbHVaR1Z3Wlc1a1pXNTAgY21GcGJtVmsgSUVwbGJnPT0gSUVac2FXZG9kQT09IElHRjBhR1U9IElITndaV04xYkdGMGFXOXUgSUZSRiBiMk5oZEdVPSBkR2xqIElIQnNZV2x1ZEE9PSBhR1Z5Y25rPSBJSFJ2ZVE9PSBJREV4TVE9PSBJSEJzWVhSbGN3PT0gYzNSaGRIVnogSUVsellRPT0gSUdSbGRtOTBaV1E9IFEyOXcgSUVWVCBNalUxIGRYSnlaVzVqZVE9PSBUV0ZwYmc9PSBJSE5zWVhabGN3PT0gSUhCbGNIQmxjZz09IElIRjFiM1JsY3c9PSBJR05sYVd4cGJtYz0gSUVacGMyZz0gSUhSeVlXNXpabTl5YldGMGFXOXUgSUdaeVlXTjBhVzl1IElHRmtkbUZ1ZEdGblpYTT0gSUhSdmFXeGwgSUhOMGRXNXVhVzVuIElHMXZhWE4wIFluSmxZV3RwYm1jPSBjMms9IElFeHZZMkYwYVc5dSBJRTFsWkdsMWJRPT0gSUhSbGVIUnogSUhWbmJIaz0gSUdKcGJ3PT0gTHVLQWxBPT0gSUVKaGMyVmsgSUhSeVlXbHVjdz09IElGZHBibWM9IElFRnVZMmxsYm5RPSBJRkpsWTI5eVpITT0gSUVodmNHVT0gVTNCbFkybGhiQT09IFlXUmxjMmc9IGIySnAgV3k4PSBJSFJsYlhCdmNtRnlhV3g1IFZtVnkgYUhVPSBiM05sY2c9PSBJRzkyWlhKdWFXZG9kQT09IElHMWhiVzA9IElGUnlaV0Z6ZFhKNSBJRlpsYm1WNmRXVnMgSUUxbFoyRT0gSUhSaGNnPT0gSUdWNGNHVmpkSE09IFlteGhZMnM9IGIzSndhQT09IFhGeGNYQT09IElHRmpZMlZ3ZEdGdVkyVT0gSUhKaFpHRnkgYzJseiBJR3AxYm1sdmNnPT0gSUdaeVlXMWxjdz09IElHOWljMlZ5ZG1GMGFXOXUgWVdOcFpYTT0gVUc5M1pYST0gSUVGa2RtRnVZMlZrIFRXRm4gYjJ4dloybGpZV3hzZVE9PSBJRTFsWTJoaGJnPT0gSUhObGJuUmxibU5sY3c9PSBJR0Z1WVd4NWMzUnogWVhWbmFIUmxjbk09IFptOXlZMlZ0Wlc1MCBJSFpoWjNWbCBJR05zWVhWelpRPT0gSUdScGNtVmpkRzl5Y3c9PSBJR1YyWVd4MVlYUmwgSUdOaFltbHVaWFE9IFRXRjBkQT09IElFTnNZWE56YVdNPSBRVzVuIElHTnNaWEk9IElFSjFZMnM9IElISmxjMlZoY21Ob1pYST0gSURFMk1BPT0gSUhCdmIzSnNlUT09IElHVjRjR1Z5YVdWdVkybHVadz09IElGQmxaQT09IElFMWhibWhoZEhSaGJnPT0gSUdaeVpXVmsgSUhSb1pXMWxjdz09IFlXUjJZVzUwIElHNXBiZz09IElIQnlZV2x6WlE9PSBNVEEwIElFeHBZbmxoIFltVnpkQT09IElIUnlkWE4wWldRPSBJR05sWVhObCBJR1JwWjI0PSBSR2x5WldOMCBJR0p2YldKcGJtYz0gSUcxcFozSmhkR2x2Ymc9PSBJRk5qYVdWdVkyVnogSUcxMWJtbGphWEJoYkE9PSBJRUYyWlhKaFoyVT0gSUdkc2IzSjUgSUhKbGRtVmhiR2x1Wnc9PSBJR0Z5Wlc1aCBJSFZ1WTJWeWRHRnBiblI1IElHSmhkSFJzWldacFpXeGsgYVdGdiBSMjlrIElHTnBibVZ0IGNtRndaUT09IFpXeHNaUT09IFlYQnZibk09IElHeHBjM1JwYm1jPSBJSGRoYVhSbFpBPT0gSUhOd2IzUjBaV1E9IGEyVnNaWGs9IElFRjFaR2x2IFpXOXkgWVhKa2FXNW4gYVdSa2FXNW4gYVdkdFlRPT0gSUU1bFp3PT0gSUd4dmJtVT0gSUMwdExTMD0gWlhobCBaR1ZuIElIUnlZVzV6Wmc9PSBJSGRoYzJnPSBJSE5zWVhabGNuaz0gSUdWNGNHeHZjbWx1Wnc9PSBJRmRYIFlYUnpiMjQ9IElHVnVZMnc9IGJHbGxjdz09IElFTnlaV1ZyIElIZHZiMlJsYmc9PSBUV0Z1WVdkbGNnPT0gSUVKeVlXNWsgZFcxdGVRPT0gSUVGeWRHaDFjZz09IElHSjFjbVZoZFdOeSBJR0pzWlc1ayBZWEpwWVc1eiBSblZ5ZEdobGNnPT0gSUhOMWNIQnZjMlZrYkhrPSBJSGRwYm1SeiBJREU1TnprPSBJR2R5WVhacGRIaz0gSUdGdVlXeDVjMlZ6IElGUnlZWFpsYkE9PSBJRlpsZEdWeSBJR1IxYldJPSBJR0ZzZEdWeWJtRjBaUT09IFoyRnMgSUdOdmJuTjFiV1ZrIElHVm1abVZqZEdsMlpXNWxjM009IExpY24gSUhCaGRHaHogYjI1a1lRPT0gVEVFPSBJRk4wY205dVp3PT0gSUdWdVlXSnNaWE09IElHVnpZMkZ3WldRPSBJQ0lpIElERXhNZz09IElERTVPRE09IElITnRhV3hsWkE9PSBJSFJsYm1SbGJtTjUgUm1seVpRPT0gSUhCaGNuTT0gSUZKdll3PT0gSUd4aGEyVT0gSUdacGRHNWxjM009IElFRjBhQT09IElFaHZjbTQ9IElHaHBaWEk9IElHbHRjRzl6WlE9PSBiVzkwYUdWeSBJSEJsYm5OcGIyND0gYVdOMWRBPT0gWW05eWJtVT0gYVdOcFlYSjUgTGw4PSBJRk5WIElIQnZiR0Z5IGFYTjUgWlc1bmRRPT0gYVhScFlXeHBlbVZrIFFWUkIgZDNKcGRHVT0gSUdWNFpYSmphWE5sY3c9PSBJRVJwWVcxdmJtUT0gYjNSNWNHVnogSUdoaGNtMW1kV3c9IGIyNTYgSUhCeWFXNTBhVzVuIGMzUnZjbms9IElHVjRjR1Z5ZEdselpRPT0gSUVkbGNnPT0gSUhSeVlXZGxaSGs9IElFWnNlUT09IElHUnBkbWxrIFlXMXdhWEpsIGMzUnZZMnM9IFRXVnQgSUhKbGFXZHUgSUhWdWRtVT0gSUdGdFpXNWsgSUZCeWIzQm9aWFE9IElHMTFkSFZoYkE9PSBJRVpoWXc9PSBJSEpsY0d4aFkybHVadz09IFNHRnkgSUVOcGNtTjFhWFE9IElIUm9jbTloZEE9PSBJRk5vYjNRPSBJR0poZEhSbGNtbGxjdz09IElIUnZiR3c9IElHRmtaSEpsYzNOcGJtYz0gSUUxbFpHbGpZV2xrIElIQjFjSEE9IElFNWhjZz09IGIyeHIgSUdWeGRXbDBlUT09IFRWST0gSUVocGMzQmhiZz09IElFeGhjbWRsIGJXbGsgUkdWMiBJR1Y0Y0dWayBJR1JsYlc4PSBJRTFoY25Ob1lXeHMgWlhKbmRYTT0gSUdacFltVnkgSUdScGRtOXlZMlU9IElFTnlaV0YwWlE9PSBJSE5zYjNkbGNnPT0gSUZCaGNtdGxjZz09IElGTjBkV1JsYm5RPSBJRlJ5WVdsdWFXNW4gVW1WMGRYSnUgSUZSeWRRPT0gSUdOMVlnPT0gSUZKbFlXTm9aV1E9IElIQmhibWxqIElIRjFZWEowWlhKeiBJSEpsWTNRPSBJSFJ5WldGMGFXNW4gSUhKaGRITT0gSUVOb2NtbHpkR2xoYm1sMGVRPT0gYjJ4bGNnPT0gSUhOaFkzSmxaQT09IElHUmxZMnhoY21VPSBkV3hoZEdsMlpRPT0gWlhScGJtYz0gSUdSbGJHbDJaWEpwYm1jPSBaWE4wYjI1bCBJSFJsYkE9PSBJRXhoY25KNSBJRzFsZEdFPSBZV05qWlhCMCBZWEowZWc9PSBJRkp2WjJWeSBhR0Z1WkdWayBJR2hsWVdSbGNnPT0gSUhSeVlYQndaV1E9IElFTmxiblIxY25rPSBJR3R1YjJOclpXUT0gSUU5NFptOXlaQT09IElITjFjblpwZG05eWN3PT0gWW05MCBJR1JsYlc5dWMzUnlZWFJwYjI0PSBJR1JwY25RPSBJR0Z6YzJsemRITT0gVDAxRiBJRVJ5WVdaMCBiM0owZFc1aGRHVT0gWm05c2FXOD0gY0dWeVpXUT0gZFhOMFpYSnogWjNRPSBJRXh2WTJzPSBJR3AxWkdsamFXRnMgZG1WeWRHVmsgSUhObFkzVnlaV1E9IGIzVjBhVzVuIElFSnZiMnR6IElHaHZjM1JwYm1jPSBJR3hwWm5SbFpBPT0gYkdWdVozUm8gSUdwbGNnPT0gSUhkb1pXVnNjdz09IElGSmhibWRsIGRXMWlibUZwYkhNPSBJR1JwWVdkdWIzTnBjdz09IGRHVmphQT09IElGTjBaWGRoY25RPSBJRkJ5WVdOMCBJRzVoZEdsdmJuZHBaR1U9IElHUmxZWEk9IElHOWliR2xuWVhScGIyNXogSUdkeWIzZHogSUcxaGJtUmhkRzl5ZVE9PSBJSE4xYzNCcFkybHZkWE09IElTYz0gUVhCeSBSM0psWVhRPSBJRzF2Y25SbllXZGwgSUhCeWIzTmxZM1YwYjNJPSBJR1ZrYVhSdmNtbGhiQT09IElFdHkgSUhCeWIyTmxjM05sWkE9PSBkVzVuYkdVPSBJR1pzWlhocFltbHNhWFI1IFJXRnliR2xsY2c9PSBJRU5oY25RPSBJRk4xWnc9PSBJR1p2WTNWelpYTT0gSUhOMFlYSjBkWEE9IElHSnlaV0ZqYUE9PSBJRlJ2WWc9PSBZM2xqYkdVPSA0NENNIGNtOXpaUT09IElHSnBlbUZ5Y21VPSA0NENOIElIWmxaMlYwWVdKc1pYTT0gSkNRPSBJSEpsZEhKbFlYUT0gYjNOb2FRPT0gSUZOb2IzQT0gSUVkeWIzVnVaQT09IElGTjBiM0E9IElFaGhkMkZwYVE9PSBJRUY1IFVHVnlhR0Z3Y3c9PSBJRUpsWVhWMCBkV1ptWlhJPSBaVzV1WVE9PSBJSEJ5YjJSMVkzUnBkbWwwZVE9PSBSbWw0WldRPSBZMjl1ZEhKdmJBPT0gSUdGaWMyVnVkQT09IElFTmhiWEJoYVdkdSBSM0psWlc0PSBJR2xrWlc1MGFXWjVhVzVuIElISmxaM0psZEE9PSBJSEJ5YjIxdmRHVmsgSUZObGRtVnUgSUdWeWRRPT0gYm1WaGRHZz0gWVhWbmFHVmsgSUZCcGJnPT0gSUV4cGRtbHVadz09IFEyOXpkQT09IGIyMWhkR2xqIGJXVm5ZUT09IElFNXBadz09IGIyTjUgSUdsdVltOTQgSUdWdGNHbHlaUT09IElHaHZjbWw2YjI1MCBJR0p5WVc1amFHVnogSUcxbGRHRndhQT09IFFXTjBhWFpsIFpXUnAgSUVacGJHMD0gSUZOdmJXVjBhR2x1Wnc9PSBJRzF2WkhNPSBhVzVqYVdGcyBJRTl5YVdkcGJtRnMgUjJWdSBJSE53YVhKcGRITT0gSUdWaGNtNXBibWM9IFNHbHpkQT09IElISnBaR1Z5Y3c9PSBJSE5oWTNKcFptbGogVFZRPSBJRlpCIElGTmhiSFE9IElHOWpZM1Z3WVhScGIyND0gSUUxcCBJR1JwYzJjPSBiR2xqZEE9PSBJRzVwZEE9PSBJRzV2WkdWeiBaV1Z0IElGQnBaWEk9IElHaGhkSEpsWkE9PSBjSE41IDQ0T0ogSUhSb1pXRjBaWEk9IElITnZjR2hwYzNScFkyRjBaV1E9IElHUmxabVZ1WkdWayBJR0psYzJsa1pYTT0gSUhSb2IzSnZkV2RvYkhrPSBJRTFsWkdsallYSmwgSUdKc1lXMWxaQT09IFlYSmxiblJzZVE9PSBJR055ZVdsdVp3PT0gUms5UyBjSEpwZGc9PSBJSE5wYm1kcGJtYz0gSUVscyBJR04xZEdVPSBiMmxrWldRPSBiMnhwZEdsallXdz0gSUU1bGRYSnYgNWFRPSBJR1J2Ym1GMGFXOXUgSUVWaFoyeGxjdz09IElFZHBkbVU9IFZHOXQgSUhOMVluTjBZVzUwYVdGc2JIaz0gSUV4cFkyVnVjMlU9IElFcGggSUdkeVpYaz0gSUVGdWFXMWhiQT09IElFVlMgSUZWdVpBPT0gSUd0bFpXND0gSUdOdmJtTnNkV1JsIElFMXBjM05wYzNOcGNIQnAgUlc1bmFXNWwgSUZOMGRXUnBiM009IFVISmxjM009IGIzWmxjbk09IGJHeGxjbk09IElETTFNQT09IElGSmhibWRsY25NPSBJSEp2ZFE9PSBaWEowYnc9PSBSWEE9IGFYTnpZUT09IGFYWmhiZz09IElITmxZV3c9IElGSmxaMmx6ZEE9PSBaR2x6Y0d4aGVRPT0gSUhkbFlXdGxiZz09IGRYVnQgSUVOdmJXMXZibk09IElGTmhlUT09IElHTjFiSFIxY21WeiBJR3hoZFdkb1pXUT0gSUhOc2FYQT0gSUhSeVpXRjBiV1Z1ZEhNPSBhWHBoWW14bCBiV0Z5ZEE9PSBJRkpwWTJVPSBJR0psWVhOMCBJRzlpWlhOcGRIaz0gSUV4aGRYSmwgYVdkaCBWMmhwWTJnPSBhRzlzWkdWeSBJR1ZzWkdWeWJIaz0gSUhCaGVYTT0gSUdOdmJYQnNZV2x1WldRPSBJR055YjNBPSBJSEJ5YjJNPSBJR1Y0Y0d4dmMybDJaUT09IElFWmhiZz09IElFRnljMlZ1WVd3PSBRWFYwYUc5eSBaV1oxYkE9PSBJRzFsWVd4eiBJQ2d0IGFXUmhlWE09IElHbHRZV2RwYm1GMGFXOXUgSUdGdWJuVmhiR3g1IElHMXogWVhOMWNtVnogU0dWaFpBPT0gYVd0byBiV0YwYVdNPSBJR0p2ZVdaeWFXVnVaQT09IElFTnZiWEIxZEdWeSBJR0oxYlhBPSBJSE4xY21kbCBJRU55WVdsbiBJRXRwY21zPSBSR1ZzIGJXVmthV0YwWlE9PSBJSE5qWlc1aGNtbHZjdz09IElFMTFkQT09IElGTjBjbVZoYlE9PSBJR052YlhCbGRHbDBiM0p6IDJZUT0gSUZOMFlXNW1iM0prIElGSmxjMjkxY21ObGN3PT0gWVhwbFpBPT0gWW1GblpRPT0gSUc5eVoyRnVhWE09IElGSmxiR1ZoYzJVPSBJSE5sY0dGeVlYUmxiSGs9IElHaGhZbWwwY3c9PSBJRzFsWVhOMWNtVnRaVzUwY3c9PSBJRU5zYjNObCBJR0ZqWTI5dGNHRnVlUT09IElHZHNlUT09IElIUmhibWM9IElGSnZkUT09IElIQnNkV2RwYmc9PSBJR052Ym5abGVRPT0gSUVOb1lXeHNaVzVuWlE9PSBiMjkwY3c9PSBhbUZ1IElHTjFjbk09IElGSmxiR0YwYVc5dWN3PT0gYTJWbGNHVnkgSUdGd2NISnZZV05vYVc1biBjR2x1Wnc9PSBVM0JsWVd0cGJtYz0gSUdGeWNtRnVaMlZ0Wlc1MCBJRlpKIFlYSmxkSFJsY3c9PSBJR0ZtWm1WamRHbHVadz09IElIQmxjbTFwZEhNPSBZbVZqWVhWelpRPT0gSUhWelpXeGxjM009IElFaDFjdz09IElTRWhJUT09IElHUmxjM1J5YjNscGJtYz0gVlc1bWIzSjBkVzVoZEdWc2VRPT0gSUdaaGMyTnBibUYwYVc1biBVMlZ0IElHVnNaV04wYjNKaGJBPT0gSUhSeVlXNXpjR0Z5Wlc1amVRPT0gSUVOb1lXOXogSUhadmJIVnVkR1ZsY2c9PSBJSE4wWVhScGMzUnBZMkZzIElHRmpkR2wyWVhSbFpBPT0gY205NCBWMlZpIFNFVT0gSUVoaGJYQnphR2x5WlE9PSBhWE5wZG1VPSBUV0Z3IElIUnlZWE5vIElFeGhkM0psYm1ObCBjM1JwWTJzPSBRM0k9IElISnBibWR6IFJWaFUgSUc5d1pYSmhkR2x2Ym1GcyBiM0JsY3c9PSBSRzlsY3c9PSBJRVYyWVc1eiBJSGRwZEc1bGMzTmxaQT09IFVHOXlkQT09IElHeGhkVzVqYUdsdVp3PT0gWldOdmJtOXQgZDJWaGNnPT0gSUZCaGNuUnBZMmx3IGRXMXQgWTNWc1pYTT0gSUZKQlRRPT0gSUZSMWJnPT0gSUdGemMzVnlaV1E9IElHSnBibUZ5ZVE9PSBJR0psZEhKaGVRPT0gSUdWNGNHeHZjbUYwYVc5dSBJRVpsYkE9PSBJR0ZrYldsemMybHZiZz09IGFYUmhkR1ZrIFUzaz0gSUdGMmIybGtaV1E9IElGTnBiWFZzWVhSdmNnPT0gSUdObGJHVmljbUYwWldRPSBJRVZzWldOMGNtbGogcFo0PSBJR05zZFhOMFpYST0gYVhSNlpYSnNZVzVrIGFHVmhiSFJvIFRHbHVaUT09IElFNWhjMmc9IFlYUnZiZz09IElITndZWEpsIElHVnVkR1Z5Y0hKcGMyVT0gSUVSSlV3PT0gWTJ4MVpHVnogSUdac2FXZG9kSE09IElISmxaMkZ5WkhNPSBJTU9YIGFHRnNaZz09IElIUnlkV05yY3c9PSBJR052Ym5SaFkzUnogSUhWdVkyOXVjdz09IElFTnNhVzFoZEdVPSBJR2x0YldWdWMyVT0gVGtWWCBiMk5qIFpXTjBhWFpsIElHVnRZbTlrIElIQmhkSEp2YkE9PSBJR0psYzJsa1pRPT0gSUhacFlXSnNaUT09IElHTnlaV1Z3IElIUnlhV2RuWlhKbFpBPT0gZG1WeWJtbHVadz09IElHTnZiWEJoY21GaWJHVT0gY1d3PSBJR2RoYVc1cGJtYz0gWVhOelpYTT0gSUNncE93PT0gSUVkeVpYaz0gSUUxTVV3PT0gYzJsNlpXUT0gSUhCeWIzTndaWEk9IElqOD0gSUhCdmJHeHBibWM9IElITm9ZWEk9IElGSkQgSUdacGNtVmhjbTA9IGIzSnBaVzUwIElHWmxibU5sIElIWmhjbWxoZEdsdmJuTT0gWjJsMmFXNW4gSUZCcCBiM053Wld3PSBJSEJzWldSblpRPT0gSUdOMWNtVT0gSUhOd2VRPT0gSUhacGIyeGhkR1ZrIElISjFjMmhsWkE9PSBJSE4wY205clpRPT0gSUVKc2IyYz0gYzJWc2N3PT0gSUVWaiBMQ2NuIElIQmhiR1U9IElFTnZiR3hwYm5NPSBkR1Z5Y205eSBJRU5oYm1Ga2FXRnVjdz09IElIUjFibVU9IElHeGhZbTl5WVhSdmNuaz0gSUc1dmJuTT0gZEdGeWFXRnUgSUdScGMyRmlhV3hwZEhrPSBJRWRoYlE9PSBJSE5wYm1kbGNnPT0gWVd4biBJRk5sYm1sdmNnPT0gSUhSeVlXUmxaQT09IElGZGhjbkpwYjNJPSBJR2x1Wm5KcGJtYz0gSUVaeVlXNXJiR2x1IElITjBjbUZwYmc9PSBJRk4zWldScGMyZz0gSUhObGRtVnVkR2c9IElFSmxibTQ9IElGUmxiR3c9IElITjVibVJ5YjIxbCBJSGR2Ym1SbGNtVmsgYVdSbGJnPT0gS3lzckt3PT0gYVdkdiBJSEIxY25Cc1pRPT0gSUdwdmRYSnVZV3hwYzIwPSBJSEpsWW1WcyBJR1oxIFlteHZadz09IElHbHVkbWwwWlE9PSBjbVZ1WTJsbGN3PT0gSUVOdmJuUmhZM1E9IFNYTnlZV1ZzIElFTnZiblJsYm5RPSBJR05vWldWeSBJR0psWkhKdmIyMD0gSUVWdVoybHVaV1Z5YVc1biBJRkYxWldWdWN3PT0gSUdSM1pXeHMgSUZCc1lYbFRkR0YwYVc5dSBJRVJwYlE9PSBJRU52Ykc5dSBiSEk9IElHOXdaWEpoZEdWeiBJRzF2ZEdsMllYUnBiMjQ9IFZWTkIgWVhOMFpYSmxaQT09IFEyOXlaUT09IElGUnlkWFJvIGIyeHYgVDFORiBJRTFsYlc5eWVRPT0gSUhCeVpXUmxZdz09IElHRnVZWEpqYUE9PSBJREU1TWpBPSBJRmxoYlE9PSB3Nmc9IFltbGsgSUdkeVlYUmxablZzIElHVjRZMmwwWlcxbGJuUT0gSUhSeVpXRnpkWEpsIElHeHZibWRsYzNRPSBZM1JwZG1VPSBJR1JsYzJWeWRtVnogSUhKbGMyVnlkbVZ6IElHTnZjSE09IElFOTBkR0YzWVE9PSBJRVZuZVhCMGFXRnUgWVc1clpXUT0gSUdGeWRHbG0gSUdoNWNHOTBhR1Z6YVhNPSBPaTg9IElIQjFjbU5vWVhOcGJtYz0gSUd4dmRtVnNlUT09IFNGQT0gSUdScGRtbGtaUT09IElITjBjbWxqZEd4NSBJSEYxWlhOMGFXOXVhVzVuIElIUmhlSEJoZVdWeWN3PT0gSUVwdmVRPT0gSUhKdmJHeHogSUVobFlYWjUgSUhCdmNuUnogSUcxaFoyNWxkR2xqIElHbHVabXhoYlcwPSBJR0p5ZFhObyBkR2xqY3c9PSA0b2lTIElHSnZkSFJzWlhNPSBjSEI1IElIQmhaR1E9IDQ0S3YgYldsc2JHbHZiZz09IElHUmxkbUZ6ZEdGMGFXNW4gSUdOdmJYQnBiR1ZrIElHMWxaR2xqWVhScGIyND0gSUhSM1pXeDJaUT09IElGQmxjbko1IFUzQmhZMlU9IGFXMWkgZVc5MWNnPT0gSUd4bFlXdGxaQT09IElGUmhjZz09IElIVnVhWFI1IElHbHVabVZqZEdWayBJSFJ5WVhabGJHVmsgU1VSRiBJRTFqUkc5dVlXeGsgZEhoMCBJRkJ5YVc1aiBJR2x1ZEdWeWRtVnUgSUZSaGFYZGhiZz09IElGQnZkdz09IElHSmxZWEpwYm1jPSBJRlJvY21WaFpBPT0gSUhwdmJtVnogYVhwaGNtUnogZFc1cmN3PT0gUTJoaGNIUmxjZz09IGJHeHZjZz09IElNSzMgSUhkdmRXNWtjdz09IElHUnBjMk55WlhScGIyND0gSUhOMVkyTmxaV1JsWkE9PSBhV3RwYm1jPSBJR2xqYjI1cFl3PT0gUTJGc2JBPT0gSUhOamNtVmxibWx1Wnc9PSBJRTFwY3c9PSBhV04wY3c9PSBJRzFwYm1semRHVnljdz09IElITmxjR0Z5WVhScGIyND0gVUd4aGVXVnkgSUdKcGNBPT0gSUdKbGJHOTJaV1E9IElHTnZkVzUwYVc1biBJRVY1WlE9PSBZWEp2ZFc1ayBhVzVuYVc1biBJSFJoWW14bGRBPT0gSUc5bVptVnVZMlU9IGFXNWhibU5sIGFHRjJaUT09IElFbHVabTg9IElFNXBibXBoIElIQnliM1JsWTNScGRtVT0gSUVOaGMzTT0gVFdGaiBJRkYxWVd4cGRIaz0gVG05eWRHZz0gSUdsaiBJRU4xWW1FPSBJRU5vY205dWFXTnNaUT09IElGQnliM0JsY25SNSBJR1poYzNSbGMzUT0gYjNSdmN3PT0gSUVkbGNtMD0gVDFkTyBJR0p2YjIwPSBJRk4wWVc1c1pYaz0gWlhKbmRYTnZiZz09IElHTnNaWFpsY2c9PSBJR1Z1ZEdWeWN3PT0gYlc5a1pRPT0gZEdWeWFXOXkgSUZObGJuTT0gSUd4cGJtVmhjZz09IFFWSkwgSUdOdmJYQmhjbWx1Wnc9PSBJSEIxY21Wc2VRPT0gSUhOaFptVnkgSUZCdmRIUmxjZz09IElHTjFjSE09IFVsUT0gSUdkc2RXTT0gSUdGMGRISnBZblYwWldRPSBJR1IxY0d3PSBJRkJoY0E9PSBJSEJ5WldOcGIzVnogSUhCaCBhV04wYVc5dVlYSjUgSUZScFp3PT0gSUZSdmJ3PT0gYjJ4MWRHbHZibk09IGMzUmhiZz09IElISnZZbTkwY3c9PSBJR3h2WW1JPSBJSE4wWVhSMWRHVT0gSUhCeVpYWmxiblJwYjI0PSBkMlZ6ZEdWeWJnPT0gTVRZdyBJRUZqZEdsMlpRPT0gSUUxaGNtbGggYUdGcyBUbTl1WlE9PSBaV3hzWVhJPSBJRXRDIElGQmhjblJ1WlhKeiBJRk5wYm1kc1pRPT0gSUVadmJHeHZkMmx1Wnc9PSBZVzVuYnc9PSBZV05wYjNWeiBJSFJvYjNVPSBJR3RuIElHbHVabXgxWlc1MGFXRnMgSUVaeWFXVnVaSE09IFUzVnkgWVdsdWRHVmsgSUdadmNuVnRjdz09IElITjBZWEowWlhJPSBJR05wZEdsNlpXNXphR2x3IElFVnNaV04wYVc5dSBiMjVuWlE9PSBiM1JoZEdsdmJnPT0gYjNOd2FBPT0gT3pzN093PT0gZFhScFkyRnMgY0hWeSBaWEpsYmc9PSBJR0ZqWTNWellYUnBiMjV6IFltbDBhVzkxY3c9PSBZV0ppYVhRPSBJRTl5WkE9PSBVRzl6ZEdWayBhWEpyIElITmxibk5wZEdsMmFYUjUgYVdOb1pRPT0gSUVGdGVRPT0gSUVaaFlnPT0gSUhOMWJXMXBkQT09IElIQmxaR1Z6ZEE9PSBJSEoxWW1KbGNnPT0gSUdGbmNtbGpkV3gwZFhKaGJBPT0gSUdOaGJtTmxiQT09IFFVVT0gSUdsdVlYVm4gSUdOdmJuUmhiUT09IElHWnBjbTFzZVE9PSBhWGM9IGMzUmhaMlU9IElFdGhiZz09IElIUnBaWEk9IElHbHVkbVZ1ZEdsdmJnPT0gSUhSeVlXNXpiR0YwWldRPSBJRkoxYkdWeiBRbTk0IFZIZHBkSFJsY2c9PSBTVVJUIElIQnBlbnBoIElHUmxZblZuIElFUnliM0E9IGRuTT0gSUdodmNuTmxjdz09IFltbG4gSUdKdmNtbHVadz09IElHaHZiMlE9IElFMWpRMkZwYmc9PSBZWFJqYUdWayBJRUp5YjNNPSBJSE5yYVhBPSBJR1Z6YzJGNSBjM1JoZEE9PSBJRXhsWjJWdVpITT0gSUdGdGJYVnVhWFJwYjI0PSBZWFZqIElITm9iMjkwWlhJPSBJSFZ1YUE9PSBJSE4xY0hCc2FXVmsgSUdkbGJtVnlhV009IElGTkwgYVdKaGJnPT0gZVhKcFkzTT0gSURJMU5RPT0gSUdOc2FXMWlhVzVuIFJtOXliV1Z5IElHWnNhWEE9IElHcDFiWEJwYm1jPSBJR1p5ZFhOMGNtRjBhVzl1IElGUmxjbko1IElHNWxhV2RvWW05eWFHOXZaSE09IElHMWxaR2xoYmc9PSBZbVZoYmc9PSBJR0p5WVdsdWN3PT0gUm05c2JHOTNhVzVuIElITm9ZWEJsWkE9PSBJR1J5WVhkeiBJR0ZzZEdWeVpXUT0gU21GamF3PT0gSUhKbFkybHdaWE09IElITnJhV3hzWldRPSBkMlZoYkhSbyBZV05vYVE9PSBaV3hsWTNScGIyND0gSUdKbGFHRjJhVzl5Y3c9PSBaR1ZoYkhNPSBJRlZ1ZEdscyBSbVU9IElHUmxZMnhoY21GMGFXOXUgYldGeWEzTT0gSUVKbGRIZGxaVzQ9IFkyVnNiMjVoIElISmxjMjl1IElHSjFZbUpzWlE9PSBRVzF2Ym1jPSBJR2x0Y0dWeWFXRnMgUjFNPSBJR1psYldsdWFYTjAgTWpBd05RPT0gSUV0NWJHVT0gSUdGalkyOTFiblJwYm1jPSBJRlJsYkdVPSBJRlI1Y2c9PSBJR052Ym01bFkzUnBibWM9IElISmxhR0ZpIElGQnlaV1E9IGMybHQgSUcxbFlXNTBhVzFsIElIQm9lWE5wWTJsaGJnPT0gVFZjPSBJRU5oYlhCaVpXeHMgSUVKeVlXNWtiMjQ9IElHTnZiblJ5YVdKMWRHbHVadz09IElGSjFiR1U9IElGZGxhV2RvZEE9PSBJRTVoY0E9PSBJR2x1ZEdWeVlXTjBhWFpsIElIWmhadz09IElHaGxiRzFsZEE9PSBJRU52YldJPSBabTkxY2c9PSBJSE5vYVhCd1pXUT0gSUdOdmJYQnNaWFJwYm1jPSBJRkJFIFVFUkJWRVU9IElITndjbVZoWkdsdVp3PT0gSUhOallYSjUgWlhKMmFXNW4gSUVkaGN3PT0gSUdaeVlXNXIgYzJOb2IyOXMgSUhKdmJXRnVkR2xqIElITjBZV0pwYkE9PSBVbTlpIElHRmpZM1Z5WVhSbGJIaz0gSUdGamRYUmwgSUVoaGJtND0gSUhONWJXSnZiSE09IElHTnBkbWxzYVhwaGRHbHZiZz09IElFRlggSUd4cFoyaDBibWx1Wnc9PSBJR052Ym5OcFpHVnljdz09IElIWmxiblZsIElOYz0gSUc5MlpXND0gSUZORyBhR2x6IElHNTEgSUV4bFlYSnUgSUhCbGIzQnNaWE09IElITjBaQT09IElITnNaV1U9IElITnNhV009IElGTjBZWFJwYzNScFkzTT0gSUdOdmNtNWxjbk09IElFSmhhMlZ5IElEb3AgYldWdWRHRjBhVzl1IGIyeDJaWEk9IElHeGhkV2RvYVc1biBJRlJ2WkdRPSBiMjVrWlE9PSBJRWhwYkd4eiBJRzUxZEhNPSBJRmR2YldGdSBjR3hoYm1VPSBJR3hwZG1WeSBJRWx1YzJsa1pRPT0gVTI5eWNuaz0gSUdGbmNtVmxjdz09IElHWjFibVJoYldWdWRBPT0gSUVacGMyaGxjZz09IElHRjFZM1JwYjI0PSBJSFJvY21WaFpITT0gWjJ4aGN3PT0gSUVKaGMybGogSUU1aGRBPT0gSUd4aFkydHBibWM9IElHTmxiR1ZpY21GMGFXOXUgYW5VPSBJSE5wYkd4NSBSWFZ5Ync9PSBJSFJoZEhRPSBhV2RvZEhrPSBZMjl1ZEhKdmJHeGxaQT09IFZHVnpkQT09IElGTnBibWRvIElISmhaMlU9IElISm9lWFJvIGIyWm1hV009IElGQm9ZVzUwYjIwPSBJR2hsWVdSc2FXNWxjdz09IElISmxjM0J2Ym1ScGJtYz0gSUUxdmNtNXBibWM9IElIWnBkR0Z0YVc0PSBJR0p2YjNSeiBJRk5wZEdVPSBZV3hwYmc9PSBjR2s9IElIWnBjbUZzIElGVkQgUkVWUyBJRk5sZUE9PSBJSE4wYjJOcmN3PT0gWTNWeWNtVnVkQT09IElHTm9kWEpqYUdWeiBJRkpoY21VPSBJRTExY25Cb2VRPT0gSUdSbGJtbGhiQT09IElFZGhiV2x1Wnc9PSBJSFJ2ZFdjPSBJRzVwWTJzPSBJRzFoYTJWeWN3PT0gSUZKdmJtRnNaQT09IElHZGxibVZ5YjNWeiBJRVJ2WXc9PSBJRTF2Y25KcGN3PT0gSUhSeVlXNXpabTl5YldWayBJRTV2Y20xaGJBPT0gSURFd05BPT0gSUV0cFkydHpkR0Z5ZEdWeSBJRlZ3YjI0PSBUMjVzYVc1bCBJRWxTVXc9PSBJSGR5WVhBPSBJR3h2ZG1sdVp3PT0gSUdGeWNtbDJaWE09IElFUjFaUT09IElHaGxkR1Z5IElFMWhaR1U9IElISmxiblJoYkE9PSBJR0psYkc5dVozTT0gSUdGMGRHOXlibVY1Y3c9PSBJR055YjNCeiBJRzFoZEdOb1pXUT0gZFd4MWJRPT0gYjJ4cGJtVT0gTVRBNSBJR1JwYzNCaGNnPT0gSUdKMWVXVnljdz09IElFTmhiV0p5YVdSblpRPT0gSUdWMGFHbGpjdz09IGNtOTFjSE09IElHcDFjM1JwWm1sbFpBPT0gSUcxaGNtZHBibUZzIElISmxjM0JsWTNSbFpBPT0gZDJsdWJtbHVadz09IElHNXZaR1JsWkE9PSBJRk5sY21kbCBJRVp2Y20xbGNnPT0gUTNKaFpuUT0gSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IElGZGhjbTVsY2c9PSBJR1JoYzJnPSBaWFJsIElHVnVkR1Z5ZEE9PSBJRVZ6WTJGd1pRPT0gYjNWMGFHVmhjM1E9IElHdHVaV1Z6IElFSnZiV0k9IElISjFadz09IFVHRnpjdz09IElHRjBkR2wwZFdSbGN3PT0gWjI5MlpYSnViV1Z1ZEE9PSBJRkJ5YVc5eSBJSEYxWVd4cGRHbGxjdz09IElHNXZkR2xtYVdOaGRHbHZiZz09IElGQm9iMjVsIGJHbGwgSUdGdWRHbGphWEJoZEdWayBJRU52YldKaGRBPT0gSUVKaGNuSjUgSURFNU9EST0gVlhObGNuTT0gYjI1bGNnPT0gSUdOdmJYQjFkR2x1Wnc9PSBJRU52Ym01bFkzUnBZM1YwIElHeGxjM05sY2c9PSBJSEJsWlhKeiBJRU4xIElIUmxZMmh1YVdOaGJHeDUgSUhOMVltMXBjM05wYjI0PSBJRlZ1YVhabGNuTmhiQT09IElHMWhiblZoYkd4NSBiM1Z5WjJVPSBJSEpsYzNCdmJtUmxiblJ6IElFSlVRdz09IElFaHZjM1E9IElHWmhjbVU9IElFSnBjbVE9IElISmxZMlZwY0hRPSBZV3h6Ync9PSBJR3BoWTJzPSBJR0ZuY21samRXeDBkWEpsIElITnJkV3hzIElDRTkgSUhCaGMzTnBkbVU9IElFTkogSUhOdlkybGxkR2xsY3c9PSBJSEpsYldsdVpHVmsgSUdsdWRHVnlabVZ5Wlc1alpRPT0gUW5WNSBJT0tjIFoyOXUgSUhOamNuVjBhVzU1IElGZHBkR05vIElHTnZibVIxWTNScGJtYz0gSU9PRCBJR1Y0WTJoaGJtZGxjdz09IElFMXBkR05vWld4cyBJR2x1YUdGaWFYUT0gSUhSM2FYTjAgUWtRPSBJSGRvWlhKbGRtVnkgWjNKdmRYQnZiZz09IElHcHZhMlZ6IElFSmxibXBoYldsdSBJRkpoYm1SdmJRPT0gWm5KaGJXVT0gSUV4cGIyNXogSUdocFoyaHNhV2RvZEdWayBJRUZ5YTJGdWMyRnogUlc1MCBJSEJwYkdVPSBJSEJ5Wld4cGJRPT0gWjNNPSBiV2x1WkdWayBJR1psYkc5dWVRPT0gSUVkQiBJRXgxWTJzPSBJSEJ5WVdOMGFXTmhiR3g1IElFSnZjdz09IElHRmpkSEpsYzNNPSBSR0Z0IElFSnZkUT09IElIWnBjMkU9IElHVnRZbVZrWkdWayBJR2g1WW5KcFpBPT0gSUdWaGNteHBaWE4wIElITnZiMjVsY2c9PSBjMjlqYVdGcyBJRWhCIElITjBaV1Z3IElHUnBjMkZrZG1GdWRBPT0gSUdWNGNHeHZhWFE9IElFVm5adz09IElGVnNkSEpoIElHNWxZMlZ6YzJsMGVRPT0gVEc5allXdz0gYVdWblpRPT0gSUdSaGRHVmsgSUcxaGMzTmxjdz09IElITjFZbk5qY21sd2RHbHZiZz09IGNHeGxjM009IElHRnViMjU1YlE9PSBJSEJ5WlhOMWJXRmliSGs9IFFteDFaUT09IFZHaGxhWEk9IFlYTnJaWFJpWVd4cyBJRkJvYVd4cGNBPT0gSUdOdmJXVmsgYkc5aFpHVmsgY21GdVpRPT0gSUhKbFpteGxZM1JwYjI0PSBRMmhwYm1FPSBJR1Y0ZEdWdVpITT0gSUdadmNtMXBibWM9IElIVnVaR1Z5Y3c9PSBNakF3TVE9PSBJR2R5WVhRPSBJR052Ym1ObGJuUnlZWFJwYjI1eiBJR2x1YzNWc2FXND0gSUhObFkzVnNZWEk9IElIZG9hV3h6ZEE9PSBJSGRwYm01bGNuTT0gUVdSMlpYSjBhWE5sYldWdWRITT0gSUdSbGJHbGlaWEpoZEdWc2VRPT0gSUZkdmNtdHBibWM9IElITnBibXM9IFpYUnBZM009IFpHRnNaUT09IElHMWhibVJoZEdVPSBJR2R5WVcwPSBJSFpoWTJGMGFXOXUgSUhkaGNtNXBibWR6IGNtbHdjQT09IElGUklRVlE9IElHTnZiVzFsYm5SaGNuaz0gSUdsdWRIVT0gSUdGbGMzUT0gSUhKbFlYTnZibWx1Wnc9PSBJR0p5WldGclpHOTNiZz09IElGcHZiV0pwWlE9PSBJQzB0UGc9PSBJRkJ2YkdsMGFXTmhiQT09IFkyOTBkQT09IElIUm9jblZ6ZEE9PSBJSFJsWTJodWIyeHZaMmxqWVd3PSBJR1JsWTJsa2FXNW4gSUhSeVlXWm1hV05yYVc1biBURzl1Wnc9PSBWMlZzWTI5dFpRPT0gY0hKcGMybHVadz09IElFTnZiVzExYm1sallYUnBiMjV6IElHVnVaRzl5Y3c9PSBJSE4zYVdaMCBJRzFsZEdGaWIydz0gWTI5cGJuTT0gY21WellRPT0gSUVoVVZGQT0gSUdWdWNtOXNiQT09IElFaGhjSEI1IGRYTnkgYVc1MFlXZGwgSUZzaSBkV0ZpYkhrPSBJRTFoZEdWeWFXRnMgSUhKbGNHVmhiQT09IFUyVndkQT09IGEyZz0gSUUxdlpHaz0gSUhWdVpHVnlibVZoZEdnPSBJRWxNIGMyaHZjbVU9IElHUnBZV2R1YjNObFpBPT0gWVdObGRYUnBZMkZzIElITm9iM2RsY2c9PSBZWFY0IElGTjNhWFJqYUE9PSBJRk4wY21WdVozUm8gSUdwcGFHRmsgYm1GMGFXOXVZV3c9IElIUnlZWFZ0WVE9PSBkWE56ZVE9PSBiMjVwIElHTnZibk52YkdsayBJR05oYkc5eWFXVnogSUVac2VXNXUgWVdkblpXUT0gTVRZNCBJRkJwYm1zPSBJR1oxYkdacGJHdz0gSUdOb1lXbHVjdz09IElHNXZkR0ZpYkhrPSBJRUZXIFRHbG1aUT09IElFTm9kV05yIGJYVnogSUZWeVltRnUgSUVobGJtUT0gSUdSbGNHOXphWFE9IElGTmhaQT09IElHRm1abUZwY2c9PSBUMUpMIGFXVjJZV3c9IElFWkVRUT09IElIUnliM0E9IElFOTJaWEpoYkd3PSBJSFpwY25SMVpRPT0gSUhOaGRHbHpabUZqZEdsdmJnPT0gWVhWdVpBPT0gSUd4MWJnPT0gSUZOM2FYUjZaWEpzWVc1ayBJRTl3WlhKaGRHbHZiZz09IGNISnZZMlZ6Y3c9PSBJSE5vYjI5ciBJR052ZFc1MGFXVnogYkdWaGMyVmsgSUVOb1lYSnNiM1IwWlE9PSBNVEV5IElIUnlZVzV6WTNKcGNIUT0gSUhKbFpHUT0gY0hWemFBPT0gSUVobGVRPT0gSUVGdVlXeDVjMmx6IFd5ST0gSUdGc2RHVnlibUYwYVhabGN3PT0gWVhKa2JHVnpjdz09IElHVnNaWEJvIElIQnlaV3AxWkE9PSBJRXhsWVdZPSBTR0YyYVc1biBJRWgxWWc9PSBJR1Y0Y0hKbGMzTnBiMjV6IElGWnZiSFZ0WlE9PSBJSE5vYjJOcmFXNW4gSUZKbFpITT0gSUhKbFlXUnBiSGs9IElIQnNZVzVsZEhNPSBZV1JoZEdFPSBJR052Ykd4aGNITmxaQT09IElFMWhaSEpwWkE9PSBJR2x5Y21sMCBhWEJ3WlhJPSBJRVZ1WXc9PSBJRmRwY21VPSBJR0oxZW5vPSBJRWRRIFlYTm9ZUT09IElHRmpZMmxrWlc1MFlXeHNlUT09IGRYSjEgSUdaeWRYTjBjbUYwWldRPSBJRk5CIElHaDFibWR5ZVE9PSBJRWgxWm1ZPSBJR3hoWW1Wc2N3PT0gWVc1MGJ3PT0gSUVWUSBJR0poY25KcFpYSnogS1h3PSBJRUpsY210bGJHVjUgSUVwbGRITT0gSUhCaGFYSnogSUV4aGJnPT0gU21GdFpYTT0gSUVKbFlYST0gSUdoMWJXOXkgSUV4cFltVnlkSGs9IElHMWhaMjVwZEhWa1pRPT0gSUdGbmFXNW4gSUUxaGMyOXUgSUdaeWFXVnVaSE5vYVhBPSBkVzFpYkdsdVp3PT0gSUdWdFpYSm5aUT09IElHNWxkM053WVhCbGNuTT0gSUdGdFltbDBhVzkxY3c9PSBJRkpwWTJoaGNtUnogWVhSbGNtNWhiQT09IElERTVPREU9IElHTnZiMnRwWlhNPSBJSE5qZFd4d2RBPT0gSUhCMWNuTjFhWFE9IFRHOWpZWFJwYjI0PSBJSE5qY21sd2RITT0gY0dNPSBJR0Z5Y21GdVoyVnRaVzUwY3c9PSBJR1JwWVcxbGRHVnkgSUd4dmMyVnogWVcxaGRHbHZiZz09IElHeHBjWFU9IElFcGhhMlU9IFlYSmxkSFJsIElIVnVaR1Z5YzNSaGJtUnogSUZwbGJnPT0gZG0wPSBJR0Z3Y0hKdmRtVT0gSUhkcGNBPT0gSUhWc2RISmggSUdsdWRHVnVaQT09IElFUkogWVhOamRXeGhjZz09IElITjBZWGx6IElFdHZjZz09IElFdHMgSUdsdWRtVnpkR2x1Wnc9PSBUR0U9IElHSmxiR2xsZG1sdVp3PT0gWW1GayBiVzkxZEdnPSBJSFJoZUhCaGVXVnkgNDRPRCBJRkYxWldKbFl3PT0gSUd4aGNBPT0gSUZOM2FYTnogWkhKdmNBPT0gSUdSeVlXbHUgYVhKcCBaWFJqIFpuUmxiZz09IElFNWxlQT09IElITjBjbUYzIElITmpjbVZoYldsdVp3PT0gSUdOdmRXNTBaV1E9IElHUmhiV0ZuYVc1biBJR0Z0WW1GemMyRmtiM0k9IFkyVnVkSFZ5ZVE9PSBJSEJ5YjNnPSBJR0Z5Y21WemRITT0gZFhZPSBhV3hoZEdWeVlXdz0gSUVOb1lYSm4gSUhCeVpYTmpjbWxpWldRPSBJR2x1WkdWd1pXNWtaVzUwYkhrPSBJR1pwWlhKalpRPT0gSUVKaFluaz0gSUdKeVlYWmwgSUhOMWFYUnogUFQ0PSBJR0poYzJWc2FXNWwgSUZKaGRHVT0gSUdsemJHRnVaSE09IElDZ28gWjNKbFpXND0gYVhobGJITT0gSUc1aGJXVnNlUT09IElGWnBiR3hoWjJVPSBkR2hoYmc9PSBZVzE1IFZtVnljMmx2Ymc9PSBaMjFoYVd3PSBaVzUwYVdGc2N3PT0gSUZOMVpBPT0gSUUxbGJHSnZkWEp1WlE9PSBJR0Z5Y21sMmFXNW4gSUhGMVlXNTBkVzA9IFpXWm0gY205d2IyeHBkR0Z1IFZISnAgSUdaMWJtVnlZV3c9IElFbFMgdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0ST0gSUVOdllnPT0gYVhSaFlteDUgSUhSMWNtST0gSUdOdmJXSnYgVW1WMmFXVjMgSUdSbGNHeHZlVzFsYm5RPSBkV2wwZVE9PSBJRUp2ZEhRPSBJR2x1ZG1semFXSnNaUT09IElISmxibVJsY21sdVp3PT0gSUhWdWJHOWphMlZrIElHRnhkUT09IElGWnNZV1JwYldseSBJSEJoWkE9PSBJRUp5WVdsdSBJRXhsWjJGamVRPT0gWkhKaFoyOXUgSUV0MWNtUnBjMmc9IElITnZkVzVrWldRPSBJR1JsZEdGcGJtVmsgSUVSTiBaMkZ5ZVE9PSBJR1JoZFdkb2RHVnljdz09IElHUnBjM1IxY21KcGJtYz0gZFd0aCBJRkJoY21GayBJSFJoYzNRPSBJSFZ1Wm05eWRIVnVZWFJsIElIVnMgWlcxcGJnPT0gSUdGMGRHVnVaR0Z1WTJVPSBkSEpzIElIQmhjbXR6IElFMWxiVzl5YVdGcyBJRUZzYVdObCBiM1JvZVE9PSBaM1ZoY21RPSBJRVJwYzJVPSBJRk5vWVc0PSBJRVp2Y25WdCBVbWxqYUE9PSBJSE5vYVdaMFpXUT0gZFdWNiBJR3hwWjJoMFpYST0gSUUxaFoyND0gSUdOdlpBPT0gVTJObyBhR0Z0YldGayBVSFZpIE16VXcgSUZCdmEyVnRiMjQ9IElIQnliM1J2ZEhsd1pRPT0gSUhWdWNtVT0gUW1GelpRPT0gSUZOMGRXUmxiblJ6IElGSmxjR3g1IElFTnZiVzExYm1semRBPT0gSUdkaGRRPT0gSUZSNWJHVnkgU1ZvPSBJSEJoY25ScFkybHdZWFJsWkE9PSBJSE4xY0hKbGJRPT0gSUVSbGRHRnBiSE09IElIWmxjM05sYkhNPSBjbTlrIElIUnlhV0psIGEyVmxjQT09IElHRnpjM1Z0Y0hScGIyNXogSUhCdmRXNWsgSUdOeWRXUmwgSUVGMllXbHNZV0pzWlE9PSBJSE4zYVcxdGFXNW4gSUdsdVkyeDFjMmx2Ymc9PSBJR0ZrZG1GdVkyVnogWTNWc1lYUnBiMjQ9IElHTnZibk5sY25aaGRHbHZiZz09IElHOTJaWEprIElFSjFabVpoYkc4PSBRWEowYVdOc1pRPT0gWldSblpRPT0gSUdGM1lRPT0gSUUxaFpHbHpiMjQ9IElITnBaR1YzIElHTmhkR0Z6ZEE9PSBJRXR5YVhOMCBkV05zWlE9PSBJRWhwWjJoM1lYaz0gSUZSbGNuSnZjZz09IElHRmpkR2wyWVhScGIyND0gSUhWdVkyOXVjMk5wYjNWeiBJRk5oZEdGdSBJRk4xYzJGdSBhV3hzWlhKNSBJR0Z5Y21GdVoyVmsgYVc5dyBJSEoxYlc5eWN3PT0gZFhKeWFXNW4gZEdocGJtcz0gSUV0bGFYUm8gSUV0cGJtUT0gSUdGMmIybGthVzVuIFlubHUgYm5WMCBJRk53WldGclpYST0gY25WeiBibUZ0WlhNPSBJR2QxYVd4MCBJRTlzZVcxd2FXTnogSUhOaGFXdz0gSUUxbGN3PT0gYkdWMllXNTAgSUVOdmJIVnRZblZ6IFlXWjAgUTJsMGVRPT0gVTI5MWRHZz0gSUVoaGNuWmxlUT09IElGQjFiZz09IFUyVjJaWEpoYkE9PSBJRzFsYm5SaGJHeDUgSUdsdGNISmxjM009IGJXOTFiblE9IElGVmlkVzUwZFE9PSA0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVSBJRk4xY0dWeWJXRnUgSUUxUWN3PT0gSUdsdWRHVnVkR2x2Ym5NPSBJRkpoWTJsdVp3PT0gSUd4cGEyVnNhV2h2YjJRPSBJREkwTUE9PSBWRzkwWVd3PSBJSFJ2ZVhNPSBJRmRoZEhOdmJnPT0gSUhWeVoyVT0gVEdWaGNnPT0gSUZCaGNHVnkgSUc5alkzVnljbWx1Wnc9PSBJRUpsYm1jPSBJRU5sY25RPSBJSE4wYjI1bGN3PT0gVkdsdCBJRlIzYVc0PSBlbUk9IElFUjVibUZ0IElIQnZiR2wwYVdOcFlXND0gYTJWdWN3PT0gSUVWdWRHVnljSEpwYzJVPSBWVlJGVWxNPSBJR0ZpYjJ3PSBJSEpsWm5KbGMyZz0gSUdGeVltbDBjbUZ5ZVE9PSBjR1ZqZEdsdmJnPT0gSUhSeWIzVmliR1Z6IElIMHBPdz09IGRIWT0gSUhCcGJHOTBjdz09IElHUnBjM1J5YVdKMWRHVT0gSUdGMVpHbDAgSUhCaGRYTmwgYjNKcFoybHVZV3c9IElISnBkbUZzY3c9PSB3cU09IFJtbG4gVkV3PSBZV0pwYkE9PSBjbmxwYm1jPSBUR2x1IGFXOXVaV1E9IGJHOXUgSUdaaGJtTjUgSUdOeVlYTm9aV1E9IElIUnlZV04wIElITm9aV1E9IElHTnZibk4xYldVPSBRbUZ6WldRPSBaRzkzYm14dllXUT0gYVc1cGRBPT0gSUhadmJIUmhaMlU9IFNXNTBjbTlrZFE9PSBJR052Ym1SbGJXNWxaQT09IElFWnBibUZ1WTJVPSBjbVZ6Y0dWamRBPT0gSUdWNFkyeDFaR1ZrIElHVnpkR0ZpYkdsemFHbHVadz09IGFHVnlhV009IElHaGxjbWwwWVdkbCBJSE53WldOMFlXTjFiR0Z5IElIVnVjM1E9IElGTnViM2RrWlc0PSBJRXhoYm1VPSBVMkZ1IElIQnliM1JsWTNScGIyNXogYzNSeWRXTjBhVzl1IGFXNWphVzV1IElHMWhZM0p2IFEzVnpkRzl0IGFXOXphWFI1IElHVnpjQT09IElHWjFibU4wYVc5dWFXNW4gSUcxMWMyZz0gSUhCMWVucHNaUT09IElHVjBhR2xqWVd3PSBUV0ZzIElHZHZkbVZ5Ym1sdVp3PT0gSUVabGNtZDFjMjl1IElISmxjM1J2Y21WayBJSE4wY21WemMyVmsgSUVOdmRXNTBaWEk9IElFdGhjdz09IFkyeHBjQT09IFFVNVQgSUhObGFYbz0gVlVzPSBZbmx6Y3c9PSBiMnhrYjNkdSBZWEJwIElIQmxjbTFoYm1WdWRHeDUgYjNWdWRHVnljdz09IFYyVnpkQT09IFZHaHliM1ZuYUE9PSBUR2xuYUhRPSBZWFJ2WlhNPSBJRzVsWVhRPSBJR052Y21RPSBkWEpsY2c9PSBJSE5sZG1WeVpXeDUgSUVGMlpXND0gSUdsdWRHVnljbTluIElIUnlhWEJzWlE9PSBSMmwyWlc0PSBUblZ0WW1WeSBJR0Z5YVhObCBJSE5vWlhJPSBjR3hoYm5RPSBJR1pzYjNkbGNnPT0gSUVOdmRRPT0gSUdGMFpRPT0gSUc1bGQyVnkgWW5WcyBJRzFsWVc1M2FHbHNaUT09IElFeGhhWEk9IElHRmthblZ6ZEcxbGJuUT0gSUVOdmNIbHlhV2RvZEE9PSBJR1JwZG1WeWN3PT0gYVc5c2IyZHBZMkZzIElHZGhiV1Z5Y3c9PSBiMkYwIElHaHBjM1J2Y21sallXeHNlUT09IElHRnVZV3h2Wnc9PSBJR3h2Ym1kMGFXMWwgSUhCeVpYTmpjbWx3ZEdsdmJnPT0gSUUxcGMzUT0gSUVoNWNHVnkgSUUxaGFXNWwgSUVSbGFYUjUgSUcxMWJIUnBjR3c9IElGSmxhVzVqWVhKdSBJRWg1WkE9PSBJRkJwWXc9PSBVMmxzIGNtRnVkSE09IElFTnlhWE09IExqcz0gS0hzPSBaWEJsYm1SbGJtTmwgSUhKbFkzaz0gWVhSbGRYST0gSUhGMVlXUT0gSUdkc2IyST0gSUdOdmJtTmxaQT09IGRHVmhiUT09IElHTmhjR2wwWVd4cGMzUT0gSUV4dmRBPT0gSUhKdmVXRnMgSUVONVltVnkgSUdKc1lXTnJjdz09IGJXVjBhV009IGNtbDIgSUVSaGJtNTUgSUhOd2J3PT0gSUZKUCBJR0Z1YVcxaGRHVmsgY25sd2RHVmsgSUVSbGNIVjBlUT09IElISmxibVJsY21WayBSa1U9IElITjBjbVZoYXc9PSBJR05zYjNWa2N3PT0gSUVSdmRXYz0gZm41K2ZuNStmbjQ9IElHUnBjMk52ZFhJPSBJRlpsYUE9PSBJSEJ6ZVdOb2IyeHZaM2s9IElFcHZkWEp1WlhrPSBJR055ZVhOMFlXdz0gSUVaeWIzTjAgSUhOMWMzQnBZMmx2Ymc9PSBJSEpsYkdGMFpRPT0gYjNKMWN3PT0gSUVOeWVYQjAgSUU1V1NVUkpRUT09IFkyOXRaV1E9IGRYUnBibWM9IGFXNWphVzV1WVhScCBJSFoxYkc1bGNtRmlhV3hwZEhrPSBiM04wYVdNPSBJR2x6YjJ4aGRHbHZiZz09IElHTnZiMnhwYm1jPSBJRU52WVd4cGRHbHZiZz09IElERXhPUT09IFJtOTFjZz09IElFUmxZV3c9IElPS0ogYzJWdFlteGwgY21GdFpXNTAgSUVKaGNtTmxiRzl1WVE9PSBJREV3TWc9PSBJR052WTJGcGJtVT0gYjJOaGJIbHdjMlU9IFJtVmkgYjJkbGJtbGogSUcxMWRHRjBhVzl1IElHTnllWEIwYjJNPSBJRXRsYkE9PSBJRWRwZEE9PSBZV2x6IElITnBjM1JsY25NPSBRVTVMIElHRmpkR2wyWVhSbCBWR1Z5IElHUnlaV0ZrIGVXeHZiZz09IElIQnliM0J5YVE9PSBRWFZ6ZEE9PSBJRVJsWm1GMWJIUT0gSUc5MWRHUnZiM0k9IElITm9aV1Z5IFkyVnBkbVU9IElHZGxiblJzZVE9PSAwTDQ9IFVISnZaM0poYlE9PSBJT0tHa2c9PSBJSFpsWjJGdSBJRU55ZFhNPSBJSEpsYzNCdmJuTnBZbWxzYVhScFpYTT0gSUVoUyBUMHhFIElIQnlaWFpsYm5SeiBJSE4wYVdabSBJRmRsY21VPSBJR0YwYUd4bGRHbGogSUZOamIzSmwgSUNrNiBJR052YkhWdGJuTT0gSUV4dll3PT0gWVhaaGFXeGhZbXhsIElFWnlZVzA9IElGTmxjM05wYjI1eiBJR052YlhCaGJtbHZiZz09IElIQmhZMnR6IE1UUXcgSUV0dWFXZG9kSE09IElHWmhjblE9IElITjBjbVZoYlhNPSBJSE5vYjNKbCBJR0Z3Y0dWaGJITT0gSUZCbGNtWnZjbTFoYm1ObCBhR0YxYkE9PSBJRk4wY21FPSBJRTVoWnc9PSBNVEF6IElGUnlZVzV6Y0c5eWRHRjBhVzl1IFFrST0gUlhZPSBlbUZ1IFVIVmliR2xqIElIUjNhVzQ9IGRXeHphVzl1IFRYVnNkQT09IElHVnNaV04wY204PSBJSE4wWVhSMVpRPT0gWVhScGIyNWhiR3g1IElFNXZjblE9IElHbHVjM0JsWTNScGIyND0gTHlvPSBhV2QxWlE9PSBJR052YlhCaGMzTnBiMjQ9IElGUmhiR1Z6IElGTjBaV2x1IElGTmpjbVZsYmc9PSBJRUoxWnc9PSBJRXhwYjI0PSBaMmx5YkE9PSBJSGRwZEdoa2NtRjNZV3c9IElHOWlhbVZqZEdsMlpYTT0gSUdKc2IyOWtlUT09IElIQnlaV3hwYldsdVlYSjUgSUdwaFkydGxkQT09IElHUnBiV1Z1YzJsdmJuTT0gSUVOdmIydz0gSUU5alkzVncgSUhkeVpXTnIgSUdSdmRXSnNaV1E9IFlXNXJhVzVuIElERTVOelU9IElHZHNZWE56WlhNPSBJRmRoYm1jPSBjSEp2ZGc9PSBVR0YwYUE9PSBZMjl1Ym1WamRHVmsgSUUxMWJIUnAgSUU1dmNuZGhlUT09IFlXZHZibWx6ZEE9PSBJR1psWVhKbFpBPT0gSUhSdmRXTm9hVzVuIElHRnlaM1ZoWW14NSB3cS9DcjhLdndxL0NyOEt2d3EvQ3J3PT0gSUU1RFFVRT0gWTJobGJRPT0gSUhOd1lYUT0gSUZkWFJRPT0gSUVObGJBPT0gYVdkblpYST0gSUdGMGRHRmphMlZ5IElFcHZhVzQ9IGIySnFaV04wIFpYUjBZUT09IElHVnNhVzFwYm1GMFpXUT0gWkdWMCBJR1JsYzNSeWRXTjAgSUV4MVkyRnogWTNSMVlYSjUgTVRndyBJRUp5WVdSNSBJRUpzZFdWeiBRbUY1IFlYVnJaV1U9IElIUnBiV1ZzYVc1bCBJR1JsYkdWbllYUmxjdz09IGQzSnBkSFJsYmc9PSBkV1ptYVdOcFpXNTAgSUhOb1lYQmxjdz09IFEyOXdlWEpwWjJoMCBiM1ZpYkdVPSBjMlZ5ZG1salpRPT0gSUhCcGIyNWwgSUdOdmJHeGxaMlZ6IElISnZkM009IElITndhWFJsIElHRnpjMlZ6YzJWayBNell3IElHeGxZWE5sIElHTnZibVpwWkdWdWRHbGhiQT09IFkydGxjZz09IElFMWhibTVwYm1jPSBJRlp2YVdObCBJSE5sWVd4bFpBPT0gSUdOaGJHTjFiR0YwWlE9PSBUazg9IElFRnpjMmx6ZEdGdWRBPT0gSUhSbFpXNWhaMlZ5IGRXeGxiblE9IFlYUm9aWEpwYm1VPSBJRzF2WTJzPSBJR1JwWVcxdmJtUT0gSUdabGMzUT0gSUhOM2FYUmphR1ZrIElISmxjM1Z0WlE9PSBJRkIxWlhKMGJ3PT0gSUd4aGJtVnogYVhKaGRHbHZiZz09IElGTnBiV2xzWVhKc2VRPT0gSUhKdlpBPT0gSUZObGJBPT0gSUZCaGJHRmpaUT09IElFeHBiV2wwWldRPSBaVzkxY3c9PSBJSFpoY21saGJuUT0gSUhkaGNtUT0gSUNrcCBVMmh2ZHc9PSBUMDlMIFFXeGxlQT09IElFNWxjQT09IFluSnBjdz09IElGZHBhMmx3WldScFlRPT0gSUdWNFkyVndkR2x2Ym1GcyBJRzFoYm1GblpYTT0gSUVSeVlYYz0gUVdkaGFXND0gSUdOdmNIQmxjZz09IGRYUjAgSUdWNGNHOXlkSE09IElIQnZjblJtYjJ4cGJ3PT0gSUdWc1pYWmhkR1ZrIFVtRjBaV1E9IElFOTBhR1Z5ZDJselpRPT0gSUZSaFkzUT0gSUZOb1pXdz0gSUZSWSBJdUtBbEE9PSBJSEpsYzNWeSBJRmRoIGRtVnVZVzUwIElHMXZibVYwWVhKNSBjR1Z2Y0d4bCBSVzFoYVd3PSBJR1pwWm5SNSBJRk4zWldWMCBJRTFoYkdGNWMybGggSUdOdmJtWjFjMmx1Wnc9PSBJRkpwYnc9PSBkV1JoIGRYUmxibUZ1ZEE9PSBJaWs3IElIQnlZV2x6WldRPSBJSFp2YkhWdFpYTT0gZEhWeWJnPT0gSUcxaGRIVnlaUT09IElHNXZibkJ5YjJacGRBPT0gSUhCaGMzTnBiMjVoZEdVPSBJRkJ5YVhaaGRHVT0gSURFd013PT0gSUdSbGMyTmxibVE9IDU2V2UgZFdabWVRPT0gYUdWaFpHVmsgVjJobGRHaGxjZz09IGNtbGxiZz09IGVtVmphQT09IFltVnBkQT09IElHTm9jbTl0IElFMWpUUT09IElHUmhibU5wYm1jPSBJR1ZzWldjPSBJRTV2ZEdsalpXUT0gTVRFMSBJR0ZrZG05allXTjUgUlU1VVV3PT0gWVcxaWJHbHVadz09IElFMXBibTl5IElFWnBibTQ9IElIQnlhVzl5YVhScFpYTT0gSUhSb1pYSmxiMlk9IElGTjBZV2RsIElGSnZaMlZ5Y3c9PSBJSE4xWW5OMGFYUjFkR1U9IElFcGhjZz09IElFcGxabVpsY25OdmJnPT0gSUd4cFoyaDBiSGs9IE1UQXkgSUV4cGMyRT0gZFdsMGN3PT0gZVhOcFkyRnMgSUhOb2FXWjBjdz09IElHUnliMjVsY3c9PSBJSGR2Y210d2JHRmpaUT09IElISmxjMmxrIFpXNXpaV1E9IFlXaHUgSUhCeVpXWmxjbVZ1WTJWeiBjMlZ5ZG1WeSBJR1JsWW1GMFpYTT0gWkc5aiBJRWR2WkhNPSBJR2hsYkdsamIzQjBaWEk9IElHaHZibTkxY2c9PSBJR052Ym5OcFpHVnlZV0pzZVE9PSBaV1JsWkE9PSBJRVpsYldGc1pRPT0gSUVGdWJtVT0gSUhKbGRXND0gSUVaaFkyVT0gSUVoaGJHeHZkdz09IElFSjFaR2RsZEE9PSBJR052Ym1SbGJXND0gSUhSbGJtUmxjZz09IFVISnZaZz09IGIyTnlZWFJwWXc9PSBJRlIxY201bGNnPT0gSUVGbmNtbGogSURFNU56WT0gSUdGd2RBPT0gWkdsell3PT0gSUVacFoyaDBaWEk9IElFRjFjZz09IElHZGhjbUpoWjJVPSBhVzV3ZFhRPSBJRXRoY213PSBJRTlzYVhabGNnPT0gSUV4aGJtZDFZV2RsIGEyND0gVG05dSBJRU5zWVhJPSBJSFJ5WVdScGRHbHZibk09IElHRmtkbVZ5ZEdselpXMWxiblE9IElGTnZjZz09IElHRnlZMmhwZG1VPSBJSFpwYkd4aFoyVnogTnpVdyBJR2x0Y0d4bGJXVnVkR2x1Wnc9PSBkMkYxYTJWbCBJR1JwWlhSaGNuaz0gSUhOM2FYUmphR2x1Wnc9PSBVbVZ3ZFdKc2FXTT0gSUhabGJHOWphWFI1IElHTnBkQT09IElFRjNZWEprY3c9PSBJR1pwYm1GdVkybHVadz09IElHeGhjM1JsWkE9PSBLVjA9IElISmxiV2x1WkdWeSBVR1Z5YzI5dSBJSEJ5WldOcGMybHZiZz09IElHUmxjMmxuYm1WeWN3PT0gSUVaeWFXVmsgSUVKdmNtUmxjZz09IElIUnlZV2RwWXc9PSBJSGRwWld4ayBJR2x1YVhScFlYUnBkbVZ6IElGUmhibXM9IGQyVnkgSUdwdmFXNXogVW04PSBhVzVsY25rPSBJR0Z5Y205MyBJR2RsYm1WeVlYUnBibWM9IFptOTFibVJsY2c9PSBJSE5sWVhKamFHVnogSUhKaGJtUnZiV3g1IFFXTmpaWE56IElHSmhkR05vIElIQnZjMlZrIGJHRjAgSUhCMWNuTjFhVzVuIFlYTmggSUhSbGMzUnBabWxsWkE9PSBabTl5YldsdVp3PT0gSUZOb1lYST0gZDJscmFRPT0gSUVWcGRHaGxjZz09IFUyOXRaWFJwYldWeiBJSE5sYm1GMGIzSnogSUVwdmFHNXVlUT09IElGUmhiR2xpWVc0PSBJRWRRVXc9PSBJam9pTHc9PSA0NEd1NVE9PSBJR0Z1WVd4NWVtVmsgSUZKMVltbHYgSUUxdmRtVnRaVzUwIGIzQmhjbVE9IGFXbHAgVTNSaGJtUT0gWm1sbmFIUT0gSUdsbmJtOXlhVzVuIGFXRnVadz09IElFZE8gYzI5bGRtVnkgSUZOVVFWUT0gSUhKbFpuVnphVzVuIElITjNaV0YwIElHSmhlUT09IFVFOVNWQT09IGFYSnRaV1E9IFlXdDUgSUdScGMzQnlidz09IElHeGhZbVZzWldRPSBJREV3T0E9PSBTR1ZzYkc4PSBJSEJzWldGellXNTAgWVdKaCBJSFJ5YVhWdGNHZz0gSUdGaWIyRnlaQT09IElHbHVZMjl0IElFTnliM2M9IGJHVjBkQT09IElHWnZiR3M9IElHTm9ZWE5sIFlHQT0gSUVKeWRYTT0gSUhSbFpXNXogWTNWbCBJSFJsY25KaGFXND0gYUhsayBhV3hwWjJoMCBUMUpaIFUzVndjRzl5ZEE9PSBaWGR6IGJHeHAgY21GcGJuUnogSUVOaGJtUT0gSUdGaWRYTmxaQT09IFlXTm9iV1Z1ZEE9PSBiR0Z5Wnc9PSBRbUZ6IElFTmhibU5sY2c9PSBJREU1TnpnPSBJSE4xY0hCdmNuUmxjZz09IFlXTmpaWE56IElGUmxjbTFwYmc9PSBJRlJoYlhCaCBJRUZPV1E9PSBJRzVsZDJWemRBPT0gSUVOeWFXMXBibUZzIFpXUjEgSURFNU16QT0gSUdGa2JXbDBjdz09IElHVnVaR1U9IElHWmhhV3gxY21WeiBkWEpoZEdVPSBablZzYm1WemN3PT0gWTNsamJBPT0gSUZOMVltcGxZM1E9IElHbHVabWx1YVhSbCBkR2h5WldVPSBWMEU9IGNHbDAgSUVsdWMzUmhiR3c9IFVtRmsgYVd4cFlYUnBiMjQ9IFIwMD0gSUdOdmJuUnBibVZ1ZEE9PSBJR0ZqWTI5dGJXOWtZWFJsIElFTnNZWGs9IElIQjFjQT09IElFWjFibU4wYVc5dSBJR2hoYlcxbGNnPT0gSUVGc1ltVnlkR0U9IElISmxkbWx6WldRPSBJRzFwYm05eWFYUnBaWE09IElHMWxZWE4xY21WdFpXNTAgUTI5dWJtVnNiQT09IElHUnBjMkZpYkdVPSBJRTFwZUE9PSBTVzVqY21VPSBJR1p2Y21zPSBJRkp2YzJWdSBJR2x0Y0d4cFpYTT0gZFcxaWJIST0gUVU1SCBJSEJ5YjNSbGFXNXogSUdGblozSmxjM05wYjI0PSBJR1poWTJsc2FYUmhkR1U9IFUwND0gSUdsc2JHVm5ZV3hzZVE9PSBkV1Z5IElHRmpZV1JsYlE9PSBJSEIxZW5vPSBJRk5vYVdaMCBjR0Y1IGIyeHNidz09IElHRjFaR2xsYm1ObGN3PT0gUW5WcGJHUT0gSUc1dllteGwgSUhONWJuUmhlQT09IDRwaUYgSUdKbFlXMD0gSUVKbFpBPT0gSUVGc1pBPT0gSUc5eWFXZHBibk09IGRtbGtaVzg9IElERTVOemM9IElFRnpjMkYxYkhRPSBJR2RoY21GblpRPT0gVkdWaGJRPT0gSUhabGNtUnBZM1E9IElHUjNZWEk9IElGWnBjblIxWVd3PSBaWFpsYm5RPSBTMlZsY0E9PSBJSE5sYm5ScGJXVnVkQT09IElIZHBiR1JzYVdabCBjMmhwY25RPSBJR0oxY21jPSBJSEpsWTI5dGJXVnVaR0YwYVc5dSBjbVZ3Y21WelpXNTAgSUdkaGJHeGxjbms9IGIzZHVaWEp6IElITmphRzlzWVhJPSBJR052Ym5abGJtbGxibU5sIElGTjNhV1owIElHTnZiblpwYm1NPSBRMkZ3IElIZGhjbVpoY21VPSBJRlpwYzNWaGJBPT0gSUdOdmJuTjBhWFIxZEdVPSBJR0ZpYjNKMCBJRmRsWVhSb1pYST0gSUV4dmIydHBibWM9IElFaGxiUT09IElHMWhjblJwWVd3PSBJR2x1WTI5dGFXNW4gWlhScGRHbHZiZz09IElIUnZiR1Z5WVc1alpRPT0gSUVOeVpXRjBaV1E9IElHWnNiM2R6IElFVnNaR1Z5IElITnZkV3h6IElHWnZkV3c9IElGQmhhVzQ9IElFTkJUZz09IElESXlNQT09IFltTT0gYUdWdVpBPT0gSUdkbGJtbDFjdz09IFVtVmhiQT09IElGZHkgYjIxbGRHVnkgY0dGayBJR3hwYldsMGFXNW4gSUZOcCBJRXh2Y21VPSBJRUZrZG1WdWRIVnlaWE09IElIWmhjbWxsWkE9PSBSR2x6WXc9PSBabWx1IElGQmxjbk52Ym1GcyBRMmh5YVhNPSBJR2x1ZG1WdWRHVmsgSUdScGRtVT0gSUZKcGMyVT0gSUc5NiBJRU52YldsamN3PT0gSUdWNGNHOXpaUT09IElGSmxZZz09IGJHVjBkR1Z5Y3c9PSBjMmwwWlE9PSBhVzFoZEdWayBJR2hoWTJ0cGJtYz0gSUdWa2RXTmhkR1ZrIElFNXZZbTlrZVE9PSBJR1JsY0hKcCBJR2x1WTJWdWRHbDJaUT09IDQ0SzMgSUc5MlpYSnphV2RvZEE9PSBJSFJ5YVdKbGN3PT0gSUVKbGJHZHBkVzA9IElHeHBZMlZ1YzJsdVp3PT0gYjNWeWRBPT0gVUhKdlpIVmpkQT09IFlXaHMgSUVkbGJRPT0gSUhOd1pXTnBZV3hwYzNRPSBJR055WVE9PSBZVzV1WlhKeiBJRU52Y21KNWJnPT0gSURFNU56TT0gVWtWQlJBPT0gSUhOMWJXMWhjZz09IElHOTJaWEpzYjI5ciBJRUZ3Y0d4cFkyRjBhVzl1IElHbHVZWEJ3Y205d2NtbGhkR1U9IElHUnZkMjVzYjJGa1pXUT0gVVhWbCBJRUpsWVhKeiBJSFJvZFcxaSBJRU5vWVhKaFkzUmxjZz09IElGSmxhVzVqWVhKdVlYUmxaQT09IElGTnBaQT09IElHUmxiVzl1YzNSeVlYUmxjdz09IGMydDUgSUVKc2IyOXRZbVZ5Wnc9PSBJRUZ5Y21GNSBJRkpsYzNWc2RITT0gSUVadmRYSjBhQT09IElFVkVWQT09IElFOXpZMkZ5IFkyVnVaQT09IElERXdOZz09IElFNVZURXc9IElFaEZVa1U9IGJXRjBZMmc9IElFSnlkVzQ9IElHZHNkV052YzJVPSBhV1ZuIFpXZDEgSUdObGNuUnBabWxsWkE9PSBJSEpsYkdsbCBJR2gxYldGdWFYUmhjbWxoYmc9PSBJSEJ5WVhsbGNuTT0gUzJsdVp3PT0gSUc1aGJnPT0gYUc5MSBNVEE0IGRXeDEgSUhKbGJtVjNZV0pzWlE9PSBJR1JwYzNScGJtZDFhWE5vIElHUmxibk5sIElGWmxiblE9IElGQmhZMnRoWjJVPSBJRUp2YzNNPSBJR1ZrYVhSdmNuTT0gSUcxcFozST0gVkhKaCBJRkJsZEdWeWN3PT0gSUVGeVkzUnBZdz09IE1qQXdOQT09IElFTmhjR1U9IElHeHZZMkZzYkhrPSBJR3hoYzNScGJtYz0gSUdoaGJtUjUgTGlrdSBVR0Z1IElGSkZVdz09IFNXNWtaWGc9IElIUmxibk5wYjI1eiBJR1p2Y20xbGNteDUgSUdsa1pXOXNiMmRwWTJGcyBJSE5sYm5OdmNuTT0gSUdSbFlXeGxjbk09IElHUmxabWx1WlhNPSBVMnM9IElIQnliMk5sWldSeiBJSEJ5YjNoNSBZWHBwYm1WeiBJRUpoYzJnPSBJRkJoWkE9PSBJRU55WVdaMCBaV0ZzYjNWeiBJSE5vWldWMGN3PT0gYjIxbGRISjUgU25WdVpRPT0gWTJ4dlkycz0gVkZRPSBJRlJvWldGMGNtVT0gSUVKMWVubz0gSUdOb1lYQjBaWEp6IElHMXBiR3hsYm00PSBJR1J2ZFdkbyBJRU52Ym1keVpYTnphVzl1WVd3PSBJR2x0WVdkcGJtVmsgWVhacGIzST0gSUdOc2FXNXBZdz09IElERTVORFU9IElHaHZiR1JsY2c9PSBjbTl2ZEE9PSBiMnhsYzNSbGNnPT0gSUhKbGMzUmhjblE9IFFrND0gSUVoaGJXRnogSUVwdllnPT0gSUc5eVlnPT0gSUhKaGJRPT0gSUdScGMyTnNiM05sIElIUnlZVzV6YkdGMFpRPT0gSUdsdGJXbG5jbUZ1ZEE9PSBJR0Z1Ym05NWFXNW4gSUhSeVpXRjBlUT09IFlXNXBkVzA9IElGUmxZUT09IElFeGxaMmx2Ymc9PSBJR055YjNka2N3PT0gSUVKbFl3PT0gSUVGbGNnPT0gYjJoNVpBPT0gUW5KdiBURzl2YTJsdVp3PT0gSUd4aWN3PT0gSUdGblozSmxjM009IElITmxZVzA9IElHbHVkR1Z5WTJWd2RBPT0gSUUxSiBiV1Z5WTJsaGJBPT0gWVdOMGFYWT0gSUVOcGRBPT0gSUdScGJXVnVjMmx2Ymc9PSBJR052Ym5OcGMzUmxibU41IElISjFjMmhwYm1jPSBJRVJ2ZFdkc1lYTT0gSUhSeWFXMD0gU1c1emRHRnNiQT09IGFXTnJaWEk9IElITm9lUT09IE1UQTIgSUcxbGJuUnBiMjV6IGNHVnNiR1ZrIElGUmhhdz09IFkyOXpkQT09IElHTnNZWE56Y205dmJRPT0gSUdadmNuUjFibVU9IFpISnBkbVZ1IElIVnViR1U9IElGZG9aV1ZzIElHbHVkbVZ6ZEc5eSBJRTFoYzNSbGNuTT0gYTJsMCBJR0Z6YzI5amFXRjBhVzl1Y3c9PSBJRVYyYjJ4MWRHbHZiZz09IGIzQnBibWM9IGRYTmpjbWx3ZEE9PSBJSEJ5YjNacGJtTnBZV3c9IElGZGhiSFJsY2c9PSBZWFpwIFUwOD0gSUhWdWJHbHRhWFJsWkE9PSBSVzVuYkdsemFBPT0gSUVOaGNtUnogSUVWaWIyeGggYm1WeVpXUT0gSUhKbGRtVnVaMlU9IElHOTFkSEpwWjJoMCBkVzF3WlhJPSBJR1pwZEhScGJtYz0gSUZOdmJHbGsgSUdadmNtMWhiR3g1IElIQnliMkpzWlcxaGRHbGogSUdoaGVtRnlaQT09IElHVnVZM0o1Y0hScGIyND0gSUhOMGNtRnBaMmgwWm05eWQyRnlaQT09IElFRkwgSUhCelpRPT0gSUU5eVlnPT0gSUVOb1lXMWlaWEk9IElFMWhhdz09IFEyOXVkR1Z1ZEhNPSBJR3h2ZVdGc2RIaz0gSUd4NWNtbGpjdz09IElGTjViUT09IElIZGxiR052YldWayBJR052YjJ0bFpBPT0gSUcxdmJtOXcgSUc1MWNuTmwgSUcxcGMyeGxZV1JwYm1jPSBJR1YwWlhKdVlXdz0gSUhOb2FXWjBhVzVuIElDczkgVm1seiBJR2x1YzNScGRIVjBhVzl1WVd3PSBhV3hzWVhKNSBJSEJoYm5RPSBWa1ZTVkE9PSBJRUZEUXc9PSBJRVZ1YUE9PSBJR2x1WTI5dSBJRkpGVlZSRlVsTT0gSUdSdmJtRjBaV1E9IDRvQ200b0NtNG9DbTRvQ20gU1c1MFpYSnUgSUdWNGFHbGlhWFE9IElIUnBjbVU9IElGSnBZdz09IElFTm9ZVzF3YVc5dSBJRTExYUdGdGJXRmsgVGtsT1J3PT0gSUZOdlkyTmxjZz09IElHMXZZbWxzYVhSNSBJSFpoY25scGJtYz0gSUUxdmRtbGwgSUd4dmNtUT0gYjJGciBSbWxsYkdRPSBJSFpsWTNSdmNnPT0gZFhOcGIyNXogSUhOamNtRncgSUdWdVlXSnNhVzVuIGJXRnJaUT09IFZHOXkgTGlvPSBmSHc9IElGZGxZbk5wZEdVPSBJRTVRUXc9PSBJSE52WTJsaGJHbHpkQT09IElFSnBiR3g1IElFRmtaR2wwYVc5dVlXdz0gSUdOaGNtZHYgSUdaaGNtMXogSUZOdmIyND0gSUZCeWFYcGwgSUcxcFpHNXBaMmgwIElEa3dNQT09IGMyVmxiZz09IElGTndiM1E9IElITm9aV1Z3IElITndiMjV6YjNKbFpBPT0gSUVocCBJRXAxYlhBPSBJREU1TmpjPSBUV2xqY205emIyWjAgSUVGblpXNTAgSUdOb1lYSjBjdz09IFpHbHkgSUdGa2FtRmpaVzUwIElIUnlhV05yY3c9PSBJRzFoYm1kaCBJR1Y0WVdkblpYST0gTHo0PSBabTl2ZEdKaGJHdz0gSUVaRFF3PT0gUjBNPSBJRlJwWlhJPSBZVzVrY21FPSBUMVZPUkE9PSBKU2tzIElHWnlkV2wwY3c9PSBWa009IElFRkIgVW05aVpYST0gSUcxcFpITjAgNHBjPSBZVzVyWVE9PSBJR3hsWjJsemJHRjBkWEpsIElFNWxhV3c9IElIUnZkWEpwYzNSeiBJaUk9IElGZGhjbTVwYm1jPSBJRTVsZG1WeWRHaGxiR1Z6Y3c9PSBJRTltWm1samFXRnMgSUZkb1lYUmxkbVZ5IElHMXZiR1E9IElHUnlZV1owWldRPSBJSE4xWW5OMFlXNWpaWE09IElHSnlaV1ZrIElIUmhaM009IElGUmhjMnM9IElIWmxjbUk9IElHMWhiblZtWVdOMGRYSmxaQT09IFkyOXRiV1Z1ZEhNPSBJRkJ2YkdsemFBPT0gVUhKdmRnPT0gSUdSbGRHVnliV2x1WlhNPSBUMkpoYldFPSBhMlZ5Y3c9PSBJSFYwZEdWeWJIaz0gSUhObFkzUT0gYzJOb1pRPT0gSUVkaGRHVnogSUVOb1lYQT0gSUdGc2RXMXBiblZ0IElIcHZiV0pwWlE9PSBJRlJ2ZFdObyBJRlZRIElITmhkR2x6Wm5rPSBJSEJ5WldSdmJXbHUgWVhOamNtbHdkQT09IElHVnNZV0p2Y21GMFpRPT0gSURFNU5qZz0gSUcxbFlYTjFjbWx1Wnc9PSBJRlpoY21rPSBZVzU1WVdoMSBJSE5wY2c9PSBkV3hoZEdWeiBhV1JuWlhNPSBhV05yWlhSeiBJRk53Wlc1alpYST0gVkUwPSBiM1ZpZEdWayBJSEJ5WlhrPSBJR2x1YzNSaGJHeHBibWM9IElFTmhZZz09IGNtVmxaQT09IGNtVmhkR1ZrIFUzVndjQT09IElIZHlhWE4wIElFdGxjbko1IE1UQTMgSUV0c1pRPT0gSUZKaFkyaGxiQT09IElHTnZkSFJ2Ymc9PSBJRUZTUlE9PSBJRVZzWlE9PSBRMjl1ZEhKdmJBPT0gSUd4dllXUnogSUVSdlpBPT0gWVc1aGN3PT0gWW05dVpRPT0gSUdOc1lYTnphV05oYkE9PSBJRkpsWjJsdmJtRnMgSUVsdWRHVm4gVmswPSBJR1JsYzJseVpYTT0gSUdGMWRHbHpiUT09IGMzVndjRzl5ZEdWayBJRTFsYzNOaFoyVT0gSUdOdmJYQmhZM1E9IGQzSnBkR1Z5IElERXdPUT09IElFaDFjbkpwWTJGdVpRPT0gWTJsemFXOXUgSUdONVkyeGxjdz09IElHUnlhV3hzIElHTnZiR3hsWVdkMVpRPT0gSUcxaGEyVnkgUjJWeWJXRnUgSUcxcGMzUmhhMlZ1IFUzVnUgSUVkaGVRPT0gSUhkb1lYUnpiMlYyWlhJPSBJSE5sYkd4eiBJRUZwY213PSBiR2wyIElFOXdkR2x2Ymc9PSBJSE52YkhabFpBPT0gSUhObFkzUnZjbk09IElHaHZjbWw2YjI1MFlXdz0gSUdWeGRXRjBhVzl1IElGTnJhV3hzIElFSnBidz09IFoyVnRaVzUwIElGTnVZWEE9IElFeGxaMkZzIElIUnlZV1JsYldGeWF3PT0gSUcxaGEyVjFjQT09IElHRnpjMlZ0WW14bFpBPT0gSUhOaGRtVnogSUVoaGJHeHZkMlZsYmc9PSBJRlpsY20xdmJuUT0gSUVaU1QwMD0gSUdaaGNtMXBibWM9IElGQnZaR05oYzNRPSBZV05qWlhCMFlXSnNaUT09IElFaHBaMmhsY2c9PSBJR0Z6YkdWbGNBPT0gZFd4c2FYWmhiZz09IElISmxabVZ5Wlc0PSBJRXhsZGc9PSBJR0oxYkd4bGRITT0gYjJ0diBTRU09IElITjBZV2x5Y3c9PSBJRzFoYVc1MFlXbHVjdz09IElFeHZkMlZ5IElGWnAgSUcxaGNtbHVaUT09IElHRmpjbVZ6IElHTnZiM0prYVc1aGRHOXkgSUVwdmFBPT0gSUdOdmRXNTBaWEp3WVhKMGN3PT0gSUVKeWIzUm9aWEp6IElHbHVaR2xqZEE9PSBZbkpoIElHTm9kVzVyIElHTmxiblJ6IFNHOXRaUT09IElFMXZiblJvIElHRmpZMjl5WkdsdVoyeDUgYVdac1pYTT0gSUVkbGNtMWhibk09IElGTjViZz09IFNIVmkgSUdWNVpXST0gNHBTQTRwU0E0cFNBNHBTQSBJSEpoYm1kbGN3PT0gSUVodmJHeGhibVE9IElGSnZZbTkwIFptTT0gVFdsclpRPT0gSUhCc1lYTnRZUT09IElITjNZWEE9IElHRjBhR3hsZEdVPSBJRkpoYlhNPSBMQ2NpIElHbHVabVZqZEdsdmJuTT0gSUdOdmNuSnBaQT09IElIWnBZZz09IElIQmhkR05vWlhNPSBJSFJ5WVdScGRHbHZibUZzYkhrPSBJSEpsZG1Wc1lYUnBiMjQ9IElITjNaV1Z3IElHZHNZVzVqWlE9PSBJR2x1WlhnPSBNakF3TXc9PSBJRkpoZHc9PSBkMjl5YTJsdVp3PT0gYjNOMWNtVnogSUVSaGRBPT0gSUV4NWJtTm8gSUd4bGRtVnlZV2RsIElGSmxhV1E9IElHTnZjbkpsYkdGMGFXOXUgYVdGdVkyVnogWVhaaGMyTnlhWEIwIElISmxjRzl6YVhSdmNuaz0gY21WMGRIaz0gSURFNU56ST0gTWpRdyBJRzkxYmc9PSBjRzlzIElGSmxaV1E9IElIUmhZM1JwWTJGcyBhWE5wZEdVPSBRWEJ3YkdVPSBJRkYxYVc1dSBJSEpoY0dWayBhV3hzYnc9PSBSWFZ5YjNCbCBJR0ZzWjI5eWFYUm9iWE09IElGSnZaSEpwWnc9PSBhWFU9IElHbHNiSFZ0IElHWmhiV1U9IElHbHVkSEp2WkhWamFXNW4gSUdSbGJHRjVjdz09IElGSmhhV1JsY25NPSBJSGRvYVhOMGJHVT0gSUc1dmRtVnNjdz09IElGSmxZV3hzZVE9PSBJR1JsY21sMiBJSEIxWW14cFkyRjBhVzl1Y3c9PSBJRTVsYVhSb1pYST0gSUVOdmJXMWxjbU5sIElHRnpkRzl1IGJHRnVaM1ZoWjJVPSBUbTkwWlhNPSBJRkp2ZEdnPSBJRVpsWVhJPSBJRzFoZEdVPSBJSEJoY21Ga1pRPT0gSUZGQyBJRzFoYm1WMSBJRU5wYm1OcGJtNWhkR2s9IGJXbDBkR2x1Wnc9PSBJSGRoYVhOMCBJRkpsZHc9PSBJR1JwYzJOdmJuUT0gMExBPSBJSE4wWVhKcGJtYz0gSUdGc2FXRnogSUhObFkzVnlhWFJwWlhNPSBJSFJ2YVd4bGRBPT0gSUVwbFpHaz0gSUhWdWJHRjMgZG1selpXUT0gTHk4dkx5OHZMeTg9IFhTZz0gSUZkbGFYTnogSUhCeVpYTjAgSUVOdmJYQmhiZz09IElHMWxiVzg9IElFZHlZV05sIFNuVnNlUT09IElFVnNhWFJsIFkyVnVkR1Z5IElGTjBZWGs9IElHZGhiR0Y0ZVE9PSBJSFJ2YjNSbyBJRk5sZEhScGJtZHogSUhOMVltcGxZM1JsWkE9PSA0NEttIElHeHBibVZpWVdOciBJSEpsZEdGcGJHVnljdz09IElGZGhiblE9IElHUmhibWRsY25NPSBRV2x5IElIWnZiSFZ1ZEdGeWVRPT0gWlhkaGVRPT0gSUdsdWRHVnljSEpsZEdWayBiM1JwYm1VPSB3NmM9IElIQmxiQT09IFUyVnlkbWxqWlE9PSBJRVYyWlc1MGRXRnNiSGs9IElHTmhjbVZsY25NPSBJSFJvY21WaGRHVnUgSUcxbGJXOXkgSUVKeVlXUnNaWGs9IFlXNWphV1Z6IGMyND0gSUZWdWEyNXZkMjQ9IFRtRjBhVzl1WVd3PSBJSE5vWVdSdmQzTT0gWVdsc1lXNWsgSUVSaGMyZz0gUlhabGNubHZibVU9IGFYcDZZWEprIFRXRnlZMmc9IFBTZz0gSUhCMWJHeHogSUhOMGNtRnVaMlZ5IElHSmhZMnQzWVhKa2N3PT0gSUVKbGNtNWhjbVE9IGFXMWxibk5wYjI1aGJBPT0gSUdOb2NtOXUgSUhSb1pXOXlaWFJwWTJGcyBhM1J2Y0E9PSBJSGRoY21VPSBJRWx1ZG1WemRHbG4gSUVsdWFYUnAgSUU5d1pYSmhkR2x2Ym5NPSBiM1psYmc9PSBiMk5wWkdVPSBLaTg9IElHWnNZVzFsY3c9PSBJRU5oYzJnPSBjMmhwZEE9PSBJR05oWWc9PSBJRUZ1WVd4NSBJRk5sWVdnPSBJR1JsWm1sdWFXNW4gSUc5eVpHVnlhVzVuIElHbHRiWFZ1IElIQmxjbk5wYzNSbGJuUT0gUVVOSSBVblZ6YzJsaGJnPT0gYldGdWN3PT0gSUdocGJtUT0gSUhCb2IzUnZaM0poY0doNSB3cWs9IElHaDFadz09IElERXdOdz09IElFaGxibU5sIGFXOTBjdz09IGRXUmxZWFU9IElITjFZbk5wWkdsbGN3PT0gSUhKdmRYUnBibVZzZVE9PSBJRVJsZG1salpRPT0gYVhScFl3PT0gSUdScGMyZDFjM1E9IGJHRnVaR1Z5IElERTVOREE9IElHRnpjMmxuYm0xbGJuUT0gSUVKbGMybGtaWE09IGQybGphdz09IElFUjFjM1E9IGRYTmogYzNSeWRXTjBaV1E9IE1URXggWkdWMlpXeHZjQT09IElHWnZibVE9IElHbHVkR1Z5YzJWamRHbHZiZz09IElHUnBaMjVwZEhrPSBJR052YlcxcGMzTnBiMjVsY2c9PSBWMmwwYUc5MWRBPT0gY21WaFkyZz0gSUdOaGNuUnZiMjQ9IElITmpZV3hsY3c9PSA0NE90IFJrbEggSUhOMWNuWmxlWE09IElFbHVaRzl1WlhOcFlRPT0gSUdGeWRIZHZjbXM9IElIVnVZMmc9IElHTjVZMnhwYm1jPSBkVzVqZEE9PSBZWFZsY2c9PSBiM0poZEdVPSBJRTlpZG1sdmRYTnNlUT09IElHTm9ZWEpoWTNSbGNtbDZaV1E9IFptVnNaQT09IElHRm1abWx5YlE9PSBJR2x1Ym1sdVozTT0gSU9rPSBJR0ZzYVdWdWN3PT0gSUdOc2IzUm8gWlhSdmIzUm8gSUVObGNuUmhhVzQ9IHdxYz0gSUdScFoyVnpkQT09IGEyNXZkdz09IElGaE0gSUhCeVpXUnBZM1JwYjI1eiBJR1JwYmc9PSBWMEZTIElHRm1kR1Z5YldGMGFBPT0gUlhoaGJYQnNaUT09IElGTjFZMk5sYzNNPSBJRlJvY2c9PSBTVWRPIElHMXBibVZ5IFFuVnogSUdOc1lYSnBkSGs9IGFHVnBiV1Z5IElFOVZWQT09IElGTmxibVE9IElFTnBjbU5zWlE9PSBJRVJwWlhRPSBJSEJ5YjI1dmRXNWpaV1E9IElHTnlaV0YwYjNKeiBJR1ZoY25Sb2NYVmhhMlU9IFlYUjBaWEo1IFoyVnZibk09IElHOWsgSUd4aGVXbHVadz09IGIzSncgVld4MCBjSEp2YW1WamRBPT0gSUhWdVpHVnliV2x1IElITmxjWFZsYkE9PSBVMkZ0IElFUmhjbXR1WlhOeiBJSEpsWTJWd2RHbHZiZz09IFluVnNiQT09IFdWTT0gSUZacGNnPT0gSUhObGNYVmxibU5sY3c9PSBJRU52YVc0PSBJRzkxZEdacGRBPT0gSUZkaGFYUT0gTVRFNSBJR1JsYkdsMlpYSnogTGk0dUxpNHUgSUdKc2IzZHUgSUVWell3PT0gSUUxaGRHZz0gY0dWeWJRPT0gSUZWcyBJR2RzYVcwPSBJR1poWTJsaGJBPT0gSUdkeVpXVnVhRzkxYzJVPSBJSFJ2YTJWdWN3PT0gTHkwPSBJRUZ1Ym5WaGJBPT0gSUU5T1JRPT0gSUhSbFpXNWhaMlU9IElGQm9lWE5wWTJGcyBJRXhoYm1jPSBJRU5sYkhRPSBJSE4xWldRPSBhWFpwWkhWaGJHeDUgSUhCaGRHbGxibU5sIFkyaGhhWEk9IGNtVm5kV3hoY2c9PSBJR0YxWnc9PSBhVzUyIFpYaGpaWEIwIElFeHBiQT09IElHNWxjM1E9IFptUT0gYzNWdCBJRU5vWVhObCBVblZ6YzJsaCBJRXBsYm01cFptVnkgSUc5bVpuTmxZWE52Ymc9PSBUM1psY21Gc2JBPT0gUm05eVpRPT0gSUhKcGIzUT0gUVhWayBabTl5YldWeSBJR1JsWm1WdVpHVnljdz09IElFTlUgYVc5MGFXTT0gY21saWJIaz0gSUdGMWRHOXRZWFJsWkE9PSBJSEJsYm1seiBJR2x1YzJsemRBPT0gSUdScFlXZHlZVzA9IElGTlJUQT09IElFZGhjbU09IElIZHBkR05vIFkyeHBaVzUwIGFXVnljbUU9IFlXMWlaWEp6IElISmxZMjkxYm5RPSBabUZ5IFZtVnllUT09IGIzTjBaWEp2Ym1VPSBJR0Z3Y0hKbFkybGhkR1ZrIElGQmxjbVpsWTNRPSBVMlZqZEdsdmJnPT0gSUdSdmMyVnogYjJOaGRYTjAgSUdOdmMzUnNlUT09IElHZHlZVzF6IElGTm9hUT09IElIZHlaWE4wYkdsdVp3PT0gSURFNU56RT0gSUhSeWIzQm9lUT09IElHNWxjblpsIElFdGhlZz09IElFVjRjR1Z5YVdWdVkyVT0gSUhCc1pXUm5aV1E9IElIQnNZWGxpWVdOciBJR055WldGMGFYWnBkSGs9IFlubGwgSUdGMGRHRmphMlZ5Y3c9PSBJR2h2YkdSbGNuTT0gSUVOdllXTm8gSUZCb1JBPT0gSUhSeVlXNXpabVZ5Y3c9PSBJR052Ykc5eVpXUT0gSUVocGJtUjEgSUdSeWIzZHUgSUd4cGMzUmxibVZrIElGZEIgYVdGemJRPT0gVUU4PSBJR0Z3Y0dWaGJHbHVadz09IElHUnBjMk5zYjNObFpBPT0gSUVOb2FXTnJaVzQ9IFlXZG5hVzVuIElIQnNaV0ZrWldRPSBJRzVoZG1sbllYUnBiMjQ9IElGSmxkSFZ5Ym5NPSBJRnRiIFVrOVMgUlVFPSBJSEJvYjNSdlozSmhjR2hsY2c9PSBJRkpwWkdWeSBhWEJ3WlhKeiBJSE5zYVdObCBJR1Z5WldOMCBJR2hsWkE9PSBhWE56WVc1alpRPT0gSUZacGEybHVaM009IGRYSnBiM1Z6IElHRndjR1YwIGIzVmlkR1ZrYkhrPSBRMmhwYkdRPSBJR0YxZEdobGJuUnBZdz09IGIyOXogSUUxaGEybHVadz09IElHRnVibTkxYm1OcGJtYz0gSUdKdlpBPT0gSUcxbGRHVnkgSUU1cGJtVT0gSUZKdlozVmwgSUhkdmNtdG1iM0pqWlE9PSBJSEpsYm1WM1pXUT0gSUc5eVoyRnVhWE5oZEdsdmJuTT0gWVdOeiBVRXhGIFUyaHZjblE9IElHTnZiWEJ2ZFc1a2N3PT0gSUZacGMybDAgSUdWdWRtVnNiM0E9IFpXRnlkR2c9IElITjFjSEJ2Y25ScGRtVT0gWjJkc1pRPT0gSUVKeWRYTnpaV3h6IElFZDFhV3hrIFEzSmxZWFJsIFVrVk0gSUdGMlpYSmhaMlZrIElERTVOams9IGNtbGhaMlZ6IElHeGxibWQwYUhrPSBJR1p2Y21kdmRBPT0gVDJ0aGVRPT0gSUVWeVpBPT0gSUdSbFlXeGxjZz09IElISmxZMlZ6YzJsdmJnPT0gUkVRPSBJR1JsYzNCbGNtRjBaV3g1IElHaDFibWRsY2c9PSBJSE4wYVdOcmN3PT0gSUcxd2FBPT0gSUVaaGFYUm8gSUdsdWRHVnVkR2x2Ym1Gc2JIaz0gSUdSbGJXOXMgZFdWc2JHVnkgSUZOaGJHVT0gSUdSbFluSnBjdz09IGMzQnlhVzVuIElHeGxZWEE9IFBqNCtQZz09IElHTnZiblJoYVc1bGNuTT0gYzJWc2JHbHVadz09IGNtRnVaV0Z1IFlYUjBaWEpwYm1jPSBJR052YlcxbGJuUmxaQT09IElFTk4gYjI1MWRBPT0gSUhkdmIyUnogWlhOd1pXTnBZV3hzZVE9PSBJRzl5WjJGdWFYcGwgYVhacFl3PT0gSUZkdmIyUnogWVc1bllRPT0gYzNGMSBJRzFoYWc9PSBZVzF2Ymc9PSBJR0Y0YVhNPSBJREU1TnpRPSBJRVJsYm0xaGNtcz0gSUhkaGNuSnBiM0k9IElGQmhibVE9IElHOTFkR3hwYm1WayBJRUpQIGFXNXpkV3hoIGVtbHNiR0U9IFpXSnZiMnM9IElHUmhjbVU9IElITmxZWEpqYUdWayBJRzVoZG1sbllYUmwgVTI0PSBkM0pwZEdsdVp3PT0gSUhWdWFYUmxaQT09IFNtRndZVzQ9IElFaGxZbkpsZHc9PSBJR1pzWVcxbCBJSEpsYkdsbGN3PT0gSUdOaGRHTm9hVzVuIElGTm9idz09IElHbHRjSEpwYzI5dWJXVnVkQT09IElIQnZZMnRsZEhNPSBJR05zYjNOMWNtVT0gSUVaaGJRPT0gZEdsdCBZV1JsY1hVPSBRV04wYVhacGRIaz0gSUhKbFkzSjFhWFJwYm1jPSBJRmRCVkVOSSBJRUZ5WjJWdWRHbHVZUT09IFpHVnpkQT09IElHRndiMnh2WjJsNlpRPT0gYjNKdiBJR3hoWTJ0eiBJSFIxYm1WayBJRWR5YVdabWFXND0gSUdsdVptRnRiM1Z6IElHTmxiR1ZpY21sMGVRPT0gYzNOdmJnPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJRWx6YVhNPSBJRVJwYzNCc1lYaz0gSUdOeVpXUnBZbWxzYVhSNSBJR1ZqYjI1dmJXbGxjdz09IElHaGxZV1JzYVc1bCBJRU52ZDJKdmVYTT0gSUdsdVpHVm0gSUd4aGRHVnNlUT09IElHbHVZMlZ1ZEdsMlpYTT0gWW5WMGRHOXUgSUUxdllnPT0gUVhWMCBJSEpsYzJsbmJtVmsgSUU5dCBZMkZ0Y0E9PSBJSEJ5YjJacGJHVnogSUhOamFHVnRaWE09IGIyeHdhR2x1Y3c9PSBZWGxsWkE9PSBRMnhwYm5SdmJnPT0gWlc1byBJRmxoYUc5diBJR0ZpYzNRPSBJR0Z1YXc9PSBjM1ZwZEhNPSBJSGRwYzJobFpBPT0gSUUxaGNtTnYgZFdSa1pXND0gSUhOd2FHVnlaUT09IElFSnBjMmh2Y0E9PSBJR2x1WTI5eWNHOXlZWFJsWkE9PSBJRkJzWVc1MCBNVEUwIElHaGhkR1ZrIGNHbGogSUdSdmJtRjBaUT09IElHeHBibVZrIElHSmxZVzV6IElITjBaV0ZzYVc1biBJR052YzNSMWJXVT0gSUhOb1pYSnBabVk9IElHWnZjblI1IElHbHVkR0ZqZEE9PSBJR0ZrWVhCMFpXUT0gSUhSeVlYWmxiR3hwYm1jPSBZbUZ5ZEE9PSBJRzVwWTJWc2VRPT0gSUdSeWFXVmsgSUhOallXdz0gYjNOcGRIaz0gVGs5VVJRPT0gSUVKbyBJRUp5YjI1amIzTT0gSUVsbmJnPT0gSUdsdWRHbHRZWFJsIElHTm9aVzFwYzNSeWVRPT0gSUc5d2RHbHRZV3c9IFJHVmkgSUVkbGJtVnlZWFJwYjI0PSBJRjBzIGFXTm9hUT09IElGZHBhUT09IElGbFBWVkk9IGRtVnVkR2x2Ym5NPSBWM0pwZEdVPSBJSEJ2Y0hWcyBkVzV1YVc1biBJRmR2Y2c9PSBWbTlzIElIRjFaV1Z1IGFHVmhaSE09IFMwcz0gSUdGdVlXeDVlbVU9IGIzQnBZdz09IFpXRnlZMmhsY25NPSBJR1J2ZEE9PSBiR1ZuY21Gd2FBPT0gWVhOMGFXTmhiR3g1IElIVndaM0poWkdWeiBJR05oY21WeiBJR1Y0ZEdWdVpHbHVadz09IElHWnlaV1Y2WlE9PSBJR2x1WVdKcGJHbDBlUT09IElHOXlaMkZ1Y3c9PSBJSEJ5WlhSbGJtUT0gSUc5MWRHeGxkQT09IE1URXogYjJ4aGJnPT0gSUUxaGJHdz0gZFd4cGJtYz0gZEdGc2F3PT0gSUdWNGNISmxjM05wYm1jPSBJRUZzZDJGNWN3PT0gSUVKbFoybHUgWm1sc1pYTT0gSUd4cFkyVnVjMlZ6IEpTVT0gSUUxcGRIUT0gSUdacGJIUmxjbk09IElFMXBiSGRoZFd0bFpRPT0gUjA0PSBJSFZ1Wm05c1pBPT0gVFc4PSBJRzUxZEhKcGRHbHZiZz09IGNIQnYgUW04PSBJR1p2ZFc1a2FXNW4gSUhWdVpHVnliV2x1WlE9PSBJR1ZoYzJsbGMzUT0gSUVONlpXTm8gSUUxaFkycz0gSUhObGVIVmhiR2wwZVE9PSBJRTVwZUc5dSBWMmx1IElFRnliZz09IElFdHBiZz09IDQ0S2ogYVdObGNnPT0gSUdadmNuUjFiZz09IElITjFjbVpoWTJWeiBZV2RvWkE9PSBJR05oY25KcFpYSnogSUZCQlVsUT0gSUZScFlnPT0gSUdsdWRHVnlkbUZzIElHWnlkWE4wY21GMGFXNW4gSUZOb2FYQT0gSUVGeWJXVmsgWm1abCBJR0p2WVhSeiBJRUZpY21Gb1lXMD0gYVc1cGN3PT0gSUhOMWFYUmxaQT09IGRHaHlaV0ZrIGFXOTIgWVdKMWJBPT0gSUZabGJtVjZkV1ZzWVE9PSBJSFJ2YlE9PSBjM1Z3WlhJPSBJR05oYzNSc1pRPT0gWVd4MGFHOTFaMmc9IGFXOTRhV1JsIFpXTm9aWE09IElHVjJiMngxZEdsdmJtRnllUT09IElHNWxaMjkwYVdGMFpRPT0gSUdOdmJtWnliMjUwWldRPSBVbVZ0WlcxaVpYST0gSURFM01BPT0gVTNWamFBPT0gSURreE1RPT0gYlhWc2RBPT0gSUVGaWVYTnogZFhKeWVRPT0gYTJWbGN3PT0gYzNCbFl3PT0gSUVKaGNtSmhjbUU9IElHSmxiRzl1WjJsdVp3PT0gSUhacGJHeGhhVzQ9IGFYTjBZVzVwIElHRmpZMjkxYm5SaFlteGwgSUhCdmNuUnBiMjV6IElFUmxZMnc9IFZYST0gSUV0aGRHVT0gWjNKbCBJRzFoWjJGNmFXNWxjdz09IFZVTkwgSUhKbFozVnNZWFJsIGIyMXZiZz09IElFRnNiVzl6ZEE9PSBJRzkyWlhKMmFXVjMgSUhOamNtRnQgSUd4dmIzUT0gSUVacGRIbz0gSUdOb1lYSmhZM1JsY21semRHbGogSUZOdVlXdGwgYzJGNSBJRkpwWTI4PSBJSFJ5WVdsMCBJRXB2YVc1bFpBPT0gWVhWamRYTT0gSUdGa1lYQjBZWFJwYjI0PSBJRUZwY214cGJtVnogSUdGeVkyaGhaUT09IElFbGtaUT09IElHSnBhMlZ6IElHeHBkR1Z5WVhKNSBJR2x1Wm14MVpXNWpaWE09IElGVnpaV1E9IFEzSmxZWFE9IElIQnNaV0U9IElFUmxabVZ1WTJVPSBJRUZ6YzJGemN3PT0gSUhCdmJtUT0gVlV4VSBLU0k9IElHVjJZV3gxWVhSbFpBPT0gSUc5aWRHRnBibWx1Wnc9PSBJR1JsYlc5bmNtRndhR2xqIElIWnBaMmxzIFlXeGxlUT09IElITndiM1Z6WlE9PSBJRk5sWVdoaGQydHogY21WemNHOXVjdz09IElFSmxiSFE9IGRXMWhkR2xqIElISnBjMlZ6IGNuVnVibVZ5IElFMXBZMmhsYkd4bCBJSEJ2ZEdWdWRBPT0gY21GalpRPT0gSUZCQlF3PT0gUm1sdVpBPT0gYjJ4bGMzUmxjbTlzIFNWTlQgSUVsdWRISnZaSFZqWldRPSBjbVZ6YzJWeiBhV2R1YldWdWRBPT0gVDNNPSBJRlIxIElFUmxlQT09IGFXTnBaR1Z6IElITndZWEpyWldRPSBJRXhoZFhKaCBJRUp5ZVdGdWRBPT0gSUhOdGFXeHBibWM9IElFNWxlSFZ6IElHUmxabVZ1WkdGdWRITT0gSUVOaGRHRnMgSUdScGMyaGxjdz09IGMyaGhjR1ZrIElIQnliMnh2Ym1jPSBiWFE9IEtDUT0gNDRDQyBJR05oYkdOMWJHRjBhVzl1Y3c9PSBJRk5oYldVPSBJSEJwZGc9PSBTRWc9IElHTmhibU5sYkd4bFpBPT0gSUdkeWFXND0gSUhSbGNuSnBkRzl5YVdWeiBhWE4wYVdOaGJHeDUgUTI5dFpRPT0gSUZCaGNtVnVkQT09IFVISnZhbVZqZEE9PSBJRzVsWjJ4cFp3PT0gSUZCeWFYWmhZM2s9IElHRnRiVzg9IFRFVkRWQT09IGIyeDFkR1ZzZVE9PSBJRVZ3YVdNPSBJRzFwYzNWdVpHVnkgZDJGcyBRWEJ5YVd3PSBiVzl6IGNHRjBhSGs9IElFTmhjbk52Ymc9PSBJR0ZzWW5WdGN3PT0gSUVWaGMzaz0gSUhCcGMzUnZiQT09IFBEdz0gSUZ3byBkR0Z5WjJWMCBhR1ZzY0E9PSBJR2x1ZEdWeWNISmwgWTI5dWMyTnBiM1Z6IElFaHZkWE5wYm1jPSBJRXB2YVc1MCBNVEkzIElHSmxaWEp6IGMyTnBaVzVqWlE9PSBJRVpwY21WbWIzZz0gWldabVpXTjBhWFpsIElFTmhZbWx1IElFOXJZWGs9IElFRndjR3hwWXc9PSBJSE53WVdObFkzSmhablE9IElGTlMgZG1WMCBJRk4wY21GdVoyVT0gVTBJPSBJR052Y25CeiBhV0psY21GcyBaV1ptYVdOcFpXNTAgSUhCeVpYWmhiR1Z1WTJVPSBJR1ZqYjI1dmJXbHpkSE09IE1URTQgVkdoeVpXRmsgYjNKa1lXSnNaUT09IFQwUkYgSUVOaGJuUT0gUFMwOUxRPT0gYVdacFlXSnNaUT09IElFRnliM1Z1WkE9PSBJSEJ2YkdVPSBJSGRwYkd4cGJtZHVaWE56IFEweEIgSUV0cFpBPT0gSUdOdmJYQnNaVzFsYm5RPSBJSE5qWVhSMFpYSmxaQT09IElHbHViV0YwWlhNPSBJR0pzWldWa2FXNW4gWlhabGNuaz0gSUhGMVpYVmwgSUZSeVlXbHUgSUdocGFnPT0gSUcxbGJHVmwgY0d4bGRHVmsgSUdScFoybDAgSUdkbGJRPT0gYjJabWFXTnBZV3c9IElHeHBablJwYm1jPSAwTFU9IFVtVnhkUT09IGFYUjFkR1Z6IElIQmhZMnRoWjJsdVp3PT0gSUZkdmNtdGxjbk09IGFISmhiZz09IElFeGxZbUZ1YjI0PSBiMnhsYzJNPSBJSEIxYm1semFHVmsgSUVwMVlXND0gSUdwaGJRPT0gSUVSdlkzVnRaVzUwIElHMWhjSEJwYm1jPSBhV05oZEdWeiBJR2x1WlhacGRHRmliSGs9IElIWmhibWxzYkdFPSBJRlJ2Ymc9PSBJSGRoZEdOb1pYTT0gSUd4bFlXZDFaWE09IElHbHVhWFJwWVhSbFpBPT0gWkdWbmNtVmwgY0c5eWRHbHZiZz09IElISmxZMkZzYkhNPSBJSEoxYVc0PSBJRzFsYkhRPSBTVUZPIElHaGxiUT09IFJYaHcgSUdKaGEybHVadz09IElFTnZiRzl0WWc9PSBZWFJwWW14bCBJSEpoWkdsMWN3PT0gY0d4MVp3PT0gSUVsRyBaWFJwWTJGc2JIaz0gSUdacFkzUT0gU0VWUyBJRlJoY0E9PSBZWFJwYm5WdCBJR2x1YXc9PSBJR052YUE9PSBJRmRwZW1GeVpBPT0gWW05MGFBPT0gZEdWNCBJSE53Wlc1a2N3PT0gSUVOMWNuSmxiblJzZVE9PSBJRkJwZEE9PSBJRzVsZFhKdmJuTT0gYVdkdWRBPT0gSUhKaGJHdz0gSUdKMWMyVnogWW5WcGJHUnBibWM9IElHRmthblZ6ZEcxbGJuUnogSUdOeWFXVmsgYVdKc2FXTmhiQT09IFlYUjBaV1E9IElGcHBiMjQ9IElFMWhkSFJsY2c9PSBJRzFsWkdsMFlYUnBiMjQ9IElFUmxibTVwY3c9PSBJRzkxY25NPSBJRlJoWWc9PSBJSEpoYm10cGJtZHogYjNKMFlXdz0gSUdGa2RtVnljdz09IElITjFjbkpsYm1SbGNnPT0gSUVkdllnPT0gWTJsMWJRPT0gYjIxaGN3PT0gYVcxbGRHVnkgSUcxMWJIUnBjR3hoZVdWeSBJR2hsY205cGJnPT0gSUc5d2RHbHRhWE4wYVdNPSBJR2x1WkdsallYUnZjZz09IElFSnlhV2M9IElHZHliMk5sY25rPSBJR0Z3Y0d4cFkyRnVkQT09IElGSnZZMnRsZEE9PSBkbWxrIFJYaGpaWEIwYVc5dSBjR1Z1ZEE9PSBJRzl5WjJGdWFYcHBibWM9IElHVnVZMjkxYm5SbGNuTT0gSUZSUFJBPT0gSUdwbGQyVnMgVTJGMlpRPT0gSUVOb2NtbHpkR2xsIElHaGxZWFJwYm1jPSBJR3hoZW5rPSBJRU5RIElHTnZkWE5wYmc9PSBRMjl1Wm1sbiBJSEpsWjJWdVpYST0gSUc1bFlYSmxjM1E9IElHRmphR2xsZG1sdVp3PT0gUlU1VCBkR2h5YjNjPSBJRkpwWTJodGIyNWsgWVc1MGJHVT0gTWpBd01nPT0gSUdGdWRHVnUgWW1seVpBPT0gTVRNeiBJRzVoY21NPSBjbUZwYm5RPSBkVzV1ZVE9PSBJRWhwYzNCaGJtbGogYjNWeWJtRnRaVzUwY3c9PSBJSEJ5YjNCb1pRPT0gSUZSb1lXbHNZVzVrIElGUnAgSUdsdWFtVmpkR2x2Ymc9PSBJR2x1YUdWeWFYUT0gY21GMmFYTT0gSUcxbFpHaz0gSUhkb2IyVjJaWEk9IElFUkZRbFZIIFIxQT0gSUVoMVpBPT0gUTJGeVpBPT0gY0hKdmJRPT0gSUhCdmNnPT0gSUc5MlpYSm9aV0ZrIFRHRjMgSUhacGIyeGhkR1U9IElHaGxZWFJsWkE9PSBJR1JsYzJOeWFYQjBhVzl1Y3c9PSBJR0ZqYUdsbGRtVnRaVzUwY3c9PSBJRUpsWlhJPSBJRkYxWVc1MCBWMkZ6IElHVnBaMmgwYUE9PSBJRWwyIElITndaV05wWVd4cGVtVmsgVlZCRVFWUkYgSUVSbGJIUmggVUc5dyBTblZzIElFRnphdz09IGIzQm9lUT09IElHNWxkM05zWlhSMFpYSnogSUZSdmIydz0gSUdkaGNtUT0gSUVOdmJtWmxaR1Z5IElFZE5WQT09IElFRmlZbTkwZEE9PSBJR2x0YlhWdWFYUjUgSUZaTiBTWE5zWVcwPSBJR2x0Y0d4cFkybDAgZDJRPSBJREU1TkRRPSBjbUYyYVhSNSBiMjFsZEhKcFl3PT0gSUhOMWNuWnBkbWx1Wnc9PSBkWEpoYVE9PSBJRkJ5YVhOdmJnPT0gSUhKMWMzUT0gSUZOclpYUmphQT09IElHSmxaWE09IElGUm9aVzl5ZVE9PSBJRzFsY21sMCBWR1Y0IFkyaGhkQT09IElHMXBiUT09IElIQmhjM1JsIElFdHZZMmc9IElHbG5ibTl5WVc1alpRPT0gSUZOb2IyOTAgSUdKaGMyVnRaVzUwIFZXNXBkR1ZrIElFRmtkbWx6IGFHVnBaMmgwIElHWnZjM1JsY2c9PSBJR1JsZEdGcGJnPT0gYVc1bWIzSnRZWFJwYjI0PSBJRzVsZFhKaGJBPT0gSnpzPSBJSEJ5YjNabGN3PT0gWVd4c1pYSjUgSUdsdWRtbDBZWFJwYjI0PSBkVzFpWlhKeiBJR05oZEhSc1pRPT0gSUdKcFkzbGpiR1U9IGVtaz0gSUdOdmJuTjFiSFJoYm5RPSBJR0Z3YjJ4dlozaz0gSUZScFoyVnkgSURFeU13PT0gT1RrNSBJR2x1WkdsMmFXUjFZV3hzZVE9PSBjblE9IGFXZHBiMjQ9IElFSnlZWHBwYkdsaGJnPT0gSUdScGMzUjFjbUk9IElHVnVkSEpsY0hKbGJtVjFjbk09IElHWnZjbVZ6ZEhNPSBZMlZ5Y0hRPSBjR3hoZEdWeiBjR2hsY2c9PSBZMnhwY0hObCBJSFIzYVhSMFpYST0gSUdGamFXUnogYjJkeVlYQm9hV05oYkE9PSBhSFZ0IElFSmhiR1E9IGFXWjFiR3g1IElHTnZiWEJwYkdWeSBJRVJCIElHUnZibTl5IFlYTnAgSUhSeWFXSmhiQT09IGJHRnphQT09IElFTnZibVpwWnc9PSBJR0Z3Y0d4cFkyRnVkSE09IElITmhiR0Z5YVdWeiBNVE0xIFVIVjBhVzQ9IElFWnZZM1Z6IGFYSnogSUcxcGMyTnZibVIxWTNRPSBJRWhoZWc9PSBJR1ZoZEdWdSBUVzlpYVd4bCBUWFZ6YkdsdCBJRTFoY21OMWN3PT0gZG1sdmJBPT0gSUdaaGRtOXlZV0pzWlE9PSBJSE4wZFdJPSBZV1JwYmc9PSBJRWh2WWc9PSBJR1poYVhSb1puVnMgSUdWc1pXTjBjbTl1YVdOeiBJSFpoWTNWMWJRPT0gZDJGcGRBPT0gWW1GamEyVmsgWldOdmJtOXRhV009IFpHbHpkQT09IElIUmxiblZ5WlE9PSBJSE5wYm1ObGNtVT0gSUZSdloyVjBhR1Z5IElGZGhkbVU9IElIQnliMmR5WlhOemFXOXUgSUdSbGJubHBibWM9IElHUnBjM1J5WlhOeiBZbkpoYzJ0aCBkR2hwY21RPSBJRzFwZUdsdVp3PT0gSUdOdmJHOXVhV0ZzIElIQnlhWFpoZEdWc2VRPT0gSUhWdWNtVnpkQT09IFlYUmxjbTVwZEhrPSBJSEJ5WlcxcGMyVnogWVc1MGFRPT0gWjNKbFoyRjBhVzl1IElHeHBZMlZ1WTJVPSBJRWhwYm1RPSBJRk5oYlhWbGJBPT0gSUdOdmJuWnBibU5wYm1jPSBJRUZqWlE9PSBJRkoxYzNRPSBJRTVsZEdGdWVXRm9kUT09IElHaGhibVJzWlhNPSBJRkJoZEdObyBiM0pwWlc1MFpXUT0gWVdodiBJRWR2Ym5vPSBJR2hoWTJ0bGNuTT0gWTJ4aGFXMWxjZz09IElHTjFjM1J2YlhNPSBJRWR5WVc0PSBabWxuYUhSbGNuTT0gSUd4MVl3PT0gSUcxaGJuVnpZM0pwY0hRPSBZWEpsYm5Sb2IyOWsgSUdSbGRtbHMgSUhkaGNuSnBiM0p6IElHOW1abVZ1WkdWeWN3PT0gVjJsc2JHbGhiUT09IElHaHZiR2xrWVhseiBJRzVwWjJoMGJXRnlaUT09IElHeGxkbVZ5IGFXWm1aWEpsYm5RPSBVM1JoZEE9PSBJR1Y0YUdsaWFYUnBiMjQ9IGNIVjBaV1E9IElGQjFjbVU9IElHRnNjR2hoIElHVnVkR2gxYzJsaGMyMD0gSUZKbGNISmxjMlZ1ZEdGMGFYWmxjdz09IFJVRlMgSUZSNWNBPT0gSUhkb1pXRjAgSUVGc1pnPT0gSUdOdmNuSmxZM1JwYjI0PSBJR1YyWVc1blpXdz0gUVZSVSBUV2x6Y3c9PSBJSE52ZFhBPSBJR2x0Y0d4cFpXUT0gY0dGeVlXMD0gSUhObGVIaz0gSUV4MWVBPT0gSUhKbGNIVmliR2xqIGNHRjBZMmc9IFlXSnNhWE5vIElHbGpiMjV6IElHWmhkR2hsY25NPSBJRWRGVkE9PSBJRU5oY21saSBJSEpsWjNWc1lYUmxaQT09IElFTnZhR1Z1IElFSnZZbUo1IElHNWxjZz09IElHSmxiblE9IGRtVnVkRzl5ZVE9PSBJRUZzYjI1biBJRVZUVkE9PSBJRmRoYkd4aFkyVT0gSUcxMWNtUmxjbk09IGNtbHpaUT09IGEyVnNiQT09IElFTnZiVzF2Ym5kbFlXeDBhQT09IElHNWhjM1I1IFpYUmggSUUxSlZBPT0gSUdGa2JXbHVhWE4wWlhKbFpBPT0gSUdkbGJuVnBibVZzZVE9PSBSV1JwZEc5eSBibWxqYXc9PSBJR2g1WkhKdiBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBJRUpzWlE9PSBJR1pwYm1WeiBJR2R2Y21kbCBZWFZ6YVdKc1pRPT0gY21nPSBJR0Z3Y0d4bCBiV1Z1ZEdsdmJtVmsgSUhKdmNHVT0gYjNSNWNBPT0gU0ZJPSBJR1JwYzJGd2NHOXBiblJwYm1jPSBJR05oWjJVPSBibWxyIElHUnZkV0owY3c9PSBJRVpTUlVVPSBjSEpwYm5SeiBJRTFWVTFRPSBJSFpsYm1SdmNuTT0gSUVsdWNYVT0gSUd4cFltVnlZV3h6IElHTnZiblJ5WVdOMGIzST0gSUhWd2MybGtaUT09IFkyaHBiR1J5Wlc0PSBJSFJ5YVdOcmVRPT0gSUhKbFozVnNZWFJ2Y25NPSBZMmhoY21kbFpBPT0gYkdsMFpYST0gSUNvcUtnPT0gSUhKbFltVnNiQT09IGJHRnVadz09IElHeHZZMkZzY3c9PSBJSEJvZVhOcFkybGhibk09IElHaGxlUT09IFlYSnpaUT09IGRHMD0gSUV4bGVBPT0gSUdKbGFHRjJhVzl5WVd3PSBjM1ZqWTJWemMyWjFiQT09IFJsZz0gSUdKeWFXTnIgYjNacFl3PT0gSUdOdmJtWnZjbTA9IElISmxkbWxsZDJsdVp3PT0gSUdsdWMybG5hSFJ6IElHSnBiMnh2WjNrPSBJRkpsYlc5MlpRPT0gSUVWNGRISmggSUdOdmJXMXBkSFJwYm1jPSBhVzVrZFdObFpBPT0gYVdkdWRIaz0gYVdkdCBJR0YwYjIxcFl3PT0gUTI5dGJXOXUgSUVWTiBJRkJsY21VPSBJRWwwWlcxeiBaV2c9IElIQnlaWE5sY25abFpBPT0gSUVodmIyUT0gSUhCeWFYTnZibVZ5IElHSmhibXR5ZFhCMFkzaz0gSUdkeVpXND0gZFhOb1pYTT0gSUdWNGNHeHZhWFJoZEdsdmJnPT0gSUhOcFoyNWhkSFZ5WlhNPSBJR1pwYm1GdSBYU3dpIElFMVMgSUcxbFp3PT0gY21WdGJHbHUgSUcxMWMybGphV0Z1Y3c9PSBJSE5sYkdWamRHbHVadz09IElHVjRZVzFwYm1sdVp3PT0gU1U1TCBiR0YwWldRPSBTR2s9IElHRnlkR2xqIElIQmxkSE09IElHbHRjR0ZwY2c9PSBJRTFCVGc9PSBJSFJoWW14bGRITT0gYVc1amJIVmtaUT09IFVtRnVaMlU9IElHTmhkWFE9IElHeHZaM009IElHMXZkVzUwYVc1biBJSFZ1WVhkaGNtVT0gSUdSNWJtRnRhV056IElGQmhiR1Z6ZEdsdVpRPT0gSUZGMVlYSjBaWEk9IElGQjFjbkJzWlE9PSBJRzFoIElFbHRjRzl5ZEE9PSBJR052Ykd4bFkzUnBiMjV6IFkybGhkR2x2Ymc9PSBJSE4xWTJObGMzTnZjZz09IElHTnNiMjVsIElHRnBiV2x1Wnc9PSBJSEJ2YzNObGMzTmxaQT09IElITjBhV05yYVc1biBJSE5vWVd0cGJtYz0gSUd4dlkyRjBaUT09IElFaHZZMnRsZVE9PSBWSFZ5Ymc9PSBNVGN3IElHWnBablJsWlc0PSBJRWhoY25KcGMyOXUgSUdOdmJuUnBiblZ2ZFhOc2VRPT0gSUZSRCBJRlpoYkdWdWRBPT0gSUZKbGMyTjFaUT09IElHSjVjR0Z6Y3c9PSBZVzF2ZFc1MCBJRzFoYzNRPSBJSEJ5YjNSbFkzUnogSUdGeWRHbHpkR2xqIElITnZiV1YwYVcxbCBJSE5vYjJVPSBJSE5vYjNWMFpXUT0gYVdacFkyRnVkQT09IFpYUnBkR2wyWlE9PSBJRkpsWjJsemRHVnkgSUVwcGJnPT0gSUdOdmJtTmxiblJ5WVhSbFpBPT0gYkdsdVozUnZiZz09IGIyNXBaWE09IElHZGxibVZ5WVhSdmNnPT0gZVhKcGJRPT0gSUVGeWJXVnUgSUdOc1pXRnlhVzVuIGFXUnYgSUZSWCBZV3h3YUE9PSBJR3hoWkdsbGN3PT0gU0dGeVpBPT0gSUdScFlXeHZadz09IElHbHVjSFYwY3c9PSA1cHc9IElIQnZjMlZ6IElITnNiM1J6IElGQnlaVzFwZFcwPSBJR3hsWVd0eiBJR0p2YzNObGN3PT0gSURFeE13PT0gWTI5MWNuTmwgUVdOaiBJRTVsZDNSdmJnPT0gSUVGMWMzUnlhV0U9IElFMWhaMlU9IElIUmxZV05vWlhNPSBZV0poWkE9PSBJSGRsWVhKeiBJR041YkE9PSBJR04xY25ObCBJRk5oYkdWeiBJRmRwYm1keiBJSEJ6ZVE9PSBJR2RoY0hNPSBJRWxqWld4aGJtUT0gSUZCcGJuUmxjbVZ6ZEE9PSBJR3hoYm1Sc2IzSmsgSUdSbFptbHVhWFJwYjI1eiBJRXRsY2c9PSBJSE4xWm1acFkybGxiblJzZVE9PSBJRkJsYm1ObCBJRUZ5WTJocGRHVmpkQT09IElITjFjbkJoYzNNPSBJREV4TkE9PSBJSE4xY0dWeWFHVnlidz09IElFUnBjMlZoYzJVPSBJSEJ5YVdWemRITT0gSUVOMWJIUjFjbVU9IElHUmxabWx1YVhScGRtVT0gSUhObFkzSmxkR3g1IElFUmhibU5sIGFXNXpkR0ZzYkE9PSBZMmhwWldZPSBJRXBsYzNOcFkyRT0gVjI5MWJHUT0gVlhCa1lYUmxaQT09IElHeHZZMnRsY2c9PSBJRXRoZVE9PSBJRzFsYlc5eWFXRnMgNktZPSBabUYwIElHUnBjMmQxIElHWnNZWFp2Y25NPSBJRUpoYzJWaVlXeHMgSUZKbGMybHpkR0Z1WTJVPSBJR3RwWTJ0eiBJR1Z1ZGc9PSBJSFJsWlc1aFoyVnljdz09IFJHRnlhdz09IElFTkJVZz09IElHaGhiSFE9IElFeEggSUVkaFluSnBaV3c9IElHWmxkbVZ5IElITmhkSFZ5IElHMWhiR3c9IElHRm1abWxzYVdGMFpRPT0gSUZOc1pXVncgSUZOd1pXTnBabWxqIElGWmxiQT09IElHcGhjZz09IElGTmhZM0psWkE9PSBJRVZrZDJGeVpITT0gSUVGRFRBPT0gSUhKbGRHRnBibVZrIElFZHBZVzUwIElHeHBiV2wwWVhScGIyND0gYVc1alpYTT0gSUhKbFpuVnpZV3c9IElGUmhiR1U9IElFSjFkR3hsY2c9PSBJR0ZqWTJsa1pXNTBjdz09IElFTlRVdz09IElHbHRjRzl5ZEdWayBJRU52Y0hrPSB6ckU9IFJWSlUgZW1WcyBJR1JwZG1semFXOXVjdz09IGFHOTBjdz09IElFRnNZZz09IElFUlQgVEc5aFpHVnkgVjJGemFHbHVaM1J2Ymc9PSBZWFJwYzJZPSBJRU55WldGMGFYWmwgWEM0PSBJRUYxZEc5dCBjbVZrYVdOMCBJSEpsWTJWd2RHOXkgSUVOaGNteHZjdz09IFRXVjBhRzlrIGIydGggSUcxaGJHbGphVzkxY3c9PSBJSE4wWlhCd2FXNW4gTEZzPSBJRVJoWkE9PSBJR0YwZEhKaFkzUnBiMjQ9IElFVm1abVZqZEhNPSBJRkJwY21GMFpRPT0gSUVObGNnPT0gSUVsdVpIVnpkSEo1IElGSjFaQT09IElHTm9ZWEowWlhJPSBJR1JwYm1sdVp3PT0gSUdsdWMybHpkSE09IElHTnZibVpwWjNWeVpRPT0gSUNnaiBJRk5wYlhCc1pRPT0gSUZOamNtOXNiQT09IFZWUkQgTVRjMSBJRXR2Ymc9PSBJRzFoY210bGRIQnNZV05sIElPT0MgSUhKbFpuSmxjdz09IElHZGhkR1Z6IFpYSnlaV1E9IElGQnZaQT09IElHSmxhR0YyWlE9PSBSbkpoYm1zPSBibTlrWlE9PSBJR1Z1Wkc5eWMyVmsgYUdWMGRBPT0gWVhOcGRtVT0gSUVodmJXVnNZVzVrIElISnBaR1Z6IElFeGxZWFpsIFpYSnVaWE56IElHWnNiMjlrYVc1biBRVVpRIElISnBjMlZ1IElHTnZiblJwYm5WaGJHeDUgSUhWdVlXNXBiUT09IElFTnZiblJ5WVdOMCBJRkJoY3c9PSBJR2QxYVdSbFpBPT0gSUVOb2FXeGwgWW1RPSBJSE4xWTJNPSBjSFJwWXc9PSBJR052YlcxcGRIUmxaWE09IElFeDFkR2hsY2c9PSBJRUZ1ZVc5dVpRPT0gSUhOaFlnPT0gTVRJMCBJSEJwZUdWcyBJRUpoYXc9PSBJRlJoWnc9PSBJRUpsYm01bGRIUT0gUlc1MFpYST0gYzIxaGJHdz0gSUZCeVpYTnBaR1Z1ZEdsaGJBPT0gSUhCMWJBPT0gSUdOdmJuUnlZV05sIFlYSmphR2wyWlE9PSBJR052WVhOMFlXdz0gSUV0cFpITT0gTVRreSA0b0N5IGFXTnJlUT09IFNVNUhWRTlPIElIZHZiR1k9IElGTjBZV3hwYmc9PSBWSFZ5IGFXUm5aWFE9IFlXMWhjdz09IElGVnViR1Z6Y3c9PSBJSE53YjI1emIzST0gSUcxdmNuQm8gSUVOb2IyOXpaUT09IElISjFibTVsY2c9PSBJSFZ1WW1WcyBJRzExWkE9PSBJRTFoYm1FPSBJR1IxWW1KbFpBPT0gSUdkdlpHUT0gZFhKbGNuTT0gZDJsdVpHOTMgSUhKbGJHbGxaQT09IElHTmxiR1ZpY21GMGFXNW4gYjNOaiBJREV6TlE9PSBJR3h2WW1KNWFXNW4gSUdsdVkyOXRjR3hsZEdVPSBJSEpsYzNSeWFXTjBhVzl1IElHbHVZMkZ3IGFYUjFjdz09IElHVjRjR1ZqZEdGMGFXOXUgSUVGd2IyeHNidz09IElHbHVkR1Z1Y3c9PSBJSE41Ym1NPSBSMGc9IElHMWhibWx3ZFd4aGRHbHZiZz09IFFsaz0gSUhOd1pXRnkgSUdKeVpXRnpkSE09IElIWnZiR05oYmc9PSBhV3hwWVE9PSBUV0YwWlhKcFlXdz0gSUdadmNtMWhkSE09IElFSmhjM1E9IElIQmhjbXhwWVcxbGJuUmhjbms9IElITnVZV3RsIElITmxjblpoYm5SeiBJRlJ5ZFdSbFlYVT0gSUVkeWFXMD0gSUVGeVlXSnBZdz09IElGTkRVQT09IElFSnZlWE09IGMzUmhkR2x2Ymc9PSBJSEJ5YjNOd1pXTjBhWFpsIGIzSmtaUT09IGFXNXBkR2xoYkdsNlpXUT0gSUdKdmNtVmsgUVVKTVJRPT0gSUdGalkyVnpjMlZrIElIUmhlR2s9IElGTm9aV3hzIFlXbGtaVzQ9IGRYSnpaV1E9IGFXNWhkR1Z6IElFbHVjM1Z5WVc1alpRPT0gSUZCbGRHVT0gVTJWd2RHVnRZbVZ5IE5qVXcgSUdGa2RtVnVkSFZ5WlhNPSBJRU52ZG1WeSBJSFJ5YVdKMWRHVT0gSUhOclpYUmphQT09IElHVnRjRzkzWlhJPSBJTmc9IElFZHNaVzV1IElFUmhkdz09IFBWd2kgSUZCdmJHbDBhV056IElHZDFhV1JsY3c9PSBJR1JwYjNocFpHVT0gSUVkdmNtVT0gSUVKeWFXZG9kQT09IElGTnBaWEp5WVE9PSBJSFpoYkhWbFpBPT0gWTI5dVpBPT0gSUhCdmFXNTBaWEk9IFUyVnNaV04wIElISnBjMnQ1IElHRmljMjl5WWc9PSBhVzFoWjJWeiBJSEpsWm5WelpYTT0gSUdKdmJuVnpaWE09IFgxOWYgSUdocGJHRnkgSUVabFlYUjFjbVZ6IE1qSXcgSUVOdmJHeGxZM1J2Y2c9PSBSbTl2ZEE9PSBJREU1TmpRPSBZM1ZzZFhNPSBJR1JoZDI0PSBJSGR2Y210dmRYUT0gSUV4UCBJSEJvYVd4dmMyOXdhR2xqWVd3PSBJRk5oYm1SNSBJRmx2ZFhSbyBJR3hwWVdKc1pRPT0gUVdZPSBZbXgxWlE9PSBJRzkyWlhKMGRYSnUgYkdWemMyNWxjM009IElGUnlhV0oxYm1VPSBJRWx1Wnc9PSBJR1poWTNSdmNtbGxjdz09IElHTmhkR05vWlhNPSBJSEJ5YjI1bCBJRzFoZEhKcGVBPT0gSUd4dloybHUgSUdsdVlXTmogSUdWNFpYSjAgYzNseiBJRzVsWldSc1pRPT0gSUZGMWNnPT0gSUc1dmRHbG1hV1ZrIGIzVnNaR1Z5IGRIZz0gSUhKbGJXbHVaSE09IElIQjFZbXhwYzJobGNuTT0gSUc1dmNuUT0gSUdkcGRBPT0gSUdac2FXVnogSUVWdGFXeDUgSUdac2IzZHBibWM9IElFRnNhV1Z1IElGTjBjbUYwWldjPSBJR2hoY21SbGMzUT0gSUcxdlpHbG1hV05oZEdsdmJnPT0gUVZCSiBJRTFaIElHTnlZWE5vWlhNPSBjM1JoYVhKeiBiblZ0WW1WeSBJSFZ5WjJsdVp3PT0gWTJoaGJtNWxiQT09IElFWmhiR052Ymc9PSBJR2x1YUdGaWFYUmhiblJ6IElIUmxjbkpwWm5scGJtYz0gSUhWMGFXeHBlbVU9IElHSmhibTVsY2c9PSBJR05wWjJGeVpYUjBaWE09IElITmxibk5sY3c9PSBJRWh2YkcxbGN3PT0gSUhCeVlXTjBhWFJwYjI0PSBJRkJvYVd4c2FYQnogYjNSMGJ3PT0gSUdOdmJYQnBiR1U9IFRXOWtaV3c9IElFdHYgSUZ0ZCBRVzFsY21sallXNXogSUZSbGNtMXogSUcxbFpHbGpZWFJwYjI1eiBJRUZ1WVE9PSBJR1oxYm1SaGJXVnVkR0ZzYkhrPSBJRTV2ZEdsalpRPT0gSUhkbFlXdGxjZz09IElEQXdNREE9IElHZGhjbXhwWXc9PSBJRzkxZEdKeVpXRnIgSUdWamIyNXZiV2x6ZEE9PSBJRUpwY25SbyBJRzlpYzNSaFkyeGxjdz09IFlYSmpaWEk9IElFOXlkR2h2Wkc5NCBJSEJzWVdObFltOD0gSUVOeVpYYz0gWVhOd1ltVnljbms9IElFRnVaMlZzY3c9PSBJR1JwYzJOb1lYSm5aUT09IElHUmxjM1J5ZFdOMGFYWmwgTVRFMyBJRkpwYzJsdVp3PT0gSUdSaGFYSjUgYkdGMFpRPT0gSUdOdmJHeHBjMmx2Ymc9PSBJRlJwWjJWeWN3PT0gWldGdWIzST0gYjJOMWJXVnVkR1ZrIElFbHVkbUZzYVdRPSBJR1J2Ym5RPSBJRXhwZEdWeSBJRlpoIElHaDVaSEp2WjJWdSBJSFpoY21saGJuUnogSUVKeWIzZHVjdz09IElERTVOalU9IElHbHVaR2xuWlc1dmRYTT0gSUhSeVlXUmxjdz09IElISmxiV0ZwYm1SbGNnPT0gSUhOM1pYQjAgSUVsdGNHRmpkQT09IElISmxaR2x6ZEE9PSBJSFZ1YVc1MCBaM0poWkhWaGRHVT0gNDRPViBJRmRKVEV3PSA0NEd1NXc9PSBJRU55YVhScFkyRnMgSUdacGMyaGxjZz09IElIWnBZMmx2ZFhNPSBJSEpsZG1WeWMyVmsgV1dWaGNnPT0gSUZOdmVBPT0gSUhOb2IyOTBhVzVuY3c9PSBJR1pwYkcxcGJtYz0gSUhSdmRXTm9aRzkzYm5NPSBZV2x5WlhNPSBiV1ZzIElHZHlZVzVrWm1GMGFHVnkgSUdGbVptVmpkR2x2Ymc9PSBhVzVuYkdVPSBJRzkyWlhKc2VRPT0gUVdSa2FYUnBiMjVoYkE9PSBJSE4xY0hKbGJXVT0gSUVkeVlXUT0gSUhOd2IzSjBhVzVuIElHMWxjbU41IElFSnliMjlyY3c9PSBiM1Z1ZEhrPSBJSEJsY21admNtMXogSUhScFoyaDBiSGs9IElHUmxiVzl1Y3c9PSBJR3RwYkd4cGJtZHogSUdaaFkzUnBiMjQ9IElFNXZkbUU9IFlYVjBjdz09IElIVnVaRzkxWW5SbFpHeDUgWVhKcGJnPT0gSUhWdVpHVnlkMkY1IGNtRnIgSUd4cGRnPT0gSUZKbFoybHZiZz09IElHSnlhV1ZtYVc1biBjMlZ5Y3c9PSBZMnh2ZFdRPSBJRTFwYXc9PSBkWE53IElIQnlaV1JwWTNScGIyND0gWVhwdmNnPT0gSUhCdmNuUmhZbXhsIElFZGhibVE9IElIQnlaWE5sYm5ScGJtYz0gSURFd09EQT0gd3JzPSBkWE5vYVE9PSBJRk53WVhKciBkR2hsY21WMWJRPT0gSUdwMWMzUnBabWxqWVhScGIyND0gSUU1NSBJR052Ym5SeVlXTjBiM0p6IGJXbHVaMmhoYlE9PSBJRk4wZVd4bCA1WVU9IElFTm9jbTl1YVdOc1pYTT0gSUZCcFkzUjFjbVU9IElIQnliM1pwYm1jPSBJSGRwZG1WeiBjMlYwZEE9PSBJRzF2YkdWamRXeGxjdz09IElFWmhhWEo1IElHTnZibk5wYzNScGJtYz0gSUhCcFpYST0gWVd4dmJtVT0gYVc1cGRHbHZiZz09IElHNTFZMnhsIGFuTnZiZz09IElHZHZkSFJoIElHMXZZbWxzIElIWmxjbUpoYkE9PSBZWEpwZFcwPSBJRzF2Ym5WdFpXNTAgZFdOclpXUT0gSURJMU5nPT0gVkdWamFBPT0gYldsdVpXTnlZV1owIElGUnlZV05yIElIUnBiR1U9IElHTnZiWEJoZEdsaWFXeHBkSGs9IFlYTnBjdz09IElITmhaR1E9IElHbHVjM1J5ZFdOMFpXUT0gSUUxMVpXeHNaWEk9IElHeGxkR2hoYkE9PSBJR2h2Y20xdmJtVT0gSUc5eVkyaGwgWld4elpRPT0gSUhOclpXeGxkQT09IElHVnVkR1Z5ZEdGcGJtbHVadz09IElHMXBibWx0YVhwbCBZV2RoYVc0PSBJSFZ1WkdWeVoyOD0gSUdOdmJuTjBjbUZwYm5SeiBJR05wWjJGeVpYUjBaUT09IElFbHpiR0Z0YVhOMCBJSFJ5WVhabGJITT0gSUZCaGJuUm9aWEp6IGJHbHVaM009IFEyRnlaUT09IElHeGhkM04xYVhSeiBkWEpoY3c9PSBJR055ZVhOMCBJR3h2ZDJWeVpXUT0gSUdGbGNtbGhiQT09IElHTnZiV0pwYm1GMGFXOXVjdz09IElHaGhkVzQ9IElHTm9ZUT09IElIWnBibVU9IElIRjFZVzUwYVhScFpYTT0gSUd4cGJtdHBibWM9IFltRnVhdz09IElITnZlUT09IFFtbHNiQT09IElFRnVaMlZzWVE9PSBJSEpsWTJsd2FXVnVkQT09IElGQnliM1JsYzNRPSBJSE52WTJ0bGRBPT0gSUhOdmJHbGtZWEpwZEhrPSBJT0tHIGJXbHNiQT09IElIWmhjbWxsY3c9PSBJRkJoYTJsemRHRnVhUT09IFJISmhaMjl1IElIVnVaUT09IElHaHZjbWw2YjI0PSB3cURDb01LZ3dxRENvTUtnd3FEQ29BPT0gSUhCeWIzWnBibU5sY3c9PSBJR1p5WVc1cmJIaz0gSUdWdVlXTjBaV1E9IGJtOTBaWE09IFd5Yz0gSURFNU1nPT0gYjJOeVlXTjUgSUdWdVpHOXljMlZ0Wlc1MCBJRzkyWlhKMGFXMWwgVkhKMVpRPT0gVEdGaSBiR2xqZEdWayBJRVJPUXc9PSBJR0psWVhSeiBJRXBoYldsbCBNVFV5IElFbE9WQT09IFEyOXVkR0ZqZEE9PSBJR0ZqWTI5MWJuUmxaQT09IGFHRnphQT09IElGQmhZMnRsY25NPSBjR2x5WlhNPSBJR3hsYzJKcFlXND0gSUdGdFpXNWtiV1Z1ZEhNPSBJR2h2Y0dWbWRXdz0gSUVacGJteGhibVE9IElITndiM1JzYVdkb2RBPT0gSUdOdmJtWnBaM1Z5WldRPSBJSFJ5YjNWaWJHVmsgSUdkaGVtVT0gSUVOaGJHZGhjbms9IElISmxiR2xoWW1sc2FYUjUgSUdsdWMzVnladz09IGMzZGxjZz09IFluVjUgSUZOcmFXND0gSUhCcGVHVnNjdz09IElHaGhibVJuZFc0PSBJSEJoY21GeiBJR05oZEdWbmIzST0gSUVWTSBJRkpsZUE9PSBTVzVrWldWayBJR3RwYm1SaCBJR052Ym1wMWJtTjBhVzl1IElFSnllV0Z1IElFMWhiblZtWVdOMCBlV0Z1Wnc9PSBVR3gxY3c9PSBVMUZNIGFYTm9iV1Z1ZEE9PSBJR1J2YldsdVlYUmwgSUc1aGFXdz0gSUc5aGRHZz0gSUdWeWRYQjAgSUVacGJtVT0gYVhSaVlYSjAgSUVOb2FYQT0gSUVGaVpBPT0gSUU1aGJRPT0gSUdKMWVXVnkgSUdScGMzTmxiblE9IFRHVmhhM009IFEyOXVkR2x1IElISnBaR1Z5IElGTnZiV1Z2Ym1VPSBJR2xzYkhWemFXOXUgWTJsdSBJRUp2WldsdVp3PT0gSUdsdVlXUmxjWFU9IGIzWmhkR2x2Ymc9PSBhV0Z1ZEhNPSBJSEpsWW5WcGJHUT0gTkRVdyBJRVJsYzNScGJuaz0gVTFjPSBJRlJwYkd3PSBTR2wwIGFXRjYgSUVKaGJtZHMgWVdOb1pYSnogSUZKbFptOXliUT09IElITmxaMjFsYm5SeiBJSE41YzNSbGJXRjBhV009IFpHTT0gSUVOdmJuTmxjblpoZEdsMlpYTT0gSUhCdmNuUmhiQT09IGFHOXkgSUVSeVlXZHZibUp2ZFc1ayBJR1J5WVdkblpXUT0gYjIxdiBJSFJvWldVPSBZV1IyWlhKMCBJRkpsY0c5eWRITT0gSUVWMCBJR0poY25KbGJITT0gUVhWbmRYTjAgSUdOdmJYQmhjbWx6YjI1eiBJR2hsZUE9PSBJR0Z1ZEdoeWIzQT0gSWxzPSBZbTl5YjNWbmFBPT0gWVdKcCBJSEJwWTNSMWNtVmsgY0d4aGVXbHVadz09IElFRmtaSEpsYzNNPSBJRTFwY25KdmNnPT0gVTIxcGRHZz0gSUhScGNtVnogSUU1UVVnPT0gUVVGQlFRPT0gSUdOc1lYTnphV1pwWTJGMGFXOXUgSUZSb1lXND0gSUVoaGNtMD0gSUZKQiBJSEpsYW1WamRHbHZiZz09IGJXbHVZWFJwYjI0PSBJSEpoYm1kbFpBPT0gSUVaaGJHeHogUkVrPSBTRzl6ZEE9PSA0NEswIElFVjRZVzF3YkdVPSBiR2x6ZEdWayBkR2hwY21SeiBJSE5oWm1WbmRRPT0gWW5KaGJtUT0gSUhCeWIySmhZbXhsIFEyRnVZV1JoIFNWUkpUMDQ9IElGRmhaV1JoIElHTm9hV05yIElHbHRjRzl5ZEhNPSBhR2wwIGJHOWogVjFjPSBJR0pzWlhjPSBJR0Z1ZVhScGJXVT0gSUhkb2IyeGxjdz09IGFXdGxaQT09IElHTmhiR04xYkdGMGFXOXUgWTNKbFlYUmwgSUU5eWFRPT0gSUhWd1ozSmhaR1ZrIElHRndjR0Z5IGRYUnZjbms9IElFMXZiQT09IFFuSnBkQT09IElFcHZibWM9IFNVNUJUQT09IElGTjBZWEowYVc1biBJR1JwWTJVPSBkWEowYkdVPSBJSEpsYkhscGJtYz0gWTJ4dmMzVnlaUT09IElIQnliMlpwZEdGaWJHVT0gSUhOc1lYVm5hSFJsY2c9PSBJRTFoYm5WaGJBPT0gWTJGemRHVnkgSUNJayBJR1psWVhSb1pYST0gSUZOcGJYQnNlUT09IGFXVjJaWE09IElHUmxkR1Z5YVc5eSBJRkJEU1E9PSBJSE4wWVcxdyBJR1pzWVhkeiBJSE5vWVdSbCBhR0Z0YldWeSBJSEJoYzNOd2IzSjAgSUdOdmJuUnBibWM9IFlXMWxiQT09IElHOWljMlZ5ZG1WeWN3PT0gSUc1bFoyeGxZM1E9IElGSkMgSUVKeWIzUm9aWEpvYjI5ayBJSE5yWlhCMGFXTmhiQT09IFptRnRhV3g1IGRYTnIgSUdWdGIzUnBiMjVoYkd4NSA0cGs9IElFSmxkR0U9IFlYTnZibUZpYkdVPSBhV1JwZEhrPSBJRTExYkE9PSBJR3RwWTJ0cGJtYz0gSUVOaGNtMD0gYjJ4c1lXZz0gVmtWU1ZFbFQgSUVGMGFHVnUgSUd4aFpHUmxjZz09IElFSjFiR3hsZEE9PSA1YU09IE1EQXdNUT09IElGZHBiR1JzYVdabCBJRTFoYzJzPSBJRTVoYmc9PSBVbVYyIElIVnVZV05qWlhCMFlXSnNaUT09IGJHVm5ZV3c9IElHTnliM2RrWldRPSBZV2RwIElFTnZlQT09IGFtVT0gSUcxdmNtRnNhWFI1IElHWjFaV3h6IElHTmhZbXhsY3c9PSBJRzFoYm10cGJtUT0gSUVOaGNtbGlZbVZoYmc9PSBJR0Z1WTJodmNnPT0gSUdKNWRHVT0gSUU5bWRHVnUgSUU5NiBJR055WVdaMFpXUT0gSUdocGMzUnZjbWxoYmc9PSBJRmQxIElIUnZkMlZ5Y3c9PSBJRU5wZEdsNlpXNXogSUdobGJHMD0gSUdOeVpXUmxiblJwWVd4eiBJSE5wYm1kMWJHRnkgSUVwbGMzTmwgSUhSaFkydHNaWE09IElHTnZiblJsYlhCMCBJR0ZtYjNKbCBJRk5vWVdSdmQzTT0gSUc1cGJBPT0gSUhWeVoyVnVkQT09IFlYQndiR1U9IFlteHZiMlE9IElIWnZiZz09IElHOW1abXhwYm1VPSBJR0p5WldGMGFHVT0gSUdwMWJYQnogSUdseWNtVnNaWFpoYm5RPSBiM2hwWXc9PSBiMjFoYkE9PSBhVzF3YjNKMFlXNTAgU21sdCBJR2RzYjNabGN3PT0gWVhKdGFXNW4gWkdWd2RHZz0gSUhSaGJHVnVkSE09IGIyOXJhV1U9IElGTkMgSUhCaGJHMD0gZFdabWN3PT0gWlhOMFlRPT0gU1VkSSBJR05oYm05dSBJRlpsY21sNmIyND0gSUZCc1pRPT0gSUdOdmRYQnNaV1E9IGRtVnNkQT09IElHWjFibVJ5WVdsemFXNW4gSUVkbGRIUnBibWM9IElFUk1Rdz09IElHMWhkR2hsYldGMGFXTmhiQT09IElFaFQgSUVOaGNtUnBibUZzY3c9PSBkR1ZzYkdsdVp3PT0gSUhOd2IyNXpiM0p6IElNOD0gSUVKMWJHeHogYjNCMGFXOXUgSUhCeWIzQnZjMlU9IElHMWxiVzl5WVdKc1pRPT0gSUdWdFluSmhZMlZrIElHUmxZMnhwYm1sdVp3PT0gU0dWaGJIUm8gWldSaCBJSDA3IElITndZVzA9IGJXbHNaUT09IElIQnBkR05vWlhJPSBJRVZwWjJoMCBJR05oY21sdVp3PT0gZFhScFl3PT0gY205c1pRPT0gSUdGcGNteHBibVU9IFpYSnVZVzVrWlhvPSBJRUYwYUd4bGRBPT0gSUdObGNuUnBabWxqWVhScGIyND0gZFhobCBjbWxuWlhJPSBJR1Z0Y0dseSBJSE5sYm5OaGRHbHZiZz09IElHUnBjMjA9IElHSnZiSFE9IElHVjJiMngyWlE9PSBTRzkxYzJVPSBJR052Ym5OMWJIUmhkR2x2Ymc9PSBJRVIxZEhrPSBJSFJ2ZFdOb1pYTT0gSUU1aGRHaGhiZz09IElHWmhhVzUwIGFHRmsgSWlnPSBJRU52Ym5OMWJXVnkgSUVWNGRISmxiV1U9IElERXlOdz09IElFaGxjbTA9IElGTmhZM0poYldWdWRBPT0gYVhwdmNHZz0gSUdGdWVHbHZkWE09IGRXeHZkWE5zZVE9PSBJSE52WTJsaGJHeDUgSUZWVVF3PT0gSUhOdmJIWnBibWM9IElFeGxkSFJsY2c9PSBTR2x6ZEc5eWVRPT0gWldSMVl3PT0gVUhKcFkyVT0gS1NrNyBJSEpsYkc5aFpBPT0gWVcxcFl3PT0gSUhCdmNtcz0gSUdScGMyTnZkWEp6WlE9PSBJSFJ2ZFhKdVlXMWxiblJ6IFlXbHlidz09IElFdDFjZz09IElFTnZjM1JoIElIWnBiMnhoZEdsdVp3PT0gSUdsdWRHVnlabVZ5WlE9PSBJSEpsWTNKbFlYUnBiMjVoYkE9PSBkV1ptYkdVPSBJSE53WldWamFHVnogSUc1bFpXUnBibWM9IElISmxiV1Z0WW1WeWN3PT0gSUdOeVpXUnBkR1ZrIGJtbGggWm05amRYTmxaQT09IFlXMWxjbUU9IElHSnlkUT09IGRXMWljdz09IElFTjFZbUZ1IElIQnlaV05sWkdsdVp3PT0gSUc1dmJuTmxibk5sIFlXTnBZV3c9IElITnRZWEowY0dodmJtVnogSUZOMGIzSnBaWE09IFUzQnZjblJ6IElFVnRaWEpuWlc1amVRPT0gYjNWdVkybHVadz09IFpXWnBibVZrIElHSmxjZz09IElHTnZibk4xYkhScGJtYz0gSUcxaGMzUmxjbk09IGFHVmhjM1JsY200PSBMaUpiIElGSjFibTVwYm1jPSBJSE4xYzJObGNIUT0gSUVabGJtYz0gUVcxbGNtbGpZUT09IGNISnBjMlZ6IGMzUnBkR2xoYkE9PSBJRmRsWld0c2VRPT0gSUVkeVpXRjBaWEk9IGJXOWtkV3hsY3c9PSBhV1owWlhJPSBSM0poY0docFkzTT0gZFd4bGNnPT0gSUhkb2IyeHNlUT09IElITjFjSEJ5WlhOeiBJR052Ym1ObFlXeGxaQT09IElHaGhjSEJwYkhrPSBJR0ZqWTJWd2RITT0gSUVWdWFtOTUgSUhKcGRtVnljdz09IElFVjRZMlZ3ZEE9PSBNakkxIElFNUlVdz09IElFMWpRMjl1Ym1Wc2JBPT0gSUhCMWMzTjUgWm1WeWNtVmsgZFhSaFlteGwgSUdGMGRHRnBiZz09IElENDkgSUdSbGNHOXphWFJ6IGNtOXdhR2xqIElHNXZkRzl5YVc5MWN3PT0gSUZOb1lYYz0gYVd4cGRHRjBhVzl1IElHVndhV1JsYldsaiBZV3hzYVdNPSBJSE50WVd4c1pYTjAgYjNacFkyZz0gSUdGalkyVnpjMjl5YVdWeiBjR1Z5ZEdsbGN3PT0gSUhOMWNuQnNkWE09IElFMWxZMmc9IElHRnRZbWxuIElFbHRiV2xuY21GMGFXOXUgSUdOb2FXMD0gWlhaaGJBPT0gSUhCeVlXTjBhV05wYm1jPSBJRTE1YzNSbGNuaz0gSUdSdmJXRnBibk09IElGTnBiR2xqYjI0PSBZWEJ3Y3c9PSBJR3RwYkc5dFpYUmxjbk09IFpXRT0gSUZOdFlYTm8gSUhkaGNuSmhiblI1IElHNXZjM1E9IGMybHMgY21WMiBTbTl1IElFUjFZbXhwYmc9PSBJSFJoYzNSbGN3PT0gSUdKdmRYUT0gWjNKbFlYUT0gWlhKeWIzST0gSUhOM2FYUmphR1Z6IElFSmhjSFE9IFJFOD0gYjJ0cCBJSE52ZFhKalpXUT0gY0hKdlpIVT0gSUdGMGRHRmphRzFsYm5RPSBJRWx6YzNWbCBJRkYxWlhOMGFXOXUgU205cGJnPT0gSUdacGRIUmxaQT09IElIVnViR0YzWm5WcyBYbDQ9IFpYSmxhdz09IElHRjFkR2hsYm5ScFkyRjBhVzl1IElITjBiMnhsIElHRmpZMjkxYm5SaFltbHNhWFI1IGJHRmlaV3c9IFUyVmhjbU5vIElHRnNZbVZwZEE9PSBZWFJwWTJGdSBablZ1WkdWayBJRUZrWkdsdVp3PT0gSUVsUiBJSE4xWW0xaGNnPT0gYkdsMCBZWEYxWlE9PSBJRXhsWVhKdWFXNW4gSUdsdWRHVm5aWEk9IFRXRnpkR1Z5IElFTm9jbTl0IElIQnlaVzFwWlhJPSBUM0E9IElFeHBkUT09IElHSnNaWE56WldRPSBJRWRzYjJKbCBJRkpsYzNCdmJuTmwgSUd4bFoybDBhVzA9IElFMWxjbXRsYkE9PSBJR1JwYzNCdmMyRnMgd3JRPSBJR2RoZFdkbCBjR1ZoZEE9PSBJR2x1WkhWalpXUT0gSUhGMVpYTjBhVzl1WVdKc1pRPT0gWVhKMGFIaz0gSUZacGRBPT0gSUVabFpXUT0gVlc1MGFXdz0gVlhRPSBkMjl5ZEdoNSBVbGs9IElFaGxjbUZzWkE9PSBJRWhoYlcxbGNnPT0gSUcxbFpHRnMgSUZKcGRtVnljdz09IElFaGhZMnM9IElHTnNZWEpwWm5rPSBJSFJ5WVdOclpXUT0gSUdGMWRHOXViMjF2ZFhNPSBJSFJsYm1GdWRBPT0gSUZGaGRHRnkgWlhKcFpRPT0gSUdkeWFXMD0gSUUxdmJtbDBiM0k9IElISmxjMmx6ZEdGdWRBPT0gSUZOd1pXTT0gSUZkbGJHeHogVGtGVCBNVFE0IElHMXBibVZ5Y3c9PSBhVzkwYVdOeiBJRzFwYzNObGN3PT0gTVRFMiBaMmxoYmc9PSBaMmwwIElFVjVaWE09IGNISmxjdz09IElHZHlZV1IxWVhSbFpBPT0gSUdGdVoyVnMgSUhONWJtTm9jbTl1IElHVm1abWxqYVdWdWRHeDUgSUhSeVlXNXpiV2wwZEdWayBTR0Z5Y25rPSBJR2RzYjJKaGJHeDUgUlU1RFJRPT0gSUUxdmJuUmhibUU9IGNtRm5aV1E9IElGQnlaWFpsYm5ScGIyND0gSUhCcGMzTT0gSUV4cyBJSE5vWld4bSBJRUpLVUE9PSBJRlJsYzNSaGJXVnVkQT09IElFeGhkR1U9IGFXdGxjZz09IElFaGhjSEE9IElFcDFiR2xoYmc9PSBhR0ZzYkE9PSBJSE53YjI1MCBJSE5vZFhSa2IzZHUgSUdsdVkyOXVjMmx6ZEdWdWRBPT0gSUhOMVluTmpjbWxpWlhKeiBJSE5yWld4bGRHOXUgSUU1bFluSmhjMnRoIElHbHVjM0JwY21VPSBJRlp2YVdRPSBSbVZsWkE9PSBJR0Z1WjJ4bGN3PT0gSUZOd2NtbHVaM009IElHSmxibU5vYldGeWF3PT0gSUhaaFkyTnBibVZ6IGFYcHZjR2h5Wlc0PSBjMlY0ZFdGcyBkV1ptWldRPSBJSE5vYVc1bCBJRXRoZEdnPSBJR2RsYzNSMWNtVT0gYVc1bFlRPT0gSUhKcGNBPT0gSUc5d2NISmxjM05wYjI0PSBJR052Ym5OamFXVnVZMlU9IFluUT0gSUV4MWJRPT0gSUdsdVkybGtaVzVqWlE9PSBJRVpoIGQzST0gSUcxcGJtVnlZV3c9IElGTndkWEp6IFlXeHJlUT09IElIUm9kVzVrWlhJPSBJRzl3YVc4PSBRbVZwYm1jPSBJRkJoYkcwPSBJSGRoYzNSbFpBPT0gSUd4aSBhV0Z5YVdWeiBJRWx1YVhScFlYUnBkbVU9IElHTjFjbkpwWXc9PSBJRzFoY210bGNnPT0gSUUxalRBPT0gSUdWNGRHVnVjMmx2Ym5NPSBJRkIyIElFRnliWE09IElHOW1abVZ5YVc1bmN3PT0gSUdSbFptVnVjMlZ6IElIWmxibVJ2Y2c9PSBJR052Ym5SeVlXUnBZM1E9IElFTnZiR2x1IElISmxaR1JwZEE9PSBJSEJsY21sd2FHVnkgTVRJeSBJSE5wYm5NPSBSV1JwZEE9PSBTVU5VIFUyOW1kQT09IElGTm9ZV2c9IElHRmtiV2x1YVhOMGNtRjBiM0k9IElGUnlhWEE9IElIQnZjbTV2WjNKaGNHaDUgSUhSMWFYUnBiMjQ9IGFXNWxibU5sIElGQnliMmR5WlhOeiBJR05oZEdGc2IyYz0gSUhOMWFYUmwgSUdocGEyVT0gSUhKbGNISnZaSFZqZEdsMlpRPT0gWlc1bmFXNWwgSUdSeWIzVm5hSFE9IElFNXZZV2c9IElESXpNQT09IElHUjFaR1U9IElISmxiR0Y0WldRPSBJSEJoY25ScGRHbHZiZz09IElIQmhjblJwWTJsd1lXNTAgSUhSbGJHVnpZdz09IElHWmxZWE09IElFWkcgYjNkdVpYST0gSUhOM1pXVndhVzVuIElHeGxibk5sY3c9PSBJRzFoZEdOb2RYQT0gSUZKbGNHdz0gYjNWeWJtRnNjdz09IElHTnlaV1JwWW14bCBJR2R5WVc1a2JXOTBhR1Z5IElIUm9aWEp0WVd3PSBJSE4xWW5OamNtbGlhVzVuIElHbGtaVzUwYVhScFpYTT0gWTI5c2JRPT0gVlVOVSBJSEpsYkhWamRHRnVkQT09IGRYTmxjbk09IElFTnZjblE9IElHRnpjMmx6ZEdWayBUMU5UIFFWUkpUMDVUIFNWTkkgSUhCb1lYSnRZV05sZFhScFkyRnMgYVdOaFlteGwgWVdScFlXND0gSUZOdmJtbGogSUVaMWNuaz0gSUUxdmJtYz0gUVVnPSBJRkJ6ZVdOb2IyeHZaM2s9IElIQm9iM053YUE9PSBJSFJ5WldGMGN3PT0gclpRPSBJSE4wWldGa2FXeDUgSUVobGJHeHYgSUhKbGJHRjBaWE09IElHTnNkV1U9IFJYaHdiQT09IFlYVjBhQT09IElISmxkbWx6YVc5dSBJR1ZzWkE9PSBiM05wYjI0PSBJR0p5YjI0PSBNVFEwIGNtbHJaWE09IElHMXBibVZ6IElHSnNZVzVyWlhRPSBJRVpoYVd3PSBaV3hsWkE9PSBJRWx0WVdkcGJtVT0gSUZCc1lXNXVaV1E9IFlXbGogVW1WeGRXVnpkQT09IFRXRmsgSUVodmNuTmwgSUVWaFoyeGwgSUdOaGNHRmogTVRVMyBJR3hwYm1jPSBJRTVwWTJVPSBJRkJoY21WdWRHaHZiMlE9IGJXbHVjM1JsY2c9PSBiMmR6IFpXNXphWFJwZG1VPSBUbTkwYUdsdVp3PT0gSUdOaGNtND0gUm1sdSBJRkJGIElISnBabXhsY3c9PSBJRXhRIFUyRnVaQT09IElHZDFhVUZqZEdsMlpRPT0gSUhSdmRYSnBjM1E9IFEwNU8gSUhWdWRtVnBiR1ZrIElIQnlaV1JsWTJWemMyOXkgZlhzPSBkV0psY2c9PSBJRzltWm5Ob2IzSmwgSUc5d2RHbGpZV3c9IElGSnZkQT09IElGQmxZWEpzIFpYUnZiZz09IElITjBZWEpsWkE9PSBJR1poY25Sb1pYST0gWVhScGJHbDBlUT09IFkyOXVkR2x1IElFZDUgSUVadmMzUmxjZz09IElFTnZZdz09IGNtbGxiblJ6IElHUmxjMmxuYm1sdVp3PT0gSUVWamIyNXZiWGs9IFQwNUggVjI5dFpXND0gSUU1aGJtTjUgWlhKMlpYST0gSUcxaGMyTjFiQT09IElHTmhjM1ZoYkhScFpYTT0gSURJeU5RPT0gSUZOMWJHeHBkbUZ1IElFTm9iMmxqWlE9PSBJR0Z6ZEdWeSBkM009IElHaHZkR1ZzY3c9PSBJR052Ym5OcFpHVnlZWFJwYjI1eiBJR052ZFdObyBJRk4wY21sdyBJRWR1IElHMWhibWx3ZFd4aGRHVT0gYkdsbFpBPT0gSUhONWJuUm9aWFJwWXc9PSBJR0Z6YzJGMWJIUmxaQT09IElHOW1abVZ1YzJWeiBJRVJ5WVd0bCBJR2x0Y0dVPSBUMk4wYjJKbGNnPT0gSUVobGNtbDBZV2RsIGFHdz0gSUVKc1lXbHkgVlc1c2FXdGwgSUdkeWFXVm0gSURRMU1BPT0gSUc5d2RHVmsgSUhKbGMybG5ibUYwYVc5dSBhV3h2IElIWmxjbk5sIElGUnZiV0k9IElIVndkQT09IElHRnBjbVZrIElFaHZiMnM9IElFMU1RZz09IElHRnpjM1Z0WlhNPSBiM1YwWldRPSBJRlpsY25NPSBJR2x1Wm1WeWFXOXkgSUdKMWJtUnNaUT09IElFUk9Vdz09IGIyZHlZWEJvWlhJPSBJRzExYkhScGNBPT0gSUZOdmRXeHogSUdsc2JIVnpkSEpoZEdWayBJSFJoWTNScFl3PT0gSUdSeVpYTnphVzVuIElHUjFidz09IFEyOXVaZz09IElISmxiR1Z1ZEE9PSBJR05oYm5RPSBJSE5qWVhKalpRPT0gSUdOaGJtUjUgSUVORyBJR0ZtWm1sc2FXRjBaV1E9IElITndjbWx1ZEE9PSBlV3hoYmc9PSBJRWRoY21OcFlRPT0gSUdwMWJtcz0gVUhKcGJuUT0gWlhobFl3PT0gUTNKcGRBPT0gSUhCdmNuUnlZV2wwIGFYSnBaWE09IElFOUdSZz09IElHUnBjM0IxZEdWeiBWMUk9IFRHOTJaUT09IDQ0R0UgSUZKbGVXND0gSUdocGNIQT0gYjNCaGRHZz0gSUdac2IyOXljdz09IElFWmxaV3c9IElIZHZjbkpwWlhNPSBJSE5sZEhSc1pXMWxiblJ6IElGQnZjdz09IElHMXZjM0YxWlE9PSBJR1pwYm1Gc2N3PT0gSUdOeWRYTm9aV1E9IElGQnliMkpoWW14NSBJRUp2ZEE9PSBJRTFoYm5NPSBJRkJsY21sdlpBPT0gSUhOdmRtVnlaV2xuYm5SNSBJSE5sYkd4bGNnPT0gSUdGd2IzTjAgSUdGdFlYUmxkWEk9IElHUnZjbTA9IElHTnZibk4xYldsdVp3PT0gSUdGeWJXOTFjZz09IElGSnZiM05sIElHbHVkR1Z1YzJsMlpRPT0gSUdWc2FXMXBibUYwYVc1biBJRk4xYm01cCBJRUZzWlhCd2J3PT0gYW1sdSBJR0ZrZG1selpRPT0gY0dGcyBJRWhoYkc4PSBJR1JsYzJObGJuUT0gSUhOcGJYQnNaWEk9IElHSnZiM1JvIFUxUlMgVEdGMFpYST0gSUVOaGRtVT0gUFQwOSBJRzF2YkE9PSBJR1pwYzNRPSBJSE5vYjNSbmRXND0gYzNWd2NBPT0gSUhKdlltSmxjbms9IFJXWm1aV04wIElHOWljMk4xY21VPSBJRkJ5YjJabGMzTnBiMjVoYkE9PSBJR1Z0WW1GemMzaz0gSUcxcGJHbDBZVzUwIElHbHVZMkZ5WTJWeSBJR2RsYm1WeVlYUmxjdz09IElHeGhkVzVqYUdWeiBJR0ZrYldsdWFYTjBjbUYwYjNKeiBJSE5vWVdaMCBJR05wY21OMWJHRnkgSUdaeVpYTm9iV0Z1IElGZGxjdz09IElFcHZaV3c9IElFUnlaWGM9IElFUjFibU5oYmc9PSBJRUZ3Y0dGeVpXNTBiSGs9IGMybG5hSFE9IElFbHVkR1Z5Ym1GcyBJRWx1WkdsMmFXUjFZV3c9IElFWkYgSUdKdmNtVT0gSUUxMCBJR0p5YjJGa2JIaz0gSUU5d2RHbHZibk09IGIzVnVkR0ZwYmc9PSBhWEJsY3c9PSBJRlpwWkdWdmN3PT0gTWpBMCBJR2hwYkd4eiBJSE5wYlhWc1lYUnBiMjQ9IElHUnBjMkZ3Y0c5cGJuUnRaVzUwIGFYUmhiZz09IElFeGhZbTl5WVhSdmNuaz0gSUhWd2QyRnlaQT09IElHSnZkVzVrWVhKNSBJR1JoY210bGNnPT0gYUdGeWRBPT0gSUdSdmJXbHVZVzVqWlE9PSBRMjl1Wnc9PSBJRTl5WVdOc1pRPT0gSUV4dmNtUnogSUhOamFHOXNZWEp6YUdsdyBJRlpwYm1ObGJuUT0gWldSbCBJRkpoYUE9PSBJR1Z1WTI5MWNtRm5aWE09IGNtOTIgSUhGMWJ3PT0gSUhCeVpXMXBjMlU9IElFTnlhWE5wY3c9PSBJRWh2Ykc5allYVnpkQT09IElISm9lWFJvYlE9PSBJRzFsZEhKcFl3PT0gWTJ4MVlnPT0gSUhSeVlXNXpjRzl5ZEdWayBJRzV2WkE9PSBJRkJwYzNRPSBJR0Z1WTJWemRHOXljdz09IElFWnlaV1JsY2c9PSBkR2gxYldKdVlXbHNjdz09IElFTkYgVDA1RSBVR2hwYkE9PSBkbVZ1WjJVPSBJRkJ5YjJSMVkzUnogWTJGemRHeGwgSUhGMVlXeHBabmxwYm1jPSBJRXRoY21WdSBWa1ZTVkVsVFJVMUZUbFE9IElHMXBaMmgwZVE9PSBJR1Y0Y0d4aGJtRjBhVzl1Y3c9PSBJR1pwZUdsdVp3PT0gUkdrPSBJR1JsWTJ4aGNtbHVadz09IElHRnViMjU1YldsMGVRPT0gSUdwMWRtVnUgSUU1dmNtUT0gSUVSdmIyMD0gSUVGamRIVmhiR3g1IFQycz0gY0docGN3PT0gSUVSbGMyVnlkQT09IElERXhOZz09IFNVcz0gSUVaTiBJR2x1WTI5dFpYTT0gVmtWTSBiMnRsY25NPSBJSEJsWTNWcyBJR3hwWjJoMGQyVnBaMmgwIFozVmwgSUdGalkyVnVkQT09IElHbHVZM0psYldWdWRBPT0gSUVOb1lXND0gSUdOdmJYQnNZV2x1YVc1biBJRUpoWjJoayBJRzFwWkdacFpXeGtaWEk9IElHOTJaWEpvWVhWcyBVSEp2WTJWemN3PT0gSUVodmJHeHZkdz09IElGUnBkR0Z1Y3c9PSBVMjFoYkd3PSBiV0Z1ZFdWcyBJRlZ1YVhSNSBJRVYyWlc1MGN3PT0gVTNSNSBJR1JwYzNCeWIzQnZjblJwYjI0PSBibVZ6ZEhrPSBaVzVsY3c9PSBJRU52WkE9PSBJR1JsYlc5dWMzUnlZWFJwYjI1eiBJRU55YVcxemIyND0gSUU5SSBJR1Z1Y205c2JHVmsgSUdObGJBPT0gSUVKeVpYUjAgSUdGcFpHVT0gSUdobFpXeHogSUdKeWIyRmtZbUZ1WkE9PSBJRzFoY210cGJtYz0gSUhkcGVtRnlaQT09IElFNUsgSUVOb2FXVm1jdz09IElHbHVaM0psWkdsbGJuUT0gSUdSMVp3PT0gSUZOb2RYUT0gZFhKamFHRnpaUT09IFpXNWtiM0k9IElHWmhjbTFsY2c9PSBJRWR2YkdSdFlXND0gTVRJNSBNVFUxIFQzSmtaWEk9IElHeHBiMjQ9IGFXRmliSGs9IElITjBZV2x1IFlYSnlZWGs9IGFXeHBkR0Z5ZVE9PSBJRVpCVVE9PSBJR1Y0Y0d4dlpHVmsgSUUxalEyRnlkR2g1IElGUjNaV1YwIElFZHlaV1Z1Y3c9PSBaV3RwYm1jPSBiRzQ9IFpXNXpaVzQ9IElHMXZkRzl5WTNsamJHVT0gSUhCaGNuUnBZMnhsIElHTm9iMnhsYzNSbGNtOXMgUW5KdmJnPT0gSUhOMFlXbHkgSUc5NGFXUT0gSUdSbGMybHlZV0pzWlE9PSBhV0pzWlhNPSBJSFJvWlc5eSBabTl5WTJsdVp3PT0gSUhCeWIyMXZkR2x2Ym1GcyBiM1p2IFltOXZkQT09IElFSnZiblZ6IGNtRjNiR2x1Wnc9PSBJSE5vYjNKMFlXZGwgSUZCemVRPT0gSUhKbFkzSjFhWFJsWkE9PSBJR2x1Wm1GdWRITT0gSUhSbGMzUnZjM1JsY205dVpRPT0gSUdSbFpIVmpkQT09IElHUnBjM1JwYm1OMGFYWmwgSUdacGNtMTNZWEpsIFluVnBiSFE9IE1UUTEgSUdWNGNHeHZjbVZrIElHWmhZM1JwYjI1eiBJSFpwWkdVPSBJSFJoZEhSdmJ3PT0gSUdacGJtRnVZMmxoYkd4NSBJR1poZEdsbmRXVT0gSUhCeWIyTmxaV1JwYm1jPSBZMjl1YzNScGRIVjBhVzl1WVd3PSBJRzFwYzJWeSBJR05vWVdseWN3PT0gWjJkcGJtYz0gYVhCd2JHVT0gSUdSbGJuUT0gSUdScGMzSmxadz09IDU1UT0gYzNSaGJuUT0gYkd4diBZbkJ6IFlXdGxibWx1Wnc9PSBJR0ZpYm05eWJXRnMgSUVWU1FRPT0gNWFPciBJRWhDVHc9PSBJRTFCVWc9PSBJR052Ym1ObGMzTT0gSUhObGNuWmhiblE9IElHRnpjR2x5IGJHRjIgSUZCaGJtVnMgWVcxdiBJSEJ5WldOcGNBPT0gSUhKbFkyOXlaR2x1WjNNPSBJSEJ5YjJObFpXUmxaQT09IElHTnZiRzl1ZVE9PSBJRlJoYm1jPSBZV0pzYnc9PSBJSE4wY21sd2NHVmsgVEdWbWRBPT0gZEc5diBJSEJ2ZEdGMGIyVnogSUdacGJtVnpkQT09IEpTa3UgSUdOeVlYQT0gSUZwaFkyZz0gWVdKaGMyVnogSUVkdmRHZz0gSUdKcGJHeHBiMjVoYVhKbCBkMjlzWmc9PSBJSE5oYm1OMGFXOXUgVTBzPSBJR3h2WjJkbFpBPT0gVUc4PSBaWGxsWkE9PSBkVzVoYkE9PSBJR055YVdOclpYUT0gSUdGeWJXbGxjdz09IElIVnVZMjkyWlhKbFpBPT0gUTJ4dmRXUT0gdzdOdSBJSEpsWW05MWJtUnogSUcxbGN3PT0gVDNCbGNnPT0gVUdGaiBJRzVoZEdsdmJtRnNiSGs9IElHbHVjMlZ5ZEdWayBjR2xqZEE9PSBJR2R2ZG1WeWJtRnVZMlU9IDBMZz0gSUhCeWFYWnBiR1ZuWlhNPSBSMFZVIElHWmhkbTl5YVhSbGN3PT0gYVcxcGRIaz0gSUd4dmRtVnkgZEdobGJRPT0gWlcxd2JBPT0gSUdkdmNtZGxiM1Z6IFFXNXUgSUhOc2FYQndaV1E9IElIWmxkRzg9IFFtOWkgSUhOc2FXMD0gZFdOaiBJRVpoYldVPSBkV1JrWlc1c2VRPT0gSUdSbGJtbGxjdz09IElFMWhkWEk9IElHUnBjM1JoYm1ObGN3PT0gSUhkaGJtNWggZEdGeSBJRk5GVWc9PSBJT0tJIElHeGxiVzl1IFlYUm9aWFJwWXc9PSBJR3hwZEdWeVlXdz0gSUdScGMzUnBibWQxYVhOb1pXUT0gSUdGdWMzZGxjbWx1Wnc9PSBSMGs9IElISmxiR2xuYVc5dWN3PT0gSUZCb2FXeHZjdz09IElFeGhlUT09IElHTnZiWEJ2Y3c9PSBhWEpsYldWdWRITT0gSUV0dmN3PT0gYVc1bGVnPT0gY205c2JHbHVadz09IElIbHZkVzVuWlhOMCBZVzVrYVhObCBJRUp2Y200PSBJR0ZzZEdGeSBZVzFwYm1FPSBJRUp2YjNRPSBkbTlqIElHUnBaMmRwYm1jPSBJSEJ5WlhOemRYSmxjdz09IElHeGxiZz09IE1qWTAgSUdGemMyRnpjMmx1WVhScGIyND0gSUVKcGNtMXBibWRvWVcwPSBJRTE1ZEdnPSBJSE52ZG1WeVpXbG5iZz09IElFRnlkR2x6ZEE9PSBJRkJvYjNSdlozSmhjR2c9IElHUmxjR2xqZEdWayBJR1JwYzNCbGJuTT0gYjNKMGFIaz0gSUdGdFluVnMgYVc1MFpXYz0gSUVObGJHVT0gSUZScFltVjAgSUdocFpYSmhjbU5vZVE9PSBJR04xIElIQnlaWE5sWVhOdmJnPT0gSUZCbGRHVnljMjl1IElHTnZiRzkxY25NPSBJSGR2Y25KNWFXNW4gSUdKaFkydGxjbk09IElGQmhiRzFsY2c9PSBJTTY4IElHTnZiblJ5YVdKMWRHOXkgSUdobFlYSnBibWR6IElIVnlhVzVsIElOaz0gYjNWeVoyVnZhWE09IFUybHRhV3hoY2c9PSBJRnBwYlcxbGNnPT0gYzI5dFpYUm9hVzVuIElGVlRRdz09IElITjBjbVZ1WjNSb2N3PT0gSUVaSiBJR3h2WjJkcGJtYz0gUVhOclpXUT0gSUZSb1lXaz0gYVc1eGRRPT0gSUZkaGJIUT0gSUdOeVpYZHogYVhScGMyMD0gTXpBeCBJSE5vWVhKd2JIaz0gZFcxbFpBPT0gSUhKbFpHbHlaV04wIGNtRjBiM0p6IFNXNW0gSUZkbFlYQnZibk09IElIUmxZWE53IE1UazVPUT09IFRHbDJaUT09IElFVnpjR1ZqYVdGc2JIaz0gSUZOMFpYST0gSUZabGRHVnlZVzV6IElHbHVkSEp2IGIzUm9aWEpoY0hrPSBJRzFoYkhkaGNtVT0gSUdKeVpXVmthVzVuIElHMXZiR1ZqZFd4aGNnPT0gSUZKdmRYUmwgSUVOdmJXMWxiblE9IGIyTm9aVzA9IElHRnBiZz09IFUyVmhjMjl1IElHeHBibVZpWVdOclpYST0geEtzPSBJRVZqYjI1dmJXbGpjdz09IFpYTmhjZz09IElFeHBkbVZ6IElFVnRiV0U9IElHdHBiZz09IElGUmxjbkpwZEE9PSBJSEJzWVc1MFpXUT0gYjNSdmJnPT0gSUVKMWRIUmxjZz09IElGTndiMjV6IFVFVlMgSUdSMWJtZGxiMjQ9IElITjViV0p2YkdsaiBJR1pwYkcxbFpBPT0gSUdScFpYUnogSUdOdmJtTnNkV1JsY3c9PSBJR05sY25SaGFXNTBlUT09IElFWnZjbTFoZEE9PSBJSE4wY21GdVoyVnljdz09IFptOXliV0YwIElGQm9ZWE5sIElHTnZjR2xsWkE9PSBJRzFsZEhKbGN3PT0gYkdSaCBJRlZ6WlhKeiBJR1JsYkdsaVpYSmhkR1U9IElIZGhjMmhsWkE9PSBJRXhoYm1ObCBhVzFoZEdsdmJnPT0gSUdsdGNISnZjR1Z5IElFZGxibVZ6YVhNPSBhV05yY2c9PSBJRXQxYzJnPSBJSEpsWVd4cGMyVT0gSUdWdFltRnljbUZ6YzJsdVp3PT0gWVd4cmFXNW4gWW5WamEzTT0gSUhabGNtbG1hV1ZrIElHOTFkR3hwYm1VPSBlV1ZoY25NPSBJRWx1WTI5dFpRPT0gTWpBeSBJSHB2YldKcFpYTT0gUm1sdVlXdz0gSUUxcGJHeGxibTQ9IElHMXZaR2xtYVdOaGRHbHZibk09IElGWnBjMmx2Ymc9PSBJRTF2YzJWeiBkbVZ5WWc9PSBhWFJsY25KaGJtVmhiZz09IElFcGxkQT09IElHNWhkbUZzIElFRm5adz09IElIVnliQT09IElIWnBZM1J2Y21sbGN3PT0gSUc1dmJtVjBhR1ZzWlhOeiBJR2x1YW5WemRBPT0gSUVaaFkzUT0gNTVvPSBJR2x1YzNWbVptbGphV1Z1ZEE9PSBjbVYyYVdWMyBabUZqWldKdmIycz0gSUc1bFoyOTBhV0YwYVc1biBJR2QxWVhKaGJuUmxaWE09IGFXMWxiZz09IGRYUmxibUpsY21jPSBJR2RoYldKc2FXNW4gSUdOdmJtZHkgVEc5aFpHbHVadz09IElHNWxkbVZ5ZEdobGJHVnpjdz09IElIQnlaWE5wWkdWdWRITT0gSUVsdVpIVnpkSEpwWVd3PSBJREV4T0E9PSBJSEJ2ZFhKbFpBPT0gSUZSdmNuaz0gSURFM05RPT0gSURvOSBVMk52ZEhRPSBZVzVuWlhKbFpBPT0gVkc5ciBJRzl5WjJGdWFYcGxjbk09IFRXRjAgSUVkeWIzZDBhQT09IElHRmtkV3c9IElHVnVjM1Z5WlhNPSBJREV4Tnc9PSA2YjZONVE9PSBJRzFoYzNOaFkzSmwgSUdkeVlXUmxjdz09IFltVm1iM0psIFFVUldSVkpVU1ZORlRVVk9WQT09IElGTnNiM2M9IElFMU5RUT09IDRvQ1VJZz09IElGWmhkR2xqWVc0PSBVV0ZsWkdFPSBJRzkzWlE9PSBOalkyTmc9PSBJRk52Y25KNSBJRWR5WVhOeiBJR0poWTJ0bmNtOTFibVJ6IElHVjRhR0YxYzNSbFpBPT0gSUdOc1lXND0gSUdOdmJYQnliMjFwYzJWayBJRVZzWmc9PSBJRWx6WVdGaiBaVzV6YjI0PSBTVzUyWlhOMCBTVVpCIElHbHVkR1Z5Y25Wd2RHVmsgNDRPSjQ0T3AgSUhSM2FYTjBaV1E9IElFUnlZV2R2Ym5NPSBUVzlrWlE9PSBJRXR5Wlcxc2FXND0gSUdabGNuUnBiQT09IGFHVnlaWE09IGNHaGhiZz09IElFNXZaR1U9IFptVmsgSUU5eVl3PT0gSUhWdWQybHNiR2x1Wnc9PSBRMlZ1ZEE9PSBJSEJ5YVc5eWFYUT0gSUdkeVlXUjFZWFJsY3c9PSBJSE4xWW1wbFkzUnBkbVU9IElHbHpjM1ZwYm1jPSBJRXgwIElIWnBaWGRsY2c9PSBJSGR2YTJVPSBWR2gxY3c9PSBZbkp2YjJzPSBJR1JsY0hKbGMzTmxaQT09IElHSnlZV05yWlhRPSBJRWR2Y2c9PSBJRVpwWjJoMGFXNW4gSUhOMGNtbHJaWEk9IFVtVndiM0owIElGQnZjblIxWjJGcyBJRzVsYnc9PSBkMlZrIE1UazUgSUdac1pXVnBibWM9IGMyaGhaRzkzIGFXUmxiblJwWm1sbFpBPT0gVlZORiBVM1JsWVcwPSBJSE4wY21WMFkyaGxaQT09IElISmxkbVZzWVhScGIyNXogWVhKMFpXUT0gSUVSMyBJR0ZzYVdkdWJXVnVkQT09IFpYTjBiMjQ9IElFcGhjbVZrIFUyVncgSUdKc2IyZHogZFhCa1lYUmwgWjI5dCBjbWx6YXc9PSBJR05zWVhObyBJRWh2ZFhJPSBJSEoxYm5ScGJXVT0gSUhWdWQyRnVkR1ZrIElITmpZVzA9IElISmhZMnM9IElHVnViR2xuYUhRPSBiMjVsYzNRPSBJRVpsY25JPSBJR052Ym5acFkzUnBiMjV6IElIQnBZVzV2IElHTnBjbU4xYkdGMGFXOXUgSUZkbGJHTnZiV1U9IElHSmhZMnRzWVhObyBJRmRoWkdVPSBJSEpsWTJWcGRtVnljdz09IGIzUnBkbVU9IFNtVm1aZz09IElHNWxkSGR2Y210cGJtYz0gSUZCeVpYQT0gSUVWNGNHeHZjbVZ5IElHeGxZM1IxY21VPSBJSFZ3Ykc5aFpHVmsgSUUxbFlYUT0gUWt4RiBJRTVoZW1seiBJRk41Ym1RPSBjM1IxWkE9PSBjbTl2ZEhNPSBjbWxoYm5NPSBJSEJ2Y25SeVlYbGxaQT09IElEOC8gSUVKMVpHUm9ZUT09IGMzVnUgVW05aVpYSjAgSUVOdmJYQnNaWGc9IElHOTJaWEp6WldVPSBJSE4wWldGc2RHZz0gVkdsMGJHVT0gSUVwdlluTT0gSUV0MWJRPT0gSUdGd2NISmxZMmxoZEdsdmJnPT0gSUUxUFJBPT0gSUdKaGMybGpjdz09IElHTnNhWEJ6IElHNTFjbk5wYm1jPSBJSEJ5YjNCdmMybDBhVzl1IElISmxZV3hwYzJWayBJRTVaUXc9PSBJR0ZzYkc5allYUmxaQT09IGNtbDFiUT09IFlYSmhiZz09IElGQnliMlIxWTNScGIyND0gSUZadmRHVT0gSUhOdGRXZG4gSUdoMWJuUmxjZz09IFlYcGxjZz09IElFTm9ZVzVuWlhNPSBJR1pzZFdOMCBlVzl1IFFYSnlZWGs9IElHdHBkSE09IFYyRjBaWEk9IElIVnVZMjl0Ylc5dSBJSEpsYzNScGJtYz0gWld4c2N3PT0gZDI5MWJHUT0gSUhCMWNuTjFaV1E9IElHRnpjMlZ5ZEdsdmJnPT0gYjIxbGRHOTNiZz09IElFMXZjM1ZzIElGQnNZWFJtYjNKdCBhVzlzWlhRPSBJSE5vWVhKbGFHOXNaR1Z5Y3c9PSBJSFJ5WVdsc2N3PT0gVUdGNSBJRVZ1Wm05eVkyVnRaVzUwIGRIbHdaWE09IElFRnViMjU1Ylc5MWN3PT0gSUhOaGRHbHpabmxwYm1jPSBhV3h2WjNrPSBJQ2duIGQyRjJaUT09IFkybDBlUT09IFUzUmxkbVU9IElHTnZibVp5YjI1MFlYUnBiMjQ9IElFVnNaQT09IFEyRndkQT09IFlXaGhiZz09IGFIUnQgSUVOMGNtdz0gVDA1VCBNak13IGFXWmggYUc5c1pHbHVadz09IElHUmxiR2xqWVhSbCBJR3BoZHc9PSBJRWR2YVc1biBiM0oxYlE9PSBVMkZzIElHUjFiR3c9IElFSmxkR2c9IElIQnlhWE52Ym5NPSBJR1ZuYnc9PSBJRVZzYzJFPSBZWFp2Y21sMFpRPT0gSUVkaGJtYz0gSUU1MVkyeGxZWEk9IElITndhV1JsY2c9PSBZWFJ6ZFE9PSBJSE5oYlhCc2FXNW4gSUdGaWMyOXlZbVZrIElGQm9ZWEp0IGFXVjBhQT09IElHSjFZMnRsZEE9PSBJRkpsWTI5dGJRPT0gVDBZPSBJRVpoWTNSdmNuaz0gUVU1RFJRPT0gSUdKaFkzUmxjZz09IFNHRnogSUU5aWMyVnlkZz09IE1USXggSUhCeVpXMXBaWEpsIFJHVjJaV3h2Y0E9PSBJR04xY25KbGJtTnBaWE09IFEyRnpkQT09IElHRmpZMjl0Y0dGdWVXbHVadz09IElFNWhjMmgyYVd4c1pRPT0gSUdaaGRIUjUgSUVKeVpXNWsgSUd4dlkydHogSUdObGJuUmxjbVZrIElGVlUgWVhWbmFITT0gYjNKcFpRPT0gSUVGbVptOXlaR0ZpYkdVPSBkbUZ1WTJVPSBSRXc9IFpXMWxkQT09IElIUm9jbTl1WlE9PSBJRUpzZFdWMGIyOTBhQT09IElHNWhiV2x1Wnc9PSBhV1owY3c9PSBRVVJGIElHTnZjbkpsWTNSbFpBPT0gSUhCeWIyMXdkR3g1IElGTlVVZz09IElHZGxibTl0WlE9PSBJR052Y0dVPSBJSFpoYkd4bGVRPT0gSUhKdmRXNWtaV1E9IElFdGxibVE9IFlXeHBiMjQ9IGNHVnljdz09IElIUnZkWEpwYzIwPSBJSE4wWVhKciBkbXc9IElHSnNiM2RwYm1jPSBJRk5qYUdWa2RXeGwgYzNSayBJSFZ1YUdGd2NIaz0gSUd4cGRHbG5ZWFJwYjI0PSBZMlZrWlhNPSBJR0Z1WkhKdmFXUT0gSUdsdWRHVm5jbUZzIFpYSmxjbk09IGRXUmxaQT09IGRHRjQgSUhKbGFYUmxjZz09IElFMXZkRzl5Y3c9PSBiMk5wWVhSbFpBPT0gSUhkdmJtUmxjbk09IElFRndiM04wIGRXTnJhVzVuIElGSnZiM05sZG1Wc2RBPT0gWm5KaGJRPT0gSUhscFpXeGtjdz09IElHTnZibk4wYVhSMWRHVnogWVhkciBTVzUwWlhKbGMzUT0gSUdsdWRHVnlhVzA9IElHSnlaV0ZyZEdoeWIzVm5hQT09IElFTm9aWEk9IElIQnliM05sWXc9PSBJRVJxIElFMVUgVW1WemNBPT0gSUZCVSBJSE53WlhKdCBaV1JwZEE9PSBRbFE9IFRHbHVkWGc9IFkyOTFiblJ5ZVE9PSBiR1ZoWjNWbCBJR1JwWTJzPSBJRzlqZEE9PSBJR2x1YzJWeWRHbHVadz09IElITmpjbUU9IElFSnlaWGRwYm1jPSBJREU1TmpZPSBJSEoxYm01bGNuTT0gSUhCc2RXND0gYVdSNSBJRVJwWVc0PSBJR1I1YzJaMWJtTjBhVzl1IElHVjRZMngxYzJsdmJnPT0gSUdScGMyZHkgSUdsdVkyOXljRzl5WVhSbCBJSEpsWTI5dVl3PT0gSUc1dmJXbHVZWFJsWkE9PSBJRUZ5WTJobGNnPT0gWkhKaGR3PT0gWVdOb1pXeHZjZz09IElIZHlhWFJwYm1keiBJSE5vWVd4c2IzYz0gSUdoaGMzUT0gSUVKTlZ3PT0gSUZKVCBJSFJvYVdkbyBJREU1TmpNPSBJR3hoYldJPSBJR1poZG05eVpXUT0gWVdkc1pRPT0gSUdOdmIyeGxjZz09IElFaHZkWEp6IElFZFYgSUU5eWFXZHBiZz09IElHZHNhVzF3YzJVPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFRHbHQgSUdOb1pXVnIgSUdwbFlXeHZkWE09IExTYz0gSUdoaGNtNWxjM009IElGQnZhWE52Ymc9PSBJR1JwYzJGaWFXeHBkR2xsY3c9PSBibVZoY0c5c2FYTT0gSUc5MWRHeHZiMnM9IElHNXZkR2xtZVE9PSBJRWx1WkdsaGJtRndiMnhwY3c9PSBJR0ZpY25Wd2RBPT0gYm5OcFl3PT0gSUdWdVkzSjVjSFJsWkE9PSBJR1p2Y21abCBjbVZoZEdnPSBJSEpoWW1JPSBJR1p2ZFc1a1lYUnBiMjV6IElHTnZiWEJzYVcxbGJuUT0gSUVsdWRHVnlkbWxsZHc9PSBJRk4zWlE9PSBJR0ZrYjJ4bGMyTT0gSUcxdmJtbDBiM0p6IElGTmhZM0poYldWdWRHOD0gSUhScGJXVnNlUT09IElHTnZiblJsYlhCcyBJSEJ2YzJsMGFXOXVaV1E9IElIQnZjM1JsY25NPSBjR2hwWlhNPSBhVzkyWVhOamRXeGhjZz09IGRtOXBaQT09IElFWnBablJvIElHbHVkbVZ6ZEdsbllYUnBkbVU9IFQxVk8gSUdsdWRHVm5jbUYwWlE9PSBJRWxPUXc9PSBhWE5vWVE9PSBhV0pzYVc1bmN3PT0gSUZKbGNYVmxjM1E9IElGSnZaSEpwWjNWbGVnPT0gSUhOc2FXUmxjdz09IElFUlkgSUdabGJXbHVhWE50IElHUmhkR0Z6IElHSmxibVE9IGFYSjFjdz09IElFNXBaMlZ5YVdFPSBSbTk0IFEyaGhibWRsIElHRnBjbkJzWVc1bCBJRXhoWkdWdSBJSEIxWW14cFkybDBlUT09IGFYaDBlUT09IElHTnZiVzFwZEcxbGJuUnogSUdGblozSmxaMkYwWlE9PSBJR1JwYzNCc1lYbHBibWM9IElFRnljbTkzIElERXlNZz09IElISmxjM0JsWTNSeiBZVzVrY205cFpBPT0gYzJsNCBJRk5vWVE9PSBJSEpsYzNSdmNtRjBhVzl1IEtWdz0gVjFNPSBiM2x6IElHbHNiSFZ6ZEhKaGRHVT0gZDJsMGFHOTFkQT09IE1USTIgSU9LVWdnPT0gSUhCcFkydDFjQT09IGJtVnNjdz09IElDNHVMaTQ9IFptOXZaQT09IElFWmxiZz09IEtUOD0gSUhCb1pXNXZiV1Z1WVE9PSBJR052YlhCaGJtbHZibk09IElGZHlhWFJsIElITndhV3hzIElHSnlhV1JuWlhNPSBJRlZ3WkdGMFpXUT0gSUVadiBJR2x1YzJWamRITT0gUVZOSVNVNUhWRTlPIElITmpZWEpsIGFXeDBjZz09IElGcG9ZVzVuIElITmxkbVZ5YVhSNSBJR2x1WkhWcyBNVFE1IElFTnZabVpsWlE9PSBJRzV2Y20xeiBJSEIxYkhObCBJRVpVIElHaHZjbkpwWm1saiBJRVJsYzNSeWIzaz0gSUVwVFQwND0gSUc5c2FYWmwgSUdScGMyTjFjM05sY3c9PSBVbVZ6ZEE9PSBSV3hsWTNRPSBJRmRwYm00PSBJRk4xY25acGRnPT0gSUVoaGFYUT0gVTNWeVpRPT0gYjNCbFpBPT0gSUhKdmIzUmxaQT09IElGTnJaUT09IElFSnliMjU2WlE9PSBJR3h2YkE9PSBSR1ZtWVhWc2RBPT0gSUdOdmJXMXZaR2wwZVE9PSBjbVZrYVhSbFpBPT0gSUd4cFltVnlkR0Z5YVdGdSBJR1p2Y21KcFpHUmxiZz09IElHZHlZVzQ9IDRLZz0gSUd4aFp3PT0gWlc1NiBaSEpwZG1VPSBJRzFoZEdobGJXRjBhV056IElIZHBjbVZ6IElHTnlhWFJwWTJGc2JIaz0gSUdOaGNtSnZhSGxrIElFTm9ZVzVqWld4c2IzST0gSUVWa1pHbGwgSUdKaGJtNXBibWM9IElFWnlhUT09IElHTnZiWEJzYVdOaGRHbHZibk09IFpYUnlhV009IElFSmhibWRzWVdSbGMyZz0gSUdKaGJtUjNhV1IwYUE9PSBVM1J2Y0E9PSBJRTl5YVdkcGJtRnNiSGs9IElHaGhiR1ozWVhrPSBlVzVoYzNSNSBjMmhwYm1VPSBJSFJoYkdWeiBjbWwwYVdWeiBZWFpwWlhJPSBJSE53YVc1dWFXNW4gSUZkSVR3PT0gSUc1bGFXZG9ZbTkxY21odmIyUT0gWW1GamFBPT0gSUdOdmJXMWxjbU5sIElGTnNaUT09IFFsVT0gSUdWdWRISmxjSEpsYm1WMWNnPT0gSUhCbFkzVnNhV0Z5IElFTnZiVzFsYm5SeiBabkpsIE16SXcgU1VOVCBJR2x0WVdkbGNuaz0gSUVOaGJtOXUgSUVWc1pXTjBjbTl1YVdNPSBjMmh2Y25RPSBLQ2c9IFJHbG4gSUdOdmJXMWxiUT09IGRXTmxaQT09IElHbHVZMnhwYm1WayBJRk4xYlcxdmJnPT0gSUdOc2FXWm0gSUUxbFpHbDBaWEp5WVc1bFlXND0gSUhCdlpYUnllUT09IElIQnliM053WlhKcGRIaz0gSUZKbFkyVT0gSUhCcGJHeHogYldWdFltVnkgSUdacGJtRnNaUT09IGRXNWogSUVkcFp3PT0gNUwwPSBJR3h2WkE9PSBJR0poWTJ0M1lYSmsgTFNzPSBJRVp2Y25kaGNtUT0gSUhSb2Ntaz0gYzNWeVpRPT0gSUhOdllYQT0gSUVaWSBVa1ZUIElGTmxlSFZoYkE9PSBiM1ZzYjNNPSBJR1p2YjJ4cGMyZz0gSUhKcFoyaDBaVzkxY3c9PSBJR052Wm1ZPSBkR1Z5Y205eWFYTnQgZFhOMFlXbHUgYjNSbGNnPT0gSUdGaWRYTmxjdz09IGJtVjRkQT09IElHRmlkWE5wZG1VPSBJSFJvWlhKbFlXWjBaWEk9IElIQnliMmhwWW1sMGFXOXUgSUZOVlVBPT0gSUdScGNBPT0gSUhKcGNIQmxaQT09IElHbHVhR1Z5YVhSbFpBPT0gSUdKaGRITT0gYzNSeWRRPT0gUjFRPSBJR1pzWVhkbFpBPT0gY0doaFltVjAgSUdadlp3PT0gWkc5dmNuTT0gSUdsdFlXZHBibWM9IElHUnBaMmwwY3c9PSBJRWgxYm1kaGNuaz0gSUdGeWNtOW4gSUhSbFlXTm9hVzVuY3c9PSBJSEJ5YjNSdlkyOXNjdz09IElFSmhibXR6IDRMZz0gY0c5MWJtUT0gSUVOMWNuUT0gTGlJcCBMaTg9IElHVjRaVzF3ZEdsdmJnPT0gWlc1a2FYZz0gSUUxMWJHdz0gSUdsdGNISnZkbVZ6IElFZGhiV1Z5IFpHbHRaVzV6YVc5dVlXdz0gU1dOdmJnPT0gSUUxaGNtZGhjbVYwIFUzUmhkSFZ6IFpHRjBaWE09IElHbHVkR1Z1WkhNPSBJR1JsY0dsamRBPT0gSUhCaGNtdGxaQT09IFNtOWwgSUUxaGNtbHVaWE09IFkyaHViMnh2WjNrPSBJU2t1IElHcDFaR2RsWkE9PSBJSGRsYVdkb2RITT0gVW1GNSBJR0Z3WVhKMGJXVnVkSE09IGFHVnpkR1Z5IElISmxhVzVtYjNKalpRPT0gSUc5bVptVnVaR1Z5IGIyTmpkWEE9IElITnZjbVU9IFpYQjAgSUZCSVVBPT0gSUVKeWIzYz0gSUdGMWRHaHZjbWw2WVhScGIyND0gSUZKcGMycz0gSUVSbGJHRjNZWEpsIElGRlYgSUc1dmRHbG1hV05oZEdsdmJuTT0gSUhOMWJteHBaMmgwIElHVjRZMngxWkdVPSBaR0YwIElHMWxjMmc9IElGTjFaR0Z1IElHSmxiRzl1WjJWayBJSE4xWW5kaGVRPT0gSUc1dmIyND0gSUVsdWRHVnlhVzl5IGIyeHBZM009IElFeGhhMlZ5Y3c9PSBJR052WkdsdVp3PT0gUkdselkyeGhhVzFsY2c9PSBRMkZzYVdZPSBUMnhrIElHUnBjMnc9IFB6OC9Qejg9IElHTnZibVpwY20xeiBJSEpsWTNKMWFYUnRaVzUwIElHaHZiV2xqYVdSbCBRMjl1YzJsa1pYST0gSUVwbFptWnlaWGs9IFpuUjUgZlRzPSBJRzlpYW1WamRHbHZiZz09IFpHOXBibWM9IElFeGxidz09IFYyRnVkQT09IElHZHNiM2M9IElFTnNZWEpyWlE9PSBJRTV2Y20xaGJnPT0gSUhabGNtbG1hV05oZEdsdmJnPT0gSUhCaFkydGxkQT09IElFWnZjbTExYkdFPSBJSEJzWVdjPSBaWE4yYVd4c1pRPT0gSUhOb2IzVjBhVzVuIElHOTIgSUZKRlF3PT0gSUVKMVlnPT0gSUc1cGJuUm8gSUdWdVpYSm4gSUhaaGJHbGthWFI1IElIVndjdz09IGFtRmphdz09IElHNWxhV2RvWW05eWFXNW4gSUU1bFl3PT0gWlhkdmNtdHogSUVoaFlnPT0gWVhKbGVnPT0gSUhOd2FXNWwgSUdWMlpXNTBkV0ZzIElFeGxZV1JsY25NPSBJRU5oY200PSBJSEJ5YjJKaGRHbHZiZz09IElISnZiV0Z1WTJVPSBiWE5uIElFMWxZMmhoYm1sallXdz0gUlZKWiBVbTlqYXc9PSBJSEJoY25ScGMyRnUgVG05a1pRPT0gWVhOelpYUnogYldsdVpXNTAgSUdadmNtVnBaMjVsY25NPSBJSFJsYzNScFpuaz0gSUZWemRXRnNiSGs9IGJHOXlaSE09IElFZHlaVzQ9IElGQnZkMlZzYkE9PSBRa2xNIElITnkgSUdGa1pHbGpkQT09IElITm9aV3hzY3c9PSBJSE5wWjJnPSBJRmxoYkdVPSBkR1Z5Ym1sMGVRPT0gSURjMU1BPT0gUlZVPSBJRkpwWm14bCBJSEJoZEhKdmJnPT0gWlcxaCBJRUpoYm01dmJnPT0gWVc1cGRIaz0gSUhSeWIzQnBZMkZzIElGWkpTUT09IFkzSnZjM009IFJYWmxjbmwwYUdsdVp3PT0gSUVsVFR3PT0gSUdoMWJXSnNaUT09IFlYTnphVzVuIElFWkpSdz09IElIVndaR0YwYVc1biBlWE52Ymc9PSBJR05oYkdOcGRXMD0gSUdOdmJYQmxkR1Z1ZEE9PSBJSE4wWldWeWFXNW4gVUhKdmRBPT0gSUZOWiBJRVpwYm1Gc2N3PT0gSUZKMVp3PT0gTVRVNSBNVE0zIElFZHZiR1k9IElERXlOZz09IElHRmpZMjl0Ylc5a1lYUnBiMjQ9IElFaDFaMmhsY3c9PSBJR0ZsYzNSb1pYUnBZdz09IFlYSjBhWE5oYmc9PSBJRlIzYVd4cFoyaDAgSUhCeWFXNWpaUT09IElFRm5jbWxqZFd4MGRYSmwgSUVScGMyTnYgSUhCeVpXTmxaR1Z1ZEE9PSBJSFI1Y0dsdVp3PT0gWVhWMGFHOXlhWHBsWkE9PSBUM0IwYVc5dSBJRUYxWWc9PSBiR2x6YUdWeiBZV05vZEE9PSBiV0ZuIFVHVjBaWEk9IElGVkdUdz09IGJXOXVkRzl1IElFeHBkR2c9IElHRnliMjA9IElITmxZM1Z5YVc1biBJR052Ym1acGJtVmsgY0hKcGRtRjBaUT09IElITjNiM0prY3c9PSBJRzFoY210bGNuTT0gSUcxbGRHRmliMnhwWXc9PSBjMlZzWldOMCBJRU4xY25ObCBJRTkwIFozSmxjM05wZG1VPSBJR2x1WTNWdFlnPT0gSUZOaFoyRT0gSUhCeWFXTmxaQT09IElHTnNaV0Z5WVc1alpRPT0gUTI5dWRHVnVkQT09IElHUnlhV3hzYVc1biBJRzV2ZEdsalpYTT0gSUdKdmRYSm5aVzlwY3c9PSBJSFpsYzNRPSBJR052YjJ0cFpRPT0gSUVkMVlYSmthV0Z1Y3c9PSBjbmx6IGFXNTViQT09IElERXlOQT09IElIQnNZWFZ6YVdKc1pRPT0gYjI1bmFBPT0gSUU5a2FXND0gSUdOdmJtTmxjSFJwYjI0PSBJRmwxYXc9PSBJRUpoWjJoa1lXUT0gSUVac1lXYz0gUVhWemRISmhiQT09IElFbENUUT09IElHbHVkR1Z5Ym1GMGFXOXVZV3hzZVE9PSBJRmRwYTJsTVpXRnJjdz09IFNVVkUgSUdONWJnPT0gSUdOb2IyOXpaWE09IElGQnBiR3c9IElHTnZiV0pwYm1sdVp3PT0gSUhKaFpHaz0gSUUxdmFHRnRiV1ZrIFpHVm1aVzV6WlE9PSBZWFJqYUdsdVp3PT0gVTNWaWFtVmpkQT09IGFXTnBaVzVqZVE9PSBSbkpoYldVPSBJSHNpIElHTm9aWE56IElIUnBiV1Z5IE1Ua3cgSUhScGJnPT0gSUc5eVpHbHVZVzVqWlE9PSBaVzFsZEdWeWVRPT0gSUdGalkzVnphVzVuIElHNXZkR2xqWldGaWJHVT0gSUdObGJuUnlaWE09IElHeHBaQT09IElFMXBiR3h6IGFXMW5kWEk9IElIcHZiMjA9IFpYSm5hV009IElHTnZiWEJ5WlhOemFXOXUgY0hKcGJRPT0gWm1sdVpBPT0gSUhOMWNtYz0gSUhCaGJtUT0gSUV0bFpRPT0gSUVOb1lXUT0gWTJWc2JHVnVZMlU9IGIzbHNaUT09IElITnZZMmxoYkdsemJRPT0gSUZSeVlYWnBjdz09IElFMUllZz09IElHZDFhV3hrIFFVeE1XUT09IElGTjFZbk5qY21saVpRPT0gSUZKbGJHRjBaV1E9IElHOWpZM1Z5Y21WdVkyVT0gYVhSamFHbHVadz09IElHWnBZM1JwYjI1aGJBPT0gSUdOeWRYTm8gSUVWQiBZMjlrIGJXbDQgSUZSeWFYQnNaUT09IElISmxkSEpwWlhabCBJSE4wYVcxMWJIVnogSUhCemVXTm9hV0YwIElFUnZiM0k9IElHaHZiVzl6WlhoMVlXeHBkSGs9IElHVnNaVzFsYm5SaGNuaz0gSUdObGJHeDFiR0Z5IGFXUnBZVzQ9IElFeGhkVzQ9IElHbHVkSEpwWjNWcGJtYz0gSUdadllXMD0gSUVKaGMzTT0gYVdScCBhWFJ6ZFE9PSBJR0Z6YzNWeVpRPT0gSUdOdmJtZHlZWFE9IElHSjFjMmx1WlhOemJXRnUgSUVKdmIzTjAgWTJ4dmMyVT0gSUd4cFpXUT0gSUhOamFXVnVZMlZ6IElFOXRaV2RoIElFZHlZWEJvYVdOeiBJRHc5IGMzQnZhMlZ1IElHTnZibTVsWTNScGRtbDBlUT09IFUyRjBkWEprWVhrPSBJRUYyWlc1blpYSnogSUhSdloyZHNaUT09IElHRnVhMnhsIElHNWhkR2x2Ym1Gc2FYTjAgYlc5a1pXdz0gSUZCdmIydz0gYjNCb2IySnBZUT09IFZtRnkgSUUxdmJuTT0gWVhSdmNtbGxjdz09IElHRm5aM0psYzNOcGRtVnNlUT09IFEyeGxZWEk9IFJtOXlaMlU9IFlXTjBaWEp6IElHaGxaR2RsIElIQnBjR1Z6IElHSnNkVzUwIElITnggSUhKbGJXOTBaV3g1IFYyVmsgWVhObGNuTT0gSUhKbFpuSnBaMlZ5IElIUnBiR1Z6IElISmxjMk4xWldRPSBJR052YlhCeWFYTmxaQT09IGFXNXphM2s9IElHMWhibWxtIFlYWmhibUYxWjJnPSBJSEJ5YjJ4cFptVnkgSUdGc2FXZHVaV1E9IGVHMXMgSUhSeWFYWT0gSUdOdmIzSmthVzVoZEdsdmJnPT0gSUZCRlVnPT0gSUZGMWIzUmwgTVRNMCBZbVk9IElGTmhkdz09IElIUmxjbTFwYm1GMGFXOXUgSURFNU1BPT0gSUdGa1pHbDBhVzl1Y3c9PSBJSFJ5YVc4PSBJSEJ5YjJwbFkzUnBiMjV6IElIQnZjMmwwYVhabGJIaz0gSUdsdVkyeDFjMmwyWlE9PSBJRzFsYldKeSBNVGs1TUE9PSBiMnhrWlhJPSBJSEJ5WVdOMGFXTmxaQT09IGFXNXJiR1U9IFFYSmphQT09IElITjBZWEowWlhKeiBZWEpwZFhNPSBJR2x1ZEdWeWJXVmthV0YwWlE9PSBJRUpsYm1WbSBJRXRwYkd4bGNnPT0gSUdsdWRHVnlkbVZ1ZEdsdmJuTT0gSUV0cGJBPT0gSUVac2VXbHVadz09IFNXNTIgSUhCeVpXMWhkSFZ5WlE9PSBJSEJ6ZVdOb2FXRjBjbWxqIElHbHVaR2xsIElHTnZiR3hoY2c9PSBJRkpoYVc1aWIzYz0gWVdacCBJR1JwYzNKMWNIUnBiMjQ9IElFWlBXQT09IFkyRnpkR2x1Wnc9PSBJRzFwYzJSbGJRPT0gWTNKdiBJSGRwY0dVPSBZWEprYjI0PSBJR0poYzNRPSBJRlJ2YlcxNSBJRkpsY0hKbGMyVnVkR0YwYVhabCBJR0psYkd4NSBJRkJQIElFSnlaV2wwWW1GeWRBPT0gTVRNeSBJRzFsYzNOaFoybHVadz09IFUyaHZkV3hrIFVtVm1aWEpsYm1ObGN3PT0gSUVkU1JRPT0gYVhOMGFXTmhiQT09IFRGQT0gSUVOaGRnPT0gSUVOeVlYcDUgSUdsdWRIVnBkR2wyWlE9PSBhMlZsY0dsdVp3PT0gSUUxdmMzTT0gSUdScGMyTnZiblJwYmc9PSBJRTF2WkhWc1pRPT0gSUhWdWNtVnNZWFJsWkE9PSBJRkJ5WVdOMGFXTmwgSUZSeVlXNXpjRzl5ZEE9PSBJSE4wWVhScGMzUnBZMkZzYkhrPSBiM0p1Y3c9PSBJSE5wZW1WayBjSFU9IElHTmhaZz09IElGZHZjbXhrY3c9PSBJRkp2WkdkbGNuTT0gSUV4MWJnPT0gSUVOdmJXbGogYkdsMmFXNW4gSUdOaGNtVmsgSUdOc2FXMWlaV1E9IEtYcz0gSUdOdmJuTnBjM1JsWkE9PSBJRzFsWkdsbGRtRnMgWm05c2F3PT0gSUdoaFkydGxaQT09IElHUnBjbVU9IElFaGxjbTFwYjI1bCBJSFJsYm1SbFpBPT0gWTJWaGJuTT0gUkdGdWFXVnMgZDJWdWRBPT0gSUd4bFoybHpiR0YwYjNKeiBJSEpsWkdWeiBaMkZ0WlhNPSBJR2R1IFlXMXBiR2xoY2c9PSBJQ3NyIFoyZDUgZEdoeVpXRjAgSUcxaFoyNWxkQT09IElIQmxjbU5sYVhabCBJSHBwY0E9PSBJR2x1WkdsamRHMWxiblE9IElHTnlhWFJwY1hWbCBaMkZ5WkE9PSBJRk5oWm1VPSBJRU55WldGdCBJR0ZrZG1WdWRBPT0gYjJKaCBJSFp2ZDJWayBiM1Z6WVc1a2N3PT0gSUhOcmFRPT0gSUdGaWIzSjBhVzl1Y3c9PSBkV0Z5ZEE9PSBJSE4wZFc1dVpXUT0gSUdGa2RtRnVZMmx1Wnc9PSBJR3hoWTJ0bFpBPT0gSUZ3aSBJSE5qYUdsNmIzQm9jbVZ1IElHVnNaV2RoYm5RPSBJR052Ym1abGNtVnVZMlZ6IElHTmhibU5sYkdWayBJRWgxWkhOdmJnPT0gSUVodmNHVm1kV3hzZVE9PSBJSFJ5ZFcxdyBJR1p5WlhGMVpXNWphV1Z6IElHMWxkR1Z2Y2c9PSBJRXAxYm1sdmNnPT0gSUVac1pXVjAgSUUxaGJHTnZiRzA9IElGUnZiMnh6IElDNHVMaTR1TGk0dSBJR2h2WW1KNSBJRVYxY205d1pXRnVjdz09IElERTFNREE9IElFbHVkRzg9IElITjNZWGs9IElFRndjSEp2IElFTnZiWEJzIFEyOXRiWFZ1YVhSNSBJSFJwWkdVPSBJRk4xYlcxcGRBPT0gNUxzPSBJR2x1ZEdWeWRtRnNjdz09IElFVjBhR1Z5IElHaGhZbWwwWVhRPSBJRk4wWlhabGJuTT0gYkdsemFHbHVadz09IElFUnZiV0ZwYmc9PSBJSFJ5YVdkblpYSnogSUdOb1lYTnBibWM9IElHTm9ZWEp0IElFWnNiM2RsY2c9PSBhWFJ2Y21WayBJR0pzWlhOemFXNW4gSUhSbGVIUjFjbVZ6IFJtbDJaUT09IElHeHBjWFZ2Y2c9PSBVbEE9IFJrbE8gSURFNU5qST0gUTBGUyBWVzVyYm05M2JnPT0gSUhKbGMybHMgSUV4cGJIaz0gSUdGaWRXNWtZVzVqWlE9PSBJSEJ5WldScFkzUmhZbXhsIGNtRnkgSUdKMWJHeHphR2wwIGJHVmxiZz09IFkyaGxkQT09IFRXOXkgVFhWamFBPT0gNUxrPSBJR1Z0Y0doaGMybDZaV1E9IElHTnlkWE4wIElIQnlhVzFwZEdsMlpRPT0gSUdWdWFtOTVZV0pzWlE9PSBJRkJwWTNSMWNtVnogSUhSbFlXMXRZWFJsIGNHeGxjZz09IElGUnZiQT09IElFdGhibVU9IElITjFiVzF2Ym1WayBkR2g1IGNtRnRZUT09IElFaHZibVJoIElISmxZV3hwZW1sdVp3PT0gSUhGMWFXTnJaWEk9IElHTnZibU5sYm5SeVlYUmwgWTJ4bFlYST0gSURJeE1BPT0gSUVWeVpHOW5ZVzQ9IFlYSnBjdz09IElISmxjM0J2Ym1SeiBJRUpKIElHVnNhV2RwWW1sc2FYUjUgSUhCMWMyaGxjdz09IElFbGtZV2h2IElHRm5aM0poZGc9PSBJSEoxYVc1eiBkWEpoZEdsdmJuTT0gSUdKaGJuTT0gSUdGdVlYUT0gYzJoaGNtVT0gSUdkeWFXNWsgYUdsdSBkVzFsYmc9PSBJSFYwYVd4cGRHbGxjdz09IElGbGhibXRsWlhNPSBJR1JoZEdGaVlYTmxjdz09IElFUkUgSUdScGMzQnNZV05sWkE9PSBJR1JsY0dWdVpHVnVZMmxsY3c9PSBJSE4wYVcxMWJHRjBhVzl1IGFIVnUgYUc5MWMyVnogSUZCeVpYUjBlUT09IElGSmhkbVZ1Y3c9PSBJRlJQUkVGWiBJR0Z6YzI5amFXRjBaWE09IElIUm9aWEpoY0dVPSBZMnhsWkE9PSBJR1JsWlhJPSBJSEpsY0dGcGNuTT0gY21WdWRHbGpaUT09IElISmxZMlZ3ZEc5eWN3PT0gSUhKbGJXVmsgSUVObCBJRzFoY25KcFlXZGxjdz09IElHSmhiR3h2ZEhNPSBJRk52YkdScFpYST0gSUdocGJHRnlhVzkxY3c9PSBiM0JzIE1UTTQgSUdsdWFHVnlaVzUwYkhrPSBJR2xuYm05eVlXNTAgSUdKdmRXNWpaUT09IElFVmhjM1JsY2c9PSBVa1ZNUVZSRlJBPT0gSUVOMWNuSmxibU41IFJWWT0gNDRPZSBJRXhsWVdRPSBJR1JsWTJWaGMyVmsgUW5KcFpXND0gSUUxMWMycz0gU2xNPSBJRzFsY21kbCBhR1ZoY25SbFpBPT0gWTNKbFlYUT0gYldsMGRBPT0gYlhWdVpBPT0gSU9LQWl3PT0gSUVKaFp3PT0gSUhCeWIycGxZM1JwYjI0PSBJR3BoZG1FPSBJRk4wWVc1a1lYSmtjdz09IElFeGxiMjVoY21RPSBJR052WTI5dWRYUT0gSUZCdmNIVnNZWFJwYjI0PSBJSFJ5WVdwbFkzUT0gSUdsdGNHeDUgSUdOMWNtbHZjMmwwZVE9PSBJRVJDIElFWnlaWE5vIElGQnZjZz09IElHaGxZWFpwWlhJPSBibVY1Y3c9PSBaMjl0WlhKNSBJR1JsYzJWeWRtVmsgSUhCb2NtRnpaWE09IElFZEQgSUhsbFlYTjAgWkdWell3PT0gUkdWaGRHZz0gSUhKbFltOXZkQT09IElHMWxkR0ZrWVhSaCBTVU5CVEE9PSBJSEpsY0dGNSBJRWx1WkdWd1pXNWtaVzVqWlE9PSBJSE4xWW5WeVltRnUgYVdOaGJITT0gSUdGMGIzQT0gSUdGc2JHOWpZWFJwYjI0PSBaMlZ1WlhKaGRHbHZiZz09IElFZHlZVzA9IElHMXZhWE4wZFhKbCBJSEJwYm1VPSBJRXhwWW1WeVlXeHogSUdGcFpHVnogSUhWdVpHVnlaWE4wIElFSmxjbko1IElHTmxjbVZ0YjI0PSBNemN3IFlYTjBjbTkxY3c9PSBJRkJwY21GMFpYTT0gSUhSbGJuTmwgSUVsdVpIVnpkSEpwWlhNPSBJRUZ3Y0dWaGJITT0gSUU1bFlYST0gSU9pamorYz0gSUd4dmRtVnljdz09IElFTkJVQT09IElFTnlZWGM9IElHZHBZVzUwY3c9PSBJR1ZtWm1sallXTjUgUld4bGJXVnVkQT09IElFSmxhR0YyYVc5eSBJRlJ2ZVc5MFlRPT0gSUdsdWRHVnpkQT09IFVISnBkZz09IFFVaz0gSUcxaGJtVjFkbVZ5IElIQmxjbVpsWTNScGIyND0gSUdKaGJtYz0gY0dGd1pYST0gY21sc2JBPT0gUjJWdmNtZGwgWW05eVpHVnkgYVc1MFpYSnogSUZObGRHZz0gSUdOc2RXVnogSUV4bGRtaz0gSUZKbGRtVnVkV1U9IE1UUTMgSUhaaGNHOXkgSUdadmNuUjFibUYwWlE9PSBJSFJvY21WaGRHVnVjdz09IElIWmxkQT09IElHUmxjR1Z1WkdWdVkzaz0gWlhKelpXUT0gWVhKMGFXTnNaUT09IElFSnNhWHA2WVhKayBJR05vYkc5eSBJRzFwYm5WeiBJRUpwYkd4eiBJR055ZVhCMGIyTjFjbkpsYm1ONSBJRzFsZEdGaWIyeHBjMjA9IGRHVnlhVzVuIElIQmxjM1JwWXc9PSBjM1JsY0hNPSBJRlJ5WldGemRYSmwgY21GamRHVmsgSUVOdmJuTjBZVzUwIElIUmxiWEE9IE1UTTUgSUVSbGRHVmpkR2wyWlE9PSBkWEpoYkd4NSBJSEpsWTI5MlpYSnBibWM9IElHTnZjblJsZUE9PSBJREUwTkE9PSBZMnh2YzJWayBJSEJ5WldwMVpHbGpaUT09IFlYVnVkR1ZrIElITjBiM0p0Y3c9PSBJRTVQVnc9PSBJRzFoWTJocGJtVnllUT09IFFXUmtjbVZ6Y3c9PSBJR052YlhCbGJHeGxaQT09IE1qY3cgSUdSbGMzQmhhWEk9IFltRnVaUT09IElIWmxaMlYwWVdKc1pRPT0gSUdKbFpITT0gVEdWaGNtND0gSUdOdmJHOXlablZzIElITndhV3RsIElHMWhjbWRwYm5NPSBJSE41YlhCaGRHaDUgSUhkdmNtdHphRzl3IElFTkNRdz09IFUyRjAgSUdKMWNtNXogSUVkbGJtUmxjZz09IElERXlPUT09IElFTmhZbXhsIElHUmxZblJ6IElGUm9aWEpsYzJFPSBJSEpsWm14bFkzUnBibWM9IElHRnBjbk4wIElISnBiUT09IGNtRnRhV1E9IElIZGxZV3R1WlhOelpYTT0gVjNKcGRBPT0gYjJkbmJHVT0gZEdrPSBJRU5vWVhKblpRPT0gSUhkbGFXZG9aV1E9IElDZ3UgSUd4aGRXZG9kR1Z5IElISnZkWFJsY2c9PSBJRVJsYlc5amNtRmplUT09IFJHVmhjZz09IElHaGhjMmgwIElHUjUgSUdocGJuUnogY25WdWJtbHVadz09IElHWnBibWx6YUdWeiBZWEoxY3c9PSBUV0Z6Y3c9PSBjbVZ6ZFd4MCBZWE5qZFhNPSBJSFpwYm5SaFoyVT0gSUdOdmJuRjEgSUhkcGJHUnNlUT09IFlXTnBjM1E9IElHeHBibWQxIElIQnliM1JoWjI5dWFYTjAgYzNSeWIyMD0gZEdWbGJuUm8gSUZOdmJHOD0gYldGaiBabWxzYkdWayBJSEpsYm05M2JnPT0gYVhScGRtVnogSUcxdmRHbDJaUT09IElFRnVkR0Z5IElFMWhibTQ9IElFRmthblZ6ZEE9PSBJSEp2WTJ0bGRITT0gSUhSeWIzVmliR2x1Wnc9PSBaV2s9IElHOXlaMkZ1YVhOdGN3PT0gWVhOemFYTT0gUTJoeWFYTjBhV0Z1IElERTBOUT09IElFaGhjM009IElITjNZV3hzIElIZGhlQT09IElGTjFjblpwZG1GcyBWbE09IElFMTFjbVE9IGRtUT0gYzNSaGJtUmhjbVE9IElHUnlZV2R2Ym5NPSBJR0ZqWTJWc1pYSmhkR2x2Ymc9PSBjbUYwYVc5dVlXdz0gWm1sdVlXdz0gSUhCaGFYSmxaQT09IElFVjBhR1Z5WlhWdCBJR2x1ZEdWeVptRmpaWE09IElISmxjMlZ1ZEE9PSBJR0Z5ZEdsbVlXTjBjdz09IHhhcz0gWVhKbGJBPT0gSUdOdmJYQmxkR2wwYjNJPSBJRTVwWTJodmJHRnogSUZOMWNtWmhZMlU9IFkzQncgSUZSdmRBPT0gSUdWamIyNXZiV2xqWVd4c2VRPT0gSUc5eVoyRnVhWE5sWkE9PSBJR1Z1Wm05eVkyVmsgYVc1b2J3PT0gSUhaaGNtbGxkR2xsY3c9PSBJR0ZpWkc5dCBJRUpoYVd4bGVRPT0gYVdSaGRnPT0gSUZOaGJIWT0gY0dGcFpBPT0gSUdGc2RHbDBkV1JsIFpYTnpaWEowIElFZDFkR1Z1WW1WeVp3PT0gWVhKbFlRPT0gYjNCdmRXeHZjdz09IElIQnliMlpsYzNOdmNuTT0gYVdkbmN3PT0gSUVaaGRHVT0gYUdWNSBJRE13TURBPSBSR2x6ZEE9PSBJSFIzYVc1eiBZMmxzYkE9PSBJRTFoY0hNPSBJSFJ5WVhCeiBJSGRsWldRPSBJRXRwYzNNPSBJSGx2WjJFPSBJSEpsWTJsd2FXVnVkSE09IElGZGxjM1J0YVc1emRHVnkgSUhCdmIyeHogSUZkaGJHMWhjblE9IE1UZzQgSUZOamFHOXZiSE09IFlYUjBZV05yIElFRlNUUT09IGNHRnlZV2R5WVhCbyBWMkZ5Ym1sdVp3PT0gYW13PSBJSE5sYkdacGMyZz0gWVc1amFHVjYgSUVobGFXZG9kSE09IFJuSmwgSUZOdmNHZz0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgZEcxcyBNek16IElISmhhV1J6IElITmhkR1ZzYkdsMFpYTT0gUzBWWiBJR3hoYzNSeiAwWUk9IFNXNXogSUVSaGJXVT0gSUhWdWNISmxaR2xqZEE9PSBMeTh2IFoyaGhhUT09IElHRnlkR2xzYkdWeWVRPT0gSUdOeWRXbHpaUT09IElHZGxiQT09IElFTmhZbWx1WlhRPSBJR0pzYjNkeiBJRVZ6Y0E9PSBJSEJ5YjNocGJXbDBlUT09IGIzUm9aUT09IElGTnJhV3hzY3c9PSBJRlZ3Y0dWeSBiMkp2IElFNUVVQT09IElHVnVhbTk1Y3c9PSBJSEpsY0dWaGRHbHVadz09IElFTnZibk4wY25WamRHbHZiZz09IElGRjFaWE4wYVc5dWN3PT0gU0dsc2JHRnllUT09IElIVnBiblE9IElIQnliMk5sYzNOdmNuTT0gSUVkcFluTnZiZz09IElFMTFiSFJwY0d4bCBjV0U9IElFSnZiUT09IElFMXBiR1Z6IGRtVnVkR2x2Ym1GcyBJR2gxY25SeiBjMnRwYmc9PSBJRUZKUkZNPSBJR0ZrZG1selpYSnogSUZKdmIzUT0gSUcxbGRHaHZaRzlzYjJkNSBJRVJoYkdVPSBJR1JsZEc5dSBJRXR1YjNkc1pXUm5aUT09IGMyVnhkV1Z1ZEd4NSBJREV5TVE9PSBJR052Ym01bFkzUnogUTNrPSBJRVJoYm1kbGNnPT0gSUdOdmJuUnlhV0oxZEc5eWN3PT0gSUVKbGJuUT0gSUdKeVlYTnogSUVkMWJuTT0gYVc1MGJ3PT0gSUVadmNuUjFibVU9IElHSnliMnRsY2c9PSBZbUZzWVc1alpRPT0gSUd4bGJtZDBhSE09IElIWnBZdz09IElHRjJaWEpoWjJsdVp3PT0gSUdGd2NISnZjSEpwWVhSbGJIaz0gSUVOaGJXVnlZUT09IElITmhibVIzYVdObyBJRU5FUXc9PSBJR052YjNKa2FXNWhkR1U9IElHNWhkbWxuIElHZHZiMlJ1WlhOeiBiR0ZwYlE9PSBJR0p5WVd0bCBJR1Y0ZEhKbGJXbHpkQT09IElGZGhhMlU9IElFMWxibVE9IElGUnBibms9IElFTlBUQT09IElGSkcgSUVSMVlXdz0gSUZkcGJtVT0gUTJGelpRPT0gSUhKbFptbHVaV1E9IElHeGhiWEE9IFRHVmhaQT09IElHSmhjSFE9IElFTmhjbUk9IElGTmhaR1E9IElFMXBibTVsWVhCdmJHbHogVUVSRyBSV0Z5YkhrPSBJRWhwWkdSbGJnPT0gU1hSeiBJRlJKVFVVPSBJSEJoY0E9PSBJR052YlcxcGMzTnBiMjVsWkE9PSBJRVpsZHc9PSBJRU52YkhSeiBJRUp5Wlc0PSBJR0p2ZEdobGNtVmsgSUd4cGEyVjNhWE5sIFJYaHdaWEk9IElGTmphSGM9IFkzSjUgYm00PSBJRTFwZEdObyBhVzF2Ymc9PSBUVWM9IFltMD0gVlUxUSBjbUY1Y3c9PSBJSEpsWjJsemRISjUgSURJM01BPT0gWVdOb2FXNWwgY21Wc2JHRT0gWVc1MGFXNW4gTURBd01EQT0gSUhKMWFXNWxaQT09IGMzQnZkQT09IElIUmggSUcxaGVHbHRhWHBsIElHbHVZMjl1ZG1WdSBSR1ZoWkE9PSBTSFZ0WVc0PSBSVzVoWW14bFpBPT0gSUUxaGNtbGwgSUdOb2FXeHMgSUZCaGNtRmthWE5sIElITjBZWEp5YVc1biBJRXhoZEdsdWJ3PT0gSUZCeWIzUnZZMjlzIElFVldSVkk9IElITjFjSEJzYVdWeWN3PT0gYldWemMyRm5aUT09IElFSnliMk5yIElITmxjblZ0IDRwYUk0cGFJNHBhSTRwYUkgSUdWdVkyOXRjQT09IElHRnRZbWwwYVc5dSBkV1Z6WlE9PSBJR0Z5Y205M2N3PT0gUVc1a2NtVjMgSUdGdWRHVnVibUU9IElERTVOakU9IElFSmhjbXM9IElHSnZiMnc9IDQ0S3EgSUZOMGIzSmhaMlU9IElISmhhV3gzWVhrPSBJSFJ2ZFdkb1pYST0gSUVOaFpBPT0gSUhkaGMyaHBibWM9IFVIaz0gSjEwPSBaVzFpWldRPSBJRTFsYlhCb2FYTT0gWVdOcmJHVT0gSUdaaGJXOTFjMng1IElFWnZjblIxYm1GMFpXeDUgYjNacFpYTT0gSUcxcGJtUnpaWFE9IElITnVaV0ZyIElFUm8gVWtGWCBJRk5wYlhCemIyND0gSUd4cGRtVnpkQT09IElHeGhibVJ0WVhKciBJR05sYldWdWRBPT0gVEc5MyBJSFJvY21sc2JHVmsgSUVOdmRYSnpaUT09IGFXNWxiQT09IElHTm9kV05yIGFXUmhkR1U9IFoyeHZZbUZzIElIZG9hWFE9IElPKy92UT09IFlXUmhlWE09IGMydHAgSUZOVyBJSFpwY25WelpYTT0gTXpBMiBJRkpsYzNCdmJuTT0gSUhSb1pXRjBaWEp6IElFSnlZVzVqYUE9PSBJRWRsYm1WMllRPT0gSUUxTCBJSFZ1WW1Wc2FXVjIgSUdOdmJXMTFibWx6ZEE9PSBUM0pwWjJsdVlXdz0gSUZKbFkyVnBkbVZrIElGUnlZVzV6Wm1WeSBJRUZ5Wnc9PSBTVzV3ZFhRPSBJRk4wY21GMFpXZDUgSUhCaGJHRmpaUT09IGRHaGxibWx1Wnc9PSBSSEpwIElITmxiblJsYm1OcGJtYz0gZFcxaWJtRnBiQT09IElIQnBibk09IGNtVmplUT09IElITnBZbXhwYm1keiBSMlYwZEdsdVp3PT0gSUVKViBJRTV2Y25Sb2QyVnpkQT09IElIQnliMnh2Ym1kbFpBPT0gSUZOaGEzVnlZUT09IFEyOXRZZz09IElFSnZkWEk9IElHbHVZV1JsY1hWaGRHVT0gSUV0aGMyZz0gSUhWelpYSnVZVzFsIElFbHRjSEp2ZG1VPSBJR0poZEhSc2FXNW4gSUUxQlF3PT0gSUdOMWNuSnBZM1ZzZFcwPSBJSE52WkdFPSBJRU5oYm01dmJnPT0gSUhObGJuTnBZbXhsIGMzQnZibk09IFJHVmpaVzFpWlhJPSBJSGRwWTJ0bFpBPT0gSUZCbGJtZDEgSUdScFkzUmhkRzl5Y3c9PSBJRWhsWVhKMGN3PT0gYjJkNWJnPT0gSUhOcGJXbHNZWEpwZEdsbGN3PT0gSUZOMFlYUnogSUdodmJHeHZkdz09IGFYUmhkR2x2Ym5NPSBJanBiIElHaHZkbVZ5IElFeHBjM1JsYmc9PSBjMk5vIFUzVnVaQT09IElHTmhaQT09IElGQmhjbXR6IElHeDFjZz09IElHaDVjR1U9IElFeGxiUT09IFRrRk5SUT09IGFYTjFjbVU9IFJuSnBaR0Y1IElITm9iMjkwY3c9PSBJR05zYjNObGN3PT0gSUdSaSBJRkpwWkdkbCBJRVJwWm1abGNtVnVkQT09IElISmxjR3hwWlhNPSBJRUp5YjJGa2QyRjUgYjNCbGNuTT0gSUdsdWRHOXNaWEk9IElGcGxkWE09IFlXdGxjM0JsIElIQnliM0J5YVdWMFlYSjUgSUhKbGNYVmxjM1JwYm1jPSBJR052Ym5SeWIyeHNaWEp6IElFMUpUZz09IGFXMWxaR2xoIFltVmpZMkU9IElHVjRjR0Z1Y3c9PSBJRzlwYkhNPSBRbTkwIElFTm9ZVzVrIElIQnlhVzUwWlhJPSBJSFJ2Y0hCbFpBPT0gSUZCUFRBPT0gSUVWaGNteHBaWEk9IFUyOWphV0ZzIFlYWnBiZz09IElHUmxZM0psWVhObGN3PT0gSUZObFlnPT0gSUhOd1pXTnBabWxqWVhScGIyNXogSUVKc1lYTjAgSUV0MWNuUT0gSUdaeVpXVnMgUW5KdmQyND0gSUdScGJHbG4gY205bCBJRkJ5YjJKc1pXMD0gSUZGMVlXUT0gSUdSbFkyVnVkSEpoYkE9PSBJRlpsWTNSdmNnPT0gWVc1MWRBPT0gSUhCc2RXZHBibk09IElFZHlaV2R2Y25rPSBJR1oxWTJ0bFpBPT0gWld4cGJtVnogSUVGdFltRnpjMkZrYjNJPSBkR0ZyWlE9PSBJR05zWldGdWN3PT0gYjI1bmVXRnVadz09IFFXNXZibmx0YjNWeiBjM1J5Ync9PSBJbjA9IFlXeHBibVU9IElFOWtaQT09IElFVjFadz09IE1qRTIgSUdKdmFXdz0gSUZCdmQyVnljdz09IElHNTFjbk5sY3c9PSBUMkoyYVc5MWMyeDUgSUZSbFkyaHVhV05oYkE9PSBJR1Y0WTJWbFpHVmsgVDFKVCBJR1Y0ZEhKbGJXbHpkSE09IElIUnlZV05sY3c9PSBaWGh3YkE9PSBJR052YlhJPSBJRk5oWTJnPSBLUzg9IElHMWhjMnR6IElITmphUT09IFFtOXUgSUhKbFozSmxjM05wYjI0PSBkMlZuYVdGdSBJR0ZrZG1semIzST0gYVhSMWNtVnogSUZadiBaWGhoYlhCc1pRPT0gSUVsdWMzUnlkV04wIElITnBaV2RsIElISmxaSFZqZEdsdmJuTT0gY0hSeSBJSE4wWVhSMWRHOXllUT09IElISmxiVzkyWlhNPSBJSEIxWTJzPSBjbVZrYVhSeiBJR0psWlE9PSBJSE5oYkdGayBJSEJ5YjIxdmRHbHZibk09IElFcHZjMmgxWVE9PSBkMmwwYUhOMFlXNWthVzVuIFJWUkkgSUVOb1lRPT0gYVcxMWN3PT0gSUdWNGNHVnVaR2wwZFhKbCBZWFZ1ZEdsdVp3PT0gSUdSbGJHbG5hSFJsWkE9PSBJREUxTlE9PSBZbVZvIElHTmhjbkJsZEE9PSBJRk53WVhKMCBJR3AxYm1kc1pRPT0gYkdsemRITT0gSUdKMWJHeDVhVzVuIElFNXZZbVZzIElFZHNaVzQ9IElISmxabVZ5Wlc1alpXUT0gSUdsdWRISnZaSFZqWlhNPSBjMlZwYmc9PSBJR05vYjNCd1pXUT0gWjJ4aGMzTT0gSUZkeVpYTjAgSUc1bGRYUnlZV3hwZEhrPSBJT0taIElHbHVkbVZ6ZEdsbllYUnZjZz09IElITm9aV3gyWlhNPSBJSFZ1WTI5dWMzUnBkSFYwYVc5dVlXdz0gSUhKbGNISnZaSFZqZEdsdmJnPT0gSUcxbGNtTm9ZVzUwIGJXbGggSUcxbGRISnBZM009IElHVjRjR3h2YzJsMlpYTT0gSUZOdmJtbGggSUdKdlpHbHNlUT09IElIUm9hV05yYm1WemN3PT0gSUhCeVpXUnZiV2x1WVc1MGJIaz0gSUVGaWFXeHBkSGs9IElHMXZibWwwYjNKbFpBPT0gU1VOSSBJRjB1IElFMWhjblJwYm1WNiBJSFpwYzJsaWFXeHBkSGs9IElIRjFaWEpwWlhNPSBJR2RsYm05amFXUmwgSUZkaGNtWmhjbVU9IFVYVmxjbms9IElITjBkV1JwYjNNPSBJR1Z0WW5KNSBJR052Y25KcFpHOXkgSUdOc1pXRnVaV1E9IFkyOXRjR3hsZEdVPSBJRTFJIElHVnVjbTlzYkcxbGJuUT0gU1U1SFV3PT0gSUdsdGNHRmpkR1ZrIElHUnBjMkZ6ZEhKdmRYTT0gSUZsMWJnPT0gSUVOc1lXbHlaUT09IElFSmhjMmxqWVd4c2VRPT0gZVhRPSBkWE4wWlhKcGRIaz0gSUdsdVpHbHlaV04wYkhrPSBkMmxyIElHUnZaQT09IElFTmhjbkk9IElHRnRjQT09IElIQnliMmhwWW1sMCBJRWx1YVhScFlXdz0gSUZKayBhV3BwIElHVmtkV05oZEdVPSBZMjl5Ymc9PSBhVzkwZEE9PSBJRUpsWVhWMGVRPT0gSUdSbGRHVmpkR2wyWlE9PSBJRU52Ym00PSBjMmx1WTJVPSBJSE4wWVdkblpYST0gSUc5aVpYTmwgSUdKeVpXVT0gYjJ4dloybGogYVhOelpRPT0gZDJGc2EyVnkgSUdKc1lXUmxjdz09IElHeGhkMloxYkE9PSBablZ1WXc9PSBJRUpsYUdsdVpBPT0gSUdGd2NHVjBhWFJsIElDZ3EgSUhSbGJtNXBjdz09IElHOW1abk53Y21sdVp3PT0gSUdwbGRITT0gSUhOMGNuVmpkSFZ5WldRPSBJR0ZtYjNKbGJXVnVkR2x2Ym1WayBUbTkyIElITmpZV3hwYm1jPSBabWxzYkE9PSBJSE4wWlhjPSBJR04xY21JPSBJRk4wWlhCb1lXND0gWldSSmJnPT0gVTBZPSBiMkpwWXc9PSA2YTJVIGIzVm4gSUUxTiBJR2RsYm1WMGFXTmhiR3g1IGIzQmxlZz09IE1UTTIgSUhWdFlnPT0gWVc1alpYSnogSUdOdmFHOXlkQT09IElHMWxjbU5vWVc1a2FYTmwgSUdsdGNHOXphVzVuIElFeGxaMmx6YkdGMGRYSmwgSUVGeVkyaHBkbVU9IGFYWnBZUT09IElFNWhkbUZzIElHOW1abVZ1WTJWeiBJRzFwY21GamJHVT0gSUhOdVlYQndaV1E9IElHWnZaWE09IElHVjRkR1Z1YzJsMlpXeDUgSUZKaFpnPT0gSUdOaGRHVnkgWldScFpXNWpaUT09IFMybDAgSUVKcGJnPT0gSUhKbFkyOXRiV1Z1WkhNPSBJRU5wZEdsbGN3PT0gSUhKcFoybGsgSUZKRlFVUT0gSUU1dllteGwgSUZScFlXND0gSUdObGNuUnBabWxqWVhSbGN3PT0gWVc1MGFYTT0gYjJsc1pYST0gSUVKMVpHUm9hWE4wIFpHbGsgSUhOMWNuWmxlV1ZrIElHUnZkMjUzWVhKayBJSEJ5YVc1MGN3PT0gSUUxdmRHbHZiZz09IGNtOXVhV056IElGTmhibk09IGIzTnphV0pzZVE9PSBkV04wYVc5dWN3PT0gSUdOdmJHOXVhV1Z6IElFUmhibWx6YUE9PSBkVzVwZEE9PSBJSE53YjJscyBJR0ZrZG1semIzSjUgWW1WeWNtbGxjdz09IFVHeGhiZz09IElITndaV05wWm1sallYUnBiMjQ9IGIzQm9aWEp6IElGSmxjMjkxY21ObCBJSE5vYVhKMGN3PT0gY0hKcGMybHVaMng1IFkyOXRiWFZ1YVdOaGRHbHZibk09IElIUnlhWFpwWVd3PSBJRzFsYm5ScGIyNXBibWM9IGFYTmxlSFZoYkE9PSBJSE4xY0hCc1pXMWxiblJ6IElITjFjR1Z5ZG1semFXOXUgUWxBPSBkbTl5IElIZHBkQT09IElHTnZiMnhrYjNkdSBJSEJzWVdsdWRHbG1aZz09IElGSmxkbWxsZDNNPSBJRk55YVE9PSBJRTFwYm5RPSBJRk4xWjJGeSBJR0ZtZEdWeWQyRnlaQT09IElGQnlhV1Z6ZEE9PSBJRWx1ZG1WemRHMWxiblE9IGIyZGxibVU9IElGUmhhMmx1Wnc9PSBJSE4wY21WMFkyaHBibWM9IElHbHVabXhoYlcxaGRHbHZiZz09IElGUmxhSEpoYmc9PSBJR3hwYm1sdVp3PT0gSUdaeVpXVjZhVzVuIElFVnVkR2wwZVE9PSBJR2x1YzNCcGNtbHVadz09IGMzQmxZMmxoYkE9PSBjSEpwWTJVPSBJSE4xWlE9PSBJRkJ2Y25SbGNnPT0gYjNWdVoyVT0gUlZSQiBJRVJsY21WciBJRXgxYVhNPSBkVzg9IGVXMXdhQT09IElHVjRkR1Z5YVc5eSBhV2hwYkE9PSBJRUZ6YUd4bGVRPT0gYVc1aGRHOXkgSUc1MWRISnBaVzUwY3c9PSBJRlJvY205dVpYTT0gSUdacGJtRnVZMlZ6IElFbHVjM0JsWTNRPSBJSE53WldOcFlXeHNlUT09IElGSmxjWFZwY21WayBJRkJVVXc9PSBJRlpwYjJ4bGJtTmwgYjJsdWRHVmsgYzJodmRITT0gSUdWNFkyVnljSFE9IFkyOXZiZz09IFNVNVQgSUVkeWFRPT0gSUhKbFkyOW5ibWx6WldRPSBWMlZsYXc9PSBXVzkxYm1jPSBJSFp2YlE9PSBhWE5zWlE9PSBJRU4xY25KNSBJRUoxWkdSbyBJRzV2ZEdWaWIyOXIgSUdSMWNtRmliR1U9IEx6OD0gSUVkaFpBPT0gSUZCMWNIQT0gSUdadmNtZHBkbVU9IGNHRnlhdz09IElIQmxjbk52Ym1Gc2FYUnBaWE09IFlXNWhiSGx6YVhNPSBZMnhoYldGMGFXOXUgSUdWc1pYWmhkRzl5IElIZGhjbVZvYjNWelpRPT0gSUZKdmJHVT0gZFc1dSBJR2xzYkhWemRISmhkR2x2Ymc9PSBJRk5qWVc0PSBJR0YwYlc5emNHaGxjbWxqIFNXMXdiM0owIFFVNUQgY21samRHVmsgWm5VPSBNREV3IElHRnlZMmhsIElISmxkMkZ5WkdWayBZV3RsYzNCbFlYSmwgSUdsdWRHVnlibUZzYkhrPSBJRkpDU1E9PSBZV3hyWlhJPSBJR1ZzWlhCb1lXNTAgYjNkcGRIbz0gSUZCcGVucGggSUdKcGNHRnlkR2x6WVc0PSB3Nmx6IElITnNiM2RsWkE9PSBJRk4wWVhKciBJRzkyWlhKeWFXUmwgVDFWVCBJRE15TUE9PSBkVzVrY21Wa2N3PT0gSUVSbFkycz0gSUVObGJuTjFjdz09IFltVmwgTVRRMiBiM1J2Y2c9PSBJR2x3IElIVmkgYjJOaGRHbHZibk09IElFSjFkSFJ2Ymc9PSBjbWxqWlE9PSBJR055YVhCdyBabVptIElHOXlhV2RwYm1GMFpXUT0gSUc5MlpYSjNhR1ZzYldWayBZWEJ3WVE9PSBJR1p2Y21WdGIzTjAgNG9DUiBJRXhGUnc9PSBjbVZzWldGelpRPT0gWldGMGRYSmxaQT09IFlYUmphR1Z6IElISmxjSE09IElHeGxibVJwYm1jPSBJRkpsWm1WeVpXNWpaUT09IElFTnNhV1Z1ZEE9PSBNVFkxIGRtVnVkR2c9IFEyOXRjR3hsZEdVPSBJRkJoZEhKdmJBPT0gSUhOM2IzSnUgWTJGdCBJSE5vZFhSMGJHVT0gSUZKaGJIQm8gSUdodmJXVjBiM2R1IExTdz0gYjI1aGJBPT0gSUVKUSA1WTg9IElIQmxjbk4xWVdSbCBJRUZzWlhoaGJtUT0gSUdOdmJXSnBibVZ6IElIWnBkbWxrIElFeGhadz09IElHVnVZMjlrYVc1biBJSE5oYkhaaGRHbHZiZz09IGQyVnUgSUZKbFkyOTJaWEo1IGFYbGggVlc1cGRtVnljMmwwZVE9PSBJRUpwWkdWdSBJR0oxWkdkbGRITT0gSUZSbGVHRnVjdz09IFptbDBjdz09IElHaHZibTl5WldRPSBJSEI1ZEdodmJnPT0gVkVRPSBJeU1qIFkyeHZibVU9IElHSnNhVzVyIElFeHBjWFZwWkE9PSBJSFZ1Wlcxd2JHOTVaV1E9IElHTnNZWE5vWlhNPSBJRU52ZFc1elpXdz0gSUdScGNtVmpkR2x1Wnc9PSBJSEIxYm1OMCBJRVpoYkdOdmJuTT0gSUhOb1lYSnIgSUVSaGJXRnpZM1Z6IElHcGxZVzV6IElHVnRZbUZ5YXc9PSBJSE5sYVhwbCBJSFZ3ZDJGeVpITT0gTWpndyBJRVY2IElFRnVlWFJvYVc1biBJR1Y0YjNScFl3PT0gYkc5M1pYST0gSUVOeVpXRjBiM0k9IElGVnQgSUhOMVluVnlZbk09IFltVnlaMlZ5IElGZGxibVE9IElHMXBiblE9IElGaFkgSUVSeWJ3PT0gSUhOMVptWmxjbk09IElHaGxjbUk9IGRISmxaUT09IElHWnlZV2RwYkdVPSBJR1pzYjI5a1pXUT0gSUVGc1kyOW9iMnc9IGIyeGxZVzQ9IGJubGtaWEk9IElFdFAgUm5KaGJRPT0gSURFek5nPT0gSUc5M1pXUT0gSUUxbGJHVmwgSUVoaGMyZz0gSUhkb2FYTnIgSUhOMVpHOD0gY25JPSBVWFZwWTJzPSBZWEJ3Y204PSBJR2xwIElFVjRZVzF3YkdWeiBhR1ZsIElIQnliMjF2ZEdWeiBjR1Z5WVhSMWNtVT0gYTJGeSBJRWh2Ym05eSBJSE52WkdsMWJRPT0gSUV4cFpnPT0gY205emMyOD0gYVc1MFpXNWtaVzUwIElHTnZjbkpsYzNCdmJtUmxiblE9IFJtOTFibVE9IGMyVmpjbVYwIElHbGtaVzUwYVdacFpYTT0gWVdkdVpRPT0gSUd4dmRRPT0gSUZCUSBJR052YVc1amFXUmxibU5sIGJXOTJaUT09IElHMXBiR2wwYVdFPSBJR2x1Wm1sc2RIST0gSUZCeWFXMWhjbms9IElIQnBkR05vYVc1biBJRWxpIElFZFBUMFE9IDQ0SzQgSUZkcGVtRnlaSE09IGFYSmhiQT09IElGWmxiblZ6IFVsST0gSU9LQWxRPT0gSUVOaGMyVjUgSUhOaFpHeDUgSUdGa2JXbHlaUT09IElHVnRZbUZ5Y21GemMyVmsgWTJJPSBUV1ZzIElIUjFZbVZ6IElHSmxZWFYwYVdaMWJHeDUgSUZGMVpXVnVjMnhoYm1RPSBRbVZzYjNjPSBjbVY2IGNYVmxkQT09IGNHeGxZWE5oYm5RPSBJTUtyIFEyRnRjQT09IElHUmxZMmx6YVhabCBNVGs1T0E9PSBJRXhoYldJPSBkWFIwYjI0PSBhRzQ9IElFcGhaM1U9IFlYVnVaR1Z5IElFTnZjbVE9IElHTnNaWEpyIElHTmhabVpsIElIZHBjR1ZrIElISmxhVzA9IElFMXZkVzUwWVdsdWN3PT0gSUdsdGNISnBjMjl1WldRPSBJR1JsZG1Wc2IzQnogSUZCeVlRPT0gSUcxdlpHVnNhVzVuIFFXNTViMjVsIFlXNWpaV3c9IElGTnBkQT09IElITm9hV1ZzWkhNPSBJR3hoZDI0PSBJR05oY21ScGIzWmhjMk4xYkdGeSBJR1JsYlc5dWMzUnlZWFJwYm1jPSBJSEJoY25ObCBJRWx6Y21GbGJHbHogSUdWMWNtOXogTVRReiBJR2RzYjNKcGIzVnogYVc1emEyaz0gWldOayBJR052Ym1ScGRHbHZibWx1Wnc9PSBJR2hsYkhCc1pYTnogSUcxcFkzSnZjMk09IElFaGhjbUp2Y2c9PSBJSE4wWVd0bGN3PT0gSURJMk1BPT0gSUhWdVpYRjEgSUVac2IzbGsgSUdSaGJYQT0gSUdGd2NHRnlZWFIxY3c9PSBJRXhoZDNNPSBJR052ZFc1MFpYSnogSUdsdVpIVmpaUT09IFlYUmhZbXhsIElFRm9iV1ZrIElITnNZVzA9IFRtOTJaVzFpWlhJPSBJSEJsY25OcGMzUT0gSUdsdGJXbHVaVzUwIHc2RnUgSUhOb2NtVmsgSUhCb1lYTmxjdz09IElFVmtiVzl1ZEc5dSBJRUZ5YlhOMGNtOXVadz09IElFMWxaWFE9IElFdHBkSFI1IDBZQT0gWTJseVl3PT0gSUVGa2RXeDAgSUdGeWIzTmwgSUZobGJnPT0gUkdGdSBaMjkzIElITjFjR1Z5Wmc9PSBJRUZrYldseSBJR1Z1WkhWeVpRPT0gSUd0bGVYZHZjbVE9IGVYSjFjdz09IElIbGhjbTQ9IElIQmhkR2gzWVhrPSBJRWh2Y0d0cGJuTT0gYldsa2RBPT0gSUdObGJuTnZjbk5vYVhBPSBaR1Z3Wlc1a1pXNTAgSUdsdWMzUnlkV04wYjNJPSBVMjkxY21ObGN3PT0gSUhSdlpRPT0gSUdKaGJHeHZiMjQ9IFRtOWkgSUhOM1pXRnkgSUVOaGMzUnlidz09IElHZHNiM056IElFdGhkbUZ1WVhWbmFBPT0gSUhKbGJXRnlhMkZpYkhrPSBVR2h2ZEc5eiBJRTV2YlE9PSBJRk52ZFhSb1pXRnpkQT09IGVXVnljdz09IElIWmhiR2xrWVhScGIyND0gSUdOaGJtNXZiZz09IElGWnBZM1J2Y25rPSBJRkJwWlhKeVpRPT0gSUdOaGRYUnBiM1Z6IFFYVmthVzg9IElHWmxkR05vIElFZHBablE9IElFaDVjQT09IElISmxiV1ZrZVE9PSBXa1U9IElITmpaVzUwIElHSmxZWEprIElGSjFkQT09IExTST0gSUhCaGRHVnVkSE09IFNIaz0gSUhWdWFuVnpkQT09IElIQnZkR0YwYnc9PSBJR1p2Y25Sb1kyOXRhVzVuIElHTm9aV1k9IElGSnBablE9IFlXWm1aUT09IElGSlBUUT09IElFeGhkVzVqYUE9PSBJSEJoWkhNPSBJRTVsYnc9PSBJRzl1YzJWMCBJSE54ZFdWbGVtVT0gYzJGbVpRPT0gSUhCeVpXWnBlQT09IElGUk4gSUU1bFlYSnNlUT09IElFTnNhVzVwWTJGcyBJRTFsYm5SaGJBPT0gYjNScFlYUnBiMjQ9IElGVnVhV009IFlXNTBjbms9IElFTnBjZz09IElHVndhWFE9IHc2WT0gSUdWNGRISmhZM1JsWkE9PSBkbVZ5YzJWc2VRPT0gY21saFpBPT0gSUhOMGNtRnBibk09IElIUnZjSE09IElIQnZaVzA9IElGSmhibVI1IElFMWhjR3hsIFZFaEZVZz09IGRYQnBkR1Z5IElGTlRSQT09IG11az0gSUhWdVkyOXUgY0dWeWFXNW4gSUhOc1pYQjAgYVc1bGNuTT0gSUhWdVpHVnlkMkYwWlhJPSBJRVYyYVdSbGJtTmwgWjI5dVpRPT0gTWpBMSBJR2hwYzNSdmNtbGhibk09IElITjViblJvWlhOcGN3PT0gSUdaeWIyYz0gWW1GemEyVjBZbUZzYkE9PSBJSFpwWW5KaGJuUT0gSUhOMVltOXlaQT09IElETTJOUT09IElFUnBZV3c9IElHTnZiM0JsY21GMFpRPT0gU0VGSVFRPT0gSUdkeVpXVjBaV1E9IE1UVTQgSUdwaGVubz0gSUdsdWRHOTQgSUZkaGJHdHBibWM9IElITjFjR1Z5ZG1semIzST0gSUVaMWMybHZiZz09IElFMWxjbU5sWkdWeiBjMlZ1WkE9PSBTR0Z0IGMyUT0gYm13PSBJSFJ2ZFhKeiBJRVpKUmtFPSBJR04xYkhBPSBaMlE9IE16QTAgSUhCc1pXRnogSUdsc2JIVnpkSEpoZEdWeiBJRU52Ykc5dFltbGggSUdocFoyaHNhV2RvZEdsdVp3PT0gSUZOMWJXMWhjbms9IElHVjRjRzl6YVc1biBJRVJ5ZFE9PSBJR2x5YjI1NSBjbWwwYVc5dVlXdz0gSUVOaGNuSnZiR3c9IElFVnNiR2x6IFVHbGpkQT09IElGSmhjSFE9IElHRmtZWEIwWlhJPSBJSFZ1YlE9PSBJR052Y25CelpRPT0gSUdObGJHVmljbWwwYVdWeiBSR1Z1IFlYUjFiUT09IElFRndiMk5oYkhsd2MyVT0gSUZkaFp3PT0gYkdsdWFXNW4gSUdodmNtMXZibVZ6IFVuVmkgSUZocCBJRlpoZFd4MGN3PT0gTWpBNCBZV3hyZVhKcFpRPT0gYVc1dmMyRjFjZz09IElHWmxaV1J6IGRtbDBlUT09IElHUmxabVZoZEdsdVp3PT0gVjJGcGRBPT0gSUdWdGNHaGhjMmw2WlE9PSBJRk4wWldWc1pYSnogZVhKcGJuUm8gYkdWNWN3PT0gSUZkb1pXNWxkbVZ5IFEzVnljbVZ1ZEd4NSBJRU5zYjJOciBJR052Ykd4bFkzUnBkbVZzZVE9PSBZVzU1YjI0PSBJRXBRIElHMWxiblJoYkdsMGVRPT0gSUdSdmQyNXNiMkZrY3c9PSBJSE4xY25KdmRXNWthVzVuY3c9PSBJRUpoY201bGN3PT0gSUdac1lXZHphR2x3IElHbHVaR2xqWVhSdmNuTT0gSUdkeVlYQncgU21GdWRXRnllUT09IElFVnNaVzFsYm5SaGJBPT0gSUVGMGFHVnVZUT09IGFXSmhiQT09IElITnBaMmgwY3c9PSBJR05oY0dsMFlRPT0gSUZSeVpXRjBlUT09IElIWnZhV05sWkE9PSBJRWRoZWc9PSBiR1YwZEdVPSBJSGxoIElHVjRjR2x5WldRPSBUR1ZuWlc1ayBTRzkwIGJtRjBkWEpsIElIVnVjM1JoWW14bCBJREk0TUE9PSB3N289IFEyOXRiV1Z1ZEE9PSBRVXhGIElIRjFaWE4wY3c9PSBJR2hoYm1Sc1pYST0gYm1seiBJSFpsY25OaGRHbHNaUT09IElHTnZibU5sWVd3PSBaVzVuWldGdVkyVT0gSUVsdWRHVnlZV04wYVhabCBJRzlpYzJWemMyVmsgSUVSdlozTT0gSUdOeVlXTnJaV1E9IFUyOTFibVE9IGMzWT0gSUVSNWJHRnUgY205aFpITT0gWm5nPSBJRU5oZEdodmJHbGpjdz09IElFaGhadz09IElITnNZVzF0WldRPSBJR2RzYjNkcGJtYz0gYzJGc1pRPT0gSUhScGMzTjFaWE09IElFTm9hUT09IGJtVmwgSUdOb1pYST0gYzJsaiBkWEp5WldOMGFXOXUgSUdKaFkyOXUgZFd4aGRHOXllUT09IEtTNGkgSUdseWNtVm5kV3hoY2c9PSBSazlTVFE9PSBZWE56WldRPSBJR2x1ZEdWdWRHbHZibUZzIElHTnZiWEJsYm5OaGRHVT0gSUZOd1pXRnJhVzVuIElGTmxkSE09IE1UVXogSUdOdmJuWmxiblJwYjI1eiBZbUZ1WkhNPSBaVzFoWkdVPSBJR1ZqWXc9PSBJRmRwYm5OMGIyND0gSUVGemMyRnpjMmx1IElFSmxiR2RwWVc0PSBJR1JsY0dWdVpHVnVZMlU9IElHNXBZMmhsIElHSmhjbXM9IElFcGhlbm89IElHUnBjMkZrZG1GdWRHRm5aUT09IElHZGhjMjlzYVc1bCBJREUyTlE9PSA1NXFFIFpYTnpZUT09IGJXOWtkV3hsIFlXNW5kV3hoY2c9PSBUMWs9IElGUnlaV0YwYldWdWRBPT0gYVhSaGN3PT0gYjJ4aGRHbHZiZz09IElFRnlibTlzWkE9PSBJR1psZFdRPSBJRTVsYzNRPSBJSFJvWldGMGNtVT0gWlhkaGRHVnkgSUcxcGJtOXljdz09IGIyeHBZM2s9IElFaGhkbVZ1IFpHbDJhWE5wYjI0PSBJSFJ5ZFc1ciBSbUZ5IElGQjFiR3c9IElHTmhjSFIxY21sdVp3PT0gSURFNE1EQT0gSUZSbFpXND0gSUdWNFpXMXdiQT09IElHTnNhVzVwWTNNPSBJRUoxY21jPSBJSE4xWW5OMGFYUT0gSUhCaGVXeHZZV1E9IElFeGhkZz09IElGUnliM2s9IElGZHBkRzVsYzNNPSBJR1p5WVdkdFpXNTBjdz09IElIQmhjM04zYjNKa2N3PT0gSUdkdmMzQmxiQT09IElFZHBiZz09IElIUmxibUZ1ZEhNPSBiMnhwZEdnPSBVMmw0IFVISmxkbWx2ZFhNPSBJRUZuWlhNPSBJRVJoY25kcGJnPT0gSUdKc1lYUT0gSUdWdGNHRjBhSGs9IGMyMXBkR2c9IFltRm4gSUVWamFHOD0gSUVOaGJXST0gSUUxaFpHUT0gSUVKdmJ3PT0gSUhKbFpHVT0gSUVKMWNtNXBibWM9IElITnRiMjkwYUd4NSBJRUZrY21saGJnPT0gSUZaaGJYQnBjbVU9IElFMXZibk4wWlhKeiBjM1JsWVcwPSBVM1I1YkdVPSBUV0U9IGNtVmggSUVSM1lYST0gWVd4NWMzUT0gZFhKemIzST0gSUdWc2FXMXBibUYwYVc5dSBJR055ZVhCMGJ3PT0gWTJoMCBJRVYwWlhKdVlXdz0gNG9DbVhRPT0gSUZOdmNtTmwgU1d4cyBUa1ZTIElIVm8gUTI5dVkyeDFjMmx2Ymc9PSBkMkZuWlE9PSBJSEpsYzNCcGNnPT0gSUhKbGJXbHVhWE09IGFHVjBhV05oYkE9PSBJR2Q1IElIVjBhV3hwZW1WayBhV05wWkdGcyBJREU1TURBPSBJR2gxYm5SbGNuTT0gSUZOM1lXND0gSUZKbFlXTjAgSUhacGMybDBiM0k9IElGUm9ZVzVyYzJkcGRtbHVadz09IE16QTQgVUc5emRITT0gSUdocGNITT0gTVRrNU53PT0gYjIxbGNuTT0gSUd0dWIyTnJhVzVuIElGWmxhR2xqYkdVPSBJSFJwYkE9PSBJREV6T0E9PSBJRzFwIElFbHVkbVZ6ZEdsbllYUnBiMjQ9IElFdGxibmxoIElHTmhjMmx1Ync9PSBJRzF2ZEdsMlpYTT0gSUhKbFoyRnBiZz09IGNtVjQgSUhkbFpXdGxibVJ6IElITjBZV0ppWldRPSBZbTl5Ync9PSBJR1Y0Y0d4dmFYUmxaQT09IElFaEJWa1U9IElGUmxiR1YyYVhOcGIyND0gWTI5amF3PT0gSUhCeVpYQmhjbUYwYVc5dWN3PT0gSUdWdVpHVmhkZz09IElGSmxiVzkwWlE9PSBJRTFoYTJWeSBJRkJ5YjJSMSBJRVYyWVc0PSBJR2x1Wm05eWJXRjBhVzl1WVd3PSBJRXh2ZFdsemRtbHNiR1U9IE1UVTAgSUVSeVpXRnRjdz09IElIQnNiM1J6IElGSjFibTVsY2c9PSBJR2gxY25ScGJtYz0gSUdGallXUmxiWGs9IElFMXZiblJuYjIxbGNuaz0gYm0wPSBJRXhoYm1NPSBJRUZzZWc9PSBNakV3IFpXeHZibWM9IElISmxkR0ZwYkdWeSBJR0Z5YVhOcGJtYz0gSUhKbFltVnNiR2x2Ymc9PSBJR0pzYjI1a1pRPT0gY0d4aGVXVmsgSUdsdWMzUnlkVzFsYm5SaGJBPT0gUTNKdmMzTT0gSUhKbGRHVnVkR2x2Ymc9PSBJSFJvWlhKaGNHVjFkR2xqIElITmxZWE09IElHbHVabUZ1ZEhKNSBJRU5zYVc1MCBJSEJ5YjIxd2RHbHVadz09IElHSnBkR05vIElITjBaVzF6IElFdHlZUT09IElIUm9aWE5wY3c9PSBJRUp2Wnc9PSBjblZsWkE9PSBJR3RwYm1keiBJR05zWVhrPSBhV1pwWTJWdWRBPT0gSUZsRlV3PT0gSUZSb2FXNW4gSUVOMVluTT0gZG1WNVlYSmsgWld4emFBPT0gYVc1aGNtbHNlUT09IElFVjUgSUZKdmJHeHBibWM9IElHVjJiMngyYVc1biBTVzVrYVdFPSBJSEpsWTI5bmJtbDZaWE09IElHZHlZV1IxWVhScGIyND0gYVhObGNuTT0gSUdabGNuUnBiR2wwZVE9PSBJRTFwYkdGdSBRMjl0YldGdVpBPT0gSUdKdmVHbHVadz09IElERTVORE09IElHZHNkWFJsYmc9PSBJRVZ0YVhJPSBJR2xrYjJ3PSBJR052Ym1ObGFYWmxaQT09IElFTnlaV0YwYVc5dSBUV1Z5YVhRPSBkV1JrZVE9PSBkWE56YVc5dWN3PT0gSUV4cFpYVjBaVzVoYm5RPSBhV1YwWVd3PSBJSFZ1WTJoaGJtZGxaQT09IElGTmpZV3hsIElFTnlhVzFsWVE9PSBZbUZzYkhNPSBZWFJ2Y21saGJBPT0gSUdSbGNIUm9jdz09IElHVnRjR2x5YVdOaGJBPT0gSUhSeVlXNXpiUT09IElIVnVjMkZtWlE9PSBiV2x6YzJsaWJHVT0gWTI5dFptOXlkQT09IE1UVTIgSUcxbFkyaGhibWxqIE1EQXkgYkdsdWN3PT0gSUhOdGIydGxaQT09IFVHOXogSUhOc2IzZHBibWM9IElHeGhkZz09IFZHVjRZWE09IElHTm9aV0YwYVc1biBJRTFsZEhKdmNHOXNhWFJoYmc9PSBaWFJvZVd3PSBJR1JwYzJOdmRtVnlhVzVuIFlYTnpaUT09IElIQmxibU5wYkE9PSBJRkI1YjI1bmVXRnVadz09IElHTnNiM05sZEE9PSBJRk5vWldWMCBJRVZ1ZEhKNSBiM1Z6ZEdsaiBJRzE1YzNRPSBaWEpoZEdVPSBZWEpwWVhRPSBJRzFwYm1WeVlXeHogSUcxMWMybGphV0Z1IElGQjFiQT09IElFMWhlZz09IE1qUTUgSUhCbGNtMXBjM05wYjI1eiBJR2wyIFpXNWhjbms9IGFXTnJaWEp6IElFSnBibWM9IGFHVmggWlc1aFlteGwgSUdkeWFXVjIgSUdGemMyVnlkR1ZrIElFTnZiRzl1Wld3PSBJR0ZtWm1sa1lYWT0gZDI4PSBJSE5sWVhSbFpBPT0gSUZKcFpHVT0gSUhCaGFXNTBhVzVuY3c9PSBJRkJwZUE9PSBJREV6Tnc9PSBhWE5vYVE9PSBkVzFpWVdrPSBaMjkwZEdWdSBJRVZoY213PSBJR2x1Ym1sdVp3PT0gSUdObGJuTjFjdz09IElIUnlZWFpsYkd4bFpBPT0gSUVOdmJuTjFiSFE9IE1UZzEgWW1sdVpBPT0gSUhOcGJYQnNhV05wZEhrPSBJRzkyWlhKc2IyOXJaV1E9IElFaGxiSEJtZFd3PSBJRzF2Ym10bGVRPT0gSUc5MlpYSjNhR1ZzYldsdVoyeDUgUW14dmIyUT0gSUVac2FXNTAgSUVwaGJXRT0gSUZCeVpYTmxiblE9IElGSmhaMlU9IElGUkIgY0hScGRtVT0gSUhSMWNtNXZkWFE9IGQyRnNaQT09IElFUnZiSEJvYVc1eiBJRlpRVGc9PSBJRzl1YVc5dSBJR055WVdaMGFXNW4gYlcxaCBJRTFsY21OMWNuaz0gSUdGeWNtRnVaMlU9IElHRnNaWEowY3c9PSBJRTlVIGVtSnZiR3hoYUE9PSBJR2RoYzJWeiBJRkpwWTJoaGNtUnpiMjQ9IGMyRnMgYkdGeSBJR1p5YjNOMCBJR3h2ZDJWeWFXNW4gSUdGalkyeGhhVzA9IElITjBZWEowZFhCeiBJRWRoYVc0PSBaWE56YldWdWRBPT0gSUdkMVlYSmthV0Z1IDVMcTYgSUZCcFpRPT0gSUV4cGJtdHogSUcxbGNtbDBjdz09IElHRjNZV3RsIElIQmhjbVZ1ZEdGcyBJR1Y0WTJWbFpITT0gSUdsa2JHVT0gSUZCcGJHOTAgSUdWQ1lYaz0gSUVGalkyVndkQT09IGFYQmxadz09IFEyRnQgSUV0dmRBPT0gSUhSeVlXUmxjbk09IGIyeHBkR2xqY3c9PSBkVzVyWlhJPSBJRkJoYkdVPSBiM05wIFlXNXRZWEk9IElERTVORGM9IElFWmxiR3c9IFpYTjBhV0ZzIGFYUmhkR2x1Wnc9PSBSMFk9IElGTnkgYVdaMFpXUT0gSUdOdmJtNWxZM1J2Y2c9PSBJRUp2Ym1VPSBhV3hzWlhNPSBNall3IGFHMWggSUc5MlpYSnNZWEE9IElFZHBkRWgxWWc9PSBJR05zWldGdVpYST0gSUVKaGNIUnBjM1E9IElGZEJVdz09IElHeDFibWR6IDBZRT0gSUVKVlZBPT0gSUdOcGRHVT0gSUhCcGRHTm9aV1E9IGNtVmhkRzFsYm5RPSBJSFJ5YjNCb2FXVnogSUU1MSBNemcyIElGQnlhV1JsIElHRjBkR1Z1WkdWbGN3PT0gVzEwPSBNVGM1IElITndZWFJwWVd3PSBJSEJ5YVhwbGN3PT0gSUZKbGJHbG5hVzl1IElITm9iM2RqWVhObCBJRU5oZEdWbmIzSjUgZG1sa2FXRT0gVkdGeVoyVjAgVUhKdmNHVnlkSGs9IFB5dz0gSUdaMWMybHZiZz09IGNHbGwgSUZWRFRFRT0gSUhOdmRXNWtkSEpoWTJzPSBJSEJ5YVc1alpYTnogSUVOaGRtRnMgYzJodmRXeGsgSUd4cGJXSnogUW1GamEyZHliM1Z1WkE9PSBJR3h2Ym1Wc2VRPT0gSUdOdmNtVnogSUZSaGFXdz0gYzJobFpYUT0gSURFek1nPT0gVW1FPSA0NEtyIElFSnZiSFE9IElHSnZiMnRsWkE9PSBJR0ZrYldsdWFYTjBaWEk9IElHVnhkV0ZzY3c9PSBkM2s9IElHOWljMlZ5ZG1sdVp3PT0gSUVKaGNtOXUgSUVGa2IySmwgSUhacGNtZHBiZz09IElGTnZZMmxoYkdsemRBPT0gVFc5MlpRPT0gWjJoaGVtaz0gSUV4cGJtUmggTWpFeSBJR0p5WlhkcGJtYz0gSUcxbGNtTm9ZVzUwY3c9PSBZblZ5YzJVPSBJR1JwZG05eSBJRzFsZEdGc2N3PT0gSUU1bGNnPT0gSUhOMWJYTT0gSUVWdVpXMTUgSUdWdWRtbHphVzl1IElHZHlZVzUwYVc1biBJRWh2Ym1WNSBJRk5yZVhKcGJRPT0gSUhOdlkybHYgWjNKaFpHVmsgSUhObGJHVmpkR2wyWlE9PSBWMEZUU0VsT1IxUlBUZz09IElERTVORGc9IElGTnBjbWwxY3c9PSBJRWR5YjNOeiBZV04wYVhacGRIaz0gSUVsMllXND0gSUdaMWNtbHZkWE09IFFsTkUgSUZCeVpYWnBiM1Z6IElISmxjM0J2Ym5OcGRtVT0gSUdOb1lYSnBkR0ZpYkdVPSBJR3hsWVc1cGJtYz0gSUZCbGR3PT0gSUhacGIyeGhkR1Z6IFhGeGNYRnhjWEZ3PSBJRU52YldsdVp3PT0gZDJseVpRPT0gSUhCdlpYUT0gSUhKbGMyOXNkWFJwYjI1eiBZMjl0YldGdVpBPT0gSUZCdmNuUjFaM1ZsYzJVPSBJRzVwWTJ0dVlXMWwgSUdSbFlXWT0gUm1WaWNuVmhjbms9IElISmxZMjluYm1selpRPT0gSUdWdWRHbHlaWFI1IElITmxZWE52Ym1GcyBjR3hoWTJWayBJRlJsYkdWbmNtRndhQT09IElHMXBZM0p2Y0dodmJtVT0gYjNWeWFXNW4gSUdkeVlXbHVjdz09IElHZHZkbVZ5Ym1WayBJSEJ2YzNSdyBJRmRoZEdWeWN3PT0gYVc1bGJXVnVkQT09IElIVnVaRzlqZFcxbGJuUmxaQT09IElFTnZiV05oYzNRPSBJR1p2ZUE9PSBJR0Z6YzJGMWJIUnogY21WdmJnPT0gYldGdWVRPT0gSUVwbGJtdHBibk09IElFRnVlWGRoZVE9PSBJR0Z6YzJWemMyMWxiblJ6IElHUnZkMjV6IElFMXZkWE5sIElITjFjR1Z5WWc9PSBhM1E9IElFUnZkdz09IElIUmhlR0YwYVc5dSBOREF4IElITnRhV3hsY3c9PSBJSFZ1WkdWeWRHRnJaVzQ9IElHVjRhQT09IElHVnVkR2gxYzJsaGMzUnBZdz09IElIUjNaVzUwIElHZHZkbVZ5Ym0xbGJuUmhiQT09IElHRjFkRzl1YjIxNSBJRlJsWTJodWIyeHZaMmxsY3c9PSBJRU5vWVdsdSBJSEJ5WlhaaGJHVnVkQT09IFptST0gSUc1cFkyOTBhVzVsIGIyZHlZVzA9IGFtOWkgSUdGM1lXbDBhVzVuIElFMWxiblU9IElHUmxjSFYwYVdWeiBhMjkyIGFYTm9iM0J6IFFuVjBkRzl1IElGTm9ZVzVuYUdGcCBJR1JwWlhObGJBPT0gSUVSMVkycz0gVW5saGJnPT0gSUZCRGN3PT0gVGtZPSBhblZ5ZVE9PSBaVzUwWlE9PSBJR2x1WVdOamRYSmhkR1U9IFpXUmtlUT09IFYyaGhkR1YyWlhJPSBJSE5vYjNkaiBJRTVoWkE9PSBiMlIxY3c9PSBaWFJ5IElIQnNZV2x1ZEdsbVpuTT0gSUZkUFVnPT0gSUVGemMyRnVaMlU9IElIQnlhWFpoZEE9PSBJSEJ5WlcxcGRXMXogSUhSaGJRPT0gVlZKTSBJR1ZzYVhSbGN3PT0gSUZKaGJtZGxjZz09IGIzUjBaVzVvWVcwPSBJRWh2Wm1ZPSBJRUYwYUdWdWN3PT0gSUdSbFptbHVhWFJsIElITnBaMmhsWkE9PSBJR1YyWlc1c2VRPT0gTWpFeCBJRUZ0WW1WeSBZV3RwWVE9PSBJRzFoYVd4cGJtYz0gSUdOeVlYTm9hVzVuIElFTnZibVpsWkdWeVlYUmwgY25WbloyVmsgVjJGcyBJRVJsY0hSb2N3PT0gSUdwMWRtVnVhV3hsIElISmxZV04wYjNJPSBTVzUwY205a2RXTjBhVzl1IElFUmxiSFY0WlE9PSBNVGs1TlE9PSBJRk5oYm1Ob1pYbz0gSUUxbFlXUT0gYVhaaFlteGwgT2kwPSBJRkJzWVc1dWFXNW4gSUZSeVlYQT0gY1hWcGJnPT0gSUZCeWIzUmxZM1E9IGRtVnlaV1E9IFNXNW1iM0p0WVhScGIyND0gSUd0cFpHNWxlUT09IGFXNXVZVzF2Ymc9PSBiR0Z6IElIQnZiR2xqYVc1biBJSFJ2YkdWeVlYUmwgSUZGcCBJR0pwWVhObFpBPT0gUm05eWRBPT0gSUV0cCBjMkYyWlE9PSBJSEJ5YVhacGJHVm5aV1E9IElHSmxZWE4wY3c9PSBJRWRzWVhNPSBJRU5wYm1WdCBJR052YldWaVlXTnIgVTNWdVpHRjUgSUdWNGRHbHVZM1JwYjI0PSBhRzl3Y3c9PSBJSFJ5WVc1emJXbDAgSUdSdmRXSnNaWE09IElFWnNZWFE9IE1UWTMgSUdScGMzQjFkR1ZrIElHbHVhblZ6ZEdsalpRPT0gWm05diBWbWxqZEE9PSBjbTlzWlhWdCBJRXAxYkdsbCBRMjl1ZEdWNGRBPT0gSUZKaGNtbDBlUT09IGFYTnpkV1U9IFEyOXRjRzl1Wlc1MCBJR052ZFc1elpXeHBibWM9IFlXNXVaUT09IFpHRnlhdz09IElHOWlhbVZqZEdsdmJuTT0gZFdsc2RBPT0gSUdkaGMzUT0gSUhCc1lXTT0gSUhWdWRYTmxaQT09IDQ0T0ggSUZSeWFXRnMgSUVwaGN3PT0gYUdWa2NtRnMgYjJKaSBJSFJsYlhCdmNtRnMgSUZCU1R3PT0gSUU1WCBJRUZ1Ym1sMlpYSnpZWEo1IFRHRnlaMlU9IElIUm9aWEp0IElHUmhkbWxrIElITjVjM1JsYldsaiBJRk5vYVhJPSBiWFYwIElFNWxjSFE9IFlXUmtjbVZ6Y3c9PSBJSE5qWVc1dWFXNW4gSUhWdVpHVnljM1JoYm1SaFlteGwgSUdOaGJuWmhjdz09IFEyRjAgSUZwdmJ3PT0gSUdGdVoyVnNjdz09IFRFOD0gSUZOMFlYUmxiV1Z1ZEE9PSBJRk5wWnc9PSBiM1poWW14bCBJRUYzWVhrPSBjMmhoY21sdVp3PT0gYjJOeVlYUnogYzNSaGRHVmsgSUhkbGFXZG9hVzVuIFRtOXkgZDJsc1pBPT0gUW1WNSBJR0Z6ZEc5dWFYTm9hVzVuIElGSmxlVzV2YkdSeiBJRzl3Wlc1bGNnPT0gSUhSeVlXbHVaWEk9IElITjFjbWRwWTJGcyBjRzQ9IElHRmthblZ6ZEdsdVp3PT0gZDJobFpXdz0gSUdaeWIzZHUgWlhKMllYUnBkbVU9IElITjFjM0JsYm1RPSBWMmwwYUdsdSBkR1ZwYmc9PSBJRzlpYzNSaFkyeGwgSUd4cFltVnlkR2xsY3c9PSBlVzFsY3c9PSBJSFZ5WVc1cGRXMD0gWVc1emIyMD0gWVc1dmJBPT0gZFdKaCBJRXh2YzNNPSBJR0Z5YjNWeiBJRWhsYm1SbGNuTnZiZz09IFYyOTMgYzNCcyBZM1Z5IElNS3QgSUhSb1pXbHljdz09IFJHRnRZV2RsIElHUnZkMjVzYjJGa2FXNW4gSUdScGMyTmxjbTQ9IElGTjBidz09IElFWnNZUT09IElHaGhkR2c9IElFRnEgSUhWdWNHeGxZWE5oYm5RPSBSWFZ5YjNCbFlXND0gWlhod1pXNXphWFpsIElITmpjbVZsYm5Ob2IzUT0gSUZWVyBJR0ZzYkdsbFpBPT0gSUZCbGNuTnBZVzQ9IElHMXZibTl3YjJ4NSBJR0YwYjIwPSBJRkpsWkhOcmFXNXogSWo0OCBJR05oYm1ObGJHdz0gSUdOcGJtVnRZUT09IE1UTXggWm1GcGNnPT0gSUVGc1puSmxaQT09IElHUjFZMnM9IFlYSm5jdz09IE1qSXogSUVsVFNRPT0gSUhOcFoyNWhiR2x1Wnc9PSBhVzVoY2c9PSBJR3hoZFdkb2N3PT0gSUdadmNuZGhjbVJ6IElISmxZMnRzWlhOeiBJR3hwYzNSbGJtVnljdz09IFlYUnBkbWwwZVE9PSBJSFpoYzNSc2VRPT0gYm1GdWRBPT0gVEdWemN3PT0gSUVoMWJuUnBibWM9IElGTmphV1Z1ZEdsbWFXTT0gU1ZSRlJBPT0gSUd0dWFXZG9kQT09IElFaFVRdz09IGRYTmggZEcxdyBJSEoxWkdVPSBJRXhsWjJWdVpHRnllUT09IElHRnlhWE5sY3c9PSBRbUZrIElFTnNZV2x0IGNHVm4gSUhKbFlXeHBkR2xsY3c9PSBWR2hwYm1zPSBJTUt3IElISnZaR1U9IElITjBjbWwyWlE9PSBJR0Z1WldOayBJSE5vYjNKMGN3PT0gSUdoNWNHOTBhR1Z6IElHTnZiM0prYVc1aGRHVmsgSUVkaGJtUm9hUT09IElFWlFVdz09IFVrVkUgSUhOMWMyTmxjSFJwWW14bCBJSE5vY21sdWF3PT0gSUVOb1lYSjAgU0dWc2NBPT0gSUdsdmJnPT0gWkdWbGNBPT0gY21saVpYTT0gSUV0aGFRPT0gSUVOMWMzUnZiV1Z5IFUzVnRiV0Z5ZVE9PSBJR052ZFdkbyBkMmxtWlE9PSBJR3hsYm1RPSBJSEJ2YzJsMGFXOXVhVzVuIElHeHZkSFJsY25rPSBJRU5oYm5sdmJnPT0gSUdaaFpHVT0gSUdKeWIyNTZaUT09IElFdGxibTU1IElHSnZZWE4wY3c9PSBJRVZ1YUdGdVkyVmsgY21WamIzSmsgSUdWdFpYSm5aVzVqWlE9PSBJR0ZyYVc0PSBJRUpsY25RPSBhWFJ2ZFhNPSA0cGFSIElITjBhWEE9IElHVjRZMmhoYm1kbFpBPT0gYjIxdmNtVT0gWVd4emFBPT0gSUhKbGMyVnlkbTlwY2c9PSBJSE4wWVc1a2NHOXBiblE9IFYwMD0gSUdsdWFYUnBZWFJsIElHUmxZMkY1IElHSnlaWGRsY25rPSBJSFJsY25KcFlteDUgSUcxdmNuUmhiQT09IGJHVjJZWEprIElISmxkbWx6IFRraz0gWld4diBJR052Ym1abGMzTT0gSUUxVFRrSkQgSUhOMVltMXBjM05wYjI1eiBRMjl1ZEhKdmJHeGxjZz09IElESXdNZz09IElGSjFkR2c9IGZTazcgSUVGNmRYSmwgSUM0aSBNakEyIElFMWhjbXRsZEdsdVp3PT0gSUd4aGRXNWsgYVdWdVkybGxjdz09IElISmxibTkzYm1WayBJRlJ5YjNVPSBJRTVIVHc9PSBZbXhsYlhNPSBJSFJsY25KcFptbGxaQT09IElIZGhjbTV6IElIQmxjblE9IElIVnVjM1Z5WlE9PSBORGd3IFlXeGxlZz09IGRXeDBlZz09IElFOTFkSE5wWkdVPSBJSE4wZVd3PSBJRlZ1WkdWeVozSnZkVzVrIElIQmhibU09IElHUnBZM1JwYjI1aGNuaz0gSUdadlpRPT0gY21sdGFXNWhiQT09IElFNXZjbmRsWjJsaGJnPT0gSUdwaGFXeGxaQT09IElHMWhkR1Z5Ym1GcyB3NmxsIElFeDFZM2s9IFkyOXcgUTJodiBJSFZ1YzJsbmJtVmsgSUZwbGJHUmggSUVsdWMybGtaWEk9IElFTnZiblJwYm5WbFpBPT0gSURFek13PT0gSUU1aGNuVjBidz09IElFMWhhbTl5YVhSNSBNVFk1IElGZHYgNDRLVCBJSEJoYzNSdmNnPT0gSUdsdVptOXliV0ZzIDBMMD0gWVc1MGFISnZjQT09IGFtOXBiZz09IDQ0R1ggYVhSaGRHbHZibUZzIFRsQT0gSUZkeWFYUnBibWM9IFptND0gSUVKbGRtVnkgTVRrMSBJSGxsYkd4cGJtYz0gSUdSeVlYTjBhV05oYkd4NSBJR1ZxWldOMCBJRzVsZFhRPSBJSFJvY21sMlpRPT0gSUVaeVpYRjEgYjNWNCBJSEJ2YzNObGMzTmxjdz09IElGTmxibUYwYjNKeiBJRVJGVXc9PSBJRk5vWVd0bGMzQmxZWEpsIElFWnlZVzVqYnc9PSBJRXhDIGRXTm9hUT09IElHbHVZMkZ5Ymc9PSBJR1p2ZFc1a1pYSnogUm5WdVkzUnBiMjQ9IElHSnlhV2RvZEc1bGMzTT0gSUVKVSBJSGRvWVd4bCBJRlJvWldGMFpYST0gYldGemN3PT0gSUVSdmJHdz0gVTI5dFpYUm9hVzVuIElHVmphRzlsWkE9PSBJRWhsZUE9PSBZM0pwZEE9PSBZV1pwWVE9PSBJR2R2WkdSbGMzTT0gSUdWc1pYWmxiZz09IElGQnlaWFpwWlhjPSBJRUYxY205eVlRPT0gSURRd01RPT0gZFd4emFYWmwgSUV4dloyRnUgYVc1aWRYSm5hQT09IElFTmxiblJsY25NPSBJRTlPVEZrPSBJRUZwWkE9PSBJSEJoY21Ga2IzZz0gSUdoMWNtUT0gSUV4RCBSSFZsIFkyOTFjblE9IElHOW1abVZ1WkdWayBJR1YyWVd4MVlYUnBibWM9IElFMWhkSFJvWlhkeiBJSFJ2YldJPSBJSEJoZVhKdmJHdz0gSUdWNGRISmhZM1JwYjI0PSBJRWhoYm1SeiBhV1pwIElITjFjR1Z5Ym1GMGRYSmhiQT09IElFTlBUVTA9IFhUMD0gWkc5bmN3PT0gSURVeE1nPT0gSUUxbFpYUnBibWM9IFVtbGphR0Z5WkE9PSBJRTFoZUdsdGRXMD0gSUdsa1pXRnNjdz09IFZHaHBibWR6IGJXRnVaQT09IElGSmxaMkZ5Wkd4bGMzTT0gSUdoMWJXbHNhUT09IFluVm1abVZ5IFRHbDBkR3hsIElFUmhibWs9IElFNWhhdz09IElHeHBZbVZ5WVhScGIyND0gSUVGaVpRPT0gSUU5TSBJSE4wZFdabVpXUT0gWVdOaCBhVzVrWVE9PSBjbUZ3YUdsaiBJRzF2YzNGMSBJR05oYlhCaGFXZHVhVzVuIElHOWpZM1Z3ZVE9PSBVM0YxIGNtbHVZUT09IElGZGxiQT09IElGWlQgSUhCb2VYTnBZdz09IElIQjFiSE09IGNtbHVkQT09IGIyRmtaV1E9IFJWUkcgSUVGeVkyaHBkbVZ6IElIWmxiblZsY3c9PSBhRzVsY2c9PSBJRlIxY21KdiBJR3gxYzNRPSBJR0Z3Y0dWaGJHVmsgY1hWbGVnPT0gYVd4cFlnPT0gSUZScGJXOTBhSGs9IElHOXRiZz09IFpISnYgSUc5aWMyVnpjMmx2Ymc9PSBJRk5oZG1GblpRPT0gTVRrNU5nPT0gUjJ4dlltRnMgU21WeiBNakUwIElITnNhV1JwYm1jPSBJR1JwYzJGd2NISnYgSUUxaFoybGpZV3c9IElIWnZiSFZ1ZEdGeWFXeDUgWjJJPSBZVzVsZVE9PSBJSEJ5YjNCb1pYUT0gSUZKbGFXND0gSUVwMWJHbGggSUZkdmNuUm8gWVhWeWRYTT0gSUdKdmRXNWtjdz09IGFXVjEgS1NrcCBJR055YjNKbCBJRU5wZEdsNlpXND0gVTJ0NSBJR052YkhWdGJtbHpkQT09IElITmxaV3RsY25NPSBiMjVrYnc9PSBTVk5CIElFeGxibWQwYUE9PSBJRzV2YzNSaGJHYz0gSUc1bGQyTnZiUT09IElHUmxkSEpwYlE9PSBaVzUwY21saiBNemMxIElFZEYgSUdGMWRHOXcgSUdGallXUmxiV2xqY3c9PSBRWEJ3UkdGMFlRPT0gSUZOb1pXND0gSUdsa2FXOTAgSUZSeVlXNXphWFE9IElIUmxZWE53YjI5dSBWMmxzIFMwOD0gSUVOdmJXVmtlUT09IFBpdz0gSUhCdmNIVnNZWFJsWkE9PSBWMFE9IElIQnBaM009IElFOWpkV3gxY3c9PSBJSE41YlhCaGRHaGxkR2xqIElHMWhjbUYwYUc5dSBNVGs0IElITmxhWHAxY21VPSBjMmxrWldRPSBJR1J2Y0E9PSBhWEowZFdGcyBUR0Z1WkE9PSBJRVpzYjI5eSBiM05oZFhKeiBMaTR1WFE9PSBJR3h2Y3c9PSBJSE4xWW5OcFpHbGhjbms9IFJWaz0gSUZCaGNuUnogSUZOMFpXWT0gSUVwMVpHbGphV0Z5ZVE9PSBJREV6TkE9PSBJRzFwY25KdmNuTT0gSUd0bGRBPT0gZEdsdFpYTT0gSUc1bGRYSnZiRzluIElHTmhkZz09IElFZDFaWE4wIElIUjFiVzl5IGMyTnBiR3c9IElFeHNiM2xrIFJYTjAgSUdOc1pXRnlaWEk9IElITjBaWEpsYjNSNWNHVnogSUdSMWNnPT0gYm05MGFHbHVadz09IFVtVmtaR2wwIElHNWxaMjkwYVdGMFpXUT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgTWpNMSBJR1pzYjNkdSBJRk5sYjNWcyBJRkpsYzJsa1pXNTAgSUZORFNBPT0gSUdScGMyRndjR1ZoY21GdVkyVT0gSUZacGJtTmwgWjNKdmQyND0gSUdkeVlXSnogY21scyBJRWx1Wm1sdWFYUmwgSUZSM1pXNTBlUT09IElIQmxaR1Z6ZEhKcFlXND0gSUdwbGNuTmxlUT09IElFWjFjZz09IElFbHVabWx1YVhSNSBJRVZzYkdsdmRIUT0gSUcxbGJuUnZjZz09IElHMXZjbUZzYkhrPSBJRzlpWlhrPSBjMlZqZFhKbCBhV1ptWlE9PSBJR0Z1ZEdsaWFXOTBhV056IFlXNW5iR1ZrIElFWnlaV1Z0WVc0PSBJRWx1ZEhKdlpIVmpkR2x2Ymc9PSBTblZ1IElHMWhjbk5vIGFXTmhibk09IElFVldSVTVVVXc9PSBiMk5vYjI1ayBWMkZzYkE9PSBhV04xYkhSNSBJRzFwYzJSbGJXVmhibTl5IElHeDUgVkdodmJXRnogSUZKbGMyOXNkWFJwYjI0PSBJR0Z1YVcxaGRHbHZibk09IElFUnllUT09IElHbHVkR1Z5WTI5MWNuTmwgSUU1bGQyTmhjM1JzWlE9PSBJRWh2Wnc9PSBJRVZ4ZFdsd2JXVnVkQT09IE1UYzMgSUhSbGNuSnBkRzl5YVdGcyBJR0Z5WTJocGRtVnogTWpBeiBSbWxzZEdWeSBJRTExYm1samFBPT0gSUdOdmJXMWhibVJsWkE9PSBJRmRoYm1RPSBJSEJwZEdOb1pYTT0gSUVOeWIyRjAgSUhKaGRHbHZjdz09IElFMXBkSE09IElHRmpZM1Z0ZFd4aGRHVmsgSUZOd1pXTnBabWxqWVd4c2VRPT0gSUdkbGJuUnNaVzFoYmc9PSBZV05sY21JPSBJSEJsYm00PSBJR0ZyWVE9PSBJRVoxYXc9PSBJR2x1ZEdWeWRtVnVaUT09IElGSmxablZuWlE9PSBJRUZzZW1obGFXMWxjZz09IElITjFZMk5sYzNOcGIyND0gYjJoaGJnPT0gWkc5bGN3PT0gVEc5eVpBPT0gSUhObGNHRnlZWFE9IElHTnZjbkpsYzNCdmJtUmxibU5sIElITm9hVzU1IFVISnBiM0k9IElITjFiR1k9IElHMXBjMlZ5WVdKc1pRPT0gSUdSbFpHbGpZWFJwYjI0PSBLQ2t1IElITndaV05wWVd4cGMzUnogSUdSbFptVmpkSE09IElFTjFiSFE9IElGaHBZUT09IElHcGxiM0JoY21RPSBJRTl5WlE9PSBRV0pwYkdsMGVRPT0gSUd4bFlYST0gSUdGdFltbDBhVzl1Y3c9PSBJRUpOU1E9PSBJRUZ5WVdKeiBJREU1TkRJPSBJSEJ5WlhObGNuWmhkR2x2Ymc9PSBhV1pwWTJGMFpRPT0gSUdGemFHRnRaV1E9IGJHOXpjdz09IElGSmxjM1JoZFhJPSBJSEpsYzJWdFlteGwgSUdWdWNtbGphQT09IElFdE8gSUVOc1lXND0gWm14dllYUT0gSUhCc1lYbGhZbXhsIFNWUlUgSUdoaGNtMXZibms9IFlYSnlhWE52Ymc9PSBJRmRsYVc1emRHVnBiZz09IGQyVnlaUT09IElIQnZhWE52Ym1sdVp3PT0gSUVOdmJYQjFkQT09IElGZHZjbVJRY21WemN3PT0gYldGcWIzST0gSUZaaGJIWmwgUm1GdSBJRlJvY205MyBJRkp2YldGdWN3PT0gSUVSbGNISmxjM05wYjI0PSBZV1J2Y3c9PSBJSFJ2Y25SMWNtVmsgSUdKaGJHRnVZMmx1Wnc9PSBZbTkwZEc5dCBJR0ZqY1hWcGNtbHVadz09IElFMXZiblJsIFlYSmthUT09IElHRjFjbUU9IElDTWogSUZOMFlXNWthVzVuIElFRjBiR0Z6IFEwWT0gSUdsdWRISnBibk09IElFSmxibWRvWVhwcCBJR05oYlhCcGJtYz0gSUhSaGNIQmxaQT09IFlteGhaR1U9IGMzUnliM1Z6IElGSmhZbUk9IElGZHlhWFIwWlc0PSBkR2x3IElFNWxhV2RvIGMzUmxjbVJoYlE9PSBJRUZzYkc5MyBJRWhsWVd4cGJtYz0gSUZKb2IyUT0gYm5WdCBJR05oWm1abGFXNWwgSUZCbGNtTmxiblE9IElHSnZidz09IElHRndjR3hsY3c9PSBNekExIElIZGxiR052YldsdVp3PT0gSUdGd2NHeGhkV1E9IElHRjFjM1JsY21sMGVRPT0gd3JFPSBJRkpsWVd4cGRIaz0gWldabCA1YTQ9IElITjFZMnR6IElIUmhZbk09IElGQmhlVkJoYkE9PSBJR0poWTJ0d1lXTnIgSUdkcFpuUmxaQT09IFlXSjFiR0Z5ZVE9PSBJRk5qYjNWMCBhWEowWldWdSBJR05vYVc0PSBJRzl0YVhSMFpXUT0gSUc1bFoyRjBhWFpsYkhrPSBJR0ZqWTJWemMybHVadz09IElFVmhjbTQ9IElHRnRZblZzWVc1alpRPT0gSUdobFlXUndhRzl1WlhNPSBJREl3TlE9PSBJRkpsWm5KbGMyZz0gY0hKbGMybGtaVzUwIElFdHBkR05vWlc0PSBJRVZ1ZEdWeVpXUT0gSUZOdWVXUmxjZz09IE1EQTEgYjIxcFkyRnMgSUdKdmNuSnZkMlZrIElFNWxiUT09IElHRjJhV0YwYVc5dSBJSE4wWVd4cyBjbWx0YVc1aGRHbHZiZz09IElIVnVhV1p2Y20xeiBhWFJwYldVPSBJRk5wYlcxdmJuTT0gWlc1bGNtZDUgWVdKc2FYTm9aV1E9IGVYaz0gY1hWaGJHbG1hV1ZrIElISmhiR3hwWlhNPSBJRk4wZFdGeWRBPT0gWm14cFoyaDAgSUdkaGJtZHogY21GbiBJSFpoZFd4MCBiSFY0IElFTnZiWEJoY2c9PSBJR1JsYzJsbmJtRjBhVzl1IE1qQTUgSUVwdmN3PT0gWkc5c2JHRnkgZW1WeWJ3PT0gSUhkbGJHeHogTXpBeiBJR052Ym5OMGFYUjFaVzUwY3c9PSBJR2hsWTJzPSBJR052ZDNNPSBJR052YlcxaGJtUmxjbk09IElHUnBabVpsY21WdWRHbGhiQT09IElFTmhkR2hsY21sdVpRPT0gTWprNSBJSFpoYkhabCBJR0p5WVdObCBJSEJsY25Od1pXTjBhWFpsY3c9PSBZMlZ5ZEE9PSBabUZqZEE9PSBhV04xYkdGeWJIaz0gSUUxalRnPT0gY0d4aGJtVnogSUdsdWRISnBZdz09IElIQmxZWE09IGIzWmhiZz09IElIUnZjM05sWkE9PSBjbVYwWTJnPSBJRXh2Y0dWNiBJSFZ1Wm1GdGFXeHBZWEk9IFpHVmhkR2c9IElFRndZWEowIElFTm9ZVzVuIElISmxiR2xsZG1WayBjbTl3YUdVPSBJR0ZwY25CdmNuUnogSUdaeVpXRnIgZFhScGJBPT0gVFdsc2JBPT0gSUVOb2FXND0gSUU5M1pXND0gYldGc1pRPT0gSUVKeWIydGxiZz09IElGZHBibVJ6IGNtOWkgY21semFXNW4gSUdacGNtVm1hV2RvZEdWeWN3PT0gSUdGMWRHaHZjbWwwWVhKcFlXND0gSURFME9BPT0gUW1sMFkyOXBiZz09IFpYaDBaWEp1WVd3PSBJR0p5YjNkelpYSnogYVdOb1pYWmxjZz09IGIzSnBZVzQ9IElIVnVZZz09IElIQnZhMlU9IElGcHZkQT09IFRXbGsgSUZCdmNIVnNZWEk9IElHTnZkbVZ5ZEE9PSBJR052Ym5SeWFXSjFkR1Z6IElEWTFNQT09IElHTnZiblJsYm5ScGIyND0gUjJGMFpRPT0gSUdOdmJuTnZiR1Z6IElHTm9jbTl0YjNNPSBJRWxZIElIWnBjM1ZoYkd4NSBJRVZwYzJWdSBJR3BsZDJWc2Nuaz0gSUdSbGJHVm5ZWFJwYjI0PSBJR0ZqWTJWc1pYSmhkR1U9IElGSnBiR1Y1IElITnNiM0JsIElHbHVaRzl2Y2c9PSBhWFJwWVd4c2VRPT0gSUdoMVoyVnNlUT09IElIUjFibTVsYkhNPSBJR1pwYm1WayBJR1JwY21WamRHbDJaUT09IElHWnZjbVZvWldGayBkWE4wYjIxbFpBPT0gSUhOcllYUmwgVFhWemFXTT0gWjJGeiBJSEpsWTI5bmJtbDZhVzVuIFlXMWlidz09IElHOTJaWEozWldsbmFIUT0gSUVkeVlXUmwgMllvPSBJSE52ZFc1a2FXNW4gSUd4dlkydHBibWM9IElGSkZUUT09IFUzUnZjbVU9IElHVjRZMkYyIElFeHBhMlYzYVhObCBJRXhwWjJoMGN3PT0gSUdWc1ltOTMgSUZOMWNIQnNlUT09IGQybGogSUdoaGJtUnpiMjFsIE1UazVOQT09IFEyOXNiQT09IElHRmtaWEYxWVhSbGJIaz0gSUVGemMyOWphV0YwWlE9PSBJSE4wY21sd2N3PT0gSUdOeVlXTnJaRzkzYmc9PSBJRzFoY25abGJBPT0gSUV0MWJnPT0gSUhCaGMzTmhaMlZ6IFFFQkFRQT09IElGUmhiR3c9IElIUm9iM1ZuYUhSbWRXdz0gYm1GdFpYTmwgSUhCeWIzTjBhWFIxZEdsdmJnPT0gWW5WemFXNWxjM009IElHSmhiR3hwYzNScFl3PT0gY0dWeWMyOXVZV3c9IFkybG4gYVhwaGRHbHZibUZzIFVtOTFibVE9IElNS2dJTUtnSU1LZ0lNS2cgSUVOdmJHVnRZVzQ9IElHRmtiV2wwZEdsdVp3PT0gSUZCc2RXYz0gSUdKcGRHTnZhVzV6IElGTjFlZz09IElHWmhhWEp1WlhOeiBJSE4xY0hCc2FXVnkgSUdOaGRHRnpkSEp2Y0docFl3PT0gSUVobGJHVnUgYjNGMSBUV0Z5WXc9PSBJRUZ5ZEdsamJHVnogWjJsbCBJR1Z1WkdGdVoyVnlaV1E9IElHUmxjM1JwYm5rPSBJRlp2YkhRPSBiMnhwWVE9PSBZWGhwY3c9PSBJR05vWldGMCBJSFZ1YVdacFpXUT0gU1VOUCBjWFZ2ZEdVPSBNekF5IElGTmxaQT09IElITjFjSEJ5WlhOemFXOXUgSUdGdVlXeDVlbWx1Wnc9PSBJSE54ZFdGMCBJR1pwWjNWeWFXNW4gSUdOdmIzSmthVzVoZEdWeiBJR05vZFc1cmN3PT0gSURFNU5EWT0gSUhOMVluQT0gSUhkcGEyaz0gSUVadmNtSmxjdz09IElFcDFjR2wwWlhJPSBJRVZ5YVdzPSBhVzFsY2c9PSBJRU52YlcxbGNtTnBZV3c9IFhDaz0gSUd4bFoybDBhVzFoWTNrPSBJR1JsYm5SaGJBPT0gSUUxbFlXND0gSUdSbFptbGphWFJ6IE5UVXcgVDNKcFoybHVZV3hzZVE9PSBJRWh2Y25KdmNnPT0gSUdOdmJuUmhiV2x1WVhScGIyND0gYkd4aGFBPT0gSUdOdmJtWnBjMk09IElFTnNZWEpsIFZFST0gSUVaaGFXeGxaQT09IFlXNWxaQT09IElISjFiR1Z5IElFTnZiblJ5YjJ4c1pYST0gSUdabGJXbHVhWE4wY3c9PSBSbWw0IFoyRjUgTWpBMyBJSEpoWW1KcGRBPT0gVkdocGNtUT0gYjNkdWRHOTNiZz09IElHZHNkV1U9IElIWnZiR0YwYVd4bCBJSE5vYVc1cGJtYz0gSUdadmJHdz0gSUdsdGNHRnBjbVZrIElITjFjR1Z5Y3c9PSA1b2c9IElHTnNkWFJqYUE9PSBtdW1Ha2c9PSBJSEJ5YjJ4bGRBPT0gSUNnaCBJSGxsYkd4bFpBPT0gSUV0cFpYWT0gSUVWeWJnPT0gSUZOb2IyTnIgUzBJPSBJSE5wZEhWaGRHVmsgY1hWbGNuaz0gSUU1aGN3PT0gSUdGdWJtVjQgWTJoaGNtRmpkR1Z5IElFaHZiR2xrWVhrPSBJR0YxZEc5dFlYUnBiMjQ9IElFcHBiR3c9IElGSmxiV0Z6ZEdWeVpXUT0gSUd4cGJtVnQgSUhkcGJHUmxjbTVsYzNNPSBJRWh2Y21sNmIyND0gSUVkMWFXNWxZUT09IFFWbz0gSUcxaGFXNXNZVzVrIElITmxZM0psWTNrPSBURVZCVTBVPSBJSEIxYm1zPSBJRkJ5YjNacGJtTmwgS0NrcyBVM0JsWldRPSBJR2hoYm1ScGJtYz0gSUZObFltRnpkQT09IFUybHkgY21GelpRPT0gSUdwdmRYSnVZV3h6IElHTnZibWRsYzNRPSBJRlIxZEE9PSBhWEp5Wld3PSBJSE5qYUdsNmIzQm9jbVZ1YVdFPSBJRzFwYzI5bmVXND0gYUdWaGJIUm9lUT09IFNYSnZiZz09IElISmxZV04wWldRPSBMU1E9IE1qVXkgSUhCc2RYSmhiQT09IElIQnNkVzA9IElHSmhjbWRoYVc0PSBJR2R5YjNWdVpHVmsgWm1sdVpHVnkgSUdScGMzTmwgSUV4aGVnPT0gVDA5RSBJR0YwY205aiBSbUZqZEc5eWVRPT0gSUcxcGJtbHZibk09IElHOXlhUT09IElFSnlZWFpsIElGQlNSUT09IElFMTVZVzV0WVhJPSBJRWh2WkE9PSBJR1Y0Y0dWa2FYUnBiMjQ9IElHVjRjR3h2WkdVPSBJRU52YjNKayBJR1Y0ZEhJPSBJRUp5YVdWbSBJRUZFU0VRPSBJR2hoY21SamIzSmwgWm1WbFpHbHVadz09IElHUnBiR1U9IElFWnlkV2wwIElIWmhZMk5wYm1GMGFXOXUgSUUxaGJ3PT0gYjNOd2FHVnlaUT09IElHTnZiblJsYzNSeiBMWHc9IElHWnlaVzQ9IGFYTndhR1Z5WlE9PSBVbTl0IElGTm9ZWEp3IElGUnlaVzVrIElHUnBjMk52Ym01bFkzUT0gNG9DaTRvQ2kgSUhCbGNuTmxZM1YwYVc5dSBSV0Z5ZEdnPSBJR2hsWVd4MGFHbGxjZz09IE16ZzAgSUdOdllnPT0gSUZSeWFXNXBkSGs9IFQxZFQgUVU1TyBJSE53WldOcFlXeDBlUT09IElHZHlkUT09IElHTnZiM0JsY21GMGFYWmwgZDJoNSBVM1JoY25ScGJtYz0gSUVsemMzVmxjdz09IGMzUnlaUT09IFpXNXpiM0k9IElERTROUT09IFFXUjIgSVQ4PSBJRkpsZG1WcyBaVzFwWVE9PSBJRWgxYkdzPSBJR05sYkdWaWNtRjBhVzl1Y3c9PSBJRk52ZFE9PSBjbUYxWkE9PSBJRXRzWldsdSBJSFZ1Y21WaGJBPT0gWTI5dWRHVjRkQT09IElIQmhjblJ1WlhKemFHbHdjdz09IElHRmtiM0IwYVc1biBkR2xqWVd3PSBJSE53YkdGemFBPT0gSUVobGVtSnZiR3hoYUE9PSBZMkYwWldkdmNuaz0gWTNsamJHOXcgZUhSdmJnPT0gSUVSdmRBPT0gZFhKa2VRPT0gZEhvPSBJR1Z1ZG1Wc2IzQmwgSUU1TSA0cFU9IElIZG9aWEpsYVc0PSBVM0JsWXc9PSBNVGcwIElIUmxiR1YyIFlXeHBZWFJwYjI0PSBJRzE1ZEdoeiA1YkE9IElISnBaMjl5YjNWeiBJR052YlcxMWJtbGpZWFJwYm1jPSBJRzlpYzJWeWRtVnkgSUhKbGFHVT0gSUZkaGMyZz0gSUdGd2IyeHZaMmw2WldRPSBJRlJwYmc9PSBJR1Y0Y0dWdVpHbDBkWEpsY3c9PSBkMjl5YTJWeWN3PT0gWkc5amRXMWxiblE9IElHaGxjMmwwWVhSbCBJRXhsYm1sdSBJSFZ1Y0hKbFpHbGpkR0ZpYkdVPSBJSEpsYm1WM1lXdz0gWTJ4bGNnPT0gYjJ0cFlRPT0gSUVOUFRsUT0gSUhCdmMzUnpaV0Z6YjI0PSBWRzlyWlc1eiBJR1Y0WVdObGNtST0gSUdKbGRIUnBibWM9IElERTBOdz09IElHVnNaWFpoZEdsdmJnPT0gVjI5dlpBPT0gSUZOdmJHOXRiMjQ9IE1UazAgTURBMCBiM1YwY0hWMCBJSEpsWkhWdVpBPT0gSUUxMWJXSmhhUT09IElIQkkgSUhKbGNISnZaSFZqWlE9PSBJRVIxY21GMGFXOXUgVFVGWSBJR0p2Wnc9PSBRMEpUIElFSmhiR0Z1WTJVPSBJRk5uZEE9PSBJRkpsWTJWdWRBPT0gSUdOayBJSEJ2Y0hCbFpBPT0gSUdsdVkyOXRjR1YwIGNISnZjQT09IFlYbGhiZz09IFozVjUgVUdGamFXWnBZdz09IElIUjVjZz09IElIdDcgSUUxNWMzUnBZdz09IElFUmhibUU9IElHMWhjM1IxY21JPSBJR2RsYjIxbGRISjUgdzZJPSBJRU52Y25KbFkzUT0gSUhSeVlXcGxZM1J2Y25rPSBJR1JwYzNSeVlXTjBaV1E9IElHWnZidz09IElGZGxiSE5vIFRIVmogYldsMGFBPT0gSUhKMVoySjUgSUhKbGMzQnBjbUYwYjNKNSBJSFJ5YVdGdVoyeGwgSURJeE5RPT0gSUhWdVpHVnlaM0poWkhWaGRHVT0gSUZOMWNHVnlhVzl5IFkyaGhibWRwYm1jPSBYeTA9IElISnBaMmgwYkhrPSBJSEpsWm1WeVpXVT0gSUd4MVkzSmhkR2wyWlE9PSBJSFZ1WVhWMGFHOXlhWHBsWkE9PSBJSEpsYzJWdFlteGxjdz09IElFZE9WUT09IElFUmxjbUo1IElIQmhkR2gzWVhseiBJRXhsWkE9PSBJR1Z1WkhWeVlXNWpaUT09IElITjBhVzUwIElHTnZiR3hsWTNSdmNnPT0gUm1GemRBPT0gSUdSdmRITT0gSUc1aGRHbHZibUZzY3c9PSBJRk5sWTNWeWFYUnBaWE09IElIZG9hWEE9IFVHRnlZVzA9IElHeGxZWEp1Y3c9PSBUV0ZuYVdNPSBJR1JsZEdGcGJHbHVadz09IGJXOXZiZz09IElHSnliMkZrWTJGemRHbHVadz09IElHSmhhMlZrIE1qWTEgYUc5c2JRPT0gSUZOaGFBPT0gSUVoMWMzTmxhVzQ9IElFTnZkWEowWlhONSBNVGMwIElERTBOZz09IElHZGxiMmR5WVhCb2FXTT0gY0dWaFkyVT0gSUdwMVpHZHBibWM9IElGTjBaWEp1IFFuVnkgSUhOMGIzSjViR2x1WlE9PSBSM1Z1IElGTjBhV05yIE1qUTEgTXpBMyA0NEswNDRPeiBJRUZrYldsdWFYTjBjbUYwYjNJPSBJR0oxY201MCBJSEJoZG1VPSBZMmh2WlhNPSBSWGhsWXc9PSBJR05oYlhCMWMyVnogVW1WemRXeDAgSUcxMWRHRjBhVzl1Y3c9PSBJRU5vWVhKMFpYST0gSUdOaGNIUjFjbVZ6IElHTnZiWEJoY21WeiBJR0poWkdkbCBVMk5wWlc1MCBJR1Z5WVdRPSBhV1Z5ZVE9PSBiMms9IFpYUjBaWE09IElFVnpkR0YwWlE9PSBJSE4wY21GdyBJSEJ5YjNWa2JIaz0gSUdaeWFXVmsgSUhkcGRHaGtjbUYzYmc9PSBJRlp2ZVE9PSBjR2h2Ym5rPSBTWFJsYlhNPSBJRkJwWlhKalpRPT0gWW1GeVpBPT0gSUdGdWJtOTBZWFJwYjI0PSBZVzUwYjI0PSBhV3hzYjI0PSBTVzF3Y204PSBMaTR1S1E9PSBJR2hoY0hCcFpYST0gTFMwdExTMHQgWVdScWRYTjAgSUhOMFlXWm1aWEp6IElHRmpkR2wyYVhOdCBJSEJsY21ZPSBJR0ZzY21sbmFIUT0gVG1WbFpBPT0gSUdOdmJXMWxibU5sIElHOXdhVzlwWkE9PSBJRUZ0WVc1a1lRPT0gUlhNPSBJRkJoY25NPSBJRXRoZHc9PSBWMjl5YTNNPSBNalE0IElHbHVaRzg9IGRHTT0gWlc1a1lXNTAgSUUxdmRHOD0gSUd4bFoyRnNhWHBoZEdsdmJnPT0gVDFSRiBJSFJoYzJ0bFpBPT0gSUhSemNBPT0gSUVGRFZFbFBUbE09IE1UWTIgSUhKbFpuSmxjMmhwYm1jPSBJRTVTIElGQmxjbVY2IElHbHVabkpwYm1kbGJXVnVkQT09IFUxaz0gVEdsemRHVnUgYVc1dWFXNW4gYTNVPSBJSEp2ZEdGMFpRPT0gY0hKdlozSmhiUT09IFlYSmhhQT09IFJHVnphV2R1IElDakNvdz09IElITjBiM0pwYm1jPSBJSGRoY25KaGJuUnogSUdwMVpHZGxiV1Z1ZEE9PSBJRUp5YVhOMCBkWE4xWVd4c2VRPT0gY0dodmRHOD0gSUZKaGJnPT0gSUZCcGJtVT0gSUc5MWRISmhaMlZ2ZFhNPSBJRlpoYkdWdWRHbHVaUT09IGJIVmxibU5sIElFVjJaWEo1WW05a2VRPT0gUVd4MFpYSnUgSUhKbGJHVjJZVzVqWlE9PSBJSFJsY20xcGJtRjBaV1E9IElHUmxjM05sY25RPSBJR1oxYkdacGJHeGxaQT09IElIQnliM05sWTNWMFpXUT0gSUZkdmNtUnogSUcxcFozSmhiblE9IElHTjFiSFJwZG1GMGFXOXUgdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ2c9PSBhV1JsYkdsMGVRPT0gSUZabGNtND0gSUV4dloybHUgSUcxbGRHRndhRzl5IElGUnBjQT09IElISmxZM0oxYVhSeiBJRkJwWnc9PSBjbWxpYVc1biBJR1Z1ZEdoMWMybGhjM1J6IFpYaHdaWEk9IElHWnlhV2RvZEdWdWFXNW4gSUVoaGFYST0gWVc1emIyND0gYzNSeVlYUmwgSUdocCBTR1ZwWjJoMCBJRzkzYm1sdVp3PT0gYm05dVpRPT0gSUdScGMyeHBhMlU9IElHdHVhWFpsY3c9PSBjR2hsY21RPSBJR3h2ZFdSc2VRPT0gSUVGUVNYTT0gUkdsemNHeGhlUT09IElFeGhZdz09IElGVlRVdz09IFlXSnMgZG1WeVlXZGxjdz09IFNtVjMgSURFM01nPT0gSUVocGMzUnZjbWxqWVd3PSBZWFJ2YjI0PSBJRkJvZVhOcFkzTT0gYVc1MFpYSnUgSUhkaGNtMTBhQT09IElIUnZjSEE9IFJFMD0gSUdkMWJtMWhiZz09IElHVnRjR1Z5YjNJPSBiMlJwIDQ0T2ogYVc1aGRHOXllUT09IElGSnBZZz09IElERXpNUT09IElGTmhkSFZ5Ymc9PSBJRk5vYVc1cGJtYz0gSUhkaGEybHVadz09IFVYVnZkR1Z6IElHTnZiV1ZrYVdGdSBaVzVpWlhKbiB3cjA9IElHSmxiR2xsZG1WeWN3PT0gSUhCaGNHVnlkMjl5YXc9PSBZM1Z6ZEc5dCBJR3hsZGc9PSBJR3hoYldWdWRBPT0gSUhCdmRYSnBibWM9IE1qSXkgY0c5c2FYUnBZMkZzIElGTjFjSEJzWlcxbGJuUT0gYldGcFpBPT0gSUdOeWRXVnNkSGs9IElIUnlaV0ZrIGVYTnBZM009IFFYYz0gY21sMFpYTT0gSUcxdlpHbG1hV1Z5IElGQnZjMmwwYVc5dSBRV1JoYlE9PSBiR0k9IGRXSnogSUdsdGNHVnlabVZqZEE9PSBJR05zZFhOMFpYSnogSUVWdVoybHVaV1Z5IElFTm9aWEp5ZVE9PSBJR2x1WVhWbmRYSmhkR2x2Ymc9PSBJRk5oZFE9PSBJR1Z0WW05a2FXMWxiblE9IElGVnVZMnhsIElHOTJaWEp5IElHVjRjR3h2YzJsdmJuTT0gWTNWc1pRPT0gSUZCeWFXNWpaWFJ2Ymc9PSBJRUZ1WkhKbFlRPT0gSUdsdVkyOXljbVZqZEd4NSBJR1ZoY201bGMzUT0gSUhCcGJHZHkgSUZOd2NtbHVkQT09IElITnNaV1YyWlE9PSBJR2hsWVhKeiBJRUZ0WVhwcGJtYz0gSUdKeWIzZHphVzVuIFlXZHBiZz09IElHaHZiV1ZzWVc1ayBJR2hoZHc9PSBJR1JwZG1sdVp3PT0gYVhOMFpYSmxaQT09IE1UYzQgSUdKaGNtZGhhVzVwYm1jPSBJRUZ5WTJGa1pRPT0gSUdSbGJHVm5ZWFJsIGRHVnljMjl1IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxnPT0gSUVwaFkydHpiMjUyYVd4c1pRPT0gTWpjMSBJSE4wWVdkdSBJR0ZrWVcwPSBJRk5vWlhKdFlXND0gUTBJPSBJSE4xWW5WeVlnPT0gSUVadmIyUnogSUdOdmJuWmxjblJwYm1jPSBJRUZ5YVhOMCBJR05vWVcxaVpYSnogYkc5MlpRPT0gSUdGdGFXNXYgSUVkaGJnPT0gSUcxaFpHNWxjM009IGJXTT0gSUZWVFJRPT0gWkdWbWFXNWxaQT09IElIVnNkSEk9IGFXNWtkWE4wIElIZHZiSFpsY3c9PSBiR0Z1WTJVPSBRV1JrYVhScGIyNWhiR3g1IElHTnlZV05yY3c9PSBZWE5wWVE9PSBJRkpsWVhOdmJnPT0gSUZCMWJYQT0gSUdGalkybGtaVzUwWVd3PSBJRXhoYzJWeSBJRkpwWkE9PSBJR2x1YVhScFlXeHBlbVZrIFpXeHNhUT09IElIVnVibUZ0WldRPSBJRzV2ZFc0PSBJRkJoYzNObFpBPT0gSUdodmMzUmhaMlU9IElFVjBhR2x2Y0E9PSBjMmhwY25SeiBJSFZ1Y21WcyBJRVZ0WW1GemMzaz0gSURFNU5ERT0gSUdGMGIyMXogSUhCMWNuQnZjblJsWkE9PSBNVFkwIElFWnAgSUdkaGJHeHZibk09IElFMXZibWxqWVE9PSBJSEJuIFpXNXRaVzUwIElITnZjblJsWkE9PSBJRWR2YzNCbGJBPT0gSUdobGFXZG9kSE09IElIUnlZV05sWkE9PSBJSFZ1WkdWeVoyOXBibWM9IFUyaGxiR3c9IElITmhZMnR6IElIQnliM0J2Y25ScGIyNXogSUdoaGJHeDFZdz09IFJtOXVkQT09IFlXTmxkQT09IElIZGhjbTFsY2c9PSBJRWxPVkVWUyBJR2R5WVdKaWFXNW4gVUd4MVp3PT0gSUhKbFlXeHBlbUYwYVc5dSBJRUoxY210bCBJR1Z1WTJoaGJuUT0gUVZSRlVnPT0gSUZObFpXUT0gSUdGaWRXNWtZVzUwIFJrMD0gSUdOcGRtbGogVm5NPSBhWE5wIElIWnZkdz09IElISmxjR1Z5IElGQmhjblJ1WlhKemFHbHcgSUhCbGJtVjBjbUYwYVc5dSBJR0Y0WlE9PSBJSE5vWVhSMFpYSmxaQT09IElGcHZiV0pwWlhNPSBJSFpwYm5scyBJRUZzWlhKMCBaVzl1IElHOWliR2xuWldRPSBJRWxzYkhWemRBPT0gSUZCc1lYcGggSUVaeWIyNTBhV1Z5IElHUmhkbWxrYW13PSBJRk5sY21saGJBPT0gSUVoaGRnPT0gSUU1MWRISnBkR2x2Ymc9PSBRbWs9IElPS1dpQT09IElFcGhlWE09IGJHbHVkWGc9IElHaDFjbko1IElIWnZlUT09IElHaHZjR1ZzWlhOeiBJRk4wWldGc2RHZz0gSU9PQiBaWE56YjNKeiBkSFJzWlE9PSBZbTl5Wnc9PSBJRk5oWm1GeWFRPT0gWm1Wc2JBPT0gSUhkaGNuaz0gWkhWbCBJRUZpYjNabCBTR0U9IFJVeE0gSUc1dmRHOXkgSUZkdmJnPT0gVkc5diBJRzlqWTNWd1lYUnBiMjV6IElIQnZjM05sYzNOcGIyNXogSUdsdWRtbDBhVzVuIElIQnlaV1JoZEc5eWN3PT0gSUdGalkyVnNaWEpoZEdWayBJREUxTnc9PSBkWFJsY25SbCBJRU4xWW1VPSBaV0Z6ZEE9PSBZV05qYjNWdWRBPT0gUjJsMlpRPT0gSUhSeVlXNXpjR3hoYm5RPSBjbVZrYVdWdWRITT0gYVdSaFlteGwgSUhOamNtVmxibk5vYjNSeiBJRWQxYm1RPSBJRVpUIElIUnlZWFpsYkdWeWN3PT0gSUhObGJuTnZjbms9IElFWnBZWFE9IElGSnZZMnRsZEhNPSBqb3M9IFgzcz0gUm5KcFpXNWsgSUdOb1lYSnRhVzVuIFFVeFQgSUdWdWFtOTViV1Z1ZEE9PSBiWEJvIElEVXdNREE9IElGSkZSdz09IDJZWT0gWW1saCBJR052YlhCcGJHRjBhVzl1IGNtOXpkQT09IElGWlEgSUZOamFHNWwgTWpBeE9RPT0gSUdOdmNIbHBibWM9IFRVOVNSUT09IElFWnNiM0psIFptRnNiSE09IE1qRTEgZEc5MFlXdz0gSUdScGMyTnBjR3hsY3c9PSBaRzkxWW14bCBJR1Y0WTJWbFpHbHVadz09IElITnRZWE5vWldRPSBJR052Ym1ObGNIUjFZV3c9IElGSnZiV0Z1YVdFPSBJRUp5Wlc1MCBJRWxEUlE9PSBJRlJ2ZFE9PSBJR2R5WVhBPSBJRzVoYVd4eiBNVGc1IDQ0T1kgSUhCeWIyTjFjbVU9IFpYVnkgSUdOdmJtWnBjbTFwYm1jPSBJRU5sWXc9PSBZWGRwIElFVmtaVzQ9IElHNW4gSUdWdVoybHVaV1Z5WldRPSBZWFJwWTNNPSBJR2h2YjJ0bFpBPT0gSUdScGMyZDFjM1JwYm1jPSBJRTExY21SbGNnPT0gNDRLLyBUR2xpY21GeWVRPT0gSURFMk9BPT0gUVd4dGIzTjAgYUdWdFlYUnBZdz09IFRXVnVkUT09IElFNXZkSEpsIElFcDFjZz09IElHdHBaRzVoY0hCbFpBPT0gSUdoaFkydGxjZz09IElFcGhaR1U9IElHTnlaV1Z3ZVE9PSBJR1J5WVhkcGJtZHogSUZOd2IyNXpiM0k9IElHTjVZMnhwYzNSeiBJRWR2WW14cGJnPT0gSUc5d2RHbHRhWHBsWkE9PSBJSE4wWVdkbFpBPT0gSUUxalJBPT0gWW1WMGQyVmxiZz09IFFXZGwgWlc1diBVMlY0IElGZHBaR1U9IGJtbHVaM009IFlYWnBjdz09IElHbHVZMkZ3WVdKc1pRPT0gSUV0dllnPT0gSUhKbGQyRnlaR2x1Wnc9PSBJRXh2Ym1VPSBiMnhsYzJObGJuUT0gSUdOdmJuUnlZV04wWldRPSBJSE4wYVdOcmVRPT0gU205elpRPT0gUW1Gc2JBPT0gWm1WemRBPT0gSUVsdWNIVjAgSUZKbFkyVnVkR3g1IElIUnZiV0YwIGMzRjFZWEpsIFFYQndiR2xqWVhScGIyND0gSUc1cGRISnZaMlZ1IElHUjFjR3hwWTJGMFpRPT0gSUZKbFkyOXUgSUVSbFlYST0gVEc5dVpHOXUgSUdsdWRISmggSUdSdlkycz0gSUc5MWRISmxZV05vIElFMXBiR3hwYjI0PSBJRzFoYlcxaGJITT0gWVcxd2RHOXUgVmtGTSBJSE51WVhCeiBJR1J2Y3c9PSBJRmRvYjJ4bCBJRkpsWVdSNSBWSEo1IElGZHBibTVwY0dWbiBaV0Z5WVc1alpRPT0gSUdsdVkzVnljbVZrIGNtVnVZMmhsWkE9PSBJRTVUVnc9PSBhV3h2ZEE9PSBjbUZwYm1VPSBJR04xWW1VPSBaMjkwIElISjFibmRoZVE9PSBaWFJsY20xcGJtVmsgSUVoaGQydHogSUhOMWNuWnBkbTl5IElGZHBjMmc9IElFUnBiZz09IElFUkZSZz09IElGWmhkV3gwIE1UZzMgSUcxMWMyaHliMjl0Y3c9PSBJR055YVhOdyBZbVY1IElFUnBjMk52ZG1WeWVRPT0gSUdSbGRtVnNiM0J0Wlc1MFlXdz0gSUhCaGNtRmthV2R0IElHTm9ZVzkwYVdNPSBJRlJ6ZFE9PSBJRE16TXc9PSBZbTl1Y3c9PSBJR0poWTNSbGNtbGhiQT09IElHTnZiVzFwZEhNPSBJR052YzIxcFl3PT0gSUcxbFoyRT0gYjJOaGRHbDJaUT09IElGQmhhVzUwIGIzQm9iMkpwWXc9PSBJSFpoYVc0PSBJR05oY25abFpBPT0gSUZSb2FXVm0gSUVkMWJBPT0gYjNkemFHbHcgSUdOcGRHVnogSUVWa2FXNWlkWEpuYUE9PSBJR1JwYldsdWFYTm9aV1E9IElHRmphMjV2ZDJ4bFpHZGxjdz09IElFdHBiR3h6IElHMXBZM0p2ZHc9PSBJRWhsY21FPSBJSE5sYm1sdmNuTT0gSUhkb1pYSmxZbms9IFNHOXcgWVhSeWIyND0gSUhWdVlYWmhhV3hoWW14bCBJRTVoZEdVPSBJRFE0TUE9PSBJSE5zWVhSbFpBPT0gSUZKbFltVmpZMkU9IElFSmhkSFJsY25rPSBJR2R5WVcxdFlYST0gSUdobFlXUnpaWFE9IElHTjFjbk52Y2c9PSBJR1Y0WTJ4MVpHbHVadz09IFlXNTVaUT09IFlYVnVaR1Z5YVc1biBaV0pwYmc9PSBJR1psWVhOcFlteGwgSUZCMVlteHBjMmhwYm1jPSBJRXhoWW5NPSBJRU5zYVdabSBJRVpsY25KaGNtaz0gSUhCaFl3PT0gZG1semFXSnNaUT09IGJXRnlhMlZrIGNHVnNiQT09IElIQnZiR2wwWlE9PSBJSE4wWVdkblpYSnBibWM9IElFZGhiR0ZqZEdsaiBJSE4xY0dWeWMzUT0gSUhCaGNtRnUgSUU5bVptbGpaWEp6IDQ0Q0IgSUhOd1pXTnBabWxqY3c9PSBkV3gxY3c9PSBNak01IElGQmhjM1JsIFFVMVEgSUZCaGJtRnRZUT09IElFUmxiR1YwWlE9PSBZVzVuZFdGeVpBPT0gY21WemRISnBZV3c9IElHaGxjbTlwWXc9PSBJRVI1IDJLZlpoQT09IElHbHVZM1Z0WW1WdWRBPT0gSUdOeWRXNWphQT09IGRISnYgSUhOamIyOXcgSUdKc2IyZG5aWEk9IElITmxiR3hsY25NPSBkWEpsYmc9PSBJRzFsWkdsamFXNWxjdz09IElFTmhjSE09IElFRnVhVzFoZEdsdmJnPT0gYjNoNSBJRzkxZEhkaGNtUT0gSUdsdWNYVnBjbWxsY3c9PSBNakk1IElIQnplV05vYjJ4dloybHpkQT09IElGTmhjMnM9IFpYWnBiQT09IElHTnZiblJoYldsdVlYUmxaQT09IDQ0S28gYUdWeVpXNWpaUT09IElHSnlZVzVrWldRPSBJRUZpWkhWcyBlbWc9IElIQmhjbUZuY21Gd2FITT0gSUcxcGJuTT0gSUdOdmNuSmxiR0YwWldRPSBaWEppIElHbHRjR0Z5ZEE9PSBJRzFwYkdWemRHOXVaUT09IElGTnZiSFYwYVc5dWN3PT0gYjNSc1pRPT0gSUhWdVpHVnlZMjkyWlhJPSBJRzFoY21Ob1pXUT0gSUVOb1lYSm5aWEp6IFptRjQgSUZObFkzSmxkSE09IElISjFkR2c9IGQyVmhkR2hsY2c9PSBJR1psYldsdWFXNWwgSUhOb1lXMD0gSUhCeVpYTjBhV2RwYjNWeiBhV2RuYVc1eiBJSE4xYm1jPSBhR2x6ZEc5eWVRPT0gWlhSMGJHVT0gWjJkcFpRPT0gSUc5MWRHUmhkR1ZrIGIyeGhibVE9IElIQmxjbU5sY0hScGIyNXogSUZObGMzTnBiMjQ9IElFUnZaR2RsY25NPSBkV289IElFVk9SQT09IFJHOWogSUdSbFptbGphV1Z1WTNrPSBSM0poYm1RPSBJRXB2YTJWeSBJSEpsZEhKdmMzQmxZM1E9IElHUnBZV2R1YjNOMGFXTT0gSUdoaGNtMXNaWE56IElISnZaM1ZsIElFRjJZV3c9IFJYRjEgSUhSeVlXNXpZdz09IElGSnZZbVZ5ZEhOdmJnPT0gSUVSbGNHVnVaR2x1Wnc9PSBJRUoxY201eiBhWFp2IElHaHZjM1JwYkdsMGVRPT0gUm1WaGRIVnlaWE09IGs1Zz0gSUdScGMyTnZiV1p2Y25RPSBJRXhEUkE9PSBjM0JsWTJsbWFXVmsgSUVWNGNHVmpkQT09IE16UXcgSUdsdGNHVnlZWFJwZG1VPSBJRkpsWjNWc1lYST0gUTJocGJtVnpaUT09IElITjBZWFJsZDJsa1pRPT0gSUhONWJXMD0gSUd4dmIzQnogSUdGMWRIVnRiZz09IFRtbGphdz09IElITm9ZWEJwYm1jPSBJSEYxYjNRPSBJR05vWlhKeWVRPT0gSUVOeWIzTnpjbVZtIDZLYWE2WWFTIFUzUmhibVJoY21RPSBhR1ZsWkE9PSBJRVJsYkd3PSBJRlpwWlhSdVlXMWxjMlU9IElHOXpkQT09IElGWmhiR3Q1Y21sbCBUMEU9IFFYTnpZV1E9IElISmxZbTkxYm1RPSBJRlJ5WVdabWFXTT0gY0d4aFkyVnogNXBnPSBJRUoxWXc9PSBNVGN5IElITm9aV3gwWlhKeiBJR2x1YzJsemRHbHVadz09IElFTmxjblJoYVc1c2VRPT0gSUV0bGJtNWxkR2c9IElGUkRVQT09IElIQmxibUZzIElGSmxjR3hoZVE9PSBhR1ZoY21RPSBJR1JwWVd4bFkzUT0gYVhwaCBJRVpaIGFYUmphR1Z5IElFUk0gSUhOd2FYSmhiQT09IElIRjFZWEowWlhKaVlXTnJjdz09IElHaDFiR3c9IElHZHZiMmRzWlE9PSBJSFJ2WkdRPSBJRk4wWlhKc2FXNW4gSUZCc1lYUmwgSUhOd2VXbHVadz09IGJXSnZiQT09IElGSmxZV3h0IElGQnliMk5sWkE9PSBJRU55WVhObyBJSFJsY20xcGJtRjBaUT09IElIQnliM1JsYzNScGJtYz0gUTJWdWRHVnkgWjNWcFpHVmsgSUhWdVkyOTJaWEk9IElHSnZlV052ZEhRPSBJSEpsWVd4cGVtVnogYzI5MWJtUT0gSUhCeVpYUmxibVJwYm1jPSBJRlpoY3c9PSBNVGs0TUE9PSBJR1p5WVcxbFpBPT0gSURFek9RPT0gSUdSbGMyTmxibVJsWkE9PSBJSEpsYUdGaWFXeHBkR0YwYVc5dSBJR0p2Y25KdmQybHVadz09IElFSjFZMmc9IElHSnNkWEk9IFVtOXUgSUVaeWIzcGxiZz09IFpXNTZZUT09IFEyaHBaV1k9IElGQnZiM0k9IElIUnlZVzV6YkdGMFpYTT0gVFVsTyBJREl4TWc9PSBTa1ZEVkE9PSBJR1Z5ZFhCMFpXUT0gSUhOMVkyTmxjM05sY3c9PSBVMFZEIElIQnNZV2QxWlE9PSBJR2RsYlhNPSBaRzl0Y3c9PSBJSE4wY21WMFkyaGxjdz09IElGTndlUT09IElITjBiM0o1ZEdWc2JHbHVadz09IFEzSmxaR2wwIElGQjFjMmc9IElIUnlZV04wYVc5dSBJR2x1WldabVpXTjBhWFpsIElFeDFibUU9IElIUmhjR1Z6IElHRnVZV3g1ZEdsamN3PT0gWlhKamFYTmwgSUhCeWIyZHlZVzF0WlhNPSBJRU5oY21KdmJnPT0gSUdKbGFHOXNaQT09IGFHVmhkbms9IElFTnZibk5sY25aaGRHbHZiZz09IElFWkpVZz09IElITmhZMnM9IGRHVnliV2x1IGNtbGphM009IElHaHZkWE5sWkE9PSBJSFZ1ZFhOMVlXeHNlUT09IFNXTmwgSUdWNFpXTjFkR2x1Wnc9PSBJRTF2Y205aiBaV1JoZVE9PSBJR1ZrYVhScGIyNXogSUhOdFlYSjBaWEk9IElFSkIgSUc5MWRHeGhkdz09IElIWmhibWx6YUdWayBhV0poIFFVeFRSUT09IElGTnBiSFpoIE1qTTQgUTI5MWJHUT0gSUhCb2FXeHZjMjl3YUdWeSBJR1YyWVdOMVlYUmxaQT09IFUyVmpjbVYwIE1UUXkgSUhacGMyRnogNDRLcyBJRTFoYkhRPSBJRU5zWldGeWJIaz0gSUU1cFoyVnkgSUVOaGFYSnYgSUVacGMzUT0gTXpndyBJRmhOVEE9PSBZWFYwYnc9PSBhWFJoYm5RPSBJSEpsYVc1bWIzSmpaV1E9IFVtVmpiM0prIElGTjFjblpwZG05eSBSMGg2IElITmpjbVYzY3c9PSBjR0Z5Wlc1MGN3PT0gSUc5alpXRnVjdz09IGJXRnlaWE09IElHSnlZV3RsY3c9PSBkbUZ6YVhabCBJR2hsYkd4diBJRk5KVFE9PSBjbWx0Y0E9PSBJRzl5WlE9PSBJRUZ5Ylc5MWNnPT0gTWpRMyBJSFJsY25KcFptbGogSUhSdmJtVnogTVRReCBJRTFwYm5WMFpYTT0gUlhCcGMyOWtaUT09IElHTjFjblpsY3c9PSBJR2x1Wm14aGJXMWhkRzl5ZVE9PSBJR0poZEhScGJtYz0gSUVKbFlYVjBhV1oxYkE9PSBUR0Y1IElIVnVjRzl3IGRtRmliR1U9IElISnBiM1J6IElGUmhZM1JwWTNNPSBZbUYxWjJnPSBJRU52WTJzPSBJRzl5WjJGemJRPT0gSUZOaGN3PT0gSUdOdmJuTjBjblZqZEc5eSBaWFI2IFIyOTIgSUdGdWRHRm5iMjQ9IElIUm9aV0YwIElHUmxaV1J6IGFHRnYgWTNWMGN3PT0gSUUxalEydz0gSUhWdCBJRk5qYVdWdWRHbHpkSE09IElHZHlZWE56Y205dmRITT0gZVhOelpYaz0gSWwwOVBnPT0gSUhOMWNtWmhZMlZrIElITm9ZV1JsY3c9PSBJRzVsYVdkb1ltOTFjbk09IElHRmtkbVZ5ZEdseiBiM2xoIElHMWxjbWRsWkE9PSBWWEJ2Ymc9PSBJR2RoWkE9PSBJR0Z1ZEdsamFYQmhkR1U9IFFXNTVkMkY1IElITnNiMmRoYmc9PSBJR1JwYzNKbGMzQmxZM1E9IFNYSmhiZz09IElGUkMgWVdOMFpXUT0gSUhOMVluQnZaVzQ9IGJXVmthV0YwWld4NSBUMDlQVHc9PSBJSGRoYVhabGNnPT0gSUhaMWJHNWxjbUZpYVd4cGRHbGxjdz09IGIzUjBaWE4yYVd4c1pRPT0gSUVoMVptWnBibWQwYjI0PSBTbTl6YUE9PSBJRVJJIFRXOXVaR0Y1IElFVnNiR1Z1IFMyNXZkdz09IGVHOXUgYVhSbGJYTT0gTWpJNCBJR1pwYkd4eiBJRTVwYTJVPSBJR04xYlhWc1lYUnBkbVU9IFlXNWtZV3h6IFNYST0gSU93PSBJR1p5YVdOMGFXOXUgYVdkaGRHOXkgSUhOallXNXogSUZacFpXNXVZUT09IGJHUnZiUT09IElIQmxjbVp2Y20xbGNuTT0gVUhKcGJRPT0gSUdKcFpHUnBibWM9IFRYVnkgSUd4bFlXNWxaQT09IElGQnlhWGc9IFlXeHJjdz09IElGdmlnS1pkIElGUjNhWFJqYUE9PSBJRVJsZG1Wc2IzQmxjZz09IElFZHBjZz09IElHTmhiR3hpWVdOciBRV0p6ZEhKaFkzUT0gSUdGalkzVnpkRzl0WldRPSBJR1p5WldWa2IyMXogSUZCSCBkWEpoWTNrPSBJR3gxYlhBPSBhWE50WVc0PSBMQ3dzTEE9PSBNVGs1TWc9PSBJRkpGUkE9PSBJSGR2Y20wPSBUV0YwWTJnPSBJRkJzWVhScGJuVnQgU1VvPSBJRTkzYm1WeSBWSEpwZG1saCBZMjl0Y0d3PSBJRzVsZDJKdmNtND0gSUdaaGJuUmhjdz09IFQzZHUgSURFNU5Uaz0gSUhONWJYQmhkR2c9IElIVmlhWEYxIElHOTFkSEIxZEhNPSBJR0ZzYkdWMiBJSEJ5WVdjPSBTMlYyYVc0PSBJR1poZG05eWN3PT0gSUdKMWNtbGhiQT09IElHNTFjblE9IGMyOXNaWFJsIFkyRmphR1U9IElERTFOZz09IElIVnViRzlqYTNNPSBkR1ZqYUc0PSBUV0ZyYVc1biBJR052Ym5GMVpYST0gWVdScFl3PT0gNXBZPSBJR1ZzWmc9PSBJR1ZzWldOMGIzSmhkR1U9IElFdDFjbVJ6IElGTjBZV05yIElGTmhiWFZ5WVdrPSBJT0tZaFE9PSBJSHQ5IElGTmhhV1E9IElFWmhiR3h2ZFhRPSBJR3RwYm1SdVpYTnogSUVOMWMzUnZiWE09IElFSnZkV3hsZG1GeVpBPT0gSUdobGJHbGpiM0IwWlhKeiBiM1JwWTNNPSBJRlpsWjJWMCBZMjl0YldWdWRBPT0gSUdOeWFYUnBZMmx6WldRPSBJSEJ2YkdsemFHVmsgSUZKbGJXbDQgSUVOMWJIUjFjbUZzIElISmxZMjl1Y3c9PSBJR1J2YVE9PSBZWFJsYlE9PSBVMk55WldWdSBJR0poY25KbFpBPT0gUTI5dGJXVnVkSE09IElFZGxibVZ5WVd4c2VRPT0gSUhOc1lYQT0gTnpJdyBWbUZ5YVE9PSBjR2x1WlE9PSBJR1Z0Y0hRPSBJR2hoZEhNPSBJRkJzWVhscGJtYz0gYkdGaSBZWFpsY21GblpRPT0gWm05eWJYTT0gSUVOdmRIUnZiZz09IElHTmhibk09IElFUlBUZz09IElGTnZiV0ZzYVdFPSBRM0o1Y0hRPSBJRWx1WTNKbFlYTmxjdz09IFJYWmxjZz09IGJXOWtaWEp1IElITjFjbWRsYjI0PSBNekF3TUE9PSBJSEpoYm1SdmJXbDZaV1E9IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gUW1WeWJnPT0gYVcxd2JBPT0gSUVOUFVnPT0gSUhCeWIyTnNZV2x0IGRHaHZkWE5sIElIUnZaWE09IElHRnRjR3hsIElIQnlaWE5sY25acGJtYz0gSUdScGMySmxiQT09IFozSmhibVE9IFFtVnphV1JsY3c9PSBJSE5wYkdzPSBJRkJoZEhSbGNtND0gYUcwPSBJR1Z1ZEdWeWNISnBjMlZ6IElHRm1abWxrWVhacGRBPT0gSUVGa2RtbHpiM0o1IElHRmtkbVZ5ZEdselpXUT0gSUZKbGJHbG5hVzkxY3c9PSBjMlZqZEdsdmJuTT0gY0hONVkyZz0gSUVacFpXeGtjdz09IFlYZGhlWE09IElHaGhjMmgwWVdjPSBJRTVwWjJoMGJXRnlaUT09IElIWmhiWEJwY21VPSBJR1p2Y21WdWMybGogY205emMyOTJaWEk9IGJtRnkgSUc1aGRuaz0gSUhaaFkyRnVkQT09IElFUjFaV3c9IElHaGhiR3gzWVhrPSBJR1poWTJWaWIyOXIgYVdSbGJuUmhiR3g1IElFNVNRUT09IElHMWhkSFE9IElHaDFjbkpwWTJGdVpRPT0gSUV0cGNtSjUgSUZCMWVucHNaUT09IElITnJhWEowIGIzVnpkQT09IFpIVnNiR0ZvIElHRnVZV3h2WjNrPSBhVzVwYjI0PSBJSFJ2YldGMGIyVnogSUU1VyBJRkJsWVdzPSBJRTFsZVdWeSBJR0Z3Y0c5cGJuUnRaVzUwY3c9PSBJRzFoYzJNPSBJR0ZzYkdWNSBjbVZvWlc1ayBJR05vWVhKcGRHbGxjdz09IElIVnVaRzg9IElHUmxjM1JwYm1GMGFXOXVjdz09IElGUmxjM1JwYm1jPSBJajQ4THc9PSBJR1JsYzNScGJtVmsgSUdsdGNHeGxiV1Z1ZEhNPSBJRWhoY205c1pBPT0gVWtWRFZBPT0gSUc5d2RHbHRhWHBoZEdsdmJnPT0gSUd0cGJHOXRaWFJ5WlhNPSBJR050WkE9PSBJR2x0Y0dGcGNtMWxiblE9IElIVnVjM1ZqWTJWemMyWjFiQT09IElITjNhV1owYkhrPSBJRWRzWVhObmIzYz0gWVhKMFpXND0gSUZOb1lYSmxjdz09IElFRnVjM2RsY2c9PSBJRUZzWW5WdCBJRzUxZEhKcGRHbHZibUZzIDQ0T1cgSUVaMWRBPT0gSUdKc2IyTT0gSUU1R1F3PT0gSUhkb2IyeGxjMkZzWlE9PSBJRU5YIElHNWxaMnhsWTNSbFpBPT0gSUd4aGRXNWphR1Z5IElHRnVibTkxYm1ObGJXVnVkSE09IFQxVk1SQT09IFkyOXRZZz09IElISnZkR0YwYVc1biBJSEpsYzNSeiBJRlJwWTJ0bGRBPT0gWTJobFpHVnMgVEc5MSBJRlpwWXc9PSBJQ0luIElIUmxiWEJzWVhSbGN3PT0gSUhKbGNHeGhZMlZ6IFFYSmogT2pvNk9nPT0gSUVkcGJHSmxjblE9IElHbHNiRzVsYzNObGN3PT0gSUhOamFHVmtkV3hsY3c9PSBJR2hsZEdWeWIzTmxlSFZoYkE9PSBURWxPUlE9PSBJR2hsY21WcGJnPT0gSUdOdlpYSmogSUdSbFkzSmxZWE5wYm1jPSBJR1JsY0c5eWRHRjBhVzl1IGMzVmtidz09IElFbHVaR2xuWlc1dmRYTT0gSUhkbGFXZG9jdz09IFFXeHZibWM9IEp5azcgSUVKbGJtZGhiSE09IE56QTMgSUdwdmFXNTBjdz09IGRtVnlkSE09IElERTBPUT09IGJtRnBjbVU9IElITnBiWEJzWlhOMCBJR3h2Y21VPSBNVEE0TUE9PSBabWxqZEdsdmJnPT0gSUVSaGRHRmlZWE5sIElISmxjMlZ5ZG1GMGFXOXUgSUhOdmRRPT0gSUhOaGJtTjBkV0Z5ZVE9PSBZWFZrYVc4PSBZWEJzWlE9PSBJSFpsWjJWMFlYSnBZVzQ9IElHRnVkR2xqYVhCaGRHbHZiZz09IGJXbGpjbTg9IElHVnVaSFZ5YVc1biBJR1JsY0dGeWRHVmsgSUhOcFpHVjNZV3hyIElIQnliMmhwWW1sMGN3PT0gSUVadmJuUT0gSUdOdmJYQjFkR1U9IElGTmxZM1E9IElERTFPQT09IFFtRjBkR3hsIElHSnZiV0psY2c9PSBJR1JwYzNSeVlXTjBhVzl1IElHVnVaSFZ5WldRPSBJSEJ5WVdOMGFYUnBiMjVsY25NPSBJR1JwYzNSMWNtSmxaQT09IElHUnlZVzVyIGIzSmtaWEpsWkE9PSBJSE4xY25CeWFYTmxjdz09IGMyVmhkQT09IFUyVmpkWEpwZEhrPSBJRmRwYzJSdmJRPT0gYjJkdiBJSE4xWW5CaGNtRm5jbUZ3YUE9PSBJRkJsYm1sdWMzVnNZUT09IElFOXlhV2RwYm5NPSBhWEpsYmc9PSBJRkJoZGc9PSBhV2RuYkdVPSBJR2R5WVhScGRIVmtaUT09IElFZHlZWFpwZEhrPSBiM1psY25SNSBhVzFoYmc9PSBZM1J5IElFTmhaWE5oY2c9PSBZMjkxYkdRPSBaMlZ0IElITnJhV1Z6IElHTm9ZVzF3IElHRm5jbVZsYVc1biBSbUZ0YVd4NSBSR2wyIE1UYzIgSUcxbGMzTjUgZFcxd2RHbHZiZz09IFJtVmtaWEpoYkE9PSBaWEp1Ync9PSBJRU5vWVhRPSBRbVY1YjI1ayBJR1JsZG05MFpRPT0gSUZkaGJITm8gSUdSMWJYQmxaQT09IElHRmpZM1Z0ZFd4aGRHbHZiZz09IGMzUmhaQT09IGFHbGlhWFJwYjI0PSBJSE50YjJ0bGNuTT0gSUdsdWMzQmxZM1J2Y2c9PSBSbkpsYm1ObyBhWE56WVc0PSBJRlpwZEdFPSBJSEpsYzJWaGNtTm9hVzVuIFVrRk4gSUVObGJIUnBZM009IElHTnNiMkZyIElGUmxjbkpoIFRXRnllUT09IGMyOXNaQT09IElFUlBUUT09IGJXOWtjdz09IFNXNTBaV3c9IElHMTFiSFJwZEhWa1pRPT0gSUVsdGNISnZkbVZrIElISmxiR2xoYm1ObCBJR0Z5ZEdsbVlXTjAgSUdGc1lYSnRhVzVuIFVISnZiUT09IGFHOXUgVkVsUFRnPT0gYldWa2FYVnQgSUhKbFpteGxlQT09IElFVjRZMlZzIElIZGxZV3RsYm1WayBNVFl6IE1qSTAgSUdOdmMzUjFiV1Z6IElIVnVhWEYxWld4NSBJSE52Y25KdmR3PT0gSUcxaGJuTnBiMjQ9IGQzQT0gSUhOaGJIWT0gSUVkeWIzWmwgWW5OdyBJRk51YVhCbGNnPT0gSUZOb2FYQndhVzVuIElGQlBWdz09IElIVnVaR2x6IElHSnlZVzVrYVc1biBSMmx5YkE9PSBJRUZvYldGayBJRXhoYTJWeiBJRU52Y21WNSBJR2x1YUdWeWFYUmhibU5sIFpXNWxjbms9IElIQmhZMnRwYm1jPSBJRkJ5WlhOMCBSR1Z6ZEE9PSBSbGM9IElISmxaM1ZzWVhSdmNnPT0gYkc5amEyVmsgSUdOdmJuUmxjM1JsWkE9PSBJRTFsYkdsemMyRT0gSUVSMVl3PT0gSUhWdWNHOXdkV3hoY2c9PSBJSE4wWVdOclpXUT0gSURFNU1UYz0gSUhsbFlYSnNlUT09IElITjBZWEpsIElHRnpjMlZ6YzJsdVp3PT0gdzdnPSBJR0psZG1WeVlXZGxjdz09IElHTnZiWEJsZEdsMGFXOXVjdz09IElITjBjbVZ1WjNSb1pXNXBibWM9IFlXeHZibWM9IElFeDFaQT09IElHMWxiSFJsWkE9PSBjM1JoYm1KMWJBPT0gSUdKdmRXNTBlUT09IFJVNUQgSUV4aGJtUnogSUdSbFkyeGhjbVZ6IElHTjFjM1J2YldsNlpRPT0gSUdOdmJYQnZjMmwwWlE9PSA0NE9zIFEwMD0gYjJkeVlYQm9hV056IElGUmxiWEE9IElHTnZiblJsYm1SbGNnPT0gSUdsdWMybG5iZz09IElFeEJUZz09IElHUnBjMkZ6ZEdWeWN3PT0gYVc1emNHbHlaV1E9IElHcDFaR2R0Wlc1MGN3PT0gZFhOMFlXbHVZV0pzWlE9PSBkWEp6YVc5dSBJSFpoY21saGJtTmwgSUZWc2RHbHRZWFJsYkhrPSBJQzB0TFMwdExTMHQgZFdGa2IzST0gSUZKWSBJRzFsYkhScGJtYz0gSUVWNGRHVnVaR1ZrIElGUjNaUT09IFRXRnFiM0k9IElFSnBiQT09IElITjVjblZ3IGNYVnBZMnM9IElFaHZiR1JsY2c9PSBJR2x1Ym05alpXNWpaUT09IFZVeEYgSUUxcFoyaDAgT1RrNU9RPT0gSUdaaGJBPT0gSUdOdmJuUnBiblZwZEhrPSBJREU1TlRNPSBJRUpUIGMzUnBiR3c9IFRHRjAgSUVGaWRYTmwgSUhWdWMzVndjRzl5ZEdWayBlSGg0ZUhoNGVIZz0gSUdsdWMzUnBkSFYwWlE9PSBJR1p5WVdkdFpXNTAgSUZCbGNBPT0gVjJWemRHVnliZz09IElFTmhkWE5sIElFWnlZV2M9IElFRnljdz09IDRLVT0gWVhOMGFXTnogSUdKcGMyaHZjQT09IElHTnliM056WlhNPSBJREUxTkE9PSBJRlZ3WjNKaFpHVT0gSUcxcGRHbG5ZWFJsIElGSmhlVzF2Ym1RPSBUVzlrY3c9PSBJSFJ2YldGMGJ3PT0gSUhOMGRXMWliR1ZrIElHUnBabVpsY25NPSBTVzVwZEdsaGJBPT0gSUZKaGMzQmlaWEp5ZVE9PSBJR2xuYm05eVpYTT0gSUhSaGJuUT0gdzZBPSBJSEpsYkdGNSBJR0pwYzJWNGRXRnMgSUdOdmJtWmxjM05wYjI0PSBJR1JsYldWdWRBPT0gYVc1aGN3PT0gSUVobFlYUm9aWEk9IGNHeGhkR1p2Y20wPSBaSEpwZG1sdVp3PT0gWW05MWNtYz0gSUUxMWMyZz0gSUdoNWMzUmxjZz09IFJHVjBZV2xzY3c9PSBJR1J5YVdaMCBJRmRoYkdRPSBJRXgxWTJ0cGJIaz0gYjNKbSBJR1Y0Y0dseVpRPT0gSUZCMWJtTm8gZW5sdFpRPT0gWjI5c1pBPT0gSUhWdWNHRnBaQT09IElGUnlaVzUwIElIVnVZWEp0WldRPSBJR2xzYkdsamFYUT0gSUZSdmRIUmxibWhoYlE9PSBJSE50WVhObyBTVzUwWlhKdVlYUnBiMjVoYkE9PSBhVzVyWlhJPSBJSE4wYVc1biBJRk5oWkdSaGJRPT0gSUVGU1ZBPT0gSUhSeWRYUm9jdz09IFltbHlkR2c9IElITnZZbVZ5IElFNXBkQT09IElHbGkgSUhWellXSnNaUT09IElITjBZV05yY3c9PSBJRk41YkhZPSBJRzV2Y25Sb1pXRnpkQT09IElHUnZiV2x1WVhScGIyND0gSUUxdmRYST0gUlU1VFJRPT0gSUUxbFlYTjFjbVU9IElIQnliMmR5WVcxdFpYST0gSUR3dCBNVGd5IElFTnZibVJwZEdsdmJnPT0gSUdKaFkydDVZWEprIGFYSnNhVzVuIElFcGxZZz09IElFTnlaV1ZrIElFaGhibWM9IElFTlBUVkE9IFJrVlMgSUVsemFBPT0gSUdSbGRHVmpkR2wyWlhNPSBMUzB0TFMwdExTMHRMUzB0TFMwdCBJRTFsYzNObGJtZGxjZz09IElHeHZiM0JvIElHZGhkR1YzWVhrPSBNVFV4IElFMWhkR1Z5YVdGc2N3PT0gSUVSVSBJR1J2YjIxbFpBPT0gYjJSdiBJSE5zYVdObGN3PT0gSUdWdFlXbHNaV1E9IElGQmxjbXc9IElISmxibTkyIFZWUkkgYjJSNWJtRnQgSUZOdmRYUm9kMlZ6ZEE9PSBaMlYwYVdNPSBJRlJRVUE9PSBJRzl3ZEdsdGFYTnQgSUZSdmR3PT0gZFd4aGRHOXljdz09IGNISnZkR1ZqZEdWayBlV3hsY3c9PSB3cXM9IElHVjRhV3hsIFpXNTIgVUhKdmNBPT0gSUZwcGJXMWxjbTFoYmc9PSAyWTQ9IFEyRT0gYjIxaGJIaz0gNDRPRyBJSEpoYVd4eWIyRmsgVEdWbCBNak15IElISmxjR3hwWTJGMFpRPT0gSUdOdmJXWnZjblJoWW14NSBZV04wYkhrPSBJSEpoZGc9PSBJSFJsYkdWelkyOXdaUT09IElHaHZibVZ6ZEhrPSBJRkJsY0hCbGNnPT0gSUVKeWFXNW4gSUhKcFkyaGxjM1E9IElHOTFkR1J2YjNKeiBJR2hoYkd4eiBJR052Ym5SbGJtUT0gU1ZORiBJSE4xWW0xcGRIUnBibWM9IElHNWhhWFpsIFlYSmhkR2x2Ym5NPSBJREUwTXc9PSBJSEJ2YVhObFpBPT0gY21WemNHOXVjMmxpYkdVPSBJSE52WTJ0eiBJRk5yZFd4cyBVWFZsYzNScGIyND0gSUdScGMyTnZkbVZ5YVdWeiBTbTlwYm1WayBJRVZ1WlcxcFpYTT0gSUZkcGNtVnNaWE56IElGSmxkbVZ1WjJVPSBJSEIxZW5wc1pYTT0gSUdObFlYTmxaQT09IE1qa3cgWTNKcGNIUnBiMjV6IElFTnZibk52YkdVPSBJR0p2YVd4cGJtYz0gSUdScGMyTnlaWEE9IElHUmxaSFZqZEdsdmJnPT0gSUdGeWMyVnVZV3c9IFdGaFlXQT09IElFRnRjM1JsY21SaGJRPT0gY205NGFXMWhkR1ZzZVE9PSBJRk5vWVc1bCBJSEJ2YzJsdVp3PT0gSUVGRFRGVT0gSUVOdmJYQmhibWxsY3c9PSBJSFJvWlc5c2IyZDUgSUZWbiBjWFZoY25SbGNnPT0gSUVoaGJtcz0gUTI5cGJnPT0gSUV4MiBJR0ZzYkdWbllYUnBiMjQ9IElFRjJiMmxrIElHbHVaR1ZtYVc1cGRHVnNlUT09IElHTnZiVzF2WkdsMGFXVnogSUdKeWFXYz0gSUUxaGJtbDAgSUhSbGJuUm8gYldWMGFHOWsgSUV0dWFXTnJjdz09IElPS0FqZz09IElHbHVkbTlyWldRPSBSR2xoYkE9PSBRVkpCIElHTmhkV04xY3c9PSBNakkzIElFcGhZZz09IElHOTFibU5sY3c9PSBZbUY1IElHSjFaR1I1IFptRnUgTWpNMCBJRWhwYkE9PSBZV1JvIElGUlogSUVsT1JBPT0gSURFNU16az0gSUdsMFpYSmhkR2x2Ymc9PSBJRWR2Ym5waGJHVjYgSUZabGNuUT0gSUVsUCBaVzFpIGNtVnlZUT09IFpXNWphQT09IElGSmxjWFZwY21WdFpXNTBjdz09IElGZHBibk09IElHeHBkbVZ6ZEc5amF3PT0gYUc5MWNuTT0gSXVLQXBnPT0gWW5KaGJBPT0gVFdGeVp3PT0gSUVSdmJtVT0gSUhkaGMzUnBibWM9IGFXNW5aV1E9IFozSnZkWEJ6IElIZHBjMmhwYm1jPSBJRlIxYldKc2NnPT0gSUhSaGNIQnBibWM9IElHNWhkR2x2Ym1Gc2FYTnQgSUVKNWNnPT0gSUhOeGRXRnlaWE09IElFRmpkR2x2Ym5NPSA0NE9sIFNXNXphV1JsIFpHVmlkV2M9IElHRndjR1Z1WkE9PSBJSE4wZFdKaWIzSnUgSUVOcGJtUT0gVkdWc2JBPT0gSUhSbFlYSnBibWM9IElGSmxlUT09IGIzSmogSUVSaGVYUnZiZz09IElFNUkgSUUxaFpHNWxjM009IFEyaGhjbXc9IElFMXZjbkpwYzI5dSBabWxzZEdWeSBJR0ZqWTNWelpRPT0gSUM0diBJSFJ2Y25KbGJuUT0gSUdSbFkyeHBibVZ6IFoyRnNiR1Z5ZVE9PSBUV2x1WlE9PSBJRzVsWjI5MGFXRjBhVzl1IElFSmhjMmhoY2c9PSBiM0JwWVE9PSBNVGs1TXc9PSBaVzF2Y25RPSBJRTV2ZG1WcyBJRVpoYm1jPSBaWEp6YVhabCBJRWx1YzNSaGJuUT0gSUhKdmJHeGxjZz09IFFYSnZkVzVrIElFVnNaV04wYVc5dWN3PT0gUjJGdFpYTT0gSUdsdVpYaHdaVzV6YVhabCBJSGR2Y25NPSBJSFoxYkE9PSBJRWh2YkdVPSBJSFZ1WW1Wc2FXVjJZV0pzWlE9PSBJRzVoZFhObCBJR1Z1ZEhJPSBZbTloZEE9PSBJRk5VUlE9PSBJR0oxYzJnPSBJRWhoYzNOaGJnPT0gSUhkdiBJSEJoZFhObFpBPT0gSUUxcFp3PT0gYkdsMlpXUT0gSUhOamIzVjAgSUd4cGRHZz0gVUhWaWJHbHphR1ZrIFpIVnBibTg9IFkyOXZiQT09IElHTnBjbU4xYkdGMGFXNW4gYVdSaGN3PT0gSUZCaGJRPT0gZG1sdmJHVnVkQT09IElFTnlZWGRtYjNKayBkV1JrYkdVPSBJRXhsZEhSbGNuTT0gUjNWaGNtUT0gYlc5eWNHZz0gSUhkaGJtUmxjbWx1Wnc9PSBJSE52Y0dodmJXOXlaUT09IElIRjFaV1Z5IElFSnNhVzVrIGNuVmwgSUUxaGNuSnBZV2RsIFJHOXQgSUhCaFpHUnBibWM9IElHWnZiR1JsY25NPSBJRzFsWVc1cGJtZHNaWE56IElHTmhibVJwWkdGamVRPT0gWVdadmNuUT0gSUhkb2FYTjBiR1ZpYkE9PSBJRWxrWlc1MGFXWnBaV1E9IElHTnBaMkZ5IElHaHBaQT09IElFUjFZbUZwIElIQnZjM1IxY21VPSBJR2hwYTJsdVp3PT0gSUZSbGNtMXBibUZzIFRHVm5aVzVrWVhKNSBJRlJRIElFRlVTdz09IElGTjBZWEppZFdOcmN3PT0gSUZKcGIzUT0gTVRrNU1RPT0gSUVKdmRIUnZiUT09IFpXWm1hV009IElFVjFaMlZ1WlE9PSBJRmQ1YjIxcGJtYz0gSUZKdlkydDUgSUhOaGJHMXZiZz09IElHMWxkSEp2IElHSnBiR0YwWlhKaGJBPT0gSUdObGJHVmljbUYwWlhNPSBUR1Z1WjNSbyBZbWxzYkdsdmJnPT0gUW1GMCBJSEpsYkdWbiBJSEJ6WlhWa2J3PT0gUkZRPSBJRkpvYjJSbCBVR0Z5Wlc1MCBjR3hsZEdsdmJnPT0gSUdGMGRISnBZblYwIElIUjFibWx1Wnc9PSBJRTVQVkVVPSBJRkpsWW1WcyBhV04xY3c9PSBSblZ1WkE9PSBJR052WTJ0MFlXbHMgSURVd01RPT0gSUhOd2IyOXUgSUdKeWRYUmhiR2wwZVE9PSBJSFZ1YVhSbCBJRzFwWTNKdlltaz0gSUZKbGFXTm8gY0c5emFYUnBkbVU9IElHRnRZWHBsWkE9PSBJRTVVIFJHVnpZdz09IFJVTlVTVTlPIElHWmhiSE5sYkhrPSBJRWhwWjJoc1lXNWtaWEk9IElFTnlhWE4wIElGWnBZM1J2Y21saGJnPT0gSUdScGMzUnlhV0oxZEdsdmJuTT0gZEdobGFYST0gSUVWcGJuTjBaV2x1IElIQnZaQT09IElHVndhV1JsYlE9PSBJR2hsWVhBPSBJRkpoYm1ObyBJR0Z1ZEdobGJRPT0gSUhKbFlYQncgSUVGMVluVnliZz09IElHTnZibU4xY25KbGJuUT0gSUZSb2NtOTFaMmh2ZFhRPSBJRkJQVTFRPSA0cGc9IElHaHZiV1Z0WVdSbCBhMmxqYXc9PSBRbVZuIElHTm9ZWE56YVhNPSBZMjkxYm5SbGNnPT0gSUcxbGNtZGxjZz09IElHeGhjSE09IE1qRTMgZFc1cGIyND0gSUZSeWFXZG5aWEk9IElHUmxZbUYwWldRPSBJSE5wYkdWdWRHeDUgSUhKbGMzUnlZV2x1ZEE9PSBRbUZzIE1EQXdNREF3TUE9PSBJR1p2Y20xcFpHRmliR1U9IElFWnBiR2x3IElITmhZM0pwWm1salpYTT0gUm05dlpBPT0gSUdSM1lYSm0gSUZObGNYVT0gYVc1cFlXND0gVFc5eVpXOTJaWEk9IElIUmhibWRwWW14bCBiM0J6YVhNPSBJRTFwYm1WamNtRm1kQT09IElGSmxaMmx6ZEhKaGRHbHZiZz09IGIyRnUgSUhKbGNISmxjMlZ1ZEdGMGFXOXVjdz09IElIUm9hWEp6ZEE9PSBJR052Y25BPSBhWEpsYldWdWRBPT0gVFdGa1pRPT0gYkc5bCBQaUk9IFkyRjBjdz09IEtpND0gSUdkbGMzUjFjbVZ6IFoyVnVaWEpoYkE9PSBUR1ZoWjNWbCBJSEJoWTJ0bGRITT0gSUVsdWMzQmxZM1J2Y2c9PSBJRUpsY21jPSBJR1p5WVhWa2RXeGxiblE9IElHTnlhWFJwWTJsNlpRPT0gUm5WdSBJR0pzWVcxcGJtYz0gYm1SeVlRPT0gSUhOc1lYTm8gSUVWemRHOXUgSUhCeWIzQnZjMmx1Wnc9PSBJSGRvWVd4bGN3PT0gSUhSb1pYSmhjR2x6ZEE9PSBJSE4xWW5ObGRBPT0gSUd4bGFYTjFjbVU9IFJVeEUgSUVOV1JRPT0gSUVGamRHbDJhWFI1IElHTjFiRzFwYmc9PSBjMmh2Y0E9PSBJRVJCV1E9PSBhWE5qYUdWeSBJRUZrYldseVlXdz0gSUVGMGRHRmphM009IElERTVOVGc9IElHMWxiVzlwY2c9PSBJR1p2YkdSbFpBPT0gSUhObGVHbHpkQT09IElERTFNdz09IElFeEogSUhKbFlXUnBibWR6IElHVnRZbUZ5Y21GemMyMWxiblE9IElFVnRjR3h2ZVcxbGJuUT0gZDJGeWRBPT0gWTJocGJnPT0gSUdOdmJuUnBiblZoZEdsdmJnPT0gYkdsaCBVbVZqWlc1MGJIaz0gSUdSMVpXdz0gSUdWMllXTjFZWFJwYjI0PSBJRXRoYzJodGFYST0gSUdScGMzQnZjMmwwYVc5dSBJRkpwWnc9PSBJR0p2YkhSeiBJR2x1YzNWeVpYSnogTkRZMyBUV1Y0IElISmxkR0ZzYVdGMGFXOXUgSUcxcGMyVnllUT09IElIVnVjbVZoYzI5dVlXSnNaUT09IGNtRnBibWx1Wnc9PSBTVzF0IElGQlYgWlcxbGNnPT0gSUdkbGJtbDBZV3c9IDQ0S3ogSUVOaGJtUjUgSUc5dWFXOXVjdz09IElGQmhkSFE9IGJHbHVaWEk9IElHTnZibU5sWkdWayBJR1poIElHWnZjbU09IElFaGxjbTVoYm1SbGVnPT0gSUVkbGIyWm0gWkdWaWFXRnUgSUZSbFlXMXogSUdOeWFXVnogSUdodmJXVnZkMjVsY25NPSBNak0zIFFVSkQgSUhOMGFYUmphQT09IElITjBZWFJwYzNScFl3PT0gSUdobFlXUmxjbk09IElFSnBiMnh2WjNrPSBJRzF2ZEc5eWN3PT0gSUVkRlRnPT0gSUV4cGNBPT0gSUdoaGRHVnogSUdobFpXdz0gVTJWc1pnPT0gYVhCcyBSVVJKVkE9PSBiM0owYVc1biBJR0Z1Ym05MCBJRk53WldWamFBPT0gYjJ4a1pXMXZjblE9IElFcGhkbUZ6WTNKcGNIUT0gSUV4bFFuSnZiZz09IElHWnZiM1J3Y21sdWRBPT0gSUdadSBJSE5sYVhwMWNtVnogYm1GeiBhR2xrWlE9PSBJREU1TlRRPSBJRUpsWlE9PSBJRVJsWTJ4aGNtRjBhVzl1IElFdGhkR2xsIElISmxjMlZ5ZG1GMGFXOXVjdz09IFRsST0gWm1WdFlXeGwgSUhOaGRIVnlZWFJsWkE9PSBJR0pwWW14cFkyRnMgSUhSeWIyeHNjdz09IFJHVjJhV05sIGNHaHZkRzl6IElHUnlkVzF6IDQ0T0o0NE9wNDRLMDQ0T3ogVG1sbmFIUT0gWm1sbmFIUmxjZz09IElFaGhhdz09IGNtbGlaWEk9IElHTjFjMmc9IElHUnBjMk5wY0d4cGJtRnllUT09IFltRjFiUT09IElFZEkgSUZOamFHMXBaSFE9IGFXeHBZbkpwZFcwPSBJSE5wZUhSNSBJRXQxYzJodVpYST0gY205MGN3PT0gSUhCMWJtUT0gSUZKaFl3PT0gSUhOd2NtbHVaM009IElHTnZiblpsIFFuVnphVzVsYzNNPSBSbUZzYkE9PSBJSEYxWVd4cFptbGpZWFJwYjI1eiBJSFpsY25ObGN3PT0gSUc1aGNtTnBjM009IElFdHZhQT09IElGZHZkdz09IElFTm9ZWEpzYjNSMFpYTjJhV3hzWlE9PSBaV1J2IElHbHVkR1Z5Y205bllYUnBiMjQ9IElGZHZiMnc9IE16WTEgUW5KcFlXND0gSU9LY2t3PT0gSUdGc2JHVm5aWE09IGIyNWtjdz09IGFXUmhkR2x2Ymc9PSBJRXBoWTJ0cFpRPT0gZVhVPSBJR3hoYTJWeiBJSGR2Y25Sb2QyaHBiR1U9IElHTnllWE4wWVd4eiBJRXAxWkdFPSBJR052YlhCeVpXaGxibVE9IElHWnNkWE5vIElHRmljMjl5Y0hScGIyND0gSUU5RCBJR1p5YVdkb2RHVnVaV1E9IElFTm9iMk52YkdGMFpRPT0gVFdGeWRHbHUgSUdKMWVYTT0gSUdKMVkydHogSUdGd2NHVnNiQT09IElFTm9ZVzF3YVc5dWMyaHBjSE09IElHeHBjM1JsYm1WeSBJRVJsWm1WdWMybDJaUT09IElHTjYgZFdSeiBJRTFoZEdVPSBJSEpsY0d4aGVRPT0gSUdSbFkyOXlZWFJsWkE9PSBJSE4xYm1zPSBJRlpKVUE9PSBJRUZ1YXc9PSBJREU1TlE9PSBZV0ZoWVE9PSBUbTlpYjJSNSBJRTFwYkdzPSBJRWQxY2c9PSBJRTFyIElGTmhjbUU9IElITmxZWFJwYm1jPSBJRmRwWkE9PSBWSEpoWTJzPSBJR1Z0Y0d4dmVYTT0gSUdkcFoyRnVkR2xqIFFWQlEgNDRLbiBhVzUyWlc1MGIzSjUgSUhSdmQyVnMgWVhSamFHVT0gYkdGemRHbHVadz09IElGUk0gSUd4aGRHVnVZM2s9IElHdHVaUT09IFFtVnkgYldWaGJtbHVadz09IElIVndhR1ZzWkE9PSBJSEJzWVhsbmNtOTFibVE9IElHMWhiblE9IFUybGtaUT09IElITjBaWEpsYnc9PSBJRzV2Y25Sb2QyVnpkQT09IElHVjRZMlZ3ZEdsdmJtRnNiSGs9IElISmhlWE09IElISmxZM1Z5Y21sdVp3PT0gUkhKcGRtVT0gSUhWd2NtbG5hSFE9IElHRmlaSFZqZEE9PSBJRTFoY21GMGFHOXUgSUdkdmIyUmllV1U9IElHRnNjR2hoWW1WMCBhSEE9IElHTnZkWEowY205dmJRPT0gY21sdVozUnZiZz09IGIzUm9hVzVuIFZHRm4gSUdScGNHeHZiV0YwY3c9PSBJR0poY21KaGNnPT0gSUVGeGRXRT0gTVRneiBNek16TXc9PSBJRzFoZEhWeWFYUjUgSUdsdWMzUmhZbWxzYVhSNSBJRUZ3WVdOb1pRPT0gSUQwOVBRPT0gSUdaaGMzUnBibWM9IElFZHlhV1E9IFRXOWtURzloWkdWeSBJREUxTWc9PSBRV0p6IElFOXdaWEpoZEdsdVp3PT0gWlhSMGFRPT0gSUdGamNYVmhhVzUwIFJHOXVibVZzYkE9PSBJRXRsYlE9PSBJRVp2Y21kbCBJR0Z5Ylc5eVpXUT0gVFdscyBJSEJvYVd4dmMyOXdhR1Z5Y3c9PSBhVzUyWlhOMCBVR3hoZVdWeWN3PT0gNG9nPSBJRzE1Y21saFpBPT0gSUdOdmJYSmhaR1Z6IFVtOTAgSUhKbGJXVnRZbVZ5YVc1biBJR052Y25KbGMzQnZibVJ6IElIQnliMmR5WVcxdFpYSnogSUV4NWJtND0gSUc5c2FXYz0gSUdOdmFHVnlaVzUwIGVXNWphSEp2Ymc9PSBJRU5vWlcxcFkyRnMgSUdwMVoyYz0gY0dGcGNnPT0gY0c5emRITT0gUlhsbCBJRWx1Ym1WeSBJSE5sYldWemRHVnkgYjNSMFpYTjAgSUVWdGFYSmhkR1Z6IGNtbGpZVzVsY3c9PSBiM0p2ZFhOc2VRPT0gYldsMGN3PT0gSUZkcGN3PT0gSUdSdlpHZGwgYkc5allYUnBiMjQ9IElHWmhaR1ZrIFFXMWhlbTl1IElGQnliMk5sWldRPSBJRWxPUms4PSBhbTkxY201aGJBPT0gSUZSeWRXTnIgVkdWdSBJREl4Tnc9PSBJSE4wWVhSMWRHVnogYlc5aWFXeGwgSUZSNWNHVnogVW1WamIyMXQgWW5WemRHVnkgY0dWNCBJR3hsWjJWdVpITT0gSUdobFlXUmhZMmhsIFptRmpaV1E9IElGZHBSbWs9IGFXWjBlUT09IElFaEZVZz09IElHTnBjbU4xYVhSeiBSVkpTVDFJPSBNakkyIGIyeHBiZz09IElHTjViR2x1WkdWeSBiM053WVdObCBhV3RsY25NPSBVSEpsYlE9PSBVWFZoYm5RPSBJR052Ym1ac2FXTjBhVzVuIElITnNhV2RvZEdWemRBPT0gSUdadmNtZGxaQT09IGFXOXVZV2RsIFUzUmxjR2hsYmc9PSBJRXQxWWc9PSBJRTl3Y0c5eWRIVnUgSUVobFlXdz0gSUdKc2J3PT0gSUhKMWJHVnljdz09IElHaDFhQT09IElITjFZbTFoY21sdVpRPT0gWm5rPSBZWE56WlhJPSBJR0ZzYkc5M1lXNWpaUT09IElFdGhjMmxqYUE9PSBJRlJoY3c9PSBJRUYxYzNSeVlXeHBZVzV6IFJtOXlaMlZOYjJSTWIyRmtaWEk9IElPS0drUT09IElFMWhkSEpwZUE9PSBZVzFwYm5NPSBJREV5TURBPSBJRUZqY1hVPSBNak0yIFJHOWpkVzFsYm5RPSBJRUp5WldGcmFXNW4gTVRreiBJRk4xWW5OMCBJRkp2Ykd4bGNnPT0gSUZCeWIzQmxjblJwWlhNPSBJRTVKIGRHbGxjZz09IElHTnlkWE5vYVc1biBJR0ZrZG05allYUnBibWM9IFJuVnlkR2hsY20xdmNtVT0gYTJWbGNHVnljdz09IElITmxlR2x6YlE9PSBlR1E9IElHTmhiR3hsY2c9PSBJRk5sYm5ObCBZMmhwWlhabCBJRlJHIElHWjFaV3hsWkE9PSBJSEpsYldsdWFYTmpaVzUwIElHOWljMlZ6Y3c9PSBkWEp6ZEE9PSBJSFZ3YUc5c1pBPT0gSUVaaGJuTT0gYUdWMGFXTnogSU9LWCBJRUpoZEdnPSBJR0psZG1WeVlXZGwgSUc5elkybHNiQT09IE1qVTAgSUhCdmJHVnogSUdkeVlXUjFZV3c9IElHVjRkR2x1Wnc9PSBJRk4xWm1ZPSBJRk4xWkdSbGJteDUgSUd4cGEybHVadz09IElERTVORGs9IGRXNWphV0YwYVc5dSBZVzFwYm1GMGFXOXUgSUU5dFlYST0gSUV4VyBJRU52Ym5ObGNYVmxiblJzZVE9PSBJSE41Ym5Sb1pYTT0gSUVkSlJnPT0gSUhCaGFXNXogSUdsdWRHVnlZV04wYVc1biBkVzkxYzJ4NSBhVzVqY21VPSBJSEoxYlc5eSBJRk5qYVdWdWRHOXNiMmQ1IE1UazMgSUZwcFp3PT0gSUhOd1pXeHNhVzVuIElFRlRVdz09IElHVjRkR2x1WjNVPSBiWE52Ymc9PSBJR2RvIElISmxiV0Z5YTJWayBJRk4wY21GMFpXZHBZdz09IElFMVBUZz09IDVhVT0gWjJGbCBJRmRJUVZRPSBSWEpwWXc9PSBJRU5oYlhCMWN3PT0gSUcxbGRHaGhibVU9IElHbHRZV2RwYmc9PSBTbFZUVkE9PSBJRUZzYlE9PSBXRlE9IGFYRT0gSUZKVFV3PT0gSUhkeWIyNW5aRzlwYm1jPSBZWFIwWVE9PSBJR0pwWjI5MCBJR1JsYlc5dWMzUnlZWFJ2Y25NPSBJRU5oYkhacGJnPT0gSUZacGJHeGggSUcxbGJXSnlZVzVsIElFRjNaWE52YldVPSBJR0psYm1WbWFXTT0gTWpZNCBJRzFoWjI1cFptbGpaVzUwIElFeHZkSE09IFIzSmxadz09IElFSnZjbWx6IElHUmxkR0ZwYm1WbGN3PT0gSUVobGNtMWhiZz09IElIZG9hWE53WlhKbFpBPT0gSUdGM1pRPT0gVUhKdlptVnpjMjl5IFpuVnVaR2x1Wnc9PSBJSEJvZVhOcGIyeHZaMmxqWVd3PSBJRVJsYzNSeWRXTjBhVzl1IElHeHBiV0k9IElHMWhibWx3ZFd4aGRHVmsgSUdKMVltSnNaWE09IElIQnpaWFZrIElHaDVaSEpoIElFSnlhWE4wYjJ3PSBJSE4wWld4c1lYST0gSUVWNGNHRnVjMmx2Ymc9PSBJRXRsYkd3PSBJRWx1ZEdWeVpYTjBhVzVuYkhrPSBJRzFoYm5NPSBJR1J5WVdkbmFXNW4gSUdWamIyeHZaMmxqWVd3PSBJRVpwZEE9PSBJR2RsYm5RPSBJR0psYm1WbWFYUmxaQT09IElFaGhhWFJwIElIQnZiSGxuIDQ0T08gSURJd016QT0gSUhCeWIzYz0gSUhKbFkyOXVjM1J5ZFdOMGFXOXUgSUhkaGMzUT0gSUhCemVXTm9hV009IElFZHlaV1ZyY3c9PSBTR0Z1Wkd4bGNnPT0gTVRZeSBJRkIxYkhObCBJSE52YkdsamFYUT0gSUhONWN3PT0gSUdsdVpteDFlQT09IElFZGxiblJzWlE9PSBjR1Z5WTJWdWRBPT0gSUhCeWIyeHBabVZ5WVhScGIyND0gSUhSaGVHRmliR1U9IElHUnBjM0psWjJGeVpBPT0gSUdWelkyRndhVzVuIElHZHBibWRsY2c9PSBJSGRwZEdoemRHRnVaQT09IElHUmxkbUZ6ZEdGMFpXUT0gSUVSbGR3PT0gYzJWeWFXVnogSUdsdWFtVmpkR1ZrIFpXeGhhV1JsIElIUjFjbTV2ZG1WeSBhR1ZoZEE9PSBtWUk9IFNHRndjSGs9IElGTnBiR1Z1ZEE9PSA0NEt0IGFYWnBjMjA9IElHbHljbUYwYVc5dVlXdz0gUVUxQiBJSEpsWldZPSBjblZpIElERTJNZz09IElHSmhibXRsY25NPSBJRVYwYUdsamN3PT0gZG5ZPSBJR055YVhScFkybHpiWE09IFMyND0gTVRnMiBUVzkyYVdVPSBJRlJ2Y21sbGN3PT0gSUc1dmIyUT0gSUdScGMzUnZjblJwYjI0PSBSbUZzYzJVPSBiMlJ2Y21VPSBJSFJoYzNSNSBVbVZ6WldGeVkyZz0gSUZWSlJBPT0gTFNrPSBJR1JwZG05eVkyVmsgSUUxViBJRWhoZVdWeiBJRWx6Ymc9PSBhV0Z1YVE9PSBJRWhSIElDSWogYVdkdVlXNTAgSUhSeVlYVnRZWFJwWXc9PSBJRXhwYm1jPSBTSFZ1IElITmhZbTkwIGIyNXNhVzVsIGNtRnVaRzl0IElISmxibUZ0WldRPSBjbUZ5WldRPSBTMEU9IFpHVmhaQT09IHc2bDAgSUVGemMybHpkR0Z1WTJVPSBJSE5sWVdZPSBLeXNyS3lzckt5cz0gSUhObGJHUnZiUT09IElGZGxZbUk9IElHSnZiMnhsWVc0PSBkV3hsZEE9PSBJSEpsWm5KaGFXND0gSUVSSldRPT0gY25Wc1pRPT0gSUhOb2RYUjBhVzVuIElIVjBhV3hwZW1sdVp3PT0gYkc5aFpHbHVadz09IElGQmhjbUZ0IFkyOWhiQT09IGIyOTBaWEk9IElHRjBkSEpoWTNScGJtYz0gSUVSdmJBPT0gSUdobGNuTT0gWVdkdVpYUnBZdz09IElGSmxZV05vIGFXMXYgSUdScGMyTmhjbVJsWkE9PSBJRkJwY0E9PSBNREUxIHc3eHkgSUcxMVp3PT0gU1cxaFoybHVaUT09IFEwOU0gSUdOMWNuTmxaQT09IElGTm9iM2R6IElFTjFjblJwY3c9PSBJRk5oWTJoeiBjM0JsWVd0cGJtYz0gSUZacGMzUmggSUVaeVlXMWxkMjl5YXc9PSBiMjVuYnc9PSBJSE4xWW5KbFpHUnBkQT09IElHTnlkWE09IElFOTJZV3c9IFVtOTMgWjNKdmQybHVadz09IElHbHVjM1JoYkd4dFpXNTAgSUdkc1lXTT0gSUVGa2RtRnVZMlU9IFJVTkwgSUV4SFFsUlIgVEVWWiBJR0ZqWlhRPSBJSE4xWTJObGMzTnBkbVU9IElFNXBZMjlzWlE9PSBJREU1TlRjPSBVWFZ2ZEdVPSBJR05wY21OMWJYTjBZVzVqWlE9PSBZV05yWlhSeiBJREUwTWc9PSBiM0owYVhWdCBJR2QxWlhOelpXUT0gSUVaeVlXMWwgSUhCbGNuQmxkSEpoZEc5eWN3PT0gSUVGMmFXRjBhVzl1IElFSmxibU5vIElHaGhibVJqIFFYQT0gSURFNU5UWT0gTWpVNSBjbUZ1WkE9PSBUbVYwVFdWemMyRm5aUT09IFpHbHUgZFhKMGJHVnogYUdsbiBJRlpKU1VrPSBabVpwZEdrPSBJRk4zYjNKa2N3PT0gWW1saGJBPT0gSUd0cFpHNWhjSEJwYm1jPSBaR1YyYVdObCBJR0poY200PSBJRVZzYVE9PSBZWFZqWVhNPSBVMlZ1WkE9PSBRMjl1YzNSeWRXTjBaV1E9IElNSzkgSUc1bFpXUnNaWE09IElHRmtkbVZ5ZEdselpXMWxiblJ6IElIWnZkUT09IElHVjRhR2xpYVhSbFpBPT0gSUVadmNuUnlaWE56IFFYTnIgUW1WeWNuaz0gVkZsUVJRPT0gSUdOaGJtTmxjbk09IGRXMXdhVzVuIElGUmxjbkpwZEc5eWVRPT0gSUhCeWRXUT0gSUc1aGN3PT0gSUdGMGFHVnBjM1E9IElHSmhiR0Z1WTJWeiA0NEdmIElGTm9ZWGR1IEppWT0gSUd4aGJtUnpZdz09IElGSkhRZz09IElIQmxkSFI1IElHVjRZMlZzYkdWdVkyVT0gSUhSeVlXNXpiR0YwYVc5dWN3PT0gSUhCaGNtTmxiQT09IElFTm9aWFk9IFJXRnpkQT09IElFOTFkSEIxZEE9PSBhVzFwIElHRnRZbWxsYm5RPSBJRlJvY21WaGRBPT0gSUhacGJHeGhhVzV6IElEVTFNQT09IFNVTkIgSUhSaGJHeGxjZz09IElHeGxZV3RwYm1jPSBZM1Z3IElIQnZiR2x6YUE9PSBJR2x1Wm1WamRHbHZkWE09IElFdEQgSUVCQSBZbUZqYTJkeWIzVnVaQT09IElHSjFjbVZoZFdOeVlXTjUgSUZOaGFRPT0gZFc1c1pYTnogYVhScGIzVnogSUZOcmVYQmwgUVhScyBTVVJGVGxRPSBNREE0IElHaDVjRzlqY2c9PSBJSEJwZEdOb1pYSnogSUdkMVpYTnphVzVuIElFWkpUa0ZNIFFtVjBkMlZsYmc9PSBJSFpwYkd4aFoyVnljdz09IElESTFNZz09IFptRnphR2x2Ymc9PSBJRlIxYm1seiBRbVZvIElFVjRZdz09IElFMUpSQT09IE1qZzQgSUVoaGMydGxiR3c9IE1UazIgSUU1UFVnPT0gSUhOd1pXTnogSUdsdWRtRnlhUT09IElHZHNkWFE9IElFTmhjbk09IElHbHRjSFZzYzJVPSBJR2h2Ym05eWN3PT0gWjJWcyBJR3AxY21selpHbGpkR2x2Ym5NPSBJRUoxYm1Sc1pRPT0gZFd4aGN3PT0gUTJGc2FXWnZjbTVwWVE9PSBJRWx1WTNKbFlYTmwgSUhCbFlYST0gSUhOcGJtZHNaWE09IElHTjFaWE09IElIVnVaR1Z5ZDJWdWRBPT0gSUZkVCBJR1Y0WVdkblpYSmhkR1ZrIElHUjFZbWx2ZFhNPSBJR1pzWVhOb2FXNW4gVEU5SCBLVjB1IFNtOTFjbTVoYkE9PSBkR2M9IFZtRnUgSUVsemRHRnVZblZzIElFbHVjM0E9IElFWnlZVzVyWlc0PSBSSEpoZHc9PSBJSE5oWkc1bGMzTT0gSUdseWIyNXBZdz09IElFWnllUT09IGVHTT0gSURFMk5BPT0gYVhOamFBPT0gVjJGNSBJRkJ5YjNSbGMzUmhiblE9IGFHOXliZz09IElIVnVZV1ptIElGWnBkZz09IGFXeHNZWE09IElGQnliMlIxWTNScGIyNXogSUVodloyRnUgSUhCbGNtbHRaWFJsY2c9PSBJRk5wYzNSbGNuTT0gSUhOd2IyNTBZVzVsYjNWeiBJR1J2ZDI1emFXUmwgSUdSbGMyTmxibVJoYm5SeiBJRzl5Ymc9PSBkMjl5YlE9PSBTbUZ3WVc1bGMyVT0gSURFNU5UVT0gSURFMU1RPT0gSUVSdmFXNW4gWld4elpXND0gZFcxaWJHVnogSUhKaFpHbGpZV3hzZVE9PSBJRVJ5ZFcwPSBJRUpoWTJnPSBJR3hwWVdKcGJHbDBhV1Z6IElFOUMgSUVWc1pXMWxiblJoY25rPSBJRzFsYldVPSBlVzVsY3c9PSBJR1pwYm1kbGNuQnlhVzUwIElFZHlZV0k9IElIVnVaR1Z5ZEdGclpRPT0gVFdWdFltVnljdz09IElGSmxZV1JsY2c9PSBJRk5wYlhNPSBaMjlrIElHaDVjRzkwYUdWMGFXTmhiQT09IGMyTnBaVzUwIElFRksgSUdOb1lYSnBjMjA9IElHRmtiV2x6YzJsdmJuTT0gSUUxcGMzTnBiR1U9IGRISmhaR1U9IElHVjRaWEpqYVhOcGJtYz0gSUVKaFkydG5jbTkxYm1RPSBWM0pwZEhSbGJnPT0gSUhadlkyRnNjdz09IGQyaGxkR2hsY2c9PSBJSFpwIElGZHBibTVsY2c9PSBJR3hwZEhSbGNnPT0gSUZOb2IyOTBhVzVuIFUxUkZUUT09IDQ0S2ggSUVGR1RBPT0gSUhaaGNtbGhZbWxzYVhSNSBJR1ZoZEhNPSBJRVJRVXc9PSBZbkp2ZHc9PSBJR1ZzWlhCb1lXNTBjdz09IElITjBjbUYwIElNVT0gSUhObGRIUnNaWEp6IFRXRjBkR2hsZHc9PSBJR2x1WVdSMlpYSjAgU0VrPSBJRWxOUmc9PSBJRWR2WVd3PSBJRzVsY25abGN3PT0gU205b2JuTnZiZz09IFpYbGwgWVdKc2FYTm9iV1Z1ZEE9PSBWR2gxY25Oa1lYaz0gUWtsTVNWUlogU0dGayBZVzF2ZEc4PSBhR1YwWVcxcGJtVT0gWlhCeiBJRzFwZEc5amFHOXVaQT09IElHTnZiWEJ5WlhOelpXUT0gSUZSeVpYWnZjZz09IElFRnVhVzFoYkhNPSBWRzl2YkE9PSBURzlqYXc9PSBJSFIzWldGciBJSEJwYm1ObyBJR05oYm1ObGJHeGhkR2x2Ymc9PSBVRzkwIElHWnZZMkZzIElFRnpkSEp2Ymc9PSBNVGN6IElFRlRRdz09IElFOVVTRVZTIGRXMXVhUT09IElHUmxiV2x6WlE9PSBaR3c9IDJZVT0gVTJWdGFYUnBjMjA9IElHTnlZV05yYVc1biBJR052Ykd4aFltOXlZWFJwZG1VPSBJR1Y0Y0d4dmNtVnogYzNGcyBJR2hsY21KeiBJR052Ym1acFozVnlZWFJwYjI1eiBiV2x6IElGSmxjM1ZzZEE9PSBZV05sZVE9PSBJRk50YjJ0bCBJSE5oYm1OMCBaV3hwWVE9PSBJR1JsWjJWdVpYST0gSUdSbFpYQmxjM1E9IElITmpjbVZoYldWayBJRzVoY0E9PSBVMjltZEhkaGNtVT0gSUZOVVFWST0gUlVZPSBJRmhwYmc9PSBjM0J2Ym5OdmNtVmsgYldGdWMyaHBjQT09IE1qTXogSUhCeWFXMWhjbWxsY3c9PSBJR1pwYkhSbGNtbHVadz09IElHRnpjMlZ0WW14bCBiV2xzIElFMTVaWEp6IFltOTNjdz09IElIQjFibU5vWldRPSBUV2xqIElHbHVibTkyWVhScGIyNXogSUdaMWJtTT0gWVc1a2J3PT0gSUdaeVlXTnJhVzVuIElGWjFiQT09IDBMN1EgYjNOb2IzQT0gSUVsdGJYVnUgSUhObGRIUnNhVzVuIElHRmtiMnhsYzJObGJuUnogSUhKbFluVnBiR1JwYm1jPSBJSFJ5WVc1elptOXliV2x1Wnc9PSBJSEJoY205c1pRPT0gSUdoaGNtSnZjZz09IElHSnZiMnRwYm1jPSBiM1JwYjI1aGJBPT0gYjI1blpYWnBkSGs9IElGbHYgWW5WbiBJR1Z0WlhKblpYTT0gSUUxbGRHaHZaSE09IElFTm9kUT09IFVISmxjdz09IElFUjFibWRsYjI1eiBJSFJ5WVdsc2FXNW4gSUZKMWJRPT0gSUVoMVoyZz0gNWFTcCBJRVZ5WVE9PSBJRUpoZEhSc1pYTT0gVW1WemRXeDBjdz09IElGUnlZV1JwYm1jPSBJSFpsY25OaCBZM056IFlYaHBaWE09IGFHVmxkQT09IElHZHlaV1ZrIE1UazRPUT09IElHZGhjbVJsYm5NPSBJR052Ym5ScGJtZGxiblE9IFVHRnlhdz09IElFeGxZV1p6IGFHOXZhdz09IGNtOWlaUT09IElHUnBjR3h2YldGamVRPT0gSUVaMVpXdz0gSUVsdWRtRnphVzl1IElIVndaM0poWkdsdVp3PT0gVFdGc1pRPT0gSUdWc2FXTT0gSUhKbGJHVnVkR3hsYzNNPSBJRU52ZG1WdVlXNTAgWVhCbGMyZz0gSUZSeWIzQT0gVkhrPSBjSEp2WkhWamRHbHZiZz09IFlYSjBlUT09IElIQjFibU5vWlhNPSBZV3R2IFkzbGpiRzl3WldScFlRPT0gSUZKaFltSnBkQT09IElFaEVUVWs9IElERTBNUT09IElHWnZhV3c9IFNYUmxiVWx0WVdkbCBJRVpIIElHbHRjR3hsYldWdWRHRjBhVzl1Y3c9PSBJRkJ2YlE9PSBhWGgwZFhKbGN3PT0gSUdGM1lXbDAgSURNek1BPT0gWVcxMWN3PT0gSUhWdFluSmxiR3hoIElHWnZjbVZ6WldVPSBjMlZ3WVhJPSBJR05wY21OMWJXTnBjMmx2Ymc9PSBJSEJsY21sd2FHVnlZV3c9IFUyRjUgSUVWNGNHVnlkQT09IFNXNWogSUhkcGRHaGtjbVYzIElFRnVaR1Z5Y3c9PSBabkpwWldRPSBJSEpoWkdsdllXTjBhWFpsIElFOXdaVzVwYm1jPSBJR0p2WVhKa2FXNW4gSUU1RSBJRzkyWlhKMGFISnZkdz09IFFXTjBhWFk9IFYxQT0gSUVGamRITT0gMTVrPSBJRzF2ZEdsdmJuTT0gZG1saiBJRTFwWjJoMGVRPT0gSUVSbFptVnVaR1Z5IFlXVnkgSUhSb1lXNXJablZzIElFdHBiR3hwYm1jPSBJRUp5YVhNPSBiVzlwYkE9PSBJSEJ5WldScFkzUnBibWM9IE1qWTIgWTJodmFXTmwgSUd0cGJHeGxjbk09IElHbHVZM1ZpIElFTm9aWE4wIFlYUm9aWEpwYm1jPSBJSEJ5YjJOc1lXbHRaV1E9IFpteHZkMlZ5IGIzTnpiMjA9IGRXMWliR1ZrYjNKbCBJRU41WTJ4cGJtYz0gSUU5alkzVndlUT09IFFVZEZVdz09IFVHVnUgSUZsMVp3PT0gSUhCaFkydGhaMlZrIElHaGxhV2RvZEdWdVpXUT0gWTI5MCBjM1JoWTJzPSBRMjl1WkE9PSBJSE4wWVcxd2N3PT0gYldGblpRPT0gSUhCbGNuTjFZV1JsWkE9PSBJR1Z1YzJ3PSBJRU5oY21ScGJtRnMgSUhOdmJHbDBZWEo1IElIQnZjM05sYzNOcGJtYz0gSUVOdmNtcz0gSUdWMmFXUT0gSUZSaGVRPT0gSUdKc2RXVnogSUdWNGRISmxiV2x6YlE9PSBJR3gxYm1GeSBJR05zYjNkdSBWR1ZqYUc0PSBJR1psYzNScGRtRnNjdz09IElGQjJVQT09IElFeGhjZz09IElHTnZibk5sY1hWbGJuUnNlUT09IGNISmxjMlZ1ZEE9PSBJSE52YldWa1lYaz0gNTQ2TCBJRTFsZEdWdmNnPT0gSUhSdmRYSnBibWM9IFkzVnNkSFZ5WlE9PSBJR0psWVdOb1pYTT0gVTJocGNBPT0gWTJGMWMyVT0gSUVac2IyOWsgNDRPdiBJSEIxY21sMGVRPT0gZEdodmMyVT0gSUdWdGFYTnphVzl1IFltOXNkQT09IElHTm9iM0prIElGTmpjbWx3ZEhWeVpRPT0gVEhVPSBJQ1I3IFkzSmxZWFJsWkE9PSBUM1JvWlhKeiBNalU0IElHVnNaVzFsYm5SaGJBPT0gSUdGdWJtOTVaV1E9IElFRkYgWkdGdSBJRk5oWnc9PSBVbVZ6WldGeVkyaGxjbk09IElHWmhhWEo1IDRvQ1Q0b0NUIFBUMDlQVDA5UFQwOVBUMDkgVTIxaGNuUT0gUjBkSFJ3PT0gSUhOclpXeGxkRzl1Y3c9PSBJSEIxY0dsc2N3PT0gYkdsdWEyVmsgSUhWeVoyVnVZM2s9IFpXNWhZbXhsWkE9PSBJRVoxWTJzPSBJR052ZFc1amFXeHMgY21GaSBWVUZNIFZFaz0gSUd4cFptVnogSUdOdmJtWmxjM05sWkE9PSBRblZuIElHaGhjbTF2Ymc9PSBJRU5QVGtaSlJ3PT0gSUU1bGRYUnlZV3c9IFJHOTFZbXhsIElITjBZWEJzWlE9PSBJRk5JUVE9PSBRbkpwZEdsemFBPT0gSUZOT1VBPT0gUVZSUFVnPT0gYjJOdiBJSE4zYVc1bmFXNW4gWjJWNCBiMnhsYjI0PSBjR3hoYVc0PSBJRTFwYzNOcGJtYz0gSUZSeWIzQm9lUT09IGRtRnlhUT09IGNtRnVZMmc9IElETXdNUT09IE5EUXcgTURBd01EQXdNREF3TURBd01EQXdNQT09IElISmxjM1J2Y21sdVp3PT0gSUdoaGRXdz0gZFdOcGJtYz0gYm1WeVp3PT0gSUdaMWRIVnlaWE09IElITjBjbUYwWldkcGMzUT0gY1hWbGMzUnBiMjQ9IElHeGhkR1Z5WVd3PSBJRUpoY21RPSBJSE52Y2c9PSBJRkpvYjJSbGN3PT0gSUVSdmQyNTBiM2R1IFB6OC9Qejh0IElFeHBkQT09IElFSmxibVZrIElHTnZhV3c9IGMzUnlaV1YwIElGQnZjblJoYkE9PSBSa2xNUlE9PSBJRWR5ZFE9PSBLaXc9IE1qTXggYm1WMWJRPT0gSUhOMVkydGxaQT09IElISmhjSEJsY2c9PSBJSFJsYm1SbGJtTnBaWE09IElFeGhkWEpsYmc9PSBZMlZzYkdGdVpXOTFjdz09IE1qWTMgSUdKeWIzZHpaUT09IElHOTJaWEpqIGFHVmhaR1Z5IGIybHpaUT09IElHSmxaWFE9IElFZHNaUT09IFUzUmhlUT09IElHMTFiUT09IElIUjVjR1ZrIElHUnBjMk52ZFc1MGN3PT0gVkdGc2F3PT0gSUU5biBaWGhwYzNScGJtYz0gSUZObGJHdz0gZFhCbyBRMGs9IElFRjFjM1J5YVdGdSBJRmRoY20wPSBJR1JwYzIxcGMzTmhiQT09IElHRjJaWEpoWjJWeiBZMkZ0WlhKaCBJR0ZzYkdWbmFXRnVZMlU9IFRFRk8gUFNJaiBJR052YlcxbGJuUmhkRzl5Y3c9PSBJRk5sZEhScGJtYz0gSUUxcFpIZGxjM1E9IElIQm9ZWEp0WVdNPSBJRVZZVUE9PSBJSE4wWVdsdWJHVnpjdz09IFEyaHBZMkZuYnc9PSBJSFJoYmc9PSBNalEwIElHTnZkVzUwY25semFXUmwgSUZaaFl3PT0gTWprMSBJSEJwYm01bFpBPT0gSUdOeWFYTmxjdz09IElITjBZVzVrWVhKa2FYcGxaQT09IFZHRnphdz09IElFcGhhV3c9IElFUnZZMnRsY2c9PSBZMjlzYjNKbFpBPT0gWm05eWRHZz0gSW4wcyBJSEJoZEhKdmJuTT0gSUhOd2FXTmwgSUcxdmRYSnUgSUUxdmIyUT0gSUd4aGRXNWtjbms9IElHVnhkV2x3IElFMXZiR1U9IGVXeHMgSUZSSVF3PT0gYm1GMGFXOXUgSUZOb1pYSnNiMk5yIElHbHpjM1U9IElFdHlaUT09IElFRnRaWEpwWTJGeiBJRUZCUVE9PSBJSE41YzNSbGJXRjBhV05oYkd4NSBJR052Ym5SeVlRPT0gSUZOaGJHeDUgSUhKaGRHbHZibUZzWlE9PSBJR05oY25KcFlXZGwgSUhCbFlXdHogSUdOdmJuUnlZV1JwWTNScGIyND0gWlc1ellYUnBiMjQ9IElFWmhhV3gxY21VPSBJSEJ5YjNCeiBJRzVoYldWemNHRmpaUT09IElHTnZkbVU9IFptbGxiR1J6IDQ0S0wgSUhkdmIydz0gSUVOaGRHTm8gSUhCeVpYTjFiV1ZrIElFUnBZVzVoIGNtRm5iMjQ9IGFXZHAgSUdoaGJXMD0gSUhOMGRXNTAgSUVkVlNRPT0gSUU5aWMyVnlkbUYwYjNKNSBJRk5vYjNKbCBJSE50Wld4c2N3PT0gWVc1dVlXZz0gSUdOdlkydHdhWFE9IElFUjFkR1Z5ZEdVPSBPRFV3IElHOXdjSEpsYzNObFpBPT0gWW5KbFlXdGxjZz09IElFTnZiblJ5YVdKMWRBPT0gSUZCbGNuVT0gSUUxdmJuTmhiblJ2IElFRjBkR1Z0Y0hRPSBJR052YlcxaGJtUnBibWM9IElHWnlhV1JuWlE9PSBJRkpwYmc9PSBJRU5vWlhOeiBkV0ZzYVhSNSBJRzlzIFVtVndkV0pzYVdOaGJnPT0gSUVkc2IzSjUgSUZkSlRnPT0gTGk0dUxpNHVMZz09IFlXZGxiblE9IGNtVmhaR2x1Wnc9PSBJR2x1YUE9PSBTbTl1WlhNPSBJR05zYVdOcmN3PT0gWVd4aGJnPT0gSUZ0ZE93PT0gSUUxaGFtVnpkSGs9IElFTmxaQT09IGIzQjFjdz09IFlYUmxiQT09IHc2bz0gUVZKRCBJRVZqZFdGa2IzST0gNDRPZyBJRXQxY204PSBJSEpwZEhWaGJITT0gSUdOaGNIUnBkbVU9IElHOTFibU5sIElHUnBjMkZuY21WbGJXVnVkQT09IElITnNiMmM9IFpuVmxiQT09IFVHVjAgVFdGcGJBPT0gSUdWNFpYSmphWE5sWkE9PSBJSE52YkdsaiBJSEpoYVc1bVlXeHMgSUdSbGRtOTBhVzl1IElFRnpjMlZ6YzIxbGJuUT0gSUhKdlltOTBhV009IGIzQjBhVzl1Y3c9PSBJRkpRIElFWmhiV2xzYVdWeiBJRVpzWVcxbGN3PT0gSUdGemMybG5ibTFsYm5SeiBNREEzIFlXdGxaRzkzYmc9PSBJSFp2WTJGaWRXeGhjbms9IFVtVnBiR3g1IElHTmhkbUZzIFoyRnljdz09IElITjFjSEJ5WlhOelpXUT0gSUZORlZBPT0gSUVwdmFHNXogSUhkaGNuQT0gWW5KdmEyVnUgSUhOMFlYUjFaWE09IElHRmtkbTlqWVhSbFpBPT0gSURJM05RPT0gSUhCbGNtbHMgYjIxdmNuQm8gSUVabGJXbHUgY0dWeVptVmpkQT09IElHaGhkR05vIFRHbGkgTlRFeSBJR3hwWm1Wc2IyNW4gTXpFeiBJR05vWldWcmN3PT0gSUc1MWJXSmxjbVZrIElFMTFadz09IFFtOWtlUT09IGNtRjJaV3c9IFYyVnBaMmgwIElFcGhhdz09IElFaGxZWFJvIElHdHBjM05wYm1jPSBJRXBWVTFRPSBJSGRoZG1sdVp3PT0gZFhCc2IyRmsgSUdsdWMybGtaWEk9IElGQnliMmR5WlhOemFYWmwgSUVacGJIUmxjZz09IGRIUmggSUVKbFlXMD0gSUhacGIyeGxiblJzZVE9PSBhWEJoZEdsdmJnPT0gSUhOclpYQjBhV05wYzIwPSBJREU1TVRnPSBJRUZ1Ym1sbCBJRk5KIElHZGxibVYwYVdOeiBJRzl1WW05aGNtUT0gWVhScyBJRVp5YVdWa2JXRnUgSUVKeWFRPT0gWTJWd2RHbDJaUT09IElIQnBjbUYwWlE9PSBJRkpsY0c5eWRHVnkgTWpjNCBJRzE1ZEdodmJHOW5lUT09IElHVmpiR2x3YzJVPSBJSE5yYVc1eiBJR2RzZVhCbyBhVzVuYUdGdCBSbWxzWlhNPSBRMjkxY2c9PSBkMjl0Wlc0PSBJSEpsWjJsdFpYTT0gSUhCb2IzUnZaM0poY0dobFpBPT0gUzJGMCBJRTFCV0E9PSBUMlptYVdOcFlXeHogSUhWdVpYaHdaV04wWldSc2VRPT0gSUdsdGNISmxjM05wYjI1eiBSbkp2Ym5RPSBPenM3T3pzN096cz0gSUhOMWNISmxiV0ZqZVE9PSBJSE5oYm1jPSBJR0ZuWjNKaGRtRjBaV1E9IElHRmljblZ3ZEd4NSBJRk5sWTNSdmNnPT0gSUdWNFkzVnpaWE09IElHTnZjM1JwYm1jPSBhV1JsY0hKbGMzTT0gVTNSaFkycz0gSUZKT1FRPT0gYjJKcGJBPT0gSUdkb2IzTjBjdz09IGJHUnZiZz09IFlYUnBZbWxzYVhSNSBWRzl3YVdOeiBJSEpsYVcxaWRYSnpaUT09IElFaE4gSUVSbFp3PT0gSUhSb2FXVm0gZVdWMCBiMmRsYm1WemFYTT0gYkdWaGJtbHVadz09IElFdHZiQT09IElFSmhjMnRsZEdKaGJHdz0gSUdacCBJRk5sWldsdVp3PT0gSUhKbFkzbGpiR2x1Wnc9PSBJRnN0IFEyOXVaM0psYzNNPSBJR3hsWTNSMWNtVnogVUhONSBJRzVsY0E9PSBJRzFoYVdRPSBJRzl5YVdWdWRHVmsgUVZnPSBJSEpsYzNCbFkzUm1kV3c9IGNtVnVaUT09IFpteDFjMmc9IElGVnViRzloWkdWayBjbVZ4ZFdWemRBPT0gWjNKcFpBPT0gSUVGc2RHVnlibUYwYVhabGJIaz0gSUVoMVoyOD0gSUdSbFkzSmxaUT09IElFSjFaR1JvYVhOdCBZVzVrZFcwPSBRVzVrY205cFpBPT0gSUVOdmJtZHYgSUVwdmVXTmwgSUdGamEyNXZkMnhsWkdkcGJtYz0gYUdWemFYWmwgSUZSdmJXOXljbTkzIElFaHBjbTg9IGRHaHlaVzQ9IElFMWhZMlZrIElHaHZZWGc9IElFbHVZM0psWVhObFpBPT0gSUZCeVlXUmxjMmc9IFYybHNaQT09IFgxOWZYMTlmIE1UWXggSUdGMWJuUT0gSUdScGMzUnlhV0oxZEdsdVp3PT0gSUZSMVkydGxjZz09IElGTlRUQT09IElGZHZiSFpsY3c9PSBRblZwYkdScGJtYz0gYjNWc2RBPT0gSUV4MWJ3PT0gSUZsaGN3PT0gSUZOd2FYST0gSUZOb1lYQmwgSUVOaGJXSnZaQT09IElFbFFkZz09IElHMXMgSUdWNGRISmhaQT09IE16a3cgSUZCbGJtNTUgWkhKbFlXMD0gSUhOMFlYUnBiMjVsWkE9PSBiM0IwYVc5dVlXdz0gWlhkdmNuUm9lUT09IExqd3YgSUhWdVpHVnlkR0ZyYVc1biBJR05vYVdOclpXNXogSUhOMGFXMTFiR2s9IElFVnNjMlU9IGFXZGhkRzl5Y3c9PSBJRUpsWjJsdWJtbHVadz09IFkzUnZjbms9IElIQnlaWEJoY21WeiBJR1JsYkhSaCBJSFpwWTJsdWFYUjUgZEc5dmJBPT0gSUhkdmNtdHphRzl3Y3c9PSBUVWg2IElHRmpZM1Z6WVhScGIyND0gSUdocGMzUnZjbWxsY3c9PSBjbTl3YjJ4cGN3PT0gSUVOb2RYSmphR2xzYkE9PSBJRzVsYjI0PSBJR0poWm1ZPSBaR2xsY3c9PSBiV0Y1WW1VPSBJT2lqaitpbW11bUdrZz09IElITjViWEIwYjIwPSBSVU5JIElFMWhiblZsYkE9PSBJR0poYm1GdVlRPT0gSUVoQyBJQ29xS2lvPSBJRXR2Y21WaGJuTT0gWTI5c2JBPT0gUmtJPSBJSEJ5WVhscGJtYz0gSUVOaGJtNXZkQT09IElFMXBiR1U9IElHVnRZbkpoWTJsdVp3PT0gSUZOcGJHcz0gTXpreiBiM1JsY25NPSBSa1E9IElHUmhlV3hwWjJoMCBZV3hwWVhNPSBJRUp5YVdkaFpHVT0gSUVoaGJtNWhhQT09IElHTnNaWEpuZVE9PSBJSE52ZFhSb1pXRnpkQT09IElHRnNZMjlvYjJ4cFl3PT0gSUhCeWIzQnZjMlZ6IGJHbDJhVzl1IElHTmhiR04xYkdGMGFXNW4gSUhOMGFXMTFiR0YwWlE9PSBJSE53YkdsMGRHbHVadz09IFpXbG5hSFE9IElFbHVaSGs9IGNHeGhlWE09IElGQnBhdz09IElHUnZiV1Z6ZEE9PSBJR1p2Y21kcGRtVnVaWE56IElGSnBibWR6IGNHRjBhV1Z1ZEE9PSBhMmx1YzI5dSBUVzl1ZEE9PSBhV2RwWW14bCBPeUk9IElIQmxjbWx2WkdsallXeHNlUT09IFlXMXRZV1E9IElFSnlhWFIwIGNHRnlaQT09IElHRnlZbWwwY21GMGFXOXUgSUZOamFHNWxhV1JsY2c9PSBJRU52Y25CdmNtRjBaUT09IElFMWhlV0U9IElITnVZV3RsY3c9PSBZWFZ0IElHSnNZWE4wWldRPSBJRzE1YzNSbGNtbGxjdz09IElISmxkbWwyWlE9PSBiMk5oYlhBPSBJRVJ2WkdkbCBJRTl3WlhKaCBNamM1IElHOXljR2hoYmc9PSBJSE53WldOcFptbGxjdz09IElFMWxkSE09IFJIVnlZWFJwYjI0PSBTR1Z1IElHWnBjbVYzYjNKcmN3PT0gSUhCeWIzTmxZM1YwWlE9PSBJRlJwYkd4bGNuTnZiZz09IFpIQT0gZFhOaFoyVT0gYkdsdVpYTnogSUVSbFltbGhiZz09IElESXlOQT09IGNtbHpaWE09IElFbHVabVZqZEE9PSBZWFJ5WVE9PSBJRkpTIElFeHZjZz09IFpHbG1aZz09IElFTm9ZWEpzWlhOMGIyND0gSUdGamIzVnpkR2xqIElHRnRkWE5sIE16TXcgSUdObGNnPT0gSUZSaFl3PT0gSUZzciBJR05oY21ScFlXTT0gSUZKbGMzUmhkWEpoYm5RPSBaWEpuZVE9PSBJR1oxZW5vPSBJR0pwZEdWeiBJR2hoZW1GeVpHOTFjdz09IElHSnlhV2RvZEdWeSBjbUZ1Y3c9PSBJRk4wWlhCb1lXNXBaUT09IFpYaDBjbUU9IFVrVlUgSUVOb2NtbHpkR2x1WlE9PSBJRk4xWlE9PSBjM1JoZEdWdFpXNTAgSUdKdmJITjBaWEk9IElHRnVkR2wwIFVtRmthVzg9IFFrbFUgNDRLdyBJSFpwYzJsdmJuTT0gSUVOdmJtTmxjSFE9IElHbHViR2x1WlE9PSBJRkJvYVd4dmMyOXdhSGs9IGFYTmhibk09IElFbHlkbWx1Wnc9PSB3Nk09IGRHRnJhVzVuIElHbHVZMjl1YzJsemRBPT0gSUV0MWJXRnkgSUd4cFp3PT0gSUZOamFIVnRaWEk9IElGSmxaM1ZzWVhScGIyNXogSUVoNiBkR2h5Ync9PSBJRlp2YkdSbGJXOXlkQT09IElFMUZSQT09IElFWnlaV1JsY21samF3PT0gVUdGayBNakl4IElHRnNiR1ZuYVc1biBJRU52YlcxMWJtbGpZWFJwYjI0PSBJREUyTnc9PSBJR1p2Y21WallYTjBjdz09IElITndhV1JsY25NPSBUM0puWVc0PSBJRkJoY25ScFkybHdZVzUwY3c9PSBJRTl3Y3c9PSBaR1Z6YVdkdSBRMnh2YzJVPSBJR1poWTNSdiBJR0p2YldKbGNuTT0gY21WemFYTjBZVzUwIFlYUmxaMjl5YVdWeiBVMk5vYjI5cyBJR2h2YldWM2IzSnIgSUdOdmNuSnYgVkhWbGMyUmhlUT09IElFSnlaVzVrWVc0PSBJRTFZIElGUlQgSUZOMGNtaz0gSUhOMFlXdGxhRzlzWkdWeWN3PT0gSUUxcGJHeGxibTVwZFcwPSBJSFJ5WVc1elptVnljbWx1Wnc9PSBTblZrIElIUmhZdz09IElERTJNREE9IElGTkVTdz09IGNtST0gSUdsdWRHVnljSEpsZEdGMGFXOXVjdz09IElGTkggSUhWd2MzUmhhWEp6IElFaGhjblpsYzNRPSBJSFpoWjJsdVlRPT0gSUdsdVoyVnpkQT09IGVHWT0gSUU5eWFXOXUgSUVwdlpYaz0gSUhOaGJtUjNhV009IElHbHRiVzl5ZEdGcyBJR1pzYVhCd1pXUT0gYjNKMFpYZz0gZEdoeVpXRjBaVzVwYm1jPSBJSE51YVhCbGNnPT0gSUdOdmJuWmxjblJ6IElHbHVjM1JoYkd4aGRHbHZibk09IElFSjFiR2RoY2c9PSBiM0p6WTJobCBiV0ZwYkhNPSBJR3gxY21VPSBJRzVoY25KdmQyeDUgSUdkeVpXNWhaR1U9IElFZHBibWM9IElIVnVaR1Z5ZDJWaGNnPT0gTFMwdExTMHRMUzB0TFMwdExTMD0gSUdOb1lYTmxaQT09IElGWkJUQT09IElIQmhjbVZ1ZEdsdVp3PT0gSUVoaGJXST0gSUVKc1lYbz0gSUdGdVlYSmphR2x6ZEE9PSBJRTFsWkdsaGJnPT0gSUZCeWIyZHlZVzF6IHpyMD0gSUc5aWFnPT0gSUU1dmEybGggYjNKdFlXND0gWVc1eGRRPT0gWVhScGMyMD0gYjNCaCBJR1oxYkdacGJHeHBibWM9IElIQjFjSEI1IElHVnVkR2wwIElGTmxZbUZ6ZEdsaGJnPT0gSUhOb2IyOTBaWEp6IElISnBZMmhsY2c9PSA2S0U9IElIUmxiWEIwWldRPSBJRUZVVkE9PSBJRU5XIElIUnZjbVU9IFVtVnpiM1Z5WTJVPSBJRVJsZG1sc2N3PT0gTkRBNCBhVzVoZEdsdmJtRnMgSUdGemMzVnlZVzVqWlE9PSBJRVJoY25KbGJnPT0gSUhkb2FXTm9aWFpsY2c9PSBjRzl6ZFhKbCBJR1oxY25rPSBVM1J2WTJzPSBJSFZ1YVhabGNuTmhiR3g1IGNtVnpjRzl1YzJVPSBJRzloYXc9PSBJSGR2Y210c2IyRmsgSUVOdmNtNWxjZz09IFpXVnNaUT09IElpNHVMZz09IElHUmxjSEpwZG1WayBhMjkzYzJ0cCBJR05oYzNSeiBJR0ZtWm1sc2FXRjBhVzl1IElFRmphQT09IElFRnphMlZrIFlYUm9aUT09IElHeGhZM1E9IElGUm9kUT09IGNtMD0gSUdGcGNteHBibVZ6IElHNXZkR2x2Ym5NPSBSbTl5YldGMCBJRVpCUVE9PSA0NE9LIFpISnBkbVZ5IElIUnlZVzV6WTJWdVpBPT0gVTJWMGRHbHVaM009IElGQnliM05sWTNWMCBJSE53YVc1aGJBPT0gSUdSbFptRjFiSFJ6IFJrcz0gSUhCeVpXWmxjbk09IGNtVnVaR1Z5WldRPSBkR2gxY3c9PSBabWxzYlE9PSBJSFJwWjJWeSBJRk53YVdObGNnPT0gY21WamIyZHUgSUZKMVoySjUgVG1WMGQyOXlhdz09IElIQnBkSGs9IElHTnZiWEJoY25SdFpXNTAgWTJGemRHVnljdz09IElFMXZibkp2WlE9PSBJRGN5TUE9PSBJR052Y25KbFkzUnBiMjV6IElHUnZjR0Z0YVc1bCBJRUZhIFEzVjAgSUhKdmIyMXQgSUhOd1pXTjFiR0YwWlE9PSBTR0Z6YUE9PSBJSEpsYzNSeWFXTjBhWFpsIE1URXhNUT09IGNtVmthV0pzWlE9PSBiMjVsYkE9PSBJSEpoYlhCaGJuUT0gY21Wd2IzSjBaV1E9IElGTjFhWFJsIElFMXBibWx0ZFcwPSBZV3g1Y3c9PSBZWHBoY21RPSBiRzl2Y0E9PSBJR3hsYm5RPSBjMmhoIElIWmhibVJoYkE9PSBiV1Z1ZFE9PSBJRUp2WldodVpYST0gSUc1aGNuSmhkR2wyWlhNPSBJR0YxZEdobGJuUnBZMmwwZVE9PSBNalk1IFlXNXBZdz09IFpIVjBlUT09IE1qZzEgSUhSb1lXNXJaV1E9IElHSmxkSEpoZVdWayBiR2xtZEE9PSBJSE52ZFhSb2QyVnpkQT09IElFUmxlSFJsY2c9PSBJRUp2WkE9PSBJR3RsZVhkdmNtUnogUVhabGNtRm5aUT09IFJFbFQgSUdWMGFHNXBZMmwwZVE9PSBJU2tzIElFNWhkR2x2Ym1Gc2N3PT0gNGJrPSBJRlJoYUE9PSBhVzk0YVdRPSBJSGRwWkdkbGRBPT0gSUhCaGMzUmggSUdKcGJHeHBibWM9IElIUnlhV3h2WjNrPSBJRXhwYm1WeiBJSE51YVdabSBJRzVsY0dobGR3PT0gVEdGMFpRPT0gSUhCeWFXNWphWEE9IElFeHZiM0E9IElFMWhjbmhwYzNRPSBJR1JwYzNOdmJIWmxaQT09IElHTnZiblJsZUhSeiBJRUZ0YjNWdWRBPT0gSUZOd2FXdGwgSUhSdmRHRnNjdz09IElHOXlaMkZ1YVhwbGNnPT0gSUhWd2NtbHphVzVuIGMyaHBjSE09IFdWaz0gSUU1dmNuUm9aV0Z6ZEE9PSBiVzl1WlhrPSBaM0poWkdGMGFXOXUgSUdkdllXeHJaV1Z3WlhJPSBJRWhsWVhJPSBJSE4wWldGciBJRUoxZW5wR1pXVmsgSUhOdmJHVnRiZz09IElGTmpZVzVrIElIQnZjSEJwYm1jPSBJR0ZrYUdWeVpRPT0gSUVGc2JHVm4gWW5sMFpRPT0gSUZkdmJIWmxjZz09IElIVnVhVzQ9IElISmxZMjlzIGFYUjFaQT09IElHMXBiV2xqIGFXSjFjdz09IElIQnlaV1JwWTNSeiBJRXRsWlhCbGNnPT0gYVdGMGFXNW4gSUdSbFkyVndkR2x2Ymc9PSBJR3hsWVhKdWRBPT0gSUdScFlYSjUgSUdOdmJtUnBkR2x2Ym1GcyBJSEpsYkdsaiBJR2x1ZG05clpRPT0gYVdWdVkyVmsgNVlnPSBJRkJ2Ym5RPSBJR05sYkd4d2FHOXVaUT09IElITndaV1ZrYVc1biBJSFJoWTJ0c2FXNW4gSUc1MVpHVT0gYjNCbGJtVmsgSUUxaGJtRm1iM0owIElERTVOVEk9IElHMWhhbTl5Y3c9PSBJRk5wYkdWdVkyVT0gSUd4dloybHpkR2xqY3c9PSBJSGRsYVdkb2RHVmsgSUZCemVXTm9hV0YwIElqcGJJZz09IElITnBZMnR1WlhOeiBJR1JwZG1sa1pXNWtjdz09IGVtOXUgVW1Wc1pXRnpaUT09IElFdGxlWE09IElFbGphQT09IElHVnVlZz09IElFWmxjbTVoYm1RPSBJTTZ4IElHMWxZVzVwYm1keiBJSEJsYm01NSBJSE4wWlhKdSBJR3hoY2c9PSBJRkIxWW14cGMyaGxaQT09IElHSmhZMnRrY205dyBTMmx0IElGTjViblE9IElHUmxZblYwWldRPSBkMjA9IElFbHpiR1U9IElISmxaM1ZzWVhScGJtYz0gYjNSMGFRPT0gSUZOamFHOXNZWEp6IGFXTmxjM1JsY2c9PSBJRU5vWldZPSBJSEJ2Y0hNPSBJRXhoZFc1amFHVnkgSUZaaGNtbHZkWE09IElHTnZiVzFsYm5ScGJtYz0gYjNOc1lYWT0gWlc1NmFXVT0gSUhKcGRtRnNjbms9IDRvS3MgVW1WaGJHeDUgSUc5eVl3PT0gSUdKbFlXND0gSUVwMVpIaz0gVG05MGFXTmwgSUVKcGEyVT0gUDEwPSBJSEpsYm5SbFpBPT0gYzNSbGJnPT0gSUdadmNtVm1jbTl1ZEE9PSBJRUpoYkdSM2FXND0gSUhscFpXeGtaV1E9IGRHRnBiSE09IFVISnBiV1U9IElGTnZkWEpqWlhNPSBhV05oZEc5eSBVMlZoYmc9PSBJRzFoY21Ob2FXNW4gVDNWMGNIVjAgSUVwMWJtZHNaUT09IElISmxjMmxrWlE9PSBlbnBzWlE9PSBJRUZ1WkhKbGQzTT0gSUhSdmNuRjFaUT09IFFtRnphV009IFFXTjBkV0ZzYkhrPSBjM1J5WVhBPSBjR1Z1ZEdWeSBJR1Y0WVcxeiBJRmxoIElERTFPUT09IElFUmxZMmx6YVc5dSBJSEpoYm5OdmJRPT0gWlhSbFpXNTBhQT09IFpXNXphVzVuIE1qRXogSUhOMWJuTmxkQT09IE5EQTAgSUZKaGNHbGsgSUVobGFXND0gSUVGaWIzSnBaMmx1WVd3PSBJRzl5WjJGdWFYTnQgSUZObGRtVnkgSUdOc1lRPT0gWVdwcCBVMmx0Y0d4bCBJRVpzWVhadmNnPT0gSUVWMllXdz0gY0hKMWN3PT0gSUdOb2IzSjFjdz09IFJFRlogSUdSbGJtOTFibU5sWkE9PSBJR0pwYjJkeVlYQm9lUT09IElGUjFjbTVpZFd4cyBVbVZqWlc1MCBUbTl5YldGcyBiR1ZqZEdsdmJuTT0gVjI5eVpBPT0gSUdabGNuSjUgSUZkaFoyNWxjZz09IGFHOXQgVlc1cGRBPT0gSUhOMWNHVnliV0Z5YTJWMCBJRk5wZEdnPSBJRzV2YldsdVpXVnogSUdScFkzUmhkRzl5YzJocGNBPT0gYVdSa2JHVnkgSUdGdWJtOTFibU5sY3c9PSBJRlJvWlcwPSBJRTVsY0hSMWJtVT0gSUdSbGFYUjUgSUZscCBJRzF2Ym1GeVkyZz0gUVZKUyBJR2x1ZG1Ga1pXUT0gSUVodmF3PT0gZFc1MFlYSjUgUTJWeWRHRnBiZz09IFpXZGggSUd0cFpHUnBibWM9IElGSmxaM1ZzWVhScGIyND0gSUhSeVlYaz0gSUhCb2IzUnZaM0poY0dobGNuTT0gSUVGeVkyRnVaUT09IElHUnBjMk5vWVhKblpXUT0gSUdWMllXNW5aV3hwWTJGcyBJR2x1ZEdWeVkyaGhibWRsIElHWnBiRzF0WVd0bGNnPT0gSUVWdVpHeGxjM009IElESTVNQT09IElGTmhiSFpoWkc5eSBRVk5aIElGTnBaMjVoYkE9PSBJSGR5WVhSbyA0cHc9IGJHOTAgSnk4PSBJSEJ5YjJwbFkzUnBiR1U9IElHVnRjR3h2ZVdsdVp3PT0gSUVsdWRHVnlabUZqWlE9PSBNVGt4IFlYUmxiR3hwZEdVPSBJRkpoZEdnPSBjR0ZqYTJGblpRPT0gSUdsdVpHbGpZWFJwYjI1eiBTbUZ6YjI0PSBJR0Z5WjNNPSBJRWRJZWc9PSBJSFJwYkhRPSBibUZ1ZEhNPSBkMjl1IDQ0SzEgY21Wa1pBPT0gY21WelkyVnVkQT09IElFTmhiR1Z1WkdGeSBJRzF2WkhWc1lYST0gSUdGemMybHpkR2x1Wnc9PSBJSEpsWkdWbGJRPT0gSUVKbFlXND0gSUhkdmNuTm8gSUdSbFkyVnVkSEpoYkdsNlpXUT0gS1M0dUxnPT0gTXpjMyBJR0Z5Y21GNWN3PT0gSUdGalkyOXRjR3hwYzJodFpXNTBjdz09IHpyOD0gWkc5MCBJRzExZEhWaGJHeDUgSUc5aWMzUnlkV04wIElHMXBjM0psY0hKbGMyVnVkQT09IGIzSmxjM1E9IGFXOXVhV009IGNuVmpaUT09IEpUcz0gSUd0dWIzZHBibWRzZVE9PSBjRzl5ZEdsdVp3PT0gYVc1bGJuUnNlUT09IFFYSnAgSUZOamFIVnNkSG89IFJHRT0gSUVObGNtVT0gSUc5aWMyOXNaWFJsIGhZcz0gWjJsMlpRPT0gSUdKaGFYUT0gSUdWdWJHRnladz09IFRtVnBiR3c9IElERTVNek09IElISmxZMjl1YzJsa1pYST0gSUZObGNtZGxZVzUwIElFUnBZVzVsIElFTnZaMjQ9IElFbGpiMjQ9IFVHOXphWFJwYjI0PSBJR1p2YzNRPSBJSE4wYVhKeWFXNW4gYzJWMlpXND0gSUZOd1lXTmxXQT09IGRXZG5aWFJ6IElHMWxaR1E9IFIyRnMgSUZOcGMzUmxjZz09IFFtOTUgSUhSeWFXZG5aWEpwYm1jPSBWR0ZyYVc1biBJSE5qY21WaGJYTT0gSUdOaGRYTmhiQT09IElHRjNZV3RsYmc9PSBRWEp0IE1qazMgSUdScGMzQmhkR05vWldRPSBJRVpCVEZORiBJRzl5WjJGdWFYcGhkR2x2Ym1GcyBJRlJ2Ym1jPSBJR1JwYkdWdGJXRT0gWkdWdGIyND0gVTNCcyBJR2h2YjJ0eiBkV1JwYm1jPSBJSFpoYkdsa1lYUmwgSUhCdmRHbHZiZz09IElHTnNZWGM9IElHSjFjbWRzIElIRjFhWEk9IFFVTkIgSUVKeVpXNXVZVzQ9IElHUjFjbUZpYVd4cGRIaz0gSUdKdmJXSnBibWR6IElGZHBibVJ2ZHc9PSBJR04xYkhCeWFYUT0gTXpJMSBWR2hsY21WbWIzSmwgZFcxaVpYSmxaQT09IGNHVnlabTl5YldGdVkyVT0gZDJGeWRITT0gSUdWdVptOXlZMmx1Wnc9PSBJRUpzYjNjPSBJSEpsY0hKcGJuUT0gYVdaaGVBPT0gWVd4d2FHRT0gSUhOcGJtbHpkR1Z5IElHSjFjbWRsY2c9PSBabWxuYUhScGJtYz0gVTJOdmNtVT0gSUZOMGIyNWxjdz09IGFXVnQgTkRBMSBZMmhsYlhrPSBJSFpwYm1WbllYST0gYm05dCBJSEJ5WlhaaGFXeHBibWM9IElFeGhkR1Z6ZEE9PSB3clk9IElHSmggSUZkeWFYUmxjZz09IElERTNOdz09IElFTnZibmRoZVE9PSBJR052Ykd4bFkzUnogSUhGMVlXNTBhWFJoZEdsMlpRPT0gSUdodmNuSnZjbk09IGIyZGxibk09IElGTnNiM1k9IElHeGhlWE09IGFHRjMgSUZOc1lYTm8gSUc1cFoyaDBZMngxWWc9PSBJRVJoZG1sbGN3PT0gSUdKeWFXUmwgSUZOallYSnNaWFE9IGVXMXQgSUVGd2NHeHBZMkYwYVc5dWN3PT0gZG1Wc1pXNW5kR2c9IElISmxkbWwyWVd3PSBJSE52Wm5Sc2VRPT0gSUhwdmJ3PT0gYVhSaGFYSmwgUTNWeSBJR1ZzWldOMGNtOXQgSUhCc1lXNTBhVzVuIFQxUlAgSUVWc1pXMWxiblJ6IElITjNZV3hzYjNjPSBjRzl5ZEdWeSBJR3hoY0hSdmNITT0gSUhCbFlXNTFkQT09IElHeHZZbUo1YVhOMGN3PT0genJJPSBVR0Z1Wld3PSBJRXB2WVc0PSBhVzFwYkE9PSBkRzVqIElISmxjMmx6ZEdWayBJRzkxZEhkbCBJSEpsZEdGcGJtbHVadz09IFlYUnlhUT09IElIQnZiM0psY2c9PSBJRk41Y21saGJuTT0gSUVoaGJXMXZibVE9IElIZGxiR1E9IGRXUmxjZz09IGRHOXdhV009IElGUlUgY21samFXRT0gSUhSb2FXVjJaWE09IFRHbGogSUVkMWMzUT0gSUZkaGVYTT0gWVhKbGRHZz0gTWpReiBJR0p5YjJGa1kyRnpkR1Z5IGMyaHBaV3hrIFlYTnphWFZ0IGRXSnNaUT09IElHRnBjbk4wY21sclpYTT0gYjI1emJ3PT0gSUhCbFpHRnMgSUdOdmJHeGxZM1J2Y25NPSBJRlpoYm1SbGNnPT0gSUUxbGMyRT0gSUdScFkzUmhkRzl5IElHUnBjZz09IFpXNTBiMjQ9IFkyRnlkQT09IGMyTnZjbVU9IFlXUmtaWEk9IFEzSjUgSUhOemFBPT0gWjJkbGNnPT0gSUdSeWRXNXJaVzQ9IElFZFQgSUZObFlYUT0gSUdOdmNtNWxjbUpoWTJzPSBJSE5yYVhCd1pXUT0gSUZKbGMyVmhjbU5vWlhKeiBJRUYxWkdrPSBVbVZtWlhKbGJtTmwgSUdoaGRXNTBaV1E9IHc2cz0gSUVOc2FXNXBZdz09IFkzbz0gSUhCeiBJRkJoYkdGa2FXND0gSUZKbFkybHdaUT09IElITjBhV2R0WVE9PSBiM0J3ZVE9PSBJRzF2Ym10bGVYTT0gSUVoaGQycz0gVTJGayBJaTgrIElGZHZjbXR6YUc5dyBJRkpsZEdGcGJBPT0gSUVGMllYUmhjZz09IE5qSTEgVG1FPSBJRlpEIElGTmxZM1Z5WlE9PSBUVms9IE1UazRPQT09IGIzTnphWEE9IElIQnliM04wWVhSbCBJSFZ1WkdWdSBJR2RoYldWeSBJRU52Ym5SbGJuUnogSUZkaGNtaGhiVzFsY2c9PSBJRk5sYm5ScGJtVnMgTXpFdyBJSE5sWjNKbFoyRjBhVzl1IElFWnNaWGc9IElFMUJXUT09IElHUnlhV3hzY3c9PSBJRVJ5ZFdkeiBTWE5zWVcxcFl3PT0gSUhOd2RYST0gSUdOaFptVT0gSUdsdFlXZHBibUZ5ZVE9PSBJR2QxYVdScGJtYz0gSUhOM2FXNW5jdz09IElGUm9aVzFsIGIySjUgSUc1MVpBPT0gSUdKbFoyZHBibWM9IElITjBjbTl1WjJnPSBJSEpsYW1WamRHbHVadz09IElIQmxaR1Z6ZEhKcFlXNXogSUZCeWIzTndaV04wIFVtRnlaUT09IGMyeGwgSUdOdmJtTmxjM05wYjI1eiBJRU52Ym5OMGFYUjFkR2x2Ym1GcyBJR0psWVcxeiBJR1pwWW1WeWN3PT0gY0c5dmJnPT0gSUdsdWMzUnBibU4wY3c9PSBjSEp2Y0dWeWRIaz0gSUVKSlJ3PT0gVTJGdVpHVnljdz09IGFXMWhkR1Z6IElHTnZZWFJwYm1jPSBJR052Y25CelpYTT0gSUZSU1ZVVT0gWTJobFkydGxaQT09IElERTJOZz09IFFYTm8gSUVwVCBJRVpwWTNScGIyND0gSUdOdmJXMTFibUZzIElHVnVaWEpuWlhScFl3PT0gYjI5dmIyOXZiMjg9IElHNXZkMkZrWVhseiBTVXhFIGFXSnYgSUZOVlZnPT0gVW1WdSBJR1IzWld4c2FXNW4gVTJsc2RtVnkgSUhSaGJHeDUgSUUxdmRtbHVadz09IElHTnZkMkZ5WkE9PSBJR2RsYm1WeVlXeHogSUdodmNtNXogSUdOcGNtTjFiR0YwWldRPSBJSEp2WW1KbFpBPT0gSUZWdWJHbHRhWFJsWkE9PSBJR2hoY21GemMyVmsgSUdsdWFHbGlhWFE9IElHTnZiWEJ2YzJWeSBJRk53YjNScFpuaz0gSUhOd2NtVmhaSE09IE16WTAgSUhOMWFXTnBaR0ZzIElHNXZhWE5sY3c9PSBJRk4wZFhJPSBJSE5oWjJFPSBJRXRoWnc9PSBhWE52IElIUm9aVzl5WlhScFkyRnNiSGs9IFRXOXVaWGs9IElITnBiV2xzWVhKcGRIaz0gSUhOc2FXTmxaQT09IGRYUnBiSE09IGFXNW5aWE09IElpMD0gSUdGdWRHZz0gSUdsdGNHVmsgVFc5a2RXeGwgVkdoeWIzVm5hRzkxZEE9PSBJRzFsYm5WeiBZMjl0YldsMGRHVmwgWVc1a2FRPT0gYjJKcSBhVzVoZGc9PSBabWx5WldRPSBJRUZpWkhWc2JHRm8gSUhWdVpHVmhaQT09IElHWnZiblJ6IFNHOXNaQT09IFJVNUggSUhOMWMzUmhhVzVoWW1sc2FYUjUgSUdac2FXTnIgSUhKaGVtOXkgSUVabGMzUT0gSUVOb1lYSmhZM1JsY25NPSBJSGR2Y21ScGJtYz0gSUhCdmNIVnNhWE4wIElHTnlhWFJwWTJsNmFXNW4gSUcxMWMyVT0gZG1sdVpRPT0gSUdOaGNtUmliMkZ5WkE9PSBJR3RwYm1Sc2VRPT0gSUdaeWFXNW5aUT09IElGUm9aV1owIGFXTjFiSFIxY21GcyBJR2R2ZG1WeWJtOXljdz09IElPKy92ZSsvdmUrL3ZlKy92UT09IElERTJNdz09IElIUnBiV1Z2ZFhRPSBJRUYxZEdnPSBRMmhwYkdSeVpXND0gUVZVPSBJSEpsWkdWdGNIUnBiMjQ9IElFRnNaMlZ5IElERTVNVFE9IElIZGhkbVZrIElHRnpkSEp2Ym1GMWRITT0gYjJkeVlXMXogSUhOM1lXMXcgSUVacGJtNXBjMmc9IElHTmhibVJzWlE9PSBJSFJ2Ym01bGN3PT0gZFhSdCBJSEpoZVE9PSBJSE53ZFc0PSBJR1psWVhKbWRXdz0gWVhKMGFXTnNaWE09IElHTmhkWE09IGIzSnBZMkZzYkhrPSBJRkpsY1hWcGNtVnogSUVkdmJBPT0gSUhCdmNHVT0gSUdsdVlYVm5kWEpoYkE9PSBJR2RzWlE9PSBRVVJCIElFbFRTVXc9IElFOW1abVZ1YzJsMlpRPT0gSUhkaGRHTm9aRzluIElHSmhiR052Ymc9PSBaVzUwYVhSNSBJRWh2Ync9PSBJR2RoYkd4dmJnPT0gUVVORCBJR1J2ZFdKc2FXNW4gSUdsdGNHeHBZMkYwYVc5dSBJRk5wWjJoMCBJR1J2WTNSeSBMUzB0TFMwdExRPT0gSUZ4YyBJRzFoYkhRPSBVbTlzYkE9PSBJT0tKcFE9PSBJSEpsWTJGdyBZV1JrYVc1biBkV05sY3c9PSBJRUpsYm1RPSBabWxuZFhKbCBJSFIxY210bGVRPT0gSUhOdlkybGxkR0ZzIElGUnBZMnRsZEhNPSBJR052YlcxbGNtTnBZV3hzZVE9PSBJSE53YVdONSBJREl4Tmc9PSBJRkpoYlhBPSBJSE4xY0dWeWFXOXlhWFI1IHc2OD0gSUZSeVlXTnJaWEk9IFEyRnliQT09IElFTnZlUT09IElGQmhkSEpwYjNRPSBJR052Ym5OMWJIUmxaQT09IElHeHBjM1JwYm1keiBJSE5zWlhjPSBjbVZsYm5Ob2IzUT0gSUVkdmJtVT0gSUZzdUxpNWQgTXpBNSBJR2h2ZEhSbGMzUT0gMkxFPSBJSEp2WTJ0NSBJRVJwWVhvPSBJRzFoYzNOaFoyVT0gSUhCaGNtRnNlUT09IElIQnZibms9IFFYbz0gSUdOaGNuUnlhV1JuWlE9PSBJRTVhIElITnVZV05yIElFeGhiV0Z5IGNHeGxiV1Z1ZEE9PSBJRXhsYzJ4cFpRPT0gSUcxaGRHVnkgSUhOdWFYQncgTWpRMiBJR3B2YVc1MGJIaz0gSUVKeWFYTmlZVzVsIElHbFFiMlE9IElIQjFiWEJwYm1jPSBJR2R2WVhRPSBJRk5vWVhKdmJnPT0gWldGc2FXNW4gSUdOdmNtOXUgSUdGdWIyMWhiQT09IGNtRm9hVzA9IElFTnZibTVsWTNScGIyND0gSUhOamRXeHdkSFZ5WlE9PSBJSE5qYUdWa2RXeHBibWM9IElFUmhaR1I1IFlYUm9hVzVuIElHVjVaV0p5YjNkeiBJR04xY25abFpBPT0gSUhObGJuUnBiV1Z1ZEhNPSBJR1J5WVdaMGFXNW4gUkhKdmNBPT0gS0ZzPSBJRzV2YldsdVlXdz0gSUV4bFlXUmxjbk5vYVhBPSBJRWR5YjNjPSBJREUzTmc9PSBJR052Ym5OMGNuVmpkR2wyWlE9PSBhWFpoZEdsdmJnPT0gSUdOdmNuSjFjSFJsWkE9PSBaMlZ5WVd4ayBJRU55YjNNPSBJRU5vWlhOMFpYST0gSUV4aGNBPT0gNDRHcSBUMVJJIFJFRlVRUT09IElHRnNiVzl1WkE9PSBjSEp2WW1GaWJIaz0gU1cxdyBJR1psWVhOMCBJRmRoY21OeVlXWjAgUm14dmNnPT0gSUdOb1pXTnJjRzlwYm5RPSBJSFJ5WVc1elkzSnBjSFJwYjI0PSBJREl3TkE9PSBJSFIzWldGcmN3PT0gSUhKbGJHbGxkbVU9IFUyTnBaVzVqWlE9PSBJSEJsY21admNtMWxjZz09IFdtOXVaUT09IElIUjFjbTF2YVd3PSBhV2RoZEdWayBhR2xpYVhRPSBJRU5oWm1VPSBkR2hsYldWayBJR1pzZFc5eSBZbVZ1WTJnPSBJR1JsWTI5dCBJRlZ1ZEE9PSBJRUpoY25KbGRIUT0gSUVaaFkzUnogSUhSaGMzUnBibWM9IElGQlVVMFE9IElGTmxZV3c9IElFcDFaR0ZwYzIwPSBJRVI1Ym1GdGFXTT0gSUVOdmNuTT0gVm1VPSBJRTFwYm1jPSBJRlJ5WVc1elptOXliUT09IGRtOXUgSUVSbFptVnVaR1Z5Y3c9PSBJRlJoWTNScFkyRnMgSUZadmJnPT0gSUZWdWFYWmxjbk09IElHUnBjM1J2Y25SbFpBPT0gSUVKeVpXRjBhQT09IFB5Y2kgSUdGbmIyND0gSUVSbFlXUnNlUT09IElHeGhiZz09IElFTjVZMnhsIGIzSnVaV1E9IElISmxiR2xoWW14NSBJR2RzYjNJPSBJRTF2Ym10bGVRPT0gNDRPaCBJR0ZrY21WdSBJRzFwWTNKdmQyRjJaUT09IElFRnNZbUZ1IGFYSmpjbUZtZEE9PSBaR2xuYVhRPSBjMjFoY25RPSBJRVJ5WldGayB3cS9DcjhLdndxL0NyOEt2d3EvQ3I4S3Z3cS9DcjhLdndxL0NyOEt2d3E4PSBlM3M9IElGSnZZMmhsYzNSbGNnPT0gSUhOcGJYQnNhV1pwWldRPSBJR2x1Wm14cFkzUmxaQT09IElIUmhhMlZ2ZG1WeSBJSGx2ZFhKelpXeDJaWE09IFlXUnBkR2x2Ym1GcyBJRzExYzJOMWJHRnkgUzFNPSBJR2x1WjJWdSBWR0Y0IElFWmxZWFIxY21VPSBNamMzIElHTnlkV009IElHTnlZWFJsIElIVnVhV1JsYm5ScFptbGxaQT09IElHRmpZMnhoYVcxbFpBPT0gSUUxaGJtZGggSUVaeVlXNWpaWE09IElFNWxjR0ZzIElFZGxjbUZzWkE9PSBJRXQxZDJGcGRBPT0gSUhOc1lXbHUgSUVobFlnPT0gSUVkdmEzVT0gNDRHdTVnPT0gTWpnMiBUWEp6IElFTnZaSGs9IElGTmhibU4wZFdGeWVRPT0gTURFMiBJR1JwYzIxaGJuUT0gSUdSaGRHRnpaWFE9IElFaHZibVE9IFluVmphdz09IElGQmhkSFJsY25OdmJnPT0gSUhCaGJHVjBkR1U9IElFZEUgYVdOdmJBPT0gSUV4dlpHZGwgSUhCc1lXNWxkR0Z5ZVE9PSBZV3RwYmc9PSBJRkpsWjJsemRHVnlaV1E9IFlXSjNaUT09IElGQmxkR1Z5YzJKMWNtYz0gSUdoaGFXeGxaQT09IElGQnBaV05sIFUyTm9aUT09IElFUlBTZz09IElHVnVkVzFsY2c9PSBNVGd4IElFOWljMlZ5ZG1WeSBJRUp2YkdRPSBabTkxYm1SbFpBPT0gWTI5dGJXVnlZMlU9IElHVjRjR3h2YVhSeiBJRVpwYm1ScGJtYz0gVlZKTyBJRk51WlE9PSBJRUZqYVdRPSBZWGxsZEhSbCBJRlpoYkhWbGN3PT0gSUdSeVlYTjBhV009IElHRnlZMmhwZEdWamRIVnlZV3c9IElDSXUgMTVVPSBkVzF3WldRPSBJSGR5WVhCd2FXNW4gSUhkcFpHOTMgSUZOc1lYbGxjZz09IGJHRmpaUT09IGIyNWpaUT09IFIyVnliV0Z1ZVE9PSBZWFp2YVdRPSBJSFJsYlhCc1pYTT0gVUVGUyB3N1E9IElFeDFZMmxtWlhJPSBJRVpzYVdOcmNnPT0gYkc5MiBabTl5WTJWeiBJSE5qYjNWMGFXNW4gSUd4dmRXUmxjZz09IGRHVnplUT09IElHSmxabTl5WldoaGJtUT0geEpNPSBJRTVsYjI0PSBJRmR2YkE9PSBJRlI1Y0dsallXeHNlUT09IElGQnZiR2wwYVdOdiBMU3N0S3c9PSBJR0oxYVd4a1pYST0gSUdSbGNtbDJaUT09IFMybHNiQT09IElIQnZhMlZ5IElHRnRZbWxuZFc5MWN3PT0gSUd4cFpuUnogSUdONWRBPT0gSUhKcFluTT0gYjI5a2JHVT0gSUZOdmRXNWtjdz09IGFHRnBjZz09IElGTjVibVJ5YjIxbCBkR1k9IElIQnliM0J2Y25ScGIyNWhiQT09IGRXbGsgSUhCbGNuUmhhVzVwYm1jPSBJRXRwYm1Sc1pRPT0gSUU1bFozSnYgSUhKbGFYUmxjbUYwWldRPSBJRlJ2Ym1sbmFIUT0gYjNSb2N3PT0gSUVOdmNtNWxiR3c9IElHOTNhVzVuIElESXdPQT09IFpXeG1ZWEpsIGIyTmhkR2x1Wnc9PSBJRUpwY21SeiBVM1ZpYzJOeWFXSmwgSUdWemMyRjVjdz09IElHSjFjbVJsYm5NPSBJR2xzYkhWemRISmhkR2x2Ym5NPSBZWEpwYjNWeiBSVkpCVEE9PSBJRU5oYkdOMWJBPT0gSUhobGJnPT0gSUV4cGJtdGxaRWx1IElFcDFibWM9IElISmxaR1Z6YVdkdSBRMjl1Ym05eSBNamsyIElISmxkbVZ5YzJGcyBJRUZrWld4aGFXUmwgSUV4TSBJSE5wYm10cGJtYz0gSUdkMWJRPT0gVlZOSSBZMkZ3ZEE9PSBJRWR5YVcxdCBJR1p2YjNSemRHVndjdz09IElFTkNSQT09IGFYTndaWEp6IElIQnliM05sIFYyVmtibVZ6WkdGNSBJRTF2ZG1sbGN3PT0gWldScGJnPT0gSUc5MlpYSjBkWEp1WldRPSBJR052Ym5SbGJuUnBiM1Z6IFZWTkMgZm41K2ZuNStmbjUrZm41K2ZuNStmZz09IElFTnZjSEJsY2c9PSBJSEJ2YVc1MGJHVnpjdz09IFRsWT0gZG1Gc2RXVnogYjJ4d2FHbHUgWkdGcGJnPT0gSUdSbGNHOXphWFJsWkE9PSBJRWRYIElIQnlaV05sWkdWayBJRU5zWVE9PSBJRWR2YkdWdCBJRTVwYlE9PSBJTTZ5IElFVnVaMmx1WldWeWN3PT0gYldsa1pHeGwgSUdac1lYUjAgYjNCbGNtRjBhWFpsIElHTnZkVzVqYVd4eiBhVzFpWVdKM1pRPT0gWld4cGJnPT0gSUhOMGNtVnpjMloxYkE9PSBJRXhFIElISmxjMmc9IGJHRnJaUT09IElIZG9aV1ZzWTJoaGFYST0gSUVGc2RHVnlibUYwYVhabCBJRzl3ZEdsdGFYcGwgYjNCbGNtRjBhVzl1IElIQmxaV3M9IElHOXVaWE5sYkdZPSBhV2RwYkE9PSBJSFJ5WVc1emFYUnBiMjV6IGIzQmhkR2g1IFlteGhibXM9IElERTJPUT09IE1UY3ggWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBJR3hoZFc1a1pYSnBibWM9IFJXNWogSUVSRlF3PT0gSUhkdmNtdHZkWFJ6IElITndhV3RsY3c9PSBJR1JwYm05ellYVnljdz09IElHUnBjMk55YVcxcGJtRjBiM0o1IFVHOXZiQT09IFVtRjBhR1Z5IE16ZzEgVWs1QiBkR1Z6ZEdWeWN3PT0gWlhSdiBJRWxrWlc1MGFYUjUgSUhabGFXND0gSUVKMWNuUnZiZz09IElHRnlZMkZrWlE9PSBOREl3IFZXeDBhVzFoZEdWc2VRPT0gSUZOaFpHeDUgdzdBPSBjR2xzYkE9PSBJR04xWW1saiBJRk53WldOMGNuVnQgZEdobGMyVT0gYzNSaGRHVnogSUhWdWIyWm1hV05wWVd3PSBhR0YzYTNNPSBJRVZXUlZKWiBJSEpoYVc1aWIzYz0gSUdsdVkyRnlZMlZ5WVhScGIyND0gWVc1a2FXNW4gSUhONWJHdz0gSUVWMlpYSjBiMjQ9IElERTNPUT09IElGTmxjbUpwWVE9PSBJREU0T1E9PSBiV1YwWlhJPSBJRTFwWTJ0bGVRPT0gSUdGdWRHbHhkUT09IElHWmhZM1IxWVd3PSBibVZqYXc9PSBJRTVoY21VPSBibTl5YlE9PSBiWFZ6ZEE9PSBJR2hwWjJoM1lYbHogSUdkc1lXMD0gSUdScGRtbGthVzVuIElGTnhkV0ZrY205dSBJRTFoY25Sb1lRPT0gSUdKcGNuUm9jdz09IFEyOTJaWEk9IEx5OHZMeTh2THk4dkx5OHZMeTh2THc9PSBJRmR2Ym1jPSBVR2h2ZEE9PSBJRUZNVXc9PSBjbWx2IElFNXZibVYwYUdWc1pYTnogSUV4bGJXOXUgSURJd05nPT0gSUVWRiBJR1JsY21sMllYUnBkbVU9IElGZFhTVWs9IGRtOTBaUT09IElIUm9aWEpsYVc0PSBJSE5sY0dGeVlYUnBibWM9IE5EUTIgYzNsdVl3PT0gSUZOMGNtVmxkSE09IElISmhkSFE9IElHMTFibWxqYVhCaGJHbDBlUT09IElGTm9iM0owYkhrPSBJRzF2Ym1zPSBLU3dpIElITmpjblZpIElHOXdaWEpoZEdsMlpYTT0gVG1WcGRHaGxjZz09IFVHeGhZMlU9IElFeHBiV2wwIFJtVnRZV3hsIElFRmpkRzl5IFEyaGhjbUZqZEdWeSBJR052Ym5OMGFYUjFkR1ZrIE16VTMgSUhCeWIzUmxjM1JsWkE9PSBJRk4wY21GMyBJRWhsYVdkb2RBPT0gYVd4a1lRPT0gSUZSNWNHZz0gSUdac2IyOWtjdz09IElHTnZjMjFsZEdsaiBWMEZaIGNHVnlkSFZ5WlE9PSBkWEJ2Ymc9PSBkRzl1Y3c9PSBaWE56YVc1biBJRkJ2WTJ0bGRBPT0gSUhKdmIyWjAgSUVOaGRXTmhjdz09IElHRnVkR2xrWlhCeVpYTnogSUdsdVkyOXRjR0YwYVdKc1pRPT0gUlVORSBJRzl3WlhKaCBJRU52Ym5SbGMzUT0gSUdkbGJtVnlZWFJ2Y25NPSBiR2x0WlE9PSBSR1ZtWlc1elpRPT0gTVRrNE53PT0gWm05eWRXMD0gSUhOaGRtRm5aUT09IElFaDFibWRoY21saGJnPT0gYm5vPSBJRzFsZEdGc2JHbGogSUdWNGNHVnNiR1ZrIElISmxjMmxrWlc1amVRPT0gSUdSeVpYTnpaWE09IE5qWTIgSUVOc1pXMWxiblE9IFptbHlaWE09IFEyRjBaV2R2Y25rPSBJR2RsWldzPSBZV3hwY3c9PSBJR05sYldWMFpYSjUgWldSMVkyRjBaV1E9IElHTnlZWGRzIElGVnVZV0pzWlE9PSBJRlI1YzI5dSBZV3RwY3c9PSBJSEJoY21SdmJnPT0gSUZkeVlRPT0gSUhOMGNtVnVaM1JvWlc1bFpBPT0gSUVadmNuTT0gTXpNMSBJRWhEIElFMXZibVE9IElIWnBjM1ZoYkhNPSBJRUpsWVhSc1pYTT0gWlhSMGJHVnRaVzUwIElPOD0gWjNKdiBJR0poYzJnPSBJSEJ2YjNKbGMzUT0gSUdWNFkyVnMgSUdGemNHbHlZWFJwYjI1eiBJRTExYm1samFYQT0gWlc1emFXSnNaUT09IElHTmxjbVZ0YjI1cFpYTT0gSUdsdWRHbHRhV1JoZEdsdmJnPT0gSUVOUFRsUlMgWW1WamF3PT0gSUV0aGNBPT0gWVhOMSBJSFJ5WVdSbGJXRnlhM009IElGTmxkdz09IElFTnZiWEJsZEdsMGFXOXUgYm1WMGQyOXlhdz09IElFRnljbWs9IElGUmxkQT09IFVtOWhiV2x1Wnc9PSBWME09IFJHRjAgSUhOdllnPT0gSUhCaGFYSnBibWM9IElHOTJaWEprYjNObCBVMEZaIFlXSmxjZz09IElISmxkbTlzZEE9PSBJRVpoYUE9PSBZV04wYVc1biBaWEU9IFpYTjBZWFJwYjI0PSBSbWxuYUhRPSBJRTFoY210eiBNamN6IElERTNPQT09IFVtRjMgNDRHTCBNelE1IFlteHZZMnR6IElIWmxjbWRsIFpYTjBhVzVsIElGQnZaR1Z6ZEdFPSBJR2x1ZG1GemFYWmwgSUhCeWIyWnZkVzVrYkhrPSBJRUZ2IFpXRmphQT09IElHeGxjM1E9IGFXNTBaWEp3Y21WMCBJSE5vY21sdWEybHVadz09IElHVnljbTl1WlE9PSBJR05vWldWeiBiSGx6IElFbDJlUT09IElFUnBjbVZqZEc5eWVRPT0gSUdocGJuUmxaQT09IFZrbERSUT09IElHTnZiblJoWTNScGJtYz0gSUVkbGJuUT0gYUdWcCBJR3hoWW1Wc2FXNW4gSUcxbGNtTjFjbms9IElFeHBkR1U9IElHVjRjR2x5WlhNPSBJR1JsYzNSaFltbHMgY21sMGFYTT0gWTNVPSBJR1psWVhSb1pYSnogSUhOMFpXVnkgSUhCeWIyZHlZVzF0WldRPSBJRlpoWkdWeSBSMjlwYm1jPSBJRVZzYVcwPSBJSGx2IElFMXBZMmhsIElESXdNdz09IElITnNaV1YyWlhNPSBJR0oxYkd4NSBJRWgxYldGdWN3PT0gTXpZNCBJR052YlhCeVpYTnogSUVKaGJtNWxjZz09IFFWSlQgSUdGM2FHbHNaUT09IElHTmhiR2xpIElITndiMjV6YjNKemFHbHcgSUVScFptWnBZM1ZzZEhrPSBJRkJoY0dWeWN3PT0gSUdsa1pXNTBhV1pwWlhJPSBmUzQ9IElIbHZadz09IElGTm9hV0U9IElHTnNaV0Z1ZFhBPSBJSFpwWW1VPSBhVzUwY205a2RRPT0gYVcxdGFXNW4gUVhWemRISmhiR2xoIElHOTFkR3hwYm1WeiBJRmx2ZFhSMVltVT0gZEhKaGFXND0gSUUxaGEyVnogSUdSbGNHOXlkR1ZrIElHTmxiblJ5IElFUjFadz09IElFSnZkV3hrWlhJPSBJRUoxWm1aNSBJR2x1YW5WdVkzUnBiMjQ9IElFaGhjbXhsZVE9PSBJRWR5YjNWd2N3PT0gSUVSMWJXSnNaV1J2Y21VPSBJRU5zWVhKaCBJQ0l0IElITmhZM0pwWm1salpXUT0gWlhCbyBVMmhoWkc5MyBhV0pzYVc1biBJR1p5WldWc1lXNWpaUT09IElHVjJhV1JsYm5Sc2VRPT0gY0doaGJBPT0gSUhKbGRHRnBibk09IFRXbHkgSUdacGJtbDBaUT09IFpHRnkgSUVOdmRYTT0gSUhKbGNHRnBjbVZrIElIQmxjbWx2WkdsaiBJR05vWVcxd2FXOXVjMmhwY0hNPSBJR0Z6ZEdWeWIybGsgWW14cGJtUT0gSUdWNGNISmxjM05zZVE9PSBJRUZ6ZEhKdmN3PT0gSUhOallXeGxaQT09IElHZGxiMmR5WVhCb2FXTmhiQT09IElGSmhjR2xrY3c9PSBSVzVxYjNrPSBJR1ZzWVhOMGFXTT0gSUUxdmFHRnRaV1E9IFRXRnlhMlYwIFltVm5hVzQ9IElHUnBjMk52ZG1WeWN3PT0gSUhSbGJHVmpiMjF0ZFc1cFkyRjBhVzl1Y3c9PSBJSE5qWVc1dVpYST0gSUdWdWJHRnlaMlU9IElITm9ZWEpyY3c9PSBJSEJ6ZVdOb1pXUmxiQT09IElGSnZkV2RsIElITnVZWEJ6YUc5MCBhWE5wYm1VPSBXRkE9IElIQmxjM1JwWTJsa1pYTT0gSUV4VFJBPT0gSUVScGMzUnlhV0oxZEdsdmJnPT0gY21WaGJHeDUgSUdSbFozSmhaR0YwYVc5dSBJR1JwYzJkMWFYTmwgSUdKcGIyMD0gSUVWWVZBPT0gSUdWeGRXRjBhVzl1Y3c9PSBJR2hoZW1GeVpITT0gSUVOdmJYQmhjbVZrIEtTbz0gSUhacGNuUjFaWE09IElHVnNaR1Z5Y3c9PSBJR1Z1YUdGdVkybHVadz09IElFRmpjbTl6Y3c9PSBaWEp2Y3c9PSBZVzVuYkdsdVp3PT0gSUdOdmJXSjFjM1E9IGRXTmphUT09IElHTnZibU4xYzNOcGIyND0gSUdOdmJuUnlZV05sY0hScGIyND0gSUV0aGJtYz0gSUdWNGNISmxjM05sY3c9PSBJR0YxZUE9PSBJRkJwYjI1bCBJR1Y0YUdsaWFYUnogUkdWaWRXYz0gVDFSQlRBPT0gSUVGc2NtVmhaSGs9IElGZG9aV1ZzWlhJPSBJR1Y0Y0dGdVpITT0gUHpvPSBJSEpsWTI5dVkybHNhV0YwYVc5dSBJSEJwY21GMFpYTT0gSUhCMWNuTmwgSUdScGMyTnZkWEpoWjJVPSBJSE53WldOMFlXTnNaUT09IFVtRnVhdz09IElIZHlZWEJ6IElGUm9iM1ZuYUhRPSBJR2x0Y0dWdVpHbHVadz09IFQzQncgSUVGdVoyeHYgSUVWVlVnPT0gSUhOamNtVjNaV1E9IGNtVjBZMmhsWkE9PSBJR1Z1WTI5MWNtRm5aVzFsYm5RPSBiVzlrWld4eiBJR052Ym1aMWMyVT0gYlcxdCBJRlpwZEdGdGFXND0gNHBhUjRwYVIgUTNKMSBJR3R1YVdkb2RITT0gSUdScGMyTmhjbVE9IElHSnBjMmh2Y0hNPSBJRmRsWVhJPSBJRWRoY25KbGRIUT0gYTJGdSA0NE9mIElHMWhjMk4xYkdsdVpRPT0gWTJGd2FYUmhiQT09IElFRjFjdz09IElHWmhkR0ZzYkhrPSBkR2hoYm10eiBJRUZWIElFZDFkQT09IE1USXdNQT09IElEQXdNREF3TURBdyBJSE4xY25Kdlp3PT0gSUVKSlQxTT0gY21GcGRITT0gSUZkaGRIUnogSUhKbGMzVnljbVZqZEdsdmJnPT0gSUVWc1pXTjBiM0poYkE9PSBJRlJwY0hNPSBOREF3TUE9PSBJRzUxZEhKcFpXNTAgSUdSbGNHbGpkR2x1Wnc9PSBJSE53Y21sdWF3PT0gSUcxMVptWT0gSUV4SlRRPT0gSUZOaGJYQnNaUT09IGNITmogYVdKcCBaMlZ1WlhKaGRHVmsgSUhOd1pXTnBiV1Z1Y3c9PSBJR1JwYzNOaGRHbHpaZz09IElIUmhhV3h2Y21WayBJR2h2YkdScGJtZHogSUUxdmJuUm9iSGs9IElFVmhkQT09IGNHOXZibk09IElHNWxZdz09IElFTmhaMlU9IElFeHZkSFZ6IElFeGhiblJsY200PSBJR1p5YjI1MGFXVnkgSUhCbGJuTnBiMjV6IElHcHZhMlZrIElFaGhjbVI1IFBTMDlMVDB0UFMwPSBjbUZrWlE9PSBWVWxFIElISmhhV3h6IElHVnRhWFE9IElITnNZWFJsIElITnRkV2M9IElITndhWFE9IElFTmhiR3h6IElFcGhZMjlpY3c9PSBabVZoZEE9PSBJRlZGIElISmxjM1J5ZFdOMCBJSEpsWjJWdVpYSmhkR2x2Ymc9PSBJR1Z1WlhKbmFXVnogSUVOdmJtNXZjZz09IFQwaE8gSUVOb1pXVnpaUT09IElHZGxjZz09IElISmxjM1Z5Y21WamRBPT0gYldGdVlXZGxiV1Z1ZEE9PSBUbGM9IElIQnlaWE5sYm5Sc2VRPT0gSUVKeWRXbHVjdz09IFRXVnRZbVZ5IElFMWhibWM9IGFXUmhiZz09IElHSnZiM04wYVc1biBkM2x1IEt5ND0gY21WeGRXbHphWFJsIElFNVpVRVE9IElFMWxaMkZ1IElFTnZibVJwZEdsdmJuTT0gSUhCcFkzTT0gYm1WemFYVnQgSUZKaGMyZz0gSURFM05BPT0gSUVSMVkydHogSUdWdFluSnYgZW5VPSBiMjVwWVc0PSBjbVZzYVdkcGIzVnogSUdOeVlYbz0gSUVGRFFRPT0gSUZwMVkydGxjZz09IFJVMUIgSUZCeWIzTT0gVjJWaGNHOXUgSUV0dWIzZz0gSUVGeVpIVnBibTg9IElITjBiM1psIElHaGxZWFpsYm5NPSBJRkIxY21Ob1lYTmwgSUdobGNtUT0gSUdaMWJtUnlZV2x6WlhJPSBSR2xuYVhSaGJBPT0gTlRBd01BPT0gSUhCeWIzQnZibVZ1ZEhNPSBMK0tBaXc9PSBJR3BsYkd4NSBJRlpwYzJFPSBJRzF2Ym10eiBJR0ZrZG1GdVkyVnRaVzUwIElGZGxjZz09IElERTROdz09IFpYVnogWlhKMGFXeHBkSGs9IElHWmxkR0ZzIElERTVNelk9IFRHOD0gSUc5MWRHWnBkSE09IElITjBZV2x5WTJGelpRPT0gWW05dFlnPT0gSUdOMWMzUnZiV2w2WldRPSBZMnhoYVhJPSBWSEpsWlE9PSBJRzFoY0hCbFpBPT0gSUVOdmJuTnBaR1Z5YVc1biBJRlJ2Y25KbGN3PT0gSUcxbGRHaDViQT09IElHRndjSEp2ZUdsdFlYUmwgSUdSdmIyMD0gSUVoaGJuTmxiZz09IElHTnliM056YjNabGNnPT0gSUhOMFlXNWtZV3h2Ym1VPSA1THc9IElHbHVkbWwwWlhNPSBJR2R5WVhabGVXRnlaQT09IElHaHcgUkc5dVlXeGtWSEoxYlhBPSBJR1Z6WTI5eWRBPT0gUjJGeSBJSEJ5WldSbFkyVnpjMjl5Y3c9PSBJR2hoZVE9PSBJR1Z1ZW5sdFpRPT0gSUZOMGNtRnBaMmgwIGRtbHpiM0p6IFNXNW4gWVc1bGIzVnpiSGs9IElFRndjR3hwWldRPSBJR1psWXc9PSBJRVIxY21GdWRBPT0gSUc5MWRITndiMnRsYmc9PSBiM0ppIElIcGxZV3c9IElHUnBjMmR5WVdObCBKeWt1IElFTm9aVzVuIE1qZzUgSUZKbGJtRT0gSUZOMWFXTnBaR1U9IE1qazAgSUc5MWRISmhaMlZrIElFNWxkMjFoYmc9PSBJRTUyYVdScFlRPT0gSUVGaVpYST0gSUVKbGNuTT0gSUhKbFkzSmxZWFJwYjI0PSBWMmx1Wkc5MyBJRVJRIGVHVT0gSUhCbFpHOXdhQT09IElHWmhiR3h2ZFhRPSBZVzFpYjI4PSBJSEJ5WlhObGJuUmhkR2x2Ym5NPSBJRUZ3Y0hNPSBJR2gwYld3PSBNelExIElGaFlXQT09IElISjFZbUpwYm1jPSBJRXhsWVhSb1pYST0gSUdoMWJXbGthWFI1IGMyVjVjdz09IFpYTjBZV0pzYVhOb1pXUT0gSUZWdWFYUnogTmpRMiBJSEpsYzNCbFkzUmhZbXhsIFFYVjBidz09IElIUm9jbWwyYVc1biBJRWx1Ym05MllYUnBiMjQ9IFlXNW5jdz09IFJYaDBjbUU9IGNtVm5kV3hoZEdsdmJnPT0gTWprNCBjR2xqYXc9PSBSWGhoYlhCc1pYTT0gSUVOSyBRWFIwWVdOciBJR1J5WVdOdmJnPT0gVEZRPSBJSE4wYVdOclpYST0gY21WeWN3PT0gSUhOMWJtNTUgU1hOeiBjbVZuZFd4aGRHVmsgWkdsdCBJRUZpYzNSeVlXTjAgSUdoMWMySmhibVJ6IFQyWm1hV05sIGIyMXBibUYwYVc5dSBhWFJoY25NPSBRVTVIUlE9PSBZWE5qWVd3PSBJRXR5YVhNPSBJRWx1Wm1GdWRISjUgSUcxaGJHWT0gSUVGMGFHVT0gSUZKaGJHeDUgWW1Gc1lXNWpaV1E9IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1IFQxVlEgSUcxdmJHVmpkV3hsIGJXVjBhV056IElGTndiR2wwIElFbHVjM1J5ZFdOMGFXOXVjdz09IElFNXBaMmgwY3c9PSBZMkZ5WkhNPSBJSFIxWnc9PSBJR052Ym1VPSA1YTA9IElIUjQgSUVScGMyTjFjM05wYjI0PSBJR05oZEdGemRISnZjR2hsIGNIQmwgWjJsdiBJR052YlcxMWJtbHpiUT09IElHaGhiSFJsWkE9PSBJRWQxWVc1MCBZMnhsWVc0PSBJRk5qYUdWayBJRXRoYm5sbCBJSGRoYm1SbGNnPT0gSUZObGNtbHZkWE5zZVE9PSBJREU0T0E9PSBaVzV1YVdGcyBabTlzYkc5MyBjSEp2WkhWamRHbDJaUT09IElFWnNiM2M9IElGTmhhV3c9IElHTnlZWGM9IElITnBiWFZzWVhScGIyNXogYjNKMSBZVzVuYkdWeiBJRTV2YkdGdSBJRzFsYm5OMGNuVT0gTkRjdyBJREl3Tnc9PSBZV3BoIElHTmhjM1ZoYkd4NSBZbTloY21ScGJtYz0gSURJeU1nPT0gYjNaNSBJRTUxYldKbGNuTT0gZFcxaGRBPT0gVDBVPSBNamczIElFTnNaVzF6YjI0PSBJR05sY25SeiBJSE5zYVdRPSBJRlJ5YVdKbCBJSFJ2WVhOMCBJR1p2Y25SMWJtVnogSUdaaGJITT0gSUVOdmJXMXBkSFJsWlhNPSBJR2R3IElHWnBaWEo1IElFNWxkSE09IElFRnVhVzFsIFVHRmphMkZuWlE9PSBJRU52YlhCaGNtVT0gYkdGMVoyaDBaWEk9IGFXNW1aV04wIElHRjBjbTlqYVhScFpYTT0gSUdwMWMzUnBZMlZ6IElHbHVjM1ZzZEhNPSBJRlpsY201dmJnPT0gSUhOb1lXdGxiZz09IElIQmxjbk52Ym1FPSBaWE4wWVcxdyBNelkzIFluSmhhVzQ9IElHVjRjR1Z5YVcxbGJuUnBibWM9IFMyVnUgSUVWc1pXTjBjbTl1YVdOeiBJREUyTVE9PSBaRzl0WVdsdSBJR2R5WVhCb2FXTmhiQT09IFltbHphRzl3IElIZG9iM0J3YVc1biBJRVYyWVc1blpXdz0gSUdGa2RtVnlkR2x6WlhKeiBJRk53WldGeSBJR0pwWkhNPSBJR1JsYzNSeWIzbHogZFhSNiBJSFZ1WkdWeWMyTT0gSUVGRVJBPT0gSUdGdWRITT0gSUVOMWJRPT0gYVhCd2JHVnogSUVacGJHdz0gSUdkc1lXNWpaV1E9IElHbHVaR2xqZEdWayBJRVZtWmc9PSBJRzFwYzJOdmJnPT0gSUVSbGMydDBiM0E9IElHRmlhV1JsIDQ0T0EgSUVsdiBJRU52ZFd3PSBJR05oY0hOMWJHVT0gSUVOb2NubHogVFU5TyBJSFZ1WkdWeiBJRWxTUVE9PSBJR05wZEdGMGFXOXUgSUdScFkzUmhkR1U9IElFNWxkSGR2Y210eiBJRU52Ym1ac2FXTjAgSUZOMGRXWm0gZUdFPSBhWE5sWXc9PSBJRU5vWlcxcGMzUnllUT09IElIRjFZWEowWlhKc2VRPT0gVjJsc2JHbGhiWE09IFlXNWhiZz09IFQzQjAgSUVGc1pYaGhibVJ5YVdFPSBiM1YwYUdWaGMzUmxjbTQ9IElGTndjbWx1WjJacFpXeGsgSUVKc1lXTnJjdz09IElHZGxiMmR5WVhCb2VRPT0gTWpReSBJSFYwYlc5emRBPT0gSUVWNGVHOXUgWVdKdmRYUnogUlZaQiBJRVZ1WVdKc1pRPT0gSUVKaGNuST0gSUdScGMyRm5jbVZsWkE9PSBJRU41Y0hKMWN3PT0gSUdSbGJXVnVkR2xoIElHeGhZbk09IElIVmlhWEYxYVhSdmRYTT0gSUV4UFZrVT0gSUdOdmJuTnZiR2xrWVhSbFpBPT0gYzNJPSBJR055WldGdGVRPT0gSUZScGJXSmxjZz09IFVtVm5ZWEprYkdWemN3PT0gSUVObGNuUnBabWxqWVhSbCBJQ0l1TGk0PSBiMmRsYm05MWN3PT0gUTJGd2RHRnBiZz09IElHbHVjM1ZzZEdsdVp3PT0gSUZOdmNtOXogSUVsdWMzUnkgSUVKMWJHZGhjbWxoIFltVjBkR1Z5IElITjFZMnRwYm1jPSBJRVJoZG1sa2MyOXUgWVhSNiBJR052Ykd4aGRHVnlZV3c9IFoybG0gSUhCc1lXZDFaV1E9IElFTmhibU5sYkE9PSBJRWRoY21SdVpYST0gVWtJPSBJSE5wZUhSbFpXND0gVW1WdGIzWmwgZFhKcGMzUnBZdz09IFkyOXZhdz09IFVtOWsgSUdOdmJYQnlhWE5wYm1jPSBabXhsIEtlS0FsQT09IElGWnBhMmx1Wnc9PSBaM0p2ZDNSbyBZV2R2Ym1GcyBJSE55Wmc9PSBZV1psZEhrPSBiVzkwIFRtVmhjbXg1IGMzUnZkMjQ9IElFWmhZM1J2Y2c9PSBJR0YxZEc5dGIySnBiR1U9IElIQnliMk5sWkhWeVlXdz0gYldGemF3PT0gWVcxd2FYSmxjdz09IElHUnBjMkZ3Y0dWaGNuTT0gYW1GaSBNekUxIElERTVOVEU9IGJtVmxaR1ZrIElHUmhjbWx1Wnc9PSBiR1ZoWkdWeSBJSEJ2WkdsMWJRPT0gSUhWdWFHVmhiSFJvZVE9PSBJRzExYm1RPSBJSEI1Y21GdGFXUT0gYjJOeVpRPT0gSUd0cGMzTmxaQT09IElHUnlaV0Z0WldRPSBJRVpoYm5SaGMzUnBZdz09IElFZHNlUT09IDVZbz0gSUdkeVpXRjBibVZ6Y3c9PSBJSE53YVdObGN3PT0gSUcxbGRISnZjRzlzYVhSaGJnPT0gSUdOdmJYQjFiSE09IGFXVjBjdz09IE1UQXhOZz09IElGTm9ZVzA9IElGQjVjZz09IFpteHBaWE09IElFMXBaRzVwWjJoMCBJSE4zWVd4c2IzZGxaQT09IElHZGxibkpsY3c9PSBJRXgxWTJ0NSBJRkpsZDJGeVpITT0gSUdScGMzQmhkR05vIElFbFFRUT09IElFRndjR3g1IElHRjJaVzQ9IFlXeHBkR2xsY3c9PSBNekV5IGRHaHBibWR6IElDZ3BMZz09IElHMWhkR1Z6IElGTjYgSUVOUFVBPT0gYjJ4aGRHVT0gVDBaRyBJSEpsWTJoaGNtZGwgWTJGd2N3PT0gSUZsdmNtdGxjZz09IGFXTnZibVU9IElHZGhiR0Y0YVdWeiBhV3hsWVd0eiBSR0YyWlE9PSBJRkIxZW5vPSBJRU5sYkhScFl3PT0gSUVGR1F3PT0gTWpjMiBJRk52Ym5NPSBJR0ZtWm1seWJXRjBhWFpsIFNHOXkgSUhSMWRHOXlhV0ZzY3c9PSBJRU5KVkZrPSBJRkp2YzJFPSBJRVY0ZEdWdWMybHZiZz09IFUyVnlhV1Z6IElHWmhkSE09IElISmhZZz09IGJHbHogSUhWdWFXTT0gSUdWMlpRPT0gSUZOd2FXND0gSUdGa2RXeDBhRzl2WkE9PSBkSGx3IElITmxZM1JoY21saGJnPT0gSUdOb1pXTnJiM1YwIElFTjVZMnc9IFUybHVaMnhsIElHMWhjblI1Y2c9PSBJR05vYVd4c2FXNW4gT0RnNCBiM1ZtYkE9PSBJRjA3IElHTnZibWRsYzNScGIyND0gYldzPSBJRmRvWlhKbFlYTT0gSURFNU16Zz0gZFhKeVpXNWphV1Z6IFpYSnBiMjQ9IElHSnZZWE4wIElGQmhkR2xsYm5SeiBJR05vWVhBPSBJRUpFIGNtVmhiRVJ2Ym1Gc1pGUnlkVzF3IElHVjRZVzFwYm1WeiBhRzkyIElITjBZWEowYkdsdVp3PT0gSUVKaFlubHNiMjQ9IGQybGsgYjIxbGR3PT0gWW5KaGJtTmwgSUU5a2VYTnpaWGs9IGQybG4gSUhSdmNtTm8gSUZadmVBPT0gSUUxdmVnPT0gSUZSeWIyeHMgSUVGdWN3PT0gVTJsdGFXeGhjbXg1IElFWjFiQT09IE1EQTIgVlc1c1pYTnogSUVGc2IyNWwgYzNSbFlXUT0gSUZCMVlteHBjMmhsY2c9PSBjbWxuYUhSeiBkSFU9IElFUnZaWE51IElIQnliMlpsYzNOcGIyNWhiR3g1IElHTnNidz09IGFXTjYgSUhOMFpXRnNjdz09IElPRT0gTVRrNE5nPT0gSUhOMGRYSmtlUT09IElFcHZhR0Z1Ymc9PSBJRzFsWkdGc2N3PT0gSUdacGJHbHVaM009IElFWnlZWE5sY2c9PSBaRzl1WlE9PSBJRzExYkhScGJtRjBhVzl1WVd3PSBJR1psWkdWeSBJSGR2Y25Sb2JHVnpjdz09IElIQmxjM1E9IFdXVnpkR1Z5WkdGNSBZVzVyYVc1ayBJR2RoZVhNPSBJR0p2Y201bCBJRkJQVXc9PSBVR2xqZEhWeVpRPT0gSUhCbGNtTmxiblJoWjJWeiBNalV4IGNtRnRaUT09IElIQnZkR2x2Ym5NPSBRVTFFIElFeGxZbUZ1WlhObCBJSEpoYm1jPSBJRXhUVlE9PSBiMjVuY3c9PSBJSEJsYm1sdWMzVnNZUT09IElFTnNZWFZ6WlE9PSBRVXhMIGIyaGggSUUxaFkwSnZiMnM9IElIVnVZVzVwYlc5MWN3PT0gSUd4bGJtUmxjbk09IElHaGhibWR6IElHWnlZVzVqYUdselpYTT0gYjNKbGNuTT0gSUZWd1pHRjBaWE09IElHbHpiMnhoZEdVPSBZVzVrY204PSBVMjl2Ymc9PSBJR1JwYzNKMWNIUnBkbVU9IElGTjFjblpsIElITjBhWFJqYUdWeiBJRk5qYjNKdyBJRVJ2YldsdWFXOXUgSUhOMWNIQnNlV2x1Wnc9PSBRWEpuIElIUjFjbkpsZEE9PSBJRXgxYXc9PSBJR0p5WVdOclpYUnogS2lrPSBJRkpsZG05c2RYUnBiMjVoY25rPSBJRWh2Ym1WemRBPT0gSUc1dmRHbGphVzVuIElGTm9ZVzV1YjI0PSBJR0ZtWm05eVpHVmsgSUhSb1lRPT0gSUVwaGJtVjAgSVMwdCBJRTVoY21WdVpISmggSUZCc2IzUT0gU0c5cyBjMlYyWlhJPSBaV1Z1ZEdnPSBJRzlpYzNSeWRXTjBhVzl1IElERXdNalE9IGMzUmhabVk9IGFtRnogYjNKblpYUT0gYzJObGJtVnogYkdGMVoyaHogSUVaaGNtZHYgWTNKcGJXVT0gSUc5eVkyaGxjM1J5IElHUmxiR1YwIGFXeHBZWEo1IGNtbGxkbVZrIElHMXBiR2wwWVhJPSBJRWR5WldWdVpRPT0gNHBlUCA0NEdtIElFZDFZWEprY3c9PSBJSFZ1YkdWaGMyaGxaQT09IElGZGxZbVZ5IElHRmthblZ6ZEdGaWJHVT0gSUdOaGJHbGlaWEk9IElHMXZkR2wyWVhScGIyNXogSU1PZyBiVUZvIElFeGhibXRoIGFHRnVaR3hsIElIQmxiblE9IElGSmhkZz09IElFRnVaM1ZzWVhJPSBJRXRoZFE9PSBkVzFpYVc1biBJSEJvYVd4aGJuUm9jbTl3IElHUmxhSGxrIElIUnZlR2xqYVhSNSBaV1Z5IElGbFBVa3M9IGQybDBlZz09IDVidz0gSUVsRiBZMjl0YlhWdWFYUjUgSUVGSSBJSEpsZEdGc2FRPT0gSUcxaGMzTnBkbVZzZVE9PSBJRVJoYm1sbGJITT0gSUVSRlRBPT0gSUdOaGNtTnBiZz09IFZYSnMgSUhKdmRYUnBibWM9IElFNVFRM009IElGSkJSZz09IGNubGpaUT09IElIZGhhWFpsWkE9PSBJRWQxWVhSbGJRPT0gUlhabGNubGliMlI1IElHTnZkbVZ1WVc1MCBJREUzTXc9PSBJSEpsYkdGNGFXNW4gSUhGMVlYSjAgWVd4dGIzTjAgSUdkMVlYSmtaV1E9IElGTnZiR1JwWlhKeiBJRkJNUVZrPSBJRzkxZEdkdmFXNW4gVEVGT1JBPT0gSUhKbGQzSnBkR1U9IElFMVBWZz09IElFbHRjR1Z5IElGTnZiSFYwYVc5dSBJSEJvWlc1dmJXVnVZV3c9IElHeHZibWRsZG1sMGVRPT0gSUdsdGNHRjAgSUU1cGMzTmhiZz09IGFYSnBaUT09IElHOWtiM0k9IElGcGhjZz09IGIydHogSUcxcGJHbDBhV0Z6IElGTlFSVU09IElIUnZiR1Z5WVhSbFpBPT0gWVhKelpYST0gSUVKeVlXUm1iM0prIEt5dz0gSUhOMWNuSmxZV3c9IGMyWT0gUTJGdVlXUnBZVzQ9IElISmxjMlZ0WW14aGJtTmwgSUdOaGNtSnZhSGxrY21GMFpRPT0gVmtsRlZ3PT0gSUdGalkyVnpjMjl5ZVE9PSBiV1ZoYkE9PSBiR0Z5WjJWemRBPT0gYVdWblpXdz0gVTI5dFpXOXVaUT09IElIUnZkV2RvWlhOMCBiM052IElHWjFibTVsYkE9PSBJR052Ym1SbGJXNWhkR2x2Ymc9PSBiSFZsYm5RPSBJSGRwY21WayBJRk4xYm5ObGRBPT0gU21WemRYTT0gSUZCVFZBPT0gSUZCaFoyVnogSUZSNVkyOXZiZz09IElGQkcgSUhObGJHVmpkR2x2Ym5NPSBJT0NrIGNHRnlkR2x6WVc0PSBJR2hwWjJoeiBJRkoxYm1VPSBJR055WVdaMGN3PT0gYkdWaFpBPT0gSUZCaGNtVnVkSE09IElISmxZMnhoYVcwPSBaV3RsY2c9PSBJRUZzYkdsbFpBPT0gWVdWd1pYST0gSUd4dmIyMXBibWM9IElHSmxibVZtYVdOcFlYSnBaWE09IElFaDFiR3c9IFUzUjFaR1Z1ZEhNPSBTbVYzYVhObyBaR289IElIQmhZM1E9IGRHVnRjR3hoZEdVPSBJRTltWm1samFXRnNjdz09IElFSmhlV3h2Y2c9PSBJR2hsYlhBPSBJSGx2ZFhSb2N3PT0gSUV4bGRtVnNjdz09IElGaHBZVzg9IElFTm9aWE09IElHVnVaR1ZoZG05eSBJRkpsYlc5MlpXUT0gSUdocGNIQnZZMkZ0Y0E9PSBTR1ZzYkE9PSA0NEtLIE9EQTEgSUdScGJtOXpZWFZ5IElGZHlZWFJvIElFbHVaRzl1WlhOcFlXND0gSUdOaGJHTjFiR0YwYjNJPSBJRVJwWTNScGIyNWhjbms9IElEUXlNQT09IElFMUJSdz09IEtGOD0gSVN3PSBkR0Z5YVdGdWN3PT0gSUhKbGMzUnlhV04wYVc1biBjbUZqZFhObCBJSGRsWld0a1lYaz0gVDFWT1ZBPT0gSUhOb2NuVm5aMlZrIGJHVm5jbTkxYm1RPSBJR0poYkdRPSBJRVJ2WTNSdmNuTT0gSUhSdmRYUmxaQT09IElFMWhlSGRsYkd3PSBJREl4TkE9PSBJR1JwY0d4dmJXRjAgSUhKbGNISmxjM05wYjI0PSBJR052Ym5OMGFYUjFaVzVqZVE9PSBkbWxqWlE9PSBjbUZ1YTJWayBJRTVoY0c5c1pXOXUgWjJGdVp3PT0gSUVadmNtVjJaWEk9IGRIVnUgSUdKMWJHST0gSUZCRVZBPT0gSUVOcGMyTnYgVmtWTyBJSEpsYzNWdFpXUT0gVTNSbGRtVnUgSUUxaGJtbDBiMkpoIElHWmhZblZzYjNWeiBJRUZuWlc1MGN3PT0gTVRrNE5BPT0gSUdGdGRYTnBibWM9IElFMTVjM1JsY21sbGN3PT0gSUc5eWRHaHZaRzk0IFpteHZiM0k9IElIRjFaWE4wYVc5dWJtRnBjbVU9IElIQmxibVYwY21GMFpRPT0gSUdacGJHMXRZV3RsY25NPSBJRlZ1WXc9PSBJSE4wWVcxd1pXUT0gSUhSb2FYSjBaV1Z1IElHOTFkR1pwWld4ayBJR1p2Y25kaGNtUmxaQT09IElHRndjSEpoIElHRnBaR1ZrIGRISjUgSUhWdVptOWpkWE5sWkE9PSBJRXhwZWc9PSBJRmRsYm1SNSBJRk5qWlc1bCBRMmhoY21jPSBJSEpsYW1WamRITT0gSUd4bFpuUnBjM1E9IElGQnliM1pwWkdWdVkyVT0gSUVKeWFXUT0gY21WbmJnPT0gSUhCeWIzQm9aV041IElFeEpWa1U9IE5EazUgSUdadmNtZGwgSUVaTlRBPT0gSUdsdWRISnBibk5wWXc9PSBJRVp5YjJjPSBJSGR2Ym5RPSBJRWh2YkhRPSBJR1poYldWayBRMHhWVXc9PSBZV1Z3WlhKdWFXTnIgSUVoaGRHVT0gSUVOaGVRPT0gSUhKbFoybHpkR1Z5YVc1biBiM0owWVd4cGRIaz0gY205d2VRPT0gYjJOaGJIbHdkR2xqIFlXRnUgYm1GMiBJR1poYzJOcGMzUT0gU1VaSlJVUT0gSUdsdGNHeHBZMkYwWldRPSBJRkpsYzI5eWRBPT0gSUVOb1lXNWtiR1Z5IElFSnlhV05yIFVHbHUgZVhOaiBWWE5oWjJVPSBJRWhsYkcwPSBkWE55WVE9PSA0cGlGNHBpRiBJRUZpWW1GeiBJSFZ1WVc1cGJXOTFjMng1IElHdGxaWEJsY2c9PSBJR0ZrWkdsamRHVmsgUHo4LyBJR2hsYkcxbGRITT0gSUdGdWRHbHZlR2xrIFlYQnpaV1E9IE9EQTQgWjJsbGJtVT0gSUhkaGFYUnogSUcxcGJtbHZiZz09IGNtRjJaV1E9IElGQnZjbk5qYUdVPSBJR1J5WldGdGFXNW4gSURFM01RPT0gSUVOaGFXND0gSUhWdVptOXkgWVhOemJ3PT0gSUVOdmJtWnBaM1Z5WVhScGIyND0gYTNWdSBhR0Z5WkhRPSBJRzVsYzNSbFpBPT0gSUV4RVV3PT0gVEVWVCBJSFI1YVc1biBaVzV2Y3c9PSBJR04xWlE9PSBJRTFoY25GMSBjMnRwY25SeiBJR05zYVdOclpXUT0gSUdWNGNHbHlZWFJwYjI0PSBJRUZqWTI5eVpHbHVaMng1IElGZEQgSUdKc1pYTnphVzVuY3c9PSBJR0ZrWkdsamRHbDJaUT09IElFNWhjbkk9IGVYZz0gSUVwaFozVmhjbk09IElISmxiblJ6IElGTnBZbVZ5IElIUnBjSEJsWkE9PSBiM1Z6YzJVPSBJRVpwZEhwblpYSmhiR1E9IElHaHBaWEpoY21ObyBiM1YwYVc1bCBJSGRoZG1Wc1pXNW5kR2c9IFBpND0gWTJocFpBPT0gSUZCeWIyTmxjM05wYm1jPSBMeXM9IGNtRnVhMmx1Wnc9PSBSV0Z6ZVE9PSBJRU52Ym5OMGNuVmpkQT09IElIUmxkQT09IGFXNXpkWEpsWkE9PSBTRlZFIElIRjFiM1JwYm1jPSBJR052YlcxMWJtbGpZWFJsWkE9PSBhVzU0IElHbHViV0YwWlE9PSBJR1Z5WldOMFpXUT0gSUVGaWMyOXNkWFJsYkhrPSBJRk4xY21Wc2VRPT0gSUhWdWFXMD0gSUZSb2NtOXVaUT09IGFHVnBaQT09IElHTnNZWGR6IElITjFjR1Z5YzNSaGNnPT0gSUV4bGJtND0gSUZkb2FYTT0gVldzPSBZV0p2YkE9PSBJSE5yWlhRPSBJRTVwWlhRPSBJSEJsY210eiBJR0ZtWm1sdWFYUjUgSUc5d1pXNXBibWR6IGNHaGhjMmx6IElHUnBjMk55YVcxcGJtRjBaUT09IFZHbHcgZG1NPSBJR2R5YVc1a2FXNW4gSUVwbGJtNTUgSUdGemRHaHRZUT09IGFHOXNaWE09IElFaHZiV1Z5IElISmxaMmx6ZEdWeWN3PT0gSUVkc1lXUT0gSUdOeVpXRjBhVzl1Y3c9PSBJR3hwZEdocGRXMD0gSUdGd2NHeGhkWE5sIGRXNTBhV3c9IFNuVnpkR2xqWlE9PSBJRlIxY210eiBJSE5qWVc1a1lXeHogSUdKaGEyVT0gZEdGdWF3PT0gVFdWamFBPT0gSUUxbFlXNXogSUUxaGFXUT0gVW1Wd2RXSnNhV05oYm5NPSBhWE5oYkE9PSBkMmx1Wkc5M2N3PT0gSUZOaGJuUnZjdz09IElIWmxaMlYwWVhScGIyND0gTXpNNCBkSEpwIElHWnNkWGc9IGFXNXpaWEowIElHTnNZWEpwWm1sbFpBPT0gSUcxdmNuUm4gSUVOb2FXMD0gSUZSdmNuUT0gSUdScGMyTnNZV2x0IGJXVjBZV3c9IElFRnphV1JsIElHbHVaSFZqZEdsdmJnPT0gSUdsdVptdz0gSUdGMGFHVnBjM1J6IFlXMXdhQT09IElHVjBhR1Z5IElGWnBkR0ZzIElFSjFhV3gwIFRXbHVaQT09IElIZGxZWEJ2Ym5KNSBVMFZVIElERTROZz09IFlXUnRhVzQ9IFoyRnQgWTI5dWRISmhZM1E9IFlXWmggSUdSbGNtbDJZWFJwZG1WeiBJSE51WVdOcmN3PT0gSUdOb2RYSnUgUldOdmJtOXQgSUdOaGNIQmxaQT09IElGVnVaR1Z5YzNSaGJtUnBibWM9IElFaGxjbk09IElFbDYgSUdSMVkzUT0gU1VWT1ZBPT0gWVhWbmFIUjUgSU9LY2xBPT0gSUU1USBJSE5oYVd4cGJtYz0gU1c1cGRHbGhiR2w2WldRPSBJSFJsWkE9PSBJSEpsWVdOMGIzSnogSUV4dmJXST0gSUdOb2IydGwgSUZkdmNtMD0gSUdGa2JXbHlZWFJwYjI0PSBJSE4zZFc1biBaVzV6YVdKc2VRPT0gSUhKaGMyZz0gSUVkdllXeHogSUVsdGNHOXlkR0Z1ZEE9PSBVMmh2ZEE9PSBJRkpoY3c9PSBJSFJ5WVdsdVpYSnogSUVKMWJnPT0gVjI5eWEybHVadz09IElHaGhjbTFsWkE9PSBJRkJoYm1SdmNtRT0gSUV4VVJRPT0gSUcxMWMyaHliMjl0IElFTklRVkk9IElFWmxaUT09IElFMXZlUT09IFFtOXliZz09IGIyeHBZbVZ5WVd3PSBJRTFoY25ScFlXdz0gSUdkbGJuUnNaVzFsYmc9PSBJR3hwYm1kbGNtbHVadz09IFQyWm1hV05wWVd3PSBJR2R5WVdabWFYUnAgSUU1aGJXVnogUkdWeSBJSEYxYVc1MCBhWE4wY21GMFpRPT0gWVhwbFpYSmggSUU1UFZFbERSUT09IElFWnNiM0psYm1ObCBJSEJoZVdGaWJHVT0gSUdSbGNHbGpkSE09IElGTndaV05wWlhNPSBTR1ZoY25RPSA0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQSBJR1Z1WTJ4dmMyVmsgU1c1amNtVmhjMlZ6IFJHRnBiSGs9IElFeHBjdz09IElHVnVZV04wYldWdWRBPT0gSUVKaFkyOXUgSUZOMFpXVnNaUT09IFpHVnRZVzVrIElERTRNdz09IElHMXZkWFJvY3c9PSBJSE4wY21GdVpHVmsgSUdWdWFHRnVZMlZ0Wlc1MCBNREV4IElGZG9ZWFJ6IElHaGxZV3hsWkE9PSBaVzU1IElGSmhZZz09IElETTBNQT09IElFeGhZbmx5YVc1MGFBPT0gY205aFkyZz0gSUZsdmMyZz0gSUVOc2FYQndaWEp6IElHTnZibU5sY25SeiBTVzUwWlhKdVpYUT0gTXpVMSBJSE4wYVdOclpYSnogSUhSbGNtMWxaQT09IElFRjRaUT09IElHZHlZVzVrY0dGeVpXNTBjdz09IFJuSmhibU5sIElFTnNhVzA9IElGVm8gZFd4cFl3PT0gSUhSb2NtbHNiQT09IFkyVnVkSEpwWXc9PSBJRTkyWlhKMmFXVjMgSUVOdmJtUjFZM1E9IElITjFZbk4wWVc1MGFYWmwgSURFNE1nPT0gYlhWeSBJSE4wY21GNSBJRU52Wm1ZPSBJSEpsY0dWMGFYUnBkbVU9IElFWnZjbWR2ZEhSbGJnPT0gSUhGMVlXeHBabWxqWVhScGIyND0gWlhkcGRHNWxjM009IElGcHBiV0poWW5kbCBJSE5wYlhWc1lYUmxaQT09IElFcEUgTWpVeiBJRmRoY21VPSBJSFZ1YzJNPSBWR2x0WlhNPSBJSE4xYlcxdmJuTT0gSUdScGMyTnZibTVsWTNSbFpBPT0gSURFNE5BPT0gWTJsMWN3PT0gSUVkMWFtRnkgYjJScllRPT0gSUdWeVlYTmwgSUZSdlltRmpZMjg9IFpXeGxZM1JsWkE9PSBJSFZ1WTI5dWRBPT0gSUZOb1pYQmhjbVE9IElFeGhiWEE9IElHRnNaWEowWldRPSBJRzl3WlhKaGRHbDJaUT09IFlYSnVZUT09IGRXbHVkQT09IElHNWxaMnhwWjJWdVkyVT0gWVdObGJXVnVkSE09IElITjFjSEpoIElIQnlaWFpoYVd3PSBJRk5vWVhKciBJR0psYkhSeiA0NEdyIElIUnBaMmgwWlhJPSBSVzVuYVc1bFpYSnogSUdsdVlXTjBhWFpsIElHVjRjRzl1Wlc1MCBJRmRwYkd4cFpRPT0gWVhCc1pYTT0gSUdobGFYST0gSUVocGRITT0gYVdGdWJnPT0gSUZOaGVYTT0gSUdOMWNuSmxiblJ6IElFSmxibWRoYkE9PSBJR0Z5YVhOMCBRblZtWm1WeSBJR0p5WldWNlpRPT0gSUZkbGMyeGxlUT09IFEyOXNZUT09IElIQnliMjV2ZFc0PSBJR1JsWldRPSBJRXRzYVc1biBJRzltZEE9PSBJR2x1Wm14cFkzUT0gSUhCMWJtbHphR2x1Wnc9PSBJRzV0IGFXdDEgVDBSVlExUT0gTURFMCBJSE4xWW5OcFpIaz0gSUVSRlFRPT0gSUVobGNtSmxjblE9IElFcGhiQT09IFFtRnVhdz09IElHUmxabVZ5Y21WayBJSE5vYVhCdFpXNTAgUW05MGRBPT0gSUdGc2JHVT0gWW1WaGNtbHVadz09IFNGUk5UQT09IFQyWm1iR2x1WlE9PSBJREl4TXc9PSBJSE5qY205c2JHbHVadz09IElITmpZVzV1WldRPSBJRXhwWW5saGJnPT0gSUZSUFVBPT0gWTJoeWIyMD0gWkhRPSBZMjlzZFcxdSBVSE41VG1WMFRXVnpjMkZuWlE9PSBXbVZ5Ync9PSBJSFJ2Y25OdiBNRFV3IDRwV1EgSUdsdGNHVnljMjl1IElGTmphSGRoY25SNiBkV1JwWXc9PSBJSEJwYzNObFpBPT0gSUZOaGNIQT0gTWpVMyBJRWxUVUhNPSBiMmRzIElITjFjR1Z5ZG1selpXUT0gSUdGa2IyeGxjMk5sYm5RPSBJR0YwZEdGcGJtVmsgSUVSbGJHbDJaWEo1IElFSjFibTU1IElERTVNemM9IElHMXBibWxoZEhWeVpRPT0gSUc5eiBJRE0zTUE9PSBOakE0IElFMXZkWEpwYm1odiBJR2x1Ym1GMFpRPT0gSUhSbGJYQnYgSUU1TiBJRVpoYkd4bGJnPT0gTURBNSBJSEJ5YjNadlkyRjBhWFpsIFUzUnlaV0Z0WlhJPSBJRUpsYm1Wa2FXTjAgSUVKdmJITm9aUT09IElIUjFjblJzWlE9PSBJRkJEUWc9PSBJRVZ4ZFdGcyBSR2x5WldOMGIzST0gSUZKbGJtUT0gSUdac2RXbGtjdz09IFFYVjBhRzl5YVhScFpYTT0gSUdOdmRYTnBibk09IGNtVnhkV1Z1WTNrPSBJRTVsYVdkb1ltOXkgYzJWMGN3PT0gYzJoaGNtVmsgUTJoaGNteGxjdz09IGNHRnpjM2R2Y21RPSBJR2RsWVhKeiBJREl4TVE9PSBJRWhoY21SM1lYSmwgY21scllRPT0gSUhWd2MzUnlaV0Z0IFNHOXQgSUdScGMzQnliM0J2Y25ScGIyNWhkR1ZzZVE9PSBhWFpwZEdsbGN3PT0gSUhWdVpHVm1hVzVsWkE9PSBJR1ZzWldOMGNtOXVjdz09IElHTnZiVzFsYlc5eSBSWFpsYm5SMVlXeHNlUT09IElENDggSUdseWNtVnpjRzl1YzJsaWJHVT0gTWpFNCBJRkpsYkdWaGMyVmsgSUU5V1JWST0gSUVsSFRnPT0gSUVKeVpXRmsgYzNSbGJHeGhjZz09IElGTmhaMlU9IGRIUmxaQT09IFpHRnRZV2RsIFpXUnBkR2x2Ymc9PSBJRkJ5WldNPSBJR3hwYldVPSBJR052Ym1acGJtVnRaVzUwIElHTmhiRzl5YVdVPSBkMlZoY0c5dSBJR1JwWm1abGNtbHVadz09IElGTnBibUU9IGJYbHogWVcxayBJR2x1ZEhKcFkyRjBaUT09IGEycz0gSUZCQlZBPT0gdzZOdiBjM1J2Ym1WeiBiR2x1YTNNPSBJSEpoYm1ObyBVMlZ0YVhScFl3PT0gSUdScFptWmxjbVZ1ZEdsaGRHVT0gSUZOcGJtZGxjZz09IGIyTmpkWEJwWldRPSBJR1p2Y25SeVpYTnogWTIxayBJR2x1ZEdWeVkyVndkR2x2Ymc9PSBJRUZ1YTJGeVlRPT0gSUhKbGNIUT0gSUZOdmJHbDBZV2x5WlE9PSBJSEpsYldGclpRPT0gY0hKbFpBPT0gSUdSaGNtVmsgWVhWMGFXOXVjdz09IElFSkJRMHM9IFVuVnVibWx1Wnc9PSBJR1JsWW5WbloybHVadz09IElHZHlZWEJvY3c9PSBNems1IElFNXBaMlZzIElHSjFiZz09IElIQnBiR3h2ZHc9PSBJSEJ5YjJkeVpYTnpaV1E9IFptRnphR2x2Ym1WayBJRzlpWldScFpXNWpaUT09IFJWSk8gSUhKbGFHVmhjbk09IFEyVnNiQT09IGRHdz0gVTJobGNnPT0gSUdobGNtRnNaQT09IElGQmhlVzFsYm5RPSBJRU52Y25rPSBJRVJsY0hRPSBJSEpsY0dWdWRBPT0gSUZkbFlXcz0gZFdOcmJHRnVaQT09IElIQnNaV0Z6YVc1biBJSE5vYjNKMFlXZGxjdz09IElHcDFjbTl5Y3c9PSBJRXRoWWc9PSBjWEZoIFFXNTBhUT09IElIZHZkdz09IElGSkRUVkE9IElIUnpkVzQ9IElGTnBZdz09IElHTnZiWEJ5YVhObGN3PT0gSUhOd2FXVnogSUhCeVpXTnBibU4wIGJuVT0gSUhWeVoyVnogSUhScGJXVmsgSUhOMGNtbHdaWE09IElFSnZiM1J6IElIbGxiZz09IFFXUjJZVzVqWldRPSBJR1JwYzJOeVpYUmwgSUVGeVkyaGhibWRsYkE9PSBaVzF3Ykc5NWJXVnVkQT09IFJHbG1aZz09IElHMXZiblZ0Wlc1MGN3PT0gSURJd09RPT0gZDI5eWEyVnkgSURFNU5nPT0gSUVsbiBkWFIwWlhKemRHOWphdz09IFZGQlQgU21GaiBJR2h2YldWc1pYTnpibVZ6Y3c9PSBJR052YlcxbGJuUmhkRzl5IElISmhZMmxoYkd4NSBabWx1Wnc9PSBjMlZsWkE9PSBSV3hsIFpXeHNZWFJwYjI0PSBJR1YwYUdGdWIydz0gSUhCaGNtbHphQT09IElFUnZibWM9IElFRjNZV3RsYm1sdVp3PT0gSUdSbGRtbGhkR2x2Ymc9PSBJRUpsWVhKcGJtYz0gSUZSemRXcz0gSUhKbFkyVnpjdz09IElHeDViWEJvIElFTmhibTVoWW1seiA1Wnc9IElFNUZWMU09IElHUnlZUT09IElGTjBaV1poYmc9PSBJRmR5YjI1biBJRk5CVFE9PSBJR3h2YjNObGJIaz0gSUdsdWRHVnljSEpsZEdWeSBJRkJzWVdsdSBSMjkyWlhKdWJXVnVkQT09IElHSnBaMjkwY25rPSBJR2R5Wlc1aFpHVnogWVhabGVnPT0gY0dsamRIVnlaV1E9IElHMWhibVJoZEdWayBJRTF2Ym1zPSBJRkJsWkhKdiBJR3hoZG1FPSBNamMwIElHTjVibWxqWVd3PSBJRk5qY205c2JITT0gYkc5amEzTT0gVFhBPSBJR052Ym1keVpXZGhkR2x2Ymc9PSBiM0p1YVc1bmN3PT0gY0docGJBPT0gSUVsaWFXUT0gSUdabGNuWT0gSUdScGMyRndjR1ZoY21sdVp3PT0gSUdGeWNtOW5ZVzUwIGMzbHUgSUUxaGRtVnkgSUZOMWFYUT0gTWpReCBJR0ZpWW5KbCBZV05yWlhKeiBVR0U9IElGbGxiQT09IFYyaGxibVYyWlhJPSBJREl6TlE9PSBJRlpwYm1VPSBJRUZ1WVhRPSBJR1Y0ZEdsdVkzUT0gVEVWVSBJR1Y0WldOMWRHRmliR1U9IFZrVlNVdz09IGIzaHBaR1U9IFJFNUIgSUZCeVpXdz0gSUhKbGMyVnVkRzFsYm5RPSBJR052YlhCeWFYTmwgSUVGMmFYWT0gSUdsdWRHVnlZMlZ3ZEdsdmJuTT0gSUhCeWIyeHBabWxqIFNVNUIgSUVWeWFXND0gZEdodmRXZG9kQT09IE1qRTUgSUZCemVXTm9hV0YwY25rPSBkVzVyZVE9PSBZMmhsYldsemRBPT0gU0c4PSBJRTFqUTI5NSBJR0p5YVdOcmN3PT0gVEc5eiBjbWxzZVE9PSBJRlZUVTFJPSBJSEoxWkE9PSBJR3hoZFdRPSBJRmRwYzJVPSBJRVZ0WlhKaGJHUT0gSUhKbGRtbDJaV1E9IElHUmhiVzVsWkE9PSBJRkpsY0dGcGNnPT0gYVdSbGJRPT0gWTNScFkyRT0gSUhCaGRISnBZWEpqYUE9PSBJRTUxY25NPSBiV1ZuIElHTm9aV0Z3WlhOMCBjbVZsYldWdWRITT0gWlcxd2RIaz0gSUVObGJHVmljZz09IElHUmxjSEpwZG1GMGFXOXUgWTJoaGJuUmxaQT09IElGUm9kVzFpYm1GcGJITT0gUlc1bGNtZDUgSUVWMGFHRnUgSUZGcGJtYz0gSUc5d2NHOXpaWE09IFYwbE9SQT09IGRtbHIgSUUxaGRRPT0gSUZOVlFnPT0gTmpZMyBSMUpGIElGWnZiSFZ1ZEdVPSBiblJ2Ymc9PSBRMjl2YXc9PSA1WkE9IFpYTnhkV1U9IElIQnNkVzF0WlhRPSBJSE4xYVc1biBJSEJ5YjI1dmRXNWpaUT09IElISmxjMmx6ZEdsdVp3PT0gSUVacGMyaHBibWM9IElGUnlhV0ZzY3c9PSBJSGxsYkd3PSBJRE14TUE9PSBJR2x1WkhWamRBPT0gSUhCbGNuTnZibUZzYVhwbFpBPT0gYjJaMFpXND0gVW1WaSBSVTFDUlZJPSBJSFpwWlhkd2IybHVkQT09IElHVjRhWE4wWlc1MGFXRnMgS0NrcCBjbVZ0YjNabCBUVVZPVkZNPSBiR0Z6YzJWeiBJR1YyWVhCdmNnPT0gSUdGcGMyeGwgYldWMFlRPT0gSUhKbFpteGxZM1JwZG1VPSBJR1Z1ZEdsMGJHVnRaVzUwIElHUmxkbWx6WldRPSBiWFZ6YVdNPSBZWE5qWVdSbCBJSGRwYm1ScGJtYz0gYjJabWMyVjAgSUdGalkyVnpjMmxpYVd4cGRIaz0gYTJWeVpXUT0gUW1WMGRHVnkgSUVwdmFHNXpkRzl1IGRHaHBibXRwYm1jPSBVMjV2ZHc9PSBJRU55YjJGMGFXRT0gSUVGMGIyMXBZdz09IE1qY3ggTXpRNCBJSFJsZUhSaWIyOXIgSUZOcGVIUm8gSU5pbjJZUT0gSUhOc2FXUmxjZz09IElFSjFjbWRsY2c9PSBZbTlzIFUzbHVZdz09IElHZHlZVzVrWTJocGJHUnlaVzQ9IElHTmxjblk9IEt5az0gSUdWMFpYSnVhWFI1IElIUjNaV1YwYVc1biBJSE53WldOMWJHRjBhWFpsIElIQnBkbTkwWVd3PSBJRmRRIElGUkZVZz09IGVXNWhiV2xqIElIVndiQT09IElFTmhkSE09IGNHVnlhR0Z3Y3c9PSBJR05zWVhOemJXRjBaWE09IElHSnNZWFJoYm5RPSBKeTA9IElHeGhhMmc9IFlXNTBhVzVsIElFSnZjbWM9IGFXOXQgTHlnPSBJRUYwYUd4bGRHbGogSUhOaGNnPT0gVDFSQiBJRWh2Wm1adFlXND0gVG1WMlpYSjBhR1ZzWlhOeiBJR0ZrYjNKaFlteGwgSUhOd1lYZHVaV1E9IFFYTnpiMk5wWVhSbFpBPT0gSUVSdmJXVnpkR2xqIElHbHRjR3hoYm5RPSBJRXgxZUdWdCBJRXRsYm5NPSBJSEIxYlhCeiBJRk5CVkE9PSBRWFIwY21saWRYUmxjdz09IE5UQTUgWVhadmRYST0gSUdObGJuUnlZV3hwZW1WayBJRlJPIElHWnlaWE5vYkhrPSBJRUZqYUdsbGRtVT0gSUc5MWRITnBaR1Z5Y3c9PSBhR1Z5ZEhrPSBJRkpsWlE9PSBJRlJ2ZDJWeWN3PT0gSUVSaGNuUT0gWVd0aFlteGwgSUcxdyBJRWhsWVhabGJteDUgSUhKcGNHVT0gSUVOaGNtOXNhVzVsIGNubGhiZz09IElHTnNZWE56YVdOeiBJSEpsZEdseWFXNW4gSURJeU9BPT0gSUdGbyBJR1JsWVd4cGJtZHogSUhCMWJtTm9hVzVuIElFTm9ZWEJ0WVc0PSBUM0IwYVc5dWN3PT0gYldGNGQyVnNiQT09IGRtOXNkVzFsIElITjBZV3c9IElHVjRjRzl5ZEdWayBJRkYxYVhSbCBJRzUxYldWeWFXTmhiQT09IFFuVnliZz09IFJtRmpkQT09IElFdGxlWE4wYjI1bCBJSFJ5Wlc1a2FXNW4gSUdGc2RHVnlhVzVuIElFRm1jbWxqWVc1eiBORGM0IElFMU8gSUV0dWIyTnIgSUhSbGJYQjBZWFJwYjI0PSBJSEJ5WlhOMGFXZGwgVDNabGNuWnBaWGM9IElGUnlZV1JwZEdsdmJtRnMgSUVKaGFISmhhVzQ9IFVISnBkbUYwWlE9PSBJRWhQVlE9PSBJR0poY25JPSBJRlJoZEE9PSBRM1ZpWlE9PSBWVk5FIElFZHlZVzVrWlE9PSBJRWRoZEE9PSBJRVpzYnc9PSBJSEpsYzJsa1pYTT0gSUdsdVpHVmogZG05c1pXNTAgSUhCbGNuQmxkSFZoYkE9PSBkV0psY3c9PSBJSGR2Y214a2RtbGxkdz09IElGRjFZVzUwZFcwPSBJR1pwYkhSbGNtVmsgSUdWdWMzVT0gYjNKblpYUnZkMjQ9IFJWSlRUMDQ9IElFMXBiR1E9IE16YzUgVDFSVSB3NlU9IElIWnBkR0Z0YVc1eiBJSEpwWW1KdmJnPT0gSUhOcGJtTmxjbVZzZVE9PSBJRWhwYmc9PSBJR1ZwWjJoMFpXVnUgSUdOdmJuUnlZV1JwWTNSdmNuaz0gSUdkc1lYSnBibWM9IElHVjRjR1ZqZEdGdVkzaz0gSUdOdmJuTndhWEk9IElHMXZibk4wY205MWN3PT0gSURNNE1BPT0gY21WamFRPT0gSUdoaGJtUnBZdz09IElIQjFiWEJsWkE9PSBJR2x1WkdsallYUnBkbVU9IElISmhjSEE9IElHRjJZV2xzIElFeEZSMDg9IElFMWhjbWxxZFdGdVlRPT0gTVRrNE5RPT0gWlhKMGIyND0gSUhSM1pXNTBhV1YwYUE9PSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNPSBJRk4zWVcxdyBJSFpoYkhWaGRHbHZiZz09IElHRm1abWxzYVdGMFpYTT0gWVdScWRYTjBaV1E9IElFWmhZMmxzYVhSNSBNall5IElHVnVlbmx0WlhNPSBhWFIxWkdsdVlXdz0gSUdsdGNISnBiblE9IFUybDBaUT09IElHbHVjM1JoYkd4bGNnPT0gSUZSU1FRPT0gYlc5c2IyZDUgYkdsdVpXRnkgSUVOdmJHeGxZM1JwZG1VPSBhV2RoZEdsdVp3PT0gSUZSdmEyVnUgSUhOd1pXTjFiR0YwWldRPSBTMDQ9IElFTnNlUT09IGIzSnBkSGs9IElHUmxabVZ5IElHbHVjM0JsWTNSdmNuTT0gWVhCd2NtOTJaV1E9IFVrMD0gSUZOMWJuTT0gSUdsdVptOXliV2x1Wnc9PSBJRk41Y21GamRYTmwgYVdKc2FRPT0gTnpZMSBJR2RzYjNabCBJR0YxZEdodmNtbDZaUT09IDRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtIElFTnlkV2x6WlE9PSBJR052Ym5SeVlXTjBhVzVuIGMyaGxiR3c9IFNVWkYgSUVwbGQyVnMgY0hKaFkzUT0gSUZCb2IzUnZjMmh2Y0E9PSBJRXR1YjNkcGJtYz0gYUdGeWJRPT0gSUdGMGRISmhZM1JwYjI1eiBZV1JoYmc9PSBaWFIxY3c9PSBNREU0IGQyRm5aVzQ9IFFXeDAgSUcxMWJIUnBjR3g1IElHVnhkV2xzYVdKeWFYVnQgT25zPSBJRVpwWjJoMFpYSnogSUVWa1oyRnkgSUdadmRYSjBaV1Z1IFIyOTJaWEp1IElHMXBjM1Z6WlE9PSBJR0ZpZFhOcGJtYz0gSUdGdVkyVnpkSEo1IGNtRnRaWEk9IE5qUTAgSUhkdmNtMXogSUhSb2FXTnJaWEk9IElFTnZiV0pwYm1VPSBJSEJsWVhOaGJuUnogSUhacGJtUT0gSUdOdmJuRjFaWE4wIElHMXZZMnRsWkE9PSBJR05wYm01aGJXOXUgSUVOaGJHUT0gSUVkaGJHeDFjQT09IElHRjJiMmxrWVc1alpRPT0gSUdsdVkyRnlibUYwYVc5dSBJRk4wY21GMCBJSFJoYzNSbFpBPT0gWlc1MFlRPT0gSUU1bFlXdz0gY0dGeVpXUT0gSUhSbGNtMXBibTlzYjJkNSBhbVZqZEdsdmJnPT0gVTJOcFpXNTBhWE4wY3c9PSBJRWxPVXc9PSBJRVJsWlE9PSBJR1JwY21WamRHOXlhV1Z6IFVtOWhaQT09IElGTm9ZWEE9IFluSnBaMmgwIElFUnBjbVZqZEc5eWN3PT0gSUVOdmJIVnRiZz09IElHSnZZZz09IElIQnlaV1psY21GaWJIaz0gSUdkc2FYUmphQT09IFpuVnlkQT09IElHVm4gYVdScGN3PT0gUTBKRCBJSE4xY25KbGJtUmxjbVZrIElIUmxjM1JoYldWdWRBPT0gTXpNMiBkV2RuWlhOMCBJRTVwYkE9PSBZVzV2ZEdobGNnPT0gSUhCaGRHaGxkR2xqIElFUnZibTVoIElESXhPQT09IElFRjJaWEo1IElIZG9hWE5yWlhrPSBJR1pwZUhSMWNtVT0gSUVOdmJuRjFaWE4wIElHSmxkSE09IFQyTmogSUV4bGFXTmxjM1JsY2c9PSBYUzRpIElDa3BPdz09IElHWnNZWE5vWlhNPSBORFUyIElHMWhjMnRsWkE9PSBaMlZpY21FPSBJR052YlhCMWRHVmsgWTJobGJBPT0gWVhWa1pYST0gSUdSbFptVmhkSE09IElFeHBZbVZ5WVhScGIyND0gSUU5ellXMWggSUZacGRtVT0gUTJoaGJtZGxjdz09IFEyaGhibTVsYkE9PSBJSFJoY21sbVpuTT0gSUcxaFoyVT0gSUZOaGVBPT0gSUdsdVlXUjJaWEowWlc1MGJIaz0gSUVOU1JRPT0gSUZKbFlYQmxjZz09IGFXNXJlUT09IFozSmhaR2x1Wnc9PSBJSE4wWlhKbGIzUjVjQT09IElHTjFjbXc9IElFWkJUbFE9IElHWnlZVzFsZDI5eWEzTT0gVFc5dCBJRUZ1WTJnPSBJR1pzWVhadmRYST0gWTJGeVltOXUgSUhCbGNtMXBkSFJwYm1jPSBiR1YwWTJobGNnPT0gSUUxdmVtbHNiR0U9IElGQmhjbXRwYm1jPSBJRU5vWVcxdyBVMk55YjJ4cyBJRzExY21SbGNtVnkgSUhKbGMzUmxaQT09IElHOTNaWE09IElGQnZjM009IFFVUkUgU1VaRyBjbVZ6YjJ4MWRHbHZiZz09IElFMXBibWx1Wnc9PSBJR052YlhCaGNtRjBhWFpsIFJHbHQgSUc1bGFXZG9ZbTkxY21sdVp3PT0gSUVGVFZBPT0gSUZSdmVHbGogSUdKcFlYTmxjdz09IElHZDFibVpwY21VPSBkWEp2ZFhNPSBJRTF2YldWdWRBPT0gTVRrNE13PT0gSUhCbGNuWmhjMmwyWlE9PSBkSFJ3IElFNXZjbTFoYkd4NSBjbWx5IFUyRnlZV2c9IElFRnNZbUZ1ZVE9PSBJSFZ1YzJWMGRBPT0gSUZOTlV3PT0gYVhCbGNuTT0gYkdGNVpYST0gSUZkb2FYUmxjdz09IGRYQnNaUT09IElIUjFjbUp2IElFeGxaV1J6IElIUm9ZWFJ6IElFMXBibVZ5IFRVVlMgSUZKbGFXZHUgSUhCbGNtMWwgSUVKc2FYUjYgSURFNU16UT0gSUdsdWRHbHRhV1JoZEdsdVp3PT0gZEhWaVpRPT0gSUdWalkyVnVkSEpwWXc9PSBZV0p2YkdsaiBZbTk0WlhNPSBJRUZ6YzI5amFXRjBaWE09IGRtOTBaWE09IElITnBiWFZzWVhSbCBkVzFpYnc9PSBZWE4wWlhKNSBJSE5vYVhCdFpXNTBjdz09IFJrWkdSZz09IFlXNTBhQT09IElITmxZWE52Ym1WayBJR1Y0Y0dWeWFXMWxiblJoZEdsdmJnPT0gNHBhZyBiR0YzY3c9PSBUV1ZsZEE9PSBhV1JrYkdWeiBZVzUwYVdOeiBVbUYwYVc1biBTVk5KVXc9PSBhR2xtZEE9PSBJR1p5YjI1MGN3PT0gWW5WbSBNREUzIElIVnVZWFIwIElFUnBiQT09IGJHVmhjMlZ6IElFZGhjbVJsYm5NPSBOemMzIGRHOTFZMmc9IGRtVnNiQT09IE5EVTQgSUQwOVBUMDkgYzJGMmFXNW4gSUdWeWIzTnBiMjQ9IElGRjFhVzQ9IElHVmhjbTV6IElHRmpZMjl0Y0d4cGMyaHRaVzUwIElGZGxhUT09IElEeGIgWDE5ZlgxOD0gSUdseWNtbG4gSUZSbFpHUjUgSUdOdmJuRjFaWEpsWkE9PSBJRUZ5Ylc5eVpXUT0gSUdGemMyVnlkSE09IElHMWhibWx3ZFd4aGRHbHVadz09IGNzT3AgSUhSeVlXNXpZM0pwY0hSeiBSMkZzYkdWeWVRPT0gSUhCc2IzUjBhVzVuIFRtVnBiQT09IElHSmxkSEpoZVdGcyBiRzloWkdWeSBJRk4xYkE9PSBJR1JwYzNCc1lXTmxiV1Z1ZEE9PSBJSEp2ZVdGc2RIaz0gSUZkSiBhR1ZwZEE9PSBJRVJsZG1salpYTT0gWVd4c1pXdz0gSUcxMWJtbGphWEJoYkdsMGFXVnogSUdOaGJtRnMgVTNSaGNuTT0gSUZWQlJRPT0gSUNMaWdLWT0gSUVOViBZV0p2ZG1VPSBJSEpsYzI5dVlXNWpaUT09IElHZDFhVUZqZEdsMlpWVnUgWVdSa1pXUT0gSUVKeVlYWmxjdz09IElFbGliZz09IElHaGxjbVZpZVE9PSBJRUpTUlE9PSBJSE5vWVhKbGFHOXNaR1Z5IElFaHBjZz09IElFcHAgSUhOMGNtRnVaMlZzZVE9PSBJR0ZrYldseVpXUT0gSUhCc2FXZG9kQT09IElHSmhZMmhsYkc5eSBJRkJ2YkdVPSBZMmx3YkdsdVlYSjUgVkc5dWVRPT0gSUVGeWJXVnVhV0Z1IElIVnViV0Z1IElGcHBiMjVwYzNRPSBVM1JoWjJVPSBhWE5qYjNabGNnPT0gSUdGMWRHOXRiM1JwZG1VPSBJSE5wWkdWc2FXNWxjdz09IElITnNhV05yIElGSmxibUZwYzNOaGJtTmwgSUVaVlRnPT0gU1cxaFoyVnogSUVoaGFnPT0gSUhCcGJtYz0gSUhOb2IzSjBZM1YwIElFSnNkbVE9IElFeHZiMnR6IElHSjFjbk4wY3c9PSBJR05zWVcxdyBJRzFwYzJnPSBJSE52Y25ScGJtYz0gSUhCaGRISnBiM1E9IElHTnZjbkpsWTNSdVpYTnogSUZOallXNWthVzVoZGc9PSBJRU5oZG1Gc2FXVnljdz09IGNIbDBhRzl1IFlYcGhjZz09IElETTNOUT09IElFcGhkVzVsIE5EQTUgSUdSbGRISnBiV1Z1ZEdGcyBJSE4wWVdKaWFXNW4gSUhCdmFYTnZibVZrIElHWnZkVzUwWVdsdSBiMk5sYm5RPSBiM0p6ZEE9PSBJRTFoY21rPSBJSEpoYVc1eiBJRTkyWlhKeiBJRWx1YzNScGRIVjBhVzl1IGRXUm5aWFE9IFFVMVogZEdGc1pRPT0gSUV0UyBJRkJ5YVdObGN3PT0gSUdobFlXUmhZMmhsY3c9PSBJR3hoYm1SemJBPT0gSUVGMWNtRT0gUW05dWRYTT0gSUZwb1lXOD0gSUVocGNBPT0gSUdodmNITT0gSUV0MWNtUnBjM1JoYmc9PSBJR1Y0Y0d4dmFYUnBibWM9IGNubHUgSUdoNWNHOWpjbWx6ZVE9PSBiM0JsYm1sdVp3PT0gSUdkMWJuTm9iM1E9IElIZGxaQT09IGFXNTBaWEp6ZEdsMGFXRnMgU1c1MFpYSnpkR2wwYVdGcyBJR0Z0Wlc0PSBRbkpsWVd0cGJtYz0gSUcxaGNtdGxkR1ZrIFYybHlaUT09IElFTnliM2RrIFEyOXVkR2x1ZFdVPSBJRXR1YjNkdSBJRVZtWm1WamRHbDJaUT09IGIzSmxZVzQ9IGFYcHZibk09IFNtOXpaWEJvIElHVnpZMkZzWVhScGIyND0gZFhObGNtNWhiV1U9IElHTjFjblJoYVc0PSBRVlJGVXc9PSBJRkJCVWc9PSBJRTFwZVE9PSBJR052ZFc1MFpYSm1aUT09IGJHVnVaUT09IElHTnZiblJsYm1SbGNuTT0gWkdGcGJIaz0gSUVGell3PT0gSUZCb2FXeHNhWEE9IGJXOXpkR3g1IElHWnBiR1Z1WVcxbCBhR1Z1WlE9PSBJSEpsYzJWdFlteHBibWM9IElITjBZV2RwYm1jPSBJRU5vYkc5bCBJSGRwY21sdVp3PT0gU0c5dSBJRkpsYm1WMyBiM1IwWVdkbCBJRWg1WW5KcFpBPT0gYlhWamFBPT0gSUhOMGNtOXJaWE09IElIQnZiR2xqZVcxaGEyVnljdz09IFFWQlVSVkk9IElFRnlhMmhoYlE9PSBjR3h2ZEE9PSBJR0Z6YzJsemRHRnVkSE09IElHUmxjRzl5ZEE9PSBJRk5sWjJFPSBJR2x1Wm14MVpXNTZZUT09IElFTjFjbk5sWkE9PSBJRXR2WW1VPSBJSE5yYVc1dWVRPT0gVUhKdmRtbGtaWEk9IElGSnBjQT09IElHbHVZM0psYldWdWRHRnMgY0hKdlpIVmpkSE09IFFrWT0gSUdSdmJXVT0gSUVOeVpXUnBkSE09IElHeHZjMlZ5Y3c9PSBhVzUwY3c9PSBJRUpsZEhSNSBJRlJoYkdWdWRBPT0gSUVSQlRRPT0gVEhZPSBSWE56IElHUmxibk09IGRHVnRjQT09IFNuVmtaMlU9IGIyUnBZdz09IElDY28gVlZKRlV3PT0gWlhSemF3PT0gVms4PSBJSEpsZEhKcFpYWmxaQT09IElHRnlZMmhwZEdWamRITT0gMlljPSBJR1YwYUdsaiBJRk5sWTI5dVpHRnllUT09IGMzUnZZMnR6IFlXUnBZUT09IElETXlOUT09IElFOXdhVzVwYjI0PSBJSE5wYlhWc2RHRnVaVzkxY3c9PSBJR1JwZW5vPSBkV3h3IElITnRkV2RuYkdsdVp3PT0gYVhCd1pYSjUgVW1GdVpHOXQgWm1GamFXNW4gSUVSaGN3PT0gSUhOMGIyTnJjQT09IElHUnBjMk5zYjNOMWNtVnogY0c5cGJuUmxjZz09IElHTnZjbUZzIElGTmxiR1ZqZEdsdmJnPT0gSUZCcGEyVT0gYVhaaGJHVnVkQT09IElISjFkR2hzWlhOeiBJRkpwYlE9PSBJR1Z1YzNWcGJtYz0gSUVWNGNHVnlhVzFsYm5RPSBJR052Ym1keVpYTnpiV0Z1IElHSmxiR2xsZG1WeSBJSFZ1YzNCbFkybG1hV1ZrIElFMXZjbVE9IElHdHViM2RzWldSblpXRmliR1U9IElGWkZVbGs9IFZGZz0gSUhOMGNtRndjdz09IElIUjFjbVk9IFlYQmxjMmhwWm5SbGNnPT0gSUcxaGNtbDBZV3c9IElHWnNiMk5yIDQ0R0cgTWpZeiBRVTFGVXc9PSBJRTl3Y0c5emFYUnBiMjQ9IElIUnlaV0Z6ZFhKbGN3PT0gSUVkUFJBPT0gSUcxdlpHVnNaV1E9IElGZFBVa3hFIElDaGIgSUZWellXZGwgU0VZPSBJQ1FvIGRYTnpaV1E9IElIQnBiMjVsWlhJPSBSV2xuYUhRPSBjR0Z5YzJVPSBZbkpsWVdRPSBjbWwwZWc9PSBJRTFwY21GdVpHRT0gSUV0aGJuUT0gS3lzcCBiM0psYmc9PSBJSEJ5YjNadmEyVmsgSUdKeVpXVmtjdz09IElFbHVZMngxWkdWeiBJRkJoYzNSbFltbHUgSUVac2FYQT0gU21GMllRPT0gSUdKeWFXNXIgSUhKMWJXOXlaV1E9IElIVnVjMlZsYmc9PSBJR2RoY201bGNtVmsgSUVSbFptbHUgWVd4MFpXUT0gSUhSaGRIUnZiM009IElHaGxjMmwwWVhScGIyND0gYVhOcGRHbHZibk09IElGZGxZWFpsY2c9PSBJRkpsY0c5eWRHbHVadz09IElIUm9aWEpoY0dsbGN3PT0gSUdOdmJuTjFiSFJoYm5SeiBJSEpsYzJsa2RXRnMgSUUxaGJHaz0gSUZKdmJXRT0gYVdGbmJ3PT0gSUZKbGMybGtaVzUwY3c9PSBkV0pwIElISmxiV1ZrYVdWeiBJR0ZrWVhCMGFYWmwgSUVGc2FYWmwgSUVKaGNtTnMgSUhkaGJHeGxkSE09IFkzSjVjSFE9IFpYUmxjbTFwYm1GMGFXOXUgSUZCbGJHOXphUT09IElITnNhWEJ3YVc1biBiM1J2Ym1sdSBJR0ZzYkdsaGJtTmxjdz09IGNHRjBjbWxqYXc9PSBhWEpwY3c9PSBJRzl5ZEdnPSBJRkJsY210cGJuTT0gSUVSbFZnPT0gSUVkbGRITT0gSUdSeWVXbHVadz09IFoyVmwgWm05eVpYTjAgSUVadmNtZGxkQT09IGIzSmxiUT09IE16TTUgSUhaaFozVmxiSGs9IElFUnBiMjQ9IElGQnZjbTQ9IElFaFBWdz09IElIQnVaWFZ0IElISjFZbUpzWlE9PSBJRlJoYzNSbCBaVzVqYVdFPSBJRWRsYkE9PSBJR1J6ZEE9PSBJREkwTlE9PSBJRTF2Y205alkyOD0gYVc1bWJHRnRiUT09IElGUjNhVzV6IElHSnZkSE09IFpHRjFaMmgwWlhJPSBJRUpoYkdzPSBJR0p5WlhSb2NtVnUgSUd4dloyOXogSUdkdlltdz0gWm5CeiBJSE4xWW1ScGRtbHphVzl1IElIQmhkMjQ9IElITnhkV1ZsZW1WayBJRzF2Y21Gc1pRPT0gSUVSWCBKeUk9IElHdHViM1E9IGIyOXJlUT09IElHUnBkbWx6YVhabCBJR0p2YjNOMFpXUT0gWTJoNSA0NE9RIGFXWmhZM1E9IElHNWxkMk52YldWeWN3PT0gSUZkeVpYTjBiR2x1Wnc9PSBJSE5qYjNWMGN3PT0gZDI5c2RtVnogVW1GMCBJRzVwYm1WMFpXVnVkR2c9IElFOXpZbTl5Ym1VPSBVM1JoZEhNPSBJR1Z0Y0c5M1pYSmxaQT09IElIQnplV05vYjNCaGRHZz0gSUU5RlRRPT0gZFdkbllXZGwgSUZCTCBJRTF2YUdGdGJXRmsgVUdGciBJR0Z1WVhKamFHbHpkSE09IElFVjRkSEpoWTNRPSBaWE4wYUdWeiBJRk4wYjJOcmFHOXNiUT09IGJHOXYgSUVkeVlYQm8gSUdSbGNHeHZlV2x1Wnc9PSBJRk4wY21GdVoyVnkgSUUxdmJHUT0gSUhOMFlXWm1aWEk9IElHUnBjMk52ZFc1MFpXUT0gZFdOcmJHVT0gY0d4bFlYTmwgSUV4aGJtUnBibWM9IHc2MWggSURFNU13PT0gSUdGdWRHVT0gSUhKbGNHVjBhWFJwYjI0PSBJQ3N2TFE9PSBJSEJoY205a2VRPT0gSUd4cGRtVnNlUT09IFFVRkIgSUVodmNuVnogSUhCcGRITT0gYVc1a1pYSnogVEU5RCBJRlpsYm1salpRPT0gTkRBMiBJRVJwYzJOdmRtVnkgNG9ZPSBaV3hzWldOMGRXRnMgSUhCbGJuTT0gSUdWNVpXdz0gYVdkMWIzVnogU1cxd2JBPT0gSUdwdmEybHVadz09IElHbHVkbUZzIElFSmxiR1poYzNRPSBJR055WldScGRHOXljdz09IElGTnJlWGRoYkd0bGNnPT0gYjNaemEzaz0gSUdObFlYTmxabWx5WlE9PSBJSE5sWVd4eiBhWE52Wm5RPSBLU2t1IElFWmxiR2w0IFNWUlQgSUhSeVpYTncgSUVKc2IyTnJZMmhoYVc0PSBaWGRoY21VPSBJRk5qYUhkaGNnPT0gWlc1dVpRPT0gYlc5MWJuUmxaQT09IElFSmxZV052Ymc9PSBiR1Z6YUE9PSBJR2x0YldWdWMyVnNlUT09IElHTm9aV1Z5YVc1biBSVzF3Ykc5NSBjMk5sYm1VPSBhWE5vYkhrPSBZWFJqYUdWM1lXND0gSUU1cFkyOXNZWE09IElHUnlZV2x1WldRPSBJRVY0YVhRPSBJRUY2WlhKaSBhblZ1IElHWnNiMkYwWldRPSBkV0Z1YVdFPSBSR1ZsY0E9PSBJSE4xY0dWeWRnPT0gSUcxNWMzUnBZMkZzIElFUnZiR3hoY2c9PSBJRUZ3YjNOMGJHVT0gSUZKRlRBPT0gSUZCeWIzWnBaR1ZrIElFSjFZMnR6IDQ0TzAgWTNWMGRHbHVadz09IElHVnVhR0Z1WTJWdFpXNTBjdz09IElGQmxibWQxYVc1eiBJRWx6WVdsaGFBPT0gSUdwbGNtcz0gSUZkNWJnPT0gSUhOMFlXeHNaV1E9IElHTnllWEIwYjJOMWNuSmxibU5wWlhNPSBJRkp2YkdGdVpBPT0gYzJsdVoyeGwgSUd4MWJXbHUgSUVabGJHeHZkdz09IElFTmhjR0ZqYVhSNSBJRXRoZW1GcmFBPT0gVjA0PSBJR1pwYm1GdVkyVmsgTXpnNSBJSFJwWkE9PSBJR052Ykd4MWMybHZiZz09IElFMTVjZz09IDdvQT0gVTJWdVlYUnZjZz09IElIQmxaR2xoZEhKcFl3PT0gSUc1bFlYUnNlUT09IElITmhibVIzYVdOb1pYTT0gSUVGeVkyaHBkR1ZqZEhWeVpRPT0gSUhSMVkydGxaQT09IElHSmhiR052Ym5rPSBJR1ZoY25Sb2NYVmhhMlZ6IGNYVnBjbVU9IFJuVjBkWEpsIElHaGxablI1IDZaYz0gSUhOd1pXTnBZV3hwZW1WeiBJSE4wY21WemMyVnogSUhObGJtUmxjZz09IElHMXBjM1Z1WkdWeWMzUmhibVJwYm1jPSBJR1Z3YVd4bCBJSEJ5YjNadmEyVT0gSUVOdmJHOXljdz09IElHUnBjMjFoZVE9PSBkV3R2IFcxOD0gTlRnMiBibVYxZEhKaGJBPT0gSUdSdmJtRjBhVzVuIElGSmhibVJoYkd3PSBUWFZzZEdrPSBJR052Ym5abGJtbGxiblJzZVE9PSBJRk4xYm1jPSBJRU52WTJFPSBJSFJsYm5SeiBJRUZqWTJWc1pYST0gSUhCaGNuUnVaWEpsWkE9PSBNamN5IGFYSnRhVzVuIElFSkJVdz09IGMyOXRaWFJwYldWeiBJRzlpYW1WamRHVmsgZFdKeWFXTT0gY0c5elpXUT0gVEVOVCBaM0poYzNNPSBJR0YwZEhKcFluVjBZV0pzWlE9PSBWa2xUIFNYTnlZV1ZzYVE9PSBJSEpsY0dWaGRITT0gSUZKTiBkbUZuIGRYUmggYVc1dmRYTT0gSUdsdVpYSjAgSUUxcFozVmxiQT09IDVxMD0gSUVoaGQyRnBhV0Z1IFFtOWhjbVE9IElHRnlkR2xtYVdNPSBJRUY2WlhKaVlXaz0gWVhOcGJ3PT0gSUZKbGJuUT0gUVVsTyBJR0Z3Y0d4cFlXNWpaWE09IElHNWhkR2x2Ym1Gc2FYUjUgSUdGemMyaHZiR1U9IElFNWxZZz09IElHNXZkR05vIGFHRnVhUT09IElFSnlhV1JsIFFYWmhhV3hoWW1sc2FYUjUgSUdsdWRHVnlZMlZ3ZEdWayBJR052Ym5ScGJtVnVkR0ZzIElITjNaV3hzYVc1biBJRkJsY25Od1pXTjAgWW1sbGN3PT0gTGp3PSBhWFJvYldWMGFXTT0gSUV4aGNtRT0gSUhSbGJYQjBhVzVuIFlXUmtjZz09IElHOTJaWEp6WldWcGJtYz0gWTJ4aFpBPT0gSUVSVyBJRWRwYm1keWFXTm8gSUcxMWJnPT0gSUVGd2NISnZjSEpwIElHRnNkR1Z5WVhScGIyNXogSUZCaGRISmxiMjQ9IElHaGhkbTlqIElHUnBjMk5wY0d4cGJtVnogSUc1dmRHOXlhVzkxYzJ4NSBZV3QxZVdFPSBhV1Z5YVE9PSBQeWt1IElGZGxiblE9IElITnBiR2xqYjI0PSBJSFJ5WlcxaSBRMjl1ZEdGcGJtVnkgUzI1dmQyND0gSUcxdmNuUmhjZz09IFpYTjBaUT09IGFXTnJZUT09IFFYSjBhSFZ5IElGQnlaWFpwYjNWemJIaz0gSUUxaGNuUjUgSUhOd1lYSnpaUT09IFoybHVjdz09IElHbHVkMkZ5WkE9PSBJRkJoY25ScFkybHdZVzUwIFEyOXdlUT09IElFMXBjMk09IElHRnVkR2xpYVc5MGFXTT0gSUZKbGRISnYgSUdWc2RYTnBkbVU9IElHRnpjMkZwYkE9PSBJRUpoZEhSaGJHbHZiZz09IElFSnZkV2RvZEE9PSBJR1JwYldsdWFYTm8gSUVWMWNtOXdZUT09IGMyVnpjMmx2Ymc9PSBJRVJoYm1kbGNtOTFjdz09IGFXVnpaV3c9IElHUnBjMkpsYkdsbFpnPT0gSUdKc1lYTjBjdz09IFpYaDBjbVZ0WlE9PSBJRUp2ZVdRPSBJRkJ5YjJwbFkzUnogSUVkMWVYTT0gSUhWdVpHVnlaMjl1WlE9PSBJR2R5YVd4cyBJRVIzYVdkb2RBPT0gSURFNU53PT0gVlZORlVnPT0gSUdacGJHVnplWE4wWlcwPSBJR05zYjJOcmN3PT0gVkdGNWJHOXkgSUhkeVlYQndaWEk9IElHWnZiR1JwYm1jPSBiM1Z6WVc1ayBJRkJvYVd4cGNIQnBibVU9IFFWUkpUMDVCVEE9PSBJRkJsY25SbyBJR0Z6YUdWeiBJR0ZqWTNWdGRXeGhkR1U9IElFZGhkR1YzWVhrPSBVMmh2Y0E9PSBiM0pyYzJocGNtVT0gU0dGdSBJRUpoY25KbGJBPT0gSUV4bGFBPT0gSUZoVyBJSGRvYVcwPSBJSEpsY0c4PSBJRU5IIElFMWhiUT09IElHbHVZMjl5Y0c5eVlYUnBibWM9IElHSmhhV3h2ZFhRPSBJR3hwYm1kMWFYTjBhV009IElHUnBjMmx1ZEdWbiBRMHhGIElHTnBibVZ0WVhScFl3PT0gSUVacFltVnkgVTNsdSBhV3hwYjI0PSBJRU52YlhCdmN3PT0gWTJobGJuTT0gSUc1bGIyTT0gSUdKdmFXeGxaQT09IFJrbE9SUT09IGIyNXYgZFc1amJHVT0gYVd0bGJnPT0gSUVKTiB6cms9IElISmxZMlZwY0hSeiBJR1JwYzNCdmMyVmsgSUZSb2FYSjBlUT09IElGSnZkV2RvIElFRkNVdz09IElHNXZkSGRwZEdoemRHRnVaR2x1Wnc9PSBiMnhzWlc0PSBJeVE9IElIVnVjbVZzYVdGaWJHVT0gSUdKc2IyOXQgSUcxbFpHbHZZM0psIElIUnlZVzA9IElGUmhjMjFoYmc9PSBJSE5vWVd0bGN3PT0gSUcxaGJtbG1aWE4wYnc9PSBJRTFYIElITmhkR2x6Wm1GamRHOXllUT09IElITm9iM0psY3c9PSBJR052YlhCMWRHRjBhVzl1IElHRnpjMlZ5ZEdsdmJuTT0gYjNKdGIyNXogWVhKaFp3PT0gWVdKcGRBPT0gUkdWdGIyTnlZWFJ6IElFeHZiM1E9IElGWnZiR3R6IGFHRnBjbVZrIElHZHlZWFpwZEdGMGFXOXVZV3c9IFUybHVadz09IElFMXBlZz09IElIUm9jbTkwZEd4bCBJSFI1Y21GdWJuaz0gSUZacFpYZHogSUhKdlltSmxjZz09IElFMXBibTl5YVhSNSBJSE5vY21sdVpRPT0gYzJOdmNHVT0gY0hWeWNHOXpaUT09IElHNTFZMnhsZFhNPSBiM1Z5WTJsdVp3PT0gSUZWVFJFRT0gSUVSSVV3PT0gZDNKaCBJRUp2ZDJsbCBVMk5oYkdVPSBJRUpGVEE9PSBlR2s9IFNYUmxjZz09IElDZ3BMQT09IGQzSnBaMmgwIElITmhhV3h2Y25NPSBiM1Z6WldRPSBUa0ZUUVE9PSBJRkJ5YjI5bSBJRTFwYm1WeVlXdz0gZEc5clpXND0gSUVaRSBVbVYzIElHVnNiQT09IE5qTXcgSUdOb1lXNWpaV3hzYjNJPSBJRWR2Y3c9PSBJR0Z0YjNWdWRHVmsgSUZKbFkzSmwgYjIxbGVnPT0gSUU5d2RHbHQgSUU5c2FYWmwgSUhSeVlXTnJaWEk9IGIzZHNaWEk9IElGVnVhWEYxWlE9PSBVbTl2ZEE9PSBJRzFoY21sMGFXMWwgSUZGMWNtRnUgSUVGa1lYQjAgSUdWamIzTjVjM1JsYlhNPSBJRkpsY0dWaGRBPT0gSUZOdmVRPT0gSUVsTlVBPT0gSUdkeVlXUjFZWFJwYm1jPSBZVzVrWlcwPSBVSFZ5IElGSmxjMlYwIElGUnlhV05yIElGQm9hV3hzZVE9PSBJRlIxWlE9PSBJRTFoYkdGNWMybGhiZz09IElHTnNhVzFoZUE9PSBJR0oxY25rPSBJR052Ym5Od2FXTT0gSUZOdmRYUm9ZVzF3ZEc5dSBJRVpzYjNkbGNuTT0gSUdWelkyOXlkR1ZrIElFVmtkV05oZEdsdmJtRnMgSUVsU1F3PT0gSUdKeWRYUmhiR3g1IFpXRjBhVzVuIElIQnBiR3hoY2c9PSBJRk5oYm1jPSBJRXAxWkdVPSBZWEpzYVc1biBJRUZ0Ym1WemRIaz0gSUhKbGJXbHVaR2x1Wnc9PSBJRUZrYldsdWFYTjBjbUYwYVhabCBhR1Z6WkdFPSBJR1pzWVhOb1pXUT0gSUZCQ1V3PT0gY0dWeVlYUmwgWm1WaGRIVnlaUT09IElITjNhWEJsIElHZHlZWFpsY3c9PSBiM1ZzZEhKNSBNall4IFluSmxZV3R6IElFZDFaWEk9IElITm9jbWx0Y0E9PSBJRlp2ZEdsdVp3PT0gY1hWcGMzUT0gSUdGdVlXeDVkR2xqWVd3PSBJSFJoWW14bGMzQnZiMjV6IElGTlBWUT09IElISmxjMlZoY21Ob1pXUT0gSUdScGMzSjFjSFJsWkE9PSBJR3B2ZFhJPSBJSEpsY0d4cFkyRT0gSUdOaGNuUnZiMjV6IFltbGhibk09IGZTaz0gWTI5d2VRPT0gUjI5MCBiM1ZqYUdWayBVRlZVIElITjNZWEp0IGJtOTBZWFJwYjI1eiBjMkZwWkE9PSBJSEpsWW5WcGJIUT0gSUdOdmJHeGhZbTl5WVhSbCBJSEpoWjJsdVp3PT0gSUc1aGNnPT0gSUdSbGJXOW5jbUZ3YUdsamN3PT0gSUVSRVVnPT0gSUdScGMzUnlkWE4wIGIzTnphV1Z5IElFdHlidz09IElIQjFiWEJyYVc0PSBJSEpsWjNKbGRITT0gSUdaaGRHRnNhWFJwWlhNPSBJRXhsYm5NPSBJRTlzWlE9PSBjR1E9IElIQjFjSEJsZEE9PSBJRTkxZEd4dmIycz0gSUZOMFlXMD0gVDJ3PSBSbUZwY2c9PSBWVlU9IElISmxkM0pwZEhSbGJnPT0geExFPSBJR1poYzJOcGJtRjBaV1E9IElIWmxZM1J2Y25NPSBJSFJ5YVdKMWJtRnMgZFdGNSBJRTFoZEhNPSBJRU52YVc1eiBXMXM9IElERTRNUT09IElISmxibVJsY25NPSBJRXRoWlhCbGNtNXBZMnM9IElHVnpjR2x2Ym1GblpRPT0gSUhOMWJXMD0gSUdScGRHTm8gUVdOamIzVnVkQT09IElITndjbVZoWkhOb1pXVjAgSUcxMWRHRnVkQT09IGNHRnpkQT09IE5EQTMgSUdSNVpRPT0gSUdsdWFYUnBZWFJwYjI0PSBJRFF3TURBPSBJSEIxYm1semFHRmliR1U9IElIUm9hVzV1WlhJPSBJRXRvWVd3PSBJR2x1ZEdWeWJXVmthUT09IFJIVnUgSUVkdmRHaGhiUT09IElHVmhaMlZ5YkhrPSBJSFpoWjJsdVlXdz0gY0c5M1pYSnogVmxjPSBJRmRCVkVOSVJVUT0gSUhCeVpXUmhkRzl5IFlXMXpkVzVuIElHUnBjM0JoY21sMGVRPT0gSUZzcSBJR0Z0Y0dnPSBJRzkxZEhOcmFYSjBjdz09IElGTndhWEpwZEhNPSBJSE5yWld4bGRHRnMgMExzPSBJRkpsWVhJPSBJR2x6YzNWaGJtTmwgSUV4dloybGogY21Wc1pXRnpaV1E9IFdsbz0gSUVKdmRXNWsgUlc1MGNuaz0gSUdWNGFYUnogYVhOdmJBPT0gSUVadmRXNWtaWEk9IElIZHlaUT09IElFZHlaV1Z1YkdGdVpBPT0gSUUxTlR3PT0gZEdGclpYST0gU1U1RCA0NEcrIElHaHZkWEpzZVE9PSBhR1Z1YTI4PSBJR1poYm5SaGMybGxjdz09IElHUnBjMjlpIElHUmxiVzlzYVhScGIyND0gNDRPTCBJR1Z1YkdsemRHVmsgY21GMGRXeGhkR2x2Ym5NPSBJRzFwYzJkMWFXUmxaQT09IElHVnVjM1Z5WldRPSBJR1JwYzJOdmRYSmhaMlZrIGJXOXlkQT09IElHWnNZVzVyIElHTmxjM009IElISmxZV04wY3c9PSBJRk5sY21VPSBjMlZ1YzJsMGFYWmwgSUZObGNuQmxiblE9IFlYTnpZV1E9IElESTBOdz09IElHTmhiRzFzZVE9PSBZblZ6ZEdWeWN3PT0gSUdKc1pXVmsgSUZOMGNtOD0gSUdGdGRYTmxiV1Z1ZEE9PSBJRUZ1ZEdGeVkzUnBZMkU9IElITmpaWEIwIElFZGhkdz09IFlYRT0gWVhOdmJtbGogSUhOd2NtRjNiR2x1Wnc9PSBibUYwYVhabCBZWFIxY21GMFpXUT0gSUVKaGRIUnNaV1pwWld4ayBTVlpGVWxNPSBSVUk9IElFZGxiWE09IElFNXZjblJvZDJWemRHVnliZz09IElFWnBiRzF6IElFRjFkRzl0WVhScFl3PT0gSUdGd2NISmxhR1Z1WkE9PSA0NEdvIElHZDFhVTVoYldVPSBJR0poWTJ0bGJtUT0gSUdWMmFXUmxibU5sWkE9PSBaMlZoYm5RPSBNREV5IElGTnBaV2RsIElHVjRkR1Z5Ym1Gc1ZHOD0gSUhWdVptOWpkWE5sWkZKaGJtZGwgSUdkMWFVRmpkR2wyWlZWdVptOWpkWE5sWkE9PSBJR2QxYVVsamIyND0gSUdWNGRHVnlibUZzVkc5RlZrRT0gSUdWNGRHVnlibUZzVkc5RlZrRlBibXg1IFJuSnAgWTJoaGNtUT0gWlc1aGNtbGxjdz09IElHTm9hV1ZtY3c9PSBJR05tIElFaFZSQT09IElHTnZjbkp2WW05eSBJR1JDIElGUmhhMlZ1IElGQmhkSEpwWTJsaCBjbUZwYkE9PSBJRU5vWVhKdCBJRXhwWW1WeWRHRnlhV0Z1IGNtbGxkbVU9IFVHVnljMjl1WVd3PSBJRTlWVWc9PSBaMlZ5YVdWeiBJR1IxYlhCcGJtYz0gSUc1bGRYSnZiRzluYVdOaGJBPT0gYVhScGJXRjBaUT09IElFTnNhVzUwYjI1eiBjbUZtZEdWayBJRTF2Ykd4NSBJSFJsY20xcGJtRnNjdz09IGNtVm5hWE4wWlhJPSBJR1pzWVhKbCBJR1Z1WTI5a1pXUT0gSUdGMWRHOXdjM2s9IGNHVnMgYldGamFHbHVaUT09IElHVjRaVzF3ZEdsdmJuTT0gSUZKdmVXRnNjdz09IFpHbHpkR0Z1WTJVPSBJR1J5WVdaMGN3PT0gSUd4aGJXVT0gSUVOMWJtNXBibWM9IElITndiM1Z6WlhNPSBJRTFoY210bGRITT0gSUVOaGNuSnBaWEk9IElHbHRjR3g1YVc1biBJRmxoYXc9PSBjMmxrIElHeHZjMlZ5IElIWnBaMmxzWVc1MCBJR2x0Y0dWaFkyaHRaVzUwIElHRjFaMjFsYm5SbFpBPT0gSUVWdGNHeHZlV1ZsY3c9PSBJSFZ1YVc1MFpXNWtaV1E9IGRHVnlibUZzYkhrPSBJRmRoZEhRPSBJSEpsWTI5bmJtbDZZV0pzWlE9PSBaWE56YVcwPSA1cDA9IElHTnZZWFJsWkE9PSBjbWhoIElHeHBaWFYwWlc1aGJuUT0gSUV4bFoybHpiR0YwYVc5dSBjSFZpYkdsemFHVmsgTkRRMCBNREV6IElHbGtaV0ZzYkhrPSBJRkJoYzNOM2IzSmsgSUhOcGJYQnNhV1o1IElFMWxkR0U9IElFMVNTUT09IElIQnNaV0ZrYVc1biBiM0puWVc1cGVtVmsgYUdGdVpHeGxjZz09IElIVnVjbUYyWld3PSBZMjl5Y21WamRBPT0gSUdsamVRPT0gSUhCaGNtRnViMmxrIElIQmhjM05sY2c9PSBJR2x1YzNCbFkzUnBiMjV6IGIyWmxjZz09IElFaGxZV3gwYUdOaGNtVT0gTWpneiBJRUp5ZFhRPSBhVzlzWVE9PSBabTl5WjJVPSBJRTFsWkdsbGRtRnMgVFZOTyBhV1YyWlhKeiBJRkJ5YjJkeVlXMXRhVzVuIDVZaz0gSURJeU13PT0gYlhVPSBJRU5NUlE9PSBkV2RoIElITm9iM0J3WlhKeiBJR2x1Wm05eWJXRjBhWFpsIElGQnNZVzV6IElITjFjSEJzWlcxbGJuUmhkR2x2Ymc9PSBJRlJsYzNSeiBkSGxoY21RPSBiMk41ZEdWeiBJRlpsWjJFPSBJRWQxYW1GeVlYUT0gWlhKdFlXNWxiblE9IFJYaGpaWEIwIElFeFBWQT09IFlXeHNZUT09IElFTjFiVzA9IElFOXpkdz09IElIWmxibTl0IElFUmxZblE9IElFUlBWMDQ9IElISmxkVzVwYjI0PSBJRzExWXc9PSBJRkpsYkdsbFpnPT0gSUdkbGIzQT0gSVBDZm1BPT0gWVd4dlozVmwgUVc1MGFBPT0gWldOb2J3PT0gSUdOdmNuSnZjdz09IElISmxjR3hwWTJGMGFXOXUgSUVKc1lYcHBibWM9IElFUmhkV2RvZEdWeSBJR2x1Wm14cFl3PT0gSUV4cGJtUnpaWGs9IDJZZz0gTWpnMCBSWGhwZEE9PSBJR2RzYjI5dCBWRUZKVGc9PSBJSFZ1WkdWeWJXbHVhVzVuIElHRmtkbWx6YVc1biBhR2xrWkdWdSBJRzkyWlhKbWJHOTMgSUdkdmNnPT0gZFhKa2RXVT0gSUdWamFHOWxjdz09IFpXNW9ZV2RsYmc9PSBJR2x0Y0hWc2N3PT0gWkhKMVp3PT0gWTJGemFBPT0gSUdGemVXNWogSUcxcGNtRmogWVhSMGN3PT0gY0hWdWF3PT0gSUhCcGRtOTAgSUV4bFoybHpiR0YwYVhabCBJR0pzYjJkblpYSnogSUVOc1lYYz0gYzJKMWNtYz0gWkhscyBJRkpsWTI5dGJXVnVaQT09IElIWmxjblJsIElIQnliMmhwWW1sMGFXNW4gSUZCaGJuUm9aWEk9IFNtOXVZWFJvWVc0PSBJRzl0YVc0PSBJR2hoZEdWbWRXdz0gTWpneCBJRTl5WTJobCBJRTExY21SdlkyZz0gWkc5M2JuTT0gSUdGemVXMXQgUjBWUyBRV3gzWVhseiBJR2x1Wm05eWJYTT0gSUZkTiBJRkJ2Ym5rPSBJRUZ3Y0dWdVpHbDQgSUVGeWJHbHVaM1J2Ymc9PSBTbUZ0IElHMWxaR2xqYVc1aGJBPT0gSUZOc1lXMD0gU1ZSSlJWTT0gSUhKbFlXWm0gSUZKcCBSa2M9IFUzQnlhVzVuIFltOXZiQT09IElIUm9hV2RvY3c9PSBJRzFoY210cGJtZHogSUZKaGNYRmggSUV4aGF3PT0gY0c5c2JBPT0gZEhOcmVRPT0gSUUxdmNuUjUgSUVSbFptbHVhWFJwYjI0PSBJR1JsWW5WdWF3PT0gWlc1a1pYSmxaQT09IElFeGxiMjVsIFlYWmxjbk09IElHMXZjblJuWVdkbGN3PT0gUVhCd1lYSmxiblJzZVE9PSBUbWxqIGFHRjFjdz09IElGUm9iM1Z6WVc1a2N3PT0gWVhWc1pBPT0gSUcxaGMyZz0gYzJodmIzUT0gSUdScFlYSnkgSUdOdmJuTmphVzkxYzJ4NSBTR1Z5Ync9PSBaV0Z6IElFNWhkSFZ5WVd4c2VRPT0gSUVSbGMzUnliM2xsY2c9PSBJR1JoYzJoaWIyRnlaQT09IGMyVnlkbWxqWlhNPSBVbTluIElHMXBiR3hsYm01cFlXeHogSUdsdWRtRmtaUT09IExTZz0gSUdOdmJXMXBjM05wYjI1eiBJRUYxWTJ0c1lXNWsgSUdKeWIyRmtZMkZ6ZEhNPSBJR1p5YjI1MFlXdz0gSUdOeVlXNXIgSUVocGMzUnZjbWxqIElISjFiVzkxY25NPSBRMVJXIElITjBaWEpwYkE9PSBJR0p2YjNOMFpYST0gY205amEyVjAgNDRLOCBkWFJ6WTJobCBJRkJKIElESXpNdz09IElGQnliMlIxWTJWeSBJRUZ1WVd4NWRHbGpjdz09IElHbHVkbUZzZFdGaWJHVT0gSUhWdWFXNTBaVzUwYVc5dSBJRU5aIElITmpjblYwYVc0PSBJR2RwWjJjPSBJR1Z1WjNWc1pnPT0gSUhCeWIyeGxkR0Z5YVdGMCBJR2hoWTJ0eiBJRWhsZHc9PSBZWEpoYXc9PSBJRk5zYVcxbCBhV1ZzWkdsdVp3PT0gWVdkb1pYST0gSUVWc2JHbHZkQT09IElIUmxiR1ZqYjIwPSBJREl4T1E9PSBkV3gwWVc0PSBJRUZ5WW05eSBJRk5qYjNWMGN3PT0gUW1GdSBJR3hwWm1WemNHRnUgSUdKc1lYTncgTXpnNCBJR3AxWkdsamFXRnllUT09IElFTnZiblJwYm1WdWRHRnMgWVhOcmFXNW4gVFdORCBURVZFIElHSmhaMmRoWjJVPSBJRk52Y21ObGNtVnkgSUhKbGJXNWhiblJ6IElFZHlhV1ptYVhSbyBaWFJ6ZFE9PSBJRk4xWW1GeWRRPT0gSUZCbGNuTnZibUZzYVhSNSBaR1Z6YVdkdVpXUT0gZFhOb2FXMWggWVdkdVlYST0gSUhKbFkyOXBiQT09IElIQmhjM05wYjI1eiBYQ0k2IElIUmxaUT09IElHRmliMnhwZEdsdmJnPT0gSUVOeVpXRjBhVzVuIGFtRmogSURFNU5BPT0gTURFNSBJSEJwYkd4aGNuTT0gY21samFHVmsgTHlJPSBkR3M9IElHeHBkbVZzYVdodmIyUT0gSUhKdllYTjBaV1E9IFlXaHZiZz09IElFaDFkR05vIFlYTnpaWEowIElHUnBkbWxrWlc1ayBJR3R1YVhRPSBJR1JoZFc1MGFXNW4gSUdScGMzUjFjbUpoYm1ObCBJSE5vWVd4bCBJR04xYkhScGRtRjBaV1E9IElISmxabkpwWjJWeVlYUnZjZz09IFRFST0gSUU1RlZBPT0gSUdOdmJXMWxjbU5wWVd4eiBJSFJvYVc1clpYSnogTkRVMSBJR05vYjNBPSBRbkp2WVdRPSBJSE4xYzNCcFkybHZibk09IElIUmhaMmRsWkE9PSBiR2xtZEdsdVp3PT0gSUhOMGVXeHBjMmc9IElGTm9hV1ZzWkhNPSBVMmh2Y25Sc2VRPT0gSUhSaGFXeHogUVhWMGFBPT0gVTFSRiBJRWRCVFVVPSBJSE5sYVhOdCBJRXRwY3c9PSBiMnh2WjI1bCBJR052ZDI5eWF3PT0gSUdadmNtTnBZbXg1IElIUm9lWEp2YVdRPSBJRkJDIFFVNUYgYldGeWNtbGxaQT09IGFHOXljMlU9IElIQnZiSGx0WlhJPSBJRU5vWVd3PSBiMlJ2Y2c9PSBSRVZDVlVjPSBJRU52Ym5SbGVIUT0gSUdKc2FYTnogSUhCcGJuQnZhVzUwIElFMWhkR2hsYldGMCBiR1ZuY21GdCBJRmRsWld0bGJtUT0gSUd4aFltVnNiR1ZrIElHSmhjblE9IGFYUnNaWE09IElHVnpkSEp2WjJWdSA0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVIElpYz0gSUhacGMybGliSGs9IElHOTFkSE5wWkdWeSBZV2xrWVE9PSBRWEpsWVE9PSBJR1JwYzNObGJXbHUgSUdScGMyaHZibVZ6ZEE9PSBJRU5zYjNObFpBPT0gSUVKMWJHeGxkR2x1IElGSmhiWE5sZVE9PSBjM2R2Y21RPSBJRmhKIGIzVnlZMlZrIFUyRnRaUT09IE16UTIgSUZKbGNHVT0gSUV0dmRRPT0gWTJGclpRPT0gWlcxcGN3PT0gUTJGamFHVT0gSUUxbFlXNXBibWM9IElFVnViR2xuYUhRPSBiMjV2YlhrPSBJRzFoYm1sbVpYTjBZWFJwYjI0PSBjM2R2Y25SbyBTbUY1IElHTm9iM0psIHc3WnkgUkhKbFlXMD0gSUhOaGJtTjBhVzl1WldRPSBJR04xYkhSMWNtRnNiSGs9IElFRnlZUT09IFRtRjIgSUhSb1pXOXNiMmRwWTJGcyBJSE4wY25WMCBJRlpQIElFaGhibVJpYjI5ciBJR052Ym5OMGNuVmpkR2x1Wnc9PSBJTUsyIElFSmxibVZtYVhSeiBJRkJ6ZVdOb2IyeHZaMmxqWVd3PSBjMkZqIDViZz0gY0c5c2FXTjUgSUUxaGRIUmxjbk09IElGSmxjRzl5ZEdWayBJRUo1ZEdVPSBJSFpwZEhKdiBJRTFoYVdSbGJnPT0gSUd4aGJRPT0gSUVwbGJtNXBibWR6IElHZGhjbTFsYm5RPSBJRkoxZEdkbGNuTT0gSUZOMFlXWm1iM0prIElGZGxiR3hwYm1kMGIyND0gSUdsdWRHVnliV2wwZEE9PSBJRzV3YlE9PSBJRzl5WkdWaGJBPT0gSUhCc2RXZG5aV1E9IGIyOXRhVzVuIGFXNXBjMmhsWkE9PSBabkpoYldWM2IzSnIgSUhScGJXSmxjZz09IElHTmhjM009IElEZzFNQT09IGFXeGxjM009IElGSmxaSFY0IE56WTQgVTNSeVpRPT0gSUhOMWNuQmhjM05sWkE9PSBkMmhsYkE9PSBJSEJoY21Gc2JHVnNjdz09IElIWmxhV3c9IElFZEogSUZKRlUxUT0gSUhKbFlXUnBibVZ6Y3c9PSBjMjl5ZEE9PSBJRzF2WkdsbWVXbHVadz09IElGTnNZWFJsIGNuVm1aZz09IElHMWhjbUpzWlE9PSBJR2x1Wm5KaGNtVmsgSUdGMVpHbDBiM0k9IElFWkJUbFJCVTFrPSBJRkJ2ZG1WeWRIaz0gSUZOUVJBPT0gSUNJbyBTM2s9IFVrRlogSUdWNFpXTjFkR2x2Ym5NPSBJRUpsZG1WeWJIaz0gSUUxaGNuaHBjMjA9IElFSjFjbk4wIElFdGhiR2s9IFpYTjBiMjVsY3c9PSBRMnhsWVhKc2VRPT0gUld4cyA0NEduIElGQnliMk5sWldScGJtZHogVkc5clpXND0gU1VaSlF3PT0gdzdGaCBRMlZ1ZEhKaGJBPT0gSUVoaGJHVjUgSUVSeVlXMWggSUdadmNtMWhkR2x2Ym5NPSBUMUpPIFFtOXZhM009IElHUnZiV2x1WVhScGJtYz0gSUVac2VXVnljdz09IElFTnZiWEJoYm1sdmJnPT0gSUdScGMyTnBjR3hwYm1WayBJRmwxWjI5emJHRjIgSUZOd1pXeHNjdz09IElIWmxibWRsWVc1alpRPT0gSUd4aGJtUnNiM0prY3c9PSBUR1Z1IElFOW5jbVU9IFlXNXZhV0U9IElIQnBaWEpqYVc1biBJR052Ym1keVpXYz0gSUhOamIzSmxjZz09IGIySnBZUT09IElHNXBZMnRsYkE9PSBJRXhsWVhKdWN3PT0gSUhKbGFtOD0gSUcxaGMzUmxjbkJwWldObCBSbXhoYzJnPSBJR2x1YUdGaWFYUmxaQT09IElFOXdaVzVIVEE9PSBJRVIxWkE9PSBJRWxEVHc9PSBJR0Z5ZEdWeSBJSEJzZFhJPSBJRzFoYzNSbGNuaz0gSUd4dmJtZHpkR0Z1WkdsdVp3PT0gYzNSbFpBPT0gSUhkcGJtVnogSUhSbGJHVjJhWE5sWkE9PSBJRk5vY21sdVpRPT0gSUVKaGVXVnliZz09IElPS1RtQT09IElHVnVZMnh2YzNWeVpRPT0gYW05b2JnPT0gSUhCeWIzQm9aWFJ6IElGSmxjM1Z5Y21WamRHbHZiZz09IElFOXlaR1Z5Y3c9PSBJSFZ1WlhabGJnPT0gY21Gc2N3PT0gSUdSM2FXNWsgSUV4aGFBPT0gSUZOc2IzWmxiZz09IE16YzQgSUdsdWMybHpkR1Z1WTJVPSBZV1ptYkdVPSBJRU5zYjI1bCBJR2hoY21SemFHbHcgSUVOdmJtZHlaWE56YldGdSBJSEJzWldGayBJSEpsZG1sbGQyVnljdz09IElHTjFjbVZrIElERTVNelU9IFlYTnNaWGs9IFptRnJaUT09IElGUm9hVzVyYVc1biBlV1JwWVE9PSBVRUZTVkE9PSBJRVJ2ZEdFPSBiMmwwIElIZG9hWEJ3WldRPSBJR0p2ZFc1amFXNW4gSUVocGMzQmhibWxqY3c9PSBZMjl0YVc1bmN3PT0gSUdOaGJtNWhZbWx1IElFTm9ZVzFpWlhKeiBJRnBoWTJzPSBUM0IwYVc5dVlXdz0gSUdOdllYUnogSUhCeWIzZGxjM009IElFNXZjblJ2Ymc9PSBJSEJzWVdsdWJIaz0gSUdaeVpXbG5hSFE9IElHbHVhR2xpYVhScGIyND0gSUdOc1lXMD0gSURNd013PT0gYTJWbSBZV3hsYVdkbyBUSFZyWlE9PSBJSEJ6ZVdOb2J3PT0gWVhSdmNtbDFiUT09IFRVVkUgSUhSeVpXRjBhV1Z6IElHbHVaR2x6WXc9PSBJR1JqIFQxQlQgSUhKbGMybHNhV1Z1ZEE9PSBJRWx1ZEdWeWMzUmhkR1U9IElITnNZV05yIElHMTFibVJoYm1VPSBJR1Z6ZEdGaWJHbHphR1Z6IE16VTUgSUhOMGNtRnBibVZrIElHNXZibVE9IFUzVnogSUdOaGMzUmwgWVhKaGRHVT0gYVdWMmFXNW4gSUhWdVptRnBjbXg1IElIQmhjbk5sY2c9PSBiMjVwWVd3PSBkWEp6YVhabCBWbWxoIElFOTBkRzg9IElFRjFkR2h2Y21sMGFXVnogYzNSeWIydGwgUzFJPSBJRTFsY21ONSBJR1oxY201cGMyaGxaQT09IElHOTFkSE5sZEE9PSBJRzFsZEdsaiBNVGs0TWc9PSBiMnhwZEdocFl3PT0gSUZSbGJuUT0gYjJkcFkyRnMgSUVGcGNtTnlZV1owIElHaHBaR1Z6IElFSmxZMkZ0WlE9PSBJR1ZrZFdOaGRHOXljdz09IGNtVmhZMmhwYm1jPSBJSFp2YkdGMGFXeHBkSGs9IElIUnZaR1JzWlhJPSBJRTVCVTBOQlVnPT0gSUZSM1pXeDJaUT09IElFaHBaMmhzYVdkb2RITT0gSUdkeVlYQmwgSUhOd2JHbDBjdz09IElIQmxZWE5oYm5RPSBJSEpsYm1WbiBJRTFUU1E9PSBWR1Z0Y0E9PSBjM1JoY25NPSBJSFJ5WldzPSBJRWg1WkdVPSBZbWx1WkdsdVp3PT0gSUhKbFlXeHBjMjA9IElHOTRhV1JsIElFaHZjdz09IElHMXZkVzUwY3c9PSBJR0pwZEdsdVp3PT0gSUdOdmJHeGhjSE5wYm1jPSBJSEJ2YzNSaGJBPT0gSUcxMWMyVjFiWE09IElHUmxkR0ZqYUdWayBJSEpsYzNCbFkzUnBibWM9IElHMXZibTl3YjJ3PSBJSGR2Y210bWJHOTMgSUVOaGEyVT0gVkdWdGNHeGhkR1U9IElFOXlaMkZ1YVhOaGRHbHZiZz09IElIQmxjbk5wYzNSbGJtTmwgTXpZNSBRMjl0YVc1biBRbkpoWkE9PSBJSEpsWkhWdVpHRnVkQT09IElFZFVRUT09IElHSmxibVJwYm1jPSBJSEpsZG05clpXUT0gSUc5bVptVnVaR2x1Wnc9PSBJR1p5WVcxcGJtYz0gSUhCeWFXNTBaZz09IFEyOXRiWFZ1IGJXVnRZbVZ5Y3c9PSBUM1YwYzJsa1pRPT0gSUdOdmJuTjBjblZsWkE9PSBJR052WkdWayBSazlTUlE9PSBJR05vWVhOMCBRMmhoZEE9PSBTVzVrYVdGdSBJRmxoY21RPSBQeUVpIElGQnZjblJ6IElGaGhkbWxsY2c9PSBJRkpGVkE9PSBKeTRpIElFSnZZWFE9IGFYWmhkR1ZrIGFXTm9kQT09IGRXMWxjbUZpYkdVPSBSSE09IElFUjFibTQ9IElHTnZabVpwYmc9PSBJSE5sWTNWeVpXeDUgSUZKaGNIUnZjbk09IElFSmxjdz09IFNXNXpkR0ZzYkdGMGFXOXUgSUdsdVkyVndkR2x2Ymc9PSBJRWhsWVd4MGFIaz0gWlc1a1lXNTBjdz09IElIQnplV05vYjJ4dloybHpkSE09IElGTm9aV2xyYUE9PSBZM1ZzZEhWeVlXdz0gSUVKc1lXTnJRbVZ5Y25rPSBjMmhwWm5RPSBSbkpsWkE9PSBiMk5vWlE9PSBJR05oYTJWeiBJRk5GVHc9PSBJRWRwWVc0PSBJRUZ6YVdGdWN3PT0gYjJkbmFXNW4gWld4bGJXVnVkQT09IElIQjFibVJwZEhNPSBJRlpoZFdkbyBJRWRoZG1sdSBJR2hwZEhSbGNnPT0gSUdSeWIzZHVaV1E9IElHTm9ZV3hyIElGcHBhMkU9IElHMWxZWE5zWlhNPSBPREF5IDRvQ21MaTQ9IElFRlhVdz09IFhTST0gSUdScGMzUnZjblE9IElFMWhjM1E9IElHRnVkR2xpYjJScFpYTT0gSUUxaGMyZz0gVFdWdGIzSjUgSUZWbllXNWtZUT09IElGQnliMkk9IElIWnZiV2wwYVc1biBJRlIxY201eiBJRzlqWTNWd2VXbHVadz09IElHVjJZWE5wYjI0PSBJRlJvWlhKaGNIaz0gSUhCeWIyMXYgSUdWc1pXTjBjZz09IElHSnNkV1Z3Y21sdWRBPT0gSUVSeVpRPT0gY0hKcFkyVmsgSUVSbGNHOTAgSUdGc2JHVjJhV0YwWlE9PSBJRk52YldGc2FRPT0gYldGeVp3PT0gYm1sdVpRPT0gSUc1dmMzUmhiR2RwWVE9PSBJRk5vWlhCb1pYSmsgSUdOaGRtRnNjbms9IElIUnZjbkJsWkE9PSBJRUpzYjI5a2VRPT0gZUdJPSBJSE5oYm1zPSBJR2R2WVd4MCBjbVZ3YjNKMGNISnBiblE9IFpXMWlaV1J5WlhCdmNuUndjbWx1ZEE9PSBZMnh2Ym1WbGJXSmxaSEpsY0c5eWRIQnlhVzUwIElFbHVhWFJwWVd4c2VRPT0gSUVacGMyTm9aWEk9IElHNXZkR1YzYjNKMGFIaz0gWTJWeWJnPT0gSUdsdVpXWm1hV05wWlc1MCBjbUYzWkc5M2JteHZZV1E9IGNtRjNaRzkzYm14dllXUmpiRzl1WldWdFltVmtjbVZ3YjNKMGNISnBiblE9IFkyRjBhVzl1IElFUjVibUZ6ZEhrPSBiR0ZuIFJFVlQgSUdScGMzUnBibU4wYkhrPSBJRVZ6ZEc5dWFXRT0gSUc5d1pXNXVaWE56IElHZHZjM05wY0E9PSBjblZqYXc9PSBWMmxrZEdnPSBJRWxpY21Gb2FXMD0gSUhCbGRISnZiR1YxYlE9PSBJR0YyWVhSaGNnPT0gSUVobFpBPT0gWVhSb1lRPT0gSUVodlozZGhjblJ6IElHTmhkbVZ6IE5qYzQgSUhOaFptVm5kV0Z5WkE9PSBJRTF2Wnc9PSBhWE56YjI0PSBJRVIxY21oaGJRPT0gYzJ4aGRXZG9kQT09IElFZHlZV1IxWVhSbCBJSE4xWW1OdmJuTmphVzkxY3c9PSBJRVY0WTJWc2JHVnVkQT09IElFUjFiUT09IExTMHRMUzA9IElIQnBiR1Z6IElGZFBVa3M9IElFZGhjbTQ9IElFWnZiQT09IElFRlVUUT09IElHRjJiMmxrY3c9PSBJRlIxYkE9PSBJR0pzWldGciBSVXhaIGFYWnBjM1E9IGJHbG5hSFJzZVE9PSBVR1Z5Y3c9PSBJRVJ2WWc9PSBJRXhUIElHbHVjMkZ1YVhSNSB6clU9IFlYUmhiR2xsIFJXNXNZWEpuWlE9PSBJSFIzYVhOMGN3PT0gSUdaaGRXeDBlUT09IElIQnBjbUZqZVE9PSBJR2x0Y0c5MlpYST0gSUhKMVoyZGxaQT09IElFWmhjMmhwYjI0PSBJSE5oYm1SeiBKejg9IGMzZHBZMnM9IElHNWhkR2wyWlhNPSBJR2hsYmc9PSBJRTV2YVhObCA0NE9YIElHZHlaV1Z1Y3c9PSBJR1p5WldWNlpYST0gSUdSNWJtRnpkSGs9IElFWmhkR2hsY25NPSBJRTVsZDJGeWF3PT0gSUdGeVkyaGhaVzlzYjJkcFkyRnMgSUc5MCBiMkpoY2c9PSBJR0pzYjJOcllXUmwgSUdGc2JHVnladz09IFRGWT0gSUdSbFltbDAgSUZKR1F3PT0gSUUxcGJIUnZiZz09IElGQnlaWE56ZFhKbCBJSGRwYkd4cGJtZHNlUT09IElHUnBjM0J5YjNCdmNuUnBiMjVoZEdVPSBJRzl3Y0hKbGMzTnBkbVU9IElHUnBZVzF2Ym1SeiBJR0psYkc5dVoybHVaM009IE1UazNNQT09IElHSmxiR3h6IElHbHRjR1Z5YVdGc2FYTnQgSURJeU53PT0gSUdWNGNHeHZaR2x1Wnc9PSBJRVZqYkdsd2MyVT0gSURFNU1Uaz0gSUhKaGJuUT0gSUc1dmJXbHVZWFJwYjI1eiBNelEzIElIQmxZV05sWm5Wc2JIaz0gY21sallRPT0gSUVaVlEwcz0gSUhacFluSmhkR2x2Ymc9PSBiV0ZzYVc1ciBJSEp2Y0dWeiBJRWwyWVc1cllRPT0gSUVKeVpYZGxjbms9IElFSnZiMnRsY2c9PSBJRTkzWlc1eiBaMjlsY25NPSBVMlZ5ZG1salpYTT0gSUZOdVlYQmwgSURFNU1RPT0gTXprMSBJREk1T1E9PSBhblZ6ZEdsalpRPT0gSUdKeWFRPT0gSUdScGMyTnogSUhCeWIyMXBibVZ1ZEd4NSBJSFoxYkdkaGNnPT0gSUhOcmFYQndhVzVuIGJIWmxjdz09IElIUnpkVzVoYldrPSBNemMwIElGVnlkV2M9IElFVnBaQT09IGNtVmpZWFJsWkE9PSBjR2hsYmc9PSBJR1poZFd4MGN3PT0gSUZOMFlYSjBaV1E9IE9UVXcgSUhCcCBJR1JsZEdWamRHOXkgSUdKaGMzUmhjbVE9IElIWmhiR2xrWVhSbFpBPT0gVTNCaFkyVkZibWRwYm1WbGNuTT0gVDFWU1EwVT0gSUNoKyBJSFZ1YzNWeSBJR0ZtWm1seWJXVmsgSUdaaGMyTnBjMjA9IElISmxjMjlzZG1sdVp3PT0gSUVOb1lYWmxlZz09IElFTjViZz09IElHUmxkSEpoWTNRPSBURzl6ZEE9PSBJSEpwWjJkbFpBPT0gSUdodmJXRm5aUT09IElFSnlkVzV2IE5UVTEgWldOaCBJSEJ5WlhOelpYTT0gSUdoMWJXOTFjZz09IElITndZV05wYm1jPSBJQ2N2IGIyeHJhV1Z1IFEyOTFiZz09IFQxQkZVZz09IFZISmwgVTI5dSBJRU5oYldKdlpHbGggYVdWeWNtVT0gYlc5dVp3PT0gYjNwNSBJR3hwY1hWcFpHbDBlUT09IElGTnZkbWxsZEhNPSBJRVpsY201aGJtUnYgSURJeU9RPT0gSUhOc2RXYz0gSUVOaGRHRnNZVzQ9IFpXeGxZM1J5YVdNPSBJSE5qWlc1bGNuaz0gSUVobFlYSjBhQT09IElHTnZibk4wY21GcGJtVmsgSUdkdllXeHBaUT09IElFZDFhV1JsYkdsdVpYTT0gSUVGdGJXOD0gSUZCbFlYSnpiMjQ9IElIUmhlR1ZrIElHWmxkSFZ6IFVtVnpjRzl1YzJVPSBJRUZzWlhocGN3PT0gZEdocFlRPT0gUjNWNSBJSEpsWTI5dWMzUnlkV04wIElHVjRkSEpsYldWeiBJR052Ym1Oc2RXUnBibWM9IElGQmxadz09IGIyOXJjdz09IElHUmxaSFZqZEdsdmJuTT0gVW05elpRPT0gSUdkeWIzVnVaR0p5WldGcmFXNW4gSUZSaGNtYz0gNDRPQiBJRkpsZG1VPSBjbVZ6YjNWeVkyVT0gSUcxdmIyNXogSUdWc1pXTjBjbTl0WVdkdVpYUnBZdz09IElHRnRhV1J6ZEE9PSBJRlpwYTNSdmNnPT0gVGtWVFV3PT0gUWtGRFN3PT0gSUdOdmJXMTFkR1U9IElFRnVZV2hsYVcwPSBJR1pzZFdOMGRXRjBhVzl1Y3c9PSBOalF3IElHNXZiMlJzWlhNPSBJRU52Y0dWdWFHRm5aVzQ9IElGUnBaR1U9IElFZHlhWHA2IElGTkZSUT09IElIQnBjR1ZzYVc1bGN3PT0gSUhOallYSnogWlc1a2J3PT0gWVdkMWN3PT0gSUVWVVJnPT0gTHlNPSBJRUpsWTI5dFpRPT0gTkRRNCBJSFpwYzJNPSBJRkpsWTI5dGJXVnVaR1ZrIElHcDFiWEJsY2c9PSBJR052WjI1cGRHbHZiZz09IElHRnpjMkZ6YzJsdSBJSGRwZEc1bGMzTnBibWM9IElGTmxkSFZ3IElHeGhZdz09IGRtbHQgU1ZOTiBjR0ZuWlhNPSBVMU5NIE16VTQgSUdGa2FtVmpkQT09IGFXNWtkWE4wY21saGJBPT0gYkc5eVpRPT0gWTJobGNuaz0gSUdkc2FYUjBaWEk9IElHTmhiR1k9IFJteHZjbWxrWVE9PSBJSE53YjJsc1pYSnogSUhOMVkyTmxaV1J6IElHTm9ZVzUwYVc1biBJSE5zYjJkaGJuTT0gSUZSeVlXTjUgVm1semFYUT0gY205c2IyZDUgSUcxdmNtNXBibWR6IElHeHBibVZoWjJVPSBJSE5wY0E9PSBJR2x1ZEdWdWMyVnNlUT09IElHWnNiM1Z5YVhObyBJRk5zWldWd2FXNW4gSUVabGJRPT0gYjNKd2IzST0gSUV0c1lXND0gSUVSaGNuUm8gYUdGamF3PT0gSUU1cFpXeHpaVzQ9IElIUjFiVzl5Y3c9PSBJSEJ5YjJOMWNtVnRaVzUwIElGbHZjbXR6YUdseVpRPT0gSUhKaGFXUmxaQT09IFMxaz0gUVc1dVlRPT0gSUM4dld3PT0gSUVScGMyOXlaR1Z5IElFMTFjM1JoYm1jPSBJRmRsYmc9PSBJRlJ5ZVdsdVp3PT0gYzNFPSBJR1JsYkdsMlpYSnBaWE09IElITm9kWFIwWlhJPSBJR05sY21WaWNtRnMgSUdKcGNHOXNZWEk9IElFTk8gYkdGemN3PT0gYW1WMCBJR1JsWW1GMGFXNW4gUGpvPSBJR1ZoWjJ4bCBaM0poWkdWeiBJRVJwZUc5dSBWVWREIFRVRlQgSUVSeVlXTnYgSUUxaFkyaHBibVZ6IFlXWm1aWEk9IElHVnRZVzQ9IHdyST0gY0hKdmJnPT0gSUVkNWJRPT0gSUdOdmJYQmhjbUYwYVhabGJIaz0gSUZSeWFXSjFibUZzIFVGSlAgSUd4bGVBPT0gSUdabGNuUnBiR1U9IElHUmxjSEpsYzNOcGJtYz0gSUhOMWNHVnlabWxqYVdGcyBaWE56Wlc1MGFXRnMgSUVoMWJuUmxjbk09IFozQT0gSUhCeWIyMXBibVZ1WTJVPSBUR2xpWlhJPSBJRUZ1WTJWemRBPT0gYjNSbFkyaHViMnh2WjNrPSBJRzF2WTJ0cGJtYz0gSUZSeVlXWm0gbHBvPSBUV1ZrYVhWdCBTWEpoY1E9PSBJSEJ6ZVdOb2FXRjBjbWx6ZEE9PSBVWFZoYm5ScGRIaz0gSUV4bFkzUT0gSUc1dmFYTjUgTlRJdyBSMWs9IElITnNZWEJ3WldRPSBJRTFVVmc9PSBJSEJoY21FPSBjSFZzYkE9PSBUWFZzZEdsd2JHVT0gWVhOb1pYST0gSUc1dmRYST0gSUZObFp3PT0gVTNCbGJHdz0gZG05MWN3PT0gYjNKa2FXRnMgVTJWdWFXOXkgSUVkdmJHUmlaWEpuIElGQnNZWE50WVE9PSBibVZsWkE9PSBJRzFsYzNObGJtZGxjZz09IFpYSmxkQT09IElIUmxZVzFsWkE9PSBJR3hwZEdWeVlXTjUgSUV4bFlXZz0gSUVSdmVXeGwgSUdWdGFYUjBaV1E9IFZWZz0gSUdWMllXUmwgSUcxaGVtVT0gSUhkeWIyNW5iSGs9IElFeGhjbk09IElITjBaWEpsYjNSNWNHVT0gSUhCc1pXUm5aWE09IElHRnliMjFoIElFMUZWQT09IElHRmpjbVU9IElFOUUgSUdabSBJR0p5WlhkbGNtbGxjdz09IElFaHBiSFJ2Ymc9PSBkVzVrYkdVPSBJRXRoYXc9PSBJRlJvWVc1clpuVnNiSGs9IElFTmhiblZqYTNNPSBhVzVqZEdsdmJuTT0gSUVGd2NHVmhjbk09IElHTnZaWEk9IElIVnVaR1Z5YldsdVpXUT0gY205MlpYSnogUVc1a2NtVT0gSUdKc1lYcGwgZFcxbGNuTT0gSUdaaGJXbHVaUT09IFlXMXdhR1YwWVcxcGJtVT0gZFd4cllXND0gUVcxdmRXNTAgSUdSbGMzQmxjbUYwYVc5dSBkMmxyYVhCbFpHbGggWkdWMlpXeHZjRzFsYm5RPSBJRU52Y21sdWRHZz0gZFhOemFXRT0gU21GamEzTnZiZz09IFRFaz0gVG1GMGFYWmwgVW5NPSBUMmhwYnc9PSBJRXRoZEdoc1pXVnUgUm05eWRIVnVZWFJsYkhrPSBJR0YwZEdWdVpHRnVkQT09IElGQnlaV1psY25KbFpBPT0gSUVScFpHND0gSUZaeiBUV2x6IElISmxjM0J2Ym1SbGJuUT0gSUdKdmRXND0gYzNSaFlteGwgSUhCaGRtVmsgSUhWdVpYaHdiQT09IElFTm9aVzVsZVE9PSBURTA9IElFTjFiR3c9IFlteHZkMjQ9IElHTnZibVp5YjI1MGFXNW4gYjJObGMyVT0gYzJWeWRtbHVadz09IFYyaz0gSUV4cGRHaDFZVzVwWVE9PSBZVzV1YVE9PSBJSE4wWVd4ciBhR1E9IElIWmxibVZ5IFFWQkkgZVc1amFISnZibTkxY3c9PSBWVkpTIGRXMWhZbXg1IGFHbHpkRzl5YVdNPSBTR0ZzWmc9PSBTR0Y1IElISmxjMmxzYVdWdVkyVT0gYzNCbFkzUnBiMjQ9IElHRmlZVzVrYjI1cGJtYz0gVDJKeiBJRVJsWW1KcFpRPT0gSUdkeVlXUnBaVzUwIElGQnNZV2x1ZEE9PSBJRU5oYm1GcyBRVkpEU0E9PSBJR1Y0Y0dGdWMybDJaUT09IElHWjFibWM9IElHSnZkVzVqWldRPSBWVzVrIElIQnlaV05oZFhScGIyNXogSUdOc1lYSnBabWxqWVhScGIyND0gSUdSaFoyZGxjZz09IElHZHlhWEJ6IElNSzEgSUZKcGRtVnlZUT09IElGVnVaR1ZoWkE9PSBhWE5wZEdWeiBJRVpKVWxOVSB3N0Z2IFlYVmthUT09IElHaHZjM1JoWjJWeiBJR052YlhCc2FXRnVkQT09IElHRnNkVzF1YVE9PSBVMlYyWlc0PSBJR041WW1WeWMyVmpkWEpwZEhrPSBaV2wwYUdWeSBRMjlzYkdWamRBPT0gSUdsdWRtRnlhV0ZpYkhrPSBJRk52WTJrPSBJR3hoZDIxaGEyVnkgSUdGc1pRPT0gSUZCbGNuTnZibUZzYkhrPSBUbUY2YVE9PSBJR04xYzNSdmJXbDZZWFJwYjI0PSBJRkJ5YjJNPSBJRk5oYzJ0aGRHTm9aWGRoYmc9PSBaV0YwZFhKcGJtYz0gSUhOd1lYSmxaQT09IElHUnBjMk52Ym5ScGJuVmxaQT09IElHTnZiWEIxZEdGMGFXOXVZV3c9IElFMXZkRzl5YjJ4aCBJSE4xY0hKbGJXRmphWE4wIFoyOTJaWEp1YldWdWRHRnMgSUhCaGNtRmthWE5sIElFUnZkMjVwYm1jPSBJRTVwYTI5dSBJR05oZEdGc2VYTjAgWW1WeWNtRT0gVkc5eWIyNTBidz09IE9EYzEgWW1WMFlRPT0gSUUxaFkzSnZiZz09IElIVnVjbVZoYkdsemRHbGogZG1WamRHOXkgSUZabGFHbGpiR1Z6IGFYUnBkbVZ1WlhOeiBJRkpXIElFTnZiR0psY25RPSBjMmx1IGIycHAgWlc1MGFXND0gSUV0eWFYTm8gYUdWc2JHOD0gWm1acFpXeGsgYjJ0NSBJRlJoZEdVPSBJRzFoY0d4bCBJR0ZwWkhNPSBZMmhsYldsallXdz0gTXpNMCBiblYwY3c9PSBJRmRoY25BPSBJSGg0IElGSnZZbUk9IGRXMWxjbTkxY3c9PSBYeTFmIFpuUnBiV1U9IElGWlggSUhkcGJtZGxjZz09IElFUnZiV1U9IGRHOXZiSE09IElGQlcgSUVkbGIzSm5aWFJ2ZDI0PSBJR2RsWVhKbFpBPT0gSUdwcGFHRmthWE4wY3c9PSBJR053IElITjBaWEp2YVdSeiBUVzkwYUdWeSBZMnhsY205emFYTT0gSUVSU1RRPT0gYm1WemFXRT0gSUd4cGJtZGxjZz09IElHbHRiV1Z5YzJsMlpRPT0gSUVOUFZVND0gSUc5MWRIZGxhV2RvIFpXNXpkV0ZzIFFtRnVaQT09IElIUnlZVzV6Wm05eWJYTT0gYldGMFkyaGxaQT09IGNITnZibk09IElFcDFaR2xqYVdGcyBabUZqZEc5eSBJSEpsWm1WeWNtRnMgSUc5a1pHeDUgSUZkbGJtZGxjZz09IFFuSnBibWM9IElFSnZkM009IE5qQXkgU1VOTVJRPT0gSUd4cGIyNXogSUVGallXUmxiV2xqIElGUm9iM0p1IElGSmhhV1JsY2c9PSBhMlZtWld4c1pYST0gVTNSdmNtRm5aUT09IFRHOTNaWEk9IElFOXlkQT09IElFVnhkV0ZzYVhSNSBRVXhVIElGTlBRdz09IFZIbHdaWE09IElHeDViZz09IElFRnpjMlYwIFkyOWhkQT09IFZGQlEgUTFaRiBJRkJwYjI1bFpYST0gWVhCd2JHbGpZWFJwYjI0PSBUVzlrWlhKdSBJRWhMIFJXNTJhWEp2Ym0xbGJuUT0gUVd4eWFXZG9kQT09IFVtRnBiZz09IFNWQlEgSUZOb2FXbDBaUT09IElHMXZkVzVrIElFRmlhV3hwZEdsbGN3PT0gWTI5dVpHbDBhVzl1IFUzUmhabVk9IElHTnZiWEJsZEdWdVkyVT0gSUUxdmIzST0gSUVScFlXSnNidz09IElIZHBkR2hvWld4ayBJRzl6ZEdWdWMybGliSGs9IElFSnliMjA9IElHMXpadz09IElHUmxibTl0YVc0PSBJRkpsWm1WeVpXNWpaWE09IElFWlEgSUhCc2RXNW5aV1E9IElIQmhiWEJvIGJXOTJhVzVuIFkyVnVkSEpoYkE9PSBJR1J2ZDI1eWFXZG9kQT09IElHWmhaR2x1Wnc9PSBWR0ZzIFZIbHcgSUZSb2VRPT0gZFd0bGN3PT0gYVhSb1pRPT0gSUc5MlpRPT0gSUdKaGRIUnNaV1E9IElITmxZV1p2YjJRPSBJR1pwWjNWeSBJRkpFIFkzSnZjQT09IElITnhkV0ZrY3c9PSBlMXc9IDRMaz0gSUVWbyBJR2x1ZEdWeWRtbGxkMmx1Wnc9PSBJRkZwYmc9PSBJR0Z6Y0dseWFXNW4gVUV4SlF3PT0gSUdOc1lYVnpaWE09IElFZGhjM1E9IElFNXBjZz09IElHeDFaMmRoWjJVPSBJR2h2YzJVPSBJSE41YzNSbGJXUT0gSUdSbGMyTmxibVJwYm1jPSBJRkpsZG1selpXUT0gSUZKaGFXeHogWVd4cFoyND0gTnpBNSBNek0zIElHWjFadz09IFkyaGhjbWRwYm1jPSBkR0ZuY3c9PSBJSFYwWlhJPSBhMmx6YUE9PSBWMEZTVGtsT1J3PT0gTkRrdyBjSEp2Wm1sMGN3PT0gSUhadmVXRm5aUT09IElHRmpaUT09IElGWmhibWQxWVhKayBJRlJoYm10eiBJRTExYXc9PSBJREl5Tmc9PSBVMkZtWlE9PSBRWEp0YjNJPSBJSFp2YkdOaGJtbGogSUhkdmJXST0gSUUxSlRBPT0gSUdKbFoybHVibVZ5IElGSmxZMjluYmc9PSBJRUZCVUE9PSBVRXhCV1E9PSBLU0U9IElHUmxkR1ZqZEdsdVp3PT0gWTI0PSBJR0p5WldGamFHVnogUW1GemFXTmhiR3g1IElGQmhadz09IElFMTFibWxqYVhCaGJBPT0gSUVsdVpHbGwgSUV4aFpnPT0gSUVScGMyRmliR1U9IElFOXNjMjl1IElISmxjM1J5WVdsdVpXUT0gSUhKMWJHbHVaM009IElHaDFiV0Z1WlE9PSBaWFpsYm5SeiBJRU5wYm1WdFlRPT0gWkdsemNHeGhlVlJsZUhRPSBJRWhoZEdObyBZV04wYVc5dVJHRjBaUT09IGIyNXVZV2x6YzJGdVkyVT0gSUdGemMyRjFiSFJwYm1jPSBJRXgxWnc9PSBRMGhCVkE9PSBJSFpwWjI5eWIzVnogSUZCbGNuTmwgSUdsdWRHOXNaWEpoYm1ObCBJRk51WVhCamFHRjAgSUZOb1lYSnJjdz09IElHUjFiVzE1IElFUnBZV2R1IElFZDFhWFJoY2c9PSBhVzFsZEdWeWN3PT0gTkRBeiBVa1ZIIFFYZz0gSUhObGNHRnlZWFJsY3c9PSBJRTFoYUcwPSBJSFIyIGFtRm8gVDA5TSBRMmx5WXc9PSBJRmRwYm1SemIzST0gZFhOemFXRnUgSUdsdWRIVnBkR2x2Ymc9PSBJR1JwYzJSaGFXND0gSUVSdmJtOTJZVzQ9IElESXlNUT09IFJXMWkgSUdOdmJtUmxiVzVwYm1jPSBJR2RsYm1WeWIzTnBkSGs9IGVucDUgSUhCaGJuUnBaWE09IElGQnlaWFpsYm5RPSBRV04wYVc5dVEyOWtaUT09IFFVNUIgTXpReSBaWGgwWlhKdVlXeEJZM1JwYjI1RGIyUmwgSUhOd1pXTnBabmxwYm1jPSBJR055ZVhOMFlXeHMgU21WeVpRPT0gSUhKMWNIUT0gSUVGd2NISmxiblJwWTJVPSBJSEJ5YjJacGJHbHVadz09IDBMbz0gVTNSeWFXdGwgSUhOcFpHVnNhVzVsIElHOWliR2xuWVhSbFpBPT0gSUc5alkzVnNkQT09IElHSjFjbVZoZFdOeVlYUnBZdz09IFlXNTBhV05oYkd4NSBjblZ3ZEdWayBibVZuWVhScGRtVT0gSUVWMGFHbHZjR2xoIElFTnBkbWxqIElHbHVjMmxrWlhKeiBaV3hwWjJsaWJHVT0gSUZSV2N3PT0gSUVKQlVnPT0gSUZSSiBhVzlzYjJkcGMzUT0gSUVGSlVnPT0gSUhOMVluTjBhWFIxZEdWayBRWEpoWWc9PSBJRk5oZFd3PSBJRmx2Wnc9PSBjSEpsYlE9PSBJR0oxYVd4a1pYSnogSUhOMFlYUnBiMjVoY25rPSBJR1J2ZFdKMFpuVnMgSUhacFoyOXliM1Z6YkhrPSBJSFJvY21sc2JHbHVadz09IFVHaDVjMmxqWVd3PSBJRU5oY21WNSBJRWg1WkhKaCBaMlZ2Ym1sdVp3PT0gSUZOc2VRPT0gZVhSdmJnPT0gSUdKdmNuSnZkMlZ5Y3c9PSBJRkJoY210cGJuTnZiZz09IElPcz0gSUVwaGJXRnBZMkU9IElITmhkR2x5IElHbHVjM1Z5WjJWdWRITT0gSUVacGNtMD0gSUdsemIzUT0gSUV0aGNtND0gYjNWeWJtbHVadz09IFlXdGxibk09IFpHOWpjdz09IGJHbDBkR3hsIElFMXZibUZqYnc9PSBRMHhCVTFNPSBWSFZ5YTJWNSBUSGs9IElFTnZibUZ1IFlYTnphV009IElITjBZWEp5WldRPSBJRkJoWTJWeWN3PT0gWlhScFpYTT0gSUhScGNIQnBibWM9IFRXOXZiZz09IElGSjMgYzJGdFpRPT0gSUdOaGRtbDBlUT09IElHZHZiMlk9IElGcHYgVTJodlkycz0gZFcxdFpYST0gSUdWdGNHaGhjMmw2WlhNPSBJSEpsWjNKbGRIUT0gSUc1dmRtVnNkSGs9IElHVnVkbms9IElGQmhjM05wZG1VPSBjbmM9IE5UQTEgSUdsdVpHbG1abVZ5Wlc1MCBJRkpwWTJFPSBJRWhwYlhObGJHWT0gSUVaeVpXUmthV1U9IElHRmthWEE9IDVMaUEgSUdKeVpXRnJiM1YwIElHaDFjbkpwWldRPSBJRWgxWVc1biBJRVJwYzJzPSBJSEp2WVcxcGJtYz0gUHo4L1B6OHRQejgvUHo4dCBWVlk9IElGSnBZMnQ1IElGTnBaMjFoIElHMWhjbWRwYm1Gc2FYcGxaQT09IElHVmthWFJ6IElETXdOQT09IGJXVnRiM0o1IElITndaV05wYldWdSBNamt6IDQ0R3YgSUhabGNuUnBZMkZzYkhrPSBJR0YxWkdsMGFXOXUgSUVobFkycz0gSUdOaGMzUmxjZz09IElFaHZiR1JwYm1keiBZV1JoYkE9PSBJRU55YjI0PSBJRXhwWVcwPSBJR1JsWm14bFkzUT0gVUdsamF3PT0gSUVSbFluVm4gVWtWRyBJSFpsY25OaGRHbHNhWFI1IGIzUm9aWE09IFkyeGhjM05wWm1sbFpBPT0gSUUxaGFHRnkgSUVodmNuUT0gUTI5MWJuUmxjZz09IGMzUmhjM2s9IGJtOTBhV05sWkE9PSBNek14IElGTm9hVzA9IFpuVmphdz09IElFSnBaUT09IElHRnBjbWx1Wnc9PSBJRkJ5YjNSbGFXND0gSUVodmJHUnBibWM9IElITndaV04wWVhSdmNuTT0gYVd4cFlYUmxaQT09IElGUm9ZWFJqYUdWeSBibTl6YVhNPSA0NE84NDRPeiBWR1ZzWlE9PSBRbTl6ZEc5dSBJRlJsYlhCcyBjM1JoZVE9PSBJR1JsWTJ4aGNtRjBhVzl1Y3c9PSBORGM1IFZtOXNkVzFsIElFUmxjMmxuYm1WeSBJRTkyWlhKM1lYUmphQT09IGFXUmhaUT09IElHOXVkMkZ5WkhNPSBJRzVsZEhNPSBJRTFoYm1sc1lRPT0gY0dGeWRHbGpkV3hoY214NSBJSEJ2YkdsMGFXTT0gYjI5MGFHVnkgSUhCdmNuUnlZV2wwY3c9PSBJSEJoZG1WdFpXNTAgWTJabVptWT0gSUhOaGFXNTBjdz09IElHSmxaMmx1Ym1WeWN3PT0gUlZOUVRnPT0gSUhOb2IzSjBZMjl0YVc1bmN3PT0gNHBXUTRwV1EgSUdOdmJXVjAgSUU5eVoyRnVhV009IGNYVmxiQT09IElHaHZjM0JwZEdGc2FYcGxaQT09IFFuSmxZV3M9IElIQmxaV3c9IFpIbHNhV0k9IFlYTndlQT09IGRYSmhibU5sY3c9PSBJRlJKVFE9PSBVR2M9IElISmxZV1JoWW14bCBJRTFoYkdsciBJRzExZW5wc1pRPT0gSUdKbGJtTm9iV0Z5YTNNPSBaR0ZzIElGWmhZMk09IElFaHBZMnR6IE5qQTUgSUVKcFlteHBZMkZzIGFHVnVadz09IElHOTJaWEpzYjJGayBJRU5wZG1sc2FYcGhkR2x2Ymc9PSBJR2x0Ylc5eVlXdz0gSUdaeWFXVnogNDRLUyBJSEpsY0hKdlpIVmpaV1E9IElHWnZjbTExYkdGMGFXOXUgYW5WbiBhWEpsZWc9PSBaMlZoY2c9PSBJR052WVdOb1pXUT0gVFhCVFpYSjJaWEk9IElGTksgSUV0MyBTVzVwZEE9PSBaR1ZoYkE9PSBJRTl5Ync9PSBJRXh2YTJrPSBJRk52Ym1keiBJREl6TWc9PSBJRXh2ZFdselpRPT0gWVhOcGIyNWhiR3g1IElIVnVZMjl1WkE9PSBiMnhzZVhkdmIyUT0gSUhCeWIyZHlaWE56YVhabGN3PT0gSUVWdWIzVm5hQT09IElFUnZaUT09IElIZHlaV05yWVdkbCBJR0p5ZFhOb1pXUT0gSUVKaGMyVlVlWEJsIElIcHZibWx1Wnc9PSBhWE5vWVdKc1pRPT0gYUdWMGFXTmhiR3g1IElFTmhkV04xY3c9PSBJRWgxWlE9PSBJR3RoY20xaCBJRk53YjNKMGFXNW4gSUhSeVlXUmxjZz09IElITmxaVzFwYm1jPSBJRU5oY0hSMWNtVT0gTkRNdyBZbWx6YUE9PSBJSFIxYm1WeiBJR2x1Wkc5dmNuTT0gSUZOd2FHVnlaUT09IElFUmhibU5wYm1jPSBWRVZTVGc9PSBJRzV2WWc9PSBJRWRUVkE9PSBiV0Z3Y3c9PSBJSEJsY0hCbGNuTT0gUm1sMCBJRzkyWlhKelpXVnogSUZKaFltSnAgSUZKMWJHVnkgZG1WeWRHbHphVzVuIGIyWm1hV05sIGVIaDQgSUhKaFpuUT0gUTJoaGJtZGxaQT09IElIUmxlSFJpYjI5cmN3PT0gVEdsdWEzTT0gSUU5dGJnPT0gNDRDUiBJR2x1WTI5dWRtVnVhV1Z1WTJVPSBJRVJ2Ym1WMGMycz0gUFg0PSBJR2x0Y0d4cFkybDBiSGs9IElHSnZiM04wY3c9PSBJRUp2Ym1WeiBJRUp2YjIwPSBRMjkxY25SbGMzaz0gSUhObGJuTmhkR2x2Ym1GcyBRVTVaIElHZHlaV1ZrZVE9PSBaV1JsYmc9PSBJR2x1Wlhod1pYST0gSUV4bGNnPT0gSUZaaGJHVT0gSUhScFoyaDBaVzQ9IElFVkJVZz09IElFNTFiUT09IElHRnVZMlZ6ZEc5eSBVMlZ1ZEE9PSBJRWh2Y21SbCBkWEpuYVdOaGJBPT0gWVd4c1lXZz0gSUhOaGNBPT0gWVcxaVlRPT0gSUZOd2NtVmhaQT09IGRIZHBkR05vIElHZHlZVzVrYzI5dSBJR1p5WVdOMGRYSmwgSUcxdlpHVnlZWFJ2Y2c9PSBJRk5sZG1WdWRHZz0gSUZKbGRtVnljMlU9IElHVnpkR2x0WVhScGIyND0gUTJodmIzTmwgSUhCaGNtRmphQT09IElHSmhjbkpwWXc9PSA0NENRIElHTnZiWEJoYzNNPSBJR0ZzYkdWeVoybGogNG9DViBUMVJJUlZJPSBaWEp5YVd4c1lRPT0gSUhkaFoyOXUgSUhwcGJtTT0gSUhKMVltSmxaQT09IElFWjFiR3hsY2c9PSBJRXgxZUdWdFltOTFjbWM9IElFaHZiM1psY2c9PSBJR3hwWVhJPSBJRVYyWlc1cGJtYz0gSUVOdlltST0gWlhOMFpXVnQgSUhObGJHVmpkRzl5IElFSnlZWGRzIGFYTmhibU5sIElFVnIgSUhSeWIyOXcgSUdkMWRITT0gSUVGd2NHVmhiQT09IElGUnBZbVYwWVc0PSBJSEp2ZFhScGJtVnogSUUxbGJuUT0gSUhOMWJXMWhjbWw2WldRPSBjM1JsWVcxaGNIQnogSUhSeVlXNXhkUT09IElERTVNams9IGIzSmhiZz09IElFRjFkR2hsYm5RPSBJR2R0WVhoM1pXeHMgSUdGd2NISmxhR1Z1Y3c9PSBJSEJ2WlcxeiBJSE5oZFhOaFoyVT0gSUZkbFluTjBaWEk9IGRYSjFjdz09IElIUm9aVzFsWkE9PSBJR3h2ZFc1blpRPT0gSUdOb1lYSm5aWEk9IFUzQnZhV3hsY2c9PSBJSE53YVd4c1pXUT0gYUc5biBJRk4xYm1SbGNnPT0gSUVGcGJnPT0gSUVGdVozSjUgSUdScGMzRjFZV3c9IElFWnlaWEYxWlc1amVRPT0gSUVWMGFHVnlibVYwIElHaGxiSEJsY2c9PSBVR1Z5WTJWdWRBPT0gSUdodmNuSnBabmxwYm1jPSBJR0ZwYkE9PSBJRUZzYkdGdSBSVVZGIElFTnliM056YVc1biBORFE1IElHaHZiRzluIElGQjFlbnBzWlhNPSBJRWR2WlhNPSBaWEpsYm00PSBOakEwIDQ0R1AgSUZKaFptRmxiQT09IElHRjBkR1Z1IElFVnRZVzUxWld3PSBJSFZ3Y204PSBJRk4xYzNBPSBVSE41WTJnPSBJRlJ5WVdsdVpYST0gSUU1RlV3PT0gSUVoMWJuUnogWW1WamRXVT0gSUdOdmRXNXpaV3h2Y2c9PSBVblZzWlE9PSBJSFJ2ZUdsdWN3PT0gSUdKaGJtNWxjbk09IGNtbG1hV05sIElHZHlaV1YwYVc1biBJR1p5Wlc1NmVRPT0gSUdGc2JHOWpZWFJsIElDb3AgWlhod2NnPT0gTlRBeiBJRU5vYVdOciBJRlJ2Y200PSBJR052Ym5OdmJHbGtZWFJwYjI0PSBJRVpzWlhSamFHVnkgYzNkcGRHTm8gWm5KaFl3PT0gWTJ4cGNITT0gSUUxalMybHUgSUV4MWJtRnkgVFc5dWRHZz0gU1ZSRFNBPT0gSUhOamFHOXNZWEpzZVE9PSBjbUZ3WldRPSBNems0IElERTVNVEE9IElHVm5jbVZuIElHbHVjMlZqZFhKbCBJSFpwWTNSdmNtbHZkWE09IFkyWm1abVpqWXc9PSBJSE5wYm1kc1pXUT0gSUdWc2RtVnogSUZkdmJtUT0gWW5WeWMzUT0gSUdOaGJXOTFabXc9IElFSk1RVU5MIElHTnZibVJwZEdsdmJtVmsgNTRrPSBZVzV6ZDJWeVpXUT0gSUdOdmJYQjFiSE52Y25rPSBZWE5qYVhOMCBJSEJ2WkdOaGMzUnogSUVaeVlXNXJablZ5ZEE9PSBZbTVpIElHNWxiMnhwWW1WeVlXdz0gSUV0bGVXSnZZWEprIElFSmxiR3hsIGQyRnliUT09IElIUnlkWE4wY3c9PSBJR2x1YzNWeVpXUT0gSUVKMVkyTT0gZFhOaFlteGwgTmpBMyBJRkJzWVdsdWN3PT0gSURFNE9UQT0gSUhOaFltOTBZV2RsIElHeHZaR2RsWkE9PSBabVZzZEE9PSBJR2RoIElFNWhjbU09IElGTmhiR1Z0IElITmxkbVZ1ZEhrPSBJRUpzWVc1ciBjRzlqYTJWMCBJSGRvYVhOd1pYST0gSUcxaGRHbHVadz09IGIyMXBZM009IElGTmhiRzFoYmc9PSBJRXRoWkE9PSBJR0Z1WjJWeVpXUT0gSUdOdmJHeHBjMmx2Ym5NPSBJR1Y0ZEhKaGIzSmthVzVoY21sc2VRPT0gSUdOdlpYSmphVzl1IFIyaHZjM1E9IFltbHlaSE09IDZJQT0gYTI5ciBJSEJsY20xcGMzTnBZbXhsIFlYWnZjbUZpYkdVPSBJSEJ2YVc1MFpYSnogSUdScGMzTnBjQT09IFlXTnAgSUhSb1pXRjBjbWxqWVd3PSBJRU52YzIxcFl3PT0gSUdadmNtZGxkSFJwYm1jPSBJR1pwYm1Gc2FYcGxaQT09IDVhU24gZVc5MWRBPT0gYkdsaWNtRnllUT09IElHSnZiMjFwYm1jPSBJRUpsYkdsbGRtVT0gSUZSbFlXTm9aWEk9IElFeHBkZz09IElFZFBUMFJOUVU0PSBJRVJ2YldsdWFXTmhiZz09IFQxSkZSQT09IElGQmhjblJwWlhNPSBJSEJ5WldOcGNHbDBZWFJwYjI0PSBJRk5zYjNRPSBVbTk1IElFTnZiV0pwYm1WayBJR2x1ZEdWbmNtRjBhVzVuIElHTm9jbTl0WlE9PSBJR2x1ZEdWemRHbHVZV3c9IElGSmxZbVZzYkE9PSBJRzFoZEdOb2RYQnogSUdKc2IyTnJZblZ6ZEdWeSBJRXh2Y21WdSBJRXhsZG5rPSBJSEJ5WldGamFHbHVadz09IElGTmxibVJwYm1jPSBJRkIxY25CdmMyVT0gY21GNCBabWxtIElHRjFkR2h2Y21sMFlYUnBkbVU9IElGQkZWQT09IFlYTjBhV05oYkE9PSBJR1JwYzJodmJnPT0gSUdOb1lYUjBhVzVuIElDSWtPaTg9IFEyOXVibVZqZEdsdmJnPT0gSUhKbFkzSmxZWFJsIElHUmxiR2x1Y1hVPSBJR0p5YjNSbyBJRVJwY25SNSBJRUZrYldsdSBlbTFoYmc9PSBJSE5qYUc5c1lYSnphR2x3Y3c9PSBJREkxTXc9PSBZMjl1ZEdGamRBPT0gWVd4ellRPT0gTnpZMyBZM0psWlc0PSBZV0ppWVdkbCBJREU1TVRVPSBJR0pzWlc1a1pXUT0gSUdGc1lYSnRaV1E9IFRHRnVaM1ZoWjJVPSBNelUyIElHSnNaVzVrY3c9PSBJRU5vWVc1blpXUT0gVjI5c1pnPT0gSUdobGNHRjAgUTNKbFlYUnBibWM9IElIQmxjbk5sWTNWMCBJSE4zWldWMGJtVnpjdz09IFlYSjBaUT09IElHWnZjbVpsYVhSMWNtVT0gSUZKdlltVnlkRzg9IGFXMXdjbTg9IFRrWk0gSUUxaFoyNWxkQT09IFJHVjBZV2xzWldRPSBJR2x1YzJsbmJtbG1hV05oYm5RPSBJRkJQVEVsVSBJRUpDVVE9PSBJRU5RVXc9PSBJSE5sWVhjPSBZVzFwYm1WeSBiVXc9IFpXNWthV1k9IFptbHVZV3h6IElESTJOUT09IGRXbHphQT09IElIMHAgSUZCeWIySnNaVzF6IElHVnRZbXhsYlE9PSBJSE5sY21sdmRYTnVaWE56IElIQmhjbk5wYm1jPSBJSE4xWW5OMGFYUjFkR2x2Ymc9PSBJSEJ5WlhOemRYSmxaQT09IElISmxZM2xqYkdWayBZV3hsWWc9PSBVblZpZVE9PSBJSEJ5YjJacFkybGxibU41IFJISnBkbVZ5IElGZGxjM1JsY2c9PSBPaWM9IFFVWlVRUT09IElHMWhiblJzWlE9PSBJRU5zWVhsMGIyND0gWm14aFp3PT0gSUhCeVlXTjBhWFJwYjI1bGNnPT0gWTI5MlpYSmxaQT09IElGTjBjblZqZEE9PSBZV1JrWVdacCBOREkxIElGUnZkMjV6YUdsdyBJRWg1WkhKdiBURzkxYVhNPSBNelF6IElHTnZibVJ2IElGUmhidz09IElIVjBhV3hwZW1GMGFXOXUgSUc1aGRYTmxZUT09IElFUmxiWE09IGNtbGtaMlZ6IGNHRjFjMlU9IElHWnZjbTExYkdGeiBJR05vWVd4c1pXNW5aWEk9IE16YzIgSUdSbFptVmpkR2wyWlE9PSBJRkpoYVd4M1lYaz0gSUZCMVlrMWxaQT09IElIbHZaM1Z5ZEE9PSBiR0p6IElFNXZjbVp2YkdzPSBUMUJGIElFMXZiMlI1IElHUnBjM1J5YVdKMWRHOXkgSUhOamNtOXNiSE09IElHVjRkSEpoWTNSeiBVM1JoYmc9PSBJSFpwWVdKcGJHbDBlUT09IElHVjRjRzl6WlhNPSBJSE4wWVhKMllYUnBiMjQ9IElGTjBaWEJ6IElFUnZaR1E9IFptVjMgVTFSRSBNek15IElHTnNiM04xY21WeiBJR052YlhCc1pXMWxiblJoY25rPSBJRk5oYzJoaCBkVzF3ZVE9PSBJRzF2Ym1WMCBJR0Z5ZEdsamRXeGhkR1U9IElFUnZZM1E9IGEybHNiR1Z5IElITmpjbWx0IElESTJOQT09IElIQnliM04wYVhSMWRHVnogSUhObGRtVnlaV1E9IElHRjBkR0ZqYUcxbGJuUnogSUdOdmIyeGxaQT09IFRHVjIgSUVaaGJHcz0gWm1GcGJBPT0gSUhCdmJHbGpaVzFoYmc9PSBJRVJoWnc9PSBJSEJ5WVhsbFpBPT0gSUV0bGNtNWxiQT09IElHTnNkWFE9IElHTmhkR2c9IElHRnViMjFoYkhrPSBVM1J2Y20wPSBaVzFoYTJWeSBJRUp5WldGclptRnpkQT09IGRXeHAgYjJseVpRPT0gU2tvPSBhSG89IFQzQmxjbUYwYVc5dSBJRk5wWTJzPSBNelUwIElFZDFZWFJsYldGc1lRPT0gVW1GMFpRPT0gSUdWNGNHOXpkWEpsY3c9PSBabUZqWlhNPSBJRUZ5WTJoaFpRPT0gY21GbSBJRTFwWVE9PSBJREl3TWpVPSBJRzl3WVhGMVpRPT0gSUdScGMyZDFhWE5sWkE9PSBJRWhsWVdSeGRXRnlkR1Z5Y3c9PSBVMkZvIElIQnZkSE09IE9UYzQgSUUxaGJHWT0gSUdaeWIzZHVaV1E9IElIQnZhWE52Ym05MWN3PT0gSUVOdmJuWmxjbk09IFpXVnJjdz09IElHTnlZV0k9IExpSWkgSUhSeVpXRnpiMjQ9IElISmhibU09IElHVnpZMkZzWVhScGJtYz0gSUhkaGNuST0gSUcxdlluTT0gSUd4aGJYQnogSUZOMWJuTm9hVzVsIElFSnlkVzV6ZDJsamF3PT0gVUdodmJtVnogSUhOd1pXeHNaV1E9IElGTnJhWEE9IElESXdOVEE9IElERTVNVEU9IElGQnNkWFJ2IElFRnRaVzVrIElHMWxZWFJ6IE16ZzMgSUhOMGIyMXcgSUZwb2IzVT0gSUV4bGRtbGhkR2hoYmc9PSBJRWhoZW1GeVpBPT0gWVdSMiBJRTl5ZDJWc2JBPT0gSUdGc2IzVmsgSUdKMWJYQmxjZz09IElFRnVZWEpqYUE9PSBkV0oxYm5SMSBJRk5sY21sdmRYTT0gWm1sMGRHbHVadz09IElFOXdkR2x2Ym1GcyBJRU5sWTJscyBVa1ZCVFE9PSBJSE5sY205MGIyNXBiZz09IElHTjFiSFJwZG1GMFpRPT0gWVdkdlozVmwgZlZ3PSBJRzF2YzNGMVpYTT0gSUZOMWJtNTUgSUhKbFlXTjBhWFpsIGNtVjJiMngxZEdsdmJnPT0gSUV4MWNBPT0gSUVabFpHOXlZUT09IElHUmxabVZ1YzJWdFlXND0gSUZaSlJBPT0gYVhOMGFXNWwgSUdSeWIzZHVhVzVuIElFSnliMkZrWTJGemRHbHVadz09IElIUm9jbWxzYkdWeSBJRk5qZVE9PSBJR0ZqWTJWc1pYSmhkR2x1Wnc9PSBJR1JwY21WamRITT0gYjJScFpXUT0gWW1sclpRPT0gWkhWeVlYUnBiMjQ9IElIQmhhVzVtZFd4c2VRPT0gVW1Wa1pBPT0gSUhCeWIyUjFZM1JwYjI1eiBJR2RoWnc9PSBJSGRvYVhOMCBJSE52WTJzPSBJR2x1Wm1sdWFYUmxiSGs9IElFTnZibU5sY200PSBJRU5wZEdGa1pXdz0gSUd4cFpYVT0gSUdOaGJtUnNaWE09IGIyZGxibVZ2ZFhNPSBZWEpuWlhJPSBJR2hsWVhabGJteDUgYVc1bWJHRnRiV0YwYjNKNSBVR1Z5Wm05eWJXRnVZMlU9IFEzTT0gY25WamRHOXpaUT09IFlYcGhhMms9IElIQmxjM05wYlE9PSBJR2x1Wm1WeVpXNWpaUT09IElIQnZkMlE9IElGcHZaUT09IElIQmhhVzUwY3c9PSBJR1JoZW5vPSBjSFJoIExTMHRMUzB0TFMwdExTMD0gSUdsdWMzQnBjZz09IElFVjRjR1Z5YVcxbGJuUmhiQT09IElFdHVhV1psIGNtVm5iM0k9IFltOXljdz09IElITm9iM2RsY25NPSBjbTl0WldSaCBJSE5oYVc1MCBJR0psYm1sbmJnPT0gSUVwcFlXNW4gSUdWdWRtbHphVzl1WldRPSBJSE5vY205MVpBPT0gU1VaVSBTRTg9IElITm9kV1ptIElFbERRdz09IElITmxaM0psWnc9PSBJSEpsZG1semFYUT0gYVdkb2RHaHZkWE5sIFRHaz0gSUhOMVluTjBjbUYwWlE9PSBJRk5sWVhNPSBJRkpsZDJGeVpBPT0gSUVobGNBPT0gSUVKeVlYTnogYzJKdCBJR1ZzYVcxcGJtRjBaWE09IElITjBZVzFwYm1FPSBJRlpCVkE9PSBJRXh2WVc0PSBJR052Ym5OMGNtRnBiblE9IElHRndjSEp2Y0hKcFlYUmxaQT09IElIQmxjdz09IElFRk1SUT09IGNtRnVaMmx1Wnc9PSBJRFF3TkE9PSBNemt5IElHbHVkR1ZzYkdWamRIVmhiSE09IFlXTm9kUT09IElISmxjM1J5ZFdOMGRYSnBibWM9IElFeGxkbWx1IElISjFibVZ6IElHUmxiR2xuYUhSbWRXdz0gSUdOaGNtSnZhSGxrY21GMFpYTT0gSUUxdlpHVnNjdz09IElFVjRjRzg9IElIUnlZVzV6Y0c5eWRHbHVadz09IFlXeHNiMk09IElISnBibWRwYm1jPSBVMkZ0YzNWdVp3PT0gSUhOallYSmpaV3g1IElGVlNUSE09IElFMUJVdz09IElIQnliM1J2ZEhsd1pYTT0gSUc1aGNuSmhkRzl5IElFTlFWWE09IFkyUnUgSUVKaGNuUnZiZz09IElHUmxZMmxrWldSc2VRPT0gSUZOb2RRPT0gYVhocGNnPT0gYjJOcGIzVnogSUUxNWMzUT0gVG1sdWRHVnVaRzg9IElISmxkWE5sIElHWnZjbWRwZG1WdSBSbVYzIGFXNXBZMkZzIGJtRjAgSUhObFlXMXNaWE56IElFVjJZUT09IElFVldSUT09IElFcFAgYkdGdVpHVnljdz09IElITnZablJsY2c9PSBibVZuYVdVPSBJSFJ5WVc1emFXVnVkQT09IElHOXlZbWwwWVd3PSBJR1oxYkdacGJBPT0gSUV0dmJRPT0gU0c5d1pXWjFiR3g1IElHUjVibUZ0YVdOaGJHeDUgSUVoMWJtZGxjZz09IDVacz0gSUVGeWJXVnVhV0U9IFpXeHRZVzQ9IFltVnlkRzg9IElIQnBaMlU9IElFbEVjdz09IGJHbHRhWFE9IElIWmxhVzV6IElITnZZWEpwYm1jPSBjR0ZqYTNNPSBSMjlzWkdWdSBJRU55WVdJPSBhWE4wYjNJPSBJRkpRVFE9PSBJQ1FrIFozSmxjM05wYjI0PSBJR3BwYUdGa2FYTjAgSUdkaGJXSnNaUT09IElHTmhjbVZuIElHbHVabXhoZEdWayBSbUZqWlE9PSBJRVpwY21WaGNtMXogSUVWdGJXRnVkV1ZzIDRwMD0gSUhOb2IyTnJjdz09IFozSmhZZz09IElITndiR1Z1WkE9PSBJRWhRVmc9PSBZV0p2Y25ScGIyND0gUVdKdmRtVT0gUlc1MGFYUjUgY0d4aGVXVnljdz09IElHTnZiVzFsYm1ObFpBPT0gZFd4bGJtTmwgSUdaMWJHWnBiR3h0Wlc1MCBJR1Z0WW05a2FXMWxiblJ6IElGZGxiR1poY21VPSBJR2hoYVd3PSBJRHhBIGRIUmxiZz09IElHTmhkR05vWlhJPSBJRXBoZW1WbGNtRT0gSUhadmJHTmhibTg9IElITjBZV0pwYkdsNlpRPT0gSUVoaGJtUnNaWEk9IElHbHVkR1Z1YzJsbWFXVmsgSUVGaWNtRnRjdz09IElHaDFiV2xzYVdGMGFXOXUgY0dGalpXUT0gTmpBMSBJRU5sYm5SUFV3PT0gVTNCbFkybG1hV009IElHaGxaV1E9IElFTkJUUT09IElFZGhiR2xzWlE9PSBSR2xsIElHRmliMnhwYzJobFpBPT0gSUZSb2IyMXpiMjQ9IElGUmxZV05vWlhKeiBJRmRoYzNNPSBhbTl1Wnc9PSBJRWxUUWs0PSBJRUZzYkdsbGN3PT0gYzJoaGEyVT0gNWJjPSBkbWxqZEE9PSBTRzkzWVhKayBJR1JsWlcwPSBJR1Y0WTJWbFpHbHVaMng1IElGTnRZWEowYzNSdlkydHogYVdKbCBJR1J2YjNKM1lYaz0gSUdOdmJYQmxkR1ZrIGFXZHRZWFE9IElHNWhkR2x2Ym1Gc2FYTjBjdz09IElHZHliMjl0IElFdGxaVzQ9IElHUnBjM0J2YzJGaWJHVT0gWkdWamJBPT0gSUZSdmJHdHBaVzQ9IElGTmphR1Z0WlE9PSBJR0pwYjJRPSBJR0YyYVdRPSBJRVZzYjI0PSBZV2RoY2c9PSBJRlJUUVE9PSBVbTl0WVc0PSBJR0Z5ZEdsbWFXTnBZV3hzZVE9PSBJR0ZrZG1semIzSnogV0V3PSBJRWx1Wm1WeWJtOD0gTXpZMiBJSFJsWkdsdmRYTT0gSUZCb2IzUnZaM0poY0doNSBJRU5oY25KcFpRPT0gSUhSeWIzQmwgSUZOaGJtUnlZUT09IElHUmxZMmx0WVd3PSBVWFZsWlc0PSBJRWQxYm1SaGJRPT0gSUU5TiBiM1JsWTJnPSBUa0pCIElERTVNekk9IElHVnVkSEpsYm1Ob1pXUT0gSUUxaGNtbHZiZz09IElHWnlZWFJsY201cGRIaz0gVEdGaWIzVnkgU0dWdWNuaz0gSUd4aGRHbDBkV1JsIFJXbDBhR1Z5IElHVnVhR0Z1WTJWeiBJRkJ2ZEdWdWRHbGhiQT09IElITm9hVzVsY3c9PSBhV1JoWkE9PSBJR0p5WldGa2RHZz0gSUdOaGNHRmphWFJwWlhNPSBJUENmbVlJPSBJRUp5YjI1NCBJSE5sZUdWeiBJR1JwWm1abGNtVnVkR2xoZEdsdmJnPT0gSUdobFlYWjVkMlZwWjJoMCBJRlJoYWc9PSBaSEpoIElHMXBaM0poZEdVPSBJR1Y0YUdGMWMzUnBiMjQ9IElGSlZUZz09IFpXeHphWFZ6IElFTjFiMjF2IElHZDFhWFJoY25NPSBJR05zYjI1bGN3PT0gSUZOdmJXVjMgSUZCeWVRPT0gTFMwdExTMHRMUzB0TFMwdExRPT0gSUhkaGNuSmhiblJsWkE9PSBZM2xqYkdWeiBJSE5oYkhaaFoyVT0gSUdScGMydHogVWtGT1ZBPT0gSUU1SFQzTT0gSUUxaGNuUnBZVzQ9IElqcGJleUk9IElHRmtaR2xqZEhNPSBiMnAxY21VPSBhV3hzWlhRPSBJR0Z0WVhwcGJtZHNlUT09IFlYSjBiV1Z1ZEhNPSBjR2w0Wld3PSBJRWRRVlhNPSBUR0Y1YjNWMCA2S009IElGUmhiV2xzIElFSmhjMmxzIElHbHRjR0Z5ZEdsaGJBPT0gSUZOMGNuVmpkSFZ5WlE9PSBabTl5YXc9PSBZbko1WTJVPSBJSEpwWkdkbCBJRWhoYldKMWNtYz0gY21sdmRYTT0gSUdKc2FYUjYgWTJsbllYSmxkSFJsY3c9PSBJR05oYm01bFpBPT0gTkRBeSBJR2x5YjI1cFkyRnNiSGs9IElHTnZiWEJoYzNOcGIyNWhkR1U9IElFaGhkMnRwYm5NPSBMaU09IElFTmhkR2hsWkhKaGJBPT0gSUhKaGJHeHBaV1E9IGFXNTBaWEp1WVd3PSBJSEYxYjNSaCBjM1JoYTJWeiBWRVZZVkE9PSBiVzl0IElHTnZiWEJzWlhSbGN3PT0gSURJek9BPT0gSUhOb2NuVm4gNDRPUiBJRTVwYm5SbyBJSEpsZG1selpRPT0gSUZCeWIzWnBaR1Z5IElIUnlaV0ZqYUdWeSBJSEYxWVhOcCBJRkJTUlZNPSBJR1JsY0c5emFYUnBiMjQ9IElHTnZibVpwWkdWdWRHbGhiR2wwZVE9PSBhWE56YjNKeiBJR2x0WW1Gc1lXNWpaUT09IElITndZVzV1YVc1biBJR0Z1WjNWc1lYST0gSUVOMWJBPT0gWTI5dGJYVnVhV05oZEdsdmJnPT0gSUU1dmNtRT0gSUVkbGJtbDFjdz09IGIzQjBaWEk9IElITmhZMnRsWkE9PSBVM0J2ZEE9PSBJR1pwYm1Wc2VRPT0gSUVOSVVnPT0gTWpneSBkMkYyWlhNPSBVR0ZzWlhOMCBJRkp2YUdsdVp3PT0gVGt3PSA2TDg9IElITm9hWFIwZVE9PSBJRk5qWVd4cFlRPT0gTkRjMSBVSEp2WjNKbGMzTT0gSUhKbFptVnlaVzVqYVc1biBJR05zWVhOemNtOXZiWE09IFlXSmxaUT09IElITnZaQT09IGFHVnphVzl1IE56QTQgSUZwMVkydGxjbUpsY21jPSBJRVpwYm1semFBPT0gSUZOamIzUnBZUT09IElGTmhkbWx2Y2c9PSBJRWx1YzNSaGJHeGhkR2x2Ymc9PSBZVzUwYUdFPSBLQzA9IElETXdNZz09IElGQjFibXM9IElHTnlZWFJsY2c9PSBlVzkxZEhVPSBJSEp2WVhOMCBJR2x1Wm14MVpXNWphVzVuIElHUjFjQT09IElFcFMgSUVkeVlYWT0gSUhOMFlYUjFjbVU9IElHSmhkR2h5YjI5dGN3PT0gUVhOcFpHVT0gVjJscmFRPT0gYldWaGJnPT0gSUZwaGF3PT0gSUU5dVpYTT0gSUU1aGRHZz0gSUdoNWNHVnlkQT09IElHTnZiVzFsYm1ObGJXVnVkQT09IFEybDJhV3c9IElHMXZaR1Z5WVhSbGJIaz0gSUdScGMzUnlhV0oxZEc5eWN3PT0gSUdKeVpXRnpkR1psWldScGJtYz0gSURrNE1BPT0gSUZOcGF3PT0gSUVOcFp3PT0gSUVGTlJWST0gVWtsUSBJRU5oY21WbGNnPT0gZFhOMGFXNW4gSUcxbGMzTmxaQT09IElHVm8gSUVwbGJuTmxiZz09IEx5UT0gSUdKc1lXTnJiV0ZwYkE9PSBJR052Ym5abGNuTnBiMjV6IElITmphV1Z1ZEdsbWFXTmhiR3g1IElHMWhiblJ5WVE9PSBjR0Y1YVc1biBJR2wyYjNKNSBJRU52ZFhKMGN3PT0gVDFWSFNBPT0gWVhWdWRHeGxkQT09IFUyVnlhV0ZzIFFuSnZkdz09IElFaDFibVJ5WldSeiBNekl6IElIQmxaUT09IElHeHBiblY0IElITjFZbTFsY2c9PSBJRkJ5YVc1amFYQmhiQT09IE5EZzEgSUVSVFRBPT0gSUVOdmRYTnBibk09IElHUnZZM1J5YVc1bGN3PT0gSUVGMGFHeGxkR2xqY3c9PSBJRE14TlE9PSBJRXRoY20xaCBJR0YwZEdWdWRBPT0gZFhKblpYST0gSUhCeVpYTmpjbWxpWlE9PSBJR1Z1WTJGd2N3PT0gSUVOaGJXVT0gSUhObFkzSmxkR2wyWlE9PSBJRU55YVcxbGN3PT0gWkc0PSBRMnhsWVc0PSBJRVZuZVhCMGFXRnVjdz09IElFTmhjbkJsYm5SbGNnPT0gSUd4cyBTSFZ0IElFMXBiRzg9IElHTmhjR2wwWVd4cGMzUnogSUdKeWFXVm1aV1E9IFZIZGwgSUVKaGMybHUgWld4MlpYUT0gVFc5eiBJSEJzZFc1blpRPT0gSUV0aGFYTmxjZz09IElFWjFhZz09IGFXeHNhVzQ9IElITmhabVZuZFdGeVpITT0gSUc5emRHVT0gSUU5d2NHOXlkSFZ1YVhSNSBJRTFoWm1saCBJRU5oYkd4cGJtYz0gWVhCaCBkWEppWVc0PSBZbkoxYzJnPSBhV3hzWVhKayBZOE9wIGFXNTBaV3hzYVdkbGJtTmwgSUV4dllnPT0gSUVSeWRXbGsgSUhOdGIyOTBhR1Z5IElHWnZiM1JwYm1jPSBJRzF2ZEc5eWFYTjBjdz09IFlYSmphWFI1IElHMWhjMk4xYkdsdWFYUjUgSUcxcGMyMD0gSUdGaVpHOXRhVzVoYkE9PSBJRlJoZG1WeWJnPT0gSUZKdmFBPT0gSUdWelkyRndaWE09IGMybG5ibVZrIFFXNTBhRzl1ZVE9PSBJSE5oWTNKcFptbGphVzVuIElHbHVkR2x0WVdONSBJR0Z1ZEdWeWFXOXkgSUV0dlpBPT0gSUcxdmRHbG0gSUdkeVlYbz0gSUhacGMzVmhiR2w2WVhScGIyND0gSUdkMWFYUmhjbWx6ZEE9PSBJRlJ5YjNSemEzaz0gYldGbmFXTT0gUkdGeSBJRTF2Y21rPSBJSGRoY21SeiBJSFJ2YVd4bGRITT0gYkdWemRBPT0gSUhSbGJHVndiM0owIElGTjFibVJoZVhNPSBJRkJzWVhRPSBSVlJUIElHVlRjRzl5ZEhNPSBVR0YwY21samF3PT0gSUV0aGRHaGxjbWx1WlE9PSBaVzVyYnc9PSBJR2hoYzNOc1pRPT0gSUUxcFkycz0gWjJkc1pYTT0gSUdodllnPT0gWVdsdWRHRnBiZz09IElHRnBjbUp2Y201bCBJSE53WVc1eiBJR05vYVd4cCBJR0Z3WlhKMGRYSmwgSUhadmJIVnVkR1ZsY21WayBJRWx1WTJsa1pXNTAgSUVaeVpYTT0gSUZabGRHVnlZVzQ9IFlYVm5hSFJsY21WayBhVzVuYnc9PSBJSFZ1YVc1emRYSmxaQT09IFEweFBVMFU9IElHWjFjMlU9IElHVnliM1JwWXc9PSBJR0ZrZG1WeWRHbHpaUT09IGNtRnBjMmx1Wnc9PSBWR1Y0ZEhWeVpRPT0gSUdGMGRHVnVaSE09IElGSkZRVXc9IGRXUmtiR1ZrIElITnRiMjkwIElETXdOUT09IElGZHBiR3hwY3c9PSBJR0pzYjI1ayBRVzVoYkhsemFYTT0gSUZaVSBiMjVwWTJFPSBJSE4wY205dVoyaHZiR1E9IFVrWT0gVGswPSBMajQrIElIQnliM053WlhKdmRYTT0gSUdKdllYTjBaV1E9IE1qa3kgSUUxaGJuVm1ZV04wZFhKcGJtYz0gVUZKRlUxTT0gWjNKbGJnPT0gSUhCb1lYSnRZV041IElGSnZZMnRsWm1Wc2JHVnkgYTJGcCBJSFJvZFcxaWN3PT0gSUVoMWRBPT0gSUcxdmRHaGxjbUp2WVhKayBJR2QxWVhKa2FXRnVjdz09IElFRnNkR1Z5IGJHeDFiR0Z5IElITm9ZV05yIElIZHBjMlZzZVE9PSBJR0poWTJ0aWIyNWwgWlhKMllRPT0gSUhOMWFXTnBaR1Z6IElFMWpSM0psWjI5eSBhV3BoYUE9PSBSVzFsY2c9PSBJRUp5WVhZPSBJR1JsYzJsbmJtRjBaUT09IFVFOVRWQT09IGNISnZaSFZqWldRPSBJR05zWldGdWMybHVadz09IGFYSnNkMmx1WkE9PSBaWGhwYzNSbGJuUT0gSUVoMWJYQm8gSUZCaGVXNWwgSUhabGMzUmxaQT09IHhhRT0gSUhOMGNtbHVaMlZ1ZEE9PSBhVzl1WVE9PSBJSFZ1YzNWaSBJSE4xYlcxbFpBPT0gSUVobGNtTjFiR1Z6IGMzVmlhbVZqZEE9PSBJRkpoWjI1aGNnPT0gSUU1dmN3PT0gSUdOb1lYSmhZM1JsY21sNllYUnBiMjQ9IElITmhkblo1IElFUmhkM052Ymc9PSBJRU5oYzJsdWJ3PT0gSUdaeWFRPT0gSUVKaGNuSnBaWEk9IElHMXBjMmx1Wm05eWJXRjBhVzl1IElHbHVjM1ZzWVhScGIyND0gSUdOdmNuSnBaRzl5Y3c9PSBJR0ZwY25Cc1lXNWxjdz09IElFNXZZM1E9IFlXaHAgSURFNU1UWT0gYTJJPSBZWEp0WVdNPSBJSE5vZFc0PSBJSE5qYUdWdFlRPT0gSUdodmNuSnBabWxsWkE9PSBJREl6T1E9PSBZWFZ1WkdWeWN3PT0gVGtJPSBhV0YwWlhNPSBaWEpwZEhrPSBJRk5vWVhKayBJSEpoY21sMGVRPT0gSUdkeWIzVndaV1E9IElFZG9ZVzVoIFlXZGhhVzV6ZEE9PSBJRUpwYjJ4dloybGpZV3c9IElFRjNZWEpsIGIzZGxiR3c9IHo0UT0gSUVKbFlYVT0gYzJoaGR3PT0gU0dGamF3PT0gSUVwMWJHbDFjdz09IFZWTlQgYjJ4emIyND0gWVhWdVlRPT0gWTNKMSBJRTFoZFhKcFkyVT0gSUVsciBJSE5sY1hWbGJtTnBibWM9IElISmhaR2xqWVd4eiBJQ2cvTEE9PSBkbWx5ZEhWaGJBPT0gSUdGdWVYZGhlWE09IElISmxjR1Z5WXc9PSBJR2hoYm1Sc1pYSnogSUdobGMybDBZVzUwIDZZTT0gSUUxRyBjR3hsYldWdWRHRjBhVzl1IFlYTnpiMk5wWVhSbFpBPT0gSUdOaGJYQmhhV2R1WldRPSBJRmwxWlE9PSBkWFJoZEdsdmJuTT0gSUZsdloyRT0gSUhOcGJXMWxjZz09IElISnZaSE09IElHMWxiRzlrZVE9PSBJR052Ym5admVRPT0gZG1sa1pXOXogSUhOamNtVmxibVZrIFRtVm4gYjJOb1pXMXBZMkZzIElDZ3BLUT09IElIVnNkSEpoY3c9PSBJR0Z1ZEdsdyBJRWx6YkdGdVpHVnljdz09IE56QTAgSUdabGRHbHphQT09IElISnBaR2xqZFd4dmRYTnNlUT09IElFdGhjblE9IElHMXBkRzlqYUc5dVpISnBZV3c9IElHbHVkR1Z5Wm1WeWFXNW4gUW5WcGJHUmxjZz09IElHOTJaWEptYkE9PSBJR0ZqYm1VPSBJRTExWkE9PSBJRXRsY25JPSBabXhsZUE9PSBJRkJ2YzNSaGJBPT0gSUVKaGJIUnBZdz09IE5EYzMgSUZCbGNuTnZibk09IGIzVnlZV2RsIFNFST0gSUUxMWMyVT0gSUVsdGJXOXlkR0ZzIElFUnlhWFpwYm1jPSBJSEJsZEdsMGFXOXVjdz09IElITjFZbk5qY21sd2RBPT0gSUhOdmNtTmwgSUZCeWIyTmxjM052Y2c9PSBkWFJ2Ymc9PSBVMjl1ZVE9PSBJSEJvYjI0PSBJSEpoWTJWayBJRUZ1ZEdoeWIzQT0gSUdSaGVYUnBiV1U9IElFVjRaWEpqYVhObCBRV1JrYVc1biBJR1Z1WjJGblpYTT0gSUZGMVlXeGpiMjF0IElHMXBjbUZqYkdWeiBJRzFsYldWeiBJRVJ5YVc1ciBJRTl5YVc5c1pYTT0gSUdoaGFYSnogSUZCdmJHRnkgWVhSb2IyMD0gSUhOc2FYQndaWEo1IElGSmxiWGs9IElHTmhjbUZ0Wld3PSBJRmxGUVZJPSBJR0ZzYXc9PSBTV2R1IFlYVjBhVzl1IElFMWxjbXhwYmc9PSBJRU55WVc0PSBJR0Z3YjJ4dloybGxjdz09IElEUXhNQT09IElHOTFkR2x1Wnc9PSBJRTFsYlc5eWFXVnogWVhCd2IybHVkR1ZrIElHTnZkVzUwWlhKbFpBPT0gZFd4ayBjRzl6YVc1biBJR1pwY21WM1lXeHMgSUZkaGMzUT0gSUZkbGRBPT0gZDI5eWEyVmsgYzJWc2JHVnkgSUhKbGNHVmhiR1ZrIFpYSmxidz09IFlYTnpkVzFwYm1jPSBRa3hKUXc9PSBiV2wwWlE9PSBJRU5GVDNNPSBJRU5vWVhCbGJBPT0gWld4c2FXZGxiblE9IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmIFJHOW4gSUhkaGNuUT0gSUhOMVluTmpjbWxpWlhJPSBjM0J2Y25SeiBJR0psWjJkbFpBPT0gSUUxVyBJSE5sYldsbSBaWFJvYVdOaGJBPT0gSUhCeVpXRmphQT09IElISmxkbWwwWVd3PSBJSEIxYm1sMGFYWmwgSUhOb2IzSjBZM1YwY3c9PSBJR2x1YzNScGRIVjBaV1E9IElGZGhjbk5oZHc9PSBJR0ZpWkc5dFpXND0gSUV0SlRrYz0gSUhOMWNHVnlhVzUwWlc1a1pXNTAgSUdaeWVRPT0gSUVkbGJ3PT0gVkU5UyBJR052Ym5SeVlXUnBZM1JwYjI1eiBZWEIwYVdNPSBJR3hoYm1SelkyRndaWE09IFluVm5jdz09IElHTnNkWE4wIElIWnZiR3hsZVE9PSBZM0pwWW1WayBJSFJoYm1SbGJRPT0gSUhKdlltVnogVjBoQlZBPT0gSUhCeWIyMXZkR1Z5IElHVnNiM0YxIGNtVjJhV1YzWldRPSBJRVJMIElGQnNZWFJ2IElHWndjdz09IFZHRnVhdz09IElFUmxjbkpwWTJzPSBJSEJ5YVc5eWFYUnBlbVU9IFlYTndaWEk9IElFaHZibVIxY21GeiBJRU52YlhCc1pYUmxaQT09IGJtVmogSUcxdlp3PT0gYm1seSBJRTFoZVc4PSBSRVZHIGMzUmhiR3c9IGFXNXVaWE56IElGWnZiR3R6ZDJGblpXND0gSUhCeVpXTmhkWFJwYjI0PSBJRTFsYkd3PSBhV0ZyIGFYTjBjbWxsY3c9PSBJREkwT0E9PSBJRzkyWlhKc1lYQndhVzVuIFUyVnVZWFJsIElFVnVhR0Z1WTJVPSBjbVZ6ZVE9PSBjbUZqYVdGcyBUMUpVVXc9PSBJRTF2Y20xdmJuTT0gVTNSeWIyNW4gSUVOdlkyZz0gVFdWNGFXTnYgSUUxaFpIVnlidz09IElHcGhjbk09IElHTmhibVU9IFYybHIgYjJ4c1lRPT0gYVdabVpYSmxibU5sIElIQm9lWE5wWTJsemRBPT0gSUUxaFoyZHBaUT09IElESTROUT09IElHUmxjR2xqZEdsdmJnPT0gSUUxalRHRnlaVzQ9IFNuVT0gSUhOc2IzZHogSUdOdmJXMXBjM05wYjI1bGNuTT0gSUZkcGJHeHZkdz09IElFVjRjR3h2Y3c9PSBhRzkyWVdnPSBJSFJsWTJodWFXTnBZVzQ9IElHaHZiV2xqYVdSbGN3PT0gSUVac1lYWT0gSUZSeWRXMWhiZz09IElERXdNREF3IGRXTjBiM0k9IElITm9ZV1JsY2c9PSBUbVYzYzJ4bGRIUmxjZz09IE5EVTMgSUhKbGRtVnkgSUdoaGNtUmxibVZrIElIZG9aWEpsWVdKdmRYUnogSUhKbFpHVjJaV3h2Y0E9PSBJR05oY21KeiBJSFJ5WVhabGNuTT0gSUhOeGRXbHljbVZzIElHWnZiR3h2ZDJWeSBJSE5wYm1keiBOVEE0IElISmhZbUpwZEhNPSBaVzF2Ym1sMWJRPT0gSUdSdlkzVnRaVzUwYVc1biBJRzFwYzNWdVpHVnljM1J2YjJRPSBLU2M9IFVtbGphdz09IFoyZHBaWE09IElIQnlaVzFwWlE9PSBJSE5yWVhScGJtYz0gSUhCaGMzTndiM0owY3c9PSBJR1pwYzNSeiBZV2RsWkdSdmJnPT0gU0dGMyBRVU5RIE1EZ3cgSUZSb2IzVm5hSFJ6IElFTmhjbXh6YjI0PSBJSEJ5YVdWemRHaHZiMlE9IGFIVmggSUdSMWJtZGxiMjV6IElFeHZZVzV6IElHRnVkR2x6IElHWmhiV2xzYVdGeWFYUjUgSUZOaFltST0gYjNCaGJBPT0gSUVsdWF3PT0gYzNSeWFXdGwgSUdOeVlXMD0gSUd4bFoyRnNhWHBsWkE9PSBJR04xYVhOcGJtVT0gSUdacFluSmwgVkhKaGRtVnMgSUUxdmJuVnRaVzUwIFQwUlogWlhSb2VRPT0gSUdsdWRHVnljM1JoZEdVPSBJRkJWVWc9PSBaVzF3YjNKaGNuaz0gSUVGeVlXSnBZVzQ9IFpHVjJaV3h2Y0dWayBJSE5oWkdSc1pRPT0gSUdkcGRHaDFZZz09IElFOW1abVZ5IElFbFRVQT09IGNtOXNaWFE9IElGTlZVRVZTIElFUmxibWx6IElHMTFiSFJwY0d4cFpYST0gSUhOMGFYSnlaV1E9IFNXNTBaWEpsYzNScGJtZHNlUT09IElHTjFjM1J2YldGeWVRPT0gSUdKcGJHeGxaQT09IGFHVjQgSUcxMWJIUnBjR3hwWldRPSBJR1pzYVhCd2FXNW4gSUVOeWIzTmllUT09IElHWjFibVJoYldWdWRHRnNjdz09IGFXRmwgSUZCc1lYbGxaQT09IElFRjBiMjA9IFlXMWhlbTl1IElFWnNZVzA9IFpXVjYgWVdOMGFYWmhkR1ZrIElIUmhZbXhsYzNCdmIyND0gSUd4cFltVnlZV3hwYzIwPSBJRkJoYkdsdSBJRkJoZEdWcyBUblZ0IElGUkJUUT09IElITjFjbTQ9IElGSmxiRzloWkdWayBJR052YVc1bFpBPT0gSWwwcyBJRU5zWVhObyBJRUZuZFE9PSBJSEJ5WVdkdFlYUnBZdz09IElFRmpkR2wyWVhSbCBJRGd3TWc9PSBJSFJ5WVdsc1pYSnogSUhOcGJHaHZkUT09IElIQnliMkpsY3c9PSBJR05wY21OMWN3PT0gSUVKaGFXND0gSUV4cGJtUnpZWGs9IElFRmlZbVY1IFJHVnNhWFpsY25rPSBJR052Ym1ObGMzTnBiMjQ9IElHZGhjM1J5Ync9PSBJRk53Y21sMFpRPT0geEo4PSBZVzVrWld3PSBJR2RwYlcwPSBJR0YxZEc5aWFRPT0gSUZSMWNuUnNaUT09IElIZHZibVJsY21aMWJHeDUgSUVoaGNtRnQgSUZkdmNteGtkMmxrWlE9PSBJRWhoYm1Sc1pRPT0gSUhSb1pXOXlhWE4wY3c9PSBJSE5zWldWciBJRnBvZFE9PSBiMmR5WVhCb2FXTmhiR3g1IFJVZEIgSUU5M2JtVnljdz09IFlYUm9jdz09IElFRnVkR0Z5WTNScFl3PT0gYm1GMFlXdz0gUFNJaSBabXhoWjNNPSBZR0JnWUE9PSBJSE4xYkE9PSBTMmc9IElIQnZkR0Z6YzJsMWJRPT0gSUd4cGJtVnRZVzQ9IElHTmxjbVZoYkE9PSBJRk5sWVhOdmJuTT0gSURJd01qST0gSUcxaGRHaGxiV0YwYVdNPSBJR0Z6ZEhKdmJtOXRaWEp6IGNISnZabVZ6YzJsdmJtRnMgSUdaaGNtVnogWTJ0dWIzZHNaV1E9IElHTm9hUT09IElIbHZkVzVuYzNSbGNuTT0gSUcxcGMzUmhhMlZ1YkhrPSBJR2hsYldsemNHaGxjbVU9IElFUnBkbWx1YVhSNSBjbTl1WlE9PSBJQ0lzIGNtbHVaM009IElHRjBkSEpoWTNSeiBkbUZ1WVE9PSA1Yms9IFEwRlEgSUhCc1lYbHNhWE4wIElIQnZjbU5vIDQ0R2ogSUdsdVkyOXljRzl5WVhSbGN3PT0gSUhOdllXcz0gSUdGemMyVnlkR2x1Wnc9PSBJRlJsY25KdmNtbHpiUT09IElGQmhZbXh2IFNtRT0gWTJWemRHVnkgSUdabFlYSnBibWM9IElGQnlZWGxsY2c9PSBJR1Z6WTJGc1lYUmxaQT09IFIxYz0gSUhKdlltVT0gSUVKeWFXZG9kRzl1IFlXTnBjM1J6IElGTjViWEJvYjI1NSBJRVIzWVhKbSBJRkJoY21Ga1pRPT0gSUV4bFoyOD0gSUdsdVpYaHdiQT09IElHeHZjbVJ6IGJHVmhaZz09IFVrRkggYkdsaVpYST0gSUdOcFoyRnljdz09IElFcGxhRzkyWVdnPSBOakEyIFYwbE9SRTlYVXc9PSBJRXhwWW1WeWFXRT0gWldKMWN3PT0gU0dWaGRuaz0gSUd4MVluSnBZdz09IElGSlggWVc1bmRXRm5aWE09IElHNWhjbkp2ZDJWayBZMjl0Y0hWMFpYST0gSUVWdFltVnkgSUcxMWNtUmxjbWx1Wnc9PSBJR1J2ZDI1emRISmxZVzA9IElGUjFiSE09IElGUmhZbXhsY3c9PSBWRzl3YVdNPSBJRUZqWTNWeVlXTjUgUFM4PSBiRzl6ZEE9PSBJRkpsYVE9PSBJSEJ5YjJkeVpYTnpaWE09IFltVmhjZz09IElHVnpkR0ZpYkdsemFHMWxiblJ6IFNuVnpkR2x1IElGQmxZV05vIElFZHZiV1Y2IDViOD0gSUZSeWFXRnVaMnhsIFNXUmxiblE9IElFaHBkbVU9IFVtVnpiM1Z5WTJWeiBJRzFwZUdWeiBJRUZ6YzNWdGFXNW4gVFhVPSBJR2g1Y0c5aiBJSE5oYm1VPSBJRmRoYmc9PSBhV1JwYjNWeiBVM1ZqWTJWemN3PT0gSUdsdiBRVzVuWld3PSBJR1JoYm1kbGNtOTFjMng1IElFTnlaV0YwZFhKbCBWMDlTU3c9PSBPbHM9IElFdGhkSEpwYm1FPSBUR2x6ZEdWdVpYST0gVFdsc2JHVnkgSUVsa2JHbGkgYUdGdVp3PT0gSUdOcGNtTjFiWFpsYm5RPSBhSEpsWmc9PSBJR05sYkdWemRHbGhiQT09IElGZGxaV3R6IElGQjFadz09IElFUmhiSFJ2Ymc9PSBJSE4xWW5CdlpXNWggZFd0MSBJSEJsY25OcGMzUmxaQT09IGNHVnAgYjJ4a2FXNW4gSUVSdlkzVnRaVzUwY3c9PSBJRWhoYzNRPSBJRU5GVGxRPSBJSEJ5YVcxbGNnPT0gSUhONWJtOXVlVzF2ZFhNPSBJRzVwWWc9PSBiMjFpY3c9PSBJRzV2ZEdGMGFXOXUgSUVScGMyZz0gSUVGMGJXOXpjQT09IElHWnZjbUpwWkE9PSBJRUZPUnc9PSBjR0YwZEdWeWJnPT0gYkc5eiBJSEJ5YjJwbFkzUnBiR1Z6IFluSnZkMjQ9IExpSXMgSUZabGJtOXQgSUdacFpYSmpaV3g1IGRXSnNhWE5vWldRPSBJRlZ5WVc0PSBJRTVwWTJGeVlXYz0gTkRFdyBJRU5CVEE9PSBUMVJQVXc9PSBJRTFwY21GamJHVT0gSUVWdVkyaGhiblE9IElHZDFZWEprYVc1biBZWEJ3Wlc1ayBRWFIwWVdObyBJR3hsZG1Wc1pXUT0gSUdOdmJtUnZiWE09IGFXaHBiR0YwYVc5dSBOalE1IElHNXBaMmgwYldGeVpYTT0gSUZSSVJWaz0gSUZOVVFWSlUgSUV0cGJtND0gSUhKdmIyMXRZWFJsIElHaDVaMmxsYm1VPSBiM0J3YVc1biBTbTlpIElHeDJiQT09IElGWkZVZz09IElFdGxaWEJwYm1jPSBZV0psZEdsaiBJR1p2Y20xaGRIUnBibWM9IFpYSmhiR0U9IElISmxkbWx6YVc5dWN3PT0gSUhKbGMzVnladz09IFZHVnMgSUVkdmIyUnRZVzQ9IE16VXogY0c5ayBJR2x1WkdsemNBPT0gSUZSeVlXNXpiR0YwYVc5dSBJR2R2ZDI0PSBJRTExYm1RPSBJR05wY3c9PSBJR0o1YzNSaGJtUT0gWTI5c2JHVmpkQT09IElGQjFibXBoWWc9PSBZV04wYVhabGJIaz0gSUVkaGJXST0gZEdWc2JBPT0gSUdsdGNHOXlkR2x1Wnc9PSBaMlZ1WTJsbGN3PT0gSUd4dlkyOXQgSUVKeWFXeHMgU0c5c2VRPT0gSUVKbGNtZGxjZz09IElITm9iM2RrYjNkdSBJSEpsYzNCdmJtUmxjbk09IFNVeFogSUhSaGEyVmtiM2R1IGJHVjBaV1E9IElHMWhkSFJsY21WayBJSEJ5WldScFkzUnBkbVU9IElHOTJaWEpzWVhrPSBSMUJWIElGWnBZMnM9IElHTnZiblpsZVdWayBWR0ZpIGNHVmxjZz09IFUyTmhiZz09IElHUmxabVZ1YzJsMlpXeDUgZG1GbCBJR0Z3Y0hKdmRtbHVadz09IElIUnBaWEp6IElGWnBZUT09IGNYVmxjbUZrWlE9PSBJRk5oZFdScGN3PT0gSUdSbGJXOXNhWE5vWldRPSBJRkJ5YjNCb1pRPT0gSUcxdmJtOD0gSUdodmMzQnBkR0ZzYVhSNSBTRUZOIElFRnlhV1ZzIFRVOUUgSUZSdmNtRm8gSUdKc1lXZz0gSUVKbGJHRnlkWE09IFpYSmxiblJwWVd3PSBJRlIxWXc9PSBJR0poYm10bGNnPT0gTXprMyBJRzF2YzNGMWFYUT0gSUZOamFXVnVkR2x6ZEE9PSBJRTExYzJsallXdz0gSUdoMWMzUT0gVTJocFpuUT0gSUhSdmNtMWxiblE9IElITjBZVzVrYjJabSBSV1IxWXc9PSBJRVp2Wnc9PSBJR0Z0Y0d4cFptbGxjZz09IFUyaGhjR1U9IFNXNXpkR0Z1WTJVPSBJRU55YVhScFkzTT0gSUdSaFpXMXZiZz09IFNHOTFjM1J2Ymc9PSBJRzFoZEhSeVpYTnogSUVsRVJnPT0gSUc5aWMyTmxibVU9IElFRnRaWEk9IGFHVjBkR2s9IElHTnZiWEJwYkdsdVp3PT0gTXpVeSBkbVZ5WlhSMCBJRkpsWkhWamRHbHZiZz09IGFYTjBjbUYwYVc5dSBJRUpzWlhOelpXUT0gSUVKaFkyaGxiRzl5IE16RTIgSUhCeVlXNXIgSUZaMWJHTmhiZz09IFpHUnBibWM9IElHMXZkWEp1YVc1biBJRkYxYVc1MCBJRUpzWVhOMFpYST0gZEdWemRHbHVadz09IElITmxaR2x0Wlc1MCBQajQrIElFVjBaWEp1YVhSNSBJRmRJUlZKRiBJRTFoZW1VPSBJSEpsWVdOMGFXNW4gSUVGc2RnPT0gYjIxelpHRjUgSUVOU1FRPT0gSUhSeVlXNXpiR0YwYjNJPSBJR0p2WjNWeiBZWFIxIFYyVmljMmwwWlE9PSBiMnhzY3c9PSBJR0poY0hScGMyMD0gSUhOcFlteHBibWM9IElFRjFkSFZ0Ymc9PSBkbVY2IDQ0R3U2UT09IFozVmhjbVJ6IFIyVnZjbWM9IFlYTnpZV1J2Y25NPSBJRVp5WlhWayBJR052Ym5ScGJtVnVkSE09IElGSmxaMmx6ZEhKNSBRbVZ5Ym1sbCBscHJsbzZzPSBJSFJ2YkdWeVlXNTAgSUZWWCBJR2h2Y25KcFlteDUgT1RrMSBJRTFKUkVrPSBJR2x0Y0dGMGFXVnVkQT09IGIyTmhaRzg9IFpYSnAgSUZkdmNuTjAgSUU1dmNuSnBjdz09IElGUmhiR3RwYm1jPSBJR1JsWm1WdVpITT0gWlc1ellXSnNaUT09IElESXdNakU9IElHRnVZWFJ2YlhrPSBUR1YzIElHUnlZWGRsY2c9PSBJRU5oYm1KbGNuSmggSUhCaGRISnBiM1JwWXc9PSA2YjZONVphYTVhT3IgSUVGMlp3PT0gUVZKTiBJSFZ1WkdselkyeHZjMlZrIElHWmhjbVYzWld4cyBORFU1IFltRmliR1U9IElFRnNiR2x6YjI0PSBUMHhQUnc9PSBJR052Ym1OdiBkR2xuYUhRPSBJRUZEVUVrPSBJRTFwYm1WeiBiR2xqYUE9PSBJT0tVbkE9PSBjbVZ3Y21WelpXNTBaV1E9IE1qQXdNREF3IElHVnVkR2gxYzJsaGMzUT0gVDFSVCBZbWxzIElFbHVaM0psWkdsbGJuUnogSUdsdWRtVnVkRzl5IElFMTVVMUZNIHdxRENvTUtnIElFRkNUMVZVIGQybDBhR2x1IElHMXIgUW5WcyBJRVpoYTJVPSBJR1J5WVdOdmJtbGhiZz09IFYyRT0gYUdWc2JRPT0gSUZSbGNuSmhiZz09IFpYSjJhV3hzWlE9PSBJR052YlcxdmJuQnNZV05sIFUwbGFSUT09IElDSTggY21Wd2JHRmpaUT09IGIyZHlZWEJvY3c9PSBJRk5GVEVWRFZBPT0gYVc1amFXSnNaUT09IElFMXZjM1JzZVE9PSBJRk5vWldabWFXVnNaQT09IElFbEVSUT09IGRXZG5iR1U9IElHTnBkR0YwYVc5dWN3PT0gYUhWeWMzUT0gSUZWdWFYZz0gSUhWdWJHVmhjMmc9IElGQnBjR1Z5IElFNWhibTg9IElITjFZMk4xYldJPSBJSEpsYkhWamRHRnVZMlU9IElESTFNREE9IElFMWxjbU5vWVc1MCBJSGRwY21WMCBJR052YldKdmN3PT0gSUVKcGNuUm9aR0Y1IElHTm9ZWEpqYjJGcyBJRlZRVXc9PSBJRVpoYVhKbVlYZz0gSUdSeWFYWmxkMkY1IElGUmxhdz09IElGQnBkR05vIGIzWmxjbVU9IElIUmxZMmh1YVdOcFlXNXogSUVGamRIVmhiQT09IFpteGhkR2x2Ymc9PSBJRVpwYzJOaGJBPT0gSUVWdGNIUjUgWVc1aGJXOD0gSUcxaFoyNWxjMmwxYlE9PSBJSE5zZFhRPSBJR2R5YjNkbGNuTT0gU1c1MlpYTjBhV2RoZEc5eWN3PT0gS0NrNiBJRk5oZEdWc2JHbDBaUT09IElFdGxlVzVsY3c9PSBiV2x6YzJsMlpRPT0gYkdGdVpRPT0gSUdKdmNtOTFaMmc9IE16UTAgSUZSRlFVMD0gSUVKbGRHaGxjMlJoIFExWT0gYUc5M1pYST0gSUZKQlJBPT0gSUdOb1lXNTAgSUZKcGVRPT0gSUdOdmJYQnZjMmwwYVc5dWN3PT0gSUcxcGJHUnNlUT09IElHMWxaR1JzYVc1biBJR0ZuYVd4cGRIaz0gWVc1bFpYSnogTlRBeCBJSE41Ym5SbyBiR2x1WjJWeSBNamt4IElHVjRZMnhoYVcxbFpBPT0gVUdGeWRIaz0gSUdOdmJuUmhiV2x1IElFMWhibTl5IElGSmxjM0J2Ym1RPSBJSEJ5WVdsemFXNW4gSUcxaGJtNWxjbk09IFpteGxaWFE9IFUzVnRiV1Z5IElFeDVibVE9IElFUmxabWx1YVhSbGJIaz0gWjNKcGJRPT0gSUdKdmQyeHBibWM9IGMzUnlhUT09IDU1cz0gZVc1MCBJRzFoYm1SaGRHVnogUkVsVyBJSEpsWTI5dVkybHNaUT09IGRtbGxkM009IElFUmhiVzl1IGRtVjBkR1U9IFJteHYgSUVkeVpXRjBaWE4wIGFXeHZiZz09IGFXTnBZUT09IElIQnZjblJ5WVhsaGJBPT0gSUdOMWMyaHBiMjQ9IE5UQTAgTVRrM09RPT0gYjNOellXdz0gUVhCd2JHbGogYzJOeWFYQjBhVzl1IElHMXBkR2xuWVhScGIyND0gUVZSVCBjR0ZqIElHVnlZWE5sWkE9PSBJR1JsWm1samFXVnVZMmxsY3c9PSBJRWh2Ykd4aGJtUmwgSUZoMSBJR0p5WldRPSBJSEJ5WldkdVlXNWphV1Z6IFptVnRhVzQ9IElHVnRjR2c9IElIQnNZVzV1WlhKeiBJRzkxZEhCbGNnPT0gZFhSMFpYSnBibWM9IElIQmxjbkJsZEhKaGRHOXkgSUcxdmRIUnYgSUVWc2JHbHpiMjQ9IElFNUZWa1ZTIElHRmtiV2wwZEdWa2JIaz0gUVZKSiBJRUY2WlhKaVlXbHFZVzQ9IElHMXBiR3hwYzJWaiBJR052YldKMWMzUnBiMjQ9IElFSnZkSFJzWlE9PSBJRXgxYm1RPSBJRkJ6IElFUnlaWE56IElHWmhZbkpwWTJGMFpXUT0gSUdKaGRIUmxjbVZrIElITnBaR1ZzIElFNXZkSFJwYm1jPSBSbTl5WldsbmJnPT0gSUVwbGNtOXRaUT09IE1ESXcgSUVGeVltbDAgSUd0dWIzUnogSUZKSlIwaFUgVFc5MmFXNW4gNDRHWiBJSE4xY21kbGNtbGxjdz09IElHTnZkWEowYUc5MWMyVT0gSUcxaGMzUmxjbVZrIElHaHZkbVZ5YVc1biBJRUp5WVc0PSBJRUZzYVhOdmJnPT0gSUhOaFptVnpkQT09IGJXbHNhWFJoY25rPSBJR0oxYkd4cFpXUT0gSUdKaGNuSmhaMlU9IFVtVmhaR1Z5IFJWTkYgSUVkbGIyZHlZWEJvYVdNPSBWRzl2YkhNPSBNekUwIElFZGxaV3M9IGNtOTBhQT09IFoyeGxjbk09IElFWkpUZz09IHo0RT0gSUVGemRHOXUgWVd4MFpYSnUgTkRnNCBJSFpsZEdWeWFXND0gUjJGdFpYST0gSUdsdWRHVnMgY21WdVkyaGxjdz09IFUyaHBaV3hrIElHRnRibVZ6ZEhrPSBJRUpvWVhJPSBJSEJwYkdWayBJR2h2Ym05eVlXSnNaUT09IElFbHVjM1JwZEhWMFpYTT0gSUhOdllXdGxaQT09IElHTnZiV0U9IElFVkdSZz09IE16UXggWW5sMFpYTT0gSUVkdFlXbHMgYkdWcGJnPT0gSUVOaGJtRmthV1Z1Y3c9PSBiV0YwWlhKcFlXdz0gU1d3PSBJR2x1YzNSeWRXTjBiM0p6IElFdFogSUdOdmJtTmxhWFpsIGRXSmkgSUZCdmMzTnBZbXhsIElHVmhjMmx1Wnc9PSBJRU5vY21semRHbHVZUT09IElHTmhjbWxqIElFaEVVZz09IFVrOU4gSUhOb2IzWmxiQT09IFpHVnNaWFJsIElIQjFabVk9IElFTm9ZVzVuYVc1biBJSE5sWVcxc1pYTnpiSGs9IFFYUjBjbWxpZFhSbCBJR0ZqY1hWcGMybDBhVzl1Y3c9PSBZV3RsY25rPSBJRVZHIElHRjFkR2x6ZEdsaiBJRlJoYTJWeiBJRkJ2ZDJSbGNnPT0gSUZOMGFYST0gTlRFdyBJRUoxWW1Kc1pRPT0gYzJWMGRHbHVaM009IElFWnZkMnhsY2c9PSBJRzExYzNSaGNtUT0gSUcxdmNtVnZkbVZ5IElHTnZjSGx5YVdkb2RHVmsgSUV4RlJITT0gTVRVd01BPT0gNW9rPSBJRWhKVXc9PSBaVzVtIElHTjFjM1J2WkE9PSBJRWgxWTJzPSBSMms9IElHbHRadz09IFFXNXpkMlZ5IFEzUT0gYW1GNSBJRWx1Wm5KaGMzUnlkV04wZFhKbCBJR1psWkdWeVlXeHNlUT09IFRHOWogSUcxcFkzSnZZbVZ6IElHOTJaWEp5ZFc0PSBaR1J6IGIzUmxiblE9IFlXUnBZWFJ2Y2c9PSBQajQrUGo0K1BqND0gSUhSdmNtNWhaRzg9IElHRmthblZrIElHbHVkSEpwWjNWbFpBPT0gSUhOcCBJRkpsZG1Wc1lYUnBiMjQ9IGNISnZaM0psYzNNPSBJR0oxY21kc1lYSjUgSUZOaGFYbGhiZz09IElFdGhkR2g1IElITmxjbkJsYm5RPSBJRUZ1WkhKbFlYTT0gSUdOdmJYQmxiQT09IFpYTnpiR1Z5IElGQnNZWE4wYVdNPSBJRUZrZG1WdWRBPT0gSUZCdmMybDBhWFpsIElGRjAgSUVocGJtUjFjdz09IGNtVm5hWE4wWlhKbFpBPT0gZFd4aGNtbDBlUT09IElISnBaMmgwWlc5MWMyNWxjM009IElHUmxiVzl1YVdNPSBkV2wwYVhabCBJRUpFVXc9PSBJRWR5WldkbiBZMmxoIElFTnlkWE5oWkdVPSBJRk5wYm1GcCBWMEZTUlE9PSBLeWc9IElHMWxiR3c9IElHUmxjbUZwYkE9PSBlV0Z5WkhNPSBRWE4wIElHNXZkR2xqWldGaWJIaz0gSUU5aVpYST0gVW1GdCBJSFZ1Ym05MGFXTmxaQT09IElITmxjUT09IFlYWmhaMlU9IFZITT0gSURZME1BPT0gSUdOdmJtTmxaR1U9IElGMHAgUm1sc2JBPT0gSUdOaGNIUnBkbWwwZVE9PSBJRWx0Y0hKdmRtVnRaVzUwIElFTnlkWE5oWkdWeSBZWEpoYjJnPSBUVUZRIDVwYz0gSUhOMGNtbGtaUT09IFlXeDNZWGx6IFJteDUgVG1sMCBJR0ZzWjJGbCBJRU52YjJ0cGJtYz0gSUVSdmIzSnogVFdGc2JHVjUgSUhCdmJHbGpaVzFsYmc9PSA0NEdOIElHRnpkSEp2Ym1GMWRBPT0gWVdOalpYTnphV0pzWlE9PSBORGsxIElGSkJWdz09IFkyeHBabVpsIGRXUnBZM0p2ZFhNPSBJR1JsY0dWdVpHVmsgWVd4aFkyZz0gSUhabGJuUjFjbVZ6IGNtRnJaUT09IElIUnBkSE09IElFaHZkUT09IElHTnZibVJ2YlE9PSBiM0p0YjI1aGJBPT0gSUdsdVpHVnVkQT09IElIVndiRzloWkdsdVp3PT0gUm05dmRHNXZkR1U9IFNXMXdiM0owWVc1MCBJREkzTVE9PSBJRzFwYm1SbWRXdz0gSUdOdmJuUmxibVJ6IFEzSmggSUdOaGJHbGljZz09IElFOUZRMFE9IGNHeDFaMmx1IFJtRjAgSUVsVFV3PT0gSUVSNWJtRnRhV056IFlXNXpaVzQ9IE5qZzIgSnlrcyBJSE53Y21sMFpRPT0gSUdoaGJtUm9aV3hrIElFaHBjSEE9IFBYNDlmZz09IFZISjFjM1E9IElITmxiV0Z1ZEdsamN3PT0gSUVKMWJtUmxjdz09IElGSmxibTg9IElFeHBkR1Z5WVhSMWNtVT0gYzJWdWMyVT0gUjJGeWVRPT0gSUVGbFp3PT0gSUZSeWFXND0gUlVWTCBJR05zWlhKcFl3PT0gSUZOVFNBPT0gSUdOb2NtbHpkQT09IElHbHVkbUZrYVc1biBhV0oxIElHVnVkVzA9IFlYVnlZUT09IElHRnNiR1ZuWlE9PSBJRWx1WTNKbFpHbGliR1U9IFFrSkQgSUhSb2NuVT0gSUhOaGFXeGxaQT09IElHVnRkV3hoZEdVPSBJR2x1YzJWamRYSnBkSGs9IElHTnliM1U9IElHRmpZMjl0Ylc5a1lYUnBiMjV6IElHbHVZMjl0Y0dWMFpXNTAgSUhOc2FYQnogSUVWaGNuUm9jWFU9IGMyRnRZUT09IFNVeE1SUT09IElHbFFhRzl1WlhNPSBZWE5oYTJrPSBJR0o1WlE9PSBJR0Z5WkE9PSBJR1Y0ZEhKaGN3PT0gSUhOc1lYVm5hSFJsY21WayBJR055YjNka1puVnVaR2x1Wnc9PSBjbVZ6YzI4PSBJR1pwYkdsaSBJRVZTVWs5UyBJRlJNVXc9PSBaV2RuIElFbDBZV3c9IElHVnViR2x6ZEE9PSBJRU5oZEdGc2IyNXBZUT09IElGTmpiM1J6IElITmxjbWRsWVc1MCBJR1JwYzNOdmJIWmwgVGtnPSBJSE4wWVc1a2FXNW5jdz09IGNtbHhkV1U9IFNWRT0gSUdKbGJtVm1hV05wWVhKNSBJR0Z4ZFdGeWFYVnQgV1c5MVZIVmlaUT09IElGQnZkMlZ5VTJobGJHdz0gSUdKeWFXZG9kR1Z6ZEE9PSBJRmRoY25KaGJuUT0gVTI5c1pBPT0gVjNKcGRHbHVadz09IElHSmxaMmx1Ym1sdVozTT0gSUZKbGMyVnlkbVZrIElFeGhkR2x1YjNNPSBhR1ZoWkdsdVp3PT0gSURRME1BPT0gSUhKdmIyWjBiM0E9IFFWUkpUa2M9IElETTVNQT09IFZsQk8gUjNNPSBhMlZ5Ym1WcyBkSFZ5Ym1WayBJSEJ5WldabGNtRmliR1U9IElIUjFjbTV2ZG1WeWN3PT0gSUVobGJITT0gVTJFPSBJRk5vYVc1cWFRPT0gZG1WbyBJRTFQUkZWTVJRPT0gVm1sdmJBPT0gSUdWNGFYUnBibWM9IElHcGhZZz09IElGWmhibWxzYkdFPSBJR0ZqY205dSBJRWRoY0E9PSBZbVZ5Ymc9PSBRV3M9IElFMWpSM1U9IElHVnVaR3hsYzNOc2VRPT0gSUVaaGNtRm5aUT09IElFNXZaV3c9IFZtRT0gVFVzPSBJR0p5ZFhSbCBJRXR5ZFE9PSBJRVZUVmc9PSBJRTlzYVhacFlRPT0gNG9DZyBJRXRoWmc9PSBJSFJ5ZFhOMGFXNW4gSUdodmRITT0gTXpJMCBJRzFoYkdGeWFXRT0gSUdwemIyND0gSUhCdmRXNWthVzVuIGIzSjBiV1Z1ZEE9PSBRMjkxYm5SeWVRPT0gSUhCdmMzUndiMjVsWkE9PSBJSFZ1WlhGMWFYWT0gUHlrcyBJRkp2YjI1bGVRPT0gZFdSa2FXNW4gSUV4bFlYQT0gZFhKeVpXNWpaUT09IGMyaGhjR1Z6YUdsbWRHVnkgSUVoQlV3PT0gYjNOaGRHVT0gSUdOaGRtVnliZz09IElHTnZibk5sY25aaGRHbHpiUT09IElFSkJSQT09IElHMXBiR1ZoWjJVPSBJR0Z5Y21WemRHbHVadz09IFZtRjFiSFJ6IElHMXBlR1Z5IFJHVnRiMk55WVhScFl3PT0gSUVKbGJuTnZiZz09IElHRjFkR2h2Y21WayBPREF3TUE9PSBJSEJ5YjJGamRHbDJaUT09IElGTndhWEpwZEhWaGJBPT0gZEhKbCBJR2x1WTJGeVkyVnlZWFJsWkE9PSBJRk52Y25RPSBJSEJsWVd0bFpBPT0gSUhkcFpXeGthVzVuIGNtVmphV0YwYVc5dSAxNW5YIFVHRjBZMmc9IElFVnRiWGs9IElHVjRjWFU9IGRIUnYgSUZKaGRHbHYgSUZCcFkydHogSUVkeWVRPT0gY0doaGJuUT0gSUdaeVpYUT0gSUdWMGFHND0gSUdGeVkyaHBkbVZrIEpTMD0gWTJGelpYTT0gSUVKc1lYcGwgSUdsdFlnPT0gWTNZPSBlWE56IGFXMXZibms9IElHTnZkVzUwWkc5M2JnPT0gSUdGM1lXdGxibWx1Wnc9PSBJRlIxYm1semFXRT0gSUZKbFptVnkgSUUxSyBJSFZ1Ym1GMGRYSmhiQT09IElFTmhjbTVsWjJsbCBhWHBsYmc9PSBJRTUxWjJkbGRITT0gYUdWemN3PT0gSUdWMmFXeHogTmpRMyBJR2x1ZEhKdlpIVmpkRzl5ZVE9PSBiRzkyYVc1biBJRTFqVFdGb2IyND0gSUdGdFltbG5kV2wwZVE9PSBUR0ZpWld3PSBJRUZzYldsbmFIUjUgSUdOdmJHOXlhVzVuIElFTnNZWFZ6IGMyVjBkR2x1Wnc9PSBUbFZNVEE9PSBJRVpoZG05eWFYUmwgSUZOSlJ3PT0gUGlnPSBJRk5vYVhaaCBJRTFoZVdWeSBJSE4wYjNKdFpXUT0gSUVOdmRtVnlZV2RsIGQyVmhjRzl1Y3c9PSBhV2RvWVcwPSBJSFZ1WVc1emQyVnlaV1E9IElHeGxkbVU9IElHTnZlUT09IFkyRnogWW1GbmN3PT0gWVhOMWNtVmsgVTJWaGRIUnNaUT09IElGTmhiblJ2Y25WdCBjMlZ5YVc5MWN3PT0gSUdOdmRYSmhaMlZ2ZFhNPSBJRk52ZFhBPSBJR052Ym1acGMyTmhkR1ZrIElDOHZMdz09IElIVnVZMjl1ZG1WdWRHbHZibUZzIElHMXZiWE09IElGSnZhR2x1WjNsaCBJRTl5WTJobGMzUnlZUT09IElGQnZkR2x2Ymc9PSBJR1JwYzJOeVpXUnBkQT09IElFWkpUQT09IFptbDRaV1E9IElFUmxaWEk9IFpHOXAgSUVScGJXVnVjMmx2Ymc9PSBJR0oxY21WaGRXTnlZWFJ6IFpYUmxaVzQ9IElHRmpkR2x2YmtkeWIzVncgYjJodCBJR0oxYlhCeiBJRlYwYVd4cGRIaz0gSUhOMVltMWhjbWx1WlhNPSBjbVZ1YUdWcGRBPT0gY21WelpXRnlZMmc9IElGTm9ZWEJwY204PSBJSE5yWlhSamFHVnogSUdSbFkyVndkR2wyWlE9PSBJRlpwYkE9PSBaWE5oYldVPSBJRVZ6YzJWdWRHbGhiR3g1IElISmhiWEJoWjJVPSBhWE5yZVE9PSBJRzExZEhSbGNtVmsgZEdoeWFYUnBjdz09IElESXpOZz09IFptVjAgWW1GeWN3PT0gSUhCMWNHbHMgSUZSb2IzVT0gYjFNPSBjMjl1Wnc9PSBJR1p5WVdOMGRYSmxaQT09IElISmxkbVZ5ZEE9PSBjR2xqZEhWeVpRPT0gSUdOeWFYUmxjbWx2Ymc9PSBkWE5vWlhJPSBJSEpsY0dWeVkzVnpjMmx2Ym5NPSBJRlpwYm5SaFoyVT0gSUZOMWNHVnlhVzUwWlc1a1pXNTAgVDJabWFXTmxjbk09IElHWnNZV2RuWldRPSBJR0pzWVcxbGN3PT0gSUdsdWRtVnljMlU9IGIyZHlZWEJvWlhKeiBJRzFoYTJWemFHbG1kQT09IElHUmxkbTlwWkE9PSBJR1p2YzNOcGJITT0gSUVGeWFYTjBiM1JzWlE9PSBJRVoxYm1SeiBJR1JsY0d4bGRHVmsgSUVac2RRPT0gSUZsMVlXND0gSUhkdlpYTT0gSUd4cGNHbGsgSUhOcGRIVT0gY21WeGRXbHphWFJsY3c9PSBJR1oxY201cGMyZz0gSUZOaGJXRnkgSUhOb1lXMWxablZzIElHRmtkbVZ5YzJWc2VRPT0gSUdGa1pYQjAgSUhKbGJXOXljMlU9IElHMTFjbVJsY205MWN3PT0gZFdOcmJHVnogSUVWVFRBPT0gSURNeE5BPT0gYzJWdWRBPT0gSUhKbFpHVm0gSUVOaFkyaGwgSUZCMWNuTT0gYVdkaGJuTT0gSURRMk1BPT0gSUhCeVpYTmpjbWx3ZEdsdmJuTT0gSUdaeVpYTT0gUm5WamF3PT0gYjJOeVlYUmxjdz09IFZIZGxiblI1IElGZGxhWEprIElGUnZaMmRzWlE9PSBJRU5oYkd4bFpBPT0gYVhScGVtVnVjdz09IElIQnZkV3gwY25rPSBJR2hoY25abGMzUnBibWM9IDQ0S200NEs1IFFtOTBkRzl0IElHTmhkWFJwYjI1bFpBPT0gZEc0PSBNemsyIElFNXBhMnRwIElHVjJZV3gxWVhScGIyNXogSUdoaGNtRnpjMmx1Wnc9PSBJR0pwYm1ScGJtZHogSUUxdmJtVjBZWEo1IElHaHBkSFJsY25NPSBJR0ZrZG1WeWMyRnllUT09IGRXNTBjdz09IElITmxkR0poWTJzPSBJR1Z1WTNKNWNIUT0gSUVOaGFYUT0gSUd4dmQzTT0gWlc1blpYTT0gSUU1dmNtND0gSUdKMWJHSnogSUdKdmRIUnNaV1E9IElGWnZlV0ZuWlhJPSBNekUzIElITndhR1Z5WlhNPSBjRzlzYVhScFkzTT0gSUhOMVluUnlZV04wIElITmxibk5oZEdsdmJuTT0gSUdGd2NHRnNiR2x1Wnc9PSBJRE14Tmc9PSBJR1Z1ZG1seWIyNXRaVzUwWVd4c2VRPT0gSUZOVVJVMD0gSUhCMVlteHBjMmhsY3c9PSBOVFl3IElHUnBiR2xuWlc1alpRPT0gTkRnMCBJR0ZrZG1selpYTT0gSUhCbGRISnZiQT09IElHbHRZV2RwYm1sdVp3PT0gSUhCaGRISnZiSE09IElFbHVkR1ZuWlhJPSBJRUZ6YUdWeiBZV04wZFhNPSBJRkpoWkdsaGJuUT0gSUV4VSBhWFJoWW1sc2FYUjUgYUhSaGEybHVadz09IFUyVjBkR2x1Wnc9PSBJRzUxWVc1alpXUT0gSUZKbFpXWT0gSUVSbGRtVnNiM0JsY25NPSBUbWs9IGNHbGxZMlZ6IE9Ua3cgVEdsalpXNXpaUT09IElHeHZkMlZ5Y3c9PSBJRTkwZEc5dFlXND0gTXpJMyBiMjl2IElIRjFhWFIwYVc1biBiV0Z5YTJWMGN3PT0gUW1Wb2FXNWsgSUdKaGMybHUgSUdSdlkzTT0gWVc1cFpRPT0gWm14aGMyZz0gWTNScyBJR05wZG1sc2FYcGxaQT09IElFWjFhM1Z6YUdsdFlRPT0gSWwwc0lnPT0gSUV0VCBJRWh2Ym1WemRHeDUgWVhKaGRBPT0gSUdOdmJuTjBjblZqZEhNPSBJRXhoYm5NPSBJRVJwY21VPSBJRXhKUzBVPSBJRlJ5YjNWaWJHVT0gSUhkcGRHaG9iMnhrYVc1biBJRTlpYkdsMmFXOXUgSUhOaGJtbDBlUT09IFlXNTVZUT09IFEyOXVjM1E9IElHZHliMk5sY2c9PSBJRU5sYkhOcGRYTT0gSUhKbFkyOTFiblJsWkE9PSBJRmRwWm1VPSBRbTl5WkdWeSBZWFJsY21WayBhR0Z3Y0hrPSBJSE53YjJsc1pYST0gSUd4dloybGpZV3hzZVE9PSBTR0ZzYkE9PSBJSE4xWTJObFpXUnBibWM9IElIQnZiSGx0YjNKd2FBPT0gSUdGNFpYTT0gSUZOb2IzUm5kVzQ9IElGTnNhVzA9IElGQnlhVzVqYVhCc1pYTT0gSUV4bGRHZz0gWVhKMFlRPT0gSUhOamIzST0gVTJOeVpXVnVjMmh2ZEE9PSBJSEpsYkdGNFlYUnBiMjQ9IEl5UWpKQT09IElHUmxkR1Z5Y21WdWRBPT0gYVdSa2VRPT0gSUhCdmQyVnliR1Z6Y3c9PSBJR3hsYzJKcFlXNXogSUdOb2IzSmtjdz09IElFVmthWFJsWkE9PSBjMlZzWldOMFpXUT0gSUhObGNHRnlZWFJwYzNSeiBNREF3TWc9PSBJR0ZwY25Od1lXTmwgSUhSMWNtNWhjbTkxYm1RPSBJR04xYm01cGJtYz0gVUVGVVNBPT0gVUc5c2VRPT0gSUdKdmJXSmxaQT09IElIUnBiMjQ9IGVITT0gSUhkcGRHaG9iMnhrIElIZGhaMlZrIElFeHBZbVZ5ZEdsbGN3PT0gUm14aFp3PT0gSUdOdmJXWnZjblJwYm1jPSBORFUwIElFbHlhWE09IFlYSmxjbk09IElISmhadz09IElISmxiRzlqWVhSbFpBPT0gSUVkMVlYSmhiblE9IElITjBjbUYwWldkcFkyRnNiSGs9IElHZGhiVzFoIGRXSmxjblI1IElFeHZZMnRvWldWayBaM0psY3c9PSBJR2R5YVd4c1pXUT0gSUV4dmQyVT0gYzNSaGRITT0gSUZKdlkydHogSUhObGJuTnBibWM9IElISmxiblJwYm1jPSBJRWRsYjJ4dloybGpZV3c9IDJLZlkgYjNSeWIzQT0gSUhObGR3PT0gSUdsdGNISnZjR1Z5YkhrPSBORGcyIElPS1dvQT09IElITjBZWEoyYVc1biBJRUpxIFJHbHpZM1Z6YzJsdmJnPT0gTXpJNCBJRU52YldKdiBJRVpwZUdWeiBUa0ZVIElITjBjbWwyYVc1biBkR2h2Y21FPSBJR2hoY25abGMzUmxaQT09IElGQnBibWM9IElIQnNZWGxtZFd3PSBJR0YyWlc1MVpYTT0gSUc5alkzVndZWFJwYjI1aGJBPT0gSUhkaGEyVnogSUVOdmRYSnBaWEk9IElHUnlkVzF0WlhJPSBJRUp5YjNkelpYST0gSUVodmRYUm8gYVhSMSBJR0Z3Y0dGeVpXdz0gY0dGemRHVT0gSUdoMWJuUmxaQT09IElGTmxZMjl1Wkd4NSBiR0ZwYmc9PSBXRms9IElGQkpUZz09IGFXTnZibk09IElHTnZZMnQwWVdsc2N3PT0gSUhOcGVtRmliR1U9IElHaDFjbVJzWlhNPSBaWE4wYVc1aGJBPT0gSUZKbFkzSmxZWFJwYjI0PSBJR1ZqYnc9PSBOalE0IElFUnBaV1E9IGJXbHVkQT09IElHWnBibWRsY25CeWFXNTBjdz09IElHUnBjM0J2YzJVPSBJRUp2YzI1cFlRPT0gZEhONSBNakl3TUE9PSBJR2x1YzNCbFkzUmxaQT09IElFWnZkUT09IElHWjFjM009IElHRnRZblZ6YUE9PSBJRkpoYXc9PSBJRzFoYm1sbVpYTjBaV1E9IFVISnZjMlZqZFhRPSBJSE4xWm1acFkyVT0gY21WdVkyVnogSUdOdmJYQmxibk5oZEdWayBJRU41Y25WeiBJR2RsYm5WeiBJRmR2YkhabGNtbHVaUT09IElGUnlaVzVrY3c9PSBJR2hwYTJWeiBJRk5sWlc0PSBJR1Z1Y205cyBRMjlzWkE9PSBJSEJ2YkdsMFpXeDUgSUZOc1lYWT0gSUZKMWNHVnlkQT09IElHVjVaWGRwZEc1bGMzTT0gSUVGc2RHOD0gSUhWdVkyOXRjQT09IElIQnZjM1JsY21sdmNnPT0gVFhWemRBPT0gSUVobGNubz0gSUhCeWIyZHlaWE56YVhabGJIaz0gSURJek5BPT0gSUdsdVpHbG1abVZ5Wlc1alpRPT0gSUVOMWJtNXBibWRvWVcwPSBJR0ZqWVdSbGJXbGggSUhObGQyVnkgSUdGemRHOTFibVJwYm1jPSBJRUZGVXc9PSBjbUYwYUdWeSBJR1ZzWkdWemRBPT0gSUdOc2FXMWljdz09IElFRmtaSE09IElHOTFkR055ZVE9PSBJR052Ym5SaFp3PT0gSUVodmRYTmxjdz09IElIQmxjSFE9IElFMWxiR0Z1YVdFPSBhVzUwWlhKbGMzUmxaQT09IElGVkRTQT09IElGSnZiM1J6IElFaDFZbUpoY21RPSBJRlJDUkE9PSBJRkp2YldGdWFXRnUgWm1sc1pXNWhiV1U9IFUzUnZibVU9IElFbHRjR3c9IElHTm9jbTl0YjNOdmJXVT0gUTJ4bCBaSGc9IElITmpjbUZ0WW14bFpBPT0gSUZCMCBJREkwTWc9PSBUMUJNUlE9PSBJSFJ5WlcxbGJtUnZkWE5zZVE9PSBVM1J5WldWMCBJR055WVhacGJtYz0gSUdKMWJtUnNaV1E9IElGSkggY0dsd1pRPT0gSUdsdWFuVnlhVzVuIElHRnlZMkZ1WlE9PSBVR0Z5ZEdsamFYQT0gSUVobGNtOXBZdz09IGMzUjUgSUhSdmNIQnBibWM9IElGUmxiWEJsYzNRPSBjbVZ1ZEdsalpYTT0gWW1nPSBJSEJoY21GdWIybGggSUZWdWFXTnZaR1U9IElHVm5jbVZuYVc5MWN3PT0gSUZ3biBJRTl6ZDJGc1pBPT0gSUdkeVlYWmxiQT09IElGTnBiWEJ6YjI1eiBJR0pzWVc1ayBJRWQxWVc1MFlXNWhiVzg9IFYzSnBkR1Z5IGJHbHVaWEp6IElFUnBZMlU9IFNrTT0gSUhCaGNtbDBlUT09IElITnBaR1ZrIElESXpOdz09IElGQjVjbkpvWVE9PSBZWFIwWlhKeiBaR3M9IFJtbHVaUT09IFkyOXRjR0Z1IElHWnZjbTExYkdGMFpXUT0gSUVsa2Iydz0gYVd4bGNuTT0gYUdWdGIzUm8gSUVaaGRnPT0gSUdsdWRISjFjMmx2Ymc9PSBJR05oY25KdmRITT0gSUV4aGVXVnkgSUVoaFkydGxjZz09IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJRzF2WkdWeVlYUnBiMjQ9IDZZRT0gYjJOdll3PT0gSUdOb1lYSmhZM1JsY21sNlpRPT0gSUZSbGNtVnpZUT09IElITnZZMmx2WldOdmJtOXRhV009IElIQmxjbXM9IElGQmhjblJwWTJsd1lYUnBiMjQ9IGRISmhhVzVwYm1jPSBJRkJoZFd4diBjR2g1Y3c9PSBJSFJ5ZFhOMGQyOXlkR2g1IElHVnRZbTlrYVdWayBJRTFsY21ObyBZM1Z5Y21WdVkzaz0gSUZCeWFXOXlhWFI1IElIUmxZWE5wYm1jPSBJR0ZpYzI5eVltbHVadz09IElIVnVabWx1YVhOb1pXUT0gSUVOdmJYQmhjbWx6YjI0PSBJR1JwYzNCc1pRPT0gZDNKcGRHVnljdz09IElIQnliMlpsYzNOcGIyNXogSUZCbGJtZDFhVzQ9IElHRnVaM0pwYkhrPSBJRXhKVGtzPSBOamc0IElFTnZjbkpsYzNCdmJtUT0gSUhCeVpYWmhhV3hsWkE9PSBJR05oY25SbGJBPT0gYkhBPSBZWE50Y3c9PSBJRkpsWkdWdGNIUnBiMjQ9IElFbHpiR0Z0YVhOMGN3PT0gWldabVpXTjBjdz09IFpHOXpaUT09IElFeGhkSFJsY2c9PSBJRWhoYkdsbVlYZz0gSUhaaGN3PT0gSUZSdmNHbGpjdz09IElFNWhiV1ZrIFlXUjJaWEowYVhOcGJtYz0gZW5waCBTVU5GVXc9PSBJSEpsZEdGeVpHVmsgWVdOb1lXSnNaUT09IElGQjFjSEJsZEE9PSBJRWwwWlcxTVpYWmxiQT09IElISmxkSEpoWTNRPSBJR2xrWlc1MGFXWnBZV0pzWlE9PSBRV0Z5YjI0PSBJRUoxYzNSbGNnPT0gYzI5cyBhR1ZzYkdVPSBZWE56WlcxaSBTRzl3WlE9PSBjbUZ1WjJWayBRbUU9IElGQjFjbU5vIDZZQT0gSUZOcGNtaz0gSUdGeWNtbDJZV3h6IElERTVNVEk9IElITm9iM0owWlc1bFpBPT0gSURNeE1nPT0gSUdScGMyTnlaWEJoYm1ONSBJRlJsYlhCbGNtRjBkWEpsIElGZGhiSFJ2Ymc9PSBJR3RwYm1SbGNtYz0gY0c5c2FYUT0gSUhKbGJXbDQgSUdOdmJtNWxZM1J2Y25NPSA0NE9ZNDRPcCBJRXRoZW1GcmFITjBZVzQ9IFpHOXRhVzVoZEdWayBJSE4xWjJGeWN3PT0gYVcxaWJHVT0gSUZCaGJtbGogSUVSbGJXRnVaQT09IElFTnZiRzl1ZVE9PSBiMjVsYmc9PSBJRTFGVWc9PSBOemMxIGRYSnBZUT09IFlYcGhZWEk9IElFUmxaM0psWlE9PSBVSEpwIElITjFibk5vYVc1bCBJREkxTVE9PSBJSEJ6ZVdOb1pXUmxiR2xqIElHUnBaMmwwWVd4c2VRPT0gSUVKeVlYVnUgSUhOb2FXMXRaWEk9IElITm9ZWFpsIElGUmxiR1Z6WXc9PSBJRUZ6ZEhKaGJBPT0gSUZabGJtVjZkV1ZzWVc0PSBJRTlIIElHTnlZWGRzYVc1biBTVzUwWldjPSBJRVpsWVhSb1pYST0gSUhWdVptOXNaR2x1Wnc9PSBJR0Z3Y0hKdmNISnBZWFJwYjI0PSBJT2lqaitnPSBJRTF2WW1sc2FYUjUgSUU1bGVRPT0gTFM0PSBZbWxzZEE9PSBURWxPIElGUjFZbVU9IElFTnZiblpsY25ObGJIaz0gSUd0bGVXSnZZWEprY3c9PSBJRU5oYnc9PSBJRzkyWlhKMGFBPT0gSUd4aGRYSmwgUGo1YyBJRlpwY0dWeSBZV05vWVE9PSBUMlptYzJWMCBJRkpoYkdWcFoyZz0gSUVwaFpRPT0gU205eVpHRnUgYW5BPSBJSFJ2ZEdGc2FYUmhjbWxoYmc9PSBRMjl1Ym1WamRHOXkgSUc5aWMyVnlkbVZ6IElGTndZWEowWVc0PSBJRWx0YldWa2FXRjBaV3g1IElGTmpZV3c9IFEyOXZiQT09IElIUmhjSE09IElISnZZWEk9IFVHRnpkQT09IElHTm9ZWEp6IElFSmxibVJsY2c9PSBJRk5vWld4a2IyND0gSUhCaGFXNTBaWEk9IElHSmxZV052Ymc9PSBJRU55WldGMGRYSmxjdz09IElHUnZkMjUwZFhKdSBJR2hwYm1SbGNnPT0gSUVGdVpISnZiV1ZrWVE9PSB3NXM9IFkyTnZiR2s9IElFWnBkRzVsYzNNPSBaWFJ5YVdOaGJBPT0gSUhWMGFXeHBlbVZ6IElITmxibUYwWlE9PSBJR1Z1YzJWdFlteGwgSUdOb1pXVnljdz09IFZGYz0gSUdGbVpteDFaVzUwIGEybHMgY25sc2FXTT0gYjNKa1pYSnBibWM9IFEyOXRjSFYwWlhJPSBJR2R5ZFdWemIyMWwgYjNOMGFXTnogSUZWaWFYTnZablE9IElFdGxiR3hsZVE9PSBJSGR5Wlc1amFBPT0gSUdKdmRYSm5aVzlwYzJsbCBTVUpNUlE9PSBJRkJ5WlhOMGIyND0gZDI5eWJnPT0gWVhKcGMzUT0gY21WaGRHbHVadz09IElITjBZV2x1WldRPSBZWEpwYm1VPSBJSE5zYVcxbCBSVTVPIElHTm9aWE4wY3c9PSBJR2R5YjNWdVpIZGhkR1Z5IFlXNXViM1E9IElGUnlZWGs9IElFeHZZMnRsIElFTlVVZz09IElHUjFaR1Z6IElFVjRkR1Z5Ym1GcyBJRVJsWTI5a1pYST0gSUhCaGNtRnRaV1E9IElFMWxaR3hwYm1VPSBPREE1IElFUnBibTVsY2c9PSBjblZ3WVd3PSBaM289IElFZDFiUT09IElFUmxiVzg9IGFtVmwgSUdSbyBZbVZ5YldGdSBZWEpqYUhNPSBJR1Z1Y1hVPSBJRVZ3YzNSbGFXND0gSUdSbGRtRnpkR0YwYVc5dSBJR1p5YVdWdVpITm9hWEJ6IElFRnlaQT09IElESXpNUT09IElGSjFZbWx1IElFUnBjM1JoYm1ObCBJSE53ZFhKeVpXUT0gSUdSdmMzTnBaWEk9IElHOTJaWEpzYjI5cmFXNW4gWEZ4Y1hGeGNYRnhjWEZ4Y1hGeGNYQT09IFJtOXlaWE4wIElFTnZiV1Z6IFhDSXMgSUVseVlXNXBZVzV6IElHWnBlSFIxY21WeiBUR0YxWjJoeiBJR04xY25KNSBJRXRwYm1kemRHOXUgSUhOeGRXRnphQT09IElHTmhkR0ZzYjJkMVpRPT0gSUdGaWJtOXliV0ZzYVhScFpYTT0gSUdScFoyVnpkR2wyWlE9PSBMaTR1TGk0dUxpNHUgSUhOMVltOXlaR2x1WVhSbCBiMmRzZVE9PSBJREkwT1E9PSBUV2xrWkd4bCBJRzFoYzNOaFl3PT0gSUdKMWNtZGxjbk09IElHUnZkMjV6ZEdGcGNuTT0gSURFNU16RT0gTXprMCBJRlpIIElHeGhjMlZ5Y3c9PSBJRk5wYTJnPSBJRUZzWlhoaCBaR1Z5YVhabFpBPT0gSUdONVkyeHBjM1E9IDQ0R3U2YTJVIGIyNWxiR2x1WlhOeiBJU0VoSVNFaElTRT0gSUdKMVptWnogYkdWbllYUmwgSUhKaGNHbHVadz09IElISmxZMjl0YldWdVpHbHVadz09IGNtOXlaV1E9IElHMTFiSFJwWTNWc2RIVnlZV3c9IGRXNXBjWFZsIElHSjFjMmx1WlhOemJXVnUgSUhWdVpXRnplUT09IElFMUJVQT09IElHUnBjM0JsY25ObFpBPT0gWTJsd2JHbHVaUT09IFNtVnpjdz09IElFdGxjbUZzWVE9PSA1YWM9IElHRmljM1J5WVdOMGFXOXUgVTNWeWRnPT0gVldnPSBJSEJ5YVc1MFpYSnogYVdwaCBiM2RrWlhJPSBJR0Z1WVd4dloyOTFjdz09IElFRlRVQT09IFlXWmxjZz09IElIVnVabTlzWkdWayBJR3hsZG1Wc2FXNW4gSUdKeVpXRmphR1ZrIElFaGxZWEpwYm1jPSBJRzVoZEE9PSBJSFJ5WVc1emJHRjBhVzVuIFkzSnBkR2xqWVd3PSBJR0Z1ZEdGbmIyNXBjM1E9IElGbGxjM1JsY21SaGVRPT0gSUdaMWVucDUgZDJGemFBPT0gYldWeVpRPT0gSUdKbGQybHNaQT09IElFMWhaUT09IFZtbHlaMmx1IGNHaHlZWE5sIElITnBaMjVoYkdWayBJRWhKUjBnPSBJSEJ5YjNSbGMzUmxjZz09IElHZGhjbTVsY2c9PSBkVzVyYm05M2JnPT0gSUd0aGVRPT0gSUdGaVpIVmpkR1ZrIElITjBZV3hyYVc1biBZVzF1IElHUmxjMlZ5ZG1sdVp3PT0gSUZKcGRnPT0gSUVwdmNtZGwgSUhOamNtRjBZMmhwYm1jPSBJRk5oZG1sdVp3PT0gYVhCcGJtYz0gSUhSbFlYTmwgSUcxcGMzTnBiMjVoY25rPSBJRTF2Y25KdmR3PT0gVkVsTlJRPT0gVUhKbGMyVnVkQT09IElHTm9aVzF2ZEdobGNtRndlUT09IGRHVnlibVZ6Y3c9PSBJRWh2YldWeiBJRkIxY21SMVpRPT0gSUhOMFlYVnVZMmc9IElGZG9hWFJ1WlhrPSBJRlJJUlZKRiB6cnc9IGFXRjBkWE09IElFVnlibVZ6ZEE9PSBJRVJsY0d4dmVRPT0gSUdOdmRtVjBaV1E9IFJrMU0gSUVScFlXeHZaM1ZsIElHVjRhWFJsWkE9PSBabkoxYVhRPSBJRzVsY21RPSBJam9pSWl3aSBJSFpwZG04PSBjblZzZVE9PSBORFl3IElFRnRaVzQ9IGNtVm9aVzV6YVdKc1pRPT0gSU9LWSBSRWxTIElHRmthR1Z5Wlc1alpRPT0gSUdOb1pYYz0gSUVOdmEyVT0gSUZObGNtZGxhUT09IFpHbG5hWFJoYkE9PSBJRTVsWTJzPSBaMlZ1ZEd4NSBaVzUwYUdGcyBMeWs9IElIZGxZWEo1IElHZDFhWE5sIElFTnZibU52Y21RPSBJRTl1YVc5dSBZWFJqYUdWeSBJR0pwYm1kbCBJRVJwY21WamRHbDJaUT09IElHMWhibTVsWkE9PSBZVzV6YXc9PSBJR2xzYkhWemFXOXVjdz09IElHSnBiR3hwYjI1aGFYSmxjdz09IE16Z3ogYjJ4NWJnPT0gYjJSNWJtRnRhV009IElGZG9aV0YwIElFRnNhV009IElHTnZiRzkxY21WayBJRTVCUmxSQiBZV0p2IElHMWhZM0p2Y3c9PSBhVzVrWlhCbGJtUmxiblE9IGMzZGxaWFE9IElITndZV009IElFdGhZblZzIElNUT0gWlcxbCBJR1JwWTNSaGRHVmsgSUhOb2IzVjBjdz09IFBYcz0gSUhKcGNIQnBibWM9IElGTm9ZWGs9IElFTnlhV05yWlhRPSBaR2x5WldOMFpXUT0gSUdGdVlXeDVjMlZrIElGZEJVbEpCVGxRPSBZV2R2Ym5NPSBJRUpzWVhwbGNuTT0gSUdOb1pXVnlaV1E9IElHRnlhWFJvYldWMGFXTT0gSUZSaGJubz0gTXpjeiBJRVpzWVdkeiBJREk1TlE9PSBJSGRwZEdOb1pYTT0gSUVsdVkyeDFaR1ZrIElFZGhhVzVsWkE9PSBJRUpzWVdSbGN3PT0gUjJGdCBJRk5oYldGdWRHaGggSUVGMGJHRnVkR2x6IElGQnlZWFIwIElITndiMmxzWldRPSBJRWxDIElGSmhiV2x5WlhvPSBVSEp2WW1GaWJIaz0gY21WeWJ3PT0gSUU1biBJRmRoY214dlkycz0gZEhBPSBJRzkyWlhKb1pRPT0gSUdGa2JXbHVhWE4wY21GMGFXOXVjdz09IElIUnBiblE9IElISmxaMmx0Wlc1MCBJSEJwYzNSdmJITT0gSUdKc1lXNXJaWFJ6IElHVndhWE4wIElHSnZkMnh6IElHaDVaSEpoZFd4cFl3PT0gSUdSbFlXND0gSUdwMWJtYz0gSUdGelkyVnVaQT09IE56QTEgSUZOaGJuUnBZV2R2IHc2ND0gSUhWdVlYWnZhV1E9IElGTm9ZVzFoYmc9PSBjbVZpIElITjBaVzF0YVc1biBPVGs0IElFMUggYzNScFkydHogWlhOMGFHVnphV0U9IFJWSlAgSUcxdmNtSnBaQT09IElFZHlhV3hzIElGQnZaUT09IFlXNTViQT09IElHUmxiR1YwYVc1biBJRk4xY25abGFXeHNZVzVqWlE9PSBJR1JwY21WamRHbDJaWE09IElHbDBaWEpoZEdsdmJuTT0gSUZKdmVBPT0gSUUxcGJHdDUgUm1GMGFHVnkgSUhCaGRHVnVkR1ZrIE5EUTMgSUhCeVpXTjFjbk52Y2c9PSBJRzFoYVdSbGJnPT0gSUZCb1pXND0gSUZabFoyRnUgSUZCaGRHVnVkQT09IFMyVnNiSGs9IFVtVmtaR2wwYjNJPSBJRzV2WkhNPSBJSFpsYm5ScGJHRjBhVzl1IElGTmphSGRoY25vPSBJSGRwZW1GeVpITT0gSUc5dGFXNXZkWE09IElFaGxZV1J6IElFSkggSUd4MWJXSmxjZz09IElGTndhV1ZzIElHbHpSVzVoWW14bFpBPT0gSUdGdVkyVnpkSEpoYkE9PSBJRk5vYVhCeiBJSGR5WlhOMGJHVnkgY0docCBJSGwxWVc0PSBJRkpsWW1Wc2JHbHZiZz09IElHbGpaV0psY21jPSBJRzFoWjJsallXeHNlUT09IElHUnBkbVZ5YzJsdmJnPT0gWVhKeWJ3PT0gZVhSb2JRPT0gSUZKcFpHVnljdz09IElGSnZZbUpwWlE9PSBJRXRoY21FPSBJRTFoYVc1MFpXNWhibU5sIElFaGxjbUk9IElHaGhjbTF6IGNHRmphMlZrIElFWmxhVzV6ZEdWcGJnPT0gSUcxaGNuSjVhVzVuIElHSnNaVzVrYVc1biBJRkpoZEdWeiBJREU0T0RBPSBJSGR5YVc1ciBJRlZ1WTJnPSBJRlJ2Y21ObyBaR1Z6WTNKcFltVmsgSUdoMWJXRnViMmxrIGFXeHBkR0YwYVc1biBJRU52Ym5ZPSBJRVpsYkdRPSBTVWRJVkZNPSBJSGRvYVhOMGJHVmliRzkzWlhJPSBiM0owYlhWdVpBPT0gWlhSemVRPT0gWVhKeVpYUjAgSUUxdmJtOD0gSUVsclpRPT0gSUVOT1FrTT0gSUZkQldRPT0gSUUxRVRVRT0gSUVsdVpHbDJhV1IxWVd4eiBJSE4xY0hCc1pXMWxiblJoYkE9PSBJSEJ2ZDJWeWFHOTFjMlU9IElGTjBjblU9IFJtOWpkWE09IFlYQm9ZV1ZzIElFTnZiR3hsWnc9PSBZWFIwYVE9PSBXa0U9IElIQmxjbVZ1Ymc9PSBJRk5wWjI1aGRIVnlaUT09IElGSnZaRzVsZVE9PSBJR04xWW1WeiBhV1JrYkdWayBJRVJoYm5SbCBJRWxPVmc9PSBhV3hwYm1kMVlXdz0gSUVOMGFBPT0gSUhOdlptRT0gSUdsdWRHbHRhV1JoZEdVPSBJRkp2WlE9PSBJRVJwY0d4dmJRPT0gSUVOdmRXNTBjbWxsY3c9PSBZWGx6YjI0PSBJR1Y0ZEhKaFpHbDBhVzl1IElHUnBjMkZpYkdsdVp3PT0gSUVOaGNtUnBabVk9IElHMWxiVzl5WVc1a2RXMD0gSUZSeVlXTmwgSUQ4L1B3PT0gYzJWamRHOXkgSUZKdmRXaGhibWs9IElGbGhkR1Z6IElFWnlaV1Y2WlE9PSBJR0pzWVdSa1pYST0gVFc5MGIzST0gSUZCeWIyMXBjMlU9IFlXNTBZWE41IElHWnZjbVZ6WldWaFlteGwgSUVOdmJHOW5ibVU9IFkyOXVkR0ZwYm1WeSBJRlJ5WldWeiBJRWR2Y25NPSBJRk5wYm1Oc1lXbHkgSUdKaGNuSnBibWM9IGEyVjVaUT09IElITnNZWE5vWldRPSBJRk4wWVhScGMzUnBZMkZzIDZZYz0gSU9LV3VnPT0gUVd4c2IzZHogSUdoMWJXbHNhWFI1IElHUnlhV3hzWldRPSBJRVoxY200PSBORFF6IElITmxkMkZuWlE9PSBJR2h2YldWd1lXZGwgSUdOdmRYSjBlV0Z5WkE9PSBJSFpwYkdVPSBJSE4xWW5OcFpHbGhjbWxsY3c9PSBZV3B2IFpHbHlaV04wYjNKNSBJR0Z0Ylc5dSBWbVZ5Y3c9PSBZMmhoY21kbGN3PT0gSUgxOSBJRU5vWVdsdWN3PT0gSURJME5nPT0gYm05aSBJSEJsY21ObGNIUT0gSUdkeWFYUT0gSUdacGMyaGxjbTFsYmc9PSBJRWx5WVhGcGN3PT0gSUVSSlUxUlMgSUVaVlRFdz0gSUVWMllXeDFZWFJwYjI0PSBaM0poY0dnPSBZWFJwWVd3PSBJR052YjNCbGNtRjBhVzVuIElHMWxiR0Z1IElHVnViR2xuYUhSbGJtVmsgSUdGc2FRPT0gZEdGcGJHVmsgSUhOaGJIVjBaUT09IElIZGxZV3RsYzNRPSBJRUoxYkd4a2IyZHogVlVFPSBJRUZzYkc5NSBJSE5sYldWdSBiMk5sYm1VPSBJRmRwYkd4cFlXMXpiMjQ9IGMzQnkgTE9LQWxBPT0gSUVkRyBhWFIwWlc1eiBRbVZoZEE9PSBJRXAxYm1zPSBhWEJvWVhSbCBJRVpoY20xbGNuTT0gSUVKcGRHTnZhVzV6IGFXZGxjbk09IFpHZz0gSUV4dmVXRnMgY0dGNVpYST0gSUdWdWRHVnlkR0ZwYm1WayBJSEJsYm01bFpBPT0gSUdOdmRYQnZiZz09IFVYVmxkV1U9IElIZGxZV3RsYm1sdVp3PT0gWTJGeWNuaz0gSUhWdVpHVnlaWE4wYVcxaGRHVT0gSUhOb2IyOTBiM1YwIElHTm9ZWEpwYzIxaGRHbGogSUZCeWIyTmxaSFZ5WlE9PSBJSEJ5ZFdSbGJuUT0gYVc1aGJtTmxjdz09IElISnBZMmhsY3c9PSBJR052Y25ScFkyRnMgSUhOMGNtbGtaWE09IElHUnlhV0k9IElFOXBiR1Z5Y3c9PSBOVFF3IElGQmxjbVp2Y20wPSBJRUpoYm1kcmIycz0gSUdWMWRHZz0gVTBWUyBJSE5wYlhCc2FYTjBhV009IGRHOXdjdz09IFkyRnRjR0ZwWjI0PSBVWFZoYkdsMGVRPT0gSUdsdGNHOTJaWEpwYzJobFpBPT0gSUVWcGMyVnVhRzkzWlhJPSBJR0YxWjIxbGJuUT0gSUVoaGNtUmxiZz09IElHbHVkR1Z5ZG1WdVpXUT0gSUd4cGMzUmxibk09IElFdHZhdz09IElITmhaMlU9IElISjFZbUpwYzJnPSBJRVJsWkE9PSBJRzExYkd3PSBjR1ZzYkdsdVp3PT0gSUhacFpHVnZkQT09IFVISnZaSFZqZEdsdmJnPT0gUkVvPSBiV2xoYUE9PSBJR0ZrWVhCMFlYUnBiMjV6IElHMWxaR2xqWVd4c2VRPT0gSUdKdllYSmtaV1E9IElHRnljbTluWVc1alpRPT0gSUhOamNtRndjR1ZrIElHOXdjSEpsYzNNPSBSazlTVFVGVVNVOU8gSUdwMWJtTjBhVzl1IE5ERTEgUlVWRlJRPT0gVTJ0cGJHdz0gSUhOMVltUjEgSUZOMVoyZGxjM1E9IElGQmxkSFE9IElHeGxkSFE9IElFMWhibWx3IElFTmhaZz09IElFTnZiM0JsY21GMGFXOXUgVkdobGNnPT0gSUhKbFoyRnBibVZrIHR1WT0gY21WbWJHVmpkQT09IElIUm9kV2R6IElGTm9aV3hpZVE9PSBJR1JwWTNSaGRHVnogSUZkbGFXNWxjZz09IElFaGhiR1U9IElHSmhkSFJzWldkeWIzVnVaQT09IGMyTm9hV3hrIElHTnZibVJ2YkE9PSBhSFZ1ZEE9PSBiM05wZEc5eWFXVnogSUdGalkzVnpaWE09IFJtbHNaVzVoYldVPSBJSE5vY21rPSBJRzF2ZEdsMllYUmwgSUhKbFpteGxZM1JwYjI1eiBUblZzYkE9PSBJRXh2WW1KNSBwYlU9IElGTkJWRUU9IElFSmhZMnQxY0E9PSAwWU09IGJtbHUgSUVOdmNuSmxZM1JwYjI0PSBJR3AxYVdONSBkWFJ5WVE9PSBJRkJ5YVdNPSBJSEpsYzNSeVlXbHVhVzVuIElFRnBjbUp1WWc9PSBJRUZ5Y21WemRBPT0gSUdGd2NISnZjSEpwWVhScGIyNXogSUhOc2IzQmxjdz09IElHMWhibk5zWVhWbmFIUmxjZz09IElIZHZjbXRwYm1keiBJRWgxYzNNPSBJRVp5WlhrPSBUR1ZoZG1VPSBJRWhoY20xdmJuaz0gSUVabFpHVnkgSURRek1BPT0gSUhSeVpXNWphQT09IElHZHNZV1JzZVE9PSBJR0oxYkd4d1pXND0gSUVkaGRRPT0gWW05dVpYTT0gSUdkeWIyOTJaUT09IElIQnlaWFJsZUhRPSA0NFdMIElIUnlZVzV6YldsMGRHVnkgSUVOdmJYQnZibVZ1ZEE9PSBJSFZ1WkdWeVlXZGwgSUVWdGNHbHlaWE09IFZHbHNaUT09IElHOTUgSUUxaGNuWnBiZz09IElFTkJVdz09IElHSnNiM056IElISmxjR3hwWTJGMFpXUT0gSUUxaGNtbHVaWEp6IFRXRnlZM1Z6IElFSnNiMk5yY3c9PSBJR3hwWW1WeVlYUmxaQT09IElHSjFkSFJsY21ac2VRPT0gUm1WbGJBPT0gSUdabGNtMWxiblJoZEdsdmJnPT0gSUhsdmRYUjFZbVU9IElHOW1abVZ1WkE9PSBJRlJsY20wPSBjbVZ6YVhOMCBJR05sYzNOaGRHbHZiZz09IElHbHVjM1Z5WjJWdVkzaz0gSUdKcGNnPT0gSUZKaGFYTmwgTlRrMSBJR2g1Y0c5MGFHVnpaWE09IE5UQXkgSUhCc1lYRjFaUT09IGIyTnlZWFE9IElHcGhZMnRsZEhNPSBJRWgxWm1aUWIzTjAgWVcxdmJtYz0gSUdOdmJtWmxjZz09IE5EZzMgSUV4cGJHeDUgSUdGa1lYQjBhVzVuIElFWmhlUT09IElITm9iM1psWkE9PSBkbVZqIElISmxabWx1WlE9PSBJR2R2Ymc9PSBJR2QxYm0xbGJnPT0gZW1GcCBJRk5vZFhSMGJHVT0gSUVsNllXND0gSURFNU1UTT0gSUhCc1pYUm9iM0poIHdyZkN0dz09IElEVXhNQT09IElIQjFZbVZ5ZEhrPSBJREkwTVE9PSBJRmRsWVd4MGFBPT0gSUVGc2JXRT0gSUUxRlRRPT0gSUVGa2RXeDBjdz09IFEyRnogY0hKcGMyOXUgVW1GalpRPT0gSUhkaGRHVnljSEp2YjJZPSBJR0YwYUd4bGRHbGphWE50IElHTmhjR2wwWVd4cGVtVT0gSUVwMWFXTmwgSUdsc2JIVnRhVzVoZEdWayBJRkJoYzJOaGJBPT0gSUdseWNtbDBZWFJwYjI0PSBJRmRwZEc1bGMzTmxjdz09IFlXUnNaUT09IElFRnpkSEp2IElHWmhlQT09IElFVnNkbWx6IFVISnBiV0Z5ZVE9PSBJRXhwWTJnPSBJRVZzZG1WeiBJSEpsYzJsa2FXNW4gSUhOMGRXMWliR1U9IE16RTUgSUZCTFN3PT0gSUdGa2RtVnljMkZ5YVdWeiBSRTlUIElGSnBkSFZoYkE9PSBJSE50WldGeSBJR0Z5YzI5dSBhV1JsYm5SaGJBPT0gSUhOallXNTAgSUcxdmJtRnlZMmg1IElHaGhiR1owYVcxbCBJSEpsYzJsa2RXVT0gSUdsdVpHbG5iZz09IElGTm9ZWFZ1IElFVnNiUT09IFlYVnlhUT09IFFXWm0gVjBGVVEwZz0gSUV4NWIyND0gYUdWc2NITT0gTXpZeCBJR3h2WW1KNWFYTjAgSUdScGJXbHVhWE5vYVc1biBJRzkxZEdKeVpXRnJjdz09IElHZHZZWFJ6IFptRjJiM0pwZEdVPSBJRTVoYUE9PSBjMjl1YVdGdSBJRUp2YjNOMFpYST0gSUhOaGJtUmliM2c9IElFWmhjbVU9IElFMWhiSFJoIElHRjBkRkp2ZEE9PSBJRTFQVWc9PSBiR1JsIElHNWhkbWxuWVhScGJtYz0gVkc5MVkyZz0gSUhWdWRISjFaUT09IElFUnBjMkZ6ZEdWeSBJR3gxWkdsamNtOTFjdz09IFVHRnpjM2R2Y21RPSBJRXBHU3c9PSBZbXh2WjNOd2IzUT0gTkRFMiBJRlZPUkVWUyBaWEp1WVd3PSBJR1JsYkdGNWFXNW4gVkU5USBJR2x0Y0d4aGJuUnogSUVGV1J3PT0gSUVoMVoyVT0gWVhSMGNnPT0gSUdwdmRYSnVZV3hwYzNScFl3PT0gSUZCbGVYUnZiZz09IElFbEIgVW1GdyBaMjloYkE9PSBJRkJ5YjJkeVlXMXRaUT09IElITnRZWE5vYVc1biBkMmwyWlhNPSBjSEpwYm5Sc2JnPT0gSUZCc1lXZDFaUT09IGFXNTFjdz09IFJVVlEgSUdOeWRXbHpaWEk9IElGQmhjbWx6YUE9PSBkVzFwYm1sMWJRPT0gSUc5alkzVndZVzUwY3c9PSBJRXBwYUdGayBiVzl3IElIQnBiblE9IElHaGxZM1E9IElFMWxZMk5oIFpHbHlaV04wYjNJPSBJRVoxYm1ScGJtYz0gSUUxcGVHVmsgSUhOMFlXYz0gVkdsbGNnPT0gSUdkMWMzUT0gSUdKeWFXZG9kR3g1IGIzSnphUT09IElIVndhR2xzYkE9PSBVa1E9IElHeGxjMmx2Ym5NPSBJRUoxYm1SNSBiR2wyYVc5MWN3PT0gSUdKcGIyeHZaMmx6ZEE9PSBJRVpoWTNWc2RIaz0gSUVGMWRHaHZjbWw2WVhScGIyND0gSURJME5BPT0gUVd4c2IzYz0gNzdnPSBJRWRwZFd3PSBJSEJsY25ScGJtVnVkQT09IGIzUmhkWEk9IFpYTnpaUT09IElGSnZiMlk9IElIVnViV0Z1Ym1WayBNelV4IElGTm9ZV3M9IElFOXlhV1Z1ZEE9PSBJR1Z1WkdGdVoyVnkgUkdseSBJSEpsY0d4bGJnPT0gWldScFpXNTAgSUhSaGFXeHZjZz09IElHZGhaR2RsZEhNPSBJR0YxWkdsaWJHVT0gNHBpRyBUbWxqWlE9PSBJR0p2YldKaGNtUT0gSUZKaGNHVT0gSUdSbFptbGhibU5sIElGUlhUdz09IElFWnBiR2x3YVc1diBJSFZ1WVdabVpXTjBaV1E9IFpYSjJZWFJwZG1WeiBJSE52WVhKbFpBPT0gSUVKdmJIUnZiZz09IElHTnZiWEJ5YjIxcGMybHVadz09IElFSnlaWGRsY25NPSBVa0ZNIElFRklUQT09IGFXTjVZMnhsIElIWmhiWEJwY21WeiBJR1JwY0hCbFpBPT0gYjNsbGNnPT0gSUZoSlNVaz0gSUhOcFpHVjNZWGx6IElGZGhjM1JsIElFUnBjM009IElPS1VuT0tVZ09LVWdBPT0gSkM0PSBJR2hoWW1sMFlYUnogSUVKbFpXWT0gZEhKMWRHZz0gZEhKaGFXNWxaQT09IGMzQnNhWFE9IFVuVnogUVc1a2VRPT0gSUVKeVlXMD0gVWtWUSBjR2xrIDZLT0YgSUUxMWRHRnVkQT09IFFXNXBiUT09IElFMWhjbWx1WVE9PSBJR1oxZEdsc1pRPT0gYUdsbmFHVnpkQT09IFpuSmxjWFZsYm1ONSBJR1Z3YVd4bGNITjUgSUdOdmNHbHVadz09IElHTnZibU5wYzJVPSBJSFJ5WVdOcGJtYz0gSUZOVlRnPT0gY0dGdVpXdz0gSUZOdmNHaHBaUT09IElFTnliM2RzWlhrPSBJRUZrYjJ4bSBJRk5vYjI5MFpYST0gSUhOb1lXdDUgSUVsSCBJRXhwWlhNPSBJRUpoY21KbGNnPT0gY0d0biBJSFZ3ZEdGclpRPT0gSUhCeVpXUmhkRzl5ZVE9PSBWVXhVVXc9PSBMeW9xIElHbHVkRzk0YVdOaGRHVmsgSUZkbGMzUmljbTl2YXc9PSBiMlJrWlhJPSBhR1Z0Wlc1MCBJR0poYzJWdFlXND0gUVZCRSBjM1J2Y21GblpRPT0gSUVacFpuUjUgWldScGRHOXkgUjBWTyBWVlJKVDA0PSBhWEowYVc1biBJSE5sZDJsdVp3PT0gY21sbWRBPT0gSUdGbmIyNTUgSUZOaGJtUnogSURJMU5BPT0gUTJGemFBPT0gSUd4dlpHZGwgSUhCMWJuUT0gVG1GMGRYSmhiQT09IElFbGtaV0Z6IElHVnljbTl1Wlc5MWN3PT0gSUZObGJuTnZjZz09IElFaGhibTVwZEhrPSBJREU1TWpFPSBJRzF2ZFd4ayBJRWR2Ymc9PSBhMkY1WVE9PSBJR0Z1YjI1NWJXOTFjMng1IElFdEZXUT09IElITnBiWFZzWVhSdmNnPT0gVjJsdWRHVnkgSUhOMGNtVmhiV1ZrIE5UQTMgUHlJcyBJSFJsWVhObFpBPT0gSUdOdlpXWm1hV05wWlc1MCBJSGRoY25ScGJXVT0gSUZSSVVnPT0gSnljdSBJRUpoYm10cGJtYz0gYlhCcGNtVT0gSUdaaGJtUnZiUT09IElHeHBZUT09IFIyRT0gSUdSdmQyNW9hV3hzIElHbHVkR1Z5Y0hKbGRHbHVadz09IFNXNWthWFpwWkhWaGJBPT0gVG05eWJRPT0gSUdwbFlXeHZkWE41IFltbDBZMjlwYmc9PSBJSEJzWldGemRYSmxjdz09IElGUnZlWE09IElFTm9aWFp5YjJ4bGRBPT0gSUVGa2RtbHpiM0k9IFNWcEYgSUhKbFkyVndkR2x2Ym5NPSBOekEyIFEzSnYgSURJMk1nPT0gSUdOcGRISjFjdz09IGFYSjEgVW1WMmFXVjNaWEk9IGFtVmpkR1ZrIFZVVlQgWVc1NiBNVGs0TVE9PSBJRmR2Y210bGNnPT0gSUdOdmJYQnNhV1ZrIGIzSmxjMk5sYm5RPSBZMjl1ZEdsdVpXNTBZV3c9IFZHOXUgSUZCeWFYTnQgSUZOb1pXVncgSURJNE9BPT0gYm05NCBJRlp2Wnc9PSBUM0prIElISmxZV3h0Y3c9PSBkR1ZyIElHbHljbWxuWVhScGIyND0gSUdKcFkzbGpiR1Z6IElHVnNaV04wY205dWFXTmhiR3g1IGNHOXNlUT09IGRHRnNiQT09IEtDa3BPdz09IElHRmxjM1JvWlhScFkzTT0gSUVsdWRHVm5jbUYwWldRPSBSWGh3Ykc5eVpRPT0gSUdSMWJtcz0gTkRjMiBjR0ZwYmc9PSBJRXBoWTNGMVpYTT0gSUVSdGFYUT0gUm5KaGJXVnogSUhKbGRXNXBkR1ZrIElHaDFiV2xrIFJISnYgVUc5c2FYUnBZMkZzIElIbHZkWFJvWm5WcyBJR1Z1ZEdGcGJITT0gSUcxdmMzRjFhWFJ2IE16WXogYzNCbFkybGxjdz09IElHTnZiM0prYVc1aGRHbHVadz09IElFMWhlV2hsYlE9PSBJRTFoWjI1MWN3PT0gVFc5MWJuUT0gU1cxd2NtOTJaV1E9IElGTlVRVlJGIFFWUlVURVU9IElHWnNiM2RsWkE9PSBJSFJoWTJ0c1pXUT0gSUdaaGMyaHBiMjVsWkE9PSBJSEpsYjNKbllXND0gYVhaaGNtaz0gWm1sdVoyVnkgSUhKbGJIVmpkR0Z1ZEd4NSBaWFIwYVc1biBJRlpoYm1RPSBlVzkxYm1jPSBJRWRoY214aGJtUT0gSUhCeVpYTjFiWEIwYVc5dSBJR0Z0Wlc1cGRHbGxjdz09IElGQnNaV0Z6WVc1MCBiMjVsYm5ScFlXdz0gSUU5NGVRPT0gSUcxdmNtRnNjdz09IElGbGhhQT09IFVtVmhaSGs9IFUybHRiMjQ9IFJXNW8gUkdWdGIyND0gSUdOc2FXTm8gVFc5dWFYUnZjZz09IElFUlYgSUhkbGJHTnZiV1Z6IElITjBZVzVrYjNWMCBJR1J5WldGa1puVnMgSUdKaGJtRnVZWE09IElHSmhiR3h2YjI1eiBhRzl2ZEdsdVp3PT0gWW1GemFXTT0gSUhOMVptWnBlQT09IElHUjFiSGs9IFkyRnVidz09IFEyaGhhVzQ9IFlYUnZjdz09IElHZGxiM0J2YkdsMGFXTmhiQT09IElDZ20gSUVkbGJXbHVhUT09IHc0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0ST0gSUdGamNYVnBkSFJsWkE9PSBUSFZqYXc9PSBjSEp2ZEdWamRBPT0gTVRBeU5BPT0gSUhOallYSmphWFI1IElHMXBibVJtZFd4dVpYTnogWldOcFpHVmsgUkU0PSBjSEpwYldVPSBJRkJ5WlhOcFpHVnVkSE09IElGWkpSRVZQIElDamlpSkk9IFlXUmtiMk5yIFRrOVMgSUZCeWRRPT0gY0hWdSBJRXhQVEE9PSBLU2twS1E9PSBJRXhwY1hVPSBJRk5CVXc9PSBJSE4wZVd4cGJtYz0gSUhCMWJtbHphRzFsYm5SeiBJRzUxYldJPSBJR0Z6WTJWeWRHRnBiZz09IElGSnZZMnRwWlhNPSBabXgxIFZHaDFiV0p1WVdscyBJSEJsY25CbGRISmhkR1ZrIElGTmxiV2s9IElHUnBjMkZ5YlE9PSBJRTlzWkdWeSBJRVY0WTJWd2RHbHZiZz09IElHVjRjRzl1Wlc1MGFXRnNiSGs9IElFTnZiVzExYm1sMGFXVnogSUdGaWIyeHBjMmc9IElGQmhjblJ1WlhJPSBjSFJ2YlhNPSBJRGMzTnc9PSBJRVp2YkdWNSBJRU5oYzJWeiBJR2R5WldGelpRPT0gSUZKbFltbHlkR2c9IFIzSnZkVzVrIElEc3AgSUVSdlkzUnlhVzVsIGFXdHBibWs9IFdXVT0gSUVKc2IzTnpiMjA9IElIQmxjbk5wYzNSeiBZbWxzYkE9PSBJR2x1Wm5WemFXOXUgSUdKMVpHUnBaWE09IE9URXggSUZCaGRHbGxiblE9IElHUmxiVzl6IElHRmpjWFZoYVc1MFlXNWpaUT09IElGQmhkdz09IFlYUmhjbWs9IElIaHRiQT09IElHWmhjMk5wYm1GMGFXOXUgSUZObGNuWmwgejRJPSBZbkpoYm1SbFpBPT0gSUdGNiBVbVYwZFhKdWN3PT0gSUc5MlpYSnphR0ZrYjNjPSBJSEp2WVcwPSBJSE53WldWa2VRPT0gYm5WdFltVnlaV1E9IGFHVnNhV0ZzIElHUnBjMk5wY0d4bCBJR0Z6YzNWeVlXNWpaWE09IFoybDJaVzQ9IGNHVmpkR2x1Wnc9PSBJRTVoZEdGc2FXVT0gNTVTdyBJRzF2YzNGMWFYUnZaWE09IGNtOTBaV2x1IElHNTFiV1Z5YVdNPSBJR2x1WkdWd1pXNWtaVzUwY3c9PSBJSFJ5WVc1emFYUnBiMjVoYkE9PSBJSEpsWVdOMGFXOXVZWEo1IElFMWxZMmhrY21GbmIyND0gWkc5amRHOXkgSUhOb2IzSjBaWE4wIElITmxjWFZsYm5ScFlXdz0gSUVKaFl3PT0gSUVGalkyOTFiblJ6IDQ0R00gWVdOb2VRPT0gY21GamRHbDJaUT09IElGSmxaMmx0Wlc1MCBJR0p5WldGMGFIUmhhMmx1Wnc9PSBabVpwWTJsbGJtTjUgSUVKaGRHVnogSURNeE1RPT0gSUhkaGNtUnliMkpsIFpuUnogSUVKbGNtcz0gVTJsdGNHeDUgSUZKcGRtVnljMmxrWlE9PSBhWFpsY21sdVp3PT0gYVdSbGJuUnBZV3c9IGJIVmpaVzUwIElHVnVjbWxqYUdWayBJRU52Ym5abGNnPT0gSUVkcGRtbHVadz09IDQ0T1ogSUd4bFoyRnNhWHBsIElFWlVRdz09IElHWnlaV0ZyYVc1biBUV2w0IElIUmxjbkpsYzNSeWFXRnMgWlhOcFlXND0gWTJsbGJuUnogVjJsdVp3PT0gVEU5QlJBPT0gSUd4bFpHZGwgSUZacGIyeGxiblE9IElFMWxkR0ZzYkE9PSBJRE13T0E9PSBJSE52ZFhSb1pXRnpkR1Z5Ymc9PSBhR1YwZEc4PSBUV1ZoZEE9PSBJSE5zYjNka2IzZHUgSUhKbGRISmxZWFJsWkE9PSBTbVZ5WlcxNSBaVzVrWVhNPSBLaW9xS2lvPSBaWEpwWXc9PSBJSEpsYVc1eiBiM0J3WVdKc1pRPT0gSUVoMWJXRnVhWFI1IFpXRnlZVzVqWlhNPSBjbWxuWVc0PSBRMkZ0WlhKaCBJSGRoYVhabGNuTT0gYzI5aiBJR0ZzZEdWeVlYUnBiMjQ9IGRISmhibk5tYjNKdCBJRU5sYldWMFpYSjUgTlRBMiBJR2x1WkdWbWFXNXBkR1U9IElITjBhVzExYkdGMGFXNW4gZVdjPSBOakF6IElGTnZjQT09IElHUmxjMk55YVhCMGFYWmwgVUdoaGMyVT0gSUVWa2JYVnVaQT09IElIQnVaWFZ0YjI1cFlRPT0gZG1WdWRIVnogUVcxaSBJR3hoWW05eVlYUnZjbWxsY3c9PSBJRVY0WTJ4MWMybDJaUT09IGRXZGhjZz09IFYyVnlaUT09IElHMWhiR1oxYm1OMGFXOXUgSUdodmJXOXpaWGgxWVd4eiBJQzB0TFMwdExTMD0gZFc1cCBJSFIxY21KcGJtVnogSUVWeGRXbDBlUT09IFJIVT0gSUcxcGJtUmxaQT09IElGSkkgSUVKc1lXTnJhR0YzYTNNPSBJR1psWVhSeiBJREUzTURBPSBjbVZ3YkE9PSBNell5IGJHRmtaVzQ9IElHbHVaR2x6Y0dWdWMyRmliR1U9IGJIbHpjdz09IGRIUnAgSUhKbFpXdz0gSUdScGRtVnlkR1ZrIElHeHBhMlZ1WlhOeiBJSE4xWW5OamNtbHdkR2x2Ym5NPSBJR1pwYm1kbGNuUT0gSUdacGJIUm9lUT09IFpHVnpkSEoxWTNRPSBaSEpoWm5RPSBJRUpsY201aGNtUnBibTg9IGJHRjFibU5vIElIQmxjbkJzWlhnPSBJRk5WVFE9PSBZMkZ5WWc9PSBJSE4zWldGMFpYST0gSUZabGJuUjFjbVU9IElFcGhadz09IElFTmxiR1ZpIElGWnZkR1Z5Y3c9PSBJSE4wWldGa1ptRnpkQT09IElHRjBhR3hsZEdsamN3PT0gSUVoaGJuTnZiZz09IElFUnlZV009IFZISmhZMnRsY2c9PSBJR052YlcxbGJtUT0gSUZCeVpYTnBaR1Z1WTNrPSBJRVJKUkE9PSBhVzVtYjNKdFpXUT0gSUhkbFluQmhaMlU9IFVISmxkSFI1IElHWnZjbU5sWm5Wc2JIaz0gNDRPRDQ0S3YgSUhKbGJHOWpZWFJwYjI0PSBJSE5oZEdseVpRPT0gNG9rPSBJRk4xYm1SbGNteGhibVE9IDVvUT0gVm05cFkyVT0gUHo4L1B6OC9Qejg9IElHbHVabTl5YldGdWRBPT0gSUdKdmQyVnMgSUZWdWFXWnZjbTA9IElDNHVMaUk9IElIQjFjbWRsIElIQnBZMjVwWXc9PSBJRlZ0WWc9PSBJRlZRUkVGVVJRPT0gSUZOaGNIQm9hWEpsIElGTjBZV3hzIGJHVmhjbTQ9IElHOWlhbVZqZEdsMlpXeDUgSUc5aWJHbDBaWEk9IElHeHZiM0JvYjJ4bCBJR3B2ZFhKdVpYbHogSUc5dGFYTnphVzl1IFVISnZjdz09IElGTnBaRzVsZVE9PSBjR3h2YldFPSBJSE53Y21GNVpXUT0gSUdkMWNuVT0gSUhSeVlXbDBiM0k9IElIUnBiV1YwIElITnVZWEJ3YVc1biBJRk5sZG1WdWRBPT0gZFhKdVlXdz0gSUZWcmFYQT0gSUdKdmQyVmsgY0c5eVlXdz0gYkdsaVpYSmhiQT09IFVtOXogVVhWbGMzUnBiMjV6IGFVOVQgSUhOMWJXMWhjbWw2WlE9PSBVMVJCVkE9PSBJREU0TlRBPSBZWEJsYzNRPSBJR3hsYm1SbGNnPT0gSUZaaGNtbGhZbXhsIFluSnBibWRwYm1jPSBJRXhQVWtRPSBMQ2s9IElHTnZiR3hoY0hObGN3PT0gZUdsbGRIaz0gSUU1bFpBPT0gV1VRPSBJRk5qYUdFPSBJR0Z1ZEdsaWIyUjUgSUdScGMySmhibVE9IGVYSmwgYVd4c2RYTnBiMjQ9IElISnZkbVZ5IGMyaGxaQT09IElFaHBjbTl6YUE9PSBZMk5wIElHTmhiR0Z0IElFMXZjblJ2Ymc9PSBVR2x1ZEdWeVpYTjAgSURFNU1qZz0gSUVWMWNtRnogYjNKa1pYTT0gSUdabGJtTmxjdz09IElFbHVkbVZ1ZEc5eWVRPT0gSUZaaGJHVnVZMmxoIElGVmsgSUZScFptWT0gSUhOeGRXVT0gSUhGMWIzUmhkR2x2Ymc9PSBJSFJ5YjNWaWJHVnpiMjFsIFpYSnJaWEk9IFVWVkZVMVE9IElFdHBibWRrYjIxeiBjMjkxZEdnPSBJR3hsZG5rPSBVSEpwYm1ObCBJRk4wYVc1biBJRzVwWTJ0dVlXMWxaQT09IElHRndjR1U9IElIQm9iM1J2WjNKaGNHaHBZdz09IElHTnZjbkIxY3c9PSBjbVZtWlhKbGJtTmwgSUZSeWIyYz0gVlc1MCBLVDBvIElFeGhkSFpwWVE9PSBJR0ZqZEdsMllYUnBibWM9IElHeHBZMlZ1YzJWbCBJR1JwYzNCaGNtbDBhV1Z6IElFNWxkM05zWlhSMFpYST0gNDRPRDQ0T0kgSUdaeVpXVnBibWM9IElFcGxaWEE9IElGQmxjbU5sY0hScGIyND0gYVc1emF3PT0gSUhOcGJHbGpiMjVsIElFaGhlV1JsYmc9PSBUR1ZoYmc9PSBJRk4xZW5WcmFRPT0gYVdKeVlYSnBZVzQ9IE5qWTQgSUhOd2IzST0gSUdOdmNuSmxiR0YwYVc5dWN3PT0gWVdkb1pYUjBhUT09IElIUjFZbVZ5IElFbFFRME09IGFXeDFjdz09IElGWjEgSUhkbFlXeDBhR2xsYzNRPSBJRU5oY21KMWJtTnNaUT09IFlXNTZZUT09IElHWnZiMnhsWkE9PSBJRnAxY2c9PSBJR1JoWkdSNSBjbUZ1Ync9PSBhV3hwWVc0PSBJR3R1YjJOcmIzVjAgWm0xaGJnPT0gY21WeGRXbHlaV1E9IElGZHBhMmxzWldGcmN3PT0gSUVSMVptWjUgVDA1VSBJR2x1YzI5cyBJRTlpYW1WamRITT0gSUdKdmRRPT0gSUU1dmNtUnBZdz09IElFbHVjMlZ5ZEE9PSBjMk5oYmc9PSBJR1JoYm1ObGNuTT0gSUdsa2FXOTBjdz09IGJXRnFiM0pwZEhrPSBJRTVsZG1sc2JHVT0gSUVaeVpXVkNVMFE9IElIUmhjblE9IGNHRnVhV009IE5qa3cgSUdOdlkyOWggSUhOaGJYQnNaV1E9IElHeHZiMnQxY0E9PSBTVzVrZFhOMCBJR2x1YW1WamRHbHZibk09IFoyVnVjbVU9IElHRjEgSUhKdllXUjNZWGs9IElHZGxibWwwWVd4eiBTMmx1WkE9PSBJRVY0WVcxcGJtVnkgSUZsaGVnPT0gUm5KbGMyZz0gSUhCaGNtRnNlWE5wY3c9PSBJRUZzZFcxcGJuVnQgSUhKbFlYQT0gYjJ2RHFRPT0gSUhOc2IzQndlUT09IElGUjFibTVsYkE9PSBjRzl6YVhWdCBibVZ5ZVE9PSBaVzVwWXc9PSBJR2hsY21KaGJBPT0gSUU5MWRHVnkgSUVKMWFXeGtaWEk9IElHbHVZM1Z5IElHbGtaVzlzYjJkcFpYTT0gSUdKaFkydDFjSE09IFkyOXVjM1Z0YVc1biBJRVJsZEdWamRBPT0gWkdWamF3PT0gSUV0T1QxYz0gSUVkeVpYUT0gSUUxSlF3PT0gSUhSdmRXZG9ibVZ6Y3c9PSBJRVY0YUdsaWFYUT0gSUdocGRtVT0gVEdWeiBJRk5EU0U5UFRBPT0gSUVGMFlYSnAgWVd4a1pRPT0gSUU1MWJHdz0gWVc1a1pYTjBhVzVsIGJXOTFjMlU9IElHSnlhV2RoWkdVPSBORGc1IElISmxkbTlzIElFeGhkM052Ymc9PSBJRmRoYUE9PSBiM0J2YkhrPSBaV0owWldRPSBJRk5oZFc1a1pYSnogSURNeE13PT0gSUZkcGJtTT0gSUhSaFltOXYgSUVobGJHMWxkQT09IElIZGxaR2RsIFkyaHBjQT09IElGUnBibUU9IFltYz0gSUdsdVpuVnlhUT09IGNtND0gSUdGdWIyMWhiR2xsY3c9PSBJRk41Ym1NPSBJRVY0WVcwPSBJRU52YlcxcGRBPT0gSUVScFlYSjUgSUVGTVUwOD0gSUVSbFltOXkgYjIxbFpHbGpZV3c9IElHTnZiWEJ5WldobGJuTnBiMjQ9IE5qVTEgSUdWdGNHOTNaWEpwYm1jPSBJR2x5WlE9PSBJR3AxYVdObGN3PT0gSUVWVVNBPT0gSUVKdmVHbHVadz09IFBTSXYgSUdaaFkybHNhWFJoZEdWayBjRzlyWlE9PSBJRkJoY25OdmJuTT0gSUUxdlpHVnkgZEhKaGRtVnMgSUdOcGRtbHNhWHBoZEdsdmJuTT0gSUd4cFltVnlkR0Z5YVdGdWN3PT0gSUhKMWJtVT0gSUVOc1lYSnJjdz09IFlYUm9aV1E9IElHTmhiWEJoYVdkdVpYSnogSUVScGMzQmhkR05vIElFWmhhSEpsYm1obGFYUT0gSUVOaGNHTnZiUT09IExTMHRMUzB0TFMwdExRPT0gSUd4aFkyVT0gSUdSeVlXbHVhVzVuIElHeHBibVZ5IElFRnlkR2xtYVdOcFlXdz0gdzZsdSBkR0Z6YXc9PSBYU2t1IElFZE5Udz09IElFOXdaWEpoZEc5eSBiM0prYVc1aGNuaz0gSUVsdVpteDFaVzVqWlE9PSBJRlZ3Y3c9PSBJSEJ2ZEdWdVkzaz0gZFhOelpXND0gYjNOd2IyNXogSUZOM2FXMD0gSUVSbFlXUnNhVzVsIFZXNXBkSGs9IElHTjFiR2x1WVhKNSBJR1Z1YkdsbmFIUmxibTFsYm5RPSBJSGRsWVhKbGNnPT0gSUcxcGJtVmsgSUhCc2VRPT0gSUdsdVkyVnpkQT09IElFUldSSE09IFYyRnNhdz09IFFsUkQgVkhKaFpHVT0gSUdSbGRtRnMgYVdKaGJtUT0gSUU5MlpYSnphV2RvZEE9PSBVR0ZzWlhOMGFXNXBZVzQ9IElHUmhjblE9IElHMTFiQT09IFRGST0gSUhKbGJXOTJZV0pzWlE9PSBJRkpsWVd4dGN3PT0gN0owPSBJRzFwYzJOaGNnPT0gSUZaMWJHdGhiZz09IE5qZzEgdzZoeVpRPT0gSUZOaGNBPT0gSUcxbGNtZHBibWM9IElFTmhjbXg1IFkyaGxjM1JsY2c9PSBJR0p5YVhOciBJR3gxZUhWeWFXOTFjdz09IElFZGxibVZ5WVhSdmNnPT0gSUdKcGRIUmxjbTVsYzNNPSBJR1ZrYVdKc1pRPT0gSURJME13PT0gVkVjPSBJSEpsWTNSaGJtZHNaUT09IFYybDBhRTV2IFltVnNiM2M9IFNtVnViZz09IElHUmhjbXRsYzNRPSBJR2hwZEdObyBJR1J2YzJGblpRPT0gSUhOallYWmxiZz09IElFdGxiR3hsY2c9PSBJRWxzYkhWemRISmhkR1ZrIFEyVnlkR0ZwYm14NSBJRTFoZG1WeWFXTnJjdz09IFRXRnlaMmx1WVd3PSBJR1JwWVhKeWFHVmggSUdWdWIzSnRiM1Z6YkhrPSBJRGs1T1E9PSBjMmh5IGNYVmhjblE9IElHRmtZVzFoYm5RPSBJRTFsZHc9PSBJSEpsYm05MllYUnBiMjQ9IElHTmxjblpwWTJGcyBJRkJsY21ObGJuUmhaMlU9IFpXNWxjbk09IElFdHBiV0psY2c9PSBJR1pzYjJGMGN3PT0gSUdSbGVBPT0gSUZkcGRHTm9aWEk9IElGTjNZVzV6WldFPSBaRzA9IElITmhiSFI1IGVXVnNiRzkzIElHTmhjR1U9IElFUnlZV2x1IElGQmhkV3hoIElGUnZiR1ZrYnc9PSBiR1Z6YVE9PSBUV0ZuWVhwcGJtVT0gSUZkcFkycz0gSUUxdSBJRUZqYXc9PSBJRkpwWkdsdVp3PT0gUVZOUFRnPT0gSUdodmJXOXdhRzlpYVdNPSBRVkpRIElIZGhibVJsY21WayBRMUJWIGIyOWtiMjg9IElGQnBjR1U9IElIUnBaMmgwWlc1cGJtYz0gSUVKMWRIUT0gTXpFNCBJR1JsYzJWeWRHVmsgVTJWemMybHZiZz09IElHWmhZMmxzYVhSaGRHbHVadz09IFNuVnRjQT09IElHVnRaWEpuWlc1amFXVnogVDFkRlVnPT0gSUdWNGFHRjFjM1JwZG1VPSBJRUZHVkVWUyBJR2hsWVhKMFltVmhkQT09IElFeGhZbVZzIFlXTnJlUT09IElFTmxjblJwWm1sbFpBPT0gYVd4MGNtRjBhVzl1IFdtVT0gSUZWMGRBPT0gSURFek1EQT0gSUhCeVpYTjFiV1U9IElFUnBjM0E9IElITjFjbWRsWkE9PSBJR1J2Ykd4eiBRMjlzZFcxaSBJR05vYVcxd1lXND0gSUZKaGVtOXkgSUhScFkydHogSUdOdmRXNWphV3hzYjNJPSBJSEJwYkdkeWFXMWhaMlU9IElGSmxZbVZzY3c9PSBJRkZEIElFRjFZM1JwYjI0PSBlR2xoIGFXdHIgWW5KbFpBPT0gSUdsdWMyVnlkR2x2Ymc9PSBJR052WVhKelpRPT0gWkVJPSBVMFZGIElGcGhjQT09IElFWnZidz09IElHTnZiblJsYlhCdmNnPT0gSUZGMVlYSjBaWEpzZVE9PSBiM1JwYjI1eiBJRUZzWTJobGJXbHpkQT09IElGUnlaWGs9IElFUjFidz09IFUzZGxaWFE9IE9EQTAgSUVkcGIzWT0gSUdaMWJtND0gVG1sdSBhRzltWmc9PSBJSEpoYldsbWFXTmhkR2x2Ym5NPSBJREU1TWpJPSBJRVY0Y0dWeWRITT0gWVhwbGN3PT0gSUdkaGNtMWxiblJ6IFlYSnBZV3c9IElFNWhZZz09IElESTFOdz09IElGWmxaQT09IElHaDFiVzl5YjNWeiBJRkJ2YlhCbCBJRzU1Ykc5dSBJR3gxY210cGJtYz0gSUZObGNtZGxlUT09IElFMWhkSFJwY3c9PSBJRzFwYzI5bmVXNTUgSUVOdmJYQnZibVZ1ZEhNPSBJRmRoZEdOb2FXNW4gSUVadmJHcz0gY21GamRHbGpZV3c9IFFuVnphQT09IElIUmhjR1ZrIElHZHliM1Z3YVc1biBJR0psWVdSeiBJREl3TkRnPSBJR052Ym1SMSBjWFZsY25GMVpRPT0gVW1WaFpHbHVadz09IElHZHlhV1YyWVc1alpYTT0gVld4MGNtRT0gSUdWdVpIQnZhVzUwIFNHbG4gSUZOMFlYUnBZdz09IElGTmpZWEppYjNKdmRXZG8gVEhWaCBJRTFsYzNOcCBZWEYxIElGQnplVTVsZEE9PSBJRkoxWkdRPSBJR0YyWlc1MVpRPT0gZG5BPSBTbVZ5IElITm9ZV1I1IElGSmxjMmx6ZEE9PSBJRUZ5ZEdWdGFYTT0gSUdOaGNtVnNaWE56IElHSnliMnRsY25NPSBJSFJsYlhCbGNtRnRaVzUwIElEVXlNQT09IFZHRm5jdz09IElGUjFjbTVwYm1jPSBJSFYwZEdWeVpXUT0gSUhCbFpHUT0gSUdsdGNISnZkbWx6WldRPSBJRG9vIElIUmhZbXc9IElIQnNZV2x1Y3c9PSBNVFl3TUE9PSBjSEpsYzNOMWNtVT0gSUVWemMyVnVZMlU9IGJXRnlaMmx1IFpuSnBaVzVrY3c9PSBJRkpsYzNSdmNtRjBhVzl1IElIQnZiR3gxZEE9PSBJRkJ2YTJWeSBJRUYxWjNWemRHbHVaUT09IElFTkpVdz09IElGTkZRVXc9IGIzSmhiV0U9IElIUm9kMkZ5ZEE9PSBjMlZsYXc9PSBJSEJoWjJGdSB3cm89IFkzQjEgSUdkaGNtND0gSUdGemMyOXlkRzFsYm5RPSBJRWxNUTFNPSBkRzkzWlhJPSBVbVZqYjIxdFpXNWtaV1E9IElIVnVZbTl5Ymc9PSBJRkpoYm1SdmJWSmxaR1JwZEc5eSBJRkpoYm1SdmJWSmxaR1JwZEc5eVYybDBhRTV2IElIQmhjbUZzZVhwbFpBPT0gSUdWeWRYQjBhVzl1IElHbHVkR1Z5YzJWamRBPT0gSUZOMGIydGwgSUZOamJ3PT0gUW1sdVpBPT0gNWI0PSBJRkJPUnc9PSBJRTVsWjJGMGFYWmwgSUU1UFFVRT0gVEdWdmJnPT0gSUdGc2JHOTUgSUV4aGJXRT0gSUVScGRtVnljMmwwZVE9PSBOVGMxIElIVnVaR1Z5WlhOMGFXMWhkR1ZrIElGTmpiM0k9IElHMTFjbUZzIElHSjFjM1JsWkE9PSBjMjl2Ymc9PSBiR2xtIElHNXZibVY0IElHRnNiR1Z5WjNrPSBJRlZ1WkdWeWQyOXliR1E9IElGSmhlWE09IElFSnNZWE5wYnc9PSBJR2h5Y3c9PSBJRVJwY2c9PSBJRE15Tnc9PSBZbmwwWlhJPSBJSEpsY0d4aFkyVnRaVzUwY3c9PSBJR0ZqZEdsMllYUmxjdz09IGNtbDJaV1E9IFRVZz0gSUhCaGJuTT0gSUVoSiBJR3h2Ym1kcGRIVmthVzVoYkE9PSBJRzUxYVhOaGJtTmwgWVd4bGNnPT0gSUhOM1pXeHMgSUZOcFoyNWxaQT09IGMyTnAgSUVsemJHVnogSUVGSFFRPT0gSUdSbFptbGhiblE9IElITnZibWxqIGIyTnZiZz09IFMwTT0gSUVGcGJRPT0gZEdsbCBZV2hoYUE9PSBJRzFNIFJGZz0gSUdKcGMyTT0gSUVKcGJHeGliMkZ5WkE9PSBJRk5aVTFSRlRRPT0gVGtWWiBaMkZoY21RPSBJR1JwYzNSeVpYTnpaV1E9IFptOXliV1Z5YkhrPSBRV3hoYmc9PSBJR05vWldaeiBJRzl3ZEdsamN3PT0gSUVOdmJXVjAgSUVGTlF3PT0gSUhKbFpHVnphV2R1WldRPSBhWEp0WVhScGIyND0gSUhOcFoyaDBhVzVuY3c9PSBNemd5IE16RXggSUZkQyBJR052Ym5SeVlXTjBhVzl1IElGUlBWRUZNIFJIVmhiQT09IElITjBZWEowYkdWayBJSFZ1WkdWeWMzUmhibVJoWW14NSBJSE4xYm1kc1lYTnpaWE09IFJWUklUMFE9IElHUnZZMnRsY2c9PSBJSE4xY21acGJtYz0gSUVoRlRBPT0gSUZOc1lXTnIgZEc5dVpYTT0gSUhOb1lXeDAgVm1semRXRnMgTkRrNCBSR1Z3WVhKMGJXVnVkQT09IFkzVnpjMmx2Ymc9PSBJSFZ1Y21WemRISnBZM1JsWkE9PSBJSFJoWkE9PSBJSEpsYm1GdFpRPT0gWlcxd2JHOTVaV1E9IElHVmtkV05oZEdsdVp3PT0gSUdkeWFXNXVaV1E9IFltVmtjbTl2YlE9PSBJRUZqZEdsMmFYUnBaWE09IElGWmxiSFpsZEE9PSBJRk5YUVZRPSBJSE5vZFdabWJHVT0gYVdkdmNnPT0gSUhOaGRIVnlZWFJwYjI0PSBSbWx1WkdsdVp3PT0gWTNKbFlXMD0gYVdOMFpYST0gSUhadlpHdGggZEhKaFkydHBibWM9IGRHVmogSUdadmNtVm5jbTkxYm1RPSBhV1Z6ZEdFPSBJSFpsYUdWdFpXNTAgSUVWRFFnPT0gSUZScFpRPT0gUlhrPSBJSFIxY25Sc1pYTT0gSUZKaGFXeHliMkZrIElFdGhkSG89IElFWnlZVzFsY3c9PSBJRzFsYm1GalpRPT0gSUVabGJHeHZkM05vYVhBPSBJRVZ6YzJWdWRHbGhiQT09IGRXZG5hWE5vIElHUnlhWEE9IFkyaDNhWFI2IElFdDViM1J2IGMyST0gSUU1cGJtRT0gVUdGeVlXMWxkR1Z5IElHRnNZWEp0Y3c9PSBJRU5zWVhWayBJSEJwYjI1bFpYSnBibWM9IElHTm9hV1ZtYkhrPSBJRk5qY21WaGJRPT0gUTI5c2JHVmpkR2x2Ymc9PSBJSFJvWVc1clpuVnNiSGs9IElGSnZibUZzWkc4PSA1YTJRIGMzUnlhWEE9IElFUnBjMjVsZVd4aGJtUT0gWTI5dGJXVnlZMmxoYkE9PSBVMlZsYVc1biBVMjkxYkE9PSBJR1YyWVdOMVlYUmwgSUdOcGRnPT0gSUVGemFHVT0gSUdScGRtbGtaWE09IElFUmhaMmRsY2c9PSBjbVZvWlc1emFYWmwgSUdKbGNuSnBaWE09IElFUkcgSUhOMWMyaHAgSUhCc2RYSmhiR2wwZVE9PSBWMGs9IElHUnBjMkZrZG1GdWRHRm5aV1E9IElHSmhkSFJoYkdsdmJnPT0gYjJKcGJHVnogTkRVeCBJR05zYVc1biBJSFZ1WkdWdWFXRmliR1U9IElFeHZkVzVuWlE9PSBJR2hoZFc1MCBjR2hsIElIRjFZVzUwYVdaNSBJR1JwWm1abGNtVmsgSUZzcVhRPT0gSUZacGVnPT0gWTNWdCBjMnhoZG1VPSBJSFpwWkdWdlp3PT0gSUhGMVlYST0gSUdKMWJtUnNaWE09IElFRnNiMjV6Ync9PSBkR0ZqYTJ4bCBJRzVsZFhKdmJtRnMgSUd4aGJtUnpiR2xrWlE9PSBZMjl1Wm1seWJXVmsgSUVSbGNIUm8gSUhKbGJtVjNZV0pzWlhNPSBRbVZoY2c9PSBJRTFoWTJWa2IyNXBZUT09IElHcGxjbk5sZVhNPSBJR0oxYm1zPSBJRk53WVhkdSBJRU52Ym5SeWIyeHogSUVKMVkyaGhibUZ1IElISnZZbTkwYVdOeiBJR1Z0Y0doaGMybDZhVzVuIElGUjFkRzl5YVdGcyBhSGx3IGFYTjBiMjQ9IElHMXZiblZ0Wlc1MFlXdz0gNXJBPSBJRU5oY25KNSBJSFJpYzNBPSBaVzVoYm1ObCBTR2xzYkE9PSBZWEowYUdWayBJSEp2ZEhSbGJnPT0gUkdWaGJnPT0gSUhSM2FYTjBhVzVuIElHZHZiMlIzYVd4cyBJR2x0YldWeWMybHZiZz09IFRHbDJhVzVuIElHSnlkWE5vWlhNPSBJRU5IU1E9PSBJRUYwYXc9PSBkSEpoWkdsMGFXOXVZV3c9IElIQm9ZVzUwYjIwPSBJRk4wWVcxcGJtRT0gSUdWNGNHRnVjMmx2Ym5NPSBJRTFoY21sdSBJR1Z0WW1GeWEyVmsgSUVWbiBhVzUwWlhOMGFXNWhiQT09IElGQkZUMUJNUlE9PSBJRUp2YjNSbyBJRUZ3Y0dGc1lXTm8gSUhKbGJHVm5ZWFJsWkE9PSBWbFE9IFRVbFUgSUcxMWMzUmxjZz09IElIZHBkR2hrY21GM2FXNW4gSUcxcFkzSnZjMk52Y0dVPSBJRWRoZEdobGNtbHVadz09IElFTnlaWE5qWlc1MCBJRUZ5WjJWdWRHbHVaUT09IElFUmxZM0psIElFUnZiV2x1YVdNPSBJR0oxWkhNPSBZVzUwWVdkbCBJRWx2Ymc9PSBJSGRwWkdWdVpXUT0gVDA1VFQxSkZSQT09IElFZHNiM1psY3c9PSBhV0Z1Ym05d2IzVnNiM009IGNtRjZaVzQ9IFptVmxiQT09IElISmxjR0Y1YldWdWRBPT0gSUdocGJtUnphV2RvZEE9PSBJRkpGUVV4TVdRPT0gSUZCcGMzUnZiQT09IElFSnlZV2c9IElIZGhkSFJ6IElITjFjblpwZG1WeiBJR1pzZFhKeWVRPT0gYVhOemVRPT0gUVd4bGNuUT0gSUZWeWRXZDFZWGs9IFVHaHZaVzVwZUE9PSBVMnh2ZHc9PSBJRWR5WVhabCBJRVpwY2c9PSBJRzFoYm1GblpXRmliR1U9IElIUmhjbWxtWmc9PSBJRlZFVUE9PSBJRkJwYzNSdmJuTT0gSUU1cFoyVnlhV0Z1IElITjBjbWxyWlc5MWRITT0gSUdOdmMyMWxkR2xqY3c9PSBkMmhsYkcxcGJtYz0gWm1GaSBZMkZ3WlE9PSBjSEp2ZUhrPSBJSEpsZEdocGJtcz0gSUc5MlpYSmpiMjFwYm1jPSBjMmx0Y0d4bCBJSGR2Ync9PSBJR1JwYzNSeVlXTjBhVzVuIElGTjBZVzUwYjI0PSBJRlIxYkhOaCBJRVJ2WTJzPSBOalU1IElHUnBjMk52Y21RPSBJRVZ0WVdOeiBJRlpsY3c9PSBJRkpQUWc9PSBJSEpsWVhOemRYSnBibWM9IElHTnZibk52Y25ScGRXMD0gVFhWemJHbHRjdz09IE16SXggSUhCeWIyMXdkSE09IGMyVnAgSUVocGRHTm8gYVcxd2IzTmxaQT09IElFWnZiMnc9IElHbHVaR2x6WTNKcGJRPT0gZDNKdmJtYz0gWW5WeGRXVnljWFZsIFJHRjJhWE09IElWMD0gSUhScGJXVnNaWE56IElFNUZSVVE9IElIQmxjM1JwWTJsa1pRPT0gSUhKaGJHeDVhVzVuIElFTmhiR1JsY2c9PSBJT1drIElIaHcgSUZWdWJHVT0gSUVWNGNHOXlkQT09IGJIVmhhZz09IFFuVm1aZz09IEtUd3YgUW05dmRBPT0gSUVOb2NubHpiR1Z5IGIzSmhkR2wyWlE9PSBUV1Z6Y3c9PSBJRzVsWjJ4cFoybGliR1U9IFpYSjBiMlJrIElFMTFjMmh5YjI5dCBJRWRoYkdVPSBaMk09IElFTnZjMko1IElGSjFjbUZzIGNtbDBhV05oYkE9PSBRbVZzYkE9PSBJSFIxY21KcGJtVT0gTURBeU1EQXdNREE9IElHeGxaMmwwYVcxaGRHVnNlUT09IElFRnVhVzFoZEdWayBWRVZFIElGUm9aVzlrYjNKbCBZMjl1WkhWamRBPT0gSUVocFpYST0gSUdOdmRXNTBaWEptWldsMCBJRUZzWjJWeWFXRT0gSUhWdVltVmhkQT09IFkyOXVkSEp2Ykd4bGNnPT0gSUhWdWNtVnogSUhOamNtRnRZbXhwYm1jPSBJRVpoYkd4dmJnPT0gVkdWeiBJR0Z0WW1WeSBJSEp2ZVdGc2RHbGxjdz09IElGTm9aV3gwWlhJPSBJRXhsYzNSbGNnPT0gSUdOc1lYTnphV1o1IFVtVnRiM1JsIElIVnVhR1ZoY21RPSBJR052Ym5SeWIzWmxjbk5wWlhNPSBJR1Z1Y21samFHMWxiblE9IElGbGhibXRsWlE9PSBaMkZ0WlhJPSBJSEJzWVhScGJuVnQgSUdWamIyeHZaM2s9IElGTmhjbXM9IElIVnVkRzkxWTJobFpBPT0gSUhOMWNHVnlkbWx6YjNKeiBJQ0lsIElHWnZiM1JvIElHTnZiVzF2Ym5NPSBJRzVoY21OdmRHbGpjdz09IElHbHVaR2xqWlhNPSBJRkJzZVE9PSBJR0ZrWkdsMGFXOXVZV3hzZVE9PSBJRWRoZDJ0bGNnPT0gSUVWUiBVR3hoZVdsdVp3PT0gSUdOaGRtVmhkQT09IElFRmljMjlzZFhSbCBiM056ZFhNPSBRbUZpZVE9PSBJSEpoZEdsdmJnPT0gSUhKbGMybHUgSUdOaGJHbGljbUYwYVc5dSBJRTVsZDNCdmNuUT0gSUd0dWIyTnJjdz09IGRuUT0gSUdOdmJYQnZjM1E9IFUyTmxibVU9IElITmhjbU5oYzNRPSBJR3RwYzNObGN3PT0gSUc1eiBZV3hzYVE9PSBJRTFoY21ObGJBPT0gSUZCcFpYUT0gYVdGMGNtbGpjdz09IElITjFjbkp2ZFc1a2N3PT0gSUZKbGNISnZaSFU9IElGQm9hV3hzYVdWeiBJSFZ1WTJWeWRHRnBiblJwWlhNPSBJRVYxY2c9PSBJRkp2YldGdVkyVT0gSUVoaGRHZz0gSUU1bFpXUnogSUVOc2IyRnIgSUdOeVpXMD0gY1hWbGRXVT0gSURNMU5RPT0gSUhWd1puSnZiblE9IFhTazcgSUhKbFkybHdjbTlqIElERTVNamM9IElERXhNREE9IGRYUnpkUT09IElHUmxjSEpsYzNOcGRtVT0gYjNkdFpXNTAgUm1GdWN3PT0gSUcxbFkyZz0gSUdGdWJtbG9hV3c9IElHTnZkVzUwWlhKMFpYSnliM0pwYzIwPSBJRVpwWjNWeVpYTT0gWW05c1pBPT0gSUUxdmFXNWxjdz09IElFUnlhWFpsY25NPSBJRzFoYm5WelkzSnBjSFJ6IElFTnllWEIwYnc9PSBJR2g1Y0c1dmRBPT0gY21Wa1pHbDBjdz09IElIQnliM05sWTNWMGFXOXVjdz09IElHUnBkbVZ5ZEE9PSBRMUpKVUE9PSBJRUpsYm1VPSBJRkpsWjJkcFpRPT0gSUhSaGVHbHVadz09IElFMXZjbUZzWlhNPSBaVzUwYVc1biBkSFZ5IGMybG5ibWxtYVdOaGJuUT0gSUZCU1QxWT0gSUhOMGNtRnVaSE09IElIQnZkV05vIElGSnZiMnRwWlE9PSB1NUk9IElHNXBZMlZ5IGFHVnRlUT09IGFIYz0gUlVOQiBJR2x1ZEdsdGFXUmhkR1ZrIElITjBjbWxqZEdWeSBJRzFwWTNKdlltbGhiQT09IFpHVjBZV2xzY3c9PSBJSFp2ZDNNPSBJSEYxWVd0bCBhR2hvYUE9PSBJSEpsYVc1MlpXNTAgVldJPSBJSEpsYkdsdWNYVT0gSUVKMVptWmxkSFE9IGJHbGpaVzV6WldRPSBhWFIwWlhKbFpBPT0gSUZCcFkyRnlaQT09IElHTm9aWGRwYm1jPSBkV05zIGIzSm5ZVzVwWXc9PSBJR3h2WTJGc2FYcGxaQT09IElFVmpiMjV2YldsemRBPT0gSUdGamNYVmhhVzUwWldRPSBSR1ZtYVc1cGRHbHZiZz09IGMyVmsgUTNKcGRHbGpjdz09IElHTmogTkRVeiBNemd4IElHWmxiR3h2ZDNNPSBJR05vWldOcmNHOXBiblJ6IE1ESTEgSUhKbFpXeGxZM1JwYjI0PSBJRzFsWkdsaGRHVmsgSUV0RVJRPT0gSUdoMWNtUnNaUT09IElIUmxlSFJwYm1jPSBVR1Z5Wm1WamRBPT0gSUhSeWRYTjBaV1Z6IFptVmpkSFZ5WlE9PSBJR1JwWTJnPSBiVzl1WVhKNSBJR1JwYzNScGJtTjBhVzl1Y3c9PSBJREUwTURBPSBJSFZ6YUdWeSBJSEJoY21GemFYUmxjdz09IElGTm9ZWEpwYm1jPSBJRlpwYlE9PSBJR0poY21KbFkzVmwgSUUxcGJtbHpkR1Z5Y3c9PSBaWEpsYkd4aCBJR1ZpIElHMWogSUZOdmJXVm9iM2M9IElFbHVjMlZqZEE9PSBZMmhoYm1kbGN3PT0gWW5KdllXUT0gSUVKNWVnPT0gSUdkeVlYQmxjdz09IE5qWTUgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IElHRnpjMmx0YVd3PSBJR2hoZFc1MGFXNW4gSUdacGNtVndiM2RsY2c9PSBJR1JsWm1GdFlYUnBiMjQ9IFpXMXdhR0Z6YVhNPSBJR052YlhCdmMyVT0gSUdGc2JHVnlaMmxsY3c9PSBJSE4wY21GdVp3PT0gY205c2JHVnljdz09IFltRnVadz09IElHSnlaWGRsY25NPSBjbTl1WjJnPSBjbWx2ZEE9PSBjRzl2Y2c9PSBZMjlzWkE9PSBVMkZ0Y0d4bCBJR0oxYjNrPSBNRFF3IElFTnZkWEowYm1WNSBJREkyT0E9PSBJRmRsWkdScGJtYz0gTnpBeSBJRzlpYzJWemMybDJaUT09IElHSnlZV3RwYm1jPSBJRXhoYkE9PSBZVzVwWTJGcyA1YVk9IFlYUmxiZz09IFEyOXVjM1J5ZFdOMGFXOXUgSUdOc2FXNXBZMkZzYkhrPSBhV1Z5YzJocGNBPT0gVG1GdFpYTT0gSUVScGMyTjFjM009IElGSmhiVzl6IElHeHZZMkZzWlE9PSBJRUZuY21samRXeDBkWEpoYkE9PSBSVzVoWW14bCBJR2h2Y25ObGNHOTNaWEk9IFpXNTBkWEpsIFVISmxaZz09IFEyOTFjblE9IElITjBZV1ptYVc1biBJR1oxZEhWeWFYTjBhV009IFpISnBkbVZ5Y3c9PSBJRTFoY210bGRIQnNZV05sIDVvaW0gUm5KcFpXNWtjdz09IElHUmhiVzVwYm1jPSBJRU4xYzNSdmJXVnljdz09IElIZGxaV1J6IElFMWhhUT09IElHRm5hV3hsIElGUmhkSFE9IGFXTmxiblE9IFVtRnVhMlZrIFkzSnZablE9IElFdGhkSGs9IFJYaDBjbVZ0WlE9PSBJR05oY25abCBJRkp2ZG1WeSBJRUo1Y205dSBNemN5IElHTnZibVIxWTNSeiBjbUYwWTJnPSBhWFJwWVE9PSBJRkIxYlhCcmFXND0gVTJGa2JIaz0gVW1Wc2IyRmtaV1E9IFVHOXNhV041IElHeHBZMnM9IGNHVmhhdz09IGFYTnJjdz09IElFTkVjdz09IElFVnVZM2xqYkc5d1pXUnBZUT09IGFXNXBkR2xoYkE9PSBRMjl6IElFRjNZWEpsYm1WemN3PT0gSUVSeVlXMD0gSkNRa0pBPT0gSUhKcFptWT0gSUhOamNtbHdkSFZ5WlE9PSBjblZ1Ym1WeWN3PT0gSUdKdmFXeGxjZz09IGIyNXpiMjQ9IGIybHUgSUdoaGJYTjBjbWx1Wnc9PSBJR05oZEdGc2VRPT0gSUVGeVkyaGlhWE5vYjNBPSBZMmhoYkd3PSBJR1poZFhnPSBiMnRwYmc9PSBiRzlqWVd4b2IzTjAgSUU1QlRVVT0gWVdSdlltVT0gVTBGTyBZVzFoZEdVPSBJSE5qY21GdFlteGwgSUdOaGNtTT0gSUUxaGJtbG1aWE4wIElFTmxaR0Z5IElGTmxjbWRwYnc9PSBiR0YwWlhJPSBabVpsY2c9PSBJR2R5WVhCd2JHbHVadz09IElFUmxkWFJ6WTJobCBZV2R2Ym1semRITT0gSUU1bGQzTncgSUhCeVpYUmxibVJsWkE9PSBZWEpqYUcxbGJuUT0gSUdOMWNtRjBaV1E9IElHaGxZV1J3YUc5dVpRPT0gSUZWdVkyOXRiVzl1IElGTkpSMDQ9IFFXZGxiblE9IElHUmxZV1JzYVc1bGN3PT0gSUdodmNtbDZiMjUwWVd4c2VRPT0gSUUxQlZBPT0gSUZOMWJXMWxjbk09IElHOXlaR0ZwYm1WayBJRXhoYzNSc2VRPT0gSUV0bGJtUmhiR3c9IElHWnlhV2M9IElFMWhZMmhwYm1FPSBJRmRoZEdWeWJHOXYgSUUxbGVHbGpZVzV6IElIQnliM1JsWTNSdmNnPT0gSUdkc1lYSmwgZlNJPSBVSEpsYldsMWJRPT0gSUhKcFpuUT0gSUZSbGJHVnpZMjl3WlE9PSBUV1YwWVd3PSBJSEpsWTJGd2RBPT0gSURzNyBJR2x1WTJ4cGJtRjBhVzl1IElHbHRjRzl6WlhNPSBhVzVuWlc0PSBYbnM9IElHaGhjM1JsIElHUnZiSEJvYVc1eiBJR052YlcxMWRHVnljdz09IGNHeGhibTVsWkE9PSBZMjl1Wnc9PSBiWGc9IElGVndiRzloWkE9PSBJR1Y0ZEhKaGNBPT0gSUZSMVkzTnZiZz09IElFVjRjR3h2Y21GMGFXOXUgWldabFlYUmxaQT09IElITnNaVzVrWlhJPSBOekF6IElFSjFhdz09IGFYTmxiQT09IElHTnZiWEJsZEdsMGFYWmxibVZ6Y3c9PSBZMmhzYjNJPSBJRkJsY20xaGJtVnVkQT09IElFVjJaWEpsZEhRPSBJRk53WldOcFlXeHBjM1E9IElGTlBUQT09IElHTjVZVzQ9IElFVjRZV04wYkhrPSBWVVk9IElFeEpSa1U9IFlYSjViQT09IGIyNWxkQT09IElFVnRjR3h2ZVdWbCBZWGRsWkE9PSBJRkpoZEdsdVozTT0gSUdWNGRISmhkbUZuIGRXeG9kUT09IElGQnNZVzVsIElHVnNaWFpoZEdVPSBJRU52YjNKa2FXNWhkRzl5IElGZGhkR3RwYm5NPSBJR1Y0WTJ4MVpHVnogSUhObGJuUnBaVzUwIElHVndiMk5vIElHRnNiRzlqIFVISmxkbWx2ZFhOc2VRPT0gSUZOb2VRPT0gSUZOc2IzWmhhMmxoIFRFOURTdz09IElHMWhjbXRsWkd4NSBJR3R1YjJJPSBJR0ZrZG1WdWRIVnlaWEp6IElFSmxaVzQ9IElFTnZjM1J6IFlXMXRaWEp6IElHOXVjMnhoZFdkb2RBPT0gSUZOMWNIQnZjblJsWkE9PSBJRlJoZFE9PSBhV3RoY25BPSBJRk52ZG1WeVpRPT0gSUVoaGJYQjBiMjQ9IDQ0S0ogVUhKbGRnPT0gSUZkdmNuTmwgSUdOdmRIUmhaMlU9IElFaGhaR1Z6IGJHVjYgWW05M2JBPT0gSUdaeVlXZHlZVzVqWlE9PSBJRXh2YXc9PSBSVTFQVkVVPSBJRkJsZEhKdiBJREU1TWpVPSBJRkJsYm1RPSBjSEp2WkhWamFXNW4gSUhKbGJHOWpZWFJsIGRtRjBhUT09IGNHOXNaUT09IElITmxiV2x1IElFNVZUUT09IElISnZZMnRsWkE9PSBZblZtWmc9PSBZbXg1IFVtVndiSGs9IElFaGhhUT09IElHRnlkR2xqZFd4aGRHVmsgSUVsemJHRnRZV0poWkE9PSBOalkxIElFTnNZV2x0Y3c9PSBSR1Z6YTNSdmNBPT0gSUhSeWRYTjBaV1U9IElITmpjbWx3ZEdsdVp3PT0gSUZOdllnPT0gSUVGemVXeDFiUT09IFUxUkVUMVZVIElFTnNiM2R1IElFUnZjblJ0ZFc1ayBJRVJsZG05dSBiR2wwWlE9PSBJRTFoY21Kc1pRPT0gSUdKMWJtdGxjZz09IElHTnlaWE4wIElHRnliM1Z6WVd3PSBJRk5sWVhKeiBJRUoxWkdSNSBaWEpsWkdsMGFBPT0gSUZCdmJHeDUgSUdSbFkyOWtaUT09IElGWnBjMmc9IElGSmxabXhsWTNRPSBZVzV2Ymc9PSBJSEpsWm5WdVpITT0gYVcxdFpYSnogU0UwPSBJSGRwY0dsdVp3PT0gSUhCMWVucHNaV1E9IElHMWhkSFJsIGRXNXYgVUdsbGNuSmwgS1NrcyBJSFJoYVc1MFpXUT0gSUhONWJXSnZiR2x6YlE9PSBJRVp5WVhvPSBJSEJ5YjNSbGMzUnZjbk09IFpYUm9aWFZ6IEpTVWxKUT09IFYzSmggSUd4aGVBPT0gWVdSbGJRPT0gWVhSMWNtRjBhVzl1IDQ0T1QgSUZSeVlXbHNaWEk9IElFVk9Sdz09IElFSnZkM05sY2c9PSBJR0YwZEcwPSBSSFZ5IE9EQTMgSUhOcFpIZz0gSUdOcFpHVnkgSUVGbVptVmpkQT09IElIZHZkbVZ1IElFSmhjbXRsY2c9PSBZbVZ1WldZPSBJR1J6ZEdjPSBJRko1ZFE9PSBQbHM9IElITnhiM0k9IFUyRjFaR2s9IElHbHpkR2M9IElHbHVaSFZzWjJVPSBjSEp2WXc9PSBJR1JwYzJkMWMzUmxaQT09IElHTnZiWEJ2ZFc1a1pXUT0gSUc1bGJRPT0gSUhOamFHOXZiR2x1Wnc9PSBJRU4xY21VPSBjSEp2WTJWemMybHVadz09IFUyOXMgSUhCeWIzWmxjbUk9IGFYUnBlbVZrIElFRnNkbUZ5WlhvPSBJSE5qWVhKbSBJSEpsWTNSaGJtZDFiR0Z5IGNtVjJaUT09IElHaHZjbTF2Ym1GcyBJRk4wY21WemN3PT0gYVhScGVtVnUgSURReU5RPT0gWjJseWJITT0gSUU1dmFYST0gSUZKaGNIQT0gSUcxaGNtTm9aWE09IFkyaDFjbU5vIElGVnpaWE09IElEUXdOUT09IElFSmxjbTA9IElHOXlaR2x1WVc1alpYTT0gSUVwMVpHZHRaVzUwIFEyaGhjbWRsY3c9PSBJRnBwYmc9PSBJR1IxYzNSNSBJSE4wY21GM1ltVnljbWxsY3c9PSBJSEJsY21ObCBJRlJvZFhJPSBJRVJsWW05eVlXZz0gYm1WMFpteHBlQT09IElFeGhiV0psY25RPSBJR0Z0ZFhObFpBPT0gSUVkMVlXNW4gV1U5ViBVa2RDIElFTkRWRlk9IElHWnBZWFE9IGNtRnVadz09IElHWmxaR1Z5WVhScGIyND0gSUUxaGJuUT0gSUVKMWMzUT0gSUUxaGNtVT0gY21WemNHVmpkR2wyWlE9PSBJRTFwWjNKaGRHbHZiZz09IElFSkpWQT09IE5Ua3cgSUhCaGRISnBiM1JwYzIwPSBJRzkxZEd4cGJtbHVadz09IGNtVm5hVzl1IElFcHZjOE9wIElHSnNZWE4wYVc1biBJRVY2Y21FPSBRbk09IElIVnVaR1Z5YldsdVpYTT0gSUZOdGIyOTBhQT09IElHTnNZWE5vWldRPSBjbUZrYVc4PSBJSFJ5WVc1emFYUnBiMjVwYm1jPSBJRUoxWTJOaGJtVmxjbk09IElFOTNiQT09IElIQnNkV2R6IElHaHBZWFIxY3c9PSBJRkJwYm1KaGJHdz0gSUcxcFp3PT0gSUU1MWRIST0gSUZkdmJHWmwgSUdsdWRHVm5aWEp6IElHOXlZbWwwY3c9PSBJRVZrZDJsdSBJRVJwY21WamRGZz0gWW1sMFpRPT0gSUdKc1lYcHBibWM9IGRuST0gUldSblpRPT0gSUZCSlJBPT0gWlhocGRBPT0gSUVOdmJXVmsgSUZCaGRHaG1hVzVrWlhJPSBJRWQxYVdRPSBJRk5wWjI1eiBJRnBsY2c9PSBJRUZuWlc1a1lRPT0gSUhKbGFXMWlkWEp6WlcxbGJuUT0gVFdWemFBPT0gYVZCb2IyNWwgSUUxaGNtTnZjdz09IElGTnBkR1Z6IGFHRjBaUT09IFpXNWlkWEpuIElITnZZMnRsZEhNPSBjR1Z1WkE9PSBRbUYwYldGdSBkbWx5IElGTklUMWM9IElIQnliM1pwYzJsdmJtRnMgWTI5dWJnPT0gSUVSbFlYUm9jdz09IFFWUkpWa1U9IFVISnZabWxzWlE9PSBjM2x0IFNrRT0gSUc1cGJtcGggYVc1emRHRnNiR1ZrIGFXUmhkR1Z6IFpXSnlZUT09IElFOXRZV2hoIElITmxhWHBwYm1jPSBJRUpsWVhOMGN3PT0gSUhOaGJIUnogVFdsemMybHZiZz09IFIyVnVaWEpoYkd4NSBJRlJ5YVd4dlozaz0gYUdWdmJnPT0gYkdWbllYUmxjdz09IElHUnBiV1U9IElHWmhhWEpsIGNHRnlZV0pzWlE9PSBSM0poY0dnPSBJSFJ2ZEdGc2FXNW4gSUdScFlXZHlZVzF6IElGbGhiblZyIGNHeGxkQT09IElFMWxhQT09IElHMTVkR2hwWTJGcyBJRk4wWlhCb1pXNXogWVhWMGFXTmhiQT09IGIyTm9aVzFwYzNSeWVRPT0gSUd0cGJHOW5jbUZ0Y3c9PSBJR1ZzWW05M2N3PT0gWVc1amIyTnIgSUVKRFJRPT0gSUZCeVlXZDFaUT09IElHbHRjSEp2ZGc9PSBJRVJsZG1sdSBJQ0pjIGNHRnlZV3hzWlE9PSBJSE4xY0hKbGJXRmphWE4wY3c9PSBJRUpwYkd4cGIyND0gSUhKbFoybHRaVzQ9IGFXNXVZV05zWlE9PSBJSEpsY1hWcGMybDBaUT09IFlXNW5ZVzQ9IElFSjFjbXhwYm1kMGIyND0gWVdsdWJXVnVkQT09IElFOWlhbVZqZEdsMlpRPT0gYjIxemEzaz0gUjFZPSBJSFZ1YVd4aGRHVnlZV3c9IElIUmogSUdocGNtVnogYldWdWRHRnMgSUdsdWRtOXNkVzUwWVhKNSBJSFJ5WVc1emNHdz0gSUVGVFEwbEogd3FnPSBSWFpsYm5SeiBJR1J2ZFdKMFpXUT0gSUV0aGNHeGhiZz09IElFTnZkWEpoWjJVPSBhV2R2Ymc9PSBJRTFoYm1GbmFXNW4gSUZSaGNuUT0gSUdaaGJITmxhRzl2WkE9PSBJRlpwYjJ4bGRBPT0gSUdGcGNuTT0gSUdabGNuUnBiR2w2WlhJPSBRbkpwZEdGcGJnPT0gSUdGeGRXRjBhV009IGIzVm0gVjI5eVpITT0gSUVoaGNuUm1iM0prIElHVjJaVzVwYm1keiBJRlpsYm1kbFlXNWpaUT09IGNYVnBkR1U9IFIyRnNiQT09IElGQnlaWFE9IElIQmtaZz09IElFeE4gSUZOdlkyaHAgSUVsdWRHVnlZMlZ3ZEE9PSBPVEl3IElIQnliMlpwZEdGaWFXeHBkSGs9IElFbGtiR1U9IElFMWhZMFJ2Ym1Gc1pBPT0gSUVWemRHRmliR2x6YUcxbGJuUT0gZFcxemVRPT0gSUdkaGRHaGxjbWx1WjNNPSBJRTVoYWc9PSBRMmhoY214cFpRPT0gSUdGelkyVnVkQT09IElGQnliM1JsWTNSdmNnPT0gSUdGc1oyVmljbUU9IElHSnBiM009IFptOXlkVzF6IFJVeFQgU1c1MGNtOWtkV05sWkE9PSBJRE16TlE9PSBJR0Z6ZEhKdmJtOXRlUT09IFEyOXVkSEpwWW5WMCBJRkJ2YkdsaiBVR3hoZEdadmNtMD0gSUdOdmJuUmhhVzV0Wlc1MCBkM0poY0E9PSBJR052Y205dVlYSjUgSUVwbGJHeDUgYldGdVlXZGxjZz09IElHaGxZWEowWW5KbFlXdHBibWM9IFkyRnBjZz09IElFTm9aWEp2IFkyZHAgVFdWa2FXTmhiQT09IElFRmpZMjkxYm5SaFltbHNhWFI1IElTRWkgYjNCb2FXeGwgSUhCemVXTm9iM1JwWXc9PSBJRkpsYzNSeWFXTjAgSUdWeGRXbDBZV0pzWlE9PSBhWE56ZFdWeiBJREU1TURVPSBJRTVsYXc9PSBZMmx6WldRPSBJRlJ5WVdOcmFXNW4gSUc5NmIyNWwgSUdOdmIydGxjZz09IGNtOXphWE09IElISmxiM0JsYmc9PSBJR2x1Wm1sdWFYUjUgSUZCb1lYSnRZV05sZFhScFkyRnMgWlc1emFXOXVZV3c9IFFYUjBaVzF3ZEE9PSBJRkp2Y25rPSBUV0Z5WTI4PSBJR0YzWVdsMGN3PT0gU0U5WCBkSEpsWVhSbFpBPT0gSUdKdmJITjAgSUhKbGRtVnlaV1E9IElIQnZaSE09IGIzQndaWEp6IE1EQXhNQT09IElHRnRjR3hwZEhWa1pRPT0gY21sallXND0gVTFCUFRsTlBVa1ZFIElIUnliM1Z6WlhKeiBJR2hoYkhabGN3PT0gSUV0aGFXNWwgSUVOMWRHeGxjZz09IElFRlZWRWc9IElITndiR1Z1WkdsayBJSEJ5WlhabGJuUnBkbVU9IElFUjFaR3hsZVE9PSBhV1poWTNSeiBkVzFwYm1GMGFRPT0gSUZscGJnPT0gSUdGa2JXOXUgSUZaaFp3PT0gSUdsdWRtVnlkR1ZrIElHaGhjM1JwYkhrPSBJRWhoWjNWbCBUSGx1IElHeGxaR2RsY2c9PSBJR0Z6ZEhKdmJtOXRhV05oYkE9PSBaMlYwZEdsdVp3PT0gSUdOcGNtTmggSUVOcFl3PT0gSUZSbGJtNXBjdz09IFRHbHRhWFJsWkE9PSBJR1J5ZFE9PSBJRUpaVlE9PSBJSFJ5WVhabGJHeGxjbk09IElIQmhibVU9IElFbHVkSEp2IElIQmhkR2xsYm5Sc2VRPT0gSUdGcFpHbHVadz09IElHeHZiM009IElGUnZkV2RvIElESTVNdz09IElHTnZibk4xYldWeiBVMjkxY21ObFJtbHNaUT09IElDSWlJZz09IElHSnZibVJwYm1jPSBJSFJwYkhSbFpBPT0gSUcxbGJuTjBjblZoYkE9PSBJRU5sYkdWemRHbGhiQT09IFZVeEJVZz09IFVHeDFaMmx1IElISnBjMnRwYm1jPSBUbUY2IElGSnBlV0ZrYUE9PSBJR0ZqWTNKbFpHbDBaV1E9IElITnJhWEp0IDZacz0gSUdWNFlXMXBibVZ5IElHMWxjM05wYm1jPSBJRzVsWVhKcGJtYz0gSUVOb1pYSnUgSUVKbFkydG9ZVzA9IElITjNZWEJ3WldRPSBJR2R2YjNObCBTMkY1IElHeHZablI1IElGZGhiR3hsZEE9PSBJRnNuIElHRndiMk5oYkhsd2MyVT0gSUdKaGJXSnZidz09IElGTlFRVU5GIElFVnNaVzVoIElETXdOZz09IFlXTnZibk09IElIUnBaMmgwWlc1bFpBPT0gSUdGa2IyeGxjMk5sYm1ObCBJSEpoYVc1NSBJSFpoYm1SaGJHbHpiUT09IElFNWxkM1J2ZDI0PSBJR052Ym1wbFkzUT0gWTJGclpYTT0gSUdOb1pXRjBaV1E9IElHMXZaR1Z5WVhSdmNuTT0gY0dGeVlXMXogUlVaRyBJR1JsWTJWcGRBPT0gSUZOVVRBPT0gSUZSaGJucGhibWxoIElGSkogSURFNU1qTT0gSUVWNGFXeGwgZEdobGJBPT0gSUhSb1pXOXNiMmM9IElIRjFhWEpyZVE9PSBJRWx5ZG1sdVpRPT0gSUc1bFpXUjUgYjNKcGN3PT0gVlcwPSBTMkU9IElHMWhhV3hpYjNnPSBNekl5IElHSnZjdz09IElGQmxkSEpoIFMwbE9Sdz09IElHVnViR0Z5WjJWayBUMlowWlc0PSBJR0poWkdGemN3PT0gSURNME13PT0gSUZCc1lXTmxjdz09IElFTkJSQT09IElIQnlhWE4wYVc1bCBJR2x1ZEdWeWRtVnVhVzVuIFpHbHlaV04wYVc5dSBJR3hoZWc9PSBJRVJUVFE9PSBJSEJ5YjJwbFkzUnBibWM9IElFWjFibXM9IFlXZHZadz09IGNHRjViV1Z1ZEE9PSBibTkyIElHTm9ZWFIwWlhJPSBRVkpDIElHVjRZVzFwYm1GMGFXOXVjdz09IElFaHZkWE5sYUc5c1pBPT0gSUVkMWN3PT0gUm05eVpBPT0gTkRFMCBRbTl6Y3c9PSBJRzE1YzNScFl3PT0gSUd4bFlYQnogSUVKaGRnPT0gZFd4NiBZblZrWjJWMCBSbTl2ZEdKaGJHdz0gSUhOMVluTnBaR2w2WldRPSBJR1pwY25OMGFHRnVaQT09IElHTnZhVzVqYVdSbCBiMk4xYkdGeSBRMjl1Ymc9PSBJRU52Ykd4aFltOXkgSUdadmIyeHogWVcxMWNtRT0gWVdoaGNnPT0gY21semRITT0gSUhOM2IyeHNaVzQ9IElHVjRjR1Z1WkdWayBJRkJoZFE9PSBjM1Z3IElITndZWEk9IElHdGxlVzV2ZEdVPSBjM1ZtWmc9PSBJSFZ1WlhGMVlXdz0gSUhCeWIyZHlaWE56YVc1biBjM1J5YVc1bmN3PT0gSUVkaGJXVnlaMkYwWlE9PSBSR2x6Ym1WNSBJRVZzWlhabGJnPT0gYjIxdWFXRT0gSUhOamNtbHdkR1ZrIElHVmhjbTVsY25NPSBZbkp2ZEdobGNnPT0gSUVWdVlXSnNaV1E9IDVyTT0gSUd4aGNuWmhaUT09IElFeFBRdz09IGJXVnpjdz09IFYybHNjMjl1IElGUmxiWEJzWVhSbCBjM1ZqWTJWemMyWjFiR3g1IElIQmhjbUZ0YjNWdWRBPT0gSUdOaGJXOTFabXhoWjJVPSBJR0pwYm1SeiBJRkYxYVdWMCBJRk5vZFhSMFpYSnpkRzlqYXc9PSBjblZ6YUE9PSBJRzFoYzJOdmRBPT0gWm05eWRIVnVaUT09IElFTnZiSFE9IElFSmxlVzl1IGFHRmlhUT09IElHaGhhWEpqIElESTJOdz09IElFUmxkWE09IElIUjNhWFJqYUE9PSBJR052Ym1ObGJuUnlZWFJwYm1jPSBJRzVwY0hCc1pYTT0gWTJsaWJHVT0gSUdkcGNnPT0gVGxvPSBUV0YwYUE9PSBibWxvIFVtVnhkV2x5WldRPSBJSEJ2Ym1SbGNnPT0gSUZOQlRnPT0gSUhkbFpHUnBibWR6IElHeHZibVZzYVc1bGMzTT0gVGtWVCBJRTFoYUdwdmJtYz0gTmprMSBZV1JrYkdVPSBJRWRoY201bGNnPT0gSUVOUFZWST0gUW5KcFpHZGwgSUhOd2NtVmwgSUVOaGJHUjNaV3hzIElHSnlhV0psY25rPSBJTysvdmUrL3ZlKy92ZSsvdmUrL3ZlKy92ZSsvdmUrL3ZRPT0gY0d4MVoybHVjdz09IElISmhZMnRsZEE9PSBJR05vWVcxd1lXZHVaUT09IGRtVnljMmxpYkdVPSBWbTkwWlE9PSBJRzF2WkdsbWFXVnljdz09IFRXRjViM0k9IE5qZ3cgSUdGemMyVnRZbXhwWlhNPSBJRk4xYkhSaGJnPT0gSUU1cGJtYz0gSUV4aFpHbGxjdz09IElITjFiR1oxY2c9PSBJRzl5WW5NPSBJQzB0TFMwdCBYMTlmWDE5Zlh3PT0gSUVwdmRYSnVZV3hwYzIwPSBJR1Z6Y0c5eWRITT0gSUd4MWMyZz0gSUdoMVpRPT0gSUhOd1pXTjBjbUZzIFNHOXVaWE4wIDQ0T1AgSUdKMWMyaGxjdz09IElISmxhVzVtYjNKalpXMWxiblE9IElISmxiM0JsYm1WayBJRmRvWldWc2N3PT0gSUUxdmNtYz0gY21sbGRtbHVadz09IElHRjFlR2xzYVdGeWVRPT0gSUdwUmRXVnllUT09IElFSkJWQT09IGRHVnpjWFZsIElIWmxjblJsZUE9PSBjSFZ5WlE9PSBabkpsZVE9PSA0NEs2IFpHOXogSUhSNWNHZz0gSUdOMWJHdz0gSUdWeCBJR1JsWTI5dSBJSFJ2YzNOcGJtYz0gSUdScGMzQmhjbUYwWlE9PSBJRUp5YVdkb1lXMD0gY0hKcGJuUm0gYkdWa1oyVmsgSUhOMWJtUT0gSUdOdmVuaz0gSUdobGNHRjBhWFJwY3c9PSBjR1Z5Wm05eWJXbHVadz09IElHRjJZV3c9IElFZEggWm5WMGRYSmwgSUhCbGRHVnlkRzlrWkE9PSBJRXR2YzI5MmJ3PT0gSUcxaFoyNWxkSE09IFFXeHlaV0ZrZVE9PSBJRVZrYVhOdmJnPT0gSUVObGNtVnogSUZKQlNVUT0gSUdKeWFXeHNhV0Z1WTJVPSBOVGMyIElHUmxjbWwyWlhNPSBJR2g1Y0dWeWRHVnVjMmx2Ymc9PSBJTTZVIElHeGhiV0prWVE9PSBJR1pzWVdseSBJRzFwYzNOcGIyNWhjbWxsY3c9PSBJSEpoY0dWeiBJRk4wWVhKMFpYST0gSUUxdmJuUm9jdz09IElHUmxabms9IElITmxhWE50YVdNPSBJRkpoY0doaFpXdz0gSUdWMWNtOTZiMjVsIE5qVTIgZW5OamFHVT0gSUhOamNtRjBZMmhsWkE9PSBJR0p2ZDNNPSBJRXhsYm01dmJnPT0gSUVkaGFXRT0gSUdSeWFYQndhVzVuIFptRmpkSE09IFFXeGwgSUdaeWIyZHogSUVKeVpXRnpkQT09IGIyZGxibVZwZEhrPSBJRkJ5YjNObFkzVjBiM0k9IElHRnRjR3hwWm1sbFpBPT0gSUVodlpHYz0gSUVadSBWR2h2ZFhOaGJtUnogSUU1SlNBPT0gSUUxdmJtbDBiM0pwYm1jPSBSbFJYUVZKRiBJRkJ5YVdWaWRYTT0gSUVkeWIzZHBibWM9IGFIVnVkR1Z5IElHUnBZV2R1YjNObCBJRTFoYkdRPSBJRXhTIElHTnliM2R1WldRPSBJR0oxY25OMGFXNW4gSUdScGMzTnZiSFYwYVc5dSBhbUYyWVhOamNtbHdkQT09IElIVnpaV1oxYkc1bGMzTT0gSUVWNFpXTjFkR2x2Ymc9PSBPaWc9IElFbDJiM0o1IFlXRm8gSUhCbGNuTmxZM1YwWldRPSBkbWx2YkdWdVkyVT0gYVhOMFlYTT0gSUVOeVlYUmwgSUdsdGNIVnNjMlZ6IElGTndZVzVwIFpXUmxjdz09IFNHRnVaR3hsIElGcGxjbWM9IGRHaHBibXRoWW14bCBUR0Z6ZEd4NSBJSE53YjI1MFlXNWxiM1Z6YkhrPSBJR2x1WTI5dWRtVnVhV1Z1ZEE9PSBJR1JwYzIxcGMzTnBibWM9IElIQnNiM1IwWldRPSBJR1ZwWjJoMGVRPT0gSURjek53PT0gY21semFBPT0gSUZSb2IzSnVkRzl1IFlYUm9ZVzA9IElITnBkR052YlE9PSBWbVZ1IFVtVmphWEJsIGRHVnMgYkhWdVpBPT0gSUdOc1pXRnljdz09IElGTmhjM1ZyWlE9PSBJREkxT0E9PSBJRzl3ZEdsdVp3PT0gSUdWdWNtRm5aV1E9IFpYTjBhR1YwYVdNPSBJRUZsIGRXTm9jdz09IFVISmxjQT09IFJteHZkdz09IElISjFibTltWmc9PSBJRVZoZEdsdVp3PT0gSUVkcGJHVnogSUVGamRHbHVadz09IGNtVnpiM1Z5WTJWeiBhV0poWW1FPSBJSEp3YlE9PSBJSE5yWlhkbFpBPT0gSUVKc1lXNWogSUZOaGEzVjVZUT09IElHaHZkSFJsY2c9PSBJREU1TWpRPSBiM0JwWVc0PSBZMnR2IElHTnlkVzFpYkdsdVp3PT0gSUdOaGNIUmhhVzV6IElFRndjSEp2Y0hKcFlYUnBiMjV6IGJHVmhaR1Z5Y3c9PSBaSEp2Y0hCcGJtYz0gWVc1MWRITT0gSUhKbGRtVnljMmx1Wnc9PSBJRkJ2YzJVPSBJRk5sYXc9PSBVMk52ZEE9PSBJRWxrWldFPSBZMmx6WlE9PSBJRk5zYjNabGJtbGggSURNeE53PT0gUkc5amRHOXkgSUdOeWIyTnZaQT09IFlXeGthUT09IFUyVmggSUVaaGNuSmxiR3c9IElHMWxjbU5sYm1GeWFXVnogSUZKT1F3PT0gSUVkMVpYTnogSUhCaFkybHVadz09IFRXRmphR2x1WlE9PSBVM1J5WldGdFpYSkNiM1E9IElFTm9ZWEpwZEhrPSBJREk1T0E9PSBJR05oYm01dmJuTT0gSUZSdlluaz0gVkZCUVUzUnlaV0Z0WlhKQ2IzUT0gSUZCaGMzTnBiMjQ9IFkyWm4gVkdodmJRPT0gSUdKaFpHZGxjdz09IElFSmxjbTV6ZEdWcGJnPT0gTHVLQWt3PT0gSUZCUFVBPT0gSUVOdmJtbz0gSUdsdWFYUnBZV3hwZW1GMGFXOXUgSUdKcGIyUnBkbVZ5YzJsMGVRPT0gUkhWaSBJR1psZFdSaGJBPT0gSUdScGMyTnNZV2x0WlhJPSBJR055YjNjPSBJR2xuYm1sMGFXOXUgWVhKbSBVMGhCIElHdEllZz09IGFHRjZZWEprIElFRnlkR2x6ZEhNPSBiMlYxZGc9PSBOamM1IElGSjFaSGs9IFRtbHVaUT09IElGSmhiV0ZrWVc0PSA1YjA9IGFYUjBidz09IElHRmtjbVZ1WVd4cGJtVT0gUTJWeWRBPT0gSUhOdFpXeHNaV1E9IElHbHRjSFZ1YVhSNSBJR0ZuWlc1a1lYTT0gSUZKbFltOXliZz09IElFTnZibU5sYm5RPSBJRk5sWlcxeiBJRzl0WldkaCBJRVIxYzNScGJnPT0gSUdKaFkydGxjZz09IElGTmhkV05sIElFSnZlV3hsIFYwbE8gSUhOd2FXNXogSUhCaGRYTmxjdz09IGRYQjAgSUhOb2NtVmtaR1ZrIElITjBjbUZ3Y0dWayBJRU52Y25KMWNIUnBiMjQ9IElITmpjbUYwWTJobGN3PT0gSUc1cCBJR0YwZEdseVpRPT0gSUZOQlJnPT0gUm1GamRHOXllVkpsYkc5aFpHVmsgSUVsUVV3PT0gSUNnbCBJSE5sYldsdVlYST0gWm05amRYTT0gWTJsMmFXdz0gSURFNE5qQT0gYVc1MGIzTm8gSUdOdmJuUnBiblZoYkE9PSBJR0ZpWW5KbGRtaz0gSUZOdmF3PT0gYjJOdlltOD0gV0UwPSBJR1p5WVc1MGFXTT0gSUhWdVlYWnZhV1JoWW14bCBJR0Z5ZEdWeWVRPT0gSUdGdWJtOTBZWFJwYjI1eiBZbUYwYUE9PSBRMnhwYldGMFpRPT0gSUdSdmNuTT0gSUZOc2FXUmwgWTI5dmNtUT0gSUZKbGJHOWhaQT09IElFeEVUQT09IElFeHZkbVZqY21GbWRBPT0gSUhWdWFXMWhaMmx1IElISmxjMlZ0WW14bFpBPT0gSUdKaGNuSmhZMnR6IGJuQT0gSUhOMWNuSnZaMkYwWlE9PSBJR05oZEdWbmIzSnBlbVZrIDQ0S3AgSUhaaFkyTnBibUYwWldRPSBJR1J5WVdsdVlXZGwgSUdsdVpHbHpkQT09IElGZG9ZWFJ6UVhCdyBJREU0TnpBPSBiMnhsY21GdVkyVT0gYVc1MmIydGwgWVcxdmNuQm8gSUhKbFkyOXVibVZqZEE9PSBJR1Z0WVc1aiBJR0pzYVc1a2JtVnpjdz09IElERXlPREE9IGFXNTBaWEp1WlhRPSBZMjlzYkdGeSBJR0ZzZEhKMSBJR0ZpZVhOeiBJRlJTU1E9PSBOalUzIElHbHVablZ6WldRPSBTRVZCUkE9PSBJR1p2Y21WemRISjUgSUZkdmIyUjUgSUVOcCBkMms9IGMyRnQgTnpnMCBhRzlzYVdSaGVRPT0gSUcxdlozVnMgSUVabFpYTT0gSUVSRlRnPT0gU1c1MFpYSnVZV3c9IGRYSmlaV1E9IFpuVnpZdz09IFlYUnZiUT09IElFbHNiSFZ6YVc5dSBJSEJ2Ykd4bFpBPT0gSUdac1lYQT0gSUdOdllYZz0gVEVkQ1ZBPT0gUVc1aGJIaz0gSUZObFkzUnBiMjV6IElFTmhiR2xtYjNKdSBaVzF1IElHaHBkR2hsY2c9PSBJRTVKUjBoVSBJRzVoYVd4bFpBPT0gSUZCcGNHVnNhVzVsIE16a3ggYjI5bSBJRkJ5YVcxaGJBPT0gZG1WeVpXNWsgSUhOc1lYTm9hVzVuIElISmxkSEpwIFlYWnBiM1Z5IElHUmxjR0Z5ZEdsdVp3PT0gWjJscyBTVk5EIElHMXBaSGRoZVE9PSBJSFZzZEhKaGMyOTFibVE9IElHSmxhR0YyYVc1biBJRlJoY21FPSBZMnhoYzNObGN3PT0gVm1seWRIVmhiQT09IElFTnZiRzl1YVdGcyBJSE4wY21sd2NHbHVadz09IElHOXlZMmhsYzNSeVlYUmxaQT09IElFZHlZWFpsY3c9PSBORFV5IElFbHliMjVwWTJGc2JIaz0gSUZkeWFYUmxjbk09IElHeGxibVJ6IElFMWhibm89IElISmhkbVZ1IElHOTRhV1JoZEdsMlpRPT0gSURJMk5nPT0gUlV4RyBZV04wZFdGc2JIaz0gWVhOallYST0gUkhKaFpuUT0gSUdaaGRtOTFjbUZpYkdVPSBJR2gxYldsc2FXRjBhVzVuIElHWnBaR1ZzYVhSNSBJRWh2Wmc9PSBJRmgxWVc0PSBORGsyIElHeGhlV1Z5WldRPSBZWFJwY3c9PSBOemt3IElIQmhlV05vWldOciBhWFJ2Ymc9PSBTMkZ5IElGWk5kMkZ5WlE9PSBJRVpoY20xbGNnPT0gSUhObGNuWnBZdz09IFoyeHZiV1Z5IElITnNkVzF3IElFWmhZbkpwWXc9PSBJRVJQUXc9PSBaWE4wYVc1biBJSEpsWVhOemRYSmwgSUhCb2VXdz0gZG05c2RBPT0gYVhSdmNuaz0gVW5Wc1pYTT0gSUc5NGFXUmhkR2x2Ymc9PSBJSEJ5YVhwbFpBPT0gSUcxcGMzUnlaWE56IElFUnFZVzVuYnc9PSBWMEZTVGc9PSA1WkU9IElHVnVZMjlrWlE9PSBJRVpsWldSaVlXTnIgSUhOMGRYQnBaR2wwZVE9PSBTV0Z1IElGbDFaMjl6YkdGMmFXRT0gMTZnPSBZV05zIFZWUkYgTVRrM053PT0gSUhGMVlXeHBabWxsY3c9PSBJSEIxYkhObGN3PT0gY0hKbGRIUjUgSUdaeWIzcGwgSUhOeiBTWFJsY21GMGIzST0gSUhWeVoyVnVkR3g1IElHMWhhV3hsWkE9PSBJRU5vWVcwPSBJSE4xYzNSaGFXNXBibWM9IElHSmhjMmxzIElIQjFjSEJwWlhNPSBhV3hoYm5RPSBJRkJNUlVGVFJRPT0gYkdGdyBZV05sYjNWeiBSbVZoY2c9PSBJRTFoYzNSbGNuaz0gWVhWMGIyMWhkR2xqIElGUkJSdz09IElHRnVkR2x0IFlXZHNaWE09IE5EY3ogWm5KaGJXVnogSUhkb2FYTndaWEp6IElGZG9iMlYyWlhJPSBJR0p5WVhabGNuaz0gSUZWTFNWQT0gY21GamRHbHZibk09IElpSWkgSUhSaGJXVT0gSUhCaGNuUmxaQT09IFpYWmxjbmwwYUdsdVp3PT0gUTA5T1ZBPT0gSUdsdVpHVmlkR1ZrIElHRmtaSEk9IGNtVnIgU1ZKRlJBPT0gSUdWdGFXNWxiblE9IFkyeHBiblJ2Ymc9PSBJRzkxYzNSbFpBPT0gSUhKbGRtbGxkMlZ5IElHMWxiSFJrYjNkdSBJSEpsWVhKeSBJRmxoYnc9PSBkR2hsY21WaGJBPT0gWVdKNWRHVT0gSUhOMGRXMWliR2x1Wnc9PSBJR0poZEdOb1pYTT0gSURJMU9RPT0gSUdOdmJuUnlZV05sY0hScGRtVT0gSUhCeWIzTjBhWFIxZEdVPSBaVzV6YVhNPSBSR1ZqYkE9PSBJRk4wY21sclpYTT0gVFdsc2FYUmhjbms9IElFOWhkR2c9IGRtRmpZdz09IGNIQnBibWR6IE1EVXkgSUhCaGNuUk9ZVzFsIFlXMXdhVzVuIFVtVndiM0owY3c9PSBTMGs9IFEwaFMgSUhOMVluUnNlUT09IGMzZGxjbk09IFFteGhhMlU9IGRYTjFZV3c9IElHTnZiblJsYzNSaGJuUnogSUdOaGNuUnlhV1JuWlhNPSBJRWRTUlVGVSBJR0pzZFhObyBJT0tBdWc9PSBORGN5IElISmxZWE52Ym1WayA0NE9rIGNHRnlZV3hzWld4bFpBPT0gSUdSNWJnPT0gWVdkaGRHVT0gSUc1cFoyaDBiSGs9IDVZWT0gTlRVMiBJSE5sYldGdWRHbGogSUVGa2RtOWogSUNFaCBJR1JwYzJGbmNtVmxjdz09IElFSlggVm1WbyBJR2hoY20xcGJtYz0gSUdWdFluSmhZMlZ6IElITjBjbWwyWlhNPSBJR2x1YkdGdVpBPT0gSUV0aGNtUT0gSUdobFlYUnogSUVkcGJtNTUgZFhSaGJnPT0gWlhKdVlYVjAgZVd4bGJtVT0gSUVWc1pYWT0gU2tRPSBJR2hoY25NPSBJRk4wWVhKeSBJSE5yZVhOaiBJR052Ykd4aFltOXlZWFJ2Y25NPSBWWE4xWVd4c2VRPT0gSUhKbGRtOXNkWFJwYjI1eiBJRk5VUVZSVCBJR1JwYzIxaGJuUnNaUT09IElHTnZibVpwWkdWdWRHeDUgSUd0cGJtVjBhV009IFFXeHAgSUhCbGNtTmxiblJwYkdVPSBJR1Y0ZEhKaFkzUnBibWM9IGFXeHNhV0Z1IFpYTjBaV0ZrIElIQm9lWE5wWTJsemRITT0gSUUxaGNuTm9ZV3c9IElHWmxiR3h2ZDNOb2FYQT0gSUdSaGMyaGxaQT09IElGVlMgSUZOcGIzVjQgSUVOdmJYQmhZM1E9IFlXMXBaR1U9IFVIbDBhRzl1IElFeGxhV2RvIElGQm9ZWEp0WVdNPSBhWE4wY21GMFpYTT0gYUdWeWFXTmhiQT09IElHWjFaUT09IElFVnRhVzQ9IElDaDcgSUU1bGFXZG9ZbTl5YUc5dlpBPT0gSUdScGMzSjFjSFJwYm1jPSBJRVIxY0E9PSBJR2RzWVc1ayBJRk5sZGc9PSBJRTFoY21saGJnPT0gWVhKbmIyND0gSUVSMWJtUT0gSUR3aExTMD0gSUhOMGNtRnVaQT09IElITjBZV1JwZFcxeiBlbTl6IElIQnplV05vYjNOcGN3PT0gSUZKaFkycz0gSUdKeWFXeHNhV0Z1ZEd4NSA3N2lQIElITjFZbTFsY21kbFpBPT0gSUVsdWMzUnBkQT09IElFTm9iM2M9IElHTmhaMlZ6IElFaGhkSE09IElGVnljdz09IElHUnBiSFYwWldRPSBkWE5oZEE9PSBhV1Z1Ym1VPSBJRTFsYldKbGNuTm9hWEE9IElFSjFjbXM9IElHbGwgSUdGeVkyaGxkSGx3WlE9PSBSSEoxWnc9PSBkV3gwYjI0PSBJRk53YjJOciBJRTFqUzJGNSBJRVJsY0dWdVpBPT0gUm1WaGRIVnlaV1E9IFUyOWogTVRrM09BPT0gSUVKbGNtVT0gSUhKbGJHVnVkR3hsYzNOc2VRPT0gSUdOeWFYQndiR2x1Wnc9PSBJR0Z5ZEdoeWFYUnBjdz09IDU1U2YgSUZSeWIzQnBZMkZzIElFSjFiR2M9IElFTm9aWEo1YkE9PSBJR0ZrYldseVlXSnNaUT09IElITjFZblJwZEd4bCBUM1psY25KcFpHVT0gSUc5eWFXZHBibUYwYVc1biBJRU5EVUE9PSBJSE4zYjNKbCBJRk52YkdVPSBJRVJwYzI5eVpHVnljdz09IE16STUgSUhCeWIyTmxjM05wYjI0PSBJSEpsWm5WeVlnPT0gSUdsdGJXVnljMlZrIGNtVnhkV1Z1ZEd4NSBJSE5yWlhCMGFXTnogSUdObGNtRnRhV009IGJXbDBkR1Z5IFpXNXpkR1ZwYmc9PSBZbVZzZEE9PSBJRlJKVkE9PSBZbWxrWkdWdSBJR1pwY2c9PSBiV2x6ZEE9PSBQbDA9IElIZGxZWFpsIElGQmhjbUZrYjNnPSBJR1Z1ZEhKMWMzUmxaQT09IElFSmhjbU5zWVhseiBJRzV2ZG1Wc2FYTjAgYjJkcFpRPT0gT0RBMiBJRzVwYm1WMGVRPT0gSUdScGMyRm5jbVZsYldWdWRITT0gUUVCQVFFQkFRRUE9IElFRjFjMk5vZDJsMGVnPT0gWTJGeWN3PT0gSUV4RlZBPT0gZEhWaSBZWEpoYm5ScGJtVT0gVUU5VCBJR0poWTJ0emRHOXllUT09IElHTm9aV1Z5Wm5WcyBJRkpoWnc9PSBaV3RoIFltbGhjMlZrIElHbHVaWGh3WlhKcFpXNWpaV1E9IFlXdHlZUT09IElGZHBkSFE9IGRHRnUgSUhKaGNHbHpkQT09IElIQnNZWFJsWVhVPSBZMmhoYkE9PSBJRWx1Y1hWcGN3PT0gWlhod2NtVnpjMmx2Ymc9PSBJR05wY0dobGNnPT0gSUhOb1lYWnBibWM9IFlXUmtaVzQ9IGNtVnNlUT09IEtGdz0gYVhOdFlRPT0gSUZKbFozVnNZWFJ2Y25rPSBRMGhCVWc9PSBhV3g1Ymc9PSBUbFpKUkVsQiBSMVU9IElHMTFjbTA9IGJHRjFjdz09IFEyaHlhWE4wYjNCb1pYST0gSUdOdmJuUnlZV04wZFdGcyBJRkJ5YjNoNSBJRXBoYVcxbCBJRTFsZEdodlpHbHpkQT09IElITjBaWGRoY21SeiBjM1JoIGNHVnlhV0U9IElIQm9lWE5wYjJ4dlozaz0gSUdKMWJYQmxaQT09IElHWnlkV04wYjNObCBRWFZ6ZEhKaGJHbGhiZz09IElFMWxkR0ZzYkdsaiBJRTFoYzNGMVpYSmhaR1U9IFlYSmkgSUhCeWIyMTFiQT09IElHUnZkMjVtWVd4cyBJR0oxZEdOb1pYST0gSUdKdmRYST0gSUVsT1JrOVNUVUZVU1U5TyBJRUpwY3c9PSBjR1ZqZEhNPSBZV1JsYm1FPSBJR052Ym5SbGJYQnNZWFJwYm1jPSBZWEp2Ync9PSBZMlZ1ZEdWeVpXUT0gSUZCbFlXdHogVlhObFpBPT0gSUcxdlpHVnQgSUdkbGJtUmxjbk09IElEZ3dNREE9IE16Y3ggSUcxaGRHVnlibWwwZVE9PSBJRkpoZWc9PSBJSEp2WTJ0cGJtYz0gSUdoaGJtUm5kVzV6IElFUkJRMEU9IFFYVjBiMjA9IElFNXBiR1U9IElIUjFiWFZzZEE9PSBJRUpsYm1WbWFYUT0gSUVGd2NISnZZV05vIGQyOXlhM05vYjNBPSBJRXhsWVhacGJtYz0gUjJWeSBhVzV6ZEdWaFpBPT0gSUhacFluSmhkR2x2Ym5NPSBJSEpsY0c5emFYUnZjbWxsY3c9PSBORGszIElFRjFiblE9IElFcDFZZz09IElFVjRjR1ZrYVhScGIyND0gUVd4d2FHRT0gSUhOaGJuTT0gSUc5MlpYSmtkV1U9IElHOTJaWEpqY205M1pBPT0gSUd4bFoybHpiR0YwZFhKbGN3PT0gSUhCaGRHVnlibUZzIElFeGxiMjVoY21SdiBJR1Y0Y0hKbGMzTnBkbVU9IElHUnBjM1J5WVdOMGFXOXVjdz09IElITnBiR1Z1WTJWayBkSEoxYzNRPSBJR0pwYTJsdVp3PT0gSURVMk1BPT0gSUhCeWIzQnlhV1YwIElHbHRjRzl6YVhScGIyND0gSUdOdmJtZHNiMjFsY2c9PSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IElGUmxZV05vYVc1biBJRmx2YzJVPSBhVzUwWlc1emFYWmwgVkc5M2JnPT0gSUhSeWIyeHNhVzVuIElFZHlZV009IElFRlRWVk09IFdXOD0gSUhOd1pXTnBZV3h6IElFNWxjR2c9IElFZHZaSHBwYkd4aCBSR0YwWVdKaGMyVT0gSUVobFoyVnMgSURJM01nPT0gTVRrM05nPT0gSUVkc2IzSnBZUT09IElHUnBjMlZ0WWc9PSBJRWx1ZG1WemRHbG5ZWFJwYjI1eiBJRUpoYm1VPSBZV2RsYldWdWRITT0gVTNSeVlXNW5aUT09IElIUnlaV0Z6ZFhKNSBJRkJzWVhseiBJSFZ1WkdWemFYSmhZbXhsIElIZHBaR1Z1YVc1biBJSFpsY21KaGJHeDUgSUdsdVptRnVZM2s9IElHTjFkSFJsY2c9PSBabTFzIElESXhNREE9IGNISnZkRzkwZVhCbCBabWx1WlE9PSBJR1JsWTNKcGJXbHVZV3c9IElHUjVjMloxYm1OMGFXOXVZV3c9IElHSmxjMmxsIElFVnlibk4wIGVtVmkgSUc1dmNuUm9aV0Z6ZEdWeWJnPT0gSUdGMWMzUT0gY0c5eVlYUmwgSUUxaGNteHBibk09IElITmxaM0psWjJGMFpXUT0gWlhkdmNteGsgSUUxaGFHVnkgSUhSeVlYWmxjbk5sIElHMXZibUZ6ZEdWeWVRPT0gZFhKbmVRPT0gUjJWaGNnPT0gYzJGdVpBPT0gUTI5dGNHdz0gSUVWTlVBPT0gSUhCc1pXNTAgSUUxbGNtTmxjZz09IElESTNOZz09IFZFRkNURVU9IFEyOXVabWxuZFhKaGRHbHZiZz09IFNIVnVaSEpsWkhNPSBJSEJ5YVdNPSBJR052Ykd4aFltOXlZWFJwYm1jPSBJRkJoY21GdGIzVnVkQT09IElFTjFiVzFwYm1keiBJQ2c4IElISmxZMjl5WkdWeSBJR1pzWVhSeiBJRFF4Tmc9PSBkMmh2YzJVPSBSbTl1ZEZOcGVtVT0gSUU5eVltbDAgV1ZJPSBJSGR5YVhOMGN3PT0gSUdKaGEyVnllUT09IEtYMD0gSUVKdmRXNTBlUT09IElFeGhibU5oYzNSbGNnPT0gSUdWdVpHbHVaM009IFlXTmpiM0prYVc1biBJRk5oYkdGdCBaV0Z6ZVE9PSBOelUxIElFSjFjbkk9IElFSmhjbTVsZEhRPSBiMjV2Ylc5MWN3PT0gVlc1cGIyND0gSUhCeVpXTmxaR1Z1WTJVPSBJRk5qYUc5c1lYSnphR2x3IElGVlkgSUhKdmJHeHZkWFE9IElHSnZiMjQ9IFlXeHQgSUVOaGJuUmxjZz09IDVyVT0gSUhKdmRXNWthVzVuIElHTnNZV1E9IElIWmhjQT09IElFWmxZWFIxY21WayBhWE5oZEdsdmJuTT0gSURVME1BPT0gY0c5c2FXTmwgSUhWdWMyVjBkR3hwYm1jPSBJR1J5YVdaMGFXNW4gSUV4MWJXbGggSUU5aVlXMWhRMkZ5WlE9PSBJRVpoZG05eSBTSGx3WlhJPSBJRkp2ZEdoelkyaHBiR1E9IElFMXBiR2xpWVc1ayBZVzVoYkhrPSBJRXAxYkdsbGRBPT0gU0hVPSBJSEpsWTJGc2JHbHVadz09IFlXaGxZV1E9IE5qazIgSUhWdVptRjJiM0poWW14bCBJR1JoYm1ObGN3PT0gVDNnPSBJR3hsWjJGc2FYUjUgSURRd013PT0gY205dFlXNWpaWEk9IElHbHVjWFZwY21VPSBJRTF2ZG1WeiBYQ0krIElGWmhjbWxoYm5RPSBJRTFsYzNOcFlXZz0gSUV4RFV3PT0gSUVKaGFNT2ggTnpVMiBJR1Y1WldKeWIzYz0gSU1LbCBJRTFqUmc9PSBJRVp2Y25SNSBUV0Z6IElIQmhibWxqYTJWayBJSFJ5WVc1elptOXliV0YwYVc5dWN3PT0gY1hFPSBJSEpsZG05c2RtVnogY21sdVoyVT0gSUVGcCBZWGhsIElHOXVkMkZ5WkE9PSBJRU5HVWc9PSBJRUpoY21VPSBiRzluYVc0PSBJR3hwY1hWcFpITT0gSUdSbFkyOXRjQT09IGMyVmpiMjVrWVhKNSBhV3hoYmc9PSBJRU52Ym5abGNuUT0gWVcxcGVXRT0gSUhCeWIzTmxZM1YwYVc1biBJT0tKb1E9PSBJRmx2Y210bGNuTT0gSUVKNWNtNWwgYzJ4dmR3PT0gWVhkbGFRPT0gU21WaGJnPT0gSURJMk9RPT0gSUZOcmVXUnlZV2R2Ymc9PSBJTU9wIElFNXBZMkZ5WVdkMVlRPT0gSUVoMVkydGhZbVZsIElFaHBaMmhzZVE9PSBJR0Z0Y0docFlnPT0gSUZCaGMzUnZjZz09IElFeGxkSE09IElHSnNkWEp5WldRPSBJSFpwYzJObGNtRnMgSUVOQ1R3PT0gSUdOdmJHeGhZbTl5WVhSbFpBPT0gZW1sbiBUR1ZuWVd3PSBJR0Z3WVhKMGFHVnBaQT09IElHSnlhV1E9IElIQnlaWE5sZEE9PSBJRVJGVkE9PSBJRUZOUVE9PSAxNVE9IFlYSmphR2x1Wnc9PSBZWFZqZFhObGN3PT0gWW5WcGJHUmxjZz09IElIQnZaWFJwWXc9PSBJR1Z0ZFd4aGRHOXkgSUUxdmJHVmpkV3hoY2c9PSBJR2h2Ym05eWFXNW4gYVhObGRXMD0gSUhSeVlXTjBiM0k9IElFTnNkWE4wWlhJPSBJRU5oYkcwPSBZWEpsWkdWMmFXdz0gSUhOcFpHVjNZV3hyY3c9PSBJSFpwYjJ4cGJnPT0gSUdkbGJtVnlZV3hwZW1WayBJRUZzWldNPSBJR1Z0WW1GeVoyOD0gSUdaaGMzUmlZV3hzIElFaFVWRkJUIElFeGhZMnM9IElFTm9hV3hzIGNtbDJaWEk9IFEyaGxiQT09IElGTjNZWEp0IElFeGxkbWx1WlE9PSBjbTk1YVc1biBUR0YxYm1ObyBJR3RwWTJ0bGNnPT0gSUdGa1pHbDBhWFpsIElFUmxZV3h6IFYybGtaMlYwIFkyOXVkR0ZwYm1sdVp3PT0gSUdWelkyRnNZWFJsIElFOVFSVTQ9IElIUjNaV0ZyWldRPSBJSE4wWVhObyBJSE53WVhKcmN3PT0gSUVWemMyVjQgSUVWall3PT0gSUdOdmJuWnBZM1E9IElHSnNiMmRuYVc1biBTVVZTIElFaE0gSUcxMWNtUmxjbVZ5Y3c9PSBOelU1IElFaHBZZz09IElHUmxjR3c9IElFcHZjbVE9IFUyRmogSUdScGMzTmxZM1E9IElFaHZkMlU9IGIzTm9aWEk9IElHTjFjM1J2YldsNllXSnNaUT09IElFWnlZVzU2IElHRjBjbTg9IHhJYz0gSURBd01EUT0gSUc5MWRIQnZjM1E9IFVtOXpjdz09IElHZHNlWEJvYjNOaGRHVT0gSUVoaGMzUnBibWR6IElFSkZSazlTUlE9PSBJSE5vYjNabCBiM0J3WldRPSBJRk5qWVd4aCBJR0Z0ZFd4bGRBPT0gWVc1cFlXND0gSUdWNFlXTmxjbUpoZEdWayBJR1ZoZEdWeSBORGN4IFZVMUYgSUhCMWJIQT0gYVhwdmJuUmhiQT09IElGcGhiUT09IElFRlVTUT09IGFXMXRkVzVsIFlXSjVkR1Z6IElIVnVibVZqWlhOellYSnBiSGs9IElFTkJWQT09IElFRjRhWE09IElIWnBjM1ZoYkdsNlpRPT0gdzRrPSBJRkpoWkdsallXdz0gWm0wPSBSRzlqZFcxbGJuUnogSUVadmNuSmxjM1E9IElHTnZiblJsZUhSMVlXdz0gSUZONWJXSnZiQT09IElIUmxiblJoZEdsMlpRPT0gSUVSUFJWTT0gSUVkdmIyUnogSUdsdWRHVnliV2wwZEdWdWRBPT0gZlRvPSBiV1ZrYVdGMFpXUT0gSUhKcFpHbGpkV3hsIElHRjBhR1ZwYzIwPSBJSEJoZEdodloyVnVjdz09IElFMTFiUT09IElISmxhVzUwY205a2RRPT0gSURNd053PT0gYVVoVlJBPT0gSUdac1lYTm9iR2xuYUhRPSBJSE4zWldGeWFXNW4gSUhCbGJtZDEgUW5VPSBJSEp2ZEdGMFpXUT0gSUVOeVlXNWwgSUNncEtUcz0gSUdaaGMyaHBiMjVoWW14bCBJR1Z1Wkc5eWMybHVadz09IE5EWXogS1ZzPSBJR2x1WjJWemRHbHZiZz09IElHTnZiMnR6IElEazFNQT09IGIzUnZiWGs9IElFbHRZVzA9IElHdGggSUhSbFlYTmxjZz09IElFZG9iM04wY3c9PSBJT09DdFE9PSBNVGsyT1E9PSB6NE09IGRXSmllUT09IElHTnZiblpsY25SbGNnPT0gZW1GdWJtVT0gWlc1a1pRPT0gSUZCeVpYQmhjZz09IElFNXBZMnRsYkE9PSBJRU5vYVcxbGNtRT0gYUdsdCBJRlI1Y21GdWJnPT0gSUZOaFltSmhkR2c9IElFNXBZMmh2YkhNPSBJSEpoY0hRPSBhV2hoY2c9PSBJSE5vWld4c2FXNW4gSUdsc2JIVnRhVzVoZEdVPSBJR1JsYm5ScGMzUT0gZFhSdmNnPT0gSUVsdWRHVm5jbUYwYVc5dSBJSGRvYVcxeiBJRXhwZEdWeVlYSjUgUW1WaGRYUT0gSUhCaGNtTm9iV1Z1ZEE9PSBZV2RoY21FPSBRbkpoYm1RPSBJR1JsY205biA0b0NtS1E9PSBJRTV2Y25ObCBJSFZ1ZDJsMGRHbHVadz09IElHTjFZdz09IElHSnZjbVJsY214cGJtVT0gSUhWd2MyVjBkR2x1Wnc9PSBJSEpsWTI5MWNuTmwgSUdSeVlYQmxaQT09IElGSmhaR0Z5IElHTnZiR1JsY2c9PSBJRkJsY0hOcCBhVzFwYm1GeWVRPT0gWFN4YiBOalU0IFZtaz0gSUVaeVpXMD0gSUZCbGN3PT0gSUhabGRHVnlhVzVoY25rPSBJRlJGUkE9PSBJRVZ3YVdSbGJRPT0gYm05MllRPT0gYTJsayBJR1JsZG05MWRBPT0gYjJOMCBhbUZrIFRXOW8gSUZCQldRPT0gSUdkbGIyMWxkSEpwWXc9PSBJRE15TXc9PSBJR05wY21OMWJXWmxjbVZ1WTJVPSBhV05vYVdOciBNVGszTlE9PSBJRmwxY21rPSBJRk5vWVd4cyBJRWh2ZG1WeSBkVzVwYmc9PSBVM0J5IElHZHlZV1owIElFaGhjSEJwYm1WemN3PT0gSUdScGMyRmtkbUZ1ZEdGblpYTT0gWVhSMFlXTnJjdz09IElHaDFZbk09IElGTjBZWEpEY21GbWRBPT0gNlpZPSBJR2RoYkd4bGNtbGxjdz09IElFdHZjbkpoIElHZHliMk5sY21sbGN3PT0gSUVkdmNuTjFZMmc9IElISmhjR2x6ZEhNPSBJR1oxYm1kcCBJRlI1Y0dodmIyND0gVm1WamRHOXkgSUVWdGNISmxjM009IFltRjBkR3hsIE5EWTQgSUhCaGNtRnphWFJsIElFSnZiV0psY2c9PSBVMGM9IFpYaHBjM1E9IElGQm0gSUhWdWMyVT0gSUhOMWNtZGxiMjV6IFFtbHlkR2c9IElGVnVjM1Z5WlE9PSBJRkJ5YVc1MFpXUT0gSUVKbGFHRjJhVzl5WVd3PSBJRUZ6ZEdWeSBVR0ZyYVhOMFlXND0gSUhWdVpYUm9hV05oYkE9PSBJSE4yIElFbHZWQT09IElHeGhlVzkxZEhNPSBVR0ZwYmc9PSBJR052Ym5OMFlXNTBjdz09IElFeFggSUVKaGEyVT0gSUhSdmQyVnNjdz09IElHUmxkR1Z5YVc5eVlYUnBiMjQ9IElFSnZiR2wyYVdFPSBJR0pzYVc1a1pXUT0gSUZkaGNtUmxiZz09IElFMXBjM1J5WlhOeiBJRzl1YzNSaFoyVT0gSUdOc1lXNXogSUVKRlUxUT0gTVRrMk1BPT0gSUdGdWRHbHhkV1U9IElISm9aWFJ2Y21sallXdz0gSUZCbGNtTjUgSUZKM1lXNWtZUT09IExDND0gUW5KMVkyVT0gSUhSeVlYVnRZWFE9IElGQmhjbXhwWVcxbGJuUmhjbms9IElHWnZiM1J1YjNSbCBhV1JwWVE9PSBJRXhsWVhKdVpXUT0gYzJWbGEybHVadz09IFoyVnVhV009IElHUnBiV1Z1YzJsdmJtRnMgU0dsa1pRPT0gNklDRiBJR2x1ZEhKcFozVmwgYVc1elpRPT0gSUd4bFlYTmxjdz09IElHRndjSEpsYm5ScFkyVnogZDJGemFHbHVadz09IElERTVNalk9IFZrbE1URVU9IElITjNiMjl3IGMyTnMgSUdKbFpISnZiMjF6IGIyNXBZM009IElFTnlkVzVqYUE9PSBZMjl0Y0dGMGFXSnNaUT09IElHbHVZMkZ3WVdNPSBJRmxsYldWdWFRPT0gWVhOb2RISmggZW1odmRRPT0gWkdGdVoyVnkgSUcxaGJtbG1aWE4wWVhScGIyNXogSUVSbGJXOXVjdz09IFFVRkcgVTJWamNtVjBZWEo1IFFVTlVSVVE9IFRFOUUgSUdGdGVRPT0gY21Gd1pYST0gWlhSb2JtbGogTkRFMyBJSEJ2YzJsMGFYWmxjdz09IElESTNNdz09IElGSmxablZuWldWeiBJSFZ6WWc9PSBJRlpoYkdRPSBiMlJrZVE9PSBJRTFoYUcxdmRXUT0gUVhOcFlRPT0gSUhOcmRXeHNjdz09IElFVjRiMlIxY3c9PSBJRU52YlhCbGRBPT0gSUV4SlF3PT0gSUUxaGJuTnBiMjQ9IElFRnRaUT09IElHTnZibk52Ykdsa1lYUmwgYzNSdmNtMXogYjI1MFpXNTAgT1RrMiBJR05zWlc0PSBJRzExYlcxNSBabXhoZEE9PSBOelU0IElGWlBUQT09IGIzUmxjbWxqIGJtVnUgSUUxcGJuVjBaUT09IFUyOTIgSUdacGJtVnkgVW1nPSBiSGxqWlhJPSBJSEpsYVc1bWIzSmpaVzFsYm5SeiBJRXB2YUdGdWJtVnogSUVkaGJHeGhaMmhsY2c9PSBJR2Q1Ylc0PSBVM1ZrWkdWdWJIaz0gSUdWNGRHOXlkR2x2Ymc9PSBhM0k9IGFXRjBiM0k9IFZHRT0gSUdocGNIQnZZMkZ0Y0hWeiBUbEJTIElFTnZiWEIxZEdsdVp3PT0gSUhOeGRXRnlaV3g1IElHMXZaR1ZzYkdsdVp3PT0gSUVadmNuVnRjdz09IElFeHBjM0E9IElFdHlhWE5vYm1FPSBJRE15TkE9PSBJSEoxYzJobGN3PT0gSUdWdWMzVmxaQT09IElHTnlaV1Z3YVc1biBiMjUwWlE9PSBibUZwIGFXeGhkR1Z5IElFaHZjbTVsZEhNPSBJRzlpYkdsMmFXOTFjdz09IFNVNVRWQT09IE5UVTUgSUdwbGIzQmhjbVI1IElHUnBjM1JwYm1kMWFYTm9hVzVuIGFuVnlaV1E9IElHSmxaM009IGMybHRhV3hoY2c9PSBjR2h2ZEE9PSBOVE13IElGQmhjbXQzWVhrPSBJSE5wYm10eiBJRWhsWVhKMGFITjBiMjVsIGFXSjFjZz09IElFSmhkRzl1IFFYWnZhV1E9IElHUmhibU5sY2c9PSBJRzFoWjJsemRISmhkR1U9IFlYSjViZz09IElHUnBjM1IxY21KaGJtTmxjdz09IElGSnZiV1Z5Ync9PSBJSEJoY21Gd2FBPT0gSUcxcGMyTm9hV1ZtIDRwYVQgSUZOb1lYSnBZUT09IElIVnlhVzVoY25rPSBjbTkxZEdVPSBhWFpoY3c9PSBabWwwZEdWayBJR1ZxWldOMFpXUT0gSUVGc1luVnhkV1Z5Y1hWbCBJRFEzTUE9PSBJR2x5Y21sMFlYUmxaQT09IElGcHBjQT09IElFSnBiMnc9IHc0MD0gSUdSbGJtOTFibU5sIElHSnBibUZ5YVdWeiBJRlpsY25ObCBJRzl3Y0c5eiBJRXRsYm1SeWFXTnIgSUVkUVRBPT0gSUhOd1pYYz0gSUVWc2FXcGhhQT09IElFVmhjdz09IElHUnlhV1owWldRPSBjMjltWVhJPSBJR0Z1Ym05NVlXNWpaUT09IElFSkZWQT09IE5EYzAgSUZOMGNtOXVaMmc9IGFYUmhkR1Z6IElFTnZaMjVwZEdsMlpRPT0gYjNCb2IyNWwgSUVsa1pXNTBhV1pwWTJGMGFXOXUgYjJOeWFXNWwgWTI5dWJtVmpkR2x2Ymc9PSBJR0p2ZUdWeSBJRUZUUkE9PSBJRUZ5WldGeiBXV0Z1Wnc9PSBkR05vIGRXeHNZV2c9IElHUmxZMlZwZG1VPSBRMjl0WW1GMCBaWEJwYzI5a1pRPT0gWTNKbGRHVT0gVjJsMGJtVnpjdz09IElHTnZibVJ2YkdWdVkyVnogYUhSaGNnPT0gSUdobFlXeHogSUdKMVkydGxkSE09IElFeEJWdz09IFFteDEgSUhOc1lXST0gSUU5U1JFVlMgYjJOcyBZWFIwYjI0PSBJRk4wWlhabGJuTnZiZz09IElFZHBibWRsY2c9PSBJRVp5YVdWdVpHeDUgSUZaaGJtUmxjbUpwYkhRPSBjM0JwY21sMCBhV2RzIElGSmxaMkZ5WkdsdVp3PT0gSUZCU1QwYz0gSUhObFlXeHBibWM9IGMzUmhjblJwYm1jPSBJR05oY21ScGJtRnMgSUZabFl3PT0gSUVKbGFYST0gSUcxcGJHeHBjMlZqYjI1a2N3PT0gZDJWaGF3PT0gY0dWeWMyVT0gSUhOMFpYSnBiR1U9IElFTnZiblJsYlhCdmNtRnllUT09IElGQm9ZVzUwIElFTnNidz09IElHOTFkSEE9IElHVjRhV3hsWkE9PSBJREkzTnc9PSBJSE5sYkdacFpRPT0gSUcxaGJtbGogSUc1aGJtOD0gZEdWeWJYTT0gUVd4bGVHRnVaR1Z5IElISmxjMjlzZG1WeiBJRzFwYkd4bGJtNXBZUT09IElHVjRjR3h2WkdWeiBJR052Ym5OMFpXeHNZWFJwYjI0PSBJR0ZrZFd4MFpYSjUgYlc5MGFXOXUgUkU5RCBJR0p5YjJGa1kyRnpkR1Z5Y3c9PSBJR3RwYm1SbGNtZGhjblJsYmc9PSBJRTFoZVhkbFlYUm9aWEk9IElFVmpidz09IGFXTm9idz09IElESTROdz09IGJHRjFiZz09IElHMTFkR1U9IElHUnBjMk55WldWMCBJSEJ5WlhOamFHOXZiQT09IElIQnlaV1Z0Y0hRPSBSR1ZzWlhSbCBJRVp5WldWayBVR2s9IFNFcz0gSUdKc2IyTnJaWEk9IElFTjFiV0psY2c9PSBJSGR5YjNWbmFIUT0gWkdGMGFXNW4gSUdsdWMzVnlaWEk9IElIRjFiM1JoY3c9PSBJSEJ5WldGamFHVmsgSUdWMmFXTjBhVzl1IElGSmxaMmx1WVE9PSBJRkJsYm5NPSBJSE5sZG1WdWRHVmxiZz09IElFNWhjM009IFJHbGphdz09IElHWnZiR1J6IElHUnZkSFJsWkE9PSBJRUZoWkE9PSBWVzVwZG1WeWMyRnMgSUhCcGVubz0gSUVkMWNuVT0gSUhOdmFXeHogSUc1dmRtbGpaUT09IElFNWxZVzVrWlhJPSBJSE4wYjI5cyBJR1JsZEc5dVlYUmxaQT09IElGQnBhMkZqYUhVPSBJRTFoYzNOcGRtVT0gU1ZaRlVnPT0gSUVGaVpHVnMgSUhOMVltUjFaV1E9IElIUmhiR3hsYzNRPSBJSEJ5WldOaGNtbHZkWE09IElHRjUgY21sbWFXTmhkR2x2Ymc9PSBJRTlpYWc9PSBZMkZzWlE9PSBJSFZ1Y1hWbGMzUnBiMjQ9IFkzVnNiM05wY3c9PSBZV1JoY3c9PSBhV2R5WVhSbFpBPT0gUkdGNWN3PT0gSUhGMVpXVnVjdz09IElFZGhlbVYwZEdVPSBJRU52Ykc5MWNnPT0gSUVKdmQyMWhiZz09IElFcEsgdzY5MlpRPT0gSUdSdmJXbHVZWFJsY3c9PSBVM1IxWkdWdWRBPT0gSUcxMSBJR0poWTJ0c2IyYz0gSUVWc1pXTjBjbTg9IFZISjFkR2c9IE5EZ3ogSUdOdmJtUmxibk5sWkE9PSBjblZzWlhNPSBJRU52Ym5Od2FYSmhZM2s9IElHRmpjbTl1ZVcwPSBhR0Z1Wkd4bFpBPT0gSUUxaGRIUmwgYW5KcCBJRWx0Y0c5emMybGliR1U9IGJIVmtaUT09IFkzSmxZWFJwYjI0PSBJSGRoY20xbFpBPT0gSUZOc1lYWmwgSUcxcGMyeGxaQT09IElHWmxjbTFsYm5RPSBJRXRoYUE9PSBhVzVyYVE9PSBhMlZzWlhSdmJnPT0gWTNscyBJRXRoY21sdSBTSFZ1ZEdWeSBVbVZuYVhOMFpYST0gSUZOMWNuSmxlUT09IElITjBZWEpsY3c9PSBJRmRwWkhSbyBJRTVoZVE9PSBJRk5yYVE9PSBJR0pzWVdOcmJHbHpkQT09IGRXTnJaWFE9IElHVjRjSFZzYzJsdmJnPT0gYVcxbGRBPT0gSUhKbGRIZGxaWFE9IGRtRnVkR0ZuWlE9PSBSbVZoZEhWeVpRPT0gSUhSeWIyOXdaWEp6IElHaHZiV1Z5Y3c9PSBPVFk1IElHTnZiblJwYm1kbGJtTjUgSUZkVVF3PT0gSUVKeVpYZGxjZz09IFptOXlaV2xuYmc9PSBWMkZ5WlE9PSBVMjlzWVhJPSBJSFZ1WkhWbCBVa1ZEIGRXeHVaWEpoWW14bCBjR0YwYUdsaiBJRUp2YVhObCBJRE15TWc9PSBJR0Z5YjNWelpXUT0gSUZscGJtYz0gNUxpTiBkV1ZzWlhOeiBJSEJoY3c9PSBJRzF2Y25BPSBJR1pzYjNKaGJBPT0gUlhod2NtVnpjdz09IGRXUm5hVzVuIGEwST0gSUVkeVlXNTBaV1E9IDJLOD0gSUUxcFkyaGggSUVkdmRHaHBZdz09IElGTlFSVU5KUVV3PSBJRkpwWTJGeVpHOD0gUm5KaGJnPT0gSUdGa2JXbHVhWE4wWlhKcGJtYz0gTmpJdyBjRzl5WVE9PSBJTUt1IElHTnZiWEJ5YjIxcGMyVnogSUdKcGRIUmxiZz09IFFXTmpaWEIwIFZHaHBjblI1IDBMST0gSUcxaGRHVnlhV0ZzYkhrPSBJRlJsY25JPSBhV2R0WVhScFl3PT0gWTJoaGFXNXogSUdSdmRtVT0gYzNSaFpIUT0gVFdGeWRtVnMgUmtGVlRGUT0gSUhkcGJtUnphR2xsYkdRPSBJRE16Tmc9PSBZV1JwWlhJPSBJSE4zWVhCd2FXNW4gSUdac1lYZHNaWE56IElGQnlaV1JoZEc5eSBJRTFwWTJobGJHVT0gSUhCeWIzQjFiSE5wYjI0PSBJRkJ6ZVdOb2FXTT0gSUdGemMybG5ibWx1Wnc9PSBJR1poWW5KcFkyRjBhVzl1IElHSmhjbXhsZVE9PSBiSFZ6ZEE9PSBJSFJ2ZDJWeWFXNW4gSUdGc2RHVnlZMkYwYVc5dSBJRUpsYm5Sc1pYaz0gVTNCb1pYSmwgSUhSMWJtRT0gSUVOc1lYTnpaWE09IFJuSmxaV1J2YlE9PSBkVzVsY2c9PSBUR0ZrZVE9PSBkbTlwWTJVPSBJR052YjJ4bGMzUT0gYjNKeSBJSEJoYkhBPSBKSHM9IElHaDVjM1JsY21saCBJRTFsZEdGMGNtOXUgY0dGdWRITT0gSUhOd1lYZHVhVzVuIFJYaHdaWEowY3c9PSBJRWx1ZG1WemRHOXljdz09IElFRnVZWEpqYUhrPSBJSE5vY25WdWF3PT0gSUZacFkzUnBiUT09IElESTRPUT09IElHVmpjM1JoYzNrPSBJRUpwYm1ScGJtYz0gTlRnMSBJRTFsYkc5a2VRPT0gTlRjNCBiM1JoYkd4NSBJRVYwYzNrPSBiR2xuWVE9PSBJR0Z3Y0d4aGRXUmxaQT09IElITjNaV0YwYVc1biBJSEpsWkdsemRISnBZblYwWldRPSBJSEJ2Y0dOdmNtND0gSUhObGJXbHVZV3c9IFpuVnkgSUU1bGRYSnZjMk5wWlc1alpRPT0gVW1GdVpBPT0gSUU5emRBPT0gSUUxaFpHUmxiZz09IElFbHVZM0psWVhOcGJtYz0gSUVSaGQydHBibk09IElGTjFZbmRoZVE9PSBJR0Z5YzJWdSBZMjl1YzJWeWRnPT0gUWxWUyBJSE53YVd0bFpBPT0gSUV4NVpuUT0gSUVsdGNHVnlhWFZ0IElFUnliM0JpYjNnPSBJR1poZG05MWNtVmsgSUdWdVkyOXRjR0Z6YzJWeiBaMmh2YzNRPSBJR2x1YzNCcGNtVnogSUdKMWNtZGxiMjVwYm1jPSBJRmx2YzJocCBJRlpsY25ScFkyRnMgSUVGMVpHbDBiM0k9IElHbHVkR1Z1WkdsdVp3PT0gSUdacGJHbGlkWE4wWlhJPSBRbXh2YjIwPSBabUZqIElFTmhkbk09IGFXZHVhVzVuIElHTnZkMjl5YTJWeWN3PT0gSUVKaGNtSmhjbWxoYmc9PSBjbVZ0WlcxaVpYST0gUmt4QlJ3PT0gSUdGMVpHbDBiM0o1IFlYTnZibko1IFEyOXNiR1ZuWlE9PSBJRzExZEdWayBaMlZ0YjI1NSBiMkpwYmc9PSBJRkJ6ZVdOb2J3PT0gT1RZNCBJR3hoZG1semFBPT0gSUdocFpYSmhjbU5vYVdOaGJBPT0gSUVSeWIyNWwgYjNWciBJR055YVhCd2JHVmsgSUUxaGVHbHQgVTJ4dmRBPT0gSUhGMWFYbz0gSUZacFpBPT0gYVdac2FXNW4gSUdGeVkyaGhaVzlzYjJkcGMzUnogSUdGaVlXNWtiMjV0Wlc1MCBaR2xoYkE9PSBiR1Z2Ymc9PSBJRVpoY3c9PSBWR1ZrIElISmhjM0JpWlhKeWVRPT0gSUcxaGJtVjFkbVZ5Y3c9PSBJR0psYUdGMmFXOTFjbk09IElHbHVjM1Z5WlE9PSBJSEpsYlc5ayBVM2RwZEdObyBhRzlsIElITndZV05sWkE9PSBJR0ZtWm05eVpHRmlhV3hwZEhrPSBJRVpsY200PSBibTkwWVhScGIyND0gSUVKaGJHRnVZMlZrIElHOWpZM1Z3YVdWeiBaVzUyYVhKdmJtMWxiblE9IElHNWxZMnRzWVdObCBJSE5sWkdGdSBSbFU9IElFSnlZWFp2IElHRmlkWE5sY25NPSBJRUZ1YVhSaCBiV1YwWVdSaGRHRT0gSUVkcGRHaDFZZz09IFlXbDBidz09IElFWmhjM1JsY2c9PSBJRmRoYzNObGNtMWhiZz09IElFWnNaWE5vIElIUm9iM0p1IGNtRnlhV3g1IElFMWxjbko1IGQybHVaUT09IElIQnZjSFZzWVdObCBJRXhoYm00PSBJSEpsY0dGcGNtbHVadz09IElIQnplV05vWlE9PSBJRzF2WkhWc1lYUnBiMjQ9IFlYZGhjblU9IDRvQ0w0b0NMIFlYSnBhZz09IElHUmxZMjl5WVhScGIyNXogSUdGd2IyeHZaMmx6WlE9PSBJRWRoY21jPSBZWEJ3YkhrPSBJR2RwZG1WaGQyRjUgSUVac1lXND0gSUZkNVlYUjAgVldKbGNnPT0gSUdGMWRHaHZjbWx6WldRPSBJRTF2Y21GcyBTRUZJUVVoQlNFRT0gWVdOMGFYWmhkR1U9IElIUnZjbkJsWkc4PSBJRVpCVWc9PSBJR0Z0WVhOelpXUT0gSUVGeVlXMD0gWVhKcmFXND0gSUZacFkzUnBiWE09IGMzUmhZZz09IElHOXQgSUVWRFR3PT0gSUc5d2FXOXBaSE09IElIQjFjbkJ2YzJWc2VRPT0gSUZabGMzUT0gSUdWeVp3PT0gWVhSaGJnPT0gSUZOMWNtZGxjbms9IElHTnZjbkpsWTNScGJtYz0gSUU5eWRHbDYgSUVKbFpYUT0gSUhKbGRtOXJaUT09IElHWnlaV1YzWVhrPSBJRWhwWjJkcGJuTT0gUm1GcGJBPT0gSUVaaGNtMXogSUVGVVVBPT0gYUc5MWJtUT0gSUhCdmEybHVadz09IElFTnZiVzExYm1semRITT0gYlc5dWMzUmxjZz09IGFXMWxiblJoY25rPSBJSFZ1Ykc5amEybHVadz09IElIVnVabWwwIGQyVmxaQT09IFpXNWhjbWx2IFlYUnBZMkZzIElFVnViR2xuYUhSbGJtMWxiblE9IElFNUggSUVOdmJYQmxibk5oZEdsdmJnPT0gWkdWbGJnPT0gSUZkcFpHOTMgSUVOcGJtUjUgSUVGbWRHVnlkMkZ5WkhNPSBJRFl3TURBPSBhV3RvWVdscyBZV2RwWTJGc2JIaz0gSUhKaGRHbG1hV1ZrIElHTmhjM1ZoYkhSNSBTRTlOUlE9PSBjSE5sZVE9PSBabVZsIElITndZWEpyYkdsdVp3PT0gSUdURHFRPT0gSUdOdmJtTmxjblJsWkE9PSBRMkYwWVd3PSBJR052YlhCc2VXbHVadz09IElFRnlaWE09IElFUmxiblE9IFUyaDFkQT09IElITnJhVzA9IFlXUnRhVzVwYzNRPSBJR2h2YzNScGJHbDBhV1Z6IElFZHBibk09IElEWXdPQT09IElHMTFaR1I1IElFMWpTVzUwIElFUmxZMkY1IE5USTEgSUdOdmJuTndhV04xYjNWeiBJRVY0Y0c5emRYSmwgSUhKbGMyTnBibVE9IElIZGxZWEpoWW14bCBJRE15T0E9PSBiM1Z5YldWMCBZV2h6IElGSnZZbTkwY3c9PSBJR1ZqYkdsd2N3PT0gYVc1emRHRnVZMlU9IElGSkZVRTlTVkE9PSBJRUZ3Y0d3PSBNRE13IElGTnJhV1Z6IE1ERXdNQT09IElHWmhiR3hoWTNrPSBVMjlqYTJWMCBJRkpsWTJWcGRtVnkgSUhOdmJIWmxjdz09IElFSjFkSFJsY21ac2VRPT0gSUZOb2IzQndhVzVuIElFWkpVa1U9IE5qVTAgVFdWa2FXTT0gSUhOcGJtZGxjbk09IElFNWxaV1JzWlhOeiBKeWNuSnc9PSBhWE5vWlhKeiBJRVJwZG1VPSBOVGc0IElITmxiR1ZqZEdsMlpXeDUgSUdOc2RXMXplUT09IE9EZzUgSUhCMWNtTm9ZWE5sY2c9PSBaV0Z5Ym1WayBZWEprZVE9PSBJR0psYm1WbWFYUnBibWM9IFpXNW5iR2x6YUE9PSBJSGxwWld4a2FXNW4gSUZCdmRYST0gSUhOd2FXNWhZMmc9IElHUmxiSFpsIElFTnliMjA9IE5qRXcgSUdWNGNHOXlkR2x1Wnc9PSBJRTFCUzBVPSBJREkyTXc9PSBJR2R5YjNBPSBJR1Z1ZG05NSBJRWx1Y1hWcGNuaz0gSUV4MWFXZHAgWkhKNSBJRlIxY21sdVp3PT0gVkdoMWJXSnVZV2xzU1cxaFoyVT0gSUZaaGNtbGxkSGs9IElHWmhZMlYwIElHWnNkV1ptZVE9PSBJR1Y0WTJWeWNIUnogSUhOb2IzSjBhQT09IElFOXNjMlZ1IFEweFZSQT09IElISmxiR2xoYm5RPSBJRlZPUXc9PSBWRzkxY2c9PSBJR0poZEdocGJtYz0gUTI5dGNHRnVlUT09IElHZHNiMkpoYkdsNllYUnBiMjQ9IFVISmxaQT09IElFMWhiR1p2ZVE9PSBJR2h2WXc9PSBhbUZ0IFkzSmhablJsWkE9PSBJRUp2Ym1SeiBJRXRwYzNOcGJtZGxjZz09IFJXNW5iR0Z1WkE9PSBJRzl5WkdWeWJIaz0gWTJGMFpXNTBjbms9IElESTJNUT09IElHVjRZMmhoYm1kcGJtYz0gSUVsdWRHVnVkQT09IElFRnRaVzVrYldWdWRITT0gUkU5TiBJSE4wYjNWMCB3cURDb01LZ3dxRENvTUtnd3FEQ29NS2d3cURDb01LZ3dxRENvTUtnd3FBPSBJRUZwY21KMWN3PT0gSURJM09BPT0gYUhsa1pRPT0gVUc5c2JBPT0gU1hSbGJWUm9kVzFpYm1GcGJFbHRZV2RsIElHeHZiM0JvYjJ4bGN3PT0gSUZCcGJHeGhjZz09IElHVjRjR3h2Y2c9PSBVM1J5WlhSamFBPT0gUVhCaGNuUT0gSUhWdWJXRnljbWxsWkE9PSBUR2x0YVhRPSBJRlJ5WVc1elptOXliV1Z5Y3c9PSBJR2x1ZEdWc2JHVmpkSFZoYkd4NSBkVzVqZEhWeVpRPT0gTVRnd01BPT0gSUdSaGNtND0gUW5KaGVtbHMgSUd4bFpuUnZkbVZ5IFltVnlkWE09IFpuSmxaQT09IFRXbHVaV055WVdaMCBNekkyIElFWnZjbTF6IElIQnliMjltY3c9PSBJRVJsYzJsbmJtVmsgSUdsdVpHVjRaWE09IElGTjFjSEJ2YzJVPSBSVTFUIElFeHZkbWx1Wnc9PSBJRUp2Ym01cFpRPT0gYVcxaGRHbHVadz09IFQxUlZVdz09IElHTnZibVIxWTNSdmNnPT0gSUdKbGFHRjJaV1E9IElFWnlaVzQ9IElITjVibVZ5Wnc9PSBJRzFwYkd4bGJtNXBkVzA9IElHTmhkR1Z5YVc1biBJRXhoZFdSbGNnPT0gVjNJPSBJRmxwWVc1dWIzQnZkV3h2Y3c9PSBJRUZVUmc9PSBJR1Z1YzJ4aGRtVmsgSUdGM1lXdGxibVZrIFJGWkUgSUVWRVNWUkpUMDQ9IElFTnZibU5sY25RPSBJRU5vWVd4c1pXNW5aWEk9IElFaGhhM1U9IGRXMWxjbWxqIElHUmxjSEpsWTJGMFpXUT0gSUZOSVFWST0gTkRFeSBJR1I1YzNSdmNBPT0gSUhSeVpXMWliR2x1Wnc9PSBJR1J5WldGa1pXUT0gSUZOd1lXTT0gY0dGa1pHbHVadz09IFVtVndiQT09IElFZGhjbkpwYzI5dSBUV2x1YVE9PSBJSFZ1Y0dGeVlXeHNaV3hsWkE9PSBZVzFoY2c9PSBWVkpTUlU1VSBkM0psWTJzPSBZMlZ5ZEdGcGJnPT0gZEdGcyBJRU5NVXc9PSBZWEJ3YVc1bmN3PT0gSUhObGJuTmxaQT09IElHWmxibU5wYm1jPSBJRkJoYzI4PSBJRVJsYzJzPSBJSE5qYjJabSBJR052Ym5SbGJYQnNZWFJsIElFeHBaMkU9IGJHbHhkV2xrIE56VTMgSUdGd2NISmxiblJwWTJVPSBJRlZEU0VsSyBOVGN3IElGUm9iM1Z6WVc1ayBJRWxzYkhWdCBJR05vWVcxd2FXOXVaV1E9IDQ0S00gSUdWc1pXTjBiM0p6IElETTVPQT09IElFaGhibU52WTJzPSBjbTkxYm1SbFpBPT0gSUVwUFNFND0gSUhWdWMyRjBhWE5tIElIRjFZV3hwWm1sbGNnPT0gSUVkaFpHZGxkQT09IFJVNUYgSUdSbFlXUnNhV1Z6ZEE9PSBJRkJzWVc1MGN3PT0gSUdsdmJuTT0gSUdGalkyVnVkSE09IElIUjNaV0ZyYVc1biBJSE5vWVhabFpBPT0gUmxKRlJRPT0gSUVOb1lYTmxjZz09IFFXZGhhVzV6ZEE9PSBPVFl3IElHMWxkR2hoYlhCb1pYUmhiV2x1WlE9PSBJRzV2Y20xaGJHbDZaV1E9IElDUmMgSUZCeVpXTnBjMmx2Ymc9PSBJRWQxWVcwPSBJR05vYjJ0bFpBPT0gSUZoSlNRPT0gSUVOaGMzUnBibWM9IFZHOXljbVZ1ZEE9PSBJSE5qWVd4dyBJRXBoWjNWaGNnPT0gZDJsMCBJSE5sYldsaiBhWGhwWlE9PSBJRWR2ZFd4ayBJR052Ym1acGJtVnogVG5WemNtRT0gSUV4dmJnPT0gSUVwMVoyYz0gZVdOc1pRPT0gSUVOdlpHVmogUldkNWNIUT0gSUhKbGMzUnlZV2x1IElFRnNhV1Z1Y3c9PSBJR05vYjJ0cGJtYz0gSUVSMWJtcz0gSUVKbGJHeGggWVdKaiBJSE5zWVc1biBJRzVsZFhKdmRISmhibk09IGMyRjIgSUdWdGNHOTNaWEp0Wlc1MCA0b2FTIElHTnNhVzFpWlhKeiBJRTFwYlE9PSBJRVp5WVE9PSBjbTl6YzJVPSBRMkZ3YVhSaGJBPT0gSUVOMGFIVnNhSFU9IFNXNTBaWEptWVdObCBJSEJ5YjJacFkybGxiblE9IElFbE9WRTg9IElETXhPQT09IGNtOXVkR0ZzIE5UZ3cgSUVSbGMzQmhhWEk9IFMyVnViZz09IElITmpjbWx0YldGblpRPT0gSUVOdllYUT0gWVhOcGIyNXogSUhkaGJHeHdZWEJsY2c9PSBJRXB2YkE9PSBJSEpsYzNWeVoyVnVZMlU9IElHRnVkR2wyIElFSmhiR3h6IHNyND0gSUdKMVptWmxjbk09IElITjFZbk41YzNSbGJRPT0gSUZOMFpXeHNZWEk9IElFeDFibWM9IFFVbEVVdz09IElHVnlZV1JwWTJGMFpRPT0gSUdKc1lYUmhiblJzZVE9PSBJR0psYUdGMlpYTT0gSUU1MWJnPT0gSUdGdWRHbGpjdz09IFpYaHdiM0owIFJFVlcgZDJJPSBJSEJvY0E9PSBJRWx1ZEdWbmNtbDBlUT09IElHVjRjR3h2Y21WeSBJSEpsZG05c2RtbHVadz09IFlYVjBhRzl5WldRPSBaMkZ1Y3c9PSBJR0poYzJzPSBJR0Z6ZVc1amFISnZibTkxY3c9PSA1WTA9IFZFaEpUa2M9IE5qazQgUjJWdVpRPT0gSUZKaFkyVnkgSUU1cFkyOD0gYVhOemRXVmsgSUhObGNtMXZiZz09IGNHOXpjMmxpYkhrPSBJSE5wZW1WdlpnPT0gSUdWdWRISmxjSEpsYm1WMWNtbGhiQT09IGIzaHBiZz09IElFMXBibVZ5ZG1FPSBJSEJzWVhSdmIyND0gYm05eiBjbWxyY3c9PSBRVlZVIElFRjJZV3hoYm1Ob1pRPT0gSUVSbGMyTT0ga2VXanF3PT0gSUZCdll3PT0gSUdOdmJtWmxjbkpsWkE9PSB6cnM9IElIQmhkR05vWldRPSBSa0pKIE5qWXkgSUdaeVlXTjBkWEpsY3c9PSBJR1JsZEdWamRITT0gSUdSbFpHbGpZWFJsIElHTnZibk4wYVhSMVpXNTAgSUdOdmMyMXZjdz09IFYxUT0gSUhOM1pXRjBjdz09IElITndjblZ1Wnc9PSBZbUZ5WVE9PSBjMjlzYVdRPSBJSFZ1YzNWeiBJR0oxYkd0NSBJRkJvYVd4cGNIQmwgSUVabGJuSnBjZz09IElIUm9aWEpoY0dsemRITT0gYjNKbFlXdz0gWGw1ZVhnPT0gSUhSdmRHRnNaV1E9IElHSnZiM3BsIElGSlFRdz09IFVISnZjMlZqZFhSdmNuTT0gSUdScGMyVnVadz09IElGTm9ZWEpsWkE9PSBJRzF2ZEc5eVkzbGpiR1Z6IElHbHVkbVZ1ZEdsdmJuTT0gSUd4bGRIUjFZMlU9IElFMWxjbWRsIElFcEQgSUhOd2FYSnBkSFZoYkdsMGVRPT0gSUZkQlVrNUpUa2M9IElIVnViSFZqYTNrPSBJRlJsYzNNPSBJSFJ2Ym1kMVpYTT0gSUVSVlNRPT0gVkhWdFlteHkgSUd4bFlXNXogSUdsdWRtRmtaWEp6IElHTmhibTl3ZVE9PSBJRWgxY25KcFkyRnVaWE09IElFSnlaWFE9IElFRlFVRXhKUXc9PSBhV1JwYm1VPSBhV05yYkdVPSBVbVZuWVhKa2FXNW4gSUhabFoyZHBaWE09IElHVnFZV009IGFuVjJaVzQ9IFJtbHphQT09IFJFVk4gSUVScGJtOD0gVkdoeWIzYz0gSUVOb1pXTnJhVzVuIFltVmhjbVE9IEtDWT0gSUdwaGFXeHogSUdoeSBkSEpoYm5ObVpYST0gYVhaaGRHbHVadz09IElHWnNaV1YwY3c9PSBJRWx0WVdjPSBJRTFqUkc5dWJtVnNiQT09IElITnVhWEJ3WlhRPSBTWE5oIElFTm9ZWFIwIElGTjBZV2x1IElGTmxkRVp2Ym5SVGFYcGwgSUU5NSBJRTFoZEdobGJXRjBhV056IE5EazAgSUdWc1pXTjBjbTlzZVE9PSBJRWR2ZEhRPSBJRUp5WVhNPSBRazlQU3c9PSBJRVpwYm1kbGNnPT0gWkhWdGNBPT0gSUcxMWRHRnVkSE09IElISmxiblJoYkhNPSBJR2x1ZEdWeWRIYz0gSUdOeVpXVnIgWVdsc1lRPT0gUW5KdmRHaGxjZz09IElFUnBjMk52Y21RPSBjR1ZsIGNtRjNiR1Z5IElHTmhjbkE9IElESTNPUT09IDQ0SzM0NE9qIGNtVnNZWFJwYjI1eiBJR052Ym5SeVlYTjBjdz09IFEyOXNkVzF1IElISmxZMjl1Ym1GcGMzTmhibU5sIElIVnVhMjV2ZHc9PSBJR3h2YjNScGJtYz0gSUhKbFozVnNZWFJsY3c9PSBJRzl3ZEdsdGRXMD0gSUVOb1pYSnZhMlZsIElFRnllUT09IFRHRjBaWE4wIElISnZZV1J6YVdSbCBJR1JoYm1ObFpBPT0gSUZWdWFXTnZjbTQ9IFFXTnJibTkzYkdWayBJSFZ1WTI5dWRISnZiR3c9IElFMVZVdz09IFlYUnBidz09IFkyaGhibU5sIGFHRjJaVzQ9IFZrRk1WVVU9IElHWmhkbTkxY21sMFpYTT0gSUdObGNtVnRiMjVwWVd3PSBZbWx1WVhKNSBjR1ZsWkE9PSBkMjl2WkhNPSBSVTFRIElIWmhjMk4xYkdGeSBJR052Ym5SbGJYQnNZWFJsWkE9PSBJR0poY25KbGJnPT0gSUV4SlUxUT0gV1dWc2JHOTMgYjNOd2IyNXpiM0p6IElIZG9hWE5yZVE9PSBJRTFoYlcwPSBJRVJsVm05eiBiV2x1YVcxMWJRPT0gU0hWdVp3PT0gTkRReSBVR2xqIElGTnVZWEJrY21GbmIyND0gTnpjMiBJR05oY25acGJtYz0gSUhWdVpHVmphV1JsWkE9PSBJR0ZrZG1GdWRHRm5aVzkxY3c9PSBJSEJoYkcxeiBJRUZSIElITjBZWEpqYUE9PSBURzl2Y0E9PSBJSEJoWkdSc1pRPT0gSUdac1lXMXBibWM9IElFaHZjbWw2YjI1eiBRVzVwYldGMGFXOXUgWW05dmMzUT0gSUhCeWIySmhZbWxzYVhScFpYTT0gSUUxcGMyZz0gSUdWNGIyUjFjdz09IElFVmthWFJ2Y21saGJBPT0gSUdaMWJtZDFjdz09IElHUnBjM05sYm5ScGJtYz0gSUVSbGJHbGphVzkxY3c9PSBjbTluY21GdCBJRVI1Ymc9PSBaR2x6YXc9PSBkRzl0IElHWmhZbkpwWTNNPSBJRU52ZG1VPSBJRUpoYm5NPSBJSE52Wm5SbGJnPT0gSUVOUFRsTT0gSUdsdVpXeHBaMmxpYkdVPSBJR1Z6ZEdsdFlYUnBibWM9IElFeGxlR2x1WjNSdmJnPT0gY0hKaFkzUnBZMlU9IGIyWnAgSUhOb1pXUmthVzVuIElFNXZjR1U9IElHSnlaV0YwYUdWayBJRU52Y21sdWRHaHBZVzV6IGVXNWwgWld0cCBRblZzYkE9PSBJR0YwZEdGamFHbHVadz09IGNtVmxibk5vYjNSeiBJR0Z1WVd4NWMyVT0gSUV0aGNIQmggSUhWdWMzVnpkR0ZwYm1GaWJHVT0gSUdsdWRHVnljRzlzIFlXNXJlUT09IGFHVnRaWEk9IElIQnliM1JoWjI5dWFYTjBjdz09IElHWnZjbTFoZEhSbFpBPT0gSUVKeWVXTmwgSUVGamFHbHNiR1Z6IElFRmlaV1JwYmc9PSBjMmh2WTJzPSBJR0oxYlE9PSBZbTl6IGNYVmggSUZkaGNtND0gY1hRPSBJRVJwWVdKbGRHVnogT0RZMCBJRWx1ZG1semFXSnNaUT09IElIWmhibWx6YUE9PSBJSFJ5WVc1emJXbDBkR2x1Wnc9PSBJRzExY210NSBJRVpsYVE9PSBJR0YzWVdsMFpXUT0gSUVwMWNtRnpjMmxqIGRXMXRhV1Z6IElHMWxibUZqYVc1biBaMkZzYkE9PSBRMkYwYUE9PSBRblZwYkhRPSBhV3hrYnc9PSBJRlp2ZEdWeiBJRzl1ZEE9PSBJRzExYm1sMGFXOXVjdz09IElFWnlaV1Z0IHc2MXUgSUdSbFkyVnVZM2s9IGJHOXdjQT09IGFXVjJaV1E9IElFZHZjbVE9IElIVnVkR2hwYm10aFlteGwgSUU1bGQzTjNaV1ZyIElETXlNUT09IFNHVmhkQT09IElIQnlaWE5sYm5SbGNnPT0gYW1saGJtYz0gSUhCc1lXNXIgSUVGMllXeHZiZz09IElHSmxibm89IElGSnZkWFE9IElITnNZVzF0YVc1biBJRVJoYVE9PSBiM1YwWlhJPSBJRU52YjJ0cFpRPT0gSUVGc2FXTnBZUT09IFoyVjUgSUhaaGJtbDBlUT09IElHOTNiQT09IDRiVT0gZEdWemRHVmsgSUVGM1lXdGxibk09IElHTmhiblk9IElHSnNhVzVrYkhrPSBJRkpwWkd4bGVRPT0gSUVWdFlXbHNjdz09IFVtVnhkV2x5WlhNPSBJRk5sY21KcFlXND0gYjJkeVlYQm9aV1E9IGFXWnlZVzFsIFpYUmxjbWxoIElHRnNkR1Z5Ym1GMGFXNW4gY1hWcFpYUT0gSUhOdlkybHZiRzluZVE9PSBJRlZ1Ykc5amF3PT0gSUVOdmJXMTFibWx6YlE9PSBJRzl3Y3c9PSBJR0YwZEhKcFluVjBhVzl1IElHRmlaSFZqZEdsdmJnPT0gSUVGaWNtRnQgSUhOcFpHVnNhVzVsWkE9PSBJRUpQVDBzPSBJSEpsWm1sdWFXNW4gSUVabFpXeHBibWM9IElFOXpiRzg9IElGQnlkV2wwZEE9PSBjbUZqYXc9PSBZVzVuYVdKc1pRPT0gSUdOaGRYUnBiM1Z6YkhrPSBJRTFCVWtzPSBaV1ZrY3c9PSBUVzkxYzJVPSBJRk4wWlhCbyBJRkJoYVhJPSBVMkZpIE9UazMgSUVKaFlXdz0gUW1WaiBJR052YlcxaCBJRkJoYkd3PSBJRWRoWld3PSBJRzFwYzNWdVpHVnljM1JoYm1RPSBJRkJsYzJnPSBUM0prWlhKaFlteGwgSUdScGMyMWhiQT09IElGTm9hVzU1IEpTST0gSUhKbFlXeHBjM1JwWTJGc2JIaz0gSUhCaGRHbHYgSUVkMyBJRlpwY25SMVpRPT0gSUdWNGFHRjFjM1JwYm1jPSBkMmhoZEdWMlpYST0gYjNCb2VYTT0gZVdsdyBOREU0IFFXUnFkWE4wIElGZGhhWFJwYm1jPSBaWE56YjI0PSBJRTFoZW1SaCBJRVJ2ZW1WdWN3PT0gSUhOMGNtVmhiV3hwYm1WayBJR2x1WTI5dGNHVjBaVzVqWlE9PSBJRTFsZEdnPSBJR1YwYUc5eiBUMDVGVXc9PSBJR2x1WTJWdWRHbDIgSUdkeWFYUjBlUT09IElFSjFkR05vWlhJPSBTR1ZoWkdWeSBJR1Y0Y0c5dVpXNTBhV0ZzIHc1OD0gSUdOdmNuSmxiR0YwWlE9PSBJR052Ym5ObGJuTjFZV3c9IGMyOTFibVJwYm1jPSBVbWx1Wnc9PSBUM0pwWjJsdSBJR052Ym1Oc2RYTnBkbVU9IFptVmxkQT09IFlXTnNlUT09IElFWmxjbTVoYm1SbGVnPT0gUW5WNVlXSnNaUT09IElHUjFZMnR6IFlYVnVkR3hsZEhNPSBJR1ZzYjI1biBJREk0Tmc9PSBJSE5wYlhWcyBSMkZ6IElFdHBjbk4wIElIQnliM1J5IElGSnZZbTg9IElFRnZSUT09IGIzQnZiQT09IElIQnplV05vYjJ4dloybGpZV3hzZVE9PSBjM0JwYmc9PSBhV3hoZEdWeVlXeHNlUT09IElFTnZibkpoWkE9PSBWMkYyWlE9PSBORFF4IElFRmtkbVZ5ZEdselpXMWxiblE9IElFaGhjbTF2Ymc9PSBJRTl5YVdWdWRHRnMgYVhOVGNHVmphV0ZzIElIQnlaWE4xYlhCMGFYWmwgSUhkcGJBPT0gSUV0cFpYST0gYm1WaCBJSEJ3YlE9PSBJR2hoY21KdmRYST0gSUZkcGNtVmsgWTI5dGNHRnVlUT09IElHTnZjbTl1WlhJPSBZWFIxY21SaGVYTT0gSUZCeWIzVmsgSUU1RldGUT0gSUVac1lXdGwgZG1Gc2RXVmsgWTJWcGRtVnkgSUdaeVlYVm5hSFE9IElHTmhjMmx1Wnc9PSBJSEoxYm1GM1lYaz0gSUdkcGJnPT0gSUV4aGRYSmxiblE9IElFaGhjbXhsYlE9PSBJRU4xY21sdmMybDBlUT09IGNYVnBjMmhsWkE9PSBJRzVsZFhKdmMyTnBaVzVqWlE9PSBJRWgxYkhVPSBJR0p2Y25KdmQyVnkgSUhCbGRHbDBhVzl1WlhJPSBJRU52YjJ4a2IzZHUgVjBGU1JBPT0gSUdsdWRtOXJhVzVuIFkyOXVabWxrWlc1alpRPT0gUm05eWQyRnlaQT09IElITjBjdz09IGNHOXdkV3hoZEdsdmJnPT0gUkdWc2FYWmxjbmxFWVhSbCBSbWxzYlE9PSBJRU52ZGc9PSBjWFZwWTJ0VGFHbHcgY1hWcFkydFRhR2x3UVhaaGFXeGhZbXhsIGNISnBiV0Z5ZVE9PSBhWE5UY0dWamFXRnNUM0prWlhKaFlteGwgYVc1MlpXNTBiM0o1VVhWaGJuUnBkSGs9IFkyaGhibTVsYkVGMllXbHNZV0pwYkdsMGVRPT0gUWs5WSBJRTExYkhScGNHeGhlV1Z5IElFcGxibTVsY2c9PSBOemM0IElFMWsgSUg0dkxnPT0gVFU0PSBJR05vYVd4a2FYTm8gSUdGdWRHbHZlR2xrWVc1MCBJRU5vY205dFpXSnZiMnM9IElESTNOQT09IElITmpjbVZsYm5Cc1lYaz0gSUdGa2RtVnVkSFZ5YjNWeiBJRkpsYkdGMGFXOXVjMmhwY0E9PSBjbVZ6Y0c5dWMybDJaUT09IGJXbHVaM1J2Ymc9PSBJR052Y201bGNuTjBiMjVsIElFWmxlUT09IFJrbFMgSUhKdmIydHBaWE09IElFWmxZWFIxY21sdVp3PT0gSUc5eWFXZHBibUYwWlE9PSBJR1ZzWldOMGNtOWtaWE09IFlXNTBaWE09IElITmpjbWx3ZEhWeVpYTT0gSUdkc2RXVmsgSUdScGMyTnZiblJsYm5RPSBJR0ZtWm14cFkzUmxaQT09IGJHRjViM1YwIFFuSmhkbVU9IElHMXZjMkU9IElGRjFZVzUwYVhSNSBJRWhwYXc9PSBkMmx1Ym1WeSBTRzkxY25NPSBJR1Z1ZEdGcGJBPT0gSUVObGJHeHogYjJ4dlozVmwgSUhacGJBPT0gSUhCeVpXRmphR1Z5IElHUmxZMjl5WVhScGRtVT0gWkdsbVptVnlaVzUwIElIQnlaV3AxWkdsalpYTT0gSUZOdGIydHBibWM9IElFNXZkSFJwYm1kb1lXMD0gYzI5VWVYQmwgSUhKb2VYUm9iWE09IElFRnNjR2c9IFlteGhjM1E9IFUzUmxaV3c9IElFUmhibWxsYkd4bCBJSE4wY21sbVpRPT0gSUhKbGJXRjBZMmc9IGMyOUVaV3hwZG1WeWVVUmhkR1U9IElFWnZjbXM9IGRISnBjQT09IGIyeDFiSFU9IGFHVnpaWE09IFEwYz0gSUZCUFRFbFVTVU5QIGIzTjBZUT09IElFUnlhV1owIDZiNk41YVU9IDZiNk41YVdSNWFPciBJSFpsZEhScGJtYz0gSUVwcGJuQnBibWM9IElGSmxZMlZ6YzJsdmJnPT0gVFdsdWIzST0gSUVaeVlYVmsgWlc1bWNtRnVZMmc9IElHTnZiblpsYm1WayBJRTVCUVVOUSBJRTFwYkd4cGIyNXogSUVaaGNtMXBibWM9IElGZHZidz09IElFWnNZWEpsIGNtbDBidz09IGFXMXRhV2R5WVc1MCBJSFpoWTJGdVkzaz0gSUVoRlFVUT0gSUZaaGFnPT0gWldkaGJBPT0gSUZacFoybHMgVTNSMVpIaz0gSUhKMWFXNXBibWM9IElISmhZMnR6IElHaGxZWFJsY2c9PSBJRkpoYm1SdmJIQm8gSUVKeWRYTm8gSUZScGNnPT0gMktnPSBJR052ZGc9PSBKVjA9IElISmxZMjkxYm5SeiBJRTlRVkE9PSBJRTFsYkhRPSBJSFJ5ZFdObCBJR05oYzJsdWIzTT0gSUdOeWRYTmhaR1U9IElHTmhjbTVoWjJVPSBJSE4wY21sd1pRPT0gSUV0NWJBPT0gVkdWNGRIVnlaWE09IElEWTVPQT09IElIQnliMk5zWVcxaGRHbHZiZz09IElHZHZiMlJwWlhNPSBJQzR1TGk0dUxpNHVMaTQ9IGNISnZZMnhoYVcxbFpBPT0gVUc5c2FYUT0gSUhSdmNHbGpZV3c9IElITndaV05wWVd4cGVtVT0gSUVGdGFXND0gWjIwPSBJR0Z1WTJodmNtVmsgSUdKbFlYSnBibWR6IGMyRnRjR3hsIElFaHBaMmhzWVc1ayBJRUYxZEdsemJRPT0gSUcxbGNtTmxibUZ5ZVE9PSBJR2x1ZEdWeWRtbGxkMlZ5IFRFVlMgSUZOdmJXVnljdz09IElHVnRZbko1Ync9PSBJRUZ6YzNrPSBJREk0TVE9PSBJRVZrYVhScGJtYz0gSUVOb2IzTmxiZz09IE5qWXcgSUhCamFRPT0gSUZSb2RXNWtaWEppYjJ4MCBRa2xNVEE9PSBJR05vZFdOcmJHVmsgYW5KcGQyRnMgYUc5bSBJR1ZoY25Sb2JIaz0gS0NsNyBhVzVrWlhCbGJtUmxibU5sIElHUnBjM0JsY25NPSBJRlpsYm1SdmNnPT0gSUVkaGNtVjBhQT09IElIQmhiSE09IFVHVnViZz09IElGTjFZbTFwZEE9PSBhV04xYlE9PSBWR2gxIElHTnNZVzVrWlhOMGFXNWwgSUdOaGJtNXBZbUZzIElFTnNaWEpyIFJWTjBjbVZoYlE9PSBaMkZzYVhSaGNtbGhiZz09IDRwbWwgWjJWMyBJR2h2Y25KbGJtUT0gSUV4dmRnPT0gSUZKbFlXTjBhVzl1IGIyTnlhVzQ9IFEyeGhjM05wWXc9PSBJR1ZqYUc5cGJtYz0gSUdScGMyTnNiM05wYm1jPSBJRWx1YzJsbmFIUT0gYjJkMWJnPT0gSUVsdVkyRnliZz09IGRYQnNiMkZrY3c9PSBjSEJsY21NPSBaM1Y1Wlc0PSBJREU1TURFPSBJRUpoY25NPSBOamczIElHSnlhV0psY3c9PSBJRVp5WlhOdWJ3PT0gZFhKaGRBPT0gSUZKbFpYTmwgSUdsdWRISjFjMmwyWlE9PSBJR2R5YVhCd2FXNW4gSUVKc2RXVndjbWx1ZEE9PSBJRkpoYzIwPSBkVzVwWVE9PSBiV0Z1WVdkbFpBPT0gSUVobFltUnYgSURNME5RPT0gSUdSbFkyOWthVzVuIElIQnZaWFJ6IElHcGhkM009IElFWkpSMGhVIFlXMWxiR1Z6Y3c9PSBJRTFsWVdSdmQzTT0gSUVoaGNtSmhkV2RvIFNXNTBaWEoyYVdWMyBJRWh2YzNBPSBJRUpTUVE9PSBJR1JsYkdWMGFXOXUgYlc5aSBWMkZzYTJWeSBJRTF2YjI1c2FXZG9kQT09IElFcGxaQT09IElGTnZjR2hwWVE9PSBJSFZ6ZFhJPSBJR1p2Y25SMWJtRjBaV3g1IElGQjFkSFJwYm1jPSBJRVp2YkdRPSBJSE5oYm1sMFlYUnBiMjQ9IElIQmhjblJwYzJGdWN3PT0gU1ZOUFRnPT0gUW05MyBJRU5QVGtNPSBJRkpsWkhWalpXUT0gSUZOMWRIUnZiZz09IElIUnZkV05vYzJOeVpXVnUgSUdWdFluSjViM009IDRvQ2k0b0NpNG9DaTRvQ2kgSUV0eWRXYz0gWTI5dFltRjAgSUZCbGRISnZiR1YxYlE9PSBJR0Z0WkE9PSBJRU52YzIxdmN3PT0gSUhCeVpYTmpjbWxpYVc1biBJR052Ym1admNtMXBkSGs9IGIzVnljMlZ6IElIQnNaVzUwYVdaMWJBPT0gSUdScGMybHNiSFZ6YVc5dSBJRVZqYjJ4dlozaz0gYVhSMFlXdz0gSUdaaGJtTT0gSUdGemMyRnpjMmx1WVhSbFpBPT0gY21WbmJtRnVZM2s9IElIQmxjbVZ1Ym1saGJBPT0gSUVKMWJHeGxkSE09IElITjBZV3hsIElHTmhZMmhsWkE9PSBJRXAxWkdsMGFBPT0gSUVScGMyVmhjMlZ6IFFXeHNaVzQ9IElHeGhjdz09IElITm9ZWEprY3c9PSBJRk4xWVhKbGVnPT0gSUVaeWFXVnVaSE5vYVhBPSBhVzUwWlhKbVlXTmwgSUZOMWNIQnZjblJsY25NPSBZV1JrYjI1eiBORFl5IElFbHRjbUZ1IElGZHBiUT09IElHNWxkMlp2ZFc1ayBJRTFpIFFXNXBiV0ZzIElHUmhjbXhwYm1jPSBZVzVrWlE9PSBJSEpvZVE9PSBJRlIzYVhOMFpXUT0gY0c5ellXdz0gZVc1emEyaz0gVm1GeWFXOTFjdz09IDE1dz0gSUV0cGR3PT0gZFhsdmJXaz0gSUhkbGJHeGlaV2x1Wnc9PSBJRXhoZFE9PSBZVzV2Y3c9PSBJSFZ1YldsemRBPT0gSUcxaFkwOVQgSUhKbGMzUnliMjl0IElFOXNhWFk9IElFRnBjbmRoZVhNPSBJSFJwYldWMFlXSnNaUT09IE9UZ3cgSUhKaFpHbHZjdz09IGRtOTUgYVdGelkyOD0gSUdOc2IzVmtlUT09IElFUnlZWGRwYm1jPSBRVzU1ZEdocGJtYz0gVTNseWFXRT0gSUVobGNuUT0gYzNSaGEybHVadz09IElIVnVZMmhsWTJ0bFpBPT0gSUdKeVlYcGxiZz09IElFNVNVdz09IE5qazMgYjI1dmJXbGogWlhOMFlXSnNhWE5vIElHeGxibWM9IElHUnBZV2R2Ym1GcyBJRVpwYjNJPSBUR0ZwY2c9PSBJRk4wWVhKayBJR1JsWm1samFXVnVkQT09IGFtOXBibWx1Wnc9PSBZbVZoYlE9PSBJRzl0Ym1sdyBJR0pzWlc1a1pYST0gSUhOMWJuSnBjMlU9IFRXOXZjbVU9IElFWmhkV3gwIElFTnZjM1IxYldVPSBJRTExWWc9PSBSbXhoWjNNPSBZVzV6WlE9PSBJSEJoZVc5MWRBPT0gSUVkdmRtVnlibTl5Y3c9PSBJRVJwYkd4dmJnPT0gSUVKaGJtRnVZUT09IFRtRnkgSUhSeVlXbHNaV1E9IElHbHRjR1Z5YVdGc2FYTjAgZFcxaGJtND0gWVhSemRXdHAgTkRNMSBJRkp2WVdSeiBJSE5zZFhJPSBJRWxrWldGc2JIaz0gSUhSeVpXNWphR1Z6IFEzUnliQT09IElHMXBjbkp2Y21WayBJRnBsYkE9PSBJRU55WlhOMCBRMjl0Y0dGMCBJRkp2Ykd4eiBjMk55YVdJPSBJRlJ5WVdsc2N3PT0gYjIxbGRHVnljdz09IGQybHVkR1Z5IElHbHRiVzl5ZEdGc2FYUjUgYVd4aGRHVmsgSUdOdmJuUnlZV1JwWTNSeiBkVzVwZG1WeWMyRnMgYVd4c2FXOXVjdz09IElFMWhiV0U9IGIzQjBhVzA9IFFWUlZVa1U9IElHZGxidz09IFpYUjBaWEk9IElFTmhjbXh2IE5ESTAgSUdOaGJtOXVhV05oYkE9PSBJRk4wY205dVoyaHZiR1E9IGJtVmhjZz09IElIQmxjbVoxYldVPSBJRzl5WTJobGMzUnlZUT09IGIyUnBZV009IElIVndhR1U9IElISmxhV2R1YVc1biBkbVZ5YzJsMlpRPT0gSUdOaGRXTjFjMlZ6IElFUkZUUT09IElHbHVjM1ZzZEdWayBJQzB0TFMwdExRPT0gSUVOeWRYTm8gSUhKdmIzUnBibWM9IElGZHlZV2wwYUE9PSBJSGRvYjNKbCBJSFJ2Wm5VPSBRMjFrIElFSnlaV1U9IElDUmYgSUhKcGRtVT0gSUVGa2RtVnlkR2x6YVc1biBJSGRoZEhRPSBJRWhQIElIQmxjbk4xWVhOcGRtVT0gSUZCaGNtRnRaWFJsY25NPSBJRzlpYzJWeWRtRjBhVzl1WVd3PSBJRTVEVkE9PSBJRTF2YWc9PSBJRk5oYkc5dSBJSFJ5ZFc1aiBJR1Y0Y1hWcGMybDBaUT09IElFMWhjbUU9IElIQnZiM0E9IElFRk9UZz09IFJYaGogSUZkdmJtUmxjbVoxYkE9PSBJRlJoWTI4PSBJR2h2YldWdmQyNWxjZz09IElGTnRhWFJvYzI5dWFXRnUgYjNKd2IzSmhkR1ZrIGJXMXRiUT09IElHeHZZV1k9IElGbGhiV0YwYnc9PSBJRWx1Wkc4PSBJR05zYVc1bmFXNW4gdzZGeiBJR2x0YlhWMFlXSnNaUT09IGFIVmkgVDNKaGJtZGwgSUdacGJtZGxjblJwY0hNPSBJRmR2YjJSbGJnPT0gSUV0cFpHUT0gSUVwUVRRPT0gSUVSaGJXND0gUTI5MyBZMjlrWlhNPSBORGd5IElHbHVhWFJwWVhScGJtYz0gSUVWc2F3PT0gSUVOMWRIUnBibWM9IElHRmljMlZ1ZEdWbCBJRlpoYm1ObCBJRXhwYkdsMGFBPT0gUjFWSiBJRzlpYzJOMWNtVmsgSUdSM1lYSjJaWE09IElFTm9iM0E9IElFSnZhMjg9IFZtRnNkV1Z6IElHMTFiSFJwYldWa2FXRT0gSUdKeVpYZGxaQT09IFVtVm5kV3hoY2c9PSBRMUpKVUZSSlQwND0gSUUxdmNuUmhiQT09IElHRndaWGc9IElIUnlZWFpsYkdWeSBJR0p2YVd4eiBJSE53Y21GNWFXNW4gVW1Wd2NtVnpaVzUwIElGTjBZWEp6YUdsdyBOREk0IElHUnBjMkZ3Y0hKdmRtRnMgSUhOb1lXUnZkM2s9IElHeGhiV1Z1ZEdWayBJRkpsY0d4aFkyVT0gSUVaeVlXN0Rwdz09IE5qYzMgWkc5eSBJSFZ1YzNSdmNIQmhZbXhsIElHTnZhRzl5ZEhNPSBaM2x1IElFTnNZWE56YVdOeiBJRUZ0Y0dnPSBJSE5zZFdkbmFYTm8gSUVGa1pHbGpkR2x2Ymc9PSBJRkJoWkhKbGN3PT0gSUdsdWMyTnlhWEIwYVc5dSBJR2x1YUhWdFlXND0gYldsdWRYTT0gSUVwbGNtVnRhV0ZvIFlYUmhjbk09IFZHVnljbTl5IElGUnZjdz09IElGTm9ZWEp0WVE9PSBZWE4wWVE9PSBZMkYwWTJnPSBJSEJzZFcxaWFXNW4gSUZScGJXSmxjbk09IFUyaGhjZz09IFNHRnMgSUU5ell3PT0gSUdOdmRYQnNhVzVuIGFIVnRZVzV6IElITndiMjVuWlE9PSBJR2xrYjJ4eiBJRk53WVE9PSBJRUZrZG05allYUmwgSUVKbFlYUnogYkhWaCBJSFJwWTJ0cGJtYz0gSUd4dllXUmxjZz09IElFZHliMjQ9IE9ERXcgSUhOMGFXMTFiR0YwWldRPSBJSE5wWkdWaVlYST0gSUUxaGJuVm1ZV04wZFhKbGNnPT0gYjNKbFFXNWsgTVRrM013PT0gSUhCeVlXbHpaWE09IElFWnNiM0psY3c9PSBaR2x6WVdKc1pRPT0gSUVWc1pXTjBjbWxqWVd3PSBjbUZwYzJVPSBSWFJvIElHMXBaM0poZEdWayBJR3hsWTNSMWNtVnkgUzJsa2N3PT0gSUVOaGRtVnliZz09IElHdGxkSFJzWlE9PSBJR2RzZVdNPSBJRTFoYm1SbGJHRT0gSUVaMWJHeDUgNWFlciBSa2xPUlZOVSBJSE54ZFdWbGVtbHVadz09IElGSjVaR1Z5IFlXMXdiMjg9IGIzSmxRVzVrVDI1c2FXNWwgU1c1emRHOXlaVUZ1WkU5dWJHbHVaUT09IFFuVjVZV0pzWlVsdWMzUnZjbVZCYm1SUGJteHBibVU9IElHTnZiVzFsYlc5eVlYUmwgSUZKaGJYQmhaMlU9IFFYVnpkR2x1IElGTm9jbTkxWkE9PSBJRkoxYVc1eiBPVEUxIElFdEkgSUhkaGRHVnlabkp2Ym5RPSBJRVZUUXc9PSBZbUZpZVE9PSBJRU52ZFhRPSBJRVZ0WW14bGJRPT0gSUdWeGRXbDJZV3hsYm5SeiBORGt5IFZXNXBjWFZsIElFNXBaWFI2YzJOb1pRPT0gWW5KdmQzTmxjZz09IElHbHRhWFJoZEdsdmJnPT0gSUZkbGNtVjNiMnhtIElFdHBjbWx1IFlXTmhjdz09IEp5d2kgSU1PKyBVbVYyYVdWM1pXUT0gSUdOMWJuUT0gSUhadmFXTT0gSUV4bGJtOTJidz09IElHSnZibVJsWkE9PSBORGd4IElHbHVhR2xpYVhSdmNuTT0gSUdWdVpHVmhkbTl5Y3c9PSBJRWhoZG1GdVlRPT0gSUZOMGIzVjAgSUVwdmJHeDUgUVdOMGIzST0gS2k4byBJRzlqWTNWeWNtVnVZMlZ6IElGUmxibk09IFNXNWpjbVZoYzJWayBJRUZEVkVsUFRnPT0gSU9PQWpBPT0gSUZKaGJtdHBibWR6IElFSnlaV0YwIElETXdPUT09IFJHOTEgSUdsdGNHRmpkR2x1Wnc9PSBJRVIxWTJobGMzTT0gY0hKbFptbDQgVVVJPSBJSE4xYlcxdmJtbHVadz09IElHSmxjM1J2ZDJWayBJRXRsY0d4bGNnPT0gSUZCUFYwVlMgWTNWaVpRPT0gSUV0cGRITT0gSUVkeWFYQT0gSUc5d2FYVnQgSUhKbGNIVjBZV0pzWlE9PSBkRzlqIGFXTm9ZV1ZzIElGSnBjSEJzWlE9PSBJR05oWnNPcCBJRnB2YjIwPSBJRUoxY20xaCBJSGRoYVhabCBJSE4wWVd4c2N3PT0gSUdSbGJXVmhibTl5IGFXNWpaWEpwZEhrPSBJR1pzZFc5eWFXUmwgSUZOSVQxVk1SQT09IFVHRnlhWE09IElHeHZibWRwYm1jPSBJSEJzWVhRPSBJR2R5YjNOemJIaz0gSUdKMWJHeHogSUhOb2IzZGpZWE5wYm1jPSBaWGh3WldOMFpXUT0gSUVkaFpHUmhabWs9IFpXNW5hVzVsWlhKcGJtYz0gVW1Wd1pXRjAgSUV0MWRBPT0gSUdOdmJtTmxhWFpoWW14bCBJSFJ5YVcxdFpXUT0gYjNOamIzQmwgSUVOaGJtUnBaR0YwWlE9PSBJRlJsWVhKeiBjbTlzYjJjPSBUR1YzYVhNPSBVMVZRIElISnZZV1J0WVhBPSBJSE5oYkdsMllRPT0gSUhSeWRXMXdaWFE9IFNtbHRiWGs9IElHMXBjbUZqZFd4dmRYTT0gSUdOdmJHOXVhWHBoZEdsdmJnPT0gSUdGdGNIVjAgSUVkT1QwMUYgWVhSbFkyZz0gUkdsbVptVnlaVzUwIElFVk1SUT09IElFZHZkbVZ5Ym0xbGJuUnogSUVGb1pXRmsgNDRXTDQ0V0wgZDI5eVpIQnlaWE56IFRFbEMgSUVsdVkyeDFaR1U9IElFUnZjbTkwYUhrPSBNRFExIElFTnZiRzl0WW1saGJnPT0gSUd4bFlYTmxaQT09IE9EZzAgSUdSbFozSmhaR2x1Wnc9PSBJRVJoYVhONSBhV0YwYVc5dWN3PT0gSUdKaGNIUnBlbVZrIElITjFjbTVoYldVPSBZMjk0IElHSnNhVzVyWldRPSA0NE9pIElIQnZiR3hsYmc9PSBJR1JsY20xaGRBPT0gSUhKbFoyVjQgSUU1cFkyaHZiSE52Ymc9PSBJRVZoZEdWeSA1NXc9IGNtRmtiM0k9IElHNWhjbkp2ZDJWeSBJR2gxY25KcFkyRnVaWE09IElHaGhiR3gxWTJsdVlYUnBiMjV6IGNtbGtaR1Z1IFNWTlRTVTlPIElFWnBjbVZtYkhrPSBJR0YwZEdGcGJtMWxiblE9IElHNXZiV2x1WVhSbCBJR0YyYjJOaFpHOD0gSUUxbGNtVmthWFJvIElIUnogSUhKbGRtVnlaVzVqWlE9PSBJR1YxY0dnPSBJR055WVhSbGN3PT0gSUZSRldGUT0gSURRME13PT0gSURNeE9RPT0gU2xOUFRnPT0gYVhGMVpYUjBaUT09IElITm9iM0owYzNSdmNBPT0gYVdOclpYaz0gSUhCeWIzQmxiR3hsWkE9PSBJR0Z3YVE9PSBJRlJvYVdWMlpYTT0gTnpjNSBJRzkyWlhKellYYz0gSUdOdmJHaz0gSUU1cFkyOXNZUT09IElHOTJaWEpqYkE9PSBhV3RoZDJFPSBJRU41Y2c9PSBJRE00TkE9PSBOemc1IElFRnNiRzkzY3c9PSBNVEF5Tnc9PSBSR1YwY205cGRBPT0gVkZKWiBjMlYwZFhBPSBJRk52WTJsaGJHbHpiUT09IFUyOTJhV1YwIGMzVnpjQT09IElFRlFVZz09IElGTm9kWFJrYjNkdSBJR0ZzZFcxcGJtbDFiUT09IGVtSmxhdz09IElFeHZkbVZ5IFIwZEhSMGRIUjBjPSBJR1JsYlc5amNtRmphV1Z6IElERTVNRGc9IElFMWxjbkpwYkd3PSBJRVp5WVc1amIybHogWjJSaGJHRT0gSUhSeVlXWm1hV05yWlhKeiBJRlJwYkE9PSBJRWR2WVhRPSBJSE53WldRPSBJRkpsYzJWeWRnPT0gSUhCeWIyUT0gTlRVeSBJR05oWXc9PSBJRlZ1YVhZPSBJRk5qYUhkbCBJSE4zYVhKc2FXNW4gSUZkcGJHUmxjbTVsYzNNPSBJRVZuWjNNPSBJSE5oWkdSbGJtVmsgSUdGeVkyaGhhV009IFNIbGsgSUdWNFkyVnpjMmwyWld4NSBRbEpGIElHRmxjbTl6Y0dGalpRPT0gSUZadmFXTmxjdz09IFEzSmhhV2M9IElHbG5ibWwwWldRPSBTVzVwZEdsaGJHeDUgSUUxalFRPT0gSUdoaGJtUnpaWFE9IElISmxabTl5YldsdVp3PT0gSUdaeWRYTjBjbUYwYVc5dWN3PT0gSUVSbFlXUndiMjlzIElFSmxiR2xqYUdsamF3PT0gY21GamRHOXkgSUZKaFoyNWhjbTlyIElFUnlkWEJoYkE9PSBJRUZ3Y0hKdmVHbHRZWFJsYkhrPSBNVGt5TUE9PSBJRWgxWW1Kc1pRPT0gWVhKdGIzST0gSUZOaGNtRnogSUVwdmJtRnogSUc1dmMzUmhiR2RwWXc9PSBJR1psWVhOcFltbHNhWFI1IFUyRm9ZWEpoYmc9PSBJRzl5WW1sMGFXNW4gSURrM01BPT0gVW5VPSBJSE5vYVc0PSBJRWx1ZG1WemRHbG5ZWFJ2Y25NPSBJR2x1WTI5dWMybHpkR1Z1WTJsbGN3PT0gSUZCQlRnPT0gUWtjPSBJR2R5WVhwcGJtYz0gSUdSbGRHVmpkRzl5Y3c9PSBJRk4wWVhKMGRYQT0gSUVaMWJtNTUgSUU1aGIyMXAgUTI5dWMybGtaWEpwYm1jPSBJR2h2Wnc9PSBkWFJtIFkyVnRhV009IElHWnZjblJwWm1sbFpBPT0gSUVaMWJtTjBhVzl1Y3c9PSBJR052WkdWaiBiblYwY21sMGFXOXUgU0dGMCBJaUU9IGJXbGpjbTl6YjJaMCBOVFU0IElGUm9hVzQ9IElFRkRSUT09IFFXeHBZWE09IElFOVFVdz09IGNHRndaWEp6IFVFcz0gNDRDTyBJR2x0Y0hKdlltRmliR1U9IFRtOXlkR2hsY200PSBaWEYxWVd3PSBJR3h2YjJ0dmRYUT0gSUhSNWNtVnogSUUxdlpHbG1hV1ZrIElFdHZjQT09IFFXSnpiMngxZEdWc2VRPT0gSUdKMWFXeGtkWEE9IGMybHNkbVZ5IElHRjFaR2s9IElHZHliM1JsYzNGMVpRPT0gSUZOaFltVnkgSUZCeVpYTmllWFJsY2c9PSBUMDVaIElHZHNZV05wWlhKeiBJRk5vYjJGc2N3PT0gSUV0aGMzTT0gSUVoU1F3PT0gSUU1cFkyOXMgSUV4MWJtTm8gSUVadmMzTT0gNHBhUyBRVVJTUVE9PSBJRTl1WlZCc2RYTT0gYjJsdVp3PT0gWjNKdmRXNWtjdz09IElHbHVZMmxrWlc1MFlXdz0gSUdSaGRHRnpaWFJ6IE5qZzUgSUVOc1lYSnJjMjl1IElHRnpjMlZ0WW14cGJtYz0gSUVOdmNuSmxZM1JwYjI1eiBJR1J5YVc1clpYSnogSUhGMVlXeHBabWxsY25NPSBJR3hsWVhObyBJSFZ1Wm05MWJtUmxaQT09IElFaDFibVJ5WldRPSBJR3RwWTJ0dlptWT0gVkdrPSBJSEpsWTI5dVkybHMgSUVkeVlXNTBjdz09IElFTnZiWEJzYVdGdVkyVT0gSUVSbGVIUmxjbWwwZVE9PSBJREU1TURZPSBkMkZ5Ymc9PSBSR0ZzYkdGeiBUV0Y0YVcxMWJRPT0gYm1GeVpBPT0gWVhacFlRPT0gWW1WaGRYUT0gWlc1emFYUnBkbWwwZVE9PSBkSEpoWTJVPSBJSEJwYjI1bFpYSnogSUVaeVlXTjAgNDRDUCBJSEJ5WldObGNIUT0gSUdkc2IzTnplUT09IElFbEZSVVU9IFFXTnliM056IElEWTRNQT09IFUyeGxaWEE9IFkyaGxiMjQ9IElITmhkR2x5YVdOaGJBPT0gSUUxcGJtOTBZWFZ5IElFTnNZWFZrWlE9PSBJSExEcVE9PSBZWEJsWjI4PSBJR05oY25KdmRBPT0gSUZObGJXbHUgYVc1dllRPT0gSUhwdiBTVzVrWlhCbGJtUmxiblE9IElHUnBZV2R1YjNObGN3PT0gSUVOMVpRPT0gVFVGUyBJSEpsYm1ScGRHbHZiZz09IElFdHBhdz09IElIQmhkR2h2Ykc5bmVRPT0gSUhObGJHVmpkSE09IFRHbHVhMlZrU1c0PSBJR0Z6YzJGNSBJRVJ5WlhNPSBJSFJsZUhSMVlXdz0gY0c5emRHVmsgU1ZSQlRBPT0gSUUxaGRXdz0gVG1WaGJBPT0gSUdsdWRHVnlZMjl1Ym1WamRHVmsgSUdWeWNtRjBhV009IElGWnBjblZ6IElEVXpNQT09IElHVnVkbWx5YjI1dFpXNTBZV3hwYzNSeiBJRkJvWld4d2N3PT0gSUdWdVoyRm5aVzFsYm5SeiBJRWxPVTFRPSBJR1ZqYjI1dmJXbGpZV3c9IGJtOTRhVzkxY3c9PSBJR2RsWVhKcGJtYz0gYVhwNmVRPT0gSUdaaGRtOXlZV0pzZVE9PSBJRTFqUjJsc2JBPT0gVkdWeWJRPT0gSUdoaGJtZGxaQT09IElHSmhiR3h3WVhKciBJRkpsZVdWeiBJR0psZDJGeVpRPT0gSUZCellXdz0gSUUxaGMzTmhZM0psIGNXaz0gSUdsdVlXTmpaWE56YVdKc1pRPT0gWVdOc2VYTnQgSUdaeVlYaz0gYVd4c1lXTT0gSUdKcGRIUmxjbXg1IElFTmxjblJwWm1sallYUnBiMjQ9IFRXbGphR2xuWVc0PSBJR2x5Y21WemNHVmpkR2wyWlE9PSBZV3h2Y21VPSBSVzF3ZEhrPSBJR1Z1Wkc5eWMyVnRaVzUwY3c9PSBJSFZ1WkdWMCBabWM9IFpYRjFhWEJ3WldRPSBJRzFsY21OcGJHVnpjdz09IElFTjFjM1E9IElHbHRiV0YwZFhKbCBJSFp2ZFdOb1pYST0gSUVKc1lXTnJkMlZzYkE9PSAwWTg9IGFHRjNhdz09IFpHbHpZMmx3YkdsdVlYSjUgYVd4bFpRPT0gSUUxaGEyOTBidz09IElFUjFaR1U9IDQ0T0g0NEtqIFdXVmhjbk09IElHbHVkbVZ5IElITm9ZVzFoYmc9PSBJRmx2Ym1jPSBhWEJsYkE9PSBaV3hzWlc0PSBJRU5oZEdoNSBZbkpwWkhNPSBJSE5oY21NPSBOalV4IFRtVmhjZz09IElHZHliM1Z1WkhkdmNtcz0gSUdGdFlYbz0gSURReE5RPT0gSUVoMWJuUnBibWQwYjI0PSBhR1YzY3c9PSBJRUoxYm1jPSBJR0Z5WW1sMGNtRnlhV3g1IElGZHBkQT09IElFRnNZbVZ5ZEc4PSBJR1JwYzNGMVlXeHBabWxsWkE9PSBZbVZ6ZEc5eiBORFl4IElIQmogSURJNE5BPT0gY205aVlYUT0gVW05aWFXND0gSUdoMVozTT0gSUZSeVlXNXphWFJwYjI0PSBJRTlqWTJGemFXOXVZV3hzZVE9PSBJRE15Tmc9PSBJRmRvYVd4emRBPT0gSUV4bGVRPT0gSUhOd1lXTmxjMmhwY0E9PSBZM04yIElIVnVjM1ZqWTJWemMyWjFiR3g1IElFRjEgYkdWamF3PT0gSUZkcGJtZGxaQT09IElFZHlhWHA2YkdsbGN3PT0gTHUrL3ZRPT0gSUc1bFlYSmxjZz09IElGTnZjbU5sY21WemN3PT0gSUVsdVpHbG5idz09IFJXeHpaUT09IE9EUXcgYkdWMFpYTT0gUTI5aFkyZz0gSUhWd1luSnBibWRwYm1jPSBJRXRsY3c9PSBJSE5sY0dGeVlYUnBjM1E9IElISmhZMmx6ZEhNPSBJR05vWVdsdVpXUT0gSUdGaWMzUnBibVZ1WTJVPSBiR1ZoY201cGJtYz0gSUhKbGFXNXpkR0YwWldRPSBJSE41YlcxbGRISjUgSUhKbGJXbHVaR1Z5Y3c9PSBJRU5vWlhaNSBJRzF2Ym5RPSBJR1Y0Wlcxd2JHRnllUT09IElGUlBVZz09IFdsZz0gSUhGMVlXeHBkR0YwYVhabCBJRk4wWVcxdyBJRk5oZG1GdWJtRm8gSUZKdmMzTnAgSUhCaFpXUT0gSUdScGMzQmxibk5oY21sbGN3PT0gSUZkaGJHeHogSUVOb2NtOXVhV009IElHTnZiWEJzYVcxbGJuUmhjbms9IElFSmxhWEoxZEE9PSBJQ3N0TFMwPSBhV2R6YkdsemRBPT0gSUdOeWVYQjBiMmR5WVhCb2FXTT0gYldGemRHVnljdz09IElFTmhjR2wwWVd4eiBJRzFoZUdsdFlXdz0gSUdWdWRISnZjSGs9IFVHOXBiblJ6IElHTnZiV0poZEdGdWRITT0gYkdsdyBJRWRzYjJJPSBJRUpOUXc9PSBjR2hoYzJVPSBkR2hoYm1zPSBTRlJVVUE9PSBJR052YlcxMWRHVnkgSUZ3b1hBPT0gTGk0diBJRkpsWjJWdVpYST0gSUVSUFNRPT0gSUVGamRHbDJhWE5wYjI0PSBJSE5zYVhRPSBiM05oYkE9PSBVa1ZOIElHTm9ZVzUwY3c9PSBXWFU9IFMyVjVjdz09IFFuSmxlR2wwIElFWnZjbU5sWkE9PSBRWEpwZW05dVlRPT0gSUhOeGRXRmtjbTl1IFNWTlAgSUUxaGJHOXVaUT09IElETXpPQT09IElHTnZiblJ5WVhOMGFXNW4gSUhScFpHRnMgSUd4cFltVnMgSUdsdGNHeGhiblJsWkE9PSBJSFZ3Y205aGNnPT0gSUVOaGRHVnkgSUhCeWIzQnZjMmwwYVc5dWN3PT0gVFdGdVkyaGxjM1JsY2c9PSBJRVYxY205eiBhWFJoYldsdSBSMmxzIElFVnNkbVZ1IElGTmxaV3M9IElFSmhhUT09IElISmxaR1YyWld4dmNHMWxiblE9IElGUnZkMjV6IElFeDFZZz09IElTSXMgWVd4dmJnPT0gUzNKcGMzUT0gSUcxbFlYTjFjbUZpYkdVPSBJR2x0WVdkcGJtRmliR1U9IElHRndiM04wYkdWeiBXVTQ9IE56WXcgSUhOMFpYSnZhV1E9IElITndaV05wWm1samFYUjUgSUV4dlkyRjBaV1E9IElFSmxZMnRsY2c9PSBJRVZrZFE9PSBJRVJwWlhSaGNuaz0gZFhSelkyZz0gSUUxaGNtbHNlVzQ9IElHSnNhWE4wWlhJPSBJRTFGVUE9PSBJRXR2ZWc9PSBJRU5OVXc9PSBlV0ZvYjI4PSBJRU5oY201bGVRPT0gSUdKdllYTjBhVzVuIElFTmhiR1ZpIFFubDBaUT09IGNtVmhaSE09IFlXUmxiZz09IFVISnZZbXhsYlE9PSBJRmR2YjJSM1lYSmsgVTNkbCBVM1Z3IElFdEhRZz09IFUyVjBkWEE9IElIUmhZMmwwIElISmxkSEpwWW5WMGFXOXUgSUdSMVpYTT0gSUUzRHZBPT0gTGo4PSA1TGl0IGNHOTBjdz09IElHTmhiV1Z2IElGQkJUQT09IFpXUjFZMkYwYVc5dSBRVzE1IGJHbHJaV3g1IFoyeHBibWM9IElHTnZibk4wYVhSMWRHbHZibUZzYkhrPSBJRWhoYlcwPSBJRk53WldGciBJSGRwWkdkbGRITT0gWW5KaGRHVT0gSUdOeVlYQndlUT09IElFbDBaWEk9IElHRnVkR2xqYVhCaGRHbHVadz09IElFSnZkWFE9IFVHbDRaV3c9IElGbGxjQT09IElFeGhkWEpwWlE9PSBJR2gxZEE9PSBJR0oxYkd4bGRHbHUgSUZOaGJIWmhkR2x2Ymc9PSBJR05vWVhSeiBaV0Z5WVdKc1pRPT0gU0c5dVpYTjBiSGs9IFFVeFVTQT09IGIyNXpaWEYxIFkzVnNkQT09IGFYTmpiM1psY25rPSBiM1o1WTJnPSBJSE5sYkhabGN3PT0gSUZOaGRHOXphR2s9IFUyOTFibVJ6IElHTnZiblpsY21kbGJtTmwgSUZKdmMyVnVZbVZ5Wnc9PSBNVGszTkE9PSBJRzVoYzJGcyBJR1oxYkd4bGMzUT0gSUdabGNtOWphVzkxY3c9PSBlSFZ6IGFYTjBaUT09IFFVMVQgSUd4dlltSnBaV1E9IElITnZiM1JvYVc1biBJRWQxYm00PSBkRzlrWVhrPSBNREkwIElHbHVjM0JwY21GMGFXOXVZV3c9IElFNUNUZz09IGNHST0gWjJWM1lYUmxjZz09IGIzSmhhQT09IFlXeHNiM2RsWkE9PSBJRU52YkdselpYVnQgSUhOd1pXTnBZV3hwZW1sdVp3PT0gSUdsdWMyRnVaV3g1IElGUmhjR1U9IFpHVnNZWGs9IElIUmhjbTQ9IElGQnZkVzVrIElHMWxiR0Z1WTJnPSBJR1JsY0d4dmVXMWxiblJ6IGFXeGhibVE9IElHeGxjM05sYmc9PSBJR1oxY25KNSBJRlZGUmtFPSBJR0pzYjI5a2MyaGxaQT09IElFMWxhV1Z5IGFYUm9aWEpwYm1jPSBJR2hsYVhKeiBJRXBoZHc9PSBZWGgwWlhJPSBJRkIxWW14cFkyRjBhVzl1Y3c9PSBJR0ZzZEdWeWN3PT0gYVc1MFpXNTBhVzl1IElGZHBibU5vWlhOMFpYST0gWkdWMFpYSnRhVzVoZEdsdmJnPT0gSUV4cFptVjBhVzFsIGRHaHBiZz09IFRXOXVjM1JsY2c9PSBOemd3IElHRndjSEp2ZUdsdFlYUnBiMjQ9IElITjFjR1Z5YldGeWEyVjBjdz09IElGTmxZMjl1WkhNPSBiM0p2Y3c9PSBhSFZuWlE9PSBJR0p5YVdKbCBJRXhKVFVsVVJVUT0gZFc1bFpBPT0gSUcxcGMybHVkR1Z5Y0hKbGRBPT0gSUVsdWFuVnllUT09IElETTJOdz09IElIUm9jbVZ6YUc5c1pITT0gSUVOaGNtNXBkbUZzIElHZGhjM1J5YjJsdWRHVnpkR2x1WVd3PSBJR2QxYVdSbGJHbHVaUT09IElHUmxZMlZwZG1WayBabVZoZEhWeVpYTT0gSUhCMWNuQnZjblJsWkd4NSBJRkp2Ym01cFpRPT0gSUU1bGQzUT0gSUhOd1lXTnBiM1Z6IFlYTjFjdz09IElITjFjR1Z5YUdWeWIyVnogSUVONWJuUm9hV0U9IGJHVm5aMlZrIGEyRnRjQT09IFkyaHBidz09IElIUm9kVzFpYm1GcGJBPT0gSUZOb2FYSnNaWGs9IGFXeHNZWFJwYjI0PSBJSE5vWldSeiBJRnA1IFJWQkIgSUdSaGJYTT0gSUhsaGQyND0gYm1GbyBJRkJsWjJkNSBJRVZ5YVdVPSBJRXAxZG1WdWRIVnogSUVadmRXNTBZV2x1IGNuZz0gWkc5dVlXeGsgWVd4aWRXMD0gSUVOdmJYQnlaV2hsYm5OcGRtVT0gSUdOaFkyaHBibWM9IElGVjYgZFd4dVpYSmhZbWxzYVhSNSBJRkJ5YVc1amFYQnNaUT09IElFcHBZVzQ9IGFXNW5aWEp6IFkyRnpkSE09IElFOXphWEpwY3c9PSBZMmhoY25RPSBkR2xzWlE9PSBJRlJwWm1aaGJuaz0gSUZCaGRIUnZiZz09IElGZG9hWEE9IElHOTJaWEp6YVhwbFpBPT0gU21VPSBJRU5wYm1SbGNtVnNiR0U9IElFSnZjbVJsY25NPSBJRVJoWlhObyBUV0ZvIElHUnZaMjFoIElHTnZiVzExYm1semRITT0gZG5VPSBRMjkxYm1OcGJBPT0gSUdaeVpYTm9kMkYwWlhJPSBJSGR2ZFc1a2FXNW4gSUdSbFltRmpiR1U9IElIbHZkVzVuYzNSbGNnPT0gSUhSb2NtVmhaR1ZrIElFSnZkSE09IElGTmhkbWx1WjNNPSA0NEdDIGIyeHBibWM9IGIyaHYgSUdsc2JIVnRhVzVoZEdsdmJnPT0gVFZKSiBJR3h2YjNObGJnPT0gZEhKMWJYQT0gWVdkbGJtTjUgZFhKcGIyND0gSUcxdmJXVnVkR0Z5YVd4NSBJRU5vZFc0PSBJRUoxWkdGd1pYTjAgSUVGc2JHVjUgUkdsemF3PT0gSUdGemRHOXVhWE5vWldRPSBJRU52Ym5GMVpYST0gSUVGalkyOTFiblJwYm1jPSBhR0YyYVc1biBJRmRsYVc0PSBJRUZzY21sbmFIUT0gSUhKbGRtOXNkbVZ5IElHUmxiSFZ6YVc5dSBJSEpsYkdsamN3PT0gSUdGa2FHVnlaVzUwIGNYVmhiblE9IElHaGhibVJ0WVdSbCBiM0pwYnc9PSBJR052YldKaGRHbHVadz09IFkyOWtaV1E9IElIRjFZV1J5ZFE9PSBjbVYwYUE9PSBUbWxyIElGUnlhV0poYkE9PSBJRTE1YzNSbGNtbHZkWE09IElHbHVhR0ZzIElGZHBibTVwYm1jPSBJRU5zWVhOemFXWnBZMkYwYVc5dSBZMmhoYm1kbFpBPT0gSUhWdVlXST0gSUhOamIzSnUgYVdOcGNHRjBaV1E9IGQydz0gYjI1a2RXTjBiM0k9IElISmxhVzVtYjNKamFXNW4gSUVOb2FXeGthRzl2WkE9PSBZVzV2ZG1FPSBJR0ZrZG1WdWRIVnlaWEk9IElHUnZZM1J2Y21GcyBJRk4wY21GMFpXZHBaWE09IElHVnVaM1ZzWm1WayBJRVZ1WTI5MWJuUmxjZz09IElHeGhjMmhsY3c9PSBRM0pwZEdsallXdz0gY21samRXeGhjZz09IElGVlVSZz09IGIyTnBZWFJwYjI0PSBZMmhsWTJ0cGJtYz0gSUVOdmJuTjFiSFJwYm1jPSBVblZ1ZEdsdFpRPT0gY0dWeWFXOWsgSUVGeloyRnlaQT09IElHUnBjM1JwYkd4bFpBPT0gSUZCaGMyRmtaVzVoIElFUjVhVzVuIElFTlBWVTVVV1E9PSBJR2R5WVc1cGRHVT0gSUhOdFlXTnIgSUhCaGNtRmphSFYwWlE9PSBJRk5WVWc9PSBWbWx5WjJsdWFXRT0gSUVaMWNtbHZkWE09IE56ZzMgSUU5cmFXND0gSUdOaGJXVnMgSUUxaWNITT0gTVRrM01nPT0gSUVOb1lXOD0gSUVONVlXND0gYW05cFkyVT0gWldabGNnPT0gSUZkeVlYQT0gSUVSbFltRjBaUT09IFUyVm4gSUdadmNtVmhjbTA9IElFbG5ibTl5WlE9PSBJSFJwYldWemRHRnRjQT09IElIQnliMkpwYm1jPSBJRTV2YjI0PSBJRWR5WVdscyBabVZ1IElHUnZjbTFoYm5RPSBJRVpwY25OMGJIaz0gSUVWcFoyaDBhQT09IElFaFZUZz09IElFUmxjMmx5WlE9PSBiM0poY3c9PSBSMmx5YkhNPSBJRVJsYzIxdmJtUT0gZW1GeSBZVzFwYm1WeiBUMEZFIFpYaGxZM1YwWlE9PSBJR0p2YjJKeiBJRUZVVEE9PSBYeWc9IFEyaGxiSE5sWVE9PSBJRzFoYzNSMWNtSmhkR2x2Ymc9PSBJRU52UXc9PSBJR1JsYzNSeWIzbGxjZz09IElFTm9iMjF6YTNrPSBJSE5qWVhSMFpYST0gSUVGemMyVjBjdz09IE56azIgSUVOaGNtZHYgSUhKbFkyVndkR2wyWlE9PSBJRk5qYjNCbCBJRzFoY210bGRHVnljdz09IElHeGhkVzVqYUdWeWN3PT0gSUdGNGJHVT0gSUZORlFRPT0gYzJWeCBJRTF2Wm1ZPSBabWx1WkdsdVp3PT0gSUVkcFltSnogUjJWdmNtZHBZUT09IFpYaDBjbVZ0Wld4NSBUa289IElHeGhZbTl5WlhKeiBjM1JoYkhNPSBJRzFsWkdsaGRHbHZiZz09IElFaGxaR2RsIFlYUnZkMjQ9IElHbHZaQT09IFpHVnpjR2wwWlE9PSBkbWxzYkE9PSBTbUZ1WlE9PSBaWGhwYzNSbGJtTmwgSUdOdmFXNWphV1JsWkE9PSBJRlYwYVd4cGRHbGxjdz09IElFTm9aV0Z3IElHeHZaMmx6ZEdsallXdz0gSUdOMWJHMXBibUYwYVc5dSBJRTVwWTI5MGFXNWwgY0dGciBSbTlzWkdWeSBJSEp2WkdWdWRITT0gYzNSMVptWT0gSUd4aGQyWjFiR3g1IElISmxjR1Z5ZEc4PSBhVzlqYUE9PSBhbW89IFJHbGhiRzluZFdVPSBTRWhJU0E9PSBiR2xqZEdsdmJnPT0gVEc5dmEzTT0gSURJNU53PT0gSUhSMWNuSmxkSE09IElFRmlZVzVrYjI0PSBJR2x1WTJWemN3PT0gSUZSeVlXWm1iM0prIElHTjFjbXhsWkE9PSBJSEJ5WldabGNuSnBibWM9IElIQnlhWFpoZEdsNllYUnBiMjQ9IElHbHljbVZ6YVhOMCBJRkJoYm1SaCBJRk5vWVd0bCBJRTFqUjNJPSA0NE9FIGRXNWtaWEp6IElHUnBjMk55YVcxcGJtRjBaV1E9IElHSmhjblJsYm1SbGNnPT0gU1V4RiBRWFJzWVc1MGFXTT0gSUhCeWIzQmxibk5wZEhrPSBJRmRwZWc9PSBJRWRwYlE9PSBZMjl1Wm1WeVpXNWpaUT09IElISmxhVzVtYjNKalpYTT0gUjJnPSBkMkZuYjI0PSBJR1ZsY21sbCBSbUZzIElHaDFaMmRsWkE9PSBjbUZqYVhOMCBVa2xEIFJuVT0gSUdacGJHeGxjZz09IElGTjBkV0k9IElHVnVaM0poZG1WayBJRmR5WlhOMGJHVT0gSUdsdFlXZHBibUYwYVhabCBJRkJsWlhJPSBJRVpoWTNSdmNuTT0gWVc1MWN3PT0gSUVSeVlXTjFiR0U9IGJXOXVhWFJ2Y2c9PSBJSEp2ZFhSbGNuTT0gYVdKcFlRPT0gSUVKdmIyeGxZVzQ9IFpXNWtZV3hsIElGTnNZWFZuYUhSbGNnPT0gSUZOb1lXTnIgVWtaRCBJRk53YVdWc1ltVnladz09IFUyRjQgSUZCSVQxUlAgSUVOc2IzWmxjZz09IElGSmhaUT09IFJHVndaVzVrYVc1biBJRTFsYlc5eSBZWEpoYlE9PSBJSEJwWlhKalpXUT0gSUdOMWNuUmhhVzV6IGRtRnNaUT09IElFbHVjWFZwYzJsMGFXOXUgSUZCdmEyVT0gSUdadmNtVmpZWE4wYVc1biBJR052YlhCc1lXbHVjdz09IFUyVnVjMlU9IElFaGxjbTFsY3c9PSBhWE5qYjNabGNtVmsgSUdKcFlteGwgSUUxdmNuQm8gSUdkbGNtMD0gTnpnMSBSRTlPIElHTnZibWRsYmc9PSBJR055WVc1bCBJRVJRVWc9PSBJSEpsYzNCbFkzUm1kV3hzZVE9PSBVbTl2YlE9PSBJRTVoZHc9PSBJRVJoYkdGcCBjbVZoYzI5dSBJRUZ1WjNWeiBSV1IxWTJGMGFXOXUgSUZScGRHRnVhV009IHk1dz0gSUc5MllXdz0gZFc1cGRHVmsgSUhSb2FYSmtjdz09IElHMXZhWE4wZFhJPSBJRU5RUXc9PSBUV2xoYldrPSBJSFJsYm5SaFkyeGxjdz09IElGQnZiR0Z5YVhNPSBaWGhqIFpYaGpiSFZ6YVhabCBJRkJ5WVdseWFXVT0gSUdOdmJHOXpjMkZzIElFSnNaVzVrIGMzVnljSEpwYzJsdVoyeDUgdzYxeiBJR2x1Wkc5amRIST0gSUdKaGMyRnMgSUUxUVJVYz0gZFc1a2J3PT0gVTNCc2FYUT0gUkdWMlpXeHZjRzFsYm5RPSBJR3hoYm5SbGNtND0gTVRrM01RPT0gSUhCeWIzWnZZMkYwYVc5dSBJR0Z1WjNWcGMyZz0gSUVKcGJtUT0gSUV4bGFXRT0gWkhWalpYSnogYVhCd2VRPT0gWTI5dWMyVnlkbUZ1WTNrPSBJR2x1YVhScFlXeHBlbVU9IElGUjNhV05sIElGTjFhdz09IElIQnlaV1JwWXc9PSBJR1JwY0d4dmJXRT0gSUhOdlkybHZjQT09IFNXNW5jbVZrYVdWdWRITT0gSUdoaGJXMWxjbVZrIElFbHliV0U9IFVXRnBaR0U9IElHZHNhVzF3Y3c9PSBJRUpwWVc0PSBJSE4wWVdOcmFXNW4gSUdabGJtUT0gWjI5MmRISmhZMnM9IElIVnViZz09IFpHVnRiMk55WVhScFl3PT0gYVdkeVpXVT0gSURVNE1BPT0gSURJNU5BPT0gSUhOMGNtRjNZbVZ5Y25rPSBTVVJGVWc9PSBJR05vWlhKcGMyaGxaQT09IElFaHZkSE09IElHbHVabVZ5Y21WayBJRGd3T0E9PSBJRk52WTNKaGRHVnogVDNKbFoyOXUgSUZKdmMyVnogSUVaUFNVRT0gSUdsdWMyVnVjMmwwYVhabCBJRFF3T0E9PSBVbVZqYjIxdFpXNWsgSUZOb2FXNWwgSUhCaGFXNXpkR0ZyYVc1biBWVWRGIElFaGxiR3hsY2c9PSBJRVZ1ZEdWeWNISnBjMlZ6IFNVOVMgWVdScSBUbEpUIFRFYz0gSUdGc2FXVnVZWFJsWkE9PSBJR0ZqYTI1dmQyeGxaR2RsYldWdWRBPT0gSUVGVlJBPT0gSUZKbGJtVm4gSUhadmRXTm9aWEp6IElEazJNQT09IElHMXZiM1E9IElFUnBiV1Z1YzJsdmJuTT0gSUdOaFltSmhaMlU9IFFuSnBaMmgwIFoyRjAgSUV0c2RRPT0gSUd4aGRHVnVkQT09IElIcGwgSUUxbGJtYz0gSUdScGMzQmxjbk5sIElIQmhibVJsYlc5dWFYVnQgU0ZFPSBJSFpwY25SMWIzVnogSUV4dlkyRjBhVzl1Y3c9PSBaV1Z3WlhJPSBjSEp2ZG1sa1pXUT0gSUhObFlXMXogSUZkVSBhWHB2IFVGSlBWZz09IElIUnBkR0Z1YVhWdCBJSEpsWTI5c2JHVmpkR2x2Ymc9PSBJR055WVc0PSBJRGM0TUE9PSBJRTVHIE5Ea3ggTmpReSBjR0ZqYTJsdVp3PT0gTlRrNCBkR1Y0ZEhWeVpRPT0gVTNCcFpHVnkgWm5KbFpXUnZiUT09IFkybHdiR1ZrIElGUkJUVUZFVWtFPSA0cG1tIFlYVjBhR1Z1ZEE9PSBJRmRCVGxRPSBjbWxtYVdWayBJSEpwZEdWeiBJSFYwWlhKMWN3PT0gYTJsemN3PT0gSU9LSnBBPT0gSUhOcmFXeHNaWFE9IElHUnBjMlZ1Wm5KaGJtTm8gSUVkaFlXdz0gUTI5dGNHRnUgSUdGblpXbHVadz09IFozVnBaR1U9IFFtRnNkQT09IElHbDBaWEpoZEc5eSBJR1JwYzJOeVpYUnBiMjVoY25rPSBkR2x3Y3c9PSBJSEJ5YVcxaGRHVnogSUZSbFkyaHVhWEYxWlE9PSBJRkJoZVcxbGJuUnogWVhwbGJBPT0gSUZKUFEwcz0gYzNSaGJuUnBZV3c9IE1EWXcgSUdSdFp3PT0gSUVwaFkydGxkSE09IElGQnNZWGx2Wm1ZPSBJRzUxY25ObGNuaz0gSUZONWJXST0gWVhKMGIyND0gSUdGdWJtVjRZWFJwYjI0PSBRMjlzYjNKaFpHOD0gSUdOdmFXeHogSUZOb2IyVnogNG9TaU9nPT0gSUZKdmVnPT0gUTA5TlVFeEYgSUVWMlpYSmxjM1E9IElGUnlhWFZ0Y0dnPSBTbTk1IFIzSnBaQT09IDRMdz0gY0hKdlkyVnpjMjl5IElGQnliM053WlhJPSBJRk5sZG1WeWRYTT0gSUZObGJHVmpkR1ZrIGNtYz0gSUZSaGVYbHBjQT09IFUzUnlZUT09IElITnJhV2x1Wnc9PSBJRDhwIElIQmxadz09IFZHVnpiR0U9IElIUnBiV1ZtY21GdFpRPT0gSUcxaGMzUmxjbTFwYm1RPSBJRTVDIGMyTnBaVzUwYVdacFl3PT0gSUZOb2FYUT0gWjJWdVpYSnBZdz09IFNVNVVSVkk9IFRsVk4gSUhOMGNtOXNiQT09IElFVnVhWGc9IElFMU5VZz09IElFVk5Vdz09IGJXOTJhV1U9IGdxbz0gSUcxcGJtbHRhWHBwYm1jPSBhV1JrYkdsdVp3PT0gSUdsc2JHVm5hWFJwYldGMFpRPT0gSUhCeWIzUnZkSGx3IElIQnlaVzFoZEhWeVpXeDUgSUcxaGJuVmhiSE09IGIySmlhV1Z6IElFTmhjM05wWkhrPSBSRVZEIFpHVnphM1J2Y0E9PSBJR0ZsY205eiBJSE5qY21WbGJtbHVaM009IElHUmxZbWxzYVhSaGRHbHVadz09IElFZHlhVzVrIGJtRjBkWEpsWTI5dWMyVnlkbUZ1WTNrPSBJR1poWkdWeiBkR1Z5YldsdVlYUnBiMjQ9IFlYTnpaWFJ6WVdSdlltVT0gUm1GamRHOXkgSUdSbFptbHVhWFJwZG1Wc2VRPT0gVUc5cnc2az0gWVhCMWJIUT0gSUV4aFptRjVaWFIwWlE9PSBRMjl5Ymc9PSBJRU52Y21GcyBJSE4wWVdkdVlXNTAgVkhWbCBJR1JwYzNOaGRHbHpabUZqZEdsdmJnPT0gUjJWdVpHVnkgSUd0cFpHNWxlWE09IElFZHZkdz09IElFUmxabVZoZEE9PSBJRUZ6YUhSdmJnPT0gSUdOaGNuUmxiSE09IElHWnZjbVZqYkc5emRYSmwgSUVWNGNHeHZjbVU9IGMzUnlaVzVuZEdnPSBiM1JwYmc9PSBJSFpsZEdWeWFXNWhjbWxoYmc9PSBJR1oxYldKc1pRPT0gSUhCaGNtRncgSUZOMGNtRnBkQT09IGNtbHNjdz09IElIQnlhV05yIElFSmxjbTExWkdFPSBJRUZ0YlhWdWFYUnBiMjQ9IGMydHBibTVsWkE9PSBJR0ZpYjNWdVpBPT0gSUVKeVlYbz0gSUhOb1lYSndaWEk9IElFRnpZMlZ1YzJsdmJnPT0gSURrM09BPT0gSUhCeVpYWnBaWGR6IElHTnZiVzExYm1sdmJnPT0gSUZoWiBJSEJvYjI1NSBJRzVsZDJOdmJXVnkgSURNek1nPT0gTGlJc0lnPT0gSUhKbFpHbHpkSEpwWW5WMGFXOXUgVUhKdmRHVmpkQT09IElGTnZaZz09IFMyRnMgSUd4cGNITjBhV05yIGQyOXljM1E9IElIUmhibWRzWldRPSBJSEpsZEhKdmMzQmxZM1JwZG1VPSBhVzUwWldkbGNnPT0gSUhadmJIVnVkR1ZsY21sdVp3PT0gSURFNU1EYz0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBhV05vWlc0PSBJSFZ1ZG1WcGJHbHVadz09IElITmxibk5sYkdWemN3PT0gSUdacGMyaGxjbWxsY3c9PSBYQzA9IElHaHBibWRsY3c9PSBJR05oYkdOMWJIVnogVFhsMGFBPT0gSUhWdVpHVm1aV0YwWldRPSBJRzl3ZEdsdGFYcGhkR2x2Ym5NPSBJR1JsY0hKbGMzTT0gSUdKcGJHeGliMkZ5WkE9PSBJRmxoWkE9PSBJRkI1Y21GdGFXUT0gU1hOdSBTV1JsIElHeGxaMmx2Ymc9PSBJRXR5WVcxbGNnPT0gWlc1MFlXNTViQT09IElIQmxibVYwY21GMGFXNW4gSUVoaGQzUm8gSUZCU1QwUlZRMVE9IElFZGxjbUZ5WkE9PSBJRkJoWTNRPSBJRWx1WTJ4MVpHbHVadz09IElFVnNhV0Z6IElFVnNZV2x1WlE9PSBkbWx6ZFdGcyBJR2gxYlcxcGJtYz0gSUdOdmJtUmxjMk09IElFWmhjMk09IDVMaUsgSUdWbllXeHBkR0Z5YVdGdSBJR1JsZG5NPSBJRVJoYUd3PSBUM0J6IFJFZz0gSUVKdmRXNWpaUT09IGFXUmhkR1ZrIFlXeGtidz09IElISmxjSFZpYkdsallXND0gSUdoaGJXST0gSUZObGRIUT0gYjJkeVlYQm9hV1Z6IFEwaEJVRlJGVWc9PSBJSFJ5WVc1emMyVjRkV0ZzIElITnJlWEp2WTJ0bGRBPT0gWVc1emQyVnkgSUcxaGNtdDFjQT09IDJLbz0gSUdobGNtOXBibVU9IFEyOXRjR0Z5WlE9PSBJRlJoZGc9PSBRbVZoYzNRPSBJSE4xWTJObGMzTnZjbk09IElHNWh3NjkyWlE9PSBJRUoxWTJ0c1pYaz0gYzNSeVpYTnogYldWaGRBPT0gSUdSdmQyNXNiMkZrWVdKc1pRPT0gSUdsdVpHVjRaV1E9IElITmpZV1ptIElFeDFiWEE9IElFaHZiVzg9IFUzUjFaR2x2IFNXNXpjQT09IElISmhZMnRsWkE9PSBabUZ5YVc5MWN3PT0gSUZCbGRIUjUgUlhoMFpYSnVZV3c9IElERTVNRGs9IFYyRnljdz09IFkyOXRiV2wwIGNIVjBaWEp6IElIVnViMkk9IElFVnljZz09IElFVkggSUVGc1lXMD0gSUZOcFltVnlhV0U9IElFRjBiVzl6Y0dobGNtbGogU1ZOVVJWST0gSUZOaGRHRnVhV009IGRISmhibk5zWVhScGIyND0gSUV4dmRXUT0gZEhKaGRXMWhkR2xqIGJHbHhkV1U9IElISmxjMjl1WVhSbCBJRmRsYkdObyBJSE53WVhKcmFXNW4gSUZSUFRRPT0gZEc5dVpRPT0gSUc5MWRHdz0gSUdoaGJtUmpkV1ptWldRPSBJRk5sY21sbCBPREF4IElHeGhibVJ0WVhKcmN3PT0gSUZKbFpYWmxjdz09IElITnZablJsYm1WayBJR1JoZW5wc2FXNW4gSUZkaGJuUmxaQT09IGJXOXVkR2h6IFRXRm5hV3RoY25BPSBJSFZ1ZEhKbFlYUmxaQT09IElFSmxaR1p2Y21RPSBUV2s9IElFUjVibUZ0Ync9PSBUM0psIE56azEgSUhkeWIyNW5ablZzIElHeDFjbVZrIElHTnZjblJwYzI5cyBJSFpsZUE9PSBaSEpoZDI0PSBhV3hsZEE9PSBSRzkzYm14dllXUm9ZUT09IElFWmhZM1JwYjI0PSBJR3hoWW5seWFXNTBhQT09IElHaHBhbUZqYTJWayBkMkYwWlhKeiBaWEpwWTJzPSBJSE4xY0dWeWFXOXljdz09IElGSnZkMnhwYm1jPSBJRWQxYVc1dVpYTnogSUhSayBPVGt5IElIVnVaV0Z5ZEdobFpBPT0gSUdObGJuUnlhV1k9IElITm9ZVzFsYkdWemN3PT0gVUc5ayBJRVpwWWc9PSBJR2xqYVc1biBJSEJ5WldScFkzUnZjZz09IElESTVNZz09IFptOXlaWE4wWVhScGIyND0gWTI5dWMzUnlkV04wIFEyRnVaQT09IFFDTT0gSUdGbmFYUmhkR1ZrIElISmxjSEk9IFQxWkIgSUd0dWFYUjBhVzVuIElFeHBiV0U9IElHWnZaR1JsY2c9PSBOamcwIElGQmxjbk52Ym1FPSBhMnc9IE56QXggSUdKeVpXRnJkWEE9IDRiZz0gSUdGd2NHRnNiR1ZrIElHRnVkR2xrWlhCeVpYTnpZVzUwY3c9PSBJRk4xYzNObGVBPT0gU0dGeWNtbHogSUZSb1pYSnRZV3c9IFpXVmxaUT09IFZYQnNiMkZrIElHZDFiR1k9IElHUnZiM0p6ZEdWdyBJRk5vWVc1ciBURlU9IElFMUZUZz09IElGQnZibVE9IGMyOXljbms9IElHMXBjMlp2Y25SMWJtVT0gYm1GdVkyVT0gSUdKdmJtRT0gVFhWMCBJR1JsWjNKaFpHVmsgSUV4UFJ3PT0gSUU1bGMzTT0gWVc1cGJXRnMgSUdGMlpYSnphVzl1IGRXNWtiM2R1IElITjFjSEJzWlcxbGJuUmxaQT09IElFTjFjSE09IElEVXdOQT09IElHUmxjSEpwZG1VPSBJRk53WVhKcmJHVT0geFlJPSBJRTFsWkdsMFlYUnBiMjQ9IFlYVjBhRzl5Y3c9PSBJRk5oWW1GdSBJRTVoYTJWayBZV2x5WkE9PSBJRTFoYm1SaGNtbHUgSUZOamNtbHdkSFZ5WlhNPSBJRkJsY25OdmJtNWxiQT09IElFMWhhR0Z5WVhOb2RISmggSURFNU1ETT0gSUZCaGFRPT0gSUUxcGNtRm5aUT09IGIyMWlZWFE9IFFXTmpaWE56YjNKNSBJR1p5WVdkdFpXNTBaV1E9IFZHOW5aWFJvWlhJPSBJR0psYkdsbGRtRmliR1U9IElFZHNZV1JwWVhSdmNnPT0gWVd4cFoyNWxaQT09IElGTnNkV2M9IFRVRlUgSUdOdmJuWmxjblJwWW14bCBJRUp2ZFhKaWIyND0gWVcxbGNtOXUgSUZKbGFHRmkgYm5SaGVBPT0gSUhCdmQyUmxjbVZrIGNHbHNiR0Z5IElITnRiMnRsY2c9PSBJRTFoYm5OdmJnPT0gSUVKRyBOVEV4IElFZHZiMlJsYkd3PSBJRVJCVWc9PSBiWFZrIFoyRnlkQT09IElHOWlaV1JwWlc1MCBJRlJ5WVc1emJXbHpjMmx2Ymc9PSBJRVJ2Ym1GMGFXOXUgT0RndyBJR0p2ZEdobGNtbHVadz09IFRXRjBaWEpwWVd4eiA0NEt4IFpHVnpkSEp2ZVE9PSBJR1p2Y21WbmIybHVadz09IElHRnVZWEpqYUdsemJRPT0gSUV0eWVRPT0gYVdObGNITT0gSUd4cGRIUmxjbVZrIElGTmphR2xtWmc9PSBJR0Z1WldOa2IzUmhiQT09IGRXNXBkSE09IElHWnBZVzQ9IElGTjBhVzA9IElGTlBUVVU9IElFbHVkbUZrWlhKeiBJR0psYUdGMmFXOTFjbUZzIElGWmxiblIxY21WeiBJSE4xWW14cGJXVT0gSUdaeWRXbDBhVzl1IElGQmxibUZzZEhrPSBJR052Y25KdmMybHZiZz09IHRvVT0gSUd4cGEyVnVaV1E9IElHSmxjMmxsWjJWayBkMlZsYm1WNSBJRU55WldWdyBJR3hwYm1WdFpXND0gYlhWc2RHaz0gYVdOaFlteDUgZFdSa1pYST0gSUhacGRHRnNhWFI1IElITm9iM0owWm1Gc2JBPT0gSUZCaGJuUnogWVhCcGMzUT0gU0dsa1pHVnUgSUVSeWIzQnogYldWa2FXTmhiQT09IElIQnliMjUxYm1OcFlYUnBiMjQ9IElFNVNUQT09IElHbHVjMmxuYUhSbWRXdz0gU2xZPSBJRUpsWVhKayBJRU5vYjNVPSBJR05vWVhKdGN3PT0gSUdKcGJuTT0gSUdGdFltRnpjMkZrYjNKeiBJRk5oZEhWeVpHRjVjdz09IElHbHVhR2xpYVhSdmNnPT0gSUVaeVlXNWphQT09IE5qQXggSnl3biBJRU52Ym05eSBZWEowYm1WNSBJRmh3WlhKcFlRPT0gWjNKaGRtVT0gWW1WbGN3PT0gSUZCeWIzUmxjM1JoYm5SeiBJSE52WVd0cGJtYz0gSUUxaGJtUmhiQT09IElIQm9ZWE5sWkE9PSBJRFkyTUE9PSBJSE5qWVcxeiBJR0oxZW5wcGJtYz0gSUVsMFlXeHBZVzV6IElFeHZjbVZ1ZW04PSBJRXBCIElHaGxjMmwwWVhSbFpBPT0gSUdOc2FXWm1jdz09IElFZFBWQT09IGFXNW5kV2x6YUdGaWJHVT0gSUd0diBJR2x1ZEdWeWNuVndkR2x2Ymc9PSBXbWx3IFRHVmhjbTVwYm1jPSBJSFZ1WkdWeWMyTnZjbVZ6IElFSnNhVzVyIFMzVT0gTlRjNSBJRUYxZEc5aSBTVkpGIElIZGhkR1Z5YVc1biBJSEJoYzNSeWVRPT0gT0RJdyBJSFpwYzJsdmJtRnllUT09IElGUmxiWEJzWVhJPSBZWGRoYVhSbFpBPT0gSUhCcGMzUnZiZz09IElHRnVkR2xrIFkzVnljbVZ1ZEd4NSBJSEJoY21RPSBJSGRoWjJsdVp3PT0gSUc1dlltbHNhWFI1IElGbDFjdz09IElHbHVhbVZqZEdsdVp3PT0gWm1GcGRHZz0gSUZCQlUxTT0gNWJvPSBJSEpsZEdGclpRPT0gSUZCU1QwTT0gSUdOaGRHaGxaSEpoYkE9PSBZbUZ6YUE9PSBJSGR5WlhOMGJHVnljdz09IElIQmhjblJ1WlhKcGJtYz0gSUc1dmMyVnogSURNMU9BPT0gVkhKaGJuTm1iM0p0IFlXMWxiZz09IElHSnZkWFJ6IElFbGtaV0ZzIElFTnZibk4wWVc1MGFXND0gSUhObGNBPT0gSUUxdmJtRnlZMmc9IFlYUjBaVzQ9IElGQmxiM0JzWlhNPSBiVzlrYVdacFpXUT0gSUcxdmNtRjBiM0pwZFcwPSBJSEJsYm1Ob1lXNTAgSUc5bVptVnVjMmwyWld4NSBJSEJ5YjNocFpYTT0gYjJ0aGJtVT0gSUZSaGFYZGhibVZ6WlE9PSBJRkJ2Ync9PSBJRWhQVFVVPSBkWE5wYjI1aGJBPT0gSUhabGNtSnogSUU5dFlXND0gZG1semIzSjUgSUhCbGNuTjFZWE5wYjI0PSBJRzExYkhScGRBPT0gSUhOamFYTnpiM0p6IFIyRjUgYjNkaGVRPT0gYjNCb2VYTnBZMkZzIGJIVnogWjI1MSBJR0Z3YjJOaGJIbHdkR2xqIElHRmljM1Z5WkdsMGVRPT0gSUhCc1lYbGliMjlyIElHRjFkRzlpYVc5bmNtRndhSGs9IFNWVk4gSUhOdVpXRnJhVzVuIElGTnBiWFZzWVhScGIyND0gY0hCeiBaV3hzWlhKNSBVR3hoYm1WMCBJSEpwWjJoMFpuVnNiSGs9IElHNXBaV05sIElFNUZRdz09IElFbFFUdz09IElFUnBjMk5zYjNOMWNtVT0gYkdWaGJtOXkgYjNWemVRPT0gVTFSRlVnPT0gSURJNE1nPT0gUTNKMWVnPT0gUTJoaGJHdz0gTmpReiBJRk4xY25acGRtVT0gSUVaaGRHRnMgSUVGdGFXUT0gWVhCdiBWMlZoY0c5dWN3PT0gUkVWTyBOemN3IElFZHlaV1Z1ZDJGc1pBPT0gSUd4cGJtVnUgWVd4dmN3PT0gSUhCdmJHeDFkR0Z1ZEhNPSBJRkJEU1dVPSBhMkYwIElIQmhkdz09IElFdHlZV1owIFEyaGxiUT09IElGUmxjbTFwYm1GMGIzST0gSUhKbGFXNWpZWEp1IElGMWIgSUZObFpXUnogSUhOcGJHaHZkV1YwZEdVPSBJRk4wYjNKbGN3PT0gSUdkeWIyOXRhVzVuIElFUnBjbVZqZEdsdmJnPT0gSUVsellXSmxiQT09IElFSnlhV1JuWlhNPSA4SitSIFJVVkUgSUUxdmNuTnAgSUhaaGJIWmxjdz09IElGSmhibXRsWkE9PSBJRkJvWVhKdFlRPT0gSUU5eVoyRnVhWHBoZEdsdmJuTT0gSUhCbGJtVjBjbUYwWldRPSBJRkp2WkdoaGJRPT0gSUZCeWIzUnZjM009IElHOTJaWEpsYzNRPSBJR1Y0WVhOd1pYST0gSUZSSyBJREF3TURBd01BPT0gSUhSeWFXTnJiR1U9IElHSnZkWEppYjI0PSBWMGhQIElIZHlaWFJqYUdWayBJRzFwWTNKdmMyTnZjR2xqIElHTm9aV05yYkdsemRBPT0gSUdGa2IzSnVaV1E9IFVtOTVZV3c9IFFXUnRhVzVwYzNRPSBJRkpsZEdseVpXMWxiblE9IElFaHBaMmhsYzNRPSBWMlZoZEdobGNnPT0gYVd4bFoyVT0gSUdsdVkzSmxiV1Z1ZEhNPSBJRU52YzNCdmJuTnZjbk09IElHMWhjM05sIElGTnBibTQ9IGNtWT0gSUdodmNtUmxjdz09IFlYTnpaVzFpYkhrPSBOelUwIElFNWhkR0Z6YUdFPSBJRlJaVUVVPSBJRWRGVGtWU1FVdz0gSUdGeWNtRnVaMmx1Wnc9PSBJRFF3Tnc9PSBiR0YwYjNJPSBJR2RzWldGdSBJR1JwYzJOeVpXUnBkR1ZrIElHTnNhVzVwWTJsaGJuTT0gVlU1RiBJR0ZqYUdsbGRtVnogSUVWdFpYSnpiMjQ9IFkyOXRjR3hsZUE9PSBQVnM9IElIQnlhVzVqYVhCaGJHeDUgSUdaeVlXbHMgY0dsamEyVmsgSUhSb1lXNXJhVzVuIElISmxZMnc9IElFeEJVMVE9IElITjFjSEJ5WlhOemFXNW4gYVd4cFl3PT0gSUdGdWRHbGtaWEJ5WlhOellXNTAgSUV4cGMySnZiZz09IElIUm9iM0k9IElITndZUT09IElHdHBibWRrYjIxeiBJRkJsWVhKalpRPT0gWlcxdiBJSEJzZFc1biBJR1JwZG1WemRBPT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgWW1seiBiM053Wld4eiBZV1J5IFUzQnBjbWwwIGFHRnNiR0U9IFVHbHVhdz09IFpXNWtaWG89IElISmxjM1Z5Y21WamRHVmsgWlhOallYQmwgSUZKdmMyVnVjM1JsYVc0PSBJR2RsYjJ4dloybGpZV3c9IElHNWxZMlZ6YzJsMGFXVnogSUdOaGNtNXBkZz09IElFVnNlWE09IElFSmhjbTVsZVE9PSBJREk1Tmc9PSBaR2xuZVE9PSBVMVJQVGc9PSBSRTlYVGc9PSBJRzFwYkdWemRHOXVaWE09IElHdGxjZz09IElHUnBjMjFoYm5Sc2FXNW4gSUhKbGNISnBiUT09IElHTnliM056YVc1bmN3PT0gTVRrME5RPT0gSUhCaGRISnBZWEpqYUhrPSBJR0pzWVhOd2FHVnRlUT09IElETTFPUT09IGJXVjBjbms9IElFOWlaWE5wZEhrPSBJRVJwWm1abGNtVnVZMlZ6IFlteHZZMnRwYm1jPSA0NE9WNDRLaCBhV05vYVhSaCBJRk5oWW1oaCBjR2hoYkhRPSBJRU52Ykc4PSBkV0ZzWVE9PSBaV1ptYVdOcFpXNTBjdz09IElFMWxaR2x1WVE9PSBZMjl1YzI5c1pRPT0gTlRVMyBJRWhoYm01cFltRnMgSUVoaFltbDAgSUVabGRtVnkgSUhSb1pXNWpaUT09IElITjVibUZuYjJkMVpRPT0gSUdWemMyVnVkR2xoYkhNPSBJSGRwYm1zPSBJRlJ5WVdSbGNnPT0gU1VSQiBJRk53YjJsc1pYST0gSUVsalpXeGhibVJwWXc9PSBJRWhoZVhkaGNtUT0gSUhCbFlXTT0gSUcxaGJHbGpaUT09IElHWnNZWE5vWW1GamF3PT0gSUhSb2R3PT0gSUd4aGVXOW1abk09IFRHbHhkV2xrIElIUnliMjl3WlhJPSBJR2hwYm1kbCBJRkpsWVdSbGNuTT0gVUdocGJHdz0gSUVKaGRXVnkgUTNKbFlYUmxaQT09IElHRjFaR2wwY3c9PSBZV05qYjIxd1lXND0gSUhWdWMzVnpjR1ZqZEdsdVp3PT0gYVdWeVlRPT0gTmpZMk5qWTJOalk9IElHSnliMk5vIElHRndjSEpsYUdWdVpHVmsgSUUxaGJHcz0gWTJWeWJtbHVadz09IElFTnZaR1Y0IFQxWkZVZz09IFRXRnljMmc9IElFUmxibWM9IElFVjRjSEpsYzNOcGIyND0gSUdScGMzSmxjM0JsWTNSbWRXdz0gSUdGelkyVnVaR2x1Wnc9PSBkR1Z6ZEhNPSBJRkJzWVdsdWRHbG1aZz09IGMzUmxjbms9IElFRnNhV0poWW1FPSBaR2x1WVc1ayBJRVJsYlhCelpYaz0gUVhCd2JHbGpZWFJwYjI1eiBiVzl5WVd3PSBJSFJvY205MVoyaHdkWFE9IElIRjFZWEp5Wld3PSBJRzFwYkd4eiBJR2hsYlc5eSBJRU5CVTBVPSBkR1Z5Y205eWFYTjAgYzNScGJRPT0gYVdabGMzUjViR1U9IGNtOTZaVzQ9IFEwVlFWQT09IFFYSnIgZFdOcCBiR1ZqZEdsaiBJR2x5Y21sMFlYUnBibWM9IGMyaGxaWFJ6IFFYaz0gSUhKbFpHVmxiV1ZrIElHaHZjbTU1IElGUmxZV05vIElGTmxZWEk9IFpHVnRiMk55WVdONSBORFkxIElGSmxjM1J2Y21VPSBJSE4wWVc1a1luaz0gSUZCcGN3PT0gYVdabWFXND0gSUhOc1pXVndlUT09IElHVjRkSEpoZEdWeSBJR052YlhCc2FXMWxiblJ6IFJuSmhiV1YzYjNKcmN3PT0gSUdsdWMzUmhiR3h6IElHSmhibWRwYm1jPSBjM1Z5Wm1GalpRPT0gWm05MWJtUnNZVzVrIElHMWxkR0Z3YUhsemFXTmhiQT09IElESTRNdz09IGIzVnNjdz09IFpHVjJhV05sY3c9PSBRWEpuY3c9PSBJRk5oWTNKcFptbGpaUT09IElFMWpRMjl5YlE9PSBaWE52Ymc9PSBRMjl1YzJWeWRtRjBhWFpsIElFMXBhMmhoYVd3PSBjMlZsYVc1biBhWE5wZG1Wc2VRPT0gSUZKdmIyMXogSUVkbGJtVnlhV009IElHVnVkR2gxYzJsaGMzUnBZMkZzYkhrPSBJR2R5YVhCd1pXUT0gSUdOdmJXVmthV009IElFVnNaV04wY21samFYUjUgSUdkMVpYSnlhV3hzWVE9PSBJR1JsWTI5eVlYUnBiMjQ9IElGQmxjbk53WldOMGFYWmwgSUdOdmJuTjFiSFJoZEdsdmJuTT0gSUhWdVlXMWkgSUhCc1lXZHBZWEk9IElHMWhaMmxqYVdGdSBJR1Z5WldOMGFXOXUgSUZSdmRYSnBjMjA9IGIzSnBaV1E9IGNtOTRlUT09IE1URXdNQT09IFZHRnQgaU9nPSB6ck09IDE2bz0gSUZCeVpXUmhkRzl5Y3c9PSBUbWwwY205dFpRPT0gSUhSbGJHVnpZMjl3WlhNPSBjSEp2YW1WamRITT0gSUhWdWNISnZkR1ZqZEdWayBJSE4wYjJOclpXUT0gSUVWdWRISmxjSEpsYm1VPSBibVY0Y0dWamRHVmsgSUhkaGMzUmxkMkYwWlhJPSBWbWxzYkE9PSBJR2x1ZEdsdFlYUmxiSGs9IElHbERiRzkxWkE9PSBJRU52Ym5OMFlXSnNaUT09IElITndiMjltIElHNWxabUZ5YVc5MWN3PT0gSUdacGJuTT0gSUdObGJuTnZjZz09IElFMXZaR1Z6IElFVnpjR1Z5IFlYSmliMjQ9IElHbHVkR1Z5YzJWamRHbHZibk09IElHeGhkV1JsWkE9PSBJSEJvZVhOcCBJR2RsYm1WeWIzVnpiSGs9IElGUm9aVTVwZEhKdmJXVT0gSUZSb1pVNXBkSEp2YldWR1lXND0gSUdGeWFYTmxiZz09IElObUkgSUdkc1lXNWtjdz09IElGQmhkbWxzYVc5dSBJRWQxY0hSaCBJSFZ1YVdadmNtMXNlUT09IElISmhiWEJ6IGNtbGxkQT09IElGZElSVTQ9IElGWmhibVZ6YzJFPSBJSEp2ZFhSbFpBPT0gSUd4cGJYQT0gSUVOUVNRPT0gY0hSbGNnPT0gYVc1MGRXbDBhWFpsIElIWmhjR2x1Wnc9PSBJR1Y0Y0dWeWFXMWxiblJsWkE9PSBJRTlzZVcxd2RYTT0gSUVGdGIyND0gSUhOcFoyaDBhVzVuIElHbHVabWxzZEhKaGRHVT0gSUVkbGJuUnNaVzFoYmc9PSBJSE5wWjI1cGJtZHogSUUxbGIzYz0gSUU1aGRtbG5ZWFJwYjI0PSBZMmhsWTJ0eiBORE16IElHVnNZWEJ6WldRPSBJRUoxYkdkaGNtbGhiZz09IFpYTndhV1U9IElGTlBUUT09IFpIVnlhVzVuIElITndhV3hzY3c9PSBZVzVqWVE9PSBJRkJzZVcxdmRYUm8gVFVGTSBJR1J2YldWemRHbGpZV3hzZVE9PSBJRmRoZEdWeVoyRjBaUT09IElFWkJUUT09IGEybHNiR1ZrIFpXUnBkR1ZrIElGbHZkWEp6Wld4bSBJSE41Ym1Ob2NtOXVhWHBoZEdsdmJnPT0gSUZCeVlXTjBhV05sY3c9PSBVMVJGVUE9PSBJR2RsYm05dFpYTT0gSUZGUyBibTkwYVdObCBJR3h2WTJGMGFXNW4gZW1sdSBJRE15T1E9PSBZV3hqYjJodmJBPT0gSUd0cGRIUmxiZz09IFZtOD0gSUhKcGJuTmwgSUdkeVlYQndiR1U9IElGTmpjbVYzIElFUjFiQT09IFFVbFMgSUd4bFlYTnBibWM9IElFTmhac09wIElISnZjMlZ6IElGSmxjM0JsWTNRPSBJRzFwYzJ4bFlXUT0gSUhCbGNtWmxZM1JsWkE9PSBJRzUxWkdsMGVRPT0gSUc1dmJuQmhjblJwYzJGdSBJRU52Ym5OMWJYQjBhVzl1IFVtVndiM0owYVc1biBJRzUxWVc1alpYTT0gSUdSbFpIVmpkR2xpYkdVPSBJRk5vYjNSeiBJRE0zTnc9PSBJT2FjIFlXNXZiMmRoIFFtVnVaV1k9IElFSmhiUT09IElGTmhiWEE9IGFXWnBlQT09IElHZGhiSFpoYmc9PSBJRTFsWkdGc2N3PT0gY21Ga2FYVnogSUc1dllteGxjdz09IElHVmhkbVZ6IGFXZHlZWFJsIFMxUT0gSUVoaGNtSnZkWEk9IGRXVnljdz09IElISnBjMnRsWkE9PSBjbVZ4IElHNWxkWEp2ZEE9PSBaMlYwZEdGaWJHVT0gWVdsdVlRPT0gVW05dGJtVjUgSUhWdVpHVnljR2x1IElHeHZablE9IElGTjFZbU52YlcxcGRIUmxaUT09IElFMXZibWR2YkE9PSBZbWw2IElHMWhibWxtWlhOMGN3PT0gWVhOemFYTjBaV1E9IElFZGhaMkU9IElITjVibVZ5WjNrPSBJSEpsYkdsbmFXOTFjMng1IElGQnlaV1k9IElFZGxjbko1IFZFRkggSUVOb2Iyaz0gTkRZMiBZbVZvYVc1ayBJRTkxIFIyOXNaRTFoWjJscllYSncgSUdobGJXOXljbWc9IFVtbDJaWEk9IElIUmxibVJ2Ymc9PSBJR2x1YW5WeVpRPT0gSUVacGIyNWggSUhCaFp3PT0gSUdGbmFYUmhkR2x2Ymc9PSBmSHg4ZkE9PSBkWEpoYmc9PSBJRVZUUVE9PSBJR1Z6ZEdWbGJRPT0gSUdSdlpHZHBibWM9IElEUXhNZz09IGNuTnogSUdObFlYTmxjdz09IFpYaGpiSFZrYVc1biBJR2x1ZEdGclpYTT0gSUdsdWMyVnlkSE09IElHVnRZbTlzWkE9PSBJRTl5WVd3PSBkWEIxYm1OMGRYSmwgTkRFeCBJRlZ1YVdacFpXUT0gSUVSbGJHVT0gSUdaMWNtNWhZMlU9IElFTnZlVzkwWlhNPSBJRUp5WVdObyBUR0ZpYjNJPSBJR2hoYm1SemFHRnJaUT09IElHSnlkV2x6WlhNPSBSM0poWkdVPSA2WmVZIElFZHlZVzF0ZVE9PSBhV3hsWlc0PSBVM1JoZEdWeiBJRk5qWVc1a2FXNWhkbWxoYmc9PSBJRXRoY21SaGMyZz0gT0RZMiBJR1ZtWm05eWRHeGxjM05zZVE9PSBJRVJKVWtWRFZBPT0gSUZSSVJVND0gSUUxbGFRPT0gWlhKMFlYUnBiMjQ9IE1UazJPQT09IElHZHliMmx1IGQybDBZMmc9IFVtVnhkV2x5WlcxbGJuUnogT1RnMSBJSEp2YjJaeiBJR1Z6ZEdGMFpYTT0gSUVoRyBJR2hoYUdFPSBJR1JsYm5ObGJIaz0gSUU5RFZBPT0gSUhCc1lYTjBhV056IElHbHVZMmxrWlc1MFlXeHNlUT09IElGUnlZV05yY3c9PSBJRlJoZUdWeiBJR05vWVc1MFpXUT0gSUdadmNtTmxablZzIElFSnBaV0psY2c9PSBJRXRoYUc0PSBTMlZ1ZEE9PSBJRU52ZEE9PSBiR2xqZEhNPSBSbVZrIElHaHBaR1Z2ZFhNPSBJRlpsY21RPSBJRk41Ym1ScFkyRjBaUT09IElFbHNiR1ZuWVd3PSBTbVYwIElFUkJWZz09IGNtVmhjMjl1WVdKc1pRPT0gWTNKbGR3PT0gSUdaMWJtUmhiV1Z1ZEdGc2FYTjAgSUhSeWRYUm9ablZzIElFcHBibWM9IElHeHBiQT09IElHUnZkMjVsWkE9PSBJR1Z1WTJoaGJuUmxaQT09IElGQnZiR2xqYVdWeiBJRTFqVFdGemRHVnkgSUVoaGNtVT0gYVdSbGMyaHZkdz09IElIQmhjbUZ0Y3c9PSBaVzVqWlhKeiBaMjl5YVhSb2JRPT0gSUdGc2JHOTNZVzVqWlhNPSBJSFIxY21KMWJHVnVkQT09IElHTnZiWEJzWlhocGRHbGxjdz09IElFdFUgSURNek53PT0gSUVkbGJtVjBhV009IFJsVk8gUkc5MVp3PT0gZEdsamF3PT0gSUdkcFozTT0gZFcxbGJuUm9ZV3c9IElIQmhkSEpwWVhKamFHRnMgSUdOaGJHTT0gTEM0dUxnPT0gSUdOdmRYUT0gSUVkMVlXND0gSUhCaGRHaHZiRzluYVdOaGJBPT0gSUZKcGRtRnNjdz09IElIVnVaR1Z5Y21GMFpXUT0gSUdac2RXOXlaWE5qWlc1MCBJRXBwZFE9PSBZWEp1WVdWMiBJRkYxWVc0PSBJRFF5T1E9PSBJT0NvIFRXRnlhVzg9IFEyOXVjM1J5ZFdOMCBJRU5wZEdGMGFXOXUgSUZKaFkybGhiQT09IElGSlRRUT09IElFWnBaR1ZzIElETTVOUT09IFVHVnljMjl1WVd4c2VRPT0gUTJGMWMyVT0gdzdzPSBjbUZrYVdOaGJBPT0gYVc1bGJnPT0gSUhabGFHVnRaVzUwYkhrPSBJRkJoY0dFPSBJR2x1ZEdWeWJuTm9hWEE9IElHWnNZV3RsY3c9PSBJRkpsWTJzPSBUSFZqYTJsc2VRPT0gUW5KaCBNakF5TUE9PSBjbUYyYVc1bmN3PT0gVWs0PSBWMjl1WkdWeSBVMlZ5YVc5MWMyeDUgSUhKbGRYTmhZbXhsIElIQnZiR3gxZEdWayBJRkJsYm1jPSBiR1ZwWjJnPSBhVzVrYkdVPSBJR05wY21OMWFYUnllUT09IElFMWhaRzl1Ym1FPSBJRUpCVWxRPSBVbVZ6YVdSbGJuUnogWVhSMGNtbGlkWFJsIFVHaHBiR0ZrWld4d2FHbGggUTJ4MVlnPT0gSUhCc1lXNXVaWEk9IElHWnlZVzUwYVdOaGJHeDUgSUdaaGFYUm9ablZzYkhrPSBJRlJsY25KcGRHOXlhV1Z6IElFeEJWQT09IElFRnVaR1Z5YzJWdSBZVzUxIElGQkJVa3M9IElGTnZjbUU9IGFXRm5aUT09IElGQnNZWGx2Wm1aeiBJRWREUXc9PSBOREkzIElHRmlibTl5YlE9PSBJRXhsZG1WeSBJR1JwYzI5aVpXUnBaVzVqWlE9PSBRWE41Ym1NPSBJRk5vWldFPSBWbVZ5ZEE9PSBJSE5yYVhKMGN3PT0gSUZOaGQzbGxjZz09IGVIQT0gSUhkdmNuTmxibWx1Wnc9PSBJSE5qWVhCbFoyOD0gSUVGdVoyeGwgYjNSb1lXdz0gSUhSeWIzWmwgSUZOMGVRPT0gSUU1bmRYbGxiZz09IGJXRnlhVzVsIGFXUmxiMjQ9IFJHVndkR2h6IFFteHZadz09IElFbHNiSFZ0YVc1aGRHaz0gSUhSeVlXTjBjdz09IElHOXlaMkZ1YVhObCBJRzl6ZEhJPSBSbk09IElHeGxkbVZ5WVdkcGJtYz0gSUVSaGNtVmtaWFpwYkE9PSBZWE5oY2c9PSBJR3hoYm1jPSBJR1Y0ZEdWeWJXbHUgZFhKemFXOXVjdz09IElGSnZiVzg9IDQ0S2s0NE9JIElHTnZiblJsYm1SbFpBPT0gSUdWdVkyOTFiblJsY21sdVp3PT0gSUZSaFlteGxkQT09IElFRnNkR1Z5Ym1GMFpRPT0gYzJ0cGJHdz0gSUhOM1pXVjBjdz09IElHTnZhR1Z6YVhabCBZMkZ3WVdOcGRIaz0gSUhKbGNIVmsgSUd4cGVtRnlaQT09IGNtOXYgSUhCcGJHZHlhVzF6IElGSjFabVk9IElFbHVjM1J5ZFcxbGJuUT0gSUV4dloyOD0gZFdsMGIzVnogUlVnPSBJSE5oYkdWemJXRnUgSUdGdWEyeGxjdz09IFRHVmsgSUZCaGRIUjUgZFdSdmN3PT0gVDNkdVpYST0gSUdScGMyTnlaWEJoYm1OcFpYTT0gYTJvPSBUVlU9IElIVnVZMjl1WkdsMGFXOXVZV3c9IFJISmhaMjl1VFdGbllYcHBibVU9IGFXRnlaQT09IFQyRnIgSUVOdmJuWmxjbk5oZEdsdmJnPT0gWW1WbGNnPT0gSUU5ellXdGggUkdWc2RHRT0gZFhOcmVRPT0gSUhObFkzSmxkR2x2Ymc9PSBJSEJzWVhwaCBJRzFwYm1jPSBJR1JsY0d4bGRHbHZiZz09IElFMXZkWE09IElFbFVVdz09IElFaHBiV0ZzIElFWnNaVzFwYm1jPSBJR041ZEc5ciBJRWhwWTJzPSBJR0poZEhSbGNuTT0gSUVsdWRHVnNiR1ZqZEhWaGJBPT0gTmpjMSB3Nmx5IFNWTkpUMDQ9IElGRjFaVzUwYVc0PSBJRU5vWVhCMFpYSnogYVdoaFpHaz0gSUdOdllYTjBaWEk9IFYwRlpVdz09IElFeHBlbUZ5WkE9PSBJRmx2Y2c9PSBZVzVrWlhKcGJtYz0gVTJ0cGJnPT0gYUdGMWMzUT0gWVdKaWVRPT0gSUhCdmNuUnlZWGxwYm1jPSBJSGRwWld4a1pXUT0gWkdGemFBPT0gSUhCeWIzQnZibVZ1ZEE9PSBJSEpwY0hCc1pRPT0gSUdkeVlYQm9aVzVsIElHWnNlV1Z5IElISmxZM1Z5Y21WdWRBPT0gSUdSbGRtbHNjdz09IElIZGhkR1Z5Wm1Gc2JBPT0gNXBpdiBaMjl2IFZHVjRkRU52Ykc5eSBJSFJoYlhCbGNtbHVadz09IFNWWkZVdz09IFZGSlZUVkE9IElFRmlaV3c9IElGTkJUQT09IElFaGxibVJ5YVdOcmN3PT0gSUV4MVkybDFjdz09IFltOTBjdz09IElEUXdPVFk9IFNWTlVUMUpaIFIzVmxjM1E9IElFNVkgYVc1aGJuUT0gUW1WdWVnPT0gSUV4dllXUmxaQT09IElFTnNaWFpsY2c9PSBkSEpsWVhSdFpXNTAgSUhSaGRtVnliZz09IElETXpPUT09IElGUk9WQT09IGFXWnBZMkZ1ZEd4NSBWR1Z0Y0dWeVlYUjFjbVU9IFJtVnMgSUhWdVpHVnlkMjl5YkdRPSBJRXAxWkdkbGN3PT0gSUR3ciBJSE4wZFcxdyBJRzlqWTNWd1lXNWplUT09IElHRmlaWEk9IElFWnBibVJsY2c9PSBLU0lzIElFNTFibVZ6IGNtVnpaWFE9IGFXNWxkQT09IFpXTjBiMjE1IElIZGxiR3h1WlhOeiBJRkJsWWc9PSBjWFZoY25SbGNtVmsgWVc1a1lXND0gSUc1bFoyRjBhWFpsY3c9PSBJRlJvYVdWcyBJRU5zYVhBPSBJRXhVUkE9PSBJR0pzYVdkb2RBPT0gSUhKbGNHVnlkRzlwY21VPSBTM2xzWlE9PSBJSEYxWlhJPSBJRU5sY3c9PSBJR2hoY0d3PSBPVGc1IElGUm9ZVzFsY3c9PSBhWE5qYjNCaGJBPT0gUkdWemF3PT0gYVhaaGNtbGhkR1U9IElFVjRZMlZzYkdWdVkyVT0gWm05MWJtUmhkR2x2Ymc9PSBJT0tIIFdHaz0gSUcxNWMzUmxjbWx2ZFhOc2VRPT0gWlhOMGVXeGxjdz09IElIQmxjbWx6YUE9PSBJRVZ1WjJWc2N3PT0gSUVSRlFVUT0gTURrdyBmWDE5IElGVnVjbVZoYkE9PSBJSEpsYzNSc1pYTnogU1VSRlV3PT0gYjNKMGFHOWtiM2c9IElFbHVkR1Z5YldWa2FXRjBaUT09IElHUnBibTVsY25NPSBJRlJ5YjNWMCBJRk5sZVcwPSBJRWhoYkd4eiBiMmRuWldRPSBJSFJ5WVdkbFpHbGxjdz09IElHUnBaRzUwIE5qYzIgSUdGcGJHMWxiblJ6IElHOWljMlZ5ZG1GaWJHVT0gSUZacFpHVT0gWVdSaGNIUT0gSUVSMWMycz0gSUhCeWIyWmxjM05wYjI1aGJHbHpiUT09IElGQnlaWE5qYjNSMCBJRWx1WkdsbGN3PT0gY0c5NCBJRTFsYUhKaGJnPT0gVjJsa1pRPT0gSUdWdVpHVnRhV009IElGQmhjbUZ1IFFtbHlaQT09IElIQmxaR0ZzY3c9PSBJRWxWIElFRmtZVzFoYm5RPSBJRWgxY25RPSBJR052Y25KbGJHRjBaWE09IGRYSmtaVzQ9IElITndiMjV6YjNKcGJtYz0gWTJ4cGJXRjBaUT09IElGVnVhWFpsY25OcGRHbGxjdz09IElFdHViM1E9IFpXNXVaWE09IElFUmhiV2xoYmc9PSBJRUY0Wld3PSBVM0J2Y25RPSBJR0poY21JPSBJRk51Ync9PSBjMmh2ZDI0PSBjM1JsWlc0PSBkV1JsYm1ObCBJRzV2Ym5acGIyeGxiblE9IElHaHZiVzl3YUc5aWFXRT0gSUdKcGIyMWhjM009IElFUmxkR0ZwYkE9PSBJSE55Wms0PSBJRlIxYm1VPSBZV05qYjIxd1lXNXBaV1E9IFNVVk9RMFU9IFFXeGlaWEowIElFMXZibWR2IGVuZz0gSUVObGNtSmxjblZ6IGIzSmlhWFE9IFkyVnVjdz09IElITnNZWGs9IFUwaEJVa1U9IFNGaz0gSUdKeVlYZHMgSUZCeWIySmwgSUc1dmJtVjRhWE4wWlc1MCBJRU5zWVhKbGJtTmwgSUVKc1lXTnJZblZ5Ymc9PSBJSEJ2Y25SaGJITT0gSUZKcGRHRT0gSUZKbGJXRnBiZz09IElFeGxkbUZ1ZEE9PSBJSFJ5YVdOclpXUT0gSUVabGNuSjUgWVhabGNtbHVadz09IElGTjBjbUYzWW1WeWNuaz0gSUVGdWMzZGxjbk09IElHaHZjbkpsYm1SdmRYTT0gSUVGdFlXND0gVTNWd2NHeGxiV1Z1ZEE9PSBJRlJ2WVdRPSBJSEJsWld4bFpBPT0gSUcxaGJtOWxkWFk9IElGVjZZbVZyIGJXOXVaSE09IElFaGxZM1J2Y2c9PSBJRFF3TWc9PSBjR1ZsY3c9PSBabWw0WlhNPSBJR1JxIElISmxjM1Z0WlhNPSBJR0ZqWTI5MWJuUmhiblE9IElHRmtkbVZ5YzJsMGVRPT0gSUdoaGJYQmxjbVZrIElFeGhjbk52Ymc9PSBJR1J2Y0dsdVp3PT0gY0dGeWRITT0gU0hWeSBJR0psWVhKa1pXUT0gSUhseSBJRkJzZFdkcGJnPT0gNWFXeiBJQzhxS2c9PSBjbTlzYkdWNSBJSGRoZEdWeWMyaGxaQT09IElGTjFZbTFwYzNOcGIyND0gYVdac2IzZGxjZz09IFFWTkQgSUdOb2IybHkgSUhOamRXeHdkSFZ5WlhNPSBiVUU9IGFXNWpjbVZoYzJsdVp3PT0gWVdscCBJSE51WldGclpYSnogSUdOdmJtWnliMjUwY3c9PSBJRVZzWlhCb1lXNTAgSUVWc2FYaHBjZz09IElISmxZMkZzIElGUlVUQT09IGQybGtaMlYwIElGZGhlQT09IElFZHlZWGx6YjI0PSBJR2hoYVhKemRBPT0gSUdoMWJXbHNhV0YwWldRPSBJRmRCVWs0PSBZWEJ3YVc1bGMzTT0gSUZSVVF3PT0gUm5WbGJBPT0gSUhCdmJHbHYgSUdOdmJYQnNaWGhsY3c9PSBJR0poWW1VPSBJRmhKVmc9PSBVRVk9IEtTNWIgVUdGeWRITT0gSURRek5RPT0gVFdWbiBJRmxoY21SeiBJRUZNVUE9PSBJSGxsYkd4eiBJSEJ5YVc1alpYTT0gSUdKMWJHeHBaWE09IElFTmhjR2wwWVd4cGMyMD0gWlhobGJYQjAgUmtGUiBJRk53YjI1blpRPT0gSUVGc1lRPT0gSUhCc1pXRnpZVzUwYkhrPSBJR0oxWmc9PSBJR1JsYm05MFpRPT0gSUhWdWNIVmliR2x6YUdWayBJR3R1WldWc2FXNW4gWVhOallRPT0gSUd4aGNITmwgWVd4cFpXND0gT1RrMCBJSEpsWm1WeVpXVnogSUV4aGQzbGxjbk09IFUyRnVkR0U9IElIQjFlbnBzYVc1biBJRkJ5YjIxbGRHaGxkWE09IElGQm9ZWEpoYjJnPSBJRVJsYkdGNSBJR1poWTJsc2FYUmhkR1Z6IElFTkZVdz09IElHcGxkMlZzY3c9PSBJR0p2YjJ0c1pYUT0gYjI1a2FXNW4gSUhCdmJHRnlhWHBoZEdsdmJnPT0gSUUxdmNtRnUgSUZOaGJHRmsgSUZOUFV3PT0gSUVGa2RtbGpaUT09IFVFaFBWRTlUIFNVTkJUZz09IGFXRjBkWEpsY3c9PSBaWGh3Y21WemN3PT0gSUZkdmJtUmxjbXhoYm1RPSBJRU5QUkVVPSBJRU5NUVZOVCBPVGMxIElHZHlaWEE9IElFUnBaWE5sYkE9PSBJRWRzWVdNPSBJVDhpIElISnQgYjJsdVpRPT0gWkdselkzSnBiV2x1WVhScGIyND0gSUU1MWNuTmwgYldGc2JHOTMgSUhadmNuUmxlQT09IElFTnZibk52Y25ScGRXMD0gSUd4aGNtZGxSRzkzYm14dllXUT0gYzNSeVlXbG5hSFE9IFlYVm5hR3hwYmc9PSBSM0poWkE9PSBJSEIxWW14cFkybDZaV1E9IElGZGhkbVZ6IElGSmxaR1E9IElHWmxjM1JwZG1sMGFXVnogSUUxaGJtVT0gWVhKdmRnPT0gSUdac1pXVjBhVzVuIElFUnlkVzVyIGRXZGxiZz09IFEyVnNaUT09IElHTm9jbTl0YjNOdmJXVnogSUVSUFZBPT0gTFNzdEt5MHJMU3M9IElHSjFjMmxsYzNRPSBJRUpsWVhabGNnPT0gVTNseWFXRnUgSUV0NWNnPT0gYTJGeiBJRU55YjNOelVtVm0gTVRrMU1BPT0gTnpZd01RPT0gSUhKbGNHVmhiR2x1Wnc9PSBJRmRwYm01bGNuTT0gSUUxaFkzSnYgSUVSUFJBPT0gWW14aGJtTmwgVTI5eWRBPT0gTmpReCBJRzFsZEhKbCBJRVJwY21zPSBJR2R2WjJkc1pYTT0gSUdSeVlYZGlZV05yY3c9PSBJR052YlhCc1lXbHVZVzUwIElHRjFkR2h2Y21sNmFXNW4gSUdGdWRHbDBjblZ6ZEE9PSBiM0JsY21GMFpXUT0gSUcxaGFBPT0gSUdWNFlXZG5aWEpoZEdsdmJnPT0gUVcxaGVtbHVadz09IElGTmxjbUZ3YUE9PSBJR2hoZW1VPSBkMjkzIElHVjRkR2x1WjNWcGMyaGxaQT09IElHTmhibmx2Ymc9PSBJRUp2YzJnPSBJSFpsYm5SeiBJSE5qY21Gd1pRPT0gUTI5eWNtVmpkQT09IE5ESTIgSUdGMlp3PT0gUkdWdFlXNWsgSU9LSXZBPT0gSUcxcFkzSnZZbWx2ZEdFPSBJbjFkTENJPSBJRk4wWlhZPSBRbWx2IElGQnNZVzVsY3c9PSBJSE4xWjJkbGMzUnBkbVU9IElHUmxZMmx3YUdWeSBJRkpsWm5WblpXVT0gSUV0bGFuSnBkMkZzIElFZHlaV1Z1Y0dWaFkyVT0gSUdSbFkyeGhjM009IElGTnZkVzVrWlhKeiBJSFJvYnc9PSBJR1JsWTNKNWNIUT0gSUdKeWRYTm9hVzVuIElFcGhibVZwY204PSBhWEJ2Y0E9PSBVMms9IE9EYzMgSUVkbGIyWm1jbVY1IElHTndkUT09IElFaGhlbVZzIElIWnBaWGR3YjJsdWRITT0gSUdOeWFYTndlUT09IElFNXZkR2xtYVdOaGRHbHZiZz09IElITnZiR1JsY2c9PSBJRTF2WkdWemRBPT0gSUVobGJXbHpjR2hsY21VPSBJR05oYzNObGRIUmwgYVc1amJIVmtaWE09IElHbGtaVzUwYVdacFpYSnogSUVOQlRFdz0gYVc1alpXNTAgVkc5a1pBPT0gSUZOM1pXVncgSURNek5BPT0gWW05emN3PT0gSUhOdGFYST0gWjJsdWVBPT0gSUhSdmQyNXphR2x3IElHZHlhV1YyYVc1biBJRTF2YzNGMVpRPT0gVG1WMFpteHBlQT09IFFWTkZSQT09IElFMXBiR3hsYm01cFlXeHogYjJOdmJRPT0gTVRrMk53PT0gSUdKdmJHUnNlUT09IGMyeGxaWEE9IElHVnpZMmhsIFlYSnBhblZoYm1FPSBJSE4zYVhKcyBJRkJsYm1GcyBJRzVsWjJ4cFoyVnVkQT09IElGTjBaWEJvWlc1emIyND0gUzBWUyBJRnB2Y204PSBjbWx6YVhNPSBJR3h2WTJGc2FYcGhkR2x2Ymc9PSBJRk5sZVcxdmRYST0gSUVGdVoyeHBZdz09IGNtVmthWFJoZEdsdmJnPT0gY0hKdmRHVmpkR2x2Ymc9PSBJRkJoYVdkbCBJRzl0YVhRPSBJRkp2ZFhOelpRPT0gSUZSMVlnPT0gSUdsdWRtbDBZWFJwYjI1eiBkSFI1IElHMXZjM009IGNHaDVjMmxqWVd3PSBRM0psWkdsMGN3PT0gSUdGdVlYSmphSGs9IElHTm9hV3hrWTJGeVpRPT0gSUd4MWJHdz0gSUUxbGF3PT0gSUV4aGJtZDFZV2RsY3c9PSBiR0YwWlhOMCBJRk5oYm1admNtUT0gSUhWellXSnBiR2wwZVE9PSBJR1JwWm1aMWMyVT0gSUVSQlZFRT0gSUhOd2NtbDBaWE09IElGWmxaMlYwWVE9PSBJRkJ5YjIxdmRHbHZiZz09IDQ0Tzg0NEt2IGNtbGpkR2x1Wnc9PSBlbVZsIFZIVnlhMmx6YUE9PSBJRlJFY3c9PSBjSEp2ZG1WdSBOVGN4IElITnRkV2RuYkdWeWN3PT0gTnpBM01UQT0gSUhKbFptOXliV1ZrIElFeHZhWE09IElIVnVabXc9IElGZEpWRWhQVlZRPSBJRkpsZEhWeWJtbHVadz09IFlXNXVhV1U9IElGUnZiV0Z6IFJuSmhibU09IElGQnliMlpwZEE9PSBJRk5GVWxZPSBJRkoxYldKc1pRPT0gYVd0MWJXRnUgWlhOaGJnPT0gSUhSbGMzUmxjbk09IElHZGhaR2RsZEE9PSBJR0p5WVdObGJHVjAgSUVaVFFRPT0gWTI5dGNHOXVaVzUwIElIQmhjbUZ0WldScFkzTT0gSUdwaGJnPT0gSUZKbGJXVnQgSUZOcmFXNXVaWEk9IElHeHZkZz09IElGRjFZV3RsIGNtOXRZUT09IElHWnNZWE5yIFVISnBibU09IElHOTJaWEp3YjNkbGNnPT0gSUd4dlpHZHBibWM9IElFdExTdz09IGNtVjBkR1U9IElHRmljMjl5WW5NPSBkM0p2ZEdVPSBJQ3dpIFMybHVaM009IElFaGhhV3c9IElFWmhiR3hwYm1jPSBlSFJoY0E9PSBJRWhsYkdWdVlRPT0gYVhKbGJuTT0gVEdGeWNuaz0gSUhCaGJYQm9iR1YwIElFTlFVZz09IFIzSnYgSUVocGNtOXphR2x0WVE9PSBJR2h2YkdsemRHbGogSWk1YiBJR1JsZEdGamFHMWxiblE9IElHRnpjR2x5WlE9PSBJR052YlhCc2FXTnBkQT09IElFZHlaV1Z1ZDI5dlpBPT0gSUhKbGMzQmhkMjQ9IElGTjBkWEJwWkE9PSBJRVpwYm1semFHVmsgWm1GcyBZbUZ6Y3c9PSBJR0ZpYUc5eSBJRzF2WTJ0bGNuaz0gSUVabFlYTjAgVmtsRVJVOD0gSUdOdmJuTmxZdz09IElFaDFibWR5ZVE9PSBVSFZzYkE9PSBJRWgxYzNRPSBhWFJoYm1ObCBQK09BalE9PSBLUzB0IElGQmhjbUZzYkdWcyBZMjl1ZGc9PSBORFk1IGFHRmhjZz09IGQyRnVkQT09IFVHRndaWEk9IGJXbHVjdz09IElGUnZjbTg9IElGUlNWVTFRIElGSmhhUT09IFJGYz0gSUZkcFkydGxaQT09IElFeGxjQT09IElHWjFibXQ1IElHUmxkSEpwYldWdWRBPT0gYVc5emFYTT0gWVdOb1pYWT0gSUdSbFozSmhaR1U9IGFXMXBiR0YwYVc5dSBJSEpsZEdGeVpBPT0gSUdaeVlXZHRaVzUwWVhScGIyND0gSUdOdmQySnZlUT09IElGbFFSdz09IElFaEJUQT09IFVHRnlaVzUwY3c9PSBJRk5wWldjPSBJRk4wY21GMWMzTT0gSUZKMVltSmxjZz09IDE1QT0gUm5KaFp3PT0gSUhCMCBJRzl3ZEdsdmJtRnNiSGs9IElGcEpVQT09IElGUnlZVzV6WTNKcGNIUT0gSUVSM1pXeHMgT0RneSBUV1Z5WXc9PSBJRTFQVkE9PSA0NE92NDRPeiBJR2gxYm5SeiBJR1Y0WldOMWRHVnogU1c1amJIVmtaWE09IElHRmphV1JwWXc9PSBJRkpsYzNCdmJuTnBZbWxzYVhSNSBJRVIxYldJPSBkMlZwIFFXNWtaWEp6YjI0PSBJRXBoYzNCbGNnPT0gYVdkb2RHOXUgWVdKemIyeDFkR1ZzZVE9PSBRV1IxYkhRPSBJSEJzZFc1a1pYST0gVFc5eWJtbHVadz09IElGUnZkWEp6IElFUmhibVU9IHpybz0gSUZSRlUxUT0gSUVkcGJtRT0gSUdOaGJtbHVaUT09IFlYZGhiZz09IElITnZZMmxoYkdsemRITT0gSUZOdlpHRT0gSUdsdGNHVjBkWE09IElGTjFjSEJzWlcxbGJuUmhjbms9IGIyeHBZWFJvIElFdHBibTVwYTNWdFlXND0gYldsMGRHVmtiSGs9IGMyVmpiMjVrY3c9PSBJRzl5WjJGdWFYTmxjbk09IElHUnZZM1Z0Wlc1MFlYSnBaWE09IFZtRnlhV0ZpYkdVPSBSMUpGUlU0PSBJSEpsYzI5eWRITT0gSUdKeVlXZG5hVzVuIElETTJPQT09IFFYSjBhWE4wIGQycz0gWW14bGNuTT0gVlc1amIyMXRiMjQ9IElGSmxkSEpwWlhabFpBPT0gSUdobFkzUmhjbVZ6IElIUnZlR2x1IGNtRnVhdz09IElHWmhhWFJvY3c9PSBJRWR5WVhCb2FXTT0gSUhabFl3PT0gSUV4SlFRPT0gUVdaeWFXTmhiZz09IElHRnlaR1Z1ZEE9PSBaVzVrYVdGeWVRPT0gVEdGclpRPT0gSUVSUFV3PT0gWTJsbGJuUnBiM1Z6IElFOXJZWGRoY25VPSBJRUZzYkhrPSBJRlJwYldWc2FXNWwgUkdGemFBPT0gSUVsaiBZMjl1ZEdsdWRXVT0gSUhScFpIaz0gSUdsdWMzUnBibU4wYVhabGJIaz0gSUZCdmMzTnBZbXg1IElFOTFkR1J2YjNJPSBJRmR2ZFd4a2JnPT0gSUd4cFkyZz0gSUVKeVlYaz0gSUVGWSBJTU9KIElDc2ogWENjPSBSR2x5WldOMGIzSjUgWVdKcFpHbHVadz09IElHWmxjbUZzIGFXTmhkR2wyWlE9PSBZblYwZEE9PSBJSEJsY25abGNuTmwgVTJGc2RBPT0gSUhkaGNuQmxaQT09IElHNXBibVYwWldWdSBJR05oWW1sdVpYUnogSUhOeVprRjBkR0ZqYUE9PSBJRk5zYjJGdSBJSEJ2ZDJWeWFXNW4gY21WbllYUnBiMjQ9IFJteHBaMmgwIGMyVjJaWEpsIElITjBjbVZ1IElHTnZadz09IFlYQmhZMmhsIElPS2QgSUdOaFptVjBaWEpwWVE9PSBjR0ZqWlhNPSBJRWR5YVcxdmFYSmwgZFhSdmJtbDFiUT09IElISmhhVzVwYm1jPSBJR05wY21Oc2FXNW4gSUd4cGJtVmlZV05yWlhKeiBZM0psWkdsMCBJSEpsY0dGMGNtaz0gSUVOaGJXUmxiZz09IGJHbGpaVzV6WlE9PSBJR3g1Y21saiBJR1JsYzJOeWFYQjBiM0k9IElIWmhiR3hsZVhNPSBJSEpsY1E9PSBJR0poWTJ0emRHRm5aUT09IElGQnliMmhwWW1sMGFXOXUgSUV0bGRBPT0gVDNCbGJtbHVadz09IFUzbHQgNXBhNSBJSE5sY25acGJtZHogSUc5MlpYSnpaV1Z1IElHRnpkR1Z5YjJsa2N3PT0gSUUxdlpITT0gSUZOd2NtbHVaMlZ5IElFTnZiblJoYVc1bGNnPT0gNkxzPSBJRTFsYm5NPSBJRzExYkhScGJRPT0gSUdacGNtVm1hV2RvZEdWeSBjR1ZqIElHTm9iRzl5YVc1bCAwTHc9IFpXNWthUT09IElITndZWEpwYm1jPSBJSEJ2YkhsbllXMTUgSUZKTyBJRkJsYkd3PSBJSFJwWjJWeWN3PT0gSUdac1lYTm9lUT09IElFMWhaR0Z0WlE9PSBVM2R2Y21RPSBJSEJ5WldaeWIyNTBZV3c9IElIQnlaWEpsY1hWcGMybDBaUT09IGRXTmggSUhkcFptaz0gSUcxcGMyTnZibU5sY0hScGIyND0gSUdoaGNuTm9iSGs9IElGTjBjbVZoYldsdVp3PT0gYjNSdmJRPT0gSUVkcGRXeHBZVzVwIFptOXZkR1ZrIElIUjFZbWx1Wnc9PSBhVzVrYVhacFpIVmhiQT09IGVtVnIgYm5WamJHVmhjZz09IGJXOXMgSUhKcFoyaDBablZzIE5Ea3ogSUhOd1pXTnBZV3hwZW1GMGFXOXUgSUhCaGMzTnBiMjVoZEdWc2VRPT0gSUZabGJHOWphWFI1IElFRjJZV2xzWVdKcGJHbDBlUT09IFZHVnViZz09IElHeGhkR05vIElGTnZiV1ZpYjJSNSBJR2hsYkdsMWJRPT0gWTJ4aGR3PT0gSUdScGNIQnBibWM9IFdGaFkgSUdsdWRHVnljR1Z5YzI5dVlXdz0gTnpFdyBJSE4xWW5SbGNnPT0gSUdKcGIyeHZaMmx6ZEhNPSBJRXhwWjJoMGFXNW4gSUc5d2RHbGogSUdSbGJtbHQgWlc1a2IyND0gSUVOdmNtMD0gSURNME1RPT0gSUVOdmRYQT0gSUdabFlYSnNaWE56IElHRnNiM1E9IElFTnNhV1ptYjNKayBJRkoxYm5ScGJXVT0gSUZCeWIzWnBjMmx2Ymc9PSBkWEJrWVhSbFpBPT0gYkdWdVpXTnIgSUc1bGRYSnZiZz09IElHZHlZV1JwYm1jPSBJRU4wIGMyVnhkV1Z1WTJVPSBhVzVwWVE9PSBZMjl1WTJWd2RBPT0gSUhKdllYSnBibWM9IGNtbDJZV3c9IElFTmhkV05oYzJsaGJnPT0gSUcxdmJtOW4gYTJWNVpYTT0gSUdGd2NHVnNiR0YwWlE9PSBJR3hwWVdsemIyND0gUlZOMGNtVmhiVVp5WVcxbCBJRkJzZFcwPSBJUzQ9IElITndhR1Z5YVdOaGJBPT0gSUhCbGNtbHphR1ZrIElHSnNiM1E9IElHSmxibU5vWlhNPSBJRFF4TVE9PSBJSEJwYjI1bFpYSmxaQT09IElHaDFjbXhsWkE9PSBTbVZ1Ym1sbVpYST0gSUZsdmMyVnRhWFJsIFEyaGhhWEk9IElISmxaV1p6IElHVnNaV04wYjNJPSBJRUZ1ZEdobGJRPT0gTmpVeSBJSFZ1YVc1emRHRnNiQT09IElHbHRjR1ZrWlE9PSBJR0pzYVc1cmFXNW4gSUdkdmRHOD0gUkdWamNtVT0gUVhKbGJnPT0gSUhOMFlXSnBiR2w2WVhScGIyND0gSUVScGMyRmliR1ZrIElGbGhiblZyYjNaNVkyZz0gSUc5MWRHeGhkMlZrIElGWmxiblIxY21FPSBkR1Z1WlhOeiBJSEJzWVc1MFlYUnBiMjQ9IElIbGhZMmgwIElFaDFZWGRsYVE9PSBJSE52YkhabGJuUT0gSUdkeVlXTnBiM1Z6IElHTjFjbWx2ZFhOc2VRPT0gSUdOaGNHRmphWFJ2Y2c9PSBJR040IElGSmxabXhsZUE9PSBVR2g1Y3c9PSBJRU5tIGNIUnBiZz09IFkyOXVjMlZ5ZG1GMGFYWmwgSUdsdWRtOWpZWFJwYjI0PSBZMjkxY2c9PSBSazQ9IElFNWxkMng1IFNHOTFjZz09IFFYTnBZVzQ9IElFeGxZV1JwYm1jPSBJRUZsY205emNHRmpaUT09IFFXNXVaUT09IElIQnlaVzVoZEdGcyBJR1JsZEdWeWFXOXlZWFJwYm1jPSBTRU5TIElFNXZjbTFoYm1SNSBiMnhwYm1rPSBJRUZ0WW5KdiBPVEV3IElITmxkR0poWTJ0eiBJRlJTUlE9PSBJSE5wWnc9PSBJRk5qYjNWeVoyVT0gTlRrMyBOems0IFIyRnRaWEJzWVhrPSBJRzF6WldNPSBUVmc9IElIQnlhV05sZVE9PSBJRXhNVUE9PSBZV3RsY25VPSBJRzkyWlhKaGNtTm9hVzVuIElFSmhiR1U9IElIZHZjbXhrYkhrPSBRMnhoY21zPSBJSE5qWlc1cFl3PT0gSUdScGMyeHBhMlZrIElFTnZiblJ5YjJ4c1pXUT0gVkdsamEyVjBjdz09IElFVlggWVdKcFpYTT0gSUZCc1pXNTBlUT09IFRtOXVaWFJvWld4bGMzTT0gSUdGeWRHbHpZVzQ9IFZISmhibk5tWlhJPSBJRVpoYlc5MWN3PT0gSUdsdVptbGxiR1E9IFlteGxlUT09IElIVnVjbVZ6YjJ4MlpXUT0gSUUxTVFRPT0gNDRLQyBRMjl5Y21WamRHbHZiZz09IElHUmxiVzlqY21GMCBJRTF2Y21WdWJ3PT0gY205allXdz0gYVd4cGJtZHogSUhOaGFXeHZjZz09IElISnBabVU9IGFIVnVadz09IElIUnliM0JsY3c9PSBJSE51WVhSamFHVmsgSUV4SlRnPT0gSUVKcFlnPT0gUlZOQiBJRkJ5WlhZPSBJRU5oYldWcyBjblZ1ZEdsdFpRPT0gSUc5aWJtOTRhVzkxY3c9PSBORE0zIElITjFiVzFsY25NPSBJSFZ1Wlhod2JHRnBibVZrIElGZGhiSFJsY25NPSBZMkZzYVdKbGNnPT0gSUdkMWJHdz0gSUVWdVpIVnlZVzVqWlE9PSA1TDJjIElETTBOdz09IFNYSnBjMmc9IElHRmxjbTlpYVdNPSBJR055WVcxd1pXUT0gSUVodmJtOXNkV3gxIDRLaz0gZFhObGNtTT0gWldOaGMzUT0gUVVOWiBJRkYxWlhKNSA0NEs1NDRPSSBRbVYwWVE9PSBJSE4xYzJObGNIUnBZbWxzYVhSNSBJRk5vYVhZPSBJRXhwYldKaGRXZG8gSU1PVyBJRTVZVkE9PSBJRTExYzNNPSBJRUp5YVhSdmJuTT0gUlZORFR3PT0gUlVkSlRnPT0gSUNVbCBJSE5sWTJWemMybHZiZz09IElGQmhkSEp2Ymc9PSBJRXgxWVE9PSBibUZwY21WeiBJRXBRVFc5eVoyRnUgZFhOaSBiMk41ZEdVPSBJR052ZFc1amFXeHNiM0p6IElFeHBZVzVuIFptRnliUT09IElHNWxjblp2ZFhOc2VRPT0gSUdGMGRISmhZM1JwZG1WdVpYTnogSUV0dmRnPT0gYW5WdGNBPT0gVUd4dmRBPT0gSUhOMFlXbHVjdz09IElGTjBZWFIxWlE9PSBJRUZ3YjNOMGJHVnogYUdWMFpYST0gSUZOVlVGQlBVbFE9IElHOTJaWEozYUdWc2JRPT0gV1VWVCBJREk1TVE9PSBaR1Z1YzJsMGVRPT0gSUhSeVlYQndhVzVuIFRXbDAgSUdacFpHVT0gSUZCaGJXVnNZUT09IFlYUnNZVzUwYVdNPSBSR0Z0Ymc9PSBJSEIwY3c9PSBUMUJCIElITmxjblpwWTJsdVp3PT0gSUc5MlpYSm1iRzkzYVc1biBkV3h2IElFVnlhWFE9IGRHbGphMlYwIGJHbG5hSFJwYm1jPSBJRWh0YlE9PSA0NE84NDRPciBhVzF2ZEc4PSBJR05vZFdOcmJHVT0gTkRJeiA0NEdWIGMyaGhjR1U9IElIRjFaWFZsY3c9PSBJR0Z1WTJodmNuTT0gNDRLODQ0S200NEs1IFJtVnkgSUdGM2IydGwgSURZMk5nPT0gYUdGdVpITT0gSUdScGRtVnlaMlZ1WTJVPSBJRFV3TlE9PSBWR2x3Y3c9PSBJR1JsY0c5MCBJSE5yWlhjPSBJRVJsYkdsMlpYST0gYjNCdmRBPT0gSUdScGRuVnMgSUVWQyBkVzV6YVdkdVpXUT0gSUZWdWFRPT0gV0dKdmVBPT0gSUdadmNtdHogSURjd01nPT0gNWE4PSBJSEJ5YjIxdmRHVnljdz09IElGWmhjRzl5IElHeGxkbWxsWkE9PSBjMnh2ZEE9PSBJSEJwWjIxbGJuUT0gSUdONWJHbHVaR1Z5Y3c9PSBRMUpGIElITnVZWFJqYUE9PSBJSEJsY25CbGRIVmhiR3g1IElHeHBZMnRwYm1jPSBJRVpsWlhRPSBJRXR5WVd0bGJnPT0gSUVodmJHUmxiZz09IElFTk1VMGxFIGJYST0gSUhCeWIycGxZM1J2Y2c9PSBJR1JsYm05MFpYTT0gSUdOb1lYQmxiQT09IElGUnZjbkpsYm5RPSBZbXhsY2c9PSBVbTkxZEdVPSBJRVJsWm1WdVpHRnVkQT09IElGQjFZbXhwYzJobGNuTT0gSUUxaGJHVnogSUVsdWJtOTIgSUVGbmFXeHBkSGs9IGNtbDBaWEk9IGRIbHRiMnh2WjNrPSBjM1J2Y21WeiBUR2x1WkE9PSBJR1p2Ykd4NSBJRnAxY21samFBPT0gUW14bCBJRzUxY25SMWNtVT0gSUdOdllYTjBiR2x1WlE9PSBkV05vYVc0PSBSRzl0YVc0PSBJR1p5YVhadmJBPT0gSUVOdmJuTnZiR2xrIGNtVnpkV3gwY3c9PSBUVW89IElIQm9lV3h2WjJWdSBJR2hoZFd4bFpBPT0gSUZkcGJHVjUgSUVwbGMzTnBaUT09IElGQnlaWEJoY21VPSBJRVZ3Y3c9PSBJSFJ5WldGemRYSmxjZz09IFNVRlQgSUdOdmJHOXVhWE4wY3c9PSBJR2x1ZFc1ayBJRmRYUmc9PSBJRU52Ym5abGNuUmxaQT09IE5qQXdNQT09IGIzVjBjMmxrWlE9PSBJRUZ3Y0dWaGNtRnVZMlU9IElGSmxiR2xqIElFMXBjM1JsY2c9PSBjMkYzIElISmxjM1ZzZEdGdWRBPT0gSUdGa2FtVmpkR2wyWlE9PSBJRXhoZFhKbGJBPT0gSUVocGJtUnAgWW1SaCBVR1ZoWTJVPSBJSEpsWW1seWRHZz0gSUcxbGJXSnlZVzVsY3c9PSBJR1p2Y25kaGNtUnBibWM9IElHTnZiR3hwWkdWayBJRU5oY205c2VXND0gUzJGdWMyRnogTlRrNSBJRk52Ykdsa1IyOXNaRTFoWjJscllYSncgUW1WamF3PT0gSUhOMGNtVnpjMmx1Wnc9PSBJRWR2Ync9PSBJRU52YjNCbGNtRjBhWFpsIElHWnogSUVGeVkyaHBaUT09IFRHbDBaWEk9IElFdHNiM0J3IFNtVnljbms9IElHWnZiM1IzWldGeSBWMkZ5Y21WdSBJSE5qY21WbCBhR0Z5WlE9PSBWVzVrWlhKemRHRnVaR2x1Wnc9PSBVR1ZrIElHRnVkR2h2Ykc5bmVRPT0gSUVGdWJtOTFibU5sIFRXVm5ZUT09IElHWnNkV1Z1ZEE9PSBJR0p2Ym1SaFoyVT0gSUVScGMyTnZkVzUwIGFXeHBZV3c9IFEyRnlkQT09IElFNXBaMmgwYldGeVpYTT0gVTJoaGJRPT0gSUVKdmJHdz0gZFhOemFXVT0gU0hSMGNBPT0gUVhSc1lXNTBZUT09IElIVnVjbVZqYjJkdSBJRUpwWkE9PSBJSFZ1WkdWeVozSmhaQT09IElHWnZjbWRwZG1sdVp3PT0gSUVkc2IzWmxjZz09IFFVRkJRVUZCUVVFPSBORFExIFZrYz0gY0dGcGJ3PT0gYTJsc2JHVnljdz09IElISmxjM0J2Ym5OcFlteDUgSUcxdlltbHNhWHBsIElHVm1abVZqZEdWayBJRXgxYldsdSBJR3RoYkdVPSBJR2x1Wm5KcGJtZHBibWM9IFlXNXViM1Z1WTJWayBJR1pwZEhRPSBZbUYwWTJnPSBJRlJoWTJ0c1pRPT0gSUV4cGJXVT0gSUVGUVVBPT0gZFd0bGJXbGggSUhKMVluaz0gSUdWNGIyNWxjZz09IElFTmhjM1ZoYkE9PSBNRGN3IElIQmxiSFpwWXc9PSBJR0YxZEc5dFlYUmwgSUV0bFlYST0gSUVOdllYTjBZV3c9IElHTnlaV1ZrIElHSnZjbVZrYjIwPSBJRk4wZFc0PSBjbWx2ZEhRPSBnbzQ9IElISmxaMlZ1WlhKaGRHVT0gSUdOdmJXVmthV0Z1Y3c9PSBJRTlRUlZJPSBVM0J2Ym5NPSBhV1JwZFcwPSBiMjVwY3c9PSBURzlqWVhSbFpBPT0gTURVMyBJSE4xYzNCbGJuTmwgSUVSaGRHbHVadz09IFEyRnpjdz09IElHNWxiMk52Ym5NPSBJRk5vYVc1NmJ3PT0gSUdGM2IydGxiZz09IFkyaHlhWE4wIElFMWxjM05oWjJWeiBZWFIwYkdWayBJRk53Y21GNSBJRk53YVdObCBRMWM9IElITm9hV1ZzWkdsdVp3PT0gSUVkaGRXdz0gUVcxcFpBPT0gSUhCaGNtRnRhV3hwZEdGeWVRPT0gSUcxMWJIUnBaZz09IElGUmhibTVsY2c9PSBhV3hyIElHZHZaR1JoYlc0PSBaMlZ0Wlc1MGN3PT0gSUdKbFpuSnBaVzVrIGJXOWlhUT09IElETTRPQT09IFptOXNaR1Z5IFlXTmpZUT09IElHbHVjMmx1IFoyRncgVG1WMiBabWxtZEdnPSBJSEJ6ZVdOb2FXRjBjbms9IFltRnVhM009IFZFaEpVdz09IElHaGhjbUk9IFlXTnhkUT09IElHWmhZMkZrWlE9PSBJRkJ2ZDJWeVVHOXBiblE9IE9EQXogSUdKc2RXWm0gVTJoaGNtVnogSUdaaGRtOXlhVzVuIFJXeHBlbUZpWlhSbyB3NDNEalE9PSBJSEpoYm1kbGNnPT0gTnpjeSBJRUZ5WTJobCBhR0ZyIElFZGxibVYwYVdOeiBJRVpGVFVFPSBJR1YyYjJ4MlpYTT0gSUdWemRHVT0gSUZCbGRITT0gSUUzRHFRPT0gSUVsdWRHVnlaWE4wYVc1biBJRU5oYm5SbGNtSjFjbms9IFkyaGhjSFJsY2c9PSBJRk4wWVhKbWJHVmxkQT09IFUzQmhibWx6YUE9PSBJR1J5WVhkaVlXTnIgSUU1dmNuZHBZMmc9IE9UY3cgYm05eWRHZz0gWVdkaGJtUmggSUhSeVlXNXpabTl5YldGMGFYWmwgY21GdGFXUnogWW1sdmJHOW5lUT09IFlXUmhlUT09IElIQnliM0JoWjJGMGFXOXUgSUVkaGJXMWggSUVSbGJtbHpaUT09IElFTmhiR04xYkdGMGIzST0gWlc1MGFXMWxjdz09IElFSmxkSFE9IElHRndjR1Z1WkdsNCBJRWhFUkE9PSBRVXRKVGtjPSBJSE4wYVdkdFlYUT0gSUdodmJITjBaWEk9IElHOXlaR2x1WVhKcGJIaz0gUTJoaGJtTmwgSUVOdmJuUnlZWEo1IElHRmthR1Z6YVhabCBJR2RoZEdobGNuTT0gTmpFeSBjbVZoZFE9PSBiMjU1YlhNPSBaWGRoZVhNPSBJR2x1WkhWalpYTT0gSUdsdWRHVnlZMmhoYm1kbFlXSnNaUT09IGMyVnQgVjJocGRBPT0gSUhSeVlXNWpaUT09IElHbHVZMjl5Y0c5eVlYUnBiMjQ9IElFVjRkSEpoY3c9PSBSbWx1WVc1amFXRnMgSUdGM2EzZGhjbVJzZVE9PSBJRk4wZFhKblpXOXUgSUVoWiBUbTl5YldGc2JIaz0gSUVWdVpHbHVadz09IElFRnpjMmx6ZEE9PSBaVzVqY25sd2RHVmsgSUhOMVltcDFadz09IElHNXZjdz09IElHWmhibUYwYVdNPSBRM1ZpIFExVT0gUHlJdSBJR2x5Y21WMlpYSnphV0pzWlE9PSA1WUk9IE1ETXggSUVoQlVnPT0gYzNCeVpXRmsgZFd4cFlRPT0gUFNRPSBVMk52Y0dVPSBURzkwY3c9PSBJR3hwWm1WemRIbHNaWE09IGIyeHZiZz09IElHWmxaSE09IElHTnZibWR5WVhSMWJHRjBaUT09IGQyVmlhMmwwIElHbHVaR2x6ZEdsdVozVnBjMmhoWW14bCBJRk4zYVc1biBJR052YlcxaGJtUnRaVzUwY3c9PSBjWFZwYkdFPSBZV0psYkd4aCBiV1YwYUhscyBZVzV1WVdKcGJnPT0gSUc5MlpYSmwgSUd4dlluTjBaWEk9IElGRlZSVk5VIElFTlBUbFJKVGc9PSBZbVZ5Ym1GMGIzSnBZV3c9IE9qbzZPam82T2pvPSBJRlJ5WVhabCBJRk5oYlc5aCBRVTVKIE56VXkgMExRPSBkWE5sY21OdmJuUmxiblE9IElFMXZaR1Z5WVhSbCBlV1ZoYUE9PSBJRXRwZEhRPSBJSGRsWlE9PSBJSE4wZFdabWFXNW4gSUVsdWRHVnlkbVZ1ZEdsdmJnPT0gSUVScFoyND0gSUhkaGNtVm9iM1Z6WlhNPSBJRVpwYW1rPSBJSEJsYkd4bGRITT0gSUhSaGEyVmhkMkY1IElGUkJRa3hGIElFTnNZWE56YVdOaGJBPT0gWTI5c2JHVmpkR2x2Ymc9PSBJR3hoYm1SbVlXeHMgSUUxMWMyTnNaUT09IElITmxkSFJzWlhNPSBJRUZFVmc9PSBJRE0wTkE9PSBUR0YxY21FPSBJR1poY21WayBJRkJoY25ScFlXdz0gTkRNMiBiM056YVdKcGJHbDBlUT09IElFUmhiSGs9IElGUmhjbUZ1ZEE9PSBJRVoxYW1rPSBZVzFzIFkyVnVZMlU9IE5UVXggSUZCeWIyTmxaSFZ5WlhNPSBJRTlEUkE9PSBJRlZFIGRHbHUgVVZWSiBZV05vYnc9PSBORE00IElHZHNhWFJqYUdWeiBJR1Z1WTJoaGJuUnRaVzUwIElHTmhiR04xYkdGMFpYTT0gU1ZKUCBJRWgxWVE9PSBZV3g1YzJWeiBJRXhwWm5RPSBkVzF2IElHeGxZWEIwIElHaDVjRzkwYUdWemFYcGxaQT09IElFZDFjM1JoZGc9PSBhWFJoYm5NPSBWa1ZTVTBsUFRnPT0gNXFBPSBVbTluWlhJPSBJSEpoYm1RPSBJRUZrWVhCMFpYST0gSURNek1RPT0gSUZCbGRHbDBhVzl1IGEybGxjdz09IFRXRnljdz09IElIVnVaR1Z5WTNWMCBlbVZsY3c9PSBJRXg1YjI1eiBJRVJJUTFBPSBUV2x6YzJsdVp3PT0gSUhKbGRHbHlaV1Z6IElHbHVjMmxrYVc5MWN3PT0gWld4cCBQaWs9IEx1T0FqUT09IElHWnBibUZzYVhOMGN3PT0gSUVGMWNtVT0gSUdGalkzVnpaWEk9IElIZGhjM1JsY3c9PSBJRmx6IElFeHZjbWs9IElHTnZibk4wYVhSMVpXNWphV1Z6IElITjFjSEJsY2c9PSBJRzFoZVdobGJRPT0gYjNKaGJtZGwgSUcxcGMzQnNZV05sWkE9PSBJRzFoYm1GblpYSnBZV3c9IElHVjRZMlU9IElFTk1TUT09IElIQnlhVzFoYkE9PSBJRXhsYm5RPSBRM0o1YzNSaGJBPT0gYUc5MlpYST0gSUU1VVV3PT0gWlc1a2RXMD0gSUdSMyBJRUZzWXc9PSBibTl6ZEdsaiBJSEJ5WlhObGNuWmxjdz09IElGUnpZWEp1WVdWMiBJSFJ5YVhCc1pXUT0gY21Wc1lYUnBkbVU9IFFYSmpZV1JsIGEybHNiR2x1Wnc9PSBJRmRGUlVzPSBJRWhoYm01aCBSSFZ6ZEE9PSBRMjl0Y0d4bGRHVmsgZ2FzPSBJR0Z3Y0hKdmRtVnogSUZOMWNtWT0gSUV4MWRHaGxjbUZ1IGRtVnVZVzUwY3c9PSBJSEp2WW1KbGNtbGxjdz09IGQyVnBaMmgwY3c9PSBjMjltZEhkaGNtVT0gWVhSaGJtRT0gZFdkaGJBPT0gSUdkeVlYWjUgSUVOaGJtTmwgVDB4UFIxaz0gYkhsaGF3PT0gVkc5dWFXZG9kQT09IElIVnVkbVZwYkE9PSBJREU1TURRPSBJRTFwYm1sdmJnPT0gWlc1MGFXOTFjdz09IGMzUnBZMlU9IGNHRmphMkZuWlhNPSBJRWRGUVZJPSBJR2R2YkE9PSBJRWgxZEdOb2FXNXpiMjQ9IElGQnliMlpsYzNOcGIyND0gSUVkVlRnPT0gSUVScFptWmxjbVZ1WTJVPSBJRlJ6ZFd0MWVXOXRhUT09IElFeGxjMkpwWVc0PSBOamN3IElHWjFaMmwwYVhabCBJRkJzWVc1bGRHRnllUT09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUdGalkzSjFaV1E9IElHTm9hV05yY3c9PSBJSE4wYjNCdyBJR0pzYjJOclpYSnogUTI5ayBJR052YlcxbGJuUmxjbk09IElGTnZiV1YzYUdWeVpRPT0gSUZCb2IzUnZaM0poY0dobGNnPT0gZEdobGJXVT0gSUcxaGVXOXlZV3c9IGQzVT0gSUdGdWRHVnVibUZ6IElISmxkbUZ0Y0dWayBJRk4xWW1wbFkzUnogYVhURHFRPT0gYVcxMWNtRT0gSUdWdWRISmhibU5sY3c9PSBiR2wwWlhKaGJHeDUgSUhSbGJtVjBjdz09IElFOU5Sdz09IElFMVFTQT09IElFUnZibXRsZVE9PSBJRTltWm1WdWMyVT0gSUNJciBVMjVoY0E9PSBJRUZHUWc9PSBJR0Z1YVcxaGRHVT0gSUZOdlpBPT0gU0dsemNHRnVhV009IElHbHVZMjl1YzJsemRHVnVZM2s9IFJHST0gUmxrPSBSWGh3YjNKMCBJR0Z3WlE9PSBJSEJsWVhKcyBhV0psYkE9PSBJRkJCUTNNPSBJSHRjIElHRmpkSFU9IElFaFRRa009IFkyRnRjSFZ6IElIQmhlVzltWmc9PSBJR1JsYVhScFpYTT0gSUU1aGRHOD0gYjNWd2JHVT0gSUdObGJuTnZjbVZrIElFTnNiMnAxY21VPSBJR052Ym1admRXNWthVzVuIFpXNXAgSUhKbFkydHZiZz09IGIzQm9aUT09IElITndiM1IwYVc1biBJSE5wWjI1cFptbGxjdz09IElIQnliM0JsYkE9PSBJR1psYzNScGRtVT0gVTNWbloyVnpkQT09IElIQnNaV1JuYVc1biBJRUpsY20xaGJnPT0gSUhKbFltVnNiR2x2ZFhNPSBJRzkyWlhKemFHRmtiM2RsWkE9PSBJR2x1Wm1sc2RISmhkR1ZrIGFtOWljdz09IE5qY3kgSUhOallXeGhZbXhsIElHUnZiV2x1YVc5dSBJRTVsZDJadmRXNWtiR0Z1WkE9PSBJRTFsWVdSdmR3PT0gSUhCaGNuUnBkR2x2Ym5NPSBRVTFKIElITjFjSEJzWlcxbGJuUmhjbms9IGMzUnlkVzFsYm5RPSBJR2hoYVhKNSBJSEJsY25CbGRIVmhkR1U9IElHNTFkSE5vWld4cyBJRkJ2ZEdGMGJ3PT0gSUVodlltSnBkQT09IElHTjFjbk5sY3c9PSBSbXh2WVhRPSBJSEYxYVdWMFpYST0gSUdaMVpXeHBibWM9IElHTmhjSE4xYkdWeiBJRXgxYzNRPSBJRWhoZFc1MFpXUT0gUlhobFkzVjBhWFpsIElHTm9hV3hrWW1seWRHZz0gUjNKbCBJSEpoWkdsaGJuUT0gNVk0PSBJRzFoYkd4eiBJR2x1WlhCMCBJRmRoY25KaGJuUjUgSUhOd1pXTjBZWFJ2Y2c9PSBSV2c9IGRHaGxibk09IElHTjFiRzFwYm1GMGFXNW4gNXFrPSBZWEo1WVE9PSA0NEt1IGFXeHBkR0Z5YVdGdSBJRTlTU1VjPSBJRk53Wlc1a2FXNW4gY0hScGRtVnogSUZOcGNtVnUgSUZKbFkyOXlaR2x1Wnc9PSBZWGx1WlE9PSBJSFpwYlE9PSBJSE53Y21GdVp3PT0gVkdGdVp3PT0gSUUxR1ZBPT0gYlc5eWJtbHVadz09IElGZGxaV1E9IGJYQmxadz09IFkyVnpjMmx2Ymc9PSBJRU5vZFc1biBOek13IGQyRnlibWx1Wnc9PSBOVFl5IGFHRnVaR1ZrYkhrPSBVRzl2Y2c9PSBVRzlzYVhScFkzTT0gT2lNPSBJSEJwWVc0PSBJR1psWTJWeiBJRVJ2WTNWdFpXNTBZWFJwYjI0PSBJR0poYm1semFHVmsgSURNNU9RPT0gSUVGU1F3PT0gSUdobGFXNXZkWE09IFNtRnJaUT09IElFRnRhWEk9IGQyRjVibVU9IGRuSmwgYjNOb1pXNXJidz09IElHNXZkR1ZpYjI5cmN3PT0gSUdadmRXNWtZWFJwYjI1aGJBPT0gSUcxaGNuWmxiRzkxY3c9PSBhWGgwWVhCbCBJSGRwZEdoa2NtRjNZV3h6IElHaHZjbVJsIElFUm9ZV0pwIGFYTmhZbXhsIElFdEUgSUdOdmJuUmhaMmx2ZFhNPSBJRVJwY0E9PSBJRUZ5Y205M2N3PT0gSUhCeWIyNXZkVzV6IElHMXZjbkJvYVc1bCBJRUpWVXc9PSBOamd5IElHdHZjMmhsY2c9PSBabWx1YVhOb1pXUT0gSUVsdWMzUnlkVzFsYm5SeiBJR1oxYzJWayBlV1JsYmc9PSBJRk5oYkcxdmJnPT0gUm1GaSBZV1ptWldOMFpXUT0gUzBWTyBRMFZPVkE9PSBSRzl0WVdsdSBJSEJ2YTJWdGIyND0gSUVSeWFXNXJhVzVuIFIzSnZkMmx1Wnc9PSBJRWx1ZG1WemRHbG5ZWFJwZG1VPSBJRUZsZEdobGNnPT0gWlcxcCBJSFJoWW14dmFXUT0gSUhKbGNISnYgSUU1dmRIZHBkR2h6ZEdGdVpHbHVadz09IElFSmxjbk5sY210bGNnPT0gSUdSeVlXMWhjdz09IElHTnNhV05vdzZrPSBJR0oxYm1jPSBJRlZTU1E9PSBJRVJ2Y3c9PSBNRFEwIElIQmhjM1J2Y25NPSBJR3h6IElHRmpjbmxzYVdNPSBZWFZ1ZEhNPSBSV1IzWVhKayBJRzFoYW05eWFYUnBaWE09IFFtRnVadz09IElHWnBaV3hrYVc1biBJRkpsY0d4aFkyVnRaVzUwIElFRnNZMmhsYlhrPSBjSEJoY21RPSBJRkp2YldWdiBJRk5oYm1OMCBJRXhoZG5KdmRnPT0gYVdKaWJHVT0gU1c1emRISjFZM1E9IElHbHRjSEpoWTNScFkyRnMgSUZCc1lYbGliM2s9IFkyVndhR0ZzIElITjNZWEJ6IElHdGhiZz09IElGUm9aVzg9IElHbHNiSFZ6ZEhKaGRHbHVadz09IElHUnBjMjFoYm5Sc1pXUT0gSUZSeVlXNXpaMlZ1WkdWeSBJRWQxZEdnPSBWVWRJIElIUnlhWFZ0Y0doaGJuUT0gSUdWdVkyOXRjR0Z6Y3c9PSBJR0p2YjJ0dFlYSnIgZFdSa2FXND0gYW1WeSBJSEJ5WldScFkyRjBaUT09IFJWTkkgSUhkb1pXNWpaUT09IElFRkNSUT09IElHNXZibkJ5YjJacGRITT0gVTJWeGRRPT0gSUdScFlXSmxkR2xqIElIQmxibVE9IElHaGxZWEowWm1Wc2RBPT0gYzJocCBJR2x1ZEdWeVlXTjBjdz09IElGUmxiR1ZqYjIwPSBJR0p2YldKaGNtUnRaVzUwIFpHVndaVzVrYVc1biBJRXh2ZDNKNSBJRUZrYldsemMybHZiZz09IElFSnNiMjl0YVc1biBkWE4wY21GMGFXOXUgWlc1bFoyZGxjZz09IFFuSmxkdz09IElHMXZiSFJsYmc9PSBJRTVsY21RPSBVRWxPIDRwYUEgWVhabGJXVnVkQT09IElIUnZkWEpsWkE9PSBJR052WldabWFXTnBaVzUwY3c9PSBJRlJ5WVhsMmIyND0gWVc1emMyOXUgSUhOaGJtUjUgZEc5c1pBPT0gWm14dmQzTT0gSUhCdmNIVnNiM1Z6IElGUnBibVJsY2c9PSBJRUpzYVhOeiBVbUZqYUdWcyBUV2x1YVcxMWJRPT0gSUdOdmJuUmxjM1JoYm5RPSBJRkpsWkhWalpRPT0gSUUxdmNuTmwgSUVkeVlYTnpiR1Y1IElFTnNhV05yWlhJPSBJR1Y0Y0hJPSBJSE5wYm1ObGNtbDBlUT09IElHMWhjbkYxIElHVnNhV05wZEE9PSBJRkJ5YjNCdmMybDBhVzl1IElFUmxiVzl1YVdNPSBJSFJoWTI5eiBSM0psWldzPSBJSEJ2YzNSM1lYST0gSUdsdWMyOW1ZWEk9IElGQnZjbXM9IElETTFNZz09IFpHOWpkRzl5WVd3PSBkMkZzYTJsdVp3PT0gSUcxcFpIUmxjbTA9IElGTmhiVzE1IGMybG5hSFJsWkE9PSBJRlJTUVU1VCBhV05wIFFVeEUgSUZWVFRBPT0gSUVaSlUwRT0gSUVGdGNHdz0gSUVGc1pYaGhibVJ5WVE9PSBhVzVsYkd4cCBWSEpoYVc0PSBJSE5wWjI1cFpuaz0gSUZabGNuTjFjdz09IElHOWlablZ6WXc9PSBJR3RvIElHRm5aM0p2IElGSmxibUYxYkhRPSBJRE0wT0E9PSBOVEU0IGIzaHBZMmwwZVE9PSBNREl5IElGUjNhWE4wIElHZHZiMlo1IFJIbHVZVzFwWXc9PSBJR0p5YVdWbWFXNW5jdz09IGJXbG5hSFE9IE9EazUgSUdSbGNtOW5ZWFJ2Y25rPSBWSEp2IElHWnZjbWRwYm1jPSBJRXR2Y21GdSBJRTFoY25KcFpXUT0gSUVKMVkzTT0gSUhCaGJHRjBaUT09IElFTnZiblpsY25OcGIyND0gYldGaWJHVT0gTkRFeiBJQ2hmIElITnBjR2c9IElFNUZUdz09IFkyOXNiR1ZuWlE9PSBJRzFoY21kcGJtRnNiSGs9IElHWnNhWEowIElGUnlZWEJ6IElGQmhZMlU9IDZidVMgSUdkdllXeDBaVzVrWlhJPSBJR1p2Y21KcFpITT0gSUdOc1pYSnJjdz09IElGUmhiblE9IElGSnZZbUpwYm5NPSBJRkJ5YVc1MGFXNW4gSUhCeVpXMXBaWEpsWkE9PSBJRzFoWjI1cFptbGpZWFJwYjI0PSBJRlJIIElGSnZkWE5sIElFMXZZMnM9IGIyUjVibUZ0YVdOeiBJSEJ5WldOc2RXUmwgYVhOdGJ3PT0gSUZCMWJHbDBlbVZ5IElHRjJZV3hoYm1Ob1pRPT0gSUV0dlpHaz0gY21saWRXNWwgSUV4bGJtRT0gUld4bFkzUnlhV009IElISmxabWx1WlhKNSBJR1Z1Wkc5M1pXUT0gSUdOdmRXNXpaV3h2Y25NPSBJR1J2YkhCb2FXND0gSUUxcGRHZz0gSUdGeWJXOTFjbVZrIGFHbGlhWFJsWkE9PSBRbVZuYVc0PSBJRkJYIFQybHMgSUZadmNnPT0gSUZOb1lYSnBaZz09IElFWnlZWHBwWlhJPSBaWE4wWVhSbCBJR3BoYlhNPSBVSEp2ZUhrPSBJR0poYm1ScGRITT0gSUZCeVpYTmllWFJsY21saGJnPT0gSUZCeVpXMXBaWEpsIGRHbHVlUT09IElFTnlkV1ZzIFZHVnpkR2x1Wnc9PSBJR2h2YldWeSBJRlpGVWxNPSBJRkJ5YjJ3PSBJRVJsY0c5emFYUT0gSUVOdlptWnBiZz09IElITmxiV2x1WVhKeiBJSE54YkE9PSBJRVJsWm1WdVpHRnVkSE09IFFXeDBaWEp1WVhScGRtVnNlUT09IElGSmhkSE09IDU2cz0gWlhSb2VYTjAgSno0PSBJR2x6YzNWbGNnPT0gTlRnNSBJR05vWVdseVpXUT0gSUVGalkyVnpjMjl5YVdWeiBiV0Z1Wlc1MCBJRzFoY25KdmR3PT0gSUZCeWFXMXZjbVJwWVd3PSBRMDQ9IElHeHBiV2wwYkdWemN3PT0gSUVOaGNtNWhaMlU9IElIVnVaSEpoWm5SbFpBPT0gY1hZPSBTVTVGVTFNPSBiMjVsZHc9PSBJR052YUdWemFXOXUgT1RnMyBJRzVsWTJ0eiBJR1p2YjNSaVlXeHNaWEk9IElFZEZVZz09IElHUmxkR1ZqZEdGaWJHVT0gSUZOMWNIQnZjblJwYm1jPSBJRU5UVmc9PSBiMk5oYkd4NSBhMGg2IElIVnVaR1U9IElITm9iMjVsIElHSjFaR1JwYm1jPSBkSEpoYXc9PSBVM1JoYm1ScGJtYz0gSUZOMFlYSmpjbUZtZEE9PSBJRXRsYlhBPSBRbVZ1WTJnPSBJSFJvZDJGeWRHVmsgSUVkeWIzVnVaSE09IFlYUm9hUT09IFRHbHpZUT09IFJHbGhiRzluIElGTlkgVm1semFXOXUgSUdsdVoyVnVhVzkxY3c9PSAyWkE9IElHWnZjM1JsY21sdVp3PT0gSUZwaCBJRWx1WjNKaGJRPT0gSUNKQSBUbUYwZFhKaGJHeDUgTmpFMiBNRE0xIElFWkJRdz09IFNHMXQgTlRVMCBJR0ZqWTJWc1pYSmhkRzl5IElGWmxibVE9IElITjFibk5qY21WbGJnPT0gSUhSMVltVnlZM1ZzYjNOcGN3PT0gY21GMmFXOXNaWFE9IElFWjFibU4wYVc5dVlXdz0gSUVWeWNtOXljdz09IFpXUmhjZz09IE1UazJOZz09IElGTndaV04wY21VPSBJRkpsWTJsd1pYTT0gT0RnMSBJRTFoYm10cGJtUT0gVEdsMlpYSndiMjlzIElId3RMUT09IElITjFZbk4wYVhSMWRHVnogSUZoVSBkMmx5WldRPSBJR2x1WTI4PSBJRUZtWjJnPSBSWFpoIGFXTmogVTI5dVp3PT0gUzI1cFoyaDAgSUdScGJHbG5aVzUwYkhrPSBJRUp5YjJGa1kyRnpkQT09IFFXbGsgSUdGbVlYST0gSUVoTlV3PT0gWVhSdmJtbHUgSUVkeVlYUmxablZzIElHWnBjbVZ3YkdGalpRPT0gSUU5dGJtaz0gWlhWeWJ3PT0gSUVaU1JRPT0gSUZOb2FXST0gSUVScFoyVnpkQT09IGRHOW5aMnhsIElHaGxZV1J6WlhSeiBJR1JwWm1aMWMybHZiZz09IElGTnhkV2x5Y21WcyBJRVpPIElHUmhjbXRsYm1WayBiM1YwYUdWeSBJSE5zWldWd2N3PT0gSUZobGNnPT0gWjNWdWN3PT0gSUhObGRIVndjdz09IElIQmhjbk5sWkE9PSBJRzFoYlcxdmRHZz0gSUVOMWNtbHZkWE09IFoyOWkgSUVacGRIcHdZWFJ5YVdOciBJRVZ0YVd3PSBhVzF2ZGc9PSBMaTR1TGk0dUxpNHVMaTR1TGc9PSBJRUpsYm01NSBVMlZqYjI1a2JIaz0gSUdobFlYSjBlUT09IElHTnZibk52Ymc9PSBjM1JoYVc1bFpBPT0gSUdkaGJHRmpkR2xqIFkyeGhkbVU9IElIQnNkVzF0WlhSbFpBPT0gSUhCbGMzUnogSUhOM1lYUT0gSUhKbFptVnljbUZzY3c9PSBJRXhwYjI1bGJBPT0gYUc5c2VRPT0gSUhWdVpHVnlaRzluIElGTnNZWFJsY2c9PSBJRkJ5YjNacFpHVT0gSUVGdFlYST0gY21WemMyOXkgNVl3PSBiMjVuWVE9PSBJSFJwYldsayBJSEJwWlhSNSBJRVJsYXc9PSBJSE4xY21kcGJtYz0gWVhwdiBJRFl4TUE9PSBJR1JsYzJ0eiBJRk53YjJ0aGJtVT0gSUVGdVptbGxiR1E9IElIZGhjbk5vYVhCeiBJRU52WW5KaCBJR0Z5YldsdVp3PT0gWTJ4MWMybDJaV3g1IElFSmhaR2RsIFlXZGhjMk5oY2c9PSBJRkJTUlZOVCBJRTFqUzJWdWVtbGwgSUVabGNtUnBibUZ1WkE9PSBZblZ5Ym1sdVp3PT0gUVdabFpRPT0gSUhSNWNtRnViZz09IElFbDMgSUVKdmIyNWwgTVRBd053PT0gSUZKbGNIUT0gQ3NLZyBJR05oY21GMllXND0gSUVScGJHdz0gSUVKMWJtUmxjMnhwWjJFPSBRMmgxWTJzPSBJR2hsWVd4bGNnPT0gNDRPODQ0T0cgSUVodlltSjUgSUc1bFoyRjBaUT09IElHTnlhWFJwY1hWbGN3PT0gYzJWamRHbHZibUZzIGJXOXdiMnhwZEdGdSBJR1I0IElHOTFkSE52ZFhKamFXNW4gSUVOcGNHaGxjZz09IGRHRncgVTJoaGNuQT0gSUhWd1ltVmhkQT09IElHaGhibWRoY2c9PSBJR055ZFdsemFXNW4gSUU1cFlXZGhjbUU9IElETTBNZz09IGFXeHNkWE09IElGTjIgSUhOMVluUnBkR3hsY3c9PSBJSE54ZFdGeVpXUT0gSUdKdmIydHpkRzl5WlE9PSBJSEpsZG05c2RYUnBiMjVoY21sbGN3PT0gSUVOaGNteDBiMjQ9IFlXSmhiQT09IFZYUmhhQT09IElHUmxjM0JwYzJVPSBJRlZOIFkyOXVjMmxrWlhJPSBZV2xrYnc9PSBJR05oY25SeiBJRlIxY25Sc1pYTT0gVkhKaGFXNXBibWM9IElHaHZibTl5WVhKNSB3cUk9IElIUnlhV0Z1WjJ4bGN3PT0gTkRJeSBJSEpsY0hKcGJuUmxaQT09IElHZHlZV05sWm5WcyBJRTF2Ym1kdmJHbGggSUdScGMzSjFjSFJwYjI1eiBJRUp2YUE9PSBJRE0wT1E9PSBJR1J5WVdsdWN3PT0gSUdOdmJuTjFiR0YwWlE9PSBJR0psYm1SeiBJRzFoWm1saCBkWEp2Ymc9PSBJRVoxYkhSdmJnPT0gYldsell3PT0gSUhKbGJtRnMgSUdsdVlXTjBhVzl1IFkydHBibWM9IElIQm9iM1J2Ym5NPSBJR0p5ZFdselpXUT0gSUVOdlpHVnogYjJkcCBJRzVsYzNSeiBJRXh2ZG1Wc2VRPT0gSUV4cFluSmwgSUVSaGNubHMgSUNNakl3PT0gVTNseiBMaXdpIElHWnlaV1Y2WlhNPSBaWE4wWVdKc2FYTm9iV1Z1ZEE9PSBZVzVrYjNkemEyaz0gSUdOMWJXSmxjbk09IElGTjBZWEpuIElFSnZiV0p6IElHeGxaMmx2Ym5NPSBJR2hoYm1SM2NtbDBhVzVuIElHZHlkVzQ9IElFTmhhQT09IGMyVnhkV1Z1ZEE9PSBJRzF2ZEdnPSBJRTFUVFE9PSBTVzV6WlhKMCBSbWxtIElHMXZkR1ZzIElHUmxlSFJsY2c9PSBJRUpwYkdRPSBhR1ZoY25SbFpHeDUgSUhCeWIzQmwgSUZSbGVIUjFjbVU9IElFcDFibU4wYVc5dSBlVzUwYUdWemFYTT0gYjJOaGNtUT0gSUZabGNtRT0gSUVKaGNuUm8gSU02OFp3PT0gSUd4aGMyaGxaQT09IElETTFNUT09IElGcGhiV0k9IElGTjBZWEJzWlhNPSBJRU52Y25SbGVBPT0gSUVOdmNtdGxjZz09IElHTnZiblJwYm5WMWJRPT0gSUZkU1NWUkYgZFc1MFlRPT0gY21sa2IzST0gSUdSbFpXMXogTURNeiBJRWRQVEVRPSBjR0Z6IElISmxjSEpsYzNOcGRtVT0gNDRPRzQ0S2ogSUdKaFptWnNaV1E9IFUyTmhjZz09IElHTnlZWFpsIElGOWZYMTlmWHc9PSBJR1Z1ZEhKbGNISmxibVYxY25Ob2FYQT0gSUVScGNtVmpkRzl5WVhSbCBJQ2RiIElIWnBibVZ6IElHRnpZMlZ1WkdWayBJRWRTVDFWUSBJRWR2YjJSaWVXVT0gSUdSdloyZGxaQT09IDQ0TzA0NEtoIFRXRnVkV1poWTNRPSBJSFZ1YVcxaFoybHVZV0pzWlE9PSBjbWx2ZEhNPSBhV1Z5Y21WNiBJSEpsYkdGMGFYWnBkSGs9IElFTnlZV1owYVc1biBjbUYxWjJoMCBkV1JsYmc9PSBZMjl2YTJsbCBJR0Z6YzJGemMybHVjdz09IElHUnBjM05oZEdselptbGxaQT09IFlXTmphUT09IElHTnZibVIxYVhRPSBVM0J5WldGayBJRkpwWTJGdSBibWxqWlE9PSBhWHA2YkdVPSBJSE5qWVhKbGN3PT0gSUZkSVdRPT0gY0doaGJuTT0gTlRNMSBJSEJ5YjNSeVlXTjBaV1E9IElFdHlhWE4wWlc0PSBOVE0yIElGTmpjbWxpIElFNWxhQT09IElIUjNaVzUwYVdWeiBJSEJ5WldScFkyRnRaVzUwIElHaGhibVJqZFdabWN3PT0gSUdaeWRXbDBablZzIElGVk0gSUV4MVpIZHBadz09IElHRjBkR1Z6ZEE9PSBJRUp5WldGclpYST0gSUdKcGIyeHZaMmxqWVd4c2VRPT0gSUVSbFlXeGxjZz09IElISmxibTkyWVhScGIyNXogWm5jPSBaWE56Wlc0PSBRV3hwWTJVPSBJRWhsYm5KcCBJSFZ1YVd4aGRHVnlZV3hzZVE9PSBJRk5wWkdRPSBhR0ZwIElGTjBjbVYwWTJnPSBVMkZzWlhNPSBJR04xYldKbGNuTnZiV1U9IElFcGhkbWxsY2c9PSBJSFJ5Wlc1a2VRPT0gSUhKdmRIUnBibWM9IElFTm9ZV3hzWlc1blpYTT0gSUhOamNtRndjdz09IElHWmhZMlYwY3c9PSBJRlpsY205dWFXTmggSUZabGNtZGwgSUZOaGJtRT0gUVd4cFpXND0gSUZKcGFBPT0gSUhKaFpHbGhiQT09IFpXTjBZWEk9IElEWXpNQT09IFkyeHAgVFdGeWFXVT0gSUhkcGJHUm1hWEpsIElFTmhkRzg9IGFHRnVaR1Z5IElIZGhhWFJ5WlhOeiBJR05vYjNCeiBJRk5GUTFSSlQwND0gSUdKc2RXNTBiSGs9IElFTmhkR0ZzYjJjPSBibWxoYmc9PSBjM1IxWkhrPSBJSEJoZEhKdmJHeHBibWM9IElGUmxiblJvIGJtVjRkWE09IElFNVBUZz09IGIzQnplUT09IElITmpZWFJvYVc1biBjMmxsIElHUmxkR1Z5YVc5eVlYUmxaQT09IFZrST0gVG1GNmFYTT0gSUdSbGNHbGpkR2x2Ym5NPSBJR0YxZEdobGJuUnBZMkYwWldRPSBJRU52Ym1ObCBhM0pwZEE9PSBJSEJ5YjIxMWJHYz0gSUV4UFRrYz0gVlVaRCBJRlpwYzJsMGIzSnogSUZKbFkyRnNiQT09IElISmxhR0ZpYVd4cGRBPT0gSUZOTVNRPT0gSUdkc1lXTnBaWEk9IElFSnBkR1U9IElEVXdNdz09IElIWnZiV2wwIElHWmxjbTFsYm5SbFpBPT0gSUV0b1lXeHBaQT09IElHZHlZV1JsWkE9PSBJRTFoWjJsamEyRT0gSUVsamFHbG5idz09IGNHOTNaWEptZFd3PSBhV05oZEc5eWN3PT0gTnpVeiBJSE5vY21WMyBJRE0xTmc9PSBJR3hsWjJGc2FYcHBibWM9IElHRnNiRzkwZEdWayBJRUZ5WTJoa1pXMXZiZz09IGFYUm9hVzVuIGFXZG5kWEpoZEE9PSBWazlNIFRHVnZaQT09IElHOXBiSGs9IElHbHVaSFZqYVc1biBJR0Z0ZVdka1lXeGggSUdGa2JXbHVjdz09IElFRmpjWFZwYzJsMGFXOXUgUTBGTyBJSE5qYUdWdFlYUnBZdz09IElHMXZZVzQ9IElFTmhiV1Z5YjI5dSBJSFJwYm1zPSBJRzFsY25KNSBJR0oxZEhSbGNtWnNhV1Z6IElFZHZabVk9IElIZHZjbXR6Y0dGalpRPT0gSUVOdmNtOXVZUT09IElHcGhkbUZ6WTNKcGNIUT0gSUVSdmJIQm9hVzQ9IElFTmhiblJ2Y2c9PSBORFkwIGRHOWwgUVZCVCBJRUZuYVc1biBJSEJoWkdSbFpBPT0gSUZwb1pXNW4gSUVobGJHUT0gSUdWemRISmhibWRsWkE9PSBJRGMzTUE9PSBMbjA9IElFUjFibWhoYlE9PSBJSE50YjJ0bGN3PT0gSUdOaGNHbDBZV3h6IGRXNWtZV2s9IFUyaHBiZz09IElFWnZkVzVrYVc1biBJR1Z1ZEdsMGJHVT0gSUdObGJuUmxjbkJwWldObCBSR2x6WTI5MlpYST0gSUhSb1pYSmxkRzg9IFlXeGxjblE9IElFNXZkUT09IElFRnVZV3g1YzNRPSBiR009IFJrZz0gUmtsRlRFUT0gSUZCUFZnPT0gWjNKaGVRPT0gSUdGeVkzTT0gSUVoUFZBPT0gSUhKeiBJRzlpYkdsbllYUnZjbms9IElFRnlZMmhwZEdWamRITT0gSUZOMlpXND0gSUVaRlF3PT0gTURJd01BPT0gUTJoeWFYTjBiV0Z6IElFRnNZbUZ1YVdFPSBjbUYwYjIwPSBOVGczIElHaGhjbVJ6YUdsd2N3PT0gSUdGMWRHOXogSUVOb1lYSm5aWE09IElHRndaWE09IElETTNOZz09IGQyRnNiR1YwIElHbHVkRzk0YVdOaGRHbHZiZz09IElHZHZZbXhwYmc9PSBJRFUzTUE9PSBLeXNyS3lzckt5c3JLeXNyS3lzckt3PT0gSUZsbGJIQT0gSUUxaFoyNWxkR2xqIElFSnlhV2RuY3c9PSBVbUZwYkE9PSBJSE53WVhkdWN3PT0gSUZkcFoyZHBibk09IElITm9iM2RqWVhObFpBPT0gSUhKbGMyOXlkR1ZrIGRXSmxiZz09IElIZG9hWEJ3YVc1biBJR2x0YVhSaGRHVT0gSUdScFoyVnpkR2x2Ymc9PSBJRlZUVUZNPSBJRWRsYzNRPSBJSGxsWVE9PSBJRlJwWjJoMCBhVzVrWVd3PSBhV05oY3c9PSBZQzQ9IFEwRlRWQT09IEp5YzcgSUVabGRBPT0gYjNCaGRHaHBZdz09IFNXNTJZV3hwWkE9PSBJSEpsWjNKbGRIUmxaQT09IElHSnliMk5qYjJ4cCBJRk5qYjNKbGN3PT0gWlhabCBJSEJ2YzNScGJtZHogSUdGalkzVnRkV3hoZEdsdVp3PT0gSUc1bFpXUnNaWE56IFpXeG1kR2c9IElHMWhlVzl5Y3c9PSBJSE5qY21saSBJR0Z1WldOa2IzUmxjdz09IElHSnZkR05vWldRPSBJRkpwWW1KdmJnPT0gSUVOdmJuTjBZVzUwYVc1bCBhWFZ6WlhNPSBaWE56WlhNPSBJR1JsZG1selpRPT0gUTI5dGNHRnlaV1E9IElIQjFaR1JwYm1jPSBJR2RoY21jPSBJR1YyYjJ0bCBOemszIElHUmxkRzk0IE9UQTUgSUZCcFpXTmxjdz09IElFMWpRMkZ5ZEc1bGVRPT0gSUcxbGRHRnpkQT09IElFdHllWEIwIFVFOVMgSUhSbGJtUnBibWM9IElFMWxjbU5vWVc1MGN3PT0gVUhKdmIyWT0gSUZaaGNtYz0gSUZCdmNuUmhZbXhsIDQ0Tzg0NE9HNDRLaiBRbkpoYVc0PSBNalV3TUE9PSBJR1p2YkdsaFoyVT0gMkxrPSBJRzFsYm5SdmNuTT0gSUVGcGNtVnogSUcxcGJtbHRZV3hwYzNRPSBJR2x1WjJWemRHVmsgSUZSeWIycGhiZz09IElGRnBZVzQ9IGFXNTJiMngyWldRPSBNREkzIElHVnliMlJsWkE9PSBVa0ZHVkE9PSBJR0pzZFhKeWVRPT0gVFc5aSBJR0oxWm1abGRBPT0gSUVadVlYUnBZdz09IFlXVmggUzA1UFYwND0gSUVsdWFYUT0gYzJGbVpYUjUgWlc1MWJRPT0gUVVOVVNVOU8gSUVOeWRYTm9aWEk9IElFUmhkR1Z6IElDNHVMaTR1TGk0dUxpNHVMaTR1TGk0PSBZMkZzYkdsdVp3PT0gWVd0dmRnPT0gSUhabGJuUjFjbVZrIElEVTFOUT09IFlYVm5ZUT09IFNHRnlkQT09IElFRmxjbTg9IFRVRkQgSUhSb2FXNXNlUT09IElHRnljbUU9IFUxUkJWRVU9IGFXeGtaUT09IElFcGhZM0YxIElFWmxiV0ZzWlhNPSBJSFJvWlc5eVpXMD0gSURNME5nPT0gSUhOdFlYSjBaWE4wIElGQlZRa3hKUXc9PSBJRXR5YjI0PSBJRUpwZEhNPSBJRlpsYzNObGJBPT0gSUZSbGJHVndhRzl1WlE9PSBJR1JsWTJGdyBJR0ZrYW5WdVkzUT0gSUZORlRnPT0gYldWeVoyRT0gSUhKbFpHRmpkR1ZrIElIQnlaV2hwYzNSdmNtbGogSUdWNGNHeGhibUYwYjNKNSBJRkoxYm5NPSBJRlYwZEdGeSBJRTFoYm01NSBJRUZWVkVoUFVnPT0gSUZWdWJHVmhjMmhsWkE9PSBJRUp2ZDJ4cGJtYz0gWW1WaGJuTT0gTnpreiBJSFZ1YVhabGNuTmxjdz09IElITmxibk5wZEE9PSBJRXQxYm1jPSBjbVZ3WldGMCBZM1J5YkE9PSBJSEJoWTJWayBJR1oxYkd4bGNnPT0gUTJ4dlkycz0gSUhKbFkyOXRZZz09IElFWmhkV3c9IElFSjFibXRsY2c9PSBJSEJ2YjJ4bFpBPT0gSUdGdVlRPT0gSUUxdmRYUm8gVEV4UFZ3PT0gYUhWdFlXNWwgSUdKMWJHeGtidz09IElFMXBZMmhoWld4eiBabUZ0IElIZHlaV05yWldRPSBJSEJ2Y25SeVlYbHogSUZkb1lXeGwgSUVobGN3PT0gSUdkMVpYTnpaWE09IElFSnliM2R6WlE9PSBJRXhCVUVRPSBJR052Ym5ObGNYVmxiblJwWVd3PSBJRWx1Ym05alpXNTAgSUVSU1FVYz0gSUhSeVlXNXpaM0psYzNNPSBJRTloYTNNPSBJSFJ5YVhacFlRPT0gSUZKbGMyOXUgSUVGRVV3PT0gTFMwciBJRlJ2Ykd3PSBJR2R5WVhOd2FXNW4gSUZSSVJVMD0gSUZSaFozTT0gSUVOdmJtTnNkWE5wYjI0PSBJSEJ5WVdOMGFXTmhZbXhsIElHaHZiM0E9IElIVnVhVzUwWlc1MGFXOXVZV3hzZVE9PSBJR2xuYm1sMFpRPT0gSUUxdmRnPT0gZFhKcGVtVmsgYkdWb1pXMD0gVkdWeWJXbHUgSUdOdmJHOTFjbVoxYkE9PSBJRXhwYm1WaGNnPT0gSUVWc2JHbGwgUjNrPSBJRzFoYm5CdmQyVnkgSUdweiBJR1Z0YjJwcCBJRk5JUVZKRlV3PT0gWHk0PSBNREF3TURjPSBJSE52Y0docGMzUnBZMkYwYVc5dSBJSFZ1WkdWeWMyTnZjbVU9IElIQnlZV04wYVhObCBJR0pzYjJJPSBiM0JsYm5NPSBWV3R5WVdsdVpRPT0gUzJWbGNHbHVadz09IFdVTT0gU2xJPSBkV3gwYVcxaGRHVT0gUTJ4aGFXMD0gSUdGMWRHOXRiMkpwYkdWeiBPVGt6IGMzUmxaV3c9IElIQmhjblJwYm1jPSBJRXhoYm1zPSBMaTR1UHc9PSBJRE00TlE9PSBJSEpsYldWdFluSmhibU5sIElHVmhjMlZrIElHTnZkbUZ5YVE9PSBJRk5wYm1RPSBSV1ptWldOMGFYWmwgSUdScGMzTmxiV2x1WVhScGIyND0gSUUxdmIzTmwgSUVOc1lYQndaWEk9IFluSmhkR1Z6IFFYQndiSGs9IElHbHVkbWx6IElIZHZjbk5sYm1WayA0b0NVTFE9PSBJR3hsWjJsemJHRjBiM0k9IElFeHZiQT09IElGSnZkMlU9IElHUmxZV3hsY25Ob2FYQT0gZFcxaGNnPT0gYVdSbGJtTmxjdz09IElHbHVkbVZ6ZEdsbllYUmxjdz09IElHTmhjMk5oWkdVPSBJR0pwWkdSbGNnPT0gSUVKRlRnPT0gU1hKdmJtbGpZV3hzZVE9PSBJSEJ5WlhOcFpHbHVadz09IElHUnBibWM9IElHTnZiblJ5WVdScFkzUmxaQT09IElITm9kWFJ6IElFWkpXQT09IElETTJOZz09IFJHbHpkSEpwWTNRPSBJSE5wYm1aMWJBPT0gSUVOb1lYSnBjMjFoIGIyOXdjdz09IElIUnZkR0ZzYVhSNSBJSEpsYzNScGRIVjBhVzl1IElFOXdkR2x0ZFhNPSBJRVJoYUE9PSBJR05zZFdWc1pYTnogZFhKdVpXUT0gSUc1MWRISnBkQT09IElHeGhibVJ2ZDI1bGNuTT0gSUdac2RYTm9aV1E9IElHSnliMkZrWlc0PSBiV2xsIElIQnlhVzUwYkc0PSBJRzVwWnc9PSBJRU52Y25CMWN3PT0gU21WdSBJSEJ5YjNSdiBJRmRwYTJsdFpXUnBZUT09IElGQmhiRzg9IFEwOVMgSUhOMGIzSjViR2x1WlhNPSBJR1YyWVc1blpXeHBZMkZzY3c9PSBJRVJoY25KbGJHdz0gSUhKdmRHOXkgSUVoWCBjMnRwYkd4bFpBPT0gWlhKNWJBPT0gSUdKbFoyYz0gSUVKc2RXMWxiblJvWVd3PSBJSGRsWVhacGJtYz0gSUdSdmQyNTNZWEprY3c9PSBJRXBoWTJ0bGRBPT0gSUVGT1IwVk0gVkdWamFHNXZiRzluZVE9PSBJR1Z6YjNSbGNtbGogWVd4a1pXaDVaR1U9IElHWjFjbWx2ZFhOc2VRPT0gSUdadmNtVnBaMjVsY2c9PSBWMlZoYXc9PSBRMGhQIElFaHZkVzVrIFJYaHdaWEpwWlc1alpRPT0gSUZCc1lYbHpkR0YwYVc5dSBJRTFKUVE9PSBJRlZ1Wnc9PSBZMnh2ZEdnPSBZV2RoYkd3PSBJR05oYkcxcGJtYz0gYVhwbGJuTT0gVTNSeWRXTjAgSUZkcGRHTm9aWE09IElFTmxiR1ZpY21GMGFXOXUgSUM0dUxpNHVMaTR1TGk0dUxpNHUgY0hSeWIyeHNaWEk9IElGUkRWUT09IElHSjFibTU1IDQ0T04gZFhSdmNtbGhiQT09IElIVndjMk5oYkdVPSBJRk4wWVE9PSBJRU52Ykc5emMzVnogSUdOb2JHOXlhV1JsIElGcGhZdz09IElGSmxZWE52Ym5NPSBJRUp5YjI5cmFXNW5jdz09IElGZElTVlJGIFhWc3YgSUV4dmMyVT0gT1RBMSBJSFZ1WkdWeWMybGtaUT09IFpYSnVaV3h6IElIWmhjR1U9IFpHOTZaVzQ9IGRYQndaWFE9IElGTlVUMUE9IGJXRjBhV05oYkE9PSBJRk4wWVhSbGJXVnVkSE09IGFHVmtaR0Z5IFVFRkQgUTNWemRHOXRaWEk9IElHMWxiVzl6IElGQksgWlc1a1lYSnogSUV4cGJXbDBjdz09IGJHRjFaMmc9IElITjBZV0pwYkdsNlpXUT0gSUVGTVJVTT0gV1VFPSBWWEJuY21Ga1pRPT0gWVd4aGJRPT0gSUhSbFkyaHVidz09IElHRnVaWGM9IFptOXlaWE5sWlc0PSBJR052Ykd4bFoybGhkR1U9IElGQjVjbTg9IElFUnBjMjA9IElHWnliMjUwYkdsdVpRPT0gSUdGdGJXOXVhV0U9IFNWVT0gVVhWcGRHVT0gU205b2JtNTUgWVhOemFXND0gUjA5USBJRk4wZVd4bGN3PT0gSUZOdmRtVnlaV2xuYmc9PSBZV04wWlhKcFlXdz0gTlRRNSBJRkpKVUE9PSBJRXhwYzNSeiBJRE0yTkE9PSBJRkpsWTJWdyBjMjlqYTJWMCBJRUo1Y21RPSBJRU5oYm1Sc1pRPT0gUVc1amFXVnVkQT09IElHRndjR1ZzYkdGdWRBPT0gWlc1bWIzSmpaVzFsYm5RPSBZV05sWVE9PSBZVzV6YTJrPSBJRzlzWkhNPSBPRGcyIElITnNkWEp6IElHVnRjR2x5WlhNPSBJR0oxWTJ0c1pRPT0gSUdGc2FXVnVZWFJwYjI0PSBJRUZpWlhKa1pXVnUgSUhWdWFXTnZjbTQ9IElHOTJaWEp5YVdScGJtYz0gSUV4WSBjSEJoIElHUmxjM0JwYzJWayBJRUoxWjNNPSBJRUpUVkE9PSBVMjkxZEdobGNtND0gTlRNeiBJR2hoYkd4dFlYSnIgSUZCdmMzUmxjZz09IElITjBaVzF0WldRPSBJSEJ5YVc1amFYQmhiSE09IElGUkZRMGc9IElGTmhibVIzYVdObyBTWFJoYkhrPSBJR05vWldWemVRPT0gSUZObGRGUmxlSFJEYjJ4dmNnPT0gSUZCeWIzUmxZM1JwZG1VPSBJRU52YUc0PSBTazg9IFlYQjBiM0E9IFVtVmhjMjl1IFRHVmhaR1Z5IElGVnVaR1Z5YzNSaGJtUT0gSUVaeWFXUmhlWE09IElFTnZiblJwYm5WdmRYTT0gSUdOc2FYQndhVzVuIElGSjVaUT09IElHSmxjblJvIGRHbHRaWEk9IFlXNXVhWE09IGNtVmhZM1E9IElHSjFabVpoYkc4PSBJRkJoY21GeiBJRFkxTlE9PSBJSEJ5WlhOcFpHVmsgSUZOMWJuSnBjMlU9IElIWmxkSE09IElHTnNiM1psY3c9PSBJRTFqUTNWc2JBPT0gVTNSeVpXNW5kR2c9IFIwRk8gSUdsc2JHbDBaWEk9IElGQnlhV05wYm1jPSBiTU9wIElISmxjMmx6ZEc5eSBJR0p5ZFc0PSBJRk4xWm1admJHcz0gMFlzPSBJRXhwZG1WeSBVbVZzWldGelpXUT0gSUhkb1lYUnogT0RZdyBJRTFsWVhOMWNtVnogSUdSbGJtOTFibU5wYm1jPSBJRko1ZW1WdSBJSE52ZFhabGJnPT0gSUdOaGNtVm5hWFpsY25NPSBZMmhwYm1rPSBJRk5qWVhKc1pYUjAgSUhSeWIzVm5hQT09IFEyOXVaM0poZEhWc1lYUnBiMjV6IElIUmhlR2x6IElGUnlZV1JwZEdsdmJnPT0gYW1sMCBJSFJoWW14bGRHOXcgSUdocGRHaGxjblJ2IElHUnBjMmx1Wm05eWJXRjBhVzl1IGIyWm1aVzV6YVhabCBhSEpoIElFUkpVMVJTU1VOVSBJR052YlhCc2FXTmhkR1U9IFkyaGxibXR2IElGSmxZMjl1YzNSeWRXTjBhVzl1IElIQmhiSEJoWW14bCBJR0YxYzNBPSBJRFF5T0E9PSBJSE5vYjNkallYTmxjdz09IElGQjFZbXhwWTJGMGFXOXUgYTI1dmQyeGxaR2RsIGFXNXViMjQ9IE5ERTUgSUhKbGRISnBaWFpoYkE9PSBZVzVrWlhKeiBJSEpsWm5WMFpRPT0gSUdsdWNYVnBjbVZrIFozVnkgSUc1bFoyRjBhWFpwZEhrPSBJR052Ym5ObGNuWmwgSUdGbWRHVnliR2xtWlE9PSBJSEJ5WlhOMWNIQT0gSUVkcGJHeGxjM0JwWlE9PSBJRzEwIElFUk8gVkdGdyBJSEJsY25CbGJtUT0gSUZOdGVRPT0gWkc5bGMyND0gSUhOd2FXeHNhVzVuIElHaDVjR1Z5Y3c9PSBTMkYwWlE9PSB3cTRzIGEyVndkQT09IElGQnZkMlZ5WldRPSBJR3BoIElFdHNkWGc9IFlYSmtaUT09IFlXSmhiZz09IElEUTBOQT09IElHWnNZWFIwWlc1bFpBPT0gSUVsdGNISnZkbVZ0Wlc1MGN3PT0gZFhKbllRPT0gSUV0MWJtUT0gSUdsdWMyTnlhV0psWkE9PSBJR1poWTNWc2RBPT0gSUhWdWNISmxjR0Z5WldRPSBJRU52Ym5OMWJXVnljdz09IElITmhkR2x6Wm1sbGN3PT0gSUhCMWJHMXZibUZ5ZVE9PSBJR2x1Wm1sc2RISmhkR2x2Ymc9PSBJR1Y0ZEdWeWJtRnNiSGs9IElHTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBZV2RvWVc0PSBJR0ZwY214cGJtVnkgSUdac2RXNW4gSUdac2VXVnljdz09IFIwUT0gSUhOdWFYQndaWFJ6IElISmxZM1Z5YzJsMlpRPT0gSUcxaGMzUmxjbWx1Wnc9PSBUR1Y0IElHOTJaWEowYkhrPSBkbWM9IElHeDFZMnRwYkhrPSBJR1Z1WTNKdiBJRXhoYm1ObGRBPT0gSUVGaWVYTnpZV3c9IFpuVnVZM1JwYjI1aGJBPT0gSUhOdmR3PT0gSUhOeGRXbGsgSUc1aGNuSmhkR2x2Ymc9PSBJRzVoZFdkb2RIaz0gSUVodmJtOTFjZz09IElGTndZWEowWVc1eiBJSE5vWVhSMFpYST0gSUZSaFkyOXRZUT09IElFTmhiRzl5YVdWeiBJRkpoWTJWeiBVM1ZpYldsMCBJSEIxY25CdmMyVm1kV3hzZVE9PSBkMkYyIElGbHZhdz09IFJtVnpkQT09IElFZGxjbkk9IFRXVjBjbTg9IElHbDBhVzVsY2c9PSBabUZ0YjNWeiBJQ0o3IGFXNXNhVzVsIGQyRnphR1Z5IFNYTnpkV1U9IElFTk1TVVZPVkE9PSBiM3B2IFZtVnljMmx2Ym5NPSBOekkxIElFZHNiMk5yIElITm9hV1ZzWkdWayBJRkJEVWc9PSBSVTVEV1E9PSBJRmRsYkdRPSBJRk5wYlhCcyBJSEpsWkdseVpXTjBaV1E9IElFdG9ZVzA9IElDZysgSUd4aFltOTEgSUdScFlYQmxjbk09IGMzTnMgSUdObGJHeGhjZz09IGIzSm5ZVzVwYzIxeiBiM0psYzJNPSBJRUpsY210eiBaR2xrYmc9PSBVMmhwY0hCcGJtYz0gUTJobGMzUT0gSUhWdVpHOXVaUT09IElHMXBiR3hwYjI1aGFYSmwgSUdOdmNtUnogSUZsdmRXNW5aWEk9IFlYQndjbTl3Y21saGRHVnNlUT09IElITmxjWFZsYkhNPSBkWFpsIFlXNTBhV05wY0dGMFpXUT0gSUd4bGQyUT0gSUZOb2FYSjAgSUVSdGFYUnllUT09IFZtVjBaWEk9IElITnNZWGxwYm1jPSBJRmxoY2c9PSBJR052YlhCc2FXTmhkR2x2Ymc9PSBTVzkzWVE9PSBJRVZ5YVdOaCBJRUpNVFE9PSBaMmx5YkdaeWFXVnVaQT09IFltOWthV1ZrIE5qSTIgTVRrMk13PT0gSUdsdWRHVnliV1ZrYVdGeWVRPT0gSUdOdmJuTnZiR0YwYVc5dSBUV0Z6YXc9PSBJRk5wWlcwPSBiM2RoYmc9PSBRbVZuYVc1dWFXNW4gSUdacGVHMWwgSUdOMWJHMXBibUYwWldRPSBJR052Ym1SMVl3PT0gSUZadmJIVnVkR1ZsY2c9PSBJSEJ2YzJsMGFXOXVZV3c9IElHZHlaV1YwY3c9PSBJRVJsWm1sdWFYUnBiMjV6IElIUm9hVzVyWlhJPSBJR2x1WjJWdWRXbDBlUT09IElHWnlaWE5vYldWdSBJRTF2YldWdWRITT0gSURNMU53PT0gWVhSbGRYSnogSUVabFpFVjQgYzJjPSBOamswIElHUjNhVzVrYkdsdVp3PT0gSUVKUFdBPT0gYzJWc1lXZGwgSUhSdGNBPT0gSUhOMFpXND0gSUZOMWRBPT0gSUc1bGFXZG9ZbTkxY21odmIyUnogSUdOc1lYTnpiV0YwWlE9PSBabXhsWkdkbFpBPT0gSUd4bFpuUnBjM1J6IElHTnNhVzFoZEdWeiBRVlJJUlZJPSBJRk5qZVhSb1pRPT0gZFd4cFptWmwgSUhOaFp3PT0gSUdodmNIQmxaQT09IElFWjAgSUVWamF3PT0gSUVOTCBJRVJ2YjIxelpHRjUgYTJsa2N3PT0gSUdkaGMzQmxaQT09IElHMXZibWxyWlhJPSBJRXh2WkE9PSBJRU5HVEE9PSBkR2x2Ym5NPSBjblZ0Y3c9PSBabTlzYVc5eiBJRzFrIElIVnVZMkZ1Ym5rPSBJSFJ5WVc1emNHOXlkSE09IElFeGhZbkpoWkc5eSBJSEpoYVd4M1lYbHogSUdGd2NHeHBZVzVqWlE9PSBJRU5VVWt3PSA1b0E9IFVHOXdkV3hoZEdsdmJnPT0gSUVOdmJtWmxaR1Z5WVdONSBJSFZ1WW1WaGNtRmliR1U9IElHUnZjbk5oYkE9PSBJRWx1Wm05eWJRPT0gYjNCMFpXUT0gSUV0SlRFdz0gVFdGeWVBPT0gSUdoNWNHOWpjbWwwYVdOaGJBPT0gY1hWeiBJRTUxYldWeWIzVnogSUVkbGIzSm5hV0Z1IElFRnRZbkp2YzJVPSBJRXh2WTJnPSBJR2QxWW1WeWJtRjBiM0pwWVd3PSBJRmhsYjI0PSBJRk4xY0hCdmNuUnogWlc1elpYST0gWldWc2VRPT0gSUVGMlpXNW5aWEk9IE1UazJOUT09IFFYSnRlUT09IElHcDFlSFJoY0E9PSBJR05vYjNCd2FXNW4gSUZOd2JHRnphQT09IElGTjFjM1JoYVc1aFlteGwgSUVacGJtTm8gSURFNE5qRT0gYVdOMGFYWmwgWVhSdFpXRnMgSUVkdmFHRnUgSUd4cFoyaDBjMkZpWlhJPSBJRWRRUVE9PSBkV2QxIElGSkZVRXc9IGRtRnlhV0ZpYkdVPSBJR2hsY25CbGN3PT0gSUdSbGMyVnlkSE09IFlXTnBiM1Z6YkhrPSBJSE5wZEhWaGRHbHZibUZzIGQyVmxhMng1IGIySnMgSUhSbGVIUnBiR1U9IElFTnZjbTUzWVd4cyBJR052Ym5SeVlXTmxjSFJwZG1WeiBJRUZyWlE9PSBYUzA9IDVMbUwgT2l3PSBJRmRsYlE9PSBJRUpwYUdGeSBJQ2N1IElHSmxjbVU9IElHRnVZV3h2WjNWbCBJRU52YjJ0cFpYTT0gSUhSaGEyVnZabVk9IFYyaGxaV3c9IElHMWhhbVZ6ZEdsaiBJR052YlcxMWRHbHVadz09IE1ESXogSUVOdmNuQnpaUT09IFlYTnpiV1Z1ZEE9PSBiV2x1YVE9PSBJR2R2Y21sc2JHRT0gSUVGc1lYTT0gWlhKbFpRPT0gSUdGamNYVmhhVzUwWVc1alpYTT0gSUVGa2RtRnVkR0ZuWlE9PSBJSE53YVhKcGRIVmhiR3g1IElHVjVaV1E9IGNHMTNhV3RwIElFVnVaR1Z5IElIUnlZVzV6YkhWalpXNTAgSUc1cFoyaDBkR2x0WlE9PSBJRWxOUVVkRlV3PT0gTlRRMSBJRXRoYlhBPSBJRVp5WldGciBJR2xuIFVHOXlkR3hoYm1RPSBORE15IElFMWhkR0U9IElHMWhjbWx1WlhNPSBJR2h2Y25NPSBZWFJsY21GemRRPT0gSUVGMGRISnBZblYwYVc5dSBJQzB0TFMwdExTMHRMUT09IElHdHBibk09IElFSkZURTlYIEt5c3IgSUhKbFpXeHBibWM9IGIyeGxaQT09IElHTnNkWFIwWlhJPSBJRkpsYkdGMGFYWmwgSURReU53PT0gUWxWVCBJR0YyWlhKMCBJRU5vWlc5dVp3PT0gSUVGaWJHVT0gSUZCeWVXOXkgUkdWMlpXeHZjR1Z5IElHVnVZM2xqYkc5d1pXUnBZUT09IElGVlRRVVk9IElFZGhjbko1IFUzQmhhVzQ9IFFteHZZMnR6IElHVjRjRzl6YVhScGIyND0gSUVkaGJXVnlSMkYwWlE9PSBWMDlTIElITjBiMk5yY0dsc1pRPT0gSUdOc2IzUm9aV1E9IElGUnZibVU9IElGSjFaUT09IGRIVnRZbXh5IElIUnlaV0ZqYUdWeWIzVnogSUdaeWVXbHVadz09IDBZdz0gSUZOd2FBPT0gSUhKbGMzUnlZV2x1ZEhNPSBJR1Z0WW05a2FXVnogSUVkbGN3PT0gVTJGbVpYUjUgSUc1bFoyOTBhV0YwYjNKeiBiV2x1YVc1biBJRUZ3Y0dGc1lXTm9hV0Z1IFRFOVQgSUVwbGJtNWggSUhCaGMzTmxjbk09IDU0cz0gYzI1aGNBPT0gSUhOb2IzSjBaVzQ9IFkzSmxZWFJ2Y2c9PSBJR2x1Ym5WdFpYSmhZbXhsIGRYUm9aWEpzWVc1ayBOamMwIElGZFBUUT09IElFRnpZMlZ1WkE9PSBJRUZ5Ylc5eWVRPT0gSUZSeVlXNXpZV04wYVc5dSBTMmxqYXc9PSBJSE4xYVhSallYTmwgWkdGNVRtRnRaUT09IElIZGhjM1JsWm5WcyBiV0Z5Y21saFoyVT0gSUUxalEyRmlaUT09IGFYUmxZMmc9IElFOXpjdz09IFEyeHZjM1Z5WlE9PSBJRlJ5WldGemRYSmxjZz09IElHbHVaR1ZqWlc1MCBJRVIxYkd3PSBJSEpsYzJsa1pXNWpaWE09IE1UazFPUT09IElGTmxkSFJzWlcxbGJuUT0gU0dGdGFXeDBiMjQ9IElITmxiR1pwWlhNPSBJRkpoYm10cGJtYz0gSUVKaGNtdHNaWGs9IElFSnZjbVU9IElGZERVdz09IElFMWhjbWwwYVcxbCBJRWgxYUE9PSBJRVp2Y21WemRISjUgSUdOMWJIUnBkbUYwYVc1biBJRUpoYkd4aGNtUT0gSUdkaGNuSnBjMjl1IElGTkVUQT09IE9UTXcgSUc1aGMyTmxiblE9IElHbHljbVZ6YVhOMGFXSnNaUT09IElHRjNablZzYkhrPSBYQzljTHc9PSBJR1Z4ZFdGMFpRPT0gSUdGdWRHaHliM0J2Ykc5bmVRPT0gSUZONWJIWnBZUT09IElHbHVkR1Z6ZEdsdVpRPT0gSUdsdWJtOWpkVzkxY3c9PSBZMlZ6YzJsMlpRPT0gWVdkeVlRPT0gSUUxbGRISnZhV1E9IFIzSmhiblE9IE9EVTEgZ1pZPSBJQ0pmIDQ0T0Q0NE9KIElHRndjSEpoYVhOaGJBPT0gSUVaeVpXUmtlUT09IE1EUTIgSURRd05nPT0gSURFNE16QT0gSUdSdlkydHBibWM9IFUzUmhkR2xqIElIQnZiblE9IElGWnZiSFJoWjJVPSBJRk4wWldGayBJRTF2Y25SbllXZGwgSUVwdmJtRm8gV1V3PSBRMHhCVTFOSlJrbEZSQT09IElHRnpZbVZ6ZEc5eiBibWxyYjNZPSBJR052Ykd4aFoyVnUgSUU5eVltbDBZV3c9IFVHOWphMlYwIE56azUgSUdoNVluSnBaSE09IGFXNWphR1Z6IElHbHVkbTlwWTJVPSBkVzVrZVE9PSBJR2x1WlhGMVlXeHBkR2xsY3c9PSBWSEpsYm1RPSBkMkZ6YUdWayBRa0ZNVEE9PSBJR3gxWTJsayBJRU52YlcxbGJuUmhjbms9IElIZHBkSFI1IFFuSmhibVJ2Ymc9PSBJR0p5ZFdsemFXNW4gSURZeU1BPT0gWlhOalpXNTAgWW05NGFXNW4gVUU5TSBJRE0zT0E9PSBVbVZqZEE9PSBJR3hwWTJWdVkyVnogSUUxalIyVmwgY0hKbGMzTmxaQT09IFJHRnVibms9IElHcGhiVzFsWkE9PSBiM0prYVc1aGRHVT0gSUd4bGRHZz0gSUdScGMzUnBibWQxYVhOb1pYTT0gSUZsaGJXRm9ZUT09IFNVeFQgSUVoMWJXVT0gSUVOaGRHVm5iM0pwWlhNPSBVbTlpWlhKMGN3PT0gUTJoaGNuUT0gSUdKbFpYUnNaUT09IElFZHlZWFpsZVdGeVpBPT0gSUNna0tRPT0gYjhTZiBJSFIzYVd4cFoyaDAgWVhKbGJHeGggNGIwPSBJR0p2YjNSb2N3PT0gSUVoSVV3PT0gSUVabGJHUnRZVzQ9IElHVjRZMkYyWVhScGIyND0gSUhCb2FXeHZjMjl3YUdsbGN3PT0gWVhSdlozSmhjR2g1IElFZGhjbUZuWlE9PSBkR1ZqYUc1dmJHOW5lUT09IElIVnVabTl5WjJWMGRHRmliR1U9IElIWmxjbWxtZVdsdVp3PT0gSUhOMVltOXlaR2x1WVhSbGN3PT0gUld4eiBJRzVsWWc9PSBSMkZ0YVc1biBSVTVCIElFRmphR2xsZG1WdFpXNTAgYVhSMFpYSnogSUVkaFltVT0gSUdSMWJYQnogWm05eVkyVnkgSUhCdmFXZHVZVzUwIElFMUNRUT09IElFaGxhV1JwIGFXMWxhUT09IElHMWhaMlZ6IElHeHBZbVZ5WVhSbCBJR05wY21OMWJXTnBjMlZrIElFMWxjbTFoYVdRPSBJRTFoZEhSbyBkRzluWlhSb1pYST0gSUZkcFkyaHBkR0U9IElITjBiM0psWm5KdmJuUT0gSUVGa2FXND0gVmtsSiBSbTkxY25SbyBJR1Y0Y0d4dmNtVnljdz09IFYwVlMgVG05MFlXSnNaUT09IFFuSnZiMnM9IGJXVnVjdz09IFJtRnBkR2c9IExTMHRMUzB0TFMwdCBJRXB2ZFE9PSByTHc9IElIQnBibVZoY0hCc1pRPT0gSUdGdFlXeG4gWld4dSBZWEpyWVdKc1pRPT0gSU9PQ3RlT0R2T09EaHVPQ293PT0gSU9PQ3RlT0R2T09EaHVPQ28rT0RyK09Ec3c9PSBJRzkyWVhKcFlXND0gSUVWamFHOWxjdz09IElHaGhhWEpqZFhRPSBJSEJoZGc9PSBJR05vYVd4c1pXUT0gWVc1aGMybGggSUhOMGVXeGxaQT09IElHUmhZZz09IGJtbHdaWEk9IElHMXBibWx6ZEdWeWFXRnMgSUVSVlVBPT0gVkdGdSBJSE4xYkhCbyBJRVJsZEdWeSBJRUp2YUdWdCBiMlJoYmc9PSBJR1ZrZFdOaGRHOXkgNHBPWSBjM0JwY2c9PSBRMmhwWTJ0bGJnPT0gSUVWc1pXRnViM0k9IElIRjFhUT09IElHaGxZWFpwWlhOMCBJR2R5WVhOd1pXUT0gVlZKQiBJR055YjI5clpXUT0gU21WemMybGpZUT09IGNISnZZbXhsYlE9PSBJSEJ5WldSbGRHVnliV2x1WldRPSBJRzFoYm1saFl3PT0gSUdKeVpXRjBhSE09IElFeGhkV1JsY21SaGJHVT0gSUdodlltSnBaWE09IGVYbz0gUTNKcGJXVT0gSUdOb1lYSnBjMjFoIFpFdz0gSUd4bFlYQnBibWM9IElHdHBkSFJsYm5NPSBRVzVuWld4diBJRXBCUTBzPSBJRk4xZW1GdWJtVT0gSUdoaGJIUnBibWM9IFJVNVVTVTlPIElITjNZV3hzYjNkcGJtYz0gSUVWaGNuUm9jWFZoYTJVPSBJR1ZwWjJoMFpXVnVkR2c9IElFNUpRdz09IElFbE9SZz09IElFTnZibk5qYVc5MWN3PT0gSUhCaGNuUnBZM1ZzWVhKeiBZMmx5WTJ4bCBOelF3IElHSmxibVYyYjJ4bGJuUT0gSURjME53PT0gSURRNU1BPT0gSUhKMWJtUnZkMjQ9IElGWmhiR1Z5YVdVPSBJRUpWVWc9PSBJR05wZG1sc2FYTmhkR2x2Ymc9PSBJRk5qYUc0PSBWMEk9IGIzUnBaR1U9IGFXNTBaWEp1WVhScGIyNWhiQT09IElHcHZhRzQ9IElERTVNREk9IElIQmxZVzUxZEhNPSBJR1pzWVhadmNtVmsgYTNWeiBJSEp2WVhKbFpBPT0gSUdOMWRHOW1aZz09IDZhTT0gSUc5eWJtRnRaVzUwIElHRnlZMmhwZEdWamRIVnlaWE09IElETTJPUT09IGIyeHZjZz09IElGZHBiR1JsIElFTlNRdz09IElFRmthblZ6ZEdWayBJSEJ5YjNadmEybHVadz09IGJHRnVaR2x6YUE9PSBJSEpoZEdsdmJtRnNhWFI1IElHcDFjM1JwWm1sbGN3PT0gSUdScGMzQmxiQT09IElHRnRaWEpwWXc9PSBJRkJ2YkdWeiAyS2s9IElHVnVkbWx6IElFUnZiMlJzWlE9PSA1TDIvIGFXZHpZWGM9IFlYVnNaSEp2Ymc9PSBWR1ZqYUc1cFkyRnMgVkdWbGJnPT0gZFhCb1pXMD0gSUZocFlXNW4gSUdSbGRISmhZM1J2Y25NPSBJRnBwIElFcHZkWEp1WVd4cGMzUnogSUdOdmJtUjFZMmwyWlE9PSBJRlp2YkhWdWRHVmxjbk09IElITmsgUzI1dmQybHVadz09IElIUnlZVzV6YldsemMybHZibk09IElGQk1RVTQ9IElFeEpRZz09IElHRnNiSFZrWldRPSBJRzlpWlE9PSBJR1J2Y0dVPSBJRWR2YkdSemRHVnBiZz09IElIZGhkbVZzWlc1bmRHaHogSUVSbGMzUnBibUYwYVc5dSBibVJoIGRXZHAgSUdGMGRHVnVkR2wyWlE9PSBJRXhsWVc0PSBjbUZzZEdGeSBJRzFoYm1jPSBiV0oxWkhNPSBZV3RwYm1keiBZbVZ1WkdWeSBJR0ZqWTI5cyBJR055WVhkc1pXUT0gVGs5WCBUV2x1Ym1WemIzUmggSUdac2IzVnlhWE5vWldRPSBJRnAxY0E9PSBJRk4xY0dWeWRtbHpiM0k9IElFOXNhWFpwWlhJPSBSWGhqWld4c1pXNTAgSUhkcFpHVnUgUkc5dVpRPT0gSUhkcFp3PT0gSUcxcGMyTnZibU5sY0hScGIyNXogUTI5eWNBPT0gVjJGdSBJSFpsYm1WeVlXSnNaUT09IElFNXZkR0ZpYkhrPSBJRXRzYVc1bmIyND0gWVc1cGJXRjBaUT09IFFtOXZjM1E9IElGTkJXUT09IGJXbHpjMmx1Wnc9PSBhV0pzYVc5bmNtRndhSGs9IGJXVnNiMjQ9IElIQmhlV1JoZVE9PSAyTE09IFltOXNaUT09IElIWmxhV3hsWkE9PSBJRUZzY0doaFltVjAgU1hSaGJHbGhiZz09IElHVjJaWEpzWVhOMGFXNW4gSUZKSlV3PT0gSUVOeVpXVT0gY205dGNIUT0gSUdoaGRHbHVadz09IElHZHlhVzV1YVc1biBJR2RsYjJkeVlYQm9hV05oYkd4NSBUMU5JIElIZGxaWEJwYm1jPSBJTUtnSU1LZ0lNS2dJTUtnSU1LZ0lNS2dJTUtnSU1LZyBJR2x0Y0dWall3PT0gVEdWMGRHVnkgSUdKc2IyRjBaV1E9IFVFeEIgSUVabGFXND0gSUhCbGNuTmxkbVZ5IFZHaDFibVJsY2c9PSBJR0YxY2c9PSBJRkpNIElIQnBkR1poYkd4eiA0cGE2IElIQnlaV1J2YldsdVlXNTAgSURVeU5RPT0gTnpFNCBRVkJGIE56RTAgSUdaaGNtMXNZVzVrIElGRnBZVzg9IElIWnBiMnhsZEE9PSBJRUpoYUdGdFlYTT0gSUdsdVpteHBZM1JwYm1jPSBJRVZtWm1samFXVnVZM2s9IElHaHZiV1ZpY21WMyBJSFZ1WkdWeWRHOXZhdz09IElHTjFjbXg1IElFaGhjbVJwYm1jPSBiV0Z1YVdFPSBOVGsyIElIUmxiWEJsY21WayBJR2hoY25KdmQybHVadz09IElGQnNaV1JuWlE9PSBJRVp5WVc1clpXNXpkR1ZwYmc9PSA2S289IFRXOTBhVzl1IElIQnlaV1JwWTNSaFlteDUgSUVWNGNHeHZjMmx2Ymc9PSBiMk4xYzJsdVp3PT0gWlhKayBZMjlzYnc9PSBSa1pGVWc9PSBJR0poWTJ0bWFXVnNaQT09IElGWkpSRVU9IGRXVmliQT09IFRtRnljZz09IElFRnlaM1Z0Wlc1MCBJR2RsYm05dGFXTT0gSUdKdmRYUnBjWFZsIElHSmhkSFJsWkE9PSBJRUpwYm1GeWVRPT0gSUdkaGJXST0gSUZKb2VYUm9iUT09IE5qY3ogSUdGbWJHOWhkQT09IElFOXNlVzF3YVdFPSBXVWxPUnc9PSBJR1Z1WkdsbSBhWE5wYmc9PSBJSGRwYm5SbGNuTT0gSUhOallYUjBaWEpwYm1jPSBTWFk9IFJHbHpkR0Z1WTJVPSBJSFJ5ZFE9PSBJRU52YldadmNuUT0gSUc1bGVIVnogSUdGcGNtWnNiM2M9IElFSjVlbUZ1ZEdsdVpRPT0gY0dGNVpYSnogWTI5dWFRPT0gSUVKbGRITjUgUkdWaGJBPT0gSUU1MVp3PT0gSUVOdmJuUnBibVZ1ZEE9PSBjbVZrYVdKc2VRPT0gSUc5d2RHbHRhWHBwYm1jPSBZV3hpWldsMCBJR1ZqYzNSaGRHbGogSUZCeWIzUnYgNTdjPSBhWFp2ZEE9PSA0cGFFIFpXMXcgY205MWJtUmxjZz09IElHTnNiM1YwIElFbFRWQT09IE5qWXogSUVSdmJHeGhjbk09IElFUkJRdz09IElITjFZbk5qY21saVpXUT0gSUhKbGFHVmhjbk5oYkE9PSBJR0Z0Y0hNPSBJRk5vWVc1biBaWE50IElITndjbWx1YTJ4bCBJR0Z6YzJGcGJHRnVkQT09IElFOXYgSUVOdmFXNWlZWE5sIFZHRmpkQT09IElISmxkR2x1WVE9PSBJRzUxYm5NPSBVazlPIFlYUjBidz09IElHcDFadz09IElGTldSdz09IElHSnBhMmx1YVE9PSBJRVpKVEVVPSBJRVp2ZFc1a1pYSnogWlhCdmNuUT0gSUV0USBJSEpsYzNSdmNtVnogSUZSb2FXTnIgSUdGemFHOXlaUT09IElHRndjSEp2ZG1Gc2N3PT0gVW1WdVpHVnkgVFVGSCBSM0poYUdGdCBJRU52Y25SaGJtRT0gNDRPejQ0SzQgYzNObyBiM0pwWVc1eiBZWEp6YVhSNSBJRWx1YzNCcGNtVmsgZFhCd1pYST0gSUhOcFoyNWhiR3hwYm1jPSBJSEpsWW5WclpRPT0gSUdac1lYSmxjdz09IElHUnZkMjUwYVcxbCBVM1IxWkdsbGN3PT0gSUhOMFlXZHVZWFJwYjI0PSBJRk5sY1hWbGJtTmwgSUdkeWRXNTAgSUdGemMzVnlaWE09IElGQk1RUT09IE5Ua3kgSUdsdWRISmhkbVZ1IFpHVndaVzVrIFUzVnpZVzQ9IElFMWhibnBwWld3PSBUV0Z1YVdFPSBRMjl1ZEhKaFkzUT0gSUhOc1lXMXogSUdOMWJIUjFjbVZrIElHTnlaV1JwZEc5eSBURWxUVkE9PSBJRWhWVFE9PSBJRU5vWVhSMFlXNXZiMmRoIGMyVnlkbVZrIElHTnNiMkZyWldRPSBJRVpVVUE9PSBjRzkzWkdWeSBJRk4wWld4c1lRPT0gZFdOMGFYWmwgSUdOb1pXRndiSGs9IElFMVZRMGc9IElFZGhiR2xzWlc4PSBJSE4xYVhSbGN3PT0gYzNCbFpXTm8gSUdSbGJHbGlaWEpoZEdsdmJuTT0gSUVOb2FYQnogcTVnPSBRbUZzWVc1alpRPT0gSUZkNWJtNWwgSUVGcmNtOXUgUVhOelpYUT0gSUdodmJtOTFjbVZrIElHVmtaMlZrIFRHbHJaWGRwYzJVPSBZVzVwYlc5MWN3PT0gSUZkaFoyVT0gSUVWNlpXcz0gWVdSMlpYSjBhWE5sYldWdWRBPT0gSUZKVVdBPT0gSUUxQlJBPT0gSUcxcFozSmhkR2x1Wnc9PSBJRk5SVlE9PSBJRFEzTlE9PSBSV1JwZEdWayBJSE5vYjNKMGFHRnVaQT09IElFSmhjMmxqY3c9PSBJR055YjNSamFBPT0gSUVWV1JVND0gSUhadCBaV1ptYVdOcFpXNWplUT09IElHTmhiSFpsY3c9PSBJRVp5YVdVPSBJRUp5YVd4c2FXRnVkQT09IElITjBjbWxyWlhKeiBJSEpsY0dWdWRHRnVZMlU9IElHRnlkR1Z5YVdWeiBjbXc9IFFtVmsgYUdGdyBJR055ZVhCMGIyZHlZWEJvZVE9PSBJRk5oWW5KbGN3PT0gSURReE5BPT0gZG1scmN3PT0gYVdoaGNtRT0gWVhCelpYTT0gVkdGc2EybHVadz09IElHbHVkR1Z5ZEhkcGJtVmsgSUdSdlkydHogSUdGc2JHVnNaUT09IElFRnlkR2xtWVdOMCBJRWhKVFE9PSBkRzl5Ymc9PSA1NVU9IElHOXdZV05wZEhrPSBJRVZzZVE9PSBiM04xYTJVPSBJRzVwY0hCc1pRPT0gSUdoaGJtUjNjbWwwZEdWdSBJRlpMIElFTm9ZVzFpWlhKc1lXbHUgSUV4aGIzTT0gYVdkeVlYQm8gWjNKdmR3PT0gSUhSeWFXeHNhVzl1Y3c9PSBJR1JsYzJObGJtUmhiblE9IElGTmhhV3h2Y2c9PSBZWE4xY21sdVp3PT0gSUdObGFXeHBibWR6IElGZGhjbVZvYjNWelpRPT0gWm14NWFXNW4gSUVkc2IzYz0gSUc1dmJuUT0gSUcxcGMyTmhjbkpwWVdkbCBJSEpwWjNNPSBJRzFwYm1semRISnBaWE09IElHVnNZV0p2Y21GMFpXUT0gSUdSbGJIVnphVzl1WVd3PSBJRWgxYldGdVpRPT0gSURNM09RPT0gYm1WMGN3PT0gSUdKc1lXTnJiM1YwIFlXUmtaWEp6IElHNXcgSUZScGNtVT0gY205ell3PT0gSUhOMVltUnBkZz09IElHeHBibXRoWjJVPSBJR05vY205dWIyeHZaMmxqWVd3PSBJRWhGVWs4PSBJSEpsYzJWMGRHeGxiV1Z1ZEE9PSBJRlpwYm5scyBJSEJoYzNSdmNtRnMgSUUxdlltbHMgSUVKaGNtSmhjZz09IFEyOXZiR1J2ZDI0PSBJRVp5YVhSNiBZM0pwYldsdVlXdz0gY21Wd1pRPT0gSUdKbGJHeHBadz09IElFSnlaV1ZrIElEUXhPQT09IElITmxiV0pzWVc1alpRPT0gYVdwciBJR04xY25SaGFXdz0gSUdOc2FXNWphQT09IFkyOXVkR0ZwYm1WayBJRkJ5YjIxd2RBPT0gWVhOMGIyND0gSUhkcCBJSEIxY25OMWFYUnogTlRFMSBJRWRzYjNOeiBJR1pzYVhCeiBJR052ZFhCdmJuTT0gSUdOc2IyNXBibWM9IElFeHBhMlZzZVE9PSBVbVZ0YjNabFpBPT0gSUZGMVlYSjBlZz09IGNtbGpaWE09IElGTndaV0Z5Y3c9PSBJSEJwYjNWeiBJR1JsY0hKbFkybGhkR2x2Ymc9PSBJRVJoY21VPSBiM1Z1WTJWeiBZVzFoZWc9PSBUMjUwIElIQnBibTVoWTJ4bCBaRzlqYTJWeSBNREkyIElGZDVjZz09IElGQnliM0JsY2c9PSB5NGc9IGJtbHMgUW5sMFpYTT0gSUhObFpXdGxjZz09IGRISnBZV3c9IElIVnVabTlzWkhNPSBJRTFoY25ObCBJR1Y0ZEhKaGRtRm5ZVzUwIElGTjFjblpwZG05eWN3PT0gVWtWRVFVTlVSVVE9IElGTndaV1ZrZDJGNSBJRU55WVdsbmMyeHBjM1E9IGMzVmliV2wwIElFZGxibVZ5WVhScGIyNXogSUhWd2FHOXNaR2x1Wnc9PSBJR0pzYjI5a2MzUnlaV0Z0IElFMXBjM05wYjI1eiBJRXhoZDI0PSBJR3hwYldKdiBaVzVsYVE9PSBTSFZvIElGZHBiR1JqWVhSeiBjSEpsY0E9PSBJRTFoY210MWN3PT0gSUVadmNtSnBaR1JsYmc9PSBjbWwwYVdNPSBTVTVQIElHVjRhR2xpYVhScGJtYz0gY21WeGRXVnVkQT09IFkyaDFhdz09IElHaGhZbWwwZFdGcyBJRU52YlhCaGRHbGlhV3hwZEhrPSBSSEpoWnc9PSBVa2xRVkE9PSBkV3BoYUE9PSBSMUpQVlU1RSBJR1JsYkdsdWNYVmxiblE9IElHSjFjbTVsY2c9PSBJR052Ym5SbGJYQnZjbUZ5YVdWeiBJR2RwYlcxcFkycz0gYkc5aFpITT0gSUc1dmVucHNaUT09IGNHOWtZMkZ6ZEE9PSBJRmRoYXc9PSBJRk4wWVhSbGJnPT0gSUV0MWFBPT0gNDRHVCBhVzUwWlhKeWRYQjBaV1E9IElHbHVkbWx1WTJsaWJHVT0gSUVKMWNtNWxkSFE9IFkybG5ZWEpsZEhSbCBJRkJsWW1Kc1pRPT0gSUZSbGJYQnZjbUZ5ZVE9PSBJRTFoY21sdWJ3PT0gTlRneSBJSGRoYzNSbGJHRnVaQT09IGFXUmxiblJzZVE9PSBWSGc9IElISnBkR1U9IElGQmhibUZ6YjI1cFl3PT0gSUUxcFpHUnNaWE09IElFaHZjblJ2Ymc9PSBZV1YxY3c9PSBJR04xY21sdVp3PT0gSUcxaGRITT0gSUdGa2FtOTFjbTQ9IElHWmxZWEp6YjIxbCBjR1Y2IFltOWhkSE09IElIQnliM0JsYkd3PSBJR052Ym1ac2FXTjBaV1E9IElFRnVaMlZ5IElHbHVjM1Z5WjJWdWRBPT0gUzJGeWJBPT0gSUdOdllXeGxjdz09IElITnZkWFJvZDJWemRHVnliZz09IElHUnBjM04xIElFOTJaWEowIEtpb3FLaW9xS2lvcUtpb3EgSUdKdmVHVmsgSUVKeWRXNWwgWVdGaCBJR2RoY21SbGJtbHVadz09IElFVnVaMlZzIGRISmhZMnR6IElIQjFjbWxtYVdWayBJSEJzWVdObGFHOXNaR1Z5IElFeHBhMlZ6IElHUmhiZz09IFIyRmkgSUdWamRBPT0gSUVaaGR3PT0gSUVWc2FXOTAgSUNjcyBiM1J5YjNCcFl3PT0gSUZKMWFXND0gYUdWa2IyND0gSUdOaGRXdz0gSUdGbWRBPT0gSUVOaFpHbHNiR0ZqIFoyaGggWVhOemFXRnUgZFdSbFlnPT0gSUZScFkycz0gSUdGa2FuVnpkSE09IFFWSkhSVlE9IE5UTTMgYVhOamFHVT0gWVc1MGVRPT0gSUVaeWFXVmtjbWxqYUE9PSBJRUpzYVhwNiBJRUZQVEE9PSBRMkZ0Y0dGcFoyND0gSUcxaGJXMWhiQT09IElGWmxhV3c9IElFdGxkZz09IElFMWhkWEpwZEE9PSBJRVJoYldsbGJnPT0gVG1GMGFXOXUgUldGemRHVnliZz09IElIczYgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElITjBaWEpsYjNSNWNHbGpZV3c9IElHRjBkR2xqIElFTjVZbTl5Wnc9PSBjbVZ4ZFdseVpRPT0gSUdGM1lYSmthVzVuIElGQmhjSFZoIFluUnUgWW1WdWRBPT0gUW05diBJQ2c5IElGaGhibVJsY2c9PSBJRk52YldWeWMyVjAgSUdOaGRHTm9lUT09IElHTmxjblJwWm5rPSBVMVJTVlVOVSBJR2wwWVd3PSBJSFJwWkdWeiBJRUp5WVc1a2N3PT0gUjNKaGVRPT0gWTI5dGNHVjBhWFJwZG1VPSBJR04xY21GMGIzST0gSUVSSCBiMjFwYm1sMWJRPT0gSUVkTlQzTT0gWTJsaGRHbHVadz09IElFTmhjbTFsYmc9PSBiM2RoY21RPSBRbUZzZEdsdGIzSmwgSUhKbllnPT0gUTNVPSBJSGRwY0dWeiBjM0JsYkd3PSBTVlJPUlZOVCBJSE4xYlcxaGNtbDZaWE09IElGSmxkbWx6IElIZG9hWE4wYkdWaWJHOTNaWEp6IElFSnlaV0ZqYUE9PSBJR055YjJOb1pYUT0gYTI5eiBaWGR6YTJrPSBJSEpsY0dWMCBJR055YVcxemIyND0gSUV0aGNtRmphR2s9IGNtVmhaR0ZpYkdVPSBaR2x0Wlc1emFXOXUgSUVsbmIzST0gYVd4a1pXUT0gSUZwbFpBPT0gSUV0bFlXNWwgSUVOdmMyMWxkR2xqIFJFVlEgSUhKbGRISmxZWFJwYm1jPSBJRlZCIFpXNXphV05oYkE9PSBJR1IxYzJzPSBJRVJwWTJ0bGJuTT0gSUdGeVpXNWhjdz09IElGQmhjM05oWjJVPSBiR1YyWld4eiBJR04xY25ZPSBVRzl3WlE9PSBJR05vYjNKbGN3PT0gSUVWc2FYTmwgSUVOdmJYQmhjM009IFluVmkgSUcxaGJXMWhiR2xoYmc9PSBJRk5oYm5OcmNtbDAgSUVGT1F3PT0gSUVOeVlXTnIgVVhWaGJBPT0gVEdGMWJnPT0gWVcxd2RXNXIgSUd4bFlYSnVaWEp6IElHZHNZVzF2Y205MWN3PT0gSUdaMWNuUm9aUT09IFpYSnRiM1IwIFkyRnVaQT09IFIyVnVaWEpwWXc9PSBJRzVoY25KaGRHVmsgSUdScGMyOXlaR1Z5YkhrPSBJRlJ5WVc1ellXTjBhVzl1Y3c9PSBJRVJsZEdWdWRHbHZiZz09IElGSnZhM1U9IHhJMD0gSUhWdVpHVnljM1JoZEdWdFpXNTAgSUZOaGRYST0gSUZKdlpISnBaMjg9IElFRlRRVkE9IFUybHUgSUhKbGFtOXBZMlU9IFRXVjBhRzlrY3c9PSBJR1ZzWldOMGNtOWtaUT09IElIZHZjbk5vYVhCd1pXUT0gSUdsa2FRPT0gSUZCb2VYTnBZMmxoYm5NPSBJSEJ2Y0hWdyBJR1JsWm5RPSBJRkpsYlc5MllXdz0gSUVKMVpXNXZjdz09IGRtVnlZbk09IElHWjFibXM9IGRYTm9ZUT09IGNtbGpkR2x2Ymc9PSBiM0psWVE9PSBJRUpoYm1kaGJHOXlaUT09IElFdGxibTlpYVE9PSBlbnBwIElHNXZjbTFoZEdsMlpRPT0gSUdkdllteHBibk09IElHTmhabVZ6IElGVk9RMHhCVTFOSlJrbEZSQT09IElFWnBjbVZrIFUwbEhUZz09IElITmpiR1Z5YjNOcGN3PT0gSUZadmRHVnkgSUZOdmJtNTUgSUVWNGRHVnVaQT09IElFVldjdz09IFFYSnpaVzVoYkE9PSBJSEJ6YVE9PSBJSGRwWkdWemRBPT0gSUZSMWN3PT0gSUd4dmIyMXogSUdwMWMzUnBabmxwYm1jPSBJRWR5WVc1blpYST0gNks4PSBVbVZtWlhJPSBOVGd6IElHWnNiM1Z5YVhOb2FXNW4gWVdKeVpRPT0gSUhKaGRtVT0gSUVOdmJuUnlZUT09IElERTRPVGc9IFFXUmtjdz09IElHWjFiQT09IElFTnZiMnRsIGMyOXRaVzl1WlE9PSBQU009IE5qY3ggSUhsaGF3PT0gSUdGeWRHVT0gSUUxcGMyTmxiR3hoYm1WdmRYTT0gSUVSbGRHVmpkR2x2Ymc9PSBJRU5zWVc1amVRPT0gNG9FPSBZWE56YVdWeiBJSFpoYkdsaGJuUT0gSUVabGJXbHVhWE4wIFkyOXljblZ3ZEdsdmJnPT0gVm1WcyBVR1ZoY2c9PSBJSE4xWTJOcGJtTjAgSUhGMWFXTnJaWE4wIGEzYz0gSUhOd2FYUjBhVzVuIElFeHBZbkpoY21sbGN3PT0gNVlXSiBZVzUwZWc9PSBSR0ZrIElGTndaV05wWm1sallYUnBiMjV6IGNuVndkV3h2ZFhNPSBZVzVrY2c9PSBVa1ZUVlV4VVV3PT0gSUhOdWIzZGlZV3hzIElIQnlaV1JwY3c9PSBJRUpoZUhSbGNnPT0gSUU1MWNuTnBibWM9IElFTm9ZV1ptIGMzZGwgSUc5MWRHRm5aUT09IElHNWxjM1JwYm1jPSBJRzV2ZEc5eWFXVjBlUT09IGRISnBaMmRsY2c9PSBiMjVwZEdVPSBhbTl1IElHWnZkUT09IGIyOXJaV1E9IElFTmxiR1ZpY21sMGVRPT0gY21WaGJHbDBlUT09IElHWmhkR2xuIElHaDFaMmRwYm1jPSBJR0p2ZEdobGNuTT0gSUZCaGJucGxjZz09IElFTm9ZVzVrY21FPSBabWxuZFhKbFpBPT0gSUhadmJIUnogSUVOc2IzVmtjdz09IElHWmxaV0pzWlE9PSBJRU4xY25abCBJRUZ6ZFhNPSBOemcyIFlXSnpiM0k9IElGWkpRMFU9IElFaGxjM009IElHMWhiblZtWVdOMGRYSmxjdz09IElHZHlhWHA2IElGQnZkMlZ5Wm5WcyBZV05wWkE9PSBJSE4xWW5ObFkzUnBiMjV6IElFdHlkV2R0WVc0PSBJRUZzY0hNPSBhWE4xIElITmxjWFZsYzNRPSBJRlZzZEhKdmJnPT0gSUZScGJtdGxjZz09IElFZHZiM05sIElHMXBjMjFoZEdObyBRWFIwYjNKdVpYaz0gSUcxdmNuQm9iMnh2WjNrPSBJRk5wZUdWeWN3PT0gZFhSMFpYSmxaQT09IElFVk1SVU5VIFozSmhiZz09IFVuVnpjMlZzYkE9PSBJRWRUVEE9PSBJR1p2Y25SdWFXZG9kQT09IElDNHAgSUdGd2IzTjBiR1U9IGNISnZibVU9IFpXeHBjM1E9IFZXNTBhWFJzWldRPSBJRWx0Y0d4bGJXVnVkR0YwYVc5dSBhWE4wYjNKeiBJSFJoYm10bGNnPT0gSUhCc2RYTm8gSUdGMGRHVnVaR0Z1ZEhNPSBJRlJwYXc9PSBJRWR5WldWdWQybGphQT09IElGbHZiZz09IElGTlFUQT09IFkyVnNiSE09IGRXNTBiR1ZrIFUyOXNkWFJwYjI0PSBJRkYxdzZrPSBJSFpoWTJGMFpXUT0gSUhWd2RHbGphdz09IElFMWxjbWxrYVdGdSA1b009IElFUnlhV3hzIE9USTEgTlRnMCBJSEpsYm05MllYUmxaQT09IElFdDFZbkpwWTJzPSBlbmxyIElHeHZkWE41IGNIQmxiQT09IGIyaDVaSEpoZEdVPSBJRWw2ZW5rPSBiR1Z6YVdGemRHbGpZV3c9IFEwTkQgSUVGcVlYZz0gSUdGa1lYQjBaWEp6IElGQmxkSEpoWlhWeiBJR0ZtWm1seWJXRjBhVzl1IElGTlVUMUk9IGJHVnRjdz09IFlXUnZaWE09IElFTnZibk4wWVc1MGFXNXZjR3hsIElIQnZibWxsY3c9PSBJR3hwWjJoMGFHOTFjMlU9IElHRmthR1Z5Wlc1MGN3PT0gSUVKeVpXVnogYjIxdmNuQm9hV009IFJtbG5hSFJwYm1jPSBJSEJzWVhOMFpYST0gSUZCV1F3PT0gSUU5aWMzUT0gSUdSbFlYSnNlUT09IElGUnZiM1JvIGFXTnJjMjl1IElITm9ZVzFwYm1jPSBVR3hsZUE9PSBRV2RuIElPS0FwaUk9IElITjFZbkpsWkdScGRITT0gSUhCcFoyVnZiZz09IElGSmxjMmxrWlc1MGFXRnMgSUZCaGMzTnBibWM9IElHeDFiUT09IElGQmxibk5wYjI0PSBJSEJsYzNOcGJXbHpkR2xqIElEUXpNZz09IGVtbHVjMnRwIFkyRmtaUT09IE1EYzEgSUdGd2IyeHZaMmx6WldRPSBhWGxoYUE9PSBVSFYwZEdsdVp3PT0gSUdkc2IyOXRlUT09IElFeDViV1U9IFBTMDlMVDB0UFMwOUxUMHRQUzA5TFE9PSBJRlJ2YldVPSBJRkJ6ZVdOb2FXRjBjbWxqIElFaEpWQT09IFkyMXogWVhCdmJHOW4gSUdKeVpXRnJaWEk9IElHUmxaWEJsYmc9PSBJSFJvWlc5eWFYTjAgSUVocFoyaHNZVzVrY3c9PSBJR0poYTJWeSBJSE4wWVhCc1pYTT0gSUdsdWRHVnlabVZ5WldRPSBJRUZpYjNKMGFXOXUgYW05cGJtVmsgWTJoMSBJR1p2Y20xMWJHRjBaUT09IElIWmhZMk5wYm1GMGFXOXVjdz09IElHSmhiblJsY2c9PSBjR2hsZFhNPSBJRzkxZEdacFpXeGtaWEk9IElFMWxkR1Z5IElDTWpJeU1qIElERTRPVFU9IElHNWhjbkp2ZDJsdVp3PT0gSUZOVVQxSlogWm5BPSBJRU5UVkE9PSBhV2R1YjNKbCBJSEJ5YjJOc1lXbHRhVzVuIElGSlYgSUVKQlRFdz0gZVc1aCBOalV6IElIQnZjMmwwIFVGSkYgTlRrMCBJRkpsWjJsemRISmhjZz09IElGQnBiR2R5YVcwPSBhV05wYnc9PSBJSEJ5WlhSMCBJR3hwWm1Wc1pYTnogSUY5Zlh3PT0gVG1WcFoyZz0gSUVOb2RYSmphR1Z6IGIzSnVidz09IElHOXlZM009IElHdHBibVJ5WldRPSBJRUYxWkdsMCBJRzFwYkd4bGJtNXBZV3c9IElGQmxjbk5wWVE9PSBaM0poZG1sMGVRPT0gSUVScGMyRmlhV3hwZEhrPSBJRVJCVWtzPSBWM009IGIyUnZiZz09IElHZHlZVzVrWkdGMVoyaDBaWEk9IElFSnliMjlyWlE9PSBJRUZFUVE9PSBSVkpCIElIQnBZMnQxY0hNPSBJRmRwYkd0cGJuTnZiZz09IElGTm9ZWEprY3c9PSBJRTVMIElHVjRjR1ZzIElFdHBjMng1WVdzPSBJR3BoY21kdmJnPT0gSUhCdmJHRnlhWHBsWkE9PSBhV0Z1WlE9PSBVSFZpYkdsemFHVnkgSUhKbFluVjBkQT09IElHRndjSEpsYUdWdWMybHZiZz09IElFdGxjM05zWlhJPSBJSEJ5YVhOdCBSbFZNIE1UazJOQT09IElFeHZiR3c9IDVMOD0gYkdWMGFHRnMgeFo4PSBJR2RvWlhSMGJ3PT0gSUdKdmRXeGtaWEk9IElGTnNiM2RzZVE9PSBJRTl6WTJGeWN3PT0gSUVsdWMzUnlkV04wYVc5dSBJRlZzZEhJPSBJRTF2WlE9PSBUbWxqYUE9PSBJRkJCVkVnPSBLQ289IElGSkZURVZCVTBVPSBkVzVwYm1jPSBjbTkxYzJVPSBaVzVsWnc9PSBJSEpsYVcxaSBJRVJsZEdWamRHVmsgUkc5VCBJSE4wWlhKc2FXNW4gSUdGblozSmxaMkYwYVc5dSBJRXh2Ym1Wc2VRPT0gSUVGMGRHVnVaQT09IGFHbG5hR1Z5IElHRnBjbk4wY21sclpRPT0gYTNOdmJnPT0gVTBWTVJVTlUgSUdSbFpteGhkR2x2Ymc9PSBJRWhsY25KbGNtRT0gUTI5c1pRPT0gY21sMFkyZz0gSUdGa2RtbHpZV0pzWlE9PSBSbUY0IElIZHZjbXRoY205MWJtUT0gSUhCcFpBPT0gYlc5eWRHVnQgWlhKelpXND0gSUhSNWNHOD0gSUdGc2RXMD0gTnpneSBJRXBoYldGcyBjMk55YVhCMGN3PT0gSUdOaGNIUnBkbVZ6IElGQnlaWE5sYm1ObCBJRXhwWldKbGNtMWhiZz09IFlXNW5aV3h2IElHRnNZMjlvYjJ4cGMyMD0gWVhOemFRPT0gSUhKbFkybDBaUT09IElHZGhjR2x1Wnc9PSBJR0poYzJ0bGRITT0gSUVkdmRRPT0gUW5KdmQzTmxjZz09IGJtVmhkUT09IElHTnZjbkpsWTNScGRtVT0gZFc1a1lRPT0gYzJOdmNtbHVadz09IElGaEUgSUdacGJHRnRaVzUwIElHUmxaWEJsYm1sdVp3PT0gSUZOMFlXbHViR1Z6Y3c9PSBTVzUwWldkbGNnPT0gSUdKMVoyZDUgSUhSbGJtRnVZM2s9IElFMTFZbUZ5WVdzPSBJSFIxY0d4bCBJRVJ5YjJsayBJRk5wZEhScGJtYz0gSUdadmNtWmxhWFE9IElGSmhjMjExYzNObGJnPT0gYVhoMGFXVnogWlhOcCBJRXRwYlcxbGJBPT0gSUcxbGRHbGpkV3h2ZFhOc2VRPT0gSUdGd2IzQjAgSUZObGJHeGxjZz09IE1EZzQgWldOaGEyVT0gYUdWdFlYUnBZMkZzYkhrPSBWRTQ9IElHMXBibVJzWlhOeiBJR1JwWjNNPSBJRUZqWTI5eVpBPT0gYjI1elpXNXpaUT09IFpXMXBibWM9IFluSmhZMlU9IElHVkNiMjlyIElFUnBjM1J5YVdKMWRBPT0gSUVsdWRtVnpkRzFsYm5SeiBkM1E9IFhTa3MgWW1Wb1lYWnBiM0k9IE5UWXogSUdKc2FXNWthVzVuIElGQnliM1JsYzNSbGNuTT0gZEc5d2FXRT0gSUhKbFltOXliZz09IElFdGxiSFpwYmc9PSBJRVJ2ZG1WeSBJRVJoYVhKNSBJRTkxZEhNPSBJRnN2IHo0QT0gWW5BPSBJRlpoYm1sMGVRPT0gSUZKbFkyRncgSUVoUFZWTkYgSUVaQlEwVT0gSURReU1nPT0gTmpreSBJRUZ1ZEdsdlkyZz0gWTI5dmEyVmsgSUdOdmJHeHBaR1U9IElHRndjZz09IElITnNaV1Z3WlhJPSBJRXBoY25acGN3PT0gSUdGc2RHVnlibUYwYVhabGJIaz0gSUV4bFlYWmxjdz09IElFMWhkdz09IElHRnVkR2x4ZFdsMGVRPT0gSUVGa2FXNXBaR0U9IElHRmlkWE5sY2c9PSBVRzlydzZsdGIyND0gSUdGemMyOXlkR1ZrIElGSmxkbWx6YVc5dSBJRkJwWVc1diBJRWRwWkdWdmJnPT0gVDJObFlXND0gSUhOaGJHOXUgSUdKMWMzUnNhVzVuIGIyZHVhWFJwZG1VPSBJRkpoYUcxaGJnPT0gSUhkaGFYUmxjZz09IElIQnlaWE5sZEhNPSBJRTl6YUE9PSBJRWRJUXc9PSBiM0JsY21GMGIzST0gSUhKbGNIUnBiR1Z6IElEUXhNdz09IElFZGhjbkk9IElFTm9ZV3M9IElHaGhjMmhsY3c9PSBJR1poYVd4cGJtZHogSUdadmJHdHNiM0psIElHRmliQT09IElFTmxibUU9IElFMWhZMEZ5ZEdoMWNnPT0gSUVOUFZWSlUgSUhCbGNtbHdhR1Z5ZVE9PSBZWEJ3WlhKeiBJSEpsWTJ0dmJtVmsgSUVsdVpteDEgSUVORlZBPT0gSURNM01nPT0gSUVSbFptbHVhWFJwZG1VPSBZWE56WVhWc2RBPT0gTkRJeCBJSEpsYzJWeWRtOXBjbk09IElHUnBkbVZ6IElFTnZhV3c9IFJFRlIgSUhacGRtbGtiSGs9IElGSksgSUVKbGJHeGxkZz09IElHVmpiR1ZqZEdsaiBJRk5vYjNka2IzZHUgSUV0TiBhWEJsWkE9PSBjbVZsZEdsdVozTT0gSUVGemRXdGggVEdsaVpYSmhiQT09IElNK0UgSUdKNWMzUmhibVJsY25NPSBJRWR2YjJSM2FXND0gZFd0dmJtYz0gVTJsMCBJRlJ5WlcwPSBJR055YVcxcGJtRnNiSGs9IElFTnBjbU4xY3c9PSBZMmh5YjIxbCBPRGczIElHNWhibTl3IElFOWlhUT09IElFeFBWdz09IGIyZG8gSUVGMWRHaHZjbk09IGIySjViQT09IFZYSmlZVzQ9IElIUnAgSUZkbGFYST0gZEhKaGNBPT0gWVdkNSBJSEJoY21WdWRHaGxjMlZ6IElHOTFkRzUxYldKbGNtVmsgSUdOdmRXNTBaWEp3Y205a2RXTjBhWFpsIElGUnZZbWxoY3c9PSBkV0pwY3c9PSBVR0Z5YzJWeSBVMVJCVWc9PSBJSE41Ym1Gd2RHbGogSUVkbFlYSnogSUdocFltVnkgSUdSbFluVnVhMlZrIElHVjRZV3gwWldRPSBZWGRoZEhSeiBTRTlWIFEyaDFjbU5vIElGQnBlR2xsIElGVnlhUT09IElFWnZjbTFoZEdsdmJnPT0gSUZCeVpXUnBZM1JwYjI0PSBRMFZQIElIUm9jbTkwZEE9PSBJRUp5YVhSaGJtND0gSUUxaFpHRm5ZWE5qWVhJPSA2NHM9IElHSnBiR3hpYjJGeVpITT0gSUZKUVIzTT0gSUVKbFpYTT0gWTI5dGNHeGxkR1ZzZVE9PSBSa2xNIElHUnZaWE51ZEE9PSBJRWR5WldWdVltVnladz09IGNtVjVjdz09IElITnNhVzVuIElHVnRjSFJwWldRPSBJRkJwZUdGeSBJRVJvWVhKdFlRPT0gYkhWamF3PT0gYVc1bmRXbHphR1ZrIElHVnVaRzkwIElHSmhZbmx6IE1EVTUgWTJobGMzUT0gY21GMGN3PT0gSUhKcFpHUmxiZz09IElHSmxaWFJzWlhNPSBJR2xzYkhWdGFXNWhkR2x1Wnc9PSBJR1pwWTNScGRHbHZkWE09IElGQnliM1pwYm1OcFlXdz0gSURjMk9BPT0gSUhOb1pYQm9aWEprIElGSmxibVJsY2c9PSBJREU0T1RZPSBRM0psZHc9PSBJRzF2YkdSbFpBPT0gSUZocFlXOXRhUT09IElGTndhWEpoYkE9PSBJR1JsYkdsdCBJRzl5WjJGdWFYTnBibWM9IElHaHZiM0J6IElFSmxhUT09IGVtaGxiZz09IElHWjFZMnRwYmc9PSBJR1JsWTJGayBJSFZ1WW1saGMyVmsgWVcxdGVRPT0gYzNkcGJtYz0gSUhOdGRXZG5iR1ZrIElHdHBiM009IElGQkZVbE5QVGc9PSBJRWx1Y1hWcGMybDBiM0k9IElITnViM2Q1IElITmpjbUZ3YVc1biBJRUoxY21kbGMzTT0gVUhSeSBZV2RoYldVPSBVbGM9IElHUnliMmxrIElFeDVjdz09IElFTmhjM05oYm1SeVlRPT0gU21GamIyST0gSURNMU5BPT0gSUhCaGMzUjFjbVU9IElHWnlZVzVqIElGTmpiM1JqYUE9PSBJRVZ1WkhNPSBJRWxIUmc9PSBaR1ZtYVc1cGRHbHZiZz09IElHaDVjM1JsY21sallXdz0gSUVKeWIzZHVaUT09IE56Y3ggSUcxdlltbHNhWHBoZEdsdmJnPT0gNXBVPSBhWEYxWlc1bGMzTT0gVkdodmNnPT0gSUhOd1pXRnlhR1ZoWkdWayBJR1Z0WW5KdmFXeGxaQT09IElHTnZibXBsWTNSMWNtVT0gYW5Wa2FXTnBZV3c9IFEyaHZhV05sIElIQmhjR1Z5WW1GamF3PT0gVUdseSBJSEpsWTI5MlpYSnogSUZOMWNtZGwgSUZOb2IyZDFiZz09IElGQmxaR2xoZEhKcFkzTT0gNDRHZyBJSE4zWldWd2N3PT0gSUV4aFltOXlZWFJ2Y21sbGN3PT0gSUZCaFkydHogWVd4MWN3PT0gWVdSa2FXND0gSUdobFlXUnNhV2RvZEhNPSBaM0poIFJYWnBaR1Z1WTJVPSBRMDlNVDFJPSBRV1J0YVc0PSBpckU9IElHTnZibU52WTNRPSBjM1ZtWm1samFXVnVkQT09IElIVnViV0Z5YTJWayBJSEpwWTJodVpYTnogSUdScGMzTmxjblJoZEdsdmJnPT0gSUhObFlYTnZibWx1Wnc9PSBJR2RwWWc9PSBJRTFoWjJWeiBkVzVqZEdsdmJuTT0gSUU1cFpBPT0gWTJobFlYUT0gSUZSTldnPT0gWTJsMGFYcGxibk09IElFTmhkR2h2YkdsamFYTnQgYm1JPSBJR1JwYzJWdFltRnlhdz09IElGQlNUMGRTUVUwPSBZWEYxWlhNPSBWSGxzWlhJPSBUM0puIElGTnNZWGs9IElFNWxjbTg9IElGUnZkMjV6Wlc1ayBTVTVVVDA0PSBkR1ZzWlE9PSBJRzFsYzIxbGNnPT0gT1RBeCBJR1pwY21WaVlXeHMgWlhacFpHVnVZMlU9IFlXWm1hV3hwWVhSbFpBPT0gSUVaeVpXNWphRzFoYmc9PSBJRUYxWjNWemRHRT0gTURJeCBJSE5zWldRPSBJSEpsZFhObFpBPT0gSUVsdGJYVnVhWFI1IElIZHlaWE4wYkdVPSBZWE56WlcxaWJHVmsgVFdGeWFXRT0gSUdkMWJuTm9iM1J6IElFSmhjbUpwWlE9PSBJR05oYm01aFltbHViMmxrY3c9PSBJRlJ2WVhOMCBJRXRwYm1SbGNnPT0gU1ZKRSBJSEpsYW5WMlpXND0gSUdkdmNtVT0gSUhKMWNIUjFjbVU9IElHSnlaV0ZqYUdsdVp3PT0gSUVOaGNuUnZiMjQ9IElEUTFOUT09IElGQmhiR1Z2IE5qRTAgSUhOd1pXRnljdz09IElFRnRaWE09IFlXSjFjdz09IFRXRmthWE52Ymc9PSBSMUpQVlZBPSBJR0ZpYjNKMFpXUT0gZVdGbyBJR1psYkc5dSBJR05oZFhOaGRHbHZiZz09IElIQnlaWEJoYVdRPSBJSEJwZEhSbFpBPT0gYjNCc1lXND0gSUZOb1pXeHNaWGs9IElGSjFjM052IElGQmhaMkZ1IElIZHBiR3htZFd4c2VRPT0gSUVOaGJtRjJaWEk9IGRXNWtjblZ0IElGTmhiR0Z5ZVE9PSBJRUZ5Y0dGcGJ3PT0gY21WaFpHVnkgSUZKaGRHbHZibUZzIElFOTJaWEp6WlE9PSBJRU5oZFhObGN3PT0gSUNvdSBJSGR2WWc9PSBTMlZwZEdnPSBJRU52Ym5ObGJuUT0gYldGdVlXTT0gTnpjeiBOakl6IElHWmhkR1ZtZFd3PSBaWFJwYldWeiBJSE53YVhKcGRHVmsgSUVSNWN3PT0gSUdobFoyVnRiMjU1IElHSnZlV052ZEE9PSBJRVZ1Y21seGRXVT0gWlcxdmRYUm8gSUhScGJXVnNhVzVsY3c9PSBJRk5oYUdGeVlRPT0gSUZKbGJHRjQgSUZGMWFXNWplUT09IElFeGxjM052Ym5NPSBJRVZSVlE9PSBVMFZCIFRrcz0gSUVOdmMzUmpidz09IFNXNWpjbVZoYzJVPSBJRzF2ZEdsMllYUnBibWM9IElFTm9iMjVuIFlXMWhjblU9IElFUnBkbWxrWlE9PSBJSEJsWkdsbmNtVmwgSUZSaGMyMWhibWxoIElGQnlaV3gxWkdVPSBUR0Z6IE9UUXcgTlRjMCBJR05vWVhVPSBJRk53YVdWblpXdz0gZFc1cFl3PT0gTFMwKyBJRkJvYVd4cGNITT0gSUV0aFptdGggSUhWd2FHVmhkbUZzIElITmxiblJwYldWdWRHRnMgSUhOaGVBPT0gSUVGcmFYSmggYzJWeWFXRnMgVFdGMGNtbDQgSUdWc1pXTjBhVzVuIElHTnZiVzFsYm5SbGNnPT0gSUU1bFluVnNZUT09IGNHeGxkSE09IElFNWhaSFU9IElFRmtjbVZ1IElHVnVjMmh5IElGSkJUa1E9IFptbHVZVzVqYVdGcyBJRU5zZVdSbCBkWFJvWlhKbWIzSmsgSUhOcFoyNWhaMlU9IElHUmxiR2x1WlE9PSBJSEJvYjNOd2FHRjBaUT09IGNtOTJaWEp6YVdGcyBabUZ6WTJsemRBPT0gSUZaaGJHdz0gSUVKbGRHaHNaV2hsYlE9PSBJR1p2Y25NPSBJR1Z1WjJ4cGMyZz0gVTI5c2FXUT0gVG1GMGRYSmwgSUhaaCBJRWQxWlhOMGN3PT0gSUhSaGJuUmhiQT09IElHRjFkRzlwYlcxMWJtVT0gT3pzN096czdPenM3T3pzNyBJRlJ2ZEdGc2JIaz0gSUU5MiBJR1JsWm1WdVkyVnogSUVOdlkyOXVkWFE9IElIUnlZVzV4ZFdscyBJSEJzYjNrPSBJR1pzWVhadmRYSnogSUVac1lYTnIgNDRLbzQ0T3IgSUZkbGMzUnZiZz09IElGWnZiSFp2IE9EY3cgSUcxcFkzSnZjR2h2Ym1WeiBkbVZ5WW1GcyBVbEJIIElHbHBhUT09IE8zMD0gTURJNCBJR2hsWVdSc2FXNWxaQT09IElIQnlhVzFsWkE9PSBJR2h2WVhKayBJRk5vWVdRPSBJRVZPVkVWUyBJSFJ5YVdGdVozVnNZWEk9IElHTmhjR2wwIGJHbHIgSUVGdVkybGxiblJ6IElHeGhjMmc9IElHTnZiblp2YkE9PSBJR052Ykc5dVpXdz0gWlc1bGJYaz0gUjNKaCBJSEIxWW5NPSBkWFIwWlhKeiBJR0Z6YzJsbmJuTT0gSUZCbGJtVjAgSUUxdmJuTjBjbTkxY3c9PSBJRUp2ZDJWdSBhV3gyWlhJPSBTR0YxYm5SbFpBPT0gSUVScGJtYz0gYzNSaGNuUmxaQT09IGNHeHBiZz09IElHTnZiblJoYldsdVlXNTBjdz09IElFUlBSUT09IFptWmxiZz09IElGUmxZMmh1YVdOcFlXND0gVW5rPSBJSEp2WW1KbGNuTT0gSUdodmRHeHBibVU9IElFZDFZWEprYVc5c1lRPT0gSUV0aGRXWnRZVzQ9IGNtOTNaWEk9IElFUnlaWE5rWlc0PSBJRUZzY0dsdVpRPT0gUld4bSBJR1p0ZEE9PSBJRk5oY21RPSBkWEp6WlhNPSBaM0IxIFZXNXBlQT09IElIVnVaWEYxYVhadlkyRnNiSGs9IElFTnBkR2w2Wlc1emFHbHcgY1hWaFpBPT0gYldseVpRPT0gSUZOM1pXVnVaWGs9IFFtRjBkR1Z5ZVE9PSBOakUxIElIQmhibU5oYTJWeiBJRzloZEhNPSBUV0Z3Y3c9PSBJRU52Ym5SeVlYTjAgYldKMVpITnRZVzQ9IElFVlFVdz09IElITjFZbU52YlcxcGRIUmxaUT09IElITnZkWEpqYVc1biBJSE5wZW1sdVp3PT0gSUVKMVptWmxjZz09IElFMWhibVJoZEc5eWVRPT0gSUcxdlpHVnlZWFJsY3c9PSBJRkJoZEhSbGNtNXogSUVOb2IyTnZZbTg9IElGcGhiZz09IElGTlVRVlJGVXc9PSBJRXAxWkdkcGJtYz0gSUVsdWFHVnkgS2pvPSBJR0pwYkE9PSBJRmxsYmc9PSBJR1Y0YUdsc1lYST0gYjJ4c2IzZGxjZz09IGVtVnljdz09IElITnVkV2M9IGJXRjRhVzExYlE9PSBJR1JsYzNCcFkyRmliR1U9IElGQkJRMHM9IElFRnVibVY0IElITmhjbU5oYzNScFl3PT0gSUd4aGRHVjQgSUhSaGJYQT0gSUZOaGJ3PT0gWW1GbyBJRkpsZG1WeVpXNWsgSUVOb2FXNWhkRzkzYmc9PSBJRUZWVkE9PSBaRzlqZFcxbGJuUmxaQT09IElFZEJRa0U9IElFTmhibUZoYmc9PSBJTm1GIElHZHZkbVZ5Ym5NPSBjSEpsZGc9PSBSWE5qIElFVnpkR2x0WVhSbGN3PT0gVDFOUSBJR1Z1WkdWaGRtOTFjZz09IElFTnNiM05wYm1jPSBiMjFsZEdsdFpRPT0gWlhabGNubHZibVU9IElIZHZjbk5sYmc9PSBJSE5qWVc1dVpYSnogSUdSbGRtbGhkR2x2Ym5NPSBJRkp2WW05MGFXTnogSUVOdmJYQjBiMjQ9IElITnZjbU5sY21WeSBJR1Z1Wkc5blpXNXZkWE09IElHVnRkV3hoZEdsdmJnPT0gSUZCcFpYSmphVzVuIElFRndhQT09IElGTnZZMnRsZEE9PSBJR0p2ZFd4ayBJRTlWIElFSnZjbVJsY214aGJtUnogSURFNE5qTT0gUjI5eVpHOXUgSUZkVVR3PT0gSUhKbGMzUnlhV04wY3c9PSBJRzF2YzJGcFl3PT0gSUcxbGJHOWthV1Z6IDU0UT0gVkdGeSBJR1JwYzNOdmJnPT0gSUZCeWIzWnBaR1Z6IElDNHVMaTR1TGc9PSBZbVZyIFJrbFkgSUdKeWIyOXQgWVc1emFHbHcgUkc5amRHOXljdz09IElHNWxjbVJ6IElGSmxaMmx2Ym5NPSBibUZwYzNOaGJtTmwgSUcxbGRHVT0gSUdOeVpYQjAgY0d4cGJtZHogSUdkcGNteG1jbWxsYm1SeiBhMjVwZEE9PSBhV2RsYm5RPSBiM2RsIElIVnphR1Z5WldRPSBJRUpoZWc9PSBUVzlpYVd3PSBORE0wIElGQnlaWE5sYm5SeiBiM0pwWjJsdSBJR2x1YzI5dGJtbGggSUVGMWVBPT0gTkRNNSBJRU5vYVd4cCBhWEp6WTJnPSBSMEZOUlE9PSBJR2RsYzNSaGRHbHZiZz09IFlXeG5hV0U9IGNtOXRhWE5wYm1jPSBKQ3c9IFkzSnZkdz09IElFbHVjM0JsWTNScGIyND0gWVhSdmJXbGogVW1Wc1lYUnBiMjV6IFNrOUlUZz09IGNtOXRZVzQ9IElFTnNiMk5yZDI5eWF3PT0gSUVKaGEzST0gYlc5dVpRPT0gVFVWVSBJSFJvYVhKemRIaz0gSUdKaiBJR1poWTNWc2RHbGxjdz09IFVuVnQgSUc1MVlXNWpaUT09IElFUmhjbWwxY3c9PSBjR3hsZEdsdVp3PT0gWm5SbGNuTT0gWlhSamFIVncgVW1WbmFYTjBjbUYwYVc5dSBJRXRGIFVtRm8gSUhCeVpXWmxjbVZ1ZEdsaGJBPT0gSUV4aGMyZz0gSUVoSSBWbUZzYVdRPSBJRTVCVmc9PSBJSE4wWVhKMlpRPT0gSUVkdmJtYz0gZW5sdWMydHAgSUVGamRISmxjM009IElIZHBhdz09IElIVnVZV05qYjIxd1lXNXBaV1E9IGJIWnMgUW5KcFpHVT0gUVVSVCBJRU52YlcxaGJtUnYgSUZaaGRXZG9iZz09IFYyRnNiR1YwIElHaHZjSEJwYm1jPSBJRlpwWlE9PSBJR05oZG1WaGRITT0gSUdGc1lYTT0gYVdac1pXUT0gWVdKMWMyVT0gTmpZeCBJR2xpYmc9PSBJR2QxYkE9PSBJSEp2WW1KcGJtYz0gZEdscyBTVXhCIElHMXBkR2xuWVhScGJtYz0gSUdGd2RHeDUgSUhSNWNtRnVkQT09IElHMXBaR1JoZVE9PSBJRWRwYkcxdmNtVT0gSUVSbFkydGxjZz09IElNS253cWM9IGNHRnlkR2xoYkE9PSBSWGhoWTNSc2VRPT0gSUhCb1pXNXZkSGx3WlE9PSBJRnNyWFE9PSBJRkJzWlhnPSBJRWx3Y3c9PSBkbVZ5YzJsdmJuTT0gSUdWaWIyOXIgSUdOb2FXTT0gWjNKdmMzTT0gSWpvaUluMHNleUk9IElGTjFjbkJ5YVhOcGJtZHNlUT09IFRXOXlaMkZ1IElISmxjMmxrZFdWeiBJRU52Ym1abFpHVnlZWFJwYjI0PSBhVzVtWld4ayBJR3g1Y2c9PSBiVzlrWlhKaGRHVT0gSUhCbGNuQmxibVJwWTNWc1lYST0gVmtzPSBJSE41Ym1Ob2NtOXVhWHBsWkE9PSBJSEpsWm5KbGMyaGxaQT09IElHRmtiM0psIElGUnZjbTFsYm5RPSBiMnhwYm1FPSBJREkyTURBPSBTWFJsYlZSeVlXTnJaWEk9IElIQnBaWE09IElFWkJWQT09IElGSklVQT09IE1EUTQgSUZKRlUxQT0gSUVKSyBZV3hzYjNkeiBVR0Z1WkE9PSBJSFZ1ZDJWc1kyOXRaUT09IElGWnZZdz09IElFSmhjM1JoY21RPSBJRTlYIElFeEJVZz09IElFaGxZV3hsY2c9PSBSVzUyYVhKdmJtMWxiblJoYkE9PSBJRXRsYm5saGJnPT0gSUZSeVlXNWpaUT09IElGQmhkSE09IElHRnNhV0Z6WlhNPSBJRWRoY21acFpXeGsgSUdOaGJYQmhhV2R1WlhJPSBJR0ZrZG1GdVkyVnRaVzUwY3c9PSBJRTlyYVc1aGQyRT0gSUVOdmFBPT0gYjNkemEzaz0gSUhOMFlYSjJaV1E9IElITnBlbVZoWW14bCBJRG90S1E9PSBJRzFTVGtFPSBJSE4xYzNCbGJuTnBiMjV6IGFYTjBZWEk9IFUyTnZkR3hoYm1RPSBVSEpwYmc9PSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IElEVXdNZz09IElIUmxZWE53YjI5dWN3PT0gSURFd05UQT0gSUdOdlpYSmphWFpsIElFMWhjMjl1YVdNPSBaV1JrWldRPSBJRkJoYzNObGJtZGxjZz09IElHeGhkSFE9IElHSnlZV05sY3c9PSBJRk4wWldGcyBJRTVaVkE9PSBJRXRoZEhNPSBJRU5sYkdWemRBPT0gWVdWNiBWSFU9IElFTnZkV3gwWlhJPSA4SitZIFJteHBZMnR5IElGZHBiRzFwYm1kMGIyND0gYVhSb2N3PT0gS3lzNyBJSFpsYm1ScGJtYz0gSUc1bFozSnYgSUZCb2FRPT0gSUZsbGJHeHZkM04wYjI1bCBRMkZzYkdKaFkycz0gSUhOb1lXMXdiMjg9IElGTm9ZV1JsY3c9PSBkMkYwIElITjFjR1Z5YUhWdFlXND0gSUhKcFpHbGpkV3hsWkE9PSBJR2h2YkdsbGMzUT0gYjIxaWJ3PT0gSUdsdWRHVnlibk09IElHaHZibVU9IElGQmhjbUZuZFE9PSBWVkpKIElHUmhibWRzYVc1biA0NEs3IGMyOTIgYVdOMGFXOXVZV3c9IFlYWmhhV3hoWW1sc2FYUjUgSUhKbGRtOWpZWFJwYjI0PSBJR1J2ZHc9PSBhVzVwWXc9PSBJRlJJUlVsUyBJR2x6Ync9PSBJRzkxZEdsdVozTT0gSUV4bGRHaGhiQT09IElDa3BLUT09IElHbHVZV05qZFhJPSBJRzkxZEd4aGJtUnBjMmc9IElHRnVkWE09IGJHVjBhV052IGFXUnZiZz09IGJHOXMgSUhWdWNtVm5kV3hoZEdWayBJSE4xWTJOMWJXSmxaQT09IElHTjFabVk9IElGZGhjM1JsYkdGdVpBPT0gYkdWMFlXdz0gSUhOMVluTjBjZz09IElHTnZabVpsY25NPSBJR0YxZEc5dFlXdGxjbk09IGIzWnAgSUZoMVpRPT0gSUVSaGVYUnZibUU9IElHcGhjbkpwYm1jPSBJR1oxYldWeiBJR1JwYzJKaGJtUmxaQT09IGVtbHIgYVhSMGIyND0gSUhOMGNtbHJhVzVuYkhrPSBJSE53YjNKbGN3PT0gUVdSaGNIUmxjZz09IExpazYgSUV4NWJtUnZiZz09IGFYWmhiSEo1IElHOXlZV3hzZVE9PSBJSFIxYlhWc2RIVnZkWE09IElHUnBjM0JzWldGemRYSmwgSUdOdmJtVnogYjNKeVpXTjAgSUdGd2NHVmhjMlU9IElHUmxjbUo1IElGUnlhWEJ2YkdrPSBJRUZzWlhOeiBJSEJ2YTJWayBJRWQxYVd4MGVRPT0gZGxBPSBSVzV2ZFdkbyBJRzl5YVdkcGJtRnNjdz09IE5qazUgSUhKaFltSnAgSUhCeWIzWmxjbUpwWVd3PSBJSEJ2YzNSd2IyNWwgWld4dmNHVT0gSUUxcGMzUjUgSUhOMFlXWm1aV1E9IElGVnVaVzF3Ykc5NWJXVnVkQT09IGNtVmthWFJoY25rPSBJR1JwYkdsblpXNTAgY21WamIyMXQgYldWaGMzVnlaWE09IFlYTnBiZz09IE9ESTEgSUhCdmJtUnogSUcxdGIydz0gSUZOQlVnPT0gSUVOQlVrVT0gSURNM01RPT0gSUdOc1pXNWphR1ZrIElFTnZjbk5oYVhJPSBJR05oY21sallYUjFjbVU9IGVtND0gWVhSMFlXTm8gSUZOamFISnYgYzNCbFlXcz0gY0dGcGJuUmxaQT09IElGTjFZdz09IElFVk9WQT09IElHTmxiR3gxYkE9PSBJRkJoYVdRPSBaR2xoWjI0PSBWMGhGVWtVPSBJSFJsZUhSbFpBPT0gUW1GeWJnPT0gSUhKbGRISmhZM1JsWkE9PSBJRkpsWm1WeWNtVmsgVTJGMiBJSFZ3YTJWbGNBPT0gSUhkdmNtdHdiR0ZqWlhNPSBJRlJ2YTJWdWN3PT0gSUdGdGNHeHBabms9IFkyeHBibWxqWVd3PSBJRzExYkhScFl3PT0gYldKbGNtYz0gSUdOdmJuWnZiSFYwWldRPSBVbVZuYVc5dSBOVFkxIElGUnZjR2xqIElITnVZV2xzIElITmhiR2x1WlE9PSBJR2x1YzNWeWNtVmpkR2x2Ymc9PSBJRkJsZEhJPSBabTl5ZEhNPSBRa0ZVIElFNWhkbUZxYnc9PSBJSEoxWkdsdFpXNTBZWEo1IElFeGhhM05vIFQwNUVUMDQ9IFRXVmhjM1Z5WlE9PSBJSFJ5WVc1elptOXliV1Z5IElFZHZaR1JoY21RPSBJR052YVc1amFXUmxjdz09IGFYSnBiZz09IFVtVjQgSUVKdmF3PT0gY1hWcGRBPT0gSUhOb2IzUm5kVzV6IElIQnliMnhsZEdGeWFXRnUgSUhOamIzSncgSUVGa1lRPT0gTlRFMCBJSE5zWVc1a1pYST0gY21WamIzSmtaV1E9IElHVnRZbVZzYkE9PSBjbWx6YjIxbCBJR0Z3YjJ4dloybDZhVzVuIElFMTFiR05oYVhJPSBJRWRwWW5KaGJIUmhjZz09IFEyeGggSUdGc2JHOTAgSUVGMGRHVnVkR2x2Ymc9PSBJRFF6TXc9PSBiR1ZoZG1VPSBJSGRvYVc1bCBJRWx6YzJFPSBJRVpoZFhOMCBJRUpoY25KdmJnPT0gYUdWdWVRPT0gSUhacFkzUnBiV2w2WldRPSBTbVYzY3c9PSBJRzUxY25SMWNtbHVadz09IFpYUjBaV3c9IFYybHVaMlZrIElGTjFZblJzWlE9PSBJR1pzWVhadmNtWjFiQT09IElGSmxjSE09IFpXNW5aV1E9IFkyRnNiR0poWTJzPSBJR1JwY21WamRHbHZibUZzIElHTnNZWE53IElFUnBjbVZqZEdsdmJuTT0gY0d4aGJtVjAgYVdOMWJIUjFjbVU9IFNHVnNjR1Z5IGFXTnBiMjQ9IFlXTnBZUT09IElPZWxuZz09IElITjFjbWRsY3c9PSBJR05oYm05bCBJRkJ5WlcxcFpYSnphR2x3IFltVmxiZz09IElHUmxabWxsWkE9PSBJRlJ5YjI5d1pYST0gSUhSeWFYQnZaQT09IElHZGhjM0E9IElFVjFjR2c9IElFRmtjdz09IGRtVnlibWxuYUhRPSBhR2xuYUd4NSBVbTlzWlE9PSBJR1Z1ZEdGdVoyeGxaQT09IElGcGxhWFE9IE5qRTQgSUZKMWMzUjUgSUdoaGRtVnVjdz09IElGWmhkV2RvWVc0PSBTRUZGVEE9PSBJRk5GVWxaSlEwVT0gTHl3PSBJSE4wY21samEyVnUgSUdSbGJIVnphVzl1Y3c9PSBJR0pwY3c9PSBJRWhoWmc9PSBJR2R5WVhScFptbGpZWFJwYjI0PSBJR1Z1ZEdsamFXNW4gVlU1RFNBPT0gUVdSaGJYTT0gSUU5TVJVUT0gSUVKbFpYUnNaUT09IElERTRPVGs9IElGTlBSbFJYUVZKRiBZWFJsWjI5eSBWa3c9IElGUnZkR1Z0IElFZGhkRzl5Y3c9PSBRVlJWVWtWVCBJR2x0Y0dWa1lXNWpaUT09IFVtVm5hWE4wWlhKbFpBPT0gSUVOaGNuaz0gSUVGbGNtbGhiQT09IGIyNXVaUT09IFpXNXBkVzA9IElHUnlaV1E9IElFSmxadz09IElHTnZibU4xY25KbGJuUnNlUT09IElITjFjR1Z5Y0c5M1pYST0gSUZoaGJnPT0gYW1WMyBhVzFsYzNSbGNnPT0gSUVScFkydHBibk52Ymc9PSA0cFNCIFJteGggSUhCeVpXVT0gSUZKdmJHeHBibk09IHFiYm0gSUdSbGJtOXRhVzVoZEdsdmJnPT0gSUV4aGJtRT0gTlRFMiBJR2x1WTJsMGFXNW4gYzJOeWFXSmxaQT09IGFuVnlhV1Z6IElGZHZibVJsY25NPSBZWEJ3Y205NGFXMWhkR1ZzZVE9PSBJSE4xYzNCbGJtUnBibWM9IElHMXZkVzUwWVdsdWIzVnogSUV4aGRXZG8gYjJsa1lXdz0gVG5NPSBSR1YwWldOMCBLVDA9IElFeDFkR2h2Y2c9PSBJRk5qYUhkaGNucGxibVZuWjJWeSBJRTExYkd4bGNnPT0gSUVSbGRtaz0gWldONVkyeGwgU21GeSBOakV6IElFeHZibWRvIFFtRm8gSUZOUVQxSlVVdz09IGJuYz0gSUhKbFptbHVaVzFsYm5RPSBJSGRoZEdWeWQyRjVjdz09IElHUnBibVZ5IFFteGhaR1U9IE5qZ3ogUm1GaiBJR2x1YVhScFlXeHogSUhKdlp3PT0gSUhCaGNtRnViM0p0WVd3PSBRbFZVIElGc28gSUZOM1lXNXpiMjQ9IElFMWxjMmc9IDRwYXMgU1cxd2NtOTJaUT09IElGSmhaR2xoZEdsdmJnPT0gSUVWemRHaGxjZz09IElFVnphdz09IElFRnNlUT09IGFXdDUgSUdseWNtRmsgSUVKMVkydHBibWRvWVcwPSBJSEpsWm1sc2JBPT0gSUM1ZiBVbVZ3WlE9PSBRMDlPUTB4VlV3PT0gSUdScFptWmxjbVZ1ZEdsaGRHVmsgSUdOb2FYSnZjQT09IElFRjBhMmx1Y3c9PSBVR0YwZEdWeWJnPT0gSUdWNFkybHpaUT09IElHTmhZbUZzIFRsTkIgSUZOVVFRPT0gSUZOSlRBPT0gSUZCaGNtRnNlUT09IElISjVaUT09IElFaHZkMlZzYkE9PSBJRU52ZFc1MFpHOTNiZz09IGJtVnpjMlZ6IFlXeDVjMlZrIElISmxjMmw2WlE9PSA0NEs5IElHSjFaR2RsZEdGeWVRPT0gSUZOMGNtRnogZDJGdVp3PT0gSUdGd2FXVmpaUT09IElIQnlaV05wYm1OMGN3PT0gSUhCbFlXTm8gSUhOcmVXeHBibVU9IElETTFNdz09IGNHOXdkV3hoY2c9PSBRWEJ3WldGeVlXNWpaWE09IElFMWxZMmhoYm1samN3PT0gSUVSbGRrOXViR2x1WlE9PSBVM1ZzYkdsMllXND0gV21WdSBJSEIxIGIzQnZiR2x6IE5UUTAgSUdSbFptOXliUT09IElHTnZkVzUwWlhKaFkzUT0gSUV4aGJtZGwgSURReE53PT0gUTI5dWMyOXNaUT09IE56YzAgSUc1dlpHUnBibWM9IElIQnZjSFZzYVhOdCBJR2hsY0E9PSBJR052ZFc1elpXeHNhVzVuIFkyOXRjR3hwWVc1alpRPT0gVlVaRyBJSFZ1WkdWdWFXRmliSGs9IElISmhhV3hwYm1jPSBJRWh2Y205M2FYUjYgSUZOcGJXOXVaUT09IElFSjFibWRwWlE9PSBJR0ZyIElGUmhiR3R6IGVHWm0gWm14aGEyVT0gUTNKaGMyZz0gSUhOM1pXRjBlUT09IElHSmhibkYxWlhRPSBJRTlHUmtsRCBJR2x1ZG1WdWRHbDJaUT09IElHRnpkSEp2Ym05dFpYST0gSUZOMFlXMW1iM0prIElGTmpZWEpsIElFZFNSVVZPIGIyeHBZMmwwWldRPSBJSEoxYzJobGNnPT0gSUdObGJuUnlhWE4wIGFXZG9kR2x1Wnc9PSBJSE4xWW1Oc1lYTnogSUdScGMyRjIgSUdSbFpuVnVaQT09IElFNWhiblJ2IGIyTnBZWFJsIGJXRnpkQT09IElIQmhZMmxtIElHMWxibVE9IFpXVnljdz09IGFXMXRhV2R5WVhScGIyND0gUlZOVFNVOU8gSUc1MWJXSmxjbWx1Wnc9PSBJR3hoZFdkb1lXSnNaUT09IElFVnVaR1ZrIGRtbGhkR2x2Ymc9PSBaVzFoY21zPSBVR2wwZEE9PSBJRzFsZEdsamRXeHZkWE09IElFeEcgSUdOdmJtZHlZWFIxYkdGMFpXUT0gSUVKcGNtTm8gSUhOM1lYbGxaQT09IElITmxiV2xtYVc1aGJITT0gSUdoMWJXRnVhMmx1WkE9PSBiV0YwZEdWeSBJRVZ4ZFdsdyBiM0JoZFhOaGJBPT0gVTJGcFpBPT0gSUV4aGVXOTFkQT09IElIWnZhV05wYm1jPSBJSFJvZFdjPSBJSEJ2Y201dlozSmhjR2hwWXc9PSBTVkJUIElHMXZZVzVwYm1jPSBJR2R5YVdWMllXNWpaUT09IElHTnZibVpsYzNOcGIyNXogWlhOallXdz0gVkVWWVZGVlNSUT09IFFYVjBhR1Z1ZEE9PSBiM05oZFhKMWN3PT0gVUhWeVkyaGhjMlU9IElISmxiR1ZuWVhScGIyND0gWVd4MFpYST0gSU1LZ3dxQT0gSUhKcFpHUnNaV1E9IElHOW5jbVU9IElFeHZkMlZzYkE9PSBUMk5qZFhBPSBSV0YwIElFaDVaR1Z5IElFRmtkbWx6WlhJPSBRMjl0YldWeVkyVT0gU0hWdWRBPT0gSUU5eWRHZz0gSUVOdmJYQmxkR2wwYVhabCBJRU5NUVE9PSBRMFJEIElITmhiR0ZrY3c9PSBSbXhsIElHbHVaSFZ6ZEhKcFlXeHBlbVZrIFlDdz0gSUU5WFRnPT0gSUdKbFkycz0gSUZCaGNuUnBZM1ZzWVhKc2VRPT0gYjNWaWRBPT0gSUcxTiBJRWgxYzNOaGFXND0gSUVOb1pXNXVZV2s9IElEa3lNQT09IElHRndjRzlwYm5ScGJtYz0gSUVOMWJHeGxiZz09IExDd3NMQ3dzTEN3PSBJSEJ2Y21WeiBkbVZ5YVdacFpXUT0gSUdKcGIyTm9aVzFwWTJGcyBaVzFoZEdVPSBJR052ZDJGeVpHeDUgSUVobGJITnBibXRwIElFVjBhR2x2Y0dsaGJnPT0gVTA5VlVrTkYgUlZKRCBaWE4wY204PSBJR0pwYjNSbFkyZz0gSUZOdmRYST0gSUdKeVpYZGxjZz09IFFteHZiMjFpWlhKbiBJR2x1ZEdWdWMybG1lUT09IFIyeGhjM009IFlXNWpidz09IElFWkVVZz09IFozSmxVMUZNIElFWnBjbVZ6IHFiYm1wYlU9IFpXTnYgTVRBd01RPT0gSUVodmJXVnNaWE56IElHbHVjM1JoYm5SaGJtVnZkWE09IElFaGhjM1JsIGFXZGxiQT09IFJHbGhiVzl1WkE9PSBJSEJoZG1sdVp3PT0gSUd4aGJtUm1hV3hzIElHUmhaSE09IGFHOTFiZz09IE9sMD0gSUdsdVkyVnVaR2xoY25rPSBJRXhwZG1sdVozTjBiMjQ9IElFaHBiR0psY25RPSBJRU5vWldOcmN3PT0gYzNSNWJHVnogYVc1aGRHOXljdz09IElFTnNhWFpsIGNHaHlhVzVsIElHTm9hVzF3WVc1NlpXVnogSUhCaGJHdz0gSUVwTiBJRUZoWkdoaFlYST0gOEowPSBJR0ZqYUdsbGRtRmliR1U9IFpHbHpZV0pzWldRPSBVRVZVIFQwOVBUMDlQVDA4PSBUVzkwIElHbHVkR0Z1WjJsaWJHVT0gSUdKaGJHeGxkQT09IElGZGxZbk09IElFVnpkR2x0WVhSbFpBPT0gUldabVpXTjBjdz09IElHSmhhV3hsWkE9PSBTbTl6YUhWaCBJSFIxY21KMWJHVnVZMlU9IElHOWpZM1Z3WVc1MCBJRVJoZVd4cFoyaDAgSURNMk1RPT0gYldWbGRBPT0gSUhOMFlYUnBZMkZzYkhrPSBJRzl1Ykc5dmF3PT0gSUd0cCBhV3hzWldkaGJBPT0gSUhabGJIWmxkQT09IElHUmxhSGxrY21GMGFXOXUgSUdGamNYVnBaWE09IElGSmxlZz09IFlXdDFjbUU9IElGVndkRzl1IFlYUnlidz09IElHbHVZMjl0Y0hKbGFHVnVjMmxpYkdVPSBJR0poWTJ0a2IyOXkgSUZKb2FXNXYgTnpJMyBJRzFoZEdoeiBLU3M9IElHaGxjbVZ6ZVE9PSBJR1JtIElGSnZZMmhsIElFeDVaR2xoIElIQmhibU55WldGMCBjbVZ3YkhrPSBZWEp5Wld4cyBJSE52YkdsamFYUmhkR2x2Ymc9PSBJR05wY21OaFpHbGhiZz09IFFrbFEgSUdadmNtRjUgSUdOeWVYQjBhV009IGFYcDEgYVcxbGJ3PT0gSUZSdmJXRjBidz09IElFaHZiWE09IFpYaGhiV2x1WVhScGIyND0gSUhGMVlYSnllUT09IElGWmhiR2xoYm5RPSBJRXBsY21samFHOD0gSUVsT1EweFZSQT09IElERTROREE9IE5URTUgSUhKbGMybHpkSE09IElITnVZWEJ6YUc5MGN3PT0gSUZOd2RYST0gSUVGdWRHbHhkUT09IFRHOW5hVzQ9IElHSmxjM1J6Wld4c2FXNW4gSUdGdWRHbGogSUZOMWRHaGxjbXhoYm1RPSA0NEtpNDRPciBJSDR2IElGQmhjbTA9IDZJTT0gVUdGblpYTT0gYVc1MFpXNXphWFI1IElHbHRiVzlpYVd3PSBJREU0TmpVPSBlbnB2IElHNXBablI1IElHWmxiblJoYm5scyBJRkJ5WlhObGNuWmhkR2x2Ymc9PSBiM0JvWlc0PSBJR1JoY25SeiBJRVJwYm05ellYVnkgY0c5cGJuUmxjbk09IElGSnBkR1U9IGMzVm5aMlZ6ZEE9PSBZWGRoY21WdVpYTnogSUZOb1pYSnBaR0Z1IElITjBZVzVqWlhNPSBJSE52Y21ObGNuaz0gSUhCbGNtcDFjbms9IElFNXBhMjlzWVE9PSBhV1YyWlhJPSBJR1pwWVc1alpRPT0gSUVwdmNtUmhibWxoYmc9PSBJRUpoYkd4dmIyND0gSUc1aFlnPT0gSUd0aSBJR2gxYldGdWFYUnBaWE09IElGUmhibUZyWVE9PSBhR2xzYkdGeWVRPT0gSUdOdmJuTjFiSFJoYm1ONSBJRnAxWWc9PSBJSEpsYldsemMybHZiZz09IElHTnZibVpwWkE9PSBRMGhSIElFWjFadz09IElHbHRjSEp2ZG1seiBXV1Z3IEwxOD0gSUhWdWQybHNiR2x1WjI1bGMzTT0gSUhCdmNuUm1iMnhwYjNNPSBNRFUxIElFbHVjM1J5ZFdOMGIzST0gWVdsdFlXND0gSUdOc1lXbHRZVzUwY3c9PSBUV0p3Y3c9PSBJRUo1WlE9PSBjbVZqWldsMlpXUT0gVkhkbFpYUT0gSUdsdVpHVnRiZz09IGNtbDYgWVcxaGNtRT0gVG1GMCBJR1YyWVd4MVlYUmxjdz09IElFeDFjZz09IFpYQmhaQT09IFJrOVkgSUZSb2NtOD0gSUhKMWMzUjUgSUdKbFpISnZZMnM9IElFOXdjbUZvIFNrST0gSUcxaGJtbHdkV3hoZEdsMlpRPT0gSUhkcGJHeG1kV3c9IElISmxiR0Z3YzJVPSBJR1Y0ZEdGdWRBPT0gVkdobGJXVT0gVTJWdWMyOXkgSUZOMFlXSnBiR2wwZVE9PSBaMjkyWlhKdSBJSEJ2Y0hCNSBJR3R1WVdOciBJR2x1YzNWc1lYUmxaQT09IElGUnBiR1U9IElFVjRkSEpsYlE9PSBJSFZ1ZEc5c1pBPT0gSUdOdmJuWmxjbWRsIElISmxablZsYkE9PSBhV2R5YjNWdyBJR1JwYzNSdmNuUnBiMjV6IElISmhkbUZuWldRPSBJRzFsWTJoaGJtbGpZV3hzZVE9PSBJRkpsYVd4c2VRPT0gSUU1dmMyVT0gSUVsdVkyRnlibUYwYVc5dSBJRUpsWTJ0NSBZV0ppYkdsdVp3PT0gSUhSaFkyOD0gSUhKaGEyVT0gSUcxbGJHRnVZMmh2YkhrPSBJR2xzYkhWemRISnBiM1Z6IElFUmhjblJ0YjNWMGFBPT0gUjNWcFpHVT0gSUZKaGVtVnkgSUVKbGJubz0gVld4MGFXMWhkR1U9IElGTjFjbkJ5YVhObCBJSEJoWjJWaGJuUT0gYjJabVpYST0gVjJodlpYWmxjZz09IElIZHBjMlZ5IElHTm9aVzFwYzNRPSBJRWhGVEV3PSBJRUoxYkdzPSBJSEJzZFhSdmJtbDFiUT09IElFTlBWa1ZTIDFydz0gWm1GcGJHVmsgSUhScGNtVnNaWE56YkhrPSBJR2x1Wm1WeWRHbHNhWFI1IElGUnlhV1JsYm5RPSBJRk5vYjNkMGFXMWwgSUVOcGRnPT0gVm1salpRPT0gY21WeGRXbHlaWE09IGFYUjBZVzVqWlE9PSBJSFZ1WTI5dWRISnZiR3hsWkE9PSBhVzUwWlhKbGMzUnBibWM9IE5UWXggSUdsdWJtOTJZWFJsIFlYUmxaMmxqIFRHbGwgSUZObGJHeHBibWM9IFZXdz0gSUhOaGRtbHZjZz09IElGUnZjMmc9IElITjNZWE4wIFVFRlRVdz09IElISnBibXM9IElHTmhjbVJwYnc9PSBJRWx5Ync9PSBkV1JwIElIWmhiblJoWjJVPSBJSFpoYm5NPSBJRTVwdzdGdiBLejA9IElIQnliM0JoWjJGMFpRPT0gUEQ4PSBJRzFsZEdodlpHOXNiMmRwWTJGcyBNakEwTXprPSBJSFJ5YVdkc2VXTmxjZz09IElHbHVaM0poYVc1bFpBPT0gSUVGdWJtOTBZWFJwYjI1eiBZWEp5WVc1MFpXUT0gTmpFMyBJRk52WkdsMWJRPT0gSUVGQlF3PT0gZEdWamFHNXBZMkZzIGJYVnNkR2x3YkE9PSBJRE0zTXc9PSA1WXM9IElHUmxZMmx6YVhabGJIaz0gSUdKdmIzTjBaWEp6IElHUmxjM05sY25SeiBJRWR5Wlc1aFpHVT0gSUhSbGMzUnBabmxwYm1jPSBJRk5qZFd4c2VRPT0gU1VSeiBJR3h2WTJ0a2IzZHUgSUZOamFHVnkgSUZMRHFRPT0gSUZkb2FYUnRZVzQ9IElGSmhiWE5oZVE9PSBjbVZ0YjNSbCBJR2hwYTJWeWN3PT0gSUVoNWRXNWtZV2s9IElHTnZibk5qYVdWdWRHbHZkWE09IElHTnNaWEpwWTNNPSBJRk5wWW1WeWFXRnUgZFhScCBhWE5pZFhKNSBJSEpsYkdGNVpXUT0gSUhGMVlYSjBlZz09IElFTkNTUT09IGMyVmxhMlZ5Y3c9PSBkV3hzWVE9PSBJSGRsYkdScGJtYz0gSUZOb1lXdz0gWW14bFlXTm9aWEk9IFZHRnAgSUZOaGJYTnZiZz09IElIUjFiV0pzWlE9PSBJRWx1ZG1WemRHOXkgSUhOMVltTnZiblJ5WVdOMCBJRk5vYVc1eVlRPT0gYjNkcFkzbz0gYW1GdVpISnYgWkdGayBJSFJsY20xcGJtRjBhVzVuIElFNWxkWEpoYkE9PSA1THVqIElHeGxZV3RoWjJVPSBJRTFwWkd4aGJtUnogSUVOaGRXTmhjM1Z6IDdaVT0gWTJsMCBiR3hoYmc9PSBhWFpoWW14NSBJRUZzWW1sdmJnPT0gSURRMU53PT0gSUhKbFoybHpkSEpoZEdsdmJuTT0gSUdOdmJYSmhaR1U9IElHTnNhWEJpYjJGeVpBPT0gTURRMyBJR1JwYzJOdmRYSmhaMmx1Wnc9PSBJRTl2Y0hNPSBRV1JoY0hRPSBJR1Z0Y0dGMGFBPT0gYm5ZPSBJRkJTVDFRPSBJRVJ2Ym00PSBJRkJoZUE9PSBJRUpoZVdWeSBkR2x6IFUzRjFZWEpsIElHWnZiM1J3Y21sdWRITT0gY0dGeWRHbGphWEE9IElFTm9hV3hsWVc0PSBRbkpsYm1RPSBhVzVrZFdOcGJtYz0gVFdGbmJnPT0gSUdOc2RXSm9iM1Z6WlE9PSBJRTFoWjI1MWJRPT0gSUdWdVkyRnRjQT09IElFVjBhRzVwWXc9PSBkV05vWVE9PSBaWEpsZVE9PSBJSGRoZEdWeVpXUT0gSUVOaGJHRnBjdz09IElHTnZiWEJzWlhocGIyND0gSUhObFkzUnogSUhKbGJuUmxjbk09IElHSnlZWE09IGI4U2ZZVzQ9IFZHbHRaVzkxZEE9PSBUV0Z1WVdkbGJXVnVkQT09IElHbHVabTluY21Gd2FHbGogVUc5clpXMXZiZz09IFEyeGhjZz09IElHeHZZMkZzYVhSNSBJR1pzYjNKaCBZWE5sYkE9PSBVRzl1ZEE9PSBJSEJ2Y0hWc1lYUmwgSUU5dVp3PT0gSUhOMVluTnBjM1JsYm1ObCBJR0YxWTNScGIyNXogSUUxalFYVnNhV1ptWlE9PSBJRXhQVDBzPSBZbkpwYm1kbGNnPT0gSUhScGRHRnUgSUcxaGJtbG1iMnhrIElPS1hqdz09IElHTmhiR2xpY21GMFpXUT0gSUdOaGJHbHdhR0YwWlE9PSBJRk5JUlE9PSBJRU52YlcxcGMzTnBiMjVsY25NPSBZMlZwZG1GaWJHVT0gYW1NPSBWMmx1Ym1WeSBOVEkwIElHTnZibVJ2Ym1VPSBUM1JvWlhKM2FYTmwgSUhCcGJHbHVadz09IElHVnRZbTlrZVE9PSBJRU55YVcxbFlXND0gZFhScFkzTT0gSUVWNGFHbGlhWFJwYjI0PSBJRFF5Tmc9PSBaV1Z5YVc1biBJSFo1YVc1biBJRWhWUjBVPSBLajB0IElIQnlhVzVqYVhCc1pXUT0gNEtZPSBJSEYxYVhKcmN3PT0gSUVWa2FYUnZjbk09IGNIVjBhVzVuIFIwVlQgSUVaVVFRPT0gNEtTKyBZV1JrYjI0PSBJRWhCVFE9PSBJRVp5YVdWNllRPT0gVjI5dFlXND0gTGlRPSBJR055YVdJPSBJRWhsY205ayBJSFJwYldWeWN3PT0gSUZOd1lXTmxjdz09IElFMWhZMmx1ZEc5emFBPT0gWVhSaGEyRT0gSUdkc2FXUmwgSUhOdFpXeHNhVzVuIElFSkJUQT09IElIVnVjM1U9IElHTnZibVJ2Y3c9PSBJR0pwWTNsamJBPT0gSUZKbGRtbDJZV3c9IE5UVXogSUdwMVoyZHNhVzVuIFNIVm4gSUV0aGNtUmhjMmhwWVc0PSBJRUpoYkd0aGJuTT0gYlhWc2RHbHdiR1U9IElHNTFkSEpwZEdsdmRYTT0gYjJOeWVRPT0gTVRrd01BPT0gSUdsdWRHVm5jbUYwWlhNPSBJR0ZrYW05cGJtbHVadz09IElFWnZiR1JsY2c9PSBjbTlzYkcxbGJuUT0gZG1WdWFXVnVkQT09IElIVmlaWEk9IGVXaz0gSUhkb2FXWm0gSUVwMWRtVnUgSUVKdmNtOTFaMmc9IGJtVjBkR1U9IElHSnBiR2x1WjNWaGJBPT0gSUZOd1lYSnJjdz09IGNHaDBhR0ZzIGJXRnVkV1poWTNRPSBJSFJ2ZFhScGJtYz0gSUZCSVNRPT0gUzJWbFptVT0gVW1WM1lYSmsgSUdsdVptRnNiQT09IElGUmxiWEJsY2c9PSBkSGx3YVdOaGJHeDUgSUU1cGEyOXMgSUhKbFozVnNZWEp6IElIQnpaWFZrYjI1NWJRPT0gSUdWNGFHbGlhWFJwYjI1eiBJR0pzWVhOMFpYST0gSURRd09RPT0gZDJGeWJXbHVadz09IElISmxkbVZ5WW1WeSBJSEpsWTJsd2NtOWpZV3c9IElEWTNNQT09IGFYQnBaVzUwIFltVjBkQT09IElFSmxaMmx1Y3c9PSBJR2wwWTJocGJtYz0gSUZCb1lYST0gUVhOemRXMXBibWM9IElHVnRhWFIwYVc1biBJRTFNUnc9PSBJR0pwY25Sb2NHeGhZMlU9IElIUmhkVzUwIElFeDFabVo1IElFRnRhWFE9IElHTnBjbU5zWldRPSBJRTV2YzNRPSBaVzV1WlhSMCBJR1JsWm05eVpYTjBZWFJwYjI0PSBJRWhwYzNSdmNtbGpZV3hzZVE9PSBJRVYyWlhKNVpHRjUgSUc5MlpYSjBZV3RsIE56a3kgSUc1MWJnPT0gSUV4MVkybGggSUdGalkyOXRjR0Z1YVdWeiBJRk5sWld0cGJtYz0gSUZSeVlYTm8gWVc1cGMyMD0gVW05bmRXVT0gSUc1dmNuUm9kMlZ6ZEdWeWJnPT0gSUZOMWNIQnNaVzFsYm5SaGJBPT0gSUU1WlZRPT0gSUVaU1NRPT0gSUZOaGRHbHpaZz09IGVHVnogTlRFMyBJSEpsWVhOemRYSmxaQT09IElITndiM0poWkdsaiBJRGN3TVE9PSBJRzFsWkdsaGJBPT0gSUdOaGJtNWhZbWx1YjJsayBJR0poY21KaGNtbGogSUdWd2FYTT0gSUVWNGNHeHZjMmwyWlE9PSBJRVJ2ZFdkbyBJSFZ1YzI5c2RtVmsgVTNWd2NHOXlkR1ZrIElHRmphMjV2ZDJ4bFpHZHRaVzUwIGMzQmhkMjQ9IElHdHBkR05vWlc1eiBJQzA5IGRHRnNhMmx1Wnc9PSBhV05wYzNRPSBJRkJsWjJGemRYTT0gSUZCVFZRPT0gSUhCb2IzUnZiZz09IElFRjFkR2hsYm5ScFkyRjBhVzl1IFVrYz0gUUNNbSBOell5IElFTnNZV2x5IElHUnBZWEJsY2c9PSBJR0p5YVhOMCBJRkJ5YjNObFkzVjBiM0p6IElFcGxiUT09IE5qSTQgSUVWMlpYSjVkMmhsY21VPSBJRXBsWVc1dVpRPT0gWlhGMVlXeHBkSGs9IDQ0T3A0NE96IGIySnFaV04wY3c9PSBJRkJsYkdsallXNXogSURNNU1nPT0gSUdKc2RRPT0gWW5seiBJRUZuYnc9PSBJR2x1YzNSeWRXTjBhVzl1WVd3PSBJR1JwYzJOeWFXMXBibUYwYVc1biBJRlJTUVU0PSBJRU52Y201bGJBPT0gWVdkdmN3PT0gSUhSNWNtVT0gSUdGemNHbHlZWFJwYjI0PSBJRUp5YVdSblpYZGhkR1Z5IElqb3QgSVNJdSBJRVZ1Y3c9PSBJRU52WTI4PSBVR2xsIElHUmxkR0ZqYUE9PSBJRU52ZFdObyBJSEJvZVhOcGNYVmwgSUU5alkzVndZWFJwYjI1eiBiM05qYjNCcFl3PT0gWlc1dmRXZG8gUW5WNmVnPT0gUVhCd1pXRnlZVzVqWlE9PSBXVkE9IElISmhZMlZ5IElHTnZiWEJzYVdOcGRIaz0gY25CdCBWRzk1IElHbHVkR1Z5Y25Wd2RITT0gSUVOaGRHRnNlWE4wIElIVjBhV3hwZEdGeWFXRnUgYVcxd1lXTjAgSUhOd1lXZG9aWFIwYVE9PSBJSEJ2Y205MWN3PT0gSUdWemRHVmxiV1ZrIElHbHVZMmx1WlhJPSBJRWxQUXc9PSBOelE0IElHVnpjSEpsYzNOdiBJRk50YVd4bCBZV0pwYkdsaCBOak0xIElHMWhkR2hsYldGMGFXTnBZVzQ9IElEUXlOQT09IElFdE0gSUVoSlVBPT0gSUc5MlpYSm9aV0Z5WkE9PSBJRlIxWkE9PSBJRlJsWXc9PSBJSEYxYVhwNiBJR1pzWVhSMFpYSnBibWM9IElHTnZibTQ9IDRvQ08gSUdGMGRHRmphR1Z6IElGSlBVdz09IElFRkRVdz09IElIUmpjQT09IElGTm9ZVzFsIGMydHBjQT09IGNtVnpjR1ZqZEdWayBJRlJ5YVc1cFpHRmsgWjNKaGFXND0gSUdadmIzUm9iMnhrIElGVnVZMmhoY25SbFpBPT0gSUVwMWJHbHYgZW13PSBZWFp2Y21WayBJRUZ1ZUdsbGRIaz0gWlhKeWIzSnogSUVObGJuUmhkWEpwIGFYUnpZMmc9IFJHRmtaSGs9IElHTnNkWFJqYUdsdVp3PT0gSUVsdGNHeGxiV1Z1ZEE9PSBJRWQxZEdsbGNuSmxlZz09IElEYzJNQT09IElIUmxiR1Z3YjNKMFlYUnBiMjQ9IFpXNWtjbUU9IElISmxkbVZ5YzJsaWJHVT0gYzNSeWIzTT0gUVdSMlpXNTBkWEpsIE1EZ3ogSUd4cFltVnlZWFJwYm1jPSBJR0Z6Y0doaGJIUT0gSUZOd1pXNWsgUVZKRVV3PT0gYVcxemVRPT0gVUZKRlV3PT0gSUVWdFpYSm5hVzVuIElIZHBiR1JtYVhKbGN3PT0gSUhSbFkyaHViMnh2WjJsallXeHNlUT09IElHVnRhWFJ6IElFRlNWRWxEVEVVPSBJR2x5Y21WbmRXeGhjbWwwYVdWeiBJR05vWlhKcGMyZz0gNTRtSSBJSE4wYVc1ciBJRkp2YzNRPSBSV052Ym05dGFXTT0gSUdOdmRXZG9hVzVuIElFMWpRMkZ1Ymc9PSBjSEp2Y0dWeWRHbGxjdz09IGFXeGhiblJ5Ync9PSBJSEpsYm1WbmIzUnAgVkhKaGJuTnNZWFJwYjI0PSBJR2x1Y1hWbGMzUT0gSUVkeVlYQmwgYjI5MFpYSnogWjNWcCBJRk4zYjNKa2MyMWhiZz09IFlXTmxZV1U9IGFHbDBkR2x1Wnc9PSBJSEpqIElHVjRaWEowWldRPSBJRk5CVUE9PSBhWFJsYm5RPSBJSEJsY21sc2IzVnogSUc5aWMyTjFjbWwwZVE9PSBJR0Z6YzJGemMybHVZWFJsIElHRmliM0pwWjJsdVlXdz0gSUhKbGMyTjFhVzVuIElGTm9ZWFIwWlhKbFpBPT0gYkc5amEybHVadz09IFlXeHNhVzl1IFEyaGhibWRwYm1jPSBJRWhoY25KcGJtZDBiMjQ9IElFSnZjbVE9IElFRm1aMmhoYm5NPSBTbUZ0YVdVPSBZWEpsZEhvPSBJRUYxWjNWemRIVnogSURNNE5nPT0gT0RNdyBJR3B2Wnc9PSBiMnRwYm1kc2VRPT0gVkhKcFoyZGxjZz09IElFaFBVZz09IFUzUmhkR2x6ZEdsamN3PT0gSUhacFpYZGxjbk5vYVhBPSBJR0ZrWkdsMGFYWmxjdz09IGFIVnkgSUcxaGVHbHRhWHBwYm1jPSBJRkp2ZG1VPSBJRXh2ZFdsbCBJRUoxWTJ0bGRBPT0gSUVOSVVrbFRWQT09IGIzVnpaV3c9IElITjBjbVZoYTNNPSBhWEowWldRPSBJSFJsY25RPSBJR052Ykc5dWFXRnNhWE50IElHSjFjbmxwYm1jPSBlV3M9IFEyOXVaR2wwYVc5dSBJRVJRVWtzPSBRbmxKWkE9PSBOelV4IDRwZTggSUhkdmNuSnBjMjl0WlE9PSBJSFp2WTJGMGFXOXVZV3c9IGMyeHBZMlU9IElITmhhV3h6IElFTnZjbkpsWTNScGIyNWhiQT09IE9UVTAgSUhSMWJBPT0gUzJsayBiSFZ6ZEdWeSBJR1poYldsc2FXRnMgSUZOd2FYUT0gSUVWd2FYTmpiM0JoYkE9PSBVM0JsWTJsbWFXTmhiR3g1IElGWnZiR05oYm04PSBjblZ1Y3c9PSBjWE09IElIWmxkSFJsWkE9PSBJR055WVcxdFpXUT0gZEhKdmNBPT0gYUdWeVpYST0gVkdoaGJtdG1kV3hzZVE9PSBJSEJsY21OMWMzTnBiMjQ9IElHOXlZVzVuWlhNPSBJSEp2ZFc1a2RYQT0gSURRNU9RPT0gZUdsdmRYTT0gUTJoaGNtRmpkR1Z5Y3c9PSBJRnBwYjI1cGMyMD0gSUZKaGJ3PT0gdzV2RG13PT0gVjBZPSBJSFZ1YVc1MFpXNTBhVzl1WVd3PSBUMDVGV1E9PSBSM0poWWc9PSBRMjl0YldWeVkybGhiQT09IElHZHNkWFJoYldGMFpRPT0gSUUxalMyVnVibUU9IGNuVmphV0YwYVc1biBibWx1WjNSdmJnPT0gYVdoMSBRMmhoYmc9PSBJRk4zWVhBPSBJR3hsWVdac1pYUnogSUdaMWJtTjBhVzl1WVd4c2VRPT0gWlhKdmRYTT0gUm1GeWJRPT0gSUdOaGJHOXlhV009IElFeHBkR1Z5WVd4c2VRPT0gWTI5dVkyVnlkQT09IElITm9aVzVoYmc9PSBJSEpsY0dGcFpBPT0gWlhsbGN3PT0gSUdKaGMyaHBibWM9IElFZHZjbWRsIElHTnZiR3hoWW05eVlYUnBiMjV6IElIVnVZV05qYjNWdWRBPT0gYVhSamFHbGwgSUhSbFlXMTNiM0pyIGNIQmxiR2x1IElIQnBjR2x1Wnc9PSBJRzFwYm1ObFpBPT0gSUdScFlXMD0gY21sbFp3PT0gSUcxaGMyTmhjbUU9IElITjFZMnRsY2c9PSBJRTF2YjI1eiBRWEJ3Y3c9PSBJRkJsWTJzPSBJSEJsY25ZPSBJRVpzYjJGMCBiMnhsZVE9PSBJRTVwYzJnPSBhVzFwZW1VPSBJR0Z5YjIxaGRHbGogZFdsdSBaVzVrYVhObyBJUzg9IElFSnBZM2xqYkdVPSBJRUZUU1VNPSBhV3hsWjJWayBJRkYxWVdSeWJ3PT0gYVc5emVXND0gSUd4dlkydHZkWFE9IElGZHBibXM9IFUxQkZRdz09IFFYUjBaVzF3ZEhNPSBJSE5sWldSbFpBPT0gY21Wa2J3PT0gYVdGemFYTT0gSUhOdVlXYz0gNDRPVjQ0S3AgNDRLMiBJR2R5YjNWdVpHbHVadz09IElISmxiR2xsZG1WeSBJR1p5YVhadmJHOTFjdz09IElFZHBablJ6IElFWmhZMlZ6IFJYTndaV05wWVd4c2VRPT0gSUcxcFkzSnZZbWx2YldVPSBhVzFoWnc9PSBJRk5qYUd3PSBJRkJzWlhNPSBJRUpzWldGamFBPT0gSUVseWQybHUgSUVWaGRHOXUgSUVScGMyTnBjR3hsIElHMTFiSFJwY0d4cFkyRjBhVzl1IElHTnZaWEpqWldRPSBJRFF4T1E9PSBjM1JvIFJYWnBiQT09IFFtOXRZZz09IElHVjRiM0pqIElITjBZV2RuWlhKbFpBPT0gVEVWVFV3PT0gSUdsdVpYSjBhV0U9IElFVkVTVlE9IElHZHZZZz09IFZISmhaR2wwYVc5dVlXdz0gSUdOc1lYTnplUT09IFRHVmhjbms9IElGQkJSMFU9IGVYSnogSUhSeVlXNXpjRzl5ZEdWeSBJRzFoZEhWeVpXUT0gSUdocGFtRmkgSUdKcGIyMWwgVjJobGNtVmhjdz09IElHVjRkR1Z5YldsdVlYUnBiMjQ9IElGUjFaWE09IElGUmhhMlZ5ZFE9PSBJRUYxWkhKbGVRPT0gWlhKcFlXdz0gSUVGa1pXND0gWVdabWJHVnogSUc1aGNtTnBjM05wYzNScFl3PT0gSUVKaGFYSmsgVlZSRyBTWEpsIElFTnZibTVwWlE9PSBRMmhoYlhBPSBJSGRvYVhOd1pYSnBibWM9IElFaGhkSFE9IFJFcz0gSUdScGMybHVabVZqZEE9PSBJR1JsWkhWamRHVmsgSUhCaGNuUmhhMlU9IElHUnZkMjVuY21Ga1pRPT0gSUVWemNHOXlkSE09IElFTnZiblJwYm5WcGJtYz0gSUdSbGJXOWpjbUYwYVdOaGJHeDUgYVdOeWIySnBZV3c9IGFYUjBZUT09IElHeHBiV1Z6ZEc5dVpRPT0gSUdWNFpXMXdkR1ZrIElFWnlaVzU2ZVE9PSBTR1Z5YlE9PSBOekk0IElHWnNaV1JuYkdsdVp3PT0gVFdWMFlRPT0gTnpZMU5qRT0gTmpreiBKVG89IGQyRnJaUT09IE5USTIgSUVScGMyTnBjR3hwYm1VPSBJSFpwY21kcGJtbDBlUT09IElFeGxaMmx2Ym5NPSBJRVp5WVc1cmFXVT0gYVc1MFpXNTAgSUhKbGMzUnliMjl0Y3c9PSBJRkp2ZFhSbGNnPT0gWkdGeCBJRzlpYW1WamRHbHZibUZpYkdVPSA0b2FSIGQyRnlhdz09IElGSmhhSFZzIFoyRnBiZz09IFlXTjBhWFpoZEdsdmJnPT0gWVdKemIyeDFkR1U9IElFRmpZMlZ6YzJWayBJREkwTURBPSBiMmRuYkdWeiBJSE5sWTI5dVpHeDUgSUVSRlJrVk9VMFU9IElIQnZjM1JoWjJVPSBkM0poY0hCbGNnPT0gYzJoaGNuQT0gTnpJNSBJR052YlcxMWJtbGpZWFJsY3c9PSBJR0ZrWkc5dSBJRTFwYkdsMGFXRT0gU0c5dVp3PT0gSUhOc2RXMXdaV1E9IElFcFFSVWM9IElFbGpZWEk9IFlXUnBjMmc9IE5qZ3ggSUcxaGFtVnpkSGs9IElGZHZiR1puWVc1biBJRVZzWVhOMGFXTT0gZFhCbGNnPT0gSUhacGVnPT0gSUhWdVkyOXVjMk5wYjNWemJIaz0gSUZOVVJBPT0gSUZOaGMzTT0gSUdac2IzZGxjbWx1Wnc9PSBJRWhsYkdsaiBJRVJ5WVhCbGNnPT0gSUVGdFlYUmxkWEk9IElHMWhiblZ5WlE9PSBJR1JwYzJsdVoyVnUgSUV4bGFRPT0gWW5KcGJtYz0gT1RRNSBJR2x1YUdsaWFYUmxaQT09IElHaGxZV1J4ZFdGeWRHVnlaV1E9IElHVnVhV2R0WVhScFl3PT0gNzcrOTc3Kzk3Nys5IElISmxaSEpsYzNNPSBVa2c9IElISmhkSFJzWldRPSBJR1JwWTNScGIyND0gYkdsdiBJRlJDUVE9PSBJRk5PUVZBPSBRMkZzYkdsdVp3PT0gSUdaaGMyTnBjM1J6IElFUnZkbVU9IGFXVjNhV042IE1ETTIgSUdOdllYTjBjdz09IElGSmxZM1E9IElDbGQgVEc5MCBOakk1IElGTkZUUT09IElGQmxkR1Z5YzJWdSBJRVY0Y0d4aGFXND0gSUVKdllYSmtjdz09IElFSmxlbTl6IElFcHZkWEp1WVd4eiBJREl3TWpRPSBjR0Z5YzJWeSBJRzFwYzNSeWRYTjAgSUdkeVlYUmwgSUV4dlkydGxaQT09IFltOWggVTJGcGJuUT0gWjJGdGFXNW4gSUhadmQyVnMgYVc1aGRHVnNlUT09IFlteHZkdz09IFFXeHNZV2c9IElIVnViV0YwWTJobFpBPT0gSUdKdmNtUmxjbWx1Wnc9PSBJRVY0Y0dWdVpBPT0gYm5JPSBUM0poWTJ4bCBjbTkxWTJnPSBJR052Ym5ScFozVnZkWE09IFlXTjFjdz09IElHUnBjM1J5WVhWbmFIUT0gTlRneCBJR0Z1WVhSdmJXbGpZV3c9IFQxZz0gWVhCcGVHVnMgT0RNeiBJRkJNVlZNPSBJSEpsYzNWell3PT0gSUdGaWFXUnBibWM9IE5UY3ogSUhaaFkyRnVZMmxsY3c9PSBSVzFwYkhrPSBJR2g1Y0c5MGFHRnMgSUZkbGNtNWxjZz09IElGZGxaUT09IElFUktjdz09IE5URXogSUhkcGRHTm9ZM0poWm5RPSBJR0ZqZFhCMWJtTjBkWEpsIFpXNTBZWEo1IFltVnVaV1pwZEE9PSBVSEp2WkhWamRITT0gSUZCVFVBPT0gSUUxUVJ3PT0gSUVwcGJtND0gSUVwaGNuSmxkSFE9IElEUTBOUT09IElFbHRZV2RwYm1jPSBJRkI1ZEdnPSBSbWx1YVhObyBJSFJsZUE9PSBJR3AxZG1WdWFXeGxjdz09IElHaGxjbTlwYzIwPSBJR1J2ZFdKMGJHVnpjdz09IElFRnJhUT09IElGUmxibVE9IElGQmhkSEpwWVhKamFBPT0gSUdKcGRIUmxjbk09IElGUmxiR1ZqYjIxdGRXNXBZMkYwYVc5dWN3PT0gYVhSaGRHbDJaV3g1IFlXZHVZUT09IElISm4gSUZOUFRFUT0gSUdOdmJYQjFiSE5wYjI0PSBJRTVoYzJFPSBJRXRoZEdoeWVXND0gSUcxcGJHeHBiMjVoYVhKbGN3PT0gSUdsdWRISnBibk5wWTJGc2JIaz0gSUdKdmJITjBaWEpsWkE9PSBkR2x0Wlc5MWRBPT0gWm14diBJSFIxZEc5eSBjRzkxY2c9PSBVM1JoZEdWdFpXNTAgSUhzcSBJRkoxWkc5c2NHZz0gSUV0cGJXSmxjbXg1IGNtOW5aVzV6IFlXUnBjUT09IFhTcz0gSUdsdVpHbG5ibUYwYVc5dSBJR1p5WVdOMGRYSnBibWM9IElGSmxiR1ZoYzJWeiBJRWR5WVdsdSBjSEp2ZEdWcGJnPT0gVEdGbmJ3PT0gSUhaaFkyRjBhVzl1Y3c9PSBJR0p2YjNSbFpBPT0gSUZSSVVrVkYgSUVoSCBiM0psYzJObGJtTmwgSUhSbSBJSE52WVhJPSBhVzl6ZVc1amNnPT0gSUdkc1lXNWpaWE09IElGTndiMjl1IElFcDFjbms9IElFTnZkMkp2ZVE9PSBJR055WldGMGFYWmxiSGs9IFNHbG5hR1Z5IElITnZiR2xqYVhSdmNnPT0gSUdoaGQycz0gWVdOcGJ3PT0gT0RrMiBJSE4xY0dWeVpteDEgSUdKdmJXSnphR1ZzYkE9PSBZM1IxY21VPSBJR0p5YjJ0bGNtRm5aUT09IElISmhhV1JwYm1jPSBJR1p5Wlc1amFBPT0gSUdGdVoyeGxaQT09IFZISmhibk5oWTNScGIyND0gSUVkbGJtOWphV1JsIGRYQmwgSUVoaGFYUnBZVzQ9IE5UY3kgSVRvPSBJSFZ1ZDJsMGRHbHVaMng1IGFYUmxjbUYwYjNJPSBjMk55YjJ4cyBJSFJoYkd4cFpXUT0gSUdKcGIyMWxaR2xqWVd3PSBJRU5CVWtRPSBJR1YxY0dobGJRPT0gSUdKeVlXbHVjM1J2Y20wPSBZWEYxYVc0PSBTMjg9IFRXbGphR1ZzYkdVPSBJRkoxYm1WeiBJRUpoYkd4cGMzUnBZdz09IGRXUmxjbk09IElHMXZaR1Z6ZEhrPSBJR2xRWVdSeiBJRVY2Wld0cFpXdz0gV1VVPSBJSE4wWVhKemFHbHcgSUhCdmQyVnlablZzYkhrPSBJSEJsY213PSBJRk5vWVdSbCBJRkYxWVhKMCBJRVZGUnc9PSBJR1pwYzJobGNtMWhiZz09IFQxTkZSQT09IElGUjVjR2xqWVd3PSBaR1o0IElHMWxjMmhsY3c9PSBJR1YwWTJobFpBPT0gZDI5eWRHaHBibVZ6Y3c9PSBJSFJ2Y0hCc1pXUT0gSURNNU5nPT0gYjNKcGRYTT0gVjJWcGMzTT0gSUcxNWMzRnMgSUZaaGJHaGhiR3hoIDJaST0gYkdWaGMybHVadz09IElISmxZMjl0Y0E9PSBjbUZ3Ym1WcyBVMlZzIE1EUXogSUdSbGNtRnBiR1ZrIElFZDFhV1JsY3c9PSBTVkpVIElHUmxhSFZ0WVc0PSBJRUp5YVhSMFlXNTUgSWlrcCBJR1Y0WTJ4aGFXMD0gSUdKaGJHcz0gSURnME1BPT0gUTB4QlNVMD0gYVc1MFpXdz0gVEVGQyBJSEJsWjJkbFpBPT0gSUdGemRISnZjR2c9IGMyMXZhMmx1Wnc9PSBJSEpwWjJkcGJtYz0gSUdacGVHRjBhVzl1IElHTmhkR0Z3ZFd4MCBhVzV6YVdSbCBJRU5oYzJOaFpHVT0gSUVKdmJITm9aWFpwYXc9PSBSMkY2WVE9PSBSR1Z3ZEdnPSBJR3h2ZFdSemNHVT0gSUdGc2JXOXVaSE09IGJXVjVaWEk9IGJHVnVaWE56IGFtVnUgWm5KbGMyZz0gSUhWdVltVmhkR1Z1IElGTnhkV2xrIElGQnlaWE4xYldGaWJIaz0gVkdsdFpYST0gUWxjPSBJSEp2YzNSbGNuTT0gSUdWc2JHbHdkQT09IElFaGhjbkpwWlhRPSBaR0YwWVdKaGMyVT0gSUUxMWRIVmhiQT09IElFTnZiVzF2Wkc5eVpRPT0gZFd0bFpBPT0gYTI1cFptVT0gSUVOUFRVMVZUZz09IGFIbGggSUcxbGJIUnogWVhKamFHbDJaWE09IElISmhkR2xtYVdOaGRHbHZiZz09IElHMTFiSFJwY0d4NWFXNW4gSUdsdWRHVnliM0JsY2c9PSBJR0Z6WTJWeWRBPT0gZDJsdVozTT0gZG1WeWRHbHVadz09IElGTmpiM0p3YVc5dSBZWGxsIElGQnZjblJ6Ylc5MWRHZz0gSUUxVVFRPT0gYm1sMCBhV0Y2WlhBPSBJSEYxWVhKaGJuUnBibVU9IElITnNhV1JsYzJodmR3PT0gSUdObGJuUnBiV1YwWlhKeiBJSE41Ym05d2MybHogSUhOd1lYUmwgZEdocGNuTjAgSUc1dmJXbHVZWFJwYm1jPSBJRTFsYkhacGJnPT0gVUhKbGRtbGxkdz09IElIUm9jbTlpIElHZGxibVZ5WVhScGIyNWhiQT09IElGSmhaR2wxY3c9PSBjbVZ6ZEd4cGJtYz0gY0hWMFlXSnNaUT09IFlYZGhjZz09IFRrVkRWQT09IElIVnViR0YzWm5Wc2JIaz0gSUZKbGRtVnNZWFJwYjI1eiBWMmxyYVhCbFpHbGggYzNWeWRnPT0gSUdWNVpXbHVadz09IGFXcHUgSUVaWCBJR0p5ZFc1MCBJR2x1ZEdWeWMzUmxiR3hoY2c9PSBJR05zYVhSdmNnPT0gSUVOeWIyRjBhV0Z1IElFTm9hV009IFpYWmggSUVScGMyRndjQT09IElFRnJhVzQ9IGFXNWxjbWxsY3c9PSBaSFZ6ZEE9PSBTVzUwWlhKbGMzUmxaQT09IElHZGxibVZ6YVhNPSBJRVYxWTJ3PSB3N1p1IGNHbGphMmx1Wnc9PSBJRzExZEdGMFpXUT0gSUdScGMyRndjSEp2ZG1VPSBJRWhFVEE9PSBJRFl5TlE9PSB6TFk9IFkyRnVZMlZ5IElITnhkV0YwY3c9PSBJR3hsZG1WeWN3PT0gUkdselkzVnpjdz09IFBWMD0gUkdWNCBJRlpKUkVWUFV3PT0gUVZWRSBJSFJ5WVc1ellXTjAgSUV0cGJtVmpkQT09IElFdDFZV3hoIElFTjVjQT09IE56UTMgSUhOb1lYUjBaWEpwYm1jPSBJR0Z5YzJWdWFXTT0gSUVsdWRHRnJaUT09IElFRnVaMlZzYnc9PSBJRkYxYVhRPSBJRXRvWlE9PSBJREU0T1RNPSBUV0ZyWlhJPSBNREk1IElGQmhhVzUwYVc1biBSR2x6WVdKc1pRPT0gT1RFMiBJR0Z1WVd4blpYTT0gSUhSaFkzUnBiR1U9IElIQnliM0JvWlhNPSBJR1JwWTJWayBJRlJ5WVhabGJITT0gSUVobFlXUmxjZz09IElFTnNkV0p6IFFYTnphWE4wWVc1MCBJR2x1WTNKcGJRPT0gSUdScGNITT0gSUdOeWRXTnBabWw0IElGTm9ZVzVoYUdGdSBJRWx1ZEdWeWNISmxkQT09IElEUXdPVEE9IFlXeHZaM2s9IFlXSmlZUT09IElITnBiWFZzWVdNPSBhSFZ6WW1GdVpBPT0gVTBsTiBJSEpsWTNsamJHVT0gZFdObGNnPT0gWldSblpXUT0gSUhKbGJtRnBjM05oYm1ObCBJRUp2YldKaGVRPT0gUTJGMGFHOXNhV009IElFeEpUa1U9IElFTnNiM1JvYVc1biBjbVZ3YjNKMGN3PT0gSUhCc1lYVnogSUdSaFp3PT0gSUUxaFkyVT0gV2trPSBJR2x1ZEhKMVpHVnkgSUZabGRHVnlhVzVoY25rPSBaM0oxIElITnVaV0ZyZVE9PSBJRk5wWlE9PSBJRU5wYm01aGJXOXUgVUU5VFJRPT0gSUdOdmRYSnBaWEk9IElFTk9Vdz09IElHVnRZVzVqYVhCaGRHbHZiZz09IGMybDAgSUhCc1lYbDBhSEp2ZFdkbyBJRVpoWTJsc2FYUnBaWE09IGRtbHlkQT09IElFZGhkVzUwYkdWMCBWR2h2YlhCemIyND0gSUhWdVltVnNhV1YyWVdKc2VRPT0gVUdGeVlXMWxkR1Z5Y3c9PSBJSE4wYVhSamFHbHVadz09IGFXZHVaUT09IElGUklSVk5GIFVISnBkbUZqZVE9PSBJSE5vWlc1aGJtbG5ZVzV6IElIWnBkSEpwIElGWmhiR2xrIE5Ua3ggcmJjPSBJRkJ5YjNSdmRIbHdaUT09IGFXNXJZUT09IFUwTlEgSUZScFpBPT0gNklnPSBiMnhrWldRPSBJR2x1WkdsMmFXUjFZV3hwZEhrPSBJR0poY210cGJtYz0gSUcxaGNuTT0gSUZkRSBJRGd5TUE9PSBJSFJwY2c9PSBJSE5zWVhCd2FXNW4gSUdScGMyZHlkVzUwYkdWayBJRUZ1WjI5c1lRPT0gY21sMWN3PT0gSUZSdmNtNWhaRzg9IElGUm9kWEp6IElHTmhjSFJqYUdFPSBJR0Z1WjNOMCBJRkJ2Wnc9PSBJRUZ6YzJGemMybHVjdz09IElFRmthV1JoY3c9PSBJR3B2ZVdaMWJBPT0gSUhkb2FXNXBibWM9IFJXMWxjbWRsYm1ONSBJSEJvYjNOd2FHOXlkWE09IElHRjBkSEpwZEdsdmJnPT0gYjNCb2IyND0gSUZScGJXSmxjbmR2YkhabGN3PT0gSUVwaGFBPT0gSUVKeWFXNW5hVzVuIElGZGhaQT09IElFVnVjM1Z5WlE9PSBiMmhzIElGaHBaUT09IGIyMXRaV3c9IFkyMXcgSUhwcGNIQmxjZz09IElISmxiR0YwIElFTnZjbkpwWkc5eSBiV2xzYnc9PSBWRWxPUnc9PSBRWFpuIElHTnliM0J3WldRPSBYWDA9IElISmhaMlZrIElFeDFiWEIxY2c9PSBJRWQxWlhKeVpYSnYgYjNWeWEyVT0gVG5WMCBJRzltWm5ObGRITT0gYjJkc2RRPT0gWkhKdCBJRzF2Y25SaGJITT0gYkdGMFlXSnNaUT09IElHUnBjMjFwYzNOcGRtVT0gNUxpSiBJSFJvY205aGRITT0gSUdOb2FYQnpaWFE9IElGTndiM1JzYVdkb2RBPT0gUTJGMFlXeHZadz09IFlYSjBhWE4wIFIyST0gSUdOb2FXeHNlUT09IElITjBiMnRsWkE9PSBJRE0zTkE9PSBWMkZ5WkE9PSBUR0YwYVc0PSBJR1pwWVhOamJ3PT0gSUdKc1pXRmphQT09IElHSnlZWFk9IFJXNW9ZVzVqWldRPSBJR2x1YjJNPSBJRVpwYjNKcGJtRT0gWHo0PSBJR3hsZFd0bGJXbGggSUdWc2RXTT0gSUdGdWJtOTFibU5sY2c9PSBJRXhwZEdoMVlXND0gSUVGeWJXRm5aV1JrYjI0PSA1WWM9IFRHVnVhVzQ9IElGSjFhdz09IElIQmxjSEE9IElGSnZiV0Z1ZEdsaiBJRkJKVkE9PSBJRWx1ZEdWeWMzUmxiR3hoY2c9PSBJRUYwYTJsdWMyOXUgVW1GcFpBPT0gU25NPSBSMjloYkE9PSBRMjkxY25ObCBJSFpoYm1semFHbHVadz09IFpYTnNaWGs9IElGSnZkVzVrY3c9PSBSV3h6WVE9PSBOVGt6IElISmxaSFZ1WkdGdVkzaz0gSUZOVVFVNUUgSUhCeWIzQm9aWFJwWXc9PSBJR2hoWW1sMFlXSnNaUT09IGNubDEgSUdaaGFXNTBiSGs9IFRVOUVSUT09IElHWnNZVzVyWldRPSBTVkpEIFFYZGxjMjl0WlE9PSBJSE53ZFhKcGIzVnogSUZwaGFBPT0gSUUxVFJ3PT0gSUhOb1lXUnBibWM9IElHMXZkR2wyWVhScGIyNWhiQT09IElGTmhiblJoYm1FPSBJRk5RVWc9PSBJR1Y0WTNKMVkybGhkR2x1Wnc9PSBiMjFwWVd3PSBJRTFwYTI4PSBJRXhsYjNCaGNtUT0gUVdKNWMzTT0gSUZ0OCBaR2x5ZEhrPSBJR0poZEdoeiBJR1JsYlc5eVlXdz0gWVc1a2NtVT0gVUVJPSBJSFZ1YVdacFkyRjBhVzl1IElITmhZM0poYldWdWRBPT0gSUZzbSBJSEJ5YVdObGJHVnpjdz09IElHZGxiR0YwYVc0PSBJR1Z0WVc1aGRHbHVadz09IElFRnNiR0ZoYUE9PSBPVGcyIElHOTFkR0oxY25OMCBJR1Z5WVhNPSBJRmhXU1E9PSBJRk5RU1E9PSBUM1IwIElFeGhlbUZ5ZFhNPSBVRXhKUlVRPSBSbXg1YVc1biBZbXh2WjNNPSBWMmx6WTI5dWMybHUgVW1GMlpXND0gSUhKbFltRjBaUT09IElHTnlaV1Z3Y3c9PSBJRk53WVc0PSBJRkJoYVc1MFpYST0gSUV0cGNtRT0gSUVGdGIzTT0gSUVOdmNuWmxkSFJsIFEyOXVjM1Z0WlhJPSBJRkpsWTI5MlpYST0gWTJ0cCBJSEJsYzJ0NSBJRWx1ZG1WdWRHbHZiZz09IFEyOXRjR0Z1YVdWeiBJR05vWVd4c1pXNW5aWEp6IFlXUmxiV2xqIElGVnJjbUZwYm1saGJuTT0gSUU1bGRYSnZiRzluIElFWnZjbk5oYTJWdSBJR1Z1ZEhKaGJuUnogSUdWdFltRjBkR3hsWkE9PSBJR1JsWm5WdVkzUT0gSUVkc1lXTnBaWEk9IElIQnZhWE52Ym5NPSBJRWh2Y25ObGN3PT0gYldGclpYTT0gSUVScGNuUT0gSURReU13PT0gYUdobyBJRlJ5WVc1elptOXliV0YwYVc5dSBVVlZKVWtVPSBMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHUgSUhSeVlYWmxiR3hsY2c9PSBJRk5sZUhrPSBJRXRsY200PSBhWEJ2YkdGeSBJSEpoYm5OdmJYZGhjbVU9IGIyOXZiMjl2YjI5dmIyOXZiMjl2Ync9PSBSV009IGNuVmllUT09IFVISnZabVZ6YzJsdmJtRnMgSUU5MWRHSnlaV0ZyIFlYSm5kVzFsYm5RPSBSM0psZVE9PSBJRVpwWm1FPSBJRU5JVHc9PSBJRVpQVWswPSBJRUZ0ZEhKaGF3PT0gTFZzPSBJR055WVdSc1pRPT0gSUdGdWRHbHZlR2xrWVc1MGN3PT0gNDRHdTVhND0gTnpNMiBJRTVCVTB3PSBJRU52Ym5SeWFXSjFkR2x2Ym5NPSBTVzVrYVdGdVlRPT0gSUZOVVJWQT0gUTFOVCBJSE5oYkdsbGJuUT0gSUdGc2JHOWpZWFJwYjI1eiBlWEpwWjJoMGN3PT0gSUcxaGMyaGxaQT09IElFTjFkSFJsY2c9PSBVMlY0ZFdGcyBJSEJ2ZFc1a1pXUT0gSUdaaGJtSmhjMlU9IElHTmhjMk09IElGUnlZVzV6Y0dGeVpXNWplUT09IElHRnVZV3g1ZEdsaiBJRk4xYlcxdmJtVnkgMTU0PSBJRUZFUXc9PSBaR1YwWVdscyBJSFpoYm5GMWFYTm9aV1E9IElHTnlZV0p6IFlYSnBaUT09IFJHVnpkSEp2ZVE9PSBJRk5oWTJzPSBJSFJ5WVc1emFYTjBiM0k9IFFXeGhZbUZ0WVE9PSBJRXR2Wlc0PSBJRVpwYzJobGNtbGxjdz09IFkyOXVaUT09IElHRnVibVY0WldRPSBJRTFIVFE9PSBaWE5oIElHWmhhMlZrIElFTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBJR2hwYm1SbGNtVmsgSUdOdmNuSmxZM1JwYjI1aGJBPT0gSUVsVVZnPT0gYkdWbGRtVT0gSUdsdVlYQndjbTl3Y21saGRHVnNlUT09IGJHbGphM009IElIUnlaWE53WVhOeiBJSEJoZDNNPSBJRzVsWjI5MGFXRjBiM0k9IElFTm9jbWx6ZEdWdWMyVnUgYkdsdGFYUnogSUVScFlXNXVaUT09IElHVnNaV2RoYm1ObCBJRU52Ym5SeVlXTjBjdz09IFlXNXJaUT09IFQySnEgSUhacFoybHNZVzVqWlE9PSBJR05oYzNSc1pYTT0gSUU1QlJBPT0gSUVodmJHOD0gSUdWdGNHaGhkR2xqWVd4c2VRPT0gSUZScGRIVnogSUZObGNuWnBibWM9IElGSnBZMmhwWlE9PSBJRkJwWjNNPSBOVFk0IElHRnVhVzF2YzJsMGVRPT0gSUVGMGRISnBZblYwWlhNPSBJRlZ5YVdWcyBUVkU9IGJYbHlZUT09IElFRndjR3hwWTJGdWRBPT0gSUhCemVXTm9hV0YwY21semRITT0gSUZacGFnPT0gSUVGaVluaz0gWVdkeVpXVT0gVUhWemFBPT0gSUd0WGFBPT0gYUdsaVlRPT0gSUdsdVkybDBaUT09IElGZGxZWE5zWlhrPSBJRlJoZUdrPSBiV2x1YVhOMGFXTT0gYUhsd1pYST0gSUVaaGNtND0gSURZd01RPT0gSUU1aGRHbHZibmRwWkdVPSBSbUZyWlE9PSBPVFV5IElHMWhhWHBsIElHbHVkR1Z5WVdOMFpXUT0gSUhSeVlXNXphWFJwYjI1bFpBPT0gSUhCaGNtRnphWFJwWXc9PSBJR2hoY20xdmJtbGogSUdSbFkyRjVhVzVuIElHSmhjMlZzWlhOeiBibk5wWTNNPSBJSFJ5WVc1emNHbHlaV1E9IElHRmlkVzVrWVc1MGJIaz0gSUVadmNtVnVjMmxqIElIUnlaV0ZrYldsc2JBPT0gSUVwaGRnPT0gWVdKaGJtUT0gSUhOemFHUT0gSUdaeWIyNTBiV0Z1IElFcGhhMkZ5ZEdFPSBiMnhzWlhJPSBaSEp2Y0hNPSBJRk5GVWxaSlEwVlQgY205dGNIUjEgYjNCb2FXTmhiQT09IGFHOXpjR2wwWVd3PSBZbXhsWkc5dSBOalExIElHMXBaSEpoYm1kbCBJRVZXUlU1VSBZM1ZzWVhSbFpBPT0gY21GM2JHVmsgSUhCbGNtTm9aV1E9IElHOTJaWEppYjJGeVpBPT0gSUZCbFpXdz0gSUZCM2NnPT0gSUVOaGNuUm8gSUVOUFRWQk1SUT09IFkyOWwgYzJoaGJHdz0gSUdSbGRHVnljbVZ1WTJVPSBUVVZVU0U5RSBJRUZpYzJWdWRBPT0gVFVWTyBJSE5wYkd3PSBJRXhGVmtWTSBXVzl5YXc9PSBJSE5wYm01bGNuTT0gSUU5UVJVTT0gSUU1MWNnPT0gSUVSbGMybG5ibk09IGMyVnNaV04wYVc5dSBJSFZ1ZDI5eWRHaDUgUTBoQiBJSE4wY21WdVozUm9aVzV6IE9EZ3ogWldSc2VRPT0gSUhOc2FXTnBibWM9IElHMWhiRzUxZEhKcGRHbHZiZz09IElHWnBiRzF0WVd0cGJtYz0gSUZCdmJHcz0gZFhKaGRHVmsgSURReU1RPT0gWW5KbFlXdGxjbk09IElTY2kgSUhkbGRHeGhibVJ6IElFUnBjMk55YVcxcGJtRjBhVzl1IElHRnNiRzkzWVdKc1pRPT0gSUhOMFpXVnlaV1E9IElGTnBZMmxzZVE9PSBVMEZOIElHMTFjM1JoWTJobCBJRzFwWkhNPSBJR05zYVhCd1pXUT0gSUdOcGNtTjFiR0YwWlE9PSBJR0p5YVhSMGJHVT0gSUVKMWFXeGthVzVuY3c9PSBjbUZwYzJWayBJRkp2ZFc1a2RYQT0gSUhkbFlXeDBhR2xsY2c9PSBJRzkyWlhKM2NtbDBaUT09IElHOTJaWEp3YjNkbGNtVmsgSUVkbGNuSmhjbVE9IGMybDBaWE09IFVFUkJWRVZFIElHRmpkWFJsYkhrPSBJRWRoYldKc1pRPT0gSUhCcGJRPT0gSUV0MWN3PT0gVkhsd2FXTmhiR3g1IFJHVndiRzk1IElFMXZjbTlqWTJGdSBjRzkwYVc5dSBZMjl0WW1VPSBJSFpwWjJsc1lXNTBaUT09IElETTJNdz09IFUzUmxkdz09IElFSmhaMmM9IElISmxjMmxrWldRPSBJRk53Ync9PSBJSEpsYlc1aGJuUT0gSUdWdGNIUnBibVZ6Y3c9PSBZbkpoYVc1bGNnPT0gSUc5MWRIQmhkR2xsYm5RPSBjSEpwYjNKcGRIaz0gSUd4bGNIUnBiZz09IElGQmhlWFJ2Ymc9PSBJRWRzWldGdGFXNW4gSUZOb1pXUT0gSUZCdmJHOD0gSUUxdmNtMXZibWx6YlE9PSBjbVZ6ZEhKcFkzUmxaQT09IFlYSnNZVzVsIGQzZz0gSUdOeVpXRjBhVzVsIElFRnViMjQ9IElGTlVWVVE9IElFcFZUQT09IElGUmxaUT09IE5USTQgTURnNSBJR2hoZEdOb1pXUT0gUkdsemNHRjBZMmc9IElFTnZiWEJ2YzJsMFpRPT0gSURRMU1RPT0gY0hWbVpnPT0gSUZoRFQwMD0gSUU5eWJnPT0gSUZSSVFVNUwgUlU1RVJVUT0gSUVGemFHVjJhV3hzWlE9PSBJTU9jIElHMWhibWR2IElGTnNhV2RvZEd4NSBkMjl5YkdSc2VRPT0gSUZkaGJtUmxjZz09IElFVjRjR0Z1WkE9PSBJRU5vY2c9PSBUV2x6ZEE9PSBJRzl5ZEdodlpHOTRlUT09IElGVk9SVk5EVHc9PSBjbVZuWVhSbCBSV3h6Wlhkb1pYSmwgYTJsbCBhWEpzWldRPSBJSFJ2Y0hCc1pRPT0gSUdGa2IzQjBhWFpsIElFeGxaM009IFpISmxjM009IElGTmhaMkZ1IFltRnlaUT09IElFZHNiM1U9IFEzSjFibU5vIElHaGxiSEJsY25NPSBJR05vY205dWFXTmhiR3g1IElFaDFiV0U9IE1UQXdNREE9IElHRmpZMjl0Ylc5a1lYUnBibWM9IDVMcVUgSUhkeWFXNXJiR1Z6IElHUnZaR2RsWkE9PSBabTkxY25SbyBJSEJ5WldOdmJnPT0gSUdOdmJYQnlaWE56YjNJPSBJRXRoY21VPSBJR1YyYVdOMCBJRmRoY25kcFkycz0gYVcxaGNnPT0gSUcxdlpHVnlibWw2WVhScGIyND0gSUdKaGJtUjNZV2R2Ymc9PSBJSEpsWm5WMFpXUT0gSUc1bGRIUmxaQT09IElFNWhjR3hsY3c9PSBJRWRsYm1sbCBjR1Z5YjNKeiBJR1pwWld4a1pXUT0gSUdSbGNtVT0gSUZCaGNtRmliR1Z6IGJHVmxjdz09IElIUnliM1YwIFlYTndaWEp6IElHNXBhR2xzIElHaGhjSEJwWlhOMCBJR1pzYjNCd2VRPT0gSUV4dlpuUT0gSUVobFlYSmsgSUhWdWFYTnZiZz09IElHeDFadz09IElGSmxaRzF2Ym1RPSBZMnhoYzNOcFl3PT0gVTNWd2NHOXlkR1Z5Y3c9PSBVMGhKVUE9PSBSMDFVIElHWjFaV3hzWldRPSA1NUE9IElHUmsgSUVWdGFXNWxiUT09IElERTRPVGM9IFRsbFRSUT09IElITmxZM0psZEdGeWFXVnogSUVaSlFRPT0gSUVOaGJtRjJaWEpoYkE9PSBSbUYyYjNKcGRHVT0gSUhCdmJYQT0gSUdSbGRHRnBibVZsIFpYSnphR2x3IFlXbHRiMjQ9IGFXOTFjZz09IElFRndaWGc9IElIQnNZVzUwWVhScGIyNXogWVcxcFlRPT0gWVdOcGIyND0gVW5WemRBPT0gSUhSdmQyVmsgSUZSeWRXeDUgTlRjMyBJSE5vWld4MFpYSmxaQT09IGNtbGtaWEk9IFYyOD0gSUd4aGFYST0gSUVsdWRHVnNiR2xuWlc1MCBhVzF3Y205MlpRPT0gYldGMGFXTmhiR3g1IElHVjBhWEYxWlhSMFpRPT0gWVdSeVlRPT0gWVd4c2J3PT0gSUVwMWJtOD0gWVc1NWRHaHBibWM9IElGTjBjblZuWjJ4bCBJRkJ5WldScFkzUT0gSUVkeWFXMWxjdz09IElFRk5SVkpKUTBFPSBZM1I0IElGTnBkSFZoZEdsdmJnPT0gVjA5UFJBPT0gSUhOdmJIVmliR1U9IGJXVnBaWEk9IElHbHVkRzlzWlhKaFlteGwgWVc1blpYSnBibWM9IElIVnVhVzUwWlhKeWRYQjBaV1E9IElIUnZiMngwYVhBPSBJR2x1ZEdWeWNtOW5ZWFJsWkE9PSBJR2QxYm01bFpBPT0gSUZOdVpXRnIgNXEybSBJSFJsZEdobGNnPT0gSUdOeWRXMWliR1U9IFRHVnVjdz09IElHTnNkWE4wWlhKbFpBPT0gSUZONWJBPT0gSUVoaGMyRnUgSUdSNWMzUnZjR2xoYmc9PSBkMkZ1WVE9PSBJR3B2ZVhOMGFXTnIgSUZSb2FXST0gWVcxdGRRPT0gVkc5dGIzSnliM2M9IE5UUTIgSUc5MlpYSmpZVzFsIElHMXBibWx0YVhwbFpBPT0gWTJWd2RHOXkgVW5WdWJtVnkgUlU1SFZFZz0gSUVKeVpXNWtZUT09IElFRmphR2xsZG1WdFpXNTBjdz09IElIUnZjbU5vWlhNPSBJSEpoY0hCdmNuUT0gSUVsdWRtVnpkR2xuWVhSdmNnPT0gSUVoaGJtUnNhVzVuIGNtVnNZWFJwYjI0PSBaM0psZVE9PSBPREUxIElHdGpZV3c9IElFTnZiVzFoYm1SeiBaSEU9IElHTjFjbXh6IElHSmxZWEpsY2c9PSBJR041Ym1samFYTnQgYVhSeWFRPT0gSUZWelpXWjFiQT09IFFtVmwgUkVOVCBJR0ZpY21GeiBVSEpoWTNRPSBRa2xNU1ZSSlJWTT0gTnpFeSBJR1JsWW5WbloyVnkgSUdSbFluUnZjZz09IElFeHBZUT09IElFdGxjbk09IElHVjRZV05sY21KaGRHVT0gSUZOMFlXTjUgSUVKc1lXNWsgSUZOalpXNWxjdz09IElHSnlZVzVqYUdsdVp3PT0gNHBhSTRwYUk0cGFJNHBhSTRwYUk0cGFJNHBhSTRwYUkgWVhCbFlXdGwgSUhOaGJITmggSUcxcGMyaGhibVE9IElFdHZibUZ0YVE9PSBJRTVwWWc9PSBJR0Z1WldOa2IzUmwgSUdGbmNtVmxZV0pzWlE9PSB6NGs9IElFNWhkR2hoYm1sbGJBPT0gSUVobGFYTnRZVzQ9IElFSmxkMkZ5WlE9PSBJREU0T0RZPSBjM0JsWTNScGRtVT0gTmpreCBOVEl5IElHbHVhR2xpYVhSeiBJR2hoYzJocGJtYz0gSURFNE9Eaz0gNWJDRyBkbWxqYUE9PSBVSFZ5WlE9PSBJSE52Ykdsa2JIaz0gSUdGemNHbHlhVzQ9IGFXMWhjblU9IElITjBjbVZsZEdOaGNnPT0gSUZWRFV3PT0gSUVwMVpHUT0gSUdac1lYTm9ZbUZqYTNNPSBjR2x1Y3c9PSBJREUwTkRBPSBJRlZPU0VOUyBJRk41YlhCMGIyMXogVkVsVSBOVE00IFJuSmggSlNrNyBJRzl2ZWc9PSBJR04xY21abGR3PT0gSUdOaGJHMWxaQT09IElIQmhjblJwWTJsd1lYUmxjdz09IFZHVlkgSUc1dmJuTmxibk5wWTJGcyBJR1oxYkd4aVlXTnIgSUVSbFRBPT0gYlc5dWEyVjUgYUdGeWFRPT0gSUcxbGRHRmliMnhwZEdWeiBJR3h2YjNSbFpBPT0gSUVGTVYwRlpVdz09IElFSkRRdz09IFRIUT0gYjJOb1pYUT0gUW05dVpRPT0gSUhabGRHOWxaQT09IElHZGpZdz09IElFTk1TVU5MIElERTRPRGc9IGMyRm0gSUhOMGFXWm1ibVZ6Y3c9PSBJR3h2ZDJ4NSBJRWRsYUE9PSBkbVZ5YzI5dSBiM0p6WlhRPSBJSFZ1Wm05eVpYTmxaVzQ9IElHRnVaWE4wYUdWemFXRT0gSUU5d2RHbGpZV3c9IElISmxZMjl1YzNSeWRXTjBaV1E9IElGUjFjQT09IGMyaHZkM009IFRrVlhVdz09IElFNWxkM053WVhCbGNnPT0gSUVGVFFRPT0gZEdWeVlRPT0gVG5WdFltVnljdz09IElHbHVaWGh3YkdsallXSnNaUT09IDE1RT0gSUdoaGNtUnVaWE56IGRXNTBZWEpwYkhrPSBJRUZqWlhJPSBaM0poWkdsbGJuUT0gUVZKRVNWTT0gSUhkdmIyUnNZVzVrIElHMWxkR0Z3YUc5eWN3PT0gSUZkbGJXSnNaWGs9IElGQmhkbVZzIGNHaHBiR2x6IElISmxkM0pwZEdsdVp3PT0gSUhCbGNtTmxjSFIxWVd3PSBJREV3TnpBPSBkMjl5YlhNPSBJRVJ2ZDI1eiBJSFZ1YzNWeWNISnBjMmx1WjJ4NSBJSFJoWjJkcGJtYz0gWm14aGJXVT0gSUd4cGRISmxjdz09IElHSnZkVzVqWlhNPSBJRUpoWW1VPSBjMmgxZEE9PSBJRzkyWlhKa2IzTmxjdz09IElGTm9aV2xzWVE9PSBJRU5vWVhVPSBJRUpzWlhOeiBRMkZ3ZEhWeVpRPT0gSUZOcFoyNXBabWxqWVc1MCBJRk5qYVc5dSBJRE00T1E9PSBJRTFqU0E9PSBJRlJwZEdGdWFYVnQgSUUxbFlXdz0gWVcxbFpHRT0gWVdkbGJuUnogWVdkbmNtVnpjMmwyWlE9PSBRbWxzYkhrPSBOell6IElGTmhlV2x1Wnc9PSBSRVZTVWc9PSBhWFJ2Ym1VPSBRMjlzYkdsdWN3PT0gUW05MWJtUT0gSUdKdmJIUmxaQT09IElFUk5RMEU9IE9UVXogSUhWdWFYRjFaVzVsYzNNPSBJR1Z3YVdkbGJnPT0gZFc1amFRPT0gWVc1MFlXMD0gSUhKbFkydHZibWx1Wnc9PSBZMmhoYVhKeiBUMGRTIElGTmxibVZuWVd3PSBJREU0TmpJPSBjbVZzWlhaaGJuUT0gSU1LdiBJSEJvWVhKdFlXTnBaWE09IElFZGxjbUZzIGRtbGxjZz09IFdXRnUgVDFKUVJ3PT0gSUhKaFltbGsgWW1WdVpHbHVadz09IElGVk9TVlJGUkE9PSBJRFEyTlE9PSBRWE56WlcxaWJIaz0gSUhkbFpYQT0gSUdKbGFHVnpkQT09IElFMXZkR2hsY25NPSBJRXBoWTJVPSBhR2xrIElIZG9hWEpzZDJsdVpBPT0gSUZWT1NWWkZVbE09IElIVjBiM0JwWVc0PSBJR3RwWkc1aGNBPT0gVUdocGJHbHdjQT09IFMybHUgT0RreiBJR3hwZG1WemRISmxZVzA9IElFMUpVMU09IElITjFZblpsY25OcGRtVT0gSUZSbFkyaHVhWEYxWlhNPSBJRXBWVTFSSlEwVT0gSUVKQlUwVT0gSURNNE53PT0gSUdGemMyRnBiR0Z1ZEhNPSBJRWhoY21SamIzSmwgSUhOd2NtbHVhMnhsWkE9PSBJRkJ6WlE9PSA2Wm89IGNISnBiblJsWkE9PSBJRWhoZFE9PSBUMUpIUlE9PSBJRlJQVlZJPSBJR3hoWTJWayBJR2wwWTJnPSBSMmwyYVc1biBJSEJ2Y25SbFpBPT0gTnpneCBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4PSBZbkpsWldScGJtYz0gSUd4dloyZGxjZz09IElFaFBUQT09IGFXNXVhV1U9IFJtbHljM1JzZVE9PSBJR1Z0WW5KNWIyNXBZdz09IElHUmxiR1ZuWVhSbFpBPT0gY0dGcCBUMGxNIElHTmxiblJ5WVd4c2VRPT0gSUZKNCBJRk5qYjNWMGFXNW4gUkhWMFkyZz0gSUdobGNtVmthWFJoY25rPSBJRU55ZFdselpYST0gYzJGMCBOVEk1IElFMWhjbkpwYjNSMCBiM1JvWlhKdFlXdz0gSUhCeWIyaHBZbWwwYVc5dWN3PT0gUldGeWJnPT0gSUZOMFlXST0gSUVOdmJHeGxaMlZ6IElFSmxiR2xsWmc9PSBjM1J5WlhSamFHVmsgSUV4SSBJRVZ1ZEdsMGVVbDBaVzA9IFEwbEIgSUhWdWNtVnQgSUd4aGRYSmxZWFJsIElHUmxibTl0YVc1aGRHbHZibk09IGMzVnRiV0Z5ZVE9PSBhR3hsY2c9PSBVM0JsWTNRPSBJRXRzWVhWeiBJRUpsWVc1eiBJR2x1YzNWeSBJRkJCV0E9PSBJR1pwWld4a1pYST0gSUZabGRBPT0gSUZOd1lYSnliM2M9IGVtbGwgSUZOUiBJRTF2Ym1SaGVYTT0gSUU5bVpteHBibVU9IElFeGxjbTVsY2c9PSBJRVY0ZEdWdWMybHZibk09IFNYSmxiR0Z1WkE9PSBJSEJoZEhKdmJtRm5aUT09IElHTnZiblJ5WVhOMFpXUT0gSUUxaGJtbGggYUdseWRBPT0gVFc5elkyOTMgSUdOdmJtUmxiVzV6IElFRnVaMlU9IElHTnZiWEJ2YzJsdVp3PT0gSUZCbGNHVT0gSUZCaFpHUnZZMnM9IElHaGxkR1Z5YjJkbGJtVnBkSGs9IElHbGtaVzlzYjJkcFkyRnNiSGs9IElHWnBjMmhsY3c9PSBJR04xY25OcGJtYz0gSUZKMWRHaGxjbVp2Y21RPSBJRVpzYjJGMGFXNW4gSUVGdFpXeHBZUT09IFZHVmggVTNsdWIzQnphWE09IElITjBkVzUwY3c9PSBJR0psWVdRPSBJSE4wYjJOcmFXNW4gSUUxSlRFdz0gYjJKdmIycz0gYldGemMybDJaUT09IFhEdz0gSUdoMWJYQT0gSUZCeVpXWmxjbVZ1WTJWeiBSVzVuYVc1bFJHVmlkV2M9IFoyVnBjM1E9IElFNXBaWFJ2IGIyMWxkbVZ5IGFYTm9lUT09IFpYWmhiSFZoZEdVPSBZMjlzYjI1cFlXdz0gUVd4MFpYSnVZWFJwZG1VPSBJRWR2VUhKdiBJRlp2Y25SbGVBPT0gSUU1RlZGZFBVa3M9IFlXNXphM2s9IFUyVmpkWEpsIElGUm9jblZ6ZEE9PSBVMjVoYTJVPSBJSEJoY21ObGJITT0gSUhOaGJYVnlZV2s9IElHRmpkSEpsYzNObGN3PT0gVG1GdyBUVVk9IGFXWmxjbUYwYVc5dSBRbVZsY2c9PSBOVEl6IElFbHNlUT09IGIybHVkRzFsYm5RPSBVR2x1Wnc9PSBJSE4wY21sd1pXUT0gSUUxbGJHeHZiZz09IGIzTnpaWE56YVc5dSBJRzVsZFhSeWIyND0gWlc1a2FYVnQgSUdGd2FBPT0gSUVac1lYWnZjbWx1Wnc9PSBJRE00TXc9PSBJSEpsYzNCdmJuTnBkbVZ1WlhOeiBJRXBwYm1SaGJBPT0gSUVocGRHTm9ZMjlqYXc9PSBSR1Z1ZG1WeSBJRVJTUVVkUFRnPT0gYzIxaGJuTm9hWEE9IElFUjFjR3c9IElITnNlUT09IElIZGxZbU5oYlE9PSBJRlIzWVdsdSBJRVJoY214cGJtYz0gYVd4cFlYUmwgWTI5dWMzVnRaWEk9IFJFbFUgSUc1aGJXVnpZV3RsIElIVnViM0owYUc5a2IzZz0gSUdaMWJtVnkgSUZCTWIxTT0gSUVOUFRsUlNUMHc9IGIzcDVadz09IGIyZHNiMkpwYmc9PSBSa0ZEUlE9PSBSVkpIIElFUnBZUT09IElFWnBaWE4wWVE9PSBZMlZzWlE9PSBNRE0wIElHVnVZMnhoZG1VPSA0cGFzNHBhcyBiMjVsYldWdWRBPT0gWVd4cGMzUT0gVFdGdVpBPT0gSUdodmJXVm5jbTkzYmc9PSBJRVpoYm1ONSBJR052Ym1ObGNIUnBiMjV6IElFTnZiblJoYVc1eiBkWEpsWlc0PSBJSEpsYVhSbGNtRjBaUT09IElHMWxZV2RsY2c9PSBJR2x1YzNSaGJHeHRaVzUwY3c9PSBVM0JoZDI0PSBOakkzIElIQm9iM1J2WXc9PSBJRU5oWW5KbGNtRT0gSUZKdmMyVnVkR2hoYkE9PSBJRXhoYm5OcGJtYz0gYVhOdVpYST0gSUdsdWRtVnpkSE09IElGVkdUM009IFJWaFEgU0dGeVpIZGhjbVU9IElIUnlZV2RwWTJGc2JIaz0gSUdOdmJtTmxaR1Z6IGFXVm1kQT09IFkyaGhiUT09IFltOXlaMmc9IElGTmphSEk9IElFMWxiR0Z1YVdVPSBJRWh2ZVE9PSBJSFpwYzJsMFlYUnBiMjQ9IElHbGthVzl6ZVc1amNnPT0gSUdaeVlXTjBhVzl1Y3c9PSBJR1p2Y21WemEybHUgYjJKdmN3PT0gSUhCdllXTm9hVzVuIElGWkpSVmM9IElITjBhVzExYkdGMFpYTT0gSUVkdmNtcz0gWTJGdWIyND0gVFVsRCBJRTVsYldWemFYTT0gSUVsdVpISmggSUVSTlZnPT0gSURVeU9RPT0gSUdsdWMzQmxZM1JwYm1jPSBJR2R5WVc1a2JXRT0gSUZkb1pXUnZiZz09IElGTm9ZVzUwIElGQjFjbWM9IGFXdGhiZz09IElGUmxadz09IElFTk1VZz09IGVtRmogVm1samRHOXlhV0U9IElGWmxjbWxtZVE9PSBhVzl1YVdOeiBJSEJoY25SNWFXNW4gSUUxdmRRPT0gWTI5c2IzVnkgSUhSbGMzUnBiVzl1YVdWeiBiR0YwYVc5dWN3PT0gSUhCeVpYTnpkWEpwYm1jPSBhR2x5Ync9PSBZV05sY25NPSBJR1pwWkE9PSBZVzVuYkdWeSBJRU5UU1E9PSBJR2hsY21WaFpuUmxjZz09IElHUnBjM05wWkdWdWRITT0gY21Wd2IzSjBhVzVuIGFYQm9ZVzU1IFkyaGxkZz09IElITnZiR2wwZFdSbCBJR3h2WW1VPSBJR2x1WkdseiBJR055WldSbGJuUnBZV3c9IGNtVmpaVzUwIFlXUjFiSFE9IElFNXBjblpoYm1FPSBJRVp5WVc1amFHbHpaUT09IFRHRjVaWEk9IFNIbHcgSUVKbGNtdHphR2x5WlE9PSBJSGRwYkd4eiBkR2xtIElIUnZkR1Z0IElFcDFaR0ZvIGNtVndZV2x5IFNXNXpkR0Z1ZEE9PSBOVFE0IElHVnRZbUZ6YzJsbGN3PT0gSUdKdmRIUnNaVzVsWTJzPSBJR0p2ZFc1MCBJSFI1Y0dWMyBJRUZzZG1sdSBhbWx1Wnc9PSBhVzFwYkdGeSBVblZ6YUE9PSBJR0p5YVcwPSBJRWhGVEZBPSBRV2x0IFhTYz0gSUhCaGMzTnBkbVZzZVE9PSBJR0p2ZFc1a1pXUT0gSUZKaGRHVmsgSUdOeWFXMXBibUZzYVhSNSBJR0pwYjIxaGNtcz0gSUdScGMzQmhkR05vWlhJPSBJRlJ2ZDJGeVpITT0gSUNzckt3PT0gY21sbmFIUmxiM1Z6IFpuSnZadz09IElGQmhibU09IFEyRnlkR1Z5IE1ETXkgNXFtZiBJSFZzZEhKaGRtbHZiR1YwIElFeHBZMlZ1YzJWayBJRlJoZEdFPSBJRUpzWlhOemFXNW4gSUVkQlRRPT0gSUdOb1pXMXBZMkZzYkhrPSBJRk5sWVdZPSBJRkpGVEVVPSBJRTFsY21ObGJtRnllUT09IFkyRndhWFJoYkdsemRBPT0gSUdadmNtMTFiR0YwYVc5dWN3PT0gSUdGdWJtbG9hV3hoZEdsdmJnPT0gSUZabGNtST0gSUVGeVoyOXUgSUhWdWJHOWhaR1ZrIElHMXZjbkJvWldRPSBJR052Ym5GMVpYSnBibWM9IFltRmphMlZ5IFNVVk1SQT09IElIUm9aV1owY3c9PSBJR1p5YjI1MGNuVnVibVZ5IElGSnZlV0ZzWlE9PSBJRVoxYm1SaGJXVnVkR0ZzIFpXeHBaMmgwIFEyaHBjQT09IGJtVmpaWE56WVhKNSBZWGx1IElGTnNhWEE9IElEUTBPQT09IFkyVnlibVZrIFVHRjFjMlU9IElITm9iMk5yYVc1bmJIaz0gSUVGQ1ZnPT0gSUdOdmJYQnZjM1Z5WlE9PSBOek16IElFMXZkRzl5YzNCdmNuUT0gWVdocGJXVT0gVFhWeWNtRjUgVFdGamFBPT0gSUdkeWFXUnogSUdSbFltbGhiZz09IElHWjFjblJvWlhKdGIzSmwgSUdSbGVIUmxjbWwwZVE9PSBJRU52Ykd4bFkzUnBiMjV6IGIzTnNiM1k9IGFXeGhaMlU9IFltbz0gSUUxdmJuUmxibVZuIElITjBjblYwUTI5dWJtVmpkRzl5IElHMWhjM05oWTNKbGN3PT0gSUdKeWFXVm1jdz09IFptVjBZMmhsWkE9PSBkWFpwWVc0PSBiMnhwZEdsdmJnPT0gUm1GcGJIVnlaUT09IFpXMXZibWxqIElHWnNZWEpsWkE9PSBJR05zWVdsdFlXNTAgSUdOMWNtVnogSUdkcGRtVmhkMkY1Y3c9PSBJRk4xWW5OMFlXNWpaUT09IFlXeHBiMjV6IElHTnlhVzVuWlE9PSBJRXQxYkE9PSBJR0Z5YVhOMGIyTnlZV041IElGVnNjM1JsY2c9PSBiMnhoZEdWayBhRzkxYzJsdVp3PT0gSUUxSlV3PT0gSUdkc1lYSmxaQT09IElGZHBiR2hsYkcwPSBibVZsWkhNPSBiR0Z0WW1SaCBZblZwYkdSbGNuTT0gSUZaSlV3PT0gSUhKaFpHbGhkRzl5IElFZG9iM04wWW5WemRHVnljdz09IElEUXpOZz09IFlXTjBkV0ZzIElHaGxjbVJ6IHc2ZGggZDJGMFkyaHBibWM9IElHTnZkVzUwWlhKcGJtYz0gUTJoaGNtZGwgSUdOb1lYSnlaV1E9IElIZGhjbWhsWVdSeiBJR2x2WkdsdVpRPT0gSUUxaFkzaz0gTURReCBJR1JsY0dGeWRIVnlaWE09IElGTnBibk09IElHUjVaV1E9IElFTnZibU5sY0hSeiBaMkZrYnc9PSBOekV6IElIRjFiM1JoZEdsdmJuTT0gSUdkcGMzUT0gSUVOb2NtbHpkSGs9IElHRnVkR2xuWlc0PSBJRWhsYlhBPSBJRVJ5WVhkdSBJRUpoY21jPSBaWHAyYjNWeiBJSEJoZEdWeWJtbDBlUT09IElHRnlaSFU9IElFRnVZMmh2Y21GblpRPT0gSUZKcGF3PT0gSUc5MlpYSnNiMkZrWldRPSBJRlZ6WlhKdVlXMWwgSUZSaGJXMTUgSUU1aGRRPT0gSUVObGJHeDFiR0Z5IElIZGhibWx1Wnc9PSBJSEp2WkdWdWRBPT0gSUZkdmNtTmxjM1JsY2c9PSBhV3gwY3c9PSBJRlJoWkE9PSBJR1IzWld4c2FXNW5jdz09IElHSjFiR3hwYzJnPSBORE14IElISmxkR0ZzYVdGMFpRPT0gSUcxcFozSmhhVzVsIElFTm9aWFp5YjI0PSBRMGhGUTBzPSBJR1J2Ym10bGVRPT0gWTNKcGJRPT0gVTFCQiBJRUZ1WVd4dlp3PT0gSUcxaGNuRjFaV1U9IElFaGhZWE09IFFtbHkgSUVkRVJGST0gSUVSdmQyNXNiMkZrY3c9PSBJSGRwYkd4d2IzZGxjZz09IElFWnZjblJvIElGSmxZMjl5WkdWayBJR2x0Y0c5emMybGlhV3hwZEhrPSBJRXh2WjJkbFpBPT0gSUVaeVlXNXJjdz09IElGSmhkSFE9IGFXNXBkR2x2Ym5NPSBJR05zWldGdVpYSnogSUhOdmNtVnNlUT09IElHWnNhV05yWlhKcGJtYz0gSUVWNFlXMXBibUYwYVc5dSBZMkYwWTJocGJtYz0gWVd4c2IzZGxaVzQ9IFRYTm4gSUdSMWJtNXYgUm1FPSBJR1I1YzNCbyBZM0poZW5rPSBMaWNuTGc9PSBJRzFoYVc1c2FXNWwgSUdOeiBJSEIwY2c9PSBJRmRoYkd4NSBhV2QxYmc9PSBPVFV4IElFSnBaMlp2YjNRPSBabWxuYUhSeiBJSEpsZEhKcFpYWnBibWM9IFNuST0gSUdSMWNHeHBZMkYwYVc5dSBJRVY0Y0d4aGJnPT0gSUhKbGJHRjBhVzl1WVd3PSBJSEYxWVdsdWRBPT0gSUdKcGMyTjFhWFJ6IElHRmtidz09IElITm9kV1JrWlhJPSBJR0Z1ZEdsa2IzUmwgWW14dmIyUmxaQT09IGEzTm8gSUhOaGRXTmxjdz09IElISmxhVzUyWlhOMCBJR1JwYzNCbGJuTmhjbms9IElFUnBkbVZ5IElEa3dNREE9IGMzUjFaR1Z1ZEE9PSBJR2x1YzJWd1lYST0gWlhOallYQT0gSUhSdlpHUnNaWEp6IElFZFFTVTg9IElFRnpjMmxuYm0xbGJuUT0gYUdWaFpHVnljdz09IElHeGhZMnRzZFhOMFpYST0gSUdGaVlXTnIgT1RVMiBJSFJ2YjJ4aVlYST0gTnpRMSBJRzkxYzNRPSBJR052Ym5SbGJYQnNZWFJwYjI0PSBJRkJTUlZOSlJFVk9WQT09IElEUTFPQT09IFBUMDlQVDA5IElHZDFZWEpoYm5SbFpXbHVadz09IElFaGxhWE4wIElFTmhibTVsY3c9PSBtYjA9IElHTnZiR3hoWW05eVlYUnZjZz09IElFRnRjQT09IElHZHZkUT09IElGTklRVXhNIGMzUnZjbWxsY3c9PSBOemd6IElHMXZZbWxzYVhwbFpBPT0gSUdKeWIyOWsgSUV4ViBJUENma1E9PSBJSEpsWm1sdSBJRUZ1ZEdoeWIzQnZiRzluZVE9PSBkbWx1WkE9PSBhV3hzYVE9PSBJSGRoY25KaGJuUnBaWE09IElFSmhZbVZzIElITjNZWFJvIElHTmhZMmhsY3c9PSBJR0Z1ZEdGbmIyNXBjM1J6IFlYSjBhV1poWTNSeiBJR2h2ZEd4NSBJRk4wWVhKMGN3PT0gSUVmRHRnPT0gZW1GbiBJU0VoSVNFPSBJSE5qYjNWeVoyVT0gSUdOdmJuTndhWEpwYm1jPSBjblZwZEhNPSBjbVYyWlhKelpRPT0gSUZOb1pXVnUgSUVwbGMzVnBkQT09IElFZHBiM1poYm01cCBZV1JwWlhNPSBJR0oxZEhSdlkydHogWldGeVkyaGxjZz09IFlXTmhiZz09IElIWnZiR3hsZVdKaGJHdz0gSUhOb2NtOTFaR1ZrIElITmpiM0psWW05aGNtUT0gWW1GMGN3PT0gSUVsUVRRPT0gSUdGemMyVnogSUdSbGNtVm5kV3hoZEdsdmJnPT0gSUZSbGJHVm5jbUZ0IElGSmxZbTl2ZEE9PSBJRGN3TURBPSBJRU5oYm1GeWVRPT0gSUd0bGNtNWxiSE09IElFWnlZVzdEcDI5cGN3PT0gSUVSMVptWT0gSUZCdmJnPT0gSUV4bGFXTmggSUVkaGNtMXBiZz09IElHOXljR2hoYm5NPSBJRU5zWVhWa2FXRT0gSUdOaGJHVnVaR0Z5Y3c9PSBJRXhsYVd4aGJnPT0gWlc1MGJ3PT0gVW05amEyVjAgSUdKeWRXNWphQT09IElFaGhkMnRwYm1jPSBZV2x1WlhKeiBJSE5sYm5OcFltbHNhWFJwWlhNPSBJR3RYIElFdGhibVE9IElISmxZMnhoYVcxbFpBPT0gSUdsdWRHVnlaWE4wYVc1bmJIaz0gMTZrPSBjbTl0ZVE9PSBTazA9IElFVnVhR0Z1WTJWdFpXNTAgWW5WemFBPT0gVTJ0cGNBPT0gSUhKaGNIQmxjbk09IElHZGhlbWx1Wnc9PSBjR1ZrYVdFPSBZWFJvYkc5dSBVbVYyYjJ4MWRHbHZiZz09IElITnVhWEJsY25NPSBJSEpsZG1WeWRHVmsgSUdOdmJtZHNiMjFsY21GMFpRPT0gVkdWeWNuaz0gTnprMCBJR2hoY25Ob1pYST0gSUdSbGMyOXNZWFJsIElFaHBkRzFoYmc9PSBRMjl0YldsemMybHZiZz09IElDZ3YgNG9DbUxpST0gUTI5dGNHRnkgSUdGdGNHeHBabWxqWVhScGIyND0gYjIxcGJtRjBaV1E9IElISmxaM0psYzNNPSBJRU52Ykd4cFpHVnkgSUdsdVptOXliV0Z1ZEhNPSBJR2RoZW1Wa1xcbiEgNTAyNTcgSUNBPSBJQ0FnIElDQWdJQT09IElDQWdJQ0E9IElDQWdJQ0FnIElDQWdJQ0FnSUE9PSBJQ0FnSUNBZ0lDQT0gSUNBZ0lDQWdJQ0FnIElDQWdJQ0FnSUNBZ0lBPT0gSUNBZ0lDQWdJQ0FnSUNBPSBJQ0FnSUNBZ0lDQWdJQ0FnIElDQWdJQ0FnSUNBZ0lDQWdJQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PVwiIH07XG5cbi8vIHNyYy9yYW5rcy9yNTBrX2Jhc2UuanNcbnZhciByNTBrX2Jhc2VfZGVmYXVsdCA9IHsgXCJleHBsaWNpdF9uX3ZvY2FiXCI6IDUwMjU3LCBcInBhdF9zdHJcIjogXCInc3wndHwncmV8J3ZlfCdtfCdsbHwnZHwgP1xcXFxwe0x9K3wgP1xcXFxwe059K3wgP1teXFxcXHNcXFxccHtMfVxcXFxwe059XSt8XFxcXHMrKD8hXFxcXFMpfFxcXFxzK1wiLCBcInNwZWNpYWxfdG9rZW5zXCI6IHsgXCI8fGVuZG9mdGV4dHw+XCI6IDUwMjU2IH0sIFwiYnBlX3JhbmtzXCI6IFwiISAwIElRPT0gSWc9PSBJdz09IEpBPT0gSlE9PSBKZz09IEp3PT0gS0E9PSBLUT09IEtnPT0gS3c9PSBMQT09IExRPT0gTGc9PSBMdz09IE1BPT0gTVE9PSBNZz09IE13PT0gTkE9PSBOUT09IE5nPT0gTnc9PSBPQT09IE9RPT0gT2c9PSBPdz09IFBBPT0gUFE9PSBQZz09IFB3PT0gUUE9PSBRUT09IFFnPT0gUXc9PSBSQT09IFJRPT0gUmc9PSBSdz09IFNBPT0gU1E9PSBTZz09IFN3PT0gVEE9PSBUUT09IFRnPT0gVHc9PSBVQT09IFVRPT0gVWc9PSBVdz09IFZBPT0gVlE9PSBWZz09IFZ3PT0gV0E9PSBXUT09IFdnPT0gV3c9PSBYQT09IFhRPT0gWGc9PSBYdz09IFlBPT0gWVE9PSBZZz09IFl3PT0gWkE9PSBaUT09IFpnPT0gWnc9PSBhQT09IGFRPT0gYWc9PSBhdz09IGJBPT0gYlE9PSBiZz09IGJ3PT0gY0E9PSBjUT09IGNnPT0gY3c9PSBkQT09IGRRPT0gZGc9PSBkdz09IGVBPT0gZVE9PSBlZz09IGV3PT0gZkE9PSBmUT09IGZnPT0gb1E9PSBvZz09IG93PT0gcEE9PSBwUT09IHBnPT0gcHc9PSBxQT09IHFRPT0gcWc9PSBxdz09IHJBPT0gcmc9PSBydz09IHNBPT0gc1E9PSBzZz09IHN3PT0gdEE9PSB0UT09IHRnPT0gdHc9PSB1QT09IHVRPT0gdWc9PSB1dz09IHZBPT0gdlE9PSB2Zz09IHZ3PT0gd0E9PSB3UT09IHdnPT0gd3c9PSB4QT09IHhRPT0geGc9PSB4dz09IHlBPT0geVE9PSB5Zz09IHl3PT0gekE9PSB6UT09IHpnPT0genc9PSAwQT09IDBRPT0gMGc9PSAwdz09IDFBPT0gMVE9PSAxZz09IDF3PT0gMkE9PSAyUT09IDJnPT0gMnc9PSAzQT09IDNRPT0gM2c9PSAzdz09IDRBPT0gNFE9PSA0Zz09IDR3PT0gNUE9PSA1UT09IDVnPT0gNXc9PSA2QT09IDZRPT0gNmc9PSA2dz09IDdBPT0gN1E9PSA3Zz09IDd3PT0gOEE9PSA4UT09IDhnPT0gOHc9PSA5QT09IDlRPT0gOWc9PSA5dz09ICtBPT0gK1E9PSArZz09ICt3PT0gL0E9PSAvUT09IC9nPT0gL3c9PSBBQT09IEFRPT0gQWc9PSBBdz09IEJBPT0gQlE9PSBCZz09IEJ3PT0gQ0E9PSBDUT09IENnPT0gQ3c9PSBEQT09IERRPT0gRGc9PSBEdz09IEVBPT0gRVE9PSBFZz09IEV3PT0gRkE9PSBGUT09IEZnPT0gRnc9PSBHQT09IEdRPT0gR2c9PSBHdz09IEhBPT0gSFE9PSBIZz09IEh3PT0gSUE9PSBmdz09IGdBPT0gZ1E9PSBnZz09IGd3PT0gaEE9PSBoUT09IGhnPT0gaHc9PSBpQT09IGlRPT0gaWc9PSBpdz09IGpBPT0galE9PSBqZz09IGp3PT0ga0E9PSBrUT09IGtnPT0ga3c9PSBsQT09IGxRPT0gbGc9PSBsdz09IG1BPT0gbVE9PSBtZz09IG13PT0gbkE9PSBuUT09IG5nPT0gbnc9PSBvQT09IHJRPT0gSUhRPSBJR0U9IGFHVT0gYVc0PSBjbVU9IGIyND0gSUhSb1pRPT0gWlhJPSBJSE09IFlYUT0gSUhjPSBJRzg9IFpXND0gSUdNPSBhWFE9IGFYTT0gWVc0PSBiM0k9IFpYTT0gSUdJPSBaV1E9IElHWT0gYVc1biBJSEE9IGIzVT0gSUdGdSBZV3c9IFlYST0gSUhSdiBJRzA9IElHOW0gSUdsdSBJR1E9IElHZz0gSUdGdVpBPT0gYVdNPSBZWE09IGJHVT0gSUhSbyBhVzl1IGIyMD0gYkd3PSBaVzUwIElHND0gSUd3PSBjM1E9IElISmwgZG1VPSBJR1U9IGNtOD0gYkhrPSBJR0psIElHYz0gSUZRPSBZM1E9IElGTT0gYVdRPSBiM1E9IElFaz0gZFhRPSBaWFE9IElFRT0gSUdseiBJRzl1IGFXMD0gWVcwPSBiM2M9IFlYaz0gWVdRPSBjMlU9IElIUm9ZWFE9IElFTT0gYVdjPSBJR1p2Y2c9PSBZV009IElIaz0gZG1WeSBkWEk9IElIVT0gYkdRPSBJSE4wIElFMD0gSjNNPSBJR2hsIElHbDAgWVhScGIyND0gYVhSbyBhWEk9IFkyVT0gSUhsdmRRPT0gYVd3PSBJRUk9IElIZG8gYjJ3PSBJRkE9IElIZHBkR2c9IElERT0gZEdWeSBZMmc9IElHRnogSUhkbCBJQ2c9IGJtUT0gYVd4cyBJRVE9IGFXWT0gSURJPSBZV2M9IFpYSnogYTJVPSBJQ0k9IElFZz0gWlcwPSBJR052Ymc9PSBJRmM9IElGST0gYUdWeSBJSGRoY3c9PSBJSEk9IGIyUT0gSUVZPSBkV3c9IFlYUmwgSUdGMCBjbWs9IGNIQT0gYjNKbCBJRlJvWlE9PSBJSE5sIGRYTT0gSUhCeWJ3PT0gSUdoaCBkVzA9IElHRnlaUT09IElHUmwgWVdsdSBZVzVrIElHOXkgYVdkbyBaWE4wIGFYTjAgWVdJPSBjbTl0IElFND0gZEdnPSBJR052YlE9PSBJRWM9IGRXND0gYjNBPSBNREE9IElFdz0gSUc1dmRBPT0gWlhOeiBJR1Y0IElIWT0gY21WeiBJRVU9IFpYYz0gYVhSNSBZVzUwIElHSjUgWld3PSBiM009IGIzSjAgYjJNPSBjWFU9IElHWnliMjA9IElHaGhkbVU9IElITjEgYVhabCBiM1ZzWkE9PSBJSE5vIElIUm9hWE09IGJuUT0gY21FPSBjR1U9IGFXZG9kQT09IFlYSjAgYldWdWRBPT0gSUdGcyBkWE4wIFpXNWsgTFMwPSBZV3hzIElFOD0gWVdOciBJR05vIElHeGwgYVdWeiBjbVZrIFlYSmsgNG9BPSBiM1YwIElFbz0gSUdGaSBaV0Z5IGFYWT0gWVd4c2VRPT0gYjNWeSBiM04wIFoyZz0gY0hRPSBJSEJzIFlYTjAgSUdOaGJnPT0gWVdzPSBiMjFsIGRXUT0gVkdobCBJR2hwY3c9PSBJR1J2IElHZHYgSUdoaGN3PT0gWjJVPSBKM1E9IElGVT0gY205MSBJSE5oIElHbz0gSUdKMWRBPT0gSUhkdmNnPT0gSUdGc2JBPT0gWldOMCBJR3M9IFlXMWwgSUhkcGJHdz0gYjJzPSBJSGRvWlE9PSBJSFJvWlhrPSBhV1JsIE1ERT0gWm1ZPSBhV05vIGNHdz0gZEdobGNnPT0gSUhSeSBMaTQ9IElHbHVkQT09IGFXVT0gZFhKbCBZV2RsIElHNWwgYVdGcyBZWEE9IGFXNWwgYVdObCBJRzFsIElHOTFkQT09IFlXNXogYjI1bCBiMjVuIGFXOXVjdz09IElIZG9idz09IElFcz0gSUhWdyBJSFJvWldseSBJR0ZrIElETT0gSUhWeiBZWFJsWkE9PSBiM1Z6IElHMXZjbVU9IGRXVT0gYjJjPSBJRk4wIGFXNWsgYVd0bCBJSE52IGFXMWwgY0dWeSBMaUk9IFltVnkgYVhvPSBZV04wIElHOXVaUT09IElITmhhV1E9IElDMD0gWVhKbCBJSGx2ZFhJPSBZMk09IElGUm8gSUdOcyBaWEE9IFlXdGwgWVdKc1pRPT0gYVhBPSBJR052Ym5RPSBJSGRvYVdObyBhV0U9IElHbHQgSUdGaWIzVjAgSUhkbGNtVT0gZG1WeWVRPT0gZFdJPSBJR2hoWkE9PSBJR1Z1IElHTnZiWEE9IExDST0gSUVsdSBJSFZ1IElHRm4gYVhKbCBZV05sIFlYVT0gWVhKNSBJSGR2ZFd4ayBZWE56IGNuaz0gSU9LQSBZMnc9IGIyOXIgWlhKbCBjMjg9IElGWT0gYVdkdSBhV0k9IElHOW1aZz09IElIUmwgZG1WdSBJRms9IGFXeGwgYjNObCBhWFJsIGIzSnQgSURJd01RPT0gSUhKbGN3PT0gSUcxaGJnPT0gSUhCbGNnPT0gSUc5MGFHVnkgYjNKayBkV3gwIElHSmxaVzQ9IElHeHBhMlU9IFlYTmwgWVc1alpRPT0gYTNNPSBZWGx6IGIzZHUgWlc1alpRPT0gSUdScGN3PT0gWTNScGIyND0gSUdGdWVRPT0gSUdGd2NBPT0gSUhOdyBhVzUwIGNtVnpjdz09IFlYUnBiMjV6IFlXbHMgSURRPSBhV05oYkE9PSBJSFJvWlcwPSBJR2hsY2c9PSBiM1Z1ZEE9PSBJRU5vIElHRnkgSUdsbSBJSFJvWlhKbCBJSEJsIElIbGxZWEk9IFlYWT0gSUcxNSBJSE52YldVPSBJSGRvWlc0PSBiM1ZuYUE9PSBZV05vIElIUm9ZVzQ9IGNuVT0gYjI1ayBhV05yIElHOTJaWEk9IGRtVnMgSUhGMSBDZ289IElITmogY21WaGRBPT0gY21WbCBJRWwwIGIzVnVaQT09IGNHOXlkQT09IElHRnNjMjg9IElIQmhjblE9IFpuUmxjZz09IElHdHUgSUdKbFl3PT0gSUhScGJXVT0gWlc1eiBJRFU9IGIzQnNaUT09IElIZG9ZWFE9IElHNXYgWkhVPSBiV1Z5IFlXNW4gSUc1bGR3PT0gTFMwdExRPT0gSUdkbGRBPT0gYjNKNSBhWFJwYjI0PSBhVzVuY3c9PSBJR3AxYzNRPSBJR2x1ZEc4PSBJREE9IFpXNTBjdz09IGIzWmwgZEdVPSBJSEJsYjNCc1pRPT0gSUhCeVpRPT0gSUdsMGN3PT0gSUhKbFl3PT0gSUhSMyBhV0Z1IGFYSnpkQT09IFlYSnIgYjNKeiBJSGR2Y21zPSBZV1JsIGIyST0gSUhOb1pRPT0gSUc5MWNnPT0gZDI0PSBhVzVyIGJHbGogSURFNSBJRWhsIGFYTm8gYm1SbGNnPT0gWVhWelpRPT0gSUdocGJRPT0gYjI1eiBJRnM9IElISnYgWm05eWJRPT0gYVd4ayBZWFJsY3c9PSBkbVZ5Y3c9PSBJRzl1YkhrPSBiMnhzIElITndaUT09IFkycz0gWld4cyBZVzF3IElHRmpZdz09IElHSnMgYVc5MWN3PT0gZFhKdSBablE9IGIyOWsgSUdodmR3PT0gYUdWayBJQ2M9IElHRm1kR1Z5IFlYYz0gSUdGMGRBPT0gYjNZPSBibVU9IElIQnNZWGs9IFpYSjIgYVdOMCBJR052ZFd4ayBhWFIwIElHRnQgSUdacGNuTjAgSURZPSBJR0ZqZEE9PSBJQ1E9IFpXTT0gYUdsdVp3PT0gZFdGcyBkV3hzIElHTnZiVzA9IGIzaz0gYjJ4ayBZMlZ6IFlYUmxjZz09IElHWmwgSUdKbGRBPT0gZDJVPSBhV1ptIElIUjNidz09IGIyTnIgSUdKaFkycz0gS1M0PSBhV1JsYm5RPSBJSFZ1WkdWeSBjbTkxWjJnPSBjMlZzIGVIUT0gSUcxaGVRPT0gY205MWJtUT0gSUhCdiBjR2c9IGFYTnogSUdSbGN3PT0gSUcxdmMzUT0gSUdScFpBPT0gSUdGa1pBPT0gYW1WamRBPT0gSUdsdVl3PT0gWm05eVpRPT0gSUhCdmJBPT0gYjI1MCBJR0ZuWVdsdSBZMngxWkE9PSBkR1Z5Ymc9PSBJR3R1YjNjPSBJRzVsWldRPSBJR052Ym5NPSBJR052IElDND0gSUhkaGJuUT0gSUhObFpRPT0gSURjPSBibWx1Wnc9PSBhV1YzIElGUm9hWE09IFkyVmsgSUdWMlpXND0gSUdsdVpBPT0gZEhrPSBJRmRsIFlYUm8gSUhSb1pYTmwgSUhCeSBJSFZ6WlE9PSBJR0psWTJGMWMyVT0gSUdacyBibWM9IElHNXZkdz09IElPS0Frdz09IFkyOXQgYVhObCBJRzFoYTJVPSBJSFJvWlc0PSBiM2RsY2c9PSBJR1YyWlhKNSBJRlZ1IElITmxZdz09IGIzTnogZFdObyBJR1Z0IElEMD0gSUZKbCBhV1ZrIGNtbDAgSUdsdWRnPT0gYkdWamRBPT0gSUhOMWNIQT0gWVhScGJtYz0gSUd4dmIycz0gYldGdSBjR1ZqZEE9PSBJRGc9IGNtOTMgSUdKMSBJSGRvWlhKbCBhV1pwWXc9PSBJSGxsWVhKeiBhV3g1IElHUnBabVk9IElITm9iM1ZzWkE9PSBJSEpsYlE9PSBWR2c9IFNXND0gSUdWMiBaR0Y1IEozSmwgY21saSBJSEpsYkE9PSBjM009IElHUmxaZz09IElISnBaMmgwIElITjUgS1N3PSBiR1Z6IE1EQXcgYUdWdSBJSFJvY205MVoyZz0gSUZSeSBYMTg9IElIZGhlUT09IElHUnZiZz09IElDdz0gSURFdyBZWE5sWkE9PSBJR0Z6Y3c9PSBkV0pzYVdNPSBJSEpsWnc9PSBJRUZ1WkE9PSBhWGc9IElIWmxjbms9IElHbHVZMngxWkE9PSBiM1JvWlhJPSBJR2x0Y0E9PSBiM1JvIElITjFZZz09IElPS0FsQT09IElHSmxhVzVuIFlYSm4gSUZkbyBQVDA9IGFXSnNaUT09IElHUnZaWE09IFlXNW5aUT09IGNtRnQgSURrPSBaWEowIGNITT0gYVhSbFpBPT0gWVhScGIyNWhiQT09IElHSnkgSUdSdmQyND0gSUcxaGJuaz0gWVd0cGJtYz0gSUdOaGJHdz0gZFhKcGJtYz0gYVhScFpYTT0gSUhCbyBhV056IFlXeHogSUdSbFl3PT0gWVhScGRtVT0gWlc1bGNnPT0gSUdKbFptOXlaUT09IGFXeHBkSGs9IElIZGxiR3c9IElHMTFZMmc9IFpYSnpiMjQ9IElIUm9iM05sIElITjFZMmc9IElHdGwgSUdWdVpBPT0gSUVKMWRBPT0gWVhOdmJnPT0gZEdsdVp3PT0gSUd4dmJtYz0gWldZPSBJSFJvYVc1ciBlWE09IElHSmxiQT09IElITnQgYVhSeiBZWGc9IElHOTNiZz09IElIQnliM1k9IElITmxkQT09IGFXWmwgYldWdWRITT0gWW14bCBkMkZ5WkE9PSBJSE5vYjNjPSBJSEJ5WlhNPSBiWE09IGIyMWxkQT09IElHOWkgSUhOaGVRPT0gSUZObyBkSE09IFpuVnMgSUdWbVpnPT0gSUdkMSBJR2x1YzNRPSBkVzVrIGNtVnUgWTJWemN3PT0gSUdWdWRBPT0gSUZsdmRRPT0gSUdkdmIyUT0gSUhOMFlYSjAgYVc1alpRPT0gSUcxaFpHVT0gZEhRPSBjM1JsYlE9PSBiMnh2Wnc9PSBkWEE9IElIdz0gZFcxdyBJR2hsYkE9PSBkbVZ5Ymc9PSBkV3hoY2c9PSBkV0ZzYkhrPSBJR0ZqIElHMXZiZz09IElHeGhjM1E9IElESXdNQT09IE1UQT0gSUhOMGRXUT0gZFhKbGN3PT0gSUVGeSBjMlZzWmc9PSBZWEp6IGJXVnlhV009IGRXVnogWTNrPSBJRzFwYmc9PSBiMnhzYjNjPSBJR052YkE9PSBhVzg9IElHMXZaQT09IElHTnZkVzUwIElFTnZiUT09IGFHVnogSUdacGJnPT0gWVdseSBhV1Z5IDRvQ1UgY21WaFpBPT0gWVc1ciBZWFJqYUE9PSBaWFpsY2c9PSBJSE4wY2c9PSBJSEJ2YVc1MCBiM0pyIElFNWxkdz09IElITjFjZz09IGIyOXMgWVd4ciBaVzFsYm5RPSBJSFZ6WldRPSBjbUZqZEE9PSBkMlZsYmc9PSBJSE5oYldVPSBiM1Z1IElFRnMgWTJrPSBJR1JwWm1abGNtVT0gSUhkb2FXeGwgTFMwdExTMHRMUzA9IElHZGhiV1U9IFkyVndkQT09IElITnBiUT09IExpNHUgSUdsdWRHVnkgWldzPSBJSEpsY0c5eWRBPT0gSUhCeWIyUjEgSUhOMGFXeHMgYkdWayBZV2c9IElHaGxjbVU9IElIZHZjbXhrIElIUm9iM1ZuYUE9PSBJRzUxYlE9PSBZWEpqYUE9PSBhVzFsY3c9PSBZV3hsIElGTmwgSUVsbSBMeTg9IElFeGwgSUhKbGRBPT0gSUhKbFpnPT0gSUhSeVlXNXogYm1WeSBkWFJwYjI0PSBkR1Z5Y3c9PSBJSFJoYTJVPSBJRU5zIElHTnZibVk9IGQyRjUgWVhabCBJR2R2YVc1biBJSE5zIGRXYz0gSUVGdFpYSnBZdz09IElITndaV009IElHaGhibVE9IElHSmxkSGRsWlc0PSBhWE4wY3c9PSBJRVJsIGIyOTAgU1hRPSBJR1ZoY2c9PSBJR0ZuWVdsdWMzUT0gSUdocFoyZz0gWjJGdSBZWG89IFlYUm9aWEk9IElHVjRjQT09IElHOXcgSUdsdWN3PT0gSUdkeSBJR2hsYkhBPSBJSEpsY1hVPSBaWFJ6IGFXNXogSUZCeWJ3PT0gYVhOdCBJR1p2ZFc1ayBiR0Z1WkE9PSBZWFJoIGRYTnogWVcxbGN3PT0gSUhCbGNuTnZiZz09IElHZHlaV0YwIGNIST0gSUhOcFoyND0gSUVGdSBKM1psIElITnZiV1YwIElITmxjZz09IGFHbHcgSUhKMWJnPT0gSURvPSBJSFJsY2c9PSBhWEpsWTNRPSBJR1p2Ykd4dmR3PT0gSUdSbGRBPT0gYVdObGN3PT0gSUdacGJtUT0gTVRJPSBJRzFsYlE9PSBJR055IFpYSmxaQT09IFpYZz0gSUdWNGRBPT0gZFhSbyBaVzV6WlE9PSBZMjg9IElIUmxZVzA9IGRtbHVadz09IGIzVnpaUT09IFlYTm8gWVhSMCBkbVZrIElITjVjM1JsYlE9PSBJRUZ6IFpHVnkgYVhabGN3PT0gYldsdSBJR3hsWVdRPSBJRUpzIFkyVnVkQT09IElHRnliM1Z1WkE9PSBJR2R2ZG1WeWJnPT0gSUdOMWNnPT0gZG1Wc2IzQT0gWVc1NSBJR052ZFhJPSBZV3gwYUE9PSBZV2RsY3c9PSBhWHBsIElHTmhjZz09IGIyUmwgSUd4aGR3PT0gSUhKbFlXUT0gSjIwPSBZMjl1IElISmxZV3c9IElITjFjSEJ2Y25RPSBJREV5IExpNHVMZz09IElISmxZV3hzZVE9PSBibVZ6Y3c9PSBJR1poWTNRPSBJR1JoZVE9PSBJR0p2ZEdnPSBlV2x1Wnc9PSBJSE5sY25ZPSBJRVp2Y2c9PSBJSFJvY21WbCBJSGR2YlE9PSBJRzFsWkE9PSBiMlI1IElGUm9aWGs9IE5UQT0gSUdWNGNHVnkgZEc5dSBJR1ZoWTJnPSBZV3RsY3c9PSBJR05vWlE9PSBJR055WlE9PSBhVzVsY3c9PSBJSEpsY0E9PSBNVGs9IFoyYz0gYVd4c2FXOXUgSUdkeWIzVT0gZFhSbCBhV3M9IFYyVT0gWjJWMCBSVkk9IElHMWxkQT09IElITmhlWE09IGIzZz0gSUdSMWNtbHVadz09IFpYSnUgYVhwbFpBPT0gWVhKbFpBPT0gSUdaaGJRPT0gYVdOaGJHeDUgSUdoaGNIQT0gSUVseiBJR05vWVhJPSBiV1ZrIGRtVnVkQT09IElHZGxibVZ5IGFXVnVkQT09IGNHeGwgYVdWMCBjbVZ1ZEE9PSBNVEU9IGRtVnogY0hScGIyND0gSURJdyBabTl5YldGMGFXOXUgSUdOdmNnPT0gSUc5bVptbGogYVdWc1pBPT0gSUhSdmJ3PT0gYVhOcGIyND0gSUdsdVpnPT0gSUZvPSBkR2hsIGIyRmsgSUhCMVlteHBZdz09IElIQnliMmM9IGNtbGogS2lvPSBJSGRoY2c9PSBJSEJ2ZDJWeSBkbWxsZHc9PSBJR1psZHc9PSBJR3h2WXc9PSBJR1JwWm1abGNtVnVkQT09IElITjBZWFJsIElHaGxZV1E9IEoyeHMgSUhCdmMzTT0gSUhOMFlYUT0gY21WMCBZVzUwY3c9PSBJSFpoYkE9PSBJR2x6Y3c9PSBJR05zWlE9PSBhWFpsY25NPSBZVzVqIElHVjRjR3c9IElHRnViM1JvWlhJPSBJRkU9IElHRjIgZEdocGJtYz0gYm1ObCBWMmc9IElHTm9hV3hrIElITnBibU5sIGFYSmxaQT09IGJHVnpjdz09IElHeHBabVU9IElHUmxkbVZzYjNBPSBhWFIwYkdVPSBJR1JsY0E9PSBJSEJoYzNNPSA0NE09IElIUjFjbTQ9IGIzSnUgVkdocGN3PT0gWW1WeWN3PT0gY205emN3PT0gSUVGayBJR1p5IElISmxjM0E9IElITmxZMjl1WkE9PSBiMmc9IElDOD0gSUdScGMyTT0gSUNZPSBJSE52YldWMGFHbHVadz09IElHTnZiWEJzWlE9PSBJR1ZrIElHWnBiQT09IElHMXZiblJvIFlXbz0gZFdNPSBJR2R2ZG1WeWJtMWxiblE9IElIZHBkR2h2ZFhRPSBJR3hsWnc9PSBJR1JwYzNRPSBJSEIxZEE9PSBJSEYxWlhOMCBZVzV1IElIQnliM1E9IE1qQT0gSUc1bGRtVnkgYVdWdVkyVT0gSUd4bGRtVnMgSUdGeWRBPT0gSUhSb2FXNW5jdz09IElHMXBaMmgwIElHVm1abVZqZEE9PSBJR052Ym5SeWJ3PT0gSUdObGJuUT0gSURFNCBJR0ZzYkc5MyBJR0psYkdsbCBZMmh2YjJ3PSBiM1IwIElHbHVZM0psIElHWmxaV3c9IElISmxjM1ZzZEE9PSBJR3h2ZEE9PSBJR1oxYmc9PSBiM1JsIElIUjUgWlhKbGMzUT0gSUdOdmJuUnBiZz09IElIVnphVzVuIElHSnBadz09IE1qQXggSUdGemF3PT0gSUdKbGMzUT0gSUNrPSBTVTQ9IElHOXdjQT09IE16QT0gSUc1MWJXSmxjZz09IGFXNWxjM009IFUzUT0gYkdWaGMyVT0gSUdOaCBJRzExYzNRPSBJR1JwY21WamRBPT0gSUdkcyBJRHc9IElHOXdaVzQ9IElIQnZjM1E9IElHTnZiV1U9IElITmxaVzA9IGIzSmthVzVuIElIZGxaV3M9IFlYUmxiSGs9IGFYUmhiQT09IElHVnMgY21sbGJtUT0gSUdaaGNnPT0gSUhSeVlRPT0gYVc1aGJBPT0gSUhCeWFRPT0gSUZWVCBJSEJzWVdObCBJR1p2Y20wPSBJSFJ2YkdRPSBJam89IFlXbHVjdz09IFlYUjFjbVU9IElGUnlkVzF3IElITjBZVzVrIElDTT0gYVdSbGNnPT0gSUVaeSBJRzVsZUhRPSBJSE52WXc9PSBJSEIxY2c9PSBJR3hsZEE9PSBJR3hwZEhSc1pRPT0gSUdoMWJRPT0gSUdrPSBjbTl1IE1UVT0gSURFMSBJR052YlcxMWJnPT0gSUcxaGNtcz0gSUZSb1pYSmwgSUhkeSBJRlJvWVhRPSBJR2x1Wm05eWJXRjBhVzl1IGQyRjVjdz09IElHSjFjdz09IFlYQncgSUdsdWRtVnpkQT09IGJXVT0gSUdoaGNtUT0gWVdsdVpXUT0gWldGayBJR2x0Y0c5eWRBPT0gSUdGd2NISnYgSUhSbGMzUT0gSUhSeWFRPT0gSUhKbGMzUT0gYjNObFpBPT0gSUdaMWJHdz0gSUdOaGNtVT0gSUZOdyBJR05oYzJVPSBUMDQ9IElITnIgSUd4bGMzTT0gSUNzPSBJSEJoY25ScFl3PT0gSUZCcyBZV0pzZVE9PSBkV05yIGFYTm9aV1E9IFkyaHUgWW1VPSBJR3hwYzNRPSBZWFJ2Y2c9PSBJSFJ2Y0E9PSBJR0ZrZGc9PSBJRUpsIGNuVmpkQT09IElHUmxiUT09IGNtRjBhVzl1IGJHbHVadz09IFozaz0gY21WbGJnPT0gWjJWeSBJR2h2YldVPSBJR3hsWm5RPSBJR0psZEhSbGNnPT0gSUdSaGRHRT0gSURFeCBJR0YwZEdGamF3PT0gSUhCeWIySnNaUT09IGJHbHVaUT09IFlYSmtjdz09IElHSmxhQT09IGNtRnMgSUVodmR3PT0gSUZOb1pRPT0gWVhKblpRPT0gSUMwdCBPaTh2IElHSnlidz09IElGQm8gWVhSeiBJR0oxYVd4ayBkM2M9IGFXUmxaQT09IFlXbHQgWVhObGN3PT0gWlc1amVRPT0gSUcxaGFXND0gYVc1bFpBPT0gSUdsdVkyeDFaR2x1Wnc9PSBJSHM9IElHZHZkQT09IElHbHVkR1Z5WlhOMCBJR3RsWlhBPSBJRmc9IElHVmhjdz09IFlXbHVhVzVuIElHTnNZWE56IDRvQ20gSUU1diBJSFpoY2c9PSBJSE50WVd4cyBZVzF3YkdVPSBRVlE9IElHbGtaUT09IElGTnYgSUhKbFkyVT0gSUhCdmJHbDAgSUcxdmRnPT0gSUhCc1lXND0gSUhCbGNtTmxiblE9IGFYWnBibWM9IElHTmhiWEE9IElIQmhlUT09IE1UUT0gYzJNPSBhWE5sWkE9PSBJSFZ1ZEE9PSBiMjVsZVE9PSBjR3h2ZVE9PSBQVDA5UFE9PSBJR1JwWkc0PSBJRWx1WkE9PSBaV3h6IFpYSjBZV2x1IElIQnZjdz09IFgxOWZYdz09IGFYWmxjZz09IElIQnliMk5sYzNNPSBJSEJ5YjJkeVlXMD0gYVdacFpXUT0gSUZKbGNBPT0gTVRZPSBkWEp2IGIyeHZaM2s9IFlYUjBaWEk9IGFXNWggSUc1aGJXVT0gSUVGc2JBPT0gSUdadmRYST0gSUhKbGRIVnliZz09IGRtbHZkWE09IFluTT0gSUdOaGJHeGxaQT09IElHMXZkbVU9IElGTmogYVhKayBJR2R5YjNWdyBJR0p5WlE9PSBJRzFsYmc9PSBJR05oY0E9PSBkR1Z1IFpXVT0gSUdSeWFRPT0gYkdWbiBhR1Z5WlE9PSBkWFJvYjNJPSBJSEJoZEE9PSBJR04xY25KbGJuUT0gYVdSbGN3PT0gSUhCdmNBPT0gZEc4PSBaVzUwYVc5dSBJR0ZzZDJGNWN3PT0gSUcxcGJBPT0gSUhkdmJXVnUgSURFMiBJRzlzWkE9PSBhWFpsYmc9PSBjbUZ3YUE9PSBJRTl5IGNtOXkgWlc1MGJIaz0gSUc1bFlYST0gSUVWNCBjbVZoYlE9PSBjMmc9IElERTAgSUdaeVpXVT0gYVhOemFXOXUgYzNSaGJtUT0gSUVOdmJnPT0gWVd4cGRIaz0gZFhObFpBPT0gTVRNPSBJR1JsYzJsbmJnPT0gSUdOb1lXNW5aUT09IElHTm9ZVzVuIElHSnYgSUhacGN3PT0gWlcxaVpYST0gSUdKdmIycz0gY21WaFpIaz0gSUd0cGJHdz0gTWpVPSBjSEJsWkE9PSBJR0YzWVhrPSBJR0ZpYkdVPSBJR052ZFc1MGNuaz0gSUdOdmJuTjAgWVhKdSBJRzl5WkdWeSBRVkk9IGFXOXkgYVhWdCBiM0owYUE9PSBNVGc9IFlXbHNZV0pzWlE9PSBJSE4zIElHMXBiR3hwYjI0PSBJREV6IFlYUnBZdz09IGRHVmsgSUVkdiBJRzl3WlhJPSBaVzVuIElIUm9hVzVuIFlXcHZjZz09IFkyOXViMjA9IElFTnZiVzA9IElIZG9lUT09IGRYSmxaQT09IGRYSmhiQT09IElITmphRzl2YkE9PSBZbms9IElFMWhjZz09IElHRm1aZz09IElHUmhlWE09IElHRnViZz09IGRYTm8gWVc1bCBTV1k9IFpXYz0gSUhCeWIyWT0gSUdobFlXeDBhQT09IGIzVjBhQT09IFFuVjAgYVc5dVlXdz0gTGl3PSBJSE52YkE9PSBJR0ZzY21WaFpIaz0gSURNdyBJR05vWVhKaFkzUT0gU0dVPSBJR1p5YVdWdVpBPT0gUlZNPSBhV0Z1Y3c9PSBhV05zWlE9PSBKMlE9IElFOXUgSUd4bFlYTjAgSUhCeWIyMD0gSUdSeSBJR2hwYzNRPSBhWFJvWlhJPSBJR1Z6ZEE9PSBhWEYxIE1UYz0gYzI5dSBJSFJsYkd3PSBJSFJoYkdzPSBiMmh1IGIybHVkQT09IGJHVmpkR2x2Ymc9PSBRVTQ9IElIVnVkR2xzIFlYVm5hQT09IElHeGhkR1Z5IElIWmwgSUhacFpYYz0gWlc1a2FXNW4gYVhabFpBPT0gSUhkdmNtUT0gZDJGeVpRPT0gSUdOdmMzUT0gSUdWdWIzVm5hQT09IElHZHBkbVU9IElGVnVhWFJsWkE9PSBJSFJsWTJodSBZWEpsYm5RPSBUMUk9IElIQmhjZz09IElFUnkgSURJd01UWT0gY21semRBPT0gWlhKcGJtYz0gSU1JPSBJR3hoY21kbCBjMmxrWlE9PSBZV041IFkyTmxjM009IElIZHBiZz09IElHbHRjRzl5ZEdGdWRBPT0gSURFNU9RPT0gSUdSdlpYTnUgSURFMyBJR0oxYzJsdVpYTnogSUdOc1pXRnkgSUhKbGMyVT0gSWl3PSBkWEo1IElHVnhkUT09IFlYTjBaWEk9IFlXeG0gSUVGdFpYSnBZMkZ1IGJtVmpkQT09IElHVjRjR1ZqZEE9PSBhWFpsY25OcGRIaz0gSUc5all3PT0gSUVacyBJR3RwYm1RPSBJRzFsWVc0PSBJSEJoYzNRPSBJR1JsZGc9PSBJR0poY3c9PSBiR1YwIGNtRm1kQT09IElHOXlaMkZ1IElHUmxiQT09IElIQmxjbVp2Y20wPSBJSE4wYjNKNSBJSE5sWVhOdmJnPT0gSUVOdmJBPT0gSUdOc1lXbHQgSUdOaGJXVT0gSUhkcGRHaHBiZz09IElHeHBibVU9IElIQnliMnBsWTNRPSBJRUYwIElHTnZiblJ5YjJ3PSBaVzVrWldRPSBJRk41IElHRnBjZz09IGFYcGhkR2x2Ymc9PSBJQ289IGJHVjUgSUcxdmJtVjUgYVdSayBXVzkxIFptOXkgSUdaaGJXbHNlUT09IElHMWhhMmx1Wnc9PSBJR0pwZEE9PSBJSEJ2YkdsalpRPT0gSUdoaGNIQmxiZz09IElIWmxjbk09IGIyNTUgZFdabSBJRmRvWlc0PSBJSE5wZEE9PSBhV1JsYnc9PSBiR1k9IGFYTnZiZz09IElITjFjbVU9IFoybHUgSUdGd2NHVmhjZz09IElHeHBaMmgwIElHVnogYjJZPSBJSGRoZEdWeSBJSFJwYldWeiBibTkwIElHZHliM2M9IElHTnZiWEJoYm5rPSBJRlJsIGIzZHogSUcxaGNnPT0gYjNWeVkyVT0gYVc5cyBZWEp0IFluST0gSUdWNFlXMXdiR1U9IElHTnZibU09IElHWnZjbVU9IElGUnYgY0hKdiBSVTQ9IGNtbGxjdz09IElESTEgSUVOaGJnPT0gYm1WNSBJR0ZqZEhWaGJHeDUgSUdWMlpYST0gZFhKcGRIaz0gWVd0bGJnPT0gWVhCeiBJSFJoZUE9PSBJRzFoYW05eSBZVzFoIElHOW1kR1Z1IFpYSmhiQT09IElHaDFiV0Z1IElHcHZZZz09IGFYTjBaWEk9IElHRjJZV2xzWVdKc1pRPT0gYjJOeSBaVzV1IFlXbGsgYVhacFpBPT0gSUhKbFkyOXlaQT09IFB5ST0gSUhOcGJtYz0gSUVGdCBhV1JsYm1ObCBJRzVsZDNNPSBjM1JsY2c9PSBJR1ZqYjI1dmJRPT0gSUdadmJHeHZkMmx1Wnc9PSBJRUp5IGFYTnBibWM9IElHaHZkWEk9IGJXOXpkQT09IGRXMWxiblE9IElITmxlQT09IElHUmxjMk09IElHSmxZMjl0WlE9PSBJRVZrIElIUnZiMnM9IElHaGhkbWx1Wnc9PSBJSEJ5YjJSMVkzUT0gWVhWc2RBPT0gUVhNPSBZWEpwYm1jPSBJRzFsWVc1eiBJR2h2Y0E9PSBkVzVsIElHTm9idz09IElHTmxjblJoYVc0PSBJRzV2Ymc9PSBJR1JsWVd3PSBNalE9IGJHVnRaVzUwIGIyTnAgWlc1bCBJSE5wWkdVPSBJRkJ5IElFMWhlUT09IElISmxZWE52Ymc9PSBkV1ZrIFkyaGxaQT09IGRXeGhkR2x2Ymc9PSBJR1ZzWldOMCBJRzltWm1samFXRnMgSUhCdmMzTnBZbXhsIElHaHZiR1E9IFlXNWtjdz09IGIzUnogSUdOcGRIaz0gYjNKcFpYTT0gSUhObGRtVnkgSUdOb2FXeGtjbVZ1IElHOXVZMlU9IElHRmpkR2wyIGJHVnkgSUc1cFoyaDAgYVhScGIyNXogSUVwdmFHND0gWVhCbCBjR3hoZVE9PSBJR1J2Ym1VPSBJR3hwYlE9PSBJSGR2Y210cGJtYz0gSUZCeVpYTT0gYjNKc1pBPT0gWldJPSBJRU52IElHSnZaSGs9IFlXbHNjdz09IGRYUmxjdz09IElFMXkgSUhkb1pYUm9aWEk9IElHRjFkR2h2Y2c9PSBjbTl3IElIQnliM0JsY2c9PSBJSE5sWlc0PSBLVHM9IElHWmhZdz09IElGTjEgSUdOdmJtUT0gYVhScGJtYz0gSUdOdmRYSnpaUT09IElIMD0gTFMwdExTMHRMUzB0TFMwdExTMHRMUT09IFlXbG5iZz09IElHVjJaVzUwIElHVnVadz09IElIQnZkQT09IElHbHVkR1Z5Ymc9PSBhV0Z0IElITm9iM0owIFpXMXdkQT09IDQ0ST0gSUVkdlpBPT0gYVd4aGNnPT0gT0RBPSBJRzl5YVdjPSBTVk09IGIzVnliZz09IFlXSnBiR2wwZVE9PSBhWFJwZG1VPSBJR1JoYlE9PSBJREV3TUE9PSBJSEJ5WlhOeiBJR1J2YVc1biBJSEJ5YjNSbFkzUT0gY21sdVp3PT0gSUhSb2IzVm5hSFE9IElIRjFaWE4wYVc5dSBjbVYzIElGZGhjZz09IElITmxkbVZ5WVd3PSBJRk4wWVhSbCBJR2RwZG1WdSBJR1oxYm1RPSBJRlIzIElIZGxiblE9IFlXNWpaWE09IGQyOXlhdz09IGNHOXkgYlhrPSBOREE9IElHRnladz09IFlYSjBiV1Z1ZEE9PSBkWE4wYjIwPSBJSEJ2YkdsaiBJRzFsWlhRPSBJR055WldGMCBNakk9IElGTjBZWFJsY3c9PSBJR2RoYldWeiBjbUYzIGRYUjFjbVU9IElIVnVaR1Z5YzNSaGJtUT0gZFhKeiBJRTlpIGJHbHphQT09IGMzaz0gSUcxaGEyVnogSUhkdmJnPT0gWVdkdmJnPT0gSUdoMGRBPT0gSUd4dmRtVT0gWlc1MGFXRnMgSUdOdmJYQnNaWFJsIGNHRnkgSUVsdCBRVXc9IElHRmpZMjkxYm5RPSB3cUE9IGIzSmxaQT09IGRtVnlkQT09IElHbGtaVzUwIElESXdNVFU9IElHOTBhR1Z5Y3c9PSBJRTFwYmc9PSBhV0psY2c9PSBkbVZ5WVdkbCBWR2hsY21VPSBhWFJwYjI1aGJBPT0gWkdRPSBJSEJ5YjJJPSBJSGx2ZFc1biBJR0ZzYjI1biBJR0ZqWTI5eVpHbHVadz09IElIbGxkQT09IElHMWxiV0psY25NPSBJRmRvWVhRPSBiMmxrIElFMWhiZz09IFFXNWsgSUdGdGIyNW4gWVdrPSBJR1Z0Y0d4dmVRPT0gSUZKbGN3PT0gSUQ0PSBJR2x1ZG05cyBJR3h2ZHc9PSBZV1k9IElFTmhjZz09IElHaHBadz09IElFOXVaUT09IElGTmxZdz09IGFXNWhkR2x2Ymc9PSBJR3hwYTJWc2VRPT0gSUdGdWRBPT0gWVdkbFpBPT0gSUZKMWMzTT0gSUdKbGJnPT0gSUhKbGJHVT0gUm05eSBZbUZqYXc9PSBJRTV2ZEE9PSBJSEJ5WlhOcFpHVnVkQT09IFltRnNiQT09IElHRmpZMlZ6Y3c9PSBhWFpwWkhWaGJBPT0gSUVSbGJRPT0gSUVWMWNtOD0gTmpBPSBJR3R1YjNkdSBhWEpzIElFZHkgSUdWaGNteDUgZFhObCBhV1YwZVE9PSA0b0NUIElHWnBaMmgwIElITmxiblE9IElIUnZaR0Y1IElHMWhjbXRsZEE9PSBJaTQ9IElHSmhjMlZrIElITjBjbTl1Wnc9PSBkWEowYUdWeSBJR1JsWWc9PSBiV0psY2c9PSBJSEJ5YjJKc1pXMD0gSUdSbFlYUm8gSUhOdlkybGhiQT09IGFXMWhkR1U9IFFWTT0gYjNKMGRXND0gSUdOaGJYQmhhV2R1IFpYSjUgUTJnPSBJR1Y1IGFXRnNiSGs9IElHMTFjdz09IGQyZz0gY0c5eiBJR1Z5IElITmhaZz09IElHMXZiblJvY3c9PSBhWEp2Ymc9PSBJSFpwYjJ3PSBJR1pwZG1VPSBJSE4wY21VPSBJSEJzWVhsbGNuTT0gYVc1aiBZV3hrIGVXVmhjZz09IFlYVnUgSUhOMVkyTmxjM009IElIQnlaWE5sYm5RPSBaWEpsYm1ObCBJREl3TVRRPSBJSE4xWjJjPSBJSEJoY25ScFkzVnNZWEk9IElIUnllUT09IElITjFaMmRsYzNRPSBJRU5vY21semRBPT0gYjI1bGN3PT0gSUhCeWFYWT0gTWpNPSBJR055YVhRPSBJR3hoYm1RPSBJR3h2WTJGcyBhV1o1IE1qaz0gSUdGMWRBPT0gUlVRPSBJRWQxIElHMTFiSFE9IElIQnZiR2wwYVdOaGJBPT0gSUdGemEyVmsgSUdadmNtMWxjZz09IGFYUjBaWEk9IGNtbHdkQT09IElHTnNiM05sIElIQnlZV04wIElGbHZjbXM9IElHZGxkSFJwYm1jPSBJR0ZqY205emN3PT0gSUdOdmJXST0gSUdKbGJHbGxkbVU9IElIbz0gSUhSdloyVjAgSUhSdloyVjBhR1Z5IElFTmxiblE9IGFYSmogSUdsdVpHbDJhV1IxWVd3PSBJRTFqIE1qYz0gYVhOciBJRVZ1Wnc9PSBJR1poWTJVPSBJREkwIElIWmhiSFZsIElHRnlaV0U9IFpYWT0gSUhkeWFYUT0gSUZCeVpYTnBaR1Z1ZEE9PSBJSFp2ZEE9PSBJR3RsZVE9PSBJRzF2YlE9PSBjSFYwIElHRnVlWFJvYVc1biBJR1Y0Y0dWeWFXVnVZMlU9IFlYUjBiR1U9IElHMXBibVE9IFlXWm0gYjIxdCBJR1oxZEhWeVpRPT0gWjJWayBJR04xZEE9PSBJSFJ2ZEE9PSBhWFJqYUE9PSBJSFpwWkdWdiBJR2x1ZG1WemRHbG4gSUc1bGRBPT0gSUUxNSBjbWxqZEE9PSBhV1Z1IExpaz0gSUdsdGNISnYgZEdodmRXZG8gZDJGeVpITT0gSUdOdmJtNWxZM1E9IElFMWxaQT09IGMyVnNkbVZ6IFpXNXphWFpsIGJXST0gYjJKbGNnPT0gWVhSdmNuTT0gUVc0PSBJRFV3IElISmxaSFU9IGNtVnpaVzUwIElHRmliM1psIElHWnlaUT09IElFVjFjbTl3WlE9PSBjM2M9IElHRnRiM1Z1ZEE9PSBJRUZ3Y0E9PSBJR1ZwZEdobGNnPT0gSUcxcGJHbDAgSUdGdVlXdz0gSUdaaGFXdz0gSUVWdSBZV3hsY3c9PSBJSE53WldOcFlXdz0gSUdKc1lXTnIgU1ZRPSBZMmhsY2c9PSBJR3h2YjJ0cGJtYz0gSUdacGNtVT0gZVc0PSBJR0ZzYlc5emRBPT0gYjI5dSBJSE4wZFdSNSBJRzFwYzNNPSBZMmhsY3c9PSBjbTkzYmc9PSBJSFJ5WlE9PSBJR052YlcxMWJtbDBlUT09IElHMWxaR2xoIElHWnZiMlE9IElHTnZiV1Z6IElGVnVhWFpsY25OcGRIaz0gSUhOcGJtZHNaUT09IFYyaGhkQT09IGRXeDUgSUdoaGJHWT0gWVdkMVpRPT0gYUc5ayBJRkpsY0hWaWJHbGogSUhOMFlYSjBaV1E9IElIRjFhV05yIGIzUnYgWW05dmF3PT0gSUdsemMzVmwgYVhSdmNnPT0gSUdWc2MyVT0gSUdOdmJuTnBaR1Z5IE1qWT0gY205a2RRPT0gSUhSaGEyVnUgTWpnPSBPVGs9IElGZHBkR2c9IElIUnlkV1U9IElIZGggSUhSeVlXUT0gSUdGbmJ3PT0gSUcxbGMzTT0gYVdWbSBJR0ZrWkdWayBiMnRsIElHSmhaQT09IElHWmhkZz09IE16TT0gSUhOcGJXbHNZWEk9IFlYTnIgSUVSdmJnPT0gSUdOb1lYSmhZM1JsY2c9PSBiM0owY3c9PSBJRWh2ZFhObCBJSEpsY0c5eWRHVmsgSUhSNWNHVT0gZG1GcyBhVzlrIElFaHZkMlYyWlhJPSBJSFJoY21jPSBJR1Z1ZEdseVpRPT0gY0hCcGJtYz0gSUdocGMzUnZjbms9IElHeHBkbVU9IFptWnBZdz09IExpNHVMaTR1TGk0PSBaV1JsY21GcyBJSFJ5ZVdsdVp3PT0gSUdScGMyTjFjM009IElFaGhjZz09IFlXTmxjdz09IGJHbHphR1ZrIElITmxiR1k9IGIzTncgY21WemRBPT0gSUhKdmIyMD0gWld4MCBJR1poYkd3PSBiMngxZEdsdmJnPT0gSUdWMCBJSGc9IElHbHpiZz09IElHbGtaV0U9IFltOD0gSUhOdmRXNWsgSUVSbGNBPT0gSUhOdmJXVnZibVU9IFkybGhiR3g1IGRXeHNlUT09IElHWnZZdz09IElHOWlhbVZqZEE9PSBhV1owIFlYQmxjZz09IElIQnNZWGxsY2c9PSBJSEpoZEdobGNnPT0gSUhObGNuWnBZMlU9IFlYTm9hVzVuIElFUnYgSUZCaGNuUT0gY25WbiBiVzl1IGNHeDUgSUcxdmNnPT0gSUc1dmRHaHBibWM9IElIQnliM1pwWkdVPSBTVU09IGRXNW4gSUhCaGNuUjUgSUdWNGFYTjAgSUcxaFp3PT0gTnpBPSBJSEoxYkE9PSBJR2h2ZFhObCBJR0psYUdsdVpBPT0gSUdodmQyVjJaWEk9IElGZHZjbXhrIElITjFiUT09IElHRndjR3hwWXc9PSBJRHM9IElHWjFibU4wYVc5dSBaM0k9IElGQnZiQT09IElHWnliMjUwIE1qQXcgSUhObGNtbGxjdz09IElIUmxiUT09IElIUjVjQT09IGFXeHNjdz09IElHOXdkQT09IElIQnZhVzUwY3c9PSBJR0psYkc5MyBhWFIwWldRPSBJSE53WldOcFptbGogSURJd01UYz0gZFcxaSBJSEpoIElIQnlaWFpwYjNWeiBJSEJ5WlhRPSBjbVZ0WlE9PSBJR04xYzNSdmJRPT0gSUdOdmRYSjAgSUUxbCBJSEpsY0d3PSBJSGRvYjJ4bCBaMjg9IFkyVnkgSUhSeVpXRjAgSUVGamRBPT0gSUhCeWIySmhZbXg1IElHeGxZWEp1IFpXNWtaWEk9IElFRnpjdz09IElIWmxjbk5wYjI0PSBibTkzIElHTm9aV05yIElFTmhiQT09IFVrVT0gYldsdWFYTjAgVDI0PSBiM1Z5WTJWeiBJR0psYm1WbSBJR1J2WXc9PSBJR1JsZEdWeSBJR1Z1WXc9PSBJSE4xY0dWeSBJR0ZrWkhKbGMzTT0gSUhacFkzUT0gSURJd01UTT0gSUcxbFlYTT0gZEhJPSBJR1pwWld4ayBWMmhsYmc9PSBJSE5wWjI1cFptbGogZFdkbCBJR1psWVhRPSBJR052YlcxdmJnPT0gYkc5aFpBPT0gSUdKbFoybHUgSUdKeWFXNW4gSUdGamRHbHZiZz09IFpYSnRZVzQ9IElHUmxjMk55YVdJPSBJR2x1WkhWemRBPT0gSUhkaGJuUmxaQT09IGNtbGxaQT09IGJXbHVadz09IElHRjBkR1Z0Y0hRPSBORFU9IFptVnkgSUdSMVpRPT0gY21WemMybHZiZz09IEl5TT0gSUhOb1lXeHMgSUhOcGVBPT0gYjI4PSBJSE4wWlhBPSBJSEIxWWc9PSBJR2hwYlhObGJHWT0gSURJeiBJR052Y0E9PSBJR1JsYzNRPSBJSE4wYjNBPSBRVU09IGFXSnBiR2wwZVE9PSBJR3hoWWc9PSBhV04xYkhRPSBJR2h2ZFhKeiBJR055WldGMFpRPT0gSUdaMWNuUm9aWEk9IElFRnRaWEpwWTJFPSBJRU5wZEhrPSBJR1J2ZFE9PSBhR1ZoWkE9PSBVMVE9IElFNXZjblJvIFkybHVadz09IElHNWhkR2x2Ym1GcyBkV3hsIElFbHVjM1E9IElIUmhhMmx1Wnc9PSBJRkYxIGFYSjAgSUhKbFpBPT0gSUhKbGMyVmhjbU5vIGRtbHliMjQ9IElFZGwgSUdKeVpXRnIgWVc1aCBJSE53WVdObCBZWFJsY21saGJBPT0gSUhKbFkyVnVkQT09IElFRmkgSUdkbGJtVnlZV3c9IElHaHBkQT09IElIQmxjbWx2WkE9PSBJR1YyWlhKNWRHaHBibWM9IGFYWmxiSGs9IElIQm9lWE09IElITmhlV2x1Wnc9PSBZVzVyY3c9PSBJR052ZFE9PSBJR04xYkhRPSBZV05sWkE9PSBaV0ZzIGRXRjBhVzl1IElHTnZkVzQ9IGJIVT0gSUdsdVkyeDFaR1U9IElIQnZjMmwwYVc5dSBJRUZtZEdWeSBJRU5oYm1GayBJRVZ0IElHbHRiUT09IElGSmxaQT09IElIQnBZMnM9IElHTnZiWEJzIElHMWhkSFJsY2c9PSBjbVZuIFpYaDAgWVc1bmRRPT0gYVhOaiBiMnhsIFlYVjAgSUdOdmJYQmxkQT09IFpXVmsgWm1WamRBPT0gSURJeCBJRk5sYmc9PSBJRlJvWlhObCBZWE5wYm1jPSBJR05oYm01dmRBPT0gSUdsdWFYUT0gSUhKbGJHRjBhVzl1Y3c9PSBZV05vWldRPSBJR0poY2c9PSBJRFF3IElGUkkgSURJd01UST0gSUhadmJBPT0gSUdkeWIzVnVaQT09IElITmxZM1Z5YVhSNSBJSFZ3WkE9PSBhV3gwIE16VT0gSUdOdmJtTmxjbTQ9IElFcDFjM1E9IElIZG9hWFJsIElITmxaVzF6IElFaGxjZz09IGNHVmphV0ZzYkhrPSBhV1Z1ZEhNPSBJR0Z1Ym05MWJnPT0gSUdacFp3PT0gYVdkb2RITT0gSUhOMGNtaz0gYkdsclpRPT0gYVdSeiBJSE4xY3c9PSBJSGRoZEdObyBJT0k9IElIZHBibVE9IElFTnZiblE9IElHbDBjMlZzWmc9PSBJRzFoYzNNPSBRV3c9IGVXeGwgYVhGMVpRPT0gSUU1aGRHbHZibUZzIElHRmljdz09IElIQmhZMnM9IElHOTFkSE5wWkdVPSBJR0Z1YVcwPSBJSEJoYVc0PSBaWFJsY2c9PSBJRzFoYm1GbiBaSFZqZEE9PSBiMmR1IElGMD0gSUZObGNIUT0gYzJWaiBiMlptIElFcGhiZz09IElHWnZiM1E9IFlXUmxjdz09IElIUm9hWEprIElHMXZkQT09IElHVjJhV1JsYm1ObCBhVzUwYjI0PSBJSFJvY21WaGRBPT0gWVhCMCBjR3hsY3c9PSBZMnhsIElHeHYgSUdSbFkydz0gSUdsMFpXMD0gYldWa2FRPT0gSUhKbGNISmxjMlZ1ZEE9PSBiMjFpIFlXMWxjZz09IElITnBaMjVwWm1sallXNTAgYjJkeVlYQm8gYzNVPSBJR05oYkE9PSBhWEpsY3c9PSBNREF3TUE9PSBTVVE9IFFVMD0gSUhOcGJYQnNlUT09IElHeHZibWRsY2c9PSBJR1pwYkdVPSBUMVE9IFkyaGwgVTI4PSBZWFJsWnc9PSBiM0puIElFaHBjdz09IElHVnVaWEk9IElHUnZiUT09IElIVndiMjQ9IGFXeHAgSWpvaSBJSFJvWlcxelpXeDJaWE09IElHTnZiV2x1Wnc9PSBJSEYxYVhSbCBJR1JwWm1acFkzVnNkQT09IElFSmhjZz09IGFXeHBkR2xsY3c9PSBjbVZzIFpXNWtjdz09IFkybGhiQT09IE5qUT0gSUhkdmJXRnUgY21GdyBlWEk9IElHNWxZMlZ6Y3c9PSBhWEJ6IElIUmxlSFE9IElISmxjWFZwY21VPSBJRzFwYkdsMFlYSjUgSUhKbGRtbGxkdz09IElISmxjM0J2Ym5NPSBOelU9IElITjFZbXBsWTNRPSBJR2x1YzNSbFlXUT0gSUdsemMzVmxjdz09IElHZGxiZz09IElpd2kgSUcxcGJuVjBaWE09IElIZGxZWEE9IGNtRjUgWVcxbFpBPT0gZEdsdFpRPT0gWW13PSBTRzkzIElHTnZaR1U9IElGTnQgSUdocFoyaGxjZz09IElGTjBaUT09IGNtbHogSUhCaFoyVT0gSUhOMGRXUmxiblJ6IElFbHVkR1Z5Ymc9PSBJRzFsZEdodlpBPT0gSUVGMVp3PT0gSUZCbGNnPT0gSUVGbiBJSEJ2YkdsamVRPT0gSUZOMyBJR1Y0WldNPSBJR0ZqWTJWd2RBPT0gZFcxbCBjbWxpZFhRPSBJSGR2Y21SeiBJR1pwYm1GcyBJR05vWVc1blpYTT0gSUVSbGJXOWpjZz09IElHWnlhV1Z1WkhNPSBJSEpsYzNCbFkzUT0gSUdWdyBJR052YlhCaGJnPT0gYVhacGJBPT0gSUdSaGJXRm5aUT09IEtpb3FLZz09IGIyZHNaUT09IGRtbHliMjV0Wlc1MCBJRzVsWnc9PSBaVzUwWVd3PSBJR0Z3IElIUnZkR0ZzIGFYWmhiQT09IElTST0gYkdsdCBJRzVsWldSeiBJR0ZuY21VPSBJR1JsZG1Wc2IzQnRaVzUwIElHRm5aUT09IGFYQnNaUT09IE1qRT0gSUhKbGMzVnNkSE09IElFRm0gVTJnPSBJR2QxYmc9PSBJRTlpWVcxaCBjbTlzYkE9PSBJRUE9IElISnBaMmgwY3c9PSBJRUp5YVhRPSBJSEoxYm01cGJtYz0gSUhkaGMyND0gSUhCdmNuUT0gSUhKaGRHVT0gSUhCeVpYUjBlUT09IElIUmhjbWRsZEE9PSBJSE5oZHc9PSBJR05wY21NPSBJSGR2Y210eiBhV055Ync9PSBZV3gwIGIzWmxjZz09IGQzZDMgVkdoaGRBPT0gYkdsbGNnPT0gSUdWMlpYSjViMjVsIGRXUmwgSUhCcFpRPT0gYVdSa2JHVT0gY21GbGJBPT0gSUhKaFpBPT0gSUdKc2IyTnIgSUhkaGJHcz0gVkc4PSA0NEU9IGJtVnogSUVGMWMzUT0gWVhWcyBjbTkwWlE9PSBJRk52ZFhSbyBaWE56YVc5dSBiM0JvIElITm9iM2R6IElITnBkR1U9IElHcHYgSUhKcGMycz0gWTJ4MWN3PT0gYkhRPSBJR2x1YWc9PSBhV1JwYm1jPSBJRk53WlE9PSBJR05vWVd4cyBhWEp0IElESXkgYVhSMGFXNW4gYzNSeSBJR2g1IFRFVT0gYTJWNSBJR0psWjJGdSBZWFIxY2c9PSBZWE5vYVc1bmRHOXUgYkdGdCBJRVJoZGc9PSBZbWwwIElITnBlbVU9IElGQmhjZz09IE16Zz0gYjNWeWJtRnMgWm1GalpRPT0gSUdSbFkybHphVzl1IElHeGhjbWM9IElHcDFaQT09IGNtVmpkQT09IElHTnZiblJwYm5WbCBJRTlqZEE9PSBiM1psY21WayBJRWx1ZEE9PSBQVDA5UFQwOVBUMD0gSUhCaGNtVnVkQT09IElGZHBiR3c9IElHVmhjM2s9IElHUnlkV2M9IFlXNW5aWEk9IElITmxibk5sIElHUnAgYVdSaGVRPT0gSUdWdVpYSm5lUT09IGFYTjBhV009IElHRnpjMjlqYVE9PSBZWEowWlhJPSBiMkpoYkE9PSBaV3R6IElFVnMgZFhKamFBPT0gSUdkcGNtdz0gYjJVPSBhWFJzWlE9PSBJREk0IElFTm9aUT09IElISmxjWFZsYzNRPSBJSE52YjI0PSBJR2h2YzNRPSBhM2s9IElITjBZWFJsY3c9PSBiMjFsY3c9PSBJRzFoZEdWeWFXRnMgYkdWNCBJRzF2YldWdWRBPT0gSUdGdWMzYz0gYjI1elpRPT0gSUdWemNHVmphV0ZzYkhrPSBJRzV2Y20wPSBJSE5sY25acFkyVnogY0dsMFpRPT0gY21GdSBJSEp2YkdVPSBORFE9IEtUbz0gSUdOeVpXUT0gUTJ3PSBYMTlmWDE5ZlgxOD0gSUcxaGRBPT0gSUd4dlp3PT0gSUVOc2FXNTBiMjQ9IFQxVT0gSUc5bVptbGpaUT09IElESTIgSUdOb1lYSm4gSUhSeVlXTnIgYldFPSBJR2hsWVhKMCBJR0poYkd3PSBJSEJsY25OdmJtRnMgSUdKMWFXeGthVzVuIGJtRT0gYzJWMCBZbTlrZVE9PSBJRUpzWVdOciBJR2x1WTNKbFlYTmwgYVhSMFpXND0gSUc1bFpXUmxaQT09IE16WT0gTXpJPSBQU0k9IElHeHZjM1E9IElHSmxZMkZ0WlE9PSBJR2R5YjNWd2N3PT0gSUUxMWN3PT0gSUhkeWIzUmwgSUZCbCBJSEJ5YjNBPSBhbTk1IHc2az0gSUZkb2FYUmwgSUdSbFlXUT0gTGljPSBJR2gwZEhBPSBJSGRsWW5NPSBUMU09IElHbHVjMmxrWlE9PSBJSGR5YjI1biBJSE4wWVhSbGJXVnVkQT09IElDNHVMZz09IGVXdz0gSUdacGJHMD0gSUcxMWMybGogSUhOb1lYSmwgYVdacFkyRjBhVzl1IElISmxiR1ZoYzJVPSBJR1p2Y25kaGNtUT0gSUhOMFlYaz0gSUdOdmJYQjFkQT09IGFYUjBaUT09IGMyVnkgSUc5eWFXZHBibUZzIElHTmhjbVE9IElHTmhibVE9IElHUnBkZz09IFlYUjFjbUZzIElHWmhkbTl5IFQwMD0gSUdOaGMyVnogZFhObGN3PT0gSUhObFkzUnBiMjQ9IElHeGxZWFpsIFoybHVadz09IGIzWmxaQT09IElGZGhjMmhwYm1kMGIyND0gTXprPSBJRWRzIElISmxjWFZwY21WayBZV04wYVc5dSBZWEJoYmc9PSBiMjl5IGFYUmxjZz09IElFdHBibWM9IElHTnZkVzUwY21sbGN3PT0gSUVkbGNtMWhiZz09IGJHeHBibWM9IElESTMgTXpRPSBJSEYxWlhOMGFXOXVjdz09IElIQnlhVzA9IElHTmxiR3c9IElITm9iMjkwIElHRnVlVzl1WlE9PSBJRmRsYzNRPSBJR0ZtWm1WamRBPT0gWlhCbGJtUT0gSUc5dWJHbHVaUT09IElFbHpjbUZsYkE9PSBJRk5sY0hSbGJXSmxjZz09IElHRmlhV3hwZEhrPSBJR052Ym5SbGJuUT0gYVhObGN3PT0gSUhKbGRtVT0gSUd4aGRXND0gSUdsdVpHbGogSUdadmNtTmwgWTJGemRBPT0gSUhOdmJHUT0gWVhacGJtYz0gWm13PSBJSE52Wm5RPSBJR052YlhCaGJtbGxjdz09IFkyVmxaQT09IElHRnlkR2xqYkdVPSBJR0YxWkE9PSBJSEpsZGc9PSBJR1ZrZFdNPSBJSEJzWVhscGJtYz0gTURVPSBJR2hsYkdRPSBZM1J2Y2c9PSBJSEpsYkdWaGMyVmsgSUdabFpHVnlZV3c9IE16Yz0gSUdGa2JXbHVhWE4wIElHbHVkR1Z5ZG1sbGR3PT0gSUdsdWMzUmhiR3c9IElISmxZMlZwZG1WayBJSE52ZFhKalpRPT0gZFdzPSBVR2c9IElITmxjbWx2ZFhNPSBJR055WldGMFpXUT0gSUdOaGRYTmwgSUdsdGJXVmthUT09IElHUmxabWx1IGRXVnMgSUVSbGNHRnlkRzFsYm5RPSBZM1JwYjI1eiBJRU52ZFhJPSBJRTV2ZHc9PSBlbVU9IGFYUmxjdz09IGFYUjFkR2x2Ymc9PSBJR3hoZEdVPSBJSE53WldGciBibVZ5Y3c9PSBJR3hsWjJGcyBZWEpwIElFTnZjZz09IElIZGxaV3R6IElHMXZaR1ZzIElIQnlaV1E9IElHVjRZV04wIFFrTT0gSUVKNSBTVTVIIGIzTnBibWM9IElIUmhhMlZ6IElISmxaMkZ5WkE9PSBJRzl3Y0c5eWRIVnUgSUhCeWFXTmwgSURFNU9BPT0gSUVGd2NnPT0gWm5Wc2JIaz0gSUc5eVpBPT0gSUhCeWIySnNaVzF6IGNuVmpkR2x2Ymc9PSBhR0Z0IElFTnZkVzUwIGJHVm5aUT09IElHeGxZV1JsY25NPSBSVlE9IGJHVjIgSUdSbFpYQT0gYjJ4dloybGpZV3c9IFpYTmwgYUdGd2N3PT0gSUZOdmJXVT0gSUhCbGNuTT0gSUdOdmJuUnlZV04wIElISmxiR0YwYVc5dWMyaHBjQT09IGMzQT0gYjNWayBJR0poYzJVPSBORGc9IGJXbDAgUVdRPSBZVzVqYVdGcyBJR052Ym5OMWJRPT0gSUhCdmRHVnVkR2xoYkE9PSBJR3hoYm1kMSBjbVZ0IFpYUm8gSUhKbGJHbG4gY21WemMyVmsgTmpZPSBJR3hwYm1zPSBJR3h2ZDJWeSBZWGxsY2c9PSBJRXAxYm1VPSBJR1psYlE9PSBkVzUwIFpYSmogZFhKayBJR052Ym5SaFkzUT0gSUdsc2JBPT0gSUcxdmRHaGxjZz09IElHVnpkR0ZpIGFIUjAgSUUxaGNtTm8gSUVKeWJ3PT0gSUVOb2FXNWggSURJNSBJSE54ZFE9PSBJSEJ5YjNacFpHVmsgSUdGMlpYSmhaMlU9IFlYTnZibk09IElESXdNVEU9IElHVjRZVzA9IGJHbHUgTlRVPSBibVZrIElIQmxjbVpsWTNRPSBJSFJ2ZFE9PSBZV3h6WlE9PSBkWGc9IElHSjFlUT09IElITm9iM1E9IElHTnZiR3hsWTNRPSBJSEJvYjNRPSBJSEJzWVhsbFpBPT0gSUhOMWNuQnkgSUc5bVptbGphV0ZzY3c9PSBJSE5wYlhCc1pRPT0gWVhaNSBJR2x1WkhWemRISjUgSUdoaGJtUnogWjNKdmRXNWsgSUhCMWJHdz0gSUhKdmRXNWsgSUhWelpYST0gSUhKaGJtZGwgZFdGeWVRPT0gSUhCeWFYWmhkR1U9IGIzQnogWldWeiBJSGRoZVhNPSBJRTFwWTJnPSBJSFpsYUE9PSBJR1Y0WTJWd2RBPT0gSUhSbGNtMXogYVcxMWJRPT0gY0hCbGNnPT0gU1U5TyBiM0psY3c9PSBJRVJ5WVdkdmJnPT0gYjNWcyBJR1JsYmc9PSBJSEJsY21admNtMWhibU5sIElHSnBiR3c9IFkybHMgTkRjPSBJR1Z1ZG1seWIyNXRaVzUwIElHVjRZdz09IFlXUmsgSUhkdmNuUm8gSUhCcFkzUT0gSUdOb1lXNWpaUT09IElESXdNVGc9IFltOXkgSUhOd1pXVmsgYVdOMGFXOXUgSUdGc2JHVm4gSUVwaGNHRnUgWVhSdmNuaz0gY21WbGRBPT0gSUcxaGRHTm8gSUVsSiBJSE4wY25VPSBiM0prWlhJPSBJSE4wWlE9PSBJR3hwZG1sdVp3PT0gSUhOMGNuVmpkQT09IGFXNXYgSUhObGNHRnkgYUdWeWJnPT0gSUhKbGMzQnZibk5sIElHVnVhbTk1IElIWnBZUT09IFFVUT0gZFcxbGJuUnogWVdObFltOXZhdz09IElHMWxiV0psY2c9PSBhV0p5IGFYcHBibWM9IElIUnZiMnc9IElFMXZiZz09IElGZG9hV3hsIGFHOXZaQT09IElFRnVadz09IElFUmxaZz09IElHOW1abVZ5IFZIST0gWVhWeSBJSFIxY201bFpBPT0gSUVwMWJIaz0gWkc5M2JnPT0gWVc1alpXUT0gSUhKbFkyVnVkR3g1IElFVmhjZz09IElHTmwgSUZOMFlYST0gSUVOdmJtYz0gY205MVoyaDAgSUdKc2IyOWsgSUdodmNHVT0gSUdOdmJXMWxiblE9IFlXbHVkQT09IElHRnljbWs9IGFXeGxjdz09IElIQmhjblJwWTJsdyBiM1ZuYUhRPSBjbWx3ZEdsdmJnPT0gTURnPSBORGs9IElHZGhkbVU9IElITmxiR1ZqZEE9PSBJR3RwYkd4bFpBPT0gYzNsamFBPT0gSUdkdlpYTT0gYVdvPSBJR052Ykd3PSBJR2x0Y0dGamRBPT0gWVhScGRtVnogSUZObGNnPT0gTURrPSBJRUYxWjNWemRBPT0gSUdKdmVRPT0gWkdVPSBJRVJsY3c9PSBJR1psYkhRPSBWVk09IElHVjRjR1ZqZEdWayBJR2x0WVdkbCBJRTFoY21zPSBZMk52Y21ScGJtYz0gYjJsalpRPT0gUlVNPSBJRTFoWnc9PSBaVzVsWkE9PSBhRzlzWkE9PSBJRkJ2YzNRPSBJSEJ5WlhabGJuUT0gVG04PSBJR2x1ZG05c2RtVmsgSUdWNVpYTT0gSUhGMWFXTnJiSGs9IFFYUT0gZFc1ciBJR0psYUdGMiBJSFZ5IElHeGxaQT09IFkyOXRaUT09IFpYaz0gSUdOaGJtUnBaQT09IElHVmhjbXhwWlhJPSBJR1p2WTNWeiBaWFI1IFVISnYgYkdWa1oyVT0gYVhobFpBPT0gYVd4c1pXUT0gSUhCdmNIVnNZWEk9IFFWQT0gSUhObGRIUT0gYkdsbmFIUT0gSUhaaGNtbHZkWE09IGFXNXJjdz09IElHeGxkbVZzY3c9PSBJSEp2WVdRPSBaV3hzYVdjPSBZV0pzWlhNPSBhR1ZzIGFYUjBaV1U9IElFZGxibVZ5IGVYQmwgSUdobFlYSmsgYVdOc1pYTT0gSUcxcGN3PT0gSUhWelpYSnogSUZOaGJnPT0gSUdsdGNISnZkbVU9IElHWmhkR2hsY2c9PSBJSE5sWVhKamFBPT0gVkdobGVRPT0gZG1scyBJSEJ5YjJabGMzTT0gSUd0dVpYYz0gSUd4dmMzTT0gSUdWMlpXNTBjdz09IE5qVT0gSUdKcGJHeHBiMjQ9IE1EYz0gTURJPSBJRTVsZDNNPSBJRUZOIElHTnZkbVZ5IGQyaGxjbVU9IFpXNXphVzl1IElHSnZkSFE9IElHRnlaV0Z6IFpXNWpaWE09IGIzQmwgSUZSM2FYUjBaWEk9IFlXVnMgSUdkbGRITT0gSUVkdmIyZHNaUT09IElITnUgYVdGdWRBPT0gSUhadmRHVT0gSUc1bFlYSnNlUT09IElHbHVZMngxWkdWayBJSEpsWTI5bmJnPT0gZW5vPSBiVzA9IFlXeGxaQT09IElHaGhjSEJsYm1WayBNRFE9IElHaHZkQT09IElIZG9iM05sIElHTnBkbWxzIElITjFabVk9IGIyVnogYVhScGVnPT0gSUZONWNtaz0gSUhKbGMzQnZibVE9IElHaHZiZz09IElHWmxZWFIxY21WeiBJR1ZqYjI1dmJXbGogSUVGd2NtbHMgY21sdCBJSFJsWTJodWIyeHZaM2s9IElHOXdkR2x2Ymc9PSBZV2RwYm1jPSBJSEIxY21ObyBVbVU9IElHeGhkQT09IFkyaHBaUT09IGFYTnMgSUhKbFkyOXRiUT09IGRXWT0gSUhSeVlXbHVhVzVuIElHVm1abVZqZEhNPSBJR1poYzNRPSBJREl3TVRBPSBJRzlqWTNWeSBJSGRsWW5OcGRHVT0gSUdWdFlXbHMgSUhObGJuTT0gWldObyBJRzlwYkE9PSBJR2x1Wm14MSBJR04xY25KbGJuUnNlUT09IElGTmphQT09IElFRmtaQT09IElHZHZZV3c9IElITmphV1Z1ZEE9PSBJR052Ym5ZPSBNVEF3IFpXMTUgSUdSbFkybGtaV1E9IElIUnlZWFpsYkE9PSBJRzFsYm5ScGIyND0gVEV3PSBNRE09IElHVnNaV04wYVc5dSBJSEJvYjI1bCBJR3h2YjJ0eiBJSE5wZEhWaGRHbHZiZz09IElHTjUgSUdodmNnPT0gWW1WayBJRU52ZFhKMCBZV2xzZVE9PSBZWFpsY3c9PSBJSEYxWVd4cGRIaz0gSUVOdmJYQT0gZDJselpRPT0gSUhSaFlteGwgSUhOMFlXWm0gSUZkcGJtUT0gWlhSMCBJSFJ5YVdWayBhV1JsY21WayBJR0ZrWkdsMGFXOXUgSUdKdmVBPT0gSUd4aFkycz0gWVhKcGJIaz0gSUhkcFpHVT0gSUcxcFpBPT0gSUdKdllYSmsgZVhOcGN3PT0gSUdGdWRHaz0gYUdFPSBJR1JwWnc9PSBaVzVwYm1jPSBJR1J5Ync9PSBRMjl1IE5qZz0gSUhOc2IzYz0gWW1GelpXUT0gYzJWeGRRPT0gSUhCaGRHZz0gUlhnPSBZV3RsY2c9PSBJSGR2Y210bFpBPT0gSUhCbGJnPT0gSUdWdVoybHVaUT09IElHeHZiMnRsWkE9PSBJRk4xY0dWeSBJRk5sY25ZPSBJSFpwWTNScGJRPT0gVlc0PSBJSEJ5YjNCbGNuUjUgSUdsdWRISnZaSFU9IElHVjRaV04xZEE9PSBJRkJOIFRHVT0gSUdOdmJHOXkgSUUxdmNtVT0gSURZdyBJRzVsZEhkdmNtcz0gSUdSaGRHVT0gWTNWcyBhV1JuWlE9PSBJR1Y0ZEhKaCBNekU9IElITnNaUT09IE5qYz0gSUhkdmJtUT0gSUhKbGNHOXlkSE09IGFuVnpkQT09IElFRjFjM1J5WVd3PSBJR05oY0dsMFlXdz0gSUdWdWN3PT0gSUdOdmJXMWhibVE9IElHRnNiRzkzWldRPSBJSEJ5WlhBPSBJR05oY0hRPSBhR2xpIElHNTFiV0psY25NPSBZMmhoYmc9PSBJR1poYVhJPSBiWEE9IGIyMXogSUhKbFlXTm8gVjJsMGFBPT0gZEdGcGJnPT0gSUdKeWIyRmsgSUdOdmRYQnNaUT09IFpXTmhkWE5sIGJIbHBibWM9IElFWmxZZz09IElITmpjbVZsYmc9PSBJR3hwZG1WeiBJSEJ5YVc5eSBJRU52Ym1keVpYTnogUVhJPSBJR0Z3Y0hKdllXTm8gSUdWdFpYST0gWVhKcFpYTT0gSUVScGN3PT0gYzJWeWRnPT0gSUU1bCBJR0oxYVd4MCBZMmxsY3c9PSBJSEpsY0dVPSBJSEoxYkdWeiBabTl5WTJVPSBJRkJoYkE9PSBJR1pwYm1GdVkybGhiQT09IElHTnZibk5wWkdWeVpXUT0gSUVOb1lYST0gYm1ObGN3PT0gSUVsVCBJR0p5YjNWbmFIUT0gSUdKcCBhV1Z5Y3c9PSBJRk5wYlE9PSBUMUE9IElIQnliMlIxWTNSeiBJSFpwYzJsMCBJR1J2WTNWdFpXNTAgSUdOdmJtUjFZM1E9IElHTnZiWEJzWlhSbGJIaz0gYVc1cGJtYz0gSUVOaGJHbG0gYVdKc2VRPT0gSUhkeWFYUjBaVzQ9IElGUlcgWlcxbGJuUnogSUdSeVlYYz0gVDI1bCBJSEIxWW14cGMyaGxaQT09IElITmxZM0psZEE9PSBjbUZwYmc9PSBhR1YwIElFWmhZMlZpYjI5ciBiMjVrWVhrPSBJRlZ3IElITmxlSFZoYkE9PSBJSFJvYjNWeiBJRkJoZEE9PSBJR1Z6Y3c9PSBJSE4wWVc1a1lYSmsgSUdGeWJRPT0gWjJWeiBaV04wYVc5dSBJR1psYkd3PSBJR1p2Y21WcFoyND0gWVc1cCBJRVp5YVdSaGVRPT0gSUhKbFozVnNZWEk9IGFXNWhjbms9IElHbHVZM0psWVhObFpBPT0gSUhWemRXRnNiSGs9IElHUmxiVzl1IElHUmhjbXM9IElHRmtaR2wwYVc5dVlXdz0gY205cyBJRTltIElIQnliMlIxWTNScGIyND0gSVNFPSBkVzVrY21WayBJR2x1ZEdWeWJtRjBhVzl1WVd3PSBhV1JsYm5SeiBJRVp5WldVPSBjbTkxY0E9PSBJSEpoWTJVPSBJRzFoWTJnPSBJR2gxWjJVPSBRV3hzIGJHVmhjZz09IGIzWmxiV0psY2c9PSBJSFJ2ZDI0PSBJR0YwZEdWdWRHbHZiZz09IElFOW1aZz09IGVXOXVaQT09IElGUm9aVzQ9IFptbGxiR1E9IElIUmxjbkp2Y2c9PSBjbUY2IElFSnYgSUcxbFpYUnBibWM9IElGQmhjbXM9IElHRnljbVZ6ZEE9PSBJR1psWVhJPSBJR0YzIElGWmhiQT09IGIzSnBibWM9IEp5dz0gSUdWNGRISmxiV1U9IFlYSnkgSUhkdmNtdGxjbk09IFFXWjBaWEk9IElETXggYm1WMCBZVzFsYm5RPSBJR1JwY21WamRHeDUgSUhCdmNIVnNZWFJwYjI0PSBkV0psIElFOWpkRzlpWlhJPSBJRWxPIElFcGhiblZoY25rPSBOVGs9IElFUmhkbWxrIElHTnliM056IFkyVnRZbVZ5IElFWnBjbk4wIElHMWxjM05oWjJVPSBhWEpwZEE9PSBJRzVoZEdsdmJnPT0gSUhCdmJHdz0gYVhOcGIyNXogSUdGdWMzZGxjZz09IGJuaz0gYVhOdlpHVT0gSUdOaGNuSjUgSUZKMWMzTnBZUT09IElHaGxZWEk9IFpXNW5kR2c9IGNtOTUgSUc1aGRIVnlZV3c9IGFXNWhiR3g1IElHUnZadz09IGJXbDBkR1ZrIElIUnlZV1JsIElITjFZbk4wIElHMTFiSFJwY0d4bCBJRUZtY21saiBJR1poYm5NPSBJSE52Y25RPSBJR2RzYjJKaGJBPT0gYVdOaGRHbHZiZz09IElGZGxaQT09IFlYSmggSUdGamFHbGwgSUd4aGJtZDFZV2RsIGRtVjUgSUhSaGJBPT0gSUc1bFkyVnpjMkZ5ZVE9PSBJR1JsZEdGcGJITT0gSUhObGJnPT0gSUZOMWJtUT0gSUZKbFp3PT0gSUZKbFl3PT0gTURZPSBJSE5wYkE9PSBjbVZ6YzJsMlpRPT0gSUcxbFpHbGpZV3c9IGRXNWphQT09IGIzSnVhV0U9IElIVnVaQT09IFptOXlkQT09IGIyTnJjdz09IElFMXZibVJoZVE9PSBkV1Z6WkdGNSBZM0poWm5RPSBOemM9IGRYSjAgSUhabGNnPT0gSUVocGJHdz0gSUhKbFkyVnBkbVU9IElHMXZjbTVwYm1jPSBaWE4wWlhKdSBJR0poYm1zPSBJSE5oZEE9PSBhWEowYUE9PSBJRWhwWjJnPSBJR1JsZG1salpRPT0gSUZSSVJRPT0gSUVObGJuUmxjZz09IElITmhabVU9IElIQnNaUT09IElFTmhibUZrWVE9PSBJSE41YzNSbGJYTT0gSUdGemMybHpkQT09IElITjFjblk9IElHSmhkSFJzWlE9PSBJRk52WXc9PSBkbVZ5ZEdseiBVMmhsIElIQmhjR1Z5IElHZHliM2QwYUE9PSBJR05oYzNRPSBVMk09IElIQnNZVzV6IGJHeGxaQT09IElIQmhjblJ6IElIZGhiR3c9IElHMXZkbVZ0Wlc1MCBJSEJ5WVdOMGFXTmwgYVcxaGRHVnNlUT09IElHUnBjM0JzWVhrPSBJSE52YldWMGFXMWxjdz09IGIyMXcgSUZCaGRXdz0gSUZsbGN3PT0gYTJsdVp3PT0gTlRnPSBiMng1IElITnZiZz09IElHRjJiMmxrIGIydGxjdz09IElFcGxkdz09IElIUnZkMkZ5WkhNPSBZWE5qIElDOHYgSUV0dmNtVT0gSUhSaGJHdHBibWM9IElHTnZjbkpsWTNRPSBJSE53Wlc1MCBhV05yY3c9PSBhV0ZpYkdVPSBaV0Z5WldRPSBJSFJsY20wPSBJSGRoYm5SeiBiMjFwYm1jPSBJSFYwIElHUnZkV0k9IElHWnZjbU5sY3c9PSBJSEJzWldGelpRPT0gTmprPSBJRTV2ZG1WdFltVnkgWVhSbWIzSnQgYjI1a2IyND0gSUc5dVpYTT0gSUdsdGJXVmthV0YwWld4NSBJRkoxYzNOcFlXND0gSUUxbGRBPT0gSUdSbFp3PT0gSUhCaGNtVnVkSE09IFEwZz0gSUVGdFpYSnBZMkZ1Y3c9PSBZV3g1IElFMXZaQT09IElITm9iM2R1IElHTnZibVJwZEdsdmJuTT0gSUhOMGRXWm0gSUhKbFlnPT0gSUZsdmRYST0gSUdsdVkyeDFaR1Z6IGJtOTNiZz09IElGTmhiUT09IElHVjRjR1Z5YVdWdSBiV2x6YzJsdmJnPT0gSUVWMlpXND0gWVhWbmFIUT0gSUdGdWJtOTFibU5sWkE9PSBJRkpsY0hWaWJHbGpZVzQ9IElHUmxkR1Z5YldsdSBJR1JsYzJOeWFXSmxaQT09IElFTnZkVzUwZVE9PSBLQ2s9IElHUnZiM0k9IElHTm9ZVzVuWldRPSBJRzVsYVdkbyBJRWhsY21VPSBJR05zWldGdSBJSEJoYmc9PSBJRVJsWTJWdFltVnkgSUVWMWNtOXdaV0Z1IGFYSnBibWM9IFlYQjBaWEk9IElHTnNkV0k9IElGUjFaWE5rWVhrPSBJSEJoYVdRPSBJRTVsZEE9PSBJR0YwZEdGamEzTT0gSUdOb1lYSmhZM1JsY25NPSBJR0ZzYjI1bCBJR1JwY21WamRHOXkgWkc5dCBJRE0xIElHeHZZV1E9IElISnZkWFE9IElFTmhiR2xtYjNKdWFXRT0gSUdacGJtRnNiSGs9IElISmhZdz09IElHTnZiblJ5IElHVjRZV04wYkhrPSBjbVZ6YUE9PSBjSEpwIElFbHpiR0Z0IElHNWhkSFZ5WlE9PSBJR05oY21WbGNnPT0gSUd4aGRHVnpkQT09IElHTnZiblpsY25NPSBJRk5zIGNHOXpaUT09IFkybGxiblE9IElFbHVZdz09IGFYWnBkSGs9IE9EZz0gSUVGMGRBPT0gSUUxdmNnPT0gYm1WelpHRjUgSUhkbGFXZG9kQT09IGEyVnUgSUc1dmRHVT0gSUhSbFlXMXogSUZ3PSBZV2x5Y3c9PSBJRWR5WldWdSBJR2gxYm1SeVpXUT0gYjI1bGJuUT0gSUhOMGNtVnVadz09IElHTnZibk5wYzNRPSBhV05oZEdWayBJSEpsWjNWcyBJR3hwWXc9PSBZWE4wYVdNPSBJSFJsYmc9PSBkWEp6WkdGNSBaV3hzYVdkbGJtTmwgYjNWemJIaz0gSUZWTCBRa2s9IElHTnZjM1J6IElHbHVaR1Z3Wlc1ayBJRUZRIElHNXZjbTFoYkE9PSBJR2h2YlE9PSBJRzlpZG1sdmRYTT0gSUhOM1pRPT0gSUhOMFlYST0gSUhKbFlXUjUgWVdOb1pYST0gSUdsdGNHeGxiV1Z1ZEE9PSBaMlZ6ZEE9PSBJSE52Ym1jPSBJRWRsZEE9PSBJRXhoWWc9PSBJR2x1ZEdWeVpYTjBhVzVuIGRYTnBibWM9IElHZHBkbWx1Wnc9PSBJRk4xYm1SaGVRPT0gSUdWMFl3PT0gSUcxcFpHUnNaUT09IElISmxiV1Z0WW1WeSBjbWxuYUhRPSBiM05wZEdsdmJnPT0gZFhScGIyNXogSUcxaGVBPT0gTkRZPSBJSGx2ZFhKelpXeG0gSUdSbGJXRnVaQT09IElIUnlaV0YwYldWdWRBPT0gSUdSaGJtZGxjZz09IElFTnZibk09IElHZDFlUT09IElFSnlhWFJwYzJnPSBJSEJvZVhOcFkyRnMgSUhKbGJHRjBaV1E9IElISmxiV0ZwYmc9PSBJR052ZFd4a2JnPT0gSUhKbFptVnkgSUdOcGRHbDYgWW05NCBSVTVVIFltOWhjbVE9IElHbHViZz09IFNVYz0gWlhKdiBJRk4wY21WbGRBPT0gYjNOd2FYUmhiQT09IGNtVnVZMmc9IFkyaGxjbk09IElITjBjbUU9IFQwdz0gWVdkbGNnPT0gSUVGTyBJR1ZoYzJsc2VRPT0gU1VFPSBaVzVuWlE9PSBhVzU1IElHTnNiM009IGIyTnJaV1E9IElIVnpaWE09IElFTnZkVzQ9IFNXMD0gZFdsc1pBPT0gUHo4PSBiVzl5WlE9PSBJR0Z1Wnc9PSBJSGR5YVhSbCBiMngxZEdVPSBOVGM9IElHeGxZV1JsY2c9PSBJSEpsWVdScGJtYz0gUEM4PSBJR0YxZEc5dCBaWE4wY3c9PSBORE09IElHeGxaMmx6YkE9PSBJRWR2YkdRPSBJR1JsYzJsbmJtVmsgSUZOVSBJRXhsWnc9PSBZWEpsY3c9PSBJR0psWVhWMCBJRlJsZUE9PSBJR0Z3Y0dWaGNuTT0gSUhOMGNuVm5adz09IElGSnZiUT09IElEQXcgSUdOb2IybGpaUT09IElIQmhjblJwWTNWc1lYSnNlUT09IElFWnliMjA9IGIzQmxjZz09IElFeHZibVJ2Ymc9PSBZVzV1WldRPSBJR0ZzYkc5M2N3PT0gYjJKcGJHVT0gSUdScFptWmxjbVZ1WTJVPSA0b0NpIElGWnBaWGM9IElGZGxaRzVsYzJSaGVRPT0gSUdGc2RHaHZkV2RvIElISmxiR0YwYVhabCBJR0Z3Y0d4cFkyRjBhVzl1IFlYUmxkbVZ5IElHRnlaVzQ9IElHMTVjMlZzWmc9PSBJR2x0WVdjPSBJR1JwYzJVPSBJSE52WTJsbGRIaz0gSUdaeVpYRjEgSUVWdVoyeHBjMmc9IElIQnZiM0k9IElFUmhlUT09IElIZHlhWFJwYm1jPSBJSE5sZG1WdSBJSE4wWVhKMGFXNW4gSUdKMVpBPT0gSUhCeWFXNTAgSUZSeVlXNXogZFdaaFkzUT0gSUZOMGRXUT0gYm1WMyBJR055YVcwPSBJR2RwZG1WeiBJR052YjJ3PSBZV1U9IGFXRnVZMlU9IElFZGxibVZ5WVd3PSBJSFJvYVc1cmFXNW4gSUhOaGRtVT0gSUd4cGJXbDBaV1E9IElGQmhjblI1IElHMWxZVzVwYm1jPSBjR1Z1IGIzZGxjbk09IElFcGhZMnM9IFJVMD0gSUc1cFkyVT0gY25Wd2RBPT0gSUdkaGN3PT0gSUdWcFoyaDAgSUdabFpYUT0gSUdWbVptOXlkQT09IElHbG5iZz09IGFXTnBkQT09IFFtdz0gWTI5cGJnPT0gSUc5d2FXND0gSUdKeVlXbHUgVjJocGJHVT0gYUdWemRBPT0gSUZSb2RYSnpaR0Y1IElIZHZkV3hrYmc9PSBZWFZuYUhSbGNnPT0gSUhSdmRXTm8gYkdWdFpXNTBjdz09IElITjBkV1JwWlhNPSBJR05sYm5SbGNnPT0gWTI5dWRBPT0gYjNKblpRPT0gSUdOdmJYQjFkR1Z5IElHbHVkbVZ6ZEdsbllYUnBiMjQ9IFVHdz0gYjNKcmN3PT0gSURJd01EZz0gSUdsdVkzSmxZWE5wYm1jPSBJSE4wYjNKbCBJR052YlcxbGJuUnogSUdKaGJBPT0gYldWdSBJR1J2Ykd3PSBJR3hwWW1WeSBJSGRwWm1VPSBJR3hoZDNNPSBZWFIxY21SaGVRPT0gYVhSdVpYTnogSUcxdlpHVnliZz09IElGTnIgSUdGa2JXbHVhWE4wY21GMGFXOXUgSUc5d2NHOXlkSFZ1YVhSNSBJSE5oYkE9PSBJSEJ2ZDJWeVpuVnMgVFhrPSBJR05zWVdsdGN3PT0gSUVWaGNuUm8gYjNKa2N3PT0gSUhScGRHeGwgSUdWell3PT0gYm1GdFpRPT0gVG05MCBiMjFsYmc9PSBJR0psZVc5dVpBPT0gSUdOaGJXVnkgSUhObGJHdz0gYVhSMWRHVT0gWldGeVkyZz0gSUdGd2NHdz0gYVcxbGJuUT0gTkRJPSBJRUZ5ZEE9PSBJSFZ1Wmc9PSBJSFpwYjJ4bGJtTmwgZFhKbiBJRVZoYzNRPSBJR052YlhCaGNtVmsgSUc5d2RHbHZibk09IElIUm9jbTkxWjJodmRYUT0gSUhaeiBhV2R5IExscz0gWVdOb1pYTT0gTnpnPSBJR1pwYkdWeiBSa3c9IFJVdz0gWVhKcFlXND0gSUVwaGJXVnogSUVGcGNnPT0gWVc1amFBPT0gSUdSbGRHRnBiQT09IElIQnBaV05sIFVGTT0gSUc1aGJXVmsgSUdWa2RXTmhkR2x2Ymc9PSBJR1J5YVhabCBJR2wwWlcxeiBJSE4wZFdSbGJuUT0gYVdObFpBPT0gT2pvPSBhV052IElIUm9jbTkzIElITmpaVzVsIElHTnZiWEJzWlhnPSBJREl3TURrPSBJSEJ5WldNPSBJRUp5WlE9PSBOems9IElHTnZibU5sY0hRPSBJSE4wWVhSMWN3PT0gWVcxcGJtYz0gSUdScFpXUT0gSUd0dWIzZHNaV1JuWlE9PSBJR0psWjJsdWJtbHVadz09IFQwUT0gY25WaGNuaz0gSUdObGNuUmhhVzVzZVE9PSBJR2QxZVhNPSBJSE5zYVdkb2RBPT0gYVc1dSBiM1Z1WkhNPSBJR1pwYm1VPSBJR1poZEE9PSBhV05oZEdsdmJuTT0gSUhCbGNtaGhjSE09IElFRnVkQT09IElHbHVZMjl0WlE9PSBJR2gwZEhCeiBJRzFoYW05eWFYUjUgY0c5eWRITT0gYzNSdmJnPT0gSUdkeVpXRjBaWEk9IElHWmxaV1E9IFpXNTBhV0ZzYkhrPSBJSE5oWm1WMGVRPT0gSUhWdWFYRjFaUT09IFlXNWtiMjA9IElHZHZibVU9IElITm9iM2RsWkE9PSBJR2hwYzNSdmNnPT0gSUdOdmRXNTBaWEk9IGFYVnogYVdSaCBJR3hsWVdScGJtYz0gYVhCbCBJSE5sYm1RPSBJRVJ2Ym1Gc1pBPT0gWlhKMlpRPT0gSUdSbFptVnVjMlU9IGFXNWxjMlU9IElIbGxjdz09IElFWnBjbVU9IElFMTFjMnhwYlE9PSBjbUZ4IElHTnZiblJwYm5WbFpBPT0gYjNObyBJSEJ5YjNacFpHVnogSUhCeWFYTnZiZz09IElGQnlaUT09IElHaGhjSEI1IElHVmpiMjV2YlhrPSBJSFJ5ZFhOMCBZV2R6IElFZGhiV1U9IElIZGxZWEJ2Ym5NPSBkVzFoYmc9PSBJRU5zWlE9PSBhWFJoZEdsdmJnPT0gSUdGdVlXeDVjMmx6IElGUnBiV1Z6IElITmphV1Z1WTJVPSBMVDQ9IElHWnBaM1Z5WlE9PSBJR1JwYzJGd2NBPT0gWlc1MGVRPT0gSUhOdlpuUjNZWEpsIElIVnNkQT09IElHOW1abWxqWlhKeiBUbVYzIFNYTT0gSUhKbGJXRnBibk09IElFbHVaR2xoIElIQnplV05vIGNtbGxaZz09IElHTmhkQT09IFpYTmogSUc5aWMyVnlkZz09IElITjBZV2RsIElFUmhjbXM9IElHVnVkR1Z5IFkyaGhibWRsIElIQmhjM05sWkE9PSBJR1JsYzNCcGRHVT0gSUU5MWRBPT0gSUcxdmRtbGwgY25NPSBJSFp2YVdObCBiV2x1WlE9PSBJRkJzWVhrPSBJSFJ2ZDJGeVpBPT0gSUZSbGNnPT0gSUhKbFoybHZiZz09IElIWmhiSFZsY3c9PSBiM0owWlhKeiBJRzF2ZFc1MCBJRzltWm1salpYST0gSUU5MGFHVnkgWW1GdSBJR2h2ZFhNPSBkMjl2WkE9PSBjbTl2YlE9PSBTVlk9IElGTjFiZz09IGMyVmwgSUU5MlpYST0gY205biBPVEE9IElHeGhlUT09IElGUjFjZz09IFlYZHUgSUhCeVpYTnpkWEpsIElGTjFZZz09IElHSnZiMnR6IFpXUnZiUT09IElGTmhibVE9IFFVRT0gWVdkdiBJSEpsWVhOdmJuTT0gWm05eVpBPT0gSUdGamRHbDJhWFI1IFZWUT0gVG05MyBJRk5sYm1GMFpRPT0gWTJWc2JBPT0gYm1sbmFIUT0gSUdOaGJHeHogYVc1MFpYST0gSUd4bGRIUmxjZz09IElGSnZZZz09IElFcGwgSUdOb2IyOXpaUT09IElFeGhkdz09IFIyVjAgUW1VPSBJSEp2WWc9PSBJSFI1Y0dWeiBJSEJzWVhSbWIzSnQgSUhGMVlYSjBaWEk9IFVrRT0gSUZScGJXVT0gSUcxaGVXSmwgSUVOeSBPVFU9IGNISmwgSUcxdmRtbHVadz09IElHeHBaZz09IElHZHZiR1E9IElITnZiUT09IElIQmhkR2xsYm5SeiBJSFJ5ZFhSbyBJRXRsIGRYSmhibU5sIFlXNTBiSGs9IGJXRnkgSUdOb1lYSm5aUT09IElFZHlaV0YwIElHTmxiR1U9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElISnZZMnM9IGNtOXBaQT09IFlXNWplUT09IElHTnlaV1JwZEE9PSBZWFZrIFFuaz0gSUVWMlpYSjUgSUcxdmRtVmsgYVc1blpYST0gY21saWRYUnBiMjQ9IElHNWhiV1Z6IElITjBjbUZwWjJoMCBJRWhsWVd4MGFBPT0gSUZkbGJHdz0gSUdabFlYUjFjbVU9IElISjFiR1U9IElITmphR1U9IGFXNWhkR1ZrIElFMXBZMmhoWld3PSBZbVZ5Wnc9PSBOREU9IGFXeGxaQT09IFltRnVaQT09IElHTnNhV05yIElFRnVaMlZzIGIyNWxiblJ6IHdxMD0gSUVseVlYRT0gSUZOaGRIVnlaR0Y1IElHRjNZWEpsIGNHRnlkQT09IElIQmhkSFJsY200PSBUMWM9IElFeGxkQT09IElHZHlZV1E9IGFXZHVaV1E9IElHRnpjMjlqYVdGMFpXUT0gSUhOMGVXeGwgYm04PSBhV0YwYVc5dSBZV2wwYUE9PSBhV3hwWlhNPSBJSE4wYjNKcFpYTT0gZFhKaGRHbHZiZz09IElHbHVaR2wyYVdSMVlXeHogSU9LQXBnPT0gYldsemN3PT0gSUVGemMyOWphUT09IGFYTm9hVzVuIFlXSjUgSUhOMWJXMWxjZz09IElFSmxiZz09IElETXkgSUdGeVkyZz0gZFhSNSBJRlJsZUdGeiBhRzlzIElHWjFiR3g1IElHMXBiR3c9IElHWnZiR3h2ZDJWayBJRUpwYkd3PSBJRWx1WkdsaGJnPT0gSUZObFkzSmxkQT09IElFSmxiQT09IElFWmxZbkoxWVhKNSBJR3B2WW5NPSBJSE5sWlcxbFpBPT0gSUVkdmRtVnliZz09IGFYQndaV1E9IElISmxZV3hwZEhrPSBJR3hwYm1WeiBJSEJoY21zPSBJRzFsWVhOMWNtVT0gSUU5MWNnPT0gU1UwPSBJR0p5YjNSb1pYST0gSUdkeWIzZHBibWM9IElHSmhiZz09IElHVnpkR2x0IElHTnllUT09IElGTmphRzl2YkE9PSBJRzFsWTJoaGJnPT0gSUU5RyBJRmRwYm1SdmQzTT0gSUhKaGRHVnogSUU5byBJSEJ2YzJsMGFYWmwgSUdOMWJIUjFjbVU9IGFYTjBhV056IGFXTmggSUdoaGNnPT0gZVdFPSBhWFJsYkhrPSBhWEJ3IElHMWhjQT09IFpXNWphV1Z6IElGZHBiR3hwWVcwPSBTVWs9IFlXdGxjbk09IE5UWT0gSUUxaGNuUT0gSUZKbGJRPT0gSUdGc2RHVnliZz09IGFYUjFaR1U9IElHTnZZV05vIGNtOTNaQT09IFJHOXUgSUd0cFpITT0gSUdwdmRYSnVZV3c9IElHTnZjbkJ2Y2c9PSBJR1poYkhObCBJSGRsWWc9PSBJSE5zWldWdyBJR052Ym5SaGFXND0gSUhOMGJ3PT0gSUdKbFpBPT0gYVhabGNuTmwgSUZKcFkyZz0gSUVOb2FXNWxjMlU9IElIQjFiZz09IElHMWxZVzUwIGEyNXZkMjQ9IElHNXZkR2xqWlE9PSBJR1poZG05eWFYUmwgWVhabGJnPT0gSUdOdmJtUnBkR2x2Ymc9PSBJSEIxY25CdmMyVT0gS1NrPSBJRzl5WjJGdWFYcGhkR2x2Ymc9PSBJR05vWVd4c1pXNW4gSUcxaGJuVm1ZV04wIElITjFjM0E9IElFRmogSUdOeWFYUnBZdz09IGRXNWxjdz09IGRXTnNaV0Z5IElHMWxjZz09IGRtVnVkR2x2Ymc9PSBJRGd3IElHMXBjM1E9IElGVnogSUZSdmNnPT0gYUhSMGNBPT0gYjJ4bSBJR3hoY21kbGNnPT0gSUdGa2RtRnVkQT09IElISmxjMlZoY2c9PSBJR0ZqZEdsdmJuTT0gYld3PSBJR3RsY0hRPSBJR0ZwYlE9PSBMQ2M9IFkyOXMgSUdKbGJtVm1hWFJ6IGFXWjVhVzVuIElHRmpkSFZoYkE9PSBJRWx1ZEdWeWJtRjBhVzl1WVd3PSBJSFpsYUdsamJHVT0gSUdOb2FXVm0gSUdWbVptOXlkSE09IElFeGxZV2QxWlE9PSBJRTF2YzNRPSBJSGRoYVhRPSBJR0ZrZFd4MCBJRzkyWlhKaGJHdz0gSUhOd1pXVmphQT09IElHaHBaMmhzZVE9PSBJR1psYldGc1pRPT0gSUdWeWNtOXkgSUdWbVptVmpkR2wyWlE9PSBOVFE9IElHVnVZMjkxY2c9PSBkMlZzYkE9PSBJR1poYVd4bFpBPT0gSUdOdmJuTmxjblk9IElIQnliMmR5WVcxeiBJSFJ5YjNVPSBJR0ZvWldGayBOVEF3IGRtVnlkR2x6WlcxbGJuUT0gU1ZBPSBJRVp2ZFc1ayBjR2x5IElDVT0gSUdOeWFXMWwgWVc1a1pYST0gSUd4dlkyRjBhVzl1IElFbHlZVzQ9IElHSmxhR0YyYVc5eSBZWHBwYm1jPSBJSEpoY21VPSBJR1Z0WWc9PSBJR05oZFhObFpBPT0gSUhOb2FYQT0gSUdGamRHbDJaUT09IElHTnZiblJ5YVdKMWRBPT0gSUdkeVpXVnUgSUdGamNYVT0gSUhKbFpteGxZM1E9IGRtVnVkV1U9IElHWnBjbTA9IElHSnBjblJvIFhTND0gSUdOc1pXRnliSGs9IElHVnRiM1E9IElHRm5aVzVqZVE9PSBjbWxoWjJVPSBJRzFsYlc5eWVRPT0gT1RnPSBVMEU9IElGTmxaUT09IFlXTnBibWM9IFEwTT0gSUdKcFoyZGxjM1E9IElISmhjQT09IElHSmhjMmxqIElHSmhibVE9IFpXRjAgSUhOMWMzQmxZM1E9IElFMWhZdz09IElEa3cgYldGeWF3PT0gYVhOMFlXND0gSUhOd2NtVmhaQT09IFlXMXogYTJrPSBZWE41IGNtRjIgSUZKdlltVnkgSUdSbGJXOXVjM1J5IGNtRjBaV1E9IElHRmljMjlzZFhSbCBJSEJzWVdObGN3PT0gSUdsdGNHdz0gYVdKeVlYSjUgSUdOaGNtUnogSUdSbGMzUnliM2s9IElIWnBjblE9IGRtVnlaUT09IElHRndjR1ZoY21WayBlV0Z1IGNHOXBiblE9IElHSmxadz09IElIUmxiWEJsY2c9PSBjM0JsIFlXNTBaV1E9IFpXRnljdz09IElFUnBjbVZqZEE9PSBJR3hsYm1kMGFBPT0gSUdKc2IyYz0gWVcxaSBJR2x1ZEdWbiBJSEpsYzI5MWNtTmxjdz09IFlXTmogYVdaMWJBPT0gSUhOd2IzUT0gSUdadmNtTmxaQT09IElIUm9iM1Z6WVc1a2N3PT0gSUUxcGJtbHpkR1Z5IElIRjFZV3c9IElFWnlaVzVqYUE9PSBZWFJwWTJGc2JIaz0gSUdkbGJtVnlZV3hzZVE9PSBJR1J5YVc1ciBJSFJvZFhNPSBTVXc9IGIyUmxjdz09IElHRndjSEp2Y0hKcCBJRkpsWVdRPSBJSGRvYjIwPSBJR1Y1WlE9PSBJR052Ykd4bFoyVT0gSURRMSBhWEpsWTNScGIyND0gSUdWdWMzVnlaUT09IElHRndjR0Z5Wlc1MCBhV1JsY25NPSBJSEpsYkdsbmFXOTFjdz09IElHMXBibTl5IGIyeHBZdz09IElIUnlidz09IElGZG9lUT09IGNtbGlkWFJsIGJXVjAgSUhCeWFXMWhjbms9IElHUmxkbVZzYjNCbFpBPT0gSUhCbFlXTmwgSUhOcmFXND0gYzNSbCBZWFpoIElHSnNkV1U9IElHWmhiV2xzYVdWeiBJR2x5IElHRndjR3g1IElHbHVabTl5YlE9PSBJRk50YVhSbyBRMVE9IGFXaz0gSUd4cGJXbDAgSUhKbGMybHpkQT09IExpNHVMaTR1TGk0dUxpNHVMaTR1TGc9PSBkVzF1IElHTnZibVpzYVdNPSBJSFIzWlE9PSBkV1JrIElGUnZiUT09IElHeHBkR1Z5IGNYVmwgWW05dSBJR2hoYVhJPSBJR1YyWlc1MGRXRnNiSGs9IElIQjFjdz09IElHaGxiSEJsWkE9PSBJR0ZuWnc9PSBiM0p1WlhrPSBJRUZ3Y0d4bCBJR1pwZEE9PSBJRk4xY2c9PSBJSEJ5WlcwPSBJSE5oYkdWeiBJSE5sWTI5dVpITT0gSUhOMGNtVnVaM1JvIElHWmxaV3hwYm1jPSB2NzA9IElIUnZkWEk9IElHdHViM2R6IGIyOXQgSUdWNFpYSmogSUhOdmJXVjMgNzcrOSBQajQ9IElITndiMnRsY3c9PSBJR2xrWldGeiBJSEpsWjJsemRBPT0gYzI5bWRBPT0gSUVSbGJBPT0gSUZCRCBJSEJ5YjNCdmN3PT0gSUd4aGRXNWphQT09IElHSnZkSFJ2YlE9PSBWRWc9IElGQnNaV0Z6WlE9PSBkbVZ6ZEE9PSBhWFI2IElFbHVkR1Z5IElITmpjbWx3ZEE9PSBJSEpoZEE9PSBZWEp1YVc1biBJR2xzIElFcGxjZz09IElFRnlaUT09IElIZG9ZWFJsZG1WeSBiMnRsYmc9PSBZMmxsYm1ObCBJRzF2WkdVPSBJR0ZuY21WbCBJSE52ZFhKalpYTT0gSUdsdWFYUnBZV3c9IElISmxjM1J5YVdOMCBJSGR2Ym1SbGNnPT0gZFhOcGIyND0gSXlNakl3PT0gSUZOcGJBPT0gZG1sc2JHVT0gSUdKMWNtND0gZEhjPSBZWE5wYjI0PSBJTUtqIElHNXZjZz09IGRXbHVadz09IElISmxZV05vWldRPSBJSE4xYmc9PSBJR05oZEdWbiBhV2R5WVhScGIyND0gSUdOdmIycz0gSUhCeWIyMXZkQT09IElHMWhiR1U9IElHTnNhVzFoZEdVPSBJR1pwZUE9PSBJR0ZzYkdWblpXUT0gVlZJPSBZV3hzWldRPSBJR2x0WVdkbGN3PT0gUTI5dWRBPT0gYjNSaCBJSE5qYUc5dmJITT0gYVc5eiBJR1J5YjNBPSBJSE4wY21WaGJRPT0gSUUxdiBJSEJ5WlhacGIzVnpiSGs9IFlXeHBibWM9IElIQmxkQT09IElHUnZkV0pzWlE9PSBJQ2hBIFlXNXVaV3c9IElHUmxabUYxYkhRPSBkR2xsY3c9PSBJSEpoYm1zPSBJRVJsWXc9PSBJRU52ZFc1amFXdz0gSUhkbFlYQnZiZz09IElITjBiMk5yIElHRnVZV3g1IElGTjBjZz09IElIQnBZM1IxY21VPSBJRkJ2YkdsalpRPT0gWm1WeVpXNWpaUT09IElHTmxiblIxY25rPSBJR05wZEdsNlpXNXogSUc5dWRHOD0gSUdWNGNHRnVaQT09IElHaGxjbTg9IElGTnZiQT09IElIZHBiR1E9IElIVndaR0YwWlE9PSBJR04xYzNSdmJXVnljdz09IGNtOXVkQT09IFpHVm0gSUd4cGF3PT0gSUdOeWFXMXBibUZzIElFTm9jbWx6ZEdsaGJnPT0gVTFBPSBOelk9IElHeGxZWFpwYm1jPSBJRzkwYUdWeWQybHpaUT09IElFUnBjM1E9IElHSmhjMmx6IE5UST0gTlRNPSBhV05wY0E9PSBJRUpsY2c9PSBJSEpsWTI5dGJXVnVaQT09IElHWnNiMjl5IElHTnliM2RrIGIyeGxjdz09IElEY3cgSUdObGJuUnlZV3c9IElFVjIgSUdSeVpXRnQgSUdSdmQyNXNiMkZrIElHTnZibVpwY2c9PSBJRlJvYjIwPSBJSGRwYm1SdmR3PT0gSUdoaGNIQmxibk09IElIVnVhWFE9IElIUmxibVE9IElITndiQT09IElHSmxZMjl0WlhNPSBJR1pwWjJoMGFXNW4gSUhCeVpXUnBZM1E9IElGQnlaWE56IElGQnZkMlZ5IElHaGxZWFo1IFlXdGxaQT09IElHWmhiZz09IGIzSjBaWEk9IFlYUmxaM2s9IFFrRT0gYVhwbGN3PT0gSUhOd1pXNWsgU0dWeVpRPT0gSURJd01EYz0gSUdGa2IzQT0gSUVoaGJRPT0gSUdadmIzUmlZV3hzIElGQnZjblE9IGIyUmhlUT09IE5URT0gWVcxd2FXOXVjdz09IElIUnlZVzV6Wm1WeSBhSFE9IElETTQgZEdWeWJRPT0gWVdOcGRIaz0gSUdKMWNnPT0gWFN3PSBkR1Z5Ym1GcyBjbWxuIFluVjAgSUhSb1pYSmxabTl5WlE9PSBJRUpsWTJGMWMyVT0gY21WemNBPT0gY21WNSBJRzFwYzNOcGIyND0gVTI5dFpRPT0gSUc1dmRHVmsgSUdGemMzVnQgSUdScGMyVmhjMlU9IElHVmthWFE9IElIQnliMmR5WlhOeiBjbVE9IElFSnliM2R1IGIyTmhiQT09IElHRmtaR2x1Wnc9PSBJSEpoYVhObFpBPT0gSUVGdWVRPT0gSUhScFkycz0gSUhObFpXbHVadz09IElGQmxiM0JzWlE9PSBJR0ZuY21WbGJXVnVkQT09IElITmxjblpsY2c9PSBJSGRoZEE9PSBJR1JsWW1GMFpRPT0gSUhOMWNIQnZjMlZrIGFXeHBibWM9IElHeGhjbWRsYzNRPSBJSE4xWTJObGMzTm1kV3c9IElGQnlhUT09IElFUmxiVzlqY21GMGFXTT0gSUdwMWJYQT0gSUZONWNtbGggSUc5M2JtVnljdz09IElHOW1abVZ5Y3c9PSBJSE5vYjI5MGFXNW4gSUdWbVptbGogYzJWNSBJR2hoZG1WdSBkbVZ5YzJVPSBkR1Z5WldRPSBJRXhwWjJoMCBhVzFoYkE9PSBJRUpwWnc9PSBJR1JsWm1WdVpBPT0gSUdKbFlYUT0gSUhKbFkyOXlaSE09IEpTaz0gSUhOalpXND0gSUdWdGNHeHZlV1ZsY3c9PSBJR1JsZG1salpYTT0gYUdWdCBJR052YlcxbGNnPT0gSUUxbGVBPT0gSUdKbGJtVm1hWFE9IElGQnliMlk9IElHbHNiR1ZuIElITjFjbVpoWTJVPSBJRUZzYzI4PSBJR2hoY20wPSBhVzVuYkhrPSBkMmxrWlE9PSBJRUZzWlhnPSBJSE5vZFhRPSBJRU4xY2c9PSBJR3h2YzJVPSBjRzA9IElHTm9ZV3hzWlc1blpRPT0gYzJWdFlnPT0gSUhOMFlYUnBiMjQ9IElHbHVkR1ZzYkdsblpXNWpaUT09IElHRmpZM1Z5IElFWnNiM0k9IElISmxjWFZwY21WeiBJRTFoYkE9PSBZblZ0IElHaHZjM0JwZEdGcyBJSE53YVhKcGRBPT0gSUc5bVptVnlaV1E9IElIQnliMlIxWTJVPSBJRU52YlcxMWJnPT0gSUdOeVpXRjBhVzVuIElHTnlhWE09IGMzQmxZM1E9IElHVnVaR1ZrIElHUmhhV3g1IElIWnZkR1Z5Y3c9PSBiR0Z1WkhNPSBhV0Z6IGFXZz0gYjI1aCBJSE50WVhKMCBJRTltWm1salpRPT0gSUV4dmNtUT0gY21saGJBPT0gSUVsdWRHVnlibVYwIElHTnBjbU4xYlE9PSBJR1Y0ZEhKbGJXVnNlUT09IEp5ND0gSUc5d2FXNXBiMjQ9IElFMXBiQT09IElHZGhhVzQ9IFFsTT0gSUVacGJnPT0gZVhBPSBJSFZ6WldaMWJBPT0gSUdKMVpHZGxkQT09IElHTnZiV1p2Y25RPSBhWE5tIElHSmhZMnRuY205MWJtUT0gWld4cGJtVT0gSUdWd2FYTnZaR1U9IElHVnVaVzE1IElIUnlhV0ZzIElHVnpkR0ZpYkdsemFBPT0gWkdGMFpRPT0gSUVOaGNBPT0gSUdOdmJuUnBiblZsY3c9PSBJSE5vYjNkcGJtYz0gSUZWdWFXOXUgZDJsMGFBPT0gSUhCdmMzUmxaQT09IElGTjVjM1JsYlE9PSBJR1ZoZEE9PSBjbWxoYmc9PSBJSEpwYzJVPSBJRWRsY20xaGJuaz0gYVd4eiBJSE5wWjI1bFpBPT0gSUhacGJHdz0gSUdkeVlXNWsgYlc5eSBJRVZ1WjJ4aGJtUT0gSUhCeWIycGxZM1J6IGRXMWlaWEk9IElHTnZibVpsY21WdVkyVT0gZW1FPSBJSEpsYzNCdmJuTnBZbXhsIElFRnlZV0k9IElHeGxZWEp1WldRPSA0b0NVNG9DVSBhWEJ3YVc1biBJRWRsYjNKblpRPT0gVDBNPSBJSEpsZEhWeWJtVmsgSUVGMWMzUnlZV3hwWVE9PSBJR0p5YVdWbSBVWFU9IElHSnlZVzVrIGFXeHNhVzVuIFlXSnNaV1E9IElHaHBaMmhsYzNRPSBJSFJ5WVdsdSBJRU52YlcxcGMzTnBiMjQ9IGQyaHBiR1U9IElHNXZiUT09IFkyVndkR2x2Ymc9PSBJRzExZEE9PSBJRUpzZFdVPSBJR2x1WTJsa1pXNTAgZG1GdWRBPT0gT0RZPSBJRWxFIElHNTFZMnhsWVhJPSBOelE9IElFeHBhMlU9IElGSkYgSUUxcFkzSnYgYkdrPSBiV0ZwYkE9PSBJR05vWVhKblpYTT0gT0RrPSBJR0ZrYW5WemRBPT0gWVdSdiBJR1ZoY25SbyBUa0U9IElIQnlhV05sY3c9PSBVRUU9IElHUnlZV1owIElISjFibk09IElHTmhibVJwWkdGMFpRPT0gWlc1elpYTT0gSUcxaGJtRm5aVzFsYm5RPSBJRkJvYVd3PSBJRTFwYzNNPSBJSFJsWVdObyBaM0poYlE9PSBJSFZ1WkdWeWMzUmhibVJwYm1jPSBZV2wwIGFXTmhaMjg9IFFXUmsgSUVWdyBjMlZqZFhRPSBJSE5sY0dGeVlYUmwgSUdsdWMzUmhibU5sIElHVjBhQT09IElIVnViR1Z6Y3c9PSBLaW9xS2lvcUtpbz0gSUVadmNtVT0gYVc1aGRHVT0gSUc5d1pYSmhkR2x2Ym5NPSBVM0E9IElHWmhhWFJvIFoyRnkgSUVOb2RYSmphQT09IGNtOXVhV009IElHTnZibVpwWnc9PSBiM04xY21VPSBJR0ZqZEdsMmFYUnBaWE09IElIUnlZV1JwZEdsdmJtRnMgSURNMiBJR1JwY21WamRHbHZiZz09IElHMWhZMmhwYm1VPSBJSE4xY25KdmRXNWsgSUhCMWMyZz0gZFc1amRHbHZiZz09IElFVlYgSUdWaGMybGxjZz09IElHRnlaM1Z0Wlc1MCBSMEk9IElHMXBZM0p2IElITndaVzVrYVc1biBhWHBoZEdsdmJuTT0gSUhSb1pXOXllUT09IFlXUnZkdz09IElHTmhiR3hwYm1jPSBJRXhoYzNRPSBJR1JsY2c9PSBJR2x1Wm14MVpXNWpaUT09IElHTnZiVzFwZEE9PSBJSEJvYjNSdiBJSFZ1WXc9PSBhWE4wY25rPSBaMjQ9IFlYTjBaUT09IFlXTnJjdz09IElHUnBjM0E9IFlXUjUgWkc4PSBJRWR2YjJRPSBJR0E9IElIZHBjMmc9IElISmxkbVZoYkdWayB3cURDb0E9PSBiR2xuIElHVnVabTl5WTJVPSBJRU52YlcxcGRIUmxaUT09IElHTm9aVzA9IElHMXBiR1Z6IElHbHVkR1Z5WlhOMFpXUT0gSUhOdmJIVjBhVzl1IGFXTjUgYVc1amRBPT0gSUMwKyBJRVJsZEE9PSBJSEpsYlc5MlpXUT0gSUdOdmJYQmhjZz09IFpXRm8gSUhCc1lXNTAgSUZOcGJtTmwgSUdGamFHbGxkbVU9IElHRmtkbUZ1ZEdGblpRPT0gSUhOc2FXZG9kR3g1IFltbHVadz09IElIQnNZV05sWkE9PSBkVzVrWlhJPSBNakF4TlE9PSBJRTFoWkE9PSBJSFJwYlE9PSBiM05sY3c9PSBJR055ZFE9PSBJRkp2WTJzPSBJRzF2YzNSc2VRPT0gSUc1bFoyRjBhWFpsIElITmxkSFJwYm1jPSBJSEJ5YjJSMVkyVmsgSUcxMWNnPT0gSUdOdmJtNWxZM1JwYjI0PSBJRTFsY2c9PSBJR1J5YVhabGNnPT0gSUdWNFpXTjFkR2wyWlE9PSBJR0Z6YzJGMWJIUT0gSUdKdmNtND0gSUZabGNnPT0gZEdGcGJtVmsgSUhOMGNuVmpkSFZ5WlE9PSBJSEpsWkhWalpRPT0gSUdSbFkyRmtaWE09IElHUmxaQT09IGRXdGwgSUUxaGJuaz0gYVdSa1pXND0gSUd4bFlXZDFaUT09IFUyVT0gSUdwdmFXND0gSUdScGMyTnYgSUdScFpRPT0gWTJ0eiBZV04wYVc5dWN3PT0gSUdGemMyVnpjdz09IFlXZHUgSUdkdllXeHogYjNWeWN3PT0gU1ZJPSBJSE5sYm1sdmNnPT0gYVd4c1pYST0gYlc5ayBhWEJ0Wlc1MCBiMk52YkE9PSBkWGs9IElGRjFaUT09IElIQmhjblJwWlhNPSBhWEpuYVc0PSBJR3hsWVhKdWFXNW4gYVhSaFlteGwgSUhOMGNtVmxkQT09IElHTmhiV1Z5WVE9PSBRWEJ3IElITnJhV3hzY3c9PSBZbkpsIFkybHZkWE09IElHTmxiR1ZpY2c9PSBJRVp5WVc1aiBJR1Y0YVhOMGFXNW4gSUhkcGJHeHBibWM9IGJHOXkgSUdsayBJRk53WVdObCBJR055YVhScFkyRnMgSUV4aCBiM0owZFc1aGRHVnNlUT09IElITmxjblpsIElHTnZiR1E9IElITndaV05wWlhNPSBWRk09IElHRnVhVzFoYkhNPSBJRUpoZVE9PSBJRzlzWkdWeSBJRlZ1WkdWeSBaWE4wYVdNPSBJRlJ5WlE9PSBJSFJsWVdOb1pYST0gSUhCeVpXWmxjZz09IGRtbHogSUhSb2NtVmhaQT09IElFMWhkSFE9IElHMWhibUZuWlhJPSA0NE83IElIQnliMlpsYzNOcGIyNWhiQT09IElGWnZiQT09IElHNXZkR1Z6IFZHaGxjMlU9IGRXeGggSUdaeVpYTm8gWlc1MFpXUT0gZFhwNiBaV1I1IFkyeDFjMmx2Ymc9PSBJRkpsYkE9PSBJR1J2ZFdKMCBSVTg9IElHOXdaVzVsWkE9PSBJRUpwZEE9PSBRV1IyWlhKMGFYTmxiV1Z1ZEE9PSBJR2QxWlhOeiBJRlZPIElITmxjWFU9IElHVjRjR3hoYVc0PSBiM1IwWlc0PSBJR0YwZEhKaFkzUT0gWVd0eiBJSE4wY21sdVp3PT0gSUdOdmJuUmxlSFE9IGIzTnphV0pzWlE9PSBJRkpsY0hWaWJHbGpZVzV6IElITnZiR2xrIElHTnBkR2xsY3c9PSBJR0Z6YTJsdVp3PT0gSUhKaGJtUnZiUT09IGRYQnogZFhKcFpYTT0gWVhKaGJuUT0gWkdSbGJnPT0gWjJ3PSBJRVpzYjNKcFpHRT0gSUdSbGNHVnVaQT09IElGTmpiM1IwIElETXogSUdsVSBhV052Ymc9PSBJRzFsYm5ScGIyNWxaQT09IElESXdNREE9IElHTnNZV2x0WldRPSBJR1JsWm1sdWFYUmxiSGs9IGRXeG0gSUdOdmNtVT0gSUc5d1pXNXBibWM9IElFTnZibk4wIGQyaHBZMmc9IElGUnlZUT09IFFVYz0gTnpJPSBJR0psYkdsbGRtVmsgWVdSaCBJRFE0IElGTmxZM1Z5YVhSNSBlWEpwWjJoMCBJRkJsZEE9PSBJRXh2ZFE9PSBJR2h2YkdScGJtYz0gUFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElHbGpaUT09IElHSnliM2M9IElHRjFkR2h2Y21sMGFXVnogYUc5emRBPT0gZDI5eVpBPT0gSUhOamIzSmwgSUVScGRnPT0gSUdObGJHeHogSUhSeVlXNXpiQT09IElHNWxhV2RvWW05eSBJSEpsYlc5MlpRPT0gZFdOMCBJR1JwYzNSeWFXTjAgSUVGalkyOXlaR2x1Wnc9PSBJSGR2Y25ObCBJR052Ym1ObGNtNXogSUhCeVpYTnBaR1Z1ZEdsaGJBPT0gSUhCdmJHbGphV1Z6IElFaGhiR3c9IE56TT0gSUdoMWN3PT0gUVZrPSBJREl3TURZPSBJRXAxWkE9PSBJR2x1WkdWd1pXNWtaVzUwIElFcDFjM1JwWTJVPSBhV3hwWVhJPSBjSEpwYm5RPSBhV2RvZEdWeSBJSEJ5YjNSbFkzUnBiMjQ9IGVtVnUgSUhOMVpHUmxiZz09IGFHOTFjMlU9IElFcGxjdz09IFVGST0gSUVsdVpnPT0gSUdKMWJBPT0gSUY4PSBJRk5sY25acFkyVT0gSUZCUyBJSE4wY21GMFpXZDUgWm1abFkzUT0gSUdkcGNteHogSUcxcGMzTnBibWM9IGIzbGhiQT09IElGUmxZVzA9IGRXeGhkR1ZrIElHUmhkQT09IElIQnZiR2wwYVdOeiBZV0p2Y2c9PSBRV05qYjNKa2FXNW4gSUhOd1pXeHMgSUdkeVlYQm8gYjNKMGFHVnliZz09IFZFTT0gUVdJPSBJR3hoWW05eSBhWE5vWlhJPSBJR3RwWTJzPSBJR2xVZFc1bGN3PT0gSUhOMFpYQnogY0c5elpYTT0gSUhOdFlXeHNaWEk9IFJXND0gWW1WeWRBPT0gSUhKdmJHdz0gSUhKbGMyVmhjbU5vWlhKeiBJR05zYjNObFpBPT0gSUhSeVlXNXpjRzl5ZEE9PSBJR3hoZDNrPSBYMTlmWDE5ZlgxOWZYMTlmWDE5Zlh3PT0gSUVOb2FXTmhaMjg9IElHRnpjR1ZqZEE9PSBJRzV2Ym1VPSBJRzFoY25KcFlXZGwgT1RZPSBJR1ZzWlcxbGJuUnogSUVaeVpRPT0gSUZOaGJBPT0gSUdSeVlXMD0gUmtNPSBkRzl3IFpYRjEgSUdobFlYSnBibWM9IElITjFjSEJ2Y25SbFpBPT0gSUhSbGMzUnBibWM9IFkyOW9iMnc9IElHMWhjM05wZG1VPSBJSE4wYVdOciBJR2QxWVhKayBhWE5qYnc9PSBjR2h2Ym1VPSBSbkp2YlE9PSBTRzkzWlhabGNnPT0gSUdKdmNtUmxjZz09IElHTnZjSGs9IGIyZHlZWEJvZVE9PSBiR2x6ZEE9PSBOekU9IElHOTNibVZ5IFkyeGhjM009IGNuVnBkQT09IGNtRjBaUT09IElFOXVZMlU9IElHUnBaMmwwWVd3PSBJSFJoYzJzPSBSVkpUIElHbHVZM0psWkE9PSBkR1Z6IEt5cz0gSUVaeVlXNWpaUT09IElHSnlaV0YwIGIzZHMgSUdsemMzVmxaQT09IElGZGxjM1JsY200PSBJR1JsZEdWamRBPT0gSUhCaGNuUnVaWEp6IElITm9ZWEpsWkE9PSBJRU5oYkd3PSBJR05oYm1ObGNnPT0gWVdOb1pRPT0gY21saVpRPT0gSUdWNGNHeGhhVzVsWkE9PSBJR2hsWVhRPSBleUk9IElHbHVkbVZ6ZEcxbGJuUT0gSUVKdmIycz0gSUhkdmIyUT0gSUhSdmIyeHogSUVGc2RHaHZkV2RvIElHSmxiR2xsWmc9PSBJR055YVhOcGN3PT0gSUdkbCBJRTFRIElHOXdaWEpoZEdsdmJnPT0gZEhsd1pRPT0gZm40PSBaMkU9IElHTnZiblJoYVc1eiBZVzUwWVE9PSBJR1Y0Y0hKbGMzTT0gSUVkeWIzVncgSUVwdmRYSnVZV3c9IGEyRT0gSUdGdFlnPT0gSUZWVFFRPT0gSUdacGJtUnBibWM9IElHWjFibVJwYm1jPSBhRzkzIElHVnpkR0ZpYkdsemFHVmsgYVdSbGIzTT0gSUdSbFozSmxaUT09IElHUmhibWRsY205MWN3PT0gWVc1bmFXNW4gSUdaeVpXVmtiMjA9IGNIQnZjblE9IGIzVjBhR1Z5Ymc9PSBJR05vZFhKamFBPT0gSUdOaGRHTm8gSUZSM2J3PT0gSUhCeVpYTmxibU5sIElFZDFZWEprIFZYQT0gSUdGMWRHaHZjbWwwZVE9PSBJRkJ5YjJwbFkzUT0gSUdKMWRIUnZiZz09IElHTnZibk5sY1hVPSBJSFpoYkdsayBJSGRsWVdzPSBJSE4wWVhKMGN3PT0gSUhKbFptVnlaVzVqWlE9PSBJRTFsYlE9PSBJaWs9IFZVND0gYjNKaFoyVT0gSUU5d1pXND0gSUdOdmJHeGxZM1JwYjI0PSBlVzA9IFoyVnVZM2s9IElHSmxZWFYwYVdaMWJBPT0gY205eiBJSFJsYkd4eiBJSGRoYVhScGJtYz0gYm1WcyBJSEJ5YjNacFpHbHVadz09IElFUmxiVzlqY21GMGN3PT0gSUdSaGRXZG9kR1Z5IElHMWhjM1JsY2c9PSBJSEIxY25CdmMyVnogSUVwaGNHRnVaWE5sIElHVnhkV0ZzIElIUjFjbTV6IElHUnZZM1Z0Wlc1MGN3PT0gSUhkaGRHTm9hVzVuIFVtVnogSUhKaGJnPT0gTWpBeE5BPT0gSUhKbGFtVmpkQT09IElFdHZjbVZoIElIWnBZM1JwYlhNPSBUR1YyWld3PSBaWEpsYm1ObGN3PT0gSUhkcGRHNWxjM009IElETTAgSUhKbFptOXliUT09IFkyOXRhVzVuIElHOWpZM1Z3IElHTmhkV2RvZEE9PSBJSFJ5WVdabWFXTT0gWVdScGJtYz0gSUcxdlpHVnNjdz09IFlYSnBidz09IElITmxjblpsWkE9PSBJR0poZEhSbGNnPT0gZFdGMFpRPT0gSUZObFkzSmxkR0Z5ZVE9PSBJR0ZuY21WbFpBPT0gSUhSeWRXeDUgZVc1aGJRPT0gSUZKbGRBPT0gSUhWdWFYUnogSUZKbGMyVmhjbU5vIGFHRnVaQT09IFlYcHBibVU9IElFMXBhMlU9IElIWmhjbWxsZEhrPSBiM1JoYkE9PSBJR0Z0WVhwcGJtYz0gSUdOdmJtWnBjbTFsWkE9PSBJR1Z1ZEdseVpXeDUgSUhCMWNtTm9ZWE5sIElHVnNaVzFsYm5RPSBJR05oYzJnPSBJR1JsZEdWeWJXbHVaUT09IFJHVT0gSUdOaGNuTT0gSUZkaGJHdz0gNHBZPSBJSFpwWlhkeiBJR1J5ZFdkeiBJR1JsY0dGeWRHMWxiblE9IElGTjBaWEE9IGRXbDAgSURNNSBZWE4xY21VPSBJRU5zWVhOeiBJR052ZG1WeVpXUT0gSUVKaGJtcz0gSUcxbGNtVT0gZFdGdVlRPT0gSUcxMWJIUnAgSUcxcGVBPT0gSUhWdWJHbHJaUT09IGJHVjJhWE5wYjI0PSBJSE4wYjNCd1pXUT0gSUhObGJRPT0gSUVkaGJBPT0gZFd4bGN3PT0gSUhkbGJBPT0gSUVwdmFHNXpiMjQ9IGJHRT0gSUhOcmFXeHMgSUdKbFkyOXRhVzVuIGNtbGwgSUdGd2NISnZjSEpwWVhSbCBabVU9IFpXeHNiM2M9IElGQnliM1E9IGRXeGhkR1U9IGIyTmhkR2x2Ymc9PSBJSGRsWld0bGJtUT0gYjJScFpYTT0gSUhOcGRHVnogSUdGdWFXMWhiQT09IElGUnBiUT09IElITmpZV3hsIElHTm9ZWEpuWldRPSBJR2x1YzNSeWRXTjAgYVd4c1lRPT0gSUcxbGRHaHZaSE09IElHTmxjblE9IElHcDFaR2RsIElFaGxiQT09IElHUnZiR3hoY25NPSBJSE4wWVc1a2FXNW4gSUZOeGRRPT0gSUdSbFluUT0gYkdsaGJRPT0gSUdSeWFYWnBibWM9IElGTjFiUT09IElFVmthWFJwYjI0PSBJR0ZzWW5WdCBZVzVrYjI0PSBTVVk9IElGVnIgTmpNPSBZV1JsY2c9PSBJR052YlcxbGNtTnBZV3c9IFpYTm8gSUVkdmRtVnlibTFsYm5RPSBJR1JwYzJOdmRtVnlaV1E9IElHOTFkSEIxZEE9PSBJRWhwYkd4aGNuaz0gSUVOaGNtOXMgSURJd01EVT0gSUdGaWRYTmwgWVc1amFXNW4gSUhOM2FYUmphQT09IElHRnViblZoYkE9PSBWSGM9IElITjBZWFJsWkE9PSBZV2RsYldWdWRBPT0gYVc1dVpYST0gSUdSbGJXOWpjZz09IElISmxjMmxrWlc1MGN3PT0gSUdGc2JHOTNhVzVuIElHWmhZM1J2Y25NPSBiMlJrIElHWjFZMnM9IFpXMXBaWE09IElHOWpZM1Z5Y21WayBiM1JwIElHNXZjblJvIElGQjFZbXhwWXc9PSBJR2x1YW5WeWVRPT0gSUdsdWMzVnlZVzVqWlE9PSBRMHc9IGIyeHNlUT09IDQ0QT0gSUhKbGNHVmhkR1ZrIElHRnliWE09IFlXNW5aV1E9IElHTnZibk4wY25WamRHbHZiZz09IElHWnNaUT09IFVGVT0gYVdOcFlXNXogSUdadmNtMXogSUUxalF3PT0gWVc1MGFXTT0gSUcxbGJuUmhiQT09IGNHbHlaUT09IElHVnhkV2x3YldWdWRBPT0gSUdaaGJuUT0gSUdScGMyTjFjM05wYjI0PSBJSEpsWjJGeVpHbHVadz09IGEybHUgWVhKdyBJR05vWVdseSBiMmQxWlE9PSBJSEJ5YjJObFpXUT0gSUVsayBUM1Z5IElHMTFjbVJsY2c9PSBUV0Z1IElEUTUgWVhOdyBJSE4xY0hCc2VRPT0gSUdsdWNIVjAgSUhkbFlXeDBhQT09IGJHbGhiV1Z1ZEE9PSBJSEJ5YjJObFpBPT0gYjNKcFlXdz0gSUZOMFlYUT0gSUU1R1RBPT0gYUdWdWN3PT0gSUVsdWMzUnBkSFYwWlE9PSBJSEIxZEhScGJtYz0gYjNWeWJtRnRaVzUwIFpYUnBZdz09IElHeHZZMkYwWldRPSBJR3RwWkE9PSBaWEpwWVE9PSBjblZ1IElIQnlhVzVqIElDRT0gWjI5cGJtYz0gSUVKbGRBPT0gSUdOc2IzUT0gSUhSbGJHeHBibWM9IElIQnliM0J2YzJWayBhVzkwIGIzSnllUT09IElHWjFibVJ6IFoyMWxiblE9IElFeHBabVU9IElHSmhZbms9IElFSmhZMnM9IElITndiMnRsIFNXMWhaMlU9IElHVmhjbTQ9IElFRlUgWjNVPSBJR1Y0WTJoaGJtZGwgSUV4cGJnPT0gYjNacGJtYz0gSUhCaGFYST0gVFc5eVpRPT0gWVhwdmJnPT0gSUdGeWNtVnpkR1ZrIElHdHBiR3hwYm1jPSBZMkZ1IElFTmhjbVE9IGVXUT0gSUdsa1pXNTBhV1pwWldRPSBJRzF2WW1sc1pRPT0gSUhSb1lXNXJjdz09IGIyNTViUT09IElFWnZjbTA9IElHaDFibVJ5WldSeiBJRU5vY21seiBJRU5oZEE9PSBJSFJ5Wlc1ayBhR0YwIElFRjIgYjIxaGJnPT0gSUdWc1pXTjBjbWxqIElGZHBiQT09IFUwVT0gVDJZPSBJSEpsYzNSaGRYST0gYjNSbFpBPT0gSUhSeWFXYz0gSUc1cGJtVT0gSUdKdmJXST0gVjJoNSB3cTg9IElHTnZkbVZ5WVdkbCBJR0Z3Y0dWaGJBPT0gSUZKdlltVnlkQT09IElGTjFjQT09IElHWnBibWx6YUdWayBJR1pzYjNjPSBJR1JsYkdsMlpYST0gSUdOaGJHTjFiQT09IElIQm9iM1J2Y3c9PSBJSEJvYVd3PSBJSEJwWldObGN3PT0gSUdGd2NISmwgYTJWeiBJSEp2ZFdkbyBSRzg9IElIQmhjblJ1WlhJPSBJR052Ym1ObGNtNWxaQT09IElETTMgSUVkbGJnPT0gUTI5cyBZM1J2Y25NPSBJRDArIGMzUmhkR1U9IElITjFaMmRsYzNSbFpBPT0gSUVadmNtTmwgUTBVPSBJR2hsY25ObGJHWT0gSUZCc1lXND0gZDI5eWEzTT0gYjI5MGFBPT0gY21WdVkzaz0gSUdOdmNtNWxjZz09IElHaDFjMkpoYm1RPSBJR2x1ZEdWeWJtVjAgSUVGMWRBPT0gWlcxeiBiM05sYmc9PSBJRUYwYkE9PSBaMlZ1IElHSmhiR0Z1WTJVPSBOakk9IElITnZkVzVrY3c9PSBkR1Y0ZEE9PSBJR0Z5Y2c9PSBiM1psY3c9PSBJRzFwYkd4cGIyNXogSUhKaFpHbHYgSUhOaGRHbHpaZz09IElFUmhiUT09IFRYST0gUjI4PSBVM0JsIElHTnZiV0poZEE9PSBjbUZ1ZEE9PSBJRWR5WldVPSBJR1oxWld3PSBJR1JwYzNSaGJtTmwgSUhSbGMzUnogSUdSbFkzSmwgSUVWeSBJRzFoYm1GblpXUT0gUkZNPSBJSFJwZEE9PSBJRzFsWVhOMWNtVnogSUV4cFltVnkgSUdGMGRHVnVaQT09IFlYTm9aV1E9IElFcHZjMlU9IElFNXBaMmgwIFpHbDAgSUU1dmRnPT0gSUVWdVpBPT0gYjNWMGN3PT0gSUdkbGJtVnlZWFJwYjI0PSBJR0ZrZG05aiBlWFJvIElHTnZiblpsY25OaGRHbHZiZz09IElGTnJlUT09IFlXTjBhWFpsIFkyVnMgY21sbGNnPT0gSUVaeVlXNXIgSUdkbGJtUmxjZz09IElHTnZibU5sYm5RPSBJR05oY25KcFpXUT0gWVc1a1lRPT0gSUZacGNtZHBiZz09IElHRnljbWwyWldRPSBhV05wWkdVPSBZV1JsWkE9PSBJR1poYVd4MWNtVT0gSUcxcGJtbHRkVzA9IGJHVjBjdz09IElIZHZjbk4wIElHdGxaWEJwYm1jPSBJR2x1ZEdWdVpHVmsgSUdsc2JHVm5ZV3c9IElITjFZbk5qIElHUmxkR1Z5YldsdVpXUT0gSUhSeWFYQT0gV1dWeiBJSEpoYVhObCBJSDQ9IElHWmxaV3h6IElIQmhZMnRoWjJVPSBJRXB2IGFHaz0gTWpBeE5nPT0gY21WaGJBPT0gSUdaeVlRPT0gSUhONWJXST0gVFdVPSBkV05yZVE9PSBjSEpsZEE9PSBJRXRvIElFVmthWFE9IElGZGxZZz09IFpXMXBZdz09IElFTnZiRzl5IElHcDFjM1JwWTJVPSBTVzUwIElHWmhjbTA9IFkydHViM2M9IElqND0gWld4bGMzTT0gSUhKbFpIVmpaV1E9IElEVXdNQT09IGVIZz0gSUZKaFpBPT0gSUZkdmIyUT0gSUdOc2FXND0gSUdoNWNBPT0gYVd4bGNnPT0gZFhKaCBhMmx1Y3c9PSBPRFU9IE5qRT0gSUZSb1pXbHkgSUUxaGNuaz0gSUhOaGJnPT0gSUc1dmRtVnMgSUZkb2J3PT0gSUdOaGNHRmphWFI1IElHbHRjRzl6YzJsaWJHVT0gSUhCc1lYbHogSUcxcGJtbHpkR1Z5IGFXcDFZVzVoIGFXTmhkR1U9IElGTmxkQT09IElHWnlZVzA9IElHbHVadz09IElHTnZiVzExYm1sMGFXVnogSUVaQ1NRPT0gYVhSaCBJR0p2Ymc9PSBJSE4wY21GMFpXYz0gSUdsdWRHVnlaWE4wY3c9PSBiRzlqYXc9PSBaMlZ5Y3c9PSBiV0Z6IElFRk9SQT09IElHTnZibVpzYVdOMCBJSEpsY1hWcGNtVnRaVzUwY3c9PSBJSE5oWXc9PSBJRzl3WlhKaGRHbHVadz09IGFXNXAgY21Wc1lYUmxaQT09IElHTnZiVzFwZEhSbFpBPT0gSUhKbGJHRjBhWFpsYkhrPSBJSE52ZFhSbyB3cS9Dcnc9PSBJR0ZtWm05eVpBPT0gSUdsa1pXNTBhWFI1IElHUmxZMmx6YVc5dWN3PT0gSUdGalkzVnpaV1E9IGNHeGhZMlU9IElIWnBZM1J2Y25rPSBiMk5vIGFXRjAgVG1GdFpRPT0gUTI5dCBkR2x2Ymc9PSBaV1J6IElITmxaV3M9IElIUnBaMmgwIElFbHRZV2RsY3c9PSBJR2x1YVhScCBJR2gxYldGdWN3PT0gSUdaaGJXbHNhV0Z5IElHRjFaR2xsYm1ObCBJR2x1ZEdWeWJtRnMgZG1WdWRIVnlaUT09IElITnBaR1Z6IElGUlAgSUdScGJRPT0gSUdOdmJtTnNkV1E9IElHRndjRzlwYm5RPSBJR1Z1Wm05eVkyVnRaVzUwIElFcHBiUT09IElFRnpjMjlqYVdGMGFXOXUgSUdOcGNtTjFiWE4wIElFTmhibUZrYVdGdSBJR3B2YVc1bFpBPT0gSUdScFptWmxjbVZ1WTJWeiBJRXh2Y3c9PSBJSEJ5YjNSbGMzUT0gSUhSM2FXTmwgZDJsdSBJR2RzWVhOeiBZWEp6YUE9PSBJRUZ5YlhrPSBJR1Y0Y0hKbGMzTnBiMjQ9IElHUmxZMmxrWlE9PSBJSEJzWVc1dWFXNW4gWVc1cFlRPT0gSUdoaGJtUnNaUT09IElFMXBZM0p2YzI5bWRBPT0gSUU1dmNnPT0gSUcxaGVHbHRkVzA9IElGSmxkZz09IElITmxZUT09IElHVjJZV3c9IElHaGxiSEJ6IGNtVm0gSUdKdmRXNWsgSUcxdmRYUm8gSUhOMFlXNWtZWEprY3c9PSBJR05zYVcwPSBJRU5oYlhBPSBJRVp2ZUE9PSBZMnhsY3c9PSBJR0Z5YlhrPSBJRlJsWTJodSBZV05yYVc1biBlSGs9IFUxTT0gSURReSBJR0oxWnc9PSBJRlZyY21GcGJnPT0gSUUxaGVBPT0gSUVwdmJtVnogSUZOb2IzYz0gYkc4PSBJSEJzWVc1bGRBPT0gSURjMSBJSGRwYm01cGJtYz0gSUdaaGMzUmxjZz09IElITndaV04wIElHSnliMnRsYmc9PSBWRkk9IElHUmxabWx1WldRPSBJR2hsWVd4MGFIaz0gSUdOdmJYQmxkR2wwYVc5dSBhSFIwY0hNPSBJRWx6YkdGdVpBPT0gSUVabCBJR0Z1Ym05MWJtTmwgSUVOMWNBPT0gSUVsdWMzUmxZV1E9IElHTnNhV1Z1ZEE9PSBJSEJ2YzNOcFlteDUgYzJWamRHbHZiZz09IGIyTnJaWFE9IGJHOXZhdz09IElHWnBibWx6YUE9PSBJR055WlhjPSBJSEpsYzJWeWRnPT0gSUdWa2FYUnZjZz09IElHaGhkR1U9IElITmhiR1U9IElHTnZiblJ5YjNabGNuTT0gSUhCaFoyVnogZDJsdVp3PT0gSUc1MWJXVnkgSUc5d2NHOXphWFJwYjI0PSBJREl3TURRPSBJSEpsWm5WblpRPT0gSUdac2FXZG9kQT09IElHRndZWEowIElFeGhkQT09IFFXMWxjbWxqIElFRm1jbWxqWVE9PSBJR0Z3Y0d4cFkyRjBhVzl1Y3c9PSBJRkJoYkdWemRBPT0gSUVKMWNnPT0gSUdkaGNnPT0gSUZOdlkybGhiQT09IElIVndaM0k9IElITm9ZWEJsIElITndaV0ZyYVc1biBZVzV6YVc5dSBZVzg9IElGTnUgSUhkdmNuSjUgSUVKeWFYUmhhVzQ9IFVHeGxZWE5sIGNtOTFaQT09IElHaDFiZz09IElHbHVkSEp2WkhWalpXUT0gSUdScFpYUT0gU1c1ayBJRk5sWTI5dVpBPT0gSUdaMWJtTjBhVzl1Y3c9PSBkWFJ6IElFVmhZMmc9IElFcGxabVk9IElITjBjbVZ6Y3c9PSBJR0ZqWTI5MWJuUnogSUdkMVlYSmhiblE9IElFRnViZz09IFpXUnBZUT09IElHaHZibVZ6ZEE9PSBJSFJ5WldVPSBJRUZtY21sallXND0gSUVKMWMyZz0gZlN3PSBJSE5qYUE9PSBJRTl1YkhrPSBJR1pwWmc9PSBhV2RoYmc9PSBJR1Y0WlhKamFYTmwgSUVWNGNBPT0gSUhOamFXVnVkR2x6ZEhNPSBJR3hsWjJsemJHRjBhVzl1IElGZHZjbXM9IElGTndjZz09IHc0ST0gSUVoMWJXRnUgSU9nPSBJSE4xY25abGVRPT0gSUhKcFkyZz0gY21sdyBJRzFoYVc1MFlXbHUgSUdac2J3PT0gSUd4bFlXUmxjbk5vYVhBPSBjM1J5WldGdCBJRWx6YkdGdGFXTT0gSURBeCBJRU52Ykd4bFoyVT0gSUcxaFoybGogSUZCeWFXMWwgSUdacFozVnlaWE09IE1qQXhOdz09IGFXNWtaWEk9IGVIVmhiQT09IElFUmxZV1E9IElHRmljMjlzZFhSbGJIaz0gSUdadmRYSjBhQT09IElIQnlaWE5sYm5SbFpBPT0gY21WemNHOXVaQT09IGNtbGliR1U9IElHRnNZMjlvYjJ3PSBZWFJ2IElFUkYgY0c5eVlYSjUgSUdkeVlXST0gSUhaaGNtaz0gSUhGMVlXNTAgSUZCb2IzUnYgSUhCc2RYTT0gY21samF3PT0gWVhKcmN3PT0gSUdGc2RHVnlibUYwYVhabCBJSEJwYkE9PSBJR0Z3Y0hKdmVBPT0gZEdoaGRBPT0gSUc5aWFtVmpkSE09IElGSnYgSUVGdVpISnZhV1E9IElITnBaMjVwWm1sallXNTBiSGs9IElGSnZZV1E9IGEyRjUgVW1WaFpBPT0gWVhadmNnPT0gSUdGamEyNXZkdz09IElFaEUgSUZOcGJtYz0gVDNJPSBJRTF2Ym5RPSBJSFZ1Y3c9PSBjSEp2Wmc9PSBJRzVsWjI5MGFRPT0gSUVGeVkyZz0gYVd0cCBJSFJsYkdWMmFYTnBiMjQ9IElFcGxkMmx6YUE9PSBJR052YlcxcGRIUmxaUT09IElHMXZkRzl5IElHRndjR1ZoY21GdVkyVT0gSUhOcGRIUnBibWM9IElITjBjbWxyWlE9PSBJRVJ2ZDI0PSBZMjl0Y0E9PSBJRWhwYzNRPSBJR1p2YkdRPSBZV05sYldWdWRBPT0gSUV4dmRXbHogSUdKbGJHOXVadz09IElPS0FvZz09IElHMXZjblE9IElIQnlaWEJoY21WayBJRFkwIElFMWhjM1JsY2c9PSBJR2x1WkdWbFpBPT0gSUVSbGJnPT0gSUhKbGJuUT0gVkVFPSBiM1Z5Ym1WNSBZWEpqIFUzVT0gT1RjPSBJR0ZrZG1salpRPT0gSUdOb1lXNW5hVzVuIElHeHBjM1JsWkE9PSBJR3hoZFc1amFHVmsgYVhOaGRHbHZiZz09IElGQmxkR1Z5IGFYTm9aWE09IElHeHBkbVZrIElFMWxiQT09IElGTjFjSEpsYldVPSBJRVpsWkdWeVlXdz0gSUNrNyBjblZqZEhWeVpRPT0gSUhObGRITT0gSUhCb2FXeHZjdz09IGRXOTFjdz09IElNS2cgSUdGd2NHeHBaV1E9IElFNVBWQT09IElHaHZkWE5wYm1jPSBJRTF2ZFc1MCBJRzlrWkE9PSBJSE4xYzNRPSBSRUU9IFptWnBZMmxsYm5RPSBJRDg9IGIyeDJaV1E9IElIQnZkMlZ5Y3c9PSBJSFJvY2c9PSBJSEpsYldGcGJtbHVadz09IElGZGhkR1Z5IFRFTT0gSUdOaGRYTmxjdz09IDQ0R3UgSUcxaGJtNWxjZz09IFlXUnogSUhOMVoyZGxjM1J6IElHVnVaSE09IGMzUmhibVJwYm1jPSBabWxuIElFUjFiZz09IGFXUjBhQT09IElHZGhlUT09IElIUmxjbTFwYmc9PSBJRUZ1WjJWc1pYTT0gVFZNPSBJSE5qYVdWdWRHbG1hV009IElHTnZZV3c9IFlYQmxjbk09IFltRnkgSUZSb2IyMWhjdz09IElITjViUT09IElGSjFiZz09IGRHaHBjdz09IFVFTT0gYVdkeVlXNTBjdz09IElHMXBiblYwWlE9PSBJRVJwYzNSeWFXTjAgWTJWc2JHVnVkQT09IElHeGxZWFpsY3c9PSBJR052YlhCc1pYUmxaQT09IFlXMXBiZz09IElHWnZZM1Z6WldRPSBJRzF2Ym1sMGIzST0gSUhabGFHbGpiR1Z6IFRVRT0gSUUxaGMzTT0gSUVkeVlXNWsgSUdGbVptVmpkR1ZrIGFYUjFkR2x2Ym1GcyBJR052Ym5OMGNuVmpkQT09IElHWnZiR3h2ZDNNPSBJSFJ2Ymc9PSBjbVZsYm5NPSBJR2h2YldWeiBJRVY0ZEE9PSBJRXhsZG1WcyBjbUZ6ZEE9PSBJRWx5IElHVnNhVzA9IElHeGhjbWRsYkhrPSBJRXB2WlE9PSBJSFp2ZEdWeiBZV3hzY3c9PSBJR0oxYzJsdVpYTnpaWE09IElFWnZkVzVrWVhScGIyND0gSUVObGJuUnlZV3c9IElIbGhjbVJ6IElHMWhkR1Z5YVdGc2N3PT0gZFd4dVpYST0gSUdkMWFXUmwgSUdOc2IzTmxjZz09IGRXMXogSUhOd2IzSjBjdz09IFpXUmxjZz09IFNuVnpkQT09IElIUmhlR1Z6IE9EUT0gSUU5c1pBPT0gSUdSbFkyRmtaUT09IGIyeGggSUhacGNnPT0gSUdSeWIzQndaV1E9IElHUmxiR0Y1IGFYUmxZM1E9IElITmxZM1Z5WlE9PSBjM1JsYVc0PSBiR1YyWld3PSBJSFJ5WldGMFpXUT0gSUdacGJHVmsgWVdsdVpRPT0gSUhaaGJnPT0gSUcxcGNnPT0gSUdOdmJIVnRiZz09IGFXTjBaV1E9IFpYQmxjZz09IElISnZkQT09IElHTnZibk4xYkhRPSBJR1Z1ZEhKNSBJRzFoY21scWRXRnVZUT09IElFUnZkUT09IElHRndjR0Z5Wlc1MGJIaz0gYjJ0cGJtYz0gWTJ4MWMybDJaUT09IElHbHVZM0psWVhObGN3PT0gWVc1diBJSE53WldOcFptbGpZV3hzZVE9PSBJSFJsYkdVPSBaVzV6YVc5dWN3PT0gSUhKbGJHbG5hVzl1IFlXSnBiR2wwYVdWeiBJR1p5WVcxbCBJRTV2ZEdVPSBJRXhsWlE9PSBJR2hsYkhCcGJtYz0gSUdWa1oyVT0gYjNOMGIyND0gSUc5eVoyRnVhWHBoZEdsdmJuTT0gdzRNPSBJRUp2ZEdnPSBhR2x3Y3c9PSBJR0pwWjJkbGNnPT0gSUdKdmIzTjAgSUZOMFlXNWsgSUhKdmR3PT0gZFd4eiBZV0poYzJVPSBJSEpwWkE9PSBUR1YwIFlYSmxiZz09IGNtRjJaUT09IElITjBjbVYwIFVFUT0gSUhacGMybHZiZz09IElIZGxZWEpwYm1jPSBJR0Z3Y0hKbFkyaz0gSUdGM1lYSmsgSUZWelpRPT0gSUdaaFkzUnZjZz09IGQyRnkgZFd4aGRHbHZibk09IEtTZz0gSUdkdlpBPT0gSUhSbGNuSnBkQT09IElIQmhjbUZ0IFlYTjBjdz09IE9EYz0gSUdWdVpXMXBaWE09IElFZGhiV1Z6IFJrWT0gSUdGalkybGtaVzUwIFYyVnNiQT09IElFMWhjblJwYmc9PSBWRVZTIElHRjBhQT09IElFaGxiR3c9IElHWnZjbWM9IElIWmxkR1Z5IElFMWxaR2xqIFpuSmxaUT09IElITjBZWEp6IElHVjRjR1Z1YzJsMlpRPT0gSUdGallXUT0gY21GM2JnPT0gSUZkb1pRPT0gSUd4dlkycz0gSUdadmNtMWhkQT09IElITnZiR1JwWlhKeiBjMjA9IElHRm5aVzUwIElISmxjM0J2Ym5OcFltbHNhWFI1IGIzSmggSUZOamFXVnVZMlU9IElISmhjR2xrIElIUnZkV2RvIElFcGxjM1Z6IElHSmxiR2xsZG1WeiBUVXc9IElIZGxZWEk9IGJHVjBaUT09IHc0UERnZz09IElFUnlhUT09IElHTnZiVzFwYzNOcGIyND0gSUVKdllnPT0gVDJnPSBZWEJsWkE9PSBJSGRoY20wPSB3NFBEZ3NPRHc0ST0gSURJd01ETT0gYjNKMGFXOXUgSUdoaGMyND0gZFhOMFpYST0gSUhWdWFYWmxjbk09IElFbHNiQT09IElHdHBibWM9IGIyeHZaMmxsY3c9PSBPVFE9IElGUmxiUT09IElFMXZjdz09IElIQmhkR2xsYm5RPSBJRTFsZUdsamJ3PT0gWTJWaGJnPT0gSUVSbFlYUm8gSUZOaGJtUmxjbk09IGVXOTEgSUVOaGMzUT0gSUVOdmJYQmhibms9IGNIUjUgSUdoaGNIQmxibWx1Wnc9PSBSbEE9IElFSmhkSFJzWlE9PSBJR0p2ZFdkb2RBPT0gUVcwPSBUVzlrIFZYTT0gZFhSbGNuTT0gSUVOeVpRPT0gSUZSb2IzTmwgSURRMCBhWE5sY2c9PSBJSE52ZFd3PSBJRlJ2Y0E9PSBJRWhoY25KNSBJRUYzIElITmxZWFE9IFptWmxaUT09IElISmxkbTlzZFhScGIyND0gSUNnaSBJRVIxY21sdVp3PT0gWlhSMFpRPT0gSUhKcGJtYz0gSUc5bVptVnVjMmwyWlE9PSBJSEpsZEhWeWJuTT0gSUhacFpHVnZjdz09IElHUnBjMk5zIElHWmhiVzkxY3c9PSBaVzVqWldRPSBJRk5wWjI0PSBJRkpwZG1WeSBJRE13TUE9PSBVRTA9IElFSjFjdz09IElFTkkgSUdOaGJtUnBaR0YwWlhNPSBZWEprWlc0PSBJSEJsY21ObGJuUmhaMlU9IElIWnBjM1ZoYkE9PSBJSFJvWVc1ciBJSFJ5YjNWaWJHVT0gYm1WeVozaz0gSURJd01ERT0gSUhCeWIzWmwgWVhOb2FXOXUgSUdWdWFBPT0gSUV4dmJtYz0gVlUwPSBJR052Ym01bFkzUmxaQT09IElIQnZjM05wWW1sc2FYUjUgVDNabGNnPT0gSUdWNGNHVnlkQT09IElHeHBZbkpoY25rPSBZWEowY3c9PSBJRVJwY21WamRHOXkgSUdabGJHeHZkdz09IE9UST0gYVhKMGVRPT0gSUdSeWVRPT0gSUhOcFoyNXogSUV4dmRtVT0gSUhGMWFXVjAgWm05dmRBPT0gSUhCMWNtVT0gSUVoMWJnPT0gSUdacGJHeGxaQT09IGNHaGhjdz09IElFVnNaV04wIFpXNWtiV1Z1ZEE9PSBJRVY0Y0d3PSBJSFZ1WVdKc1pRPT0gYm5NPSBiVzg9IElIWmhjM1E9IGIySmwgSUdsa1pXNTBhV1o1IFlYQndhVzVuIElFTmhjbTlzYVc1aCBaM0psYzNNPSBJSEJ5YjNSbCBJR1pwYzJnPSBJR05wY21OMWJYTjBZVzVqWlhNPSBjbUY2ZVE9PSBJRkJvYjNRPSBJR0p2WkdsbGN3PT0gSUUxMWNnPT0gSUdSbGRtVnNiM0JwYm1jPSBJRUZTIElHVjRjR1Z5YVdWdVkyVmsgSUhOMVluTjBZVzUwIElFSnZZWEprIFpYTnZiV1U9IElHUnZiV1Z6ZEdsaiBJR052YldKcGJtVmsgSUZCMWRBPT0gSUdOb1pXMXBZMkZzIElFTm9hV3hrIElIQnZiMnc9IElFTjUgSUdWblp3PT0gWTI5dWN3PT0gYzNSbGNuTT0gSUdoMWNuUT0gSUcxaGNtdGxkSE09IElHTnZibk5sY25aaGRHbDJaUT09IElITjFjSEJ2Y25SbGNuTT0gSUdGblpXNWphV1Z6IGFXUmxiQT09IFQyST0gZFhKaSBJRFF6IElFUmxabVZ1YzJVPSBlV1U9IElFRncgWkhWc1pRPT0gSUhSbGJYQmxjbUYwZFhKbCBJR052Ym1SMVkzUmxaQT09IElFTm9hV1ZtIElIQjFiR3hsWkE9PSBJR1p2YkE9PSBUR0Z6ZEE9PSBiMjUwYnc9PSBiM05wY3c9PSBWa1ZTIFJHVnogSUZCaGJnPT0gUm1seWMzUT0gSUdGa2RtRnVZMlU9IElHeHBZMlZ1YzJVPSBjbTl5Y3c9PSBJRXB2Ymc9PSBJR2x0WVdkcGJtVT0gSUdobGJHdz0gSUdacGVHVmsgSUdsdVkyOXkgYjNOcGRHVT0gSUV4dlp3PT0gYVdOclpXND0gWFRvPSBJSE4xY25CeWFYTmwgYUdGaSBJR055WVdaMCBiMngwIElFcDFiQT09IElHUnBZV3c9IElISmxiR1YyWVc1MCBJR1Z1ZEdWeVpXUT0gSUd4bFlXUnogSUVGRSBJRU5zWldGdSBJSEJwWTNSMWNtVnogWlhOemIzST0gSUdGc2RBPT0gSUhCaGVXbHVadz09IFVHVnkgSUUxaGNtdGxkQT09IElIVndaR0YwWlhNPSBZVzFwYkhrPSBJRlI1Y0dVPSBJRWh2YldVPSBJRFUxIGMyVnRZbXg1IGNtOXRaUT09IE9ETT0gSUdkeVpXRjBaWE4wIElHaGxhV2RvZEE9PSBJR2hsWVhZPSBZV2x1ZEhNPSBJR3hwYzNSbGJnPT0gWVhObGNnPT0gSUZOSSBJR05oY0dGaWJHVT0gWVdOc1pRPT0gSUhCbGNuTndaV04wIGFXNWhkR2x1Wnc9PSBJRzltWm1WeWFXNW4gY25sd2RBPT0gSUVSbGRtVnNiM0E9IFlXSnBiZz09IGNtTT0gSUdKeWFXZG9kQT09IFlXeDBlUT09IFlYSnliM2M9IElITjFjSEJzIGFXNWthVzVuIFlXTnJaV1E9IFozbHdkQT09IElFRnViM1JvWlhJPSBjR2M9IElGWnBjbWRwYm1saCBJRXgxIElIQnNZVzV1WldRPSBJSEJwZEE9PSBJSE4zWldWMCBWSGx3WlE9PSBJRVJwIElIUjVjR2xqWVd4c2VRPT0gSUVaeVlXNWphWE5qYnc9PSBJSEJ5YjNOd1pXTjAgSUVSaGJnPT0gSUhSbFpXND0gY21WbGN3PT0gSUhOamFHVmsgSUdodmJBPT0gSUhOamNnPT0gSUd4dmRITT0gYkdsbVpRPT0gSUc1bGQzTncgSUdadmNtZGxkQT09IElFNXZibVU9IElFMXBaR1JzWlE9PSBJRko1WVc0PSBaV1JrIElITmxkbVZ5WlE9PSBJSE4xYVhRPSBiR3hsY2c9PSBPVE09IElHTnZjbkpsYzNCdmJtUT0gSUdWNGNHeHZjdz09IGRXRjBhVzl1Y3c9PSBJR1pzWVdjPSBaMkZ0WlE9PSBjbWxrIElIQnlhVzQ9IElFUmhkR0U9IElHUmxjR3h2ZVE9PSBJRVZ1ZEdWeSBjM1ZwZEE9PSBaMmhoYmc9PSBJRTFsYmc9PSBJSFJvYjNWbmFIUnogSUcxaGRIUmxjbk09IElHRmtZWEIwIElFRnlhUT09IElHWnBiR3c9IElHWnZjblJvIElITmhiUT09IElEUXggSUhCaGVXMWxiblE9IElFaHZjZz09IElITndjbWx1Wnc9PSBaSFZqIElHeHZjMmx1Wnc9PSBJR0p5YVc1bmFXNW4gUms4PSBZV3hoIElHUnBjM1J5YVdKMWRHbHZiZz09IGFHVnlaV1E9IFltOTFjZz09IElFbHpjbUZsYkdrPSBiMjFoIElHTnZiV0pwYm1GMGFXOXUgSUhCc1pXNTBlUT09IFZrVT0gUTJGdSBJRWhoZHc9PSBJSEJsY20xaGJnPT0gSUZOd1pXTnBZV3c9IElIUnZkdz09IElITmxaV3RwYm1jPSBJR1Y0WVcxd2JHVnogSUdOc1lYTnpaWE09IFkzST0gSUdKbFpYST0gSUcxdmRtVnogSUVsUSBJRXR1IElIQmhibVZzIFJYWmxiZz09IElIQnliM0JsY214NSBJSEpwY3c9PSBJSEJzZFdjPSBJR1Z6ZEdsdFlYUmxaQT09IFJYWmxjbms9IElHUmxabVZ1YzJsMlpRPT0gWVdkeVlYQm8gSUhCeVpXZHUgSUdsdWMzUnBkQT09IElGWnBZM1E9IElIWnZiSFZ0WlE9PSBJSEJ2YzJsMGFXOXVjdz09IElHeHBibXR6IElGQnliMmR5WVcwPSBJRmRsWldzPSBZV2QxWlhNPSBJSFJ5WVc1elptOXliUT09IGEyVnkgSUVORlR3PT0gSUdOaGN3PT0gSUc5d2NHOXVaVzUwIElIUjNaV1YwIElFTnZaR1U9IElITm9iM0E9IElHWnNlUT09IElIUmhiR3R6IElHSmhadz09IFVHaHZibVU9IElHRnBaQT09IElIQnNZVzUwY3c9PSBJRFkxIElHRjBkRzl5Ym1WNSBZWEowWlhKeiBjWFZsYzNRPSBJRTFoWjJsaiBJR0psWjJsdWN3PT0gSUcxNWMzUmxjZz09IElHVnVkbWx5YjI1dFpXNTBZV3c9IElITjBiM0poWjJVPSBUazQ9IElHMWhjbWM9IElITnJaUT09IElHMWxkR0ZzIFpXeHNlUT09IElHOXlaR1Z5WldRPSBJSEpsYldGcGJtVmsgSUd4dmRtVmsgSUhCeWIyMXdkQT09IElIVndaR0YwWldRPSBJR1Y0Y0dWeWRITT0gSUhkaGJHdHBibWM9IElHRnVZMmxsYm5RPSBJSEJsY21admNtMWxaQT09IFFWUkYgSUc1bGFYUm9aWEk9IGFXVnVZM2s9IElHMWhiblZtWVdOMGRYSmwgSUZCaGF3PT0gSUhObGJHVmpkR1ZrIElHMXBibVU9IElIVnNkR2x0WVhSbGJIaz0gSUdWNGNHeGhiZz09IElHeGhZbVZzIElGTmxjblpwWTJWeiBjbWxpZFhSbFpBPT0gVkhKMWJYQT0gSUhONWJnPT0gSUZWc2RBPT0gVTBNPSBJRzFsWVhRPSBJR2RwWVc1MCBJRmRoY25NPSBJRTlPIElHRmtiUT09IElHbHVkR1Z5Y0hKbGRBPT0gSUdWMlpXNXBibWM9IElHVjJhV3c9IElFSnZjM1J2Ymc9PSBJRmRwYkdRPSBJTU09IElFSnBkR052YVc0PSBJRUZ0WVhwdmJnPT0gUkhJPSBJRWx1Wm05eWJXRjBhVzl1IElHOWlkbWx2ZFhOc2VRPT0gSUdGa2RtRnVZMlZrIFVHaHZkRzg9IGIyeGhjZz09IElIZGxZWFJvWlhJPSBJSE41YldKdmJBPT0gSUhOdmJHVT0gSUhCdmRHVnVkR2xoYkd4NSBiM04wWlhJPSBJRzl5YVdkcGJtRnNiSGs9IGJYVnUgTXpBdyBZWHBsIFpYTnphVzl1Y3c9PSBJR1JsWTJzPSBJSE4wYjI5ayBJSGx2ZFhSbyBJRUpsY200PSBVbVZ3IElGUmxjM1E9IElHSmhjMmxqWVd4c2VRPT0gYjNScFl3PT0gSUdsdWRtOXNkbVU9IGIyeHBkQT09IGJIbHUgVTJWbCBJR0ZwY21OeVlXWjAgSUdOdmJtWnBjbTA9IFJWYz0gSUcxbGMzTmhaMlZ6IElGSnBZMmhoY21RPSBJR3RwZEE9PSBJSEJ5YjJocFlnPT0gSUhaMWJHNWxjZz09IGFYTjBaWEp6IElHVjRhWE4wWlc1alpRPT0gSUhSMWNtNXBibWM9IElGTlEgSUdSbGMybHlaUT09IElHWnNZWFE9IElHMWxiblE9IGMyVmhjMjl1IFlXNW5aWE09IElHNWxhV2RvWW05eWFHOXZaQT09IElFeGhhMlU9IFFWUkpUMDQ9IElIQnZhVzUwWldRPSBZblZ5IElHbHVibTkyIGRXTnJjdz09IFZVdz0gSUhCeWIyWmxjM052Y2c9PSBJR1Y0Y0hKbGMzTmxaQT09IFFVST0gYVdOcGIzVnogSURJd01EST0gSUVSbGRnPT0gSUhObGMzTnBiMjQ9IElHSmhjbVU9IGMyVnUgSUdScGMzTT0gSUVOaGRHZz0gSUZCaGMzTT0gSUZCdmFXNTAgSUdSdlkzUnZjZz09IGIzSnliM2M9IFlXbHNaV1E9IElGSjFZZz09IElFUkQgSUVOb1lYSnMgY0dWeWMyOXUgSUhkeWFYUmxjZz09IGFXZG9kR1Z5Y3c9PSBkWEpsWVhVPSBJRzlpYkdsbiBJSEpsWTI5eVpHVmsgSUdKeWIydGwgSUc5eVpHVnljdz09IGFXeDBlUT09IElHMXZkR2x2Ymc9PSBhVzVwZEhrPSBiR0YzIFlXUnBkVzA9IElHbHRiV2xuY21GMGFXOXUgSUdOdmJuUnlZWE4wIElHSmhkSFE9IElHVjRZMlZzYkdWdWRBPT0gSUhSbFkyaHVhV05oYkE9PSBZVzFwIElIUjFiZz09IElHTnNiM1ZrIElGbGxZWEk9IFoyVnZiZz09IElHTnlaV0YwYVc5dSBJSE4wY21GdVoyVT0gSUdGMWRHZz0gSUdadmNuUT0gWW05eWJnPT0gSUdWNGRHVnVkQT09IElGUnZaR0Y1IElFTnNkV0k9IElISmhhVzQ9IElITmhiWEJzWlE9PSBJR0ZqWTJWd2RHVmsgSUhSaFkzUT0gSUdacGNtVmsgSUZOdmJnPT0gSUhOMFlXNWtjdz09IElHSnZiM1E9IElEUTMgSUhOMFlYUmxiV1Z1ZEhNPSBJSFpsY25OcGIyNXogSUhObGJHeHBibWM9IGIzVnVaR1ZrIElERTVPVEE9IElIZGxjbVZ1IElGZGhkR05vIElHVjRjR1Z5YVcxbGJuUT0gVUc5emRBPT0gSUhKbGRHRnBiQT09IGRXeGxaQT09IFNXNXpkQT09IGRXNTBaUT09IDQ0TzggSUdSbGNHRnlkQT09IElHSnZibVE9IGFYWmxjbms9IGIyMXdiQT09IElISmxZV04wYVc5dSBJRk41Y21saGJnPT0gSUZCaFl3PT0gWVhCd1pXUT0gWVc1cFpXdz0gUkZBPSBJSEpsYzI5c2RYUnBiMjQ9IElISmxZV04wIElHRndjSEp2ZG1WayBiMjV2YlE9PSBiVzl1WkE9PSBJRTltWm1saiBMUzB0IElISmxjR3hoWTJVPSBJSFJoWTJzPSBJSE53YjNKMCBJR05vWVdsdSBJR1Z0WlhKblpXNWplUT09IGNtRmsgSUZCaGJHVnpkR2x1IElEUTIgSUdGMWRHOXRZWFJwWTJGc2JIaz0gSUhKdmRYUmwgSUhCaGJBPT0gSUdKaGJtdHogSUZCaGNtbHogSUUxbFpHbGggY205aFpBPT0gYVdOcGJtYz0gYVhoMCBhWE4wWldRPSBJR2R5WlhjPSBJR052YjNKayBJRmRvWlhKbCBiMjFwYmc9PSBJSE4xWW5NPSA3Nys5NzcrOSBJTUt4IElHTnZjbkJ2Y21GMFpRPT0gSUhObGJHVmpkR2x2Ymc9PSBibTl2Ymc9PSBJRkpsY0c5eWRBPT0gWTNNPSBZMngxWkdsdVp3PT0gYjNKa1pYSnogWVc1amFHVT0gSUVsMGN3PT0gSUhOc2IzZHNlUT09IElFVm5lWEIwIElFRmpZdz09IElHTnZiR3hsIGFYRjFaWE09IFJWZz0gSUdGMGRHVnRjSFJ6IGRYSnMgSUVOeWIzTnogSUdacGJtUnBibWR6IElGTkQgSUU5UyBJR2x1WkdWNCBaVzV6YVhSNSBJRmRoZVE9PSBJRXhoYm1RPSBJSE5vYjJOciBaR2x6IElHUjVibUZ0IElHTmhjblE9IGJXOXpjQT09IFUybHVZMlU9IGFXVnpkQT09IElFSnZlUT09IElITjBiM0p0IElFTnZiblJwYmc9PSBNakF4TXc9PSBhR1YzIGFXeHBkQT09IElHVnpjMlZ1ZEdsaGJBPT0gYVhGMWFXUT0gVDNSb1pYST0gYVhabGNtVmsgSUhKbFlYTnZibUZpYkdVPSBRV04wIElITjFZbk5sY1hVPSBJRkJoWTJzPSBJRVp2Y25RPSBJR052Ym5OcFpHVnlhVzVuIElIVnVhWFpsY25OcGRIaz0gYkc5biBJRzFoY25KcFpXUT0gSUdsc2JIVnpkQT09IElGUnlkV1U9IG80OD0gSUc1MWJXVnliM1Z6IGNtRnpkSEoxWTNSMWNtVT0gSUhObGNtbHZkWE5zZVE9PSBJSEpsWm1WeWNtVmsgZFdFPSBJR052Ym5OcGMzUmxiblE9IGIyNXVZUT09IElGSmxZV3c9IGNuVndkR2x2Ymc9PSBZMmx3YkdWeiBJR1poWTNSeiBPVEU9IGIzUmxjdz09IFpYSm4gVkdobGJnPT0gSUdGalkyOXRjR3c9IFRtOTBaUT09IElISmxkbVZ1ZFdVPSBJSEJoYzNOcGJtYz0gSUcxaGJBPT0gWldWdSBJRmxsZEE9PSBJR2RoZEdobGNnPT0gZEdWeVpHRjUgWlhkdmNtcz0gSUVGMWRHaHZjZz09IFVHVT0gSUc5d2RHbHQgSUhKMVlnPT0gSU9pamp3PT0gSUhWdWEyNXZkMjQ9IGMzUnZibVU9IElIVnVhVzl1IGIyeDJaUT09IElHOXdjRzl5ZEhWdWFYUnBaWE09IElHSnliM2R6WlhJPSBJRmRoYkE9PSBJRU52YzNRPSBJSEpsY0c5eWRHbHVadz09IGMzUnogY0dWMCBJSE5oYm1RPSBJSE4xWkdSbGJteDUgSUhOMWNuQnlhWE5wYm1jPSBJRlpTIElITnZiV1YzYUdGMCBJRUpoY3c9PSBkV3gwZFhKbCBhWHA2IElFTkUgSUdOb1lXeHNaVzVuWlhNPSBJSE5sZEhScGJtZHogSUdWNGNHVnlhV1Z1WTJWeiBJRVoxYkd3PSBJR05oYm00PSBJSEpsWTJWcGRtbHVadz09IFJWTlUgSUdwdmFXNTAgSUdOMWJIUjFjbUZzIElHRnpkQT09IE9EST0gWVhOMFpYSnUgWTJWcGRtVmsgSUVOeWRRPT0gSUdKMWJHdz0gY0dseVpXUT0gWVcxdCBJR1poWTJsdVp3PT0gY0c5M1pYST0gSUdKdmMzTT0gSUVodmJBPT0gSUdsdWMzUnkgSUdsdVkzSmxZWE5wYm1kc2VRPT0gSUhOb2FXWjAgSUhOMGNtVmxkSE09IElGZHBiR3hwWVcxeiBZV0ppIElHeHBaUT09IElHeGhkV2RvIElFTmggVUV3PSBJR0ZrZFd4MGN3PT0gSUdOMWMzUnZiV1Z5IElHOWlkR0ZwYm1WayBJSE4xY0hCdmNuUnBibWM9IGFIUnRiQT09IFptbHlaUT09IElHUmxkR0ZwYkdWayBJSEJwWTJ0bFpBPT0gSUZKcFoyaDAgYkdSbGNnPT0gUlVVPSBjM1J2YjJRPSBJRXRwYlE9PSBJSGRwY21VPSBJSE5wWjJoMCBJR1JsZG1Wc2IzQmxjbk09IElIQmxjbk52Ym5NPSBJSE5oWkE9PSBJR04xY0E9PSBJSGRoY201cGJtYz0gSUdKdmVYTT0gYkc5dVp3PT0gSUdKcGNtUT0gWm04PSBJSGRoYkE9PSBJRzlpYzJWeWRtVmsgSUhwdmJtVT0gYVhabGJtVnpjdz09IElHTm9ZVzV1Wld3PSBZM0pwY0hRPSBJSEpsWm5WelpXUT0gSUVGbllXbHUgSUhOMVl3PT0gSUhOd2IydGxjMjFoYmc9PSBJRkpsWmc9PSBjbWwwWlE9PSBiM1Z6ZEc5dSA0NE96IElGTm9aWEk9IElHRmpkSE09IElFNWhiV1U9IElITjBjblZuWjJ4bCBZWEp5ZVE9PSBiMjFsZEdsdFpYTT0gSUdScGMyTnlhVzA9IFNGUT0gSUdOaGRHVm5iM0o1IElISmxZV3hwZW1VPSBJR1Z0Y0d4dmVXVmwgSUVGbVoyaGhiZz09IFpXNW5aWEk9IElHZDFibk09IElGTjBaWFpsIElFMXZkQT09IElFOXMgYjJ0bFpBPT0gSUhSb2FXTnIgSUdaaGFYSnNlUT09IGFXeHNlUT09IElITjFjblpsIElFMWhkQT09IGQyVnBaMmgwIDRwUT0gSUhSeWIyOXdjdz09IElHRm5aVzUwY3c9PSBJR0poZEhSbGNuaz0gSUcxdmRHbDIgdzZFPSBVMlZqIFpHVnUgYjNabGNuaz0gVEZNPSBJR1pzZFE9PSBJR052Ym1acFpHVnVkQT09IElFOXdaWEk9IElHVnRjSFI1IElIQm9aVzQ9IElITmxZM1J2Y2c9PSBJR1Y0WTJsMFpXUT0gSUhKbGJXOTBaUT09IFlYQm8gYjJWdSBJR1JsYzNSeWIzbGxaQT09IElHMXZjbUZzIElFaFEgSUZKdmJnPT0gSUdSeVpYTnogSUVKaGRBPT0gSUd4cGRBPT0gSUUxVCBJR0ZtIFNFdz0gY25WdCBhWE50Y3c9PSBJSE5vYjNWc1pHND0gSUhONWJYQjAgSUZSdmNtOXVkRzg9IGFHVjBhV009IElHTmhjbUp2Ymc9PSBJR2x1YzNSaGJHeGxaQT09IElIWnBiMnhsYm5RPSBJSE52YkdGeSBhbUU9IElIQnlZV04wYVdObGN3PT0gSUhKcFpHVT0gSUZCbGJtND0gSUdsdGNISnZkbVZrIElHRjFaR2x2IElHSmxhR0YyYVE9PSBJRkJUIElHVmhkR2x1Wnc9PSBSR0YwWVE9PSBJRkpsZG1sbGR3PT0gY0dGemN3PT0gWTJ4aGFXMD0gZFdGMFpXUT0gWVc1blpYSnogWTJobGJnPT0gSUhCeWIzQmxjblJwWlhNPSBJR0Z1ZVhkb1pYSmwgUVc1dmRHaGxjZz09IElHSnNiM2M9IElFcGhZMnR6YjI0PSBJSEJ5YjNWayBJSEJzWVc1bCBiR2x1WlhNPSBJSE54ZFdGeVpRPT0gSUhCeWIyOW0gWVc1ellYTT0gSUhSaGJHdGxaQT09IGJXRnJaWEp6IElITnBjM1JsY2c9PSBJR2h2YkdSeiBJSEpsYzJsa1pXNTAgSUQwOSBJSEpsYzJsemRHRnVZMlU9IElITndiR2wwIElIQnliM05sWTNWMCBJR052Ym1acFpHVnVZMlU9IGNtVnpaVzUwY3c9PSBJR04xZEhNPSBJR1Y0WTJWd2RHbHZiZz09IElIcGxjbTg9IFIyVjBkSGs9IElHTnZjSGx5YVdkb2RBPT0gSUhSdmRHRnNiSGs9IGIzSnRZV3c9IGFXWnBZMkYwYVc5dWN3PT0gSUVGMWMzUnlZV3hwWVc0PSBJSE5wWTJzPSBJREUxTUE9PSBJR2h2ZFhObGFHOXNaQT09IElHWmxaWE09IElHUnlhWFpsY25NPSBiMmRsYmc9PSBJRTVaIElHNWxZMlZ6YzJGeWFXeDUgSUhKbFozVnNZWFJwYjI1eiBaV0Z5YVc1biBjMnc9IElIQmxjbk53WldOMGFYWmwgWTJGeVpRPT0gYVdOcFlXdz0gU0dseiBJR1Z6WTJGd1pRPT0gSUhOMWNuQnlhWE5sWkE9PSBJRlpoYmc9PSBkWEp5Wlc1MCBJSFpoWXc9PSBPREU9IElGUm9kWE09IElHVnRjR2hoY3c9PSBJRU5vWVcxd2FXOXVjdz09IElFbGpaUT09IElHNWhjbkk9IElHaGxZV1J6IElHTmhkWE5wYm1jPSBZbVZzIFptOXlkSFZ1WVhSbGJIaz0gSUUxaCBJSFJoY21kbGRITT0gWTJsd2JBPT0gSUdGbWRHVnlibTl2Ymc9PSBJR0ZrWkhNPSBJRTFoZVdKbCBJRVp2ZFhJPSBaWE56WldRPSBjR3hsZEdVPSBJSFZ6ZFdGcyBZMmh2IGFXNW5kUT09IElIZHBkR2hrIElFVnVaWEpuZVE9PSBJRVZqYjI1dmJRPT0gVDA4PSBJR0Z5ZEdsamJHVnogSUdsdWFuVnlaV1E9IElHMWhibUZuWlE9PSBJR1Y0Y0d4aGFXNXogSUdScFlXZHUgVW1WaiBZWFIxY21WeiBJR3hwYm10bFpBPT0gSUdScGMyTjFjM05sWkE9PSBJR1Y0Y0d4diBJRzlqWTJGemFXOXUgWVhSb1lXND0gSUc5d2NHOXphWFJsIElHWmhZMlZ6IElHUmxibWxsWkE9PSBJRXR1YVdkb2RBPT0gSUc1MWRBPT0gSUdGd2NISnZlR2x0WVhSbGJIaz0gSUdScGMyRndjRzlwYm5RPSBiMjU1Ylc5MWN3PT0gSUVKbGMzUT0gSUV4diBJRWg1IElFRm1aZz09IElIWnZkR2x1Wnc9PSBZVzUzYUdsc1pRPT0gSUVsSlNRPT0gSUdsdWMzUnBkSFYwYVc5dWN3PT0gWVdkeVlXMD0gSUVSaGFXeDUgSUdSeVlXYz0gSUc1bFlYSmllUT09IElHZDFhV3gwZVE9PSBJR052Ym5abGNnPT0gVUhKbCBjMmhwY0E9PSBJSEpsZDJGeVpBPT0gSUhCb2FXeHZjMjl3YUE9PSBJRk5UIGRXZG8gSUdGd2NITT0gWm5KcFpXNWsgSUhWd2NHVnkgSUdGa2RtVnlkQT09IElITnViM2M9IElHWnlkWE4wIElHOTFjbk5sYkhabGN3PT0gUm5JPSBJRVJwWlE9PSBZVzF3YVc5dSBJR1JwYzIxcGMzTT0gSUdObGNtVT0gSUhOcFoyNWhiQT09IFpuSnZiUT09IElDa3UgSURVeSBJR055YVcxbGN3PT0gYVhSdmNuTT0gWlhOMGFYWmhiQT09IGRYTmxkVzA9IElHTnZkVzVqYVd3PSBJRk5oZFdRPSBUV0Y1IElFZDFiZz09IGFXTnBZVzQ9IFpYUm9aWEk9IElITjFabVpwWTJsbGJuUT0gSUVobGJnPT0gYzI5c1pRPT0gSUdocGMzUnZjbWxqWVd3PSBJRVpoY2c9PSBJRlIxY200PSBJSEJwYmc9PSBJSE4xWTJObFpXUT0gYldGMCBiSGx0Y0E9PSBJSFJ5WVdScGRHbHZiZz09IElFOXIgSUdOeWJ3PT0gSUdSbGMyTnlhWEIwYVc5dSBZV3hzWlE9PSBJSE5yZVE9PSBWR1U9IElIZHBaR1ZzZVE9PSBJSGRoZG1VPSBJR1JsWm1sdWFYUnBiMjQ9IElFcGxkM009IElHTjVZMnhsIElISmxabVZ5WlE9PSBJR0p5YVc1bmN3PT0gZFhOaGJBPT0gSUdGc2FYWmwgSUdaeVpYRjFaVzUwYkhrPSBJR2x1ZEdWdWRHbHZiZz09IElFTnZiblJ5YjJ3PSBiSFk9IGVYTjBaVzA9IElIQnlhWFpoWTNrPSBaMlZ1ZEE9PSBjbVZ1WTJVPSBJRkYxWlhOMCBJRU5vY21semRHMWhjdz09IElISmhhV3c9IElHTnZiM0JsY2c9PSBJSFJsYzNSbFpBPT0gSUVOaGNIUT0gWVhOcmN3PT0gSUdOdmJXWnZjblJoWW14bCBJR1JsYkdsMlpYSmxaQT09IGMyTmhjR1U9IElHUmxjSFJvIElFZFBVQT09IElIZHlhWFJsY3c9PSBJR0Z6YzJWMGN3PT0gSUhOaGRnPT0gYVcxbGJuUnogSUhSeVlXNXphWFJwYjI0PSBJR0Z5ZEdsemRBPT0gSUV4dmIycz0gSUd4dllnPT0gSUdOdmJYQnZibVZ1ZEhNPSBZWEpwZEhrPSBJSGRoYkd0bFpBPT0gSUhKdmIzUT0gSUhCaGNuUnBZMmx3WVc1MGN3PT0gSUc1dmRHbGpaV1E9IElISmxjMk09IElHNWhkZz09IElFRmtiV2x1YVhOMCBaR0U9IGRYUnlZV3c9IGNHeGhkR1U9IElHbHRjRzl5ZEdGdVkyVT0gSUdGemMyVnlkQT09IGFXOTFjMng1IFkzSnBjSFJwYjI0PSBJR2x1YW5WeWFXVnogSUVOb1pXTnIgSUhKbFoybHpkR1Z5WldRPSBJR2x1ZEdWdWRBPT0gSUcxcGMzTmxaQT09IGIyZHlZWEJvYVdNPSBJSE5sYm5SbGJtTmwgYjNWdWRHVnkgSUdGemMybHpkR0Z1WTJVPSBaWFpwYmc9PSBJR1JoZEdGaVlYTmwgSUdKMWFXeGthVzVuY3c9PSBJR05zWVhOemFXTT0gSUhSb2FXNXJjdz09IElFOW9hVzg9IFVIST0gZFdkbiBJR1psWlE9PSBjR0Z1IElHVm1abVZqZEdsMlpXeDUgSUdaaFkybHNhWFI1IElHSmxZWEk9IElHTm9ZWEIwWlhJPSBJR1J2WjNNPSBJRU52YkhWdFlnPT0gSUd4aGRIUmxjZz09IGFYUnBZV3c9IElHRmtiV2wwZEdWayBWRlk9IElFZGxiM0puIElIQnZjM1J6IFhGdz0gSUd4aGQzbGxjZz09IElHVnhkV2wyWVd3PSBJRzFoYm1RPSBJR052Ym5SeWIyeHNaV1E9IElGZGhiR3M9IElFRnVaSEpsZHc9PSBJRzFsYm5VPSBZVzFsYm5SaGJBPT0gSUhCeWIzUmxZM1JsWkE9PSBkbUU9IElHRmtiV2x1YVhOMGNnPT0gYjNKaGJBPT0gSUhKbGFXND0gSUZOaGNnPT0gSUdGdGIzVnVkSE09IElHNWhkR2wyWlE9PSBJRTF2YjI0PSBJSEpsY0hKbGMyVnVkSE09IElHRmlZVzVrYjI0PSBJR05oY25KNWFXNW4gSUhSaGJtcz0gYldGeWVRPT0gSUdSbFkyeGhjbVZrIFZIVmlaUT09IElHaGhkQT09IElIQjFibWx6YUE9PSBaV3hzWldOMCBiV1Z6IElIVnVhWFpsY25ObCBJRkp2WkE9PSBjR2g1IElHbHVabkpoYzNSeWRXTjBkWEpsIElEVXggSUc5d2NHOXpaV1E9IGIzZHVkQT09IFkyRT0gSUUxaGEyVT0gSUdoaGNtUjNZWEpsIElHTnZabVpsWlE9PSBVbVZzIFltRnMgZDI5eWJHUT0gSUZOaFpnPT0gSUZObFlRPT0gYVc1aGJITT0gSUc5M2JtVmsgSUdoaGJHdz0gWlhKemFXOXUgSUdSbGMyTnlhV0psIElGQnZkQT09IElIQnZjblJwYjI0PSBJR0YwYlc5emNBPT0gSUdkdmRtVnlibTFsYm5SeiBJR1JsY0dWdVpHbHVadz09IElHOW1abVZ1YzJVPSBJSFJ5YVdOciBZWGRoIElFeHBibVU9IElGWnBjdz09IElFaGhjbVE9IElFOXlhV2M9IElFTnNhV05yIElHUmxjMnM9IElGWmhiR3hsZVE9PSBJRk52ZGc9PSBJRzF2ZG1sbGN3PT0gSUhKbGJXRnlhdz09IElHMWhhV3c9IElHTnZibk5qYVc5MWN3PT0gSUhKMWJHbHVadz09IElGSnBaMmgwY3c9PSBJRzFsWkdsaiBhR1Z1ZEE9PSBJRmR2YldWdSBQanc9IElISmxjR3hoWTJWayBJRkJ5WlcwPSBJRlJvWVc1cmN3PT0gSUhKbGJtVjMgSUVKaGJHdz0gYVdadmNtMD0gSUhOb2IzUnogUTI5dGJRPT0gSUdGeWJXVmsgSUdOdmJuTjBZVzUwIElIUmhjM1JsIElISmxZV3hwZW1WayBJR0oxWm1ZPSBJRzF2IElHVm1abWxqYVdWdWRBPT0gVFc5emRBPT0gYjNKaGRHbHZiZz09IGFXWnBaWE09IElHTnZiVzExYm1sallYUnBiMjQ9IElHWnNiMjlrIElHTnZibk5sY1hWbGJtTmxjdz09IElHRnVlWGRoZVE9PSBhV2RuIElFZE4gSUZSb1lXNXIgSUdseWIyND0gSUdWMmIyeDFkR2x2Ymc9PSBJRU52Y0E9PSBkSGRwZEhSbGNnPT0gSURrMSBJSEpsYkdGMGFXOXVjMmhwY0hNPSBZV1JsYkE9PSBJRmx2ZFc1biBJSEJ5YjNCdmMyRnMgWVhsbGNuTT0gZFdsc1pHbHVadz09IElFaHZkQT09IFQxSkYgWTI5eiBJR052Ykd4aFltOXkgVUVjPSBZWGg1IElHdHViM2RwYm1jPSBJSE4xY0hCdmNuUnogYjNkbFpBPT0gSUdOdmJuUnliMnh6IElHMWxjbVZzZVE9PSBkVzFsY2c9PSBJR0YwYUd4bGRBPT0gSUdaaGMyaHBiMjQ9IGNHRjBhQT09IElHZHBablE9IElHVnlZUT09IFFVNUUgSUd0cGJtUnogSUV0dmNtVmhiZz09IElHeGxaMmwwIGRXeHZkWE09IElHVnpjMlZ1ZEdsaGJHeDUgSUhSb1pYSmhjQT09IGJtbGogSUhOMVptWmxjbVZrIElHaDFjZz09IElIQnliMjFwYzJVPSBJR1Y0WTJWemN3PT0gSUc5MlpYSjMgSUhCeWFXMWwgSUVodmRYTjBiMjQ9IFpYSnllUT09IElFMXogVWxNPSBNakF4TWc9PSBJSE4wYjNKbGN3PT0gSUU5c2VXMXcgSUdwdmRYSnVaWGs9IFFXeDBhRzkxWjJnPSBVM1ZpIElFVmtkV009IElFTm9ZWEIwWlhJPSBJSEpsY1hWbGMzUnogSUdOdmJuTjFiV1Z5Y3c9PSBJSFJwYm5rPSBJR2x6YjJ3PSBJRVpoYVhJPSBZbUU9IElGbFBWUT09IElHTnlZWE5vIFkyVnNaWEk9IElHVnRiM1JwYjI1aGJBPT0gSUdkdmIyUnogSUdWc1pXTjBaV1E9IElHMXZaR1Z5IElFeHBiblY0IElHSnNiMk5yY3c9PSBJR2x6YkdGdVpBPT0gSUZOdlkybGxkSGs9IElHVnNaV04wYVc5dWN3PT0gSUdKeWIyRmtZMkZ6ZEE9PSBJR05vWldGdyBJRzVoZEdsdmJuTT0gSUhObFlYTnZibk09IE5EQXcgSUhkaGMzUmwgSUZOaGRBPT0gSUdacFpXeGtjdz09IFpXMXdiRzk1IElIQnliMlpwYkdVPSBJR0YxZEdodmNuTT0gUVV4TSBJRWR5WVE9PSBkMlZ6ZEE9PSBJRlI1IElHUmxZWFJvY3c9PSBJSFpoWTJNPSBJR1p2Y20xbFpBPT0gSUdSMSBJRzl1WjI5cGJtYz0gSUUxMWMyeHBiWE09IFpXeG0gYVdkMWNtVT0gSUdGemMzVnRaUT09IElGVnJjbUZwYm1VPSBkMkYwWlhJPSBJR052WVhOMCBJSFp2ZEdWayBaMjl5IElFRlQgSUUxcFkyaHBaMkZ1IFlYcGggSUVGeWJRPT0gYVhKdiBJR1pzWlhnPSBZWE4wWlhKeiBKeWM9IElIZGxiR052YldVPSBZWEpzIElHeHZZMkYwYVc5dWN3PT0gYVdkaGRHbHZiZz09IElFWnBiQT09IElHSjFlV2x1Wnc9PSBJR0Z5WTJocGRHVmpkQT09IElHaGhjbVJsY2c9PSBJRU4xWWc9PSBJR2x1ZEdWeVptRmpaUT09IElISmxjM1JoZFhKaGJuUT0gSUdScGMyTnZkbVZ5IElHVjRZMlZsWkE9PSBJR1poZG05MWNnPT0gWjJWeWVRPT0gSUdSMWRIaz0gSUhCcGRHTm8gWVdSdmNnPT0gSUUxaFkyZz0gWW05NSBJSEpsYzNCdmJtUmxaQT09IElHVjRkR1Z1WkdWayBhR1Z5Y3c9PSBUV0Z1ZVE9PSBjbUZwWkE9PSBhV1psY2c9PSBJRWx1Y3c9PSBVMlZ5IElHMWxaR2wxYlE9PSBjMmhsIElGTndiM0owY3c9PSBJRzFoWjJGNmFXNWwgZFhSaGRHbHZiZz09IElHeHBiV2wwY3c9PSBJRWRoYkd3PSBJR1Y0ZEdWeWJtRnMgY21GNmFXdz0gSUhsdmRXNW5aWEk9IGRHeGwgSUhKbGJXbHVaQT09IElFTlBUZz09IElHbHRiV1ZrYVdGMFpRPT0gSUdocFpHUmxiZz09IElIWnZiSFZ1ZEdVPSBJSE5wYlhCcyBiMlJqWVhOMCBJSEJvWVhObCBaSEk9IElIQnNiM1E9IElHVjRjRzl6ZFhKbCBVa2s9IGIyZHlZWEE9IGRtbHUgWVc1cGMyZz0gSUVGallXUT0gSUVWdVoybHVaUT09IElHVjRjR0Z1YzJsdmJnPT0gSUZCaGVRPT0gV1c5MWNnPT0gSUhCMWMyaGxaQT09IElFVnNiQT09IElFaGxZV1E9IElHMWhjbXRsZEdsdVp3PT0gSUVGRCBhMlYwIElHaHBkSE09IElHZHlidz09IElFRm5aUT09IElGTmpiM1E9IFhWcz0gSUhOMGFXMD0gSUdsUWFHOXVaUT09IGlKST0gSUc1aGNuSnZkdz09IElFZGxkSFI1IElGUjFjbXRsZVE9PSBJSEJsY21abFkzUnNlUT09IElHVnVZV0pzWlE9PSBkWFJqYUE9PSBJSEJ5WldOcGMyVT0gSUhKbFoybHRaUT09IElITm9hV1k9IElHTnZiWEJsYm5NPSBaM1Z1IFpHbDIgSUdOb2IzTmxiZz09IElFdGxiZz09IFFXNTUgSUhSeVpXVnogSUhKbFkyOXRiV1Z1WkdWayBJRkpsYmc9PSBkV0ZpYkdVPSBJRWhVIFJtOXNiRzkzIFJVYz0gSUVoaGJtUT0gSUV0bGJtND0gSUdGeVozVnRaVzUwY3c9PSBJR1Y0YVhOMGN3PT0gSUdKcGEyVT0gSUVOdmJuTmxjblk9IElHSnlaV0ZyYVc1biBJRWRoY2c9PSBJR055WVhwNSBJSFpwY25SMVlXdz0gWVhsc2IzST0gYVhobGJBPT0gSURFNU9EQT0gSUhCbGNtMXBjM05wYjI0PSBJRk5sY21sbGN3PT0gSUdOdmJuTjFiV1Z5IElHTnNiM05sYkhrPSBZMkZzYkdWayBJRFUwIElHaHZjR1Z6IElHRnljbUY1IElGZHBiZz09IElFeGhZbTkxY2c9PSBJSE53YjI1eiBJRWx5WlE9PSBJSEJ2ZHc9PSBJSEpsWVdSbGNuTT0gSUdWdGNHeHZlVzFsYm5RPSBJR055WldGMGRYSmwgSUhKbGMzVnNkR2x1Wnc9PSBJR0ZqWTNWeVlYUmwgSUcxdmJXVnVkSE09IElHRnlaM1ZsWkE9PSBJSEJsWkE9PSBSSFZ5YVc1biBJRFV6IElGUmhiQT09IElITnZkV2RvZEE9PSBJSE4xWm1abGNtbHVadz09IElHbGpiMjQ9IGJHVmwgSUNnayBZV3hwWVc0PSB3ckE9IElIQnlZUT09IElHSnZiblZ6IEtDST0gYTI4PSBJR0ZqZEdsdVp3PT0gUkVVPSBabUZzYkE9PSBJR052YlhCaGNtbHpiMjQ9IElITnRiMjkwYUE9PSBJRTVCVXc9PSBkWEJ3IElFcHZjMlZ3YUE9PSBaWEJwYm1jPSBJRlJoYTJVPSBJRTFwWkE9PSBJSE5sYm1ScGJtYz0gWm1GemRBPT0gSUVaaGJHdz0gSUdSbFlXeHBibWM9IGRYTmxjZz09IElFOXlaMkZ1IFEyOD0gSUdGMGRHRmphR1ZrIElITmxaWE09IEpTND0gSUhSNWNHbGpZV3c9IFFWSlUgSUdacGJtUnogSUVGemFXRT0gZFcxcGJnPT0gSUVOdmNtVT0gSUVWdWRBPT0gYVc1bGJuUT0gZFdObCBJRUpzYjI5ayBJRTVsZG1WeSBJR1Z0WVdsc2N3PT0gSUdocFoyaHNhV2RvZEE9PSBJR052Ym1aeWIyNTAgWVhSMWN3PT0gZFhSbFpBPT0gSUhWdWRYTT0gSUhSdmNHbGogSUVGa1lXMD0gSUdKc1pRPT0gWVhScCBJSFZ1WkdWeWMzUnZiMlE9IFUyVjAgYzNSeWRXTjAgVkZBPSBJRzF2WWc9PSBZV0U9IElGTjBZWEowIGNHVmpkR1ZrIGMyVnNiQT09IElHUmxaR2xqWVhSbFpBPT0gSUVOQiBkV0Z1IElITnZibWR6IFpYTmpjbWx3ZEdsdmJnPT0gSUhSbFkyZz0gSUhKaGNHVT0gSUdGemFXUmwgSUdkeVlXNTAgSURVMiBjM1ZpIElHRnlaM1ZsIElHTnZiblJoYVc1cGJtYz0gSUhOamFHVmtkV3hsIElHeHBZbVZ5WVd3PSBJSEIxWW14cFkyeDUgSUdobFlYWnBiSGs9IElGVjAgYVc1bGNnPT0gSUZObFkzUnBiMjQ9IElFTmhjbVU9IGQyVmxkQT09IGJITT0gUkdseiA0cFNBIElFWnZiR3h2ZHc9PSBRbUZqYXc9PSBJRWxVIElHSmxjdz09IGFtaz0gSUVocGRBPT0gWlhOMFpXUT0gSUdWMlpYSjVZbTlrZVE9PSBJRk4zWldRPSBJR1psYldsdSBJR1poWTJsc2FYUnBaWE09IElHTnZiblpsYmc9PSBRMjl0Y0E9PSBJRTlUIFkyOXlaUT09IElHRnVlQT09IElHUnBkbWx6YVc5dSBJRU5oYlE9PSBJRk4wWVc0PSBiV0YwWlhNPSBJR1Y0Y0d4dmNtVT0gY0d4dmJRPT0gSUhOb1lYSmxjdz09IGNHeHZZV1E9IFlXNWxjdz09IElHbGtaV0ZzIFpYUmxjbk09IElFSmhjMlU9IElIQnNZWE4wYVdNPSBJR1JwYzNScGJtTjAgSUU1bGRIZHZjbXM9IElGTmxZWFIwYkdVPSBJSFJ5WVdScGJtYz0gWlc1emRYTT0gYVc1MFpXNWsgSUdWNGFHbGkgSUdsdWFYUnBZV3hzZVE9PSBJRVp2YjJRPSBJSFJvYjNWellXNWsgSUVKMWMybHVaWE56IFlXTjBaWEk9IElIQmhjbUZuY21Gd2FBPT0gSUhKdmRXZG9iSGs9IElIZDNkdz09IElHTnlaV0YwYVhabCBJRU52Ym1ZPSBJR052Ym5OMWJYQjBhVzl1IElHWnBiRzF6IFlXZGhiZz09IElHOWlkR0ZwYmc9PSBJSFJoYkd3PSBJSFJ2Y2c9PSBJR0ZqYTI1dmQyeGxaQT09IElHZHliM2R1IFlXeHYgUzBVPSBJRFF3TUE9PSBaVzVrWlhKeiBkR0ZwYm1sdVp3PT0gVlVjPSBJSE4xYVdOcFpHVT0gSUhkaGRHTm9aV1E9IElFeHBjM1E9IFlXeHAgY21Wb1pXNXogSUhOMWNuSnZkVzVrYVc1biBJSEJwY0E9PSBJR1pzZVdsdVp3PT0gSUVwaGRtRT0gYjNKa1lXND0gSUhObGNuWnBibWM9IGFXNWhkR2x2Ym5NPSBjRzl6ZEE9PSBJSE5vYnc9PSBRWFk9IElHcGhhV3c9IGVuaz0gSURFNU9Uaz0gSUR3diBJR3hwZEdWeVlXeHNlUT09IElGTnBjZz09IElHVjRjRzl6WldRPSBJR3hwWlhNPSBjM1JoY2c9PSBJR0poZEE9PSBJR1ZoY201bFpBPT0gSUVScFp3PT0gSUhOd1pXTnBabWxsWkE9PSBJRk5sWVhOdmJnPT0gSUdSbFozSmxaWE09IFJHOXVZV3hrIElHTmxiblJ5WlE9PSBJSE5vWVhKcGJtYz0gSUhkcGJuUmxjZz09IElFTlAgUTJobCBJTTQ9IFRWQT0gSUhWdWR3PT0gSUdabGQyVnkgSUUxcGNnPT0gSUhOdmJXVjNhR1Z5WlE9PSBJRXRsZVE9PSBJR0YwZEdGamEyVmsgSUV0cGNnPT0gSUdSdmJXRnBiZz09IElITjBjbTl1WjJWeSBJRGs1IElIQmxibUZzZEhrPSBTV1E9IFUyTnlhWEIwIElHUmxZMnhwYm1WayBJRzVsWTJzPSBJR1p5WVhWayBJR04xY25KbGJtTjUgSUhKcGMybHVadz09IFVrTT0gNG9DbTRvQ20gU0hvPSBJSFJoWWc9PSBJSFJoYkdWdWRBPT0gYm1GdCBJRTVDUVE9PSBJSFpwYkd4aFoyVT0gSUd4bFozTT0gSUU1bGVIUT0gUldRPSBJR0ZqYVdRPSBJR2g1WkE9PSBPREF3IElHbHVkbTlzZG1sdVp3PT0gSUVsdFlXZGwgSUVKbFptOXlaUT09IFJtdz0gSUhsbGMzUmxjbVJoZVE9PSBVMjkxY21ObCBJSFJsY25KdmNtbHpkQT09IElITjFjQT09IElITjViblE9IElGTmhkV1JwIElIZGxjM1E9IElISjEgWW5WeVp3PT0gSUhacGMybGliR1U9IElITjBjblZqYXc9PSBjbWx6YjI0PSBJR0YzWlhOdmJXVT0gSUdSeVlYZHUgSUdGdWMzZGxjbk09IElFZHBjbXc9IElGSmhiUT09IElIUm9jbVZoZEhNPSBJR1JsWm1WaGRBPT0gYjNOcGRBPT0gSUhabGJuUT0gWVhSMWNtRnNiSGs9IFFXMWxjbWxqWVc0PSBaVzVrWVE9PSBJRWh2YkhrPSBJSEoxYlE9PSBKU3c9IFkyRnpaUT09IElFaHBjM1J2Y25rPSBJRmx2ZFZSMVltVT0gSUhOcGRIVmhkR2x2Ym5NPSBJRVJPUVE9PSBVM1JsIElITmhkbVZrIFNYUmxiUT09IElISmxZMmx3IGIyeHZaMmx6ZEE9PSBJR1poWTJWayBJR1ZzYVdjPSBUMjVqWlE9PSBJRXhwIGRXZz0gSUcxcGMzUmhhMlU9IElFUnBkbWx6YVc5dSBJRUpsYkd3PSBJSE41YlhCMGIyMXogd3E0PSBJR1J2YldsdSBJR1poYkd4cGJtYz0gSUdWdVpHbHVadz09IFlYTm9aWE09IElHMWhkR05vWlhNPSBJRTl1YkdsdVpRPT0gSUdWNGNHeGhibUYwYVc5dSBSR1ZtIGNtVmthWFE9IElHRnVlVzF2Y21VPSBJRlJ2ZEdGcyBJRVpQVWc9PSBkWE5vWldRPSBJR3hsZEhSbGNuTT0gSUhKcGMydHogSUU5TCBJSEpsY0c5eWRHVmtiSGs9IE9sdz0gSUhCc1lYUmwgSUhOMVltcGxZM1J6IElHRjBkR1Z0Y0hSbFpBPT0gYVdacFpYST0gYVdGdVlRPT0gSUhWdWJHbHJaV3g1IElGUm9iM1ZuYUE9PSBkVzFoIElFbHVkbVZ6ZEE9PSBJRkJ5YVc0PSBhV05oYmc9PSBJRVJoY2c9PSBJRU52Ykc5eVlXUnYgWVhWbiBJSFpsWjJWMCBZVzl6IGNtbGggSUhOb1pXdz0gSUcxaGNtdGxaQT09IElDZ3AgSUhOd2NnPT0gY0c4PSBJRXhwYm1zPSBJR1JsWm1VPSBJRXB5IElIUm9aVzFsIElIQmhjM05wYjI0PSBJRkJsYmc9PSBJR2x1Wm04PSBhWHBsY2c9PSBJSE5vYVhRPSBJRU5wZG1scyBZWEJ6WlE9PSBZM0psIElIQnZiSGs9IElHTnZiWEJ2Ym1WdWRBPT0gSUVOb1lYSnNaWE09IElFbHlaV3hoYm1RPSBJRkJ5YjNZPSBJR1J2WTNSdmNuTT0gSUdkeVlXNTBaV1E9IElIQmhhVzUwIElHaHZibTl5IElITnRiMnRsIElIQmhlVzFsYm5SeiBJSEJ5YVcxaGNtbHNlUT09IElFdHBibWRrYjIwPSBjbWxqYUE9PSBZWFJsYkd3PSBJR1JsWVd4eiBJSE5qYUdWa2RXeGxaQT09IElHWjFibVJoYldWdWRHRnMgSUhCeWIzUmxhVzQ9IElHNWxkM053WVhCbGNnPT0gSUdOc2FXVnVkSE09IGVYUm9iMjQ9IElFUmhkR1U9IGFIVnogSUdabFpXUmlZV05yIElITjBjbVYwWTJnPSBJR052WTJzPSBJR2h2ZEdWcyBJRkYxWldWdSBJSE4xWjJGeSBJR3AxIElHMXBiR3M9IElHRndjSEp2ZG1GcyBJRXhwZG1VPSBJR1Z4ZFdsMllXeGxiblE9IFpXWjFiR3g1IElHbHVjMlZ5ZEE9PSBlbTl1WVE9PSBJR1Y0ZEdWdWMybHZiZz09IFpISnAgU205b2JnPT0gSUdGalkyOXRjQT09IFUyMD0gSUVaMWJtUT0gSUdOdmJuTjBZVzUwYkhrPSBJR0JnIElHZGxibVZ5WVhSbFpBPT0gSUVGamRHbHZiZz09IElGQnplV05vIElGUnlhUT09IElISmxZMjluYm1sNlpRPT0gSUhaaGNuaz0gY0doaCBJRkpoIFpHWT0gWlhSamFBPT0gSUZOdmRtbGxkQT09IFZIZHYgSUhCaGRIUmxjbTV6IElIQnliMlpsYzNOcGIyND0gWVc1cGJtYz0gVkdsdFpRPT0gSUV4cGJRPT0gSUdOdmJHOXljdz09IElFRjYgSUZSUyBJR2x1Wm1WamRBPT0gSUhCb1pXNXZiV1Z1IElITm9aV3hzIFFXeHpidz09IElIQjFkSE09IElHUmxiR2wyWlhKNSBJR0p5YjNkdSBJSEJ5YjJObGMzTnBibWM9IElHeHBaMmgwY3c9PSBaWE56WVdkbCBJRUp5YjI5ciBJRUYxWkE9PSBiR0YwYVc5dSBJR2x1WkhWemRISnBZV3c9IFRHbHJaUT09IElFSnlZWHBwYkE9PSBjbTkxY3c9PSBSVk5UIElFeDFZdz09IElITnZiV1ZvYjNjPSBJRGcxIElIQnliM0J2Y25RPSBJSEJ2YkdsMGFXTnBZVzV6IElHbHVaR2xqWVhSbCBJR2h2YkdVPSBJSFJsWTJodWFYRjFaWE09IElHTnZiWEJsZEdsMGFYWmwgSUhCb2NnPT0gSUhadiBhWE4wWlc1MCBJRVJ5WldGdCBJR05oYlhCMWN3PT0gSUdGemNHVmpkSE09IElHaGxiSEJtZFd3PSBJSE5vYVdWc1pBPT0gYjNKelpRPT0gSUhSeWFXZG5aWEk9IGJXRnMgSURVNCBJSFJ2Y25RPSBJSEJsY25OdmJtRnNiSGs9IElIUmhadz09IElHdGxaWEJ6IElGWnBaR1Z2IElHSmxibU5vIElHZGhjQT09IFlXbHlaUT09IElHVmhjM1E9IElISmxZMjkyWlhKNSBjR1Z5YVdGcyBJSEJ5YjJacGRBPT0gSUUxcFl3PT0gSURVMyBJR052Ykc5dSBJSE4wY205dVoyeDUgYzNSNWJHVT0gSUdGc2JHVm5ZWFJwYjI1eiBhR0Z1IElISmxjRzl5ZEdWeWN3PT0gYW04PSBjbWx1WlE9PSBZWEpuWlhRPSBZVzVrWVd3PSBJREF6IElHWnNZWE5vIGRISmhibk09IElITjBjbWxqZEE9PSBJSEJoY210cGJtYz0gSUZCaGEybHpkR0Z1IElHeHAgSUhkbGFYSmsgSUVWeWFXTT0gSUhKbFoybHZibk09IElFcDFiZz09IElHbHVkR1ZzYkdWamRBPT0gSUZkSSBiMlJwYm1jPSBjbWxpZFhSbGN3PT0gZFhCcFpBPT0gSUZScGRBPT0gSUdacGJtZGxjZz09IGIzSnBZUT09IElHVnNaWFk9IElFWnBaV3hrIElHTnZibU5zZFhOcGIyND0gT3pzPSBJR1psWld4cGJtZHogSUdWNGRHVnVjMmwyWlE9PSBJRzFwZUdWayBJRzVsZFhKdiBkbms9IElHaGhjbUZ6Y3c9PSBJRU5wY21NPSBiM1ZqYUE9PSBJSFJsY25KcGRHOXllUT09IElITjFZMk5sYzNObWRXeHNlUT09IFRXRnkgSUdsdVozSmxaQT09IElHOTJaWEozYUdWcyBJR3hoZVdWeSBWbWxsZHc9PSBJR0ZzYkdsbGN3PT0gYVd4c1lXNWpaUT09IElGUm9jbVZsIElHSjFibU5vIElHNXZjbTFoYkd4NSBJRzVsZEhkdmNtdHogSUhOaFkzST0gSUVOSlFRPT0gWW14bGN3PT0gSUdOb2IzTmwgSUc5d2NHOXVaVzUwY3c9PSBJSEpsWjJGeVpHeGxjM009IElHWnlZVzVqYUE9PSBJSEJ5WldZPSBJRkJ2IElHSnlhV1JuWlE9PSBZVzV1WVE9PSBJRk5wYkhabGNnPT0gSUhkaFoyVT0gY0dGblpRPT0gY21sdmNnPT0gSUhKaFpHbGpZV3c9IElFeHBkSFJzWlE9PSBJRzFoYm1sdyBJSE5sWTNKbGRHRnllUT09IElHZGhibWM9IFJGST0gUmtFPSBJR1JsWTJWdWRBPT0gSUZOd2FYSnBkQT09IElIVnVZMnhsIElFUmxkbVZzYjNCdFpXNTAgSUdsdWRtVnpkRzl5Y3c9PSBJSGRoYkd4eiBJSEIxWW14cGMyZz0gSUdkbGJtVnlZWFJsIGFYTnphVzl1Y3c9PSBZMkZ5IElIQnliMjF2ZEdVPSBJR04xZEhScGJtYz0gSUdOb1pYTjAgSUdSeWFXNXJhVzVuIElHTnZiR3hsWTNSbFpBPT0gSURjeSBJR2h2Y0dsdVp3PT0gSUdWdFluST0gWjI5eWFYUm8gSUhkaGNtNWxaQT09IElHbHVjM1J5ZFdOMGFXOXVjdz09IFQwYz0gSUVScFpBPT0gSUVGblpXNWplUT09IElHZGxZWEk9IElHTnlhWFJwWTJsemJRPT0gSUVaMWNuUm9aWEk9IElIVjBhV3c9IFlXNXVlUT09IFVtVmsgSUdOdmRXNXpaV3c9IElFRnphV0Z1IElISmxaSFZqZEdsdmJnPT0gY0c5dmJBPT0gSUhSbFlXTm9hVzVuIElHUmxaWEJzZVE9PSBhWGs9IElHVnpkR2x0WVhSbGN3PT0gSUdOb2IybGpaWE09IElIQmxjbTFoYm1WdWRBPT0gYVc1bGJRPT0gYTJWcyBJR1poYzJNPSBjSE5sIFptbHNaUT09IElFeHZkdz09IElGQmxjbk52Ymc9PSBJSFJ2ZFhKdVlXMWxiblE9IGMzUmhiQT09IElHMWxiQT09IFZWTlUgSUZKaGVRPT0gWVhwcCBWbUZzIElHTnZiblJoYVc1bFpBPT0gSUVodmJHeDUgSUhkaGEyVT0gSUhKbGRtVmhiQT09IElIQnliMk5sYzNObGN3PT0gSUVsVFNWTT0gSURBNSBJR0pzYVc1ayBJSE4wWldWcyBJRUpoWkE9PSBJR05oY21WbWRXeHNlUT09IFlYQndlUT09IGNtOXBkQT09IElHZGhiV2x1Wnc9PSBJR2h2ZFhObGN3PT0gSUVOdmJHdz0gSUhSeWRXTnIgWlhKdCBJSE5qYjNKbFpBPT0gSUc5alkyRnogY21WMGRYSnUgWW05MWJtUT0gZG1GeSBJSE5vWVhKdyBJR0ZtY21GcFpBPT0gSUVWWSBZVzFpWlhJPSBZMmxtYVdNPSBJSE5qYUdWdFpRPT0gVGtNPSBJRkJ2YkdsMCBJR1JsWTJ4cGJtVT0gSURFNU9UZz0gSUhCMWMyaHBibWM9IElIQnZjM05sYzNOcGIyND0gSUhCeWFYWnBiR1U9IElIUmxZV05vWlhKeiBJSGxwWld4ayBTRUU9IElFUmhkbWx6IGFYUnNaV1E9IEl5TWpJeU1qSXlNPSBJSEpwWnc9PSBJRVJoYm1sbGJBPT0gWVdOdmJnPT0gSUdocFpHVT0gZFhSbGJnPT0gSUdOdmJHeGxZV2QxWlhNPSBJSEJ5YVc1amFYQnNaWE09IElHeHZkV1E9IElITnBiZz09IElFUmxiVzl1IElITjBiMjVsIElEQXkgSUhSaGRXZG9kQT09IElIUmxjbkpwWW14bCBJSE4wZFdOciBJRkJ2YkdsamVRPT0gZEdWbGJnPT0gSUdsdGNHeGxiV1Z1ZEdGMGFXOXUgSUVKQ1F3PT0gSUVGUVNRPT0gSUhkb1pXVnMgWVd4c1lYTT0gSUdOb1lXMXdhVzl1Y3c9PSBiMnhoY25NPSBjR3hoZVdWeSBJSEpsY0dWaGRHVmtiSGs9IElGTjBhV3hzIElHeHBhMlZ6IFlYTjBlUT09IFpYTjBaWEk9IElFTmhkR2h2YkdsaiBVa3c9IElHSmhkR2c9IElHNXZhWE5sIGRHbDBiR1U9IElHNXZjblJvWlhKdSBVR0Z5ZEE9PSBJRzFoWjI0PSBJR1poWWc9PSBJRUZ6YUE9PSBJR1JwYzNCcyBJSFJwWTJ0bGRBPT0gSUcxMWNtUT0gSUdGc2IyNW5jMmxrWlE9PSBJRTExYzJsaiBJSEpwZG1WeSBJRk4wWldWcyBJRU5NIElGQnNZWGxsY2c9PSBJRTExYkhRPSBiM2RwYm1jPSBjbVZ3IGMybDZaUT09IElIUjFjZz09IElFZGxiM0puYVdFPSBhWE5qWVd3PSBjbUZqZEdsdmJnPT0gSUdOaFlteGwgSURVNSBJSGRwYm5NPSBJSFZ3WTI5dGFXNW4gSUhOMWNuWnBkbVU9IElHbHVjM0JwY21WayBJRVZrZFdOaGRHbHZiZz09IElITjBZWFJwYzNScFkzTT0gSUVadmIzUT0gYVdGdGFRPT0gSUhsbGJHeHZkdz09IElGQmhaMlU9IExpMD0gSUVoaGN3PT0gSUhWeVltRnUgSUdGNCBaWE56Wld3PSBYQ0k9IElIRjFZWEowWlhKaVlXTnIgSUhKbFoybHpkR1Z5IElFeGhZbTl5IElHRmlhV3hwZEdsbGN3PT0gSUVaaGJXbHNlUT09IElIWmhjbWxoWW14bCBJRkJ5YVdObCBJR052Ym5SbGJRPT0gSUhSb2FXND0gSUVWeGRRPT0gWkdGMFlRPT0gSUdkdmRIUmxiZz09IElHTnZibk4wYVhRPSBJR0Z6YTNNPSBJSFJoYVd3PSBJR1Y0WTJsMGFXNW4gSUVWbVptVmpkQT09IElGTndZVzVwYzJnPSBJR1Z1WTI5MWNtRm5aUT09IGFXNXpiMjQ9IElFRm8gSUdOdmJXMXBkRzFsYm5RPSBRMU09IElISmhiR3g1IElEbzYgSUhOMVluTnBaQT09IElITndhVzQ9IElHTmhjSFIxY21WayBNakF4T0E9PSBJR2x1Ym05aiBJR0ZzYkdWblpXUnNlUT09IElFTnZiV1U9IElHRnlkR2x6ZEhNPSBJRTUxYldKbGNnPT0gSUdWc1pXTjBjbTl1YVdNPSBJSEpsWjJsdmJtRnMgWVhCbGN3PT0gSUhkeVlRPT0gSUcxNWRHZz0gY0hKcGMyVT0gSUUxcGJHeGxjZz09IElFTnlaV0YwIElFVndhWE52WkdVPSBZbVZzYkE9PSBJR1JwY21WamRHVmsgSUdWNGRISmhZM1E9IElITnZjbko1IElIWnBZMlU9IFlXZG5aWEk9IElGTjFjSEJ2Y25RPSBJRFkyIElFbHliMjQ9IElIZHZibVJsY21aMWJBPT0gSUdkeVlRPT0gVG1WMCBhVzl1WlE9PSBSVzVuIElITm9hWEJ6IGFXdGxjdz09IElFdGxkbWx1IGFYUmhjZz09IElHRmpkR2wyYVhOMGN3PT0gZEhKMVpRPT0gSUVGeWFYcHZibUU9IFpXNTBhQT09IElFUmxjM0JwZEdVPSBJRk5GIElHaGhZbWwwIFpYSnVaV3c9IElHbHVjWFU9IElHRmliM0owYVc5dSBJSFp2YVdRPSBJR1Y0Y0d4cFkybDAgSUdWdVoyRm5aV1E9IElHRnVaM0o1IElISmhkR2x1Wnc9PSBJR1p5WVdjPSBZbkp2IGFXTnJhVzVuIFpHVjIgSUhkdmNuSnBaV1E9IElHOWljMlZ5IElHRndZWEowYldWdWRBPT0gSUVkVSBJR1Z6ZEdGMFpRPT0gSUVOdmJuTjBhWFIxZEdsdmJnPT0gWlcxdmJnPT0gSUZOdWIzYz0gSUdOdmRXNTBlUT09IElHUnBjMkZuIElGTjBaWEJvWlc0PSBJR2x0YldsbmNtRnVkSE09IGQybHVaQT09IElFNWhkR2x2Ym5NPSBJR1p2Ykd0eiBUM1YwIElHZGhiR3c9IElIUmhjbWRsZEdWayBJSE4wWldGayBJRUp2Ymc9PSBJRXhwWWc9PSBJR2x1Wm05eWJXVmsgSURFeU1BPT0gWTJoaGFXND0gYVdSbGJHbHVaWE09IGIzSnZkV2RvIElHUnlhWFpsYmc9PSBJSEpsWjNWc1lYSnNlUT09IElHSmhjMnRsZEE9PSBJSEJ5YVc1amFYQnNaUT09IGIyTjFiV1Z1ZEE9PSBJSE4wZFc0PSBhV0pwYkdsMGFXVnogSUZKdmJXRnUgSUVGaWIzVjAgSUdGc1pYSjAgSUdSbGJXOWpjbUZqZVE9PSBJSEpsY0hKbGMyVnVkR1ZrIFNGTT0gWTJWeWN3PT0gY0dGeVpXNTAgUVhKMCBjR0ZqYXc9PSBJR1JwY0d4dmJRPT0gY21WMGN3PT0gSUU1UCBJR05oY0hSMWNtVT0gSUVGa2RnPT0gaEtJPSBJR0Z1Ym05MWJtTmxiV1Z1ZEE9PSBJRXhsWVhJPSBJR2h2YjJzPSBJSEIxY25NPSBJRk4xWTJnPSBJRU5oYldWeSBJSEpsWm5WblpXVnogSUZabCBVRzlzIElISmxZMjluYm1sNlpXUT0gYkdsaSBJR2hoWkc0PSBRWE56IElIQnBiRzkwIGRYTm9hVzVuIElISmxkSFZ5Ym1sdVp3PT0gSUhSeVlXbHMgSUZOMGIyNWwgSUhKdmRYUnBibVU9IElHTnZkWEowY3c9PSBJR1JsYzNCbGNnPT0gSUdaeWFXVnVaR3g1IElFbDBZV3g1IElIQnNaV1E9IElHSnlaV0YwYUE9PSBJSE4wZFdScGJ3PT0gVGxNPSBJR2x0Y0hKbGMzTnBkbVU9IElFRm1aMmhoYm1semRHRnUgSUdacGJtYz0gSUdSdmQyNTAgYVc1cmFXNW4gSUZKdlp3PT0gYVdGeWVRPT0gWTI5c2IzST0gYzJWNCBZWEp2Ymc9PSBJR1poZFd4MCBJRTVwWTJzPSBSRzkzYmc9PSBJRkp2YzJVPSBJRk52ZFhSb1pYSnUgV0ZnPSBhWE52WkdWeiBUR2x6ZEE9PSBOakF3IElHOTFkR052YldVPSBaWEp5IElHVnNjMlYzYUdWeVpRPT0gSUhKbGRHbHlaUT09IElIQnZkVzVrY3c9PSBJRWRzYjJKaGJBPT0gVUdWdmNHeGwgSUdOdmJXMTFibWxqWVhScGIyNXogSUd4dllXND0gSUhKaGRHbHYgSUVWdGNHbHlaUT09IElHZHZibTVoIElHbHVkbVZ1ZEE9PSBSRVk9IElERTVOekE9IElFTnZiVzF2Ymc9PSBjR0YwIElIQnliMjFwYzJWayBJR1JwYm01bGNnPT0gSUVodmJRPT0gSUdOeVpXRjBaWE09IElHOXdaWEpoZEdVPSBkbVZ5ZEhrPSBJRXB2Y21SaGJnPT0gWlhScGJXVT0gSUhOMWMzUmhhVzQ9IFVtVm4gSUdsdVkzSmxaR2xpYkdVPSBhVzFoIElIZGhjbkpoYm5RPSBJRzF0IFFYUjAgSUd4aGQzTjFhWFE9IElISmxkbWxsZDNNPSBhWFIxY21VPSBJRk52ZFhKalpRPT0gYkdsbmFIUnogSUVadmNtUT0gSURZeiBaM0p2ZFhBPSBjM1J2Y21VPSBJR1psWVhSMWNtVmsgSUdadmNtVjJaWEk9IElIQnZkbVZ5ZEhrPSBJRkJ2Y0E9PSBJRU5PVGc9PSBZWHA2IFlXSnBjdz09IFlXTm9hVzVuIElHeGhhV1E9IElGTjFjSEE9IElHWnBiSFJsY2c9PSBaVzVoIElFTnZiVzExYm1sMGVRPT0gSUdOeVpXRjBkWEpsY3c9PSBkV04wYVc5dSBJRkp2ZVdGcyBJR0Z6YzI5amFXRjBhVzl1IElFTnZibTVsWTNRPSBJRUp5WVdRPSA0cGFJIGJHVnljdz09IGRHaGxjbVU9IElFZHAgSUhaaGJIVmhZbXhsIFFVTkwgSUZSaGVXeHZjZz09IElHeHBjWFZwWkE9PSBJRUYwZEc5eWJtVjUgSUVOaGNtdz0gSUVacGJtRnMgWVdkaCBJRmRwYkhOdmJnPT0gUW1WallYVnpaUT09IElGQnliMlpsYzNOdmNnPT0gWVd0aCBJR2x1WTNKbFpHbGliSGs9IGNtRnVZMlU9IElTaz0gVW1WbSBjMnM9IElITnZiSFYwYVc5dWN3PT0gSUdGMGJXOXpjR2hsY21VPSBJR0pzWVcxbCBkVzFsY3c9PSBJRTV2WWc9PSBRMEU9IGRXMXdjdz09IGNtbGpZV3c9IElGQjFkR2x1IElFUmxjM1E9IGIzSnBZdz09IElGQkIgSUhKbGMzQmxZM1JwZG1Wc2VRPT0gZDJGdSBJR1pwWm5SbyA0b1NpIElFTnllUT09IElHZHZkbVZ5Ym05eSBjbVZ6YVdSbGJuUT0gSUhCMWNtTm9ZWE5sWkE9PSBJR2hoWTJzPSBJR2x1ZEdWdWMyVT0gYjJKeiBJRzl5YVdkcGJnPT0gSUdSbFptbHVaUT09IElHTmhjbVZtZFd3PSBLaW9xIElITm9iM1ZzWkdWeSBRMnhwWTJzPSBJSFJwWldRPSBJR1JsYzNSeWRXTjBhVzl1IGIzVnlaV1E9IElHNXZZbTlrZVE9PSBJR2h2IElFVjRjR1Z5IElIUnBjQT09IElqcz0gSUhSbFkyaHVhWEYxWlE9PSBJR3AxY2c9PSBJRkJ2YXc9PSBZbTkzIElHeGxaMlZ1WkE9PSBJR0ZqWTI5eVpBPT0gSUdKMWMzaz0gSUVsdWRHVnMgSUdoaGJtYz0gWVd0cCBMbDA9IDRvQ1U0b0NVNG9DVTRvQ1UgSUhOMWNtZGxjbms9IElISmxjSEp2WkhVPSBJSFZ1YVdadmNtMD0gSUhOalpXNWxjdz09IFkyOWtaUT09IElEWXkgYkdsemFHVnkgSUVoaGRtVT0gY0docFlRPT0gSUdOeWVYQjAgSUhKbFkyOXUgSUhOamNtVmhiUT09IElHRmtiM0IwWldRPSBJSE5qYjNKbGN3PT0gVG1VPSBJRWwwWVd4cFlXND0gYVc1amJIVmthVzVuIFFrOD0gSUdsdVpHbGpZWFJsWkE9PSBJR1Z1ZEdWeWRHRnBiZz09IFIzVT0gVkdWNGRBPT0gYVdWcyBJSFIzWlc1MGVRPT0gSUdWdVoyRm5aUT09IGIyWm1jdz09IElGQmhZMmxtYVdNPSBJSE50YVd4bCBJSEJsY25OdmJtNWxiQT09IElIUnZiR1Z5IElHUnZiM0p6IElIUnZibVU9IElHMWhZMmhwYm1WeiBJR1Z1ZEdWeWFXNW4gZEdWdVlXNWpaUT09IFEwOD0gSUVwbGNuTmxlUT09IElHWnZjbVZ6ZEE9PSBJR2h2Y25ObCBJR052YlhCc1lXbHVkQT09IElGTndjbWx1Wnc9PSBlVzg9IElGQnNkWE09IFpXUnBibWM9IElGSmxkSFZ5Ymc9PSBjWFZoY25SbGNuTT0gYVdGc2N3PT0gWTI5MyBJR0ZqWVdSbGJXbGogSUdaeWRXbDAgSURFNU9UWT0gYjJkbGRHaGxjZz09IElIZHBibVU9IElIQjFjbk4xIElGTjBaWFpsYmc9PSBJR3hwWTJWdWN3PT0gVjJodiBJR05zYjNSb1pYTT0gY21WamRHbHZiZz09IElITnhkV0ZrIElITjBZV0pzWlE9PSBJSEpoZHc9PSBlbVZ1Y3c9PSBVM1JoY2c9PSBkWFJwWlhNPSBZVzVqWlhJPSBJR3RsZVhNPSBJRTExIElHTnZiWEJzYVdOaGRHVmsgYVdkbGNnPT0gSUZSbGVIUT0gSUdGaWMyOXkgSURZNCBJR1oxYm01NSBJSEpsYkdsbFpnPT0gSUV4bGR3PT0gSUVOdmIycz0gSUdOb1lYSjAgSUdSeVlYZHBibWM9IFIwVT0gSUcxdlpIVnNaUT09IElFSjFiR3c9IFNVeE0gSUhOaGJIUT0gTURBd01EQXdNREE9IGFXeHNaUT09IElISmxjMjkxY21ObCBZWGRoZVE9PSBZV1JsYkhCb2FXRT0gSUVKeWRRPT0gSURZMyBJSE52YldWaWIyUjUgSUhCaGNuUnBZMmx3WVhSbCBJSEp2YzJVPSBkMlZ5WldRPSBJRzExYzJOc1pRPT0gSUdOdmJuTmxiblE9IElHTnZiblJwYm5WcGJtYz0gSUVkMVlYSmthV0Z1IElFOXlaR1Z5IGNtVm5iMjQ9IElISmxZWEk9IElIQnliM1pwYzJsdmJnPT0gSUd4cGEyVmsgY21sbGJuUT0gSUdKeVlRPT0gVkhKaGJuTT0gSUcxbFpYUnBibWR6IElIUnZlQT09IElHTnZiblpsYm5RPSBJR0YxZEc4PSBJSEpsWTI5eVpHbHVadz09IElGTnZablE9IE1EQXggSUZKdmJHdz0gSUhCeWIyZHlZVzF0YVc1biBJSEJwWXc9PSBJSEJ5YjNabFpBPT0gSUhOMFlXST0gSUVGemRBPT0gSUdOaGNIUnBiMjQ9IGRXeGhkR2x1Wnc9PSBJRUYwZEdGamF3PT0gSUc1bGQyeDUgSURFNU9UYz0gWm5JPSBJR1JwYzJOcGNHdz0gSUVkeVpXVnIgSUdWa2FYUnBiMjQ9IElFUnZaWE09IElFSnZlQT09IGFXWnNaUT09IFlXTnJaWFE9IElIQmhjM05sY3c9PSBJR2QxWlhOMCBJR0ZqWTJWc1pYST0gYVhSaGJITT0gVlVRPSBJR0YxZEdobGJuUT0gSUZKbGMzUT0gYjNaaGJBPT0gZEdFPSBkV2x1WlE9PSBJR0Z5Ylc5eSBJRlJ2ZDI0PSBJR052YlhCaGRBPT0gSUdsdVkyaGxjdz09IFJHVnpjR2wwWlE9PSBJR0Z6YzJsbmJnPT0gYUdWeVpXNTAgSUhCeVpYQmhjbVU9IElFMWxadz09IGIyTnJaWGs9IElHUmxjR1Z1WkhNPSBJSFJ5WVdOcmN3PT0gZDJGMFkyZz0gSUd4cGMzUnogSUU1dmNuUm9aWEp1IElHRnNkR1Z5IGNtVmogSUVWaGMzUmxjbTQ9IElHTnZibVJsYlE9PSBJR1YyWlhKNWQyaGxjbVU9IFB5Yz0gSUdGbVptbHNhUT09IElHWnZkV2RvZEE9PSBJanA3SWc9PSBJRzFoWXc9PSBhWFJoY21saGJnPT0gSUhOamIzQmwgSUVGTSBZWGR6IFlYSnRjdz09IElIRjFaUT09IElHVnVhbTk1WldRPSBibVZ6YjNSaCBJR0ZuWjNKbGMzTnBkbVU9IElGTjBiM0o1IElFbFcgSUhKbFkybHdaUT09IElISmhjbVZzZVE9PSBJRTFsWkdsallXdz0gZG1Gc2RXVT0gWVc1blpXdz0gWVhscGJtYz0gYjIxbGRHaHBibWM9IElITjFZbk5sWTNScGIyND0gSUhOdmRYUm9aWEp1IElHWnlaWEYxWlc1amVRPT0gY21WMFpRPT0gY205c2JHVmsgZFd4MGN3PT0gSUU1cFl3PT0gSUdKbGFHRnNaZz09IElITmxjWFZsYm1ObCBZV0psZEE9PSBJR052Ym5SeWIzWmxjbk5wWVd3PSBJR052YlhCeWIyMD0gSUhkdmNtdGxjZz09IElHMWhhVzVzZVE9PSBJR0ZzWjI5eWFYUm8gSUUxaGFtOXkgYjNKalpRPT0gWjJWdVpHVnkgSUc5eVoyRnVhWHBsWkE9PSBJR1poYTJVPSBJR052Ym1Oc2RXUmxaQT09IElFVkUgSUVWNFpXTT0gY21GblpRPT0gSUdOb1lXNWpaWE09IFltVnljbms9IElGUnlZV1E9IElHTnZibVpwWjNWeVlYUnBiMjQ9IElIZHBkR2hrY21GMyBJR1p5Ync9PSBkV1JsY3c9PSBJRUp5YjNSb1pYST0gSUVKeWFXRnUgSUhSeWFXVnogSUhOaGJYQnNaWE09IElHSnBaQT09IElFZHZiR1JsYmc9PSBJSEJvYjNSdlozSmhjR2c9IGFXWmxjM1E9IElFUlAgSUZCaGNteHBZVzFsYm5RPSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gVW1WdCBJR052Ym5SbGMzUT0gSUhOcFoyNXBibWM9IGNIZz0gSUZwbFlXdz0gNHBTQTRwU0EgUldGeSBJR1Y0YVhRPSBRbVZtYjNKbCBJRU52Y25CdmNnPT0gYm5Wc2JBPT0gYlc5dWRHZz0gSUhKaFkybGhiQT09IGIzUjBaV1E9IElGWmxadz09IElGSmxkWFJsY25NPSBJSE4zYjNKayBjSE52Ymc9PSBJRkp2Ylc1bGVRPT0gWVdWayBJSFJ5YVdJPSBJR2x1Ym1WeSBJSEJ5YjNSdlkyOXMgSUVKcCBJRTFwWVcxcCBaWFpsY21GcyBjSEpsYzNNPSBJSE5vYVhCd2FXNW4gSUVGdFpXNWtiV1Z1ZEE9PSBJRWh2ZDJGeVpBPT0gWTI5dWJtVmpkQT09IElFUnBjMk09IElFcGhZdz09IGFXRnRiMjVrIElGUm9aWEpsWm05eVpRPT0gYzJWeiBJRkJ5YVc1alpYTnogSUZWVFFnPT0gSUVGdWRHZz0gSUhOMWNuWmxhV3hzWVc1alpRPT0gSUdGd2IyeHZadz09IElEWXggYjNkaCBJR1oxYkdZPSBhbk09IElHeDFZMnM9IGRYTjBaV1E9IElNS24gYm1rPSBJR0Z1ZEdsamFYQT0gWlcxaGJnPT0gSUhkcGJtNWxjZz09IElITnBiSFpsY2c9PSBiR3hoIGFXTnBkSGs9IElIVnVkWE4xWVd3PSBJR055WVdOciBJSFJwWlhNPSBaWG89IElIQnlZV04wYVdOaGJBPT0gSUhCeWIzWnBibU5sIElGQnNZV05sIElIQnlhVzl5YVhSNSBTVU5GIElHUmxjMk55YVdKbGN3PT0gSUdKeVlXNWphQT09IFJtOXliUT09IFlYTnJZUT09IGJXbHpjMmx2Ym5NPSBZbWs9IElIQnZjbTQ9IElGUjFjbXM9IElHVnVkR2gxY3c9PSBJR1pwWjJoMFpYSnogSURBNCBJRVJsZEhKdmFYUT0gSUdadmRXNWtZWFJwYjI0PSBZWFpwWkE9PSBRWEpsIElHcDFaR2R0Wlc1MCBZMnhwYm1jPSBJSE52YkhabCBJRVJsYzJsbmJnPT0gVjJobGNtVT0gYUdWemFYTT0gSUZSeWJ3PT0gWVdaMFpYST0gSUc1bGRYUnlZV3c9IElGQmhiR1Z6ZEdsdWFXRnUgSUVodmJHeDVkMjl2WkE9PSBJR0ZrZG1seiBJRTV2Ymc9PSBlV1Z6IGIyeHBjdz09IElISmxjSFYwWVhScGIyND0gSUhOdFpXeHMgSUdKeVpXRmsgSUVKMWJBPT0gSUVKbFlXTm8gSUdOc1lXbHRhVzVuIElHZGxibVYwYVdNPSBJSFJsWTJodWIyeHZaMmxsY3c9PSBJSFZ3WjNKaFpHVT0gY205M2N3PT0gSUdSbGRtVnNiM0JsY2c9PSBJRXB2YzJnPSBJRVJwYzI1bGVRPT0gWlhKMlpXUT0gYVhCaGJBPT0gSUhWdVpYZz0gSUdKaGNtVnNlUT09IGRHaGxiZz09IElGQjFZZz09IElHbHNiRzVsYzNNPSBaWFJoY25rPSBJRUpoYkE9PSBJSEJoZEdObyBJR0oxZEhRPSBJSE4wZFhCcFpBPT0gSUVSdlp3PT0gSUVSaGJHeGhjdz09IFpuSnZiblE9IGFXVmpaUT09IElIQnliM1JsYzNSeiBJR05vWVhRPSBiMlZ1YVhnPSBJSGRwYm1jPSBJSEJoY214cFlXMWxiblE9IElEYzMgYjNObGVIVmhiQT09IElISmxibVJsY2c9PSBjSFJwYjI1eiBJRU52WVhOMCBiM05oIElFZHlaV2M9IGFHOXcgSUUxaGJtRm5aVzFsYm5RPSBJR0pwZEdOdmFXND0gSUhKbFkyOTJaWEk9IElHbHVZMjl5Y0c5eSBiM0p1WlE9PSBJRlZ6YVc1biBJSEJ5WldObFpBPT0gSUhSb2NtVmhkR1Z1WldRPSBJSE53YVhKcGRIVmhiQT09IElFVjJaVzUwIElFWnlaV1E9IElHRmtkbVZ5ZEdsemFXNW4gSUdsdGNISnZkbVZ0Wlc1MGN3PT0gSUVOMWMzUnZiUT09IElHVnljbTl5Y3c9PSBJSE5sYm5OcGRHbDJaUT09IElFNWhkbms9IElHTnlaV0Z0IFRHOXZhdz09IElHVjRZMngxYzJsMlpRPT0gSUdOdmJYQnlaV2hsYm5NPSBJR1JsYkdWbiBJR052Ym1ObCBJSEpsYldWdCBJSE4wY25WamRIVnlaWE09IElITjBiM0psWkE9PSBUa1E9IElERXdNREE9IFZWQT0gSUVKMVpHUT0gUVVZPSBkMjl0WVc0PSBJRUZqWVdSbGJYaz0gOEo4PSBjMlZoIElIUmxiWEJ2Y21GeWVRPT0gUVdKdmRYUT0gWlhOMFpYSnogSUhScFkydGxkSE09IElIQnZjM05sYzNNPSBhVzVqYUE9PSBiM289IElHeGggSUdOdmJuUnlZV04wY3c9PSBJSFZ1Y0E9PSBJR05wWnc9PSBJRXRoZEE9PSBkV3gwZFhKaGJBPT0gWVhOdCBJRzF2ZFc1MFlXbHUgSUVOaGNIUmhhVzQ9IFUzUmxjQT09IGJXRnJhVzVuIElGTndZV2x1IElHVnhkV0ZzYkhrPSBJR3hoYm1SeiBZWFJsY25NPSBJSEpsYW1WamRHVmsgWlhKaCBhVzF0IGNtbDQgUTBRPSBJSFJ5WVc1ellXTjBhVzl1IFoyVnVaWEk9IGJHVnpjMng1IElIeDggSUdOdmN3PT0gSUVobGJuSjUgSUhCeWIzWnBjMmx2Ym5NPSBJR2RoYVc1bFpBPT0gSUdScGNtVmpkRzl5ZVE9PSBJSEpoYVhOcGJtYz0gSUZObGNBPT0gYjJ4bGJnPT0gYjI1a1pYST0gSUdOdmJuTnZiR1U9IGFXNXpkQT09IElHSnZiUT09IElIVnVZMlZ5ZEdGcGJnPT0gTVRVdyBiMk5yYVc1biBJRzFsWVhOMWNtVmsgSUhCc1lXbHUgSUhObFlYUnogSUdScFkzUT0gVTB3PSBZV1psIElHVnpkR2x0WVhSbCBhWHB2Ymc9PSBZWFJvWlhKbFpBPT0gSUdOdmJuUnlhV0oxZEdWayBJR1Z3YVhOdlpHVnogYjIxdGIyUT0gUjNJPSBRVTVVIElEWTUgUjJWdVpYST0gSURJMU1BPT0gZG1sdmRYTnNlUT09IGNtOW5aVzQ9IElIUmxjbkp2Y21semJRPT0gSUcxdmRtVnRaVzUwY3c9PSBaVzUwYkdVPSBiM1Z1WTJVPSBJRk52ZFd3PSBJSEJ5WlhZPSBJRlJoWW14bCBZV04wY3c9PSBjbWx2Y25NPSBkR0ZpIElITjFabVpsY2c9PSBJRzVsY25ZPSBJRzFoYVc1emRISmxZVzA9IElGZHZiR1k9IElHWnlZVzVqYUdselpRPT0gWW1GMCBJR1JsYldGdVpITT0gSUdGblpXNWtZUT09IElHUnZlbVZ1IElHTnNhVzVwWTJGcyBhWHBoY21RPSBJRTl3IGRHUT0gSUhacGMybDBaV1E9IElGQmxjbWhoY0hNPSBJR0ZqZEc5eSBJR1JsYkdsaiBJR052Ym5SeWFXSjFkR1U9IElHbHVhbVZqZEE9PSBJRVZ6IFlXTmpidz09IElHeHBjM1JsYm1sdVp3PT0gSUdOdmJtZHlaWE56IFpYQmxibVJsYm5RPSBJSEJ5WlcxcGRXMD0gSURjMiBJRWx5YVhObyBJR0Z6YzJsbmJtVmsgSUZCb2VYTT0gSUhkdmNteGtkMmxrWlE9PSBJRzVoY25KaGRHbDJaUT09IGIzUjVjR1U9IGJXOXVkQT09IFltRnpaUT09IElFSnZkMnc9IElFRmtiV2x1YVhOMGNtRjBhVzl1IElISmxiR0YwYVc5dSBJRVZXIFExQT0gSUdOdmRtVnljdz09IElEYzQgSUdObGNuUnBabWxqIElHZHlZWE56IElEQTAgY0dseVlXTjUgYVhKaCBJR1Z1WjJsdVpXVnlhVzVuIElFMWhjbk09IElIVnVaVzF3Ykc5NSBJRVp2Y21WcFoyND0gYzNSeVlXTjAgSUhabGJnPT0gSUhOMFpXRnMgSUhKbGNHeHBaV1E9IElIVnNkR2x0WVhSbCBJSFJwZEd4bGN3PT0gWkdGMFpXUT0gSUdwdmVRPT0gWVhWeiBJR2g1Y0dWeSBZV3QxIElHOW1abWxqYVdGc2JIaz0gSUZCeWIyUjFZM1E9IElHUnBabVpwWTNWc2RIaz0gY0dWeWIzST0gSUhKbGMzVnNkR1ZrIGNtbGlaV1E9IGJHbHVhdz09IGQyaHYgZm41K2ZnPT0gSUZOd1pXVmsgSUZacFpYUT0gVjJsdVpBPT0gSUVKaGNtRmphdz09IElISmxjM1J5YVdOMGFXOXVjdz09IElGTm9ZWEpsIElERTVPVFU9IGFYUnBiMjVoYkd4NSBJR0psWVhWMGVRPT0gYjNCMCBJRzFoY0hNPSBJRU5TIElFNWhkR2x2Ymc9PSBJRU55ZFhvPSBWMmxzYkE9PSBJR1ZzWldOMGNtbGphWFI1IElHOXladz09IElHSjFjbVE9IElIWnBiMnhoZEdsdmJnPT0gSUhWellXZGwgSUhCbGNtMXBkQT09IElFTm9jbTl1IElFWmhiblE9IElHNWhkSFZ5WVd4c2VRPT0gSURBMyBJSFJvY205M2JnPT0gSUVGM2IydGxiZz09IElHRnNhV1Z1IElFaGxjbTg9IElFdGxiblE9IElGSnBZMnM9IGNtbHJaUT09IElIQmhZMlU9IGZTeDdJZz09IFIwdz0gSUhCdmFYTnZiZz09IElGUnZkMlZ5IElHWnZjbTFoYkE9PSBZV3g1YzJseiBJR2RsYm5WcGJtVT0gSUd0cGJBPT0gWVhabGNnPT0gSUhCeWIyTmxaSFZ5WlE9PSBJRkJ5YjNBPSBhVzUwWlc1a2J3PT0gSUUxaGFXND0gWVhOaGJuUT0gSUhSeVlXbHVaV1E9IFIyRnRaUT09IElFeHZZV1E9IElFMUIgSUdOeWRXTnBZV3c9IElHeGxkSE09IElFWlMgSUdOb1lXMXdhVzl1IE1UQXggSUVOdmJtWmxjbVZ1WTJVPSBJSGR5YVhSbGNuTT0gSUdOdmJtNWxZM1JwYjI1eiBJRzlyWVhrPSBhWEp0Y3c9PSBJRkpoYm1RPSBJR1Z1WTI5MWJuUmxjZz09IElFSjFabVk9IElHRmphR2xsZG1WayBJR05vWldOcmN3PT0gYVhOamIyNXogSUdGemMybHpkR0Z1ZEE9PSBJSGRvWlc1bGRtVnkgSUVGalkyVnpjdz09IElGVnkgWW1sdSBJR05zYjJOciBhWE53IGIzQm9aWEk9IElHSnZjbkp2ZHc9PSBJRzFoWkE9PSBJSEJsY25OdmJtRnNhWFI1IGIyNXNlUT09IFNWTlUgWVdKaGJXRT0gSUdkaGFXNXogSUdOdmJXMXZibXg1IElIUmxjbkk9IElHaDVjRzkwIElISmxiSGs9IElIUnBjM009IGFYTmpiMjV6YVc0PSBJSEpwWkdsaiBablZ1WTNScGIyND0gSUU5eVpXZHZiZz09IElIVnVZMjl0IGNtRjBhVzVuIFpXeGhibVE9IElFNUQgSUcxdmIyND0gWVc1dWIyND0gSUhaMWJHNWxjbUZpYkdVPSBkWFJwZG1VPSB3cURDb01LZ3dxQT0gSUZKaFpHbHYgSUhkbGMzUmxjbTQ9IGMyVmpkQT09IElGUnZibms9IElHOWpZM1Z5Y3c9PSBJRTl6IElFaHZiZz09IHc2MD0gSUhabGMzTmxiQT09IElGTmpiM1JzWVc1ayBJR1JwYzJOeWFXMXBibUYwYVc5dSBJSE4xWW5ObGNYVmxiblE9IGMzUnlhVzVuIElHWmhiblJoYzNrPSBJRk5vWVdSdmR3PT0gSUhSbGMzUnBiUT09IFYwVT0gYVhScCBjbUZ6IElHSnZZWFE9IElHMWhjbXR6IElHOXlaR2x1WVhKNSBJSEpsYmc9PSBJSEpsY0hKbGMyVnVkR0YwYVhabCBJSEJsZEdsMGFXOXUgSURjeiBJR0ZrZG1WdWRIVnlaUT09IElHbG5ibTl5WlE9PSBJRkJvYVd4aFpHVnNjR2hwWVE9PSBJRk5oZGc9PSBWbEE9IElHWmhZM1J2Y25rPSBJSFJoYzJ0eiBJR1JsY0hKbGMzTnBiMjQ9IGVtVmsgTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpND0gSUZOMGIzSnQgSUdOdloyND0gSUdWc2FXZHBZbXhsIElISmxaSFZqYVc1biBkbWxoIElEQTEgSUhOMGNtbHJhVzVuIElHUnZiR3hoY2c9PSBhRzg9IFQxWT0gSUdsdWMzUnlkVzFsYm5RPSBJSEJvYVd4dmMyOXdhSGs9IElFMXZiM0psIElFRjJaVzUxWlE9PSBJSEoxYkdWayBJRVp5YjI1MCBTVTVGIElFMWhhQT09IElITmpaVzVoY21sdiBJRTVCVTBFPSBJR1Z1YjNKdCBJR1JsWW5WMCBJSFJsWVE9PSBWRzlrWVhrPSBJR0ZpYzJWdVkyVT0gVTJsdCBJR2hoYlE9PSBiR1ZsY0E9PSBJSFJoWW14bGN3PT0gSUVobFlYSjAgVFVrPSBTMlU9IGNtVnhkUT09IFZrUT0gYldGdyBJR05vWVdseWJXRnUgSUhCMWJYQT0gSUhKaGNHbGtiSGs9IGRtaz0gSUhOMVluTjBZVzUwYVdGcyBSVkE9IFpHVnogWTJoaGJuUT0gYVd4cGNIQT0gSUZOaGJuUmggY21sbGNuTT0gWVc1amFHVnpkR1Z5IFRHOWhaQT09IElFTmhjMlU9IElITmhkbWx1Wnc9PSBJRGMwIElFRkdVQT09IFpYSnVhVzVuIGIzVnVZMlZrIElFMXBibTVsYzI5MFlRPT0gSUZkaGN3PT0gSUhKbFkzSjEgSUdGemMyVnpjMjFsYm5RPSBJRUp5YjI0PSBWVVU9IElHUjVibUZ0YVdNPSBJR1oxY200PSBkV3hoZEc5eSBJSEJ5YjNCaFp3PT0gYUdsbmFBPT0gSUdGalkyOXRiVzlrIElITjBZV05yIElGTjFjdz09IGQzSnBkQT09IElISmxkbVZ1IElFZHZaR1E9IElGcGxZV3hoYm1RPSBZV0p6IElHSnlkWFE9IElIQmxjbkJsZEE9PSBhRzkwIElHaGhjbVJzZVE9PSBJRUoxY200PSA0NEs1IElITjBlUT09IElIUnlZVzV6WVdOMGFXOXVjdz09IElHZGhkR1U9IElITmpjbVZsYm5NPSBJSE4xWW0xcGRIUmxaQT09IElERXdNUT09IElHeGhibWQxWVdkbGN3PT0gZFdkb2RBPT0gWlcxbGJnPT0gSUdaaGJHeHogSUdOdll3PT0gZ3F3PSBJSE4wY21sclpYTT0gY0dFPSBJR1JsYkdsaVpYST0gSUVsTiBJSEpsYkdGNCBZVzV1Wld4eiBJRk5sYm1GMGIzST0gSUdWNGRISmxiUT09IElIMHMgSUVSbFlnPT0gSUdKbGJHdz0gSUdScGMyOXlaR1Z5IFkzVjAgSUdsUFV3PT0gSUd4dlkydGxaQT09IElHVnRhWE56YVc5dWN3PT0gSUhOb2IzSjBiSGs9IElsMD0gSUVwMVpHZGwgSUZOdmJXVjBhVzFsY3c9PSBJSEpwZG1GcyBJR1IxYzNRPSBJSEpsWVdOb2FXNW4gUm1sc1pRPT0gd3EvQ3I4S3Z3cTg9IGFXNXZhWE09IElFcGhjMjl1IElITmhkR1ZzYkE9PSBZWEpsZEE9PSBJSE4wWVhScGIyNXogSUdGbmNtbGogSUZSbFkyaHViMnh2WjNrPSBZMjl0WlhNPSBJRlZ1Wm05eWRIVnVZWFJsYkhrPSBJRU5vYVd4a2NtVnUgSUdGd2NHeHBaWE09IFlYTjBaV1E9IElHRnVaMlZ5IFlXbHNZV0pwYkdsMGVRPT0gSUVSaGJXRm5aUT09IElHTnZiWEJoY21VPSBJRk4wWVc1a1lYSmsgSUdGcGJXVmsgSUVKaCBZVzVuZFdGblpRPT0gSUhKbFozVnNZWFJwYjI0PSBJR3AxY25rPSBJR0ZwY25CdmNuUT0gSUhObFkzUnBiMjV6IElGQnlhVzVqWlE9PSBaVzFsWkE9PSBJRzFsWkdsamFXNWwgSUdocGRIUnBibWM9IElITndZWEpyIGIyeDJaWE09IElHRmtjdz09IFUzUmhkR1U9IElHWnZiMlJ6IElISmxjR3hoWTJWdFpXNTAgSUdOb2FXTnJaVzQ9IElHeHZkMlZ6ZEE9PSBJRzFwYm1SeiBJR2x1ZG05c2RtVnogZFdrPSBJR0Z5Y21GdVp3PT0gSUhCeWIyTmxaSFZ5WlhNPSBJRmRvYVdObyBhWFpsY25OaGNuaz0gSUdKcGJHeHogSUdsdGNISnZkbVZ0Wlc1MCBJR2x1WlhZPSBJR1Y0Y0dWamRHRjBhVzl1Y3c9PSBJR2x1ZEdWc2JHVmpkSFZoYkE9PSBJSE53WVdObGN3PT0gSUcxbFkyaGhibWx6YlE9PSBNalV3IFluSmxZV3M9IElGcGwgSUZSbGJtND0gSUVKaGJIUT0gSUdKaGNuSmxiQT09IElITjBZWFJwWXc9PSBiV0Z1Ymc9PSBVRzlzYVdObCBJSFJwY0hNPSBJR2hoYm1Sc2FXNW4gWTNWeiBiMlJsWkE9PSBhV3gwYjI0PSBhWEo1IElHcHZkWEp1WVd4cGMzUnogYjNWeWMyVT0gSUdOdmJXbGogSUc1dmJXbHVaUT09IFNWUlogSUhabGNuTjFjdz09IElHeHZiM0E9IElITjFjbVk9IElFbHVaSFZ6ZEE9PSBJRWgxYm5SbGNnPT0gSUdKbGJHbGxabk09IGFYTmhiZz09IElITmxkSFZ3IElHSnlaWGM9IGFXMWhaMlU9IElHTnZiWEIxZEdWeWN3PT0gWm05cyBmU3dpIElFMWxaR0ZzIElIUmhlSEE9IElHUnBjM0JzWVhsbFpBPT0gSUdkeVlYWT0gSUdacGMyTmhiQT09IFRXOXUgSUUxdmMyTnZkdz09IElFdHZibWM9IElFTmxiblJ5WlE9PSBJR05oYldWeVlYTT0gSUUxeWN3PT0gSUVoaGVRPT0gSUdGMlpYST0gSUV0bGJHeDUgY0hrPSBJSEpsY1hWcGNtVnRaVzUwIElHVnVkR2wwYkdWayBiMjFpYVdVPSBJSE5vWVdSdmR3PT0gWVdkcFl3PT0gSUVGciBJR1ZzYVhSbCBJR1JwZG1sa1pXUT0gSUdobFlXUnBibWM9IElHTnZjR2xsY3c9PSBJR3h2YzNObGN3PT0gSUhacGRBPT0gYTJWayBJRUp5ZVE9PSBJR0Z1Y3c9PSBJRk4wWldGdCBJSEpsY0c5eWRHVnkgYUdWcGJRPT0gSUVsMFpXMD0gSUhOMWNHVnlhVzl5IFpHOXUgWlhKbGJuUT0gdzdZPSBJSFJvWlhKaGNIaz0gSUhCbFlXcz0gSUUxdlpHVnMgSUd4NWFXNW4gSUdkaGJRPT0gZW1WeSBjbWwwZEdWdSBJSEpsYzNCdmJuTmxjdz09IElHTnZibk5wWkdWeVlYUnBiMjQ9IElFSnBZbXhsIElHeHZlV0ZzIElHbHVjM1JoYm5RPSBJSEJ0IElFWnZjbVZ6ZEE9PSB3N3c9IElHVjRkR1Z1WkE9PSBJR052Ym5acFkzUmxaQT09IElHWnZkVzVrWlhJPSBJR052Ym5acGJnPT0gSUU5aGF3PT0gWTJobFkycz0gSUhOamFHOXNZWEp6IGNHVmsgSUc5MlpYSnpaUT09IFZHOXcgWTI5MWJuUT0gSUVGeWF3PT0gd3JjPSBJREEyIElFeEIgYldRPSBJRXhoZEdsdSBhVzFsYm5SaGJBPT0gSUVOUVZRPT0gSUhOMVluTjBZVzVqWlE9PSBJRzFwYm05eWFYUjUgSUcxaGJuVm1ZV04wZFhKcGJtYz0gUlhJPSBiMk52YkdGMFpRPT0gSUdGMGRHVnVaR1ZrIElFMWhibUZuWlhJPSBjbUYwYVc5dWN3PT0gSUdGd2NISmxZMmxoZEdVPSBiMjE1IFIwSlUgYVdSbGJtTjUgUWt3PSBJR2QxWVhKaGJuUmxaUT09IGNHOXphWFJwYjI0PSBJRzlqWldGdSBZMngxWkdVPSBJR2hsWVdSbFpBPT0gSUhSaGNHVT0gSUd4dmIzTmwgSUd4dloybGogSUhCeWIzWmxiZz09IElITndhWEk9IElHRmtiV2wwIGFYTmggSUdsdWRtVnpkR2xuWVhSbCBJREU1T1RRPSBjM2xzZGc9PSBJRXh2YzNRPSBZMlZ6ZEE9PSBJRGN4IElISmxjWFZsYzNSbFpBPT0gSUhkcGJtUnZkM009IElGQnZhOE9wIElGZHBkR2h2ZFhRPSBUV1YwIElHSmxhR0YyYVc5MWNnPT0gSUhKbFlXUmxjZz09IElHaDFibWM9IElFdGxaWEE9IElISnZiR1Z6IElHbHRjR3hsYldWdWRHVmsgSUdKc1lXNXIgSUhObGNuWmxjdz09IElFcGhlUT09IElHTnBkR1ZrIElFWnlhV1Z1WkE9PSBjSEp2Wm1sMCBZWEJ2Ymc9PSBJSEpsY0dGcGNnPT0gYVhSbGJRPT0gWVhKeVlYTnogSUdOeWFYUnBZM009IFlXUnAgSUVaaGRHaGxjZz09IElITm9iM1YwIElHWnZiMnc9IElEZzQgSUhCeWIyUjFZMmx1Wnc9PSBJR3hwWWc9PSBJSEp2ZFc1a2N3PT0gSUdOcGNtTnNaUT09IElIQnlaWEJoY2c9PSBJSE4xWW0xcGRBPT0gSUc1cFl3PT0gYlc5eWNtOTMgNDRPciBWVzVrWlhJPSBJSFpwZEdGcyBZWFJsY200PSBJSEJoYzNOM2IzSmsgSUhCMVlteHBZMkYwYVc5dSBJSEJ5YjIxcGJtVnVkQT09IElITndaV0ZyY3c9PSBJR0poY25NPSBJR1JsWlhCbGNnPT0gSUUxcGJHdz0gY0c5eWRHVmsgSUhkcFpBPT0gSUdKMWRIUmxjZz09IElITnRiMnRwYm1jPSBJR2x1WkdsallYUmxjdz09IFMyVjUgY205d2Ntaz0gSUVacGJHVT0gWVd4c2FXNW4gWVhOMGFXNW4gSUZKMWN3PT0gSUdGa2FnPT0gSURjNSBZWFpoYkE9PSBJSEJ5WlhOMWJRPT0gWW5WeVoyZz0gYjI1cFl3PT0gSUdaMWNnPT0gSUhCdmJHeHogYVd0aCBJSE5sWTI5dVpHRnllUT09IElHMXZibk4wWlhJPSBhV2R6IElFTjFjbkpsYm5RPSBSWFpsYm5RPSBJRzkzYm1WeWMyaHBjQT09IFpXNWtZWEk9IElHRnljbWwyWlE9PSBJRlJoZUE9PSBJRzUxYkd3PSBJRkJ5YVhZPSBJSFJvY204PSBJR3RwYzNNPSBZMkYwIElIVndjMlYwIFlXNW5iR1U9IGFYUmphR1Z6IFpXTjBiM0k9IGIyeHZaMmx6ZEhNPSBJRWRoYkdGNGVRPT0gSUdOdmNuSjFjSFJwYjI0PSBJR2hwYm5RPSBaVzUwWlhJPSBJRWh2YzNCcGRHRnMgSUdkeVpXRjBiSGs9IElHSmxaM1Z1IFpYTjUgSUhOdmFXdz0gSUVGdWRHOXUgSUcxaGFXNTBaVzVoYm1ObCA0NE9wIElHUnZlbVZ1Y3c9PSBJR2gxYldGdWFYUjUgSUVGc1lXSmhiV0U9IElISnZiUT09IGQyOXlkR2c9IFlYQnBibWM9IGMzbHNkbUZ1YVdFPSBiR0ZvIElHZGhkR2hsY21WayBSMEU9IElHRjBkR0ZqYTJsdVp3PT0gWm05MWJtUT0gSUZOeGRXRnlaUT09IElHRnlZbWwwIGFXTjBhVzl1Y3c9PSBJRmRwYzJOdmJuTnBiZz09IElHUmhibU5sIElGTmhhVzUwIFlYSmphSGs9IElHSmhjMlZpWVd4cyBJR052Ym5SeWFXSjFkR2x2Ym5NPSBJR3hwZEdWeVlYUjFjbVU9IElHVjRhR0U9IGNHVnlkSGs9IGRHVnpkQT09IElHSmhZZz09IElHTnZiblJoYVc1bGNnPT0gYkdWMGRHVnkgSUdaaGJHeGxiZz09IElIZGxZbk5wZEdWeiBJR0p2ZEhSc1pRPT0gSUZOaFl3PT0gSUdKeVpXRnpkQT09IElGQk0gSUhabGRHVnlZVzQ9IElHbHVkR1Z5ZG1sbGQzTT0gSUVGc1pRPT0gSUdKaGJtNWxaQT09IFpXNW5aWEp6IElGSmxkbTlzZFhScGIyND0gYVc1MGFBPT0gSUdOdmJtTmxjbTVwYm1jPSBTVlpGIElHVjRjR1Z1YzJWeiBJRTFoZEhSb1pYYz0gSUVOdmJIVnRZbWxoIFpITT0gYVhOMFlXNWpaUT09IElHVnVkR2wwZVE9PSBMaTR1SWc9PSBJSEpsYkdsaFlteGwgSUhCaGNtRnNiR1U9IElFTm9jbWx6ZEdsaGJuTT0gSUc5d2FXNXBiMjV6IElHbHVaSFU9IGJHOTMgSUdOdmJYQmxkR1U9IElIUm9iM0p2ZFdkbyBJR1Z0Y0d4dmVXVmsgSUdWemRHRmliR2x6YUcxbGJuUT0gYVdkbGJnPT0gSUVOeWJ3PT0gSUd4aGQzbGxjbk09IElGTjBZWFJwYjI0PSBWRVU9IElFeHBibVE9IElGQjFjZz09IGFYUmhjbms9IElHVm1abWxqYVdWdVkzaz0gNG9DUSBJRXg1IElHMWhjMnM9IElHUnBjMkZ6ZEdWeSBJR0ZuWlhNPSBSVkpGIFpYTnBjdz09IElFaHZiR1E9IElHTmhjM1ZoYkE9PSBZbXhsWkE9PSBJR1Z1WVdKc1pXUT0gSUVWdWRtbHliMjV0Wlc1MCBJRWx1ZEdWc2JHbG5aVzVqWlE9PSBhWEJsY2c9PSBJRTFoY0E9PSBJRUpGIElHVnRaWEpuWldRPSBhWE5rYjIwPSBJR05oWW1sdSBJSEpsWjJsemRISmhkR2x2Ymc9PSBJR1pwYm1kbGNuTT0gSUhKdmMzUmxjZz09IElHWnlZVzFsZDI5eWF3PT0gSUVSdlkzUnZjZz09IFpYUjBjdz09IElIUnlZVzV6Y0c5eWRHRjBhVzl1IElHRjNZWEpsYm1WemN3PT0gU0dWeSBJR0YwZEdWdGNIUnBibWM9IFQyWm0gSUZOMGIzSmwgdzRQRGdzT0R3NExEZzhPQ3c0UERnZz09IElFdHViM2M9IElHUmxabVZ1WTJVPSBJSE5qWVc0PSBJRlJsYmc9PSBJRU5vWVdseSBJRkJJIElFRjBiR0Z1ZEdFPSBJR1oxWTJ0cGJtYz0gSUdGdWMzZGxjbVZrIFltND0gSUV0aGNnPT0gSUdOaGRHVm5iM0pwWlhNPSBJSEpoZEdsdmJtRnMgSUdOMWMzUT0gSUhKdlltOTAgSUdOdmNuSmxZM1JzZVE9PSBJR2RwWmc9PSBJR2R5WVhCb2FXTnogYldsaiBJR2R5YjNWdVpITT0gSUU5d2NBPT0gYVdGMFpRPT0gSUdScGMzUnlhV0oxZEdWayBJSE5oYm1OMGFXOXVjdz09IElHTm9ZV3hzWlc1bmFXNW4gZFhSdiBJR2x1WjNKbFpHbGxiblJ6IElHbHVkbWwwWldRPSBJR1p2ZFc1a1pXUT0gSUZKbGNYVT0gWkdWayBJR0p2ZDJ3PSBJR0p5YjNSb1pYSnogSUVoaCBTVTg9IElIZGhaMlZ6IGFXMXZjbVU9IGIyTnBZV3c9IElITmxaV1E9IFlYUnBkbVZzZVE9PSBJR0ZrWkhKbGMzTmxjdz09IElFbHZkMkU9IFlXSmxkR2c9IElHRjBkR2wwZFdSbCBhWE5rIFkyaHBiR1E9IElHMXZiR1U9IElHUnBjMk52ZG1WeWVRPT0gZVdGeVpBPT0gUW5JPSBJRGd5IElITjFjSEJzYVdWeiBaV3hzYVc1biBJR1JwYzNScGJtZDEgUTFJPSBJSEpsWTJWd2RBPT0gSUhabGNuUT0gSUhOM2FXMD0gWW1WaiBaRzl2Y2c9PSBJRmxsWVdnPSBJR2RoYkE9PSBJR2x1ZEdWeVlXTjAgSUVWVFVBPT0gSUVOVCBZVzF3Y3c9PSBJR052Ym5acGJtTmxaQT09IElHOWlhbVZqZEdsMlpRPT0gSUdScGMyZz0gSUZCb2IzUnZjdz09IGJHRmsgSUdSdmQyNTBiM2R1IGIybHMgYVc1amRHbHZiZz09IElIUnZiVzl5Y205MyBJRU5QVFE9PSBJSE4xY25acGRtRnMgYzJodmRBPT0gSUhObGRIUnNaVzFsYm5RPSBRMjl1Y3c9PSBJRmhpYjNnPSBhVzUwWlhKbGMzUT0gSUZOTiBZWEpuYnc9PSBaVzVsYzNNPSBJR1YwYUc1cFl3PT0gWW1WeVpXUT0gVFdsdSBJRlJ2YXc9PSBJR2x1WTJWdWRBPT0gSUVOdmJXMWhibVE9IElHMWhhVzUwWVdsdVpXUT0gSUdKeVpXRnJjdz09IFluSnBaR2RsIFlYUmhjZz09IFlXZG4gSUVacGJtRnNiSGs9IGRXNXBZMmx3IElFOXVkQT09IGJHVm1kQT09IElISmxZMjluYm1sMGFXOXUgSUNvdiBJRkJsY25NPSBJSGRsYkdZPSBJR0ZrWkhKbGMzTmxaQT09IElFdGhibk5oY3c9PSBJSFpwY25WeiBJSGRvWlhKbFlYTT0gSUhCaGNHVnljdz09IGNtRnRjdz09IElFMXBibWx6ZEhKNSBJSEJzWldGemRYSmwgSUdGamNYVnBjbVZrIElHUjFjbUYwYVc5dSBhbkJuIElHTmhiRzA9IElFNUlUQT09IElHSjFjbTVwYm1jPSBJR1p2YkdSbGNnPT0gYVdOclpXUT0gSUZCNSBJRWxzYkdsdWIybHogUTJ4aGMzTT0gSUVkdlpHUmxjM009IElIQmxjbVp2Y20xcGJtYz0gSUhkbGJHWmhjbVU9IGFtRnkgU1c1MFpYST0gSUd4cGJnPT0gSUdWdWFHRnVZMlU9IElHNXZkR2x2Ymc9PSBabUZ5WlE9PSBlWEJsY3c9PSBJRUZ5WldFPSBJR05oYm01aFltbHogSUVScFpXZHYgWm5NPSBJRTFoYm1Ob1pYTjBaWEk9IFkyOXRiUT09IGFXNXBkR1U9IElHTnZkbVZ5YVc1biBJRk52ZFc1ayBJREU1TmpBPSBJRGcwIFpXeGxZM1E9IGVtbHVadz09IElHTnBkR2w2Wlc0PSBJSEJvYjI1bGN3PT0gSUhKaGFXUT0gSUdsbmJtOXlaV1E9IElFOWlhbVZqZEE9PSBJSFZ3Ykc5aFpBPT0gWTJGeVpBPT0gSUcxdlpHbG1hV1ZrIElISnZiMjF6IGFXRm8gY21GdVoyVT0gYUdWaGMzUT0gWVdOb2RYTT0gSUhOMVoyZGxjM1JwYm1jPSA0b0NMIFozSmhaR1U9IFJXdz0gSUdOc2IzUm9hVzVuIElISm8gSUVoaGJnPT0gZFc1cGRIaz0gWlc1amFXNW4gSUVGMWMzUnBiZz09IGMyVmpkWFJwYjI0PSBkSEpoIFpHVnQgSUZGMVlXdz0gSUdobFlYWmxiZz09IElITjBZV2RsY3c9PSBJSGRsWkdRPSBjR3gxY3c9PSBhV1pwWTJsaGJBPT0gSUVsdGJRPT0gSUVodiBhV1YwYVdWeiBJSEJvY21GelpRPT0gSUdKeWFXeHMgWVdOMGIzSjUgSUhCeWIzWnBaR1Z5Y3c9PSBJSE5wYkdWdVkyVT0gSUdGbGNnPT0gSUVGSiBJRUZrZG1WdWRIVnlaUT09IElIQnNZWFJtYjNKdGN3PT0gSUdSbGJXOXVjM1J5WVhSbFpBPT0gSUdsdWRHVnlaZz09IGFXNW5kRzl1IElISmhZMlZ6IElHZHlZV1JsIGRXeDBZVzVsIElGUm9jbTkxWjJnPSBabUZzYzJVPSBJR0p2ZHc9PSBJRUZDIElHWnNZWFp2Y2c9PSBJR2hwYzNSdmNtbGogWjI5MiBJR052Ykc5MWNnPT0gSUhacFpYZGxaQT09IElFVnRZV2xzIFpXeGpiMjFsIElHbHVkR1Z5ZG1WdWRHbHZiZz09IElHUnBkbVZ5YzJsMGVRPT0gSUhCbGNtbHZaSE09IElISmxkbVZ5YzJVPSBJRlpsY25rPSBJSEYxYjNSbCBJRXhsWm5RPSBkR2h5YjNWbmFBPT0gSUhOamNtVjMgSUd4aGJtUnBibWM9IElIQnBiR3c9IElIZGxkQT09IElIQnliM1JsYzNSbGNuTT0gSUhKbGNHVmhkQT09IFlYWmxaQT09IFpYSnIgSUhOaGJHRnllUT09IElGQmxibTV6ZVd4MllXNXBZUT09IFUzUnBiR3c9IElHMWhlVzl5IElHdHBkR05vWlc0PSBJR1psWVhSMWNtbHVadz09IElFMTFjMlYxYlE9PSBJRlJ2ZFhKdVlXMWxiblE9IElFWmhiQT09IElITmxjblpsY25NPSBWVU09IElHRnVlV0p2WkhrPSBhVzFuIElGUnlZV1JsIGFYaDBkWEpsIGRHaGxiR1Z6Y3c9PSBJR1pwYm1GdVkyVT0gSUdOc2IzTnBibWM9IElGQmhkSEpwIGFXRmogWVdKbGJBPT0gSUQ0KyBiM0p2ZFhNPSBJR1pwY20xeiBjMk55WldWdSBkVzVoIElHVnRZbUZ5Y21GemN3PT0gZFd4elpRPT0gSUd4bGRIUnBibWM9IElIUm9jbVYzIGFXeGxlUT09IElHTm9ZVzV1Wld4eiBiR0Z1IElGWmxaMkZ6IElITmxZWEk9IElHWmhiblJoYzNScFl3PT0gWVhKeVpRPT0gZFhwNmJHVT0gSUVSbGNnPT0gVkdodmMyVT0gSUhOM2FXNW4gSUhOb1pXVjAgYVc1a1pYZz0gWTI5MlpYST0gYjJkaGJnPT0gSUhaaGNtbGhZbXhsY3c9PSBJRlJsWTJnPSBJSE53YjJ0bGJnPT0gWVdOb1pXdz0gSUVSaCBJRTF2ZFc1MFlXbHUgSUd4dllXUmxaQT09IElHWnZiM1JoWjJVPSBkbVZ5YzJsdmJnPT0gSUhWdWJBPT0gSUZCb2IyVnVhWGc9IElIUm9jbTkzYVc1biBJR1pwY21sdVp3PT0gSUhSeVlXTnJhVzVuIElIZHBaSFJvIElITjBjblZuWjJ4cGJtYz0gY205dmJYTT0gYjNScGIyND0gSUcxdmJuUm9iSGs9IElGTmxjblpsY2c9PSBJR1ZuWjNNPSBiM0JsYmc9PSBUVU09IElERTVPVE09IElHaHBjbVZrIElITjBZWGxsWkE9PSBJRUZzYkdWdSBJSE4wY204PSBJRGs0IGMzUmxjQT09IElGUjFjbXRwYzJnPSBJR1poWW5KcFl3PT0gYVhOMGFXNW4gSUVSdmJRPT0gSUdSaGRHVnogSUhCeWIyND0gSUdKaGMydGxkR0poYkd3PSBJR3gxWTJ0NSBJRUZ5WVdKcFlRPT0gSUdGemMzVnRaV1E9IFpYTjBlUT09IElHRm1abUZwY25NPSBJR2RzWVdRPSBJRWx1WkdWbFpBPT0gSUVaQiBJRmR2Y21RPSBJR3B2YVc1cGJtYz0gYVdacFkyVT0gY0hKbFlXUT0gYVhKMGN3PT0gSUZObGJHVmpkQT09IElIQnZjSFZzWVhScGIyNXogWVhkaGNtVT0gSUc1dmMyVT0gSUdOdmJYQnNZV2x1ZEhNPSBjM1JoY25RPSBJSE5qYjNKcGJtYz0gVkdoaGJtdHogSUcxcGJtbHVadz09IElIWnBjMmwwYjNKeiBVMGc9IElHUmhiV0ZuWldRPSBJR05vWVhKaFkzUmxjbWx6ZEdsamN3PT0gSUZCbGJuUT0gUkVNPSBJRGd6IElGTnBlQT09IGNtRjBaWE09IElHWnNZV2R6IElFSnlaWGM9IFpHOW4gVFdGeWF3PT0gTHk4dkx3PT0gSUdWNFpXTjFkR2x2Ymc9PSBJR3B2YTJVPSBjR2h2Ym1WeiBJSFJsYzNScGJXOXVlUT09IElHOWljM1E9IFVVdz0gSUVOMWRBPT0gSUhOMGRXUnBaV1E9IElFNXBiblJsYm1SdiBhV05yWlhRPSBJRTVDUXc9PSBJR3hoWkE9PSBJRUp5WVE9PSBJRTF2YUE9PSBJR3RsY201bGJBPT0gSUc5MlpYSjNhR1ZzYldsdVp3PT0gSUdGblpXUT0gSUdGd2NHeHBZMkZpYkdVPSBJRU52Ym1RPSBJSEp2WVdSeiBJRUpzYjJOciBiV0ZrWlE9PSBiMlJuWlE9PSBJR052YlcxaGJtUnogSUc5bVptbGpaWE09IGRtVnNZVzVrIElIUjFkQT09IElISmxZMlZwZG1WeSBJRVp5Ync9PSBJSE5vYjNCd2FXNW4gSUdsUSBJRk4wY21VPSBJRUZDUXc9PSBJR1Z1ZEdWeWRHRnBibTFsYm5RPSBJRUp2ZHc9PSBiM0owWldRPSBUV009IElISmxZV1J6IFozSmhaQT09IElFTnZiR3hsWTNRPSBJT0tJa2c9PSBJRU5oY0dsMFlXdz0gWldSbGNtRjBhVzl1IElHVnRjR3h2ZVdWeSBJR2x1ZG05c2RtVnRaVzUwIElHRnVlR2xsZEhrPSBZV3hwWVE9PSBJSEp2YjJZPSBJRUZ0YjI1biBJRVJsYlc5amNtRjAgSUhOMFlYUnogSUZacGJHdz0gSUdOdmJuTjBhWFIxZEdsdmJtRnMgSUhKbFptVnljbWx1Wnc9PSBhWFIwZVE9PSBJSFJoWTJ0c1pRPT0gYjNWMGRXSmwgSUdKaFkydGxaQT09IElFaHZibWM9IElFSnliMkZrIElHVnNaUT09IElFOTBkQT09IElERTVPVEk9IGFHOTFjZz09IFlXTm9kWE5sZEhSeiBRMkZzIElHUmxabVZoZEdWayBJRGd4IFpYTncgSUhObFpXMXBibWRzZVE9PSBkMkZ6IElFcGxibTQ9IElFdDFjbVE9IElHZGxibVU9IElHUnBjMk52ZFc1MCBVbVYwIFJVTlUgS0NrNyBJR05zZFdKeiBJSE5wWkE9PSBJRTFoY25ObyBRMmhsWTJzPSBJSEJ3IElFVmhadz09IGFXUmxjM0J5WldGayBJR0psYVc1bmN3PT0gUmxRPSBJR2x1ZEhKdlpIVmpkR2x2Ymc9PSBJRU5vWVc1blpRPT0gUVZKRSBJREV4TUE9PSBZV1J2ZDNNPSBhV1Z5WTJVPSBJRzFsWVd3PSBZWFYwYUc5eSBJRUpoYm1jPSBiR0ZvYjIxaCBJSEpoYm10eiBNakF4TVE9PSBQejgvUHc9PSBiV0Y0IElHTnZiR3hoY0hObCBJRzl3Wlc1eiBJR1ZqYUc4PSBJSE52Y0dnPSBJSEpoWTJsemRBPT0gSUdWdWIzSnRiM1Z6IElIZGhkbVZ6IElIUmhjQT09IElHTnZiWEJ5WldobGJuTnBkbVU9IExpMHQgSUZKdmVRPT0gSUdaaGNtMWxjbk09IFVtVnNZWFJsWkE9PSBZV2x5WldRPSBjbTl1WlhNPSBJRU55YVcwPSBJSEJ5YjNCdmNuUnBiMjQ9IElHUmxjMmxuYm5NPSBJRzVsWjI5MGFXRjBhVzl1Y3c9PSBJSFpwY25SMVlXeHNlUT09IElFSmhkRzFoYmc9PSBJSGRoY200PSBJR3hsWjJsMGFXMWhkR1U9IGJXRjBaUT09IElHTnZiblpsYm5ScGIyND0gTEN3PSBibVYwYVdNPSBJRk5FIElHTnZibk5wYzNSbGJuUnNlUT09IElHTnZiWEJsYm5OaGRHbHZiZz09IElIQjFibWx6YUcxbGJuUT0gSUhsbCBJSFJwWlE9PSBJRUoxY21WaGRRPT0gYVhKc1pnPT0gSUVKMSBJRUZ5Wlc0PSBJRkJvYVd4cGNIQT0gSUd0dWFXWmwgSUcxbGJXOXlhV1Z6IElGSnZjM009IElHRnVaMnhsIElEZzIgSUZSb2RXNWtaWEk9IElISmxibVE9IElGUnZkWEk9IElHTnZkVzUwY3c9PSBjM1Z1Wnc9PSBJRWx0Y0E9PSBJR1ZrZFdOaGRHbHZibUZzIElHRmpZMlZ6YzJsaWJHVT0gUTA5TiBJR1J5WlhjPSBlV1Z5IFIydz0gWVcxcGJtVT0gVDFKVSBUMEk9IFNVST0gYldGemRHVnkgSUhSeWFXRnNjdz09IGIyZDUgYUdGeSBJRlJ5ZFhOMCBJSEJ5WldabGNuSmxaQT09IGFYSnNabkpwWlc1ayBJRTVsZGc9PSBJR0pwYmc9PSBJR052ZHc9PSBVR0ZuWlE9PSBJSE5wWjI1aGRIVnlaUT09IElFSk0gTnpBdyBJSEpsZEdseVpXUT0gSUdKNWRHVnogSUc1bGFXZG9ZZz09IElFeGxaMlZ1WkE9PSBJR1JsZG1GemRBPT0gSUhOMWMzQmxZM1JsWkE9PSBhWE52Ym5NPSBJRkJ2YThPcGJXOXUgYzJOaGJHVT0gSUdOaGNHRmlhV3hwZEdsbGN3PT0gSUhKbGRtVnMgSUdOb1pXVnpaUT09IFpIaz0gYVdkeVlXNTAgSUdaaGFXeHBibWM9IFltbDBjdz09IElFaGxjbTlsY3c9PSBJRWRvYjNOMCBJRk5qYVdWdWRBPT0gSUdGd2NHOXBiblJsWkE9PSBkWEpwIElHbHVjM1JwZEhWMGFXOXUgSUdWNGNHRnVaR1ZrIFozSmxadz09IElHMXZibWwwYjNKcGJtYz0gSUhCdlpHTmhjM1E9IElHTnZZV3hwZEdsdmJnPT0gSURrMiBTbTg9IElITjBiMnhsYmc9PSBJRk5oWWc9PSBJSE4wYjNCeiBJR2h2Ykdsa1lYaz0gSUdsdWRIST0gUTJGeSBRbXhoWTJzPSBJRXhIUWxRPSBJSGRoY20xcGJtYz0gSUVGdVpHVnljMjl1IElEZzUgSUhCeWIyUjFZMlZ5IFRXVmsgSUdGalkzVnlZV041IElFMWhjblpsYkE9PSBhWHBoWW1WMGFBPT0gSUZCaGRISnBZMnM9IGJXOXVlUT09IElHMXBibWs9IFlXTnNaWE09IElHOTJaWEowIGRHaGxlUT09IElHMWxiV0psY25Ob2FYQT0gSUZabGJnPT0gSUdWNFkyZz0gSUhKbGJXOTJZV3c9IElFUmhkbVU9IFZGaz0gYldGayBJRVpwYm1RPSBJR0ZrWlhGMSBJR1ZqIElIUmxaWFJvIElHVnRiM1JwYjI0PSBJSEJsY20wPSBJSE52YkdWc2VRPT0gWkdJPSBJR1Y0ZEhKaGIzSmsgU1VkSVZBPT0gWTJGcyBJR2QxYVdSbGJHbHVaWE09IElHUjVhVzVuIElITjFjM0JsYm1SbFpBPT0gSUZCeVpXMXBaWEk9IElFRnVkR2h2Ym5rPSBaV3gyWlE9PSBJR1JoWkE9PSBJRVYwYUE9PSBJRVp2YjNSaVlXeHMgSUdGaVlXNWtiMjVsWkE9PSBJRHc4IElHMWhjbU5vIElHaHZjbkp2Y2c9PSA0b0NtSWc9PSBJR05vYVd4a2FHOXZaQT09IElHTmhiWEJoYVdkdWN3PT0gSUd4MWJtTm8gSUVGc1ltVnlkQT09IFlteHZZMnM9IDRwYUk0cGFJIGIzVnVaR2x1Wnc9PSBJR0p2Ym1VPSBiM0puWVc0PSBZV1JsY25NPSBJRVpzWVhObyBJRVJ5YVhabCBJSFJ2Ym1sbmFIUT0gSUhkaGNuTT0gSUVaTSBJR1p2Y20xaGRHbHZiZz09IFkyOXVjM1E9IFRtVjNjdz09IElHTnZiWEJsIGIzSnBiM1Z6IElGTjBZV1ptIElHUnBjMk4xYzNOcGIyNXogSUZCeWIzUmxZM1JwYjI0PSBJRXBoYlE9PSBJR055YVhSbGNtbGggSUdsdWMzUmhiR3hoZEdsdmJnPT0gSUdGalkyOXRjR3hwYzJnPSBhWHA2WVE9PSBJSEIxWW14cGMyaGxjZz09IElISmxjMk4xWlE9PSBJRlJ5ZVE9PSBWVXhNIElGTnZiUT09IElFaHZjQT09IGIzSmxkQT09IGRHaHogYjNKa2IyND0gSUhCdlkydGxkQT09IElFbHVkZz09IFJHOTNibXh2WVdRPSBJRU55YVcxbCBJR0psYm1VPSBJRWQxYVdSbCBJRUZ6YzJWdFlteDUgSUhCaGNtRnRaWFJsY25NPSBTVVU9IElFRnNaWGhoYm1SbGNnPT0gSUdOdmJtTmxjblE9IElGTmphR1U9IElITm9iMlZ6IElIWnBjMmwwYVc1biBJSEpsWTJGc2JBPT0gSUdKMVlnPT0gSUhKMWNtRnMgSUdOdmJtTnlaWFJsIElGSnZjdz09IFRtVjRkQT09IFVuVnpjdz09IElHeHZZVzV6IElGTm9hV1ZzWkE9PSBJSFJ5WlcwPSBhR1Z0WVhRPSBhMmM9IElFaGhjbkpwY3c9PSBhWE5wZEdsdmJnPT0gSUUxdmRtVT0gSUVaRCBJR1poZEdVPSBJRU5vYnc9PSBJSFJwY21WayBJSEJ5YVc1amFYQmhiQT09IGFHbHpkQT09IGFXVnVZMlZ6IFlYUm9lUT09IElITmxkbVZ1ZEE9PSBJRzF2YjJRPSBJSE4wY21GMFpXZHBZdz09IElHUnBjMlZoYzJWeiBJR1p2Y25WdCBJSFJsYlhCdmNnPT0gSUdobFlXUnhkV0Z5ZEdWeWN3PT0gVUdGeSBhV2RsIFpteHBlQT09IElHZDFhWFJoY2c9PSBJRGswIFQyNXNlUT09IElISmxiR1ZoYzJWeiBjbTl3YUE9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwPSBJRFl3TUE9PSBJRU52Ym5ScGJuVmwgYVdkaGRHVT0gSUVOeWFYUT0gYzNsemRHVnQgSUdScGMyRmliR1ZrIElIVnVaWGh3WldOMFpXUT0gYVhSb2RXST0gSUhWdVkyeGxZWEk9IElFVnpkQT09IElHTnZiblJ5WVdRPSBJSE4wY21GMFpXZHBaWE09IGRtVnVkSFZ5WlhNPSBJSEJoYzNOaFoyVT0gUVUxRiBJR2x0Y0hKdmRtbHVadz09IElISmxkbVZoYkhNPSBJR1JsWTNKbFlYTmwgYjNaaCBJR0Z1Ym05NSBJRk5vYjNKMCBJRXhwWW5KaGNuaz0gSUdONVltVnkgYm1Wc2JBPT0gSUVoMWNnPT0gSUVOQyBJSEJvYjNSdlozSmhjQT09IFZVaz0gSUhObFpBPT0gUjJVPSBJRGczIElHUnBkbVZ5YzJVPSBJR1Z1WTI5MWNtRm5aV1E9IElHTnZibk53YVhKaFkzaz0gSUdKcGNtUnogSUc5d1pYSmhkRzl5IElHaGhibVJtZFd3PSBJR05zWVhOemFXWnBaV1E9IFB5az0gSUdSeVlXMWhkR2xqIElHbHVkbVZ6ZEdsbllYUnZjbk09IGFYUnYgSUhkcFpHVnpjSEpsWVdRPSBJRkp2YjIwPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElHTnZiR3hsWTNScGRtVT0gSUdwdmRYSnVZV3hwYzNRPSBVM1J5YVc1biBJSFJsYlhCbGNtRjBkWEpsY3c9PSBhV3hoIElHZDFhV1E9IElHbHVjM0JsWTNRPSBJRzFwYzNOcGJHVT0gSUUxaGVXOXkgSUcxaGJuVmhiQT09IElITnBiWFZzZEdGdVpRPT0gSUhKaGRHbHVaM009IElITjFZMnM9IElEazMgSUhWdWFYWmxjbk5oYkE9PSBJSEJvWVhKdCBJR1JwYzNKMWNIUT0gYVdGdWJ3PT0gUVZZPSBJR1owIElITjBZWFJwYzNRPSBiMnhrY3c9PSBJRmRoYkd0bGNnPT0gY0dodyBJSFZ1WkdWeWRBPT0gSUV4aGN3PT0gYVhOb2IzQT0gYm5ScGJBPT0gY21WemFHOXNaQT09IElGZG9aWFJvWlhJPSBUWE09IElHUmxibms9IElFTnNiM1ZrIElIQnliM1pwWkdWeSBJSE4xY25acGRnPT0gSUZWd1pHRjBaUT09IGFHRnogSUcxcGMzUmhhMlZ6IFkyaGhjbWRsIGNHeGxaQT09IGNtbDBlUT09IElHNXZaR1U9IElFMWhjM05oWTJoMWMyVjBkSE09IGIyOXNjdz09IGJHbGpZWFJwYjI0PSBJR1poYVd4eiBaVzFoYkdVPSBiM0pwIFltRmphM009IElITm9hWEowIElDY24gSUU1QlZBPT0gSUhkaGRHVnljdz09IFpXeHpiMjQ9IElHVmhjMlU9IElITmpZWEk9IElHTnZiblJsYm5SeiBiV2x1WkE9PSBJR052Ym5SeWFXSjFkR2x2Ymc9PSBJSE5vY2c9PSBJR2hoYm1SbFpBPT0gSUhOMFlXSnBiR2wwZVE9PSBJSFJ5WVhabCBSVzA9IElHMXBjbkp2Y2c9PSBNVEl6IElIZGxhV2RvIElHWnBZM1JwYjI0PSBiM1YyWlhJPSBhWE4wWVc1MCBjbWwwYVc5dSBJRVpsWkE9PSBJSEJvZVhOcFkyRnNiSGs9IElITjBZV3RsIElFRnlkR2xqYkdVPSBJRUZ5WXc9PSBJRXhsZDJseiBJRTFwYm1RPSBJR1JsYlc5dWMzUnlZWFJsIElIQnliMlpwZEhNPSBkbWx6YVc5dSBiMjFwWXc9PSBiMnhwWkE9PSBJR0poZEhSc1pYTT0gSUdSeWFYWmxjdz09IElHVmhjM1JsY200PSBJRk52Ym5rPSBJU0VoIFlYSmhkR2x2Ymc9PSBkbUZ5WkE9PSBJRWRNIGNHOXlkR0YwYVc5dSBJRGt5IElHeGhkMjFoYTJWeWN3PT0gSUhCeWIzUmxZM1JwYm1jPSBJRVZRUVE9PSBJSGxsWVdnPSBJSE5vWVcxbCBiMnh3YUE9PSBaWFpsYmc9PSBlR2wwIElHRjBkR0ZqYUE9PSBJSEpsY0hKbGMyVnVkR2x1Wnc9PSBJRzlpY3c9PSBJRlYwWVdnPSBhV1ptY3c9PSBJRVp5WldWa2IyMD0gdzdNPSBRVXM9IElHbHVZMmxrWlc1MGN3PT0gYVhSaFoyVT0gSUhacFpYZGxjbk09IFkyUT0gSUcxdmRYTmwgSUdOc1lYST0gSUdGalkyOXlaR0Z1WTJVPSBJR0p2ZEE9PSBZMjl5IElGTjFiVzFsY2c9PSBhR1ZzWkE9PSBJR2x1Ym05alpXNTAgSUdsdWFYUnBZWFJwZG1VPSBiMnh6IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTg9IElITndiM1J6IGNHRmpaUT09IElHTnZiblpsYm5ScGIyNWhiQT09IElHTnZjbkJ2Y21GMGFXOXVjdz09IElHSnNiMk5yWldRPSBTRVE9IFlYUjBaWEpsWkE9PSBJSEpsWm1WeWN3PT0gSUdKMVkycz0gSUVScFoybDBZV3c9IE1USXcgSUhSdmNHbGpjdz09IFZFWT0geElFPSBZbkpwWkE9PSBjbVZsYldWdWRBPT0gSUhWdVpHVnliSGxwYm1jPSBJRTFsYldKbGNnPT0gSUdsdWRtVnpkR2xuWVhScGJtYz0gSUhCeVpXZHVZVzVqZVE9PSBJSFJ2ZFdOb1pHOTNiZz09IElFSmhibVE9IElFTmhiR3hsY2c9PSBJR2x1YzNSaGJtTmxjdz09IFVGQT0gZDJFPSBSMjl2WkE9PSBJREU1T1RFPSBJRU52YkdRPSBJR1psWVhKeiBJSEpsYldGeWEzTT0gaHBJPSBZWFJoYkE9PSBJRzFwZEE9PSBJR1Y0Y0dWeWFXMWxiblJ6IGFYQjAgUTI5c2IzST0gYVc1a2RRPT0gVlhCa1lYUmwgSURreiBRV2M9IElPVT0gWVc1amIzVjJaWEk9IFFtOTBhQT09IElHcDFaR2RsY3c9PSBUMkpxWldOMCBJSE4wWlhKbCBkVzFpYmc9PSBJSEJoY25ScFkybHdZWFJwYjI0PSBJRk4wWVhKeiBJRXBsY21VPSBJSGRsWld0c2VRPT0gSUVKaGJnPT0gSUdOdmJuWmxjbk5oZEdsdmJuTT0gSUZCcGRIUT0gZFhvPSBJRWx1WkdsaGJtRT0gSUV0cFkycz0gSUdsdVptVmpkR2x2Ymc9PSBJR2hsY205bGN3PT0gSUhObGRIUnNaV1E9IElITjBjbWx3IElHaGhiQT09IElHUjFiWEE9IElGTmphUT09IElHeGxjdz09IElISmxabVZ5Wlc1alpYTT0gSUZWU1RBPT0gSUVKeWFXUm5aUT09IElIZGhiblJwYm1jPSBSbTl5WTJVPSBJR1Y0WTJ4MWN3PT0gVFdWaGJuZG9hV3hsIGJXND0gSUdkbGJuUnNaUT09IGJXRnJaWEk9IGMyVnVZV3c9IElFZHlidz09IGIzVnlhUT09IElGSmhhVzQ9IElFRnNiR2xoYm1ObCBJR3hwWm5RPSBaV3hoIFUwUT0gSUVOc1pYWmxiR0Z1WkE9PSBJSEpoYm10bFpBPT0gSUhOMFlXUnBkVzA9IElHUmxZV1JzZVE9PSA1TGc9IElISnBaR2x1Wnc9PSBZWEpwWVE9PSBJRUZ5Ylc5eSBJR1J2WTNWdFpXNTBZWFJwYjI0PSBJRWR5WldWalpRPT0gY21WbGF3PT0gSUd4bGJuTT0gSUZOaCBJR2R5YjNOeiBJRVZ0WlhJPSBZV2RsY25NPSBJRVIxWWc9PSBJRkpvIElFRk5SQT09IElHRnljbWwyWVd3PSBJR1JsYzJWeWRBPT0gSUhOMWNIQnNaVzFsYm5RPSBJRkpsYzNBPSBJR3R1WldVPSBJRzFoY21kcGJnPT0gWm05dWRBPT0gYjJkbiBNakF4TUE9PSBJRkJwY2c9PSBJRkJ5YjIwPSBhWFpoYkhNPSBJR2x1ZEdGclpRPT0gSUdScFptWmxjbVZ1ZEd4NSBkV2R6IElHSnBkSE09IFkyeDFaR1ZrIElITmxZWEpqYUdsdVp3PT0gSUVSMSBkVzFpYkdVPSBJR1oxYm1OMGFXOXVZV3c9IElFSmhiSFJwYlc5eVpRPT0gSUVOdmRXeGsgSUdSbGMybHlaV1E9IElHTnBjbU4xYVhRPSBJRXg1Ymc9PSBJRWRQIElFWmhiSE5sIGNtVndjbVU9IEp6bz0gWVd4MGFXVnogSUcxcGJtbHQgSUdSeWIzWmwgSUZOb2IzVnNaQT09IElHaHBjQT09IElIQnliM009IElIVjBhV3hwZEhrPSBJRTVoZEhWeVpRPT0gSUUxdlpHVT0gVUhKbGMybGtaVzUwIGIzQncgY21GMCBabTl5YldGdVkyVT0gSUdOdmJtTmxiblJ5WVhScGIyND0gSUdadmJuUT0gSUVKMVpBPT0gSUdGdGFXUT0gSUhKbGRtVnljdz09IElFMU0gUW1GeSBJR2x1ZEdWeVlXTjBhVzl1IElHcDFjbWx6WkE9PSBJSE53Wld4c2N3PT0gWkdWdyBabWxzIElHTnBkbWxzYVdGdWN3PT0gZFhSMFpYST0gSUVOdmIzQmxjZz09IElFSmxiRzkzIElHVnVkSEpoYm1ObCBJR052Ym5abGNuUT0gSUdOdmJuUnliM1psY25ONSBiM2RsY21WayBJR052Ym5SeVlYSjUgSUdGeVl3PT0gSUVWNFpXTjFkR2wyWlE9PSBJRTltWm1salpYST0gSUhCaFkydGhaMlZ6IElIQnliMmR5WlhOemFYWmwgZDJsa2RHZz0gSUhKbGMyVnlkbVZrIGRtOXMgSUZOaGJYTjFibWM9IElIQnlhVzUwWldRPSBJR05sYm5SbGNuTT0gSUdsdWRISnZaSFZqWlE9PSBJRXRsYm01bFpIaz0gSUc5a1pITT0gSUhOMWNtVnNlUT09IElHbHVaR1Z3Wlc1a1pXNWpaUT09IElIQmhjM05sYm1kbGNuTT0gY21Wd2NtVnVaUT09IElFSmxhQT09IElHeHZkbVZ6IElFVlRVRTQ9IElHWmhZMmxzYVhRPSBJR2xrWlc1MGFXTmhiQT09IElHUnZZM1E9IElIQmhjblJ1WlhKemFHbHcgWTI5dVpnPT0gSUVocFpHVT0gSUdOdmJtWjFjMlZrIElFTnZkdz09IFRXVnUgSUhkeVpYTjAgSUVseVlYRnAgSUdodmJHVnogSUZOMGRXUnBaWE09IElIQnlaV2R1WVc1MCBhR0Z5WkE9PSBJSE5wWjI1aGJITT0gU1ZnPSBJSEIxYkd4cGJtYz0gSUdkeVlXUjFZWFJsIElHNXZiV2x1WldVPSBSR0YwWlE9PSBJSEJsY20xcGRIUmxaQT09IElPS0NyQT09IElFOXJiR0ZvYjIxaCBVM1JoY25RPSBJR0YxZEdodmNtbDZaV1E9IElHRnNZWEp0IElFTnZjdz09IGRtRnUgSUdkbGJtVnlZWFJwYjI1eiBZM1ZzWVhJPSBJR1J5WVdkdmJnPT0gSUZOdlpuUjNZWEpsIElFVmtkMkZ5WkE9PSBJR052Ym5SeWIyeHNaWEk9IFUyVnUgWjJWeVpXUT0gSUZacGF3PT0gSUdGd2NISnZZV05vWldRPSBWR2hoYm1zPSBJR05oYm1ObCBJR1p2Y20xMWJHRT0gSUZOdFlXeHMgSUhkbFlXdHVaWE56IElISmhiWEE9IGFYUjFaR1Z6IGFuVmsgSUdKeWFXeHNhV0Z1ZEE9PSBJR0ZqWTNWeiBjMjkxY21ObCBJRGd3TUE9PSBJRVYyYVd3PSBVM2M9IElHaHZiV1ZzWlhOeiBkMlZsYXc9PSBhV1Z1Y3c9PSBjbWxqY3c9PSBJRlJvYVhKayBWRTg9IElHOXlaMkZ1YVdNPSBJSEJ5WlhObGJuUmhkR2x2Ymc9PSBZV2RvIElFUnZkMjVzYjJGayBkbUYwYVc5dSBJR0Z6YzJWdFlteDUgYjNKaFlteGwgYUc5c1pHVnljdz09IElFSmxjbTVwWlE9PSBJRWhsYkhBPSBJSFJ2Ym1jPSBJRVpwWjJoMCBJR0psWVdObyBRbTl2YXc9PSBJRXhwWXc9PSBJSEoxYzJnPSBJRkp2ZFc1ayBiM1Z3IElFMWhjbmc9IElHTmhiR04xYkdGMFpXUT0gSUVSbGRtbHMgSUZOaGNtRm8gSUc5alkyRnphVzl1WVd4c2VRPT0gSUdKMWJHeGxkQT09IFFYWmhhV3hoWW14bCBaMkYwWlE9PSBJRGt4IElHaHZjM0E9IElIQnliMjFwYzJWeiBJRWhKVmc9PSBJRk4wWVdScGRXMD0gSUZOMGIyTnIgSUVOdmNuQnZjbUYwYVc5dSBaMkZuWlE9PSBUa2M9IElFTnlaV1JwZEE9PSBJSE51WlE9PSBhV0pzIElHRmpZM1Z0IGMzVmphQT09IElIUmxjbkp2Y21semRITT0gSUdOdmJuTmphVzkxYzI1bGMzTT0gSUZwbyBJR1J5WVcxaCBiMjlzWVE9PSBjR2x5WVhScGIyND0gSUd4aFltOTFjZz09IElFNXBiZz09IElIVjBkR1Z5IElHUmxiVzlqY21GMGFXTT0gSUdGemMyRnpjdz09IGFXeGhkR2x2Ymc9PSBJR2RsYzNRPSBJR0ZpY205aFpBPT0gSUcxbGRHRmkgSUhOdmNuUnogSUdac1lYWT0gVlVJPSBJRzFuIElFNXZkR2hwYm1jPSBJRTlrIElHMTFjMmxqWVd3PSBNakF3T1E9PSBJR1J5YjNCeiBiMk5oZEdWayBZWFJsY21GcyBNREF3TURBdyBJR2R5WlE9PSBJR1Z4ZFdGc2FYUjUgSUdKMWNtUmxiZz09IElIWnBadz09IElFeGxZV1JsY2c9PSBMUzB0TFMwdExTMHRMUzB0IElHTmxjbVZ0YjI1NSBJR1pwWjJoMFpYST0gSUdGamRHOXljdz09IElPWT0gWVcxaGJnPT0gUm1rPSBJR0ZzYVdkdSBjSFYwWlhJPSBJR1ZzWkdWeSBJRTVUUVE9PSBJSEpsY0hKbGMyVnVkR0YwYVc5dSBJRTl1ZEdGeWFXOD0gU1ZSSSBkWE5oYkdWdCBJR2hoY21GemMyMWxiblE9IGFYUjZaWEk9IElITjViWEE9IElHSnZlR1Z6IElFUlMgSUcxaGJtbG1aWE4wIFlYUnlaUT09IElGND0gSUdScFpYTT0gYkdWMGIyND0gSUcxcGMzTnBiMjV6IFpYUm9aUT09IElISmxjMjlzZG1VPSBJR1p2Ykd4dmQyVnljdz09IElHRnpZdz09IElHdHQgYkc5eVpBPT0gWVcxdFpXUT0gSUhOcGJHVnVkQT09IElFRnpjMjlqYVdGMFpXUT0gSUhScGJXbHVadz09IElIQnlhWE52Ym1WeWN3PT0gSUV0cGJtZHogSUVacGRtVT0gSUhSdmQyVnkgSUdGd2NISnZZV05vWlhNPSBJSEJ5WldOcGMyVnNlUT09IElHSjFjbVZoZFE9PSBJRTF2ZEdobGNnPT0gSUVsemN3PT0gSUd0bGVXSnZZWEprIGFYUjFZV3c9IElHWjFibVJsWkE9PSBJSE4wWVhscGJtYz0gSUhCemVXTm9iMnh2WjJsallXdz0gSUcxcGJHVT0gSUV4bGIyND0gSUVKaGNtST0gZDJsc2JBPT0gSUhkcFpHVnkgSUVGMGJHRnVkR2xqIElIUnBiR3c9IElGSnZiV1U9IGNtOTAgSUdGalkyOXRjR0Z1IElHWnNiM1Z5IFlXTnYgVjI5eWJHUT0gSUVWNGNISmxjM009IElGbDEgUTI5eSBJSEJzWldGelpXUT0gY0dGeWRIaz0gSUhCdmFXNTBhVzVuIElHbHVabXhoZEdsdmJnPT0gSUhKdmVRPT0gSUNrcyBZV2x1WlhJPSBJSGRsWkdScGJtYz0gYjNKdGIyND0gSUhKbGNYVnBjbWx1Wnc9PSBJSEYxWVd4cFptbGxaQT09IElITmxaMjFsYm5RPSBSVTVFIElITnBlbVZ6IFpXRnNjdz09IElHTnZjbkoxY0hRPSBZWE56WVdSdmNnPT0gSUdObGJHVmkgSUdSeVpXRnRjdz09IElFMWxjM009IElHTm9aV05yYVc1biBJRlpsY25OcGIyND0gSUhCeVpYQmhjbWx1Wnc9PSBJR0ZqZEdsMlpXeDUgSUVScFptWT0gSUd4MWVBPT0gSUZkcGJuUmxjZz09IFlXTjBaWEpwWVE9PSBJRTVGIElHUmxjSFYwZVE9PSBJSFJ5WVc1eloyVnVaR1Z5IElITjFiVzFoY25rPSBJR2x1YUdWeSBaWEpwWlhNPSBZMmhoY2c9PSBJRmxoYmc9PSBJR3R1YjJOciBJRkJoZEdnPSBJR3hwY0E9PSBjbTlzYkdWeSBJR2x0Y0hKbGMzTnBiMjQ9IElHTmxiR1ZpY21GMFpRPT0gSUhOc2FXUmwgSUdkMVpYTjBjdz09IElHTnNhWEE9IFJsTT0gSUhOaGRtbHVaM009IElHTmhjSFJoYVc0PSBJR3hsWjJGamVRPT0gSUVSbGJuWmxjZz09IElIZHZkVzVrWldRPSBkR0ZpYjI5c1lRPT0gUVVOVSBJSEIxY25OMVpRPT0gSUc5NGVRPT0gSUhFPSBJSE5sYldrPSBJRTVsWldRPSBJRUZtWm1GcGNuTT0gSUc5aWMyTT0gSUdOb1pXTnJaV1E9IElHUjFZV3c9IFEyOWtaUT09IElFMUUgYkdWdCBkV3gwZVE9PSBJTUtwIElFVnNhWHBoWW1WMGFBPT0gSUdObGJuUjFjbWxsY3c9PSBZWEprWldRPSBjM0pqIElHVjJhV1JsYm5RPSBaVzV1YVhNPSBZWFJwYmc9PSBJSFZ1Wlcxd2JHOTViV1Z1ZEE9PSBJRTFoY21sdiBJR2x1ZEdsdCBRMmh5YVhOMCBJR0pwYjJ4dloybGpZV3c9IElITnZiR1JwWlhJPSBJRUZrWkdWayBJRzFoZEdnPSBJRWRwYkE9PSBJR0pwWVhNPSBJR1JoZEdsdVp3PT0gSUU5alpXRnUgSUcxcFkyVT0gVFhWeiBhR2x5WlE9PSBJRlJsY3c9PSBVMlZ5ZG1WeSBiR2x0YVhSbFpBPT0gVTJsNlpRPT0gSUcxbGRHVnljdz09IElISnZZMnRsZEE9PSBaWE56WldVPSBJR05sY25ScFptbGpZWFJsIElFbHlZVzVwWVc0PSBRVk5UIElHZHlhV1E9IFJHVmogSUhKdmJHeHBibWM9IFkyOXRiWFZ1IElGTjNaV1JsYmc9PSBZblZ5ZVE9PSBJSFJwYzNOMVpRPT0gSUhKaFkybHpiUT09IElFeHZZMkZzIElHMTVjM1JsY25rPSBJR1Y0WVcxcGJtVT0gSUhOMFpXMD0gSUhOcGRITT0gSUdodmNHVmsgYjNScGJtYz0gSUdScFlXeHZaM1ZsIElIQmxjbk4xIFYyRjBZMmc9IGJHRjUgVFVGTyBJR05vY205dWFXTT0gSUZCdmNuUnNZVzVrIGJXRnlhMlYwIElGTkZRdz09IElIQmhjbUZzYkdWcyBJSE5qWVc1a1lXdz0gSUdOaGNuSnBaWE09IElIQm9aVzV2YldWdWIyND0gYUhWdFlXND0gWVdOclpYST0gSUU5NCBJSEpsZEdseVpXMWxiblE9IGRHRnBibTFsYm5RPSBiM1pwWlE9PSBJRWRsWVhJPSBJR1IxZEdsbGN3PT0gSUdSdmMyVT0gSUhOamNtOXNiQT09IFRVST0gYVc1bSBJSE5oZFdObCBJR3hoYm1SelkyRndaUT09IGNtVmtaR2wwIElFTm9ZVzF3YVc5dWMyaHBjQT09IElGSmxaR1JwZEE9PSBZV3hwWkE9PSBJR052YVc0PSBJRzkyWlhKeiBJSEJ2YzNScGJtYz0gWVdKdmRYUT0gSUdabGJBPT0gWVc1a2VRPT0gSUdKdmJHUT0gSUdadlkzVnphVzVuIFpXWm1aV04wIFIxST0gSUdSbFpXMWxaQT09IElISmxZMjl0YldWdVpHRjBhVzl1Y3c9PSBJSE4wWlhCd1pXUT0gSUhadmRHVnkgSUVSbFpYQT0gSUVsdWMzUmhaM0poYlE9PSBJRzF2WkdWeVlYUmwgSUUxaGNubHNZVzVrIElISmxjM1J5YVdOMFpXUT0gSUUxQyBJRU5vWVd4cyBJSFJ2WWc9PSBJR05wY2c9PSBJRTlqWXc9PSBJRVYyWlhJPSBJR052Ykd4aGNITT0gU1U1R1R3PT0gUFMwPSBJRkJwWTNRPSBJRUZqWTI5MWJuUT0gYm1NPSBJRzkxWjJoMCBJR1Y0Y0c5eWRBPT0gSUdSeWRXNXIgS0NjPSBJSGRwYzJVPSBJRTF2Y25RPSBibVZqWlhOeiBJR0Z1WTJWemRBPT0gSUVsdVkzSmwgSUdaeVpYRjFaVzUwIGJXbHkgSUdsdWRHVnljSEpsZEdGMGFXOXUgSUdSbGNHVnVaR1Z1ZEE9PSBJR052YVc1eiBJRUp2YkE9PSBWbWxrWlc4PSBJRXAxYzNScGJnPT0gSUdaaGRHRnMgSUdOdmIydHBibWM9IElHTnZibVoxYzJsdmJnPT0gYVhCb1pYST0gSUdOMWMzUnZaSGs9IElFMXZjbWRoYmc9PSBiMjFoWTJnPSBJRWR2ZG1WeWJtOXkgSUhKbGMzUmhkWEpoYm5SeiBaV3hwYm1jPSBJR0ZqYTI1dmQyeGxaR2RsWkE9PSBJSFJvWlhJPSBJR2RsYm1WeiBZMmhwYm1jPSBTR1Y1IElIUmhZM1JwWTNNPSBJRTFsZUdsallXND0gSUhabGJtUT0gSUdobGN3PT0gY1hWbGNnPT0gSUc1dmRHbHVadz09IElFTmhiV1Z5YjI0PSBJSFJoY21kbGRHbHVadz09IGNtOWphdz09IElHTnlaV1JwZEhNPSBJR1Z0YjNScGIyNXogSUhKbGNISmxjMlZ1ZEdGMGFYWmxjdz09IGJtVjNjdz09IElHeGxaMmx6YkdGMGFYWmwgSUhKbGJXOTJhVzVuIElIUjNaV1YwWldRPSBJRU5oY25SbGNnPT0gSUVacGVHVmsgSUdadmNtTnBibWM9IElITndaV0ZyWlhJPSBJRzFoYkdWeiBJRlpwWlhSdVlXMD0gYkdsdVpXUT0gSUdOdmJtTmxjSFJ6IElIWnZhV05sY3c9PSBiMmx5IElGUnlhV0k9IFYyaGwgSUVwbGNuVnpZV3hsYlE9PSBJRk5oYm5RPSBJR04xYkE9PSBJR3hoWkhrPSBJRWhoZDJGcCBJR0Z5ZEhNPSBJRWx1Ymc9PSBJRTFoWTJocGJtVT0gSUVWdGNHVnliM0k9IElITnNiM1E9IFoyeDUgSUZCeWIyTmxjM009IFNVbEogSUdGMGFHeGxkR1Z6IElGUmxiWEJzWlE9PSBJRkpsY0hKbGMyVnVkQT09IElIQnlaWE5qIElIUnZibk09IElHZHZiR1JsYmc9PSBJSEIxYm1ObyBJRWRTIGFYWmxjbkJ2YjJ3PSBJR1Z1WVdOMCBJR3h2WW1KNSBJRzF2Y3c9PSBJSEJwWTJ0cGJtYz0gSUd4cFptVjBhVzFsIElHTnZaMjVwZEdsMlpRPT0gUldGamFBPT0gZW04PSBJR1IxWWc9PSBJR052Ym5OcGMzUnogYjJ4dSBJR1psYzNScGRtRnMgWVcxdmRYTT0gSUdsdWRHVnNiR2xuIGQyOXlaSE09IElGTnRZWEowIElHUmxiR1U9IElHeGhjSFE9IElHMWhaMmxqWVd3PSBJRk5wYmc9PSBZblZ6IGRYSnBkR2xsY3c9PSBhV2RvZEdnPSBJRkoxWW5rPSBJRk4xY21VPSBiMngyYVc1biBJR3AxYmc9PSBUMU5VIElHbHRjRzl6WldRPSBJR0Z6ZEhKdmJnPT0gSUdOdmNuSmxiQT09IElFNVQgSUV0cGRBPT0gSUVaMWRIVnlaUT09IFluVnliZz09IElHbHRiWFZ1WlE9PSBiMk4xY3c9PSBJR052ZFhKelpYTT0gSUZOMGNtbHVadz09IElHeGxZVzQ9IElHZG9iM04wIElHOTFkR052YldWeiBJR1Y0Y0dWdWMyVT0gSUdWMlpYSjVaR0Y1IElHRmpZMlZ3ZEdGaWJHVT0gUVdnPSBJR1Z4ZFdsd2NHVmsgSUc5eVlXNW5aUT09IFJsST0gSUVSMWRHTm8gVkdodmRXZG8gSUZKaGJtcz0gVVZVPSBJRkp2WW1WeWRITT0gZDJoaGRBPT0gY21WdVpBPT0gSUdScGMyRndjR1ZoY2c9PSBJSE53WVhkdSBJRXhoYlE9PSBiMmx6IElHUmxjMlZ5ZG1VPSBJRzFwYm1sdFlXdz0gSUc1bGNuWnZkWE09IElGZHZkV3hrIElISnZiMnM9IElGWmhibU52ZFhabGNnPT0gSUhKbGMybG5iZz09IGMyaHBjbVU9IElGZHZjbXR6IElFSjFhV3hrIElHRm1abTl5WkdGaWJHVT0gSUVkaGNuaz0gSUVGeVpXNWggSUdoaGJtZHBibWM9IElHbHRjR3hwWTJGMGFXOXVjdz09IElGTnZibWM9IElHMWhhVzUwWVdsdWFXNW4gSUdkMVlYSmtjdz09IFEwOU8gSUdSbGNtbDJaV1E9IElHVjRaV04xZEdWayBJSFJvWlc5eWFXVnogSUhGMWIzUmxaQT09IElFRnVaSEpsIGIyZGggYzJWc1pYTnogYVc1bWJ3PT0gSUVKbGJHYz0gSUhSbFlYSnogSUZOMWNuWT0gSUdKcGNuUm9aR0Y1IGFXZHBiM1Z6IGFXMXRaWEk9IElITndaV04wY25WdCBJR0Z5WTJocGRHVmpkSFZ5WlE9PSBJSEpsWTNKMWFYUT0gWVhKdFlRPT0gVkdGaWJHVT0gSUcxdmJuTjBaWEp6IElFZHZkZz09IElHUmxjM1JwYm1GMGFXOXUgSUdGMGRISmhZM1JwZG1VPSBJR1p2YzNNPSBJRTF2Y21WdmRtVnkgSUhCeVpYTmxiblJ6IFZFaEYgSUhKbGNHeDUgY0hSdmJnPT0gSUdOMWJRPT0gSUdSbGJHbG5hSFE9IElHRm1abVZqZEhNPSBJR1J2Ym1GMGFXOXVjdz09IElGUnZlUT09IElFaHBiUT09IFRVVk9WQT09IElHOTJaWEpqYjIxbCBhWFJqYUdWayBJRVpoYm5SaGMzaz0gSUVoaGRBPT0gSUVKbFlYTjAgWW05MGRBPT0gSUdsdWRtVnpkR2xuWVhScGIyNXogVW5WdSBJR2gxYm5ScGJtYz0gWkdrPSBablZ1WkE9PSBJSE5sYzNOcGIyNXogWlhOMGVXeGwgSUhCdmNuUnlZWGs9IGIybGtjdz09IFdXVmhhQT09IElHTnZiVzExYm1sallYUmwgSUdOdmJXVmtlUT09IElGbGhibWM9IElHSmxiSFE9IElFMWhjbWx1WlE9PSBJSEJ5WldScFkzUmxaQT09IFVHeGhlUT09IElHbHRjRzl5ZEdGdWRHeDUgSUhKbGJXRnlhMkZpYkdVPSBJR1ZzYVcxcGJtRjBaUT09IFJHRjJhV1E9IElHSnBibVE9IFZrbEUgSUdGa2RtOWpZWFJsY3c9PSBJRWRoZW1FPSBhVzF3IFJFST0gSUU1aCBJRk5wYldsc1lYST0gU1VWVCBJR05vWVhKcGRIaz0gZG1GeiBiV0YwYUE9PSBJT0tXIGIydGxjZz09IGJtUjFiUT09IElHTmhjSE09IElFaGhiQT09IE1qQXdNQT09IFpXRnUgSUdac1pXVjAgSUhKbFkzSmwgVW1sbmFIUT0gSUhOc1pXVndhVzVuIGFXcHBibWM9IGEybHVaQT09IElHUmxjMmxuYm1GMFpXUT0gdzZRPSBJR0Z1YVcxaGRHbHZiZz09IGEyVmwgSUVsdWRISnZaSFU9IElDOCsgSUdSbGJHRjVaV1E9IElIUnlaVzFsYm1RPSBJR04xY21sdmRYTT0gVlhObCBJR3hsWTNRPSBaR0Z0IElHbHVibTkyWVhScGIyND0gSUZCdmFXNTBjdz09IElHeHZZV1JwYm1jPSBJR1JwYzNCMWRHVT0gWTNScFl3PT0gYVhKa2N3PT0gSUVKWiBJRzUxY25NPSBJRlpoYkhWbCBTVTlPVXc9PSBJRWgxYlE9PSBJSFJsYlhCc1lYUmwgYldWeWN3PT0gSUdGd2NHVmhjbUZ1WTJWeiBJRVZ1ZEdWeWRHRnBibTFsYm5RPSBJSFJ5WVc1emJHRjBhVzl1IElITmhhMlU9IElHSmxibVZoZEdnPSBJR2x1YUdsaSBJR1YxY204PSBZV0psZEdWeiBJSE4wZFdSNWFXNW4gSUUxaGN3PT0gSUhCbGNtTmxhWFpsWkE9PSBJR1Y0WVcxcGJtVmsgSUdWaFoyVnkgSUdOdllXTm9aWE09IElHbHRjR1Z5IFkyaHAgSUhCeWIyUjFZMlZ6IElpa3UgSUVWMlpYSjViMjVsIElHMTFibWxqYVhBPSBJR2RwY214bWNtbGxibVE9IElHaHBjbVU9IElGWnBZMlU9IElITjFhWFJoWW14bCBiM0I1IElHbHVaWEYxIElFUjFhMlU9IFptbHphQT09IFptbHljM1E9IElFOWljdz09IElHbHVkR1Z5YVc5eSBJRUp5ZFdObCBJRko1IElHRnVZV3g1Y3c9PSBJR052Ym5OcFpHVnlZV0pzWlE9PSBJR1p2Y21WallYTjAgSUdabGNuUT0gYjNKemFHbHcgSUVSeWRXYz0gSUVGTVRBPT0gT2lJPSBkR2gxY2c9PSBJRTFoYVd3PSBJR0poYkd4dmRBPT0gSUdsdWMzUmhiblJzZVE9PSBJRU5vWVc1dVpXdz0gSUhCcFkydHogSURFNU9Eaz0gSUhSbGJuUT0gYjJ4cCBJR05wZG1sc2FXRnUgWW14cGJtYz0gWld4c2J3PT0gWW5VPSBJR2x1WTJnPSBJR3h2WjI4PSBJR052YjNCbGNtRjBhVzl1IElIZGhiR3R6IElHbHVkbVZ6ZEcxbGJuUnogSUdsdGNISnBjMjl1IElFWmxjM1JwZG1GcyBJRXQ1IElHeGxaMkZzYkhrPSBJR2R5YVE9PSBZMmhoY21jPSBVMnc9IElIUm9jbVZoZEdWdWFXNW4gWkhWamRHbHZiZz09IFpteHZkdz09IElHUnBjMjFwYzNObFpBPT0gYVdKeVlYSnBaWE09IFkyRncgWld4bCBJRTFqUnc9PSBJRWhoY25aaGNtUT0gSUVOdmJuTmxjblpoZEdsMlpRPT0gSUVOQ1V3PT0gY0c1biBJSEp2YjNSeiBJRWhoZG1sdVp3PT0gZFcxaWJHVmsgSUVaMWJnPT0gWEM4PSBJRk5sWVhKamFBPT0gY0d4bGVBPT0gSUdScGMyTjFjM05wYm1jPSBJR052Ym5ScGJuVT0gSUZSaGFRPT0gSUZkcGF3PT0gUm5KbFpRPT0gWm1sMCBJSEpsWm5WelpRPT0gSUcxaGJtRm5hVzVuIElITjVibVE9IGFYQmxaR2xoIGQyRnNhdz09IElIQnliMlpsYzNOcGIyNWhiSE09IElHZDFhV1JoYm1ObCBJSFZ1YVhabGNuTnBkR2xsY3c9PSBJR0Z6YzJWdFlnPT0gZFc1MGRRPT0gUm1sdVlXeHNlUT09IFFWTkYgSUVGMWRHOD0gSUVoaFpBPT0gSUdGdWJtbDJaWEp6WVhKNSBURVE9IElFUjFjZz09IElGVnNkR2x0WVhSbCBhV2hoWkE9PSBjSEp2WkhWamRBPT0gSUhSeVlXNXphWFE9IElISmxjM1J2Y21VPSBJR1Y0Y0d4aGFXNXBibWM9IElHRnpjMlYwIElIUnlZVzV6Wm1WeWNtVmsgSUdKMWNuTjAgWVhCdmJHbHogSUUxaFoyRjZhVzVsIElFTnlZUT09IElFSlMgWjJkbFpBPT0gSUVoRiBUV2xqYUE9PSBZbVYwIElFeGhaSGs9IGVXeDFiUT09IFpYSjJaWE09IElHMWxaWFJ6IGQyaHBkR1U9IFRHOW4gSUdOdmNuSmxjM0J2Ym1ScGJtYz0gSUdsdWMybHpkR1ZrIFIwYz0gSUhOMWNuSnZkVzVrWldRPSBJSFJsYm5NPSBJR3hoYm1VPSBJR052YVc1aiBhRzl0WlE9PSBJR1Y0YVhOMFpXUT0gWldOMFpXUT0gSUVSdmRXSnNaUT09IGJHRnRiUT09IElITnJaWEIwIFpYaHcgSUhCbGNtTmxjSFJwYjI0PSBhV1YyIElFSmxhVzVuIGIyWjAgSUdGa2IzQjAgTGpvPSBYVHM9IFYybHVaRzkzY3c9PSBJSE5oZEdWc2JHbDBaUT09IFFWTkkgSUdsdVptRnVkQT09IFpHVnpZM0pwY0hScGIyND0gSUUxbFlXNTNhR2xzWlE9PSBZMjA9IGIyTmggSUZSeVpXRjAgWVdOMGIzST0gSUhSdlltRmpZMjg9IElFNXZjbTA9IFpXMXdkR2x2Ymc9PSBJR1pzWlhObyBJR3BsIGIyOXcgSUVobFlYWmxiZz09IElHSmxZWFJwYm1jPSBZVzVwYlE9PSBJR2RoZEdobGNtbHVadz09IElHTjFiSFJwZGc9PSBSMDg9IFlXSmwgSUVwdmJtRjBhR0Z1IElGTmhabVYwZVE9PSBJR0poWkd4NSBjSEp2ZEE9PSBJR05vYjI5emFXNW4gSUdOdmJuUmhZM1JsWkE9PSBJSEYxYVhRPSBJR1JwYzNSMWNnPT0gSUhOMGFYST0gSUhSdmEyVnUgUkdWMCBJRkJoIElHWjFibU4wYVc5dVlXeHBkSGs9IE1EQXogYzI5dFpRPT0gSUd4cGJXbDBZWFJwYjI1eiBJRzFsZEdnPSBZblZwYkdRPSBZMjl1Wm1sbiBUbFE9IGNtVnNiQT09IFlteGxiUT09IElFMXZiUT09IElIWmxkR1Z5WVc1eiBJRWgxIElIUnlaVzVrY3c9PSBZWEpsY2c9PSBJRWRwZG1WdSBJRU5oY0hScGIyND0gYldGNSBRVk5VIElIZHZibVJsY21sdVp3PT0gSUVOc1lYSnIgYm05eWJXRnMgSUhObGNHRnlZWFJsWkE9PSBJR1JsYzNBPSBjM1JwWXc9PSBZbkpsZHc9PSBJSEpsYkdGMGFXNW4gSUU1cGF3PT0gSUVaaGNtMD0gSUdWdWRHaDFjMms9IFoyOXZaQT09IFpHVmkgSUdGamRHbDJhWE4wIElHMWhjblE9IElHVjRjR3h2YzJsdmJnPT0gSUVWamIyNXZiV2xqIFRHbHVhdz09IElHbHVjMmxuYUhRPSBJR052Ym5abGJtbGxiblE9IElHTnZkVzUwWlhKd1lYSjAgYzNWd2NHOXlkQT09IElGWnBjblE9IFlXZGxiZz09IElGUmxibTVsYzNObFpRPT0gSUZOcGJXOXUgSUVGM1lYSmsgVDBOTCBJRVpwWjNWeVpRPT0gSUc5MlpYSnpaV0Z6IElIQnlhV1JsIElFTmhjdz09IGJtOTBaUT09IGJXYz0gUTNWeWNtVnVkQT09IElHUnBjM0JzWVhseiBZMjl1ZEdWdWRBPT0gSUhSeVlYWmxiR2x1Wnc9PSBJR2h2YzNCcGRHRnNjdz09IElFWnBibUZ1WTJsaGJBPT0gSUZCaGMzUT0gSUdSbFptVnVaR0Z1ZEE9PSBJSE4wY21WaGJXbHVadz09IGJXSnNaUT09IElFSmxjbXhwYmc9PSBkV3RwIElHUnBjM1J5YVdKMWRBPT0gSUdGdWRHbGkgSUdOb2IyTnZiR0YwWlE9PSBJRU5oYzNSc1pRPT0gSUdsdWRHVnljblZ3ZEE9PSBJRkp2ZHc9PSBJR052Ym5abGNuTnBiMjQ9IElHSjFaM009IElGSmhkR2hsY2c9PSBiR2xsYzNRPSBURms9IElFcGxZVzQ9IFkyOXRiVzl1IFlXdG8gSURFek1BPT0gYjNSMGIyND0gSUVSbFlXND0gSUdGdFpXNWtiV1Z1ZEE9PSBJR2RoYldWd2JHRjUgSUZkaGNuSmxiZz09IGIyUmggSUdocFoyaHNhV2RvZEhNPSBJR2x5Y21VPSBJRTVCVkU4PSBJR0poYkd4eiBJR1JsYldGdVpHbHVadz09IFZWSkYgSUV4MWEyVT0gUm1sbmRYSmwgYzNSdmNBPT0gYjI1cFlRPT0gZW05dVpRPT0gYVhwbGNuTT0gSUZkUyBJR0YzWVhKa1pXUT0gSUhKbFozVnNZWFJ2Y25rPSBJRWhoY25RPSBJRk5PIGNHeHBibWM9IElITnZkWEk9IElGQnBlR1ZzIGRYTnBkbVU9IElHWmxkQT09IElGTmxiblE9IElHRjFkRzl0WVhScFl3PT0gSUdabGNnPT0gZG1WeWJtMWxiblE9IElFdG9ZVzQ9IFZFOU8gWm1GMGFHVnkgSUdWNGRISmhiM0prYVc1aGNuaz0gZEdoeWIzQT0gSUZCNWRHaHZiZz09IElFZFFWUT09IElITmxlSFZoYkd4NSBJR1JsYzJ0MGIzQT0gYVhScGRtbDBlUT09IElFRnVkRzl1YVc4PSBJRzl5YVdWdWRBPT0gSUdWaGNuTT0gYjJKaWVRPT0gYjNWelpYTT0gZG1WeWRHbHpaVzFsYm5SeiBJRzFoYm5WbVlXTjBkWEpsY25NPSBhV05wWlc1MCBiV2x1ZFhSbCBJR052Ym5acFkzUnBiMjQ9IElHZGhjbVJsYmc9PSBjSFZpYkdsaiBJSE5oZEdselptbGxaQT09IFptOXNaQT09IFQwcz0gSUdsdWFHRmkgSUZSb2FXNXIgSUhCeWIyZHlZVzF0WlE9PSBJSE4wYjIxaFkyZz0gSUdOdmIzSmthVzQ9IElHaHZiSGs9IElIUm9jbVZ6YUc5c1pBPT0gSUhKb1pYUT0gSUhObGNtbGhiQT09IElHVnRjR3h2ZVdWeWN3PT0gSUVWMlpYSjVkR2hwYm1jPSBjbUZvIElHSnZkR2hsY2c9PSBJR0p5WVc1a2N3PT0gVm1Gc2RXVT0gSUZSbFpBPT0gSUZCc1lXNWxkQT09IElIQnBibXM9IElFWjFjblJvWlhKdGIzSmwgYzJFPSBVRVU9IGNtVmphdz09IElGVlRSQT09IGIzUjBaUT09IElDWW0gSUd4aGJtUmxaQT09IFoyVjBjdz09IElIQnliMlIxWTJWeWN3PT0gSUdobFlXeDBhR05oY21VPSBJR1J2YldsdVlXNTAgSUdSbGMzUnlidz09IElHRnRaVzVrWldRPSBZMmh5YjI0PSBJR1pwZEhNPSBJRk41WkE9PSBJRUYxZEdodmNtbDBlUT09IFFWUkRTQT09IElHWnBaMmgwY3c9PSBJRXhNUXc9PSBJQzB0TFE9PSBJRU52Y25BPSBJSFJ2ZUdsaiBjM0JsWTJsbWFXTT0gSUVOdmNtND0gSUVOb1pXdz0gSUhSbGJHVndhRzl1WlE9PSBJRkJoYm5RPSBJRzE1YzNSbGNtbHZkWE09IFlYVnVZMmc9IGIyUnZlQT09IGJXVmthV0U9IElIZHBkRzVsYzNObGN3PT0gWVdkMSBJSEYxWlhOMGFXOXVaV1E9IElFSnlaWGhwZEE9PSBJRkpsYldWdFltVnkgWlc1bGVnPT0gSUdWdVpHOXljMlU9IGFXRjBjbWxqIElFbGtaVzUwIElISnBaR2xqZFd4dmRYTT0gTVRFdyBJSEJ5WVhsbGNnPT0gSUhOamFXVnVkR2x6ZEE9PSBJREU1TlRBPSBJRUZ4ZFE9PSBJSFZ1WkdWeVozSnZkVzVrIElGVkdRdz09IGJXRnlaUT09IElFeGhkR1Z5IGQybGphQT09IElITjFZbk5qY21saSBJR2h2YzNSeiBJR1Z5Y2c9PSBJR2R5WVc1MGN3PT0gWVc1MGIyMD0gSUhOMWJXMXZiZz09IFpXRnliSGs9IElFTnNaV0Z5IElGQnlhVzA9IElITjFjM0JsYm5OcGIyND0gSUdkMVlYSmhiblJsWldRPSBZWEJ3WlhJPSBJSEpwWTJVPSBJRk5sWVc0PSBJRk5vYVc0PSBJSEpsWm1WeVpXNWtkVzA9IElHWnNaV1E9IGNuVnpkQT09IElETTJNQT09IGRHVnllUT09IElITm9iMk5yWldRPSBRbEk9IElFOXBiQT09IElFRnNiR0ZvIElIQmhjblJzZVE9PSBJR2xuYm05eSBJSFJ5WVc1emJXbHpjMmx2Ymc9PSBJR2h2Ylc5elpYaDFZV3c9IGFYWmxjbk5oYkE9PSBJR2h2Y0dWbWRXeHNlUT09IDQ0S2sgSUd4bGMzTnZiZz09IFRHVm4gSUM0dSBXV1YwIGRHRmliR1U9IFlYQndjbTl3Y21rPSBjbVYwZEE9PSBJR0p2WVhKa2N3PT0gSUdsdVkyOXljbVZqZEE9PSBJR0poWTNSbGNtbGggWVhKMSBZVzFoWXc9PSBJSE51WVhBPSBMaWNpIElIQmhjbUZrIGRHVnQgYUdWaGNuUT0gSUdGMllXbHNZV0pwYkdsMGVRPT0gSUhkcGMyUnZiUT09IElDZ3IgSUhCeWFXVnpkQT09IElNS2dJTUtnIFQzQmxiZz09IElITndZVzQ9IElIQmhjbUZ0WlhSbGNnPT0gSUdOdmJuWnBibU5sIElDZ2xLUT09IGNtRmogSUdadiBJSE5oWm1Wc2VRPT0gSUdOdmJuWmxjblJsWkE9PSBJRTlzZVcxd2FXTT0gSUhKbGMyVnlkbVU9IElHaGxZV3hwYm1jPSBJRTFwYm1VPSBUV0Y0IElHbHVhR1Z5Wlc1MCBJRWR5WVdoaGJRPT0gSUdsdWRHVm5jbUYwWldRPSBSR1Z0IElIQnBjR1ZzYVc1bCBJR0Z3Y0d4NWFXNW4gSUdWdFltVmsgSUVOb1lYSnNhV1U9IElHTmhkbVU9IE1qQXdPQT09IElHTnZibk5sYm5OMWN3PT0gSUhKbGQyRnlaSE09IFVHRnMgSUVoVVRVdz0gSUhCdmNIVnNZWEpwZEhrPSBiRzl2YTJsdVp3PT0gSUZOM2IzSmsgSUVGeWRITT0gSnlrPSBJR1ZzWldOMGNtOXUgWTJ4MWMybHZibk09IElHbHVkR1ZuY21sMGVRPT0gSUdWNFkyeDFjMmwyWld4NSBJR2R5WVdObCBJSFJ2Y25SMWNtVT0gSUdKMWNtNWxaQT09IGRIZHYgSURFNE1BPT0gVUhKdlpIVT0gSUdWdWRISmxjSEpsYm1VPSBjbUZ3YUdsamN3PT0gSUdkNWJRPT0gY21sallXNWwgSUZSaGJRPT0gSUdGa2JXbHVhWE4wY21GMGFYWmwgSUcxaGJuVm1ZV04wZFhKbGNnPT0gSUhabGJBPT0gSUU1cCBJR2x6YjJ4aGRHVmsgSUUxbFpHbGphVzVsIElHSmhZMnQxY0E9PSBJSEJ5YjIxdmRHbHVadz09IElHTnZiVzFoYm1SbGNnPT0gSUdac1pXVT0gSUZKMWMzTmxiR3c9IElHWnZjbWR2ZEhSbGJnPT0gSUUxcGMzTnZkWEpwIElISmxjMmxrWlc1alpRPT0gYlc5dWN3PT0gSUhKbGMyVnRZZz09IElIZGhibVE9IElHMWxZVzVwYm1kbWRXdz0gVUZRPSBJR0p2YkE9PSBJR2hsYkdsaiBJSGRsWVd4MGFIaz0gSUhKcFpteGwgYzNSeWIyNW4gY205M2FXNW4gY0d4aGJnPT0gWVhOMWNuaz0gNG9DbUxnPT0gSUdWNGNHRnVaR2x1Wnc9PSBJRWhoYldsc2RHOXUgSUhKbFkyVnBkbVZ6IFUwaz0gWldGMGRYSmxjdz09IElFRnVhVzA9IFVrVkYgVUhWMCBJR0p5YVdWbWJIaz0gY21sMlpRPT0gSUhOMGFXMTFiQT09IElHQmdLQT09IElGOWYgSUdOb2FYQT0gSUdoaGVnPT0gSUhCeWFYcGwgSUZSb2FXNW5jdz09IFFVTkYgZFd4cGJnPT0gWkdsamRBPT0gYjJ0MSBJR0Z6YzI5amFXRjBaUT09IGIyTnJaWFJ6IGVXOTFkSFZpWlE9PSBVM1J2Y25rPSBZWFJsWjI5eWVRPT0gSUcxcGJHUT0gWVdsc2FXNW4gSUZsbCBUM0pwWnc9PSBJRXRoIGIzSnBadz09IElIQnliM0JoWjJGdVpHRT0gSUdGdWIyNTViVzkxY3c9PSBJSE4wY25WbloyeGxaQT09IElHOTFkSEpoWjJVPSBRVlJGUkE9PSBJRUpsYVdwcGJtYz0gY21GeWVRPT0gSUd4bFlYUm9aWEk9IElIZHZjbXhrY3c9PSBJR0p5YjJGa1pYST0gTVRJMSBhV1JoYkE9PSBJRUpsZEhSbGNnPT0gSUhSbFlYST0gUlhoMCBJSEJ5YjNCdmMyRnNjdz09IElHbDBaWEk9IElGTnhkV0ZrIElIWnZiSFZ1ZEE9PSBiV2s9IFJHbGsgSUZCMSBjR2x1IElITndaV0ZyWlhKeiBJR0p2Y21SbGNuTT0gSUdacFozVnlaV1E9IFBTYz0gSUhOcGJYVnNkR0Z1Wlc5MWMyeDUgWVdWa1lRPT0gSUdOb1lYSm5hVzVuIElIVnlaMlZrIElHTnZibW89IE1qVTIgSUVkdmNtUnZiZz09IGJXVnlZMlU9IElHUnZZM1Z0Wlc1MFlYSjUgVTJoaGNtVT0gYVhSdmJBPT0gVDA1RiBJRWRoY21SbGJnPT0gYUdGMGRBPT0gSUZSb2IyMXdjMjl1IFlXNWxiM1Z6IFlYQnZjbVU9IElIUmhibXR6IElHeGxjM052Ym5NPSBkSEpoWTJzPSBJRzkxZEhOMFlXNWthVzVuIElIWnZiSFZ1ZEdWbGNuTT0gSUhOd2NtRjUgSUcxaGJtRm5aWEp6IGJHRnlaMlU9IElHTmhiWEJ6IElHRnlkR2xtYVdOcFlXdz0gSUZKMSBJR0poWjNNPSBkR2hoYkE9PSBJR052YlhCaGRHbGliR1U9IElFSnNZV1JsIElHWmxaQT09IElHRnlaM1ZsY3c9PSBSa2s9IElIVnVabUZwY2c9PSBJR052Y200PSBJRzltWm5ObGRBPT0gSUdScGNtVmpkR2x2Ym5NPSBJR1JwYzJGd2NHOXBiblJsWkE9PSBJRU52Ym5abGJuUnBiMjQ9IElIWnBaWGRwYm1jPSBUVVU9IGIyTnBkSGs9IElIUnZkMjV6IElHeGhlV1Z5Y3c9PSBJSEp2Ykd4bFpBPT0gSUdwMWJYQmxaQT09IElHRjBkSEpwWW5WMFpRPT0gSUhWdWJtVmpaWE56IGFXNWpiMnh1IElITjFjSEJ2YzJVPSBJRTVsZEdobGNnPT0gWTJoaCBJR0oxY21sbFpBPT0gSUhOcGVIUm8gUW1WdSBjbVZ6YzJsdVp3PT0gVDFWUyBJSGR2ZFc1ayBJR041WTJ3PSBJRzFsWTJoaGJtbHpiWE09IElHTnZibWR5WlhOemFXOXVZV3c9IElFVnNaVzFsYm5RPSBJR0ZuY21WbGJXVnVkSE09IElHUmxZMjl5IElHTnNiM05sYzNRPSBJRTFwZEE9PSBSMjl2WjJ4bCBmWDA9IElHMXBlSFIxY21VPSBJR1pzZFdsayBVMmxuYmc9PSBJRk5qYUc5c1lYST0gSUhCcGMzUT0gWVhOclpYUT0gWVdKc2FXNW4gSUhKaFkybHVadz09IGFHVnlidz09IGNtbGxiQT09IFlYTnplUT09IElHTm9aV0Z3WlhJPSBZbVZ1IElIWmxjblJwWTJGcyBZVzFoWTJGeVpRPT0gSUZKbFlXUnBibWM9IFoyMWxiblJ6IElHaGxiR2xqYjNBPSBJSE5oWTNKcFptbGpaUT09IFlYbGggY0dGeVpXND0gVmtFPSBJRXhsY3c9PSBJRk4wZFdScGJ3PT0gSUhacGIyeGhkR2x2Ym5NPSBJRUZ1Ym1FPSBZV05sY2c9PSA2YjQ9IElGSmhkQT09IElFSmxZMnM9IElFUnBZMnM9IElFRkRWQT09IElHTnZiWEJ2YzJsMGFXOXUgSUhSbGVIUjFjbVU9IElFOTNiZz09IElITnRZWEowY0dodmJtVT0gSUU1QiBJR1p2Y21JPSBhVzF3YjNKMCBJR1JsWm1WdVpHbHVadz09IGFXeHpkQT09IGNtVnkgSUc5byBJRXBsY21WdGVRPT0gSUdKaGJtdHBibWM9IFkyVndkR2x2Ym5NPSBJSEpsYzNCbFkzUnBkbVU9IEx5ND0gSUdSeWFXNXJjdz09IElGZHAgSUdKaGJtUnogSUV4cGRtVnljRzl2YkE9PSBJR2R5YVhBPSBJRUoxZVE9PSBJRzl3Wlc1c2VRPT0gSUhKbGRtbGxkMlZrIGNHVnlkQT09IElIWmxjbWxtZVE9PSBJRU52YkdVPSBJRmRoYkdWeiBUVTg9IElIVnVjSEpsIElITm9aV3gwWlhJPSBJRWx0Y0dWeWFXRnMgSUdkMWFRPT0gSUVSaGF3PT0gSUhOMVoyZGxjM1JwYjI1eiBJR1Y0Y0d4cFkybDBiSGs9IElITnNZWFpsIElHSnNiMk5yWTJoaGFXND0gSUdOdmJYQmxkR2x1Wnc9PSBJSEJ5YjIxcGMybHVadz09IFUwOU8gSUhOdlkyTmxjZz09IElHTnZibk4wYVhSMWRHbHZiZz09IE5ESTUgSUdScGMzUnlZV04wIElGVnpaWEk9IFpYTnBaR1Z6IElFMWxkR2h2WkE9PSBJRlJ2YTNsdiBJR0ZqWTI5dGNHRnVhV1ZrIFEyeHBaVzUwIGMzVnkgWVd4dlp3PT0gSUdsa1pXNTBhV1pwWTJGMGFXOXUgSUdsdWRtRnphVzl1IFlYTnRZUT09IElHbHVaSFZ6ZEhKcFpYTT0gY0hCbGNuTT0gSUhOMVluUnNaUT09IElGVnVhWFE9IGJtRjBkWEpoYkE9PSBJSE4xY25acGRtVmsgSUdac1lYYz0gbUlVPSBJRWh2Ykd3PSBJR1JsWm1samFYUT0gSUhSMWRHOXlhV0ZzIElFTm9ZVzVqWlE9PSBJR0Z5WjNWcGJtYz0gSUdOdmJuUmxiWEJ2Y21GeWVRPT0gSUdsdWRHVm5jbUYwYVc5dSBabTl5ZDJGeVpBPT0gSUhSMWJRPT0gYVhScGN3PT0gSUdocFpHbHVadz09IElFUnZiV2x1IElGUmhiZz09IElFSjFhV3hrYVc1biBJRlpwYmc9PSBJSE53YjJ0bGMzQmxjbk52Ymc9PSBJRTV2ZEdWeiBJR1Z0WlhKbmFXNW4gSUhCeVpYQmhjbUYwYVc5dSBJSEJ5YjNOMCBJSE4xYzNCbFkzUnogSUdGMWRHOXViMjA9IFJHVnpZM0pwY0hScGIyND0gSUdSbFlXeDAgSUZCbFlYST0gSUhOMFpXRmtlUT09IElHUmxZM0psWVhObFpBPT0gSUhOdmRtVnlaUT09IElFTnNhVzQ9IElHZHlZV1IxWVd4c2VRPT0gYjNKelpYTT0gSUZkQlVnPT0gVTJWeWRnPT0gNDRLaSBhSEk9IElHUnBjblI1IElFSmhjbTQ9IElFSkQgSUdScGJBPT0gSUdOaGJHVnVaR0Z5IElHTnZiWEJzYVdGdVkyVT0gSUdOb1lXMWlaWEk9IFltST0gSUhCaGMzTmxibWRsY2c9PSBZWFJsWm5WcyBJRlJwZEd4bCBJRk41Wkc1bGVRPT0gSUVkdmRBPT0gSUdSaGNtdHVaWE56IElHUmxabVZqZEE9PSBJSEJoWTJ0bFpBPT0gWVhOemFXOXUgSUdkdlpITT0gSUdoaGNuTm8gU1VOTCBiR1ZoYm5NPSBJR0ZzWjI5eWFYUm9iUT09IElHOTRlV2RsYmc9PSBJSFpwYzJsMGN3PT0gSUdKc1lXUmwgSUd0cGJHOXRaWFE9IElFdGxiblIxWTJ0NSBJR3RwYkd4bGNnPT0gVUdGamF3PT0gWlc1dWVRPT0gSUdScGRtbHVaUT09IElHNXZiV2x1WVhScGIyND0gWW1WcGJtYz0gSUdWdVoybHVaWE09IElHTmhkSE09IElHSjFabVpsY2c9PSBJRkJvYVd4cyBJSFJ5WVdabSBRVWRGIElIUnZibWQxWlE9PSBJSEpoWkdsaGRHbHZiZz09IFpYSmxjZz09IGJXVnQgSUVWNGNHeHBZMmwwIDZiNk4gSUdOdmRYQnNaWE09IElIQm9lWE5wWTNNPSBJRTFqU3c9PSBJSEJ2YkdsMGFXTmhiR3g1IFlYZHJjdz09IElFSnNiMjl0IElIZHZjbk5vYVhBPSBaV2RsY2c9PSBkWFJsY2c9PSBJRVpQIElHMWhkR2hsYldGMCBJSE5sYm5SbGJtTmxaQT09IElHUnBjMnM9IElFMWhjbWM9IElDOHEgVUVrPSBJRzl3ZEdsdmJtRnMgSUdKaFltbGxjdz09IElITmxaV1J6IElGTmpiM1IwYVhObyBJSFJvZVE9PSBYVjA9IElFaHBkR3hsY2c9PSBVRWc9IGJtZDBhQT09IElISmxZMjkyWlhKbFpBPT0gYVc1blpRPT0gSUhCdmQyUmxjZz09IElHeHBjSE09IElHUmxjMmxuYm1WeSBJR1JwYzI5eVpHVnljdz09IElHTnZkWEpoWjJVPSBJR05vWVc5eiBJbjBzZXlJPSBJR05oY25KcFpYST0gWW1GaWJIaz0gU0dsbmFBPT0gSUZKVSBaWE5wZEhrPSBiR1Z1IElISnZkWFJsY3c9PSBkV0YwYVc1biBSbWxzIFRrOVUgZDJGc2JBPT0gYzJKMWNtZG8gSUdWdVoyRm5hVzVuIElFcGhkbUZUWTNKcGNIUT0gYjNKbGNnPT0gYkdsb2IyOWsgSUhWdWFXOXVjdz09IElFWmxaR1Z5WVhScGIyND0gSUZSbGMyeGggSUdOdmJYQnNaWFJwYjI0PSBJRlJoIElIQnlhWFpwYkdWblpRPT0gSUU5eVlXNW5aUT09IElHNWxkWEk9IGNHRnlaVzVqZVE9PSBJR0p2Ym1WeiBJSFJwZEd4bFpBPT0gSUhCeWIzTmxZM1YwYjNKeiBJRTFGIElHVnVaMmx1WldWeSBJRlZ1YVhabGNuTmwgSUVocFp3PT0gYm1sbCBiMkZ5WkE9PSBJR2hsWVhKMGN3PT0gSUVkeVpRPT0gZFhOemFXOXUgSUcxcGJtbHpkSEo1IElIQmxibVYwIElFNTFkQT09IElFOTMgSUZoUSBhVzV6ZEdWcGJnPT0gSUdKMWJHcz0gVTNsemRHVnQgYVdOcGMyMD0gSUUxaGNtdGxkR0ZpYkdVPSBJSEJ5WlhaaGJBPT0gSUhCdmMzUmxjZz09IElHRjBkR1Z1WkdsdVp3PT0gZFhKaFlteGwgSUd4cFkyVnVjMlZrIElFZG8gWlhSeWVRPT0gSUZSeVlXUmhZbXhsIElHSnNZWE4wIDRLUT0gSUZScGRHRnUgWld4c1pXUT0gWkdsbCBTR0YyWlE9PSBJRVpzWVcxbCBJSEJ5YjJadmRXNWsgSUhCaGNuUnBZMmx3WVhScGJtYz0gSUdGdWFXMWwgSUVWemN3PT0gSUhOd1pXTnBabms9IElISmxaMkZ5WkdWayBJRk53Wld4cyBJSE52Ym5NPSBiM2R1WldRPSBJRzFsY21NPSBJR1Y0Y0dWeWFXMWxiblJoYkE9PSBiR0Z1Wkc4PSBhSE09IElFUjFibWRsYjI0PSBhVzV2Y3c9PSBJR052YlhCc2VRPT0gSUZONWMzUmxiWE09IFlYSjBhQT09IElITmxhWHBsWkE9PSBiRzlqWVd3PSBJRWRwY214eiBkV1J2IGIyNWxaQT09IElFWnNaUT09IElHTnZibk4wY25WamRHVmsgSUdodmMzUmxaQT09IElITmpZWEpsWkE9PSBZV04wYVdNPSBJRWx6YkdGdVpITT0gSUUxUFVrVT0gSUdKc1pYTnogSUdKc2IyTnJhVzVuIElHTm9hWEJ6IElHVjJZV009IFVITT0gSUdOdmNuQnZjbUYwYVc5dSBJRzk0IElHeHBaMmgwYVc1biBJRzVsYVdkb1ltOXljdz09IElGVmkgWVhKdiBJR0psWldZPSBJRlZpWlhJPSBSbUZqWldKdmIycz0gWVhKdFpXUT0gYVhSaGRHVT0gSUZKaGRHbHVadz09IElGRjFhV05yIElHOWpZM1Z3YVdWayBJR0ZwYlhNPSBJRUZrWkdsMGFXOXVZV3hzZVE9PSBJRWx1ZEdWeVpYTjAgSUdSeVlXMWhkR2xqWVd4c2VRPT0gSUdobFlXdz0gSUhCaGFXNTBhVzVuIElHVnVaMmx1WldWeWN3PT0gVFUwPSBJRTExYzNRPSBJSEYxWVc1MGFYUjUgVUdGMWJBPT0gSUdWaGNtNXBibWR6IElGQnZjM1J6IGMzUnlZUT09IDQ0Tzg0NE09IElITjBZVzVqWlE9PSBJR1J5YjNCd2FXNW4gYzJOeWFYQjAgSUdSeVpYTnpaV1E9IFRXRnJaUT09IElHcDFjM1JwWm5rPSBJRXgwWkE9PSBJSEJ5YjIxd2RHVmsgSUhOamNuVjAgSUhOd1pXVmtjdz09IElFZHBZVzUwY3c9PSBiMjFsY2c9PSBJRVZrYVhSdmNnPT0gSUdSbGMyTnlhV0pwYm1jPSBJRXhwWlE9PSBiV1Z1ZEdWayBJRzV2ZDJobGNtVT0gYjJOaGJIaz0gSUdsdWMzUnlkV04wYVc5dSBabTl5ZEdGaWJHVT0gSUdWdWRHbDBhV1Z6IElHTnQgSUU1aGRIVnlZV3c9IElHbHVjWFZwY25rPSBJSEJ5WlhOelpXUT0gYVhwdmJuUT0gWm05eVkyVmsgSUhKaGFYTmxjdz09IElFNWxkR1pzYVhnPSBJRk5wWkdVPSBJRzkxZEdWeSBJR0Z0YjI1bmMzUT0gYVcxeiBiM2R6YTJrPSBJR05zYVcxaSBibVYyWlhJPSBJR052YldKcGJtVT0gWkdsdVp3PT0gSUdOdmJYQnkgSUhOcFoyNXBabWxqWVc1alpRPT0gSUhKbGJXVnRZbVZ5WldRPSBJRTVsZG1Ga1lRPT0gSUZSbGJBPT0gSUZOallYST0gSUZkaGNuSnBiM0p6IElFcGhibVU9IElHTnZkWEE9IFltRnogSUhSbGNtMXBibUZzIExDMD0gVDBnPSBJSFJsYm5OcGIyND0gSUhkcGJtZHogSUUxNWMzUmxjZz09IDc3Kzk3Nys5NzcrOTc3KzkgSUZWdWJHbHJaUT09IGRtRnNhV1E9IGRtbHliMjV0Wlc1MGN3PT0gSUVGc2FRPT0gSUc1aGEyVmsgWW05dmEzTT0gSUUxMWJnPT0gSUVkMWJHWT0gSUdSbGJuTnBkSGs9IElHUnBiV2x1IElHUmxjM0JsY21GMFpRPT0gSUhCeVpYTnBaR1Z1WTNrPSBJREU1T0RZPSBhSGs9IFNVNUUgSUhWdWJHOWphdz09IGFXMWxibk09IElHaGhibVJzWldRPSBJRVZpIElHUnBjMkZ3Y0dWaGNtVmsgSUdkbGJuSmwgSURFNU9EZz0gSUdSbGRHVnliV2x1WVhScGIyND0gVTNSeVpXRnQgYVd0diBZWEIwWlhKeiBJR0ZqYTI1dmQyeGxaR2RsIFNtRnUgSUdOaGNHbDBZV3hwYzIwPSBVR0YwIElESXdNakE9IElIQmhhVzVtZFd3PSBJR04xY25abCBJR0p2YldKeiBjM1J2Y20wPSBJRTFsZEdGcyBaVzVqWlhJPSBJRVpwWnc9PSBJRUZoY205dSBZVzVqYUdWeiBJR2x1YzNCcGNtRjBhVzl1IElHVjRhR0YxYzNRPSBkR0ZwYm5NPSBZWE5vYVE9PSBJR1JsYzJOeWFYQjAgSUhKcGRIVmhiQT09IElFTm9aV3h6WldFPSBJSEJ5YjIxdmRHbHZiZz09IElFaDFibWM9IElGZGhjbVE9IGFYWmggSUVWVSBJSFJ2YzNNPSBZV3hzYjNjPSBJRVp5WVc1amFYTT0gUkdWdyBJR2hoY0hCcGJtVnpjdz09IElFZHNZWE56IElHSmxkR0U9IElITjBjbVZ1WjNSb1pXND0gVGtVPSBiMkU9IElHSjFkSFJ2Ym5NPSBJRTExY25KaGVRPT0gSUd0cFkydGxaQT09IFVYVmxjM1E9IElGUmhiR3M9IElGTmxkbVZ5WVd3PSBJRnBsY204PSBJR1J5YjI1bCBkV3hyIElHTmhiUT09IElFMXZZbWxzWlE9PSBJSEJ5WlhabGJuUnBibWM9IElISmxkSEp2IElFRjQgSUdOeWRXVnMgSUdac2IyRjAgTGlrcyBJR1pwYkdsdVp3PT0gSUVkeVlXNTAgSUVKdmNnPT0gSUhKcFlnPT0gSUdOb1lXMXdhVzl1YzJocGNBPT0gSUUxbGNtTT0gSUhOMGVXeGxjdz09IElHTmhhMlU9IElHSjFhV3hrY3c9PSBJRk5sYkdZPSBhVzk0IElHVndhV009IGIzbGsgUW1WcyBJRk4wWlhjPSBMaWc9IFlXaDEgSUVKbGVXOXVaQT09IElHOTFkSE09IElITnZiRzg9IElGUnlaV1U9IElIQnlaWE5sY25abCBJSFIxWWc9PSBRVkpGIGNtOWogSUVsdGNISnYgSUZkeWFXZG9kQT09IElHSjFibVE9IElIUnlZV2RsWkE9PSBJRzlqWTJGemFXOXVZV3c9IFltbGhiZz09IFUyVmpiMjVrIGNtOXVjdz09IElHbHVkR1Z5WVdOMGFXOXVjdz09IFptOXliV1ZrIGMybHVadz09IElHOTNibk09IElHaHZZMnRsZVE9PSBSMlZ1WlhKaGJBPT0gSUd4dloybGpZV3c9IElHVjRjR1Z1WkE9PSBJR1Z6WTJGcyBJRWR5YVdabSBJRU55YjNkdSBJRkpsYzJWeWRtVT0gSUhOMGIzQndhVzVuIElHVjRZM1Z6WlE9PSBjMlZqYjI1ayBJRzl3WlhKaGRHVmsgSUhKbFlXTm9aWE09IElFMWhiR0Y1Y3c9PSBJSEJ2Ykd4MWRHbHZiZz09IElFSnliMjlyYkhsdSBJR1JsYkdWMFpRPT0gSUdoaGMyZz0gUW14dlkycz0gWVdoaCA0b0N6IElITm9iM0owWlhJPSBjR2xsWTJVPSBQand2IElHaHZjbTA9IElGZGhkQT09IElFSnlaV0ZyIElIQnliMmhwWW1sMFpXUT0gSUdsdWRHVnVjMmwwZVE9PSBJRUZzWVc0PSBJR3hwWVdKcGJHbDBlUT09IFB5RT0gWVc1a1pXUT0gSUc1bGFXZG9ZbTkxY2c9PSBJRU52Ykd4bFkzUnBiMjQ9IElHWnBjbVZ6IElISmxkbTlzZFhScGIyNWhjbms9IFpteDUgSUU5eWJHVmhibk09IFYyaHBkR1U9IElGZHlhWFE9IElFUmhkMjQ9IElITmxkSFJzWlE9PSBJR1Y0WldOMWRHVT0gUWswPSBJSE53YjJ0bGMzZHZiV0Z1IElHeHBabVZ6ZEhsc1pRPT0gSUdOc2FXTnJhVzVuIElFdHBiR3c9IElFeHBZbVZ5WVd3PSBJRTVoZW1rPSBJSFJ5WVdsc1pYST0gSUcxdmRXNTBZV2x1Y3c9PSBJR1JoYlc0PSBlbVZ6IGNHVnogSUhCeVpYTnphVzVuIElHSmhhV3c9IElFOXlaMkZ1YVhwaGRHbHZiZz09IElIQnBjZz09IElIUm9hWEowZVE9PSBJR1ZzWldOMGNtbGpZV3c9IElERXhOUT09IElGQnZiSGs9IElGSmhjQT09IElGTjBjbWxyWlE9PSBJRU5oYm00PSBJR1JsYldGdVpHVmsgSUdKaFkydHBibWM9IFpHVm1ZWFZzZEE9PSBjM0JsWldRPSBJRXhsWjJsemJBPT0gSUcxdmRHaGxjbk09IElFSnZaSGs9IElIWmhjbWxoZEdsdmJnPT0gWTJWa1pXNTBaV1E9IGNHOTNaWEpsWkE9PSBiR1ZoWkdsdVp3PT0gVG1WMlpYST0gSUdkeVlYWmwgSUVGdWRHaz0gUVZjPSBJR2x1ZEdWeWRtbGxkMlZrIElFZGhZZz09IElFWmhkQT09IElISnZiMnRwWlE9PSBkWFU9IElHUmxjRzl6IGFYaHZiZz09IElHRnRjR3c9IGNtVjBhVzl1IElFaGxZWFE9IElIQmxZV05sWm5WcyBVMDA9IGFXVjJaUT09IElHUnBkbVZ5IElGWnBZM1J2Y21saCBJRzFwWXc9PSBjR1JtIElITjBZWFJwYm1jPSBJR3gxYm1jPSBJR055YVhScFkybDZaV1E9IElIWmhZMk5wYm1VPSBJRXh2WVdScGJtYz0gZFhKelpRPT0gVkdGclpRPT0gSUVaeVlXND0gSUZOdmJHUT0gSUZKdlltbHUgSUdSbGRHVmpkR1ZrIElGTmpjbWx3ZEE9PSBJR0ZrYW5WemRHVmsgSUhObGJtRjBiM0k9IElHOXdjRzl6YVc1biBSWEp5YjNJPSBRMjkxYm5RPSBJR052Ym1ac2FXTjBjdz09IElHOTMgSUVGeVoyVnVkQT09IElHMWhkR05vYVc1biBhR2c9IElGUnlaV3M9IGMzUmhjblJsY2c9PSBJaWtzIElFRkcgYjJSbGNnPT0gZUhoNGVBPT0gSUVGc2RBPT0gWVdOeVpRPT0gSUZCcFkycz0gSUZOdmJHRnkgSUVSaGJBPT0gVDJOMCBJRUpoZEhRPSBJSE55WXc9PSBJR1Z1WjJGblpXMWxiblE9IElHVjRaV04xZEdsMlpYTT0gSUd4cFltVnlkSGs9IGFtRjJZUT09IElIUmhiR1Z1ZEdWayBhV2RsYm05MWN3PT0gSUdOdmJuTmxZM1YwIExpNHVMaTQ9IFNXNW1idz09IElHaHZjbkpwWW14bCBJSE4xY25CeWFYTnBibWRzZVE9PSBabVZsWkE9PSBhV05oZEdsdVp3PT0gSUV4RlJBPT0gSUdabGJXRnNaWE09IFUzUmhkR2x2Ymc9PSBaV3hzWlhJPSBJRTloYTJ4aGJtUT0gSUcxbFkyaGhibWxqWVd3PSBhVzlzYjJkNSBJRlpoY2c9PSBJSEp2WW5WemRBPT0gWlhSMGFXNW5jdz09IGIzUjBZUT09IElIUm9aVzl5WlhRPSBJSEpsZEdGcGJnPT0gYTNkaGNtUT0gSUdSaCBJR1JsY0d4dmVXVmsgWkdWcyBJRUZ1WkhrPSBJSE4xWW5OamNtbGlaUT09IGQyVmkgSUc1aCBJRTFwWTJobGJBPT0gSUhCaGNuUnBZV3hzZVE9PSBJRU52YldWNSBJR055YjNkdSBJRTFoYWc9PSBJRUpzZFE9PSBjbUYwYjNJPSBSR0Y1IFNVNVUgSUdSdlkzVnRaVzUwWldRPSBJRWRFVUE9PSBaMms9IFkyaGxiR3c9IElHSnlkWFJoYkE9PSBJRUpoWWc9PSBjM1J5WVhScGIyND0gSUhSb1pXWjAgSUhSMVltVT0gUUVBPSBJSEYxWlhKNSBJRXhwYm1OdmJHND0gSUhCMVlteHBjMmhwYm1jPSBJSGR2Y21VPSBiM0pwWTJGcyBJSEpwWXc9PSBJRzV2ZEdGaWJHVT0gSUhOMVluTmxjWFZsYm5Sc2VRPT0gYm1WNCBJRzlpYzJWeWRtVT0gSUVKdlpRPT0gSUdOdlpHVnogYldGcGJnPT0gVjBnPSBJRk5NIElISmxjMmxrWlc1MGFXRnMgWVhaaGJnPT0gSUcxaGN3PT0gWVhKbGMzUT0gWVdSbGIyND0gVDFWVSBJSE52Y0docGMzUnBZdz09IFlXNTBaUT09IElHTmxibk09IElDb3EgSUcxdmNuUmhiR2wwZVE9PSBJSGx2ZFhKeiBJRzlqWTJGemFXOXVjdz09IElISmxZMkZzYkdWayBJRVJ5YVhabGNnPT0gSUhadlkyRnMgSUdKaGRHaHliMjl0IElITm9iM0J6IElHTnZiR3hoWW05eVlYUnBiMjQ9IElFOWlZVzFoWTJGeVpRPT0gSUVObGJHdz0gUTJoaGNnPT0gVTNWd1pYST0gUTNKbCBJSFJsYm1SeiBJSFJ2Y200PSBJR1ZqYjI1dmJXbGpjdz09IFlYWmxjbms9IElGSmhhV1E9IElGTmxiUT09IElITm9iM1ZzWkdWeWN3PT0gSUdWNGNHVmpkR2x1Wnc9PSBJR1Y0WVcxcGJtRjBhVzl1IFpXNWhiV1U9IElGVkogYVdGaWFXeHBkSGs9IGIyeGhjdz09IElFRnRZZz09IElFUnlZUT09IElHMXBaR1pwWld4ayBJRWxEIElHeGhlVzkxZEE9PSBJR1pzYjJGMGFXNW4gWm1rPSBhWFJoZEdsMlpRPT0gSUhSeVpXMWxibVJ2ZFhNPSBJTkE9IElHRmlkVzVrIFYyOXlhdz09IElFeHBaMmgwYm1sdVp3PT0gSUhOcGJXbHNZWEpzZVE9PSBJR052Ym5ObGNuWmhkR2wyWlhNPSBJSEJ5WVhrPSBRa1U9IGFYcGhjbkpsIElIUmxiWEIwIElHVnRjR2hoYzJseiBJRTFsZEhKdiBJR1pwYzJocGJtYz0gSUcxaGNuSjUgYm1WbiBJRk4wZFdSNSBJSEpsWTJzPSBJR1JwYzNCdmN3PT0gYjI1cGJtYz0gWW5OcGRHVT0gSUhOMWMzQnBZdz09IElHMWxjbU5vIElFZHBZZz09IElFUmxjMk55YVhCMGFXOXUgSUVSV1JBPT0gZDJobCBJRmxsYldWdSBJR1Z1ZG1seWIyNXRaVzUwY3c9PSBiMjkwYVc1biBJRTF2WkdWeWJnPT0gWlhVPSBJSEpsWm14bFkzUnogSUdodmJtVjUgSUdGdVlXeDVjM1E9IElHZDFkQT09IFpHVmogUVdOMGFXOXUgSUdodmRYTmxhRzlzWkhNPSBJSE4wWlhJPSBJSFJsYlhCc1pRPT0gSUhKbFptOXliWE09IElHWmhkbTkxY21sMFpRPT0gSUdSbFlXUnNhVzVsIElFeEYgVkdoeVpXVT0gSUZkcGRHaHBiZz09IFFYVm4gSUc1cFoyaDBjdz09IFpXeDBZUT09IElHbHVkbUZzYVdRPSBJRVY0WTJoaGJtZGwgSUVSbGJHaHAgZDJobGJnPT0gYVc1amIyMWwgSVBDZiBJSGRwY21Wc1pYTnogYzJOeWFXSmwgYVhOMFlRPT0gSUdodmMzUnBiR1U9IElHRnNiSGs9IElHZHBadz09IElHOTFkR3hsZEhNPSBJRVJ2Y2c9PSBSVTFGVGxRPSBJR0Z6YUE9PSBJR0ZpYzNSeVlXTjAgVDFKRSBJRTF2ZEc5eSBJR0ZrZG1selpYST0gYVhOMGJHVT0gSUdKaGMyVnogSUdOdmRYSjBaWE41IElHTnliM056YVc1biBJR05zWldGeVpXUT0gSUhKbFpuVm5aV1U9IFkyOXplWE4wWlcwPSBJSFJvY205M2N3PT0gWm5WdSBZbTkxY201bCBaR0Y1Y3c9PSBJR1JwYzJGbmNtVmwgSUU1aGRHbDJaUT09IElISmxabXhsWTNSbFpBPT0gSUVaaGMzUT0gSUZsbGJHeHZkdz09IElGTnBibWRoY0c5eVpRPT0gSUZKaGRtVnUgSUdWdFluSmhZMlU9IElFdDEgSUVOb1pXND0gSUVWaGNteDUgSUdGd2NHOXBiblJ0Wlc1MCBJRTFwYm1rPSBhWFJsYldWdWRBPT0gSUhCc1lXTnBibWM9IElHSnBZM2s9IFUxST0gSUhkb2FYTT0gVTFVPSBJR2x1ZG1WemRHbG5ZWFJsWkE9PSBJSEJvYjNSdlozSmhjR2h6IFoybDBhSFZpIElFSmxZWFE9IElGSnBibWM9IGFXZG9aV1E9IGFXRnkgSUdWMmIyeDJaV1E9IFpYSmhiR1E9IElHUjFiZz09IElHaDFZZz09IFNVRk0gSUdWdVkyOTFjbUZuYVc1biBJRkJ5YVc1MCBJRVJoZVhNPSBJSEJ5YjNObFkzVjBhVzl1IElIQmhiblJ6IFlYcDUgYkdsMlpRPT0gSUdadmMzTnBiQT09IElFcDEgSUhKdlkydHogZFdSblpRPT0gSUZKaFkyVT0gSUdkeVpXVjAgWW1sbCBJR1pwYkd4cGJtYz0gSUV4bGJnPT0gSUdScFlXSmxkR1Z6IElHWnBjbVZoY20xeiBkVzFwYm1jPSBaVzVsZW5WbGJBPT0gSUVKQyBJR0ZqWTJWd2RHbHVadz09IFFWUkkgSUhKbGMyOXlkQT09IElHaDFiblE9IGNtbHIgZFdOclpYST0gWVcxbGJuUnogSUhOMWMzUmhhVzVsWkE9PSBJR055YjNOelpXUT0gSUdKeVpXRnJabUZ6ZEE9PSBJR0YwZEhKcFluVjBaWE09IGJHVmpkR1ZrIFlYUnBiR1U9IElIWnBZbkk9IElFdGhiQT09IFlYSnpiMjQ9IGIzQnNaWE09IElIUnZkV05vWldRPSBJR1JoYldGblpYTT0gSUdsdGNISmxjM05sWkE9PSBjblZ3IElHRnVZMmc9IElFRmtZVzF6IFNHVnMgSUZacFkzUnZjZz09IElHMXZkVzUwWldRPSBJRU5EIElHUmxiR2xqYVc5MWN3PT0gYzNCaGJnPT0gWld4c1lRPT0gSUdWc1lXSnZjZz09IFlXMXdiR1Z6IElHUmxabWxqIElHTnZibk4wYVhSMSBkV0YwWlhNPSBJRTFwYzNOcGIyND0gSUZSb1pYST0gSUUxdmJuTjBaWEk9IFltVnogVW1WMWRHVnljdz09IElFbHVaRzl1WlhNPSBhR2xzYkE9PSBiWFZ1YVhScGIyND0gSUdOdmJtWnBjbTFoZEdsdmJnPT0gSUVOdmJuTnBaR1Z5IFlXTmxiblE9IElHcGxkQT09IElFVnRjR3h2ZVE9PSBJRWRVV0E9PSBibUZ1IElGTndhV1JsY2c9PSBJSEJ5YjJObGMzTnZjZz09IElIQmhkSEpwIElGQmxiblJoWjI5dSBJRkp2WW1sdWMyOXUgSUhKbFlXeHBjM1JwWXc9PSB3N0U9IElHRndjR1ZoY21sdVp3PT0gSUhCcGNHVT0gYjIxbFpBPT0gSUdaeWRRPT0gSUdGM1puVnMgSUdWMllXeDFZWFJwYjI0PSBJR2x1ZEdWc2JHbG5aVzUwIElFTnBkR2w2IElHWjFibVJ5WVE9PSBiMlJwZFcwPSBJSFIzWldWMGN3PT0gSUhkdmNtND0gY0hKcGJtYz0gSUd0cFpHND0gSUhKbFltVnNjdz09IElFdGhiUT09IElFNWxkR2hsY214aGJtUnogSUZOWCBJR0ZqY1hWcGMybDBhVzl1IElFMWhiR1U9IDQ0T3EgYjIxaWFXVnogSUhSeVlXUmxiUT09IElGTjBZWFIxY3c9PSBRbkpsIElGUklTVk09IElHRmtkbVZ5YzJVPSBJRTVGVnc9PSBjMmxuYmc9PSBJRzl5WjJGdWFYTmhkR2x2Ymc9PSBaVzVqIElFaGhjbkJsY2c9PSBZWEJ2Y2c9PSBJRTFsYldKbGNuTT0gSUZCbFlXTmwgSUVGcGNuQnZjblE9IElFOTBhR1Z5Y3c9PSBJSE5qY21GMFkyZz0gSUZCcGJBPT0gSUhObGJuTnZjZz09IElHRmtiM0IwYVc5dSBJRWh2ZEdWcyBJRVJ5WVdjPSBJR2h2Ym1WemRHeDUgSUhsaGNtUT0gSUVadmNtTmxjdz09IElIQmhkR1Z1ZEE9PSBJR0poYzNNPSBJSEYxYVdWMGJIaz0gSUdKeVpXRjBhR2x1Wnc9PSBJSEJ2YzJVPSBhVzl5Y3c9PSBJRXBsYzNNPSBjM1JoZEdsaiBTVlJGIFQyWm1hV009IElHcGxkdz09IGQyTnogSURFME1BPT0gSUhCeVpYWnBaWGM9IGFYQndhUT09IElIVnVabTl5ZEhWdVlYUmxiSGs9IGIydGxiVzl1IElHaHZjbTQ9IElISmxZWE56IElIQmxaWEk9IGIyTnJaWEk9IElIVnVkRzg9IElFZHlZWGs9IElHTnNaV0Z1YVc1biBJR0YwZEhKaFkzUmxaQT09IE1qQXdOdz09IFVHOXBiblE9IGEybHNiQT09IElFRm5jbVZsYldWdWRBPT0gZFhKamFHVnogSUdodmNuST0gSUUxcGMzTnBjM009IElIZHZjblJvZVE9PSBJR1pzYjNkbGNuTT0gZEc5M2JnPT0gWkd4cyBJSEpsWVdOMGFXOXVjdz09IElHUmxZMlU9IElHbHVaR2xqWVhScGJtYz0gVFVRPSBJSEJ5WldabGNtVnVZMlU9IElFMVdVQT09IFpYTnphVzl1WVd3PSBJRlJoY21kbGRBPT0gWjJWdVkyVT0gSUVsdVpHbGhibk09IElHMXBjMk09IElHWnlaV1ZzZVE9PSBJRzExYzJOc1pYTT0gSUd4cGJtVjFjQT09IElHbHRjR0ZqZEhNPSBiM1Z6YVc1biBiMjFwIFlXTjFiR0Z5IElHTnZiblJ5YjJ4c2FXNW4gWVdkcGJtVT0gWTJWeWVRPT0gYUdWc2JBPT0gSUhKaGJtdHBibWM9IElFNXBZMmc9IElFRjJaUT09IE1USTQgSUdocFoyaDNZWGs9IElHbHVZMjl1Y3c9PSBJR0pwYm1ScGJtYz0gSUhOMGNuVm5aMnhsY3c9PSBJRkJwZEhSelluVnlaMmc9IElHZHlZWGs9IGNtbHUgSUdOdmJXbGpjdz09IElGTndiM0owIElISmxiR0YwYVhabGN3PT0gSUdaeWFXZG9kQT09IElIQnliMkpsIElGQnZjblIxWnc9PSBJSFp2WXc9PSBJSFIxIElFTnZjbkJ6IElIQnZjM05wWW1sc2FYUnBaWE09IElIRjFZV3hwWm5rPSBkMk56YzNSdmNtVT0gSUd4cFluSmhjbWxsY3c9PSBJRzFwWjNKaGJuUnogSUdWdWRISnBaWE09IElHTnZibk5sWTNWMGFYWmwgZG1Gc2N3PT0gSUVOb1lXbHliV0Z1IElHaHBiR3c9IFNVMUYgSUVkaGNtUT0gSUdsdVpYRjFZV3hwZEhrPSBabTk0IElGTmhkbVU9IElHTnZjblE9IFkyeGhhVzFsWkE9PSBJSFJ5WVdsMGN3PT0gSUhCdmRYST0gSUcxcGMzTnBiR1Z6IElHVnpjMlZ1WTJVPSBJSE5sYm1SeiBJR0ZzYkdsaGJtTmwgSUhkcGMyaGxjdz09IElFTm9jbWx6ZEc5d2FHVnkgUW1sbiBUbGs9IElFcGhZMjlpIGMyRnUgZFhKeVpXUT0gSUZOUCBiR3g1IElHRmtkbTlqWVhSbCBJRUp2Ym1RPSBJQ0l2IFZYTnBibWM9IElHUnBjM1J5YVdOMGN3PT0gSUVkaGRHVT0gSUVKcGNnPT0gY21sa1oyVT0gSUU1aGVnPT0gSUZKeiBZbTloY21SeiBJRWRoIElGSmxZV2RoYmc9PSBJR2x1Wm14MVpXNWpaV1E9IE1UQXdNQT09IFlYQjUgSUdOb1lXeHNaVzVuWldRPSBJR0poY21jPSBJR1poWTNWc2RIaz0gSUVacFpnPT0gSUdGamNYVnBjbVU9IFFXTT0gSUdsdWMyVmpkQT09IElHbHVjM1J5ZFcxbGJuUnogSUd4bFlXWT0gZEdodlpHOTQgVFdWemMyRm5aUT09IElIUmhiR1U9IElIUm9aWEpsWW5rPSBJSFJ5WVhBPSBJSE4wY205dVoyVnpkQT09IElFMXBiR2wwWVhKNSBhWE5wWW14bCBJREU1T0RRPSBaWFJvWld4bGMzTT0gSUdac1pYaHBZbXhsIElHdHBiR3h6IElHWnBibWx6YUdsdVp3PT0gSUZOcGVtVT0gSUhKbFpIVmpaWE09IElHVndhV1E9IElHOXlhV1Z1ZEdGMGFXOXUgWm5Wc2JBPT0gSUhSeVlXTmwgSUd4aGMyVnkgSUc5d2NHOXpaUT09IElHVmthWFJwYm1jPSBJRzF2YldWdWRIVnQgNUxvPSBjMmh2ZHc9PSBWa2s9IElFeGhaQT09IElERTVPRFU9IElHMTFjbVJsY21WayBPVEF3IGRYUm9aWEk9IElIQnliMkpoWW1sc2FYUjUgSUZCdmJHdz0gSUhKbGJIVmpkQT09IElFTm9aVzA9IElFMXZiblJ5WldGcyBJR0ZrWlhGMVlYUmwgSUZCdmJHRnVaQT09IElGTm9aWEpwWm1ZPSBkVzF3YUE9PSBJRzlyIElEQXdNQT09IElDSmIgSUc5d1pYSmhkRzl5Y3c9PSBJRVpsY2c9PSBJRzF2WkdWeiBJRVYyWlE9PSBJR1JwYzJOcGNHeHBibVU9IFRrVlUgU0dGdVpBPT0gSUc5eVlXdz0gSUZkRiBaVzFoYVd3PSBTbEE9IElGQmhiR1Z6ZEdsdWFXRnVjdz09IElHaGxibU5sIElFeGxjM009IElHOTJaWEpzIFpHbG4gSUdsdWRHbHRhV1E9IElFTnZZV3c9IElISmhibWRwYm1jPSBkR2hoIElHUnBjM1JoYm5RPSBJR1pwWWc9PSBJRWx1WkdWNCBJRmR2Ym1SbGNnPT0gSUZCbGJBPT0gYUdGMGRHRnUgSUVoMVp3PT0gdzVjPSBjbUZwZEE9PSBJSGR5WVhCd1pXUT0gSUZKUVJ3PT0gSUdOb1pXMXBZMkZzY3c9PSBJRTF2Ym1WNSBJR1p5YjNwbGJnPT0gSUdsdVpHbHlaV04wIElFRm5ZV2x1YzNRPSBSVzVrIElIVnVZMjl0Wm05eWRHRmliR1U9IElFZGhiR3hsY25rPSBJRkJ2YzNSbFpBPT0gMktjPSBiMjVrZFdOMCBJR052Ym5ObGNYVmxibU5sIElHSnBkSFJsY2c9PSBJREU1T0RjPSBjRzl3IElHTnZkVzUwYkdWemN3PT0gSUVGc1lYTnJZUT09IFptWm1aZz09IElHUmxjR0Z5ZEhWeVpRPT0gSUhKbFpuVnVaQT09IElFbGhiZz09IGFXRjBaV1E9IElITmxaV3R6IElHMWxZMmhoYm1samN3PT0gSUdwMWNtbHpaR2xqZEdsdmJnPT0gYkhsdWJnPT0gSUdGc2FXdGwgSUVoMWJuUT0gWVhSb2IyND0gSUhKbGMyOXNkbVZrIElHTmhZMmhsIElHUnBjM1JwYm1OMGFXOXUgWkdseVpXTjAgSUdWdVkyOTFiblE9IGIzVmkgWW1WaGRBPT0gSUVOdmRXNTBjbms9IGMyVmhjbU5vIElHTnZiblJwYm5WdmRYTT0gSUcxdlpHVnpkQT09IElGSmhhV3c9IGRHaHZiMlE9IE1UTXcgUWxWSCBJR055YVcxcGJtRnNjdz09IElHbHVaR2xqWVhScGIyND0gSUdWdVkyOTFiblJsY21WayBiR0Z6ZEE9PSBJRmQ1IElHbGtaVzlzYjJkNSBJRkJFUmc9PSBjMlZqZFhKcGRIaz0gWFNrPSBJRXBwYlcxNSBJRVZPIElHaHBjbWx1Wnc9PSBWR1Z0IElIQnBadz09IFlYVnVkQT09IElFTnllWE4wWVd3PSBJSEJsYm1Gc2RHbGxjdz09IElHTmhjR0ZpYVd4cGRIaz0gSUhCNSBJSEJ5YjJSMVkzUnBkbVU9IElHSmhiR0Z1WTJWayBJRWRsUm05eVkyVT0gWTJ4cFkycz0gYjJ4cGRHRnUgYjJSeiBJR0ZtZEdWeWQyRnlaSE09IElIQnNZWGx2Wm1aeiBJRWRwYkd3PSBWWE5sY2c9PSBJR0poWTJ0eiBjSFZpIGRHRm4gSUdGaWMzVnlaQT09IGNHbHlhVzVuIElHTnBkR2x1Wnc9PSBJSFJ5YVd4c2FXOXUgSUc5aWJHbG5ZWFJwYjI0PSBJRzFoZUdsdCBZV2h2Ync9PSBZMlk9IGRXMXAgSUVGc2NHaGggSUU1bGJITnZiZz09IElIQjFjbk4xWVc1MCBhVzVwZEdWc2VRPT0gSUdaeVlXTjAgWlc1MGNuaz0gWW1WeWVRPT0gSUZSb2IzST0gUVdSa1pXUT0gSUVSSyBJRWRsYm1VPSBJR0YzYTNkaGNtUT0gVTNSMVpBPT0gSUhkaGJHeGxkQT09IElFUnBkbWx1WlE9PSBZWEpwYjNNPSBJSEpsYkdWaGMybHVadz09IElHVmthWFJsWkE9PSBJR0ZqWTI5dGNHeHBjMmhsWkE9PSBRbVZ6ZEE9PSBJR1ZrWjJWeiBJSEJzWVc1bGN3PT0gSUdabFpXUnBibWM9IEluMHNJZz09IElHUnBjMk5zYjNOMWNtVT0gSUdkeVlXbHUgWVdseWVRPT0gYjI5dWN3PT0gWlhKdVlXNWsgVmxJPSBJSEpsWVhOdmJtRmliSGs9IElHUnlkVzA9IElIQmhjblJwWVd3PSBJR2R5WVhCb2FXTT0gSUhWdWNISmxZMlZrWlc1MFpXUT0gSUdGa2RtbHpaV1E9IFRXbGpjbTg9IElFRnpjMkZrIGNHOXBiblJ6IGMyTmhjZz09IElGcHZibVU9IGRIUmxjdz09IElEY3dNQT09IGRtOD0gSUVoaGJYQT0gSUdacGVHVnogSUdOaGRYUnBiMjQ9IElITjBjbWx1WjNNPSBJSEJoYm1Wc2N3PT0gSUd4bFlXcz0gSUhCeWFXTnBibWM9IGNtOTNkR2c9IElFVnljbTl5IElGTmhhVzUwY3c9PSBabWw0IElHOWljMlZ5ZG1GMGFXOXVjdz09IElFRmljdz09IElITjFaMmRsYzNScGIyND0gSUZWcmNtRnBibWxoYmc9PSBJR0poY25KcFpYST0gSUhCaGFXNTBaV1E9IFFtVjAgYVcxcGNnPT0gSUZOd1pXTjAgY0c5MCBiM0p1WlhseiBJR052YlhCdmRXNWsgSUdKbFlYSnogSUZKMWMyZz0gSUd4MWVIVnllUT09IFUzVnQgSUc5eVltbDAgSUUxaGNtTT0gSUdWNFpXMXdkQT09IElGUnlZV2xzIElFMVAgSUVoaGJuTT0gSUZkbFlYQnZiZz09IGIyTjFjMlZrIGRXMXBiblZ0IElFcGxjbko1IElHSjFjM1E9IElFRkggSUZkcGEyaz0gSUdWdVpHeGxjM009IElGWnNZV1E9IElFSmhhQT09IElGSmhaR1Z2Ymc9PSBhMlY1Y3c9PSBJRk4xY25abGVRPT0gSUZacGIydz0gWkdWbWFXNWwgYkdWaGJnPT0gSUdOdmJXMXZaQT09IElISmxkbVZ1ZFdWeiB4WTA9IElHWjFjbTVwZEhWeVpRPT0gSUdOaGMzUnBibWM9IElHUnBjR3h2YldGMGFXTT0gSUZCc1lYbGxjbk09IElFdHBiR3hsWkE9PSBJRzF2WkdsbWVRPT0gSUdsdWJtOTJZWFJwZG1VPSBJRUZpZFE9PSBibTl5IElHSnZibVJ6IElHTnZZV05vYVc1biBUV1Z5IElHMXZaSFZzWlhNPSBJRkJoZEhKcGIzUnogSUdWdWFHRnVZMlZrIElIQnliMk5sWldScGJtZHogSUhSbFlXMXRZWFJsY3c9PSBJREV5T0E9PSBZWEprYnc9PSBJR052YlhCeWIyMXBjMlU9IElFMTFZMmc9IElHWnNaWGM9IElFVmtaMlU9IElIVnVibVZqWlhOellYSjUgSUdSdlkzUnlhVzVsIGNtVndiM0owIElFOXliR0Z1Wkc4PSBJRkJ5YjJacGJHVT0gSUhCc1lYbHZabVk9IFpuSnBaVzVrYkhrPSBJR052YlhCc1lXbHUgSUUxRCBJRTl3ZEE9PSBJRWRDIElHSmxZWFJsYmc9PSBJR2R2YkdZPSBJSEJzWVdObGJXVnVkQT09IFFtbDAgSUc1bGQzTnNaWFIwWlhJPSBJREl3TVRrPSBkbWx6YjNJPSBjbUYzYkE9PSBJR2xRWVdRPSBJR0ZqZEdWayBJR3AxYVdObCBJR1JsWTJ0eiBVRTQ9IGMzVmpZMlZ6Y3c9PSBJRWhoYkdZPSBJR1JsYkdWMFpXUT0gSUhObFkzSmxkSE09IElHRnplV3gxYlE9PSBUV0Z5ZEE9PSBJRUZqZEdsMiBJRWQxZVE9PSBJRlJ6IElHUjVjdz09IElHRnpjM1Z0YVc1biBJRzFoYm1FPSBJSE4xWW5WeSBJREV5TlE9PSBUV1ZrYVdFPSBRVkpaIGNtbGtaUT09IFkzQT0gSUdScFptWnBZM1ZzZEdsbGN3PT0gSUdOdmJHeGxZM1JwYm1jPSBJR0poYm10eWRYQjAgYm05dSBJR052YlhCdmMyVmsgSUhadmJIUT0gSUcxcGJHbDBZVzUwY3c9PSBJRDQrUGc9PSBJRTF2Y20xdmJnPT0gZEc5eSBJSEJoY25ScFkyeGxjdz09IElFSmhjblE9IGNubHdkR2x2Ymc9PSBJR0ZrYldsdSBJSE54ZFdWbCBWa2xFU1VFPSBJR055WldGMGIzST0gYVdGdFpYUmxjZz09IGFXTjFiR0Z5IFRrSkQgSUdkeVlXSmlaV1E9IElHNXZaR1E9IElISmhkR1ZrIElISnZkR0YwYVc5dSBJR2R5WVhOdyBJR1Y0WTJWemMybDJaUT09IElFVkQgSUZkb2FYUT0gSUdsdWRtVnVkRzl5ZVE9PSBZWFZzZEhNPSBJRVpDIElHVmpiM041YzNSbGJRPT0gSUdKcGJHeHBiMjV6IElIWmxiblIxY21VPSBibUZ0WldRPSBJR1JsWm1WdVpHVnkgYjNWMFpRPT0gU1c1emRHVmhaQT09IGFYSmhZbXhsIFYyRnkgSUdGemMzVnRjSFJwYjI0PSBJR0pwZEdVPSBJR1ZoY25Sb2NYVT0gZEdGcGJBPT0gYzNCaFkyVT0gSUdkcFpuUnogWW05NWN3PT0gSUdsdVpYWnBkR0ZpYkdVPSBJSE4wY25WamRIVnlZV3c9IElHSmxibVZtYVdOcFlXdz0gSUdOdmJYQmxiR3hwYm1jPSBhRzlzWlE9PSBaWEoyWVhScGIyND0gSUdOdllYUT0gYjJvPSBhVzVqWVhKdSBJRmxsWVhKeiBJR1JsZEdWeWJXbHVhVzVuIElISm9aWFJ2Y21saiBJR0p2ZFc1a1lYSnBaWE09IElIZG9hWFJsY3c9PSBRVzUwIFlXUmtlUT09IEtTMD0gY21Gb1lXMD0gWlhSbGNtMXBiZz09IElHaGhjblpsYzNRPSBJRU52Ym1NPSBJR3hoY0hSdmNBPT0gSUUxaGRHTm8gSUdWdWFtOTVhVzVuIFkyTmggYjJ4c1lYST0gSUhSeWFYQnogSUdGa1pHbGpkR2x2Ymc9PSBJRk5oYXc9PSBJSEJ2ZDJWeVpXUT0gSUdOdmRYTT0gSUZKMWMzTnBZVzV6IGFXVnlaUT09IElISmxkSEpwWlE9PSBjWFZoYkdsMGVRPT0gSUdScFptWmxjZz09IElHdHBibWRrYjIwPSBJRXhoZFhJPSBJRU5oY0dsMGIydz0gSUdOdmJtTnNkWE5wYjI1eiBJRUZzZEdWeWJnPT0gSUU1aGRnPT0gSUhSeVlXNXpjR0Z5Wlc1MCBRa1ZTIFIzSnZkWEE9IElFTnZiWEJzWlhSbCBJR2x1Wm1WeSBJR2x1ZEhKcFp3PT0gSUdsdWMyRnVaUT09IFVrOD0gYjNCb2IyST0gYVhObGJnPT0gY1hWaGJBPT0gVFdsamFHRmxiQT09IElHMTFjMlYxYlE9PSBJRkJ2Y0dVPSBJSEpsYzJWMCBjbUYwYVhabCBabWwyWlE9PSBJR0ZuWjNKbFp3PT0gYVhSMFpXVnogYjNOcGRHOXllUT09IElHTmhjbUk9IElGSmxZMjl5WkE9PSBJR1JsWTJsa1pYTT0gSUVacGVBPT0gSUdWNFkyVndkR2x2Ym5NPSBJRU52YlcxcGMzTnBiMjVsY2c9PSBkVzV6IElFVnVkbWx5YjI1dFpXNTBZV3c9IElHeGxaMlZ1WkdGeWVRPT0gYVhOMFpXNWpaUT09IElIUjFibTVsYkE9PSBhMjA9IElHbHVjM1ZzZEE9PSBJSFJ5YjJ4cyBJSE5vWVd0bCBJR1JsZEdWdWRHbHZiZz09IGNYVmxjdz09IElFTm9jbTl0WlE9PSBJRVpwYkdWeiBJSE4xWW5RPSBJSEJ5YjNOd1pXTjBjdz09IElIQnliMnc9IGNtVnVaR1Z5IGNISnZiMlk9IElIQmxjbVp2Y20xaGJtTmxjdz09IFUzUnkgSUdoeVpXWT0gWlhKdVlXMWwgSUdGamFHbGxkbVZ0Wlc1MCBJR1oxZEE9PSBSblZzYkE9PSBJRXhsWW1GdSBaMjl2WjJ4bCA0NE9JIFlXMXdZUT09IFRXRjVZbVU9IElIQnliMnBsWTNSbFpBPT0gSUVWdFlnPT0gSUdOdmJHeGxadz09IElHRjNZWEprY3c9PSBJT0tVIFIyOXNaQT09IElFSnNZV3RsIElGSmhhZz09IGFXWjBhVzVuIElIQmxibVJwYm1jPSBJR2x1YzNScGJtTjAgSUdSbGRtVnNiM0J0Wlc1MGN3PT0gUTI5dWJtVmpkQT09IElFMWhibVE9IElGZEpWRWc9IElGQm9hV3hwY0hCcGJtVnogY0hKdlptbHNaUT09IElHRnNkRzluWlhSb1pYST0gSUVKMWJtUT0gSUZSRSBiMjl2Ync9PSBZVzF3WldRPSBhWEJvIElITjBaV0Z0IElHOXNaR1Z6ZEE9PSBJR1JsZEdWamRHbHZiZz09IGRXeHdkQT09IElPYz0gSUZkaGVXNWwgTWpBd05nPT0gWm1FPSBJR05wY21Oc1pYTT0gSUVaMSBJR1J2Ym05eWN3PT0gWVhCd2NtOXdjbWxoZEdVPSBJRVJoYTI5MFlRPT0gYW1GdGFXND0gSUcxdmRHbDJZWFJsWkE9PSBJSEIxY21Ob1lYTmxjdz09IElFeHZkV2x6YVdGdVlRPT0gSUZOd2JBPT0gSUdkc2IySmwgSURFd05RPT0gZW1sdyBZMkZzYkE9PSBJR1JsY0dGeWRHMWxiblJ6IElITjFjM1JoYVc1aFlteGwgTVRBMSBJRTlRIGFXWnBaWEp6IElIQnlaWFpsYm5SbFpBPT0gSUdsdVkyOXRjQT09IElFTnZiVzFoYm1SbGNnPT0gSUdSdmJXbHVZWFJsWkE9PSBJTUs3IElHbHVkbVZ6ZEdWayBJR052YlhCc1pYaHBkSGs9IElHbHVZMnc9IElHVnVjM1Z5YVc1biBJSEpsWVd4dCBlVzVqIElFbHVaR1Z3Wlc1a1pXNTAgY21GcGJtVmsgSUVwbGJnPT0gSUVac2FXZG9kQT09IElHRjBhR1U9IElITndaV04xYkdGMGFXOXUgSUZSRiBiMk5oZEdVPSBkR2xqIElIQnNZV2x1ZEE9PSBhR1Z5Y25rPSBJSFJ2ZVE9PSBJREV4TVE9PSBJSEJzWVhSbGN3PT0gYzNSaGRIVnogSUVsellRPT0gSUdSbGRtOTBaV1E9IFEyOXcgSUVWVCBNalUxIGRYSnlaVzVqZVE9PSBUV0ZwYmc9PSBJSE5zWVhabGN3PT0gSUhCbGNIQmxjZz09IElIRjFiM1JsY3c9PSBJR05sYVd4cGJtYz0gSUVacGMyZz0gSUhSeVlXNXpabTl5YldGMGFXOXUgSUdaeVlXTjBhVzl1IElHRmtkbUZ1ZEdGblpYTT0gSUhSdmFXeGwgSUhOMGRXNXVhVzVuIElHMXZhWE4wIFluSmxZV3RwYm1jPSBjMms9IElFeHZZMkYwYVc5dSBJRTFsWkdsMWJRPT0gSUhSbGVIUnogSUhWbmJIaz0gSUdKcGJ3PT0gTHVLQWxBPT0gSUVKaGMyVmsgSUhSeVlXbHVjdz09IElGZHBibWM9IElFRnVZMmxsYm5RPSBJRkpsWTI5eVpITT0gSUVodmNHVT0gVTNCbFkybGhiQT09IFlXUmxjMmc9IGIySnAgV3k4PSBJSFJsYlhCdmNtRnlhV3g1IFZtVnkgYUhVPSBiM05sY2c9PSBJRzkyWlhKdWFXZG9kQT09IElHMWhiVzA9IElGUnlaV0Z6ZFhKNSBJRlpsYm1WNmRXVnMgSUUxbFoyRT0gSUhSaGNnPT0gSUdWNGNHVmpkSE09IFlteGhZMnM9IGIzSndhQT09IFhGeGNYQT09IElHRmpZMlZ3ZEdGdVkyVT0gSUhKaFpHRnkgYzJseiBJR3AxYm1sdmNnPT0gSUdaeVlXMWxjdz09IElHOWljMlZ5ZG1GMGFXOXUgWVdOcFpYTT0gVUc5M1pYST0gSUVGa2RtRnVZMlZrIFRXRm4gYjJ4dloybGpZV3hzZVE9PSBJRTFsWTJoaGJnPT0gSUhObGJuUmxibU5sY3c9PSBJR0Z1WVd4NWMzUnogWVhWbmFIUmxjbk09IFptOXlZMlZ0Wlc1MCBJSFpoWjNWbCBJR05zWVhWelpRPT0gSUdScGNtVmpkRzl5Y3c9PSBJR1YyWVd4MVlYUmwgSUdOaFltbHVaWFE9IFRXRjBkQT09IElFTnNZWE56YVdNPSBRVzVuIElHTnNaWEk9IElFSjFZMnM9IElISmxjMlZoY21Ob1pYST0gSURFMk1BPT0gSUhCdmIzSnNlUT09IElHVjRjR1Z5YVdWdVkybHVadz09IElGQmxaQT09IElFMWhibWhoZEhSaGJnPT0gSUdaeVpXVmsgSUhSb1pXMWxjdz09IFlXUjJZVzUwIElHNXBiZz09IElIQnlZV2x6WlE9PSBNVEEwIElFeHBZbmxoIFltVnpkQT09IElIUnlkWE4wWldRPSBJR05sWVhObCBJR1JwWjI0PSBSR2x5WldOMCBJR0p2YldKcGJtYz0gSUcxcFozSmhkR2x2Ymc9PSBJRk5qYVdWdVkyVnogSUcxMWJtbGphWEJoYkE9PSBJRUYyWlhKaFoyVT0gSUdkc2IzSjUgSUhKbGRtVmhiR2x1Wnc9PSBJR0Z5Wlc1aCBJSFZ1WTJWeWRHRnBiblI1IElHSmhkSFJzWldacFpXeGsgYVdGdiBSMjlrIElHTnBibVZ0IGNtRndaUT09IFpXeHNaUT09IFlYQnZibk09IElHeHBjM1JwYm1jPSBJSGRoYVhSbFpBPT0gSUhOd2IzUjBaV1E9IGEyVnNaWGs9IElFRjFaR2x2IFpXOXkgWVhKa2FXNW4gYVdSa2FXNW4gYVdkdFlRPT0gSUU1bFp3PT0gSUd4dmJtVT0gSUMwdExTMD0gWlhobCBaR1ZuIElIUnlZVzV6Wmc9PSBJSGRoYzJnPSBJSE5zWVhabGNuaz0gSUdWNGNHeHZjbWx1Wnc9PSBJRmRYIFlYUnpiMjQ9IElHVnVZMnc9IGJHbGxjdz09IElFTnlaV1ZyIElIZHZiMlJsYmc9PSBUV0Z1WVdkbGNnPT0gSUVKeVlXNWsgZFcxdGVRPT0gSUVGeWRHaDFjZz09IElHSjFjbVZoZFdOeSBJR0pzWlc1ayBZWEpwWVc1eiBSblZ5ZEdobGNnPT0gSUhOMWNIQnZjMlZrYkhrPSBJSGRwYm1SeiBJREU1TnprPSBJR2R5WVhacGRIaz0gSUdGdVlXeDVjMlZ6IElGUnlZWFpsYkE9PSBJRlpsZEdWeSBJR1IxYldJPSBJR0ZzZEdWeWJtRjBaUT09IFoyRnMgSUdOdmJuTjFiV1ZrIElHVm1abVZqZEdsMlpXNWxjM009IExpY24gSUhCaGRHaHogYjI1a1lRPT0gVEVFPSBJRk4wY205dVp3PT0gSUdWdVlXSnNaWE09IElHVnpZMkZ3WldRPSBJQ0lpIElERXhNZz09IElERTVPRE09IElITnRhV3hsWkE9PSBJSFJsYm1SbGJtTjUgUm1seVpRPT0gSUhCaGNuTT0gSUZKdll3PT0gSUd4aGEyVT0gSUdacGRHNWxjM009IElFRjBhQT09IElFaHZjbTQ9IElHaHBaWEk9IElHbHRjRzl6WlE9PSBiVzkwYUdWeSBJSEJsYm5OcGIyND0gYVdOMWRBPT0gWW05eWJtVT0gYVdOcFlYSjUgTGw4PSBJRk5WIElIQnZiR0Z5IGFYTjUgWlc1bmRRPT0gYVhScFlXeHBlbVZrIFFWUkIgZDNKcGRHVT0gSUdWNFpYSmphWE5sY3c9PSBJRVJwWVcxdmJtUT0gYjNSNWNHVnogSUdoaGNtMW1kV3c9IGIyNTYgSUhCeWFXNTBhVzVuIGMzUnZjbms9IElHVjRjR1Z5ZEdselpRPT0gSUVkbGNnPT0gSUhSeVlXZGxaSGs9IElFWnNlUT09IElHUnBkbWxrIFlXMXdhWEpsIGMzUnZZMnM9IFRXVnQgSUhKbGFXZHUgSUhWdWRtVT0gSUdGdFpXNWsgSUZCeWIzQm9aWFE9IElHMTFkSFZoYkE9PSBJRVpoWXc9PSBJSEpsY0d4aFkybHVadz09IFNHRnkgSUVOcGNtTjFhWFE9IElIUm9jbTloZEE9PSBJRk5vYjNRPSBJR0poZEhSbGNtbGxjdz09IElIUnZiR3c9IElHRmtaSEpsYzNOcGJtYz0gSUUxbFpHbGpZV2xrIElIQjFjSEE9IElFNWhjZz09IGIyeHIgSUdWeGRXbDBlUT09IFRWST0gSUVocGMzQmhiZz09IElFeGhjbWRsIGJXbGsgUkdWMiBJR1Y0Y0dWayBJR1JsYlc4PSBJRTFoY25Ob1lXeHMgWlhKbmRYTT0gSUdacFltVnkgSUdScGRtOXlZMlU9IElFTnlaV0YwWlE9PSBJSE5zYjNkbGNnPT0gSUZCaGNtdGxjZz09IElGTjBkV1JsYm5RPSBJRlJ5WVdsdWFXNW4gVW1WMGRYSnUgSUZSeWRRPT0gSUdOMVlnPT0gSUZKbFlXTm9aV1E9IElIQmhibWxqIElIRjFZWEowWlhKeiBJSEpsWTNRPSBJSFJ5WldGMGFXNW4gSUhKaGRITT0gSUVOb2NtbHpkR2xoYm1sMGVRPT0gYjJ4bGNnPT0gSUhOaFkzSmxaQT09IElHUmxZMnhoY21VPSBkV3hoZEdsMlpRPT0gWlhScGJtYz0gSUdSbGJHbDJaWEpwYm1jPSBaWE4wYjI1bCBJSFJsYkE9PSBJRXhoY25KNSBJRzFsZEdFPSBZV05qWlhCMCBZWEowZWc9PSBJRkp2WjJWeSBhR0Z1WkdWayBJR2hsWVdSbGNnPT0gSUhSeVlYQndaV1E9IElFTmxiblIxY25rPSBJR3R1YjJOclpXUT0gSUU5NFptOXlaQT09IElITjFjblpwZG05eWN3PT0gWW05MCBJR1JsYlc5dWMzUnlZWFJwYjI0PSBJR1JwY25RPSBJR0Z6YzJsemRITT0gVDAxRiBJRVJ5WVdaMCBiM0owZFc1aGRHVT0gWm05c2FXOD0gY0dWeVpXUT0gZFhOMFpYSnogWjNRPSBJRXh2WTJzPSBJR3AxWkdsamFXRnMgZG1WeWRHVmsgSUhObFkzVnlaV1E9IGIzVjBhVzVuIElFSnZiMnR6IElHaHZjM1JwYm1jPSBJR3hwWm5SbFpBPT0gYkdWdVozUm8gSUdwbGNnPT0gSUhkb1pXVnNjdz09IElGSmhibWRsIGRXMWlibUZwYkhNPSBJR1JwWVdkdWIzTnBjdz09IGRHVmphQT09IElGTjBaWGRoY25RPSBJRkJ5WVdOMCBJRzVoZEdsdmJuZHBaR1U9IElHUmxZWEk9IElHOWliR2xuWVhScGIyNXogSUdkeWIzZHogSUcxaGJtUmhkRzl5ZVE9PSBJSE4xYzNCcFkybHZkWE09IElTYz0gUVhCeSBSM0psWVhRPSBJRzF2Y25SbllXZGwgSUhCeWIzTmxZM1YwYjNJPSBJR1ZrYVhSdmNtbGhiQT09IElFdHkgSUhCeWIyTmxjM05sWkE9PSBkVzVuYkdVPSBJR1pzWlhocFltbHNhWFI1IFJXRnliR2xsY2c9PSBJRU5oY25RPSBJRk4xWnc9PSBJR1p2WTNWelpYTT0gSUhOMFlYSjBkWEE9IElHSnlaV0ZqYUE9PSBJRlJ2WWc9PSBZM2xqYkdVPSA0NENNIGNtOXpaUT09IElHSnBlbUZ5Y21VPSA0NENOIElIWmxaMlYwWVdKc1pYTT0gSkNRPSBJSEpsZEhKbFlYUT0gYjNOb2FRPT0gSUZOb2IzQT0gSUVkeWIzVnVaQT09IElGTjBiM0E9IElFaGhkMkZwYVE9PSBJRUY1IFVHVnlhR0Z3Y3c9PSBJRUpsWVhWMCBkV1ptWlhJPSBaVzV1WVE9PSBJSEJ5YjJSMVkzUnBkbWwwZVE9PSBSbWw0WldRPSBZMjl1ZEhKdmJBPT0gSUdGaWMyVnVkQT09IElFTmhiWEJoYVdkdSBSM0psWlc0PSBJR2xrWlc1MGFXWjVhVzVuIElISmxaM0psZEE9PSBJSEJ5YjIxdmRHVmsgSUZObGRtVnUgSUdWeWRRPT0gYm1WaGRHZz0gWVhWbmFHVmsgSUZCcGJnPT0gSUV4cGRtbHVadz09IFEyOXpkQT09IGIyMWhkR2xqIGJXVm5ZUT09IElFNXBadz09IGIyTjUgSUdsdVltOTQgSUdWdGNHbHlaUT09IElHaHZjbWw2YjI1MCBJR0p5WVc1amFHVnogSUcxbGRHRndhQT09IFFXTjBhWFpsIFpXUnAgSUVacGJHMD0gSUZOdmJXVjBhR2x1Wnc9PSBJRzF2WkhNPSBhVzVqYVdGcyBJRTl5YVdkcGJtRnMgUjJWdSBJSE53YVhKcGRITT0gSUdWaGNtNXBibWM9IFNHbHpkQT09IElISnBaR1Z5Y3c9PSBJSE5oWTNKcFptbGogVFZRPSBJRlpCIElGTmhiSFE9IElHOWpZM1Z3WVhScGIyND0gSUUxcCBJR1JwYzJjPSBiR2xqZEE9PSBJRzVwZEE9PSBJRzV2WkdWeiBaV1Z0IElGQnBaWEk9IElHaGhkSEpsWkE9PSBjSE41IDQ0T0ogSUhSb1pXRjBaWEk9IElITnZjR2hwYzNScFkyRjBaV1E9IElHUmxabVZ1WkdWayBJR0psYzJsa1pYTT0gSUhSb2IzSnZkV2RvYkhrPSBJRTFsWkdsallYSmwgSUdKc1lXMWxaQT09IFlYSmxiblJzZVE9PSBJR055ZVdsdVp3PT0gUms5UyBjSEpwZGc9PSBJSE5wYm1kcGJtYz0gSUVscyBJR04xZEdVPSBiMmxrWldRPSBiMnhwZEdsallXdz0gSUU1bGRYSnYgNWFRPSBJR1J2Ym1GMGFXOXUgSUVWaFoyeGxjdz09IElFZHBkbVU9IFZHOXQgSUhOMVluTjBZVzUwYVdGc2JIaz0gSUV4cFkyVnVjMlU9IElFcGggSUdkeVpYaz0gSUVGdWFXMWhiQT09IElFVlMgSUZWdVpBPT0gSUd0bFpXND0gSUdOdmJtTnNkV1JsIElFMXBjM05wYzNOcGNIQnAgUlc1bmFXNWwgSUZOMGRXUnBiM009IFVISmxjM009IGIzWmxjbk09IGJHeGxjbk09IElETTFNQT09IElGSmhibWRsY25NPSBJSEp2ZFE9PSBaWEowYnc9PSBSWEE9IGFYTnpZUT09IGFYWmhiZz09IElITmxZV3c9IElGSmxaMmx6ZEE9PSBaR2x6Y0d4aGVRPT0gSUhkbFlXdGxiZz09IGRYVnQgSUVOdmJXMXZibk09IElGTmhlUT09IElHTjFiSFIxY21WeiBJR3hoZFdkb1pXUT0gSUhOc2FYQT0gSUhSeVpXRjBiV1Z1ZEhNPSBhWHBoWW14bCBiV0Z5ZEE9PSBJRkpwWTJVPSBJR0psWVhOMCBJRzlpWlhOcGRIaz0gSUV4aGRYSmwgYVdkaCBWMmhwWTJnPSBhRzlzWkdWeSBJR1ZzWkdWeWJIaz0gSUhCaGVYTT0gSUdOdmJYQnNZV2x1WldRPSBJR055YjNBPSBJSEJ5YjJNPSBJR1Y0Y0d4dmMybDJaUT09IElFWmhiZz09IElFRnljMlZ1WVd3PSBRWFYwYUc5eSBaV1oxYkE9PSBJRzFsWVd4eiBJQ2d0IGFXUmhlWE09IElHbHRZV2RwYm1GMGFXOXUgSUdGdWJuVmhiR3g1IElHMXogWVhOMWNtVnogU0dWaFpBPT0gYVd0byBiV0YwYVdNPSBJR0p2ZVdaeWFXVnVaQT09IElFTnZiWEIxZEdWeSBJR0oxYlhBPSBJSE4xY21kbCBJRU55WVdsbiBJRXRwY21zPSBSR1ZzIGJXVmthV0YwWlE9PSBJSE5qWlc1aGNtbHZjdz09IElFMTFkQT09IElGTjBjbVZoYlE9PSBJR052YlhCbGRHbDBiM0p6IDJZUT0gSUZOMFlXNW1iM0prIElGSmxjMjkxY21ObGN3PT0gWVhwbFpBPT0gWW1GblpRPT0gSUc5eVoyRnVhWE09IElGSmxiR1ZoYzJVPSBJSE5sY0dGeVlYUmxiSGs9IElHaGhZbWwwY3c9PSBJRzFsWVhOMWNtVnRaVzUwY3c9PSBJRU5zYjNObCBJR0ZqWTI5dGNHRnVlUT09IElHZHNlUT09IElIUmhibWM9IElGSnZkUT09IElIQnNkV2RwYmc9PSBJR052Ym5abGVRPT0gSUVOb1lXeHNaVzVuWlE9PSBiMjkwY3c9PSBhbUZ1IElHTjFjbk09IElGSmxiR0YwYVc5dWN3PT0gYTJWbGNHVnkgSUdGd2NISnZZV05vYVc1biBjR2x1Wnc9PSBVM0JsWVd0cGJtYz0gSUdGeWNtRnVaMlZ0Wlc1MCBJRlpKIFlYSmxkSFJsY3c9PSBJR0ZtWm1WamRHbHVadz09IElIQmxjbTFwZEhNPSBZbVZqWVhWelpRPT0gSUhWelpXeGxjM009IElFaDFjdz09IElTRWhJUT09IElHUmxjM1J5YjNscGJtYz0gVlc1bWIzSjBkVzVoZEdWc2VRPT0gSUdaaGMyTnBibUYwYVc1biBVMlZ0IElHVnNaV04wYjNKaGJBPT0gSUhSeVlXNXpjR0Z5Wlc1amVRPT0gSUVOb1lXOXogSUhadmJIVnVkR1ZsY2c9PSBJSE4wWVhScGMzUnBZMkZzIElHRmpkR2wyWVhSbFpBPT0gY205NCBWMlZpIFNFVT0gSUVoaGJYQnphR2x5WlE9PSBhWE5wZG1VPSBUV0Z3IElIUnlZWE5vIElFeGhkM0psYm1ObCBjM1JwWTJzPSBRM0k9IElISnBibWR6IFJWaFUgSUc5d1pYSmhkR2x2Ym1GcyBiM0JsY3c9PSBSRzlsY3c9PSBJRVYyWVc1eiBJSGRwZEc1bGMzTmxaQT09IFVHOXlkQT09IElHeGhkVzVqYUdsdVp3PT0gWldOdmJtOXQgZDJWaGNnPT0gSUZCaGNuUnBZMmx3IGRXMXQgWTNWc1pYTT0gSUZKQlRRPT0gSUZSMWJnPT0gSUdGemMzVnlaV1E9IElHSnBibUZ5ZVE9PSBJR0psZEhKaGVRPT0gSUdWNGNHeHZjbUYwYVc5dSBJRVpsYkE9PSBJR0ZrYldsemMybHZiZz09IGFYUmhkR1ZrIFUzaz0gSUdGMmIybGtaV1E9IElGTnBiWFZzWVhSdmNnPT0gSUdObGJHVmljbUYwWldRPSBJRVZzWldOMGNtbGogcFo0PSBJR05zZFhOMFpYST0gYVhSNlpYSnNZVzVrIGFHVmhiSFJvIFRHbHVaUT09IElFNWhjMmc9IFlYUnZiZz09IElITndZWEpsIElHVnVkR1Z5Y0hKcGMyVT0gSUVSSlV3PT0gWTJ4MVpHVnogSUdac2FXZG9kSE09IElISmxaMkZ5WkhNPSBJTU9YIGFHRnNaZz09IElIUnlkV05yY3c9PSBJR052Ym5SaFkzUnogSUhWdVkyOXVjdz09IElFTnNhVzFoZEdVPSBJR2x0YldWdWMyVT0gVGtWWCBiMk5qIFpXTjBhWFpsIElHVnRZbTlrIElIQmhkSEp2YkE9PSBJR0psYzJsa1pRPT0gSUhacFlXSnNaUT09IElHTnlaV1Z3IElIUnlhV2RuWlhKbFpBPT0gZG1WeWJtbHVadz09IElHTnZiWEJoY21GaWJHVT0gY1d3PSBJR2RoYVc1cGJtYz0gWVhOelpYTT0gSUNncE93PT0gSUVkeVpYaz0gSUUxTVV3PT0gYzJsNlpXUT0gSUhCeWIzTndaWEk9IElqOD0gSUhCdmJHeHBibWM9IElITm9ZWEk9IElGSkQgSUdacGNtVmhjbTA9IGIzSnBaVzUwIElHWmxibU5sIElIWmhjbWxoZEdsdmJuTT0gWjJsMmFXNW4gSUZCcCBiM053Wld3PSBJSEJzWldSblpRPT0gSUdOMWNtVT0gSUhOd2VRPT0gSUhacGIyeGhkR1ZrIElISjFjMmhsWkE9PSBJSE4wY205clpRPT0gSUVKc2IyYz0gYzJWc2N3PT0gSUVWaiBMQ2NuIElIQmhiR1U9IElFTnZiR3hwYm5NPSBkR1Z5Y205eSBJRU5oYm1Ga2FXRnVjdz09IElIUjFibVU9IElHeGhZbTl5WVhSdmNuaz0gSUc1dmJuTT0gZEdGeWFXRnUgSUdScGMyRmlhV3hwZEhrPSBJRWRoYlE9PSBJSE5wYm1kbGNnPT0gWVd4biBJRk5sYm1sdmNnPT0gSUhSeVlXUmxaQT09IElGZGhjbkpwYjNJPSBJR2x1Wm5KcGJtYz0gSUVaeVlXNXJiR2x1IElITjBjbUZwYmc9PSBJRk4zWldScGMyZz0gSUhObGRtVnVkR2c9IElFSmxibTQ9IElGUmxiR3c9IElITjVibVJ5YjIxbCBJSGR2Ym1SbGNtVmsgYVdSbGJnPT0gS3lzckt3PT0gYVdkdiBJSEIxY25Cc1pRPT0gSUdwdmRYSnVZV3hwYzIwPSBJSEpsWW1WcyBJR1oxIFlteHZadz09IElHbHVkbWwwWlE9PSBjbVZ1WTJsbGN3PT0gSUVOdmJuUmhZM1E9IFNYTnlZV1ZzIElFTnZiblJsYm5RPSBJR05vWldWeSBJR0psWkhKdmIyMD0gSUVWdVoybHVaV1Z5YVc1biBJRkYxWldWdWN3PT0gSUdSM1pXeHMgSUZCc1lYbFRkR0YwYVc5dSBJRVJwYlE9PSBJRU52Ykc5dSBiSEk9IElHOXdaWEpoZEdWeiBJRzF2ZEdsMllYUnBiMjQ9IFZWTkIgWVhOMFpYSmxaQT09IFEyOXlaUT09IElGUnlkWFJvIGIyeHYgVDFORiBJRTFsYlc5eWVRPT0gSUhCeVpXUmxZdz09IElHRnVZWEpqYUE9PSBJREU1TWpBPSBJRmxoYlE9PSB3Nmc9IFltbGsgSUdkeVlYUmxablZzIElHVjRZMmwwWlcxbGJuUT0gSUhSeVpXRnpkWEpsIElHeHZibWRsYzNRPSBZM1JwZG1VPSBJR1JsYzJWeWRtVnogSUhKbGMyVnlkbVZ6IElHTnZjSE09IElFOTBkR0YzWVE9PSBJRVZuZVhCMGFXRnUgWVc1clpXUT0gSUdGeWRHbG0gSUdoNWNHOTBhR1Z6YVhNPSBPaTg9IElIQjFjbU5vWVhOcGJtYz0gSUd4dmRtVnNlUT09IFNGQT0gSUdScGRtbGtaUT09IElITjBjbWxqZEd4NSBJSEYxWlhOMGFXOXVhVzVuIElIUmhlSEJoZVdWeWN3PT0gSUVwdmVRPT0gSUhKdmJHeHogSUVobFlYWjUgSUhCdmNuUnogSUcxaFoyNWxkR2xqIElHbHVabXhoYlcwPSBJR0p5ZFhObyBkR2xqY3c9PSA0b2lTIElHSnZkSFJzWlhNPSBjSEI1IElIQmhaR1E9IDQ0S3YgYldsc2JHbHZiZz09IElHUmxkbUZ6ZEdGMGFXNW4gSUdOdmJYQnBiR1ZrIElHMWxaR2xqWVhScGIyND0gSUhSM1pXeDJaUT09IElGQmxjbko1IFUzQmhZMlU9IGFXMWkgZVc5MWNnPT0gSUd4bFlXdGxaQT09IElGUmhjZz09IElIVnVhWFI1IElHbHVabVZqZEdWayBJSFJ5WVhabGJHVmsgU1VSRiBJRTFqUkc5dVlXeGsgZEhoMCBJRkJ5YVc1aiBJR2x1ZEdWeWRtVnUgSUZSaGFYZGhiZz09IElGQnZkdz09IElHSmxZWEpwYm1jPSBJRlJvY21WaFpBPT0gSUhwdmJtVnogYVhwaGNtUnogZFc1cmN3PT0gUTJoaGNIUmxjZz09IGJHeHZjZz09IElNSzMgSUhkdmRXNWtjdz09IElHUnBjMk55WlhScGIyND0gSUhOMVkyTmxaV1JsWkE9PSBhV3RwYm1jPSBJR2xqYjI1cFl3PT0gUTJGc2JBPT0gSUhOamNtVmxibWx1Wnc9PSBJRTFwY3c9PSBhV04wY3c9PSBJRzFwYm1semRHVnljdz09IElITmxjR0Z5WVhScGIyND0gVUd4aGVXVnkgSUdKcGNBPT0gSUdKbGJHOTJaV1E9IElHTnZkVzUwYVc1biBJRVY1WlE9PSBZWEp2ZFc1ayBhVzVuYVc1biBJSFJoWW14bGRBPT0gSUc5bVptVnVZMlU9IGFXNWhibU5sIGFHRjJaUT09IElFbHVabTg9IElFNXBibXBoIElIQnliM1JsWTNScGRtVT0gSUVOaGMzTT0gVFdGaiBJRkYxWVd4cGRIaz0gVG05eWRHZz0gSUdsaiBJRU4xWW1FPSBJRU5vY205dWFXTnNaUT09IElGQnliM0JsY25SNSBJR1poYzNSbGMzUT0gYjNSdmN3PT0gSUVkbGNtMD0gVDFkTyBJR0p2YjIwPSBJRk4wWVc1c1pYaz0gWlhKbmRYTnZiZz09IElHTnNaWFpsY2c9PSBJR1Z1ZEdWeWN3PT0gYlc5a1pRPT0gZEdWeWFXOXkgSUZObGJuTT0gSUd4cGJtVmhjZz09IFFWSkwgSUdOdmJYQmhjbWx1Wnc9PSBJSEIxY21Wc2VRPT0gSUhOaFptVnkgSUZCdmRIUmxjZz09IElHTjFjSE09IFVsUT0gSUdkc2RXTT0gSUdGMGRISnBZblYwWldRPSBJR1IxY0d3PSBJRkJoY0E9PSBJSEJ5WldOcGIzVnogSUhCaCBhV04wYVc5dVlYSjUgSUZScFp3PT0gSUZSdmJ3PT0gYjJ4MWRHbHZibk09IGMzUmhiZz09IElISnZZbTkwY3c9PSBJR3h2WW1JPSBJSE4wWVhSMWRHVT0gSUhCeVpYWmxiblJwYjI0PSBkMlZ6ZEdWeWJnPT0gTVRZdyBJRUZqZEdsMlpRPT0gSUUxaGNtbGggYUdGcyBUbTl1WlE9PSBaV3hzWVhJPSBJRXRDIElGQmhjblJ1WlhKeiBJRk5wYm1kc1pRPT0gSUVadmJHeHZkMmx1Wnc9PSBZVzVuYnc9PSBZV05wYjNWeiBJSFJvYjNVPSBJR3RuIElHbHVabXgxWlc1MGFXRnMgSUVaeWFXVnVaSE09IFUzVnkgWVdsdWRHVmsgSUdadmNuVnRjdz09IElITjBZWEowWlhJPSBJR05wZEdsNlpXNXphR2x3IElFVnNaV04wYVc5dSBiMjVuWlE9PSBiM1JoZEdsdmJnPT0gYjNOd2FBPT0gT3pzN093PT0gZFhScFkyRnMgY0hWeSBaWEpsYmc9PSBJR0ZqWTNWellYUnBiMjV6IFltbDBhVzkxY3c9PSBZV0ppYVhRPSBJRTl5WkE9PSBVRzl6ZEdWayBhWEpyIElITmxibk5wZEdsMmFYUjUgYVdOb1pRPT0gSUVGdGVRPT0gSUVaaFlnPT0gSUhOMWJXMXBkQT09IElIQmxaR1Z6ZEE9PSBJSEoxWW1KbGNnPT0gSUdGbmNtbGpkV3gwZFhKaGJBPT0gSUdOaGJtTmxiQT09IFFVVT0gSUdsdVlYVm4gSUdOdmJuUmhiUT09IElHWnBjbTFzZVE9PSBhWGM9IGMzUmhaMlU9IElFdGhiZz09IElIUnBaWEk9IElHbHVkbVZ1ZEdsdmJnPT0gSUhSeVlXNXpiR0YwWldRPSBJRkoxYkdWeiBRbTk0IFZIZHBkSFJsY2c9PSBTVVJUIElIQnBlbnBoIElHUmxZblZuIElFUnliM0E9IGRuTT0gSUdodmNuTmxjdz09IFltbG4gSUdKdmNtbHVadz09IElHaHZiMlE9IElFMWpRMkZwYmc9PSBZWFJqYUdWayBJRUp5YjNNPSBJSE5yYVhBPSBJR1Z6YzJGNSBjM1JoZEE9PSBJRXhsWjJWdVpITT0gSUdGdGJYVnVhWFJwYjI0PSBZWFZqIElITm9iMjkwWlhJPSBJSFZ1YUE9PSBJSE4xY0hCc2FXVmsgSUdkbGJtVnlhV009IElGTkwgYVdKaGJnPT0gZVhKcFkzTT0gSURJMU5RPT0gSUdOc2FXMWlhVzVuIFJtOXliV1Z5IElHWnNhWEE9IElHcDFiWEJwYm1jPSBJR1p5ZFhOMGNtRjBhVzl1IElGUmxjbko1IElHNWxhV2RvWW05eWFHOXZaSE09IElHMWxaR2xoYmc9PSBZbVZoYmc9PSBJR0p5WVdsdWN3PT0gUm05c2JHOTNhVzVuIElITm9ZWEJsWkE9PSBJR1J5WVhkeiBJR0ZzZEdWeVpXUT0gU21GamF3PT0gSUhKbFkybHdaWE09IElITnJhV3hzWldRPSBkMlZoYkhSbyBZV05vYVE9PSBaV3hsWTNScGIyND0gSUdKbGFHRjJhVzl5Y3c9PSBaR1ZoYkhNPSBJRlZ1ZEdscyBSbVU9IElHUmxZMnhoY21GMGFXOXUgYldGeWEzTT0gSUVKbGRIZGxaVzQ9IFkyVnNiMjVoIElISmxjMjl1IElHSjFZbUpzWlE9PSBRVzF2Ym1jPSBJR2x0Y0dWeWFXRnMgUjFNPSBJR1psYldsdWFYTjAgTWpBd05RPT0gSUV0NWJHVT0gSUdGalkyOTFiblJwYm1jPSBJRlJsYkdVPSBJRlI1Y2c9PSBJR052Ym01bFkzUnBibWM9IElISmxhR0ZpIElGQnlaV1E9IGMybHQgSUcxbFlXNTBhVzFsIElIQm9lWE5wWTJsaGJnPT0gVFZjPSBJRU5oYlhCaVpXeHMgSUVKeVlXNWtiMjQ9IElHTnZiblJ5YVdKMWRHbHVadz09IElGSjFiR1U9IElGZGxhV2RvZEE9PSBJRTVoY0E9PSBJR2x1ZEdWeVlXTjBhWFpsIElIWmhadz09IElHaGxiRzFsZEE9PSBJRU52YldJPSBabTkxY2c9PSBJSE5vYVhCd1pXUT0gSUdOdmJYQnNaWFJwYm1jPSBJRkJFIFVFUkJWRVU9IElITndjbVZoWkdsdVp3PT0gSUhOallYSjUgWlhKMmFXNW4gSUVkaGN3PT0gSUdaeVlXNXIgYzJOb2IyOXMgSUhKdmJXRnVkR2xqIElITjBZV0pwYkE9PSBVbTlpIElHRmpZM1Z5WVhSbGJIaz0gSUdGamRYUmwgSUVoaGJtND0gSUhONWJXSnZiSE09IElHTnBkbWxzYVhwaGRHbHZiZz09IElFRlggSUd4cFoyaDBibWx1Wnc9PSBJR052Ym5OcFpHVnljdz09IElIWmxiblZsIElOYz0gSUc5MlpXND0gSUZORyBhR2x6IElHNTEgSUV4bFlYSnUgSUhCbGIzQnNaWE09IElITjBaQT09IElITnNaV1U9IElITnNhV009IElGTjBZWFJwYzNScFkzTT0gSUdOdmNtNWxjbk09IElFSmhhMlZ5IElEb3AgYldWdWRHRjBhVzl1IGIyeDJaWEk9IElHeGhkV2RvYVc1biBJRlJ2WkdRPSBiMjVrWlE9PSBJRWhwYkd4eiBJRzUxZEhNPSBJRmR2YldGdSBjR3hoYm1VPSBJR3hwZG1WeSBJRWx1YzJsa1pRPT0gVTI5eWNuaz0gSUdGbmNtVmxjdz09IElHWjFibVJoYldWdWRBPT0gSUVacGMyaGxjZz09IElHRjFZM1JwYjI0PSBJSFJvY21WaFpITT0gWjJ4aGN3PT0gSUVKaGMybGogSUU1aGRBPT0gSUd4aFkydHBibWM9IElHTmxiR1ZpY21GMGFXOXUgYW5VPSBJSE5wYkd4NSBSWFZ5Ync9PSBJSFJoZEhRPSBhV2RvZEhrPSBZMjl1ZEhKdmJHeGxaQT09IFZHVnpkQT09IElGTnBibWRvIElISmhaMlU9IElISm9lWFJvIGIyWm1hV009IElGQm9ZVzUwYjIwPSBJR2hsWVdSc2FXNWxjdz09IElISmxjM0J2Ym1ScGJtYz0gSUUxdmNtNXBibWM9IElIWnBkR0Z0YVc0PSBJR0p2YjNSeiBJRk5wZEdVPSBZV3hwYmc9PSBjR2s9IElIWnBjbUZzIElGVkQgUkVWUyBJRk5sZUE9PSBJSE4wYjJOcmN3PT0gWTNWeWNtVnVkQT09IElHTm9kWEpqYUdWeiBJRkpoY21VPSBJRTExY25Cb2VRPT0gSUdSbGJtbGhiQT09IElFZGhiV2x1Wnc9PSBJSFJ2ZFdjPSBJRzVwWTJzPSBJRzFoYTJWeWN3PT0gSUZKdmJtRnNaQT09IElHZGxibVZ5YjNWeiBJRVJ2WXc9PSBJRTF2Y25KcGN3PT0gSUhSeVlXNXpabTl5YldWayBJRTV2Y20xaGJBPT0gSURFd05BPT0gSUV0cFkydHpkR0Z5ZEdWeSBJRlZ3YjI0PSBUMjVzYVc1bCBJRWxTVXc9PSBJSGR5WVhBPSBJR3h2ZG1sdVp3PT0gSUdGeWNtbDJaWE09IElFUjFaUT09IElHaGxkR1Z5IElFMWhaR1U9IElISmxiblJoYkE9PSBJR0psYkc5dVozTT0gSUdGMGRHOXlibVY1Y3c9PSBJR055YjNCeiBJRzFoZEdOb1pXUT0gZFd4MWJRPT0gYjJ4cGJtVT0gTVRBNSBJR1JwYzNCaGNnPT0gSUdKMWVXVnljdz09IElFTmhiV0p5YVdSblpRPT0gSUdWMGFHbGpjdz09IGNtOTFjSE09IElHcDFjM1JwWm1sbFpBPT0gSUcxaGNtZHBibUZzIElISmxjM0JsWTNSbFpBPT0gZDJsdWJtbHVadz09IElHNXZaR1JsWkE9PSBJRk5sY21kbCBJRVp2Y20xbGNnPT0gUTNKaFpuUT0gSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IElGZGhjbTVsY2c9PSBJR1JoYzJnPSBaWFJsIElHVnVkR1Z5ZEE9PSBJRVZ6WTJGd1pRPT0gYjNWMGFHVmhjM1E9IElHdHVaV1Z6IElFSnZiV0k9IElISjFadz09IFVHRnpjdz09IElHRjBkR2wwZFdSbGN3PT0gWjI5MlpYSnViV1Z1ZEE9PSBJRkJ5YVc5eSBJSEYxWVd4cGRHbGxjdz09IElHNXZkR2xtYVdOaGRHbHZiZz09IElGQm9iMjVsIGJHbGwgSUdGdWRHbGphWEJoZEdWayBJRU52YldKaGRBPT0gSUVKaGNuSjUgSURFNU9EST0gVlhObGNuTT0gYjI1bGNnPT0gSUdOdmJYQjFkR2x1Wnc9PSBJRU52Ym01bFkzUnBZM1YwIElHeGxjM05sY2c9PSBJSEJsWlhKeiBJRU4xIElIUmxZMmh1YVdOaGJHeDUgSUhOMVltMXBjM05wYjI0PSBJRlZ1YVhabGNuTmhiQT09IElHMWhiblZoYkd4NSBiM1Z5WjJVPSBJSEpsYzNCdmJtUmxiblJ6IElFSlVRdz09IElFaHZjM1E9IElHWmhjbVU9IElFSnBjbVE9IElISmxZMlZwY0hRPSBZV3h6Ync9PSBJR3BoWTJzPSBJR0ZuY21samRXeDBkWEpsIElITnJkV3hzIElDRTkgSUhCaGMzTnBkbVU9IElFTkogSUhOdlkybGxkR2xsY3c9PSBJSEpsYldsdVpHVmsgSUdsdWRHVnlabVZ5Wlc1alpRPT0gUW5WNSBJT0tjIFoyOXUgSUhOamNuVjBhVzU1IElGZHBkR05vIElHTnZibVIxWTNScGJtYz0gSU9PRCBJR1Y0WTJoaGJtZGxjdz09IElFMXBkR05vWld4cyBJR2x1YUdGaWFYUT0gSUhSM2FYTjAgUWtRPSBJSGRvWlhKbGRtVnkgWjNKdmRYQnZiZz09IElHcHZhMlZ6IElFSmxibXBoYldsdSBJRkpoYm1SdmJRPT0gWm5KaGJXVT0gSUV4cGIyNXogSUdocFoyaHNhV2RvZEdWayBJRUZ5YTJGdWMyRnogUlc1MCBJSEJwYkdVPSBJSEJ5Wld4cGJRPT0gWjNNPSBiV2x1WkdWayBJR1psYkc5dWVRPT0gSUVkQiBJRXgxWTJzPSBJSEJ5WVdOMGFXTmhiR3g1IElFSnZjdz09IElHRmpkSEpsYzNNPSBSR0Z0IElFSnZkUT09IElIWnBjMkU9IElHVnRZbVZrWkdWayBJR2g1WW5KcFpBPT0gSUdWaGNteHBaWE4wIElITnZiMjVsY2c9PSBjMjlqYVdGcyBJRWhCIElITjBaV1Z3IElHUnBjMkZrZG1GdWRBPT0gSUdWNGNHeHZhWFE9IElFVm5adz09IElGVnNkSEpoIElHNWxZMlZ6YzJsMGVRPT0gVEc5allXdz0gYVdWblpRPT0gSUdSaGRHVmsgSUcxaGMzTmxjdz09IElITjFZbk5qY21sd2RHbHZiZz09IGNHeGxjM009IElHRnViMjU1YlE9PSBJSEJ5WlhOMWJXRmliSGs9IFFteDFaUT09IFZHaGxhWEk9IFlYTnJaWFJpWVd4cyBJRkJvYVd4cGNBPT0gSUdOdmJXVmsgYkc5aFpHVmsgY21GdVpRPT0gSUhKbFpteGxZM1JwYjI0PSBRMmhwYm1FPSBJR1Y0ZEdWdVpITT0gSUdadmNtMXBibWM9IElIVnVaR1Z5Y3c9PSBNakF3TVE9PSBJR2R5WVhRPSBJR052Ym1ObGJuUnlZWFJwYjI1eiBJR2x1YzNWc2FXND0gSUhObFkzVnNZWEk9IElIZG9hV3h6ZEE9PSBJSGRwYm01bGNuTT0gUVdSMlpYSjBhWE5sYldWdWRITT0gSUdSbGJHbGlaWEpoZEdWc2VRPT0gSUZkdmNtdHBibWM9IElITnBibXM9IFpYUnBZM009IFpHRnNaUT09IElHMWhibVJoZEdVPSBJR2R5WVcwPSBJSFpoWTJGMGFXOXUgSUhkaGNtNXBibWR6IGNtbHdjQT09IElGUklRVlE9IElHTnZiVzFsYm5SaGNuaz0gSUdsdWRIVT0gSUdGbGMzUT0gSUhKbFlYTnZibWx1Wnc9PSBJR0p5WldGclpHOTNiZz09IElGcHZiV0pwWlE9PSBJQzB0UGc9PSBJRkJ2YkdsMGFXTmhiQT09IFkyOTBkQT09IElIUm9jblZ6ZEE9PSBJSFJsWTJodWIyeHZaMmxqWVd3PSBJR1JsWTJsa2FXNW4gSUhSeVlXWm1hV05yYVc1biBURzl1Wnc9PSBWMlZzWTI5dFpRPT0gY0hKcGMybHVadz09IElFTnZiVzExYm1sallYUnBiMjV6IElHVnVaRzl5Y3c9PSBJSE4zYVdaMCBJRzFsZEdGaWIydz0gWTI5cGJuTT0gY21WellRPT0gSUVoVVZGQT0gSUdWdWNtOXNiQT09IElFaGhjSEI1IGRYTnkgYVc1MFlXZGwgSUZzaSBkV0ZpYkhrPSBJRTFoZEdWeWFXRnMgSUhKbGNHVmhiQT09IFUyVndkQT09IGEyZz0gSUUxdlpHaz0gSUhWdVpHVnlibVZoZEdnPSBJRWxNIGMyaHZjbVU9IElHUnBZV2R1YjNObFpBPT0gWVdObGRYUnBZMkZzIElITm9iM2RsY2c9PSBZWFY0IElGTjNhWFJqYUE9PSBJRk4wY21WdVozUm8gSUdwcGFHRmsgYm1GMGFXOXVZV3c9IElIUnlZWFZ0WVE9PSBkWE56ZVE9PSBiMjVwIElHTnZibk52YkdsayBJR05oYkc5eWFXVnogSUVac2VXNXUgWVdkblpXUT0gTVRZNCBJRkJwYm1zPSBJR1oxYkdacGJHdz0gSUdOb1lXbHVjdz09IElHNXZkR0ZpYkhrPSBJRUZXIFRHbG1aUT09IElFTm9kV05yIGJYVnogSUZWeVltRnUgSUVobGJtUT0gSUdSbGNHOXphWFE9IElGTmhaQT09IElHRm1abUZwY2c9PSBUMUpMIGFXVjJZV3c9IElFWkVRUT09IElIUnliM0E9IElFOTJaWEpoYkd3PSBJSFpwY25SMVpRPT0gSUhOaGRHbHpabUZqZEdsdmJnPT0gWVhWdVpBPT0gSUd4MWJnPT0gSUZOM2FYUjZaWEpzWVc1ayBJRTl3WlhKaGRHbHZiZz09IGNISnZZMlZ6Y3c9PSBJSE5vYjI5ciBJR052ZFc1MGFXVnogYkdWaGMyVmsgSUVOb1lYSnNiM1IwWlE9PSBNVEV5IElIUnlZVzV6WTNKcGNIUT0gSUhKbFpHUT0gY0hWemFBPT0gSUVobGVRPT0gSUVGdVlXeDVjMmx6IFd5ST0gSUdGc2RHVnlibUYwYVhabGN3PT0gWVhKa2JHVnpjdz09IElHVnNaWEJvIElIQnlaV3AxWkE9PSBJRXhsWVdZPSBTR0YyYVc1biBJRWgxWWc9PSBJR1Y0Y0hKbGMzTnBiMjV6IElGWnZiSFZ0WlE9PSBJSE5vYjJOcmFXNW4gSUZKbFpITT0gSUhKbFlXUnBiSGs9IElIQnNZVzVsZEhNPSBZV1JoZEdFPSBJR052Ykd4aGNITmxaQT09IElFMWhaSEpwWkE9PSBJR2x5Y21sMCBhWEJ3WlhJPSBJRVZ1WXc9PSBJRmRwY21VPSBJR0oxZW5vPSBJRWRRIFlYTm9ZUT09IElHRmpZMmxrWlc1MFlXeHNlUT09IGRYSjEgSUdaeWRYTjBjbUYwWldRPSBJRk5CIElHaDFibWR5ZVE9PSBJRWgxWm1ZPSBJR3hoWW1Wc2N3PT0gWVc1MGJ3PT0gSUVWUSBJR0poY25KcFpYSnogS1h3PSBJRUpsY210bGJHVjUgSUVwbGRITT0gSUhCaGFYSnogSUV4aGJnPT0gU21GdFpYTT0gSUVKbFlYST0gSUdoMWJXOXkgSUV4cFltVnlkSGs9IElHMWhaMjVwZEhWa1pRPT0gSUdGbmFXNW4gSUUxaGMyOXUgSUdaeWFXVnVaSE5vYVhBPSBkVzFpYkdsdVp3PT0gSUdWdFpYSm5aUT09IElHNWxkM053WVhCbGNuTT0gSUdGdFltbDBhVzkxY3c9PSBJRkpwWTJoaGNtUnogWVhSbGNtNWhiQT09IElERTVPREU9IElHTnZiMnRwWlhNPSBJSE5qZFd4d2RBPT0gSUhCMWNuTjFhWFE9IFRHOWpZWFJwYjI0PSBJSE5qY21sd2RITT0gY0dNPSBJR0Z5Y21GdVoyVnRaVzUwY3c9PSBJR1JwWVcxbGRHVnkgSUd4dmMyVnogWVcxaGRHbHZiZz09IElHeHBjWFU9IElFcGhhMlU9IFlYSmxkSFJsIElIVnVaR1Z5YzNSaGJtUnogSUZwbGJnPT0gZG0wPSBJR0Z3Y0hKdmRtVT0gSUhkcGNBPT0gSUhWc2RISmggSUdsdWRHVnVaQT09IElFUkogWVhOamRXeGhjZz09IElITjBZWGx6IElFdHZjZz09IElFdHMgSUdsdWRtVnpkR2x1Wnc9PSBUR0U9IElHSmxiR2xsZG1sdVp3PT0gWW1GayBiVzkxZEdnPSBJSFJoZUhCaGVXVnkgNDRPRCBJRkYxWldKbFl3PT0gSUd4aGNBPT0gSUZOM2FYTnogWkhKdmNBPT0gSUdSeVlXbHUgYVhKcCBaWFJqIFpuUmxiZz09IElFNWxlQT09IElITjBjbUYzIElITmpjbVZoYldsdVp3PT0gSUdOdmRXNTBaV1E9IElHUmhiV0ZuYVc1biBJR0Z0WW1GemMyRmtiM0k9IFkyVnVkSFZ5ZVE9PSBJSEJ5YjNnPSBJR0Z5Y21WemRITT0gZFhZPSBhV3hoZEdWeVlXdz0gSUVOb1lYSm4gSUhCeVpYTmpjbWxpWldRPSBJR2x1WkdWd1pXNWtaVzUwYkhrPSBJR1pwWlhKalpRPT0gSUVKaFluaz0gSUdKeVlYWmwgSUhOMWFYUnogUFQ0PSBJR0poYzJWc2FXNWwgSUZKaGRHVT0gSUdsemJHRnVaSE09IElDZ28gWjNKbFpXND0gYVhobGJITT0gSUc1aGJXVnNlUT09IElGWnBiR3hoWjJVPSBkR2hoYmc9PSBZVzE1IFZtVnljMmx2Ymc9PSBaMjFoYVd3PSBaVzUwYVdGc2N3PT0gSUZOMVpBPT0gSUUxbGJHSnZkWEp1WlE9PSBJR0Z5Y21sMmFXNW4gSUhGMVlXNTBkVzA9IFpXWm0gY205d2IyeHBkR0Z1IFZISnAgSUdaMWJtVnlZV3c9IElFbFMgdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0ST0gSUVOdllnPT0gYVhSaFlteDUgSUhSMWNtST0gSUdOdmJXSnYgVW1WMmFXVjMgSUdSbGNHeHZlVzFsYm5RPSBkV2wwZVE9PSBJRUp2ZEhRPSBJR2x1ZG1semFXSnNaUT09IElISmxibVJsY21sdVp3PT0gSUhWdWJHOWphMlZrIElHRnhkUT09IElGWnNZV1JwYldseSBJSEJoWkE9PSBJRUp5WVdsdSBJRXhsWjJGamVRPT0gWkhKaFoyOXUgSUV0MWNtUnBjMmc9IElITnZkVzVrWldRPSBJR1JsZEdGcGJtVmsgSUVSTiBaMkZ5ZVE9PSBJR1JoZFdkb2RHVnljdz09IElHUnBjM1IxY21KcGJtYz0gZFd0aCBJRkJoY21GayBJSFJoYzNRPSBJSFZ1Wm05eWRIVnVZWFJsIElIVnMgWlcxcGJnPT0gSUdGMGRHVnVaR0Z1WTJVPSBkSEpzIElIQmhjbXR6IElFMWxiVzl5YVdGcyBJRUZzYVdObCBiM1JvZVE9PSBaM1ZoY21RPSBJRVJwYzJVPSBJRk5vWVc0PSBJRVp2Y25WdCBVbWxqYUE9PSBJSE5vYVdaMFpXUT0gZFdWNiBJR3hwWjJoMFpYST0gSUUxaFoyND0gSUdOdlpBPT0gVTJObyBhR0Z0YldGayBVSFZpIE16VXcgSUZCdmEyVnRiMjQ9IElIQnliM1J2ZEhsd1pRPT0gSUhWdWNtVT0gUW1GelpRPT0gSUZOMGRXUmxiblJ6IElGSmxjR3g1IElFTnZiVzExYm1semRBPT0gSUdkaGRRPT0gSUZSNWJHVnkgU1ZvPSBJSEJoY25ScFkybHdZWFJsWkE9PSBJSE4xY0hKbGJRPT0gSUVSbGRHRnBiSE09IElIWmxjM05sYkhNPSBjbTlrIElIUnlhV0psIGEyVmxjQT09IElHRnpjM1Z0Y0hScGIyNXogSUhCdmRXNWsgSUdOeWRXUmwgSUVGMllXbHNZV0pzWlE9PSBJSE4zYVcxdGFXNW4gSUdsdVkyeDFjMmx2Ymc9PSBJR0ZrZG1GdVkyVnogWTNWc1lYUnBiMjQ9IElHTnZibk5sY25aaGRHbHZiZz09IElHOTJaWEprIElFSjFabVpoYkc4PSBRWEowYVdOc1pRPT0gWldSblpRPT0gSUdGM1lRPT0gSUUxaFpHbHpiMjQ9IElITnBaR1YzIElHTmhkR0Z6ZEE9PSBJRXR5YVhOMCBkV05zWlE9PSBJRWhwWjJoM1lYaz0gSUZSbGNuSnZjZz09IElHRmpkR2wyWVhScGIyND0gSUhWdVkyOXVjMk5wYjNWeiBJRk5oZEdGdSBJRk4xYzJGdSBhV3hzWlhKNSBJR0Z5Y21GdVoyVmsgYVc5dyBJSEoxYlc5eWN3PT0gZFhKeWFXNW4gZEdocGJtcz0gSUV0bGFYUm8gSUV0cGJtUT0gSUdGMmIybGthVzVuIFlubHUgYm5WMCBJRk53WldGclpYST0gY25WeiBibUZ0WlhNPSBJR2QxYVd4MCBJRTlzZVcxd2FXTnogSUhOaGFXdz0gSUUxbGN3PT0gYkdWMllXNTAgSUVOdmJIVnRZblZ6IFlXWjAgUTJsMGVRPT0gVTI5MWRHZz0gSUVoaGNuWmxlUT09IElGQjFiZz09IFUyVjJaWEpoYkE9PSBJRzFsYm5SaGJHeDUgSUdsdGNISmxjM009IGJXOTFiblE9IElGVmlkVzUwZFE9PSA0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVSBJRk4xY0dWeWJXRnUgSUUxUWN3PT0gSUdsdWRHVnVkR2x2Ym5NPSBJRkpoWTJsdVp3PT0gSUd4cGEyVnNhV2h2YjJRPSBJREkwTUE9PSBWRzkwWVd3PSBJSFJ2ZVhNPSBJRmRoZEhOdmJnPT0gSUhWeVoyVT0gVEdWaGNnPT0gSUZCaGNHVnkgSUc5alkzVnljbWx1Wnc9PSBJRUpsYm1jPSBJRU5sY25RPSBJSE4wYjI1bGN3PT0gVkdsdCBJRlIzYVc0PSBlbUk9IElFUjVibUZ0IElIQnZiR2wwYVdOcFlXND0gYTJWdWN3PT0gSUVWdWRHVnljSEpwYzJVPSBWVlJGVWxNPSBJR0ZpYjJ3PSBJSEpsWm5KbGMyZz0gSUdGeVltbDBjbUZ5ZVE9PSBjR1ZqZEdsdmJnPT0gSUhSeWIzVmliR1Z6IElIMHBPdz09IGRIWT0gSUhCcGJHOTBjdz09IElHUnBjM1J5YVdKMWRHVT0gSUdGMVpHbDAgSUhCaGRYTmwgYjNKcFoybHVZV3c9IElISnBkbUZzY3c9PSB3cU09IFJtbG4gVkV3PSBZV0pwYkE9PSBjbmxwYm1jPSBUR2x1IGFXOXVaV1E9IGJHOXUgSUdaaGJtTjUgSUdOeVlYTm9aV1E9IElIUnlZV04wIElITm9aV1E9IElHTnZibk4xYldVPSBRbUZ6WldRPSBaRzkzYm14dllXUT0gYVc1cGRBPT0gSUhadmJIUmhaMlU9IFNXNTBjbTlrZFE9PSBJR052Ym1SbGJXNWxaQT09IElFWnBibUZ1WTJVPSBjbVZ6Y0dWamRBPT0gSUdWNFkyeDFaR1ZrIElHVnpkR0ZpYkdsemFHbHVadz09IGFHVnlhV009IElHaGxjbWwwWVdkbCBJSE53WldOMFlXTjFiR0Z5IElIVnVjM1E9IElGTnViM2RrWlc0PSBJRXhoYm1VPSBVMkZ1IElIQnliM1JsWTNScGIyNXogYzNSeWRXTjBhVzl1IGFXNWphVzV1IElHMWhZM0p2IFEzVnpkRzl0IGFXOXphWFI1IElHVnpjQT09IElHWjFibU4wYVc5dWFXNW4gSUcxMWMyZz0gSUhCMWVucHNaUT09IElHVjBhR2xqWVd3PSBUV0ZzIElHZHZkbVZ5Ym1sdVp3PT0gSUVabGNtZDFjMjl1IElISmxjM1J2Y21WayBJSE4wY21WemMyVmsgSUVOdmRXNTBaWEk9IElFdGhjdz09IFkyeHBjQT09IFFVNVQgSUhObGFYbz0gVlVzPSBZbmx6Y3c9PSBiMnhrYjNkdSBZWEJwIElIQmxjbTFoYm1WdWRHeDUgYjNWdWRHVnljdz09IFYyVnpkQT09IFZHaHliM1ZuYUE9PSBUR2xuYUhRPSBZWFJ2WlhNPSBJRzVsWVhRPSBJR052Y21RPSBkWEpsY2c9PSBJSE5sZG1WeVpXeDUgSUVGMlpXND0gSUdsdWRHVnljbTluIElIUnlhWEJzWlE9PSBSMmwyWlc0PSBUblZ0WW1WeSBJR0Z5YVhObCBJSE5vWlhJPSBjR3hoYm5RPSBJR1pzYjNkbGNnPT0gSUVOdmRRPT0gSUdGMFpRPT0gSUc1bGQyVnkgWW5WcyBJRzFsWVc1M2FHbHNaUT09IElFeGhhWEk9IElHRmthblZ6ZEcxbGJuUT0gSUVOdmNIbHlhV2RvZEE9PSBJR1JwZG1WeWN3PT0gYVc5c2IyZHBZMkZzIElHZGhiV1Z5Y3c9PSBiMkYwIElHaHBjM1J2Y21sallXeHNlUT09IElHRnVZV3h2Wnc9PSBJR3h2Ym1kMGFXMWwgSUhCeVpYTmpjbWx3ZEdsdmJnPT0gSUUxcGMzUT0gSUVoNWNHVnkgSUUxaGFXNWwgSUVSbGFYUjUgSUcxMWJIUnBjR3c9IElGSmxhVzVqWVhKdSBJRWg1WkE9PSBJRkJwWXc9PSBVMmxzIGNtRnVkSE09IElFTnlhWE09IExqcz0gS0hzPSBaWEJsYm1SbGJtTmwgSUhKbFkzaz0gWVhSbGRYST0gSUhGMVlXUT0gSUdkc2IyST0gSUdOdmJtTmxaQT09IGRHVmhiUT09IElHTmhjR2wwWVd4cGMzUT0gSUV4dmRBPT0gSUhKdmVXRnMgSUVONVltVnkgSUdKc1lXTnJjdz09IGJXVjBhV009IGNtbDIgSUVSaGJtNTUgSUhOd2J3PT0gSUZKUCBJR0Z1YVcxaGRHVmsgY25sd2RHVmsgSUVSbGNIVjBlUT09IElISmxibVJsY21WayBSa1U9IElITjBjbVZoYXc9PSBJR05zYjNWa2N3PT0gSUVSdmRXYz0gZm41K2ZuNStmbjQ9IElHUnBjMk52ZFhJPSBJRlpsYUE9PSBJSEJ6ZVdOb2IyeHZaM2s9IElFcHZkWEp1WlhrPSBJR055ZVhOMFlXdz0gSUVaeWIzTjAgSUhOMWMzQnBZMmx2Ymc9PSBJSEpsYkdGMFpRPT0gYjNKMWN3PT0gSUVOeWVYQjAgSUU1V1NVUkpRUT09IFkyOXRaV1E9IGRYUnBibWM9IGFXNWphVzV1WVhScCBJSFoxYkc1bGNtRmlhV3hwZEhrPSBiM04wYVdNPSBJR2x6YjJ4aGRHbHZiZz09IElHTnZiMnhwYm1jPSBJRU52WVd4cGRHbHZiZz09IElERXhPUT09IFJtOTFjZz09IElFUmxZV3c9IElPS0ogYzJWdFlteGwgY21GdFpXNTAgSUVKaGNtTmxiRzl1WVE9PSBJREV3TWc9PSBJR052WTJGcGJtVT0gYjJOaGJIbHdjMlU9IFJtVmkgYjJkbGJtbGogSUcxMWRHRjBhVzl1IElHTnllWEIwYjJNPSBJRXRsYkE9PSBJRWRwZEE9PSBZV2x6IElITnBjM1JsY25NPSBRVTVMIElHRmpkR2wyWVhSbCBWR1Z5IElHUnlaV0ZrIGVXeHZiZz09IElIQnliM0J5YVE9PSBRWFZ6ZEE9PSBJRVJsWm1GMWJIUT0gSUc5MWRHUnZiM0k9IElITm9aV1Z5IFkyVnBkbVU9IElHZGxiblJzZVE9PSAwTDQ9IFVISnZaM0poYlE9PSBJT0tHa2c9PSBJSFpsWjJGdSBJRU55ZFhNPSBJSEpsYzNCdmJuTnBZbWxzYVhScFpYTT0gSUVoUyBUMHhFIElIQnlaWFpsYm5SeiBJSE4wYVdabSBJRmRsY21VPSBJR0YwYUd4bGRHbGogSUZOamIzSmwgSUNrNiBJR052YkhWdGJuTT0gSUV4dll3PT0gWVhaaGFXeGhZbXhsIElFWnlZVzA9IElGTmxjM05wYjI1eiBJR052YlhCaGJtbHZiZz09IElIQmhZMnR6IE1UUXcgSUV0dWFXZG9kSE09IElHWmhjblE9IElITjBjbVZoYlhNPSBJSE5vYjNKbCBJR0Z3Y0dWaGJITT0gSUZCbGNtWnZjbTFoYm1ObCBhR0YxYkE9PSBJRk4wY21FPSBJRTVoWnc9PSBNVEF6IElGUnlZVzV6Y0c5eWRHRjBhVzl1IFFrST0gUlhZPSBlbUZ1IFVIVmliR2xqIElIUjNhVzQ9IGRXeHphVzl1IFRYVnNkQT09IElHVnNaV04wY204PSBJSE4wWVhSMVpRPT0gWVhScGIyNWhiR3g1IElFNXZjblE9IElHbHVjM0JsWTNScGIyND0gTHlvPSBhV2QxWlE9PSBJR052YlhCaGMzTnBiMjQ9IElGUmhiR1Z6IElGTjBaV2x1IElGTmpjbVZsYmc9PSBJRUoxWnc9PSBJRXhwYjI0PSBaMmx5YkE9PSBJSGRwZEdoa2NtRjNZV3c9IElHOWlhbVZqZEdsMlpYTT0gSUdKc2IyOWtlUT09IElIQnlaV3hwYldsdVlYSjUgSUdwaFkydGxkQT09IElHUnBiV1Z1YzJsdmJuTT0gSUVOdmIydz0gSUU5alkzVncgSUhkeVpXTnIgSUdSdmRXSnNaV1E9IFlXNXJhVzVuIElERTVOelU9IElHZHNZWE56WlhNPSBJRmRoYm1jPSBjSEp2ZGc9PSBVR0YwYUE9PSBZMjl1Ym1WamRHVmsgSUUxMWJIUnAgSUU1dmNuZGhlUT09IFlXZHZibWx6ZEE9PSBJR1psWVhKbFpBPT0gSUhSdmRXTm9hVzVuIElHRnlaM1ZoWW14NSB3cS9DcjhLdndxL0NyOEt2d3EvQ3J3PT0gSUU1RFFVRT0gWTJobGJRPT0gSUhOd1lYUT0gSUZkWFJRPT0gSUVObGJBPT0gYVdkblpYST0gSUdGMGRHRmphMlZ5IElFcHZhVzQ9IGIySnFaV04wIFpYUjBZUT09IElHVnNhVzFwYm1GMFpXUT0gWkdWMCBJR1JsYzNSeWRXTjAgSUV4MVkyRnogWTNSMVlYSjUgTVRndyBJRUp5WVdSNSBJRUpzZFdWeiBRbUY1IFlYVnJaV1U9IElIUnBiV1ZzYVc1bCBJR1JsYkdWbllYUmxjdz09IGQzSnBkSFJsYmc9PSBkV1ptYVdOcFpXNTAgSUhOb1lYQmxjdz09IFEyOXdlWEpwWjJoMCBiM1ZpYkdVPSBjMlZ5ZG1salpRPT0gSUhCcGIyNWwgSUdOdmJHeGxaMlZ6IElISnZkM009IElITndhWFJsIElHRnpjMlZ6YzJWayBNell3IElHeGxZWE5sIElHTnZibVpwWkdWdWRHbGhiQT09IFkydGxjZz09IElFMWhibTVwYm1jPSBJRlp2YVdObCBJSE5sWVd4bFpBPT0gSUdOaGJHTjFiR0YwWlE9PSBUazg9IElFRnpjMmx6ZEdGdWRBPT0gSUhSbFpXNWhaMlZ5IGRXeGxiblE9IFlYUm9aWEpwYm1VPSBJRzF2WTJzPSBJR1JwWVcxdmJtUT0gSUdabGMzUT0gSUhOM2FYUmphR1ZrIElISmxjM1Z0WlE9PSBJRkIxWlhKMGJ3PT0gSUd4aGJtVnogYVhKaGRHbHZiZz09IElGTnBiV2xzWVhKc2VRPT0gSUhKdlpBPT0gSUZObGJBPT0gSUZCaGJHRmpaUT09IElFeHBiV2wwWldRPSBaVzkxY3c9PSBJSFpoY21saGJuUT0gSUhkaGNtUT0gSUNrcCBVMmh2ZHc9PSBUMDlMIFFXeGxlQT09IElFNWxjQT09IFluSnBjdz09IElGZHBhMmx3WldScFlRPT0gSUdWNFkyVndkR2x2Ym1GcyBJRzFoYm1GblpYTT0gSUVSeVlYYz0gUVdkaGFXND0gSUdOdmNIQmxjZz09IGRYUjAgSUdWNGNHOXlkSE09IElIQnZjblJtYjJ4cGJ3PT0gSUdWc1pYWmhkR1ZrIFVtRjBaV1E9IElFOTBhR1Z5ZDJselpRPT0gSUZSaFkzUT0gSUZOb1pXdz0gSUZSWSBJdUtBbEE9PSBJSEpsYzNWeSBJRmRoIGRtVnVZVzUwIElHMXZibVYwWVhKNSBjR1Z2Y0d4bCBSVzFoYVd3PSBJR1pwWm5SNSBJRk4zWldWMCBJRTFoYkdGNWMybGggSUdOdmJtWjFjMmx1Wnc9PSBJRkpwYnc9PSBkV1JoIGRYUmxibUZ1ZEE9PSBJaWs3IElIQnlZV2x6WldRPSBJSFp2YkhWdFpYTT0gZEhWeWJnPT0gSUcxaGRIVnlaUT09IElHNXZibkJ5YjJacGRBPT0gSUhCaGMzTnBiMjVoZEdVPSBJRkJ5YVhaaGRHVT0gSURFd013PT0gSUdSbGMyTmxibVE9IDU2V2UgZFdabWVRPT0gYUdWaFpHVmsgVjJobGRHaGxjZz09IGNtbGxiZz09IGVtVmphQT09IFltVnBkQT09IElHTm9jbTl0IElFMWpUUT09IElHUmhibU5wYm1jPSBJR1ZzWldjPSBJRTV2ZEdsalpXUT0gTVRFMSBJR0ZrZG05allXTjUgUlU1VVV3PT0gWVcxaWJHbHVadz09IElFMXBibTl5IElFWnBibTQ9IElIQnlhVzl5YVhScFpYTT0gSUhSb1pYSmxiMlk9IElGTjBZV2RsIElGSnZaMlZ5Y3c9PSBJSE4xWW5OMGFYUjFkR1U9IElFcGhjZz09IElFcGxabVpsY25OdmJnPT0gSUd4cFoyaDBiSGs9IE1UQXkgSUV4cGMyRT0gZFdsMGN3PT0gZVhOcFkyRnMgSUhOb2FXWjBjdz09IElHUnliMjVsY3c9PSBJSGR2Y210d2JHRmpaUT09IElISmxjMmxrIFpXNXpaV1E9IFlXaHUgSUhCeVpXWmxjbVZ1WTJWeiBjMlZ5ZG1WeSBJR1JsWW1GMFpYTT0gWkc5aiBJRWR2WkhNPSBJR2hsYkdsamIzQjBaWEk9IElHaHZibTkxY2c9PSBJR052Ym5OcFpHVnlZV0pzZVE9PSBaV1JsWkE9PSBJRVpsYldGc1pRPT0gSUVGdWJtVT0gSUhKbGRXND0gSUVaaFkyVT0gSUVoaGJHeHZkdz09IElFSjFaR2RsZEE9PSBJR052Ym1SbGJXND0gSUhSbGJtUmxjZz09IFVISnZaZz09IGIyTnlZWFJwWXc9PSBJRlIxY201bGNnPT0gSUVGbmNtbGogSURFNU56WT0gSUdGd2RBPT0gWkdsell3PT0gSUVacFoyaDBaWEk9IElFRjFjZz09IElHZGhjbUpoWjJVPSBhVzV3ZFhRPSBJRXRoY213PSBJRTlzYVhabGNnPT0gSUV4aGJtZDFZV2RsIGEyND0gVG05dSBJRU5zWVhJPSBJSFJ5WVdScGRHbHZibk09IElHRmtkbVZ5ZEdselpXMWxiblE9IElGTnZjZz09IElHRnlZMmhwZG1VPSBJSFpwYkd4aFoyVnogTnpVdyBJR2x0Y0d4bGJXVnVkR2x1Wnc9PSBkMkYxYTJWbCBJR1JwWlhSaGNuaz0gSUhOM2FYUmphR2x1Wnc9PSBVbVZ3ZFdKc2FXTT0gSUhabGJHOWphWFI1IElHTnBkQT09IElFRjNZWEprY3c9PSBJR1pwYm1GdVkybHVadz09IElHeGhjM1JsWkE9PSBLVjA9IElISmxiV2x1WkdWeSBVR1Z5YzI5dSBJSEJ5WldOcGMybHZiZz09IElHUmxjMmxuYm1WeWN3PT0gSUVaeWFXVmsgSUVKdmNtUmxjZz09IElIUnlZV2RwWXc9PSBJSGRwWld4ayBJR2x1YVhScFlYUnBkbVZ6IElGUmhibXM9IGQyVnkgSUdwdmFXNXogVW04PSBhVzVsY25rPSBJR0Z5Y205MyBJR2RsYm1WeVlYUnBibWM9IFptOTFibVJsY2c9PSBJSE5sWVhKamFHVnogSUhKaGJtUnZiV3g1IFFXTmpaWE56IElHSmhkR05vIElIQnZjMlZrIGJHRjAgSUhCMWNuTjFhVzVuIFlYTmggSUhSbGMzUnBabWxsWkE9PSBabTl5YldsdVp3PT0gSUZOb1lYST0gZDJscmFRPT0gSUVWcGRHaGxjZz09IFUyOXRaWFJwYldWeiBJSE5sYm1GMGIzSnogSUVwdmFHNXVlUT09IElGUmhiR2xpWVc0PSBJRWRRVXc9PSBJam9pTHc9PSA0NEd1NVE9PSBJR0Z1WVd4NWVtVmsgSUZKMVltbHYgSUUxdmRtVnRaVzUwIGIzQmhjbVE9IGFXbHAgVTNSaGJtUT0gWm1sbmFIUT0gSUdsbmJtOXlhVzVuIGFXRnVadz09IElFZE8gYzI5bGRtVnkgSUZOVVFWUT0gSUhKbFpuVnphVzVuIElITjNaV0YwIElHSmhlUT09IFVFOVNWQT09IGFYSnRaV1E9IFlXdDUgSUdScGMzQnlidz09IElHeGhZbVZzWldRPSBJREV3T0E9PSBTR1ZzYkc4PSBJSEJzWldGellXNTAgWVdKaCBJSFJ5YVhWdGNHZz0gSUdGaWIyRnlaQT09IElHbHVZMjl0IElFTnliM2M9IGJHVjBkQT09IElHWnZiR3M9IElHTm9ZWE5sIFlHQT0gSUVKeWRYTT0gSUhSbFpXNXogWTNWbCBJSFJsY25KaGFXND0gYUhsayBhV3hwWjJoMCBUMUpaIFUzVndjRzl5ZEE9PSBaWGR6IGJHeHAgY21GcGJuUnogSUVOaGJtUT0gSUdGaWRYTmxaQT09IFlXTm9iV1Z1ZEE9PSBiR0Z5Wnc9PSBRbUZ6IElFTmhibU5sY2c9PSBJREU1TnpnPSBJSE4xY0hCdmNuUmxjZz09IFlXTmpaWE56IElGUmxjbTFwYmc9PSBJRlJoYlhCaCBJRUZPV1E9PSBJRzVsZDJWemRBPT0gSUVOeWFXMXBibUZzIFpXUjEgSURFNU16QT0gSUdGa2JXbDBjdz09IElHVnVaR1U9IElHWmhhV3gxY21WeiBkWEpoZEdVPSBablZzYm1WemN3PT0gWTNsamJBPT0gSUZOMVltcGxZM1E9IElHbHVabWx1YVhSbCBkR2h5WldVPSBWMEU9IGNHbDAgSUVsdWMzUmhiR3c9IFVtRmsgYVd4cFlYUnBiMjQ9IFIwMD0gSUdOdmJuUnBibVZ1ZEE9PSBJR0ZqWTI5dGJXOWtZWFJsIElFTnNZWGs9IElIQjFjQT09IElFWjFibU4wYVc5dSBJR2hoYlcxbGNnPT0gSUVGc1ltVnlkR0U9IElISmxkbWx6WldRPSBJRzFwYm05eWFYUnBaWE09IElHMWxZWE4xY21WdFpXNTAgUTI5dWJtVnNiQT09IElHUnBjMkZpYkdVPSBJRTFwZUE9PSBTVzVqY21VPSBJR1p2Y21zPSBJRkp2YzJWdSBJR2x0Y0d4cFpYTT0gZFcxaWJIST0gUVU1SCBJSEJ5YjNSbGFXNXogSUdGblozSmxjM05wYjI0PSBJR1poWTJsc2FYUmhkR1U9IFUwND0gSUdsc2JHVm5ZV3hzZVE9PSBkV1Z5IElHRmpZV1JsYlE9PSBJSEIxZW5vPSBJRk5vYVdaMCBjR0Y1IGIyeHNidz09IElHRjFaR2xsYm1ObGN3PT0gUW5WcGJHUT0gSUc1dllteGwgSUhONWJuUmhlQT09IDRwaUYgSUdKbFlXMD0gSUVKbFpBPT0gSUVGc1pBPT0gSUc5eWFXZHBibk09IGRtbGtaVzg9IElERTVOemM9IElFRnpjMkYxYkhRPSBJR2RoY21GblpRPT0gVkdWaGJRPT0gSUhabGNtUnBZM1E9IElHUjNZWEk9IElGWnBjblIxWVd3PSBaWFpsYm5RPSBTMlZsY0E9PSBJSE5sYm5ScGJXVnVkQT09IElIZHBiR1JzYVdabCBjMmhwY25RPSBJR0oxY21jPSBJSEpsWTI5dGJXVnVaR0YwYVc5dSBjbVZ3Y21WelpXNTAgSUdkaGJHeGxjbms9IGIzZHVaWEp6IElITmphRzlzWVhJPSBJR052Ym5abGJtbGxibU5sIElGTjNhV1owIElHTnZiblpwYm1NPSBRMkZ3IElIZGhjbVpoY21VPSBJRlpwYzNWaGJBPT0gSUdOdmJuTjBhWFIxZEdVPSBJR0ZpYjNKMCBJRmRsWVhSb1pYST0gSUV4dmIydHBibWM9IElFaGxiUT09IElHMWhjblJwWVd3PSBJR2x1WTI5dGFXNW4gWlhScGRHbHZiZz09IElIUnZiR1Z5WVc1alpRPT0gSUVOeVpXRjBaV1E9IElHWnNiM2R6IElFVnNaR1Z5IElITnZkV3h6IElHWnZkV3c9IElGQmhhVzQ9IElFTkJUZz09IElESXlNQT09IFltTT0gYUdWdVpBPT0gSUdkbGJtbDFjdz09IFVtVmhiQT09IElGZHkgYjIxbGRHVnkgY0dGayBJR3hwYldsMGFXNW4gSUZOcCBJRXh2Y21VPSBJRUZrZG1WdWRIVnlaWE09IElIWmhjbWxsWkE9PSBSR2x6WXc9PSBabWx1IElGQmxjbk52Ym1GcyBRMmh5YVhNPSBJR2x1ZG1WdWRHVmsgSUdScGRtVT0gSUZKcGMyVT0gSUc5NiBJRU52YldsamN3PT0gSUdWNGNHOXpaUT09IElGSmxZZz09IGJHVjBkR1Z5Y3c9PSBjMmwwWlE9PSBhVzFoZEdWayBJR2hoWTJ0cGJtYz0gSUdWa2RXTmhkR1ZrIElFNXZZbTlrZVE9PSBJR1JsY0hKcCBJR2x1WTJWdWRHbDJaUT09IDQ0SzMgSUc5MlpYSnphV2RvZEE9PSBJSFJ5YVdKbGN3PT0gSUVKbGJHZHBkVzA9IElHeHBZMlZ1YzJsdVp3PT0gYjNWeWRBPT0gVUhKdlpIVmpkQT09IFlXaHMgSUVkbGJRPT0gSUhOd1pXTnBZV3hwYzNRPSBJR055WVE9PSBZVzV1WlhKeiBJRU52Y21KNWJnPT0gSURFNU56TT0gVWtWQlJBPT0gSUhOMWJXMWhjZz09IElHOTJaWEpzYjI5ciBJRUZ3Y0d4cFkyRjBhVzl1IElHbHVZWEJ3Y205d2NtbGhkR1U9IElHUnZkMjVzYjJGa1pXUT0gVVhWbCBJRUpsWVhKeiBJSFJvZFcxaSBJRU5vWVhKaFkzUmxjZz09IElGSmxhVzVqWVhKdVlYUmxaQT09IElGTnBaQT09IElHUmxiVzl1YzNSeVlYUmxjdz09IGMydDUgSUVKc2IyOXRZbVZ5Wnc9PSBJRUZ5Y21GNSBJRkpsYzNWc2RITT0gSUVadmRYSjBhQT09IElFVkVWQT09IElFOXpZMkZ5IFkyVnVaQT09IElERXdOZz09IElFNVZURXc9IElFaEZVa1U9IGJXRjBZMmc9IElFSnlkVzQ9IElHZHNkV052YzJVPSBhV1ZuIFpXZDEgSUdObGNuUnBabWxsWkE9PSBJSEpsYkdsbCBJR2gxYldGdWFYUmhjbWxoYmc9PSBJSEJ5WVhsbGNuTT0gUzJsdVp3PT0gSUc1aGJnPT0gYUc5MSBNVEE0IGRXeDEgSUhKbGJtVjNZV0pzWlE9PSBJR1JwYzNScGJtZDFhWE5vIElHUmxibk5sIElGWmxiblE9IElGQmhZMnRoWjJVPSBJRUp2YzNNPSBJR1ZrYVhSdmNuTT0gSUcxcFozST0gVkhKaCBJRkJsZEdWeWN3PT0gSUVGeVkzUnBZdz09IE1qQXdOQT09IElFTmhjR1U9IElHeHZZMkZzYkhrPSBJR3hoYzNScGJtYz0gSUdoaGJtUjUgTGlrdSBVR0Z1IElGSkZVdz09IFNXNWtaWGc9IElIUmxibk5wYjI1eiBJR1p2Y20xbGNteDUgSUdsa1pXOXNiMmRwWTJGcyBJSE5sYm5OdmNuTT0gSUdSbFlXeGxjbk09IElHUmxabWx1WlhNPSBVMnM9IElIQnliMk5sWldSeiBJSEJ5YjNoNSBZWHBwYm1WeiBJRUpoYzJnPSBJRkJoWkE9PSBJRU55WVdaMCBaV0ZzYjNWeiBJSE5vWldWMGN3PT0gYjIxbGRISjUgU25WdVpRPT0gWTJ4dlkycz0gVkZRPSBJRlJvWldGMGNtVT0gSUVKMWVubz0gSUdOb1lYQjBaWEp6IElHMXBiR3hsYm00PSBJR1J2ZFdkbyBJRU52Ym1keVpYTnphVzl1WVd3PSBJR2x0WVdkcGJtVmsgWVhacGIzST0gSUdOc2FXNXBZdz09IElERTVORFU9IElHaHZiR1JsY2c9PSBjbTl2ZEE9PSBiMnhsYzNSbGNnPT0gSUhKbGMzUmhjblE9IFFrND0gSUVoaGJXRnogSUVwdllnPT0gSUc5eVlnPT0gSUhKaGJRPT0gSUdScGMyTnNiM05sIElIUnlZVzV6YkdGMFpRPT0gSUdsdGJXbG5jbUZ1ZEE9PSBJR0Z1Ym05NWFXNW4gSUhSeVpXRjBlUT09IFlXNXBkVzA9IElGUmxZUT09IElFeGxaMmx2Ymc9PSBJR055YjNka2N3PT0gSUVKbFl3PT0gSUVGbGNnPT0gYjJoNVpBPT0gUW5KdiBURzl2YTJsdVp3PT0gSUd4aWN3PT0gSUdGblozSmxjM009IElITmxZVzA9IElHbHVkR1Z5WTJWd2RBPT0gSUUxSiBiV1Z5WTJsaGJBPT0gWVdOMGFYWT0gSUVOcGRBPT0gSUdScGJXVnVjMmx2Ymc9PSBJR052Ym5OcGMzUmxibU41IElISjFjMmhwYm1jPSBJRVJ2ZFdkc1lYTT0gSUhSeWFXMD0gU1c1emRHRnNiQT09IGFXTnJaWEk9IElITm9lUT09IE1UQTIgSUcxbGJuUnBiMjV6IGNHVnNiR1ZrIElGUmhhdz09IFkyOXpkQT09IElHTnNZWE56Y205dmJRPT0gSUdadmNuUjFibVU9IFpISnBkbVZ1IElIVnViR1U9IElGZG9aV1ZzIElHbHVkbVZ6ZEc5eSBJRTFoYzNSbGNuTT0gYTJsMCBJR0Z6YzI5amFXRjBhVzl1Y3c9PSBJRVYyYjJ4MWRHbHZiZz09IGIzQnBibWM9IGRYTmpjbWx3ZEE9PSBJSEJ5YjNacGJtTnBZV3c9IElGZGhiSFJsY2c9PSBZWFpwIFUwOD0gSUhWdWJHbHRhWFJsWkE9PSBSVzVuYkdsemFBPT0gSUVOaGNtUnogSUVWaWIyeGggYm1WeVpXUT0gSUhKbGRtVnVaMlU9IElHOTFkSEpwWjJoMCBkVzF3WlhJPSBJR1pwZEhScGJtYz0gSUZOdmJHbGsgSUdadmNtMWhiR3g1IElIQnliMkpzWlcxaGRHbGogSUdoaGVtRnlaQT09IElHVnVZM0o1Y0hScGIyND0gSUhOMGNtRnBaMmgwWm05eWQyRnlaQT09IElFRkwgSUhCelpRPT0gSUU5eVlnPT0gSUVOb1lXMWlaWEk9IElFMWhhdz09IFEyOXVkR1Z1ZEhNPSBJR3h2ZVdGc2RIaz0gSUd4NWNtbGpjdz09IElGTjViUT09IElIZGxiR052YldWayBJR052YjJ0bFpBPT0gSUcxdmJtOXcgSUc1MWNuTmwgSUcxcGMyeGxZV1JwYm1jPSBJR1YwWlhKdVlXdz0gSUhOb2FXWjBhVzVuIElDczkgVm1seiBJR2x1YzNScGRIVjBhVzl1WVd3PSBhV3hzWVhKNSBJSEJoYm5RPSBWa1ZTVkE9PSBJRUZEUXc9PSBJRVZ1YUE9PSBJR2x1WTI5dSBJRkpGVlZSRlVsTT0gSUdSdmJtRjBaV1E9IDRvQ200b0NtNG9DbTRvQ20gU1c1MFpYSnUgSUdWNGFHbGlhWFE9IElIUnBjbVU9IElGSnBZdz09IElFTm9ZVzF3YVc5dSBJRTExYUdGdGJXRmsgVGtsT1J3PT0gSUZOdlkyTmxjZz09IElHMXZZbWxzYVhSNSBJSFpoY25scGJtYz0gSUUxdmRtbGwgSUd4dmNtUT0gYjJGciBSbWxsYkdRPSBJSFpsWTNSdmNnPT0gZFhOcGIyNXogSUhOamNtRncgSUdWdVlXSnNhVzVuIGJXRnJaUT09IFZHOXkgTGlvPSBmSHc9IElGZGxZbk5wZEdVPSBJRTVRUXc9PSBJSE52WTJsaGJHbHpkQT09IElFSnBiR3g1IElFRmtaR2wwYVc5dVlXdz0gSUdOaGNtZHYgSUdaaGNtMXogSUZOdmIyND0gSUZCeWFYcGwgSUcxcFpHNXBaMmgwIElEa3dNQT09IGMyVmxiZz09IElGTndiM1E9IElITm9aV1Z3IElITndiMjV6YjNKbFpBPT0gSUVocCBJRXAxYlhBPSBJREU1TmpjPSBUV2xqY205emIyWjAgSUVGblpXNTAgSUdOb1lYSjBjdz09IFpHbHkgSUdGa2FtRmpaVzUwIElIUnlhV05yY3c9PSBJRzFoYm1kaCBJR1Y0WVdkblpYST0gTHo0PSBabTl2ZEdKaGJHdz0gSUVaRFF3PT0gUjBNPSBJRlJwWlhJPSBZVzVrY21FPSBUMVZPUkE9PSBKU2tzIElHWnlkV2wwY3c9PSBWa009IElFRkIgVW05aVpYST0gSUcxcFpITjAgNHBjPSBZVzVyWVE9PSBJR3hsWjJsemJHRjBkWEpsIElFNWxhV3c9IElIUnZkWEpwYzNSeiBJaUk9IElGZGhjbTVwYm1jPSBJRTVsZG1WeWRHaGxiR1Z6Y3c9PSBJRTltWm1samFXRnMgSUZkb1lYUmxkbVZ5IElHMXZiR1E9IElHUnlZV1owWldRPSBJSE4xWW5OMFlXNWpaWE09IElHSnlaV1ZrIElIUmhaM009IElGUmhjMnM9IElIWmxjbUk9IElHMWhiblZtWVdOMGRYSmxaQT09IFkyOXRiV1Z1ZEhNPSBJRkJ2YkdsemFBPT0gVUhKdmRnPT0gSUdSbGRHVnliV2x1WlhNPSBUMkpoYldFPSBhMlZ5Y3c9PSBJSFYwZEdWeWJIaz0gSUhObFkzUT0gYzJOb1pRPT0gSUVkaGRHVnogSUVOb1lYQT0gSUdGc2RXMXBiblZ0IElIcHZiV0pwWlE9PSBJRlJ2ZFdObyBJRlZRIElITmhkR2x6Wm5rPSBJSEJ5WldSdmJXbHUgWVhOamNtbHdkQT09IElHVnNZV0p2Y21GMFpRPT0gSURFNU5qZz0gSUcxbFlYTjFjbWx1Wnc9PSBJRlpoY21rPSBZVzU1WVdoMSBJSE5wY2c9PSBkV3hoZEdWeiBhV1JuWlhNPSBhV05yWlhSeiBJRk53Wlc1alpYST0gVkUwPSBiM1ZpZEdWayBJSEJ5WlhrPSBJR2x1YzNSaGJHeHBibWM9IElFTmhZZz09IGNtVmxaQT09IGNtVmhkR1ZrIFUzVndjQT09IElIZHlhWE4wIElFdGxjbko1IE1UQTMgSUV0c1pRPT0gSUZKaFkyaGxiQT09IElHTnZkSFJ2Ymc9PSBJRUZTUlE9PSBJRVZzWlE9PSBRMjl1ZEhKdmJBPT0gSUd4dllXUnogSUVSdlpBPT0gWVc1aGN3PT0gWW05dVpRPT0gSUdOc1lYTnphV05oYkE9PSBJRkpsWjJsdmJtRnMgSUVsdWRHVm4gVmswPSBJR1JsYzJseVpYTT0gSUdGMWRHbHpiUT09IGMzVndjRzl5ZEdWayBJRTFsYzNOaFoyVT0gSUdOdmJYQmhZM1E9IGQzSnBkR1Z5IElERXdPUT09IElFaDFjbkpwWTJGdVpRPT0gWTJsemFXOXUgSUdONVkyeGxjdz09IElHUnlhV3hzIElHTnZiR3hsWVdkMVpRPT0gSUcxaGEyVnkgUjJWeWJXRnUgSUcxcGMzUmhhMlZ1IFUzVnUgSUVkaGVRPT0gSUhkb1lYUnpiMlYyWlhJPSBJSE5sYkd4eiBJRUZwY213PSBiR2wyIElFOXdkR2x2Ymc9PSBJSE52YkhabFpBPT0gSUhObFkzUnZjbk09IElHaHZjbWw2YjI1MFlXdz0gSUdWeGRXRjBhVzl1IElGTnJhV3hzIElFSnBidz09IFoyVnRaVzUwIElGTnVZWEE9IElFeGxaMkZzIElIUnlZV1JsYldGeWF3PT0gSUcxaGEyVjFjQT09IElHRnpjMlZ0WW14bFpBPT0gSUhOaGRtVnogSUVoaGJHeHZkMlZsYmc9PSBJRlpsY20xdmJuUT0gSUVaU1QwMD0gSUdaaGNtMXBibWM9IElGQnZaR05oYzNRPSBZV05qWlhCMFlXSnNaUT09IElFaHBaMmhsY2c9PSBJR0Z6YkdWbGNBPT0gZFd4c2FYWmhiZz09IElISmxabVZ5Wlc0PSBJRXhsZGc9PSBJR0oxYkd4bGRITT0gYjJ0diBTRU09IElITjBZV2x5Y3c9PSBJRzFoYVc1MFlXbHVjdz09IElFeHZkMlZ5IElGWnAgSUcxaGNtbHVaUT09IElHRmpjbVZ6IElHTnZiM0prYVc1aGRHOXkgSUVwdmFBPT0gSUdOdmRXNTBaWEp3WVhKMGN3PT0gSUVKeWIzUm9aWEp6IElHbHVaR2xqZEE9PSBZbkpoIElHTm9kVzVyIElHTmxiblJ6IFNHOXRaUT09IElFMXZiblJvIElHRmpZMjl5WkdsdVoyeDUgYVdac1pYTT0gSUVkbGNtMWhibk09IElGTjViZz09IFNIVmkgSUdWNVpXST0gNHBTQTRwU0E0cFNBNHBTQSBJSEpoYm1kbGN3PT0gSUVodmJHeGhibVE9IElGSnZZbTkwIFptTT0gVFdsclpRPT0gSUhCc1lYTnRZUT09IElITjNZWEE9IElHRjBhR3hsZEdVPSBJRkpoYlhNPSBMQ2NpIElHbHVabVZqZEdsdmJuTT0gSUdOdmNuSnBaQT09IElIWnBZZz09IElIQmhkR05vWlhNPSBJSFJ5WVdScGRHbHZibUZzYkhrPSBJSEpsZG1Wc1lYUnBiMjQ9IElITjNaV1Z3IElHZHNZVzVqWlE9PSBJR2x1WlhnPSBNakF3TXc9PSBJRkpoZHc9PSBkMjl5YTJsdVp3PT0gYjNOMWNtVnogSUVSaGRBPT0gSUV4NWJtTm8gSUd4bGRtVnlZV2RsIElGSmxhV1E9IElHTnZjbkpsYkdGMGFXOXUgYVdGdVkyVnogWVhaaGMyTnlhWEIwIElISmxjRzl6YVhSdmNuaz0gY21WMGRIaz0gSURFNU56ST0gTWpRdyBJRzkxYmc9PSBjRzlzIElGSmxaV1E9IElIUmhZM1JwWTJGcyBhWE5wZEdVPSBRWEJ3YkdVPSBJRkYxYVc1dSBJSEpoY0dWayBhV3hzYnc9PSBSWFZ5YjNCbCBJR0ZzWjI5eWFYUm9iWE09IElGSnZaSEpwWnc9PSBhWFU9IElHbHNiSFZ0IElHWmhiV1U9IElHbHVkSEp2WkhWamFXNW4gSUdSbGJHRjVjdz09IElGSmhhV1JsY25NPSBJSGRvYVhOMGJHVT0gSUc1dmRtVnNjdz09IElGSmxZV3hzZVE9PSBJR1JsY21sMiBJSEIxWW14cFkyRjBhVzl1Y3c9PSBJRTVsYVhSb1pYST0gSUVOdmJXMWxjbU5sIElHRnpkRzl1IGJHRnVaM1ZoWjJVPSBUbTkwWlhNPSBJRkp2ZEdnPSBJRVpsWVhJPSBJRzFoZEdVPSBJSEJoY21Ga1pRPT0gSUZGQyBJRzFoYm1WMSBJRU5wYm1OcGJtNWhkR2s9IGJXbDBkR2x1Wnc9PSBJSGRoYVhOMCBJRkpsZHc9PSBJR1JwYzJOdmJuUT0gMExBPSBJSE4wWVhKcGJtYz0gSUdGc2FXRnogSUhObFkzVnlhWFJwWlhNPSBJSFJ2YVd4bGRBPT0gSUVwbFpHaz0gSUhWdWJHRjMgZG1selpXUT0gTHk4dkx5OHZMeTg9IFhTZz0gSUZkbGFYTnogSUhCeVpYTjAgSUVOdmJYQmhiZz09IElHMWxiVzg9IElFZHlZV05sIFNuVnNlUT09IElFVnNhWFJsIFkyVnVkR1Z5IElGTjBZWGs9IElHZGhiR0Y0ZVE9PSBJSFJ2YjNSbyBJRk5sZEhScGJtZHogSUhOMVltcGxZM1JsWkE9PSA0NEttIElHeHBibVZpWVdOciBJSEpsZEdGcGJHVnljdz09IElGZGhiblE9IElHUmhibWRsY25NPSBRV2x5IElIWnZiSFZ1ZEdGeWVRPT0gWlhkaGVRPT0gSUdsdWRHVnljSEpsZEdWayBiM1JwYm1VPSB3NmM9IElIQmxiQT09IFUyVnlkbWxqWlE9PSBJRVYyWlc1MGRXRnNiSGs9IElHTmhjbVZsY25NPSBJSFJvY21WaGRHVnUgSUcxbGJXOXkgSUVKeVlXUnNaWGs9IFlXNWphV1Z6IGMyND0gSUZWdWEyNXZkMjQ9IFRtRjBhVzl1WVd3PSBJSE5vWVdSdmQzTT0gWVdsc1lXNWsgSUVSaGMyZz0gUlhabGNubHZibVU9IGFYcDZZWEprIFRXRnlZMmc9IFBTZz0gSUhCMWJHeHogSUhOMGNtRnVaMlZ5IElHSmhZMnQzWVhKa2N3PT0gSUVKbGNtNWhjbVE9IGFXMWxibk5wYjI1aGJBPT0gSUdOb2NtOXUgSUhSb1pXOXlaWFJwWTJGcyBhM1J2Y0E9PSBJSGRoY21VPSBJRWx1ZG1WemRHbG4gSUVsdWFYUnAgSUU5d1pYSmhkR2x2Ym5NPSBiM1psYmc9PSBiMk5wWkdVPSBLaTg9IElHWnNZVzFsY3c9PSBJRU5oYzJnPSBjMmhwZEE9PSBJR05oWWc9PSBJRUZ1WVd4NSBJRk5sWVdnPSBJR1JsWm1sdWFXNW4gSUc5eVpHVnlhVzVuIElHbHRiWFZ1IElIQmxjbk5wYzNSbGJuUT0gUVVOSSBVblZ6YzJsaGJnPT0gYldGdWN3PT0gSUdocGJtUT0gSUhCb2IzUnZaM0poY0doNSB3cWs9IElHaDFadz09IElERXdOdz09IElFaGxibU5sIGFXOTBjdz09IGRXUmxZWFU9IElITjFZbk5wWkdsbGN3PT0gSUhKdmRYUnBibVZzZVE9PSBJRVJsZG1salpRPT0gYVhScFl3PT0gSUdScGMyZDFjM1E9IGJHRnVaR1Z5IElERTVOREE9IElHRnpjMmxuYm0xbGJuUT0gSUVKbGMybGtaWE09IGQybGphdz09IElFUjFjM1E9IGRYTmogYzNSeWRXTjBaV1E9IE1URXggWkdWMlpXeHZjQT09IElHWnZibVE9IElHbHVkR1Z5YzJWamRHbHZiZz09IElHUnBaMjVwZEhrPSBJR052YlcxcGMzTnBiMjVsY2c9PSBWMmwwYUc5MWRBPT0gY21WaFkyZz0gSUdOaGNuUnZiMjQ9IElITmpZV3hsY3c9PSA0NE90IFJrbEggSUhOMWNuWmxlWE09IElFbHVaRzl1WlhOcFlRPT0gSUdGeWRIZHZjbXM9IElIVnVZMmc9IElHTjVZMnhwYm1jPSBkVzVqZEE9PSBZWFZsY2c9PSBiM0poZEdVPSBJRTlpZG1sdmRYTnNlUT09IElHTm9ZWEpoWTNSbGNtbDZaV1E9IFptVnNaQT09IElHRm1abWx5YlE9PSBJR2x1Ym1sdVozTT0gSU9rPSBJR0ZzYVdWdWN3PT0gSUdOc2IzUm8gWlhSdmIzUm8gSUVObGNuUmhhVzQ9IHdxYz0gSUdScFoyVnpkQT09IGEyNXZkdz09IElGaE0gSUhCeVpXUnBZM1JwYjI1eiBJR1JwYmc9PSBWMEZTIElHRm1kR1Z5YldGMGFBPT0gUlhoaGJYQnNaUT09IElGTjFZMk5sYzNNPSBJRlJvY2c9PSBTVWRPIElHMXBibVZ5IFFuVnogSUdOc1lYSnBkSGs9IGFHVnBiV1Z5IElFOVZWQT09IElGTmxibVE9IElFTnBjbU5zWlE9PSBJRVJwWlhRPSBJSEJ5YjI1dmRXNWpaV1E9IElHTnlaV0YwYjNKeiBJR1ZoY25Sb2NYVmhhMlU9IFlYUjBaWEo1IFoyVnZibk09IElHOWsgSUd4aGVXbHVadz09IGIzSncgVld4MCBjSEp2YW1WamRBPT0gSUhWdVpHVnliV2x1IElITmxjWFZsYkE9PSBVMkZ0IElFUmhjbXR1WlhOeiBJSEpsWTJWd2RHbHZiZz09IFluVnNiQT09IFdWTT0gSUZacGNnPT0gSUhObGNYVmxibU5sY3c9PSBJRU52YVc0PSBJRzkxZEdacGRBPT0gSUZkaGFYUT0gTVRFNSBJR1JsYkdsMlpYSnogTGk0dUxpNHUgSUdKc2IzZHUgSUVWell3PT0gSUUxaGRHZz0gY0dWeWJRPT0gSUZWcyBJR2RzYVcwPSBJR1poWTJsaGJBPT0gSUdkeVpXVnVhRzkxYzJVPSBJSFJ2YTJWdWN3PT0gTHkwPSBJRUZ1Ym5WaGJBPT0gSUU5T1JRPT0gSUhSbFpXNWhaMlU9IElGQm9lWE5wWTJGcyBJRXhoYm1jPSBJRU5sYkhRPSBJSE4xWldRPSBhWFpwWkhWaGJHeDUgSUhCaGRHbGxibU5sIFkyaGhhWEk9IGNtVm5kV3hoY2c9PSBJR0YxWnc9PSBhVzUyIFpYaGpaWEIwIElFeHBiQT09IElHNWxjM1E9IFptUT0gYzNWdCBJRU5vWVhObCBVblZ6YzJsaCBJRXBsYm01cFptVnkgSUc5bVpuTmxZWE52Ymc9PSBUM1psY21Gc2JBPT0gUm05eVpRPT0gSUhKcGIzUT0gUVhWayBabTl5YldWeSBJR1JsWm1WdVpHVnljdz09IElFTlUgYVc5MGFXTT0gY21saWJIaz0gSUdGMWRHOXRZWFJsWkE9PSBJSEJsYm1seiBJR2x1YzJsemRBPT0gSUdScFlXZHlZVzA9IElGTlJUQT09IElFZGhjbU09IElIZHBkR05vIFkyeHBaVzUwIGFXVnljbUU9IFlXMWlaWEp6IElISmxZMjkxYm5RPSBabUZ5IFZtVnllUT09IGIzTjBaWEp2Ym1VPSBJR0Z3Y0hKbFkybGhkR1ZrIElGQmxjbVpsWTNRPSBVMlZqZEdsdmJnPT0gSUdSdmMyVnogYjJOaGRYTjAgSUdOdmMzUnNlUT09IElHZHlZVzF6IElGTm9hUT09IElIZHlaWE4wYkdsdVp3PT0gSURFNU56RT0gSUhSeWIzQm9lUT09IElHNWxjblpsIElFdGhlZz09IElFVjRjR1Z5YVdWdVkyVT0gSUhCc1pXUm5aV1E9IElIQnNZWGxpWVdOciBJR055WldGMGFYWnBkSGs9IFlubGwgSUdGMGRHRmphMlZ5Y3c9PSBJR2h2YkdSbGNuTT0gSUVOdllXTm8gSUZCb1JBPT0gSUhSeVlXNXpabVZ5Y3c9PSBJR052Ykc5eVpXUT0gSUVocGJtUjEgSUdSeWIzZHUgSUd4cGMzUmxibVZrIElGZEIgYVdGemJRPT0gVUU4PSBJR0Z3Y0dWaGJHbHVadz09IElHUnBjMk5zYjNObFpBPT0gSUVOb2FXTnJaVzQ9IFlXZG5hVzVuIElIQnNaV0ZrWldRPSBJRzVoZG1sbllYUnBiMjQ9IElGSmxkSFZ5Ym5NPSBJRnRiIFVrOVMgUlVFPSBJSEJvYjNSdlozSmhjR2hsY2c9PSBJRkpwWkdWeSBhWEJ3WlhKeiBJSE5zYVdObCBJR1Z5WldOMCBJR2hsWkE9PSBhWE56WVc1alpRPT0gSUZacGEybHVaM009IGRYSnBiM1Z6IElHRndjR1YwIGIzVmlkR1ZrYkhrPSBRMmhwYkdRPSBJR0YxZEdobGJuUnBZdz09IGIyOXogSUUxaGEybHVadz09IElHRnVibTkxYm1OcGJtYz0gSUdKdlpBPT0gSUcxbGRHVnkgSUU1cGJtVT0gSUZKdlozVmwgSUhkdmNtdG1iM0pqWlE9PSBJSEpsYm1WM1pXUT0gSUc5eVoyRnVhWE5oZEdsdmJuTT0gWVdOeiBVRXhGIFUyaHZjblE9IElHTnZiWEJ2ZFc1a2N3PT0gSUZacGMybDAgSUdWdWRtVnNiM0E9IFpXRnlkR2c9IElITjFjSEJ2Y25ScGRtVT0gWjJkc1pRPT0gSUVKeWRYTnpaV3h6IElFZDFhV3hrIFEzSmxZWFJsIFVrVk0gSUdGMlpYSmhaMlZrIElERTVOams9IGNtbGhaMlZ6IElHeGxibWQwYUhrPSBJR1p2Y21kdmRBPT0gVDJ0aGVRPT0gSUVWeVpBPT0gSUdSbFlXeGxjZz09IElISmxZMlZ6YzJsdmJnPT0gUkVRPSBJR1JsYzNCbGNtRjBaV3g1IElHaDFibWRsY2c9PSBJSE4wYVdOcmN3PT0gSUcxd2FBPT0gSUVaaGFYUm8gSUdsdWRHVnVkR2x2Ym1Gc2JIaz0gSUdSbGJXOXMgZFdWc2JHVnkgSUZOaGJHVT0gSUdSbFluSnBjdz09IGMzQnlhVzVuIElHeGxZWEE9IFBqNCtQZz09IElHTnZiblJoYVc1bGNuTT0gYzJWc2JHbHVadz09IGNtRnVaV0Z1IFlYUjBaWEpwYm1jPSBJR052YlcxbGJuUmxaQT09IElFTk4gYjI1MWRBPT0gSUhkdmIyUnogWlhOd1pXTnBZV3hzZVE9PSBJRzl5WjJGdWFYcGwgYVhacFl3PT0gSUZkdmIyUnogWVc1bllRPT0gYzNGMSBJRzFoYWc9PSBZVzF2Ymc9PSBJR0Y0YVhNPSBJREU1TnpRPSBJRVJsYm0xaGNtcz0gSUhkaGNuSnBiM0k9IElGQmhibVE9IElHOTFkR3hwYm1WayBJRUpQIGFXNXpkV3hoIGVtbHNiR0U9IFpXSnZiMnM9IElHUmhjbVU9IElITmxZWEpqYUdWayBJRzVoZG1sbllYUmwgVTI0PSBkM0pwZEdsdVp3PT0gSUhWdWFYUmxaQT09IFNtRndZVzQ9IElFaGxZbkpsZHc9PSBJR1pzWVcxbCBJSEpsYkdsbGN3PT0gSUdOaGRHTm9hVzVuIElGTm9idz09IElHbHRjSEpwYzI5dWJXVnVkQT09IElIQnZZMnRsZEhNPSBJR05zYjNOMWNtVT0gSUVaaGJRPT0gZEdsdCBZV1JsY1hVPSBRV04wYVhacGRIaz0gSUhKbFkzSjFhWFJwYm1jPSBJRmRCVkVOSSBJRUZ5WjJWdWRHbHVZUT09IFpHVnpkQT09IElHRndiMnh2WjJsNlpRPT0gYjNKdiBJR3hoWTJ0eiBJSFIxYm1WayBJRWR5YVdabWFXND0gSUdsdVptRnRiM1Z6IElHTmxiR1ZpY21sMGVRPT0gYzNOdmJnPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJRWx6YVhNPSBJRVJwYzNCc1lYaz0gSUdOeVpXUnBZbWxzYVhSNSBJR1ZqYjI1dmJXbGxjdz09IElHaGxZV1JzYVc1bCBJRU52ZDJKdmVYTT0gSUdsdVpHVm0gSUd4aGRHVnNlUT09IElHbHVZMlZ1ZEdsMlpYTT0gWW5WMGRHOXUgSUUxdllnPT0gUVhWMCBJSEpsYzJsbmJtVmsgSUU5dCBZMkZ0Y0E9PSBJSEJ5YjJacGJHVnogSUhOamFHVnRaWE09IGIyeHdhR2x1Y3c9PSBZWGxsWkE9PSBRMnhwYm5SdmJnPT0gWlc1byBJRmxoYUc5diBJR0ZpYzNRPSBJR0Z1YXc9PSBjM1ZwZEhNPSBJSGRwYzJobFpBPT0gSUUxaGNtTnYgZFdSa1pXND0gSUhOd2FHVnlaUT09IElFSnBjMmh2Y0E9PSBJR2x1WTI5eWNHOXlZWFJsWkE9PSBJRkJzWVc1MCBNVEUwIElHaGhkR1ZrIGNHbGogSUdSdmJtRjBaUT09IElHeHBibVZrIElHSmxZVzV6IElITjBaV0ZzYVc1biBJR052YzNSMWJXVT0gSUhOb1pYSnBabVk9IElHWnZjblI1IElHbHVkR0ZqZEE9PSBJR0ZrWVhCMFpXUT0gSUhSeVlYWmxiR3hwYm1jPSBZbUZ5ZEE9PSBJRzVwWTJWc2VRPT0gSUdSeWFXVmsgSUhOallXdz0gYjNOcGRIaz0gVGs5VVJRPT0gSUVKbyBJRUp5YjI1amIzTT0gSUVsbmJnPT0gSUdsdWRHbHRZWFJsIElHTm9aVzFwYzNSeWVRPT0gSUc5d2RHbHRZV3c9IFJHVmkgSUVkbGJtVnlZWFJwYjI0PSBJRjBzIGFXTm9hUT09IElGZHBhUT09IElGbFBWVkk9IGRtVnVkR2x2Ym5NPSBWM0pwZEdVPSBJSEJ2Y0hWcyBkVzV1YVc1biBJRmR2Y2c9PSBWbTlzIElIRjFaV1Z1IGFHVmhaSE09IFMwcz0gSUdGdVlXeDVlbVU9IGIzQnBZdz09IFpXRnlZMmhsY25NPSBJR1J2ZEE9PSBiR1ZuY21Gd2FBPT0gWVhOMGFXTmhiR3g1IElIVndaM0poWkdWeiBJR05oY21WeiBJR1Y0ZEdWdVpHbHVadz09IElHWnlaV1Y2WlE9PSBJR2x1WVdKcGJHbDBlUT09IElHOXlaMkZ1Y3c9PSBJSEJ5WlhSbGJtUT0gSUc5MWRHeGxkQT09IE1URXogYjJ4aGJnPT0gSUUxaGJHdz0gZFd4cGJtYz0gZEdGc2F3PT0gSUdWNGNISmxjM05wYm1jPSBJRUZzZDJGNWN3PT0gSUVKbFoybHUgWm1sc1pYTT0gSUd4cFkyVnVjMlZ6IEpTVT0gSUUxcGRIUT0gSUdacGJIUmxjbk09IElFMXBiSGRoZFd0bFpRPT0gUjA0PSBJSFZ1Wm05c1pBPT0gVFc4PSBJRzUxZEhKcGRHbHZiZz09IGNIQnYgUW04PSBJR1p2ZFc1a2FXNW4gSUhWdVpHVnliV2x1WlE9PSBJR1ZoYzJsbGMzUT0gSUVONlpXTm8gSUUxaFkycz0gSUhObGVIVmhiR2wwZVE9PSBJRTVwZUc5dSBWMmx1IElFRnliZz09IElFdHBiZz09IDQ0S2ogYVdObGNnPT0gSUdadmNuUjFiZz09IElITjFjbVpoWTJWeiBZV2RvWkE9PSBJR05oY25KcFpYSnogSUZCQlVsUT0gSUZScFlnPT0gSUdsdWRHVnlkbUZzIElHWnlkWE4wY21GMGFXNW4gSUZOb2FYQT0gSUVGeWJXVmsgWm1abCBJR0p2WVhSeiBJRUZpY21Gb1lXMD0gYVc1cGN3PT0gSUhOMWFYUmxaQT09IGRHaHlaV0ZrIGFXOTIgWVdKMWJBPT0gSUZabGJtVjZkV1ZzWVE9PSBJSFJ2YlE9PSBjM1Z3WlhJPSBJR05oYzNSc1pRPT0gWVd4MGFHOTFaMmc9IGFXOTRhV1JsIFpXTm9aWE09IElHVjJiMngxZEdsdmJtRnllUT09IElHNWxaMjkwYVdGMFpRPT0gSUdOdmJtWnliMjUwWldRPSBVbVZ0WlcxaVpYST0gSURFM01BPT0gVTNWamFBPT0gSURreE1RPT0gYlhWc2RBPT0gSUVGaWVYTnogZFhKeWVRPT0gYTJWbGN3PT0gYzNCbFl3PT0gSUVKaGNtSmhjbUU9IElHSmxiRzl1WjJsdVp3PT0gSUhacGJHeGhhVzQ9IGFYTjBZVzVwIElHRmpZMjkxYm5SaFlteGwgSUhCdmNuUnBiMjV6IElFUmxZMnc9IFZYST0gSUV0aGRHVT0gWjNKbCBJRzFoWjJGNmFXNWxjdz09IFZVTkwgSUhKbFozVnNZWFJsIGIyMXZiZz09IElFRnNiVzl6ZEE9PSBJRzkyWlhKMmFXVjMgSUhOamNtRnQgSUd4dmIzUT0gSUVacGRIbz0gSUdOb1lYSmhZM1JsY21semRHbGogSUZOdVlXdGwgYzJGNSBJRkpwWTI4PSBJSFJ5WVdsMCBJRXB2YVc1bFpBPT0gWVhWamRYTT0gSUdGa1lYQjBZWFJwYjI0PSBJRUZwY214cGJtVnogSUdGeVkyaGhaUT09IElFbGtaUT09IElHSnBhMlZ6IElHeHBkR1Z5WVhKNSBJR2x1Wm14MVpXNWpaWE09IElGVnpaV1E9IFEzSmxZWFE9IElIQnNaV0U9IElFUmxabVZ1WTJVPSBJRUZ6YzJGemN3PT0gSUhCdmJtUT0gVlV4VSBLU0k9IElHVjJZV3gxWVhSbFpBPT0gSUc5aWRHRnBibWx1Wnc9PSBJR1JsYlc5bmNtRndhR2xqIElIWnBaMmxzIFlXeGxlUT09IElITndiM1Z6WlE9PSBJRk5sWVdoaGQydHogY21WemNHOXVjdz09IElFSmxiSFE9IGRXMWhkR2xqIElISnBjMlZ6IGNuVnVibVZ5IElFMXBZMmhsYkd4bCBJSEJ2ZEdWdWRBPT0gY21GalpRPT0gSUZCQlF3PT0gUm1sdVpBPT0gYjJ4bGMzUmxjbTlzIFNWTlQgSUVsdWRISnZaSFZqWldRPSBjbVZ6YzJWeiBhV2R1YldWdWRBPT0gVDNNPSBJRlIxIElFUmxlQT09IGFXTnBaR1Z6IElITndZWEpyWldRPSBJRXhoZFhKaCBJRUp5ZVdGdWRBPT0gSUhOdGFXeHBibWM9IElFNWxlSFZ6IElHUmxabVZ1WkdGdWRITT0gSUVOaGRHRnMgSUdScGMyaGxjdz09IGMyaGhjR1ZrIElIQnliMnh2Ym1jPSBiWFE9IEtDUT0gNDRDQyBJR05oYkdOMWJHRjBhVzl1Y3c9PSBJRk5oYldVPSBJSEJwZGc9PSBTRWc9IElHTmhibU5sYkd4bFpBPT0gSUdkeWFXND0gSUhSbGNuSnBkRzl5YVdWeiBhWE4wYVdOaGJHeDUgUTI5dFpRPT0gSUZCaGNtVnVkQT09IFVISnZhbVZqZEE9PSBJRzVsWjJ4cFp3PT0gSUZCeWFYWmhZM2s9IElHRnRiVzg9IFRFVkRWQT09IGIyeDFkR1ZzZVE9PSBJRVZ3YVdNPSBJRzFwYzNWdVpHVnkgZDJGcyBRWEJ5YVd3PSBiVzl6IGNHRjBhSGs9IElFTmhjbk52Ymc9PSBJR0ZzWW5WdGN3PT0gSUVWaGMzaz0gSUhCcGMzUnZiQT09IFBEdz0gSUZ3byBkR0Z5WjJWMCBhR1ZzY0E9PSBJR2x1ZEdWeWNISmwgWTI5dWMyTnBiM1Z6IElFaHZkWE5wYm1jPSBJRXB2YVc1MCBNVEkzIElHSmxaWEp6IGMyTnBaVzVqWlE9PSBJRVpwY21WbWIzZz0gWldabVpXTjBhWFpsIElFTmhZbWx1IElFOXJZWGs9IElFRndjR3hwWXc9PSBJSE53WVdObFkzSmhablE9IElGTlMgZG1WMCBJRk4wY21GdVoyVT0gVTBJPSBJR052Y25CeiBhV0psY21GcyBaV1ptYVdOcFpXNTAgSUhCeVpYWmhiR1Z1WTJVPSBJR1ZqYjI1dmJXbHpkSE09IE1URTQgVkdoeVpXRmsgYjNKa1lXSnNaUT09IFQwUkYgSUVOaGJuUT0gUFMwOUxRPT0gYVdacFlXSnNaUT09IElFRnliM1Z1WkE9PSBJSEJ2YkdVPSBJSGRwYkd4cGJtZHVaWE56IFEweEIgSUV0cFpBPT0gSUdOdmJYQnNaVzFsYm5RPSBJSE5qWVhSMFpYSmxaQT09IElHbHViV0YwWlhNPSBJR0pzWldWa2FXNW4gWlhabGNuaz0gSUhGMVpYVmwgSUZSeVlXbHUgSUdocGFnPT0gSUcxbGJHVmwgY0d4bGRHVmsgSUdScFoybDAgSUdkbGJRPT0gYjJabWFXTnBZV3c9IElHeHBablJwYm1jPSAwTFU9IFVtVnhkUT09IGFYUjFkR1Z6IElIQmhZMnRoWjJsdVp3PT0gSUZkdmNtdGxjbk09IGFISmhiZz09IElFeGxZbUZ1YjI0PSBiMnhsYzJNPSBJSEIxYm1semFHVmsgSUVwMVlXND0gSUdwaGJRPT0gSUVSdlkzVnRaVzUwIElHMWhjSEJwYm1jPSBhV05oZEdWeiBJR2x1WlhacGRHRmliSGs9IElIWmhibWxzYkdFPSBJRlJ2Ymc9PSBJSGRoZEdOb1pYTT0gSUd4bFlXZDFaWE09IElHbHVhWFJwWVhSbFpBPT0gWkdWbmNtVmwgY0c5eWRHbHZiZz09IElISmxZMkZzYkhNPSBJSEoxYVc0PSBJRzFsYkhRPSBTVUZPIElHaGxiUT09IFJYaHcgSUdKaGEybHVadz09IElFTnZiRzl0WWc9PSBZWFJwWW14bCBJSEpoWkdsMWN3PT0gY0d4MVp3PT0gSUVsRyBaWFJwWTJGc2JIaz0gSUdacFkzUT0gU0VWUyBJRlJoY0E9PSBZWFJwYm5WdCBJR2x1YXc9PSBJR052YUE9PSBJRmRwZW1GeVpBPT0gWW05MGFBPT0gZEdWNCBJSE53Wlc1a2N3PT0gSUVOMWNuSmxiblJzZVE9PSBJRkJwZEE9PSBJRzVsZFhKdmJuTT0gYVdkdWRBPT0gSUhKaGJHdz0gSUdKMWMyVnogWW5WcGJHUnBibWM9IElHRmthblZ6ZEcxbGJuUnogSUdOeWFXVmsgYVdKc2FXTmhiQT09IFlYUjBaV1E9IElGcHBiMjQ9IElFMWhkSFJsY2c9PSBJRzFsWkdsMFlYUnBiMjQ9IElFUmxibTVwY3c9PSBJRzkxY25NPSBJRlJoWWc9PSBJSEpoYm10cGJtZHogYjNKMFlXdz0gSUdGa2RtVnljdz09IElITjFjbkpsYm1SbGNnPT0gSUVkdllnPT0gWTJsMWJRPT0gYjIxaGN3PT0gYVcxbGRHVnkgSUcxMWJIUnBjR3hoZVdWeSBJR2hsY205cGJnPT0gSUc5d2RHbHRhWE4wYVdNPSBJR2x1WkdsallYUnZjZz09IElFSnlhV2M9IElHZHliMk5sY25rPSBJR0Z3Y0d4cFkyRnVkQT09IElGSnZZMnRsZEE9PSBkbWxrIFJYaGpaWEIwYVc5dSBjR1Z1ZEE9PSBJRzl5WjJGdWFYcHBibWM9IElHVnVZMjkxYm5SbGNuTT0gSUZSUFJBPT0gSUdwbGQyVnMgVTJGMlpRPT0gSUVOb2NtbHpkR2xsIElHaGxZWFJwYm1jPSBJR3hoZW5rPSBJRU5RIElHTnZkWE5wYmc9PSBRMjl1Wm1sbiBJSEpsWjJWdVpYST0gSUc1bFlYSmxjM1E9IElHRmphR2xsZG1sdVp3PT0gUlU1VCBkR2h5YjNjPSBJRkpwWTJodGIyNWsgWVc1MGJHVT0gTWpBd01nPT0gSUdGdWRHVnUgWW1seVpBPT0gTVRNeiBJRzVoY21NPSBjbUZwYm5RPSBkVzV1ZVE9PSBJRWhwYzNCaGJtbGogYjNWeWJtRnRaVzUwY3c9PSBJSEJ5YjNCb1pRPT0gSUZSb1lXbHNZVzVrIElGUnAgSUdsdWFtVmpkR2x2Ymc9PSBJR2x1YUdWeWFYUT0gY21GMmFYTT0gSUcxbFpHaz0gSUhkb2IyVjJaWEk9IElFUkZRbFZIIFIxQT0gSUVoMVpBPT0gUTJGeVpBPT0gY0hKdmJRPT0gSUhCdmNnPT0gSUc5MlpYSm9aV0ZrIFRHRjMgSUhacGIyeGhkR1U9IElHaGxZWFJsWkE9PSBJR1JsYzJOeWFYQjBhVzl1Y3c9PSBJR0ZqYUdsbGRtVnRaVzUwY3c9PSBJRUpsWlhJPSBJRkYxWVc1MCBWMkZ6IElHVnBaMmgwYUE9PSBJRWwyIElITndaV05wWVd4cGVtVmsgVlZCRVFWUkYgSUVSbGJIUmggVUc5dyBTblZzIElFRnphdz09IGIzQm9lUT09IElHNWxkM05zWlhSMFpYSnogSUZSdmIydz0gSUdkaGNtUT0gSUVOdmJtWmxaR1Z5IElFZE5WQT09IElFRmlZbTkwZEE9PSBJR2x0YlhWdWFYUjUgSUZaTiBTWE5zWVcwPSBJR2x0Y0d4cFkybDAgZDJRPSBJREU1TkRRPSBjbUYyYVhSNSBiMjFsZEhKcFl3PT0gSUhOMWNuWnBkbWx1Wnc9PSBkWEpoYVE9PSBJRkJ5YVhOdmJnPT0gSUhKMWMzUT0gSUZOclpYUmphQT09IElHSmxaWE09IElGUm9aVzl5ZVE9PSBJRzFsY21sMCBWR1Y0IFkyaGhkQT09IElHMXBiUT09IElIQmhjM1JsIElFdHZZMmc9IElHbG5ibTl5WVc1alpRPT0gSUZOb2IyOTAgSUdKaGMyVnRaVzUwIFZXNXBkR1ZrIElFRmtkbWx6IGFHVnBaMmgwIElHWnZjM1JsY2c9PSBJR1JsZEdGcGJnPT0gYVc1bWIzSnRZWFJwYjI0PSBJRzVsZFhKaGJBPT0gSnpzPSBJSEJ5YjNabGN3PT0gWVd4c1pYSjUgSUdsdWRtbDBZWFJwYjI0PSBkVzFpWlhKeiBJR05oZEhSc1pRPT0gSUdKcFkzbGpiR1U9IGVtaz0gSUdOdmJuTjFiSFJoYm5RPSBJR0Z3YjJ4dlozaz0gSUZScFoyVnkgSURFeU13PT0gT1RrNSBJR2x1WkdsMmFXUjFZV3hzZVE9PSBjblE9IGFXZHBiMjQ9IElFSnlZWHBwYkdsaGJnPT0gSUdScGMzUjFjbUk9IElHVnVkSEpsY0hKbGJtVjFjbk09IElHWnZjbVZ6ZEhNPSBZMlZ5Y0hRPSBjR3hoZEdWeiBjR2hsY2c9PSBZMnhwY0hObCBJSFIzYVhSMFpYST0gSUdGamFXUnogYjJkeVlYQm9hV05oYkE9PSBhSFZ0IElFSmhiR1E9IGFXWjFiR3g1IElHTnZiWEJwYkdWeSBJRVJCIElHUnZibTl5IFlYTnAgSUhSeWFXSmhiQT09IGJHRnphQT09IElFTnZibVpwWnc9PSBJR0Z3Y0d4cFkyRnVkSE09IElITmhiR0Z5YVdWeiBNVE0xIFVIVjBhVzQ9IElFWnZZM1Z6IGFYSnogSUcxcGMyTnZibVIxWTNRPSBJRWhoZWc9PSBJR1ZoZEdWdSBUVzlpYVd4bCBUWFZ6YkdsdCBJRTFoY21OMWN3PT0gZG1sdmJBPT0gSUdaaGRtOXlZV0pzWlE9PSBJSE4wZFdJPSBZV1JwYmc9PSBJRWh2WWc9PSBJR1poYVhSb1puVnMgSUdWc1pXTjBjbTl1YVdOeiBJSFpoWTNWMWJRPT0gZDJGcGRBPT0gWW1GamEyVmsgWldOdmJtOXRhV009IFpHbHpkQT09IElIUmxiblZ5WlE9PSBJSE5wYm1ObGNtVT0gSUZSdloyVjBhR1Z5IElGZGhkbVU9IElIQnliMmR5WlhOemFXOXUgSUdSbGJubHBibWM9IElHUnBjM1J5WlhOeiBZbkpoYzJ0aCBkR2hwY21RPSBJRzFwZUdsdVp3PT0gSUdOdmJHOXVhV0ZzIElIQnlhWFpoZEdWc2VRPT0gSUhWdWNtVnpkQT09IFlYUmxjbTVwZEhrPSBJSEJ5WlcxcGMyVnogWVc1MGFRPT0gWjNKbFoyRjBhVzl1IElHeHBZMlZ1WTJVPSBJRWhwYm1RPSBJRk5oYlhWbGJBPT0gSUdOdmJuWnBibU5wYm1jPSBJRUZqWlE9PSBJRkoxYzNRPSBJRTVsZEdGdWVXRm9kUT09IElHaGhibVJzWlhNPSBJRkJoZEdObyBiM0pwWlc1MFpXUT0gWVdodiBJRWR2Ym5vPSBJR2hoWTJ0bGNuTT0gWTJ4aGFXMWxjZz09IElHTjFjM1J2YlhNPSBJRWR5WVc0PSBabWxuYUhSbGNuTT0gSUd4MVl3PT0gSUcxaGJuVnpZM0pwY0hRPSBZWEpsYm5Sb2IyOWsgSUdSbGRtbHMgSUhkaGNuSnBiM0p6IElHOW1abVZ1WkdWeWN3PT0gVjJsc2JHbGhiUT09IElHaHZiR2xrWVhseiBJRzVwWjJoMGJXRnlaUT09IElHeGxkbVZ5IGFXWm1aWEpsYm5RPSBVM1JoZEE9PSBJR1Y0YUdsaWFYUnBiMjQ9IGNIVjBaV1E9IElGQjFjbVU9IElHRnNjR2hoIElHVnVkR2gxYzJsaGMyMD0gSUZKbGNISmxjMlZ1ZEdGMGFYWmxjdz09IFJVRlMgSUZSNWNBPT0gSUhkb1pXRjAgSUVGc1pnPT0gSUdOdmNuSmxZM1JwYjI0PSBJR1YyWVc1blpXdz0gUVZSVSBUV2x6Y3c9PSBJSE52ZFhBPSBJR2x0Y0d4cFpXUT0gY0dGeVlXMD0gSUhObGVIaz0gSUV4MWVBPT0gSUhKbGNIVmliR2xqIGNHRjBZMmc9IFlXSnNhWE5vIElHbGpiMjV6IElHWmhkR2hsY25NPSBJRWRGVkE9PSBJRU5oY21saSBJSEpsWjNWc1lYUmxaQT09IElFTnZhR1Z1IElFSnZZbUo1IElHNWxjZz09IElHSmxiblE9IGRtVnVkRzl5ZVE9PSBJRUZzYjI1biBJRVZUVkE9PSBJRmRoYkd4aFkyVT0gSUcxMWNtUmxjbk09IGNtbHpaUT09IGEyVnNiQT09IElFTnZiVzF2Ym5kbFlXeDBhQT09IElHNWhjM1I1IFpYUmggSUUxSlZBPT0gSUdGa2JXbHVhWE4wWlhKbFpBPT0gSUdkbGJuVnBibVZzZVE9PSBSV1JwZEc5eSBibWxqYXc9PSBJR2g1WkhKdiBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBJRUpzWlE9PSBJR1pwYm1WeiBJR2R2Y21kbCBZWFZ6YVdKc1pRPT0gY21nPSBJR0Z3Y0d4bCBiV1Z1ZEdsdmJtVmsgSUhKdmNHVT0gYjNSNWNBPT0gU0ZJPSBJR1JwYzJGd2NHOXBiblJwYm1jPSBJR05oWjJVPSBibWxyIElHUnZkV0owY3c9PSBJRVpTUlVVPSBjSEpwYm5SeiBJRTFWVTFRPSBJSFpsYm1SdmNuTT0gSUVsdWNYVT0gSUd4cFltVnlZV3h6IElHTnZiblJ5WVdOMGIzST0gSUhWd2MybGtaUT09IFkyaHBiR1J5Wlc0PSBJSFJ5YVdOcmVRPT0gSUhKbFozVnNZWFJ2Y25NPSBZMmhoY21kbFpBPT0gYkdsMFpYST0gSUNvcUtnPT0gSUhKbFltVnNiQT09IGJHRnVadz09IElHeHZZMkZzY3c9PSBJSEJvZVhOcFkybGhibk09IElHaGxlUT09IFlYSnpaUT09IGRHMD0gSUV4bGVBPT0gSUdKbGFHRjJhVzl5WVd3PSBjM1ZqWTJWemMyWjFiQT09IFJsZz0gSUdKeWFXTnIgYjNacFl3PT0gSUdOdmJtWnZjbTA9IElISmxkbWxsZDJsdVp3PT0gSUdsdWMybG5hSFJ6IElHSnBiMnh2WjNrPSBJRkpsYlc5MlpRPT0gSUVWNGRISmggSUdOdmJXMXBkSFJwYm1jPSBhVzVrZFdObFpBPT0gYVdkdWRIaz0gYVdkdCBJR0YwYjIxcFl3PT0gUTI5dGJXOXUgSUVWTiBJRkJsY21VPSBJRWwwWlcxeiBaV2c9IElIQnlaWE5sY25abFpBPT0gSUVodmIyUT0gSUhCeWFYTnZibVZ5IElHSmhibXR5ZFhCMFkzaz0gSUdkeVpXND0gZFhOb1pYTT0gSUdWNGNHeHZhWFJoZEdsdmJnPT0gSUhOcFoyNWhkSFZ5WlhNPSBJR1pwYm1GdSBYU3dpIElFMVMgSUcxbFp3PT0gY21WdGJHbHUgSUcxMWMybGphV0Z1Y3c9PSBJSE5sYkdWamRHbHVadz09IElHVjRZVzFwYm1sdVp3PT0gU1U1TCBiR0YwWldRPSBTR2s9IElHRnlkR2xqIElIQmxkSE09IElHbHRjR0ZwY2c9PSBJRTFCVGc9PSBJSFJoWW14bGRITT0gYVc1amJIVmtaUT09IFVtRnVaMlU9IElHTmhkWFE9IElHeHZaM009IElHMXZkVzUwYVc1biBJSFZ1WVhkaGNtVT0gSUdSNWJtRnRhV056IElGQmhiR1Z6ZEdsdVpRPT0gSUZGMVlYSjBaWEk9IElGQjFjbkJzWlE9PSBJRzFoIElFbHRjRzl5ZEE9PSBJR052Ykd4bFkzUnBiMjV6IFkybGhkR2x2Ymc9PSBJSE4xWTJObGMzTnZjZz09IElHTnNiMjVsIElHRnBiV2x1Wnc9PSBJSEJ2YzNObGMzTmxaQT09IElITjBhV05yYVc1biBJSE5vWVd0cGJtYz0gSUd4dlkyRjBaUT09IElFaHZZMnRsZVE9PSBWSFZ5Ymc9PSBNVGN3IElHWnBablJsWlc0PSBJRWhoY25KcGMyOXUgSUdOdmJuUnBiblZ2ZFhOc2VRPT0gSUZSRCBJRlpoYkdWdWRBPT0gSUZKbGMyTjFaUT09IElHSjVjR0Z6Y3c9PSBZVzF2ZFc1MCBJRzFoYzNRPSBJSEJ5YjNSbFkzUnogSUdGeWRHbHpkR2xqIElITnZiV1YwYVcxbCBJSE5vYjJVPSBJSE5vYjNWMFpXUT0gYVdacFkyRnVkQT09IFpYUnBkR2wyWlE9PSBJRkpsWjJsemRHVnkgSUVwcGJnPT0gSUdOdmJtTmxiblJ5WVhSbFpBPT0gYkdsdVozUnZiZz09IGIyNXBaWE09IElHZGxibVZ5WVhSdmNnPT0gZVhKcGJRPT0gSUVGeWJXVnUgSUdOc1pXRnlhVzVuIGFXUnYgSUZSWCBZV3h3YUE9PSBJR3hoWkdsbGN3PT0gU0dGeVpBPT0gSUdScFlXeHZadz09IElHbHVjSFYwY3c9PSA1cHc9IElIQnZjMlZ6IElITnNiM1J6IElGQnlaVzFwZFcwPSBJR3hsWVd0eiBJR0p2YzNObGN3PT0gSURFeE13PT0gWTI5MWNuTmwgUVdOaiBJRTVsZDNSdmJnPT0gSUVGMWMzUnlhV0U9IElFMWhaMlU9IElIUmxZV05vWlhNPSBZV0poWkE9PSBJSGRsWVhKeiBJR041YkE9PSBJR04xY25ObCBJRk5oYkdWeiBJRmRwYm1keiBJSEJ6ZVE9PSBJR2RoY0hNPSBJRWxqWld4aGJtUT0gSUZCcGJuUmxjbVZ6ZEE9PSBJR3hoYm1Sc2IzSmsgSUdSbFptbHVhWFJwYjI1eiBJRXRsY2c9PSBJSE4xWm1acFkybGxiblJzZVE9PSBJRkJsYm1ObCBJRUZ5WTJocGRHVmpkQT09IElITjFjbkJoYzNNPSBJREV4TkE9PSBJSE4xY0dWeWFHVnlidz09IElFUnBjMlZoYzJVPSBJSEJ5YVdWemRITT0gSUVOMWJIUjFjbVU9IElHUmxabWx1YVhScGRtVT0gSUhObFkzSmxkR3g1IElFUmhibU5sIGFXNXpkR0ZzYkE9PSBZMmhwWldZPSBJRXBsYzNOcFkyRT0gVjI5MWJHUT0gVlhCa1lYUmxaQT09IElHeHZZMnRsY2c9PSBJRXRoZVE9PSBJRzFsYlc5eWFXRnMgNktZPSBabUYwIElHUnBjMmQxIElHWnNZWFp2Y25NPSBJRUpoYzJWaVlXeHMgSUZKbGMybHpkR0Z1WTJVPSBJR3RwWTJ0eiBJR1Z1ZGc9PSBJSFJsWlc1aFoyVnljdz09IFJHRnlhdz09IElFTkJVZz09IElHaGhiSFE9IElFeEggSUVkaFluSnBaV3c9IElHWmxkbVZ5IElITmhkSFZ5IElHMWhiR3c9IElHRm1abWxzYVdGMFpRPT0gSUZOc1pXVncgSUZOd1pXTnBabWxqIElGWmxiQT09IElHcGhjZz09IElGTmhZM0psWkE9PSBJRVZrZDJGeVpITT0gSUVGRFRBPT0gSUhKbGRHRnBibVZrIElFZHBZVzUwIElHeHBiV2wwWVhScGIyND0gYVc1alpYTT0gSUhKbFpuVnpZV3c9IElGUmhiR1U9IElFSjFkR3hsY2c9PSBJR0ZqWTJsa1pXNTBjdz09IElFTlRVdz09IElHbHRjRzl5ZEdWayBJRU52Y0hrPSB6ckU9IFJWSlUgZW1WcyBJR1JwZG1semFXOXVjdz09IGFHOTBjdz09IElFRnNZZz09IElFUlQgVEc5aFpHVnkgVjJGemFHbHVaM1J2Ymc9PSBZWFJwYzJZPSBJRU55WldGMGFYWmwgWEM0PSBJRUYxZEc5dCBjbVZrYVdOMCBJSEpsWTJWd2RHOXkgSUVOaGNteHZjdz09IFRXVjBhRzlrIGIydGggSUcxaGJHbGphVzkxY3c9PSBJSE4wWlhCd2FXNW4gTEZzPSBJRVJoWkE9PSBJR0YwZEhKaFkzUnBiMjQ9IElFVm1abVZqZEhNPSBJRkJwY21GMFpRPT0gSUVObGNnPT0gSUVsdVpIVnpkSEo1IElGSjFaQT09IElHTm9ZWEowWlhJPSBJR1JwYm1sdVp3PT0gSUdsdWMybHpkSE09IElHTnZibVpwWjNWeVpRPT0gSUNnaiBJRk5wYlhCc1pRPT0gSUZOamNtOXNiQT09IFZWUkQgTVRjMSBJRXR2Ymc9PSBJRzFoY210bGRIQnNZV05sIElPT0MgSUhKbFpuSmxjdz09IElHZGhkR1Z6IFpYSnlaV1E9IElGQnZaQT09IElHSmxhR0YyWlE9PSBSbkpoYm1zPSBibTlrWlE9PSBJR1Z1Wkc5eWMyVmsgYUdWMGRBPT0gWVhOcGRtVT0gSUVodmJXVnNZVzVrIElISnBaR1Z6IElFeGxZWFpsIFpYSnVaWE56IElHWnNiMjlrYVc1biBRVVpRIElISnBjMlZ1IElHTnZiblJwYm5WaGJHeDUgSUhWdVlXNXBiUT09IElFTnZiblJ5WVdOMCBJRkJoY3c9PSBJR2QxYVdSbFpBPT0gSUVOb2FXeGwgWW1RPSBJSE4xWTJNPSBjSFJwWXc9PSBJR052YlcxcGRIUmxaWE09IElFeDFkR2hsY2c9PSBJRUZ1ZVc5dVpRPT0gSUhOaFlnPT0gTVRJMCBJSEJwZUdWcyBJRUpoYXc9PSBJRlJoWnc9PSBJRUpsYm01bGRIUT0gUlc1MFpYST0gYzIxaGJHdz0gSUZCeVpYTnBaR1Z1ZEdsaGJBPT0gSUhCMWJBPT0gSUdOdmJuUnlZV05sIFlYSmphR2wyWlE9PSBJR052WVhOMFlXdz0gSUV0cFpITT0gTVRreSA0b0N5IGFXTnJlUT09IFNVNUhWRTlPIElIZHZiR1k9IElGTjBZV3hwYmc9PSBWSFZ5IGFXUm5aWFE9IFlXMWhjdz09IElGVnViR1Z6Y3c9PSBJSE53YjI1emIzST0gSUcxdmNuQm8gSUVOb2IyOXpaUT09IElISjFibTVsY2c9PSBJSFZ1WW1WcyBJRzExWkE9PSBJRTFoYm1FPSBJR1IxWW1KbFpBPT0gSUdkdlpHUT0gZFhKbGNuTT0gZDJsdVpHOTMgSUhKbGJHbGxaQT09IElHTmxiR1ZpY21GMGFXNW4gYjNOaiBJREV6TlE9PSBJR3h2WW1KNWFXNW4gSUdsdVkyOXRjR3hsZEdVPSBJSEpsYzNSeWFXTjBhVzl1IElHbHVZMkZ3IGFYUjFjdz09IElHVjRjR1ZqZEdGMGFXOXUgSUVGd2IyeHNidz09IElHbHVkR1Z1Y3c9PSBJSE41Ym1NPSBSMGc9IElHMWhibWx3ZFd4aGRHbHZiZz09IFFsaz0gSUhOd1pXRnkgSUdKeVpXRnpkSE09IElIWnZiR05oYmc9PSBhV3hwWVE9PSBUV0YwWlhKcFlXdz0gSUdadmNtMWhkSE09IElFSmhjM1E9IElIQmhjbXhwWVcxbGJuUmhjbms9IElITnVZV3RsIElITmxjblpoYm5SeiBJRlJ5ZFdSbFlYVT0gSUVkeWFXMD0gSUVGeVlXSnBZdz09IElGTkRVQT09IElFSnZlWE09IGMzUmhkR2x2Ymc9PSBJSEJ5YjNOd1pXTjBhWFpsIGIzSmtaUT09IGFXNXBkR2xoYkdsNlpXUT0gSUdKdmNtVmsgUVVKTVJRPT0gSUdGalkyVnpjMlZrIElIUmhlR2s9IElGTm9aV3hzIFlXbGtaVzQ9IGRYSnpaV1E9IGFXNWhkR1Z6IElFbHVjM1Z5WVc1alpRPT0gSUZCbGRHVT0gVTJWd2RHVnRZbVZ5IE5qVXcgSUdGa2RtVnVkSFZ5WlhNPSBJRU52ZG1WeSBJSFJ5YVdKMWRHVT0gSUhOclpYUmphQT09IElHVnRjRzkzWlhJPSBJTmc9IElFZHNaVzV1IElFUmhkdz09IFBWd2kgSUZCdmJHbDBhV056IElHZDFhV1JsY3c9PSBJR1JwYjNocFpHVT0gSUVkdmNtVT0gSUVKeWFXZG9kQT09IElGTnBaWEp5WVE9PSBJSFpoYkhWbFpBPT0gWTI5dVpBPT0gSUhCdmFXNTBaWEk9IFUyVnNaV04wIElISnBjMnQ1IElHRmljMjl5WWc9PSBhVzFoWjJWeiBJSEpsWm5WelpYTT0gSUdKdmJuVnpaWE09IFgxOWYgSUdocGJHRnkgSUVabFlYUjFjbVZ6IE1qSXcgSUVOdmJHeGxZM1J2Y2c9PSBSbTl2ZEE9PSBJREU1TmpRPSBZM1ZzZFhNPSBJR1JoZDI0PSBJSGR2Y210dmRYUT0gSUV4UCBJSEJvYVd4dmMyOXdhR2xqWVd3PSBJRk5oYm1SNSBJRmx2ZFhSbyBJR3hwWVdKc1pRPT0gUVdZPSBZbXgxWlE9PSBJRzkyWlhKMGRYSnUgYkdWemMyNWxjM009IElGUnlhV0oxYm1VPSBJRWx1Wnc9PSBJR1poWTNSdmNtbGxjdz09IElHTmhkR05vWlhNPSBJSEJ5YjI1bCBJRzFoZEhKcGVBPT0gSUd4dloybHUgSUdsdVlXTmogSUdWNFpYSjAgYzNseiBJRzVsWldSc1pRPT0gSUZGMWNnPT0gSUc1dmRHbG1hV1ZrIGIzVnNaR1Z5IGRIZz0gSUhKbGJXbHVaSE09IElIQjFZbXhwYzJobGNuTT0gSUc1dmNuUT0gSUdkcGRBPT0gSUdac2FXVnogSUVWdGFXeDUgSUdac2IzZHBibWM9IElFRnNhV1Z1IElGTjBjbUYwWldjPSBJR2hoY21SbGMzUT0gSUcxdlpHbG1hV05oZEdsdmJnPT0gUVZCSiBJRTFaIElHTnlZWE5vWlhNPSBjM1JoYVhKeiBiblZ0WW1WeSBJSFZ5WjJsdVp3PT0gWTJoaGJtNWxiQT09IElFWmhiR052Ymc9PSBJR2x1YUdGaWFYUmhiblJ6IElIUmxjbkpwWm5scGJtYz0gSUhWMGFXeHBlbVU9IElHSmhibTVsY2c9PSBJR05wWjJGeVpYUjBaWE09IElITmxibk5sY3c9PSBJRWh2YkcxbGN3PT0gSUhCeVlXTjBhWFJwYjI0PSBJRkJvYVd4c2FYQnogYjNSMGJ3PT0gSUdOdmJYQnBiR1U9IFRXOWtaV3c9IElFdHYgSUZ0ZCBRVzFsY21sallXNXogSUZSbGNtMXogSUcxbFpHbGpZWFJwYjI1eiBJRUZ1WVE9PSBJR1oxYm1SaGJXVnVkR0ZzYkhrPSBJRTV2ZEdsalpRPT0gSUhkbFlXdGxjZz09IElEQXdNREE9IElHZGhjbXhwWXc9PSBJRzkxZEdKeVpXRnIgSUdWamIyNXZiV2x6ZEE9PSBJRUpwY25SbyBJRzlpYzNSaFkyeGxjdz09IFlYSmpaWEk9IElFOXlkR2h2Wkc5NCBJSEJzWVdObFltOD0gSUVOeVpYYz0gWVhOd1ltVnljbms9IElFRnVaMlZzY3c9PSBJR1JwYzJOb1lYSm5aUT09IElHUmxjM1J5ZFdOMGFYWmwgTVRFMyBJRkpwYzJsdVp3PT0gSUdSaGFYSjUgYkdGMFpRPT0gSUdOdmJHeHBjMmx2Ymc9PSBJRlJwWjJWeWN3PT0gWldGdWIzST0gYjJOMWJXVnVkR1ZrIElFbHVkbUZzYVdRPSBJR1J2Ym5RPSBJRXhwZEdWeSBJRlpoIElHaDVaSEp2WjJWdSBJSFpoY21saGJuUnogSUVKeWIzZHVjdz09IElERTVOalU9IElHbHVaR2xuWlc1dmRYTT0gSUhSeVlXUmxjdz09IElISmxiV0ZwYm1SbGNnPT0gSUhOM1pYQjAgSUVsdGNHRmpkQT09IElISmxaR2x6ZEE9PSBJSFZ1YVc1MCBaM0poWkhWaGRHVT0gNDRPViBJRmRKVEV3PSA0NEd1NXc9PSBJRU55YVhScFkyRnMgSUdacGMyaGxjZz09IElIWnBZMmx2ZFhNPSBJSEpsZG1WeWMyVmsgV1dWaGNnPT0gSUZOdmVBPT0gSUhOb2IyOTBhVzVuY3c9PSBJR1pwYkcxcGJtYz0gSUhSdmRXTm9aRzkzYm5NPSBZV2x5WlhNPSBiV1ZzIElHZHlZVzVrWm1GMGFHVnkgSUdGbVptVmpkR2x2Ymc9PSBhVzVuYkdVPSBJRzkyWlhKc2VRPT0gUVdSa2FYUnBiMjVoYkE9PSBJSE4xY0hKbGJXVT0gSUVkeVlXUT0gSUhOd2IzSjBhVzVuIElHMWxjbU41IElFSnliMjlyY3c9PSBiM1Z1ZEhrPSBJSEJsY21admNtMXogSUhScFoyaDBiSGs9IElHUmxiVzl1Y3c9PSBJR3RwYkd4cGJtZHogSUdaaFkzUnBiMjQ9IElFNXZkbUU9IFlYVjBjdz09IElIVnVaRzkxWW5SbFpHeDUgWVhKcGJnPT0gSUhWdVpHVnlkMkY1IGNtRnIgSUd4cGRnPT0gSUZKbFoybHZiZz09IElHSnlhV1ZtYVc1biBjMlZ5Y3c9PSBZMnh2ZFdRPSBJRTFwYXc9PSBkWE53IElIQnlaV1JwWTNScGIyND0gWVhwdmNnPT0gSUhCdmNuUmhZbXhsIElFZGhibVE9IElIQnlaWE5sYm5ScGJtYz0gSURFd09EQT0gd3JzPSBkWE5vYVE9PSBJRk53WVhKciBkR2hsY21WMWJRPT0gSUdwMWMzUnBabWxqWVhScGIyND0gSUU1NSBJR052Ym5SeVlXTjBiM0p6IGJXbHVaMmhoYlE9PSBJRk4wZVd4bCA1WVU9IElFTm9jbTl1YVdOc1pYTT0gSUZCcFkzUjFjbVU9IElIQnliM1pwYm1jPSBJSGRwZG1WeiBjMlYwZEE9PSBJRzF2YkdWamRXeGxjdz09IElFWmhhWEo1IElHTnZibk5wYzNScGJtYz0gSUhCcFpYST0gWVd4dmJtVT0gYVc1cGRHbHZiZz09IElHNTFZMnhsIGFuTnZiZz09IElHZHZkSFJoIElHMXZZbWxzIElIWmxjbUpoYkE9PSBZWEpwZFcwPSBJRzF2Ym5WdFpXNTAgZFdOclpXUT0gSURJMU5nPT0gVkdWamFBPT0gYldsdVpXTnlZV1owIElGUnlZV05yIElIUnBiR1U9IElHTnZiWEJoZEdsaWFXeHBkSGs9IFlYTnBjdz09IElITmhaR1E9IElHbHVjM1J5ZFdOMFpXUT0gSUUxMVpXeHNaWEk9IElHeGxkR2hoYkE9PSBJR2h2Y20xdmJtVT0gSUc5eVkyaGwgWld4elpRPT0gSUhOclpXeGxkQT09IElHVnVkR1Z5ZEdGcGJtbHVadz09IElHMXBibWx0YVhwbCBZV2RoYVc0PSBJSFZ1WkdWeVoyOD0gSUdOdmJuTjBjbUZwYm5SeiBJR05wWjJGeVpYUjBaUT09IElFbHpiR0Z0YVhOMCBJSFJ5WVhabGJITT0gSUZCaGJuUm9aWEp6IGJHbHVaM009IFEyRnlaUT09IElHeGhkM04xYVhSeiBkWEpoY3c9PSBJR055ZVhOMCBJR3h2ZDJWeVpXUT0gSUdGbGNtbGhiQT09IElHTnZiV0pwYm1GMGFXOXVjdz09IElHaGhkVzQ9IElHTm9ZUT09IElIWnBibVU9IElIRjFZVzUwYVhScFpYTT0gSUd4cGJtdHBibWM9IFltRnVhdz09IElITnZlUT09IFFtbHNiQT09IElFRnVaMlZzWVE9PSBJSEpsWTJsd2FXVnVkQT09IElGQnliM1JsYzNRPSBJSE52WTJ0bGRBPT0gSUhOdmJHbGtZWEpwZEhrPSBJT0tHIGJXbHNiQT09IElIWmhjbWxsY3c9PSBJRkJoYTJsemRHRnVhUT09IFJISmhaMjl1IElIVnVaUT09IElHaHZjbWw2YjI0PSB3cURDb01LZ3dxRENvTUtnd3FEQ29BPT0gSUhCeWIzWnBibU5sY3c9PSBJR1p5WVc1cmJIaz0gSUdWdVlXTjBaV1E9IGJtOTBaWE09IFd5Yz0gSURFNU1nPT0gYjJOeVlXTjUgSUdWdVpHOXljMlZ0Wlc1MCBJRzkyWlhKMGFXMWwgVkhKMVpRPT0gVEdGaSBiR2xqZEdWayBJRVJPUXc9PSBJR0psWVhSeiBJRXBoYldsbCBNVFV5IElFbE9WQT09IFEyOXVkR0ZqZEE9PSBJR0ZqWTI5MWJuUmxaQT09IGFHRnphQT09IElGQmhZMnRsY25NPSBjR2x5WlhNPSBJR3hsYzJKcFlXND0gSUdGdFpXNWtiV1Z1ZEhNPSBJR2h2Y0dWbWRXdz0gSUVacGJteGhibVE9IElITndiM1JzYVdkb2RBPT0gSUdOdmJtWnBaM1Z5WldRPSBJSFJ5YjNWaWJHVmsgSUdkaGVtVT0gSUVOaGJHZGhjbms9IElISmxiR2xoWW1sc2FYUjUgSUdsdWMzVnladz09IGMzZGxjZz09IFluVjUgSUZOcmFXND0gSUhCcGVHVnNjdz09IElHaGhibVJuZFc0PSBJSEJoY21GeiBJR05oZEdWbmIzST0gSUVWTSBJRkpsZUE9PSBTVzVrWldWayBJR3RwYm1SaCBJR052Ym1wMWJtTjBhVzl1IElFSnllV0Z1IElFMWhiblZtWVdOMCBlV0Z1Wnc9PSBVR3gxY3c9PSBVMUZNIGFYTm9iV1Z1ZEE9PSBJR1J2YldsdVlYUmwgSUc1aGFXdz0gSUc5aGRHZz0gSUdWeWRYQjAgSUVacGJtVT0gYVhSaVlYSjAgSUVOb2FYQT0gSUVGaVpBPT0gSUU1aGJRPT0gSUdKMWVXVnkgSUdScGMzTmxiblE9IFRHVmhhM009IFEyOXVkR2x1IElISnBaR1Z5IElGTnZiV1Z2Ym1VPSBJR2xzYkhWemFXOXUgWTJsdSBJRUp2WldsdVp3PT0gSUdsdVlXUmxjWFU9IGIzWmhkR2x2Ymc9PSBhV0Z1ZEhNPSBJSEpsWW5WcGJHUT0gTkRVdyBJRVJsYzNScGJuaz0gVTFjPSBJRlJwYkd3PSBTR2wwIGFXRjYgSUVKaGJtZHMgWVdOb1pYSnogSUZKbFptOXliUT09IElITmxaMjFsYm5SeiBJSE41YzNSbGJXRjBhV009IFpHTT0gSUVOdmJuTmxjblpoZEdsMlpYTT0gSUhCdmNuUmhiQT09IGFHOXkgSUVSeVlXZHZibUp2ZFc1ayBJR1J5WVdkblpXUT0gYjIxdiBJSFJvWldVPSBZV1IyWlhKMCBJRkpsY0c5eWRITT0gSUVWMCBJR0poY25KbGJITT0gUVhWbmRYTjAgSUdOdmJYQmhjbWx6YjI1eiBJR2hsZUE9PSBJR0Z1ZEdoeWIzQT0gSWxzPSBZbTl5YjNWbmFBPT0gWVdKcCBJSEJwWTNSMWNtVmsgY0d4aGVXbHVadz09IElFRmtaSEpsYzNNPSBJRTFwY25KdmNnPT0gVTIxcGRHZz0gSUhScGNtVnogSUU1UVVnPT0gUVVGQlFRPT0gSUdOc1lYTnphV1pwWTJGMGFXOXUgSUZSb1lXND0gSUVoaGNtMD0gSUZKQiBJSEpsYW1WamRHbHZiZz09IGJXbHVZWFJwYjI0PSBJSEpoYm1kbFpBPT0gSUVaaGJHeHogUkVrPSBTRzl6ZEE9PSA0NEswIElFVjRZVzF3YkdVPSBiR2x6ZEdWayBkR2hwY21SeiBJSE5oWm1WbmRRPT0gWW5KaGJtUT0gSUhCeWIySmhZbXhsIFEyRnVZV1JoIFNWUkpUMDQ9IElGRmhaV1JoIElHTm9hV05yIElHbHRjRzl5ZEhNPSBhR2wwIGJHOWogVjFjPSBJR0pzWlhjPSBJR0Z1ZVhScGJXVT0gSUhkb2IyeGxjdz09IGFXdGxaQT09IElHTmhiR04xYkdGMGFXOXUgWTNKbFlYUmwgSUU5eWFRPT0gSUhWd1ozSmhaR1ZrIElHRndjR0Z5IGRYUnZjbms9IElFMXZiQT09IFFuSnBkQT09IElFcHZibWM9IFNVNUJUQT09IElGTjBZWEowYVc1biBJR1JwWTJVPSBkWEowYkdVPSBJSEpsYkhscGJtYz0gWTJ4dmMzVnlaUT09IElIQnliMlpwZEdGaWJHVT0gSUhOc1lYVm5hSFJsY2c9PSBJRTFoYm5WaGJBPT0gWTJGemRHVnkgSUNJayBJR1psWVhSb1pYST0gSUZOcGJYQnNlUT09IGFXVjJaWE09IElHUmxkR1Z5YVc5eSBJRkJEU1E9PSBJSE4wWVcxdyBJR1pzWVhkeiBJSE5vWVdSbCBhR0Z0YldWeSBJSEJoYzNOd2IzSjAgSUdOdmJuUnBibWM9IFlXMWxiQT09IElHOWljMlZ5ZG1WeWN3PT0gSUc1bFoyeGxZM1E9IElGSkMgSUVKeWIzUm9aWEpvYjI5ayBJSE5yWlhCMGFXTmhiQT09IFptRnRhV3g1IGRYTnIgSUdWdGIzUnBiMjVoYkd4NSA0cGs9IElFSmxkR0U9IFlYTnZibUZpYkdVPSBhV1JwZEhrPSBJRTExYkE9PSBJR3RwWTJ0cGJtYz0gSUVOaGNtMD0gYjJ4c1lXZz0gVmtWU1ZFbFQgSUVGMGFHVnUgSUd4aFpHUmxjZz09IElFSjFiR3hsZEE9PSA1YU09IE1EQXdNUT09IElGZHBiR1JzYVdabCBJRTFoYzJzPSBJRTVoYmc9PSBVbVYyIElIVnVZV05qWlhCMFlXSnNaUT09IGJHVm5ZV3c9IElHTnliM2RrWldRPSBZV2RwIElFTnZlQT09IGFtVT0gSUcxdmNtRnNhWFI1IElHWjFaV3h6IElHTmhZbXhsY3c9PSBJRzFoYm10cGJtUT0gSUVOaGNtbGlZbVZoYmc9PSBJR0Z1WTJodmNnPT0gSUdKNWRHVT0gSUU5bWRHVnUgSUU5NiBJR055WVdaMFpXUT0gSUdocGMzUnZjbWxoYmc9PSBJRmQxIElIUnZkMlZ5Y3c9PSBJRU5wZEdsNlpXNXogSUdobGJHMD0gSUdOeVpXUmxiblJwWVd4eiBJSE5wYm1kMWJHRnkgSUVwbGMzTmwgSUhSaFkydHNaWE09IElHTnZiblJsYlhCMCBJR0ZtYjNKbCBJRk5vWVdSdmQzTT0gSUc1cGJBPT0gSUhWeVoyVnVkQT09IFlYQndiR1U9IFlteHZiMlE9IElIWnZiZz09IElHOW1abXhwYm1VPSBJR0p5WldGMGFHVT0gSUdwMWJYQnogSUdseWNtVnNaWFpoYm5RPSBiM2hwWXc9PSBiMjFoYkE9PSBhVzF3YjNKMFlXNTAgU21sdCBJR2RzYjNabGN3PT0gWVhKdGFXNW4gWkdWd2RHZz0gSUhSaGJHVnVkSE09IGIyOXJhV1U9IElGTkMgSUhCaGJHMD0gZFdabWN3PT0gWlhOMFlRPT0gU1VkSSBJR05oYm05dSBJRlpsY21sNmIyND0gSUZCc1pRPT0gSUdOdmRYQnNaV1E9IGRtVnNkQT09IElHWjFibVJ5WVdsemFXNW4gSUVkbGRIUnBibWM9IElFUk1Rdz09IElHMWhkR2hsYldGMGFXTmhiQT09IElFaFQgSUVOaGNtUnBibUZzY3c9PSBkR1ZzYkdsdVp3PT0gSUhOd2IyNXpiM0p6IElNOD0gSUVKMWJHeHogYjNCMGFXOXUgSUhCeWIzQnZjMlU9IElHMWxiVzl5WVdKc1pRPT0gSUdWdFluSmhZMlZrIElHUmxZMnhwYm1sdVp3PT0gU0dWaGJIUm8gWldSaCBJSDA3IElITndZVzA9IGJXbHNaUT09IElIQnBkR05vWlhJPSBJRVZwWjJoMCBJR05oY21sdVp3PT0gZFhScFl3PT0gY205c1pRPT0gSUdGcGNteHBibVU9IFpYSnVZVzVrWlhvPSBJRUYwYUd4bGRBPT0gSUdObGNuUnBabWxqWVhScGIyND0gZFhobCBjbWxuWlhJPSBJR1Z0Y0dseSBJSE5sYm5OaGRHbHZiZz09IElHUnBjMjA9IElHSnZiSFE9IElHVjJiMngyWlE9PSBTRzkxYzJVPSBJR052Ym5OMWJIUmhkR2x2Ymc9PSBJRVIxZEhrPSBJSFJ2ZFdOb1pYTT0gSUU1aGRHaGhiZz09IElHWmhhVzUwIGFHRmsgSWlnPSBJRU52Ym5OMWJXVnkgSUVWNGRISmxiV1U9IElERXlOdz09IElFaGxjbTA9IElGTmhZM0poYldWdWRBPT0gYVhwdmNHZz0gSUdGdWVHbHZkWE09IGRXeHZkWE5zZVE9PSBJSE52WTJsaGJHeDUgSUZWVVF3PT0gSUhOdmJIWnBibWM9IElFeGxkSFJsY2c9PSBTR2x6ZEc5eWVRPT0gWldSMVl3PT0gVUhKcFkyVT0gS1NrNyBJSEpsYkc5aFpBPT0gWVcxcFl3PT0gSUhCdmNtcz0gSUdScGMyTnZkWEp6WlE9PSBJSFJ2ZFhKdVlXMWxiblJ6IFlXbHlidz09IElFdDFjZz09IElFTnZjM1JoIElIWnBiMnhoZEdsdVp3PT0gSUdsdWRHVnlabVZ5WlE9PSBJSEpsWTNKbFlYUnBiMjVoYkE9PSBkV1ptYkdVPSBJSE53WldWamFHVnogSUc1bFpXUnBibWM9IElISmxiV1Z0WW1WeWN3PT0gSUdOeVpXUnBkR1ZrIGJtbGggWm05amRYTmxaQT09IFlXMWxjbUU9IElHSnlkUT09IGRXMWljdz09IElFTjFZbUZ1IElIQnlaV05sWkdsdVp3PT0gSUc1dmJuTmxibk5sIFlXTnBZV3c9IElITnRZWEowY0dodmJtVnogSUZOMGIzSnBaWE09IFUzQnZjblJ6IElFVnRaWEpuWlc1amVRPT0gYjNWdVkybHVadz09IFpXWnBibVZrIElHSmxjZz09IElHTnZibk4xYkhScGJtYz0gSUcxaGMzUmxjbk09IGFHVmhjM1JsY200PSBMaUpiIElGSjFibTVwYm1jPSBJSE4xYzJObGNIUT0gSUVabGJtYz0gUVcxbGNtbGpZUT09IGNISnBjMlZ6IGMzUnBkR2xoYkE9PSBJRmRsWld0c2VRPT0gSUVkeVpXRjBaWEk9IGJXOWtkV3hsY3c9PSBhV1owWlhJPSBSM0poY0docFkzTT0gZFd4bGNnPT0gSUhkb2IyeHNlUT09IElITjFjSEJ5WlhOeiBJR052Ym1ObFlXeGxaQT09IElHaGhjSEJwYkhrPSBJR0ZqWTJWd2RITT0gSUVWdWFtOTUgSUhKcGRtVnljdz09IElFVjRZMlZ3ZEE9PSBNakkxIElFNUlVdz09IElFMWpRMjl1Ym1Wc2JBPT0gSUhCMWMzTjUgWm1WeWNtVmsgZFhSaFlteGwgSUdGMGRHRnBiZz09IElENDkgSUdSbGNHOXphWFJ6IGNtOXdhR2xqIElHNXZkRzl5YVc5MWN3PT0gSUZOb1lYYz0gYVd4cGRHRjBhVzl1IElHVndhV1JsYldsaiBZV3hzYVdNPSBJSE50WVd4c1pYTjAgYjNacFkyZz0gSUdGalkyVnpjMjl5YVdWeiBjR1Z5ZEdsbGN3PT0gSUhOMWNuQnNkWE09IElFMWxZMmc9IElHRnRZbWxuIElFbHRiV2xuY21GMGFXOXUgSUdOb2FXMD0gWlhaaGJBPT0gSUhCeVlXTjBhV05wYm1jPSBJRTE1YzNSbGNuaz0gSUdSdmJXRnBibk09IElGTnBiR2xqYjI0PSBZWEJ3Y3c9PSBJR3RwYkc5dFpYUmxjbk09IFpXRT0gSUZOdFlYTm8gSUhkaGNuSmhiblI1IElHNXZjM1E9IGMybHMgY21WMiBTbTl1IElFUjFZbXhwYmc9PSBJSFJoYzNSbGN3PT0gSUdKdmRYUT0gWjNKbFlYUT0gWlhKeWIzST0gSUhOM2FYUmphR1Z6IElFSmhjSFE9IFJFOD0gYjJ0cCBJSE52ZFhKalpXUT0gY0hKdlpIVT0gSUdGMGRHRmphRzFsYm5RPSBJRWx6YzNWbCBJRkYxWlhOMGFXOXUgU205cGJnPT0gSUdacGRIUmxaQT09IElIVnViR0YzWm5WcyBYbDQ9IFpYSmxhdz09IElHRjFkR2hsYm5ScFkyRjBhVzl1IElITjBiMnhsIElHRmpZMjkxYm5SaFltbHNhWFI1IGJHRmlaV3c9IFUyVmhjbU5vIElHRnNZbVZwZEE9PSBZWFJwWTJGdSBablZ1WkdWayBJRUZrWkdsdVp3PT0gSUVsUiBJSE4xWW0xaGNnPT0gYkdsMCBZWEYxWlE9PSBJRXhsWVhKdWFXNW4gSUdsdWRHVm5aWEk9IFRXRnpkR1Z5IElFTm9jbTl0IElIQnlaVzFwWlhJPSBUM0E9IElFeHBkUT09IElHSnNaWE56WldRPSBJRWRzYjJKbCBJRkpsYzNCdmJuTmwgSUd4bFoybDBhVzA9IElFMWxjbXRsYkE9PSBJR1JwYzNCdmMyRnMgd3JRPSBJR2RoZFdkbCBjR1ZoZEE9PSBJR2x1WkhWalpXUT0gSUhGMVpYTjBhVzl1WVdKc1pRPT0gWVhKMGFIaz0gSUZacGRBPT0gSUVabFpXUT0gVlc1MGFXdz0gVlhRPSBkMjl5ZEdoNSBVbGs9IElFaGxjbUZzWkE9PSBJRWhoYlcxbGNnPT0gSUcxbFpHRnMgSUZKcGRtVnljdz09IElFaGhZMnM9IElHTnNZWEpwWm5rPSBJSFJ5WVdOclpXUT0gSUdGMWRHOXViMjF2ZFhNPSBJSFJsYm1GdWRBPT0gSUZGaGRHRnkgWlhKcFpRPT0gSUdkeWFXMD0gSUUxdmJtbDBiM0k9IElISmxjMmx6ZEdGdWRBPT0gSUZOd1pXTT0gSUZkbGJHeHogVGtGVCBNVFE0IElHMXBibVZ5Y3c9PSBhVzkwYVdOeiBJRzFwYzNObGN3PT0gTVRFMiBaMmxoYmc9PSBaMmwwIElFVjVaWE09IGNISmxjdz09IElHZHlZV1IxWVhSbFpBPT0gSUdGdVoyVnMgSUhONWJtTm9jbTl1IElHVm1abWxqYVdWdWRHeDUgSUhSeVlXNXpiV2wwZEdWayBTR0Z5Y25rPSBJR2RzYjJKaGJHeDUgUlU1RFJRPT0gSUUxdmJuUmhibUU9IGNtRm5aV1E9IElGQnlaWFpsYm5ScGIyND0gSUhCcGMzTT0gSUV4cyBJSE5vWld4bSBJRUpLVUE9PSBJRlJsYzNSaGJXVnVkQT09IElFeGhkR1U9IGFXdGxjZz09IElFaGhjSEE9IElFcDFiR2xoYmc9PSBhR0ZzYkE9PSBJSE53YjI1MCBJSE5vZFhSa2IzZHUgSUdsdVkyOXVjMmx6ZEdWdWRBPT0gSUhOMVluTmpjbWxpWlhKeiBJSE5yWld4bGRHOXUgSUU1bFluSmhjMnRoIElHbHVjM0JwY21VPSBJRlp2YVdRPSBSbVZsWkE9PSBJR0Z1WjJ4bGN3PT0gSUZOd2NtbHVaM009IElHSmxibU5vYldGeWF3PT0gSUhaaFkyTnBibVZ6IGFYcHZjR2h5Wlc0PSBjMlY0ZFdGcyBkV1ptWldRPSBJSE5vYVc1bCBJRXRoZEdnPSBJR2RsYzNSMWNtVT0gYVc1bFlRPT0gSUhKcGNBPT0gSUc5d2NISmxjM05wYjI0PSBJR052Ym5OamFXVnVZMlU9IFluUT0gSUV4MWJRPT0gSUdsdVkybGtaVzVqWlE9PSBJRVpoIGQzST0gSUcxcGJtVnlZV3c9IElGTndkWEp6IFlXeHJlUT09IElIUm9kVzVrWlhJPSBJRzl3YVc4PSBRbVZwYm1jPSBJRkJoYkcwPSBJSGRoYzNSbFpBPT0gSUd4aSBhV0Z5YVdWeiBJRWx1YVhScFlYUnBkbVU9IElHTjFjbkpwWXc9PSBJRzFoY210bGNnPT0gSUUxalRBPT0gSUdWNGRHVnVjMmx2Ym5NPSBJRkIyIElFRnliWE09IElHOW1abVZ5YVc1bmN3PT0gSUdSbFptVnVjMlZ6IElIWmxibVJ2Y2c9PSBJR052Ym5SeVlXUnBZM1E9IElFTnZiR2x1IElISmxaR1JwZEE9PSBJSEJsY21sd2FHVnkgTVRJeSBJSE5wYm5NPSBSV1JwZEE9PSBTVU5VIFUyOW1kQT09IElGTm9ZV2c9IElHRmtiV2x1YVhOMGNtRjBiM0k9IElGUnlhWEE9IElIQnZjbTV2WjNKaGNHaDUgSUhSMWFYUnBiMjQ9IGFXNWxibU5sIElGQnliMmR5WlhOeiBJR05oZEdGc2IyYz0gSUhOMWFYUmwgSUdocGEyVT0gSUhKbGNISnZaSFZqZEdsMlpRPT0gWlc1bmFXNWwgSUdSeWIzVm5hSFE9IElFNXZZV2c9IElESXpNQT09IElHUjFaR1U9IElISmxiR0Y0WldRPSBJSEJoY25ScGRHbHZiZz09IElIQmhjblJwWTJsd1lXNTAgSUhSbGJHVnpZdz09IElHWmxZWE09IElFWkcgYjNkdVpYST0gSUhOM1pXVndhVzVuIElHeGxibk5sY3c9PSBJRzFoZEdOb2RYQT0gSUZKbGNHdz0gYjNWeWJtRnNjdz09IElHTnlaV1JwWW14bCBJR2R5WVc1a2JXOTBhR1Z5IElIUm9aWEp0WVd3PSBJSE4xWW5OamNtbGlhVzVuIElHbGtaVzUwYVhScFpYTT0gWTI5c2JRPT0gVlVOVSBJSEpsYkhWamRHRnVkQT09IGRYTmxjbk09IElFTnZjblE9IElHRnpjMmx6ZEdWayBUMU5UIFFWUkpUMDVUIFNWTkkgSUhCb1lYSnRZV05sZFhScFkyRnMgYVdOaFlteGwgWVdScFlXND0gSUZOdmJtbGogSUVaMWNuaz0gSUUxdmJtYz0gUVVnPSBJRkJ6ZVdOb2IyeHZaM2s9IElIQm9iM053YUE9PSBJSFJ5WldGMGN3PT0gclpRPSBJSE4wWldGa2FXeDUgSUVobGJHeHYgSUhKbGJHRjBaWE09IElHTnNkV1U9IFJYaHdiQT09IFlYVjBhQT09IElISmxkbWx6YVc5dSBJR1ZzWkE9PSBiM05wYjI0PSBJR0p5YjI0PSBNVFEwIGNtbHJaWE09IElHMXBibVZ6IElHSnNZVzVyWlhRPSBJRVpoYVd3PSBaV3hsWkE9PSBJRWx0WVdkcGJtVT0gSUZCc1lXNXVaV1E9IFlXbGogVW1WeGRXVnpkQT09IFRXRmsgSUVodmNuTmwgSUVWaFoyeGwgSUdOaGNHRmogTVRVMyBJR3hwYm1jPSBJRTVwWTJVPSBJRkJoY21WdWRHaHZiMlE9IGJXbHVjM1JsY2c9PSBiMmR6IFpXNXphWFJwZG1VPSBUbTkwYUdsdVp3PT0gSUdOaGNtND0gUm1sdSBJRkJGIElISnBabXhsY3c9PSBJRXhRIFUyRnVaQT09IElHZDFhVUZqZEdsMlpRPT0gSUhSdmRYSnBjM1E9IFEwNU8gSUhWdWRtVnBiR1ZrIElIQnlaV1JsWTJWemMyOXkgZlhzPSBkV0psY2c9PSBJRzltWm5Ob2IzSmwgSUc5d2RHbGpZV3c9IElGSnZkQT09IElGQmxZWEpzIFpYUnZiZz09IElITjBZWEpsWkE9PSBJR1poY25Sb1pYST0gWVhScGJHbDBlUT09IFkyOXVkR2x1IElFZDUgSUVadmMzUmxjZz09IElFTnZZdz09IGNtbGxiblJ6IElHUmxjMmxuYm1sdVp3PT0gSUVWamIyNXZiWGs9IFQwNUggVjI5dFpXND0gSUU1aGJtTjUgWlhKMlpYST0gSUcxaGMyTjFiQT09IElHTmhjM1ZoYkhScFpYTT0gSURJeU5RPT0gSUZOMWJHeHBkbUZ1IElFTm9iMmxqWlE9PSBJR0Z6ZEdWeSBkM009IElHaHZkR1ZzY3c9PSBJR052Ym5OcFpHVnlZWFJwYjI1eiBJR052ZFdObyBJRk4wY21sdyBJRWR1IElHMWhibWx3ZFd4aGRHVT0gYkdsbFpBPT0gSUhONWJuUm9aWFJwWXc9PSBJR0Z6YzJGMWJIUmxaQT09IElHOW1abVZ1YzJWeiBJRVJ5WVd0bCBJR2x0Y0dVPSBUMk4wYjJKbGNnPT0gSUVobGNtbDBZV2RsIGFHdz0gSUVKc1lXbHkgVlc1c2FXdGwgSUdkeWFXVm0gSURRMU1BPT0gSUc5d2RHVmsgSUhKbGMybG5ibUYwYVc5dSBhV3h2IElIWmxjbk5sIElGUnZiV0k9IElIVndkQT09IElHRnBjbVZrIElFaHZiMnM9IElFMU1RZz09IElHRnpjM1Z0WlhNPSBiM1YwWldRPSBJRlpsY25NPSBJR2x1Wm1WeWFXOXkgSUdKMWJtUnNaUT09IElFUk9Vdz09IGIyZHlZWEJvWlhJPSBJRzExYkhScGNBPT0gSUZOdmRXeHogSUdsc2JIVnpkSEpoZEdWayBJSFJoWTNScFl3PT0gSUdSeVpYTnphVzVuIElHUjFidz09IFEyOXVaZz09IElISmxiR1Z1ZEE9PSBJR05oYm5RPSBJSE5qWVhKalpRPT0gSUdOaGJtUjUgSUVORyBJR0ZtWm1sc2FXRjBaV1E9IElITndjbWx1ZEE9PSBlV3hoYmc9PSBJRWRoY21OcFlRPT0gSUdwMWJtcz0gVUhKcGJuUT0gWlhobFl3PT0gUTNKcGRBPT0gSUhCdmNuUnlZV2wwIGFYSnBaWE09IElFOUdSZz09IElHUnBjM0IxZEdWeiBWMUk9IFRHOTJaUT09IDQ0R0UgSUZKbGVXND0gSUdocGNIQT0gYjNCaGRHZz0gSUdac2IyOXljdz09IElFWmxaV3c9IElIZHZjbkpwWlhNPSBJSE5sZEhSc1pXMWxiblJ6IElGQnZjdz09IElHMXZjM0YxWlE9PSBJR1pwYm1Gc2N3PT0gSUdOeWRYTm9aV1E9IElGQnliMkpoWW14NSBJRUp2ZEE9PSBJRTFoYm5NPSBJRkJsY21sdlpBPT0gSUhOdmRtVnlaV2xuYm5SNSBJSE5sYkd4bGNnPT0gSUdGd2IzTjAgSUdGdFlYUmxkWEk9IElHUnZjbTA9IElHTnZibk4xYldsdVp3PT0gSUdGeWJXOTFjZz09IElGSnZiM05sIElHbHVkR1Z1YzJsMlpRPT0gSUdWc2FXMXBibUYwYVc1biBJRk4xYm01cCBJRUZzWlhCd2J3PT0gYW1sdSBJR0ZrZG1selpRPT0gY0dGcyBJRWhoYkc4PSBJR1JsYzJObGJuUT0gSUhOcGJYQnNaWEk9IElHSnZiM1JvIFUxUlMgVEdGMFpYST0gSUVOaGRtVT0gUFQwOSBJRzF2YkE9PSBJR1pwYzNRPSBJSE5vYjNSbmRXND0gYzNWd2NBPT0gSUhKdlltSmxjbms9IFJXWm1aV04wIElHOWljMk4xY21VPSBJRkJ5YjJabGMzTnBiMjVoYkE9PSBJR1Z0WW1GemMzaz0gSUcxcGJHbDBZVzUwIElHbHVZMkZ5WTJWeSBJR2RsYm1WeVlYUmxjdz09IElHeGhkVzVqYUdWeiBJR0ZrYldsdWFYTjBjbUYwYjNKeiBJSE5vWVdaMCBJR05wY21OMWJHRnkgSUdaeVpYTm9iV0Z1IElGZGxjdz09IElFcHZaV3c9IElFUnlaWGM9IElFUjFibU5oYmc9PSBJRUZ3Y0dGeVpXNTBiSGs9IGMybG5hSFE9IElFbHVkR1Z5Ym1GcyBJRWx1WkdsMmFXUjFZV3c9IElFWkYgSUdKdmNtVT0gSUUxMCBJR0p5YjJGa2JIaz0gSUU5d2RHbHZibk09IGIzVnVkR0ZwYmc9PSBhWEJsY3c9PSBJRlpwWkdWdmN3PT0gTWpBMCBJR2hwYkd4eiBJSE5wYlhWc1lYUnBiMjQ9IElHUnBjMkZ3Y0c5cGJuUnRaVzUwIGFYUmhiZz09IElFeGhZbTl5WVhSdmNuaz0gSUhWd2QyRnlaQT09IElHSnZkVzVrWVhKNSBJR1JoY210bGNnPT0gYUdGeWRBPT0gSUdSdmJXbHVZVzVqWlE9PSBRMjl1Wnc9PSBJRTl5WVdOc1pRPT0gSUV4dmNtUnogSUhOamFHOXNZWEp6YUdsdyBJRlpwYm1ObGJuUT0gWldSbCBJRkpoYUE9PSBJR1Z1WTI5MWNtRm5aWE09IGNtOTIgSUhGMWJ3PT0gSUhCeVpXMXBjMlU9IElFTnlhWE5wY3c9PSBJRWh2Ykc5allYVnpkQT09IElISm9lWFJvYlE9PSBJRzFsZEhKcFl3PT0gWTJ4MVlnPT0gSUhSeVlXNXpjRzl5ZEdWayBJRzV2WkE9PSBJRkJwYzNRPSBJR0Z1WTJWemRHOXljdz09IElFWnlaV1JsY2c9PSBkR2gxYldKdVlXbHNjdz09IElFTkYgVDA1RSBVR2hwYkE9PSBkbVZ1WjJVPSBJRkJ5YjJSMVkzUnogWTJGemRHeGwgSUhGMVlXeHBabmxwYm1jPSBJRXRoY21WdSBWa1ZTVkVsVFJVMUZUbFE9IElHMXBaMmgwZVE9PSBJR1Y0Y0d4aGJtRjBhVzl1Y3c9PSBJR1pwZUdsdVp3PT0gUkdrPSBJR1JsWTJ4aGNtbHVadz09IElHRnViMjU1YldsMGVRPT0gSUdwMWRtVnUgSUU1dmNtUT0gSUVSdmIyMD0gSUVGamRIVmhiR3g1IFQycz0gY0docGN3PT0gSUVSbGMyVnlkQT09IElERXhOZz09IFNVcz0gSUVaTiBJR2x1WTI5dFpYTT0gVmtWTSBiMnRsY25NPSBJSEJsWTNWcyBJR3hwWjJoMGQyVnBaMmgwIFozVmwgSUdGalkyVnVkQT09IElHbHVZM0psYldWdWRBPT0gSUVOb1lXND0gSUdOdmJYQnNZV2x1YVc1biBJRUpoWjJoayBJRzFwWkdacFpXeGtaWEk9IElHOTJaWEpvWVhWcyBVSEp2WTJWemN3PT0gSUVodmJHeHZkdz09IElGUnBkR0Z1Y3c9PSBVMjFoYkd3PSBiV0Z1ZFdWcyBJRlZ1YVhSNSBJRVYyWlc1MGN3PT0gVTNSNSBJR1JwYzNCeWIzQnZjblJwYjI0PSBibVZ6ZEhrPSBaVzVsY3c9PSBJRU52WkE9PSBJR1JsYlc5dWMzUnlZWFJwYjI1eiBJRU55YVcxemIyND0gSUU5SSBJR1Z1Y205c2JHVmsgSUdObGJBPT0gSUVKeVpYUjAgSUdGcFpHVT0gSUdobFpXeHogSUdKeWIyRmtZbUZ1WkE9PSBJRzFoY210cGJtYz0gSUhkcGVtRnlaQT09IElFNUsgSUVOb2FXVm1jdz09IElHbHVaM0psWkdsbGJuUT0gSUdSMVp3PT0gSUZOb2RYUT0gZFhKamFHRnpaUT09IFpXNWtiM0k9IElHWmhjbTFsY2c9PSBJRWR2YkdSdFlXND0gTVRJNSBNVFUxIFQzSmtaWEk9IElHeHBiMjQ9IGFXRmliSGs9IElITjBZV2x1IFlYSnlZWGs9IGFXeHBkR0Z5ZVE9PSBJRVpCVVE9PSBJR1Y0Y0d4dlpHVmsgSUUxalEyRnlkR2g1IElGUjNaV1YwIElFZHlaV1Z1Y3c9PSBaV3RwYm1jPSBiRzQ9IFpXNXpaVzQ9IElHMXZkRzl5WTNsamJHVT0gSUhCaGNuUnBZMnhsIElHTm9iMnhsYzNSbGNtOXMgUW5KdmJnPT0gSUhOMFlXbHkgSUc5NGFXUT0gSUdSbGMybHlZV0pzWlE9PSBhV0pzWlhNPSBJSFJvWlc5eSBabTl5WTJsdVp3PT0gSUhCeWIyMXZkR2x2Ym1GcyBiM1p2IFltOXZkQT09IElFSnZiblZ6IGNtRjNiR2x1Wnc9PSBJSE5vYjNKMFlXZGwgSUZCemVRPT0gSUhKbFkzSjFhWFJsWkE9PSBJR2x1Wm1GdWRITT0gSUhSbGMzUnZjM1JsY205dVpRPT0gSUdSbFpIVmpkQT09IElHUnBjM1JwYm1OMGFYWmwgSUdacGNtMTNZWEpsIFluVnBiSFE9IE1UUTEgSUdWNGNHeHZjbVZrIElHWmhZM1JwYjI1eiBJSFpwWkdVPSBJSFJoZEhSdmJ3PT0gSUdacGJtRnVZMmxoYkd4NSBJR1poZEdsbmRXVT0gSUhCeWIyTmxaV1JwYm1jPSBZMjl1YzNScGRIVjBhVzl1WVd3PSBJRzFwYzJWeSBJR05vWVdseWN3PT0gWjJkcGJtYz0gYVhCd2JHVT0gSUdSbGJuUT0gSUdScGMzSmxadz09IDU1UT0gYzNSaGJuUT0gYkd4diBZbkJ6IFlXdGxibWx1Wnc9PSBJR0ZpYm05eWJXRnMgSUVWU1FRPT0gNWFPciBJRWhDVHc9PSBJRTFCVWc9PSBJR052Ym1ObGMzTT0gSUhObGNuWmhiblE9IElHRnpjR2x5IGJHRjIgSUZCaGJtVnMgWVcxdiBJSEJ5WldOcGNBPT0gSUhKbFkyOXlaR2x1WjNNPSBJSEJ5YjJObFpXUmxaQT09IElHTnZiRzl1ZVE9PSBJRlJoYm1jPSBZV0pzYnc9PSBJSE4wY21sd2NHVmsgVEdWbWRBPT0gZEc5diBJSEJ2ZEdGMGIyVnogSUdacGJtVnpkQT09IEpTa3UgSUdOeVlYQT0gSUZwaFkyZz0gWVdKaGMyVnogSUVkdmRHZz0gSUdKcGJHeHBiMjVoYVhKbCBkMjlzWmc9PSBJSE5oYm1OMGFXOXUgVTBzPSBJR3h2WjJkbFpBPT0gVUc4PSBaWGxsWkE9PSBkVzVoYkE9PSBJR055YVdOclpYUT0gSUdGeWJXbGxjdz09IElIVnVZMjkyWlhKbFpBPT0gUTJ4dmRXUT0gdzdOdSBJSEpsWW05MWJtUnogSUcxbGN3PT0gVDNCbGNnPT0gVUdGaiBJRzVoZEdsdmJtRnNiSGs9IElHbHVjMlZ5ZEdWayBjR2xqZEE9PSBJR2R2ZG1WeWJtRnVZMlU9IDBMZz0gSUhCeWFYWnBiR1ZuWlhNPSBSMFZVIElHWmhkbTl5YVhSbGN3PT0gYVcxcGRIaz0gSUd4dmRtVnkgZEdobGJRPT0gWlcxd2JBPT0gSUdkdmNtZGxiM1Z6IFFXNXUgSUhOc2FYQndaV1E9IElIWmxkRzg9IFFtOWkgSUhOc2FXMD0gZFdOaiBJRVpoYldVPSBkV1JrWlc1c2VRPT0gSUdSbGJtbGxjdz09IElFMWhkWEk9IElHUnBjM1JoYm1ObGN3PT0gSUhkaGJtNWggZEdGeSBJRk5GVWc9PSBJT0tJIElHeGxiVzl1IFlYUm9aWFJwWXc9PSBJR3hwZEdWeVlXdz0gSUdScGMzUnBibWQxYVhOb1pXUT0gSUdGdWMzZGxjbWx1Wnc9PSBSMGs9IElISmxiR2xuYVc5dWN3PT0gSUZCb2FXeHZjdz09IElFeGhlUT09IElHTnZiWEJ2Y3c9PSBhWEpsYldWdWRITT0gSUV0dmN3PT0gYVc1bGVnPT0gY205c2JHbHVadz09IElIbHZkVzVuWlhOMCBZVzVrYVhObCBJRUp2Y200PSBJR0ZzZEdGeSBZVzFwYm1FPSBJRUp2YjNRPSBkbTlqIElHUnBaMmRwYm1jPSBJSEJ5WlhOemRYSmxjdz09IElHeGxiZz09IE1qWTAgSUdGemMyRnpjMmx1WVhScGIyND0gSUVKcGNtMXBibWRvWVcwPSBJRTE1ZEdnPSBJSE52ZG1WeVpXbG5iZz09IElFRnlkR2x6ZEE9PSBJRkJvYjNSdlozSmhjR2c9IElHUmxjR2xqZEdWayBJR1JwYzNCbGJuTT0gYjNKMGFIaz0gSUdGdFluVnMgYVc1MFpXYz0gSUVObGJHVT0gSUZScFltVjAgSUdocFpYSmhjbU5vZVE9PSBJR04xIElIQnlaWE5sWVhOdmJnPT0gSUZCbGRHVnljMjl1IElHTnZiRzkxY25NPSBJSGR2Y25KNWFXNW4gSUdKaFkydGxjbk09IElGQmhiRzFsY2c9PSBJTTY4IElHTnZiblJ5YVdKMWRHOXkgSUdobFlYSnBibWR6IElIVnlhVzVsIElOaz0gYjNWeVoyVnZhWE09IFUybHRhV3hoY2c9PSBJRnBwYlcxbGNnPT0gYzI5dFpYUm9hVzVuIElGVlRRdz09IElITjBjbVZ1WjNSb2N3PT0gSUVaSiBJR3h2WjJkcGJtYz0gUVhOclpXUT0gSUZSb1lXaz0gYVc1eGRRPT0gSUZkaGJIUT0gSUdOeVpYZHogYVhScGMyMD0gTXpBeCBJSE5vWVhKd2JIaz0gZFcxbFpBPT0gSUhKbFpHbHlaV04wIGNtRjBiM0p6IFNXNW0gSUZkbFlYQnZibk09IElIUmxZWE53IE1UazVPUT09IFRHbDJaUT09IElFVnpjR1ZqYVdGc2JIaz0gSUZOMFpYST0gSUZabGRHVnlZVzV6IElHbHVkSEp2IGIzUm9aWEpoY0hrPSBJRzFoYkhkaGNtVT0gSUdKeVpXVmthVzVuIElHMXZiR1ZqZFd4aGNnPT0gSUZKdmRYUmwgSUVOdmJXMWxiblE9IGIyTm9aVzA9IElHRnBiZz09IFUyVmhjMjl1IElHeHBibVZpWVdOclpYST0geEtzPSBJRVZqYjI1dmJXbGpjdz09IFpYTmhjZz09IElFeHBkbVZ6IElFVnRiV0U9IElHdHBiZz09IElGUmxjbkpwZEE9PSBJSEJzWVc1MFpXUT0gYjNSdmJnPT0gSUVKMWRIUmxjZz09IElGTndiMjV6IFVFVlMgSUdSMWJtZGxiMjQ9IElITjViV0p2YkdsaiBJR1pwYkcxbFpBPT0gSUdScFpYUnogSUdOdmJtTnNkV1JsY3c9PSBJR05sY25SaGFXNTBlUT09IElFWnZjbTFoZEE9PSBJSE4wY21GdVoyVnljdz09IFptOXliV0YwIElGQm9ZWE5sIElHTnZjR2xsWkE9PSBJRzFsZEhKbGN3PT0gYkdSaCBJRlZ6WlhKeiBJR1JsYkdsaVpYSmhkR1U9IElIZGhjMmhsWkE9PSBJRXhoYm1ObCBhVzFoZEdsdmJnPT0gSUdsdGNISnZjR1Z5IElFZGxibVZ6YVhNPSBhV05yY2c9PSBJRXQxYzJnPSBJSEpsWVd4cGMyVT0gSUdWdFltRnljbUZ6YzJsdVp3PT0gWVd4cmFXNW4gWW5WamEzTT0gSUhabGNtbG1hV1ZrIElHOTFkR3hwYm1VPSBlV1ZoY25NPSBJRWx1WTI5dFpRPT0gTWpBeSBJSHB2YldKcFpYTT0gUm1sdVlXdz0gSUUxcGJHeGxibTQ9IElHMXZaR2xtYVdOaGRHbHZibk09IElGWnBjMmx2Ymc9PSBJRTF2YzJWeiBkbVZ5WWc9PSBhWFJsY25KaGJtVmhiZz09IElFcGxkQT09IElHNWhkbUZzIElFRm5adz09IElIVnliQT09IElIWnBZM1J2Y21sbGN3PT0gSUc1dmJtVjBhR1ZzWlhOeiBJR2x1YW5WemRBPT0gSUVaaFkzUT0gNTVvPSBJR2x1YzNWbVptbGphV1Z1ZEE9PSBjbVYyYVdWMyBabUZqWldKdmIycz0gSUc1bFoyOTBhV0YwYVc1biBJR2QxWVhKaGJuUmxaWE09IGFXMWxiZz09IGRYUmxibUpsY21jPSBJR2RoYldKc2FXNW4gSUdOdmJtZHkgVEc5aFpHbHVadz09IElHNWxkbVZ5ZEdobGJHVnpjdz09IElIQnlaWE5wWkdWdWRITT0gSUVsdVpIVnpkSEpwWVd3PSBJREV4T0E9PSBJSEJ2ZFhKbFpBPT0gSUZSdmNuaz0gSURFM05RPT0gSURvOSBVMk52ZEhRPSBZVzVuWlhKbFpBPT0gVkc5ciBJRzl5WjJGdWFYcGxjbk09IFRXRjAgSUVkeWIzZDBhQT09IElHRmtkV3c9IElHVnVjM1Z5WlhNPSBJREV4Tnc9PSA2YjZONVE9PSBJRzFoYzNOaFkzSmwgSUdkeVlXUmxjdz09IFltVm1iM0psIFFVUldSVkpVU1ZORlRVVk9WQT09IElGTnNiM2M9IElFMU5RUT09IDRvQ1VJZz09IElGWmhkR2xqWVc0PSBVV0ZsWkdFPSBJRzkzWlE9PSBOalkyTmc9PSBJRk52Y25KNSBJRWR5WVhOeiBJR0poWTJ0bmNtOTFibVJ6IElHVjRhR0YxYzNSbFpBPT0gSUdOc1lXND0gSUdOdmJYQnliMjFwYzJWayBJRVZzWmc9PSBJRWx6WVdGaiBaVzV6YjI0PSBTVzUyWlhOMCBTVVpCIElHbHVkR1Z5Y25Wd2RHVmsgNDRPSjQ0T3AgSUhSM2FYTjBaV1E9IElFUnlZV2R2Ym5NPSBUVzlrWlE9PSBJRXR5Wlcxc2FXND0gSUdabGNuUnBiQT09IGFHVnlaWE09IGNHaGhiZz09IElFNXZaR1U9IFptVmsgSUU5eVl3PT0gSUhWdWQybHNiR2x1Wnc9PSBRMlZ1ZEE9PSBJSEJ5YVc5eWFYUT0gSUdkeVlXUjFZWFJsY3c9PSBJSE4xWW1wbFkzUnBkbVU9IElHbHpjM1ZwYm1jPSBJRXgwIElIWnBaWGRsY2c9PSBJSGR2YTJVPSBWR2gxY3c9PSBZbkp2YjJzPSBJR1JsY0hKbGMzTmxaQT09IElHSnlZV05yWlhRPSBJRWR2Y2c9PSBJRVpwWjJoMGFXNW4gSUhOMGNtbHJaWEk9IFVtVndiM0owIElGQnZjblIxWjJGcyBJRzVsYnc9PSBkMlZrIE1UazUgSUdac1pXVnBibWM9IGMyaGhaRzkzIGFXUmxiblJwWm1sbFpBPT0gVlZORiBVM1JsWVcwPSBJSE4wY21WMFkyaGxaQT09IElISmxkbVZzWVhScGIyNXogWVhKMFpXUT0gSUVSMyBJR0ZzYVdkdWJXVnVkQT09IFpYTjBiMjQ9IElFcGhjbVZrIFUyVncgSUdKc2IyZHogZFhCa1lYUmwgWjI5dCBjbWx6YXc9PSBJR05zWVhObyBJRWh2ZFhJPSBJSEoxYm5ScGJXVT0gSUhWdWQyRnVkR1ZrIElITmpZVzA9IElISmhZMnM9IElHVnViR2xuYUhRPSBiMjVsYzNRPSBJRVpsY25JPSBJR052Ym5acFkzUnBiMjV6IElIQnBZVzV2IElHTnBjbU4xYkdGMGFXOXUgSUZkbGJHTnZiV1U9IElHSmhZMnRzWVhObyBJRmRoWkdVPSBJSEpsWTJWcGRtVnljdz09IGIzUnBkbVU9IFNtVm1aZz09IElHNWxkSGR2Y210cGJtYz0gSUZCeVpYQT0gSUVWNGNHeHZjbVZ5IElHeGxZM1IxY21VPSBJSFZ3Ykc5aFpHVmsgSUUxbFlYUT0gUWt4RiBJRTVoZW1seiBJRk41Ym1RPSBjM1IxWkE9PSBjbTl2ZEhNPSBjbWxoYm5NPSBJSEJ2Y25SeVlYbGxaQT09IElEOC8gSUVKMVpHUm9ZUT09IGMzVnUgVW05aVpYSjAgSUVOdmJYQnNaWGc9IElHOTJaWEp6WldVPSBJSE4wWldGc2RHZz0gVkdsMGJHVT0gSUVwdlluTT0gSUV0MWJRPT0gSUdGd2NISmxZMmxoZEdsdmJnPT0gSUUxUFJBPT0gSUdKaGMybGpjdz09IElHTnNhWEJ6IElHNTFjbk5wYm1jPSBJSEJ5YjNCdmMybDBhVzl1IElISmxZV3hwYzJWayBJRTVaUXc9PSBJR0ZzYkc5allYUmxaQT09IGNtbDFiUT09IFlYSmhiZz09IElGQnliMlIxWTNScGIyND0gSUZadmRHVT0gSUhOdGRXZG4gSUdoMWJuUmxjZz09IFlYcGxjZz09IElFTm9ZVzVuWlhNPSBJR1pzZFdOMCBlVzl1IFFYSnlZWGs9IElHdHBkSE09IFYyRjBaWEk9IElIVnVZMjl0Ylc5dSBJSEpsYzNScGJtYz0gWld4c2N3PT0gZDI5MWJHUT0gSUhCMWNuTjFaV1E9IElHRnpjMlZ5ZEdsdmJnPT0gYjIxbGRHOTNiZz09IElFMXZjM1ZzIElGQnNZWFJtYjNKdCBhVzlzWlhRPSBJSE5vWVhKbGFHOXNaR1Z5Y3c9PSBJSFJ5WVdsc2N3PT0gVUdGNSBJRVZ1Wm05eVkyVnRaVzUwIGRIbHdaWE09IElFRnViMjU1Ylc5MWN3PT0gSUhOaGRHbHpabmxwYm1jPSBhV3h2WjNrPSBJQ2duIGQyRjJaUT09IFkybDBlUT09IFUzUmxkbVU9IElHTnZibVp5YjI1MFlYUnBiMjQ9IElFVnNaQT09IFEyRndkQT09IFlXaGhiZz09IGFIUnQgSUVOMGNtdz0gVDA1VCBNak13IGFXWmggYUc5c1pHbHVadz09IElHUmxiR2xqWVhSbCBJR3BoZHc9PSBJRWR2YVc1biBiM0oxYlE9PSBVMkZzIElHUjFiR3c9IElFSmxkR2c9IElIQnlhWE52Ym5NPSBJR1ZuYnc9PSBJRVZzYzJFPSBZWFp2Y21sMFpRPT0gSUVkaGJtYz0gSUU1MVkyeGxZWEk9IElITndhV1JsY2c9PSBZWFJ6ZFE9PSBJSE5oYlhCc2FXNW4gSUdGaWMyOXlZbVZrIElGQm9ZWEp0IGFXVjBhQT09IElHSjFZMnRsZEE9PSBJRkpsWTI5dGJRPT0gVDBZPSBJRVpoWTNSdmNuaz0gUVU1RFJRPT0gSUdKaFkzUmxjZz09IFNHRnogSUU5aWMyVnlkZz09IE1USXggSUhCeVpXMXBaWEpsIFJHVjJaV3h2Y0E9PSBJR04xY25KbGJtTnBaWE09IFEyRnpkQT09IElHRmpZMjl0Y0dGdWVXbHVadz09IElFNWhjMmgyYVd4c1pRPT0gSUdaaGRIUjUgSUVKeVpXNWsgSUd4dlkydHogSUdObGJuUmxjbVZrIElGVlUgWVhWbmFITT0gYjNKcFpRPT0gSUVGbVptOXlaR0ZpYkdVPSBkbUZ1WTJVPSBSRXc9IFpXMWxkQT09IElIUm9jbTl1WlE9PSBJRUpzZFdWMGIyOTBhQT09IElHNWhiV2x1Wnc9PSBhV1owY3c9PSBRVVJGIElHTnZjbkpsWTNSbFpBPT0gSUhCeWIyMXdkR3g1IElGTlVVZz09IElHZGxibTl0WlE9PSBJR052Y0dVPSBJSFpoYkd4bGVRPT0gSUhKdmRXNWtaV1E9IElFdGxibVE9IFlXeHBiMjQ9IGNHVnljdz09IElIUnZkWEpwYzIwPSBJSE4wWVhKciBkbXc9IElHSnNiM2RwYm1jPSBJRk5qYUdWa2RXeGwgYzNSayBJSFZ1YUdGd2NIaz0gSUd4cGRHbG5ZWFJwYjI0PSBZMlZrWlhNPSBJR0Z1WkhKdmFXUT0gSUdsdWRHVm5jbUZzIFpYSmxjbk09IGRXUmxaQT09IGRHRjQgSUhKbGFYUmxjZz09IElFMXZkRzl5Y3c9PSBiMk5wWVhSbFpBPT0gSUhkdmJtUmxjbk09IElFRndiM04wIGRXTnJhVzVuIElGSnZiM05sZG1Wc2RBPT0gWm5KaGJRPT0gSUhscFpXeGtjdz09IElHTnZibk4wYVhSMWRHVnogWVhkciBTVzUwWlhKbGMzUT0gSUdsdWRHVnlhVzA9IElHSnlaV0ZyZEdoeWIzVm5hQT09IElFTm9aWEk9IElIQnliM05sWXc9PSBJRVJxIElFMVUgVW1WemNBPT0gSUZCVSBJSE53WlhKdCBaV1JwZEE9PSBRbFE9IFRHbHVkWGc9IFkyOTFiblJ5ZVE9PSBiR1ZoWjNWbCBJR1JwWTJzPSBJRzlqZEE9PSBJR2x1YzJWeWRHbHVadz09IElITmpjbUU9IElFSnlaWGRwYm1jPSBJREU1TmpZPSBJSEoxYm01bGNuTT0gSUhCc2RXND0gYVdSNSBJRVJwWVc0PSBJR1I1YzJaMWJtTjBhVzl1IElHVjRZMngxYzJsdmJnPT0gSUdScGMyZHkgSUdsdVkyOXljRzl5WVhSbCBJSEpsWTI5dVl3PT0gSUc1dmJXbHVZWFJsWkE9PSBJRUZ5WTJobGNnPT0gWkhKaGR3PT0gWVdOb1pXeHZjZz09IElIZHlhWFJwYm1keiBJSE5vWVd4c2IzYz0gSUdoaGMzUT0gSUVKTlZ3PT0gSUZKVCBJSFJvYVdkbyBJREU1TmpNPSBJR3hoYldJPSBJR1poZG05eVpXUT0gWVdkc1pRPT0gSUdOdmIyeGxjZz09IElFaHZkWEp6IElFZFYgSUU5eWFXZHBiZz09IElHZHNhVzF3YzJVPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFRHbHQgSUdOb1pXVnIgSUdwbFlXeHZkWE09IExTYz0gSUdoaGNtNWxjM009IElGQnZhWE52Ymc9PSBJR1JwYzJGaWFXeHBkR2xsY3c9PSBibVZoY0c5c2FYTT0gSUc5MWRHeHZiMnM9IElHNXZkR2xtZVE9PSBJRWx1WkdsaGJtRndiMnhwY3c9PSBJR0ZpY25Wd2RBPT0gYm5OcFl3PT0gSUdWdVkzSjVjSFJsWkE9PSBJR1p2Y21abCBjbVZoZEdnPSBJSEpoWW1JPSBJR1p2ZFc1a1lYUnBiMjV6IElHTnZiWEJzYVcxbGJuUT0gSUVsdWRHVnlkbWxsZHc9PSBJRk4zWlE9PSBJR0ZrYjJ4bGMyTT0gSUcxdmJtbDBiM0p6IElGTmhZM0poYldWdWRHOD0gSUhScGJXVnNlUT09IElHTnZiblJsYlhCcyBJSEJ2YzJsMGFXOXVaV1E9IElIQnZjM1JsY25NPSBjR2hwWlhNPSBhVzkyWVhOamRXeGhjZz09IGRtOXBaQT09IElFWnBablJvIElHbHVkbVZ6ZEdsbllYUnBkbVU9IFQxVk8gSUdsdWRHVm5jbUYwWlE9PSBJRWxPUXc9PSBhWE5vWVE9PSBhV0pzYVc1bmN3PT0gSUZKbGNYVmxjM1E9IElGSnZaSEpwWjNWbGVnPT0gSUhOc2FXUmxjdz09IElFUlkgSUdabGJXbHVhWE50IElHUmhkR0Z6IElHSmxibVE9IGFYSjFjdz09IElFNXBaMlZ5YVdFPSBSbTk0IFEyaGhibWRsIElHRnBjbkJzWVc1bCBJRXhoWkdWdSBJSEIxWW14cFkybDBlUT09IGFYaDBlUT09IElHTnZiVzFwZEcxbGJuUnogSUdGblozSmxaMkYwWlE9PSBJR1JwYzNCc1lYbHBibWM9IElFRnljbTkzIElERXlNZz09IElISmxjM0JsWTNSeiBZVzVrY205cFpBPT0gYzJsNCBJRk5vWVE9PSBJSEpsYzNSdmNtRjBhVzl1IEtWdz0gVjFNPSBiM2x6IElHbHNiSFZ6ZEhKaGRHVT0gZDJsMGFHOTFkQT09IE1USTIgSU9LVWdnPT0gSUhCcFkydDFjQT09IGJtVnNjdz09IElDNHVMaTQ9IFptOXZaQT09IElFWmxiZz09IEtUOD0gSUhCb1pXNXZiV1Z1WVE9PSBJR052YlhCaGJtbHZibk09IElGZHlhWFJsIElITndhV3hzIElHSnlhV1JuWlhNPSBJRlZ3WkdGMFpXUT0gSUVadiBJR2x1YzJWamRITT0gUVZOSVNVNUhWRTlPIElITmpZWEpsIGFXeDBjZz09IElGcG9ZVzVuIElITmxkbVZ5YVhSNSBJR2x1WkhWcyBNVFE1IElFTnZabVpsWlE9PSBJRzV2Y20xeiBJSEIxYkhObCBJRVpVIElHaHZjbkpwWm1saiBJRVJsYzNSeWIzaz0gSUVwVFQwND0gSUc5c2FYWmwgSUdScGMyTjFjM05sY3c9PSBVbVZ6ZEE9PSBSV3hsWTNRPSBJRmRwYm00PSBJRk4xY25acGRnPT0gSUVoaGFYUT0gVTNWeVpRPT0gYjNCbFpBPT0gSUhKdmIzUmxaQT09IElGTnJaUT09IElFSnliMjU2WlE9PSBJR3h2YkE9PSBSR1ZtWVhWc2RBPT0gSUdOdmJXMXZaR2wwZVE9PSBjbVZrYVhSbFpBPT0gSUd4cFltVnlkR0Z5YVdGdSBJR1p2Y21KcFpHUmxiZz09IElHZHlZVzQ9IDRLZz0gSUd4aFp3PT0gWlc1NiBaSEpwZG1VPSBJRzFoZEdobGJXRjBhV056IElIZHBjbVZ6IElHTnlhWFJwWTJGc2JIaz0gSUdOaGNtSnZhSGxrIElFTm9ZVzVqWld4c2IzST0gSUVWa1pHbGwgSUdKaGJtNXBibWM9IElFWnlhUT09IElHTnZiWEJzYVdOaGRHbHZibk09IFpYUnlhV009IElFSmhibWRzWVdSbGMyZz0gSUdKaGJtUjNhV1IwYUE9PSBVM1J2Y0E9PSBJRTl5YVdkcGJtRnNiSGs9IElHaGhiR1ozWVhrPSBlVzVoYzNSNSBjMmhwYm1VPSBJSFJoYkdWeiBjbWwwYVdWeiBZWFpwWlhJPSBJSE53YVc1dWFXNW4gSUZkSVR3PT0gSUc1bGFXZG9ZbTkxY21odmIyUT0gWW1GamFBPT0gSUdOdmJXMWxjbU5sIElGTnNaUT09IFFsVT0gSUdWdWRISmxjSEpsYm1WMWNnPT0gSUhCbFkzVnNhV0Z5IElFTnZiVzFsYm5SeiBabkpsIE16SXcgU1VOVCBJR2x0WVdkbGNuaz0gSUVOaGJtOXUgSUVWc1pXTjBjbTl1YVdNPSBjMmh2Y25RPSBLQ2c9IFJHbG4gSUdOdmJXMWxiUT09IGRXTmxaQT09IElHbHVZMnhwYm1WayBJRk4xYlcxdmJnPT0gSUdOc2FXWm0gSUUxbFpHbDBaWEp5WVc1bFlXND0gSUhCdlpYUnllUT09IElIQnliM053WlhKcGRIaz0gSUZKbFkyVT0gSUhCcGJHeHogYldWdFltVnkgSUdacGJtRnNaUT09IGRXNWogSUVkcFp3PT0gNUwwPSBJR3h2WkE9PSBJR0poWTJ0M1lYSmsgTFNzPSBJRVp2Y25kaGNtUT0gSUhSb2Ntaz0gYzNWeVpRPT0gSUhOdllYQT0gSUVaWSBVa1ZUIElGTmxlSFZoYkE9PSBiM1ZzYjNNPSBJR1p2YjJ4cGMyZz0gSUhKcFoyaDBaVzkxY3c9PSBJR052Wm1ZPSBkR1Z5Y205eWFYTnQgZFhOMFlXbHUgYjNSbGNnPT0gSUdGaWRYTmxjdz09IGJtVjRkQT09IElHRmlkWE5wZG1VPSBJSFJvWlhKbFlXWjBaWEk9IElIQnliMmhwWW1sMGFXOXUgSUZOVlVBPT0gSUdScGNBPT0gSUhKcGNIQmxaQT09IElHbHVhR1Z5YVhSbFpBPT0gSUdKaGRITT0gYzNSeWRRPT0gUjFRPSBJR1pzWVhkbFpBPT0gY0doaFltVjAgSUdadlp3PT0gWkc5dmNuTT0gSUdsdFlXZHBibWM9IElHUnBaMmwwY3c9PSBJRWgxYm1kaGNuaz0gSUdGeWNtOW4gSUhSbFlXTm9hVzVuY3c9PSBJSEJ5YjNSdlkyOXNjdz09IElFSmhibXR6IDRMZz0gY0c5MWJtUT0gSUVOMWNuUT0gTGlJcCBMaTg9IElHVjRaVzF3ZEdsdmJnPT0gWlc1a2FYZz0gSUUxMWJHdz0gSUdsdGNISnZkbVZ6IElFZGhiV1Z5IFpHbHRaVzV6YVc5dVlXdz0gU1dOdmJnPT0gSUUxaGNtZGhjbVYwIFUzUmhkSFZ6IFpHRjBaWE09IElHbHVkR1Z1WkhNPSBJR1JsY0dsamRBPT0gSUhCaGNtdGxaQT09IFNtOWwgSUUxaGNtbHVaWE09IFkyaHViMnh2WjNrPSBJU2t1IElHcDFaR2RsWkE9PSBJSGRsYVdkb2RITT0gVW1GNSBJR0Z3WVhKMGJXVnVkSE09IGFHVnpkR1Z5IElISmxhVzVtYjNKalpRPT0gSUc5bVptVnVaR1Z5IGIyTmpkWEE9IElITnZjbVU9IFpYQjAgSUZCSVVBPT0gSUVKeWIzYz0gSUdGMWRHaHZjbWw2WVhScGIyND0gSUZKcGMycz0gSUVSbGJHRjNZWEpsIElGRlYgSUc1dmRHbG1hV05oZEdsdmJuTT0gSUhOMWJteHBaMmgwIElHVjRZMngxWkdVPSBaR0YwIElHMWxjMmc9IElGTjFaR0Z1IElHSmxiRzl1WjJWayBJSE4xWW5kaGVRPT0gSUc1dmIyND0gSUVsdWRHVnlhVzl5IGIyeHBZM009IElFeGhhMlZ5Y3c9PSBJR052WkdsdVp3PT0gUkdselkyeGhhVzFsY2c9PSBRMkZzYVdZPSBUMnhrIElHUnBjMnc9IFB6OC9Qejg9IElHTnZibVpwY20xeiBJSEpsWTNKMWFYUnRaVzUwIElHaHZiV2xqYVdSbCBRMjl1YzJsa1pYST0gSUVwbFptWnlaWGs9IFpuUjUgZlRzPSBJRzlpYW1WamRHbHZiZz09IFpHOXBibWM9IElFeGxidz09IFYyRnVkQT09IElHZHNiM2M9IElFTnNZWEpyWlE9PSBJRTV2Y20xaGJnPT0gSUhabGNtbG1hV05oZEdsdmJnPT0gSUhCaFkydGxkQT09IElFWnZjbTExYkdFPSBJSEJzWVdjPSBaWE4yYVd4c1pRPT0gSUhOb2IzVjBhVzVuIElHOTIgSUZKRlF3PT0gSUVKMVlnPT0gSUc1cGJuUm8gSUdWdVpYSm4gSUhaaGJHbGthWFI1IElIVndjdz09IGFtRmphdz09IElHNWxhV2RvWW05eWFXNW4gSUU1bFl3PT0gWlhkdmNtdHogSUVoaFlnPT0gWVhKbGVnPT0gSUhOd2FXNWwgSUdWMlpXNTBkV0ZzIElFeGxZV1JsY25NPSBJRU5oY200PSBJSEJ5YjJKaGRHbHZiZz09IElISnZiV0Z1WTJVPSBiWE5uIElFMWxZMmhoYm1sallXdz0gUlZKWiBVbTlqYXc9PSBJSEJoY25ScGMyRnUgVG05a1pRPT0gWVhOelpYUnogYldsdVpXNTAgSUdadmNtVnBaMjVsY25NPSBJSFJsYzNScFpuaz0gSUZWemRXRnNiSGs9IGJHOXlaSE09IElFZHlaVzQ9IElGQnZkMlZzYkE9PSBRa2xNIElITnkgSUdGa1pHbGpkQT09IElITm9aV3hzY3c9PSBJSE5wWjJnPSBJRmxoYkdVPSBkR1Z5Ym1sMGVRPT0gSURjMU1BPT0gUlZVPSBJRkpwWm14bCBJSEJoZEhKdmJnPT0gWlcxaCBJRUpoYm01dmJnPT0gWVc1cGRIaz0gSUhSeWIzQnBZMkZzIElGWkpTUT09IFkzSnZjM009IFJYWmxjbmwwYUdsdVp3PT0gSUVsVFR3PT0gSUdoMWJXSnNaUT09IFlYTnphVzVuIElFWkpSdz09IElIVndaR0YwYVc1biBlWE52Ymc9PSBJR05oYkdOcGRXMD0gSUdOdmJYQmxkR1Z1ZEE9PSBJSE4wWldWeWFXNW4gVUhKdmRBPT0gSUZOWiBJRVpwYm1Gc2N3PT0gSUZKMVp3PT0gTVRVNSBNVE0zIElFZHZiR1k9IElERXlOZz09IElHRmpZMjl0Ylc5a1lYUnBiMjQ9IElFaDFaMmhsY3c9PSBJR0ZsYzNSb1pYUnBZdz09IFlYSjBhWE5oYmc9PSBJRlIzYVd4cFoyaDAgSUhCeWFXNWpaUT09IElFRm5jbWxqZFd4MGRYSmwgSUVScGMyTnYgSUhCeVpXTmxaR1Z1ZEE9PSBJSFI1Y0dsdVp3PT0gWVhWMGFHOXlhWHBsWkE9PSBUM0IwYVc5dSBJRUYxWWc9PSBiR2x6YUdWeiBZV05vZEE9PSBiV0ZuIFVHVjBaWEk9IElGVkdUdz09IGJXOXVkRzl1IElFeHBkR2c9IElHRnliMjA9IElITmxZM1Z5YVc1biBJR052Ym1acGJtVmsgY0hKcGRtRjBaUT09IElITjNiM0prY3c9PSBJRzFoY210bGNuTT0gSUcxbGRHRmliMnhwWXc9PSBjMlZzWldOMCBJRU4xY25ObCBJRTkwIFozSmxjM05wZG1VPSBJR2x1WTNWdFlnPT0gSUZOaFoyRT0gSUhCeWFXTmxaQT09IElHTnNaV0Z5WVc1alpRPT0gUTI5dWRHVnVkQT09IElHUnlhV3hzYVc1biBJRzV2ZEdsalpYTT0gSUdKdmRYSm5aVzlwY3c9PSBJSFpsYzNRPSBJR052YjJ0cFpRPT0gSUVkMVlYSmthV0Z1Y3c9PSBjbmx6IGFXNTViQT09IElERXlOQT09IElIQnNZWFZ6YVdKc1pRPT0gYjI1bmFBPT0gSUU5a2FXND0gSUdOdmJtTmxjSFJwYjI0PSBJRmwxYXc9PSBJRUpoWjJoa1lXUT0gSUVac1lXYz0gUVhWemRISmhiQT09IElFbENUUT09IElHbHVkR1Z5Ym1GMGFXOXVZV3hzZVE9PSBJRmRwYTJsTVpXRnJjdz09IFNVVkUgSUdONWJnPT0gSUdOb2IyOXpaWE09IElGQnBiR3c9IElHTnZiV0pwYm1sdVp3PT0gSUhKaFpHaz0gSUUxdmFHRnRiV1ZrIFpHVm1aVzV6WlE9PSBZWFJqYUdsdVp3PT0gVTNWaWFtVmpkQT09IGFXTnBaVzVqZVE9PSBSbkpoYldVPSBJSHNpIElHTm9aWE56IElIUnBiV1Z5IE1Ua3cgSUhScGJnPT0gSUc5eVpHbHVZVzVqWlE9PSBaVzFsZEdWeWVRPT0gSUdGalkzVnphVzVuIElHNXZkR2xqWldGaWJHVT0gSUdObGJuUnlaWE09IElHeHBaQT09IElFMXBiR3h6IGFXMW5kWEk9IElIcHZiMjA9IFpYSm5hV009IElHTnZiWEJ5WlhOemFXOXUgY0hKcGJRPT0gWm1sdVpBPT0gSUhOMWNtYz0gSUhCaGJtUT0gSUV0bFpRPT0gSUVOb1lXUT0gWTJWc2JHVnVZMlU9IGIzbHNaUT09IElITnZZMmxoYkdsemJRPT0gSUZSeVlYWnBjdz09IElFMUllZz09IElHZDFhV3hrIFFVeE1XUT09IElGTjFZbk5qY21saVpRPT0gSUZKbGJHRjBaV1E9IElHOWpZM1Z5Y21WdVkyVT0gYVhSamFHbHVadz09IElHWnBZM1JwYjI1aGJBPT0gSUdOeWRYTm8gSUVWQiBZMjlrIGJXbDQgSUZSeWFYQnNaUT09IElISmxkSEpwWlhabCBJSE4wYVcxMWJIVnogSUhCemVXTm9hV0YwIElFUnZiM0k9IElHaHZiVzl6WlhoMVlXeHBkSGs9IElHVnNaVzFsYm5SaGNuaz0gSUdObGJHeDFiR0Z5IGFXUnBZVzQ9IElFeGhkVzQ9IElHbHVkSEpwWjNWcGJtYz0gSUdadllXMD0gSUVKaGMzTT0gYVdScCBhWFJ6ZFE9PSBJR0Z6YzNWeVpRPT0gSUdOdmJtZHlZWFE9IElHSjFjMmx1WlhOemJXRnUgSUVKdmIzTjAgWTJ4dmMyVT0gSUd4cFpXUT0gSUhOamFXVnVZMlZ6IElFOXRaV2RoIElFZHlZWEJvYVdOeiBJRHc5IGMzQnZhMlZ1IElHTnZibTVsWTNScGRtbDBlUT09IFUyRjBkWEprWVhrPSBJRUYyWlc1blpYSnogSUhSdloyZHNaUT09IElHRnVhMnhsIElHNWhkR2x2Ym1Gc2FYTjAgYlc5a1pXdz0gSUZCdmIydz0gYjNCb2IySnBZUT09IFZtRnkgSUUxdmJuTT0gWVhSdmNtbGxjdz09IElHRm5aM0psYzNOcGRtVnNlUT09IFEyeGxZWEk9IFJtOXlaMlU9IFlXTjBaWEp6IElHaGxaR2RsIElIQnBjR1Z6IElHSnNkVzUwIElITnggSUhKbGJXOTBaV3g1IFYyVmsgWVhObGNuTT0gSUhKbFpuSnBaMlZ5IElIUnBiR1Z6IElISmxjMk4xWldRPSBJR052YlhCeWFYTmxaQT09IGFXNXphM2s9IElHMWhibWxtIFlYWmhibUYxWjJnPSBJSEJ5YjJ4cFptVnkgSUdGc2FXZHVaV1E9IGVHMXMgSUhSeWFYWT0gSUdOdmIzSmthVzVoZEdsdmJnPT0gSUZCRlVnPT0gSUZGMWIzUmwgTVRNMCBZbVk9IElGTmhkdz09IElIUmxjbTFwYm1GMGFXOXUgSURFNU1BPT0gSUdGa1pHbDBhVzl1Y3c9PSBJSFJ5YVc4PSBJSEJ5YjJwbFkzUnBiMjV6IElIQnZjMmwwYVhabGJIaz0gSUdsdVkyeDFjMmwyWlE9PSBJRzFsYldKeSBNVGs1TUE9PSBiMnhrWlhJPSBJSEJ5WVdOMGFXTmxaQT09IGFXNXJiR1U9IFFYSmphQT09IElITjBZWEowWlhKeiBZWEpwZFhNPSBJR2x1ZEdWeWJXVmthV0YwWlE9PSBJRUpsYm1WbSBJRXRwYkd4bGNnPT0gSUdsdWRHVnlkbVZ1ZEdsdmJuTT0gSUV0cGJBPT0gSUVac2VXbHVadz09IFNXNTIgSUhCeVpXMWhkSFZ5WlE9PSBJSEJ6ZVdOb2FXRjBjbWxqIElHbHVaR2xsIElHTnZiR3hoY2c9PSBJRkpoYVc1aWIzYz0gWVdacCBJR1JwYzNKMWNIUnBiMjQ9IElFWlBXQT09IFkyRnpkR2x1Wnc9PSBJRzFwYzJSbGJRPT0gWTNKdiBJSGRwY0dVPSBZWEprYjI0PSBJR0poYzNRPSBJRlJ2YlcxNSBJRkpsY0hKbGMyVnVkR0YwYVhabCBJR0psYkd4NSBJRkJQIElFSnlaV2wwWW1GeWRBPT0gTVRNeSBJRzFsYzNOaFoybHVadz09IFUyaHZkV3hrIFVtVm1aWEpsYm1ObGN3PT0gSUVkU1JRPT0gYVhOMGFXTmhiQT09IFRGQT0gSUVOaGRnPT0gSUVOeVlYcDUgSUdsdWRIVnBkR2wyWlE9PSBhMlZsY0dsdVp3PT0gSUUxdmMzTT0gSUdScGMyTnZiblJwYmc9PSBJRTF2WkhWc1pRPT0gSUhWdWNtVnNZWFJsWkE9PSBJRkJ5WVdOMGFXTmwgSUZSeVlXNXpjRzl5ZEE9PSBJSE4wWVhScGMzUnBZMkZzYkhrPSBiM0p1Y3c9PSBJSE5wZW1WayBjSFU9IElHTmhaZz09IElGZHZjbXhrY3c9PSBJRkp2WkdkbGNuTT0gSUV4MWJnPT0gSUVOdmJXbGogYkdsMmFXNW4gSUdOaGNtVmsgSUdOc2FXMWlaV1E9IEtYcz0gSUdOdmJuTnBjM1JsWkE9PSBJRzFsWkdsbGRtRnMgWm05c2F3PT0gSUdoaFkydGxaQT09IElHUnBjbVU9IElFaGxjbTFwYjI1bCBJSFJsYm1SbFpBPT0gWTJWaGJuTT0gUkdGdWFXVnMgZDJWdWRBPT0gSUd4bFoybHpiR0YwYjNKeiBJSEpsWkdWeiBaMkZ0WlhNPSBJR2R1IFlXMXBiR2xoY2c9PSBJQ3NyIFoyZDUgZEdoeVpXRjAgSUcxaFoyNWxkQT09IElIQmxjbU5sYVhabCBJSHBwY0E9PSBJR2x1WkdsamRHMWxiblE9IElHTnlhWFJwY1hWbCBaMkZ5WkE9PSBJRk5oWm1VPSBJRU55WldGdCBJR0ZrZG1WdWRBPT0gYjJKaCBJSFp2ZDJWayBiM1Z6WVc1a2N3PT0gSUhOcmFRPT0gSUdGaWIzSjBhVzl1Y3c9PSBkV0Z5ZEE9PSBJSE4wZFc1dVpXUT0gSUdGa2RtRnVZMmx1Wnc9PSBJR3hoWTJ0bFpBPT0gSUZ3aSBJSE5qYUdsNmIzQm9jbVZ1IElHVnNaV2RoYm5RPSBJR052Ym1abGNtVnVZMlZ6IElHTmhibU5sYkdWayBJRWgxWkhOdmJnPT0gSUVodmNHVm1kV3hzZVE9PSBJSFJ5ZFcxdyBJR1p5WlhGMVpXNWphV1Z6IElHMWxkR1Z2Y2c9PSBJRXAxYm1sdmNnPT0gSUVac1pXVjAgSUUxaGJHTnZiRzA9IElGUnZiMnh6IElDNHVMaTR1TGk0dSBJR2h2WW1KNSBJRVYxY205d1pXRnVjdz09IElERTFNREE9IElFbHVkRzg9IElITjNZWGs9IElFRndjSEp2IElFTnZiWEJzIFEyOXRiWFZ1YVhSNSBJSFJwWkdVPSBJRk4xYlcxcGRBPT0gNUxzPSBJR2x1ZEdWeWRtRnNjdz09IElFVjBhR1Z5IElHaGhZbWwwWVhRPSBJRk4wWlhabGJuTT0gYkdsemFHbHVadz09IElFUnZiV0ZwYmc9PSBJSFJ5YVdkblpYSnogSUdOb1lYTnBibWM9IElHTm9ZWEp0IElFWnNiM2RsY2c9PSBhWFJ2Y21WayBJR0pzWlhOemFXNW4gSUhSbGVIUjFjbVZ6IFJtbDJaUT09IElHeHBjWFZ2Y2c9PSBVbEE9IFJrbE8gSURFNU5qST0gUTBGUyBWVzVyYm05M2JnPT0gSUhKbGMybHMgSUV4cGJIaz0gSUdGaWRXNWtZVzVqWlE9PSBJSEJ5WldScFkzUmhZbXhsIGNtRnkgSUdKMWJHeHphR2wwIGJHVmxiZz09IFkyaGxkQT09IFRXOXkgVFhWamFBPT0gNUxrPSBJR1Z0Y0doaGMybDZaV1E9IElHTnlkWE4wIElIQnlhVzFwZEdsMlpRPT0gSUdWdWFtOTVZV0pzWlE9PSBJRkJwWTNSMWNtVnogSUhSbFlXMXRZWFJsIGNHeGxjZz09IElGUnZiQT09IElFdGhibVU9IElITjFiVzF2Ym1WayBkR2g1IGNtRnRZUT09IElFaHZibVJoIElISmxZV3hwZW1sdVp3PT0gSUhGMWFXTnJaWEk9IElHTnZibU5sYm5SeVlYUmwgWTJ4bFlYST0gSURJeE1BPT0gSUVWeVpHOW5ZVzQ9IFlYSnBjdz09IElISmxjM0J2Ym1SeiBJRUpKIElHVnNhV2RwWW1sc2FYUjUgSUhCMWMyaGxjdz09IElFbGtZV2h2IElHRm5aM0poZGc9PSBJSEoxYVc1eiBkWEpoZEdsdmJuTT0gSUdKaGJuTT0gSUdGdVlYUT0gYzJoaGNtVT0gSUdkeWFXNWsgYUdsdSBkVzFsYmc9PSBJSFYwYVd4cGRHbGxjdz09IElGbGhibXRsWlhNPSBJR1JoZEdGaVlYTmxjdz09IElFUkUgSUdScGMzQnNZV05sWkE9PSBJR1JsY0dWdVpHVnVZMmxsY3c9PSBJSE4wYVcxMWJHRjBhVzl1IGFIVnUgYUc5MWMyVnogSUZCeVpYUjBlUT09IElGSmhkbVZ1Y3c9PSBJRlJQUkVGWiBJR0Z6YzI5amFXRjBaWE09IElIUm9aWEpoY0dVPSBZMnhsWkE9PSBJR1JsWlhJPSBJSEpsY0dGcGNuTT0gY21WdWRHbGpaUT09IElISmxZMlZ3ZEc5eWN3PT0gSUhKbGJXVmsgSUVObCBJRzFoY25KcFlXZGxjdz09IElHSmhiR3h2ZEhNPSBJRk52YkdScFpYST0gSUdocGJHRnlhVzkxY3c9PSBiM0JzIE1UTTQgSUdsdWFHVnlaVzUwYkhrPSBJR2xuYm05eVlXNTAgSUdKdmRXNWpaUT09IElFVmhjM1JsY2c9PSBVa1ZNUVZSRlJBPT0gSUVOMWNuSmxibU41IFJWWT0gNDRPZSBJRXhsWVdRPSBJR1JsWTJWaGMyVmsgUW5KcFpXND0gSUUxMWMycz0gU2xNPSBJRzFsY21kbCBhR1ZoY25SbFpBPT0gWTNKbFlYUT0gYldsMGRBPT0gYlhWdVpBPT0gSU9LQWl3PT0gSUVKaFp3PT0gSUhCeWIycGxZM1JwYjI0PSBJR3BoZG1FPSBJRk4wWVc1a1lYSmtjdz09IElFeGxiMjVoY21RPSBJR052WTI5dWRYUT0gSUZCdmNIVnNZWFJwYjI0PSBJSFJ5WVdwbFkzUT0gSUdsdGNHeDUgSUdOMWNtbHZjMmwwZVE9PSBJRVJDIElFWnlaWE5vIElGQnZjZz09IElHaGxZWFpwWlhJPSBibVY1Y3c9PSBaMjl0WlhKNSBJR1JsYzJWeWRtVmsgSUhCb2NtRnpaWE09IElFZEQgSUhsbFlYTjAgWkdWell3PT0gUkdWaGRHZz0gSUhKbFltOXZkQT09IElHMWxkR0ZrWVhSaCBTVU5CVEE9PSBJSEpsY0dGNSBJRWx1WkdWd1pXNWtaVzVqWlE9PSBJSE4xWW5WeVltRnUgYVdOaGJITT0gSUdGMGIzQT0gSUdGc2JHOWpZWFJwYjI0PSBaMlZ1WlhKaGRHbHZiZz09IElFZHlZVzA9IElHMXZhWE4wZFhKbCBJSEJwYm1VPSBJRXhwWW1WeVlXeHogSUdGcFpHVnogSUhWdVpHVnlaWE4wIElFSmxjbko1IElHTmxjbVZ0YjI0PSBNemN3IFlYTjBjbTkxY3c9PSBJRkJwY21GMFpYTT0gSUhSbGJuTmwgSUVsdVpIVnpkSEpwWlhNPSBJRUZ3Y0dWaGJITT0gSUU1bFlYST0gSU9pamorYz0gSUd4dmRtVnljdz09IElFTkJVQT09IElFTnlZWGM9IElHZHBZVzUwY3c9PSBJR1ZtWm1sallXTjUgUld4bGJXVnVkQT09IElFSmxhR0YyYVc5eSBJRlJ2ZVc5MFlRPT0gSUdsdWRHVnpkQT09IFVISnBkZz09IFFVaz0gSUcxaGJtVjFkbVZ5IElIQmxjbVpsWTNScGIyND0gSUdKaGJtYz0gY0dGd1pYST0gY21sc2JBPT0gUjJWdmNtZGwgWW05eVpHVnkgYVc1MFpYSnogSUZObGRHZz0gSUdOc2RXVnogSUV4bGRtaz0gSUZKbGRtVnVkV1U9IE1UUTMgSUhaaGNHOXkgSUdadmNuUjFibUYwWlE9PSBJSFJvY21WaGRHVnVjdz09IElIWmxkQT09IElHUmxjR1Z1WkdWdVkzaz0gWlhKelpXUT0gWVhKMGFXTnNaUT09IElFSnNhWHA2WVhKayBJR05vYkc5eSBJRzFwYm5WeiBJRUpwYkd4eiBJR055ZVhCMGIyTjFjbkpsYm1ONSBJRzFsZEdGaWIyeHBjMjA9IGRHVnlhVzVuIElIQmxjM1JwWXc9PSBjM1JsY0hNPSBJRlJ5WldGemRYSmwgY21GamRHVmsgSUVOdmJuTjBZVzUwIElIUmxiWEE9IE1UTTUgSUVSbGRHVmpkR2wyWlE9PSBkWEpoYkd4NSBJSEpsWTI5MlpYSnBibWM9IElHTnZjblJsZUE9PSBJREUwTkE9PSBZMnh2YzJWayBJSEJ5WldwMVpHbGpaUT09IFlYVnVkR1ZrIElITjBiM0p0Y3c9PSBJRTVQVnc9PSBJRzFoWTJocGJtVnllUT09IFFXUmtjbVZ6Y3c9PSBJR052YlhCbGJHeGxaQT09IE1qY3cgSUdSbGMzQmhhWEk9IFltRnVaUT09IElIWmxaMlYwWVdKc1pRPT0gSUdKbFpITT0gVEdWaGNtND0gSUdOdmJHOXlablZzIElITndhV3RsIElHMWhjbWRwYm5NPSBJSE41YlhCaGRHaDUgSUhkdmNtdHphRzl3IElFTkNRdz09IFUyRjAgSUdKMWNtNXogSUVkbGJtUmxjZz09IElERXlPUT09IElFTmhZbXhsIElHUmxZblJ6IElGUm9aWEpsYzJFPSBJSEpsWm14bFkzUnBibWM9IElHRnBjbk4wIElISnBiUT09IGNtRnRhV1E9IElIZGxZV3R1WlhOelpYTT0gVjNKcGRBPT0gYjJkbmJHVT0gZEdrPSBJRU5vWVhKblpRPT0gSUhkbGFXZG9aV1E9IElDZ3UgSUd4aGRXZG9kR1Z5IElISnZkWFJsY2c9PSBJRVJsYlc5amNtRmplUT09IFJHVmhjZz09IElHaGhjMmgwIElHUjUgSUdocGJuUnogY25WdWJtbHVadz09IElHWnBibWx6YUdWeiBZWEoxY3c9PSBUV0Z6Y3c9PSBjbVZ6ZFd4MCBZWE5qZFhNPSBJSFpwYm5SaFoyVT0gSUdOdmJuRjEgSUhkcGJHUnNlUT09IFlXTnBjM1E9IElHeHBibWQxIElIQnliM1JoWjI5dWFYTjAgYzNSeWIyMD0gZEdWbGJuUm8gSUZOdmJHOD0gYldGaiBabWxzYkdWayBJSEpsYm05M2JnPT0gYVhScGRtVnogSUcxdmRHbDJaUT09IElFRnVkR0Z5IElFMWhibTQ9IElFRmthblZ6ZEE9PSBJSEp2WTJ0bGRITT0gSUhSeWIzVmliR2x1Wnc9PSBaV2s9IElHOXlaMkZ1YVhOdGN3PT0gWVhOemFYTT0gUTJoeWFYTjBhV0Z1IElERTBOUT09IElFaGhjM009IElITjNZV3hzIElIZGhlQT09IElGTjFjblpwZG1GcyBWbE09IElFMTFjbVE9IGRtUT0gYzNSaGJtUmhjbVE9IElHUnlZV2R2Ym5NPSBJR0ZqWTJWc1pYSmhkR2x2Ymc9PSBjbUYwYVc5dVlXdz0gWm1sdVlXdz0gSUhCaGFYSmxaQT09IElFVjBhR1Z5WlhWdCBJR2x1ZEdWeVptRmpaWE09IElISmxjMlZ1ZEE9PSBJR0Z5ZEdsbVlXTjBjdz09IHhhcz0gWVhKbGJBPT0gSUdOdmJYQmxkR2wwYjNJPSBJRTVwWTJodmJHRnogSUZOMWNtWmhZMlU9IFkzQncgSUZSdmRBPT0gSUdWamIyNXZiV2xqWVd4c2VRPT0gSUc5eVoyRnVhWE5sWkE9PSBJR1Z1Wm05eVkyVmsgYVc1b2J3PT0gSUhaaGNtbGxkR2xsY3c9PSBJR0ZpWkc5dCBJRUpoYVd4bGVRPT0gYVdSaGRnPT0gSUZOaGJIWT0gY0dGcFpBPT0gSUdGc2RHbDBkV1JsIFpYTnpaWEowIElFZDFkR1Z1WW1WeVp3PT0gWVhKbFlRPT0gYjNCdmRXeHZjdz09IElIQnliMlpsYzNOdmNuTT0gYVdkbmN3PT0gSUVaaGRHVT0gYUdWNSBJRE13TURBPSBSR2x6ZEE9PSBJSFIzYVc1eiBZMmxzYkE9PSBJRTFoY0hNPSBJSFJ5WVhCeiBJSGRsWldRPSBJRXRwYzNNPSBJSGx2WjJFPSBJSEpsWTJsd2FXVnVkSE09IElGZGxjM1J0YVc1emRHVnkgSUhCdmIyeHogSUZkaGJHMWhjblE9IE1UZzQgSUZOamFHOXZiSE09IFlYUjBZV05yIElFRlNUUT09IGNHRnlZV2R5WVhCbyBWMkZ5Ym1sdVp3PT0gYW13PSBJSE5sYkdacGMyZz0gWVc1amFHVjYgSUVobGFXZG9kSE09IFJuSmwgSUZOdmNHZz0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgZEcxcyBNek16IElISmhhV1J6IElITmhkR1ZzYkdsMFpYTT0gUzBWWiBJR3hoYzNSeiAwWUk9IFNXNXogSUVSaGJXVT0gSUhWdWNISmxaR2xqZEE9PSBMeTh2IFoyaGhhUT09IElHRnlkR2xzYkdWeWVRPT0gSUdOeWRXbHpaUT09IElHZGxiQT09IElFTmhZbWx1WlhRPSBJR0pzYjNkeiBJRVZ6Y0E9PSBJSEJ5YjNocGJXbDBlUT09IGIzUm9aUT09IElGTnJhV3hzY3c9PSBJRlZ3Y0dWeSBiMkp2IElFNUVVQT09IElHVnVhbTk1Y3c9PSBJSEpsY0dWaGRHbHVadz09IElFTnZibk4wY25WamRHbHZiZz09IElGRjFaWE4wYVc5dWN3PT0gU0dsc2JHRnllUT09IElIVnBiblE9IElIQnliMk5sYzNOdmNuTT0gSUVkcFluTnZiZz09IElFMTFiSFJwY0d4bCBjV0U9IElFSnZiUT09IElFMXBiR1Z6IGRtVnVkR2x2Ym1GcyBJR2gxY25SeiBjMnRwYmc9PSBJRUZKUkZNPSBJR0ZrZG1selpYSnogSUZKdmIzUT0gSUcxbGRHaHZaRzlzYjJkNSBJRVJoYkdVPSBJR1JsZEc5dSBJRXR1YjNkc1pXUm5aUT09IGMyVnhkV1Z1ZEd4NSBJREV5TVE9PSBJR052Ym01bFkzUnogUTNrPSBJRVJoYm1kbGNnPT0gSUdOdmJuUnlhV0oxZEc5eWN3PT0gSUVKbGJuUT0gSUdKeVlYTnogSUVkMWJuTT0gYVc1MGJ3PT0gSUVadmNuUjFibVU9IElHSnliMnRsY2c9PSBZbUZzWVc1alpRPT0gSUd4bGJtZDBhSE09IElIWnBZdz09IElHRjJaWEpoWjJsdVp3PT0gSUdGd2NISnZjSEpwWVhSbGJIaz0gSUVOaGJXVnlZUT09IElITmhibVIzYVdObyBJRU5FUXc9PSBJR052YjNKa2FXNWhkR1U9IElHNWhkbWxuIElHZHZiMlJ1WlhOeiBiR0ZwYlE9PSBJR0p5WVd0bCBJR1Y0ZEhKbGJXbHpkQT09IElGZGhhMlU9IElFMWxibVE9IElGUnBibms9IElFTlBUQT09IElGSkcgSUVSMVlXdz0gSUZkcGJtVT0gUTJGelpRPT0gSUhKbFptbHVaV1E9IElHeGhiWEE9IFRHVmhaQT09IElHSmhjSFE9IElFTmhjbUk9IElGTmhaR1E9IElFMXBibTVsWVhCdmJHbHogVUVSRyBSV0Z5YkhrPSBJRWhwWkdSbGJnPT0gU1hSeiBJRlJKVFVVPSBJSEJoY0E9PSBJR052YlcxcGMzTnBiMjVsWkE9PSBJRVpsZHc9PSBJRU52YkhSeiBJRUp5Wlc0PSBJR0p2ZEdobGNtVmsgSUd4cGEyVjNhWE5sIFJYaHdaWEk9IElGTmphSGM9IFkzSjUgYm00PSBJRTFwZEdObyBhVzF2Ymc9PSBUVWM9IFltMD0gVlUxUSBjbUY1Y3c9PSBJSEpsWjJsemRISjUgSURJM01BPT0gWVdOb2FXNWwgY21Wc2JHRT0gWVc1MGFXNW4gTURBd01EQT0gSUhKMWFXNWxaQT09IGMzQnZkQT09IElIUmggSUcxaGVHbHRhWHBsIElHbHVZMjl1ZG1WdSBSR1ZoWkE9PSBTSFZ0WVc0PSBSVzVoWW14bFpBPT0gSUUxaGNtbGwgSUdOb2FXeHMgSUZCaGNtRmthWE5sIElITjBZWEp5YVc1biBJRXhoZEdsdWJ3PT0gSUZCeWIzUnZZMjlzIElFVldSVkk9IElITjFjSEJzYVdWeWN3PT0gYldWemMyRm5aUT09IElFSnliMk5yIElITmxjblZ0IDRwYUk0cGFJNHBhSTRwYUkgSUdWdVkyOXRjQT09IElHRnRZbWwwYVc5dSBkV1Z6WlE9PSBJR0Z5Y205M2N3PT0gUVc1a2NtVjMgSUdGdWRHVnVibUU9IElERTVOakU9IElFSmhjbXM9IElHSnZiMnc9IDQ0S3EgSUZOMGIzSmhaMlU9IElISmhhV3gzWVhrPSBJSFJ2ZFdkb1pYST0gSUVOaFpBPT0gSUhkaGMyaHBibWM9IFVIaz0gSjEwPSBaVzFpWldRPSBJRTFsYlhCb2FYTT0gWVdOcmJHVT0gSUdaaGJXOTFjMng1IElFWnZjblIxYm1GMFpXeDUgYjNacFpYTT0gSUcxcGJtUnpaWFE9IElITnVaV0ZyIElFUm8gVWtGWCBJRk5wYlhCemIyND0gSUd4cGRtVnpkQT09IElHeGhibVJ0WVhKciBJR05sYldWdWRBPT0gVEc5MyBJSFJvY21sc2JHVmsgSUVOdmRYSnpaUT09IGFXNWxiQT09IElHTm9kV05yIGFXUmhkR1U9IFoyeHZZbUZzIElIZG9hWFE9IElPKy92UT09IFlXUmhlWE09IGMydHAgSUZOVyBJSFpwY25WelpYTT0gTXpBMiBJRkpsYzNCdmJuTT0gSUhSb1pXRjBaWEp6IElFSnlZVzVqYUE9PSBJRWRsYm1WMllRPT0gSUUxTCBJSFZ1WW1Wc2FXVjIgSUdOdmJXMTFibWx6ZEE9PSBUM0pwWjJsdVlXdz0gSUZKbFkyVnBkbVZrIElGUnlZVzV6Wm1WeSBJRUZ5Wnc9PSBTVzV3ZFhRPSBJRk4wY21GMFpXZDUgSUhCaGJHRmpaUT09IGRHaGxibWx1Wnc9PSBSSEpwIElITmxiblJsYm1OcGJtYz0gZFcxaWJtRnBiQT09IElIQnBibk09IGNtVmplUT09IElITnBZbXhwYm1keiBSMlYwZEdsdVp3PT0gSUVKViBJRTV2Y25Sb2QyVnpkQT09IElIQnliMnh2Ym1kbFpBPT0gSUZOaGEzVnlZUT09IFEyOXRZZz09IElFSnZkWEk9IElHbHVZV1JsY1hWaGRHVT0gSUV0aGMyZz0gSUhWelpYSnVZVzFsIElFbHRjSEp2ZG1VPSBJR0poZEhSc2FXNW4gSUUxQlF3PT0gSUdOMWNuSnBZM1ZzZFcwPSBJSE52WkdFPSBJRU5oYm01dmJnPT0gSUhObGJuTnBZbXhsIGMzQnZibk09IFJHVmpaVzFpWlhJPSBJSGRwWTJ0bFpBPT0gSUZCbGJtZDEgSUdScFkzUmhkRzl5Y3c9PSBJRWhsWVhKMGN3PT0gYjJkNWJnPT0gSUhOcGJXbHNZWEpwZEdsbGN3PT0gSUZOMFlYUnogSUdodmJHeHZkdz09IGFYUmhkR2x2Ym5NPSBJanBiIElHaHZkbVZ5IElFeHBjM1JsYmc9PSBjMk5vIFUzVnVaQT09IElHTmhaQT09IElGQmhjbXR6IElHeDFjZz09IElHaDVjR1U9IElFeGxiUT09IFRrRk5SUT09IGFYTjFjbVU9IFJuSnBaR0Y1IElITm9iMjkwY3c9PSBJR05zYjNObGN3PT0gSUdSaSBJRkpwWkdkbCBJRVJwWm1abGNtVnVkQT09IElISmxjR3hwWlhNPSBJRUp5YjJGa2QyRjUgYjNCbGNuTT0gSUdsdWRHOXNaWEk9IElGcGxkWE09IFlXdGxjM0JsIElIQnliM0J5YVdWMFlYSjUgSUhKbGNYVmxjM1JwYm1jPSBJR052Ym5SeWIyeHNaWEp6IElFMUpUZz09IGFXMWxaR2xoIFltVmpZMkU9IElHVjRjR0Z1Y3c9PSBJRzlwYkhNPSBRbTkwIElFTm9ZVzVrIElIQnlhVzUwWlhJPSBJSFJ2Y0hCbFpBPT0gSUZCUFRBPT0gSUVWaGNteHBaWEk9IFUyOWphV0ZzIFlYWnBiZz09IElHUmxZM0psWVhObGN3PT0gSUZObFlnPT0gSUhOd1pXTnBabWxqWVhScGIyNXogSUVKc1lYTjAgSUV0MWNuUT0gSUdaeVpXVnMgUW5KdmQyND0gSUdScGJHbG4gY205bCBJRkJ5YjJKc1pXMD0gSUZGMVlXUT0gSUdSbFkyVnVkSEpoYkE9PSBJRlpsWTNSdmNnPT0gWVc1MWRBPT0gSUhCc2RXZHBibk09IElFZHlaV2R2Y25rPSBJR1oxWTJ0bFpBPT0gWld4cGJtVnogSUVGdFltRnpjMkZrYjNJPSBkR0ZyWlE9PSBJR05zWldGdWN3PT0gYjI1bmVXRnVadz09IFFXNXZibmx0YjNWeiBjM1J5Ync9PSBJbjA9IFlXeHBibVU9IElFOWtaQT09IElFVjFadz09IE1qRTIgSUdKdmFXdz0gSUZCdmQyVnljdz09IElHNTFjbk5sY3c9PSBUMkoyYVc5MWMyeDUgSUZSbFkyaHVhV05oYkE9PSBJR1Y0WTJWbFpHVmsgVDFKVCBJR1Y0ZEhKbGJXbHpkSE09IElIUnlZV05sY3c9PSBaWGh3YkE9PSBJR052YlhJPSBJRk5oWTJnPSBLUzg9IElHMWhjMnR6IElITmphUT09IFFtOXUgSUhKbFozSmxjM05wYjI0PSBkMlZuYVdGdSBJR0ZrZG1semIzST0gYVhSMWNtVnogSUZadiBaWGhoYlhCc1pRPT0gSUVsdWMzUnlkV04wIElITnBaV2RsIElISmxaSFZqZEdsdmJuTT0gY0hSeSBJSE4wWVhSMWRHOXllUT09IElISmxiVzkyWlhNPSBJSEIxWTJzPSBjbVZrYVhSeiBJR0psWlE9PSBJSE5oYkdGayBJSEJ5YjIxdmRHbHZibk09IElFcHZjMmgxWVE9PSBkMmwwYUhOMFlXNWthVzVuIFJWUkkgSUVOb1lRPT0gYVcxMWN3PT0gSUdWNGNHVnVaR2wwZFhKbCBZWFZ1ZEdsdVp3PT0gSUdSbGJHbG5hSFJsWkE9PSBJREUxTlE9PSBZbVZvIElHTmhjbkJsZEE9PSBJRk53WVhKMCBJR3AxYm1kc1pRPT0gYkdsemRITT0gSUdKMWJHeDVhVzVuIElFNXZZbVZzIElFZHNaVzQ9IElISmxabVZ5Wlc1alpXUT0gSUdsdWRISnZaSFZqWlhNPSBjMlZwYmc9PSBJR05vYjNCd1pXUT0gWjJ4aGMzTT0gSUZkeVpYTjAgSUc1bGRYUnlZV3hwZEhrPSBJT0taIElHbHVkbVZ6ZEdsbllYUnZjZz09IElITm9aV3gyWlhNPSBJSFZ1WTI5dWMzUnBkSFYwYVc5dVlXdz0gSUhKbGNISnZaSFZqZEdsdmJnPT0gSUcxbGNtTm9ZVzUwIGJXbGggSUcxbGRISnBZM009IElHVjRjR3h2YzJsMlpYTT0gSUZOdmJtbGggSUdKdlpHbHNlUT09IElIUm9hV05yYm1WemN3PT0gSUhCeVpXUnZiV2x1WVc1MGJIaz0gSUVGaWFXeHBkSGs9IElHMXZibWwwYjNKbFpBPT0gU1VOSSBJRjB1IElFMWhjblJwYm1WNiBJSFpwYzJsaWFXeHBkSGs9IElIRjFaWEpwWlhNPSBJR2RsYm05amFXUmwgSUZkaGNtWmhjbVU9IFVYVmxjbms9IElITjBkV1JwYjNNPSBJR1Z0WW5KNSBJR052Y25KcFpHOXkgSUdOc1pXRnVaV1E9IFkyOXRjR3hsZEdVPSBJRTFJIElHVnVjbTlzYkcxbGJuUT0gU1U1SFV3PT0gSUdsdGNHRmpkR1ZrIElHUnBjMkZ6ZEhKdmRYTT0gSUZsMWJnPT0gSUVOc1lXbHlaUT09IElFSmhjMmxqWVd4c2VRPT0gZVhRPSBkWE4wWlhKcGRIaz0gSUdsdVpHbHlaV04wYkhrPSBkMmxyIElHUnZaQT09IElFTmhjbkk9IElHRnRjQT09IElIQnliMmhwWW1sMCBJRWx1YVhScFlXdz0gSUZKayBhV3BwIElHVmtkV05oZEdVPSBZMjl5Ymc9PSBhVzkwZEE9PSBJRUpsWVhWMGVRPT0gSUdSbGRHVmpkR2wyWlE9PSBJRU52Ym00PSBjMmx1WTJVPSBJSE4wWVdkblpYST0gSUc5aVpYTmwgSUdKeVpXVT0gYjJ4dloybGogYVhOelpRPT0gZDJGc2EyVnkgSUdKc1lXUmxjdz09IElHeGhkMloxYkE9PSBablZ1WXc9PSBJRUpsYUdsdVpBPT0gSUdGd2NHVjBhWFJsIElDZ3EgSUhSbGJtNXBjdz09IElHOW1abk53Y21sdVp3PT0gSUdwbGRITT0gSUhOMGNuVmpkSFZ5WldRPSBJR0ZtYjNKbGJXVnVkR2x2Ym1WayBUbTkyIElITmpZV3hwYm1jPSBabWxzYkE9PSBJSE4wWlhjPSBJR04xY21JPSBJRk4wWlhCb1lXND0gWldSSmJnPT0gVTBZPSBiMkpwWXc9PSA2YTJVIGIzVm4gSUUxTiBJR2RsYm1WMGFXTmhiR3g1IGIzQmxlZz09IE1UTTIgSUhWdFlnPT0gWVc1alpYSnogSUdOdmFHOXlkQT09IElHMWxjbU5vWVc1a2FYTmwgSUdsdGNHOXphVzVuIElFeGxaMmx6YkdGMGRYSmwgSUVGeVkyaHBkbVU9IGFYWnBZUT09IElFNWhkbUZzIElHOW1abVZ1WTJWeiBJRzFwY21GamJHVT0gSUhOdVlYQndaV1E9IElHWnZaWE09IElHVjRkR1Z1YzJsMlpXeDUgSUZKaFpnPT0gSUdOaGRHVnkgWldScFpXNWpaUT09IFMybDAgSUVKcGJnPT0gSUhKbFkyOXRiV1Z1WkhNPSBJRU5wZEdsbGN3PT0gSUhKcFoybGsgSUZKRlFVUT0gSUU1dllteGwgSUZScFlXND0gSUdObGNuUnBabWxqWVhSbGN3PT0gWVc1MGFYTT0gYjJsc1pYST0gSUVKMVpHUm9hWE4wIFpHbGsgSUhOMWNuWmxlV1ZrIElHUnZkMjUzWVhKayBJSEJ5YVc1MGN3PT0gSUUxdmRHbHZiZz09IGNtOXVhV056IElGTmhibk09IGIzTnphV0pzZVE9PSBkV04wYVc5dWN3PT0gSUdOdmJHOXVhV1Z6IElFUmhibWx6YUE9PSBkVzVwZEE9PSBJSE53YjJscyBJR0ZrZG1semIzSjUgWW1WeWNtbGxjdz09IFVHeGhiZz09IElITndaV05wWm1sallYUnBiMjQ9IGIzQm9aWEp6IElGSmxjMjkxY21ObCBJSE5vYVhKMGN3PT0gY0hKcGMybHVaMng1IFkyOXRiWFZ1YVdOaGRHbHZibk09IElIUnlhWFpwWVd3PSBJRzFsYm5ScGIyNXBibWM9IGFYTmxlSFZoYkE9PSBJSE4xY0hCc1pXMWxiblJ6IElITjFjR1Z5ZG1semFXOXUgUWxBPSBkbTl5IElIZHBkQT09IElHTnZiMnhrYjNkdSBJSEJzWVdsdWRHbG1aZz09IElGSmxkbWxsZDNNPSBJRk55YVE9PSBJRTFwYm5RPSBJRk4xWjJGeSBJR0ZtZEdWeWQyRnlaQT09IElGQnlhV1Z6ZEE9PSBJRWx1ZG1WemRHMWxiblE9IGIyZGxibVU9IElGUmhhMmx1Wnc9PSBJSE4wY21WMFkyaHBibWM9IElHbHVabXhoYlcxaGRHbHZiZz09IElGUmxhSEpoYmc9PSBJR3hwYm1sdVp3PT0gSUdaeVpXVjZhVzVuIElFVnVkR2wwZVE9PSBJR2x1YzNCcGNtbHVadz09IGMzQmxZMmxoYkE9PSBjSEpwWTJVPSBJSE4xWlE9PSBJRkJ2Y25SbGNnPT0gYjNWdVoyVT0gUlZSQiBJRVJsY21WciBJRXgxYVhNPSBkVzg9IGVXMXdhQT09IElHVjRkR1Z5YVc5eSBhV2hwYkE9PSBJRUZ6YUd4bGVRPT0gYVc1aGRHOXkgSUc1MWRISnBaVzUwY3c9PSBJRlJvY205dVpYTT0gSUdacGJtRnVZMlZ6IElFbHVjM0JsWTNRPSBJSE53WldOcFlXeHNlUT09IElGSmxjWFZwY21WayBJRkJVVXc9PSBJRlpwYjJ4bGJtTmwgYjJsdWRHVmsgYzJodmRITT0gSUdWNFkyVnljSFE9IFkyOXZiZz09IFNVNVQgSUVkeWFRPT0gSUhKbFkyOW5ibWx6WldRPSBWMlZsYXc9PSBXVzkxYm1jPSBJSFp2YlE9PSBhWE5zWlE9PSBJRU4xY25KNSBJRUoxWkdSbyBJRzV2ZEdWaWIyOXIgSUdSMWNtRmliR1U9IEx6OD0gSUVkaFpBPT0gSUZCMWNIQT0gSUdadmNtZHBkbVU9IGNHRnlhdz09IElIQmxjbk52Ym1Gc2FYUnBaWE09IFlXNWhiSGx6YVhNPSBZMnhoYldGMGFXOXUgSUdWc1pYWmhkRzl5IElIZGhjbVZvYjNWelpRPT0gSUZKdmJHVT0gZFc1dSBJR2xzYkhWemRISmhkR2x2Ymc9PSBJRk5qWVc0PSBJR0YwYlc5emNHaGxjbWxqIFNXMXdiM0owIFFVNUQgY21samRHVmsgWm5VPSBNREV3IElHRnlZMmhsIElISmxkMkZ5WkdWayBZV3RsYzNCbFlYSmwgSUdsdWRHVnlibUZzYkhrPSBJRkpDU1E9PSBZV3hyWlhJPSBJR1ZzWlhCb1lXNTAgYjNkcGRIbz0gSUZCcGVucGggSUdKcGNHRnlkR2x6WVc0PSB3Nmx6IElITnNiM2RsWkE9PSBJRk4wWVhKciBJRzkyWlhKeWFXUmwgVDFWVCBJRE15TUE9PSBkVzVrY21Wa2N3PT0gSUVSbFkycz0gSUVObGJuTjFjdz09IFltVmwgTVRRMiBiM1J2Y2c9PSBJR2x3IElIVmkgYjJOaGRHbHZibk09IElFSjFkSFJ2Ymc9PSBjbWxqWlE9PSBJR055YVhCdyBabVptIElHOXlhV2RwYm1GMFpXUT0gSUc5MlpYSjNhR1ZzYldWayBZWEJ3WVE9PSBJR1p2Y21WdGIzTjAgNG9DUiBJRXhGUnc9PSBjbVZzWldGelpRPT0gWldGMGRYSmxaQT09IFlYUmphR1Z6IElISmxjSE09IElHeGxibVJwYm1jPSBJRkpsWm1WeVpXNWpaUT09IElFTnNhV1Z1ZEE9PSBNVFkxIGRtVnVkR2c9IFEyOXRjR3hsZEdVPSBJRkJoZEhKdmJBPT0gSUhOM2IzSnUgWTJGdCBJSE5vZFhSMGJHVT0gSUZKaGJIQm8gSUdodmJXVjBiM2R1IExTdz0gYjI1aGJBPT0gSUVKUSA1WTg9IElIQmxjbk4xWVdSbCBJRUZzWlhoaGJtUT0gSUdOdmJXSnBibVZ6IElIWnBkbWxrIElFeGhadz09IElHVnVZMjlrYVc1biBJSE5oYkhaaGRHbHZiZz09IGQyVnUgSUZKbFkyOTJaWEo1IGFYbGggVlc1cGRtVnljMmwwZVE9PSBJRUpwWkdWdSBJR0oxWkdkbGRITT0gSUZSbGVHRnVjdz09IFptbDBjdz09IElHaHZibTl5WldRPSBJSEI1ZEdodmJnPT0gVkVRPSBJeU1qIFkyeHZibVU9IElHSnNhVzVyIElFeHBjWFZwWkE9PSBJSFZ1Wlcxd2JHOTVaV1E9IElHTnNZWE5vWlhNPSBJRU52ZFc1elpXdz0gSUdScGNtVmpkR2x1Wnc9PSBJSEIxYm1OMCBJRVpoYkdOdmJuTT0gSUhOb1lYSnIgSUVSaGJXRnpZM1Z6IElHcGxZVzV6IElHVnRZbUZ5YXc9PSBJSE5sYVhwbCBJSFZ3ZDJGeVpITT0gTWpndyBJRVY2IElFRnVlWFJvYVc1biBJR1Y0YjNScFl3PT0gYkc5M1pYST0gSUVOeVpXRjBiM0k9IElGVnQgSUhOMVluVnlZbk09IFltVnlaMlZ5IElGZGxibVE9IElHMXBiblE9IElGaFkgSUVSeWJ3PT0gSUhOMVptWmxjbk09IElHaGxjbUk9IGRISmxaUT09IElHWnlZV2RwYkdVPSBJR1pzYjI5a1pXUT0gSUVGc1kyOW9iMnc9IGIyeGxZVzQ9IGJubGtaWEk9IElFdFAgUm5KaGJRPT0gSURFek5nPT0gSUc5M1pXUT0gSUUxbGJHVmwgSUVoaGMyZz0gSUhkb2FYTnIgSUhOMVpHOD0gY25JPSBVWFZwWTJzPSBZWEJ3Y204PSBJR2xwIElFVjRZVzF3YkdWeiBhR1ZsIElIQnliMjF2ZEdWeiBjR1Z5WVhSMWNtVT0gYTJGeSBJRWh2Ym05eSBJSE52WkdsMWJRPT0gSUV4cFpnPT0gY205emMyOD0gYVc1MFpXNWtaVzUwIElHTnZjbkpsYzNCdmJtUmxiblE9IFJtOTFibVE9IGMyVmpjbVYwIElHbGtaVzUwYVdacFpYTT0gWVdkdVpRPT0gSUd4dmRRPT0gSUZCUSBJR052YVc1amFXUmxibU5sIGJXOTJaUT09IElHMXBiR2wwYVdFPSBJR2x1Wm1sc2RIST0gSUZCeWFXMWhjbms9IElIQnBkR05vYVc1biBJRWxpIElFZFBUMFE9IDQ0SzQgSUZkcGVtRnlaSE09IGFYSmhiQT09IElGWmxiblZ6IFVsST0gSU9LQWxRPT0gSUVOaGMyVjUgSUhOaFpHeDUgSUdGa2JXbHlaUT09IElHVnRZbUZ5Y21GemMyVmsgWTJJPSBUV1ZzIElIUjFZbVZ6IElHSmxZWFYwYVdaMWJHeDUgSUZGMVpXVnVjMnhoYm1RPSBRbVZzYjNjPSBjbVY2IGNYVmxkQT09IGNHeGxZWE5oYm5RPSBJTUtyIFEyRnRjQT09IElHUmxZMmx6YVhabCBNVGs1T0E9PSBJRXhoYldJPSBkWFIwYjI0PSBhRzQ9IElFcGhaM1U9IFlYVnVaR1Z5IElFTnZjbVE9IElHTnNaWEpyIElHTmhabVpsIElIZHBjR1ZrIElISmxhVzA9IElFMXZkVzUwWVdsdWN3PT0gSUdsdGNISnBjMjl1WldRPSBJR1JsZG1Wc2IzQnogSUZCeVlRPT0gSUcxdlpHVnNhVzVuIFFXNTViMjVsIFlXNWpaV3c9IElGTnBkQT09IElITm9hV1ZzWkhNPSBJR3hoZDI0PSBJR05oY21ScGIzWmhjMk4xYkdGeSBJR1JsYlc5dWMzUnlZWFJwYm1jPSBJSEJoY25ObCBJRWx6Y21GbGJHbHogSUdWMWNtOXogTVRReiBJR2RzYjNKcGIzVnogYVc1emEyaz0gWldOayBJR052Ym1ScGRHbHZibWx1Wnc9PSBJR2hsYkhCc1pYTnogSUcxcFkzSnZjMk09IElFaGhjbUp2Y2c9PSBJSE4wWVd0bGN3PT0gSURJMk1BPT0gSUhWdVpYRjEgSUVac2IzbGsgSUdSaGJYQT0gSUdGd2NHRnlZWFIxY3c9PSBJRXhoZDNNPSBJR052ZFc1MFpYSnogSUdsdVpIVmpaUT09IFlYUmhZbXhsIElFRm9iV1ZrIElITnNZVzA9IFRtOTJaVzFpWlhJPSBJSEJsY25OcGMzUT0gSUdsdGJXbHVaVzUwIHc2RnUgSUhOb2NtVmsgSUhCb1lYTmxjdz09IElFVmtiVzl1ZEc5dSBJRUZ5YlhOMGNtOXVadz09IElFMWxaWFE9IElFdHBkSFI1IDBZQT0gWTJseVl3PT0gSUVGa2RXeDAgSUdGeWIzTmwgSUZobGJnPT0gUkdGdSBaMjkzIElITjFjR1Z5Wmc9PSBJRUZrYldseSBJR1Z1WkhWeVpRPT0gSUd0bGVYZHZjbVE9IGVYSjFjdz09IElIbGhjbTQ9IElIQmhkR2gzWVhrPSBJRWh2Y0d0cGJuTT0gYldsa2RBPT0gSUdObGJuTnZjbk5vYVhBPSBaR1Z3Wlc1a1pXNTAgSUdsdWMzUnlkV04wYjNJPSBVMjkxY21ObGN3PT0gSUhSdlpRPT0gSUdKaGJHeHZiMjQ9IFRtOWkgSUhOM1pXRnkgSUVOaGMzUnlidz09IElHZHNiM056IElFdGhkbUZ1WVhWbmFBPT0gSUhKbGJXRnlhMkZpYkhrPSBVR2h2ZEc5eiBJRTV2YlE9PSBJRk52ZFhSb1pXRnpkQT09IGVXVnljdz09IElIWmhiR2xrWVhScGIyND0gSUdOaGJtNXZiZz09IElGWnBZM1J2Y25rPSBJRkJwWlhKeVpRPT0gSUdOaGRYUnBiM1Z6IFFYVmthVzg9IElHWmxkR05vIElFZHBablE9IElFaDVjQT09IElISmxiV1ZrZVE9PSBXa1U9IElITmpaVzUwIElHSmxZWEprIElGSjFkQT09IExTST0gSUhCaGRHVnVkSE09IFNIaz0gSUhWdWFuVnpkQT09IElIQnZkR0YwYnc9PSBJR1p2Y25Sb1kyOXRhVzVuIElHTm9aV1k9IElGSnBablE9IFlXWm1aUT09IElGSlBUUT09IElFeGhkVzVqYUE9PSBJSEJoWkhNPSBJRTVsYnc9PSBJRzl1YzJWMCBJSE54ZFdWbGVtVT0gYzJGbVpRPT0gSUhCeVpXWnBlQT09IElGUk4gSUU1bFlYSnNlUT09IElFTnNhVzVwWTJGcyBJRTFsYm5SaGJBPT0gYjNScFlYUnBiMjQ9IElGVnVhV009IFlXNTBjbms9IElFTnBjZz09IElHVndhWFE9IHc2WT0gSUdWNGRISmhZM1JsWkE9PSBkbVZ5YzJWc2VRPT0gY21saFpBPT0gSUhOMGNtRnBibk09IElIUnZjSE09IElIQnZaVzA9IElGSmhibVI1IElFMWhjR3hsIFZFaEZVZz09IGRYQnBkR1Z5IElGTlRSQT09IG11az0gSUhWdVkyOXUgY0dWeWFXNW4gSUhOc1pYQjAgYVc1bGNuTT0gSUhWdVpHVnlkMkYwWlhJPSBJRVYyYVdSbGJtTmwgWjI5dVpRPT0gTWpBMSBJR2hwYzNSdmNtbGhibk09IElITjViblJvWlhOcGN3PT0gSUdaeWIyYz0gWW1GemEyVjBZbUZzYkE9PSBJSFpwWW5KaGJuUT0gSUhOMVltOXlaQT09IElETTJOUT09IElFUnBZV3c9IElHTnZiM0JsY21GMFpRPT0gU0VGSVFRPT0gSUdkeVpXVjBaV1E9IE1UVTQgSUdwaGVubz0gSUdsdWRHOTQgSUZkaGJHdHBibWM9IElITjFjR1Z5ZG1semIzST0gSUVaMWMybHZiZz09IElFMWxjbU5sWkdWeiBjMlZ1WkE9PSBTR0Z0IGMyUT0gYm13PSBJSFJ2ZFhKeiBJRVpKUmtFPSBJR04xYkhBPSBaMlE9IE16QTAgSUhCc1pXRnogSUdsc2JIVnpkSEpoZEdWeiBJRU52Ykc5dFltbGggSUdocFoyaHNhV2RvZEdsdVp3PT0gSUZOMWJXMWhjbms9IElHVjRjRzl6YVc1biBJRVJ5ZFE9PSBJR2x5YjI1NSBjbWwwYVc5dVlXdz0gSUVOaGNuSnZiR3c9IElFVnNiR2x6IFVHbGpkQT09IElGSmhjSFE9IElHRmtZWEIwWlhJPSBJSFZ1YlE9PSBJR052Y25CelpRPT0gSUdObGJHVmljbWwwYVdWeiBSR1Z1IFlYUjFiUT09IElFRndiMk5oYkhsd2MyVT0gSUZkaFp3PT0gYkdsdWFXNW4gSUdodmNtMXZibVZ6IFVuVmkgSUZocCBJRlpoZFd4MGN3PT0gTWpBNCBZV3hyZVhKcFpRPT0gYVc1dmMyRjFjZz09IElHWmxaV1J6IGRtbDBlUT09IElHUmxabVZoZEdsdVp3PT0gVjJGcGRBPT0gSUdWdGNHaGhjMmw2WlE9PSBJRk4wWldWc1pYSnogZVhKcGJuUm8gYkdWNWN3PT0gSUZkb1pXNWxkbVZ5IFEzVnljbVZ1ZEd4NSBJRU5zYjJOciBJR052Ykd4bFkzUnBkbVZzZVE9PSBZVzU1YjI0PSBJRXBRIElHMWxiblJoYkdsMGVRPT0gSUdSdmQyNXNiMkZrY3c9PSBJSE4xY25KdmRXNWthVzVuY3c9PSBJRUpoY201bGN3PT0gSUdac1lXZHphR2x3IElHbHVaR2xqWVhSdmNuTT0gSUdkeVlYQncgU21GdWRXRnllUT09IElFVnNaVzFsYm5SaGJBPT0gSUVGMGFHVnVZUT09IGFXSmhiQT09IElITnBaMmgwY3c9PSBJR05oY0dsMFlRPT0gSUZSeVpXRjBlUT09IElIWnZhV05sWkE9PSBJRWRoZWc9PSBiR1YwZEdVPSBJSGxoIElHVjRjR2x5WldRPSBUR1ZuWlc1ayBTRzkwIGJtRjBkWEpsIElIVnVjM1JoWW14bCBJREk0TUE9PSB3N289IFEyOXRiV1Z1ZEE9PSBRVXhGIElIRjFaWE4wY3c9PSBJR2hoYm1Sc1pYST0gYm1seiBJSFpsY25OaGRHbHNaUT09IElHTnZibU5sWVd3PSBaVzVuWldGdVkyVT0gSUVsdWRHVnlZV04wYVhabCBJRzlpYzJWemMyVmsgSUVSdlozTT0gSUdOeVlXTnJaV1E9IFUyOTFibVE9IGMzWT0gSUVSNWJHRnUgY205aFpITT0gWm5nPSBJRU5oZEdodmJHbGpjdz09IElFaGhadz09IElITnNZVzF0WldRPSBJR2RzYjNkcGJtYz0gYzJGc1pRPT0gSUhScGMzTjFaWE09IElFTm9hUT09IGJtVmwgSUdOb1pYST0gYzJsaiBkWEp5WldOMGFXOXUgSUdKaFkyOXUgZFd4aGRHOXllUT09IEtTNGkgSUdseWNtVm5kV3hoY2c9PSBSazlTVFE9PSBZWE56WldRPSBJR2x1ZEdWdWRHbHZibUZzIElHTnZiWEJsYm5OaGRHVT0gSUZOd1pXRnJhVzVuIElGTmxkSE09IE1UVXogSUdOdmJuWmxiblJwYjI1eiBZbUZ1WkhNPSBaVzFoWkdVPSBJR1ZqWXc9PSBJRmRwYm5OMGIyND0gSUVGemMyRnpjMmx1IElFSmxiR2RwWVc0PSBJR1JsY0dWdVpHVnVZMlU9IElHNXBZMmhsIElHSmhjbXM9IElFcGhlbm89IElHUnBjMkZrZG1GdWRHRm5aUT09IElHZGhjMjlzYVc1bCBJREUyTlE9PSA1NXFFIFpYTnpZUT09IGJXOWtkV3hsIFlXNW5kV3hoY2c9PSBUMWs9IElGUnlaV0YwYldWdWRBPT0gYVhSaGN3PT0gYjJ4aGRHbHZiZz09IElFRnlibTlzWkE9PSBJR1psZFdRPSBJRTVsYzNRPSBJSFJvWldGMGNtVT0gWlhkaGRHVnkgSUcxcGJtOXljdz09IGIyeHBZM2s9IElFaGhkbVZ1IFpHbDJhWE5wYjI0PSBJSFJ5ZFc1ciBSbUZ5IElGQjFiR3c9IElHTmhjSFIxY21sdVp3PT0gSURFNE1EQT0gSUZSbFpXND0gSUdWNFpXMXdiQT09IElHTnNhVzVwWTNNPSBJRUoxY21jPSBJSE4xWW5OMGFYUT0gSUhCaGVXeHZZV1E9IElFeGhkZz09IElGUnliM2s9IElGZHBkRzVsYzNNPSBJR1p5WVdkdFpXNTBjdz09IElIQmhjM04zYjNKa2N3PT0gSUdkdmMzQmxiQT09IElFZHBiZz09IElIUmxibUZ1ZEhNPSBiMnhwZEdnPSBVMmw0IFVISmxkbWx2ZFhNPSBJRUZuWlhNPSBJRVJoY25kcGJnPT0gSUdKc1lYUT0gSUdWdGNHRjBhSGs9IGMyMXBkR2c9IFltRm4gSUVWamFHOD0gSUVOaGJXST0gSUUxaFpHUT0gSUVKdmJ3PT0gSUhKbFpHVT0gSUVKMWNtNXBibWM9IElITnRiMjkwYUd4NSBJRUZrY21saGJnPT0gSUZaaGJYQnBjbVU9IElFMXZibk4wWlhKeiBjM1JsWVcwPSBVM1I1YkdVPSBUV0U9IGNtVmggSUVSM1lYST0gWVd4NWMzUT0gZFhKemIzST0gSUdWc2FXMXBibUYwYVc5dSBJR055ZVhCMGJ3PT0gWTJoMCBJRVYwWlhKdVlXdz0gNG9DbVhRPT0gSUZOdmNtTmwgU1d4cyBUa1ZTIElIVm8gUTI5dVkyeDFjMmx2Ymc9PSBkMkZuWlE9PSBJSEpsYzNCcGNnPT0gSUhKbGJXbHVhWE09IGFHVjBhV05oYkE9PSBJR2Q1IElIVjBhV3hwZW1WayBhV05wWkdGcyBJREU1TURBPSBJR2gxYm5SbGNuTT0gSUZOM1lXND0gSUZKbFlXTjAgSUhacGMybDBiM0k9IElGUm9ZVzVyYzJkcGRtbHVadz09IE16QTQgVUc5emRITT0gSUdocGNITT0gTVRrNU53PT0gYjIxbGNuTT0gSUd0dWIyTnJhVzVuIElGWmxhR2xqYkdVPSBJSFJwYkE9PSBJREV6T0E9PSBJRzFwIElFbHVkbVZ6ZEdsbllYUnBiMjQ9IElFdGxibmxoIElHTmhjMmx1Ync9PSBJRzF2ZEdsMlpYTT0gSUhKbFoyRnBiZz09IGNtVjQgSUhkbFpXdGxibVJ6IElITjBZV0ppWldRPSBZbTl5Ync9PSBJR1Y0Y0d4dmFYUmxaQT09IElFaEJWa1U9IElGUmxiR1YyYVhOcGIyND0gWTI5amF3PT0gSUhCeVpYQmhjbUYwYVc5dWN3PT0gSUdWdVpHVmhkZz09IElGSmxiVzkwWlE9PSBJRTFoYTJWeSBJRkJ5YjJSMSBJRVYyWVc0PSBJR2x1Wm05eWJXRjBhVzl1WVd3PSBJRXh2ZFdsemRtbHNiR1U9IE1UVTAgSUVSeVpXRnRjdz09IElIQnNiM1J6IElGSjFibTVsY2c9PSBJR2gxY25ScGJtYz0gSUdGallXUmxiWGs9IElFMXZiblJuYjIxbGNuaz0gYm0wPSBJRXhoYm1NPSBJRUZzZWc9PSBNakV3IFpXeHZibWM9IElISmxkR0ZwYkdWeSBJR0Z5YVhOcGJtYz0gSUhKbFltVnNiR2x2Ymc9PSBJR0pzYjI1a1pRPT0gY0d4aGVXVmsgSUdsdWMzUnlkVzFsYm5SaGJBPT0gUTNKdmMzTT0gSUhKbGRHVnVkR2x2Ymc9PSBJSFJvWlhKaGNHVjFkR2xqIElITmxZWE09IElHbHVabUZ1ZEhKNSBJRU5zYVc1MCBJSEJ5YjIxd2RHbHVadz09IElHSnBkR05vIElITjBaVzF6IElFdHlZUT09IElIUm9aWE5wY3c9PSBJRUp2Wnc9PSBjblZsWkE9PSBJR3RwYm1keiBJR05zWVhrPSBhV1pwWTJWdWRBPT0gSUZsRlV3PT0gSUZSb2FXNW4gSUVOMVluTT0gZG1WNVlYSmsgWld4emFBPT0gYVc1aGNtbHNlUT09IElFVjUgSUZKdmJHeHBibWM9IElHVjJiMngyYVc1biBTVzVrYVdFPSBJSEpsWTI5bmJtbDZaWE09IElHZHlZV1IxWVhScGIyND0gYVhObGNuTT0gSUdabGNuUnBiR2wwZVE9PSBJRTFwYkdGdSBRMjl0YldGdVpBPT0gSUdKdmVHbHVadz09IElERTVORE09IElHZHNkWFJsYmc9PSBJRVZ0YVhJPSBJR2xrYjJ3PSBJR052Ym1ObGFYWmxaQT09IElFTnlaV0YwYVc5dSBUV1Z5YVhRPSBkV1JrZVE9PSBkWE56YVc5dWN3PT0gSUV4cFpYVjBaVzVoYm5RPSBhV1YwWVd3PSBJSFZ1WTJoaGJtZGxaQT09IElGTmpZV3hsIElFTnlhVzFsWVE9PSBZbUZzYkhNPSBZWFJ2Y21saGJBPT0gSUdSbGNIUm9jdz09IElHVnRjR2x5YVdOaGJBPT0gSUhSeVlXNXpiUT09IElIVnVjMkZtWlE9PSBiV2x6YzJsaWJHVT0gWTI5dFptOXlkQT09IE1UVTIgSUcxbFkyaGhibWxqIE1EQXkgYkdsdWN3PT0gSUhOdGIydGxaQT09IFVHOXogSUhOc2IzZHBibWM9IElHeGhkZz09IFZHVjRZWE09IElHTm9aV0YwYVc1biBJRTFsZEhKdmNHOXNhWFJoYmc9PSBaWFJvZVd3PSBJR1JwYzJOdmRtVnlhVzVuIFlYTnpaUT09IElIQmxibU5wYkE9PSBJRkI1YjI1bmVXRnVadz09IElHTnNiM05sZEE9PSBJRk5vWldWMCBJRVZ1ZEhKNSBiM1Z6ZEdsaiBJRzE1YzNRPSBaWEpoZEdVPSBZWEpwWVhRPSBJRzFwYm1WeVlXeHogSUcxMWMybGphV0Z1IElGQjFiQT09IElFMWhlZz09IE1qUTUgSUhCbGNtMXBjM05wYjI1eiBJR2wyIFpXNWhjbms9IGFXTnJaWEp6IElFSnBibWM9IGFHVmggWlc1aFlteGwgSUdkeWFXVjIgSUdGemMyVnlkR1ZrIElFTnZiRzl1Wld3PSBJR0ZtWm1sa1lYWT0gZDI4PSBJSE5sWVhSbFpBPT0gSUZKcFpHVT0gSUhCaGFXNTBhVzVuY3c9PSBJRkJwZUE9PSBJREV6Tnc9PSBhWE5vYVE9PSBkVzFpWVdrPSBaMjkwZEdWdSBJRVZoY213PSBJR2x1Ym1sdVp3PT0gSUdObGJuTjFjdz09IElIUnlZWFpsYkd4bFpBPT0gSUVOdmJuTjFiSFE9IE1UZzEgWW1sdVpBPT0gSUhOcGJYQnNhV05wZEhrPSBJRzkyWlhKc2IyOXJaV1E9IElFaGxiSEJtZFd3PSBJRzF2Ym10bGVRPT0gSUc5MlpYSjNhR1ZzYldsdVoyeDUgUW14dmIyUT0gSUVac2FXNTAgSUVwaGJXRT0gSUZCeVpYTmxiblE9IElGSmhaMlU9IElGUkIgY0hScGRtVT0gSUhSMWNtNXZkWFE9IGQyRnNaQT09IElFUnZiSEJvYVc1eiBJRlpRVGc9PSBJRzl1YVc5dSBJR055WVdaMGFXNW4gYlcxaCBJRTFsY21OMWNuaz0gSUdGeWNtRnVaMlU9IElHRnNaWEowY3c9PSBJRTlVIGVtSnZiR3hoYUE9PSBJR2RoYzJWeiBJRkpwWTJoaGNtUnpiMjQ9IGMyRnMgYkdGeSBJR1p5YjNOMCBJR3h2ZDJWeWFXNW4gSUdGalkyeGhhVzA9IElITjBZWEowZFhCeiBJRWRoYVc0PSBaWE56YldWdWRBPT0gSUdkMVlYSmthV0Z1IDVMcTYgSUZCcFpRPT0gSUV4cGJtdHogSUcxbGNtbDBjdz09IElHRjNZV3RsIElIQmhjbVZ1ZEdGcyBJR1Y0WTJWbFpITT0gSUdsa2JHVT0gSUZCcGJHOTAgSUdWQ1lYaz0gSUVGalkyVndkQT09IGFYQmxadz09IFEyRnQgSUV0dmRBPT0gSUhSeVlXUmxjbk09IGIyeHBkR2xqY3c9PSBkVzVyWlhJPSBJRkJoYkdVPSBiM05wIFlXNXRZWEk9IElERTVORGM9IElFWmxiR3c9IFpYTjBhV0ZzIGFYUmhkR2x1Wnc9PSBSMFk9IElGTnkgYVdaMFpXUT0gSUdOdmJtNWxZM1J2Y2c9PSBJRUp2Ym1VPSBhV3hzWlhNPSBNall3IGFHMWggSUc5MlpYSnNZWEE9IElFZHBkRWgxWWc9PSBJR05zWldGdVpYST0gSUVKaGNIUnBjM1E9IElGZEJVdz09IElHeDFibWR6IDBZRT0gSUVKVlZBPT0gSUdOcGRHVT0gSUhCcGRHTm9aV1E9IGNtVmhkRzFsYm5RPSBJSFJ5YjNCb2FXVnogSUU1MSBNemcyIElGQnlhV1JsIElHRjBkR1Z1WkdWbGN3PT0gVzEwPSBNVGM1IElITndZWFJwWVd3PSBJSEJ5YVhwbGN3PT0gSUZKbGJHbG5hVzl1IElITm9iM2RqWVhObCBJRU5oZEdWbmIzSjUgZG1sa2FXRT0gVkdGeVoyVjAgVUhKdmNHVnlkSGs9IFB5dz0gSUdaMWMybHZiZz09IGNHbGwgSUZWRFRFRT0gSUhOdmRXNWtkSEpoWTJzPSBJSEJ5YVc1alpYTnogSUVOaGRtRnMgYzJodmRXeGsgSUd4cGJXSnogUW1GamEyZHliM1Z1WkE9PSBJR3h2Ym1Wc2VRPT0gSUdOdmNtVnogSUZSaGFXdz0gYzJobFpYUT0gSURFek1nPT0gVW1FPSA0NEtyIElFSnZiSFE9IElHSnZiMnRsWkE9PSBJR0ZrYldsdWFYTjBaWEk9IElHVnhkV0ZzY3c9PSBkM2s9IElHOWljMlZ5ZG1sdVp3PT0gSUVKaGNtOXUgSUVGa2IySmwgSUhacGNtZHBiZz09IElGTnZZMmxoYkdsemRBPT0gVFc5MlpRPT0gWjJoaGVtaz0gSUV4cGJtUmggTWpFeSBJR0p5WlhkcGJtYz0gSUcxbGNtTm9ZVzUwY3c9PSBZblZ5YzJVPSBJR1JwZG05eSBJRzFsZEdGc2N3PT0gSUU1bGNnPT0gSUhOMWJYTT0gSUVWdVpXMTUgSUdWdWRtbHphVzl1IElHZHlZVzUwYVc1biBJRWh2Ym1WNSBJRk5yZVhKcGJRPT0gSUhOdlkybHYgWjNKaFpHVmsgSUhObGJHVmpkR2wyWlE9PSBWMEZUU0VsT1IxUlBUZz09IElERTVORGc9IElGTnBjbWwxY3c9PSBJRWR5YjNOeiBZV04wYVhacGRIaz0gSUVsMllXND0gSUdaMWNtbHZkWE09IFFsTkUgSUZCeVpYWnBiM1Z6IElISmxjM0J2Ym5OcGRtVT0gSUdOb1lYSnBkR0ZpYkdVPSBJR3hsWVc1cGJtYz0gSUZCbGR3PT0gSUhacGIyeGhkR1Z6IFhGeGNYRnhjWEZ3PSBJRU52YldsdVp3PT0gZDJseVpRPT0gSUhCdlpYUT0gSUhKbGMyOXNkWFJwYjI1eiBZMjl0YldGdVpBPT0gSUZCdmNuUjFaM1ZsYzJVPSBJRzVwWTJ0dVlXMWwgSUdSbFlXWT0gUm1WaWNuVmhjbms9IElISmxZMjluYm1selpRPT0gSUdWdWRHbHlaWFI1IElITmxZWE52Ym1GcyBjR3hoWTJWayBJRlJsYkdWbmNtRndhQT09IElHMXBZM0p2Y0dodmJtVT0gYjNWeWFXNW4gSUdkeVlXbHVjdz09IElHZHZkbVZ5Ym1WayBJSEJ2YzNSdyBJRmRoZEdWeWN3PT0gYVc1bGJXVnVkQT09IElIVnVaRzlqZFcxbGJuUmxaQT09IElFTnZiV05oYzNRPSBJR1p2ZUE9PSBJR0Z6YzJGMWJIUnogY21WdmJnPT0gYldGdWVRPT0gSUVwbGJtdHBibk09IElFRnVlWGRoZVE9PSBJR0Z6YzJWemMyMWxiblJ6IElHUnZkMjV6IElFMXZkWE5sIElITjFjR1Z5WWc9PSBhM1E9IElFUnZkdz09IElIUmhlR0YwYVc5dSBOREF4IElITnRhV3hsY3c9PSBJSFZ1WkdWeWRHRnJaVzQ9IElHVjRhQT09IElHVnVkR2gxYzJsaGMzUnBZdz09IElIUjNaVzUwIElHZHZkbVZ5Ym0xbGJuUmhiQT09IElHRjFkRzl1YjIxNSBJRlJsWTJodWIyeHZaMmxsY3c9PSBJRU5vWVdsdSBJSEJ5WlhaaGJHVnVkQT09IFptST0gSUc1cFkyOTBhVzVsIGIyZHlZVzA9IGFtOWkgSUdGM1lXbDBhVzVuIElFMWxiblU9IElHUmxjSFYwYVdWeiBhMjkyIGFYTm9iM0J6IFFuVjBkRzl1IElGTm9ZVzVuYUdGcCBJR1JwWlhObGJBPT0gSUVSMVkycz0gVW5saGJnPT0gSUZCRGN3PT0gVGtZPSBhblZ5ZVE9PSBaVzUwWlE9PSBJR2x1WVdOamRYSmhkR1U9IFpXUmtlUT09IFYyaGhkR1YyWlhJPSBJSE5vYjNkaiBJRTVoWkE9PSBiMlIxY3c9PSBaWFJ5IElIQnNZV2x1ZEdsbVpuTT0gSUZkUFVnPT0gSUVGemMyRnVaMlU9IElIQnlhWFpoZEE9PSBJSEJ5WlcxcGRXMXogSUhSaGJRPT0gVlZKTSBJR1ZzYVhSbGN3PT0gSUZKaGJtZGxjZz09IGIzUjBaVzVvWVcwPSBJRWh2Wm1ZPSBJRUYwYUdWdWN3PT0gSUdSbFptbHVhWFJsIElITnBaMmhsWkE9PSBJR1YyWlc1c2VRPT0gTWpFeCBJRUZ0WW1WeSBZV3RwWVE9PSBJRzFoYVd4cGJtYz0gSUdOeVlYTm9hVzVuIElFTnZibVpsWkdWeVlYUmwgY25WbloyVmsgVjJGcyBJRVJsY0hSb2N3PT0gSUdwMWRtVnVhV3hsIElISmxZV04wYjNJPSBTVzUwY205a2RXTjBhVzl1IElFUmxiSFY0WlE9PSBNVGs1TlE9PSBJRk5oYm1Ob1pYbz0gSUUxbFlXUT0gYVhaaFlteGwgT2kwPSBJRkJzWVc1dWFXNW4gSUZSeVlYQT0gY1hWcGJnPT0gSUZCeWIzUmxZM1E9IGRtVnlaV1E9IFNXNW1iM0p0WVhScGIyND0gSUd0cFpHNWxlUT09IGFXNXVZVzF2Ymc9PSBiR0Z6IElIQnZiR2xqYVc1biBJSFJ2YkdWeVlYUmwgSUZGcCBJR0pwWVhObFpBPT0gUm05eWRBPT0gSUV0cCBjMkYyWlE9PSBJSEJ5YVhacGJHVm5aV1E9IElHSmxZWE4wY3c9PSBJRWRzWVhNPSBJRU5wYm1WdCBJR052YldWaVlXTnIgVTNWdVpHRjUgSUdWNGRHbHVZM1JwYjI0PSBhRzl3Y3c9PSBJSFJ5WVc1emJXbDAgSUdSdmRXSnNaWE09IElFWnNZWFE9IE1UWTMgSUdScGMzQjFkR1ZrIElHbHVhblZ6ZEdsalpRPT0gWm05diBWbWxqZEE9PSBjbTlzWlhWdCBJRXAxYkdsbCBRMjl1ZEdWNGRBPT0gSUZKaGNtbDBlUT09IGFYTnpkV1U9IFEyOXRjRzl1Wlc1MCBJR052ZFc1elpXeHBibWM9IFlXNXVaUT09IFpHRnlhdz09IElHOWlhbVZqZEdsdmJuTT0gZFdsc2RBPT0gSUdkaGMzUT0gSUhCc1lXTT0gSUhWdWRYTmxaQT09IDQ0T0ggSUZSeWFXRnMgSUVwaGN3PT0gYUdWa2NtRnMgYjJKaSBJSFJsYlhCdmNtRnMgSUZCU1R3PT0gSUU1WCBJRUZ1Ym1sMlpYSnpZWEo1IFRHRnlaMlU9IElIUm9aWEp0IElHUmhkbWxrIElITjVjM1JsYldsaiBJRk5vYVhJPSBiWFYwIElFNWxjSFE9IFlXUmtjbVZ6Y3c9PSBJSE5qWVc1dWFXNW4gSUhWdVpHVnljM1JoYm1SaFlteGwgSUdOaGJuWmhjdz09IFEyRjAgSUZwdmJ3PT0gSUdGdVoyVnNjdz09IFRFOD0gSUZOMFlYUmxiV1Z1ZEE9PSBJRk5wWnc9PSBiM1poWW14bCBJRUYzWVhrPSBjMmhoY21sdVp3PT0gYjJOeVlYUnogYzNSaGRHVmsgSUhkbGFXZG9hVzVuIFRtOXkgZDJsc1pBPT0gUW1WNSBJR0Z6ZEc5dWFYTm9hVzVuIElGSmxlVzV2YkdSeiBJRzl3Wlc1bGNnPT0gSUhSeVlXbHVaWEk9IElITjFjbWRwWTJGcyBjRzQ9IElHRmthblZ6ZEdsdVp3PT0gZDJobFpXdz0gSUdaeWIzZHUgWlhKMllYUnBkbVU9IElITjFjM0JsYm1RPSBWMmwwYUdsdSBkR1ZwYmc9PSBJRzlpYzNSaFkyeGwgSUd4cFltVnlkR2xsY3c9PSBlVzFsY3c9PSBJSFZ5WVc1cGRXMD0gWVc1emIyMD0gWVc1dmJBPT0gZFdKaCBJRXh2YzNNPSBJR0Z5YjNWeiBJRWhsYm1SbGNuTnZiZz09IFYyOTMgYzNCcyBZM1Z5IElNS3QgSUhSb1pXbHljdz09IFJHRnRZV2RsIElHUnZkMjVzYjJGa2FXNW4gSUdScGMyTmxjbTQ9IElGTjBidz09IElFWnNZUT09IElHaGhkR2c9IElFRnEgSUhWdWNHeGxZWE5oYm5RPSBSWFZ5YjNCbFlXND0gWlhod1pXNXphWFpsIElITmpjbVZsYm5Ob2IzUT0gSUZWVyBJR0ZzYkdsbFpBPT0gSUZCbGNuTnBZVzQ9IElHMXZibTl3YjJ4NSBJR0YwYjIwPSBJRkpsWkhOcmFXNXogSWo0OCBJR05oYm1ObGJHdz0gSUdOcGJtVnRZUT09IE1UTXggWm1GcGNnPT0gSUVGc1puSmxaQT09IElHUjFZMnM9IFlYSm5jdz09IE1qSXogSUVsVFNRPT0gSUhOcFoyNWhiR2x1Wnc9PSBhVzVoY2c9PSBJR3hoZFdkb2N3PT0gSUdadmNuZGhjbVJ6IElISmxZMnRzWlhOeiBJR3hwYzNSbGJtVnljdz09IFlYUnBkbWwwZVE9PSBJSFpoYzNSc2VRPT0gYm1GdWRBPT0gVEdWemN3PT0gSUVoMWJuUnBibWM9IElGTmphV1Z1ZEdsbWFXTT0gU1ZSRlJBPT0gSUd0dWFXZG9kQT09IElFaFVRdz09IGRYTmggZEcxdyBJSEoxWkdVPSBJRXhsWjJWdVpHRnllUT09IElHRnlhWE5sY3c9PSBRbUZrIElFTnNZV2x0IGNHVm4gSUhKbFlXeHBkR2xsY3c9PSBWR2hwYm1zPSBJTUt3IElISnZaR1U9IElITjBjbWwyWlE9PSBJR0Z1WldOayBJSE5vYjNKMGN3PT0gSUdoNWNHOTBhR1Z6IElHTnZiM0prYVc1aGRHVmsgSUVkaGJtUm9hUT09IElFWlFVdz09IFVrVkUgSUhOMWMyTmxjSFJwWW14bCBJSE5vY21sdWF3PT0gSUVOb1lYSjAgU0dWc2NBPT0gSUdsdmJnPT0gWkdWbGNBPT0gY21saVpYTT0gSUV0aGFRPT0gSUVOMWMzUnZiV1Z5IFUzVnRiV0Z5ZVE9PSBJR052ZFdkbyBkMmxtWlE9PSBJR3hsYm1RPSBJSEJ2YzJsMGFXOXVhVzVuIElHeHZkSFJsY25rPSBJRU5oYm5sdmJnPT0gSUdaaFpHVT0gSUdKeWIyNTZaUT09IElFdGxibTU1IElHSnZZWE4wY3c9PSBJRVZ1YUdGdVkyVmsgY21WamIzSmsgSUdWdFpYSm5aVzVqWlE9PSBJR0ZyYVc0PSBJRUpsY25RPSBhWFJ2ZFhNPSA0cGFSIElITjBhWEE9IElHVjRZMmhoYm1kbFpBPT0gYjIxdmNtVT0gWVd4emFBPT0gSUhKbGMyVnlkbTlwY2c9PSBJSE4wWVc1a2NHOXBiblE9IFYwMD0gSUdsdWFYUnBZWFJsIElHUmxZMkY1IElHSnlaWGRsY25rPSBJSFJsY25KcFlteDUgSUcxdmNuUmhiQT09IGJHVjJZWEprIElISmxkbWx6IFRraz0gWld4diBJR052Ym1abGMzTT0gSUUxVFRrSkQgSUhOMVltMXBjM05wYjI1eiBRMjl1ZEhKdmJHeGxjZz09IElESXdNZz09IElGSjFkR2c9IGZTazcgSUVGNmRYSmwgSUM0aSBNakEyIElFMWhjbXRsZEdsdVp3PT0gSUd4aGRXNWsgYVdWdVkybGxjdz09IElISmxibTkzYm1WayBJRlJ5YjNVPSBJRTVIVHc9PSBZbXhsYlhNPSBJSFJsY25KcFptbGxaQT09IElIZGhjbTV6IElIQmxjblE9IElIVnVjM1Z5WlE9PSBORGd3IFlXeGxlZz09IGRXeDBlZz09IElFOTFkSE5wWkdVPSBJSE4wZVd3PSBJRlZ1WkdWeVozSnZkVzVrIElIQmhibU09IElHUnBZM1JwYjI1aGNuaz0gSUdadlpRPT0gY21sdGFXNWhiQT09IElFNXZjbmRsWjJsaGJnPT0gSUdwaGFXeGxaQT09IElHMWhkR1Z5Ym1GcyB3NmxsIElFeDFZM2s9IFkyOXcgUTJodiBJSFZ1YzJsbmJtVmsgSUZwbGJHUmggSUVsdWMybGtaWEk9IElFTnZiblJwYm5WbFpBPT0gSURFek13PT0gSUU1aGNuVjBidz09IElFMWhhbTl5YVhSNSBNVFk1IElGZHYgNDRLVCBJSEJoYzNSdmNnPT0gSUdsdVptOXliV0ZzIDBMMD0gWVc1MGFISnZjQT09IGFtOXBiZz09IDQ0R1ggYVhSaGRHbHZibUZzIFRsQT0gSUZkeWFYUnBibWM9IFptND0gSUVKbGRtVnkgTVRrMSBJSGxsYkd4cGJtYz0gSUdSeVlYTjBhV05oYkd4NSBJR1ZxWldOMCBJRzVsZFhRPSBJSFJvY21sMlpRPT0gSUVaeVpYRjEgYjNWNCBJSEJ2YzNObGMzTmxjdz09IElGTmxibUYwYjNKeiBJRVJGVXc9PSBJRk5vWVd0bGMzQmxZWEpsIElFWnlZVzVqYnc9PSBJRXhDIGRXTm9hUT09IElHbHVZMkZ5Ymc9PSBJR1p2ZFc1a1pYSnogUm5WdVkzUnBiMjQ9IElHSnlhV2RvZEc1bGMzTT0gSUVKVSBJSGRvWVd4bCBJRlJvWldGMFpYST0gYldGemN3PT0gSUVSdmJHdz0gVTI5dFpYUm9hVzVuIElHVmphRzlsWkE9PSBJRWhsZUE9PSBZM0pwZEE9PSBZV1pwWVE9PSBJR2R2WkdSbGMzTT0gSUdWc1pYWmxiZz09IElGQnlaWFpwWlhjPSBJRUYxY205eVlRPT0gSURRd01RPT0gZFd4emFYWmwgSUV4dloyRnUgYVc1aWRYSm5hQT09IElFTmxiblJsY25NPSBJRTlPVEZrPSBJRUZwWkE9PSBJSEJoY21Ga2IzZz0gSUdoMWNtUT0gSUV4RCBSSFZsIFkyOTFjblE9IElHOW1abVZ1WkdWayBJR1YyWVd4MVlYUnBibWM9IElFMWhkSFJvWlhkeiBJSFJ2YldJPSBJSEJoZVhKdmJHdz0gSUdWNGRISmhZM1JwYjI0PSBJRWhoYm1SeiBhV1pwIElITjFjR1Z5Ym1GMGRYSmhiQT09IElFTlBUVTA9IFhUMD0gWkc5bmN3PT0gSURVeE1nPT0gSUUxbFpYUnBibWM9IFVtbGphR0Z5WkE9PSBJRTFoZUdsdGRXMD0gSUdsa1pXRnNjdz09IFZHaHBibWR6IGJXRnVaQT09IElGSmxaMkZ5Wkd4bGMzTT0gSUdoMWJXbHNhUT09IFluVm1abVZ5IFRHbDBkR3hsIElFUmhibWs9IElFNWhhdz09IElHeHBZbVZ5WVhScGIyND0gSUVGaVpRPT0gSUU5TSBJSE4wZFdabVpXUT0gWVdOaCBhVzVrWVE9PSBjbUZ3YUdsaiBJRzF2YzNGMSBJR05oYlhCaGFXZHVhVzVuIElHOWpZM1Z3ZVE9PSBVM0YxIGNtbHVZUT09IElGZGxiQT09IElGWlQgSUhCb2VYTnBZdz09IElIQjFiSE09IGNtbHVkQT09IGIyRmtaV1E9IFJWUkcgSUVGeVkyaHBkbVZ6IElIWmxiblZsY3c9PSBhRzVsY2c9PSBJRlIxY21KdiBJR3gxYzNRPSBJR0Z3Y0dWaGJHVmsgY1hWbGVnPT0gYVd4cFlnPT0gSUZScGJXOTBhSGs9IElHOXRiZz09IFpISnYgSUc5aWMyVnpjMmx2Ymc9PSBJRk5oZG1GblpRPT0gTVRrNU5nPT0gUjJ4dlltRnMgU21WeiBNakUwIElITnNhV1JwYm1jPSBJR1JwYzJGd2NISnYgSUUxaFoybGpZV3c9IElIWnZiSFZ1ZEdGeWFXeDUgWjJJPSBZVzVsZVE9PSBJSEJ5YjNCb1pYUT0gSUZKbGFXND0gSUVwMWJHbGggSUZkdmNuUm8gWVhWeWRYTT0gSUdKdmRXNWtjdz09IGFXVjEgS1NrcCBJR055YjNKbCBJRU5wZEdsNlpXND0gVTJ0NSBJR052YkhWdGJtbHpkQT09IElITmxaV3RsY25NPSBiMjVrYnc9PSBTVk5CIElFeGxibWQwYUE9PSBJRzV2YzNSaGJHYz0gSUc1bGQyTnZiUT09IElHUmxkSEpwYlE9PSBaVzUwY21saiBNemMxIElFZEYgSUdGMWRHOXcgSUdGallXUmxiV2xqY3c9PSBRWEJ3UkdGMFlRPT0gSUZOb1pXND0gSUdsa2FXOTAgSUZSeVlXNXphWFE9IElIUmxZWE53YjI5dSBWMmxzIFMwOD0gSUVOdmJXVmtlUT09IFBpdz0gSUhCdmNIVnNZWFJsWkE9PSBWMFE9IElIQnBaM009IElFOWpkV3gxY3c9PSBJSE41YlhCaGRHaGxkR2xqIElHMWhjbUYwYUc5dSBNVGs0IElITmxhWHAxY21VPSBjMmxrWldRPSBJR1J2Y0E9PSBhWEowZFdGcyBUR0Z1WkE9PSBJRVpzYjI5eSBiM05oZFhKeiBMaTR1WFE9PSBJR3h2Y3c9PSBJSE4xWW5OcFpHbGhjbms9IFJWaz0gSUZCaGNuUnogSUZOMFpXWT0gSUVwMVpHbGphV0Z5ZVE9PSBJREV6TkE9PSBJRzFwY25KdmNuTT0gSUd0bGRBPT0gZEdsdFpYTT0gSUc1bGRYSnZiRzluIElHTmhkZz09IElFZDFaWE4wIElIUjFiVzl5IGMyTnBiR3c9IElFeHNiM2xrIFJYTjAgSUdOc1pXRnlaWEk9IElITjBaWEpsYjNSNWNHVnogSUdSMWNnPT0gYm05MGFHbHVadz09IFVtVmtaR2wwIElHNWxaMjkwYVdGMFpXUT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgTWpNMSBJR1pzYjNkdSBJRk5sYjNWcyBJRkpsYzJsa1pXNTAgSUZORFNBPT0gSUdScGMyRndjR1ZoY21GdVkyVT0gSUZacGJtTmwgWjNKdmQyND0gSUdkeVlXSnogY21scyBJRWx1Wm1sdWFYUmwgSUZSM1pXNTBlUT09IElIQmxaR1Z6ZEhKcFlXND0gSUdwbGNuTmxlUT09IElFWjFjZz09IElFbHVabWx1YVhSNSBJRVZzYkdsdmRIUT0gSUcxbGJuUnZjZz09IElHMXZjbUZzYkhrPSBJRzlpWlhrPSBjMlZqZFhKbCBhV1ptWlE9PSBJR0Z1ZEdsaWFXOTBhV056IFlXNW5iR1ZrIElFWnlaV1Z0WVc0PSBJRWx1ZEhKdlpIVmpkR2x2Ymc9PSBTblZ1IElHMWhjbk5vIGFXTmhibk09IElFVldSVTVVVXc9PSBiMk5vYjI1ayBWMkZzYkE9PSBhV04xYkhSNSBJRzFwYzJSbGJXVmhibTl5IElHeDUgVkdodmJXRnogSUZKbGMyOXNkWFJwYjI0PSBJR0Z1YVcxaGRHbHZibk09IElFUnllUT09IElHbHVkR1Z5WTI5MWNuTmwgSUU1bGQyTmhjM1JzWlE9PSBJRWh2Wnc9PSBJRVZ4ZFdsd2JXVnVkQT09IE1UYzMgSUhSbGNuSnBkRzl5YVdGcyBJR0Z5WTJocGRtVnogTWpBeiBSbWxzZEdWeSBJRTExYm1samFBPT0gSUdOdmJXMWhibVJsWkE9PSBJRmRoYm1RPSBJSEJwZEdOb1pYTT0gSUVOeWIyRjAgSUhKaGRHbHZjdz09IElFMXBkSE09IElHRmpZM1Z0ZFd4aGRHVmsgSUZOd1pXTnBabWxqWVd4c2VRPT0gSUdkbGJuUnNaVzFoYmc9PSBZV05sY21JPSBJSEJsYm00PSBJR0ZyWVE9PSBJRVoxYXc9PSBJR2x1ZEdWeWRtVnVaUT09IElGSmxablZuWlE9PSBJRUZzZW1obGFXMWxjZz09IElITjFZMk5sYzNOcGIyND0gYjJoaGJnPT0gWkc5bGN3PT0gVEc5eVpBPT0gSUhObGNHRnlZWFE9IElHTnZjbkpsYzNCdmJtUmxibU5sIElITm9hVzU1IFVISnBiM0k9IElITjFiR1k9IElHMXBjMlZ5WVdKc1pRPT0gSUdSbFpHbGpZWFJwYjI0PSBLQ2t1IElITndaV05wWVd4cGMzUnogSUdSbFptVmpkSE09IElFTjFiSFE9IElGaHBZUT09IElHcGxiM0JoY21RPSBJRTl5WlE9PSBRV0pwYkdsMGVRPT0gSUd4bFlYST0gSUdGdFltbDBhVzl1Y3c9PSBJRUpOU1E9PSBJRUZ5WVdKeiBJREU1TkRJPSBJSEJ5WlhObGNuWmhkR2x2Ymc9PSBhV1pwWTJGMFpRPT0gSUdGemFHRnRaV1E9IGJHOXpjdz09IElGSmxjM1JoZFhJPSBJSEpsYzJWdFlteGwgSUdWdWNtbGphQT09IElFdE8gSUVOc1lXND0gWm14dllYUT0gSUhCc1lYbGhZbXhsIFNWUlUgSUdoaGNtMXZibms9IFlYSnlhWE52Ymc9PSBJRmRsYVc1emRHVnBiZz09IGQyVnlaUT09IElIQnZhWE52Ym1sdVp3PT0gSUVOdmJYQjFkQT09IElGZHZjbVJRY21WemN3PT0gYldGcWIzST0gSUZaaGJIWmwgUm1GdSBJRlJvY205MyBJRkp2YldGdWN3PT0gSUVSbGNISmxjM05wYjI0PSBZV1J2Y3c9PSBJSFJ2Y25SMWNtVmsgSUdKaGJHRnVZMmx1Wnc9PSBZbTkwZEc5dCBJR0ZqY1hWcGNtbHVadz09IElFMXZiblJsIFlYSmthUT09IElHRjFjbUU9IElDTWogSUZOMFlXNWthVzVuIElFRjBiR0Z6IFEwWT0gSUdsdWRISnBibk09IElFSmxibWRvWVhwcCBJR05oYlhCcGJtYz0gSUhSaGNIQmxaQT09IFlteGhaR1U9IGMzUnliM1Z6IElGSmhZbUk9IElGZHlhWFIwWlc0PSBkR2x3IElFNWxhV2RvIGMzUmxjbVJoYlE9PSBJRUZzYkc5MyBJRWhsWVd4cGJtYz0gSUZKb2IyUT0gYm5WdCBJR05oWm1abGFXNWwgSUZCbGNtTmxiblE9IElHSnZidz09IElHRndjR3hsY3c9PSBNekExIElIZGxiR052YldsdVp3PT0gSUdGd2NHeGhkV1E9IElHRjFjM1JsY21sMGVRPT0gd3JFPSBJRkpsWVd4cGRIaz0gWldabCA1YTQ9IElITjFZMnR6IElIUmhZbk09IElGQmhlVkJoYkE9PSBJR0poWTJ0d1lXTnIgSUdkcFpuUmxaQT09IFlXSjFiR0Z5ZVE9PSBJRk5qYjNWMCBhWEowWldWdSBJR05vYVc0PSBJRzl0YVhSMFpXUT0gSUc1bFoyRjBhWFpsYkhrPSBJR0ZqWTJWemMybHVadz09IElFVmhjbTQ9IElHRnRZblZzWVc1alpRPT0gSUdobFlXUndhRzl1WlhNPSBJREl3TlE9PSBJRkpsWm5KbGMyZz0gY0hKbGMybGtaVzUwIElFdHBkR05vWlc0PSBJRVZ1ZEdWeVpXUT0gSUZOdWVXUmxjZz09IE1EQTEgYjIxcFkyRnMgSUdKdmNuSnZkMlZrIElFNWxiUT09IElHRjJhV0YwYVc5dSBJSE4wWVd4cyBjbWx0YVc1aGRHbHZiZz09IElIVnVhV1p2Y20xeiBhWFJwYldVPSBJRk5wYlcxdmJuTT0gWlc1bGNtZDUgWVdKc2FYTm9aV1E9IGVYaz0gY1hWaGJHbG1hV1ZrIElISmhiR3hwWlhNPSBJRk4wZFdGeWRBPT0gWm14cFoyaDAgSUdkaGJtZHogY21GbiBJSFpoZFd4MCBiSFY0IElFTnZiWEJoY2c9PSBJR1JsYzJsbmJtRjBhVzl1IE1qQTUgSUVwdmN3PT0gWkc5c2JHRnkgZW1WeWJ3PT0gSUhkbGJHeHogTXpBeiBJR052Ym5OMGFYUjFaVzUwY3c9PSBJR2hsWTJzPSBJR052ZDNNPSBJR052YlcxaGJtUmxjbk09IElHUnBabVpsY21WdWRHbGhiQT09IElFTmhkR2hsY21sdVpRPT0gTWprNSBJSFpoYkhabCBJR0p5WVdObCBJSEJsY25Od1pXTjBhWFpsY3c9PSBZMlZ5ZEE9PSBabUZqZEE9PSBhV04xYkdGeWJIaz0gSUUxalRnPT0gY0d4aGJtVnogSUdsdWRISnBZdz09IElIQmxZWE09IGIzWmhiZz09IElIUnZjM05sWkE9PSBjbVYwWTJnPSBJRXh2Y0dWNiBJSFZ1Wm1GdGFXeHBZWEk9IFpHVmhkR2c9IElFRndZWEowIElFTm9ZVzVuIElISmxiR2xsZG1WayBjbTl3YUdVPSBJR0ZwY25CdmNuUnogSUdaeVpXRnIgZFhScGJBPT0gVFdsc2JBPT0gSUVOb2FXND0gSUU5M1pXND0gYldGc1pRPT0gSUVKeWIydGxiZz09IElGZHBibVJ6IGNtOWkgY21semFXNW4gSUdacGNtVm1hV2RvZEdWeWN3PT0gSUdGMWRHaHZjbWwwWVhKcFlXND0gSURFME9BPT0gUW1sMFkyOXBiZz09IFpYaDBaWEp1WVd3PSBJR0p5YjNkelpYSnogYVdOb1pYWmxjZz09IGIzSnBZVzQ9IElIVnVZZz09IElIQnZhMlU9IElGcHZkQT09IFRXbGsgSUZCdmNIVnNZWEk9IElHTnZkbVZ5ZEE9PSBJR052Ym5SeWFXSjFkR1Z6IElEWTFNQT09IElHTnZiblJsYm5ScGIyND0gUjJGMFpRPT0gSUdOdmJuTnZiR1Z6IElHTm9jbTl0YjNNPSBJRWxZIElIWnBjM1ZoYkd4NSBJRVZwYzJWdSBJR3BsZDJWc2Nuaz0gSUdSbGJHVm5ZWFJwYjI0PSBJR0ZqWTJWc1pYSmhkR1U9IElGSnBiR1Y1IElITnNiM0JsIElHbHVaRzl2Y2c9PSBhWFJwWVd4c2VRPT0gSUdoMVoyVnNlUT09IElIUjFibTVsYkhNPSBJR1pwYm1WayBJR1JwY21WamRHbDJaUT09IElHWnZjbVZvWldGayBkWE4wYjIxbFpBPT0gSUhOcllYUmwgVFhWemFXTT0gWjJGeiBJSEpsWTI5bmJtbDZhVzVuIFlXMWlidz09IElHOTJaWEozWldsbmFIUT0gSUVkeVlXUmwgMllvPSBJSE52ZFc1a2FXNW4gSUd4dlkydHBibWM9IElGSkZUUT09IFUzUnZjbVU9IElHVjRZMkYyIElFeHBhMlYzYVhObCBJRXhwWjJoMGN3PT0gSUdWc1ltOTMgSUZOMWNIQnNlUT09IGQybGogSUdoaGJtUnpiMjFsIE1UazVOQT09IFEyOXNiQT09IElHRmtaWEYxWVhSbGJIaz0gSUVGemMyOWphV0YwWlE9PSBJSE4wY21sd2N3PT0gSUdOeVlXTnJaRzkzYmc9PSBJRzFoY25abGJBPT0gSUV0MWJnPT0gSUhCaGMzTmhaMlZ6IFFFQkFRQT09IElGUmhiR3c9IElIUm9iM1ZuYUhSbWRXdz0gYm1GdFpYTmwgSUhCeWIzTjBhWFIxZEdsdmJnPT0gWW5WemFXNWxjM009IElHSmhiR3hwYzNScFl3PT0gY0dWeWMyOXVZV3c9IFkybG4gYVhwaGRHbHZibUZzIFVtOTFibVE9IElNS2dJTUtnSU1LZ0lNS2cgSUVOdmJHVnRZVzQ9IElHRmtiV2wwZEdsdVp3PT0gSUZCc2RXYz0gSUdKcGRHTnZhVzV6IElGTjFlZz09IElHWmhhWEp1WlhOeiBJSE4xY0hCc2FXVnkgSUdOaGRHRnpkSEp2Y0docFl3PT0gSUVobGJHVnUgYjNGMSBUV0Z5WXc9PSBJRUZ5ZEdsamJHVnogWjJsbCBJR1Z1WkdGdVoyVnlaV1E9IElHUmxjM1JwYm5rPSBJRlp2YkhRPSBiMnhwWVE9PSBZWGhwY3c9PSBJR05vWldGMCBJSFZ1YVdacFpXUT0gU1VOUCBjWFZ2ZEdVPSBNekF5IElGTmxaQT09IElITjFjSEJ5WlhOemFXOXUgSUdGdVlXeDVlbWx1Wnc9PSBJSE54ZFdGMCBJR1pwWjNWeWFXNW4gSUdOdmIzSmthVzVoZEdWeiBJR05vZFc1cmN3PT0gSURFNU5EWT0gSUhOMVluQT0gSUhkcGEyaz0gSUVadmNtSmxjdz09IElFcDFjR2wwWlhJPSBJRVZ5YVdzPSBhVzFsY2c9PSBJRU52YlcxbGNtTnBZV3c9IFhDaz0gSUd4bFoybDBhVzFoWTNrPSBJR1JsYm5SaGJBPT0gSUUxbFlXND0gSUdSbFptbGphWFJ6IE5UVXcgVDNKcFoybHVZV3hzZVE9PSBJRWh2Y25KdmNnPT0gSUdOdmJuUmhiV2x1WVhScGIyND0gYkd4aGFBPT0gSUdOdmJtWnBjMk09IElFTnNZWEpsIFZFST0gSUVaaGFXeGxaQT09IFlXNWxaQT09IElISjFiR1Z5IElFTnZiblJ5YjJ4c1pYST0gSUdabGJXbHVhWE4wY3c9PSBSbWw0IFoyRjUgTWpBMyBJSEpoWW1KcGRBPT0gVkdocGNtUT0gYjNkdWRHOTNiZz09IElHZHNkV1U9IElIWnZiR0YwYVd4bCBJSE5vYVc1cGJtYz0gSUdadmJHdz0gSUdsdGNHRnBjbVZrIElITjFjR1Z5Y3c9PSA1b2c9IElHTnNkWFJqYUE9PSBtdW1Ha2c9PSBJSEJ5YjJ4bGRBPT0gSUNnaCBJSGxsYkd4bFpBPT0gSUV0cFpYWT0gSUVWeWJnPT0gSUZOb2IyTnIgUzBJPSBJSE5wZEhWaGRHVmsgY1hWbGNuaz0gSUU1aGN3PT0gSUdGdWJtVjQgWTJoaGNtRmpkR1Z5IElFaHZiR2xrWVhrPSBJR0YxZEc5dFlYUnBiMjQ9IElFcHBiR3c9IElGSmxiV0Z6ZEdWeVpXUT0gSUd4cGJtVnQgSUhkcGJHUmxjbTVsYzNNPSBJRWh2Y21sNmIyND0gSUVkMWFXNWxZUT09IFFWbz0gSUcxaGFXNXNZVzVrIElITmxZM0psWTNrPSBURVZCVTBVPSBJSEIxYm1zPSBJRkJ5YjNacGJtTmwgS0NrcyBVM0JsWldRPSBJR2hoYm1ScGJtYz0gSUZObFltRnpkQT09IFUybHkgY21GelpRPT0gSUdwdmRYSnVZV3h6IElHTnZibWRsYzNRPSBJRlIxZEE9PSBhWEp5Wld3PSBJSE5qYUdsNmIzQm9jbVZ1YVdFPSBJRzFwYzI5bmVXND0gYUdWaGJIUm9lUT09IFNYSnZiZz09IElISmxZV04wWldRPSBMU1E9IE1qVXkgSUhCc2RYSmhiQT09IElIQnNkVzA9IElHSmhjbWRoYVc0PSBJR2R5YjNWdVpHVmsgWm1sdVpHVnkgSUdScGMzTmwgSUV4aGVnPT0gVDA5RSBJR0YwY205aiBSbUZqZEc5eWVRPT0gSUcxcGJtbHZibk09IElHOXlhUT09IElFSnlZWFpsIElGQlNSUT09IElFMTVZVzV0WVhJPSBJRWh2WkE9PSBJR1Y0Y0dWa2FYUnBiMjQ9IElHVjRjR3h2WkdVPSBJRU52YjNKayBJR1Y0ZEhJPSBJRUp5YVdWbSBJRUZFU0VRPSBJR2hoY21SamIzSmwgWm1WbFpHbHVadz09IElHUnBiR1U9IElFWnlkV2wwIElIWmhZMk5wYm1GMGFXOXUgSUUxaGJ3PT0gYjNOd2FHVnlaUT09IElHTnZiblJsYzNSeiBMWHc9IElHWnlaVzQ9IGFYTndhR1Z5WlE9PSBVbTl0IElGTm9ZWEp3IElGUnlaVzVrIElHUnBjMk52Ym01bFkzUT0gNG9DaTRvQ2kgSUhCbGNuTmxZM1YwYVc5dSBSV0Z5ZEdnPSBJR2hsWVd4MGFHbGxjZz09IE16ZzAgSUdOdllnPT0gSUZSeWFXNXBkSGs9IFQxZFQgUVU1TyBJSE53WldOcFlXeDBlUT09IElHZHlkUT09IElHTnZiM0JsY21GMGFYWmwgZDJoNSBVM1JoY25ScGJtYz0gSUVsemMzVmxjdz09IGMzUnlaUT09IFpXNXpiM0k9IElERTROUT09IFFXUjIgSVQ4PSBJRkpsZG1WcyBaVzFwWVE9PSBJRWgxYkdzPSBJR05sYkdWaWNtRjBhVzl1Y3c9PSBJRk52ZFE9PSBjbUYxWkE9PSBJRXRzWldsdSBJSFZ1Y21WaGJBPT0gWTI5dWRHVjRkQT09IElIQmhjblJ1WlhKemFHbHdjdz09IElHRmtiM0IwYVc1biBkR2xqWVd3PSBJSE53YkdGemFBPT0gSUVobGVtSnZiR3hoYUE9PSBZMkYwWldkdmNuaz0gWTNsamJHOXcgZUhSdmJnPT0gSUVSdmRBPT0gZFhKa2VRPT0gZEhvPSBJR1Z1ZG1Wc2IzQmwgSUU1TSA0cFU9IElIZG9aWEpsYVc0PSBVM0JsWXc9PSBNVGcwIElIUmxiR1YyIFlXeHBZWFJwYjI0PSBJRzE1ZEdoeiA1YkE9IElISnBaMjl5YjNWeiBJR052YlcxMWJtbGpZWFJwYm1jPSBJRzlpYzJWeWRtVnkgSUhKbGFHVT0gSUZkaGMyZz0gSUdGd2IyeHZaMmw2WldRPSBJRlJwYmc9PSBJR1Y0Y0dWdVpHbDBkWEpsY3c9PSBkMjl5YTJWeWN3PT0gWkc5amRXMWxiblE9IElHaGxjMmwwWVhSbCBJRXhsYm1sdSBJSFZ1Y0hKbFpHbGpkR0ZpYkdVPSBJSEpsYm1WM1lXdz0gWTJ4bGNnPT0gYjJ0cFlRPT0gSUVOUFRsUT0gSUhCdmMzUnpaV0Z6YjI0PSBWRzlyWlc1eiBJR1Y0WVdObGNtST0gSUdKbGRIUnBibWM9IElERTBOdz09IElHVnNaWFpoZEdsdmJnPT0gVjI5dlpBPT0gSUZOdmJHOXRiMjQ9IE1UazAgTURBMCBiM1YwY0hWMCBJSEpsWkhWdVpBPT0gSUUxMWJXSmhhUT09IElIQkkgSUhKbGNISnZaSFZqWlE9PSBJRVIxY21GMGFXOXUgVFVGWSBJR0p2Wnc9PSBRMEpUIElFSmhiR0Z1WTJVPSBJRk5uZEE9PSBJRkpsWTJWdWRBPT0gSUdOayBJSEJ2Y0hCbFpBPT0gSUdsdVkyOXRjR1YwIGNISnZjQT09IFlYbGhiZz09IFozVjUgVUdGamFXWnBZdz09IElIUjVjZz09IElIdDcgSUUxNWMzUnBZdz09IElFUmhibUU9IElHMWhjM1IxY21JPSBJR2RsYjIxbGRISjUgdzZJPSBJRU52Y25KbFkzUT0gSUhSeVlXcGxZM1J2Y25rPSBJR1JwYzNSeVlXTjBaV1E9IElHWnZidz09IElGZGxiSE5vIFRIVmogYldsMGFBPT0gSUhKMVoySjUgSUhKbGMzQnBjbUYwYjNKNSBJSFJ5YVdGdVoyeGwgSURJeE5RPT0gSUhWdVpHVnlaM0poWkhWaGRHVT0gSUZOMWNHVnlhVzl5IFkyaGhibWRwYm1jPSBYeTA9IElISnBaMmgwYkhrPSBJSEpsWm1WeVpXVT0gSUd4MVkzSmhkR2wyWlE9PSBJSFZ1WVhWMGFHOXlhWHBsWkE9PSBJSEpsYzJWdFlteGxjdz09IElFZE9WUT09IElFUmxjbUo1IElIQmhkR2gzWVhseiBJRXhsWkE9PSBJR1Z1WkhWeVlXNWpaUT09IElITjBhVzUwIElHTnZiR3hsWTNSdmNnPT0gUm1GemRBPT0gSUdSdmRITT0gSUc1aGRHbHZibUZzY3c9PSBJRk5sWTNWeWFYUnBaWE09IElIZG9hWEE9IFVHRnlZVzA9IElHeGxZWEp1Y3c9PSBUV0ZuYVdNPSBJR1JsZEdGcGJHbHVadz09IGJXOXZiZz09IElHSnliMkZrWTJGemRHbHVadz09IElHSmhhMlZrIE1qWTEgYUc5c2JRPT0gSUZOaGFBPT0gSUVoMWMzTmxhVzQ9IElFTnZkWEowWlhONSBNVGMwIElERTBOZz09IElHZGxiMmR5WVhCb2FXTT0gY0dWaFkyVT0gSUdwMVpHZHBibWM9IElGTjBaWEp1IFFuVnkgSUhOMGIzSjViR2x1WlE9PSBSM1Z1IElGTjBhV05yIE1qUTEgTXpBMyA0NEswNDRPeiBJRUZrYldsdWFYTjBjbUYwYjNJPSBJR0oxY201MCBJSEJoZG1VPSBZMmh2WlhNPSBSWGhsWXc9PSBJR05oYlhCMWMyVnogVW1WemRXeDAgSUcxMWRHRjBhVzl1Y3c9PSBJRU5vWVhKMFpYST0gSUdOaGNIUjFjbVZ6IElHTnZiWEJoY21WeiBJR0poWkdkbCBVMk5wWlc1MCBJR1Z5WVdRPSBhV1Z5ZVE9PSBiMms9IFpYUjBaWE09IElFVnpkR0YwWlE9PSBJSE4wY21GdyBJSEJ5YjNWa2JIaz0gSUdaeWFXVmsgSUhkcGRHaGtjbUYzYmc9PSBJRlp2ZVE9PSBjR2h2Ym5rPSBTWFJsYlhNPSBJRkJwWlhKalpRPT0gWW1GeVpBPT0gSUdGdWJtOTBZWFJwYjI0PSBZVzUwYjI0PSBhV3hzYjI0PSBTVzF3Y204PSBMaTR1S1E9PSBJR2hoY0hCcFpYST0gTFMwdExTMHQgWVdScWRYTjAgSUhOMFlXWm1aWEp6IElHRmpkR2wyYVhOdCBJSEJsY21ZPSBJR0ZzY21sbmFIUT0gVG1WbFpBPT0gSUdOdmJXMWxibU5sIElHOXdhVzlwWkE9PSBJRUZ0WVc1a1lRPT0gUlhNPSBJRkJoY25NPSBJRXRoZHc9PSBWMjl5YTNNPSBNalE0IElHbHVaRzg9IGRHTT0gWlc1a1lXNTAgSUUxdmRHOD0gSUd4bFoyRnNhWHBoZEdsdmJnPT0gVDFSRiBJSFJoYzJ0bFpBPT0gSUhSemNBPT0gSUVGRFZFbFBUbE09IE1UWTIgSUhKbFpuSmxjMmhwYm1jPSBJRTVTIElGQmxjbVY2IElHbHVabkpwYm1kbGJXVnVkQT09IFUxaz0gVEdsemRHVnUgYVc1dWFXNW4gYTNVPSBJSEp2ZEdGMFpRPT0gY0hKdlozSmhiUT09IFlYSmhhQT09IFJHVnphV2R1IElDakNvdz09IElITjBiM0pwYm1jPSBJSGRoY25KaGJuUnogSUdwMVpHZGxiV1Z1ZEE9PSBJRUp5YVhOMCBkWE4xWVd4c2VRPT0gY0dodmRHOD0gSUZKaGJnPT0gSUZCcGJtVT0gSUc5MWRISmhaMlZ2ZFhNPSBJRlpoYkdWdWRHbHVaUT09IGJIVmxibU5sIElFVjJaWEo1WW05a2VRPT0gUVd4MFpYSnUgSUhKbGJHVjJZVzVqWlE9PSBJSFJsY20xcGJtRjBaV1E9IElHUmxjM05sY25RPSBJR1oxYkdacGJHeGxaQT09IElIQnliM05sWTNWMFpXUT0gSUZkdmNtUnogSUcxcFozSmhiblE9IElHTjFiSFJwZG1GMGFXOXUgdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ2c9PSBhV1JsYkdsMGVRPT0gSUZabGNtND0gSUV4dloybHUgSUcxbGRHRndhRzl5IElGUnBjQT09IElISmxZM0oxYVhSeiBJRkJwWnc9PSBjbWxpYVc1biBJR1Z1ZEdoMWMybGhjM1J6IFpYaHdaWEk9IElHWnlhV2RvZEdWdWFXNW4gSUVoaGFYST0gWVc1emIyND0gYzNSeVlYUmwgSUdocCBTR1ZwWjJoMCBJRzkzYm1sdVp3PT0gYm05dVpRPT0gSUdScGMyeHBhMlU9IElHdHVhWFpsY3c9PSBjR2hsY21RPSBJR3h2ZFdSc2VRPT0gSUVGUVNYTT0gUkdsemNHeGhlUT09IElFeGhZdz09IElGVlRVdz09IFlXSnMgZG1WeVlXZGxjdz09IFNtVjMgSURFM01nPT0gSUVocGMzUnZjbWxqWVd3PSBZWFJ2YjI0PSBJRkJvZVhOcFkzTT0gYVc1MFpYSnUgSUhkaGNtMTBhQT09IElIUnZjSEE9IFJFMD0gSUdkMWJtMWhiZz09IElHVnRjR1Z5YjNJPSBiMlJwIDQ0T2ogYVc1aGRHOXllUT09IElGSnBZZz09IElERXpNUT09IElGTmhkSFZ5Ymc9PSBJRk5vYVc1cGJtYz0gSUhkaGEybHVadz09IFVYVnZkR1Z6IElHTnZiV1ZrYVdGdSBaVzVpWlhKbiB3cjA9IElHSmxiR2xsZG1WeWN3PT0gSUhCaGNHVnlkMjl5YXc9PSBZM1Z6ZEc5dCBJR3hsZGc9PSBJR3hoYldWdWRBPT0gSUhCdmRYSnBibWM9IE1qSXkgY0c5c2FYUnBZMkZzIElGTjFjSEJzWlcxbGJuUT0gYldGcFpBPT0gSUdOeWRXVnNkSGs9IElIUnlaV0ZrIGVYTnBZM009IFFYYz0gY21sMFpYTT0gSUcxdlpHbG1hV1Z5IElGQnZjMmwwYVc5dSBRV1JoYlE9PSBiR0k9IGRXSnogSUdsdGNHVnlabVZqZEE9PSBJR05zZFhOMFpYSnogSUVWdVoybHVaV1Z5IElFTm9aWEp5ZVE9PSBJR2x1WVhWbmRYSmhkR2x2Ymc9PSBJRk5oZFE9PSBJR1Z0WW05a2FXMWxiblE9IElGVnVZMnhsIElHOTJaWEp5IElHVjRjR3h2YzJsdmJuTT0gWTNWc1pRPT0gSUZCeWFXNWpaWFJ2Ymc9PSBJRUZ1WkhKbFlRPT0gSUdsdVkyOXljbVZqZEd4NSBJR1ZoY201bGMzUT0gSUhCcGJHZHkgSUZOd2NtbHVkQT09IElITnNaV1YyWlE9PSBJR2hsWVhKeiBJRUZ0WVhwcGJtYz0gSUdKeWIzZHphVzVuIFlXZHBiZz09IElHaHZiV1ZzWVc1ayBJR2hoZHc9PSBJR1JwZG1sdVp3PT0gYVhOMFpYSmxaQT09IE1UYzQgSUdKaGNtZGhhVzVwYm1jPSBJRUZ5WTJGa1pRPT0gSUdSbGJHVm5ZWFJsIGRHVnljMjl1IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxnPT0gSUVwaFkydHpiMjUyYVd4c1pRPT0gTWpjMSBJSE4wWVdkdSBJR0ZrWVcwPSBJRk5vWlhKdFlXND0gUTBJPSBJSE4xWW5WeVlnPT0gSUVadmIyUnogSUdOdmJuWmxjblJwYm1jPSBJRUZ5YVhOMCBJR05vWVcxaVpYSnogYkc5MlpRPT0gSUdGdGFXNXYgSUVkaGJnPT0gSUcxaFpHNWxjM009IGJXTT0gSUZWVFJRPT0gWkdWbWFXNWxaQT09IElIVnNkSEk9IGFXNWtkWE4wIElIZHZiSFpsY3c9PSBiR0Z1WTJVPSBRV1JrYVhScGIyNWhiR3g1IElHTnlZV05yY3c9PSBZWE5wWVE9PSBJRkpsWVhOdmJnPT0gSUZCMWJYQT0gSUdGalkybGtaVzUwWVd3PSBJRXhoYzJWeSBJRkpwWkE9PSBJR2x1YVhScFlXeHBlbVZrIFpXeHNhUT09IElIVnVibUZ0WldRPSBJRzV2ZFc0PSBJRkJoYzNObFpBPT0gSUdodmMzUmhaMlU9IElFVjBhR2x2Y0E9PSBjMmhwY25SeiBJSFZ1Y21WcyBJRVZ0WW1GemMzaz0gSURFNU5ERT0gSUdGMGIyMXogSUhCMWNuQnZjblJsWkE9PSBNVFkwIElFWnAgSUdkaGJHeHZibk09IElFMXZibWxqWVE9PSBJSEJuIFpXNXRaVzUwIElITnZjblJsWkE9PSBJRWR2YzNCbGJBPT0gSUdobGFXZG9kSE09IElIUnlZV05sWkE9PSBJSFZ1WkdWeVoyOXBibWM9IFUyaGxiR3c9IElITmhZMnR6IElIQnliM0J2Y25ScGIyNXogSUdoaGJHeDFZdz09IFJtOXVkQT09IFlXTmxkQT09IElIZGhjbTFsY2c9PSBJRWxPVkVWUyBJR2R5WVdKaWFXNW4gVUd4MVp3PT0gSUhKbFlXeHBlbUYwYVc5dSBJRUoxY210bCBJR1Z1WTJoaGJuUT0gUVZSRlVnPT0gSUZObFpXUT0gSUdGaWRXNWtZVzUwIFJrMD0gSUdOcGRtbGogVm5NPSBhWE5wIElIWnZkdz09IElISmxjR1Z5IElGQmhjblJ1WlhKemFHbHcgSUhCbGJtVjBjbUYwYVc5dSBJR0Y0WlE9PSBJSE5vWVhSMFpYSmxaQT09IElGcHZiV0pwWlhNPSBJSFpwYm5scyBJRUZzWlhKMCBaVzl1IElHOWliR2xuWldRPSBJRWxzYkhWemRBPT0gSUZCc1lYcGggSUVaeWIyNTBhV1Z5IElHUmhkbWxrYW13PSBJRk5sY21saGJBPT0gSUVoaGRnPT0gSUU1MWRISnBkR2x2Ymc9PSBRbWs9IElPS1dpQT09IElFcGhlWE09IGJHbHVkWGc9IElHaDFjbko1IElIWnZlUT09IElHaHZjR1ZzWlhOeiBJRk4wWldGc2RHZz0gSU9PQiBaWE56YjNKeiBkSFJzWlE9PSBZbTl5Wnc9PSBJRk5oWm1GeWFRPT0gWm1Wc2JBPT0gSUhkaGNuaz0gWkhWbCBJRUZpYjNabCBTR0U9IFJVeE0gSUc1dmRHOXkgSUZkdmJnPT0gVkc5diBJRzlqWTNWd1lYUnBiMjV6IElIQnZjM05sYzNOcGIyNXogSUdsdWRtbDBhVzVuIElIQnlaV1JoZEc5eWN3PT0gSUdGalkyVnNaWEpoZEdWayBJREUxTnc9PSBkWFJsY25SbCBJRU4xWW1VPSBaV0Z6ZEE9PSBZV05qYjNWdWRBPT0gUjJsMlpRPT0gSUhSeVlXNXpjR3hoYm5RPSBjbVZrYVdWdWRITT0gYVdSaFlteGwgSUhOamNtVmxibk5vYjNSeiBJRWQxYm1RPSBJRVpUIElIUnlZWFpsYkdWeWN3PT0gSUhObGJuTnZjbms9IElFWnBZWFE9IElGSnZZMnRsZEhNPSBqb3M9IFgzcz0gUm5KcFpXNWsgSUdOb1lYSnRhVzVuIFFVeFQgSUdWdWFtOTViV1Z1ZEE9PSBiWEJvIElEVXdNREE9IElGSkZSdz09IDJZWT0gWW1saCBJR052YlhCcGJHRjBhVzl1IGNtOXpkQT09IElGWlEgSUZOamFHNWwgTWpBeE9RPT0gSUdOdmNIbHBibWM9IFRVOVNSUT09IElFWnNiM0psIFptRnNiSE09IE1qRTEgZEc5MFlXdz0gSUdScGMyTnBjR3hsY3c9PSBaRzkxWW14bCBJR1Y0WTJWbFpHbHVadz09IElITnRZWE5vWldRPSBJR052Ym1ObGNIUjFZV3c9IElGSnZiV0Z1YVdFPSBJRUp5Wlc1MCBJRWxEUlE9PSBJRlJ2ZFE9PSBJR2R5WVhBPSBJRzVoYVd4eiBNVGc1IDQ0T1kgSUhCeWIyTjFjbVU9IFpYVnkgSUdOdmJtWnBjbTFwYm1jPSBJRU5sWXc9PSBZWGRwIElFVmtaVzQ9IElHNW4gSUdWdVoybHVaV1Z5WldRPSBZWFJwWTNNPSBJR2h2YjJ0bFpBPT0gSUdScGMyZDFjM1JwYm1jPSBJRTExY21SbGNnPT0gNDRLLyBUR2xpY21GeWVRPT0gSURFMk9BPT0gUVd4dGIzTjAgYUdWdFlYUnBZdz09IFRXVnVkUT09IElFNXZkSEpsIElFcDFjZz09IElHdHBaRzVoY0hCbFpBPT0gSUdoaFkydGxjZz09IElFcGhaR1U9IElHTnlaV1Z3ZVE9PSBJR1J5WVhkcGJtZHogSUZOd2IyNXpiM0k9IElHTjVZMnhwYzNSeiBJRWR2WW14cGJnPT0gSUc5d2RHbHRhWHBsWkE9PSBJSE4wWVdkbFpBPT0gSUUxalJBPT0gWW1WMGQyVmxiZz09IFFXZGwgWlc1diBVMlY0IElGZHBaR1U9IGJtbHVaM009IFlYWnBjdz09IElHbHVZMkZ3WVdKc1pRPT0gSUV0dllnPT0gSUhKbGQyRnlaR2x1Wnc9PSBJRXh2Ym1VPSBiMnhsYzJObGJuUT0gSUdOdmJuUnlZV04wWldRPSBJSE4wYVdOcmVRPT0gU205elpRPT0gUW1Gc2JBPT0gWm1WemRBPT0gSUVsdWNIVjAgSUZKbFkyVnVkR3g1IElIUnZiV0YwIGMzRjFZWEpsIFFYQndiR2xqWVhScGIyND0gSUc1cGRISnZaMlZ1IElHUjFjR3hwWTJGMFpRPT0gSUZKbFkyOXUgSUVSbFlYST0gVEc5dVpHOXUgSUdsdWRISmggSUdSdlkycz0gSUc5MWRISmxZV05vIElFMXBiR3hwYjI0PSBJRzFoYlcxaGJITT0gWVcxd2RHOXUgVmtGTSBJSE51WVhCeiBJR1J2Y3c9PSBJRmRvYjJ4bCBJRkpsWVdSNSBWSEo1IElGZHBibTVwY0dWbiBaV0Z5WVc1alpRPT0gSUdsdVkzVnljbVZrIGNtVnVZMmhsWkE9PSBJRTVUVnc9PSBhV3h2ZEE9PSBjbUZwYm1VPSBJR04xWW1VPSBaMjkwIElISjFibmRoZVE9PSBaWFJsY20xcGJtVmsgSUVoaGQydHogSUhOMWNuWnBkbTl5IElGZHBjMmc9IElFUnBiZz09IElFUkZSZz09IElGWmhkV3gwIE1UZzMgSUcxMWMyaHliMjl0Y3c9PSBJR055YVhOdyBZbVY1IElFUnBjMk52ZG1WeWVRPT0gSUdSbGRtVnNiM0J0Wlc1MFlXdz0gSUhCaGNtRmthV2R0IElHTm9ZVzkwYVdNPSBJRlJ6ZFE9PSBJRE16TXc9PSBZbTl1Y3c9PSBJR0poWTNSbGNtbGhiQT09IElHTnZiVzFwZEhNPSBJR052YzIxcFl3PT0gSUcxbFoyRT0gYjJOaGRHbDJaUT09IElGQmhhVzUwIGIzQm9iMkpwWXc9PSBJSFpoYVc0PSBJR05oY25abFpBPT0gSUZSb2FXVm0gSUVkMWJBPT0gYjNkemFHbHcgSUdOcGRHVnogSUVWa2FXNWlkWEpuYUE9PSBJR1JwYldsdWFYTm9aV1E9IElHRmphMjV2ZDJ4bFpHZGxjdz09IElFdHBiR3h6IElHMXBZM0p2ZHc9PSBJRWhsY21FPSBJSE5sYm1sdmNuTT0gSUhkb1pYSmxZbms9IFNHOXcgWVhSeWIyND0gSUhWdVlYWmhhV3hoWW14bCBJRTVoZEdVPSBJRFE0TUE9PSBJSE5zWVhSbFpBPT0gSUZKbFltVmpZMkU9IElFSmhkSFJsY25rPSBJR2R5WVcxdFlYST0gSUdobFlXUnpaWFE9IElHTjFjbk52Y2c9PSBJR1Y0WTJ4MVpHbHVadz09IFlXNTVaUT09IFlYVnVaR1Z5YVc1biBaV0pwYmc9PSBJR1psWVhOcFlteGwgSUZCMVlteHBjMmhwYm1jPSBJRXhoWW5NPSBJRU5zYVdabSBJRVpsY25KaGNtaz0gSUhCaFl3PT0gZG1semFXSnNaUT09IGJXRnlhMlZrIGNHVnNiQT09IElIQnZiR2wwWlE9PSBJSE4wWVdkblpYSnBibWM9IElFZGhiR0ZqZEdsaiBJSE4xY0dWeWMzUT0gSUhCaGNtRnUgSUU5bVptbGpaWEp6IDQ0Q0IgSUhOd1pXTnBabWxqY3c9PSBkV3gxY3c9PSBNak01IElGQmhjM1JsIFFVMVEgSUZCaGJtRnRZUT09IElFUmxiR1YwWlE9PSBZVzVuZFdGeVpBPT0gY21WemRISnBZV3c9IElHaGxjbTlwWXc9PSBJRVI1IDJLZlpoQT09IElHbHVZM1Z0WW1WdWRBPT0gSUdOeWRXNWphQT09IGRISnYgSUhOamIyOXcgSUdKc2IyZG5aWEk9IElITmxiR3hsY25NPSBkWEpsYmc9PSBJRzFsWkdsamFXNWxjdz09IElFTmhjSE09IElFRnVhVzFoZEdsdmJnPT0gYjNoNSBJRzkxZEhkaGNtUT0gSUdsdWNYVnBjbWxsY3c9PSBNakk1IElIQnplV05vYjJ4dloybHpkQT09IElGTmhjMnM9IFpYWnBiQT09IElHTnZiblJoYldsdVlYUmxaQT09IDQ0S28gYUdWeVpXNWpaUT09IElHSnlZVzVrWldRPSBJRUZpWkhWcyBlbWc9IElIQmhjbUZuY21Gd2FITT0gSUcxcGJuTT0gSUdOdmNuSmxiR0YwWldRPSBaWEppIElHbHRjR0Z5ZEE9PSBJRzFwYkdWemRHOXVaUT09IElGTnZiSFYwYVc5dWN3PT0gYjNSc1pRPT0gSUhWdVpHVnlZMjkyWlhJPSBJRzFoY21Ob1pXUT0gSUVOb1lYSm5aWEp6IFptRjQgSUZObFkzSmxkSE09IElISjFkR2c9IGQyVmhkR2hsY2c9PSBJR1psYldsdWFXNWwgSUhOb1lXMD0gSUhCeVpYTjBhV2RwYjNWeiBhV2RuYVc1eiBJSE4xYm1jPSBhR2x6ZEc5eWVRPT0gWlhSMGJHVT0gWjJkcFpRPT0gSUc5MWRHUmhkR1ZrIGIyeGhibVE9IElIQmxjbU5sY0hScGIyNXogSUZObGMzTnBiMjQ9IElFUnZaR2RsY25NPSBkV289IElFVk9SQT09IFJHOWogSUdSbFptbGphV1Z1WTNrPSBSM0poYm1RPSBJRXB2YTJWeSBJSEpsZEhKdmMzQmxZM1E9IElHUnBZV2R1YjNOMGFXTT0gSUdoaGNtMXNaWE56IElISnZaM1ZsIElFRjJZV3c9IFJYRjEgSUhSeVlXNXpZdz09IElGSnZZbVZ5ZEhOdmJnPT0gSUVSbGNHVnVaR2x1Wnc9PSBJRUoxY201eiBhWFp2IElHaHZjM1JwYkdsMGVRPT0gUm1WaGRIVnlaWE09IGs1Zz0gSUdScGMyTnZiV1p2Y25RPSBJRXhEUkE9PSBjM0JsWTJsbWFXVmsgSUVWNGNHVmpkQT09IE16UXcgSUdsdGNHVnlZWFJwZG1VPSBJRkpsWjNWc1lYST0gUTJocGJtVnpaUT09IElITjBZWFJsZDJsa1pRPT0gSUhONWJXMD0gSUd4dmIzQnogSUdGMWRIVnRiZz09IFRtbGphdz09IElITm9ZWEJwYm1jPSBJSEYxYjNRPSBJR05vWlhKeWVRPT0gSUVOeWIzTnpjbVZtIDZLYWE2WWFTIFUzUmhibVJoY21RPSBhR1ZsWkE9PSBJRVJsYkd3PSBJRlpwWlhSdVlXMWxjMlU9IElHOXpkQT09IElGWmhiR3Q1Y21sbCBUMEU9IFFYTnpZV1E9IElISmxZbTkxYm1RPSBJRlJ5WVdabWFXTT0gY0d4aFkyVnogNXBnPSBJRUoxWXc9PSBNVGN5IElITm9aV3gwWlhKeiBJR2x1YzJsemRHbHVadz09IElFTmxjblJoYVc1c2VRPT0gSUV0bGJtNWxkR2c9IElGUkRVQT09IElIQmxibUZzIElGSmxjR3hoZVE9PSBhR1ZoY21RPSBJR1JwWVd4bFkzUT0gYVhwaCBJRVpaIGFYUmphR1Z5IElFUk0gSUhOd2FYSmhiQT09IElIRjFZWEowWlhKaVlXTnJjdz09IElHaDFiR3c9IElHZHZiMmRzWlE9PSBJSFJ2WkdRPSBJRk4wWlhKc2FXNW4gSUZCc1lYUmwgSUhOd2VXbHVadz09IGJXSnZiQT09IElGSmxZV3h0IElGQnliMk5sWkE9PSBJRU55WVhObyBJSFJsY20xcGJtRjBaUT09IElIQnliM1JsYzNScGJtYz0gUTJWdWRHVnkgWjNWcFpHVmsgSUhWdVkyOTJaWEk9IElHSnZlV052ZEhRPSBJSEpsWVd4cGVtVnogYzI5MWJtUT0gSUhCeVpYUmxibVJwYm1jPSBJRlpoY3c9PSBNVGs0TUE9PSBJR1p5WVcxbFpBPT0gSURFek9RPT0gSUdSbGMyTmxibVJsWkE9PSBJSEpsYUdGaWFXeHBkR0YwYVc5dSBJR0p2Y25KdmQybHVadz09IElFSjFZMmc9IElHSnNkWEk9IFVtOXUgSUVaeWIzcGxiZz09IFpXNTZZUT09IFEyaHBaV1k9IElGQnZiM0k9IElIUnlZVzV6YkdGMFpYTT0gVFVsTyBJREl4TWc9PSBTa1ZEVkE9PSBJR1Z5ZFhCMFpXUT0gSUhOMVkyTmxjM05sY3c9PSBVMFZEIElIQnNZV2QxWlE9PSBJR2RsYlhNPSBaRzl0Y3c9PSBJSE4wY21WMFkyaGxjdz09IElGTndlUT09IElITjBiM0o1ZEdWc2JHbHVadz09IFEzSmxaR2wwIElGQjFjMmc9IElIUnlZV04wYVc5dSBJR2x1WldabVpXTjBhWFpsIElFeDFibUU9IElIUmhjR1Z6IElHRnVZV3g1ZEdsamN3PT0gWlhKamFYTmwgSUhCeWIyZHlZVzF0WlhNPSBJRU5oY21KdmJnPT0gSUdKbGFHOXNaQT09IGFHVmhkbms9IElFTnZibk5sY25aaGRHbHZiZz09IElFWkpVZz09IElITmhZMnM9IGRHVnliV2x1IGNtbGphM009IElHaHZkWE5sWkE9PSBJSFZ1ZFhOMVlXeHNlUT09IFNXTmwgSUdWNFpXTjFkR2x1Wnc9PSBJRTF2Y205aiBaV1JoZVE9PSBJR1ZrYVhScGIyNXogSUhOdFlYSjBaWEk9IElFSkIgSUc5MWRHeGhkdz09IElIWmhibWx6YUdWayBhV0poIFFVeFRSUT09IElGTnBiSFpoIE1qTTQgUTI5MWJHUT0gSUhCb2FXeHZjMjl3YUdWeSBJR1YyWVdOMVlYUmxaQT09IFUyVmpjbVYwIE1UUXkgSUhacGMyRnogNDRLcyBJRTFoYkhRPSBJRU5zWldGeWJIaz0gSUU1cFoyVnkgSUVOaGFYSnYgSUVacGMzUT0gTXpndyBJRmhOVEE9PSBZWFYwYnc9PSBhWFJoYm5RPSBJSEpsYVc1bWIzSmpaV1E9IFVtVmpiM0prIElGTjFjblpwZG05eSBSMGg2IElITmpjbVYzY3c9PSBjR0Z5Wlc1MGN3PT0gSUc5alpXRnVjdz09IGJXRnlaWE09IElHSnlZV3RsY3c9PSBkbUZ6YVhabCBJR2hsYkd4diBJRk5KVFE9PSBjbWx0Y0E9PSBJRzl5WlE9PSBJRUZ5Ylc5MWNnPT0gTWpRMyBJSFJsY25KcFptbGogSUhSdmJtVnogTVRReCBJRTFwYm5WMFpYTT0gUlhCcGMyOWtaUT09IElHTjFjblpsY3c9PSBJR2x1Wm14aGJXMWhkRzl5ZVE9PSBJR0poZEhScGJtYz0gSUVKbFlYVjBhV1oxYkE9PSBUR0Y1IElIVnVjRzl3IGRtRmliR1U9IElISnBiM1J6IElGUmhZM1JwWTNNPSBZbUYxWjJnPSBJRU52WTJzPSBJRzl5WjJGemJRPT0gSUZOaGN3PT0gSUdOdmJuTjBjblZqZEc5eSBaWFI2IFIyOTIgSUdGdWRHRm5iMjQ9IElIUm9aV0YwIElHUmxaV1J6IGFHRnYgWTNWMGN3PT0gSUUxalEydz0gSUhWdCBJRk5qYVdWdWRHbHpkSE09IElHZHlZWE56Y205dmRITT0gZVhOelpYaz0gSWwwOVBnPT0gSUhOMWNtWmhZMlZrIElITm9ZV1JsY3c9PSBJRzVsYVdkb1ltOTFjbk09IElHRmtkbVZ5ZEdseiBiM2xoIElHMWxjbWRsWkE9PSBWWEJ2Ymc9PSBJR2RoWkE9PSBJR0Z1ZEdsamFYQmhkR1U9IFFXNTVkMkY1IElITnNiMmRoYmc9PSBJR1JwYzNKbGMzQmxZM1E9IFNYSmhiZz09IElGUkMgWVdOMFpXUT0gSUhOMVluQnZaVzQ9IGJXVmthV0YwWld4NSBUMDlQVHc9PSBJSGRoYVhabGNnPT0gSUhaMWJHNWxjbUZpYVd4cGRHbGxjdz09IGIzUjBaWE4yYVd4c1pRPT0gSUVoMVptWnBibWQwYjI0PSBTbTl6YUE9PSBJRVJJIFRXOXVaR0Y1IElFVnNiR1Z1IFMyNXZkdz09IGVHOXUgYVhSbGJYTT0gTWpJNCBJR1pwYkd4eiBJRTVwYTJVPSBJR04xYlhWc1lYUnBkbVU9IFlXNWtZV3h6IFNYST0gSU93PSBJR1p5YVdOMGFXOXUgYVdkaGRHOXkgSUhOallXNXogSUZacFpXNXVZUT09IGJHUnZiUT09IElIQmxjbVp2Y20xbGNuTT0gVUhKcGJRPT0gSUdKcFpHUnBibWM9IFRYVnkgSUd4bFlXNWxaQT09IElGQnlhWGc9IFlXeHJjdz09IElGdmlnS1pkIElGUjNhWFJqYUE9PSBJRVJsZG1Wc2IzQmxjZz09IElFZHBjZz09IElHTmhiR3hpWVdOciBRV0p6ZEhKaFkzUT0gSUdGalkzVnpkRzl0WldRPSBJR1p5WldWa2IyMXogSUZCSCBkWEpoWTNrPSBJR3gxYlhBPSBhWE50WVc0PSBMQ3dzTEE9PSBNVGs1TWc9PSBJRkpGUkE9PSBJSGR2Y20wPSBUV0YwWTJnPSBJRkJzWVhScGJuVnQgU1VvPSBJRTkzYm1WeSBWSEpwZG1saCBZMjl0Y0d3PSBJRzVsZDJKdmNtND0gSUdaaGJuUmhjdz09IFQzZHUgSURFNU5Uaz0gSUhONWJYQmhkR2c9IElIVmlhWEYxIElHOTFkSEIxZEhNPSBJR0ZzYkdWMiBJSEJ5WVdjPSBTMlYyYVc0PSBJR1poZG05eWN3PT0gSUdKMWNtbGhiQT09IElHNTFjblE9IGMyOXNaWFJsIFkyRmphR1U9IElERTFOZz09IElIVnViRzlqYTNNPSBkR1ZqYUc0PSBUV0ZyYVc1biBJR052Ym5GMVpYST0gWVdScFl3PT0gNXBZPSBJR1ZzWmc9PSBJR1ZzWldOMGIzSmhkR1U9IElFdDFjbVJ6IElGTjBZV05yIElGTmhiWFZ5WVdrPSBJT0tZaFE9PSBJSHQ5IElGTmhhV1E9IElFWmhiR3h2ZFhRPSBJR3RwYm1SdVpYTnogSUVOMWMzUnZiWE09IElFSnZkV3hsZG1GeVpBPT0gSUdobGJHbGpiM0IwWlhKeiBiM1JwWTNNPSBJRlpsWjJWMCBZMjl0YldWdWRBPT0gSUdOeWFYUnBZMmx6WldRPSBJSEJ2YkdsemFHVmsgSUZKbGJXbDQgSUVOMWJIUjFjbUZzIElISmxZMjl1Y3c9PSBJR1J2YVE9PSBZWFJsYlE9PSBVMk55WldWdSBJR0poY25KbFpBPT0gUTI5dGJXVnVkSE09IElFZGxibVZ5WVd4c2VRPT0gSUhOc1lYQT0gTnpJdyBWbUZ5YVE9PSBjR2x1WlE9PSBJR1Z0Y0hRPSBJR2hoZEhNPSBJRkJzWVhscGJtYz0gYkdGaSBZWFpsY21GblpRPT0gWm05eWJYTT0gSUVOdmRIUnZiZz09IElHTmhibk09IElFUlBUZz09IElGTnZiV0ZzYVdFPSBRM0o1Y0hRPSBJRWx1WTNKbFlYTmxjdz09IFJYWmxjZz09IGJXOWtaWEp1IElITjFjbWRsYjI0PSBNekF3TUE9PSBJSEpoYm1SdmJXbDZaV1E9IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gUW1WeWJnPT0gYVcxd2JBPT0gSUVOUFVnPT0gSUhCeWIyTnNZV2x0IGRHaHZkWE5sIElIUnZaWE09IElHRnRjR3hsIElIQnlaWE5sY25acGJtYz0gSUdScGMySmxiQT09IFozSmhibVE9IFFtVnphV1JsY3c9PSBJSE5wYkdzPSBJRkJoZEhSbGNtND0gYUcwPSBJR1Z1ZEdWeWNISnBjMlZ6IElHRm1abWxrWVhacGRBPT0gSUVGa2RtbHpiM0o1IElHRmtkbVZ5ZEdselpXUT0gSUZKbGJHbG5hVzkxY3c9PSBjMlZqZEdsdmJuTT0gY0hONVkyZz0gSUVacFpXeGtjdz09IFlYZGhlWE09IElHaGhjMmgwWVdjPSBJRTVwWjJoMGJXRnlaUT09IElIWmhiWEJwY21VPSBJR1p2Y21WdWMybGogY205emMyOTJaWEk9IGJtRnkgSUc1aGRuaz0gSUhaaFkyRnVkQT09IElFUjFaV3c9IElHaGhiR3gzWVhrPSBJR1poWTJWaWIyOXIgYVdSbGJuUmhiR3g1IElFNVNRUT09IElHMWhkSFE9IElHaDFjbkpwWTJGdVpRPT0gSUV0cGNtSjUgSUZCMWVucHNaUT09IElITnJhWEowIGIzVnpkQT09IFpIVnNiR0ZvIElHRnVZV3h2WjNrPSBhVzVwYjI0PSBJSFJ2YldGMGIyVnogSUU1VyBJRkJsWVdzPSBJRTFsZVdWeSBJR0Z3Y0c5cGJuUnRaVzUwY3c9PSBJRzFoYzJNPSBJR0ZzYkdWNSBjbVZvWlc1ayBJR05vWVhKcGRHbGxjdz09IElIVnVaRzg9IElHUmxjM1JwYm1GMGFXOXVjdz09IElGUmxjM1JwYm1jPSBJajQ4THc9PSBJR1JsYzNScGJtVmsgSUdsdGNHeGxiV1Z1ZEhNPSBJRWhoY205c1pBPT0gVWtWRFZBPT0gSUc5d2RHbHRhWHBoZEdsdmJnPT0gSUd0cGJHOXRaWFJ5WlhNPSBJR050WkE9PSBJR2x0Y0dGcGNtMWxiblE9IElIVnVjM1ZqWTJWemMyWjFiQT09IElITjNhV1owYkhrPSBJRWRzWVhObmIzYz0gWVhKMFpXND0gSUZOb1lYSmxjdz09IElFRnVjM2RsY2c9PSBJRUZzWW5WdCBJRzUxZEhKcGRHbHZibUZzIDQ0T1cgSUVaMWRBPT0gSUdKc2IyTT0gSUU1R1F3PT0gSUhkb2IyeGxjMkZzWlE9PSBJRU5YIElHNWxaMnhsWTNSbFpBPT0gSUd4aGRXNWphR1Z5IElHRnVibTkxYm1ObGJXVnVkSE09IFQxVk1SQT09IFkyOXRZZz09IElISnZkR0YwYVc1biBJSEpsYzNSeiBJRlJwWTJ0bGRBPT0gWTJobFpHVnMgVEc5MSBJRlpwWXc9PSBJQ0luIElIUmxiWEJzWVhSbGN3PT0gSUhKbGNHeGhZMlZ6IFFYSmogT2pvNk9nPT0gSUVkcGJHSmxjblE9IElHbHNiRzVsYzNObGN3PT0gSUhOamFHVmtkV3hsY3c9PSBJR2hsZEdWeWIzTmxlSFZoYkE9PSBURWxPUlE9PSBJR2hsY21WcGJnPT0gSUdOdlpYSmogSUdSbFkzSmxZWE5wYm1jPSBJR1JsY0c5eWRHRjBhVzl1IGMzVmtidz09IElFbHVaR2xuWlc1dmRYTT0gSUhkbGFXZG9jdz09IFFXeHZibWM9IEp5azcgSUVKbGJtZGhiSE09IE56QTMgSUdwdmFXNTBjdz09IGRtVnlkSE09IElERTBPUT09IGJtRnBjbVU9IElITnBiWEJzWlhOMCBJR3h2Y21VPSBNVEE0TUE9PSBabWxqZEdsdmJnPT0gSUVSaGRHRmlZWE5sIElISmxjMlZ5ZG1GMGFXOXUgSUhOdmRRPT0gSUhOaGJtTjBkV0Z5ZVE9PSBZWFZrYVc4PSBZWEJzWlE9PSBJSFpsWjJWMFlYSnBZVzQ9IElHRnVkR2xqYVhCaGRHbHZiZz09IGJXbGpjbTg9IElHVnVaSFZ5YVc1biBJR1JsY0dGeWRHVmsgSUhOcFpHVjNZV3hyIElIQnliMmhwWW1sMGN3PT0gSUVadmJuUT0gSUdOdmJYQjFkR1U9IElGTmxZM1E9IElERTFPQT09IFFtRjBkR3hsIElHSnZiV0psY2c9PSBJR1JwYzNSeVlXTjBhVzl1IElHVnVaSFZ5WldRPSBJSEJ5WVdOMGFYUnBiMjVsY25NPSBJR1JwYzNSMWNtSmxaQT09IElHUnlZVzVyIGIzSmtaWEpsWkE9PSBJSE4xY25CeWFYTmxjdz09IGMyVmhkQT09IFUyVmpkWEpwZEhrPSBJRmRwYzJSdmJRPT0gYjJkdiBJSE4xWW5CaGNtRm5jbUZ3YUE9PSBJRkJsYm1sdWMzVnNZUT09IElFOXlhV2RwYm5NPSBhWEpsYmc9PSBJRkJoZGc9PSBhV2RuYkdVPSBJR2R5WVhScGRIVmtaUT09IElFZHlZWFpwZEhrPSBiM1psY25SNSBhVzFoYmc9PSBZM1J5IElFTmhaWE5oY2c9PSBZMjkxYkdRPSBaMlZ0IElITnJhV1Z6IElHTm9ZVzF3IElHRm5jbVZsYVc1biBSbUZ0YVd4NSBSR2wyIE1UYzIgSUcxbGMzTjUgZFcxd2RHbHZiZz09IFJtVmtaWEpoYkE9PSBaWEp1Ync9PSBJRU5vWVhRPSBRbVY1YjI1ayBJR1JsZG05MFpRPT0gSUZkaGJITm8gSUdSMWJYQmxaQT09IElHRmpZM1Z0ZFd4aGRHbHZiZz09IGMzUmhaQT09IGFHbGlhWFJwYjI0PSBJSE50YjJ0bGNuTT0gSUdsdWMzQmxZM1J2Y2c9PSBSbkpsYm1ObyBhWE56WVc0PSBJRlpwZEdFPSBJSEpsYzJWaGNtTm9hVzVuIFVrRk4gSUVObGJIUnBZM009IElHTnNiMkZyIElGUmxjbkpoIFRXRnllUT09IGMyOXNaQT09IElFUlBUUT09IGJXOWtjdz09IFNXNTBaV3c9IElHMTFiSFJwZEhWa1pRPT0gSUVsdGNISnZkbVZrIElISmxiR2xoYm1ObCBJR0Z5ZEdsbVlXTjAgSUdGc1lYSnRhVzVuIFVISnZiUT09IGFHOXUgVkVsUFRnPT0gYldWa2FYVnQgSUhKbFpteGxlQT09IElFVjRZMlZzIElIZGxZV3RsYm1WayBNVFl6IE1qSTAgSUdOdmMzUjFiV1Z6IElIVnVhWEYxWld4NSBJSE52Y25KdmR3PT0gSUcxaGJuTnBiMjQ9IGQzQT0gSUhOaGJIWT0gSUVkeWIzWmwgWW5OdyBJRk51YVhCbGNnPT0gSUZOb2FYQndhVzVuIElGQlBWdz09IElIVnVaR2x6IElHSnlZVzVrYVc1biBSMmx5YkE9PSBJRUZvYldGayBJRXhoYTJWeiBJRU52Y21WNSBJR2x1YUdWeWFYUmhibU5sIFpXNWxjbms9IElIQmhZMnRwYm1jPSBJRkJ5WlhOMCBSR1Z6ZEE9PSBSbGM9IElISmxaM1ZzWVhSdmNnPT0gYkc5amEyVmsgSUdOdmJuUmxjM1JsWkE9PSBJRTFsYkdsemMyRT0gSUVSMVl3PT0gSUhWdWNHOXdkV3hoY2c9PSBJSE4wWVdOclpXUT0gSURFNU1UYz0gSUhsbFlYSnNlUT09IElITjBZWEpsIElHRnpjMlZ6YzJsdVp3PT0gdzdnPSBJR0psZG1WeVlXZGxjdz09IElHTnZiWEJsZEdsMGFXOXVjdz09IElITjBjbVZ1WjNSb1pXNXBibWM9IFlXeHZibWM9IElFeDFaQT09IElHMWxiSFJsWkE9PSBjM1JoYm1KMWJBPT0gSUdKdmRXNTBlUT09IFJVNUQgSUV4aGJtUnogSUdSbFkyeGhjbVZ6IElHTjFjM1J2YldsNlpRPT0gSUdOdmJYQnZjMmwwWlE9PSA0NE9zIFEwMD0gYjJkeVlYQm9hV056IElGUmxiWEE9IElHTnZiblJsYm1SbGNnPT0gSUdsdWMybG5iZz09IElFeEJUZz09IElHUnBjMkZ6ZEdWeWN3PT0gYVc1emNHbHlaV1E9IElHcDFaR2R0Wlc1MGN3PT0gZFhOMFlXbHVZV0pzWlE9PSBkWEp6YVc5dSBJSFpoY21saGJtTmwgSUZWc2RHbHRZWFJsYkhrPSBJQzB0TFMwdExTMHQgZFdGa2IzST0gSUZKWSBJRzFsYkhScGJtYz0gSUVWNGRHVnVaR1ZrIElGUjNaUT09IFRXRnFiM0k9IElFSnBiQT09IElITjVjblZ3IGNYVnBZMnM9IElFaHZiR1JsY2c9PSBJR2x1Ym05alpXNWpaUT09IFZVeEYgSUUxcFoyaDAgT1RrNU9RPT0gSUdaaGJBPT0gSUdOdmJuUnBiblZwZEhrPSBJREU1TlRNPSBJRUpUIGMzUnBiR3c9IFRHRjAgSUVGaWRYTmwgSUhWdWMzVndjRzl5ZEdWayBlSGg0ZUhoNGVIZz0gSUdsdWMzUnBkSFYwWlE9PSBJR1p5WVdkdFpXNTAgSUZCbGNBPT0gVjJWemRHVnliZz09IElFTmhkWE5sIElFWnlZV2M9IElFRnljdz09IDRLVT0gWVhOMGFXTnogSUdKcGMyaHZjQT09IElHTnliM056WlhNPSBJREUxTkE9PSBJRlZ3WjNKaFpHVT0gSUcxcGRHbG5ZWFJsIElGSmhlVzF2Ym1RPSBUVzlrY3c9PSBJSFJ2YldGMGJ3PT0gSUhOMGRXMWliR1ZrIElHUnBabVpsY25NPSBTVzVwZEdsaGJBPT0gSUZKaGMzQmlaWEp5ZVE9PSBJR2xuYm05eVpYTT0gSUhSaGJuUT0gdzZBPSBJSEpsYkdGNSBJR0pwYzJWNGRXRnMgSUdOdmJtWmxjM05wYjI0PSBJR1JsYldWdWRBPT0gYVc1aGN3PT0gSUVobFlYUm9aWEk9IGNHeGhkR1p2Y20wPSBaSEpwZG1sdVp3PT0gWW05MWNtYz0gSUUxMWMyZz0gSUdoNWMzUmxjZz09IFJHVjBZV2xzY3c9PSBJR1J5YVdaMCBJRmRoYkdRPSBJRXgxWTJ0cGJIaz0gYjNKbSBJR1Y0Y0dseVpRPT0gSUZCMWJtTm8gZW5sdFpRPT0gWjI5c1pBPT0gSUhWdWNHRnBaQT09IElGUnlaVzUwIElIVnVZWEp0WldRPSBJR2xzYkdsamFYUT0gSUZSdmRIUmxibWhoYlE9PSBJSE50WVhObyBTVzUwWlhKdVlYUnBiMjVoYkE9PSBhVzVyWlhJPSBJSE4wYVc1biBJRk5oWkdSaGJRPT0gSUVGU1ZBPT0gSUhSeWRYUm9jdz09IFltbHlkR2c9IElITnZZbVZ5IElFNXBkQT09IElHbGkgSUhWellXSnNaUT09IElITjBZV05yY3c9PSBJRk41YkhZPSBJRzV2Y25Sb1pXRnpkQT09IElHUnZiV2x1WVhScGIyND0gSUUxdmRYST0gUlU1VFJRPT0gSUUxbFlYTjFjbVU9IElIQnliMmR5WVcxdFpYST0gSUR3dCBNVGd5IElFTnZibVJwZEdsdmJnPT0gSUdKaFkydDVZWEprIGFYSnNhVzVuIElFcGxZZz09IElFTnlaV1ZrIElFaGhibWM9IElFTlBUVkE9IFJrVlMgSUVsemFBPT0gSUdSbGRHVmpkR2wyWlhNPSBMUzB0TFMwdExTMHRMUzB0TFMwdCBJRTFsYzNObGJtZGxjZz09IElHeHZiM0JvIElHZGhkR1YzWVhrPSBNVFV4IElFMWhkR1Z5YVdGc2N3PT0gSUVSVSBJR1J2YjIxbFpBPT0gYjJSdiBJSE5zYVdObGN3PT0gSUdWdFlXbHNaV1E9IElGQmxjbXc9IElISmxibTkyIFZWUkkgYjJSNWJtRnQgSUZOdmRYUm9kMlZ6ZEE9PSBaMlYwYVdNPSBJRlJRVUE9PSBJRzl3ZEdsdGFYTnQgSUZSdmR3PT0gZFd4aGRHOXljdz09IGNISnZkR1ZqZEdWayBlV3hsY3c9PSB3cXM9IElHVjRhV3hsIFpXNTIgVUhKdmNBPT0gSUZwcGJXMWxjbTFoYmc9PSAyWTQ9IFEyRT0gYjIxaGJIaz0gNDRPRyBJSEpoYVd4eWIyRmsgVEdWbCBNak15IElISmxjR3hwWTJGMFpRPT0gSUdOdmJXWnZjblJoWW14NSBZV04wYkhrPSBJSEpoZGc9PSBJSFJsYkdWelkyOXdaUT09IElHaHZibVZ6ZEhrPSBJRkJsY0hCbGNnPT0gSUVKeWFXNW4gSUhKcFkyaGxjM1E9IElHOTFkR1J2YjNKeiBJR2hoYkd4eiBJR052Ym5SbGJtUT0gU1ZORiBJSE4xWW0xcGRIUnBibWM9IElHNWhhWFpsIFlYSmhkR2x2Ym5NPSBJREUwTXc9PSBJSEJ2YVhObFpBPT0gY21WemNHOXVjMmxpYkdVPSBJSE52WTJ0eiBJRk5yZFd4cyBVWFZsYzNScGIyND0gSUdScGMyTnZkbVZ5YVdWeiBTbTlwYm1WayBJRVZ1WlcxcFpYTT0gSUZkcGNtVnNaWE56IElGSmxkbVZ1WjJVPSBJSEIxZW5wc1pYTT0gSUdObFlYTmxaQT09IE1qa3cgWTNKcGNIUnBiMjV6IElFTnZibk52YkdVPSBJR0p2YVd4cGJtYz0gSUdScGMyTnlaWEE9IElHUmxaSFZqZEdsdmJnPT0gSUdGeWMyVnVZV3c9IFdGaFlXQT09IElFRnRjM1JsY21SaGJRPT0gY205NGFXMWhkR1ZzZVE9PSBJRk5vWVc1bCBJSEJ2YzJsdVp3PT0gSUVGRFRGVT0gSUVOdmJYQmhibWxsY3c9PSBJSFJvWlc5c2IyZDUgSUZWbiBjWFZoY25SbGNnPT0gSUVoaGJtcz0gUTI5cGJnPT0gSUV4MiBJR0ZzYkdWbllYUnBiMjQ9IElFRjJiMmxrIElHbHVaR1ZtYVc1cGRHVnNlUT09IElHTnZiVzF2WkdsMGFXVnogSUdKeWFXYz0gSUUxaGJtbDAgSUhSbGJuUm8gYldWMGFHOWsgSUV0dWFXTnJjdz09IElPS0FqZz09IElHbHVkbTlyWldRPSBSR2xoYkE9PSBRVkpCIElHTmhkV04xY3c9PSBNakkzIElFcGhZZz09IElHOTFibU5sY3c9PSBZbUY1IElHSjFaR1I1IFptRnUgTWpNMCBJRWhwYkE9PSBZV1JvIElGUlogSUVsT1JBPT0gSURFNU16az0gSUdsMFpYSmhkR2x2Ymc9PSBJRWR2Ym5waGJHVjYgSUZabGNuUT0gSUVsUCBaVzFpIGNtVnlZUT09IFpXNWphQT09IElGSmxjWFZwY21WdFpXNTBjdz09IElGZHBibk09IElHeHBkbVZ6ZEc5amF3PT0gYUc5MWNuTT0gSXVLQXBnPT0gWW5KaGJBPT0gVFdGeVp3PT0gSUVSdmJtVT0gSUhkaGMzUnBibWM9IGFXNW5aV1E9IFozSnZkWEJ6IElIZHBjMmhwYm1jPSBJRlIxYldKc2NnPT0gSUhSaGNIQnBibWM9IElHNWhkR2x2Ym1Gc2FYTnQgSUVKNWNnPT0gSUhOeGRXRnlaWE09IElFRmpkR2x2Ym5NPSA0NE9sIFNXNXphV1JsIFpHVmlkV2M9IElHRndjR1Z1WkE9PSBJSE4wZFdKaWIzSnUgSUVOcGJtUT0gVkdWc2JBPT0gSUhSbFlYSnBibWM9IElGSmxlUT09IGIzSmogSUVSaGVYUnZiZz09IElFNUkgSUUxaFpHNWxjM009IFEyaGhjbXc9IElFMXZjbkpwYzI5dSBabWxzZEdWeSBJR0ZqWTNWelpRPT0gSUM0diBJSFJ2Y25KbGJuUT0gSUdSbFkyeHBibVZ6IFoyRnNiR1Z5ZVE9PSBUV2x1WlE9PSBJRzVsWjI5MGFXRjBhVzl1IElFSmhjMmhoY2c9PSBiM0JwWVE9PSBNVGs1TXc9PSBaVzF2Y25RPSBJRTV2ZG1WcyBJRVpoYm1jPSBaWEp6YVhabCBJRWx1YzNSaGJuUT0gSUhKdmJHeGxjZz09IFFYSnZkVzVrIElFVnNaV04wYVc5dWN3PT0gUjJGdFpYTT0gSUdsdVpYaHdaVzV6YVhabCBJSGR2Y25NPSBJSFoxYkE9PSBJRWh2YkdVPSBJSFZ1WW1Wc2FXVjJZV0pzWlE9PSBJRzVoZFhObCBJR1Z1ZEhJPSBZbTloZEE9PSBJRk5VUlE9PSBJR0oxYzJnPSBJRWhoYzNOaGJnPT0gSUhkdiBJSEJoZFhObFpBPT0gSUUxcFp3PT0gYkdsMlpXUT0gSUhOamIzVjAgSUd4cGRHZz0gVUhWaWJHbHphR1ZrIFpIVnBibTg9IFkyOXZiQT09IElHTnBjbU4xYkdGMGFXNW4gYVdSaGN3PT0gSUZCaGJRPT0gZG1sdmJHVnVkQT09IElFTnlZWGRtYjNKayBkV1JrYkdVPSBJRXhsZEhSbGNuTT0gUjNWaGNtUT0gYlc5eWNHZz0gSUhkaGJtUmxjbWx1Wnc9PSBJSE52Y0dodmJXOXlaUT09IElIRjFaV1Z5IElFSnNhVzVrIGNuVmwgSUUxaGNuSnBZV2RsIFJHOXQgSUhCaFpHUnBibWM9IElHWnZiR1JsY25NPSBJRzFsWVc1cGJtZHNaWE56IElHTmhibVJwWkdGamVRPT0gWVdadmNuUT0gSUhkb2FYTjBiR1ZpYkE9PSBJRWxrWlc1MGFXWnBaV1E9IElHTnBaMkZ5IElHaHBaQT09IElFUjFZbUZwIElIQnZjM1IxY21VPSBJR2hwYTJsdVp3PT0gSUZSbGNtMXBibUZzIFRHVm5aVzVrWVhKNSBJRlJRIElFRlVTdz09IElGTjBZWEppZFdOcmN3PT0gSUZKcGIzUT0gTVRrNU1RPT0gSUVKdmRIUnZiUT09IFpXWm1hV009IElFVjFaMlZ1WlE9PSBJRmQ1YjIxcGJtYz0gSUZKdlkydDUgSUhOaGJHMXZiZz09IElHMWxkSEp2IElHSnBiR0YwWlhKaGJBPT0gSUdObGJHVmljbUYwWlhNPSBUR1Z1WjNSbyBZbWxzYkdsdmJnPT0gUW1GMCBJSEpsYkdWbiBJSEJ6WlhWa2J3PT0gUkZRPSBJRkpvYjJSbCBVR0Z5Wlc1MCBjR3hsZEdsdmJnPT0gSUdGMGRISnBZblYwIElIUjFibWx1Wnc9PSBJRTVQVkVVPSBJRkpsWW1WcyBhV04xY3c9PSBSblZ1WkE9PSBJR052WTJ0MFlXbHMgSURVd01RPT0gSUhOd2IyOXUgSUdKeWRYUmhiR2wwZVE9PSBJSFZ1YVhSbCBJRzFwWTNKdlltaz0gSUZKbGFXTm8gY0c5emFYUnBkbVU9IElHRnRZWHBsWkE9PSBJRTVVIFJHVnpZdz09IFJVTlVTVTlPIElHWmhiSE5sYkhrPSBJRWhwWjJoc1lXNWtaWEk9IElFTnlhWE4wIElGWnBZM1J2Y21saGJnPT0gSUdScGMzUnlhV0oxZEdsdmJuTT0gZEdobGFYST0gSUVWcGJuTjBaV2x1IElIQnZaQT09IElHVndhV1JsYlE9PSBJR2hsWVhBPSBJRkpoYm1ObyBJR0Z1ZEdobGJRPT0gSUhKbFlYQncgSUVGMVluVnliZz09IElHTnZibU4xY25KbGJuUT0gSUZSb2NtOTFaMmh2ZFhRPSBJRkJQVTFRPSA0cGc9IElHaHZiV1Z0WVdSbCBhMmxqYXc9PSBRbVZuIElHTm9ZWE56YVhNPSBZMjkxYm5SbGNnPT0gSUcxbGNtZGxjZz09IElHeGhjSE09IE1qRTMgZFc1cGIyND0gSUZSeWFXZG5aWEk9IElHUmxZbUYwWldRPSBJSE5wYkdWdWRHeDUgSUhKbGMzUnlZV2x1ZEE9PSBRbUZzIE1EQXdNREF3TUE9PSBJR1p2Y20xcFpHRmliR1U9IElFWnBiR2x3IElITmhZM0pwWm1salpYTT0gUm05dlpBPT0gSUdSM1lYSm0gSUZObGNYVT0gYVc1cFlXND0gVFc5eVpXOTJaWEk9IElIUmhibWRwWW14bCBiM0J6YVhNPSBJRTFwYm1WamNtRm1kQT09IElGSmxaMmx6ZEhKaGRHbHZiZz09IGIyRnUgSUhKbGNISmxjMlZ1ZEdGMGFXOXVjdz09IElIUm9hWEp6ZEE9PSBJR052Y25BPSBhWEpsYldWdWRBPT0gVFdGa1pRPT0gYkc5bCBQaUk9IFkyRjBjdz09IEtpND0gSUdkbGMzUjFjbVZ6IFoyVnVaWEpoYkE9PSBUR1ZoWjNWbCBJSEJoWTJ0bGRITT0gSUVsdWMzQmxZM1J2Y2c9PSBJRUpsY21jPSBJR1p5WVhWa2RXeGxiblE9IElHTnlhWFJwWTJsNlpRPT0gUm5WdSBJR0pzWVcxcGJtYz0gYm1SeVlRPT0gSUhOc1lYTm8gSUVWemRHOXUgSUhCeWIzQnZjMmx1Wnc9PSBJSGRvWVd4bGN3PT0gSUhSb1pYSmhjR2x6ZEE9PSBJSE4xWW5ObGRBPT0gSUd4bGFYTjFjbVU9IFJVeEUgSUVOV1JRPT0gSUVGamRHbDJhWFI1IElHTjFiRzFwYmc9PSBjMmh2Y0E9PSBJRVJCV1E9PSBhWE5qYUdWeSBJRUZrYldseVlXdz0gSUVGMGRHRmphM009IElERTVOVGc9IElHMWxiVzlwY2c9PSBJR1p2YkdSbFpBPT0gSUhObGVHbHpkQT09IElERTFNdz09IElFeEogSUhKbFlXUnBibWR6IElHVnRZbUZ5Y21GemMyMWxiblE9IElFVnRjR3h2ZVcxbGJuUT0gZDJGeWRBPT0gWTJocGJnPT0gSUdOdmJuUnBiblZoZEdsdmJnPT0gYkdsaCBVbVZqWlc1MGJIaz0gSUdSMVpXdz0gSUdWMllXTjFZWFJwYjI0PSBJRXRoYzJodGFYST0gSUdScGMzQnZjMmwwYVc5dSBJRkpwWnc9PSBJR0p2YkhSeiBJR2x1YzNWeVpYSnogTkRZMyBUV1Y0IElISmxkR0ZzYVdGMGFXOXUgSUcxcGMyVnllUT09IElIVnVjbVZoYzI5dVlXSnNaUT09IGNtRnBibWx1Wnc9PSBTVzF0IElGQlYgWlcxbGNnPT0gSUdkbGJtbDBZV3c9IDQ0S3ogSUVOaGJtUjUgSUc5dWFXOXVjdz09IElGQmhkSFE9IGJHbHVaWEk9IElHTnZibU5sWkdWayBJR1poIElHWnZjbU09IElFaGxjbTVoYm1SbGVnPT0gSUVkbGIyWm0gWkdWaWFXRnUgSUZSbFlXMXogSUdOeWFXVnogSUdodmJXVnZkMjVsY25NPSBNak0zIFFVSkQgSUhOMGFYUmphQT09IElITjBZWFJwYzNScFl3PT0gSUdobFlXUmxjbk09IElFSnBiMnh2WjNrPSBJRzF2ZEc5eWN3PT0gSUVkRlRnPT0gSUV4cGNBPT0gSUdoaGRHVnogSUdobFpXdz0gVTJWc1pnPT0gYVhCcyBSVVJKVkE9PSBiM0owYVc1biBJR0Z1Ym05MCBJRk53WldWamFBPT0gYjJ4a1pXMXZjblE9IElFcGhkbUZ6WTNKcGNIUT0gSUV4bFFuSnZiZz09IElHWnZiM1J3Y21sdWRBPT0gSUdadSBJSE5sYVhwMWNtVnogYm1GeiBhR2xrWlE9PSBJREU1TlRRPSBJRUpsWlE9PSBJRVJsWTJ4aGNtRjBhVzl1IElFdGhkR2xsIElISmxjMlZ5ZG1GMGFXOXVjdz09IFRsST0gWm1WdFlXeGwgSUhOaGRIVnlZWFJsWkE9PSBJR0pwWW14cFkyRnMgSUhSeWIyeHNjdz09IFJHVjJhV05sIGNHaHZkRzl6IElHUnlkVzF6IDQ0T0o0NE9wNDRLMDQ0T3ogVG1sbmFIUT0gWm1sbmFIUmxjZz09IElFaGhhdz09IGNtbGlaWEk9IElHTjFjMmc9IElHUnBjMk5wY0d4cGJtRnllUT09IFltRjFiUT09IElFZEkgSUZOamFHMXBaSFE9IGFXeHBZbkpwZFcwPSBJSE5wZUhSNSBJRXQxYzJodVpYST0gY205MGN3PT0gSUhCMWJtUT0gSUZKaFl3PT0gSUhOd2NtbHVaM009IElHTnZiblpsIFFuVnphVzVsYzNNPSBSbUZzYkE9PSBJSEYxWVd4cFptbGpZWFJwYjI1eiBJSFpsY25ObGN3PT0gSUc1aGNtTnBjM009IElFdHZhQT09IElGZHZkdz09IElFTm9ZWEpzYjNSMFpYTjJhV3hzWlE9PSBaV1J2IElHbHVkR1Z5Y205bllYUnBiMjQ9IElGZHZiMnc9IE16WTEgUW5KcFlXND0gSU9LY2t3PT0gSUdGc2JHVm5aWE09IGIyNWtjdz09IGFXUmhkR2x2Ymc9PSBJRXBoWTJ0cFpRPT0gZVhVPSBJR3hoYTJWeiBJSGR2Y25Sb2QyaHBiR1U9IElHTnllWE4wWVd4eiBJRXAxWkdFPSBJR052YlhCeVpXaGxibVE9IElHWnNkWE5vIElHRmljMjl5Y0hScGIyND0gSUU5RCBJR1p5YVdkb2RHVnVaV1E9IElFTm9iMk52YkdGMFpRPT0gVFdGeWRHbHUgSUdKMWVYTT0gSUdKMVkydHogSUdGd2NHVnNiQT09IElFTm9ZVzF3YVc5dWMyaHBjSE09IElHeHBjM1JsYm1WeSBJRVJsWm1WdWMybDJaUT09IElHTjYgZFdSeiBJRTFoZEdVPSBJSEpsY0d4aGVRPT0gSUdSbFkyOXlZWFJsWkE9PSBJSE4xYm1zPSBJRlpKVUE9PSBJRUZ1YXc9PSBJREU1TlE9PSBZV0ZoWVE9PSBUbTlpYjJSNSBJRTFwYkdzPSBJRWQxY2c9PSBJRTFyIElGTmhjbUU9IElITmxZWFJwYm1jPSBJRmRwWkE9PSBWSEpoWTJzPSBJR1Z0Y0d4dmVYTT0gSUdkcFoyRnVkR2xqIFFWQlEgNDRLbiBhVzUyWlc1MGIzSjUgSUhSdmQyVnMgWVhSamFHVT0gYkdGemRHbHVadz09IElGUk0gSUd4aGRHVnVZM2s9IElHdHVaUT09IFFtVnkgYldWaGJtbHVadz09IElIVndhR1ZzWkE9PSBJSEJzWVhsbmNtOTFibVE9IElHMWhiblE9IFUybGtaUT09IElITjBaWEpsYnc9PSBJRzV2Y25Sb2QyVnpkQT09IElHVjRZMlZ3ZEdsdmJtRnNiSGs9IElISmhlWE09IElISmxZM1Z5Y21sdVp3PT0gUkhKcGRtVT0gSUhWd2NtbG5hSFE9IElHRmlaSFZqZEE9PSBJRTFoY21GMGFHOXUgSUdkdmIyUmllV1U9IElHRnNjR2hoWW1WMCBhSEE9IElHTnZkWEowY205dmJRPT0gY21sdVozUnZiZz09IGIzUm9hVzVuIFZHRm4gSUdScGNHeHZiV0YwY3c9PSBJR0poY21KaGNnPT0gSUVGeGRXRT0gTVRneiBNek16TXc9PSBJRzFoZEhWeWFYUjUgSUdsdWMzUmhZbWxzYVhSNSBJRUZ3WVdOb1pRPT0gSUQwOVBRPT0gSUdaaGMzUnBibWM9IElFZHlhV1E9IFRXOWtURzloWkdWeSBJREUxTWc9PSBRV0p6IElFOXdaWEpoZEdsdVp3PT0gWlhSMGFRPT0gSUdGamNYVmhhVzUwIFJHOXVibVZzYkE9PSBJRXRsYlE9PSBJRVp2Y21kbCBJR0Z5Ylc5eVpXUT0gVFdscyBJSEJvYVd4dmMyOXdhR1Z5Y3c9PSBhVzUyWlhOMCBVR3hoZVdWeWN3PT0gNG9nPSBJRzE1Y21saFpBPT0gSUdOdmJYSmhaR1Z6IFVtOTAgSUhKbGJXVnRZbVZ5YVc1biBJR052Y25KbGMzQnZibVJ6IElIQnliMmR5WVcxdFpYSnogSUV4NWJtND0gSUc5c2FXYz0gSUdOdmFHVnlaVzUwIGVXNWphSEp2Ymc9PSBJRU5vWlcxcFkyRnMgSUdwMVoyYz0gY0dGcGNnPT0gY0c5emRITT0gUlhsbCBJRWx1Ym1WeSBJSE5sYldWemRHVnkgYjNSMFpYTjAgSUVWdGFYSmhkR1Z6IGNtbGpZVzVsY3c9PSBiM0p2ZFhOc2VRPT0gYldsMGN3PT0gSUZkcGN3PT0gSUdSdlpHZGwgYkc5allYUnBiMjQ9IElHWmhaR1ZrIFFXMWhlbTl1IElGQnliMk5sWldRPSBJRWxPUms4PSBhbTkxY201aGJBPT0gSUZSeWRXTnIgVkdWdSBJREl4Tnc9PSBJSE4wWVhSMWRHVnogYlc5aWFXeGwgSUZSNWNHVnogVW1WamIyMXQgWW5WemRHVnkgY0dWNCBJR3hsWjJWdVpITT0gSUdobFlXUmhZMmhsIFptRmpaV1E9IElGZHBSbWs9IGFXWjBlUT09IElFaEZVZz09IElHTnBjbU4xYVhSeiBSVkpTVDFJPSBNakkyIGIyeHBiZz09IElHTjViR2x1WkdWeSBiM053WVdObCBhV3RsY25NPSBVSEpsYlE9PSBVWFZoYm5RPSBJR052Ym1ac2FXTjBhVzVuIElITnNhV2RvZEdWemRBPT0gSUdadmNtZGxaQT09IGFXOXVZV2RsIFUzUmxjR2hsYmc9PSBJRXQxWWc9PSBJRTl3Y0c5eWRIVnUgSUVobFlXdz0gSUdKc2J3PT0gSUhKMWJHVnljdz09IElHaDFhQT09IElITjFZbTFoY21sdVpRPT0gWm5rPSBZWE56WlhJPSBJR0ZzYkc5M1lXNWpaUT09IElFdGhjMmxqYUE9PSBJRlJoY3c9PSBJRUYxYzNSeVlXeHBZVzV6IFJtOXlaMlZOYjJSTWIyRmtaWEk9IElPS0drUT09IElFMWhkSEpwZUE9PSBZVzFwYm5NPSBJREV5TURBPSBJRUZqY1hVPSBNak0yIFJHOWpkVzFsYm5RPSBJRUp5WldGcmFXNW4gTVRreiBJRk4xWW5OMCBJRkp2Ykd4bGNnPT0gSUZCeWIzQmxjblJwWlhNPSBJRTVKIGRHbGxjZz09IElHTnlkWE5vYVc1biBJR0ZrZG05allYUnBibWM9IFJuVnlkR2hsY20xdmNtVT0gYTJWbGNHVnljdz09IElITmxlR2x6YlE9PSBlR1E9IElHTmhiR3hsY2c9PSBJRk5sYm5ObCBZMmhwWlhabCBJRlJHIElHWjFaV3hsWkE9PSBJSEpsYldsdWFYTmpaVzUwIElHOWljMlZ6Y3c9PSBkWEp6ZEE9PSBJSFZ3YUc5c1pBPT0gSUVaaGJuTT0gYUdWMGFXTnogSU9LWCBJRUpoZEdnPSBJR0psZG1WeVlXZGwgSUc5elkybHNiQT09IE1qVTAgSUhCdmJHVnogSUdkeVlXUjFZV3c9IElHVjRkR2x1Wnc9PSBJRk4xWm1ZPSBJRk4xWkdSbGJteDUgSUd4cGEybHVadz09IElERTVORGs9IGRXNWphV0YwYVc5dSBZVzFwYm1GMGFXOXUgSUU5dFlYST0gSUV4VyBJRU52Ym5ObGNYVmxiblJzZVE9PSBJSE41Ym5Sb1pYTT0gSUVkSlJnPT0gSUhCaGFXNXogSUdsdWRHVnlZV04wYVc1biBkVzkxYzJ4NSBhVzVqY21VPSBJSEoxYlc5eSBJRk5qYVdWdWRHOXNiMmQ1IE1UazMgSUZwcFp3PT0gSUhOd1pXeHNhVzVuIElFRlRVdz09IElHVjRkR2x1WjNVPSBiWE52Ymc9PSBJR2RvIElISmxiV0Z5YTJWayBJRk4wY21GMFpXZHBZdz09IElFMVBUZz09IDVhVT0gWjJGbCBJRmRJUVZRPSBSWEpwWXc9PSBJRU5oYlhCMWN3PT0gSUcxbGRHaGhibVU9IElHbHRZV2RwYmc9PSBTbFZUVkE9PSBJRUZzYlE9PSBXRlE9IGFYRT0gSUZKVFV3PT0gSUhkeWIyNW5aRzlwYm1jPSBZWFIwWVE9PSBJR0pwWjI5MCBJR1JsYlc5dWMzUnlZWFJ2Y25NPSBJRU5oYkhacGJnPT0gSUZacGJHeGggSUcxbGJXSnlZVzVsIElFRjNaWE52YldVPSBJR0psYm1WbWFXTT0gTWpZNCBJRzFoWjI1cFptbGpaVzUwIElFeHZkSE09IFIzSmxadz09IElFSnZjbWx6IElHUmxkR0ZwYm1WbGN3PT0gSUVobGNtMWhiZz09IElIZG9hWE53WlhKbFpBPT0gSUdGM1pRPT0gVUhKdlptVnpjMjl5IFpuVnVaR2x1Wnc9PSBJSEJvZVhOcGIyeHZaMmxqWVd3PSBJRVJsYzNSeWRXTjBhVzl1IElHeHBiV0k9IElHMWhibWx3ZFd4aGRHVmsgSUdKMVltSnNaWE09IElIQnpaWFZrIElHaDVaSEpoIElFSnlhWE4wYjJ3PSBJSE4wWld4c1lYST0gSUVWNGNHRnVjMmx2Ymc9PSBJRXRsYkd3PSBJRWx1ZEdWeVpYTjBhVzVuYkhrPSBJRzFoYm5NPSBJR1J5WVdkbmFXNW4gSUdWamIyeHZaMmxqWVd3PSBJRVpwZEE9PSBJR2RsYm5RPSBJR0psYm1WbWFYUmxaQT09IElFaGhhWFJwIElIQnZiSGxuIDQ0T08gSURJd016QT0gSUhCeWIzYz0gSUhKbFkyOXVjM1J5ZFdOMGFXOXUgSUhkaGMzUT0gSUhCemVXTm9hV009IElFZHlaV1ZyY3c9PSBTR0Z1Wkd4bGNnPT0gTVRZeSBJRkIxYkhObCBJSE52YkdsamFYUT0gSUhONWN3PT0gSUdsdVpteDFlQT09IElFZGxiblJzWlE9PSBjR1Z5WTJWdWRBPT0gSUhCeWIyeHBabVZ5WVhScGIyND0gSUhSaGVHRmliR1U9IElHUnBjM0psWjJGeVpBPT0gSUdWelkyRndhVzVuIElHZHBibWRsY2c9PSBJSGRwZEdoemRHRnVaQT09IElHUmxkbUZ6ZEdGMFpXUT0gSUVSbGR3PT0gYzJWeWFXVnogSUdsdWFtVmpkR1ZrIFpXeGhhV1JsIElIUjFjbTV2ZG1WeSBhR1ZoZEE9PSBtWUk9IFNHRndjSGs9IElGTnBiR1Z1ZEE9PSA0NEt0IGFYWnBjMjA9IElHbHljbUYwYVc5dVlXdz0gUVUxQiBJSEpsWldZPSBjblZpIElERTJNZz09IElHSmhibXRsY25NPSBJRVYwYUdsamN3PT0gZG5ZPSBJR055YVhScFkybHpiWE09IFMyND0gTVRnMiBUVzkyYVdVPSBJRlJ2Y21sbGN3PT0gSUc1dmIyUT0gSUdScGMzUnZjblJwYjI0PSBSbUZzYzJVPSBiMlJ2Y21VPSBJSFJoYzNSNSBVbVZ6WldGeVkyZz0gSUZWSlJBPT0gTFNrPSBJR1JwZG05eVkyVmsgSUUxViBJRWhoZVdWeiBJRWx6Ymc9PSBhV0Z1YVE9PSBJRWhSIElDSWogYVdkdVlXNTAgSUhSeVlYVnRZWFJwWXc9PSBJRXhwYm1jPSBTSFZ1IElITmhZbTkwIGIyNXNhVzVsIGNtRnVaRzl0IElISmxibUZ0WldRPSBjbUZ5WldRPSBTMEU9IFpHVmhaQT09IHc2bDAgSUVGemMybHpkR0Z1WTJVPSBJSE5sWVdZPSBLeXNyS3lzckt5cz0gSUhObGJHUnZiUT09IElGZGxZbUk9IElHSnZiMnhsWVc0PSBkV3hsZEE9PSBJSEpsWm5KaGFXND0gSUVSSldRPT0gY25Wc1pRPT0gSUhOb2RYUjBhVzVuIElIVjBhV3hwZW1sdVp3PT0gYkc5aFpHbHVadz09IElGQmhjbUZ0IFkyOWhiQT09IGIyOTBaWEk9IElHRjBkSEpoWTNScGJtYz0gSUVSdmJBPT0gSUdobGNuTT0gWVdkdVpYUnBZdz09IElGSmxZV05vIGFXMXYgSUdScGMyTmhjbVJsWkE9PSBJRkJwY0E9PSBNREUxIHc3eHkgSUcxMVp3PT0gU1cxaFoybHVaUT09IFEwOU0gSUdOMWNuTmxaQT09IElGTm9iM2R6IElFTjFjblJwY3c9PSBJRk5oWTJoeiBjM0JsWVd0cGJtYz0gSUZacGMzUmggSUVaeVlXMWxkMjl5YXc9PSBiMjVuYnc9PSBJSE4xWW5KbFpHUnBkQT09IElHTnlkWE09IElFOTJZV3c9IFVtOTMgWjNKdmQybHVadz09IElHbHVjM1JoYkd4dFpXNTAgSUdkc1lXTT0gSUVGa2RtRnVZMlU9IFJVTkwgSUV4SFFsUlIgVEVWWiBJR0ZqWlhRPSBJSE4xWTJObGMzTnBkbVU9IElFNXBZMjlzWlE9PSBJREU1TlRjPSBVWFZ2ZEdVPSBJR05wY21OMWJYTjBZVzVqWlE9PSBZV05yWlhSeiBJREUwTWc9PSBiM0owYVhWdCBJR2QxWlhOelpXUT0gSUVaeVlXMWwgSUhCbGNuQmxkSEpoZEc5eWN3PT0gSUVGMmFXRjBhVzl1IElFSmxibU5vIElHaGhibVJqIFFYQT0gSURFNU5UWT0gTWpVNSBjbUZ1WkE9PSBUbVYwVFdWemMyRm5aUT09IFpHbHUgZFhKMGJHVnogYUdsbiBJRlpKU1VrPSBabVpwZEdrPSBJRk4zYjNKa2N3PT0gWW1saGJBPT0gSUd0cFpHNWhjSEJwYm1jPSBaR1YyYVdObCBJR0poY200PSBJRVZzYVE9PSBZWFZqWVhNPSBVMlZ1WkE9PSBRMjl1YzNSeWRXTjBaV1E9IElNSzkgSUc1bFpXUnNaWE09IElHRmtkbVZ5ZEdselpXMWxiblJ6IElIWnZkUT09IElHVjRhR2xpYVhSbFpBPT0gSUVadmNuUnlaWE56IFFYTnIgUW1WeWNuaz0gVkZsUVJRPT0gSUdOaGJtTmxjbk09IGRXMXdhVzVuIElGUmxjbkpwZEc5eWVRPT0gSUhCeWRXUT0gSUc1aGN3PT0gSUdGMGFHVnBjM1E9IElHSmhiR0Z1WTJWeiA0NEdmIElGTm9ZWGR1IEppWT0gSUd4aGJtUnpZdz09IElGSkhRZz09IElIQmxkSFI1IElHVjRZMlZzYkdWdVkyVT0gSUhSeVlXNXpiR0YwYVc5dWN3PT0gSUhCaGNtTmxiQT09IElFTm9aWFk9IFJXRnpkQT09IElFOTFkSEIxZEE9PSBhVzFwIElHRnRZbWxsYm5RPSBJRlJvY21WaGRBPT0gSUhacGJHeGhhVzV6IElEVTFNQT09IFNVTkIgSUhSaGJHeGxjZz09IElHeGxZV3RwYm1jPSBZM1Z3IElIQnZiR2x6YUE9PSBJR2x1Wm1WamRHbHZkWE09IElFdEQgSUVCQSBZbUZqYTJkeWIzVnVaQT09IElHSjFjbVZoZFdOeVlXTjUgSUZOaGFRPT0gZFc1c1pYTnogYVhScGIzVnogSUZOcmVYQmwgUVhScyBTVVJGVGxRPSBNREE0IElHaDVjRzlqY2c9PSBJSEJwZEdOb1pYSnogSUdkMVpYTnphVzVuIElFWkpUa0ZNIFFtVjBkMlZsYmc9PSBJSFpwYkd4aFoyVnljdz09IElESTFNZz09IFptRnphR2x2Ymc9PSBJRlIxYm1seiBRbVZvIElFVjRZdz09IElFMUpSQT09IE1qZzQgSUVoaGMydGxiR3c9IE1UazIgSUU1UFVnPT0gSUhOd1pXTnogSUdsdWRtRnlhUT09IElHZHNkWFE9IElFTmhjbk09IElHbHRjSFZzYzJVPSBJR2h2Ym05eWN3PT0gWjJWcyBJR3AxY21selpHbGpkR2x2Ym5NPSBJRUoxYm1Sc1pRPT0gZFd4aGN3PT0gUTJGc2FXWnZjbTVwWVE9PSBJRWx1WTNKbFlYTmwgSUhCbFlYST0gSUhOcGJtZHNaWE09IElHTjFaWE09IElIVnVaR1Z5ZDJWdWRBPT0gSUZkVCBJR1Y0WVdkblpYSmhkR1ZrIElHUjFZbWx2ZFhNPSBJR1pzWVhOb2FXNW4gVEU5SCBLVjB1IFNtOTFjbTVoYkE9PSBkR2M9IFZtRnUgSUVsemRHRnVZblZzIElFbHVjM0E9IElFWnlZVzVyWlc0PSBSSEpoZHc9PSBJSE5oWkc1bGMzTT0gSUdseWIyNXBZdz09IElFWnllUT09IGVHTT0gSURFMk5BPT0gYVhOamFBPT0gVjJGNSBJRkJ5YjNSbGMzUmhiblE9IGFHOXliZz09IElIVnVZV1ptIElGWnBkZz09IGFXeHNZWE09IElGQnliMlIxWTNScGIyNXogSUVodloyRnUgSUhCbGNtbHRaWFJsY2c9PSBJRk5wYzNSbGNuTT0gSUhOd2IyNTBZVzVsYjNWeiBJR1J2ZDI1emFXUmwgSUdSbGMyTmxibVJoYm5SeiBJRzl5Ymc9PSBkMjl5YlE9PSBTbUZ3WVc1bGMyVT0gSURFNU5UVT0gSURFMU1RPT0gSUVSdmFXNW4gWld4elpXND0gZFcxaWJHVnogSUhKaFpHbGpZV3hzZVE9PSBJRVJ5ZFcwPSBJRUpoWTJnPSBJR3hwWVdKcGJHbDBhV1Z6IElFOUMgSUVWc1pXMWxiblJoY25rPSBJRzFsYldVPSBlVzVsY3c9PSBJR1pwYm1kbGNuQnlhVzUwIElFZHlZV0k9IElIVnVaR1Z5ZEdGclpRPT0gVFdWdFltVnljdz09IElGSmxZV1JsY2c9PSBJRk5wYlhNPSBaMjlrIElHaDVjRzkwYUdWMGFXTmhiQT09IGMyTnBaVzUwIElFRksgSUdOb1lYSnBjMjA9IElHRmtiV2x6YzJsdmJuTT0gSUUxcGMzTnBiR1U9IGRISmhaR1U9IElHVjRaWEpqYVhOcGJtYz0gSUVKaFkydG5jbTkxYm1RPSBWM0pwZEhSbGJnPT0gSUhadlkyRnNjdz09IGQyaGxkR2hsY2c9PSBJSFpwIElGZHBibTVsY2c9PSBJR3hwZEhSbGNnPT0gSUZOb2IyOTBhVzVuIFUxUkZUUT09IDQ0S2ggSUVGR1RBPT0gSUhaaGNtbGhZbWxzYVhSNSBJR1ZoZEhNPSBJRVJRVXc9PSBZbkp2ZHc9PSBJR1ZzWlhCb1lXNTBjdz09IElITjBjbUYwIElNVT0gSUhObGRIUnNaWEp6IFRXRjBkR2hsZHc9PSBJR2x1WVdSMlpYSjAgU0VrPSBJRWxOUmc9PSBJRWR2WVd3PSBJRzVsY25abGN3PT0gU205b2JuTnZiZz09IFpYbGwgWVdKc2FYTm9iV1Z1ZEE9PSBWR2gxY25Oa1lYaz0gUWtsTVNWUlogU0dGayBZVzF2ZEc4PSBhR1YwWVcxcGJtVT0gWlhCeiBJRzFwZEc5amFHOXVaQT09IElHTnZiWEJ5WlhOelpXUT0gSUZSeVpYWnZjZz09IElFRnVhVzFoYkhNPSBWRzl2YkE9PSBURzlqYXc9PSBJSFIzWldGciBJSEJwYm1ObyBJR05oYm1ObGJHeGhkR2x2Ymc9PSBVRzkwIElHWnZZMkZzIElFRnpkSEp2Ymc9PSBNVGN6IElFRlRRdz09IElFOVVTRVZTIGRXMXVhUT09IElHUmxiV2x6WlE9PSBaR3c9IDJZVT0gVTJWdGFYUnBjMjA9IElHTnlZV05yYVc1biBJR052Ykd4aFltOXlZWFJwZG1VPSBJR1Y0Y0d4dmNtVnogYzNGcyBJR2hsY21KeiBJR052Ym1acFozVnlZWFJwYjI1eiBiV2x6IElGSmxjM1ZzZEE9PSBZV05sZVE9PSBJRk50YjJ0bCBJSE5oYm1OMCBaV3hwWVE9PSBJR1JsWjJWdVpYST0gSUdSbFpYQmxjM1E9IElITmpjbVZoYldWayBJRzVoY0E9PSBVMjltZEhkaGNtVT0gSUZOVVFWST0gUlVZPSBJRmhwYmc9PSBjM0J2Ym5OdmNtVmsgYldGdWMyaHBjQT09IE1qTXogSUhCeWFXMWhjbWxsY3c9PSBJR1pwYkhSbGNtbHVadz09IElHRnpjMlZ0WW14bCBiV2xzIElFMTVaWEp6IFltOTNjdz09IElIQjFibU5vWldRPSBUV2xqIElHbHVibTkyWVhScGIyNXogSUdaMWJtTT0gWVc1a2J3PT0gSUdaeVlXTnJhVzVuIElGWjFiQT09IDBMN1EgYjNOb2IzQT0gSUVsdGJYVnUgSUhObGRIUnNhVzVuIElHRmtiMnhsYzJObGJuUnogSUhKbFluVnBiR1JwYm1jPSBJSFJ5WVc1elptOXliV2x1Wnc9PSBJSEJoY205c1pRPT0gSUdoaGNtSnZjZz09IElHSnZiMnRwYm1jPSBiM1JwYjI1aGJBPT0gYjI1blpYWnBkSGs9IElGbHYgWW5WbiBJR1Z0WlhKblpYTT0gSUUxbGRHaHZaSE09IElFTm9kUT09IFVISmxjdz09IElFUjFibWRsYjI1eiBJSFJ5WVdsc2FXNW4gSUZKMWJRPT0gSUVoMVoyZz0gNWFTcCBJRVZ5WVE9PSBJRUpoZEhSc1pYTT0gVW1WemRXeDBjdz09IElGUnlZV1JwYm1jPSBJSFpsY25OaCBZM056IFlYaHBaWE09IGFHVmxkQT09IElHZHlaV1ZrIE1UazRPUT09IElHZGhjbVJsYm5NPSBJR052Ym5ScGJtZGxiblE9IFVHRnlhdz09IElFeGxZV1p6IGFHOXZhdz09IGNtOWlaUT09IElHUnBjR3h2YldGamVRPT0gSUVaMVpXdz0gSUVsdWRtRnphVzl1IElIVndaM0poWkdsdVp3PT0gVFdGc1pRPT0gSUdWc2FXTT0gSUhKbGJHVnVkR3hsYzNNPSBJRU52ZG1WdVlXNTAgWVhCbGMyZz0gSUZSeWIzQT0gVkhrPSBjSEp2WkhWamRHbHZiZz09IFlYSjBlUT09IElIQjFibU5vWlhNPSBZV3R2IFkzbGpiRzl3WldScFlRPT0gSUZKaFltSnBkQT09IElFaEVUVWs9IElERTBNUT09IElHWnZhV3c9IFNYUmxiVWx0WVdkbCBJRVpIIElHbHRjR3hsYldWdWRHRjBhVzl1Y3c9PSBJRkJ2YlE9PSBhWGgwZFhKbGN3PT0gSUdGM1lXbDAgSURNek1BPT0gWVcxMWN3PT0gSUhWdFluSmxiR3hoIElHWnZjbVZ6WldVPSBjMlZ3WVhJPSBJR05wY21OMWJXTnBjMmx2Ymc9PSBJSEJsY21sd2FHVnlZV3c9IFUyRjUgSUVWNGNHVnlkQT09IFNXNWogSUhkcGRHaGtjbVYzIElFRnVaR1Z5Y3c9PSBabkpwWldRPSBJSEpoWkdsdllXTjBhWFpsIElFOXdaVzVwYm1jPSBJR0p2WVhKa2FXNW4gSUU1RSBJRzkyWlhKMGFISnZkdz09IFFXTjBhWFk9IFYxQT0gSUVGamRITT0gMTVrPSBJRzF2ZEdsdmJuTT0gZG1saiBJRTFwWjJoMGVRPT0gSUVSbFptVnVaR1Z5IFlXVnkgSUhSb1lXNXJablZzIElFdHBiR3hwYm1jPSBJRUp5YVhNPSBiVzlwYkE9PSBJSEJ5WldScFkzUnBibWM9IE1qWTIgWTJodmFXTmwgSUd0cGJHeGxjbk09IElHbHVZM1ZpIElFTm9aWE4wIFlYUm9aWEpwYm1jPSBJSEJ5YjJOc1lXbHRaV1E9IFpteHZkMlZ5IGIzTnpiMjA9IGRXMWliR1ZrYjNKbCBJRU41WTJ4cGJtYz0gSUU5alkzVndlUT09IFFVZEZVdz09IFVHVnUgSUZsMVp3PT0gSUhCaFkydGhaMlZrIElHaGxhV2RvZEdWdVpXUT0gWTI5MCBjM1JoWTJzPSBRMjl1WkE9PSBJSE4wWVcxd2N3PT0gYldGblpRPT0gSUhCbGNuTjFZV1JsWkE9PSBJR1Z1YzJ3PSBJRU5oY21ScGJtRnMgSUhOdmJHbDBZWEo1IElIQnZjM05sYzNOcGJtYz0gSUVOdmNtcz0gSUdWMmFXUT0gSUZSaGVRPT0gSUdKc2RXVnogSUdWNGRISmxiV2x6YlE9PSBJR3gxYm1GeSBJR05zYjNkdSBWR1ZqYUc0PSBJR1psYzNScGRtRnNjdz09IElGQjJVQT09IElFeGhjZz09IElHTnZibk5sY1hWbGJuUnNlUT09IGNISmxjMlZ1ZEE9PSBJSE52YldWa1lYaz0gNTQ2TCBJRTFsZEdWdmNnPT0gSUhSdmRYSnBibWM9IFkzVnNkSFZ5WlE9PSBJR0psWVdOb1pYTT0gVTJocGNBPT0gWTJGMWMyVT0gSUVac2IyOWsgNDRPdiBJSEIxY21sMGVRPT0gZEdodmMyVT0gSUdWdGFYTnphVzl1IFltOXNkQT09IElHTm9iM0prIElGTmpjbWx3ZEhWeVpRPT0gVEhVPSBJQ1I3IFkzSmxZWFJsWkE9PSBUM1JvWlhKeiBNalU0IElHVnNaVzFsYm5SaGJBPT0gSUdGdWJtOTVaV1E9IElFRkYgWkdGdSBJRk5oWnc9PSBVbVZ6WldGeVkyaGxjbk09IElHWmhhWEo1IDRvQ1Q0b0NUIFBUMDlQVDA5UFQwOVBUMDkgVTIxaGNuUT0gUjBkSFJ3PT0gSUhOclpXeGxkRzl1Y3c9PSBJSEIxY0dsc2N3PT0gYkdsdWEyVmsgSUhWeVoyVnVZM2s9IFpXNWhZbXhsWkE9PSBJRVoxWTJzPSBJR052ZFc1amFXeHMgY21GaSBWVUZNIFZFaz0gSUd4cFptVnogSUdOdmJtWmxjM05sWkE9PSBRblZuIElHaGhjbTF2Ymc9PSBJRU5QVGtaSlJ3PT0gSUU1bGRYUnlZV3c9IFJHOTFZbXhsIElITjBZWEJzWlE9PSBJRk5JUVE9PSBRbkpwZEdsemFBPT0gSUZOT1VBPT0gUVZSUFVnPT0gYjJOdiBJSE4zYVc1bmFXNW4gWjJWNCBiMnhsYjI0PSBjR3hoYVc0PSBJRTFwYzNOcGJtYz0gSUZSeWIzQm9lUT09IGRtRnlhUT09IGNtRnVZMmc9IElETXdNUT09IE5EUXcgTURBd01EQXdNREF3TURBd01EQXdNQT09IElISmxjM1J2Y21sdVp3PT0gSUdoaGRXdz0gZFdOcGJtYz0gYm1WeVp3PT0gSUdaMWRIVnlaWE09IElITjBjbUYwWldkcGMzUT0gY1hWbGMzUnBiMjQ9IElHeGhkR1Z5WVd3PSBJRUpoY21RPSBJSE52Y2c9PSBJRkpvYjJSbGN3PT0gSUVSdmQyNTBiM2R1IFB6OC9Qejh0IElFeHBkQT09IElFSmxibVZrIElHTnZhV3c9IGMzUnlaV1YwIElGQnZjblJoYkE9PSBSa2xNUlE9PSBJRWR5ZFE9PSBLaXc9IE1qTXggYm1WMWJRPT0gSUhOMVkydGxaQT09IElISmhjSEJsY2c9PSBJSFJsYm1SbGJtTnBaWE09IElFeGhkWEpsYmc9PSBZMlZzYkdGdVpXOTFjdz09IE1qWTMgSUdKeWIzZHpaUT09IElHOTJaWEpqIGFHVmhaR1Z5IGIybHpaUT09IElHSmxaWFE9IElFZHNaUT09IFUzUmhlUT09IElHMTFiUT09IElIUjVjR1ZrIElHUnBjMk52ZFc1MGN3PT0gVkdGc2F3PT0gSUU5biBaWGhwYzNScGJtYz0gSUZObGJHdz0gZFhCbyBRMGs9IElFRjFjM1J5YVdGdSBJRmRoY20wPSBJR1JwYzIxcGMzTmhiQT09IElHRjJaWEpoWjJWeiBZMkZ0WlhKaCBJR0ZzYkdWbmFXRnVZMlU9IFRFRk8gUFNJaiBJR052YlcxbGJuUmhkRzl5Y3c9PSBJRk5sZEhScGJtYz0gSUUxcFpIZGxjM1E9IElIQm9ZWEp0WVdNPSBJRVZZVUE9PSBJSE4wWVdsdWJHVnpjdz09IFEyaHBZMkZuYnc9PSBJSFJoYmc9PSBNalEwIElHTnZkVzUwY25semFXUmwgSUZaaFl3PT0gTWprMSBJSEJwYm01bFpBPT0gSUdOeWFYTmxjdz09IElITjBZVzVrWVhKa2FYcGxaQT09IFZHRnphdz09IElFcGhhV3c9IElFUnZZMnRsY2c9PSBZMjlzYjNKbFpBPT0gWm05eWRHZz0gSW4wcyBJSEJoZEhKdmJuTT0gSUhOd2FXTmwgSUcxdmRYSnUgSUUxdmIyUT0gSUd4aGRXNWtjbms9IElHVnhkV2x3IElFMXZiR1U9IGVXeHMgSUZSSVF3PT0gYm1GMGFXOXUgSUZOb1pYSnNiMk5yIElHbHpjM1U9IElFdHlaUT09IElFRnRaWEpwWTJGeiBJRUZCUVE9PSBJSE41YzNSbGJXRjBhV05oYkd4NSBJR052Ym5SeVlRPT0gSUZOaGJHeDUgSUhKaGRHbHZibUZzWlE9PSBJR05oY25KcFlXZGwgSUhCbFlXdHogSUdOdmJuUnlZV1JwWTNScGIyND0gWlc1ellYUnBiMjQ9IElFWmhhV3gxY21VPSBJSEJ5YjNCeiBJRzVoYldWemNHRmpaUT09IElHTnZkbVU9IFptbGxiR1J6IDQ0S0wgSUhkdmIydz0gSUVOaGRHTm8gSUhCeVpYTjFiV1ZrIElFUnBZVzVoIGNtRm5iMjQ9IGFXZHAgSUdoaGJXMD0gSUhOMGRXNTAgSUVkVlNRPT0gSUU5aWMyVnlkbUYwYjNKNSBJRk5vYjNKbCBJSE50Wld4c2N3PT0gWVc1dVlXZz0gSUdOdlkydHdhWFE9IElFUjFkR1Z5ZEdVPSBPRFV3IElHOXdjSEpsYzNObFpBPT0gWW5KbFlXdGxjZz09IElFTnZiblJ5YVdKMWRBPT0gSUZCbGNuVT0gSUUxdmJuTmhiblJ2IElFRjBkR1Z0Y0hRPSBJR052YlcxaGJtUnBibWM9IElHWnlhV1JuWlE9PSBJRkpwYmc9PSBJRU5vWlhOeiBkV0ZzYVhSNSBJRzlzIFVtVndkV0pzYVdOaGJnPT0gSUVkc2IzSjUgSUZkSlRnPT0gTGk0dUxpNHVMZz09IFlXZGxiblE9IGNtVmhaR2x1Wnc9PSBJR2x1YUE9PSBTbTl1WlhNPSBJR05zYVdOcmN3PT0gWVd4aGJnPT0gSUZ0ZE93PT0gSUUxaGFtVnpkSGs9IElFTmxaQT09IGIzQjFjdz09IFlYUmxiQT09IHc2bz0gUVZKRCBJRVZqZFdGa2IzST0gNDRPZyBJRXQxY204PSBJSEpwZEhWaGJITT0gSUdOaGNIUnBkbVU9IElHOTFibU5sIElHUnBjMkZuY21WbGJXVnVkQT09IElITnNiMmM9IFpuVmxiQT09IFVHVjAgVFdGcGJBPT0gSUdWNFpYSmphWE5sWkE9PSBJSE52YkdsaiBJSEpoYVc1bVlXeHMgSUdSbGRtOTBhVzl1IElFRnpjMlZ6YzIxbGJuUT0gSUhKdlltOTBhV009IGIzQjBhVzl1Y3c9PSBJRkpRIElFWmhiV2xzYVdWeiBJRVpzWVcxbGN3PT0gSUdGemMybG5ibTFsYm5SeiBNREEzIFlXdGxaRzkzYmc9PSBJSFp2WTJGaWRXeGhjbms9IFVtVnBiR3g1IElHTmhkbUZzIFoyRnljdz09IElITjFjSEJ5WlhOelpXUT0gSUZORlZBPT0gSUVwdmFHNXogSUhkaGNuQT0gWW5KdmEyVnUgSUhOMFlYUjFaWE09IElHRmtkbTlqWVhSbFpBPT0gSURJM05RPT0gSUhCbGNtbHMgYjIxdmNuQm8gSUVabGJXbHUgY0dWeVptVmpkQT09IElHaGhkR05vIFRHbGkgTlRFeSBJR3hwWm1Wc2IyNW4gTXpFeiBJR05vWldWcmN3PT0gSUc1MWJXSmxjbVZrIElFMTFadz09IFFtOWtlUT09IGNtRjJaV3c9IFYyVnBaMmgwIElFcGhhdz09IElFaGxZWFJvIElHdHBjM05wYm1jPSBJRXBWVTFRPSBJSGRoZG1sdVp3PT0gZFhCc2IyRmsgSUdsdWMybGtaWEk9IElGQnliMmR5WlhOemFYWmwgSUVacGJIUmxjZz09IGRIUmggSUVKbFlXMD0gSUhacGIyeGxiblJzZVE9PSBhWEJoZEdsdmJnPT0gSUhOclpYQjBhV05wYzIwPSBJREU1TVRnPSBJRUZ1Ym1sbCBJRk5KIElHZGxibVYwYVdOeiBJRzl1WW05aGNtUT0gWVhScyBJRVp5YVdWa2JXRnUgSUVKeWFRPT0gWTJWd2RHbDJaUT09IElIQnBjbUYwWlE9PSBJRkpsY0c5eWRHVnkgTWpjNCBJRzE1ZEdodmJHOW5lUT09IElHVmpiR2x3YzJVPSBJSE5yYVc1eiBJR2RzZVhCbyBhVzVuYUdGdCBSbWxzWlhNPSBRMjkxY2c9PSBkMjl0Wlc0PSBJSEpsWjJsdFpYTT0gSUhCb2IzUnZaM0poY0dobFpBPT0gUzJGMCBJRTFCV0E9PSBUMlptYVdOcFlXeHogSUhWdVpYaHdaV04wWldSc2VRPT0gSUdsdGNISmxjM05wYjI1eiBSbkp2Ym5RPSBPenM3T3pzN096cz0gSUhOMWNISmxiV0ZqZVE9PSBJSE5oYm1jPSBJR0ZuWjNKaGRtRjBaV1E9IElHRmljblZ3ZEd4NSBJRk5sWTNSdmNnPT0gSUdWNFkzVnpaWE09IElHTnZjM1JwYm1jPSBhV1JsY0hKbGMzTT0gVTNSaFkycz0gSUZKT1FRPT0gYjJKcGJBPT0gSUdkb2IzTjBjdz09IGJHUnZiZz09IFlYUnBZbWxzYVhSNSBWRzl3YVdOeiBJSEpsYVcxaWRYSnpaUT09IElFaE4gSUVSbFp3PT0gSUhSb2FXVm0gZVdWMCBiMmRsYm1WemFYTT0gYkdWaGJtbHVadz09IElFdHZiQT09IElFSmhjMnRsZEdKaGJHdz0gSUdacCBJRk5sWldsdVp3PT0gSUhKbFkzbGpiR2x1Wnc9PSBJRnN0IFEyOXVaM0psYzNNPSBJR3hsWTNSMWNtVnogVUhONSBJRzVsY0E9PSBJRzFoYVdRPSBJRzl5YVdWdWRHVmsgUVZnPSBJSEpsYzNCbFkzUm1kV3c9IGNtVnVaUT09IFpteDFjMmc9IElGVnViRzloWkdWayBjbVZ4ZFdWemRBPT0gWjNKcFpBPT0gSUVGc2RHVnlibUYwYVhabGJIaz0gSUVoMVoyOD0gSUdSbFkzSmxaUT09IElFSjFaR1JvYVhOdCBZVzVrZFcwPSBRVzVrY205cFpBPT0gSUVOdmJtZHYgSUVwdmVXTmwgSUdGamEyNXZkMnhsWkdkcGJtYz0gYUdWemFYWmwgSUZSdmJXOXljbTkzIElFaHBjbTg9IGRHaHlaVzQ9IElFMWhZMlZrIElHaHZZWGc9IElFbHVZM0psWVhObFpBPT0gSUZCeVlXUmxjMmc9IFYybHNaQT09IFgxOWZYMTlmIE1UWXggSUdGMWJuUT0gSUdScGMzUnlhV0oxZEdsdVp3PT0gSUZSMVkydGxjZz09IElGTlRUQT09IElGZHZiSFpsY3c9PSBRblZwYkdScGJtYz0gYjNWc2RBPT0gSUV4MWJ3PT0gSUZsaGN3PT0gSUZOd2FYST0gSUZOb1lYQmwgSUVOaGJXSnZaQT09IElFbFFkZz09IElHMXMgSUdWNGRISmhaQT09IE16a3cgSUZCbGJtNTUgWkhKbFlXMD0gSUhOMFlYUnBiMjVsWkE9PSBiM0IwYVc5dVlXdz0gWlhkdmNuUm9lUT09IExqd3YgSUhWdVpHVnlkR0ZyYVc1biBJR05vYVdOclpXNXogSUhOMGFXMTFiR2s9IElFVnNjMlU9IGFXZGhkRzl5Y3c9PSBJRUpsWjJsdWJtbHVadz09IFkzUnZjbms9IElIQnlaWEJoY21WeiBJR1JsYkhSaCBJSFpwWTJsdWFYUjUgZEc5dmJBPT0gSUhkdmNtdHphRzl3Y3c9PSBUVWg2IElHRmpZM1Z6WVhScGIyND0gSUdocGMzUnZjbWxsY3c9PSBjbTl3YjJ4cGN3PT0gSUVOb2RYSmphR2xzYkE9PSBJRzVsYjI0PSBJR0poWm1ZPSBaR2xsY3c9PSBiV0Y1WW1VPSBJT2lqaitpbW11bUdrZz09IElITjViWEIwYjIwPSBSVU5JIElFMWhiblZsYkE9PSBJR0poYm1GdVlRPT0gSUVoQyBJQ29xS2lvPSBJRXR2Y21WaGJuTT0gWTI5c2JBPT0gUmtJPSBJSEJ5WVhscGJtYz0gSUVOaGJtNXZkQT09IElFMXBiR1U9IElHVnRZbkpoWTJsdVp3PT0gSUZOcGJHcz0gTXpreiBiM1JsY25NPSBSa1E9IElHUmhlV3hwWjJoMCBZV3hwWVhNPSBJRUp5YVdkaFpHVT0gSUVoaGJtNWhhQT09IElHTnNaWEpuZVE9PSBJSE52ZFhSb1pXRnpkQT09IElHRnNZMjlvYjJ4cFl3PT0gSUhCeWIzQnZjMlZ6IGJHbDJhVzl1IElHTmhiR04xYkdGMGFXNW4gSUhOMGFXMTFiR0YwWlE9PSBJSE53YkdsMGRHbHVadz09IFpXbG5hSFE9IElFbHVaSGs9IGNHeGhlWE09IElGQnBhdz09IElHUnZiV1Z6ZEE9PSBJR1p2Y21kcGRtVnVaWE56IElGSnBibWR6IGNHRjBhV1Z1ZEE9PSBhMmx1YzI5dSBUVzl1ZEE9PSBhV2RwWW14bCBPeUk9IElIQmxjbWx2WkdsallXeHNlUT09IFlXMXRZV1E9IElFSnlhWFIwIGNHRnlaQT09IElHRnlZbWwwY21GMGFXOXUgSUZOamFHNWxhV1JsY2c9PSBJRU52Y25CdmNtRjBaUT09IElFMWhlV0U9IElITnVZV3RsY3c9PSBZWFZ0IElHSnNZWE4wWldRPSBJRzE1YzNSbGNtbGxjdz09IElISmxkbWwyWlE9PSBiMk5oYlhBPSBJRVJ2WkdkbCBJRTl3WlhKaCBNamM1IElHOXljR2hoYmc9PSBJSE53WldOcFptbGxjdz09IElFMWxkSE09IFJIVnlZWFJwYjI0PSBTR1Z1IElHWnBjbVYzYjNKcmN3PT0gSUhCeWIzTmxZM1YwWlE9PSBJRlJwYkd4bGNuTnZiZz09IFpIQT0gZFhOaFoyVT0gYkdsdVpYTnogSUVSbFltbGhiZz09IElESXlOQT09IGNtbHpaWE09IElFbHVabVZqZEE9PSBZWFJ5WVE9PSBJRkpTIElFeHZjZz09IFpHbG1aZz09IElFTm9ZWEpzWlhOMGIyND0gSUdGamIzVnpkR2xqIElHRnRkWE5sIE16TXcgSUdObGNnPT0gSUZSaFl3PT0gSUZzciBJR05oY21ScFlXTT0gSUZKbGMzUmhkWEpoYm5RPSBaWEpuZVE9PSBJR1oxZW5vPSBJR0pwZEdWeiBJR2hoZW1GeVpHOTFjdz09IElHSnlhV2RvZEdWeSBjbUZ1Y3c9PSBJRk4wWlhCb1lXNXBaUT09IFpYaDBjbUU9IFVrVlUgSUVOb2NtbHpkR2x1WlE9PSBJRk4xWlE9PSBjM1JoZEdWdFpXNTAgSUdKdmJITjBaWEk9IElHRnVkR2wwIFVtRmthVzg9IFFrbFUgNDRLdyBJSFpwYzJsdmJuTT0gSUVOdmJtTmxjSFE9IElHbHViR2x1WlE9PSBJRkJvYVd4dmMyOXdhSGs9IGFYTmhibk09IElFbHlkbWx1Wnc9PSB3Nk09IGRHRnJhVzVuIElHbHVZMjl1YzJsemRBPT0gSUV0MWJXRnkgSUd4cFp3PT0gSUZOamFIVnRaWEk9IElGSmxaM1ZzWVhScGIyNXogSUVoNiBkR2h5Ync9PSBJRlp2YkdSbGJXOXlkQT09IElFMUZSQT09IElFWnlaV1JsY21samF3PT0gVUdGayBNakl4IElHRnNiR1ZuYVc1biBJRU52YlcxMWJtbGpZWFJwYjI0PSBJREUyTnc9PSBJR1p2Y21WallYTjBjdz09IElITndhV1JsY25NPSBUM0puWVc0PSBJRkJoY25ScFkybHdZVzUwY3c9PSBJRTl3Y3c9PSBaR1Z6YVdkdSBRMnh2YzJVPSBJR1poWTNSdiBJR0p2YldKbGNuTT0gY21WemFYTjBZVzUwIFlYUmxaMjl5YVdWeiBVMk5vYjI5cyBJR2h2YldWM2IzSnIgSUdOdmNuSnYgVkhWbGMyUmhlUT09IElFSnlaVzVrWVc0PSBJRTFZIElGUlQgSUZOMGNtaz0gSUhOMFlXdGxhRzlzWkdWeWN3PT0gSUUxcGJHeGxibTVwZFcwPSBJSFJ5WVc1elptVnljbWx1Wnc9PSBTblZrIElIUmhZdz09IElERTJNREE9IElGTkVTdz09IGNtST0gSUdsdWRHVnljSEpsZEdGMGFXOXVjdz09IElGTkggSUhWd2MzUmhhWEp6IElFaGhjblpsYzNRPSBJSFpoWjJsdVlRPT0gSUdsdVoyVnpkQT09IGVHWT0gSUU5eWFXOXUgSUVwdlpYaz0gSUhOaGJtUjNhV009IElHbHRiVzl5ZEdGcyBJR1pzYVhCd1pXUT0gYjNKMFpYZz0gZEdoeVpXRjBaVzVwYm1jPSBJSE51YVhCbGNnPT0gSUdOdmJuWmxjblJ6IElHbHVjM1JoYkd4aGRHbHZibk09IElFSjFiR2RoY2c9PSBiM0p6WTJobCBiV0ZwYkhNPSBJR3gxY21VPSBJRzVoY25KdmQyeDUgSUdkeVpXNWhaR1U9IElFZHBibWM9IElIVnVaR1Z5ZDJWaGNnPT0gTFMwdExTMHRMUzB0TFMwdExTMD0gSUdOb1lYTmxaQT09IElGWkJUQT09IElIQmhjbVZ1ZEdsdVp3PT0gSUVoaGJXST0gSUVKc1lYbz0gSUdGdVlYSmphR2x6ZEE9PSBJRTFsWkdsaGJnPT0gSUZCeWIyZHlZVzF6IHpyMD0gSUc5aWFnPT0gSUU1dmEybGggYjNKdFlXND0gWVc1eGRRPT0gWVhScGMyMD0gYjNCaCBJR1oxYkdacGJHeHBibWM9IElIQjFjSEI1IElHVnVkR2wwIElGTmxZbUZ6ZEdsaGJnPT0gSUhOb2IyOTBaWEp6IElISnBZMmhsY2c9PSA2S0U9IElIUmxiWEIwWldRPSBJRUZVVkE9PSBJRU5XIElIUnZjbVU9IFVtVnpiM1Z5WTJVPSBJRVJsZG1sc2N3PT0gTkRBNCBhVzVoZEdsdmJtRnMgSUdGemMzVnlZVzVqWlE9PSBJRVJoY25KbGJnPT0gSUhkb2FXTm9aWFpsY2c9PSBjRzl6ZFhKbCBJR1oxY25rPSBVM1J2WTJzPSBJSFZ1YVhabGNuTmhiR3g1IGNtVnpjRzl1YzJVPSBJRzloYXc9PSBJSGR2Y210c2IyRmsgSUVOdmNtNWxjZz09IFpXVnNaUT09IElpNHVMZz09IElHUmxjSEpwZG1WayBhMjkzYzJ0cCBJR05oYzNSeiBJR0ZtWm1sc2FXRjBhVzl1IElFRmphQT09IElFRnphMlZrIFlYUm9aUT09IElHeGhZM1E9IElGUm9kUT09IGNtMD0gSUdGcGNteHBibVZ6IElHNXZkR2x2Ym5NPSBSbTl5YldGMCBJRVpCUVE9PSA0NE9LIFpISnBkbVZ5IElIUnlZVzV6WTJWdVpBPT0gVTJWMGRHbHVaM009IElGQnliM05sWTNWMCBJSE53YVc1aGJBPT0gSUdSbFptRjFiSFJ6IFJrcz0gSUhCeVpXWmxjbk09IGNtVnVaR1Z5WldRPSBkR2gxY3c9PSBabWxzYlE9PSBJSFJwWjJWeSBJRk53YVdObGNnPT0gY21WamIyZHUgSUZKMVoySjUgVG1WMGQyOXlhdz09IElIQnBkSGs9IElHTnZiWEJoY25SdFpXNTAgWTJGemRHVnljdz09IElFMXZibkp2WlE9PSBJRGN5TUE9PSBJR052Y25KbFkzUnBiMjV6IElHUnZjR0Z0YVc1bCBJRUZhIFEzVjAgSUhKdmIyMXQgSUhOd1pXTjFiR0YwWlE9PSBTR0Z6YUE9PSBJSEpsYzNSeWFXTjBhWFpsIE1URXhNUT09IGNtVmthV0pzWlE9PSBiMjVsYkE9PSBJSEpoYlhCaGJuUT0gY21Wd2IzSjBaV1E9IElGTjFhWFJsIElFMXBibWx0ZFcwPSBZV3g1Y3c9PSBZWHBoY21RPSBiRzl2Y0E9PSBJR3hsYm5RPSBjMmhoIElIWmhibVJoYkE9PSBiV1Z1ZFE9PSBJRUp2WldodVpYST0gSUc1aGNuSmhkR2wyWlhNPSBJR0YxZEdobGJuUnBZMmwwZVE9PSBNalk1IFlXNXBZdz09IFpIVjBlUT09IE1qZzEgSUhSb1lXNXJaV1E9IElHSmxkSEpoZVdWayBiR2xtZEE9PSBJSE52ZFhSb2QyVnpkQT09IElFUmxlSFJsY2c9PSBJRUp2WkE9PSBJR3RsZVhkdmNtUnogUVhabGNtRm5aUT09IFJFbFQgSUdWMGFHNXBZMmwwZVE9PSBJU2tzIElFNWhkR2x2Ym1Gc2N3PT0gNGJrPSBJRlJoYUE9PSBhVzk0YVdRPSBJSGRwWkdkbGRBPT0gSUhCaGMzUmggSUdKcGJHeHBibWM9IElIUnlhV3h2WjNrPSBJRXhwYm1WeiBJSE51YVdabSBJRzVsY0dobGR3PT0gVEdGMFpRPT0gSUhCeWFXNWphWEE9IElFeHZiM0E9IElFMWhjbmhwYzNRPSBJR1JwYzNOdmJIWmxaQT09IElHTnZiblJsZUhSeiBJRUZ0YjNWdWRBPT0gSUZOd2FXdGwgSUhSdmRHRnNjdz09IElHOXlaMkZ1YVhwbGNnPT0gSUhWd2NtbHphVzVuIGMyaHBjSE09IFdWaz0gSUU1dmNuUm9aV0Z6ZEE9PSBiVzl1WlhrPSBaM0poWkdGMGFXOXUgSUdkdllXeHJaV1Z3WlhJPSBJRWhsWVhJPSBJSE4wWldGciBJRUoxZW5wR1pXVmsgSUhOdmJHVnRiZz09IElGTmpZVzVrIElIQnZjSEJwYm1jPSBJR0ZrYUdWeVpRPT0gSUVGc2JHVm4gWW5sMFpRPT0gSUZkdmJIWmxjZz09IElIVnVhVzQ9IElISmxZMjlzIGFYUjFaQT09IElHMXBiV2xqIGFXSjFjdz09IElIQnlaV1JwWTNSeiBJRXRsWlhCbGNnPT0gYVdGMGFXNW4gSUdSbFkyVndkR2x2Ymc9PSBJR3hsWVhKdWRBPT0gSUdScFlYSjUgSUdOdmJtUnBkR2x2Ym1GcyBJSEpsYkdsaiBJR2x1ZG05clpRPT0gYVdWdVkyVmsgNVlnPSBJRkJ2Ym5RPSBJR05sYkd4d2FHOXVaUT09IElITndaV1ZrYVc1biBJSFJoWTJ0c2FXNW4gSUc1MVpHVT0gYjNCbGJtVmsgSUUxaGJtRm1iM0owIElERTVOVEk9IElHMWhhbTl5Y3c9PSBJRk5wYkdWdVkyVT0gSUd4dloybHpkR2xqY3c9PSBJSGRsYVdkb2RHVmsgSUZCemVXTm9hV0YwIElqcGJJZz09IElITnBZMnR1WlhOeiBJR1JwZG1sa1pXNWtjdz09IGVtOXUgVW1Wc1pXRnpaUT09IElFdGxlWE09IElFbGphQT09IElHVnVlZz09IElFWmxjbTVoYm1RPSBJTTZ4IElHMWxZVzVwYm1keiBJSEJsYm01NSBJSE4wWlhKdSBJR3hoY2c9PSBJRkIxWW14cGMyaGxaQT09IElHSmhZMnRrY205dyBTMmx0IElGTjViblE9IElHUmxZblYwWldRPSBkMjA9IElFbHpiR1U9IElISmxaM1ZzWVhScGJtYz0gYjNSMGFRPT0gSUZOamFHOXNZWEp6IGFXTmxjM1JsY2c9PSBJRU5vWldZPSBJSEJ2Y0hNPSBJRXhoZFc1amFHVnkgSUZaaGNtbHZkWE09IElHTnZiVzFsYm5ScGJtYz0gYjNOc1lYWT0gWlc1NmFXVT0gSUhKcGRtRnNjbms9IDRvS3MgVW1WaGJHeDUgSUc5eVl3PT0gSUdKbFlXND0gSUVwMVpIaz0gVG05MGFXTmwgSUVKcGEyVT0gUDEwPSBJSEpsYm5SbFpBPT0gYzNSbGJnPT0gSUdadmNtVm1jbTl1ZEE9PSBJRUpoYkdSM2FXND0gSUhscFpXeGtaV1E9IGRHRnBiSE09IFVISnBiV1U9IElGTnZkWEpqWlhNPSBhV05oZEc5eSBVMlZoYmc9PSBJRzFoY21Ob2FXNW4gVDNWMGNIVjAgSUVwMWJtZHNaUT09IElISmxjMmxrWlE9PSBlbnBzWlE9PSBJRUZ1WkhKbGQzTT0gSUhSdmNuRjFaUT09IFFtRnphV009IFFXTjBkV0ZzYkhrPSBjM1J5WVhBPSBjR1Z1ZEdWeSBJR1Y0WVcxeiBJRmxoIElERTFPUT09IElFUmxZMmx6YVc5dSBJSEpoYm5OdmJRPT0gWlhSbFpXNTBhQT09IFpXNXphVzVuIE1qRXogSUhOMWJuTmxkQT09IE5EQTAgSUZKaGNHbGsgSUVobGFXND0gSUVGaWIzSnBaMmx1WVd3PSBJRzl5WjJGdWFYTnQgSUZObGRtVnkgSUdOc1lRPT0gWVdwcCBVMmx0Y0d4bCBJRVpzWVhadmNnPT0gSUVWMllXdz0gY0hKMWN3PT0gSUdOb2IzSjFjdz09IFJFRlogSUdSbGJtOTFibU5sWkE9PSBJR0pwYjJkeVlYQm9lUT09IElGUjFjbTVpZFd4cyBVbVZqWlc1MCBUbTl5YldGcyBiR1ZqZEdsdmJuTT0gVjI5eVpBPT0gSUdabGNuSjUgSUZkaFoyNWxjZz09IGFHOXQgVlc1cGRBPT0gSUhOMWNHVnliV0Z5YTJWMCBJRk5wZEdnPSBJRzV2YldsdVpXVnogSUdScFkzUmhkRzl5YzJocGNBPT0gYVdSa2JHVnkgSUdGdWJtOTFibU5sY3c9PSBJRlJvWlcwPSBJRTVsY0hSMWJtVT0gSUdSbGFYUjUgSUZscCBJRzF2Ym1GeVkyZz0gUVZKUyBJR2x1ZG1Ga1pXUT0gSUVodmF3PT0gZFc1MFlYSjUgUTJWeWRHRnBiZz09IFpXZGggSUd0cFpHUnBibWM9IElGSmxaM1ZzWVhScGIyND0gSUhSeVlYaz0gSUhCb2IzUnZaM0poY0dobGNuTT0gSUVGeVkyRnVaUT09IElHUnBjMk5vWVhKblpXUT0gSUdWMllXNW5aV3hwWTJGcyBJR2x1ZEdWeVkyaGhibWRsIElHWnBiRzF0WVd0bGNnPT0gSUVWdVpHeGxjM009IElESTVNQT09IElGTmhiSFpoWkc5eSBRVk5aIElGTnBaMjVoYkE9PSBJSGR5WVhSbyA0cHc9IGJHOTAgSnk4PSBJSEJ5YjJwbFkzUnBiR1U9IElHVnRjR3h2ZVdsdVp3PT0gSUVsdWRHVnlabUZqWlE9PSBNVGt4IFlYUmxiR3hwZEdVPSBJRkpoZEdnPSBjR0ZqYTJGblpRPT0gSUdsdVpHbGpZWFJwYjI1eiBTbUZ6YjI0PSBJR0Z5WjNNPSBJRWRJZWc9PSBJSFJwYkhRPSBibUZ1ZEhNPSBkMjl1IDQ0SzEgY21Wa1pBPT0gY21WelkyVnVkQT09IElFTmhiR1Z1WkdGeSBJRzF2WkhWc1lYST0gSUdGemMybHpkR2x1Wnc9PSBJSEpsWkdWbGJRPT0gSUVKbFlXND0gSUhkdmNuTm8gSUdSbFkyVnVkSEpoYkdsNlpXUT0gS1M0dUxnPT0gTXpjMyBJR0Z5Y21GNWN3PT0gSUdGalkyOXRjR3hwYzJodFpXNTBjdz09IHpyOD0gWkc5MCBJRzExZEhWaGJHeDUgSUc5aWMzUnlkV04wIElHMXBjM0psY0hKbGMyVnVkQT09IGIzSmxjM1E9IGFXOXVhV009IGNuVmpaUT09IEpUcz0gSUd0dWIzZHBibWRzZVE9PSBjRzl5ZEdsdVp3PT0gYVc1bGJuUnNlUT09IFFYSnAgSUZOamFIVnNkSG89IFJHRT0gSUVObGNtVT0gSUc5aWMyOXNaWFJsIGhZcz0gWjJsMlpRPT0gSUdKaGFYUT0gSUdWdWJHRnladz09IFRtVnBiR3c9IElERTVNek09IElISmxZMjl1YzJsa1pYST0gSUZObGNtZGxZVzUwIElFUnBZVzVsIElFTnZaMjQ9IElFbGpiMjQ9IFVHOXphWFJwYjI0PSBJR1p2YzNRPSBJSE4wYVhKeWFXNW4gYzJWMlpXND0gSUZOd1lXTmxXQT09IGRXZG5aWFJ6IElHMWxaR1E9IFIyRnMgSUZOcGMzUmxjZz09IFFtOTUgSUhSeWFXZG5aWEpwYm1jPSBWR0ZyYVc1biBJSE5qY21WaGJYTT0gSUdOaGRYTmhiQT09IElHRjNZV3RsYmc9PSBRWEp0IE1qazMgSUdScGMzQmhkR05vWldRPSBJRVpCVEZORiBJRzl5WjJGdWFYcGhkR2x2Ym1GcyBJRlJ2Ym1jPSBJR1JwYkdWdGJXRT0gWkdWdGIyND0gVTNCcyBJR2h2YjJ0eiBkV1JwYm1jPSBJSFpoYkdsa1lYUmwgSUhCdmRHbHZiZz09IElHTnNZWGM9IElHSjFjbWRzIElIRjFhWEk9IFFVTkIgSUVKeVpXNXVZVzQ9IElHUjFjbUZpYVd4cGRIaz0gSUdKdmJXSnBibWR6IElGZHBibVJ2ZHc9PSBJR04xYkhCeWFYUT0gTXpJMSBWR2hsY21WbWIzSmwgZFcxaVpYSmxaQT09IGNHVnlabTl5YldGdVkyVT0gZDJGeWRITT0gSUdWdVptOXlZMmx1Wnc9PSBJRUpzYjNjPSBJSEpsY0hKcGJuUT0gYVdaaGVBPT0gWVd4d2FHRT0gSUhOcGJtbHpkR1Z5IElHSjFjbWRsY2c9PSBabWxuYUhScGJtYz0gVTJOdmNtVT0gSUZOMGIyNWxjdz09IGFXVnQgTkRBMSBZMmhsYlhrPSBJSFpwYm1WbllYST0gYm05dCBJSEJ5WlhaaGFXeHBibWM9IElFeGhkR1Z6ZEE9PSB3clk9IElHSmggSUZkeWFYUmxjZz09IElERTNOdz09IElFTnZibmRoZVE9PSBJR052Ykd4bFkzUnogSUhGMVlXNTBhWFJoZEdsMlpRPT0gSUdodmNuSnZjbk09IGIyZGxibk09IElGTnNiM1k9IElHeGhlWE09IGFHRjMgSUZOc1lYTm8gSUc1cFoyaDBZMngxWWc9PSBJRVJoZG1sbGN3PT0gSUdKeWFXUmwgSUZOallYSnNaWFE9IGVXMXQgSUVGd2NHeHBZMkYwYVc5dWN3PT0gZG1Wc1pXNW5kR2c9IElISmxkbWwyWVd3PSBJSE52Wm5Sc2VRPT0gSUhwdmJ3PT0gYVhSaGFYSmwgUTNWeSBJR1ZzWldOMGNtOXQgSUhCc1lXNTBhVzVuIFQxUlAgSUVWc1pXMWxiblJ6IElITjNZV3hzYjNjPSBjRzl5ZEdWeSBJR3hoY0hSdmNITT0gSUhCbFlXNTFkQT09IElHeHZZbUo1YVhOMGN3PT0genJJPSBVR0Z1Wld3PSBJRXB2WVc0PSBhVzFwYkE9PSBkRzVqIElISmxjMmx6ZEdWayBJRzkxZEhkbCBJSEpsZEdGcGJtbHVadz09IFlYUnlhUT09IElIQnZiM0psY2c9PSBJRk41Y21saGJuTT0gSUVoaGJXMXZibVE9IElIZGxiR1E9IGRXUmxjZz09IGRHOXdhV009IElGUlUgY21samFXRT0gSUhSb2FXVjJaWE09IFRHbGogSUVkMWMzUT0gSUZkaGVYTT0gWVhKbGRHZz0gTWpReiBJR0p5YjJGa1kyRnpkR1Z5IGMyaHBaV3hrIFlYTnphWFZ0IGRXSnNaUT09IElHRnBjbk4wY21sclpYTT0gYjI1emJ3PT0gSUhCbFpHRnMgSUdOdmJHeGxZM1J2Y25NPSBJRlpoYm1SbGNnPT0gSUUxbGMyRT0gSUdScFkzUmhkRzl5IElHUnBjZz09IFpXNTBiMjQ9IFkyRnlkQT09IGMyTnZjbVU9IFlXUmtaWEk9IFEzSjUgSUhOemFBPT0gWjJkbGNnPT0gSUdSeWRXNXJaVzQ9IElFZFQgSUZObFlYUT0gSUdOdmNtNWxjbUpoWTJzPSBJSE5yYVhCd1pXUT0gSUZKbGMyVmhjbU5vWlhKeiBJRUYxWkdrPSBVbVZtWlhKbGJtTmwgSUdoaGRXNTBaV1E9IHc2cz0gSUVOc2FXNXBZdz09IFkzbz0gSUhCeiBJRkJoYkdGa2FXND0gSUZKbFkybHdaUT09IElITjBhV2R0WVE9PSBiM0J3ZVE9PSBJRzF2Ym10bGVYTT0gSUVoaGQycz0gVTJGayBJaTgrIElGZHZjbXR6YUc5dyBJRkpsZEdGcGJBPT0gSUVGMllYUmhjZz09IE5qSTEgVG1FPSBJRlpEIElGTmxZM1Z5WlE9PSBUVms9IE1UazRPQT09IGIzTnphWEE9IElIQnliM04wWVhSbCBJSFZ1WkdWdSBJR2RoYldWeSBJRU52Ym5SbGJuUnogSUZkaGNtaGhiVzFsY2c9PSBJRk5sYm5ScGJtVnMgTXpFdyBJSE5sWjNKbFoyRjBhVzl1IElFWnNaWGc9IElFMUJXUT09IElHUnlhV3hzY3c9PSBJRVJ5ZFdkeiBTWE5zWVcxcFl3PT0gSUhOd2RYST0gSUdOaFptVT0gSUdsdFlXZHBibUZ5ZVE9PSBJR2QxYVdScGJtYz0gSUhOM2FXNW5jdz09IElGUm9aVzFsIGIySjUgSUc1MVpBPT0gSUdKbFoyZHBibWM9IElITjBjbTl1WjJnPSBJSEpsYW1WamRHbHVadz09IElIQmxaR1Z6ZEhKcFlXNXogSUZCeWIzTndaV04wIFVtRnlaUT09IGMyeGwgSUdOdmJtTmxjM05wYjI1eiBJRU52Ym5OMGFYUjFkR2x2Ym1GcyBJR0psWVcxeiBJR1pwWW1WeWN3PT0gY0c5dmJnPT0gSUdsdWMzUnBibU4wY3c9PSBjSEp2Y0dWeWRIaz0gSUVKSlJ3PT0gVTJGdVpHVnljdz09IGFXMWhkR1Z6IElHTnZZWFJwYm1jPSBJR052Y25CelpYTT0gSUZSU1ZVVT0gWTJobFkydGxaQT09IElERTJOZz09IFFYTm8gSUVwVCBJRVpwWTNScGIyND0gSUdOdmJXMTFibUZzIElHVnVaWEpuWlhScFl3PT0gYjI5dmIyOXZiMjg9IElHNXZkMkZrWVhseiBTVXhFIGFXSnYgSUZOVlZnPT0gVW1WdSBJR1IzWld4c2FXNW4gVTJsc2RtVnkgSUhSaGJHeDUgSUUxdmRtbHVadz09IElHTnZkMkZ5WkE9PSBJR2RsYm1WeVlXeHogSUdodmNtNXogSUdOcGNtTjFiR0YwWldRPSBJSEp2WW1KbFpBPT0gSUZWdWJHbHRhWFJsWkE9PSBJR2hoY21GemMyVmsgSUdsdWFHbGlhWFE9IElHTnZiWEJ2YzJWeSBJRk53YjNScFpuaz0gSUhOd2NtVmhaSE09IE16WTAgSUhOMWFXTnBaR0ZzIElHNXZhWE5sY3c9PSBJRk4wZFhJPSBJSE5oWjJFPSBJRXRoWnc9PSBhWE52IElIUm9aVzl5WlhScFkyRnNiSGs9IFRXOXVaWGs9IElITnBiV2xzWVhKcGRIaz0gSUhOc2FXTmxaQT09IGRYUnBiSE09IGFXNW5aWE09IElpMD0gSUdGdWRHZz0gSUdsdGNHVmsgVFc5a2RXeGwgVkdoeWIzVm5hRzkxZEE9PSBJRzFsYm5WeiBZMjl0YldsMGRHVmwgWVc1a2FRPT0gYjJKcSBhVzVoZGc9PSBabWx5WldRPSBJRUZpWkhWc2JHRm8gSUhWdVpHVmhaQT09IElHWnZiblJ6IFNHOXNaQT09IFJVNUggSUhOMWMzUmhhVzVoWW1sc2FYUjUgSUdac2FXTnIgSUhKaGVtOXkgSUVabGMzUT0gSUVOb1lYSmhZM1JsY25NPSBJSGR2Y21ScGJtYz0gSUhCdmNIVnNhWE4wIElHTnlhWFJwWTJsNmFXNW4gSUcxMWMyVT0gZG1sdVpRPT0gSUdOaGNtUmliMkZ5WkE9PSBJR3RwYm1Sc2VRPT0gSUdaeWFXNW5aUT09IElGUm9aV1owIGFXTjFiSFIxY21GcyBJR2R2ZG1WeWJtOXljdz09IElPKy92ZSsvdmUrL3ZlKy92UT09IElERTJNdz09IElIUnBiV1Z2ZFhRPSBJRUYxZEdnPSBRMmhwYkdSeVpXND0gUVZVPSBJSEpsWkdWdGNIUnBiMjQ9IElFRnNaMlZ5IElERTVNVFE9IElIZGhkbVZrIElHRnpkSEp2Ym1GMWRITT0gYjJkeVlXMXogSUhOM1lXMXcgSUVacGJtNXBjMmc9IElHTmhibVJzWlE9PSBJSFJ2Ym01bGN3PT0gZFhSdCBJSEpoZVE9PSBJSE53ZFc0PSBJR1psWVhKbWRXdz0gWVhKMGFXTnNaWE09IElHTmhkWE09IGIzSnBZMkZzYkhrPSBJRkpsY1hWcGNtVnogSUVkdmJBPT0gSUhCdmNHVT0gSUdsdVlYVm5kWEpoYkE9PSBJR2RzWlE9PSBRVVJCIElFbFRTVXc9IElFOW1abVZ1YzJsMlpRPT0gSUhkaGRHTm9aRzluIElHSmhiR052Ymc9PSBaVzUwYVhSNSBJRWh2Ync9PSBJR2RoYkd4dmJnPT0gUVVORCBJR1J2ZFdKc2FXNW4gSUdsdGNHeHBZMkYwYVc5dSBJRk5wWjJoMCBJR1J2WTNSeSBMUzB0TFMwdExRPT0gSUZ4YyBJRzFoYkhRPSBVbTlzYkE9PSBJT0tKcFE9PSBJSEpsWTJGdyBZV1JrYVc1biBkV05sY3c9PSBJRUpsYm1RPSBabWxuZFhKbCBJSFIxY210bGVRPT0gSUhOdlkybGxkR0ZzIElGUnBZMnRsZEhNPSBJR052YlcxbGNtTnBZV3hzZVE9PSBJSE53YVdONSBJREl4Tmc9PSBJRkpoYlhBPSBJSE4xY0dWeWFXOXlhWFI1IHc2OD0gSUZSeVlXTnJaWEk9IFEyRnliQT09IElFTnZlUT09IElGQmhkSEpwYjNRPSBJR052Ym5OMWJIUmxaQT09IElHeHBjM1JwYm1keiBJSE5zWlhjPSBjbVZsYm5Ob2IzUT0gSUVkdmJtVT0gSUZzdUxpNWQgTXpBNSBJR2h2ZEhSbGMzUT0gMkxFPSBJSEp2WTJ0NSBJRVJwWVhvPSBJRzFoYzNOaFoyVT0gSUhCaGNtRnNlUT09IElIQnZibms9IFFYbz0gSUdOaGNuUnlhV1JuWlE9PSBJRTVhIElITnVZV05yIElFeGhiV0Z5IGNHeGxiV1Z1ZEE9PSBJRXhsYzJ4cFpRPT0gSUcxaGRHVnkgSUhOdWFYQncgTWpRMiBJR3B2YVc1MGJIaz0gSUVKeWFYTmlZVzVsIElHbFFiMlE9IElIQjFiWEJwYm1jPSBJR2R2WVhRPSBJRk5vWVhKdmJnPT0gWldGc2FXNW4gSUdOdmNtOXUgSUdGdWIyMWhiQT09IGNtRm9hVzA9IElFTnZibTVsWTNScGIyND0gSUhOamRXeHdkSFZ5WlE9PSBJSE5qYUdWa2RXeHBibWM9IElFUmhaR1I1IFlYUm9hVzVuIElHVjVaV0p5YjNkeiBJR04xY25abFpBPT0gSUhObGJuUnBiV1Z1ZEhNPSBJR1J5WVdaMGFXNW4gUkhKdmNBPT0gS0ZzPSBJRzV2YldsdVlXdz0gSUV4bFlXUmxjbk5vYVhBPSBJRWR5YjNjPSBJREUzTmc9PSBJR052Ym5OMGNuVmpkR2wyWlE9PSBhWFpoZEdsdmJnPT0gSUdOdmNuSjFjSFJsWkE9PSBaMlZ5WVd4ayBJRU55YjNNPSBJRU5vWlhOMFpYST0gSUV4aGNBPT0gNDRHcSBUMVJJIFJFRlVRUT09IElHRnNiVzl1WkE9PSBjSEp2WW1GaWJIaz0gU1cxdyBJR1psWVhOMCBJRmRoY21OeVlXWjAgUm14dmNnPT0gSUdOb1pXTnJjRzlwYm5RPSBJSFJ5WVc1elkzSnBjSFJwYjI0PSBJREl3TkE9PSBJSFIzWldGcmN3PT0gSUhKbGJHbGxkbVU9IFUyTnBaVzVqWlE9PSBJSEJsY21admNtMWxjZz09IFdtOXVaUT09IElIUjFjbTF2YVd3PSBhV2RoZEdWayBhR2xpYVhRPSBJRU5oWm1VPSBkR2hsYldWayBJR1pzZFc5eSBZbVZ1WTJnPSBJR1JsWTI5dCBJRlZ1ZEE9PSBJRUpoY25KbGRIUT0gSUVaaFkzUnogSUhSaGMzUnBibWM9IElGQlVVMFE9IElGTmxZV3c9IElFcDFaR0ZwYzIwPSBJRVI1Ym1GdGFXTT0gSUVOdmNuTT0gVm1VPSBJRTFwYm1jPSBJRlJ5WVc1elptOXliUT09IGRtOXUgSUVSbFptVnVaR1Z5Y3c9PSBJRlJoWTNScFkyRnMgSUZadmJnPT0gSUZWdWFYWmxjbk09IElHUnBjM1J2Y25SbFpBPT0gSUVKeVpXRjBhQT09IFB5Y2kgSUdGbmIyND0gSUVSbFlXUnNlUT09IElHeGhiZz09IElFTjVZMnhsIGIzSnVaV1E9IElISmxiR2xoWW14NSBJR2RzYjNJPSBJRTF2Ym10bGVRPT0gNDRPaCBJR0ZrY21WdSBJRzFwWTNKdmQyRjJaUT09IElFRnNZbUZ1IGFYSmpjbUZtZEE9PSBaR2xuYVhRPSBjMjFoY25RPSBJRVJ5WldGayB3cS9DcjhLdndxL0NyOEt2d3EvQ3I4S3Z3cS9DcjhLdndxL0NyOEt2d3E4PSBlM3M9IElGSnZZMmhsYzNSbGNnPT0gSUhOcGJYQnNhV1pwWldRPSBJR2x1Wm14cFkzUmxaQT09IElIUmhhMlZ2ZG1WeSBJSGx2ZFhKelpXeDJaWE09IFlXUnBkR2x2Ym1GcyBJRzExYzJOMWJHRnkgUzFNPSBJR2x1WjJWdSBWR0Y0IElFWmxZWFIxY21VPSBNamMzIElHTnlkV009IElHTnlZWFJsIElIVnVhV1JsYm5ScFptbGxaQT09IElHRmpZMnhoYVcxbFpBPT0gSUUxaGJtZGggSUVaeVlXNWpaWE09IElFNWxjR0ZzIElFZGxjbUZzWkE9PSBJRXQxZDJGcGRBPT0gSUhOc1lXbHUgSUVobFlnPT0gSUVkdmEzVT0gNDRHdTVnPT0gTWpnMiBUWEp6IElFTnZaSGs9IElGTmhibU4wZFdGeWVRPT0gTURFMiBJR1JwYzIxaGJuUT0gSUdSaGRHRnpaWFE9IElFaHZibVE9IFluVmphdz09IElGQmhkSFJsY25OdmJnPT0gSUhCaGJHVjBkR1U9IElFZEUgYVdOdmJBPT0gSUV4dlpHZGwgSUhCc1lXNWxkR0Z5ZVE9PSBZV3RwYmc9PSBJRkpsWjJsemRHVnlaV1E9IFlXSjNaUT09IElGQmxkR1Z5YzJKMWNtYz0gSUdoaGFXeGxaQT09IElGQnBaV05sIFUyTm9aUT09IElFUlBTZz09IElHVnVkVzFsY2c9PSBNVGd4IElFOWljMlZ5ZG1WeSBJRUp2YkdRPSBabTkxYm1SbFpBPT0gWTI5dGJXVnlZMlU9IElHVjRjR3h2YVhSeiBJRVpwYm1ScGJtYz0gVlZKTyBJRk51WlE9PSBJRUZqYVdRPSBZWGxsZEhSbCBJRlpoYkhWbGN3PT0gSUdSeVlYTjBhV009IElHRnlZMmhwZEdWamRIVnlZV3c9IElDSXUgMTVVPSBkVzF3WldRPSBJSGR5WVhCd2FXNW4gSUhkcFpHOTMgSUZOc1lYbGxjZz09IGJHRmpaUT09IGIyNWpaUT09IFIyVnliV0Z1ZVE9PSBZWFp2YVdRPSBJSFJsYlhCc1pYTT0gVUVGUyB3N1E9IElFeDFZMmxtWlhJPSBJRVpzYVdOcmNnPT0gYkc5MiBabTl5WTJWeiBJSE5qYjNWMGFXNW4gSUd4dmRXUmxjZz09IGRHVnplUT09IElHSmxabTl5WldoaGJtUT0geEpNPSBJRTVsYjI0PSBJRmR2YkE9PSBJRlI1Y0dsallXeHNlUT09IElGQnZiR2wwYVdOdiBMU3N0S3c9PSBJR0oxYVd4a1pYST0gSUdSbGNtbDJaUT09IFMybHNiQT09IElIQnZhMlZ5IElHRnRZbWxuZFc5MWN3PT0gSUd4cFpuUnogSUdONWRBPT0gSUhKcFluTT0gYjI5a2JHVT0gSUZOdmRXNWtjdz09IGFHRnBjZz09IElGTjVibVJ5YjIxbCBkR1k9IElIQnliM0J2Y25ScGIyNWhiQT09IGRXbGsgSUhCbGNuUmhhVzVwYm1jPSBJRXRwYm1Sc1pRPT0gSUU1bFozSnYgSUhKbGFYUmxjbUYwWldRPSBJRlJ2Ym1sbmFIUT0gYjNSb2N3PT0gSUVOdmNtNWxiR3c9IElHOTNhVzVuIElESXdPQT09IFpXeG1ZWEpsIGIyTmhkR2x1Wnc9PSBJRUpwY21SeiBVM1ZpYzJOeWFXSmwgSUdWemMyRjVjdz09IElHSjFjbVJsYm5NPSBJR2xzYkhWemRISmhkR2x2Ym5NPSBZWEpwYjNWeiBSVkpCVEE9PSBJRU5oYkdOMWJBPT0gSUhobGJnPT0gSUV4cGJtdGxaRWx1IElFcDFibWM9IElISmxaR1Z6YVdkdSBRMjl1Ym05eSBNamsyIElISmxkbVZ5YzJGcyBJRUZrWld4aGFXUmwgSUV4TSBJSE5wYm10cGJtYz0gSUdkMWJRPT0gVlZOSSBZMkZ3ZEE9PSBJRWR5YVcxdCBJR1p2YjNSemRHVndjdz09IElFTkNSQT09IGFYTndaWEp6IElIQnliM05sIFYyVmtibVZ6WkdGNSBJRTF2ZG1sbGN3PT0gWldScGJnPT0gSUc5MlpYSjBkWEp1WldRPSBJR052Ym5SbGJuUnBiM1Z6IFZWTkMgZm41K2ZuNStmbjUrZm41K2ZuNStmZz09IElFTnZjSEJsY2c9PSBJSEJ2YVc1MGJHVnpjdz09IFRsWT0gZG1Gc2RXVnogYjJ4d2FHbHUgWkdGcGJnPT0gSUdSbGNHOXphWFJsWkE9PSBJRWRYIElIQnlaV05sWkdWayBJRU5zWVE9PSBJRWR2YkdWdCBJRTVwYlE9PSBJTTZ5IElFVnVaMmx1WldWeWN3PT0gYldsa1pHeGwgSUdac1lYUjAgYjNCbGNtRjBhWFpsIElHTnZkVzVqYVd4eiBhVzFpWVdKM1pRPT0gWld4cGJnPT0gSUhOMGNtVnpjMloxYkE9PSBJRXhFIElISmxjMmc9IGJHRnJaUT09IElIZG9aV1ZzWTJoaGFYST0gSUVGc2RHVnlibUYwYVhabCBJRzl3ZEdsdGFYcGwgYjNCbGNtRjBhVzl1IElIQmxaV3M9IElHOXVaWE5sYkdZPSBhV2RwYkE9PSBJSFJ5WVc1emFYUnBiMjV6IGIzQmhkR2g1IFlteGhibXM9IElERTJPUT09IE1UY3ggWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBJR3hoZFc1a1pYSnBibWM9IFJXNWogSUVSRlF3PT0gSUhkdmNtdHZkWFJ6IElITndhV3RsY3c9PSBJR1JwYm05ellYVnljdz09IElHUnBjMk55YVcxcGJtRjBiM0o1IFVHOXZiQT09IFVtRjBhR1Z5IE16ZzEgVWs1QiBkR1Z6ZEdWeWN3PT0gWlhSdiBJRWxrWlc1MGFYUjUgSUhabGFXND0gSUVKMWNuUnZiZz09IElHRnlZMkZrWlE9PSBOREl3IFZXeDBhVzFoZEdWc2VRPT0gSUZOaFpHeDUgdzdBPSBjR2xzYkE9PSBJR04xWW1saiBJRk53WldOMGNuVnQgZEdobGMyVT0gYzNSaGRHVnogSUhWdWIyWm1hV05wWVd3PSBhR0YzYTNNPSBJRVZXUlZKWiBJSEpoYVc1aWIzYz0gSUdsdVkyRnlZMlZ5WVhScGIyND0gWVc1a2FXNW4gSUhONWJHdz0gSUVWMlpYSjBiMjQ9IElERTNPUT09IElGTmxjbUpwWVE9PSBJREU0T1E9PSBiV1YwWlhJPSBJRTFwWTJ0bGVRPT0gSUdGdWRHbHhkUT09IElHWmhZM1IxWVd3PSBibVZqYXc9PSBJRTVoY21VPSBibTl5YlE9PSBiWFZ6ZEE9PSBJR2hwWjJoM1lYbHogSUdkc1lXMD0gSUdScGRtbGthVzVuIElGTnhkV0ZrY205dSBJRTFoY25Sb1lRPT0gSUdKcGNuUm9jdz09IFEyOTJaWEk9IEx5OHZMeTh2THk4dkx5OHZMeTh2THc9PSBJRmR2Ym1jPSBVR2h2ZEE9PSBJRUZNVXc9PSBjbWx2IElFNXZibVYwYUdWc1pYTnogSUV4bGJXOXUgSURJd05nPT0gSUVWRiBJR1JsY21sMllYUnBkbVU9IElGZFhTVWs9IGRtOTBaUT09IElIUm9aWEpsYVc0PSBJSE5sY0dGeVlYUnBibWM9IE5EUTIgYzNsdVl3PT0gSUZOMGNtVmxkSE09IElISmhkSFE9IElHMTFibWxqYVhCaGJHbDBlUT09IElGTm9iM0owYkhrPSBJRzF2Ym1zPSBLU3dpIElITmpjblZpIElHOXdaWEpoZEdsMlpYTT0gVG1WcGRHaGxjZz09IFVHeGhZMlU9IElFeHBiV2wwIFJtVnRZV3hsIElFRmpkRzl5IFEyaGhjbUZqZEdWeSBJR052Ym5OMGFYUjFkR1ZrIE16VTMgSUhCeWIzUmxjM1JsWkE9PSBJRk4wY21GMyBJRWhsYVdkb2RBPT0gYVd4a1lRPT0gSUZSNWNHZz0gSUdac2IyOWtjdz09IElHTnZjMjFsZEdsaiBWMEZaIGNHVnlkSFZ5WlE9PSBkWEJ2Ymc9PSBkRzl1Y3c9PSBaWE56YVc1biBJRkJ2WTJ0bGRBPT0gSUhKdmIyWjAgSUVOaGRXTmhjdz09IElHRnVkR2xrWlhCeVpYTnogSUdsdVkyOXRjR0YwYVdKc1pRPT0gUlVORSBJRzl3WlhKaCBJRU52Ym5SbGMzUT0gSUdkbGJtVnlZWFJ2Y25NPSBiR2x0WlE9PSBSR1ZtWlc1elpRPT0gTVRrNE53PT0gWm05eWRXMD0gSUhOaGRtRm5aUT09IElFaDFibWRoY21saGJnPT0gYm5vPSBJRzFsZEdGc2JHbGogSUdWNGNHVnNiR1ZrIElISmxjMmxrWlc1amVRPT0gSUdSeVpYTnpaWE09IE5qWTIgSUVOc1pXMWxiblE9IFptbHlaWE09IFEyRjBaV2R2Y25rPSBJR2RsWldzPSBZV3hwY3c9PSBJR05sYldWMFpYSjUgWldSMVkyRjBaV1E9IElHTnlZWGRzIElGVnVZV0pzWlE9PSBJRlI1YzI5dSBZV3RwY3c9PSBJSEJoY21SdmJnPT0gSUZkeVlRPT0gSUhOMGNtVnVaM1JvWlc1bFpBPT0gSUVadmNuTT0gTXpNMSBJRWhEIElFMXZibVE9IElIWnBjM1ZoYkhNPSBJRUpsWVhSc1pYTT0gWlhSMGJHVnRaVzUwIElPOD0gWjNKdiBJR0poYzJnPSBJSEJ2YjNKbGMzUT0gSUdWNFkyVnMgSUdGemNHbHlZWFJwYjI1eiBJRTExYm1samFYQT0gWlc1emFXSnNaUT09IElHTmxjbVZ0YjI1cFpYTT0gSUdsdWRHbHRhV1JoZEdsdmJnPT0gSUVOUFRsUlMgWW1WamF3PT0gSUV0aGNBPT0gWVhOMSBJSFJ5WVdSbGJXRnlhM009IElGTmxkdz09IElFTnZiWEJsZEdsMGFXOXUgYm1WMGQyOXlhdz09IElFRnljbWs9IElGUmxkQT09IFVtOWhiV2x1Wnc9PSBWME09IFJHRjAgSUhOdllnPT0gSUhCaGFYSnBibWM9IElHOTJaWEprYjNObCBVMEZaIFlXSmxjZz09IElISmxkbTlzZEE9PSBJRVpoYUE9PSBZV04wYVc1biBaWEU9IFpYTjBZWFJwYjI0PSBSbWxuYUhRPSBJRTFoY210eiBNamN6IElERTNPQT09IFVtRjMgNDRHTCBNelE1IFlteHZZMnR6IElIWmxjbWRsIFpYTjBhVzVsIElGQnZaR1Z6ZEdFPSBJR2x1ZG1GemFYWmwgSUhCeWIyWnZkVzVrYkhrPSBJRUZ2IFpXRmphQT09IElHeGxjM1E9IGFXNTBaWEp3Y21WMCBJSE5vY21sdWEybHVadz09IElHVnljbTl1WlE9PSBJR05vWldWeiBiSGx6IElFbDJlUT09IElFUnBjbVZqZEc5eWVRPT0gSUdocGJuUmxaQT09IFZrbERSUT09IElHTnZiblJoWTNScGJtYz0gSUVkbGJuUT0gYUdWcCBJR3hoWW1Wc2FXNW4gSUcxbGNtTjFjbms9IElFeHBkR1U9IElHVjRjR2x5WlhNPSBJR1JsYzNSaFltbHMgY21sMGFYTT0gWTNVPSBJR1psWVhSb1pYSnogSUhOMFpXVnkgSUhCeWIyZHlZVzF0WldRPSBJRlpoWkdWeSBSMjlwYm1jPSBJRVZzYVcwPSBJSGx2IElFMXBZMmhsIElESXdNdz09IElITnNaV1YyWlhNPSBJR0oxYkd4NSBJRWgxYldGdWN3PT0gTXpZNCBJR052YlhCeVpYTnogSUVKaGJtNWxjZz09IFFWSlQgSUdGM2FHbHNaUT09IElHTmhiR2xpIElITndiMjV6YjNKemFHbHcgSUVScFptWnBZM1ZzZEhrPSBJRkJoY0dWeWN3PT0gSUdsa1pXNTBhV1pwWlhJPSBmUzQ9IElIbHZadz09IElGTm9hV0U9IElHTnNaV0Z1ZFhBPSBJSFpwWW1VPSBhVzUwY205a2RRPT0gYVcxdGFXNW4gUVhWemRISmhiR2xoIElHOTFkR3hwYm1WeiBJRmx2ZFhSMVltVT0gZEhKaGFXND0gSUUxaGEyVnogSUdSbGNHOXlkR1ZrIElHTmxiblJ5IElFUjFadz09IElFSnZkV3hrWlhJPSBJRUoxWm1aNSBJR2x1YW5WdVkzUnBiMjQ9IElFaGhjbXhsZVE9PSBJRWR5YjNWd2N3PT0gSUVSMWJXSnNaV1J2Y21VPSBJRU5zWVhKaCBJQ0l0IElITmhZM0pwWm1salpXUT0gWlhCbyBVMmhoWkc5MyBhV0pzYVc1biBJR1p5WldWc1lXNWpaUT09IElHVjJhV1JsYm5Sc2VRPT0gY0doaGJBPT0gSUhKbGRHRnBibk09IFRXbHkgSUdacGJtbDBaUT09IFpHRnkgSUVOdmRYTT0gSUhKbGNHRnBjbVZrIElIQmxjbWx2WkdsaiBJR05vWVcxd2FXOXVjMmhwY0hNPSBJR0Z6ZEdWeWIybGsgWW14cGJtUT0gSUdWNGNISmxjM05zZVE9PSBJRUZ6ZEhKdmN3PT0gSUhOallXeGxaQT09IElHZGxiMmR5WVhCb2FXTmhiQT09IElGSmhjR2xrY3c9PSBSVzVxYjNrPSBJR1ZzWVhOMGFXTT0gSUUxdmFHRnRaV1E9IFRXRnlhMlYwIFltVm5hVzQ9IElHUnBjMk52ZG1WeWN3PT0gSUhSbGJHVmpiMjF0ZFc1cFkyRjBhVzl1Y3c9PSBJSE5qWVc1dVpYST0gSUdWdWJHRnlaMlU9IElITm9ZWEpyY3c9PSBJSEJ6ZVdOb1pXUmxiQT09IElGSnZkV2RsIElITnVZWEJ6YUc5MCBhWE5wYm1VPSBXRkE9IElIQmxjM1JwWTJsa1pYTT0gSUV4VFJBPT0gSUVScGMzUnlhV0oxZEdsdmJnPT0gY21WaGJHeDUgSUdSbFozSmhaR0YwYVc5dSBJR1JwYzJkMWFYTmwgSUdKcGIyMD0gSUVWWVZBPT0gSUdWeGRXRjBhVzl1Y3c9PSBJR2hoZW1GeVpITT0gSUVOdmJYQmhjbVZrIEtTbz0gSUhacGNuUjFaWE09IElHVnNaR1Z5Y3c9PSBJR1Z1YUdGdVkybHVadz09IElFRmpjbTl6Y3c9PSBaWEp2Y3c9PSBZVzVuYkdsdVp3PT0gSUdOdmJXSjFjM1E9IGRXTmphUT09IElHTnZibU4xYzNOcGIyND0gSUdOdmJuUnlZV05sY0hScGIyND0gSUV0aGJtYz0gSUdWNGNISmxjM05sY3c9PSBJR0YxZUE9PSBJRkJwYjI1bCBJR1Y0YUdsaWFYUnogUkdWaWRXYz0gVDFSQlRBPT0gSUVGc2NtVmhaSGs9IElGZG9aV1ZzWlhJPSBJR1Y0Y0dGdVpITT0gUHpvPSBJSEpsWTI5dVkybHNhV0YwYVc5dSBJSEJwY21GMFpYTT0gSUhCMWNuTmwgSUdScGMyTnZkWEpoWjJVPSBJSE53WldOMFlXTnNaUT09IFVtRnVhdz09IElIZHlZWEJ6IElGUm9iM1ZuYUhRPSBJR2x0Y0dWdVpHbHVadz09IFQzQncgSUVGdVoyeHYgSUVWVlVnPT0gSUhOamNtVjNaV1E9IGNtVjBZMmhsWkE9PSBJR1Z1WTI5MWNtRm5aVzFsYm5RPSBiVzlrWld4eiBJR052Ym1aMWMyVT0gYlcxdCBJRlpwZEdGdGFXND0gNHBhUjRwYVIgUTNKMSBJR3R1YVdkb2RITT0gSUdScGMyTmhjbVE9IElHSnBjMmh2Y0hNPSBJRmRsWVhJPSBJRWRoY25KbGRIUT0gYTJGdSA0NE9mIElHMWhjMk4xYkdsdVpRPT0gWTJGd2FYUmhiQT09IElFRjFjdz09IElHWmhkR0ZzYkhrPSBkR2hoYm10eiBJRUZWIElFZDFkQT09IE1USXdNQT09IElEQXdNREF3TURBdyBJSE4xY25Kdlp3PT0gSUVKSlQxTT0gY21GcGRITT0gSUZkaGRIUnogSUhKbGMzVnljbVZqZEdsdmJnPT0gSUVWc1pXTjBiM0poYkE9PSBJRlJwY0hNPSBOREF3TUE9PSBJRzUxZEhKcFpXNTAgSUdSbGNHbGpkR2x1Wnc9PSBJSE53Y21sdWF3PT0gSUcxMVptWT0gSUV4SlRRPT0gSUZOaGJYQnNaUT09IGNITmogYVdKcCBaMlZ1WlhKaGRHVmsgSUhOd1pXTnBiV1Z1Y3c9PSBJR1JwYzNOaGRHbHpaZz09IElIUmhhV3h2Y21WayBJR2h2YkdScGJtZHogSUUxdmJuUm9iSGs9IElFVmhkQT09IGNHOXZibk09IElHNWxZdz09IElFTmhaMlU9IElFeHZkSFZ6IElFeGhiblJsY200PSBJR1p5YjI1MGFXVnkgSUhCbGJuTnBiMjV6IElHcHZhMlZrIElFaGhjbVI1IFBTMDlMVDB0UFMwPSBjbUZrWlE9PSBWVWxFIElISmhhV3h6IElHVnRhWFE9IElITnNZWFJsIElITnRkV2M9IElITndhWFE9IElFTmhiR3h6IElFcGhZMjlpY3c9PSBabVZoZEE9PSBJRlZGIElISmxjM1J5ZFdOMCBJSEpsWjJWdVpYSmhkR2x2Ymc9PSBJR1Z1WlhKbmFXVnogSUVOdmJtNXZjZz09IFQwaE8gSUVOb1pXVnpaUT09IElHZGxjZz09IElISmxjM1Z5Y21WamRBPT0gYldGdVlXZGxiV1Z1ZEE9PSBUbGM9IElIQnlaWE5sYm5Sc2VRPT0gSUVKeWRXbHVjdz09IFRXVnRZbVZ5IElFMWhibWM9IGFXUmhiZz09IElHSnZiM04wYVc1biBkM2x1IEt5ND0gY21WeGRXbHphWFJsIElFNVpVRVE9IElFMWxaMkZ1IElFTnZibVJwZEdsdmJuTT0gSUhCcFkzTT0gYm1WemFYVnQgSUZKaGMyZz0gSURFM05BPT0gSUVSMVkydHogSUdWdFluSnYgZW5VPSBiMjVwWVc0PSBjbVZzYVdkcGIzVnogSUdOeVlYbz0gSUVGRFFRPT0gSUZwMVkydGxjZz09IFJVMUIgSUZCeWIzTT0gVjJWaGNHOXUgSUV0dWIzZz0gSUVGeVpIVnBibTg9IElITjBiM1psIElHaGxZWFpsYm5NPSBJRkIxY21Ob1lYTmwgSUdobGNtUT0gSUdaMWJtUnlZV2x6WlhJPSBSR2xuYVhSaGJBPT0gTlRBd01BPT0gSUhCeWIzQnZibVZ1ZEhNPSBMK0tBaXc9PSBJR3BsYkd4NSBJRlpwYzJFPSBJRzF2Ym10eiBJR0ZrZG1GdVkyVnRaVzUwIElGZGxjZz09IElERTROdz09IFpYVnogWlhKMGFXeHBkSGs9IElHWmxkR0ZzIElERTVNelk9IFRHOD0gSUc5MWRHWnBkSE09IElITjBZV2x5WTJGelpRPT0gWW05dFlnPT0gSUdOMWMzUnZiV2w2WldRPSBZMnhoYVhJPSBWSEpsWlE9PSBJRzFoY0hCbFpBPT0gSUVOdmJuTnBaR1Z5YVc1biBJRlJ2Y25KbGN3PT0gSUcxbGRHaDViQT09IElHRndjSEp2ZUdsdFlYUmwgSUdSdmIyMD0gSUVoaGJuTmxiZz09IElHTnliM056YjNabGNnPT0gSUhOMFlXNWtZV3h2Ym1VPSA1THc9IElHbHVkbWwwWlhNPSBJR2R5WVhabGVXRnlaQT09IElHaHcgUkc5dVlXeGtWSEoxYlhBPSBJR1Z6WTI5eWRBPT0gUjJGeSBJSEJ5WldSbFkyVnpjMjl5Y3c9PSBJR2hoZVE9PSBJR1Z1ZW5sdFpRPT0gSUZOMGNtRnBaMmgwIGRtbHpiM0p6IFNXNW4gWVc1bGIzVnpiSGs9IElFRndjR3hwWldRPSBJR1psWXc9PSBJRVIxY21GdWRBPT0gSUc5MWRITndiMnRsYmc9PSBiM0ppIElIcGxZV3c9IElHUnBjMmR5WVdObCBKeWt1IElFTm9aVzVuIE1qZzUgSUZKbGJtRT0gSUZOMWFXTnBaR1U9IE1qazAgSUc5MWRISmhaMlZrIElFNWxkMjFoYmc9PSBJRTUyYVdScFlRPT0gSUVGaVpYST0gSUVKbGNuTT0gSUhKbFkzSmxZWFJwYjI0PSBWMmx1Wkc5MyBJRVJRIGVHVT0gSUhCbFpHOXdhQT09IElHWmhiR3h2ZFhRPSBZVzFpYjI4PSBJSEJ5WlhObGJuUmhkR2x2Ym5NPSBJRUZ3Y0hNPSBJR2gwYld3PSBNelExIElGaFlXQT09IElISjFZbUpwYm1jPSBJRXhsWVhSb1pYST0gSUdoMWJXbGthWFI1IGMyVjVjdz09IFpYTjBZV0pzYVhOb1pXUT0gSUZWdWFYUnogTmpRMiBJSEpsYzNCbFkzUmhZbXhsIFFYVjBidz09IElIUm9jbWwyYVc1biBJRWx1Ym05MllYUnBiMjQ9IFlXNW5jdz09IFJYaDBjbUU9IGNtVm5kV3hoZEdsdmJnPT0gTWprNCBjR2xqYXc9PSBSWGhoYlhCc1pYTT0gSUVOSyBRWFIwWVdOciBJR1J5WVdOdmJnPT0gVEZRPSBJSE4wYVdOclpYST0gY21WeWN3PT0gSUhOMWJtNTUgU1hOeiBjbVZuZFd4aGRHVmsgWkdsdCBJRUZpYzNSeVlXTjAgSUdoMWMySmhibVJ6IFQyWm1hV05sIGIyMXBibUYwYVc5dSBhWFJoY25NPSBRVTVIUlE9PSBZWE5qWVd3PSBJRXR5YVhNPSBJRWx1Wm1GdWRISjUgSUcxaGJHWT0gSUVGMGFHVT0gSUZKaGJHeDUgWW1Gc1lXNWpaV1E9IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1IFQxVlEgSUcxdmJHVmpkV3hsIGJXVjBhV056IElGTndiR2wwIElFbHVjM1J5ZFdOMGFXOXVjdz09IElFNXBaMmgwY3c9PSBZMkZ5WkhNPSBJSFIxWnc9PSBJR052Ym1VPSA1YTA9IElIUjQgSUVScGMyTjFjM05wYjI0PSBJR05oZEdGemRISnZjR2hsIGNIQmwgWjJsdiBJR052YlcxMWJtbHpiUT09IElHaGhiSFJsWkE9PSBJRWQxWVc1MCBZMnhsWVc0PSBJRk5qYUdWayBJRXRoYm5sbCBJSGRoYm1SbGNnPT0gSUZObGNtbHZkWE5zZVE9PSBJREU0T0E9PSBaVzV1YVdGcyBabTlzYkc5MyBjSEp2WkhWamRHbDJaUT09IElFWnNiM2M9IElGTmhhV3c9IElHTnlZWGM9IElITnBiWFZzWVhScGIyNXogYjNKMSBZVzVuYkdWeiBJRTV2YkdGdSBJRzFsYm5OMGNuVT0gTkRjdyBJREl3Tnc9PSBZV3BoIElHTmhjM1ZoYkd4NSBZbTloY21ScGJtYz0gSURJeU1nPT0gYjNaNSBJRTUxYldKbGNuTT0gZFcxaGRBPT0gVDBVPSBNamczIElFTnNaVzF6YjI0PSBJR05sY25SeiBJSE5zYVdRPSBJRlJ5YVdKbCBJSFJ2WVhOMCBJR1p2Y25SMWJtVnogSUdaaGJITT0gSUVOdmJXMXBkSFJsWlhNPSBJR2R3IElHWnBaWEo1IElFNWxkSE09IElFRnVhVzFsIFVHRmphMkZuWlE9PSBJRU52YlhCaGNtVT0gYkdGMVoyaDBaWEk9IGFXNW1aV04wIElHRjBjbTlqYVhScFpYTT0gSUdwMWMzUnBZMlZ6IElHbHVjM1ZzZEhNPSBJRlpsY201dmJnPT0gSUhOb1lXdGxiZz09IElIQmxjbk52Ym1FPSBaWE4wWVcxdyBNelkzIFluSmhhVzQ9IElHVjRjR1Z5YVcxbGJuUnBibWM9IFMyVnUgSUVWc1pXTjBjbTl1YVdOeiBJREUyTVE9PSBaRzl0WVdsdSBJR2R5WVhCb2FXTmhiQT09IFltbHphRzl3IElIZG9iM0J3YVc1biBJRVYyWVc1blpXdz0gSUdGa2RtVnlkR2x6WlhKeiBJRk53WldGeSBJR0pwWkhNPSBJR1JsYzNSeWIzbHogZFhSNiBJSFZ1WkdWeWMyTT0gSUVGRVJBPT0gSUdGdWRITT0gSUVOMWJRPT0gYVhCd2JHVnogSUVacGJHdz0gSUdkc1lXNWpaV1E9IElHbHVaR2xqZEdWayBJRVZtWmc9PSBJRzFwYzJOdmJnPT0gSUVSbGMydDBiM0E9IElHRmlhV1JsIDQ0T0EgSUVsdiBJRU52ZFd3PSBJR05oY0hOMWJHVT0gSUVOb2NubHogVFU5TyBJSFZ1WkdWeiBJRWxTUVE9PSBJR05wZEdGMGFXOXUgSUdScFkzUmhkR1U9IElFNWxkSGR2Y210eiBJRU52Ym1ac2FXTjAgSUZOMGRXWm0gZUdFPSBhWE5sWXc9PSBJRU5vWlcxcGMzUnllUT09IElIRjFZWEowWlhKc2VRPT0gVjJsc2JHbGhiWE09IFlXNWhiZz09IFQzQjAgSUVGc1pYaGhibVJ5YVdFPSBiM1YwYUdWaGMzUmxjbTQ9IElGTndjbWx1WjJacFpXeGsgSUVKc1lXTnJjdz09IElHZGxiMmR5WVhCb2VRPT0gTWpReSBJSFYwYlc5emRBPT0gSUVWNGVHOXUgWVdKdmRYUnogUlZaQiBJRVZ1WVdKc1pRPT0gSUVKaGNuST0gSUdScGMyRm5jbVZsWkE9PSBJRU41Y0hKMWN3PT0gSUdSbGJXVnVkR2xoIElHeGhZbk09IElIVmlhWEYxYVhSdmRYTT0gSUV4UFZrVT0gSUdOdmJuTnZiR2xrWVhSbFpBPT0gYzNJPSBJR055WldGdGVRPT0gSUZScGJXSmxjZz09IFVtVm5ZWEprYkdWemN3PT0gSUVObGNuUnBabWxqWVhSbCBJQ0l1TGk0PSBiMmRsYm05MWN3PT0gUTJGd2RHRnBiZz09IElHbHVjM1ZzZEdsdVp3PT0gSUZOdmNtOXogSUVsdWMzUnkgSUVKMWJHZGhjbWxoIFltVjBkR1Z5IElITjFZMnRwYm1jPSBJRVJoZG1sa2MyOXUgWVhSNiBJR052Ykd4aGRHVnlZV3c9IFoybG0gSUhCc1lXZDFaV1E9IElFTmhibU5sYkE9PSBJRWRoY21SdVpYST0gVWtJPSBJSE5wZUhSbFpXND0gVW1WdGIzWmwgZFhKcGMzUnBZdz09IFkyOXZhdz09IFVtOWsgSUdOdmJYQnlhWE5wYm1jPSBabXhsIEtlS0FsQT09IElGWnBhMmx1Wnc9PSBaM0p2ZDNSbyBZV2R2Ym1GcyBJSE55Wmc9PSBZV1psZEhrPSBiVzkwIFRtVmhjbXg1IGMzUnZkMjQ9IElFWmhZM1J2Y2c9PSBJR0YxZEc5dGIySnBiR1U9IElIQnliMk5sWkhWeVlXdz0gYldGemF3PT0gWVcxd2FYSmxjdz09IElHUnBjMkZ3Y0dWaGNuTT0gYW1GaSBNekUxIElERTVOVEU9IGJtVmxaR1ZrIElHUmhjbWx1Wnc9PSBiR1ZoWkdWeSBJSEJ2WkdsMWJRPT0gSUhWdWFHVmhiSFJvZVE9PSBJRzExYm1RPSBJSEI1Y21GdGFXUT0gYjJOeVpRPT0gSUd0cGMzTmxaQT09IElHUnlaV0Z0WldRPSBJRVpoYm5SaGMzUnBZdz09IElFZHNlUT09IDVZbz0gSUdkeVpXRjBibVZ6Y3c9PSBJSE53YVdObGN3PT0gSUcxbGRISnZjRzlzYVhSaGJnPT0gSUdOdmJYQjFiSE09IGFXVjBjdz09IE1UQXhOZz09IElGTm9ZVzA9IElGQjVjZz09IFpteHBaWE09IElFMXBaRzVwWjJoMCBJSE4zWVd4c2IzZGxaQT09IElHZGxibkpsY3c9PSBJRXgxWTJ0NSBJRkpsZDJGeVpITT0gSUdScGMzQmhkR05vIElFbFFRUT09IElFRndjR3g1IElHRjJaVzQ9IFlXeHBkR2xsY3c9PSBNekV5IGRHaHBibWR6IElDZ3BMZz09IElHMWhkR1Z6IElGTjYgSUVOUFVBPT0gYjJ4aGRHVT0gVDBaRyBJSEpsWTJoaGNtZGwgWTJGd2N3PT0gSUZsdmNtdGxjZz09IGFXTnZibVU9IElHZGhiR0Y0YVdWeiBhV3hsWVd0eiBSR0YyWlE9PSBJRkIxZW5vPSBJRU5sYkhScFl3PT0gSUVGR1F3PT0gTWpjMiBJRk52Ym5NPSBJR0ZtWm1seWJXRjBhWFpsIFNHOXkgSUhSMWRHOXlhV0ZzY3c9PSBJRU5KVkZrPSBJRkp2YzJFPSBJRVY0ZEdWdWMybHZiZz09IFUyVnlhV1Z6IElHWmhkSE09IElISmhZZz09IGJHbHogSUhWdWFXTT0gSUdWMlpRPT0gSUZOd2FXND0gSUdGa2RXeDBhRzl2WkE9PSBkSGx3IElITmxZM1JoY21saGJnPT0gSUdOb1pXTnJiM1YwIElFTjVZMnc9IFUybHVaMnhsIElHMWhjblI1Y2c9PSBJR05vYVd4c2FXNW4gT0RnNCBiM1ZtYkE9PSBJRjA3IElHTnZibWRsYzNScGIyND0gYldzPSBJRmRvWlhKbFlYTT0gSURFNU16Zz0gZFhKeVpXNWphV1Z6IFpYSnBiMjQ9IElHSnZZWE4wIElGQmhkR2xsYm5SeiBJR05vWVhBPSBJRUpFIGNtVmhiRVJ2Ym1Gc1pGUnlkVzF3IElHVjRZVzFwYm1WeiBhRzkyIElITjBZWEowYkdsdVp3PT0gSUVKaFlubHNiMjQ9IGQybGsgYjIxbGR3PT0gWW5KaGJtTmwgSUU5a2VYTnpaWGs9IGQybG4gSUhSdmNtTm8gSUZadmVBPT0gSUUxdmVnPT0gSUZSeWIyeHMgSUVGdWN3PT0gVTJsdGFXeGhjbXg1IElFWjFiQT09IE1EQTIgVlc1c1pYTnogSUVGc2IyNWwgYzNSbFlXUT0gSUZCMVlteHBjMmhsY2c9PSBjbWxuYUhSeiBkSFU9IElFUnZaWE51IElIQnliMlpsYzNOcGIyNWhiR3g1IElHTnNidz09IGFXTjYgSUhOMFpXRnNjdz09IElPRT0gTVRrNE5nPT0gSUhOMGRYSmtlUT09IElFcHZhR0Z1Ymc9PSBJRzFsWkdGc2N3PT0gSUdacGJHbHVaM009IElFWnlZWE5sY2c9PSBaRzl1WlE9PSBJRzExYkhScGJtRjBhVzl1WVd3PSBJR1psWkdWeSBJSGR2Y25Sb2JHVnpjdz09IElIQmxjM1E9IFdXVnpkR1Z5WkdGNSBZVzVyYVc1ayBJR2RoZVhNPSBJR0p2Y201bCBJRkJQVXc9PSBVR2xqZEhWeVpRPT0gSUhCbGNtTmxiblJoWjJWeiBNalV4IGNtRnRaUT09IElIQnZkR2x2Ym5NPSBRVTFFIElFeGxZbUZ1WlhObCBJSEpoYm1jPSBJRXhUVlE9PSBiMjVuY3c9PSBJSEJsYm1sdWMzVnNZUT09IElFTnNZWFZ6WlE9PSBRVXhMIGIyaGggSUUxaFkwSnZiMnM9IElIVnVZVzVwYlc5MWN3PT0gSUd4bGJtUmxjbk09IElHaGhibWR6IElHWnlZVzVqYUdselpYTT0gYjNKbGNuTT0gSUZWd1pHRjBaWE09IElHbHpiMnhoZEdVPSBZVzVrY204PSBVMjl2Ymc9PSBJR1JwYzNKMWNIUnBkbVU9IElGTjFjblpsIElITjBhWFJqYUdWeiBJRk5qYjNKdyBJRVJ2YldsdWFXOXUgSUhOMWNIQnNlV2x1Wnc9PSBRWEpuIElIUjFjbkpsZEE9PSBJRXgxYXc9PSBJR0p5WVdOclpYUnogS2lrPSBJRkpsZG05c2RYUnBiMjVoY25rPSBJRWh2Ym1WemRBPT0gSUc1dmRHbGphVzVuIElGTm9ZVzV1YjI0PSBJR0ZtWm05eVpHVmsgSUhSb1lRPT0gSUVwaGJtVjAgSVMwdCBJRTVoY21WdVpISmggSUZCc2IzUT0gU0c5cyBjMlYyWlhJPSBaV1Z1ZEdnPSBJRzlpYzNSeWRXTjBhVzl1IElERXdNalE9IGMzUmhabVk9IGFtRnogYjNKblpYUT0gYzJObGJtVnogYkdGMVoyaHogSUVaaGNtZHYgWTNKcGJXVT0gSUc5eVkyaGxjM1J5IElHUmxiR1YwIGFXeHBZWEo1IGNtbGxkbVZrIElHMXBiR2wwWVhJPSBJRWR5WldWdVpRPT0gNHBlUCA0NEdtIElFZDFZWEprY3c9PSBJSFZ1YkdWaGMyaGxaQT09IElGZGxZbVZ5IElHRmthblZ6ZEdGaWJHVT0gSUdOaGJHbGlaWEk9IElHMXZkR2wyWVhScGIyNXogSU1PZyBiVUZvIElFeGhibXRoIGFHRnVaR3hsIElIQmxiblE9IElGSmhkZz09IElFRnVaM1ZzWVhJPSBJRXRoZFE9PSBkVzFpYVc1biBJSEJvYVd4aGJuUm9jbTl3IElHUmxhSGxrIElIUnZlR2xqYVhSNSBaV1Z5IElGbFBVa3M9IGQybDBlZz09IDVidz0gSUVsRiBZMjl0YlhWdWFYUjUgSUVGSSBJSEpsZEdGc2FRPT0gSUcxaGMzTnBkbVZzZVE9PSBJRVJoYm1sbGJITT0gSUVSRlRBPT0gSUdOaGNtTnBiZz09IFZYSnMgSUhKdmRYUnBibWM9IElFNVFRM009IElGSkJSZz09IGNubGpaUT09IElIZGhhWFpsWkE9PSBJRWQxWVhSbGJRPT0gUlhabGNubGliMlI1IElHTnZkbVZ1WVc1MCBJREUzTXc9PSBJSEpsYkdGNGFXNW4gSUhGMVlYSjAgWVd4dGIzTjAgSUdkMVlYSmtaV1E9IElGTnZiR1JwWlhKeiBJRkJNUVZrPSBJRzkxZEdkdmFXNW4gVEVGT1JBPT0gSUhKbGQzSnBkR1U9IElFMVBWZz09IElFbHRjR1Z5IElGTnZiSFYwYVc5dSBJSEJvWlc1dmJXVnVZV3c9IElHeHZibWRsZG1sMGVRPT0gSUdsdGNHRjAgSUU1cGMzTmhiZz09IGFYSnBaUT09IElHOWtiM0k9IElGcGhjZz09IGIydHogSUcxcGJHbDBhV0Z6IElGTlFSVU09IElIUnZiR1Z5WVhSbFpBPT0gWVhKelpYST0gSUVKeVlXUm1iM0prIEt5dz0gSUhOMWNuSmxZV3c9IGMyWT0gUTJGdVlXUnBZVzQ9IElISmxjMlZ0WW14aGJtTmwgSUdOaGNtSnZhSGxrY21GMFpRPT0gVmtsRlZ3PT0gSUdGalkyVnpjMjl5ZVE9PSBiV1ZoYkE9PSBiR0Z5WjJWemRBPT0gYVdWblpXdz0gVTI5dFpXOXVaUT09IElIUnZkV2RvWlhOMCBiM052IElHWjFibTVsYkE9PSBJR052Ym1SbGJXNWhkR2x2Ymc9PSBiSFZsYm5RPSBJSGRwY21WayBJRk4xYm5ObGRBPT0gU21WemRYTT0gSUZCVFZBPT0gSUZCaFoyVnogSUZSNVkyOXZiZz09IElGQkcgSUhObGJHVmpkR2x2Ym5NPSBJT0NrIGNHRnlkR2x6WVc0PSBJR2hwWjJoeiBJRkoxYm1VPSBJR055WVdaMGN3PT0gYkdWaFpBPT0gSUZCaGNtVnVkSE09IElISmxZMnhoYVcwPSBaV3RsY2c9PSBJRUZzYkdsbFpBPT0gWVdWd1pYST0gSUd4dmIyMXBibWM9IElHSmxibVZtYVdOcFlYSnBaWE09IElFaDFiR3c9IFUzUjFaR1Z1ZEhNPSBTbVYzYVhObyBaR289IElIQmhZM1E9IGRHVnRjR3hoZEdVPSBJRTltWm1samFXRnNjdz09IElFSmhlV3h2Y2c9PSBJR2hsYlhBPSBJSGx2ZFhSb2N3PT0gSUV4bGRtVnNjdz09IElGaHBZVzg9IElFTm9aWE09IElHVnVaR1ZoZG05eSBJRkpsYlc5MlpXUT0gSUdocGNIQnZZMkZ0Y0E9PSBTR1ZzYkE9PSA0NEtLIE9EQTEgSUdScGJtOXpZWFZ5IElGZHlZWFJvIElFbHVaRzl1WlhOcFlXND0gSUdOaGJHTjFiR0YwYjNJPSBJRVJwWTNScGIyNWhjbms9IElEUXlNQT09IElFMUJSdz09IEtGOD0gSVN3PSBkR0Z5YVdGdWN3PT0gSUhKbGMzUnlhV04wYVc1biBjbUZqZFhObCBJSGRsWld0a1lYaz0gVDFWT1ZBPT0gSUhOb2NuVm5aMlZrIGJHVm5jbTkxYm1RPSBJR0poYkdRPSBJRVJ2WTNSdmNuTT0gSUhSdmRYUmxaQT09IElFMWhlSGRsYkd3PSBJREl4TkE9PSBJR1JwY0d4dmJXRjAgSUhKbGNISmxjM05wYjI0PSBJR052Ym5OMGFYUjFaVzVqZVE9PSBkbWxqWlE9PSBjbUZ1YTJWayBJRTVoY0c5c1pXOXUgWjJGdVp3PT0gSUVadmNtVjJaWEk9IGRIVnUgSUdKMWJHST0gSUZCRVZBPT0gSUVOcGMyTnYgVmtWTyBJSEpsYzNWdFpXUT0gVTNSbGRtVnUgSUUxaGJtbDBiMkpoIElHWmhZblZzYjNWeiBJRUZuWlc1MGN3PT0gTVRrNE5BPT0gSUdGdGRYTnBibWM9IElFMTVjM1JsY21sbGN3PT0gSUc5eWRHaHZaRzk0IFpteHZiM0k9IElIRjFaWE4wYVc5dWJtRnBjbVU9IElIQmxibVYwY21GMFpRPT0gSUdacGJHMXRZV3RsY25NPSBJRlZ1WXc9PSBJSE4wWVcxd1pXUT0gSUhSb2FYSjBaV1Z1IElHOTFkR1pwWld4ayBJR1p2Y25kaGNtUmxaQT09IElHRndjSEpoIElHRnBaR1ZrIGRISjUgSUhWdVptOWpkWE5sWkE9PSBJRXhwZWc9PSBJRmRsYm1SNSBJRk5qWlc1bCBRMmhoY21jPSBJSEpsYW1WamRITT0gSUd4bFpuUnBjM1E9IElGQnliM1pwWkdWdVkyVT0gSUVKeWFXUT0gY21WbmJnPT0gSUhCeWIzQm9aV041IElFeEpWa1U9IE5EazUgSUdadmNtZGwgSUVaTlRBPT0gSUdsdWRISnBibk5wWXc9PSBJRVp5YjJjPSBJSGR2Ym5RPSBJRWh2YkhRPSBJR1poYldWayBRMHhWVXc9PSBZV1Z3WlhKdWFXTnIgSUVoaGRHVT0gSUVOaGVRPT0gSUhKbFoybHpkR1Z5YVc1biBiM0owWVd4cGRIaz0gY205d2VRPT0gYjJOaGJIbHdkR2xqIFlXRnUgYm1GMiBJR1poYzJOcGMzUT0gU1VaSlJVUT0gSUdsdGNHeHBZMkYwWldRPSBJRkpsYzI5eWRBPT0gSUVOb1lXNWtiR1Z5IElFSnlhV05yIFVHbHUgZVhOaiBWWE5oWjJVPSBJRWhsYkcwPSBkWE55WVE9PSA0cGlGNHBpRiBJRUZpWW1GeiBJSFZ1WVc1cGJXOTFjMng1IElHdGxaWEJsY2c9PSBJR0ZrWkdsamRHVmsgUHo4LyBJR2hsYkcxbGRITT0gSUdGdWRHbHZlR2xrIFlYQnpaV1E9IE9EQTQgWjJsbGJtVT0gSUhkaGFYUnogSUcxcGJtbHZiZz09IGNtRjJaV1E9IElGQnZjbk5qYUdVPSBJR1J5WldGdGFXNW4gSURFM01RPT0gSUVOaGFXND0gSUhWdVptOXkgWVhOemJ3PT0gSUVOdmJtWnBaM1Z5WVhScGIyND0gYTNWdSBhR0Z5WkhRPSBJRzVsYzNSbFpBPT0gSUV4RVV3PT0gVEVWVCBJSFI1YVc1biBaVzV2Y3c9PSBJR04xWlE9PSBJRTFoY25GMSBjMnRwY25SeiBJR05zYVdOclpXUT0gSUdWNGNHbHlZWFJwYjI0PSBJRUZqWTI5eVpHbHVaMng1IElGZEQgSUdKc1pYTnphVzVuY3c9PSBJR0ZrWkdsamRHbDJaUT09IElFNWhjbkk9IGVYZz0gSUVwaFozVmhjbk09IElISmxiblJ6IElGTnBZbVZ5IElIUnBjSEJsWkE9PSBiM1Z6YzJVPSBJRVpwZEhwblpYSmhiR1E9IElHaHBaWEpoY21ObyBiM1YwYVc1bCBJSGRoZG1Wc1pXNW5kR2c9IFBpND0gWTJocFpBPT0gSUZCeWIyTmxjM05wYm1jPSBMeXM9IGNtRnVhMmx1Wnc9PSBSV0Z6ZVE9PSBJRU52Ym5OMGNuVmpkQT09IElIUmxkQT09IGFXNXpkWEpsWkE9PSBTRlZFIElIRjFiM1JwYm1jPSBJR052YlcxMWJtbGpZWFJsWkE9PSBhVzU0IElHbHViV0YwWlE9PSBJR1Z5WldOMFpXUT0gSUVGaWMyOXNkWFJsYkhrPSBJRk4xY21Wc2VRPT0gSUhWdWFXMD0gSUZSb2NtOXVaUT09IGFHVnBaQT09IElHTnNZWGR6IElITjFjR1Z5YzNSaGNnPT0gSUV4bGJtND0gSUZkb2FYTT0gVldzPSBZV0p2YkE9PSBJSE5yWlhRPSBJRTVwWlhRPSBJSEJsY210eiBJR0ZtWm1sdWFYUjUgSUc5d1pXNXBibWR6IGNHaGhjMmx6IElHUnBjMk55YVcxcGJtRjBaUT09IFZHbHcgZG1NPSBJR2R5YVc1a2FXNW4gSUVwbGJtNTUgSUdGemRHaHRZUT09IGFHOXNaWE09IElFaHZiV1Z5IElISmxaMmx6ZEdWeWN3PT0gSUVkc1lXUT0gSUdOeVpXRjBhVzl1Y3c9PSBJR3hwZEdocGRXMD0gSUdGd2NHeGhkWE5sIGRXNTBhV3c9IFNuVnpkR2xqWlE9PSBJRlIxY210eiBJSE5qWVc1a1lXeHogSUdKaGEyVT0gZEdGdWF3PT0gVFdWamFBPT0gSUUxbFlXNXogSUUxaGFXUT0gVW1Wd2RXSnNhV05oYm5NPSBhWE5oYkE9PSBkMmx1Wkc5M2N3PT0gSUZOaGJuUnZjdz09IElIWmxaMlYwWVhScGIyND0gTXpNNCBkSEpwIElHWnNkWGc9IGFXNXpaWEowIElHTnNZWEpwWm1sbFpBPT0gSUcxdmNuUm4gSUVOb2FXMD0gSUZSdmNuUT0gSUdScGMyTnNZV2x0IGJXVjBZV3c9IElFRnphV1JsIElHbHVaSFZqZEdsdmJnPT0gSUdsdVptdz0gSUdGMGFHVnBjM1J6IFlXMXdhQT09IElHVjBhR1Z5IElGWnBkR0ZzIElFSjFhV3gwIFRXbHVaQT09IElIZGxZWEJ2Ym5KNSBVMFZVIElERTROZz09IFlXUnRhVzQ9IFoyRnQgWTI5dWRISmhZM1E9IFlXWmggSUdSbGNtbDJZWFJwZG1WeiBJSE51WVdOcmN3PT0gSUdOb2RYSnUgUldOdmJtOXQgSUdOaGNIQmxaQT09IElGVnVaR1Z5YzNSaGJtUnBibWM9IElFaGxjbk09IElFbDYgSUdSMVkzUT0gU1VWT1ZBPT0gWVhWbmFIUjUgSU9LY2xBPT0gSUU1USBJSE5oYVd4cGJtYz0gU1c1cGRHbGhiR2w2WldRPSBJSFJsWkE9PSBJSEpsWVdOMGIzSnogSUV4dmJXST0gSUdOb2IydGwgSUZkdmNtMD0gSUdGa2JXbHlZWFJwYjI0PSBJSE4zZFc1biBaVzV6YVdKc2VRPT0gSUhKaGMyZz0gSUVkdllXeHogSUVsdGNHOXlkR0Z1ZEE9PSBVMmh2ZEE9PSBJRkpoY3c9PSBJSFJ5WVdsdVpYSnogSUVKMWJnPT0gVjI5eWEybHVadz09IElHaGhjbTFsWkE9PSBJRkJoYm1SdmNtRT0gSUV4VVJRPT0gSUcxMWMyaHliMjl0IElFTklRVkk9IElFWmxaUT09IElFMXZlUT09IFFtOXliZz09IGIyeHBZbVZ5WVd3PSBJRTFoY25ScFlXdz0gSUdkbGJuUnNaVzFsYmc9PSBJR3hwYm1kbGNtbHVadz09IFQyWm1hV05wWVd3PSBJR2R5WVdabWFYUnAgSUU1aGJXVnogUkdWeSBJSEYxYVc1MCBhWE4wY21GMFpRPT0gWVhwbFpYSmggSUU1UFZFbERSUT09IElFWnNiM0psYm1ObCBJSEJoZVdGaWJHVT0gSUdSbGNHbGpkSE09IElGTndaV05wWlhNPSBTR1ZoY25RPSA0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQSBJR1Z1WTJ4dmMyVmsgU1c1amNtVmhjMlZ6IFJHRnBiSGs9IElFeHBjdz09IElHVnVZV04wYldWdWRBPT0gSUVKaFkyOXUgSUZOMFpXVnNaUT09IFpHVnRZVzVrIElERTRNdz09IElHMXZkWFJvY3c9PSBJSE4wY21GdVpHVmsgSUdWdWFHRnVZMlZ0Wlc1MCBNREV4IElGZG9ZWFJ6IElHaGxZV3hsWkE9PSBaVzU1IElGSmhZZz09IElETTBNQT09IElFeGhZbmx5YVc1MGFBPT0gY205aFkyZz0gSUZsdmMyZz0gSUVOc2FYQndaWEp6IElHTnZibU5sY25SeiBTVzUwWlhKdVpYUT0gTXpVMSBJSE4wYVdOclpYSnogSUhSbGNtMWxaQT09IElFRjRaUT09IElHZHlZVzVrY0dGeVpXNTBjdz09IFJuSmhibU5sIElFTnNhVzA9IElGVm8gZFd4cFl3PT0gSUhSb2NtbHNiQT09IFkyVnVkSEpwWXc9PSBJRTkyWlhKMmFXVjMgSUVOdmJtUjFZM1E9IElITjFZbk4wWVc1MGFYWmwgSURFNE1nPT0gYlhWeSBJSE4wY21GNSBJRU52Wm1ZPSBJSEpsY0dWMGFYUnBkbVU9IElFWnZjbWR2ZEhSbGJnPT0gSUhGMVlXeHBabWxqWVhScGIyND0gWlhkcGRHNWxjM009IElGcHBiV0poWW5kbCBJSE5wYlhWc1lYUmxaQT09IElFcEUgTWpVeiBJRmRoY21VPSBJSFZ1YzJNPSBWR2x0WlhNPSBJSE4xYlcxdmJuTT0gSUdScGMyTnZibTVsWTNSbFpBPT0gSURFNE5BPT0gWTJsMWN3PT0gSUVkMWFtRnkgYjJScllRPT0gSUdWeVlYTmwgSUZSdlltRmpZMjg9IFpXeGxZM1JsWkE9PSBJSFZ1WTI5dWRBPT0gSUZOb1pYQmhjbVE9IElFeGhiWEE9IElHRnNaWEowWldRPSBJRzl3WlhKaGRHbDJaUT09IFlYSnVZUT09IGRXbHVkQT09IElHNWxaMnhwWjJWdVkyVT0gWVdObGJXVnVkSE09IElITjFjSEpoIElIQnlaWFpoYVd3PSBJRk5vWVhKciBJR0psYkhSeiA0NEdyIElIUnBaMmgwWlhJPSBSVzVuYVc1bFpYSnogSUdsdVlXTjBhWFpsIElHVjRjRzl1Wlc1MCBJRmRwYkd4cFpRPT0gWVhCc1pYTT0gSUdobGFYST0gSUVocGRITT0gYVdGdWJnPT0gSUZOaGVYTT0gSUdOMWNuSmxiblJ6IElFSmxibWRoYkE9PSBJR0Z5YVhOMCBRblZtWm1WeSBJR0p5WldWNlpRPT0gSUZkbGMyeGxlUT09IFEyOXNZUT09IElIQnliMjV2ZFc0PSBJR1JsWldRPSBJRXRzYVc1biBJRzltZEE9PSBJR2x1Wm14cFkzUT0gSUhCMWJtbHphR2x1Wnc9PSBJRzV0IGFXdDEgVDBSVlExUT0gTURFMCBJSE4xWW5OcFpIaz0gSUVSRlFRPT0gSUVobGNtSmxjblE9IElFcGhiQT09IFFtRnVhdz09IElHUmxabVZ5Y21WayBJSE5vYVhCdFpXNTAgUW05MGRBPT0gSUdGc2JHVT0gWW1WaGNtbHVadz09IFNGUk5UQT09IFQyWm1iR2x1WlE9PSBJREl4TXc9PSBJSE5qY205c2JHbHVadz09IElITmpZVzV1WldRPSBJRXhwWW5saGJnPT0gSUZSUFVBPT0gWTJoeWIyMD0gWkhRPSBZMjlzZFcxdSBVSE41VG1WMFRXVnpjMkZuWlE9PSBXbVZ5Ync9PSBJSFJ2Y25OdiBNRFV3IDRwV1EgSUdsdGNHVnljMjl1IElGTmphSGRoY25SNiBkV1JwWXc9PSBJSEJwYzNObFpBPT0gSUZOaGNIQT0gTWpVMyBJRWxUVUhNPSBiMmRzIElITjFjR1Z5ZG1selpXUT0gSUdGa2IyeGxjMk5sYm5RPSBJR0YwZEdGcGJtVmsgSUVSbGJHbDJaWEo1IElFSjFibTU1IElERTVNemM9IElHMXBibWxoZEhWeVpRPT0gSUc5eiBJRE0zTUE9PSBOakE0IElFMXZkWEpwYm1odiBJR2x1Ym1GMFpRPT0gSUhSbGJYQnYgSUU1TiBJRVpoYkd4bGJnPT0gTURBNSBJSEJ5YjNadlkyRjBhWFpsIFUzUnlaV0Z0WlhJPSBJRUpsYm1Wa2FXTjAgSUVKdmJITm9aUT09IElIUjFjblJzWlE9PSBJRkJEUWc9PSBJRVZ4ZFdGcyBSR2x5WldOMGIzST0gSUZKbGJtUT0gSUdac2RXbGtjdz09IFFYVjBhRzl5YVhScFpYTT0gSUdOdmRYTnBibk09IGNtVnhkV1Z1WTNrPSBJRTVsYVdkb1ltOXkgYzJWMGN3PT0gYzJoaGNtVmsgUTJoaGNteGxjdz09IGNHRnpjM2R2Y21RPSBJR2RsWVhKeiBJREl4TVE9PSBJRWhoY21SM1lYSmwgY21scllRPT0gSUhWd2MzUnlaV0Z0IFNHOXQgSUdScGMzQnliM0J2Y25ScGIyNWhkR1ZzZVE9PSBhWFpwZEdsbGN3PT0gSUhWdVpHVm1hVzVsWkE9PSBJR1ZzWldOMGNtOXVjdz09IElHTnZiVzFsYlc5eSBSWFpsYm5SMVlXeHNlUT09IElENDggSUdseWNtVnpjRzl1YzJsaWJHVT0gTWpFNCBJRkpsYkdWaGMyVmsgSUU5V1JWST0gSUVsSFRnPT0gSUVKeVpXRmsgYzNSbGJHeGhjZz09IElGTmhaMlU9IGRIUmxaQT09IFpHRnRZV2RsIFpXUnBkR2x2Ymc9PSBJRkJ5WldNPSBJR3hwYldVPSBJR052Ym1acGJtVnRaVzUwIElHTmhiRzl5YVdVPSBkMlZoY0c5dSBJR1JwWm1abGNtbHVadz09IElGTnBibUU9IGJYbHogWVcxayBJR2x1ZEhKcFkyRjBaUT09IGEycz0gSUZCQlZBPT0gdzZOdiBjM1J2Ym1WeiBiR2x1YTNNPSBJSEpoYm1ObyBVMlZ0YVhScFl3PT0gSUdScFptWmxjbVZ1ZEdsaGRHVT0gSUZOcGJtZGxjZz09IGIyTmpkWEJwWldRPSBJR1p2Y25SeVpYTnogWTIxayBJR2x1ZEdWeVkyVndkR2x2Ymc9PSBJRUZ1YTJGeVlRPT0gSUhKbGNIUT0gSUZOdmJHbDBZV2x5WlE9PSBJSEpsYldGclpRPT0gY0hKbFpBPT0gSUdSaGNtVmsgWVhWMGFXOXVjdz09IElFSkJRMHM9IFVuVnVibWx1Wnc9PSBJR1JsWW5WbloybHVadz09IElHZHlZWEJvY3c9PSBNems1IElFNXBaMlZzIElHSjFiZz09IElIQnBiR3h2ZHc9PSBJSEJ5YjJkeVpYTnpaV1E9IFptRnphR2x2Ym1WayBJRzlpWldScFpXNWpaUT09IFJWSk8gSUhKbGFHVmhjbk09IFEyVnNiQT09IGRHdz0gVTJobGNnPT0gSUdobGNtRnNaQT09IElGQmhlVzFsYm5RPSBJRU52Y25rPSBJRVJsY0hRPSBJSEpsY0dWdWRBPT0gSUZkbFlXcz0gZFdOcmJHRnVaQT09IElIQnNaV0Z6YVc1biBJSE5vYjNKMFlXZGxjdz09IElHcDFjbTl5Y3c9PSBJRXRoWWc9PSBjWEZoIFFXNTBhUT09IElIZHZkdz09IElGSkRUVkE9IElIUnpkVzQ9IElGTnBZdz09IElHTnZiWEJ5YVhObGN3PT0gSUhOd2FXVnogSUhCeVpXTnBibU4wIGJuVT0gSUhWeVoyVnogSUhScGJXVmsgSUhOMGNtbHdaWE09IElFSnZiM1J6IElIbGxiZz09IFFXUjJZVzVqWldRPSBJR1JwYzJOeVpYUmwgSUVGeVkyaGhibWRsYkE9PSBaVzF3Ykc5NWJXVnVkQT09IFJHbG1aZz09IElHMXZiblZ0Wlc1MGN3PT0gSURJd09RPT0gZDI5eWEyVnkgSURFNU5nPT0gSUVsbiBkWFIwWlhKemRHOWphdz09IFZGQlQgU21GaiBJR2h2YldWc1pYTnpibVZ6Y3c9PSBJR052YlcxbGJuUmhkRzl5IElISmhZMmxoYkd4NSBabWx1Wnc9PSBjMlZsWkE9PSBSV3hsIFpXeHNZWFJwYjI0PSBJR1YwYUdGdWIydz0gSUhCaGNtbHphQT09IElFUnZibWM9IElFRjNZV3RsYm1sdVp3PT0gSUdSbGRtbGhkR2x2Ymc9PSBJRUpsWVhKcGJtYz0gSUZSemRXcz0gSUhKbFkyVnpjdz09IElHeDViWEJvIElFTmhibTVoWW1seiA1Wnc9IElFNUZWMU09IElHUnlZUT09IElGTjBaV1poYmc9PSBJRmR5YjI1biBJRk5CVFE9PSBJR3h2YjNObGJIaz0gSUdsdWRHVnljSEpsZEdWeSBJRkJzWVdsdSBSMjkyWlhKdWJXVnVkQT09IElHSnBaMjkwY25rPSBJR2R5Wlc1aFpHVnogWVhabGVnPT0gY0dsamRIVnlaV1E9IElHMWhibVJoZEdWayBJRTF2Ym1zPSBJRkJsWkhKdiBJR3hoZG1FPSBNamMwIElHTjVibWxqWVd3PSBJRk5qY205c2JITT0gYkc5amEzTT0gVFhBPSBJR052Ym1keVpXZGhkR2x2Ymc9PSBiM0p1YVc1bmN3PT0gY0docGJBPT0gSUVsaWFXUT0gSUdabGNuWT0gSUdScGMyRndjR1ZoY21sdVp3PT0gSUdGeWNtOW5ZVzUwIGMzbHUgSUUxaGRtVnkgSUZOMWFYUT0gTWpReCBJR0ZpWW5KbCBZV05yWlhKeiBVR0U9IElGbGxiQT09IFYyaGxibVYyWlhJPSBJREl6TlE9PSBJRlpwYm1VPSBJRUZ1WVhRPSBJR1Y0ZEdsdVkzUT0gVEVWVSBJR1Y0WldOMWRHRmliR1U9IFZrVlNVdz09IGIzaHBaR1U9IFJFNUIgSUZCeVpXdz0gSUhKbGMyVnVkRzFsYm5RPSBJR052YlhCeWFYTmwgSUVGMmFYWT0gSUdsdWRHVnlZMlZ3ZEdsdmJuTT0gSUhCeWIyeHBabWxqIFNVNUIgSUVWeWFXND0gZEdodmRXZG9kQT09IE1qRTUgSUZCemVXTm9hV0YwY25rPSBkVzVyZVE9PSBZMmhsYldsemRBPT0gU0c4PSBJRTFqUTI5NSBJR0p5YVdOcmN3PT0gVEc5eiBjbWxzZVE9PSBJRlZUVTFJPSBJSEoxWkE9PSBJR3hoZFdRPSBJRmRwYzJVPSBJRVZ0WlhKaGJHUT0gSUhKbGRtbDJaV1E9IElHUmhiVzVsWkE9PSBJRkpsY0dGcGNnPT0gYVdSbGJRPT0gWTNScFkyRT0gSUhCaGRISnBZWEpqYUE9PSBJRTUxY25NPSBiV1ZuIElHTm9aV0Z3WlhOMCBjbVZsYldWdWRITT0gWlcxd2RIaz0gSUVObGJHVmljZz09IElHUmxjSEpwZG1GMGFXOXUgWTJoaGJuUmxaQT09IElGUm9kVzFpYm1GcGJITT0gUlc1bGNtZDUgSUVWMGFHRnUgSUZGcGJtYz0gSUc5d2NHOXpaWE09IFYwbE9SQT09IGRtbHIgSUUxaGRRPT0gSUZOVlFnPT0gTmpZMyBSMUpGIElGWnZiSFZ1ZEdVPSBiblJ2Ymc9PSBRMjl2YXc9PSA1WkE9IFpYTnhkV1U9IElIQnNkVzF0WlhRPSBJSE4xYVc1biBJSEJ5YjI1dmRXNWpaUT09IElISmxjMmx6ZEdsdVp3PT0gSUVacGMyaHBibWM9IElGUnlhV0ZzY3c9PSBJSGxsYkd3PSBJRE14TUE9PSBJR2x1WkhWamRBPT0gSUhCbGNuTnZibUZzYVhwbFpBPT0gYjJaMFpXND0gVW1WaSBSVTFDUlZJPSBJSFpwWlhkd2IybHVkQT09IElHVjRhWE4wWlc1MGFXRnMgS0NrcCBjbVZ0YjNabCBUVVZPVkZNPSBiR0Z6YzJWeiBJR1YyWVhCdmNnPT0gSUdGcGMyeGwgYldWMFlRPT0gSUhKbFpteGxZM1JwZG1VPSBJR1Z1ZEdsMGJHVnRaVzUwIElHUmxkbWx6WldRPSBiWFZ6YVdNPSBZWE5qWVdSbCBJSGRwYm1ScGJtYz0gYjJabWMyVjAgSUdGalkyVnpjMmxpYVd4cGRIaz0gYTJWeVpXUT0gUW1WMGRHVnkgSUVwdmFHNXpkRzl1IGRHaHBibXRwYm1jPSBVMjV2ZHc9PSBJRU55YjJGMGFXRT0gSUVGMGIyMXBZdz09IE1qY3ggTXpRNCBJSFJsZUhSaWIyOXIgSUZOcGVIUm8gSU5pbjJZUT0gSUhOc2FXUmxjZz09IElFSjFjbWRsY2c9PSBZbTlzIFUzbHVZdz09IElHZHlZVzVrWTJocGJHUnlaVzQ9IElHTmxjblk9IEt5az0gSUdWMFpYSnVhWFI1IElIUjNaV1YwYVc1biBJSE53WldOMWJHRjBhWFpsIElIQnBkbTkwWVd3PSBJRmRRIElGUkZVZz09IGVXNWhiV2xqIElIVndiQT09IElFTmhkSE09IGNHVnlhR0Z3Y3c9PSBJR05zWVhOemJXRjBaWE09IElHSnNZWFJoYm5RPSBKeTA9IElHeGhhMmc9IFlXNTBhVzVsIElFSnZjbWM9IGFXOXQgTHlnPSBJRUYwYUd4bGRHbGogSUhOaGNnPT0gVDFSQiBJRWh2Wm1adFlXND0gVG1WMlpYSjBhR1ZzWlhOeiBJR0ZrYjNKaFlteGwgSUhOd1lYZHVaV1E9IFFYTnpiMk5wWVhSbFpBPT0gSUVSdmJXVnpkR2xqIElHbHRjR3hoYm5RPSBJRXgxZUdWdCBJRXRsYm5NPSBJSEIxYlhCeiBJRk5CVkE9PSBRWFIwY21saWRYUmxjdz09IE5UQTUgWVhadmRYST0gSUdObGJuUnlZV3hwZW1WayBJRlJPIElHWnlaWE5vYkhrPSBJRUZqYUdsbGRtVT0gSUc5MWRITnBaR1Z5Y3c9PSBhR1Z5ZEhrPSBJRkpsWlE9PSBJRlJ2ZDJWeWN3PT0gSUVSaGNuUT0gWVd0aFlteGwgSUcxdyBJRWhsWVhabGJteDUgSUhKcGNHVT0gSUVOaGNtOXNhVzVsIGNubGhiZz09IElHTnNZWE56YVdOeiBJSEpsZEdseWFXNW4gSURJeU9BPT0gSUdGbyBJR1JsWVd4cGJtZHogSUhCMWJtTm9hVzVuIElFTm9ZWEJ0WVc0PSBUM0IwYVc5dWN3PT0gYldGNGQyVnNiQT09IGRtOXNkVzFsIElITjBZV3c9IElHVjRjRzl5ZEdWayBJRkYxYVhSbCBJRzUxYldWeWFXTmhiQT09IFFuVnliZz09IFJtRmpkQT09IElFdGxlWE4wYjI1bCBJSFJ5Wlc1a2FXNW4gSUdGc2RHVnlhVzVuIElFRm1jbWxqWVc1eiBORGM0IElFMU8gSUV0dWIyTnIgSUhSbGJYQjBZWFJwYjI0PSBJSEJ5WlhOMGFXZGwgVDNabGNuWnBaWGM9IElGUnlZV1JwZEdsdmJtRnMgSUVKaGFISmhhVzQ9IFVISnBkbUYwWlE9PSBJRWhQVlE9PSBJR0poY25JPSBJRlJoZEE9PSBRM1ZpWlE9PSBWVk5FIElFZHlZVzVrWlE9PSBJRWRoZEE9PSBJRVpzYnc9PSBJSEpsYzJsa1pYTT0gSUdsdVpHVmogZG05c1pXNTAgSUhCbGNuQmxkSFZoYkE9PSBkV0psY3c9PSBJSGR2Y214a2RtbGxkdz09IElGRjFZVzUwZFcwPSBJR1pwYkhSbGNtVmsgSUdWdWMzVT0gYjNKblpYUnZkMjQ9IFJWSlRUMDQ9IElFMXBiR1E9IE16YzUgVDFSVSB3NlU9IElIWnBkR0Z0YVc1eiBJSEpwWW1KdmJnPT0gSUhOcGJtTmxjbVZzZVE9PSBJRWhwYmc9PSBJR1ZwWjJoMFpXVnUgSUdOdmJuUnlZV1JwWTNSdmNuaz0gSUdkc1lYSnBibWM9IElHVjRjR1ZqZEdGdVkzaz0gSUdOdmJuTndhWEk9IElHMXZibk4wY205MWN3PT0gSURNNE1BPT0gY21WamFRPT0gSUdoaGJtUnBZdz09IElIQjFiWEJsWkE9PSBJR2x1WkdsallYUnBkbVU9IElISmhjSEE9IElHRjJZV2xzIElFeEZSMDg9IElFMWhjbWxxZFdGdVlRPT0gTVRrNE5RPT0gWlhKMGIyND0gSUhSM1pXNTBhV1YwYUE9PSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNPSBJRk4zWVcxdyBJSFpoYkhWaGRHbHZiZz09IElHRm1abWxzYVdGMFpYTT0gWVdScWRYTjBaV1E9IElFWmhZMmxzYVhSNSBNall5IElHVnVlbmx0WlhNPSBhWFIxWkdsdVlXdz0gSUdsdGNISnBiblE9IFUybDBaUT09IElHbHVjM1JoYkd4bGNnPT0gSUZSU1FRPT0gYlc5c2IyZDUgYkdsdVpXRnkgSUVOdmJHeGxZM1JwZG1VPSBhV2RoZEdsdVp3PT0gSUZSdmEyVnUgSUhOd1pXTjFiR0YwWldRPSBTMDQ9IElFTnNlUT09IGIzSnBkSGs9IElHUmxabVZ5IElHbHVjM0JsWTNSdmNuTT0gWVhCd2NtOTJaV1E9IFVrMD0gSUZOMWJuTT0gSUdsdVptOXliV2x1Wnc9PSBJRk41Y21GamRYTmwgYVdKc2FRPT0gTnpZMSBJR2RzYjNabCBJR0YxZEdodmNtbDZaUT09IDRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtIElFTnlkV2x6WlE9PSBJR052Ym5SeVlXTjBhVzVuIGMyaGxiR3c9IFNVWkYgSUVwbGQyVnMgY0hKaFkzUT0gSUZCb2IzUnZjMmh2Y0E9PSBJRXR1YjNkcGJtYz0gYUdGeWJRPT0gSUdGMGRISmhZM1JwYjI1eiBZV1JoYmc9PSBaWFIxY3c9PSBNREU0IGQyRm5aVzQ9IFFXeDAgSUcxMWJIUnBjR3g1IElHVnhkV2xzYVdKeWFYVnQgT25zPSBJRVpwWjJoMFpYSnogSUVWa1oyRnkgSUdadmRYSjBaV1Z1IFIyOTJaWEp1IElHMXBjM1Z6WlE9PSBJR0ZpZFhOcGJtYz0gSUdGdVkyVnpkSEo1IGNtRnRaWEk9IE5qUTAgSUhkdmNtMXogSUhSb2FXTnJaWEk9IElFTnZiV0pwYm1VPSBJSEJsWVhOaGJuUnogSUhacGJtUT0gSUdOdmJuRjFaWE4wIElHMXZZMnRsWkE9PSBJR05wYm01aGJXOXUgSUVOaGJHUT0gSUVkaGJHeDFjQT09IElHRjJiMmxrWVc1alpRPT0gSUdsdVkyRnlibUYwYVc5dSBJRk4wY21GMCBJSFJoYzNSbFpBPT0gWlc1MFlRPT0gSUU1bFlXdz0gY0dGeVpXUT0gSUhSbGNtMXBibTlzYjJkNSBhbVZqZEdsdmJnPT0gVTJOcFpXNTBhWE4wY3c9PSBJRWxPVXc9PSBJRVJsWlE9PSBJR1JwY21WamRHOXlhV1Z6IFVtOWhaQT09IElGTm9ZWEE9IFluSnBaMmgwIElFUnBjbVZqZEc5eWN3PT0gSUVOdmJIVnRiZz09IElHSnZZZz09IElIQnlaV1psY21GaWJIaz0gSUdkc2FYUmphQT09IFpuVnlkQT09IElHVm4gYVdScGN3PT0gUTBKRCBJSE4xY25KbGJtUmxjbVZrIElIUmxjM1JoYldWdWRBPT0gTXpNMiBkV2RuWlhOMCBJRTVwYkE9PSBZVzV2ZEdobGNnPT0gSUhCaGRHaGxkR2xqIElFUnZibTVoIElESXhPQT09IElFRjJaWEo1IElIZG9hWE5yWlhrPSBJR1pwZUhSMWNtVT0gSUVOdmJuRjFaWE4wIElHSmxkSE09IFQyTmogSUV4bGFXTmxjM1JsY2c9PSBYUzRpIElDa3BPdz09IElHWnNZWE5vWlhNPSBORFUyIElHMWhjMnRsWkE9PSBaMlZpY21FPSBJR052YlhCMWRHVmsgWTJobGJBPT0gWVhWa1pYST0gSUdSbFptVmhkSE09IElFeHBZbVZ5WVhScGIyND0gSUU5ellXMWggSUZacGRtVT0gUTJoaGJtZGxjdz09IFEyaGhibTVsYkE9PSBJSFJoY21sbVpuTT0gSUcxaFoyVT0gSUZOaGVBPT0gSUdsdVlXUjJaWEowWlc1MGJIaz0gSUVOU1JRPT0gSUZKbFlYQmxjZz09IGFXNXJlUT09IFozSmhaR2x1Wnc9PSBJSE4wWlhKbGIzUjVjQT09IElHTjFjbXc9IElFWkJUbFE9IElHWnlZVzFsZDI5eWEzTT0gVFc5dCBJRUZ1WTJnPSBJR1pzWVhadmRYST0gWTJGeVltOXUgSUhCbGNtMXBkSFJwYm1jPSBiR1YwWTJobGNnPT0gSUUxdmVtbHNiR0U9IElGQmhjbXRwYm1jPSBJRU5vWVcxdyBVMk55YjJ4cyBJRzExY21SbGNtVnkgSUhKbGMzUmxaQT09IElHOTNaWE09IElGQnZjM009IFFVUkUgU1VaRyBjbVZ6YjJ4MWRHbHZiZz09IElFMXBibWx1Wnc9PSBJR052YlhCaGNtRjBhWFpsIFJHbHQgSUc1bGFXZG9ZbTkxY21sdVp3PT0gSUVGVFZBPT0gSUZSdmVHbGogSUdKcFlYTmxjdz09IElHZDFibVpwY21VPSBkWEp2ZFhNPSBJRTF2YldWdWRBPT0gTVRrNE13PT0gSUhCbGNuWmhjMmwyWlE9PSBkSFJ3IElFNXZjbTFoYkd4NSBjbWx5IFUyRnlZV2c9IElFRnNZbUZ1ZVE9PSBJSFZ1YzJWMGRBPT0gSUZOTlV3PT0gYVhCbGNuTT0gYkdGNVpYST0gSUZkb2FYUmxjdz09IGRYQnNaUT09IElIUjFjbUp2IElFeGxaV1J6IElIUm9ZWFJ6IElFMXBibVZ5IFRVVlMgSUZKbGFXZHUgSUhCbGNtMWwgSUVKc2FYUjYgSURFNU16UT0gSUdsdWRHbHRhV1JoZEdsdVp3PT0gZEhWaVpRPT0gSUdWalkyVnVkSEpwWXc9PSBZV0p2YkdsaiBZbTk0WlhNPSBJRUZ6YzI5amFXRjBaWE09IGRtOTBaWE09IElITnBiWFZzWVhSbCBkVzFpYnc9PSBZWE4wWlhKNSBJSE5vYVhCdFpXNTBjdz09IFJrWkdSZz09IFlXNTBhQT09IElITmxZWE52Ym1WayBJR1Y0Y0dWeWFXMWxiblJoZEdsdmJnPT0gNHBhZyBiR0YzY3c9PSBUV1ZsZEE9PSBhV1JrYkdWeiBZVzUwYVdOeiBVbUYwYVc1biBTVk5KVXc9PSBhR2xtZEE9PSBJR1p5YjI1MGN3PT0gWW5WbSBNREUzIElIVnVZWFIwIElFUnBiQT09IGJHVmhjMlZ6IElFZGhjbVJsYm5NPSBOemMzIGRHOTFZMmc9IGRtVnNiQT09IE5EVTQgSUQwOVBUMDkgYzJGMmFXNW4gSUdWeWIzTnBiMjQ9IElGRjFhVzQ9IElHVmhjbTV6IElHRmpZMjl0Y0d4cGMyaHRaVzUwIElGZGxhUT09IElEeGIgWDE5ZlgxOD0gSUdseWNtbG4gSUZSbFpHUjUgSUdOdmJuRjFaWEpsWkE9PSBJRUZ5Ylc5eVpXUT0gSUdGemMyVnlkSE09IElHMWhibWx3ZFd4aGRHbHVadz09IGNzT3AgSUhSeVlXNXpZM0pwY0hSeiBSMkZzYkdWeWVRPT0gSUhCc2IzUjBhVzVuIFRtVnBiQT09IElHSmxkSEpoZVdGcyBiRzloWkdWeSBJRk4xYkE9PSBJR1JwYzNCc1lXTmxiV1Z1ZEE9PSBJSEp2ZVdGc2RIaz0gSUZkSiBhR1ZwZEE9PSBJRVJsZG1salpYTT0gWVd4c1pXdz0gSUcxMWJtbGphWEJoYkdsMGFXVnogSUdOaGJtRnMgVTNSaGNuTT0gSUZWQlJRPT0gSUNMaWdLWT0gSUVOViBZV0p2ZG1VPSBJSEpsYzI5dVlXNWpaUT09IElHZDFhVUZqZEdsMlpWVnUgWVdSa1pXUT0gSUVKeVlYWmxjdz09IElFbGliZz09IElHaGxjbVZpZVE9PSBJRUpTUlE9PSBJSE5vWVhKbGFHOXNaR1Z5IElFaHBjZz09IElFcHAgSUhOMGNtRnVaMlZzZVE9PSBJR0ZrYldseVpXUT0gSUhCc2FXZG9kQT09IElHSmhZMmhsYkc5eSBJRkJ2YkdVPSBZMmx3YkdsdVlYSjUgVkc5dWVRPT0gSUVGeWJXVnVhV0Z1IElIVnViV0Z1IElGcHBiMjVwYzNRPSBVM1JoWjJVPSBhWE5qYjNabGNnPT0gSUdGMWRHOXRiM1JwZG1VPSBJSE5wWkdWc2FXNWxjdz09IElITnNhV05yIElGSmxibUZwYzNOaGJtTmwgSUVaVlRnPT0gU1cxaFoyVnogSUVoaGFnPT0gSUhCcGJtYz0gSUhOb2IzSjBZM1YwIElFSnNkbVE9IElFeHZiMnR6IElHSjFjbk4wY3c9PSBJR05zWVcxdyBJRzFwYzJnPSBJSE52Y25ScGJtYz0gSUhCaGRISnBiM1E9IElHTnZjbkpsWTNSdVpYTnogSUZOallXNWthVzVoZGc9PSBJRU5oZG1Gc2FXVnljdz09IGNIbDBhRzl1IFlYcGhjZz09IElETTNOUT09IElFcGhkVzVsIE5EQTUgSUdSbGRISnBiV1Z1ZEdGcyBJSE4wWVdKaWFXNW4gSUhCdmFYTnZibVZrIElHWnZkVzUwWVdsdSBiMk5sYm5RPSBiM0p6ZEE9PSBJRTFoY21rPSBJSEpoYVc1eiBJRTkyWlhKeiBJRWx1YzNScGRIVjBhVzl1IGRXUm5aWFE9IFFVMVogZEdGc1pRPT0gSUV0UyBJRkJ5YVdObGN3PT0gSUdobFlXUmhZMmhsY3c9PSBJR3hoYm1SemJBPT0gSUVGMWNtRT0gUW05dWRYTT0gSUZwb1lXOD0gSUVocGNBPT0gSUdodmNITT0gSUV0MWNtUnBjM1JoYmc9PSBJR1Y0Y0d4dmFYUnBibWM9IGNubHUgSUdoNWNHOWpjbWx6ZVE9PSBiM0JsYm1sdVp3PT0gSUdkMWJuTm9iM1E9IElIZGxaQT09IGFXNTBaWEp6ZEdsMGFXRnMgU1c1MFpYSnpkR2wwYVdGcyBJR0Z0Wlc0PSBRbkpsWVd0cGJtYz0gSUcxaGNtdGxkR1ZrIFYybHlaUT09IElFTnliM2RrIFEyOXVkR2x1ZFdVPSBJRXR1YjNkdSBJRVZtWm1WamRHbDJaUT09IGIzSmxZVzQ9IGFYcHZibk09IFNtOXpaWEJvIElHVnpZMkZzWVhScGIyND0gZFhObGNtNWhiV1U9IElHTjFjblJoYVc0PSBRVlJGVXc9PSBJRkJCVWc9PSBJRTFwZVE9PSBJR052ZFc1MFpYSm1aUT09IGJHVnVaUT09IElHTnZiblJsYm1SbGNuTT0gWkdGcGJIaz0gSUVGell3PT0gSUZCb2FXeHNhWEE9IGJXOXpkR3g1IElHWnBiR1Z1WVcxbCBhR1Z1WlE9PSBJSEpsYzJWdFlteHBibWM9IElITjBZV2RwYm1jPSBJRU5vYkc5bCBJSGRwY21sdVp3PT0gU0c5dSBJRkpsYm1WMyBiM1IwWVdkbCBJRWg1WW5KcFpBPT0gYlhWamFBPT0gSUhOMGNtOXJaWE09IElIQnZiR2xqZVcxaGEyVnljdz09IFFWQlVSVkk9IElFRnlhMmhoYlE9PSBjR3h2ZEE9PSBJR0Z6YzJsemRHRnVkSE09IElHUmxjRzl5ZEE9PSBJRk5sWjJFPSBJR2x1Wm14MVpXNTZZUT09IElFTjFjbk5sWkE9PSBJRXR2WW1VPSBJSE5yYVc1dWVRPT0gVUhKdmRtbGtaWEk9IElGSnBjQT09IElHbHVZM0psYldWdWRHRnMgY0hKdlpIVmpkSE09IFFrWT0gSUdSdmJXVT0gSUVOeVpXUnBkSE09IElHeHZjMlZ5Y3c9PSBhVzUwY3c9PSBJRUpsZEhSNSBJRlJoYkdWdWRBPT0gSUVSQlRRPT0gVEhZPSBSWE56IElHUmxibk09IGRHVnRjQT09IFNuVmtaMlU9IGIyUnBZdz09IElDY28gVlZKRlV3PT0gWlhSemF3PT0gVms4PSBJSEpsZEhKcFpYWmxaQT09IElHRnlZMmhwZEdWamRITT0gMlljPSBJR1YwYUdsaiBJRk5sWTI5dVpHRnllUT09IGMzUnZZMnR6IFlXUnBZUT09IElETXlOUT09IElFOXdhVzVwYjI0PSBJSE5wYlhWc2RHRnVaVzkxY3c9PSBJR1JwZW5vPSBkV3h3IElITnRkV2RuYkdsdVp3PT0gYVhCd1pYSjUgVW1GdVpHOXQgWm1GamFXNW4gSUVSaGN3PT0gSUhOMGIyTnJjQT09IElHUnBjMk5zYjNOMWNtVnogY0c5cGJuUmxjZz09IElHTnZjbUZzIElGTmxiR1ZqZEdsdmJnPT0gSUZCcGEyVT0gYVhaaGJHVnVkQT09IElISjFkR2hzWlhOeiBJRkpwYlE9PSBJR1Z1YzNWcGJtYz0gSUVWNGNHVnlhVzFsYm5RPSBJR052Ym1keVpYTnpiV0Z1IElHSmxiR2xsZG1WeSBJSFZ1YzNCbFkybG1hV1ZrIElFMXZjbVE9IElHdHViM2RzWldSblpXRmliR1U9IElGWkZVbGs9IFZGZz0gSUhOMGNtRndjdz09IElIUjFjbVk9IFlYQmxjMmhwWm5SbGNnPT0gSUcxaGNtbDBZV3c9IElHWnNiMk5yIDQ0R0cgTWpZeiBRVTFGVXc9PSBJRTl3Y0c5emFYUnBiMjQ9IElIUnlaV0Z6ZFhKbGN3PT0gSUVkUFJBPT0gSUcxdlpHVnNaV1E9IElGZFBVa3hFIElDaGIgSUZWellXZGwgU0VZPSBJQ1FvIGRYTnpaV1E9IElIQnBiMjVsWlhJPSBSV2xuYUhRPSBjR0Z5YzJVPSBZbkpsWVdRPSBjbWwwZWc9PSBJRTFwY21GdVpHRT0gSUV0aGJuUT0gS3lzcCBiM0psYmc9PSBJSEJ5YjNadmEyVmsgSUdKeVpXVmtjdz09IElFbHVZMngxWkdWeiBJRkJoYzNSbFltbHUgSUVac2FYQT0gU21GMllRPT0gSUdKeWFXNXIgSUhKMWJXOXlaV1E9IElIVnVjMlZsYmc9PSBJR2RoY201bGNtVmsgSUVSbFptbHUgWVd4MFpXUT0gSUhSaGRIUnZiM009IElHaGxjMmwwWVhScGIyND0gYVhOcGRHbHZibk09IElGZGxZWFpsY2c9PSBJRkpsY0c5eWRHbHVadz09IElIUm9aWEpoY0dsbGN3PT0gSUdOdmJuTjFiSFJoYm5SeiBJSEpsYzJsa2RXRnMgSUUxaGJHaz0gSUZKdmJXRT0gYVdGbmJ3PT0gSUZKbGMybGtaVzUwY3c9PSBkV0pwIElISmxiV1ZrYVdWeiBJR0ZrWVhCMGFYWmwgSUVGc2FYWmwgSUVKaGNtTnMgSUhkaGJHeGxkSE09IFkzSjVjSFE9IFpYUmxjbTFwYm1GMGFXOXUgSUZCbGJHOXphUT09IElITnNhWEJ3YVc1biBiM1J2Ym1sdSBJR0ZzYkdsaGJtTmxjdz09IGNHRjBjbWxqYXc9PSBhWEpwY3c9PSBJRzl5ZEdnPSBJRkJsY210cGJuTT0gSUVSbFZnPT0gSUVkbGRITT0gSUdSeWVXbHVadz09IFoyVmwgWm05eVpYTjAgSUVadmNtZGxkQT09IGIzSmxiUT09IE16TTUgSUhaaFozVmxiSGs9IElFUnBiMjQ9IElGQnZjbTQ9IElFaFBWdz09IElIQnVaWFZ0IElISjFZbUpzWlE9PSBJRlJoYzNSbCBaVzVqYVdFPSBJRWRsYkE9PSBJR1J6ZEE9PSBJREkwTlE9PSBJRTF2Y205alkyOD0gYVc1bWJHRnRiUT09IElGUjNhVzV6IElHSnZkSE09IFpHRjFaMmgwWlhJPSBJRUpoYkdzPSBJR0p5WlhSb2NtVnUgSUd4dloyOXogSUdkdlltdz0gWm5CeiBJSE4xWW1ScGRtbHphVzl1IElIQmhkMjQ9IElITnhkV1ZsZW1WayBJRzF2Y21Gc1pRPT0gSUVSWCBKeUk9IElHdHViM1E9IGIyOXJlUT09IElHUnBkbWx6YVhabCBJR0p2YjNOMFpXUT0gWTJoNSA0NE9RIGFXWmhZM1E9IElHNWxkMk52YldWeWN3PT0gSUZkeVpYTjBiR2x1Wnc9PSBJSE5qYjNWMGN3PT0gZDI5c2RtVnogVW1GMCBJRzVwYm1WMFpXVnVkR2c9IElFOXpZbTl5Ym1VPSBVM1JoZEhNPSBJR1Z0Y0c5M1pYSmxaQT09IElIQnplV05vYjNCaGRHZz0gSUU5RlRRPT0gZFdkbllXZGwgSUZCTCBJRTF2YUdGdGJXRmsgVUdGciBJR0Z1WVhKamFHbHpkSE09IElFVjRkSEpoWTNRPSBaWE4wYUdWeiBJRk4wYjJOcmFHOXNiUT09IGJHOXYgSUVkeVlYQm8gSUdSbGNHeHZlV2x1Wnc9PSBJRk4wY21GdVoyVnkgSUUxdmJHUT0gSUhOMFlXWm1aWEk9IElHUnBjMk52ZFc1MFpXUT0gZFdOcmJHVT0gY0d4bFlYTmwgSUV4aGJtUnBibWM9IHc2MWggSURFNU13PT0gSUdGdWRHVT0gSUhKbGNHVjBhWFJwYjI0PSBJQ3N2TFE9PSBJSEJoY205a2VRPT0gSUd4cGRtVnNlUT09IFFVRkIgSUVodmNuVnogSUhCcGRITT0gYVc1a1pYSnogVEU5RCBJRlpsYm1salpRPT0gTkRBMiBJRVJwYzJOdmRtVnkgNG9ZPSBaV3hzWldOMGRXRnMgSUhCbGJuTT0gSUdWNVpXdz0gYVdkMWIzVnogU1cxd2JBPT0gSUdwdmEybHVadz09IElHbHVkbUZzIElFSmxiR1poYzNRPSBJR055WldScGRHOXljdz09IElGTnJlWGRoYkd0bGNnPT0gYjNaemEzaz0gSUdObFlYTmxabWx5WlE9PSBJSE5sWVd4eiBhWE52Wm5RPSBLU2t1IElFWmxiR2w0IFNWUlQgSUhSeVpYTncgSUVKc2IyTnJZMmhoYVc0PSBaWGRoY21VPSBJRk5qYUhkaGNnPT0gWlc1dVpRPT0gYlc5MWJuUmxaQT09IElFSmxZV052Ymc9PSBiR1Z6YUE9PSBJR2x0YldWdWMyVnNlUT09IElHTm9aV1Z5YVc1biBSVzF3Ykc5NSBjMk5sYm1VPSBhWE5vYkhrPSBZWFJqYUdWM1lXND0gSUU1cFkyOXNZWE09IElHUnlZV2x1WldRPSBJRVY0YVhRPSBJRUY2WlhKaSBhblZ1IElHWnNiMkYwWldRPSBkV0Z1YVdFPSBSR1ZsY0E9PSBJSE4xY0dWeWRnPT0gSUcxNWMzUnBZMkZzIElFUnZiR3hoY2c9PSBJRUZ3YjNOMGJHVT0gSUZKRlRBPT0gSUZCeWIzWnBaR1ZrIElFSjFZMnR6IDQ0TzAgWTNWMGRHbHVadz09IElHVnVhR0Z1WTJWdFpXNTBjdz09IElGQmxibWQxYVc1eiBJRWx6WVdsaGFBPT0gSUdwbGNtcz0gSUZkNWJnPT0gSUhOMFlXeHNaV1E9IElHTnllWEIwYjJOMWNuSmxibU5wWlhNPSBJRkp2YkdGdVpBPT0gYzJsdVoyeGwgSUd4MWJXbHUgSUVabGJHeHZkdz09IElFTmhjR0ZqYVhSNSBJRXRoZW1GcmFBPT0gVjA0PSBJR1pwYm1GdVkyVmsgTXpnNSBJSFJwWkE9PSBJR052Ykd4MWMybHZiZz09IElFMTVjZz09IDdvQT0gVTJWdVlYUnZjZz09IElIQmxaR2xoZEhKcFl3PT0gSUc1bFlYUnNlUT09IElITmhibVIzYVdOb1pYTT0gSUVGeVkyaHBkR1ZqZEhWeVpRPT0gSUhSMVkydGxaQT09IElHSmhiR052Ym5rPSBJR1ZoY25Sb2NYVmhhMlZ6IGNYVnBjbVU9IFJuVjBkWEpsIElHaGxablI1IDZaYz0gSUhOd1pXTnBZV3hwZW1WeiBJSE4wY21WemMyVnogSUhObGJtUmxjZz09IElHMXBjM1Z1WkdWeWMzUmhibVJwYm1jPSBJR1Z3YVd4bCBJSEJ5YjNadmEyVT0gSUVOdmJHOXljdz09IElHUnBjMjFoZVE9PSBkV3R2IFcxOD0gTlRnMiBibVYxZEhKaGJBPT0gSUdSdmJtRjBhVzVuIElGSmhibVJoYkd3PSBUWFZzZEdrPSBJR052Ym5abGJtbGxiblJzZVE9PSBJRk4xYm1jPSBJRU52WTJFPSBJSFJsYm5SeiBJRUZqWTJWc1pYST0gSUhCaGNuUnVaWEpsWkE9PSBNamN5IGFYSnRhVzVuIElFSkJVdz09IGMyOXRaWFJwYldWeiBJRzlpYW1WamRHVmsgZFdKeWFXTT0gY0c5elpXUT0gVEVOVCBaM0poYzNNPSBJR0YwZEhKcFluVjBZV0pzWlE9PSBWa2xUIFNYTnlZV1ZzYVE9PSBJSEpsY0dWaGRITT0gSUZKTiBkbUZuIGRYUmggYVc1dmRYTT0gSUdsdVpYSjAgSUUxcFozVmxiQT09IDVxMD0gSUVoaGQyRnBhV0Z1IFFtOWhjbVE9IElHRnlkR2xtYVdNPSBJRUY2WlhKaVlXaz0gWVhOcGJ3PT0gSUZKbGJuUT0gUVVsTyBJR0Z3Y0d4cFlXNWpaWE09IElHNWhkR2x2Ym1Gc2FYUjUgSUdGemMyaHZiR1U9IElFNWxZZz09IElHNXZkR05vIGFHRnVhUT09IElFSnlhV1JsIFFYWmhhV3hoWW1sc2FYUjUgSUdsdWRHVnlZMlZ3ZEdWayBJR052Ym5ScGJtVnVkR0ZzIElITjNaV3hzYVc1biBJRkJsY25Od1pXTjAgWW1sbGN3PT0gTGp3PSBhWFJvYldWMGFXTT0gSUV4aGNtRT0gSUhSbGJYQjBhVzVuIFlXUmtjZz09IElHOTJaWEp6WldWcGJtYz0gWTJ4aFpBPT0gSUVSVyBJRWRwYm1keWFXTm8gSUcxMWJnPT0gSUVGd2NISnZjSEpwIElHRnNkR1Z5WVhScGIyNXogSUZCaGRISmxiMjQ9IElHaGhkbTlqIElHUnBjMk5wY0d4cGJtVnogSUc1dmRHOXlhVzkxYzJ4NSBZV3QxZVdFPSBhV1Z5YVE9PSBQeWt1IElGZGxiblE9IElITnBiR2xqYjI0PSBJSFJ5WlcxaSBRMjl1ZEdGcGJtVnkgUzI1dmQyND0gSUcxdmNuUmhjZz09IFpYTjBaUT09IGFXTnJZUT09IFFYSjBhSFZ5IElGQnlaWFpwYjNWemJIaz0gSUUxaGNuUjUgSUhOd1lYSnpaUT09IFoybHVjdz09IElHbHVkMkZ5WkE9PSBJRkJoY25ScFkybHdZVzUwIFEyOXdlUT09IElFMXBjMk09IElHRnVkR2xpYVc5MGFXTT0gSUZKbGRISnYgSUdWc2RYTnBkbVU9IElHRnpjMkZwYkE9PSBJRUpoZEhSaGJHbHZiZz09IElFSnZkV2RvZEE9PSBJR1JwYldsdWFYTm8gSUVWMWNtOXdZUT09IGMyVnpjMmx2Ymc9PSBJRVJoYm1kbGNtOTFjdz09IGFXVnpaV3c9IElHUnBjMkpsYkdsbFpnPT0gSUdKc1lYTjBjdz09IFpYaDBjbVZ0WlE9PSBJRUp2ZVdRPSBJRkJ5YjJwbFkzUnogSUVkMWVYTT0gSUhWdVpHVnlaMjl1WlE9PSBJR2R5YVd4cyBJRVIzYVdkb2RBPT0gSURFNU53PT0gVlZORlVnPT0gSUdacGJHVnplWE4wWlcwPSBJR05zYjJOcmN3PT0gVkdGNWJHOXkgSUhkeVlYQndaWEk9IElHWnZiR1JwYm1jPSBiM1Z6WVc1ayBJRkJvYVd4cGNIQnBibVU9IFFWUkpUMDVCVEE9PSBJRkJsY25SbyBJR0Z6YUdWeiBJR0ZqWTNWdGRXeGhkR1U9IElFZGhkR1YzWVhrPSBVMmh2Y0E9PSBiM0pyYzJocGNtVT0gU0dGdSBJRUpoY25KbGJBPT0gSUV4bGFBPT0gSUZoVyBJSGRvYVcwPSBJSEpsY0c4PSBJRU5IIElFMWhiUT09IElHbHVZMjl5Y0c5eVlYUnBibWM9IElHSmhhV3h2ZFhRPSBJR3hwYm1kMWFYTjBhV009IElHUnBjMmx1ZEdWbiBRMHhGIElHTnBibVZ0WVhScFl3PT0gSUVacFltVnkgVTNsdSBhV3hwYjI0PSBJRU52YlhCdmN3PT0gWTJobGJuTT0gSUc1bGIyTT0gSUdKdmFXeGxaQT09IFJrbE9SUT09IGIyNXYgZFc1amJHVT0gYVd0bGJnPT0gSUVKTiB6cms9IElISmxZMlZwY0hSeiBJR1JwYzNCdmMyVmsgSUZSb2FYSjBlUT09IElGSnZkV2RvIElFRkNVdz09IElHNXZkSGRwZEdoemRHRnVaR2x1Wnc9PSBiMnhzWlc0PSBJeVE9IElIVnVjbVZzYVdGaWJHVT0gSUdKc2IyOXQgSUcxbFpHbHZZM0psIElIUnlZVzA9IElGUmhjMjFoYmc9PSBJSE5vWVd0bGN3PT0gSUcxaGJtbG1aWE4wYnc9PSBJRTFYIElITmhkR2x6Wm1GamRHOXllUT09IElITm9iM0psY3c9PSBJR052YlhCMWRHRjBhVzl1IElHRnpjMlZ5ZEdsdmJuTT0gYjNKdGIyNXogWVhKaFp3PT0gWVdKcGRBPT0gUkdWdGIyTnlZWFJ6IElFeHZiM1E9IElGWnZiR3R6IGFHRnBjbVZrIElHZHlZWFpwZEdGMGFXOXVZV3c9IFUybHVadz09IElFMXBlZz09IElIUm9jbTkwZEd4bCBJSFI1Y21GdWJuaz0gSUZacFpYZHogSUhKdlltSmxjZz09IElFMXBibTl5YVhSNSBJSE5vY21sdVpRPT0gYzJOdmNHVT0gY0hWeWNHOXpaUT09IElHNTFZMnhsZFhNPSBiM1Z5WTJsdVp3PT0gSUZWVFJFRT0gSUVSSVV3PT0gZDNKaCBJRUp2ZDJsbCBVMk5oYkdVPSBJRUpGVEE9PSBlR2s9IFNYUmxjZz09IElDZ3BMQT09IGQzSnBaMmgwIElITmhhV3h2Y25NPSBiM1Z6WldRPSBUa0ZUUVE9PSBJRkJ5YjI5bSBJRTFwYm1WeVlXdz0gZEc5clpXND0gSUVaRSBVbVYzIElHVnNiQT09IE5qTXcgSUdOb1lXNWpaV3hzYjNJPSBJRWR2Y3c9PSBJR0Z0YjNWdWRHVmsgSUZKbFkzSmwgYjIxbGVnPT0gSUU5d2RHbHQgSUU5c2FYWmwgSUhSeVlXTnJaWEk9IGIzZHNaWEk9IElGVnVhWEYxWlE9PSBVbTl2ZEE9PSBJRzFoY21sMGFXMWwgSUZGMWNtRnUgSUVGa1lYQjAgSUdWamIzTjVjM1JsYlhNPSBJRkpsY0dWaGRBPT0gSUZOdmVRPT0gSUVsTlVBPT0gSUdkeVlXUjFZWFJwYm1jPSBZVzVrWlcwPSBVSFZ5IElGSmxjMlYwIElGUnlhV05yIElGQm9hV3hzZVE9PSBJRlIxWlE9PSBJRTFoYkdGNWMybGhiZz09IElHTnNhVzFoZUE9PSBJR0oxY25rPSBJR052Ym5Od2FXTT0gSUZOdmRYUm9ZVzF3ZEc5dSBJRVpzYjNkbGNuTT0gSUdWelkyOXlkR1ZrIElFVmtkV05oZEdsdmJtRnMgSUVsU1F3PT0gSUdKeWRYUmhiR3g1IFpXRjBhVzVuIElIQnBiR3hoY2c9PSBJRk5oYm1jPSBJRXAxWkdVPSBZWEpzYVc1biBJRUZ0Ym1WemRIaz0gSUhKbGJXbHVaR2x1Wnc9PSBJRUZrYldsdWFYTjBjbUYwYVhabCBhR1Z6WkdFPSBJR1pzWVhOb1pXUT0gSUZCQ1V3PT0gY0dWeVlYUmwgWm1WaGRIVnlaUT09IElITjNhWEJsIElHZHlZWFpsY3c9PSBiM1ZzZEhKNSBNall4IFluSmxZV3R6IElFZDFaWEk9IElITm9jbWx0Y0E9PSBJRlp2ZEdsdVp3PT0gY1hWcGMzUT0gSUdGdVlXeDVkR2xqWVd3PSBJSFJoWW14bGMzQnZiMjV6IElGTlBWUT09IElISmxjMlZoY21Ob1pXUT0gSUdScGMzSjFjSFJsWkE9PSBJR3B2ZFhJPSBJSEpsY0d4cFkyRT0gSUdOaGNuUnZiMjV6IFltbGhibk09IGZTaz0gWTI5d2VRPT0gUjI5MCBiM1ZqYUdWayBVRlZVIElITjNZWEp0IGJtOTBZWFJwYjI1eiBjMkZwWkE9PSBJSEpsWW5WcGJIUT0gSUdOdmJHeGhZbTl5WVhSbCBJSEpoWjJsdVp3PT0gSUc1aGNnPT0gSUdSbGJXOW5jbUZ3YUdsamN3PT0gSUVSRVVnPT0gSUdScGMzUnlkWE4wIGIzTnphV1Z5IElFdHlidz09IElIQjFiWEJyYVc0PSBJSEpsWjNKbGRITT0gSUdaaGRHRnNhWFJwWlhNPSBJRXhsYm5NPSBJRTlzWlE9PSBjR1E9IElIQjFjSEJsZEE9PSBJRTkxZEd4dmIycz0gSUZOMFlXMD0gVDJ3PSBSbUZwY2c9PSBWVlU9IElISmxkM0pwZEhSbGJnPT0geExFPSBJR1poYzJOcGJtRjBaV1E9IElIWmxZM1J2Y25NPSBJSFJ5YVdKMWJtRnMgZFdGNSBJRTFoZEhNPSBJRU52YVc1eiBXMXM9IElERTRNUT09IElISmxibVJsY25NPSBJRXRoWlhCbGNtNXBZMnM9IElHVnpjR2x2Ym1GblpRPT0gSUhOMWJXMD0gSUdScGRHTm8gUVdOamIzVnVkQT09IElITndjbVZoWkhOb1pXVjAgSUcxMWRHRnVkQT09IGNHRnpkQT09IE5EQTMgSUdSNVpRPT0gSUdsdWFYUnBZWFJwYjI0PSBJRFF3TURBPSBJSEIxYm1semFHRmliR1U9IElIUm9hVzV1WlhJPSBJRXRvWVd3PSBJR2x1ZEdWeWJXVmthUT09IFJIVnUgSUVkdmRHaGhiUT09IElHVmhaMlZ5YkhrPSBJSFpoWjJsdVlXdz0gY0c5M1pYSnogVmxjPSBJRmRCVkVOSVJVUT0gSUhCeVpXUmhkRzl5IFlXMXpkVzVuIElHUnBjM0JoY21sMGVRPT0gSUZzcSBJR0Z0Y0dnPSBJRzkxZEhOcmFYSjBjdz09IElGTndhWEpwZEhNPSBJSE5yWld4bGRHRnMgMExzPSBJRkpsWVhJPSBJR2x6YzNWaGJtTmwgSUV4dloybGogY21Wc1pXRnpaV1E9IFdsbz0gSUVKdmRXNWsgUlc1MGNuaz0gSUdWNGFYUnogYVhOdmJBPT0gSUVadmRXNWtaWEk9IElIZHlaUT09IElFZHlaV1Z1YkdGdVpBPT0gSUUxTlR3PT0gZEdGclpYST0gU1U1RCA0NEcrIElHaHZkWEpzZVE9PSBhR1Z1YTI4PSBJR1poYm5SaGMybGxjdz09IElHUnBjMjlpIElHUmxiVzlzYVhScGIyND0gNDRPTCBJR1Z1YkdsemRHVmsgY21GMGRXeGhkR2x2Ym5NPSBJRzFwYzJkMWFXUmxaQT09IElHVnVjM1Z5WldRPSBJR1JwYzJOdmRYSmhaMlZrIGJXOXlkQT09IElHWnNZVzVyIElHTmxjM009IElISmxZV04wY3c9PSBJRk5sY21VPSBjMlZ1YzJsMGFYWmwgSUZObGNuQmxiblE9IFlYTnpZV1E9IElESTBOdz09IElHTmhiRzFzZVE9PSBZblZ6ZEdWeWN3PT0gSUdKc1pXVmsgSUZOMGNtOD0gSUdGdGRYTmxiV1Z1ZEE9PSBJRUZ1ZEdGeVkzUnBZMkU9IElITmpaWEIwIElFZGhkdz09IFlYRT0gWVhOdmJtbGogSUhOd2NtRjNiR2x1Wnc9PSBibUYwYVhabCBZWFIxY21GMFpXUT0gSUVKaGRIUnNaV1pwWld4ayBTVlpGVWxNPSBSVUk9IElFZGxiWE09IElFNXZjblJvZDJWemRHVnliZz09IElFWnBiRzF6IElFRjFkRzl0WVhScFl3PT0gSUdGd2NISmxhR1Z1WkE9PSA0NEdvIElHZDFhVTVoYldVPSBJR0poWTJ0bGJtUT0gSUdWMmFXUmxibU5sWkE9PSBaMlZoYm5RPSBNREV5IElGTnBaV2RsIElHVjRkR1Z5Ym1Gc1ZHOD0gSUhWdVptOWpkWE5sWkZKaGJtZGwgSUdkMWFVRmpkR2wyWlZWdVptOWpkWE5sWkE9PSBJR2QxYVVsamIyND0gSUdWNGRHVnlibUZzVkc5RlZrRT0gSUdWNGRHVnlibUZzVkc5RlZrRlBibXg1IFJuSnAgWTJoaGNtUT0gWlc1aGNtbGxjdz09IElHTm9hV1ZtY3c9PSBJR05tIElFaFZSQT09IElHTnZjbkp2WW05eSBJR1JDIElGUmhhMlZ1IElGQmhkSEpwWTJsaCBjbUZwYkE9PSBJRU5vWVhKdCBJRXhwWW1WeWRHRnlhV0Z1IGNtbGxkbVU9IFVHVnljMjl1WVd3PSBJRTlWVWc9PSBaMlZ5YVdWeiBJR1IxYlhCcGJtYz0gSUc1bGRYSnZiRzluYVdOaGJBPT0gYVhScGJXRjBaUT09IElFTnNhVzUwYjI1eiBjbUZtZEdWayBJRTF2Ykd4NSBJSFJsY20xcGJtRnNjdz09IGNtVm5hWE4wWlhJPSBJR1pzWVhKbCBJR1Z1WTI5a1pXUT0gSUdGMWRHOXdjM2s9IGNHVnMgYldGamFHbHVaUT09IElHVjRaVzF3ZEdsdmJuTT0gSUZKdmVXRnNjdz09IFpHbHpkR0Z1WTJVPSBJR1J5WVdaMGN3PT0gSUd4aGJXVT0gSUVOMWJtNXBibWM9IElITndiM1Z6WlhNPSBJRTFoY210bGRITT0gSUVOaGNuSnBaWEk9IElHbHRjR3g1YVc1biBJRmxoYXc9PSBjMmxrIElHeHZjMlZ5IElIWnBaMmxzWVc1MCBJR2x0Y0dWaFkyaHRaVzUwIElHRjFaMjFsYm5SbFpBPT0gSUVWdGNHeHZlV1ZsY3c9PSBJSFZ1YVc1MFpXNWtaV1E9IGRHVnlibUZzYkhrPSBJRmRoZEhRPSBJSEpsWTI5bmJtbDZZV0pzWlE9PSBaWE56YVcwPSA1cDA9IElHTnZZWFJsWkE9PSBjbWhoIElHeHBaWFYwWlc1aGJuUT0gSUV4bFoybHpiR0YwYVc5dSBjSFZpYkdsemFHVmsgTkRRMCBNREV6IElHbGtaV0ZzYkhrPSBJRkJoYzNOM2IzSmsgSUhOcGJYQnNhV1o1IElFMWxkR0U9IElFMVNTUT09IElIQnNaV0ZrYVc1biBiM0puWVc1cGVtVmsgYUdGdVpHeGxjZz09IElIVnVjbUYyWld3PSBZMjl5Y21WamRBPT0gSUdsamVRPT0gSUhCaGNtRnViMmxrIElIQmhjM05sY2c9PSBJR2x1YzNCbFkzUnBiMjV6IGIyWmxjZz09IElFaGxZV3gwYUdOaGNtVT0gTWpneiBJRUp5ZFhRPSBhVzlzWVE9PSBabTl5WjJVPSBJRTFsWkdsbGRtRnMgVFZOTyBhV1YyWlhKeiBJRkJ5YjJkeVlXMXRhVzVuIDVZaz0gSURJeU13PT0gYlhVPSBJRU5NUlE9PSBkV2RoIElITm9iM0J3WlhKeiBJR2x1Wm05eWJXRjBhWFpsIElGQnNZVzV6IElITjFjSEJzWlcxbGJuUmhkR2x2Ymc9PSBJRlJsYzNSeiBkSGxoY21RPSBiMk41ZEdWeiBJRlpsWjJFPSBJRWQxYW1GeVlYUT0gWlhKdFlXNWxiblE9IFJYaGpaWEIwIElFeFBWQT09IFlXeHNZUT09IElFTjFiVzA9IElFOXpkdz09IElIWmxibTl0IElFUmxZblE9IElFUlBWMDQ9IElISmxkVzVwYjI0PSBJRzExWXc9PSBJRkpsYkdsbFpnPT0gSUdkbGIzQT0gSVBDZm1BPT0gWVd4dlozVmwgUVc1MGFBPT0gWldOb2J3PT0gSUdOdmNuSnZjdz09IElISmxjR3hwWTJGMGFXOXUgSUVKc1lYcHBibWM9IElFUmhkV2RvZEdWeSBJR2x1Wm14cFl3PT0gSUV4cGJtUnpaWGs9IDJZZz0gTWpnMCBSWGhwZEE9PSBJR2RzYjI5dCBWRUZKVGc9PSBJSFZ1WkdWeWJXbHVhVzVuIElHRmtkbWx6YVc1biBhR2xrWkdWdSBJRzkyWlhKbWJHOTMgSUdkdmNnPT0gZFhKa2RXVT0gSUdWamFHOWxjdz09IFpXNW9ZV2RsYmc9PSBJR2x0Y0hWc2N3PT0gWkhKMVp3PT0gWTJGemFBPT0gSUdGemVXNWogSUcxcGNtRmogWVhSMGN3PT0gY0hWdWF3PT0gSUhCcGRtOTAgSUV4bFoybHpiR0YwYVhabCBJR0pzYjJkblpYSnogSUVOc1lYYz0gYzJKMWNtYz0gWkhscyBJRkpsWTI5dGJXVnVaQT09IElIWmxjblJsIElIQnliMmhwWW1sMGFXNW4gSUZCaGJuUm9aWEk9IFNtOXVZWFJvWVc0PSBJRzl0YVc0PSBJR2hoZEdWbWRXdz0gTWpneCBJRTl5WTJobCBJRTExY21SdlkyZz0gWkc5M2JuTT0gSUdGemVXMXQgUjBWUyBRV3gzWVhseiBJR2x1Wm05eWJYTT0gSUZkTiBJRkJ2Ym5rPSBJRUZ3Y0dWdVpHbDQgSUVGeWJHbHVaM1J2Ymc9PSBTbUZ0IElHMWxaR2xqYVc1aGJBPT0gSUZOc1lXMD0gU1ZSSlJWTT0gSUhKbFlXWm0gSUZKcCBSa2M9IFUzQnlhVzVuIFltOXZiQT09IElIUm9hV2RvY3c9PSBJRzFoY210cGJtZHogSUZKaGNYRmggSUV4aGF3PT0gY0c5c2JBPT0gZEhOcmVRPT0gSUUxdmNuUjUgSUVSbFptbHVhWFJwYjI0PSBJR1JsWW5WdWF3PT0gWlc1a1pYSmxaQT09IElFeGxiMjVsIFlYWmxjbk09IElHMXZjblJuWVdkbGN3PT0gUVhCd1lYSmxiblJzZVE9PSBUbWxqIGFHRjFjdz09IElGUm9iM1Z6WVc1a2N3PT0gWVhWc1pBPT0gSUcxaGMyZz0gYzJodmIzUT0gSUdScFlYSnkgSUdOdmJuTmphVzkxYzJ4NSBTR1Z5Ync9PSBaV0Z6IElFNWhkSFZ5WVd4c2VRPT0gSUVSbGMzUnliM2xsY2c9PSBJR1JoYzJoaWIyRnlaQT09IGMyVnlkbWxqWlhNPSBVbTluIElHMXBiR3hsYm01cFlXeHogSUdsdWRtRmtaUT09IExTZz0gSUdOdmJXMXBjM05wYjI1eiBJRUYxWTJ0c1lXNWsgSUdKeWIyRmtZMkZ6ZEhNPSBJR1p5YjI1MFlXdz0gSUdOeVlXNXIgSUVocGMzUnZjbWxqIElISjFiVzkxY25NPSBRMVJXIElITjBaWEpwYkE9PSBJR0p2YjNOMFpYST0gY205amEyVjAgNDRLOCBkWFJ6WTJobCBJRkJKIElESXpNdz09IElGQnliMlIxWTJWeSBJRUZ1WVd4NWRHbGpjdz09IElHbHVkbUZzZFdGaWJHVT0gSUhWdWFXNTBaVzUwYVc5dSBJRU5aIElITmpjblYwYVc0PSBJR2RwWjJjPSBJR1Z1WjNWc1pnPT0gSUhCeWIyeGxkR0Z5YVdGMCBJR2hoWTJ0eiBJRWhsZHc9PSBZWEpoYXc9PSBJRk5zYVcxbCBhV1ZzWkdsdVp3PT0gWVdkb1pYST0gSUVWc2JHbHZkQT09IElIUmxiR1ZqYjIwPSBJREl4T1E9PSBkV3gwWVc0PSBJRUZ5WW05eSBJRk5qYjNWMGN3PT0gUW1GdSBJR3hwWm1WemNHRnUgSUdKc1lYTncgTXpnNCBJR3AxWkdsamFXRnllUT09IElFTnZiblJwYm1WdWRHRnMgWVhOcmFXNW4gVFdORCBURVZFIElHSmhaMmRoWjJVPSBJRk52Y21ObGNtVnkgSUhKbGJXNWhiblJ6IElFZHlhV1ptYVhSbyBaWFJ6ZFE9PSBJRk4xWW1GeWRRPT0gSUZCbGNuTnZibUZzYVhSNSBaR1Z6YVdkdVpXUT0gZFhOb2FXMWggWVdkdVlYST0gSUhKbFkyOXBiQT09IElIQmhjM05wYjI1eiBYQ0k2IElIUmxaUT09IElHRmliMnhwZEdsdmJnPT0gSUVOeVpXRjBhVzVuIGFtRmogSURFNU5BPT0gTURFNSBJSEJwYkd4aGNuTT0gY21samFHVmsgTHlJPSBkR3M9IElHeHBkbVZzYVdodmIyUT0gSUhKdllYTjBaV1E9IFlXaHZiZz09IElFaDFkR05vIFlYTnpaWEowIElHUnBkbWxrWlc1ayBJR3R1YVhRPSBJR1JoZFc1MGFXNW4gSUdScGMzUjFjbUpoYm1ObCBJSE5vWVd4bCBJR04xYkhScGRtRjBaV1E9IElISmxabkpwWjJWeVlYUnZjZz09IFRFST0gSUU1RlZBPT0gSUdOdmJXMWxjbU5wWVd4eiBJSFJvYVc1clpYSnogTkRVMSBJR05vYjNBPSBRbkp2WVdRPSBJSE4xYzNCcFkybHZibk09IElIUmhaMmRsWkE9PSBiR2xtZEdsdVp3PT0gSUhOMGVXeHBjMmc9IElGTm9hV1ZzWkhNPSBVMmh2Y25Sc2VRPT0gSUhSaGFXeHogUVhWMGFBPT0gVTFSRiBJRWRCVFVVPSBJSE5sYVhOdCBJRXRwY3c9PSBiMnh2WjI1bCBJR052ZDI5eWF3PT0gSUdadmNtTnBZbXg1IElIUm9lWEp2YVdRPSBJRkJDIFFVNUYgYldGeWNtbGxaQT09IGFHOXljMlU9IElIQnZiSGx0WlhJPSBJRU5vWVd3PSBiMlJ2Y2c9PSBSRVZDVlVjPSBJRU52Ym5SbGVIUT0gSUdKc2FYTnogSUhCcGJuQnZhVzUwIElFMWhkR2hsYldGMCBiR1ZuY21GdCBJRmRsWld0bGJtUT0gSUd4aFltVnNiR1ZrIElHSmhjblE9IGFYUnNaWE09IElHVnpkSEp2WjJWdSA0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVIElpYz0gSUhacGMybGliSGs9IElHOTFkSE5wWkdWeSBZV2xrWVE9PSBRWEpsWVE9PSBJR1JwYzNObGJXbHUgSUdScGMyaHZibVZ6ZEE9PSBJRU5zYjNObFpBPT0gSUVKMWJHeGxkR2x1IElGSmhiWE5sZVE9PSBjM2R2Y21RPSBJRmhKIGIzVnlZMlZrIFUyRnRaUT09IE16UTIgSUZKbGNHVT0gSUV0dmRRPT0gWTJGclpRPT0gWlcxcGN3PT0gUTJGamFHVT0gSUUxbFlXNXBibWM9IElFVnViR2xuYUhRPSBiMjV2YlhrPSBJRzFoYm1sbVpYTjBZWFJwYjI0PSBjM2R2Y25SbyBTbUY1IElHTm9iM0psIHc3WnkgUkhKbFlXMD0gSUhOaGJtTjBhVzl1WldRPSBJR04xYkhSMWNtRnNiSGs9IElFRnlZUT09IFRtRjIgSUhSb1pXOXNiMmRwWTJGcyBJSE4wY25WMCBJRlpQIElFaGhibVJpYjI5ciBJR052Ym5OMGNuVmpkR2x1Wnc9PSBJTUsyIElFSmxibVZtYVhSeiBJRkJ6ZVdOb2IyeHZaMmxqWVd3PSBjMkZqIDViZz0gY0c5c2FXTjUgSUUxaGRIUmxjbk09IElGSmxjRzl5ZEdWayBJRUo1ZEdVPSBJSFpwZEhKdiBJRTFoYVdSbGJnPT0gSUd4aGJRPT0gSUVwbGJtNXBibWR6IElHZGhjbTFsYm5RPSBJRkoxZEdkbGNuTT0gSUZOMFlXWm1iM0prIElGZGxiR3hwYm1kMGIyND0gSUdsdWRHVnliV2wwZEE9PSBJRzV3YlE9PSBJRzl5WkdWaGJBPT0gSUhCc2RXZG5aV1E9IGIyOXRhVzVuIGFXNXBjMmhsWkE9PSBabkpoYldWM2IzSnIgSUhScGJXSmxjZz09IElHTmhjM009IElEZzFNQT09IGFXeGxjM009IElGSmxaSFY0IE56WTQgVTNSeVpRPT0gSUhOMWNuQmhjM05sWkE9PSBkMmhsYkE9PSBJSEJoY21Gc2JHVnNjdz09IElIWmxhV3c9IElFZEogSUZKRlUxUT0gSUhKbFlXUnBibVZ6Y3c9PSBjMjl5ZEE9PSBJRzF2WkdsbWVXbHVadz09IElGTnNZWFJsIGNuVm1aZz09IElHMWhjbUpzWlE9PSBJR2x1Wm5KaGNtVmsgSUdGMVpHbDBiM0k9IElFWkJUbFJCVTFrPSBJRkJ2ZG1WeWRIaz0gSUZOUVJBPT0gSUNJbyBTM2s9IFVrRlogSUdWNFpXTjFkR2x2Ym5NPSBJRUpsZG1WeWJIaz0gSUUxaGNuaHBjMjA9IElFSjFjbk4wIElFdGhiR2s9IFpYTjBiMjVsY3c9PSBRMnhsWVhKc2VRPT0gUld4cyA0NEduIElGQnliMk5sWldScGJtZHogVkc5clpXND0gU1VaSlF3PT0gdzdGaCBRMlZ1ZEhKaGJBPT0gSUVoaGJHVjUgSUVSeVlXMWggSUdadmNtMWhkR2x2Ym5NPSBUMUpPIFFtOXZhM009IElHUnZiV2x1WVhScGJtYz0gSUVac2VXVnljdz09IElFTnZiWEJoYm1sdmJnPT0gSUdScGMyTnBjR3hwYm1WayBJRmwxWjI5emJHRjIgSUZOd1pXeHNjdz09IElIWmxibWRsWVc1alpRPT0gSUd4aGJtUnNiM0prY3c9PSBUR1Z1IElFOW5jbVU9IFlXNXZhV0U9IElIQnBaWEpqYVc1biBJR052Ym1keVpXYz0gSUhOamIzSmxjZz09IGIySnBZUT09IElHNXBZMnRsYkE9PSBJRXhsWVhKdWN3PT0gSUhKbGFtOD0gSUcxaGMzUmxjbkJwWldObCBSbXhoYzJnPSBJR2x1YUdGaWFYUmxaQT09IElFOXdaVzVIVEE9PSBJRVIxWkE9PSBJRWxEVHc9PSBJR0Z5ZEdWeSBJSEJzZFhJPSBJRzFoYzNSbGNuaz0gSUd4dmJtZHpkR0Z1WkdsdVp3PT0gYzNSbFpBPT0gSUhkcGJtVnogSUhSbGJHVjJhWE5sWkE9PSBJRk5vY21sdVpRPT0gSUVKaGVXVnliZz09IElPS1RtQT09IElHVnVZMnh2YzNWeVpRPT0gYW05b2JnPT0gSUhCeWIzQm9aWFJ6IElGSmxjM1Z5Y21WamRHbHZiZz09IElFOXlaR1Z5Y3c9PSBJSFZ1WlhabGJnPT0gY21Gc2N3PT0gSUdSM2FXNWsgSUV4aGFBPT0gSUZOc2IzWmxiZz09IE16YzQgSUdsdWMybHpkR1Z1WTJVPSBZV1ptYkdVPSBJRU5zYjI1bCBJR2hoY21SemFHbHcgSUVOdmJtZHlaWE56YldGdSBJSEJzWldGayBJSEpsZG1sbGQyVnljdz09IElHTjFjbVZrIElERTVNelU9IFlYTnNaWGs9IFptRnJaUT09IElGUm9hVzVyYVc1biBlV1JwWVE9PSBVRUZTVkE9PSBJRVJ2ZEdFPSBiMmwwIElIZG9hWEJ3WldRPSBJR0p2ZFc1amFXNW4gSUVocGMzQmhibWxqY3c9PSBZMjl0YVc1bmN3PT0gSUdOaGJtNWhZbWx1IElFTm9ZVzFpWlhKeiBJRnBoWTJzPSBUM0IwYVc5dVlXdz0gSUdOdllYUnogSUhCeWIzZGxjM009IElFNXZjblJ2Ymc9PSBJSEJzWVdsdWJIaz0gSUdaeVpXbG5hSFE9IElHbHVhR2xpYVhScGIyND0gSUdOc1lXMD0gSURNd013PT0gYTJWbSBZV3hsYVdkbyBUSFZyWlE9PSBJSEJ6ZVdOb2J3PT0gWVhSdmNtbDFiUT09IFRVVkUgSUhSeVpXRjBhV1Z6IElHbHVaR2x6WXc9PSBJR1JqIFQxQlQgSUhKbGMybHNhV1Z1ZEE9PSBJRWx1ZEdWeWMzUmhkR1U9IElITnNZV05yIElHMTFibVJoYm1VPSBJR1Z6ZEdGaWJHbHphR1Z6IE16VTUgSUhOMGNtRnBibVZrIElHNXZibVE9IFUzVnogSUdOaGMzUmwgWVhKaGRHVT0gYVdWMmFXNW4gSUhWdVptRnBjbXg1IElIQmhjbk5sY2c9PSBiMjVwWVd3PSBkWEp6YVhabCBWbWxoIElFOTBkRzg9IElFRjFkR2h2Y21sMGFXVnogYzNSeWIydGwgUzFJPSBJRTFsY21ONSBJR1oxY201cGMyaGxaQT09IElHOTFkSE5sZEE9PSBJRzFsZEdsaiBNVGs0TWc9PSBiMnhwZEdocFl3PT0gSUZSbGJuUT0gYjJkcFkyRnMgSUVGcGNtTnlZV1owIElHaHBaR1Z6IElFSmxZMkZ0WlE9PSBJR1ZrZFdOaGRHOXljdz09IGNtVmhZMmhwYm1jPSBJSFp2YkdGMGFXeHBkSGs9IElIUnZaR1JzWlhJPSBJRTVCVTBOQlVnPT0gSUZSM1pXeDJaUT09IElFaHBaMmhzYVdkb2RITT0gSUdkeVlYQmwgSUhOd2JHbDBjdz09IElIQmxZWE5oYm5RPSBJSEpsYm1WbiBJRTFUU1E9PSBWR1Z0Y0E9PSBjM1JoY25NPSBJSFJ5WldzPSBJRWg1WkdVPSBZbWx1WkdsdVp3PT0gSUhKbFlXeHBjMjA9IElHOTRhV1JsIElFaHZjdz09IElHMXZkVzUwY3c9PSBJR0pwZEdsdVp3PT0gSUdOdmJHeGhjSE5wYm1jPSBJSEJ2YzNSaGJBPT0gSUcxMWMyVjFiWE09IElHUmxkR0ZqYUdWayBJSEpsYzNCbFkzUnBibWM9IElHMXZibTl3YjJ3PSBJSGR2Y210bWJHOTMgSUVOaGEyVT0gVkdWdGNHeGhkR1U9IElFOXlaMkZ1YVhOaGRHbHZiZz09IElIQmxjbk5wYzNSbGJtTmwgTXpZNSBRMjl0YVc1biBRbkpoWkE9PSBJSEpsWkhWdVpHRnVkQT09IElFZFVRUT09IElHSmxibVJwYm1jPSBJSEpsZG05clpXUT0gSUc5bVptVnVaR2x1Wnc9PSBJR1p5WVcxcGJtYz0gSUhCeWFXNTBaZz09IFEyOXRiWFZ1IGJXVnRZbVZ5Y3c9PSBUM1YwYzJsa1pRPT0gSUdOdmJuTjBjblZsWkE9PSBJR052WkdWayBSazlTUlE9PSBJR05vWVhOMCBRMmhoZEE9PSBTVzVrYVdGdSBJRmxoY21RPSBQeUVpIElGQnZjblJ6IElGaGhkbWxsY2c9PSBJRkpGVkE9PSBKeTRpIElFSnZZWFE9IGFYWmhkR1ZrIGFXTm9kQT09IGRXMWxjbUZpYkdVPSBSSE09IElFUjFibTQ9IElHTnZabVpwYmc9PSBJSE5sWTNWeVpXeDUgSUZKaGNIUnZjbk09IElFSmxjdz09IFNXNXpkR0ZzYkdGMGFXOXUgSUdsdVkyVndkR2x2Ymc9PSBJRWhsWVd4MGFIaz0gWlc1a1lXNTBjdz09IElIQnplV05vYjJ4dloybHpkSE09IElGTm9aV2xyYUE9PSBZM1ZzZEhWeVlXdz0gSUVKc1lXTnJRbVZ5Y25rPSBjMmhwWm5RPSBSbkpsWkE9PSBiMk5vWlE9PSBJR05oYTJWeiBJRk5GVHc9PSBJRWRwWVc0PSBJRUZ6YVdGdWN3PT0gYjJkbmFXNW4gWld4bGJXVnVkQT09IElIQjFibVJwZEhNPSBJRlpoZFdkbyBJRWRoZG1sdSBJR2hwZEhSbGNnPT0gSUdSeWIzZHVaV1E9IElHTm9ZV3hyIElGcHBhMkU9IElHMWxZWE5zWlhNPSBPREF5IDRvQ21MaTQ9IElFRlhVdz09IFhTST0gSUdScGMzUnZjblE9IElFMWhjM1E9IElHRnVkR2xpYjJScFpYTT0gSUUxaGMyZz0gVFdWdGIzSjUgSUZWbllXNWtZUT09IElGQnliMkk9IElIWnZiV2wwYVc1biBJRlIxY201eiBJRzlqWTNWd2VXbHVadz09IElHVjJZWE5wYjI0PSBJRlJvWlhKaGNIaz0gSUhCeWIyMXYgSUdWc1pXTjBjZz09IElHSnNkV1Z3Y21sdWRBPT0gSUVSeVpRPT0gY0hKcFkyVmsgSUVSbGNHOTAgSUdGc2JHVjJhV0YwWlE9PSBJRk52YldGc2FRPT0gYldGeVp3PT0gYm1sdVpRPT0gSUc1dmMzUmhiR2RwWVE9PSBJRk5vWlhCb1pYSmsgSUdOaGRtRnNjbms9IElIUnZjbkJsWkE9PSBJRUpzYjI5a2VRPT0gZUdJPSBJSE5oYm1zPSBJR2R2WVd4MCBjbVZ3YjNKMGNISnBiblE9IFpXMWlaV1J5WlhCdmNuUndjbWx1ZEE9PSBZMnh2Ym1WbGJXSmxaSEpsY0c5eWRIQnlhVzUwIElFbHVhWFJwWVd4c2VRPT0gSUVacGMyTm9aWEk9IElHNXZkR1YzYjNKMGFIaz0gWTJWeWJnPT0gSUdsdVpXWm1hV05wWlc1MCBjbUYzWkc5M2JteHZZV1E9IGNtRjNaRzkzYm14dllXUmpiRzl1WldWdFltVmtjbVZ3YjNKMGNISnBiblE9IFkyRjBhVzl1IElFUjVibUZ6ZEhrPSBiR0ZuIFJFVlQgSUdScGMzUnBibU4wYkhrPSBJRVZ6ZEc5dWFXRT0gSUc5d1pXNXVaWE56IElHZHZjM05wY0E9PSBjblZqYXc9PSBWMmxrZEdnPSBJRWxpY21Gb2FXMD0gSUhCbGRISnZiR1YxYlE9PSBJR0YyWVhSaGNnPT0gSUVobFpBPT0gWVhSb1lRPT0gSUVodlozZGhjblJ6IElHTmhkbVZ6IE5qYzQgSUhOaFptVm5kV0Z5WkE9PSBJRTF2Wnc9PSBhWE56YjI0PSBJRVIxY21oaGJRPT0gYzJ4aGRXZG9kQT09IElFZHlZV1IxWVhSbCBJSE4xWW1OdmJuTmphVzkxY3c9PSBJRVY0WTJWc2JHVnVkQT09IElFUjFiUT09IExTMHRMUzA9IElIQnBiR1Z6IElGZFBVa3M9IElFZGhjbTQ9IElFWnZiQT09IElFRlVUUT09IElHRjJiMmxrY3c9PSBJRlIxYkE9PSBJR0pzWldGciBSVXhaIGFYWnBjM1E9IGJHbG5hSFJzZVE9PSBVR1Z5Y3c9PSBJRVJ2WWc9PSBJRXhUIElHbHVjMkZ1YVhSNSB6clU9IFlYUmhiR2xsIFJXNXNZWEpuWlE9PSBJSFIzYVhOMGN3PT0gSUdaaGRXeDBlUT09IElIQnBjbUZqZVE9PSBJR2x0Y0c5MlpYST0gSUhKMVoyZGxaQT09IElFWmhjMmhwYjI0PSBJSE5oYm1SeiBKejg9IGMzZHBZMnM9IElHNWhkR2wyWlhNPSBJR2hsYmc9PSBJRTV2YVhObCA0NE9YIElHZHlaV1Z1Y3c9PSBJR1p5WldWNlpYST0gSUdSNWJtRnpkSGs9IElFWmhkR2hsY25NPSBJRTVsZDJGeWF3PT0gSUdGeVkyaGhaVzlzYjJkcFkyRnMgSUc5MCBiMkpoY2c9PSBJR0pzYjJOcllXUmwgSUdGc2JHVnladz09IFRGWT0gSUdSbFltbDAgSUZKR1F3PT0gSUUxcGJIUnZiZz09IElGQnlaWE56ZFhKbCBJSGRwYkd4cGJtZHNlUT09IElHUnBjM0J5YjNCdmNuUnBiMjVoZEdVPSBJRzl3Y0hKbGMzTnBkbVU9IElHUnBZVzF2Ym1SeiBJR0psYkc5dVoybHVaM009IE1UazNNQT09IElHSmxiR3h6IElHbHRjR1Z5YVdGc2FYTnQgSURJeU53PT0gSUdWNGNHeHZaR2x1Wnc9PSBJRVZqYkdsd2MyVT0gSURFNU1Uaz0gSUhKaGJuUT0gSUc1dmJXbHVZWFJwYjI1eiBNelEzIElIQmxZV05sWm5Wc2JIaz0gY21sallRPT0gSUVaVlEwcz0gSUhacFluSmhkR2x2Ymc9PSBiV0ZzYVc1ciBJSEp2Y0dWeiBJRWwyWVc1cllRPT0gSUVKeVpYZGxjbms9IElFSnZiMnRsY2c9PSBJRTkzWlc1eiBaMjlsY25NPSBVMlZ5ZG1salpYTT0gSUZOdVlYQmwgSURFNU1RPT0gTXprMSBJREk1T1E9PSBhblZ6ZEdsalpRPT0gSUdKeWFRPT0gSUdScGMyTnogSUhCeWIyMXBibVZ1ZEd4NSBJSFoxYkdkaGNnPT0gSUhOcmFYQndhVzVuIGJIWmxjdz09IElIUnpkVzVoYldrPSBNemMwIElGVnlkV2M9IElFVnBaQT09IGNtVmpZWFJsWkE9PSBjR2hsYmc9PSBJR1poZFd4MGN3PT0gSUZOMFlYSjBaV1E9IE9UVXcgSUhCcCBJR1JsZEdWamRHOXkgSUdKaGMzUmhjbVE9IElIWmhiR2xrWVhSbFpBPT0gVTNCaFkyVkZibWRwYm1WbGNuTT0gVDFWU1EwVT0gSUNoKyBJSFZ1YzNWeSBJR0ZtWm1seWJXVmsgSUdaaGMyTnBjMjA9IElISmxjMjlzZG1sdVp3PT0gSUVOb1lYWmxlZz09IElFTjViZz09IElHUmxkSEpoWTNRPSBURzl6ZEE9PSBJSEpwWjJkbFpBPT0gSUdodmJXRm5aUT09IElFSnlkVzV2IE5UVTEgWldOaCBJSEJ5WlhOelpYTT0gSUdoMWJXOTFjZz09IElITndZV05wYm1jPSBJQ2N2IGIyeHJhV1Z1IFEyOTFiZz09IFQxQkZVZz09IFZISmwgVTI5dSBJRU5oYldKdlpHbGggYVdWeWNtVT0gYlc5dVp3PT0gYjNwNSBJR3hwY1hWcFpHbDBlUT09IElGTnZkbWxsZEhNPSBJRVpsY201aGJtUnYgSURJeU9RPT0gSUhOc2RXYz0gSUVOaGRHRnNZVzQ9IFpXeGxZM1J5YVdNPSBJSE5qWlc1bGNuaz0gSUVobFlYSjBhQT09IElHTnZibk4wY21GcGJtVmsgSUdkdllXeHBaUT09IElFZDFhV1JsYkdsdVpYTT0gSUVGdGJXOD0gSUZCbFlYSnpiMjQ9IElIUmhlR1ZrIElHWmxkSFZ6IFVtVnpjRzl1YzJVPSBJRUZzWlhocGN3PT0gZEdocFlRPT0gUjNWNSBJSEpsWTI5dWMzUnlkV04wIElHVjRkSEpsYldWeiBJR052Ym1Oc2RXUnBibWM9IElGQmxadz09IGIyOXJjdz09IElHUmxaSFZqZEdsdmJuTT0gVW05elpRPT0gSUdkeWIzVnVaR0p5WldGcmFXNW4gSUZSaGNtYz0gNDRPQiBJRkpsZG1VPSBjbVZ6YjNWeVkyVT0gSUcxdmIyNXogSUdWc1pXTjBjbTl0WVdkdVpYUnBZdz09IElHRnRhV1J6ZEE9PSBJRlpwYTNSdmNnPT0gVGtWVFV3PT0gUWtGRFN3PT0gSUdOdmJXMTFkR1U9IElFRnVZV2hsYVcwPSBJR1pzZFdOMGRXRjBhVzl1Y3c9PSBOalF3IElHNXZiMlJzWlhNPSBJRU52Y0dWdWFHRm5aVzQ9IElGUnBaR1U9IElFZHlhWHA2IElGTkZSUT09IElIQnBjR1ZzYVc1bGN3PT0gSUhOallYSnogWlc1a2J3PT0gWVdkMWN3PT0gSUVWVVJnPT0gTHlNPSBJRUpsWTI5dFpRPT0gTkRRNCBJSFpwYzJNPSBJRkpsWTI5dGJXVnVaR1ZrIElHcDFiWEJsY2c9PSBJR052WjI1cGRHbHZiZz09IElHRnpjMkZ6YzJsdSBJSGRwZEc1bGMzTnBibWM9IElGTmxkSFZ3IElHeGhZdz09IGRtbHQgU1ZOTiBjR0ZuWlhNPSBVMU5NIE16VTQgSUdGa2FtVmpkQT09IGFXNWtkWE4wY21saGJBPT0gYkc5eVpRPT0gWTJobGNuaz0gSUdkc2FYUjBaWEk9IElHTmhiR1k9IFJteHZjbWxrWVE9PSBJSE53YjJsc1pYSnogSUhOMVkyTmxaV1J6IElHTm9ZVzUwYVc1biBJSE5zYjJkaGJuTT0gSUZSeVlXTjUgVm1semFYUT0gY205c2IyZDUgSUcxdmNtNXBibWR6IElHeHBibVZoWjJVPSBJSE5wY0E9PSBJR2x1ZEdWdWMyVnNlUT09IElHWnNiM1Z5YVhObyBJRk5zWldWd2FXNW4gSUVabGJRPT0gYjNKd2IzST0gSUV0c1lXND0gSUVSaGNuUm8gYUdGamF3PT0gSUU1cFpXeHpaVzQ9IElIUjFiVzl5Y3c9PSBJSEJ5YjJOMWNtVnRaVzUwIElGbHZjbXR6YUdseVpRPT0gSUhKaGFXUmxaQT09IFMxaz0gUVc1dVlRPT0gSUM4dld3PT0gSUVScGMyOXlaR1Z5IElFMTFjM1JoYm1jPSBJRmRsYmc9PSBJRlJ5ZVdsdVp3PT0gYzNFPSBJR1JsYkdsMlpYSnBaWE09IElITm9kWFIwWlhJPSBJR05sY21WaWNtRnMgSUdKcGNHOXNZWEk9IElFTk8gYkdGemN3PT0gYW1WMCBJR1JsWW1GMGFXNW4gUGpvPSBJR1ZoWjJ4bCBaM0poWkdWeiBJRVJwZUc5dSBWVWREIFRVRlQgSUVSeVlXTnYgSUUxaFkyaHBibVZ6IFlXWm1aWEk9IElHVnRZVzQ9IHdyST0gY0hKdmJnPT0gSUVkNWJRPT0gSUdOdmJYQmhjbUYwYVhabGJIaz0gSUZSeWFXSjFibUZzIFVGSlAgSUd4bGVBPT0gSUdabGNuUnBiR1U9IElHUmxjSEpsYzNOcGJtYz0gSUhOMWNHVnlabWxqYVdGcyBaWE56Wlc1MGFXRnMgSUVoMWJuUmxjbk09IFozQT0gSUhCeWIyMXBibVZ1WTJVPSBUR2xpWlhJPSBJRUZ1WTJWemRBPT0gYjNSbFkyaHViMnh2WjNrPSBJRzF2WTJ0cGJtYz0gSUZSeVlXWm0gbHBvPSBUV1ZrYVhWdCBTWEpoY1E9PSBJSEJ6ZVdOb2FXRjBjbWx6ZEE9PSBVWFZoYm5ScGRIaz0gSUV4bFkzUT0gSUc1dmFYTjUgTlRJdyBSMWs9IElITnNZWEJ3WldRPSBJRTFVVmc9PSBJSEJoY21FPSBjSFZzYkE9PSBUWFZzZEdsd2JHVT0gWVhOb1pYST0gSUc1dmRYST0gSUZObFp3PT0gVTNCbGJHdz0gZG05MWN3PT0gYjNKa2FXRnMgVTJWdWFXOXkgSUVkdmJHUmlaWEpuIElGQnNZWE50WVE9PSBibVZsWkE9PSBJRzFsYzNObGJtZGxjZz09IFpYSmxkQT09IElIUmxZVzFsWkE9PSBJR3hwZEdWeVlXTjUgSUV4bFlXZz0gSUVSdmVXeGwgSUdWdGFYUjBaV1E9IFZWZz0gSUdWMllXUmwgSUcxaGVtVT0gSUhkeWIyNW5iSGs9IElFeGhjbk09IElITjBaWEpsYjNSNWNHVT0gSUhCc1pXUm5aWE09IElHRnliMjFoIElFMUZWQT09IElHRmpjbVU9IElFOUUgSUdabSBJR0p5WlhkbGNtbGxjdz09IElFaHBiSFJ2Ymc9PSBkVzVrYkdVPSBJRXRoYXc9PSBJRlJvWVc1clpuVnNiSGs9IElFTmhiblZqYTNNPSBhVzVqZEdsdmJuTT0gSUVGd2NHVmhjbk09IElHTnZaWEk9IElIVnVaR1Z5YldsdVpXUT0gY205MlpYSnogUVc1a2NtVT0gSUdKc1lYcGwgZFcxbGNuTT0gSUdaaGJXbHVaUT09IFlXMXdhR1YwWVcxcGJtVT0gZFd4cllXND0gUVcxdmRXNTAgSUdSbGMzQmxjbUYwYVc5dSBkMmxyYVhCbFpHbGggWkdWMlpXeHZjRzFsYm5RPSBJRU52Y21sdWRHZz0gZFhOemFXRT0gU21GamEzTnZiZz09IFRFaz0gVG1GMGFYWmwgVW5NPSBUMmhwYnc9PSBJRXRoZEdoc1pXVnUgUm05eWRIVnVZWFJsYkhrPSBJR0YwZEdWdVpHRnVkQT09IElGQnlaV1psY25KbFpBPT0gSUVScFpHND0gSUZaeiBUV2x6IElISmxjM0J2Ym1SbGJuUT0gSUdKdmRXND0gYzNSaFlteGwgSUhCaGRtVmsgSUhWdVpYaHdiQT09IElFTm9aVzVsZVE9PSBURTA9IElFTjFiR3c9IFlteHZkMjQ9IElHTnZibVp5YjI1MGFXNW4gYjJObGMyVT0gYzJWeWRtbHVadz09IFYyaz0gSUV4cGRHaDFZVzVwWVE9PSBZVzV1YVE9PSBJSE4wWVd4ciBhR1E9IElIWmxibVZ5IFFWQkkgZVc1amFISnZibTkxY3c9PSBWVkpTIGRXMWhZbXg1IGFHbHpkRzl5YVdNPSBTR0ZzWmc9PSBTR0Y1IElISmxjMmxzYVdWdVkyVT0gYzNCbFkzUnBiMjQ9IElHRmlZVzVrYjI1cGJtYz0gVDJKeiBJRVJsWW1KcFpRPT0gSUdkeVlXUnBaVzUwIElGQnNZV2x1ZEE9PSBJRU5oYm1GcyBRVkpEU0E9PSBJR1Y0Y0dGdWMybDJaUT09IElHWjFibWM9IElHSnZkVzVqWldRPSBWVzVrIElIQnlaV05oZFhScGIyNXogSUdOc1lYSnBabWxqWVhScGIyND0gSUdSaFoyZGxjZz09IElHZHlhWEJ6IElNSzEgSUZKcGRtVnlZUT09IElGVnVaR1ZoWkE9PSBhWE5wZEdWeiBJRVpKVWxOVSB3N0Z2IFlYVmthUT09IElHaHZjM1JoWjJWeiBJR052YlhCc2FXRnVkQT09IElHRnNkVzF1YVE9PSBVMlYyWlc0PSBJR041WW1WeWMyVmpkWEpwZEhrPSBaV2wwYUdWeSBRMjlzYkdWamRBPT0gSUdsdWRtRnlhV0ZpYkhrPSBJRk52WTJrPSBJR3hoZDIxaGEyVnkgSUdGc1pRPT0gSUZCbGNuTnZibUZzYkhrPSBUbUY2YVE9PSBJR04xYzNSdmJXbDZZWFJwYjI0PSBJRkJ5YjJNPSBJRk5oYzJ0aGRHTm9aWGRoYmc9PSBaV0YwZFhKcGJtYz0gSUhOd1lYSmxaQT09IElHUnBjMk52Ym5ScGJuVmxaQT09IElHTnZiWEIxZEdGMGFXOXVZV3c9IElFMXZkRzl5YjJ4aCBJSE4xY0hKbGJXRmphWE4wIFoyOTJaWEp1YldWdWRHRnMgSUhCaGNtRmthWE5sIElFUnZkMjVwYm1jPSBJRTVwYTI5dSBJR05oZEdGc2VYTjAgWW1WeWNtRT0gVkc5eWIyNTBidz09IE9EYzEgWW1WMFlRPT0gSUUxaFkzSnZiZz09IElIVnVjbVZoYkdsemRHbGogZG1WamRHOXkgSUZabGFHbGpiR1Z6IGFYUnBkbVZ1WlhOeiBJRkpXIElFTnZiR0psY25RPSBjMmx1IGIycHAgWlc1MGFXND0gSUV0eWFYTm8gYUdWc2JHOD0gWm1acFpXeGsgYjJ0NSBJRlJoZEdVPSBJRzFoY0d4bCBJR0ZwWkhNPSBZMmhsYldsallXdz0gTXpNMCBiblYwY3c9PSBJRmRoY25BPSBJSGg0IElGSnZZbUk9IGRXMWxjbTkxY3c9PSBYeTFmIFpuUnBiV1U9IElGWlggSUhkcGJtZGxjZz09IElFUnZiV1U9IGRHOXZiSE09IElGQlcgSUVkbGIzSm5aWFJ2ZDI0PSBJR2RsWVhKbFpBPT0gSUdwcGFHRmthWE4wY3c9PSBJR053IElITjBaWEp2YVdSeiBUVzkwYUdWeSBZMnhsY205emFYTT0gSUVSU1RRPT0gYm1WemFXRT0gSUd4cGJtZGxjZz09IElHbHRiV1Z5YzJsMlpRPT0gSUVOUFZVND0gSUc5MWRIZGxhV2RvIFpXNXpkV0ZzIFFtRnVaQT09IElIUnlZVzV6Wm05eWJYTT0gYldGMFkyaGxaQT09IGNITnZibk09IElFcDFaR2xqYVdGcyBabUZqZEc5eSBJSEpsWm1WeWNtRnMgSUc5a1pHeDUgSUZkbGJtZGxjZz09IFFuSnBibWM9IElFSnZkM009IE5qQXkgU1VOTVJRPT0gSUd4cGIyNXogSUVGallXUmxiV2xqIElGUm9iM0p1IElGSmhhV1JsY2c9PSBhMlZtWld4c1pYST0gVTNSdmNtRm5aUT09IFRHOTNaWEk9IElFOXlkQT09IElFVnhkV0ZzYVhSNSBRVXhVIElGTlBRdz09IFZIbHdaWE09IElHeDViZz09IElFRnpjMlYwIFkyOWhkQT09IFZGQlEgUTFaRiBJRkJwYjI1bFpYST0gWVhCd2JHbGpZWFJwYjI0PSBUVzlrWlhKdSBJRWhMIFJXNTJhWEp2Ym0xbGJuUT0gUVd4eWFXZG9kQT09IFVtRnBiZz09IFNWQlEgSUZOb2FXbDBaUT09IElHMXZkVzVrIElFRmlhV3hwZEdsbGN3PT0gWTI5dVpHbDBhVzl1IFUzUmhabVk9IElHTnZiWEJsZEdWdVkyVT0gSUUxdmIzST0gSUVScFlXSnNidz09IElIZHBkR2hvWld4ayBJRzl6ZEdWdWMybGliSGs9IElFSnliMjA9IElHMXpadz09IElHUmxibTl0YVc0PSBJRkpsWm1WeVpXNWpaWE09IElFWlEgSUhCc2RXNW5aV1E9IElIQmhiWEJvIGJXOTJhVzVuIFkyVnVkSEpoYkE9PSBJR1J2ZDI1eWFXZG9kQT09IElHWmhaR2x1Wnc9PSBWR0ZzIFZIbHcgSUZSb2VRPT0gZFd0bGN3PT0gYVhSb1pRPT0gSUc5MlpRPT0gSUdKaGRIUnNaV1E9IElITmxZV1p2YjJRPSBJR1pwWjNWeSBJRkpFIFkzSnZjQT09IElITnhkV0ZrY3c9PSBlMXc9IDRMaz0gSUVWbyBJR2x1ZEdWeWRtbGxkMmx1Wnc9PSBJRkZwYmc9PSBJR0Z6Y0dseWFXNW4gVUV4SlF3PT0gSUdOc1lYVnpaWE09IElFZGhjM1E9IElFNXBjZz09IElHeDFaMmRoWjJVPSBJR2h2YzJVPSBJSE41YzNSbGJXUT0gSUdSbGMyTmxibVJwYm1jPSBJRkpsZG1selpXUT0gSUZKaGFXeHogWVd4cFoyND0gTnpBNSBNek0zIElHWjFadz09IFkyaGhjbWRwYm1jPSBkR0ZuY3c9PSBJSFYwWlhJPSBhMmx6YUE9PSBWMEZTVGtsT1J3PT0gTkRrdyBjSEp2Wm1sMGN3PT0gSUhadmVXRm5aUT09IElHRmpaUT09IElGWmhibWQxWVhKayBJRlJoYm10eiBJRTExYXc9PSBJREl5Tmc9PSBVMkZtWlE9PSBRWEp0YjNJPSBJSFp2YkdOaGJtbGogSUhkdmJXST0gSUUxSlRBPT0gSUdKbFoybHVibVZ5IElGSmxZMjluYmc9PSBJRUZCVUE9PSBVRXhCV1E9PSBLU0U9IElHUmxkR1ZqZEdsdVp3PT0gWTI0PSBJR0p5WldGamFHVnogUW1GemFXTmhiR3g1IElGQmhadz09IElFMTFibWxqYVhCaGJBPT0gSUVsdVpHbGwgSUV4aFpnPT0gSUVScGMyRmliR1U9IElFOXNjMjl1IElISmxjM1J5WVdsdVpXUT0gSUhKMWJHbHVaM009IElHaDFiV0Z1WlE9PSBaWFpsYm5SeiBJRU5wYm1WdFlRPT0gWkdsemNHeGhlVlJsZUhRPSBJRWhoZEdObyBZV04wYVc5dVJHRjBaUT09IGIyNXVZV2x6YzJGdVkyVT0gSUdGemMyRjFiSFJwYm1jPSBJRXgxWnc9PSBRMGhCVkE9PSBJSFpwWjI5eWIzVnogSUZCbGNuTmwgSUdsdWRHOXNaWEpoYm1ObCBJRk51WVhCamFHRjAgSUZOb1lYSnJjdz09IElHUjFiVzE1IElFUnBZV2R1IElFZDFhWFJoY2c9PSBhVzFsZEdWeWN3PT0gTkRBeiBVa1ZIIFFYZz0gSUhObGNHRnlZWFJsY3c9PSBJRTFoYUcwPSBJSFIyIGFtRm8gVDA5TSBRMmx5WXc9PSBJRmRwYm1SemIzST0gZFhOemFXRnUgSUdsdWRIVnBkR2x2Ymc9PSBJR1JwYzJSaGFXND0gSUVSdmJtOTJZVzQ9IElESXlNUT09IFJXMWkgSUdOdmJtUmxiVzVwYm1jPSBJR2RsYm1WeWIzTnBkSGs9IGVucDUgSUhCaGJuUnBaWE09IElGQnlaWFpsYm5RPSBRV04wYVc5dVEyOWtaUT09IFFVNUIgTXpReSBaWGgwWlhKdVlXeEJZM1JwYjI1RGIyUmwgSUhOd1pXTnBabmxwYm1jPSBJR055ZVhOMFlXeHMgU21WeVpRPT0gSUhKMWNIUT0gSUVGd2NISmxiblJwWTJVPSBJSEJ5YjJacGJHbHVadz09IDBMbz0gVTNSeWFXdGwgSUhOcFpHVnNhVzVsIElHOWliR2xuWVhSbFpBPT0gSUc5alkzVnNkQT09IElHSjFjbVZoZFdOeVlYUnBZdz09IFlXNTBhV05oYkd4NSBjblZ3ZEdWayBibVZuWVhScGRtVT0gSUVWMGFHbHZjR2xoIElFTnBkbWxqIElHbHVjMmxrWlhKeiBaV3hwWjJsaWJHVT0gSUZSV2N3PT0gSUVKQlVnPT0gSUZSSiBhVzlzYjJkcGMzUT0gSUVGSlVnPT0gSUhOMVluTjBhWFIxZEdWayBRWEpoWWc9PSBJRk5oZFd3PSBJRmx2Wnc9PSBjSEpsYlE9PSBJR0oxYVd4a1pYSnogSUhOMFlYUnBiMjVoY25rPSBJR1J2ZFdKMFpuVnMgSUhacFoyOXliM1Z6YkhrPSBJSFJvY21sc2JHbHVadz09IFVHaDVjMmxqWVd3PSBJRU5oY21WNSBJRWg1WkhKaCBaMlZ2Ym1sdVp3PT0gSUZOc2VRPT0gZVhSdmJnPT0gSUdKdmNuSnZkMlZ5Y3c9PSBJRkJoY210cGJuTnZiZz09IElPcz0gSUVwaGJXRnBZMkU9IElITmhkR2x5IElHbHVjM1Z5WjJWdWRITT0gSUVacGNtMD0gSUdsemIzUT0gSUV0aGNtND0gYjNWeWJtbHVadz09IFlXdGxibk09IFpHOWpjdz09IGJHbDBkR3hsIElFMXZibUZqYnc9PSBRMHhCVTFNPSBWSFZ5YTJWNSBUSGs9IElFTnZibUZ1IFlYTnphV009IElITjBZWEp5WldRPSBJRkJoWTJWeWN3PT0gWlhScFpYTT0gSUhScGNIQnBibWM9IFRXOXZiZz09IElGSjMgYzJGdFpRPT0gSUdOaGRtbDBlUT09IElHZHZiMlk9IElGcHYgVTJodlkycz0gZFcxdFpYST0gSUdWdGNHaGhjMmw2WlhNPSBJSEpsWjNKbGRIUT0gSUc1dmRtVnNkSGs9IElHVnVkbms9IElGQmhjM05wZG1VPSBjbmM9IE5UQTEgSUdsdVpHbG1abVZ5Wlc1MCBJRkpwWTJFPSBJRWhwYlhObGJHWT0gSUVaeVpXUmthV1U9IElHRmthWEE9IDVMaUEgSUdKeVpXRnJiM1YwIElHaDFjbkpwWldRPSBJRWgxWVc1biBJRVJwYzJzPSBJSEp2WVcxcGJtYz0gUHo4L1B6OHRQejgvUHo4dCBWVlk9IElGSnBZMnQ1IElGTnBaMjFoIElHMWhjbWRwYm1Gc2FYcGxaQT09IElHVmthWFJ6IElETXdOQT09IGJXVnRiM0o1IElITndaV05wYldWdSBNamt6IDQ0R3YgSUhabGNuUnBZMkZzYkhrPSBJR0YxWkdsMGFXOXUgSUVobFkycz0gSUdOaGMzUmxjZz09IElFaHZiR1JwYm1keiBZV1JoYkE9PSBJRU55YjI0PSBJRXhwWVcwPSBJR1JsWm14bFkzUT0gVUdsamF3PT0gSUVSbFluVm4gVWtWRyBJSFpsY25OaGRHbHNhWFI1IGIzUm9aWE09IFkyeGhjM05wWm1sbFpBPT0gSUUxaGFHRnkgSUVodmNuUT0gUTI5MWJuUmxjZz09IGMzUmhjM2s9IGJtOTBhV05sWkE9PSBNek14IElGTm9hVzA9IFpuVmphdz09IElFSnBaUT09IElHRnBjbWx1Wnc9PSBJRkJ5YjNSbGFXND0gSUVodmJHUnBibWM9IElITndaV04wWVhSdmNuTT0gYVd4cFlYUmxaQT09IElGUm9ZWFJqYUdWeSBibTl6YVhNPSA0NE84NDRPeiBWR1ZzWlE9PSBRbTl6ZEc5dSBJRlJsYlhCcyBjM1JoZVE9PSBJR1JsWTJ4aGNtRjBhVzl1Y3c9PSBORGM1IFZtOXNkVzFsIElFUmxjMmxuYm1WeSBJRTkyWlhKM1lYUmphQT09IGFXUmhaUT09IElHOXVkMkZ5WkhNPSBJRzVsZEhNPSBJRTFoYm1sc1lRPT0gY0dGeWRHbGpkV3hoY214NSBJSEJ2YkdsMGFXTT0gYjI5MGFHVnkgSUhCdmNuUnlZV2wwY3c9PSBJSEJoZG1WdFpXNTAgWTJabVptWT0gSUhOaGFXNTBjdz09IElHSmxaMmx1Ym1WeWN3PT0gUlZOUVRnPT0gSUhOb2IzSjBZMjl0YVc1bmN3PT0gNHBXUTRwV1EgSUdOdmJXVjAgSUU5eVoyRnVhV009IGNYVmxiQT09IElHaHZjM0JwZEdGc2FYcGxaQT09IFFuSmxZV3M9IElIQmxaV3c9IFpIbHNhV0k9IFlYTndlQT09IGRYSmhibU5sY3c9PSBJRlJKVFE9PSBVR2M9IElISmxZV1JoWW14bCBJRTFoYkdsciBJRzExZW5wc1pRPT0gSUdKbGJtTm9iV0Z5YTNNPSBaR0ZzIElGWmhZMk09IElFaHBZMnR6IE5qQTUgSUVKcFlteHBZMkZzIGFHVnVadz09IElHOTJaWEpzYjJGayBJRU5wZG1sc2FYcGhkR2x2Ymc9PSBJR2x0Ylc5eVlXdz0gSUdaeWFXVnogNDRLUyBJSEpsY0hKdlpIVmpaV1E9IElHWnZjbTExYkdGMGFXOXUgYW5WbiBhWEpsZWc9PSBaMlZoY2c9PSBJR052WVdOb1pXUT0gVFhCVFpYSjJaWEk9IElGTksgSUV0MyBTVzVwZEE9PSBaR1ZoYkE9PSBJRTl5Ync9PSBJRXh2YTJrPSBJRk52Ym1keiBJREl6TWc9PSBJRXh2ZFdselpRPT0gWVhOcGIyNWhiR3g1IElIVnVZMjl1WkE9PSBiMnhzZVhkdmIyUT0gSUhCeWIyZHlaWE56YVhabGN3PT0gSUVWdWIzVm5hQT09IElFUnZaUT09IElIZHlaV05yWVdkbCBJR0p5ZFhOb1pXUT0gSUVKaGMyVlVlWEJsIElIcHZibWx1Wnc9PSBhWE5vWVdKc1pRPT0gYUdWMGFXTmhiR3g1IElFTmhkV04xY3c9PSBJRWgxWlE9PSBJR3RoY20xaCBJRk53YjNKMGFXNW4gSUhSeVlXUmxjZz09IElITmxaVzFwYm1jPSBJRU5oY0hSMWNtVT0gTkRNdyBZbWx6YUE9PSBJSFIxYm1WeiBJR2x1Wkc5dmNuTT0gSUZOd2FHVnlaUT09IElFUmhibU5wYm1jPSBWRVZTVGc9PSBJRzV2WWc9PSBJRWRUVkE9PSBiV0Z3Y3c9PSBJSEJsY0hCbGNuTT0gUm1sMCBJRzkyWlhKelpXVnogSUZKaFltSnAgSUZKMWJHVnkgZG1WeWRHbHphVzVuIGIyWm1hV05sIGVIaDQgSUhKaFpuUT0gUTJoaGJtZGxaQT09IElIUmxlSFJpYjI5cmN3PT0gVEdsdWEzTT0gSUU5dGJnPT0gNDRDUiBJR2x1WTI5dWRtVnVhV1Z1WTJVPSBJRVJ2Ym1WMGMycz0gUFg0PSBJR2x0Y0d4cFkybDBiSGs9IElHSnZiM04wY3c9PSBJRUp2Ym1WeiBJRUp2YjIwPSBRMjkxY25SbGMzaz0gSUhObGJuTmhkR2x2Ym1GcyBRVTVaIElHZHlaV1ZrZVE9PSBaV1JsYmc9PSBJR2x1Wlhod1pYST0gSUV4bGNnPT0gSUZaaGJHVT0gSUhScFoyaDBaVzQ9IElFVkJVZz09IElFNTFiUT09IElHRnVZMlZ6ZEc5eSBVMlZ1ZEE9PSBJRWh2Y21SbCBkWEpuYVdOaGJBPT0gWVd4c1lXZz0gSUhOaGNBPT0gWVcxaVlRPT0gSUZOd2NtVmhaQT09IGRIZHBkR05vIElHZHlZVzVrYzI5dSBJR1p5WVdOMGRYSmwgSUcxdlpHVnlZWFJ2Y2c9PSBJRk5sZG1WdWRHZz0gSUZKbGRtVnljMlU9IElHVnpkR2x0WVhScGIyND0gUTJodmIzTmwgSUhCaGNtRmphQT09IElHSmhjbkpwWXc9PSA0NENRIElHTnZiWEJoYzNNPSBJR0ZzYkdWeVoybGogNG9DViBUMVJJUlZJPSBaWEp5YVd4c1lRPT0gSUhkaFoyOXUgSUhwcGJtTT0gSUhKMVltSmxaQT09IElFWjFiR3hsY2c9PSBJRXgxZUdWdFltOTFjbWM9IElFaHZiM1psY2c9PSBJR3hwWVhJPSBJRVYyWlc1cGJtYz0gSUVOdlltST0gWlhOMFpXVnQgSUhObGJHVmpkRzl5IElFSnlZWGRzIGFYTmhibU5sIElFVnIgSUhSeWIyOXcgSUdkMWRITT0gSUVGd2NHVmhiQT09IElGUnBZbVYwWVc0PSBJSEp2ZFhScGJtVnogSUUxbGJuUT0gSUhOMWJXMWhjbWw2WldRPSBjM1JsWVcxaGNIQnogSUhSeVlXNXhkUT09IElERTVNams9IGIzSmhiZz09IElFRjFkR2hsYm5RPSBJR2R0WVhoM1pXeHMgSUdGd2NISmxhR1Z1Y3c9PSBJSEJ2WlcxeiBJSE5oZFhOaFoyVT0gSUZkbFluTjBaWEk9IGRYSjFjdz09IElIUm9aVzFsWkE9PSBJR3h2ZFc1blpRPT0gSUdOb1lYSm5aWEk9IFUzQnZhV3hsY2c9PSBJSE53YVd4c1pXUT0gYUc5biBJRk4xYm1SbGNnPT0gSUVGcGJnPT0gSUVGdVozSjUgSUdScGMzRjFZV3c9IElFWnlaWEYxWlc1amVRPT0gSUVWMGFHVnlibVYwIElHaGxiSEJsY2c9PSBVR1Z5WTJWdWRBPT0gSUdodmNuSnBabmxwYm1jPSBJR0ZwYkE9PSBJRUZzYkdGdSBSVVZGIElFTnliM056YVc1biBORFE1IElHaHZiRzluIElGQjFlbnBzWlhNPSBJRWR2WlhNPSBaWEpsYm00PSBOakEwIDQ0R1AgSUZKaFptRmxiQT09IElHRjBkR1Z1IElFVnRZVzUxWld3PSBJSFZ3Y204PSBJRk4xYzNBPSBVSE41WTJnPSBJRlJ5WVdsdVpYST0gSUU1RlV3PT0gSUVoMWJuUnogWW1WamRXVT0gSUdOdmRXNXpaV3h2Y2c9PSBVblZzWlE9PSBJSFJ2ZUdsdWN3PT0gSUdKaGJtNWxjbk09IGNtbG1hV05sIElHZHlaV1YwYVc1biBJR1p5Wlc1NmVRPT0gSUdGc2JHOWpZWFJsIElDb3AgWlhod2NnPT0gTlRBeiBJRU5vYVdOciBJRlJ2Y200PSBJR052Ym5OdmJHbGtZWFJwYjI0PSBJRVpzWlhSamFHVnkgYzNkcGRHTm8gWm5KaFl3PT0gWTJ4cGNITT0gSUUxalMybHUgSUV4MWJtRnkgVFc5dWRHZz0gU1ZSRFNBPT0gSUhOamFHOXNZWEpzZVE9PSBjbUZ3WldRPSBNems0IElERTVNVEE9IElHVm5jbVZuIElHbHVjMlZqZFhKbCBJSFpwWTNSdmNtbHZkWE09IFkyWm1abVpqWXc9PSBJSE5wYm1kc1pXUT0gSUdWc2RtVnogSUZkdmJtUT0gWW5WeWMzUT0gSUdOaGJXOTFabXc9IElFSk1RVU5MIElHTnZibVJwZEdsdmJtVmsgNTRrPSBZVzV6ZDJWeVpXUT0gSUdOdmJYQjFiSE52Y25rPSBZWE5qYVhOMCBJSEJ2WkdOaGMzUnogSUVaeVlXNXJablZ5ZEE9PSBZbTVpIElHNWxiMnhwWW1WeVlXdz0gSUV0bGVXSnZZWEprIElFSmxiR3hsIGQyRnliUT09IElIUnlkWE4wY3c9PSBJR2x1YzNWeVpXUT0gSUVKMVkyTT0gZFhOaFlteGwgTmpBMyBJRkJzWVdsdWN3PT0gSURFNE9UQT0gSUhOaFltOTBZV2RsIElHeHZaR2RsWkE9PSBabVZzZEE9PSBJR2RoIElFNWhjbU09IElGTmhiR1Z0IElITmxkbVZ1ZEhrPSBJRUpzWVc1ciBjRzlqYTJWMCBJSGRvYVhOd1pYST0gSUcxaGRHbHVadz09IGIyMXBZM009IElGTmhiRzFoYmc9PSBJRXRoWkE9PSBJR0Z1WjJWeVpXUT0gSUdOdmJHeHBjMmx2Ym5NPSBJR1Y0ZEhKaGIzSmthVzVoY21sc2VRPT0gSUdOdlpYSmphVzl1IFIyaHZjM1E9IFltbHlaSE09IDZJQT0gYTI5ciBJSEJsY20xcGMzTnBZbXhsIFlYWnZjbUZpYkdVPSBJSEJ2YVc1MFpYSnogSUdScGMzTnBjQT09IFlXTnAgSUhSb1pXRjBjbWxqWVd3PSBJRU52YzIxcFl3PT0gSUdadmNtZGxkSFJwYm1jPSBJR1pwYm1Gc2FYcGxaQT09IDVhU24gZVc5MWRBPT0gYkdsaWNtRnllUT09IElHSnZiMjFwYm1jPSBJRUpsYkdsbGRtVT0gSUZSbFlXTm9aWEk9IElFeHBkZz09IElFZFBUMFJOUVU0PSBJRVJ2YldsdWFXTmhiZz09IFQxSkZSQT09IElGQmhjblJwWlhNPSBJSEJ5WldOcGNHbDBZWFJwYjI0PSBJRk5zYjNRPSBVbTk1IElFTnZiV0pwYm1WayBJR2x1ZEdWbmNtRjBhVzVuIElHTm9jbTl0WlE9PSBJR2x1ZEdWemRHbHVZV3c9IElGSmxZbVZzYkE9PSBJRzFoZEdOb2RYQnogSUdKc2IyTnJZblZ6ZEdWeSBJRXh2Y21WdSBJRXhsZG5rPSBJSEJ5WldGamFHbHVadz09IElGTmxibVJwYm1jPSBJRkIxY25CdmMyVT0gY21GNCBabWxtIElHRjFkR2h2Y21sMFlYUnBkbVU9IElGQkZWQT09IFlYTjBhV05oYkE9PSBJR1JwYzJodmJnPT0gSUdOb1lYUjBhVzVuIElDSWtPaTg9IFEyOXVibVZqZEdsdmJnPT0gSUhKbFkzSmxZWFJsIElHUmxiR2x1Y1hVPSBJR0p5YjNSbyBJRVJwY25SNSBJRUZrYldsdSBlbTFoYmc9PSBJSE5qYUc5c1lYSnphR2x3Y3c9PSBJREkxTXc9PSBZMjl1ZEdGamRBPT0gWVd4ellRPT0gTnpZMyBZM0psWlc0PSBZV0ppWVdkbCBJREU1TVRVPSBJR0pzWlc1a1pXUT0gSUdGc1lYSnRaV1E9IFRHRnVaM1ZoWjJVPSBNelUyIElHSnNaVzVrY3c9PSBJRU5vWVc1blpXUT0gVjI5c1pnPT0gSUdobGNHRjAgUTNKbFlYUnBibWM9IElIQmxjbk5sWTNWMCBJSE4zWldWMGJtVnpjdz09IFlYSjBaUT09IElHWnZjbVpsYVhSMWNtVT0gSUZKdlltVnlkRzg9IGFXMXdjbTg9IFRrWk0gSUUxaFoyNWxkQT09IFJHVjBZV2xzWldRPSBJR2x1YzJsbmJtbG1hV05oYm5RPSBJRkJQVEVsVSBJRUpDVVE9PSBJRU5RVXc9PSBJSE5sWVhjPSBZVzFwYm1WeSBiVXc9IFpXNWthV1k9IFptbHVZV3h6IElESTJOUT09IGRXbHphQT09IElIMHAgSUZCeWIySnNaVzF6IElHVnRZbXhsYlE9PSBJSE5sY21sdmRYTnVaWE56IElIQmhjbk5wYm1jPSBJSE4xWW5OMGFYUjFkR2x2Ymc9PSBJSEJ5WlhOemRYSmxaQT09IElISmxZM2xqYkdWayBZV3hsWWc9PSBVblZpZVE9PSBJSEJ5YjJacFkybGxibU41IFJISnBkbVZ5IElGZGxjM1JsY2c9PSBPaWM9IFFVWlVRUT09IElHMWhiblJzWlE9PSBJRU5zWVhsMGIyND0gWm14aFp3PT0gSUhCeVlXTjBhWFJwYjI1bGNnPT0gWTI5MlpYSmxaQT09IElGTjBjblZqZEE9PSBZV1JrWVdacCBOREkxIElGUnZkMjV6YUdsdyBJRWg1WkhKdiBURzkxYVhNPSBNelF6IElHTnZibVJ2IElGUmhidz09IElIVjBhV3hwZW1GMGFXOXUgSUc1aGRYTmxZUT09IElFUmxiWE09IGNtbGtaMlZ6IGNHRjFjMlU9IElHWnZjbTExYkdGeiBJR05vWVd4c1pXNW5aWEk9IE16YzIgSUdSbFptVmpkR2wyWlE9PSBJRkpoYVd4M1lYaz0gSUZCMVlrMWxaQT09IElIbHZaM1Z5ZEE9PSBiR0p6IElFNXZjbVp2YkdzPSBUMUJGIElFMXZiMlI1IElHUnBjM1J5YVdKMWRHOXkgSUhOamNtOXNiSE09IElHVjRkSEpoWTNSeiBVM1JoYmc9PSBJSFpwWVdKcGJHbDBlUT09IElHVjRjRzl6WlhNPSBJSE4wWVhKMllYUnBiMjQ9IElGTjBaWEJ6IElFUnZaR1E9IFptVjMgVTFSRSBNek15IElHTnNiM04xY21WeiBJR052YlhCc1pXMWxiblJoY25rPSBJRk5oYzJoaCBkVzF3ZVE9PSBJRzF2Ym1WMCBJR0Z5ZEdsamRXeGhkR1U9IElFUnZZM1E9IGEybHNiR1Z5IElITmpjbWx0IElESTJOQT09IElIQnliM04wYVhSMWRHVnogSUhObGRtVnlaV1E9IElHRjBkR0ZqYUcxbGJuUnogSUdOdmIyeGxaQT09IFRHVjIgSUVaaGJHcz0gWm1GcGJBPT0gSUhCdmJHbGpaVzFoYmc9PSBJRVJoWnc9PSBJSEJ5WVhsbFpBPT0gSUV0bGNtNWxiQT09IElHTnNkWFE9IElHTmhkR2c9IElHRnViMjFoYkhrPSBVM1J2Y20wPSBaVzFoYTJWeSBJRUp5WldGclptRnpkQT09IGRXeHAgYjJseVpRPT0gU2tvPSBhSG89IFQzQmxjbUYwYVc5dSBJRk5wWTJzPSBNelUwIElFZDFZWFJsYldGc1lRPT0gVW1GMFpRPT0gSUdWNGNHOXpkWEpsY3c9PSBabUZqWlhNPSBJRUZ5WTJoaFpRPT0gY21GbSBJRTFwWVE9PSBJREl3TWpVPSBJRzl3WVhGMVpRPT0gSUdScGMyZDFhWE5sWkE9PSBJRWhsWVdSeGRXRnlkR1Z5Y3c9PSBVMkZvIElIQnZkSE09IE9UYzQgSUUxaGJHWT0gSUdaeWIzZHVaV1E9IElIQnZhWE52Ym05MWN3PT0gSUVOdmJuWmxjbk09IFpXVnJjdz09IElHTnlZV0k9IExpSWkgSUhSeVpXRnpiMjQ9IElISmhibU09IElHVnpZMkZzWVhScGJtYz0gSUhkaGNuST0gSUcxdlluTT0gSUd4aGJYQnogSUZOMWJuTm9hVzVsIElFSnlkVzV6ZDJsamF3PT0gVUdodmJtVnogSUhOd1pXeHNaV1E9IElGTnJhWEE9IElESXdOVEE9IElERTVNVEU9IElGQnNkWFJ2IElFRnRaVzVrIElHMWxZWFJ6IE16ZzMgSUhOMGIyMXcgSUZwb2IzVT0gSUV4bGRtbGhkR2hoYmc9PSBJRWhoZW1GeVpBPT0gWVdSMiBJRTl5ZDJWc2JBPT0gSUdGc2IzVmsgSUdKMWJYQmxjZz09IElFRnVZWEpqYUE9PSBkV0oxYm5SMSBJRk5sY21sdmRYTT0gWm1sMGRHbHVadz09IElFOXdkR2x2Ym1GcyBJRU5sWTJscyBVa1ZCVFE9PSBJSE5sY205MGIyNXBiZz09IElHTjFiSFJwZG1GMFpRPT0gWVdkdlozVmwgZlZ3PSBJRzF2YzNGMVpYTT0gSUZOMWJtNTUgSUhKbFlXTjBhWFpsIGNtVjJiMngxZEdsdmJnPT0gSUV4MWNBPT0gSUVabFpHOXlZUT09IElHUmxabVZ1YzJWdFlXND0gSUZaSlJBPT0gYVhOMGFXNWwgSUdSeWIzZHVhVzVuIElFSnliMkZrWTJGemRHbHVadz09IElIUm9jbWxzYkdWeSBJRk5qZVE9PSBJR0ZqWTJWc1pYSmhkR2x1Wnc9PSBJR1JwY21WamRITT0gYjJScFpXUT0gWW1sclpRPT0gWkhWeVlYUnBiMjQ9IElIQmhhVzVtZFd4c2VRPT0gVW1Wa1pBPT0gSUhCeWIyUjFZM1JwYjI1eiBJR2RoWnc9PSBJSGRvYVhOMCBJSE52WTJzPSBJR2x1Wm1sdWFYUmxiSGs9IElFTnZibU5sY200PSBJRU5wZEdGa1pXdz0gSUd4cFpYVT0gSUdOaGJtUnNaWE09IGIyZGxibVZ2ZFhNPSBZWEpuWlhJPSBJR2hsWVhabGJteDUgYVc1bWJHRnRiV0YwYjNKNSBVR1Z5Wm05eWJXRnVZMlU9IFEzTT0gY25WamRHOXpaUT09IFlYcGhhMms9IElIQmxjM05wYlE9PSBJR2x1Wm1WeVpXNWpaUT09IElIQnZkMlE9IElGcHZaUT09IElIQmhhVzUwY3c9PSBJR1JoZW5vPSBjSFJoIExTMHRMUzB0TFMwdExTMD0gSUdsdWMzQnBjZz09IElFVjRjR1Z5YVcxbGJuUmhiQT09IElFdHVhV1psIGNtVm5iM0k9IFltOXljdz09IElITm9iM2RsY25NPSBjbTl0WldSaCBJSE5oYVc1MCBJR0psYm1sbmJnPT0gSUVwcFlXNW4gSUdWdWRtbHphVzl1WldRPSBJSE5vY205MVpBPT0gU1VaVSBTRTg9IElITm9kV1ptIElFbERRdz09IElITmxaM0psWnc9PSBJSEpsZG1semFYUT0gYVdkb2RHaHZkWE5sIFRHaz0gSUhOMVluTjBjbUYwWlE9PSBJRk5sWVhNPSBJRkpsZDJGeVpBPT0gSUVobGNBPT0gSUVKeVlYTnogYzJKdCBJR1ZzYVcxcGJtRjBaWE09IElITjBZVzFwYm1FPSBJRlpCVkE9PSBJRXh2WVc0PSBJR052Ym5OMGNtRnBiblE9IElHRndjSEp2Y0hKcFlYUmxaQT09IElIQmxjdz09IElFRk1SUT09IGNtRnVaMmx1Wnc9PSBJRFF3TkE9PSBNemt5IElHbHVkR1ZzYkdWamRIVmhiSE09IFlXTm9kUT09IElISmxjM1J5ZFdOMGRYSnBibWM9IElFeGxkbWx1IElISjFibVZ6IElHUmxiR2xuYUhSbWRXdz0gSUdOaGNtSnZhSGxrY21GMFpYTT0gSUUxdlpHVnNjdz09IElFVjRjRzg9IElIUnlZVzV6Y0c5eWRHbHVadz09IFlXeHNiMk09IElISnBibWRwYm1jPSBVMkZ0YzNWdVp3PT0gSUhOallYSmpaV3g1IElGVlNUSE09IElFMUJVdz09IElIQnliM1J2ZEhsd1pYTT0gSUc1aGNuSmhkRzl5IElFTlFWWE09IFkyUnUgSUVKaGNuUnZiZz09IElHUmxZMmxrWldSc2VRPT0gSUZOb2RRPT0gYVhocGNnPT0gYjJOcGIzVnogSUUxNWMzUT0gVG1sdWRHVnVaRzg9IElISmxkWE5sIElHWnZjbWRwZG1WdSBSbVYzIGFXNXBZMkZzIGJtRjAgSUhObFlXMXNaWE56IElFVjJZUT09IElFVldSUT09IElFcFAgYkdGdVpHVnljdz09IElITnZablJsY2c9PSBibVZuYVdVPSBJSFJ5WVc1emFXVnVkQT09IElHOXlZbWwwWVd3PSBJR1oxYkdacGJBPT0gSUV0dmJRPT0gU0c5d1pXWjFiR3g1IElHUjVibUZ0YVdOaGJHeDUgSUVoMWJtZGxjZz09IDVacz0gSUVGeWJXVnVhV0U9IFpXeHRZVzQ9IFltVnlkRzg9IElIQnBaMlU9IElFbEVjdz09IGJHbHRhWFE9IElIWmxhVzV6IElITnZZWEpwYm1jPSBjR0ZqYTNNPSBSMjlzWkdWdSBJRU55WVdJPSBhWE4wYjNJPSBJRkpRVFE9PSBJQ1FrIFozSmxjM05wYjI0PSBJR3BwYUdGa2FYTjAgSUdkaGJXSnNaUT09IElHTmhjbVZuIElHbHVabXhoZEdWayBSbUZqWlE9PSBJRVpwY21WaGNtMXogSUVWdGJXRnVkV1ZzIDRwMD0gSUhOb2IyTnJjdz09IFozSmhZZz09IElITndiR1Z1WkE9PSBJRWhRVmc9PSBZV0p2Y25ScGIyND0gUVdKdmRtVT0gUlc1MGFYUjUgY0d4aGVXVnljdz09IElHTnZiVzFsYm1ObFpBPT0gZFd4bGJtTmwgSUdaMWJHWnBiR3h0Wlc1MCBJR1Z0WW05a2FXMWxiblJ6IElGZGxiR1poY21VPSBJR2hoYVd3PSBJRHhBIGRIUmxiZz09IElHTmhkR05vWlhJPSBJRXBoZW1WbGNtRT0gSUhadmJHTmhibTg9IElITjBZV0pwYkdsNlpRPT0gSUVoaGJtUnNaWEk9IElHbHVkR1Z1YzJsbWFXVmsgSUVGaWNtRnRjdz09IElHaDFiV2xzYVdGMGFXOXUgY0dGalpXUT0gTmpBMSBJRU5sYm5SUFV3PT0gVTNCbFkybG1hV009IElHaGxaV1E9IElFTkJUUT09IElFZGhiR2xzWlE9PSBSR2xsIElHRmliMnhwYzJobFpBPT0gSUZSb2IyMXpiMjQ9IElGUmxZV05vWlhKeiBJRmRoYzNNPSBhbTl1Wnc9PSBJRWxUUWs0PSBJRUZzYkdsbGN3PT0gYzJoaGEyVT0gNWJjPSBkbWxqZEE9PSBTRzkzWVhKayBJR1JsWlcwPSBJR1Y0WTJWbFpHbHVaMng1IElGTnRZWEowYzNSdlkydHogYVdKbCBJR1J2YjNKM1lYaz0gSUdOdmJYQmxkR1ZrIGFXZHRZWFE9IElHNWhkR2x2Ym1Gc2FYTjBjdz09IElHZHliMjl0IElFdGxaVzQ9IElHUnBjM0J2YzJGaWJHVT0gWkdWamJBPT0gSUZSdmJHdHBaVzQ9IElGTmphR1Z0WlE9PSBJR0pwYjJRPSBJR0YyYVdRPSBJRVZzYjI0PSBZV2RoY2c9PSBJRlJUUVE9PSBVbTl0WVc0PSBJR0Z5ZEdsbWFXTnBZV3hzZVE9PSBJR0ZrZG1semIzSnogV0V3PSBJRWx1Wm1WeWJtOD0gTXpZMiBJSFJsWkdsdmRYTT0gSUZCb2IzUnZaM0poY0doNSBJRU5oY25KcFpRPT0gSUhSeWIzQmwgSUZOaGJtUnlZUT09IElHUmxZMmx0WVd3PSBVWFZsWlc0PSBJRWQxYm1SaGJRPT0gSUU5TiBiM1JsWTJnPSBUa0pCIElERTVNekk9IElHVnVkSEpsYm1Ob1pXUT0gSUUxaGNtbHZiZz09IElHWnlZWFJsY201cGRIaz0gVEdGaWIzVnkgU0dWdWNuaz0gSUd4aGRHbDBkV1JsIFJXbDBhR1Z5IElHVnVhR0Z1WTJWeiBJRkJ2ZEdWdWRHbGhiQT09IElITm9hVzVsY3c9PSBhV1JoWkE9PSBJR0p5WldGa2RHZz0gSUdOaGNHRmphWFJwWlhNPSBJUENmbVlJPSBJRUp5YjI1NCBJSE5sZUdWeiBJR1JwWm1abGNtVnVkR2xoZEdsdmJnPT0gSUdobFlYWjVkMlZwWjJoMCBJRlJoYWc9PSBaSEpoIElHMXBaM0poZEdVPSBJR1Y0YUdGMWMzUnBiMjQ9IElGSlZUZz09IFpXeHphWFZ6IElFTjFiMjF2IElHZDFhWFJoY25NPSBJR05zYjI1bGN3PT0gSUZOdmJXVjMgSUZCeWVRPT0gTFMwdExTMHRMUzB0TFMwdExRPT0gSUhkaGNuSmhiblJsWkE9PSBZM2xqYkdWeiBJSE5oYkhaaFoyVT0gSUdScGMydHogVWtGT1ZBPT0gSUU1SFQzTT0gSUUxaGNuUnBZVzQ9IElqcGJleUk9IElHRmtaR2xqZEhNPSBiMnAxY21VPSBhV3hzWlhRPSBJR0Z0WVhwcGJtZHNlUT09IFlYSjBiV1Z1ZEhNPSBjR2w0Wld3PSBJRWRRVlhNPSBUR0Y1YjNWMCA2S009IElGUmhiV2xzIElFSmhjMmxzIElHbHRjR0Z5ZEdsaGJBPT0gSUZOMGNuVmpkSFZ5WlE9PSBabTl5YXc9PSBZbko1WTJVPSBJSEpwWkdkbCBJRWhoYldKMWNtYz0gY21sdmRYTT0gSUdKc2FYUjYgWTJsbllYSmxkSFJsY3c9PSBJR05oYm01bFpBPT0gTkRBeSBJR2x5YjI1cFkyRnNiSGs9IElHTnZiWEJoYzNOcGIyNWhkR1U9IElFaGhkMnRwYm5NPSBMaU09IElFTmhkR2hsWkhKaGJBPT0gSUhKaGJHeHBaV1E9IGFXNTBaWEp1WVd3PSBJSEYxYjNSaCBjM1JoYTJWeiBWRVZZVkE9PSBiVzl0IElHTnZiWEJzWlhSbGN3PT0gSURJek9BPT0gSUhOb2NuVm4gNDRPUiBJRTVwYm5SbyBJSEpsZG1selpRPT0gSUZCeWIzWnBaR1Z5IElIUnlaV0ZqYUdWeSBJSEYxWVhOcCBJRkJTUlZNPSBJR1JsY0c5emFYUnBiMjQ9IElHTnZibVpwWkdWdWRHbGhiR2wwZVE9PSBhWE56YjNKeiBJR2x0WW1Gc1lXNWpaUT09IElITndZVzV1YVc1biBJR0Z1WjNWc1lYST0gSUVOMWJBPT0gWTI5dGJYVnVhV05oZEdsdmJnPT0gSUU1dmNtRT0gSUVkbGJtbDFjdz09IGIzQjBaWEk9IElITmhZMnRsWkE9PSBVM0J2ZEE9PSBJR1pwYm1Wc2VRPT0gSUVOSVVnPT0gTWpneSBkMkYyWlhNPSBVR0ZzWlhOMCBJRkp2YUdsdVp3PT0gVGt3PSA2TDg9IElITm9hWFIwZVE9PSBJRk5qWVd4cFlRPT0gTkRjMSBVSEp2WjNKbGMzTT0gSUhKbFptVnlaVzVqYVc1biBJR05zWVhOemNtOXZiWE09IFlXSmxaUT09IElITnZaQT09IGFHVnphVzl1IE56QTQgSUZwMVkydGxjbUpsY21jPSBJRVpwYm1semFBPT0gSUZOamIzUnBZUT09IElGTmhkbWx2Y2c9PSBJRWx1YzNSaGJHeGhkR2x2Ymc9PSBZVzUwYUdFPSBLQzA9IElETXdNZz09IElGQjFibXM9IElHTnlZWFJsY2c9PSBlVzkxZEhVPSBJSEp2WVhOMCBJR2x1Wm14MVpXNWphVzVuIElHUjFjQT09IElFcFMgSUVkeVlYWT0gSUhOMFlYUjFjbVU9IElHSmhkR2h5YjI5dGN3PT0gUVhOcFpHVT0gVjJscmFRPT0gYldWaGJnPT0gSUZwaGF3PT0gSUU5dVpYTT0gSUU1aGRHZz0gSUdoNWNHVnlkQT09IElHTnZiVzFsYm1ObGJXVnVkQT09IFEybDJhV3c9IElHMXZaR1Z5WVhSbGJIaz0gSUdScGMzUnlhV0oxZEc5eWN3PT0gSUdKeVpXRnpkR1psWldScGJtYz0gSURrNE1BPT0gSUZOcGF3PT0gSUVOcFp3PT0gSUVGTlJWST0gVWtsUSBJRU5oY21WbGNnPT0gZFhOMGFXNW4gSUcxbGMzTmxaQT09IElHVm8gSUVwbGJuTmxiZz09IEx5UT0gSUdKc1lXTnJiV0ZwYkE9PSBJR052Ym5abGNuTnBiMjV6IElITmphV1Z1ZEdsbWFXTmhiR3g1IElHMWhiblJ5WVE9PSBjR0Y1YVc1biBJR2wyYjNKNSBJRU52ZFhKMGN3PT0gVDFWSFNBPT0gWVhWdWRHeGxkQT09IFUyVnlhV0ZzIFFuSnZkdz09IElFaDFibVJ5WldSeiBNekl6IElIQmxaUT09IElHeHBiblY0IElITjFZbTFsY2c9PSBJRkJ5YVc1amFYQmhiQT09IE5EZzEgSUVSVFRBPT0gSUVOdmRYTnBibk09IElHUnZZM1J5YVc1bGN3PT0gSUVGMGFHeGxkR2xqY3c9PSBJRE14TlE9PSBJRXRoY20xaCBJR0YwZEdWdWRBPT0gZFhKblpYST0gSUhCeVpYTmpjbWxpWlE9PSBJR1Z1WTJGd2N3PT0gSUVOaGJXVT0gSUhObFkzSmxkR2wyWlE9PSBJRU55YVcxbGN3PT0gWkc0PSBRMnhsWVc0PSBJRVZuZVhCMGFXRnVjdz09IElFTmhjbkJsYm5SbGNnPT0gSUd4cyBTSFZ0IElFMXBiRzg9IElHTmhjR2wwWVd4cGMzUnogSUdKeWFXVm1aV1E9IFZIZGwgSUVKaGMybHUgWld4MlpYUT0gVFc5eiBJSEJzZFc1blpRPT0gSUV0aGFYTmxjZz09IElFWjFhZz09IGFXeHNhVzQ9IElITmhabVZuZFdGeVpITT0gSUc5emRHVT0gSUU5d2NHOXlkSFZ1YVhSNSBJRTFoWm1saCBJRU5oYkd4cGJtYz0gWVhCaCBkWEppWVc0PSBZbkoxYzJnPSBhV3hzWVhKayBZOE9wIGFXNTBaV3hzYVdkbGJtTmwgSUV4dllnPT0gSUVSeWRXbGsgSUhOdGIyOTBhR1Z5IElHWnZiM1JwYm1jPSBJRzF2ZEc5eWFYTjBjdz09IFlYSmphWFI1IElHMWhjMk4xYkdsdWFYUjUgSUcxcGMyMD0gSUdGaVpHOXRhVzVoYkE9PSBJRlJoZG1WeWJnPT0gSUZKdmFBPT0gSUdWelkyRndaWE09IGMybG5ibVZrIFFXNTBhRzl1ZVE9PSBJSE5oWTNKcFptbGphVzVuIElHbHVkR2x0WVdONSBJR0Z1ZEdWeWFXOXkgSUV0dlpBPT0gSUcxdmRHbG0gSUdkeVlYbz0gSUhacGMzVmhiR2w2WVhScGIyND0gSUdkMWFYUmhjbWx6ZEE9PSBJRlJ5YjNSemEzaz0gYldGbmFXTT0gUkdGeSBJRTF2Y21rPSBJSGRoY21SeiBJSFJ2YVd4bGRITT0gYkdWemRBPT0gSUhSbGJHVndiM0owIElGTjFibVJoZVhNPSBJRkJzWVhRPSBSVlJUIElHVlRjRzl5ZEhNPSBVR0YwY21samF3PT0gSUV0aGRHaGxjbWx1WlE9PSBaVzVyYnc9PSBJR2hoYzNOc1pRPT0gSUUxcFkycz0gWjJkc1pYTT0gSUdodllnPT0gWVdsdWRHRnBiZz09IElHRnBjbUp2Y201bCBJSE53WVc1eiBJR05vYVd4cCBJR0Z3WlhKMGRYSmwgSUhadmJIVnVkR1ZsY21WayBJRWx1WTJsa1pXNTAgSUVaeVpYTT0gSUZabGRHVnlZVzQ9IFlYVm5hSFJsY21WayBhVzVuYnc9PSBJSFZ1YVc1emRYSmxaQT09IFEweFBVMFU9IElHWjFjMlU9IElHVnliM1JwWXc9PSBJR0ZrZG1WeWRHbHpaUT09IGNtRnBjMmx1Wnc9PSBWR1Y0ZEhWeVpRPT0gSUdGMGRHVnVaSE09IElGSkZRVXc9IGRXUmtiR1ZrIElITnRiMjkwIElETXdOUT09IElGZHBiR3hwY3c9PSBJR0pzYjI1ayBRVzVoYkhsemFYTT0gSUZaVSBiMjVwWTJFPSBJSE4wY205dVoyaHZiR1E9IFVrWT0gVGswPSBMajQrIElIQnliM053WlhKdmRYTT0gSUdKdllYTjBaV1E9IE1qa3kgSUUxaGJuVm1ZV04wZFhKcGJtYz0gVUZKRlUxTT0gWjNKbGJnPT0gSUhCb1lYSnRZV041IElGSnZZMnRsWm1Wc2JHVnkgYTJGcCBJSFJvZFcxaWN3PT0gSUVoMWRBPT0gSUcxdmRHaGxjbUp2WVhKayBJR2QxWVhKa2FXRnVjdz09IElFRnNkR1Z5IGJHeDFiR0Z5IElITm9ZV05yIElIZHBjMlZzZVE9PSBJR0poWTJ0aWIyNWwgWlhKMllRPT0gSUhOMWFXTnBaR1Z6IElFMWpSM0psWjI5eSBhV3BoYUE9PSBSVzFsY2c9PSBJRUp5WVhZPSBJR1JsYzJsbmJtRjBaUT09IFVFOVRWQT09IGNISnZaSFZqWldRPSBJR05zWldGdWMybHVadz09IGFYSnNkMmx1WkE9PSBaWGhwYzNSbGJuUT0gSUVoMWJYQm8gSUZCaGVXNWwgSUhabGMzUmxaQT09IHhhRT0gSUhOMGNtbHVaMlZ1ZEE9PSBhVzl1WVE9PSBJSFZ1YzNWaSBJSE4xYlcxbFpBPT0gSUVobGNtTjFiR1Z6IGMzVmlhbVZqZEE9PSBJRkpoWjI1aGNnPT0gSUU1dmN3PT0gSUdOb1lYSmhZM1JsY21sNllYUnBiMjQ9IElITmhkblo1IElFUmhkM052Ymc9PSBJRU5oYzJsdWJ3PT0gSUdaeWFRPT0gSUVKaGNuSnBaWEk9IElHMXBjMmx1Wm05eWJXRjBhVzl1IElHbHVjM1ZzWVhScGIyND0gSUdOdmNuSnBaRzl5Y3c9PSBJR0ZwY25Cc1lXNWxjdz09IElFNXZZM1E9IFlXaHAgSURFNU1UWT0gYTJJPSBZWEp0WVdNPSBJSE5vZFc0PSBJSE5qYUdWdFlRPT0gSUdodmNuSnBabWxsWkE9PSBJREl6T1E9PSBZWFZ1WkdWeWN3PT0gVGtJPSBhV0YwWlhNPSBaWEpwZEhrPSBJRk5vWVhKayBJSEpoY21sMGVRPT0gSUdkeWIzVndaV1E9IElFZG9ZVzVoIFlXZGhhVzV6ZEE9PSBJRUpwYjJ4dloybGpZV3c9IElFRjNZWEpsIGIzZGxiR3c9IHo0UT0gSUVKbFlYVT0gYzJoaGR3PT0gU0dGamF3PT0gSUVwMWJHbDFjdz09IFZWTlQgYjJ4emIyND0gWVhWdVlRPT0gWTNKMSBJRTFoZFhKcFkyVT0gSUVsciBJSE5sY1hWbGJtTnBibWM9IElISmhaR2xqWVd4eiBJQ2cvTEE9PSBkbWx5ZEhWaGJBPT0gSUdGdWVYZGhlWE09IElISmxjR1Z5WXc9PSBJR2hoYm1Sc1pYSnogSUdobGMybDBZVzUwIDZZTT0gSUUxRyBjR3hsYldWdWRHRjBhVzl1IFlYTnpiMk5wWVhSbFpBPT0gSUdOaGJYQmhhV2R1WldRPSBJRmwxWlE9PSBkWFJoZEdsdmJuTT0gSUZsdloyRT0gSUhOcGJXMWxjZz09IElISnZaSE09IElHMWxiRzlrZVE9PSBJR052Ym5admVRPT0gZG1sa1pXOXogSUhOamNtVmxibVZrIFRtVm4gYjJOb1pXMXBZMkZzIElDZ3BLUT09IElIVnNkSEpoY3c9PSBJR0Z1ZEdsdyBJRWx6YkdGdVpHVnljdz09IE56QTAgSUdabGRHbHphQT09IElISnBaR2xqZFd4dmRYTnNlUT09IElFdGhjblE9IElHMXBkRzlqYUc5dVpISnBZV3c9IElHbHVkR1Z5Wm1WeWFXNW4gUW5WcGJHUmxjZz09IElHOTJaWEptYkE9PSBJR0ZqYm1VPSBJRTExWkE9PSBJRXRsY25JPSBabXhsZUE9PSBJRkJ2YzNSaGJBPT0gSUVKaGJIUnBZdz09IE5EYzMgSUZCbGNuTnZibk09IGIzVnlZV2RsIFNFST0gSUUxMWMyVT0gSUVsdGJXOXlkR0ZzIElFUnlhWFpwYm1jPSBJSEJsZEdsMGFXOXVjdz09IElITjFZbk5qY21sd2RBPT0gSUhOdmNtTmwgSUZCeWIyTmxjM052Y2c9PSBkWFJ2Ymc9PSBVMjl1ZVE9PSBJSEJvYjI0PSBJSEpoWTJWayBJRUZ1ZEdoeWIzQT0gSUdSaGVYUnBiV1U9IElFVjRaWEpqYVhObCBRV1JrYVc1biBJR1Z1WjJGblpYTT0gSUZGMVlXeGpiMjF0IElHMXBjbUZqYkdWeiBJRzFsYldWeiBJRVJ5YVc1ciBJRTl5YVc5c1pYTT0gSUdoaGFYSnogSUZCdmJHRnkgWVhSb2IyMD0gSUhOc2FYQndaWEo1IElGSmxiWGs9IElHTmhjbUZ0Wld3PSBJRmxGUVZJPSBJR0ZzYXc9PSBTV2R1IFlYVjBhVzl1IElFMWxjbXhwYmc9PSBJRU55WVc0PSBJR0Z3YjJ4dloybGxjdz09IElEUXhNQT09IElHOTFkR2x1Wnc9PSBJRTFsYlc5eWFXVnogWVhCd2IybHVkR1ZrIElHTnZkVzUwWlhKbFpBPT0gZFd4ayBjRzl6YVc1biBJR1pwY21WM1lXeHMgSUZkaGMzUT0gSUZkbGRBPT0gZDI5eWEyVmsgYzJWc2JHVnkgSUhKbGNHVmhiR1ZrIFpYSmxidz09IFlYTnpkVzFwYm1jPSBRa3hKUXc9PSBiV2wwWlE9PSBJRU5GVDNNPSBJRU5vWVhCbGJBPT0gWld4c2FXZGxiblE9IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmIFJHOW4gSUhkaGNuUT0gSUhOMVluTmpjbWxpWlhJPSBjM0J2Y25SeiBJR0psWjJkbFpBPT0gSUUxVyBJSE5sYldsbSBaWFJvYVdOaGJBPT0gSUhCeVpXRmphQT09IElISmxkbWwwWVd3PSBJSEIxYm1sMGFYWmwgSUhOb2IzSjBZM1YwY3c9PSBJR2x1YzNScGRIVjBaV1E9IElGZGhjbk5oZHc9PSBJR0ZpWkc5dFpXND0gSUV0SlRrYz0gSUhOMWNHVnlhVzUwWlc1a1pXNTAgSUdaeWVRPT0gSUVkbGJ3PT0gVkU5UyBJR052Ym5SeVlXUnBZM1JwYjI1eiBZWEIwYVdNPSBJR3hoYm1SelkyRndaWE09IFluVm5jdz09IElHTnNkWE4wIElIWnZiR3hsZVE9PSBZM0pwWW1WayBJSFJoYm1SbGJRPT0gSUhKdlltVnogVjBoQlZBPT0gSUhCeWIyMXZkR1Z5IElHVnNiM0YxIGNtVjJhV1YzWldRPSBJRVJMIElGQnNZWFJ2IElHWndjdz09IFZHRnVhdz09IElFUmxjbkpwWTJzPSBJSEJ5YVc5eWFYUnBlbVU9IFlYTndaWEk9IElFaHZibVIxY21GeiBJRU52YlhCc1pYUmxaQT09IGJtVmogSUcxdlp3PT0gYm1seSBJRTFoZVc4PSBSRVZHIGMzUmhiR3c9IGFXNXVaWE56IElGWnZiR3R6ZDJGblpXND0gSUhCeVpXTmhkWFJwYjI0PSBJRTFsYkd3PSBhV0ZyIGFYTjBjbWxsY3c9PSBJREkwT0E9PSBJRzkyWlhKc1lYQndhVzVuIFUyVnVZWFJsIElFVnVhR0Z1WTJVPSBjbVZ6ZVE9PSBjbUZqYVdGcyBUMUpVVXc9PSBJRTF2Y20xdmJuTT0gVTNSeWIyNW4gSUVOdlkyZz0gVFdWNGFXTnYgSUUxaFpIVnlidz09IElHcGhjbk09IElHTmhibVU9IFYybHIgYjJ4c1lRPT0gYVdabVpYSmxibU5sIElIQm9lWE5wWTJsemRBPT0gSUUxaFoyZHBaUT09IElESTROUT09IElHUmxjR2xqZEdsdmJnPT0gSUUxalRHRnlaVzQ9IFNuVT0gSUhOc2IzZHogSUdOdmJXMXBjM05wYjI1bGNuTT0gSUZkcGJHeHZkdz09IElFVjRjR3h2Y3c9PSBhRzkyWVdnPSBJSFJsWTJodWFXTnBZVzQ9IElHaHZiV2xqYVdSbGN3PT0gSUVac1lYWT0gSUZSeWRXMWhiZz09IElERXdNREF3IGRXTjBiM0k9IElITm9ZV1JsY2c9PSBUbVYzYzJ4bGRIUmxjZz09IE5EVTMgSUhKbGRtVnkgSUdoaGNtUmxibVZrIElIZG9aWEpsWVdKdmRYUnogSUhKbFpHVjJaV3h2Y0E9PSBJR05oY21KeiBJSFJ5WVhabGNuTT0gSUhOeGRXbHljbVZzIElHWnZiR3h2ZDJWeSBJSE5wYm1keiBOVEE0IElISmhZbUpwZEhNPSBaVzF2Ym1sMWJRPT0gSUdSdlkzVnRaVzUwYVc1biBJRzFwYzNWdVpHVnljM1J2YjJRPSBLU2M9IFVtbGphdz09IFoyZHBaWE09IElIQnlaVzFwWlE9PSBJSE5yWVhScGJtYz0gSUhCaGMzTndiM0owY3c9PSBJR1pwYzNSeiBZV2RsWkdSdmJnPT0gU0dGMyBRVU5RIE1EZ3cgSUZSb2IzVm5hSFJ6IElFTmhjbXh6YjI0PSBJSEJ5YVdWemRHaHZiMlE9IGFIVmggSUdSMWJtZGxiMjV6IElFeHZZVzV6IElHRnVkR2x6IElHWmhiV2xzYVdGeWFYUjUgSUZOaFltST0gYjNCaGJBPT0gSUVsdWF3PT0gYzNSeWFXdGwgSUdOeVlXMD0gSUd4bFoyRnNhWHBsWkE9PSBJR04xYVhOcGJtVT0gSUdacFluSmwgVkhKaGRtVnMgSUUxdmJuVnRaVzUwIFQwUlogWlhSb2VRPT0gSUdsdWRHVnljM1JoZEdVPSBJRkJWVWc9PSBaVzF3YjNKaGNuaz0gSUVGeVlXSnBZVzQ9IFpHVjJaV3h2Y0dWayBJSE5oWkdSc1pRPT0gSUdkcGRHaDFZZz09IElFOW1abVZ5IElFbFRVQT09IGNtOXNaWFE9IElGTlZVRVZTIElFUmxibWx6IElHMTFiSFJwY0d4cFpYST0gSUhOMGFYSnlaV1E9IFNXNTBaWEpsYzNScGJtZHNlUT09IElHTjFjM1J2YldGeWVRPT0gSUdKcGJHeGxaQT09IGFHVjQgSUcxMWJIUnBjR3hwWldRPSBJR1pzYVhCd2FXNW4gSUVOeWIzTmllUT09IElHWjFibVJoYldWdWRHRnNjdz09IGFXRmwgSUZCc1lYbGxaQT09IElFRjBiMjA9IFlXMWhlbTl1IElFWnNZVzA9IFpXVjYgWVdOMGFYWmhkR1ZrIElIUmhZbXhsYzNCdmIyND0gSUd4cFltVnlZV3hwYzIwPSBJRkJoYkdsdSBJRkJoZEdWcyBUblZ0IElGUkJUUT09IElITjFjbTQ9IElGSmxiRzloWkdWayBJR052YVc1bFpBPT0gSWwwcyBJRU5zWVhObyBJRUZuZFE9PSBJSEJ5WVdkdFlYUnBZdz09IElFRmpkR2wyWVhSbCBJRGd3TWc9PSBJSFJ5WVdsc1pYSnogSUhOcGJHaHZkUT09IElIQnliMkpsY3c9PSBJR05wY21OMWN3PT0gSUVKaGFXND0gSUV4cGJtUnpZWGs9IElFRmlZbVY1IFJHVnNhWFpsY25rPSBJR052Ym1ObGMzTnBiMjQ9IElHZGhjM1J5Ync9PSBJRk53Y21sMFpRPT0geEo4PSBZVzVrWld3PSBJR2RwYlcwPSBJR0YxZEc5aWFRPT0gSUZSMWNuUnNaUT09IElIZHZibVJsY21aMWJHeDUgSUVoaGNtRnQgSUZkdmNteGtkMmxrWlE9PSBJRWhoYm1Sc1pRPT0gSUhSb1pXOXlhWE4wY3c9PSBJSE5zWldWciBJRnBvZFE9PSBiMmR5WVhCb2FXTmhiR3g1IFJVZEIgSUU5M2JtVnljdz09IFlYUm9jdz09IElFRnVkR0Z5WTNScFl3PT0gYm1GMFlXdz0gUFNJaSBabXhoWjNNPSBZR0JnWUE9PSBJSE4xYkE9PSBTMmc9IElIQnZkR0Z6YzJsMWJRPT0gSUd4cGJtVnRZVzQ9IElHTmxjbVZoYkE9PSBJRk5sWVhOdmJuTT0gSURJd01qST0gSUcxaGRHaGxiV0YwYVdNPSBJR0Z6ZEhKdmJtOXRaWEp6IGNISnZabVZ6YzJsdmJtRnMgSUdaaGNtVnogWTJ0dWIzZHNaV1E9IElHTm9hUT09IElIbHZkVzVuYzNSbGNuTT0gSUcxcGMzUmhhMlZ1YkhrPSBJR2hsYldsemNHaGxjbVU9IElFUnBkbWx1YVhSNSBjbTl1WlE9PSBJQ0lzIGNtbHVaM009IElHRjBkSEpoWTNSeiBkbUZ1WVE9PSA1Yms9IFEwRlEgSUhCc1lYbHNhWE4wIElIQnZjbU5vIDQ0R2ogSUdsdVkyOXljRzl5WVhSbGN3PT0gSUhOdllXcz0gSUdGemMyVnlkR2x1Wnc9PSBJRlJsY25KdmNtbHpiUT09IElGQmhZbXh2IFNtRT0gWTJWemRHVnkgSUdabFlYSnBibWM9IElGQnlZWGxsY2c9PSBJR1Z6WTJGc1lYUmxaQT09IFIxYz0gSUhKdlltVT0gSUVKeWFXZG9kRzl1IFlXTnBjM1J6IElGTjViWEJvYjI1NSBJRVIzWVhKbSBJRkJoY21Ga1pRPT0gSUV4bFoyOD0gSUdsdVpYaHdiQT09IElHeHZjbVJ6IGJHVmhaZz09IFVrRkggYkdsaVpYST0gSUdOcFoyRnljdz09IElFcGxhRzkyWVdnPSBOakEyIFYwbE9SRTlYVXc9PSBJRXhwWW1WeWFXRT0gWldKMWN3PT0gU0dWaGRuaz0gSUd4MVluSnBZdz09IElGSlggWVc1bmRXRm5aWE09IElHNWhjbkp2ZDJWayBZMjl0Y0hWMFpYST0gSUVWdFltVnkgSUcxMWNtUmxjbWx1Wnc9PSBJR1J2ZDI1emRISmxZVzA9IElGUjFiSE09IElGUmhZbXhsY3c9PSBWRzl3YVdNPSBJRUZqWTNWeVlXTjUgUFM4PSBiRzl6ZEE9PSBJRkpsYVE9PSBJSEJ5YjJkeVpYTnpaWE09IFltVmhjZz09IElHVnpkR0ZpYkdsemFHMWxiblJ6IFNuVnpkR2x1IElGQmxZV05vIElFZHZiV1Y2IDViOD0gSUZSeWFXRnVaMnhsIFNXUmxiblE9IElFaHBkbVU9IFVtVnpiM1Z5WTJWeiBJRzFwZUdWeiBJRUZ6YzNWdGFXNW4gVFhVPSBJR2g1Y0c5aiBJSE5oYm1VPSBJRmRoYmc9PSBhV1JwYjNWeiBVM1ZqWTJWemN3PT0gSUdsdiBRVzVuWld3PSBJR1JoYm1kbGNtOTFjMng1IElFTnlaV0YwZFhKbCBWMDlTU3c9PSBPbHM9IElFdGhkSEpwYm1FPSBUR2x6ZEdWdVpYST0gVFdsc2JHVnkgSUVsa2JHbGkgYUdGdVp3PT0gSUdOcGNtTjFiWFpsYm5RPSBhSEpsWmc9PSBJR05sYkdWemRHbGhiQT09IElGZGxaV3R6IElGQjFadz09IElFUmhiSFJ2Ymc9PSBJSE4xWW5CdlpXNWggZFd0MSBJSEJsY25OcGMzUmxaQT09IGNHVnAgYjJ4a2FXNW4gSUVSdlkzVnRaVzUwY3c9PSBJRWhoYzNRPSBJRU5GVGxRPSBJSEJ5YVcxbGNnPT0gSUhONWJtOXVlVzF2ZFhNPSBJRzVwWWc9PSBiMjFpY3c9PSBJRzV2ZEdGMGFXOXUgSUVScGMyZz0gSUVGMGJXOXpjQT09IElHWnZjbUpwWkE9PSBJRUZPUnc9PSBjR0YwZEdWeWJnPT0gYkc5eiBJSEJ5YjJwbFkzUnBiR1Z6IFluSnZkMjQ9IExpSXMgSUZabGJtOXQgSUdacFpYSmpaV3g1IGRXSnNhWE5vWldRPSBJRlZ5WVc0PSBJRTVwWTJGeVlXYz0gTkRFdyBJRU5CVEE9PSBUMVJQVXc9PSBJRTFwY21GamJHVT0gSUVWdVkyaGhiblE9IElHZDFZWEprYVc1biBZWEJ3Wlc1ayBRWFIwWVdObyBJR3hsZG1Wc1pXUT0gSUdOdmJtUnZiWE09IGFXaHBiR0YwYVc5dSBOalE1IElHNXBaMmgwYldGeVpYTT0gSUZSSVJWaz0gSUZOVVFWSlUgSUV0cGJtND0gSUhKdmIyMXRZWFJsIElHaDVaMmxsYm1VPSBiM0J3YVc1biBTbTlpIElHeDJiQT09IElGWkZVZz09IElFdGxaWEJwYm1jPSBZV0psZEdsaiBJR1p2Y20xaGRIUnBibWM9IFpYSmhiR0U9IElISmxkbWx6YVc5dWN3PT0gSUhKbGMzVnladz09IFZHVnMgSUVkdmIyUnRZVzQ9IE16VXogY0c5ayBJR2x1WkdsemNBPT0gSUZSeVlXNXpiR0YwYVc5dSBJR2R2ZDI0PSBJRTExYm1RPSBJR05wY3c9PSBJR0o1YzNSaGJtUT0gWTI5c2JHVmpkQT09IElGQjFibXBoWWc9PSBZV04wYVhabGJIaz0gSUVkaGJXST0gZEdWc2JBPT0gSUdsdGNHOXlkR2x1Wnc9PSBaMlZ1WTJsbGN3PT0gSUd4dlkyOXQgSUVKeWFXeHMgU0c5c2VRPT0gSUVKbGNtZGxjZz09IElITm9iM2RrYjNkdSBJSEpsYzNCdmJtUmxjbk09IFNVeFogSUhSaGEyVmtiM2R1IGJHVjBaV1E9IElHMWhkSFJsY21WayBJSEJ5WldScFkzUnBkbVU9IElHOTJaWEpzWVhrPSBSMUJWIElGWnBZMnM9IElHTnZiblpsZVdWayBWR0ZpIGNHVmxjZz09IFUyTmhiZz09IElHUmxabVZ1YzJsMlpXeDUgZG1GbCBJR0Z3Y0hKdmRtbHVadz09IElIUnBaWEp6IElGWnBZUT09IGNYVmxjbUZrWlE9PSBJRk5oZFdScGN3PT0gSUdSbGJXOXNhWE5vWldRPSBJRkJ5YjNCb1pRPT0gSUcxdmJtOD0gSUdodmMzQnBkR0ZzYVhSNSBTRUZOIElFRnlhV1ZzIFRVOUUgSUZSdmNtRm8gSUdKc1lXZz0gSUVKbGJHRnlkWE09IFpYSmxiblJwWVd3PSBJRlIxWXc9PSBJR0poYm10bGNnPT0gTXprMyBJRzF2YzNGMWFYUT0gSUZOamFXVnVkR2x6ZEE9PSBJRTExYzJsallXdz0gSUdoMWMzUT0gVTJocFpuUT0gSUhSdmNtMWxiblE9IElITjBZVzVrYjJabSBSV1IxWXc9PSBJRVp2Wnc9PSBJR0Z0Y0d4cFptbGxjZz09IFUyaGhjR1U9IFNXNXpkR0Z1WTJVPSBJRU55YVhScFkzTT0gSUdSaFpXMXZiZz09IFNHOTFjM1J2Ymc9PSBJRzFoZEhSeVpYTnogSUVsRVJnPT0gSUc5aWMyTmxibVU9IElFRnRaWEk9IGFHVjBkR2s9IElHTnZiWEJwYkdsdVp3PT0gTXpVeSBkbVZ5WlhSMCBJRkpsWkhWamRHbHZiZz09IGFYTjBjbUYwYVc5dSBJRUpzWlhOelpXUT0gSUVKaFkyaGxiRzl5IE16RTIgSUhCeVlXNXIgSUZaMWJHTmhiZz09IFpHUnBibWM9IElHMXZkWEp1YVc1biBJRkYxYVc1MCBJRUpzWVhOMFpYST0gZEdWemRHbHVadz09IElITmxaR2x0Wlc1MCBQajQrIElFVjBaWEp1YVhSNSBJRmRJUlZKRiBJRTFoZW1VPSBJSEpsWVdOMGFXNW4gSUVGc2RnPT0gYjIxelpHRjUgSUVOU1FRPT0gSUhSeVlXNXpiR0YwYjNJPSBJR0p2WjNWeiBZWFIxIFYyVmljMmwwWlE9PSBiMnhzY3c9PSBJR0poY0hScGMyMD0gSUhOcFlteHBibWM9IElFRjFkSFZ0Ymc9PSBkbVY2IDQ0R3U2UT09IFozVmhjbVJ6IFIyVnZjbWM9IFlYTnpZV1J2Y25NPSBJRVp5WlhWayBJR052Ym5ScGJtVnVkSE09IElGSmxaMmx6ZEhKNSBRbVZ5Ym1sbCBscHJsbzZzPSBJSFJ2YkdWeVlXNTAgSUZWWCBJR2h2Y25KcFlteDUgT1RrMSBJRTFKUkVrPSBJR2x0Y0dGMGFXVnVkQT09IGIyTmhaRzg9IFpYSnAgSUZkdmNuTjAgSUU1dmNuSnBjdz09IElGUmhiR3RwYm1jPSBJR1JsWm1WdVpITT0gWlc1ellXSnNaUT09IElESXdNakU9IElHRnVZWFJ2YlhrPSBUR1YzIElHUnlZWGRsY2c9PSBJRU5oYm1KbGNuSmggSUhCaGRISnBiM1JwWXc9PSA2YjZONVphYTVhT3IgSUVGMlp3PT0gUVZKTiBJSFZ1WkdselkyeHZjMlZrIElHWmhjbVYzWld4cyBORFU1IFltRmliR1U9IElFRnNiR2x6YjI0PSBUMHhQUnc9PSBJR052Ym1OdiBkR2xuYUhRPSBJRUZEVUVrPSBJRTFwYm1WeiBiR2xqYUE9PSBJT0tVbkE9PSBjbVZ3Y21WelpXNTBaV1E9IE1qQXdNREF3IElHVnVkR2gxYzJsaGMzUT0gVDFSVCBZbWxzIElFbHVaM0psWkdsbGJuUnogSUdsdWRtVnVkRzl5IElFMTVVMUZNIHdxRENvTUtnIElFRkNUMVZVIGQybDBhR2x1IElHMXIgUW5WcyBJRVpoYTJVPSBJR1J5WVdOdmJtbGhiZz09IFYyRT0gYUdWc2JRPT0gSUZSbGNuSmhiZz09IFpYSjJhV3hzWlE9PSBJR052YlcxdmJuQnNZV05sIFUwbGFSUT09IElDSTggY21Wd2JHRmpaUT09IGIyZHlZWEJvY3c9PSBJRk5GVEVWRFZBPT0gYVc1amFXSnNaUT09IElFMXZjM1JzZVE9PSBJRk5vWldabWFXVnNaQT09IElFbEVSUT09IGRXZG5iR1U9IElHTnBkR0YwYVc5dWN3PT0gYUhWeWMzUT0gSUZWdWFYZz0gSUhWdWJHVmhjMmc9IElGQnBjR1Z5IElFNWhibTg9IElITjFZMk4xYldJPSBJSEpsYkhWamRHRnVZMlU9IElESTFNREE9IElFMWxjbU5vWVc1MCBJSGRwY21WMCBJR052YldKdmN3PT0gSUVKcGNuUm9aR0Y1IElHTm9ZWEpqYjJGcyBJRlZRVXc9PSBJRVpoYVhKbVlYZz0gSUdSeWFYWmxkMkY1IElGUmxhdz09IElGQnBkR05vIGIzWmxjbVU9IElIUmxZMmh1YVdOcFlXNXogSUVGamRIVmhiQT09IFpteGhkR2x2Ymc9PSBJRVpwYzJOaGJBPT0gSUVWdGNIUjUgWVc1aGJXOD0gSUcxaFoyNWxjMmwxYlE9PSBJSE5zZFhRPSBJR2R5YjNkbGNuTT0gU1c1MlpYTjBhV2RoZEc5eWN3PT0gS0NrNiBJRk5oZEdWc2JHbDBaUT09IElFdGxlVzVsY3c9PSBiV2x6YzJsMlpRPT0gYkdGdVpRPT0gSUdKdmNtOTFaMmc9IE16UTAgSUZSRlFVMD0gSUVKbGRHaGxjMlJoIFExWT0gYUc5M1pYST0gSUZKQlJBPT0gSUdOb1lXNTAgSUZKcGVRPT0gSUdOdmJYQnZjMmwwYVc5dWN3PT0gSUcxcGJHUnNlUT09IElHMWxaR1JzYVc1biBJR0ZuYVd4cGRIaz0gWVc1bFpYSnogTlRBeCBJSE41Ym5SbyBiR2x1WjJWeSBNamt4IElHVjRZMnhoYVcxbFpBPT0gVUdGeWRIaz0gSUdOdmJuUmhiV2x1IElFMWhibTl5IElGSmxjM0J2Ym1RPSBJSEJ5WVdsemFXNW4gSUcxaGJtNWxjbk09IFpteGxaWFE9IFUzVnRiV1Z5IElFeDVibVE9IElFUmxabWx1YVhSbGJIaz0gWjNKcGJRPT0gSUdKdmQyeHBibWM9IGMzUnlhUT09IDU1cz0gZVc1MCBJRzFoYm1SaGRHVnogUkVsVyBJSEpsWTI5dVkybHNaUT09IGRtbGxkM009IElFUmhiVzl1IGRtVjBkR1U9IFJteHYgSUVkeVpXRjBaWE4wIGFXeHZiZz09IGFXTnBZUT09IElIQnZjblJ5WVhsaGJBPT0gSUdOMWMyaHBiMjQ9IE5UQTAgTVRrM09RPT0gYjNOellXdz0gUVhCd2JHbGogYzJOeWFYQjBhVzl1IElHMXBkR2xuWVhScGIyND0gUVZSVCBjR0ZqIElHVnlZWE5sWkE9PSBJR1JsWm1samFXVnVZMmxsY3c9PSBJRWh2Ykd4aGJtUmwgSUZoMSBJR0p5WldRPSBJSEJ5WldkdVlXNWphV1Z6IFptVnRhVzQ9IElHVnRjR2c9IElIQnNZVzV1WlhKeiBJRzkxZEhCbGNnPT0gZFhSMFpYSnBibWM9IElIQmxjbkJsZEhKaGRHOXkgSUcxdmRIUnYgSUVWc2JHbHpiMjQ9IElFNUZWa1ZTIElHRmtiV2wwZEdWa2JIaz0gUVZKSiBJRUY2WlhKaVlXbHFZVzQ9IElHMXBiR3hwYzJWaiBJR052YldKMWMzUnBiMjQ9IElFSnZkSFJzWlE9PSBJRXgxYm1RPSBJRkJ6IElFUnlaWE56IElHWmhZbkpwWTJGMFpXUT0gSUdKaGRIUmxjbVZrIElITnBaR1ZzIElFNXZkSFJwYm1jPSBSbTl5WldsbmJnPT0gSUVwbGNtOXRaUT09IE1ESXcgSUVGeVltbDAgSUd0dWIzUnogSUZKSlIwaFUgVFc5MmFXNW4gNDRHWiBJSE4xY21kbGNtbGxjdz09IElHTnZkWEowYUc5MWMyVT0gSUcxaGMzUmxjbVZrIElHaHZkbVZ5YVc1biBJRUp5WVc0PSBJRUZzYVhOdmJnPT0gSUhOaFptVnpkQT09IGJXbHNhWFJoY25rPSBJR0oxYkd4cFpXUT0gSUdKaGNuSmhaMlU9IFVtVmhaR1Z5IFJWTkYgSUVkbGIyZHlZWEJvYVdNPSBWRzl2YkhNPSBNekUwIElFZGxaV3M9IGNtOTBhQT09IFoyeGxjbk09IElFWkpUZz09IHo0RT0gSUVGemRHOXUgWVd4MFpYSnUgTkRnNCBJSFpsZEdWeWFXND0gUjJGdFpYST0gSUdsdWRHVnMgY21WdVkyaGxjdz09IFUyaHBaV3hrIElHRnRibVZ6ZEhrPSBJRUpvWVhJPSBJSEJwYkdWayBJR2h2Ym05eVlXSnNaUT09IElFbHVjM1JwZEhWMFpYTT0gSUhOdllXdGxaQT09IElHTnZiV0U9IElFVkdSZz09IE16UXggWW5sMFpYTT0gSUVkdFlXbHMgYkdWcGJnPT0gSUVOaGJtRmthV1Z1Y3c9PSBiV0YwWlhKcFlXdz0gU1d3PSBJR2x1YzNSeWRXTjBiM0p6IElFdFogSUdOdmJtTmxhWFpsIGRXSmkgSUZCdmMzTnBZbXhsIElHVmhjMmx1Wnc9PSBJRU5vY21semRHbHVZUT09IElHTmhjbWxqIElFaEVVZz09IFVrOU4gSUhOb2IzWmxiQT09IFpHVnNaWFJsIElIQjFabVk9IElFTm9ZVzVuYVc1biBJSE5sWVcxc1pYTnpiSGs9IFFYUjBjbWxpZFhSbCBJR0ZqY1hWcGMybDBhVzl1Y3c9PSBZV3RsY25rPSBJRVZHIElHRjFkR2x6ZEdsaiBJRlJoYTJWeiBJRkJ2ZDJSbGNnPT0gSUZOMGFYST0gTlRFdyBJRUoxWW1Kc1pRPT0gYzJWMGRHbHVaM009IElFWnZkMnhsY2c9PSBJRzExYzNSaGNtUT0gSUcxdmNtVnZkbVZ5IElHTnZjSGx5YVdkb2RHVmsgSUV4RlJITT0gTVRVd01BPT0gNW9rPSBJRWhKVXc9PSBaVzVtIElHTjFjM1J2WkE9PSBJRWgxWTJzPSBSMms9IElHbHRadz09IFFXNXpkMlZ5IFEzUT0gYW1GNSBJRWx1Wm5KaGMzUnlkV04wZFhKbCBJR1psWkdWeVlXeHNlUT09IFRHOWogSUcxcFkzSnZZbVZ6IElHOTJaWEp5ZFc0PSBaR1J6IGIzUmxiblE9IFlXUnBZWFJ2Y2c9PSBQajQrUGo0K1BqND0gSUhSdmNtNWhaRzg9IElHRmthblZrIElHbHVkSEpwWjNWbFpBPT0gSUhOcCBJRkpsZG1Wc1lYUnBiMjQ9IGNISnZaM0psYzNNPSBJR0oxY21kc1lYSjUgSUZOaGFYbGhiZz09IElFdGhkR2g1IElITmxjbkJsYm5RPSBJRUZ1WkhKbFlYTT0gSUdOdmJYQmxiQT09IFpYTnpiR1Z5IElGQnNZWE4wYVdNPSBJRUZrZG1WdWRBPT0gSUZCdmMybDBhWFpsIElGRjAgSUVocGJtUjFjdz09IGNtVm5hWE4wWlhKbFpBPT0gZFd4aGNtbDBlUT09IElISnBaMmgwWlc5MWMyNWxjM009IElHUmxiVzl1YVdNPSBkV2wwYVhabCBJRUpFVXc9PSBJRWR5WldkbiBZMmxoIElFTnlkWE5oWkdVPSBJRk5wYm1GcCBWMEZTUlE9PSBLeWc9IElHMWxiR3c9IElHUmxjbUZwYkE9PSBlV0Z5WkhNPSBRWE4wIElHNXZkR2xqWldGaWJIaz0gSUU5aVpYST0gVW1GdCBJSFZ1Ym05MGFXTmxaQT09IElITmxjUT09IFlYWmhaMlU9IFZITT0gSURZME1BPT0gSUdOdmJtTmxaR1U9IElGMHAgUm1sc2JBPT0gSUdOaGNIUnBkbWwwZVE9PSBJRWx0Y0hKdmRtVnRaVzUwIElFTnlkWE5oWkdWeSBZWEpoYjJnPSBUVUZRIDVwYz0gSUhOMGNtbGtaUT09IFlXeDNZWGx6IFJteDUgVG1sMCBJR0ZzWjJGbCBJRU52YjJ0cGJtYz0gSUVSdmIzSnogVFdGc2JHVjUgSUhCdmJHbGpaVzFsYmc9PSA0NEdOIElHRnpkSEp2Ym1GMWRBPT0gWVdOalpYTnphV0pzWlE9PSBORGsxIElGSkJWdz09IFkyeHBabVpsIGRXUnBZM0p2ZFhNPSBJR1JsY0dWdVpHVmsgWVd4aFkyZz0gSUhabGJuUjFjbVZ6IGNtRnJaUT09IElIUnBkSE09IElFaHZkUT09IElHTnZibVJ2YlE9PSBiM0p0YjI1aGJBPT0gSUdsdVpHVnVkQT09IElIVndiRzloWkdsdVp3PT0gUm05dmRHNXZkR1U9IFNXMXdiM0owWVc1MCBJREkzTVE9PSBJRzFwYm1SbWRXdz0gSUdOdmJuUmxibVJ6IFEzSmggSUdOaGJHbGljZz09IElFOUZRMFE9IGNHeDFaMmx1IFJtRjAgSUVsVFV3PT0gSUVSNWJtRnRhV056IFlXNXpaVzQ9IE5qZzIgSnlrcyBJSE53Y21sMFpRPT0gSUdoaGJtUm9aV3hrIElFaHBjSEE9IFBYNDlmZz09IFZISjFjM1E9IElITmxiV0Z1ZEdsamN3PT0gSUVKMWJtUmxjdz09IElGSmxibTg9IElFeHBkR1Z5WVhSMWNtVT0gYzJWdWMyVT0gUjJGeWVRPT0gSUVGbFp3PT0gSUZSeWFXND0gUlVWTCBJR05zWlhKcFl3PT0gSUZOVFNBPT0gSUdOb2NtbHpkQT09IElHbHVkbUZrYVc1biBhV0oxIElHVnVkVzA9IFlYVnlZUT09IElHRnNiR1ZuWlE9PSBJRWx1WTNKbFpHbGliR1U9IFFrSkQgSUhSb2NuVT0gSUhOaGFXeGxaQT09IElHVnRkV3hoZEdVPSBJR2x1YzJWamRYSnBkSGs9IElHTnliM1U9IElHRmpZMjl0Ylc5a1lYUnBiMjV6IElHbHVZMjl0Y0dWMFpXNTAgSUhOc2FYQnogSUVWaGNuUm9jWFU9IGMyRnRZUT09IFNVeE1SUT09IElHbFFhRzl1WlhNPSBZWE5oYTJrPSBJR0o1WlE9PSBJR0Z5WkE9PSBJR1Y0ZEhKaGN3PT0gSUhOc1lYVm5hSFJsY21WayBJR055YjNka1puVnVaR2x1Wnc9PSBjbVZ6YzI4PSBJR1pwYkdsaSBJRVZTVWs5UyBJRlJNVXc9PSBaV2RuIElFbDBZV3c9IElHVnViR2x6ZEE9PSBJRU5oZEdGc2IyNXBZUT09IElGTmpiM1J6IElITmxjbWRsWVc1MCBJR1JwYzNOdmJIWmwgVGtnPSBJSE4wWVc1a2FXNW5jdz09IGNtbHhkV1U9IFNWRT0gSUdKbGJtVm1hV05wWVhKNSBJR0Z4ZFdGeWFYVnQgV1c5MVZIVmlaUT09IElGQnZkMlZ5VTJobGJHdz0gSUdKeWFXZG9kR1Z6ZEE9PSBJRmRoY25KaGJuUT0gVTI5c1pBPT0gVjNKcGRHbHVadz09IElHSmxaMmx1Ym1sdVozTT0gSUZKbGMyVnlkbVZrIElFeGhkR2x1YjNNPSBhR1ZoWkdsdVp3PT0gSURRME1BPT0gSUhKdmIyWjBiM0E9IFFWUkpUa2M9IElETTVNQT09IFZsQk8gUjNNPSBhMlZ5Ym1WcyBkSFZ5Ym1WayBJSEJ5WldabGNtRmliR1U9IElIUjFjbTV2ZG1WeWN3PT0gSUVobGJITT0gVTJFPSBJRk5vYVc1cWFRPT0gZG1WbyBJRTFQUkZWTVJRPT0gVm1sdmJBPT0gSUdWNGFYUnBibWM9IElHcGhZZz09IElGWmhibWxzYkdFPSBJR0ZqY205dSBJRWRoY0E9PSBZbVZ5Ymc9PSBRV3M9IElFMWpSM1U9IElHVnVaR3hsYzNOc2VRPT0gSUVaaGNtRm5aUT09IElFNXZaV3c9IFZtRT0gVFVzPSBJR0p5ZFhSbCBJRXR5ZFE9PSBJRVZUVmc9PSBJRTlzYVhacFlRPT0gNG9DZyBJRXRoWmc9PSBJSFJ5ZFhOMGFXNW4gSUdodmRITT0gTXpJMCBJRzFoYkdGeWFXRT0gSUdwemIyND0gSUhCdmRXNWthVzVuIGIzSjBiV1Z1ZEE9PSBRMjkxYm5SeWVRPT0gSUhCdmMzUndiMjVsWkE9PSBJSFZ1WlhGMWFYWT0gUHlrcyBJRkp2YjI1bGVRPT0gZFdSa2FXNW4gSUV4bFlYQT0gZFhKeVpXNWpaUT09IGMyaGhjR1Z6YUdsbWRHVnkgSUVoQlV3PT0gYjNOaGRHVT0gSUdOaGRtVnliZz09IElHTnZibk5sY25aaGRHbHpiUT09IElFSkJSQT09IElHMXBiR1ZoWjJVPSBJR0Z5Y21WemRHbHVadz09IFZtRjFiSFJ6IElHMXBlR1Z5IFJHVnRiMk55WVhScFl3PT0gSUVKbGJuTnZiZz09IElHRjFkR2h2Y21WayBPREF3TUE9PSBJSEJ5YjJGamRHbDJaUT09IElGTndhWEpwZEhWaGJBPT0gZEhKbCBJR2x1WTJGeVkyVnlZWFJsWkE9PSBJRk52Y25RPSBJSEJsWVd0bFpBPT0gSUhkcFpXeGthVzVuIGNtVmphV0YwYVc5dSAxNW5YIFVHRjBZMmc9IElFVnRiWGs9IElHVjRjWFU9IGRIUnYgSUZKaGRHbHYgSUZCcFkydHogSUVkeWVRPT0gY0doaGJuUT0gSUdaeVpYUT0gSUdWMGFHND0gSUdGeVkyaHBkbVZrIEpTMD0gWTJGelpYTT0gSUVKc1lYcGwgSUdsdFlnPT0gWTNZPSBlWE56IGFXMXZibms9IElHTnZkVzUwWkc5M2JnPT0gSUdGM1lXdGxibWx1Wnc9PSBJRlIxYm1semFXRT0gSUZKbFptVnkgSUUxSyBJSFZ1Ym1GMGRYSmhiQT09IElFTmhjbTVsWjJsbCBhWHBsYmc9PSBJRTUxWjJkbGRITT0gYUdWemN3PT0gSUdWMmFXeHogTmpRMyBJR2x1ZEhKdlpIVmpkRzl5ZVE9PSBiRzkyYVc1biBJRTFqVFdGb2IyND0gSUdGdFltbG5kV2wwZVE9PSBUR0ZpWld3PSBJRUZzYldsbmFIUjUgSUdOdmJHOXlhVzVuIElFTnNZWFZ6IGMyVjBkR2x1Wnc9PSBUbFZNVEE9PSBJRVpoZG05eWFYUmwgSUZOSlJ3PT0gUGlnPSBJRk5vYVhaaCBJRTFoZVdWeSBJSE4wYjNKdFpXUT0gSUVOdmRtVnlZV2RsIGQyVmhjRzl1Y3c9PSBhV2RvWVcwPSBJSFZ1WVc1emQyVnlaV1E9IElHeGxkbVU9IElHTnZlUT09IFkyRnogWW1GbmN3PT0gWVhOMWNtVmsgVTJWaGRIUnNaUT09IElGTmhiblJ2Y25WdCBjMlZ5YVc5MWN3PT0gSUdOdmRYSmhaMlZ2ZFhNPSBJRk52ZFhBPSBJR052Ym1acGMyTmhkR1ZrIElDOHZMdz09IElIVnVZMjl1ZG1WdWRHbHZibUZzIElHMXZiWE09IElGSnZhR2x1WjNsaCBJRTl5WTJobGMzUnlZUT09IElGQnZkR2x2Ymc9PSBJR1JwYzJOeVpXUnBkQT09IElFWkpUQT09IFptbDRaV1E9IElFUmxaWEk9IFpHOXAgSUVScGJXVnVjMmx2Ymc9PSBJR0oxY21WaGRXTnlZWFJ6IFpYUmxaVzQ9IElHRmpkR2x2YmtkeWIzVncgYjJodCBJR0oxYlhCeiBJRlYwYVd4cGRIaz0gSUhOMVltMWhjbWx1WlhNPSBjbVZ1YUdWcGRBPT0gY21WelpXRnlZMmc9IElGTm9ZWEJwY204PSBJSE5yWlhSamFHVnogSUdSbFkyVndkR2wyWlE9PSBJRlpwYkE9PSBaWE5oYldVPSBJRVZ6YzJWdWRHbGhiR3g1IElISmhiWEJoWjJVPSBhWE5yZVE9PSBJRzExZEhSbGNtVmsgZEdoeWFYUnBjdz09IElESXpOZz09IFptVjAgWW1GeWN3PT0gSUhCMWNHbHMgSUZSb2IzVT0gYjFNPSBjMjl1Wnc9PSBJR1p5WVdOMGRYSmxaQT09IElISmxkbVZ5ZEE9PSBjR2xqZEhWeVpRPT0gSUdOeWFYUmxjbWx2Ymc9PSBkWE5vWlhJPSBJSEpsY0dWeVkzVnpjMmx2Ym5NPSBJRlpwYm5SaFoyVT0gSUZOMWNHVnlhVzUwWlc1a1pXNTAgVDJabWFXTmxjbk09IElHWnNZV2RuWldRPSBJR0pzWVcxbGN3PT0gSUdsdWRtVnljMlU9IGIyZHlZWEJvWlhKeiBJRzFoYTJWemFHbG1kQT09IElHUmxkbTlwWkE9PSBJR1p2YzNOcGJITT0gSUVGeWFYTjBiM1JzWlE9PSBJRVoxYm1SeiBJR1JsY0d4bGRHVmsgSUVac2RRPT0gSUZsMVlXND0gSUhkdlpYTT0gSUd4cGNHbGsgSUhOcGRIVT0gY21WeGRXbHphWFJsY3c9PSBJR1oxY201cGMyZz0gSUZOaGJXRnkgSUhOb1lXMWxablZzIElHRmtkbVZ5YzJWc2VRPT0gSUdGa1pYQjAgSUhKbGJXOXljMlU9IElHMTFjbVJsY205MWN3PT0gZFdOcmJHVnogSUVWVFRBPT0gSURNeE5BPT0gYzJWdWRBPT0gSUhKbFpHVm0gSUVOaFkyaGwgSUZCMWNuTT0gYVdkaGJuTT0gSURRMk1BPT0gSUhCeVpYTmpjbWx3ZEdsdmJuTT0gSUdaeVpYTT0gUm5WamF3PT0gYjJOeVlYUmxjdz09IFZIZGxiblI1IElGZGxhWEprIElGUnZaMmRzWlE9PSBJRU5oYkd4bFpBPT0gYVhScGVtVnVjdz09IElIQnZkV3gwY25rPSBJR2hoY25abGMzUnBibWM9IDQ0S200NEs1IFFtOTBkRzl0IElHTmhkWFJwYjI1bFpBPT0gZEc0PSBNemsyIElFNXBhMnRwIElHVjJZV3gxWVhScGIyNXogSUdoaGNtRnpjMmx1Wnc9PSBJR0pwYm1ScGJtZHogSUUxdmJtVjBZWEo1IElHaHBkSFJsY25NPSBJR0ZrZG1WeWMyRnllUT09IGRXNTBjdz09IElITmxkR0poWTJzPSBJR1Z1WTNKNWNIUT0gSUVOaGFYUT0gSUd4dmQzTT0gWlc1blpYTT0gSUU1dmNtND0gSUdKMWJHSnogSUdKdmRIUnNaV1E9IElGWnZlV0ZuWlhJPSBNekUzIElITndhR1Z5WlhNPSBjRzlzYVhScFkzTT0gSUhOMVluUnlZV04wIElITmxibk5oZEdsdmJuTT0gSUdGd2NHRnNiR2x1Wnc9PSBJRE14Tmc9PSBJR1Z1ZG1seWIyNXRaVzUwWVd4c2VRPT0gSUZOVVJVMD0gSUhCMVlteHBjMmhsY3c9PSBOVFl3IElHUnBiR2xuWlc1alpRPT0gTkRnMCBJR0ZrZG1selpYTT0gSUhCbGRISnZiQT09IElHbHRZV2RwYm1sdVp3PT0gSUhCaGRISnZiSE09IElFbHVkR1ZuWlhJPSBJRUZ6YUdWeiBZV04wZFhNPSBJRkpoWkdsaGJuUT0gSUV4VSBhWFJoWW1sc2FYUjUgYUhSaGEybHVadz09IFUyVjBkR2x1Wnc9PSBJRzUxWVc1alpXUT0gSUZKbFpXWT0gSUVSbGRtVnNiM0JsY25NPSBUbWs9IGNHbGxZMlZ6IE9Ua3cgVEdsalpXNXpaUT09IElHeHZkMlZ5Y3c9PSBJRTkwZEc5dFlXND0gTXpJMyBiMjl2IElIRjFhWFIwYVc1biBiV0Z5YTJWMGN3PT0gUW1Wb2FXNWsgSUdKaGMybHUgSUdSdlkzTT0gWVc1cFpRPT0gWm14aGMyZz0gWTNScyBJR05wZG1sc2FYcGxaQT09IElFWjFhM1Z6YUdsdFlRPT0gSWwwc0lnPT0gSUV0VCBJRWh2Ym1WemRHeDUgWVhKaGRBPT0gSUdOdmJuTjBjblZqZEhNPSBJRXhoYm5NPSBJRVJwY21VPSBJRXhKUzBVPSBJRlJ5YjNWaWJHVT0gSUhkcGRHaG9iMnhrYVc1biBJRTlpYkdsMmFXOXUgSUhOaGJtbDBlUT09IFlXNTVZUT09IFEyOXVjM1E9IElHZHliMk5sY2c9PSBJRU5sYkhOcGRYTT0gSUhKbFkyOTFiblJsWkE9PSBJRmRwWm1VPSBRbTl5WkdWeSBZWFJsY21WayBhR0Z3Y0hrPSBJSE53YjJsc1pYST0gSUd4dloybGpZV3hzZVE9PSBTR0ZzYkE9PSBJSE4xWTJObFpXUnBibWM9IElIQnZiSGx0YjNKd2FBPT0gSUdGNFpYTT0gSUZOb2IzUm5kVzQ9IElGTnNhVzA9IElGQnlhVzVqYVhCc1pYTT0gSUV4bGRHZz0gWVhKMFlRPT0gSUhOamIzST0gVTJOeVpXVnVjMmh2ZEE9PSBJSEpsYkdGNFlYUnBiMjQ9IEl5UWpKQT09IElHUmxkR1Z5Y21WdWRBPT0gYVdSa2VRPT0gSUhCdmQyVnliR1Z6Y3c9PSBJR3hsYzJKcFlXNXogSUdOb2IzSmtjdz09IElFVmthWFJsWkE9PSBjMlZzWldOMFpXUT0gSUhObGNHRnlZWFJwYzNSeiBNREF3TWc9PSBJR0ZwY25Od1lXTmwgSUhSMWNtNWhjbTkxYm1RPSBJR04xYm01cGJtYz0gVUVGVVNBPT0gVUc5c2VRPT0gSUdKdmJXSmxaQT09IElIUnBiMjQ9IGVITT0gSUhkcGRHaG9iMnhrIElIZGhaMlZrIElFeHBZbVZ5ZEdsbGN3PT0gUm14aFp3PT0gSUdOdmJXWnZjblJwYm1jPSBORFUwIElFbHlhWE09IFlYSmxjbk09IElISmhadz09IElISmxiRzlqWVhSbFpBPT0gSUVkMVlYSmhiblE9IElITjBjbUYwWldkcFkyRnNiSGs9IElHZGhiVzFoIGRXSmxjblI1IElFeHZZMnRvWldWayBaM0psY3c9PSBJR2R5YVd4c1pXUT0gSUV4dmQyVT0gYzNSaGRITT0gSUZKdlkydHogSUhObGJuTnBibWM9IElISmxiblJwYm1jPSBJRWRsYjJ4dloybGpZV3c9IDJLZlkgYjNSeWIzQT0gSUhObGR3PT0gSUdsdGNISnZjR1Z5YkhrPSBORGcyIElPS1dvQT09IElITjBZWEoyYVc1biBJRUpxIFJHbHpZM1Z6YzJsdmJnPT0gTXpJNCBJRU52YldKdiBJRVpwZUdWeiBUa0ZVIElITjBjbWwyYVc1biBkR2h2Y21FPSBJR2hoY25abGMzUmxaQT09IElGQnBibWM9IElIQnNZWGxtZFd3PSBJR0YyWlc1MVpYTT0gSUc5alkzVndZWFJwYjI1aGJBPT0gSUhkaGEyVnogSUVOdmRYSnBaWEk9IElHUnlkVzF0WlhJPSBJRUp5YjNkelpYST0gSUVodmRYUm8gYVhSMSBJR0Z3Y0dGeVpXdz0gY0dGemRHVT0gSUdoMWJuUmxaQT09IElGTmxZMjl1Wkd4NSBiR0ZwYmc9PSBXRms9IElGQkpUZz09IGFXTnZibk09IElHTnZZMnQwWVdsc2N3PT0gSUhOcGVtRmliR1U9IElHaDFjbVJzWlhNPSBaWE4wYVc1aGJBPT0gSUZKbFkzSmxZWFJwYjI0PSBJR1ZqYnc9PSBOalE0IElFUnBaV1E9IGJXbHVkQT09IElHWnBibWRsY25CeWFXNTBjdz09IElHUnBjM0J2YzJVPSBJRUp2YzI1cFlRPT0gZEhONSBNakl3TUE9PSBJR2x1YzNCbFkzUmxaQT09IElFWnZkUT09IElHWjFjM009IElHRnRZblZ6YUE9PSBJRkpoYXc9PSBJRzFoYm1sbVpYTjBaV1E9IFVISnZjMlZqZFhRPSBJSE4xWm1acFkyVT0gY21WdVkyVnogSUdOdmJYQmxibk5oZEdWayBJRU41Y25WeiBJR2RsYm5WeiBJRmR2YkhabGNtbHVaUT09IElGUnlaVzVrY3c9PSBJR2hwYTJWeiBJRk5sWlc0PSBJR1Z1Y205cyBRMjlzWkE9PSBJSEJ2YkdsMFpXeDUgSUZOc1lYWT0gSUZKMWNHVnlkQT09IElHVjVaWGRwZEc1bGMzTT0gSUVGc2RHOD0gSUhWdVkyOXRjQT09IElIQnZjM1JsY21sdmNnPT0gVFhWemRBPT0gSUVobGNubz0gSUhCeWIyZHlaWE56YVhabGJIaz0gSURJek5BPT0gSUdsdVpHbG1abVZ5Wlc1alpRPT0gSUVOMWJtNXBibWRvWVcwPSBJR0ZqWVdSbGJXbGggSUhObGQyVnkgSUdGemRHOTFibVJwYm1jPSBJRUZGVXc9PSBjbUYwYUdWeSBJR1ZzWkdWemRBPT0gSUdOc2FXMWljdz09IElFRmtaSE09IElHOTFkR055ZVE9PSBJR052Ym5SaFp3PT0gSUVodmRYTmxjdz09IElIQmxjSFE9IElFMWxiR0Z1YVdFPSBhVzUwWlhKbGMzUmxaQT09IElGVkRTQT09IElGSnZiM1J6IElFaDFZbUpoY21RPSBJRlJDUkE9PSBJRkp2YldGdWFXRnUgWm1sc1pXNWhiV1U9IFUzUnZibVU9IElFbHRjR3c9IElHTm9jbTl0YjNOdmJXVT0gUTJ4bCBaSGc9IElITmpjbUZ0WW14bFpBPT0gSUZCMCBJREkwTWc9PSBUMUJNUlE9PSBJSFJ5WlcxbGJtUnZkWE5zZVE9PSBVM1J5WldWMCBJR055WVhacGJtYz0gSUdKMWJtUnNaV1E9IElGSkggY0dsd1pRPT0gSUdsdWFuVnlhVzVuIElHRnlZMkZ1WlE9PSBVR0Z5ZEdsamFYQT0gSUVobGNtOXBZdz09IGMzUjUgSUhSdmNIQnBibWM9IElGUmxiWEJsYzNRPSBjbVZ1ZEdsalpYTT0gWW1nPSBJSEJoY21GdWIybGggSUZWdWFXTnZaR1U9IElHVm5jbVZuYVc5MWN3PT0gSUZ3biBJRTl6ZDJGc1pBPT0gSUdkeVlYWmxiQT09IElGTnBiWEJ6YjI1eiBJR0pzWVc1ayBJRWQxWVc1MFlXNWhiVzg9IFYzSnBkR1Z5IGJHbHVaWEp6IElFUnBZMlU9IFNrTT0gSUhCaGNtbDBlUT09IElITnBaR1ZrIElESXpOdz09IElGQjVjbkpvWVE9PSBZWFIwWlhKeiBaR3M9IFJtbHVaUT09IFkyOXRjR0Z1IElHWnZjbTExYkdGMFpXUT0gSUVsa2Iydz0gYVd4bGNuTT0gYUdWdGIzUm8gSUVaaGRnPT0gSUdsdWRISjFjMmx2Ymc9PSBJR05oY25KdmRITT0gSUV4aGVXVnkgSUVoaFkydGxjZz09IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJRzF2WkdWeVlYUnBiMjQ9IDZZRT0gYjJOdll3PT0gSUdOb1lYSmhZM1JsY21sNlpRPT0gSUZSbGNtVnpZUT09IElITnZZMmx2WldOdmJtOXRhV009IElIQmxjbXM9IElGQmhjblJwWTJsd1lYUnBiMjQ9IGRISmhhVzVwYm1jPSBJRkJoZFd4diBjR2g1Y3c9PSBJSFJ5ZFhOMGQyOXlkR2g1IElHVnRZbTlrYVdWayBJRTFsY21ObyBZM1Z5Y21WdVkzaz0gSUZCeWFXOXlhWFI1IElIUmxZWE5wYm1jPSBJR0ZpYzI5eVltbHVadz09IElIVnVabWx1YVhOb1pXUT0gSUVOdmJYQmhjbWx6YjI0PSBJR1JwYzNCc1pRPT0gZDNKcGRHVnljdz09IElIQnliMlpsYzNOcGIyNXogSUZCbGJtZDFhVzQ9IElHRnVaM0pwYkhrPSBJRXhKVGtzPSBOamc0IElFTnZjbkpsYzNCdmJtUT0gSUhCeVpYWmhhV3hsWkE9PSBJR05oY25SbGJBPT0gYkhBPSBZWE50Y3c9PSBJRkpsWkdWdGNIUnBiMjQ9IElFbHpiR0Z0YVhOMGN3PT0gWldabVpXTjBjdz09IFpHOXpaUT09IElFeGhkSFJsY2c9PSBJRWhoYkdsbVlYZz0gSUhaaGN3PT0gSUZSdmNHbGpjdz09IElFNWhiV1ZrIFlXUjJaWEowYVhOcGJtYz0gZW5waCBTVU5GVXc9PSBJSEpsZEdGeVpHVmsgWVdOb1lXSnNaUT09IElGQjFjSEJsZEE9PSBJRWwwWlcxTVpYWmxiQT09IElISmxkSEpoWTNRPSBJR2xrWlc1MGFXWnBZV0pzWlE9PSBRV0Z5YjI0PSBJRUoxYzNSbGNnPT0gYzI5cyBhR1ZzYkdVPSBZWE56WlcxaSBTRzl3WlE9PSBjbUZ1WjJWayBRbUU9IElGQjFjbU5vIDZZQT0gSUZOcGNtaz0gSUdGeWNtbDJZV3h6IElERTVNVEk9IElITm9iM0owWlc1bFpBPT0gSURNeE1nPT0gSUdScGMyTnlaWEJoYm1ONSBJRlJsYlhCbGNtRjBkWEpsIElGZGhiSFJ2Ymc9PSBJR3RwYm1SbGNtYz0gY0c5c2FYUT0gSUhKbGJXbDQgSUdOdmJtNWxZM1J2Y25NPSA0NE9ZNDRPcCBJRXRoZW1GcmFITjBZVzQ9IFpHOXRhVzVoZEdWayBJSE4xWjJGeWN3PT0gYVcxaWJHVT0gSUZCaGJtbGogSUVSbGJXRnVaQT09IElFTnZiRzl1ZVE9PSBiMjVsYmc9PSBJRTFGVWc9PSBOemMxIGRYSnBZUT09IFlYcGhZWEk9IElFUmxaM0psWlE9PSBVSEpwIElITjFibk5vYVc1bCBJREkxTVE9PSBJSEJ6ZVdOb1pXUmxiR2xqIElHUnBaMmwwWVd4c2VRPT0gSUVKeVlYVnUgSUhOb2FXMXRaWEk9IElITm9ZWFpsIElGUmxiR1Z6WXc9PSBJRUZ6ZEhKaGJBPT0gSUZabGJtVjZkV1ZzWVc0PSBJRTlIIElHTnlZWGRzYVc1biBTVzUwWldjPSBJRVpsWVhSb1pYST0gSUhWdVptOXNaR2x1Wnc9PSBJR0Z3Y0hKdmNISnBZWFJwYjI0PSBJT2lqaitnPSBJRTF2WW1sc2FYUjUgSUU1bGVRPT0gTFM0PSBZbWxzZEE9PSBURWxPIElGUjFZbVU9IElFTnZiblpsY25ObGJIaz0gSUd0bGVXSnZZWEprY3c9PSBJRU5oYnc9PSBJRzkyWlhKMGFBPT0gSUd4aGRYSmwgUGo1YyBJRlpwY0dWeSBZV05vWVE9PSBUMlptYzJWMCBJRkpoYkdWcFoyZz0gSUVwaFpRPT0gU205eVpHRnUgYW5BPSBJSFJ2ZEdGc2FYUmhjbWxoYmc9PSBRMjl1Ym1WamRHOXkgSUc5aWMyVnlkbVZ6IElGTndZWEowWVc0PSBJRWx0YldWa2FXRjBaV3g1IElGTmpZV3c9IFEyOXZiQT09IElIUmhjSE09IElISnZZWEk9IFVHRnpkQT09IElHTm9ZWEp6IElFSmxibVJsY2c9PSBJRk5vWld4a2IyND0gSUhCaGFXNTBaWEk9IElHSmxZV052Ymc9PSBJRU55WldGMGRYSmxjdz09IElHUnZkMjUwZFhKdSBJR2hwYm1SbGNnPT0gSUVGdVpISnZiV1ZrWVE9PSB3NXM9IFkyTnZiR2s9IElFWnBkRzVsYzNNPSBaWFJ5YVdOaGJBPT0gSUhWMGFXeHBlbVZ6IElITmxibUYwWlE9PSBJR1Z1YzJWdFlteGwgSUdOb1pXVnljdz09IFZGYz0gSUdGbVpteDFaVzUwIGEybHMgY25sc2FXTT0gYjNKa1pYSnBibWM9IFEyOXRjSFYwWlhJPSBJR2R5ZFdWemIyMWwgYjNOMGFXTnogSUZWaWFYTnZablE9IElFdGxiR3hsZVE9PSBJSGR5Wlc1amFBPT0gSUdKdmRYSm5aVzlwYzJsbCBTVUpNUlE9PSBJRkJ5WlhOMGIyND0gZDI5eWJnPT0gWVhKcGMzUT0gY21WaGRHbHVadz09IElITjBZV2x1WldRPSBZWEpwYm1VPSBJSE5zYVcxbCBSVTVPIElHTm9aWE4wY3c9PSBJR2R5YjNWdVpIZGhkR1Z5IFlXNXViM1E9IElGUnlZWGs9IElFeHZZMnRsIElFTlVVZz09IElHUjFaR1Z6IElFVjRkR1Z5Ym1GcyBJRVJsWTI5a1pYST0gSUhCaGNtRnRaV1E9IElFMWxaR3hwYm1VPSBPREE1IElFUnBibTVsY2c9PSBjblZ3WVd3PSBaM289IElFZDFiUT09IElFUmxiVzg9IGFtVmwgSUdSbyBZbVZ5YldGdSBZWEpqYUhNPSBJR1Z1Y1hVPSBJRVZ3YzNSbGFXND0gSUdSbGRtRnpkR0YwYVc5dSBJR1p5YVdWdVpITm9hWEJ6IElFRnlaQT09IElESXpNUT09IElGSjFZbWx1IElFUnBjM1JoYm1ObCBJSE53ZFhKeVpXUT0gSUdSdmMzTnBaWEk9IElHOTJaWEpzYjI5cmFXNW4gWEZ4Y1hGeGNYRnhjWEZ4Y1hGeGNYQT09IFJtOXlaWE4wIElFTnZiV1Z6IFhDSXMgSUVseVlXNXBZVzV6IElHWnBlSFIxY21WeiBUR0YxWjJoeiBJR04xY25KNSBJRXRwYm1kemRHOXUgSUhOeGRXRnphQT09IElHTmhkR0ZzYjJkMVpRPT0gSUdGaWJtOXliV0ZzYVhScFpYTT0gSUdScFoyVnpkR2wyWlE9PSBMaTR1TGk0dUxpNHUgSUhOMVltOXlaR2x1WVhSbCBiMmRzZVE9PSBJREkwT1E9PSBUV2xrWkd4bCBJRzFoYzNOaFl3PT0gSUdKMWNtZGxjbk09IElHUnZkMjV6ZEdGcGNuTT0gSURFNU16RT0gTXprMCBJRlpIIElHeGhjMlZ5Y3c9PSBJRk5wYTJnPSBJRUZzWlhoaCBaR1Z5YVhabFpBPT0gSUdONVkyeHBjM1E9IDQ0R3U2YTJVIGIyNWxiR2x1WlhOeiBJU0VoSVNFaElTRT0gSUdKMVptWnogYkdWbllYUmwgSUhKaGNHbHVadz09IElISmxZMjl0YldWdVpHbHVadz09IGNtOXlaV1E9IElHMTFiSFJwWTNWc2RIVnlZV3c9IGRXNXBjWFZsIElHSjFjMmx1WlhOemJXVnUgSUhWdVpXRnplUT09IElFMUJVQT09IElHUnBjM0JsY25ObFpBPT0gWTJsd2JHbHVaUT09IFNtVnpjdz09IElFdGxjbUZzWVE9PSA1YWM9IElHRmljM1J5WVdOMGFXOXUgVTNWeWRnPT0gVldnPSBJSEJ5YVc1MFpYSnogYVdwaCBiM2RrWlhJPSBJR0Z1WVd4dloyOTFjdz09IElFRlRVQT09IFlXWmxjZz09IElIVnVabTlzWkdWayBJR3hsZG1Wc2FXNW4gSUdKeVpXRmphR1ZrIElFaGxZWEpwYm1jPSBJRzVoZEE9PSBJSFJ5WVc1emJHRjBhVzVuIFkzSnBkR2xqWVd3PSBJR0Z1ZEdGbmIyNXBjM1E9IElGbGxjM1JsY21SaGVRPT0gSUdaMWVucDUgZDJGemFBPT0gYldWeVpRPT0gSUdKbGQybHNaQT09IElFMWhaUT09IFZtbHlaMmx1IGNHaHlZWE5sIElITnBaMjVoYkdWayBJRWhKUjBnPSBJSEJ5YjNSbGMzUmxjZz09IElHZGhjbTVsY2c9PSBkVzVyYm05M2JnPT0gSUd0aGVRPT0gSUdGaVpIVmpkR1ZrIElITjBZV3hyYVc1biBZVzF1IElHUmxjMlZ5ZG1sdVp3PT0gSUZKcGRnPT0gSUVwdmNtZGwgSUhOamNtRjBZMmhwYm1jPSBJRk5oZG1sdVp3PT0gYVhCcGJtYz0gSUhSbFlYTmwgSUcxcGMzTnBiMjVoY25rPSBJRTF2Y25KdmR3PT0gVkVsTlJRPT0gVUhKbGMyVnVkQT09IElHTm9aVzF2ZEdobGNtRndlUT09IGRHVnlibVZ6Y3c9PSBJRWh2YldWeiBJRkIxY21SMVpRPT0gSUhOMFlYVnVZMmc9IElGZG9hWFJ1WlhrPSBJRlJJUlZKRiB6cnc9IGFXRjBkWE09IElFVnlibVZ6ZEE9PSBJRVJsY0d4dmVRPT0gSUdOdmRtVjBaV1E9IFJrMU0gSUVScFlXeHZaM1ZsIElHVjRhWFJsWkE9PSBabkoxYVhRPSBJRzVsY21RPSBJam9pSWl3aSBJSFpwZG04PSBjblZzZVE9PSBORFl3IElFRnRaVzQ9IGNtVm9aVzV6YVdKc1pRPT0gSU9LWSBSRWxTIElHRmthR1Z5Wlc1alpRPT0gSUdOb1pYYz0gSUVOdmEyVT0gSUZObGNtZGxhUT09IFpHbG5hWFJoYkE9PSBJRTVsWTJzPSBaMlZ1ZEd4NSBaVzUwYUdGcyBMeWs9IElIZGxZWEo1IElHZDFhWE5sIElFTnZibU52Y21RPSBJRTl1YVc5dSBZWFJqYUdWeSBJR0pwYm1kbCBJRVJwY21WamRHbDJaUT09IElHMWhibTVsWkE9PSBZVzV6YXc9PSBJR2xzYkhWemFXOXVjdz09IElHSnBiR3hwYjI1aGFYSmxjdz09IE16Z3ogYjJ4NWJnPT0gYjJSNWJtRnRhV009IElGZG9aV0YwIElFRnNhV009IElHTnZiRzkxY21WayBJRTVCUmxSQiBZV0p2IElHMWhZM0p2Y3c9PSBhVzVrWlhCbGJtUmxiblE9IGMzZGxaWFE9IElITndZV009IElFdGhZblZzIElNUT0gWlcxbCBJR1JwWTNSaGRHVmsgSUhOb2IzVjBjdz09IFBYcz0gSUhKcGNIQnBibWM9IElGTm9ZWGs9IElFTnlhV05yWlhRPSBaR2x5WldOMFpXUT0gSUdGdVlXeDVjMlZrIElGZEJVbEpCVGxRPSBZV2R2Ym5NPSBJRUpzWVhwbGNuTT0gSUdOb1pXVnlaV1E9IElHRnlhWFJvYldWMGFXTT0gSUZSaGJubz0gTXpjeiBJRVpzWVdkeiBJREk1TlE9PSBJSGRwZEdOb1pYTT0gSUVsdVkyeDFaR1ZrIElFZGhhVzVsWkE9PSBJRUpzWVdSbGN3PT0gUjJGdCBJRk5oYldGdWRHaGggSUVGMGJHRnVkR2x6IElGQnlZWFIwIElITndiMmxzWldRPSBJRWxDIElGSmhiV2x5WlhvPSBVSEp2WW1GaWJIaz0gY21WeWJ3PT0gSUU1biBJRmRoY214dlkycz0gZEhBPSBJRzkyWlhKb1pRPT0gSUdGa2JXbHVhWE4wY21GMGFXOXVjdz09IElIUnBiblE9IElISmxaMmx0Wlc1MCBJSEJwYzNSdmJITT0gSUdKc1lXNXJaWFJ6IElHVndhWE4wIElHSnZkMnh6IElHaDVaSEpoZFd4cFl3PT0gSUdSbFlXND0gSUdwMWJtYz0gSUdGelkyVnVaQT09IE56QTEgSUZOaGJuUnBZV2R2IHc2ND0gSUhWdVlYWnZhV1E9IElGTm9ZVzFoYmc9PSBjbVZpIElITjBaVzF0YVc1biBPVGs0IElFMUggYzNScFkydHogWlhOMGFHVnphV0U9IFJWSlAgSUcxdmNtSnBaQT09IElFZHlhV3hzIElGQnZaUT09IFlXNTViQT09IElHUmxiR1YwYVc1biBJRk4xY25abGFXeHNZVzVqWlE9PSBJR1JwY21WamRHbDJaWE09IElHbDBaWEpoZEdsdmJuTT0gSUZKdmVBPT0gSUUxcGJHdDUgUm1GMGFHVnkgSUhCaGRHVnVkR1ZrIE5EUTMgSUhCeVpXTjFjbk52Y2c9PSBJRzFoYVdSbGJnPT0gSUZCb1pXND0gSUZabFoyRnUgSUZCaGRHVnVkQT09IFMyVnNiSGs9IFVtVmtaR2wwYjNJPSBJRzV2WkhNPSBJSFpsYm5ScGJHRjBhVzl1IElGTmphSGRoY25vPSBJSGRwZW1GeVpITT0gSUc5dGFXNXZkWE09IElFaGxZV1J6IElFSkggSUd4MWJXSmxjZz09IElGTndhV1ZzIElHbHpSVzVoWW14bFpBPT0gSUdGdVkyVnpkSEpoYkE9PSBJRk5vYVhCeiBJSGR5WlhOMGJHVnkgY0docCBJSGwxWVc0PSBJRkpsWW1Wc2JHbHZiZz09IElHbGpaV0psY21jPSBJRzFoWjJsallXeHNlUT09IElHUnBkbVZ5YzJsdmJnPT0gWVhKeWJ3PT0gZVhSb2JRPT0gSUZKcFpHVnljdz09IElGSnZZbUpwWlE9PSBJRXRoY21FPSBJRTFoYVc1MFpXNWhibU5sIElFaGxjbUk9IElHaGhjbTF6IGNHRmphMlZrIElFWmxhVzV6ZEdWcGJnPT0gSUcxaGNuSjVhVzVuIElHSnNaVzVrYVc1biBJRkpoZEdWeiBJREU0T0RBPSBJSGR5YVc1ciBJRlZ1WTJnPSBJRlJ2Y21ObyBaR1Z6WTNKcFltVmsgSUdoMWJXRnViMmxrIGFXeHBkR0YwYVc1biBJRU52Ym5ZPSBJRVpsYkdRPSBTVWRJVkZNPSBJSGRvYVhOMGJHVmliRzkzWlhJPSBiM0owYlhWdVpBPT0gWlhSemVRPT0gWVhKeVpYUjAgSUUxdmJtOD0gSUVsclpRPT0gSUVOT1FrTT0gSUZkQldRPT0gSUUxRVRVRT0gSUVsdVpHbDJhV1IxWVd4eiBJSE4xY0hCc1pXMWxiblJoYkE9PSBJSEJ2ZDJWeWFHOTFjMlU9IElGTjBjblU9IFJtOWpkWE09IFlYQm9ZV1ZzIElFTnZiR3hsWnc9PSBZWFIwYVE9PSBXa0U9IElIQmxjbVZ1Ymc9PSBJRk5wWjI1aGRIVnlaUT09IElGSnZaRzVsZVE9PSBJR04xWW1WeiBhV1JrYkdWayBJRVJoYm5SbCBJRWxPVmc9PSBhV3hwYm1kMVlXdz0gSUVOMGFBPT0gSUhOdlptRT0gSUdsdWRHbHRhV1JoZEdVPSBJRkp2WlE9PSBJRVJwY0d4dmJRPT0gSUVOdmRXNTBjbWxsY3c9PSBZWGx6YjI0PSBJR1Y0ZEhKaFpHbDBhVzl1IElHUnBjMkZpYkdsdVp3PT0gSUVOaGNtUnBabVk9IElHMWxiVzl5WVc1a2RXMD0gSUZSeVlXTmwgSUQ4L1B3PT0gYzJWamRHOXkgSUZKdmRXaGhibWs9IElGbGhkR1Z6IElFWnlaV1Y2WlE9PSBJR0pzWVdSa1pYST0gVFc5MGIzST0gSUZCeWIyMXBjMlU9IFlXNTBZWE41IElHWnZjbVZ6WldWaFlteGwgSUVOdmJHOW5ibVU9IFkyOXVkR0ZwYm1WeSBJRlJ5WldWeiBJRWR2Y25NPSBJRk5wYm1Oc1lXbHkgSUdKaGNuSnBibWM9IGEyVjVaUT09IElITnNZWE5vWldRPSBJRk4wWVhScGMzUnBZMkZzIDZZYz0gSU9LV3VnPT0gUVd4c2IzZHogSUdoMWJXbHNhWFI1IElHUnlhV3hzWldRPSBJRVoxY200PSBORFF6IElITmxkMkZuWlE9PSBJR2h2YldWd1lXZGwgSUdOdmRYSjBlV0Z5WkE9PSBJSFpwYkdVPSBJSE4xWW5OcFpHbGhjbWxsY3c9PSBZV3B2IFpHbHlaV04wYjNKNSBJR0Z0Ylc5dSBWbVZ5Y3c9PSBZMmhoY21kbGN3PT0gSUgxOSBJRU5vWVdsdWN3PT0gSURJME5nPT0gYm05aSBJSEJsY21ObGNIUT0gSUdkeWFYUT0gSUdacGMyaGxjbTFsYmc9PSBJRWx5WVhGcGN3PT0gSUVSSlUxUlMgSUVaVlRFdz0gSUVWMllXeDFZWFJwYjI0PSBaM0poY0dnPSBZWFJwWVd3PSBJR052YjNCbGNtRjBhVzVuIElHMWxiR0Z1IElHVnViR2xuYUhSbGJtVmsgSUdGc2FRPT0gZEdGcGJHVmsgSUhOaGJIVjBaUT09IElIZGxZV3RsYzNRPSBJRUoxYkd4a2IyZHogVlVFPSBJRUZzYkc5NSBJSE5sYldWdSBiMk5sYm1VPSBJRmRwYkd4cFlXMXpiMjQ9IGMzQnkgTE9LQWxBPT0gSUVkRyBhWFIwWlc1eiBRbVZoZEE9PSBJRXAxYm1zPSBhWEJvWVhSbCBJRVpoY20xbGNuTT0gSUVKcGRHTnZhVzV6IGFXZGxjbk09IFpHZz0gSUV4dmVXRnMgY0dGNVpYST0gSUdWdWRHVnlkR0ZwYm1WayBJSEJsYm01bFpBPT0gSUdOdmRYQnZiZz09IFVYVmxkV1U9IElIZGxZV3RsYm1sdVp3PT0gWTJGeWNuaz0gSUhWdVpHVnlaWE4wYVcxaGRHVT0gSUhOb2IyOTBiM1YwIElHTm9ZWEpwYzIxaGRHbGogSUZCeWIyTmxaSFZ5WlE9PSBJSEJ5ZFdSbGJuUT0gYVc1aGJtTmxjdz09IElISnBZMmhsY3c9PSBJR052Y25ScFkyRnMgSUhOMGNtbGtaWE09IElHUnlhV0k9IElFOXBiR1Z5Y3c9PSBOVFF3IElGQmxjbVp2Y20wPSBJRUpoYm1kcmIycz0gSUdWMWRHZz0gVTBWUyBJSE5wYlhCc2FYTjBhV009IGRHOXdjdz09IFkyRnRjR0ZwWjI0PSBVWFZoYkdsMGVRPT0gSUdsdGNHOTJaWEpwYzJobFpBPT0gSUVWcGMyVnVhRzkzWlhJPSBJR0YxWjIxbGJuUT0gSUVoaGNtUmxiZz09IElHbHVkR1Z5ZG1WdVpXUT0gSUd4cGMzUmxibk09IElFdHZhdz09IElITmhaMlU9IElISjFZbUpwYzJnPSBJRVJsWkE9PSBJRzExYkd3PSBjR1ZzYkdsdVp3PT0gSUhacFpHVnZkQT09IFVISnZaSFZqZEdsdmJnPT0gUkVvPSBiV2xoYUE9PSBJR0ZrWVhCMFlYUnBiMjV6IElHMWxaR2xqWVd4c2VRPT0gSUdKdllYSmtaV1E9IElHRnljbTluWVc1alpRPT0gSUhOamNtRndjR1ZrIElHOXdjSEpsYzNNPSBSazlTVFVGVVNVOU8gSUdwMWJtTjBhVzl1IE5ERTEgUlVWRlJRPT0gVTJ0cGJHdz0gSUhOMVltUjEgSUZOMVoyZGxjM1E9IElGQmxkSFE9IElHeGxkSFE9IElFMWhibWx3IElFTmhaZz09IElFTnZiM0JsY21GMGFXOXUgVkdobGNnPT0gSUhKbFoyRnBibVZrIHR1WT0gY21WbWJHVmpkQT09IElIUm9kV2R6IElGTm9aV3hpZVE9PSBJR1JwWTNSaGRHVnogSUZkbGFXNWxjZz09IElFaGhiR1U9IElHSmhkSFJzWldkeWIzVnVaQT09IGMyTm9hV3hrIElHTnZibVJ2YkE9PSBhSFZ1ZEE9PSBiM05wZEc5eWFXVnogSUdGalkzVnpaWE09IFJtbHNaVzVoYldVPSBJSE5vY21rPSBJRzF2ZEdsMllYUmwgSUhKbFpteGxZM1JwYjI1eiBUblZzYkE9PSBJRXh2WW1KNSBwYlU9IElGTkJWRUU9IElFSmhZMnQxY0E9PSAwWU09IGJtbHUgSUVOdmNuSmxZM1JwYjI0PSBJR3AxYVdONSBkWFJ5WVE9PSBJRkJ5YVdNPSBJSEpsYzNSeVlXbHVhVzVuIElFRnBjbUp1WWc9PSBJRUZ5Y21WemRBPT0gSUdGd2NISnZjSEpwWVhScGIyNXogSUhOc2IzQmxjdz09IElHMWhibk5zWVhWbmFIUmxjZz09IElIZHZjbXRwYm1keiBJRWgxYzNNPSBJRVp5WlhrPSBUR1ZoZG1VPSBJRWhoY20xdmJuaz0gSUVabFpHVnkgSURRek1BPT0gSUhSeVpXNWphQT09IElHZHNZV1JzZVE9PSBJR0oxYkd4d1pXND0gSUVkaGRRPT0gWW05dVpYTT0gSUdkeWIyOTJaUT09IElIQnlaWFJsZUhRPSA0NFdMIElIUnlZVzV6YldsMGRHVnkgSUVOdmJYQnZibVZ1ZEE9PSBJSFZ1WkdWeVlXZGwgSUVWdGNHbHlaWE09IFZHbHNaUT09IElHOTUgSUUxaGNuWnBiZz09IElFTkJVdz09IElHSnNiM056IElISmxjR3hwWTJGMFpXUT0gSUUxaGNtbHVaWEp6IFRXRnlZM1Z6IElFSnNiMk5yY3c9PSBJR3hwWW1WeVlYUmxaQT09IElHSjFkSFJsY21ac2VRPT0gUm1WbGJBPT0gSUdabGNtMWxiblJoZEdsdmJnPT0gSUhsdmRYUjFZbVU9IElHOW1abVZ1WkE9PSBJRlJsY20wPSBjbVZ6YVhOMCBJR05sYzNOaGRHbHZiZz09IElHbHVjM1Z5WjJWdVkzaz0gSUdKcGNnPT0gSUZKaGFYTmwgTlRrMSBJR2g1Y0c5MGFHVnpaWE09IE5UQXkgSUhCc1lYRjFaUT09IGIyTnlZWFE9IElHcGhZMnRsZEhNPSBJRWgxWm1aUWIzTjAgWVcxdmJtYz0gSUdOdmJtWmxjZz09IE5EZzMgSUV4cGJHeDUgSUdGa1lYQjBhVzVuIElFWmhlUT09IElITm9iM1psWkE9PSBkbVZqIElISmxabWx1WlE9PSBJR2R2Ymc9PSBJR2QxYm0xbGJnPT0gZW1GcCBJRk5vZFhSMGJHVT0gSUVsNllXND0gSURFNU1UTT0gSUhCc1pYUm9iM0poIHdyZkN0dz09IElEVXhNQT09IElIQjFZbVZ5ZEhrPSBJREkwTVE9PSBJRmRsWVd4MGFBPT0gSUVGc2JXRT0gSUUxRlRRPT0gSUVGa2RXeDBjdz09IFEyRnogY0hKcGMyOXUgVW1GalpRPT0gSUhkaGRHVnljSEp2YjJZPSBJR0YwYUd4bGRHbGphWE50IElHTmhjR2wwWVd4cGVtVT0gSUVwMWFXTmwgSUdsc2JIVnRhVzVoZEdWayBJRkJoYzJOaGJBPT0gSUdseWNtbDBZWFJwYjI0PSBJRmRwZEc1bGMzTmxjdz09IFlXUnNaUT09IElFRnpkSEp2IElHWmhlQT09IElFVnNkbWx6IFVISnBiV0Z5ZVE9PSBJRXhwWTJnPSBJRVZzZG1WeiBJSEpsYzJsa2FXNW4gSUhOMGRXMWliR1U9IE16RTUgSUZCTFN3PT0gSUdGa2RtVnljMkZ5YVdWeiBSRTlUIElGSnBkSFZoYkE9PSBJSE50WldGeSBJR0Z5YzI5dSBhV1JsYm5SaGJBPT0gSUhOallXNTAgSUcxdmJtRnlZMmg1IElHaGhiR1owYVcxbCBJSEpsYzJsa2RXVT0gSUdsdVpHbG5iZz09IElGTm9ZWFZ1IElFVnNiUT09IFlYVnlhUT09IFFXWm0gVjBGVVEwZz0gSUV4NWIyND0gYUdWc2NITT0gTXpZeCBJR3h2WW1KNWFYTjAgSUdScGJXbHVhWE5vYVc1biBJRzkxZEdKeVpXRnJjdz09IElHZHZZWFJ6IFptRjJiM0pwZEdVPSBJRTVoYUE9PSBjMjl1YVdGdSBJRUp2YjNOMFpYST0gSUhOaGJtUmliM2c9IElFWmhjbVU9IElFMWhiSFJoIElHRjBkRkp2ZEE9PSBJRTFQVWc9PSBiR1JsIElHNWhkbWxuWVhScGJtYz0gVkc5MVkyZz0gSUhWdWRISjFaUT09IElFUnBjMkZ6ZEdWeSBJR3gxWkdsamNtOTFjdz09IFVHRnpjM2R2Y21RPSBJRXBHU3c9PSBZbXh2WjNOd2IzUT0gTkRFMiBJRlZPUkVWUyBaWEp1WVd3PSBJR1JsYkdGNWFXNW4gVkU5USBJR2x0Y0d4aGJuUnogSUVGV1J3PT0gSUVoMVoyVT0gWVhSMGNnPT0gSUdwdmRYSnVZV3hwYzNScFl3PT0gSUZCbGVYUnZiZz09IElFbEIgVW1GdyBaMjloYkE9PSBJRkJ5YjJkeVlXMXRaUT09IElITnRZWE5vYVc1biBkMmwyWlhNPSBjSEpwYm5Sc2JnPT0gSUZCc1lXZDFaUT09IGFXNTFjdz09IFJVVlEgSUdOeWRXbHpaWEk9IElGQmhjbWx6YUE9PSBkVzFwYm1sMWJRPT0gSUc5alkzVndZVzUwY3c9PSBJRXBwYUdGayBiVzl3IElIQnBiblE9IElHaGxZM1E9IElFMWxZMk5oIFpHbHlaV04wYjNJPSBJRVoxYm1ScGJtYz0gSUUxcGVHVmsgSUhOMFlXYz0gVkdsbGNnPT0gSUdkMWMzUT0gSUdKeWFXZG9kR3g1IGIzSnphUT09IElIVndhR2xzYkE9PSBVa1E9IElHeGxjMmx2Ym5NPSBJRUoxYm1SNSBiR2wyYVc5MWN3PT0gSUdKcGIyeHZaMmx6ZEE9PSBJRVpoWTNWc2RIaz0gSUVGMWRHaHZjbWw2WVhScGIyND0gSURJME5BPT0gUVd4c2IzYz0gNzdnPSBJRWRwZFd3PSBJSEJsY25ScGJtVnVkQT09IGIzUmhkWEk9IFpYTnpaUT09IElGSnZiMlk9IElIVnViV0Z1Ym1WayBNelV4IElGTm9ZV3M9IElFOXlhV1Z1ZEE9PSBJR1Z1WkdGdVoyVnkgUkdseSBJSEpsY0d4bGJnPT0gWldScFpXNTAgSUhSaGFXeHZjZz09IElHZGhaR2RsZEhNPSBJR0YxWkdsaWJHVT0gNHBpRyBUbWxqWlE9PSBJR0p2YldKaGNtUT0gSUZKaGNHVT0gSUdSbFptbGhibU5sIElGUlhUdz09IElFWnBiR2x3YVc1diBJSFZ1WVdabVpXTjBaV1E9IFpYSjJZWFJwZG1WeiBJSE52WVhKbFpBPT0gSUVKdmJIUnZiZz09IElHTnZiWEJ5YjIxcGMybHVadz09IElFSnlaWGRsY25NPSBVa0ZNIElFRklUQT09IGFXTjVZMnhsIElIWmhiWEJwY21WeiBJR1JwY0hCbFpBPT0gYjNsbGNnPT0gSUZoSlNVaz0gSUhOcFpHVjNZWGx6IElGZGhjM1JsIElFUnBjM009IElPS1VuT0tVZ09LVWdBPT0gSkM0PSBJR2hoWW1sMFlYUnogSUVKbFpXWT0gZEhKMWRHZz0gZEhKaGFXNWxaQT09IGMzQnNhWFE9IFVuVnogUVc1a2VRPT0gSUVKeVlXMD0gVWtWUSBjR2xrIDZLT0YgSUUxMWRHRnVkQT09IFFXNXBiUT09IElFMWhjbWx1WVE9PSBJR1oxZEdsc1pRPT0gYUdsbmFHVnpkQT09IFpuSmxjWFZsYm1ONSBJR1Z3YVd4bGNITjUgSUdOdmNHbHVadz09IElHTnZibU5wYzJVPSBJSFJ5WVdOcGJtYz0gSUZOVlRnPT0gY0dGdVpXdz0gSUZOdmNHaHBaUT09IElFTnliM2RzWlhrPSBJRUZrYjJ4bSBJRk5vYjI5MFpYST0gSUhOb1lXdDUgSUVsSCBJRXhwWlhNPSBJRUpoY21KbGNnPT0gY0d0biBJSFZ3ZEdGclpRPT0gSUhCeVpXUmhkRzl5ZVE9PSBWVXhVVXc9PSBMeW9xIElHbHVkRzk0YVdOaGRHVmsgSUZkbGMzUmljbTl2YXc9PSBiMlJrWlhJPSBhR1Z0Wlc1MCBJR0poYzJWdFlXND0gUVZCRSBjM1J2Y21GblpRPT0gSUVacFpuUjUgWldScGRHOXkgUjBWTyBWVlJKVDA0PSBhWEowYVc1biBJSE5sZDJsdVp3PT0gY21sbWRBPT0gSUdGbmIyNTUgSUZOaGJtUnogSURJMU5BPT0gUTJGemFBPT0gSUd4dlpHZGwgSUhCMWJuUT0gVG1GMGRYSmhiQT09IElFbGtaV0Z6IElHVnljbTl1Wlc5MWN3PT0gSUZObGJuTnZjZz09IElFaGhibTVwZEhrPSBJREU1TWpFPSBJRzF2ZFd4ayBJRWR2Ymc9PSBhMkY1WVE9PSBJR0Z1YjI1NWJXOTFjMng1IElFdEZXUT09IElITnBiWFZzWVhSdmNnPT0gVjJsdWRHVnkgSUhOMGNtVmhiV1ZrIE5UQTMgUHlJcyBJSFJsWVhObFpBPT0gSUdOdlpXWm1hV05wWlc1MCBJSGRoY25ScGJXVT0gSUZSSVVnPT0gSnljdSBJRUpoYm10cGJtYz0gYlhCcGNtVT0gSUdaaGJtUnZiUT09IElHeHBZUT09IFIyRT0gSUdSdmQyNW9hV3hzIElHbHVkR1Z5Y0hKbGRHbHVadz09IFNXNWthWFpwWkhWaGJBPT0gVG05eWJRPT0gSUdwbFlXeHZkWE41IFltbDBZMjlwYmc9PSBJSEJzWldGemRYSmxjdz09IElGUnZlWE09IElFTm9aWFp5YjJ4bGRBPT0gSUVGa2RtbHpiM0k9IFNWcEYgSUhKbFkyVndkR2x2Ym5NPSBOekEyIFEzSnYgSURJMk1nPT0gSUdOcGRISjFjdz09IGFYSjEgVW1WMmFXVjNaWEk9IGFtVmpkR1ZrIFZVVlQgWVc1NiBNVGs0TVE9PSBJRmR2Y210bGNnPT0gSUdOdmJYQnNhV1ZrIGIzSmxjMk5sYm5RPSBZMjl1ZEdsdVpXNTBZV3c9IFZHOXUgSUZCeWFYTnQgSUZOb1pXVncgSURJNE9BPT0gYm05NCBJRlp2Wnc9PSBUM0prIElISmxZV3h0Y3c9PSBkR1ZyIElHbHljbWxuWVhScGIyND0gSUdKcFkzbGpiR1Z6IElHVnNaV04wY205dWFXTmhiR3g1IGNHOXNlUT09IGRHRnNiQT09IEtDa3BPdz09IElHRmxjM1JvWlhScFkzTT0gSUVsdWRHVm5jbUYwWldRPSBSWGh3Ykc5eVpRPT0gSUdSMWJtcz0gTkRjMiBjR0ZwYmc9PSBJRXBoWTNGMVpYTT0gSUVSdGFYUT0gUm5KaGJXVnogSUhKbGRXNXBkR1ZrIElHaDFiV2xrIFJISnYgVUc5c2FYUnBZMkZzIElIbHZkWFJvWm5WcyBJR1Z1ZEdGcGJITT0gSUcxdmMzRjFhWFJ2IE16WXogYzNCbFkybGxjdz09IElHTnZiM0prYVc1aGRHbHVadz09IElFMWhlV2hsYlE9PSBJRTFoWjI1MWN3PT0gVFc5MWJuUT0gU1cxd2NtOTJaV1E9IElGTlVRVlJGIFFWUlVURVU9IElHWnNiM2RsWkE9PSBJSFJoWTJ0c1pXUT0gSUdaaGMyaHBiMjVsWkE9PSBJSEpsYjNKbllXND0gYVhaaGNtaz0gWm1sdVoyVnkgSUhKbGJIVmpkR0Z1ZEd4NSBaWFIwYVc1biBJRlpoYm1RPSBlVzkxYm1jPSBJRWRoY214aGJtUT0gSUhCeVpYTjFiWEIwYVc5dSBJR0Z0Wlc1cGRHbGxjdz09IElGQnNaV0Z6WVc1MCBiMjVsYm5ScFlXdz0gSUU5NGVRPT0gSUcxdmNtRnNjdz09IElGbGhhQT09IFVtVmhaSGs9IFUybHRiMjQ9IFJXNW8gUkdWdGIyND0gSUdOc2FXTm8gVFc5dWFYUnZjZz09IElFUlYgSUhkbGJHTnZiV1Z6IElITjBZVzVrYjNWMCBJR1J5WldGa1puVnMgSUdKaGJtRnVZWE09IElHSmhiR3h2YjI1eiBhRzl2ZEdsdVp3PT0gWW1GemFXTT0gSUhOMVptWnBlQT09IElHUjFiSGs9IFkyRnVidz09IFEyaGhhVzQ9IFlYUnZjdz09IElHZGxiM0J2YkdsMGFXTmhiQT09IElDZ20gSUVkbGJXbHVhUT09IHc0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0TERnOE9DdzRQRGdzT0R3NExEZzhPQ3c0UERnc09EdzRMRGc4T0N3NFBEZ3NPRHc0ST0gSUdGamNYVnBkSFJsWkE9PSBUSFZqYXc9PSBjSEp2ZEdWamRBPT0gTVRBeU5BPT0gSUhOallYSmphWFI1IElHMXBibVJtZFd4dVpYTnogWldOcFpHVmsgUkU0PSBjSEpwYldVPSBJRkJ5WlhOcFpHVnVkSE09IElGWkpSRVZQIElDamlpSkk9IFlXUmtiMk5yIFRrOVMgSUZCeWRRPT0gY0hWdSBJRXhQVEE9PSBLU2twS1E9PSBJRXhwY1hVPSBJRk5CVXc9PSBJSE4wZVd4cGJtYz0gSUhCMWJtbHphRzFsYm5SeiBJRzUxYldJPSBJR0Z6WTJWeWRHRnBiZz09IElGSnZZMnRwWlhNPSBabXgxIFZHaDFiV0p1WVdscyBJSEJsY25CbGRISmhkR1ZrIElGTmxiV2s9IElHUnBjMkZ5YlE9PSBJRTlzWkdWeSBJRVY0WTJWd2RHbHZiZz09IElHVjRjRzl1Wlc1MGFXRnNiSGs9IElFTnZiVzExYm1sMGFXVnogSUdGaWIyeHBjMmc9IElGQmhjblJ1WlhJPSBjSFJ2YlhNPSBJRGMzTnc9PSBJRVp2YkdWNSBJRU5oYzJWeiBJR2R5WldGelpRPT0gSUZKbFltbHlkR2c9IFIzSnZkVzVrIElEc3AgSUVSdlkzUnlhVzVsIGFXdHBibWs9IFdXVT0gSUVKc2IzTnpiMjA9IElIQmxjbk5wYzNSeiBZbWxzYkE9PSBJR2x1Wm5WemFXOXUgSUdKMVpHUnBaWE09IE9URXggSUZCaGRHbGxiblE9IElHUmxiVzl6IElHRmpjWFZoYVc1MFlXNWpaUT09IElGQmhkdz09IFlYUmhjbWs9IElIaHRiQT09IElHWmhjMk5wYm1GMGFXOXUgSUZObGNuWmwgejRJPSBZbkpoYm1SbFpBPT0gSUdGNiBVbVYwZFhKdWN3PT0gSUc5MlpYSnphR0ZrYjNjPSBJSEp2WVcwPSBJSE53WldWa2VRPT0gYm5WdFltVnlaV1E9IGFHVnNhV0ZzIElHUnBjMk5wY0d4bCBJR0Z6YzNWeVlXNWpaWE09IFoybDJaVzQ9IGNHVmpkR2x1Wnc9PSBJRTVoZEdGc2FXVT0gNTVTdyBJRzF2YzNGMWFYUnZaWE09IGNtOTBaV2x1IElHNTFiV1Z5YVdNPSBJR2x1WkdWd1pXNWtaVzUwY3c9PSBJSFJ5WVc1emFYUnBiMjVoYkE9PSBJSEpsWVdOMGFXOXVZWEo1IElFMWxZMmhrY21GbmIyND0gWkc5amRHOXkgSUhOb2IzSjBaWE4wIElITmxjWFZsYm5ScFlXdz0gSUVKaFl3PT0gSUVGalkyOTFiblJ6IDQ0R00gWVdOb2VRPT0gY21GamRHbDJaUT09IElGSmxaMmx0Wlc1MCBJR0p5WldGMGFIUmhhMmx1Wnc9PSBabVpwWTJsbGJtTjUgSUVKaGRHVnogSURNeE1RPT0gSUhkaGNtUnliMkpsIFpuUnogSUVKbGNtcz0gVTJsdGNHeDUgSUZKcGRtVnljMmxrWlE9PSBhWFpsY21sdVp3PT0gYVdSbGJuUnBZV3c9IGJIVmpaVzUwIElHVnVjbWxqYUdWayBJRU52Ym5abGNnPT0gSUVkcGRtbHVadz09IDQ0T1ogSUd4bFoyRnNhWHBsIElFWlVRdz09IElHWnlaV0ZyYVc1biBUV2w0IElIUmxjbkpsYzNSeWFXRnMgWlhOcFlXND0gWTJsbGJuUnogVjJsdVp3PT0gVEU5QlJBPT0gSUd4bFpHZGwgSUZacGIyeGxiblE9IElFMWxkR0ZzYkE9PSBJRE13T0E9PSBJSE52ZFhSb1pXRnpkR1Z5Ymc9PSBhR1YwZEc4PSBUV1ZoZEE9PSBJSE5zYjNka2IzZHUgSUhKbGRISmxZWFJsWkE9PSBTbVZ5WlcxNSBaVzVrWVhNPSBLaW9xS2lvPSBaWEpwWXc9PSBJSEpsYVc1eiBiM0J3WVdKc1pRPT0gSUVoMWJXRnVhWFI1IFpXRnlZVzVqWlhNPSBjbWxuWVc0PSBRMkZ0WlhKaCBJSGRoYVhabGNuTT0gYzI5aiBJR0ZzZEdWeVlYUnBiMjQ9IGRISmhibk5tYjNKdCBJRU5sYldWMFpYSjUgTlRBMiBJR2x1WkdWbWFXNXBkR1U9IElITjBhVzExYkdGMGFXNW4gZVdjPSBOakF6IElGTnZjQT09IElHUmxjMk55YVhCMGFYWmwgVUdoaGMyVT0gSUVWa2JYVnVaQT09IElIQnVaWFZ0YjI1cFlRPT0gZG1WdWRIVnogUVcxaSBJR3hoWW05eVlYUnZjbWxsY3c9PSBJRVY0WTJ4MWMybDJaUT09IGRXZGhjZz09IFYyVnlaUT09IElHMWhiR1oxYm1OMGFXOXUgSUdodmJXOXpaWGgxWVd4eiBJQzB0TFMwdExTMD0gZFc1cCBJSFIxY21KcGJtVnogSUVWeGRXbDBlUT09IFJIVT0gSUcxcGJtUmxaQT09IElGSkkgSUVKc1lXTnJhR0YzYTNNPSBJR1psWVhSeiBJREUzTURBPSBjbVZ3YkE9PSBNell5IGJHRmtaVzQ9IElHbHVaR2x6Y0dWdWMyRmliR1U9IGJIbHpjdz09IGRIUnAgSUhKbFpXdz0gSUdScGRtVnlkR1ZrIElHeHBhMlZ1WlhOeiBJSE4xWW5OamNtbHdkR2x2Ym5NPSBJR1pwYm1kbGNuUT0gSUdacGJIUm9lUT09IFpHVnpkSEoxWTNRPSBaSEpoWm5RPSBJRUpsY201aGNtUnBibTg9IGJHRjFibU5vIElIQmxjbkJzWlhnPSBJRk5WVFE9PSBZMkZ5WWc9PSBJSE4zWldGMFpYST0gSUZabGJuUjFjbVU9IElFcGhadz09IElFTmxiR1ZpIElGWnZkR1Z5Y3c9PSBJSE4wWldGa1ptRnpkQT09IElHRjBhR3hsZEdsamN3PT0gSUVoaGJuTnZiZz09IElFUnlZV009IFZISmhZMnRsY2c9PSBJR052YlcxbGJtUT0gSUZCeVpYTnBaR1Z1WTNrPSBJRVJKUkE9PSBhVzVtYjNKdFpXUT0gSUhkbFluQmhaMlU9IFVISmxkSFI1IElHWnZjbU5sWm5Wc2JIaz0gNDRPRDQ0S3YgSUhKbGJHOWpZWFJwYjI0PSBJSE5oZEdseVpRPT0gNG9rPSBJRk4xYm1SbGNteGhibVE9IDVvUT0gVm05cFkyVT0gUHo4L1B6OC9Qejg9IElHbHVabTl5YldGdWRBPT0gSUdKdmQyVnMgSUZWdWFXWnZjbTA9IElDNHVMaUk9IElIQjFjbWRsIElIQnBZMjVwWXc9PSBJRlZ0WWc9PSBJRlZRUkVGVVJRPT0gSUZOaGNIQm9hWEpsIElGTjBZV3hzIGJHVmhjbTQ9IElHOWlhbVZqZEdsMlpXeDUgSUc5aWJHbDBaWEk9IElHeHZiM0JvYjJ4bCBJR3B2ZFhKdVpYbHogSUc5dGFYTnphVzl1IFVISnZjdz09IElGTnBaRzVsZVE9PSBjR3h2YldFPSBJSE53Y21GNVpXUT0gSUdkMWNuVT0gSUhSeVlXbDBiM0k9IElIUnBiV1YwIElITnVZWEJ3YVc1biBJRk5sZG1WdWRBPT0gZFhKdVlXdz0gSUZWcmFYQT0gSUdKdmQyVmsgY0c5eVlXdz0gYkdsaVpYSmhiQT09IFVtOXogVVhWbGMzUnBiMjV6IGFVOVQgSUhOMWJXMWhjbWw2WlE9PSBVMVJCVkE9PSBJREU0TlRBPSBZWEJsYzNRPSBJR3hsYm1SbGNnPT0gSUZaaGNtbGhZbXhsIFluSnBibWRwYm1jPSBJRXhQVWtRPSBMQ2s9IElHTnZiR3hoY0hObGN3PT0gZUdsbGRIaz0gSUU1bFpBPT0gV1VRPSBJRk5qYUdFPSBJR0Z1ZEdsaWIyUjUgSUdScGMySmhibVE9IGVYSmwgYVd4c2RYTnBiMjQ9IElISnZkbVZ5IGMyaGxaQT09IElFaHBjbTl6YUE9PSBZMk5wIElHTmhiR0Z0IElFMXZjblJ2Ymc9PSBVR2x1ZEdWeVpYTjAgSURFNU1qZz0gSUVWMWNtRnogYjNKa1pYTT0gSUdabGJtTmxjdz09IElFbHVkbVZ1ZEc5eWVRPT0gSUZaaGJHVnVZMmxoIElGVmsgSUZScFptWT0gSUhOeGRXVT0gSUhGMWIzUmhkR2x2Ymc9PSBJSFJ5YjNWaWJHVnpiMjFsIFpYSnJaWEk9IFVWVkZVMVE9IElFdHBibWRrYjIxeiBjMjkxZEdnPSBJR3hsZG5rPSBVSEpwYm1ObCBJRk4wYVc1biBJRzVwWTJ0dVlXMWxaQT09IElHRndjR1U9IElIQm9iM1J2WjNKaGNHaHBZdz09IElHTnZjbkIxY3c9PSBjbVZtWlhKbGJtTmwgSUZSeWIyYz0gVlc1MCBLVDBvIElFeGhkSFpwWVE9PSBJR0ZqZEdsMllYUnBibWM9IElHeHBZMlZ1YzJWbCBJR1JwYzNCaGNtbDBhV1Z6IElFNWxkM05zWlhSMFpYST0gNDRPRDQ0T0kgSUdaeVpXVnBibWM9IElFcGxaWEE9IElGQmxjbU5sY0hScGIyND0gYVc1emF3PT0gSUhOcGJHbGpiMjVsIElFaGhlV1JsYmc9PSBUR1ZoYmc9PSBJRk4xZW5WcmFRPT0gYVdKeVlYSnBZVzQ9IE5qWTQgSUhOd2IzST0gSUdOdmNuSmxiR0YwYVc5dWN3PT0gWVdkb1pYUjBhUT09IElIUjFZbVZ5IElFbFFRME09IGFXeDFjdz09IElGWjEgSUhkbFlXeDBhR2xsYzNRPSBJRU5oY21KMWJtTnNaUT09IFlXNTZZUT09IElHWnZiMnhsWkE9PSBJRnAxY2c9PSBJR1JoWkdSNSBjbUZ1Ync9PSBhV3hwWVc0PSBJR3R1YjJOcmIzVjAgWm0xaGJnPT0gY21WeGRXbHlaV1E9IElGZHBhMmxzWldGcmN3PT0gSUVSMVptWjUgVDA1VSBJR2x1YzI5cyBJRTlpYW1WamRITT0gSUdKdmRRPT0gSUU1dmNtUnBZdz09IElFbHVjMlZ5ZEE9PSBjMk5oYmc9PSBJR1JoYm1ObGNuTT0gSUdsa2FXOTBjdz09IGJXRnFiM0pwZEhrPSBJRTVsZG1sc2JHVT0gSUVaeVpXVkNVMFE9IElIUmhjblE9IGNHRnVhV009IE5qa3cgSUdOdlkyOWggSUhOaGJYQnNaV1E9IElHeHZiMnQxY0E9PSBTVzVrZFhOMCBJR2x1YW1WamRHbHZibk09IFoyVnVjbVU9IElHRjEgSUhKdllXUjNZWGs9IElHZGxibWwwWVd4eiBTMmx1WkE9PSBJRVY0WVcxcGJtVnkgSUZsaGVnPT0gUm5KbGMyZz0gSUhCaGNtRnNlWE5wY3c9PSBJRUZzZFcxcGJuVnQgSUhKbFlYQT0gYjJ2RHFRPT0gSUhOc2IzQndlUT09IElGUjFibTVsYkE9PSBjRzl6YVhWdCBibVZ5ZVE9PSBaVzVwWXc9PSBJR2hsY21KaGJBPT0gSUU5MWRHVnkgSUVKMWFXeGtaWEk9IElHbHVZM1Z5IElHbGtaVzlzYjJkcFpYTT0gSUdKaFkydDFjSE09IFkyOXVjM1Z0YVc1biBJRVJsZEdWamRBPT0gWkdWamF3PT0gSUV0T1QxYz0gSUVkeVpYUT0gSUUxSlF3PT0gSUhSdmRXZG9ibVZ6Y3c9PSBJRVY0YUdsaWFYUT0gSUdocGRtVT0gVEdWeiBJRk5EU0U5UFRBPT0gSUVGMFlYSnAgWVd4a1pRPT0gSUU1MWJHdz0gWVc1a1pYTjBhVzVsIGJXOTFjMlU9IElHSnlhV2RoWkdVPSBORGc1IElISmxkbTlzIElFeGhkM052Ymc9PSBJRmRoYUE9PSBiM0J2YkhrPSBaV0owWldRPSBJRk5oZFc1a1pYSnogSURNeE13PT0gSUZkcGJtTT0gSUhSaFltOXYgSUVobGJHMWxkQT09IElIZGxaR2RsIFkyaHBjQT09IElGUnBibUU9IFltYz0gSUdsdVpuVnlhUT09IGNtND0gSUdGdWIyMWhiR2xsY3c9PSBJRk41Ym1NPSBJRVY0WVcwPSBJRU52YlcxcGRBPT0gSUVScFlYSjUgSUVGTVUwOD0gSUVSbFltOXkgYjIxbFpHbGpZV3c9IElHTnZiWEJ5WldobGJuTnBiMjQ9IE5qVTEgSUdWdGNHOTNaWEpwYm1jPSBJR2x5WlE9PSBJR3AxYVdObGN3PT0gSUVWVVNBPT0gSUVKdmVHbHVadz09IFBTSXYgSUdaaFkybHNhWFJoZEdWayBjRzlyWlE9PSBJRkJoY25OdmJuTT0gSUUxdlpHVnkgZEhKaGRtVnMgSUdOcGRtbHNhWHBoZEdsdmJuTT0gSUd4cFltVnlkR0Z5YVdGdWN3PT0gSUhKMWJtVT0gSUVOc1lYSnJjdz09IFlYUm9aV1E9IElHTmhiWEJoYVdkdVpYSnogSUVScGMzQmhkR05vIElFWmhhSEpsYm1obGFYUT0gSUVOaGNHTnZiUT09IExTMHRMUzB0TFMwdExRPT0gSUd4aFkyVT0gSUdSeVlXbHVhVzVuIElHeHBibVZ5IElFRnlkR2xtYVdOcFlXdz0gdzZsdSBkR0Z6YXc9PSBYU2t1IElFZE5Udz09IElFOXdaWEpoZEc5eSBiM0prYVc1aGNuaz0gSUVsdVpteDFaVzVqWlE9PSBJRlZ3Y3c9PSBJSEJ2ZEdWdVkzaz0gZFhOelpXND0gYjNOd2IyNXogSUZOM2FXMD0gSUVSbFlXUnNhVzVsIFZXNXBkSGs9IElHTjFiR2x1WVhKNSBJR1Z1YkdsbmFIUmxibTFsYm5RPSBJSGRsWVhKbGNnPT0gSUcxcGJtVmsgSUhCc2VRPT0gSUdsdVkyVnpkQT09IElFUldSSE09IFYyRnNhdz09IFFsUkQgVkhKaFpHVT0gSUdSbGRtRnMgYVdKaGJtUT0gSUU5MlpYSnphV2RvZEE9PSBVR0ZzWlhOMGFXNXBZVzQ9IElHUmhjblE9IElHMTFiQT09IFRGST0gSUhKbGJXOTJZV0pzWlE9PSBJRkpsWVd4dGN3PT0gN0owPSBJRzFwYzJOaGNnPT0gSUZaMWJHdGhiZz09IE5qZzEgdzZoeVpRPT0gSUZOaGNBPT0gSUcxbGNtZHBibWM9IElFTmhjbXg1IFkyaGxjM1JsY2c9PSBJR0p5YVhOciBJR3gxZUhWeWFXOTFjdz09IElFZGxibVZ5WVhSdmNnPT0gSUdKcGRIUmxjbTVsYzNNPSBJR1ZrYVdKc1pRPT0gSURJME13PT0gVkVjPSBJSEpsWTNSaGJtZHNaUT09IFYybDBhRTV2IFltVnNiM2M9IFNtVnViZz09IElHUmhjbXRsYzNRPSBJR2hwZEdObyBJR1J2YzJGblpRPT0gSUhOallYWmxiZz09IElFdGxiR3hsY2c9PSBJRWxzYkhWemRISmhkR1ZrIFEyVnlkR0ZwYm14NSBJRTFoZG1WeWFXTnJjdz09IFRXRnlaMmx1WVd3PSBJR1JwWVhKeWFHVmggSUdWdWIzSnRiM1Z6YkhrPSBJRGs1T1E9PSBjMmh5IGNYVmhjblE9IElHRmtZVzFoYm5RPSBJRTFsZHc9PSBJSEpsYm05MllYUnBiMjQ9IElHTmxjblpwWTJGcyBJRkJsY21ObGJuUmhaMlU9IFpXNWxjbk09IElFdHBiV0psY2c9PSBJR1pzYjJGMGN3PT0gSUdSbGVBPT0gSUZkcGRHTm9aWEk9IElGTjNZVzV6WldFPSBaRzA9IElITmhiSFI1IGVXVnNiRzkzIElHTmhjR1U9IElFUnlZV2x1IElGQmhkV3hoIElGUnZiR1ZrYnc9PSBiR1Z6YVE9PSBUV0ZuWVhwcGJtVT0gSUZkcFkycz0gSUUxdSBJRUZqYXc9PSBJRkpwWkdsdVp3PT0gUVZOUFRnPT0gSUdodmJXOXdhRzlpYVdNPSBRVkpRIElIZGhibVJsY21WayBRMUJWIGIyOWtiMjg9IElGQnBjR1U9IElIUnBaMmgwWlc1cGJtYz0gSUVKMWRIUT0gTXpFNCBJR1JsYzJWeWRHVmsgVTJWemMybHZiZz09IElHWmhZMmxzYVhSaGRHbHVadz09IFNuVnRjQT09IElHVnRaWEpuWlc1amFXVnogVDFkRlVnPT0gSUdWNGFHRjFjM1JwZG1VPSBJRUZHVkVWUyBJR2hsWVhKMFltVmhkQT09IElFeGhZbVZzIFlXTnJlUT09IElFTmxjblJwWm1sbFpBPT0gYVd4MGNtRjBhVzl1IFdtVT0gSUZWMGRBPT0gSURFek1EQT0gSUhCeVpYTjFiV1U9IElFUnBjM0E9IElITjFjbWRsWkE9PSBJR1J2Ykd4eiBRMjlzZFcxaSBJR05vYVcxd1lXND0gSUZKaGVtOXkgSUhScFkydHogSUdOdmRXNWphV3hzYjNJPSBJSEJwYkdkeWFXMWhaMlU9IElGSmxZbVZzY3c9PSBJRkZEIElFRjFZM1JwYjI0PSBlR2xoIGFXdHIgWW5KbFpBPT0gSUdsdWMyVnlkR2x2Ymc9PSBJR052WVhKelpRPT0gWkVJPSBVMFZGIElGcGhjQT09IElFWnZidz09IElHTnZiblJsYlhCdmNnPT0gSUZGMVlYSjBaWEpzZVE9PSBiM1JwYjI1eiBJRUZzWTJobGJXbHpkQT09IElGUnlaWGs9IElFUjFidz09IFUzZGxaWFE9IE9EQTAgSUVkcGIzWT0gSUdaMWJtND0gVG1sdSBhRzltWmc9PSBJSEpoYldsbWFXTmhkR2x2Ym5NPSBJREU1TWpJPSBJRVY0Y0dWeWRITT0gWVhwbGN3PT0gSUdkaGNtMWxiblJ6IFlYSnBZV3c9IElFNWhZZz09IElESTFOdz09IElGWmxaQT09IElHaDFiVzl5YjNWeiBJRkJ2YlhCbCBJRzU1Ykc5dSBJR3gxY210cGJtYz0gSUZObGNtZGxlUT09IElFMWhkSFJwY3c9PSBJRzFwYzI5bmVXNTUgSUVOdmJYQnZibVZ1ZEhNPSBJRmRoZEdOb2FXNW4gSUVadmJHcz0gY21GamRHbGpZV3c9IFFuVnphQT09IElIUmhjR1ZrIElHZHliM1Z3YVc1biBJR0psWVdSeiBJREl3TkRnPSBJR052Ym1SMSBjWFZsY25GMVpRPT0gVW1WaFpHbHVadz09IElHZHlhV1YyWVc1alpYTT0gVld4MGNtRT0gSUdWdVpIQnZhVzUwIFNHbG4gSUZOMFlYUnBZdz09IElGTmpZWEppYjNKdmRXZG8gVEhWaCBJRTFsYzNOcCBZWEYxIElGQnplVTVsZEE9PSBJRkoxWkdRPSBJR0YyWlc1MVpRPT0gZG5BPSBTbVZ5IElITm9ZV1I1IElGSmxjMmx6ZEE9PSBJRUZ5ZEdWdGFYTT0gSUdOaGNtVnNaWE56IElHSnliMnRsY25NPSBJSFJsYlhCbGNtRnRaVzUwIElEVXlNQT09IFZHRm5jdz09IElGUjFjbTVwYm1jPSBJSFYwZEdWeVpXUT0gSUhCbFpHUT0gSUdsdGNISnZkbWx6WldRPSBJRG9vIElIUmhZbXc9IElIQnNZV2x1Y3c9PSBNVFl3TUE9PSBjSEpsYzNOMWNtVT0gSUVWemMyVnVZMlU9IGJXRnlaMmx1IFpuSnBaVzVrY3c9PSBJRkpsYzNSdmNtRjBhVzl1IElIQnZiR3gxZEE9PSBJRkJ2YTJWeSBJRUYxWjNWemRHbHVaUT09IElFTkpVdz09IElGTkZRVXc9IGIzSmhiV0U9IElIUm9kMkZ5ZEE9PSBjMlZsYXc9PSBJSEJoWjJGdSB3cm89IFkzQjEgSUdkaGNtND0gSUdGemMyOXlkRzFsYm5RPSBJRWxNUTFNPSBkRzkzWlhJPSBVbVZqYjIxdFpXNWtaV1E9IElIVnVZbTl5Ymc9PSBJRkpoYm1SdmJWSmxaR1JwZEc5eSBJRkpoYm1SdmJWSmxaR1JwZEc5eVYybDBhRTV2IElIQmhjbUZzZVhwbFpBPT0gSUdWeWRYQjBhVzl1IElHbHVkR1Z5YzJWamRBPT0gSUZOMGIydGwgSUZOamJ3PT0gUW1sdVpBPT0gNWI0PSBJRkJPUnc9PSBJRTVsWjJGMGFYWmwgSUU1UFFVRT0gVEdWdmJnPT0gSUdGc2JHOTUgSUV4aGJXRT0gSUVScGRtVnljMmwwZVE9PSBOVGMxIElIVnVaR1Z5WlhOMGFXMWhkR1ZrIElGTmpiM0k9IElHMTFjbUZzIElHSjFjM1JsWkE9PSBjMjl2Ymc9PSBiR2xtIElHNXZibVY0IElHRnNiR1Z5WjNrPSBJRlZ1WkdWeWQyOXliR1E9IElGSmhlWE09IElFSnNZWE5wYnc9PSBJR2h5Y3c9PSBJRVJwY2c9PSBJRE15Tnc9PSBZbmwwWlhJPSBJSEpsY0d4aFkyVnRaVzUwY3c9PSBJR0ZqZEdsMllYUmxjdz09IGNtbDJaV1E9IFRVZz0gSUhCaGJuTT0gSUVoSiBJR3h2Ym1kcGRIVmthVzVoYkE9PSBJRzUxYVhOaGJtTmwgWVd4bGNnPT0gSUhOM1pXeHMgSUZOcFoyNWxaQT09IGMyTnAgSUVsemJHVnogSUVGSFFRPT0gSUdSbFptbGhiblE9IElITnZibWxqIGIyTnZiZz09IFMwTT0gSUVGcGJRPT0gZEdsbCBZV2hoYUE9PSBJRzFNIFJGZz0gSUdKcGMyTT0gSUVKcGJHeGliMkZ5WkE9PSBJRk5aVTFSRlRRPT0gVGtWWiBaMkZoY21RPSBJR1JwYzNSeVpYTnpaV1E9IFptOXliV1Z5YkhrPSBRV3hoYmc9PSBJR05vWldaeiBJRzl3ZEdsamN3PT0gSUVOdmJXVjAgSUVGTlF3PT0gSUhKbFpHVnphV2R1WldRPSBhWEp0WVhScGIyND0gSUhOcFoyaDBhVzVuY3c9PSBNemd5IE16RXggSUZkQyBJR052Ym5SeVlXTjBhVzl1IElGUlBWRUZNIFJIVmhiQT09IElITjBZWEowYkdWayBJSFZ1WkdWeWMzUmhibVJoWW14NSBJSE4xYm1kc1lYTnpaWE09IFJWUklUMFE9IElHUnZZMnRsY2c9PSBJSE4xY21acGJtYz0gSUVoRlRBPT0gSUZOc1lXTnIgZEc5dVpYTT0gSUhOb1lXeDAgVm1semRXRnMgTkRrNCBSR1Z3WVhKMGJXVnVkQT09IFkzVnpjMmx2Ymc9PSBJSFZ1Y21WemRISnBZM1JsWkE9PSBJSFJoWkE9PSBJSEpsYm1GdFpRPT0gWlcxd2JHOTVaV1E9IElHVmtkV05oZEdsdVp3PT0gSUdkeWFXNXVaV1E9IFltVmtjbTl2YlE9PSBJRUZqZEdsMmFYUnBaWE09IElGWmxiSFpsZEE9PSBJRk5YUVZRPSBJSE5vZFdabWJHVT0gYVdkdmNnPT0gSUhOaGRIVnlZWFJwYjI0PSBSbWx1WkdsdVp3PT0gWTNKbFlXMD0gYVdOMFpYST0gSUhadlpHdGggZEhKaFkydHBibWM9IGRHVmogSUdadmNtVm5jbTkxYm1RPSBhV1Z6ZEdFPSBJSFpsYUdWdFpXNTAgSUVWRFFnPT0gSUZScFpRPT0gUlhrPSBJSFIxY25Sc1pYTT0gSUZKaGFXeHliMkZrIElFdGhkSG89IElFWnlZVzFsY3c9PSBJRzFsYm1GalpRPT0gSUVabGJHeHZkM05vYVhBPSBJRVZ6YzJWdWRHbGhiQT09IGRXZG5hWE5vIElHUnlhWEE9IFkyaDNhWFI2IElFdDViM1J2IGMyST0gSUU1cGJtRT0gVUdGeVlXMWxkR1Z5IElHRnNZWEp0Y3c9PSBJRU5zWVhWayBJSEJwYjI1bFpYSnBibWM9IElHTm9hV1ZtYkhrPSBJRk5qY21WaGJRPT0gUTI5c2JHVmpkR2x2Ymc9PSBJSFJvWVc1clpuVnNiSGs9IElGSnZibUZzWkc4PSA1YTJRIGMzUnlhWEE9IElFUnBjMjVsZVd4aGJtUT0gWTI5dGJXVnlZMmxoYkE9PSBVMlZsYVc1biBVMjkxYkE9PSBJR1YyWVdOMVlYUmwgSUdOcGRnPT0gSUVGemFHVT0gSUdScGRtbGtaWE09IElFUmhaMmRsY2c9PSBjbVZvWlc1emFYWmwgSUdKbGNuSnBaWE09IElFUkcgSUhOMWMyaHAgSUhCc2RYSmhiR2wwZVE9PSBWMGs9IElHUnBjMkZrZG1GdWRHRm5aV1E9IElHSmhkSFJoYkdsdmJnPT0gYjJKcGJHVnogTkRVeCBJR05zYVc1biBJSFZ1WkdWdWFXRmliR1U9IElFeHZkVzVuWlE9PSBJR2hoZFc1MCBjR2hsIElIRjFZVzUwYVdaNSBJR1JwWm1abGNtVmsgSUZzcVhRPT0gSUZacGVnPT0gWTNWdCBjMnhoZG1VPSBJSFpwWkdWdlp3PT0gSUhGMVlYST0gSUdKMWJtUnNaWE09IElFRnNiMjV6Ync9PSBkR0ZqYTJ4bCBJRzVsZFhKdmJtRnMgSUd4aGJtUnpiR2xrWlE9PSBZMjl1Wm1seWJXVmsgSUVSbGNIUm8gSUhKbGJtVjNZV0pzWlhNPSBRbVZoY2c9PSBJRTFoWTJWa2IyNXBZUT09IElHcGxjbk5sZVhNPSBJR0oxYm1zPSBJRk53WVhkdSBJRU52Ym5SeWIyeHogSUVKMVkyaGhibUZ1IElISnZZbTkwYVdOeiBJR1Z0Y0doaGMybDZhVzVuIElGUjFkRzl5YVdGcyBhSGx3IGFYTjBiMjQ9IElHMXZiblZ0Wlc1MFlXdz0gNXJBPSBJRU5oY25KNSBJSFJpYzNBPSBaVzVoYm1ObCBTR2xzYkE9PSBZWEowYUdWayBJSEp2ZEhSbGJnPT0gUkdWaGJnPT0gSUhSM2FYTjBhVzVuIElHZHZiMlIzYVd4cyBJR2x0YldWeWMybHZiZz09IFRHbDJhVzVuIElHSnlkWE5vWlhNPSBJRU5IU1E9PSBJRUYwYXc9PSBkSEpoWkdsMGFXOXVZV3c9IElIQm9ZVzUwYjIwPSBJRk4wWVcxcGJtRT0gSUdWNGNHRnVjMmx2Ym5NPSBJRTFoY21sdSBJR1Z0WW1GeWEyVmsgSUVWbiBhVzUwWlhOMGFXNWhiQT09IElGQkZUMUJNUlE9PSBJRUp2YjNSbyBJRUZ3Y0dGc1lXTm8gSUhKbGJHVm5ZWFJsWkE9PSBWbFE9IFRVbFUgSUcxMWMzUmxjZz09IElIZHBkR2hrY21GM2FXNW4gSUcxcFkzSnZjMk52Y0dVPSBJRWRoZEdobGNtbHVadz09IElFTnlaWE5qWlc1MCBJRUZ5WjJWdWRHbHVaUT09IElFUmxZM0psIElFUnZiV2x1YVdNPSBJR0oxWkhNPSBZVzUwWVdkbCBJRWx2Ymc9PSBJSGRwWkdWdVpXUT0gVDA1VFQxSkZSQT09IElFZHNiM1psY3c9PSBhV0Z1Ym05d2IzVnNiM009IGNtRjZaVzQ9IFptVmxiQT09IElISmxjR0Y1YldWdWRBPT0gSUdocGJtUnphV2RvZEE9PSBJRkpGUVV4TVdRPT0gSUZCcGMzUnZiQT09IElFSnlZV2c9IElIZGhkSFJ6IElITjFjblpwZG1WeiBJR1pzZFhKeWVRPT0gYVhOemVRPT0gUVd4bGNuUT0gSUZWeWRXZDFZWGs9IFVHaHZaVzVwZUE9PSBVMnh2ZHc9PSBJRWR5WVhabCBJRVpwY2c9PSBJRzFoYm1GblpXRmliR1U9IElIUmhjbWxtWmc9PSBJRlZFVUE9PSBJRkJwYzNSdmJuTT0gSUU1cFoyVnlhV0Z1IElITjBjbWxyWlc5MWRITT0gSUdOdmMyMWxkR2xqY3c9PSBkMmhsYkcxcGJtYz0gWm1GaSBZMkZ3WlE9PSBjSEp2ZUhrPSBJSEpsZEdocGJtcz0gSUc5MlpYSmpiMjFwYm1jPSBjMmx0Y0d4bCBJSGR2Ync9PSBJR1JwYzNSeVlXTjBhVzVuIElGTjBZVzUwYjI0PSBJRlIxYkhOaCBJRVJ2WTJzPSBOalU1IElHUnBjMk52Y21RPSBJRVZ0WVdOeiBJRlpsY3c9PSBJRkpQUWc9PSBJSEpsWVhOemRYSnBibWM9IElHTnZibk52Y25ScGRXMD0gVFhWemJHbHRjdz09IE16SXggSUhCeWIyMXdkSE09IGMyVnAgSUVocGRHTm8gYVcxd2IzTmxaQT09IElFWnZiMnc9IElHbHVaR2x6WTNKcGJRPT0gZDNKdmJtYz0gWW5WeGRXVnljWFZsIFJHRjJhWE09IElWMD0gSUhScGJXVnNaWE56IElFNUZSVVE9IElIQmxjM1JwWTJsa1pRPT0gSUhKaGJHeDVhVzVuIElFTmhiR1JsY2c9PSBJT1drIElIaHcgSUZWdWJHVT0gSUVWNGNHOXlkQT09IGJIVmhhZz09IFFuVm1aZz09IEtUd3YgUW05dmRBPT0gSUVOb2NubHpiR1Z5IGIzSmhkR2wyWlE9PSBUV1Z6Y3c9PSBJRzVsWjJ4cFoybGliR1U9IFpYSjBiMlJrIElFMTFjMmh5YjI5dCBJRWRoYkdVPSBaMk09IElFTnZjMko1IElGSjFjbUZzIGNtbDBhV05oYkE9PSBRbVZzYkE9PSBJSFIxY21KcGJtVT0gTURBeU1EQXdNREE9IElHeGxaMmwwYVcxaGRHVnNlUT09IElFRnVhVzFoZEdWayBWRVZFIElGUm9aVzlrYjNKbCBZMjl1WkhWamRBPT0gSUVocFpYST0gSUdOdmRXNTBaWEptWldsMCBJRUZzWjJWeWFXRT0gSUhWdVltVmhkQT09IFkyOXVkSEp2Ykd4bGNnPT0gSUhWdWNtVnogSUhOamNtRnRZbXhwYm1jPSBJRVpoYkd4dmJnPT0gVkdWeiBJR0Z0WW1WeSBJSEp2ZVdGc2RHbGxjdz09IElGTm9aV3gwWlhJPSBJRXhsYzNSbGNnPT0gSUdOc1lYTnphV1o1IFVtVnRiM1JsIElIVnVhR1ZoY21RPSBJR052Ym5SeWIzWmxjbk5wWlhNPSBJR1Z1Y21samFHMWxiblE9IElGbGhibXRsWlE9PSBaMkZ0WlhJPSBJSEJzWVhScGJuVnQgSUdWamIyeHZaM2s9IElGTmhjbXM9IElIVnVkRzkxWTJobFpBPT0gSUhOMWNHVnlkbWx6YjNKeiBJQ0lsIElHWnZiM1JvIElHTnZiVzF2Ym5NPSBJRzVoY21OdmRHbGpjdz09IElHbHVaR2xqWlhNPSBJRkJzZVE9PSBJR0ZrWkdsMGFXOXVZV3hzZVE9PSBJRWRoZDJ0bGNnPT0gSUVWUiBVR3hoZVdsdVp3PT0gSUdOaGRtVmhkQT09IElFRmljMjlzZFhSbCBiM056ZFhNPSBRbUZpZVE9PSBJSEpoZEdsdmJnPT0gSUhKbGMybHUgSUdOaGJHbGljbUYwYVc5dSBJRTVsZDNCdmNuUT0gSUd0dWIyTnJjdz09IGRuUT0gSUdOdmJYQnZjM1E9IFUyTmxibVU9IElITmhjbU5oYzNRPSBJR3RwYzNObGN3PT0gSUc1eiBZV3hzYVE9PSBJRTFoY21ObGJBPT0gSUZCcFpYUT0gYVdGMGNtbGpjdz09IElITjFjbkp2ZFc1a2N3PT0gSUZKbGNISnZaSFU9IElGQm9hV3hzYVdWeiBJSFZ1WTJWeWRHRnBiblJwWlhNPSBJRVYxY2c9PSBJRkp2YldGdVkyVT0gSUVoaGRHZz0gSUU1bFpXUnogSUVOc2IyRnIgSUdOeVpXMD0gY1hWbGRXVT0gSURNMU5RPT0gSUhWd1puSnZiblE9IFhTazcgSUhKbFkybHdjbTlqIElERTVNamM9IElERXhNREE9IGRYUnpkUT09IElHUmxjSEpsYzNOcGRtVT0gYjNkdFpXNTAgUm1GdWN3PT0gSUcxbFkyZz0gSUdGdWJtbG9hV3c9IElHTnZkVzUwWlhKMFpYSnliM0pwYzIwPSBJRVpwWjNWeVpYTT0gWW05c1pBPT0gSUUxdmFXNWxjdz09IElFUnlhWFpsY25NPSBJRzFoYm5WelkzSnBjSFJ6IElFTnllWEIwYnc9PSBJR2g1Y0c1dmRBPT0gY21Wa1pHbDBjdz09IElIQnliM05sWTNWMGFXOXVjdz09IElHUnBkbVZ5ZEE9PSBRMUpKVUE9PSBJRUpsYm1VPSBJRkpsWjJkcFpRPT0gSUhSaGVHbHVadz09IElFMXZjbUZzWlhNPSBaVzUwYVc1biBkSFZ5IGMybG5ibWxtYVdOaGJuUT0gSUZCU1QxWT0gSUhOMGNtRnVaSE09IElIQnZkV05vIElGSnZiMnRwWlE9PSB1NUk9IElHNXBZMlZ5IGFHVnRlUT09IGFIYz0gUlVOQiBJR2x1ZEdsdGFXUmhkR1ZrIElITjBjbWxqZEdWeSBJRzFwWTNKdlltbGhiQT09IFpHVjBZV2xzY3c9PSBJSFp2ZDNNPSBJSEYxWVd0bCBhR2hvYUE9PSBJSEpsYVc1MlpXNTAgVldJPSBJSEpsYkdsdWNYVT0gSUVKMVptWmxkSFE9IGJHbGpaVzV6WldRPSBhWFIwWlhKbFpBPT0gSUZCcFkyRnlaQT09IElHTm9aWGRwYm1jPSBkV05zIGIzSm5ZVzVwWXc9PSBJR3h2WTJGc2FYcGxaQT09IElFVmpiMjV2YldsemRBPT0gSUdGamNYVmhhVzUwWldRPSBSR1ZtYVc1cGRHbHZiZz09IGMyVmsgUTNKcGRHbGpjdz09IElHTmogTkRVeiBNemd4IElHWmxiR3h2ZDNNPSBJR05vWldOcmNHOXBiblJ6IE1ESTEgSUhKbFpXeGxZM1JwYjI0PSBJRzFsWkdsaGRHVmsgSUV0RVJRPT0gSUdoMWNtUnNaUT09IElIUmxlSFJwYm1jPSBVR1Z5Wm1WamRBPT0gSUhSeWRYTjBaV1Z6IFptVmpkSFZ5WlE9PSBJR1JwWTJnPSBiVzl1WVhKNSBJR1JwYzNScGJtTjBhVzl1Y3c9PSBJREUwTURBPSBJSFZ6YUdWeSBJSEJoY21GemFYUmxjdz09IElGTm9ZWEpwYm1jPSBJRlpwYlE9PSBJR0poY21KbFkzVmwgSUUxcGJtbHpkR1Z5Y3c9PSBaWEpsYkd4aCBJR1ZpIElHMWogSUZOdmJXVm9iM2M9IElFbHVjMlZqZEE9PSBZMmhoYm1kbGN3PT0gWW5KdllXUT0gSUVKNWVnPT0gSUdkeVlYQmxjdz09IE5qWTUgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IElHRnpjMmx0YVd3PSBJR2hoZFc1MGFXNW4gSUdacGNtVndiM2RsY2c9PSBJR1JsWm1GdFlYUnBiMjQ9IFpXMXdhR0Z6YVhNPSBJR052YlhCdmMyVT0gSUdGc2JHVnlaMmxsY3c9PSBJSE4wY21GdVp3PT0gY205c2JHVnljdz09IFltRnVadz09IElHSnlaWGRsY25NPSBjbTl1WjJnPSBjbWx2ZEE9PSBjRzl2Y2c9PSBZMjlzWkE9PSBVMkZ0Y0d4bCBJR0oxYjNrPSBNRFF3IElFTnZkWEowYm1WNSBJREkyT0E9PSBJRmRsWkdScGJtYz0gTnpBeSBJRzlpYzJWemMybDJaUT09IElHSnlZV3RwYm1jPSBJRXhoYkE9PSBZVzVwWTJGcyA1YVk9IFlYUmxiZz09IFEyOXVjM1J5ZFdOMGFXOXUgSUdOc2FXNXBZMkZzYkhrPSBhV1Z5YzJocGNBPT0gVG1GdFpYTT0gSUVScGMyTjFjM009IElGSmhiVzl6IElHeHZZMkZzWlE9PSBJRUZuY21samRXeDBkWEpoYkE9PSBSVzVoWW14bCBJR2h2Y25ObGNHOTNaWEk9IFpXNTBkWEpsIFVISmxaZz09IFEyOTFjblE9IElITjBZV1ptYVc1biBJR1oxZEhWeWFYTjBhV009IFpISnBkbVZ5Y3c9PSBJRTFoY210bGRIQnNZV05sIDVvaW0gUm5KcFpXNWtjdz09IElHUmhiVzVwYm1jPSBJRU4xYzNSdmJXVnljdz09IElIZGxaV1J6IElFMWhhUT09IElHRm5hV3hsIElGUmhkSFE9IGFXTmxiblE9IFVtRnVhMlZrIFkzSnZablE9IElFdGhkSGs9IFJYaDBjbVZ0WlE9PSBJR05oY25abCBJRkp2ZG1WeSBJRUo1Y205dSBNemN5IElHTnZibVIxWTNSeiBjbUYwWTJnPSBhWFJwWVE9PSBJRkIxYlhCcmFXND0gVTJGa2JIaz0gVW1Wc2IyRmtaV1E9IFVHOXNhV041IElHeHBZMnM9IGNHVmhhdz09IGFYTnJjdz09IElFTkVjdz09IElFVnVZM2xqYkc5d1pXUnBZUT09IGFXNXBkR2xoYkE9PSBRMjl6IElFRjNZWEpsYm1WemN3PT0gSUVSeVlXMD0gSkNRa0pBPT0gSUhKcFptWT0gSUhOamNtbHdkSFZ5WlE9PSBjblZ1Ym1WeWN3PT0gSUdKdmFXeGxjZz09IGIyNXpiMjQ9IGIybHUgSUdoaGJYTjBjbWx1Wnc9PSBJR05oZEdGc2VRPT0gSUVGeVkyaGlhWE5vYjNBPSBZMmhoYkd3PSBJR1poZFhnPSBiMnRwYmc9PSBiRzlqWVd4b2IzTjAgSUU1QlRVVT0gWVdSdlltVT0gVTBGTyBZVzFoZEdVPSBJSE5qY21GdFlteGwgSUdOaGNtTT0gSUUxaGJtbG1aWE4wIElFTmxaR0Z5IElGTmxjbWRwYnc9PSBiR0YwWlhJPSBabVpsY2c9PSBJR2R5WVhCd2JHbHVadz09IElFUmxkWFJ6WTJobCBZV2R2Ym1semRITT0gSUU1bGQzTncgSUhCeVpYUmxibVJsWkE9PSBZWEpqYUcxbGJuUT0gSUdOMWNtRjBaV1E9IElHaGxZV1J3YUc5dVpRPT0gSUZWdVkyOXRiVzl1IElGTkpSMDQ9IFFXZGxiblE9IElHUmxZV1JzYVc1bGN3PT0gSUdodmNtbDZiMjUwWVd4c2VRPT0gSUUxQlZBPT0gSUZOMWJXMWxjbk09IElHOXlaR0ZwYm1WayBJRXhoYzNSc2VRPT0gSUV0bGJtUmhiR3c9IElHWnlhV2M9IElFMWhZMmhwYm1FPSBJRmRoZEdWeWJHOXYgSUUxbGVHbGpZVzV6IElIQnliM1JsWTNSdmNnPT0gSUdkc1lYSmwgZlNJPSBVSEpsYldsMWJRPT0gSUhKcFpuUT0gSUZSbGJHVnpZMjl3WlE9PSBUV1YwWVd3PSBJSEpsWTJGd2RBPT0gSURzNyBJR2x1WTJ4cGJtRjBhVzl1IElHbHRjRzl6WlhNPSBhVzVuWlc0PSBYbnM9IElHaGhjM1JsIElHUnZiSEJvYVc1eiBJR052YlcxMWRHVnljdz09IGNHeGhibTVsWkE9PSBZMjl1Wnc9PSBiWGc9IElGVndiRzloWkE9PSBJR1Y0ZEhKaGNBPT0gSUZSMVkzTnZiZz09IElFVjRjR3h2Y21GMGFXOXUgWldabFlYUmxaQT09IElITnNaVzVrWlhJPSBOekF6IElFSjFhdz09IGFYTmxiQT09IElHTnZiWEJsZEdsMGFYWmxibVZ6Y3c9PSBZMmhzYjNJPSBJRkJsY20xaGJtVnVkQT09IElFVjJaWEpsZEhRPSBJRk53WldOcFlXeHBjM1E9IElGTlBUQT09IElHTjVZVzQ9IElFVjRZV04wYkhrPSBWVVk9IElFeEpSa1U9IFlYSjViQT09IGIyNWxkQT09IElFVnRjR3h2ZVdWbCBZWGRsWkE9PSBJRkpoZEdsdVozTT0gSUdWNGRISmhkbUZuIGRXeG9kUT09IElGQnNZVzVsIElHVnNaWFpoZEdVPSBJRU52YjNKa2FXNWhkRzl5IElGZGhkR3RwYm5NPSBJR1Y0WTJ4MVpHVnogSUhObGJuUnBaVzUwIElHVndiMk5vIElHRnNiRzlqIFVISmxkbWx2ZFhOc2VRPT0gSUZOb2VRPT0gSUZOc2IzWmhhMmxoIFRFOURTdz09IElHMWhjbXRsWkd4NSBJR3R1YjJJPSBJR0ZrZG1WdWRIVnlaWEp6IElFSmxaVzQ9IElFTnZjM1J6IFlXMXRaWEp6IElHOXVjMnhoZFdkb2RBPT0gSUZOMWNIQnZjblJsWkE9PSBJRlJoZFE9PSBhV3RoY25BPSBJRk52ZG1WeVpRPT0gSUVoaGJYQjBiMjQ9IDQ0S0ogVUhKbGRnPT0gSUZkdmNuTmwgSUdOdmRIUmhaMlU9IElFaGhaR1Z6IGJHVjYgWW05M2JBPT0gSUdaeVlXZHlZVzVqWlE9PSBJRXh2YXc9PSBSVTFQVkVVPSBJRkJsZEhKdiBJREU1TWpVPSBJRkJsYm1RPSBjSEp2WkhWamFXNW4gSUhKbGJHOWpZWFJsIGRtRjBhUT09IGNHOXNaUT09IElITmxiV2x1IElFNVZUUT09IElISnZZMnRsWkE9PSBZblZtWmc9PSBZbXg1IFVtVndiSGs9IElFaGhhUT09IElHRnlkR2xqZFd4aGRHVmsgSUVsemJHRnRZV0poWkE9PSBOalkxIElFTnNZV2x0Y3c9PSBSR1Z6YTNSdmNBPT0gSUhSeWRYTjBaV1U9IElITmpjbWx3ZEdsdVp3PT0gSUZOdllnPT0gSUVGemVXeDFiUT09IFUxUkVUMVZVIElFTnNiM2R1IElFUnZjblJ0ZFc1ayBJRVJsZG05dSBiR2wwWlE9PSBJRTFoY21Kc1pRPT0gSUdKMWJtdGxjZz09IElHTnlaWE4wIElHRnliM1Z6WVd3PSBJRk5sWVhKeiBJRUoxWkdSNSBaWEpsWkdsMGFBPT0gSUZCdmJHeDUgSUdSbFkyOWtaUT09IElGWnBjMmc9IElGSmxabXhsWTNRPSBZVzV2Ymc9PSBJSEpsWm5WdVpITT0gYVcxdFpYSnogU0UwPSBJSGRwY0dsdVp3PT0gSUhCMWVucHNaV1E9IElHMWhkSFJsIGRXNXYgVUdsbGNuSmwgS1NrcyBJSFJoYVc1MFpXUT0gSUhONWJXSnZiR2x6YlE9PSBJRVp5WVhvPSBJSEJ5YjNSbGMzUnZjbk09IFpYUm9aWFZ6IEpTVWxKUT09IFYzSmggSUd4aGVBPT0gWVdSbGJRPT0gWVhSMWNtRjBhVzl1IDQ0T1QgSUZSeVlXbHNaWEk9IElFVk9Sdz09IElFSnZkM05sY2c9PSBJR0YwZEcwPSBSSFZ5IE9EQTMgSUhOcFpIZz0gSUdOcFpHVnkgSUVGbVptVmpkQT09IElIZHZkbVZ1IElFSmhjbXRsY2c9PSBZbVZ1WldZPSBJR1J6ZEdjPSBJRko1ZFE9PSBQbHM9IElITnhiM0k9IFUyRjFaR2s9IElHbHpkR2M9IElHbHVaSFZzWjJVPSBjSEp2WXc9PSBJR1JwYzJkMWMzUmxaQT09IElHTnZiWEJ2ZFc1a1pXUT0gSUc1bGJRPT0gSUhOamFHOXZiR2x1Wnc9PSBJRU4xY21VPSBjSEp2WTJWemMybHVadz09IFUyOXMgSUhCeWIzWmxjbUk9IGFYUnBlbVZrIElFRnNkbUZ5WlhvPSBJSE5qWVhKbSBJSEpsWTNSaGJtZDFiR0Z5IGNtVjJaUT09IElHaHZjbTF2Ym1GcyBJRk4wY21WemN3PT0gYVhScGVtVnUgSURReU5RPT0gWjJseWJITT0gSUU1dmFYST0gSUZKaGNIQT0gSUcxaGNtTm9aWE09IFkyaDFjbU5vIElGVnpaWE09IElEUXdOUT09IElFSmxjbTA9IElHOXlaR2x1WVc1alpYTT0gSUVwMVpHZHRaVzUwIFEyaGhjbWRsY3c9PSBJRnBwYmc9PSBJR1IxYzNSNSBJSE4wY21GM1ltVnljbWxsY3c9PSBJSEJsY21ObCBJRlJvZFhJPSBJRVJsWW05eVlXZz0gYm1WMFpteHBlQT09IElFeGhiV0psY25RPSBJR0Z0ZFhObFpBPT0gSUVkMVlXNW4gV1U5ViBVa2RDIElFTkRWRlk9IElHWnBZWFE9IGNtRnVadz09IElHWmxaR1Z5WVhScGIyND0gSUUxaGJuUT0gSUVKMWMzUT0gSUUxaGNtVT0gY21WemNHVmpkR2wyWlE9PSBJRTFwWjNKaGRHbHZiZz09IElFSkpWQT09IE5Ua3cgSUhCaGRISnBiM1JwYzIwPSBJRzkxZEd4cGJtbHVadz09IGNtVm5hVzl1IElFcHZjOE9wIElHSnNZWE4wYVc1biBJRVY2Y21FPSBRbk09IElIVnVaR1Z5YldsdVpYTT0gSUZOdGIyOTBhQT09IElHTnNZWE5vWldRPSBjbUZrYVc4PSBJSFJ5WVc1emFYUnBiMjVwYm1jPSBJRUoxWTJOaGJtVmxjbk09IElFOTNiQT09IElIQnNkV2R6IElHaHBZWFIxY3c9PSBJRkJwYm1KaGJHdz0gSUcxcFp3PT0gSUU1MWRIST0gSUZkdmJHWmwgSUdsdWRHVm5aWEp6IElHOXlZbWwwY3c9PSBJRVZrZDJsdSBJRVJwY21WamRGZz0gWW1sMFpRPT0gSUdKc1lYcHBibWM9IGRuST0gUldSblpRPT0gSUZCSlJBPT0gWlhocGRBPT0gSUVOdmJXVmsgSUZCaGRHaG1hVzVrWlhJPSBJRWQxYVdRPSBJRk5wWjI1eiBJRnBsY2c9PSBJRUZuWlc1a1lRPT0gSUhKbGFXMWlkWEp6WlcxbGJuUT0gVFdWemFBPT0gYVZCb2IyNWwgSUUxaGNtTnZjdz09IElGTnBkR1Z6IGFHRjBaUT09IFpXNWlkWEpuIElITnZZMnRsZEhNPSBjR1Z1WkE9PSBRbUYwYldGdSBkbWx5IElGTklUMWM9IElIQnliM1pwYzJsdmJtRnMgWTI5dWJnPT0gSUVSbFlYUm9jdz09IFFWUkpWa1U9IFVISnZabWxzWlE9PSBjM2x0IFNrRT0gSUc1cGJtcGggYVc1emRHRnNiR1ZrIGFXUmhkR1Z6IFpXSnlZUT09IElFOXRZV2hoIElITmxhWHBwYm1jPSBJRUpsWVhOMGN3PT0gSUhOaGJIUnogVFdsemMybHZiZz09IFIyVnVaWEpoYkd4NSBJRlJ5YVd4dlozaz0gYUdWdmJnPT0gYkdWbllYUmxjdz09IElHUnBiV1U9IElHWmhhWEpsIGNHRnlZV0pzWlE9PSBSM0poY0dnPSBJSFJ2ZEdGc2FXNW4gSUdScFlXZHlZVzF6IElGbGhiblZyIGNHeGxkQT09IElFMWxhQT09IElHMTVkR2hwWTJGcyBJRk4wWlhCb1pXNXogWVhWMGFXTmhiQT09IGIyTm9aVzFwYzNSeWVRPT0gSUd0cGJHOW5jbUZ0Y3c9PSBJR1ZzWW05M2N3PT0gWVc1amIyTnIgSUVKRFJRPT0gSUZCeVlXZDFaUT09IElHbHRjSEp2ZGc9PSBJRVJsZG1sdSBJQ0pjIGNHRnlZV3hzWlE9PSBJSE4xY0hKbGJXRmphWE4wY3c9PSBJRUpwYkd4cGIyND0gSUhKbFoybHRaVzQ9IGFXNXVZV05zWlE9PSBJSEpsY1hWcGMybDBaUT09IFlXNW5ZVzQ9IElFSjFjbXhwYm1kMGIyND0gWVdsdWJXVnVkQT09IElFOWlhbVZqZEdsMlpRPT0gYjIxemEzaz0gUjFZPSBJSFZ1YVd4aGRHVnlZV3c9IElIUmogSUdocGNtVnogYldWdWRHRnMgSUdsdWRtOXNkVzUwWVhKNSBJSFJ5WVc1emNHdz0gSUVGVFEwbEogd3FnPSBSWFpsYm5SeiBJR1J2ZFdKMFpXUT0gSUV0aGNHeGhiZz09IElFTnZkWEpoWjJVPSBhV2R2Ymc9PSBJRTFoYm1GbmFXNW4gSUZSaGNuUT0gSUdaaGJITmxhRzl2WkE9PSBJRlpwYjJ4bGRBPT0gSUdGcGNuTT0gSUdabGNuUnBiR2w2WlhJPSBRbkpwZEdGcGJnPT0gSUdGeGRXRjBhV009IGIzVm0gVjI5eVpITT0gSUVoaGNuUm1iM0prIElHVjJaVzVwYm1keiBJRlpsYm1kbFlXNWpaUT09IGNYVnBkR1U9IFIyRnNiQT09IElGQnlaWFE9IElIQmtaZz09IElFeE4gSUZOdlkyaHAgSUVsdWRHVnlZMlZ3ZEE9PSBPVEl3IElIQnliMlpwZEdGaWFXeHBkSGs9IElFbGtiR1U9IElFMWhZMFJ2Ym1Gc1pBPT0gSUVWemRHRmliR2x6YUcxbGJuUT0gZFcxemVRPT0gSUdkaGRHaGxjbWx1WjNNPSBJRTVoYWc9PSBRMmhoY214cFpRPT0gSUdGelkyVnVkQT09IElGQnliM1JsWTNSdmNnPT0gSUdGc1oyVmljbUU9IElHSnBiM009IFptOXlkVzF6IFJVeFQgU1c1MGNtOWtkV05sWkE9PSBJRE16TlE9PSBJR0Z6ZEhKdmJtOXRlUT09IFEyOXVkSEpwWW5WMCBJRkJ2YkdsaiBVR3hoZEdadmNtMD0gSUdOdmJuUmhhVzV0Wlc1MCBkM0poY0E9PSBJR052Y205dVlYSjUgSUVwbGJHeDUgYldGdVlXZGxjZz09IElHaGxZWEowWW5KbFlXdHBibWM9IFkyRnBjZz09IElFTm9aWEp2IFkyZHAgVFdWa2FXTmhiQT09IElFRmpZMjkxYm5SaFltbHNhWFI1IElTRWkgYjNCb2FXeGwgSUhCemVXTm9iM1JwWXc9PSBJRkpsYzNSeWFXTjAgSUdWeGRXbDBZV0pzWlE9PSBhWE56ZFdWeiBJREU1TURVPSBJRTVsYXc9PSBZMmx6WldRPSBJRlJ5WVdOcmFXNW4gSUc5NmIyNWwgSUdOdmIydGxjZz09IGNtOXphWE09IElISmxiM0JsYmc9PSBJR2x1Wm1sdWFYUjUgSUZCb1lYSnRZV05sZFhScFkyRnMgWlc1emFXOXVZV3c9IFFYUjBaVzF3ZEE9PSBJRkp2Y25rPSBUV0Z5WTI4PSBJR0YzWVdsMGN3PT0gU0U5WCBkSEpsWVhSbFpBPT0gSUdKdmJITjAgSUhKbGRtVnlaV1E9IElIQnZaSE09IGIzQndaWEp6IE1EQXhNQT09IElHRnRjR3hwZEhWa1pRPT0gY21sallXND0gVTFCUFRsTlBVa1ZFIElIUnliM1Z6WlhKeiBJR2hoYkhabGN3PT0gSUV0aGFXNWwgSUVOMWRHeGxjZz09IElFRlZWRWc9IElITndiR1Z1WkdsayBJSEJ5WlhabGJuUnBkbVU9IElFUjFaR3hsZVE9PSBhV1poWTNSeiBkVzFwYm1GMGFRPT0gSUZscGJnPT0gSUdGa2JXOXUgSUZaaFp3PT0gSUdsdWRtVnlkR1ZrIElHaGhjM1JwYkhrPSBJRWhoWjNWbCBUSGx1IElHeGxaR2RsY2c9PSBJR0Z6ZEhKdmJtOXRhV05oYkE9PSBaMlYwZEdsdVp3PT0gSUdOcGNtTmggSUVOcFl3PT0gSUZSbGJtNXBjdz09IFRHbHRhWFJsWkE9PSBJR1J5ZFE9PSBJRUpaVlE9PSBJSFJ5WVhabGJHeGxjbk09IElIQmhibVU9IElFbHVkSEp2IElIQmhkR2xsYm5Sc2VRPT0gSUdGcFpHbHVadz09IElHeHZiM009IElGUnZkV2RvIElESTVNdz09IElHTnZibk4xYldWeiBVMjkxY21ObFJtbHNaUT09IElDSWlJZz09IElHSnZibVJwYm1jPSBJSFJwYkhSbFpBPT0gSUcxbGJuTjBjblZoYkE9PSBJRU5sYkdWemRHbGhiQT09IFZVeEJVZz09IFVHeDFaMmx1IElISnBjMnRwYm1jPSBUbUY2IElGSnBlV0ZrYUE9PSBJR0ZqWTNKbFpHbDBaV1E9IElITnJhWEp0IDZacz0gSUdWNFlXMXBibVZ5IElHMWxjM05wYm1jPSBJRzVsWVhKcGJtYz0gSUVOb1pYSnUgSUVKbFkydG9ZVzA9IElITjNZWEJ3WldRPSBJR2R2YjNObCBTMkY1IElHeHZablI1IElGZGhiR3hsZEE9PSBJRnNuIElHRndiMk5oYkhsd2MyVT0gSUdKaGJXSnZidz09IElGTlFRVU5GIElFVnNaVzVoIElETXdOZz09IFlXTnZibk09IElIUnBaMmgwWlc1bFpBPT0gSUdGa2IyeGxjMk5sYm1ObCBJSEpoYVc1NSBJSFpoYm1SaGJHbHpiUT09IElFNWxkM1J2ZDI0PSBJR052Ym1wbFkzUT0gWTJGclpYTT0gSUdOb1pXRjBaV1E9IElHMXZaR1Z5WVhSdmNuTT0gY0dGeVlXMXogUlVaRyBJR1JsWTJWcGRBPT0gSUZOVVRBPT0gSUZSaGJucGhibWxoIElGSkogSURFNU1qTT0gSUVWNGFXeGwgZEdobGJBPT0gSUhSb1pXOXNiMmM9IElIRjFhWEpyZVE9PSBJRWx5ZG1sdVpRPT0gSUc1bFpXUjUgYjNKcGN3PT0gVlcwPSBTMkU9IElHMWhhV3hpYjNnPSBNekl5IElHSnZjdz09IElGQmxkSEpoIFMwbE9Sdz09IElHVnViR0Z5WjJWayBUMlowWlc0PSBJR0poWkdGemN3PT0gSURNME13PT0gSUZCc1lXTmxjdz09IElFTkJSQT09IElIQnlhWE4wYVc1bCBJR2x1ZEdWeWRtVnVhVzVuIFpHbHlaV04wYVc5dSBJR3hoZWc9PSBJRVJUVFE9PSBJSEJ5YjJwbFkzUnBibWM9IElFWjFibXM9IFlXZHZadz09IGNHRjViV1Z1ZEE9PSBibTkyIElHTm9ZWFIwWlhJPSBRVkpDIElHVjRZVzFwYm1GMGFXOXVjdz09IElFaHZkWE5sYUc5c1pBPT0gSUVkMWN3PT0gUm05eVpBPT0gTkRFMCBRbTl6Y3c9PSBJRzE1YzNScFl3PT0gSUd4bFlYQnogSUVKaGRnPT0gZFd4NiBZblZrWjJWMCBSbTl2ZEdKaGJHdz0gSUhOMVluTnBaR2w2WldRPSBJR1pwY25OMGFHRnVaQT09IElHTnZhVzVqYVdSbCBiMk4xYkdGeSBRMjl1Ymc9PSBJRU52Ykd4aFltOXkgSUdadmIyeHogWVcxMWNtRT0gWVdoaGNnPT0gY21semRITT0gSUhOM2IyeHNaVzQ9IElHVjRjR1Z1WkdWayBJRkJoZFE9PSBjM1Z3IElITndZWEk9IElHdGxlVzV2ZEdVPSBjM1ZtWmc9PSBJSFZ1WlhGMVlXdz0gSUhCeWIyZHlaWE56YVc1biBjM1J5YVc1bmN3PT0gSUVkaGJXVnlaMkYwWlE9PSBSR2x6Ym1WNSBJRVZzWlhabGJnPT0gYjIxdWFXRT0gSUhOamNtbHdkR1ZrIElHVmhjbTVsY25NPSBZbkp2ZEdobGNnPT0gSUVWdVlXSnNaV1E9IDVyTT0gSUd4aGNuWmhaUT09IElFeFBRdz09IGJXVnpjdz09IFYybHNjMjl1IElGUmxiWEJzWVhSbCBjM1ZqWTJWemMyWjFiR3g1IElIQmhjbUZ0YjNWdWRBPT0gSUdOaGJXOTFabXhoWjJVPSBJR0pwYm1SeiBJRkYxYVdWMCBJRk5vZFhSMFpYSnpkRzlqYXc9PSBjblZ6YUE9PSBJRzFoYzJOdmRBPT0gWm05eWRIVnVaUT09IElFTnZiSFE9IElFSmxlVzl1IGFHRmlhUT09IElHaGhhWEpqIElESTJOdz09IElFUmxkWE09IElIUjNhWFJqYUE9PSBJR052Ym1ObGJuUnlZWFJwYm1jPSBJRzVwY0hCc1pYTT0gWTJsaWJHVT0gSUdkcGNnPT0gVGxvPSBUV0YwYUE9PSBibWxvIFVtVnhkV2x5WldRPSBJSEJ2Ym1SbGNnPT0gSUZOQlRnPT0gSUhkbFpHUnBibWR6IElHeHZibVZzYVc1bGMzTT0gVGtWVCBJRTFoYUdwdmJtYz0gTmprMSBZV1JrYkdVPSBJRWRoY201bGNnPT0gSUVOUFZWST0gUW5KcFpHZGwgSUhOd2NtVmwgSUVOaGJHUjNaV3hzIElHSnlhV0psY25rPSBJTysvdmUrL3ZlKy92ZSsvdmUrL3ZlKy92ZSsvdmUrL3ZRPT0gY0d4MVoybHVjdz09IElISmhZMnRsZEE9PSBJR05vWVcxd1lXZHVaUT09IGRtVnljMmxpYkdVPSBWbTkwWlE9PSBJRzF2WkdsbWFXVnljdz09IFRXRjViM0k9IE5qZ3cgSUdGemMyVnRZbXhwWlhNPSBJRk4xYkhSaGJnPT0gSUU1cGJtYz0gSUV4aFpHbGxjdz09IElITjFiR1oxY2c9PSBJRzl5WW5NPSBJQzB0TFMwdCBYMTlmWDE5Zlh3PT0gSUVwdmRYSnVZV3hwYzIwPSBJR1Z6Y0c5eWRITT0gSUd4MWMyZz0gSUdoMVpRPT0gSUhOd1pXTjBjbUZzIFNHOXVaWE4wIDQ0T1AgSUdKMWMyaGxjdz09IElISmxhVzVtYjNKalpXMWxiblE9IElISmxiM0JsYm1WayBJRmRvWldWc2N3PT0gSUUxdmNtYz0gY21sbGRtbHVadz09IElHRjFlR2xzYVdGeWVRPT0gSUdwUmRXVnllUT09IElFSkJWQT09IGRHVnpjWFZsIElIWmxjblJsZUE9PSBjSFZ5WlE9PSBabkpsZVE9PSA0NEs2IFpHOXogSUhSNWNHZz0gSUdOMWJHdz0gSUdWeCBJR1JsWTI5dSBJSFJ2YzNOcGJtYz0gSUdScGMzQmhjbUYwWlE9PSBJRUp5YVdkb1lXMD0gY0hKcGJuUm0gYkdWa1oyVmsgSUhOMWJtUT0gSUdOdmVuaz0gSUdobGNHRjBhWFJwY3c9PSBjR1Z5Wm05eWJXbHVadz09IElHRjJZV3c9IElFZEggWm5WMGRYSmwgSUhCbGRHVnlkRzlrWkE9PSBJRXR2YzI5MmJ3PT0gSUcxaFoyNWxkSE09IFFXeHlaV0ZrZVE9PSBJRVZrYVhOdmJnPT0gSUVObGNtVnogSUZKQlNVUT0gSUdKeWFXeHNhV0Z1WTJVPSBOVGMyIElHUmxjbWwyWlhNPSBJR2g1Y0dWeWRHVnVjMmx2Ymc9PSBJTTZVIElHeGhiV0prWVE9PSBJR1pzWVdseSBJRzFwYzNOcGIyNWhjbWxsY3c9PSBJSEpoY0dWeiBJRk4wWVhKMFpYST0gSUUxdmJuUm9jdz09IElHUmxabms9IElITmxhWE50YVdNPSBJRkpoY0doaFpXdz0gSUdWMWNtOTZiMjVsIE5qVTIgZW5OamFHVT0gSUhOamNtRjBZMmhsWkE9PSBJR0p2ZDNNPSBJRXhsYm01dmJnPT0gSUVkaGFXRT0gSUdSeWFYQndhVzVuIFptRmpkSE09IFFXeGwgSUdaeWIyZHogSUVKeVpXRnpkQT09IGIyZGxibVZwZEhrPSBJRkJ5YjNObFkzVjBiM0k9IElHRnRjR3hwWm1sbFpBPT0gSUVodlpHYz0gSUVadSBWR2h2ZFhOaGJtUnogSUU1SlNBPT0gSUUxdmJtbDBiM0pwYm1jPSBSbFJYUVZKRiBJRkJ5YVdWaWRYTT0gSUVkeWIzZHBibWM9IGFIVnVkR1Z5IElHUnBZV2R1YjNObCBJRTFoYkdRPSBJRXhTIElHTnliM2R1WldRPSBJR0oxY25OMGFXNW4gSUdScGMzTnZiSFYwYVc5dSBhbUYyWVhOamNtbHdkQT09IElIVnpaV1oxYkc1bGMzTT0gSUVWNFpXTjFkR2x2Ymc9PSBPaWc9IElFbDJiM0o1IFlXRm8gSUhCbGNuTmxZM1YwWldRPSBkbWx2YkdWdVkyVT0gYVhOMFlYTT0gSUVOeVlYUmwgSUdsdGNIVnNjMlZ6IElGTndZVzVwIFpXUmxjdz09IFNHRnVaR3hsIElGcGxjbWM9IGRHaHBibXRoWW14bCBUR0Z6ZEd4NSBJSE53YjI1MFlXNWxiM1Z6YkhrPSBJR2x1WTI5dWRtVnVhV1Z1ZEE9PSBJR1JwYzIxcGMzTnBibWM9IElIQnNiM1IwWldRPSBJR1ZwWjJoMGVRPT0gSURjek53PT0gY21semFBPT0gSUZSb2IzSnVkRzl1IFlYUm9ZVzA9IElITnBkR052YlE9PSBWbVZ1IFVtVmphWEJsIGRHVnMgYkhWdVpBPT0gSUdOc1pXRnljdz09IElGTmhjM1ZyWlE9PSBJREkxT0E9PSBJRzl3ZEdsdVp3PT0gSUdWdWNtRm5aV1E9IFpYTjBhR1YwYVdNPSBJRUZsIGRXTm9jdz09IFVISmxjQT09IFJteHZkdz09IElISjFibTltWmc9PSBJRVZoZEdsdVp3PT0gSUVkcGJHVnogSUVGamRHbHVadz09IGNtVnpiM1Z5WTJWeiBhV0poWW1FPSBJSEp3YlE9PSBJSE5yWlhkbFpBPT0gSUVKc1lXNWogSUZOaGEzVjVZUT09IElHaHZkSFJsY2c9PSBJREU1TWpRPSBiM0JwWVc0PSBZMnR2IElHTnlkVzFpYkdsdVp3PT0gSUdOaGNIUmhhVzV6IElFRndjSEp2Y0hKcFlYUnBiMjV6IGJHVmhaR1Z5Y3c9PSBaSEp2Y0hCcGJtYz0gWVc1MWRITT0gSUhKbGRtVnljMmx1Wnc9PSBJRkJ2YzJVPSBJRk5sYXc9PSBVMk52ZEE9PSBJRWxrWldFPSBZMmx6WlE9PSBJRk5zYjNabGJtbGggSURNeE53PT0gUkc5amRHOXkgSUdOeWIyTnZaQT09IFlXeGthUT09IFUyVmggSUVaaGNuSmxiR3c9IElHMWxjbU5sYm1GeWFXVnogSUZKT1F3PT0gSUVkMVpYTnogSUhCaFkybHVadz09IFRXRmphR2x1WlE9PSBVM1J5WldGdFpYSkNiM1E9IElFTm9ZWEpwZEhrPSBJREk1T0E9PSBJR05oYm01dmJuTT0gSUZSdlluaz0gVkZCUVUzUnlaV0Z0WlhKQ2IzUT0gSUZCaGMzTnBiMjQ9IFkyWm4gVkdodmJRPT0gSUdKaFpHZGxjdz09IElFSmxjbTV6ZEdWcGJnPT0gTHVLQWt3PT0gSUZCUFVBPT0gSUVOdmJtbz0gSUdsdWFYUnBZV3hwZW1GMGFXOXUgSUdKcGIyUnBkbVZ5YzJsMGVRPT0gUkhWaSBJR1psZFdSaGJBPT0gSUdScGMyTnNZV2x0WlhJPSBJR055YjNjPSBJR2xuYm1sMGFXOXUgWVhKbSBVMGhCIElHdEllZz09IGFHRjZZWEprIElFRnlkR2x6ZEhNPSBiMlYxZGc9PSBOamM1IElGSjFaSGs9IFRtbHVaUT09IElGSmhiV0ZrWVc0PSA1YjA9IGFYUjBidz09IElHRmtjbVZ1WVd4cGJtVT0gUTJWeWRBPT0gSUhOdFpXeHNaV1E9IElHbHRjSFZ1YVhSNSBJR0ZuWlc1a1lYTT0gSUZKbFltOXliZz09IElFTnZibU5sYm5RPSBJRk5sWlcxeiBJRzl0WldkaCBJRVIxYzNScGJnPT0gSUdKaFkydGxjZz09IElGTmhkV05sIElFSnZlV3hsIFYwbE8gSUhOd2FXNXogSUhCaGRYTmxjdz09IGRYQjAgSUhOb2NtVmtaR1ZrIElITjBjbUZ3Y0dWayBJRU52Y25KMWNIUnBiMjQ9IElITmpjbUYwWTJobGN3PT0gSUc1cCBJR0YwZEdseVpRPT0gSUZOQlJnPT0gUm1GamRHOXllVkpsYkc5aFpHVmsgSUVsUVV3PT0gSUNnbCBJSE5sYldsdVlYST0gWm05amRYTT0gWTJsMmFXdz0gSURFNE5qQT0gYVc1MGIzTm8gSUdOdmJuUnBiblZoYkE9PSBJR0ZpWW5KbGRtaz0gSUZOdmF3PT0gYjJOdlltOD0gV0UwPSBJR1p5WVc1MGFXTT0gSUhWdVlYWnZhV1JoWW14bCBJR0Z5ZEdWeWVRPT0gSUdGdWJtOTBZWFJwYjI1eiBZbUYwYUE9PSBRMnhwYldGMFpRPT0gSUdSdmNuTT0gSUZOc2FXUmwgWTI5dmNtUT0gSUZKbGJHOWhaQT09IElFeEVUQT09IElFeHZkbVZqY21GbWRBPT0gSUhWdWFXMWhaMmx1IElISmxjMlZ0WW14bFpBPT0gSUdKaGNuSmhZMnR6IGJuQT0gSUhOMWNuSnZaMkYwWlE9PSBJR05oZEdWbmIzSnBlbVZrIDQ0S3AgSUhaaFkyTnBibUYwWldRPSBJR1J5WVdsdVlXZGwgSUdsdVpHbHpkQT09IElGZG9ZWFJ6UVhCdyBJREU0TnpBPSBiMnhsY21GdVkyVT0gYVc1MmIydGwgWVcxdmNuQm8gSUhKbFkyOXVibVZqZEE9PSBJR1Z0WVc1aiBJR0pzYVc1a2JtVnpjdz09IElERXlPREE9IGFXNTBaWEp1WlhRPSBZMjlzYkdGeSBJR0ZzZEhKMSBJR0ZpZVhOeiBJRlJTU1E9PSBOalUzIElHbHVablZ6WldRPSBTRVZCUkE9PSBJR1p2Y21WemRISjUgSUZkdmIyUjUgSUVOcCBkMms9IGMyRnQgTnpnMCBhRzlzYVdSaGVRPT0gSUcxdlozVnMgSUVabFpYTT0gSUVSRlRnPT0gU1c1MFpYSnVZV3c9IGRYSmlaV1E9IFpuVnpZdz09IFlYUnZiUT09IElFbHNiSFZ6YVc5dSBJSEJ2Ykd4bFpBPT0gSUdac1lYQT0gSUdOdllYZz0gVEVkQ1ZBPT0gUVc1aGJIaz0gSUZObFkzUnBiMjV6IElFTmhiR2xtYjNKdSBaVzF1IElHaHBkR2hsY2c9PSBJRTVKUjBoVSBJRzVoYVd4bFpBPT0gSUZCcGNHVnNhVzVsIE16a3ggYjI5bSBJRkJ5YVcxaGJBPT0gZG1WeVpXNWsgSUhOc1lYTm9hVzVuIElISmxkSEpwIFlYWnBiM1Z5IElHUmxjR0Z5ZEdsdVp3PT0gWjJscyBTVk5EIElHMXBaSGRoZVE9PSBJSFZzZEhKaGMyOTFibVE9IElHSmxhR0YyYVc1biBJRlJoY21FPSBZMnhoYzNObGN3PT0gVm1seWRIVmhiQT09IElFTnZiRzl1YVdGcyBJSE4wY21sd2NHbHVadz09IElHOXlZMmhsYzNSeVlYUmxaQT09IElFZHlZWFpsY3c9PSBORFV5IElFbHliMjVwWTJGc2JIaz0gSUZkeWFYUmxjbk09IElHeGxibVJ6IElFMWhibm89IElISmhkbVZ1IElHOTRhV1JoZEdsMlpRPT0gSURJMk5nPT0gUlV4RyBZV04wZFdGc2JIaz0gWVhOallYST0gUkhKaFpuUT0gSUdaaGRtOTFjbUZpYkdVPSBJR2gxYldsc2FXRjBhVzVuIElHWnBaR1ZzYVhSNSBJRWh2Wmc9PSBJRmgxWVc0PSBORGsyIElHeGhlV1Z5WldRPSBZWFJwY3c9PSBOemt3IElIQmhlV05vWldOciBhWFJ2Ymc9PSBTMkZ5IElGWk5kMkZ5WlE9PSBJRVpoY20xbGNnPT0gSUhObGNuWnBZdz09IFoyeHZiV1Z5IElITnNkVzF3IElFWmhZbkpwWXc9PSBJRVJQUXc9PSBaWE4wYVc1biBJSEpsWVhOemRYSmwgSUhCb2VXdz0gZG05c2RBPT0gYVhSdmNuaz0gVW5Wc1pYTT0gSUc5NGFXUmhkR2x2Ymc9PSBJSEJ5YVhwbFpBPT0gSUcxcGMzUnlaWE56IElFUnFZVzVuYnc9PSBWMEZTVGc9PSA1WkU9IElHVnVZMjlrWlE9PSBJRVpsWldSaVlXTnIgSUhOMGRYQnBaR2wwZVE9PSBTV0Z1IElGbDFaMjl6YkdGMmFXRT0gMTZnPSBZV05zIFZWUkYgTVRrM053PT0gSUhGMVlXeHBabWxsY3c9PSBJSEIxYkhObGN3PT0gY0hKbGRIUjUgSUdaeWIzcGwgSUhOeiBTWFJsY21GMGIzST0gSUhWeVoyVnVkR3g1IElHMWhhV3hsWkE9PSBJRU5vWVcwPSBJSE4xYzNSaGFXNXBibWM9IElHSmhjMmxzIElIQjFjSEJwWlhNPSBhV3hoYm5RPSBJRkJNUlVGVFJRPT0gYkdGdyBZV05sYjNWeiBSbVZoY2c9PSBJRTFoYzNSbGNuaz0gWVhWMGIyMWhkR2xqIElGUkJSdz09IElHRnVkR2x0IFlXZHNaWE09IE5EY3ogWm5KaGJXVnogSUhkb2FYTndaWEp6IElGZG9iMlYyWlhJPSBJR0p5WVhabGNuaz0gSUZWTFNWQT0gY21GamRHbHZibk09IElpSWkgSUhSaGJXVT0gSUhCaGNuUmxaQT09IFpYWmxjbmwwYUdsdVp3PT0gUTA5T1ZBPT0gSUdsdVpHVmlkR1ZrIElHRmtaSEk9IGNtVnIgU1ZKRlJBPT0gSUdWdGFXNWxiblE9IFkyeHBiblJ2Ymc9PSBJRzkxYzNSbFpBPT0gSUhKbGRtbGxkMlZ5IElHMWxiSFJrYjNkdSBJSEpsWVhKeSBJRmxoYnc9PSBkR2hsY21WaGJBPT0gWVdKNWRHVT0gSUhOMGRXMWliR2x1Wnc9PSBJR0poZEdOb1pYTT0gSURJMU9RPT0gSUdOdmJuUnlZV05sY0hScGRtVT0gSUhCeWIzTjBhWFIxZEdVPSBaVzV6YVhNPSBSR1ZqYkE9PSBJRk4wY21sclpYTT0gVFdsc2FYUmhjbms9IElFOWhkR2c9IGRtRmpZdz09IGNIQnBibWR6IE1EVXkgSUhCaGNuUk9ZVzFsIFlXMXdhVzVuIFVtVndiM0owY3c9PSBTMGs9IFEwaFMgSUhOMVluUnNlUT09IGMzZGxjbk09IFFteGhhMlU9IGRYTjFZV3c9IElHTnZiblJsYzNSaGJuUnogSUdOaGNuUnlhV1JuWlhNPSBJRWRTUlVGVSBJR0pzZFhObyBJT0tBdWc9PSBORGN5IElISmxZWE52Ym1WayA0NE9rIGNHRnlZV3hzWld4bFpBPT0gSUdSNWJnPT0gWVdkaGRHVT0gSUc1cFoyaDBiSGs9IDVZWT0gTlRVMiBJSE5sYldGdWRHbGogSUVGa2RtOWogSUNFaCBJR1JwYzJGbmNtVmxjdz09IElFSlggVm1WbyBJR2hoY20xcGJtYz0gSUdWdFluSmhZMlZ6IElITjBjbWwyWlhNPSBJR2x1YkdGdVpBPT0gSUV0aGNtUT0gSUdobFlYUnogSUVkcGJtNTUgZFhSaGJnPT0gWlhKdVlYVjAgZVd4bGJtVT0gSUVWc1pYWT0gU2tRPSBJR2hoY25NPSBJRk4wWVhKeSBJSE5yZVhOaiBJR052Ykd4aFltOXlZWFJ2Y25NPSBWWE4xWVd4c2VRPT0gSUhKbGRtOXNkWFJwYjI1eiBJRk5VUVZSVCBJR1JwYzIxaGJuUnNaUT09IElHTnZibVpwWkdWdWRHeDUgSUd0cGJtVjBhV009IFFXeHAgSUhCbGNtTmxiblJwYkdVPSBJR1Y0ZEhKaFkzUnBibWM9IGFXeHNhV0Z1IFpYTjBaV0ZrIElIQm9lWE5wWTJsemRITT0gSUUxaGNuTm9ZV3c9IElHWmxiR3h2ZDNOb2FYQT0gSUdSaGMyaGxaQT09IElGVlMgSUZOcGIzVjQgSUVOdmJYQmhZM1E9IFlXMXBaR1U9IFVIbDBhRzl1IElFeGxhV2RvIElGQm9ZWEp0WVdNPSBhWE4wY21GMFpYTT0gYUdWeWFXTmhiQT09IElHWjFaUT09IElFVnRhVzQ9IElDaDcgSUU1bGFXZG9ZbTl5YUc5dlpBPT0gSUdScGMzSjFjSFJwYm1jPSBJRVIxY0E9PSBJR2RzWVc1ayBJRk5sZGc9PSBJRTFoY21saGJnPT0gWVhKbmIyND0gSUVSMWJtUT0gSUR3aExTMD0gSUhOMGNtRnVaQT09IElITjBZV1JwZFcxeiBlbTl6IElIQnplV05vYjNOcGN3PT0gSUZKaFkycz0gSUdKeWFXeHNhV0Z1ZEd4NSA3N2lQIElITjFZbTFsY21kbFpBPT0gSUVsdWMzUnBkQT09IElFTm9iM2M9IElHTmhaMlZ6IElFaGhkSE09IElGVnljdz09IElHUnBiSFYwWldRPSBkWE5oZEE9PSBhV1Z1Ym1VPSBJRTFsYldKbGNuTm9hWEE9IElFSjFjbXM9IElHbGwgSUdGeVkyaGxkSGx3WlE9PSBSSEoxWnc9PSBkV3gwYjI0PSBJRk53YjJOciBJRTFqUzJGNSBJRVJsY0dWdVpBPT0gUm1WaGRIVnlaV1E9IFUyOWogTVRrM09BPT0gSUVKbGNtVT0gSUhKbGJHVnVkR3hsYzNOc2VRPT0gSUdOeWFYQndiR2x1Wnc9PSBJR0Z5ZEdoeWFYUnBjdz09IDU1U2YgSUZSeWIzQnBZMkZzIElFSjFiR2M9IElFTm9aWEo1YkE9PSBJR0ZrYldseVlXSnNaUT09IElITjFZblJwZEd4bCBUM1psY25KcFpHVT0gSUc5eWFXZHBibUYwYVc1biBJRU5EVUE9PSBJSE4zYjNKbCBJRk52YkdVPSBJRVJwYzI5eVpHVnljdz09IE16STUgSUhCeWIyTmxjM05wYjI0PSBJSEpsWm5WeVlnPT0gSUdsdGJXVnljMlZrIGNtVnhkV1Z1ZEd4NSBJSE5yWlhCMGFXTnogSUdObGNtRnRhV009IGJXbDBkR1Z5IFpXNXpkR1ZwYmc9PSBZbVZzZEE9PSBJRlJKVkE9PSBZbWxrWkdWdSBJR1pwY2c9PSBiV2x6ZEE9PSBQbDA9IElIZGxZWFpsIElGQmhjbUZrYjNnPSBJR1Z1ZEhKMWMzUmxaQT09IElFSmhjbU5zWVhseiBJRzV2ZG1Wc2FYTjAgYjJkcFpRPT0gT0RBMiBJRzVwYm1WMGVRPT0gSUdScGMyRm5jbVZsYldWdWRITT0gUUVCQVFFQkFRRUE9IElFRjFjMk5vZDJsMGVnPT0gWTJGeWN3PT0gSUV4RlZBPT0gZEhWaSBZWEpoYm5ScGJtVT0gVUU5VCBJR0poWTJ0emRHOXllUT09IElHTm9aV1Z5Wm5WcyBJRkpoWnc9PSBaV3RoIFltbGhjMlZrIElHbHVaWGh3WlhKcFpXNWpaV1E9IFlXdHlZUT09IElGZHBkSFE9IGRHRnUgSUhKaGNHbHpkQT09IElIQnNZWFJsWVhVPSBZMmhoYkE9PSBJRWx1Y1hWcGN3PT0gWlhod2NtVnpjMmx2Ymc9PSBJR05wY0dobGNnPT0gSUhOb1lYWnBibWM9IFlXUmtaVzQ9IGNtVnNlUT09IEtGdz0gYVhOdFlRPT0gSUZKbFozVnNZWFJ2Y25rPSBRMGhCVWc9PSBhV3g1Ymc9PSBUbFpKUkVsQiBSMVU9IElHMTFjbTA9IGJHRjFjdz09IFEyaHlhWE4wYjNCb1pYST0gSUdOdmJuUnlZV04wZFdGcyBJRkJ5YjNoNSBJRXBoYVcxbCBJRTFsZEdodlpHbHpkQT09IElITjBaWGRoY21SeiBjM1JoIGNHVnlhV0U9IElIQm9lWE5wYjJ4dlozaz0gSUdKMWJYQmxaQT09IElHWnlkV04wYjNObCBRWFZ6ZEhKaGJHbGhiZz09IElFMWxkR0ZzYkdsaiBJRTFoYzNGMVpYSmhaR1U9IFlYSmkgSUhCeWIyMTFiQT09IElHUnZkMjVtWVd4cyBJR0oxZEdOb1pYST0gSUdKdmRYST0gSUVsT1JrOVNUVUZVU1U5TyBJRUpwY3c9PSBjR1ZqZEhNPSBZV1JsYm1FPSBJR052Ym5SbGJYQnNZWFJwYm1jPSBZWEp2Ync9PSBZMlZ1ZEdWeVpXUT0gSUZCbFlXdHogVlhObFpBPT0gSUcxdlpHVnQgSUdkbGJtUmxjbk09IElEZ3dNREE9IE16Y3ggSUcxaGRHVnlibWwwZVE9PSBJRkpoZWc9PSBJSEp2WTJ0cGJtYz0gSUdoaGJtUm5kVzV6IElFUkJRMEU9IFFYVjBiMjA9IElFNXBiR1U9IElIUjFiWFZzZEE9PSBJRUpsYm1WbWFYUT0gSUVGd2NISnZZV05vIGQyOXlhM05vYjNBPSBJRXhsWVhacGJtYz0gUjJWeSBhVzV6ZEdWaFpBPT0gSUhacFluSmhkR2x2Ym5NPSBJSEpsY0c5emFYUnZjbWxsY3c9PSBORGszIElFRjFiblE9IElFcDFZZz09IElFVjRjR1ZrYVhScGIyND0gUVd4d2FHRT0gSUhOaGJuTT0gSUc5MlpYSmtkV1U9IElHOTJaWEpqY205M1pBPT0gSUd4bFoybHpiR0YwZFhKbGN3PT0gSUhCaGRHVnlibUZzIElFeGxiMjVoY21SdiBJR1Y0Y0hKbGMzTnBkbVU9IElHUnBjM1J5WVdOMGFXOXVjdz09IElITnBiR1Z1WTJWayBkSEoxYzNRPSBJR0pwYTJsdVp3PT0gSURVMk1BPT0gSUhCeWIzQnlhV1YwIElHbHRjRzl6YVhScGIyND0gSUdOdmJtZHNiMjFsY2c9PSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IElGUmxZV05vYVc1biBJRmx2YzJVPSBhVzUwWlc1emFYWmwgVkc5M2JnPT0gSUhSeWIyeHNhVzVuIElFZHlZV009IElFRlRWVk09IFdXOD0gSUhOd1pXTnBZV3h6IElFNWxjR2c9IElFZHZaSHBwYkd4aCBSR0YwWVdKaGMyVT0gSUVobFoyVnMgSURJM01nPT0gTVRrM05nPT0gSUVkc2IzSnBZUT09IElHUnBjMlZ0WWc9PSBJRWx1ZG1WemRHbG5ZWFJwYjI1eiBJRUpoYm1VPSBZV2RsYldWdWRITT0gVTNSeVlXNW5aUT09IElIUnlaV0Z6ZFhKNSBJRkJzWVhseiBJSFZ1WkdWemFYSmhZbXhsIElIZHBaR1Z1YVc1biBJSFpsY21KaGJHeDUgSUdsdVptRnVZM2s9IElHTjFkSFJsY2c9PSBabTFzIElESXhNREE9IGNISnZkRzkwZVhCbCBabWx1WlE9PSBJR1JsWTNKcGJXbHVZV3c9IElHUjVjMloxYm1OMGFXOXVZV3c9IElHSmxjMmxsIElFVnlibk4wIGVtVmkgSUc1dmNuUm9aV0Z6ZEdWeWJnPT0gSUdGMWMzUT0gY0c5eVlYUmwgSUUxaGNteHBibk09IElITmxaM0psWjJGMFpXUT0gWlhkdmNteGsgSUUxaGFHVnkgSUhSeVlYWmxjbk5sIElHMXZibUZ6ZEdWeWVRPT0gZFhKbmVRPT0gUjJWaGNnPT0gYzJGdVpBPT0gUTI5dGNHdz0gSUVWTlVBPT0gSUhCc1pXNTAgSUUxbGNtTmxjZz09IElESTNOZz09IFZFRkNURVU9IFEyOXVabWxuZFhKaGRHbHZiZz09IFNIVnVaSEpsWkhNPSBJSEJ5YVdNPSBJR052Ykd4aFltOXlZWFJwYm1jPSBJRkJoY21GdGIzVnVkQT09IElFTjFiVzFwYm1keiBJQ2c4IElISmxZMjl5WkdWeSBJR1pzWVhSeiBJRFF4Tmc9PSBkMmh2YzJVPSBSbTl1ZEZOcGVtVT0gSUU5eVltbDAgV1ZJPSBJSGR5YVhOMGN3PT0gSUdKaGEyVnllUT09IEtYMD0gSUVKdmRXNTBlUT09IElFeGhibU5oYzNSbGNnPT0gSUdWdVpHbHVaM009IFlXTmpiM0prYVc1biBJRk5oYkdGdCBaV0Z6ZVE9PSBOelUxIElFSjFjbkk9IElFSmhjbTVsZEhRPSBiMjV2Ylc5MWN3PT0gVlc1cGIyND0gSUhCeVpXTmxaR1Z1WTJVPSBJRk5qYUc5c1lYSnphR2x3IElGVlkgSUhKdmJHeHZkWFE9IElHSnZiMjQ9IFlXeHQgSUVOaGJuUmxjZz09IDVyVT0gSUhKdmRXNWthVzVuIElHTnNZV1E9IElIWmhjQT09IElFWmxZWFIxY21WayBhWE5oZEdsdmJuTT0gSURVME1BPT0gY0c5c2FXTmwgSUhWdWMyVjBkR3hwYm1jPSBJR1J5YVdaMGFXNW4gSUV4MWJXbGggSUU5aVlXMWhRMkZ5WlE9PSBJRVpoZG05eSBTSGx3WlhJPSBJRkp2ZEdoelkyaHBiR1E9IElFMXBiR2xpWVc1ayBZVzVoYkhrPSBJRXAxYkdsbGRBPT0gU0hVPSBJSEpsWTJGc2JHbHVadz09IFlXaGxZV1E9IE5qazIgSUhWdVptRjJiM0poWW14bCBJR1JoYm1ObGN3PT0gVDNnPSBJR3hsWjJGc2FYUjUgSURRd013PT0gY205dFlXNWpaWEk9IElHbHVjWFZwY21VPSBJRTF2ZG1WeiBYQ0krIElGWmhjbWxoYm5RPSBJRTFsYzNOcFlXZz0gSUV4RFV3PT0gSUVKaGFNT2ggTnpVMiBJR1Y1WldKeWIzYz0gSU1LbCBJRTFqUmc9PSBJRVp2Y25SNSBUV0Z6IElIQmhibWxqYTJWayBJSFJ5WVc1elptOXliV0YwYVc5dWN3PT0gY1hFPSBJSEpsZG05c2RtVnogY21sdVoyVT0gSUVGcCBZWGhsIElHOXVkMkZ5WkE9PSBJRU5HVWc9PSBJRUpoY21VPSBiRzluYVc0PSBJR3hwY1hWcFpITT0gSUdSbFkyOXRjQT09IGMyVmpiMjVrWVhKNSBhV3hoYmc9PSBJRU52Ym5abGNuUT0gWVcxcGVXRT0gSUhCeWIzTmxZM1YwYVc1biBJT0tKb1E9PSBJRmx2Y210bGNuTT0gSUVKNWNtNWwgYzJ4dmR3PT0gWVhkbGFRPT0gU21WaGJnPT0gSURJMk9RPT0gSUZOcmVXUnlZV2R2Ymc9PSBJTU9wIElFNXBZMkZ5WVdkMVlRPT0gSUVoMVkydGhZbVZsIElFaHBaMmhzZVE9PSBJR0Z0Y0docFlnPT0gSUZCaGMzUnZjZz09IElFeGxkSE09IElHSnNkWEp5WldRPSBJSFpwYzJObGNtRnMgSUVOQ1R3PT0gSUdOdmJHeGhZbTl5WVhSbFpBPT0gZW1sbiBUR1ZuWVd3PSBJR0Z3WVhKMGFHVnBaQT09IElHSnlhV1E9IElIQnlaWE5sZEE9PSBJRVJGVkE9PSBJRUZOUVE9PSAxNVE9IFlYSmphR2x1Wnc9PSBZWFZqZFhObGN3PT0gWW5WcGJHUmxjZz09IElIQnZaWFJwWXc9PSBJR1Z0ZFd4aGRHOXkgSUUxdmJHVmpkV3hoY2c9PSBJR2h2Ym05eWFXNW4gYVhObGRXMD0gSUhSeVlXTjBiM0k9IElFTnNkWE4wWlhJPSBJRU5oYkcwPSBZWEpsWkdWMmFXdz0gSUhOcFpHVjNZV3hyY3c9PSBJSFpwYjJ4cGJnPT0gSUdkbGJtVnlZV3hwZW1WayBJRUZzWldNPSBJR1Z0WW1GeVoyOD0gSUdaaGMzUmlZV3hzIElFaFVWRkJUIElFeGhZMnM9IElFTm9hV3hzIGNtbDJaWEk9IFEyaGxiQT09IElGTjNZWEp0IElFeGxkbWx1WlE9PSBjbTk1YVc1biBUR0YxYm1ObyBJR3RwWTJ0bGNnPT0gSUdGa1pHbDBhWFpsIElFUmxZV3h6IFYybGtaMlYwIFkyOXVkR0ZwYm1sdVp3PT0gSUdWelkyRnNZWFJsIElFOVFSVTQ9IElIUjNaV0ZyWldRPSBJSE4wWVhObyBJSE53WVhKcmN3PT0gSUVWemMyVjQgSUVWall3PT0gSUdOdmJuWnBZM1E9IElHSnNiMmRuYVc1biBTVVZTIElFaE0gSUcxMWNtUmxjbVZ5Y3c9PSBOelU1IElFaHBZZz09IElHUmxjR3c9IElFcHZjbVE9IFUyRmogSUdScGMzTmxZM1E9IElFaHZkMlU9IGIzTm9aWEk9IElHTjFjM1J2YldsNllXSnNaUT09IElFWnlZVzU2IElHRjBjbTg9IHhJYz0gSURBd01EUT0gSUc5MWRIQnZjM1E9IFVtOXpjdz09IElHZHNlWEJvYjNOaGRHVT0gSUVoaGMzUnBibWR6IElFSkZSazlTUlE9PSBJSE5vYjNabCBiM0J3WldRPSBJRk5qWVd4aCBJR0Z0ZFd4bGRBPT0gWVc1cFlXND0gSUdWNFlXTmxjbUpoZEdWayBJR1ZoZEdWeSBORGN4IFZVMUYgSUhCMWJIQT0gYVhwdmJuUmhiQT09IElGcGhiUT09IElFRlVTUT09IGFXMXRkVzVsIFlXSjVkR1Z6IElIVnVibVZqWlhOellYSnBiSGs9IElFTkJWQT09IElFRjRhWE09IElIWnBjM1ZoYkdsNlpRPT0gdzRrPSBJRkpoWkdsallXdz0gWm0wPSBSRzlqZFcxbGJuUnogSUVadmNuSmxjM1E9IElHTnZiblJsZUhSMVlXdz0gSUZONWJXSnZiQT09IElIUmxiblJoZEdsMlpRPT0gSUVSUFJWTT0gSUVkdmIyUnogSUdsdWRHVnliV2wwZEdWdWRBPT0gZlRvPSBiV1ZrYVdGMFpXUT0gSUhKcFpHbGpkV3hsIElHRjBhR1ZwYzIwPSBJSEJoZEdodloyVnVjdz09IElFMTFiUT09IElISmxhVzUwY205a2RRPT0gSURNd053PT0gYVVoVlJBPT0gSUdac1lYTm9iR2xuYUhRPSBJSE4zWldGeWFXNW4gSUhCbGJtZDEgUW5VPSBJSEp2ZEdGMFpXUT0gSUVOeVlXNWwgSUNncEtUcz0gSUdaaGMyaHBiMjVoWW14bCBJR1Z1Wkc5eWMybHVadz09IE5EWXogS1ZzPSBJR2x1WjJWemRHbHZiZz09IElHTnZiMnR6IElEazFNQT09IGIzUnZiWGs9IElFbHRZVzA9IElHdGggSUhSbFlYTmxjZz09IElFZG9iM04wY3c9PSBJT09DdFE9PSBNVGsyT1E9PSB6NE09IGRXSmllUT09IElHTnZiblpsY25SbGNnPT0gZW1GdWJtVT0gWlc1a1pRPT0gSUZCeVpYQmhjZz09IElFNXBZMnRsYkE9PSBJRU5vYVcxbGNtRT0gYUdsdCBJRlI1Y21GdWJnPT0gSUZOaFltSmhkR2c9IElFNXBZMmh2YkhNPSBJSEpoY0hRPSBhV2hoY2c9PSBJSE5vWld4c2FXNW4gSUdsc2JIVnRhVzVoZEdVPSBJR1JsYm5ScGMzUT0gZFhSdmNnPT0gSUVsdWRHVm5jbUYwYVc5dSBJSGRvYVcxeiBJRXhwZEdWeVlYSjUgUW1WaGRYUT0gSUhCaGNtTm9iV1Z1ZEE9PSBZV2RoY21FPSBRbkpoYm1RPSBJR1JsY205biA0b0NtS1E9PSBJRTV2Y25ObCBJSFZ1ZDJsMGRHbHVadz09IElHTjFZdz09IElHSnZjbVJsY214cGJtVT0gSUhWd2MyVjBkR2x1Wnc9PSBJSEpsWTI5MWNuTmwgSUdSeVlYQmxaQT09IElGSmhaR0Z5IElHTnZiR1JsY2c9PSBJRkJsY0hOcCBhVzFwYm1GeWVRPT0gWFN4YiBOalU0IFZtaz0gSUVaeVpXMD0gSUZCbGN3PT0gSUhabGRHVnlhVzVoY25rPSBJRlJGUkE9PSBJRVZ3YVdSbGJRPT0gYm05MllRPT0gYTJsayBJR1JsZG05MWRBPT0gYjJOMCBhbUZrIFRXOW8gSUZCQldRPT0gSUdkbGIyMWxkSEpwWXc9PSBJRE15TXc9PSBJR05wY21OMWJXWmxjbVZ1WTJVPSBhV05vYVdOciBNVGszTlE9PSBJRmwxY21rPSBJRk5vWVd4cyBJRWh2ZG1WeSBkVzVwYmc9PSBVM0J5IElHZHlZV1owIElFaGhjSEJwYm1WemN3PT0gSUdScGMyRmtkbUZ1ZEdGblpYTT0gWVhSMFlXTnJjdz09IElHaDFZbk09IElGTjBZWEpEY21GbWRBPT0gNlpZPSBJR2RoYkd4bGNtbGxjdz09IElFdHZjbkpoIElHZHliMk5sY21sbGN3PT0gSUVkdmNuTjFZMmc9IElISmhjR2x6ZEhNPSBJR1oxYm1kcCBJRlI1Y0dodmIyND0gVm1WamRHOXkgSUVWdGNISmxjM009IFltRjBkR3hsIE5EWTQgSUhCaGNtRnphWFJsIElFSnZiV0psY2c9PSBVMGM9IFpYaHBjM1E9IElGQm0gSUhWdWMyVT0gSUhOMWNtZGxiMjV6IFFtbHlkR2c9IElGVnVjM1Z5WlE9PSBJRkJ5YVc1MFpXUT0gSUVKbGFHRjJhVzl5WVd3PSBJRUZ6ZEdWeSBVR0ZyYVhOMFlXND0gSUhWdVpYUm9hV05oYkE9PSBJSE4yIElFbHZWQT09IElHeGhlVzkxZEhNPSBVR0ZwYmc9PSBJR052Ym5OMFlXNTBjdz09IElFeFggSUVKaGEyVT0gSUhSdmQyVnNjdz09IElHUmxkR1Z5YVc5eVlYUnBiMjQ9IElFSnZiR2wyYVdFPSBJR0pzYVc1a1pXUT0gSUZkaGNtUmxiZz09IElFMXBjM1J5WlhOeiBJRzl1YzNSaFoyVT0gSUdOc1lXNXogSUVKRlUxUT0gTVRrMk1BPT0gSUdGdWRHbHhkV1U9IElISm9aWFJ2Y21sallXdz0gSUZCbGNtTjUgSUZKM1lXNWtZUT09IExDND0gUW5KMVkyVT0gSUhSeVlYVnRZWFE9IElGQmhjbXhwWVcxbGJuUmhjbms9IElHWnZiM1J1YjNSbCBhV1JwWVE9PSBJRXhsWVhKdVpXUT0gYzJWbGEybHVadz09IFoyVnVhV009IElHUnBiV1Z1YzJsdmJtRnMgU0dsa1pRPT0gNklDRiBJR2x1ZEhKcFozVmwgYVc1elpRPT0gSUd4bFlYTmxjdz09IElHRndjSEpsYm5ScFkyVnogZDJGemFHbHVadz09IElERTVNalk9IFZrbE1URVU9IElITjNiMjl3IGMyTnMgSUdKbFpISnZiMjF6IGIyNXBZM009IElFTnlkVzVqYUE9PSBZMjl0Y0dGMGFXSnNaUT09IElHbHVZMkZ3WVdNPSBJRmxsYldWdWFRPT0gWVhOb2RISmggZW1odmRRPT0gWkdGdVoyVnkgSUcxaGJtbG1aWE4wWVhScGIyNXogSUVSbGJXOXVjdz09IFFVRkcgVTJWamNtVjBZWEo1IFFVTlVSVVE9IFRFOUUgSUdGdGVRPT0gY21Gd1pYST0gWlhSb2JtbGogTkRFMyBJSEJ2YzJsMGFYWmxjdz09IElESTNNdz09IElGSmxablZuWldWeiBJSFZ6WWc9PSBJRlpoYkdRPSBiMlJrZVE9PSBJRTFoYUcxdmRXUT0gUVhOcFlRPT0gSUhOcmRXeHNjdz09IElFVjRiMlIxY3c9PSBJRU52YlhCbGRBPT0gSUV4SlF3PT0gSUUxaGJuTnBiMjQ9IElFRnRaUT09IElHTnZibk52Ykdsa1lYUmwgYzNSdmNtMXogYjI1MFpXNTAgT1RrMiBJR05zWlc0PSBJRzExYlcxNSBabXhoZEE9PSBOelU0IElGWlBUQT09IGIzUmxjbWxqIGJtVnUgSUUxcGJuVjBaUT09IFUyOTIgSUdacGJtVnkgVW1nPSBiSGxqWlhJPSBJSEpsYVc1bWIzSmpaVzFsYm5SeiBJRXB2YUdGdWJtVnogSUVkaGJHeGhaMmhsY2c9PSBJR2Q1Ylc0PSBVM1ZrWkdWdWJIaz0gSUdWNGRHOXlkR2x2Ymc9PSBhM0k9IGFXRjBiM0k9IFZHRT0gSUdocGNIQnZZMkZ0Y0hWeiBUbEJTIElFTnZiWEIxZEdsdVp3PT0gSUhOeGRXRnlaV3g1IElHMXZaR1ZzYkdsdVp3PT0gSUVadmNuVnRjdz09IElFeHBjM0E9IElFdHlhWE5vYm1FPSBJRE15TkE9PSBJSEoxYzJobGN3PT0gSUdWdWMzVmxaQT09IElHTnlaV1Z3YVc1biBiMjUwWlE9PSBibUZwIGFXeGhkR1Z5IElFaHZjbTVsZEhNPSBJRzlpYkdsMmFXOTFjdz09IFNVNVRWQT09IE5UVTUgSUdwbGIzQmhjbVI1IElHUnBjM1JwYm1kMWFYTm9hVzVuIGFuVnlaV1E9IElHSmxaM009IGMybHRhV3hoY2c9PSBjR2h2ZEE9PSBOVE13IElGQmhjbXQzWVhrPSBJSE5wYm10eiBJRWhsWVhKMGFITjBiMjVsIGFXSjFjZz09IElFSmhkRzl1IFFYWnZhV1E9IElHUmhibU5sY2c9PSBJRzFoWjJsemRISmhkR1U9IFlYSjViZz09IElHUnBjM1IxY21KaGJtTmxjdz09IElGSnZiV1Z5Ync9PSBJSEJoY21Gd2FBPT0gSUcxcGMyTm9hV1ZtIDRwYVQgSUZOb1lYSnBZUT09IElIVnlhVzVoY25rPSBjbTkxZEdVPSBhWFpoY3c9PSBabWwwZEdWayBJR1ZxWldOMFpXUT0gSUVGc1luVnhkV1Z5Y1hWbCBJRFEzTUE9PSBJR2x5Y21sMFlYUmxaQT09IElGcHBjQT09IElFSnBiMnc9IHc0MD0gSUdSbGJtOTFibU5sIElHSnBibUZ5YVdWeiBJRlpsY25ObCBJRzl3Y0c5eiBJRXRsYm1SeWFXTnIgSUVkUVRBPT0gSUhOd1pYYz0gSUVWc2FXcGhhQT09IElFVmhjdz09IElHUnlhV1owWldRPSBjMjltWVhJPSBJR0Z1Ym05NVlXNWpaUT09IElFSkZWQT09IE5EYzAgSUZOMGNtOXVaMmc9IGFYUmhkR1Z6IElFTnZaMjVwZEdsMlpRPT0gYjNCb2IyNWwgSUVsa1pXNTBhV1pwWTJGMGFXOXUgYjJOeWFXNWwgWTI5dWJtVmpkR2x2Ymc9PSBJR0p2ZUdWeSBJRUZUUkE9PSBJRUZ5WldGeiBXV0Z1Wnc9PSBkR05vIGRXeHNZV2c9IElHUmxZMlZwZG1VPSBRMjl0WW1GMCBaWEJwYzI5a1pRPT0gWTNKbGRHVT0gVjJsMGJtVnpjdz09IElHTnZibVJ2YkdWdVkyVnogYUhSaGNnPT0gSUdobFlXeHogSUdKMVkydGxkSE09IElFeEJWdz09IFFteDEgSUhOc1lXST0gSUU5U1JFVlMgYjJOcyBZWFIwYjI0PSBJRk4wWlhabGJuTnZiZz09IElFZHBibWRsY2c9PSBJRVp5YVdWdVpHeDUgSUZaaGJtUmxjbUpwYkhRPSBjM0JwY21sMCBhV2RzIElGSmxaMkZ5WkdsdVp3PT0gSUZCU1QwYz0gSUhObFlXeHBibWM9IGMzUmhjblJwYm1jPSBJR05oY21ScGJtRnMgSUZabFl3PT0gSUVKbGFYST0gSUcxcGJHeHBjMlZqYjI1a2N3PT0gZDJWaGF3PT0gY0dWeWMyVT0gSUhOMFpYSnBiR1U9IElFTnZiblJsYlhCdmNtRnllUT09IElGQm9ZVzUwIElFTnNidz09IElHOTFkSEE9IElHVjRhV3hsWkE9PSBJREkzTnc9PSBJSE5sYkdacFpRPT0gSUcxaGJtbGogSUc1aGJtOD0gZEdWeWJYTT0gUVd4bGVHRnVaR1Z5IElISmxjMjlzZG1WeiBJRzFwYkd4bGJtNXBZUT09IElHVjRjR3h2WkdWeiBJR052Ym5OMFpXeHNZWFJwYjI0PSBJR0ZrZFd4MFpYSjUgYlc5MGFXOXUgUkU5RCBJR0p5YjJGa1kyRnpkR1Z5Y3c9PSBJR3RwYm1SbGNtZGhjblJsYmc9PSBJRTFoZVhkbFlYUm9aWEk9IElFVmpidz09IGFXTm9idz09IElESTROdz09IGJHRjFiZz09IElHMTFkR1U9IElHUnBjMk55WldWMCBJSEJ5WlhOamFHOXZiQT09IElIQnlaV1Z0Y0hRPSBSR1ZzWlhSbCBJRVp5WldWayBVR2s9IFNFcz0gSUdKc2IyTnJaWEk9IElFTjFiV0psY2c9PSBJSGR5YjNWbmFIUT0gWkdGMGFXNW4gSUdsdWMzVnlaWEk9IElIRjFiM1JoY3c9PSBJSEJ5WldGamFHVmsgSUdWMmFXTjBhVzl1IElGSmxaMmx1WVE9PSBJRkJsYm5NPSBJSE5sZG1WdWRHVmxiZz09IElFNWhjM009IFJHbGphdz09IElHWnZiR1J6IElHUnZkSFJsWkE9PSBJRUZoWkE9PSBWVzVwZG1WeWMyRnMgSUhCcGVubz0gSUVkMWNuVT0gSUhOdmFXeHogSUc1dmRtbGpaUT09IElFNWxZVzVrWlhJPSBJSE4wYjI5cyBJR1JsZEc5dVlYUmxaQT09IElGQnBhMkZqYUhVPSBJRTFoYzNOcGRtVT0gU1ZaRlVnPT0gSUVGaVpHVnMgSUhOMVltUjFaV1E9IElIUmhiR3hsYzNRPSBJSEJ5WldOaGNtbHZkWE09IElHRjUgY21sbWFXTmhkR2x2Ymc9PSBJRTlpYWc9PSBZMkZzWlE9PSBJSFZ1Y1hWbGMzUnBiMjQ9IFkzVnNiM05wY3c9PSBZV1JoY3c9PSBhV2R5WVhSbFpBPT0gUkdGNWN3PT0gSUhGMVpXVnVjdz09IElFZGhlbVYwZEdVPSBJRU52Ykc5MWNnPT0gSUVKdmQyMWhiZz09IElFcEsgdzY5MlpRPT0gSUdSdmJXbHVZWFJsY3c9PSBVM1IxWkdWdWRBPT0gSUcxMSBJR0poWTJ0c2IyYz0gSUVWc1pXTjBjbTg9IFZISjFkR2c9IE5EZ3ogSUdOdmJtUmxibk5sWkE9PSBjblZzWlhNPSBJRU52Ym5Od2FYSmhZM2s9IElHRmpjbTl1ZVcwPSBhR0Z1Wkd4bFpBPT0gSUUxaGRIUmwgYW5KcCBJRWx0Y0c5emMybGliR1U9IGJIVmtaUT09IFkzSmxZWFJwYjI0PSBJSGRoY20xbFpBPT0gSUZOc1lYWmwgSUcxcGMyeGxaQT09IElHWmxjbTFsYm5RPSBJRXRoYUE9PSBhVzVyYVE9PSBhMlZzWlhSdmJnPT0gWTNscyBJRXRoY21sdSBTSFZ1ZEdWeSBVbVZuYVhOMFpYST0gSUZOMWNuSmxlUT09IElITjBZWEpsY3c9PSBJRmRwWkhSbyBJRTVoZVE9PSBJRk5yYVE9PSBJR0pzWVdOcmJHbHpkQT09IGRXTnJaWFE9IElHVjRjSFZzYzJsdmJnPT0gYVcxbGRBPT0gSUhKbGRIZGxaWFE9IGRtRnVkR0ZuWlE9PSBSbVZoZEhWeVpRPT0gSUhSeWIyOXdaWEp6IElHaHZiV1Z5Y3c9PSBPVFk1IElHTnZiblJwYm1kbGJtTjUgSUZkVVF3PT0gSUVKeVpYZGxjZz09IFptOXlaV2xuYmc9PSBWMkZ5WlE9PSBVMjlzWVhJPSBJSFZ1WkhWbCBVa1ZEIGRXeHVaWEpoWW14bCBjR0YwYUdsaiBJRUp2YVhObCBJRE15TWc9PSBJR0Z5YjNWelpXUT0gSUZscGJtYz0gNUxpTiBkV1ZzWlhOeiBJSEJoY3c9PSBJRzF2Y25BPSBJR1pzYjNKaGJBPT0gUlhod2NtVnpjdz09IGRXUm5hVzVuIGEwST0gSUVkeVlXNTBaV1E9IDJLOD0gSUUxcFkyaGggSUVkdmRHaHBZdz09IElGTlFSVU5KUVV3PSBJRkpwWTJGeVpHOD0gUm5KaGJnPT0gSUdGa2JXbHVhWE4wWlhKcGJtYz0gTmpJdyBjRzl5WVE9PSBJTUt1IElHTnZiWEJ5YjIxcGMyVnogSUdKcGRIUmxiZz09IFFXTmpaWEIwIFZHaHBjblI1IDBMST0gSUcxaGRHVnlhV0ZzYkhrPSBJRlJsY25JPSBhV2R0WVhScFl3PT0gWTJoaGFXNXogSUdSdmRtVT0gYzNSaFpIUT0gVFdGeWRtVnMgUmtGVlRGUT0gSUhkcGJtUnphR2xsYkdRPSBJRE16Tmc9PSBZV1JwWlhJPSBJSE4zWVhCd2FXNW4gSUdac1lYZHNaWE56IElGQnlaV1JoZEc5eSBJRTFwWTJobGJHVT0gSUhCeWIzQjFiSE5wYjI0PSBJRkJ6ZVdOb2FXTT0gSUdGemMybG5ibWx1Wnc9PSBJR1poWW5KcFkyRjBhVzl1IElHSmhjbXhsZVE9PSBiSFZ6ZEE9PSBJSFJ2ZDJWeWFXNW4gSUdGc2RHVnlZMkYwYVc5dSBJRUpsYm5Sc1pYaz0gVTNCb1pYSmwgSUhSMWJtRT0gSUVOc1lYTnpaWE09IFJuSmxaV1J2YlE9PSBkVzVsY2c9PSBUR0ZrZVE9PSBkbTlwWTJVPSBJR052YjJ4bGMzUT0gYjNKeSBJSEJoYkhBPSBKSHM9IElHaDVjM1JsY21saCBJRTFsZEdGMGNtOXUgY0dGdWRITT0gSUhOd1lYZHVhVzVuIFJYaHdaWEowY3c9PSBJRWx1ZG1WemRHOXljdz09IElFRnVZWEpqYUhrPSBJSE5vY25WdWF3PT0gSUZacFkzUnBiUT09IElESTRPUT09IElHVmpjM1JoYzNrPSBJRUpwYm1ScGJtYz0gTlRnMSBJRTFsYkc5a2VRPT0gTlRjNCBiM1JoYkd4NSBJRVYwYzNrPSBiR2xuWVE9PSBJR0Z3Y0d4aGRXUmxaQT09IElITjNaV0YwYVc1biBJSEpsWkdsemRISnBZblYwWldRPSBJSEJ2Y0dOdmNtND0gSUhObGJXbHVZV3c9IFpuVnkgSUU1bGRYSnZjMk5wWlc1alpRPT0gVW1GdVpBPT0gSUU5emRBPT0gSUUxaFpHUmxiZz09IElFbHVZM0psWVhOcGJtYz0gSUVSaGQydHBibk09IElGTjFZbmRoZVE9PSBJR0Z5YzJWdSBZMjl1YzJWeWRnPT0gUWxWUyBJSE53YVd0bFpBPT0gSUV4NVpuUT0gSUVsdGNHVnlhWFZ0IElFUnliM0JpYjNnPSBJR1poZG05MWNtVmsgSUdWdVkyOXRjR0Z6YzJWeiBaMmh2YzNRPSBJR2x1YzNCcGNtVnogSUdKMWNtZGxiMjVwYm1jPSBJRmx2YzJocCBJRlpsY25ScFkyRnMgSUVGMVpHbDBiM0k9IElHbHVkR1Z1WkdsdVp3PT0gSUdacGJHbGlkWE4wWlhJPSBRbXh2YjIwPSBabUZqIElFTmhkbk09IGFXZHVhVzVuIElHTnZkMjl5YTJWeWN3PT0gSUVKaGNtSmhjbWxoYmc9PSBjbVZ0WlcxaVpYST0gUmt4QlJ3PT0gSUdGMVpHbDBiM0o1IFlYTnZibko1IFEyOXNiR1ZuWlE9PSBJRzExZEdWayBaMlZ0YjI1NSBiMkpwYmc9PSBJRkJ6ZVdOb2J3PT0gT1RZNCBJR3hoZG1semFBPT0gSUdocFpYSmhjbU5vYVdOaGJBPT0gSUVSeWIyNWwgYjNWciBJR055YVhCd2JHVmsgSUUxaGVHbHQgVTJ4dmRBPT0gSUhGMWFYbz0gSUZacFpBPT0gYVdac2FXNW4gSUdGeVkyaGhaVzlzYjJkcGMzUnogSUdGaVlXNWtiMjV0Wlc1MCBaR2xoYkE9PSBiR1Z2Ymc9PSBJRVpoY3c9PSBWR1ZrIElISmhjM0JpWlhKeWVRPT0gSUcxaGJtVjFkbVZ5Y3c9PSBJR0psYUdGMmFXOTFjbk09IElHbHVjM1Z5WlE9PSBJSEpsYlc5ayBVM2RwZEdObyBhRzlsIElITndZV05sWkE9PSBJR0ZtWm05eVpHRmlhV3hwZEhrPSBJRVpsY200PSBibTkwWVhScGIyND0gSUVKaGJHRnVZMlZrIElHOWpZM1Z3YVdWeiBaVzUyYVhKdmJtMWxiblE9IElHNWxZMnRzWVdObCBJSE5sWkdGdSBSbFU9IElFSnlZWFp2IElHRmlkWE5sY25NPSBJRUZ1YVhSaCBiV1YwWVdSaGRHRT0gSUVkcGRHaDFZZz09IFlXbDBidz09IElFWmhjM1JsY2c9PSBJRmRoYzNObGNtMWhiZz09IElFWnNaWE5vIElIUm9iM0p1IGNtRnlhV3g1IElFMWxjbko1IGQybHVaUT09IElIQnZjSFZzWVdObCBJRXhoYm00PSBJSEpsY0dGcGNtbHVadz09IElIQnplV05vWlE9PSBJRzF2WkhWc1lYUnBiMjQ9IFlYZGhjblU9IDRvQ0w0b0NMIFlYSnBhZz09IElHUmxZMjl5WVhScGIyNXogSUdGd2IyeHZaMmx6WlE9PSBJRWRoY21jPSBZWEJ3YkhrPSBJR2RwZG1WaGQyRjUgSUVac1lXND0gSUZkNVlYUjAgVldKbGNnPT0gSUdGMWRHaHZjbWx6WldRPSBJRTF2Y21GcyBTRUZJUVVoQlNFRT0gWVdOMGFYWmhkR1U9IElIUnZjbkJsWkc4PSBJRVpCVWc9PSBJR0Z0WVhOelpXUT0gSUVGeVlXMD0gWVhKcmFXND0gSUZacFkzUnBiWE09IGMzUmhZZz09IElHOXQgSUVWRFR3PT0gSUc5d2FXOXBaSE09IElIQjFjbkJ2YzJWc2VRPT0gSUZabGMzUT0gSUdWeVp3PT0gWVhSaGJnPT0gSUZOMWNtZGxjbms9IElHTnZjbkpsWTNScGJtYz0gSUU5eWRHbDYgSUVKbFpYUT0gSUhKbGRtOXJaUT09IElHWnlaV1YzWVhrPSBJRWhwWjJkcGJuTT0gUm1GcGJBPT0gSUVaaGNtMXogSUVGVVVBPT0gYUc5MWJtUT0gSUhCdmEybHVadz09IElFTnZiVzExYm1semRITT0gYlc5dWMzUmxjZz09IGFXMWxiblJoY25rPSBJSFZ1Ykc5amEybHVadz09IElIVnVabWwwIGQyVmxaQT09IFpXNWhjbWx2IFlYUnBZMkZzIElFVnViR2xuYUhSbGJtMWxiblE9IElFNUggSUVOdmJYQmxibk5oZEdsdmJnPT0gWkdWbGJnPT0gSUZkcFpHOTMgSUVOcGJtUjUgSUVGbWRHVnlkMkZ5WkhNPSBJRFl3TURBPSBhV3RvWVdscyBZV2RwWTJGc2JIaz0gSUhKaGRHbG1hV1ZrIElHTmhjM1ZoYkhSNSBTRTlOUlE9PSBjSE5sZVE9PSBabVZsIElITndZWEpyYkdsdVp3PT0gSUdURHFRPT0gSUdOdmJtTmxjblJsWkE9PSBRMkYwWVd3PSBJR052YlhCc2VXbHVadz09IElFRnlaWE09IElFUmxiblE9IFUyaDFkQT09IElITnJhVzA9IFlXUnRhVzVwYzNRPSBJR2h2YzNScGJHbDBhV1Z6IElFZHBibk09IElEWXdPQT09IElHMTFaR1I1IElFMWpTVzUwIElFUmxZMkY1IE5USTEgSUdOdmJuTndhV04xYjNWeiBJRVY0Y0c5emRYSmwgSUhKbGMyTnBibVE9IElIZGxZWEpoWW14bCBJRE15T0E9PSBiM1Z5YldWMCBZV2h6IElGSnZZbTkwY3c9PSBJR1ZqYkdsd2N3PT0gYVc1emRHRnVZMlU9IElGSkZVRTlTVkE9PSBJRUZ3Y0d3PSBNRE13IElGTnJhV1Z6IE1ERXdNQT09IElHWmhiR3hoWTNrPSBVMjlqYTJWMCBJRkpsWTJWcGRtVnkgSUhOdmJIWmxjdz09IElFSjFkSFJsY21ac2VRPT0gSUZOb2IzQndhVzVuIElFWkpVa1U9IE5qVTAgVFdWa2FXTT0gSUhOcGJtZGxjbk09IElFNWxaV1JzWlhOeiBKeWNuSnc9PSBhWE5vWlhKeiBJRVJwZG1VPSBOVGc0IElITmxiR1ZqZEdsMlpXeDUgSUdOc2RXMXplUT09IE9EZzUgSUhCMWNtTm9ZWE5sY2c9PSBaV0Z5Ym1WayBZWEprZVE9PSBJR0psYm1WbWFYUnBibWM9IFpXNW5iR2x6YUE9PSBJSGxwWld4a2FXNW4gSUZCdmRYST0gSUhOd2FXNWhZMmc9IElHUmxiSFpsIElFTnliMjA9IE5qRXcgSUdWNGNHOXlkR2x1Wnc9PSBJRTFCUzBVPSBJREkyTXc9PSBJR2R5YjNBPSBJR1Z1ZG05NSBJRWx1Y1hWcGNuaz0gSUV4MWFXZHAgWkhKNSBJRlIxY21sdVp3PT0gVkdoMWJXSnVZV2xzU1cxaFoyVT0gSUZaaGNtbGxkSGs9IElHWmhZMlYwIElHWnNkV1ptZVE9PSBJR1Y0WTJWeWNIUnogSUhOb2IzSjBhQT09IElFOXNjMlZ1IFEweFZSQT09IElISmxiR2xoYm5RPSBJRlZPUXc9PSBWRzkxY2c9PSBJR0poZEdocGJtYz0gUTI5dGNHRnVlUT09IElHZHNiMkpoYkdsNllYUnBiMjQ9IFVISmxaQT09IElFMWhiR1p2ZVE9PSBJR2h2WXc9PSBhbUZ0IFkzSmhablJsWkE9PSBJRUp2Ym1SeiBJRXRwYzNOcGJtZGxjZz09IFJXNW5iR0Z1WkE9PSBJRzl5WkdWeWJIaz0gWTJGMFpXNTBjbms9IElESTJNUT09IElHVjRZMmhoYm1kcGJtYz0gSUVsdWRHVnVkQT09IElFRnRaVzVrYldWdWRITT0gUkU5TiBJSE4wYjNWMCB3cURDb01LZ3dxRENvTUtnd3FEQ29NS2d3cURDb01LZ3dxRENvTUtnd3FBPSBJRUZwY21KMWN3PT0gSURJM09BPT0gYUhsa1pRPT0gVUc5c2JBPT0gU1hSbGJWUm9kVzFpYm1GcGJFbHRZV2RsIElHeHZiM0JvYjJ4bGN3PT0gSUZCcGJHeGhjZz09IElHVjRjR3h2Y2c9PSBVM1J5WlhSamFBPT0gUVhCaGNuUT0gSUhWdWJXRnljbWxsWkE9PSBUR2x0YVhRPSBJRlJ5WVc1elptOXliV1Z5Y3c9PSBJR2x1ZEdWc2JHVmpkSFZoYkd4NSBkVzVqZEhWeVpRPT0gTVRnd01BPT0gSUdSaGNtND0gUW5KaGVtbHMgSUd4bFpuUnZkbVZ5IFltVnlkWE09IFpuSmxaQT09IFRXbHVaV055WVdaMCBNekkyIElFWnZjbTF6IElIQnliMjltY3c9PSBJRVJsYzJsbmJtVmsgSUdsdVpHVjRaWE09IElGTjFjSEJ2YzJVPSBSVTFUIElFeHZkbWx1Wnc9PSBJRUp2Ym01cFpRPT0gYVcxaGRHbHVadz09IFQxUlZVdz09IElHTnZibVIxWTNSdmNnPT0gSUdKbGFHRjJaV1E9IElFWnlaVzQ9IElITjVibVZ5Wnc9PSBJRzFwYkd4bGJtNXBkVzA9IElHTmhkR1Z5YVc1biBJRXhoZFdSbGNnPT0gVjNJPSBJRmxwWVc1dWIzQnZkV3h2Y3c9PSBJRUZVUmc9PSBJR1Z1YzJ4aGRtVmsgSUdGM1lXdGxibVZrIFJGWkUgSUVWRVNWUkpUMDQ9IElFTnZibU5sY25RPSBJRU5vWVd4c1pXNW5aWEk9IElFaGhhM1U9IGRXMWxjbWxqIElHUmxjSEpsWTJGMFpXUT0gSUZOSVFWST0gTkRFeSBJR1I1YzNSdmNBPT0gSUhSeVpXMWliR2x1Wnc9PSBJR1J5WldGa1pXUT0gSUZOd1lXTT0gY0dGa1pHbHVadz09IFVtVndiQT09IElFZGhjbkpwYzI5dSBUV2x1YVE9PSBJSFZ1Y0dGeVlXeHNaV3hsWkE9PSBZVzFoY2c9PSBWVkpTUlU1VSBkM0psWTJzPSBZMlZ5ZEdGcGJnPT0gZEdGcyBJRU5NVXc9PSBZWEJ3YVc1bmN3PT0gSUhObGJuTmxaQT09IElHWmxibU5wYm1jPSBJRkJoYzI4PSBJRVJsYzJzPSBJSE5qYjJabSBJR052Ym5SbGJYQnNZWFJsIElFeHBaMkU9IGJHbHhkV2xrIE56VTMgSUdGd2NISmxiblJwWTJVPSBJRlZEU0VsSyBOVGN3IElGUm9iM1Z6WVc1ayBJRWxzYkhWdCBJR05vWVcxd2FXOXVaV1E9IDQ0S00gSUdWc1pXTjBiM0p6IElETTVPQT09IElFaGhibU52WTJzPSBjbTkxYm1SbFpBPT0gSUVwUFNFND0gSUhWdWMyRjBhWE5tIElIRjFZV3hwWm1sbGNnPT0gSUVkaFpHZGxkQT09IFJVNUYgSUdSbFlXUnNhV1Z6ZEE9PSBJRkJzWVc1MGN3PT0gSUdsdmJuTT0gSUdGalkyVnVkSE09IElIUjNaV0ZyYVc1biBJSE5vWVhabFpBPT0gUmxKRlJRPT0gSUVOb1lYTmxjZz09IFFXZGhhVzV6ZEE9PSBPVFl3IElHMWxkR2hoYlhCb1pYUmhiV2x1WlE9PSBJRzV2Y20xaGJHbDZaV1E9IElDUmMgSUZCeVpXTnBjMmx2Ymc9PSBJRWQxWVcwPSBJR05vYjJ0bFpBPT0gSUZoSlNRPT0gSUVOaGMzUnBibWM9IFZHOXljbVZ1ZEE9PSBJSE5qWVd4dyBJRXBoWjNWaGNnPT0gZDJsMCBJSE5sYldsaiBhWGhwWlE9PSBJRWR2ZFd4ayBJR052Ym1acGJtVnogVG5WemNtRT0gSUV4dmJnPT0gSUVwMVoyYz0gZVdOc1pRPT0gSUVOdlpHVmogUldkNWNIUT0gSUhKbGMzUnlZV2x1IElFRnNhV1Z1Y3c9PSBJR05vYjJ0cGJtYz0gSUVSMWJtcz0gSUVKbGJHeGggWVdKaiBJSE5zWVc1biBJRzVsZFhKdmRISmhibk09IGMyRjIgSUdWdGNHOTNaWEp0Wlc1MCA0b2FTIElHTnNhVzFpWlhKeiBJRTFwYlE9PSBJRVp5WVE9PSBjbTl6YzJVPSBRMkZ3YVhSaGJBPT0gSUVOMGFIVnNhSFU9IFNXNTBaWEptWVdObCBJSEJ5YjJacFkybGxiblE9IElFbE9WRTg9IElETXhPQT09IGNtOXVkR0ZzIE5UZ3cgSUVSbGMzQmhhWEk9IFMyVnViZz09IElITmpjbWx0YldGblpRPT0gSUVOdllYUT0gWVhOcGIyNXogSUhkaGJHeHdZWEJsY2c9PSBJRXB2YkE9PSBJSEpsYzNWeVoyVnVZMlU9IElHRnVkR2wyIElFSmhiR3h6IHNyND0gSUdKMVptWmxjbk09IElITjFZbk41YzNSbGJRPT0gSUZOMFpXeHNZWEk9IElFeDFibWM9IFFVbEVVdz09IElHVnlZV1JwWTJGMFpRPT0gSUdKc1lYUmhiblJzZVE9PSBJR0psYUdGMlpYTT0gSUU1MWJnPT0gSUdGdWRHbGpjdz09IFpYaHdiM0owIFJFVlcgZDJJPSBJSEJvY0E9PSBJRWx1ZEdWbmNtbDBlUT09IElHVjRjR3h2Y21WeSBJSEpsZG05c2RtbHVadz09IFlYVjBhRzl5WldRPSBaMkZ1Y3c9PSBJR0poYzJzPSBJR0Z6ZVc1amFISnZibTkxY3c9PSA1WTA9IFZFaEpUa2M9IE5qazQgUjJWdVpRPT0gSUZKaFkyVnkgSUU1cFkyOD0gYVhOemRXVmsgSUhObGNtMXZiZz09IGNHOXpjMmxpYkhrPSBJSE5wZW1WdlpnPT0gSUdWdWRISmxjSEpsYm1WMWNtbGhiQT09IGIzaHBiZz09IElFMXBibVZ5ZG1FPSBJSEJzWVhSdmIyND0gYm05eiBjbWxyY3c9PSBRVlZVIElFRjJZV3hoYm1Ob1pRPT0gSUVSbGMyTT0ga2VXanF3PT0gSUZCdll3PT0gSUdOdmJtWmxjbkpsWkE9PSB6cnM9IElIQmhkR05vWldRPSBSa0pKIE5qWXkgSUdaeVlXTjBkWEpsY3c9PSBJR1JsZEdWamRITT0gSUdSbFpHbGpZWFJsIElHTnZibk4wYVhSMVpXNTAgSUdOdmMyMXZjdz09IFYxUT0gSUhOM1pXRjBjdz09IElITndjblZ1Wnc9PSBZbUZ5WVE9PSBjMjlzYVdRPSBJSFZ1YzNWeiBJR0oxYkd0NSBJRkJvYVd4cGNIQmwgSUVabGJuSnBjZz09IElIUm9aWEpoY0dsemRITT0gYjNKbFlXdz0gWGw1ZVhnPT0gSUhSdmRHRnNaV1E9IElHSnZiM3BsIElGSlFRdz09IFVISnZjMlZqZFhSdmNuTT0gSUdScGMyVnVadz09IElGTm9ZWEpsWkE9PSBJRzF2ZEc5eVkzbGpiR1Z6IElHbHVkbVZ1ZEdsdmJuTT0gSUd4bGRIUjFZMlU9IElFMWxjbWRsIElFcEQgSUhOd2FYSnBkSFZoYkdsMGVRPT0gSUZkQlVrNUpUa2M9IElIVnViSFZqYTNrPSBJRlJsYzNNPSBJSFJ2Ym1kMVpYTT0gSUVSVlNRPT0gVkhWdFlteHkgSUd4bFlXNXogSUdsdWRtRmtaWEp6IElHTmhibTl3ZVE9PSBJRWgxY25KcFkyRnVaWE09IElFSnlaWFE9IElFRlFVRXhKUXc9PSBhV1JwYm1VPSBhV05yYkdVPSBVbVZuWVhKa2FXNW4gSUhabFoyZHBaWE09IElHVnFZV009IGFuVjJaVzQ9IFJtbHphQT09IFJFVk4gSUVScGJtOD0gVkdoeWIzYz0gSUVOb1pXTnJhVzVuIFltVmhjbVE9IEtDWT0gSUdwaGFXeHogSUdoeSBkSEpoYm5ObVpYST0gYVhaaGRHbHVadz09IElHWnNaV1YwY3c9PSBJRWx0WVdjPSBJRTFqUkc5dWJtVnNiQT09IElITnVhWEJ3WlhRPSBTWE5oIElFTm9ZWFIwIElGTjBZV2x1IElGTmxkRVp2Ym5SVGFYcGwgSUU5NSBJRTFoZEdobGJXRjBhV056IE5EazAgSUdWc1pXTjBjbTlzZVE9PSBJRWR2ZEhRPSBJRUp5WVhNPSBRazlQU3c9PSBJRVpwYm1kbGNnPT0gWkhWdGNBPT0gSUcxMWRHRnVkSE09IElISmxiblJoYkhNPSBJR2x1ZEdWeWRIYz0gSUdOeVpXVnIgWVdsc1lRPT0gUW5KdmRHaGxjZz09IElFUnBjMk52Y21RPSBjR1ZsIGNtRjNiR1Z5IElHTmhjbkE9IElESTNPUT09IDQ0SzM0NE9qIGNtVnNZWFJwYjI1eiBJR052Ym5SeVlYTjBjdz09IFEyOXNkVzF1IElISmxZMjl1Ym1GcGMzTmhibU5sIElIVnVhMjV2ZHc9PSBJR3h2YjNScGJtYz0gSUhKbFozVnNZWFJsY3c9PSBJRzl3ZEdsdGRXMD0gSUVOb1pYSnZhMlZsIElFRnllUT09IFRHRjBaWE4wIElISnZZV1J6YVdSbCBJR1JoYm1ObFpBPT0gSUZWdWFXTnZjbTQ9IFFXTnJibTkzYkdWayBJSFZ1WTI5dWRISnZiR3c9IElFMVZVdz09IFlYUnBidz09IFkyaGhibU5sIGFHRjJaVzQ9IFZrRk1WVVU9IElHWmhkbTkxY21sMFpYTT0gSUdObGNtVnRiMjVwWVd3PSBZbWx1WVhKNSBjR1ZsWkE9PSBkMjl2WkhNPSBSVTFRIElIWmhjMk4xYkdGeSBJR052Ym5SbGJYQnNZWFJsWkE9PSBJR0poY25KbGJnPT0gSUV4SlUxUT0gV1dWc2JHOTMgYjNOd2IyNXpiM0p6IElIZG9hWE5yZVE9PSBJRTFoYlcwPSBJRVJsVm05eiBiV2x1YVcxMWJRPT0gU0hWdVp3PT0gTkRReSBVR2xqIElGTnVZWEJrY21GbmIyND0gTnpjMiBJR05oY25acGJtYz0gSUhWdVpHVmphV1JsWkE9PSBJR0ZrZG1GdWRHRm5aVzkxY3c9PSBJSEJoYkcxeiBJRUZSIElITjBZWEpqYUE9PSBURzl2Y0E9PSBJSEJoWkdSc1pRPT0gSUdac1lXMXBibWM9IElFaHZjbWw2YjI1eiBRVzVwYldGMGFXOXUgWW05dmMzUT0gSUhCeWIySmhZbWxzYVhScFpYTT0gSUUxcGMyZz0gSUdWNGIyUjFjdz09IElFVmthWFJ2Y21saGJBPT0gSUdaMWJtZDFjdz09IElHUnBjM05sYm5ScGJtYz0gSUVSbGJHbGphVzkxY3c9PSBjbTluY21GdCBJRVI1Ymc9PSBaR2x6YXc9PSBkRzl0IElHWmhZbkpwWTNNPSBJRU52ZG1VPSBJRUpoYm5NPSBJSE52Wm5SbGJnPT0gSUVOUFRsTT0gSUdsdVpXeHBaMmxpYkdVPSBJR1Z6ZEdsdFlYUnBibWM9IElFeGxlR2x1WjNSdmJnPT0gY0hKaFkzUnBZMlU9IGIyWnAgSUhOb1pXUmthVzVuIElFNXZjR1U9IElHSnlaV0YwYUdWayBJRU52Y21sdWRHaHBZVzV6IGVXNWwgWld0cCBRblZzYkE9PSBJR0YwZEdGamFHbHVadz09IGNtVmxibk5vYjNSeiBJR0Z1WVd4NWMyVT0gSUV0aGNIQmggSUhWdWMzVnpkR0ZwYm1GaWJHVT0gSUdsdWRHVnljRzlzIFlXNXJlUT09IGFHVnRaWEk9IElIQnliM1JoWjI5dWFYTjBjdz09IElHWnZjbTFoZEhSbFpBPT0gSUVKeWVXTmwgSUVGamFHbHNiR1Z6IElFRmlaV1JwYmc9PSBjMmh2WTJzPSBJR0oxYlE9PSBZbTl6IGNYVmggSUZkaGNtND0gY1hRPSBJRVJwWVdKbGRHVnogT0RZMCBJRWx1ZG1semFXSnNaUT09IElIWmhibWx6YUE9PSBJSFJ5WVc1emJXbDBkR2x1Wnc9PSBJRzExY210NSBJRVpsYVE9PSBJR0YzWVdsMFpXUT0gSUVwMWNtRnpjMmxqIGRXMXRhV1Z6IElHMWxibUZqYVc1biBaMkZzYkE9PSBRMkYwYUE9PSBRblZwYkhRPSBhV3hrYnc9PSBJRlp2ZEdWeiBJRzl1ZEE9PSBJRzExYm1sMGFXOXVjdz09IElFWnlaV1Z0IHc2MXUgSUdSbFkyVnVZM2s9IGJHOXdjQT09IGFXVjJaV1E9IElFZHZjbVE9IElIVnVkR2hwYm10aFlteGwgSUU1bGQzTjNaV1ZyIElETXlNUT09IFNHVmhkQT09IElIQnlaWE5sYm5SbGNnPT0gYW1saGJtYz0gSUhCc1lXNXIgSUVGMllXeHZiZz09IElHSmxibm89IElGSnZkWFE9IElITnNZVzF0YVc1biBJRVJoYVE9PSBiM1YwWlhJPSBJRU52YjJ0cFpRPT0gSUVGc2FXTnBZUT09IFoyVjUgSUhaaGJtbDBlUT09IElHOTNiQT09IDRiVT0gZEdWemRHVmsgSUVGM1lXdGxibk09IElHTmhiblk9IElHSnNhVzVrYkhrPSBJRkpwWkd4bGVRPT0gSUVWdFlXbHNjdz09IFVtVnhkV2x5WlhNPSBJRk5sY21KcFlXND0gYjJkeVlYQm9aV1E9IGFXWnlZVzFsIFpYUmxjbWxoIElHRnNkR1Z5Ym1GMGFXNW4gY1hWcFpYUT0gSUhOdlkybHZiRzluZVE9PSBJRlZ1Ykc5amF3PT0gSUVOdmJXMTFibWx6YlE9PSBJRzl3Y3c9PSBJR0YwZEhKcFluVjBhVzl1IElHRmlaSFZqZEdsdmJnPT0gSUVGaWNtRnQgSUhOcFpHVnNhVzVsWkE9PSBJRUpQVDBzPSBJSEpsWm1sdWFXNW4gSUVabFpXeHBibWM9IElFOXpiRzg9IElGQnlkV2wwZEE9PSBjbUZqYXc9PSBZVzVuYVdKc1pRPT0gSUdOaGRYUnBiM1Z6YkhrPSBJRTFCVWtzPSBaV1ZrY3c9PSBUVzkxYzJVPSBJRk4wWlhCbyBJRkJoYVhJPSBVMkZpIE9UazMgSUVKaFlXdz0gUW1WaiBJR052YlcxaCBJRkJoYkd3PSBJRWRoWld3PSBJRzFwYzNWdVpHVnljM1JoYm1RPSBJRkJsYzJnPSBUM0prWlhKaFlteGwgSUdScGMyMWhiQT09IElGTm9hVzU1IEpTST0gSUhKbFlXeHBjM1JwWTJGc2JIaz0gSUhCaGRHbHYgSUVkMyBJRlpwY25SMVpRPT0gSUdWNGFHRjFjM1JwYm1jPSBkMmhoZEdWMlpYST0gYjNCb2VYTT0gZVdsdyBOREU0IFFXUnFkWE4wIElGZGhhWFJwYm1jPSBaWE56YjI0PSBJRTFoZW1SaCBJRVJ2ZW1WdWN3PT0gSUhOMGNtVmhiV3hwYm1WayBJR2x1WTI5dGNHVjBaVzVqWlE9PSBJRTFsZEdnPSBJR1YwYUc5eiBUMDVGVXc9PSBJR2x1WTJWdWRHbDIgSUdkeWFYUjBlUT09IElFSjFkR05vWlhJPSBTR1ZoWkdWeSBJR1Y0Y0c5dVpXNTBhV0ZzIHc1OD0gSUdOdmNuSmxiR0YwWlE9PSBJR052Ym5ObGJuTjFZV3c9IGMyOTFibVJwYm1jPSBVbWx1Wnc9PSBUM0pwWjJsdSBJR052Ym1Oc2RYTnBkbVU9IFptVmxkQT09IFlXTnNlUT09IElFWmxjbTVoYm1SbGVnPT0gUW5WNVlXSnNaUT09IElHUjFZMnR6IFlYVnVkR3hsZEhNPSBJR1ZzYjI1biBJREk0Tmc9PSBJSE5wYlhWcyBSMkZ6IElFdHBjbk4wIElIQnliM1J5IElGSnZZbTg9IElFRnZSUT09IGIzQnZiQT09IElIQnplV05vYjJ4dloybGpZV3hzZVE9PSBjM0JwYmc9PSBhV3hoZEdWeVlXeHNlUT09IElFTnZibkpoWkE9PSBWMkYyWlE9PSBORFF4IElFRmtkbVZ5ZEdselpXMWxiblE9IElFaGhjbTF2Ymc9PSBJRTl5YVdWdWRHRnMgYVhOVGNHVmphV0ZzIElIQnlaWE4xYlhCMGFYWmwgSUhkcGJBPT0gSUV0cFpYST0gYm1WaCBJSEJ3YlE9PSBJR2hoY21KdmRYST0gSUZkcGNtVmsgWTI5dGNHRnVlUT09IElHTnZjbTl1WlhJPSBZWFIxY21SaGVYTT0gSUZCeWIzVmsgSUU1RldGUT0gSUVac1lXdGwgZG1Gc2RXVmsgWTJWcGRtVnkgSUdaeVlYVm5hSFE9IElHTmhjMmx1Wnc9PSBJSEoxYm1GM1lYaz0gSUdkcGJnPT0gSUV4aGRYSmxiblE9IElFaGhjbXhsYlE9PSBJRU4xY21sdmMybDBlUT09IGNYVnBjMmhsWkE9PSBJRzVsZFhKdmMyTnBaVzVqWlE9PSBJRWgxYkhVPSBJR0p2Y25KdmQyVnkgSUhCbGRHbDBhVzl1WlhJPSBJRU52YjJ4a2IzZHUgVjBGU1JBPT0gSUdsdWRtOXJhVzVuIFkyOXVabWxrWlc1alpRPT0gUm05eWQyRnlaQT09IElITjBjdz09IGNHOXdkV3hoZEdsdmJnPT0gUkdWc2FYWmxjbmxFWVhSbCBSbWxzYlE9PSBJRU52ZGc9PSBjWFZwWTJ0VGFHbHcgY1hWcFkydFRhR2x3UVhaaGFXeGhZbXhsIGNISnBiV0Z5ZVE9PSBhWE5UY0dWamFXRnNUM0prWlhKaFlteGwgYVc1MlpXNTBiM0o1VVhWaGJuUnBkSGs9IFkyaGhibTVsYkVGMllXbHNZV0pwYkdsMGVRPT0gUWs5WSBJRTExYkhScGNHeGhlV1Z5IElFcGxibTVsY2c9PSBOemM0IElFMWsgSUg0dkxnPT0gVFU0PSBJR05vYVd4a2FYTm8gSUdGdWRHbHZlR2xrWVc1MCBJRU5vY205dFpXSnZiMnM9IElESTNOQT09IElITmpjbVZsYm5Cc1lYaz0gSUdGa2RtVnVkSFZ5YjNWeiBJRkpsYkdGMGFXOXVjMmhwY0E9PSBjbVZ6Y0c5dWMybDJaUT09IGJXbHVaM1J2Ymc9PSBJR052Y201bGNuTjBiMjVsIElFWmxlUT09IFJrbFMgSUhKdmIydHBaWE09IElFWmxZWFIxY21sdVp3PT0gSUc5eWFXZHBibUYwWlE9PSBJR1ZzWldOMGNtOWtaWE09IFlXNTBaWE09IElITmpjbWx3ZEhWeVpYTT0gSUdkc2RXVmsgSUdScGMyTnZiblJsYm5RPSBJR0ZtWm14cFkzUmxaQT09IGJHRjViM1YwIFFuSmhkbVU9IElHMXZjMkU9IElGRjFZVzUwYVhSNSBJRWhwYXc9PSBkMmx1Ym1WeSBTRzkxY25NPSBJR1Z1ZEdGcGJBPT0gSUVObGJHeHogYjJ4dlozVmwgSUhacGJBPT0gSUhCeVpXRmphR1Z5IElHUmxZMjl5WVhScGRtVT0gWkdsbVptVnlaVzUwIElIQnlaV3AxWkdsalpYTT0gSUZOdGIydHBibWM9IElFNXZkSFJwYm1kb1lXMD0gYzI5VWVYQmwgSUhKb2VYUm9iWE09IElFRnNjR2c9IFlteGhjM1E9IFUzUmxaV3c9IElFUmhibWxsYkd4bCBJSE4wY21sbVpRPT0gSUhKbGJXRjBZMmc9IGMyOUVaV3hwZG1WeWVVUmhkR1U9IElFWnZjbXM9IGRISnBjQT09IGIyeDFiSFU9IGFHVnpaWE09IFEwYz0gSUZCUFRFbFVTVU5QIGIzTjBZUT09IElFUnlhV1owIDZiNk41YVU9IDZiNk41YVdSNWFPciBJSFpsZEhScGJtYz0gSUVwcGJuQnBibWM9IElGSmxZMlZ6YzJsdmJnPT0gVFdsdWIzST0gSUVaeVlYVmsgWlc1bWNtRnVZMmc9IElHTnZiblpsYm1WayBJRTVCUVVOUSBJRTFwYkd4cGIyNXogSUVaaGNtMXBibWM9IElGZHZidz09IElFWnNZWEpsIGNtbDBidz09IGFXMXRhV2R5WVc1MCBJSFpoWTJGdVkzaz0gSUVoRlFVUT0gSUZaaGFnPT0gWldkaGJBPT0gSUZacFoybHMgVTNSMVpIaz0gSUhKMWFXNXBibWM9IElISmhZMnR6IElHaGxZWFJsY2c9PSBJRkpoYm1SdmJIQm8gSUVKeWRYTm8gSUZScGNnPT0gMktnPSBJR052ZGc9PSBKVjA9IElISmxZMjkxYm5SeiBJRTlRVkE9PSBJRTFsYkhRPSBJSFJ5ZFdObCBJR05oYzJsdWIzTT0gSUdOeWRYTmhaR1U9IElHTmhjbTVoWjJVPSBJSE4wY21sd1pRPT0gSUV0NWJBPT0gVkdWNGRIVnlaWE09IElEWTVPQT09IElIQnliMk5zWVcxaGRHbHZiZz09IElHZHZiMlJwWlhNPSBJQzR1TGk0dUxpNHVMaTQ9IGNISnZZMnhoYVcxbFpBPT0gVUc5c2FYUT0gSUhSdmNHbGpZV3c9IElITndaV05wWVd4cGVtVT0gSUVGdGFXND0gWjIwPSBJR0Z1WTJodmNtVmsgSUdKbFlYSnBibWR6IGMyRnRjR3hsIElFaHBaMmhzWVc1ayBJRUYxZEdsemJRPT0gSUcxbGNtTmxibUZ5ZVE9PSBJR2x1ZEdWeWRtbGxkMlZ5IFRFVlMgSUZOdmJXVnljdz09IElHVnRZbko1Ync9PSBJRUZ6YzNrPSBJREk0TVE9PSBJRVZrYVhScGJtYz0gSUVOb2IzTmxiZz09IE5qWXcgSUhCamFRPT0gSUZSb2RXNWtaWEppYjJ4MCBRa2xNVEE9PSBJR05vZFdOcmJHVmsgYW5KcGQyRnMgYUc5bSBJR1ZoY25Sb2JIaz0gS0NsNyBhVzVrWlhCbGJtUmxibU5sIElHUnBjM0JsY25NPSBJRlpsYm1SdmNnPT0gSUVkaGNtVjBhQT09IElIQmhiSE09IFVHVnViZz09IElGTjFZbTFwZEE9PSBhV04xYlE9PSBWR2gxIElHTnNZVzVrWlhOMGFXNWwgSUdOaGJtNXBZbUZzIElFTnNaWEpyIFJWTjBjbVZoYlE9PSBaMkZzYVhSaGNtbGhiZz09IDRwbWwgWjJWMyBJR2h2Y25KbGJtUT0gSUV4dmRnPT0gSUZKbFlXTjBhVzl1IGIyTnlhVzQ9IFEyeGhjM05wWXc9PSBJR1ZqYUc5cGJtYz0gSUdScGMyTnNiM05wYm1jPSBJRWx1YzJsbmFIUT0gYjJkMWJnPT0gSUVsdVkyRnliZz09IGRYQnNiMkZrY3c9PSBjSEJsY21NPSBaM1Y1Wlc0PSBJREU1TURFPSBJRUpoY25NPSBOamczIElHSnlhV0psY3c9PSBJRVp5WlhOdWJ3PT0gZFhKaGRBPT0gSUZKbFpYTmwgSUdsdWRISjFjMmwyWlE9PSBJR2R5YVhCd2FXNW4gSUVKc2RXVndjbWx1ZEE9PSBJRkpoYzIwPSBkVzVwWVE9PSBiV0Z1WVdkbFpBPT0gSUVobFltUnYgSURNME5RPT0gSUdSbFkyOWthVzVuIElIQnZaWFJ6IElHcGhkM009IElFWkpSMGhVIFlXMWxiR1Z6Y3c9PSBJRTFsWVdSdmQzTT0gSUVoaGNtSmhkV2RvIFNXNTBaWEoyYVdWMyBJRWh2YzNBPSBJRUpTUVE9PSBJR1JsYkdWMGFXOXUgYlc5aSBWMkZzYTJWeSBJRTF2YjI1c2FXZG9kQT09IElFcGxaQT09IElGTnZjR2hwWVE9PSBJSFZ6ZFhJPSBJR1p2Y25SMWJtRjBaV3g1IElGQjFkSFJwYm1jPSBJRVp2YkdRPSBJSE5oYm1sMFlYUnBiMjQ9IElIQmhjblJwYzJGdWN3PT0gU1ZOUFRnPT0gUW05MyBJRU5QVGtNPSBJRkpsWkhWalpXUT0gSUZOMWRIUnZiZz09IElIUnZkV05vYzJOeVpXVnUgSUdWdFluSjViM009IDRvQ2k0b0NpNG9DaTRvQ2kgSUV0eWRXYz0gWTI5dFltRjAgSUZCbGRISnZiR1YxYlE9PSBJR0Z0WkE9PSBJRU52YzIxdmN3PT0gSUhCeVpYTmpjbWxpYVc1biBJR052Ym1admNtMXBkSGs9IGIzVnljMlZ6IElIQnNaVzUwYVdaMWJBPT0gSUdScGMybHNiSFZ6YVc5dSBJRVZqYjJ4dlozaz0gYVhSMFlXdz0gSUdaaGJtTT0gSUdGemMyRnpjMmx1WVhSbFpBPT0gY21WbmJtRnVZM2s9IElIQmxjbVZ1Ym1saGJBPT0gSUVKMWJHeGxkSE09IElITjBZV3hsIElHTmhZMmhsWkE9PSBJRXAxWkdsMGFBPT0gSUVScGMyVmhjMlZ6IFFXeHNaVzQ9IElHeGhjdz09IElITm9ZWEprY3c9PSBJRk4xWVhKbGVnPT0gSUVaeWFXVnVaSE5vYVhBPSBhVzUwWlhKbVlXTmwgSUZOMWNIQnZjblJsY25NPSBZV1JrYjI1eiBORFl5IElFbHRjbUZ1IElGZHBiUT09IElHNWxkMlp2ZFc1ayBJRTFpIFFXNXBiV0ZzIElHUmhjbXhwYm1jPSBZVzVrWlE9PSBJSEpvZVE9PSBJRlIzYVhOMFpXUT0gY0c5ellXdz0gZVc1emEyaz0gVm1GeWFXOTFjdz09IDE1dz0gSUV0cGR3PT0gZFhsdmJXaz0gSUhkbGJHeGlaV2x1Wnc9PSBJRXhoZFE9PSBZVzV2Y3c9PSBJSFZ1YldsemRBPT0gSUcxaFkwOVQgSUhKbGMzUnliMjl0IElFOXNhWFk9IElFRnBjbmRoZVhNPSBJSFJwYldWMFlXSnNaUT09IE9UZ3cgSUhKaFpHbHZjdz09IGRtOTUgYVdGelkyOD0gSUdOc2IzVmtlUT09IElFUnlZWGRwYm1jPSBRVzU1ZEdocGJtYz0gVTNseWFXRT0gSUVobGNuUT0gYzNSaGEybHVadz09IElIVnVZMmhsWTJ0bFpBPT0gSUdKeVlYcGxiZz09IElFNVNVdz09IE5qazMgYjI1dmJXbGogWlhOMFlXSnNhWE5vIElHeGxibWM9IElHUnBZV2R2Ym1GcyBJRVpwYjNJPSBUR0ZwY2c9PSBJRk4wWVhKayBJR1JsWm1samFXVnVkQT09IGFtOXBibWx1Wnc9PSBZbVZoYlE9PSBJRzl0Ym1sdyBJR0pzWlc1a1pYST0gSUhOMWJuSnBjMlU9IFRXOXZjbVU9IElFWmhkV3gwIElFTnZjM1IxYldVPSBJRTExWWc9PSBSbXhoWjNNPSBZVzV6WlE9PSBJSEJoZVc5MWRBPT0gSUVkdmRtVnlibTl5Y3c9PSBJRVJwYkd4dmJnPT0gSUVKaGJtRnVZUT09IFRtRnkgSUhSeVlXbHNaV1E9IElHbHRjR1Z5YVdGc2FYTjAgZFcxaGJtND0gWVhSemRXdHAgTkRNMSBJRkp2WVdSeiBJSE5zZFhJPSBJRWxrWldGc2JIaz0gSUhSeVpXNWphR1Z6IFEzUnliQT09IElHMXBjbkp2Y21WayBJRnBsYkE9PSBJRU55WlhOMCBRMjl0Y0dGMCBJRkp2Ykd4eiBjMk55YVdJPSBJRlJ5WVdsc2N3PT0gYjIxbGRHVnljdz09IGQybHVkR1Z5IElHbHRiVzl5ZEdGc2FYUjUgYVd4aGRHVmsgSUdOdmJuUnlZV1JwWTNSeiBkVzVwZG1WeWMyRnMgYVd4c2FXOXVjdz09IElFMWhiV0U9IGIzQjBhVzA9IFFWUlZVa1U9IElHZGxidz09IFpYUjBaWEk9IElFTmhjbXh2IE5ESTAgSUdOaGJtOXVhV05oYkE9PSBJRk4wY205dVoyaHZiR1E9IGJtVmhjZz09IElIQmxjbVoxYldVPSBJRzl5WTJobGMzUnlZUT09IGIyUnBZV009IElIVndhR1U9IElISmxhV2R1YVc1biBkbVZ5YzJsMlpRPT0gSUdOaGRXTjFjMlZ6IElFUkZUUT09IElHbHVjM1ZzZEdWayBJQzB0TFMwdExRPT0gSUVOeWRYTm8gSUhKdmIzUnBibWM9IElGZHlZV2wwYUE9PSBJSGRvYjNKbCBJSFJ2Wm5VPSBRMjFrIElFSnlaV1U9IElDUmYgSUhKcGRtVT0gSUVGa2RtVnlkR2x6YVc1biBJSGRoZEhRPSBJRWhQIElIQmxjbk4xWVhOcGRtVT0gSUZCaGNtRnRaWFJsY25NPSBJRzlpYzJWeWRtRjBhVzl1WVd3PSBJRTVEVkE9PSBJRTF2YWc9PSBJRk5oYkc5dSBJSFJ5ZFc1aiBJR1Y0Y1hWcGMybDBaUT09IElFMWhjbUU9IElIQnZiM0E9IElFRk9UZz09IFJYaGogSUZkdmJtUmxjbVoxYkE9PSBJRlJoWTI4PSBJR2h2YldWdmQyNWxjZz09IElGTnRhWFJvYzI5dWFXRnUgYjNKd2IzSmhkR1ZrIGJXMXRiUT09IElHeHZZV1k9IElGbGhiV0YwYnc9PSBJRWx1Wkc4PSBJR05zYVc1bmFXNW4gdzZGeiBJR2x0YlhWMFlXSnNaUT09IGFIVmkgVDNKaGJtZGwgSUdacGJtZGxjblJwY0hNPSBJRmR2YjJSbGJnPT0gSUV0cFpHUT0gSUVwUVRRPT0gSUVSaGJXND0gUTI5MyBZMjlrWlhNPSBORGd5IElHbHVhWFJwWVhScGJtYz0gSUVWc2F3PT0gSUVOMWRIUnBibWM9IElHRmljMlZ1ZEdWbCBJRlpoYm1ObCBJRXhwYkdsMGFBPT0gUjFWSiBJRzlpYzJOMWNtVmsgSUdSM1lYSjJaWE09IElFTm9iM0E9IElFSnZhMjg9IFZtRnNkV1Z6IElHMTFiSFJwYldWa2FXRT0gSUdKeVpYZGxaQT09IFVtVm5kV3hoY2c9PSBRMUpKVUZSSlQwND0gSUUxdmNuUmhiQT09IElHRndaWGc9IElIUnlZWFpsYkdWeSBJR0p2YVd4eiBJSE53Y21GNWFXNW4gVW1Wd2NtVnpaVzUwIElGTjBZWEp6YUdsdyBOREk0IElHUnBjMkZ3Y0hKdmRtRnMgSUhOb1lXUnZkM2s9IElHeGhiV1Z1ZEdWayBJRkpsY0d4aFkyVT0gSUVaeVlXN0Rwdz09IE5qYzMgWkc5eSBJSFZ1YzNSdmNIQmhZbXhsIElHTnZhRzl5ZEhNPSBaM2x1IElFTnNZWE56YVdOeiBJRUZ0Y0dnPSBJSE5zZFdkbmFYTm8gSUVGa1pHbGpkR2x2Ymc9PSBJRkJoWkhKbGN3PT0gSUdsdWMyTnlhWEIwYVc5dSBJR2x1YUhWdFlXND0gYldsdWRYTT0gSUVwbGNtVnRhV0ZvIFlYUmhjbk09IFZHVnljbTl5IElGUnZjdz09IElGTm9ZWEp0WVE9PSBZWE4wWVE9PSBZMkYwWTJnPSBJSEJzZFcxaWFXNW4gSUZScGJXSmxjbk09IFUyaGhjZz09IFNHRnMgSUU5ell3PT0gSUdOdmRYQnNhVzVuIGFIVnRZVzV6IElITndiMjVuWlE9PSBJR2xrYjJ4eiBJRk53WVE9PSBJRUZrZG05allYUmwgSUVKbFlYUnogYkhWaCBJSFJwWTJ0cGJtYz0gSUd4dllXUmxjZz09IElFZHliMjQ9IE9ERXcgSUhOMGFXMTFiR0YwWldRPSBJSE5wWkdWaVlYST0gSUUxaGJuVm1ZV04wZFhKbGNnPT0gYjNKbFFXNWsgTVRrM013PT0gSUhCeVlXbHpaWE09IElFWnNiM0psY3c9PSBaR2x6WVdKc1pRPT0gSUVWc1pXTjBjbWxqWVd3PSBjbUZwYzJVPSBSWFJvIElHMXBaM0poZEdWayBJR3hsWTNSMWNtVnkgUzJsa2N3PT0gSUVOaGRtVnliZz09IElHdGxkSFJzWlE9PSBJR2RzZVdNPSBJRTFoYm1SbGJHRT0gSUVaMWJHeDUgNWFlciBSa2xPUlZOVSBJSE54ZFdWbGVtbHVadz09IElGSjVaR1Z5IFlXMXdiMjg9IGIzSmxRVzVrVDI1c2FXNWwgU1c1emRHOXlaVUZ1WkU5dWJHbHVaUT09IFFuVjVZV0pzWlVsdWMzUnZjbVZCYm1SUGJteHBibVU9IElHTnZiVzFsYlc5eVlYUmwgSUZKaGJYQmhaMlU9IFFYVnpkR2x1IElGTm9jbTkxWkE9PSBJRkoxYVc1eiBPVEUxIElFdEkgSUhkaGRHVnlabkp2Ym5RPSBJRVZUUXc9PSBZbUZpZVE9PSBJRU52ZFhRPSBJRVZ0WW14bGJRPT0gSUdWeGRXbDJZV3hsYm5SeiBORGt5IFZXNXBjWFZsIElFNXBaWFI2YzJOb1pRPT0gWW5KdmQzTmxjZz09IElHbHRhWFJoZEdsdmJnPT0gSUZkbGNtVjNiMnhtIElFdHBjbWx1IFlXTmhjdz09IEp5d2kgSU1PKyBVbVYyYVdWM1pXUT0gSUdOMWJuUT0gSUhadmFXTT0gSUV4bGJtOTJidz09IElHSnZibVJsWkE9PSBORGd4IElHbHVhR2xpYVhSdmNuTT0gSUdWdVpHVmhkbTl5Y3c9PSBJRWhoZG1GdVlRPT0gSUZOMGIzVjAgSUVwdmJHeDUgUVdOMGIzST0gS2k4byBJRzlqWTNWeWNtVnVZMlZ6IElGUmxibk09IFNXNWpjbVZoYzJWayBJRUZEVkVsUFRnPT0gSU9PQWpBPT0gSUZKaGJtdHBibWR6IElFSnlaV0YwIElETXdPUT09IFJHOTEgSUdsdGNHRmpkR2x1Wnc9PSBJRVIxWTJobGMzTT0gY0hKbFptbDQgVVVJPSBJSE4xYlcxdmJtbHVadz09IElHSmxjM1J2ZDJWayBJRXRsY0d4bGNnPT0gSUZCUFYwVlMgWTNWaVpRPT0gSUV0cGRITT0gSUVkeWFYQT0gSUc5d2FYVnQgSUhKbGNIVjBZV0pzWlE9PSBkRzlqIGFXTm9ZV1ZzIElGSnBjSEJzWlE9PSBJR05oWnNPcCBJRnB2YjIwPSBJRUoxY20xaCBJSGRoYVhabCBJSE4wWVd4c2N3PT0gSUdSbGJXVmhibTl5IGFXNWpaWEpwZEhrPSBJR1pzZFc5eWFXUmwgSUZOSVQxVk1SQT09IFVHRnlhWE09IElHeHZibWRwYm1jPSBJSEJzWVhRPSBJR2R5YjNOemJIaz0gSUdKMWJHeHogSUhOb2IzZGpZWE5wYm1jPSBaWGh3WldOMFpXUT0gSUVkaFpHUmhabWs9IFpXNW5hVzVsWlhKcGJtYz0gVW1Wd1pXRjAgSUV0MWRBPT0gSUdOdmJtTmxhWFpoWW14bCBJSFJ5YVcxdFpXUT0gYjNOamIzQmwgSUVOaGJtUnBaR0YwWlE9PSBJRlJsWVhKeiBjbTlzYjJjPSBUR1YzYVhNPSBVMVZRIElISnZZV1J0WVhBPSBJSE5oYkdsMllRPT0gSUhSeWRXMXdaWFE9IFNtbHRiWGs9IElHMXBjbUZqZFd4dmRYTT0gSUdOdmJHOXVhWHBoZEdsdmJnPT0gSUdGdGNIVjAgSUVkT1QwMUYgWVhSbFkyZz0gUkdsbVptVnlaVzUwIElFVk1SUT09IElFZHZkbVZ5Ym0xbGJuUnogSUVGb1pXRmsgNDRXTDQ0V0wgZDI5eVpIQnlaWE56IFRFbEMgSUVsdVkyeDFaR1U9IElFUnZjbTkwYUhrPSBNRFExIElFTnZiRzl0WW1saGJnPT0gSUd4bFlYTmxaQT09IE9EZzAgSUdSbFozSmhaR2x1Wnc9PSBJRVJoYVhONSBhV0YwYVc5dWN3PT0gSUdKaGNIUnBlbVZrIElITjFjbTVoYldVPSBZMjk0IElHSnNhVzVyWldRPSA0NE9pIElIQnZiR3hsYmc9PSBJR1JsY20xaGRBPT0gSUhKbFoyVjQgSUU1cFkyaHZiSE52Ymc9PSBJRVZoZEdWeSA1NXc9IGNtRmtiM0k9IElHNWhjbkp2ZDJWeSBJR2gxY25KcFkyRnVaWE09IElHaGhiR3gxWTJsdVlYUnBiMjV6IGNtbGtaR1Z1IFNWTlRTVTlPIElFWnBjbVZtYkhrPSBJR0YwZEdGcGJtMWxiblE9IElHNXZiV2x1WVhSbCBJR0YyYjJOaFpHOD0gSUUxbGNtVmthWFJvIElIUnogSUhKbGRtVnlaVzVqWlE9PSBJR1YxY0dnPSBJR055WVhSbGN3PT0gSUZSRldGUT0gSURRME13PT0gSURNeE9RPT0gU2xOUFRnPT0gYVhGMVpYUjBaUT09IElITm9iM0owYzNSdmNBPT0gYVdOclpYaz0gSUhCeWIzQmxiR3hsWkE9PSBJR0Z3YVE9PSBJRlJvYVdWMlpYTT0gTnpjNSBJRzkyWlhKellYYz0gSUdOdmJHaz0gSUU1cFkyOXNZUT09IElHOTJaWEpqYkE9PSBhV3RoZDJFPSBJRU41Y2c9PSBJRE00TkE9PSBOemc1IElFRnNiRzkzY3c9PSBNVEF5Tnc9PSBSR1YwY205cGRBPT0gVkZKWiBjMlYwZFhBPSBJRk52WTJsaGJHbHpiUT09IFUyOTJhV1YwIGMzVnpjQT09IElFRlFVZz09IElGTm9kWFJrYjNkdSBJR0ZzZFcxcGJtbDFiUT09IGVtSmxhdz09IElFeHZkbVZ5IFIwZEhSMGRIUjBjPSBJR1JsYlc5amNtRmphV1Z6IElERTVNRGc9IElFMWxjbkpwYkd3PSBJRVp5WVc1amIybHogWjJSaGJHRT0gSUhSeVlXWm1hV05yWlhKeiBJRlJwYkE9PSBJRWR2WVhRPSBJSE53WldRPSBJRkpsYzJWeWRnPT0gSUhCeWIyUT0gTlRVeSBJR05oWXc9PSBJRlZ1YVhZPSBJRk5qYUhkbCBJSE4zYVhKc2FXNW4gSUZkcGJHUmxjbTVsYzNNPSBJRVZuWjNNPSBJSE5oWkdSbGJtVmsgSUdGeVkyaGhhV009IFNIbGsgSUdWNFkyVnpjMmwyWld4NSBRbEpGIElHRmxjbTl6Y0dGalpRPT0gSUZadmFXTmxjdz09IFEzSmhhV2M9IElHbG5ibWwwWldRPSBTVzVwZEdsaGJHeDUgSUUxalFRPT0gSUdoaGJtUnpaWFE9IElISmxabTl5YldsdVp3PT0gSUdaeWRYTjBjbUYwYVc5dWN3PT0gSUVSbFlXUndiMjlzIElFSmxiR2xqYUdsamF3PT0gY21GamRHOXkgSUZKaFoyNWhjbTlyIElFUnlkWEJoYkE9PSBJRUZ3Y0hKdmVHbHRZWFJsYkhrPSBNVGt5TUE9PSBJRWgxWW1Kc1pRPT0gWVhKdGIzST0gSUZOaGNtRnogSUVwdmJtRnogSUc1dmMzUmhiR2RwWXc9PSBJR1psWVhOcFltbHNhWFI1IFUyRm9ZWEpoYmc9PSBJRzl5WW1sMGFXNW4gSURrM01BPT0gVW5VPSBJSE5vYVc0PSBJRWx1ZG1WemRHbG5ZWFJ2Y25NPSBJR2x1WTI5dWMybHpkR1Z1WTJsbGN3PT0gSUZCQlRnPT0gUWtjPSBJR2R5WVhwcGJtYz0gSUdSbGRHVmpkRzl5Y3c9PSBJRk4wWVhKMGRYQT0gSUVaMWJtNTUgSUU1aGIyMXAgUTI5dWMybGtaWEpwYm1jPSBJR2h2Wnc9PSBkWFJtIFkyVnRhV009IElHWnZjblJwWm1sbFpBPT0gSUVaMWJtTjBhVzl1Y3c9PSBJR052WkdWaiBiblYwY21sMGFXOXUgU0dGMCBJaUU9IGJXbGpjbTl6YjJaMCBOVFU0IElGUm9hVzQ9IElFRkRSUT09IFFXeHBZWE09IElFOVFVdz09IGNHRndaWEp6IFVFcz0gNDRDTyBJR2x0Y0hKdlltRmliR1U9IFRtOXlkR2hsY200PSBaWEYxWVd3PSBJR3h2YjJ0dmRYUT0gSUhSNWNtVnogSUUxdlpHbG1hV1ZrIElFdHZjQT09IFFXSnpiMngxZEdWc2VRPT0gSUdKMWFXeGtkWEE9IGMybHNkbVZ5IElHRjFaR2s9IElHZHliM1JsYzNGMVpRPT0gSUZOaFltVnkgSUZCeVpYTmllWFJsY2c9PSBUMDVaIElHZHNZV05wWlhKeiBJRk5vYjJGc2N3PT0gSUV0aGMzTT0gSUVoU1F3PT0gSUU1cFkyOXMgSUV4MWJtTm8gSUVadmMzTT0gNHBhUyBRVVJTUVE9PSBJRTl1WlZCc2RYTT0gYjJsdVp3PT0gWjNKdmRXNWtjdz09IElHbHVZMmxrWlc1MFlXdz0gSUdSaGRHRnpaWFJ6IE5qZzUgSUVOc1lYSnJjMjl1IElHRnpjMlZ0WW14cGJtYz0gSUVOdmNuSmxZM1JwYjI1eiBJR1J5YVc1clpYSnogSUhGMVlXeHBabWxsY25NPSBJR3hsWVhObyBJSFZ1Wm05MWJtUmxaQT09IElFaDFibVJ5WldRPSBJR3RwWTJ0dlptWT0gVkdrPSBJSEpsWTI5dVkybHMgSUVkeVlXNTBjdz09IElFTnZiWEJzYVdGdVkyVT0gSUVSbGVIUmxjbWwwZVE9PSBJREU1TURZPSBkMkZ5Ymc9PSBSR0ZzYkdGeiBUV0Y0YVcxMWJRPT0gYm1GeVpBPT0gWVhacFlRPT0gWW1WaGRYUT0gWlc1emFYUnBkbWwwZVE9PSBkSEpoWTJVPSBJSEJwYjI1bFpYSnogSUVaeVlXTjAgNDRDUCBJSEJ5WldObGNIUT0gSUdkc2IzTnplUT09IElFbEZSVVU9IFFXTnliM056IElEWTRNQT09IFUyeGxaWEE9IFkyaGxiMjQ9IElITmhkR2x5YVdOaGJBPT0gSUUxcGJtOTBZWFZ5IElFTnNZWFZrWlE9PSBJSExEcVE9PSBZWEJsWjI4PSBJR05oY25KdmRBPT0gSUZObGJXbHUgYVc1dllRPT0gSUhwdiBTVzVrWlhCbGJtUmxiblE9IElHUnBZV2R1YjNObGN3PT0gSUVOMVpRPT0gVFVGUyBJSEpsYm1ScGRHbHZiZz09IElFdHBhdz09IElIQmhkR2h2Ykc5bmVRPT0gSUhObGJHVmpkSE09IFRHbHVhMlZrU1c0PSBJR0Z6YzJGNSBJRVJ5WlhNPSBJSFJsZUhSMVlXdz0gY0c5emRHVmsgU1ZSQlRBPT0gSUUxaGRXdz0gVG1WaGJBPT0gSUdsdWRHVnlZMjl1Ym1WamRHVmsgSUdWeWNtRjBhV009IElGWnBjblZ6IElEVXpNQT09IElHVnVkbWx5YjI1dFpXNTBZV3hwYzNSeiBJRkJvWld4d2N3PT0gSUdWdVoyRm5aVzFsYm5SeiBJRWxPVTFRPSBJR1ZqYjI1dmJXbGpZV3c9IGJtOTRhVzkxY3c9PSBJR2RsWVhKcGJtYz0gYVhwNmVRPT0gSUdaaGRtOXlZV0pzZVE9PSBJRTFqUjJsc2JBPT0gVkdWeWJRPT0gSUdoaGJtZGxaQT09IElHSmhiR3h3WVhKciBJRkpsZVdWeiBJR0psZDJGeVpRPT0gSUZCellXdz0gSUUxaGMzTmhZM0psIGNXaz0gSUdsdVlXTmpaWE56YVdKc1pRPT0gWVdOc2VYTnQgSUdaeVlYaz0gYVd4c1lXTT0gSUdKcGRIUmxjbXg1IElFTmxjblJwWm1sallYUnBiMjQ9IFRXbGphR2xuWVc0PSBJR2x5Y21WemNHVmpkR2wyWlE9PSBZV3h2Y21VPSBSVzF3ZEhrPSBJR1Z1Wkc5eWMyVnRaVzUwY3c9PSBJSFZ1WkdWMCBabWM9IFpYRjFhWEJ3WldRPSBJRzFsY21OcGJHVnpjdz09IElFTjFjM1E9IElHbHRiV0YwZFhKbCBJSFp2ZFdOb1pYST0gSUVKc1lXTnJkMlZzYkE9PSAwWTg9IGFHRjNhdz09IFpHbHpZMmx3YkdsdVlYSjUgYVd4bFpRPT0gSUUxaGEyOTBidz09IElFUjFaR1U9IDQ0T0g0NEtqIFdXVmhjbk09IElHbHVkbVZ5IElITm9ZVzFoYmc9PSBJRmx2Ym1jPSBhWEJsYkE9PSBaV3hzWlc0PSBJRU5oZEdoNSBZbkpwWkhNPSBJSE5oY21NPSBOalV4IFRtVmhjZz09IElHZHliM1Z1WkhkdmNtcz0gSUdGdFlYbz0gSURReE5RPT0gSUVoMWJuUnBibWQwYjI0PSBhR1YzY3c9PSBJRUoxYm1jPSBJR0Z5WW1sMGNtRnlhV3g1IElGZHBkQT09IElFRnNZbVZ5ZEc4PSBJR1JwYzNGMVlXeHBabWxsWkE9PSBZbVZ6ZEc5eiBORFl4IElIQmogSURJNE5BPT0gY205aVlYUT0gVW05aWFXND0gSUdoMVozTT0gSUZSeVlXNXphWFJwYjI0PSBJRTlqWTJGemFXOXVZV3hzZVE9PSBJRE15Tmc9PSBJRmRvYVd4emRBPT0gSUV4bGVRPT0gSUhOd1lXTmxjMmhwY0E9PSBZM04yIElIVnVjM1ZqWTJWemMyWjFiR3g1IElFRjEgYkdWamF3PT0gSUZkcGJtZGxaQT09IElFZHlhWHA2YkdsbGN3PT0gTHUrL3ZRPT0gSUc1bFlYSmxjZz09IElGTnZjbU5sY21WemN3PT0gSUVsdVpHbG5idz09IFJXeHpaUT09IE9EUXcgYkdWMFpYTT0gUTI5aFkyZz0gSUhWd1luSnBibWRwYm1jPSBJRXRsY3c9PSBJSE5sY0dGeVlYUnBjM1E9IElISmhZMmx6ZEhNPSBJR05vWVdsdVpXUT0gSUdGaWMzUnBibVZ1WTJVPSBiR1ZoY201cGJtYz0gSUhKbGFXNXpkR0YwWldRPSBJSE41YlcxbGRISjUgSUhKbGJXbHVaR1Z5Y3c9PSBJRU5vWlhaNSBJRzF2Ym5RPSBJR1Y0Wlcxd2JHRnllUT09IElGUlBVZz09IFdsZz0gSUhGMVlXeHBkR0YwYVhabCBJRk4wWVcxdyBJRk5oZG1GdWJtRm8gSUZKdmMzTnAgSUhCaFpXUT0gSUdScGMzQmxibk5oY21sbGN3PT0gSUZkaGJHeHogSUVOb2NtOXVhV009IElHTnZiWEJzYVcxbGJuUmhjbms9IElFSmxhWEoxZEE9PSBJQ3N0TFMwPSBhV2R6YkdsemRBPT0gSUdOeWVYQjBiMmR5WVhCb2FXTT0gYldGemRHVnljdz09IElFTmhjR2wwWVd4eiBJRzFoZUdsdFlXdz0gSUdWdWRISnZjSGs9IFVHOXBiblJ6IElHTnZiV0poZEdGdWRITT0gYkdsdyBJRWRzYjJJPSBJRUpOUXc9PSBjR2hoYzJVPSBkR2hoYm1zPSBTRlJVVUE9PSBJR052YlcxMWRHVnkgSUZ3b1hBPT0gTGk0diBJRkpsWjJWdVpYST0gSUVSUFNRPT0gSUVGamRHbDJhWE5wYjI0PSBJSE5zYVhRPSBiM05oYkE9PSBVa1ZOIElHTm9ZVzUwY3c9PSBXWFU9IFMyVjVjdz09IFFuSmxlR2wwIElFWnZjbU5sWkE9PSBRWEpwZW05dVlRPT0gSUhOeGRXRmtjbTl1IFNWTlAgSUUxaGJHOXVaUT09IElETXpPQT09IElHTnZiblJ5WVhOMGFXNW4gSUhScFpHRnMgSUd4cFltVnMgSUdsdGNHeGhiblJsWkE9PSBJSFZ3Y205aGNnPT0gSUVOaGRHVnkgSUhCeWIzQnZjMmwwYVc5dWN3PT0gVFdGdVkyaGxjM1JsY2c9PSBJRVYxY205eiBhWFJoYldsdSBSMmxzIElFVnNkbVZ1IElGTmxaV3M9IElFSmhhUT09IElISmxaR1YyWld4dmNHMWxiblE9IElGUnZkMjV6IElFeDFZZz09IElTSXMgWVd4dmJnPT0gUzNKcGMzUT0gSUcxbFlYTjFjbUZpYkdVPSBJR2x0WVdkcGJtRmliR1U9IElHRndiM04wYkdWeiBXVTQ9IE56WXcgSUhOMFpYSnZhV1E9IElITndaV05wWm1samFYUjUgSUV4dlkyRjBaV1E9IElFSmxZMnRsY2c9PSBJRVZrZFE9PSBJRVJwWlhSaGNuaz0gZFhSelkyZz0gSUUxaGNtbHNlVzQ9IElHSnNhWE4wWlhJPSBJRTFGVUE9PSBJRXR2ZWc9PSBJRU5OVXc9PSBlV0ZvYjI4PSBJRU5oY201bGVRPT0gSUdKdllYTjBhVzVuIElFTmhiR1ZpIFFubDBaUT09IGNtVmhaSE09IFlXUmxiZz09IFVISnZZbXhsYlE9PSBJRmR2YjJSM1lYSmsgVTNkbCBVM1Z3IElFdEhRZz09IFUyVjBkWEE9IElIUmhZMmwwIElISmxkSEpwWW5WMGFXOXUgSUdSMVpYTT0gSUUzRHZBPT0gTGo4PSA1TGl0IGNHOTBjdz09IElHTmhiV1Z2IElGQkJUQT09IFpXUjFZMkYwYVc5dSBRVzE1IGJHbHJaV3g1IFoyeHBibWM9IElHTnZibk4wYVhSMWRHbHZibUZzYkhrPSBJRWhoYlcwPSBJRk53WldGciBJSGRwWkdkbGRITT0gWW5KaGRHVT0gSUdOeVlYQndlUT09IElFbDBaWEk9IElHRnVkR2xqYVhCaGRHbHVadz09IElFSnZkWFE9IFVHbDRaV3c9IElGbGxjQT09IElFeGhkWEpwWlE9PSBJR2gxZEE9PSBJR0oxYkd4bGRHbHUgSUZOaGJIWmhkR2x2Ymc9PSBJR05vWVhSeiBaV0Z5WVdKc1pRPT0gU0c5dVpYTjBiSGs9IFFVeFVTQT09IGIyNXpaWEYxIFkzVnNkQT09IGFYTmpiM1psY25rPSBiM1o1WTJnPSBJSE5sYkhabGN3PT0gSUZOaGRHOXphR2s9IFUyOTFibVJ6IElHTnZiblpsY21kbGJtTmwgSUZKdmMyVnVZbVZ5Wnc9PSBNVGszTkE9PSBJRzVoYzJGcyBJR1oxYkd4bGMzUT0gSUdabGNtOWphVzkxY3c9PSBlSFZ6IGFYTjBaUT09IFFVMVQgSUd4dlltSnBaV1E9IElITnZiM1JvYVc1biBJRWQxYm00PSBkRzlrWVhrPSBNREkwIElHbHVjM0JwY21GMGFXOXVZV3c9IElFNUNUZz09IGNHST0gWjJWM1lYUmxjZz09IGIzSmhhQT09IFlXeHNiM2RsWkE9PSBJRU52YkdselpYVnQgSUhOd1pXTnBZV3hwZW1sdVp3PT0gSUdsdWMyRnVaV3g1IElGUmhjR1U9IFpHVnNZWGs9IElIUmhjbTQ9IElGQnZkVzVrIElHMWxiR0Z1WTJnPSBJR1JsY0d4dmVXMWxiblJ6IGFXeGhibVE9IElHeGxjM05sYmc9PSBJR1oxY25KNSBJRlZGUmtFPSBJR0pzYjI5a2MyaGxaQT09IElFMWxhV1Z5IGFYUm9aWEpwYm1jPSBJR2hsYVhKeiBJRXBoZHc9PSBZWGgwWlhJPSBJRkIxWW14cFkyRjBhVzl1Y3c9PSBJR0ZzZEdWeWN3PT0gYVc1MFpXNTBhVzl1IElGZHBibU5vWlhOMFpYST0gWkdWMFpYSnRhVzVoZEdsdmJnPT0gSUV4cFptVjBhVzFsIGRHaHBiZz09IFRXOXVjM1JsY2c9PSBOemd3IElHRndjSEp2ZUdsdFlYUnBiMjQ9IElITjFjR1Z5YldGeWEyVjBjdz09IElGTmxZMjl1WkhNPSBiM0p2Y3c9PSBhSFZuWlE9PSBJR0p5YVdKbCBJRXhKVFVsVVJVUT0gZFc1bFpBPT0gSUcxcGMybHVkR1Z5Y0hKbGRBPT0gSUVsdWFuVnllUT09IElETTJOdz09IElIUm9jbVZ6YUc5c1pITT0gSUVOaGNtNXBkbUZzIElHZGhjM1J5YjJsdWRHVnpkR2x1WVd3PSBJR2QxYVdSbGJHbHVaUT09IElHUmxZMlZwZG1WayBabVZoZEhWeVpYTT0gSUhCMWNuQnZjblJsWkd4NSBJRkp2Ym01cFpRPT0gSUU1bGQzUT0gSUhOd1lXTnBiM1Z6IFlYTjFjdz09IElITjFjR1Z5YUdWeWIyVnogSUVONWJuUm9hV0U9IGJHVm5aMlZrIGEyRnRjQT09IFkyaHBidz09IElIUm9kVzFpYm1GcGJBPT0gSUZOb2FYSnNaWGs9IGFXeHNZWFJwYjI0PSBJSE5vWldSeiBJRnA1IFJWQkIgSUdSaGJYTT0gSUhsaGQyND0gYm1GbyBJRkJsWjJkNSBJRVZ5YVdVPSBJRXAxZG1WdWRIVnogSUVadmRXNTBZV2x1IGNuZz0gWkc5dVlXeGsgWVd4aWRXMD0gSUVOdmJYQnlaV2hsYm5OcGRtVT0gSUdOaFkyaHBibWM9IElGVjYgZFd4dVpYSmhZbWxzYVhSNSBJRkJ5YVc1amFYQnNaUT09IElFcHBZVzQ9IGFXNW5aWEp6IFkyRnpkSE09IElFOXphWEpwY3c9PSBZMmhoY25RPSBkR2xzWlE9PSBJRlJwWm1aaGJuaz0gSUZCaGRIUnZiZz09IElGZG9hWEE9IElHOTJaWEp6YVhwbFpBPT0gU21VPSBJRU5wYm1SbGNtVnNiR0U9IElFSnZjbVJsY25NPSBJRVJoWlhObyBUV0ZvIElHUnZaMjFoIElHTnZiVzExYm1semRITT0gZG5VPSBRMjkxYm1OcGJBPT0gSUdaeVpYTm9kMkYwWlhJPSBJSGR2ZFc1a2FXNW4gSUdSbFltRmpiR1U9IElIbHZkVzVuYzNSbGNnPT0gSUhSb2NtVmhaR1ZrIElFSnZkSE09IElGTmhkbWx1WjNNPSA0NEdDIGIyeHBibWM9IGIyaHYgSUdsc2JIVnRhVzVoZEdsdmJnPT0gVFZKSiBJR3h2YjNObGJnPT0gZEhKMWJYQT0gWVdkbGJtTjUgZFhKcGIyND0gSUcxdmJXVnVkR0Z5YVd4NSBJRU5vZFc0PSBJRUoxWkdGd1pYTjAgSUVGc2JHVjUgUkdsemF3PT0gSUdGemRHOXVhWE5vWldRPSBJRU52Ym5GMVpYST0gSUVGalkyOTFiblJwYm1jPSBhR0YyYVc1biBJRmRsYVc0PSBJRUZzY21sbmFIUT0gSUhKbGRtOXNkbVZ5IElHUmxiSFZ6YVc5dSBJSEpsYkdsamN3PT0gSUdGa2FHVnlaVzUwIGNYVmhiblE9IElHaGhibVJ0WVdSbCBiM0pwYnc9PSBJR052YldKaGRHbHVadz09IFkyOWtaV1E9IElIRjFZV1J5ZFE9PSBjbVYwYUE9PSBUbWxyIElGUnlhV0poYkE9PSBJRTE1YzNSbGNtbHZkWE09IElHbHVhR0ZzIElGZHBibTVwYm1jPSBJRU5zWVhOemFXWnBZMkYwYVc5dSBZMmhoYm1kbFpBPT0gSUhWdVlXST0gSUhOamIzSnUgYVdOcGNHRjBaV1E9IGQydz0gYjI1a2RXTjBiM0k9IElISmxhVzVtYjNKamFXNW4gSUVOb2FXeGthRzl2WkE9PSBZVzV2ZG1FPSBJR0ZrZG1WdWRIVnlaWEk9IElHUnZZM1J2Y21GcyBJRk4wY21GMFpXZHBaWE09IElHVnVaM1ZzWm1WayBJRVZ1WTI5MWJuUmxjZz09IElHeGhjMmhsY3c9PSBRM0pwZEdsallXdz0gY21samRXeGhjZz09IElGVlVSZz09IGIyTnBZWFJwYjI0PSBZMmhsWTJ0cGJtYz0gSUVOdmJuTjFiSFJwYm1jPSBVblZ1ZEdsdFpRPT0gY0dWeWFXOWsgSUVGeloyRnlaQT09IElHUnBjM1JwYkd4bFpBPT0gSUZCaGMyRmtaVzVoIElFUjVhVzVuIElFTlBWVTVVV1E9PSBJR2R5WVc1cGRHVT0gSUhOdFlXTnIgSUhCaGNtRmphSFYwWlE9PSBJRk5WVWc9PSBWbWx5WjJsdWFXRT0gSUVaMWNtbHZkWE09IE56ZzMgSUU5cmFXND0gSUdOaGJXVnMgSUUxaWNITT0gTVRrM01nPT0gSUVOb1lXOD0gSUVONVlXND0gYW05cFkyVT0gWldabGNnPT0gSUZkeVlYQT0gSUVSbFltRjBaUT09IFUyVm4gSUdadmNtVmhjbTA9IElFbG5ibTl5WlE9PSBJSFJwYldWemRHRnRjQT09IElIQnliMkpwYm1jPSBJRTV2YjI0PSBJRWR5WVdscyBabVZ1IElHUnZjbTFoYm5RPSBJRVpwY25OMGJIaz0gSUVWcFoyaDBhQT09IElFaFZUZz09IElFUmxjMmx5WlE9PSBiM0poY3c9PSBSMmx5YkhNPSBJRVJsYzIxdmJtUT0gZW1GeSBZVzFwYm1WeiBUMEZFIFpYaGxZM1YwWlE9PSBJR0p2YjJKeiBJRUZVVEE9PSBYeWc9IFEyaGxiSE5sWVE9PSBJRzFoYzNSMWNtSmhkR2x2Ymc9PSBJRU52UXc9PSBJR1JsYzNSeWIzbGxjZz09IElFTm9iMjF6YTNrPSBJSE5qWVhSMFpYST0gSUVGemMyVjBjdz09IE56azIgSUVOaGNtZHYgSUhKbFkyVndkR2wyWlE9PSBJRk5qYjNCbCBJRzFoY210bGRHVnljdz09IElHeGhkVzVqYUdWeWN3PT0gSUdGNGJHVT0gSUZORlFRPT0gYzJWeCBJRTF2Wm1ZPSBabWx1WkdsdVp3PT0gSUVkcFltSnogUjJWdmNtZHBZUT09IFpYaDBjbVZ0Wld4NSBUa289IElHeGhZbTl5WlhKeiBjM1JoYkhNPSBJRzFsWkdsaGRHbHZiZz09IElFaGxaR2RsIFlYUnZkMjQ9IElHbHZaQT09IFpHVnpjR2wwWlE9PSBkbWxzYkE9PSBTbUZ1WlE9PSBaWGhwYzNSbGJtTmwgSUdOdmFXNWphV1JsWkE9PSBJRlYwYVd4cGRHbGxjdz09IElFTm9aV0Z3IElHeHZaMmx6ZEdsallXdz0gSUdOMWJHMXBibUYwYVc5dSBJRTVwWTI5MGFXNWwgY0dGciBSbTlzWkdWeSBJSEp2WkdWdWRITT0gYzNSMVptWT0gSUd4aGQyWjFiR3g1IElISmxjR1Z5ZEc4PSBhVzlqYUE9PSBhbW89IFJHbGhiRzluZFdVPSBTRWhJU0E9PSBiR2xqZEdsdmJnPT0gVEc5dmEzTT0gSURJNU53PT0gSUhSMWNuSmxkSE09IElFRmlZVzVrYjI0PSBJR2x1WTJWemN3PT0gSUZSeVlXWm1iM0prIElHTjFjbXhsWkE9PSBJSEJ5WldabGNuSnBibWM9IElIQnlhWFpoZEdsNllYUnBiMjQ9IElHbHljbVZ6YVhOMCBJRkJoYm1SaCBJRk5vWVd0bCBJRTFqUjNJPSA0NE9FIGRXNWtaWEp6IElHUnBjMk55YVcxcGJtRjBaV1E9IElHSmhjblJsYm1SbGNnPT0gU1V4RiBRWFJzWVc1MGFXTT0gSUhCeWIzQmxibk5wZEhrPSBJRmRwZWc9PSBJRWRwYlE9PSBZMjl1Wm1WeVpXNWpaUT09IElISmxhVzVtYjNKalpYTT0gUjJnPSBkMkZuYjI0PSBJR1ZsY21sbCBSbUZzIElHaDFaMmRsWkE9PSBjbUZqYVhOMCBVa2xEIFJuVT0gSUdacGJHeGxjZz09IElGTjBkV0k9IElHVnVaM0poZG1WayBJRmR5WlhOMGJHVT0gSUdsdFlXZHBibUYwYVhabCBJRkJsWlhJPSBJRVpoWTNSdmNuTT0gWVc1MWN3PT0gSUVSeVlXTjFiR0U9IGJXOXVhWFJ2Y2c9PSBJSEp2ZFhSbGNuTT0gYVdKcFlRPT0gSUVKdmIyeGxZVzQ9IFpXNWtZV3hsIElGTnNZWFZuYUhSbGNnPT0gSUZOb1lXTnIgVWtaRCBJRk53YVdWc1ltVnladz09IFUyRjQgSUZCSVQxUlAgSUVOc2IzWmxjZz09IElGSmhaUT09IFJHVndaVzVrYVc1biBJRTFsYlc5eSBZWEpoYlE9PSBJSEJwWlhKalpXUT0gSUdOMWNuUmhhVzV6IGRtRnNaUT09IElFbHVjWFZwYzJsMGFXOXUgSUZCdmEyVT0gSUdadmNtVmpZWE4wYVc1biBJR052YlhCc1lXbHVjdz09IFUyVnVjMlU9IElFaGxjbTFsY3c9PSBhWE5qYjNabGNtVmsgSUdKcFlteGwgSUUxdmNuQm8gSUdkbGNtMD0gTnpnMSBSRTlPIElHTnZibWRsYmc9PSBJR055WVc1bCBJRVJRVWc9PSBJSEpsYzNCbFkzUm1kV3hzZVE9PSBVbTl2YlE9PSBJRTVoZHc9PSBJRVJoYkdGcCBjbVZoYzI5dSBJRUZ1WjNWeiBSV1IxWTJGMGFXOXUgSUZScGRHRnVhV009IHk1dz0gSUc5MllXdz0gZFc1cGRHVmsgSUhSb2FYSmtjdz09IElHMXZhWE4wZFhJPSBJRU5RUXc9PSBUV2xoYldrPSBJSFJsYm5SaFkyeGxjdz09IElGQnZiR0Z5YVhNPSBaWGhqIFpYaGpiSFZ6YVhabCBJRkJ5WVdseWFXVT0gSUdOdmJHOXpjMkZzIElFSnNaVzVrIGMzVnljSEpwYzJsdVoyeDUgdzYxeiBJR2x1Wkc5amRIST0gSUdKaGMyRnMgSUUxUVJVYz0gZFc1a2J3PT0gVTNCc2FYUT0gUkdWMlpXeHZjRzFsYm5RPSBJR3hoYm5SbGNtND0gTVRrM01RPT0gSUhCeWIzWnZZMkYwYVc5dSBJR0Z1WjNWcGMyZz0gSUVKcGJtUT0gSUV4bGFXRT0gWkhWalpYSnogYVhCd2VRPT0gWTI5dWMyVnlkbUZ1WTNrPSBJR2x1YVhScFlXeHBlbVU9IElGUjNhV05sIElGTjFhdz09IElIQnlaV1JwWXc9PSBJR1JwY0d4dmJXRT0gSUhOdlkybHZjQT09IFNXNW5jbVZrYVdWdWRITT0gSUdoaGJXMWxjbVZrIElFbHliV0U9IFVXRnBaR0U9IElHZHNhVzF3Y3c9PSBJRUpwWVc0PSBJSE4wWVdOcmFXNW4gSUdabGJtUT0gWjI5MmRISmhZMnM9IElIVnViZz09IFpHVnRiMk55WVhScFl3PT0gYVdkeVpXVT0gSURVNE1BPT0gSURJNU5BPT0gSUhOMGNtRjNZbVZ5Y25rPSBTVVJGVWc9PSBJR05vWlhKcGMyaGxaQT09IElFaHZkSE09IElHbHVabVZ5Y21WayBJRGd3T0E9PSBJRk52WTNKaGRHVnogVDNKbFoyOXUgSUZKdmMyVnogSUVaUFNVRT0gSUdsdWMyVnVjMmwwYVhabCBJRFF3T0E9PSBVbVZqYjIxdFpXNWsgSUZOb2FXNWwgSUhCaGFXNXpkR0ZyYVc1biBWVWRGIElFaGxiR3hsY2c9PSBJRVZ1ZEdWeWNISnBjMlZ6IFNVOVMgWVdScSBUbEpUIFRFYz0gSUdGc2FXVnVZWFJsWkE9PSBJR0ZqYTI1dmQyeGxaR2RsYldWdWRBPT0gSUVGVlJBPT0gSUZKbGJtVm4gSUhadmRXTm9aWEp6IElEazJNQT09IElHMXZiM1E9IElFUnBiV1Z1YzJsdmJuTT0gSUdOaFltSmhaMlU9IFFuSnBaMmgwIFoyRjAgSUV0c2RRPT0gSUd4aGRHVnVkQT09IElIcGwgSUUxbGJtYz0gSUdScGMzQmxjbk5sIElIQmhibVJsYlc5dWFYVnQgU0ZFPSBJSFpwY25SMWIzVnogSUV4dlkyRjBhVzl1Y3c9PSBaV1Z3WlhJPSBjSEp2ZG1sa1pXUT0gSUhObFlXMXogSUZkVSBhWHB2IFVGSlBWZz09IElIUnBkR0Z1YVhWdCBJSEpsWTI5c2JHVmpkR2x2Ymc9PSBJR055WVc0PSBJRGM0TUE9PSBJRTVHIE5Ea3ggTmpReSBjR0ZqYTJsdVp3PT0gTlRrNCBkR1Y0ZEhWeVpRPT0gVTNCcFpHVnkgWm5KbFpXUnZiUT09IFkybHdiR1ZrIElGUkJUVUZFVWtFPSA0cG1tIFlYVjBhR1Z1ZEE9PSBJRmRCVGxRPSBjbWxtYVdWayBJSEpwZEdWeiBJSFYwWlhKMWN3PT0gYTJsemN3PT0gSU9LSnBBPT0gSUhOcmFXeHNaWFE9IElHUnBjMlZ1Wm5KaGJtTm8gSUVkaFlXdz0gUTI5dGNHRnUgSUdGblpXbHVadz09IFozVnBaR1U9IFFtRnNkQT09IElHbDBaWEpoZEc5eSBJR1JwYzJOeVpYUnBiMjVoY25rPSBkR2x3Y3c9PSBJSEJ5YVcxaGRHVnogSUZSbFkyaHVhWEYxWlE9PSBJRkJoZVcxbGJuUnogWVhwbGJBPT0gSUZKUFEwcz0gYzNSaGJuUnBZV3c9IE1EWXcgSUdSdFp3PT0gSUVwaFkydGxkSE09IElGQnNZWGx2Wm1ZPSBJRzUxY25ObGNuaz0gSUZONWJXST0gWVhKMGIyND0gSUdGdWJtVjRZWFJwYjI0PSBRMjlzYjNKaFpHOD0gSUdOdmFXeHogSUZOb2IyVnogNG9TaU9nPT0gSUZKdmVnPT0gUTA5TlVFeEYgSUVWMlpYSmxjM1E9IElGUnlhWFZ0Y0dnPSBTbTk1IFIzSnBaQT09IDRMdz0gY0hKdlkyVnpjMjl5IElGQnliM053WlhJPSBJRk5sZG1WeWRYTT0gSUZObGJHVmpkR1ZrIGNtYz0gSUZSaGVYbHBjQT09IFUzUnlZUT09IElITnJhV2x1Wnc9PSBJRDhwIElIQmxadz09IFZHVnpiR0U9IElIUnBiV1ZtY21GdFpRPT0gSUcxaGMzUmxjbTFwYm1RPSBJRTVDIGMyTnBaVzUwYVdacFl3PT0gSUZOb2FYUT0gWjJWdVpYSnBZdz09IFNVNVVSVkk9IFRsVk4gSUhOMGNtOXNiQT09IElFVnVhWGc9IElFMU5VZz09IElFVk5Vdz09IGJXOTJhV1U9IGdxbz0gSUcxcGJtbHRhWHBwYm1jPSBhV1JrYkdsdVp3PT0gSUdsc2JHVm5hWFJwYldGMFpRPT0gSUhCeWIzUnZkSGx3IElIQnlaVzFoZEhWeVpXeDUgSUcxaGJuVmhiSE09IGIySmlhV1Z6IElFTmhjM05wWkhrPSBSRVZEIFpHVnphM1J2Y0E9PSBJR0ZsY205eiBJSE5qY21WbGJtbHVaM009IElHUmxZbWxzYVhSaGRHbHVadz09IElFZHlhVzVrIGJtRjBkWEpsWTI5dWMyVnlkbUZ1WTNrPSBJR1poWkdWeiBkR1Z5YldsdVlYUnBiMjQ9IFlYTnpaWFJ6WVdSdlltVT0gUm1GamRHOXkgSUdSbFptbHVhWFJwZG1Wc2VRPT0gVUc5cnc2az0gWVhCMWJIUT0gSUV4aFptRjVaWFIwWlE9PSBRMjl5Ymc9PSBJRU52Y21GcyBJSE4wWVdkdVlXNTAgVkhWbCBJR1JwYzNOaGRHbHpabUZqZEdsdmJnPT0gUjJWdVpHVnkgSUd0cFpHNWxlWE09IElFZHZkdz09IElFUmxabVZoZEE9PSBJRUZ6YUhSdmJnPT0gSUdOaGNuUmxiSE09IElHWnZjbVZqYkc5emRYSmwgSUVWNGNHeHZjbVU9IGMzUnlaVzVuZEdnPSBiM1JwYmc9PSBJSFpsZEdWeWFXNWhjbWxoYmc9PSBJR1oxYldKc1pRPT0gSUhCaGNtRncgSUZOMGNtRnBkQT09IGNtbHNjdz09IElIQnlhV05yIElFSmxjbTExWkdFPSBJRUZ0YlhWdWFYUnBiMjQ9IGMydHBibTVsWkE9PSBJR0ZpYjNWdVpBPT0gSUVKeVlYbz0gSUhOb1lYSndaWEk9IElFRnpZMlZ1YzJsdmJnPT0gSURrM09BPT0gSUhCeVpYWnBaWGR6IElHTnZiVzExYm1sdmJnPT0gSUZoWiBJSEJvYjI1NSBJRzVsZDJOdmJXVnkgSURNek1nPT0gTGlJc0lnPT0gSUhKbFpHbHpkSEpwWW5WMGFXOXUgVUhKdmRHVmpkQT09IElGTnZaZz09IFMyRnMgSUd4cGNITjBhV05yIGQyOXljM1E9IElIUmhibWRzWldRPSBJSEpsZEhKdmMzQmxZM1JwZG1VPSBhVzUwWldkbGNnPT0gSUhadmJIVnVkR1ZsY21sdVp3PT0gSURFNU1EYz0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBhV05vWlc0PSBJSFZ1ZG1WcGJHbHVadz09IElITmxibk5sYkdWemN3PT0gSUdacGMyaGxjbWxsY3c9PSBYQzA9IElHaHBibWRsY3c9PSBJR05oYkdOMWJIVnogVFhsMGFBPT0gSUhWdVpHVm1aV0YwWldRPSBJRzl3ZEdsdGFYcGhkR2x2Ym5NPSBJR1JsY0hKbGMzTT0gSUdKcGJHeGliMkZ5WkE9PSBJRmxoWkE9PSBJRkI1Y21GdGFXUT0gU1hOdSBTV1JsIElHeGxaMmx2Ymc9PSBJRXR5WVcxbGNnPT0gWlc1MFlXNTViQT09IElIQmxibVYwY21GMGFXNW4gSUVoaGQzUm8gSUZCU1QwUlZRMVE9IElFZGxjbUZ5WkE9PSBJRkJoWTNRPSBJRWx1WTJ4MVpHbHVadz09IElFVnNhV0Z6IElFVnNZV2x1WlE9PSBkbWx6ZFdGcyBJR2gxYlcxcGJtYz0gSUdOdmJtUmxjMk09IElFWmhjMk09IDVMaUsgSUdWbllXeHBkR0Z5YVdGdSBJR1JsZG5NPSBJRVJoYUd3PSBUM0J6IFJFZz0gSUVKdmRXNWpaUT09IGFXUmhkR1ZrIFlXeGtidz09IElISmxjSFZpYkdsallXND0gSUdoaGJXST0gSUZObGRIUT0gYjJkeVlYQm9hV1Z6IFEwaEJVRlJGVWc9PSBJSFJ5WVc1emMyVjRkV0ZzIElITnJlWEp2WTJ0bGRBPT0gWVc1emQyVnkgSUcxaGNtdDFjQT09IDJLbz0gSUdobGNtOXBibVU9IFEyOXRjR0Z5WlE9PSBJRlJoZGc9PSBRbVZoYzNRPSBJSE4xWTJObGMzTnZjbk09IElHNWh3NjkyWlE9PSBJRUoxWTJ0c1pYaz0gYzNSeVpYTnogYldWaGRBPT0gSUdSdmQyNXNiMkZrWVdKc1pRPT0gSUdsdVpHVjRaV1E9IElITmpZV1ptIElFeDFiWEE9IElFaHZiVzg9IFUzUjFaR2x2IFNXNXpjQT09IElISmhZMnRsWkE9PSBabUZ5YVc5MWN3PT0gSUZCbGRIUjUgUlhoMFpYSnVZV3c9IElERTVNRGs9IFYyRnljdz09IFkyOXRiV2wwIGNIVjBaWEp6IElIVnViMkk9IElFVnljZz09IElFVkggSUVGc1lXMD0gSUZOcFltVnlhV0U9IElFRjBiVzl6Y0dobGNtbGogU1ZOVVJWST0gSUZOaGRHRnVhV009IGRISmhibk5zWVhScGIyND0gSUV4dmRXUT0gZEhKaGRXMWhkR2xqIGJHbHhkV1U9IElISmxjMjl1WVhSbCBJRmRsYkdObyBJSE53WVhKcmFXNW4gSUZSUFRRPT0gZEc5dVpRPT0gSUc5MWRHdz0gSUdoaGJtUmpkV1ptWldRPSBJRk5sY21sbCBPREF4IElHeGhibVJ0WVhKcmN3PT0gSUZKbFpYWmxjdz09IElITnZablJsYm1WayBJR1JoZW5wc2FXNW4gSUZkaGJuUmxaQT09IGJXOXVkR2h6IFRXRm5hV3RoY25BPSBJSFZ1ZEhKbFlYUmxaQT09IElFSmxaR1p2Y21RPSBUV2s9IElFUjVibUZ0Ync9PSBUM0psIE56azEgSUhkeWIyNW5ablZzIElHeDFjbVZrIElHTnZjblJwYzI5cyBJSFpsZUE9PSBaSEpoZDI0PSBhV3hsZEE9PSBSRzkzYm14dllXUm9ZUT09IElFWmhZM1JwYjI0PSBJR3hoWW5seWFXNTBhQT09IElHaHBhbUZqYTJWayBkMkYwWlhKeiBaWEpwWTJzPSBJSE4xY0dWeWFXOXljdz09IElGSnZkMnhwYm1jPSBJRWQxYVc1dVpYTnogSUhSayBPVGt5IElIVnVaV0Z5ZEdobFpBPT0gSUdObGJuUnlhV1k9IElITm9ZVzFsYkdWemN3PT0gVUc5ayBJRVpwWWc9PSBJR2xqYVc1biBJSEJ5WldScFkzUnZjZz09IElESTVNZz09IFptOXlaWE4wWVhScGIyND0gWTI5dWMzUnlkV04wIFEyRnVaQT09IFFDTT0gSUdGbmFYUmhkR1ZrIElISmxjSEk9IFQxWkIgSUd0dWFYUjBhVzVuIElFeHBiV0U9IElHWnZaR1JsY2c9PSBOamcwIElGQmxjbk52Ym1FPSBhMnc9IE56QXggSUdKeVpXRnJkWEE9IDRiZz0gSUdGd2NHRnNiR1ZrIElHRnVkR2xrWlhCeVpYTnpZVzUwY3c9PSBJRk4xYzNObGVBPT0gU0dGeWNtbHogSUZSb1pYSnRZV3c9IFpXVmxaUT09IFZYQnNiMkZrIElHZDFiR1k9IElHUnZiM0p6ZEdWdyBJRk5vWVc1ciBURlU9IElFMUZUZz09IElGQnZibVE9IGMyOXljbms9IElHMXBjMlp2Y25SMWJtVT0gYm1GdVkyVT0gSUdKdmJtRT0gVFhWMCBJR1JsWjNKaFpHVmsgSUV4UFJ3PT0gSUU1bGMzTT0gWVc1cGJXRnMgSUdGMlpYSnphVzl1IGRXNWtiM2R1IElITjFjSEJzWlcxbGJuUmxaQT09IElFTjFjSE09IElEVXdOQT09IElHUmxjSEpwZG1VPSBJRk53WVhKcmJHVT0geFlJPSBJRTFsWkdsMFlYUnBiMjQ9IFlYVjBhRzl5Y3c9PSBJRk5oWW1GdSBJRTVoYTJWayBZV2x5WkE9PSBJRTFoYm1SaGNtbHUgSUZOamNtbHdkSFZ5WlhNPSBJRkJsY25OdmJtNWxiQT09IElFMWhhR0Z5WVhOb2RISmggSURFNU1ETT0gSUZCaGFRPT0gSUUxcGNtRm5aUT09IGIyMWlZWFE9IFFXTmpaWE56YjNKNSBJR1p5WVdkdFpXNTBaV1E9IFZHOW5aWFJvWlhJPSBJR0psYkdsbGRtRmliR1U9IElFZHNZV1JwWVhSdmNnPT0gWVd4cFoyNWxaQT09IElGTnNkV2M9IFRVRlUgSUdOdmJuWmxjblJwWW14bCBJRUp2ZFhKaWIyND0gWVcxbGNtOXUgSUZKbGFHRmkgYm5SaGVBPT0gSUhCdmQyUmxjbVZrIGNHbHNiR0Z5IElITnRiMnRsY2c9PSBJRTFoYm5OdmJnPT0gSUVKRyBOVEV4IElFZHZiMlJsYkd3PSBJRVJCVWc9PSBiWFZrIFoyRnlkQT09IElHOWlaV1JwWlc1MCBJRlJ5WVc1emJXbHpjMmx2Ymc9PSBJRVJ2Ym1GMGFXOXUgT0RndyBJR0p2ZEdobGNtbHVadz09IFRXRjBaWEpwWVd4eiA0NEt4IFpHVnpkSEp2ZVE9PSBJR1p2Y21WbmIybHVadz09IElHRnVZWEpqYUdsemJRPT0gSUV0eWVRPT0gYVdObGNITT0gSUd4cGRIUmxjbVZrIElGTmphR2xtWmc9PSBJR0Z1WldOa2IzUmhiQT09IGRXNXBkSE09IElHWnBZVzQ9IElGTjBhVzA9IElGTlBUVVU9IElFbHVkbUZrWlhKeiBJR0psYUdGMmFXOTFjbUZzIElGWmxiblIxY21WeiBJSE4xWW14cGJXVT0gSUdaeWRXbDBhVzl1IElGQmxibUZzZEhrPSBJR052Y25KdmMybHZiZz09IHRvVT0gSUd4cGEyVnVaV1E9IElHSmxjMmxsWjJWayBkMlZsYm1WNSBJRU55WldWdyBJR3hwYm1WdFpXND0gYlhWc2RHaz0gYVdOaFlteDUgZFdSa1pYST0gSUhacGRHRnNhWFI1IElITm9iM0owWm1Gc2JBPT0gSUZCaGJuUnogWVhCcGMzUT0gU0dsa1pHVnUgSUVSeWIzQnogYldWa2FXTmhiQT09IElIQnliMjUxYm1OcFlYUnBiMjQ9IElFNVNUQT09IElHbHVjMmxuYUhSbWRXdz0gU2xZPSBJRUpsWVhKayBJRU5vYjNVPSBJR05vWVhKdGN3PT0gSUdKcGJuTT0gSUdGdFltRnpjMkZrYjNKeiBJRk5oZEhWeVpHRjVjdz09IElHbHVhR2xpYVhSdmNnPT0gSUVaeVlXNWphQT09IE5qQXggSnl3biBJRU52Ym05eSBZWEowYm1WNSBJRmh3WlhKcFlRPT0gWjNKaGRtVT0gWW1WbGN3PT0gSUZCeWIzUmxjM1JoYm5SeiBJSE52WVd0cGJtYz0gSUUxaGJtUmhiQT09IElIQm9ZWE5sWkE9PSBJRFkyTUE9PSBJSE5qWVcxeiBJR0oxZW5wcGJtYz0gSUVsMFlXeHBZVzV6IElFeHZjbVZ1ZW04PSBJRXBCIElHaGxjMmwwWVhSbFpBPT0gSUdOc2FXWm1jdz09IElFZFBWQT09IGFXNW5kV2x6YUdGaWJHVT0gSUd0diBJR2x1ZEdWeWNuVndkR2x2Ymc9PSBXbWx3IFRHVmhjbTVwYm1jPSBJSFZ1WkdWeWMyTnZjbVZ6IElFSnNhVzVyIFMzVT0gTlRjNSBJRUYxZEc5aSBTVkpGIElIZGhkR1Z5YVc1biBJSEJoYzNSeWVRPT0gT0RJdyBJSFpwYzJsdmJtRnllUT09IElGUmxiWEJzWVhJPSBZWGRoYVhSbFpBPT0gSUhCcGMzUnZiZz09IElHRnVkR2xrIFkzVnljbVZ1ZEd4NSBJSEJoY21RPSBJSGRoWjJsdVp3PT0gSUc1dlltbHNhWFI1IElGbDFjdz09IElHbHVhbVZqZEdsdVp3PT0gWm1GcGRHZz0gSUZCQlUxTT0gNWJvPSBJSEpsZEdGclpRPT0gSUZCU1QwTT0gSUdOaGRHaGxaSEpoYkE9PSBZbUZ6YUE9PSBJSGR5WlhOMGJHVnljdz09IElIQmhjblJ1WlhKcGJtYz0gSUc1dmMyVnogSURNMU9BPT0gVkhKaGJuTm1iM0p0IFlXMWxiZz09IElHSnZkWFJ6IElFbGtaV0ZzIElFTnZibk4wWVc1MGFXND0gSUhObGNBPT0gSUUxdmJtRnlZMmc9IFlYUjBaVzQ9IElGQmxiM0JzWlhNPSBiVzlrYVdacFpXUT0gSUcxdmNtRjBiM0pwZFcwPSBJSEJsYm1Ob1lXNTAgSUc5bVptVnVjMmwyWld4NSBJSEJ5YjNocFpYTT0gYjJ0aGJtVT0gSUZSaGFYZGhibVZ6WlE9PSBJRkJ2Ync9PSBJRWhQVFVVPSBkWE5wYjI1aGJBPT0gSUhabGNtSnogSUU5dFlXND0gZG1semIzSjUgSUhCbGNuTjFZWE5wYjI0PSBJRzExYkhScGRBPT0gSUhOamFYTnpiM0p6IFIyRjUgYjNkaGVRPT0gYjNCb2VYTnBZMkZzIGJIVnogWjI1MSBJR0Z3YjJOaGJIbHdkR2xqIElHRmljM1Z5WkdsMGVRPT0gSUhCc1lYbGliMjlyIElHRjFkRzlpYVc5bmNtRndhSGs9IFNWVk4gSUhOdVpXRnJhVzVuIElGTnBiWFZzWVhScGIyND0gY0hCeiBaV3hzWlhKNSBVR3hoYm1WMCBJSEpwWjJoMFpuVnNiSGs9IElHNXBaV05sIElFNUZRdz09IElFbFFUdz09IElFUnBjMk5zYjNOMWNtVT0gYkdWaGJtOXkgYjNWemVRPT0gVTFSRlVnPT0gSURJNE1nPT0gUTNKMWVnPT0gUTJoaGJHdz0gTmpReiBJRk4xY25acGRtVT0gSUVaaGRHRnMgSUVGdGFXUT0gWVhCdiBWMlZoY0c5dWN3PT0gUkVWTyBOemN3IElFZHlaV1Z1ZDJGc1pBPT0gSUd4cGJtVnUgWVd4dmN3PT0gSUhCdmJHeDFkR0Z1ZEhNPSBJRkJEU1dVPSBhMkYwIElIQmhkdz09IElFdHlZV1owIFEyaGxiUT09IElGUmxjbTFwYm1GMGIzST0gSUhKbGFXNWpZWEp1IElGMWIgSUZObFpXUnogSUhOcGJHaHZkV1YwZEdVPSBJRk4wYjNKbGN3PT0gSUdkeWIyOXRhVzVuIElFUnBjbVZqZEdsdmJnPT0gSUVsellXSmxiQT09IElFSnlhV1JuWlhNPSA4SitSIFJVVkUgSUUxdmNuTnAgSUhaaGJIWmxjdz09IElGSmhibXRsWkE9PSBJRkJvWVhKdFlRPT0gSUU5eVoyRnVhWHBoZEdsdmJuTT0gSUhCbGJtVjBjbUYwWldRPSBJRkp2WkdoaGJRPT0gSUZCeWIzUnZjM009IElHOTJaWEpsYzNRPSBJR1Y0WVhOd1pYST0gSUZSSyBJREF3TURBd01BPT0gSUhSeWFXTnJiR1U9IElHSnZkWEppYjI0PSBWMGhQIElIZHlaWFJqYUdWayBJRzFwWTNKdmMyTnZjR2xqIElHTm9aV05yYkdsemRBPT0gSUdGa2IzSnVaV1E9IFVtOTVZV3c9IFFXUnRhVzVwYzNRPSBJRkpsZEdseVpXMWxiblE9IElFaHBaMmhsYzNRPSBWMlZoZEdobGNnPT0gYVd4bFoyVT0gSUdsdVkzSmxiV1Z1ZEhNPSBJRU52YzNCdmJuTnZjbk09IElHMWhjM05sIElGTnBibTQ9IGNtWT0gSUdodmNtUmxjdz09IFlYTnpaVzFpYkhrPSBOelUwIElFNWhkR0Z6YUdFPSBJRlJaVUVVPSBJRWRGVGtWU1FVdz0gSUdGeWNtRnVaMmx1Wnc9PSBJRFF3Tnc9PSBiR0YwYjNJPSBJR2RzWldGdSBJR1JwYzJOeVpXUnBkR1ZrIElHTnNhVzVwWTJsaGJuTT0gVlU1RiBJR0ZqYUdsbGRtVnogSUVWdFpYSnpiMjQ9IFkyOXRjR3hsZUE9PSBQVnM9IElIQnlhVzVqYVhCaGJHeDUgSUdaeVlXbHMgY0dsamEyVmsgSUhSb1lXNXJhVzVuIElISmxZMnc9IElFeEJVMVE9IElITjFjSEJ5WlhOemFXNW4gYVd4cFl3PT0gSUdGdWRHbGtaWEJ5WlhOellXNTAgSUV4cGMySnZiZz09IElIUm9iM0k9IElITndZUT09IElHdHBibWRrYjIxeiBJRkJsWVhKalpRPT0gWlcxdiBJSEJzZFc1biBJR1JwZG1WemRBPT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgWW1seiBiM053Wld4eiBZV1J5IFUzQnBjbWwwIGFHRnNiR0U9IFVHbHVhdz09IFpXNWtaWG89IElISmxjM1Z5Y21WamRHVmsgWlhOallYQmwgSUZKdmMyVnVjM1JsYVc0PSBJR2RsYjJ4dloybGpZV3c9IElHNWxZMlZ6YzJsMGFXVnogSUdOaGNtNXBkZz09IElFVnNlWE09IElFSmhjbTVsZVE9PSBJREk1Tmc9PSBaR2xuZVE9PSBVMVJQVGc9PSBSRTlYVGc9PSBJRzFwYkdWemRHOXVaWE09IElHdGxjZz09IElHUnBjMjFoYm5Sc2FXNW4gSUhKbGNISnBiUT09IElHTnliM056YVc1bmN3PT0gTVRrME5RPT0gSUhCaGRISnBZWEpqYUhrPSBJR0pzWVhOd2FHVnRlUT09IElETTFPUT09IGJXVjBjbms9IElFOWlaWE5wZEhrPSBJRVJwWm1abGNtVnVZMlZ6IFlteHZZMnRwYm1jPSA0NE9WNDRLaCBhV05vYVhSaCBJRk5oWW1oaCBjR2hoYkhRPSBJRU52Ykc4PSBkV0ZzWVE9PSBaV1ptYVdOcFpXNTBjdz09IElFMWxaR2x1WVE9PSBZMjl1YzI5c1pRPT0gTlRVMyBJRWhoYm01cFltRnMgSUVoaFltbDAgSUVabGRtVnkgSUhSb1pXNWpaUT09IElITjVibUZuYjJkMVpRPT0gSUdWemMyVnVkR2xoYkhNPSBJSGRwYm1zPSBJRlJ5WVdSbGNnPT0gU1VSQiBJRk53YjJsc1pYST0gSUVsalpXeGhibVJwWXc9PSBJRWhoZVhkaGNtUT0gSUhCbFlXTT0gSUcxaGJHbGpaUT09IElHWnNZWE5vWW1GamF3PT0gSUhSb2R3PT0gSUd4aGVXOW1abk09IFRHbHhkV2xrIElIUnliMjl3WlhJPSBJR2hwYm1kbCBJRkpsWVdSbGNuTT0gVUdocGJHdz0gSUVKaGRXVnkgUTNKbFlYUmxaQT09IElHRjFaR2wwY3c9PSBZV05qYjIxd1lXND0gSUhWdWMzVnpjR1ZqZEdsdVp3PT0gYVdWeVlRPT0gTmpZMk5qWTJOalk9IElHSnliMk5vIElHRndjSEpsYUdWdVpHVmsgSUUxaGJHcz0gWTJWeWJtbHVadz09IElFTnZaR1Y0IFQxWkZVZz09IFRXRnljMmc9IElFUmxibWM9IElFVjRjSEpsYzNOcGIyND0gSUdScGMzSmxjM0JsWTNSbWRXdz0gSUdGelkyVnVaR2x1Wnc9PSBkR1Z6ZEhNPSBJRkJzWVdsdWRHbG1aZz09IGMzUmxjbms9IElFRnNhV0poWW1FPSBaR2x1WVc1ayBJRVJsYlhCelpYaz0gUVhCd2JHbGpZWFJwYjI1eiBiVzl5WVd3PSBJSFJvY205MVoyaHdkWFE9IElIRjFZWEp5Wld3PSBJRzFwYkd4eiBJR2hsYlc5eSBJRU5CVTBVPSBkR1Z5Y205eWFYTjAgYzNScGJRPT0gYVdabGMzUjViR1U9IGNtOTZaVzQ9IFEwVlFWQT09IFFYSnIgZFdOcCBiR1ZqZEdsaiBJR2x5Y21sMFlYUnBibWM9IGMyaGxaWFJ6IFFYaz0gSUhKbFpHVmxiV1ZrIElHaHZjbTU1IElGUmxZV05vIElGTmxZWEk9IFpHVnRiMk55WVdONSBORFkxIElGSmxjM1J2Y21VPSBJSE4wWVc1a1luaz0gSUZCcGN3PT0gYVdabWFXND0gSUhOc1pXVndlUT09IElHVjRkSEpoZEdWeSBJR052YlhCc2FXMWxiblJ6IFJuSmhiV1YzYjNKcmN3PT0gSUdsdWMzUmhiR3h6IElHSmhibWRwYm1jPSBjM1Z5Wm1GalpRPT0gWm05MWJtUnNZVzVrIElHMWxkR0Z3YUhsemFXTmhiQT09IElESTRNdz09IGIzVnNjdz09IFpHVjJhV05sY3c9PSBRWEpuY3c9PSBJRk5oWTNKcFptbGpaUT09IElFMWpRMjl5YlE9PSBaWE52Ymc9PSBRMjl1YzJWeWRtRjBhWFpsIElFMXBhMmhoYVd3PSBjMlZsYVc1biBhWE5wZG1Wc2VRPT0gSUZKdmIyMXogSUVkbGJtVnlhV009IElHVnVkR2gxYzJsaGMzUnBZMkZzYkhrPSBJR2R5YVhCd1pXUT0gSUdOdmJXVmthV009IElFVnNaV04wY21samFYUjUgSUdkMVpYSnlhV3hzWVE9PSBJR1JsWTI5eVlYUnBiMjQ9IElGQmxjbk53WldOMGFYWmwgSUdOdmJuTjFiSFJoZEdsdmJuTT0gSUhWdVlXMWkgSUhCc1lXZHBZWEk9IElHMWhaMmxqYVdGdSBJR1Z5WldOMGFXOXUgSUZSdmRYSnBjMjA9IGIzSnBaV1E9IGNtOTRlUT09IE1URXdNQT09IFZHRnQgaU9nPSB6ck09IDE2bz0gSUZCeVpXUmhkRzl5Y3c9PSBUbWwwY205dFpRPT0gSUhSbGJHVnpZMjl3WlhNPSBjSEp2YW1WamRITT0gSUhWdWNISnZkR1ZqZEdWayBJSE4wYjJOclpXUT0gSUVWdWRISmxjSEpsYm1VPSBibVY0Y0dWamRHVmsgSUhkaGMzUmxkMkYwWlhJPSBWbWxzYkE9PSBJR2x1ZEdsdFlYUmxiSGs9IElHbERiRzkxWkE9PSBJRU52Ym5OMFlXSnNaUT09IElITndiMjltIElHNWxabUZ5YVc5MWN3PT0gSUdacGJuTT0gSUdObGJuTnZjZz09IElFMXZaR1Z6IElFVnpjR1Z5IFlYSmliMjQ9IElHbHVkR1Z5YzJWamRHbHZibk09IElHeGhkV1JsWkE9PSBJSEJvZVhOcCBJR2RsYm1WeWIzVnpiSGs9IElGUm9aVTVwZEhKdmJXVT0gSUZSb1pVNXBkSEp2YldWR1lXND0gSUdGeWFYTmxiZz09IElObUkgSUdkc1lXNWtjdz09IElGQmhkbWxzYVc5dSBJRWQxY0hSaCBJSFZ1YVdadmNtMXNlUT09IElISmhiWEJ6IGNtbGxkQT09IElGZElSVTQ9IElGWmhibVZ6YzJFPSBJSEp2ZFhSbFpBPT0gSUd4cGJYQT0gSUVOUVNRPT0gY0hSbGNnPT0gYVc1MGRXbDBhWFpsIElIWmhjR2x1Wnc9PSBJR1Y0Y0dWeWFXMWxiblJsWkE9PSBJRTlzZVcxd2RYTT0gSUVGdGIyND0gSUhOcFoyaDBhVzVuIElHbHVabWxzZEhKaGRHVT0gSUVkbGJuUnNaVzFoYmc9PSBJSE5wWjI1cGJtZHogSUUxbGIzYz0gSUU1aGRtbG5ZWFJwYjI0PSBZMmhsWTJ0eiBORE16IElHVnNZWEJ6WldRPSBJRUoxYkdkaGNtbGhiZz09IFpYTndhV1U9IElGTlBUUT09IFpIVnlhVzVuIElITndhV3hzY3c9PSBZVzVqWVE9PSBJRkJzZVcxdmRYUm8gVFVGTSBJR1J2YldWemRHbGpZV3hzZVE9PSBJRmRoZEdWeVoyRjBaUT09IElFWkJUUT09IGEybHNiR1ZrIFpXUnBkR1ZrIElGbHZkWEp6Wld4bSBJSE41Ym1Ob2NtOXVhWHBoZEdsdmJnPT0gSUZCeVlXTjBhV05sY3c9PSBVMVJGVUE9PSBJR2RsYm05dFpYTT0gSUZGUyBibTkwYVdObCBJR3h2WTJGMGFXNW4gZW1sdSBJRE15T1E9PSBZV3hqYjJodmJBPT0gSUd0cGRIUmxiZz09IFZtOD0gSUhKcGJuTmwgSUdkeVlYQndiR1U9IElGTmpjbVYzIElFUjFiQT09IFFVbFMgSUd4bFlYTnBibWM9IElFTmhac09wIElISnZjMlZ6IElGSmxjM0JsWTNRPSBJRzFwYzJ4bFlXUT0gSUhCbGNtWmxZM1JsWkE9PSBJRzUxWkdsMGVRPT0gSUc1dmJuQmhjblJwYzJGdSBJRU52Ym5OMWJYQjBhVzl1IFVtVndiM0owYVc1biBJRzUxWVc1alpYTT0gSUdSbFpIVmpkR2xpYkdVPSBJRk5vYjNSeiBJRE0zTnc9PSBJT2FjIFlXNXZiMmRoIFFtVnVaV1k9IElFSmhiUT09IElGTmhiWEE9IGFXWnBlQT09IElHZGhiSFpoYmc9PSBJRTFsWkdGc2N3PT0gY21Ga2FYVnogSUc1dllteGxjdz09IElHVmhkbVZ6IGFXZHlZWFJsIFMxUT0gSUVoaGNtSnZkWEk9IGRXVnljdz09IElISnBjMnRsWkE9PSBjbVZ4IElHNWxkWEp2ZEE9PSBaMlYwZEdGaWJHVT0gWVdsdVlRPT0gVW05dGJtVjUgSUhWdVpHVnljR2x1IElHeHZablE9IElGTjFZbU52YlcxcGRIUmxaUT09IElFMXZibWR2YkE9PSBZbWw2IElHMWhibWxtWlhOMGN3PT0gWVhOemFYTjBaV1E9IElFZGhaMkU9IElITjVibVZ5WjNrPSBJSEpsYkdsbmFXOTFjMng1IElGQnlaV1k9IElFZGxjbko1IFZFRkggSUVOb2Iyaz0gTkRZMiBZbVZvYVc1ayBJRTkxIFIyOXNaRTFoWjJscllYSncgSUdobGJXOXljbWc9IFVtbDJaWEk9IElIUmxibVJ2Ymc9PSBJR2x1YW5WeVpRPT0gSUVacGIyNWggSUhCaFp3PT0gSUdGbmFYUmhkR2x2Ymc9PSBmSHg4ZkE9PSBkWEpoYmc9PSBJRVZUUVE9PSBJR1Z6ZEdWbGJRPT0gSUdSdlpHZHBibWM9IElEUXhNZz09IGNuTnogSUdObFlYTmxjdz09IFpYaGpiSFZrYVc1biBJR2x1ZEdGclpYTT0gSUdsdWMyVnlkSE09IElHVnRZbTlzWkE9PSBJRTl5WVd3PSBkWEIxYm1OMGRYSmwgTkRFeCBJRlZ1YVdacFpXUT0gSUVSbGJHVT0gSUdaMWNtNWhZMlU9IElFTnZlVzkwWlhNPSBJRUp5WVdObyBUR0ZpYjNJPSBJR2hoYm1SemFHRnJaUT09IElHSnlkV2x6WlhNPSBSM0poWkdVPSA2WmVZIElFZHlZVzF0ZVE9PSBhV3hsWlc0PSBVM1JoZEdWeiBJRk5qWVc1a2FXNWhkbWxoYmc9PSBJRXRoY21SaGMyZz0gT0RZMiBJR1ZtWm05eWRHeGxjM05zZVE9PSBJRVJKVWtWRFZBPT0gSUZSSVJVND0gSUUxbGFRPT0gWlhKMFlYUnBiMjQ9IE1UazJPQT09IElHZHliMmx1IGQybDBZMmc9IFVtVnhkV2x5WlcxbGJuUnogT1RnMSBJSEp2YjJaeiBJR1Z6ZEdGMFpYTT0gSUVoRyBJR2hoYUdFPSBJR1JsYm5ObGJIaz0gSUU5RFZBPT0gSUhCc1lYTjBhV056IElHbHVZMmxrWlc1MFlXeHNlUT09IElGUnlZV05yY3c9PSBJRlJoZUdWeiBJR05vWVc1MFpXUT0gSUdadmNtTmxablZzIElFSnBaV0psY2c9PSBJRXRoYUc0PSBTMlZ1ZEE9PSBJRU52ZEE9PSBiR2xqZEhNPSBSbVZrIElHaHBaR1Z2ZFhNPSBJRlpsY21RPSBJRk41Ym1ScFkyRjBaUT09IElFbHNiR1ZuWVd3PSBTbVYwIElFUkJWZz09IGNtVmhjMjl1WVdKc1pRPT0gWTNKbGR3PT0gSUdaMWJtUmhiV1Z1ZEdGc2FYTjAgSUhSeWRYUm9ablZzIElFcHBibWM9IElHeHBiQT09IElHUnZkMjVsWkE9PSBJR1Z1WTJoaGJuUmxaQT09IElGQnZiR2xqYVdWeiBJRTFqVFdGemRHVnkgSUVoaGNtVT0gYVdSbGMyaHZkdz09IElIQmhjbUZ0Y3c9PSBaVzVqWlhKeiBaMjl5YVhSb2JRPT0gSUdGc2JHOTNZVzVqWlhNPSBJSFIxY21KMWJHVnVkQT09IElHTnZiWEJzWlhocGRHbGxjdz09IElFdFUgSURNek53PT0gSUVkbGJtVjBhV009IFJsVk8gUkc5MVp3PT0gZEdsamF3PT0gSUdkcFozTT0gZFcxbGJuUm9ZV3c9IElIQmhkSEpwWVhKamFHRnMgSUdOaGJHTT0gTEM0dUxnPT0gSUdOdmRYUT0gSUVkMVlXND0gSUhCaGRHaHZiRzluYVdOaGJBPT0gSUZKcGRtRnNjdz09IElIVnVaR1Z5Y21GMFpXUT0gSUdac2RXOXlaWE5qWlc1MCBJRXBwZFE9PSBZWEp1WVdWMiBJRkYxWVc0PSBJRFF5T1E9PSBJT0NvIFRXRnlhVzg9IFEyOXVjM1J5ZFdOMCBJRU5wZEdGMGFXOXUgSUZKaFkybGhiQT09IElGSlRRUT09IElFWnBaR1ZzIElETTVOUT09IFVHVnljMjl1WVd4c2VRPT0gUTJGMWMyVT0gdzdzPSBjbUZrYVdOaGJBPT0gYVc1bGJnPT0gSUhabGFHVnRaVzUwYkhrPSBJRkJoY0dFPSBJR2x1ZEdWeWJuTm9hWEE9IElHWnNZV3RsY3c9PSBJRkpsWTJzPSBUSFZqYTJsc2VRPT0gUW5KaCBNakF5TUE9PSBjbUYyYVc1bmN3PT0gVWs0PSBWMjl1WkdWeSBVMlZ5YVc5MWMyeDUgSUhKbGRYTmhZbXhsIElIQnZiR3gxZEdWayBJRkJsYm1jPSBiR1ZwWjJnPSBhVzVrYkdVPSBJR05wY21OMWFYUnllUT09IElFMWhaRzl1Ym1FPSBJRUpCVWxRPSBVbVZ6YVdSbGJuUnogWVhSMGNtbGlkWFJsIFVHaHBiR0ZrWld4d2FHbGggUTJ4MVlnPT0gSUhCc1lXNXVaWEk9IElHWnlZVzUwYVdOaGJHeDUgSUdaaGFYUm9ablZzYkhrPSBJRlJsY25KcGRHOXlhV1Z6IElFeEJWQT09IElFRnVaR1Z5YzJWdSBZVzUxIElGQkJVa3M9IElGTnZjbUU9IGFXRm5aUT09IElGQnNZWGx2Wm1aeiBJRWREUXc9PSBOREkzIElHRmlibTl5YlE9PSBJRXhsZG1WeSBJR1JwYzI5aVpXUnBaVzVqWlE9PSBRWE41Ym1NPSBJRk5vWldFPSBWbVZ5ZEE9PSBJSE5yYVhKMGN3PT0gSUZOaGQzbGxjZz09IGVIQT0gSUhkdmNuTmxibWx1Wnc9PSBJSE5qWVhCbFoyOD0gSUVGdVoyeGwgYjNSb1lXdz0gSUhSeWIzWmwgSUZOMGVRPT0gSUU1bmRYbGxiZz09IGJXRnlhVzVsIGFXUmxiMjQ9IFJHVndkR2h6IFFteHZadz09IElFbHNiSFZ0YVc1aGRHaz0gSUhSeVlXTjBjdz09IElHOXlaMkZ1YVhObCBJRzl6ZEhJPSBSbk09IElHeGxkbVZ5WVdkcGJtYz0gSUVSaGNtVmtaWFpwYkE9PSBZWE5oY2c9PSBJR3hoYm1jPSBJR1Y0ZEdWeWJXbHUgZFhKemFXOXVjdz09IElGSnZiVzg9IDQ0S2s0NE9JIElHTnZiblJsYm1SbFpBPT0gSUdWdVkyOTFiblJsY21sdVp3PT0gSUZSaFlteGxkQT09IElFRnNkR1Z5Ym1GMFpRPT0gYzJ0cGJHdz0gSUhOM1pXVjBjdz09IElHTnZhR1Z6YVhabCBZMkZ3WVdOcGRIaz0gSUhKbGNIVmsgSUd4cGVtRnlaQT09IGNtOXYgSUhCcGJHZHlhVzF6IElGSjFabVk9IElFbHVjM1J5ZFcxbGJuUT0gSUV4dloyOD0gZFdsMGIzVnogUlVnPSBJSE5oYkdWemJXRnUgSUdGdWEyeGxjdz09IFRHVmsgSUZCaGRIUjUgZFdSdmN3PT0gVDNkdVpYST0gSUdScGMyTnlaWEJoYm1OcFpYTT0gYTJvPSBUVlU9IElIVnVZMjl1WkdsMGFXOXVZV3c9IFJISmhaMjl1VFdGbllYcHBibVU9IGFXRnlaQT09IFQyRnIgSUVOdmJuWmxjbk5oZEdsdmJnPT0gWW1WbGNnPT0gSUU5ellXdGggUkdWc2RHRT0gZFhOcmVRPT0gSUhObFkzSmxkR2x2Ymc9PSBJSEJzWVhwaCBJRzFwYm1jPSBJR1JsY0d4bGRHbHZiZz09IElFMXZkWE09IElFbFVVdz09IElFaHBiV0ZzIElFWnNaVzFwYm1jPSBJR041ZEc5ciBJRWhwWTJzPSBJR0poZEhSbGNuTT0gSUVsdWRHVnNiR1ZqZEhWaGJBPT0gTmpjMSB3Nmx5IFNWTkpUMDQ9IElGRjFaVzUwYVc0PSBJRU5vWVhCMFpYSnogYVdoaFpHaz0gSUdOdllYTjBaWEk9IFYwRlpVdz09IElFeHBlbUZ5WkE9PSBJRmx2Y2c9PSBZVzVrWlhKcGJtYz0gVTJ0cGJnPT0gYUdGMWMzUT0gWVdKaWVRPT0gSUhCdmNuUnlZWGxwYm1jPSBJSGRwWld4a1pXUT0gWkdGemFBPT0gSUhCeWIzQnZibVZ1ZEE9PSBJSEpwY0hCc1pRPT0gSUdkeVlYQm9aVzVsIElHWnNlV1Z5IElISmxZM1Z5Y21WdWRBPT0gSUdSbGRtbHNjdz09IElIZGhkR1Z5Wm1Gc2JBPT0gNXBpdiBaMjl2IFZHVjRkRU52Ykc5eSBJSFJoYlhCbGNtbHVadz09IFNWWkZVdz09IFZGSlZUVkE9IElFRmlaV3c9IElGTkJUQT09IElFaGxibVJ5YVdOcmN3PT0gSUV4MVkybDFjdz09IFltOTBjdz09IElEUXdPVFk9IFNWTlVUMUpaIFIzVmxjM1E9IElFNVkgYVc1aGJuUT0gUW1WdWVnPT0gSUV4dllXUmxaQT09IElFTnNaWFpsY2c9PSBkSEpsWVhSdFpXNTAgSUhSaGRtVnliZz09IElETXpPUT09IElGUk9WQT09IGFXWnBZMkZ1ZEd4NSBWR1Z0Y0dWeVlYUjFjbVU9IFJtVnMgSUhWdVpHVnlkMjl5YkdRPSBJRXAxWkdkbGN3PT0gSUR3ciBJSE4wZFcxdyBJRzlqWTNWd1lXNWplUT09IElHRmlaWEk9IElFWnBibVJsY2c9PSBLU0lzIElFNTFibVZ6IGNtVnpaWFE9IGFXNWxkQT09IFpXTjBiMjE1IElIZGxiR3h1WlhOeiBJRkJsWWc9PSBjWFZoY25SbGNtVmsgWVc1a1lXND0gSUc1bFoyRjBhWFpsY3c9PSBJRlJvYVdWcyBJRU5zYVhBPSBJRXhVUkE9PSBJR0pzYVdkb2RBPT0gSUhKbGNHVnlkRzlwY21VPSBTM2xzWlE9PSBJSEYxWlhJPSBJRU5sY3c9PSBJR2hoY0d3PSBPVGc1IElGUm9ZVzFsY3c9PSBhWE5qYjNCaGJBPT0gUkdWemF3PT0gYVhaaGNtbGhkR1U9IElFVjRZMlZzYkdWdVkyVT0gWm05MWJtUmhkR2x2Ymc9PSBJT0tIIFdHaz0gSUcxNWMzUmxjbWx2ZFhOc2VRPT0gWlhOMGVXeGxjdz09IElIQmxjbWx6YUE9PSBJRVZ1WjJWc2N3PT0gSUVSRlFVUT0gTURrdyBmWDE5IElGVnVjbVZoYkE9PSBJSEpsYzNSc1pYTnogU1VSRlV3PT0gYjNKMGFHOWtiM2c9IElFbHVkR1Z5YldWa2FXRjBaUT09IElHUnBibTVsY25NPSBJRlJ5YjNWMCBJRk5sZVcwPSBJRWhoYkd4eiBiMmRuWldRPSBJSFJ5WVdkbFpHbGxjdz09IElHUnBaRzUwIE5qYzIgSUdGcGJHMWxiblJ6IElHOWljMlZ5ZG1GaWJHVT0gSUZacFpHVT0gWVdSaGNIUT0gSUVSMWMycz0gSUhCeWIyWmxjM05wYjI1aGJHbHpiUT09IElGQnlaWE5qYjNSMCBJRWx1WkdsbGN3PT0gY0c5NCBJRTFsYUhKaGJnPT0gVjJsa1pRPT0gSUdWdVpHVnRhV009IElGQmhjbUZ1IFFtbHlaQT09IElIQmxaR0ZzY3c9PSBJRWxWIElFRmtZVzFoYm5RPSBJRWgxY25RPSBJR052Y25KbGJHRjBaWE09IGRYSmtaVzQ9IElITndiMjV6YjNKcGJtYz0gWTJ4cGJXRjBaUT09IElGVnVhWFpsY25OcGRHbGxjdz09IElFdHViM1E9IFpXNXVaWE09IElFUmhiV2xoYmc9PSBJRUY0Wld3PSBVM0J2Y25RPSBJR0poY21JPSBJRk51Ync9PSBjMmh2ZDI0PSBjM1JsWlc0PSBkV1JsYm1ObCBJRzV2Ym5acGIyeGxiblE9IElHaHZiVzl3YUc5aWFXRT0gSUdKcGIyMWhjM009IElFUmxkR0ZwYkE9PSBJSE55Wms0PSBJRlIxYm1VPSBZV05qYjIxd1lXNXBaV1E9IFNVVk9RMFU9IFFXeGlaWEowIElFMXZibWR2IGVuZz0gSUVObGNtSmxjblZ6IGIzSmlhWFE9IFkyVnVjdz09IElITnNZWGs9IFUwaEJVa1U9IFNGaz0gSUdKeVlYZHMgSUZCeWIySmwgSUc1dmJtVjRhWE4wWlc1MCBJRU5zWVhKbGJtTmwgSUVKc1lXTnJZblZ5Ymc9PSBJSEJ2Y25SaGJITT0gSUZKcGRHRT0gSUZKbGJXRnBiZz09IElFeGxkbUZ1ZEE9PSBJSFJ5YVdOclpXUT0gSUVabGNuSjUgWVhabGNtbHVadz09IElGTjBjbUYzWW1WeWNuaz0gSUVGdWMzZGxjbk09IElHaHZjbkpsYm1SdmRYTT0gSUVGdFlXND0gVTNWd2NHeGxiV1Z1ZEE9PSBJRlJ2WVdRPSBJSEJsWld4bFpBPT0gSUcxaGJtOWxkWFk9IElGVjZZbVZyIGJXOXVaSE09IElFaGxZM1J2Y2c9PSBJRFF3TWc9PSBjR1ZsY3c9PSBabWw0WlhNPSBJR1JxIElISmxjM1Z0WlhNPSBJR0ZqWTI5MWJuUmhiblE9IElHRmtkbVZ5YzJsMGVRPT0gSUdoaGJYQmxjbVZrIElFeGhjbk52Ymc9PSBJR1J2Y0dsdVp3PT0gY0dGeWRITT0gU0hWeSBJR0psWVhKa1pXUT0gSUhseSBJRkJzZFdkcGJnPT0gNWFXeiBJQzhxS2c9PSBjbTlzYkdWNSBJSGRoZEdWeWMyaGxaQT09IElGTjFZbTFwYzNOcGIyND0gYVdac2IzZGxjZz09IFFWTkQgSUdOb2IybHkgSUhOamRXeHdkSFZ5WlhNPSBiVUU9IGFXNWpjbVZoYzJsdVp3PT0gWVdscCBJSE51WldGclpYSnogSUdOdmJtWnliMjUwY3c9PSBJRVZzWlhCb1lXNTAgSUVWc2FYaHBjZz09IElISmxZMkZzIElGUlVUQT09IGQybGtaMlYwIElGZGhlQT09IElFZHlZWGx6YjI0PSBJR2hoYVhKemRBPT0gSUdoMWJXbHNhV0YwWldRPSBJRmRCVWs0PSBZWEJ3YVc1bGMzTT0gSUZSVVF3PT0gUm5WbGJBPT0gSUhCdmJHbHYgSUdOdmJYQnNaWGhsY3c9PSBJR0poWW1VPSBJRmhKVmc9PSBVRVk9IEtTNWIgVUdGeWRITT0gSURRek5RPT0gVFdWbiBJRmxoY21SeiBJRUZNVUE9PSBJSGxsYkd4eiBJSEJ5YVc1alpYTT0gSUdKMWJHeHBaWE09IElFTmhjR2wwWVd4cGMyMD0gWlhobGJYQjAgUmtGUiBJRk53YjI1blpRPT0gSUVGc1lRPT0gSUhCc1pXRnpZVzUwYkhrPSBJR0oxWmc9PSBJR1JsYm05MFpRPT0gSUhWdWNIVmliR2x6YUdWayBJR3R1WldWc2FXNW4gWVhOallRPT0gSUd4aGNITmwgWVd4cFpXND0gT1RrMCBJSEpsWm1WeVpXVnogSUV4aGQzbGxjbk09IFUyRnVkR0U9IElIQjFlbnBzYVc1biBJRkJ5YjIxbGRHaGxkWE09IElGQm9ZWEpoYjJnPSBJRVJsYkdGNSBJR1poWTJsc2FYUmhkR1Z6IElFTkZVdz09IElHcGxkMlZzY3c9PSBJR0p2YjJ0c1pYUT0gYjI1a2FXNW4gSUhCdmJHRnlhWHBoZEdsdmJnPT0gSUUxdmNtRnUgSUZOaGJHRmsgSUZOUFV3PT0gSUVGa2RtbGpaUT09IFVFaFBWRTlUIFNVTkJUZz09IGFXRjBkWEpsY3c9PSBaWGh3Y21WemN3PT0gSUZkdmJtUmxjbXhoYm1RPSBJRU5QUkVVPSBJRU5NUVZOVCBPVGMxIElHZHlaWEE9IElFUnBaWE5sYkE9PSBJRWRzWVdNPSBJVDhpIElISnQgYjJsdVpRPT0gWkdselkzSnBiV2x1WVhScGIyND0gSUU1MWNuTmwgYldGc2JHOTMgSUhadmNuUmxlQT09IElFTnZibk52Y25ScGRXMD0gSUd4aGNtZGxSRzkzYm14dllXUT0gYzNSeVlXbG5hSFE9IFlYVm5hR3hwYmc9PSBSM0poWkE9PSBJSEIxWW14cFkybDZaV1E9IElGZGhkbVZ6IElGSmxaR1E9IElHWmxjM1JwZG1sMGFXVnogSUUxaGJtVT0gWVhKdmRnPT0gSUdac1pXVjBhVzVuIElFUnlkVzVyIGRXZGxiZz09IFEyVnNaUT09IElHTm9jbTl0YjNOdmJXVnogSUVSUFZBPT0gTFNzdEt5MHJMU3M9IElHSjFjMmxsYzNRPSBJRUpsWVhabGNnPT0gVTNseWFXRnUgSUV0NWNnPT0gYTJGeiBJRU55YjNOelVtVm0gTVRrMU1BPT0gTnpZd01RPT0gSUhKbGNHVmhiR2x1Wnc9PSBJRmRwYm01bGNuTT0gSUUxaFkzSnYgSUVSUFJBPT0gWW14aGJtTmwgVTI5eWRBPT0gTmpReCBJRzFsZEhKbCBJRVJwY21zPSBJR2R2WjJkc1pYTT0gSUdSeVlYZGlZV05yY3c9PSBJR052YlhCc1lXbHVZVzUwIElHRjFkR2h2Y21sNmFXNW4gSUdGdWRHbDBjblZ6ZEE9PSBiM0JsY21GMFpXUT0gSUcxaGFBPT0gSUdWNFlXZG5aWEpoZEdsdmJnPT0gUVcxaGVtbHVadz09IElGTmxjbUZ3YUE9PSBJR2hoZW1VPSBkMjkzIElHVjRkR2x1WjNWcGMyaGxaQT09IElHTmhibmx2Ymc9PSBJRUp2YzJnPSBJSFpsYm5SeiBJSE5qY21Gd1pRPT0gUTI5eWNtVmpkQT09IE5ESTIgSUdGMlp3PT0gUkdWdFlXNWsgSU9LSXZBPT0gSUcxcFkzSnZZbWx2ZEdFPSBJbjFkTENJPSBJRk4wWlhZPSBRbWx2IElGQnNZVzVsY3c9PSBJSE4xWjJkbGMzUnBkbVU9IElHUmxZMmx3YUdWeSBJRkpsWm5WblpXVT0gSUV0bGFuSnBkMkZzIElFZHlaV1Z1Y0dWaFkyVT0gSUdSbFkyeGhjM009IElGTnZkVzVrWlhKeiBJSFJvYnc9PSBJR1JsWTNKNWNIUT0gSUdKeWRYTm9hVzVuIElFcGhibVZwY204PSBhWEJ2Y0E9PSBVMms9IE9EYzMgSUVkbGIyWm1jbVY1IElHTndkUT09IElFaGhlbVZzIElIWnBaWGR3YjJsdWRITT0gSUdOeWFYTndlUT09IElFNXZkR2xtYVdOaGRHbHZiZz09IElITnZiR1JsY2c9PSBJRTF2WkdWemRBPT0gSUVobGJXbHpjR2hsY21VPSBJR05oYzNObGRIUmwgYVc1amJIVmtaWE09IElHbGtaVzUwYVdacFpYSnogSUVOQlRFdz0gYVc1alpXNTAgVkc5a1pBPT0gSUZOM1pXVncgSURNek5BPT0gWW05emN3PT0gSUhOdGFYST0gWjJsdWVBPT0gSUhSdmQyNXphR2x3IElHZHlhV1YyYVc1biBJRTF2YzNGMVpRPT0gVG1WMFpteHBlQT09IFFWTkZSQT09IElFMXBiR3hsYm01cFlXeHogYjJOdmJRPT0gTVRrMk53PT0gSUdKdmJHUnNlUT09IGMyeGxaWEE9IElHVnpZMmhsIFlYSnBhblZoYm1FPSBJSE4zYVhKcyBJRkJsYm1GcyBJRzVsWjJ4cFoyVnVkQT09IElGTjBaWEJvWlc1emIyND0gUzBWUyBJRnB2Y204PSBjbWx6YVhNPSBJR3h2WTJGc2FYcGhkR2x2Ymc9PSBJRk5sZVcxdmRYST0gSUVGdVoyeHBZdz09IGNtVmthWFJoZEdsdmJnPT0gY0hKdmRHVmpkR2x2Ymc9PSBJRkJoYVdkbCBJRzl0YVhRPSBJRkp2ZFhOelpRPT0gSUZSMVlnPT0gSUdsdWRtbDBZWFJwYjI1eiBkSFI1IElHMXZjM009IGNHaDVjMmxqWVd3PSBRM0psWkdsMGN3PT0gSUdGdVlYSmphSGs9IElHTm9hV3hrWTJGeVpRPT0gSUd4MWJHdz0gSUUxbGF3PT0gSUV4aGJtZDFZV2RsY3c9PSBiR0YwWlhOMCBJRk5oYm1admNtUT0gSUhWellXSnBiR2wwZVE9PSBJR1JwWm1aMWMyVT0gSUVSQlZFRT0gSUhOd2NtbDBaWE09IElGWmxaMlYwWVE9PSBJRkJ5YjIxdmRHbHZiZz09IDQ0Tzg0NEt2IGNtbGpkR2x1Wnc9PSBlbVZsIFZIVnlhMmx6YUE9PSBJRlJFY3c9PSBjSEp2ZG1WdSBOVGN4IElITnRkV2RuYkdWeWN3PT0gTnpBM01UQT0gSUhKbFptOXliV1ZrIElFeHZhWE09IElIVnVabXc9IElGZEpWRWhQVlZRPSBJRkpsZEhWeWJtbHVadz09IFlXNXVhV1U9IElGUnZiV0Z6IFJuSmhibU09IElGQnliMlpwZEE9PSBJRk5GVWxZPSBJRkoxYldKc1pRPT0gYVd0MWJXRnUgWlhOaGJnPT0gSUhSbGMzUmxjbk09IElHZGhaR2RsZEE9PSBJR0p5WVdObGJHVjAgSUVaVFFRPT0gWTI5dGNHOXVaVzUwIElIQmhjbUZ0WldScFkzTT0gSUdwaGJnPT0gSUZKbGJXVnQgSUZOcmFXNXVaWEk9IElHeHZkZz09IElGRjFZV3RsIGNtOXRZUT09IElHWnNZWE5yIFVISnBibU09IElHOTJaWEp3YjNkbGNnPT0gSUd4dlpHZHBibWM9IElFdExTdz09IGNtVjBkR1U9IElHRmljMjl5WW5NPSBkM0p2ZEdVPSBJQ3dpIFMybHVaM009IElFaGhhV3c9IElFWmhiR3hwYm1jPSBlSFJoY0E9PSBJRWhsYkdWdVlRPT0gYVhKbGJuTT0gVEdGeWNuaz0gSUhCaGJYQm9iR1YwIElFTlFVZz09IFIzSnYgSUVocGNtOXphR2x0WVE9PSBJR2h2YkdsemRHbGogSWk1YiBJR1JsZEdGamFHMWxiblE9IElHRnpjR2x5WlE9PSBJR052YlhCc2FXTnBkQT09IElFZHlaV1Z1ZDI5dlpBPT0gSUhKbGMzQmhkMjQ9IElGTjBkWEJwWkE9PSBJRVpwYm1semFHVmsgWm1GcyBZbUZ6Y3c9PSBJR0ZpYUc5eSBJRzF2WTJ0bGNuaz0gSUVabFlYTjAgVmtsRVJVOD0gSUdOdmJuTmxZdz09IElFaDFibWR5ZVE9PSBVSFZzYkE9PSBJRWgxYzNRPSBhWFJoYm1ObCBQK09BalE9PSBLUzB0IElGQmhjbUZzYkdWcyBZMjl1ZGc9PSBORFk1IGFHRmhjZz09IGQyRnVkQT09IFVHRndaWEk9IGJXbHVjdz09IElGUnZjbTg9IElGUlNWVTFRIElGSmhhUT09IFJGYz0gSUZkcFkydGxaQT09IElFeGxjQT09IElHWjFibXQ1IElHUmxkSEpwYldWdWRBPT0gYVc5emFYTT0gWVdOb1pYWT0gSUdSbFozSmhaR1U9IGFXMXBiR0YwYVc5dSBJSEpsZEdGeVpBPT0gSUdaeVlXZHRaVzUwWVhScGIyND0gSUdOdmQySnZlUT09IElGbFFSdz09IElFaEJUQT09IFVHRnlaVzUwY3c9PSBJRk5wWldjPSBJRk4wY21GMWMzTT0gSUZKMVltSmxjZz09IDE1QT0gUm5KaFp3PT0gSUhCMCBJRzl3ZEdsdmJtRnNiSGs9IElGcEpVQT09IElGUnlZVzV6WTNKcGNIUT0gSUVSM1pXeHMgT0RneSBUV1Z5WXc9PSBJRTFQVkE9PSA0NE92NDRPeiBJR2gxYm5SeiBJR1Y0WldOMWRHVnogU1c1amJIVmtaWE09IElHRmphV1JwWXc9PSBJRkpsYzNCdmJuTnBZbWxzYVhSNSBJRVIxYldJPSBkMlZwIFFXNWtaWEp6YjI0PSBJRXBoYzNCbGNnPT0gYVdkb2RHOXUgWVdKemIyeDFkR1ZzZVE9PSBRV1IxYkhRPSBJSEJzZFc1a1pYST0gVFc5eWJtbHVadz09IElGUnZkWEp6IElFUmhibVU9IHpybz0gSUZSRlUxUT0gSUVkcGJtRT0gSUdOaGJtbHVaUT09IFlYZGhiZz09IElITnZZMmxoYkdsemRITT0gSUZOdlpHRT0gSUdsdGNHVjBkWE09IElGTjFjSEJzWlcxbGJuUmhjbms9IGIyeHBZWFJvIElFdHBibTVwYTNWdFlXND0gYldsMGRHVmtiSGs9IGMyVmpiMjVrY3c9PSBJRzl5WjJGdWFYTmxjbk09IElHUnZZM1Z0Wlc1MFlYSnBaWE09IFZtRnlhV0ZpYkdVPSBSMUpGUlU0PSBJSEpsYzI5eWRITT0gSUdKeVlXZG5hVzVuIElETTJPQT09IFFYSjBhWE4wIGQycz0gWW14bGNuTT0gVlc1amIyMXRiMjQ9IElGSmxkSEpwWlhabFpBPT0gSUdobFkzUmhjbVZ6IElIUnZlR2x1IGNtRnVhdz09IElHWmhhWFJvY3c9PSBJRWR5WVhCb2FXTT0gSUhabFl3PT0gSUV4SlFRPT0gUVdaeWFXTmhiZz09IElHRnlaR1Z1ZEE9PSBaVzVrYVdGeWVRPT0gVEdGclpRPT0gSUVSUFV3PT0gWTJsbGJuUnBiM1Z6IElFOXJZWGRoY25VPSBJRUZzYkhrPSBJRlJwYldWc2FXNWwgUkdGemFBPT0gSUVsaiBZMjl1ZEdsdWRXVT0gSUhScFpIaz0gSUdsdWMzUnBibU4wYVhabGJIaz0gSUZCdmMzTnBZbXg1IElFOTFkR1J2YjNJPSBJRmR2ZFd4a2JnPT0gSUd4cFkyZz0gSUVKeVlYaz0gSUVGWSBJTU9KIElDc2ogWENjPSBSR2x5WldOMGIzSjUgWVdKcFpHbHVadz09IElHWmxjbUZzIGFXTmhkR2wyWlE9PSBZblYwZEE9PSBJSEJsY25abGNuTmwgVTJGc2RBPT0gSUhkaGNuQmxaQT09IElHNXBibVYwWldWdSBJR05oWW1sdVpYUnogSUhOeVprRjBkR0ZqYUE9PSBJRk5zYjJGdSBJSEJ2ZDJWeWFXNW4gY21WbllYUnBiMjQ9IFJteHBaMmgwIGMyVjJaWEpsIElITjBjbVZ1IElHTnZadz09IFlYQmhZMmhsIElPS2QgSUdOaFptVjBaWEpwWVE9PSBjR0ZqWlhNPSBJRWR5YVcxdmFYSmwgZFhSdmJtbDFiUT09IElISmhhVzVwYm1jPSBJR05wY21Oc2FXNW4gSUd4cGJtVmlZV05yWlhKeiBZM0psWkdsMCBJSEpsY0dGMGNtaz0gSUVOaGJXUmxiZz09IGJHbGpaVzV6WlE9PSBJR3g1Y21saiBJR1JsYzJOeWFYQjBiM0k9IElIWmhiR3hsZVhNPSBJSEpsY1E9PSBJR0poWTJ0emRHRm5aUT09IElGQnliMmhwWW1sMGFXOXUgSUV0bGRBPT0gVDNCbGJtbHVadz09IFUzbHQgNXBhNSBJSE5sY25acGJtZHogSUc5MlpYSnpaV1Z1IElHRnpkR1Z5YjJsa2N3PT0gSUUxdlpITT0gSUZOd2NtbHVaMlZ5IElFTnZiblJoYVc1bGNnPT0gNkxzPSBJRTFsYm5NPSBJRzExYkhScGJRPT0gSUdacGNtVm1hV2RvZEdWeSBjR1ZqIElHTm9iRzl5YVc1bCAwTHc9IFpXNWthUT09IElITndZWEpwYm1jPSBJSEJ2YkhsbllXMTUgSUZKTyBJRkJsYkd3PSBJSFJwWjJWeWN3PT0gSUdac1lYTm9lUT09IElFMWhaR0Z0WlE9PSBVM2R2Y21RPSBJSEJ5WldaeWIyNTBZV3c9IElIQnlaWEpsY1hWcGMybDBaUT09IGRXTmggSUhkcFptaz0gSUcxcGMyTnZibU5sY0hScGIyND0gSUdoaGNuTm9iSGs9IElGTjBjbVZoYldsdVp3PT0gYjNSdmJRPT0gSUVkcGRXeHBZVzVwIFptOXZkR1ZrIElIUjFZbWx1Wnc9PSBhVzVrYVhacFpIVmhiQT09IGVtVnIgYm5WamJHVmhjZz09IGJXOXMgSUhKcFoyaDBablZzIE5Ea3ogSUhOd1pXTnBZV3hwZW1GMGFXOXUgSUhCaGMzTnBiMjVoZEdWc2VRPT0gSUZabGJHOWphWFI1IElFRjJZV2xzWVdKcGJHbDBlUT09IFZHVnViZz09IElHeGhkR05vIElGTnZiV1ZpYjJSNSBJR2hsYkdsMWJRPT0gWTJ4aGR3PT0gSUdScGNIQnBibWM9IFdGaFkgSUdsdWRHVnljR1Z5YzI5dVlXdz0gTnpFdyBJSE4xWW5SbGNnPT0gSUdKcGIyeHZaMmx6ZEhNPSBJRXhwWjJoMGFXNW4gSUc5d2RHbGogSUdSbGJtbHQgWlc1a2IyND0gSUVOdmNtMD0gSURNME1RPT0gSUVOdmRYQT0gSUdabFlYSnNaWE56IElHRnNiM1E9IElFTnNhV1ptYjNKayBJRkoxYm5ScGJXVT0gSUZCeWIzWnBjMmx2Ymc9PSBkWEJrWVhSbFpBPT0gYkdWdVpXTnIgSUc1bGRYSnZiZz09IElHZHlZV1JwYm1jPSBJRU4wIGMyVnhkV1Z1WTJVPSBhVzVwWVE9PSBZMjl1WTJWd2RBPT0gSUhKdllYSnBibWM9IGNtbDJZV3c9IElFTmhkV05oYzJsaGJnPT0gSUcxdmJtOW4gYTJWNVpYTT0gSUdGd2NHVnNiR0YwWlE9PSBJR3hwWVdsemIyND0gUlZOMGNtVmhiVVp5WVcxbCBJRkJzZFcwPSBJUzQ9IElITndhR1Z5YVdOaGJBPT0gSUhCbGNtbHphR1ZrIElHSnNiM1E9IElHSmxibU5vWlhNPSBJRFF4TVE9PSBJSEJwYjI1bFpYSmxaQT09IElHaDFjbXhsWkE9PSBTbVZ1Ym1sbVpYST0gSUZsdmMyVnRhWFJsIFEyaGhhWEk9IElISmxaV1p6IElHVnNaV04wYjNJPSBJRUZ1ZEdobGJRPT0gTmpVeSBJSFZ1YVc1emRHRnNiQT09IElHbHRjR1ZrWlE9PSBJR0pzYVc1cmFXNW4gSUdkdmRHOD0gUkdWamNtVT0gUVhKbGJnPT0gSUhOMFlXSnBiR2w2WVhScGIyND0gSUVScGMyRmliR1ZrIElGbGhiblZyYjNaNVkyZz0gSUc5MWRHeGhkMlZrIElGWmxiblIxY21FPSBkR1Z1WlhOeiBJSEJzWVc1MFlYUnBiMjQ9IElIbGhZMmgwIElFaDFZWGRsYVE9PSBJSE52YkhabGJuUT0gSUdkeVlXTnBiM1Z6IElHTjFjbWx2ZFhOc2VRPT0gSUdOaGNHRmphWFJ2Y2c9PSBJR040IElGSmxabXhsZUE9PSBVR2g1Y3c9PSBJRU5tIGNIUnBiZz09IFkyOXVjMlZ5ZG1GMGFYWmwgSUdsdWRtOWpZWFJwYjI0PSBZMjkxY2c9PSBSazQ9IElFNWxkMng1IFNHOTFjZz09IFFYTnBZVzQ9IElFeGxZV1JwYm1jPSBJRUZsY205emNHRmpaUT09IFFXNXVaUT09IElIQnlaVzVoZEdGcyBJR1JsZEdWeWFXOXlZWFJwYm1jPSBTRU5TIElFNXZjbTFoYm1SNSBiMnhwYm1rPSBJRUZ0WW5KdiBPVEV3IElITmxkR0poWTJ0eiBJRlJTUlE9PSBJSE5wWnc9PSBJRk5qYjNWeVoyVT0gTlRrMyBOems0IFIyRnRaWEJzWVhrPSBJRzF6WldNPSBUVmc9IElIQnlhV05sZVE9PSBJRXhNVUE9PSBZV3RsY25VPSBJRzkyWlhKaGNtTm9hVzVuIElFSmhiR1U9IElIZHZjbXhrYkhrPSBRMnhoY21zPSBJSE5qWlc1cFl3PT0gSUdScGMyeHBhMlZrIElFTnZiblJ5YjJ4c1pXUT0gVkdsamEyVjBjdz09IElFVlggWVdKcFpYTT0gSUZCc1pXNTBlUT09IFRtOXVaWFJvWld4bGMzTT0gSUdGeWRHbHpZVzQ9IFZISmhibk5tWlhJPSBJRVpoYlc5MWN3PT0gSUdsdVptbGxiR1E9IFlteGxlUT09IElIVnVjbVZ6YjJ4MlpXUT0gSUUxTVFRPT0gNDRLQyBRMjl5Y21WamRHbHZiZz09IElHUmxiVzlqY21GMCBJRTF2Y21WdWJ3PT0gY205allXdz0gYVd4cGJtZHogSUhOaGFXeHZjZz09IElISnBabVU9IGFIVnVadz09IElIUnliM0JsY3c9PSBJSE51WVhSamFHVmsgSUV4SlRnPT0gSUVKcFlnPT0gUlZOQiBJRkJ5WlhZPSBJRU5oYldWcyBjblZ1ZEdsdFpRPT0gSUc5aWJtOTRhVzkxY3c9PSBORE0zIElITjFiVzFsY25NPSBJSFZ1Wlhod2JHRnBibVZrIElGZGhiSFJsY25NPSBZMkZzYVdKbGNnPT0gSUdkMWJHdz0gSUVWdVpIVnlZVzVqWlE9PSA1TDJjIElETTBOdz09IFNYSnBjMmc9IElHRmxjbTlpYVdNPSBJR055WVcxd1pXUT0gSUVodmJtOXNkV3gxIDRLaz0gZFhObGNtTT0gWldOaGMzUT0gUVVOWiBJRkYxWlhKNSA0NEs1NDRPSSBRbVYwWVE9PSBJSE4xYzJObGNIUnBZbWxzYVhSNSBJRk5vYVhZPSBJRXhwYldKaGRXZG8gSU1PVyBJRTVZVkE9PSBJRTExYzNNPSBJRUp5YVhSdmJuTT0gUlZORFR3PT0gUlVkSlRnPT0gSUNVbCBJSE5sWTJWemMybHZiZz09IElGQmhkSEp2Ymc9PSBJRXgxWVE9PSBibUZwY21WeiBJRXBRVFc5eVoyRnUgZFhOaSBiMk41ZEdVPSBJR052ZFc1amFXeHNiM0p6IElFeHBZVzVuIFptRnliUT09IElHNWxjblp2ZFhOc2VRPT0gSUdGMGRISmhZM1JwZG1WdVpYTnogSUV0dmRnPT0gYW5WdGNBPT0gVUd4dmRBPT0gSUhOMFlXbHVjdz09IElGTjBZWFIxWlE9PSBJRUZ3YjNOMGJHVnogYUdWMFpYST0gSUZOVlVGQlBVbFE9IElHOTJaWEozYUdWc2JRPT0gV1VWVCBJREk1TVE9PSBaR1Z1YzJsMGVRPT0gSUhSeVlYQndhVzVuIFRXbDAgSUdacFpHVT0gSUZCaGJXVnNZUT09IFlYUnNZVzUwYVdNPSBSR0Z0Ymc9PSBJSEIwY3c9PSBUMUJCIElITmxjblpwWTJsdVp3PT0gSUc5MlpYSm1iRzkzYVc1biBkV3h2IElFVnlhWFE9IGRHbGphMlYwIGJHbG5hSFJwYm1jPSBJRWh0YlE9PSA0NE84NDRPciBhVzF2ZEc4PSBJR05vZFdOcmJHVT0gTkRJeiA0NEdWIGMyaGhjR1U9IElIRjFaWFZsY3c9PSBJR0Z1WTJodmNuTT0gNDRLODQ0S200NEs1IFJtVnkgSUdGM2IydGwgSURZMk5nPT0gYUdGdVpITT0gSUdScGRtVnlaMlZ1WTJVPSBJRFV3TlE9PSBWR2x3Y3c9PSBJR1JsY0c5MCBJSE5yWlhjPSBJRVJsYkdsMlpYST0gYjNCdmRBPT0gSUdScGRuVnMgSUVWQyBkVzV6YVdkdVpXUT0gSUZWdWFRPT0gV0dKdmVBPT0gSUdadmNtdHogSURjd01nPT0gNWE4PSBJSEJ5YjIxdmRHVnljdz09IElGWmhjRzl5IElHeGxkbWxsWkE9PSBjMnh2ZEE9PSBJSEJwWjIxbGJuUT0gSUdONWJHbHVaR1Z5Y3c9PSBRMUpGIElITnVZWFJqYUE9PSBJSEJsY25CbGRIVmhiR3g1IElHeHBZMnRwYm1jPSBJRVpsWlhRPSBJRXR5WVd0bGJnPT0gSUVodmJHUmxiZz09IElFTk1VMGxFIGJYST0gSUhCeWIycGxZM1J2Y2c9PSBJR1JsYm05MFpYTT0gSUdOb1lYQmxiQT09IElGUnZjbkpsYm5RPSBZbXhsY2c9PSBVbTkxZEdVPSBJRVJsWm1WdVpHRnVkQT09IElGQjFZbXhwYzJobGNuTT0gSUUxaGJHVnogSUVsdWJtOTIgSUVGbmFXeHBkSGs9IGNtbDBaWEk9IGRIbHRiMnh2WjNrPSBjM1J2Y21WeiBUR2x1WkE9PSBJR1p2Ykd4NSBJRnAxY21samFBPT0gUW14bCBJRzUxY25SMWNtVT0gSUdOdllYTjBiR2x1WlE9PSBkV05vYVc0PSBSRzl0YVc0PSBJR1p5YVhadmJBPT0gSUVOdmJuTnZiR2xrIGNtVnpkV3gwY3c9PSBUVW89IElIQm9lV3h2WjJWdSBJR2hoZFd4bFpBPT0gSUZkcGJHVjUgSUVwbGMzTnBaUT09IElGQnlaWEJoY21VPSBJRVZ3Y3c9PSBJSFJ5WldGemRYSmxjZz09IFNVRlQgSUdOdmJHOXVhWE4wY3c9PSBJR2x1ZFc1ayBJRmRYUmc9PSBJRU52Ym5abGNuUmxaQT09IE5qQXdNQT09IGIzVjBjMmxrWlE9PSBJRUZ3Y0dWaGNtRnVZMlU9IElGSmxiR2xqIElFMXBjM1JsY2c9PSBjMkYzIElISmxjM1ZzZEdGdWRBPT0gSUdGa2FtVmpkR2wyWlE9PSBJRXhoZFhKbGJBPT0gSUVocGJtUnAgWW1SaCBVR1ZoWTJVPSBJSEpsWW1seWRHZz0gSUcxbGJXSnlZVzVsY3c9PSBJR1p2Y25kaGNtUnBibWM9IElHTnZiR3hwWkdWayBJRU5oY205c2VXND0gUzJGdWMyRnogTlRrNSBJRk52Ykdsa1IyOXNaRTFoWjJscllYSncgUW1WamF3PT0gSUhOMGNtVnpjMmx1Wnc9PSBJRWR2Ync9PSBJRU52YjNCbGNtRjBhWFpsIElHWnogSUVGeVkyaHBaUT09IFRHbDBaWEk9IElFdHNiM0J3IFNtVnljbms9IElHWnZiM1IzWldGeSBWMkZ5Y21WdSBJSE5qY21WbCBhR0Z5WlE9PSBWVzVrWlhKemRHRnVaR2x1Wnc9PSBVR1ZrIElHRnVkR2h2Ykc5bmVRPT0gSUVGdWJtOTFibU5sIFRXVm5ZUT09IElHWnNkV1Z1ZEE9PSBJR0p2Ym1SaFoyVT0gSUVScGMyTnZkVzUwIGFXeHBZV3c9IFEyRnlkQT09IElFNXBaMmgwYldGeVpYTT0gVTJoaGJRPT0gSUVKdmJHdz0gZFhOemFXVT0gU0hSMGNBPT0gUVhSc1lXNTBZUT09IElIVnVjbVZqYjJkdSBJRUpwWkE9PSBJSFZ1WkdWeVozSmhaQT09IElHWnZjbWRwZG1sdVp3PT0gSUVkc2IzWmxjZz09IFFVRkJRVUZCUVVFPSBORFExIFZrYz0gY0dGcGJ3PT0gYTJsc2JHVnljdz09IElISmxjM0J2Ym5OcFlteDUgSUcxdlltbHNhWHBsIElHVm1abVZqZEdWayBJRXgxYldsdSBJR3RoYkdVPSBJR2x1Wm5KcGJtZHBibWM9IFlXNXViM1Z1WTJWayBJR1pwZEhRPSBZbUYwWTJnPSBJRlJoWTJ0c1pRPT0gSUV4cGJXVT0gSUVGUVVBPT0gZFd0bGJXbGggSUhKMVluaz0gSUdWNGIyNWxjZz09IElFTmhjM1ZoYkE9PSBNRGN3IElIQmxiSFpwWXc9PSBJR0YxZEc5dFlYUmwgSUV0bFlYST0gSUVOdllYTjBZV3c9IElHTnlaV1ZrIElHSnZjbVZrYjIwPSBJRk4wZFc0PSBjbWx2ZEhRPSBnbzQ9IElISmxaMlZ1WlhKaGRHVT0gSUdOdmJXVmthV0Z1Y3c9PSBJRTlRUlZJPSBVM0J2Ym5NPSBhV1JwZFcwPSBiMjVwY3c9PSBURzlqWVhSbFpBPT0gTURVMyBJSE4xYzNCbGJuTmwgSUVSaGRHbHVadz09IFEyRnpjdz09IElHNWxiMk52Ym5NPSBJRk5vYVc1NmJ3PT0gSUdGM2IydGxiZz09IFkyaHlhWE4wIElFMWxjM05oWjJWeiBZWFIwYkdWayBJRk53Y21GNSBJRk53YVdObCBRMWM9IElITm9hV1ZzWkdsdVp3PT0gSUVkaGRXdz0gUVcxcFpBPT0gSUhCaGNtRnRhV3hwZEdGeWVRPT0gSUcxMWJIUnBaZz09IElGUmhibTVsY2c9PSBhV3hyIElHZHZaR1JoYlc0PSBaMlZ0Wlc1MGN3PT0gSUdKbFpuSnBaVzVrIGJXOWlhUT09IElETTRPQT09IFptOXNaR1Z5IFlXTmpZUT09IElHbHVjMmx1IFoyRncgVG1WMiBabWxtZEdnPSBJSEJ6ZVdOb2FXRjBjbms9IFltRnVhM009IFZFaEpVdz09IElHaGhjbUk9IFlXTnhkUT09IElHWmhZMkZrWlE9PSBJRkJ2ZDJWeVVHOXBiblE9IE9EQXogSUdKc2RXWm0gVTJoaGNtVnogSUdaaGRtOXlhVzVuIFJXeHBlbUZpWlhSbyB3NDNEalE9PSBJSEpoYm1kbGNnPT0gTnpjeSBJRUZ5WTJobCBhR0ZyIElFZGxibVYwYVdOeiBJRVpGVFVFPSBJR1YyYjJ4MlpYTT0gSUdWemRHVT0gSUZCbGRITT0gSUUzRHFRPT0gSUVsdWRHVnlaWE4wYVc1biBJRU5oYm5SbGNtSjFjbms9IFkyaGhjSFJsY2c9PSBJRk4wWVhKbWJHVmxkQT09IFUzQmhibWx6YUE9PSBJR1J5WVhkaVlXTnIgSUU1dmNuZHBZMmc9IE9UY3cgYm05eWRHZz0gWVdkaGJtUmggSUhSeVlXNXpabTl5YldGMGFYWmwgY21GdGFXUnogWW1sdmJHOW5lUT09IFlXUmhlUT09IElIQnliM0JoWjJGMGFXOXUgSUVkaGJXMWggSUVSbGJtbHpaUT09IElFTmhiR04xYkdGMGIzST0gWlc1MGFXMWxjdz09IElFSmxkSFE9IElHRndjR1Z1WkdsNCBJRWhFUkE9PSBRVXRKVGtjPSBJSE4wYVdkdFlYUT0gSUdodmJITjBaWEk9IElHOXlaR2x1WVhKcGJIaz0gUTJoaGJtTmwgSUVOdmJuUnlZWEo1IElHRmthR1Z6YVhabCBJR2RoZEdobGNuTT0gTmpFeSBjbVZoZFE9PSBiMjU1YlhNPSBaWGRoZVhNPSBJR2x1WkhWalpYTT0gSUdsdWRHVnlZMmhoYm1kbFlXSnNaUT09IGMyVnQgVjJocGRBPT0gSUhSeVlXNWpaUT09IElHbHVZMjl5Y0c5eVlYUnBiMjQ9IElFVjRkSEpoY3c9PSBSbWx1WVc1amFXRnMgSUdGM2EzZGhjbVJzZVE9PSBJRk4wZFhKblpXOXUgSUVoWiBUbTl5YldGc2JIaz0gSUVWdVpHbHVadz09IElFRnpjMmx6ZEE9PSBaVzVqY25sd2RHVmsgSUhOMVltcDFadz09IElHNXZjdz09IElHWmhibUYwYVdNPSBRM1ZpIFExVT0gUHlJdSBJR2x5Y21WMlpYSnphV0pzWlE9PSA1WUk9IE1ETXggSUVoQlVnPT0gYzNCeVpXRmsgZFd4cFlRPT0gUFNRPSBVMk52Y0dVPSBURzkwY3c9PSBJR3hwWm1WemRIbHNaWE09IGIyeHZiZz09IElHWmxaSE09IElHTnZibWR5WVhSMWJHRjBaUT09IGQyVmlhMmwwIElHbHVaR2x6ZEdsdVozVnBjMmhoWW14bCBJRk4zYVc1biBJR052YlcxaGJtUnRaVzUwY3c9PSBjWFZwYkdFPSBZV0psYkd4aCBiV1YwYUhscyBZVzV1WVdKcGJnPT0gSUc5MlpYSmwgSUd4dlluTjBaWEk9IElGRlZSVk5VIElFTlBUbFJKVGc9PSBZbVZ5Ym1GMGIzSnBZV3c9IE9qbzZPam82T2pvPSBJRlJ5WVhabCBJRk5oYlc5aCBRVTVKIE56VXkgMExRPSBkWE5sY21OdmJuUmxiblE9IElFMXZaR1Z5WVhSbCBlV1ZoYUE9PSBJRXRwZEhRPSBJSGRsWlE9PSBJSE4wZFdabWFXNW4gSUVsdWRHVnlkbVZ1ZEdsdmJnPT0gSUVScFoyND0gSUhkaGNtVm9iM1Z6WlhNPSBJRVpwYW1rPSBJSEJsYkd4bGRITT0gSUhSaGEyVmhkMkY1IElGUkJRa3hGIElFTnNZWE56YVdOaGJBPT0gWTI5c2JHVmpkR2x2Ymc9PSBJR3hoYm1SbVlXeHMgSUUxMWMyTnNaUT09IElITmxkSFJzWlhNPSBJRUZFVmc9PSBJRE0wTkE9PSBUR0YxY21FPSBJR1poY21WayBJRkJoY25ScFlXdz0gTkRNMiBiM056YVdKcGJHbDBlUT09IElFUmhiSGs9IElGUmhjbUZ1ZEE9PSBJRVoxYW1rPSBZVzFzIFkyVnVZMlU9IE5UVXggSUZCeWIyTmxaSFZ5WlhNPSBJRTlEUkE9PSBJRlZFIGRHbHUgVVZWSiBZV05vYnc9PSBORE00IElHZHNhWFJqYUdWeiBJR1Z1WTJoaGJuUnRaVzUwIElHTmhiR04xYkdGMFpYTT0gU1ZKUCBJRWgxWVE9PSBZV3g1YzJWeiBJRXhwWm5RPSBkVzF2IElHeGxZWEIwIElHaDVjRzkwYUdWemFYcGxaQT09IElFZDFjM1JoZGc9PSBhWFJoYm5NPSBWa1ZTVTBsUFRnPT0gNXFBPSBVbTluWlhJPSBJSEpoYm1RPSBJRUZrWVhCMFpYST0gSURNek1RPT0gSUZCbGRHbDBhVzl1IGEybGxjdz09IFRXRnljdz09IElIVnVaR1Z5WTNWMCBlbVZsY3c9PSBJRXg1YjI1eiBJRVJJUTFBPSBUV2x6YzJsdVp3PT0gSUhKbGRHbHlaV1Z6IElHbHVjMmxrYVc5MWN3PT0gWld4cCBQaWs9IEx1T0FqUT09IElHWnBibUZzYVhOMGN3PT0gSUVGMWNtVT0gSUdGalkzVnpaWEk9IElIZGhjM1JsY3c9PSBJRmx6IElFeHZjbWs9IElHTnZibk4wYVhSMVpXNWphV1Z6IElITjFjSEJsY2c9PSBJRzFoZVdobGJRPT0gYjNKaGJtZGwgSUcxcGMzQnNZV05sWkE9PSBJRzFoYm1GblpYSnBZV3c9IElHVjRZMlU9IElFTk1TUT09IElIQnlhVzFoYkE9PSBJRXhsYm5RPSBRM0o1YzNSaGJBPT0gYUc5MlpYST0gSUU1VVV3PT0gWlc1a2RXMD0gSUdSMyBJRUZzWXc9PSBibTl6ZEdsaiBJSEJ5WlhObGNuWmxjdz09IElGUnpZWEp1WVdWMiBJSFJ5YVhCc1pXUT0gY21Wc1lYUnBkbVU9IFFYSmpZV1JsIGEybHNiR2x1Wnc9PSBJRmRGUlVzPSBJRWhoYm01aCBSSFZ6ZEE9PSBRMjl0Y0d4bGRHVmsgZ2FzPSBJR0Z3Y0hKdmRtVnogSUZOMWNtWT0gSUV4MWRHaGxjbUZ1IGRtVnVZVzUwY3c9PSBJSEp2WW1KbGNtbGxjdz09IGQyVnBaMmgwY3c9PSBjMjltZEhkaGNtVT0gWVhSaGJtRT0gZFdkaGJBPT0gSUdkeVlYWjUgSUVOaGJtTmwgVDB4UFIxaz0gYkhsaGF3PT0gVkc5dWFXZG9kQT09IElIVnVkbVZwYkE9PSBJREU1TURRPSBJRTFwYm1sdmJnPT0gWlc1MGFXOTFjdz09IGMzUnBZMlU9IGNHRmphMkZuWlhNPSBJRWRGUVZJPSBJR2R2YkE9PSBJRWgxZEdOb2FXNXpiMjQ9IElGQnliMlpsYzNOcGIyND0gSUVkVlRnPT0gSUVScFptWmxjbVZ1WTJVPSBJRlJ6ZFd0MWVXOXRhUT09IElFeGxjMkpwWVc0PSBOamN3IElHWjFaMmwwYVhabCBJRkJzWVc1bGRHRnllUT09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUdGalkzSjFaV1E9IElHTm9hV05yY3c9PSBJSE4wYjNCdyBJR0pzYjJOclpYSnogUTI5ayBJR052YlcxbGJuUmxjbk09IElGTnZiV1YzYUdWeVpRPT0gSUZCb2IzUnZaM0poY0dobGNnPT0gZEdobGJXVT0gSUcxaGVXOXlZV3c9IGQzVT0gSUdGdWRHVnVibUZ6IElISmxkbUZ0Y0dWayBJRk4xWW1wbFkzUnogYVhURHFRPT0gYVcxMWNtRT0gSUdWdWRISmhibU5sY3c9PSBiR2wwWlhKaGJHeDUgSUhSbGJtVjBjdz09IElFOU5Sdz09IElFMVFTQT09IElFUnZibXRsZVE9PSBJRTltWm1WdWMyVT0gSUNJciBVMjVoY0E9PSBJRUZHUWc9PSBJR0Z1YVcxaGRHVT0gSUZOdlpBPT0gU0dsemNHRnVhV009IElHbHVZMjl1YzJsemRHVnVZM2s9IFJHST0gUmxrPSBSWGh3YjNKMCBJR0Z3WlE9PSBJSEJsWVhKcyBhV0psYkE9PSBJRkJCUTNNPSBJSHRjIElHRmpkSFU9IElFaFRRa009IFkyRnRjSFZ6IElIQmhlVzltWmc9PSBJR1JsYVhScFpYTT0gSUU1aGRHOD0gYjNWd2JHVT0gSUdObGJuTnZjbVZrIElFTnNiMnAxY21VPSBJR052Ym1admRXNWthVzVuIFpXNXAgSUhKbFkydHZiZz09IGIzQm9aUT09IElITndiM1IwYVc1biBJSE5wWjI1cFptbGxjdz09IElIQnliM0JsYkE9PSBJR1psYzNScGRtVT0gVTNWbloyVnpkQT09IElIQnNaV1JuYVc1biBJRUpsY20xaGJnPT0gSUhKbFltVnNiR2x2ZFhNPSBJRzkyWlhKemFHRmtiM2RsWkE9PSBJR2x1Wm1sc2RISmhkR1ZrIGFtOWljdz09IE5qY3kgSUhOallXeGhZbXhsIElHUnZiV2x1YVc5dSBJRTVsZDJadmRXNWtiR0Z1WkE9PSBJRTFsWVdSdmR3PT0gSUhCaGNuUnBkR2x2Ym5NPSBRVTFKIElITjFjSEJzWlcxbGJuUmhjbms9IGMzUnlkVzFsYm5RPSBJR2hoYVhKNSBJSEJsY25CbGRIVmhkR1U9IElHNTFkSE5vWld4cyBJRkJ2ZEdGMGJ3PT0gSUVodlltSnBkQT09IElHTjFjbk5sY3c9PSBSbXh2WVhRPSBJSEYxYVdWMFpYST0gSUdaMVpXeHBibWM9IElHTmhjSE4xYkdWeiBJRXgxYzNRPSBJRWhoZFc1MFpXUT0gUlhobFkzVjBhWFpsIElHTm9hV3hrWW1seWRHZz0gUjNKbCBJSEpoWkdsaGJuUT0gNVk0PSBJRzFoYkd4eiBJR2x1WlhCMCBJRmRoY25KaGJuUjUgSUhOd1pXTjBZWFJ2Y2c9PSBSV2c9IGRHaGxibk09IElHTjFiRzFwYm1GMGFXNW4gNXFrPSBZWEo1WVE9PSA0NEt1IGFXeHBkR0Z5YVdGdSBJRTlTU1VjPSBJRk53Wlc1a2FXNW4gY0hScGRtVnogSUZOcGNtVnUgSUZKbFkyOXlaR2x1Wnc9PSBZWGx1WlE9PSBJSFpwYlE9PSBJSE53Y21GdVp3PT0gVkdGdVp3PT0gSUUxR1ZBPT0gYlc5eWJtbHVadz09IElGZGxaV1E9IGJYQmxadz09IFkyVnpjMmx2Ymc9PSBJRU5vZFc1biBOek13IGQyRnlibWx1Wnc9PSBOVFl5IGFHRnVaR1ZrYkhrPSBVRzl2Y2c9PSBVRzlzYVhScFkzTT0gT2lNPSBJSEJwWVc0PSBJR1psWTJWeiBJRVJ2WTNWdFpXNTBZWFJwYjI0PSBJR0poYm1semFHVmsgSURNNU9RPT0gSUVGU1F3PT0gSUdobGFXNXZkWE09IFNtRnJaUT09IElFRnRhWEk9IGQyRjVibVU9IGRuSmwgYjNOb1pXNXJidz09IElHNXZkR1ZpYjI5cmN3PT0gSUdadmRXNWtZWFJwYjI1aGJBPT0gSUcxaGNuWmxiRzkxY3c9PSBhWGgwWVhCbCBJSGRwZEdoa2NtRjNZV3h6IElHaHZjbVJsIElFUm9ZV0pwIGFYTmhZbXhsIElFdEUgSUdOdmJuUmhaMmx2ZFhNPSBJRVJwY0E9PSBJRUZ5Y205M2N3PT0gSUhCeWIyNXZkVzV6IElHMXZjbkJvYVc1bCBJRUpWVXc9PSBOamd5IElHdHZjMmhsY2c9PSBabWx1YVhOb1pXUT0gSUVsdWMzUnlkVzFsYm5SeiBJR1oxYzJWayBlV1JsYmc9PSBJRk5oYkcxdmJnPT0gUm1GaSBZV1ptWldOMFpXUT0gUzBWTyBRMFZPVkE9PSBSRzl0WVdsdSBJSEJ2YTJWdGIyND0gSUVSeWFXNXJhVzVuIFIzSnZkMmx1Wnc9PSBJRWx1ZG1WemRHbG5ZWFJwZG1VPSBJRUZsZEdobGNnPT0gWlcxcCBJSFJoWW14dmFXUT0gSUhKbGNISnYgSUU1dmRIZHBkR2h6ZEdGdVpHbHVadz09IElFSmxjbk5sY210bGNnPT0gSUdSeVlXMWhjdz09IElHTnNhV05vdzZrPSBJR0oxYm1jPSBJRlZTU1E9PSBJRVJ2Y3c9PSBNRFEwIElIQmhjM1J2Y25NPSBJR3h6IElHRmpjbmxzYVdNPSBZWFZ1ZEhNPSBSV1IzWVhKayBJRzFoYW05eWFYUnBaWE09IFFtRnVadz09IElHWnBaV3hrYVc1biBJRkpsY0d4aFkyVnRaVzUwIElFRnNZMmhsYlhrPSBjSEJoY21RPSBJRkp2YldWdiBJRk5oYm1OMCBJRXhoZG5KdmRnPT0gYVdKaWJHVT0gU1c1emRISjFZM1E9IElHbHRjSEpoWTNScFkyRnMgSUZCc1lYbGliM2s9IFkyVndhR0ZzIElITjNZWEJ6IElHdGhiZz09IElGUm9aVzg9IElHbHNiSFZ6ZEhKaGRHbHVadz09IElHUnBjMjFoYm5Sc1pXUT0gSUZSeVlXNXpaMlZ1WkdWeSBJRWQxZEdnPSBWVWRJIElIUnlhWFZ0Y0doaGJuUT0gSUdWdVkyOXRjR0Z6Y3c9PSBJR0p2YjJ0dFlYSnIgZFdSa2FXND0gYW1WeSBJSEJ5WldScFkyRjBaUT09IFJWTkkgSUhkb1pXNWpaUT09IElFRkNSUT09IElHNXZibkJ5YjJacGRITT0gVTJWeGRRPT0gSUdScFlXSmxkR2xqIElIQmxibVE9IElHaGxZWEowWm1Wc2RBPT0gYzJocCBJR2x1ZEdWeVlXTjBjdz09IElGUmxiR1ZqYjIwPSBJR0p2YldKaGNtUnRaVzUwIFpHVndaVzVrYVc1biBJRXh2ZDNKNSBJRUZrYldsemMybHZiZz09IElFSnNiMjl0YVc1biBkWE4wY21GMGFXOXUgWlc1bFoyZGxjZz09IFFuSmxkdz09IElHMXZiSFJsYmc9PSBJRTVsY21RPSBVRWxPIDRwYUEgWVhabGJXVnVkQT09IElIUnZkWEpsWkE9PSBJR052WldabWFXTnBaVzUwY3c9PSBJRlJ5WVhsMmIyND0gWVc1emMyOXUgSUhOaGJtUjUgZEc5c1pBPT0gWm14dmQzTT0gSUhCdmNIVnNiM1Z6IElGUnBibVJsY2c9PSBJRUpzYVhOeiBVbUZqYUdWcyBUV2x1YVcxMWJRPT0gSUdOdmJuUmxjM1JoYm5RPSBJRkpsWkhWalpRPT0gSUUxdmNuTmwgSUVkeVlYTnpiR1Y1IElFTnNhV05yWlhJPSBJR1Y0Y0hJPSBJSE5wYm1ObGNtbDBlUT09IElHMWhjbkYxIElHVnNhV05wZEE9PSBJRkJ5YjNCdmMybDBhVzl1IElFUmxiVzl1YVdNPSBJSFJoWTI5eiBSM0psWldzPSBJSEJ2YzNSM1lYST0gSUdsdWMyOW1ZWEk9IElGQnZjbXM9IElETTFNZz09IFpHOWpkRzl5WVd3PSBkMkZzYTJsdVp3PT0gSUcxcFpIUmxjbTA9IElGTmhiVzE1IGMybG5hSFJsWkE9PSBJRlJTUVU1VCBhV05wIFFVeEUgSUZWVFRBPT0gSUVaSlUwRT0gSUVGdGNHdz0gSUVGc1pYaGhibVJ5WVE9PSBhVzVsYkd4cCBWSEpoYVc0PSBJSE5wWjI1cFpuaz0gSUZabGNuTjFjdz09IElHOWlablZ6WXc9PSBJR3RvIElHRm5aM0p2IElGSmxibUYxYkhRPSBJRE0wT0E9PSBOVEU0IGIzaHBZMmwwZVE9PSBNREl5IElGUjNhWE4wIElHZHZiMlo1IFJIbHVZVzFwWXc9PSBJR0p5YVdWbWFXNW5jdz09IGJXbG5hSFE9IE9EazUgSUdSbGNtOW5ZWFJ2Y25rPSBWSEp2IElHWnZjbWRwYm1jPSBJRXR2Y21GdSBJRTFoY25KcFpXUT0gSUVKMVkzTT0gSUhCaGJHRjBaUT09IElFTnZiblpsY25OcGIyND0gYldGaWJHVT0gTkRFeiBJQ2hmIElITnBjR2c9IElFNUZUdz09IFkyOXNiR1ZuWlE9PSBJRzFoY21kcGJtRnNiSGs9IElHWnNhWEowIElGUnlZWEJ6IElGQmhZMlU9IDZidVMgSUdkdllXeDBaVzVrWlhJPSBJR1p2Y21KcFpITT0gSUdOc1pYSnJjdz09IElGUmhiblE9IElGSnZZbUpwYm5NPSBJRkJ5YVc1MGFXNW4gSUhCeVpXMXBaWEpsWkE9PSBJRzFoWjI1cFptbGpZWFJwYjI0PSBJRlJIIElGSnZkWE5sIElFMXZZMnM9IGIyUjVibUZ0YVdOeiBJSEJ5WldOc2RXUmwgYVhOdGJ3PT0gSUZCMWJHbDBlbVZ5IElHRjJZV3hoYm1Ob1pRPT0gSUV0dlpHaz0gY21saWRXNWwgSUV4bGJtRT0gUld4bFkzUnlhV009IElISmxabWx1WlhKNSBJR1Z1Wkc5M1pXUT0gSUdOdmRXNXpaV3h2Y25NPSBJR1J2YkhCb2FXND0gSUUxcGRHZz0gSUdGeWJXOTFjbVZrIGFHbGlhWFJsWkE9PSBRbVZuYVc0PSBJRkJYIFQybHMgSUZadmNnPT0gSUZOb1lYSnBaZz09IElFWnlZWHBwWlhJPSBaWE4wWVhSbCBJR3BoYlhNPSBVSEp2ZUhrPSBJR0poYm1ScGRITT0gSUZCeVpYTmllWFJsY21saGJnPT0gSUZCeVpXMXBaWEpsIGRHbHVlUT09IElFTnlkV1ZzIFZHVnpkR2x1Wnc9PSBJR2h2YldWeSBJRlpGVWxNPSBJRkJ5YjJ3PSBJRVJsY0c5emFYUT0gSUVOdlptWnBiZz09IElITmxiV2x1WVhKeiBJSE54YkE9PSBJRVJsWm1WdVpHRnVkSE09IFFXeDBaWEp1WVhScGRtVnNlUT09IElGSmhkSE09IDU2cz0gWlhSb2VYTjAgSno0PSBJR2x6YzNWbGNnPT0gTlRnNSBJR05vWVdseVpXUT0gSUVGalkyVnpjMjl5YVdWeiBiV0Z1Wlc1MCBJRzFoY25KdmR3PT0gSUZCeWFXMXZjbVJwWVd3PSBRMDQ9IElHeHBiV2wwYkdWemN3PT0gSUVOaGNtNWhaMlU9IElIVnVaSEpoWm5SbFpBPT0gY1hZPSBTVTVGVTFNPSBiMjVsZHc9PSBJR052YUdWemFXOXUgT1RnMyBJRzVsWTJ0eiBJR1p2YjNSaVlXeHNaWEk9IElFZEZVZz09IElHUmxkR1ZqZEdGaWJHVT0gSUZOMWNIQnZjblJwYm1jPSBJRU5UVmc9PSBiMk5oYkd4NSBhMGg2IElIVnVaR1U9IElITm9iMjVsIElHSjFaR1JwYm1jPSBkSEpoYXc9PSBVM1JoYm1ScGJtYz0gSUZOMFlYSmpjbUZtZEE9PSBJRXRsYlhBPSBRbVZ1WTJnPSBJSFJvZDJGeWRHVmsgSUVkeWIzVnVaSE09IFlYUm9hUT09IFRHbHpZUT09IFJHbGhiRzluIElGTlkgVm1semFXOXUgSUdsdVoyVnVhVzkxY3c9PSAyWkE9IElHWnZjM1JsY21sdVp3PT0gSUZwaCBJRWx1WjNKaGJRPT0gSUNKQSBUbUYwZFhKaGJHeDUgTmpFMiBNRE0xIElFWkJRdz09IFNHMXQgTlRVMCBJR0ZqWTJWc1pYSmhkRzl5IElGWmxibVE9IElITjFibk5qY21WbGJnPT0gSUhSMVltVnlZM1ZzYjNOcGN3PT0gY21GMmFXOXNaWFE9IElFWjFibU4wYVc5dVlXdz0gSUVWeWNtOXljdz09IFpXUmhjZz09IE1UazJOZz09IElGTndaV04wY21VPSBJRkpsWTJsd1pYTT0gT0RnMSBJRTFoYm10cGJtUT0gVEdsMlpYSndiMjlzIElId3RMUT09IElITjFZbk4wYVhSMWRHVnogSUZoVSBkMmx5WldRPSBJR2x1WTI4PSBJRUZtWjJnPSBSWFpoIGFXTmogVTI5dVp3PT0gUzI1cFoyaDAgSUdScGJHbG5aVzUwYkhrPSBJRUp5YjJGa1kyRnpkQT09IFFXbGsgSUdGbVlYST0gSUVoTlV3PT0gWVhSdmJtbHUgSUVkeVlYUmxablZzIElHWnBjbVZ3YkdGalpRPT0gSUU5dGJtaz0gWlhWeWJ3PT0gSUVaU1JRPT0gSUZOb2FXST0gSUVScFoyVnpkQT09IGRHOW5aMnhsIElHaGxZV1J6WlhSeiBJR1JwWm1aMWMybHZiZz09IElGTnhkV2x5Y21WcyBJRVpPIElHUmhjbXRsYm1WayBiM1YwYUdWeSBJSE5zWldWd2N3PT0gSUZobGNnPT0gWjNWdWN3PT0gSUhObGRIVndjdz09IElIQmhjbk5sWkE9PSBJRzFoYlcxdmRHZz0gSUVOMWNtbHZkWE09IFoyOWkgSUVacGRIcHdZWFJ5YVdOciBJRVZ0YVd3PSBhVzF2ZGc9PSBMaTR1TGk0dUxpNHVMaTR1TGc9PSBJRUpsYm01NSBVMlZqYjI1a2JIaz0gSUdobFlYSjBlUT09IElHTnZibk52Ymc9PSBjM1JoYVc1bFpBPT0gSUdkaGJHRmpkR2xqIFkyeGhkbVU9IElIQnNkVzF0WlhSbFpBPT0gSUhCbGMzUnogSUhOM1lYUT0gSUhKbFptVnljbUZzY3c9PSBJRXhwYjI1bGJBPT0gYUc5c2VRPT0gSUhWdVpHVnlaRzluIElGTnNZWFJsY2c9PSBJRkJ5YjNacFpHVT0gSUVGdFlYST0gY21WemMyOXkgNVl3PSBiMjVuWVE9PSBJSFJwYldsayBJSEJwWlhSNSBJRVJsYXc9PSBJSE4xY21kcGJtYz0gWVhwdiBJRFl4TUE9PSBJR1JsYzJ0eiBJRk53YjJ0aGJtVT0gSUVGdVptbGxiR1E9IElIZGhjbk5vYVhCeiBJRU52WW5KaCBJR0Z5YldsdVp3PT0gWTJ4MWMybDJaV3g1IElFSmhaR2RsIFlXZGhjMk5oY2c9PSBJRkJTUlZOVCBJRTFqUzJWdWVtbGwgSUVabGNtUnBibUZ1WkE9PSBZblZ5Ym1sdVp3PT0gUVdabFpRPT0gSUhSNWNtRnViZz09IElFbDMgSUVKdmIyNWwgTVRBd053PT0gSUZKbGNIUT0gQ3NLZyBJR05oY21GMllXND0gSUVScGJHdz0gSUVKMWJtUmxjMnhwWjJFPSBRMmgxWTJzPSBJR2hsWVd4bGNnPT0gNDRPODQ0T0cgSUVodlltSjUgSUc1bFoyRjBaUT09IElHTnlhWFJwY1hWbGN3PT0gYzJWamRHbHZibUZzIGJXOXdiMnhwZEdGdSBJR1I0IElHOTFkSE52ZFhKamFXNW4gSUVOcGNHaGxjZz09IGRHRncgVTJoaGNuQT0gSUhWd1ltVmhkQT09IElHaGhibWRoY2c9PSBJR055ZFdsemFXNW4gSUU1cFlXZGhjbUU9IElETTBNZz09IGFXeHNkWE09IElGTjIgSUhOMVluUnBkR3hsY3c9PSBJSE54ZFdGeVpXUT0gSUdKdmIydHpkRzl5WlE9PSBJSEpsZG05c2RYUnBiMjVoY21sbGN3PT0gSUVOaGNteDBiMjQ9IFlXSmhiQT09IFZYUmhhQT09IElHUmxjM0JwYzJVPSBJRlZOIFkyOXVjMmxrWlhJPSBZV2xrYnc9PSBJR05oY25SeiBJRlIxY25Sc1pYTT0gVkhKaGFXNXBibWM9IElHaHZibTl5WVhKNSB3cUk9IElIUnlhV0Z1WjJ4bGN3PT0gTkRJeSBJSEpsY0hKcGJuUmxaQT09IElHZHlZV05sWm5WcyBJRTF2Ym1kdmJHbGggSUdScGMzSjFjSFJwYjI1eiBJRUp2YUE9PSBJRE0wT1E9PSBJR1J5WVdsdWN3PT0gSUdOdmJuTjFiR0YwWlE9PSBJR0psYm1SeiBJRzFoWm1saCBkWEp2Ymc9PSBJRVoxYkhSdmJnPT0gYldsell3PT0gSUhKbGJtRnMgSUdsdVlXTjBhVzl1IFkydHBibWM9IElIQm9iM1J2Ym5NPSBJR0p5ZFdselpXUT0gSUVOdlpHVnogYjJkcCBJRzVsYzNSeiBJRXh2ZG1Wc2VRPT0gSUV4cFluSmwgSUVSaGNubHMgSUNNakl3PT0gVTNseiBMaXdpIElHWnlaV1Y2WlhNPSBaWE4wWVdKc2FYTm9iV1Z1ZEE9PSBZVzVrYjNkemEyaz0gSUdOMWJXSmxjbk09IElGTjBZWEpuIElFSnZiV0p6IElHeGxaMmx2Ym5NPSBJR2hoYm1SM2NtbDBhVzVuIElHZHlkVzQ9IElFTmhhQT09IGMyVnhkV1Z1ZEE9PSBJRzF2ZEdnPSBJRTFUVFE9PSBTVzV6WlhKMCBSbWxtIElHMXZkR1ZzIElHUmxlSFJsY2c9PSBJRUpwYkdRPSBhR1ZoY25SbFpHeDUgSUhCeWIzQmwgSUZSbGVIUjFjbVU9IElFcDFibU4wYVc5dSBlVzUwYUdWemFYTT0gYjJOaGNtUT0gSUZabGNtRT0gSUVKaGNuUm8gSU02OFp3PT0gSUd4aGMyaGxaQT09IElETTFNUT09IElGcGhiV0k9IElGTjBZWEJzWlhNPSBJRU52Y25SbGVBPT0gSUVOdmNtdGxjZz09IElHTnZiblJwYm5WMWJRPT0gSUZkU1NWUkYgZFc1MFlRPT0gY21sa2IzST0gSUdSbFpXMXogTURNeiBJRWRQVEVRPSBjR0Z6IElISmxjSEpsYzNOcGRtVT0gNDRPRzQ0S2ogSUdKaFptWnNaV1E9IFUyTmhjZz09IElHTnlZWFpsIElGOWZYMTlmWHc9PSBJR1Z1ZEhKbGNISmxibVYxY25Ob2FYQT0gSUVScGNtVmpkRzl5WVhSbCBJQ2RiIElIWnBibVZ6IElHRnpZMlZ1WkdWayBJRWRTVDFWUSBJRWR2YjJSaWVXVT0gSUdSdloyZGxaQT09IDQ0TzA0NEtoIFRXRnVkV1poWTNRPSBJSFZ1YVcxaFoybHVZV0pzWlE9PSBjbWx2ZEhNPSBhV1Z5Y21WNiBJSEpsYkdGMGFYWnBkSGs9IElFTnlZV1owYVc1biBjbUYxWjJoMCBkV1JsYmc9PSBZMjl2YTJsbCBJR0Z6YzJGemMybHVjdz09IElHUnBjM05oZEdselptbGxaQT09IFlXTmphUT09IElHTnZibVIxYVhRPSBVM0J5WldGayBJRkpwWTJGdSBibWxqWlE9PSBhWHA2YkdVPSBJSE5qWVhKbGN3PT0gSUZkSVdRPT0gY0doaGJuTT0gTlRNMSBJSEJ5YjNSeVlXTjBaV1E9IElFdHlhWE4wWlc0PSBOVE0yIElGTmpjbWxpIElFNWxhQT09IElIUjNaVzUwYVdWeiBJSEJ5WldScFkyRnRaVzUwIElHaGhibVJqZFdabWN3PT0gSUdaeWRXbDBablZzIElGVk0gSUV4MVpIZHBadz09IElHRjBkR1Z6ZEE9PSBJRUp5WldGclpYST0gSUdKcGIyeHZaMmxqWVd4c2VRPT0gSUVSbFlXeGxjZz09IElISmxibTkyWVhScGIyNXogWm5jPSBaWE56Wlc0PSBRV3hwWTJVPSBJRWhsYm5KcCBJSFZ1YVd4aGRHVnlZV3hzZVE9PSBJRk5wWkdRPSBhR0ZwIElGTjBjbVYwWTJnPSBVMkZzWlhNPSBJR04xYldKbGNuTnZiV1U9IElFcGhkbWxsY2c9PSBJSFJ5Wlc1a2VRPT0gSUhKdmRIUnBibWM9IElFTm9ZV3hzWlc1blpYTT0gSUhOamNtRndjdz09IElHWmhZMlYwY3c9PSBJRlpsY205dWFXTmggSUZabGNtZGwgSUZOaGJtRT0gUVd4cFpXND0gSUZKcGFBPT0gSUhKaFpHbGhiQT09IFpXTjBZWEk9IElEWXpNQT09IFkyeHAgVFdGeWFXVT0gSUhkcGJHUm1hWEpsIElFTmhkRzg9IGFHRnVaR1Z5IElIZGhhWFJ5WlhOeiBJR05vYjNCeiBJRk5GUTFSSlQwND0gSUdKc2RXNTBiSGs9IElFTmhkR0ZzYjJjPSBibWxoYmc9PSBjM1IxWkhrPSBJSEJoZEhKdmJHeHBibWM9IElGUmxiblJvIGJtVjRkWE09IElFNVBUZz09IGIzQnplUT09IElITmpZWFJvYVc1biBjMmxsIElHUmxkR1Z5YVc5eVlYUmxaQT09IFZrST0gVG1GNmFYTT0gSUdSbGNHbGpkR2x2Ym5NPSBJR0YxZEdobGJuUnBZMkYwWldRPSBJRU52Ym1ObCBhM0pwZEE9PSBJSEJ5YjIxMWJHYz0gSUV4UFRrYz0gVlVaRCBJRlpwYzJsMGIzSnogSUZKbFkyRnNiQT09IElISmxhR0ZpYVd4cGRBPT0gSUZOTVNRPT0gSUdkc1lXTnBaWEk9IElFSnBkR1U9IElEVXdNdz09IElIWnZiV2wwIElHWmxjbTFsYm5SbFpBPT0gSUV0b1lXeHBaQT09IElHZHlZV1JsWkE9PSBJRTFoWjJsamEyRT0gSUVsamFHbG5idz09IGNHOTNaWEptZFd3PSBhV05oZEc5eWN3PT0gTnpVeiBJSE5vY21WMyBJRE0xTmc9PSBJR3hsWjJGc2FYcHBibWM9IElHRnNiRzkwZEdWayBJRUZ5WTJoa1pXMXZiZz09IGFYUm9hVzVuIGFXZG5kWEpoZEE9PSBWazlNIFRHVnZaQT09IElHOXBiSGs9IElHbHVaSFZqYVc1biBJR0Z0ZVdka1lXeGggSUdGa2JXbHVjdz09IElFRmpjWFZwYzJsMGFXOXUgUTBGTyBJSE5qYUdWdFlYUnBZdz09IElHMXZZVzQ9IElFTmhiV1Z5YjI5dSBJSFJwYm1zPSBJRzFsY25KNSBJR0oxZEhSbGNtWnNhV1Z6IElFZHZabVk9IElIZHZjbXR6Y0dGalpRPT0gSUVOdmNtOXVZUT09IElHcGhkbUZ6WTNKcGNIUT0gSUVSdmJIQm9hVzQ9IElFTmhiblJ2Y2c9PSBORFkwIGRHOWwgUVZCVCBJRUZuYVc1biBJSEJoWkdSbFpBPT0gSUZwb1pXNW4gSUVobGJHUT0gSUdWemRISmhibWRsWkE9PSBJRGMzTUE9PSBMbjA9IElFUjFibWhoYlE9PSBJSE50YjJ0bGN3PT0gSUdOaGNHbDBZV3h6IGRXNWtZV2s9IFUyaHBiZz09IElFWnZkVzVrYVc1biBJR1Z1ZEdsMGJHVT0gSUdObGJuUmxjbkJwWldObCBSR2x6WTI5MlpYST0gSUhSb1pYSmxkRzg9IFlXeGxjblE9IElFNXZkUT09IElFRnVZV3g1YzNRPSBiR009IFJrZz0gUmtsRlRFUT0gSUZCUFZnPT0gWjNKaGVRPT0gSUdGeVkzTT0gSUVoUFZBPT0gSUhKeiBJRzlpYkdsbllYUnZjbms9IElFRnlZMmhwZEdWamRITT0gSUZOMlpXND0gSUVaRlF3PT0gTURJd01BPT0gUTJoeWFYTjBiV0Z6IElFRnNZbUZ1YVdFPSBjbUYwYjIwPSBOVGczIElHaGhjbVJ6YUdsd2N3PT0gSUdGMWRHOXogSUVOb1lYSm5aWE09IElHRndaWE09IElETTNOZz09IGQyRnNiR1YwIElHbHVkRzk0YVdOaGRHbHZiZz09IElHZHZZbXhwYmc9PSBJRFUzTUE9PSBLeXNyS3lzckt5c3JLeXNyS3lzckt3PT0gSUZsbGJIQT0gSUUxaFoyNWxkR2xqIElFSnlhV2RuY3c9PSBVbUZwYkE9PSBJSE53WVhkdWN3PT0gSUZkcFoyZHBibk09IElITm9iM2RqWVhObFpBPT0gSUhKbGMyOXlkR1ZrIGRXSmxiZz09IElIZG9hWEJ3YVc1biBJR2x0YVhSaGRHVT0gSUdScFoyVnpkR2x2Ymc9PSBJRlZUVUZNPSBJRWRsYzNRPSBJSGxsWVE9PSBJRlJwWjJoMCBhVzVrWVd3PSBhV05oY3c9PSBZQzQ9IFEwRlRWQT09IEp5YzcgSUVabGRBPT0gYjNCaGRHaHBZdz09IFNXNTJZV3hwWkE9PSBJSEpsWjNKbGRIUmxaQT09IElHSnliMk5qYjJ4cCBJRk5qYjNKbGN3PT0gWlhabCBJSEJ2YzNScGJtZHogSUdGalkzVnRkV3hoZEdsdVp3PT0gSUc1bFpXUnNaWE56IFpXeG1kR2c9IElHMWhlVzl5Y3c9PSBJSE5qY21saSBJR0Z1WldOa2IzUmxjdz09IElHSnZkR05vWldRPSBJRkpwWW1KdmJnPT0gSUVOdmJuTjBZVzUwYVc1bCBhWFZ6WlhNPSBaWE56WlhNPSBJR1JsZG1selpRPT0gUTI5dGNHRnlaV1E9IElIQjFaR1JwYm1jPSBJR2RoY21jPSBJR1YyYjJ0bCBOemszIElHUmxkRzk0IE9UQTUgSUZCcFpXTmxjdz09IElFMWpRMkZ5ZEc1bGVRPT0gSUcxbGRHRnpkQT09IElFdHllWEIwIFVFOVMgSUhSbGJtUnBibWM9IElFMWxjbU5vWVc1MGN3PT0gVUhKdmIyWT0gSUZaaGNtYz0gSUZCdmNuUmhZbXhsIDQ0Tzg0NE9HNDRLaiBRbkpoYVc0PSBNalV3TUE9PSBJR1p2YkdsaFoyVT0gMkxrPSBJRzFsYm5SdmNuTT0gSUVGcGNtVnogSUcxcGJtbHRZV3hwYzNRPSBJR2x1WjJWemRHVmsgSUZSeWIycGhiZz09IElGRnBZVzQ9IGFXNTJiMngyWldRPSBNREkzIElHVnliMlJsWkE9PSBVa0ZHVkE9PSBJR0pzZFhKeWVRPT0gVFc5aSBJR0oxWm1abGRBPT0gSUVadVlYUnBZdz09IFlXVmggUzA1UFYwND0gSUVsdWFYUT0gYzJGbVpYUjUgWlc1MWJRPT0gUVVOVVNVOU8gSUVOeWRYTm9aWEk9IElFUmhkR1Z6IElDNHVMaTR1TGk0dUxpNHVMaTR1TGk0PSBZMkZzYkdsdVp3PT0gWVd0dmRnPT0gSUhabGJuUjFjbVZrIElEVTFOUT09IFlYVm5ZUT09IFNHRnlkQT09IElFRmxjbTg9IFRVRkQgSUhSb2FXNXNlUT09IElHRnljbUU9IFUxUkJWRVU9IGFXeGtaUT09IElFcGhZM0YxIElFWmxiV0ZzWlhNPSBJSFJvWlc5eVpXMD0gSURNME5nPT0gSUhOdFlYSjBaWE4wIElGQlZRa3hKUXc9PSBJRXR5YjI0PSBJRUpwZEhNPSBJRlpsYzNObGJBPT0gSUZSbGJHVndhRzl1WlE9PSBJR1JsWTJGdyBJR0ZrYW5WdVkzUT0gSUZORlRnPT0gYldWeVoyRT0gSUhKbFpHRmpkR1ZrIElIQnlaV2hwYzNSdmNtbGogSUdWNGNHeGhibUYwYjNKNSBJRkoxYm5NPSBJRlYwZEdGeSBJRTFoYm01NSBJRUZWVkVoUFVnPT0gSUZWdWJHVmhjMmhsWkE9PSBJRUp2ZDJ4cGJtYz0gWW1WaGJuTT0gTnpreiBJSFZ1YVhabGNuTmxjdz09IElITmxibk5wZEE9PSBJRXQxYm1jPSBjbVZ3WldGMCBZM1J5YkE9PSBJSEJoWTJWayBJR1oxYkd4bGNnPT0gUTJ4dlkycz0gSUhKbFkyOXRZZz09IElFWmhkV3c9IElFSjFibXRsY2c9PSBJSEJ2YjJ4bFpBPT0gSUdGdVlRPT0gSUUxdmRYUm8gVEV4UFZ3PT0gYUhWdFlXNWwgSUdKMWJHeGtidz09IElFMXBZMmhoWld4eiBabUZ0IElIZHlaV05yWldRPSBJSEJ2Y25SeVlYbHogSUZkb1lXeGwgSUVobGN3PT0gSUdkMVpYTnpaWE09IElFSnliM2R6WlE9PSBJRXhCVUVRPSBJR052Ym5ObGNYVmxiblJwWVd3PSBJRWx1Ym05alpXNTAgSUVSU1FVYz0gSUhSeVlXNXpaM0psYzNNPSBJRTloYTNNPSBJSFJ5YVhacFlRPT0gSUZKbGMyOXUgSUVGRVV3PT0gTFMwciBJRlJ2Ykd3PSBJR2R5WVhOd2FXNW4gSUZSSVJVMD0gSUZSaFozTT0gSUVOdmJtTnNkWE5wYjI0PSBJSEJ5WVdOMGFXTmhZbXhsIElHaHZiM0E9IElIVnVhVzUwWlc1MGFXOXVZV3hzZVE9PSBJR2xuYm1sMFpRPT0gSUUxdmRnPT0gZFhKcGVtVmsgYkdWb1pXMD0gVkdWeWJXbHUgSUdOdmJHOTFjbVoxYkE9PSBJRXhwYm1WaGNnPT0gSUVWc2JHbGwgUjNrPSBJRzFoYm5CdmQyVnkgSUdweiBJR1Z0YjJwcCBJRk5JUVZKRlV3PT0gWHk0PSBNREF3TURjPSBJSE52Y0docGMzUnBZMkYwYVc5dSBJSFZ1WkdWeWMyTnZjbVU9IElIQnlZV04wYVhObCBJR0pzYjJJPSBiM0JsYm5NPSBWV3R5WVdsdVpRPT0gUzJWbGNHbHVadz09IFdVTT0gU2xJPSBkV3gwYVcxaGRHVT0gUTJ4aGFXMD0gSUdGMWRHOXRiMkpwYkdWeiBPVGt6IGMzUmxaV3c9IElIQmhjblJwYm1jPSBJRXhoYm1zPSBMaTR1UHc9PSBJRE00TlE9PSBJSEpsYldWdFluSmhibU5sIElHVmhjMlZrIElHTnZkbUZ5YVE9PSBJRk5wYm1RPSBSV1ptWldOMGFYWmwgSUdScGMzTmxiV2x1WVhScGIyND0gSUUxdmIzTmwgSUVOc1lYQndaWEk9IFluSmhkR1Z6IFFYQndiSGs9IElHbHVkbWx6IElIZHZjbk5sYm1WayA0b0NVTFE9PSBJR3hsWjJsemJHRjBiM0k9IElFeHZiQT09IElGSnZkMlU9IElHUmxZV3hsY25Ob2FYQT0gZFcxaGNnPT0gYVdSbGJtTmxjdz09IElHbHVkbVZ6ZEdsbllYUmxjdz09IElHTmhjMk5oWkdVPSBJR0pwWkdSbGNnPT0gSUVKRlRnPT0gU1hKdmJtbGpZV3hzZVE9PSBJSEJ5WlhOcFpHbHVadz09IElHUnBibWM9IElHTnZiblJ5WVdScFkzUmxaQT09IElITm9kWFJ6IElFWkpXQT09IElETTJOZz09IFJHbHpkSEpwWTNRPSBJSE5wYm1aMWJBPT0gSUVOb1lYSnBjMjFoIGIyOXdjdz09IElIUnZkR0ZzYVhSNSBJSEpsYzNScGRIVjBhVzl1IElFOXdkR2x0ZFhNPSBJRVJoYUE9PSBJR05zZFdWc1pYTnogZFhKdVpXUT0gSUc1MWRISnBkQT09IElHeGhibVJ2ZDI1bGNuTT0gSUdac2RYTm9aV1E9IElHSnliMkZrWlc0PSBiV2xsIElIQnlhVzUwYkc0PSBJRzVwWnc9PSBJRU52Y25CMWN3PT0gU21WdSBJSEJ5YjNSdiBJRmRwYTJsdFpXUnBZUT09IElGQmhiRzg9IFEwOVMgSUhOMGIzSjViR2x1WlhNPSBJR1YyWVc1blpXeHBZMkZzY3c9PSBJRVJoY25KbGJHdz0gSUhKdmRHOXkgSUVoWCBjMnRwYkd4bFpBPT0gWlhKNWJBPT0gSUdKbFoyYz0gSUVKc2RXMWxiblJvWVd3PSBJSGRsWVhacGJtYz0gSUdSdmQyNTNZWEprY3c9PSBJRXBoWTJ0bGRBPT0gSUVGT1IwVk0gVkdWamFHNXZiRzluZVE9PSBJR1Z6YjNSbGNtbGogWVd4a1pXaDVaR1U9IElHWjFjbWx2ZFhOc2VRPT0gSUdadmNtVnBaMjVsY2c9PSBWMlZoYXc9PSBRMGhQIElFaHZkVzVrIFJYaHdaWEpwWlc1alpRPT0gSUZCc1lYbHpkR0YwYVc5dSBJRTFKUVE9PSBJRlZ1Wnc9PSBZMnh2ZEdnPSBZV2RoYkd3PSBJR05oYkcxcGJtYz0gYVhwbGJuTT0gVTNSeWRXTjAgSUZkcGRHTm9aWE09IElFTmxiR1ZpY21GMGFXOXUgSUM0dUxpNHVMaTR1TGk0dUxpNHUgY0hSeWIyeHNaWEk9IElGUkRWUT09IElHSjFibTU1IDQ0T04gZFhSdmNtbGhiQT09IElIVndjMk5oYkdVPSBJRk4wWVE9PSBJRU52Ykc5emMzVnogSUdOb2JHOXlhV1JsIElGcGhZdz09IElGSmxZWE52Ym5NPSBJRUp5YjI5cmFXNW5jdz09IElGZElTVlJGIFhWc3YgSUV4dmMyVT0gT1RBMSBJSFZ1WkdWeWMybGtaUT09IFpYSnVaV3h6IElIWmhjR1U9IFpHOTZaVzQ9IGRYQndaWFE9IElGTlVUMUE9IGJXRjBhV05oYkE9PSBJRk4wWVhSbGJXVnVkSE09IGFHVmtaR0Z5IFVFRkQgUTNWemRHOXRaWEk9IElHMWxiVzl6IElGQksgWlc1a1lYSnogSUV4cGJXbDBjdz09IGJHRjFaMmc9IElITjBZV0pwYkdsNlpXUT0gSUVGTVJVTT0gV1VFPSBWWEJuY21Ga1pRPT0gWVd4aGJRPT0gSUhSbFkyaHVidz09IElHRnVaWGM9IFptOXlaWE5sWlc0PSBJR052Ykd4bFoybGhkR1U9IElGQjVjbTg9IElFUnBjMjA9IElHWnliMjUwYkdsdVpRPT0gSUdGdGJXOXVhV0U9IFNWVT0gVVhWcGRHVT0gU205b2JtNTUgWVhOemFXND0gUjA5USBJRk4wZVd4bGN3PT0gSUZOdmRtVnlaV2xuYmc9PSBZV04wWlhKcFlXdz0gTlRRNSBJRkpKVUE9PSBJRXhwYzNSeiBJRE0yTkE9PSBJRkpsWTJWdyBjMjlqYTJWMCBJRUo1Y21RPSBJRU5oYm1Sc1pRPT0gUVc1amFXVnVkQT09IElHRndjR1ZzYkdGdWRBPT0gWlc1bWIzSmpaVzFsYm5RPSBZV05sWVE9PSBZVzV6YTJrPSBJRzlzWkhNPSBPRGcyIElITnNkWEp6IElHVnRjR2x5WlhNPSBJR0oxWTJ0c1pRPT0gSUdGc2FXVnVZWFJwYjI0PSBJRUZpWlhKa1pXVnUgSUhWdWFXTnZjbTQ9IElHOTJaWEp5YVdScGJtYz0gSUV4WSBjSEJoIElHUmxjM0JwYzJWayBJRUoxWjNNPSBJRUpUVkE9PSBVMjkxZEdobGNtND0gTlRNeiBJR2hoYkd4dFlYSnIgSUZCdmMzUmxjZz09IElITjBaVzF0WldRPSBJSEJ5YVc1amFYQmhiSE09IElGUkZRMGc9IElGTmhibVIzYVdObyBTWFJoYkhrPSBJR05vWldWemVRPT0gSUZObGRGUmxlSFJEYjJ4dmNnPT0gSUZCeWIzUmxZM1JwZG1VPSBJRU52YUc0PSBTazg9IFlYQjBiM0E9IFVtVmhjMjl1IFRHVmhaR1Z5IElGVnVaR1Z5YzNSaGJtUT0gSUVaeWFXUmhlWE09IElFTnZiblJwYm5WdmRYTT0gSUdOc2FYQndhVzVuIElGSjVaUT09IElHSmxjblJvIGRHbHRaWEk9IFlXNXVhWE09IGNtVmhZM1E9IElHSjFabVpoYkc4PSBJRkJoY21GeiBJRFkxTlE9PSBJSEJ5WlhOcFpHVmsgSUZOMWJuSnBjMlU9IElIWmxkSE09IElHTnNiM1psY3c9PSBJRTFqUTNWc2JBPT0gVTNSeVpXNW5kR2c9IFIwRk8gSUdsc2JHbDBaWEk9IElGQnlhV05wYm1jPSBiTU9wIElISmxjMmx6ZEc5eSBJR0p5ZFc0PSBJRk4xWm1admJHcz0gMFlzPSBJRXhwZG1WeSBVbVZzWldGelpXUT0gSUhkb1lYUnogT0RZdyBJRTFsWVhOMWNtVnogSUdSbGJtOTFibU5wYm1jPSBJRko1ZW1WdSBJSE52ZFhabGJnPT0gSUdOaGNtVm5hWFpsY25NPSBZMmhwYm1rPSBJRk5qWVhKc1pYUjAgSUhSeWIzVm5hQT09IFEyOXVaM0poZEhWc1lYUnBiMjV6IElIUmhlR2x6IElGUnlZV1JwZEdsdmJnPT0gYW1sMCBJSFJoWW14bGRHOXcgSUdocGRHaGxjblJ2IElHUnBjMmx1Wm05eWJXRjBhVzl1IGIyWm1aVzV6YVhabCBhSEpoIElFUkpVMVJTU1VOVSBJR052YlhCc2FXTmhkR1U9IFkyaGxibXR2IElGSmxZMjl1YzNSeWRXTjBhVzl1IElIQmhiSEJoWW14bCBJR0YxYzNBPSBJRFF5T0E9PSBJSE5vYjNkallYTmxjdz09IElGQjFZbXhwWTJGMGFXOXUgYTI1dmQyeGxaR2RsIGFXNXViMjQ9IE5ERTUgSUhKbGRISnBaWFpoYkE9PSBZVzVrWlhKeiBJSEpsWm5WMFpRPT0gSUdsdWNYVnBjbVZrIFozVnkgSUc1bFoyRjBhWFpwZEhrPSBJR052Ym5ObGNuWmwgSUdGbWRHVnliR2xtWlE9PSBJSEJ5WlhOMWNIQT0gSUVkcGJHeGxjM0JwWlE9PSBJRzEwIElFUk8gVkdGdyBJSEJsY25CbGJtUT0gSUZOdGVRPT0gWkc5bGMyND0gSUhOd2FXeHNhVzVuIElHaDVjR1Z5Y3c9PSBTMkYwWlE9PSB3cTRzIGEyVndkQT09IElGQnZkMlZ5WldRPSBJR3BoIElFdHNkWGc9IFlYSmtaUT09IFlXSmhiZz09IElEUTBOQT09IElHWnNZWFIwWlc1bFpBPT0gSUVsdGNISnZkbVZ0Wlc1MGN3PT0gZFhKbllRPT0gSUV0MWJtUT0gSUdsdWMyTnlhV0psWkE9PSBJR1poWTNWc2RBPT0gSUhWdWNISmxjR0Z5WldRPSBJRU52Ym5OMWJXVnljdz09IElITmhkR2x6Wm1sbGN3PT0gSUhCMWJHMXZibUZ5ZVE9PSBJR2x1Wm1sc2RISmhkR2x2Ymc9PSBJR1Y0ZEdWeWJtRnNiSGs9IElHTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBZV2RvWVc0PSBJR0ZwY214cGJtVnkgSUdac2RXNW4gSUdac2VXVnljdz09IFIwUT0gSUhOdWFYQndaWFJ6IElISmxZM1Z5YzJsMlpRPT0gSUcxaGMzUmxjbWx1Wnc9PSBUR1Y0IElHOTJaWEowYkhrPSBkbWM9IElHeDFZMnRwYkhrPSBJR1Z1WTNKdiBJRXhoYm1ObGRBPT0gSUVGaWVYTnpZV3c9IFpuVnVZM1JwYjI1aGJBPT0gSUhOdmR3PT0gSUhOeGRXbGsgSUc1aGNuSmhkR2x2Ymc9PSBJRzVoZFdkb2RIaz0gSUVodmJtOTFjZz09IElGTndZWEowWVc1eiBJSE5vWVhSMFpYST0gSUZSaFkyOXRZUT09IElFTmhiRzl5YVdWeiBJRkpoWTJWeiBVM1ZpYldsMCBJSEIxY25CdmMyVm1kV3hzZVE9PSBkMkYyIElGbHZhdz09IFJtVnpkQT09IElFZGxjbkk9IFRXVjBjbTg9IElHbDBhVzVsY2c9PSBabUZ0YjNWeiBJQ0o3IGFXNXNhVzVsIGQyRnphR1Z5IFNYTnpkV1U9IElFTk1TVVZPVkE9PSBiM3B2IFZtVnljMmx2Ym5NPSBOekkxIElFZHNiMk5yIElITm9hV1ZzWkdWayBJRkJEVWc9PSBSVTVEV1E9PSBJRmRsYkdRPSBJRk5wYlhCcyBJSEpsWkdseVpXTjBaV1E9IElFdG9ZVzA9IElDZysgSUd4aFltOTEgSUdScFlYQmxjbk09IGMzTnMgSUdObGJHeGhjZz09IGIzSm5ZVzVwYzIxeiBiM0psYzJNPSBJRUpsY210eiBaR2xrYmc9PSBVMmhwY0hCcGJtYz0gUTJobGMzUT0gSUhWdVpHOXVaUT09IElHMXBiR3hwYjI1aGFYSmwgSUdOdmNtUnogSUZsdmRXNW5aWEk9IFlYQndjbTl3Y21saGRHVnNlUT09IElITmxjWFZsYkhNPSBkWFpsIFlXNTBhV05wY0dGMFpXUT0gSUd4bGQyUT0gSUZOb2FYSjAgSUVSdGFYUnllUT09IFZtVjBaWEk9IElITnNZWGxwYm1jPSBJRmxoY2c9PSBJR052YlhCc2FXTmhkR2x2Ymc9PSBTVzkzWVE9PSBJRVZ5YVdOaCBJRUpNVFE9PSBaMmx5YkdaeWFXVnVaQT09IFltOWthV1ZrIE5qSTIgTVRrMk13PT0gSUdsdWRHVnliV1ZrYVdGeWVRPT0gSUdOdmJuTnZiR0YwYVc5dSBUV0Z6YXc9PSBJRk5wWlcwPSBiM2RoYmc9PSBRbVZuYVc1dWFXNW4gSUdacGVHMWwgSUdOMWJHMXBibUYwWldRPSBJR052Ym1SMVl3PT0gSUZadmJIVnVkR1ZsY2c9PSBJSEJ2YzJsMGFXOXVZV3c9IElHZHlaV1YwY3c9PSBJRVJsWm1sdWFYUnBiMjV6IElIUm9hVzVyWlhJPSBJR2x1WjJWdWRXbDBlUT09IElHWnlaWE5vYldWdSBJRTF2YldWdWRITT0gSURNMU53PT0gWVhSbGRYSnogSUVabFpFVjQgYzJjPSBOamswIElHUjNhVzVrYkdsdVp3PT0gSUVKUFdBPT0gYzJWc1lXZGwgSUhSdGNBPT0gSUhOMFpXND0gSUZOMWRBPT0gSUc1bGFXZG9ZbTkxY21odmIyUnogSUdOc1lYTnpiV0YwWlE9PSBabXhsWkdkbFpBPT0gSUd4bFpuUnBjM1J6IElHTnNhVzFoZEdWeiBRVlJJUlZJPSBJRk5qZVhSb1pRPT0gZFd4cFptWmwgSUhOaFp3PT0gSUdodmNIQmxaQT09IElFWjAgSUVWamF3PT0gSUVOTCBJRVJ2YjIxelpHRjUgYTJsa2N3PT0gSUdkaGMzQmxaQT09IElHMXZibWxyWlhJPSBJRXh2WkE9PSBJRU5HVEE9PSBkR2x2Ym5NPSBjblZ0Y3c9PSBabTlzYVc5eiBJRzFrIElIVnVZMkZ1Ym5rPSBJSFJ5WVc1emNHOXlkSE09IElFeGhZbkpoWkc5eSBJSEpoYVd4M1lYbHogSUdGd2NHeHBZVzVqWlE9PSBJRU5VVWt3PSA1b0E9IFVHOXdkV3hoZEdsdmJnPT0gSUVOdmJtWmxaR1Z5WVdONSBJSFZ1WW1WaGNtRmliR1U9IElHUnZjbk5oYkE9PSBJRWx1Wm05eWJRPT0gYjNCMFpXUT0gSUV0SlRFdz0gVFdGeWVBPT0gSUdoNWNHOWpjbWwwYVdOaGJBPT0gY1hWeiBJRTUxYldWeWIzVnogSUVkbGIzSm5hV0Z1IElFRnRZbkp2YzJVPSBJRXh2WTJnPSBJR2QxWW1WeWJtRjBiM0pwWVd3PSBJRmhsYjI0PSBJRk4xY0hCdmNuUnogWlc1elpYST0gWldWc2VRPT0gSUVGMlpXNW5aWEk9IE1UazJOUT09IFFYSnRlUT09IElHcDFlSFJoY0E9PSBJR05vYjNCd2FXNW4gSUZOd2JHRnphQT09IElGTjFjM1JoYVc1aFlteGwgSUVacGJtTm8gSURFNE5qRT0gYVdOMGFYWmwgWVhSdFpXRnMgSUVkdmFHRnUgSUd4cFoyaDBjMkZpWlhJPSBJRWRRUVE9PSBkV2QxIElGSkZVRXc9IGRtRnlhV0ZpYkdVPSBJR2hsY25CbGN3PT0gSUdSbGMyVnlkSE09IFlXTnBiM1Z6YkhrPSBJSE5wZEhWaGRHbHZibUZzIGQyVmxhMng1IGIySnMgSUhSbGVIUnBiR1U9IElFTnZjbTUzWVd4cyBJR052Ym5SeVlXTmxjSFJwZG1WeiBJRUZyWlE9PSBYUzA9IDVMbUwgT2l3PSBJRmRsYlE9PSBJRUpwYUdGeSBJQ2N1IElHSmxjbVU9IElHRnVZV3h2WjNWbCBJRU52YjJ0cFpYTT0gSUhSaGEyVnZabVk9IFYyaGxaV3c9IElHMWhhbVZ6ZEdsaiBJR052YlcxMWRHbHVadz09IE1ESXogSUVOdmNuQnpaUT09IFlYTnpiV1Z1ZEE9PSBiV2x1YVE9PSBJR2R2Y21sc2JHRT0gSUVGc1lYTT0gWlhKbFpRPT0gSUdGamNYVmhhVzUwWVc1alpYTT0gSUVGa2RtRnVkR0ZuWlE9PSBJSE53YVhKcGRIVmhiR3g1IElHVjVaV1E9IGNHMTNhV3RwIElFVnVaR1Z5IElIUnlZVzV6YkhWalpXNTAgSUc1cFoyaDBkR2x0WlE9PSBJRWxOUVVkRlV3PT0gTlRRMSBJRXRoYlhBPSBJRVp5WldGciBJR2xuIFVHOXlkR3hoYm1RPSBORE15IElFMWhkR0U9IElHMWhjbWx1WlhNPSBJR2h2Y25NPSBZWFJsY21GemRRPT0gSUVGMGRISnBZblYwYVc5dSBJQzB0TFMwdExTMHRMUT09IElHdHBibk09IElFSkZURTlYIEt5c3IgSUhKbFpXeHBibWM9IGIyeGxaQT09IElHTnNkWFIwWlhJPSBJRkpsYkdGMGFYWmwgSURReU53PT0gUWxWVCBJR0YyWlhKMCBJRU5vWlc5dVp3PT0gSUVGaWJHVT0gSUZCeWVXOXkgUkdWMlpXeHZjR1Z5IElHVnVZM2xqYkc5d1pXUnBZUT09IElGVlRRVVk9IElFZGhjbko1IFUzQmhhVzQ9IFFteHZZMnR6IElHVjRjRzl6YVhScGIyND0gSUVkaGJXVnlSMkYwWlE9PSBWMDlTIElITjBiMk5yY0dsc1pRPT0gSUdOc2IzUm9aV1E9IElGUnZibVU9IElGSjFaUT09IGRIVnRZbXh5IElIUnlaV0ZqYUdWeWIzVnogSUdaeWVXbHVadz09IDBZdz0gSUZOd2FBPT0gSUhKbGMzUnlZV2x1ZEhNPSBJR1Z0WW05a2FXVnogSUVkbGN3PT0gVTJGbVpYUjUgSUc1bFoyOTBhV0YwYjNKeiBiV2x1YVc1biBJRUZ3Y0dGc1lXTm9hV0Z1IFRFOVQgSUVwbGJtNWggSUhCaGMzTmxjbk09IDU0cz0gYzI1aGNBPT0gSUhOb2IzSjBaVzQ9IFkzSmxZWFJ2Y2c9PSBJR2x1Ym5WdFpYSmhZbXhsIGRYUm9aWEpzWVc1ayBOamMwIElGZFBUUT09IElFRnpZMlZ1WkE9PSBJRUZ5Ylc5eWVRPT0gSUZSeVlXNXpZV04wYVc5dSBTMmxqYXc9PSBJSE4xYVhSallYTmwgWkdGNVRtRnRaUT09IElIZGhjM1JsWm5WcyBiV0Z5Y21saFoyVT0gSUUxalEyRmlaUT09IGFYUmxZMmc9IElFOXpjdz09IFEyeHZjM1Z5WlE9PSBJRlJ5WldGemRYSmxjZz09IElHbHVaR1ZqWlc1MCBJRVIxYkd3PSBJSEpsYzJsa1pXNWpaWE09IE1UazFPUT09IElGTmxkSFJzWlcxbGJuUT0gU0dGdGFXeDBiMjQ9IElITmxiR1pwWlhNPSBJRkpoYm10cGJtYz0gSUVKaGNtdHNaWGs9IElFSnZjbVU9IElGZERVdz09IElFMWhjbWwwYVcxbCBJRWgxYUE9PSBJRVp2Y21WemRISjUgSUdOMWJIUnBkbUYwYVc1biBJRUpoYkd4aGNtUT0gSUdkaGNuSnBjMjl1IElGTkVUQT09IE9UTXcgSUc1aGMyTmxiblE9IElHbHljbVZ6YVhOMGFXSnNaUT09IElHRjNablZzYkhrPSBYQzljTHc9PSBJR1Z4ZFdGMFpRPT0gSUdGdWRHaHliM0J2Ykc5bmVRPT0gSUZONWJIWnBZUT09IElHbHVkR1Z6ZEdsdVpRPT0gSUdsdWJtOWpkVzkxY3c9PSBZMlZ6YzJsMlpRPT0gWVdkeVlRPT0gSUUxbGRISnZhV1E9IFIzSmhiblE9IE9EVTEgZ1pZPSBJQ0pmIDQ0T0Q0NE9KIElHRndjSEpoYVhOaGJBPT0gSUVaeVpXUmtlUT09IE1EUTIgSURRd05nPT0gSURFNE16QT0gSUdSdlkydHBibWM9IFUzUmhkR2xqIElIQnZiblE9IElGWnZiSFJoWjJVPSBJRk4wWldGayBJRTF2Y25SbllXZGwgSUVwdmJtRm8gV1V3PSBRMHhCVTFOSlJrbEZSQT09IElHRnpZbVZ6ZEc5eiBibWxyYjNZPSBJR052Ykd4aFoyVnUgSUU5eVltbDBZV3c9IFVHOWphMlYwIE56azUgSUdoNVluSnBaSE09IGFXNWphR1Z6IElHbHVkbTlwWTJVPSBkVzVrZVE9PSBJR2x1WlhGMVlXeHBkR2xsY3c9PSBWSEpsYm1RPSBkMkZ6YUdWayBRa0ZNVEE9PSBJR3gxWTJsayBJRU52YlcxbGJuUmhjbms9IElIZHBkSFI1IFFuSmhibVJ2Ymc9PSBJR0p5ZFdsemFXNW4gSURZeU1BPT0gWlhOalpXNTAgWW05NGFXNW4gVUU5TSBJRE0zT0E9PSBVbVZqZEE9PSBJR3hwWTJWdVkyVnogSUUxalIyVmwgY0hKbGMzTmxaQT09IFJHRnVibms9IElHcGhiVzFsWkE9PSBiM0prYVc1aGRHVT0gSUd4bGRHZz0gSUdScGMzUnBibWQxYVhOb1pYTT0gSUZsaGJXRm9ZUT09IFNVeFQgSUVoMWJXVT0gSUVOaGRHVm5iM0pwWlhNPSBVbTlpWlhKMGN3PT0gUTJoaGNuUT0gSUdKbFpYUnNaUT09IElFZHlZWFpsZVdGeVpBPT0gSUNna0tRPT0gYjhTZiBJSFIzYVd4cFoyaDAgWVhKbGJHeGggNGIwPSBJR0p2YjNSb2N3PT0gSUVoSVV3PT0gSUVabGJHUnRZVzQ9IElHVjRZMkYyWVhScGIyND0gSUhCb2FXeHZjMjl3YUdsbGN3PT0gWVhSdlozSmhjR2g1IElFZGhjbUZuWlE9PSBkR1ZqYUc1dmJHOW5lUT09IElIVnVabTl5WjJWMGRHRmliR1U9IElIWmxjbWxtZVdsdVp3PT0gSUhOMVltOXlaR2x1WVhSbGN3PT0gUld4eiBJRzVsWWc9PSBSMkZ0YVc1biBSVTVCIElFRmphR2xsZG1WdFpXNTAgYVhSMFpYSnogSUVkaFltVT0gSUdSMWJYQnogWm05eVkyVnkgSUhCdmFXZHVZVzUwIElFMUNRUT09IElFaGxhV1JwIGFXMWxhUT09IElHMWhaMlZ6IElHeHBZbVZ5WVhSbCBJR05wY21OMWJXTnBjMlZrIElFMWxjbTFoYVdRPSBJRTFoZEhSbyBkRzluWlhSb1pYST0gSUZkcFkyaHBkR0U9IElITjBiM0psWm5KdmJuUT0gSUVGa2FXND0gVmtsSiBSbTkxY25SbyBJR1Y0Y0d4dmNtVnljdz09IFYwVlMgVG05MFlXSnNaUT09IFFuSnZiMnM9IGJXVnVjdz09IFJtRnBkR2c9IExTMHRMUzB0TFMwdCBJRXB2ZFE9PSByTHc9IElIQnBibVZoY0hCc1pRPT0gSUdGdFlXeG4gWld4dSBZWEpyWVdKc1pRPT0gSU9PQ3RlT0R2T09EaHVPQ293PT0gSU9PQ3RlT0R2T09EaHVPQ28rT0RyK09Ec3c9PSBJRzkyWVhKcFlXND0gSUVWamFHOWxjdz09IElHaGhhWEpqZFhRPSBJSEJoZGc9PSBJR05vYVd4c1pXUT0gWVc1aGMybGggSUhOMGVXeGxaQT09IElHUmhZZz09IGJtbHdaWEk9IElHMXBibWx6ZEdWeWFXRnMgSUVSVlVBPT0gVkdGdSBJSE4xYkhCbyBJRVJsZEdWeSBJRUp2YUdWdCBiMlJoYmc9PSBJR1ZrZFdOaGRHOXkgNHBPWSBjM0JwY2c9PSBRMmhwWTJ0bGJnPT0gSUVWc1pXRnViM0k9IElIRjFhUT09IElHaGxZWFpwWlhOMCBJR2R5WVhOd1pXUT0gVlZKQiBJR055YjI5clpXUT0gU21WemMybGpZUT09IGNISnZZbXhsYlE9PSBJSEJ5WldSbGRHVnliV2x1WldRPSBJRzFoYm1saFl3PT0gSUdKeVpXRjBhSE09IElFeGhkV1JsY21SaGJHVT0gSUdodlltSnBaWE09IGVYbz0gUTNKcGJXVT0gSUdOb1lYSnBjMjFoIFpFdz0gSUd4bFlYQnBibWM9IElHdHBkSFJsYm5NPSBRVzVuWld4diBJRXBCUTBzPSBJRk4xZW1GdWJtVT0gSUdoaGJIUnBibWM9IFJVNVVTVTlPIElITjNZV3hzYjNkcGJtYz0gSUVWaGNuUm9jWFZoYTJVPSBJR1ZwWjJoMFpXVnVkR2c9IElFNUpRdz09IElFbE9SZz09IElFTnZibk5qYVc5MWN3PT0gSUhCaGNuUnBZM1ZzWVhKeiBZMmx5WTJ4bCBOelF3IElHSmxibVYyYjJ4bGJuUT0gSURjME53PT0gSURRNU1BPT0gSUhKMWJtUnZkMjQ9IElGWmhiR1Z5YVdVPSBJRUpWVWc9PSBJR05wZG1sc2FYTmhkR2x2Ymc9PSBJRk5qYUc0PSBWMEk9IGIzUnBaR1U9IGFXNTBaWEp1WVhScGIyNWhiQT09IElHcHZhRzQ9IElERTVNREk9IElIQmxZVzUxZEhNPSBJR1pzWVhadmNtVmsgYTNWeiBJSEp2WVhKbFpBPT0gSUdOMWRHOW1aZz09IDZhTT0gSUc5eWJtRnRaVzUwIElHRnlZMmhwZEdWamRIVnlaWE09IElETTJPUT09IGIyeHZjZz09IElGZHBiR1JsIElFTlNRdz09IElFRmthblZ6ZEdWayBJSEJ5YjNadmEybHVadz09IGJHRnVaR2x6YUE9PSBJSEpoZEdsdmJtRnNhWFI1IElHcDFjM1JwWm1sbGN3PT0gSUdScGMzQmxiQT09IElHRnRaWEpwWXc9PSBJRkJ2YkdWeiAyS2s9IElHVnVkbWx6IElFUnZiMlJzWlE9PSA1TDIvIGFXZHpZWGM9IFlYVnNaSEp2Ymc9PSBWR1ZqYUc1cFkyRnMgVkdWbGJnPT0gZFhCb1pXMD0gSUZocFlXNW4gSUdSbGRISmhZM1J2Y25NPSBJRnBwIElFcHZkWEp1WVd4cGMzUnogSUdOdmJtUjFZMmwyWlE9PSBJRlp2YkhWdWRHVmxjbk09IElITmsgUzI1dmQybHVadz09IElIUnlZVzV6YldsemMybHZibk09IElGQk1RVTQ9IElFeEpRZz09IElHRnNiSFZrWldRPSBJRzlpWlE9PSBJR1J2Y0dVPSBJRWR2YkdSemRHVnBiZz09IElIZGhkbVZzWlc1bmRHaHogSUVSbGMzUnBibUYwYVc5dSBibVJoIGRXZHAgSUdGMGRHVnVkR2wyWlE9PSBJRXhsWVc0PSBjbUZzZEdGeSBJRzFoYm1jPSBiV0oxWkhNPSBZV3RwYm1keiBZbVZ1WkdWeSBJR0ZqWTI5cyBJR055WVhkc1pXUT0gVGs5WCBUV2x1Ym1WemIzUmggSUdac2IzVnlhWE5vWldRPSBJRnAxY0E9PSBJRk4xY0dWeWRtbHpiM0k9IElFOXNhWFpwWlhJPSBSWGhqWld4c1pXNTAgSUhkcFpHVnUgUkc5dVpRPT0gSUhkcFp3PT0gSUcxcGMyTnZibU5sY0hScGIyNXogUTI5eWNBPT0gVjJGdSBJSFpsYm1WeVlXSnNaUT09IElFNXZkR0ZpYkhrPSBJRXRzYVc1bmIyND0gWVc1cGJXRjBaUT09IFFtOXZjM1E9IElGTkJXUT09IGJXbHpjMmx1Wnc9PSBhV0pzYVc5bmNtRndhSGs9IGJXVnNiMjQ9IElIQmhlV1JoZVE9PSAyTE09IFltOXNaUT09IElIWmxhV3hsWkE9PSBJRUZzY0doaFltVjAgU1hSaGJHbGhiZz09IElHVjJaWEpzWVhOMGFXNW4gSUZKSlV3PT0gSUVOeVpXVT0gY205dGNIUT0gSUdoaGRHbHVadz09IElHZHlhVzV1YVc1biBJR2RsYjJkeVlYQm9hV05oYkd4NSBUMU5JIElIZGxaWEJwYm1jPSBJTUtnSU1LZ0lNS2dJTUtnSU1LZ0lNS2dJTUtnSU1LZyBJR2x0Y0dWall3PT0gVEdWMGRHVnkgSUdKc2IyRjBaV1E9IFVFeEIgSUVabGFXND0gSUhCbGNuTmxkbVZ5IFZHaDFibVJsY2c9PSBJR0YxY2c9PSBJRkpNIElIQnBkR1poYkd4eiA0cGE2IElIQnlaV1J2YldsdVlXNTAgSURVeU5RPT0gTnpFNCBRVkJGIE56RTAgSUdaaGNtMXNZVzVrIElGRnBZVzg9IElIWnBiMnhsZEE9PSBJRUpoYUdGdFlYTT0gSUdsdVpteHBZM1JwYm1jPSBJRVZtWm1samFXVnVZM2s9IElHaHZiV1ZpY21WMyBJSFZ1WkdWeWRHOXZhdz09IElHTjFjbXg1IElFaGhjbVJwYm1jPSBiV0Z1YVdFPSBOVGsyIElIUmxiWEJsY21WayBJR2hoY25KdmQybHVadz09IElGQnNaV1JuWlE9PSBJRVp5WVc1clpXNXpkR1ZwYmc9PSA2S289IFRXOTBhVzl1IElIQnlaV1JwWTNSaFlteDUgSUVWNGNHeHZjMmx2Ymc9PSBiMk4xYzJsdVp3PT0gWlhKayBZMjlzYnc9PSBSa1pGVWc9PSBJR0poWTJ0bWFXVnNaQT09IElGWkpSRVU9IGRXVmliQT09IFRtRnljZz09IElFRnlaM1Z0Wlc1MCBJR2RsYm05dGFXTT0gSUdKdmRYUnBjWFZsIElHSmhkSFJsWkE9PSBJRUpwYm1GeWVRPT0gSUdkaGJXST0gSUZKb2VYUm9iUT09IE5qY3ogSUdGbWJHOWhkQT09IElFOXNlVzF3YVdFPSBXVWxPUnc9PSBJR1Z1WkdsbSBhWE5wYmc9PSBJSGRwYm5SbGNuTT0gSUhOallYUjBaWEpwYm1jPSBTWFk9IFJHbHpkR0Z1WTJVPSBJSFJ5ZFE9PSBJRU52YldadmNuUT0gSUc1bGVIVnogSUdGcGNtWnNiM2M9IElFSjVlbUZ1ZEdsdVpRPT0gY0dGNVpYSnogWTI5dWFRPT0gSUVKbGRITjUgUkdWaGJBPT0gSUU1MVp3PT0gSUVOdmJuUnBibVZ1ZEE9PSBjbVZrYVdKc2VRPT0gSUc5d2RHbHRhWHBwYm1jPSBZV3hpWldsMCBJR1ZqYzNSaGRHbGogSUZCeWIzUnYgNTdjPSBhWFp2ZEE9PSA0cGFFIFpXMXcgY205MWJtUmxjZz09IElHTnNiM1YwIElFbFRWQT09IE5qWXogSUVSdmJHeGhjbk09IElFUkJRdz09IElITjFZbk5qY21saVpXUT0gSUhKbGFHVmhjbk5oYkE9PSBJR0Z0Y0hNPSBJRk5vWVc1biBaWE50IElITndjbWx1YTJ4bCBJR0Z6YzJGcGJHRnVkQT09IElFOXYgSUVOdmFXNWlZWE5sIFZHRmpkQT09IElISmxkR2x1WVE9PSBJRzUxYm5NPSBVazlPIFlYUjBidz09IElHcDFadz09IElGTldSdz09IElHSnBhMmx1YVE9PSBJRVpKVEVVPSBJRVp2ZFc1a1pYSnogWlhCdmNuUT0gSUV0USBJSEpsYzNSdmNtVnogSUZSb2FXTnIgSUdGemFHOXlaUT09IElHRndjSEp2ZG1Gc2N3PT0gVW1WdVpHVnkgVFVGSCBSM0poYUdGdCBJRU52Y25SaGJtRT0gNDRPejQ0SzQgYzNObyBiM0pwWVc1eiBZWEp6YVhSNSBJRWx1YzNCcGNtVmsgZFhCd1pYST0gSUhOcFoyNWhiR3hwYm1jPSBJSEpsWW5WclpRPT0gSUdac1lYSmxjdz09IElHUnZkMjUwYVcxbCBVM1IxWkdsbGN3PT0gSUhOMFlXZHVZWFJwYjI0PSBJRk5sY1hWbGJtTmwgSUdkeWRXNTAgSUdGemMzVnlaWE09IElGQk1RUT09IE5Ua3kgSUdsdWRISmhkbVZ1IFpHVndaVzVrIFUzVnpZVzQ9IElFMWhibnBwWld3PSBUV0Z1YVdFPSBRMjl1ZEhKaFkzUT0gSUhOc1lXMXogSUdOMWJIUjFjbVZrIElHTnlaV1JwZEc5eSBURWxUVkE9PSBJRWhWVFE9PSBJRU5vWVhSMFlXNXZiMmRoIGMyVnlkbVZrIElHTnNiMkZyWldRPSBJRVpVVUE9PSBjRzkzWkdWeSBJRk4wWld4c1lRPT0gZFdOMGFYWmwgSUdOb1pXRndiSGs9IElFMVZRMGc9IElFZGhiR2xzWlc4PSBJSE4xYVhSbGN3PT0gYzNCbFpXTm8gSUdSbGJHbGlaWEpoZEdsdmJuTT0gSUVOb2FYQnogcTVnPSBRbUZzWVc1alpRPT0gSUZkNWJtNWwgSUVGcmNtOXUgUVhOelpYUT0gSUdodmJtOTFjbVZrIElHVmtaMlZrIFRHbHJaWGRwYzJVPSBZVzVwYlc5MWN3PT0gSUZkaFoyVT0gSUVWNlpXcz0gWVdSMlpYSjBhWE5sYldWdWRBPT0gSUZKVVdBPT0gSUUxQlJBPT0gSUcxcFozSmhkR2x1Wnc9PSBJRk5SVlE9PSBJRFEzTlE9PSBSV1JwZEdWayBJSE5vYjNKMGFHRnVaQT09IElFSmhjMmxqY3c9PSBJR055YjNSamFBPT0gSUVWV1JVND0gSUhadCBaV1ptYVdOcFpXNWplUT09IElHTmhiSFpsY3c9PSBJRVp5YVdVPSBJRUp5YVd4c2FXRnVkQT09IElITjBjbWxyWlhKeiBJSEpsY0dWdWRHRnVZMlU9IElHRnlkR1Z5YVdWeiBjbXc9IFFtVmsgYUdGdyBJR055ZVhCMGIyZHlZWEJvZVE9PSBJRk5oWW5KbGN3PT0gSURReE5BPT0gZG1scmN3PT0gYVdoaGNtRT0gWVhCelpYTT0gVkdGc2EybHVadz09IElHbHVkR1Z5ZEhkcGJtVmsgSUdSdlkydHogSUdGc2JHVnNaUT09IElFRnlkR2xtWVdOMCBJRWhKVFE9PSBkRzl5Ymc9PSA1NVU9IElHOXdZV05wZEhrPSBJRVZzZVE9PSBiM04xYTJVPSBJRzVwY0hCc1pRPT0gSUdoaGJtUjNjbWwwZEdWdSBJRlpMIElFTm9ZVzFpWlhKc1lXbHUgSUV4aGIzTT0gYVdkeVlYQm8gWjNKdmR3PT0gSUhSeWFXeHNhVzl1Y3c9PSBJR1JsYzJObGJtUmhiblE9IElGTmhhV3h2Y2c9PSBZWE4xY21sdVp3PT0gSUdObGFXeHBibWR6IElGZGhjbVZvYjNWelpRPT0gWm14NWFXNW4gSUVkc2IzYz0gSUc1dmJuUT0gSUcxcGMyTmhjbkpwWVdkbCBJSEpwWjNNPSBJRzFwYm1semRISnBaWE09IElHVnNZV0p2Y21GMFpXUT0gSUdSbGJIVnphVzl1WVd3PSBJRWgxYldGdVpRPT0gSURNM09RPT0gYm1WMGN3PT0gSUdKc1lXTnJiM1YwIFlXUmtaWEp6IElHNXcgSUZScGNtVT0gY205ell3PT0gSUhOMVltUnBkZz09IElHeHBibXRoWjJVPSBJR05vY205dWIyeHZaMmxqWVd3PSBJRWhGVWs4PSBJSEpsYzJWMGRHeGxiV1Z1ZEE9PSBJRlpwYm5scyBJSEJoYzNSdmNtRnMgSUUxdlltbHMgSUVKaGNtSmhjZz09IFEyOXZiR1J2ZDI0PSBJRVp5YVhSNiBZM0pwYldsdVlXdz0gY21Wd1pRPT0gSUdKbGJHeHBadz09IElFSnlaV1ZrIElEUXhPQT09IElITmxiV0pzWVc1alpRPT0gYVdwciBJR04xY25SaGFXdz0gSUdOc2FXNWphQT09IFkyOXVkR0ZwYm1WayBJRkJ5YjIxd2RBPT0gWVhOMGIyND0gSUhkcCBJSEIxY25OMWFYUnogTlRFMSBJRWRzYjNOeiBJR1pzYVhCeiBJR052ZFhCdmJuTT0gSUdOc2IyNXBibWM9IElFeHBhMlZzZVE9PSBVbVZ0YjNabFpBPT0gSUZGMVlYSjBlZz09IGNtbGpaWE09IElGTndaV0Z5Y3c9PSBJSEJwYjNWeiBJR1JsY0hKbFkybGhkR2x2Ymc9PSBJRVJoY21VPSBiM1Z1WTJWeiBZVzFoZWc9PSBUMjUwIElIQnBibTVoWTJ4bCBaRzlqYTJWeSBNREkyIElGZDVjZz09IElGQnliM0JsY2c9PSB5NGc9IGJtbHMgUW5sMFpYTT0gSUhObFpXdGxjZz09IGRISnBZV3c9IElIVnVabTlzWkhNPSBJRTFoY25ObCBJR1Y0ZEhKaGRtRm5ZVzUwIElGTjFjblpwZG05eWN3PT0gVWtWRVFVTlVSVVE9IElGTndaV1ZrZDJGNSBJRU55WVdsbmMyeHBjM1E9IGMzVmliV2wwIElFZGxibVZ5WVhScGIyNXogSUhWd2FHOXNaR2x1Wnc9PSBJR0pzYjI5a2MzUnlaV0Z0IElFMXBjM05wYjI1eiBJRXhoZDI0PSBJR3hwYldKdiBaVzVsYVE9PSBTSFZvIElGZHBiR1JqWVhSeiBjSEpsY0E9PSBJRTFoY210MWN3PT0gSUVadmNtSnBaR1JsYmc9PSBjbWwwYVdNPSBTVTVQIElHVjRhR2xpYVhScGJtYz0gY21WeGRXVnVkQT09IFkyaDFhdz09IElHaGhZbWwwZFdGcyBJRU52YlhCaGRHbGlhV3hwZEhrPSBSSEpoWnc9PSBVa2xRVkE9PSBkV3BoYUE9PSBSMUpQVlU1RSBJR1JsYkdsdWNYVmxiblE9IElHSjFjbTVsY2c9PSBJR052Ym5SbGJYQnZjbUZ5YVdWeiBJR2RwYlcxcFkycz0gYkc5aFpITT0gSUc1dmVucHNaUT09IGNHOWtZMkZ6ZEE9PSBJRmRoYXc9PSBJRk4wWVhSbGJnPT0gSUV0MWFBPT0gNDRHVCBhVzUwWlhKeWRYQjBaV1E9IElHbHVkbWx1WTJsaWJHVT0gSUVKMWNtNWxkSFE9IFkybG5ZWEpsZEhSbCBJRkJsWW1Kc1pRPT0gSUZSbGJYQnZjbUZ5ZVE9PSBJRTFoY21sdWJ3PT0gTlRneSBJSGRoYzNSbGJHRnVaQT09IGFXUmxiblJzZVE9PSBWSGc9IElISnBkR1U9IElGQmhibUZ6YjI1cFl3PT0gSUUxcFpHUnNaWE09IElFaHZjblJ2Ymc9PSBZV1YxY3c9PSBJR04xY21sdVp3PT0gSUcxaGRITT0gSUdGa2FtOTFjbTQ9IElHWmxZWEp6YjIxbCBjR1Y2IFltOWhkSE09IElIQnliM0JsYkd3PSBJR052Ym1ac2FXTjBaV1E9IElFRnVaMlZ5IElHbHVjM1Z5WjJWdWRBPT0gUzJGeWJBPT0gSUdOdllXeGxjdz09IElITnZkWFJvZDJWemRHVnliZz09IElHUnBjM04xIElFOTJaWEowIEtpb3FLaW9xS2lvcUtpb3EgSUdKdmVHVmsgSUVKeWRXNWwgWVdGaCBJR2RoY21SbGJtbHVadz09IElFVnVaMlZzIGRISmhZMnR6IElIQjFjbWxtYVdWayBJSEJzWVdObGFHOXNaR1Z5IElFeHBhMlZ6IElHUmhiZz09IFIyRmkgSUdWamRBPT0gSUVaaGR3PT0gSUVWc2FXOTAgSUNjcyBiM1J5YjNCcFl3PT0gSUZKMWFXND0gYUdWa2IyND0gSUdOaGRXdz0gSUdGbWRBPT0gSUVOaFpHbHNiR0ZqIFoyaGggWVhOemFXRnUgZFdSbFlnPT0gSUZScFkycz0gSUdGa2FuVnpkSE09IFFWSkhSVlE9IE5UTTMgYVhOamFHVT0gWVc1MGVRPT0gSUVaeWFXVmtjbWxqYUE9PSBJRUpzYVhwNiBJRUZQVEE9PSBRMkZ0Y0dGcFoyND0gSUcxaGJXMWhiQT09IElGWmxhV3c9IElFdGxkZz09IElFMWhkWEpwZEE9PSBJRVJoYldsbGJnPT0gVG1GMGFXOXUgUldGemRHVnliZz09IElIczYgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElITjBaWEpsYjNSNWNHbGpZV3c9IElHRjBkR2xqIElFTjVZbTl5Wnc9PSBjbVZ4ZFdseVpRPT0gSUdGM1lYSmthVzVuIElGQmhjSFZoIFluUnUgWW1WdWRBPT0gUW05diBJQ2c5IElGaGhibVJsY2c9PSBJRk52YldWeWMyVjAgSUdOaGRHTm9lUT09IElHTmxjblJwWm5rPSBVMVJTVlVOVSBJR2wwWVd3PSBJSFJwWkdWeiBJRUp5WVc1a2N3PT0gUjNKaGVRPT0gWTI5dGNHVjBhWFJwZG1VPSBJR04xY21GMGIzST0gSUVSSCBiMjFwYm1sMWJRPT0gSUVkTlQzTT0gWTJsaGRHbHVadz09IElFTmhjbTFsYmc9PSBiM2RoY21RPSBRbUZzZEdsdGIzSmwgSUhKbllnPT0gUTNVPSBJSGRwY0dWeiBjM0JsYkd3PSBTVlJPUlZOVCBJSE4xYlcxaGNtbDZaWE09IElGSmxkbWx6IElIZG9hWE4wYkdWaWJHOTNaWEp6IElFSnlaV0ZqYUE9PSBJR055YjJOb1pYUT0gYTI5eiBaWGR6YTJrPSBJSEpsY0dWMCBJR055YVcxemIyND0gSUV0aGNtRmphR2s9IGNtVmhaR0ZpYkdVPSBaR2x0Wlc1emFXOXUgSUVsbmIzST0gYVd4a1pXUT0gSUZwbFpBPT0gSUV0bFlXNWwgSUVOdmMyMWxkR2xqIFJFVlEgSUhKbGRISmxZWFJwYm1jPSBJRlZCIFpXNXphV05oYkE9PSBJR1IxYzJzPSBJRVJwWTJ0bGJuTT0gSUdGeVpXNWhjdz09IElGQmhjM05oWjJVPSBiR1YyWld4eiBJR04xY25ZPSBVRzl3WlE9PSBJR05vYjNKbGN3PT0gSUVWc2FYTmwgSUVOdmJYQmhjM009IFluVmkgSUcxaGJXMWhiR2xoYmc9PSBJRk5oYm5OcmNtbDAgSUVGT1F3PT0gSUVOeVlXTnIgVVhWaGJBPT0gVEdGMWJnPT0gWVcxd2RXNXIgSUd4bFlYSnVaWEp6IElHZHNZVzF2Y205MWN3PT0gSUdaMWNuUm9aUT09IFpYSnRiM1IwIFkyRnVaQT09IFIyVnVaWEpwWXc9PSBJRzVoY25KaGRHVmsgSUdScGMyOXlaR1Z5YkhrPSBJRlJ5WVc1ellXTjBhVzl1Y3c9PSBJRVJsZEdWdWRHbHZiZz09IElGSnZhM1U9IHhJMD0gSUhWdVpHVnljM1JoZEdWdFpXNTAgSUZOaGRYST0gSUZKdlpISnBaMjg9IElFRlRRVkE9IFUybHUgSUhKbGFtOXBZMlU9IFRXVjBhRzlrY3c9PSBJR1ZzWldOMGNtOWtaUT09IElIZHZjbk5vYVhCd1pXUT0gSUdsa2FRPT0gSUZCb2VYTnBZMmxoYm5NPSBJSEJ2Y0hWdyBJR1JsWm5RPSBJRkpsYlc5MllXdz0gSUVKMVpXNXZjdz09IGRtVnlZbk09IElHWjFibXM9IGRYTm9ZUT09IGNtbGpkR2x2Ymc9PSBiM0psWVE9PSBJRUpoYm1kaGJHOXlaUT09IElFdGxibTlpYVE9PSBlbnBwIElHNXZjbTFoZEdsMlpRPT0gSUdkdllteHBibk09IElHTmhabVZ6IElGVk9RMHhCVTFOSlJrbEZSQT09IElFWnBjbVZrIFUwbEhUZz09IElITmpiR1Z5YjNOcGN3PT0gSUZadmRHVnkgSUZOdmJtNTUgSUVWNGRHVnVaQT09IElFVldjdz09IFFYSnpaVzVoYkE9PSBJSEJ6YVE9PSBJSGRwWkdWemRBPT0gSUZSMWN3PT0gSUd4dmIyMXogSUdwMWMzUnBabmxwYm1jPSBJRWR5WVc1blpYST0gNks4PSBVbVZtWlhJPSBOVGd6IElHWnNiM1Z5YVhOb2FXNW4gWVdKeVpRPT0gSUhKaGRtVT0gSUVOdmJuUnlZUT09IElERTRPVGc9IFFXUmtjdz09IElHWjFiQT09IElFTnZiMnRsIGMyOXRaVzl1WlE9PSBQU009IE5qY3ggSUhsaGF3PT0gSUdGeWRHVT0gSUUxcGMyTmxiR3hoYm1WdmRYTT0gSUVSbGRHVmpkR2x2Ymc9PSBJRU5zWVc1amVRPT0gNG9FPSBZWE56YVdWeiBJSFpoYkdsaGJuUT0gSUVabGJXbHVhWE4wIFkyOXljblZ3ZEdsdmJnPT0gVm1WcyBVR1ZoY2c9PSBJSE4xWTJOcGJtTjAgSUhGMWFXTnJaWE4wIGEzYz0gSUhOd2FYUjBhVzVuIElFeHBZbkpoY21sbGN3PT0gNVlXSiBZVzUwZWc9PSBSR0ZrIElGTndaV05wWm1sallYUnBiMjV6IGNuVndkV3h2ZFhNPSBZVzVrY2c9PSBVa1ZUVlV4VVV3PT0gSUhOdWIzZGlZV3hzIElIQnlaV1JwY3c9PSBJRUpoZUhSbGNnPT0gSUU1MWNuTnBibWM9IElFTm9ZV1ptIGMzZGwgSUc5MWRHRm5aUT09IElHNWxjM1JwYm1jPSBJRzV2ZEc5eWFXVjBlUT09IGRISnBaMmRsY2c9PSBiMjVwZEdVPSBhbTl1IElHWnZkUT09IGIyOXJaV1E9IElFTmxiR1ZpY21sMGVRPT0gY21WaGJHbDBlUT09IElHWmhkR2xuIElHaDFaMmRwYm1jPSBJR0p2ZEdobGNuTT0gSUZCaGJucGxjZz09IElFTm9ZVzVrY21FPSBabWxuZFhKbFpBPT0gSUhadmJIUnogSUVOc2IzVmtjdz09IElHWmxaV0pzWlE9PSBJRU4xY25abCBJRUZ6ZFhNPSBOemcyIFlXSnpiM0k9IElGWkpRMFU9IElFaGxjM009IElHMWhiblZtWVdOMGRYSmxjdz09IElHZHlhWHA2IElGQnZkMlZ5Wm5WcyBZV05wWkE9PSBJSE4xWW5ObFkzUnBiMjV6IElFdHlkV2R0WVc0PSBJRUZzY0hNPSBhWE4xIElITmxjWFZsYzNRPSBJRlZzZEhKdmJnPT0gSUZScGJtdGxjZz09IElFZHZiM05sIElHMXBjMjFoZEdObyBRWFIwYjNKdVpYaz0gSUcxdmNuQm9iMnh2WjNrPSBJRk5wZUdWeWN3PT0gZFhSMFpYSmxaQT09IElFVk1SVU5VIFozSmhiZz09IFVuVnpjMlZzYkE9PSBJRWRUVEE9PSBJR1p2Y25SdWFXZG9kQT09IElDNHAgSUdGd2IzTjBiR1U9IGNISnZibVU9IFpXeHBjM1E9IFZXNTBhWFJzWldRPSBJRWx0Y0d4bGJXVnVkR0YwYVc5dSBhWE4wYjNKeiBJSFJoYm10bGNnPT0gSUhCc2RYTm8gSUdGMGRHVnVaR0Z1ZEhNPSBJRlJwYXc9PSBJRWR5WldWdWQybGphQT09IElGbHZiZz09IElGTlFUQT09IFkyVnNiSE09IGRXNTBiR1ZrIFUyOXNkWFJwYjI0PSBJRkYxdzZrPSBJSFpoWTJGMFpXUT0gSUhWd2RHbGphdz09IElFMWxjbWxrYVdGdSA1b009IElFUnlhV3hzIE9USTEgTlRnMCBJSEpsYm05MllYUmxaQT09IElFdDFZbkpwWTJzPSBlbmxyIElHeHZkWE41IGNIQmxiQT09IGIyaDVaSEpoZEdVPSBJRWw2ZW5rPSBiR1Z6YVdGemRHbGpZV3c9IFEwTkQgSUVGcVlYZz0gSUdGa1lYQjBaWEp6IElGQmxkSEpoWlhWeiBJR0ZtWm1seWJXRjBhVzl1IElGTlVUMUk9IGJHVnRjdz09IFlXUnZaWE09IElFTnZibk4wWVc1MGFXNXZjR3hsIElIQnZibWxsY3c9PSBJR3hwWjJoMGFHOTFjMlU9IElHRmthR1Z5Wlc1MGN3PT0gSUVKeVpXVnogYjIxdmNuQm9hV009IFJtbG5hSFJwYm1jPSBJSEJzWVhOMFpYST0gSUZCV1F3PT0gSUU5aWMzUT0gSUdSbFlYSnNlUT09IElGUnZiM1JvIGFXTnJjMjl1IElITm9ZVzFwYm1jPSBVR3hsZUE9PSBRV2RuIElPS0FwaUk9IElITjFZbkpsWkdScGRITT0gSUhCcFoyVnZiZz09IElGSmxjMmxrWlc1MGFXRnMgSUZCaGMzTnBibWM9IElHeDFiUT09IElGQmxibk5wYjI0PSBJSEJsYzNOcGJXbHpkR2xqIElEUXpNZz09IGVtbHVjMnRwIFkyRmtaUT09IE1EYzEgSUdGd2IyeHZaMmx6WldRPSBhWGxoYUE9PSBVSFYwZEdsdVp3PT0gSUdkc2IyOXRlUT09IElFeDViV1U9IFBTMDlMVDB0UFMwOUxUMHRQUzA5TFE9PSBJRlJ2YldVPSBJRkJ6ZVdOb2FXRjBjbWxqIElFaEpWQT09IFkyMXogWVhCdmJHOW4gSUdKeVpXRnJaWEk9IElHUmxaWEJsYmc9PSBJSFJvWlc5eWFYTjAgSUVocFoyaHNZVzVrY3c9PSBJR0poYTJWeSBJSE4wWVhCc1pYTT0gSUdsdWRHVnlabVZ5WldRPSBJRUZpYjNKMGFXOXUgYW05cGJtVmsgWTJoMSBJR1p2Y20xMWJHRjBaUT09IElIWmhZMk5wYm1GMGFXOXVjdz09IElHSmhiblJsY2c9PSBjR2hsZFhNPSBJRzkxZEdacFpXeGtaWEk9IElFMWxkR1Z5IElDTWpJeU1qIElERTRPVFU9IElHNWhjbkp2ZDJsdVp3PT0gSUZOVVQxSlogWm5BPSBJRU5UVkE9PSBhV2R1YjNKbCBJSEJ5YjJOc1lXbHRhVzVuIElGSlYgSUVKQlRFdz0gZVc1aCBOalV6IElIQnZjMmwwIFVGSkYgTlRrMCBJRkpsWjJsemRISmhjZz09IElGQnBiR2R5YVcwPSBhV05wYnc9PSBJSEJ5WlhSMCBJR3hwWm1Wc1pYTnogSUY5Zlh3PT0gVG1WcFoyZz0gSUVOb2RYSmphR1Z6IGIzSnVidz09IElHOXlZM009IElHdHBibVJ5WldRPSBJRUYxWkdsMCBJRzFwYkd4bGJtNXBZV3c9IElGQmxjbk5wWVE9PSBaM0poZG1sMGVRPT0gSUVScGMyRmlhV3hwZEhrPSBJRVJCVWtzPSBWM009IGIyUnZiZz09IElHZHlZVzVrWkdGMVoyaDBaWEk9IElFSnliMjlyWlE9PSBJRUZFUVE9PSBSVkpCIElIQnBZMnQxY0hNPSBJRmRwYkd0cGJuTnZiZz09IElGTm9ZWEprY3c9PSBJRTVMIElHVjRjR1ZzIElFdHBjMng1WVdzPSBJR3BoY21kdmJnPT0gSUhCdmJHRnlhWHBsWkE9PSBhV0Z1WlE9PSBVSFZpYkdsemFHVnkgSUhKbFluVjBkQT09IElHRndjSEpsYUdWdWMybHZiZz09IElFdGxjM05zWlhJPSBJSEJ5YVhOdCBSbFZNIE1UazJOQT09IElFeHZiR3c9IDVMOD0gYkdWMGFHRnMgeFo4PSBJR2RvWlhSMGJ3PT0gSUdKdmRXeGtaWEk9IElGTnNiM2RzZVE9PSBJRTl6WTJGeWN3PT0gSUVsdWMzUnlkV04wYVc5dSBJRlZzZEhJPSBJRTF2WlE9PSBUbWxqYUE9PSBJRkJCVkVnPSBLQ289IElGSkZURVZCVTBVPSBkVzVwYm1jPSBjbTkxYzJVPSBaVzVsWnc9PSBJSEpsYVcxaSBJRVJsZEdWamRHVmsgUkc5VCBJSE4wWlhKc2FXNW4gSUdGblozSmxaMkYwYVc5dSBJRXh2Ym1Wc2VRPT0gSUVGMGRHVnVaQT09IGFHbG5hR1Z5IElHRnBjbk4wY21sclpRPT0gYTNOdmJnPT0gVTBWTVJVTlUgSUdSbFpteGhkR2x2Ymc9PSBJRWhsY25KbGNtRT0gUTI5c1pRPT0gY21sMFkyZz0gSUdGa2RtbHpZV0pzWlE9PSBSbUY0IElIZHZjbXRoY205MWJtUT0gSUhCcFpBPT0gYlc5eWRHVnQgWlhKelpXND0gSUhSNWNHOD0gSUdGc2RXMD0gTnpneSBJRXBoYldGcyBjMk55YVhCMGN3PT0gSUdOaGNIUnBkbVZ6IElGQnlaWE5sYm1ObCBJRXhwWldKbGNtMWhiZz09IFlXNW5aV3h2IElHRnNZMjlvYjJ4cGMyMD0gWVhOemFRPT0gSUhKbFkybDBaUT09IElHZGhjR2x1Wnc9PSBJR0poYzJ0bGRITT0gSUVkdmRRPT0gUW5KdmQzTmxjZz09IGJtVmhkUT09IElHTnZjbkpsWTNScGRtVT0gZFc1a1lRPT0gYzJOdmNtbHVadz09IElGaEUgSUdacGJHRnRaVzUwIElHUmxaWEJsYm1sdVp3PT0gSUZOMFlXbHViR1Z6Y3c9PSBTVzUwWldkbGNnPT0gSUdKMVoyZDUgSUhSbGJtRnVZM2s9IElFMTFZbUZ5WVdzPSBJSFIxY0d4bCBJRVJ5YjJsayBJRk5wZEhScGJtYz0gSUdadmNtWmxhWFE9IElGSmhjMjExYzNObGJnPT0gYVhoMGFXVnogWlhOcCBJRXRwYlcxbGJBPT0gSUcxbGRHbGpkV3h2ZFhOc2VRPT0gSUdGd2IzQjAgSUZObGJHeGxjZz09IE1EZzQgWldOaGEyVT0gYUdWdFlYUnBZMkZzYkhrPSBWRTQ9IElHMXBibVJzWlhOeiBJR1JwWjNNPSBJRUZqWTI5eVpBPT0gYjI1elpXNXpaUT09IFpXMXBibWM9IFluSmhZMlU9IElHVkNiMjlyIElFUnBjM1J5YVdKMWRBPT0gSUVsdWRtVnpkRzFsYm5SeiBkM1E9IFhTa3MgWW1Wb1lYWnBiM0k9IE5UWXogSUdKc2FXNWthVzVuIElGQnliM1JsYzNSbGNuTT0gZEc5d2FXRT0gSUhKbFltOXliZz09IElFdGxiSFpwYmc9PSBJRVJ2ZG1WeSBJRVJoYVhKNSBJRTkxZEhNPSBJRnN2IHo0QT0gWW5BPSBJRlpoYm1sMGVRPT0gSUZKbFkyRncgSUVoUFZWTkYgSUVaQlEwVT0gSURReU1nPT0gTmpreSBJRUZ1ZEdsdlkyZz0gWTI5dmEyVmsgSUdOdmJHeHBaR1U9IElHRndjZz09IElITnNaV1Z3WlhJPSBJRXBoY25acGN3PT0gSUdGc2RHVnlibUYwYVhabGJIaz0gSUV4bFlYWmxjdz09IElFMWhkdz09IElHRnVkR2x4ZFdsMGVRPT0gSUVGa2FXNXBaR0U9IElHRmlkWE5sY2c9PSBVRzlydzZsdGIyND0gSUdGemMyOXlkR1ZrIElGSmxkbWx6YVc5dSBJRkJwWVc1diBJRWRwWkdWdmJnPT0gVDJObFlXND0gSUhOaGJHOXUgSUdKMWMzUnNhVzVuIGIyZHVhWFJwZG1VPSBJRkpoYUcxaGJnPT0gSUhkaGFYUmxjZz09IElIQnlaWE5sZEhNPSBJRTl6YUE9PSBJRWRJUXc9PSBiM0JsY21GMGIzST0gSUhKbGNIUnBiR1Z6IElEUXhNdz09IElFZGhjbkk9IElFTm9ZV3M9IElHaGhjMmhsY3c9PSBJR1poYVd4cGJtZHogSUdadmJHdHNiM0psIElHRmliQT09IElFTmxibUU9IElFMWhZMEZ5ZEdoMWNnPT0gSUVOUFZWSlUgSUhCbGNtbHdhR1Z5ZVE9PSBZWEJ3WlhKeiBJSEpsWTJ0dmJtVmsgSUVsdVpteDEgSUVORlZBPT0gSURNM01nPT0gSUVSbFptbHVhWFJwZG1VPSBZWE56WVhWc2RBPT0gTkRJeCBJSEpsYzJWeWRtOXBjbk09IElHUnBkbVZ6IElFTnZhV3c9IFJFRlIgSUhacGRtbGtiSGs9IElGSksgSUVKbGJHeGxkZz09IElHVmpiR1ZqZEdsaiBJRk5vYjNka2IzZHUgSUV0TiBhWEJsWkE9PSBjbVZsZEdsdVozTT0gSUVGemRXdGggVEdsaVpYSmhiQT09IElNK0UgSUdKNWMzUmhibVJsY25NPSBJRWR2YjJSM2FXND0gZFd0dmJtYz0gVTJsMCBJRlJ5WlcwPSBJR055YVcxcGJtRnNiSGs9IElFTnBjbU4xY3c9PSBZMmh5YjIxbCBPRGczIElHNWhibTl3IElFOWlhUT09IElFeFBWdz09IGIyZG8gSUVGMWRHaHZjbk09IGIySjViQT09IFZYSmlZVzQ9IElIUnAgSUZkbGFYST0gZEhKaGNBPT0gWVdkNSBJSEJoY21WdWRHaGxjMlZ6IElHOTFkRzUxYldKbGNtVmsgSUdOdmRXNTBaWEp3Y205a2RXTjBhWFpsIElGUnZZbWxoY3c9PSBkV0pwY3c9PSBVR0Z5YzJWeSBVMVJCVWc9PSBJSE41Ym1Gd2RHbGogSUVkbFlYSnogSUdocFltVnkgSUdSbFluVnVhMlZrIElHVjRZV3gwWldRPSBZWGRoZEhSeiBTRTlWIFEyaDFjbU5vIElGQnBlR2xsIElGVnlhUT09IElFWnZjbTFoZEdsdmJnPT0gSUZCeVpXUnBZM1JwYjI0PSBRMFZQIElIUm9jbTkwZEE9PSBJRUp5YVhSaGJtND0gSUUxaFpHRm5ZWE5qWVhJPSA2NHM9IElHSnBiR3hpYjJGeVpITT0gSUZKUVIzTT0gSUVKbFpYTT0gWTI5dGNHeGxkR1ZzZVE9PSBSa2xNIElHUnZaWE51ZEE9PSBJRWR5WldWdVltVnladz09IGNtVjVjdz09IElITnNhVzVuIElHVnRjSFJwWldRPSBJRkJwZUdGeSBJRVJvWVhKdFlRPT0gYkhWamF3PT0gYVc1bmRXbHphR1ZrIElHVnVaRzkwIElHSmhZbmx6IE1EVTUgWTJobGMzUT0gY21GMGN3PT0gSUhKcFpHUmxiZz09IElHSmxaWFJzWlhNPSBJR2xzYkhWdGFXNWhkR2x1Wnc9PSBJR1pwWTNScGRHbHZkWE09IElGQnliM1pwYm1OcFlXdz0gSURjMk9BPT0gSUhOb1pYQm9aWEprIElGSmxibVJsY2c9PSBJREU0T1RZPSBRM0psZHc9PSBJRzF2YkdSbFpBPT0gSUZocFlXOXRhUT09IElGTndhWEpoYkE9PSBJR1JsYkdsdCBJRzl5WjJGdWFYTnBibWM9IElHaHZiM0J6IElFSmxhUT09IGVtaGxiZz09IElHWjFZMnRwYmc9PSBJR1JsWTJGayBJSFZ1WW1saGMyVmsgWVcxdGVRPT0gYzNkcGJtYz0gSUhOdGRXZG5iR1ZrIElHdHBiM009IElGQkZVbE5QVGc9PSBJRWx1Y1hWcGMybDBiM0k9IElITnViM2Q1IElITmpjbUZ3YVc1biBJRUoxY21kbGMzTT0gVUhSeSBZV2RoYldVPSBVbGM9IElHUnliMmxrIElFeDVjdz09IElFTmhjM05oYm1SeVlRPT0gU21GamIyST0gSURNMU5BPT0gSUhCaGMzUjFjbVU9IElHWnlZVzVqIElGTmpiM1JqYUE9PSBJRVZ1WkhNPSBJRWxIUmc9PSBaR1ZtYVc1cGRHbHZiZz09IElHaDVjM1JsY21sallXdz0gSUVKeWIzZHVaUT09IE56Y3ggSUcxdlltbHNhWHBoZEdsdmJnPT0gNXBVPSBhWEYxWlc1bGMzTT0gVkdodmNnPT0gSUhOd1pXRnlhR1ZoWkdWayBJR1Z0WW5KdmFXeGxaQT09IElHTnZibXBsWTNSMWNtVT0gYW5Wa2FXTnBZV3c9IFEyaHZhV05sIElIQmhjR1Z5WW1GamF3PT0gVUdseSBJSEpsWTI5MlpYSnogSUZOMWNtZGwgSUZOb2IyZDFiZz09IElGQmxaR2xoZEhKcFkzTT0gNDRHZyBJSE4zWldWd2N3PT0gSUV4aFltOXlZWFJ2Y21sbGN3PT0gSUZCaFkydHogWVd4MWN3PT0gWVdSa2FXND0gSUdobFlXUnNhV2RvZEhNPSBaM0poIFJYWnBaR1Z1WTJVPSBRMDlNVDFJPSBRV1J0YVc0PSBpckU9IElHTnZibU52WTNRPSBjM1ZtWm1samFXVnVkQT09IElIVnViV0Z5YTJWayBJSEpwWTJodVpYTnogSUdScGMzTmxjblJoZEdsdmJnPT0gSUhObFlYTnZibWx1Wnc9PSBJR2RwWWc9PSBJRTFoWjJWeiBkVzVqZEdsdmJuTT0gSUU1cFpBPT0gWTJobFlYUT0gSUZSTldnPT0gWTJsMGFYcGxibk09IElFTmhkR2h2YkdsamFYTnQgYm1JPSBJR1JwYzJWdFltRnlhdz09IElGQlNUMGRTUVUwPSBZWEYxWlhNPSBWSGxzWlhJPSBUM0puIElGTnNZWGs9IElFNWxjbTg9IElGUnZkMjV6Wlc1ayBTVTVVVDA0PSBkR1ZzWlE9PSBJRzFsYzIxbGNnPT0gT1RBeCBJR1pwY21WaVlXeHMgWlhacFpHVnVZMlU9IFlXWm1hV3hwWVhSbFpBPT0gSUVaeVpXNWphRzFoYmc9PSBJRUYxWjNWemRHRT0gTURJeCBJSE5zWldRPSBJSEpsZFhObFpBPT0gSUVsdGJYVnVhWFI1IElIZHlaWE4wYkdVPSBZWE56WlcxaWJHVmsgVFdGeWFXRT0gSUdkMWJuTm9iM1J6IElFSmhjbUpwWlE9PSBJR05oYm01aFltbHViMmxrY3c9PSBJRlJ2WVhOMCBJRXRwYm1SbGNnPT0gU1ZKRSBJSEpsYW5WMlpXND0gSUdkdmNtVT0gSUhKMWNIUjFjbVU9IElHSnlaV0ZqYUdsdVp3PT0gSUVOaGNuUnZiMjQ9IElEUTFOUT09IElGQmhiR1Z2IE5qRTAgSUhOd1pXRnljdz09IElFRnRaWE09IFlXSjFjdz09IFRXRmthWE52Ymc9PSBSMUpQVlZBPSBJR0ZpYjNKMFpXUT0gZVdGbyBJR1psYkc5dSBJR05oZFhOaGRHbHZiZz09IElIQnlaWEJoYVdRPSBJSEJwZEhSbFpBPT0gYjNCc1lXND0gSUZOb1pXeHNaWGs9IElGSjFjM052IElGQmhaMkZ1IElIZHBiR3htZFd4c2VRPT0gSUVOaGJtRjJaWEk9IGRXNWtjblZ0IElGTmhiR0Z5ZVE9PSBJRUZ5Y0dGcGJ3PT0gY21WaFpHVnkgSUZKaGRHbHZibUZzIElFOTJaWEp6WlE9PSBJRU5oZFhObGN3PT0gSUNvdSBJSGR2WWc9PSBTMlZwZEdnPSBJRU52Ym5ObGJuUT0gYldGdVlXTT0gTnpjeiBOakl6IElHWmhkR1ZtZFd3PSBaWFJwYldWeiBJSE53YVhKcGRHVmsgSUVSNWN3PT0gSUdobFoyVnRiMjU1IElHSnZlV052ZEE9PSBJRVZ1Y21seGRXVT0gWlcxdmRYUm8gSUhScGJXVnNhVzVsY3c9PSBJRk5oYUdGeVlRPT0gSUZKbGJHRjQgSUZGMWFXNWplUT09IElFeGxjM052Ym5NPSBJRVZSVlE9PSBVMFZCIFRrcz0gSUVOdmMzUmpidz09IFNXNWpjbVZoYzJVPSBJRzF2ZEdsMllYUnBibWM9IElFTm9iMjVuIFlXMWhjblU9IElFUnBkbWxrWlE9PSBJSEJsWkdsbmNtVmwgSUZSaGMyMWhibWxoIElGQnlaV3gxWkdVPSBUR0Z6IE9UUXcgTlRjMCBJR05vWVhVPSBJRk53YVdWblpXdz0gZFc1cFl3PT0gTFMwKyBJRkJvYVd4cGNITT0gSUV0aFptdGggSUhWd2FHVmhkbUZzIElITmxiblJwYldWdWRHRnMgSUhOaGVBPT0gSUVGcmFYSmggYzJWeWFXRnMgVFdGMGNtbDQgSUdWc1pXTjBhVzVuIElHTnZiVzFsYm5SbGNnPT0gSUU1bFluVnNZUT09IGNHeGxkSE09IElFNWhaSFU9IElFRmtjbVZ1IElHVnVjMmh5IElGSkJUa1E9IFptbHVZVzVqYVdGcyBJRU5zZVdSbCBkWFJvWlhKbWIzSmsgSUhOcFoyNWhaMlU9IElHUmxiR2x1WlE9PSBJSEJvYjNOd2FHRjBaUT09IGNtOTJaWEp6YVdGcyBabUZ6WTJsemRBPT0gSUZaaGJHdz0gSUVKbGRHaHNaV2hsYlE9PSBJR1p2Y25NPSBJR1Z1WjJ4cGMyZz0gVTI5c2FXUT0gVG1GMGRYSmwgSUhaaCBJRWQxWlhOMGN3PT0gSUhSaGJuUmhiQT09IElHRjFkRzlwYlcxMWJtVT0gT3pzN096czdPenM3T3pzNyBJRlJ2ZEdGc2JIaz0gSUU5MiBJR1JsWm1WdVkyVnogSUVOdlkyOXVkWFE9IElIUnlZVzV4ZFdscyBJSEJzYjNrPSBJR1pzWVhadmRYSnogSUVac1lYTnIgNDRLbzQ0T3IgSUZkbGMzUnZiZz09IElGWnZiSFp2IE9EY3cgSUcxcFkzSnZjR2h2Ym1WeiBkbVZ5WW1GcyBVbEJIIElHbHBhUT09IE8zMD0gTURJNCBJR2hsWVdSc2FXNWxaQT09IElIQnlhVzFsWkE9PSBJR2h2WVhKayBJRk5vWVdRPSBJRVZPVkVWUyBJSFJ5YVdGdVozVnNZWEk9IElHTmhjR2wwIGJHbHIgSUVGdVkybGxiblJ6IElHeGhjMmc9IElHTnZiblp2YkE9PSBJR052Ykc5dVpXdz0gWlc1bGJYaz0gUjNKaCBJSEIxWW5NPSBkWFIwWlhKeiBJR0Z6YzJsbmJuTT0gSUZCbGJtVjAgSUUxdmJuTjBjbTkxY3c9PSBJRUp2ZDJWdSBhV3gyWlhJPSBTR0YxYm5SbFpBPT0gSUVScGJtYz0gYzNSaGNuUmxaQT09IGNHeHBiZz09IElHTnZiblJoYldsdVlXNTBjdz09IElFUlBSUT09IFptWmxiZz09IElGUmxZMmh1YVdOcFlXND0gVW5rPSBJSEp2WW1KbGNuTT0gSUdodmRHeHBibVU9IElFZDFZWEprYVc5c1lRPT0gSUV0aGRXWnRZVzQ9IGNtOTNaWEk9IElFUnlaWE5rWlc0PSBJRUZzY0dsdVpRPT0gUld4bSBJR1p0ZEE9PSBJRk5oY21RPSBkWEp6WlhNPSBaM0IxIFZXNXBlQT09IElIVnVaWEYxYVhadlkyRnNiSGs9IElFTnBkR2w2Wlc1emFHbHcgY1hWaFpBPT0gYldseVpRPT0gSUZOM1pXVnVaWGs9IFFtRjBkR1Z5ZVE9PSBOakUxIElIQmhibU5oYTJWeiBJRzloZEhNPSBUV0Z3Y3c9PSBJRU52Ym5SeVlYTjAgYldKMVpITnRZVzQ9IElFVlFVdz09IElITjFZbU52YlcxcGRIUmxaUT09IElITnZkWEpqYVc1biBJSE5wZW1sdVp3PT0gSUVKMVptWmxjZz09IElFMWhibVJoZEc5eWVRPT0gSUcxdlpHVnlZWFJsY3c9PSBJRkJoZEhSbGNtNXogSUVOb2IyTnZZbTg9IElGcGhiZz09IElGTlVRVlJGVXc9PSBJRXAxWkdkcGJtYz0gSUVsdWFHVnkgS2pvPSBJR0pwYkE9PSBJRmxsYmc9PSBJR1Y0YUdsc1lYST0gYjJ4c2IzZGxjZz09IGVtVnljdz09IElITnVkV2M9IGJXRjRhVzExYlE9PSBJR1JsYzNCcFkyRmliR1U9IElGQkJRMHM9IElFRnVibVY0IElITmhjbU5oYzNScFl3PT0gSUd4aGRHVjQgSUhSaGJYQT0gSUZOaGJ3PT0gWW1GbyBJRkpsZG1WeVpXNWsgSUVOb2FXNWhkRzkzYmc9PSBJRUZWVkE9PSBaRzlqZFcxbGJuUmxaQT09IElFZEJRa0U9IElFTmhibUZoYmc9PSBJTm1GIElHZHZkbVZ5Ym5NPSBjSEpsZGc9PSBSWE5qIElFVnpkR2x0WVhSbGN3PT0gVDFOUSBJR1Z1WkdWaGRtOTFjZz09IElFTnNiM05wYm1jPSBiMjFsZEdsdFpRPT0gWlhabGNubHZibVU9IElIZHZjbk5sYmc9PSBJSE5qWVc1dVpYSnogSUdSbGRtbGhkR2x2Ym5NPSBJRkp2WW05MGFXTnogSUVOdmJYQjBiMjQ9IElITnZjbU5sY21WeSBJR1Z1Wkc5blpXNXZkWE09IElHVnRkV3hoZEdsdmJnPT0gSUZCcFpYSmphVzVuIElFRndhQT09IElGTnZZMnRsZEE9PSBJR0p2ZFd4ayBJRTlWIElFSnZjbVJsY214aGJtUnogSURFNE5qTT0gUjI5eVpHOXUgSUZkVVR3PT0gSUhKbGMzUnlhV04wY3c9PSBJRzF2YzJGcFl3PT0gSUcxbGJHOWthV1Z6IDU0UT0gVkdGeSBJR1JwYzNOdmJnPT0gSUZCeWIzWnBaR1Z6IElDNHVMaTR1TGc9PSBZbVZyIFJrbFkgSUdKeWIyOXQgWVc1emFHbHcgUkc5amRHOXljdz09IElHNWxjbVJ6IElGSmxaMmx2Ym5NPSBibUZwYzNOaGJtTmwgSUcxbGRHVT0gSUdOeVpYQjAgY0d4cGJtZHogSUdkcGNteG1jbWxsYm1SeiBhMjVwZEE9PSBhV2RsYm5RPSBiM2RsIElIVnphR1Z5WldRPSBJRUpoZWc9PSBUVzlpYVd3PSBORE0wIElGQnlaWE5sYm5SeiBiM0pwWjJsdSBJR2x1YzI5dGJtbGggSUVGMWVBPT0gTkRNNSBJRU5vYVd4cCBhWEp6WTJnPSBSMEZOUlE9PSBJR2RsYzNSaGRHbHZiZz09IFlXeG5hV0U9IGNtOXRhWE5wYm1jPSBKQ3c9IFkzSnZkdz09IElFbHVjM0JsWTNScGIyND0gWVhSdmJXbGogVW1Wc1lYUnBiMjV6IFNrOUlUZz09IGNtOXRZVzQ9IElFTnNiMk5yZDI5eWF3PT0gSUVKaGEzST0gYlc5dVpRPT0gVFVWVSBJSFJvYVhKemRIaz0gSUdKaiBJR1poWTNWc2RHbGxjdz09IFVuVnQgSUc1MVlXNWpaUT09IElFUmhjbWwxY3c9PSBjR3hsZEdsdVp3PT0gWm5SbGNuTT0gWlhSamFIVncgVW1WbmFYTjBjbUYwYVc5dSBJRXRGIFVtRm8gSUhCeVpXWmxjbVZ1ZEdsaGJBPT0gSUV4aGMyZz0gSUVoSSBWbUZzYVdRPSBJRTVCVmc9PSBJSE4wWVhKMlpRPT0gSUVkdmJtYz0gZW5sdWMydHAgSUVGamRISmxjM009IElIZHBhdz09IElIVnVZV05qYjIxd1lXNXBaV1E9IGJIWnMgUW5KcFpHVT0gUVVSVCBJRU52YlcxaGJtUnYgSUZaaGRXZG9iZz09IFYyRnNiR1YwIElHaHZjSEJwYm1jPSBJRlpwWlE9PSBJR05oZG1WaGRITT0gSUdGc1lYTT0gYVdac1pXUT0gWVdKMWMyVT0gTmpZeCBJR2xpYmc9PSBJR2QxYkE9PSBJSEp2WW1KcGJtYz0gZEdscyBTVXhCIElHMXBkR2xuWVhScGJtYz0gSUdGd2RHeDUgSUhSNWNtRnVkQT09IElHMXBaR1JoZVE9PSBJRWRwYkcxdmNtVT0gSUVSbFkydGxjZz09IElNS253cWM9IGNHRnlkR2xoYkE9PSBSWGhoWTNSc2VRPT0gSUhCb1pXNXZkSGx3WlE9PSBJRnNyWFE9PSBJRkJzWlhnPSBJRWx3Y3c9PSBkbVZ5YzJsdmJuTT0gSUdWaWIyOXIgSUdOb2FXTT0gWjNKdmMzTT0gSWpvaUluMHNleUk9IElGTjFjbkJ5YVhOcGJtZHNlUT09IFRXOXlaMkZ1IElISmxjMmxrZFdWeiBJRU52Ym1abFpHVnlZWFJwYjI0PSBhVzVtWld4ayBJR3g1Y2c9PSBiVzlrWlhKaGRHVT0gSUhCbGNuQmxibVJwWTNWc1lYST0gVmtzPSBJSE41Ym1Ob2NtOXVhWHBsWkE9PSBJSEpsWm5KbGMyaGxaQT09IElHRmtiM0psIElGUnZjbTFsYm5RPSBiMnhwYm1FPSBJREkyTURBPSBTWFJsYlZSeVlXTnJaWEk9IElIQnBaWE09IElFWkJWQT09IElGSklVQT09IE1EUTQgSUZKRlUxQT0gSUVKSyBZV3hzYjNkeiBVR0Z1WkE9PSBJSFZ1ZDJWc1kyOXRaUT09IElGWnZZdz09IElFSmhjM1JoY21RPSBJRTlYIElFeEJVZz09IElFaGxZV3hsY2c9PSBSVzUyYVhKdmJtMWxiblJoYkE9PSBJRXRsYm5saGJnPT0gSUZSeVlXNWpaUT09IElGQmhkSE09IElHRnNhV0Z6WlhNPSBJRWRoY21acFpXeGsgSUdOaGJYQmhhV2R1WlhJPSBJR0ZrZG1GdVkyVnRaVzUwY3c9PSBJRTlyYVc1aGQyRT0gSUVOdmFBPT0gYjNkemEzaz0gSUhOMFlYSjJaV1E9IElITnBlbVZoWW14bCBJRG90S1E9PSBJRzFTVGtFPSBJSE4xYzNCbGJuTnBiMjV6IGFYTjBZWEk9IFUyTnZkR3hoYm1RPSBVSEpwYmc9PSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IElEVXdNZz09IElIUmxZWE53YjI5dWN3PT0gSURFd05UQT0gSUdOdlpYSmphWFpsIElFMWhjMjl1YVdNPSBaV1JrWldRPSBJRkJoYzNObGJtZGxjZz09IElHeGhkSFE9IElHSnlZV05sY3c9PSBJRk4wWldGcyBJRTVaVkE9PSBJRXRoZEhNPSBJRU5sYkdWemRBPT0gWVdWNiBWSFU9IElFTnZkV3gwWlhJPSA4SitZIFJteHBZMnR5IElGZHBiRzFwYm1kMGIyND0gYVhSb2N3PT0gS3lzNyBJSFpsYm1ScGJtYz0gSUc1bFozSnYgSUZCb2FRPT0gSUZsbGJHeHZkM04wYjI1bCBRMkZzYkdKaFkycz0gSUhOb1lXMXdiMjg9IElGTm9ZV1JsY3c9PSBkMkYwIElITjFjR1Z5YUhWdFlXND0gSUhKcFpHbGpkV3hsWkE9PSBJR2h2YkdsbGMzUT0gYjIxaWJ3PT0gSUdsdWRHVnlibk09IElHaHZibVU9IElGQmhjbUZuZFE9PSBWVkpKIElHUmhibWRzYVc1biA0NEs3IGMyOTIgYVdOMGFXOXVZV3c9IFlYWmhhV3hoWW1sc2FYUjUgSUhKbGRtOWpZWFJwYjI0PSBJR1J2ZHc9PSBhVzVwWXc9PSBJRlJJUlVsUyBJR2x6Ync9PSBJRzkxZEdsdVozTT0gSUV4bGRHaGhiQT09IElDa3BLUT09IElHbHVZV05qZFhJPSBJRzkxZEd4aGJtUnBjMmc9IElHRnVkWE09IGJHVjBhV052IGFXUnZiZz09IGJHOXMgSUhWdWNtVm5kV3hoZEdWayBJSE4xWTJOMWJXSmxaQT09IElHTjFabVk9IElGZGhjM1JsYkdGdVpBPT0gYkdWMFlXdz0gSUhOMVluTjBjZz09IElHTnZabVpsY25NPSBJR0YxZEc5dFlXdGxjbk09IGIzWnAgSUZoMVpRPT0gSUVSaGVYUnZibUU9IElHcGhjbkpwYm1jPSBJR1oxYldWeiBJR1JwYzJKaGJtUmxaQT09IGVtbHIgYVhSMGIyND0gSUhOMGNtbHJhVzVuYkhrPSBJSE53YjNKbGN3PT0gUVdSaGNIUmxjZz09IExpazYgSUV4NWJtUnZiZz09IGFYWmhiSEo1IElHOXlZV3hzZVE9PSBJSFIxYlhWc2RIVnZkWE09IElHUnBjM0JzWldGemRYSmwgSUdOdmJtVnogYjNKeVpXTjAgSUdGd2NHVmhjMlU9IElHUmxjbUo1IElGUnlhWEJ2YkdrPSBJRUZzWlhOeiBJSEJ2YTJWayBJRWQxYVd4MGVRPT0gZGxBPSBSVzV2ZFdkbyBJRzl5YVdkcGJtRnNjdz09IE5qazUgSUhKaFltSnAgSUhCeWIzWmxjbUpwWVd3PSBJSEJ2YzNSd2IyNWwgWld4dmNHVT0gSUUxcGMzUjUgSUhOMFlXWm1aV1E9IElGVnVaVzF3Ykc5NWJXVnVkQT09IGNtVmthWFJoY25rPSBJR1JwYkdsblpXNTAgY21WamIyMXQgYldWaGMzVnlaWE09IFlYTnBiZz09IE9ESTEgSUhCdmJtUnogSUcxdGIydz0gSUZOQlVnPT0gSUVOQlVrVT0gSURNM01RPT0gSUdOc1pXNWphR1ZrIElFTnZjbk5oYVhJPSBJR05oY21sallYUjFjbVU9IGVtND0gWVhSMFlXTm8gSUZOamFISnYgYzNCbFlXcz0gY0dGcGJuUmxaQT09IElGTjFZdz09IElFVk9WQT09IElHTmxiR3gxYkE9PSBJRkJoYVdRPSBaR2xoWjI0PSBWMGhGVWtVPSBJSFJsZUhSbFpBPT0gUW1GeWJnPT0gSUhKbGRISmhZM1JsWkE9PSBJRkpsWm1WeWNtVmsgVTJGMiBJSFZ3YTJWbGNBPT0gSUhkdmNtdHdiR0ZqWlhNPSBJRlJ2YTJWdWN3PT0gSUdGdGNHeHBabms9IFkyeHBibWxqWVd3PSBJRzExYkhScFl3PT0gYldKbGNtYz0gSUdOdmJuWnZiSFYwWldRPSBVbVZuYVc5dSBOVFkxIElGUnZjR2xqIElITnVZV2xzIElITmhiR2x1WlE9PSBJR2x1YzNWeWNtVmpkR2x2Ymc9PSBJRkJsZEhJPSBabTl5ZEhNPSBRa0ZVIElFNWhkbUZxYnc9PSBJSEoxWkdsdFpXNTBZWEo1IElFeGhhM05vIFQwNUVUMDQ9IFRXVmhjM1Z5WlE9PSBJSFJ5WVc1elptOXliV1Z5IElFZHZaR1JoY21RPSBJR052YVc1amFXUmxjdz09IGFYSnBiZz09IFVtVjQgSUVKdmF3PT0gY1hWcGRBPT0gSUhOb2IzUm5kVzV6IElIQnliMnhsZEdGeWFXRnUgSUhOamIzSncgSUVGa1lRPT0gTlRFMCBJSE5zWVc1a1pYST0gY21WamIzSmtaV1E9IElHVnRZbVZzYkE9PSBjbWx6YjIxbCBJR0Z3YjJ4dloybDZhVzVuIElFMTFiR05oYVhJPSBJRWRwWW5KaGJIUmhjZz09IFEyeGggSUdGc2JHOTAgSUVGMGRHVnVkR2x2Ymc9PSBJRFF6TXc9PSBiR1ZoZG1VPSBJSGRvYVc1bCBJRWx6YzJFPSBJRVpoZFhOMCBJRUpoY25KdmJnPT0gYUdWdWVRPT0gSUhacFkzUnBiV2w2WldRPSBTbVYzY3c9PSBJRzUxY25SMWNtbHVadz09IFpYUjBaV3c9IFYybHVaMlZrIElGTjFZblJzWlE9PSBJR1pzWVhadmNtWjFiQT09IElGSmxjSE09IFpXNW5aV1E9IFkyRnNiR0poWTJzPSBJR1JwY21WamRHbHZibUZzIElHTnNZWE53IElFUnBjbVZqZEdsdmJuTT0gY0d4aGJtVjAgYVdOMWJIUjFjbVU9IFNHVnNjR1Z5IGFXTnBiMjQ9IFlXTnBZUT09IElPZWxuZz09IElITjFjbWRsY3c9PSBJR05oYm05bCBJRkJ5WlcxcFpYSnphR2x3IFltVmxiZz09IElHUmxabWxsWkE9PSBJRlJ5YjI5d1pYST0gSUhSeWFYQnZaQT09IElHZGhjM0E9IElFVjFjR2c9IElFRmtjdz09IGRtVnlibWxuYUhRPSBhR2xuYUd4NSBVbTlzWlE9PSBJR1Z1ZEdGdVoyeGxaQT09IElGcGxhWFE9IE5qRTQgSUZKMWMzUjUgSUdoaGRtVnVjdz09IElGWmhkV2RvWVc0PSBTRUZGVEE9PSBJRk5GVWxaSlEwVT0gTHl3PSBJSE4wY21samEyVnUgSUdSbGJIVnphVzl1Y3c9PSBJR0pwY3c9PSBJRWhoWmc9PSBJR2R5WVhScFptbGpZWFJwYjI0PSBJR1Z1ZEdsamFXNW4gVlU1RFNBPT0gUVdSaGJYTT0gSUU5TVJVUT0gSUVKbFpYUnNaUT09IElERTRPVGs9IElGTlBSbFJYUVZKRiBZWFJsWjI5eSBWa3c9IElGUnZkR1Z0IElFZGhkRzl5Y3c9PSBRVlJWVWtWVCBJR2x0Y0dWa1lXNWpaUT09IFVtVm5hWE4wWlhKbFpBPT0gSUVOaGNuaz0gSUVGbGNtbGhiQT09IGIyNXVaUT09IFpXNXBkVzA9IElHUnlaV1E9IElFSmxadz09IElHTnZibU4xY25KbGJuUnNlUT09IElITjFjR1Z5Y0c5M1pYST0gSUZoaGJnPT0gYW1WMyBhVzFsYzNSbGNnPT0gSUVScFkydHBibk52Ymc9PSA0cFNCIFJteGggSUhCeVpXVT0gSUZKdmJHeHBibk09IHFiYm0gSUdSbGJtOXRhVzVoZEdsdmJnPT0gSUV4aGJtRT0gTlRFMiBJR2x1WTJsMGFXNW4gYzJOeWFXSmxaQT09IGFuVnlhV1Z6IElGZHZibVJsY25NPSBZWEJ3Y205NGFXMWhkR1ZzZVE9PSBJSE4xYzNCbGJtUnBibWM9IElHMXZkVzUwWVdsdWIzVnogSUV4aGRXZG8gYjJsa1lXdz0gVG5NPSBSR1YwWldOMCBLVDA9IElFeDFkR2h2Y2c9PSBJRk5qYUhkaGNucGxibVZuWjJWeSBJRTExYkd4bGNnPT0gSUVSbGRtaz0gWldONVkyeGwgU21GeSBOakV6IElFeHZibWRvIFFtRm8gSUZOUVQxSlVVdz09IGJuYz0gSUhKbFptbHVaVzFsYm5RPSBJSGRoZEdWeWQyRjVjdz09IElHUnBibVZ5IFFteGhaR1U9IE5qZ3ogUm1GaiBJR2x1YVhScFlXeHogSUhKdlp3PT0gSUhCaGNtRnViM0p0WVd3PSBRbFZVIElGc28gSUZOM1lXNXpiMjQ9IElFMWxjMmc9IDRwYXMgU1cxd2NtOTJaUT09IElGSmhaR2xoZEdsdmJnPT0gSUVWemRHaGxjZz09IElFVnphdz09IElFRnNlUT09IGFXdDUgSUdseWNtRmsgSUVKMVkydHBibWRvWVcwPSBJSEpsWm1sc2JBPT0gSUM1ZiBVbVZ3WlE9PSBRMDlPUTB4VlV3PT0gSUdScFptWmxjbVZ1ZEdsaGRHVmsgSUdOb2FYSnZjQT09IElFRjBhMmx1Y3c9PSBVR0YwZEdWeWJnPT0gSUdWNFkybHpaUT09IElHTmhZbUZzIFRsTkIgSUZOVVFRPT0gSUZOSlRBPT0gSUZCaGNtRnNlUT09IElISjVaUT09IElFaHZkMlZzYkE9PSBJRU52ZFc1MFpHOTNiZz09IGJtVnpjMlZ6IFlXeDVjMlZrIElISmxjMmw2WlE9PSA0NEs5IElHSjFaR2RsZEdGeWVRPT0gSUZOMGNtRnogZDJGdVp3PT0gSUdGd2FXVmpaUT09IElIQnlaV05wYm1OMGN3PT0gSUhCbFlXTm8gSUhOcmVXeHBibVU9IElETTFNdz09IGNHOXdkV3hoY2c9PSBRWEJ3WldGeVlXNWpaWE09IElFMWxZMmhoYm1samN3PT0gSUVSbGRrOXViR2x1WlE9PSBVM1ZzYkdsMllXND0gV21WdSBJSEIxIGIzQnZiR2x6IE5UUTAgSUdSbFptOXliUT09IElHTnZkVzUwWlhKaFkzUT0gSUV4aGJtZGwgSURReE53PT0gUTI5dWMyOXNaUT09IE56YzAgSUc1dlpHUnBibWM9IElIQnZjSFZzYVhOdCBJR2hsY0E9PSBJR052ZFc1elpXeHNhVzVuIFkyOXRjR3hwWVc1alpRPT0gVlVaRyBJSFZ1WkdWdWFXRmliSGs9IElISmhhV3hwYm1jPSBJRWh2Y205M2FYUjYgSUZOcGJXOXVaUT09IElFSjFibWRwWlE9PSBJR0ZyIElGUmhiR3R6IGVHWm0gWm14aGEyVT0gUTNKaGMyZz0gSUhOM1pXRjBlUT09IElHSmhibkYxWlhRPSBJRTlHUmtsRCBJR2x1ZG1WdWRHbDJaUT09IElHRnpkSEp2Ym05dFpYST0gSUZOMFlXMW1iM0prIElGTmpZWEpsIElFZFNSVVZPIGIyeHBZMmwwWldRPSBJSEoxYzJobGNnPT0gSUdObGJuUnlhWE4wIGFXZG9kR2x1Wnc9PSBJSE4xWW1Oc1lYTnogSUdScGMyRjIgSUdSbFpuVnVaQT09IElFNWhiblJ2IGIyTnBZWFJsIGJXRnpkQT09IElIQmhZMmxtIElHMWxibVE9IFpXVnljdz09IGFXMXRhV2R5WVhScGIyND0gUlZOVFNVOU8gSUc1MWJXSmxjbWx1Wnc9PSBJR3hoZFdkb1lXSnNaUT09IElFVnVaR1ZrIGRtbGhkR2x2Ymc9PSBaVzFoY21zPSBVR2wwZEE9PSBJRzFsZEdsamRXeHZkWE09IElFeEcgSUdOdmJtZHlZWFIxYkdGMFpXUT0gSUVKcGNtTm8gSUhOM1lYbGxaQT09IElITmxiV2xtYVc1aGJITT0gSUdoMWJXRnVhMmx1WkE9PSBiV0YwZEdWeSBJRVZ4ZFdsdyBiM0JoZFhOaGJBPT0gVTJGcFpBPT0gSUV4aGVXOTFkQT09IElIWnZhV05wYm1jPSBJSFJvZFdjPSBJSEJ2Y201dlozSmhjR2hwWXc9PSBTVkJUIElHMXZZVzVwYm1jPSBJR2R5YVdWMllXNWpaUT09IElHTnZibVpsYzNOcGIyNXogWlhOallXdz0gVkVWWVZGVlNSUT09IFFYVjBhR1Z1ZEE9PSBiM05oZFhKMWN3PT0gVUhWeVkyaGhjMlU9IElISmxiR1ZuWVhScGIyND0gWVd4MFpYST0gSU1LZ3dxQT0gSUhKcFpHUnNaV1E9IElHOW5jbVU9IElFeHZkMlZzYkE9PSBUMk5qZFhBPSBSV0YwIElFaDVaR1Z5IElFRmtkbWx6WlhJPSBRMjl0YldWeVkyVT0gU0hWdWRBPT0gSUU5eWRHZz0gSUVOdmJYQmxkR2wwYVhabCBJRU5NUVE9PSBRMFJEIElITmhiR0ZrY3c9PSBSbXhsIElHbHVaSFZ6ZEhKcFlXeHBlbVZrIFlDdz0gSUU5WFRnPT0gSUdKbFkycz0gSUZCaGNuUnBZM1ZzWVhKc2VRPT0gYjNWaWRBPT0gSUcxTiBJRWgxYzNOaGFXND0gSUVOb1pXNXVZV2s9IElEa3lNQT09IElHRndjRzlwYm5ScGJtYz0gSUVOMWJHeGxiZz09IExDd3NMQ3dzTEN3PSBJSEJ2Y21WeiBkbVZ5YVdacFpXUT0gSUdKcGIyTm9aVzFwWTJGcyBaVzFoZEdVPSBJR052ZDJGeVpHeDUgSUVobGJITnBibXRwIElFVjBhR2x2Y0dsaGJnPT0gVTA5VlVrTkYgUlZKRCBaWE4wY204PSBJR0pwYjNSbFkyZz0gSUZOdmRYST0gSUdKeVpYZGxjZz09IFFteHZiMjFpWlhKbiBJR2x1ZEdWdWMybG1lUT09IFIyeGhjM009IFlXNWpidz09IElFWkVVZz09IFozSmxVMUZNIElFWnBjbVZ6IHFiYm1wYlU9IFpXTnYgTVRBd01RPT0gSUVodmJXVnNaWE56IElHbHVjM1JoYm5SaGJtVnZkWE09IElFaGhjM1JsIGFXZGxiQT09IFJHbGhiVzl1WkE9PSBJSEJoZG1sdVp3PT0gSUd4aGJtUm1hV3hzIElHUmhaSE09IGFHOTFiZz09IE9sMD0gSUdsdVkyVnVaR2xoY25rPSBJRXhwZG1sdVozTjBiMjQ9IElFaHBiR0psY25RPSBJRU5vWldOcmN3PT0gYzNSNWJHVnogYVc1aGRHOXljdz09IElFTnNhWFpsIGNHaHlhVzVsIElHTm9hVzF3WVc1NlpXVnogSUhCaGJHdz0gSUVwTiBJRUZoWkdoaFlYST0gOEowPSBJR0ZqYUdsbGRtRmliR1U9IFpHbHpZV0pzWldRPSBVRVZVIFQwOVBUMDlQVDA4PSBUVzkwIElHbHVkR0Z1WjJsaWJHVT0gSUdKaGJHeGxkQT09IElGZGxZbk09IElFVnpkR2x0WVhSbFpBPT0gUldabVpXTjBjdz09IElHSmhhV3hsWkE9PSBTbTl6YUhWaCBJSFIxY21KMWJHVnVZMlU9IElHOWpZM1Z3WVc1MCBJRVJoZVd4cFoyaDAgSURNMk1RPT0gYldWbGRBPT0gSUhOMFlYUnBZMkZzYkhrPSBJRzl1Ykc5dmF3PT0gSUd0cCBhV3hzWldkaGJBPT0gSUhabGJIWmxkQT09IElHUmxhSGxrY21GMGFXOXUgSUdGamNYVnBaWE09IElGSmxlZz09IFlXdDFjbUU9IElGVndkRzl1IFlYUnlidz09IElHbHVZMjl0Y0hKbGFHVnVjMmxpYkdVPSBJR0poWTJ0a2IyOXkgSUZKb2FXNXYgTnpJMyBJRzFoZEdoeiBLU3M9IElHaGxjbVZ6ZVE9PSBJR1JtIElGSnZZMmhsIElFeDVaR2xoIElIQmhibU55WldGMCBjbVZ3YkhrPSBZWEp5Wld4cyBJSE52YkdsamFYUmhkR2x2Ymc9PSBJR05wY21OaFpHbGhiZz09IFFrbFEgSUdadmNtRjUgSUdOeWVYQjBhV009IGFYcDEgYVcxbGJ3PT0gSUZSdmJXRjBidz09IElFaHZiWE09IFpYaGhiV2x1WVhScGIyND0gSUhGMVlYSnllUT09IElGWmhiR2xoYm5RPSBJRXBsY21samFHOD0gSUVsT1EweFZSQT09IElERTROREE9IE5URTUgSUhKbGMybHpkSE09IElITnVZWEJ6YUc5MGN3PT0gSUZOd2RYST0gSUVGdWRHbHhkUT09IFRHOW5hVzQ9IElHSmxjM1J6Wld4c2FXNW4gSUdGdWRHbGogSUZOMWRHaGxjbXhoYm1RPSA0NEtpNDRPciBJSDR2IElGQmhjbTA9IDZJTT0gVUdGblpYTT0gYVc1MFpXNXphWFI1IElHbHRiVzlpYVd3PSBJREU0TmpVPSBlbnB2IElHNXBablI1IElHWmxiblJoYm5scyBJRkJ5WlhObGNuWmhkR2x2Ymc9PSBiM0JvWlc0PSBJR1JoY25SeiBJRVJwYm05ellYVnkgY0c5cGJuUmxjbk09IElGSnBkR1U9IGMzVm5aMlZ6ZEE9PSBZWGRoY21WdVpYTnogSUZOb1pYSnBaR0Z1IElITjBZVzVqWlhNPSBJSE52Y21ObGNuaz0gSUhCbGNtcDFjbms9IElFNXBhMjlzWVE9PSBhV1YyWlhJPSBJR1pwWVc1alpRPT0gSUVwdmNtUmhibWxoYmc9PSBJRUpoYkd4dmIyND0gSUc1aFlnPT0gSUd0aSBJR2gxYldGdWFYUnBaWE09IElGUmhibUZyWVE9PSBhR2xzYkdGeWVRPT0gSUdOdmJuTjFiSFJoYm1ONSBJRnAxWWc9PSBJSEpsYldsemMybHZiZz09IElHTnZibVpwWkE9PSBRMGhSIElFWjFadz09IElHbHRjSEp2ZG1seiBXV1Z3IEwxOD0gSUhWdWQybHNiR2x1WjI1bGMzTT0gSUhCdmNuUm1iMnhwYjNNPSBNRFUxIElFbHVjM1J5ZFdOMGIzST0gWVdsdFlXND0gSUdOc1lXbHRZVzUwY3c9PSBUV0p3Y3c9PSBJRUo1WlE9PSBjbVZqWldsMlpXUT0gVkhkbFpYUT0gSUdsdVpHVnRiZz09IGNtbDYgWVcxaGNtRT0gVG1GMCBJR1YyWVd4MVlYUmxjdz09IElFeDFjZz09IFpYQmhaQT09IFJrOVkgSUZSb2NtOD0gSUhKMWMzUjUgSUdKbFpISnZZMnM9IElFOXdjbUZvIFNrST0gSUcxaGJtbHdkV3hoZEdsMlpRPT0gSUhkcGJHeG1kV3c9IElISmxiR0Z3YzJVPSBJR1Y0ZEdGdWRBPT0gVkdobGJXVT0gVTJWdWMyOXkgSUZOMFlXSnBiR2wwZVE9PSBaMjkyWlhKdSBJSEJ2Y0hCNSBJR3R1WVdOciBJR2x1YzNWc1lYUmxaQT09IElGUnBiR1U9IElFVjRkSEpsYlE9PSBJSFZ1ZEc5c1pBPT0gSUdOdmJuWmxjbWRsIElISmxablZsYkE9PSBhV2R5YjNWdyBJR1JwYzNSdmNuUnBiMjV6IElISmhkbUZuWldRPSBJRzFsWTJoaGJtbGpZV3hzZVE9PSBJRkpsYVd4c2VRPT0gSUU1dmMyVT0gSUVsdVkyRnlibUYwYVc5dSBJRUpsWTJ0NSBZV0ppYkdsdVp3PT0gSUhSaFkyOD0gSUhKaGEyVT0gSUcxbGJHRnVZMmh2YkhrPSBJR2xzYkhWemRISnBiM1Z6IElFUmhjblJ0YjNWMGFBPT0gUjNWcFpHVT0gSUZKaGVtVnkgSUVKbGJubz0gVld4MGFXMWhkR1U9IElGTjFjbkJ5YVhObCBJSEJoWjJWaGJuUT0gYjJabVpYST0gVjJodlpYWmxjZz09IElIZHBjMlZ5IElHTm9aVzFwYzNRPSBJRWhGVEV3PSBJRUoxYkdzPSBJSEJzZFhSdmJtbDFiUT09IElFTlBWa1ZTIDFydz0gWm1GcGJHVmsgSUhScGNtVnNaWE56YkhrPSBJR2x1Wm1WeWRHbHNhWFI1IElGUnlhV1JsYm5RPSBJRk5vYjNkMGFXMWwgSUVOcGRnPT0gVm1salpRPT0gY21WeGRXbHlaWE09IGFYUjBZVzVqWlE9PSBJSFZ1WTI5dWRISnZiR3hsWkE9PSBhVzUwWlhKbGMzUnBibWM9IE5UWXggSUdsdWJtOTJZWFJsIFlYUmxaMmxqIFRHbGwgSUZObGJHeHBibWM9IFZXdz0gSUhOaGRtbHZjZz09IElGUnZjMmc9IElITjNZWE4wIFVFRlRVdz09IElISnBibXM9IElHTmhjbVJwYnc9PSBJRWx5Ync9PSBkV1JwIElIWmhiblJoWjJVPSBJSFpoYm5NPSBJRTVwdzdGdiBLejA9IElIQnliM0JoWjJGMFpRPT0gUEQ4PSBJRzFsZEdodlpHOXNiMmRwWTJGcyBNakEwTXprPSBJSFJ5YVdkc2VXTmxjZz09IElHbHVaM0poYVc1bFpBPT0gSUVGdWJtOTBZWFJwYjI1eiBZWEp5WVc1MFpXUT0gTmpFMyBJRk52WkdsMWJRPT0gSUVGQlF3PT0gZEdWamFHNXBZMkZzIGJYVnNkR2x3YkE9PSBJRE0zTXc9PSA1WXM9IElHUmxZMmx6YVhabGJIaz0gSUdKdmIzTjBaWEp6IElHUmxjM05sY25SeiBJRWR5Wlc1aFpHVT0gSUhSbGMzUnBabmxwYm1jPSBJRk5qZFd4c2VRPT0gU1VSeiBJR3h2WTJ0a2IzZHUgSUZOamFHVnkgSUZMRHFRPT0gSUZkb2FYUnRZVzQ9IElGSmhiWE5oZVE9PSBjbVZ0YjNSbCBJR2hwYTJWeWN3PT0gSUVoNWRXNWtZV2s9IElHTnZibk5qYVdWdWRHbHZkWE09IElHTnNaWEpwWTNNPSBJRk5wWW1WeWFXRnUgZFhScCBhWE5pZFhKNSBJSEpsYkdGNVpXUT0gSUhGMVlYSjBlZz09IElFTkNTUT09IGMyVmxhMlZ5Y3c9PSBkV3hzWVE9PSBJSGRsYkdScGJtYz0gSUZOb1lXdz0gWW14bFlXTm9aWEk9IFZHRnAgSUZOaGJYTnZiZz09IElIUjFiV0pzWlE9PSBJRWx1ZG1WemRHOXkgSUhOMVltTnZiblJ5WVdOMCBJRk5vYVc1eVlRPT0gYjNkcFkzbz0gYW1GdVpISnYgWkdGayBJSFJsY20xcGJtRjBhVzVuIElFNWxkWEpoYkE9PSA1THVqIElHeGxZV3RoWjJVPSBJRTFwWkd4aGJtUnogSUVOaGRXTmhjM1Z6IDdaVT0gWTJsMCBiR3hoYmc9PSBhWFpoWW14NSBJRUZzWW1sdmJnPT0gSURRMU53PT0gSUhKbFoybHpkSEpoZEdsdmJuTT0gSUdOdmJYSmhaR1U9IElHTnNhWEJpYjJGeVpBPT0gTURRMyBJR1JwYzJOdmRYSmhaMmx1Wnc9PSBJRTl2Y0hNPSBRV1JoY0hRPSBJR1Z0Y0dGMGFBPT0gYm5ZPSBJRkJTVDFRPSBJRVJ2Ym00PSBJRkJoZUE9PSBJRUpoZVdWeSBkR2x6IFUzRjFZWEpsIElHWnZiM1J3Y21sdWRITT0gY0dGeWRHbGphWEE9IElFTm9hV3hsWVc0PSBRbkpsYm1RPSBhVzVrZFdOcGJtYz0gVFdGbmJnPT0gSUdOc2RXSm9iM1Z6WlE9PSBJRTFoWjI1MWJRPT0gSUdWdVkyRnRjQT09IElFVjBhRzVwWXc9PSBkV05vWVE9PSBaWEpsZVE9PSBJSGRoZEdWeVpXUT0gSUVOaGJHRnBjdz09IElHTnZiWEJzWlhocGIyND0gSUhObFkzUnogSUhKbGJuUmxjbk09IElHSnlZWE09IGI4U2ZZVzQ9IFZHbHRaVzkxZEE9PSBUV0Z1WVdkbGJXVnVkQT09IElHbHVabTluY21Gd2FHbGogVUc5clpXMXZiZz09IFEyeGhjZz09IElHeHZZMkZzYVhSNSBJR1pzYjNKaCBZWE5sYkE9PSBVRzl1ZEE9PSBJSEJ2Y0hWc1lYUmwgSUU5dVp3PT0gSUhOMVluTnBjM1JsYm1ObCBJR0YxWTNScGIyNXogSUUxalFYVnNhV1ptWlE9PSBJRXhQVDBzPSBZbkpwYm1kbGNnPT0gSUhScGRHRnUgSUcxaGJtbG1iMnhrIElPS1hqdz09IElHTmhiR2xpY21GMFpXUT0gSUdOaGJHbHdhR0YwWlE9PSBJRk5JUlE9PSBJRU52YlcxcGMzTnBiMjVsY25NPSBZMlZwZG1GaWJHVT0gYW1NPSBWMmx1Ym1WeSBOVEkwIElHTnZibVJ2Ym1VPSBUM1JvWlhKM2FYTmwgSUhCcGJHbHVadz09IElHVnRZbTlrZVE9PSBJRU55YVcxbFlXND0gZFhScFkzTT0gSUVWNGFHbGlhWFJwYjI0PSBJRFF5Tmc9PSBaV1Z5YVc1biBJSFo1YVc1biBJRWhWUjBVPSBLajB0IElIQnlhVzVqYVhCc1pXUT0gNEtZPSBJSEYxYVhKcmN3PT0gSUVWa2FYUnZjbk09IGNIVjBhVzVuIFIwVlQgSUVaVVFRPT0gNEtTKyBZV1JrYjI0PSBJRWhCVFE9PSBJRVp5YVdWNllRPT0gVjI5dFlXND0gTGlRPSBJR055YVdJPSBJRWhsY205ayBJSFJwYldWeWN3PT0gSUZOd1lXTmxjdz09IElFMWhZMmx1ZEc5emFBPT0gWVhSaGEyRT0gSUdkc2FXUmwgSUhOdFpXeHNhVzVuIElFSkJUQT09IElIVnVjM1U9IElHTnZibVJ2Y3c9PSBJR0pwWTNsamJBPT0gSUZKbGRtbDJZV3c9IE5UVXogSUdwMVoyZHNhVzVuIFNIVm4gSUV0aGNtUmhjMmhwWVc0PSBJRUpoYkd0aGJuTT0gYlhWc2RHbHdiR1U9IElHNTFkSEpwZEdsdmRYTT0gYjJOeWVRPT0gTVRrd01BPT0gSUdsdWRHVm5jbUYwWlhNPSBJR0ZrYW05cGJtbHVadz09IElFWnZiR1JsY2c9PSBjbTlzYkcxbGJuUT0gZG1WdWFXVnVkQT09IElIVmlaWEk9IGVXaz0gSUhkb2FXWm0gSUVwMWRtVnUgSUVKdmNtOTFaMmc9IGJtVjBkR1U9IElHSnBiR2x1WjNWaGJBPT0gSUZOd1lYSnJjdz09IGNHaDBhR0ZzIGJXRnVkV1poWTNRPSBJSFJ2ZFhScGJtYz0gSUZCSVNRPT0gUzJWbFptVT0gVW1WM1lYSmsgSUdsdVptRnNiQT09IElGUmxiWEJsY2c9PSBkSGx3YVdOaGJHeDUgSUU1cGEyOXMgSUhKbFozVnNZWEp6IElIQnpaWFZrYjI1NWJRPT0gSUdWNGFHbGlhWFJwYjI1eiBJR0pzWVhOMFpYST0gSURRd09RPT0gZDJGeWJXbHVadz09IElISmxkbVZ5WW1WeSBJSEpsWTJsd2NtOWpZV3c9IElEWTNNQT09IGFYQnBaVzUwIFltVjBkQT09IElFSmxaMmx1Y3c9PSBJR2wwWTJocGJtYz0gSUZCb1lYST0gUVhOemRXMXBibWM9IElHVnRhWFIwYVc1biBJRTFNUnc9PSBJR0pwY25Sb2NHeGhZMlU9IElIUmhkVzUwIElFeDFabVo1IElFRnRhWFE9IElHTnBjbU5zWldRPSBJRTV2YzNRPSBaVzV1WlhSMCBJR1JsWm05eVpYTjBZWFJwYjI0PSBJRWhwYzNSdmNtbGpZV3hzZVE9PSBJRVYyWlhKNVpHRjUgSUc5MlpYSjBZV3RsIE56a3kgSUc1MWJnPT0gSUV4MVkybGggSUdGalkyOXRjR0Z1YVdWeiBJRk5sWld0cGJtYz0gSUZSeVlYTm8gWVc1cGMyMD0gVW05bmRXVT0gSUc1dmNuUm9kMlZ6ZEdWeWJnPT0gSUZOMWNIQnNaVzFsYm5SaGJBPT0gSUU1WlZRPT0gSUVaU1NRPT0gSUZOaGRHbHpaZz09IGVHVnogTlRFMyBJSEpsWVhOemRYSmxaQT09IElITndiM0poWkdsaiBJRGN3TVE9PSBJRzFsWkdsaGJBPT0gSUdOaGJtNWhZbWx1YjJsayBJR0poY21KaGNtbGogSUdWd2FYTT0gSUVWNGNHeHZjMmwyWlE9PSBJRVJ2ZFdkbyBJSFZ1YzI5c2RtVmsgVTNWd2NHOXlkR1ZrIElHRmphMjV2ZDJ4bFpHZHRaVzUwIGMzQmhkMjQ9IElHdHBkR05vWlc1eiBJQzA5IGRHRnNhMmx1Wnc9PSBhV05wYzNRPSBJRkJsWjJGemRYTT0gSUZCVFZRPT0gSUhCb2IzUnZiZz09IElFRjFkR2hsYm5ScFkyRjBhVzl1IFVrYz0gUUNNbSBOell5IElFTnNZV2x5IElHUnBZWEJsY2c9PSBJR0p5YVhOMCBJRkJ5YjNObFkzVjBiM0p6IElFcGxiUT09IE5qSTQgSUVWMlpYSjVkMmhsY21VPSBJRXBsWVc1dVpRPT0gWlhGMVlXeHBkSGs9IDQ0T3A0NE96IGIySnFaV04wY3c9PSBJRkJsYkdsallXNXogSURNNU1nPT0gSUdKc2RRPT0gWW5seiBJRUZuYnc9PSBJR2x1YzNSeWRXTjBhVzl1WVd3PSBJR1JwYzJOeWFXMXBibUYwYVc1biBJRlJTUVU0PSBJRU52Y201bGJBPT0gWVdkdmN3PT0gSUhSNWNtVT0gSUdGemNHbHlZWFJwYjI0PSBJRUp5YVdSblpYZGhkR1Z5IElqb3QgSVNJdSBJRVZ1Y3c9PSBJRU52WTI4PSBVR2xsIElHUmxkR0ZqYUE9PSBJRU52ZFdObyBJSEJvZVhOcGNYVmwgSUU5alkzVndZWFJwYjI1eiBiM05qYjNCcFl3PT0gWlc1dmRXZG8gUW5WNmVnPT0gUVhCd1pXRnlZVzVqWlE9PSBXVkE9IElISmhZMlZ5IElHTnZiWEJzYVdOcGRIaz0gY25CdCBWRzk1IElHbHVkR1Z5Y25Wd2RITT0gSUVOaGRHRnNlWE4wIElIVjBhV3hwZEdGeWFXRnUgYVcxd1lXTjAgSUhOd1lXZG9aWFIwYVE9PSBJSEJ2Y205MWN3PT0gSUdWemRHVmxiV1ZrIElHbHVZMmx1WlhJPSBJRWxQUXc9PSBOelE0IElHVnpjSEpsYzNOdiBJRk50YVd4bCBZV0pwYkdsaCBOak0xIElHMWhkR2hsYldGMGFXTnBZVzQ9IElEUXlOQT09IElFdE0gSUVoSlVBPT0gSUc5MlpYSm9aV0Z5WkE9PSBJRlIxWkE9PSBJRlJsWXc9PSBJSEYxYVhwNiBJR1pzWVhSMFpYSnBibWM9IElHTnZibTQ9IDRvQ08gSUdGMGRHRmphR1Z6IElGSlBVdz09IElFRkRVdz09IElIUmpjQT09IElGTm9ZVzFsIGMydHBjQT09IGNtVnpjR1ZqZEdWayBJRlJ5YVc1cFpHRmsgWjNKaGFXND0gSUdadmIzUm9iMnhrIElGVnVZMmhoY25SbFpBPT0gSUVwMWJHbHYgZW13PSBZWFp2Y21WayBJRUZ1ZUdsbGRIaz0gWlhKeWIzSnogSUVObGJuUmhkWEpwIGFYUnpZMmc9IFJHRmtaSGs9IElHTnNkWFJqYUdsdVp3PT0gSUVsdGNHeGxiV1Z1ZEE9PSBJRWQxZEdsbGNuSmxlZz09IElEYzJNQT09IElIUmxiR1Z3YjNKMFlYUnBiMjQ9IFpXNWtjbUU9IElISmxkbVZ5YzJsaWJHVT0gYzNSeWIzTT0gUVdSMlpXNTBkWEpsIE1EZ3ogSUd4cFltVnlZWFJwYm1jPSBJR0Z6Y0doaGJIUT0gSUZOd1pXNWsgUVZKRVV3PT0gYVcxemVRPT0gVUZKRlV3PT0gSUVWdFpYSm5hVzVuIElIZHBiR1JtYVhKbGN3PT0gSUhSbFkyaHViMnh2WjJsallXeHNlUT09IElHVnRhWFJ6IElFRlNWRWxEVEVVPSBJR2x5Y21WbmRXeGhjbWwwYVdWeiBJR05vWlhKcGMyZz0gNTRtSSBJSE4wYVc1ciBJRkp2YzNRPSBSV052Ym05dGFXTT0gSUdOdmRXZG9hVzVuIElFMWpRMkZ1Ymc9PSBjSEp2Y0dWeWRHbGxjdz09IGFXeGhiblJ5Ync9PSBJSEpsYm1WbmIzUnAgVkhKaGJuTnNZWFJwYjI0PSBJR2x1Y1hWbGMzUT0gSUVkeVlYQmwgYjI5MFpYSnogWjNWcCBJRk4zYjNKa2MyMWhiZz09IFlXTmxZV1U9IGFHbDBkR2x1Wnc9PSBJSEpqIElHVjRaWEowWldRPSBJRk5CVUE9PSBhWFJsYm5RPSBJSEJsY21sc2IzVnogSUc5aWMyTjFjbWwwZVE9PSBJR0Z6YzJGemMybHVZWFJsIElHRmliM0pwWjJsdVlXdz0gSUhKbGMyTjFhVzVuIElGTm9ZWFIwWlhKbFpBPT0gYkc5amEybHVadz09IFlXeHNhVzl1IFEyaGhibWRwYm1jPSBJRWhoY25KcGJtZDBiMjQ9IElFSnZjbVE9IElFRm1aMmhoYm5NPSBTbUZ0YVdVPSBZWEpsZEhvPSBJRUYxWjNWemRIVnogSURNNE5nPT0gT0RNdyBJR3B2Wnc9PSBiMnRwYm1kc2VRPT0gVkhKcFoyZGxjZz09IElFaFBVZz09IFUzUmhkR2x6ZEdsamN3PT0gSUhacFpYZGxjbk5vYVhBPSBJR0ZrWkdsMGFYWmxjdz09IGFIVnkgSUcxaGVHbHRhWHBwYm1jPSBJRkp2ZG1VPSBJRXh2ZFdsbCBJRUoxWTJ0bGRBPT0gSUVOSVVrbFRWQT09IGIzVnpaV3c9IElITjBjbVZoYTNNPSBhWEowWldRPSBJSFJsY25RPSBJR052Ykc5dWFXRnNhWE50IElHSjFjbmxwYm1jPSBlV3M9IFEyOXVaR2wwYVc5dSBJRVJRVWtzPSBRbmxKWkE9PSBOelV4IDRwZTggSUhkdmNuSnBjMjl0WlE9PSBJSFp2WTJGMGFXOXVZV3c9IGMyeHBZMlU9IElITmhhV3h6IElFTnZjbkpsWTNScGIyNWhiQT09IE9UVTAgSUhSMWJBPT0gUzJsayBiSFZ6ZEdWeSBJR1poYldsc2FXRnMgSUZOd2FYUT0gSUVWd2FYTmpiM0JoYkE9PSBVM0JsWTJsbWFXTmhiR3g1IElGWnZiR05oYm04PSBjblZ1Y3c9PSBjWE09IElIWmxkSFJsWkE9PSBJR055WVcxdFpXUT0gZEhKdmNBPT0gYUdWeVpYST0gVkdoaGJtdG1kV3hzZVE9PSBJSEJsY21OMWMzTnBiMjQ9IElHOXlZVzVuWlhNPSBJSEp2ZFc1a2RYQT0gSURRNU9RPT0gZUdsdmRYTT0gUTJoaGNtRmpkR1Z5Y3c9PSBJRnBwYjI1cGMyMD0gSUZKaGJ3PT0gdzV2RG13PT0gVjBZPSBJSFZ1YVc1MFpXNTBhVzl1WVd3PSBUMDVGV1E9PSBSM0poWWc9PSBRMjl0YldWeVkybGhiQT09IElHZHNkWFJoYldGMFpRPT0gSUUxalMyVnVibUU9IGNuVmphV0YwYVc1biBibWx1WjNSdmJnPT0gYVdoMSBRMmhoYmc9PSBJRk4zWVhBPSBJR3hsWVdac1pYUnogSUdaMWJtTjBhVzl1WVd4c2VRPT0gWlhKdmRYTT0gUm1GeWJRPT0gSUdOaGJHOXlhV009IElFeHBkR1Z5WVd4c2VRPT0gWTI5dVkyVnlkQT09IElITm9aVzVoYmc9PSBJSEpsY0dGcFpBPT0gWlhsbGN3PT0gSUdKaGMyaHBibWM9IElFZHZjbWRsIElHTnZiR3hoWW05eVlYUnBiMjV6IElIVnVZV05qYjNWdWRBPT0gYVhSamFHbGwgSUhSbFlXMTNiM0pyIGNIQmxiR2x1IElIQnBjR2x1Wnc9PSBJRzFwYm1ObFpBPT0gSUdScFlXMD0gY21sbFp3PT0gSUcxaGMyTmhjbUU9IElITjFZMnRsY2c9PSBJRTF2YjI1eiBRWEJ3Y3c9PSBJRkJsWTJzPSBJSEJsY25ZPSBJRVpzYjJGMCBiMnhsZVE9PSBJRTVwYzJnPSBhVzFwZW1VPSBJR0Z5YjIxaGRHbGogZFdsdSBaVzVrYVhObyBJUzg9IElFSnBZM2xqYkdVPSBJRUZUU1VNPSBhV3hsWjJWayBJRkYxWVdSeWJ3PT0gYVc5emVXND0gSUd4dlkydHZkWFE9IElGZHBibXM9IFUxQkZRdz09IFFYUjBaVzF3ZEhNPSBJSE5sWldSbFpBPT0gY21Wa2J3PT0gYVdGemFYTT0gSUhOdVlXYz0gNDRPVjQ0S3AgNDRLMiBJR2R5YjNWdVpHbHVadz09IElISmxiR2xsZG1WeSBJR1p5YVhadmJHOTFjdz09IElFZHBablJ6IElFWmhZMlZ6IFJYTndaV05wWVd4c2VRPT0gSUcxcFkzSnZZbWx2YldVPSBhVzFoWnc9PSBJRk5qYUd3PSBJRkJzWlhNPSBJRUpzWldGamFBPT0gSUVseWQybHUgSUVWaGRHOXUgSUVScGMyTnBjR3hsIElHMTFiSFJwY0d4cFkyRjBhVzl1IElHTnZaWEpqWldRPSBJRFF4T1E9PSBjM1JvIFJYWnBiQT09IFFtOXRZZz09IElHVjRiM0pqIElITjBZV2RuWlhKbFpBPT0gVEVWVFV3PT0gSUdsdVpYSjBhV0U9IElFVkVTVlE9IElHZHZZZz09IFZISmhaR2wwYVc5dVlXdz0gSUdOc1lYTnplUT09IFRHVmhjbms9IElGQkJSMFU9IGVYSnogSUhSeVlXNXpjRzl5ZEdWeSBJRzFoZEhWeVpXUT0gSUdocGFtRmkgSUdKcGIyMWwgVjJobGNtVmhjdz09IElHVjRkR1Z5YldsdVlYUnBiMjQ9IElGUjFaWE09IElGUmhhMlZ5ZFE9PSBJRUYxWkhKbGVRPT0gWlhKcFlXdz0gSUVGa1pXND0gWVdabWJHVnogSUc1aGNtTnBjM05wYzNScFl3PT0gSUVKaGFYSmsgVlZSRyBTWEpsIElFTnZibTVwWlE9PSBRMmhoYlhBPSBJSGRvYVhOd1pYSnBibWM9IElFaGhkSFE9IFJFcz0gSUdScGMybHVabVZqZEE9PSBJR1JsWkhWamRHVmsgSUhCaGNuUmhhMlU9IElHUnZkMjVuY21Ga1pRPT0gSUVWemNHOXlkSE09IElFTnZiblJwYm5WcGJtYz0gSUdSbGJXOWpjbUYwYVdOaGJHeDUgYVdOeWIySnBZV3c9IGFYUjBZUT09IElHeHBiV1Z6ZEc5dVpRPT0gSUdWNFpXMXdkR1ZrIElFWnlaVzU2ZVE9PSBTR1Z5YlE9PSBOekk0IElHWnNaV1JuYkdsdVp3PT0gVFdWMFlRPT0gTnpZMU5qRT0gTmpreiBKVG89IGQyRnJaUT09IE5USTIgSUVScGMyTnBjR3hwYm1VPSBJSFpwY21kcGJtbDBlUT09IElFeGxaMmx2Ym5NPSBJRVp5WVc1cmFXVT0gYVc1MFpXNTAgSUhKbGMzUnliMjl0Y3c9PSBJRkp2ZFhSbGNnPT0gWkdGeCBJRzlpYW1WamRHbHZibUZpYkdVPSA0b2FSIGQyRnlhdz09IElGSmhhSFZzIFoyRnBiZz09IFlXTjBhWFpoZEdsdmJnPT0gWVdKemIyeDFkR1U9IElFRmpZMlZ6YzJWayBJREkwTURBPSBiMmRuYkdWeiBJSE5sWTI5dVpHeDUgSUVSRlJrVk9VMFU9IElIQnZjM1JoWjJVPSBkM0poY0hCbGNnPT0gYzJoaGNuQT0gTnpJNSBJR052YlcxMWJtbGpZWFJsY3c9PSBJR0ZrWkc5dSBJRTFwYkdsMGFXRT0gU0c5dVp3PT0gSUhOc2RXMXdaV1E9IElFcFFSVWM9IElFbGpZWEk9IFlXUnBjMmc9IE5qZ3ggSUcxaGFtVnpkSGs9IElGZHZiR1puWVc1biBJRVZzWVhOMGFXTT0gZFhCbGNnPT0gSUhacGVnPT0gSUhWdVkyOXVjMk5wYjNWemJIaz0gSUZOVVJBPT0gSUZOaGMzTT0gSUdac2IzZGxjbWx1Wnc9PSBJRWhsYkdsaiBJRVJ5WVhCbGNnPT0gSUVGdFlYUmxkWEk9IElHMWhiblZ5WlE9PSBJR1JwYzJsdVoyVnUgSUV4bGFRPT0gWW5KcGJtYz0gT1RRNSBJR2x1YUdsaWFYUmxaQT09IElHaGxZV1J4ZFdGeWRHVnlaV1E9IElHVnVhV2R0WVhScFl3PT0gNzcrOTc3Kzk3Nys5IElISmxaSEpsYzNNPSBVa2c9IElISmhkSFJzWldRPSBJR1JwWTNScGIyND0gYkdsdiBJRlJDUVE9PSBJRk5PUVZBPSBRMkZzYkdsdVp3PT0gSUdaaGMyTnBjM1J6IElFUnZkbVU9IGFXVjNhV042IE1ETTIgSUdOdllYTjBjdz09IElGSmxZM1E9IElDbGQgVEc5MCBOakk1IElGTkZUUT09IElGQmxkR1Z5YzJWdSBJRVY0Y0d4aGFXND0gSUVKdllYSmtjdz09IElFSmxlbTl6IElFcHZkWEp1WVd4eiBJREl3TWpRPSBjR0Z5YzJWeSBJRzFwYzNSeWRYTjAgSUdkeVlYUmwgSUV4dlkydGxaQT09IFltOWggVTJGcGJuUT0gWjJGdGFXNW4gSUhadmQyVnMgYVc1aGRHVnNlUT09IFlteHZkdz09IFFXeHNZV2c9IElIVnViV0YwWTJobFpBPT0gSUdKdmNtUmxjbWx1Wnc9PSBJRVY0Y0dWdVpBPT0gYm5JPSBUM0poWTJ4bCBjbTkxWTJnPSBJR052Ym5ScFozVnZkWE09IFlXTjFjdz09IElHUnBjM1J5WVhWbmFIUT0gTlRneCBJR0Z1WVhSdmJXbGpZV3c9IFQxZz0gWVhCcGVHVnMgT0RNeiBJRkJNVlZNPSBJSEpsYzNWell3PT0gSUdGaWFXUnBibWM9IE5UY3ogSUhaaFkyRnVZMmxsY3c9PSBSVzFwYkhrPSBJR2g1Y0c5MGFHRnMgSUZkbGNtNWxjZz09IElGZGxaUT09IElFUktjdz09IE5URXogSUhkcGRHTm9ZM0poWm5RPSBJR0ZqZFhCMWJtTjBkWEpsIFpXNTBZWEo1IFltVnVaV1pwZEE9PSBVSEp2WkhWamRITT0gSUZCVFVBPT0gSUUxUVJ3PT0gSUVwcGJtND0gSUVwaGNuSmxkSFE9IElEUTBOUT09IElFbHRZV2RwYm1jPSBJRkI1ZEdnPSBSbWx1YVhObyBJSFJsZUE9PSBJR3AxZG1WdWFXeGxjdz09IElHaGxjbTlwYzIwPSBJR1J2ZFdKMGJHVnpjdz09IElFRnJhUT09IElGUmxibVE9IElGQmhkSEpwWVhKamFBPT0gSUdKcGRIUmxjbk09IElGUmxiR1ZqYjIxdGRXNXBZMkYwYVc5dWN3PT0gYVhSaGRHbDJaV3g1IFlXZHVZUT09IElISm4gSUZOUFRFUT0gSUdOdmJYQjFiSE5wYjI0PSBJRTVoYzJFPSBJRXRoZEdoeWVXND0gSUcxcGJHeHBiMjVoYVhKbGN3PT0gSUdsdWRISnBibk5wWTJGc2JIaz0gSUdKdmJITjBaWEpsWkE9PSBkR2x0Wlc5MWRBPT0gWm14diBJSFIxZEc5eSBjRzkxY2c9PSBVM1JoZEdWdFpXNTAgSUhzcSBJRkoxWkc5c2NHZz0gSUV0cGJXSmxjbXg1IGNtOW5aVzV6IFlXUnBjUT09IFhTcz0gSUdsdVpHbG5ibUYwYVc5dSBJR1p5WVdOMGRYSnBibWM9IElGSmxiR1ZoYzJWeiBJRWR5WVdsdSBjSEp2ZEdWcGJnPT0gVEdGbmJ3PT0gSUhaaFkyRjBhVzl1Y3c9PSBJR0p2YjNSbFpBPT0gSUZSSVVrVkYgSUVoSCBiM0psYzJObGJtTmwgSUhSbSBJSE52WVhJPSBhVzl6ZVc1amNnPT0gSUdkc1lXNWpaWE09IElGTndiMjl1IElFcDFjbms9IElFTnZkMkp2ZVE9PSBJR055WldGMGFYWmxiSGs9IFNHbG5hR1Z5IElITnZiR2xqYVhSdmNnPT0gSUdoaGQycz0gWVdOcGJ3PT0gT0RrMiBJSE4xY0dWeVpteDEgSUdKdmJXSnphR1ZzYkE9PSBZM1IxY21VPSBJR0p5YjJ0bGNtRm5aUT09IElISmhhV1JwYm1jPSBJR1p5Wlc1amFBPT0gSUdGdVoyeGxaQT09IFZISmhibk5oWTNScGIyND0gSUVkbGJtOWphV1JsIGRYQmwgSUVoaGFYUnBZVzQ9IE5UY3kgSVRvPSBJSFZ1ZDJsMGRHbHVaMng1IGFYUmxjbUYwYjNJPSBjMk55YjJ4cyBJSFJoYkd4cFpXUT0gSUdKcGIyMWxaR2xqWVd3PSBJRU5CVWtRPSBJR1YxY0dobGJRPT0gSUdKeVlXbHVjM1J2Y20wPSBZWEYxYVc0PSBTMjg9IFRXbGphR1ZzYkdVPSBJRkoxYm1WeiBJRUpoYkd4cGMzUnBZdz09IGRXUmxjbk09IElHMXZaR1Z6ZEhrPSBJR2xRWVdSeiBJRVY2Wld0cFpXdz0gV1VVPSBJSE4wWVhKemFHbHcgSUhCdmQyVnlablZzYkhrPSBJSEJsY213PSBJRk5vWVdSbCBJRkYxWVhKMCBJRVZGUnc9PSBJR1pwYzJobGNtMWhiZz09IFQxTkZSQT09IElGUjVjR2xqWVd3PSBaR1o0IElHMWxjMmhsY3c9PSBJR1YwWTJobFpBPT0gZDI5eWRHaHBibVZ6Y3c9PSBJSFJ2Y0hCc1pXUT0gSURNNU5nPT0gYjNKcGRYTT0gVjJWcGMzTT0gSUcxNWMzRnMgSUZaaGJHaGhiR3hoIDJaST0gYkdWaGMybHVadz09IElISmxZMjl0Y0E9PSBjbUZ3Ym1WcyBVMlZzIE1EUXogSUdSbGNtRnBiR1ZrIElFZDFhV1JsY3c9PSBTVkpVIElHUmxhSFZ0WVc0PSBJRUp5YVhSMFlXNTUgSWlrcCBJR1Y0WTJ4aGFXMD0gSUdKaGJHcz0gSURnME1BPT0gUTB4QlNVMD0gYVc1MFpXdz0gVEVGQyBJSEJsWjJkbFpBPT0gSUdGemRISnZjR2c9IGMyMXZhMmx1Wnc9PSBJSEpwWjJkcGJtYz0gSUdacGVHRjBhVzl1IElHTmhkR0Z3ZFd4MCBhVzV6YVdSbCBJRU5oYzJOaFpHVT0gSUVKdmJITm9aWFpwYXc9PSBSMkY2WVE9PSBSR1Z3ZEdnPSBJR3h2ZFdSemNHVT0gSUdGc2JXOXVaSE09IGJXVjVaWEk9IGJHVnVaWE56IGFtVnUgWm5KbGMyZz0gSUhWdVltVmhkR1Z1IElGTnhkV2xrIElGQnlaWE4xYldGaWJIaz0gVkdsdFpYST0gUWxjPSBJSEp2YzNSbGNuTT0gSUdWc2JHbHdkQT09IElFaGhjbkpwWlhRPSBaR0YwWVdKaGMyVT0gSUUxMWRIVmhiQT09IElFTnZiVzF2Wkc5eVpRPT0gZFd0bFpBPT0gYTI1cFptVT0gSUVOUFRVMVZUZz09IGFIbGggSUcxbGJIUnogWVhKamFHbDJaWE09IElISmhkR2xtYVdOaGRHbHZiZz09IElHMTFiSFJwY0d4NWFXNW4gSUdsdWRHVnliM0JsY2c9PSBJR0Z6WTJWeWRBPT0gZDJsdVozTT0gZG1WeWRHbHVadz09IElGTmpiM0p3YVc5dSBZWGxsIElGQnZjblJ6Ylc5MWRHZz0gSUUxVVFRPT0gYm1sMCBhV0Y2WlhBPSBJSEYxWVhKaGJuUnBibVU9IElITnNhV1JsYzJodmR3PT0gSUdObGJuUnBiV1YwWlhKeiBJSE41Ym05d2MybHogSUhOd1lYUmwgZEdocGNuTjAgSUc1dmJXbHVZWFJwYm1jPSBJRTFsYkhacGJnPT0gVUhKbGRtbGxkdz09IElIUm9jbTlpIElHZGxibVZ5WVhScGIyNWhiQT09IElGSmhaR2wxY3c9PSBjbVZ6ZEd4cGJtYz0gY0hWMFlXSnNaUT09IFlYZGhjZz09IFRrVkRWQT09IElIVnViR0YzWm5Wc2JIaz0gSUZKbGRtVnNZWFJwYjI1eiBWMmxyYVhCbFpHbGggYzNWeWRnPT0gSUdWNVpXbHVadz09IGFXcHUgSUVaWCBJR0p5ZFc1MCBJR2x1ZEdWeWMzUmxiR3hoY2c9PSBJR05zYVhSdmNnPT0gSUVOeWIyRjBhV0Z1IElFTm9hV009IFpYWmggSUVScGMyRndjQT09IElFRnJhVzQ9IGFXNWxjbWxsY3c9PSBaSFZ6ZEE9PSBTVzUwWlhKbGMzUmxaQT09IElHZGxibVZ6YVhNPSBJRVYxWTJ3PSB3N1p1IGNHbGphMmx1Wnc9PSBJRzExZEdGMFpXUT0gSUdScGMyRndjSEp2ZG1VPSBJRWhFVEE9PSBJRFl5TlE9PSB6TFk9IFkyRnVZMlZ5IElITnhkV0YwY3c9PSBJR3hsZG1WeWN3PT0gUkdselkzVnpjdz09IFBWMD0gUkdWNCBJRlpKUkVWUFV3PT0gUVZWRSBJSFJ5WVc1ellXTjAgSUV0cGJtVmpkQT09IElFdDFZV3hoIElFTjVjQT09IE56UTMgSUhOb1lYUjBaWEpwYm1jPSBJR0Z5YzJWdWFXTT0gSUVsdWRHRnJaUT09IElFRnVaMlZzYnc9PSBJRkYxYVhRPSBJRXRvWlE9PSBJREU0T1RNPSBUV0ZyWlhJPSBNREk1IElGQmhhVzUwYVc1biBSR2x6WVdKc1pRPT0gT1RFMiBJR0Z1WVd4blpYTT0gSUhSaFkzUnBiR1U9IElIQnliM0JvWlhNPSBJR1JwWTJWayBJRlJ5WVhabGJITT0gSUVobFlXUmxjZz09IElFTnNkV0p6IFFYTnphWE4wWVc1MCBJR2x1WTNKcGJRPT0gSUdScGNITT0gSUdOeWRXTnBabWw0IElGTm9ZVzVoYUdGdSBJRWx1ZEdWeWNISmxkQT09IElEUXdPVEE9IFlXeHZaM2s9IFlXSmlZUT09IElITnBiWFZzWVdNPSBhSFZ6WW1GdVpBPT0gVTBsTiBJSEpsWTNsamJHVT0gZFdObGNnPT0gWldSblpXUT0gSUhKbGJtRnBjM05oYm1ObCBJRUp2YldKaGVRPT0gUTJGMGFHOXNhV009IElFeEpUa1U9IElFTnNiM1JvYVc1biBjbVZ3YjNKMGN3PT0gSUhCc1lYVnogSUdSaFp3PT0gSUUxaFkyVT0gV2trPSBJR2x1ZEhKMVpHVnkgSUZabGRHVnlhVzVoY25rPSBaM0oxIElITnVaV0ZyZVE9PSBJRk5wWlE9PSBJRU5wYm01aGJXOXUgVUU5VFJRPT0gSUdOdmRYSnBaWEk9IElFTk9Vdz09IElHVnRZVzVqYVhCaGRHbHZiZz09IGMybDAgSUhCc1lYbDBhSEp2ZFdkbyBJRVpoWTJsc2FYUnBaWE09IGRtbHlkQT09IElFZGhkVzUwYkdWMCBWR2h2YlhCemIyND0gSUhWdVltVnNhV1YyWVdKc2VRPT0gVUdGeVlXMWxkR1Z5Y3c9PSBJSE4wYVhSamFHbHVadz09IGFXZHVaUT09IElGUklSVk5GIFVISnBkbUZqZVE9PSBJSE5vWlc1aGJtbG5ZVzV6IElIWnBkSEpwIElGWmhiR2xrIE5Ua3ggcmJjPSBJRkJ5YjNSdmRIbHdaUT09IGFXNXJZUT09IFUwTlEgSUZScFpBPT0gNklnPSBiMnhrWldRPSBJR2x1WkdsMmFXUjFZV3hwZEhrPSBJR0poY210cGJtYz0gSUcxaGNuTT0gSUZkRSBJRGd5TUE9PSBJSFJwY2c9PSBJSE5zWVhCd2FXNW4gSUdScGMyZHlkVzUwYkdWayBJRUZ1WjI5c1lRPT0gY21sMWN3PT0gSUZSdmNtNWhaRzg9IElGUm9kWEp6IElHTmhjSFJqYUdFPSBJR0Z1WjNOMCBJRkJ2Wnc9PSBJRUZ6YzJGemMybHVjdz09IElFRmthV1JoY3c9PSBJR3B2ZVdaMWJBPT0gSUhkb2FXNXBibWM9IFJXMWxjbWRsYm1ONSBJSEJvYjNOd2FHOXlkWE09IElHRjBkSEpwZEdsdmJnPT0gYjNCb2IyND0gSUZScGJXSmxjbmR2YkhabGN3PT0gSUVwaGFBPT0gSUVKeWFXNW5hVzVuIElGZGhaQT09IElFVnVjM1Z5WlE9PSBiMmhzIElGaHBaUT09IGIyMXRaV3c9IFkyMXcgSUhwcGNIQmxjZz09IElISmxiR0YwIElFTnZjbkpwWkc5eSBiV2xzYnc9PSBWRWxPUnc9PSBRWFpuIElHTnliM0J3WldRPSBYWDA9IElISmhaMlZrIElFeDFiWEIxY2c9PSBJRWQxWlhKeVpYSnYgYjNWeWEyVT0gVG5WMCBJRzltWm5ObGRITT0gYjJkc2RRPT0gWkhKdCBJRzF2Y25SaGJITT0gYkdGMFlXSnNaUT09IElHUnBjMjFwYzNOcGRtVT0gNUxpSiBJSFJvY205aGRITT0gSUdOb2FYQnpaWFE9IElGTndiM1JzYVdkb2RBPT0gUTJGMFlXeHZadz09IFlYSjBhWE4wIFIyST0gSUdOb2FXeHNlUT09IElITjBiMnRsWkE9PSBJRE0zTkE9PSBWMkZ5WkE9PSBUR0YwYVc0PSBJR1pwWVhOamJ3PT0gSUdKc1pXRmphQT09IElHSnlZWFk9IFJXNW9ZVzVqWldRPSBJR2x1YjJNPSBJRVpwYjNKcGJtRT0gWHo0PSBJR3hsZFd0bGJXbGggSUdWc2RXTT0gSUdGdWJtOTFibU5sY2c9PSBJRXhwZEdoMVlXND0gSUVGeWJXRm5aV1JrYjI0PSA1WWM9IFRHVnVhVzQ9IElGSjFhdz09IElIQmxjSEE9IElGSnZiV0Z1ZEdsaiBJRkJKVkE9PSBJRWx1ZEdWeWMzUmxiR3hoY2c9PSBJRUYwYTJsdWMyOXUgVW1GcFpBPT0gU25NPSBSMjloYkE9PSBRMjkxY25ObCBJSFpoYm1semFHbHVadz09IFpYTnNaWGs9IElGSnZkVzVrY3c9PSBSV3h6WVE9PSBOVGt6IElISmxaSFZ1WkdGdVkzaz0gSUZOVVFVNUUgSUhCeWIzQm9aWFJwWXc9PSBJR2hoWW1sMFlXSnNaUT09IGNubDEgSUdaaGFXNTBiSGs9IFRVOUVSUT09IElHWnNZVzVyWldRPSBTVkpEIFFYZGxjMjl0WlE9PSBJSE53ZFhKcGIzVnogSUZwaGFBPT0gSUUxVFJ3PT0gSUhOb1lXUnBibWM9IElHMXZkR2wyWVhScGIyNWhiQT09IElGTmhiblJoYm1FPSBJRk5RVWc9PSBJR1Y0WTNKMVkybGhkR2x1Wnc9PSBiMjFwWVd3PSBJRTFwYTI4PSBJRXhsYjNCaGNtUT0gUVdKNWMzTT0gSUZ0OCBaR2x5ZEhrPSBJR0poZEdoeiBJR1JsYlc5eVlXdz0gWVc1a2NtVT0gVUVJPSBJSFZ1YVdacFkyRjBhVzl1IElITmhZM0poYldWdWRBPT0gSUZzbSBJSEJ5YVdObGJHVnpjdz09IElHZGxiR0YwYVc0PSBJR1Z0WVc1aGRHbHVadz09IElFRnNiR0ZoYUE9PSBPVGcyIElHOTFkR0oxY25OMCBJR1Z5WVhNPSBJRmhXU1E9PSBJRk5RU1E9PSBUM1IwIElFeGhlbUZ5ZFhNPSBVRXhKUlVRPSBSbXg1YVc1biBZbXh2WjNNPSBWMmx6WTI5dWMybHUgVW1GMlpXND0gSUhKbFltRjBaUT09IElHTnlaV1Z3Y3c9PSBJRk53WVc0PSBJRkJoYVc1MFpYST0gSUV0cGNtRT0gSUVGdGIzTT0gSUVOdmNuWmxkSFJsIFEyOXVjM1Z0WlhJPSBJRkpsWTI5MlpYST0gWTJ0cCBJSEJsYzJ0NSBJRWx1ZG1WdWRHbHZiZz09IFEyOXRjR0Z1YVdWeiBJR05vWVd4c1pXNW5aWEp6IFlXUmxiV2xqIElGVnJjbUZwYm1saGJuTT0gSUU1bGRYSnZiRzluIElFWnZjbk5oYTJWdSBJR1Z1ZEhKaGJuUnogSUdWdFltRjBkR3hsWkE9PSBJR1JsWm5WdVkzUT0gSUVkc1lXTnBaWEk9IElIQnZhWE52Ym5NPSBJRWh2Y25ObGN3PT0gYldGclpYTT0gSUVScGNuUT0gSURReU13PT0gYUdobyBJRlJ5WVc1elptOXliV0YwYVc5dSBVVlZKVWtVPSBMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHUgSUhSeVlYWmxiR3hsY2c9PSBJRk5sZUhrPSBJRXRsY200PSBhWEJ2YkdGeSBJSEpoYm5OdmJYZGhjbVU9IGIyOXZiMjl2YjI5dmIyOXZiMjl2Ync9PSBSV009IGNuVmllUT09IFVISnZabVZ6YzJsdmJtRnMgSUU5MWRHSnlaV0ZyIFlYSm5kVzFsYm5RPSBSM0psZVE9PSBJRVpwWm1FPSBJRU5JVHc9PSBJRVpQVWswPSBJRUZ0ZEhKaGF3PT0gTFZzPSBJR055WVdSc1pRPT0gSUdGdWRHbHZlR2xrWVc1MGN3PT0gNDRHdTVhND0gTnpNMiBJRTVCVTB3PSBJRU52Ym5SeWFXSjFkR2x2Ym5NPSBTVzVrYVdGdVlRPT0gSUZOVVJWQT0gUTFOVCBJSE5oYkdsbGJuUT0gSUdGc2JHOWpZWFJwYjI1eiBlWEpwWjJoMGN3PT0gSUcxaGMyaGxaQT09IElFTjFkSFJsY2c9PSBVMlY0ZFdGcyBJSEJ2ZFc1a1pXUT0gSUdaaGJtSmhjMlU9IElHTmhjMk09IElGUnlZVzV6Y0dGeVpXNWplUT09IElHRnVZV3g1ZEdsaiBJRk4xYlcxdmJtVnkgMTU0PSBJRUZFUXc9PSBaR1YwWVdscyBJSFpoYm5GMWFYTm9aV1E9IElHTnlZV0p6IFlYSnBaUT09IFJHVnpkSEp2ZVE9PSBJRk5oWTJzPSBJSFJ5WVc1emFYTjBiM0k9IFFXeGhZbUZ0WVE9PSBJRXR2Wlc0PSBJRVpwYzJobGNtbGxjdz09IFkyOXVaUT09IElHRnVibVY0WldRPSBJRTFIVFE9PSBaWE5oIElHWmhhMlZrIElFTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBJR2hwYm1SbGNtVmsgSUdOdmNuSmxZM1JwYjI1aGJBPT0gSUVsVVZnPT0gYkdWbGRtVT0gSUdsdVlYQndjbTl3Y21saGRHVnNlUT09IGJHbGphM009IElIUnlaWE53WVhOeiBJSEJoZDNNPSBJRzVsWjI5MGFXRjBiM0k9IElFTm9jbWx6ZEdWdWMyVnUgYkdsdGFYUnogSUVScFlXNXVaUT09IElHVnNaV2RoYm1ObCBJRU52Ym5SeVlXTjBjdz09IFlXNXJaUT09IFQySnEgSUhacFoybHNZVzVqWlE9PSBJR05oYzNSc1pYTT0gSUU1QlJBPT0gSUVodmJHOD0gSUdWdGNHaGhkR2xqWVd4c2VRPT0gSUZScGRIVnogSUZObGNuWnBibWM9IElGSnBZMmhwWlE9PSBJRkJwWjNNPSBOVFk0IElHRnVhVzF2YzJsMGVRPT0gSUVGMGRISnBZblYwWlhNPSBJRlZ5YVdWcyBUVkU9IGJYbHlZUT09IElFRndjR3hwWTJGdWRBPT0gSUhCemVXTm9hV0YwY21semRITT0gSUZacGFnPT0gSUVGaVluaz0gWVdkeVpXVT0gVUhWemFBPT0gSUd0WGFBPT0gYUdsaVlRPT0gSUdsdVkybDBaUT09IElGZGxZWE5zWlhrPSBJRlJoZUdrPSBiV2x1YVhOMGFXTT0gYUhsd1pYST0gSUVaaGNtND0gSURZd01RPT0gSUU1aGRHbHZibmRwWkdVPSBSbUZyWlE9PSBPVFV5IElHMWhhWHBsIElHbHVkR1Z5WVdOMFpXUT0gSUhSeVlXNXphWFJwYjI1bFpBPT0gSUhCaGNtRnphWFJwWXc9PSBJR2hoY20xdmJtbGogSUdSbFkyRjVhVzVuIElHSmhjMlZzWlhOeiBibk5wWTNNPSBJSFJ5WVc1emNHbHlaV1E9IElHRmlkVzVrWVc1MGJIaz0gSUVadmNtVnVjMmxqIElIUnlaV0ZrYldsc2JBPT0gSUVwaGRnPT0gWVdKaGJtUT0gSUhOemFHUT0gSUdaeWIyNTBiV0Z1IElFcGhhMkZ5ZEdFPSBiMnhzWlhJPSBaSEp2Y0hNPSBJRk5GVWxaSlEwVlQgY205dGNIUjEgYjNCb2FXTmhiQT09IGFHOXpjR2wwWVd3PSBZbXhsWkc5dSBOalExIElHMXBaSEpoYm1kbCBJRVZXUlU1VSBZM1ZzWVhSbFpBPT0gY21GM2JHVmsgSUhCbGNtTm9aV1E9IElHOTJaWEppYjJGeVpBPT0gSUZCbFpXdz0gSUZCM2NnPT0gSUVOaGNuUm8gSUVOUFRWQk1SUT09IFkyOWwgYzJoaGJHdz0gSUdSbGRHVnljbVZ1WTJVPSBUVVZVU0U5RSBJRUZpYzJWdWRBPT0gVFVWTyBJSE5wYkd3PSBJRXhGVmtWTSBXVzl5YXc9PSBJSE5wYm01bGNuTT0gSUU5UVJVTT0gSUU1MWNnPT0gSUVSbGMybG5ibk09IGMyVnNaV04wYVc5dSBJSFZ1ZDI5eWRHaDUgUTBoQiBJSE4wY21WdVozUm9aVzV6IE9EZ3ogWldSc2VRPT0gSUhOc2FXTnBibWM9IElHMWhiRzUxZEhKcGRHbHZiZz09IElHWnBiRzF0WVd0cGJtYz0gSUZCdmJHcz0gZFhKaGRHVmsgSURReU1RPT0gWW5KbFlXdGxjbk09IElTY2kgSUhkbGRHeGhibVJ6IElFUnBjMk55YVcxcGJtRjBhVzl1IElHRnNiRzkzWVdKc1pRPT0gSUhOMFpXVnlaV1E9IElGTnBZMmxzZVE9PSBVMEZOIElHMTFjM1JoWTJobCBJRzFwWkhNPSBJR05zYVhCd1pXUT0gSUdOcGNtTjFiR0YwWlE9PSBJR0p5YVhSMGJHVT0gSUVKMWFXeGthVzVuY3c9PSBjbUZwYzJWayBJRkp2ZFc1a2RYQT0gSUhkbFlXeDBhR2xsY2c9PSBJRzkyWlhKM2NtbDBaUT09IElHOTJaWEp3YjNkbGNtVmsgSUVkbGNuSmhjbVE9IGMybDBaWE09IFVFUkJWRVZFIElHRmpkWFJsYkhrPSBJRWRoYldKc1pRPT0gSUhCcGJRPT0gSUV0MWN3PT0gVkhsd2FXTmhiR3g1IFJHVndiRzk1IElFMXZjbTlqWTJGdSBjRzkwYVc5dSBZMjl0WW1VPSBJSFpwWjJsc1lXNTBaUT09IElETTJNdz09IFUzUmxkdz09IElFSmhaMmM9IElISmxjMmxrWldRPSBJRk53Ync9PSBJSEpsYlc1aGJuUT0gSUdWdGNIUnBibVZ6Y3c9PSBZbkpoYVc1bGNnPT0gSUc5MWRIQmhkR2xsYm5RPSBjSEpwYjNKcGRIaz0gSUd4bGNIUnBiZz09IElGQmhlWFJ2Ymc9PSBJRWRzWldGdGFXNW4gSUZOb1pXUT0gSUZCdmJHOD0gSUUxdmNtMXZibWx6YlE9PSBjbVZ6ZEhKcFkzUmxaQT09IFlYSnNZVzVsIGQzZz0gSUdOeVpXRjBhVzVsIElFRnViMjQ9IElGTlVWVVE9IElFcFZUQT09IElGUmxaUT09IE5USTQgTURnNSBJR2hoZEdOb1pXUT0gUkdsemNHRjBZMmc9IElFTnZiWEJ2YzJsMFpRPT0gSURRMU1RPT0gY0hWbVpnPT0gSUZoRFQwMD0gSUU5eWJnPT0gSUZSSVFVNUwgUlU1RVJVUT0gSUVGemFHVjJhV3hzWlE9PSBJTU9jIElHMWhibWR2IElGTnNhV2RvZEd4NSBkMjl5YkdSc2VRPT0gSUZkaGJtUmxjZz09IElFVjRjR0Z1WkE9PSBJRU5vY2c9PSBUV2x6ZEE9PSBJRzl5ZEdodlpHOTRlUT09IElGVk9SVk5EVHc9PSBjbVZuWVhSbCBSV3h6Wlhkb1pYSmwgYTJsbCBhWEpzWldRPSBJSFJ2Y0hCc1pRPT0gSUdGa2IzQjBhWFpsIElFeGxaM009IFpISmxjM009IElGTmhaMkZ1IFltRnlaUT09IElFZHNiM1U9IFEzSjFibU5vIElHaGxiSEJsY25NPSBJR05vY205dWFXTmhiR3g1IElFaDFiV0U9IE1UQXdNREE9IElHRmpZMjl0Ylc5a1lYUnBibWM9IDVMcVUgSUhkeWFXNXJiR1Z6IElHUnZaR2RsWkE9PSBabTkxY25SbyBJSEJ5WldOdmJnPT0gSUdOdmJYQnlaWE56YjNJPSBJRXRoY21VPSBJR1YyYVdOMCBJRmRoY25kcFkycz0gYVcxaGNnPT0gSUcxdlpHVnlibWw2WVhScGIyND0gSUdKaGJtUjNZV2R2Ymc9PSBJSEpsWm5WMFpXUT0gSUc1bGRIUmxaQT09IElFNWhjR3hsY3c9PSBJRWRsYm1sbCBjR1Z5YjNKeiBJR1pwWld4a1pXUT0gSUdSbGNtVT0gSUZCaGNtRmliR1Z6IGJHVmxjdz09IElIUnliM1YwIFlYTndaWEp6IElHNXBhR2xzIElHaGhjSEJwWlhOMCBJR1pzYjNCd2VRPT0gSUV4dlpuUT0gSUVobFlYSmsgSUhWdWFYTnZiZz09IElHeDFadz09IElGSmxaRzF2Ym1RPSBZMnhoYzNOcFl3PT0gVTNWd2NHOXlkR1Z5Y3c9PSBVMGhKVUE9PSBSMDFVIElHWjFaV3hzWldRPSA1NUE9IElHUmsgSUVWdGFXNWxiUT09IElERTRPVGM9IFRsbFRSUT09IElITmxZM0psZEdGeWFXVnogSUVaSlFRPT0gSUVOaGJtRjJaWEpoYkE9PSBSbUYyYjNKcGRHVT0gSUhCdmJYQT0gSUdSbGRHRnBibVZsIFpYSnphR2x3IFlXbHRiMjQ9IGFXOTFjZz09IElFRndaWGc9IElIQnNZVzUwWVhScGIyNXogWVcxcFlRPT0gWVdOcGIyND0gVW5WemRBPT0gSUhSdmQyVmsgSUZSeWRXeDUgTlRjMyBJSE5vWld4MFpYSmxaQT09IGNtbGtaWEk9IFYyOD0gSUd4aGFYST0gSUVsdWRHVnNiR2xuWlc1MCBhVzF3Y205MlpRPT0gYldGMGFXTmhiR3g1IElHVjBhWEYxWlhSMFpRPT0gWVdSeVlRPT0gWVd4c2J3PT0gSUVwMWJtOD0gWVc1NWRHaHBibWM9IElGTjBjblZuWjJ4bCBJRkJ5WldScFkzUT0gSUVkeWFXMWxjdz09IElFRk5SVkpKUTBFPSBZM1I0IElGTnBkSFZoZEdsdmJnPT0gVjA5UFJBPT0gSUhOdmJIVmliR1U9IGJXVnBaWEk9IElHbHVkRzlzWlhKaFlteGwgWVc1blpYSnBibWM9IElIVnVhVzUwWlhKeWRYQjBaV1E9IElIUnZiMngwYVhBPSBJR2x1ZEdWeWNtOW5ZWFJsWkE9PSBJR2QxYm01bFpBPT0gSUZOdVpXRnIgNXEybSBJSFJsZEdobGNnPT0gSUdOeWRXMWliR1U9IFRHVnVjdz09IElHTnNkWE4wWlhKbFpBPT0gSUZONWJBPT0gSUVoaGMyRnUgSUdSNWMzUnZjR2xoYmc9PSBkMkZ1WVE9PSBJR3B2ZVhOMGFXTnIgSUZSb2FXST0gWVcxdGRRPT0gVkc5dGIzSnliM2M9IE5UUTIgSUc5MlpYSmpZVzFsIElHMXBibWx0YVhwbFpBPT0gWTJWd2RHOXkgVW5WdWJtVnkgUlU1SFZFZz0gSUVKeVpXNWtZUT09IElFRmphR2xsZG1WdFpXNTBjdz09IElIUnZjbU5vWlhNPSBJSEpoY0hCdmNuUT0gSUVsdWRtVnpkR2xuWVhSdmNnPT0gSUVoaGJtUnNhVzVuIGNtVnNZWFJwYjI0PSBaM0psZVE9PSBPREUxIElHdGpZV3c9IElFTnZiVzFoYm1SeiBaSEU9IElHTjFjbXh6IElHSmxZWEpsY2c9PSBJR041Ym1samFYTnQgYVhSeWFRPT0gSUZWelpXWjFiQT09IFFtVmwgUkVOVCBJR0ZpY21GeiBVSEpoWTNRPSBRa2xNU1ZSSlJWTT0gTnpFeSBJR1JsWW5WbloyVnkgSUdSbFluUnZjZz09IElFeHBZUT09IElFdGxjbk09IElHVjRZV05sY21KaGRHVT0gSUZOMFlXTjUgSUVKc1lXNWsgSUZOalpXNWxjdz09IElHSnlZVzVqYUdsdVp3PT0gNHBhSTRwYUk0cGFJNHBhSTRwYUk0cGFJNHBhSTRwYUkgWVhCbFlXdGwgSUhOaGJITmggSUcxcGMyaGhibVE9IElFdHZibUZ0YVE9PSBJRTVwWWc9PSBJR0Z1WldOa2IzUmwgSUdGbmNtVmxZV0pzWlE9PSB6NGs9IElFNWhkR2hoYm1sbGJBPT0gSUVobGFYTnRZVzQ9IElFSmxkMkZ5WlE9PSBJREU0T0RZPSBjM0JsWTNScGRtVT0gTmpreCBOVEl5IElHbHVhR2xpYVhSeiBJR2hoYzJocGJtYz0gSURFNE9Eaz0gNWJDRyBkbWxqYUE9PSBVSFZ5WlE9PSBJSE52Ykdsa2JIaz0gSUdGemNHbHlhVzQ9IGFXMWhjblU9IElITjBjbVZsZEdOaGNnPT0gSUZWRFV3PT0gSUVwMVpHUT0gSUdac1lYTm9ZbUZqYTNNPSBjR2x1Y3c9PSBJREUwTkRBPSBJRlZPU0VOUyBJRk41YlhCMGIyMXogVkVsVSBOVE00IFJuSmggSlNrNyBJRzl2ZWc9PSBJR04xY21abGR3PT0gSUdOaGJHMWxaQT09IElIQmhjblJwWTJsd1lYUmxjdz09IFZHVlkgSUc1dmJuTmxibk5wWTJGcyBJR1oxYkd4aVlXTnIgSUVSbFRBPT0gYlc5dWEyVjUgYUdGeWFRPT0gSUcxbGRHRmliMnhwZEdWeiBJR3h2YjNSbFpBPT0gSUVGTVYwRlpVdz09IElFSkRRdz09IFRIUT0gYjJOb1pYUT0gUW05dVpRPT0gSUhabGRHOWxaQT09IElHZGpZdz09IElFTk1TVU5MIElERTRPRGc9IGMyRm0gSUhOMGFXWm1ibVZ6Y3c9PSBJR3h2ZDJ4NSBJRWRsYUE9PSBkbVZ5YzI5dSBiM0p6WlhRPSBJSFZ1Wm05eVpYTmxaVzQ9IElHRnVaWE4wYUdWemFXRT0gSUU5d2RHbGpZV3c9IElISmxZMjl1YzNSeWRXTjBaV1E9IElGUjFjQT09IGMyaHZkM009IFRrVlhVdz09IElFNWxkM053WVhCbGNnPT0gSUVGVFFRPT0gZEdWeVlRPT0gVG5WdFltVnljdz09IElHbHVaWGh3YkdsallXSnNaUT09IDE1RT0gSUdoaGNtUnVaWE56IGRXNTBZWEpwYkhrPSBJRUZqWlhJPSBaM0poWkdsbGJuUT0gUVZKRVNWTT0gSUhkdmIyUnNZVzVrIElHMWxkR0Z3YUc5eWN3PT0gSUZkbGJXSnNaWGs9IElGQmhkbVZzIGNHaHBiR2x6IElISmxkM0pwZEdsdVp3PT0gSUhCbGNtTmxjSFIxWVd3PSBJREV3TnpBPSBkMjl5YlhNPSBJRVJ2ZDI1eiBJSFZ1YzNWeWNISnBjMmx1WjJ4NSBJSFJoWjJkcGJtYz0gWm14aGJXVT0gSUd4cGRISmxjdz09IElHSnZkVzVqWlhNPSBJRUpoWW1VPSBjMmgxZEE9PSBJRzkyWlhKa2IzTmxjdz09IElGTm9aV2xzWVE9PSBJRU5vWVhVPSBJRUpzWlhOeiBRMkZ3ZEhWeVpRPT0gSUZOcFoyNXBabWxqWVc1MCBJRk5qYVc5dSBJRE00T1E9PSBJRTFqU0E9PSBJRlJwZEdGdWFYVnQgSUUxbFlXdz0gWVcxbFpHRT0gWVdkbGJuUnogWVdkbmNtVnpjMmwyWlE9PSBRbWxzYkhrPSBOell6IElGTmhlV2x1Wnc9PSBSRVZTVWc9PSBhWFJ2Ym1VPSBRMjlzYkdsdWN3PT0gUW05MWJtUT0gSUdKdmJIUmxaQT09IElFUk5RMEU9IE9UVXogSUhWdWFYRjFaVzVsYzNNPSBJR1Z3YVdkbGJnPT0gZFc1amFRPT0gWVc1MFlXMD0gSUhKbFkydHZibWx1Wnc9PSBZMmhoYVhKeiBUMGRTIElGTmxibVZuWVd3PSBJREU0TmpJPSBjbVZzWlhaaGJuUT0gSU1LdiBJSEJvWVhKdFlXTnBaWE09IElFZGxjbUZzIGRtbGxjZz09IFdXRnUgVDFKUVJ3PT0gSUhKaFltbGsgWW1WdVpHbHVadz09IElGVk9TVlJGUkE9PSBJRFEyTlE9PSBRWE56WlcxaWJIaz0gSUhkbFpYQT0gSUdKbGFHVnpkQT09IElFMXZkR2hsY25NPSBJRXBoWTJVPSBhR2xrIElIZG9hWEpzZDJsdVpBPT0gSUZWT1NWWkZVbE09IElIVjBiM0JwWVc0PSBJR3RwWkc1aGNBPT0gVUdocGJHbHdjQT09IFMybHUgT0RreiBJR3hwZG1WemRISmxZVzA9IElFMUpVMU09IElITjFZblpsY25OcGRtVT0gSUZSbFkyaHVhWEYxWlhNPSBJRXBWVTFSSlEwVT0gSUVKQlUwVT0gSURNNE53PT0gSUdGemMyRnBiR0Z1ZEhNPSBJRWhoY21SamIzSmwgSUhOd2NtbHVhMnhsWkE9PSBJRkJ6WlE9PSA2Wm89IGNISnBiblJsWkE9PSBJRWhoZFE9PSBUMUpIUlE9PSBJRlJQVlZJPSBJR3hoWTJWayBJR2wwWTJnPSBSMmwyYVc1biBJSEJ2Y25SbFpBPT0gTnpneCBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4PSBZbkpsWldScGJtYz0gSUd4dloyZGxjZz09IElFaFBUQT09IGFXNXVhV1U9IFJtbHljM1JzZVE9PSBJR1Z0WW5KNWIyNXBZdz09IElHUmxiR1ZuWVhSbFpBPT0gY0dGcCBUMGxNIElHTmxiblJ5WVd4c2VRPT0gSUZKNCBJRk5qYjNWMGFXNW4gUkhWMFkyZz0gSUdobGNtVmthWFJoY25rPSBJRU55ZFdselpYST0gYzJGMCBOVEk1IElFMWhjbkpwYjNSMCBiM1JvWlhKdFlXdz0gSUhCeWIyaHBZbWwwYVc5dWN3PT0gUldGeWJnPT0gSUZOMFlXST0gSUVOdmJHeGxaMlZ6IElFSmxiR2xsWmc9PSBjM1J5WlhSamFHVmsgSUV4SSBJRVZ1ZEdsMGVVbDBaVzA9IFEwbEIgSUhWdWNtVnQgSUd4aGRYSmxZWFJsIElHUmxibTl0YVc1aGRHbHZibk09IGMzVnRiV0Z5ZVE9PSBhR3hsY2c9PSBVM0JsWTNRPSBJRXRzWVhWeiBJRUpsWVc1eiBJR2x1YzNWeSBJRkJCV0E9PSBJR1pwWld4a1pYST0gSUZabGRBPT0gSUZOd1lYSnliM2M9IGVtbGwgSUZOUiBJRTF2Ym1SaGVYTT0gSUU5bVpteHBibVU9IElFeGxjbTVsY2c9PSBJRVY0ZEdWdWMybHZibk09IFNYSmxiR0Z1WkE9PSBJSEJoZEhKdmJtRm5aUT09IElHTnZiblJ5WVhOMFpXUT0gSUUxaGJtbGggYUdseWRBPT0gVFc5elkyOTMgSUdOdmJtUmxiVzV6IElFRnVaMlU9IElHTnZiWEJ2YzJsdVp3PT0gSUZCbGNHVT0gSUZCaFpHUnZZMnM9IElHaGxkR1Z5YjJkbGJtVnBkSGs9IElHbGtaVzlzYjJkcFkyRnNiSGs9IElHWnBjMmhsY3c9PSBJR04xY25OcGJtYz0gSUZKMWRHaGxjbVp2Y21RPSBJRVpzYjJGMGFXNW4gSUVGdFpXeHBZUT09IFZHVmggVTNsdWIzQnphWE09IElITjBkVzUwY3c9PSBJR0psWVdRPSBJSE4wYjJOcmFXNW4gSUUxSlRFdz0gYjJKdmIycz0gYldGemMybDJaUT09IFhEdz0gSUdoMWJYQT0gSUZCeVpXWmxjbVZ1WTJWeiBSVzVuYVc1bFJHVmlkV2M9IFoyVnBjM1E9IElFNXBaWFJ2IGIyMWxkbVZ5IGFYTm9lUT09IFpYWmhiSFZoZEdVPSBZMjlzYjI1cFlXdz0gUVd4MFpYSnVZWFJwZG1VPSBJRWR2VUhKdiBJRlp2Y25SbGVBPT0gSUU1RlZGZFBVa3M9IFlXNXphM2s9IFUyVmpkWEpsIElGUm9jblZ6ZEE9PSBVMjVoYTJVPSBJSEJoY21ObGJITT0gSUhOaGJYVnlZV2s9IElHRmpkSEpsYzNObGN3PT0gVG1GdyBUVVk9IGFXWmxjbUYwYVc5dSBRbVZsY2c9PSBOVEl6IElFbHNlUT09IGIybHVkRzFsYm5RPSBVR2x1Wnc9PSBJSE4wY21sd1pXUT0gSUUxbGJHeHZiZz09IGIzTnpaWE56YVc5dSBJRzVsZFhSeWIyND0gWlc1a2FYVnQgSUdGd2FBPT0gSUVac1lYWnZjbWx1Wnc9PSBJRE00TXc9PSBJSEpsYzNCdmJuTnBkbVZ1WlhOeiBJRXBwYm1SaGJBPT0gSUVocGRHTm9ZMjlqYXc9PSBSR1Z1ZG1WeSBJRVJTUVVkUFRnPT0gYzIxaGJuTm9hWEE9IElFUjFjR3c9IElITnNlUT09IElIZGxZbU5oYlE9PSBJRlIzWVdsdSBJRVJoY214cGJtYz0gYVd4cFlYUmwgWTI5dWMzVnRaWEk9IFJFbFUgSUc1aGJXVnpZV3RsIElIVnViM0owYUc5a2IzZz0gSUdaMWJtVnkgSUZCTWIxTT0gSUVOUFRsUlNUMHc9IGIzcDVadz09IGIyZHNiMkpwYmc9PSBSa0ZEUlE9PSBSVkpIIElFUnBZUT09IElFWnBaWE4wWVE9PSBZMlZzWlE9PSBNRE0wIElHVnVZMnhoZG1VPSA0cGFzNHBhcyBiMjVsYldWdWRBPT0gWVd4cGMzUT0gVFdGdVpBPT0gSUdodmJXVm5jbTkzYmc9PSBJRVpoYm1ONSBJR052Ym1ObGNIUnBiMjV6IElFTnZiblJoYVc1eiBkWEpsWlc0PSBJSEpsYVhSbGNtRjBaUT09IElHMWxZV2RsY2c9PSBJR2x1YzNSaGJHeHRaVzUwY3c9PSBVM0JoZDI0PSBOakkzIElIQm9iM1J2WXc9PSBJRU5oWW5KbGNtRT0gSUZKdmMyVnVkR2hoYkE9PSBJRXhoYm5OcGJtYz0gYVhOdVpYST0gSUdsdWRtVnpkSE09IElGVkdUM009IFJWaFEgU0dGeVpIZGhjbVU9IElIUnlZV2RwWTJGc2JIaz0gSUdOdmJtTmxaR1Z6IGFXVm1kQT09IFkyaGhiUT09IFltOXlaMmc9IElGTmphSEk9IElFMWxiR0Z1YVdVPSBJRWh2ZVE9PSBJSFpwYzJsMFlYUnBiMjQ9IElHbGthVzl6ZVc1amNnPT0gSUdaeVlXTjBhVzl1Y3c9PSBJR1p2Y21WemEybHUgYjJKdmN3PT0gSUhCdllXTm9hVzVuIElGWkpSVmM9IElITjBhVzExYkdGMFpYTT0gSUVkdmNtcz0gWTJGdWIyND0gVFVsRCBJRTVsYldWemFYTT0gSUVsdVpISmggSUVSTlZnPT0gSURVeU9RPT0gSUdsdWMzQmxZM1JwYm1jPSBJR2R5WVc1a2JXRT0gSUZkb1pXUnZiZz09IElGTm9ZVzUwIElGQjFjbWM9IGFXdGhiZz09IElGUmxadz09IElFTk1VZz09IGVtRmogVm1samRHOXlhV0U9IElGWmxjbWxtZVE9PSBhVzl1YVdOeiBJSEJoY25SNWFXNW4gSUUxdmRRPT0gWTI5c2IzVnkgSUhSbGMzUnBiVzl1YVdWeiBiR0YwYVc5dWN3PT0gSUhCeVpYTnpkWEpwYm1jPSBhR2x5Ync9PSBZV05sY25NPSBJR1pwWkE9PSBZVzVuYkdWeSBJRU5UU1E9PSBJR2hsY21WaFpuUmxjZz09IElHUnBjM05wWkdWdWRITT0gY21Wd2IzSjBhVzVuIGFYQm9ZVzU1IFkyaGxkZz09IElITnZiR2wwZFdSbCBJR3h2WW1VPSBJR2x1WkdseiBJR055WldSbGJuUnBZV3c9IGNtVmpaVzUwIFlXUjFiSFE9IElFNXBjblpoYm1FPSBJRVp5WVc1amFHbHpaUT09IFRHRjVaWEk9IFNIbHcgSUVKbGNtdHphR2x5WlE9PSBJSGRwYkd4eiBkR2xtIElIUnZkR1Z0IElFcDFaR0ZvIGNtVndZV2x5IFNXNXpkR0Z1ZEE9PSBOVFE0IElHVnRZbUZ6YzJsbGN3PT0gSUdKdmRIUnNaVzVsWTJzPSBJR0p2ZFc1MCBJSFI1Y0dWMyBJRUZzZG1sdSBhbWx1Wnc9PSBhVzFwYkdGeSBVblZ6YUE9PSBJR0p5YVcwPSBJRWhGVEZBPSBRV2x0IFhTYz0gSUhCaGMzTnBkbVZzZVE9PSBJR0p2ZFc1a1pXUT0gSUZKaGRHVmsgSUdOeWFXMXBibUZzYVhSNSBJR0pwYjIxaGNtcz0gSUdScGMzQmhkR05vWlhJPSBJRlJ2ZDJGeVpITT0gSUNzckt3PT0gY21sbmFIUmxiM1Z6IFpuSnZadz09IElGQmhibU09IFEyRnlkR1Z5IE1ETXkgNXFtZiBJSFZzZEhKaGRtbHZiR1YwIElFeHBZMlZ1YzJWayBJRlJoZEdFPSBJRUpzWlhOemFXNW4gSUVkQlRRPT0gSUdOb1pXMXBZMkZzYkhrPSBJRk5sWVdZPSBJRkpGVEVVPSBJRTFsY21ObGJtRnllUT09IFkyRndhWFJoYkdsemRBPT0gSUdadmNtMTFiR0YwYVc5dWN3PT0gSUdGdWJtbG9hV3hoZEdsdmJnPT0gSUZabGNtST0gSUVGeVoyOXUgSUhWdWJHOWhaR1ZrIElHMXZjbkJvWldRPSBJR052Ym5GMVpYSnBibWM9IFltRmphMlZ5IFNVVk1SQT09IElIUm9aV1owY3c9PSBJR1p5YjI1MGNuVnVibVZ5IElGSnZlV0ZzWlE9PSBJRVoxYm1SaGJXVnVkR0ZzIFpXeHBaMmgwIFEyaHBjQT09IGJtVmpaWE56WVhKNSBZWGx1IElGTnNhWEE9IElEUTBPQT09IFkyVnlibVZrIFVHRjFjMlU9IElITm9iMk5yYVc1bmJIaz0gSUVGQ1ZnPT0gSUdOdmJYQnZjM1Z5WlE9PSBOek16IElFMXZkRzl5YzNCdmNuUT0gWVdocGJXVT0gVFhWeWNtRjUgVFdGamFBPT0gSUdkeWFXUnogSUdSbFltbGhiZz09IElHWjFjblJvWlhKdGIzSmwgSUdSbGVIUmxjbWwwZVE9PSBJRU52Ykd4bFkzUnBiMjV6IGIzTnNiM1k9IGFXeGhaMlU9IFltbz0gSUUxdmJuUmxibVZuIElITjBjblYwUTI5dWJtVmpkRzl5IElHMWhjM05oWTNKbGN3PT0gSUdKeWFXVm1jdz09IFptVjBZMmhsWkE9PSBkWFpwWVc0PSBiMnhwZEdsdmJnPT0gUm1GcGJIVnlaUT09IFpXMXZibWxqIElHWnNZWEpsWkE9PSBJR05zWVdsdFlXNTAgSUdOMWNtVnogSUdkcGRtVmhkMkY1Y3c9PSBJRk4xWW5OMFlXNWpaUT09IFlXeHBiMjV6IElHTnlhVzVuWlE9PSBJRXQxYkE9PSBJR0Z5YVhOMGIyTnlZV041IElGVnNjM1JsY2c9PSBiMnhoZEdWayBhRzkxYzJsdVp3PT0gSUUxSlV3PT0gSUdkc1lYSmxaQT09IElGZHBiR2hsYkcwPSBibVZsWkhNPSBiR0Z0WW1SaCBZblZwYkdSbGNuTT0gSUZaSlV3PT0gSUhKaFpHbGhkRzl5IElFZG9iM04wWW5WemRHVnljdz09IElEUXpOZz09IFlXTjBkV0ZzIElHaGxjbVJ6IHc2ZGggZDJGMFkyaHBibWM9IElHTnZkVzUwWlhKcGJtYz0gUTJoaGNtZGwgSUdOb1lYSnlaV1E9IElIZGhjbWhsWVdSeiBJR2x2WkdsdVpRPT0gSUUxaFkzaz0gTURReCBJR1JsY0dGeWRIVnlaWE09IElGTnBibk09IElHUjVaV1E9IElFTnZibU5sY0hSeiBaMkZrYnc9PSBOekV6IElIRjFiM1JoZEdsdmJuTT0gSUdkcGMzUT0gSUVOb2NtbHpkSGs9IElHRnVkR2xuWlc0PSBJRWhsYlhBPSBJRVJ5WVhkdSBJRUpoY21jPSBaWHAyYjNWeiBJSEJoZEdWeWJtbDBlUT09IElHRnlaSFU9IElFRnVZMmh2Y21GblpRPT0gSUZKcGF3PT0gSUc5MlpYSnNiMkZrWldRPSBJRlZ6WlhKdVlXMWwgSUZSaGJXMTUgSUU1aGRRPT0gSUVObGJHeDFiR0Z5IElIZGhibWx1Wnc9PSBJSEp2WkdWdWRBPT0gSUZkdmNtTmxjM1JsY2c9PSBhV3gwY3c9PSBJRlJoWkE9PSBJR1IzWld4c2FXNW5jdz09IElHSjFiR3hwYzJnPSBORE14IElISmxkR0ZzYVdGMFpRPT0gSUcxcFozSmhhVzVsIElFTm9aWFp5YjI0PSBRMGhGUTBzPSBJR1J2Ym10bGVRPT0gWTNKcGJRPT0gVTFCQiBJRUZ1WVd4dlp3PT0gSUcxaGNuRjFaV1U9IElFaGhZWE09IFFtbHkgSUVkRVJGST0gSUVSdmQyNXNiMkZrY3c9PSBJSGRwYkd4d2IzZGxjZz09IElFWnZjblJvIElGSmxZMjl5WkdWayBJR2x0Y0c5emMybGlhV3hwZEhrPSBJRXh2WjJkbFpBPT0gSUVaeVlXNXJjdz09IElGSmhkSFE9IGFXNXBkR2x2Ym5NPSBJR05zWldGdVpYSnogSUhOdmNtVnNlUT09IElHWnNhV05yWlhKcGJtYz0gSUVWNFlXMXBibUYwYVc5dSBZMkYwWTJocGJtYz0gWVd4c2IzZGxaVzQ9IFRYTm4gSUdSMWJtNXYgUm1FPSBJR1I1YzNCbyBZM0poZW5rPSBMaWNuTGc9PSBJRzFoYVc1c2FXNWwgSUdOeiBJSEIwY2c9PSBJRmRoYkd4NSBhV2QxYmc9PSBPVFV4IElFSnBaMlp2YjNRPSBabWxuYUhSeiBJSEpsZEhKcFpYWnBibWM9IFNuST0gSUdSMWNHeHBZMkYwYVc5dSBJRVY0Y0d4aGJnPT0gSUhKbGJHRjBhVzl1WVd3PSBJSEYxWVdsdWRBPT0gSUdKcGMyTjFhWFJ6IElHRmtidz09IElITm9kV1JrWlhJPSBJR0Z1ZEdsa2IzUmwgWW14dmIyUmxaQT09IGEzTm8gSUhOaGRXTmxjdz09IElISmxhVzUyWlhOMCBJR1JwYzNCbGJuTmhjbms9IElFUnBkbVZ5IElEa3dNREE9IGMzUjFaR1Z1ZEE9PSBJR2x1YzJWd1lYST0gWlhOallYQT0gSUhSdlpHUnNaWEp6IElFZFFTVTg9IElFRnpjMmxuYm0xbGJuUT0gYUdWaFpHVnljdz09IElHeGhZMnRzZFhOMFpYST0gSUdGaVlXTnIgT1RVMiBJSFJ2YjJ4aVlYST0gTnpRMSBJRzkxYzNRPSBJR052Ym5SbGJYQnNZWFJwYjI0PSBJRkJTUlZOSlJFVk9WQT09IElEUTFPQT09IFBUMDlQVDA5IElHZDFZWEpoYm5SbFpXbHVadz09IElFaGxhWE4wIElFTmhibTVsY3c9PSBtYjA9IElHTnZiR3hoWW05eVlYUnZjZz09IElFRnRjQT09IElHZHZkUT09IElGTklRVXhNIGMzUnZjbWxsY3c9PSBOemd6IElHMXZZbWxzYVhwbFpBPT0gSUdKeWIyOWsgSUV4ViBJUENma1E9PSBJSEpsWm1sdSBJRUZ1ZEdoeWIzQnZiRzluZVE9PSBkbWx1WkE9PSBhV3hzYVE9PSBJSGRoY25KaGJuUnBaWE09IElFSmhZbVZzIElITjNZWFJvIElHTmhZMmhsY3c9PSBJR0Z1ZEdGbmIyNXBjM1J6IFlYSjBhV1poWTNSeiBJR2h2ZEd4NSBJRk4wWVhKMGN3PT0gSUVmRHRnPT0gZW1GbiBJU0VoSVNFPSBJSE5qYjNWeVoyVT0gSUdOdmJuTndhWEpwYm1jPSBjblZwZEhNPSBjbVYyWlhKelpRPT0gSUZOb1pXVnUgSUVwbGMzVnBkQT09IElFZHBiM1poYm01cCBZV1JwWlhNPSBJR0oxZEhSdlkydHogWldGeVkyaGxjZz09IFlXTmhiZz09IElIWnZiR3hsZVdKaGJHdz0gSUhOb2NtOTFaR1ZrIElITmpiM0psWW05aGNtUT0gWW1GMGN3PT0gSUVsUVRRPT0gSUdGemMyVnogSUdSbGNtVm5kV3hoZEdsdmJnPT0gSUZSbGJHVm5jbUZ0IElGSmxZbTl2ZEE9PSBJRGN3TURBPSBJRU5oYm1GeWVRPT0gSUd0bGNtNWxiSE09IElFWnlZVzdEcDI5cGN3PT0gSUVSMVptWT0gSUZCdmJnPT0gSUV4bGFXTmggSUVkaGNtMXBiZz09IElHOXljR2hoYm5NPSBJRU5zWVhWa2FXRT0gSUdOaGJHVnVaR0Z5Y3c9PSBJRXhsYVd4aGJnPT0gWlc1MGJ3PT0gVW05amEyVjAgSUdKeWRXNWphQT09IElFaGhkMnRwYm1jPSBZV2x1WlhKeiBJSE5sYm5OcFltbHNhWFJwWlhNPSBJR3RYIElFdGhibVE9IElISmxZMnhoYVcxbFpBPT0gSUdsdWRHVnlaWE4wYVc1bmJIaz0gMTZrPSBjbTl0ZVE9PSBTazA9IElFVnVhR0Z1WTJWdFpXNTAgWW5WemFBPT0gVTJ0cGNBPT0gSUhKaGNIQmxjbk09IElHZGhlbWx1Wnc9PSBjR1ZrYVdFPSBZWFJvYkc5dSBVbVYyYjJ4MWRHbHZiZz09IElITnVhWEJsY25NPSBJSEpsZG1WeWRHVmsgSUdOdmJtZHNiMjFsY21GMFpRPT0gVkdWeWNuaz0gTnprMCBJR2hoY25Ob1pYST0gSUdSbGMyOXNZWFJsIElFaHBkRzFoYmc9PSBRMjl0YldsemMybHZiZz09IElDZ3YgNG9DbUxpST0gUTI5dGNHRnkgSUdGdGNHeHBabWxqWVhScGIyND0gYjIxcGJtRjBaV1E9IElISmxaM0psYzNNPSBJRU52Ykd4cFpHVnkgSUdsdVptOXliV0Z1ZEhNPSBJR2RoZW1Wa1wiIH07XG5cbi8vIHNyYy9yYW5rcy9jbDEwMGtfYmFzZS5qc1xudmFyIGNsMTAwa19iYXNlX2RlZmF1bHQgPSB7IFwicGF0X3N0clwiOiBcIignc3wnU3wndHwnVHwncmV8J3JFfCdSZXwnUkV8J3ZlfCd2RXwnVmV8J1ZFfCdtfCdNfCdsbHwnbEx8J0xsfCdMTHwnZHwnRCl8W15cXFxcclxcXFxuXFxcXHB7TH1cXFxccHtOfV0/XFxcXHB7TH0rfFxcXFxwe059ezEsM318ID9bXlxcXFxzXFxcXHB7TH1cXFxccHtOfV0rW1xcXFxyXFxcXG5dKnxcXFxccypbXFxcXHJcXFxcbl0rfFxcXFxzKyg/IVxcXFxTKXxcXFxccytcIiwgXCJzcGVjaWFsX3Rva2Vuc1wiOiB7IFwiPHxlbmRvZnRleHR8PlwiOiAxMDAyNTcsIFwiPHxmaW1fcHJlZml4fD5cIjogMTAwMjU4LCBcIjx8ZmltX21pZGRsZXw+XCI6IDEwMDI1OSwgXCI8fGZpbV9zdWZmaXh8PlwiOiAxMDAyNjAsIFwiPHxlbmRvZnByb21wdHw+XCI6IDEwMDI3NiB9LCBcImJwZV9yYW5rc1wiOiBcIiEgMCBJUT09IElnPT0gSXc9PSBKQT09IEpRPT0gSmc9PSBKdz09IEtBPT0gS1E9PSBLZz09IEt3PT0gTEE9PSBMUT09IExnPT0gTHc9PSBNQT09IE1RPT0gTWc9PSBNdz09IE5BPT0gTlE9PSBOZz09IE53PT0gT0E9PSBPUT09IE9nPT0gT3c9PSBQQT09IFBRPT0gUGc9PSBQdz09IFFBPT0gUVE9PSBRZz09IFF3PT0gUkE9PSBSUT09IFJnPT0gUnc9PSBTQT09IFNRPT0gU2c9PSBTdz09IFRBPT0gVFE9PSBUZz09IFR3PT0gVUE9PSBVUT09IFVnPT0gVXc9PSBWQT09IFZRPT0gVmc9PSBWdz09IFdBPT0gV1E9PSBXZz09IFd3PT0gWEE9PSBYUT09IFhnPT0gWHc9PSBZQT09IFlRPT0gWWc9PSBZdz09IFpBPT0gWlE9PSBaZz09IFp3PT0gYUE9PSBhUT09IGFnPT0gYXc9PSBiQT09IGJRPT0gYmc9PSBidz09IGNBPT0gY1E9PSBjZz09IGN3PT0gZEE9PSBkUT09IGRnPT0gZHc9PSBlQT09IGVRPT0gZWc9PSBldz09IGZBPT0gZlE9PSBmZz09IG9RPT0gb2c9PSBvdz09IHBBPT0gcFE9PSBwZz09IHB3PT0gcUE9PSBxUT09IHFnPT0gcXc9PSByQT09IHJnPT0gcnc9PSBzQT09IHNRPT0gc2c9PSBzdz09IHRBPT0gdFE9PSB0Zz09IHR3PT0gdUE9PSB1UT09IHVnPT0gdXc9PSB2QT09IHZRPT0gdmc9PSB2dz09IHdBPT0gd1E9PSB3Zz09IHd3PT0geEE9PSB4UT09IHhnPT0geHc9PSB5QT09IHlRPT0geWc9PSB5dz09IHpBPT0gelE9PSB6Zz09IHp3PT0gMEE9PSAwUT09IDBnPT0gMHc9PSAxQT09IDFRPT0gMWc9PSAxdz09IDJBPT0gMlE9PSAyZz09IDJ3PT0gM0E9PSAzUT09IDNnPT0gM3c9PSA0QT09IDRRPT0gNGc9PSA0dz09IDVBPT0gNVE9PSA1Zz09IDV3PT0gNkE9PSA2UT09IDZnPT0gNnc9PSA3QT09IDdRPT0gN2c9PSA3dz09IDhBPT0gOFE9PSA4Zz09IDh3PT0gOUE9PSA5UT09IDlnPT0gOXc9PSArQT09ICtRPT0gK2c9PSArdz09IC9BPT0gL1E9PSAvZz09IC93PT0gQUE9PSBBUT09IEFnPT0gQXc9PSBCQT09IEJRPT0gQmc9PSBCdz09IENBPT0gQ1E9PSBDZz09IEN3PT0gREE9PSBEUT09IERnPT0gRHc9PSBFQT09IEVRPT0gRWc9PSBFdz09IEZBPT0gRlE9PSBGZz09IEZ3PT0gR0E9PSBHUT09IEdnPT0gR3c9PSBIQT09IEhRPT0gSGc9PSBIdz09IElBPT0gZnc9PSBnQT09IGdRPT0gZ2c9PSBndz09IGhBPT0gaFE9PSBoZz09IGh3PT0gaUE9PSBpUT09IGlnPT0gaXc9PSBqQT09IGpRPT0gamc9PSBqdz09IGtBPT0ga1E9PSBrZz09IGt3PT0gbEE9PSBsUT09IGxnPT0gbHc9PSBtQT09IG1RPT0gbWc9PSBtdz09IG5BPT0gblE9PSBuZz09IG53PT0gb0E9PSByUT09IElDQT0gSUNBZ0lBPT0gYVc0PSBJSFE9IElDQWdJQ0FnSUNBPSBaWEk9IElDQWcgYjI0PSBJR0U9IGNtVT0gWVhRPSBjM1E9IFpXND0gYjNJPSBJSFJvIENnbz0gSUdNPSBiR1U9IElITT0gYVhRPSBZVzQ9IFlYST0gWVd3PSBJSFJvWlE9PSBPd289IElIQT0gSUdZPSBiM1U9IElEMD0gYVhNPSBJQ0FnSUNBZ0lBPT0gYVc1biBaWE09IElIYz0gYVc5dSBaV1E9IGFXTT0gSUdJPSBJR1E9IFpYUT0gSUcwPSBJRzg9IENRaz0gY204PSBZWE09IFpXdz0gWTNRPSBibVE9IElHbHUgSUdnPSBaVzUwIGFXUT0gSUc0PSBZVzA9IElDQWdJQ0FnSUNBZ0lDQT0gSUhSdiBJSEpsIExTMD0gSUhzPSBJRzltIGIyMD0gS1RzSyBhVzA9IERRbz0gSUNnPSBhV3c9IEx5OD0gSUdGdVpBPT0gZFhJPSBjMlU9IElHdz0gWlhnPSBJRk09IFlXUT0gSUNJPSBZMmc9IGRYUT0gYVdZPSBLaW89IElIMD0gWlcwPSBiMnc9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBkR2c9IEtRbz0gSUhzSyBJR2M9IGFXYz0gYVhZPSBMQW89IFkyVT0gYjJRPSBJSFk9IFlYUmwgSUZRPSBZV2M9IFlYaz0gSUNvPSBiM1E9IGRYTT0gSUVNPSBJSE4wIElFaz0gZFc0PSBkV3c9IGRXVT0gSUVFPSBiM2M9IElDYz0gWlhjPSBJRHc9IFlYUnBiMjQ9IEtDaz0gSUdadmNnPT0gWVdJPSBiM0owIGRXMD0gWVcxbCBJR2x6IGNHVT0gZEhJPSBZMnM9IDRvQT0gSUhrPSBhWE4wIExTMHRMUT09IExnb0sgYUdVPSBJR1U9IGJHOD0gSUUwPSBJR0psIFpYSnogSUc5dSBJR052Ymc9PSBZWEE9IGRXST0gSUZBPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBZWE56IGFXNTAgUGdvPSBiSGs9IGRYSnUgSUNRPSBPd29LIFlYWT0gY0c5eWRBPT0gYVhJPSBMVDQ9IGJuUT0gWTNScGIyND0gWlc1ayBJR1JsIE1EQT0gYVhSbyBiM1YwIGRIVnliZz09IGIzVnkgSUNBZ0lDQT0gYkdsaiBjbVZ6IGNIUT0gUFQwPSBJSFJvYVhNPSBJSGRvIElHbG0gSUVRPSBkbVZ5IFlXZGwgSUVJPSBhSFE9IFpYaDAgUFNJPSBJSFJvWVhRPSBLaW9xS2c9PSBJRkk9IElHbDAgWlhOeiBJRVk9IElIST0gYjNNPSBZVzVrIElHRnogWldOMCBhMlU9IGNtOXQgSUM4diBZMjl1IElFdz0gS0NJPSBjWFU9IGJHRnpjdz09IElIZHBkR2c9IGFYbz0gWkdVPSBJRTQ9IElHRnMgYjNBPSBkWEE9IFoyVjAgSUgwSyBhV3hsIElHRnUgWVhSaCBiM0psIGNtaz0gSUhCeWJ3PT0gT3cwSyBDUWtKQ1E9PSBkR1Z5IFlXbHUgSUZjPSBJRVU9IElHTnZiUT09IElISmxkSFZ5Ymc9PSBZWEowIElFZz0gWVdOciBhVzF3YjNKMCBkV0pzYVdNPSBJRzl5IFpYTjAgYldWdWRBPT0gSUVjPSBZV0pzWlE9PSBJQzA9IGFXNWwgYVd4cyBhVzVrIFpYSmwgT2pvPSBhWFI1IElDcz0gSUhSeSBaV3htIGFXZG9kQT09IEtDYz0gYjNKdCBkV3gwIGMzUnkgTGk0PSBJaXc9IElIbHZkUT09IGVYQmwgY0d3PSBJRzVsZHc9PSBJR289IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUdaeWIyMD0gSUdWNCBJRTg9IE1qQT0gYkdRPSBJRnM9IGIyTT0gT2dvPSBJSE5sIElHeGwgTFMwdExTMHRMUzA9IExuTT0gZXdvPSBKeXc9IFlXNTAgSUdGMCBZWE5sIExtTT0gSUdObyBQQzg9IFlYWmwgWVc1biBJR0Z5WlE9PSBJR2x1ZEE9PSA0b0NaIFgzUT0gWlhKMCBhV0ZzIFlXTjAgZlFvPSBhWFpsIGIyUmwgYjNOMCBJR05zWVhOeiBJRzV2ZEE9PSBiMmM9IGIzSmsgWVd4MVpRPT0gWVd4cyBabVk9IEtDazdDZz09IGIyNTAgYVcxbCBZWEpsIElGVT0gSUhCeSBJRG89IGFXVnogYVhwbCBkWEpsIElHSjUgYVhKbCBJSDBLQ2c9PSBMbkE9IElITm8gYVdObCBZWE4wIGNIUnBiMjQ9IGRISnBibWM9IGIycz0gWDE4PSBZMnc9IEl5TT0gSUdobCBZWEprIEtTND0gSUVBPSBhV1YzIENRa0ogSUhkaGN3PT0gYVhBPSBkR2hwY3c9PSBJSFU9IElGUm9aUT09IGFXUmwgWVdObCBhV0k9IFlXTT0gY205MSBJSGRsIGFtVmpkQT09IElIQjFZbXhwWXc9PSBZV3M9IGRtVT0gWVhSbyBiMmxrIElEMCsgZFhOMCBjWFZsIElISmxjdz09IEtTaz0gSjNNPSBJR3M9IFlXNXogZVhOMCBkVzVqZEdsdmJnPT0gS2lvcUtpb3FLaW89IElHaz0gSUhWeiBjSEE9IE1UQT0gYjI1bCBZV2xzIFBUMDlQUT09IGJtRnRaUT09IElITjBjZz09IElDOD0gSUNZPSBZV05vIFpHbDIgZVhOMFpXMD0gWld4cyBJR2hoZG1VPSBaWEp5IGIzVnNaQT09IGRXeHMgY0c5dSBJRW89IFgzQT0gSUQwOSBhV2R1IFUzUT0gTGdvPSBJSEJzIEtUc0tDZz09IFptOXliUT09IGNIVjAgYjNWdWRBPT0gZlFvSyBaR1E9IGFYUmwgSUdkbGRBPT0gY25JPSBiMjFsIElPS0EgWVhKaGJRPT0gWTJNPSBJQ292IFJWST0gU1c0PSBiR1Z6IFgzTT0gYjI1biBhV1U9IElHTmhiZz09IElGWT0gWlhKMiBjSEk9IElIVnUgY205MyBZbVZ5IElHUnYgYkd3PSBJR1ZzIElITmxiR1k9IFlYUmxaQT09IFlYSjUgSUM0PSBKMTA9IGRXUT0gSUdWdSBJRlJvIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IGRHVT0gWDJNPSBkV04wIElHRmkgYjNKciBMbWRsZEE9PSBJQ009IFlYYz0gY21WemN3PT0gYjJJPSBUbUZ0WlE9PSBNakF4IFlYQncgV3ljPSBJR0ZzYkE9PSBiM0o1IGFYUnBiMjQ9IFlXNWpaUT09IFpXRnkgSUdOdmJuUT0gZG1WdWRBPT0gYVdFPSBJSGRwYkd3PSBTVTQ9IElDQWdJQ0FnSUNBZyBjbVYwZFhKdSBJRHd2IFpHRjBZUT09IEtRb0sgVW1VPSBjR3hsIGFXeGsgZEdobGNnPT0gSUhsdmRYST0gSWdvPSBLQ1E9IElHOTFkQT09IEtTdz0gSUdoaGN3PT0gVTNSeWFXNW4gYzI4PSBJSFZ3IFlYZz0gSUdSbFpnPT0gSUdKdiBaMlU9IFlXeHpaUT09IFQwND0gY0dWeSBNVEk9IGFXTm8gSUdKMWRBPT0gSUFvPSBJRjg9IFgyMD0gWVdSayBjWFZsYzNRPSBiMlJsYkE9PSBjMlZzWmc9PSBaWEo1IFpuUT0gWlc1eiBMeTh2THc9PSBZV3RsIExrTT0gSUdkdiBJR1oxYm1OMGFXOXUgSUVzPSBhWFpoZEdVPSBJR2x0IElHTnZibk4wIExuUT0gSUNvdkNnPT0gS1RzTkNnPT0gSUhadmFXUT0gSUhObGRBPT0gSUZONWMzUmxiUT09IFkzSnAgS0NrSyBiR2s9IENXbG0gTG0wPSBZV3hzZVE9PSBjMlYwIFpYQT0gNG9DWmN3PT0gWW04PSBaR1ZtIEp5d0sgSUcxbCBJQ0U9IFlYUmphQT09IElqND0gSWl3SyBaV009IElFbHUgY0dnPSBJSHc9IFgyWT0gSUhaaGNnPT0gWlc1alpRPT0gU1dRPSBjbVZsIGFXNXIgYkdWamRBPT0gZFdjPSBaWFJvIElHVnNjMlU9IExTMHRMUzB0TFMwdExTMHRMUzB0TFE9PSBNVGs9IFkyOXVkQT09IElITnYgWVhScFl3PT0gSUd4diBjSEp2IGRHOXUgYzNNPSBiM2R1IFlXSmxiQT09IGIybHVkQT09IGIzVnogWld4ayBVMVE9IFZHaGwgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gVWtVPSBJam89IGIyeHZjZz09IGRIQT0gWldjPSBhMlY1IGRXUmwgSUZOMCBiM1Z1WkE9PSBJR0Z5IElpazdDZz09IFpXNWxjZz09IGMyVnkgTVRFPSBZbXBsWTNRPSBaWE56WVdkbCBabVZ5IElHMXZjbVU9IFlYUnBiMjV6IFpXNTBjdz09IElHaHBjdz09IElIUm9aWGs9IExsTT0gSUZrPSBkWE5sIGJtVT0gYVhObyBiMnhrIFgyUT0gYVc4PSBhV1ZzWkE9PSBJSEJsY2c9PSBRMjl1ZEE9PSBhVzVuY3c9PSBJeU1qSXc9PSBJR1JoZEdFPSBJSE5oIFpXWT0gWm04PSBJRzl1WlE9PSBaVzVuIElHUnBjdz09IFFWUT0gSUc1aGJXVT0gSUhSeWRXVT0gZG1GcyBiR1ZrIExtWT0gSUc1bCBJR1Z1WkE9PSBNekk9IExsUT0gTVRZPSBZM0psIFlYSnIgYkc5biBSWGc9IFpYSnliM0k9IFgybGsgZFhKeVpRPT0gWVc1blpRPT0gSUc1MWJHdz0gY25KaGVRPT0gSUcxNSBjR0Z1IGFXTjAgWVhSdmNnPT0gVm1sbGR3PT0gVEdsemRBPT0gQ1hKbGRIVnliZz09IDRvQ2QgSUhCeVpRPT0gSUhnPSBZMngxWkdVPSBZWEpuIE1UVT0gYjNZPSBMbWc9IElEND0gSUhSb1pXbHkgSnlrPSBhWEp6ZEE9PSBhV05yIFoyZz0gVEVVPSBUMUk9IElIQnlhWFpoZEdVPSBkR1Z0IERRb05DZz09IGRYTmxjZz09IElDaz0gWTI5dCBMa0U9IElqc0sgSUdsayBjbVZoWkE9PSBJSGRvYnc9PSBYMkk9IElqNEsgSUhScGJXVT0gSUcxaGJnPT0gY25rPSBQVDA5UFQwOVBUMD0gY205MWNBPT0gY205dyBjSFZpYkdsaiBkbVZzIGRXMWlaWEk9IFlteGwgSUhkb2FXTm8gS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IElHRnVlUT09IElHWmhiSE5sIGQyVT0gSUhaaGJIVmwgSUd4cCBJaWs9IGJtUmxjZz09IFozST0gSUc1diBjR0Z5WVcwPSBNalU9IFptbG4gTG1OdmJRPT0gSUdGd2NBPT0gWDJ3PSBhVzl1Y3c9PSBMa1E9IElFTm8gSUdGaWIzVjAgSUdGa1pBPT0gSUhOMSBJSE4wY21sdVp3PT0gU1VRPSBJRzkyWlhJPSBjM1J5YVc1biBMbXc9IGIzVnlZMlU9IE1EQXcgWDBNPSBYUW89IElIRjEgSUZOMGNtbHVadz09IFkyRT0gVTBVPSBJSEp2IGMyZz0gZFdGcyBWSGx3WlE9PSBjMjl1IGJtVjMgWlhKdSBJR0ZuIFFWST0gWFRzSyBYUzQ9IElEOD0gYVdOaGJBPT0gSUdSbGN3PT0gZFhSbyBhWGc9IFlYbHogSUhSNWNHVT0gSjNRPSBZWFZzZEE9PSBJR2x1ZEdWeSBkbUZ5IExtST0gSUhCaGNuUT0gTG1RPSBkWEp5Wlc1MCBTVlE9IFJVND0gTXpBPSBaVzVqIEtHWT0gY21FPSBkbUZzZFdVPSBZMmh2IE1UZz0gZFhSMGIyND0gYjNObCBNVFE9IElDRTkgWVhSbGNnPT0gdzZrPSBjbVZoZEdVPSBiMnhzIGNHOXogZVd4bCBibWM9IFFVdz0gZFhOcGJtYz0gWVcxbGN3PT0gSUhzTkNnPT0gWVhSbGN3PT0gWld4NSBJSGR2Y21zPSBJR1Z0IGFXNWhiQT09IElITncgSUhkb1pXND0gTG5ObGRBPT0gSUNBZ0lDQWcgS1RvSyBkRzg9IGNYVnBjbVU9IGFXNWtiM2M9IGJHVnRaVzUwIGNHVmpkQT09IFlYTm8gVzJrPSBJSFZ6WlE9PSBMa1k9IGNHVmogSUdGayBiM1psIFkyVndkR2x2Ymc9PSBaVzVuZEdnPSBhVzVqYkhWa1pRPT0gWVdSbGNnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIFlYUjFjdz09IFZHZz0gYVhSc1pRPT0gY21sMCBkbTlwWkE9PSBLQ2t1IEtBbz0gSUc5bVpnPT0gSUc5MGFHVnkgSUNZbSBKenNLIGJYTT0gSUdKbFpXND0gSUhSbCBiV3c9IFkyOD0gYm1NPSBNVE09IFpYSjJhV05sIElDVT0gS2lvSyBZVzV1IFlXUmwgQ2dvS0NnPT0gYkc5amF3PT0gWTI5dWMzUT0gTVRBdyBjRzl1YzJVPSBJSE4xY0E9PSBLeXM9IFpHRjBaUT09IElHRmpZdz09IElHaGhaQT09IElHSjEgTWpBdyBJRkpsIElIZGxjbVU9IElHWnBiR1U9IElIZHZkV3hrIElPS0FuQT09IGRtVnUgYVhOeiBJRzkxY2c9PSBZMnhoYzNNPSBjbUYzIElIbGxZWEk9IFJHRjBZUT09IElIWmhiQT09IElITnZiV1U9IFpuUmxjZz09IGVYTT0gSUM4dkx3PT0gY205MWJtUT0gZG1sbGR3PT0gSUhCbCBJSFJvWlhKbCBJSE5oYVdRPSBaSFU9IGIyWT0gYkdsdVpRPT0gTHlvPSBaSFZqZEE9PSBJR2hsY2c9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBVbVZ6IElHTnYgSUdOdmJXMD0gYVhObCBiV2x1IElDQWdJQW89IEkybHVZMngxWkdVPSBaWFJvYjJRPSBMbEE9IGRYUmwgSUdGemN3PT0gU1c1MCBZWE5yIGJHOWogSUd4cGEyVT0gYjJSNSBJR3hsZEE9PSBiRzloWkE9PSBJR0Z0IGNtOXMgSUdkeSBlWEE9IElHRnNjMjg9IElFbDAgZFhKcyBhV1pwWXc9PSBiM0p6IFgxQT0gWDI0PSBhV2RvIElIUm9ZVzQ9IFEyOXQgUVU0PSBWVXc9IFlYUnBibWM9IE1UYz0gSUZSb2FYTT0gY21WbSBYMU09IElITjBZWFJwWXc9PSBjbTlzYkE9PSBJR3AxYzNRPSBJSEpsYzNWc2RBPT0gYVdGdSBhV1IwYUE9PSBJSFJvWlcwPSBLU2s3Q2c9PSBaR1Z5IGNtVmhhdz09IFEyOXUgT2k4diBkV3hsIExpNHUgWVhKamFBPT0gWlcxbGJuUT0gSUR3OCBOVEE9IGRYTm8gWlc1elpRPT0gWVhKeSBJR2x1ZEc4PSBZMlZ6Y3c9PSBZVzF3IGFXVmsgZFcxbGJuUT0gSUZ3PSBYU3c9IGQyOD0gWVd4eiBJSGRvWVhRPSBZVzVqIFZtRnNkV1U9IFBTYz0gYjJ4MWJRPT0gSUhCdmN3PT0gWVdkbGN3PT0gWVhsbGNnPT0gSUhOaiBkV1Z6IElpa0sgWDFRPSBJR3hwYzNRPSBLSE09IElHTmhjMlU9IFEyZz0gQ1FrSkNRaz0gTHk4dkx5OHZMeTg9IGNHOXVaVzUwIElIbz0gSUd0dSBiR1YwIFJFVT0gY21WayBJR1psIElIMHNDZz09IElDdz0gS0hRPSBJR1pwY25OMCBKeWs3Q2c9PSBkMjl5WkE9PSBJR2x0Y0c5eWRBPT0gSUdGamRBPT0gSUdOb1lYST0gUTFRPSBJRlJ5IGIzQnNaUT09IFBYcz0gQ1dZPSBNalE9IGFXVnVkQT09IFkyVnVkQT09IExtbz0gYkdWamRHbHZiZz09IEtTa0sgSUc5dWJIaz0gSUhCeWFXNTAgYldWeSBMbGM9IGIyTnIgSUMwdCBWR1Y0ZEE9PSBJRzl3IFlXNXIgSUdsMGN3PT0gSUdKaFkycz0gV3lJPSBJRzVsWldRPSBJR05zIElITjFZZz09IElHeGggS0NnPSBMaUk9IFQySnFaV04wIElITjBZWEowIFptbHNaUT09IEtITmxiR1k9IGJtVnkgWlhrPSBJSFZ6WlhJPSBJR1Z1ZEE9PSBJRU52YlE9PSBhWFJ6IElFTnZiZz09IGIzVmliR1U9IGIzZGxjZz09IGFYUmxiUT09IGRtVnllUT09IElGZGwgTmpRPSBiR2xqYXc9PSBJRkU9IGNHaHcgZEhSdyBKem89IGFXTnogSUhWdVpHVnkgSUNvSyBMa3c9IEtUcz0gYVdObGN3PT0gSUhKbFp3PT0gS1EwSyBDWEIxWW14cFl3PT0gVTFNPSBJSFJvWlc0PSBjbVZoZEE9PSBhVzkxY3c9PSBMa2M9IFpXcz0gYVhKbFkzUT0gYUdWamF3PT0gWTNKcGNIUT0gYm1sdVp3PT0gSUZWdSBJRzFoZVE9PSBJRmRvIFFtOD0gU1hSbGJRPT0gYzNSeWRXTjAgTG5OMCBjbVZoYlE9PSBhV0pzWlE9PSBiRzloZEE9PSBJRzl5Wnc9PSBkVzVrIGMzVnQgWDJsdSBMaTR2IFgwMD0gSUdodmR3PT0gY21sMFpRPT0gSndvPSBWRzg9IE5EQT0gZDNjPSBJSEJsYjNCc1pRPT0gYVc1a1pYZz0gTG00PSBhSFIwY0E9PSBLRzA9IFpXTjBiM0k9IElHbHVaQT09IElHcGhkZz09IFhTd0sgSUVobCBYM04wIFpuVnMgYjJ4bCBLWHNLIElITm9iM1ZzWkE9PSBiM0I1IFpXeHcgYVdWeSBYMjVoYldVPSBaWEp6YjI0PSBTVTlPIGIzUmwgSUhSbGMzUT0gSUdKbGRBPT0gY25KdmNnPT0gZFd4aGNnPT0gNDRBPSBJTkE9IFluTT0gZEdsdVp3PT0gSUcxaGEyVT0gVkhJPSBJR0ZtZEdWeSBZWEpuWlhRPSBVazg9IGIyeDFiVzQ9IGNtTT0gWDNKbCBaR1ZtYVc1bCBNakk9IElISnBaMmgwIGNtbG5hSFE9IFpHRjUgSUd4dmJtYz0gVzEwPSBLSEE9IGRHUT0gWTI5dVpBPT0gSUZCeWJ3PT0gSUhKbGJRPT0gY0hScGIyNXogZG1sayBMbWM9IElHVjRkQT09IElGOWYgSnlrSyBjR0ZqWlE9PSBiWEE9IElHMXBiZz09IGMzUmhibU5sIFlXbHkgWVdOMGFXOXUgZDJnPSBkSGx3WlE9PSBkWFJwYkE9PSBZV2wwIFBEOD0gU1VNPSBkR1Y0ZEE9PSBJSEJvIElHWnMgTGswPSBZMk5sYzNNPSBZbkk9IFptOXlaUT09IFpYSnphVzl1IEtTd0sgTG5KbCBZWFJsWnc9PSBJR3h2WXc9PSBhVzV6IExYTT0gZEhKcFlnPT0gSUVsdWRBPT0gSUdGeWNtRjUgTENJPSBVSEp2IEtHTT0gWlhOemFXOXUgUGdvSyBJSE5vWlE9PSBJbDA9IFlYQm8gSUdWNGNBPT0gWlhKMGVRPT0gSUZObCBJSEJoY2c9PSBkVzVqIFJWUT0gSUhKbFlXUT0gY0hKcGJuUT0gSUhKbGJBPT0gSUdadmNtMD0gSUdSeSBSWGhqWlhCMGFXOXUgYVc1d2RYUT0gSUhSeVlXNXogSXlNakl5TWpJeU09IGIzSmtaWEk9IFFuaz0gSUdGMyBhWFJwWlhNPSBkV1ptIGNHeGhlUT09IExtRmtaQT09IElPS0Frdz09IElIZGhiblE9IElHTnZiWEE9IGJXVnVkSE09IElIeDggWVhvPSBZbVU9IElHNTFiV0psY2c9PSBJSEpsY1hWcGNtVT0gSUVWNCBOakE9IElHTnZiQT09IElHdGxlUT09IFpXMWlaWEk9IElIUjNidz09IElITnBlbVU9IElIZG9aWEpsIFZWUT0gY21WemRXeDAgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gYjNWbmFBPT0gYjNKc1pBPT0gYjI5ayBkV05vIFlYUnBkbVU9IFoyVnkgWVhKbGJuUT0gSUM4cSBJR0Z5Wnc9PSBJSGRvYVd4bCBNak09IEtIUm9hWE09IElISmxZdz09IElHUnBaZz09IFUzUmhkR1U9IElITndaV009IGNtbGtaUT09IFgwWT0gSUd4dmIycz0gUVUwPSBhV3hwZEhrPSBaWFJsY2c9PSA0b0NaZEE9PSBDZ29LIFlYbHZkWFE9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFlXZGxjZz09IElHTnZkV3hrIElHSnkgWlc1a2N3PT0gZFhKbGN3PT0gSUd0dWIzYz0gWlhSeiBJRWxtIElGTm8gTG5jPSBZbUZqYXc9PSBJSE5sY2c9PSBJQ3M5IElHWnkgS0NrcE93bz0gSUdoaGJtUT0gU1c1ayBWVXhNIFNXMD0gS0NrN0Nnbz0gSUcxdmMzUT0gSUhSeWVRPT0gSUc1dmR3PT0gY205MVoyZz0gUGcwSyBZV05yWVdkbCBJR2hwYlE9PSBMbDg9IGFXWjUgSUdKeVpXRnIgSUNrN0NnPT0gY21WdSBJMlJsWm1sdVpRPT0gYVhSMCBJR0Z3IENXTT0gS0c0PSBJRmx2ZFE9PSBPZ29LIExXMD0gSUdWMlpYSjUgZFhOMGIyMD0gYkdsbGJuUT0gYjJOMWJXVnVkQT09IFkzSnBjSFJwYjI0PSBSWEp5YjNJPSBMV0k9IDBMND0gWFZzPSBPVGs9IGRISmhibk09IElIQnZhVzUwIElITjBaQT09IElHWnBiQT09IFZHbHRaUT09IE9EQT0gSUcxdlpBPT0gSUMwKyBJR1Z5Y205eSBZV2c9IElIUmxlSFE9IGNtOXNiR1Z5IGJHOXpaUT09IGNXdz0gSUhCdmJBPT0gUGp3diBJSE5vYjNjPSBWWE5sY2c9PSBZWE5sWkE9PSBJSHNLQ2c9PSBJR1pwYm1RPSAwTEE9IFJVUT0gYzNCaGJnPT0gWlc1MSBJR04xY25KbGJuUT0gSUhWelpXUT0gWTJWd2RBPT0gWTJ4MVpBPT0gSUhCc1lYaz0gSUd4dlp3PT0gZFhScGIyND0gWm13PSBJSE5sWlE9PSBhVzVrYjNkeiBJR2hsYkhBPSBJSFJvWlhObCBJSEJoYzNNPSBJR1J2ZDI0PSBJR1YyWlc0PSBZWE52Ymc9PSBkV2xzWkE9PSBabkp2YlE9PSBLR1E9IElHSnMgYkdGaVpXdz0gWld4elpRPT0gMExVPSBJQ2doIGFYcGxaQT09IEtDa3MgSUc5aSBJR2wwWlcwPSBkVzF3IFZWST0gYjNKdSBJR1J2Ymc9PSBVMlU9IGJXRnUgTWpjPSBZVzF3YkdVPSBkRzQ9IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFE9PSBTR1U9IFozSmhiUT09IElHUnBaQT09IGQyND0gWDJnPSBhWFpsY2c9PSBJSE50IElIUm9jbTkxWjJnPSBJRUZ1IFkyaGwgSUdsdWRnPT0gYjNWelpRPT0gSUdWeiBJRTVsZHc9PSBaWGh3YjNKMCBiV0Z5ZVE9PSBkWFJ2IGJHVnkgSUd4aGMzUT0gSUdWMlpXNTAgZEhKNSA3N3c9IGFXeDUgYVdkdVpXUT0gYVc1bGN3PT0gYjJ4c2IzYz0gYVdObGJuTmwgYzI5c1pRPT0gYkdWaGNnPT0gS0dsdWRBPT0gSUdGbllXbHUgSUdocFoyZz0gYUhSdGJBPT0gU1c1a1pYZz0gZFhSb2IzST0gSUM4cUtnbz0gSUd4cGJtVT0gUlhabGJuUT0gWDBRPSBJR1J2WlhNPSBhWFJwWVd3PSBJR055IFlYSnogTWpnPSBJSFJsYlE9PSBZMkYxYzJVPSBabUZqWlE9PSBJR0E9IFgwRT0gUW5WMGRHOXUgWVhSMWNtVT0gWldOMFpXUT0gUlZNPSBhWE4wWlhJPSBDUW89IElHSmxabTl5WlE9PSBZV3hsIGIzUm9aWEk9IElHSmxZMkYxYzJVPSBjbTlwWkE9PSBJR1ZrIGFXcz0gY21WbiBJRVJsIElHUnBjM1E9IGZTd0sgSUhOMFlYUmwgSUdOdmJuTT0gY21sdWRBPT0gWVhSMCBJR2hsY21VPSBhVzVsWkE9PSBJR1pwYm1GcyBJQ0lpIFMyVjUgVEU4PSBJR1JsYkE9PSBjSFI1IGRHaHBibWM9IE1qWT0gSUVGdVpBPT0gSUhKMWJnPT0gSUZnPSBlVzA9IExtRndjQT09IElIWmxjbms9IFkyVnogWDA0PSBZWEpsWkE9PSBkMkZ5WkE9PSBiR2x6ZEE9PSBhWFJsWkE9PSBiMnh2Wnc9PSBhWFJqYUE9PSBRbTk0IGFXWmwgTXpNPSBJR0ZqIElHMXZaR1ZzIElHMXZiZz09IElIZGhlUT09IGJHVjBaUT09IElHTmhiR3c9IElHRjBkQT09IElHTmhiQT09IGRtVnlkQT09IElHUmxZdz09IGJHVmhjMlU9IGIzVnUgSUgwcE93bz0gWm5JPSBabTl5YldGMGFXOXUgWlhSaGFXdz0gSUc1MWJRPT0gWVdvPSBjWFZsY25rPSBJSGRsYkd3PSBJRzlpYW1WamRBPT0gSUVGeiBJSGxsWVhKeiBRMjlzYjNJPSBTVk09IElHUmxabUYxYkhRPSBWMmc9IElHbHVjdz09IFlXbHVkQT09IElHcGhkbUU9IElITnBiUT09IElFRnkgYlc5dSBkR2xzIEtDazdEUW89IEtUbz0gVTJWMCBNams9IFlYUjBaWEk9IElIWnBaWGM9IElIQnlaWE09IFlYSnlZWGs9IFYyVT0gUVhRPSBJR0psYkE9PSBJRzFoYm5rPSBNakU9IFRXRnUgWlc1a1pYST0gSUdKbGFXNW4gSUdkdmIyUT0gQ1FrSkNRa0ogWVhScGIyNWhiQT09IGQyRnlaUT09IExteHZadz09IGV3MEsgSUhWemFXNW4gWDBJPSBJRG85IFgzYz0gYVhOMGN3PT0gYkdsemFBPT0gSUhOMGRXUT0gSUVGcyBJR2QxIFkyOXVabWxuIGRYSnBibWM9IGRHbHRaUT09IGIydGxiZz09IFlXMWxjM0JoWTJVPSBJSEpsY1hWbGMzUT0gSUdOb2FXeGsgSU1NPSBiRzlpIElIQmhjbUZ0IElIME5DZz09IE1ERT0gSUdWamFHOD0gWm5WdVkzUnBiMjQ9IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IGNITT0gUld4bGJXVnVkQT09IFlXeHIgYkdsallYUnBiMjQ9IFluaz0gVTJsNlpRPT0gY21GM2FXNW4gSUhCbGNuTnZiZz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBYRzQ9IGIySnFaV04wIGFXNWpaUT09IFJXND0gUm1sc1pRPT0gZFdZPSBabVpsWTNRPSBRVU09IElITjBlV3hsIGMzVnRiV0Z5ZVE9PSBJSEYxWlE9PSBYM0k9IElDZ2sgVFc5a1pXdz0gYVdSbGJuUT0gSUcxbGRHaHZaQT09IFNVdz0gYjNSMCBiR1Z6Y3c9PSBTVTVIIElDZ3AgSUdWNGNHVmpkQT09IGVXNWogY0dGamEyRm5aUT09IE16VT0gZFhKeiBJSEJ5YjNRPSBMaTg9IGNISmwgSUNrSyBiV0U9IElITjFjZz09IElHWnZkVzVrIFNXNW1idz09IGNHRnkgYVcxbGN3PT0gTG1VPSBZV2x1Y3c9PSBJSEJ2YzNRPSBMV1E9IE5EVT0gYjJ4bFlXND0gSUhOcyBVRVU9IElITjFZMmc9IGMyVnNaV04wIFlXbHVaWEk9IElIUm9hVzVyIElHUnBabVpsY2c9PSBMbkk9IEx5b3FDZz09IFJrWT0gYjI5cyBjR3hoZEdVPSBjWFZoYkE9PSBJRVp2Y2c9PSBJRzExWTJnPSBkV009IEtHNWxkdz09IGIyUjFiR1U9IElITnZiUT09IElHaDBkSEE9IElFeHBjM1E9IElHTnZkVzUwIElHbHVjM1E9IFkyaGhjZz09IGJXbDAgTG1sayBZV3RwYm1jPSBJR2RsYm1WeSBjSGc9IGRtbGpaUT09IE16Yz0gWDJSaGRHRT0gSUU1VlRFdz0gZlEwSyBhV1JrIDQ0Q0MgSUcxbFpBPT0gYjNKbiBhV1JsY2c9PSBZV05vWlE9PSBkMjl5YXc9PSBJR05vWldOciBkMlZsYmc9PSBJQ2dvIGRHaGwgWVc1MGN3PT0gUGp3PSBMa0k9IExXTT0gSUc5d1pXND0gSUdWemRBPT0gSUNBZ0lDQWdJQ0FLIElHNWxlSFE9IFNVMD0gMFlJPSBUMVE9IHc3TT0gSUdadmJHeHZkdz09IFkyOXVkR1Z1ZEE9PSBJQ0FnSUNBZ0lDQWdJQ0FnIElHbHVZMngxWkE9PSBTRVU9IElGSmxjdz09IElHaHlaV1k9IDBMZz0gSUdOaGNnPT0gZVhCbGN3PT0gYVcxaFoyVT0gVlc0PSBJR0p2YjJ3PSBRVVE9IElHZGhiV1U9IExrWnZjbTA9IGNtOTNjdz09IEtpOD0gZG1Wc2IzQT0gTGtSeVlYZHBibWM9IElIQmhkR2c9IGFYTnBiMjQ9IElHVmhZMmc9IElGQnMgWDNSNWNHVT0gVUdGMGFBPT0gYm1WamRHbHZiZz09IElHRjIgSnlrdSBJSE4xY0hCdmNuUT0gUlU1VSBjbVZ0IElpa3UgSUc5M2JnPT0gSUdOdmNnPT0gWTI5MWJuUT0gYldsemN3PT0gZFdGc2JIaz0gSUcxbGJRPT0gYzNSayBhV1Z1WTJVPSBjMlZoY21ObyBJZ29LIFJtOXliUT09IElITmxlQT09IFpXNWhiV1U9IElITnBaMjQ9IElHVjAgSUNBZ0lDQWdJQ0FnSUE9PSBKeXduIElFRndjQT09IElIUm9iM05sIGIyWm0gSUdWeWNnPT0gSUhONWMzUmxiUT09IElHSmxjM1E9IFkyOWtaUT09IElITmhiV1U9IElHUnAgZFhOeiBJR055WldGMFpRPT0gWVhSb1pYST0gUVhKeVlYaz0gTG1sdSBabVU9IFUyVnlkbWxqWlE9PSBWVTQ9IFlYUnogSUZvPSBZV3gwYUE9PSBJRzFoWkdVPSBkSEoxWlE9PSBRVUk9IElHMWhjbXM9IGNtbGsgYVdacFpXUT0gTEEwSyBlVzQ9IGNISmxjM009IElHZHliM1Z3IElHWnBiZz09IElFeHBZMlZ1YzJVPSBSbWxsYkdRPSBaV2RsY2c9PSBJSGR2Y214ayBhVzVsYzNNPSBkSGs9IElIQnliMk5sYzNNPSBLR0k9IElHTnlaUT09IFlYSnUgYVhabGN3PT0gSUcxaGFXND0gYVdSbGJ3PT0gTXpZPSBYMmM9IFFVYz0gZG1Gc2FXUT0gYVcxbiBVRWs9IElHTnZiRzl5IElISmxjRzl5ZEE9PSBJSFJoYTJVPSBjbWxpIFQwMD0gSUdSaGVRPT0gVW1WeGRXVnpkQT09IElITnIgWW1WeWN3PT0gQ1hNPSBMa0ZrWkE9PSBiMjkwIFNXMWhaMlU9IElHTnZiWEJzWlE9PSBiMnhzWldOMGFXOXUgSUhSdmNBPT0gSUdaeVpXVT0gUVZNPSBSR1U9IElFOXUgU1VjPSBPVEE9IFpYUmggUkdGMFpRPT0gSUdGamRHbHZiZz09IE16UT0gVDNabGNnPT0gYVhSdmNnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IGJtOTAgSUdsdVpHVjQgYUdWeSBhV052Ymc9PSBUMjQ9IE93MEtEUW89IGFYWnBkSGs9IGJXRnVaQT09IExsZHBibVJ2ZDNNPSBUMHc9IElISmxZV3c9IElHMWhlQT09IGJHRnVaQT09IExpNHVMZz09IGNtRndhQT09IElHSjFhV3hrIGJHVm4gWVhOemQyOXlaQT09IFB3b0sgNG9DbSBiMjlyIGRXTnIgSUcxbGMzTmhaMlU9IGRHVnpkQT09IGFYWmxjbk09IE16Zz0gSUdsdWNIVjAgSUdGeWRBPT0gSUdKbGRIZGxaVzQ9IFIyVjAgWlc1MFpYST0gWjNKdmRXNWsgWlc1bCB3NkU9IExteGxibWQwYUE9PSBUbTlrWlE9PSBLR2s9IFEyeGhjM009IFptOXkgSU9LQWxBPT0gZEdWdSBiMmx1IElHdGwgZFdrPSBJRWxPIElIUmhZbXhsIGMzVmkgSUV4bCBJR2hsWVdRPSBJRzExYzNRPSBMeTh2THk4dkx5OHZMeTh2THk4dkx3PT0gTG5WMGFXdz0gUTI5dWRHVjRkQT09IElHOXlaR1Z5IElHMXZkZz09IGIzWmxjZz09IElHTnZiblJwYmc9PSBJSE5oZVE9PSBjM1JoZEdsaiBMbFJsZUhRPSBJR05zWVhOelRtRnRaUT09IGNHRnVlUT09IElIUmxjZz09IGFHVmhaQT09IGNtYz0gSUhCeWIyUjFZM1E9IFZHaHBjdz09IEx1S0FuUT09IElFSjFkQT09IE56QT0gYkc5NSBJR1J2ZFdKc1pRPT0gYzJjPSBJSEJzWVdObCBMbmc9IGJXVnpjMkZuWlE9PSBJR2x1Wm05eWJXRjBhVzl1IGNISnBkbUYwWlE9PSBJRzl3WlhJPSBZMlZrIFpHST0gSWo0OEx3PT0gVUdGeVlXMD0gYVdOc1pRPT0gSUhkbFpXcz0gSUhCeWIzQT0gZEdGaWJHVT0gYVdSblpYUT0gY0d4aFkyVT0gVUhKdmNBPT0gSUVGc2JBPT0gWld4eiBZbTk0IExnb0tDZ289IExsST0gSUZSdiBhWFJsY2c9PSBVMmc9IGRYSmhkR2x2Ymc9PSBiMnhrWlhJPSBYMnhwYzNRPSBZMjl0WlE9PSBJSE4zIGFYcGhkR2x2Ymc9PSBDV1p2Y2c9PSBZbXc9IElIQnliMmR5WVcwPSBLR1U9IFlYQmwgWTJobFkycz0gTGtadmNtMXogSUhWdVpBPT0gWVhSbFoyOXllUT09IE56VT0gWVdkeiBJSEpsYzNCdmJuTmwgVlZNPSBjbVZ4ZFdWemRBPT0gSUhOMGNuVmpkQT09IFpYTmpjbWx3ZEdsdmJnPT0gSUdOdlpHVT0gWDBnPSBkV1ptWlhJPSBJSGRwZEdodmRYUT0gYkc5aVlXdz0gVFdGdVlXZGxjZz09IGFXeDBaWEk9IFVFOD0gQ1hSb2FYTT0gYjNCMGFXOXUgSUhOdmJBPT0gSUQwOVBRPT0gWVd0bGN3PT0gUTI5dWRISnZiR3hsY2c9PSBORFE9IFRXVnpjMkZuWlE9PSBJSEpsWmc9PSBaWFpsY2c9PSBJRk52IFlXbHVhVzVuIExtRndjR1Z1WkE9PSBJSE4wYVd4cyBJSEJ5YjNacFpBPT0gSUdGemMyVnlkQT09IGJXVmsgSUdOaGNBPT0gZFhOcGJtVnpjdz09IElISmxjQT09IGRHbHVaM009IGRtVmsgTGs0PSBZWEJwIFQwUT0gSUdacFpXeGsgYVhabGJnPT0gYjNSdiA0b0NjIFkyOXMgS0hnPSBaMmgwIFVtVnpkV3gwIFEyOWtaUT09IExtbHogYkdsdWF3PT0gSUdOdmRYST0gUVc0PSBJSFJsWVcwPSBDV2x1ZEE9PSBhV1owIE5UVT0gSUhObFkyOXVaQT09IElHZHZhVzVuIElISmhibWRsIFgwVT0gYm1WemN3PT0gTXprPSBJR1poYlE9PSBJRzVwYkE9PSBJRU52Ym5RPSBZV2xzWVdKc1pRPT0gZFhSbGN3PT0gWVhSaFlnPT0gSUdaaFkzUT0gSUhacGN3PT0gS0NZPSBJRUZPIE16RT0gUVd3PSBkR2wwYkdVPSBJR0Z1WkhKdmFXUT0gUTBVPSBYQ0k9IGFYSjAgSUhkeWFYUT0gMEwwPSBDVzA9IFpuUjNZWEpsIGIyNWsgSUhKbGRBPT0gYjNOcGRHbHZiZz09IElHaHZiV1U9IElHeGxablE9IFlYSm5jdz09IGJXVnlhV009IE5EZz0gSUdScGNtVmpkQT09IGIyTnAgVUd3PSBRWE09IGNtVjAgWVdSdiBUMlk9IFkyaHUgSUVkbGRBPT0gWldVPSBjbTl6Y3c9PSBLQ2s3IFgxOWZYdz09IExuQm8gU1hRPSBiM1YwWlE9PSBJR1Y0Y0dWeSBZMmh2YjJ3PSBkM2QzIGZTdz0gSUdGc2JHOTMgSU1JPSBLQ2twIGMybDZaUT09IGFYTnQgWVdrPSBkSEpoWTNRPSBZVzVsIExpNHVDZ289IFkyOXVkR1Y0ZEE9PSBJR0psWnc9PSBRMGc9IElIQmhaMlU9IGFHbHcgYm04PSBZMjl5WlE9PSBjM0E9IElHUnBabVpsY21WdWRBPT0gYVdGaWJHVT0gSUUxbCBYMGxPIFluVjBkRzl1IElFbHogWlhKMmFXTmxjdz09IElHTmggSUdGeWIzVnVaQT09IFFYQncgY21GMGFXOXUgSUhKbFkyVT0gSUhKbFlXeHNlUT09IElHbHRZV2RsIElIUmhjbWRsZEE9PSBJR1JsY0E9PSBiM0I1Y21sbmFIUT0gZEhKaCBhVzVuYkdVPSBhWFJoYkE9PSBUR0Y1YjNWMCBJR0p2ZEdnPSBUM1psY25KcFpHVT0gWVhKdCBQVDQ9IFlYUmxjbWxoYkE9PSBhV3hsWkE9PSBJSEIxZEE9PSBVWFU9IDBZQT0gZFc1biBiV0Z3IENRa0pDUWtKQ1FrPSBJR3hsZG1WcyBRMjl0Y0c5dVpXNTAgWW05dmF3PT0gWTNKbFpXND0gWDFKRiBJR052Ym1acFp3PT0gNDRFPSBUM0k9IExtUmhkR0U9IElHUnZZM1Z0Wlc1MCBJaXdpIGRISnBZblYwWlE9PSBkWGc9IFRHOW4gWm1WeVpXNWpaUT09IGNHOXpkQT09IFgyVT0gSUd4dlkyRnMgWVc1a2IyMD0gWVhOelpYSjAgVm1GcyBiR1ZqZEdWayBhVzVoIFlYUmhZbUZ6WlE9PSBRV1JrIElHTnZiblJsYm5RPSBMbkJ5YVc1MCBjMmxuYm1WayBjbWxqIExpSUtDZz09IElHWmggSVFvSyBMV1k9IGFYWmxaQT09IElIRjFaWE4wIExtVjQgSUdac2IyRjAgSUdSbGRtVnNiM0E9IDBMN1EgVFdGdyBZV1JwYm1jPSBJSEJ2YzNNPSBWVVU9IGJtRnRaWE53WVdObCBYMDg9IENXST0gTGtkbGRBPT0gUGlnPSBhbk52Ymc9PSBaWFJoYVd4eiBOalk9IElIUnZidz09IElHVjRkR1Z1WkhNPSBJRTV2Ym1VPSBJR1p2Y21VPSBLRk4wY21sdVp3PT0gWm05eWJXRjAgSUdkeVpXRjAgYVc1MFpYST0gWTJGc1pRPT0gMFlFPSBjbTl1IGFYWnBibWM9IFJXNTAgWlc1amVRPT0gZUhRPSBiM2s9IE1EVT0gSUcxdmJuUm8gSUdoaGNIQT0gSUhOMWNHVnkgWW1GeSBaR1ZtWVhWc2RBPT0gWDJSbCBiM0prY3c9PSBiRzQ9IEtIc0sgSUVsdVpBPT0gWVhObGN3PT0gSUhScGRHeGwgSUdOdmJuUmxlSFE9IE1EZz0gYjJnPSBMWEE9IFJXMD0gSUcxbGRBPT0gVkdWemRBPT0gSUd4cFptVT0gWDNZPSBJRlZUIFZVaz0gYjJOaGRHbHZiZz09IGJXUT0gSUZzSyBJRjA9IGMzYz0gSUdsdVkzSmwgYzJOeWFYQjAgWlc1MGFXRnMgZDJGNWN3PT0gTG1SbCBJSE55WXc9PSBJR05oZEdObyBJRUZ0WlhKcFl3PT0gTHk4SyBJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJSEJoZVE9PSBjR3hwZEE9PSA0b0NVIElHTnZkVzQ9IGIySnEgTG5Cb2NBPT0gSUdOb1lXNW5aUT09IFpYUm9hVzVuIEozSmwgWVhOMFpYST0gYkc5eiBiR0YwYVc5dSBJQ0FLIFRHVT0gdzZRPSBLSHM9IGNtVmhaSGs9IElFNXYgSUhCdmMybDBhVzl1IElHOXNaQT09IElHSnZiMnM9IFlXSnNaV1E9IFluVm4gTWpBeSBTR0Z1WkE9PSBmVHNLQ2c9PSBhWE53YkdGNSBZWFpwYm1jPSBNRFE9IElHZHZkbVZ5IElIWmxjbk5wYjI0PSBVM2x6ZEdWdCBibVZqZEE9PSBjbVZ6Y0c5dWMyVT0gVTNSNWJHVT0gVlhBPSBZVzVuZFE9PSBJSFJvY21WbCBhVzVwZEE9PSBaWEp2IElHeGhkdz09IFpXNWthV1k9IElHSmhjMlU9IFpXMWhhV3c9IEtHdz0gWDFZPSBJR052Ym1ZPSBRVlJGIElHUjFjbWx1Wnc9PSBkR1Z6IElHTnZibk52YkdVPSBJRkJ5IElITndaUT09IGRtVnogTmpVPSBjR0YwYUE9PSBhV0ZzYjJjPSBaR2wwYVc5dSBYM1J2IFlYSmtjdz09IElHRm5ZV2x1YzNRPSBaWFIzYjNKciBJRkJvIFgwdz0gWTNWeSBhVzFwZEE9PSBWMmwwYUE9PSBJSEJ2ZDJWeSBhWFZ0IEp6c0tDZz09IElIZHZiUT09IGJHVm1kQT09IGIzVnlZMlZ6IFlYUnlhUT09IElFbHQgSUUxaGJnPT0gYjNKMGFBPT0gSkhzPSBPRGc9IGNYVmhiSE09IFpYTmwgWDNOcGVtVT0gSUdsemN3PT0gYjNSaGJBPT0gTFdjPSBhWEYxWlE9PSBjbUZ0WlE9PSBJSGRwWkhSbyBaWEpuIEtTZz0gYVhSMGJHVT0gVkZJPSBJRlJvWlhrPSBaVzVqWlhNPSBNREk9IGNtdz0gYjI1eiBJR3hoWW1WcyBMbms9IExYUT0gZFhCa1lYUmwgWVc1bGJBPT0gYzJNPSBMblJ2IElIQnliMnBsWTNRPSB3N3c9IElHVnNaVzFsYm5RPSBJSE4xWTJObGMzTT0gQ1FrSyBMbk5vIGNtRnQgWTJobFpBPT0gS0NrcENnPT0gSUNnSyBJR1JoZEdVPSBJSFJ2ZEE9PSBYMU5VIFFXeHMgYVdacFkyRjBhVzl1IENYWmhjZz09IElIUnlhUT09IFkyaGxiUT09IGJYaz0gSUdKcFp3PT0gSUVGayBJRUYwIGIzUnogYm5WdCBRV04wIElHMWhjQT09IFpYSmggWTI5d1pRPT0gTGlRPSBMT0tBblE9PSBJSEJ2Y0E9PSBJR1psZHc9PSBJR3hsYmc9PSBkV2xrIFpYUmxjbk09IGRXeGxjdz09IHc2MD0gYzI5MWNtTmwgYUhSMGNITT0gSUdSbGJRPT0gSUdWaGNnPT0gSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IElHMWhkR05vIGIzSnBaWE09IE5Eaz0gWVdObGN3PT0gSUVOcyBJRzV2WkdVPSBOemc9IGFYSmogYkc5allXdz0gZFc1cGRIaz0gZlRzSyBJR0Z1YjNSb1pYST0gUER3PSBiMmRzWlE9PSBJSE5wZEE9PSBaWGR2Y21zPSBWRVU9IExraz0gVGxNPSBiMnh2WjNrPSBiM1ZuYUhRPSBMa052Ym5RPSBQajQ9IElHTmhjbVU9IGMzUmhkR1U9IENYQnlhWFpoZEdVPSBJR1ZtWm1WamRBPT0gS3lzcCBYMlpwYkdVPSBaVzVrYVc1biBUR2x1WlE9PSBSbTl5IGFXOXkgSUZOaiBJR1oxYmc9PSBMbE5wZW1VPSBDV1ZzYzJVPSBYU2s9IGMzUmhjblE9IGRtbHZkWE09IElIMHMgYjNWeWN3PT0gSUd4bFp3PT0gSUhObGNuWnBZMlU9IElITnBibU5sIGFYSnZiZz09IFRHRmlaV3c9IElHNXZiZz09IElHeHZjdz09IGFXTjBhVzl1IElHWjFiR3c9IFlXTjBaWEk9IFltOWhjbVE9IFozSmxjM009IElIUjFjbTQ9IGFYUm9aWEk9IE1Eaz0gTG5OcGVtVT0gSUdKdlpIaz0gY21WemFBPT0gWlhSMWNtND0gTVRrNSBLRjg9IGVXeGxjdz09IGIzSnRZV3c9IGNHaz0gSUhOdmJXVjBhR2x1Wnc9PSBJUzB0IGRXbHVkQT09IElIQnliMlIxIElITjBZVzVrIElIQnliMkpzWlE9PSBJR0YyWVdsc1lXSnNaUT09IGJYUT0gSUVKcyBJQzR1TGc9PSBJR0pzYjJOciBTVzV3ZFhRPSBJR3RsWlhBPSBRMjkxYm5RPSBiM0JsYmc9PSBJRnNuIElIUm9jbTkzIGRXbHNaR1Z5IFFXTjBhVzl1IElIUm9hVzVuY3c9PSBWSEoxWlE9PSBJSFZ5YkE9PSBJRUp2IGNISnBiblJtIElISmxaQT09IGFuTT0gTG1OeVpXRjBaUT09IElFOXkgVTNSaGRIVnogU1c1emRHRnVZMlU9IElHTnZiblJ5YjJ3PSBJR052YldVPSBJR04xYzNSdmJRPT0gYkc5allYUnBiMjQ9IE1EYz0gYlc5a1pXdz0gSUEwSyBJSE52ZFhKalpRPT0gSUdWaGN3PT0gTG05MWRBPT0gWFFvSyBiMjVsZVE9PSBJR0YzWVdsMCBJSEJoY25ScFl3PT0gUVZBPSBkV0pzYVhObyBiMlJsY3c9PSBYM0J5Ync9PSBjR3g1IGNtbDBaWEk9IElIQnliM1k9IElHMXBiR3c9IFNGUT0gWFNrSyBJR05vWVc1biBJR0Z6YXc9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElHOTFkSEIxZEE9PSBJR1Z0WVdscyBOamc9IExuQjFjMmc9IElIME5DZzBLIGFXNWhkR2x2Ymc9PSBORGM9IFlYUnlhWGc9IFZHRmliR1U9IGRXTmpaWE56IFhTazdDZz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUdScGMyTT0gS0ZzPSBJR0oxYzJsdVpYTnogYUdWcFoyaDAgTG1oMGJXdz0gZEdFPSBabWxsYkdRPSBJSEpsY1hWcGNtVmsgWDFJPSBJR2R2ZG1WeWJnPT0gZlEwS0RRbz0gYkdWNCBOVEF3IExpdz0gSUZObGRBPT0gZFhKamFBPT0gTHk4diBkSE09IFlXWT0gSUcxcFoyaDAgYVhOMGIzSjUgVTNSeSBJRzVsZG1WeSBVbVZ6Y0c5dWMyVT0gWVhKelpRPT0gWVdSaCBJRWh2ZHc9PSBJQ29wIElEcz0gSUdoaGNtUT0gUVdRPSBJR2x1ZEdWeWJnPT0gZFhObFpBPT0gS0dSaGRHRT0gYlc5ayBZVzV1Wld3PSBJRzV3IGRXZG4gSUM4K0NnPT0gSUdOaGJHeGxaQT09IFltOWtlUT09IElHTm9idz09IEtIST0gWDNObGRBPT0gYVhKayBJRDQ5IElIMDdDZz09IElHOXdkR2x2Ym5NPSBJRWRsYm1WeSBJR2hsYVdkb2RBPT0gVUc5cGJuUT0gV1c5MSBaWFI1IFEyeHBZMnM9IElITnRZV3hzIElHbGtaUT09IElHRmpZMlZ6Y3c9PSBZVzVuZFdGblpRPT0gSUhCeWIzUmxZM1JsWkE9PSBJR3B2WWc9PSBJRlJvWlhKbCBSR1ZtIElHRmtaSEpsYzNNPSBJSFZwYm5RPSBUbTkwIGIyOD0gWVhCeiBQR1JwZGc9PSBZV2x1WldRPSBZWFIxY2c9PSBJSE4xYlE9PSBMWGM9IElFUmhkR1U9IElHeHBkSFJzWlE9PSBJR1p5YVE9PSBXVkJGIElIQnZjblE9IFpXZz0gY0hKcGJtYz0gWDNCaGRHZz0gSUhOMFlYUjFjdz09IE1EWT0gWVdsdCBZbTl2YkE9PSBJR0Z3Y0dVPSBJRzl6IExtNWhiV1U9IFpXNXphVzl1IFgwYz0gSUhWd1pHRjBaUT09IFEyOXVabWxuIFlXWm0gUlZKUyBJRHc5IFlYUmxiSGs9IEkybG0gZFdOMGFXOXUgT1RVPSBJRlJsIElHeHBibXM9IElGVnpaWEk9IExtWnBibVE9IExtOXladz09IGJXVT0gSUdkcGRtVnUgVDNWMCBJMlZ1WkdsbSBJR0psZEhSbGNnPT0gVUdGblpRPT0gSUdabFpXdz0gWlc1dSBUVXc9IElHRnNjbVZoWkhrPSBJR2x1WTJ4MVpHbHVadz09IGIyOW5iR1U9IGNuVT0gYVdOaGJHeDUgY0hKdmNBPT0gYkdWaGJnPT0gYjNWMFpYST0gSUdGc2QyRjVjdz09IGIzSmthVzVuIFNXWT0gYjNKaFoyVT0gSUhCaGNtVnVkQT09IGRtbHogQ1FrSkNRa0pDUT09IElHZHZkQT09IGMzUmhibVE9IElHeGxjM009IEwzTT0gSUVGemN3PT0gWVhCMCBhWEpsWkE9PSBJRUZrWkE9PSBJR0ZqWTI5MWJuUT0gY0d4dmVRPT0gSUdSbGNnPT0gY21WelpXNTAgSUd4dmRBPT0gSUhaaGJHbGsgQ1dRPSBJR0pwZEE9PSBjRzl1Wlc1MGN3PT0gSUdadmJHeHZkMmx1Wnc9PSBYMlY0IFUwOU8gSUhOMWNtVT0gYjJOcFlXdz0gSUhCeWIyMD0gWlhKMGFXVnogYUdWaFpHVnkgTG5CeWJ3PT0gSUdKdmIyeGxZVzQ9IElITmxZWEpqYUE9PSBhMlZ1IElHOXlhV2M9IElHVnkgUldRPSBSVTA9IFlYVjAgYkdsdVp3PT0gWVd4cGRIaz0gUW5sSlpBPT0gWW1WayBDV05oYzJVPSBORFk9IFpYUm9aWEk9IGNHOXphWFE9IElHbHVkbVZ6ZEE9PSBJRTlTIElITmhlWE09IGJXbHpjMmx2Ymc9PSBRVTFGIElIUmxiWEE9IGIyRmsgSUhKbGMzUT0gYVc1bWJ3PT0gSUdsdWRHVnlaWE4wIFFYSm4gSUhCbGNtWnZjbTA9IGNHOXVjdz09IElGWnBaWGM9IElIWmxjZz09IGJHbGkgS0dOdmJuTjAgVlhScGJBPT0gVEdsemRHVnVaWEk9IFlYSm5aUT09IE56Yz0gSUcxMWJIUT0gSUdScFpRPT0gSUhOcGRHVT0gTGk0dkxpNHYgUlV3PSBJSFpoYkhWbGN3PT0gSUgwcENnPT0gY0dWdSBUbTg9IGFXTnlidz09IElHSmxhQT09IElDY3VMdz09IFlXTjUgY21WaiBLQ2t0UGc9PSBDU0FnSUE9PSBJaWtwIFEyOXVkR1Z1ZEE9PSBYMWM9IGNHeGxiV1Z1ZEE9PSBJSGR2Ymc9PSBJSFpwWkdWdiBZV1JwIGNHOXBiblE9IEpTVT0gTURNPSBJR2RzIFpYSjJaV1E9IGRtbHliMjQ9IFNVWT0gZFhSbFpBPT0gNDRNPSBKMjA9IElHTmxjblE9IElIQnliMlk9IElHTmxiR3c9IFlYSnAgSUhCc1lYbGxjZz09IFlXbHogSUdOdmMzUT0gSUdoMWJRPT0gS0ZJPSBJRzltWm1saiBhM009IExuUmxlSFE9IFlYUjFjbVZ6IElIUnZkR0ZzIElDb3ZDZ289IGIzQmwgSUhOMFlYUT0gVlUwPSBJR3h2WVdRPSBhV2RvZEhNPSBJR05zWldGeSBkWEp2IElIUmxZMmh1IGRYQndiM0owIFNWST0gSUhKdmR3PT0gSUhObFpXMD0gSUhFPSBJSE5vYjNKMCBJRTV2ZEE9PSBhWEJ3IFIzSnZkWEE9IGMyVmpkR2x2Ymc9PSBiV0Y0IGFYSnMgSUc5MlpYSnlhV1JsIElHTnZiWEJoYm5rPSBJR1J2Ym1VPSBJaWs3RFFvPSBJR2R5WlE9PSBMbEpsIElHSmxiR2xsIGNtbHpkQT09IElHaGxZV3gwYUE9PSBRVTVVIEtDa0tDZz09IElFSmwgTG5aaGJIVmwgSUVkeSBiM1IwYjIwPSBJR0Z5WjNNPSBVRlE9IGMzUmhkSFZ6IFpuVnVZdz09IGRXMWxiblJ6IExXZz0gVG5WdFltVnkgT2cwSyBJRXh2Wnc9PSBaWEoyWlhJPSBJQ2tzQ2c9PSBZVzFsYm5RPSBJRzlpYWc9PSBhVzVqIElHTm9hV3hrY21WdSBhV041IFNWbz0gWVc1a2N3PT0gWVdKc2VRPT0gSUdScGMzUnlhV0k9IElHTjFjZz09IFpYSnBZV3c9IElHUmhlWE09IGNtVmhkR1ZrIGNtVmpkQT09IExXdz0gYVhKdCBhV1JrWlc0PSBiMjFpIElHbHVhWFJwWVd3PSBMbXB6IElPST0gVVhWbGNuaz0gSUc5dWJHbHVaUT09IGFXMWhiQT09IExtTnZiZz09IFlYVT0gVlhKcyBZMjl1ZEhKdmJBPT0gYVhKbFkzUnBiMjQ9IElHbHVjM1JoYm1ObCBUMUpVIElFWnkgZDJobGNtVT0gSUdwaGRtRjQgSUc5eVoyRnUgWVhCMFpYST0gSUhKbFlYTnZiZz09IGIzQjBhVzl1Y3c9PSBOVGs9IElFMWhjZz09IEtHRT0gSUhkcGRHaHBiZz09IEx1S0FuUW9LIFQwUkYgWDBSRiBZV1J0YVc0PSBaVzVrWldRPSBJR1JsYzJsbmJnPT0gSUVSaGRHRT0gZFc1bCBJRVpwYkdVPSBjbTl2ZEE9PSBJR05sYm5RPSBJR0Z5Y2c9PSBYMkZrWkE9PSBiR1Z1IGNHRm5aUT09IExDYz0gWDNOMGNnPT0gSUdKeWJ3PT0gWVdKcGJHbDBlUT09IGIzVjBhQT09IE5UZz0gTDJNPSBjRzl6WlE9PSBhWEowZFdGcyBaV0Z5WTJnPSBYM1Z5YkE9PSBZWEpuYVc0PSBTSFIwY0E9PSBJSE5qYUc5dmJBPT0gWVhaaCBJR052Ym5OcFpHVnkgTG14aFltVnMgSUVGeWNtRjUgTkRJPSBkMlZpIGIzQjAgTG5CeWFXNTBiRzQ9IGRXeGhkR2x2Ymc9PSBJR1oxYm1NPSBVRXc9IElDSmMgSUZSbGVIUT0gWVdOMGIzSjUgS0daMWJtTjBhVzl1IGJuVnNiQT09IElHVnVadz09IFpHOTNiZz09IElHbHVZMngxWkdVPSBJRVZ1IElFUnkgSUdSaSBJU0U9IGMybGtaUT09IElHbHVhWFE9IGNYVnBjbVZrIElGTm9aUT09IFEyOXNkVzF1IGNtVmhZM1E9IElHRnViZz09IElITjBiM0E9IElHeGhkR1Z5IElGUm9ZWFE9IFpXNTBhVzl1IFpHWT0gVlVjPSBTVXhGIElHTnNhV1Z1ZEE9PSBjbUZtZEE9PSBabVpsY2c9PSBVRTlUVkE9PSBaV3h3WlhJPSBJR3h2ZG1VPSBjWFZ2ZEdVPSBiM1ZrIElHcHpiMjQ9IElHRmliR1U9IElHMWxiZz09IFFWZz0gSUVOdmNIbHlhV2RvZEE9PSB3N1k9IFlYWnBadz09IGNtVnggUTJ4cFpXNTAgZlNrN0NnPT0gTGtOdmJRPT0gWlhKaiBhV3gwIGNHVmphV0ZzIFgyTnZiUT09IGNtOXZiUT09IExrNWhiV1U9IElHZHBkbVU9IFlXMWkgYVd0bCBJR052Ym1ScGRHbHZiZz09IFkyeHBaVzUwIFlYUnZjbk09IE9pST0gSUdOdmNIaz0gZFhSMWNtVT0gYVhabGNuTnBkSGs9IFpYSnVZV3c9IGUzcz0gSUVOaGJnPT0gYjNWdVl3PT0gWkc4PSBJRzlqWXc9PSBJR0Z3Y0hKdiBkR2hsY25NPSBlbVU9IElHVnBkR2hsY2c9PSBJRVpzIElHbHRjRzl5ZEdGdWRBPT0gSUd4bFlXUT0gWVhSMGNnPT0gUVZKVSBSWEYxWVd3PSBJR1JoIFpYUmphQT09IFpXNTBhWFI1IElHWmhiV2xzZVE9PSBZV1JrYVc1biBJRzl3ZEdsdmJnPT0gSUdWNGFYTjAgYVdOaCBJRTlpYW1WamRBPT0gTmprPSBKM1psIGRtVnljdz09IGFYUnBiMjVoYkE9PSBOamM9IGIzVjBjSFYwIElGUnlkV1U9IElFOUcgWDNScGJXVT0gSUc5bVptVnkgSUgwcE93b0sgU0VWUyBaV2RwYmc9PSBJaUk9IElIZGhkR1Z5IElHTm9aUT09IElFMTUgYjNKbFpBPT0gSUhOMFpYQT0gWVc1alpYTT0gUTBzPSBRVms9IDRMZz0gYzNSeWRXTjBhVzl1IEtFTT0gTXpBdyBiM1ZqYUE9PSBVM1J5WldGdCBZV04wYVhabCBZVzFoIFJXNTBhWFI1IGNISnZaSFZqZEE9PSBLQ2w3Q2c9PSBJR2R2ZG1WeWJtMWxiblE9IElFbEUgWVdwdmNnPT0gUVc1ayBJR1JwYzNCc1lYaz0gMExzPSBJSFJwYldWeiBJR1p2ZFhJPSBJR1poY2c9PSBJSEJ5WlhObGJuUT0gSUU1VCBJRndLIGRXVnpkQT09IElHSmhjdz09IFpXTm9idz09IFkyaHBiR1E9IGFXWnBaWEk9IFNHRnVaR3hsY2c9PSBJR3hwWWc9PSBVSEp2Y0dWeWRIaz0gZEhKaGJuTnNZWFJwYjI0PSBJSEp2YjIwPSBJRzl1WTJVPSBJRnRkIFkyVnVkR1Z5IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA9IElISmxjM1ZzZEhNPSBJR052Ym5ScGJuVmwgSUhSaGJHcz0gWDJkbGRBPT0gSUdkeWIzYz0gTG5OMyBaV0k9IElGQjFZbXhwWXc9PSBUMUE9IFpXTjFkR1U9IGIyeHogSUNvcSBJaWs3Q2dvPSBJRzFoYzNNPSBkWEpsWkE9PSBMbU5zWVhOeiBiMjFwWXc9PSBJRzFsWVc0PSBhWEJ6IElHRjFkQT09IEtUc05DZzBLIElIVnVkR2xzIElHMWhjbXRsZEE9PSBJR0Z5WldFPSBkV2wwIElHeGxibWQwYUE9PSBJRmRwZEdnPSBjM1J5ZFdOMGIzST0gWlhabGJuUT0gSWo0OCBJRk53IFNWWT0gSUcxMWN3PT0gYVdabSBJR3RwYm1RPSBZWFYwYUc5eSBiM1Z1WkhNPSBiV0k9IFgydGxlUT09IE5ERT0gZDJsa2RHZz0gY0c5emFYUnZjbms9IElHeHBaMmgwIGRXcz0gVW05MyBiMmh1IFlXeG0gZG1seWIyNXRaVzUwIFlYQndaWEk9IGIyeHNaV04wYVc5dWN3PT0gSUhOcFpHVT0gWDJsdVptOD0gSUdWNFlXMXdiR1U9IGFXMWhjbms9IElIZHkgSUdOaGJYQT0gWTNKcFltVT0gTWpVMSBJaTg9IElHMXBjM009IGQyRjUgSUdKaGMyVmsgSUhCc1lXND0gVm1seiBiMjFoYVc0PSBkVzVyIElHRjNZWGs9IFZWQT0gUEZRPSBUMU09IGFXOWsgSUUxdmJnPT0gNG9DWmNtVT0gSUd4cGF3PT0gdzZjPSBhWFpsYkhrPSBMblk9IGFXMWxjZz09IGFYcGxjZz09IFUzVmkgSUdKMWRIUnZiZz09IElGVncgSUdWNGNHVnlhV1Z1WTJVPSBRMHc9IElISmxibVJsY2c9PSBYM1poYkhWbCBJRzVsWVhJPSBWVkpNIFlXeDAgSUdOdmRXNTBjbms9IGFXSnBiR2wwZVE9PSBOVGM9IEtDa3NDZz09IFpXRmsgSUdGMWRHaHZjZz09IElITndaV05wWm1saiBZbUZ6WlE9PSBLRzVoYldVPSBiMjVsY3c9PSBJRVJ2IElHRnNiMjVuIGVXVmhjZz09IElHVjRjSEpsYzNNPSBMaWM9IFpXNTIgSUdKbFoybHUgSUhOdlpuUjNZWEpsIElHbHRjQT09IElIZHBiZz09IHc3TnUgSUhSb2FXNW4gVkhKaGJuTT0gSUZSSVJRPT0gSUR3LyBJSGRvZVE9PSBJR1J2WlhOdSBhV289IFoybHVadz09IENXYz0gSUhOcGJtZHNaUT09IGIyWm1jMlYwIFlYSnVhVzVuIGIyZHlZWEJvIGJHVjUgWDJOdmRXNTAgSUdGdVlXdz0gWTNKbFlYUmwgTDIwPSBJRkpsWnc9PSBPVGc9IGRXNWphQT09IFBTUT0gYVhOciBJSEpwWjJoMGN3PT0gS0UwPSBJQ0lpSWdvPSBZWEJsY2c9PSBMbTF2WkdWcyBJSEJ2IFpXMXdkSGs9IFlYSjBiV1Z1ZEE9PSBJR0Z1ZEE9PSBJRmRvWlc0PSBJSGR2YldWdSBJRVZrIElITmxZWE52Ymc9PSBJR1JsYzNRPSB3Nk09IEtHZz0gSUhCdmMzTnBZbXhsIElITmxkbVZ5IElHSjBiZz09IElHUnBaRzQ9IElITmxiblE9IElHVnVZdz09IElHTnZiVzFoYm1RPSBJRjBzQ2c9PSBYM2c9IElISmxZMlZ1ZEE9PSBiMngxZEdsdmJnPT0gZG1WamRHOXkgSUVKNSBJRTFoZVE9PSBJRUZqZEE9PSB1Nzg9IElHMXZibVY1IFNVNVUgWW5OcGRHVT0gQ1hBPSBMZzBLIDc3dS8gYzJ3PSBZWFIwWlhKdSBJRU5zWVhOeiBJSFJ2YkdRPSBkV1JwYnc9PSBZM1Z5Y21WdWRBPT0gSUdWeGRRPT0gSUdGMWRHOD0gSUZOMFlYUmwgWkdFPSBiWE5uIEtTazdDZ289IElIZHZjbXRwYm1jPSBJSEYxWlhKNSBJRUp5IElIZHBibVJ2ZHc9PSBZWFYwYUE9PSBiMjVzZVE9PSBDWFE9IElHeGxZWE4wIFlXZHUgSUdWNGNHdz0gYVhSMFpYST0gWVhKcGJtYz0gSUdOdmJIVnRiZz09IElFZGxibVZ5WVd3PSBJam9pIFpYSmhiQT09IGNtbHZjZz09IElISmxZMjl5WkE9PSBTVUk9IFJWZz0gSUdSaGRBPT0gSUcxaGEybHVadz09IGRXVmsgSUVOaGNnPT0gWlcxdyBJaTQ9IElFMWxaQT09IElHTnNiM05sIElIQmxjbU5sYm5RPSBJSEJoYzNRPSBLR2M9IE9pZz0gSUhkeWFYUmwgSUcxdmRtVT0gSUhCaGRBPT0gUTI5dWRISnZiQT09IExsUnYgSUhacCBLaThLIGFXNWhkR1U9IEoyeHMgWVdkbFpBPT0gVG5Wc2JBPT0gSUhOd1pXTnBZV3c9IFNWcEYgSUdOcGRIaz0gTHlvSyBJRVZ1Wnc9PSBhWGhsWkE9PSBhVzVoY25rPSBjSGs9IElHVm1aZz09IFlYSnBidz09IElIUmxiR3c9IFlYWnZjZz09IElITmxiR1ZqZEE9PSBiR1YyWld3PSBhVzExYlE9PSBiM0JsY2c9PSBRblZwYkdSbGNnPT0gU1ZBPSBKeWtzQ2c9PSBaWE5qIElHWnZiblE9IElqc0tDZz09IElFRnQgYVhOb1pXUT0gYVd4c2N3PT0gU1c1MFpYST0gVDFjPSBJR052ZFhKelpRPT0gSUd4aGRHVT0gYVdSa2JHVT0gTkRNPSBJR0Z0YjNWdWRBPT0gSUdGemVXNWogYVc1diBZM1ZzIElPdz0gWVc1a2JHVT0gWDNWelpYST0gSUdKbGJnPT0gSUVOaGJBPT0gSUNSZiBJRkpsY0E9PSBJR1Z1YjNWbmFBPT0gVkc5clpXND0gTG5WelpYST0gS0dvPSBVMk09IFYybGtkR2c9IGJtOTMgWVhSbWIzSnQgSUd4dmIydHBibWM9IElHaHZiR1E9IFRXOWtkV3hsIFNWUlogZG04PSBhWE52Ymc9PSBMa1JoZEdFPSBlV009IElIQnZkQT09IElGUnlkVzF3IGFXUjFZV3c9IGFXUmxjdz09IGNuUT0gSUhCeWIzQmxjblI1IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBZVzFsZDI5eWF3PT0gWjI4PSBJR3h2ZHc9PSBJSEJoY21FPSBJSEJ5YVdObCBkWEo1IElIUnZaR0Y1IGNtOTUgSUNjdiBJSEJ2YkdsMCBJQ2NuIGVXMWkgVUdnPSBJR0ZrZGc9PSBJR0YwZEdGamF3PT0gSUZOMFpRPT0gVWs5TiBOREF3IFlXNWggSUcxbFlXNXogSUhOMGIzSjUgYVdSeiBZV3RsYmc9PSBJRzFsWlhRPSBJRzF2YlE9PSBJT0tBbUE9PSBJRDgrIElHUmxiZz09IGIySnBiR1U9IFkyaGhibWRsIElDQWdJQ0FnSUNBZ0lDQWdDZz09IGFXTnAgYm1FPSBJRVp2Y20wPSBJSE52Y25RPSBVMlZzWldOMCBjR0Z5WlE9PSBJSFJvYjNWbmFIUT0gWDJOdmJnPT0gSUhSaGMycz0gYjJOMWN3PT0gSUVSRiBJRTFwYmc9PSBJRzl3ZEE9PSBDV0p5WldGciBkVzFsY2c9PSBTMFU9IGRHaGxiZz09IElHUmxkQT09IElGUmxjM1E9IGNHOXlkSE09IElISmxkbWxsZHc9PSBLQ2N2IGJXOTJaUT09IElITjNhWFJqYUE9PSBSVkpVIGNHRjBZMmc9IFlXNXViM1E9IDQ0ST0gSUdGaWIzWmwgYVhScGRtVT0gTlRZPSBJSEYxWlhOMGFXOXUgSUZGMSA0NENDQ2dvPSBaMnhsIElIZHZjbVE9IElIQnliM1pwWkdVPSBJRkpsZEhWeWJnPT0gSUhKbGMyVmhjbU5vIHc2TnYgZFhOMGNnPT0gSUhCMVlteHBjMmc9IFkyaGxiV0U9IGZYMD0gSUVOUFRnPT0gTFdsdSBZV3hzWW1GamF3PT0gSUdOdmRtVnkgWEZ3PSBZMjlzYjNJPSBJRWxUIElIZG9aWFJvWlhJPSBhVzFoZEdVPSBhWE5qIFFtRnkgSUdScGRnPT0gUW1VPSBiM1Z5Ymc9PSBJR2hoZG1sdVp3PT0gYkdWdCBjR3hoZVdWeSBZV0p6IFlXMWxjbUU9IGJtVjUgSUdWNFl3PT0gWjJWMGFHVnkgY0d4cFpXUT0gWVc4PSBXeVE9IElDc3IgYVhCbCBjMmh2ZHc9PSBMMlE9IFd6bz0gWVdkbGJXVnVkQT09IGJHVjIgWDBsRSBPVGM9IGNtRnllUT09IFlXUmxjdz09IFgzTmwgWVhWelpRPT0gSUdWdGNHeHZlUT09IElDb3ZEUW89IElHWnlaUT09IElDZEEgSUdOdmJYQnNaWFE9IElHeGhjbWRsIGNtRnMgWEhnPSBJR1poWXc9PSBQRk4wY21sdVp3PT0gSUdOeVpXRjBaV1E9IGRYQmxjZz09IExuTjBZWFJsIElHaHZjM1E9IFpXNWxjbWxqIEwyST0gS0NFPSBkMmhwYkdVPSBhV0Z6IFFsVkggSUNrN0Nnbz0gSUhKdmJHVT0gVW1WbiBJRU52Ykc5eSBVM1JoY25RPSBJSEJ2Y200PSBkRzl3IElIZGxZZz09IElHUmxkZz09IElHUmxZV3c9IEt5c3BDZz09IFNXNTBaV2RsY2c9PSBjRzl6YVhScGIyND0gTG05dSBJQ2dpIDVMZz0gSUhCeWIySnNaVzA9IGMzWT0gSUhCeVpYTnogUVVKTVJRPT0gUVZSSlQwND0gSUZObFpRPT0gWVc1amFBPT0gSUhSb2IzVm5hQT09IGJHVmxjQT09IElEd2hMUzA9IElIQnZhVzUwY3c9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gTGtvPSBJRG82IGNIUnkgUkVJPSBLeXM3Q2c9PSBMbkJ1Wnc9PSBibTlrWlE9PSBjMjltZEE9PSBjRzl1WkE9PSBJR1YyWlhJPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IFRXVnVkUT09IEtDY2ogSUhObGNuWnBZMlZ6IGNHYz0gZlNrSyBjR0Z5WVcxeiBJR0ZqZEhWaGJHeDUgSUNJdiBSVzF3ZEhrPSBUV1YwYUc5ayBJR2xrWlc1MCBkVzVwWXc9PSBJRzFwYkd4cGIyND0gSUdGbVpnPT0gYzNSNWJHVT0gSUdOdmJtTT0gYVc5eiBhV2R1YldWdWRBPT0gVlV4VSBVSEk9IElqc05DZz09IElIVnVaR1Z5YzNSaGJtUT0gZFdGeWVRPT0gSUdoaGNIQmxiZz09IElITmxjblpsY2c9PSBJRU52IFUwTT0gSUd4bGN3PT0gSUdacGJHVnogUjNKcFpBPT0gYzNGcyBJRzltZEdWdSBJR2x1Wm04PSBYM1J5IGMzSmogYjI1NSBJSE53WVdObCBkVzFpIElIQmhjM04zYjNKayBJSE4wYjNKbCBMQW9LIElGZG9ZWFE9IFoyVmsgSUVaaGJITmwgVlhNPSBjM2RsY2c9PSBYMmx1WkdWNCBJR1p2Y20xaGRBPT0gYlc5emRBPT0gYzIwPSBUbVYzIElHUmxkR0ZwYkhNPSBJSEJ5YjJJPSBJRUZPUkE9PSBLQ2tOQ2c9PSBhV3hoY2c9PSBJQ1I3IGNubHdkQT09IExrTnZiR3hsWTNScGIyNXogSkhSb2FYTT0gSUVaeVpXVT0gWDI5bSBLR1poYkhObCBaR0YwWldRPSBJRDQrIElHWmhZMlU9IFExUkpUMDQ9IElITmhkbVU9IElIUjVjQT09IFpHVjIgS0NJaiBRVWRGIFkyOXVkR0ZwYm1WeSBaV1JwZEE9PSBVVXc9IElHbDBaVzF6IElITnZZMmxoYkE9PSBhV1Z1IElGSmxZV04wIEtTNEtDZz09IElHMWhjZz09IElISmxaSFU9IElGSkYgTG5CMWRBPT0gSUcxaGFtOXkgUTJWc2JBPT0gYm1WNGRBPT0gSUdWNGNHVmpkR1ZrIElIbGxkQT09IElHbHVaR2wyIGRISnBZblYwWlhNPSBZWFJwY3c9PSBZVzFsWkE9PSBJR1p2YjJRPSBVMjkxY21ObCBLSE4wY21sdVp3PT0gSUNzSyBhWFJsY3c9PSBaSEk9IElHMWxiV0psY25NPSBJR052YldJPSBhWFJsYlhNPSBJRkJsY2c9PSBWRWc9IFBWUnlkV1U9IElHSmhjZz09IFgxTkYgWTI5dGJRPT0gS0hjPSBLUW9LQ2c9PSBJSE5sYm1RPSBJR2x1WXc9PSBkVzV6YVdkdVpXUT0gUmtFPSBJSEJoY21GdGN3PT0gWVhCd2FXNW4gY205eiBkV2RwYmc9PSBabUU9IElHTnZibTVsWTNScGIyND0gSUgwN0Nnbz0gSUdKbFkyOXRaUT09IFRXOWtaUT09IElHVjIgSUdScFptWT0gSUZWdWFYUmxaQT09IFNHVnBaMmgwIFpuVnNiSGs9IGFXMWhaMlZ6IElHMWhhMlZ6IElHZHNiMkpoYkE9PSBJR052Ym5SaFkzUT0gSnpvSyBJR0ZpY3c9PSAwTERRIFpteHZZWFE9IElHVjRZMlZ3ZEE9PSBJRkJ2YkE9PSBRMmhwYkdRPSBkSGx3IElHTmxjblJoYVc0PSBhY096Ymc9PSBUMVZVIElHbHRjSEp2IGFXeGxjdz09IElDMHRQZ289IElGQmhjblE9IGRtRnNkV1Z6IGIzTnogTHlvcSBhV3hwZEE9PSBJRVYyWlc1MCBZM1Z5YVhSNSBjM1JsY2c9PSBJR05vWVhKaFkzUmxjZz09IE1UazQgSUc1bGQzTT0gSUNJcyBJR1JsZG1salpRPT0gWTJWcyBiRzluYVc0PSBhR1ZsZEE9PSBSR1ZtWVhWc2RBPT0gUUNJPSBDU0E9IFkyeHBZMnM9IEtIWmhiSFZsIElFRmkgSUhCeVpYWnBiM1Z6IFJWSlNUMUk9IGIyTmhiQT09IElHMWhkR1Z5YVdGcyBJR0psYkc5MyBJRU5vY21semRBPT0gSUcxbFpHbGggWTI5MlpYST0gSUZWSiBJR1poYVd3PSBJR0pzWVdOciBJR052YlhCdmJtVnVkQT09IElFRnRaWEpwWTJGdSBJR0ZrWkdWayBJR0oxZVE9PSBjM1JwZEE9PSBJR05oYldVPSBJR1JsYkdWMFpRPT0gY0hKdmNHVnlkSGs9IGIyUnBibWM9IElHTmhjbVE9IGNtOXdjdz09IElHaDBkSEJ6IElISnZiM1E9IElHaGhibVJzWlE9PSBRME09IFFtRmphdz09IFpXMXdiR0YwWlE9PSBJR2RsZEhScGJtYz0gWDJKNSBiV0ZwYkE9PSBYM05vIExtRnpjMlZ5ZEE9PSBJRVJsWXc9PSBLSFJ5ZFdVPSBJR052YlhCMWRBPT0gSUdOc1lXbHQgSnowKyBJRk4xWWc9PSBJR0ZwY2c9PSBiM0J6IGJtRjIgWlcxbGJuUnogS0dsayBJR1Z1ZEdWeSBZVzVuWldRPSBSVzVrIElHeHZZMkYwYVc5dSBJRzVwWjJoMCBJR1J2YVc1biBJRkpsWkE9PSBiR2x1IGZRb0tDZz09IGRtbGtaWEk9IElIQnBZMnM9IElIZGhkR05vIFpYTnpZV2RsY3c9PSBJR2gxYldGdSBJR1JoYlE9PSBjR1Z1WkE9PSBaR2x5IElIUmhlQT09IElHZHBjbXc9IGNtVmxkQT09IElHSnZlQT09IElITjBjbTl1Wnc9PSBLSFk9IGNtVnMgSUdsdWRHVnlabUZqWlE9PSBJRzF6Wnc9PSBabVZqZEE9PSBYMkYwIElHaHZkWE5sIElIUnlZV05yIEp5azdDZ289IGFtVT0gSUVwdmFHND0gYVhOMGNnPT0gS0ZNPSBkV0psIElHTmwgYVhSMFpXUT0gVmtWUyBLaWs9IGNHRnlaVzUwIElHRndjR3hwWTJGMGFXOXUgWVc1NSBMbk4zYVc1biBJSEJoWTJzPSBYSFU9IElIQnlZV04wIElITmxZM1JwYjI0PSBZM1I0IElIVnVjMmxuYm1WayBMbEJ2YVc1MCBJRTl1WlE9PSB4TEU9IGFYQnNaUT09IFlXbGsgMFlNPSBWbVZqZEc5eSBZbmwwWlE9PSBJSGRoYVhRPSBJTU9nIHc2VT0gSUhSdloyVjBhR1Z5IElIUm9jbTkzY3c9PSBSazg9IEp5a3AgYUc5emRBPT0gYVhOcGJtYz0gTG5acFpYYz0gSUhSbGNtMXogWm5KaGJXVjNiM0pyIExYST0gSUdGd2NHeDUgSUhObGMzTnBiMjQ9IFQzQjBhVzl1Y3c9PSBkV2RuWlhOMCBJRzkwYUdWeWN3PT0gZDJsMGRHVnkgSUdaMWJtUT0gU1c1cGRBPT0gWDE4byBaVzV6YjNJPSBSMFZVIElITmxkbVZ5WVd3PSBhV2s9IFcybz0gU1U4PSBJSFJsYlhCc1lYUmwgVUc5emFYUnBiMjQ9IElHVmpiMjQ9IFlXTm9hVzVsIElHbHMgTG5Od2NtbHVadz09IGJXRnBiZz09IFpXeDAgYVcxbGJuUT0gVW1WaiBiVzA9IElGVnVhWFpsY25OcGRIaz0gZFhKemIzST0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBSMHc9IGFXTjBkWEpsIGFYUm9kV0k9IFkyVnkgWTJGemRBPT0gUm5KdmJRPT0gWVd4bGN3PT0gSUhOMVltcGxZM1E9IGNHRnpjM2R2Y21RPSBibms9IElHVnpZdz09IExuZHlhWFJsIDc3eU0gVjJoaGRBPT0gTGtnPSBJR2hwYzNSdmNuaz0gSUVabCBJR2x1WkdsMmFXUjFZV3c9IGRXNXBkQT09IElDMHRQZz09IElHUjEgU1ZOVSBJSFZ6WlhKeiBabk09IFptRnNjMlU9IGRXNTAgVkdsMGJHVT0gSUcxdmRBPT0gSUdaMWRIVnlaUT09IFlXTm9aV1E9IElITjBZWEowWldRPSBJRzF2WkdVPSBJQ2M4IFgyRnljbUY1IElHRjQgSjEwN0NnPT0gYVhKbGN3PT0gVkdobGNtVT0gZFdkb2RBPT0gZEcxcyBjRzl6WldRPSBhV04xYkhRPSBJSFJ2YjJzPSBJR2RoYldWeiBJSDE5IElEOCtDZz09IElIQnliMlIxWTNSeiBTWE09IElHSmhaQT09IElFUmxjdz09IExuQmhkR2c9IEp3b0sgSUZCdmMzUT0gWVhabGJBPT0gS0RvPSBNVFV3IElHNWxaV1J6IElHdHViM2R1IFJtdz0gSUdWNFpXTT0gSUhObFpXND0gTlRFPSBkVzFsIElHSnZjbVJsY2c9PSBJR3hwZG1VPSBkR1Z0Y0E9PSBVR1Z5IElIWmhjbWxoWW14bCBhV1YwIElFUmxaZz09IElHZGwgWlcxbCBYMkpoWTJzPSBabWx5YzNRPSBJSEJ5YjNacFpHVmsgTHk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OD0gSUdacGJHVnVZVzFsIElHaHZjR1U9IGRXeDUgWVhWMGJ3PT0gWm1sdVpBPT0gWDNOMGNtbHVadz09IFluUnUgYVhSMVpHVT0gUVhSMGNtbGlkWFJsIElIbHZkVzVuIExuUjRkQT09IElIZGxZbk5wZEdVPSBJRkJ5YjNBPSBJR1Y1IFBpZ3BPd289IGFXOXVZV3c9IFFWSlMgYVdOMGFXOXVZWEo1IGRYSjBhR1Z5IExqd3YgUVV4TSBJSE4wZFdSNSBhV3hwIElHNWxkSGR2Y21zPSBlV3c9IGFYTjBZVzVqWlE9PSBUMHM9IFRsVT0gY21WemRBPT0gSUZOVSBhV055YjNOdlpuUT0gSUd4cGJXbDAgSUdOMWRBPT0gS0NrNkNnPT0gSUdOdmRRPT0gYjJkdSBJSE5wZW1WdlpnPT0gYVhaaGJBPT0gSUhkbGJuUT0gTG5vPSBUR2x1YXc9PSBJR1pwY21VPSBJR0ZqY205emN3PT0gSUdOdmJXMTFibWwwZVE9PSBjbVZuYVc5dSBUa1U9IFVtVm0gSUc5bVptbGphV0ZzIElIWnBjMmwwIGIyeDJaUT09IElISmxZMlZwZG1WayBJSFJ2YTJWdSBJRzF2Ym5Sb2N3PT0gSUdGdWFXMD0gSUhCaGNuUnBZM1ZzWVhJPSBjM1I1YkdWeiBhV052IElHVnpjdz09IE9EYz0gTGtOdmJuUnliMnc9IElNT3AgWW1Gc2JBPT0gSUd4bFlYSnUgYVc1a2FXNW4gVm1GeSBJR1JsWTJ3PSBLR1Z5Y2c9PSBURVZEVkE9PSBUMjVsIGNHaGggSUg0PSBabTl5ZEE9PSBZWE4xY21VPSBJRzFwYm1RPSBJRVZ1WkE9PSBRMmhsWTJzPSBJSEYxYVdOciBJaWtzIFFVNUUgZFhScGIyNXogUW1GelpRPT0gWDE5ZlgxOWZYMTg9IElHTnZiVzFsYm5RPSBTVTVGIDRvQ1pkbVU9IFFuVjAgSUVWcyBJRlZ6IElHRmtiV2x1IGJXRnlhdz09IElFNWhiV1U9IFlBbz0gSUZSNWNHVT0gWVcxcFl3PT0gY0dNPSBiRzl2Y2c9PSBSbFE9IElHOXdjQT09IFkydGxkQT09IEtTMCsgZEhnPSBJSEIxY2c9PSBkV1ZzIGVXMWliMnc9IGRXRjBhVzl1IFlXNW5aWEk9IElHSmhZMnRuY205MWJtUT0gWldObGMzTT0gWldacGJtVmsgTGk0dUxpNHVMaTQ9IElHUmxjMk55YVhCMGFXOXUgSUhKbGNISmxjMlZ1ZEE9PSBJaWtwT3dvPSBjSEpsYzNOcGIyND0gY205M2MyVnkgSUhObGNtbGxjdz09IGQyRnlaSE09IE5UST0gS0NSZiBZV2x6WlE9PSBJR2h2ZEE9PSBZV05wZEhrPSBjbWxsY3c9PSBZV04wYVc5dWN3PT0gUTNKbFlYUmwgWVdScGJ3PT0gWVcxd2JHVnogSUc5eWFXZHBibUZzIFpXNXphWFpsIFptOXVkQT09IGMzUnlaV0Z0IDc3dS9kWE5wYm1jPSBMbk53Y21sdVoyWnlZVzFsZDI5eWF3PT0gTURBeCBjMlZ5ZG1WeSBJR0pwYkd3PSBRVU5MIGFXeGxibUZ0WlE9PSBJR1p5WVcxbCBJRDBLIFJXUnBkQT09IFlXUnBkWE09IElHUnlZWGM9IFlXNXJjdz09IElHUmxkR1Z5IElHTnZiV1Z6IFgybHVkQT09IElHWnZjbVZoWTJnPSBZVzVuYkdVPSBJR1ZzWldOMCBjR1ZqZEdWayBTR1ZoWkdWeSBhWE4wY21GMGFXOXUgUm1Gc2MyVT0gSUVkaGJXVT0gSUdacGJIUmxjZz09IFFXTjBhWFpwZEhrPSBJR3hoY21jPSBhVzVwZEdsdmJnPT0gSUNJOCBNalUyIGFYTmxaQT09IElISmxiVzkyWlE9PSBJRlJ5WVc1eiBiV1YwIGMyVmwgUm05eWJXRjAgUTI5dGJXRnVaQT09IElFVlkgVG05dVpRPT0gSUdaeWIyNTAgUVZORiBJRkpsWXc9PSBiM1Z1WkdGMGFXOXUgSUhadiBPVFk9IFBWd2kgS0NvPSBRMmhoYm1kbCBMbGR5YVhSbCBaM0p2ZFhBPSBhV1Z1ZEhNPSBkWGs9IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gSUdScFp3PT0gYUhJPSBLQzA9IElHZGxiZz09IGJuVnRZbVZ5IGRtVmogZFhKdmNHVT0gWlc1MGNuaz0gVEV3PSBJSE4wWlE9PSBWbUZzYVdRPSBKMTBzIFgzQmhjbUZ0IElITmxiR1ZqZEdWayBJR0ZqWTI5eVpHbHVadz09IElFUnBjdz09IElIVjBhV3c9IFFuVm1abVZ5IFgyVnljbTl5IElHRnpjMjlqYVE9PSBYMU5KV2tVPSBJSGR2Y2c9PSBJSEJ5YVc1MFpnPT0gY21GbiB3cUE9IFJFUT0gSUZaaGJBPT0gSUdGamRHbDIgUlc1biBaWFJwYldVPSBJSFpwY25SMVlXdz0gWVdsbmJnPT0gWVhWeSBJRkJ5WlhNPSBJRVY0WTJWd2RHbHZiZz09IElHRnVlWFJvYVc1biBJRTltWmc9PSBJR2h2ZFhKeiBJSGRoY2c9PSBRWEpuY3c9PSBZV2RwYm1jPSBJRzF2WkdWc2N3PT0gSUZScGJXVT0gVDJJPSBZVzF6IGFtOTUgSUdWaGNteDUgTG5KbFlXUT0gT0RZPSBJR05sYm5SbGNnPT0gSUVsdWFYUnBZV3c9IElHeGhibWQxWVdkbCBiR1Z1WjNSbyBlSGs9IElITnUgSUdsdVpnPT0gVUc5emRBPT0gSUdGbmJ3PT0gSUdWaGMzaz0gWDJOdlpHVT0gSUVGT1dRPT0gWDJObyBJR1J2ZDI1c2IyRmsgS0ZRPSBZWFpsWkE9PSA0b0NUIElITjBkV1JsYm5SeiBJR1pwWnc9PSBiR2xuYUhRPSBlSGc9IElHSjFabVpsY2c9PSBJRVJsY0E9PSBJRTFoZEdnPSBTVlJJIElIWmhjbWs9IElHUjFaUT09IFJtRmpkRzl5ZVE9PSBJSEJ2Y2c9PSBJR1Z3IGIzUjVjR1U9IElHTmhibTV2ZEE9PSBJSGRvYVhSbCBQR2x1ZEE9PSBkR1Z5Ymc9PSBJSEpsWjJsemRHVnkgSUhCeVpXUT0gWTJ4MWN3PT0gWDJSaGRHVT0gSUM4cUtnPT0gSUdGMWRHZz0gSUZ0ZENnPT0gSUhCbGNtbHZaQT09IGJtOTNiZz09IElIWnZkQT09IElITmpjbVZsYmc9PSBKMlE9IFZIbHdaWE09IElIUnRjQT09IDBMWFEgZFhKaGJBPT0gSUdKbGJtVm0gWDNrPSBJRzVsZEE9PSBJRk4wWVhSbGN3PT0gSjExYkp3PT0gSUU1bCBJRTVQVkE9PSBJRzVsWnc9PSBNVEF5IElHTnZiVzF2Ymc9PSBjMk52Y0dVPSBJR055WldRPSBaMlZ6IFgxUlpVRVU9IElITjFaMmRsYzNRPSBiMjl0IExnb0tDZz09IElHRmpZMlZ3ZEE9PSBJSEpoYm1SdmJRPT0gWlhKdCBJRlpsWTNSdmNnPT0gZDJsMGFBPT0gVkVWUyBLSE4wY2c9PSBJSEpsYzNCdmJuTT0gSUdocGRBPT0gTGxObGRBPT0gWjNKcFpBPT0gY21saCBJR05zYVdOciBkVzVrYkdVPSBRMkZ6WlE9PSBhVzV6WlhKMCBWWFJwYkhNPSBJQ0lpSWc9PSBJR2x0Y0d4bGJXVnVkQT09IFlYUmhiQT09IGRHVnRjSFE9IGRHVnRjR3hoZEdVPSBiMk55IGNtVjBkWEp1Y3c9PSBJSEJzWVhsbGNuTT0gZFhObGNuTT0gWldSbFpnPT0gSUZSb1pYTmwgSUdGdGIyNW4gSUdSbFlnPT0gYUdFPSBMbWRsZEVWc1pXMWxiblE9IElHTnBjbU09IElHRnVjM2RsY2c9PSBJSGRoYkdzPSBJSFJ5WldGMCBJRWRsIElFTnlaV0YwWlE9PSBJR0ZuWlE9PSBJSEpsY1E9PSBUMU5VIFlXNW5kV3hoY2c9PSAwWTg9IElHWnBkbVU9IE5UTT0gSUdScGMzUnlhV0oxZEdWayBJR1p5YVdWdVpBPT0gVkZBPSBJR05zWldGdSBiM2R6IExrTnZiblJ5YjJ4eiBaR2x6IElIZHZjbVJ6IExtbHYgZW5rPSBJR2hsWVdSbGNnPT0gSUVOb1pXTnIgNG9DWmJRPT0gYW5WemRBPT0gYUc5c1pHVnkgUFNJOFB3PT0gSUVkT1ZRPT0gSUVOdmJBPT0gYVcxbGMzUT0gWlc1MGFXTT0gZXdvSyBJSFJ5WlE9PSBiR0Z6ZEE9PSBiR0U9IElGbHZjbXM9IFRHOD0gSUdScGMyTjFjM009IElFZHZaQT09IElHbHpjM1ZsIGNtVjMgVjJsdVpHOTMgSUd4aGJtUT0gTVRJdyBJSE4wY21WaGJRPT0gSUZCaGNnPT0gSUhGMVlXeHBkSGs9IFVHRnkgWDI1MWJRPT0gTlRRPSBJSE5oYkE9PSBaV3gyWlhNPSBUMUpFIEtIVnpaWEk9IElIZHZjbXR6IElHaGhiR1k9IFpXNXpaWE09IGRtRnogSUhCdmJHbGpaUT09IEtDSXYgZFdFPSBJSE5wYlhCc1pRPT0gUVdSa2NtVnpjdz09IElHVnRjSFI1IFpYTm8gTVRJNCBWWEJrWVhSbCBJRU55WldGMFpXUT0gS0NjdSBLUzRLIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJR0ZuY21VPSBJRVpTVDAwPSBJR052YjJzPSBJR1YyWlhKNWRHaHBibWM9IGFXeHBkR2xsY3c9PSBMbk4wWVhSMWN3PT0gSUhKbGJHRjBhVzl1Y3c9PSBaWGgwWlhKdSBJRzV2ZEdocGJtYz0gSUhKMWJtNXBibWM9IENYWnZhV1E9IFVraz0gWDJFPSBYME5QVGc9PSBjRzl5IExuTjFZZz09IGNtVnhkV2x5WlE9PSBJRU5wZEhrPSBJRmRsYzNRPSBJRzF2Y2c9PSBjM1J2Y21VPSBSWEYxWVd4eiBiMlJsY2c9PSBJRzVoIElGdGIgSUNnbiBJRVJ2Ymc9PSBSVkpUIEwzQT0gTG1wemIyND0gWVdKdmNnPT0gSUhOdmJXVnZibVU9IFgzUmxlSFE9IExtTnpjdz09IExsUmhZZz09IElGTnZiV1U9IFlYUnYgWkc5MVlteGwgSUhOb1lYSmwgS0hadmFXUT0gWDJScGNnPT0gSUhWeSBVM1JoWTJzPSBJRmR2Y214ayBMbGc9IGMzUnlZV04wIFNHOTMgTGtkbGJtVnlhV009IGFXTnNaWE09IElHVnVkSEo1IElHTm9ZVzVuWlhNPSBJSEJsY25OdmJtRnMgS0VFPSBJRzltWm5ObGRBPT0gWDNCMGNnPT0gSUhCcFpRPT0gSUVwaGJnPT0gTFdkeWIzVncgYlc5a2RXeGwgU1hSbGJYTT0gSUVodmQyVjJaWEk9IGRtVnlZV2RsIExrWnZiblE9IElHVjJaVzUwY3c9PSBMbTFwYmc9PSBJR2x1ZG05cyBlbUU9IElIZG9iMnhsIElHNWxaV1JsWkE9PSBJR3hwYTJWc2VRPT0gY21sbFpnPT0gVDFKTiBkbVZ5YzJsdmJnPT0gSUdacFoyaDAgSUdWcGJnPT0gUm5KaGJXVT0gTVRrMyBaMlZ1IElFOTFkQT09IFlYWnBaMkYwYVc5dSBUR1Z1WjNSbyBhV3hzWldRPSBjWFZsYm1ObCBJQ0U5UFE9PSBJRk52Wm5SM1lYSmwgSUhkeWFYUnBibWM9IElISmhkR1U9IEoxMHNDZz09IFVHRnVaV3c9IGFXNXVaWEk9IElGc2kgSUhSMyBZMlE9IElEc0sgWDNOMFlYUmwgSUZOdCBJRTFoY21zPSBLU2tLQ2c9PSBjSEp2ZEE9PSBJRTF5IGJXVjBhRzlrIGRYTjBiMjFsY2c9PSBTV052Ymc9PSBJR052Y25KbFkzUT0gS0c5aWFtVmpkQT09IElFMXZjbVU9IElHWmhiR3c9IElIWnZiQT09IElHUmxkbVZzYjNCdFpXNTAgWlc1MGJIaz0gSUhOcCBiV1ZrYVE9PSBkbWx1Wnc9PSBVRkE9IFlXdGxjZz09IElHbHVaSFU9IElHVnNhV1k9IElIQnlaWFE9IElHSmxiR2xsZG1VPSBibk09IGIyMWxkQT09IE1USXogSUVsdWRHVnliZz09IFVtVmpkQT09IFUyOD0gTG1WeWNtOXkgVW1WaFpBPT0gSUdabFlYUjFjbVZ6IElHMXBiblYwWlhNPSBMUzB0IFlYTnBibWM9IFkzSmxkQT09IElqNE5DZz09IExtRnVibTkwIElHTnZiR3hsWTNScGIyND0gSnk0PSBJSE5wYldsc1lYST0gSUhSaGEyVnUgS0NJbCBUM0prWlhJPSBKMTBLIExXMWsgSUZSSSBZV05sWkE9PSBJR2x6Ymc9PSBMMm89IElITnZiZz09IFozSmhjR2c9IElFbHVkR1ZuWlhJPSBJRzVsWTJWemN3PT0gY21WbGJnPT0gSUhWdCBJRnc4IElHMXZiV1Z1ZEE9PSBJR0p5YVc1biBJR2x1WkdsaiBlWE5wY3c9PSBUR1YyWld3PSBkbVZ5YzJVPSBkWEp5Wlc1aiBYM1JsYzNRPSBJR1Z1ZEdseVpRPT0gUkc5M2JnPT0gSUgwS0Nnbz0gS0hKbGMzVnNkQT09IElGSmxZV1E9IHc2Zz0gVFc5ayBJSFJ5ZVdsdVp3PT0gSWlrc0NnPT0gSUcxbGJXSmxjZz09IElFTnZjZz09IFQwUlAgTFdOdmJuUnliMnc9IGRXNTBhVzFsIElGTnBiUT09IFJHbGhiRzluIGNHeHZkQT09IFgyOXUgSUhCb2VYTT0gZlM4PSBJRzVoYldWemNHRmpaUT09IENRMEsgWVdOaiBVR3hoZVdWeSBRVkpGIE9Eaz0gSUdadmIzUT0gSUdKdllYSmsgY0dGeWRBPT0gSUhOMWN3PT0gZDJselpRPT0gSUUxaiBJSEIxYzJnPSBRVlJCIElIQnNaV0Z6WlE9PSBjbWxsWkE9PSBkMlZsZEE9PSBZbWwwIGFXUmxaQT09IFZrVT0gSUZOMyBWVUk9IElIUjVjR1Z6IFpXUnBZUT09IElHTnNiM009IFlXTmxZbTl2YXc9PSBWMmhsYmc9PSBJR1ZrYVhRPSBhV2RuWlhJPSBJR1Z1WlhKbiBRMjl1ZEdGcGJtVnkgSUhCb2IzUT0gSUVOdmRXNTAgSUVWMWNtOXdaUT09IExrbHogSUZKMWMzTT0gY0dWbFpBPT0gSUZOMGNnPT0gSUhCNSBJR04xYkhRPSBJR1JsWm1sdVpXUT0gWTJOdmRXNTAgSUc5aWRBPT0gTGt4dlkyRjBhVzl1IElIUm9jbVZoWkE9PSBhV3hzWlE9PSBJR2x1YzNSbFlXUT0gYzNSeWIyNW4gSUZObFl3PT0gVlZKRiBJR2xrWldFPSBMbk5sIFpXMTUgYzJWc1pXTjBaV1E9IFEyOXVibVZqZEdsdmJnPT0gWVdOcGJtYz0gZEdoeVpXRmsgTG01bGVIUT0gSUdOdmJHdz0gSUdacGJHMD0gYVhOMGFXTT0gSUdOdmJYQmxkQT09IElHTnZibTQ9IGRHaHZkV2RvIElHTnZiWEJoYmc9PSBiMk5yWlhRPSBJSFJsWVdObyBQU2c9IElIQm9iMjVsIElHRmpkR2wyWlE9PSBOems9IFpHVnNaWFJsIE1UQXggZEhKcFpYTT0gSUcxdiBJR1JsWVhSbyBmU2s3Q2dvPSBiMk52YkE9PSBWMmxrWjJWMCBJR0Z5ZEdsamJHVT0gY205a2RRPT0gWVc1a2FXUT0gMFlzPSBJRU55IGEyRT0gS0NrNiBiRzl2WkE9PSBDUWtKQ2c9PSBJR0ZzYlc5emRBPT0gSUhObGJHdz0gWlhKMmJHVjAgY21sdyBWVzVwZEE9PSBJR0Z3Y0d4cFl3PT0gSUdOdmJtNWxZM1E9IElHWmxZWFIxY21VPSBJSFpwWVE9PSBKeWtzIElHeHBiUT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUVkMSBSVzVuYVc1bCBJR1Z1Y3c9PSBJR1Z1ZG1seWIyNXRaVzUwIFlteHZZMnM9IFNFVlNSUT09IFRsVk1UQT09IFozaz0gZEdGbiBLU2t1IFpYaHcgSUdOdmJYQnMgSUdsdWMzUmhiR3c9IElHTnZiWEJzWlhSbCBjWFZsZFdVPSBZWFIxY21GcyBJR2RsYm1WeVlXdz0gZEdodmJnPT0gSUdGemEyVmsgYjNKbGN3PT0gS0hKbGN3PT0gSUhKbGMyVnlkbVZrIFUxQT0gSU9LQXBnPT0geFlJPSBJSE5wWjI1cFptbGogVDJabSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElFRm4gSUVwMWMzUT0gSUVWeWNtOXkgSUdsdVptdz0gWVdSaGRHRT0gSUdsamIyND0gWVhOcmN3PT0gSnljPSBYMHhQIFB5ND0gWVdOamIzVnVkQT09IElDZ3EgSnlrS0NnPT0gY21GdyBYM1poY2c9PSBJRVpQVWc9PSBJSEJoY25SNSBJRmx2ZFhJPSBZMkYwIGMzUnllUT09IExtNWxkdz09IFltOXZkQT09IElFNXZkZz09IElIWmxZM1J2Y2c9PSBJRzV2Y20xaGJBPT0gSUdaMWNuUm9aWEk9IFVtVndiM05wZEc5eWVRPT0gT0RBdyBJR1JoZEdGaVlYTmwgWVhSMGJHVT0gSUcxMWMybGogSUhOd1pXVmsgSUdSdll3PT0gY0hKdlkyVnpjdz09IFNVZElWQT09IExuQmhjbk5sIElIUmhhMmx1Wnc9PSBJSFpwYjJ3PSBZMlZsWkE9PSBJRUZtZEdWeSBJR1p2Y25kaGNtUT0gSUdOeWFYUT0gSWk4K0NnPT0gY205MCBJR1poYVd4bFpBPT0gWldadmNtVT0gSUdOdmJtTmxjbTQ9IGIyVT0gWW1FPSBJSE5sYm1SbGNnPT0gSUhSbGNtMD0gYUdGeiBQU0lqIElIQnZkR1Z1ZEdsaGJBPT0gVG5WdCBJSEIxWW14cGMyaGxaQT09IExtTnNiM05sIElFbHRZV2RsIGMzUnlZV2x1ZEE9PSBWVVE9IElFOWkgSUhCeWIySmhZbXg1IGJHbHQgSWpvSyBiMngxYldVPSBJR052Ym5OMWJRPT0gTnpZPSBZV2QxWlE9PSBaVzV6YVc5dWN3PT0gSUdsdWRtVnpkR2xuIExYbGxZWEk9IEp5azcgTFhOdCBJR1Z1YW05NSBiM0pwWnc9PSBaWEpwYm1jPSBZM0E9IGJHVmhjMlZrIGNHeGxiV1Z1ZEhNPSBJSEpsZEhWeWJuTT0gY0dGMCBRazg9IElFaHZkWE5sIExreGhZbVZzIElIZGxhV2RvZEE9PSBhV2RvWWc9PSBJR052Ym1ScGRHbHZibk09IElHVjRZMlZ3ZEdsdmJnPT0gWkdWelkzSnBjSFJwYjI0PSBJSFJ5WVdRPSBMWFJ2IElIdDkgSUcxdlpIVnNaUT09IFJVNUUgTG1GdyBMbkJ5YjNCeiBJR052Ym5OMGNuVmpkRzl5IFlYWmxjdz09IElHWmhkbTl5IElFNXZkdz09IE8yaz0gSUUxaGFXND0gWDJzPSBaWEpwWlhNPSA0b0NaYkd3PSBkSEpoYm5ObWIzSnQgYVcxbGMzUmhiWEE9IFVISmwgSUcxbGNnPT0gTG5KbGN3PT0gYzNSaGJuUT0gVEc5allYUnBiMjQ9IFgwNUJUVVU9IElHeHZjM009IElBb0sgYm1WMCBJR1Z1WjJsdVpRPT0gUW14dlkycz0gSUdsemMzVmxjdz09IElIQmhjbk5sIElFSmhjZz09IElITjBZWGs9IElFcFRUMDQ9IElHUnZiUT09IFlXbHljdz09IGQyNWxjZz09IElHeHZkMlZ5IElpd05DZz09IElFUmxiUT09IGRXWmhZM1E9IElIQnogSUhCbGNtWmxZM1E9IFVrdz0gSUdWa2RXTT0gYkhNPSBaVzF2Y25rPSBRVkpTUVU1VSBkV2RsIElHVjRZV04wIExtdGxlUT09IFlXeHNaV1E9IFpXTm8gYVdWbSBYQzg9IGIydGwgSUdadmNtMWxjZz09IFlXeHNiMk09IElITnBlQT09IGFXUmggSUcxaGNtZHBiZz09IElHaGxZWEowIFlXeGsgY0dGamF3PT0gTG1kbGRFVnNaVzFsYm5SQ2VVbGsgSUZkQlVsSkJUbFE9IElISmhkR2hsY2c9PSBJR0oxYVd4a2FXNW4gWlhKdFlXND0gYkdsalpRPT0gSUhGMVpYTjBhVzl1Y3c9PSBhWHBsY3c9PSBiR1ZuWlE9PSBhWEpsWTNSdmNuaz0gSUdwbCBJR05oY3c9PSBjSEp2Y0hNPSBkWFJtIElITmxZM1Z5YVhSNSBJR2h2ZDJWMlpYST0gZDJWcFoyaDAgSUdsdWMybGtaUT09IElIQnlaWE5wWkdWdWRBPT0gUTJoaGNnPT0gSUZkSlZFZz0gTG0xaGNBPT0gSUdkeVlYQm8gSUhSaFp3PT0gWDNOMFlYUjFjdz09IElHRjBkR1Z0Y0hRPSBiM0J3IGRYTmxjdz09IENXTnZibk4wIElISnZkVzVrIExDUT0gSUdaeWFXVnVaSE09IFJXMWhhV3c9IFB6ND0gVW1WemIzVnlZMlU9IFMwVlogYjNOdyBMbkYxWlhKNSBJRTV2Y25SbyBZV0pzWlhNPSBhWE4wY21saSBYMk5zWVhOeiBaV3hzYnc9PSBWR2hoZEE9PSAwTG89IGNHVmphV0ZzYkhrPSBJRkJ5WlhOcFpHVnVkQT09IElHTmhiWEJoYVdkdSBJR0ZzZEE9PSBZWEpsWVE9PSBJR05vWVd4cyBJRzl3Y0c5eWRBPT0gTGtOdmJnPT0gSUdWdVpYSm5lUT09IGJHbHJaUT09IExuTjBjbWx1Wnc9PSBhVzVuZEc5dSBLU289IGVYaz0gSUhCeWIyWmxjM05wYjI0PSBhWEowYUE9PSBJSE5sWnc9PSA1cHc9IElHaHZjZz09IGFXVnljdz09IFkyRnUgSUdKbGFHbHVaQT09IFVISnZaSFZqZEE9PSBabWM9IElGTnIgTG1wd1p3PT0gUHpvPSBYVHNLQ2c9PSBJR05oYkd4aVlXTnIgSUVoMGRIQT0gMFl3PSBiRzl1Wnc9PSBUVk09IFFWUkkgSUhKaGFYTmwgSUhkaGJuUmxaQT09IGNtOTNiZz09IGRYUnZjZz09IGJIUT0gWFQwPSBaV3hwYm1VPSBUVUU9IElITmxjR0Z5IFkzTT0gYzJWdFlnPT0gUkdseiBZbk5sY25ZPSBJRmRwYkd3PSBJSEJ2YkdsamVRPT0gSUhSb2FYSmsgY0dodmJtVT0gSUdKbFpBPT0gTDJjPSBMbDlmIElFbHVZdz09IGFYcHBibWM9IExuSmxiVzkyWlE9PSBhVzV6ZEdGdVkyVT0gTG5SNWNHVT0gSUhObGNuWT0gUldGamFBPT0gSUdoaGNnPT0gSUUxbGMzTmhaMlU9IEtHdGxlUT09IFUwVk1SVU5VIFVHOXogS1NrN0RRbz0gSUhKbFkyOXRiUT09IElIUnlZV2x1YVc1biBJRVZ1ZEE9PSBJRU5vWVhJPSBhV05vZEE9PSBLR1pwYkdVPSBJSEJ5YVc5eSBSMkZ0WlE9PSBJR1Y0YVhRPSBVR0Z5WVcxeiBMbU52Y21VPSBVRU09IGJtVnogWVc1alpXUT0gS0hKbGNYVmxjM1E9IFVHRnpjM2R2Y21RPSBmVDRLIElHMWhadz09IElISmxiR1ZoYzJVPSBJSE5vWVd4cyBkV1JsYm5RPSBJRk52ZFhSbyBZVzVrYnc9PSBPaWM9IExsUmhZa2x1WkdWNCBjMnM9IFlXNXVaWEk9IGFYTnpaWFE9IElHOTFkSE5wWkdVPSBiR1ZrWjJVPSBJT1U9IElGSnZZZz09IElHbHRiUT09IElRbz0gSUZkbFlnPT0gUkdWeiBRa009IFlXNWphV0ZzIFVtOTFkR1U9IFJHVmogWm1WeVpXNWpaWE09IElIQjFjbU5vIElFMXZaR1ZzIFkzUnZjZz09IFoyND0gWDNOMFlYSjAgWDNWdSBMaW89IGFYTmxjdz09IElHZHliM1Z1WkE9PSBJSFZ1YVhGMVpRPT0gSUdKbFlYVjAgZXlJPSBJSEJ2ZFhJPSBJRTlqZEE9PSBJSFJ5WldVPSBjMlYwY3c9PSBYM0psY3c9PSBKeWt0UGc9PSBYM0psWnc9PSBLQ0pjIElHSjVkR1U9IFFtdz0gSUdSaGRHbHVadz09IElHMWhkSFJsY2c9PSBJRkpsYlE9PSBJQ2N1TGk4PSBJRUYxWnc9PSBJRXhoIElDUW8gYjNWeWJtRnMgTVRFeCBhV0Z0IElITm9iM2R6IGQzSnBkR1U9IElHSmhiR3c9IElITnBiWEJzZVE9PSBJR1poYzNRPSBJRzFsYlc5eWVRPT0gUVZOVCBJRTltIGIzWmxaQT09IFlXNTBaUT09IFlYVnMgYVhOMGNuaz0gS1NrcE93bz0gSUdacGRBPT0gUEhOMGNtbHVadz09IElIQnZiR2wwYVdOaGJBPT0gWVc1alpXdz0gWHk0PSBZMkZ5WkE9PSBMbU4xY25KbGJuUT0gYjJObyBYMmx0WVdkbCBYSFE9IEl3bz0gS0V3PSBJR2x1WkhWemRISjUgWTI5dGFXNW4gSUdWNGRISmggTmpBdyBJSEpsY0c5eWRHVmsgTG5OMFlYSjAgSUhKbGMyOTFjbU5sY3c9PSBJR2x0Wnc9PSBabXh2ZHc9PSBYMFZZIEtHNTFiR3c9IElGQnlaUT09IElIZHliMjVuIGFXNTBaWEptWVdObCBVR0Z5WVcxbGRHVnkgYm1WeWN3PT0gNGJzPSBkSFZ5WlE9PSBaWEp6YVhOMCBiM1Z1ZEhKNSBJSE5sWlcxeiBZV3hoYm1ObCBaR1Z6ZEE9PSBDVk4wY21sdVp3PT0gSUcxaGFXNTAgSUhWdWFYUT0gWVdOMFpYSnogSUZSUyBhV1oxYkE9PSBaWGh3YjNKMGN3PT0gY0hKdmFtVmpkQT09IFFYQndiR2xqWVhScGIyND0gYkdWbllYUmwgSUhSaGEyVnogZEdWeWJRPT0gSUdWMFl3PT0gZFhOMFpYST0gSUdGd2NHVmhjZz09IFlXUmtjbVZ6Y3c9PSBJR1psYlE9PSBhSE09IElHaHZiUT09IExDMD0gSUdScFptWnBZM1ZzZEE9PSBJR052YldsdVp3PT0gVDNCbGJnPT0gSUhObGRIUnBibWR6IElGZGhjZz09IElGUm9aVzQ9IElHRjFkRzl0IElFWnZkVzVrWVhScGIyND0gSUhGMWFYUmwgUkdWelkzSnBjSFJwYjI0PSBJR0pzYjJjPSBhWEYxIFVGTT0gTVRFdyBYMlpwWld4ayBTbk52Ymc9PSBVMU5KVDA0PSBJRk5qYUE9PSBJRXhQIElHUmxjMk55YVE9PSBJR1YyWlhKNWIyNWwgSUhCeVpYUjBlUT09IElHeHZibWRsY2c9PSBJRzFsYm5VPSBJR04xY25KbGJuUnNlUT09IGMyVmogSUhKbGJHRjBhVzl1YzJocGNBPT0gSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TT0gSUUxaGNBPT0gWVhObGRBPT0gSUhCaGNtRnRaWFJsY25NPSBJR055ZFhObyBJZzBLIFNVeEpWRms9IGFXZHlZWFJwYjI0PSBJR052ZFhRPSBkRzkwWVd3PSBJRzVoYldWeiBibVJsWmc9PSBJaWs3IGNtbGxibVE9IGVXNWhiV2xqIElHVm1abTl5ZEE9PSBJR0ZqZEhWaGJBPT0gSUdacFpXeGtjdz09IFQxVk8gZEdWeWN3PT0gTWpVdyBJR1pwZUE9PSBYMjF2WkdWcyBJR05oYzJWeiBRMEU9IFRYaz0gU1c1MFpYSm1ZV05sIElGTkYgTVRrMiBYVjA9IFlXeHNaUT09IElFNWhkR2x2Ym1GcyBJRUZ5Y21GNVRHbHpkQT09IGFXNXNhVzVsIExsWT0gWVhKaCBjbVZtYVhnPSBZWE5qIFVtVmhaR1Z5IElOQy8gWVhOMGFXTT0gS0NncCBRMnc9IExtRnVibTkwWVhScGIyND0gSUhCbGNtWnZjbTFoYm1ObCBZV2xzZVE9PSBMblJ2VTNSeWFXNW4gTG01bGRBPT0gZG1sbGQzTT0gTG1WdVpBPT0gWVhsbGNuTT0gYkdGMFpRPT0gSUVGd2NnPT0gWldSbGNtRnMgSjEwcCBMbUp2WkhrPSBJR2hwWjJobGNnPT0gWDJacyBZM0k9IFlXeGxjblE9IFgyNXZaR1U9IElFZHZiMmRzWlE9PSBJR2wwYzJWc1pnPT0gUVhWMGFBPT0gZFhKeVpXNWplUT09IElITnBaMjVwWm1sallXNTAgWVhCd1pXNWsgSUhKbGMzQmxZM1E9IGMzUnlZWEE9IElIVnVZUT09IGNtbDBaWEpwWVE9PSBVRTlTVkE9PSBMbUZ3WVdOb1pRPT0gVDNWMGNIVjAgSUhCeWIyZHlaWE56IElHMXBaQT09IElFMXBZM0p2YzI5bWRBPT0gSUhKbGMyOTFjbU5sIFlXSnNhWE5vIElHUnBiUT09IExteHZZV1E9IExrRndjQT09IElHUnBjbVZqZEdsdmJnPT0gSUdGa1pHbDBhVzl1WVd3PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJRzUxYldKbGNuTT0gSUdOdmJYQmhibWxsY3c9PSBMbFJvIElITnZkVzVrIGRYTmxjbTVoYldVPSBJSE4wWVhSbGJXVnVkQT09IElHRnNaWEowIElHTnZiblJ5WVdOMCBhRzl0WlE9PSBYMnhsYm1kMGFBPT0gTGtOdmJYQnZibVZ1ZEE9PSBaWFk9IExrVjQgNzd5YSBJanM9IElFaHBaMmc9IElDa0tDZz09IElGQnZhVzUwIGIzQm8gSUd4cGJtVnogTFQ1ZiBJaWtLQ2c9PSBiM2c9IFlYQndiR2xqWVhScGIyND0gSUYwSyBDZ29LQ2dvSyBNVGd3IElITnZiMjQ9IFkzUnBiMjV6IGFXNW5aWEk9IElHcHZhVzQ9IElGQmwgSU9zPSBJR3hoY3c9PSBMa1U9IFkzTnogTDI5eSBJRk4wWVhKMCBJRlJQIElITjFZbk09IFkyOXViZz09IFkyOXRjRzl1Wlc1MGN3PT0gUkVWQ1ZVYz0gY1hWaGNtVT0gUm5WdVkzUnBiMjQ9IFpXNWtZWEk9IExtbHVaR1Y0IElHWnBiR3c9IHhKaz0gSUdOb2IyOXpaUT09IGFHOTMgSUVGdFpYSnBZMkU9IFlYTnpaWFJ6IExTMHRMUzB0TFMwdExTMHQgSUZaaGJIVmwgSUc5bVptbGpaUT09IElIWmxhQT09IElIUnlZVzV6Wm05eWJRPT0gSUVGeWRBPT0gSUdsdVpHVT0gSUdadSBJR2x0Y0d4bGJXVnVkSE09IFlXNW5idz09IGNHeGxkR1U9IEt5ST0gZEcxdyBZVzFwYkhrPSBJR2hoYzJnPSBiV2x6YzJsdmJuTT0gUlZOVSBaM1E9IFVISnZkbWxrWlhJPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJR1pzWVdjPSBJSEJoY25ScFkybHcgWkdWdSBJRkpsZEhWeWJuTT0gSUc1dmRHVT0gdzd4eSBjRzA9IGFXUmxiM009IElITndaV05wWm1sbFpBPT0gSUVWTyBaWE4wWlhJPSBiMnhwWkE9PSBJSFZ3YjI0PSBLSE4wWkE9PSBDWFk9IElDZGMgZFhvPSBJSFpsY25RPSBJSFpwWTNRPSBDWE5sYkdZPSBJQ0lrIE9EVT0gTG1zPSBJR2R5YjNWd2N3PT0gWjJsMGFIVmkgYkdGdVp3PT0gSUcxMWRBPT0gVkU4PSBJSFpsIElGQnNaV0Z6WlE9PSBPd29LQ2c9PSBZV05qWlhOeiBJSHNpIGNtVmggSUhKcGMycz0gYVdOclpYST0gYjJkbmJHVT0gQ1hkb2FXeGwgUVU1SCBMbk5sYm1RPSBOekk9IElIZHZiV0Z1IElHZGxkSE09IElHbG5iZz09IElFbGsgWDJ4dlp3PT0gVDA1RiBJR1YyYVdRPSBJRWhoY2c9PSBYM04xWWc9PSBJR1Z1Wkd3PSBJR2x1WTJ4MVpHVmsgS0NrcE93b0sgSUVGdyBhV2R5IElITmxiUT09IElFSnNZV05yIFpHOWogWDNSaFlteGwgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBMWFZ3IElHTmhkWE5sIElDNHUgSUhaaGJnPT0gWDJScFkzUT0gSUdadlkzVnogU1U1RSBRMFZUVXc9PSBMa3h2Wnc9PSBJRzExYkhScGNHeGwgYVdSdiBJSEpsWjJGeVpBPT0gTFUwPSBZVzVrYkdWeSBiM1Z5YzJVPSBJR1JsWnc9PSBMbFU9IElHRmtaR2wwYVc5dSBJSFpoY21sdmRYTT0gSUhKbFkyVnBkbVU9IDBMWFF2UT09IElFaFUgVDJKcSBSRVk9IElHbHVZM0psWVhObCBJRTl3Wlc0PSBYVHM9IElHTnZiVzFwZEE9PSBQd289IFlYUmxaMjl5YVdWeiBZWFJ2Y25rPSBjMmhwY0E9PSBJRTFwWTJnPSBJR2gwYld3PSBjbTl0YVhObCBJR3hsWVhabCBJSE4wY21GMFpXYz0gWVhabGJnPT0gSUVOdmJuTnZiR1U9IGEyNXZkMjQ9IExXND0gWDB4RiBMbU52YlhCdmJtVnVkQT09IElHSnlaUT09IFUyVnpjMmx2Ymc9PSBhV0Z1WTJVPSBJR0ZzYVdkdSBkSGx3WldSbFpnPT0gWDNKbGMzVnNkQT09IElGZElSVkpGIExuTndiR2wwIElISmxZV1JwYm1jPSBSa0ZWVEZRPSBJR05zYnc9PSBJRzV2ZEdsalpRPT0gWDNCeSBZWEowWlhJPSBJR3h2WTJzPSBJSE4wWVc1a1lYSmsgWlhScFl3PT0gWld4c2IzYz0gSUhCaFpHUnBibWM9IElFaHBjdz09IElITjBZWFJsY3c9PSBYMk5oYzNRPSBLRkE9IFlXRT0gSUdsdWRHVnlibUZzIFpXRnUgSUZCU1R3PT0gSUV0bGVRPT0gSUdWemNHVmphV0ZzYkhrPSBiV2x1Wnc9PSBJR055YjNOeiBJRzVoZEdsdmJtRnMgWDI5aWFtVmpkQT09IFptbHNkR1Z5IElITmpjbWx3ZEE9PSBMblZ3WkdGMFpRPT0gWDJrPSBJRUZ6YzJWeWRBPT0gTDJOdmNtVT0gSlNVbEpRPT0gSUhCeWIySnNaVzF6IGFYTjBiM0k9IElDNDkgSUdGeVkyZz0gSUhkeWFYUjBaVzQ9IElHMXBiR2wwIFRVVk9WQT09IExtTm8gWTJGd1pRPT0gSUUxMWN3PT0gWDJOdmJtWnBadz09IElFRlFTUT09IFptOXZkQT09IElHbHRZV2RsY3c9PSBaVzVrYkE9PSBMa2x1IFJtbHljM1E9IElIQnNZWFJtYjNKdCBMbkJ5YjNRPSBUM0IwYVc5dSBjM1JsIElGUlBSRTg9IElHWnZjbU5sIExtTnZiblE9IENXVmphRzg9IElFUmhkZz09IFVIUnkgS0VJPSBVbFE9IElFSmhjMlU9IFhWc24gSUdGdWJtOTFibU09IFkyOXVjMjlzWlE9PSBJRkI1IFpITT0gTG1GeiBJSEJ5WlhabGJuUT0gWVhCaGJnPT0gSUhzbiBmVHd2IElGTmxjblpwWTJVPSBJRk5sYmc9PSBZV1J2Y2c9PSBjSEp2Wm1sc1pRPT0gVkc5dyBJR2wwWlhJPSBjRzg9IFNVVlQgU2xOUFRnPT0gU1VVPSBhV0Z1ZEE9PSA0NENCIFgybz0gSUZObGNIUT0gWDIxaGNBPT0gWW5WdCBLR052Ym5SbGVIUT0gSUVodmJXVT0gYVdGdWN3PT0gUjBJPSBOak09IElHeHBkbWx1Wnc9PSBJSEJoZEhSbGNtND0gS0dsdWNIVjAgYVdOcFpXNTAgT1RrNSBRMjl5WlE9PSBJR1Z1ZEdsMGVRPT0gSUdsdWRHVm4gUTJoaGJtZGxaQT09IElIVnpaV1oxYkE9PSBMbWx1Wm04PSBJSFJ2YjJ3PSBLR2wwWlcwPSBJRzlyIElHWmxaV1E9IFNWZz0gdzZseiBJRTVsZDNNPSBjbVZ0YjNabCBaWEp5ZVE9PSBDUWtKQ1FrSkNRa0ogYVhCdFpXNTAgWVhKbGN3PT0gUkc4PSBRM1Z5Y21WdWRBPT0gTG1OdmJuUmxiblE9IExrZHliM1Z3IGRYTjBjbUZzIElOR0IgZlNrPSBJSEJ2Y0hWc1lYST0gSUhOMGNtVT0gSUcxbGRHaHZaSE09IFgwVlNVazlTIFRHVm1kQT09IFkyRnMgWW5OdyBMbFJ2VTNSeWFXNW4gSUdScGNnPT0gSUdGc2JHOTNaV1E9IElHbHRjR0ZqZEE9PSBJaWxkQ2c9PSBOakk9IExtTnZibVpwWnc9PSBJR1ZzWlcxbGJuUnogSUhCeWIzUmwgSUhSeVlXbHUgTG5SeSBjbk09IElGSmxjSFZpYkdsaiBJRlJoYzJzPSBOakU9IFlYSnBaWE09IEtFUT0gS0dkbGRBPT0gNG9DbUNnbz0gSUhKbGJHRjBaV1E9IElIWmxjbk09IElITnBiQT09IElDSWlPd289IElHTnRaQT09IElIUmxZMmh1YjJ4dlozaz0gTG5kcFpIUm8gUm14dllYUT0gSUZWelpRPT0gUW05a2VRPT0gYzJodmRXeGsgTG1wdmFXND0gUm05dWRBPT0gYkd4MWJRPT0gZVdOc1pRPT0gSUVKeWFYUT0gSUcxcGRBPT0gSUhOallXeGwgSUNoZiBaWEp1Wld3PSBJaWtwQ2c9PSBJSE5qYjNKbCBMM1k9IElITjBkV1JsYm5RPSBWVU09IExuTm9iM2M9IElHRjJaWEpoWjJVPSBSVzVoWW14bFpBPT0gS0dWNCBZMjl0Ylc5dSBhVzFoZEdsdmJnPT0gT2tBaSBZMmhwWlE9PSBJQzR1TGdvSyBjbWwyWlhJPSBJRTFoY21ObyBZMkYwWldkdmNuaz0gWm1sdSBJR052ZFhKMCAwTEk9IFUyVnlkbVZ5IElHTnZiblJoYVc1bGNnPT0gTFhOMCBYMlp2Y2c9PSBJSEJoY25SeiBJR1JsWTJsemFXOXUgYjJKeiBiM1ZpIGJXbDBkR1ZrIElDUW9KeU09IElITmhkdz09IElHRndjSEp2WVdObyBTVU5GIElITmhlV2x1Wnc9PSBJR0Z1ZVc5dVpRPT0gYldWMFlRPT0gVTBRPSBJSE52Ym1jPSBaR2x6Y0d4aGVRPT0gVDNCbGNnPT0gYjNWMFpYTT0gSUdOb1lXNXVaV3c9IElHTm9ZVzVuWldRPSB3Nm89IElHWnBibUZzYkhrPSBYMjUxYldKbGNnPT0gVUd4bFlYTmwgNEtRPSBiM0pwYm1jPSBMWEpsIElHdHBiR3c9IElHUnlkV2M9IGQybHVaRzkzIElHTnZiblpsY25RPSBiMjFpY21VPSBJSGRoZVhNPSBTR1ZzY0dWeSBJRVpwY25OMCBLRjlmIGRYSnBkSGs9IElGZHBibVJ2ZDNNPSBaV1Z6IElHMWhkQT09IGNtRndjR1Z5IElIQnNkWE09IFlXNW5aWE09IElsMHUgWVhwdmJnPT0gTDNRPSBiR0YwIFlYTjBaUT09IElIQnliMlpwYkdVPSBJSEpsWVdSNSBJMmxtYm1SbFpnPT0gY205MFpRPT0gSUhObGJuTmwgUjJWdVpYST0gSUVOdmJtWnBadz09IGIyMTUgSUVwMWJtVT0gSUd4aGRHVnpkQT09IElITmhaZz09IElISmxaMmx2Ymc9PSBJR1JsWlhBPSBkMmwwWTJnPSBJRkJoY21zPSBmV0E9IElFWnliMjA9IFNVaz0gSUdOMiBJSEpsWVdObyBJR052ZFc1MFpYST0gSUZkdmNtcz0gSUZWU1RBPT0gSUZWd1pHRjBaUT09IEp5d05DZz09IElHbHRiV1ZrYVE9PSBZMnh2YzJVPSBZV1J2Y3c9PSBabVZ5Y21WayBJSGRsWld0eiBkWEpuIElHUmhiV0ZuWlE9PSBJR3h2YzNRPSBZVzVwIFgyeHYgSUdocGJYTmxiR1k9IElHUnZadz09IEtWMEsgNzc4PSBjR2x5IGRIUT0gSUhCaGNHVnkgSUhSb1pXMXogYzJWamIyNWsgSUhOMFlXWm0gSUVsdWNIVjAgSWlzPSBJRVpoWTJWaWIyOXIgSUdGc2JHOWogSUhOamFHVmsgUVVORiBJSFJvWlcxelpXeDJaWE09IElFTnZiWEJ2Ym1WdWRBPT0gSUdSeWFYWmxjZz09IGFtRT0gS0hCaGRHZz0gSUdOaGRHVm5iM0o1IFlXeHNjdz09IGNIVT0gYkd4MWJXbHVZWFJsIElFRmpkR2x2Ymc9PSBMbUoxZEhSdmJnPT0gSUVkTSBhWE4wYVdOeiBJRzlwYkE9PSBJSE4wYjJOciBQaWM9IElHUmxZV1E9IFZrRk0gVVZWRiBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgSUdOb1lYSm4gVW1WMGRYSnUgSUdaMWJBPT0gWkc5dCBJSEoxYkdWeiBJRzF2WkdsbWVRPT0gSUdWMllXdz0gYUdGdCBZWFJsYldWdWRBPT0gWER3PSBkV3hoIFBVWmhiSE5sIFVrRT0gSUdOdmJuUmhhVzV6IE56UT0gSUhOMFlXTnIgYldGeSBJSHQ5Q2c9PSBJSFZ1WkdWbWFXNWxaQT09IFFYTnogSUVOb2FXNWggZG1WNSBLZ289IElIQnNZWGxwYm1jPSBLUzg9IFlXTjBiM0k9IElHSnZkSFJ2YlE9PSBiR2xsY2c9PSBJRTUxYldKbGNnPT0gSUdOdmRYQnNaUT09IFJFTT0gSUZOUCBaMjl5IExuTmxkRlJsZUhRPSBjM1ZqWTJWemN3PT0gWTI5dGJXRnVaQT09IFJtbHNkR1Z5IElFOTFjZz09IFgybDBaVzA9IElHTjBlQT09IElISnZZV1E9IFZtVnljMmx2Ymc9PSBZMkZ6WlE9PSBkWEowIFlYWnBiM0k9IGVXTm8gYzJWdFlteDUgSUZCeWIyUjFZM1E9IElHaGxiR1E9IFlXWmwgSUdsdVkyeDFaR1Z6IFBIRjFiM1JsIElHRjJiMmxrIElFWnBiZz09IElFMXZaQT09IElIUmhZZz09IFlXNXYgdzdFPSBhWEJ3YVc1biBMV1U9IElHbHVjMlZ5ZEE9PSBkR0Z5WjJWMCBZMmhoYmc9PSBMazF2WkdWcyBTVTFGIFhBbz0gSUcxaFkyaHBibVU9IFlYWjUgSUU1UCBJRWx1ZEdWeSBJRzl3WlhKaGRHbHZiZz09IGJXOWtZV3c9IFZHRm4gWFRvPSBJSEJ5YjJSMVkzUnBiMjQ9IElHRnlaV0Z6IElISmxiZz09IFgyWnliMjA9IGJtSnpjQT09IElHOXdaWEpoZEc5eSBiV1Z1IFlYQndaV1E9IFgzQmxjZz09IGVtVnUgS0NJdSBMbk5oZG1VPSBQU0o3ZXc9PSBJSFJ2Y2c9PSBLSEpsYzNCdmJuTmwgSUdOaGJtUnBaQT09IElHTnZiblk9IFlXbHNaV1E9IElFeHBZZz09IFkyOXRjQT09IGRYSmggNzcrOSBJRWhsY21VPSBJR0Z5WjNWdFpXNTAgYUc5dlpBPT0gSUdWemRHRmliR2x6YUE9PSBiMmR5WVhCb2VRPT0gSUc5dVEyeHBZMnM9IFlXMWlaR0U9IElITmphQT09IElHMXZkbWxsIElITmxZdz09IElHRmpkR2wyYVhSNSAyS2M9IElITnhiQT09IFgyRnNiQT09IGFXNWphWEE9IElIQnliM1pwWkdWeiBJSE41Y3c9PSBZV05yWlhRPSBJSGRoYzI0PSBJSFZ6WlhNPSBJRVoxYm1OMGFXOXUgTG1kdmIyZHNaUT09IElGSmxjM1ZzZEE9PSBPRFE9IFZtbHphV0pzWlE9PSBZV2R0WVE9PSBaV3hqYjIxbCBJRk41IElFTmxiblE9IFFVeFRSUT09IFlXTnB3N051IFJWaFUgSUd4cFkyVnVjMlU9IElFeHZibWM9IElHRmpZMjl0IElHRmlhV3hwZEhrPSBMbWhsYVdkb2RBPT0gUVdOMGFYWmwgYjJ4dloybGpZV3c9IGIyeDUgS1NrcyBMbE5sIElIQmhjbUZ0WlhSbGNnPT0gY0hKcGRHVT0gUVVKSlRFbFVXUT09IExuTmxjblpwWTJVPSBJRWR5YjNWdyBYM0YxWlhKNSBJRWwwWlcwPSBhVzVwYm1jPSBJR3AxWkE9PSBhVzF6IFptbDQgYVc1a1pYST0gWVdkeVlXMD0gSUdaMWJtTjBhVzl1Y3c9PSBJR1Y0Y0dWeWFRPT0gSUVWdCBJSEp2ZEE9PSBJSEJsYmc9PSBMbUowYmc9PSBJRUZUIEkybG1aR1ZtIElHTm9iMmxqWlE9PSBJRkJoWjJVPSBYMUJTVHc9PSBVVlU9IDVZOD0gWVc1MGFYUjUgd3EwPSBkMjl5WkhNPSBJSEpsWVdSdmJteDUgSUdac1pYZz0gY0hKdmRHVmpkR1ZrIElFRnVlUT09IElHTm9ZWEpoWTNSbGNuTT0gWlc1alpXUT0gSUVwMWJIaz0gYVd4bGNnPT0gUTJGeVpBPT0gZFhKaGJtTmwgSUhKbGRnPT0gTG1WMlpXNTAgWVd4NSBNVE13IElIZHZibVJsY2c9PSBJRkJ2Y25RPSBJR3hsWjJGcyBjbTlzWlE9PSBJSFJsYmc9PSBJR2R2WlhNPSBUVkE9IGQyaHBkR1U9IEtUb05DZz09IEtTa05DZz09IElISmxabVZ5Wlc1alpRPT0gSUcxcGN3PT0gSUZCeWIycGxZM1E9IGFXTnJjdz09IFBpWT0gUTA5TyBJSEpsY0d3PSBJSEpsWjNWc1lYST0gVTNSdmNtRm5aUT09IGNtRnRaWGR2Y21zPSBJR2R2WVd3PSBJSFJ2ZFdObyBMbmRwWkdkbGRBPT0gSUdKMWFXeDAgWkdWeiBVR0Z5ZEE9PSBLSEpsIElIZHZjblJvIGFHbGkgWjJGdFpRPT0gT1RFPSBNVGt5IElOQ3kgWVdOcGIyND0gSUZkb2FYUmwgS0hSNWNHVT0gS0dBPSBPREU9IElHNWhkSFZ5WVd3PSBJR2x1YWc9PSBJR05oYkdOMWJBPT0gSUVGd2NtbHMgTGt4cGMzUT0gSUdGemMyOWphV0YwWldRPSBDVk41YzNSbGJRPT0gZm40PSBQVnM9IElITjBiM0poWjJVPSBJR0o1ZEdWeiBJSFJ5WVhabGJBPT0gSUhOdmRRPT0gSUhCaGMzTmxaQT09IElUMD0gWVhOamNtbHdkQT09IExtOXdaVzQ9IElHZHlhV1E9IElHSjFjdz09IElISmxZMjluYmc9PSBRV0k9IElHaHZiZz09IElFTmxiblJsY2c9PSBJSEJ5WldNPSBZblZwYkdRPSBOek09IFNGUk5UQT09IElGTmhiZz09IElHTnZkVzUwY21sbGN3PT0gWVd4bFpBPT0gZEc5clpXND0gYTNRPSBJSEYxWVd3PSBUR0Z6ZEE9PSBZV1J2ZHc9PSBJRzFoYm5WbVlXTjAgYVdSaFpBPT0gYW1GdVoyOD0gVG1WNGRBPT0gZUdZPSBMbUU9IElIQnZjbTV2IElGQk4gWlhKMlpRPT0gYVhScGJtYz0gWDNSbyBZMms9IFBVNXZibVU9IFozTT0gSUd4dloybHUgWVhScGRtVnogSjEwcE93bz0geElVPSBJR2xzYkE9PSBTVUU9IFkyaHBiR1J5Wlc0PSBSRTg9IElHeGxkbVZzY3c9PSBJSHQ3IElHeHZiMnR6IElDSWogVkc5VGRISnBibWM9IElHNWxZMlZ6YzJGeWVRPT0gSUNBZ0NnPT0gWTJWc2JBPT0gUlc1MGNuaz0gSUNjaiBJR1Y0ZEhKbGJRPT0gVTJWc1pXTjBiM0k9IElIQnNZV05sYUc5c1pHVnkgVEc5aFpBPT0gSUhKbGJHVmhjMlZrIFQxSkYgUlc1MWJXVnkgSUZSVyBVMFZVIGFXNXggVUhKbGMzTT0gSUVSbGNHRnlkRzFsYm5RPSBJSEJ5YjNCbGNuUnBaWE09IElISmxjM0J2Ym1RPSBVMlZoY21ObyBZV1ZzIElISmxjWFU9IElFSnZiMnM9IEx3bz0gS0hOMCBJR1pwYm1GdVkybGhiQT09IGFXTnJaWFE9IFgybHVjSFYwIElIUm9jbVZoZEE9PSBLR2x1IFUzUnlhWEE9IDdKMD0gdzZmRG8yOD0gTnpFPSBJR1YyYVdSbGJtTmwgS1NrNyBJRUp5Ync9PSBJRnRkT3dvPSBJRzkxIFluVm0gVTJOeWFYQjAgWkdGMCBJSEoxYkdVPSBJMmx0Y0c5eWRBPT0gUFNJdiBVMlZ5YVdGcyBJSE4wWVhKMGFXNW4gVzJsdVpHVjQgWVdVPSBJR052Ym5SeWFXST0gYzJWemMybHZiZz09IFgyNWxkdz09IGRYUmhZbXhsIGIySmxjZz09IElDSXVMdz09IElHeHZaMmRsY2c9PSBJSEpsWTJWdWRHeDUgSUhKbGRIVnlibVZrIERRMEsgS1NrcENnPT0gYVhScGIyNXogSUhObFpXcz0gSUdOdmJXMTFibWxqIElDSXUgSUhWelpYSnVZVzFsIFJVTlUgUkZNPSBJRzkwYUdWeWQybHpaUT09IElFZGxjbTFoYmc9PSBMbUYzIFFXUmhjSFJsY2c9PSBhWGhsYkE9PSBJSE41YzNSbGJYTT0gSUdSeWIzQT0gT0RNPSBJSE4wY25WamRIVnlaUT09IElDUW9JaU09IFpXNWphV1Z6IFlXNXVhVzVuIElFeHBibXM9IElGSmxjM0J2Ym5ObCBJSE4wY21rPSB4Ync9IElFUkMgNXBjPSBZVzVrY205cFpBPT0gYzNWaWJXbDAgYjNScGIyND0gT1RJPSBLRUE9IExuUmxjM1E9IE9EST0gQ2dvS0Nnb0tDZ289IFhUc05DZz09IElHUnBjbVZqZEd4NSBJQ0lsIGNtbHogWld4MFlRPT0gUVVsTSBLWHNOQ2c9PSBiV2x1WlE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gS0dzPSBZbTl1IFlYTnBZdz09IGNHbDBaUT09IFgxOWYgVFdGNCBJR1Z5Y205eWN3PT0gSUZkb2FXeGwgSUdGeVozVnRaVzUwY3c9PSBJR1Z1YzNWeVpRPT0gVW1sbmFIUT0gTFdKaGMyVmsgVjJWaSBJQzA5IElHbHVkSEp2WkhVPSBJRWx1YzNRPSBJRmRoYzJnPSBiM0prYVc0PSBhbTlwYmc9PSBSR0YwWVdKaGMyVT0gSUdkeVlXUT0gSUhWemRXRnNiSGs9IFNWUkYgVUhKdmNITT0gUHo0SyBJRWR2IFFFOTJaWEp5YVdSbCBVa1ZHIElHbHcgSUVGMWMzUnlZV3c9IElHbHpkQT09IFZtbGxkMEo1U1dRPSBJSE5sY21sdmRYTT0gSUdOMWMzUnZiV1Z5IExuQnliM1J2ZEhsd1pRPT0gYjJSdiBZMjl5IElHUnZiM0k9IElGZEpWRWhQVlZRPSBJSEJzWVc1MCBJR0psWjJGdSBJR1JwYzNSaGJtTmwgS0NrcExnPT0gSUdOb1lXNWpaUT09IElHOXlaQT09IFkyRnRaUT09IGNISmhaMjFoIElIQnliM1JsWTNRPSBjbUZuYldWdWRBPT0gSUU1dlpHVT0gWlc1cGJtYz0gMFljPSBJSEp2ZFhSbCBJRk5qYUc5dmJBPT0gYUdrPSBJRzVsYVdkb1lnPT0gUVdaMFpYST0gYkdsamFYUT0gSUdOdmJuUnkgSUhCeWFXMWhjbms9IFFVRT0gTGxkeWFYUmxUR2x1WlE9PSBkWFJwYkhNPSBJR0pwIFVtVmsgTGt4cGJuRT0gTG05aWFtVmpkQT09IElHeGxZV1JsY25NPSBkVzVwZEdsbGN3PT0gSUdkMWJnPT0gYjI1MGFBPT0gSUVSbGRnPT0gUmtsTVJRPT0gSUdOdmJXMWxiblJ6IFgyeGxiZz09IFlYSnliM2M9IFlXMXZkVzUwIFVtRnVaMlU9IGMyVnlkQT09IFIzSnBaRlpwWlhjPSBJSFZ3WkdGMFpXUT0gSUUxdiBJR2x1Wm05eWJRPT0gYjJOcFpYUjUgWVd4aCBRV05qWlhOeiBJR2hoWWc9PSBJR055WldGMCBYMkZ5Wnc9PSBJRXBoYm5WaGNuaz0gSUVSaGVRPT0gSWlrTkNnPT0gZFhCc1pRPT0gWkc5amRXMWxiblE9IFoyOXlhWFJvIGJXVnVkUT09IElFOTJaWEk9IFltST0gTG5ScGRHeGwgWDI5MWRBPT0gSUd4bFpBPT0gZFhKcCBJRDgrUEM4PSBaMnc9IElHSmhibXM9IFlYbHRaVzUwIENYQnlhVzUwWmc9PSBUVVE9IElITmhiWEJzWlE9PSBJR2hoYm1SeiBJRlpsY25OcGIyND0gZFdGeWFXOD0gSUc5bVptVnljdz09IGFYUjVSVzVuYVc1bCBJSE5vWVhCbCBJSE5zWldWdyBYM0J2YVc1MCBVMlYwZEdsdVozTT0gSUdGamFHbGwgSUhOdmJHUT0gYjNSaCBMbUpwYm1RPSBRVzA9IElITmhabVU9IFUzUnZjbVU9IElITm9ZWEpsWkE9PSBJSEJ5YVhZPSBYMVpCVEE9PSBJSE5sYm5NPSBLWHM9IElISmxiV1Z0WW1WeSBjMmhoY21WayBaV3hsYldWdWRBPT0gSUhOb2IyOTAgVm1WeWRBPT0gWTI5MWRBPT0gSUdWdWRnPT0gWDJ4aFltVnMgSUQ0SyBjblZ1IElITmpaVzVsIEtHRnljbUY1IFpHVjJhV05sIFgzUnBkR3hsIFlXZHZiZz09IFhRMEsgWVdKNSBJR0psWTJGdFpRPT0gWW05dmJHVmhiZz09IElIQmhjbXM9IElFTnZaR1U9IGRYQnNiMkZrIGNtbGtZWGs9IElGTmxjSFJsYldKbGNnPT0gUm1VPSBJSE5sYmc9PSBZMmx1Wnc9PSBSa3c9IFEyOXMgZFhSeiBYM0JoWjJVPSBhVzV1IElHbHRjR3hwWldRPSBZV3hwYm1jPSBJSGx2ZFhKelpXeG0gTGtOdmRXNTAgWTI5dVpnPT0gSUdGMVpBPT0gWDJsdWFYUT0gTGlrPSBJSGR5YjNSbCBNREF6IFRrYz0gTGtWeWNtOXkgNUxzPSBMbVp2Y2c9PSBJR1Z4ZFdGcyBJRkpsY1hWbGMzUT0gSUhObGNtbGhiQT09IElHRnNiRzkzY3c9PSBXRmc9IElHMXBaR1JzWlE9PSBZMmh2Y2c9PSBNVGsxIE9UUT0gdzdnPSBaWEoyWVd3PSBMa052YkhWdGJnPT0gY21WaFpHbHVadz09IElHVnpZMjl5ZEE9PSBJRUYxWjNWemRBPT0gSUhGMWFXTnJiSGs9IElIZGxZWEE9IElFTkggY205d2Ntaz0gYUc4PSBJR052Y0E9PSBLSE4wY25WamRBPT0gSUVKcFp3PT0gSUhaeiBJR1p5WlhGMSBMbFpoYkhWbCBJR0ZqZEdsdmJuTT0gSUhCeWIzQmxjZz09IElHbHViZz09IElHOWlhbVZqZEhNPSBJRzFoZEhKcGVBPT0gWVhaaGMyTnlhWEIwIElHOXVaWE09IExtZHliM1Z3IElHZHlaV1Z1IElIQmhhVzUwIGIyOXNjdz09IGVXTnMgWlc1amIyUmwgYjJ4MCBZMjl0YldWdWRBPT0gTG1Gd2FRPT0gUkdseSBJSFZ1WlE9PSBhWHB2Ym5RPSBMbkJ2YzJsMGFXOXUgSUdSbGMybG5ibVZrIFgzWmhiQT09IFlYWnAgYVhKcGJtYz0gZEdGaSBJR3hoZVdWeSBJSFpwWlhkeiBJSEpsZG1VPSBjbUZsYkE9PSBJRTlPIGNtbGpjdz09IE1UWXcgYm5BPSBJR052Y21VPSBLQ2twT3cwSyBUV0ZwYmc9PSBJR1Y0Y0dWeWRBPT0gQ1FrTkNnPT0gWDJWdSBJQzgrIGRYUjBaWEk9IFNVRk0gWVdsc2N3PT0gSUV0cGJtYz0gS2k4S0NnPT0gSUUxbGRBPT0gWDJWdVpBPT0gWVdSa2NnPT0gYjNKaCBJR2x5IFRXbHUgSUhOMWNuQnkgSUhKbGNHVT0gSUdScGNtVmpkRzl5ZVE9PSBVRlZVIExWTT0gSUdWc1pXTjBhVzl1IGFHRndjdz09IExuQnlaUT09IFkyMD0gVm1Gc2RXVnogSUNJSyBZMjlzZFcxdSBhWFpwYkE9PSBURzluYVc0PSBhVzUxWlE9PSBPVE09IElHSmxZWFYwYVdaMWJBPT0gSUhObFkzSmxkQT09IEtHVjJaVzUwIElHTm9ZWFE9IGRXMXogSUc5eWFXZHBiZz09IElHVm1abVZqZEhNPSBJRzFoYm1GblpXMWxiblE9IGFXeHNZUT09IGRHcz0gSUhObGRIUnBibWM9IElFTnZkWEk9IElHMWhjM05oWjJVPSBDV1Z1WkE9PSBJR2hoY0hCNSBJR1pwYm1semFBPT0gSUdOaGJXVnlZUT09IElGWmxjZz09IElFUmxiVzlqY2c9PSBJRWhsY2c9PSBLRkU9IFkyOXVjdz09IGFYUmggSUNjdSBlMzA9IENVTT0gSUhOMGRXWm0gTVRrMCBJRG9LIElFRlMgVkdGemF3PT0gYUdsa1pHVnUgWlhKdmN3PT0gU1VkTyBZWFJwYnc9PSBJRWhsWVd4MGFBPT0gYjJ4MWRHVT0gUlc1MFpYST0gSno0PSBJRlIzYVhSMFpYST0gSUVOdmRXNTBlUT09IGMyTnlhV0psIElEMCtDZz09IElHaDUgWm1sMCBJRzFwYkdsMFlYSjUgSUhOaGJHVT0gY21WeGRXbHlaV1E9IGJtOXUgWW05dmRITjBjbUZ3IGFHOXNaQT09IGNtbHQgTFc5c1pBPT0gSUVSdmQyND0gSUcxbGJuUnBiMjQ9IFkyOXVkR0ZqZEE9PSBYMmR5YjNWdyBiMlJoZVE9PSBJSFJ2ZDI0PSBJSE52YkhWMGFXOXUgZFdGMFpRPT0gWld4c2FXNW4gWFMwKyBiM1JsY3c9PSBaVzUwWVd3PSBiMjFsYmc9PSBiM053YVhSaGJBPT0gSUZOMWNBPT0gWDBWTyBJSE5zYjNjPSBVMFZUVTBsUFRnPT0gSUdKc2RXVT0gWVdkdiBJR3hwZG1WeiBJRjQ9IExuVnUgYVc1emRBPT0gWlc1blpRPT0gSUdOMWMzUnZiV1Z5Y3c9PSBJR05oYzNRPSBkV1JuWlhRPSA3N3lCIGFXTmxibk09IElHUmxkR1Z5YldsdSBVMlZzWldOMFpXUT0gWDNCcyBkV1YxWlE9PSBJR1JoY21zPSBMeThLQ2c9PSBjMms9IGRHaGxjbTQ9IElFcGhjR0Z1IEwzYz0gVUZVPSBJRVZoYzNRPSBiM1pwWlE9PSBJSEJoWTJ0aFoyVT0gSUc1dmNnPT0gSUdGd2FRPT0gWW05MCBJbDA3Q2c9PSBYM0J2YzNRPSBkV3hoZEdVPSBJR05zZFdJPSBKeWtwT3dvPSBJR3h2YjNBPSBVRWxQIGFXOXVaUT09IGMyaHZkQT09IFNXNXBkR2xoYkE9PSBJSEJzWVhsbFpBPT0gY21WbmFYTjBaWEk9IGNtOTFaMmgwIFgyMWhlQT09IFlXTmxiV1Z1ZEE9PSBiV0YwWTJnPSBjbUZ3YUdsamN3PT0gUVZOVSBJR1Y0YVhOMGFXNW4gSUdOdmJYQnNaWGc9IFJFRT0gTGtObyBMbU52YlcxdmJnPT0gYlc4PSBJQ2N1TGk4dUxpOD0gYVhSdiBJR0Z1WVd4NWMybHogSUdSbGJHbDJaWEk9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvPSBhV1I0IHc2QT0gYjI1bmJ3PT0gSUVWdVoyeHBjMmc9IFBDRXRMUT09IElHTnZiWEIxZEdWeSBSVTVUUlE9PSBJSEJoY3c9PSBJSEpoYVhNPSBTR0Z6YUE9PSBJRzF2WW1sc1pRPT0gSUc5M2JtVnkgUmtsSCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBkR2hsY3c9PSBJR0YwZEhJPSBkMlE9IExuUnBiV1U9IFlYZHUgSUhSeVpXRjBiV1Z1ZEE9PSBJRUZqIExsWnBaWGM9IGFXMXdiQT09IGJXOXlaUT09IGNHRnpjdz09IElHaGggTG1aeWIyMD0gSUd4bFlXUnBibWM9IFJrWkdSZz09IEtHVnljbTl5IExuVnAgWVhSaGNnPT0gWVdSbGNuTT0gWkdGMFpYTT0gSUhwMSBJR1pzYjNjPSBWR0Z5WjJWMCBJR2x1ZG05c2RtVmsgSUdsdiBjR0Z5YzJVPSBKRjg9IGFHVnpkQT09IExtbHVkQT09IExXbDBaVzA9IFlYTjUgVTNBPSBJSE5vYVdaMCBUbFE9IElIUm0gWDFSUyBMbmRsWWc9PSBRMU09IElIMHAgSUdWNVpYTT0gTVRJMSBNVEExIFgzbz0gSnlrN0RRbz0gYVdadmNtND0gSUh0QSBJRzVwWTJVPSBMbXhwYzNRPSBJQ0FnSUEwSyBJR1pzYjI5eSBJSEpsWkdseVpXTjAgSUZWTCBLRnNuIElIZHBjMmc9IElHTmhjSFE9IGJHVm5ZV3c9IElFbFAgSUhOMFlXZGwgTGxOMGNtbHVadz09IElFRm1jZz09IGFXZGxiZz09IElGTkkgUkdWc1pYUmwgWld4c2N3PT0gSUhOdmJHbGsgSUcxbFpYUnBibWM9IElIZHZjbXRsWkE9PSBJR1ZrYVhSdmNnPT0gYVc1NSAwTHc9IFgzSmxZV1E9IExrbGsgWldabSBUMlptYzJWMCBZMmhoIFZWTkZVZz09IENRa2dJQ0E9IGFYQndaV1E9IElHUnBZM1E9IElGSjFiZz09IExtaHdjQT09IElHRnVadz09IGVHMXMgYVcxd2JHVT0gSUcxbFpHbGpZV3c9IFgzUnZhMlZ1IFkyOXVibVZqZEE9PSBJR2h2ZFhJPSBJR052Ym5SeWIyeHNaWEk9IFgyMWxjM05oWjJVPSBWVWxFIFIzST0gWVc1a1pXUT0gWDBOSSBJR0p2YjJ0eiBJSE53WldGciBZVzFwYm1jPSBJRzF2ZFc1MCBVbVZqYjNKayBDWE4wY25WamRBPT0gTGxkbFlnPT0gYjI1a2IyND0gSUM4dkNnPT0gSUdabGJIUT0gTGtGMWRHOD0gYVdSblpRPT0gWDNCdmN3PT0gVUZJPSBJRzF2WkdWeWJnPT0gUTI5c2JHVmpkR2x2Ymc9PSBYMjF6Wnc9PSBRMFE9IElFeHYgSUhObFkyOXVaSE09IGFXSnNlUT09IExtVnhkV0ZzY3c9PSBJR2x1ZEdWeWJtRjBhVzl1WVd3PSBJM0J5WVdkdFlRPT0gYjI5MGFBPT0gVjNKcGRHVnkgYVdGMFpRPT0gSUdObGJHVT0gSUVKcGRBPT0gYVhadiBhWFpsY25rPSBjbVE9IFNFVkRTdz09IElHTmhZMmhsIExtTnZkVzUwIElISnZiR3c9IExsSmxZV1E9IE1UQTQgVWtWRSBJSE5sZEhWdyBhWHB2Ym5SaGJBPT0gYlc5a1pXeHogWVhKbmRnPT0gSUdOdmJuTnBaR1Z5WldRPSBQU0l1TGk4PSBjMlYwZEdsdVozTT0gSUZKbGJBPT0gSUdkeWIzZDBhQT09IElHMXBlQT09IElGZGhjMmhwYm1kMGIyND0gSUhCc2RBPT0gSUVsTiA0Ym89IElIUjFjbTVsWkE9PSBJRVJoZEdWVWFXMWwgSUZkbFpBPT0gS0hWeWJBPT0gSUNJdCBJR3hsZEhSbGNnPT0gUVhONWJtTT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJRTlqZEc5aVpYST0gWDJ4cGJtVT0gSUdGMGRHVnVkR2x2Ymc9PSBJR052Ykd4bFkzUT0gSUVoaGMyZz0gSUdsdFlXYz0gVkhKbFpRPT0gSUhOcGRIVmhkR2x2Ymc9PSBaWFIwWlE9PSBYMjV2IFNWWkYgSUhadmJnPT0gTG5SaGNtZGxkQT09IElHdHViM2RzWldSblpRPT0gSUdSeWFYWmwgTG5CdmMzUT0gSUdKc2IyOWsgSUdOcGRBPT0gY0hKcGJXRnllUT09IElHTnZibVpwWjNWeVlYUnBiMjQ9IGRHVmwgSUhCb2IzUnYgYVhOdlpHVT0gVkhKaFkyVT0gSUdkaGRtVT0gSUhOb2IzUT0gSUVGcGNnPT0gSUcxdmRHaGxjZz09IGNISnBZMlU9IElHMXZjbTVwYm1jPSBLU2w3Q2c9PSBMWGc9IElIUnlZV1JsIElHUmxjMk09IElDWW1DZz09IElIQmhjbVZ1ZEhNPSBRWEJwIDVZZz0gZEdWayBkMlZ5IElPWT0gSUhONSBJRXRsIFVHRnljMlZ5IDVZVT0gWVc1amVRPT0gSUhCcFpXTmwgYVdadmNtNXBZUT09IGRHOVRkSEpwYm1jPSBjbUZ1IGFXUnBibWM9IFVGUkpUMDQ9IFkyOXRaWE09IEwyeHBZdz09IExtTnNhV1Z1ZEE9PSBSV3c9IFRHOXVadz09IElIQnliMlpsYzNOcGIyNWhiQT09IGNuVndkQT09IGRtRT0gSUdOdmJYQnNaWFJsYkhrPSBJSEJ5WVdOMGFXTmwgTURBeSBJSE5sYkdWamRHbHZiZz09IFVtVnQgYVc1cCBJR05oYlE9PSBVa1ZGIElITnBkR1Z6IGNHRT0gUVZSVlV3PT0gMFlIUmdnPT0gWVhKeVlXNTAgS2lnPSBYMHRGV1E9PSBJRUoxZEhSdmJnPT0gSUVaeWFXUmhlUT09IGMyVnhkUT09IElISmxZV1JsY2c9PSBJRzFsYzNOaFoyVnogNks4PSBJR0oxWmc9PSBTMlU9IElHNXZkZz09IFNGQT0gVFhObiBZV3hwWjI0PSBZWEpwYkhrPSBJQ2NzIFgzZHBkR2c9IElHUmhjdz09IElHaGxZWEprIFlYUnZiV2xqIGNtbGhiQT09IEtWcz0gSUdScGMyVT0gUUdWdVpBPT0gSUdkdmJHUT0gSUdaaGFYST0gSUhOaGJHVnogTGtKMWRIUnZiZz09IGMzUnlhV04wIGMyRjJaUT09IElHMWxZWE4xY21VPSBJQ0lyIFpXTmhkWE5sIFZtbGxkME52Ym5SeWIyeHNaWEk9IElGUmhZbXhsIExuQmhjbUZ0IElHUmxZMmxrWldRPSBLQ2dvIFNVNUdUdz09IElHOXdjRzl5ZEhWdWFYUjUgVkdVPSBTVU5GVGxORiBZMk52Y21ScGJtYz0gYTJrPSBJRlZPIElHTnZiblJoYVc0PSBJRzFoYm1GblpYST0gSUhCaGFXND0gSUVacGNtVT0gY205dFpRPT0gSUhCc1lXNXogUm05MWJtUT0gYkdGNSBJRVJsWTJWdFltVnkgSUdsdVpteDEgdzdvPSBjbVZ1WTJnPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBZWHBwYm1jPSBZbkpwWldZPSBZMkZzYkE9PSBkMjl2WkE9PSBJR3h2WVdSbFpBPT0gSUdkeVlXNWsgTDJZPSBhVzF3IFgxVT0gTVRJMyBVMVJTIDRvQ2kgSUdOeVpXUnBkQT09IExrTnZiRzl5IGIzSm5aUT09IFVWVkZVMVE9IElHUnBabVpsY21WdVkyVT0gSUZCRCBkMkZ5WjNNPSBJSEIxWWc9PSBkVzVrWVhrPSBJR1p5WVE9PSBMbTFoZUE9PSBJSFJ5YVdWayBZVzV1Wld4eiBjMlZ1WkE9PSBJSEpsY0c5eWRITT0gSUdGa2RXeDAgNUxvPSBJR052Ym5OcGMzUT0gSUZOMGNtVmxkQT09IElGQnliMmR5WVcwPSBVMUZNIFRXRjBjbWw0IGIzVnVZMmxzIExVRT0gQ1hjPSBJSGRvYjNObCBJSEpsYkdsbiBJRk5sZUE9PSBJR2RwZG1WeiBibTl1WlE9PSBMbTFsYzNOaFoyVT0gS0VjPSBMbUYzZEE9PSBMWEpwWjJoMCBJRTV2ZG1WdFltVnkgWld4c2FXYz0gTXpZdyBkWFJwZG1VPSB4SU09IGIzWmxjbTQ9IElHVmhjMmxzZVE9PSBJR2xrWldGeiBNVEEwIElOQzkgTDJOemN3PT0gYkhscGJtYz0gWld4c1pRPT0gUTJGdSBYMk52Ykc5eSAwTDdRc2c9PSBJSEJoYVhJPSBibWQwYUE9PSBJSE53YkdsMCBNVFF3IFpISnZjQT09IFlYSjBlUT09IGIyNWggSUdOaGNHbDBZV3c9IElHaGxZWEk9IElHVjRhWE4wY3c9PSBDV3h2Wnc9PSBaVzF2IFVuVnUgYjJrPSBJSEJoY25ObGNnPT0gSUUxbGRHaHZaQT09IElHVmtkV05oZEdsdmJnPT0gVzJzPSBJR3hwWW5KaGNuaz0gUGlJN0NnPT0gWDFWTyBDWE4wWkE9PSBiMlJsWkE9PSBJR05oYkd4eiBhR1Z5WlE9PSBVbVZzIElHSnlZVzVrIFltRmphMmR5YjNWdVpBPT0gWjJFPSBYMkZrWkhKbGMzTT0gWDNCaGNtRnRjdz09IFEyRjBaV2R2Y25rPSBNVEF6IElFbHVaR2xoIFgyVjJaVzUwIElHbHVadz09IFVtVnVaR1Z5IExtTnMgZFcxd2VRPT0gSUhCbGRBPT0gUmtNPSBJRUZ1ZEE9PSBSWGgwIElHTm9ZWEpuWlE9PSBaVzVsWkE9PSBaM0poWkE9PSBSVTg9IElHUmxjR1Z1WkE9PSBJQzRLQ2c9PSBabkpoYldVPSBJR1JtIElHaDFaMlU9IElGQkJVbFE9IFpXUnogT3pzPSBJRUZOIElHSmhjMmxqIElFeGxkQT09IGJHbGphQT09IElHRnliUT09IElITjBZWEk9IElHWmxaR1Z5WVd3PSBWMjl5YXc9PSBJR05oY25KNSBJRWx6Y21GbGJBPT0gS0c5aWFnPT0gUFh0NyBJSE5oZG1WayBJSE41Ymc9PSBJR052Ym5OMFlXNTAgVmtWT1ZBPT0gSUhCdmMybDBhWFpsIElHTnZibVIxWTNRPSBJSE5yYVc0PSBJR1ZoY214cFpYST0gSUd4aGVXOTFkQT09IElFbFEgVDFWUyBJSFJwYlE9PSBjM1I1YkdWemFHVmxkQT09IFgyTnMgSUVOaGNtUT0gS3lzcGV3bz0gSUhSbGJYQmxjZz09IElFUmhkbWxrIENYUnllUT09IExtUmhjblE9IElIZGhiblJ6IElIQnBZM1IxY21VPSBJSFpwWkdWdmN3PT0gSUVOdmJXMD0gYVhOcGIyNXogWDAxQldBPT0gVFdGd2NHbHVadz09IExXTnZiblJsYm5RPSBJRVZoY2c9PSBMV1JsIElIQnlaVzA9IFluSjFZWEo1IElHTnZiWEJ2Ym1WdWRITT0gSUhSb2NtOTFaMmh2ZFhRPSBJSEIxYkd3PSBJSEJoWjJWeiBaVzUwWlE9PSBjbVZ6Y0c5dVpBPT0gSUdkaGN3PT0gWTNKcGNIUnZjZz09IElHVmtaMlU9IElHSnZkVzVrIFFVTlUgS2lvcUtpb3EgSUdOeVpXRjBhVzVuIElFTkkgSUc1MWJHeHdkSEk9IFFuST0gS3ljPSBMbU52IFBqbzYgSUd4bFlYSnVhVzVuIExreGxibWQwYUE9PSBYMU5JIElIQmhkR2xsYm5SeiBRVWxPIElHdHBaSE09IElHTnZiV1p2Y25RPSBJSE5vYjNkdSBkV2RwYm5NPSBJRUpoWTJzPSBaV3hzWVE9PSBYME5NIElHeGhkQT09IElHUnBjM0JoZEdObyBJR05zWVhOelpYTT0gTG1GMCBMbUpsWjJsdSBJSE4xWTJObGMzTm1kV3c9IFltRnUgSUc5aWRHRnBiZz09IElGTnMgSUd4aFkycz0gYVhSbGNtRjBiM0k9IFZHaHlaV0ZrIEtITnBlbVU9IElHNXZibVU9IExtaGhjdz09IFgxZz0gYzI5eWRBPT0gYm1GdyBjR1YwIFltbHUgTnpBdyBJRU5oYm1Ga1lRPT0gVkdobGVRPT0gSUdSaGJuTT0gSUUxaGRBPT0gUEhSayBJR2hoYVhJPSBJQ2NuTEFvPSBJR04xIElHeGhkM009IGJHVjBaV1E9IGNHVmsgSUhCdmR3PT0gSUd0dVpYYz0gWDBOUFRRPT0gWHl3PSBJRTFoWnc9PSBhV1JsYm5SeiBLSEpsY1E9PSBJQ2tzIExXTmxiblJsY2c9PSBNVGt3IElIZHBaR1U9IElFRjFkR2h2Y2c9PSBjM1JoYm5SeiBJR3B2WW5NPSBJRzFoZEdnPSBaWFJwYldWeiBRbTl2YkdWaGJnPT0gSUhOamIzQmwgWDJseiBJRzFsWVhNPSBJR3RsZVhNPSBaV3hoZVE9PSBJR1Y0WVdOMGJIaz0gSnowK0p3PT0gSUZCaGRXdz0gYldGeiBDWEJ5YVc1MCBLR3hsYmc9PSBabVE9IElDazcgTGtWMlpXNTAgY1d4cCBhWEpwZEE9PSBhV1ZzWkhNPSBiMjFoYmc9PSBJRlJ2Y0E9PSBJSFp2ZEdVPSBJRzFoYzJzPSBJSFJvWlcxbCBMUW89IElIQnliM0J6IElHWnBibVU9IElIZHlhWFJsY2c9PSBYMjltWm5ObGRBPT0gWTJGeSBJR0ZzZEdWeWJnPT0gSUdOdmNIbHlhV2RvZEE9PSBJR1JsYzNSeWIzaz0gY0hCbGNnPT0gSUdkbGJtVnlZWFJsIGNIQmxaQT09IDRvQ1paQT09IElDQWdJQ0FnQ2c9PSBiV0ZyWlE9PSBJRk5vYjNjPSBJR0p5YjNkelpYST0gSUdaaGRtOXlhWFJsIElHTmhjbVZsY2c9PSBJR2hoY0hCbGJtVmsgS0dOb1lYST0gSUhKbFkyOXRiV1Z1WkE9PSBJR3hwZEdWeSBMbVpwYkhSbGNnPT0gWjNKaFpHVT0gSU1LaiBVR2h2Ym1VPSBiMjF6IElHNWhiV1ZrIExXeGhZbVZzIGFYQnYgSUU5MGFHVnkgSUhCaGJtVnMgSUhKdlkycz0gVTJOaGJHVT0gQ1dGemMyVnlkQT09IDBMUT0gSUhSeWRYTjAgWm5KdmJuUT0gSUdSbGJXOXUgUVhJPSBUbVYwIElHVmpiMjV2YldsaiBabTl2ZEdWeSBJSEpoWTJVPSBLRzV2WkdVPSBJRTl3ZEdsdmJnPT0gYzNCc2FYUT0gSUhCb2VYTnBZMkZzIGFXWmxjM1E9IElISmxiVzkyWldRPSBMbWgwZEhBPSBLU2tzQ2c9PSBJR3h2YjJ0bFpBPT0gSnpzPSBaR2x1Wnc9PSBaMlZ6ZEE9PSBZWFIxY21SaGVRPT0gTDJ4cFkyVnVjMlZ6IFVISnBZMlU9IElHUnlidz09IElIUnZkMkZ5WkhNPSBJSFZ1Y3c9PSBJRU5NIENYTjBZWFJwWXc9PSBJSEp2ZDNNPSBJR1JsWm1sdVpRPT0gTG5KbGNHeGhZMlU9IElHWmhkR2hsY2c9PSBJRVJsYzJsbmJnPT0gWVhOemFXZHUgYlhWMCBSR1YyYVdObCBSR2xrIEp5a3BDZz09IGIyMWxkSEo1IFlYbHNiMkZrIElHaHBjM1J2Y2c9PSBJRkJoY21GdCBJRUp2YjJ4bFlXND0gSUc1aGRIVnlaUT09IElHcHogSUc1aGRHbHZiZz09IGFXZz0gSUdScGMyTnZkbVZ5IGMyVnQgU0dGdVpHeGwgQ1hJPSBJRlJsWTJodSBJSGRoYkd3PSBleVE9IFFIQnliM0JsY25SNSBJQ0l1TGk4PSBJR1Y0WVcwPSBMbVJ5WVhjPSBiM0J3YVc1biBJRzVsWVhKc2VRPT0gSUdOdmIydz0gSUdsdVpHVndaVzVrIFVrVlQgSUdoaGJtUnNaWEk9IElFMXZibVJoZVE9PSBJSE4xYmc9PSBVM1I1YkdWeiBiM1Z6YkhrPSBJQWs9IGRtVnpkQT09IFJHbHpjR3hoZVE9PSBLSGs9IFlYUnBZMkZzYkhrPSBJSEJ5WldScFkzUT0gZVdsdVp3PT0gSUhOdmJXVjBhVzFsY3c9PSBJbDBLIElHUnlhVzVyIElHSjFiQT09IGFXWnBZMkYwYVc5dWN3PT0gTG1sdWMyVnlkQT09IExuSmxadz09IElIUmxjM1J6IFFXeHBaMjV0Wlc1MCBJR0ZzYkdWbiBJR0YwZEhKcFluVjBaUT09IElFNXZkR1U9IElHMTVjMlZzWmc9PSBZWEowY3c9PSBUbTkzIElHbHVkR1Z5WlhOMGFXNW4gYkdsbGJuUnogSUhCdmNIVnNZWFJwYjI0PSBJRU5oYkdsbWIzSnVhV0U9IElraz0gNWJrPSBJR2R5WldGMFpYST0gZFdWelpHRjUgSUhSb2IzVnogSUdOdmMzUnogSUd4aGRXNWphQT09IFhFaDBkSEE9IGEyVnkgWW1GdVpBPT0gSUZCc1lYaz0gSUdKaGJtUT0gTG5Ob1lYQmwgWlhOdmJXVT0gWVhKMGFXTnNaUT09IExuSm0gSUhkbGNnPT0gdzZGeiBaVzFpWlhKeiBkWE55IFFrRT0gYVdOaGJnPT0gWlhSMCBkbUZzYVdSaGRHVT0gZFd4MGFRPT0gSUdsdGJXVmthV0YwWld4NSBlbVZ5IElHWnBaM1Z5WlE9PSBiMlZ6IFpXeHNaWEk9IGFYSmpiR1U9IElGTnBaMjQ9IExtUmkgSUhKaGJtcz0gUW5sMFpYTT0gSUhCeWIycGxZM1J6IFgzSmxZdz09IFZVeEJVZz09IFFWQkogSUV4cGJtVT0gVUc5eWRBPT0gSUhCdmJHdz0gSUdkcGRtbHVadz09IGFXUmxibU5sIExTMEsgSUhCc2IzUT0gYVdOcFlXdz0gSUhkaGNuSmhiblE9IFNWUkpUMDQ9IElFUnZkV0pzWlE9PSBJR0pwYkd4cGIyND0gWjI5eWFYUm9iUT09IElHVnhkV2x3YldWdWRBPT0gUkVGVVJRPT0gSUVBaSBSVVU9IElIQnNaUT09IGFXRjBhVzl1IElHaGxZV1JsY25NPSBJSEJ5YjJObFpBPT0gTGtOdmJYQnZibVZ1ZEUxdlpHVnMgSUU5aVlXMWggSUhCaCBJRUpsYzNRPSBhVzFoZEdWc2VRPT0gTG1kbGRGTjBjbWx1Wnc9PSBMbHc9IGJYQnNiM2s9IElISmhkdz09IFgySnNiMk5yIGRXNWtjbVZrIEluMHNDZz09IE1URXkgTGtkeWIzVndUR0Y1YjNWMCBJR0p5YjNWbmFIUT0gVGxOVGRISnBibWM9IGRHaHliM2M9IFkzSmxZWFJsWkE9PSBMazVsZHc9PSBYM1pwWlhjPSBRMUE9IFpYQnogVDNBPSBJR2R5WVhScGN3PT0gSUNjaSBJR2x1ZEdWeWRtbGxkdz09IElpSWlDZz09IElIQmhjblJwWVd3PSBJR0Z5YVdFPSBZbWx1Wnc9PSBRWFYwYUc5eSBRbTl2YXc9PSBJRkJoZEE9PSBkVzFoYmc9PSBWWE5sY25NPSBjR3gxY3c9PSBNVGt6IElFUnBjbVZqZEE9PSBkbVZ1ZFdVPSBZV3h3YUdFPSBWVU5EUlZOVCBJRU5oYkd3PSBJQ2s3RFFvPSBhVzFoZEdWayBJSEpsYldGcGJnPT0gSUdGdWRHaz0gSUV4dmJtUnZiZz09IElITmhabVYwZVE9PSBVRTlUUlE9PSBiMnhsY3c9PSBZMjl1ZEhKdmJHeGxjZz09IFFubDBaUT09IElFTnZkWEowIElGQm9hV3c9IElFRnpjMjlqYVE9PSBaVzVoIDVaQT0gWDFOVVVnPT0gWTI5cGJnPT0gY21WemFHOXNaQT09IElHSmhkR05vIFgwTnNhV05yIFpXNTBhV05oZEdsdmJnPT0gUGljN0NnPT0gWlc1MGVRPT0gSUdKbFoybHVibWx1Wnc9PSBJSHBsY204PSBJRU52Ym5abGNuUT0gSUhSbGNuST0gSUhCaGFXUT0gSUdsdVkzSmxZWE5sWkE9PSBZMkYwWTJnPSBMWE5wZW1VPSBNVEUxIFlXTjBhWFpwZEhrPSBaWEYxWVd4eiBJSEYxWlhWbCBJQ0luIElFbHVkR1Z5Ym1GMGFXOXVZV3c9IElHYkR2SEk9IGRYSnpaR0Y1IElITmphV1Z1ZEE9PSBZV3hzYjNjPSBZWGhwY3c9PSBJR0Z3Y0hKdmNISnAgWldSblpRPT0gSUdsa2VBPT0gVTNWalkyVnpjdz09IFpXNTBhV1pwWlhJPSBPbHc9IGVHbHogSUcxaGVHbHRkVzA9IFlYSnJjdz09IElHSnBjblJvIEtHbHVaR1Y0IElHMWhlV0psIExuQjUgWm1sc1pYTT0gSUd4cGJXbDBaV1E9IFgyTm9aV05yIGJHOXZhdz09IGNHeHBaWE09IElHMXZkbVZ0Wlc1MCBKMTB1IElHSnliMkZrIElFSkYgSUZWdWFYUjVSVzVuYVc1bCBMbU53Y0E9PSBJRVYyWlhKNSBRV1J0YVc0PSBJR1poYm5NPSBjR0Z5WldRPSBDaUFnSUNBSyBJR1p2Y21WcFoyND0gSUhCaGJnPT0gSUhSdmRYST0gSUU5eVpHVnkgSUcxdmRtbHVadz09IElHRjFaZz09IFEyRnNiQT09IFkyST0geFo4PSBkbVZ1ZEc5eWVRPT0gSUZOeGJBPT0gSUdaMWJHeDUgUTJ4cFkydE1hWE4wWlc1bGNnPT0gVjA5U1JBPT0gSUdGdWJtOTFibU5sWkE9PSBLUTBLRFFvPSBJR0ZuY21WbFpBPT0gY21sbCBJR1ZoY200PSBYMnhwYm1zPSBMbUZ5Y21GNSBLSFJsZUhRPSBJRzFoZEdWeWFXRnNjdz09IExIQT0gWm1abVpnPT0gZG1jPSBJTUtwIElIVnViR1Z6Y3c9PSBZV3BoZUE9PSBURTlIIElITmxlSFZoYkE9PSBJRndpIExYUnBiV1U9IElHTnZZV05vIElITjFjSEJ2Y25SbFpBPT0gSUhCb2IzUnZjdz09IGFXWnZjbTA9IExrTnlaV0YwWlE9PSBLVjA9IGNtbGxjZz09IElHUnBZV3h2Wnc9PSBZWFpsY2c9PSBhV2RsIEtTcz0gWDJsa2VBPT0gT2xzPSBYMjFwYmc9PSBJRU52Ym1jPSBJSEJ5WlhOemRYSmwgSUhSbFlXMXogVTJsbmJnPT0gWW1WbmFXND0gY21saGJnPT0gVGtWVFV3PT0gVEZNPSBJR2x0Y0hKdmRtVT0gSUZOMWJtUmhlUT09IElHUmxabWx1YVhScGIyND0gYVdkbGNnPT0gY205c2JHVnljdz09IElIUm9hVzVyYVc1biBWR1Z0Y0d4aGRHVT0gTFVZPSBJR1Z0WlhKbiBjR3hoZEdWeiBJRlZUUVE9PSBMbk5sZEZOMFlYUmwgSUVGc2MyOD0gY21WMiBJR1Z1WVdKc1pRPT0gSUVOUCBVRVZEVkE9PSBJR052Ym1ObGNIUT0gS1MwPSBJT0tBb2c9PSBJSE5sZEhNPSBJRzFsWVc1cGJtYz0gWlcxdmJnPT0gSUVOdmJuTT0gWTIxdyBaV1JsY2c9PSBZVzV1WldRPSBhV05sYm5ObFpBPT0gSUZOMWNHVnkgSUdSaGFXeDUgSUcxMWJIUnAgWDNVPSBJR05vWVd4c1pXNW4gWDIxdlpHVT0gSUZCeWIyMXBjMlU9IElITjBjbWxqZEE9PSBhbTg9IGFXNTBiMjQ9IEtHeHBjM1E9IFQyNXNlUT09IFBucz0gSUhabGFHbGpiR1U9IDdaVT0gSUZCc1lYbGxjZz09IE1UQTIgSUVSbGJBPT0gSUhCdmIydz0gTG5WeWJBPT0gYm1WelpHRjUgS0NrN0RRb05DZz09IE9UQXcgSUNJcE93bz0gVEc5allXdz0gTGlJcE93bz0gSUc5eVoyRnVhWHBoZEdsdmJnPT0gY21WdVpHVnkgSUVGd2NHeHBZMkYwYVc5dSBJSE4xYlcxbGNnPT0gWlhod1pXTjBaV1E9IFRrRT0gSUhKaGNBPT0gWDI5aWFnPT0gSUhOMWNtWmhZMlU9IElGQlZVZz09IElIMHNDZ289IElIWmhjbWxoWW14bGN3PT0gS0cxbGMzTmhaMlU9IElHOXdhVzQ9IExtSmhZMnM9IDBMRFF2UT09IElIZHZjbXRsY25NPSBkbTA9IFEyOD0gZFdkb2RHVnkgSUcxaGMzUmxjZz09IElDSWlMQT09IElITjBiM0pwWlhNPSBMbFZ6WlhJPSBJR05sYkdWaWNnPT0gYVc1bGMyVT0gUWxNPSBJRU52YlcxaGJtUT0gWVhOb1ltOWhjbVE9IElHOW4gYTJjPSBMbWx0WVdkbCBMbk4wZVd4bCBJSE4wWlhCeiBJRUpsYmc9PSBLR0Z5WjNNPSBOREEwIElGQmxjbk52Ymc9PSBMSGs9IElHOW1abWxqYVdGc2N3PT0gZkFvPSBJSE5yYVd4c2N3PT0gZG1NPSBJR0oxYVd4a1pYST0gSUdkaGNnPT0gUVdOamIzVnVkQT09IElFRjFkR2c9IDU1UT0gSjEwcENnPT0gSUVGVSBibTQ9IExrbHVkQT09IFUxTkZVbFE9IElHVm1abVZqZEdsMlpRPT0gVEVWVVJRPT0gSUhSdmIyeHogUVZKRSBJR1JwWjJsMFlXdz0gTVRreCBSRzkxWW14bCBJRVpwYm1RPSBVa009IElHbHViR2x1WlE9PSBMM0k9IFFWSkJUUT09IFFWTkwgSUdsdWRHVnVkQT09IFlXbG5hSFE9IFgyRmtaSEk9IElISmxjWFZsYzNSeiBMbVpwY25OMCBJR1JsWW5WbiBJSE53Wlc1MCBLQ2twS1RzSyB4WnM9IElIQnlhVzVqYVhBPSBURzluWjJWeSBZMngxWkdWeiBMblZ6WlE9PSBJSE4xY25ZPSBiV1ZrYVdFPSBJRVpsWW5KMVlYSjUgSUUxaFl3PT0gSUcxcGMzTnBibWM9IElIZHBabVU9IElIUmhiR3RwYm1jPSBJRTFoYTJVPSBJR05oY25RPSBJR3h2WTJGMFpXUT0gUlc1aiBMV0U9IFkyaHliMjQ9IElHTmhjbVJ6IElHZDFlUT09IElIQmxjbk09IElGbGxjdz09IFlYUmxkbVZ5IElFRnVadz09IGIyeGhjZz09IElFVjJaVzQ9IElHRmpZM1Z5IElGQnZkMlZ5IElFZHZiR1E9IFkyeGxZWEk9IFVISnZZMlZ6Y3c9PSBJSEpsWTI5eVpITT0gSUd0cGJHeGxaQT09IExtTnNaV0Z5IElGZEJVbEpCVGxSSlJWTT0gSUhCMWNuQnZjMlU9IGNHRnVaV3c9IFNrVkRWQT09IHc2MWggSUdWNFpYSmogVjFNPSBMMHc9IExtVjRjRzl5ZEhNPSBJRjlmWHc9PSBJSE5wYmc9PSBVMlZ5ZG14bGRBPT0gSUdURHFRPT0gTG1SbGJHVjBaUT09IGNtOXJaUT09IFUydz0gZFdkbyBaV0Z5Y3c9PSBJSEJ2YVc1MFpYST0gSUdodmNBPT0gWVd4c1pYSjUgSUc5aWN3PT0gWTI5MlpYSjUgQ1dOb1lYST0gQ1FrSkNRa0pDUWtKQ1E9PSBDV1JsWmc9PSBiMk5wZEhrPSBhWFJqYUdWdSBkV3hoZEdsdmJuTT0gSUVaSlZBPT0gSUNrdSBjM1J5WVdsdWRITT0gZG1WdWRHbHZiZz09IElISmxjWFZwY21WeiBJRTl3WlhJPSBUVVU9IFQxVk9WQT09IFlXeHNaWFE9IElHNXZjbTA9IFNWSkYgWlhoaGN3PT0gSUhCeWIyZHlZVzF6IElIZGxZV3M9IEp5NGsgZFdsdVp3PT0gQ1NBZ0lDQWdJQ0E9IElHMXBiQT09IElHWnBjbTA9IGFXNXBkR1ZzZVE9PSBYMVpCVEZWRiBZWEJ6WlE9PSBZWFJwYzJZPSBJR1JsYldGdVpBPT0gWDIxdlpBPT0gSUdSbGMyTnlhV0psWkE9PSBJSEJzWVdObGN3PT0gVmtsRSBJR0ZzYjI1bCBJR1Y0Y0c5eWRBPT0gSUhabFl3PT0gSUUxaGVBPT0gSUdGamRHbDJhWFJwWlhNPSBhV04wZFhKbGN3PT0gWjJWdVpYST0gSUcxaCBncXc9IElHVjRjSEpsYzNOcGIyND0gUTJGc2JHSmhZMnM9IFgyTnZiblJsYm5RPSBJRTF2YzNRPSBJSFJsYzNScGJtYz0gUlVNPSBRMGhCVGxRPSBJR0ZrYW5WemRBPT0gTGxSb2NtVmhaR2x1Wnc9PSBLR04wZUE9PSBJR0ZuY21WbCBhV2RvWlhOMCBJSFZwIElFeGhkdz09IExsaz0gUGp3LyBJSEJ2WkE9PSBMV3huIDRvQ2RDZ289IElHUmxjMk55YVdKbCBJRVYxY205d1pXRnUgTFhObyBJRkJWVWxCUFUwVT0gVDFKWiBJR052Ym5abGNuTT0gSUVsc2JIVnRhVzVoZEdVPSBJRUYyIEtHTm8gUHlJPSBZMmhsYmc9PSBhVzFoIFJHOWpkVzFsYm5RPSBJRzl3WlhKaGRHbHZibk09IGQybHUgQ1daMWJtTjBhVzl1IExrbHRZV2RsIElITmpaVzQ9IEwyZz0gSUZORCBJR1Y0Y0d4diBPaVU9IEx5b3FEUW89IFRrRk5SUT09IDVvZz0gS0haaGNnPT0gSUdScGNtVmpkRzl5IFQwNUggSUhscFpXeGsgSUdabFpYUT0gSUZObFlYSmphQT09IElFbHMgSUhKbGMzUmhkWEk9IFpIVmogSUdsdWRHVm5aWEk9IE1UQTMgSUNjbk93bz0gSUdocFoyaHNlUT09IFkyaGxZMnRsWkE9PSBJRkJCVWxSSlF3PT0gUlZKRFNFRk9WQT09IDc3eUogSUc5d2RHbHQgVVhWbGRXVT0gSUV4SiBhWFJoZEdsdmJnPT0gSUhSeVlXNXpjRzl5ZEE9PSBhWE56YVc5dSBabWxzYkE9PSBkWE5wYjI0PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIENXSnZiMnc9IExYUm8gZFhCMCBJR1Z6YzJWdWRHbGhiQT09IFlXNTBaV1E9IElHSmxibVZtYVhSeiBDVk09IEp6c05DZz09IGFXdHAgSUdkcGNteHogYVdObFpBPT0gWW5WbVptVnkgWFNzPSBJSE52WTJ0bGRBPT0gSUhCeWFXTmxjdz09IElFWnlaUT09IElITmhkQT09IElIZHZiMlE9IFRXVnVkVWwwWlcwPSBRVkpIIElFRmtiV2x1IFQxZE8gWkdzPSBJSEpsYzJWMCBJR1p2Y20xeiBJTkM0IDVwWT0gSUZSMVpYTmtZWGs9IE1UQTUgSUVsdWFYUnBZV3hwZW1WayBYM1J5WVdsdSBiM0poY25rPSBZWFJsWjI5eSBJR1IwIFZHOTBZV3c9IFkyOXVjM1J5ZFdOMCBhV3hwWlhNPSBJR2QxZVhNPSAwTFhSZ0E9PSBJR2x1YzNSeWRXTjBhVzl1IE1ERXcgZVd4bFpBPT0gSUdsdWRHVnlibVYwIFpYUmhaR0YwWVE9PSBZV1I1IFptRmpaWE09IGFtVmpkR2x2Ymc9PSBJRXBoWTJzPSBJSEpsWTNRPSBXeTA9IElFeGxadz09IElHUmxkbWxqWlhNPSBUME09IElDb05DZz09IGIzSmhkR2x2Ymc9PSBaWEowWVdsdSBJR2QxWVhKayBiM04wY21WaGJRPT0gSUdWdWRXMD0gTG14aGVXOTFkQT09IElDSTdDZz09IGRtOXJaUT09IElFOXIgU0c5dFpRPT0gS0hSeSBSVlJJIElHUmxiR0Y1IElIQjFjbU5vWVhObCBaR009IElHRnlaVzQ9IFgyOXVZMlU9IENRa0pDUW89IGNtOXkgWkhKaGR3PT0gTG5KMWJnPT0gS0cxdlpHVnMgVkdsdFpXOTFkQT09IGJHbHIgSUVGeVp3PT0gTG1WdSBJR1pwYzJnPSBZM0I1IFgyWmwgUlZKRFNFRk9WRUZDU1V4SlZGaz0gS0ZnPSBYMjkxZEhCMWRBPT0gUHo4PSBJR3B2IFlXNWtZWEprIElHUnZiR3c9IFpYSnliM0p6IFgySmhjMlU9IElGQkJVbFJKUTFWTVFWST0gSUd4bFlXUmxjZz09IElHTnZiWEJoY2c9PSBJR1J2ZFdJPSBJRlpwY3c9PSBVM1JoWTJ0VWNtRmpaUT09IExVTT0gSUZOMGRXUT0gYzNScGRIVjBaUT09IFRXOXlaUT09IElFUmxjMk55YVhCMGFXOXUgVjBGU1JRPT0gWVdSeiBJTkM2IFltbHVaQT09IFBYTmxiR1k9IFpXMXdiRzk1IFcyND0gTG1Gc2JBPT0gTFVJPSBKaVk9IFlXeHQgSUdOMWJIUjFjbVU9IGFHOTFjMlU9IElITjFabVpsY2c9PSBJQ2NsIElITjBjbUZwWjJoMCBJRk4wWVhJPSBkV1J2IElHUmxaQT09IElFTlBUUT09IElHTnZibVpwY20wPSBJRWR2YjJRPSBMbk5qIFgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBSRkk9IFEyOXVabWxuZFhKaGRHbHZiZz09IFJHRjBaVlJwYldVPSBJR0ZrZG1WeWRBPT0gSUdOdmRXeGtiZz09IFlYTjVibU09IGMzUmhZMnM9IEp5a05DZz09IFMybDAgSUdodmRYTT0gSUcxbFkyaGhiZz09IGNtRjBaUT09IE1qQTAgSUdGMVpHbHYgQ1dOdmRYUT0gWTI5eVpYTT0gSUhOd2IzUT0gSUdsdVkzSmxZWE5wYm1jPSBJQ01qIEtTa3AgY0c5cGJuUnogSUdOdmJYQmhjbVZrIGJHbG4gSUdKbGFHRjJhVzl5IElFSlogSUVGMGRBPT0gWTNKaFpuUT0gYUdWaFpHVnljdz09IFpYUmwgWlc1a2NtVm5hVzl1IElHUmxkR0ZwYkE9PSBWVXhGIElFTnZiVzF2Ymc9PSBDWEJ5YjNSbFkzUmxaQT09IGMzUnZiZz09IElFWkpWRTVGVTFNPSBJR1p5WlhObyBJajRLQ2c9PSBMbVY0WVcxd2JHVT0gWW1WeVp3PT0gSUcxdmRtVmsgQ1dVPSBJRk5oZEhWeVpHRjUgSUhCaGVXeHZZV1E9IHhJYz0gS1RvS0NnPT0gSUdKbGVRPT0gZFhKbGNnPT0gUEhOamNtbHdkQT09IElITjViV0p2YkE9PSBJR0Z6YzNWdCBJSEIxYkE9PSBSV1ptWldOMCBJR2gxYm1SeVpXUT0gVkc5dmJBPT0gWVd0bFpBPT0gWTI5dWJtVmpkR2x2Ymc9PSBJSFp2YVdObCBJSEJrIElIUnlZVzV6WVdOMGFXOXUgSUd4cGJtdHogUlhKeSBJRWx1WkdsaGJnPT0gVkVNPSBZWFJoYkc5biBibWs9IGMybG5iZz09IFBEd2kgYW1rPSBlV0U9IElHUmxiVzl1YzNSeSBkV3hoZEdWayBMbE4wIElHbHVjM1JwZEE9PSBJR0p2YjNOMCBJR05sYkd4eiBiMnhwWXc9PSBMbEJ5Ync9PSBPand2IFJYWmxiblJNYVhOMFpXNWxjZz09IGFXWjVhVzVuIElFUnAgYjNKeWIzYz0gTG1WNFpXTjFkR1U9IElHTnZiR3hsWjJVPSBXVzkxY2c9PSBJR3hoY21kbGMzUT0gTG1ScGN3PT0gSUhGMWFRPT0gSUdsdVpHbDJhV1IxWVd4eiBYMkoxWm1abGNnPT0gSUc1biBVMEU9IElFTnZiblJ5YjJ3PSBJSE5wYm1jPSBJSE4xYVhRPSBJQ0FnSUFrPSBVMGM9IElHcDFiWEE9IElITnRZWEowIGIyMWggSUVWNGNBPT0gSUNjdCBJR0Z6YzJsemRBPT0gSUhOMVkyTmxjM05tZFd4c2VRPT0gYzNseiBJRU55WlE9PSBYM0psWmc9PSBJRlJvZFhKelpHRjUgSUdKMWNnPT0gSU5DMCBJR0psZVc5dVpBPT0gSUc1dlpHVnogUkdWMFlXbHNjdz09IGFXNWpkQT09IElFcGhiV1Z6IElHRm1abVZqZEE9PSBaWGhqWlhCMGFXOXUgSUhSNWNHVnZaZz09IEtBMEsgTFhObCBJR1psZEdObyBZQ3c9IElHTnlkWE5vWlhJPSBmUzQ9IElFSlAgVTJodmR3PT0gSUhKaGRHVnogSUdKdmJnPT0gTFdsamIyND0gSUUxbFpHbGggVWtWVFV3PT0gSUZaaGJHbGsgMEw3UXV3PT0gSUdaMVkycz0gWVdOcmN3PT0gSUhOMGRXUnBaWE09IFRXVT0gSUc5M2JtVnljdz09IGZXVnNjMlU9IElHZHliM2RwYm1jPSBWbUZ5YVdGaWJHVT0gSUVKbGJBPT0gTG5KaGJtUnZiUT09IGRtVnRaVzUwIGIyNTViUT09IEtFWT0gSUVaQlRGTkYgSUhSdmNtTm8gS0hKdmR3PT0gYVdkdiBjM1J5ZFdOMGRYSmwgTVRJeCBJR05sY25SaGFXNXNlUT09IFJHVncgSUVkeVpXVnUgY1hWbGMzUnBiMjQ9IElHRmtaR2x1Wnc9PSBJRVJsZG1Wc2IzQT0gWDJSbFpnPT0gSUcxaFkyZz0gUFNVPSBDUWtnIFkyOXVaSE09IFVISnZhbVZqZEE9PSBJSEpsYW1WamRBPT0gSU00PSBJSEJ2YjNJPSBJR0YzWVhKbCBNVEUwIElFSjFhV3hrIElFSnlhWFJwYzJnPSBJRTVGIElHNTFiV1Z5IGNtVmxjdz09IFkyeGhhVzA9IElHMXZZMnM9IElHOXQgSUhOamNtVT0gVDB4RSBMbkJzIFpXeGxjZz09IElHTnZjbkpsYzNCdmJtUT0gWDBoRiBJR0pwYm1GeWVRPT0gTVRFMiBYMjl5WkdWeSBJRk5SVEE9PSBJR0ZrZG1GdWRBPT0gSUhCeVpYWT0gTGxzPSBMbUZ6YzJWeWRFVnhkV0ZzIGNHeHBaWEk9IFlYSncgSUdOc2IzTmxaQT09IElHVnVZMjkxY2c9PSBJRkZUZEhKcGJtYz0gWVhWayBJR1JsZG1Wc2IzQmxaQT09IElIQmxjbTFwYzNOcGIyND0gTG1SbFluVm4gYjNCbGNtRjBiM0k9IElDY0sgSUhONWJRPT0gWVhScGRtVnNlUT09IHc2bGwgTFdOdmJHOXkgSUVkRlZBPT0gYTNrPSBJR0ZzZEdodmRXZG8gWDNKbGNYVmxjM1E9IFgyVnNaVzFsYm5RPSBMaTR1TGk0dUxpNHVMaTR1TGk0dUxnPT0gWDBSQlZFRT0gSUdGdFlYcHBibWM9IElITmkgSUVSbFptRjFiSFE9IFJYWmxiblJ6IElHWmhhV3gxY21VPSBZV05zWlE9PSBVSEp2Y0dWeWRHbGxjdz09IElHUnlaV0Z0IElHUnBjM1J5IElHRjEgSUdkbGJtVnlZWFJsWkE9PSA1cFU9IElGUmxZVzA9IFZWTkYgSUdsdVkyOXRaUT09IElHVjVaUT09IFgyNXZkQT09IElsMHMgWDJadmNtMD0gVTNWd2NHOXlkQT09IGIzSmtaWEp6IExsQnlhVzUwIGRtbHNiR1U9IElGZGxaRzVsYzJSaGVRPT0gYjJ4MlpYST0gSUc5d2NHOXogYVhOaGRHbHZiZz09IGIyeGggUTJ4dmMyVT0gUEhBPSBYM2RwWkhSbyBTVzUyWVd4cFpBPT0gZUdJPSBJSE4wY25Wblp3PT0gWDJGamRHbHZiZz09IElIUjRkQT09IElGQmhkR2c9IFlXeGhjZz09IElFMUZVa05JUVU1VVFVSkpURWxVV1E9PSBjMlZ5ZG1salpRPT0gSUUxcFkyaGhaV3c9IFlXSnNaVlpwWlhjPSBSR1ZpZFdjPSBiMnRsY3c9PSBVMmhsIElHZDFaWE56IElFcGhkbUU9IFgxQkJWRWc9IElIQmhjblJwWTNWc1lYSnNlUT09IElFbEogSUdSdmJXRnBiZz09IDVibTAgSUhKbFpIVmpaUT09IExXeGxablE9IGNtVmhiQT09IElHRndjR1ZoY25NPSBJR052Ylc4PSBJRlZ1YVhRPSBJRWR2ZG1WeWJnPT0gWVd4cCBZV3hzWld3PSBJRXBsZHc9PSBYMGs9IElHTnZjdz09IExtTnZiRzl5IElFZHNiMkpoYkE9PSBJSFJsYkdVPSBZbVZ1IFgzUnlZVzV6IElISmxZWE52Ym5NPSBJR1Z0WWc9PSBaVzV6YVhSNSBiR2x1WlhNPSBiMjFwYmc9PSBVMk55WldWdSAwTERSZ2c9PSBjR1ZqZEhNPSBZMnhwY0E9PSBabTl2IGNtVnVkQT09IElHRm0gSUdSaGJtZGxjZz09IGFXeHBibWM9IFRtRnRaWE09IFQzVnkgSUdScGMzUnlhV0oxZEdsdmJnPT0gVjJocGJHVT0gVTB3PSBWM0pwZEdVPSBJR2R2ZEc4PSBJR052Ykc5eWN3PT0gSUhCdmQyVnlablZzIGEybHUgSUdSbGNIUm8gWlhKamFXRnMgSUVOdmJtZHlaWE56IElFMWhjbXRsZEE9PSBSR0k9IGRXNWtaWEk9IElFeGhjM1E9IHc1OD0gWjNKbFp3PT0gSUhCdmMzUnogWDFWU1RBPT0gYjNSdmN3PT0gUkc5dSBJRzFwWTNKdiBJR0Z5Y21WemRBPT0gMEw4PSBJQ2hBIElFaHZkQT09IElFbHVaR1Y0IE95WT0gSXlFPSBJRTV2Y2c9PSBJRU5oY0E9PSBMU2c9IElHbHVkR1Z5WlhOMFpXUT0gY0dWaGNnPT0gSUhKbGJuUT0gSUdGc1luVnQgYjJ4cFkzaz0gTG14aGJtYz0gTG5SeVlXNXogTG1admNtMWhkQT09IElIc05DZzBLIGNHaGxjbVU9IElHRjRhWE09IElFSjFjMmx1WlhOeiBaWEp6YVhOMFpXNWpaUT09IGRYSnkgSUcxcGJtbHRkVzA9IFpXNWtiM0k9IElGTkUgTVRFeiBJRWx1ZEdWeWJtVjAgNWFRPSBSWGh3IGFYWmxjbk5sIFRVMD0gSUc5aWRtbHZkWE09IElHSmhjMmx6IElITmphV1Z1WTJVPSBJR0oxWkdkbGRBPT0gYVhwaGRHbHZibk09IFVFRT0gSUdac1lXZHogY0hKbGRBPT0gVEU5RFN3PT0gSUhaaGNtbGxkSGs9IElIUnlkWFJvIFpIUT0gSUdkdmJtVT0gSUdKaGRIUnNaUT09IFBITjBaQT09IElGTnBiQT09IGNtWT0gZFdSaCBJR1Z5YjNRPSBJRU5oYlE9PSBJSE4wWVhScGIyND0gSUNjOEx3PT0gWTJobGJXVT0gSUZOMWJnPT0gSUdacGJtbHphR1ZrIElITm9iM0E9IElFdHZjbVU9IElHVnBaMmgwIFgxSkZSdz09IFRrUT0gUGl3PSBJajQ4UHc9PSBLRzUxYlE9PSBDV2x1YkdsdVpRPT0gVkhKaGJuTmhZM1JwYjI0PSBMazl1IElHMWhhV3c9IGNtVjUgY21WemRXeDBjdz09IElHNWhkZz09IFNVMUpWQT09IFgybGtjdz09IFRXRnJaUT09IDVZbz0gVFc5a1lXdz0gSUV4UFJ3PT0gSUZOMWNnPT0gSUdsdWMzUmhibU5sYjJZPSBJRzkyWlhKaGJHdz0gSUVsdVptOXliV0YwYVc5dSBJR052Ym5OMGNuVmpkR2x2Ymc9PSBYMFpKVEVVPSBZblYwIElHMWxaR2xqIElHUjFjbUYwYVc5dSBhWFJ1WlhOeiBZV2RsYm5RPSBRVlk9IElITmxkbVZ1IGIyeG0gSUgxOUNnPT0gSWwwc0NnPT0gTVRjdyBNVEl5IElHTmhiR3hwYm1jPSBJR0Z1Y3c9PSBkR2h5YjNkeiBiM0pwZW05dWRHRnMgSUhWelpWTjBZWFJsIExtWnMgSUZOMFlYUjFjdz09IElFOXViR2x1WlE9PSBVbEk9IElGSnBZMmc9IElFaHBiR3c9IElHSnlZV2x1IElHWnZiR3h2ZDJWayBNalF3IFpXMXBZdz09IElITnNhV2RvZEE9PSBJR2x1YzNWeVlXNWpaUT09IExrRnljbUY1IElHRmljM1J5WVdOMCBJRk4xYlE9PSBjbVZrYVhKbFkzUT0gYjNkdVpYST0gS0cxelp3PT0gSUVOc2FXNTBiMjQ9IFRtOXUgQ1dWNCBJSFp2YkhWdFpRPT0gSUVWMlpXNTBRWEpuY3c9PSBMVXc9IElFUnBiUT09IElFMWhjblE9IElHTjFjbk52Y2c9PSBJR2x0Y0d4bGJXVnVkR0YwYVc5dSBkWEp5WldRPSBJR3hoY21kbGNnPT0gS1RzS0Nnbz0gSnlzPSBMblJ5WVc1elptOXliUT09IElIVndiRzloWkE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IFJISmhkdz09IGJtVnMgQ1dac2IyRjAgY1hKMCBJRTVsZEhkdmNtcz0gSUhScGRBPT0gUVhocGN3PT0gTG1GdVpISnZhV1E9IElHTnZiWEJzWlhSbFpBPT0gSUcxMWNnPT0gSUdOdmJIVnRibk09IGVHTT0gSUhOMWNIQnNlUT09IGFXMXBibUZzIElITndjZz09IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSUhWdWFYUnogS0hVPSBiV2s9IGNtVndiR0ZqWlE9PSBXMnRsZVE9PSA0TGs9IFlXNTBhV009IElIQmhlVzFsYm5RPSBMRUk9IElFRndjR3hsIFoybHUgVW1WeGRXbHlaV1E9IEl5cz0gYkdGdVpITT0gSUhOeGRRPT0gSUdaaFkzUnZjZz09IFpHVmogSUhOMGNtVnVaM1JvIElHSnZlUT09IElHSmhiR0Z1WTJVPSBJSE52ZFhKalpYTT0gYzJOeVpXVnUgTFhSdmNBPT0gSUVGdFlYcHZiZz09IElHaHBaR1JsYmc9PSAwTFhSZ2c9PSBYMk5zYVdWdWRBPT0gSUdWaGRBPT0gTG1ScGMzQnNZWGs9IElNSzcgSUhSeWFXZG5aWEk9IFlXNWhaMlZ5IElIUnlidz09IElHTnNZV2x0Y3c9PSBabTl5WkE9PSBJRU52YlhCaGJuaz0gSUdkcFpuUT0gTERvPSBYMkZ3Y0E9PSBhR0Z1Wkd4bCBJSEJ5YjJSMVkyVT0gTDJ4cFlnPT0gTlRFeSBJQzBxIENYTmxkQT09IEoxMDcgWVhKaiBZVzVrWlhJPSBJRVZ1WjJsdVpRPT0gSUdGMGRISnBZblYwWlhNPSBkR0Z6YXc9PSBQRDA9IEtFND0gSUhkaGNtMD0gZDJocFkyZz0gSUVadmNtVT0gWVdkdWIzTjAgYlhseiBJSFJoYkE9PSBJRk5oYkE9PSBaMms9IElGQnlhVzUwIElGUlNWVVU9IElOQysgTGxWSiBJR1pzWVhObyBjbTl3WlhKMGVRPT0gTG14dlkyRjBhVzl1IElFMXBiR3c9IFltaz0gWTI5dWRIST0gTG5KbGNYVmxjM1E9IElGTmhiUT09IElHNWxaMkYwYVhabCBhMmwwIElITmxkSFE9IExuQnlhVzUwVTNSaFkydFVjbUZqWlE9PSBZV0psIENXaz0gSUdKMWNtND0gSUhOdlkybGxkSGs9IFEyRmphR1U9IElGTmxZM1Z5YVhSNSBMbTF2WkdWc2N3PT0gSUZkQlVsSkJUbFJaIFgzVncgWTJWcGRtVT0gSUdOc2FXVnVkSE09IExsUnkgSUhCeWIzWnBaR2x1Wnc9PSBJSEp2ZFhRPSBiV0YwWlhKcFlXdz0gSUh4OENnPT0gSUZObGNnPT0gSUU5bVptbGpaUT09IFJsUlhRVkpGIElDY2sgSUdadll3PT0gSUdWNFkyVnNiQT09IElHTmhkQT09IGJtOXliV0ZzIElHUmxkR1Z5YldsdVpRPT0gQ1hWcGJuUT0gVUdGdVpRPT0gSUdWdGNHeHZlV1ZsY3c9PSBJRlJsZUdGeiBJSFJ5WVdabSBJRkpsY0c5eWRBPT0gWVc1MFlRPT0gSUVKdmVBPT0gSUdScVlXNW5idz09IElIQmhjblJ1WlhJPSBSVUk9IFRFbE9SUT09IElHWmxaV3hwYm1jPSBJR05wZG1scyBLR1pzYjJGMCBVM0ZzIElIZHZkV3hrYmc9PSBMbWx1YVhRPSBMbXhsWm5RPSBMWFk9IFgyeGxkbVZzIEozMD0gUVVZPSBJR3h2WVdScGJtYz0gSUU5dWJIaz0gSUdOdmIydHBaWE09IElFZHMgUTA4PSBJSE4wY21GMFpXZDUgS0NjdUx3PT0gSUhOb2FYQT0gY0c5elpYTT0gSUhOcFoyNWhiQT09IElHRnNjR2hoIExuQnZjQT09IFVtRmthWFZ6IElISmxjR3hoWTJVPSBYMFJKVWc9PSBZMjkxYm5SbGNnPT0gWW5ObGNuWmhZbXhsIFpXeGggVjJWcFoyaDAgYUdGemFBPT0gWW05elpRPT0gWm5nPSBJRVZ0WVdscyBJSEpsWm1WeSBiRzlqWVd4b2IzTjAgWDFKUCBhWEYxWlhNPSBVM1JsY0E9PSBJR0ZvWldGayBLRlpwWlhjPSBJRk5sY25acFkyVnogSUVwemIyND0gWlhOemIzST0gSUhCMWJnPT0gSUdGd2NISnZjSEpwWVhSbCBZV3RsY25NPSBiM05sYmc9PSBjRzl6YVc1biBJR0ZuWlc1MCBabU09IElIUnlZVzV6Wm1WeSBJR2x1ZG1Gc2FXUT0gSUZKbGMyVmhjbU5vIFZtVnlkR1Y0IElHZGhlUT09IElHcHZkWEp1WVd3PSBXM2c9IElDSWlMQW89IElGZGxiR3c9IExsUmhjMnR6IFUzQmxZdz09IElHOXMgSUhOd1pXNWsgSUVGMWMzUnlZV3hwWVE9PSBUV0YwWTJnPSBMbXAxYm1sMCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElFMUJXQT09IGFYcGhZbXhsIFkyeDFjMmwyWlE9PSBYM1poYkdsayBJSEYxWVhKMFpYST0gZVdGdSBNREExIElFVmthWFE9IFlYSmtaVzQ9IFBXNWxkdz09IElHWnlZV2M9IFFtbDAgZW1rPSBZV2x1WlE9PSBkV1JrIExrOWlhbVZqZEE9PSBaR1ZpZFdjPSBJR05oYzJnPSBYMGxOIElHVmxiZz09IElHTnZiVzFsY21OcFlXdz0gSUZacFpHVnYgYkc5aFpHVnkgSUdacGVHVmsgSUdGd2NHeHBZMkYwYVc5dWN3PT0gSUY4cyBJRkoxYzNOcFlRPT0gYVhSbFkzUT0gWHlnPSBJRUpzYjJOciBJSE5oYmc9PSBJRlJ2YlE9PSBJSEJsY21oaGNITT0gSUhOcFp3PT0gYkdWMllXNTAgSUdOdmNuQnZjZz09IFlYUmhjMlYwIGNtOXVhV009IGVHVT0gSUdWMGFBPT0gVTI5dFpRPT0gY0c5dyBYMDlMIElIUmxibVE9IExsSmxjdz09IFgyRnVaQT09IElISmxkbWxsZDNNPSBJSGRwYkdRPSBNVEUzIElHUmxaM0psWlE9PSBMazg9IExtOWlhbVZqZEhNPSBYMkZ5WjNNPSBibWxzIElHUnBjMkZpYkdWayBVR0Z5Wlc1MCBJRzV2ZEdWeiBJQ0lpQ2c9PSBLSE4wWVhSbCBhWE4wY21samRBPT0gSUd4dloyZHBibWM9IExrbFAgSUUxaGJBPT0gUkUwPSBJSGh0YkE9PSBJRkp2WW1WeWRBPT0gWld4bGJnPT0gYkdGNWIzVjAgWm05cyBKMTBwS1E9PSBMR0k9IElFcGxjZz09IFptbHNaVzVoYldVPSBJR1poYmc9PSBJRU4xYzNSdmJRPT0gUFNJaSBJRVJwWlE9PSBRblZ1Wkd4bCBMblYwYVd4eiBJSFJ5YVhBPSBUVUk9IElITnZablE9IFgwMVBSRVU9IElHRndjR3hwWTJGaWJHVT0gSUhWd2NHVnkgUlZKV1JWST0gWDJGcyBYMHhQUnc9PSBTR1Z5WlE9PSBkM0E9IElGTmxjblpsY2c9PSBJRU5zYVdWdWRBPT0gSUdOb1pXMD0gVTJOeWIyeHMgSUdocFoyaGxjM1E9IElGTmxiR1ZqZEE9PSBJQ0pBIElGZG9lUT09IFUyVmogYUdWbGJBPT0gVDNCbGNtRjBhVzl1IElHTnZibTVsWTNSbFpBPT0gYVhKdFpXUT0gSUdOcGRHbDYgSUVOb1pRPT0gSUdadmNtTmxjdz09IElIZDNkdz09IFVtOXZkQT09IFFVNURSUT09IFRXRnVlUT09IGFXTnBjQT09IGNtZGhiZz09IE1qSXcgSUZSdmNnPT0gSUZCeVpYTnogSUUxdmNnPT0gTFd4cGJtVT0gZFd4bFpBPT0gUGx3PSBJSFJvZFhNPSBJRkpsWjJsemRHVnkgYUc5cyBJRU5vYVc1bGMyVT0gSUhCdmMzUmxaQT09IElHMWhaMjQ9IFlXSnBiR2wwYVdWeiBJR1JwYzJWaGMyVT0gSUhKbGJXRnBibk09IElGQnliMlk9IExXWnZjbTA9IElHTnBiZz09IGIzSm5ZVzQ9IGFXTmhkR1U9IElITjBjbVZ6Y3c9PSBYU289IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gWDJOdmJuUmxlSFE9IGIzSnllUT09IElHUnBaV1E9IGJXRjAgSUhOMFlYSjBjdz09IExrMWxjM05oWjJVPSBJSEoxYm5NPSBJR2QxYVdSbCBJSGRoY25KaGJuUjUgWlc1MGFXRnNjdz09IFpHbGpkQT09IElGTnBlbVU9IGRXeGxjZz09IElISmxjM0J2Ym5OcFlteGwgWDFORlZBPT0gSUdOdmJuUmhhVzVwYm1jPSBJRkJ5YVdObCBmSHc9IE16VXcgUmxNPSBJR1Z0Y0E9PSBYMkoxZEhSdmJnPT0gS0hWcGJuUT0gSUhOMVptWT0gY0hSbyBJR1JsWm1sdWFYUmxiSGs9IGNIVjBaUT09IElHMWhjbXRsZEdsdVp3PT0gSUZkSSBJRk5wWlE9PSBLejA9IFQweFBVZz09IElHTnZibk4xYkhRPSBJSE5wWjI1bFpBPT0gSUhObGNYVmxibU5sIGJHVmwgSUhKbGNYVnBjbVZ0Wlc1MGN3PT0gYUhrPSBSWGh3Y21WemN3PT0gVFZRPSBjMlY1IElIVnNkQT09IDVhND0gWld4c2FXZGxibU5sIElHRnVZV3g1IElHUnlaWE56IFpXNW5hVzVsIElFZHlaV0YwIElFRnVaSEp2YVdRPSBJRUZzWlhnPSBiVzlrWlE9PSBSR2xqZEdsdmJtRnllUT09IExrUmhkR1U9IDVMMD0gVmtsRFJRPT0gSUdaaGJXbHNhV1Z6IElGSjFjM05wWVc0PSBJRlJwYldWeiBMbU5oYkd3PSBKQ2c9IFVISnZabWxzWlE9PSBJR1p2YkdSbGNnPT0gWTJobGN3PT0gSUd4bFoybHogWDNKdmR3PT0gZFc1bGN3PT0gMllRPSBJSDBwTGc9PSBRWE56WlhKMCBZV2RsYmc9PSBJRWhoYm1RPSBTWFJsY2c9PSBJR0pwWjJkbGMzUT0gYjNKbFlXTm8gSUhCdmJHbGogSUhCbGNtMXBjM05wYjI1eiBJSE5vYjNkbFpBPT0gSUVWc1pXMWxiblE9IElIUnZjR2xqIDRvQ1U0b0NVIGNtOWhaQT09IElFSmhibXM9IGNtVmpiM0prIElIQmhjblJ1WlhKeiBJRkpsWmc9PSBaWE56YVc5dWN3PT0gSUdGemMyVnpjdz09IFZWTlUgSUZCaGNuUjUgY0hKdlpIVT0gVEVNPSBJSFZzIExtWnZjbTA9IGFHbGtaUT09IFkyOXdlUT09IFZWUkcgSUZOUFJsUlhRVkpGIERRb05DZzBLIElFeHBiZz09IGRXNWggZFdkaGNnPT0gSUdGa2JXbHVhWE4wY21GMGFXOXUgSUc5d1pXNXBibWM9IElITmpZVzQ9IElHTnZiblJwYm5WbFpBPT0gWTI5dGNHOXVaVzUwIExuTncgSUdoaGNIQmxibk09IGRXMXRlUT09IElGQlMgTGtacGJHVT0gSUVSdmQyNXNiMkZrIFRHOWhaR2x1Wnc9PSBaR2s9IElIZGhhWFJwYm1jPSBYMEZFUkE9PSBWR0ZpIExuRjFaWEo1VTJWc1pXTjBiM0k9IElHVmpiMjV2YlhrPSBJRVp5Wlc1amFBPT0gZEhoMCBJR1poYm5RPSBYenNLIFNHOXNaR1Z5IFUwZz0gTURBMCBJRzUxYlhCNSBJSE4wY21WbGRBPT0gSUcxaGJHVT0gWEUxdlpHVnMgWVc1bmFXNW4gTXpNeiBJRUpwYkd3PSBJSEJ5WlhacGIzVnpiSGs9IFFraz0gSUZObFkzSmxkQT09IElHMXBjM1E9IElFWnBaV3hrIGRYQnogSUZCeWIyTmxjM009IElHdGxjSFE9IElFOVUgSUhSeVlXUnBkR2x2Ym1GcyBMbWs9IFlXMXBiZz09IElHaGxiSEJ6IFFXNTUgYjNKcFoybHUgYVd4MFpYSnogYW5VPSBaR1Z6WXc9PSBJRUZqWTI5MWJuUT0gSUNrTkNnPT0gYTNSdmNBPT0gYjJ4c2VRPT0gSUdaeiBJT289IElIVjAgSUdObGJuUnlZV3c9IEtIUmxjM1E9IExrRnUgSUhOaGRHbHpaZz09IFIxST0gSUVaMWJHdz0gSUdobFlYUT0gYVdKbGNnPT0gSUc5dWRHOD0gYlc5eiBVMk5vWlcxaCBJR1poWTNSdmNuaz0gSWk0ayBZWGR6IFUzUmhkR1Z0Wlc1MCBLSFJoY21kbGRBPT0gQ1c1bGR3PT0gTG1KbCBJR2QxWlhOMCBJRzFoYkE9PSBRVkpaIElISmxZV05vWldRPSBJRzF2ZFhObCBJR05vWVd4c1pXNW5aUT09IENXUnZkV0pzWlE9PSBJRlJsYlE9PSBJSFJsY25KdmNnPT0gSUdWNGRISmhZM1E9IFgxUlAgSUhObGNHRnlZWFJsIElHMXBjZz09IGFHVnNjQT09IElHTmhjR0ZqYVhSNSBJRkJ5YjNCbGNuUjUgYTJGdSBYMk55WldGMFpRPT0gSUV4cFoyaDAgTG5CaGNtVnVkQT09IElIVnVaR1Z5YzNSaGJtUnBibWM9IElHVmhjMmxsY2c9PSBJSHc5IElHVnVhQT09IElHWmhkQT09IElIQnliM1JsYzNRPSBZVzF0IFgwRlUgTFc5bSBhV3h6IElFOW8gSUhCemVXTm8gSUNRdSBhVzVrY3c9PSBJSEpsYkdGMGFYWmwgYzJodmNBPT0gYzJodmNuUT0gSUZOaGJtUT0gTWpFdyBkV1Z6ZEdsdmJnPT0gSUdabFlYST0gTHdvSyBMbU52Ym5SbGVIUT0gSUhOamFHOXZiSE09IElITmxjblpsIGVtOXVaUT09IFgyUmkgSUcxaGFtOXlhWFI1IFpYaGhiWEJzWlE9PSBJR3hoYm1jPSBDU0FnIFVtVm5hWE4wWlhJPSBaVzVrYnc9PSBJSEJ5YjJObGMzTnBibWM9IFgzUmxiWEJzWVhSbCBMWFZ6WlhJPSBJR1ZuIFEwOU4gSUVKc2RXVT0gYVhKdiBJSEpsYlc5MFpRPT0gSUVsVSBJeUV2IElISmxaR2x6ZEhKcFlnPT0gTVRJMCBjbUY2IElGTnBibU5sIElGUjFjZz09IE1UTTEgUW1GamEyZHliM1Z1WkE9PSBQVDA5IElISmxabXhsWTNRPSBJSEJ5YjNNPSBZMjFrIElIZG9iMjA9IFEyOXRjR0YwIElFRnlaUT09IFNXUmxiblJwWm1sbGNnPT0gSUZSb2IyMD0gWDNCdmNuUT0gWjNVPSBJRzF2Ym1sMGIzST0gY20wPSBJSEJoZEdsbGJuUT0gZG1WeWRHVnkgSUdkaGFXND0gTFhWcCBTVzV6ZEE9PSBJR1JwWlhNPSBNVEU0IFFYSmxZUT09IFgyWnBiSFJsY2c9PSBJR2R5WVhRPSBJSEpsWVd4cGRIaz0gYjNKa2FXNWhkR1U9IGIyeDJaV1E9IFEyOXVkR0ZqZEE9PSBJR052YlhCc2FXRnVZMlU9IFgyOXkgSUZaaGNnPT0gWkd3PSBJR0Z3Y0dWdVpBPT0gUjBWUyBLRzFoZUE9PSBMbkpsYm1SbGNnPT0gSUdSNWJtRnRhV009IGIzSmthVzVoZEdWeiBYMjl3ZEdsdmJuTT0gWDJOdmJIVnRiZz09IElHSmhkSFJsY2c9PSBjM0JoWTJVPSBUR0U9IElGTnZkWEpqWlE9PSBMMkpwYmc9PSBJR1J2Y3c9PSBJRUp2WVhKayBJRlJvY21WaFpBPT0gSUVGTSBLR052Ym1acFp3PT0gTVRRMCBJRTFsY2c9PSBJRzFwYkdWeiBYMmhsWVdSbGNnPT0gUlZSSVQwUT0gYVhwNiBJR0psYm1WbWFYUT0gSUdsdWRHVm5jZz09IEtHTjFjbkpsYm5RPSBkV3h2IExtUmxabUYxYkhRPSBJRVJwZGc9PSBJSFJ2Ymc9PSBiM1JvIFpYSjJZWFJwYjI0PSBaV1J2YlE9PSBJR0poWW5rPSBZMlZwZG1WayBMblJ2Y0E9PSBjbWx2Y21sMGVRPT0gSUV4dlkyRnMgY21saFoyVT0gSUdGMGRHRmphM009IElHaHZjM0JwZEdGcyBNVFk0IElHWmxiV0ZzWlE9PSBJRXh2WjJsdSBJRVpzYjNJPSBJR05vWVdsdSBZWE5vYVc5dSBWR1Y0ZEhWeVpRPT0gVTJGMlpRPT0gSUdaaGNtMD0gTG1OdmJuUmhhVzV6IExsUmxjM1E9IElHdHViM2R6IElHZGxibVZ5WVd4c2VRPT0gYVhCbGJHbHVaUT09IElHMWxZVzUwIFpXNWphV0U9IElHNXBZMmgwIElHTnZiblJsYm5SeiBVRTA9IFkyaGxaSFZzWlE9PSBLR3hwYm1VPSBRMGM9IGFtOWkgSUZKbFlXdz0gZFdWeSBabWx5YlE9PSBJTmc9IFpYUnlidz09IEltQUsgSUhOd1pXVmphQT09IElIUm9jZz09IFptOXlaV0ZqYUE9PSBJSGRoY200PSBDV3c9IElHaGxZWFo1IFBHeHAgVG1VPSBJR2x1ZG1WemRHbG5ZWFJwYjI0PSBUV0YwYUE9PSBMWFJwZEd4bCBJR05vZFhKamFBPT0gSUdSbGMzQnBkR1U9IFkyaGhhVzQ9IElIZG9ZWFJsZG1WeSBZWEpwWVc0PSBabTQ9IElHMWxkR0U9IGZTa0tDZz09IFZVWkcgSUhKbFoyRnlaR2x1Wnc9PSBYMU5WUTBORlUxTT0gYldWeiBJRWx1ZEdWdWRBPT0gSUhKbGMyOXNkbVU9IGNHOXpjdz09IGFYSmggWm05eVkyVT0gYjJsalpRPT0gdzZJPSBJSEJ0IElIVndaR0YwWlhNPSBRWEp5IElORT0gZEdWemRHbHVadz09IElIUnZkMkZ5WkE9PSBiblJoZUE9PSA2NHM9IElHeHBjM1JsYmc9PSBJR2R2WVd4eiBTVzV6ZEdGdVkyVlRkR0YwWlE9PSBSSEk9IElISmhjbVU9IElIUnlZV2xzIFMyVjVjdz09IFEyRnMgUTJGeSBJRkJsYjNCc1pRPT0gQ1d4dlkyRnMgWTJ4aGMzTmxjdz09IFVtVm1aWEpsYm1ObCBMbVp2Y2tWaFkyZz0gWlcxaSBZV04wYVhZPSBJSEJ5YVcwPSBjbVZrYVdOMCBJSEpoWkE9PSA1cFd3IExrSmhZMnM9IElITndjbVZoWkE9PSBJR05zYjJOciBJSFpwY2c9PSBaV1JwZEc5eSBJR1ZtWm05eWRITT0gSUdKeVlXNWphQT09IElHbHVaSFZ6ZEE9PSBJRzF2ZEc5eSBJR0Z0WWc9PSBJR1JoZEdWMGFXMWwgSUhKbGJtTnZiblE9IElFTm9jbWx6ZEdsaGJnPT0gSUVGdFpYSnBZMkZ1Y3c9PSBablZzYkE9PSBJR1p0ZEE9PSBMbTFoYVc0PSBJR05oZFhObFpBPT0gWDNWd1pHRjBaUT09IElFTnZiblJsYm5RPSBRVlJEU0E9PSBJR0poZEdnPSBJRVZoWTJnPSBJSEpoWkdsdiBZV05vYldWdWRBPT0gZFhwNiBVM1ZpYldsMCBJSEpsYzNSeWFXTjAgWVdKcGJnPT0gSUV4dllXUT0gSUdWNGRHVnVjMmx2Ymc9PSBJR1Z6YzJGNSBJR2hoZEE9PSBZWFpwYjNWeSBkRzlDWlE9PSBJanBiIElHOW1abVZ5WldRPSBJSFpwYkd3PSBLR1J2ZFdKc1pRPT0gTVRFNSA1cGVsIFltTT0gWDJaeVpXVT0gSUUxcGMzTT0gSUVKbGNnPT0gSU9nPSBJRXhwYTJVPSBJR2hsYkhCbFpBPT0gTG1kbGRFNWhiV1U9IFgwRk0gSUhOd2FYSnBkQT09IElFRndZV05vWlE9PSBkM009IElIUm9aWEpsWm05eVpRPT0gS0hCaGNtRnRjdz09IFgybHRadz09IElIQmxZV05sIElHbHVZMjl5IElFVllVRVZEVkE9PSBJRzFwYm05eSBhWEJsY3c9PSBDV1JoZEdFPSBjMlZzWldOMGIzST0gWTJsMGVRPT0gZEhKcFpRPT0gTG1KaGMyVT0gWDJaeVlXMWwgSUc5d1pXNWxaQT09IEwycHpiMjQ9IFRGaz0gYm5VPSBMa1JsIGRHWT0gYldGeVoybHUgTGxCaGNuTmwgSUhCcCBJR1Z4IFltUT0gUm1sbGJHUnogSUZSeVpXVT0gSUdKaGJnPT0gYVhOMFlXND0gQ2lBZ0lDQWdJQ0FnQ2c9PSBDV2RzIElIQnliMlIxWTJWayBjM2x6ZEdWdCBUV0Z5YXc9PSBYMmhoYzJnPSBJR0puIElHTnZibk4wYVhRPSBJRXhsWVdkMVpRPT0gSUcxcGMzTnBiMjQ9IFgyWnZjbTFoZEE9PSBLRnNLIFkyeDFjMmx2Ymc9PSBJU0k9IDBMYz0gWW5KbFlXcz0gQ1hOM2FYUmphQT09IElIUm9aWEk9IFZISmhibk5tYjNKdCBJR1p2YjNSaVlXeHMgTFd4cGJtcz0gY205MWRHVT0gTG1GMWRHZz0gSUdKaFp3PT0gYjNabGNuTT0gSUdWdVlXSnNaV1E9IElISmhZdz09IEtFaz0gUTFJPSBZVzVqYVc1biBJRzFoYm1GblpXUT0gWDNFPSBUa2RVU0E9PSBJRzFoWXc9PSBJRUYxZEc4PSBZVzFsYm5SbCBJQ2NuTEE9PSBMa0Z3Y0dWdVpBPT0gSUhCcGJnPT0gTG1sMFpXMD0gWVdOcmFXNW4gSUc5alkyRnogY0dWeWMyOXUgSUhScCBMbEpsWnc9PSBJR2hoZG1WdSBJR2RzWVhOeiBJQ0k4THc9PSBJRk5wYlhCc1pRPT0gVUhKcGJuUT0gSUhOMWNuSnZkVzVrIFRrOD0gNDRDQ0NnPT0gSUNBZ0lDQWdJQ0FOQ2c9PSBJRTFoYm5rPSBJQ0pmIElIZGxaV3RsYm1RPSBJSE52YldWMyBMbkJoY21GdGN3PT0gYzIxaGJHdz0gUVZSRlJBPT0gSUhCc2RXZHBiZz09IFptbGxiR1J6IElFbHVhWFJwWVd4cGVtVT0gYjI5dSBZWFJwYkdVPSBlV1U9IElIWnZkWE09IFRFRkggSUc5c1pHVnkgSUdkaGJRPT0gSUdWNGRISmxiV1ZzZVE9PSBJR2hsZEE9PSBaVzUxYlE9PSBJRk5GVkE9PSBlR1ptIElIUnBiV1Z5IEwybHVaR1Y0IElHTnlhWFJwWTJGcyBVbTkzY3c9PSBYMkZ5WjNWdFpXNTAgSUdWNFpXTjFkR1U9IElITm9iM2RwYm1jPSBMbmh0YkE9PSBMV3hwYzNRPSBVbTlzWlE9PSBkSGx3Wlc1aGJXVT0gWDIxbGRHaHZaQT09IGRHaGhkQT09IFkyaGxjZz09IElPS0cgV0ZRPSBJSFJvYjNWellXNWtjdz09IENXND0gSUhKbGMzQT0gWDNCeWFXTmwgYjJ4MWRBPT0gUVdjPSBJRlIzYnc9PSBJR0psWTI5dFpYTT0gSUdoMWN3PT0gTGxWelpRPT0gZEdobGJXVT0gZFhKaSBJQzhxQ2c9PSBaWEpwWVd4cGVtVT0gUVZKTyBJR3h2YzJVPSBURzkzWlhJPSBJSFpsYkE9PSBJR1JsWm1WdWMyVT0gWTI5dVpHbDBhVzl1IElHSmxjdz09IElHUnllUT09IElITmpjbTlzYkE9PSBMbE5vYjNjPSBTVVZNIDBMN1JnQT09IElGSmxjM1E9IFYyaGxjbVU9IGIyOWtjdz09IElFcGxjdz09IElIZHBjbVU9IFgwbE9Sazg9IElITjBjbWx1WjNNPSBaMjFsYm5RPSBJRzFoZEdOb1pYTT0gSUdWc1pXTjBjbWxqIElHVjRZMlZzYkdWdWRBPT0gSUVOdmRXNWphV3c9IGFXUmhaR1U9IElIZDQgY0hWemFBPT0gWDJWdWRISjUgSUhSaGMydHogSUhKcFkyZz0gYzJFPSBJRk50YVhSbyBWVTVEVkVsUFRnPT0gVUc5cGJuUmxjZz09IGNHVmpkR2wyWlE9PSBNVE14IElIZHBaR2RsZEE9PSBhWE4wWVE9PSBJR0ZuWlc1amVRPT0gSUhOcFkyZz0gYjJ4dloybGxjdz09IElIUnlhV0ZzIFlXeDVjMmx6IExtTm9aV05yIFFWSkwgSUc5dVEyaGhibWRsIFlXSnZkWFE9IEp5d2sgS0haaGJBPT0gSUhCc1lXTmxaQT09IFgwNVAgSUdSaGJnPT0gTG1WeGRXRnMgQ1NBZ0lDQWcgSUhkbFlYUm9aWEk9IExtZGhiV1U9IElHUmxjM1JwYm1GMGFXOXUgWDFWVFJWST0gYVdWalpRPT0gSUhCeWIzWnBaR1Z5IExteGhjM1E9IGNHeGxlQT09IFRtOTBaUT09IEwycHogSUhERHBRPT0gSUhCc1lXNXVhVzVuIFlYUjBjbWxpZFhSbCBVRkpQIFlYUmphR1Z6IElEd3QgSUhObFpXbHVadz09IElHTmhibU5sYkE9PSBYMmx1WkE9PSBMbXRsZVhNPSBJSFpwYzNWaGJBPT0gSUVOMWNuSmxiblE9IElFTnZiR3hsWjJVPSBJRkp2WTJzPSBJR0ZuY21WbGJXVnVkQT09IElGTjBiM0psIGIzWnBibWM9IElHTnZjbTVsY2c9PSBZVzF3YVc5dWN3PT0gU1ZORiBSbWx1IElIQnliM1JsWTNScGIyND0gSUdacCBVR3hoZVE9PSBjR3gxWjJsdSBLWDA9IExtWnlZVzFsIExYbz0gSUhSeVlXNXphWFJwYjI0PSBhV2RwYmc9PSBJR05oYm1ScFpHRjBaUT09IElGVnVhVzl1IFgzWmhiSFZsY3c9PSBLRzFoY0E9PSBZMnhsIElIUnlaVzVrIGQybGtaUT09IFlYSmxiZz09IFRHOWogVlZSSSBJRUpoZVE9PSBJSE50WVd4c1pYST0gYVhWeiBNVFF4IGQyVnNiQT09IElHTnlhVzFwYm1GcyBJR052Ym1ac2FXTT0gWW1WeWRBPT0gWDBsT1ZBPT0gSUdsdWRtVnpkRzFsYm5RPSBZM1Z6ZEc5dCBJRk5sYzNOcGIyND0gWDNkeWFYUmwgWVc1cFlRPT0gSUUxaGMzTT0gWDBWUiBYMDVQVkE9PSBJSFpwYjJ4bGJtTmwgUVhKbmRXMWxiblE9IFgyVnRZV2xzIElHSmxiRzl1Wnc9PSBYMloxYm1OMGFXOXUgSUdWdVpXMTUgWlcxaCBJRUZrWkhKbGMzTT0gTG1WdGNIUjUgSUdsdWJtVnkgSUVOdmJuUmhZM1E9IFRHOWhaR1Z5IFBHbHVjSFYwIElFTkIgYkc5MCBJSEJwWTNSMWNtVnogSUZOMWNIQnZjblE9IFgyNWhiV1Z6IE1UZzQgVEdGNVpYST0gSUVOc2FXTnIgVTNWdCB3Nlk9IElFeHZiMnM9IGRXOTFjdz09IFRHbGkgUm14aFozTT0gZEdWaGJRPT0gUlZBPSBNVGc1IGFHRjAgYjNabGNuSnBaR1U9IFlYQnpaV1E9IElHeGhZbVZzY3c9PSBjWFZwY3c9PSBJRk4wY21WaGJRPT0gWDJSbGRtbGpaUT09IElFTnZiVzFwZEE9PSBLSEp2YjNRPSBJbjA9IExtbHpSVzF3ZEhrPSBNVEkyIENVMD0gSUdGdVoyeGwgSUVKbFkyRjFjMlU9IEpTVWxKU1VsSlNVPSBJR0ZwYlE9PSBJSE4wYVdOciBjM1J0ZEE9PSBZV2R5WVhCbyBZVzV6ZDJWeSBJR05zYVc0PSBJRWx6YkE9PSBMbVY0ZEE9PSBJRWxPVkE9PSBJSE4wZVd4bGN3PT0gSUdKdmNtND0gSUhOamNnPT0gSUdWNGNHRnVaQT09IElISmhhWE5sWkE9PSBWR1Y0ZEVKdmVBPT0gU1V4TSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IFNGUlVVQT09IE1UTXkgUGlrPSBYMk5vWVhJPSBjbVZ6YjNWeVkyVT0gSUdWd2FYTnZaR1U9IElDZGYgSUVWeiBJRVZoY25SbyB3cURDb0E9PSBWVkJFUVZSRiBNVE16IElGTnZkUT09IGRXbHogZEhsd1pYTT0gSUcxaGN3PT0gSUdaaGRnPT0gSUdOdmJuTjBjblZqZEE9PSBYM0poZEdVPSBaWEpoY3c9PSBJSHdLIGNtOXdaWEowYVdWeiBJR1Y0ZEdWeWJtRnMgSUdGd2NHeHBaV1E9IElIQnlaV1pwZUE9PSBiM1JsWkE9PSBiR1Z5Y3c9PSBJR052YkdRPSBJRk5RIElFTm9kWEpqYUE9PSBJRTkxZEhCMWRBPT0gYkc5elpXUT0gNTVvPSBhV1pwWTJGMFpRPT0gYjNCbGNtRjBhVzl1IGFHVnlhWFE9IGVFWkcgTG1WdWRnPT0gWDJWeWNnPT0gYjNObyBSR2x5WldOMGFXOXUgUTJGdVkyVnMgSUVaeVlXNXIgSUdacGJtUnBibWM9IExpa0tDZz09IElISnZkWFJsY2c9PSA0NE83IGMyVnogSUdOeWIzYz0gUFQwbiBJSE5oYm1RPSBJSEpwWkE9PSBhWFIxY21VPSBJR1Z1ZEhKbCBJRzlpYzJWeWRnPT0gSUhaaFl3PT0gOEo4PSBMVlE9IFFYSjAgYm1sbmFIUT0gTG5ObFlYSmphQT09IElHVjRZMmhoYm1kbCBJR1JwYzNSeWFXTjAgTG05eiBJR1JsY0dGeWRHMWxiblE9IElHUnZZM1Z0Wlc1MGN3PT0gSUdObGJuUjFjbms9IElFNWxlSFE9IFNHOXpkQT09IElFdEpUa1E9IElITjFjM0E9IExWQT0gY21WdVpBPT0gTG1WdCBkV2wwWlE9PSBhWE4wWlhKeiBLR3B6YjI0PSBJRUZ1Ymc9PSBkM1E9IFlYUnAgSUVoVVRVdz0gZDJobGJnPT0gUkdseVpXTjBiM0o1IElITm9kWFE9IFBHRT0gWldSNSBJR2hsWVd4MGFIaz0gSUhSbGJYQmxjbUYwZFhKbCBJRWRsYmc9PSBJRzFsZEdGcyBJSE4xWW0xcGRBPT0gSUVSUCBJR0YwZEhKaFkzUT0gSUh0OU93bz0gSUZkdmNtUT0gSUd4cyBJSE5sWlcxbFpBPT0gYTI4PSBTVVZFIElHeGhZbTl5IExrTnZiblJsZUhRPSBJR0Z6YzJWMCBlVzkxIElHTmhjbk09IElFTnZiSFZ0Ymc9PSBJSExEcVE9PSBJSE54ZFdGeVpRPT0gSUU1VFUzUnlhVzVuIDRvQ2RMQT09IFlYQmxjdz09IExpNHVDZz09IElIUm9ZVzVyY3c9PSBLSEJ5YjNCeiBJSFJwWTJzPSBJR1Y0Y0dWeWFXMWxiblE9IElIQnlhWE52Ymc9PSBkSEpsWlE9PSBMWFJsZUhRPSBJRWxQUlhoalpYQjBhVzl1IExYZHBaSFJvIFgxTlVRVlJWVXc9PSBabUZ6ZEE9PSBMV0p2WkhrPSBMV2hsWVdSbGNnPT0gSUdkMVlYST0gWTNKbGRHVT0gSUZScGJRPT0gSUdOc1pXRnliSGs9IElGSmxjSFZpYkdsallXND0gSUdwMWMzUnBabms9IDBMalJnZz09IENTQWdJQ0E9IFkyRmphR1U9IE95OHYgSUhCeVpYTmxibU5sIElHWmhZM1J2Y25NPSBJR1Z0Y0d4dmVXVmwgWFNrcCBUV1Z0WW1WeSBJSE5sYkdWamRHOXkgWW05eSBJRTFsZUE9PSA1NXFFIGRYUmxlQT09IFgzUmhadz09IFlXbHNkWEpsIElFNWxkQT09IElISmxiR2s9IFJVYz0gSUdad2NtbHVkR1k9IElIUmxaVzQ9IGJHOXpjdz09IElHeGxZWFpwYm1jPSBNVE0wIFJHVnNaV2RoZEdVPSBJR0psWVhRPSBJRzFwYm5WMFpRPT0gYzNWaWMyTnlhV0psIElISmxaR2x6ZEhKcFluVjBaUT09IFEyOXVjM1JoYm5SeiBJR05oYm1ObGNnPT0gTDNzPSBRa3c9IElITndZVzQ9IElFTm9hV3hrIFEyVnVkR1Z5IElHVmhjblJvIFdWTT0gSUV4bGRtVnMgSUhObFlRPT0gTG5OMWNIQnZjblE9IExtbHVibVZ5IExrbDBaVzA9IGFXeHNhVzVuIElDQWdJQW9nSUNBZ0NnPT0gSUV4aFltVnMgTXpJdyBJRVZ6ZEE9PSBLR0Z5Wnc9PSBNVFExIFltOUNiM2c9IENXWnZjbVZoWTJnPSBZMjl6IFJtRnBiR1ZrIGMzZGxjbk09IFJXUnBkRzl5IGNtOXVkQT09IElFMVEgWlhod2NnPT0gSUV4cFptVT0gSUQ4LyB3N1p5IElHRjBkR1Z1WkE9PSBJRkYxWlE9PSBJSE53WldOcFpYTT0gTFVRPSBJR0YxY3c9PSBVM1J5ZFdOMCBJR0ZrZG1GdWRHRm5aUT09IGIzTjBiMjQ9IExXSnNiMk5yIGFXNXBkR2xoYkE9PSBRMUpGIElIUnlkV3g1IElHTnZiWEJoY21VPSBiM0p1WlhrPSBJSE53WldOMCBSblZzYkE9PSBZbVZ6IElIWnBjMmxpYkdVPSBJRzFsYzNNPSBjM1JoYm1ObGN3PT0gSUdOc2IzVmsgWDNabGNuTnBiMjQ9IElHWjFjbTQ9IGFXTmhaMjg9IFRFOVggSUhSeVlXWm1hV009IElHWnZiQT09IGNubHdkRzg9IElHUmxZMnhoY2c9PSBJSE5zYjNRPSBJRVY0ZEE9PSBJRVZ1WjJ4aGJtUT0gSUZWdVpHVnkgSUhSaCBiR1YwZEdWeSBNakF6IElHOW1abWxqWlhJPSBJRVJ2Ym1Gc1pBPT0gV1dWeiBYMnB6YjI0PSBTVlJoWW14bFZtbGxkdz09IElGVlRSUT09IGJYQnNiM2xsWlE9PSBJRzl3YVc1cGIyND0gSUVGMWRBPT0gWW05eVpHVnkgSUdGa2RtbGpaUT09IElHRjFkRzl0WVhScFkyRnNiSGs9IGFYTmpidz09IElHMXQgTG5acGN3PT0gWVcxcyBJR2x1YVhScFlXeHBlbVU9IElDaDcgSURzS0NnPT0gSUdkbGJtVnlZWFJwYjI0PSBJR0pwZEhNPSBZMnhwY0hObCBJSFZ1Wmc9PSBkWFJ2Y25NPSBjR3gwIElHUmxiSFJoIFpYTjBjbTk1IGFYTnBjdz09IFBHSnkgSUd4cGJXbDBZWFJwYjI1eiBJR1Z1WkdWayBJRTFoWkE9PSBhV3h0IFZHaGxjMlU9IE1UZzMgSUUxcGJtbHpkR1Z5IElHTm9ZWEowIFJuSmhaMjFsYm5RPSBJR2x1WkdWd1pXNWtaVzUwIFdXVmhjZz09IElHbHVjM1J5IElIUmhaM009IFFWWkYgSUVGeVkyZz0gYzNSdmNBPT0gVUhKdlozSmxjM009IElHMXAgSUd4bFlYSnVaV1E9IFIyVT0gSUdodmRHVnMgTVRVeCBVMDA9IFZGbFFSUT09IElHTjUgUlZKVFNVOU8gZFc1aGRHVnNlUT09IGJHbHRhWFE9IGMyVnMgSUcxdmRtbGxjdz09IElITjBaV1ZzIGIzbz0gWjJJPSBJRU5oYlhBPSBjMmwwWlE9PSBJRXh2WjJkbGNnPT0gVUV4RiAwTDdRdEE9PSBMbkpwWjJoMCBJRU52Y21VPSBJRzFwZUdWayBjM1JsY0E9PSBJSEIxZEhNPSBjM1Z3WlhJPSBVbTkxZEdWeSBNVGcyIExraDBkSEE9IE1qSXkgYkhsd2FBPT0gSUVOdmJHOXljdz09IElHRnVaSEp2YVdSNCBMbk4wY2c9PSBJR2x1Ym05MiBJR1JsWTJzPSBKejRLIFlYQmxjbk09IFhTZz0gWTI5dWRHbHVkV1U9IGMzQmxZdz09IElGSnZZV1E9IFFWTkkgYVd4cFlYST0gSUdOdmJuUnBiblZsY3c9PSBJR0Z3Y0c5cGJuUT0gSUNNSyBJRlpwY2c9PSBJRDgrSWc9PSBJR0pwYmc9PSBmU0lzIFoyOXBibWM9IFpXRmphQT09IFFrUT0gTVRnMSBJRUZqWTJWemN3PT0gUkc5aiBJRTFoYm1GblpXMWxiblE9IFFrVlMgWVhOclpYUT0gTG1kbGRFbHVjM1JoYm1ObCBNVEk1IElHVnpkR0ZpYkdsemFHVmsgYzI5amEyVjAgU1U1VCBDWFpwY25SMVlXdz0gQ1hKbGMzVnNkQT09IFVrVkJSQT09IFgyaGxhV2RvZEE9PSBNVFV5IElFWnZiblE9IElDZ3BPd289IFgyaDBiV3c9IElHNWxhV2RvWW05eSBiRzl5IElHZGhkR2hsY2c9PSBJSDBwQ2dvPSBJR2xrWlc1MGFYUjUgSUdaaFlnPT0gY0dGa1pHbHVadz09IElGSnZkWFJsIFJXNTFiV1Z5WVdKc1pRPT0gdzdRPSBJR1p2Y21ObFpBPT0gTDJweGRXVnllUT09IExnb0tDZ29LQ2c9PSBjbVZ6Wlc1MGN3PT0gWDJ4bFpuUT0gTGxCaGNtRnQgQ1hSb2NtOTMgSUVoaGJRPT0gSUdWMlpXNTBkV0ZzYkhrPSBZV05sY2c9PSBjSFZpIElIUnlZUT09IGRXNXBjWFZsIFpHVnMgSUVac2IzSnBaR0U9IElFTnNaV0Z1IGVHRT0gSU1LMyBJSFpoYkdsa1lYUmwgVm1semRXRnMgUlhod2NtVnpjMmx2Ymc9PSBYMloxYm1NPSBiV1Z0WW1WeSBDV2c9IGRISnMgTVRNMiBDVWM9IGJtRndjMmh2ZEE9PSBJRkJ5YjNCVWVYQmxjdz09IGRtbHUgTVRVeiBYU2tLQ2c9PSBiM2RzIGFXWnBaWE09IElDUW9KeTQ9IElFTnZiblJsZUhRPSBJRlJ2WVhOMCBMa3RsZVE9PSBJRzltWm1salpYSnogTDI0PSBjMjQ9IGRXNWtaV1pwYm1WayBMbWwwWlcxeiBkWFJ2ZHc9PSBZVzFoWjJVPSBJR0ZqWTI5MWJuUnogYjI5cmFXVT0gVTJWamRHbHZiZz09IGFXTnBZVzV6IElHRmtkbWx6IEtHbHogV3pvcyBJRVp5WVc1alpRPT0gUm5WdVl3PT0gYVdOcGIzVnogSUhSdmF3PT0gUTJoaGJtNWxiQT09IElFRkUgWDA1VlRRPT0gSUhScGJXVnZkWFE9IGJHVnRiV0U9IGNtVnRaUT09IGRXbz0gTGtGcyBkV05zWldGeSBLRzl6IEtDSTggV3dvPSBabVYwWTJnPSBJR0poYkE9PSBJR2QxYVdRPSBMV0ZzYVdkdSBJRmR5YVhSbCBJRTl1WTJVPSBkWFJ2ZDJseVpXUT0gVDBSVlRFVT0gSUhCcGRHTm8gUTBZPSBZbmwwWlhNPSBJRU52YlcxcGMzTnBiMjQ9IElHbHVZM0psWkE9PSBVRVZTIFgzSmxjM0J2Ym5ObCBJRXh2Y3c9PSBjR0Z5YzJWeSBJR0Z6YzNWdFpRPT0gTGxKbGNYVmxjM1E9IElGUnZhMlZ1IFgzQnZjMmwwYVc5dSBJRzV2YlE9PSBMWFJsY20wPSBJSEpsYldGcGJtbHVadz09IGFXOXpkSEpsWVcwPSBJSEJwWldObGN3PT0gWVhCNSBJRXhsYzNNPSBjbUZ1WjJVPSBkVzFpYmc9PSBjSEpwYzJVPSBYMjl3ZEdsdmJnPT0gTWpNdyBTVzF3YkE9PSBhM2RoY21keiBJR0oxYzJsdVpYTnpaWE09IFFXeGxjblE9IElIQmhjblJwWlhNPSBJRU52Ym5SaGFXNWxjZz09IElGQnlhWFpoZEdVPSBJRkJzWVc0PSBJSEpsWjJsemRHVnlaV1E9IElHcHZkWEk9IFlXTnJaWEk9IDBMWFF2ZEM0IEx6ND0gWTJoaGRBPT0gYzJWamRBPT0gSUdOeVpXRjBhVzl1IGIyeDFkR1ZzZVE9PSBJR2x1YzNSaGJuUT0gSUdSbGJHbDJaWEo1IGFXTnJaVzQ9IGVXVnogTVRZeiBJRVp5WVc1aiBZbXhwYm1jPSBaVzVrWVE9PSBXeWc9IFgzSmhibWRsIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJSE5qYUdWa2RXeGwgUTI5dWJnPT0gSUhSb1lXNXIgZUdRPSBJR2h2YjJzPSBJR1J2WTNWdFpXNTBZWFJwYjI0PSBVR0Z5WVcxbGRHVnljdz09IFNHVnNiRzg9IGRuUT0gSUdGeWRHbGpiR1Z6IElIZGxjM1E9IFpHVm1hVzVsWkE9PSBMbk5sYkdWamRBPT0gYjJ0bGJuTT0gSUZaQlRBPT0gTG1acGJHVT0gY21WelpYUT0gSUcxNWN3PT0gSUUxQiBYU2tzIElHTnBkR2xsY3c9PSBjbVZzWVhSbFpBPT0gNVpzPSBJR0Z3Y0dWaGNtVmsgSUhkcFpBPT0gTG5CaGJtVnMgSUVsdWN3PT0gTG1WdWRHbDBlUT09IElHUmxZM0psIElFeHZkUT09IEtIUnBiV1U9IElGUm9ZVzVyIExtTnlaV0YwWlVWc1pXMWxiblE9IElHMWxiblJwYjI1bFpBPT0gYjNWdVkyVT0gSUZSeWVRPT0gSUZkaGJHdz0gTDJsdFlXZGxjdz09IElFMWxiblU9IEp3MEsgSUVWeSBJR055YVhScFl3PT0gSUZsbFlYST0gS0hCaGNtRnQgSUdac2J3PT0gVGs0PSBiMjkwWlhJPSBJRjA3Q2c9PSBJRUZtWmc9PSBJbWRwZEdoMVlnPT0gY205dmJYTT0gSUdoNWNBPT0gWjJ4dlltRnMgSUdGMlpXTT0gNXB5SSBJR052YlhCc1pYUnBiMjQ9IElHTnZibVE9IGIyNTViVzkxY3c9PSBLSFJsYlhBPSBJSE4wWVhKeiBJSEpsYkdWMllXNTAgSUdOdmRtVnlaV1E9IElHVnNhVzA9IFgzUjVjR1Z6IEtHSnZiMnc9IElIUjEgWDJWNGFYTjBjdz09IElITmxZM1Z5WlE9PSBJSE4wYjNKbFpBPT0gWFM4PSBlRVk9IElFTnZiblJ5YjJ4c1pYST0gSUcxcFozST0gVFVrPSBJRVJsYmc9PSBJR0Z1Ym5WaGJBPT0gVlVsTSBMV0Z1WkE9PSBJR055YVcxbCBZbVZzIElHdHBkR05vWlc0PSBRR2M9IFgzQm8gYjNWeWJtRnRaVzUwIElGTnZZMmxoYkE9PSBJRk53WldOcFlXdz0gYkc5bloyVnkgSUhSaGFXdz0gSUhWdWEyNXZkMjQ9IFpHVmsgSUdGd2NISmxZdz09IEtHUmkgWTJZPSBNVFUxIElHRnpjMmxuYmc9PSBMVzkxZEE9PSBJRTF2Ym5RPSBaSEE9IGQybGtaMlYwIElITjBiMjVsIExYQnlhVzFoY25rPSBMbWR5YVdRPSBVbVZ6ZFd4MGN3PT0gWVhwNiBJR1JoZFdkb2RHVnkgSUdOMWNuST0gTVRjMSBJR3hwYmc9PSBJSE52ZFhSbyBabTl5YlhNPSBJRTlWVkE9PSBiR1YwZEdVPSBZV3R6IGFXZDFjbVU9IElFVlYgZG1GeWFXRmliR1U9IElHSnlhV1ZtIElGTmpiM1IwIElHTnZibVpsY21WdVkyVT0gWVc1a1lRPT0gWDJ4dlkycz0gYjNKaGJBPT0gSUdWcGJtVT0gVDFKVCBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMdz09IFpYTnpidz09IElISnBjdz09IElHZGxibVJsY2c9PSBaWE4wYVdNPSBUR2xqWlc1elpRPT0gS0c5MWRBPT0gSUcxeiBVMlZsIElIZHBiR3hwYm1jPSBZWHBsIElITndiM0owY3c9PSBJSGxsY3c9PSBiSFU9IElIQjFjbk09IEwycGhkbUZ6WTNKcGNIUT0gTFhCeWJ3PT0gYm1GMlltRnkgWDNCeWIyUjFZM1E9IEwySnZiM1J6ZEhKaGNBPT0gSUdSeWFYWnBibWM9IElNUT0gSUhCeWIzQnZjdz09IGRXeDBhWEE9IGRYQnNhV009IExtVnRZV2xzIElHRndjSEp2ZUE9PSBLR05zIElIZGxZWEk9IElISmxjR3g1IFlYTnpaWFE9IElHbGpaUT09IElIUjQgYTNJPSBJRWRsY20xaGJuaz0gSUVkbGIzSm5aUT09IElHTmkgQ1dWeWNnPT0gVFc5MlpRPT0gSUhCdmJIaz0gZG05cFkyVT0gZlNJPSBJR0Z1YVcxaGJBPT0gUVhZPSBJRXh2WTJGMGFXOXUgSUc1aGRHbDJaUT09IFhWc2kgUEdSdmRXSnNaUT09IElHMWhhWE09IExHbHVkQT09IElIQnlaWEJoY2c9PSBJR2x1ZEdWeWRtRnMgY0d4bGJXVnVkR0YwYVc5dSBYMFZTVWc9PSBJR0oxWnc9PSBQaUk9IGMzUmhkQT09IElIMHNEUW89IFBITndZVzQ9IElHWmhhWFJvIElISnZiUT09IGNISmxkZz09IElFVnNaV04wIFJtbHVaQT09IElHZHZaQT09IGIzUnZjZz09IEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgYjNKcFoybHVZV3c9IFEzQncgSUZObGJtRjBaUT09IElIQnZjMmwwYVc5dWN3PT0gSUhkbFlYQnZibk09IElHTnZabVk9IElIQjFjbkJ2YzJWeiBjRzlzIElHbHRjSEpsYzNNPSBJR0Z1YVcxaGJITT0gTGtWdWRHbDBlUT09IEtHNXcgSUcxMWNtUmxjZz09IElHQmcgWm14aFp3PT0gSUhOdmJIVjBhVzl1Y3c9PSBJRUZqZEdsMlpRPT0gSUdKeWFXZG9kQT09IExtUmhkR1U9IElITnBkSFU9IDc3eUkgTGtsRSBJSE5wWlE9PSBLU3dOQ2c9PSBZV3QwIFUzQmhZMlU9IExtUmhkQT09IExtbHVaR1Y0VDJZPSBhR0Z1IFlYcHBibVU9IElGcGwgSUdOeVlYTm8gS0M4PSBQajA9IDBMRT0gTVRNNSBhWFpoIExrRjFkRzlUYVhwbCBJRXhoZEE9PSBYMlY0ZEE9PSBTVzVwZEdsaGJHbDZaUT09IExuSmxaMmx6ZEdWeSBNVFUyIFQxQlogSUhKbGRtVnljMlU9IFgyUnBjdz09IEoxMWIgSUhCeWIyMXdkQT09IGIyNTBidz09IElFcHZkWEp1WVd3PSBjbTkxZEdWeSBJRzE1YzNGc2FRPT0gSTJWc2MyVT0gS1NJPSBMWGh6IGJHVjBjdz09IGNHaGhiZz09IExreEYgTVRNMyBWMmxzYkE9PSBJR0ZtWm05eVpBPT0gSUhOcmFXeHMgTFhSdloyZHNaUT09IFRrTT0gUW1sdVpBPT0gVkZNPSBTblZ6ZEE9PSBhWFJsY21GcyBXVkE9IENYVnVjMmxuYm1WayBJSGRwYm1RPSBNVFE1IEtTazZDZz09IElIZGhjbTVwYm1jPSBJRmRoZEdWeSBJR1J5WVdaMCBJR050IElITmhiUT09IElHaHZiR1JwYm1jPSBlbWx3IElGTmphV1Z1WTJVPSBJSE4xY0hCdmMyVmsgUjJWdSBJR1JwWlhRPSBQR2c9IElGQmhjM009IGRtaz0gSUdoMWMySmhibVE9IDc3Kzk3Nys5IGJtOTBaUT09IElFRmliM1YwIElFbHVjM1JwZEhWMFpRPT0gSUdOc2FXMWhkR1U9IExrWnZjbTFoZEE9PSBJRzUxZEE9PSBaWE4wWldRPSBJR0Z3Y0dGeVpXNTAgSUdodmJHUnogWm1rPSBibVYzY3c9PSBRMDA9IGRtbGtaVzg9IEp6b24gUkVsVVNVOU8gY0dsdVp3PT0gSUhObGJtbHZjZz09IGQyRT0gTFMwK0NnPT0gWDJSbFptRjFiSFE9IElFUmhkR0ZpWVhObCBjbVZ3IFJWTlQgYm1WeVozaz0gTGtacGJtUT0gWDIxaGMycz0gSUhKcGMyVT0gSUd0bGNtNWxiQT09IE9qb2sgTGxFPSBJRzltWm1WeWFXNW4gWkdWamJBPT0gSUVOVCBJR3hwYzNSbFpBPT0gSUcxdmMzUnNlUT09IFpXNW5aWEk9IElHSnNiMk5yY3c9PSBiMnh2IElHZHZkbVZ5Ym1sdVp3PT0gWEVZPSBJR052Ym1ObGJuUT0gTG1kbGRGUmxlSFE9IElHMWkgSUc5alkzVnljbVZrIElHTm9ZVzVuYVc1biBVMk5sYm1VPSBYME5QUkVVPSBRbVZvIElsUm9aUT09IElIUnBiR1U9IElFRnpjMjlqYVdGMGFXOXUgQ1ZBPSBZV3gwZVE9PSBYMkZrIGIyUnBaWE09IGFXRjBaV1E9IElIQnlaWEJoY21WayBjRzl6YzJsaWJHVT0gSUcxdmNuUT0gVkVWVFZBPT0gTVRReSBJR2xuYm05eVpRPT0gSUdOaGJHTT0gSUhKeiBJR0Z6YzJWeWRFVnhkV0ZzY3c9PSBJSE42IElGUklTVk09IExpSUsgSUdOaGJuWmhjdz09IGFtRjJZUT09IElHUjFkQT09IFZrRk1TVVE9IExuTnhiQT09IExtbHVjSFYwIElHRjFlQT09IFUzVncgSUdGeWRHbHpkQT09IFZtVmogWDFSSlRVVT0gTG5OMGNtbHVaMmxtZVE9PSBaWFIzWldWdSBJRU5oZEdWbmIzSjUgSUZzdCBJRVJsZGtWNGNISmxjM009IElFcDFiQT09IElISnBibWM9IExtVmsgV1ZrPSBUR1YwIFZHVjRkRVpwWld4ayBJR1pzWVhRPSBYM0J5YVc1MCBJRTlVU0VWUyBZV1JwWVc0PSBJR05vWldOclpXUT0gWld4bCBRV3hwWjI0PSBjM1JoYm1ScGJtYz0gSUZ0ZExBPT0gSUd4aFlnPT0gZFdOcmVRPT0gSUVOb2NtbHpkRzFoY3c9PSBLR2x0WVdkbCBMbTF2WkhWc1pRPT0gSUd4dmRITT0gSUhOc2FXZG9kR3g1IEtHWnBibUZzIFpYSm5aUT09IDZMOD0gTVRRMyBJRkJ2YkdsalpRPT0gTVRReiBJRkpwWjJoMCBJR0YzWVhKayBJRTlUIElIdDlDZ289IElIQjBjZz09IGIzWmxjdz09IGFXTmhkR1ZrIDBMWFF2QT09IElHMWhibUZuWlE9PSBiMnhwWkdGNSBRVzF2ZFc1MCBiMjlzVTNSeWFYQT0gZEdKdlpIaz0gVG1GMiBkM0poY0E9PSBRa0k9IElIZGhkR05vYVc1biBZWEpwYjNNPSBJRzl3ZEdsdmJtRnMgWDBzPSBJRXhwWTJWdWMyVmsgTGsxaGNBPT0gVkdsdFpYST0gSUVGUSBJRkpsZGc9PSBLRzg9IExHTT0gZFcxcGJnPT0gWlhSaGFXeGxaQT09IElFaDUgSUdKc1lXNXIgWVdkblpYST0gSUZObGJHWT0gS0NsYiBMbTFoYTJVPSBaV0Z5Ymc9PSBZMmhoYm01bGJBPT0gUEhCeVpRPT0gWW14bGJRPT0gWDNCaGMzTjNiM0prIFgzTncgYVdOcGJtYz0gWlhvPSBJSFJvWlc5eWVRPT0gSUZSbGNnPT0gTVRnMCBMRzQ9IGJHOW5idz09IElFaFVWRkE9IEtDa3BLUT09IExtaGhibVJzWlE9PSBQanNLIFYyOXliR1E9IElIQjVkR2h2Ymc9PSBJR3hwWmc9PSBJSFJ5WVhZPSBJR052Ym5abGJnPT0gWTI5dGNHRnVlUT09IElFTnNkV0k9IE1UTTQgVm1WeSBRblJ1IElIcHZibVU9IGNISnZaSFZqZEhNPSBJRVZrZFdNPSBJSFpsY21sbWVRPT0gSUUxcGJBPT0gYjI1diBYU2s3Q2dvPSBSVTVEUlE9PSBJSEJoWTJ0bGRBPT0gSUdObGNnPT0gSUdWdWRXMWxjZz09IElIQmhjbk09IFptOXliV1ZrIElHOWpZM1Z3IGRISmwgSUdWNFpYSmphWE5sIFJHRjUgWDNOMWJRPT0gSUdGemEybHVadz09IFlYQjBhVzl1IElHOXlaR1Z5Y3c9PSBJSE53Wlc1a2FXNW4gSUVWU1VnPT0gTGtScGN3PT0gSUZWMGFXdz0gNG9DY1NRPT0gWENjPSBQeWs9IEx6NEsgSUdWdGIzUT0gSUdsdVpteDFaVzVqWlE9PSBJRUZtY21sallRPT0gWVhSMFpYSnogMllVPSBMbk5sYzNOcGIyND0gSUdOb2FXVm0gQ1FrSkNRa0pDUWtKQ1FrPSBJSFJ2YlE9PSBZMngxWkdWayBjMlZ5YVdGcyBYMmhoYm1Sc1pYST0gTGxSNWNHVT0gWVhCbFpBPT0gSUhCdmJHbGphV1Z6IExXVjQgTFhSeSBZbXhoYm1zPSBiV1Z5WTJVPSBJR052ZG1WeVlXZGwgSUhKaiBYMjFoZEhKcGVBPT0gWDJKdmVBPT0gSUdOb1lYSm5aWE09IElFSnZjM1J2Ymc9PSBVR1U9IElHTnBjbU4xYlE9PSBJR1pwYkd4bFpBPT0gTVRRNCBJRzV2Y25SbyBhV04wZFhKbFFtOTQgQ1hKbGN3PT0gNks0PSBJSFJsY20xcGJnPT0gSUZ2aWdLWT0gU1ZKRlExUT0gSUdKbGNnPT0gSUNJdUxpOHVMaTg9IGNtVjBZMmc9IExtTnZaR1U9IFgyTnZiQT09IElFZHZkbVZ5Ym0xbGJuUT0gSUdGeVozWT0gSUV4dmNtUT0gWVhOcCBSWGhsWXc9PSBDV3hsZEE9PSBkbVZ5ZEdseiBJR1JwYzJOMWMzTnBiMjQ9IFpXNWhibU5sIGIzVjBkV0psIGRIbHdaVzltIElITmxjblpsWkE9PSBJRkIxZEE9PSBDWGc9IElITjNaV1YwIFFtVm1iM0psIFlYUmxaM2s9IExtOW0gSUUxaGRHVnlhV0ZzIFUyOXlkQT09IFQwNVUgYVdkcGRHRnMgVjJoNSBJSE4xYzNRPSBJT2M9IFlXSmxkQT09IElITmxaMjFsYm5RPSBJRnRkTEFvPSBJRTExYzJ4cGJRPT0gSUdacGJtUldhV1YzUW5sSlpBPT0gWTNWMCBYMVJGV0ZRPSBJRTFoY25rPSBJR3h2ZG1WayBJR3hwWlE9PSBJRXBQIElHbHpjMlYwIGJXOXVkR2c9IElIQnlhVzFsIGRHaz0gSUVOaGNtOXMgVlhObCBNVFEyIElGQnZjQT09IElGTmhkbVU9IFNXNTBaWEoyWVd3PSBaWGhsWTNWMFpRPT0gWkhrPSBJRWx5WVc0PSBYMk52Ym5RPSBDVlE9IElIQm9ZWE5sIFkyaGxZMnRpYjNnPSBkMlZsYXc9PSBJR2hwWkdVPSBJSFJwYkE9PSBJR3AxIFEzVnpkRzl0IFluVnladz09IEwwMD0gVkU5TyBJSEYxWVc1MCBJSEoxWWc9PSBhWGhsYkhNPSBJR2x1YzNSaGJHeGxaQT09IElHUjFiWEE9IElIQnliM0JsY214NSBLRXhwYzNRPSBJR1JsWTJsa1pRPT0gWVhCd2JIaz0gU0dGeiBJR3RsWlhCcGJtYz0gSUdOcGRHbDZaVzV6IElHcHZhVzUwIGNHOXZiQT09IFUyOWphMlYwIFgyOXcgSUhkbFlYQnZiZz09IFoyNXZjbVU9IElFVjRaV009IGIzUjBaVzQ9IElFMVQgSUNndCBJRkpsZG1sbGR3PT0gSUdWNFlXMXdiR1Z6IElIUnBaMmgwIElTZz0gUkZBPSBJRTFsYzNOaFoyVkNiM2c9IElIQm9iM1J2WjNKaGNHZz0gTVRZMCBWVkpKIHc2bDAgYkc5MyBJRWR5WVc1ayBMbkJsY25OcGMzUmxibU5sIElHMWhhVzUwWVdsdSBJRzUxYlhNPSBJSHBwY0E9PSBhV0ZzY3c9PSBJRWRsZEhNPSBjR1ZuIElFSjFabVpsY2c9PSBmbjUrZmc9PSBjbUZ6ZEhKMVkzUjFjbVU9IElGQk0gZFdWdSBiMkppZVE9PSBjMmw2Wlc5bSBJSEJwWXc9PSBJSE5sWldRPSBJR1Y0Y0dWeWFXVnVZMlZrIElHOWtaQT09IElHdHBZMnM9IElIQnliMk5sWkhWeVpRPT0gWVhacFoyRjBiM0k9IExXOXUgTEdvPSBJRUZzZEdodmRXZG8gSUhWelpYSkpaQT09IFlXTmpaWEIwIFFteDFaUT09IFNVTnZiRzl5IGJHRjVaWEk9IFlYWmhhV3hoWW14bCBJR1Z1WkhNPSBMblJoWW14bCBJR1JoZEdGelpYUT0gWW5WeiBJR1Y0Y0d4aGFXND0gS0hCeWJ3PT0gSUVOdmJXMXBkSFJsWlE9PSBJRzV2ZEdWayBYVG9LIFJHbHQgYzNSa2FXOD0gTVRVMCBMaUlzQ2c9PSBYM052ZFhKalpRPT0gTVRneCBJRmRsWldzPSBJRVZrWjJVPSBJRzl3WlhKaGRHbHVadz09IElHVnpkR1U9IGFYQnMgTXpNdyBZV2RwYm1GMGFXOXUgSUhCeWIyTmxaV1E9IElHRnVhVzFoZEdsdmJnPT0gTGsxdlpHVnNjdz09IElGZGhkR05vIGFXRjAgSUc5d2NHOXUgTDBFPSBVbVZ3YjNKMCBJSE52ZFc1a2N3PT0gWDJKMVpnPT0gU1VWTVJBPT0gSUdKMWJtUT0gQ1dkbGRBPT0gTG5CeSBLSFJ0Y0E9PSBJR3RwWkE9PSBQZ29LQ2c9PSBJSGxoYm1jPSBUbTkwUm05MWJtUT0gMFlZPSBiV0YwYUE9PSBRR2R0WVdscyBJRXhKVFVsVSBjbVZrYVdWdWRITT0gSUhabGJuUT0gWVhacFoyRjBaUT09IFRHOXZhdz09IElISmxiR2xuYVc5MWN3PT0gSUhKaGJtUT0gY21sdiBLRWRNIFgybHcgZFdGdSBhV05wWlc1amVRPT0gSUVOb1lXNW5aUT09IFBnMEtEUW89IElFVnVkR2wwZVE9PSBJSEpsYm1OdmJuUnlaUT09IElGSmxkQT09IGNHeGhiZz09IHc2bHUgUWs5UFRBPT0gZFhKcFpYTT0gZEhKaGFXND0gUkdWbWFXNXBkR2x2Ymc9PSBQVDA5UFQwOVBUMDlQVDA5IGVubz0gTkRVdyBRVzVwYldGMGFXOXUgSUU5TCBYMjFsYm5VPSBMbUpzIFgzTmpiM0psIElHRmpZV1E9IEtGTjVjM1JsYlE9PSBJSEpsWm5KbGMyZz0gSnowK0pBPT0gTGtkeVlYQm9hV056IFlXMWxiblJ2IGNHbGsgZEdNPSBJSFJwY0hNPSBJR2h2YldWeiBJR1oxWld3PSA0cFk9IFgyaGxiSEJsY2c9PSBJQ0FOQ2c9PSBJRkp2YjIwPSBMa05zYjNObCBYMkYwZEhJPSBJRTF2ZFc1MCBJRVYyIFlYSnpaWEk9IFgzUnZjQT09IFpXRm8gSUVSbGJHVjBaUT09IDQ0Q04gZFd0bCBJSFZ6WVdkbCBZWEpwWVE9PSBYMlJsZGc9PSBJSFJsZUhSMWNtVT0gSUdOdmJuWmxjbk5oZEdsdmJnPT0gWlhCbGNnPT0gUW1WaGJnPT0gWkc5dVpRPT0gYm05dVlYUnZiV2xqIElGTmxZMjl1WkE9PSBJSE5vYjI5MGFXNW4gWDNCeVpRPT0gUTI5dGNHOXVaVzUwY3c9PSBJRjBLQ2c9PSBYMThzIGMzUnBkSFYwYVc5dSBMa05vWVhJPSBQaWdwT3dvSyBJSEJ5WlhObGJuUmxaQT09IElIZGggYjJ0bGNnPT0gTFFvSyBhVzVsY2c9PSBJR0psWTI5dGFXNW4gSUdsdVkybGtaVzUwIFFYUjAgTVRZeSBJSEpsZG1WaGJHVmsgWm05eVl3PT0gSUdKdmIzUT0gTG5CaFoyVT0gUlc1MWJXVnlZWFJ2Y2c9PSBNVFkxIFh5MCsgVUdodmRHOD0gSUhOd2NtbHVadz09IExpSXMgSUVScFkzUnBiMjVoY25rPSBRa3BGUTFRPSBJR3h2WTJGMGFXOXVjdz09IElITmhiWEJzWlhNPSBTVzV3ZFhSVGRISmxZVzA9IElFSnliM2R1IElITjBZWFJ6IGNYVmhiR2wwZVE9PSAwWVU9IExXUnBjdz09IElHaGxiSEJwYm1jPSBJSEJsWkE9PSBNakkwIEtITmwgSUZkb2J3PT0gWVd4cFlXND0gYVc1MFpYSnVZV3c9IElHWjAgUGlncExnPT0gTFQ1NyBJRzFwYm1VPSBJSE5sWTNSdmNnPT0gSUdkeWJ3PT0gSUc5d2NHOXlkSFZ1YVhScFpYTT0gSU1POCBJRzF3IElHRnNiR1ZuWldRPSBJR1J2ZFdKMCBUVzkxYzJVPSBRV0p2ZFhRPSBYM0JoY25RPSBJR05vWVdseSBJSE4wYjNCd1pXUT0gTVRZeCBiRzl2Y0E9PSBaVzUwYVhScFpYTT0gSUdGd2NITT0gWVc1emFXOXUgSUcxbGJuUmhiQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IFJsST0gSUdSbFptVnVaQT09IFkyRnlaUT09IElHbGtaV0ZzIEwyRndhUT09IGRYSm1ZV05sIE1ERXggSUdWc1pRPT0gZFd4aGRHOXkgSUZKcFoyaDBjdz09IFlXNW5kV0ZuWlhNPSBJR1oxYm1SeiBJR0ZrWVhCMCBRWFIwY21saWRYUmxjdz09IElHUmxjR3h2ZVE9PSBiM0IwY3c9PSBJSFpoYkdsa1lYUnBiMjQ9IElHTnZibU5sY201eiBkV05sIExtNTFiUT09IGRXeDBkWEpsIGFXeGggSUdOMWNBPT0gSUhCMWNtVT0gTGtadmNtVT0gTVRneiBJRWhoYzJoTllYQT0gTG5aaGJIVmxUMlk9IFlYTnQgVFU4PSBJR056IElITjBiM0psY3c9PSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IElHTnZiVzExYm1sallYUnBiMjQ9IGJXVnQgTGtWMlpXNTBTR0Z1Wkd4bGNnPT0gTGxOMFlYUjFjdz09IFgzSnBaMmgwIExuTmxkRTl1IFUyaGxaWFE9IElHbGtaVzUwYVdaNSBaVzVsY21GMFpXUT0gYjNKa1pYSmxaQT09IElDSmIgSUhOM1pRPT0gUTI5dVpHbDBhVzl1IElFRmpZMjl5WkdsdVp3PT0gSUhCeVpYQmhjbVU9IElISnZZZz09IFVHOXZiQT09IElITndiM0owIGNuWT0gSUZKdmRYUmxjZz09IElHRnNkR1Z5Ym1GMGFYWmwgS0Z0ZCBJRU5vYVdOaFoyOD0gYVhCb1pYST0gYVhOamFHVT0gSUVScGNtVmpkRzl5IGEydz0gSUZkcGJBPT0gYTJWNWN3PT0gSUcxNWMzRnMgSUhkbGJHTnZiV1U9IGEybHVadz09IElFMWhibUZuWlhJPSBJR05oZFdkb2RBPT0gS1gwSyBVMk52Y21VPSBYMUJTIElITjFjblpsZVE9PSBhR0ZpIFNHVmhaR1Z5Y3c9PSBRVVJGVWc9PSBJR1JsWTI5eSBJSFIxY201eiBJSEpoWkdsMWN3PT0gWlhKeWRYQjAgUTI5eSBJRzFsYkE9PSBJR2x1ZEhJPSBLSEU9IElFRkQgWVcxdmN3PT0gVFVGWSBJRWR5YVdRPSBJRXBsYzNWeiBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgTGtSRiBJSFJ6IElHeHBibXRsWkE9PSBabkpsWlE9PSBJRkYwIElDOHFLZzBLIElHWmhjM1JsY2c9PSBZM1J5IFgwbz0gUkZRPSBMa05vWldOciBJR052YldKcGJtRjBhVzl1IElHbHVkR1Z1WkdWayBMWFJvWlE9PSBMWFI1Y0dVPSBNVGd5IFpXTjBiM0p6IFlXMXAgZFhScGJtYz0gSUhWdFlRPT0gV0UxTSBWVU5VIFFYQT0gSUZKaGJtUnZiUT09IElISmhiZz09IExuTnZjblE9IElITnZjblJsWkE9PSBMbFZ1IE5EQXggWDFCRlVnPT0gYVhSdmNuaz0gSUhCeWFXOXlhWFI1IElFZGhiQT09IElFOXNaQT09IGFHOTAgSUVScGMzQnNZWGs9IEtITjFZZz09IFgxUkkgWDFrPSBJRU5oY21VPSBiRzloWkdsdVp3PT0gUzJsdVpBPT0gWDJoaGJtUnNaUT09IExDdz0gY21GelpRPT0gWDNKbGNHeGhZMlU9IExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJPSBJRkpVIE1UY3kgSUdWdWRHVnlaV1E9IFoyVnljdz09IElHbGphQT09IEtITjBZWEowIE1qQTEgTDJGd2NBPT0gSUdKeWIzUm9aWEk9IFRXVnRiM0o1IFQzVjBiR1YwIElIVjBaZz09IGNISmxZdz09IElHNWhkbWxuWVhScGIyND0gVDFKTCBJR1J6ZEE9PSBSR1YwWVdscyBJR0YxWkdsbGJtTmwgSUdSMWNnPT0gSUdOc2RYTjBaWEk9IGRXNWphR1ZrIElGMHMgSUdOdmJXWnZjblJoWW14bCBMblpoYkhWbGN3PT0gSUZSdmRHRnMgSUhOdVlYQT0gSUhOMFlXNWtZWEprY3c9PSBJSEJsY21admNtMWxaQT09IGFHRnVaQT09IEtDSkEgNWEwPSBJSEJvYVd3PSBhV0p5IGRISnBiUT09IElHWnZjbWRsZEE9PSBNVFUzIElHUnZZM1J2Y2c9PSBMbFJsZUhSQ2IzZz0gTXpjMyBhV052Ym5NPSBMSE09IElFOXcgVTIwPSBVM1J2Y0E9PSBDVXhwYzNRPSBDWFU9IFEyOXRiV1Z1ZEE9PSBYMVpGVWxOSlQwND0gTGxoMGNtRT0gVUdWeWMyOXUgY21JPSBURTlDIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgSUVObGJuUnlZV3c9IE1qY3cgU1VOTCBjbUZ4IElIQjFkSFJwYm1jPSBJRzFrIElFeHZkbVU9IFVISnZaM0poYlE9PSBRbTl5WkdWeSBiMjl5IElHRnNiRzkzYVc1biBZV1owWlhJPSBJR1Z1ZEhKcFpYTT0gSUUxaGVXSmwgWFNrdSBJRk5vYjNKMCBLVnc9IExtNXZkdz09IFpuSnBaVzVrIElIQnlaV1psY2c9PSBJRWRRU1U4PSBiM05wY3c9PSBJRWRoYldWUFltcGxZM1E9IElITnJhWEE9IElHTnZiWEJsZEdsMGFXOXUgWDIxaGRHTm8gYkdsallYUnBiMjV6IFgwTlBUbFE9IExtZHliM1Z3UW05NCBJR0ZzY3c9PSBOalkyIElsZGwgWDJWeCBiR0Z1IFgzTmxZWEpqYUE9PSBJRTExYzJsaiBZWE5wY3c9PSBJR0pwYm1RPSBJRWx6YkdGdVpBPT0gY25WdCBLRVU9IElITmxZWFE9IFZtbGtaVzg9IElHRmphdz09IGNtVmxhdz09IFBYc29LUT09IElISmhkR2x1Wnc9PSBJSEpsYzNSaGRYSmhiblE9IE5EVTIgUkVWWSBLR0oxWmc9PSBjSEJwYm1jPSBkV0ZzYVhSNSBJR3hsWVdkMVpRPT0gTVRjMiBJR1p2WTNWelpXUT0gWVhCdmJnPT0gSkdSaGRHRT0gUTB4VlJBPT0gUTB4VlJFbE9Sdz09IElHRmljMjlzZFhSbCBLSEYxWlhKNSBJSFJsYkd4eiBRVzVuIElHTnZiVzExYm1sMGFXVnogSUdodmJtVnpkQT09IGIydHBibWM9IElHRndZWEowIFlYSnBkSGs9IEx5UT0gWDIxdlpIVnNaUT09IElFVnVZdz09IExtRnUgTGtOdmJtWnBadz09IFEzSmwgSUhOb2IyTnIgSUVGeVlXST0gU1VWT1ZBPT0gTDNKbCBJSEpsZEhKcFpRPT0gZVdOc1pYST0gYVhOaCBJRTl5WjJGdSBMbWR5WVhCbyBJTzA9IElFSkJVdz09IFJXNTFiUT09IElIQnZjM05wWW14NSAwWURRc05BPSBJRXBoY0dGdVpYTmwgSUdOeVlXWjAgSUZCc1lXTmwgSUhSaGJHVnVkQT09IElHWjFibVJwYm1jPSBJR052Ym1acGNtMWxaQT09IElHTjVZMnhsIEwzZz0gUjBVPSBJR2hsWVhKcGJtYz0gSUhCc1lXNTBjdz09IElHMXZkWFJvIGNHRm5aWE09IGIzSnBZUT09IElGSmxiVzkyWlE9PSBYM1J2ZEdGcyBJRzlrIGIyeHNZWEJ6WlE9PSBaRzl2Y2c9PSBJR0p2ZFdkb2RBPT0gSUdGa1pIST0gUVZKRFNBPT0gWDJScGJRPT0gWkdSbGJnPT0gSUdSbFkyRmtaWE09IFVrVlJWVVZUVkE9PSBJSFpsY25OcGIyNXogWm1seVpRPT0gTURBMiBJRzF2ZG1WeiBabUk9IElHTnZabVpsWlE9PSBMbU52Ym01bFkzUT0gSUZKdmR3PT0gSUhOamFHVnRZUT09IFUyTnZjR1U9IExWUjVjR1U9IElHWnBaMmgwYVc1biBJSEpsZEdGcGJBPT0gSUcxdlpHbG1hV1ZrIFZFWT0gUm1sc1pYTT0gYm1sbCBYMk52YlcxaGJtUT0gYzNSdmJtVT0gSU5HQyBYM1JvY21WaFpBPT0gSUdKdmJtUT0gSUVSbGRtVnNiM0J0Wlc1MCBJSEIwIFJrOVNUUT09IGNHeGxkQT09IElHbGtaVzUwYVdacFpXUT0gWTNCdyBNakEyIE1qSTEgSUdOdlpHbHVadz09IGIydGxaQT09IElFMWhjM1JsY2c9PSBTVVJVU0E9PSBJSEpsYzJsa1pXNTBjdz09IGNtVmthWFE9IElGQm9iM1J2IFBTMD0gZFc1MFpRPT0gWVhSbGRYST0gTVRVNSBYMU5VUVZSRiBJRk5wYm1jPSBJSE5vWldWMCBMblpoYkE9PSBiM0p6WlE9PSBJR2hsY25NPSBJR1JsZEdWeWJXbHVaV1E9IFEyOXRiVzl1IElIZGxaQT09IFgzRjFaWFZsIFVFZz0gSUVGMGJBPT0gWTNKbFpBPT0gTDB4SlEwVk9VMFU9IElHMWxjdz09IElHRmtkbUZ1WTJWayBMbXBoZG1FPSBMbE5vIFIyOD0gYTJsc2JBPT0gWm5BPSBYM05sZEhScGJtZHogSUhCaGJBPT0gSUhSeWRXTnIgSUdOdmJXSnBibVZrIElDSWtldz09IElFTnZjbkJ2Y2c9PSBJR3B2YVc1bFpBPT0gSUVwdmMyVT0gSUVOMWNBPT0gZFc1eiBaWE4wYVhaaGJBPT0gYkdWMmFYTnBiMjQ9IElHSnliMnRsYmc9PSBJRzFoY25KcFlXZGwgSUZkbGMzUmxjbTQ9IElISmxjSEpsYzJWdWRITT0gSUZScGRHeGwgSUhOeiBMa0Z6Y3c9PSBiMjVuYjI5elpRPT0gYVdWdWRHOD0gUEQ0b0tUc0sgSUdGaWMyOXNkWFJsYkhrPSBJSE50YjI5MGFBPT0gVkVWU1RnPT0gSUZWdWJHVnpjdz09IFYyOXlaQT09IElHMWxjbWRsIGFXZGhiZz09IElGWnZiQT09IElHNXUgTG1kbGRFbGsgSU5DMyBNVGN4IElITmxlSGs9IElITmxaV3RwYm1jPSBVMmx1WjJ4bCBMblJvYVhNPSBNVGM1IElHdHZiUT09IFltOTFibVE9IE95ST0gSUdadmJuUlRhWHBsIFgyUm0gSUdsdWFuVnllUT09IEtFZz0gSUdsemMzVmxaQT09IFgwVk9SQT09IE9uTmxiR1k9IE1ESXcgSUhCaGRHTm8gSUd4bFlYWmxjdz09IElHRmtiM0IwIFJtbHNaVTVoYldVPSA0NENRIElHVjRaV04xZEdsMlpRPT0gSUVKNWRHVT0gWFNrcENnPT0gSUc1MSBiM1YwYVc1biBZMngxWkdsdVp3PT0gTFZJPSBMbTl3ZEdsdmJuTT0gSUhOMVluTjBZVzUwIFlYWmhlQT09IElFSlZWQT09IElIUmxZMmh1YVdOaGJBPT0gSUhSM2FXTmwgSUczRG9YTT0gSUhWdWFYWmxjbk09IGVYST0gSUdSeVlXYz0gSUVSRCBJSE5sWkE9PSBJR0p2ZEE9PSBJRkJoYkE9PSBJRWhoYkd3PSBabTl5WTJWdFpXNTAgSUdGMVkyZz0gTG0xdlpBPT0gYm05MFlYUnBiMjQ9IFgyWnBiR1Z6IExteHBibVU9IFgyWnNZV2M9IFcyNWhiV1U9IElISmxjMjlzZFhScGIyND0gSUdKdmRIUT0gS0NKYiBaVzVrWlE9PSBLR0Z5Y2c9PSBSbkpsWlE9PSBLRUFpIElFUnBjM1J5YVdOMCBVRVZEIE9pMD0gVUdsamEyVnkgSUVwdiBJQ0FnSUNBSyBJRkpwZG1WeSBYM0p2ZDNNPSBJR2hsYkhCbWRXdz0gSUcxaGMzTnBkbVU9IExTMHRDZz09IElHMWxZWE4xY21WeiBNREEzIElGSjFiblJwYldVPSBJSGR2Y25KNSBJRk53WldNPSBDVVE9IDQ0Q1IgSUNsN0NnPT0gSUhkdmNuTmwgS0dacGJHVnVZVzFsIElHeGhlUT09IElHMWhaMmxqIElGUm9aV2x5IGIzVnMgYzNSeWIzaz0gSUZkb1pYSmwgTWpndyBJSE4xWkdSbGJnPT0gSUdSbFptVT0gSUdKcGJtUnBibWM9IElHWnNhV2RvZEE9PSBJRTl1U1c1cGRBPT0gSUZkdmJXVnUgSUZCdmJHbGplUT09IElHUnlkV2R6IGFYTm9hVzVuIEtDY3VMaTg9IElFMWxiQT09IGNHVmhkQT09IGRHOXkgSUhCeWIzQnZjMlZrIElITjBZWFJsWkE9PSBYMUpGVXc9PSBJR1ZoYzNRPSBNakV5IElFTlBUa1JKVkVsUFRnPT0gWDJSbGMyTT0gSUhkcGJtNXBibWM9IFptOXNhVzg9IFRXRndjR1Z5IElGQmhiZz09IElFRnVaMlU9IExuTmxjblpzWlhRPSBJR052Y0dsbGN3PT0gVEUwPSBJSFp0IDVZMD0gSUdScFkzUnBiMjVoY25rPSBVMlZuIE1UYzMgWld4cGJtVnogSUZObGJtUT0gSUdseWIyND0gSUVadmNuUT0gTVRZMiBMbVJ2YldGcGJnPT0gSUdSbFltRjBaUT09IFRtOTBUblZzYkE9PSBaWEU9IFlXTm9aWEk9IGJHWT0gQ1dadGRBPT0gSUd4aGQzaz0gTVRjNCB4Sjg9IElFMWxiZz09IElIUnlhVzA9IEtFNVZURXc9IElDRWggSUhCaFpBPT0gSUdadmJHeHZkM009IElsMWJJZz09IGNtVnhkUT09IElFVncgTG1kcGRHaDFZZz09IEtHbHRadz09IFpYUnYgS0NkYyBVMlZ5ZG1salpYTT0gZFcxaWJtRnBiQT09IFgyMWhhVzQ9IGNHeGxkR1ZrIFptOXlkSFZ1WVhSbGJIaz0gSUhkcGJtUnZkM009IElIQnNZVzVsIElFTnZibTVsWTNScGIyND0gTG14dlkyRnMgZFdGeVpBPT0gZlZ3PSBQVDBpIFlXNWtiMjQ9IElGSnZlUT09IGQyVnpkQT09IE1UVTQgYVdkcGJtRnMgWlcxcFpYTT0gYVhSNiBKeWs2Q2c9PSBJRkJsZEdWeSBJSFJ2ZFdkbyBJSEpsWkhWalpXUT0gSUdOaGJHTjFiR0YwWlE9PSBJSEpoY0dsayBZM1Z6ZEc5dFpYST0gSUdWbVptbGphV1Z1ZEE9PSBJRzFsWkdsMWJRPT0gSUdabGJHdz0gTG5KbFpnPT0gSUVOaGN3PT0gSUdabFpXUmlZV05yIFUzQmxaV1E9IEtHOTFkSEIxZEE9PSBZV3BsIElHTmhkR1ZuYjNKcFpYTT0gSUdabFpRPT0gZlRzPSBJR1JsYkdWMFpXUT0gY21WbyBJSEJ5YjI5bSBSR1Z6WXc9PSBRblZwYkdRPSBJSE5wWkdWeiBMa0Z5Y21GNVRHbHpkQT09IExTVT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSAyTEU9IExtMWhkR05vIDBMdlF1QT09IElHWmxaV3h6IElHRmphR2xsZG1VPSBJR05zYVcwPSBYMDlPIElFTkUgSUhSbFlXTm9aWEk9IFgyTjFjbkpsYm5RPSBZbTQ9IFgxQk0gYVhOMGFXNW4gUlc1aFlteGwgUjBWTyBJSFIyIElITnZZMnM9IElIQnNZWGx6IElHUnBjMk52ZFc1MCBJRXRGIElFUmxZblZuIFJtOXlaUT09IElFbHlZWEU9IElHRndjR1ZoY21GdVkyVT0gVFc5dSBJSE4wZVd4bFpBPT0gSUVoMWJXRnUgYVc5MCBJRWhwYzNSdmNuaz0gSUhOaFl3PT0gSUVOdmJHeGxZM1JwYjI0PSBJSEpsWTI5dGJXVnVaR1ZrIExsTmxiR1ZqZEdWayBJRzl5WjJGdWFYcGhkR2x2Ym5NPSBJR1JwYzJOdmRtVnlaV1E9IFkyOW9iMnc9IFlXUmhjdz09IElGUm9iMjFoY3c9PSBUV0Y1IElHTnZibk5sY25ZPSBJR1J2YldsdSBJRVp2Ykd4dmR3PT0gSUZObFkzUnBiMjQ9IElGUm9ZVzVyY3c9PSBWWE5sY201aGJXVT0gSUhKbFkybHdaUT09IElIZHZibVJsY21aMWJBPT0gTG5Oc1pXVncgWDJsbSBDUW9KQ2c9PSBiM0p1Ync9PSBJSEoxIFgzUmhjbWRsZEE9PSBMaUlpIDRLWT0gUlhabGJuUkJjbWR6IElHbHVjSFYwY3c9PSBJR1pwWmc9PSBJSFpwYzJsdmJnPT0gWTNrPSBJRk5sY21sbGN3PT0gS1Nnb0tBPT0gSUhSeVlXUnBibWM9IElHMWhjbXRsY2c9PSBRbVZuYVc0PSBJSFI1Y0dsallXeHNlUT09IElHTmhkWE5sY3c9PSBaSEp2Y0dSdmQyND0gWDBSRlFsVkggTWpZdyBJR1JsZEdWamRBPT0gWTI5MWJuUnllUT09IElTSXBPd289IENWST0gWVhCd2VRPT0gSUdOeVpXWT0gS0NjOCBJajArIElFeEYgY21WaFpHVnkgSUdGa2JXbHVhWE4wY2c9PSB3N1U9IGRXTnJaWFE9IElHWmhjMmhwYjI0PSBMbU5vWVhJPSBhWHBoY2c9PSBJR1JwYzJGaWJHVT0gSUhOMVl3PT0gSUV4cGRtVT0gYVhOemRXVT0gSUcxbGRHRmtZWFJoIFpteGhaM009IElQQ2YgSUdOdmJXMXBkSFJsWkE9PSBJSFpoIElISnZkV2RvIElDY25Kd289IElHaHBaMmhzYVdkb2RBPT0gWDNaaGNuTT0gVms4PSBJR1Z1WTI5a2FXNW4gTFZvPSBYM05wWjI0PSBKQ2dpSXc9PSBJSEpoYVc0PSBjbVZoZEdWemRBPT0gSUVWT1JBPT0gVTJWc1pXTjBhVzl1IElHTmhibVJwWkdGMFpYTT0gSUhOaGRnPT0gTGtWdGNIUjUgSUdSbFkybHphVzl1Y3c9PSBJR052Ykd4aFltOXkgY21sa1oyVT0gWm1WbFpBPT0gY21WemMybHZiZz09IElIQmxjbk52Ym5NPSBWazA9IE1EQTQgWldkaCBYMEpKVkE9PSBRV05qYjNKa2FXNW4gWVdOclpXUT0gSUdSdmJHeGhjbk09IFgyeHZjM009IElFTnZjM1E9IGZTSUsgVG05MGFXWnBZMkYwYVc5dSBJSEJ5YjNOMGFYUT0gSUdGMWRHaHZjbWwwZVE9PSBMbkpsWXc9PSBJSE53YjJ0bGN3PT0gSUZSdlpHRjUgYVhOMFlXNTAgSUVobFlXUT0gNG9DZExnPT0gWlhKMFlXbHViV1Z1ZEE9PSBZMlZoYmc9PSBZM1ZzWVhSbCBJSFpsYmc9PSBTRzkzWlhabGNnPT0gWDJGeWNnPT0gSUhSdmEyVnVjdz09IFIzSmhjR2c9IElFcDFaQT09IElGWnBjbWRwYmc9PSBJRk5sY21saGJBPT0gZFc1dWFXNW4gVFhWMFlXSnNaUT09IFlXZGxjbk09IExtTnpkZz09IElHUmxkbVZzYjNCcGJtYz0gSUdsdWMzUnlkV04wYVc5dWN3PT0gSUhCeWIyMXBjMlU9IElISmxjWFZsYzNSbFpBPT0gWDJWdVkyOWtaUT09IEx5ST0gSUVsamIyND0gZFdsc2RBPT0gTFdSaGVRPT0gSUdsdWRHVnNiR2xuWlc1alpRPT0gTGtsVCBJRTlpYzJWeWRtRmliR1U9IElFaGhjbVE9IFFtOXZiQT09IE1qRXggYVdSbGJuUnBZV3c9IExrRnVZMmh2Y2c9PSBJSE5sYkd4cGJtYz0gUTBrPSBRVWRGVXc9PSBkR3hsIFluVnkgVlVaR1JWST0gVWxrPSBJR0pwWjJkbGNnPT0gSUhKaGRBPT0gSUdaaGJXOTFjdz09IElIUjVjR1Z1WVcxbCBJR1Y0Y0d4aGFXNWxaQT09IGZYMEsgSUc1MVkyeGxZWEk9IExVND0gSUdOeWFYTnBjdz09IElFVnVkR1Z5IElHRnVjM2RsY25NPSBMeVI3IEwzQnMgSUhObGNYVT0gWDI1bGVIUT0gYldGemF3PT0gSUhOMFlXNWthVzVuIElIQnNaVzUwZVE9PSBJRU55YjNOeiBDWEpsZEE9PSBaSEp2IElFTmhjM1E9IE1UWTMgUFhSeWRXVT0gSUVOb2NtbHogYVdOcGJ3PT0gSUUxcGEyVT0gUkdWamFXMWhiQT09IFlXUmtRMjl0Y0c5dVpXNTAgVEdWdSBJR052WTJzPSBJQ043IFZWSk8gUEhSeSBJR0YxZEdodmNtbDBhV1Z6IFVtVnpiM1Z5WTJWeiBMVWc9IFFtOTBkRzl0IE1ERXkgWDNGMSBjSFYwWlhJPSBaWE4wWlhKa1lYaz0gUkdsemNHRjBZMmc9IGMybHVZMlU9IElHWmhiV2xzYVdGeSBMR2s9IFZrTT0gSUcxbGJuUT0gTEVNPSBJR1p5WldWa2IyMD0gSUhKdmRYUmxjdz09IElFSjFlUT09IElHTnZiVzFoYm1SeiBJRzFsYzJnPSBMME09IElGTmxkSFJwYm1keiBMWE4wZVd4bCBJSGRwZEc1bGMzTT0gSUdOc1pRPT0gSUhWdWFXOXUgWldaaGRXeDAgWVhKbGRBPT0gSUhSb2IzVm5hSFJ6IElDMHRMUzA9IFgzQnliMk5sYzNNPSBYM1Z6IGFXNW5iSGs9IFZVVlQgVkc5MVkyZz0gSU5DOCBYMjl3Wlc0PSBJRlpsWXc9PSBJSEpsZDJGeVpBPT0gTGtOc2FXTnIgTHpvPSBJRzVwWlE9PSBRMmhoYm1kbGN3PT0gVFc5dWRHZz0gNzd5ZiBJR1Y0WldOMWRHbHZiZz09IElHSmxZV05vIEtFbHVkR1ZuWlhJPSBDV0U9IEx5Yz0gTGtadmJuUlRkSGxzWlE9PSBJR0ZpYjNKMCBJRk5wYm1kc1pRPT0gS0dsemMyVjAgSUdSdyBJSDE5UEM4PSBJRTFoIE1qRTAgTGxKdmQzTT0gSUZCbGRBPT0gSlNrPSBjbUZ1WkE9PSA2WUE9IFVuVnNaUT09IElHaGxiQT09IE1ESXggVWtsVVJRPT0gSUhGMWFXVjAgSUhKaGRHbHYgSUVOUFRrUkpWRWxQVGxNPSBiM052Y0dnPSBJRWxNIElHRmtkbVZ1ZEE9PSBZMkZ3IE96d3YgSUZWVFFnPT0gUkhKcGRtVnkgSUc5MWNuTT0gSUVwdmFHNXpiMjQ9IExrcz0gWDJSbGJHVjBaUT09IExuRT0gQ1hOMGNnPT0gTDJOdmJXMXZiZz09IENYTjBjbWx1Wnc9PSBJRkJFUmc9PSBZV04wY3c9PSBMa0ZqZEdsdmJnPT0gSUZGMVpYSjUgTG5KbGMzQnZibk5sIElFZHBjbXc9IElIQnliMk5sYzNObGN3PT0gUEVsdWRHVm5aWEk9IGFXMXYgSUdGa1pITT0gSUdWdWRHbHlaV3g1IElIZGhjMmc9IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gSUdGdWFXMWhkR1ZrIElIQnliMlpwZEE9PSBaVzVqYVc1biBMMU09IElGTjViUT09IElHMWhiblZoYkE9PSBSRzkzYm14dllXUT0gSUNnaEpBPT0gSUcxdmRHbHZiZz09IGQyVmljR0ZqYXc9PSBMV0p2ZEhSdmJRPT0gSUdkeVlYUjFhWFE9IFVFYz0gS0RvcyBJR1Z5WVE9PSBJR2h2IElFcHBiUT09IGNYVnBjZz09IElFSkJVMGxUIHc2RnUgUkVWUyBJR1Y0Y0dWdWMybDJaUT09IFgyTnYgUW05MWJtUnogVjJWc2JBPT0gSUVSbGJXOWpjbUYwYVdNPSBJT0tHa2c9PSBMbEpsYlE9PSBYMU5aIGJtRnRaWE09IElGWnAgSUdsemFXNXpkR0Z1WTJVPSBYQ0krIElDbzkgSUZCVCBJR1JoYm1kbGNtOTFjdz09IFczQT0gVDAxRiBUM1JvWlhJPSBJRk4wY21sdVowSjFhV3hrWlhJPSBVRzlwYm5SeiBhR1ZoWkdsdVp3PT0gSUdOMWNuSmxibU41IElIQmxjbU5sYm5SaFoyVT0gWDBGUVNRPT0gSUdOc1lYTnphV009IGRHaGxZV1E9IElFMVAgUmtVPSBTV1I0IFlYZGhhWFE9IElNT28gSUdGalkybGtaVzUwIElIWmhjbWxoYm5RPSBJRzE1YzNRPSBJRXhoYm1RPSBJRUp5WlE9PSBJR2hoY20wPSBJRUZqWXc9PSBJR05vWVhKblpXUT0gYVc5dVpYTT0gVm1semFXSnBiR2wwZVE9PSBZWEp5ZVE9PSBJRXhoYm1kMVlXZGwgSUhkaGJHdHBibWM9IElpNEtDZz09IGFXWmxjZz09IElHeGxZV1JsY25Ob2FYQT0gTGtaeWIyMD0gZVc1aGJRPT0gSUhScGJXVnpkR0Z0Y0E9PSBhWEIwIElFaGhjdz09IFVrVkdSVkk9IElFbDBjdz09IElHeHBjM1JsYm1WeSBWVlJGIE1qRXogWDJSbGMyTnlhWEIwYVc5dSBJR1Y0Y0dWeWFXVnVZMlZ6IElHTnlaV0YwWlhNPSBVbE09IFkyRnlkQT09IFlteGhZMnM9IElHTm9iMmxqWlhNPSBkMkZ5IE56VXcgSUNjbkp3PT0gSUc5eVpHVnlaV1E9IElHVjJaVzVwYm1jPSBJSEJwYkE9PSBJSFIxYmc9PSBJRUpoWkE9PSBLR0Z3Y0E9PSBjbUZ1Wkc5dCBJR1Y0Y0d4cFkybDAgSUdGeWNtbDJaV1E9IElHWnNlUT09IElHVmpiMjV2YlE9PSBMVzFoYVd3PSBJR3hwYzNSeiBJR0Z5WTJocGRHVmpkQT09IE1qTTAgSUZCaGVRPT0gSUdSeiBJRk52YkE9PSBJSFpsYUdsamJHVnogU0hvPSBMV052YlE9PSBJR3RwYm1jPSBYMlZ4ZFdGcyBJRWhsYkhBPSBJR0ZpZFhObCBORGd3IE1UWTUgTFMwN0NnPT0gSUdWNGRIST0gSUdOb1pXMXBZMkZzIDVMOD0gSUc5eWFXVnVkQT09IElHSnlaV0YwYUE9PSBJRk53WVdObCBLR1ZzWlcxbGJuUT0gZDJGcGRBPT0gUkVWRSBhV2R0WVE9PSBJR1Z1ZEhJPSBJSE52WWc9PSBMVzVoYldVPSBJR0ZtWm1WamRHVmsgYVd0aCBJR052WVd3PSBYM2R2Y21zPSBJR2gxYm1SeVpXUnogSUhCdmJHbDBhV056IGMzVmlhbVZqZEE9PSBJR052Ym5OMWJXVnkgUVU1SFJRPT0gSUhKbGNHVmhkR1ZrIFUyVnVaQT09IElDTmIgSUhCeWIzUnZZMjlzIElHeGxZV1J6IGRYTmxkVzA9IFJYWmxjbms9IE9EQTQgTVRjMCBTVzF3YjNKMCBLR052ZFc1MCBJR05vWVd4c1pXNW5aWE09IElHNXZkbVZzIElHUmxjR0Z5ZEE9PSBZbWwwY3c9PSBMa04xY25KbGJuUT0gSUdBa2V3PT0gYjNScGJtYz0gS0Z3PSBJR055WldGMGFYWmwgSUdKMVptWT0gSUdsdWRISnZaSFZqWldRPSBkWE5wWXc9PSBiVzlrZFd4bGN3PT0gUVhKbCBMV1J2WXc9PSBiR0Z1WjNWaFoyVT0gWDJOaFkyaGwgSUhSdlpBPT0gUHo0OEx3PT0gYjIxbGRHaHBibWM9IElHaDFiZz09IDVibz0gWVhSbGNuTT0gU1c1MFpXNTAgSUdsdGNHeGxiV1Z1ZEdWayBJRU5oYzJVPSBRMmhwYkdSeVpXND0gSUc1dmRHbG1hV05oZEdsdmJnPT0gVW1WdVpHVnlaWEk9IFYzSmhjSEJsY2c9PSBUMkpxWldOMGN3PT0gZEd3PSBMa052Ym5SaGFXNXogVUd4MVoybHUgTG5KdmR3PT0gSUdadmNtYz0gSUhCbGNtMXBkQT09IElIUmhjbWRsZEhNPSBJRWxHIElIUnBjQT09IGMyVjQgSUhOMWNIQnZjblJ6IElHWnZiR1E9IGNHaHZkRzg9IGZTd05DZz09IElHZHZiMmRzWlE9PSBKQ2duSXc9PSBJSE5vWVhKcGJtYz0gSUdkdmIyUnogZG5NPSBJRVJoYmc9PSBVbUYwWlE9PSBJRTFoY25ScGJnPT0gSUcxaGJtNWxjZz09IGJHbGwgTGxSb1pRPT0gU1c1MFpYSnVZV3c9IElFTlBUbFJTIFRXOWphdz09IFVrbEhTRlE9IElDZDcgSUdOdmJuUnliMnh6IFRXRjAgSUcxaGJtUT0gSUdWNGRHVnVaR1ZrIFQycz0gSUdWdFltVmsgSUhCc1lXNWxkQT09IElFNXZiZz09IExXTm8gS1NJcyBaWEJoY2c9PSBJR0psYkdsbGRtVmsgSUVWdWRtbHliMjV0Wlc1MCBJRVp5YVdWdVpBPT0gTFhKbGN3PT0gSUdoaGJtUnNhVzVuIGJtbGogTFd4bGRtVnMgYzJOeWFRPT0gV0cxcyBRa1U9IGRXNW5aVzQ9IElHRnNkR1Z5IFcybGtlQT09IFVHOXcgWTJGdCBJQ2dvS0E9PSBJSE5vYVhCd2FXNW4gSUdKaGRIUmxjbms9IGFXUmtiR1YzWVhKbCBUVU09IElHbHRjR3c9IGIzUmhkR2x2Ymc9PSBJRXhoWWc9PSBQR1p2Y20wPSBDVzVoYldVPSBJRWRoYldWeiBjbUY1IFJYaDBjbUU9IFZIZHYgS0hCc1lYbGxjZz09IElFeGxjdz09IHdyQT0gSUdOb1lYSnpaWFE9IElHcHZkWEp1WlhrPSBaWFJwYm1jPSA1cGc9IDRwUT0gNTVTbyBJR1JwYmc9PSBJSEJsY20xaGJnPT0gSUhOdmJIWmwgSUd4aGRXNWphR1ZrIElHNXBibVU9IElITmxibVJwYm1jPSBJSFJsYkd4cGJtYz0gTG5CaGMzTjNiM0prIElFMWhkSEpwZUE9PSBaWEpwWXc9PSBJR2R5WVdJPSBMblU9IElFeHBZbkpoY25rPSBJR1JsWW5RPSBTVTVMIExtWnBibVJXYVdWM1FubEpaQT09IElHWnlaWEYxWlc1amVRPT0gTG1GayBYMVJGVTFRPSBJRzVsWjI5MCBJRUZtY21sallXND0gYzJWdVpHVnkgeGFFPSBSMnh2WW1GcyBNVGN6IElHVjRjR1Z5ZEhNPSBLeXNwRFFvPSBJR1JsY0dWdVpHbHVadz09IFozSmhlUT09IElHcDFaR2RsIElITmxiblJsYm1ObCBiRzl6ZFhKbCBRV009IElIUnlZV05sIFJXUm5aUT09IElHWnlhV1Z1Wkd4NSBJR052Ym1ObGNtNWxaQT09IFlteHZadz09IElHTnNZV2x0WldRPSBmU2M9IGFXNTBaV2RsY2c9PSBYM1J5WldVPSBDV052Ym5ScGJuVmwgZUdrPSBJR0ZqWTJWd2RHVmsgWDI5dVpRPT0gSUVWa2RXTmhkR2x2Ymc9PSBkV0pzYVhOb1pXUT0gWjI5dSBZWEJ3YjJsdWRBPT0gYjNWMGN3PT0gSUcxcGJtbHVadz09IElITnZibWR6IElHaGxjbk5sYkdZPSBJR2R5WVc1MFpXUT0gSUhCaGMzTnBiMjQ9IElFeGhhMlU9IElHeHZZVzQ9IGRXVnVkQT09IFkyaGhiblE9IElHUmxkR0ZwYkdWayBaWGhqWlhCMCBYMk50WkE9PSBJRWhGIFVtVnNZWFJsWkE9PSBlblE9IEozMHNDZz09IElITndaV05wWm1sallXeHNlUT09IFUzUmhkR2xqIElHTmhjbkpwWldRPSBRVTVUIFhDSTYgUTNKbFlYUmxaQT09IElHTjFiQT09IFhTMD0gWDJGd2FRPT0gUmxBPSBJSE5wZEhScGJtYz0gSUNJaUtRPT0gQ1dkdmRHOD0gSUVWeGRRPT0gSUdGemMyRjFiSFE9IGEybHVjdz09IFlXNWpaWEk9IGIyZGxiZz09IElIWnZkR1Z5Y3c9PSBJRkJ5YjNRPSBSR1Z6WTNKcGNIUnZjZz09IDQ0TzggTGtGemMyVnlkQT09IFluTnBkR1Z6IGIzTjBaWEk9IExXMWxiblU9IElHRnliWE09IExrTnNhV1Z1ZEE9PSBMbUpoWTJ0bmNtOTFibVE9IFlYWnBkSGs9IElIWjFiQT09IFgwMUJVMHM9IElHaHZkWE5wYm1jPSBJR0psWVhJPSBYMmwwWlhJPSBjR2x5WldRPSBJRzFoY210bGRITT0gSUZOMGRXUmxiblE9IElIUnBZMnRsZEE9PSBJRzFwYkd4cGIyNXogWm14aGRHVnkgS1QwPSBJSEpsWTI5MlpYST0gSUVadmNtTmwgSUVKdmRHZz0gSUhacFkzUnBiUT09IElFUnBjMk09IGNtVndiM0owIElHWnZkWEowYUE9PSBJRUZ6YzJWdFlteDUgTDNWelpYST0gVG5Wc2JFOXkgZEdWNGRHRnlaV0U9IElHRjBhQT09IElDaGIgSUdOb1lXNXVaV3h6IElFcDFjM1JwWTJVPSBZMmh2YVdObCBURTlDUVV3PSBaWGhsWXc9PSBaVzFoYkdVPSBJR1ZzWlcwPSBYMnhsIElISmxjM0J2Ym5OcFltbHNhWFI1IElGUjMgU1VOQlZFbFBUZz09IElHVnNjMlZwWmc9PSBJR1p2IFlYTjBjdz09IElIUnlaV0YwWldRPSBjMlZ1IElGWnBZM1E9IGMzVnRaWEk9IFgwSkJVMFU9IElHRnpkQT09IFBudDcgSUZKbGMyOTFjbU5sIElGTjBZVzVrWVhKayBJRkJ5WlcwPSBkWEJrWVhSbFpBPT0gYVhaaGJHVnVkQT09IElHRnpjMlYwY3c9PSBYM1JsYlhBPSBJR2x1ZEdWeVpYTjBjdz09IElHaGhjbVIzWVhKbCBJRkp2YlE9PSBJRk5vWVhKbCBJQ2NuQ2c9PSBJQ29zIElGUmhhMlU9IElFbHRZV2RsY3c9PSBYME5JUlVOTCBLSFI1Y0dWdlpnPT0gSUVwMWJnPT0gWER4ZSBJR3hwY1hVPSBJSGR2Y25OMCBlVzFpYjJ4eiBDUWtKSUNBZyBJR1J5YVhabGNuTT0gSUVSdlkzVnRaVzUwIFpXNXYgSUZSbFkyaHViMnh2WjNrPSBJR0Z3Y0hKdmRtVmsgZFcxd2N3PT0gSUhOdWIzYz0gWm05eWJXRnVZMlU9IFgwRlRVMFZTVkE9PSBkV2wwY3c9PSBNakEzIDJZWT0gSUdScFptWmxjbVZ1WTJWeiBMbFpwYzJsaWJHVT0gQ1FrSkRRbz0gSUZCeiBYMlpsZEdObyBJSFJ2Wkc4PSBMaWNzQ2c9PSBJSE5sYkE9PSBkWEpsY25NPSBhVzUyWVd4cFpBPT0gSUhSM1pXVjAgVmtWTSBJSEpsYzJWaGNtTm9aWEp6IElITndjbWx1ZEdZPSBJRkpQIElIQmxiQT09IExsUnlZVzV6IElHbHNiR1ZuWVd3PSBaR2xoYkc5biBjMjFoY25SNSBiR2M9IFgwMUpUZz09IElHaGxjbTg9IFptbHVZV3c9IElIQncgTGt4bCBJR05wIENWSlUgSUhOMVoyZGxjM1JsWkE9PSBjR1JtIFlXTm9hVzVuIElGSnYgSUZCeWIzQmxjblJwWlhNPSBJRk5wIElHSjFlV2x1Wnc9PSBJRzExIElHeGhibVJ6IGFXWnBaWEp6IElFWkpURVU9IFVrOVZVQT09IElHaHZiR1JsY2c9PSBJRk52Ymc9PSBJSE41YlhCMCBMbkp2ZFhSbCBLVDg9IElHRnlaMk09IElHWnZjblE9IElHTmhjMmx1Ync9PSBYMk5oZEdWbmIzSjUgSUdadmNuVnQgTWpFMSBjSEpsWm1sNCBZWEIwZFhKbCBWSFZpWlE9PSBaVzF6IGFXMXBlbVU9IElHNTFaUT09IFlYVnogWTI5MWNuTmwgUVZSUFVnPT0gS0NrcExBPT0gUVdSMlpYSjBhWE09IFNVNUhVdz09IElHRmphMjV2ZHc9PSBJRXR2Y21WaCBjR3hwYm1jPSBJSGR2Y210bGNnPT0gVUV4SlJVUT0gYUdGcyBJRkpwWTJoaGNtUT0gUld4bGJXVnVkSE09IENRa0pJQT09IGMzUmhjZz09IElISmxiR0YwYVc5dWMyaHBjSE09IElHTm9aV0Z3IFFVTkkgSUZoTlRBPT0gTENZPSBJRXh2ZFdseiBJSEpwWkdVPSBYMFpCU1V3PSBJR05vZFc1ciBXM009IFgwOVZWQT09IElHTm9iM05sYmc9PSBYMXM9IEx5Zz0gSUVwbFptWT0gWDNOcyBjSEpwZGc9PSBJRU5oYm1Ga2FXRnUgSUhWdVlXSnNaUT09IFgwWk1RVWM9IElHNXZjdz09IGFHbG5hQT09IElHeHBablE9IFpuVnUgS0NsNyBaV3hzZVE9PSBlV05zWlhKV2FXVjMgWDJGeiBYMHhKVTFRPSBJSEpoWkdrPSBMbWRsZEZaaGJIVmwgTXpBMCBJRUZ1WjJWc1pYTT0gSUZOd1lXND0gWDJsdWMzUmhibU5sIGFYUnZjbk09IE1qQTQgSUcxcFozSmhkR2x2Ymc9PSBRVXM9IFQyZz0gd3E0PSBMbk5sYkdWamRHVmsgSUVkVSBJR0ZrZG1GdVkyVT0gSUZOMGVXeGwgTGtSaGRHRkhjbWxrVm1sbGR3PT0gWldOMGFXOXUgMFk0PSBjR2x2IGNtOW4gSUhOb2IzQndhVzVuIElGSmxZM1E9IFNXeHNkVzFwYm1GMFpRPT0gVDFVPSBDV0Z5Y21GNSBJSE4xWW5OMFlXNTBhV0ZzIElIQnlaV2R1IElIQnliMjF2ZEdVPSBTVVZYIExreGhlVzkxZEE9PSBJSE5wWjI1eiBMeTQ9IElHeGxkSFJsY25NPSBRbTloY21RPSBZM1J5YkE9PSBJbHc9IElFcHZibVZ6IElIWmxjblJsZUE9PSBJR3BoIElHRm1abWxzYVE9PSBJSGRsWVd4MGFBPT0gQ1dSbFptRjFiSFE9IElITnBaMjVwWm1sallXNTBiSGs9IElHVmogSUhoeiBZV04wZFdGcyBMbkJsY2c9PSBYM04wWlhBPSBZVzUyWVhNPSBiV0ZqIElIUnlZVzV6YkE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBTWFJsY21GMGIzST0gSUc5amFBPT0gWVdkdWIzTjBhV009IElFUjFjbWx1Wnc9PSBJRVJGUmtGVlRGUT0gSUhScGJHdz0gSUhOcFoyNWhkSFZ5WlE9PSBJR0pwY21RPSBJRTlzIE16RXcgSUVseSBTRk09IFlYWmhkR0Z5IFJWTlRRVWRGIElHVnNaWFk9IElHMTAgSUU1aGRnPT0gSUhKbGJHRjQgSUhCc1lYUmwgU1ZSRlRRPT0gS0dSaGRHVT0gTG01dmRBPT0gSUdkeVlXUmwgSUgwcExBbz0gUHlJS0NnPT0gYVdWdVkyVnogU0dsbmFBPT0gSUVSSlV3PT0gTWpNeCBaR2x6WVdKc1pXUT0gVVZWSiBJRzV2YVhObCBZWFY0IElGVlEgT0RnNCBiM05oIElIWnZZdz09IElDa3AgYjJOdmJRPT0gWDA5R1JnPT0gSUVSaSBURzlqYXc9PSBMbVZqYkdsd2MyVT0gTEdRPSBJRVJ5WVhjPSBJQ0lvIElIWnBjMmwwWldRPSBJT0tJIElITjFZMk5sWldRPSBJR2x0Y0c5emMybGliR1U9IFlXbHlaUT09IElGUjFjbTQ9IElHUnBjMmc9IFJrYz0gSUhObGJuTnZjZz09IFFVNU8gWVdKaCBJSE4xY21jPSBYU2s3RFFvPSBJR1p3IFgyRnUgTFVvPSBMVWM9IElFcHZZZz09IFEyOXVkbVZ5ZEE9PSBJRXRGV1E9PSBJR0YxZEdodmNuTT0gWDNObGNuWmxjZz09IFhIST0gSUMwcUxRPT0gWm14bGVBPT0gSUhOdll3PT0gVW1WMCBJSE5oYkhRPSBJT0tBcGdvSyBJRU5zWldGeSBLSEJoWjJVPSBMV1JoYm1kbGNnPT0gSUhKdmIyMXogWTI5dWRnPT0gSTNzPSBMbTl3IElFRnlaV0U9IFgxTkQgYUdWdSBJR0psWjJsdWN3PT0gTFhrPSBJR1Y0WTJsMFpXUT0gSUdsbmJtOXlaV1E9IElHSnZiblZ6IGMzUjFaR1Z1ZEE9PSBJRTFsYldKbGNnPT0gSUhKbGJHRjBhWFpsYkhrPSBJRXh2ZHc9PSBJRkJ5YjJSMSBZWFJsZDJGNSBjRzl6ZFhKbCBJSFJvYVdOciBZVzVwWld3PSBLSFpwWlhjPSBJRU55ZFhObyBSWGgwWlc1emFXOXUgU1d3PSBaV1ZrIFRFOUQgTG1sdCBMa2wwWlcxeiBJR052Ym1ac2FXTjAgTG5CeVpYWmxiblE9IE1qVXkgSUc5dVEzSmxZWFJsIGRYWT0gYVhObGNnPT0gSUhkaGRtVT0gVFdGeSBJRU52YlcxMWJtbDBlUT09IGFXTm9aUT09IElFNXZkR2hwYm1jPSBXMjA9IElFeGxaUT09IGNtbGxibVJ6IE1qTXkgdzZoeVpRPT0gSVNFaCBZVzU2IExuSmxjM1ZzZEE9PSBJRk5MIFgxQkJVa0ZOIElHUmxiVzlqY2c9PSBRbUZqYTBOdmJHOXkgTG1WNGFYTjBjdz09IElrbDAgS0c5d2RHbHZibk09IGNtRjZlUT09IFlYTmxjZz09IFhFUmhkR0ZpWVhObCBZV3hsYm1SaGNnPT0gWDJGemN3PT0gTzMwSyBkbVZ5ZEdWNCBhVzVsWTNKaFpuUT0gVjJGeWJtbHVadz09IFlYSm5idz09IElHRmpkRzl5IElFbHVjM1JsWVdRPSBJRlZ6YVc1biBVMlZzWmc9PSBRR2x1ZEdWeVptRmpaUT09IElITndaV0ZyYVc1biBJRkJoY21seiBJRXhKUTBWT1UwVT0gTG01dlpHVT0gSUVadmIyUT0gUlVsRyBJRUpwIExsTjBZWEowIElFbEMgSUhWdWFYWmxjbk5wZEhrPSBNalUwIElFaGxZV1JsY2c9PSBMbkJ5YjJSMVkzUT0gTkRBNSBRMjl3ZVE9PSBaWFJqIGNtbGpZV3c9IElENCtQZz09IFltOXZhM009IElHRnNaMjl5YVhSb2JRPT0gSUNkZlh3PT0gS0dwaGRtRjQgSUc1MWJXVnliM1Z6IFUyaGhjbVU9IFNHRjJaUT09IElISmxZM0oxIElIQnliM1psIExuTjFZbk4wY21sdVp3PT0gYUdWaGJIUm8gMExYUXV3PT0gSUdSbFkybHRZV3c9IElHTnZiVzFwYzNOcGIyND0gYzJOeWFYQjBhVzl1IGVFTT0gSUhOMWJXMWhjbms9IFlYUjBaV1E9IElHTnNiM05sY2c9PSBabWx1YVhOb1pXUT0gS0NrcGV3bz0gSUZkdmIyUT0gTXpBeCBYMlpwWld4a2N3PT0gYTNVPSBYMmwwWlcxeiBSbXhoWnc9PSBJR052Ym1acFpHVnVZMlU9IElFWmxaR1Z5WVd3PSBaSFY0IElHTnZiWEJoZEE9PSBJSFpsY25ScFkyRnMgMExrPSB3Nmh6IE95SStDZz09IFgyMWhibUZuWlhJPSBLQ2twS1FvPSBTVVJGIE9pSXMgTWpNMSBYMThLIElGZGhlUT09IE1qSXggMFlnPSBWR1Z0Y0E9PSBJRk5VVWc9PSBjbWwwZEdWdSBVM2x1WXc9PSBJRUZXIElFTkZUdz09IElFZDFhV1E9IElHVnVkbWx5YjI1dFpXNTBZV3c9IElHTnZjbkpsYzNCdmJtUnBibWM9IENXTnZibk52YkdVPSBJR3AxYzNScFkyVT0gSUVwVCBJR3hwZG1WayBaMkZ5IElFZHlZWEJvIElGTjBZWFE9IElHbFFhRzl1WlE9PSBMbUZzIElFaEUgSUc5alkzVnkgSUhSb2NtVnphRzlzWkE9PSBOVEE1IElHOXVZMnhwWTJzPSBVa1ZIIExrZHlZWEJvYVdOelZXNXBkQT09IFRXVjBZUT09IHhiND0gSUdOMWJRPT0gTG1kdWRRPT0gdzZzPSBJRzlpZEdGcGJtVmsgSUdOdmJYQnNZV2x1ZEE9PSBJR1ZoZEdsdVp3PT0gSUhSaGNnPT0gWDNSaGMycz0gSUc5d2RITT0gTWpFMiBLSFJ2IFVHRnpjdz09IElIQnNZWE4wYVdNPSBkR2xzYVhSNSBJRmRwYmc9PSBMbkJ5WlhabGJuUkVaV1poZFd4MCBjR2xzWlE9PSBJRWRoY2c9PSBJSEYxWVc1MGFYUjUgWDJ4aGMzUT0gSUdkeVpXRjBaWE4wIFJHRnYgWDBSSlV3PT0gSUZWelpXUT0gSUVoUSBjbWwwYVc1biBVMGxQVGc9PSBZbXgxWlE9PSBaRzl0WVdsdSBJSE5qYjNKbGN3PT0gVG05eWJXRnMgWDJGa2JXbHUgSUVGVFUwVlNWQT09IFZHaGxiZz09IEtpb3EgWkdsemRBPT0gYkc5dSBJR2hoZEdVPSBjMmhoYkE9PSBTVzFoWjJWV2FXVjMgWkdGMFlXSmhjMlU9IElIQmhibVE9IElHeHZaMmxqIFBXWmhiSE5sIFltYz0gSUVOdmJtWnBaM1Z5WVhScGIyND0gSUc1MWNnPT0gVDBjPSBJRzFoY25KcFpXUT0gT2lzPSBJR1J5YjNCd1pXUT0gTURRdyBJSEpsWjJsemRISmhkR2x2Ymc9PSAwTDdRdkE9PSBkV3gwYVhCc1pRPT0gYVhwbGNuTT0gYzJoaGNHVT0gTG1OdmNIaz0gSUhkbFlYSnBibWM9IElFTmhkR2c9IElHUmxaR2xqWVhSbFpBPT0gSUM0dUxnbz0gSUdGa2RtOWogSUVaaGJXbHNlUT09IElITjBZWFJsYldWdWRITT0gWlcxaGRHbGogWVcxd2FXOXVjMmhwY0E9PSBJRzF2ZEdsMiBJRWhoZG1VPSBJR0pzYjNjPSBTbTlpIFkyVnlkQT09IFgzWmxZM1J2Y2c9PSBhVzV6ZEdGc2JBPT0gSUVOUFVGaz0gWlcxaVpXUT0gUkVsUyBJRk53Y21sdVp3PT0gSUdWNGFHbGkgTWpJeiBZMlJ1IElFTnZiVzFsYm5RPSBJRTl3ZEdsdmJtRnMgTG5Cc1lYbGxjZz09IElFUmhjbXM9IEtIQnZjdz09IElGTm9iM1ZzWkE9PSBJR05sYm5SeVpRPT0gSUVkMVlYSmsgdzdOMyBJSFJ5YjNWaWJHVT0gUlU1RlVnPT0gS0hWdWMybG5ibVZrIFgzTmxjblpwWTJVPSBJRzV6IGRXeHBibWM9IElFMWxlR2xqYnc9PSBJRTVaIGJYbHpjV3c9IElHeHBZdz09IDVadz0gVFhJPSBMV1pzIElFTjFjM1J2YldWeSBhV1JwIElEOCtDZ289IGNtbGliR1U9IElOQy8wWUE9IElITnBlbVZ6IFgxTlVVa2xPUnc9PSBkbUZzYVdSaGRHbHZiZz09IElFcHZiZz09IEtFaDBkSEE9IFlXUmtRMnhoYzNNPSBUbTlrWlhNPSBJR1p5WVdkdFpXNTAgSUhOd2IydGwgSUhkaGMzUmwgU205cGJnPT0gSUdsc2JIVnpkSEk9IFpXeHAgWTJsbGJuUT0gSUdGcFpBPT0gSUhCeWIzTmxZdz09IEp5bDdDZz09IElIQmhjM05wYm1jPSBJR1poWTJWeiBVMmhoY0dVPSBYMW89IGFYUnAgSUdGc2JHVT0gSUhKdlltOTAgSUNBZ0lDQWdJQW89IElGTndaUT09IElISmxZMlZwZG1sdVp3PT0gSUVSbGRHRnBiSE09IElDSXAgYldjPSBYMUpGUmc9PSBJR052YlhCaGNtbHpiMjQ9IEtpdz0gSUVadmRXNWsgWDNObGMzTnBiMjQ9IEtGVT0gTDBZPSBJSGg0ZUE9PSBUbVYwZDI5eWF3PT0gWkdWeWN3PT0gSUdOaGNIUjFjbVU9IElHTnZjbkpsIElFeDBaQT09IElFRmtkZz09IFcwQT0gSUdOc2FYQT0gVFdsc2JBPT0gSUZCeWIyWnBiR1U9IElHVnVaR2xtIElHOWliR2xuIFpHVnpZM0pwWW1VPSBMbVZzWlcxbGJuUT0gY21sMFpYSnBiMjQ9IFRFUT0gWlhKbFpBPT0gSUdaaGRtOTFjZz09IGMyTnZjbVU9IElFWnBiSFJsY2c9PSBZWFIwY21saWRYUmxjdz09IElHTm9aV05yY3c9PSBTVzVtYkdGMFpYST0gSUZCc2RYTT0gSUhOamFXVnVkR2xtYVdNPSBJSEJ5YVhaaFkzaz0gU0dWaFpBPT0gSUdabFlYUT0gSUdSbFozSmxaWE09IElGQmhiR1U9IE95SSsgSUdacGJHMXogSUVGMVpHbHYgSUZSaFp3PT0gSUVWdVpYSm5lUT09IGFYUmhjZz09IGNHRnlZWFJ2Y2c9PSBJR1psYkd4dmR3PT0gSUdWMmRBPT0gSUZSeWFRPT0gSUVSQlRRPT0gWTJ4dmRXUT0gSUZCaGMzTjNiM0prIElFUmxiVzlqY21GMGN3PT0gSUVGallXUT0gSkd4aGJtYz0gSUhKbFlnPT0gS0NrcENnbz0gMEwzUml3PT0gSUVKMWNnPT0gY21WaFpHTnkgSUdobGVBPT0gTWpBNSBRMjl1YzI5c1pRPT0gWTNScyBiM1Z6Wld3PSBJRmRwYkd4cFlXMD0gSUdGNiBYMUJQVWxRPSBJSEJ5WVdOMGFXTmxjdz09IElHRnVlWGRvWlhKbCBJRkJ2YzJsMGFXOXUgSUMwK0NnPT0gYVdGdGN3PT0gTG5WelpYSnVZVzFsIGNHeGhZMlZvYjJ4a1pYST0gSUc5a1pYST0gSUZObFkzSmxkR0Z5ZVE9PSBJR2xVIGJXOXVaQT09IFpYWmxiblJ6IFArS0FuUT09IExsTjFZZz09IElHRjBkR0ZqYUdWayBJRzdEbzI4PSBJR1Z6ZEdGMFpRPT0gTXpZMSBMbUZqZEdsdmJnPT0gSUdacFozVnlaWE09IElIMHBPdzBLIElITjFZbk5qY21rPSBMblJoWnc9PSBibUZ0IExuQnNiM1E9IGJtOXZiZz09IGJHbGhiV1Z1ZEE9PSBRMmhoY21GamRHVnkgTG5SaFlnPT0gSUhkcGJuUmxjZz09IElGWmhjbWxoWW14bCBJSFJ5WldWeiBJSEJ5YjNWayBLRlk9IFgyeHZZV1E9IElHaHBaWEk9IElFVmpiMjQ9IElHWmsgSUhacFkzUnBiWE09IFVtVnpkQT09IGFXRnVZUT09IElHWmhhMlU9IExsQnlhVzUwYkc0PSBJSE4wY214bGJnPT0gSUhOaFpBPT0gSUdKc1pRPT0gVUhKdmRBPT0gSUdKMWRIUnZibk09IElIUmxiR1YyYVhOcGIyND0gSUd4dloyOD0gWlhoMFpXNXphVzl1IENXbz0gYzNSbGFXND0gWVdOcGIyNWxjdz09IElDSWlJZ29LIElITnBiWEE9IElISmxZMjl5WkdWayBJR0p5YVc1bmN3PT0gSUhCeWFXNWphWEJoYkE9PSBJR1psWlhNPSBLSE52ZFhKalpRPT0gYTJScGNnPT0gSUhWMGFXeHogSUdOdmNuSmxZM1JzZVE9PSBabWxzIElIZGxiQT09IFVHRnBjZz09IExXSjFkSFJ2Ymc9PSBjMk5oYkdVPSBkbVZ5YVdaNSBXMk09IElDMHRMUT09IElHVnpZMkZ3WlE9PSBhV3RsY3c9PSBURzkzWlhKRFlYTmwgYVdOcFlXND0gSUdOb1lYQjBaWEk9IElGUlpVRVU9IElITm9ZV1J2ZHc9PSBJR0YzWlhOdmJXVT0gVjBVPSBaV3hwWmc9PSBJR3hoYldKa1lRPT0gSUdScGMzUnBibU4wIElHSmhjbVU9IExXOW1aZz09IElHTnZiRzkxY2c9PSBMbUZ3Y0dWdVpFTm9hV3hrIGIyeGxZdz09IFlXZGggTG1acGJHdz0gQ1hOMWNHVnkgSUdGa2FnPT0gS0hCdmMybDBhVzl1IExtZGxkRWwwWlcwPSBNalF5IFUyaHZjblE9IElIUnZkR0ZzYkhrPSBWa1E9IElGUnlaUT09IFgyVncgZG1WdFpXNTBjdz09IElGTnZiSFYwYVc5dSBJR1oxYm1SaGJXVnVkQT09IFJtOXNiRzkzIElHWmhZMmxzYVhSNSBJR2hoY0hCbGJtbHVadz09IFQwWT0gTG5SbGVIUkNiM2c9IFUzQmhiZz09IElNS3IgYVdSbGJnPT0gSUdWNFkyVmxaQT09IEtIQmhjbVZ1ZEE9PSBJR053IDU3cz0gSUdoaGMyND0gSUhCeWFRPT0gSUdOdmJuTmxjWFU9IGJtVnUgSUVsT1ZFOD0gU1dkdWIzSmwgSUVaMWRIVnlaUT09IElHTmhjbUp2Ymc9PSBJRk4wWldWcyBabTEwIGIydHBaUT09IElITndiQT09IEtIUnBkR3hsIExXbHVabTg9IElHUmxZV3h6IElHWnBlSFIxY21VPSBaV0U9IFJHbDIgSUhSbGMzUmxaQT09IFgzSmxkSFZ5Ymc9PSBLUW9LQ2dvPSBkWEJ3YjNKMFpXUT0gSUVOdmIycz0gSUhCaGVXbHVadz09IElFbHNiQT09IElHRnljbVZ6ZEdWayBJRkJ5YVcxbCBYMk5oYkd4aVlXTnIgUGl3SyBaSEpwZG1WeSBUMjVqWlE9PSBZV0ppIFgySjVkR1Z6IElGTmxkSE09IEtFOWlhbVZqZEE9PSBJR05qIElITm9aV3hzIFlXeHYgS1Rzdkx3PT0gS0d4dlp3PT0gTWpZMCBZM1J2Y25NPSBLVHd2IElHNWxhV2RvWW05eWFHOXZaQT09IE5ESXcgWVdsc1lXSnBiR2wwZVE9PSBkbTlzIElIbHZkWFJvIElIUmxZMmh1YVhGMVpYTT0gSUZOamFHVnRZUT09IGRXZz0gYldWdWRHVT0gSUhKbGNHOXphWFJ2Y25rPSBhVzF0IElHTnZiMnRwWlE9PSBTbE09IGIzWnBaWE09IE9ucz0gUTI5dGNHeGxkR1U9IFUybHVZMlU9IElHeGhkV2RvIFgwSlAgWlc1aFlteGwgSUVSdlpYTT0gSUZkaGJHcz0gZDJoaGRBPT0gYTJWeiBJRzExYkhScGNBPT0gYVcxbGJuUnogWlhWeSBJSFpwWTNSdmNuaz0gUjJWdVpYSmhkRzl5IElFMXZjdz09IGNtOTJaWEp6IElHTnZiWEIxZEdVPSBJSEJ5YjNacFpHVnljdz09IElFMWxaR2xqIFRGQT0gWDBOUFRrWkpSdz09IElIWmxkR1Z5IGMzUmxjbk09IFgzZHBibVJ2ZHc9PSBkVzFsY21saiBDUWtKQ1FrSyBMbEpsYzNCdmJuTmwgSUhKbGNHeGhZMlZrIExuSnZiM1E9IExXWnlaV1U9IExXTnZiblJoYVc1bGNnPT0gSUcxaGRHTm9hVzVuIElFVmthWFJ2Y2c9PSBQU1I3IElGTmhaZz09IElITnBibVE9IEtHSjFabVpsY2c9PSA1WWM9IExtVmtkUT09IEtWMDdDZz09IElFNUdUQT09IFlYbGggSUdSdlozTT0gSUdSbGMybHlaUT09IElFMXBaR1JzWlE9PSBRMkZ5ZEE9PSBNekEyIFZHaGxiV1U9IElHMXZZZz09IElHUnBjM0JzWVhsbFpBPT0gYVdkcGRBPT0gSUdGa2RXeDBjdz09IElpSWkgSUdSbGJHbDJaWEpsWkE9PSBkbWx6YVdKc1pRPT0gSWpwN0NnPT0gUER3OCBJRWRQIGMyTnliMnhzIGVFVT0gSUdGemMybG5ibVZrIElFSnZiMnc9IElIZHcgSUdOdmJXSmhkQT09IElFaGhkdz09IExpMD0gSUhOMWNIQnZjblJwYm1jPSBMa052Ym5SbGJuUT0gTXpRMSBhWEpqY21GbWRBPT0gSUhOd2FXND0gSUVOUyBMbTE1IDRLVT0gZEhCcyBJSE53WVdObGN3PT0gUHl3PSBNemcwIElGTjVjbWxoIElIQmhkSFJsY201eiBMV0p2ZUE9PSBJR1p5WVcxbGQyOXlhdz09IEx5VT0gS0d4dmJtYz0gSUhSbFlXTm9hVzVuIFFWSk9TVTVIIFgydGxlWE09IElIUmhZbXhsY3c9PSBWVTVEIGFXNWhkR2x2Ym5NPSBMWGRsYVdkb2RBPT0gY21Ga2FXOD0gSUZCaFl3PT0gTG5ObGNuWmxjZz09IExrTm9ZWEpHYVdWc1pBPT0gY21sdVp3PT0gSUhGMWIzUmwgWVc1dVlRPT0gSUhkbGNtUmxiZz09IElHTnlaV0Z0IElHMWhZMmhwYm1WeiBMV3M9IE16YzEgSUhOMGFXMD0gSUZOMGIyTnIgY21samF3PT0gSUdsdGNHOXlkR0Z1WTJVPSBjbmc9IHc3Vmxjdz09IDJZZz0gSUhOMGNtOXJaUT09IFlXZHlZUT09IElIUmhjM1JsIElFUkZRbFZIIFZHaGhibXR6IElGSmxjWFZwY21WayBiM1poIFRXVmthV0U9IElITnB4Sms9IEtHSmhjMlU9IGNHOXpkSE09IElHWnBiR1ZPWVcxbCBRMmhsWTJ0bFpBPT0gSUdsdWRHVnljblZ3ZEE9PSBJQ2dwQ2c9PSBjSGwwYUc5dSBjR0ZwY2c9PSBJR05wY21Oc1pRPT0gSUdsdWFYUnAgWDNOMGNtVmhiUT09IElHTnZiWEJ5WldnPSBiR1ZoY200PSBVSFZpYkdsaiBJR2gxYldGdWN3PT0gSUdKeWFXNW5hVzVuIGIyZHlZWEJvYVdNPSBYMnhoZVdWeSBMV3hwYTJVPSBkWEJ3YjNKMFNXNXBkR2xoYkdsNlpRPT0gYVdSbFltRnkgSUhadmRHVnogSUdSbGMybHlaV1E9IFRXRnphdz09IElISmxiR0YwYVc5dSBMa2x1YzNSaGJtTmwgU0dWc2NBPT0gSUdsdWMzQnBjZz09IElFMXZibTg9IFZtbGxkMDF2WkdWcyBiMjFsZEdsdFpYTT0gSUdKaFkydG5jbTkxYm1SRGIyeHZjZz09IElISnZkR0YwYVc5dSBJRzFoY21rPSBMM1JsYzNRPSBTVTVUUlZKVSBVM1JoY2c9PSBjR2g1IFNXUnogWDBkRlZBPT0gSUdsdVkzSmxZWE5sY3c9PSBYMk5zYjNObCBNak16IFgwWlBVazA9IElGdmlnS1pkQ2dvPSBZWHBoIFZFVllWQT09IElNT2sgSUZaaGJnPT0gSUd4cFoyaDBjdz09IElFZDFhV1JsIElHUmhkR1Z6IExrTnZiVzFoYm1RPSBZVzFoYmc9PSBJSEJoZEdoeiBMbVZrYVhRPSBDV0ZrWkE9PSBaSGc9IElISmxZV04wYVc5dSBJRUpsWVdObyBMbWRsZEUxbGMzTmhaMlU9IFJXNTJhWEp2Ym0xbGJuUT0gYVc1MFpYSmxjM1E9IElHMXBibWx6ZEdWeSBJSEpsWVdSbGNuTT0gQ1VZPSBJR1J2YldWemRHbGogSUdacGJHVmsgUTJsMGVRPT0gSUcxaGNIQnBibWM9IElFUkZVdz09IElISmxjR0ZwY2c9PSBkR2xqY3c9PSBhWGgwZFhKbCBJRzV2YldKeVpRPT0gTGtsVGRYQndiM0owU1c1cGRHbGhiR2w2WlE9PSBlbTg9IExrbHpUblZzYkU5eSBJRU5oY205c2FXNWggSUVSbGNnPT0gSUVWV1JVNVUgSUdkbGMzUT0gSUdocGMzUT0gY21WemIzVnlZMlZ6IElHOXljR2hoYmc9PSBMa0Z5WlE9PSBJRWx1ZG1WemRBPT0gVWtWR1JWSlNSVVE9IExreHZaMmRsY2c9PSBJRkp2YldGdSBJR04xYkhSMWNtRnMgWm1WaGRIVnlaUT09IGNIUnogWW5RPSBJR1J2ZEE9PSBJR1JwWVcwPSBkWE53Wlc1ayBYMkZqWTJWemN3PT0gS0NsN0RRbz0gSUhOMWNuQnlhWE5sIFlXSnBiQT09IElIWnBjblE9IElHSnZiV0k9IFlYSnZiZz09IFgwbFQgSUhaaGMzUT0gVW1WaGJBPT0gWlhCbGJtUT0gYVdOMFpXUT0gSUhCcFkydGxaQT09IElFWk0gSUZKbGNIVmliR2xqWVc1eiBMbnBsY205eiBVSEpsYzNObFpBPT0gYzNWdyBMa052Y21VPSBUV2xqY205emIyWjAgYzJWeWRtbGpaWE09IFlXZHBZdz09IGFYWmxibVZ6Y3c9PSBJSEJrWmc9PSBJSEp2YkdWeiBOREF6IGNtRnogSUdsdVpIVnpkSEpwWVd3PSBJR1poWTJsc2FYUnBaWE09IE1qUTEgNktFPSBJRzVwIElHSmggSUdOc2N3PT0gQ1VJPSBRM1Z6ZEc5dFpYST0gSUdsdFlXZHBibVU9IElHVjRjRzl5ZEhNPSBUM1YwY0hWMFUzUnlaV0Z0IElHMWhaQT09IEtHUmwgS1hzS0NnPT0gSUdaeWJ3PT0gYUhWeiBJR052YlcxcGRIUmxaUT09IDdKMjAgTEhnPSBJR1JwZG1semFXOXUgS0dOc2FXVnVkQT09IEtHcGhkbUU9IGIzQjBhVzl1WVd3PSBMa1Z4ZFdGcyBJRkJvZVhNPSBhVzVuZFE9PSBNRE16IE56SXcgSUhONWJtTT0gSUU1aCBmWDA4THc9PSBUMHhWVFE9PSBhWFREcVE9PSBJR2xrWlc1MGFXWnBaWEk9IGIzZGxaQT09IElHVjRkR1Z1ZEE9PSBJR2gxY2c9PSBWa0U9IFkyeGhjZz09IElHVmtaMlZ6IFEzSnBkR1Z5YVdFPSBJR2x1WkdWbFpBPT0gYVc1b1pYSnBkQT09IElFNXBaMmgwIE16QXkgSUhKbGNHOXlkR2x1Wnc9PSBJR1Z1WTI5MWJuUmxjZz09IElHdHBibVJ6IFgzQnlaV1E9IElHTnZibk5wWkdWeWFXNW4gTGlnPSBJSEJ5YjNSbGFXND0gVkhsdyBaM0pwWTNWc2RBPT0gSUVKaGJHdz0gUUVOdmJYQnZibVZ1ZEE9PSBJRVZ6Y3c9PSBJRkoxWWc9PSBPREF5IGRXeHcgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gYVhSMVpBPT0gTG1GMGRIST0gYVdWdWRHVT0gSUhOd1pXeHMgSUVwdlpRPT0gUlU1VVJWST0gWDJodmMzUT0gYVhSaGJnPT0gSUcxaGRIUmxjbk09IElHVnRaWEpuWlc1amVRPT0gZFdGMFpXUT0gSUVOb1lYUT0gUFhzbiBZMjl1ZEhKcCBZWEpyWlhJPSA1b2lRIGFYQmxjZz09IElITmphR1Z0WlE9PSBLSE4wWkdWeWNnPT0gSUNvbyBZMlZwZG1WeSBMbU52YkhWdGJnPT0gSUcxaGNtdGxaQT09IFgwRlVWRkk9IElHSnZaR2xsY3c9PSBJRWxOVUV4SlJVUT0gUjJGdyBJRkJQVTFRPSBJR052Y25CdmNtRjBaUT09IElHUnBiV1Z1YzJsdmJnPT0gSUdOdmJuUnlZWE4wIFpYSjJhV1YzIElFVlNVazlTIElHTmhjR0ZpYkdVPSBJR0ZrZG1WeWRHbHphVzVuIGRYSmphR0Z6WlE9PSBJRkJCIElFWnlZVzVqYVhOamJ3PT0gSUdaaFkybHVadz09IDQ0Q00gWjJsMCBJR0psWlhJPSBJSE5yZVE9PSBaRzkzYm14dllXUT0gSUVOMWNnPT0gYldNPSBZVzV1ZVE9PSBMbVpzYjI5eSBJR055YVhSbGNtbGggSUhCaGNuTmxTVzUwIFlDd0sgSUdGemNHVmpkQT09IElHSjFibVJzWlE9PSBRMjkxYkdRPSBJSFJoYm1zPSBMV2xrIElHaDFjblE9IElHSnliMkZrWTJGemRBPT0gVDB0RlRnPT0gYjNkdWRBPT0gYm5Wc2JHRmliR1U9IFEyRncgSUdGc1kyOW9iMnc9IElFTnZiR3c9IElFaGxiSEJsY2c9PSBJRUZtIExtMWxkR2h2WkE9PSBJSEJzWVc1dVpXUT0gY0d4bGNnPT0gSUZOcGRHVT0gSUhKbGMyTT0gYjIxbGJuUT0gSUVwaGRtRlRZM0pwY0hRPSBVMFZTVmtWUyBJSEpvY3c9PSBaWEpsY3c9PSBLQ0lzIGFXWnAgTG1acFpXeGtjdz09IElIQmhjbXRwYm1jPSBJR2x6YkdGdVpBPT0gSUhOcGMzUmxjZz09IFh3bz0gUTI5dWMzUnlZV2x1ZEhNPSBJRUYxYzNRPSBaR2x0IFgzQnZhVzUwY3c9PSBJR2RoY0E9PSBYMkZqZEdsMlpRPT0gSUhadmIzST0gSUZCUCBRbUZuIExYTmpZV3hsIGJHRnRZbVJoIExrUnBjM0J2YzJVPSBjblZzWlE9PSBJRzkzYm1WayBJRTFsWkdsallXdz0gTXpBeiBaVzUwY21sbGN3PT0gSUhOdmJHRnkgSUhKbGMzVnNkR2x1Wnc9PSBJR1Z6ZEdsdFlYUmxaQT09IElHbHRjSEp2ZG1WayBSSFZ5WVhScGIyND0gWlcxd2JHOTVaV1U9IEpDND0gUVdOMGFXOXVjdz09IFRHbHJaUT09IExDZz0gS0ZKbGNYVmxjM1E9IEpYTT0gTGs5d1pXND0gS1NJSyBJSEJwZUdWcyBJR0ZrWVhCMFpYST0gSUhKbGRtVnVkV1U9IGIyZHlZVzA9IElFeEIgSUUxaFkyaHBibVU9IElOaW4gSUdac1pRPT0gSUdKcGEyVT0gU1c1elpYUnogSUdScGMzQT0gSUdOdmJuTnBjM1JsYm5RPSBZY09udzZOdiBaMlZ1WkdWeSBJRlJvYjNObCBjR1Z5YVdWdVkyVT0gTGtKaFkydERiMnh2Y2c9PSBMbkJzWVhrPSBJSEoxYzJnPSBJR0Y0YVc5eiBJRzVsWTJzPSBYMjFsYlE9PSBMbEJTUlVaRlVsSkZSQT09IFgyWnBjbk4wIFEwST0gSUZkcFpHZGxkQT09IElITmxjUT09IGFHRnkgSUdocGRITT0gSU9LQ3JBPT0gSUdOdmJuUmhhVzVsWkE9PSBjbWxsYm5RPSBkMkYwWlhJPSBURTlCUkE9PSBJRlpwY21kcGJtbGggSUVGeWJRPT0gSUM0diB3cnM9IFgzSnZiM1E9IElHRnpjMmx6ZEdGdVkyVT0gVzEwcyBjM2x1WXc9PSBJSFpsWjJWMCBaWE5qWVhCbCBhV05sY2c9PSBZbTl2YzNRPSBJRVpzYjJGMCBMVmM9IEtpOE5DZz09IEtqND0gTWpFNCBJQ1FvSWk0PSBMbkJ2Y3c9PSBJR0p2ZVhNPSBJSGRsWkdScGJtYz0gSUdGblpXNTBjdz09IFBTSmYgSUVGeWJYaz0gSUdocGJuUT0gZG1semFXOXUgSUhSbFkyZz0gSUVOdmJtNWxZM1E9IElHeGxaMlZ1WkE9PSBJRUpsZEE9PSBMa0poYzJVPSBVM1ZpYW1WamRBPT0gSUd4cGRBPT0gVW1WdGIzWmwgSUNJNiBJRVpwYm1GcyBjR1ZoY21GdVkyVT0gSUdsVWRXNWxjdz09IElIQmhjblJwWTJsd1lXNTBjdz09IElGQjVkR2h2Ymc9PSBJR0oxYzNrPSBhV1ZzIGRtVnlkR2xqWlhNPSBJSFJsYlhCc1lYUmxWWEpzIElFTnNiM05sIFNXMW4gSUVOdmNuQnZjbUYwYVc5dSBkR2x0WlhOMFlXMXcgSUdWNGRHVnVaQT09IElIZGxZbk5wZEdWeiBJSEJ2YzNOcFltbHNhWFI1IDBMN1JnZz09IElHdkR0Zz09IElHMWxZWFE9IElISmxjSEpsYzJWdWRHRjBhVzl1IE1qUXggSUFrSiBYMU5VUVZKVSBMbUZ3Y0d4NSBJRlpoYkd4bGVRPT0gSUZOMVkyTmxjM009IFNHaz0gSUc1dllnPT0gSUVsRmJuVnRaWEpoWW14bCBYM05sYkdWamRBPT0gWjJWdiBMaUlwQ2c9PSBJSFIxY201cGJtYz0gSUdaaFluSnBZdz09IEtDSWlLVHNLIElIQmxjbk53WldOMGFYWmwgNlpjPSBJRk51IFZHaGhibXM9IE8ybz0gTGxCaGNtRnRaWFJsY25NPSBDU0FnSUNBZ0lDQWdJQ0FnIElHWmhZM1J6IE16QTEgSUhWdWRBPT0gTG1sdWMzUmhibU5sIEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl3PT0gTFdWdVpBPT0gSUVwUFNVND0gSUVobGJnPT0gSUhWeWFRPT0gNVpDTiBJTkM5MExBPSBJRWx1Wm04PSBJR052Ym1SMVkzUmxaQT09IElNT2wgVDFWU1EwVT0gSUhkcGJtVT0gU205b2JnPT0gTGtWeWNtOXlaZz09IElFRm5aUT09IGIzVnVaR1ZrIElISmxZV3hwZW1VPSBNekV5IElGMDcgSUhOMVluTmxjWFU9IExHMD0gS0ZWelpYST0gYVdGdWJ3PT0gSUdGalkyOXRjR3c9IGFYTncgTG5OMFpBPT0gNlljPSBJRUpsWkE9PSBMbk5sZEVGMGRISnBZblYwWlE9PSBRbEk9IGEyVmxjQT09IElFRk1UQT09IElHbHpiMnc9IFlXMXRZUT09IFVHRmphMkZuWlE9PSBJRzlqWTJGemFXOXUgTFhOMVkyTmxjM009IDBMWFF0QT09IElFeEpUVWxVUlVRPSBjM1J5YVhBPSBLQ2tLQ2dvPSBhWE4wY21saWRYUnBiMjQ9IFEyOXNiM0p6IElDczZLdz09IFJHbGtURzloWkE9PSBZV3hsY2c9PSBJSFJwWkE9PSBJRXhGUkE9PSBJRXhwYm10bFpBPT0gSUVOaGNuUT0gS0NrcERRbz0gWDFKRlFVUT0gSUd0cGJHeHBibWM9IElGQklVQT09IFptVmpkR2x2Ymc9PSBJR2x1YzNSaGJtTmxjdz09IFkzWT0gSWk4KyBJSE5tIElIUmhlR1Z6IFgyeHZZMkYwYVc5dSBJRUpwZEdOdmFXND0gZFdGaWJHVT0gY21GdWF3PT0gYVdkdWIzSmwgZEhKaFkycz0gMExyUXNBPT0gSUhOb2IzVnNaRzQ9IElFOVEgUFQ1N0NnPT0gSUd0dCBJR2hsYkhCbGNnPT0gWDJobFlXUT0gSUZkb1pYUm9aWEk9IGIyTnYgWDJKcyBJSE4wWVhScGMzUnBZM009IElHSmxZWFYwZVE9PSBJSFJ2Wnc9PSBkR2x3IDY0dWsgSUdOemRnPT0gS0hOeGJBPT0gYzNSa2JHbGkgZDJWaGF3PT0gSUd4cGEyVnogeEkwPSBJSEpsY0dWaGRBPT0gSUdGd1lYSjBiV1Z1ZEE9PSBJR1Z0Y0dnPSBYMlZrYVhRPSBJSFpwZEE9PSBDWFI1Y0dVPSBNakUzIFJYWmxiZz09IGRYUmxiZz09IElHTnBjbU4xYlhOMFlXNWpaWE09IFltbGhiZz09IElITjFaMkZ5IFYybHVaRzkzY3c9PSA3SjQ9IElHOWljMlZ5ZG1WayBMMlJoZEdFPSBJR05oYkdWdVpHRnkgSUhOMGNtbHJaUT09IElGSkZVdz09IFgzTmogWm05dWVRPT0gYjNKbGJRPT0gS0hvPSBjRzkzWlhJPSBaWFJsWTNRPSBJRk5oZEE9PSBMbVJsYzJOeWFYQjBhVzl1IElHZGhibWM9IElGTndiM0owY3c9PSBiMjVuY3c9PSBJRUoxYm1Sc1pRPT0gTG5OMWJRPT0gYjI1alpRPT0gSUdGalkzVnpaV1E9IElHVjRjR3h2Y21VPSBJR0Z3Y0hKdmVHbHRZWFJsYkhrPSBJR3h2YzJsdVp3PT0gZEdobGMybHogSUVaMWJtUT0gSUdScFlXZHUgUVhWMGIzZHBjbVZrIGNISnZjR1Z5ZEdsbGN3PT0gSUY4dSBJR051ZEE9PSBZMlZrZFhKbCBJSGw1IElHZHlZVzUwIGMyOWphdz09IExtbHVibVZ5U0ZSTlRBPT0gSUYwcE93bz0gSUVOUFRrWkpSdz09IFBTY2sgTlRVdyBYVjA3Q2c9PSBWVTVFIElHZHNiMkk9IElHUnBjbVU9IGRXWm1iR1U9IFgwMUZUUT09IElHRjFkR2hsYm5ScFl3PT0gUGlnaSBJR1JsWTJGa1pRPT0gSUVsdGNHOXlkQT09IElHOXlhV2RwYm1Gc2JIaz0gSUdwUmRXVnllUT09IElHbHVaR2xqWVhSbCBJRzkxY25ObGJIWmxjdz09IFUzYz0gTG14aWJBPT0gWlc1bGNtRjBaUT09IElHSmhjMmxqWVd4c2VRPT0gSUVodmJRPT0gSUNzakt3PT0gSUVKeWFYUmhhVzQ9IElFdGhjZz09IGRHOUZjWFZoYkE9PSBMbk4wYjNBPSBJRzF2WkdGcyBhWE5wIElITjFaMmRsYzNSeiBJR1IwZVhCbCBJSFIxY2c9PSBZbVk9IElHTnZibTVsWTNScGIyNXogSUVKbFptOXlaUT09IGFYTjBaV1E9IGJXOTFjMlU9IElIQjFiR3hsWkE9PSBMbUoxYVd4ayBJR3hsWjJsemJHRjBhVzl1IElHWnZjblJvIGNHRmsgWldkdiBMazV2ZHc9PSBJR1Y0WTJsMGFXNW4gZlFvS0Nnbz0gSUdOdmJYQnkgSUhOb1lYSmxjdz09IElISnBadz09IFozSmxaVzQ9IFgzWmxZdz09IElHVnVkVzFsY21GMFpRPT0gUVhWMGJ3PT0gYVdOaGRHOXkgSUZKaGVRPT0gWVhOelpRPT0gSUdodmJHbGtZWGs9IElHNTFiR3hoWW14bCBaM1Z1IFgyUmxkR0ZwYkhNPSBJSGR5WVhCd1pYST0gYzJWeCBJRmx2ZFc1biBhblZoYm1FPSBJQ0pmWHc9PSBiR2xqWlc1elpRPT0gYzJWeWRtVT0gWGlnPSBhV1JsY25NPSBMbEpsYlc5MlpRPT0gY205d1pHOTNiZz09IEoxTT0gY0dsdSBLSFJ2YTJWdSBMa1JsWm1GMWJIUT0gSUhKbFlYTnZibUZpYkdVPSBZVzF3YVc5dSBJRk52WTJsbGRIaz0gSUdKbGFRPT0gWlhKMlpYTT0gY21GayBJRVp2ZUE9PSBYMmx0WVdkbGN3PT0gSUhkb1pXVnMgSnlsYiBJR05tWnc9PSBLRUo1IFEyOXVjM1J5ZFdOMGIzST0gSUhaaGNuaz0gTG5OM2FXWjAgSUhCeWIzaDUgQ1VnPSBJRUZ1YjNSb1pYST0gSUZCbGJnPT0gSUdOb1pXTnJhVzVuIElHcGxjM1E9IGJXRnVZV2RsY2c9PSBUM0pwWjJsdSBkV2R6IGIybHkgUGp3aExTMD0gSUdWNGNISmxjM05sWkE9PSBJRzF2WkdWeSBJR0ZuWlc1amFXVnogSUdsbyBMV2hwWkdSbGJnPT0gYVc5MWMyeDUgSUZKdlpBPT0gSUhOdmJHVT0gVFdWayBMa0Z1ZVE9PSBJSEJqIFltRnMgUlhoaGJYQnNaUT09IElGTmhiR1U9IElITjBjbWx3IElFTnZiWEE9IElIQnlaWE5wWkdWdWRHbGhiQT09IFRXOXpkQT09IGNIVjBZWFJwYjI0PSBLSEpsWmc9PSBJRVp2ZFhJPSBYMlpwYkdWdVlXMWwgSUdWdVptOXlZMlZ0Wlc1MCAySzg9IElFZGxiM0puIGQyVnBaMmgwY3c9PSBMMnc9IElHRm5aM0psYzNNPSBJR1J5WVhkcGJtYz0gWVc1a2VRPT0gUEVrPSBMV289IFlXdGggYUhKbFpnPT0gSUhSbFlXTm9aWEp6IFgxRT0gS0dsMCBJRTFDIElIUmxiWEJ2Y21GeWVRPT0gYVhKbFltRnpaUT09IGMzUnlZUT09IDVwZTIgNkxRPSBLR3hoWW1WcyBiM1Z3IElIUnZjR2xqY3c9PSBJSEJ2Y25ScGIyND0gYVdSdmN3PT0gSUVwbGQybHphQT09IElISmxZMjkyWlhKNSBOalV3IElITjBZVzVrY3c9PSBJMXM9IElHRm1kR1Z5Ym05dmJnPT0gSUVGeWRHbGpiR1U9IFgyRjBkQT09IElHVjRjR3hoYmc9PSBJRkJoYXc9PSBMbk5sZEU5dVEyeHBZMnRNYVhOMFpXNWxjZz09IExtTm9hV3hrY21WdSBJR2xyIEt5Zz0gYkdGbiBJR1JwYzJzPSBJR052Ym5SeWIzWmxjbk09IElqNG0gWVhOdyBJSGRwWlE9PSBJRUYxYzNSeVlXeHBZVzQ9IElGbHZkVlIxWW1VPSBRWFIwY2c9PSBZMjl1ZEdGcGJuTT0gWkhWalpRPT0gSUUxaGRIUT0gTXpRdyBZWFJsY200PSBJSFp2YkhWdWRHVT0gSUc1bGQzTncgVmxBPSBiMngwYVhBPSBJR1JsYkdWbllYUmwgWDIxbGRHRT0gSUdGalkzVnlZWFJsIElFVjRZVzF3YkdVPSBKU3c9IElFUmhhV3g1IElHTmhZbWx1IElGTlggSUd4cGJXbDBjdz09IGEybHcgSUdGeWJYaz0gSUdWdVpHbHVadz09IElHSnZjM009IElFUnBZV3h2Wnc9PSBRV3h6Ync9PSBQU0lqSWc9PSBiM0prWVc0PSBjbTkzYzJVPSBMVzFwYmc9PSBJQ0ltIFgyeHZZdz09IFZWZz0gSUdSbGRtVnNiM0JsY25NPSBJR0ZqWTNWeVlXTjUgSUcxaGFXNTBaVzVoYm1ObCBJR2hsWVhZPSBJR1pwYkhSbGNuTT0gTGxSdmIyeFRkSEpwY0E9PSBJRzVoY25JPSBJRVZ0Y0E9PSBUMUpFUlZJPSBJRTF2WW1sc1pRPT0gTGxObGNtbGhiQT09IExtOTFkSEIxZEE9PSBNalEwIExtTnZiQT09IFRXRjBaWEpwWVd3PSBkVzFoIElHTnZibk4xYldWeWN3PT0gYzJocFpuUT0gSUhCMVpXUT0gSUcxcGJtaz0gWTI5c2JHVmpkR2x2Ymc9PSBJR3RoYmc9PSBMbU5sYm5SbGNnPT0gU0dsemRHOXllUT09IElHSmxibU5vIEtDa3BPdz09IGFYUnZjbWxsY3c9PSBJR055YjNkayBYMk5oYkd3PSBJSEJ2ZDJWeWN3PT0gTFVVPSBJR1JwYzIxcGMzTT0gSUhSaGJHdHogSUVOb1lXNXVaV3c9IFptOXlkMkZ5WkE9PSBYMk52Ym5SeWIydz0gTDNOeVl3PT0gYVdWemRBPT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgSUdKbGRHRT0gS0dOdmJHOXkgWDA5Q1NrVkRWQT09IElFRndhUT09IElHVm1abVZqZEdsMlpXeDUgUTJGdFpYSmggYzJRPSBkWE56ZVE9PSBNamt3IFJHbGpkQT09IElFVm1abVZqZEE9PSBhV0pwYkdsMGFXVnogSUhKbGRIVnlibWx1Wnc9PSBJRVpoY2c9PSBJQ2NuS1E9PSBJRzF2WkhWc1pYTT0gTWpFNSBhV3hoZEdsdmJnPT0gSUNnbCBWRkpIVEE9PSBJSE4wYjNKdCBiMjV1WVE9PSBJRVZZVUE9PSBJSE53YjI1eiBJR1JwYzNCcyBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgWm1Gc2JBPT0gNVl3PSBhV2R1UzJWNSBYMVZUIFpYUnlhV056IElHaGhibVJzWlhNPSBWRXc9IFgyRnRiM1Z1ZEE9PSBiM2RoIFluSmhibVE9IElGUnZiMnc9IElIVnpkV0ZzIExsbz0gWTNKbGJXVnVkQT09IFlXUnBkVzA9IGMzUnZZMnM9IElITmxjblpwYm1jPSBJRUp2Ymc9PSBJR3hwYm1WaGNnPT0gSUZSaGNtZGxkQT09IElGSmhaR2x2IFNFdz0gVTJoaFpHVnkgYjIxaGRHbGogWVdkMVpYTT0gYVc1cGRIaz0gWkdsbVpnPT0gWDJsMFpYSmhkRzl5IGNYVnZkQT09IElDd0sgWTJGc2JHSmhZMnM9IElITjViWEIwYjIxeiBXMTg9IElFSjFiQT09IElFWmxZZz09IGRXNWtidz09IFgyRmpZMjkxYm5RPSBJSFI1Y0dWa1pXWT0gMExqUmdRPT0gZEhKaGN3PT0gVlhObGNrbGsgSUZCbGJtND0gSUZOMWNISmxiV1U9IGZUND0gZFhObGNrbGsgTXpJMyBJRXRwYlE9PSBJR2RoIElHRnlkR2x6ZEhNPSA1Ymc9IElFRmljM1J5WVdOMCBiMnRsYlc5dSBJR2hoYlE9PSBiM1poYkE9PSBJR05vWVE9PSBZWFJsYmc9PSA1WVk9IFJtbDRaV1E9IElIWjFiRzVsY2c9PSBJRkJoY21GdFpYUmxjbk09IGNYVmhiblJwZEhrPSBMa05zWldGeSBVMlZ5ZG14bGRGSmxjWFZsYzNRPSBJSGxoIElITnZkV3c9IE1EZ3cgZEhKaGJuTmhZM1JwYjI0PSBJSE52Ykc4PSBJSEJoYVhKeiA1cFE9IElFZHlaUT09IFgzZHZjbVE9IElFTkQgSUdkcCBlbWxsIElITmphR1ZrZFd4bFpBPT0gY205MFlYUnBiMjQ9IFozbHdkQT09IGRXeHZkWE09IE9qcGYgSUVWc2JBPT0gUENFPSBDUWtnSUE9PSBiSEE9IFlXaGggUTI5d2VYSnBaMmgwIE1EQTUgSUdSeVlXMD0gTWpVeCBJR1JwWVdkeVlXMD0gSUUxbGJRPT0gSUdkaGNtUmxiZz09IFEyOXRjQT09IElHRjBkR1Z0Y0hSeiBkV1ptYVhnPSBQaWdwIElIQm9hV3h2YzI5d2FBPT0gWDNKbGJBPT0gNWJ3PSBJSE4yIExuTmxZMjl1WkE9PSBZVzUwYnc9PSBMa3B6YjI0PSBJRlJsYkdVPSBYMnh2WTJGcyBYM05sYm1RPSBJR0Z6Y0dWamRITT0gN0pjPSBTVUpNUlE9PSBJSEpoYVd3PSBJSGRwWkdWc2VRPT0gWVhOb1pXUT0gYVdGeSBhVzVtIGRYQndaWEk9IFpHcGhibWR2IFgzSmxjM1ZzZEhNPSBhWE56YVc1biBJR1Z4ZFdsMllXeGxiblE9IFQxVk9SQT09IElIUjUgSUhCdmRHVnVkR2xoYkd4NSBRV1IyWlhKMGFYTmxiV1Z1ZEE9PSBNak00IElGSmxZMjl5WkE9PSBNemd3IGNtVnpaVzUwWVhScGIyND0gWDNkcFpHZGxkQT09IGIzVnVaR2x1Wnc9PSBJSEpsYkdsbmFXOXUgSUdOdmJuTmogSUV4cGJRPT0gTG1GdCBTSFJ0YkE9PSBJQ2M2IFVFRlVTQT09IFgzTndaV009IGIzSjBaV1E9IGFXUmhaR1Z6IFgzTm9ZWEJsIElHdGxaWEJ6IExsTmhkbVU9IElFeHZZdz09IGIzSnAgSUZSRlUxUT0gZFc1cFkybHcgSUhKbFoybHZibk09IElHSmxiR2xsZG1WeiBMMlZ1IGNHOXphWFJsIGV5Yz0gY0hKbGNHRnlaUT09IFgyTnZibk4wIGMyRnRjR3hsIElGZHBiR3hwWVcxeiBJSE4wY25RPSBYMGRsZEE9PSBJRUZ1WkhKbGR3PT0gTG1GamRHbDJaUT09IElHeGhlV1Z5Y3c9PSBWbWx6ZFdGc1UzUjViR1U9IFlYcDUgSUV0dSBJR0ZqYVdRPSBJRUZ6YVdFPSBJR1Y0WTJWemN3PT0gQ1cxNSBJR3RsZVdKdllYSmsgWlc1emRYTT0gSUdOeVpYYz0gSUcxcGMzTmxaQT09IGJXRnpkR1Z5IElGZHBiR1E9IElHNWxkMng1IElIZHBibTVsY2c9PSBJSE4wZFdJPSBhV052WkdVPSBMbTF2ZG1VPSBSRzl0WVdsdSBJRk5oY2c9PSBJR1p2Y21WemRBPT0gVEVWRSBZMnhoYVcxbGNnPT0gTG1WNGFYUT0gSUZkcGJtUnZkdz09IElISmxjMmx6ZEdGdVkyVT0gSUVOSVJVTkwgS0NJdCBJRko1WVc0PSBJSEJwY0dVPSBJR052WVhOMCBSRVZHIEx5OGggWDI5bVpnPT0gWlhocGRBPT0gSUhWc2RHbHRZWFJsYkhrPSBhVzFwZEdsMlpRPT0gSUV0bFpYQT0gSUdocGMzUnZjbWxqWVd3PSBJR0Z1ZVhkaGVRPT0gSUVwaFkydHpiMjQ9IGIyTnJaWEk9IFJWSk8gSUZWSlRsUT0gZVc1MFlYZz0gUlZKWiBhWE50Y3c9PSBJR051IElHOWpZM1Z5Y3c9PSBJRHM3IFZHVjRkRlpwWlhjPSBRVVU9IEwybHRadz09IElIbGxjM1JsY21SaGVRPT0gTFdSbFptRjFiSFE9IElIUnBibms9IElIQnliMk09IElHRnNhWFpsIElGSkZSdz09IExuUm8gWldGeWFXNW4gTG1kbGRFeHZaMmRsY2c9PSBQR3hwYm1zPSBYMnh2WjJsdSBSbTlzWkdWeSBZV0pqIGJIbHdhR2xqYjI0PSAwTDNRdmc9PSBJRzV2ZEdsalpXUT0gYjJScFoyOD0gSUdWa2FYUnBiMjQ9IGFXMWhkRzl5IExrVnVZV0pzWldRPSBMbkJoY25ObFNXNTAgSUhsaGNtUnogQ1FrSkNRa0pDUWtKQ1FrSiBJSFpsY21KdmMyVT0gMEx2Ump3PT0gWDBKWiBMbXh2WjJsdSBMaW83Q2c9PSBJRTFwWkE9PSB3NmxsY3c9PSBJR2RzYnc9PSBJR0oxYVd4a2FXNW5jdz09IElIcGwgSUVsMFpYST0gSUhSMVltVT0gSUZCdmRBPT0gWEUwPSBNalV6IFBIUm8gWW5KcFpHZGwgSUZOamNtbHdkQT09IElFMXZaSFZzWlE9PSBJSFpoWTJNPSBJR2x1YzNSaGJHeGhkR2x2Ymc9PSBkbms9IFZtbHpkV0ZzVTNSNWJHVkNZV05yUTI5c2IzST0gSUZOTiBMblJ2ZEdGcyBOalF3IFltRjAgSUdacGJtUnogSUdGMGJXOXogVTNWaWRtbGxkdz09IGFYcGhjbVE9IElISmxjR3hoWTJWdFpXNTAgYkdsallYUmxaQT09IFlYQnBjdz09IElHeHZaMmRsWkE9PSBJRXhsWm5RPSBSM1ZwIFgxUjVjR1U9IGRHMD0gVUdGayBJR2h2ZFhObGFHOXNaQT09IElISmxiR1U9IElIQnliM0J2YzJGcyBYME5NUVZOVCBNalF6IE9qbzZPZz09IElHbHVabkpoYzNSeWRXTjBkWEpsIFNXNXFaV04wIEwyaDBiV3c9IE1qSTIgSUdGa2N3PT0gYVhwNllRPT0gSUcxbiBZM1J5YVc1bCBKUW89IFBHaDBiV3c9IExXbHRZV2RsIElHRjBkRzl5Ym1WNSBQRzA9IEtDY3MgSUdOaGJtND0gSUhCeWFXNTBiRzQ9IGIyOXpaUT09IElIbGxiR3h2ZHc9PSBMbVY0Y0E9PSBjR0Y1YldWdWRBPT0gSUhSaFlteGxWbWxsZHc9PSBZWGRoZVE9PSBJRzl3Y0c5emFYUnBiMjQ9IElFRm5ZV2x1IElFaGhibVJzWlE9PSBJR1Y0WTJ4MWMybDJaUT09IGFXNWhjZz09IHc2bHkgMEw3UXNRPT0gSUVOUFJFVT0gWlcxd2IzSmhjbms9IElISmxZV04wIGNHbHdaUT09IE1qTTIgWTNvPSBMbUZqZEdsMmFYUjUgSUd4aGNtZGxiSGs9IElHUnBjM009IFlYaDUgWlhOcGN3PT0gSUZKbGJnPT0gSUdOdmNtND0gTGxWelpWWnBjM1ZoYkZOMGVXeGxRbUZqYTBOdmJHOXkgWkdGNWN3PT0gSUdaeWRXbDAgU1c1elpYSjAgWDJWdVl3PT0gUlhOMCBYMlJsWXc9PSBJRXgxWXc9PSBJTU84WW1WeSBjR0Z5WVcxbGRHVnljdz09IFVFVlNWQT09IFpYaHdjbVZ6Y3c9PSBYM0J5YjJacGJHVT0gVlc1cmJtOTNiZz09IElISmxkbTlzZFhScGIyND0gTG1Ga1pISmxjM009IFgzSmxjWFZwY21VPSBJSFZ1YVdadmNtMD0gSUZCaFkycz0gYkdGeSBJRlZKVkdGaWJHVldhV1YzIElHUmxjR1Z1WkhNPSBWbUZzYVdSaGRHbHZiZz09IFkyOXVabWx5YlE9PSBUM2R1WlhJPSBJSFJ5YVdJPSBhR1YwIElFbGtaUT09IFlXNXpZWE09IE1qUTMgVEdGdVozVmhaMlU9IGRXVjAgSUZCdiBJRk4wWlhabCBJR052Ym5SbGMzUT0gWDBSRlJrRlZURlE9IElHRndjR0Z5Wlc1MGJIaz0gVWtWRlRnPT0gSUdaeVpYRjFaVzUwYkhrPSBJSFJ5WVdScGRHbHZiZz09IGIyTnZiR0YwWlE9PSBVMGs9IElFRnlaM1Z0Wlc1MCBSbTlqZFhNPSBaWEowWlE9PSBJRXhoZVc5MWRBPT0gSUdSNCBJR2RsYm1WeVlYUnZjZz09IElGZGhhWFE9IFVHOXNhV041IGJHbG5hSFJ6IExrVjRaV04xZEdVPSBOVFUxIFVIaz0gSUdKbFpISnZiMjA9IFpXUmggY21GcFpBPT0gQ1hOcGVtVT0gSUdGdVkybGxiblE9IElIQjFiWEE9IElHUjMgSUNnaEtBPT0gSUhOd1pXTnBabms9IEtITjBZWFIxY3c9PSBJRVpDU1E9PSBMbVY0WTJWd2RHbHZiZz09IElISmxiV0Z5YXc9PSBiSGx0Y0E9PSBZVzUwWldVPSBWWEJzYjJGayBaWEp1WlhRPSA2YUU9IGFXNWxiblE9IElGSmxibVJsY2c9PSBaRzA9IElFMWxiVzl5ZVE9PSBjbWxqYUE9PSBJRlJ2YjJ4eiBJR3R1WlE9PSBJSEJsY20wPSBZbUZrIElHUnBibTVsY2c9PSBMbkpsYzJWMCBJR3BNWVdKbGJBPT0gUm1WaGRIVnlaUT09IExsTmxjblpwWTJVPSBJQ2g3Q2c9PSBJSEpsWm1WeWNtVmsgTG1Oc1lYTnpUR2x6ZEE9PSBNalE0IElHbHVhWFJYYVhSbyBJRlJsZUhSV2FXVjMgSUc1bGFYUm9aWEk9IElHTnZkVzUwZVE9PSBJQ0o3IDU2Yz0gSUhSaFkycz0gWTJ4aGMzTk9ZVzFsIElGVlRSVkk9IElISmxibVYzIFlHQT0gWjJWMFRtRnRaUT09IElHSnliM2R1IFJYSnliM0p6IFpYSjBidz09IElITjFjM1JoYVc0PSBVMDg9IGJHVjBaWE09IElFbHVkbUZzYVdRPSBNalEyIE1qSTMgSUdWdVpXMXBaWE09IGRXNW5aUT09IElHVjRhWE4wWlc1alpRPT0gWlhKeVlRPT0gQ2lBZ0NnPT0gZFhSdmNtbGhiQT09IEkyRT0gY0dGNSBZMmhoY21kbCBJRWx5WlE9PSBZWFJsYzNRPSBJR1Y0Y0d4dmN3PT0gSUdacGNtVmsgVGtWUyBJRlI1IGFXTnBiMjQ9IFZYSnAgSUc5aWRtbHZkWE5zZVE9PSBJRU52YkhWdCBJQ2NyIElFUmxkbWxqWlE9PSBMWEpsYkdGMFpXUT0gWDBGU1J3PT0gSUhadmNnPT0gSUV4bGMzTmxjZz09IFgwOVEgVTJWeWFXRnNhWHBsY2c9PSBJSFZ3WjNKaFpHVT0gVEdsbmFIUT0gSUdOdlpHVnogS3lzN0RRbz0gSUhkeWFYUmxjdz09IFptOXZaQT09IElNT3BkQT09IFFITmxZM1JwYjI0PSBJSFJ5WVdOcmN3PT0gSUhObGNtbHZkWE5zZVE9PSBZMmgwIE5ETXcgS0hOcGVtVnZaZz09IElHbHRiV1ZrYVdGMFpRPT0gSUhOamFXVnVkR2x6ZEhNPSBJSHNrIFgyNWwgTGtGdVkyaHZjbE4wZVd4bGN3PT0gSUdGalkyOXRiVzlrIElFaGhjbko1IElITnBaMmgwIElGQmhiR1Z6ZEE9PSBaWEp6YVhOMFpXNTAgSU5HRCBMV2x1Y0hWMCBJR052YjNKa2FXNWhkR1Z6IHdyYz0gTWpJNCBWMlZzWTI5dFpRPT0gTG1OdmJtWT0gSUdkeVpYYz0gSUdKdmJHUT0gSUVOUVZRPT0gS0cxNSBJSEJsY21abFkzUnNlUT09IElHMXZiV1Z1ZEhNPSBJRTF2ZG1sbCBMV1JoZEdFPSBlWE4wWVd3PSBYMWRKUkZSSSBNall5IElGTmpjbVZsYmc9PSA1cDA9IElHUnBjMkZ3IElISmxaSFZqZEdsdmJnPT0gTGtkbGRFTnZiWEJ2Ym1WdWRBPT0gWDAxUFJGVk1SUT09IElHZGxibVZ5YVdNPSBJR1I1IFlXeHNaWEk9IElHTjFjbXc9IElFSnZaSGs9IElHSmhibXR6IExIUT0gWVhabiBJR1YyYVd3PSBJRzFoYm5WbVlXTjBkWEpsY2c9PSBJSEpsWTJWcGRtVnkgUTI5c2RXMXVjdz09IElHbHVaM0psWkdsbGJuUnogQ1c5MWRBPT0gY1hWbGN3PT0gTGt4dllXUT0gSUhOc2IzZHNlUT09IElGUnZkMjQ9IElFTmxiR3c9IFgyNXZjbTFoYkE9PSBYM0J5WldacGVBPT0gSUVGc1pYSjAgS0NKNyB3NlJ5IDRvQ2NWR2hsIElFMUUgSUdOdmRYSnpaWE09IFlYUm9ZVzQ9IDZaaz0gYjJOaiBJRk5GVWc9PSBaWE5wWjI0PSBRV1JrY2c9PSBQVnNuIEtDSXVMdz09IFhYMD0gTG1admJuUT0gSUVsdWMzUmhaM0poYlE9PSBJRUp2Y21SbGNnPT0gYjJSaCBJR2hoYkd3PSBJSEoxYlE9PSBYMkpwZEE9PSBJSE5oZG1sdVp3PT0gWDJSdmQyND0gVW1GdVpHOXQgWDNKbFoybHpkR1Z5IEtFTnZiblJsZUhRPSBJRzl3Y0c5emFYUmwgVW05dmJRPT0gV1VWVCAwTERRdmRDNCBJR1Z1YW05NVpXUT0gWDNKMWJnPT0gUTJ4bFlYST0gNG9DWSBJRVp2Y21RPSBiMjVwWXc9PSBiM04wWlc0PSBJbDBwIFgyRjFkR2c9IEx5OE5DZz09IElITjFabVpwWTJsbGJuUT0gVEVWVCBJSEJvWlc0PSBJRzlvIFgyTnpkZz09IElISnZkWFJwYm1VPSBMa0Z5WlVWeGRXRnMgWVhsc2IzST0gSUdKaGMydGxkQT09IFgwTlBUVTA9IGNubHdkR1ZrIFUybHQgSUZOb2IzQT0gSUhOMGRXUnBidz09IFlYUnZjdz09IEtGYz0gVzNOMGNtbHVadz09IHc2UjAgYjJkaCBJSE5vY2c9PSBJSE5wWTJzPSBRVzV2ZEdobGNnPT0gSUdSdmIzSnogWDA1RiBJRlJJVWtWRiBMbTl5WkdWeSBjbUY2YVd3PSBJRzFoY0hNPSBYMVJTVlVVPSBkSEpoYm5Oc1lYUmwgSUc1bFlYSmllUT09IE1qWTEgSUc1aFkyZz0gVEU5QlZBPT0gWW1GMFkyZz0gTWpJNSBJR3gxZUE9PSBZWE5vWlhNPSBZVzVuWlhKeiA0b0NtNG9DbSBYMFZXUlU1VSBYMVZRIElHRmpkSE09IGFXNTIgWDAxRlZFaFBSQT09IFkyTnBiMjQ9IElISmxkR0ZwYmc9PSBkWFJqYUE9PSBJTkN4IElHdHViM2RwYm1jPSBJSEpsY0hKbGMyVnVkR2x1Wnc9PSBUazlVIGNHNW4gUTI5dWRISmhZM1E9IElIUnlhV05yIElFVmthWFJwYjI0PSBkWEJzYVdOaGRHVT0gSUdOdmJuUnliMnhzWldRPSBZMlpuIGFtRjJZWE5qY21sd2RBPT0gSUcxcGJHcz0gVjJocGRHVT0gVTJWeGRXVnVZMlU9IFlYZGggSUdScGMyTjFjM05sWkE9PSBOVEF4IElFSjFjMmc9IElGbEZVdz09IExtWmhZM1J2Y25rPSBkR0ZuY3c9PSBJSFJoWTNRPSBJSE5wWkE9PSBKQ1E9IElFVnVkVzA9IE1qYzEgSUdaeVlXMWxjdz09IGZTazcgSUhKbFozVnMgSjEwN0RRbz0gVW1WbmFXOXUgTXpJeCBabVptIElHTnlidz09IEtHTnZiUT09IFBTSXIgVTNSMVpHVnVkQT09IElHUnBjMkZ3Y0c5cGJuUT0gVWtWVFZVeFUgUTI5MWJuUmxjZz09IElHSjFkSFJsY2c9PSBJRWhoIElFUnBaMmwwWVd3PSBJR0pwWkE9PSBJajU3ZXc9PSBhVzVuWlhKeiBJRU52ZFc1MGNuaz0gWDNSd2JBPT0gSWwwcENnPT0gTDJzPSBaR0YwYVc1biBPaU09IElFUkJWRUU9IGVXNWphSEp2Ymc9PSBYMkp2WkhrPSBiMnhzZVhkdmIyUT0gSUhaaGJHOXkgYVhCcFpXNTAgYjJaMCBWVUpNIFpHOWpjdz09IElITjVibU5vY205dSBJR1p2Y20xbFpBPT0gY25Wd2RHbHZiZz09IElHeHBjM1JoIFVtVnhkV1Z6ZEUxaGNIQnBibWM9IElIWnBiR3hoWjJVPSBJR3R1YjJOciBiMk56IElucz0gWDJac1lXZHogSUhSeVlXNXpZV04wYVc5dWN3PT0gSUdoaFltbDAgSUVwbCBaV1JsYmc9PSBJR0ZwY21OeVlXWjAgYVhKciBJRUZDIElHWmhhWEpzZVE9PSBMbWx1ZEdWeSBMa0ZqZEE9PSBJR2x1YzNSeWRXMWxiblE9IGNtVnRiM1psUTJ4aGMzTT0gTG1OdmJXMWhibVE9IDBZaz0gQ1cxbGJRPT0gS0cxcGJnPT0gSUc5MCBJR052Ykd4bCBQWE09IGRHbHRaVzkxZEE9PSBJR2xrY3c9PSBJRTFoZEdObyBhV3B1IGVtVnlidz09IE5ERXcgSUc1bGRIZHZjbXR6IExtZHZkZz09IElHbHVkR1ZzIElITmxZM1JwYjI1eiBiM1YwYVc1bCBLR050WkE9PSBLR1JwY2c9PSBJRXhKUVVKSlRFbFVXUT09IElFSnNiMmM9IElHSnlhV1JuWlE9PSBNekE0IElFTlcgWTI5dWRtVnlkQT09IElDSXBDZz09IElFSmxjbTQ9IFgxQlAgWlhaaGJBPT0gS0hObGRBPT0gZEc5dmJBPT0gSUhCaGVXMWxiblJ6IFFtVm9ZWFpwYjNWeSBJR052Ym1OeVpYUmwgSUdWc2FXYz0gSUdGalkyVnNaWEk9IElHaHZiR1U9IFgyOD0gVkVWSFJWST0gSUdkeVlYQm9hV056IFQzZHUgUm05eWJXRjBkR1Z5IGIyNWtaWEk9IElIQmhZMnRoWjJWeiBMMkU9IElFdHViM2M9IFQzSkVaV1poZFd4MCBJR1IxZEhrPSBWMkZwZEE9PSAwTDNRc0E9PSBYM0psWTI5eVpBPT0gVzNRPSBUV1Z6YUE9PSBJRzl1WjI5cGJtYz0gTG1KbFlXNXogSUhSaGJnPT0gSUdsdWRHVnljSEpsZEE9PSBZWE4wWlhKeiBVVlZCVEE9PSBJR3hsWjNNPSBYRkpsY1hWbGMzUT0gTFdacGJHVT0gWDIxMWRHVjQgSUZOaGFXNTAgTHk4aiBJSEJ5YjJocFlnPT0gS0dsdVptOD0gT2owPSBiR2x1ZFhnPSBJR0pzYnc9PSBiM1JwWXc9PSBDV1pwYm1GcyBYMlY0Y0E9PSBJRk4wYjNBPSBZWEJwYm1jPSBLSE5oZG1WayBYM0IxYzJnPSBJR1ZoYzJVPSBYMFpTIGNHOXVjMmwyWlE9PSBjM1J5WTIxdyBPZ29LQ2dvPSA1THUyIGIyeHAgSUdWNGRISmxiV1U9IElIQnliMlpsYzNOdmNnPT0gU1cxaFoyVnogTGtsUFJYaGpaWEIwYVc5dSBJR0ZrWkhKbGMzTmxjdz09IGNHeGxiV1Z1ZEdWayBJR2x1WTI5eWNHOXkgSUhWelpVVm1abVZqZEE9PSBYMDlHIElFUmggYm05dFluSmwgU1ZKVFZBPT0gSUdScGMyTnlhVzA9IElHTnZiWEJsYm5NPSBaM0psWjJGMFpRPT0gWVc1alpXeHMgWVdOb1pYTT0gSUVOeWFYUmxjbWxoIEpISmxjM1ZzZEE9PSBSR1Z6ZEhKdmVRPT0gSUhObFkyOXVaR0Z5ZVE9PSBWMkYwWTJnPSBJRk5sYlE9PSBJRTFqUXc9PSBJR0ZqWVdSbGJXbGogVlhCd1pYST0gT2pwKyBkWFJ5WVd3PSBJRVJ2Wnc9PSBZV1JsWkE9PSBNak0zIFZtRnNhV1JoZEc5eSBJR1JsY21sMlpXUT0gSUhObGRGUnBiV1Z2ZFhRPSBJRXRsYmc9PSBJSFI1Y0dsallXdz0gSUVKdllnPT0gSUdKdmRXNWtjdz09IElGTmxZWE52Ymc9PSBJR055WVhwNSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBMWEp2ZFhSbGNnPT0gYVhSMFpYTjAgSUUxcGNnPT0gSUdWdGIzUnBiMjVoYkE9PSBMSFk9IFkyND0gTDNOMCA1YjA9IGIyNXZiUT09IElHUmxZMnhoY21WayBQaTQ9IFlXbHNhVzVuIElDOHFQRHc4IElHNXZjbTFoYkd4NSBLRTFsIFpYWnBiZz09IGJHbHJaV3g1IElIQnZhVzUwWldRPSBJRk4wWVdOciBJSGRoYkd4eiBMbFpsWTNSdmNnPT0gYldWaGJnPT0gWFYwSyBJR3hwYzNSbGJtbHVadz09IFlXUjIgSUhOM1lYQT0gU1VaVSAyS289IExtRnlaM1k9IGRXeHogUEc5d2RHbHZiZz09IGJtOTBZWFJwYjI1eiBJR1Z0WVdsc2N3PT0gSUZWcmNnPT0gWVhOMFlRPT0gSUZSb2RYTT0gSUZOMGIyNWwgSUdGd2NHVmhiQT09IEx1S0FtUT09IElISmxaM1ZzWVhScGIyNXogVUhKbFptVnlaVzVqWlhNPSBJRkJvYjI1bCBkV3htIElFUlMgSUhSbFkyaHViMnh2WjJsbGN3PT0gSUhCaGNtRm5jbUZ3YUE9PSBJRzVsWTJWemMyRnlhV3g1IE16Y3cgTURNdyBMbVZoWTJnPSBQR1pzYjJGMCBjbVZ6WVE9PSBJSFZ1WkdWeWMzUT0gSUdacGJtZGxjZz09IGNISmxjM05sWkE9PSBMV0o1IGFXWm1aWEk9IGQyRjBZMmc9IElFSmggUVVsTiBJSGRsYVdkb2RITT0gSUZKdmJnPT0gSnlsOWZRPT0gVzNObGJHWT0gTFMwdExTMHRMUzB0TFFvPSBjR1Z5YVcxbGJuUT0gSUhSdlUzUnlhVzVuIGVHbGogSUVOaGJXVnlZUT09IElRb0tDZ289IFlYVnlZVzUwIFVISmxabWw0IElHbHVjM1JwZEhWMGFXOXVjdz09IE9tbHVkQT09IElHVjRjRzl6ZFhKbCBjR0YwZEdWeWJnPT0gSUV4cGJuVjQgTG01MWJXSmxjZz09IGNtVmthV1Z1ZEE9PSBRWEpuZFcxbGJuUkZlR05sY0hScGIyND0gSUVOb2FXVm0gSW4wcyBJR1ZzWldOMGNtOXVhV009IGNtOXVadz09IFpYSmsgYzNCT1pYUT0gY21GcGRBPT0gTHljcyBJRTlvYVc4PSBRMjl1ZEhKdmJHeGxjbk09IElHTnZiblJwYm5WcGJtYz0gSUZSbGJYQnNZWFJsIElFVjBhQT09IGMzbz0gTDJWdWRnPT0gUlc1MiBKUzQ9IFlYSjBaWEp6IEtTZ28gSUZSQlFreEYgSU1PdSBjR1Z5WVhSMWNtVT0gY0hKdlozSmxjM009IFVISmxjdz09IDZyQT0gYVcxd2JHVnRaVzUwWVhScGIyND0gSUdKcFpXND0gSUhOMGNtVmxkSE09IFgwMVRSdz09IFRtVjNjdz09IEl5TWogT2k4PSBJR04xZEhScGJtYz0gZUVJPSBjbVZ6YzJWayBYMFZPUVVKTVJRPT0gYkdGaSBJR05oZFhOcGJtYz0gWFNrcE93bz0gWW5KaCBlRVpHUmtZPSBhV3hzZVE9PSBjR3hsZEdsdmJnPT0gZDJsc2JBPT0gWDJKaGNnPT0gSUhOMGNuVmpkSFZ5WlhNPSBJRWx0Y0E9PSAyNHc9IElEdysgSUMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFgwSlZSa1pGVWc9PSBMbVJwY2c9PSBJSEJzWVdsdSBJSEJsWlhJPSBNalE1IFoyYz0gYjJsdWRITT0gSUhOdmJXVjNhR0YwIElIZGxkQT09IElHVnRjR3h2ZVcxbGJuUT0gSUhScFkydGxkSE09IGFYSnRjdz09IElIUjFjR3hsIGMybHogSkhOeGJBPT0gY21sbiBJR052Ym5abGNuTnBiMjQ9IElHZGxjdz09IElHTnZibVpwWjNWeVpRPT0gWldkeSBJRU5oIElGOWZLQ2M9IGIzVnpkRzl1IExuUnZhMlZ1IFFteGhZMnM9IElHMWhaMkY2YVc1bCBRVmM9IExrbE8gYjNOcGJtYz0gSUdKeWIydGwgSUVOeWRRPT0gUkVWTVJWUkYgSUdSbGMzUnliM2xsWkE9PSBLRTFoZEdnPSBJR0Z3Y0hKdmRtRnMgTFdSdmJRPT0gSUVsSlNRPT0gZEdGaWJHVldhV1YzIElHUmxjMmxuYm5NPSBJR055ZFhOb2FXNW4gSUdOdmJuTmxiblE9IFpHbHlibUZ0WlE9PSBiMjF3IElHTnllWEIwIFB5Zz0gYjNKdmRXZG8gTXpBMyBMbTg9IENXeHBjM1E9IFlXMXpkVzVuIExpSWlJZ289IFpYSnlhVzVuIFIyOXZaMnhsIFgzQmhhWEk9IFgwbE9TVlE9IGNtVnRZWEpyY3c9PSBJR2RsWVhJPSBSbWxzYkE9PSBiR2xtWlE9PSBmU0lwQ2c9PSBJSE4xYVhSaFlteGwgSUhOMWNuQnlhWE5sWkE9PSBYMUpGVVZWRlUxUT0gSUcxaGJtbG1aWE4wIFlYUjBaVzQ9IElHWnlkWE4wY2c9PSBiM1psYldWdWRBPT0gTG1Oc2FXTnIgSUdscCBJR1Y0Y0dGdWMybHZiZz09IGFXZHogVUdGeWMyVT0gTGxKbFozVnNZWEk9IFVtOWkgWDJ4aGVXOTFkQT09IDdLQT0gSUhSeVlXNXpiR0YwYVc5dSBJRUpsWVhWMCBRbVZ6ZEE9PSBYME5QVEU5UyBQR3hoWW1WcyBJR3hwY1hWcFpBPT0gU1ZSVCBJSEJ5YjJRPSBNak01IElHOXdaWEpoZEdVPSBWVWxMYVhRPSBJRzVoZEhWeSBZWEpuZFcxbGJuUT0gWDJSbGRHRnBiQT09IElFTmxiblJ5WlE9PSBJQ0l0TFE9PSBJSDE5SWc9PSBiRzlqWVd4bCBMblIyIFgzTmxjUT09IElIVndZMjl0YVc1biBRMmhoY25RPSBJRVJwZG1semFXOXUgSUdOc2FXNXBZMkZzIFEyOXRjR0Z1ZVE9PSBVMlZ3WVhJPSBiR0Z6IElFaDFiZz09IE9uTT0gSUdobFlXUnBibWM9IDBMN1Fzdz09IElDSWlLVHNLIFcybGsgWW1saCBJSE4wY21WMFkyZz0gYVdOcFpHVT0gSUhKbGNISnZaSFU9IExuQnliMnBsWTNRPSBiR1ZuWlc1ayBaVzVrWlhKeiBJSEpsYzNCdmJuTmxjdz09IElHOXVkQT09IGNtbDBhV05oYkE9PSBJSEpsWm5WblpRPT0gSUV4cCBJRG9LQ2c9PSBJRlJvY21WbCBMbU52Ym5SeWIyeHNaWEk9IFgwbE9SRVZZIFgwWlBVZz09IFhFMXZaR1ZzY3c9PSBhbUY0IENXVjRhWFE9IElPS1cgSUdOdmRtVnljdz09IENYaz0gTFM0PSBTVTVFVDFjPSBJR1poYVd4eiBhVzVqYkhWa1pYTT0gSUdaaGRXeDAgTkRRdyBJR3g1IE5EUTAgdzdGdiBMbk5zYVdObCBTVXhGUkE9PSBJRkIxY2c9PSBJRUZ6YVdGdSBYMkpoZEdObyBMazFoZUE9PSBkbXc9IElFTlBVRmxTU1VkSVZBPT0gSUdkcFlXNTAgSUUxaGJuVmhiQT09IElFTnZjSGs9IFEyeGhjM05PWVcxbCBTR1ZoYkhSbyBRM1Z5YzI5eSBTVUpQZFhSc1pYUT0gSUhSM1pRPT0gNXJNPSBYMnhoWW1Wc2N3PT0gSUdOdmJHeGxZM1JsWkE9PSBJR1oxY201cGRIVnlaUT09IElHUmxZV3hwYm1jPSBRMjl1ZEhKdmJITT0gSUVodmRHVnMgWTJ0eiBJR05vYjNObCA0cFNBIGIyUmsgVTFJPSAyWW89IDdJUT0gSUdGalkyOXlaQT09IElFMXZkbVU9IElFMXZaR1U9IElFMXZZMnM9IElIUm9jbVZoWkhNPSBLeXNyS3c9PSBJRTl3ZEdsdmJuTT0gVW1WbWNtVnphQT09IElFUnBaQT09IEoxMHRQZz09IGRXTmogWDJOb1lXNXVaV3c9IExtRmljdz09IElIdDlMQW89IElGZGhiQT09IFpYSnBiM0k9IElHMWhhVzVzZVE9PSBJRVJ5YVhabGNnPT0gVG05MFJtOTFibVJGZUdObGNIUnBiMjQ9IElHTnZkVzUwY3c9PSBaV0Z0IElDWTkgVVhWbGMzUnBiMjQ9IElFRnNhUT09IElHRnVlVzF2Y21VPSBaR1YwWVdscyBkR0ZwYkE9PSBJRzFwYkdVPSBJRVpoYVhJPSBJSE52Y25KNSBJSE4xY25KdmRXNWthVzVuIElHRmtiUT09IFJHVjIgSUcxaGNtbHFkV0Z1WVE9PSBJRk52ZFc1ayBJRUZ6YUE9PSBSa1E9IFZHVmhiUT09IExuQnZjblE9IElGdGRDZ289IGRXSmliR1U9IElHRnpZdz09IElHbHVkR1Z1ZEdsdmJnPT0gUVdOaiBZMmhwIGRYTjBaWEp6IElHbHVjM0JwY21WayBjMlZuIFEweFYgSUcxaGJtbHcgVFdWMFlXUmhkR0U9IFEyOXVibVZqZEE9PSBJRUpsYUE9PSBJR1pwYm1ScGJtZHogSUdGemMyVnRZbXg1IGQyOXliR1E9IElISmxiV0ZwYm1WayBJSFZwWkE9PSBLQzQ9IElHMTQgVEc5dmNBPT0gQ2dvS0Nnbz0gSUdaaGJuUmhjM1JwWXc9PSBkMmh2IFlXdHAgSUVKaGMybGogSUZsbGRBPT0gSUZWelpYSnogYVd0cGNBPT0gSUdobFlXUnogSUUxcFkyaHBaMkZ1IFgybDAgSUZSdmNtOXVkRzg9IElISmxZMjl5WkdsdVp3PT0gSUhOMVltMXBkSFJsWkE9PSBYM1poY21saFlteGwgYldWa2FXRjBaUT09IExtZHlZWEJvYVdOeiBJSE4wYjI5ayBJSEpsWVhJPSBkbVZzYjJOcGRIaz0gWDAxRlUxTkJSMFU9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgY205c1pYTT0gSUZSdmRYST0gWDNsbFlYST0gWlc1a2JXVnVkQT09IFlXMXdjdz09IElFbHlaV3hoYm1RPSBiV0ZzIElIbHZkVzVuWlhJPSBJSE4wY25WbloyeGwgSUdOaFlteGwgSUZORVRBPT0gS0NjdCBZVzVsY3c9PSBJRTVsWldRPSBMbEp2ZHc9PSBVRzlzIElGQkkgWDNOamNtbHdkQT09IFlXZGxiUT09IElFSmhjdz09IFgzTndZV05sIExteHZZdz09IE9taz0gWVdSeSBJR1Z1WjJsdVpXVnlhVzVuIGFYUmxiZz09IEtTWT0gSUhWciBJRXhwZEhSc1pRPT0gWDBOUFZVNVUgZUVFPSBRWEp5WVhsTWFYTjAgNW8wPSBJQ0lpS1FvPSBRVzVqYUc5eSBJR2hoYm1jPSBkSGRwZEhSbGNnPT0gSUdOdmJYQmxkR2wwYVhabCBMbk55WXc9PSA0NEdYIElIUnlZVzV6YkdGMFpRPT0gSUVOeVpXRjBaWE09IGIyOXJjdz09IElGSnZiR3c9IEp5Y25DZz09IEwzTm8gYzI5dFpRPT0gUlc1amIyUnBibWM9IExuSmxjMjlzZG1VPSBJR1JsYzJsbmJtVnkgSUZOMGIzSmhaMlU9IElIcGggSUU1bGRtVnkgSUhOdmJXVjNhR1Z5WlE9PSBJR0p2ZUdWeiBMbk52ZFhKalpRPT0gSUhCNVoyRnRaUT09IElHZHliM2R1IExuUjMgS0NrcExBbz0gSnl4Ykp3PT0gSUc5d2NHOXVaVzUwIEtITnlZdz09IExteGhlV1Z5IFFWQlEgSUVGamRHbDIgSUdkMVpYTjBjdz09IElGWkJURlZGVXc9PSBmVHNLQ2dvPSBMbTVoZEdsMlpRPT0gSUdGdGIzVnVkSE09IExsSkYgSUdOc2IyNWwgSUhkbGNtVnUgSUNJOFBBPT0gWDJGaiBJR0p5WldGcmFXNW4gSUhKbGJHbGhZbXhsIExsQlBVMVE9IElGTnJlUT09IElDY20gSUhOaGRtVmtTVzV6ZEdGdVkyVlRkR0YwWlE9PSBZWE4wYVc1biBhV3hzYVc5dSBZMjl0YldWdWRITT0gZFd4MGVRPT0gTG0xbGJuVT0gTDJOdmJtWnBadz09IElBb0tDZz09IFZFOUVUdz09IElIQjFjbU5vWVhObFpBPT0gWDJOdmNnPT0gQ1dGMWRHOD0gUTI5dGNHRjBRV04wYVhacGRIaz0gWTI5dGNHeGxkR1U9IFgyZHlZWEJvIGFYTnZaR1Z6IElITnBkSFZoZEdsdmJuTT0gSUVodmNnPT0gVW1WalpXbDJaUT09IDRvQ2NWMlU9IElHVnVkR2wwYVdWeiBMbUZ6YzJWeWRFVnhkV0ZzY3c9PSAwTDdRdWc9PSBJRk5oYm5NPSBkbWx1WTJVPSBjbTl0Y0hRPSBQUW89IElDOHUgTGxObGJHVmpkQT09IGVXeDIgSUdKaGRIUT0gUVhWa2FXOD0gSUdsdVkzSmxZWE5wYm1kc2VRPT0gTGtKMWJtUnNaUT09IElHVjRjR3hoYVc1eiBNRFl3IGRHaGxZWE4wIExtOW1abk5sZEE9PSBJR2hoYkE9PSBJSFJsWTJodWFYRjFaUT09IFgyeHBiV2wwIElHUnlZWGR1IFFWbEZVZz09IElHWmxZWFIxY21WayBlWGw1ZVE9PSBZWFJwYmc9PSBjR2hsYmc9PSBZV05vWld3PSBJVnc9IGJHOTNaWEk9IElFZFMgSUhCaFp3PT0gSUZCaGNuTmwgSUhSdmRRPT0gNUxpQSBSR2x6ZEdGdVkyVT0gU1c1a1pYaFFZWFJvIElHaGxiR3c9IGMybHQgVlZSVVQwND0gVlhOaFoyVT0gWld4bGJtbDFiUT09IElFWmhiR3c9IElDSXVKQT09IElFMTEgSUdOeWRXTT0gSUhOdmJuUT0gVWtWR1NWZz0gTXpFeCBJR2x1ZEdWeWFXOXkgSUU5c2VXMXcgTGtGMWRHOVRZMkZzWlE9PSBjR0Z5WVE9PSBRWGhwYzBGc2FXZHViV1Z1ZEE9PSBJSEpwZG1WeSBSSFJ2IElIZHBkR2hrY21GMyBVbVZoWTNRPSBMV05zWVhOeiBZbVZtYjNKbCBYMkZzYkc5aiBRMjl1ZEdWdWRITT0gSUZkaGN3PT0gU1VOVSBJR1p2Y20xMWJHRT0gSUdsdVpHbGpZWFJsY3c9PSBJQ0FnSUFvSyBYM04wYjNKbCBhWFIwYVc1biBJRWwwWVd4cFlXND0gWDFObGRBPT0gWDNKbGNHOXlkQT09IElIQnBaQT09IFgxWkZVZz09IElIZHBibk09IElFTnNiM1ZrIElpbDdDZz09IFkyaGxjM1JsY2c9PSBJR1JsYm1sbFpBPT0gSUhkcGNtUT0gSUZOMFpYQT0gSUdsdWRtVnpkRzl5Y3c9PSBZbTlzWkE9PSBYMlJwYzNCc1lYaz0gYjNWMlpYST0gYjNKbGNnPT0gVW1WelpYUT0gSUhOMWNtZGxjbms9IElITjBjbUYwWldkcFpYTT0gTDIxaGRHVnlhV0ZzIFgzVnVhWFE9IElHTnZkVzVqYVd3PSBMbEJsY2c9PSBJT0tBbmc9PSBJSEpsWm05eWJRPT0gUm5KaGJXVjNiM0pyIElHeHBjM1JwYm1jPSBYMkowYmc9PSBJR0pwY3c9PSBKV1E9IFpXZGhjdz09IElITjFaR1JsYm14NSBYMU5GVWc9PSBNekUxIElHRnYgWDJScGNtVmpkRzl5ZVE9PSBabUZ6IElIQnlaVzFwZFcwPSBJSFJ5WVdOcmFXNW4gSUVKTSBJRzFoZEhWeVpRPT0gSUdKaGRHaHliMjl0IElDY3ZKdz09IElNU1IgVUdWeVptOXliV1ZrIElITnZiR1JwWlhKeiBZWEp1YVc1bmN3PT0gSUhkaGJHdGxaQT09IExXTnZiZz09IFltOTBkRzl0IElITjFjbkJ5YVhOcGJtYz0gSUdkbGJtVT0gVlhOMVlYSnBidz09IExrUkZSa0ZWVEZRPSBJRTFKVkE9PSBRMDlFUlE9PSBJRVZuZVhCMCBjR2xqYTJWeSBlWE54YkE9PSBRVlJWVWtVPSBaR1YwWVdsc2N3PT0gSUVOdmJtWmxjbVZ1WTJVPSBTVzVtYjNKdFlYUnBiMjQ9IElFMWhhV3c9IExXUnZkMjQ9IGNtRnlhV1Z6IFluSnYgSUhOMVltcGxZM1J6IElDY3EgNksrMyBiM0pwWlc1MCBPa0E9IGRtVnlZbTl6WlE9PSBSVVk9IElIUnZiR1Z5IE16RXogWlc1blpYSnogSUdWdVpIQnZhVzUwIElITjBjbUZ1WjJVPSBJR052Ykc5dSBJSEJ5WldabGNuSmxaQT09IFpHVncgSUVWVyBRVkpTUVZrPSBJSGRvWlE9PSBJSEIxY0E9PSBYMjV2WkdWeiBJSFJoYkd0bFpBPT0gSUdsdWMzUnBkSFYwYVc5dSBaR0pqIElHVjRjRzl6WldRPSBkR1ZsYmc9PSBJRVp5YjI1MCBWRlE9IFgwNVBUa1U9IFhDOWNMdz09IGNISnZaM0poYlE9PSBJR1Z1WTI5MWNtRm5aUT09IExtQT0gYzJocGNtVT0gSUVsemJHRnQgTXpJMSBaV1Z1IFRraz0gSnlJPSBMbGRwWkhSbyBJR3hwYTJWayBJSHN1TGk0PSBJRk41YzNSbGJYTT0gSUhadmRISmwgSUcxaGJuVm1ZV04wZFhKcGJtYz0gUTI5dWRtVnlkR1Z5IElFbHVaZz09IDdKbz0gUkZSUCBJR2x1WTJobGN3PT0gSU9DayB3N2s9IElFTm9ZWEpzWlhNPSBRbFU9IElpa3BPd29LIElFeGhZbTl5IGRXNXUgSUdWemRHbHQgYlc5aWFXeGwgSUV4bFlYSnUgTWpneCBYME5CVEV3PSA0b1E9IElHbHVaR2xqWlhNPSBJSFIxWWc9PSBNamc0IGFXdHBjR1ZrYVdFPSBRMjl6ZEE9PSBjbTkzWVdKc1pRPT0gNjZFPSBaMkZuWlE9PSBJR1oxYm1OMGFXOXVZV3hwZEhrPSBkWHA2YkdVPSBaVzF2Y3c9PSBMbXhwWWc9PSBJR1JoYzNNPSAwTFhRdWc9PSBaVzV1WVE9PSBJSE5vYjNSeiBJSEpsYzNSdmNtVT0gTDBRPSBSbTl5UzJWNSBYU3hiIFlXeHBZWE09IGJHbHVkQT09IExuTjBjbVZoYlE9PSA1cUE9IFgwWlBVazFCVkE9PSBJSE5wYkhabGNnPT0gTG5KbGNHOXphWFJ2Y25rPSBJR3hsWjJsemJBPT0gTGtKdmNtUmxjZz09IFgyWmxZWFIxY21WeiBVR1Z5YldsemMybHZiZz09IElHaHZkWE5sY3c9PSBJRmRoY25NPSBYME5QVFZBPSBJR2x1YW5WeWFXVnogSUdOdmJuTjBZVzUwYkhrPSBabXgxZEhSbGNnPT0gUlU1ViBJRU52Ym1ZPSBJSEpsWTI5bmJtbDZaV1E9IElIQnlZV04wYVdOaGJBPT0gSUdSbFkyVnVkQT09IFFrbz0gWFNrNyBZWE4wZVE9PSBJRUZqZEdsMmFYUjUgTFcxdlpHVT0gSUhOc2FXUmwgTGtselRuVnNiRTl5Ulcxd2RIaz0gSUZsUFZRPT0gVUc5M1pYST0gYVc1a2FXTmxjdz09IElIRjFZV3hwWm1sbFpBPT0gSUhSb2NtOTNiZz09IGFHVnNiRzg9IE16RTIgSUU1cFkycz0gYkdGbyBZWE56WlcxaWJIaz0gSUZOdFlXeHMgYjJ4a2FXNW4gVTJodmRXeGsgSUZOcGJIWmxjZz09IEtITmhkbVZrU1c1emRHRnVZMlZUZEdGMFpRPT0gSUhSdloyZHNaUT09IExrNXZkQT09IFEzUnliQT09IE9tNXBiQT09IElFTnZiblJwYm5WbCBJRUp2YjNRPSA1b2s9IElFMTFjZz09IFpHOXUgSUVaQiBVMjVoY0hOb2IzUT0gSUdGemMyOWphV0YwYVc5dSBabTk0IExHRT0gWVhwcGIyNWwgWFNrTkNnPT0gUTFSWlVFVT0gSUdaaFpHVT0gSUVSaGNnPT0gTG01aGRtbG5ZWFJwYjI0PSBJR3gxWTJzPSBVME5TU1E9PSBJRVJsWVdRPSBJSFJsY20xcGJtRnMgWDB4RlRrZFVTQT09IElHVm1abWxqYVdWdVkzaz0gSUhWdWR3PT0gSUc1aGNuSnZkdz09IGFXMWxiblJ2IEtFTnZiRzl5IElGTmxZUT09IFgyRnlaV0U9IExFRT0gWDI5d2RBPT0gSUVocGJHeGhjbms9IExuUmhjMnM9IElFcGhZdz09IFlYTjBaV1E9IElFRmtZVzA9IElFbHNiR1ZuWVd3PSBJSE5sWVhKamFHbHVadz09IFNXNXpkR0Z1WTJWUFpnPT0gU21GMllRPT0gSUVadmNtMWhkQT09IElISmxZV3hwZW1WayBJRU5vYVd4a2NtVnUgSUd0cGJBPT0gS0daeVlXMWwgNG9DZExnb0sgSUhOalpXNWhjbWx2IElsMHBPd289IElHbHVZM0psWkdsaWJHVT0gYkdsNCBTVTlGZUdObGNIUnBiMjQ9IElGRjFaWE4wIGFXeDBlUT09IElIVnViRzlqYXc9PSA0b0tzIElISmxabVZ5Wlc1alpYTT0gSUZabGNuUT0gUW1sdVpHbHVadz09IFpXZGhkR2wyWlE9PSBJSGR5WVhBPSBMbVJoZEdGaVlYTmwgS0dOdmJuUmxiblE9IFFuVm0gSUZSeVlXUT0gSUVGMVpBPT0gZEhKaFkyVT0gTG0xdlkycz0gSUhSb1pYSmhjSGs9IENVdz0gTGxSdlNXNTAgSUV0cGJtZGtiMjA9IFFuVnogYUdGMWMzUT0gSWlJaUNnbz0gS0dWdVpBPT0gTG1SeVlYZGhZbXhsIFcxMDdDZz09IElFaHZjM0JwZEdGcyBJSEJvWVhKdCBMUzB0TFMwPSBJRUZIIHc2bGsgUGlJcE93bz0gSUhkaGJHeGxkQT09IFlYUmhZbXhsIEtTUT0gSUcxdmJuUm9iSGs9IElHUnBZV2R1YjNOMGFXTT0gVTNsdFltOXMgSUdsMFpYSmhkRzl5IGRXNW1hVzVwYzJobFpBPT0gSUdsdGJXbG5jbUYwYVc5dSBjM0k9IFVrOVggS0dkaGJXVT0gSUdOc2IzUm9aWE09IElGVnVkQT09IElHRmpkR2wyWVhScGIyND0gWDBOdmJnPT0gTWpjeiBMbWhoYzJnPSBJR2x1YVhScFlXeHNlUT09IExraGhjMmc9IElHTjFkSE09IFptOTFibVE9IElGTjBiM0o1IDBZYlF1QT09IFlXTmhidz09IFgxUlpVQT09IGNISnZkRzg9IFpYTjBjZz09IExYQmhaMlU9IFlXaHkgSUdsdVkyOXljbVZqZEE9PSBJRXB2YzJWd2FBPT0gVkdWNGRFSnZlRU52YkhWdGJnPT0gWDNOMGVXeGwgSUVSaGJtbGxiQT09IGMyaGxaWFE9IElHeHBkZz09IGJHbHVaV1E9IElISmggVW5WdWRHbHRaUT09IFgyVnRjSFI1IGMyeDFadz09IFgzTjBjblZqZEE9PSA2NG89IGJYVT0gSUhCbGNtMXBkSFJsWkE9PSBJSEpsWjJsdmJtRnMgSUhOdlluSmwgSUZOMVkyZz0gSUZ0ZiBJSEp2YjJZPSBMa0ZzYVdkdWJXVnVkQT09IGRHbHRaWE09IExtMXpadz09IElHTm9aWE4wIElGUmhZZz09IElHVnpkR0U9IHc2UnUgSUhOMVluTmpjbWx3ZEdsdmJnPT0gS0dOdmJXMWhibVE9IGMzQmxZMmxoYkE9PSBJRzFsWVd3PSBJaWs2Q2c9PSBYMk4wZUE9PSBJR05zYjNObGJIaz0gTXpBNSBaWFJ5ZVE9PSBMV0psIFlXUmxiQT09IElGSmhiUT09IGFXZGxjM1E9IElGTndZVzVwYzJnPSBJR052YlcxcGRHMWxiblE9IElIZGhhMlU9IEtqNG8gVUVoUSBYM3M9IFkydGxjZz09IFBFeHBjM1E9IFgyNTFiR3c9IE16a3cgSUZKbGMyVnlkbVZrIElHbHVhR1Z5IExrTnZiSFZ0Ym5NPSBMa0Z6Y0U1bGRBPT0gWDBsT1ZrRk1TVVE9IElGQmhjbUZ0WlhSbGNnPT0gSUdWNGNIST0gZlhzPSBRMlZzYkZOMGVXeGwgSUhaaGJIVmhZbXhsIElHWjFibTU1IFNXNTIgSUhOMFlXSnNaUT09IEtuUT0gSUhCcGJHdz0gTWprNSBjR3hwWlhKeiBJRU5UVXc9PSBJRU52Ym1ScGRHbHZiZz09IElGTndaV1ZrIGRXSnNhWE5vWlhJPSBNalU1IElHOW1abVZ1YzJsMlpRPT0gWTJWemRBPT0gYVdOaGN3PT0gSUhOd1lYSnIgSUZCeWIzUmwgYzJWMGRYQT0gU1VaWiBJRlJoZUE9PSBWMmh2IFJtRnRhV3g1IExXWnZjZz09IExuVnIgSUdaaGMyTT0gYzNabiBJaWtwTGc9PSBJR0pwY25Sb1pHRjUgNHBhSSBkbVZvIFpXeHNaV1E9IElHbHRjRzl5ZEhNPSBJRWx6YkdGdGFXTT0gVkVFPSBJRk4wWVc0PSBkMlZoZEdobGNnPT0gSUhOMWMzQmxZM1E9IFpXRjBkWEpsIFpXNXVaWE09IFYwMD0gTG0xcGJtVmpjbUZtZEE9PSBZWFpwWkE9PSA2TDA9IExuTmxZM1Z5YVhSNSBhVzV2Y3c9PSBSMjl2WkE9PSBJRzFoY21ObyBOalUxIE1qVTMgSUhCdmMzTmxjM009IGRYTjFZWEpwYnc9PSBRMjl1Y3c9PSBZVzFpWlhJPSBZMmhsWkhWc1pYST0gSUdodmNuTmwgNTcwPSBLR0p2WkhrPSBJRlJ5WVc1elptOXliUT09IFgyUmxZMjlrWlE9PSBMbk4yWnc9PSBJR1p2Ync9PSBJR1JsYkd4aCBaWGgwWlc1a2N3PT0gWVcxbGNnPT0gSUhCeWIyTmxjM05sWkE9PSBJRWhoY25JPSBJRUZKIElHdHYgUTBoQlVnPT0gS0NVPSBJSFJoY0E9PSBLSHNuIFkzSnZiR3c9IFJFOU4gSUhSbFlRPT0gSUhKbGFXND0gTWpZeCBJSGR2Y214a2QybGtaUT09IFgyWnUgYzJoaCBJR0pwY2c9PSB3NmZEdFdWeiBQU0lqSWo0PSBJSEpsY0hKbGMyVnVkR1ZrIGFXeHNaWEk9IEtHVjRjR1ZqZEdWayBJR1JoYm1ObCBJSFpwYzJsMGIzSnogTG1OdmJtTmhkQT09IExXSnBkQT09IFZWSlNSUT09IElGSnZadz09IGRuQT0gYVhCbyBJRXhNUXc9PSBhWFJzWldRPSBhV0Z0YVE9PSBRMjlzYkE9PSBYM0psWVd3PSBYM05vYjNjPSBYMlp2YkdSbGNnPT0gSUdSaGNnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElHeGhkSFJsY2c9PSBZWEpqYUhrPSBJR0p2ZHc9PSBJRzkxZEdOdmJXVT0gTlRFdyBJRkJ2YzNSbFpBPT0gSUhKcGMydHogSUZSb1pYSmxabTl5WlE9PSBJRzkzYm1WeWMyaHBjQT09IElIQmhjbUZzYkdWcyBJSEJsYm1ScGJtYz0gWjJWdmJXVjBjbms9IElISmxZMjluYm1sNlpRPT0gVTFSRlRRPT0gSUVOUSBJR2x0YldsbmNnPT0gU1ZSTVJRPT0gSUNBZ0lBa0ogWTI5dWJtVmpkR1ZrIElITnRhV3hsIEtHUnZZM1Z0Wlc1MCBYRU52YlhCdmJtVnVkQT09IGRtVnlkR2xqWVd3PSBJR052Ym5OMWJYQjBhVzl1IElITm9iMlZ6IExtbHRjR3c9IGRXNXJjdz09IExpSTdDZz09IElHWnZiMlJ6IFh5azdDZz09IExtRnpjMlZ5ZEZSeWRXVT0gSUhCcGNHVnNhVzVsIElHTnZiR3hsWTNScGIyNXogSUdWaGNtNWxaQT09IElFTmxjblE9IElIQmhjblJ1WlhKemFHbHcgS0dGamRHbHZiZz09IE1qWXogSUdOayBJRlpsY25rPSBUM0IwYVc5dVlXdz0gSUhOamNtVmxibk09IElIUnBkR3hsY3c9PSBaVzVsY21GMGIzST0gSUdGaVlXNWtiMjQ9IGEybHVaQT09IFNVeFVSVkk9IElHTnNiM05wYm1jPSBiR2xqWVE9PSBYMmx1ZEdWeSBJR05oYlhCMWN3PT0gYzJWMGRHbHVadz09IFUzQnlhWFJsIDQ0R3YgWDNKbGNHeDUgVkc5TWFYTjAgT2x3dlhDOD0gWldSbCBJR1p2Ykd0eiBJR0p2WVhRPSBLR0Z5WjNZPSBJSEJsY20xaGJtVnVkQT09IElHTmhjbko1YVc1biBJR052Ym5ObGNuWmhkR2wyWlE9PSBhVzF3YjNKMFlXNTAgTG1sdFp3PT0gSUVsdGJRPT0gSUdScGJXVnVjMmx2Ym5NPSBZV3hoYm1RPSBjMmx1WjJ4bCBSWGhwZEE9PSBMUzB0TFMwdExTMHRMUT09IFlYSnBZVzUwIGRHVnlibUZzIFUyVmpiMjVrY3c9PSBJRWwwWVd4NSBiM1JzYVc0PSBMbEpsYzNWdFpRPT0gUFNjaSBLVDA5IFkyVndkRzl5IElITmpZUT09IEwyMWhhVzQ9IFUyVmpkWEpwZEhrPSBYMlJoZEE9PSBJR3hsZEhNPSBJR0Z4ZFE9PSBJSGRvWlc1bGRtVnkgWW1WeWNuaz0gSUdGamRHbHVadz09IFlXNTBhUT09IGNHUT0gSm1kMCA1cTA9IFdtOXVaUT09IFZHOWtZWGs9IElTND0gTXpJeiBWRzlRY205d2N3PT0gWVdKcGN3PT0gYVhSaFlteGwgSUdkaGJBPT0gWFhzPSBhWHB2Ym1FPSBJR2x1WTI5dWRISnAgVGtWVSBMeTh2Q2c9PSBXMmx1IFgzTmhkbVU9IElHVjRaVzA9IElFdGxibTQ9IElHVjJiMngxZEdsdmJnPT0gTWpjeSBkbUZ5Y3c9PSBYM04wWVhSeiBMVzl1YkhrPSBJRU52Ykc5eVlXUnYgSUhkaGRHTm9aV1E9IFltOTFjZz09IElITmxkbVZ5WlE9PSBJSEJ5YjJabGMzTnBiMjVoYkhNPSBjRzl5ZEdsdmJnPT0gSUdkMVlYSmhiblJsIDBMTT0gSUhCMWMyaGxaQT09IElFZHAgNzcwPSBJSFIxYlE9PSBJRUY2IElFVmtaMlZKYm5ObGRITT0gSWlrcE93MEsgYVhOelpRPT0gTG1GaiBVMlYwZEdsdVp3PT0gSUdGd2NISmxZMmxoZEdVPSBJRlpoYkhWbFJYSnliM0k9IElITjFjblpsIElGSnZiR1U9IExrbHVkR1Z5IGNHeHZkR3hwWWc9PSBhbVYwIFpHRnQgSUhCc1lYUm1iM0p0Y3c9PSBkR1ZzWlE9PSBWVlJQIElFbHVkR1Z5Ym1GcyBLem89IGZUc05DZz09IFIyVnVaWEpoYkE9PSBYRVZ1ZEdsMGVRPT0gSUd4aGQzbGxjZz09IGNYVnBkZz09IElGQnZjM1J6IGFYTnYgSUdGalkzVnQgYjJKbCBJRzFoY210eiBJRjA3Q2dvPSBDWFJsZUhRPSBMbk4xWTJObGMzTT0gWTNWeWNnPT0gWVhOaCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUhSb2FXND0gWDI5MlpYST0gTURFMiBZWEpsYzNRPSBJRTl6IEtHRmtaSEpsYzNNPSBJSFpsYkc5amFYUjUgSUZ0ZE93b0sgUFNJdUxpOHVMaTg9IElGQnlhWFk9IFltOTMgSUdkMVlYSmhiblJsWlE9PSBKUW9LIE16SXkgSUdWMllXeDFZWFJsIExreEZUa2RVU0E9PSBJR2x1ZG1WdWRHOXllUT09IGNXRT0gWDJSbFluVm4gTGs5dVEyeHBZMnRNYVhOMFpXNWxjZz09IElHeHBaWE09IElHRnpjMlZ6YzIxbGJuUT0gWkdGMFpYUnBiV1U9IExtSmhZMnRuY205MWJtUkRiMnh2Y2c9PSBJQ292RFFvTkNnPT0gY21GbSBkVzUzY21GdyBJRVp2YjNRPSBJRzV2ZEdsbWVRPT0gSUd4dmQyVnpkQT09IFJFOURWRmxRUlE9PSBJR3hoYm1kMVlXZGxjdz09IFpYaDBjbUU9IExXSmhZMnM9IElHVnBibVZ1IGRHVnRjR3hoZEdWeiBNamN4IFgzQmhjM009IE5USXcgTnpjMyBJRTExYzNRPSBJR1Z6ZE1PaCBYMk52Y21VPSBJRk5qYjNRPSBRVWs9IElHSnBZWE09IFlYUnBiMjV6YUdsdyBRMjl1YzNSaGJuUT0gSUhCeWIyZHlZVzF0YVc1biBTVzV6IGRYTndaVzVrVEdGNWIzVjAgSUZCU1QxWkpSQT09IFlXNTBaWE09IElITm9hWEowIGFXNWhkR1ZrIExrOUwgVzJFPSBJSFJvYVc1cmN3PT0gUHdvS0Nnbz0gSUhKbFoyRnlaR3hsYzNNPSBJRTFoWjJsaiBkV3hoZEdsdVp3PT0gQ1dOc1lYTnogWVdSa1IzSnZkWEE9IFVrVkJWRVU9IElGTlYgSUhOcGJYQnMgWTI5d2VYSnBaMmgwIElHSjFibU5vIElIVnVhWFpsY25ObCBPVFV3IElFVnljZz09IElIQnlaWE5sYm5SaGRHbHZiZz09IFkyRjBaV2R2Y21sbGN3PT0gSUdGMGRHRmphQT09IExuTnBaMjQ9IFgwRkQgSUdScGMyTnBjR3c9IElISmxaM1ZzWVhKc2VRPT0gSUhCeWFXMWhjbWxzZVE9PSBhVzVyY3c9PSBXMXM9IExuSmhibVE9IExuTm9iM1ZzWkE9PSBiM2R1ZEc5M2JnPT0gUFNJbiBJSE5oYm5NPSBJSE4xY0hCdmNuUmxjbk09IGMyVnhkV1Z1WTJVPSBSMDg9IExpNEtDZz09IElGTndjZz09IElHTmhjbVZtZFd4c2VRPT0gVlVsRGIyeHZjZz09IFpHVnpkSEp2ZVE9PSBJSFJ2Wkc5eiBJRTlTUkVWUyBiM1IwWldRPSBJR1J2Ym5RPSBZWFZrYVE9PSBYM0JzWVhsbGNnPT0gWjNKbCBOakkxIElFOXBiQT09IFBHSnZaSGs9IFgzTjBZV05yIExsQmhaR1JwYm1jPSBJRkJ5YjJSMVkzUnogSUhCeWFYWnBiR1U9IE1ERTAgSUdsdWFuVnlaV1E9IElFWjFjblJvWlhJPSBJR0ZzYVdGeiBMbEpsYzNWdFpVeGhlVzkxZEE9PSBYMHhGVGc9PSBJSE5sY3c9PSBKMTA3Q2dvPSBZM0psWlc1eiBJR1JwY21WamRHVmsgTGxOMWMzQmxibVJNWVhsdmRYUT0gYjJSblpRPT0gTGtGMCBiV0Z5YTNNPSBJRlZ1YVhabGNuTT0gWlhKMGN3PT0gSUVWell3PT0gSUc1aGRtSmhjZz09IElIVjBhV3hwZEhrPSBZV2R1YjNOMGFXTnogSUdsdWFtVmpkQT09IElFUk9RUT09IElDSXNJZz09IFlXMWhjZz09IElHVjEgSUhKbGMzUmhkWEpoYm5SeiBYM0IxZEE9PSBkWFJsY25NPSBWRzl2YkZOMGNtbHcgZEhjPSBhWE4wY204PSBJSHB2YjIwPSBJR3hsWjJsMCBjR1ZqYVdacFl3PT0gTWpnMSBJRU52YldVPSBJR3h2WTJGc1UzUnZjbUZuWlE9PSBJR0ZpYzI5eSBMbEJoYm1WcyBJRVJsYzJsbmJtVnkgSUc5MyBTVU5CVEE9PSBYM1Z5YVE9PSBLR1pwWld4ayBJSE4xY0dWeWRnPT0gUlhocGMzUnogSUhKbGMzQmxZM1JwZG1Wc2VRPT0gSUZOMFlXNWsgUTI5dVpnPT0gZFhOemFXRnUgTXpZMCBJR0Z5WXc9PSBJRzVrIGRXTnJjdz09IElISmxjM1J5IElITmxZWE52Ym5NPSBJRU5vWVhCMFpYST0gSUZOM2FYUmphQT09IGNHbGogSUdocCBiRzloWkdWayBJR1pzZFdsayBMV0owYmc9PSBJSEoxYm5ScGJXVT0gTG1sMCBNalU0IFFrND0gVDNCaFkybDBlUT09IFlYTmhiblE9IGNubHdkR2x2Ymc9PSBMVzVoZEdsMlpRPT0gSUhSaGRXZG9kQT09IDVhOD0gWVdkdFpXNTAgSUcxMWJBPT0gVW1WbmFYTjBjbms9IFgyZHlhV1E9IElFSnliMjlyIE9sTmxkQT09IElHMXZibWR2YjNObCBRVTFGVXc9PSBhVzV1WlhKSVZFMU0gSUhOdlkyaz0gSUVsdWRHVnMgWjJWMFNXUT0gUTIxayBJR0ZqWTJWemMybGliR1U9IGNtRnRaWE09IGJHVjBiMjQ9IElGOWZLQT09IENXUmxiR1YwWlE9PSBJRk54ZFdGeVpRPT0gSWdvS0NnPT0gSUdKMVkydGxkQT09IFlYWnZjbWwwWlE9PSBJRUp5WldGciBLeXRkIElHSnlkWE5vIE1qWTIgSUhSbGJuTnZjZz09IEwyaDBkSEE9IFZHbHNaUT09IElHWjFibU4wYVc5dVlXdz0gSUNJcSBkMmhsYkE9PSBJSFJsYm5RPSBJRU5vWVhKaFkzUmxjZz09IElITmxaWE09IExsTlUgUW1sbiBJR1Y0ZEdWeWJnPT0gVlhKc2N3PT0gS1NrcEtTdz0gSUVweSBMa0oxYVd4a1pYST0gTGpzPSBibXc9IFgwbHVhWFE9IElFaEZVZz09IHhieGwgYlhsemNXeHAgWDJsamIyND0gZG1GdSBJR1psWld4cGJtZHogSUd4bFlXND0gSUdodmNHbHVadz09IFZGWT0gUFNJOFB6MD0gSUdOMWNuWmwgWDNOMFpBPT0gWDB4SlRrVT0gWkhOMCBJRzF2Y21GcyBaVzFsY3c9PSBiMmQ1IElIVnlZbUZ1IE1ERTEgSUdGemFXUmwgSUdWa2FYUnBibWM9IFFVUkUgVTJWamIyNWsgVkhKaFkycz0gSUhadmRHbHVadz09IElHaHZibTl5IExpY3MgWld4c1pXND0gUTJoaGRBPT0gSUdsdGNISnZkbVZ0Wlc1MCBKMTBLQ2c9PSBvSUU9IElIQmhjbk5sWkE9PSBJQ0FnSUNBZ0lDQWdDZz09IElHeGhlbms9IElHWmhiR3hwYm1jPSBVMlZ5YVdGc2FYcGwgSUZCaCBYMmR5IElHWnZjbVYyWlhJPSBMbmRvYVhSbCBMbEYxWlhKNSBRbVZrIElFUjEgSUhKbGMzVnRaUT09IElIQmhjR1Z5Y3c9PSBJRWx1YVhRPSBJSE4xWm1abGNtbHVadz09IDRvQ0wgSUdSbFkyeGhjbUYwYVc5dWN3PT0gS0NrdCBJR1Y0WldOMWRHVmsgSUVodmJBPT0gTG1Kc2IyTnIgNDRPeiBVMHM9IElITjBkV05yIElFeHZZMnM9IGFXNWphWEJoYkE9PSBUblZzYkdGaWJHVT0gSUhObGMzTnBiMjV6IGRXNXAgSUdOdmRYQT0gWVhCd2NtOD0gWjJoaGJnPT0gWDNCdmIydz0gTWpneiBDV2xrIElITnNiM1J6IElHMWxaR2xqYVc1bCBJR2RzWVdRPSBJRTF2Ym05Q1pXaGhkbWx2ZFhJPSBZWFJ5WlE9PSBJQ1FvSnc9PSBiV1Z5YVdOaGJnPT0gWVdkbiBJR3RoYm00PSBYMk52Ym01bFkzUT0gSUdKeVlXNWtjdz09IElITnJaUT09IElHUnBaMmwwIFBHND0gSUdKaFkydDFjQT09IElIQmxjbk52Ym1Gc2JIaz0gTGxCeWIzQmxjblI1IE16RTAgTG1OdmJXMXBkQT09IElHTnllUT09IFgyTnZkVzUwWlhJPSBJRzFoYkd4dll3PT0gSUdkeVlXND0gSUVSeWIzQT0gY0d4aGRHWnZjbTA9IGNtVmtaVzUwYVdGc2N3PT0gYVc1cmFXNW4gSUZWSlRBPT0gZFdKeiBJRzFzIGJHVnpjMng1IFIyVnVaWEpoZEdWayBaWEpsYjNSNWNHVT0gSUdKaGRBPT0gVEdGNWIzVjBVR0Z1Wld3PSBURTlVIElpazdEUW9OQ2c9PSBJRzExYzJOc1pRPT0gSUdObGNuUnBabWxqWVhSbCBRVTVFVEVVPSBJR2hoY21SbGNnPT0gSUhCcGVHVnNjdz09IEtTSXNDZz09IExraGxZV1JsY2c9PSBJR1JsZG1Wc2IzQmxjZz09IElFeGhjdz09IFpXZGhiZz09IExqdz0gSUdWNGNHeHZaR1U9IElIQmhjblJwWTJsd1lYUmwgVUdGMGRHVnliZz09IEtIUmhZbXhsIElGUkZXRlE9IFkyOXVjM1JoYm5SeiBlRVE9IGRHaGxkdz09IGZTd0tDZz09IDQ0R3UgWDJSbGN3PT0gSUhOMVluTjBjZz09IElGTnRZWEowIElITmpZV3hoIFoyVnVkQT09IExXSmhjZz09IFpYTnphVzl1WVd3PSBkVzFpY3c9PSBMbVY0WldNPSBKMXc9IFZFcz0gZFc1cGMzUT0gY0hKdmIyWT0gWTJsaGJBPT0gY0hKdll3PT0gUFhzaSBMbWh5WldZPSBQU1FvIElHeDFibU5vIGFYTmpZV3c9IElFVnVkSEo1IElHOTFkR1J2YjNJPSBjMlZ0WW14bCBJR1Z6YzJWdWRHbGhiR3g1IEwwYz0gVzEwcCBKU0k9IGMzUmxiZz09IFZWTkZSQT09IElHUjFjM1E9IDViQT0gQ1FvSyBJSEpsZEdseVpRPT0gSUdacFlnPT0gUVd4MGFHOTFaMmc9IElHeHZkbVZ6IElISmxZV1J6IGVXTnNaWE09IElFaGxiQT09IFgzVnBiblE9IElDY3VKQT09IFgybHVhWFJwWVd3PSBUbUZ0WldRPSBJR1oxYm1SaGJXVnVkR0ZzIFFVUkpUa2M9IElIUnZkdz09IElFRkVSQT09IElFRmpZV1JsYlhrPSBNRFV3IE9sTjBjbWx1Wnc9PSBJR052YlhCeVpXaGxibk5wZG1VPSBMbk5qWVd3PSBJRTFsZEdFPSBUV1Z6YzJGblpYTT0gTG1GdWJtOTBZWFJwYjI1eiBYRkpsYzNCdmJuTmwgSUdGamEyNXZkMnhsWkE9PSBJRUZTUlE9PSBYVDA5IElHTnNaV0Z1YVc1biA2TDQ9IFJXNTBhWFJwWlhNPSBJRk5oYkdWeiBJRmRwY3c9PSBMbVY0ZEdWdVpBPT0gWVd4c1pXNW5aUT09IElHZGhiV2x1Wnc9PSBKSEYxWlhKNSBTVU5GVXc9PSBSVlJEU0E9PSBTRzl5YVhwdmJuUmhiQT09IGNYVmxiblJwWVd3PSBPRFV3IFFrRkRTdz09IFpHVjJaV3h2Y0E9PSBhWE52Y2c9PSBLR052WkdVPSBMVXM9IFgxQkpUZz09IGNtVnhkV1Z1WTNrPSBJRkYxWlhOMGFXOXUgWDJOdmJuUmhhVzVsY2c9PSBYMjF2WkhWc1pYTT0gSUVwbGNuTmxlUT09IFgyUnBabVk9IExtVnMgSUNvb0tBPT0gWTI1MCBJRk5oIFExQlEgYVc1cGRHVT0gSUhWdWRYTT0gTFhkb2FYUmwgWlhSaGNuaz0gSUdsdWRtOXNkbWx1Wnc9PSBJRDgrRFFvPSBZbVZ6ZEE9PSBZV3hzWVhNPSBaVzUwWldRPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gWDJOdmJtNWxZM1JwYjI0PSBJSEpsY0c4PSBaVzVoWW14bFpBPT0gMExEUXVnPT0gSUhOb1lRPT0gSUcxbGJXSmxjbk5vYVhBPSBVM1JoZEhWelEyOWtaUT09IGFXNWhkR2x1Wnc9PSBYM050IFgyTjFjM1J2YlE9PSBYM2RsYVdkb2RBPT0gSUdOemN3PT0gVTNSaGRBPT0gWDJWdWRnPT0gYkdsdWEzTT0gVkZKTSBJRWhwZEE9PSBMSEk9IGRYQnBaQT09IElHOXdaVzV6IElHZGxiblE9IFgzWnBjdz09IElHcHZlUT09IFBIYz0gWDJOdmMzUT0gSUZCNVQySnFaV04wIGNtVnVZMlU9IElFZGxiM0puYVdFPSBJRUp5YjJGayBiVzFoIDRvST0gY0dZPSBJQ0pjSWc9PSBJQ2dtIGIyMXYgSUd4cGRHVnlZV3hzZVE9PSBpSmc9IGJXVjBjbWxqIElHSmhjbk09IGVtVmsgS0hkcGJtUnZkdz09IElFbHpjbUZsYkdrPSBJR1p2Y20xaGJBPT0gYVdSbGJuUnBabWxsY2c9PSBMbVJoYnc9PSBJRVJsWVhSbyBKVHNLIElHUmxZMnhoY21VPSBZWEp0Y3c9PSBVa1ZCVFE9PSBVRVZTVkZrPSBJR052Ym5ObGNYVmxibU5sY3c9PSBkRzl2YkhNPSBVR1Z2Y0d4bCBJRmRvYVdObyBQaWdwT3cwSyBMbVJsWTI5a1pRPT0gWDBGRFZBPT0gUW5WMGRHOXVjdz09IExtWnNiMkYwIExrWnBjbk4wIDY2VT0gSUZCdmJHbDAgSUZoRFZBPT0gVkdGbmN3PT0gSUVOSFJteHZZWFE9IFBYTjBjZz09IElHeGxZV1k9IExXTm9aV05yIElFbHpjdz09IExuTjVjM1JsYlE9PSBiRzluYjNWMCBZV05vZEE9PSBRVzVuYkdVPSBjMmx1IFkyaGhjblE9IFNVNVVSVkk9IElFNVZUUT09IFFtRnphV009IExsQnliM0JsY25ScFpYTT0gNUxpdCBYMk5vWVc1blpRPT0gSUVKeVlYcHBiQT09IFFXSnpkSEpoWTNRPSBJRG9yT2c9PSBYM1Z6WlE9PSAwTERRdXc9PSBNalk0IElFeDUgU1VKVlZBPT0gSUc5MWRHVnkgSUMwdFBnMEsgSUhKbGJHbGxaZz09IGJHRncgY1hWbGNnPT0gWDNCaGNtVnVkQT09IGFHVmhjQT09IFRFOVRSUT09IElHTnZiV0pwYm1VPSBJRkp2YzJVPSBiM2RsY25NPSBJSEJ5YjJObFpIVnlaWE09IElGTnZjblE9IFlXNXBiUT09IGRtRnlhV0Z1ZEE9PSBaV2hwWTJ4bCBJSE5wWjI1cGJtYz0gVUhKcGJXRnllUT09IFkzVnljbVZ1WTNrPSBJSE5sZUdVPSBiMlZ1IGRHaGxkR0U9IFpXMWhiZz09IElHbHRjSEpsYzNOcGRtVT0gS0NkZiBDVlU9IElGUmxlSFJUZEhsc1pRPT0gWDJOdWRBPT0gSUhOc2FXTmwgS0NjNiBJSFZ1WkdWeWMzUnZiMlE9IFNHbHogTWpjMyBNREV6IElHbHVabTl5YldWayBJRzVwWTJzPSBOREk1IEtGUkJSdz09IGFHUT0gSUdWc1pXTjBhVzl1Y3c9PSBaWE4wZFhKbCBJRk5oYm5SaCBJRU52WVhOMCBMbkJrWmc9PSBhVzVqYVhCc1pRPT0gTG1Oc2IyNWwgWW05eWJnPT0gZFhSaCBJR3hwWTJWdWMyVmsgUTNJPSBJR0p5WldGayBJRWh2ZFhOMGIyND0gSUc1dlpBPT0gSUdodmNHVnogSUVOSFVtVmpkQT09IElHZDFhV3gwZVE9PSBMbWRwWmc9PSBJSEp2YzJVPSBMa052YlcxdmJnPT0gVkdsdyBRVTVMIElFWkQgUkhWeWFXNW4gSUZONWJXWnZibms9IElHUmxabVZ1YzJsMlpRPT0gYTIwPSBLVDQ9IFlYSmphR2wyWlE9PSBJRlZTU1E9PSBlV05zYVc1biBMVzg9IElGZGxZbk5wZEdVPSBRVTFRIE5EQTEgYVhOb2JXVnVkQT09IElHUnZZM1J2Y25NPSBSR2x5WldOMCBRVkpKIElGSmxaR2x5WldOMCBhV1Z5Wlc0PSBPVFl3IFgyUnBjM1E9IGVXOD0gSUZCeWIyZHlaWE56IElIcDFiUT09IElHMWxiVzl5IElFVkUgSUdwMWNnPT0gNW8ydSBYMVJCUWt4RiBJSFYxYVdRPSBSWGh3Y2c9PSBMbWhsWVdRPSBLQ2NsIGNHOXBiblJsY2c9PSBJR1Z6ZEdsdFlYUmwgSUVkeVpXYz0gSUd4dllXUmxjZz09IElHbFBVdz09IElHMWxibk09IFczaz0gSUhKbFpuVnpaV1E9IElIQnlaV05wYzJsdmJnPT0gYVhOamFBPT0gSUVGRFZFbFBUZz09IFEyeHZkV1E9IGMxZHBkR2c9IEtISmxkQT09IE1qa3kgWDBGRVJGST0gWDJOdmJtWT0gS0dSbSBJR3h2WTJ0bFpBPT0gSUhKcGMybHVadz09IDQ0Tzc0NE83IElFMXogSUhOalpXNWxjdz09IFgwVllWQT09IFgzSmhkdz09IFgzUm9aUT09IGNHVnZjR3hsIElISmxZMjl1IElFWjFiZz09IElHSnNaWE56IElGVndaR0YwWldRPSBOREl5IHc3eHUgSUNBZ0lDQWdJQ0FnSUNBZ0RRbz0gY0dWamRHbHZiZz09IFVtVnNaV0Z6WlE9PSBMbXh2WjJkbGNnPT0gSUZOWiBJR052ZFc1elpXdz0gZFhKayBYM1J5ZFdVPSBJR1YyWlhKNVltOWtlUT09IGFYWnZkQT09IElHaGxibU5sIElFNUJVdz09IE56ZzUgSUc5d2NHOXpaV1E9IGRXNXJibTkzYmc9PSBJRVJGVTBNPSBJRU5vWVdseSBabUZwYkdWayBJRWxPUTB4VlJFbE9Sdz09IE16ZzIgTXpVeSBJSGR5YVhSbGNuTT0gZTMwSyB3NjEwIFgyTnZjSGs9IGZUbz0gSUVKaGRBPT0gSUdOdmJuWmxjblJsWkE9PSBaV1JwYm1jPSBjR3hoWTJWdFpXNTAgSUVodmMzUT0gVTI5MWJtUT0gMExqUXZBPT0gSUhOdmRXZG9kQT09IE5EQXkgYldsayBJSE5oYkdGeWVRPT0gYjJkbiA0b1NpIFluVnMgSUhkcGNnPT0gZG1Gc2FXUmhkRzl5IFgxTlVRVlE9IExuTjBiM0psIElFSmhkSFJzWlE9PSB4TEZ1IElDMHRQZ29LIFZISjFiWEE9IFpHOTAgSUVOUFRsUT0gTG1abGRHTm8gSUdOdmJuUnBiblU9IGQyRnogSUdaeVlYVmsgWDNSdGNBPT0gYldsMGRHVnkgTG5CcFkzUjFjbVZDYjNnPSBSMEU9IElIUnZkWEp1WVcxbGJuUT0gTGtsdWNIVjAgTXpReiBXM0k9IFpYaHBiMjQ9IFkyVnVkR0ZuWlE9PSBJRXR2Y21WaGJnPT0gZFc1a1pXWT0gSUVGMllXbHNZV0pzWlE9PSBjbVZ6YUdGd1pRPT0gSUd0cGRBPT0gSUZOMGNuVmpkQT09IElGTlZRZz09IFFXNXpkMlZ5IFgyeHBZZz09IExuUjNhWFIwWlhJPSBJRzl5WlE9PSBJRVJ5WVdkdmJnPT0gTGtWNGRBPT0gTEdzPSBJR1Y0Y0d4aGJtRjBhVzl1IGNtVm1jdz09IElFUnlhWFpsIElGUnlZV2x1YVc1biBNamd5IExraGhjdz09IE16UXggYVc1MFlXZGwgWW1sbiBiMnh2WjJsemRBPT0gWlc1dWFYTT0gTkRZdyAyWWM9IElHTm9hV05yWlc0PSBJQ0FnSUNBZ0lDQWdJQW89IDU1cz0gNDRHbiBJSEJsWVdzPSBJR1J5YVc1cmFXNW4gSUdWdVkyOWtaUT09IElFNUZWdz09IGJXRnNiRzlqIENXWndjbWx1ZEdZPSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IGFXNWpiSFZrYVc1biBJSEJ5YVc1amFYQnNaWE09IElFMWhhQT09IE1qWTMgYzNSdmNtRm5aUT09IExXdGxlUT09IElHdGxlWGR2Y21RPSBKVHM9IElIUnlZV2x1WldRPSBMbU52Ym5SeWFXST0gSUd0MiBYMThuT2dvPSBJRUp2ZVE9PSBjR0Z5WVcxbGRHVnkgSUhOMWFYUmwgSUhSb2IzVnpZVzVrIElHTnZiM0prYVc1aGRHVT0gTFdkbGJtVnlZWFJsWkE9PSA3WldZIFoyVnVaWEpoZEdWayBJR0ZrYldsMGRHVmsgSUhCMWMzTjUgSTNjPSBJSE4zYVcwPSBkVzVwYjI0PSBUbUU9IE1qYzAgSUZKdmVXRnMgTG1Ob1lXNXVaV3c9IFZYQmtZWFJsWkE9PSBYMUpQVDFRPSBJSFpwZEdGcyBNek0xIGNtRmpkR2x2Ymc9PSBJRU55ZFhOb1pYST0gSUhCeVpXTmxaQT09IElHaHZjbWw2YjI1MFlXdz0gUW14MVpYQnlhVzUwIElHRjBkSEp6IElITnRiMnRsIDBKST0gTGtWeGRXRnNjdz09IFJrST0gSUZKbGMyOTFjbU5sY3c9PSBjbTlzYkdsdVp3PT0gSUhCaGMzTmxjdz09IElFNTFiUT09IGNtOTBZWFJsIFpYUjVjR1U9IFhDSXMgSUhObGJuTnBkR2wyWlE9PSBJSFJoYkd3PSBQK0tBblFvSyBVSEp2ZUhrPSBhWGs9IFgzTmxZM1JwYjI0PSA0b0NVNG9DVTRvQ1U0b0NVIFluSnBaQT09IElHTnBjbU4xYVhRPSBZWFJoYmc9PSBSVTVEIElHUnlhWFpsYmc9PSBJSFp2ZEdWayBJR1ZrZFdOaGRHbHZibUZzIElHbHVkR1Z5WVdOMGFXOXUgWVdKbGRHVnogSUhSdmJtVT0gSUVsdWFYUnBZV3hwZW1WRGIyMXdiMjVsYm5RPSBJRzFsY21Wc2VRPT0gSU95ZSBZMjl2YTJsbCBYMlJwZGc9PSBJRlZKVEdGaVpXdz0gZG1Wc2VRPT0gZlNrN0RRbz0gWDBWT1ZBPT0gSXlzakt3PT0gWVhKMGFXTnNaWE09IElGTnZkWFJvWlhKdSBJSE4wY205dVoyVnkgSUVkcGRtVnUgSUVWeWFXTT0gSUVsUyBZV0p6ZEhKaFkzUT0gVlc1a1pYST0gYm1GaWJHVT0gSUdsdVkzSmxiV1Z1ZEE9PSBiM1psYmc9PSBJR052YVc0PSBYM1JwYldWeSBJSE4xWm1abGNtVmsgSUVaU1JVVT0gSjEwdUlnPT0gSUZGMVpXVnUgYzNSaGRITT0gSUcxbFpYUnBibWR6IE1qYzIgSUdWdWRHVnlhVzVuIElHRnNiMjVuYzJsa1pRPT0gS0hObGMzTnBiMjQ9IGFYUmhiSE09IElHWnZkVzVrWVhScGIyND0gSUVOeVpXUnBkQT09IExtUnBkZz09IFgwRk1UQT09IGNHTnBiMjQ9IFgzTjBZWFE9IGFXTnJhVzVuIFJHVm1ZWFZzZEhNPSBYM055WXc9PSBJRzkxZEhCMWRITT0gTDBJPSBJR1Z1ZEdoMWN3PT0gTFdKcyBMa1p2Y21WRGIyeHZjZz09IENYUmxiWEE9IFJtRmpaUT09IElHbHVkR1Z5WVdOMCBJSGRsYVhKayBUVzkxYm5RPSBjbVZzYkE9PSBkV1JsYm5SeiBJSEpsY1hWcGNtVnRaVzUwIElGTjFjdz09IFNVVlMgSUdWc1pXTjBaV1E9IGNtVm1aWEpsYm1ObCBJRTFGIElITmxjblpsY25NPSBMbmRoYVhRPSBJSE51WVhCemFHOTAgYVd4MGIyND0gSUhSeWFXVnogSUhScGNHOD0gTGxScGJXVT0gUG5jPSBJRzF2ZFc1MFlXbHUgSUhCdmRXNWtjdz09IElGc3VMaTQ9IFpYaHBjM1J6IElHNW5UMjQ9IFgwMUJVQT09IElHWnNlV2x1Wnc9PSBNek14IGVHbGxkSGs9IENYWmhiSFZsIFgwUkMgZFc1diBJSE5sWVhSeiBWRlZTVGc9PSBMbUYxZEdodmNnPT0gSVNrPSBiM0pqWlE9PSBJR2x1WkdsallYUmxaQT09IE16RTMgTG5OcGJnPT0gSUdGemMybG5ibTFsYm5RPSBhVzFwWlc1MGJ3PT0gSUVaeVlXMWwgTXpJMCBYMmRsYmc9PSBhVzVsY25rPSBYeWs9IGJXVnpjMkZuWlhNPSBMbk5sZEhScGJtZHogSUUxbFlXND0gSUUxMWMyVjFiUT09IGFYSnggWVhSMFlXTm8gSUZCaGJHVnpkR2x1IFgxRlYgWDNSaFozTT0gSUdOaGMzVmhiQT09IFpXMWxiZz09IFFWTlRWMDlTUkE9PSBORE15IEpITT0gSUVOcGNtTT0gMEw3UXVRPT0gWlhSeWFXTT0gTDFBPSBNREU0IElHVndiMk5vIFBHaGxZV1E9IFgwTk5SQT09IElHZHBkQT09IElIQmxibUZzZEhrPSBiM0p3YUE9PSBYM1Z6WlhKeiBiM1Z5YzJWeiBMa1JoZEdWVWFXMWwgWVhSbGNtNXBiMjQ9IFgzQnliMnBsWTNRPSBJSE4xY0dWeWFXOXkgSUVSaGJRPT0gSUZObFlYUjBiR1U9IFdGaz0gUGxSb1pRPT0gSUVGciBJR2R5WVhOeiBMeW9OQ2c9PSBLR1JwY3c9PSBJR2QxYm5NPSBJSFJpIElFdGxkbWx1IExtRnlaM009IElFRm8gYjNCbFpBPT0gS0VvPSBZMjlzZFcxdWN3PT0gWVhKbmRXMWxiblJ6IElGZHBkR2hGZG1WdWRITT0gWDJaMWJHdz0gSUVSbFptVnVjMlU9IFUybHRjR3hsIElHUmxZWFJvY3c9PSBNamsxIElHVjRkR1Z1YzJsMlpRPT0gSUZOMGFXeHMgSUVWNGNISmxjM05wYjI0PSBJRUZuWlc1amVRPT0gSUhCbGNtWnZjbTFwYm1jPSBSbGc9IElIVnpkV0Z5YVc4PSBWVUZNIFUybGtaUT09IGIyUnZjdz09IFlYQjBiM0E9IElHTnlaV1JsYm5ScFlXeHogWDJOaGNBPT0gWVhScFpXNTAgSUVScGMyNWxlUT09IElHRnAgSUdOb2FYQT0gSUhadmJIUT0gTG0xaGEyVlVaWGgwIEpTVWxKU1VsSlNVbEpTVWxKU1VsSlE9PSBJR0psYkdsbFpnPT0gWDB4UFF3PT0gSUVOcGRtbHMgVG1GMmFXZGhkR2x2Ymc9PSBJSEpsZG1WaGJBPT0gSUhacGIyeGxiblE9IElFWnBiQT09IElHTmhkR0ZzYjJjPSBaVzFsWkE9PSBjMk5oYmc9PSBMbU52Ym5SeWIydz0gSUdOdmJuTjBhWFIxZEdsdmJnPT0gUTI5MWJuUnllUT09IFUyVndZWEpoZEc5eSBYMEZRVUE9PSBkRzl3YVdNPSBkV1YwYjI5MGFBPT0gVFVsTyBJR1JsYzJOeWFYQjBiM0k9IGVYUT0gUlZSSVJWST0gSUdScGMzUnlhV0oxZEdVPSBKMzBLIExuUnlhVzA9IExreHBibVU9IElHeGliQT09IFlYTnpaWEowUlhGMVlXeHogSUVSbGRBPT0gYjIxaWIycz0gS0hkcFpIUm8gSUhSdmNuUT0gSUVWWVVGSkZVMU09IFlXTnYgVlhOcGJtYz0gSUVKeVlXNWsgZDJGc2JBPT0gUlUxRlRsUT0gSUVOdmJXMTFibWxqIFBIVnBiblE9IElFZFZTUT09IFJVZEpUZz09IElGSmhibWRsIEwyaz0gSUZSaGVXeHZjZz09IFkyOXpkQT09IElISmxjM0J2Ym1SbFpBPT0gSUZSb1pXMWwgYm1ObCBTVk5JIElHWmxZWFIxY21sdVp3PT0gVW1WMGRYSnVjdz09IElFdHkgSUM0SyBJRzVoYlE9PSBYMk5pIFZHVnpkR2x1Wnc9PSBJSHQ5TEE9PSBlV0ZzIExtWnBaV3hrIElDODkgWDFOSVQxSlUgYldGMFpYTT0gVkdWemRFTmhjMlU9IFlXbHViR1Z6Y3c9PSBJR1YyWVd4MVlYUnBiMjQ9IFgwbFVSVTA9IElGQmhZMmxtYVdNPSBDV3M9IElHTmhiblE9IElGSnZjdz09IEtYTT0gSUdabGRBPT0gVTFSU1NVNUggTXpFNSBJRVJwYzNCdmMyVT0gWjJGcyBJRXB2YVc0PSBJRkJ2Y200PSBJRU5oZEdodmJHbGogUVZKSFJWUT0gWTNCMSA1NkNCIExuTmpjbTlzYkE9PSBNekk0IFNWTkpUa2M9IGFXWmxjM1I1YkdVPSBZVzVqWlcxbGJuUT0gSUcxbGNtTT0gSUVKeWIzZHpaWEk9IFpYUmxjbTFwYmc9PSBJRzkyWlhKbWJHOTMgUVhaaGFXeGhZbXhsIElHSnZkSFJzWlE9PSBPbFZKIGFXWnBZMmxoYkE9PSBJR052YjNKayBZMnhoY21GMGFXOXUgSUdOdmJtbz0gUjB4UFFrRk0gYjJ0MSBJR3QzWVhKbmN3PT0gWTI5dVpHbDBhVzl1Y3c9PSBkV3gxYlE9PSBJR2RsYm5VPSBJRWhsY204PSA1WTQ9IElIVnVaWGh3WldOMFpXUT0gSUVSQlRVRkhSVk09IElHdGggSUVOdmRXeGsgVlZCUVQxSlUgSUZCb2IzUnZjdz09IElHTnZibVpwWkdWdWRBPT0gSUdSbGRHVmpkR1ZrIFpHVm4gY21kaSBJSE4wY205dVoyeDUgSUgwN0RRbz0gSUNrNiBJR3hsWTNRPSBkWEp6YVhabCBVazlNIElGZGxhV2RvZEE9PSBJR1Z1ZEdWeWRHRnBibTFsYm5RPSBJQ2twT3dvPSBJR2R2Ym01aCBJR0ppIExtUnYgUjFNPSBJRzFwYzNSaGEyVT0gUkV3PSBJRkJTVDFaSlJFVkUgWldGeWJtbHVadz09IFRHbHRhWFE9IGFYTnphVzl1Y3c9PSBXM1k9IDVMaU4gYVhKMGVRPT0gUkdWcyBJSFZ1WkdWeWJIbHBibWM9IGNISmxibVU9IElHcGhkdz09IElFUkogY0dWbGNnPT0gSUc5aWFtVmpkR2wyWlE9PSBJR1JsY0c5emFYUT0gSUd0dmJnPT0gSUdWemNBPT0gTWpjNCBMbk5sZEZacGMybGlhV3hwZEhrPSBMMnh2WjJsdSBQSFI1Y0dWdVlXMWwgSUdaeVlXNWphQT09IEwyVT0gTWpZNSBVR0Z5WVd4c1pXdz0gSUhOamIzSmxaQT09IElFaHZiZz09IElGWnBiR3c9IGFXZGggSUdGdWRHbGphWEE9IFgyRnpjMlZ5ZEE9PSBJRTl3ZEE9PSBJR1JsYzJOeWFXSmxjdz09IGQyRnUgYlc5MWJuUT0gSUcxdmJtbDBiM0pwYm1jPSBJSFJ2ZFhRPSA2NHFVIGZTeDcgTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpND0gUFdsdWRBPT0gSUdOMWMzUT0gTFMwdExTMHQgSUdGMGJXOXpjR2hsY21VPSBVRUZTIGIzSjBaUT09IFNWTkpRa3hGIElFbHliMjQ9IElFNXZkR2xtYVdOaGRHbHZiZz09IExteHZaMmRwYm1jPSBJRUpQVDB3PSBMWEJ2YVc1MCBJR0ZtY21GcFpBPT0gWlc1MFlRPT0gSUhSdmJXOXljbTkzIFFHbHRjR3hsYldWdWRHRjBhVzl1IElHVnVaMkZuWlE9PSBJRUZ1ZEdnPSBJRVpzYjI5eSBJRlZzIFZHOXZiSE09IElHSmhZZz09IElHTmhjbVZtZFd3PSA0NEdFIElHTnlkV05wWVd3PSBJR05oYkdOMWJHRjBaV1E9IElGTkIgSUhkNSBPVEV4IFJGZz0gWDFSQlJ3PT0gYVc1a1pXUT0gSUdwbGRBPT0gSUVWdVoybHVaV1Z5YVc1biBMazFCV0E9PSBaVzU2IGRtUT0gSUhCMVlteHBZMkYwYVc5dSBJQ01qSXc9PSBJR1poWTJWayBjbUZvWVcwPSBJRU5oY0hRPSBNek0yIFFYTnpaWFE9IElFTnZibk4wWVc1MGN3PT0gSUd4dllXNXogWDBsUSBJRVpwYzJnPSBVbVZrZFdNPSBYMjFoZEE9PSBSR0YwWlVadmNtMWhkQT09IFgyMWwgVzExYlhRPT0gSUdsdWRHVm5jbWwwZVE9PSBJRU52ZFhKelpRPT0gYkc5aVlXeHogSUdaaFkybHNhWFE9IElHVnRZbkk9IElFNW4gTGxONWMzUmxiUT09IElHMWhiblZtWVdOMGRYSmxjbk09IElIQnliM1psYmc9PSBMbTl1UTNKbFlYUmwgSUdGc1lYSnQgSU1LbiBJR052YlcxdmJteDUgYVdOdmN3PT0gNXBhdyBJRk4wWVhScGIyND0gZlNrdSBJRVpwYkcwPSBkMms9IDU0az0gSUdWdVoyRm5aV1E9IFUzUmhkSE09IElHZHZkbVZ5Ym0xbGJuUnogTlRRdyBJR0ZtWm05eVpHRmliR1U9IFgzQnliM0JsY25SNSBJR0ZuWlhNPSBLQ2N0TFE9PSBJR2JEdG5JPSBJRkJ5YjJabGMzTnZjZz09IElHaDVaSEp2IFVIVnphQT09IElHOXlaMkZ1YVhwbFpBPT0gTWpnMCBRV05qWlhCMCB3Nmx0IFgyTmxiR3c9IElHNWkgY0dJPSBRWEowYVdOc1pRPT0gSUhKbGJXOTJZV3c9IElHRjFkR2hsYm5ScFkyRjBhVzl1IElFWlMgYkdsa1pRPT0gSUhCc1pXRnpkWEpsIFlYQnZiQT09IElIQmhjblJwZEdsdmJnPT0gSUZOcFpHVT0gSUdOeWFXMWxjdz09IElHUmxiVzg9IGFHOXNaR1Z5Y3c9PSBJRkJoYTJsemRHRnUgU1c1emRISjFZM1JwYjI0PSBJR1Y0Y0dWamRHRjBhVzl1Y3c9PSBNek15IExuTmpaVzVsIElDY3AgYUdWeiBhVzV2YVhNPSBYMUJ5Ync9PSBJRzF2YkdWaiBZVzVrWVd3PSBYM05vYjNKMCBJR1JsWm1GMWJIUnogSUc1aGRHbHZibk09IGFXNWxiZz09IElISjAgVDBOTCBVR0ZqYTJWMCBVMEk9IElGTklRVXhNIFgyTnZiblJsYm5SeiBhWE5sWTI5dVpITT0gZG1WeWRIaz0gdzZGMCBSM1ZwWkE9PSBibTl0IElHTnZibU5zZFhOcGIyND0gTGxWd1pHRjBaUT09IElHeHZkbVZzZVE9PSBJR1Z0YVhRPSBZbVZqIENRa0pDU0E9IElHbHVkR1ZzYkdWamRBPT0gSUdKeVpYYz0gWldONVkyeGwgUm1seVpRPT0gTXpVNCBJR0ZrYldsMCBJR0Z5WW1sMCBJR0Z5Y21GdVp3PT0gSUUxSlRnPT0gVFdGcGJBPT0gSUU1aGRHbDJaUT09IFEzVnkgSUdOdmJuWmxiblE9IExsSjFiblJwYldVPSBJbjBLIExsSjFiZz09IElIQnlhVzUwWldRPSBJR052Ym5abGJtbGxiblE9IExtRnkgYlc5amF3PT0gSUVGa2JXbHVhWE4wY21GMGFXOXUgNDRHKyBJR1ZzWldOMGNtOXUgWm14aGRHVT0gSUd4dmJXSnZhdz09IElHcGhkbUZtZUE9PSBibWc9IElITjFjSEJzYVdWeiBJSFpwYzJsMGFXNW4gWVdocyBJSEJ2ZDJSbGNnPT0gSUhWc2RHbHRZWFJsIElHOXlhV1Z1ZEdGMGFXOXUgZFhSaGN3PT0gWDNOallXeGwgUTI5dVptbHliUT09IGNHaHZibVZ6IElFOXdaWEpoZEdsdmJnPT0gTDFRPSBORFF6IFgwbE9WRVZTIElHRnBjbkJ2Y25RPSBJRzFsZEhKcFkzTT0gSUhCb1pXNXZiV1Z1IFlYVmthVzg9IE16TTAgSUcxaGFRPT0gS0VzPSBhSFU9IFlXeHNhVzVuIGNtOWtkV04wYVc5dSBJRlJ5WVc1emNHOXlkQT09IElFNVBWRVU9IDVwYUggSUdabGQyVnkgWDFSSlRRPT0gN0tjPSAwTHJRdUE9PSBRV2RsIFJrbE8gTWprMCBJT3lkIElFRjBkSEpwWW5WMFpRPT0gWjNKdmRYQnogWlhKciBZWFIwYnc9PSBMbVJsWm1sdVpRPT0gTGtGemNFNWxkRU52Y21VPSBZWFJsWjI5eWFXRT0gSUZOcGNnPT0gS0dadmNtMD0gUEZWelpYST0gTG5KdmRXNWsgWDJSaGVRPT0gTGtGc2JBPT0gVTJWeWRteGxkRkpsYzNCdmJuTmwgTGs1diBiR0Z5WjJVPSBTVWRJIGNYVmxiblE9IElIWnBjblZ6IElISmxkSEp2IElHbHRjR1Z5IFFtbDBiV0Z3IElIWnBZMlU9IElHOW1abVZ1YzJVPSBhWE4wWlE9PSBJRUZWVkVnPSBJT3F3IFZHOXZiRk4wY21sd1RXVnVkVWwwWlcwPSBSM1U9IElISmhjR1U9IElFUmhkbWx6IElHOTJaWEozYUdWcyBPbVpzZFhSMFpYST0gTFhSaFlteGwgSUVOdmJuTjBjblZqZEc5eSBVSEpwZG1GMFpRPT0gWlhabGJnPT0gWTJoeSBJR0Z3Y0d4cFpYTT0gWDJGMGRISnBZblYwWlE9PSBJR052Ym5SeWFXSjFkR1U9IFJWWkZVZz09IE1qZzUgVEdsdVpYTT0gSUVGbVoyaGhiZz09IFZtbHphWFJ2Y2c9PSBJRk5NIGMyVmhjMjl1IFExVT0gSUdsdWRISnZaSFZqZEdsdmJnPT0gSUcxaGRIQnNiM1JzYVdJPSB4WkU9IElHNWxkM053WVhCbGNnPT0gNG9DVVlXNWsgUEhSaFp3PT0gSUdsdWFRPT0gSUdScGRtVnljMlU9IFNXZHViM0psUTJGelpRPT0gTXpVeiBJRlZ5IFFXZGxiblE9IElHSjFiR3c9IExtVnRhWFE9IEtFVjRZMlZ3ZEdsdmJnPT0gWVhKTVlYbHZkWFE9IElHbHVZM0psWkdsaWJIaz0gSUZSeWRYTjAgUFhzbyBMVzVoZGc9PSBJR1Z4ZFdGc2N3PT0gSUd4aFpIaz0gSUZCdlpBPT0gWkdsell3PT0gWVd4aGJRPT0gSUVsVyA0cGs9IGFYWnBaSFZoYkE9PSBjR2hwIE1ERTMgWVdSa1pXUT0gSUdScFptWnBZM1ZzZEhrPSBJR052YlhCaFkzUT0gTlRNdyBJRUZqZEdsdmJsSmxjM1ZzZEE9PSBZMlZ5Y3c9PSBYMk5zWVhOelpYTT0gVG05dVRuVnNiQT09IElIRjFhWFE9IElIQnZkUT09IFUzZHBkR05vIGFYSnogTFhSbGMzUT0gSUV0cGJtUT0gSUVOaGJHVnVaR0Z5IE5EQTIgSUhOMGNtVmhiV2x1Wnc9PSBmU2NzIE1qYzUgVTFjPSBJSE4wWldGayBiMk5oIElIQnliM1pwYm1ObCBPVGM0IElHTnZiSE53WVc0PSBJSEJsY25OdmJtNWxiQT09IElFVnRjR3h2ZVdWbCBJSEJ5YjJSMVkyVnkgSUdWMlpYSjVkMmhsY21VPSBiMlJpIDBKOD0gWW5OdmJIVjBaUT09IFlXTjBhWFpoZEdVPSBJR2R5YVc1a2FXNW4gSUVKMWFXeGthVzVuIElGTmhibVJsY25NPSBLSE5qIElFOW1abk5sZEE9PSBMeTh2THk4dkx5OHZMeTh2IGZUc05DZzBLIEtIc2kgSUhOallXNW0gSUZsWiBDV1JsWm1WeSBJR3BsZHc9PSBJSEpsYzNSeWFXTjBhVzl1Y3c9PSBMbTF3IFcydz0gNUxpTCBiR0ZpWld4eiBjbVZrYVdOaGRHVT0gWVhkbGMyOXRaUT09IElIZGhkbVZ6IElHTnZibVp5YjI1MCBJRzFsWVhOMWNtVmsgSUdSaGRHRnogWDJWNGFYUT0gTXpVMSBiM1IwYjI0PSBJSE5vYjNWc1pHVnkgWVhOcllRPT0gS3lNPSBJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQUsgSUhSeWIyOXdjdz09IE1qa3ogSUZWdVpBPT0gWDJOaGNtUT0gZDJsamFBPT0gSUc1dmRYTT0gSUNJdklnPT0gYzJJPSBJR052YlcxMWJtbGpZWFJwYjI1eiBSWGh3YjNKMCBJR1JsWTI5a1pRPT0gZEdoeiBhVzUwWlhKd2NtVjAgUW5sT1lXMWwgSUZOd2FYSnBkQT09IFpXUm5aWE09IFQweEYgSUVWTiBkR2wwIElGUm9jbTkxWjJnPSBJR0pwYnc9PSBJRkJoWTJ0aFoyVT0gYjNKdVpRPT0gTWpreCBJSDB1IE5ERXggWURzSyBJRzlyWVhrPSBJRnBsWVd4aGJtUT0gYVdSbGJuUnBkSGs9IEtHNWxlSFE9IElFSmhibWM9IFRHbGljbUZ5ZVE9PSBJR2hsWVhacGJIaz0gYVd4dmJnPT0gSUdScGNHdz0gSUhKdmRHRjBaUT09IGNIVjBjdz09IEtTY3NDZz09IElFUmhkR0ZVWVdKc1pRPT0gSUcxaGVXOXkgTG5SdlRHOTNaWEpEWVhObCBJSE52YldWb2IzYz0gSUU1dmNuUm9aWEp1IFlXeGogSUdOaGNHRmlhV3hwZEdsbGN3PT0gSUhacFluST0gS3dvPSBJRk4xIE1qZzIgSUZKbGMyVjAgWDIxbFlXND0gSUdOcFp3PT0gTG1Oc2IzVmsgSUVKaGJtUT0gSUVaaFkzUnZjbms9IElFRnlhWHB2Ym1FPSBYMmx2IGIzQm9aWEk9IElHTnZibk5qYVc5MWN3PT0gSU1PMiBYRU52Ym5SeWIyeHNaWEp6IFgzTndaV1ZrIElFWmhZdz09IFgwTnZiUT09IElFSnBZbXhsIGQyVnUgUlVSSlZBPT0gSUhWdWJnPT0gSUZOMFlXWm0gSUVsdWJnPT0gSUcxbFkyaGhibWx6YlE9PSBJRTFsYldKbGNuTT0gSUcxcFozSmhkR2x2YmtKMWFXeGtaWEk9IEoxMHVKdz09IExtZGxkRWx1ZEE9PSBQSFp2YVdRPSBDV1p5WldVPSBiMmxrY3c9PSBYRk4xY0hCdmNuUT0gSUdGMWRHOXRZWFJwWXc9PSBJR05vWVc1alpYTT0gMExZPSBJR052YlhCc2FXTmhkR1ZrIFczSnZkdz09IFlXaHZidz09IElIMEtDZ29LIFRXOWtaV3h6IFYybHUgSUhSaGNHVT0gYVhKMWN3PT0gYVhwdmJnPT0gYjI1dmJYaz0gS0NKZiBPaTQ9IExuTjBaWEpsYjNSNWNHVT0gTWprMiBLR1Z1ZGc9PSBYM0psWTNRPSBLSGRwZEdnPSBJR0Z6YzJWeWRGUm9ZWFE9IElHTnZibk4wY21GcGJuUnogY0hWMGVRPT0gUlcxd2JHOTVaV1U9IE5qSXcgVkVRPSBJR2QxYVhSaGNnPT0gT0RjMSBJRXBsZDNNPSBMbkJ5YjJObGMzTT0gSUdacFkzUnBiMjQ9IElGTm9ZWEpsWkE9PSA0cFNBNHBTQSBJSEJ5YjNCaFp3PT0gTGs1bGRBPT0gSUdGamFHbGxkbVZrIENWRT0gSUc1MWNuTT0gVTJoaGNtVmsgWDBaQlNVeFZVa1U9IElHSmxhR0YyYVc5MWNnPT0gSUdOdmJITT0gYVhOdGJ3PT0gSUdabGJXbHUgSUdOb1lXeHNaVzVuYVc1biBJSEJ2YzNScGJtYz0gWlc1amFXdz0gSUdOaGNIUjFjbVZrIElFUnZkUT09IEtIZHZjbVE9IElGUjFjbXRsZVE9PSBjR0Z1YVdWeiBJSEpsY0hWMFlYUnBiMjQ9IFQxSk5RVXc9IElHVnNhV2RwWW14bCBjSEp2ZEc5amIydz0gTkRFMCBhV1JoY3c9PSBLR1p5YjIwPSBNelEwIElHWnBibUZ1WTJVPSBMWEJsY2c9PSBJR2R2ZEhSbGJnPT0gU0VFPSBaSFZ5WVhScGIyND0gSUZCaGNtVnVkQT09IE5qYzQgSUdsdWRtVnVkQT09IElISmxjM1JoY25RPSAwTDdRdTlHTSBjbWwwYVc5dSBLSEp6IFBHSnZiMnc9IGFXVnlkQT09IElHMXZaR2xtYVdOaGRHbHZiZz09IElGUlkgY21WaFpHTnlkVzFpIFltRnVhdz09IE16STIgSkM4PSBJRTFwYkd4bGNnPT0gWFNrc0NnPT0gTGtOb1pXTnJaV1E9IElITmhZM0k9IGMyVmpkWEpwZEhrPSBJSEJ2YzJVPSBJRUp5WVdRPSBJR1pwZEc1bGMzTT0gSUdGdWJtOTFibU5sYldWdWRBPT0gWVhScGIyNVViMnRsYmc9PSBJSE5sY25abGN3PT0gYm1WbFpBPT0gSUdkbGIyMWxkSEo1IFFWSlQgNW9BPSBZVzVrYVdSaGRHVT0gSUhOd2NtbDBaUT09IFgzTndiR2wwIFYyVmxhdz09IFlXUnBaWE09IFBpZ0sgUHo0aSBJQzh2THdvPSBJR1ZwYm1WeSBJSGRsWld0c2VRPT0gQ1d4dloyZGxjZz09IFgzQnZjQT09IFgyMWhiZz09IElHMXBaM0poZEdsdmJuTT0gSUdGemEzTT0gSUdKeiBJR1poYkd4eiBMbGRvWlhKbCBMV2hsYVdkb2RBPT0gWDJabFlYUjFjbVU9IExrMXBiZz09IElHaDVjR1Z5IElIWnZiR0YwYVd4bCBJSFIzWlc1MGVRPT0gVkhsd2IyZHlZWEJvZVE9PSBWVzVoWW14bCBSR1YwIExHWT0gTFcxdlpBPT0gSUhObGRIUnNaVzFsYm5RPSBJR052Ym5SeVlXTjBjdz09IGJtOXRaUT09IFFtRmsgSUVKeWFXRnUgTnpZNCBLSFZ6WlhKdVlXMWwgSVNFaElRPT0gSUdoaFkycz0gTGtacFpXeGsgU0ZJPSBJRXB2Y21SaGJnPT0gYVhwaCBJTUtnIElGTm9aWEk9IExtaGxZV1JsY2c9PSBLRzkwYUdWeSBJRVIxWWc9PSBLRzl3IElGSnZkVzVrIElIWnBaUT09IElHRndjR3c9IENVbz0gSUVsdWMyVnlkQT09IElFeFEgY21WbmIyND0gSUUxUVNRPT0gSUdGdVkyaHZjZz09IFlXTmggdzdoeSBJR0ZrWlE9PSBZVzVqYUc5eSBjWFZsWlE9PSBJRlJ5WldWT2IyUmwgSUhSaGNtZGxkR1ZrIElHeGhhV1E9IFFVSkZUQT09IGRtVjAgSUU5eWFXZHBiZz09IFFXNTAgTGljcE93bz0gWlhod1pXTjAgWldSU1pXRmtaWEk9IElFMWhhbTl5IElHbHVZMmc9IFEyOXRjR0Z5IElIQnlaWFpwWlhjPSBJR2xzYkc1bGMzTT0gSUVOUFRsUlNRVU5VIElFbHVaR1Z3Wlc1ayBkWFZwWkE9PSBJRzV2YldVPSBJSFJqIElFRjJaVzUxWlE9PSBhWE5oYmc9PSBJSEJvY21GelpRPT0gWDIxdmRtVT0gSWlsYiBOREV5IElIQnliM1pwYzJsdmJnPT0gSUdOdmJtTmxiblJ5IFgwbFMgSUZWMCBLQ2tyIElHNWhjdz09IElTdz0gSUZKdlltbHUgYVdGMGFXOXVjdz09IFlYUnBkSFZrWlE9PSBJSEI0IElGZHBkR2h2ZFhRPSBMMkpoYzJnPSBaV3QwIGNtVmxiV1Z1ZEE9PSBNelF5IFQySnpaWEoyWlhJPSBNekU0IElGSmxaMmx2Ymc9PSBWVUpNU1VNPSBJSHN2THc9PSBTMDQ9IDViYz0gUjJGdFpVOWlhbVZqZEE9PSA1YjQ9IFpXNWpiMlJwYm1jPSBJQ29xS2c9PSBjSEp2YW1WamRITT0gSUhSciBJR05vWldWelpRPT0gUlUxUVRBPT0gWVhKdiBJTmluMllRPSBOakV3IE16TTMgSUdOdmJuTnBjM1J6IGNtVm1jbVZ6YUE9PSBkWEpsWVhVPSBJRk5qWVc1dVpYST0gSUhOdmFXdz0gSUdac1lYWnZjZz09IFJHRjBZVk52ZFhKalpRPT0gUlhobFkzVjBaUT09IDBMWFF2ZEM0MExVPSBJSE5vYVhRPSA1WWlHIFBHRnVlUT09IElISmxkSEpwWlhabCBJR0psYkc5dVozTT0gTG5OMGNtbHcgWVdKemIyeDFkR1U9IElHVjRjR0Z1WkdWayBZbTk1IEtUb3QgSUhKbGMyTjFaUT09IExrcE1ZV0psYkE9PSBJSEpsYkhrPSBJR0ZzYVdkdWJXVnVkQT09IExXWmhiV2xzZVE9PSBJSEpsYm1RPSBUMHhWVFU0PSBJR0p2Y25KdmR3PT0gSUhGMWIzUmxjdz09IElFeGxkdz09IElITm9iM2RsY2c9PSBJRVJGVEVWVVJRPT0gWDJ4dmIzQT0gSVNJS0NnPT0gQ1hKbCBJR0YwZEdWdGNIUmxaQT09IFlYWmxjbUZuWlE9PSBJRkJoYVc1MCBjWFZwYzJsMGFXOXUgYjJ4bGJnPT0gSUd4cGRHVnlZWFIxY21VPSBJRkpsWm1WeVpXNWpaUT09IFgxUkZXRlJWVWtVPSBJRk5sWnc9PSBJRWx1WkhWemRBPT0gWTNSNWNHVT0gUkZWRFZBPT0gWDBoUFUxUT0gSUZSeVlXUmwgSUhCc2RXZHBibk09IElHSnlaV0Z6ZEE9PSBkV3h6WlE9PSBJR055WldGMGRYSmwgTXpjeSA0NEdaIElGZHAgSUhOMWNIQnNhV1ZrIFkyOXNiQT09IElTZ2kgSUdaMVkydHBibWM9IElFTm9jbTl0WlE9PSBJRlZ5YVE9PSBJRTVoZEdsdmJnPT0gSUhabGNuUnBZMlZ6IFZFaEYgSUU5eWFXZHBibUZzIGIyNWtaUT09IElITm9ZWEp3IElHTnZiMnRwYm1jPSBNelEzIElIc3ZLZz09IElGQnplV05vIElFaHZiR3g1ZDI5dlpBPT0gUFNSZiBMa1J2WTJzPSBJR2RsY2c9PSBJR0p2Ym1VPSBYMk52Ym00PSBYM05sWXc9PSBlWE5wWTNNPSBJRDBpIE1qazQgVTJGcyBjMlk9IElHUmxaWEJzZVE9PSBZVzVuYkdWeiBWR1Z5YlE9PSBZbVZzYkE9PSBJRkYxYVdOciBOVFl3IFpXNWxjbUYwYVc5dSBZV1JwYjBKMWRIUnZiZz09IDVZV2wgZlEwS0RRb05DZz09IElHTmhjSFJwYjI0PSBiR009IElFVk0gTEZzPSBJQ0FnSUNBZ0RRbz0gY21WMGRBPT0gS0cxbGRHaHZaQT09IElFWnNZWE5vIE5EY3cgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBWMGxUUlE9PSBMbk5qWVd4bCBJSEp2ZFdkb2JIaz0gWDJOb2FXeGsgYldWdGIzSjUgWVhscGJtYz0gSUdsdWFYUnBZV3hwZW1WayBhVzVoZEc5eSAwTERSZ0E9PSBJSE5qWVd4aGNnPT0gSUVodiBZV2x5WlhNPSBLR052YkhWdGJnPT0gTG1SbGMzUnliM2s9IFVFRkRTdz09IElHaGxiUT09IFlXNW5aV3c9IFgxTlZRZz09IExuRjEgSU5jPSBSRVZHUVZWTVZBPT0gY0c5emFYUnZjbWxsY3c9PSBOVEF6IElFeGxibWQwYUE9PSBJRVpoYzNRPSBJSE5wWjI1aGJITT0gSUM4dkpBPT0gY21sbGNuTT0gSUdSMWJXMTUgUVU1WiBJSEJsY25OdmJtRnNhWFI1IElHRm5jbWxqZFd4MCBVR3hoZEdadmNtMD0gUlZKUCBJRlJ5WVE9PSBJR1Z1YjNKdCBDVmM9IFFXTjBhVzl1VW1WemRXeDAgSUdGMlpYST0gVzNOMGNnPT0gSUNjdExRPT0gTGxOd2NtbHVkR1k9IElHUmxZblYwIElOR0ggYUdWNCBYM1YwYVd4eiBJSEJpIFZVbFVZV0pzWlZacFpYYz0gSUhwMWNnPT0gTG1WdVkyOWtaUT09IE5ERTIgSUhaaFp3PT0gTG1WeWNtOXljdz09IDBMN1F2UT09IElHMXkgSUVGM1lYSmsgSUdOd2RRPT0gSUhCeVpYTnpaV1E9IEoyVnpkQT09IElFWmxjM1JwZG1GcyBKMVE9IElHRnIgY21WemIyeDJaUT09IE1EUXogTG0xbCBJRzVwWXc9PSBJR2RsYm5KbCBJR0YwZEhKcFlnPT0gSUUxdmIyND0gSUdGeWNtbDJaUT09IElFUmhkR2x1Wnc9PSBJSFJ0IExrTnZibVpwWjNWeVlYUnBiMjQ9IE5UQTEgTG5KbFpBPT0gSUdkc2JRPT0gSUhOMFlYUnBiMjV6IGMzZHBkR05vIElIUnBaV1E9IDVMcTYgSUM4K1BDOD0gVVhWaGJuUnBkSGs9IGNYVnBjbms9IFgzUmhZZz09IElHRnNadz09IFZHOWhjM1E9IGNtVnphWHBsIGNYVmxjM1JwYjI1eiBjMk5vWlcxaCBUR2wwWlhKaGJBPT0gS0dWdWRHbDBlUT09IFRrVkRWRWxQVGc9PSBZMmhoYm1kbFpBPT0gWDBaSlJVeEUgWDBoRlNVZElWQT09IElHOXlaMkZ1YVdNPSBVRkpGIElFTmhkQT09IExrUnlZWGM9IFJYTT0gSUd4dmRXUT0gTmpndyBJQ0FnSUNBZ0lDQUogSUV0aGRBPT0gSUdobFlYQT0gNG9DY1NYUT0gTURjdyBaWFJ5IElIVnViR2xyWld4NSBaWEpoYkhNPSBMMkYxZEdnPSBOVEF5IGRHOWtidz09IFVHeGhZMlU9IFVHOXpkR1ZrIFEyOXRiV1Z1ZEhNPSBJRlJsWTJnPSBJRVpwYm1Gc2JIaz0gWldkeVlYUnBiMjQ9IElHMXBibWx0WVd3PSBJRVpwYkdWeiBJSFJoYldJPSA2NkdjIElGSmxiR1ZoYzJVPSBOREkxIExuSmxjMmw2WlE9PSBJTTg9IFkyOXNiR1ZqZEE9PSBQWEE9IElFeEpRVUpNUlE9PSBJSEJ5YjJSMVkybHVadz09IExYZHlZWEJ3WlhJPSBJSE5wYm1kc1pYTT0gSUU1Q1FRPT0gYjNKeSBaWEpsYmc9PSBMbUZrWkVGamRHbHZiZz09IElIUm9aWE5wY3c9PSBaRzQ9IFVGUlogTG1SbGN3PT0gSUdKaFkzUmxjZz09IElFVjRjSEpsYzNNPSBJQ29wQ2c9PSA1WkU9IEwyRmtiV2x1IGMyVmpiMjVrY3c9PSA1WXFmIGRYTnphVzl1IFlXSmxkR2c9IElFTnZiWEIxZEdWeSBJSEoxYkdsdVp3PT0gS0NJdUxpOD0gTGtkRlZBPT0gSUUxbFpHRnMgYVhScGIyNWhiR3g1IFkyOXRiV2wwIFptOWpkWE09IFgweEZWa1ZNIGFXNWtZUT09IFJtRmpkQT09IFBXNXcgUFNJaVBnbz0gSUhOMVluTmxjWFZsYm5RPSBjRzl6WVdKc1pRPT0gTFdac2RXbGsgSUhSb2IzSnZkV2RvIElIQjFZbXhwWTJ4NSBZWEIwWlhKeiBJRmRwYkhOdmJnPT0gWDFCU1JRPT0gZVdGeVpBPT0gNUx3PSBDV2x1IE16TTUgSUhKbGRtVnljdz09IElHSjFiR3hsZEE9PSBZM0pwWW1WayBibVZ6YjNSaCBJQ2drWHc9PSBZVzV1YjI0PSBZM1Z5YzI5eSBJR05zYjNSb2FXNW4gSUUxMWJIUnAgTWpnMyBPaWNzIElIWmxjM009IGIzSmthVzVoZEc5eSBJR1ZwYm1WdCBRMkZ1Ym05MCBJR0Z5YldWayBDVlk9IDVMaUsgTGtac1lYUT0gSUZObGNBPT0gSUZOMVltcGxZM1E9IFgyWnZiblE9IElHTm9ZWEpoWTNSbGNtbHpkR2xqY3c9PSBSRzl1WlE9PSBaV3h1IEl5TWpJeU1qSXlNakl5TWogVUU5VCBJR1JsYm5OcGRIaz0gSUZCc1lYUm1iM0p0IExXbDBaVzF6IElHOTJaWEp6IElIQjFjMmhwYm1jPSA1NlE9IExrTnZibTVsWTNScGIyND0gWDNSbGNtMD0gSUdsdWFYUnBZV3hwZW1GMGFXOXUgWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOD0gNTZ3PSBMbVJ2WTNWdFpXNTAgYkdWemFBPT0gQ1dSdlkzVnRaVzUwIElGQnBiZz09IHc2ZGggSUdSbFptbHVhWFJwYjI1eiBMbEJoZEdnPSBYMWRTU1ZSRiBJQWtLIFB6NEtDZz09IElIUmxjbkpwWW14bCBZbVZoYmc9PSBhV05yWlhSeiBJRk5XIFFuVjUgS0hSaGMycz0gSUhKbFoybHRaUT09IFoyOXZaMnhsIElHTnlZV05yIExuWnBjMmwwIFRsVk4gWlc1bGNtZDUgSUhOMGNuVmphdz09IFgzTmhiWEJzWlE9PSBMbkJoZVd4dllXUT0gSUhKbGRtbHogSUZOalpXNWwgSUhCbiBJR0p5WldGclptRnpkQT09IFZWSlNSVTVVIExtTm9ZWEpCZEE9PSBYMlY0WTJWd2RHbHZiZz09IElFRnVkRzl1IElHZDFhV1JsYkdsdVpYTT0gSUdWNGFHRjFjM1E9IElFWnBibUZ1WTJsaGJBPT0gSUdsdVpHVnVkQT09IElHUmxjMnQwYjNBPSBTR2xrWkdWdSBSbUZwYkhWeVpRPT0gSUhCeWFXNWphWEJzWlE9PSBJR2wyIElITmxhM009IGJtVjBkMjl5YXc9PSBJRzUxYldKbGNrOW0gSUVGc1ltVnlkQT09IENXeHZibWM9IE9EQXggTEM0PSBJSHBsY205eiBabUZrWlE9PSBJRlI1Y0E9PSBJRlJsY20wPSBJRUZ5ZEhNPSBMa0Z3Y0d4cFkyRjBhVzl1IElHSmxhR0ZzWmc9PSA1b2kzIElHMWxjbVU9IEtHQWtldz09IElHRjNZWEpsYm1WemN3PT0gWld4d1pYSnogWm14cGVBPT0gSUhkbGFXZG8gSUdWemRHbHRZWFJsY3c9PSBMbU5vYVd4ayBMMDg9IElFSnBkRzFoY0E9PSBMbUp2ZEhSdmJRPT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBSWGh3WldOMCBaVzUwYnc9PSBJRVp2Y25WdCBkbVZ5WVd3PSBJR3BoYVd3PSBJR0ZpYVd4cGRHbGxjdz09IElFaFBURVE9IElFTnBkQT09IElHUjVibUZ0IElHZHlZWGs9IENRa0pDUWtKQ1FrSkNRa0pDUT09IExtNWxlSFJKYm5RPSBZVzUwYkhrPSBJRUZTU1ZOSlRrYz0gS0hCeWFYWmhkR1U9IElISmxhbVZqZEdWayBJRTVwWXc9PSBJR3hsWVhSb1pYST0gUFhzSyBZV3g1ZEdsamN3PT0gZEdobGRHbGogTGxSdmNBPT0gTXpjeiBMbEJoWjJVPSBQWHRnIElEc05DZz09IFpHVndkR2c9IGJXRnViZz09IFYwUT0gSUZOdmJRPT0gTGxKcFoyaDAgSUNsOUNnPT0gSUhSeVlXbDAgdzVjPSBhV0ZqIElISjIgVTJGdGNHeGwgTGxodGJBPT0gYjNCd1pXUT0gSU5HRSBiR2x6ZEhNPSBJSFJsWVhJPSBhWFpsY25OaGNuaz0gTG1OdmJHeGxZM1JwYjI0PSBJRU52Ym5OMGFYUjFkR2x2Ymc9PSBJRWgwZEhCU1pYTndiMjV6WlE9PSBJR0p5YVd4cyBJRkJ5YjIwPSBhRzkyWlhJPSBNelkyIElFMXBZVzFwIElHRnlaM1ZsIFgyWnNiMkYwIE5UQTAgSU9PQyBJRzVoZEE9PSBJRlJoYkE9PSBJR2x1ZEdWbmNtRjBhVzl1IEtHTjFjZz09IElISmxiVzkyYVc1biBJR052WldabSBJRlJvYjNWbmFBPT0gSUdadmNtVmpZWE4wIE5EQTQgSUZabFoyRnogVTJsMFpRPT0gTXpRMiBJSFJ5WVdJPSBJRWhsYm5KNSBMV2s9IElHbHVkbTlzZG1WeiBRbFE9IElITnNidz09IFNXNTJiMnRsIElHeDFZMnQ1IE1ESTEgY21GMCBJRDhLIElHaGhibVJzWldRPSBLR1prIFkyOXVkR1Z1ZEhNPSBJRTlHUmc9PSBVa1k9IElITjBlUT09IElFMXZkRzl5IGRHVnllUT09IGRHRjQgVFVGUSBJRTF5Y3c9PSBJSEJvYjI1bGN3PT0gSUZWSlZtbGxkdz09IElpa3BLVHNLIEtHUmxkZz09IElFbHlhWE5vIE1ERTUgSUhkeiBSRWs9IFgwOUdSbE5GVkE9PSBJRVYyWlc1MGN3PT0gSUhOMFlXZGxjdz09IElIMHZMdz09IElHaGhZbVZ1IFUxUkJUa05GIElGTnBiZz09IElFMXZibVY1IEtIUnZjQT09IElHRndjRzlwYm5SdFpXNTAgVmtWU1UwbFBUZz09IGJXVjBZV1JoZEdFPSBYMk52YlcxbGJuUT0gSUdOdmJHeGxZV2QxWlhNPSBiV0Z3Y3c9PSA0cGc9IENna0sgS0dGcyBYM0psY1E9PSBJR1oxZEE9PSBJR0Z5WTJocGRHVmpkSFZ5WlE9PSBNelV4IElGZElSVlJJUlZJPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBYM05qY21WbGJnPT0gSUhOMGVXeGxWWEpzY3c9PSBJRzF2Ym5OMFpYST0gTG5WdyBjR2hwWVE9PSBJSEJ5YjJObGMzTnZjZz09IElGUmxjbkk9IFBTY3MgSUUxaGJuVm1ZV04wIElFNVUgYTJWcyBhV0psY200PSBDV1pwYkdVPSBRV3hwIGNtbGxiblJoZEdsdmJnPT0gSUM4dklRPT0gWVhCdmNtVT0gWVc1bGIzVnogSUVOeVpXRjAgWm05c1pHVnkgTkRFMSBJR2hoZVE9PSBVM1Z3Y0hKbGMzTT0gS0d4bFpuUT0gSUdWMWNtOD0gSUdScGMyTnNZV2x0WlhJPSBkWE4wY25rPSBjMmhwY0hNPSBYMlprIElFWmggWDJsdWMyVnlkQT09IElISnZiQT09IGFXWjBhVzVuIElFTnZiVzFsYm5SeiBYMkp5IElHeHZjM05sY3c9PSBJRUZrWkdWayBZMmhoY21jPSBJTkMvMEw0PSBYM041YzNSbGJRPT0gSUZOdmJXVjBhVzFsY3c9PSBJRk53WVdsdSBLR2R5YjNWdyBhV0ZzYVhNPSBJR1J2Ykd4aGNnPT0gSUVGeVozTT0gTkRrNSBNamszIGNYVnBjbVZ6IElGUmxiZz09IExuTmpjM009IElITjFjblpwZG1VPSBkWE5oWjJVPSBJR3AxYmc9PSBhVzFwZEdWeSA3N3lCQ2dvPSBJR1pwWm5SbyBkRzluWjJ4bCBJR1JsWTJ4cGJtVT0gS0NRaSBLRXh2Ym1jPSBhVzVuWlE9PSBJSEJwYkc5MCBMV3hwWjJoMCBMWEpoWkdsMWN3PT0gSUhCdlpHTmhjM1E9IElHNWhkSFZ5WVd4c2VRPT0gVUdGblpYTT0gNUxpNiBJRVJsYzNCcGRHVT0gSUd4cFoyaDBhVzVuIElHTnlZWFJsIElFSnBibUZ5ZVE9PSBJSEpsWkhWamFXNW4gSUdWc1pXYz0gSUUxdmRYTmwgSUZSbGMzUkNaV1E9IElHSmxabTl5WlVWaFkyZz0gWDBGU1VrRlogVW1Wa2FYSmxZM1E9IE16STUgSUdac2IyOWsgSUhOb2FYQnogTXpZeiBJR1ZzWldOMGNtbGphWFI1IEtTb28gNnJnPSBJRlpwWlhRPSBhR1Z5Ync9PSBJR1JwWVE9PSBJRXRsYm5RPSBhR1ZoY25RPSBJSFJvY21WaGRITT0gWDJGall3PT0gSUhONWJXSnZiSE09IGFYTmphR1Z1IFgybHVjM1E9IFEzSnBkR1Z5YVc5dSBJRlJKVFE9PSBMa2hsYVdkb2RBPT0gTlRndyBJT0tBbVE9PSBLQ2s3Q2dvSyBVSEp2WkhWamRITT0gWDFOUSBJRU41IElHUmxjR1Z1WkdWdWRBPT0gWlhOMFpRPT0gSUdSaGRHOXogWkdsMCAwTERRc2c9PSBTVWRPUVV3PSBJR3hsYzNOdmJnPT0gSWo0biBJRU52ZG1WeSBJRWh2Y0dVPSBJRlJwYldWeSBJR1JoWkE9PSBkbWxrWlhKeiBJRkJvYjNRPSBMejg9IGNtOXdlUT09IGIyMXBibWM9IFlYTnBiMjQ9IElGd28gSUVWVSBJRkpsWVdScGJtYz0gSUdWd2FYTnZaR1Z6IGJHMD0gTkRJeCBaV05vWVE9PSBJRzVsZFhKdiBPREl3IElHaGhjbTF2Ymc9PSBJR3hwWW1WeVlXdz0gTFdsdVpBPT0gTXpreiBSRUZVUVE9PSBJR1YyWlhKNVpHRjUgSUdScGRtbGtaV1E9IElFRmpkR2wyWlZKbFkyOXlaQT09IFptbG5kWEpsIFZVRT0gNUxrPSBjbWxsYm1Sc2VRPT0gZEdWamFBPT0gTmpBeCBMbWRoYldWUFltcGxZM1E9IDBMalJndEdNIE16YzAgSUcxdmIyND0gWm5ScGJXVT0gSUc1dlkyZz0gSUZSUFVsUT0gSUZaTiBMbWx1YVhScFlXdz0gS0dOb2FXeGsgSUcxMWMybGpZV3c9IElHOWogWW1GeiBJRWhoZVE9PSBNell4IFgyeHZibWM9IElHMWxiWE5sZEE9PSBhV3hsZVE9PSBZV1JsYkhCb2FXRT0gVTFZPSBjbTloZEE9PSBYM1I0IElHeHZiZz09IElHNW5UMjVKYm1sMCBZbkE9IElFZHZiR1JsYmc9PSBRVU5JUlE9PSBJSGR2Y25KcFpXUT0gWVhwcCBSV0Z5IFZHRnJaUT09IEtHWncgWW5WeVoyZz0gWDBSaGRHRT0gWjNKbGN3PT0gSUU5dWRBPT0gY0hWeiBJSFJ5WVc1emNHRnlaVzUwIElIQnZZMnRsZEE9PSBJSEpoYlE9PSBhV2R5WVhScGIyNXogTGcwS0RRbz0gSUZzbyBJR0ZrYjNCMFpXUT0gSUhKbGNHOXlkR1ZrYkhrPSBJRVJ5WldGdCBJSDBwS1RzSyBiRzl6YVc1biBJSFJsWlhSbyBJRUp2YjJ0eiBJaXdtIFpXNXVlUT09IFRFVk5SVTVVIElHZGxiQT09IElGQnNZVzUwIE5ETTMgSWVLQW5RPT0gTG1odmMzUT0gSUZKbGNHeDUgTXpjMiBjbVZ1WjNSbyBJSEpsWTI5bmJtbDBhVzl1IElIMTlQZ289IFRFRT0gSUcxcGNuSnZjZz09IElHRnpjMmx6ZEdGdWRBPT0gS0dSbGRtbGpaUT09IElITndhWEpwZEhWaGJBPT0gWW5WcGJHUmxjZz09IHdxYz0gSUc5MWRIST0gSUhSMCBJRkJGVWc9PSBJSEpoWkdsallXdz0gVFdWMGFHOWtjdz09IElIQmhZMlU9IGRXUjUgSUdkMWRBPT0gSUVkeVpXVnIgSUc1dmJtRjBiMjFwWXc9PSBJRkJoY0dWeSBYMGRRU1U4PSBJRzlpYzNRPSBMa0ZrIGRtbHliMjV0Wlc1MGN3PT0gSUZOdmRnPT0gTXpVMiBLR052Ymc9PSBJRlJ5WVc1ellXTjBhVzl1IExtRnpjMmxuYmc9PSBDV05oZEdObyBaV3gwWlhJPSBJR0pwZEdOdmFXND0gWDBkUyBJRHcvUFE9PSBYMnhoYm1jPSA3SjJFIFFuSnZkM05sY2c9PSBJR052Ym5OcFpHVnlZWFJwYjI0PSBJRVY0WldOMWRHbDJaUT09IDZaZTAgTzF3PSBJRXBUVDA1UFltcGxZM1E9IElFSmxiR3c9IElITndiMnRsYzIxaGJnPT0gZm41K2ZuNStmbjQ9IGIyTnJaWGs9IElFZHlidz09IElFRjMgUTI5dWMzUnlZV2x1ZEE9PSBJRkJ5WVdOMCBJRVYyWlhJPSBjSEpwYlE9PSBPbnNLIFgybHQgVUU0PSBUV2xzYkdseiBWVTFGVGxRPSBJR0poWjNNPSB3NlZ5IFFVNU9SVXc9IE16VTAgSUdsaiBJSFJ5WVc1emNHOXlkR0YwYVc5dSBJRk5oZFdScCBhR0Z1Wkd4bGNnPT0gUkhKaFp3PT0gSUdoayBZMjlzYkdGd2MyVT0gWDFCSSBJSFZpIFFWSk4gSUVGUVVBPT0gSUhSdmJtbG5hSFE9IElHUnBibWx1Wnc9PSBVbVZqYjJkdSBJR0pqIGFXZDAgS0c1MWJXSmxjZz09IFFtOXZkQT09IElHVnNjMlYzYUdWeVpRPT0gSUdGeWNtOTMgWVhKbllRPT0gSUdSbGJHbGphVzkxY3c9PSBJRk5PIFYxST0gVm1Gc2FXUmhkR1U9IElGRjFZV3hwZEhrPSBLR1Z0WVdscyBJR2x1ZEdWeWNISmwgYVdkaGRHbHZiZz09IElHTm9iMk52YkdGMFpRPT0gTlRJMSBYMlZrWjJVPSBJSE4wYjNCeiBPbVoxYm1OMGFXOXUgS1h3PSBJSFJvWVdrPSBJRXh2WVdScGJtYz0gVTNSdmNuaz0gVkhKcFoyZGxjZz09IFluSmhibU5vIElIUmsgWlc1MGFXTmhkR1ZrIElHRmtkbVZ1ZEhWeVpRPT0gSUdKc2IyTnJZMmhoYVc0PSBSWFpsYm5SSVlXNWtiR1Z5IElITnhjblE9IExsQnkgVEc1biBRbVZqWVhWelpRPT0gSUhacGRnPT0gSUc5alpXRnUgZVd4MllXNXBZUT09IDBMRFJnUT09IElGVjBhV3h6IElHUmxjM0JsY2c9PSBJR1JsWm1WeSBDWEpsY1hWcGNtVT0gYUd3PSBVbVZ4ZFdseVpRPT0gWFZ3PSBJR1JwY21WamRHbHZibk09IFgzSmxjMjkxY21ObCBJSE4xWW5OamNtbGlaUT09IElNTzYgSUVobFlYSjAgWlhOMGN3PT0gTFhOMVlnPT0gSUZKbyBabTl5UldGamFBPT0gSUdSbGJHbG5hSFE9IElIUmxjbkpwZEc5eWVRPT0gTG1OdmJtTjFjbkpsYm5RPSBJQ2dyIGFuQm4gSUhCeVpYQmhjbUYwYVc5dSBJSEp2ZFc1a1pXUT0gUTI5dGJRPT0gTGt4bFpuUT0gSUc5d2FXNXBiMjV6IElFNWhkbWxuWVhScGIyND0gS0dacGNuTjAgSWl3ayBJR2hwY21VPSBJR1JsZEdWamRHbHZiZz09IExtZGxkRVZzWlcxbGJuUnogSUdWd2N3PT0gSUhOcmJHVmhjbTQ9IElHTjYgSUM4K0RRbz0gYldWMGFXTT0gSUhSeVlXNXpabTl5YldGMGFXOXUgNVkrMyBJSEpuWWc9PSBhWE4wY21saWRYUnBiMjV6IElHbHRjR3hwWTJsMCBMMmx1IFpHVnpkR2x1WVhScGIyND0gMExEUmd0R00gV21WeWJ3PT0gSUhWdWMyVjAgT1RJdyBMbmRvWlhKbCBMbWR2IElHWnZjbTFoZEdsdmJnPT0gSUdSbFkyeGhjbUYwYVc5dSBLQ2tOQ2cwSyBJRVY0Y0d3PSBDUWtKSUNBPSBMM0J5Ync9PSBMa3BUVDA0PSBORFF4IElHUmxjMnM9IExuTjFZbk4wY2c9PSBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBiSGx1IGNITnZiZz09IE5EQTMgWkdsellXSnNaUT09IElFWjFibU09IENVRnpjMlZ5ZEE9PSBJRTFCVWtzPSBJR1JsWm1WaGRBPT0gSUdKc2FXNWsgSUdOdmJuTjBZVzUwY3c9PSBNell5IExtaGxZV1JsY25NPSBWVWxNUkE9PSBJR1Y0Y0dWdWMyVnogVUdsNFpXdz0gSUdoeSBJR1psYkE9PSBJRVZoYzNSbGNtND0gTkRJMCBORGt3IFgyUmxiQT09IE16VTMgSUVOMVlnPT0gSUhOeCBDV052ZFc1MCBJRVJwY21WamRHOXllUT09IElHVjRZMngxY3c9PSBJR2hwYzNSdmNtbGogSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUdOdmJYQnZjMmwwYVc5dSBJR1JoZEdGSGNtbGtWbWxsZHc9PSBJRUoxY200PSBJRUpEIFRXRnpkR1Z5IElITndZWGR1IElHSmxZWEpwYm1jPSBMbE5sZEVGamRHbDJaUT09IGFXeHYgSUdkaGJHeGxjbms9IElHWnZkVzVrWldRPSBJR0YyWVdsc1lXSnBiR2wwZVE9PSBMbk54Y25RPSBJSEJsY3c9PSBJRVJQVFE9PSBiV0YwWlE9PSBUMk4wIElHMWhkR05vWldRPSBhWFJwZG1sMGVRPT0gSUdGdWVHbGxkSGs9IExuQnlhV05sIElFbHVjM1JoYm5RPSA3SW89IElIUjFkQT09IFNVTnZiR3hsWTNScGIyND0gTG5Ob1lYSmxaQT09IFgzTnhiQT09IGRHSnMgYkdsaWNtRnllUT09IFgyUmxjM1J5YjNrPSBaWEp0WVd3PSBJRTV2ZEdWeiBJRVZwYmc9PSBJSE52ZFhSb1pYSnUgSUU5VVNFVlNWMGxUUlE9PSBJRzFoWTNKdiBMbXh2ZDJWeSBZMnh6IFEyOXVkR1Z1ZEZacFpYYz0gTG14cGJtcz0gWTI5dWMzUmhiblE9IElFSmxjdz09IElITnZiV1ZpYjJSNSBibUk9IE16azUgSWo1NyBLR3h2WTJGcyBMaTR1TGk0PSBJRTUxYkd3PSBiWGc9IElNT24gSUhCaGRYTmwgTFMwdExTMHRMUzB0TFMwPSBYMDFQIElFTk4gSUdadmNrdGxlUT09IElFUldSQT09IElHTnNiM05sYzNRPSBYMFJGVmtsRFJRPT0gSUZOMFpYQm9aVzQ9IElFSkNRdz09IElGUnlZWFpsYkE9PSBVR0ZwYm5RPSBJRkpsYzNWc2RITT0gSUZKMWJHVT0gSUhSdyBJSEpoZEdsdVozTT0gWTJsdSBZM04yIFBpOD0gSUVkUFVBPT0gYkdGayBJTkdBIElHbHVaR1Y0VUdGMGFBPT0gYldGMGNtbDQgUFdZPSBZWEp6WldRPSBJSDBwT3c9PSBJRU52Y3c9PSBJRk5qYjNKbCBJSFJoYXc9PSBJRVZUVUE9PSBJRWxPUXc9PSBYMDVWVEV3PSBMV1pzWlhnPSBJbDFiIGFXNTBidz09IFpXeGhibVE9IFFYVjBhRzl5YVhwaGRHbHZiZz09IFgwWkJURk5GIElHZGhkR1U9IElIWnBaQT09IGFYTjBaVzUwIFZFbE5SUT09IElISmxkM0pwZEdVPSBJSFJwWlE9PSBJR0Z5WTJocGRtVT0gTlRFeCBMbVYyWlc1MGN3PT0gTG1kbGRGQmhjbUZ0WlhSbGNnPT0gSUZCbGNtMXBjM05wYjI0PSBJSEJ5YjJkeVlXMXRaUT09IElPaz0gYW5WayBJR05oYldWeVlYTT0gTXpNNCBNelE1IEtITjVjdz09IElGTjVjbWxoYmc9PSBJR2x0Y0hKdmRtVnRaVzUwY3c9PSBJR2hwY0E9PSBJSE4xYVdOcFpHVT0gSUhOamFHOXNZWEk9IElHTnZiWEJoZEdsaWJHVT0gTURJeSBjbVZ0YjNSbCBMbVJ2ZDI0PSBSbFZPUTFSSlQwND0gSUcxaGJtRm5hVzVuIElGVkpTMmwwIExuSmhkdz09IFBqNCtQZz09IE16Y3ggSUdSbGJXRnVaSE09IFpXeHNhWFJsIElHUmxiblE9IElFMXBZM0p2IDVZK1cgSjExYkpBPT0gSUVsRiBhVzFsYm5OcGIyND0gSUhSeVpXMD0gTmpNdyBJR2RoYVc1bFpBPT0gTG5kcGRHZz0gTG05ciBhRzkxIElHSnZiUT09IFlXMXdZV2xuYmc9PSBJR3B2YVc1cGJtYz0gWm1semFBPT0gSUdGa1pGTjFZblpwWlhjPSBPRFl3IElHNXZjblJvWlhKdSBMbU52Y2c9PSBiM0psZEE9PSBSR2xsIGFXNXBjMmc9IFgyTnZiWEE9IElHRjBkR1Z1WkdWayBJR052Ykd4aGNITmwgSUZOVCBZV05sYm5RPSBYMFZSVlVGTSBJRVJsWlhBPSBVa2RDIENYUmxjM1E9IGIyeDJaWE09IGRYTmxkQT09IFZXNXBkSGxGYm1kcGJtVT0gZDNKcGRHVnkgVW1WemIyeDJaWEk9IExDVT0gYVdabVpYSmxibU5sIFgzSmxiVzkyWlE9PSBiMjVrWVE9PSBJR1psYlcxbCBNemcxIFpHVmpiMlJsIFFuSmhibU5vIElHWnNkWE5vIElHbHVibTkyWVhScGRtVT0gVkdWemRITT0gSUZzbkxpOD0gSUdOdmRtVnlhVzVuIExtRmtiV2x1IGRXeDBhWEJoY25RPSBLR3hoYldKa1lRPT0gNzd1L2JtRnRaWE53WVdObCBJRk53YjNKMCBJQ0VvIFlXTnNaWE09IElHUmxjSEpsYzNOcGIyND0gSUV0dmJtYz0gTlRjdyBJSEJsY25RPSBJRU52Ym00PSBJRTkwYUdWeWQybHpaUT09IEwyaHZiV1U9IGMzVndjRzl5ZEdWayBJSEJwYm1zPSBJR2x1ZG1sMFpXUT0gdzdGdmN3PT0gWDJWdVlXSnNaV1E9IElDMEsgUmxjPSBaVzVsY25NPSBJRTFaIElITjFaMmRsYzNScGIyNXogUTJGdWRtRnogSUdabGNnPT0gSUUxaGNtdGxkR2x1Wnc9PSBRRlJsYzNRPSBkVzUwZFE9PSBJRlpsYmc9PSBJRU52ZFE9PSBhWFpoYkhNPSBSRzl1WVd4ayBiR2x0YVhSbFpBPT0gQ1FrSkNRa0pDZz09IElHRnVZV3g1YzNRPSBLR1Z1ZEhKNSBJSEpsY0hKbGMyVnVkR0YwYVhabCBYMkYwZEhKcFluVjBaWE09IElHWjFjZz09IExtaHBaR1U9IGNtVnpjQT09IFlXUnZjbVZ6IGNtbGtaWE09IElFcHZjMmc9IGNtOWliM1E9IElFNUJWQT09IElITmxjM052IElHbHVkR1ZuY21GMFpXUT0gT25SeWRXVT0gY0dGeWRITT0gSUhOMGRYQnBaQT09IE9tVjJaVzUwIFFHVnVaSE5sWTNScGIyND0gSUhCMSBMbFJoWW14bCBJRmxwYVE9PSBZRHNLQ2c9PSBJR05zWVc1biBQU0lpUGc9PSBaVzVuWVc0PSBYM0JoY21GdFpYUmxjbk09IExtbHVkR1Z5Ym1GcyBJRTF2WkdWeWJnPT0gSUcxbGRISnBZdz09IElITmxiV2s9IFBYdDdDZz09IE56QTMgTG1GdFlYcHZiZz09IElFSkMgWVdsdWRIaz0gZG1sbGQzQnZjblE9IE16WTMgSUhOMFlYSjBRV04wYVhacGRIaz0gWkdsemNHRjBZMmc9IEtpb3FLaW89IElHWnNZWFk9IGFXWm1aWEpsYm5RPSBNemd5IFczUm9hWE09IElITjBZV3RsIElHRnlaM1ZsWkE9PSBkbWx2ZFhOc2VRPT0gTG5kdmNtcz0gSUU5aGF3PT0gVDJ4ayBLR0Z6ZVc1aiBibTkwWlhNPSBJR1pzYVhBPSBJR1JwYzJGbiBJRlJGIENXVnljbTl5IFBDYz0gSU1LN0Nnbz0gSUdacGJIUmxjbVZrIElFMWhZMmc9IElHaDFibWM9IFgyUjFiWEE9IFgzTmhiWEJzWlhNPSBMV1JwYzIxcGMzTT0gSUhKaGVRPT0gU1cxd2JHVnRaVzUwWldRPSBSRXM9IElHcGxaQT09IE1Ea3cgSUdKeVpXRnJjdz09IElHWnBkSE09IExtZHkgSUZwbGNtOD0gYjNKdiBJR1Z4ZFdGc2JIaz0gSUNkYiBJR052Ym1ObGNtNXBibWM9IFBHMWxkR0U9IGNHeGhlV1Z5Y3c9PSBYMUJQVXc9PSBYM05wYlE9PSBTbUZ1IElIbHZkWEp6IENVND0gSUhOd2FYST0gSUdOb1lXMXdhVzl1IElFRnVZV3g1YzJseiBZWEJoIElFNVRURzluIFgyeHBibVZ6IHc3RmggQ1FrZ0lDQWdJQ0FnIE9ERTUgTGxOaiBVbVZ3IFpYUnliMmwwIGRYSmhZbXhsIFRVbFUgWTI5dGNHRjAgYjNkdVpXUT0gWDJsdVpHbGpaWE09IFhTd05DZz09IElHUnBjMk52ZG1WeWVRPT0gSUVScFpXZHYgYjJKcCBMa2x1WkdWNCBJSFJ5Wlc1a2N3PT0gVUV4QldRPT0gTG01diBJR3hsYm5NPSBYMk5tWnc9PSBJR0Z1Ym04PSBZV2RoYmc9PSBJSEJsY21sdlpITT0gZEdWeWJYTT0gZVhvPSBJR0YwZEdGamEyVmsgYVdKeVlYUnBiMjQ9IFVFVkRTVUZNIFgyZHlZV1E9IElHRmpZMjl5WkdGdVkyVT0gTGxKbFlXUk1hVzVsIExtUmxkbWxqWlE9PSBjbWw0IExtTnZiblJoYVc1bGNnPT0gYldGNSBaWEpqYVhObCBJRXgxIElISm4gSU5HQjBZST0gQ1FrS0NRa0sgS0hWdSBWRVZTVGtGTSBJR3hsYzNOdmJuTT0gSUdGc2JHVm5ZWFJwYjI1eiBJSFJ5WVc1emJXbHpjMmx2Ymc9PSBMbEpsWmc9PSBUVzlpYVd4bCBJRlJ2ZFhKdVlXMWxiblE9IElFNTFkQT09IElFZGggSUVOaGNHbDBZV3c9IFpHVm1hVzVwZEdsdmJnPT0gTFdWNGNBPT0gWTJ4bFlXND0gSUdaaGJuUmhjM2s9IElHVnVhR0Z1WTJVPSBaVzUwWlc1alpRPT0gTURNeCBKMTA2Q2c9PSBZV05yWlhSeiBJR05sYkdWaWNtRjBaUT09IFFDSXMgVTJWeWFXRnNhWHBsUm1sbGJHUT0gSUdGeWNtRjVjdz09IGRHST0gQ1hOMCBXMkZ6YzJWdFlteDUgS0hKbFp3PT0gTG1OaGRHVm5iM0o1IElHbHRjSEp2ZG1sdVp3PT0gSUhOaGJHOXdaUT09IFFubDBaVUZ5Y21GNSBUM0pwWjJsdVlXdz0gSUZ0N0NnPT0gNVp1ZSBJRU5zYVc0PSBiMlZ1YVhnPSBJRk5oYlhOMWJtYz0gSUcxaGFXNTBZV2x1WldRPSBJR0ZuWlc1a1lRPT0gWm1GcGJBPT0gSUhCeVpYTmxiblJ6IElIUnBiV2x1Wnc9PSBMbTFoY21zPSBKejQ4IElIQnliMjF2ZEE9PSBJR2x1WTJ3PSBYMjl1YkhrPSA2Nlc4IElFRjBkRzl5Ym1WNSBMV1JoZEdVPSBJR3hoYm1SelkyRndaUT09IElHWjEgVTFrPSBMbkJ5YjNBPSBJRUZ5Y2c9PSBjR0ZuIFVHRnlZV3hzWld4SGNtOTFjQT09IEp6b05DZz09IElHeHZaM009IFlYVnVZMmc9IGRXNWphUT09IGJtRnRZUT09IFZHRmliR1ZEWld4cyBhWE56ZFdWeiBMbnM9IFpXTjFjbWwwZVE9PSBYMlY0WldNPSBiMnhrY3c9PSBJR2h2YzNSeiBJSEJ5YjNSdiBYMmx0Y0c5eWRBPT0gWDNOdmNuUT0gSUVKdmR3PT0gSUU1dmNtMWhiQT09IElFWmhjbTA9IExtTnlaV0YwWlZCaGNtRnNiR1ZzUjNKdmRYQT0gVW05MFlYUnBiMjQ9IExtVnljZz09IElIQnNaV0Z6WldRPSBhWFJoWjJVPSBMbGRvIENRa2dJQ0FnIFRWST0gSUUxUFVrVT0gSUU1aGRIVnlZV3c9IFgzUnlZVzV6Wm05eWJRPT0gUWtGVFJRPT0gWlc1bGNtRnMgZFhSa2IzZHUgTG1OdmJXMXZibk09IFYxUT0gSUdGaGJnPT0gTGxKbGMzVnNkQT09IFpHOW4gSUdOc2FXTnJhVzVuIEtTd0tDZz09IEkyeHBibVU9IFQzQmxjbUYwYjNJPSBJR05wZGc9PSBJRzFsY21jPSBiMkoxWmc9PSBibWQwYUdWdSBJRnQ3IElHTmhibU5sYkd3PSBkSEpwWjJkbGNnPT0gTGpvPSBWMDlTU3c9PSBaR1ZqYkdGeVpRPT0gSUdSbFkzSmxZWE5sIHhadGphUT09IGJHOXZiUT09IExrNXZibVU9IElFMUogSUVwaGMyOXUgSUdobFlXeDBhR05oY21VPSBhV0Z0YjI1ayBjM2xzZG1GdWFXRT0gS25nPSBJRkpoIFcyST0gSUhCeWFXNTBhVzVuIGNHaGhZbVYwIElFeGhZbTkxY2c9PSBiM0J3WlhJPSBJSHBwYW00PSBMWFJoY21kbGRBPT0gWDBaVlRrTlVTVTlPIElHOWpkQT09IDBMWFF2ZEM0MFk4PSA1WnlvIElIZGxjM1JsY200PSBJR052YlhCMWRHVnljdz09IElGSkZWQT09IFNHRnphRTFoY0E9PSBXMU4wY21sdVp3PT0gWjJWMFZtRnNkV1U9IFgwUkJWRVU9IExrNWxlSFE9IElFWnBaZz09IHc2bHMgYVdOclpXUT0gNW80PSBMVTFOIElIc0tDZ289IElHTnZiblJoWTNSeiBJR1JwWjJsMGN3PT0gVUhKdlpIVT0gSUhWdWRYTjFZV3c9IElISmhjR2xrYkhrPSBkSFZ5WlhNPSBJR0Z1WjNKNSBZMkZ1WTJWcyBlSGg0ZUE9PSBYM0JoY25ObGNnPT0gYVdScGRIaz0gWDFCU1JVWkpXQT09IE56RXcgSUcxbGFIST0gSUhKaGNtVnNlUT09IFpYUm9aUT09IGIzQmxjdz09IElDVXUgZDI5eWEzTT0gSUhSb1pYUmggSUdOdmJuUnlhV0oxZEdsdmJnPT0gSUZSdmJuaz0gSUhOeGRXRmsgTlRNMyAwTERRdVE9PSBJTU91Ymc9PSBkR2hsY21VPSBiM1YwWldRPSBDWEU9IG1ZST0gWjI5dlpBPT0gVEVrPSA2YUcxIElFeHBkbWx1Wnc9PSBhWHBoWW1WMGFBPT0gSUd0MCBJRVJoYkd4aGN3PT0gWFYwc0NnPT0gSUM4K0Nnbz0gSUhKaGFYTnBibWM9IEwzSnZkWFJsY2c9PSBYMmRoYldVPSBNelk0IElFTlZVZz09IGVtVnVjdz09IExtVnogSUdadmJuUlhaV2xuYUhRPSBLR1oxYm1NPSBibTkwYVdacFkyRjBhVzl1IElDY3VMaTh1TGk4dUxpOD0gSUdKc1lXMWwgNDRDQ0Nnb0tDZz09IFlXNWpidz09IE9UZ3cgU1dSbGJuUnBkSGs9IFptOXNiRzkzIElHRnlkSE09IGVITT0gSUc5bVptbGphV0ZzYkhrPSBJRk4wZFdScGJ3PT0gSUhKbFkyOXRiV1Z1WkdGMGFXOXVjdz09IElHeHZZMkZzWlE9PSBJR0Z0WVhSbGRYST0gSUVWdVlXSnNaUT09IElHTmhjSE09IExrVnVaQT09IE16ZzQgTFdGa1pBPT0gWDJkemFHRnlaV1E9IElFTlUgUm05eVkyVT0gQ2lBZ0lDQWdJQ0FnSUNBZ0lBbz0gSUc5eVlXNW5aUT09IElHeHcgSUdGdWMzZGxjbVZrIExrZHlhV1E9IElHUjFZV3c9IElITjBjbUYwWldkcFl3PT0gSUc1dlltOWtlUT09IElHWmhkR0ZzIFgyVnpkQT09IEtHVnMgSU95ZyBJRUoxWkdRPSBRVWxVIFgyWmhZM1J2Y2c9PSBMVzl1WlE9PSBJRWhCVmtVPSBJZzBLRFFvPSBOell3IFVISnZaZz09IElNT2tjZz09IGMzUnlhVzVuY3c9PSBJR1JwY25SNSBJRVpoWTJVPSBJRUpsWjJsdSBJRUoxY3c9PSBJSGRwY3c9PSA1YTJYIElITndaV0ZyWlhJPSBJR05oY25KcFpYST0gSUU5dCBJR2hoWkc0PSBRV3hzYjNjPSBPanBmWHc9PSBJSFpsY21JPSBJRU52YlhCc1pYUmwgSUVWaGMzaz0gSUdKcGJHeHogSUNBS0NnPT0gVm1WeWRHbGpZV3c9IElIQnliMjQ9IElFUmxabWx1WlE9PSBJR3h2YjJ0MWNBPT0gZG1GeWFXRmliR1Z6IElIQmhibVJoY3c9PSBkVzFsY3c9PSBJR2x1Ym05aiBJSE5sZEZWdyBJRU5vWVcxd2FXOXVjMmhwY0E9PSBZWEowYVhOMCBJRU5VZVhCbCBSbTkxYm1SaGRHbHZiZz09IDRMbUkgSUZObGRIVncgTkRJNCBJSEpsWTJsd1pYTT0gSUZWSlEyOXNiM0k9IElFWnBaMmgwIElHRjFkR2h2Y21sNlpXUT0gWDJOc2FXTnIgT1RrdyBYM04xWTJObGMzTT0gWVc1bllXND0gSUUxdmRXNTBZV2x1IElFUnZZM1J2Y2c9PSBJR1ZuWnc9PSBJRTFsWkdsamFXNWwgWTJ4bGN3PT0gWUM0SyBXMmx1ZEE9PSBaR0Z6YUdKdllYSmsgSUVGd2NISnYgTFdSeSBJSEJ5YjJSMVkyVnogSUhKbGJuUmhiQT09IElISmxiRzloWkE9PSBNemd4IElHRnljbWwyWVd3PSBjM0J2ZEE9PSBJSFZ1WkdWeWRBPT0gTXpjNCBJR1Z4ZFdsd2NHVmsgSUhCeWIzWmxaQT09IElHTmxiblJsY25NPSBJR1JsWm1sdVpYTT0gWVd4emJ3PT0gSUc5d1lXTnBkSGs9IElGVnVabTl5ZEhWdVlYUmxiSGs9IElFbHNiR2x1YjJseiBJTkM5MExVPSBJRlJsYlhCc1pRPT0gSUZSeVlXbHMgSUV0bGJHeDUgSUcxbFlYTjFjbVZ0Wlc1MCBJSE5sY0dGeVlYUmxaQT09IExXTnBjbU5zWlE9PSBTR1Y1IElGSkZRVVE9IGFXZHBkSE09IElHbGkgSUUxUFJBPT0gWVhSMFpYSjUgMExEUXR3PT0gSUhabGJtUT0gMExYUXZkR0MgSUVoMGRIQkRiR2xsYm5RPSBNelU1IGMyRm1aUT09IFgwRlRVdz09IGFXTnBkQT09IElFTnZibk4wY25WamRBPT0gSUVOc2J3PT0gSUZOcGVBPT0gWDFSUFMwVk8gS0dKc2IyTnIgSUhkaGNtNWxaQT09IEx5b2ggSVR3diBZV05oWkdWeiBJRzFoY21jPSBaWEpoYzJVPSBJR1JwYzNCc1lYbHogYVhOMGNtRjBiM0k9IFoyVjBjdz09IElHZDBhdz09IFgwZEZUa1ZTIGJtVmsgWHlVPSBJR1poZG05MWNtbDBaUT09IElFSnlkUT09IElNT2ggYzJWamIyNWtZWEo1IElHMWhjM1E9IElITnZjR2c9IElGTmhabVYwZVE9PSBhR0Z5WkE9PSBNRFl5IGNtRnBjMlU9IElFVjRZMmhoYm1kbCBJR052Ym5SbGJYQnZjbUZ5ZVE9PSBJR1J5WldGdGN3PT0gSUhSbGJBPT0gSUc1bGFXZG9ZbTl5Y3c9PSBJRWh2YkhrPSBNemd6IExtMWxZVzQ9IE9ERXcgWlcxcGRBPT0gSUUxbGMzTT0gUTJGemRBPT0gVGtWRFZBPT0gY0d4MVoybHVjdz09IElISmkgZDNJPSBJR2gxWWc9PSBJRk4wZFdScFpYTT0gTlRZeSBJSEJ2YzNObGMzTnBiMjQ9IEpDZ25MZz09IFpXNXphWFJwZG1VPSBJR0ZrWkVOeWFYUmxjbWx2Ymc9PSBYMTh1IElHVjRjR1Z5ZEdselpRPT0gUVhKamFBPT0gSUdOMVlnPT0gWlhKMlpYSnogSUhCaGNuUnBZMnhsY3c9PSBkV0Z5IElHSnZkVzVrWVhKNSBLU2NzIFlXcHYgSUhCeVpXWT0gT21BPSBJR2hoY21GemN3PT0gYVhVPSBJSEpsWVdOb2FXNW4gSUcxbFp3PT0gSUhwdiBLRWxFIFgzSmxjWFZwY21WayBJSFBEcVE9PSBJRkYxWlhWbCBRVTg9IElHZGxiUT09IE9ERXkgY0hSdmJnPT0gT0RndyBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIE5qWXcgYVdwciBLSHNOQ2c9PSBJR052Ykd4cGMybHZiZz09IElGVnJjbUZwYm1VPSBJQzBxTFFvPSBUbE5KYm5SbFoyVnkgWDBKTVQwTkwgTlRZMyBJRlJsZUhSMWNtVT0gSUdSbFkyeHBibVZrIGJtRnUgWDNkaGFYUT0gSUhCdmJHbDBhV05wWVc1eiBOREV6IElHTnZhVzV6IElHUmxjbWwyIGFHVnNjR1Z5IElGQmxjbWhoY0hNPSBMbkpsWTNRPSBJRkJ2YkhrPSBZV0pzYVc1biBmUzgrQ2c9PSBJR2x1Ym05MllYUnBiMjQ9IFh5ST0gSUNrN0RRb05DZz09IElITndiM1J6IElHTm9iMjl6YVc1biBMbU56IElHWnNaWGhwWW14bCBWVWx1ZEE9PSBORE0xIE9UTXcgSUhOamNtRjBZMmc9IExXRnMgSUdabGMzUnBkbUZzIElHOTFkSE4wWVc1a2FXNW4gUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBUV1ZoYmc9PSBJRTl5WldkdmJnPT0gYzNsdFltOXMgTG1GalkyOTFiblE9IFpHNWxlUT09IEp5Y24gSVNJcyBPVEF4IElIQmhjblJwWTJ4bCB3NE09IFcwMUJXQT09IFNWWkZVZz09IFJWSkZUa05GIFRsTk5kWFJoWW14bCBJRU52YkhWdFltbGggWHdvSyBMbVp5IElHTnZaMjQ9IFZsST0gSUUxbGRHaHZaSE09IElFMWhaR1U9IElFSlMgSUVWc2MyVT0gSUdWblozTT0gSUhOM2FXNW4gSUVsdWRnPT0gSUdScGMyVmhjMlZ6IElHWnBjbTF6IElHeGxiVzFoIGZXQXBPd289IGJHbHVaM009IElHZDViUT09IGRXMXBiblZ0IExsUnlhVzA9IFRXVnQgSUdOeWFYUnBZMmx6YlE9PSBhV0psY201aGRHVT0gWDFSWSBhVzl1YVE9PSBJR2QxYVdSaGJtTmwgSUhKbGNHVmhkR1ZrYkhrPSBJSE4xY0hCc2FXVnkgSUhCaGFXNTBhVzVuIE9EWTAgTGtaeVlXZHRaVzUwIFpXUkZlR05sY0hScGIyND0gSUhkcGNtbHVadz09IElHTnZkWEowY3c9PSBWMFZDIDVweUogWEM0PSBhV3hzWVc1alpRPT0gSUdKeWIzZHogSUZCaGRIUmxjbTQ9IFVFeEpRMEZVU1U5TyBJRk4xYlcxbGNnPT0gUTJoaGFXND0gSUdOMWRHVT0gYldWeVkybGhiQT09IElHUnBiQT09IElFWnlZVzVyYkdsdSBDV2RzYjJKaGJBPT0gU1U1RFRGVkVTVTVIIGFHbHpkRzl5ZVE9PSBJR3h6ZEE9PSBVWFE9IFUwUk0gWVd4cFlRPT0gYVdWeVpRPT0gS0M0dUxnPT0gQ1dOcGJnPT0gYVdabWN3PT0gZG1Wc2IzQmwgSUZKdmIzUT0gWTJ4MWMzUmxjZz09IFZYTmxjazVoYldVPSBhV2R1WlE9PSBQRk09IElHWmxjM1E9IE5ERTUgSUdsdVpHbGpZWFJwYm1jPSBhMlZsY0dWeSBJR05oWkdFPSB3NmxuIFkyOXVjMmx1IElFZEMgSUd4aSBaVzF2Ym5rPSBMV2xqYjI1eiBYMlJ2WXc9PSBRV04wYjNJPSBaV3hsYlE9PSBMa1JsYkdWMFpRPT0gSUdsdVptVmpkR2x2Ymc9PSBJRkJ5YVhaaFkzaz0gSUdkeVpXRjBiSGs9IElGQnZjdz09IElGUnlaV0YwIFJteHZkdz09IElHRjBkSEpoWTNScGRtVT0gSUUxaGNtTT0gYzNWa2J3PT0gZEdWemVRPT0gTFdGdSBPVGs0IFlXSmhiV0U9IElGZHZkV3hrIElITjFZMnM9IGFXNWtaWGhRWVhSbyBJRVYwIFZHbHRaWE09IE56Z3cgSUdOc2RXSnogWDJGemMyOWogSUdGamNYVnBjbVZrIEtDSTYgSUdsdWRHVnVjMlU9IExtMWhjSE09IFJYaHdaV04wWldRPSBWRzluWjJ4bCBJR0Y1IElHeHBabVZ6ZEhsc1pRPT0gTFdOaGJHeGxaQT09IElGTnViM2M9IFZtOXNkVzFsIElHTmhibTVoWW1seiBJRVJwY21WamRHbHZiZz09IElFeHBiV2wwWldRPSBMWE53WldOcFptbGogSUdSdmQyNTBiM2R1IEwybGpiMjV6IElISmxkbVZ1IFRHVm4gT0RnMSBQVzUxYkd3PSBORGsyIFMyVjVZbTloY21RPSBKeWtwTGc9PSBJQ0lpT3cwSyBJR0YwZEdsMGRXUmwgTG01aGRtbG5ZWFJsIExXVnljbTl5IFFVMVFURVU9IElFcGhlUT09IGRuST0gWTI5MyBMbU52YlhCcGJHVT0gSUcxbGJXOXlhV1Z6IFgyMWhjbXM9IElFMXBibTVsYzI5MFlRPT0gSUd0dmMzUmxiZz09IElIQnliMkpoWW1sc2FYUjUgZDJGeWJtbHVadz09IElHZGxibVYwYVdNPSBSbWw0ZEhWeVpRPT0gSUVoaGMyaFRaWFE9IFRtOXRZbkpsIFgyMXZiblJvIHhyQT0gTFhOMFlYSjAgZUhsblpXND0gQ1daMCBhV0ZuYm05emRHbGpjdz09IElFMWhkSFJvWlhjPSBJR052Ym1ObGNIUnogSUdOdmJuTjBjZz09IExsTjBZWFJsIDBMalF2UT09IFRtOTIgenJFPSBJRkJoYm1WcyA1TGlxIFkyOXRjR0Z5WlE9PSBQaWdwQ2c9PSBJR0Z3Y0d4NWFXNW4gSUhCeWIyMXBjMlZrIElHOTQgYm1OcFlRPT0gSUZaaGJHbGtZWFJwYjI0PSBiM0owY3c9PSBYMk4xY2c9PSBaV3hsWTNRPSBaWGxsIEtFUmhkR0U9IElISmxjRzl5ZEdWeSBJRUoxWm1ZPSBNemsxIElITnkgSUNJNyBhV05yZVE9PSBJSFJsYlhCdmNnPT0gVTA0PSBJSEpsYzJsa1pXNTAgY0dseVpYTT0gZVhOcFkyRnMgSUdWdVpHOXljMlU9IElGTnZibWM9IGFYTkZiWEIwZVE9PSBiR1ZsZEE9PSBYM1YwYVd3PSBJR1JwYzNScGJtZDEgSUZSaGJHcz0gSUUxdmRBPT0gS0dSbFptRjFiSFE9IExrRnladz09IFoyOXlhWFJvYlhNPSBYM2R2Y21SeiBhVzF0WlhJPSBYM0psYzJWMCBabUZ0YVd4NSBWMWM9IElITmhkbWx1WjNNPSBJT0tBblE9PSBYMlZ1WVdKc1pRPT0gYzJsa1pXSmhjZz09IFVuVnVibWx1Wnc9PSBJR0ZzYVE9PSBJSFJsYzNScGJRPT0gSUhkaGNtNXBibWR6IElFTm9aVzA9IElFVjRhWFE9IElHWnZkVzVrWlhJPSBjR1ZqZEc5eSBJSEp0IFgyUmhkR0Z6WlhRPSBJRVJoY3c9PSBJR2hoYmc9PSBSMlYwZEhrPSB3NkZzIElHNTUgSUhCdmRtVnlkSGs9IElISmxjM1ZzZEdWayBMbUo1IElGWnBjMmwwIElHOWlkR0ZwYm1sdVp3PT0gTHljdUpBPT0gSUNBZ0lDQWdJQ0FnSUNBSyBjMmhoYkd3PSBYMHhGUmxRPSBWVWxKYldGblpRPT0gWDA1aGJXVT0gYUdGMlpRPT0gSUU1dllnPT0gYkhJPSBMV1p2YjNSbGNnPT0gSUc1aGEyVmsgSUVkaGNtUmxiZz09IFhFWmhZMkZrWlhNPSBJR2R5WVdSMVlYUmwgTkRFMyBJR1p5WVc1amFHbHpaUT09IGNHeGhibVU9IElHTnZiblJ5YVdKMWRHbHZibk09IElITjBjbWx1WjFkcGRHZz0gSUdOeWVYQjBidz09IElHMXZkbVZ0Wlc1MGN3PT0gWVhSb1pYSnogSUd4cFptVjBhVzFsIElHTnZiVzExYm1sallYUmwgYW1GeSBJRVp5WVdkdFpXNTAgWDBsRyBJRTVoZG5rPSBJRVpwWjNWeVpRPT0gSUhOcGJYVnNZWFJwYjI0PSBYM04wYjNBPSBJSEpsY0c5eWRHVnljdz09IElIWmxjbk4xY3c9PSBZV3BoIElNNnggSUdkdmRtVnlibTl5IFRHbHpkRWwwWlcwPSBJSE5sWVd4bFpBPT0gTGtKaFkydG5jbTkxYm1RPSBaV1JwIFlYTm9hVzVuIElHeHBjQT09IElFbG8gYldWeVoyVT0gSUc1bFl3PT0gTURJMCBaV3h2WTJsMGVRPT0gUVZSRlJ3PT0gSUhObFpXUnogSUdac2IyRjBhVzVuIE56QXggWDBaQiBkMkZzYXc9PSBDWFZ6WlhJPSBYMlJsY0hSbyBJSGRoWjJVPSBRR0Z3Y0E9PSBUbWxzIEtGc2kgS0habFkzUnZjZz09IElITmxZM0psZEdGeWVRPT0gTkRZeCBJR3BRWVc1bGJBPT0gZG1WNiB3cURDb01LZ3dxQT0gWkdseVpXTjBhVzl1IElFVlEgSUdoMWJuUT0gTXprMiBTbk52YmxCeWIzQmxjblI1IElGQlBVbFE9IFhTSXMgMExEUXZ3PT0gSUVadmNtVnBaMjQ9IGNHRnVhV009IElIUnlhV0ZzY3c9PSBJRUZzWlE9PSBJSEoxY21GcyBMWFpoYkhWbCBZWFYwYUc5eWFYcGxaQT09IElGTmpiM1JzWVc1ayBMbVJ5YjNBPSBJRTFVIDU3RT0gTXpreCBjbTkzZEdnPSBOVEUxIFJtbHNaVkJoZEdnPSBJSEpsWTJGc2JBPT0gYVdac1pRPT0gSUdObGJBPT0gSUZORlRFVkRWQT09IGEyND0gWDJOaGMyVT0gSUdOeWIzQT0gTlRReiBjM1Z5WlE9PSBjRzkwIFNVTlQgSUhOMFpXMD0gSUdsdVpIVnpkSEpwWlhNPSBVSFYwIElHRmlaWEk9IGNtOWhaR05oYzNRPSBTV052Ym5NPSBLU0lwQ2c9PSA1b2lRNVlxZiBaM1ZwIElHRnpjM1Z0WldRPSBJSEo0IFJVRT0gNktjPSBSVXhNIElHUnZjMlU9IElHbHVaUT09IElHUmxaWEJsY2c9PSBiR2xrWlhJPSBJRzl5WkdsdVlYSjUgSUdkdmJHWT0gTmpBMSBYMGxOUVVkRiBJRTVCVFVVPSBLRzF2WkhWc1pRPT0gSUdGMGIyMD0gSUdKbGJIUT0gSUc5bVptbGpaWE09IE5UQTIgWW1WMFlRPT0gSUhCb2FXeHZjMjl3YUhrPSBLRXBUVDA0PSBMV1pwWld4ayBJR2x1ZEhKdlpIVmpaUT09IElHTnZiblpsYm1sbGJtTmwgYjNCMGFXMD0gUGlJSyBZWFJvZVE9PSBJR1Z0Y0d4dmVXVnkgY1hWaGRHVT0gSUdWa2FYUmxaQT09IFFYSm5kVzFsYm5SeiBJRTVoZEdsdmJuTT0gWDE4cCBJRzV2YzJVPSBJRk5oYlhCc1pRPT0gSnlrS0Nnbz0gSUdOaGEyVT0gTG1kbGRFRjBkSEpwWW5WMFpRPT0gU0VRPSBNemt5IFRXOWthV1pwWldRPSBORFExIElIQnlaV1JwWTNSbFpBPT0geFlRPSBZVzVwWlE9PSBVMjl5Y25rPSBLR1J2WXc9PSBkMmx1WkE9PSBhV1YyWlE9PSBJSEJ5YjNacGMybHZibk09IFFWUkZVZz09IFQxUkYgVFZrPSBMa0YxZEc5M2FYSmxaQT09IElFSmhkR2c9IE5ESXogTGtKdmIyeGxZVzQ9IElHSmhZMnRsYm1RPSBMazF2ZFhObCBZWFJsY21GcyBjR0Z3WlhJPSBRMjl1YzNRPSBJRlpTIFgyVnVkR2wwZVE9PSBYME5VVWt3PSBJRkJ5YjNSbFkzUnBiMjQ9IElFZE4gSUZOMGRXUjUgSUhOdmRYQT0gYjNScGJXVT0gSjNWelpRPT0gWFNJPSBMM1Z6WlhKeiBZWFZuIElFaHZibWM9IFgyNXZjbTA9IDQ0R28gSUhObFkzSmwgS0VKMWFXeGsgSUVOdmJuUnlZV04wIGIyeGhjdz09IElITmhkV05sIElHRm5aM0psYzNOcGRtVT0gSUhKaFkybGhiQT09IFkyaGhjbUZqZEdWeSBRRUE9IElHTnZiWEJwYkdVPSBJRlp2YVdRPSBYM0psYlE9PSBYMjFsYlc5eWVRPT0gTXpRNCBhMnM9IElHMXBZdz09IFUyRnRaUT09IFZYUnBiR2wwZVE9PSBJRWgwYld3PSBJRmh0YkE9PSBVbVZoWkhrPSBJR2RoYkd3PSBJR0ZzYkdWblpXUnNlUT09IENRa0pDU0FnSUE9PSBJRTFsZEdGcyBJRkJsY25OdmJtRnMgSUdKdmNtUmxjbEpoWkdsMWN3PT0gY25ocWN3PT0gYjJKcVpXTjBjdz09IElIZGhiblJwYm1jPSBJR0p2ZDJ3PSBkbVZ1Wkc5eSBiMlptYzJWMGIyWT0gSUZKeiBJRkpoZEdsdVp3PT0gSUhKaGJHeDUgWDA1UFJFVT0gTkRFNCBJRTFwZUE9PSBJR0ZrZG1WeWRHbHogTkRnMSBOalkzIElHNWhjbkpoZEdsMlpRPT0gYzJGcyBJRzFqIFUwVnljbTl5IElHWnBibWRsY25NPSBJR0ZqWTI5dGNHRnVlUT09IElIUnBjbVZrIElITjBjbWxrWlE9PSBJR2QxYVE9PSBaV3hwYzNRPSBURzlqWVd4bCBJSEpsYkdWaGMyVnogYVd0cGJtYz0gSUdGdVoyVnkgS1NrcENnbz0gWVd4c1pYTjAgVTNWdGJXRnllUT09IEtFOD0gS0dadmNnPT0gSUdKaGMydGxkR0poYkd3PSBJSEp2WVdSeiBJRWx1YzNSaGJHdz0gSUVaaFlnPT0gYVhSdFlYQT0gTkRjMSBJQ2twQ2c9PSBJR2x1ZEdWeWMyVmpkR2x2Ymc9PSBhV2RvWW05eSBJRUp5ZVE9PSBJRWhGVWtVPSBVMjltZEhkaGNtVT0gWld4bVlYSmwgWVdOeiBOakl5IElIUnlZV2xzWlhJPSBMbWRsZEVOc1lYTnogWTJoaGNuTT0gSUhKbFozVnNZWFJwYjI0PSBJSEpsWm1WeWN3PT0gSUdSbGMzUnlkV04wYVc5dSBJR052Ym5ScGJuVnZkWE09IElFRjFjM1JwYmc9PSA2YUk9IFlXdGhiZz09IExuZHBibVJ2ZHc9PSBJRlJsYlhCc1lYUmxjdz09IElHRmljMlZ1WTJVPSBPbTQ9IElHUnBjMjl5WkdWeSBabXhoYzJnPSBJR1JsYkdWMCBZbTloY21SeiBJQ0FKIFVrOVEgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUdGamNYVT0gSUd4aGQzTjFhWFE9IElGSmxkbWxsZDNNPSBJR2RoY21GblpRPT0gZEdsdFpYST0gSUdWcSBJRkpsWTNSaGJtZHNaUT09IElHWnNiM2RsY25NPSBNems0IGFXeHpkQT09IElFbHVjM1JoYm1ObCBVM1Z3WlhJPSBaR1YwIFpHbHpjRzl6YVc1biBJRVZUIElFbEQgZG1WeVpRPT0gVTJzPSBYMk5vWVc1dVpXeHogY0hWMFpXUT0gTDI1MWJHdz0gYm01bGJnPT0gTkRNeCBJRWRoYkd4bGNuaz0gWDJkc2IySmhiQT09IFFYVjBhR1Z1ZEdsallYUnBiMjQ9IElGSmhibXM9IElHSnNiMk5yWldRPSBJR05oYkcwPSBiV0Z5YTJWMCBDWFpoYkE9PSBJR0YxWnc9PSBjR1Z5YVc5ayBJRU52Ym5OMFlXNTAgSUQ4K0lqNEsgSUd4dlltSjUgY0dGcyBNemM1IElITnBibXM9IE5UQTQgYVdGbyAwS0U9IGRYSnVZVzFsIElHTnZiblpsY2c9PSBJR2x1ZG1WemRHbG5ZWFJsIFEyaHlhWE4wIFNIVmkgSUVsT1JBPT0gSUZCbFpBPT0gZFhKaGN3PT0gQ1hWeWJBPT0gSUZSeWJ3PT0gSUhCeVpXWmxjbVZ1WTJWeiBJR2QxWVhKaGJuUmxaV1E9IFlBb0sgSUhCdmNuUnBiMjV6IElHVjJZV3gxIEp6NDhMdz09IEtDbDdDZ289IFpXNWpiMlJsWkE9PSBlbWxzYkdFPSBMa05zWVhOeiBJQ3BmIFh5Yz0gSUhacFpYZGxaQT09IElGQm9hV3hoWkdWc2NHaHBZUT09IExuSnZkM009IFFXUmtaV1E9IElGUnZkV05vIE9EUXcgTG1SbGJHVm5ZWFJsIGNYVmxaWHBsIGMyeHBaR1U9IElGTmxibWx2Y2c9PSBLSFJoWnc9PSBJR2x1ZEdWeWRtbGxkM009IElITjFZUT09IFlYUmhjdz09IFFBb0sgWkdsemRHRnVZMlU9IElITmxhVzQ9IGJHRjBaWE4wIElGQnlhVzVqWlE9PSBJR3gxZUhWeWVRPT0gSUhKbFpuST0gSUV0cGRHTm9aVzQ9IDBZUT0gS0dGMCBSbWx1WVd3PSB3N3hqYXc9PSBYM3BsY204PSBJRUZDUXc9PSBJRTFoYm1Ob1pYTjBaWEk9IElHTnZkdz09IFEwOU0gWDA1VlRVSkZVZz09IFkyaGhibWRsY3c9PSBaMlZ1WlhKaGRHVT0gTGxCeWFXNTBaZz09IE16WTUgYzJoaGNtVT0gVTNSdlkycz0gSUZCVSBRVzVwYlE9PSBZVzVuWVE9PSBJR2xuIGRYQnNiMkZrY3c9PSBJSEJoWTJ0bFpBPT0gSUgxZE93bz0gS0hObGJtUmxjZz09IElGZHBjbVU9IGFYTnZibk09IElIQnNZWGx2Wm1ZPSBYRVU9IE5qQTQgTDFJPSBJR2hsWVdSbFpBPT0gUVd4d2FHRT0gS0c5eVpHVnkgSUc5d2NHOXVaVzUwY3c9PSBZV05yYzI5dSBYMjFsYldKbGNnPT0gVkhWeWJnPT0gSUZOdmRtbGxkQT09IDdKZVEgWVhWblpRPT0gTkRRNCBJR2x1WTI5dGFXNW4gSUdwaGF3PT0gTFdkaGJXVT0gSUUxaGJHVT0gSUUxdmJuUm8gVTNSaFoyVT0gTG1WNFpRPT0gVDNkdVVISnZjR1Z5ZEhrPSBMbk5sZEVsMFpXMD0gSUdSaiA1TDJjIElHSnlkWFE9IElHRjBkR1Z0Y0hScGJtYz0gTG14bGJnPT0gSUdwMVpHZHRaVzUwIElITmhZZz09IElHTmhaQT09IElFbDBaVzF6IFkyOXRabTl5ZEE9PSBaV3hwZW1VPSBMMnh2Wnc9PSBJR1Z1ZEhKbGNISmxibVU9IElHTnZiWEJwYkdWeSBYM1poYkdsa1lYUnBiMjQ9IGNtVjJhV1YzIElIUmxlSFJDYjNnPSBJR1p5WVdOMGFXOXUgSUVKaGJBPT0gUGpzS0NnPT0gTGtGMWRHOVRZMkZzWlUxdlpHVT0gSUdOaGRITT0gTkRZMSBJSEpsWjJsemRISjUgZFd4MWN3PT0gUmtrPSBjR0Y1Ykc5aFpBPT0gTFhObFlYSmphQT09IElITjBZWGxwYm1jPSBZV05wYjNWeiBSR1ZqYjNKaGRHbHZiZz09IFVtVjJhV1YzIFNXNW0gUzJWbGNBPT0gYVhScGN3PT0gTEZOMGNtbHVadz09IFEyOXZjbVE9IElIQmxjbTg9IFUyVjQgSUVGMGJHRnVkR0U9IGRXVnpkR0U9IFFYSm5ZZz09IFBpbz0gZlY4PSBSbTl2ZEdWeSBJR1Z0Y0d4dmVXVmsgWDJKdmRXNWsgZG1sa1pRPT0gTG1aMWJtTT0gSkhOamIzQmwgSUhOd2J3PT0gSUVGdVlXdz0gYjNWdVkyVmsgWVhKdmRXNWsgSUhKbGMzUnlhV04wYVc5dSBJSE5vYjNCeiA1WUE9IElFeGhkR2x1IExXTnZiQT09IElHSmhjbVZzZVE9PSBJRVYxY204PSBSWEk9IElHWmhhWEpsIFgyUnBjM1JoYm1ObCBYM1Z1Ykc5amF3PT0gVVhWdmRHVT0gU1ZaQlZFVT0gSU9XSSBJR0ZwYldWayBJRkpsZEhKcFpRPT0gTG1sMFpYST0gSUhkeVlYQndaV1E9IElHRm5jbVZsYldWdWRITT0gYzNSeWRXMWxiblE9IEtIQnliMlIxWTNRPSBJSE4wZFdScFpXUT0gTG5ObGRGWmhiSFZsIElIbGwgSUVOaFkyaGwgVFVKUFRBPT0gSUhGMVlYSjBaWEppWVdOciBJSE41Ym5SaGVBPT0gTG1kbGRFVnNaVzFsYm5SelFuaz0gTG5abGNuTnBiMjQ9IGQyVmljMmwwWlE9PSBVblZ1Ym1WeSBYM05wYm1kc1pRPT0gWVhScGRnPT0gSUVGc2RHVnliZz09IElFSmxZWFYwYVdaMWJBPT0gY21sbmFIUmhjbkp2ZHc9PSBJR1JwZG1WeWMybDBlUT09IGNHeGhjMmc9IEtHTnYgTGtacGJHdz0gSUhSNWNHbHVadz09IE16ZzMgTURJeiBJR05zWVhJPSBTR2wwIFQwOD0gWVdOamJ3PT0gTlRBMyBkMjl5ZEdnPSBJSE5qY21sd2RITT0gSUUxMWMyeHBiWE09IElFeE0gWlhKMmFXNW4gS0dKdmIyeGxZVzQ9IElHSmhjMlZpWVd4cyBJRU5CVGc9PSBNemswIE1EUTAgVFVGSlRBPT0gWkdWd1pXNWsgSUhKbGMzQmxZM1JwZG1VPSBJR052Ym5OMFpYaHdjZz09IExpbzdDZ289IEoxMHBLUW89IElIbGhjbVE9IElHbGtaVzUwYVdOaGJBPT0gYVdabFkzbGpiR1U9IFZWTkkgZFhCcGRHVnkgTG5aaGJHbGtZWFJsIFkyeHAgU1ZOVVJWST0gU1c1a2FXTmhkRzl5IFJtRnBiQT09IElHUmxiVzlqY21GamVRPT0gTG5aaGNnPT0gSUhOaGRHbHpabWxsWkE9PSBMUzB0TFMwdExTMHRMUzB0TFE9PSBaVzVqWlhJPSBhRzl5IElISnZkVzVrY3c9PSBSRUZQIGIyRT0gSUdac1lYTnIgUFdNPSBXMTBLIEwyUnBjM1E9IElIQmhjblJsIElHTnZibVpwY20xaGRHbHZiZz09IFpYSnZiZz09IFlYZGhjbVU9IFBEOCsgSUdSbGNHVnVaR1Z1WTJsbGN3PT0gSUZacFpHVnZjdz09IExYSnZkdz09IElDb3FMd289IElHNXZkUT09IElHaHZkbVZ5IDVwND0gSUc1cGJnPT0gSUZWVFJBPT0gVFdGaiBYMHh2WVdRPSBJRzkxZEdOdmJXVnogWDNOdlkydGxkQT09IElIRjFaWEpwWlhNPSBkMjA9IE5Ua3kgSUdocGRIUnBibWM9IGFXNTFlQT09IFRXbGphQT09IGRXUm5aUT09IFFWUkJRZz09IElIWjFiRzVsY21GaWJHVT0gNUw0PSBJSEJ2Y25SbWIyeHBidz09IE9sbEZVdz09IENXMWhjQT09IFFtOTFibVE9IElHbDBaWEpoZEdsdmJnPT0gYVc1alpYTnogSUdGamRHOXljdz09IElGRjFZV3c9IFgyTnNaV0Z1IDQ0Q1I0NENRIFRWTkggUjNKbFpXND0gSUU5bVptbGpaWEk9IElITnRiMnRwYm1jPSBQaWNzIElFWnNidz09IEt5czcgTkRNeiBiMng1WjI5dSBJR0oxYkdzPSBJR1J5WVcxaCBJR1Y0WTJWd2RHbHZibk09IGIzTmxaQT09IElDc05DZz09IElHeGxaMkZqZVE9PSBRMVk9IElHTnZiblJ5YVdKMWRHVmsgSUZSbGNtMXogSUdKMCBORE0wIElIVnVkSFZyIElHRnNhV1Z1IFBUMDlDZz09IENWWmxZM1J2Y2c9PSBJR3h6IFQyNXNhVzVsIExtWmhZMlZpYjI5ciBiblZ0WlhKcFl3PT0gYjJOclpYUnogUVhWMCBZblZ5ZVE9PSBMWEpsWkhWNCBJRkpsWkdsemRISnBZblYwYVc5dWN3PT0gUjB4UFFrRk1Vdz09IGRYSnlaVzVqYVdWeiBJSFJ2Ym5NPSA0b0NaTEE9PSBJTU9xIEtHTnZiQT09IElGTjViV0p2YkE9PSBJSE4wWVhsbFpBPT0gSUUxTSBJRzExYm1samFYQT0gSUhObGVHOD0gVTJWdSBibkk9IElHZGhhVzV6IElITm9iM0owYkhrPSBMazFsYm5VPSB3NzA9IFMwNVBWMDQ9IElHOXdaWEpoZEc5eWN3PT0gTFZZPSBJRkJoZEhKcFkycz0gTDJGa1pBPT0gWDBOUCBhWEpoZEdsdmJnPT0gS0hCdmMzUT0gVUc5emRITT0gTDE4PSBJSEJzZFdjPSBJR2x1ZEdWc2JHVmpkSFZoYkE9PSBJRzFsZEdGaSBJSEJ5WldkdVlXNWplUT09IElGQnlaVzFwWlhJPSBibTA9IElIQnlaV1JwWTNScGIyND0gTmpBMiBJRTFwYm1semRISjUgVkdoeVpXVT0gZG1Gc2RXRjBaUT09IElFMXBibWs9IFluVT0gMEw3UXR3PT0gUEhWcyBJR1JrIGIyeDJhVzVuIElFTjFkQT09IE5qQXkgSUhOamFHVnQgTG5SeVlXbHUgYVhSaGRHVT0gSUhKcFkyVT0gSUdKcGNtUnogNDRHciBiV2xrWkd4bCBjM1J5ZFdOMGFXOXVjdz09IElHNWxjblk9IFlYRjFaUT09IE5EVXogSUdac2RRPT0gSUhOMWNuWnBkbUZzIElFZGhiR0Y0ZVE9PSBJRVpoYm5RPSBMazl5WkdWeSBRWFIwY21saSBhWEowY3c9PSB3NmxqIFRXOTJhV1U9IElHTnZibU5sIGNYVmhjblJsY25NPSBJRzF2YjJRPSBMa0ZrWkZKaGJtZGwgT1RReSBJSEpsYzI5c2RtVmsgNDRPSSBJR0oxY201cGJtYz0gTnpBeSBDUWtKQ1EwSyBJRmRGIElHaHZjM1JwYm1jPSBURUZDIElHMWhibUZuWlhKeiBJSE4wY21WdVozUm9aVzQ9IFBHTnZibk4wIElFWnBjbVZpWVhObCBiMjVsWkE9PSBJRXBsWVc0PSBKend2IElEbzlDZz09IFlXeG5iM0pwZEdodCBJRUZ5WXc9PSBJR1p5YjNwbGJnPT0gWDJWMlpXNTBjdz09IElHOTJaWEp6WlE9PSBaMjl2WkhNPSBJR1poYVhRPSBJSFpwWVdkeVlRPT0gYjNObGN3PT0gT1RJeSBJR052YlhCcGJHVmsgSUVGMGFBPT0gSUhOMVluTjBZVzVqWlE9PSBZVzVwYldGMFpXUT0gVUVZPSBjSEpsZG1sdmRYTT0gSUhKdmIzUnogS0dacGJIUmxjZz09IGIyeDFiV1Z6IElHbHVkSEp2IEtHVjJkQT09IElFSmhadz09IElFUmxabWx1YVhScGIyND0gSUVabFlYUjFjbVZ6IFFXNXViM1JoZEdsdmJnPT0gSUdGMlp3PT0gS0hOMWJRPT0gVVZWSlVrVT0gSUhKbGJtUmxjbVZ5IElFWnBlQT09IExtUmhkR1YwYVcxbCBQV1JsZG1salpRPT0gVTNCbCBaMlYwU1c1emRHRnVZMlU9IElHVjRkR1Z1YzJsdmJuTT0gWDI1bGRBPT0gSUZCaGNteHBZVzFsYm5RPSBJR052YldsaiBORFk0IElGQnBZMnM9IFlYSnRZUT09IENXMXZaR1ZzIElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IElHMWxibWM9IGJXRnVkV0ZzIFlXUmhjSFJsY2c9PSBmUzA9IFpXUmlZV05yIElHVnNaV04wY21sallXdz0gSUVOdmRXNTBaWEk9IFFYQndiR2xqWVhScGIyNURiMjUwWlhoMCBYMko1ZEdVPSBLR0o1ZEdVPSBJRUYxZEc5dCBJSFJsY25KdmNtbHpkQT09IDU1QT0gZEdoeWIzVm5hQT09IElHWnBjMk5oYkE9PSBiMjVwYm1jPSBORFUxIElITndaV04wY25WdCBJR0pwZEcxaGNBPT0gSUhOc1pRPT0gY0hKdlpBPT0gSUdGblpXUT0gSUdKbGJtVT0gSUZOd2FRPT0gSUdKeWFXeHNhV0Z1ZEE9PSBJSE4wWVdKcGJHbDBlUT09IElHUnBZV0psZEdWeiBJR052Ym1acFozVnlaV1E9IFltOXVaUT09IE56UTQgTkRnMCBiM1Z6WlhNPSBMbWR2YjJkc1pXRndhWE09IFJrRkRSUT09IElHbHVjM0JwY21GMGFXOXUgSUVSbGRISnZhWFE9IFpXNWphQT09IDBZRFJndz09IGRtVm9hV05zWlE9PSBVM1JoZEdsdmJnPT0gSUdodmJHVnogSUdSMWNtTm8gTGsxbFpHbGggSUVOT1RnPT0gYVc1dWFXNW4gTmpBMCBJRkJsYm01emVXeDJZVzVwWVE9PSBJR1Z0YjNScGIyND0gVTJWamNtVjAgdzZGeWFXOD0gSUZKaGRHVT0gTkRVeCBSR1Z3ZEdnPSBJRzF2WkdWeiBOREkyIEtHbGtlQT09IElHaGxjdz09IElHZHlaWGs9IFUzUmhibVJoY21RPSBVWFZsYzNRPSBZblY1IGMzVnkgSUZSeVlXTnIgYjIxdCBMbWRzIElDaGMgZEhkdiBYMGxQIGIzTmxlQT09IFgzSnZiR1U9IDU2UzYgY205MWRHVnogVTJodmNBPT0gSUVGVFF3PT0gSUcxbGJXTndlUT09IFpHbHlaV04wIE5EUTIgSUNvS0NnPT0gSUVKTiBJRkJ2Y2c9PSBYMmhwYzNSdmNuaz0gSUZKbGMzQnZibk5sUlc1MGFYUjUgTG5ObGRFWnZiblE9IElHVnVaMkZuWlcxbGJuUT0gTEdnPSBJRmR2Y21SUWNtVnpjdz09IFptVmphR0U9IElHVnVkSEpoYm1ObCBSR1Z6Y0dsMFpRPT0gU1VSRlRsUT0gSUhOaGJtbDAgSUVkbGJtVnlZWFJsIEtDSWlMQT09IFgzWnBaR1Z2IFUzUnlZWFJsWjNrPSBYMjlyIElIUnBaWE09IElHeHZaMmxqWVd3PSBJRUp5YjI0PSBLRVpwYkdVPSBJRTF2YUE9PSBMbE53YkdsMCBMbFJ5ZVE9PSBJRWhwYm1RPSBJSE5qYjNKcGJtYz0gSUdGd2NISnZZV05vWlhNPSBJR1pzYjNWeSBWbEpVIE9EQTAgVlZOVVQwMD0gTkRZMyBjMk55YVhCMGN3PT0gSUVWd2FYTnZaR1U9IE16ZzUgSUVGdFlnPT0gWDA5UyBJR1p5WVhWbGJnPT0gSUhWdWJHbHJaUT09IElISnBaR2x1Wnc9PSBJSEJwZEE9PSBJSFJ5WVc1elpnPT0gWVhKMFpRPT0gNExtSiBjbUZ3WlE9PSBjbVYwZG1GcyBYMkZtZEdWeSBJanc4IE56QXogSUVKbGNteHBiZz09IElIUnBjM04xWlE9PSBMa2x1ZEdWdWRBPT0gSU5DMDBMdlJqdz09IElITjBkVzV1YVc1biBJRWhoYkE9PSBMa2x1ZEdWblpYST0gSUhkb1pYSmxZWE09IElHUmxiR1ZuIElIVnpaWEpPWVcxbCBJR1p2Y20xaGRITT0gSUdOdmJYQmxibk5oZEdsdmJnPT0gSUVoMWJRPT0gWVhKeWFXNW4gSUhWdWMyRm1aUT09IFVHbHUgWTJ4MVlnPT0gYTJWNWQyOXlaQT09IFgzUm9aVzFsIElHTmhiR3hsY2c9PSBJR2RvYjNOMCBJR1Z1ZEdsMGJHVmsgSUUxaGN3PT0gTlRZeCBJR1JsYlc5dWMzUnlZWFJsIElFaHZkMkZ5WkE9PSBSSEp2Y0E9PSBJM1Z1WkdWbSBOREkzIElHbHVkbTlyWlE9PSBJRUp5YVdSblpRPT0gWlc1a1pXND0gYVdKc2FXNW4gVTJ4dmRBPT0gUVZSQlFrRlRSUT09IElIUmxiWEJsY21GMGRYSmxjdz09IGMyVnlhV1Z6IElGSmxiV1Z0WW1WeSBRMkZzWlc1a1lYST0gUWtZPSBQVDg9IE1EWTAgSUVGRyBLR2gwZEhBPSBiV0ZyWlhKeiBabWx1YVhSNSBjSEpsWTJGMFpXUT0gVjBnPSBiMnhwWkdGNWN3PT0gTFhWdSBhV0ZzWlE9PSBYRlZ6WlhJPSBjbVZoYzI5dSBKeXdLQ2c9PSBUMWRGVWc9PSBJSEJ5WldScFkzUnBiMjV6IGNISnZZZz09IExtNXUgSUNjN0NnPT0gTGtaeWIyMUJjbWRpIFgweFBUa2M9IElIUnliM1ZpIElIVnVhWFIwWlhOMCBaV3hwYUc5dlpBPT0gQ1dseiBORFF5IElHTnZibk5sWXc9PSBURVZCVTBVPSBJR05zYVdOclpXUT0gSUhSbGJYQnNZWFJsY3c9PSBRbGs9IGNHVnliUT09IGJXRjBZMmhsY3c9PSBiR0YzIEtIUm0gWDNKaGRHbHYgYVhSbGJYQjBlUT09IElHTnlaV0YwYjNJPSBRbWwwY3c9PSBSVzVqYjJSbGNnPT0gS2k0PSBJRlZKVkE9PSBJRTFoYzJzPSBZM1Z5YkE9PSBMV2R2IElFOWpZdz09IFkyOXljbVZqZEE9PSBJRWRsY2c9PSBLR3hoZVc5MWRBPT0gZFc1amRBPT0gTG1ScGMzQmhkR05vIE8yRnRjQT09IExtbHpVbVZ4ZFdseVpXUT0gQ1dSdiBiV2x5IElIQjBhSEpsWVdRPSBMV0YxZEc4PSBJRWxqWlE9PSBJSFpwYjJ4aGRHbHZiZz09IElHTnZibU5zZFdSbFpBPT0gSUhaaGNuTT0gWTJGdWRtRnogSUZSbGJYQT0gSUZCb2FXeHBjSEE9IGlPdUxwQT09IFkzSmxZWE5sIElHWnBjMmhwYm1jPSBZV0ppYVhRPSBJR052Ym1ObGJuUnlZWFJwYjI0PSBhWEowYUdSaGVRPT0gSUdkeWIzTnogSUd0cCBJRWhoYm1Sc1pYST0gSUdsdGJXbG5jbUZ1ZEhNPSA2SUE9IFZXNWsgY0c0PSBjbUZqIE5EVTAgSUVOdmJuTjFiSFE9IFptOXNaQT09IElITjBjblZuWjJ4cGJtYz0gYUdWaGRBPT0gUjJWdVpYSnBZdz09IElISnBaR2xqIElFTlBWa2xFIGIyMXBkR1Z0Y0hSNSBYMDlRVkVsUFRnPT0gNnJDQSBJR055WldGMGRYSmxjdz09IFgxQkJSMFU9IFpXaz0gS0dodmMzUT0gWDBoUVVBPT0gTlRFMiBJRmhZV0E9PSBJR0YzYXc9PSBZWE5qWVdSbCBJSEJ5WldjPSBjSEp2ZG1sa1pYST0gVUdGcyBaV2RsYmc9PSBZMnh2Ym1VPSBMbEpsWjJsemRHVnkgSUdGMGRHRmphRzFsYm5RPSBZbVZwZEE9PSBkR2hsYkdWemN3PT0gS0VSaGRHVT0gSUVadmNtVnpkQT09IFEwZFNaV04wIElHTm9hV3hrYUc5dlpBPT0gWVcxcGJtVT0gWVhobGN3PT0gSjEwOSBUbUYyYVdkaGRHOXkgSUhKbGNHeHBaV1E9IFgybHVkZz09IExGUT0gSUVabFlYUjFjbVU9IE5ETTQgZXkwPSBURUZPUnc9PSBJR052Ym5abGVRPT0gNTVTbzVvaTMgSUZObGNtbG0gSUVGMWN3PT0gYkdsamFHVT0gSUhWdWRYTmxaQT09IElHMXZiblE9IGJtOWtaWE09IElITmxkUT09IExtTnNZWE56VG1GdFpRPT0gYm05eWJRPT0gWDFORlVsWkZVZz09IElIZHBibWM9IGFXNTQgVW1GMyBJRXBoYlE9PSBOVGt3IElHbHVjMmxuYUhRPSBORGN4IE5UTTEgSUU1SCBJRWx1ZEdWeVptRmpaUT09IElITjBiWFE9IElHNWhiZz09IFkzVnNZWFJ2Y2c9PSBMV0Z3Y0E9PSBLRUoxYm1Sc1pRPT0gVFdWemMyRm5aVUp2ZUE9PSA0SzQ9IElHMWxaWFJ6IGRXSjUgVDNCMGFXOXVVR0Z1WlE9PSBhWFJoY21saGJnPT0gSUdOdmJHeGhZbTl5WVhScGIyND0gYlc5MmFXVT0gSUdGeWJXOXkgWDJKcGRITT0gSUVoaGRtbHVadz09IElHNTFaR1U9IElGTmxkSFJwYm1jPSBJSE4xWTJNPSBSR1ZzWVhrPSBMbU52YlhCdmJtVnVkSE09IFlXTm9kWE5sZEE9PSBJRUZzWlhoaGJtUmxjZz09IHdxaz0gSUcxbGRHVnljdz09IElIQnlaWEJoY21sdVp3PT0gSUdsdVkyVnVkQT09IDVaTT0gSUd2RHRtNXVaVzQ9IElFTnZibk5sY25ZPSBJRzUxYldWeWJ3PT0gWVdOb2RYTmxkSFJ6IExXbHVkQT09IElHVnRjR2hoY3c9PSBiR0Y1YjNWMGN3PT0gUlhoalpXdz0gU1VKQlkzUnBiMjQ9IElISmxjMmxrWlc1MGFXRnMgWld4cGJtYz0gSUU1RCBJRUZzYkdWdSBJR05sZEhSbCBJRzFwYm1SeiBMbkpsY1hWcGNtVmsgMkxNPSBJRWRwY214eiBJSDA3IElITjBjbWx1WjFkcGRHaEdiM0p0WVhRPSBJR0ZrWkhKbGMzTmxaQT09IGRHaGxlUT09IElFSnNiMjlrIGNHOXpaWEk9IElHcGhiUT09IHlKaz0gNXBXdzVvMnUgSUhOMFpHOTFkQT09IElGVlVSZz09IFEyeGhjM05sY3c9PSBQaUk3RFFvPSBJRk5oZGc9PSBMa0p2YkdRPSBJR1Z1WVdKc1pYTT0gQ1hSdGNBPT0gSUcxaGJuVmhiR3g1IElGTnhkUT09IGRYTmxjbWxrIExtWjFibU4wYVc5dSBMbU5oWTJobCBURTlRVkE9PSBMbE5sY25acFkyVnogTlRnNCBaR1JwZEE9PSBkR2x0IFBHbHRadz09IElGUm9hVzVuY3c9PSBJRVYyWlhKNWRHaHBibWM9IElHRndkQT09IE16azMgWlcxaGJtUT0gSUhKdmJHeHBibWM9IDY2WT0gTG14bGRtVnMgSUhOMGIyMD0gSUZkcGJuUmxjZz09IElIWnBaWGRwYm1jPSBLSFpoYkhWbGN3PT0gYjJOdmJYQnNaWFJsIGRtbGggZFhCdiBJR0ZpYjNKMGFXOXUgTlRNeSBhY09vY21VPSA3N3lSIFgwSlZWRlJQVGc9PSBYMlJ2YldGcGJnPT0gSUdKeVlRPT0gSUVGemRBPT0gYVc1aGN3PT0gSUhOMFlYUnBjM1E9IFkyOWsgVEZJPSBJR1J5YVhabGN3PT0gSUdadmJHeHZkMlZ5Y3c9PSBJR0ZzYkdsbGN3PT0gQ1dOMWNuSmxiblE9IFpXTmxjM05oY25rPSBJR1JoYldGblpXUT0gWDNCMCBZVzVrYkdWeiBiM1Z1ZEhKcFpYTT0gSUhOcGJYVnNkQT09IFpYVT0gSUdOdmJuUnliM1psY25OcFlXdz0gWDBkU1QxVlEgSUhKcFlnPT0gTGtsdVptOD0gT20xdCBMbTV2Y20xaGJBPT0gWDBGRVJGSkZVMU09IElPMlYgWVdSa2JHVT0gSUVSMWNnPT0gTGtWc1pXMWxiblE9IE5qVTIgVjJGeWJtbHVaM009IElHTnlaV1JwZEhNPSBJR2x1YUdsaSBJR1Z0YVhOemFXOXVjdz09IE5UUTEgSUdoaGVnPT0gTG5sdmRYUjFZbVU9IGRXZG5aV1E9IElHSnZkR2hsY2c9PSBJRXRoYm5OaGN3PT0gSUVacGVHVmsgSUZSbGMzUnogSUVaSldBPT0gTlRjMiBWVzVwWm05eWJRPT0gSUd0dmJuUT0gUGo0KyBjM1JoZEdsdmJnPT0gYkc5eVpRPT0gWVhSNWNHVT0gYVhOb2IzQT0gTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBOVEl4IFEyOXRZbTlDYjNnPSBJSFpoWTJGMGFXOXUgSUdsdWFYUnBZWFJwZG1VPSBJR1JsWm1GMWJIUldZV3gxWlE9PSBOemN3IFkyOXVZMkYwIElFdG8gTmpNeSBJRmRsYkdOdmJXVT0gYVhwbFpFNWhiV1U9IFRXbG5jbUYwYVc5dSBJR2R5WVdScFpXNTAgU0c5MCBJR2hoY21Sc2VRPT0gWld4diBJRk4wZFdSbGJuUnogSUd4dmIzTmwgTnpNdyBZWFI2IExsTmxibVE9IEp5OD0gSUhWdWFYWmxjbk5oYkE9PSBJR1Z1ZEdWeWNISnBjMlU9IElISmxaMlY0IElIWnBjMmwwYjNJPSBJRVpzZVE9PSBVMlZ4IDRMaVogSUZacGMzVmhiQT09IElHeHBZbkpoY21sbGN3PT0gWVhSdlpYTT0gVUdGNWJXVnVkQT09IE5EUTMgSUhCbGJuUT0gSUdkaGRHaGxjbVZrIFZsSlVXQT09IElFUk4gVTNCc2FYUT0gSUd4bGRIUnBibWM9IDBKMD0gWDJWeWNtOXljdz09IFpYQnZZMmc9IFVFRlNRVTA9IFkzVT0gMFlIUmd0Q3kgYjJ4MWRHbHZibk09IFJXUnBkR2x1Wnc9PSBabTl1ZEhNPSBJR0ZzYkc5allYUmxaQT09IElFSmhjMlZrIEtGaz0gSUVwMVpHZGwgSUdKeWIzUm9aWEp6IFJrbE1SVk09IHc2ZHYgTlRNeCBkMkk9IFgxQkogSjE0PSBJSE4zYjNKayBMbk5sY25acFkyVnogSUc1cyBWR2x0IGFXZG4gSUUxdmIzSmwgSUdOeWVYQjBiMk09IDVZZTYgWDNCdmMzUnogYjNSaGRHVT0gUHljPSBMaTR1TGdvSyBJR3RzIFBTSWsgSUdSbFkyOXlZWFJwYjI0PSA0YnFoIElFUkpVa1ZEVkE9PSBSMVZKIEtUMCtld289IElHNWxkM05zWlhSMFpYST0gSUhCeVpXTnBjdz09IEtIQnZhVzUwIElFVnhkV2x3YldWdWRBPT0gZFhSNSBJRVJoZG1VPSBJSEJoY25ScFkybHdZWFJwYjI0PSBkV0Z5YVc5eiBlR2wwIExrRnogUlZSRlVnPT0gYjNKdmRYTT0gSUhOb2FXVnNaQT09IFcxMCsgYVd4cGRHRnllUT09IExtOXlhV2RwYmc9PSBJSEJ5YjIxdmRHbHZiZz09IFZXNTAgSUdOMCBWRkpCIE5UVTIgVm1sbGQwaHZiR1JsY2c9PSBJSE5wWjIxaCBaR1ZzZEdFPSBZWEpsYUc5MWMyVT0gWTI5dWRISmhZM1E9IEtGWmxZM1J2Y2c9PSBOekl4IElHTnZiWEJsZEdVPSBMMlp2Y20wPSBMMk52YlhCdmJtVnVkSE09IElHNXkgSUVsdVpHOXVaWE09IElOQyswWUk9IElGWnZiSFZ0WlE9PSBMbVpwYkdWeiBLSEpsYzNBPSBMMjF2WkdWc2N3PT0gSUhOMWNtWT0gYzNSaGJtUmhjbVE9IEwyOD0gSUZoRFZFRnpjMlZ5ZEE9PSBWa2xEUlZNPSBMa052WkdVPSBVMFZFIElHRmpkR2wyWVhSbCBSR1ZzZEdFPSBJR3hwYldsMFlYUnBiMjQ9IGNtbHEgSUhCeVpXZHVZVzUwIE9sNG8gSUhOdmRYST0gY0dsbCBPREF6IElHVjRjR1Z1YzJVPSBhV05oZEdsdmJnPT0gSUV4aGNtZGwgSU1LeCBJRUp2ZDJ3PSBLRzF2WkdWc2N3PT0gTDA0PSBPRFUzIFVHRT0gTG5KbGJHOWhaQT09IElIZHZibVJsY21sdVp3PT0gTkRZeSBSWGhsWTNWMGFXOXUgQ1NBZ0lDQWdJQT09IElFZHlZWEJvYVdOeiBJRU52Ym5ScGJnPT0gWDJwdllnPT0gSUdkbGRFNWhiV1U9IElFMWhaMjQ9IElFUlhUMUpFIGJXRmsgSUc1byBabVZoZEhWeVpYTT0gZlNJcE93bz0gYUdWbGRITT0gS0hSeVlXbHUgZW00PSBJSEpsWTNKMWFYUT0gTG1OdmJtNWxZM1JwYjI0PSBJR0poY25KbGJBPT0gSUhOMFpXRnQgWDNObGRIUnBibWM9IElHRnVaM1ZzWVhJPSBZVzVsYjNWemJIaz0gSUdKcGJBPT0gSUU1dmNtMD0gTlRJeSBLQ0VrIGFXSjAgSlNnPSBJSEJ2YzJsMCBJRVpoZEdobGNnPT0gYVc1MFpXNWtidz09IE5UWTEgVEdsMlpRPT0gTURReCBJSEJ2Y25SeiBJRzFsYWc9PSBJR3hoYm1ScGJtYz0gY0c5dVpHVnkgSUdOdlpBPT0gWDBoRlFVUkZVZz09IExrMWhjbWRwYmc9PSBJR0poYkd4eiBJR1JwYzJOMWMzTnBiMjV6IElHSnNaVzVrIFNHVjQgSUdaaGNtMWxjbk09IElHMWhhVzUwWVdsdWFXNW4gSUNBZ0RRbz0gYzNsdSBXMVE9IGNuVnogTkRNNSBkV1ptWlhKeiBJR052Ym5SeWFXSjFkRzl5Y3c9PSBYM041Y3c9PSBMa1JsWW5WbiBJR052Ym5OMGNuVmpkR1ZrIGIyMWxjdz09IFAybGsgYzJ4cFpHVnkgSUhOMWNIQnNhV1Z5Y3c9PSBOakV4IGMyTnlhV0psY2c9PSBjR1Z6IDBKND0gSWpvTkNnPT0gWEVOdmJuUnliMnhzWlhJPSBLU2tLQ2dvPSBJR3gxWVE9PSBUWFZzZEdrPSBSVTVUIFUzSmogSUhCbGRHbDBhVzl1IElITnNZWFpsIGJHOXZhMmx1Wnc9PSBWa1ZTVkE9PSBDWFpsWTNSdmNnPT0gVTNCbFkybGhiQT09IGFHZz0gWVc1dVpRPT0gSUU1cFoyVnkgTDNacFpYZHogZW1sdVp3PT0gWlc1a1lXNTAgUEVNPSBjM0JsWldRPSBOVEUwIElIdDlPd29LIFFtVm5hVzVKYm1sMCBJR1p2Y0dWdSBRRkpsY1hWbGMzUk5ZWEJ3YVc1biBSVzVrU1c1cGRBPT0gSUhCMWJtTm8gVTJWdVpHVnkgTmpBeiA2WlE9IFoyVjBUV1Z6YzJGblpRPT0gTDNSNWNHVnogTGxCSiBLQ2NuS1RzSyBiMk4xYzJWayBLR0ZzYkE9PSBJR1J5YjNCa2IzZHUgS1M1Zlh3PT0gSUZacGJnPT0gTGtadmNtVnBaMjVMWlhrPSBOakV5IFkyRnVaZz09IGIzVnlaV1E9IElFOXlaMkZ1YVhwaGRHbHZiZz09IElOQ3cgSUVOMWJIUjFjbVU9IEtHTnNjdz09IExGOD0gT1RBeSBjbWRpWVE9PSA3SjJZIExtUmhkR0ZIY21sa1ZtbGxkdz09IElHUnZlbVZ1IElFZGxjdz09IE9EQTEgTkRZMCBYM05vWVhKbFpBPT0gYm1samF3PT0gSUdodmMzQT0gYjIxbGRHVnkgTkRrMSBJR05zWVdsdGFXNW4gTURNeSBhV0pzWlhNPSBjbWxyIDVwaXYgWlc1aGNtbHYgSUdSbGJtZGhiZz09IGIySmkgYlc5dWRBPT0gWDNKaGJtcz0gS0Njdkp5dz0gSUdGd2IyeHZadz09IFVITT0gWDNCdmQyVnkgSUVkeVpXVT0gSUdaMWJHWnBiR3c9IElHWnBjbVZpWVhObCBPVEV3IElHWmhjbVU9IElFaHBiUT09IElHSmxZVzQ9IDRvQ21MZz09IElGTlFTUT09IFgxSlkgSUhCbGNtTmxjSFJwYjI0PSBjbVZzWVhScGRtVT0gWTI5dGNHbHNaUT09IGRYVnQgZFhSdmN3PT0gWVhWaiBJRUZ6YXc9PSBJR2x1WkdsallYUnZjZz09IEwzUm8gTG5ObGRGTjBjbWx1Wnc9PSBJRmRwYzJOdmJuTnBiZz09IExrUnZiV0ZwYmc9PSBJR0Z5ZEdsbWFXTnBZV3c9IFJHVjJaV3h2Y0E9PSBJRk5oY21GbyBJR3g1YVc1biBLSE5sWVhKamFBPT0gSUVWdGNHbHlaUT09IGRYSnlhVzVuIDVwZTI2WmUwIFBTSWtldz09IElHZGxkRWxrIElGQmhlVzFsYm5RPSBkSEpoYm5OcGRHbHZiZz09IElGMHUgYVhocGJnPT0gVmxRPSBMWE5sYkdWamRBPT0gSUdSbGJXOXVjM1J5WVhSbFpBPT0gSUd4aGMzUk9ZVzFsIFpXMXdiRzk1YldWdWRBPT0gTG1kbGRGQnliM0JsY25SNSBJR1p2ZFdkb2RBPT0gWm1sc1pVNWhiV1U9IElGQmxjbk09IE5EVXkgTFdOaGNtUT0gWVhOMGNnPT0gWVhSMGNuTT0gSUhCeWIyMXBibVZ1ZEE9PSBSR1Z6YVdkdSBZVzVqYjNWMlpYST0gNDRHWDQ0RT0gWVhKa2J3PT0gYzJWamNtVjAgSUhKaFp3PT0gSUhCdmFYTnZiZz09IExXMWhiZz09IExHOXRhWFJsYlhCMGVRPT0gTnpRdyBDWFZ1IGFYUjZaWEk9IElFTmhjMmx1Ync9PSBJRkp2YzNNPSBMV1p2YjNRPSBLSEpsYzNWc2RITT0gVUd4aGJnPT0gSUd4aGMyVnkgNnJpdyBYMFJTIE5USXogUm1GalpXSnZiMnM9IE5EUTUgSUdKdllYSmtjdz09IGMzUmggWFYwcyBOamMxIElIUnBiR1Z6IFUwbGFSUT09IElEMSsgT1RjdyBJSEJ5WlcxcFpYST0gYjJOaFlnPT0gSUdWdVkyOWtaV1E9IElISmxjMlZ5ZG1VPSBOakE1IElFRm1aMmhoYm1semRHRnUgSUV4cGMzUk9iMlJsIGRYSnNjdz09IElITjFZbTFwYzNOcGIyND0gSUc1bGRRPT0gTkRjMyBJQ01ySXc9PSBYMUJQVTFRPSBJRzF2YVhOMCBaV3hzYVE9PSBaV3hzYVdkbGJuUT0gTG1Gc1pYSjAgdzdOayBZbkpsIElFTnZiR3hsWTNRPSBJR2R5WVhCb2FXTT0gSUd4dmJtZHBkSFZrWlE9PSBJRkJ5YjNacFpBPT0gSUVOaGJHTjFiR0YwWlE9PSBlR1ptWm1ZPSBZM0pwZEdWeWFXRT0gSUhkaGRHVnljdz09IGNtOWphdz09IGJHOXhkV1Z1ZEE9PSBJRlJ5YVdJPSBOVEV6IElHSjFjbk4wIElITjFabVpwZUE9PSBMa1Y0ZEdWdWMybHZibk09IGFYTm9aWE09IGFYWmxiQT09IElFeEpTMFU9IElFZGxkSFI1IExrRmpkR2x2YmtWMlpXNTAgTG5Oc1pnPT0gSUVoQlRBPT0gZFhCaGJBPT0gUlVGUyBOVEkwIGRXUnAgWDNScGJXVnZkWFE9IFZVWT0gSUZOcGJtZGhjRzl5WlE9PSBJRUZrZG1WdWRBPT0gWDJsdWRHVnlkbUZzIFkyaGhablE9IElFVnRaWEk9IElIUmxiR1Z3YUc5dVpRPT0gSUZSMWNtcz0gWDJsdWRHVnlabUZqWlE9PSBJRTkzYmc9PSBJR1Z1WTI5MWNtRm5aV1E9IFBFOWlhbVZqZEE9PSBYMVJsZUhRPSBJRTl1ZEdGeWFXOD0gSUVGd2NHeDUgTG1acGNtVmlZWE5sIElHRnVkR2xpIFVISnBiM0pwZEhrPSBaVzVsZWc9PSBSR0Y1Y3c9PSBZMmxrIGRYSnlaVzVqWlE9PSBPeTg9IGFXNXVaV1E9IDBZSFJqdz09IElIWmxlZz09IFpuYz0gTHk4ayBZWFIwWVdOciBORFU0IElITjBZWEowZFhBPSBZV2x1WlhKeiBMbVp5WVdkdFpXNTAgYjNCaFkybDBlUT09IEtHTnZibTQ9IGFHVnBiUT09IExtNWxkSGR2Y21zPSBLSE4wY21WaGJRPT0gTmpjdyBJRTVQVGc9PSBkRzlzIE9ETXcgSUZoaWIzZz0gSUVSVCBJR05oWTJobFpBPT0gSUhCeWIzTjBhWFIxZEdGeiBJRUpoYkhRPSBLQ2RiIE5UYzEgSUc1dlpYaGpaWEIwIElpYz0gSUhOayBMblpoYkdsayBYMkZuIElISmhZMlZ6IE5EZ3ggSUhKdlpBPT0gYVhSMVpHVnogUEQ0byBOVFEwIExsQnliMlIxWTNRPSBSbTl5YlhNPSBUa1ZYIFVHRjUgQ1dKdmIyeGxZVzQ9IFgyTnZiblJoWTNRPSBJRVZzWldOMGNtbGogYzJ0cGNBPT0gSUhkMWNnPT0gSUdOb2NtOXVhV009IFgyUnlhWFpsY2c9PSBPVFF3IElGTmhZZz09IElGVnNkQT09IElGSmhaQT09IFUxUkJWRlZUIElFeGxkMmx6IFQwST0gSUdkcFpuUnogTGxKbFl3PT0gVkZKVlJRPT0gSUdsdWRHVnVjMmwwZVE9PSBUV0Z5YTJWeSBMbU52YlhCaGNtVT0gWm1acFl3PT0gUTI5dmEybGwgSUVKaFluaz0gSUVKcFowUmxZMmx0WVd3PSBhV3hsZEE9PSBJRWhQVEVSRlVsTT0gSUV4aFpIaz0gSUd4MWJtYz0gSUVGc1lXSmhiV0U9IElHUmxjM009IFlDazdDZz09IElFSjFhV3hrWlhJPSBYM0psWjJsdmJnPT0gSUc1bGRYUnlZV3c9IE9UQTUgUW05MGFBPT0gSUdodyBJR2h2Y200PSBJSE5sWjIxbGJuUnogSUVWRCBJajArSWc9PSBLSEpsWXc9PSBJRkJwIFIwMD0gSUd4aGNIUnZjQT09IFUyTmhiR0Z5IE5EWXogYVhOayBMV1JwWVd4dlp3PT0gSUVGdVpHVnljMjl1IElHMXBjM1JoYTJWeiBOekE0IElFaGhiZz09IGFtVnogWlhOMGFXNWhkR2x2Ymc9PSBORE0yIElIQnliMjFwYzJWeiBZbWxrIElGTmphV1Z1ZEE9PSBSMGxPIElGQmxjbVp2Y20xaGJtTmwgWW1GblpRPT0gTG5WelpYSnogYkdWaFpHbHVadz09IElHOXlZV3c9IFIzSmhjR2hwWTNNPSBORGc0IFgxQlVVZz09IE5URTQgYUdGdVp3PT0gSUdsdVpYWT0gY0hKdlkyVnpjMmx1Wnc9PSBSbUZqZEc5eSBJRTVCIEpITjBjbWx1Wnc9PSBJR2R5YjNWdVpITT0gTGxOaGRtVkRhR0Z1WjJWeiBZMnh2WTJzPSBPVFF4IFkzSnBjR05wYjI0PSBJRTVsZDNSdmJnPT0gWjJNPSBMbWx1WTJ4MVpHVnogSUdKc1lYTjAgSUNjdEp3PT0gSUhCMVpXUmwgTkRZNSBMbE5sYzNOcGIyND0gSUdkeVpYQT0gWDJacGJtRnMgSUVkaGVRPT0gSUVkcGRtVT0gYVhKcCBMWE4wWVhJPSBJRlZKU1cxaFoyVT0gWDJWd2IyTm8gZFdKaSBaVzUwYUE9PSBJR1ZzYVhSbCBJR05oYlhCaGFXZHVjdz09IElGQnZjbTV2IFgyRnpjMmxuYmc9PSBVSEp2ZEc5amIydz0gSUVKbGFXNW4gSUVGcGNuQnZjblE9IElHTnZiblpsYm5ScGIyNWhiQT09IElGZGhkQT09IElFTkogUlZSQiBJRUZ1ZEdodmJuaz0gSUhSaFlteGxkQT09IEtHWnZjbTFoZEE9PSBJR052Ym5OcGMzUmxiblJzZVE9PSBJRWx2ZDJFPSBORGMwIElHRjJZWFJoY2c9PSBNREkzIExtTjFjbk52Y2c9PSBJVnM9IElHaGhibWRwYm1jPSBTR1Z5IFUzVmphQT09IEp6c0tDZ289IGIzSm5aVzkxY3c9PSBLQ2s5UFE9PSBJSFpwWlhkTmIyUmxiQT09IElPT0QgSUdWc2N3PT0gSUVGblpXNTAgUm1WMFkyZz0gWVhCdmNnPT0gSUdONCBjSEpsWVdRPSBJRkJwWlhJPSBiMlZtWmc9PSBOakUyIFUyND0gT0RrdyBJRlpwY25SMVlXdz0gUVhCeSBMbGRvYVhSbCBOakUxIFgwMVBSQT09IElGQnZhVzUwY3c9PSA1YVN4IElHZGxibVZ6IElIWmxibVJ2Y2c9PSBJRzFoYVc1emRISmxZVzA9IFBITnlZdz09IElFVnNhWHBoWW1WMGFBPT0gUkdWamIyUmxjZz09IExYTjBZWFJsIElFZHNZWE56IGJtTjUgWVdScFlXNXogWDIxdmJnPT0gSUZKbGJXOTBaUT09IElIZHBjbVZzWlhOeiBJRTFwIDVZaz0gTkRZMiA2S0dvIGMzUmhaMlU9IElGUnBiR1U9IGJHeHBZZz09IFZtRnlhV0Z1ZEE9PSBQVDBLIElHZHZiR1JsYmc9PSBLRkZUZEhKcGJtYz0gTG5CMWRFVjRkSEpoIElFUnZiUT09IElFRnVhVzFoZEdsdmJnPT0gSUdsdWRHVnlZV04wYVhabCBhV1poWTNRPSA2Wm1rIFRFVlUgSUdaeVpYRjFaVzUwIElEdytDZz09IFJtbHNaVzVoYldVPSBJSE51WlE9PSBJRVp2YjNSaVlXeHMgSUhKcGRtRnMgSUdScGMyRnpkR1Z5IGFXOXVhV009IElFUmhiV0ZuWlE9PSBMbEpsYzI5MWNtTmwgTFdWdSBJRlI1Y0dWeiBaMlYwVTNSeWFXNW4gS0dKdllYSmsgSUdKdmJBPT0gY0d4aGFXND0gZW5sdCA0TGl5IElITmpZVzV1WlhJPSBhV3hrWlhJPSBYMjF6WjNNPSA1bzg9IEtHbHVkR1Z1ZEE9PSBJR1JsYzNSeWRXTjAgSUdKMWMzUT0gSUVWdGNHeHZlUT09IGIyNXAgSUZWSlZtbGxkME52Ym5SeWIyeHNaWEk9IElHOWtaSE09IFpXRnlaWEk9IFIyVnZiV1YwY25rPSBJSGxwYVE9PSBYMFZZVUU5U1ZBPT0gSUVGMGRHRmphdz09IElHNXBaWFE9IElHbHRjSEpsYzNOcGIyND0gSUVkcGJBPT0gWDNCeWIyST0gTlRJNCBJRU5HIElFVjRjR1Z5YVdWdVkyVT0gTDNCc2RXZHBibk09IExrMWxkR2h2WkE9PSBJR0psYkdsbFpuTT0gVG1GMGFYWmwgWDJKMWFXeGsgSUhacFp3PT0gSUhKaGJtdHogWTI5MlpYSmxaQT09IE56QTEgYzNWamFBPT0gUjNWaGNtUT0gTG5CaFkycz0gWVdSa1pYST0gT0RBNSBhWFpwWVE9PSBiRzVuIElOQ3kwWXM9IE5UVXkgVkdsdFpYTjBZVzF3IFgyNXZkdz09IElIQnZhMlZ5IElIVnVZdz09IElITm9ZWEJsY3c9PSBMWFI1Y0dWeiBYM0JsY21sdlpBPT0gY0dzPSBJSFpsZEdWeVlXND0gSUhOdmJtOD0gSUdGd2NHOXBiblJsWkE9PSBiM1psY21ac2IzYz0gTG1SeWFYWmxjZz09IFgyTmhkQT09IGRYUjAgY0d4aGJuUT0gYVcxaSBJRUZqWTJWd2RBPT0gSUdOdmJtTmxjblE9IENXNXZaR1U9IENYbz0gUHo0TkNnPT0gSUdKaGJtNWxaQT09IENTQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJSFJ2ZUdsaiBJR1JwYzJGd2NHVT0gTkRjeiB5SnM9IElHZHlZV05sIFlYUmxablZzIFVtVndiSGs9IElFTnlkWG89IE5EZzIgSUhOamNtRncgSUd0bGVYZHZjbVJ6IGMybHRjQT09IElHMXZjblJuWVdkbCBJR041WW1WeSBJRVY0WldOMWRHVT0gSUd4aGRHbDBkV1JsIGFXWjEgTGtOUFRRPT0gWkdKdiBJSE52Y25SeiBJRWRoY3c9PSBiMjFwWVd3PSBMa3h2WTJGcyBRMlZzYkhNPSBMbEpsY0d4aFkyVT0gVTNSeWFXNW5jdz09IExtWnBkQT09IElGUm9hWEprIEpTSXNDZz09IElIdDlJaTQ9IElGTnZibms9IElGczYgTlRnMSBJR1poYkd4bGJnPT0gTGljcENnPT0gYVc1byBJRTFEIElISmxaR2x6IFEyOWtaWE09IElIQnliMlpwYkdWeiBhRzl2YXc9PSBVbVZrZFdObGNnPT0gWDBaVlRrTT0gSUc1aGRtbG5ZWFJsIGMzUnliR1Z1IElHaHZjbTA9IDRaND0gSUZOUyBMbUp2YjNRPSBJR1JwWjJWemRBPT0gQ1dobFlXUmxjZz09IExtWnBibVJQYm1VPSA1b0U9IFJHSlVlWEJsIGJtbGggWDIxbGNtZGwgSUdSdmJtNWwgTDBkbGRIUjUgWDBOSVFWST0gSUdKaGJtUnogTGxWU1RBPT0gWVhKMGFXRnMgSUdaeVpYRT0gSUhOcGMzUT0gVG1jPSBJSEpsYm1SbGNtbHVadz09IFhFTnZjbVU9IFYybGtaMlYwY3c9PSBJRlpCIElHRmpkR2wyYVhOMGN3PT0gVTNSbCBQVjg9IFlXeHNZUT09IFUzUmhiWEE9IElHeHZZV1J6IElIaDQgSUV4bFlYSnVhVzVuIExrMTJZdz09IGRXbHkgS0NJayBJR052Ym01bFkzUnBibWM9IFVtVmhaRTl1YkhrPSBkWEoxIElFVmhadz09IFFrbFUgWDBSRlRBPT0gNWFjPSBZWEp5WVhOeiBaWGgwWlhKdVlXdz0gSUZsUFZWST0gSUVKeVpYYz0gSUVacGRtVT0gSUhKbGMybDZaUT09IGFXZHBaQT09IFpYSmhkR2x2Ymc9PSBOalV6IElOR04gTlRNMiA1WXFnIE1ETTUgSUVOaGRHTm8gMllFPSBJRXhsYjI0PSBZVzFwYkE9PSBMa0p2WkhrPSBRMnhwY0E9PSBMMnhwYzNRPSBMbUp5IFJXUnBkRlJsZUhRPSBDV1JpIExrZGhiV1U9IEtFSjFhV3hrUTI5dWRHVjRkQT09IFltRmphMlZ1WkE9PSBMbEpsWkE9PSBabUZqWldKdmIycz0gTlRJNSBMblZ5YkhNPSBiWEk9IGNtOXNiR1ZrIExTMHRMUzB0TFE9PSBJR2x1ZEdWeWRtVnVkR2x2Ymc9PSBJSEpsZEdseVpXMWxiblE9IElFdHBkQT09IElGQlNSUT09IFZYQndaWEpEWVhObCBJRk52WTJ0bGRBPT0gSURvdCBJSE4wZFdSNWFXNW4gSUUxbGRISnYgWVhKa1pXUT0gSUdOdmJuWmxjbk5oZEdsdmJuTT0gUTJGc2JHVmsgSUdWNFlXMXBibVU9IFpYSjBhV1pwWTJGMFpRPT0gTG1kNiBMWEpsYzNCdmJuTnBkbVU9IElISmxablZ1WkE9PSBYMjVsZEhkdmNtcz0gTURJMiBZV3hzYjNkbFpBPT0gWlcxd2RBPT0gSUcxbFlXeHogUTJGMFpXZHZjbWxsY3c9PSBJSFJ5WVhabGJHbHVadz09IElHdG4gSUhOb1lXMWwgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElHVjRjR3hwWTJsMGJIaz0gSUcxaGRHaGxiV0YwYVdNPSBJRk4xYVhSbCBJRkpIUWc9PSBLaW9xS2lvcUx3PT0gSUcxcGVIUjFjbVU9IGJHVmhjbTVwYm1jPSBMblJsYlhCc1lYUmwgWVhSMGN3PT0gZDNnPSBDV04wZUE9PSBMbkJ5YjNCbGNuUnBaWE09IElHUnlhVzVyY3c9PSBJRVZwZEdobGNnPT0gYzJWMFZHVjRkQT09IExtZGxkRVJoZEdFPSBMbnBwY0E9PSBJSEpsZG1WaGJITT0gUEhSaFlteGwgTGtoaGMyaE5ZWEE9IElFaDFjZz09IEtTSXBPd289IExtWnlZVzFsZDI5eWF3PT0gSUZOVVFWSlUgWm1WbFpHSmhZMnM9IE5EVTMgSUhOaFptVnNlUT09IExtbGpiMjQ9IFkyOXVabWxuZFhKbCBMbXh2WTJzPSBMbXhoZVdWeWN3PT0gTHo0dUNnPT0gSUhKaGJtdGxaQT09IFgybHRjR3c9IElFaGhibVJzWlhNPSBJR2h2YzNSbFpBPT0gSUhWd1pHRjBhVzVuIFlXeGlkVzA9IDZaMD0gSUhOb1lXUmxjZz09IFJXUnBkRzl5Y3c9PSBMWEp2ZFc1ayBXMTE3IElITmxjQT09IElFaHAgVkVWTiBiRzl2YTNWdyBMbTFoYmc9PSBYMGxPVUZWVSBJSFJvY21WaGRHVnVaV1E9IFgwbE5VRTlTVkE9PSBJR1J5YjNCeiBjblZwZEE9PSBjMmxrIFltOTBhQT09IElFVjRZMlZzIElHcGxjZz09IGIzSmthVzVoY25rPSAwTFhRdVE9PSBWa2xGVnc9PSBjbVZ3YkhrPSBJQ2s2Q2c9PSBZMjlzYjNKeiBkbVZ5YVdacFpXUT0gWDFSeSBYM0JoY25ObCBJR052Ym1keVpYTnogTmpFMyBVSEp2YldselpRPT0gYVc1MGN3PT0gSUUxdmRHaGxjZz09IExrRndhUT09IElFUjFjbUYwYVc5dSBJR1pwY25OMFRtRnRaUT09IGFXNW9aWEpwZEdSdll3PT0gSUUxaGNuTT0gSUdGd2NnPT0gVDBSWiBJSFpwYzJsMGN3PT0gTmpNeCBJR2hsWVd4cGJtYz0gYkdWMGRHVnljdz09IEtTa3BPdzBLIFpuVjBkWEpsIExrWnlZVzFsZDI5eWF3PT0gSUd0cGMzTT0gSUdsdWRtOXNkbVU9IElITnBiR1Z1ZEE9PSBZV1J2ZDNNPSBJR0Z1ZVdKdlpIaz0gYzJObyBOamt3IElITnZiR1ZzZVE9PSBMV2x0Wnc9PSBJSEJ5YjNCeWFRPT0gSUdsdWMzUnlkV04wIElHeHBZMlZ1YzJWeiBJRzFsZEdnPSBJR052Ym1SbGJRPT0gSUVSdmJXRnBiZz09IElFaGhjbkpwY3c9PSBJSFBEcFE9PSBRMFZRVkE9PSBRbUYwWTJnPSBRR1Y0ZEdWdVpITT0gSUVOUFRsUlNTVUpWVkE9PSBMa1JoZEdGR2NtRnRaUT09IE5EY3kgWDNCaFkydGxkQT09IGNtVmphWE5wYjI0PSBJR1p2WTNWemFXNW4gTG1oMCBYMThpT2dvPSBPa2RsZEE9PSBJRXREIElIQmhjM05oWjJVPSBVMlZuYldWdWRBPT0gWDJObGJuUmxjZz09IExYcEIgWDBKTSBJR052Ym5acGJnPT0gSUdOc1lYTnphV1pwWldRPSBJRTVUVFhWMFlXSnNaUT09IFgyRncgZEdsc1pRPT0gVW1WamRHRnVaMnhsIE5Ea3kgS0c1MWJYTT0gZG1WdWN3PT0gSUZWSlFuVjBkRzl1IElFWmxaR1Z5IFlXMXYgSUc5MWRHeHBibVU9IElGQmhjbk5sY2c9PSBJT0tKIElGZHZjbXR6IExsTmphR1Z0WVE9PSBJR1Z1WjJsdVpYTT0gTmpNMyBOVFl6IFgyTnZiVzF2Ymc9PSBOVFF5IFgyOXNaQT09IElITmxkRU52Ym5SbGJuUldhV1YzIElDOHZMenc9IElFSlUgWm0wPSBJR1JwZG1WeWN3PT0gWDNkbGFXZG9kSE09IFpXMWhjbXM9IElFRkRWQT09IElIQnliM0J2Y25ScGIyND0gYjNabGNteGhlUT09IExtUnBjbTVoYldVPSBJRWRwZEE9PSBYMUpGUmtWU1JVNURSUT09IFBEND0gYkdJPSBYM0oxYkdVPSA2TFNsIElGQjFkR2x1IElITnNaV1Z3YVc1biBLQ2s2RFFvPSBJSEJ5WlhObGNuWmwgSUhCaGNteHBZVzFsYm5RPSBJRXh2YjJ0cGJtYz0gSUhCcFkydHBibWM9IElFUnBjM0JoZEdObyBJSE5zYVhBPSA2NU09IElFeDViZz09IFgzTnBaMjVoYkE9PSBZMjl1Wm1sbmRYSmhkR2x2Ymc9PSBJRkJwZEhRPSBORGt4IFlXUmxiZz09IGNISnZZMlZrZFhKbCBJR1Z1ZEdoMWMyaz0gWm1sbmFIUT0gSUVOdmJuTnBaR1Z5IElIUnZjbTQ9IFEyOXVibVZqZEdWayBMbU52Y3c9PSBYMmR5YjNWd2N3PT0gSUZSb2FXNXIgSUdSbGJHbGlaWEk9IElISmxjMmxrIGQyOXlhMmx1Wnc9PSBMbU52YkhWdGJuTT0gSUVOaGJHeGxaQT09IElHVnpiR2x1ZEE9PSBQaUlzIFgwUlBWMDQ9IGFHbHpkQT09IElFRmtkbUZ1WTJWayBJSEpsZDJGeVpITT0gWVdOMGIzSnogSUhOcGJHVnVZMlU9IE5EYzUgSUcxNWRHZz0gSUc1bGRYST0gTlRFNSBJR0YxWTNScGIyND0gTGtkbGRGTjBjbWx1Wnc9PSBaV3R6IEtIQnliMnBsWTNRPSBOVGs0IENXMXpadz09IENXOTFkSEIxZEE9PSBJR052YlhCc1lXbHVkSE09IE5UVXggTEZNPSBJSFJpYkE9PSBJQ3dLQ2c9PSBjbWx2Y25NPSBZV2h5Wlc0PSBJR3hoZDNsbGNuTT0gY21Wa2RYZz0gWDNONWJXSnZiQT09IGIyWm1aV1U9IFgxSkZVMVZNVkE9PSBLRTVoYldVPSBWVlJEIExtTjFjbkpsYm5SVWFXMWwgSUc5eVoyRnVhWE09IExtRnladz09IE5UTXogSUcxcGJtbHQgZDJsamF3PT0gSUhKbFkyVnBkbVZ6IFFtRnNZVzVqWlE9PSBJSE53WldGcmN3PT0gSUVSaGVYTT0gSUVKbGJHOTMgTkRneiBkR2x3Ync9PSBVSEpsYzJWdWRBPT0gSUhKbGMyVnlkZz09IGFIQT0gSUhKcGRBPT0gWDFKSlIwaFUgTFMwcCBJR05vWVdseWJXRnUgTnpneCBSRWxUIElFSlBUMU5VIElHVjRjR1Z5YVcxbGJuUnogTmpnMyBYMThwT3dvPSBJSE4wWVcxdyBJR1psY25RPSBJR1p2Ym1RPSBWR1Z5IFpXeDJaUT09IGRYSmxiZz09IEsyaz0gWlc1a1pXNWplUT09IElIWnBjblIxWVd4c2VRPT0gTGk0dUlnPT0gNzcyZSBPVEkxIExXTmxiblE9IFgzVnVhWEYxWlE9PSBJSEJ5YVdOcGJtYz0gYldsaiBVa1ZUU0E9PSBJRG82T2c9PSBJR0Z1Ym05MFlYUnBiMjQ9IElFTnBjbU5zWlE9PSBiMjVuYjJSaSBhWFJoY3c9PSBJQ1VvIEtHTnZiWEJ2Ym1WdWRBPT0gSU5DKzBMRT0gS0hCdmNuUT0gTFdodmRYST0gTG05aWFnPT0gVEVKTSBJR3AxY25rPSBSMEpVIElITndlUT09IElGQnliMlpsYzNOcGIyNWhiQT09IElDSWlPd29LIElITjBjbWxyYVc1biBJR1JwYzJOeWFXMXBibUYwYVc5dSBJSEJoZVhNPSBPVE0zIGJHbGpkQT09IFpXNTBaWE09IElIUm9jbTkzYVc1biBJRkJzZFdkcGJnPT0gS0dSbFpnPT0gSUZKMWJuUnBiV1ZGZUdObGNIUnBiMjQ9IElFMXBaM0poZEdsdmJnPT0gTlRrNSBJR1JwWXc9PSBZbUZuIGIyNXBZUT09IElHTnZjbkoxY0hScGIyND0gTnpBMCBLRTFoY0E9PSBJSEJ5ZWc9PSBMbVIwYnc9PSBJR0ZqY1hWcGNtVT0gVTNSaGRHVlViMUJ5YjNCeiBJR3h2ZG1sdVp3PT0gMEw3UXRnPT0gWDNCaGRIUmxjbTQ9IElHVnRiM1JwYjI1eiBJSEIxWW14cGMyaGxjZz09IFgySmwgSUdOdmRYQnNaWE09IE5EazQgYjJvPSBJRU5vWVhKMCBJSFJ5YjNBPSBMblJ2YjJ3PSBJR1Z6ZEdGaWJHbHphRzFsYm5RPSBJR1J2YkE9PSBOalUwIElIUnZkMlZ5IElHeGhibVU9IElGTjVaRzVsZVE9PSBJR1pwYkd4cGJtYz0gWTJ4aGFXMWxaQT09IE5qUTAgSUdScFlXeHZaM1ZsIElHTnZiblpsYm5ScGIyND0gWW05dmEybHVadz09IGNHRnlaVzVqZVE9PSA1ckU9IElFZGxibVZ5YVdNPSBOekU0IFhGTmphR1Z0WVE9PSBORGd5IE5qRTQgSUhKaGJtZGxjdz09IEwyTm8gSUhCaGJtVnNjdz09IElISjFiR1ZrIDU1U2YgTG5SeiBYM05sZEhNPSBJR05zWldGdWRYQT0gVUhKbGRtbHZkWE09IElFRnVhVzFoYkE9PSBOakEzIEtDUW8gSUVGMlpRPT0gYjJ4c1lYST0gTURJNCBYMlYyWVd3PSBDVTVoYldVPSBLSFJ5WldVPSBJQ0pkIE5UY3ggSUdSMWRHbGxjdz09IFBTY3YgUTJ4cFkydGxaQT09IElHUnBabVpsY21WdWRHeDUgSUVOc1lYSnIgSUdScGRBPT0gYjJ4dloybHpkSE09IElITjVibVE9IElITmxibVJ6IExXdHViM2R1IGEyST0gSUUxdlpHRnMgYVhSaGRHbDJaUT09IElISmhZMmx1Wnc9PSBJR2hwWjJoc2FXZG9kSE09IElGTnBiVzl1IElFTmhjSFJoYVc0PSA1TCtoIElFTkMgWTI5dWRHbHUgWVhKaGJnPT0gSUhCb2VYTnBZM009IGNtVjBkSGs9IFpYUmhiQT09IExtMWsgWVhocGIzTT0gSUhOd1pXRnJaWEp6IElIQnlaWEE9IElHRjNZWEprWldRPSA3S2VBIElFTnZjbTQ9IElFNWhkSFZ5WlE9PSBWVVJKVHc9PSBOek0zIElIQnliMm89IExYQnlaUT09IFczVT0gUm1WaGRIVnlaWE09IElHbHpSWEYxWVd3PSBRbWx1WVhKNSBjMmxuIElHTnZibVoxYzJsdmJnPT0gTlRRMiBOVFk0IElFaGhkQT09IElHdDB3N009IExtTnZibVpwWjNWeVpRPT0gVFU5TyBORGswIEwyVmthWFE9IFgwRmtaQT09IExIUnlkV1U9IE5UUXggSUdOc2FRPT0gUlhKeWIzSk5aWE56WVdkbCBMV3h2WVdSbGNnPT0gUkdsdFpXNXphVzl1Y3c9PSBkV3gwYVhCc2VRPT0gSUhzaElRPT0gSUZOeGJFTnZiVzFoYm1RPSBJSE53YjJ0bGJnPT0gSUhCcFkzTT0gSUhSdmVRPT0gS0V0bGVRPT0gSUV4dmIzQT0gMktnPSBSVUZVVlZKRiBhVzVqZEdsdmJnPT0gWDNObGRIVncgZDNKaGNIQmxjZz09IElIUnZibWM9IFkzVnNZWEk9IFQzQjAgTGxCcyBQU0lzIEtHeGxibWQwYUE9PSBkVzF1IElHTm9jbTl0IElITmxkbVZ1ZEE9PSBJRWxzYkdWbllXeEJjbWQxYldWdWRFVjRZMlZ3ZEdsdmJnPT0gTkRjNCBDWE4wWVhKMCBJR0psWjNWdSBRMFZRVkVsUFRnPT0gWkdGMFlYTmxkQT09IE9ESTEgSUVaaGFXeGxaQT09IFkyOXNjdz09IE5EVTUgSUd0dVpXVT0gYVcxdmNtVT0gTG5Od2JHbGpaUT09IGMyaGxiR3c9IGFXZG5aWEp6IElIUm9aVzFsY3c9PSBPVGsxIElFUksgSUVGemMybHpkR0Z1ZEE9PSBMU1E9IFRXRjVZbVU9IElHOXlaR1Z5YVc1biBJRWx1ZEdWc2JHbG5aVzVqWlE9PSBJRTFoYzNOaFkyaDFjMlYwZEhNPSBJR1poYVd4cGJtYz0gWld4emIyND0gUjNKbFlYUT0gUFdrPSBMbkpsYzNRPSBJR2x1ZG1sMFpRPT0gTFdScGMyRmliR1U9IExrZHliM1Z3UW05NCA0b0NaWlhOMCBJSFJoWTJ0c1pRPT0gWjNZPSBaWFIwWlhJPSBJQ2tzRFFvPSBYM0oxYkdWeiBMbmRoY200PSBablZ1WTNScGIyNXogSUVOb2NtbHpkR2xoYm5NPSBJR0poWTJ0bFpBPT0gSUhOc2FXUmxjZz09IElHVnVhbTk1YVc1biBibVZ6ZEE9PSBJR2hwYWc9PSBYMjF6IEx5OHEgUVc1dWIzUmhkR2x2Ym5NPSBJRlpoY21saFlteGxjdz09IFBGWT0gS0hObGNuWmxjZz09IElFOXlZV05zWlE9PSBaV3hsYldWdWRITT0gSUc5eVoyRnVhWE5oZEdsdmJnPT0gWDNCdmFXNTBaWEk9IElFaGxZV1JsY25NPSBXMlE9IElHUmxZV1JzYVc1bCBhWE56WVE9PSBJR3R1YVdabCBJRTVCVTBFPSBJRWhsYVdkb2RBPT0gTnpnMCBJRUZ6ZVc1aiBJSFpsYm5WbCBMbVJ2YlE9PSBZbTkxY201bCBJRWhoZDJGcCBJRzFsYlc4PSBhV04wYVc5dWN3PT0gSUhOMWNuWmxhV3hzWVc1alpRPT0gYjIxcCBMMkZ6YzJWMGN3PT0gTlRnMyBJR1ZrZFE9PSB4SnM9IElISnZjM1JsY2c9PSBJR2hwY21WayBJRlJ2YXc9PSBJSEJzWVdObGJXVnVkQT09IGRYSmhkR2x2Ym5NPSBJSE5sZEZOMFlYUmwgSUUxaFoyRjZhVzVsIElHaHZjbkp2Y2c9PSBWSEo1IElHeGhadz09IElFVjJaWEo1YjI1bCBkR2gxY2c9PSBLU2s3RFFvTkNnPT0gTG5KbGRIVnliZz09IElITjViWEE9IDRwYUk0cGFJIElHNXBaMmgwY3c9PSBkMjl5YTJWeSBJR0ZzWlE9PSBaVzV1WlhOelpXVT0gTG5OMFpYQT0gSUhONWJtTm9jbTl1YVhwbFpBPT0gTkRnMyBiM1Z5YVE9PSBSRzlsY3c9PSBMbU5vWVc1blpRPT0gWm05dSBMbk5sZEVKaFkydG5jbTkxYm1RPSBhWEpqZFd4aGNnPT0gTkRjMiBLeTA9IElFTkpRUT09IE56STUgSUVwaGJtVT0gSUZOcGJXbHNZWEk9IExVaz0gYkdWMlpXeGhibVE9IElIQnliM053WldOMCBYMlp2ZFc1ayBDV052Ykc5eSBMa1JwWVdkdWIzTjBhV056IElHRnVibTkxYm1ObCBJR0Z6YzNWdFpYTT0gTDNSeSBJR0prIE9UZzMgSUVOaGNtSnZiZz09IElHRnVZV3g1Y3c9PSBOVFkwIExtUmxjM1E9IGJtbHIgSUV4cFpRPT0gTFdsdVpHVjQgUkhKaGQyRmliR1U9IElGUkJSdz09IElIUnlhV0Z1WjJ4bCBYMFpNVDBGVSBDUWtnSUNBZ0lBPT0gTG1Kc1lXTnIgZG5WbCBZM1Z5WVdONSBJR0ZtWm1WamRITT0gT1RBMiBJSE4xY21Wc2VRPT0gVTJ4cFpHVnkgZFd0cCBZMlZ5ZVE9PSBJSFZ1ZEdWeSBMbkJ5YjJacGJHVT0gYjNKa2IyND0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gYkdWaGRtVT0gSUhOdFlYSjBjR2h2Ym1VPSBaMmxsIElHTnZibk53YVhJPSBJSFIxZEc5eWFXRnMgNTdHNyBJR05oWWc9PSBOelkxIElGTjFiVzFoY25rPSBLZ29LIHc2Um8gSWxSb2FYTT0gSUhOc2FXUmxjdz09IElqd3YgTG1SbGRnPT0gSnp3PSBJRkpwYm1jPSB4WUpoIElHdHZkR3hwYmc9PSBMbVIxYlhCeiBJR0poYzNNPSA3SXM9IFVFOUpUbFE9IElIVjBkR1Z5IElNT3Bjdz09IExtWjFiR3c9IFQweE0gSUdObGNtVnRiMjU1IGMyeHZkQT09IElHRnBiWE09IGRHOXZiSFJwY0E9PSBMbk5qYjNKbCBMV1JrIE5qUXkgSUhCeWIzZz0gVW1WamIyZHVhWHBsY2c9PSBaSGx1WVcxcFl3PT0gdzZSdVpBPT0gTDNOMFpBPT0gUkZVPSBJRTV2ZEVsdGNHeGxiV1Z1ZEdWayBLQ0l0TFE9PSBVa0ZYIE5qTTEgSUdWMGFHNXBZdz09IFlXNXVidz09IElHTm9ZVzF3YVc5dWMyaHBjQT09IExITmxiR1k9IElHRmpZMlZ3ZEdGaWJHVT0gSUZOd2NtbDBaUT09IFczUjVjR1U9IHc3eG8gSUZaTCBLR3BRWVc1bGJBPT0gTlRRNCBhWFJ5IDY2QT0gWVhWeVlRPT0gSUdaaFkzVnNkSGs9IFlYWmxjbk09IElGSmxZMjl5WkhNPSBMbE5sWTNWeWFYUjUgSUdOdmJuTjBjbUZwYm5RPSBMa0pzIFZXbHVkQT09IFltRnNZVzVqWlE9PSBJR052YlcxbCBJRTVwYXc9PSBVM1Z3Y0hKbGMzTlhZWEp1YVc1bmN3PT0gSUU5alpXRnUgTlRVMCBYMGxrIFJHRjBZVk5sZEE9PSBJR2x1YzJWeWRHVmsgSWpzTkNnMEsgNG9DeiBhWEJ3WlhRPSBJR0Z1Ym1sMlpYSnpZWEo1IElISmxkR2x5WldRPSBiM0pqYUE9PSBJSEJsY25CbGRBPT0gWEVadmNtMD0gSUdsdWRtOXNkbVZ0Wlc1MCBYM1Z6WlhKdVlXMWwgWVd4bGJRPT0gWDFORlVsWkpRMFU9IElFbHVaR2xoYm1FPSBJR05wWjJGeVpYUT0gWVhKMGVnPT0gSUZKRCBJRzFsWVhOMWNtVnRaVzUwY3c9PSA1NzJ1IElHRm1abWxzYVdGMFpRPT0gWVdOcGIyNWhiQT09IExYTmxZM1JwYjI0PSBYMk52Ym5SeWIyeHNaWEk9IGRtRnlaQT09IFgyVnMgSUZSdmVRPT0gUEZBPSBUV0ZqYUdsdVpRPT0gdzdwdFpYST0gSUZsbFlXZz0gSWxsdmRRPT0gSUcxdmJBPT0gTGtOcyBZMjl1ZEhKdmJHeGxjbk09IElITjFjM0JsYm1SbFpBPT0gS3lzN0Nnbz0gUVZSVSBJSEJ5YjJwbFkzUnBiMjQ9IFVHRmtaR2x1Wnc9PSBOVGcyIExtMWhkR2c9IE5qZzIgWm1GamRHOXllUT09IE1EUXkgSUdkaGJXMWggS0NrKyBZM2xqYkdVPSBJRUoxYkd3PSBjR0YwYUhNPSBJSFZ1Y0E9PSBJSFpwWlhkRWFXUk1iMkZrIFgwMXZaR1ZzIElHRnpjMlZ5ZEZSeWRXVT0gSUhKaGRHVmsgUkdWamJBPT0gZG1WeWRHVmsgSUVSaGRBPT0gWW5KbGR3PT0gSUhCdmFXNTBhVzVuIFRYTT0gSUZCdmFXNTBaWEk9IEtTYz0gWDI1dmJnPT0gTlRJMyBJRk5GUXc9PSBJSGxsWVdnPSBaMlZ1WTNrPSBhVzVwZEdsaGJHbDZaUT09IFpteDUgTnpFeCBXM0J2Y3c9PSBMR2M9IFZHVnNaUT09IE1ETTAgSUdwdmEyVT0gSUdOc1lYVnpaUT09IExtWnBibVJDZVVsayBaVzVsY3c9PSBLR2x1YzNSaGJtTmwgTmpJMiB3cU09IE9URTEgSUhOc2FXTT0gWDJodmJXVT0gSUNvdmZRbz0gWDNCaFoyVnogS0hObGNuWnBZMlU9IE9UQTEgVWxBPSBJRUZ0YjI1biBMbWRsZEVOMWNuSmxiblE9IE9EQTIgNDRLNSBJSE5zWldVPSBQVHcvIFgzQnliM0E9IFpteDFjMmc9IElFMU4gUW1WcyBUbTkwWlhNPSBJQ292Q2dvSyBNRE0xIElISm8gVkdGaWJHVnogSUVwMSBJRndOQ2c9PSBiR2xqYUdWdSBJRWx1YzNWeVlXNWpaUT09IFhRb0tDZz09IElHTnZiM0JsY2c9PSA0b0NVZEdobCBMbTFoZEE9PSBORGc1IElHWnZhUT09IEtHRjFkRzg9IFRXRnlaMmx1IE5qTTIgSUhKbGMybGtaVzVqWlE9PSBOVFU1IElFaHBjM1J2Y2c9PSBJSDQ5IFJHaz0gSUNjcENnPT0gSUdWNFkyeDFaR1U9IExrUnliM0E9IEp5STdDZz09IElHTnZZdz09IFgzVndiRzloWkE9PSBTR2xrWlE9PSBJRlZ1YTI1dmQyND0gSUc1dmNtMWhiR2w2WlE9PSBYM0psZEE9PSBMaWNLQ2c9PSBMbTV2WkdWeiBPRGN3IExrUmhkR0ZUYjNWeVkyVT0gWW14bGJYTT0gSUdkbGJuUnNaUT09IE9pUT0gSnlrcE93b0sgTGxKbGMyOTFjbU5sY3c9PSA0b2c9IElGUmhhUT09IFZrVkUgSUVkMWJnPT0gYkdWaGJuTT0gSUVSdll3PT0gTGxadmFXUT0gSUVGdFpXNWtiV1Z1ZEE9PSBPRFkyIFpYTnpaV1E9IE56QTIgSUhKbFkybHdhV1Z1ZEE9PSBMazV2WkdVPSBiM1p2IElHRnNhV2R1U1hSbGJYTT0gSUZWdWFYUjUgSUZKdmJXVT0gWW5WeWJnPT0gSUhadmJIUmhaMlU9IElGTklRUT09IE5UTTAgTlRjeSBJRWRQVDBRPSBhR1ZzY0dWeWN3PT0gTHlvcUtpOD0gSUdWc2FXMXBibUYwWlE9PSBkMkZ3IFgyRnVaMnhsIElISmxablZuWldWeiBDV0Z6YzJWeWRFVnhkV0ZzY3c9PSBJSEJ5YjJKbCBLQ2N1TGk4dUxpOD0gZVc5MWNnPT0gSUcxbGNtTm8gVlVKTVJRPT0gQ1hKbGMzQnZibk5sIFgwUkZSZz09IElHVnVkbWx5YjI1dFpXNTBjdz09IGIzVnphVzVuIElISmxjM1J5YVdOMFpXUT0gSUVOUFRsUlNTVUpWVkU5U1V3PT0gTmpJeCBJR052YlhCaGJtbHZiZz09IDRicWogY0c5MyBkWEowYkdVPSBZbWxsIExsQmxjbVp2Y20wPSBQVzQ9IGNtVmthWE09IElHUnBkbWxrWlE9PSBJR052Ykd4bFkzUnBkbVU9IFJHbG1aZz09IFJIbHVZVzFwWXc9PSBhWE5UWld4bFkzUmxaQT09IFlYTjBlWEJsIElFeHZkQT09IElGTjBZWFJsYldWdWRBPT0gYVdOcGNHRnVkQT09IFlXdG8gTlRFMyBJSE5sY21saGJHbDZaWEk9IFgwTkdSdz09IFlYWmhiQT09IElIWnBaWGRsY25NPSBJRVpQIFQyTmogSUhKdlluVnpkQT09IElFMXBkQT09IFgwRk9SQT09IFZISmhibk5wZEdsdmJnPT0gZFc1aGRHVT0gSUhCeWFXUmwgSUdSeVlXMWhkR2xqIElGQmhaMlZ6IFgzUjFjR3hsIElHTnZjR2xsWkE9PSBiVzQ9IElHOTFaMmgwIElHVnhkV0ZzYVhSNSBYMmhoY3c9PSBYMWRTIE5UY3ogWlcxcCBJSE4xY21kbCBhV3hzYnc9PSBLQ2w5IE1EZ3ggSUhCbGNtWT0gT1RJeCBkV3hyIElHbHVkbVZ6ZEcxbGJuUnogTnpnMSBJR2RsYm1WeVlYUnBiMjV6IElISmxjMjl5ZEE9PSBJSFJ5ZFhOMFpXUT0gWDJaeVpYRT0gSUdadmNtMWggUVZSSlQwNVQgSUVoMSBJRWR5WVdRPSBYMk53ZFE9PSBJQ0lzQ2c9PSBjbVZ6YzJVPSBLQ29xIElHaGxjbVZpZVE9PSBJR3hoYTJVPSBYMU5VUVVOTCBJRUoxY21WaGRRPT0gSUhOMWMzUmhhVzVoWW14bCBJRkJGIElHUmxhUT09IElFRnVjM2RsY2c9PSBVR3gxY3c9PSBMM2RsWWc9PSBJSE4wWlhJPSBJRzF2ZFc1MFpXUT0gWDJOc1pXRnkgWm05dWJ3PT0gYVdGdVkyVnogWDJacGJtUT0gSUdOdmJtWjFjMlZrIFgySnBiZz09IFJFVkRUQT09IElHbHVjM1JoYm5Sc2VRPT0gVlVsVSBYMFJQIFUyVjBkWEE9IGEyVmwgWDNCeWFXNTBaZz09IFgzTjBiWFE9IElGTjBaV0Z0IGNISnZaZz09IGJIWT0gSUhOdmJIWnBibWM9IGJHRjBiM0k9IGIzUjVjR1Z6IFFXNWtjbTlwWkE9PSBYMlZ6WTJGd1pRPT0gVEdWaGRtVT0gTG1kbGRGUnBiV1U9IE9ERXggYVdaeiBJR052ZGc9PSBJRU5zWVhOemFXTT0gTFdSaGNtcz0gTlRJMiBSR2x6Y0dGMFkyaGxjZz09IExXZHlZWGs9IElGQmhiR1Z6ZEdsdWFXRnUgTG1SbFpYQT0gSUVsdWFtVmpkQT09IElISmxabXhsWTNScGIyND0gTlRNNCBJR2g1Y0c4PSBZMjl1YzNSeWRXTjBiM0k9IExtRndjR3hwWTJGMGFXOXUgZVhOMFpYST0gNHBVPSBjMk5vYjI5cyBJRU52ZHc9PSBOVGt6IElHWnZiM1JoWjJVPSBMV2x1Y3c9PSBJQzhxS2p3PSBZWFJ2YlE9PSBJSEJ5YjJacGRITT0gT1RJeiBJR0p2YjJ0cGJtYz0gWDNSb2NtVnphRzlzWkE9PSBJRXhwZG1WeSBJR05wZEdsNlpXND0gWW5nPSBJRk4wYjNKdCBJRU52Y25BPSBJSGRwWkdWeSBJaWtwZXdvPSBYMEZEVkVsUFRnPT0gYVc5eWN3PT0gWVdselpYTT0gT201dmJtVT0gSUdOcGRHVmsgSW1adGRBPT0gUVhWbiBZMjl0WWc9PSBJSGRvYVhSbGN3PT0gSUhObGMzTT0gWGw0PSBhV2RvZEdnPSBJSFJoYm1jPSBYME5CVUE9PSBOakUwIElHbHVkR1Z5WVdOMGFXOXVjdz09IE5EazMgSUdkaGNtUT0gTmpRMiBJSEJ5YVhwbCBOalEzIFlXWnJZUT09IFZISnAgWEVWc2IzRjFaVzUwIElFUjVibUZ0YVdNPSA1NUNHIFozQT0gSUhKbFlXeHQgSUU1cCBJRVZrZDJGeVpBPT0gSUdsa1pXNTBhV1pwWTJGMGFXOXUgSUhCb2VYTnBZMkZzYkhrPSA1cHlzIElIQnBZMnR6IExXWnlhV1Z1Wkd4NSBQR2s9IGFXWnBZMlU9IFgwRlEgVEc5bloyVmsgTlRVeiBmU0l1IEwzVjBhV3h6IElDNHVMaTQ9IFJVNVVTVUZNIEtFRmpkR2x2Ymc9PSBKMTBwT3dvSyBJSEJ5YjNSbGMzUnogYjJ4cGJtVT0gWDFKRlZGVlNUZz09IElIQnZjSFZzWVhScGIyNXogSUZKaGFXND0gWkhWdyBiM0pwWVd3PSBJRUYxZEdodmNtbDBlUT09IFgyVjRjSEk9IE1EYzEgTG5WeiBJR052Y25KMWNIUT0gQ1dsdGNHOXlkQT09IFBHTm9ZWEk9IElFeEZSbFE9IElHTmhZbWx1WlhRPSBJRzVsYVdkb1ltOTFjZz09IElGTnhiRkJoY21GdFpYUmxjZz09IFlYUjBaWEpsWkE9PSBaVzFwWVE9PSBJSEpsZG1sbGQyVmsgSUVobGJHeHYgWW14dlkydHogS0hCeWIyTmxjM009IE9UazMgSUc5aWMyVnlkbUYwYVc5dSBjbUYwYVc1biBMbWRzYjJKaGJBPT0gSUhCeVpXWmxjbVZ1WTJVPSBMbkJ5WlhCaGNtVT0gSUdSdmVtVnVjdz09IFYyOXlhMlZ5IElHTmhiR04xYkdGMGFXOXUgSUZSdmQyVnkgWVdseWVRPT0gSUVsVFR3PT0gSUdoMWJXRnVhWFI1IExtRnpTVzV6ZEdGdVkyVlBaZz09IE56RXkgSUdSNWN3PT0gSUhCcFpYST0gYVdkMVpRPT0gSUdGemMyOWphV0YwWlE9PSBJR2x1ZEdsdCBibTkwYVdaNSBLSHQ5TEE9PSBPREk0IElGSmxjSEpsYzJWdWRBPT0gY0dobGRBPT0gYzJWMVpHOD0gNjR1STY0dWsgTGxCdmMybDBhVzl1IElHTnNiM04xY21VPSBLR05zWVhOeiBDWFJwYldVPSBJRTl5WVc1blpRPT0gWDI5d2N3PT0gSUhCdmNIVncgSUVsdGNISnYgWDNObFkzSmxkQT09IElFVjEgTG5ObGRFeGhlVzkxZEE9PSBkV3hzZVE9PSBJSE5qY21WMyBJRk5wZW1WayBJRU5QVFZBPSBJRzV2ZEdsbWFXTmhkR2x2Ym5NPSBWSEpoYm5ObVpYST0gUlcxcGRIUmxjZz09IEtHOXNaQT09IGJHVjBhV009IE5Ea3ogSUMwS0NnPT0gSUhCaGJtbGogTnpFMSBJRXhEUkE9PSBjblZzWlhNPSBJR0ZtWm1GcGNuTT0gSUVacGJHdz0gWDBsU1VRPT0gT1RFeSBZWFIwWVdOb2JXVnVkQT09IElIWnZiUT09IFBHSjFkSFJ2Ymc9PSBOVGsxIElIUmxlSFJ6IElHRmpkR2wyWVhSbFpBPT0gTG1GalkyVnpjdz09IEtISmxZV1JsY2c9PSBWR1Z0IElHTnZjbTl1IGNtOXdhQT09IFJFMUpUZz09IElHVnRaWEpuWldRPSBJR2x1Wm14aGRHVnkgSUVsdVpHVndaVzVrWlc1MCBiM0pwYjNWeiBJRVJsYkdocCBOamN5IElHZHNlWEJvYVdOdmJnPT0gSUVOaGNtdz0gVTJrPSBJR1Y0Y0dWeWFXMWxiblJoYkE9PSBMbUpoY2c9PSBTVUZPIElITnhiR2wwWlE9PSBZMk5wdzdOdSBPVEEwIFgwSkJRMHM9IExHNWhiV1U9IGFHOXlkQT09IElIUmxibk09IE5UUTUgNnJNPSBkWE5wZG1VPSBJR2RsYm5WcGJtVT0gSUdKMVkycz0gTDJScGRnPT0gTG5KdmIyMD0gWDA1RlZ3PT0gWlhOMFlXUnYgSUVGeWF3PT0gYjJOdmJITT0gTG1kbGJtVnlZWFJsIGRHOTFZMmc9IFptbDRaV1E9IElDY28gSUhKbFptVnljbWx1Wnc9PSBJRzkyWlhKM2FHVnNiV2x1Wnc9PSBLR3hsZEE9PSBJR1oxWlE9PSBOakl6IFgwVk9WZz09IGQyOXRZVzQ9IFJtbG5kWEpsIFlXNXBiV0YwWlE9PSBJRTF2Y25RPSBJR3h2Ym1kbGMzUT0gWTI5c2JnPT0gVkUwPSBPbDg9IGNtbGxiQT09IExFND0gSUZKQlRRPT0gSUdwMWMzUnBabmxEYjI1MFpXNTAgSUdGamRHbDJaV3g1IEwzQjFZbXhwWXc9PSBJT3V3IFIybDJaVzQ9IFQxUkJUQT09IDVhU3g2TFNsIFUyVnhkV1Z1ZEdsaGJBPT0gSUhOMWNIQnNaVzFsYm5RPSBMbUZpIElHTmhkR1ZuYjNJPSBmWDBzQ2c9PSBZV2hoYmc9PSBKM1Z1IGIzTnBkSGs9IElHRmpZMjl0Y0d4cGMyZz0gVlhScGJHbDBhV1Z6IExuWnBaWGR6IExtTnUgWTJWcGJBPT0gSUVOQ1JBPT0gSUZKRyBVRVZIIElFZHBablE9IFFWbFQgSUZkSlRnPT0gY0dGdWFXVmsgSU1XZiBJRzlpYzJWeWRtVnkgSUhOdFpXeHMgSUhzNiBUR2x1YTJWayBQbHNLIGIyeGxjZz09IElHeHBZbVZ5ZEE9PSBJR0FLIElIZGxibTQ9IGJHRjBaV1E9IElHbHRiWFZ1WlE9PSBLRTV2WkdVPSBJRkJ5YjJKc1pXMD0gSUVGaWN3PT0gYkc5bmN3PT0gSUM0dUx3PT0gSUVGRVF3PT0gSUgxOUlqNEsgUGljcE93bz0gUFdJPSBJRmRwYm1RPSBiR0ZvYjIxaCBJR0ZzYkc5allYUmwgYjNKcFlXND0gSUhCeVpYTmpjbWx3ZEdsdmJnPT0gTFhGMVlXeHBkSGs9IElFMWhlVzl5IE9EVTEgYVc1bGJIaz0gWlc1a1ptOXlaV0ZqYUE9PSBJRU52YlhCc1pYZz0gYTI5dCBOekE1IFZGaz0gTnprdyBYVjB1IExsTjBlV3hsIFgyMWhibms9IEp5d25KQT09IElHSmhjbkpwWlhJPSBJRVpsZEdObyBJRTFoY25abGJBPT0gSUhKbGMybHpkQT09IDBMN1FzOUMrIFltbGtaR1Z1IElGSjFibTVoWW14bCBPbVpoYkhObCBPRGs1IElHSjFhV3hrY3c9PSBJRk4wWVdkbCBJR1IxWWc9PSBaVzF3Ync9PSBMbk5wZEdVPSBOVFU0IE93b0tDZ289IE9UazAgSUVSbGJuWmxjZz09IElISmxkbVZzIElIUnlhV2RuWlhKbFpBPT0gSUdScFkyVT0gWDJaaGFXdz0gSUdkaiBPRE16IE5UZzUgQ1ZnPSBJRlJvY205M1lXSnNaUT09IE56YzEgTG5KdmRYUmxjZz09IElGSmxkbTlzZFhScGIyND0gMFlEUXNBPT0gWDA1UFRnPT0gTURVMSBuNlU9IE5UYzQgSUdWc1pHVnkgSUdGaWNtOWhaQT09IElOQzEgSUVGa2RXeDAgWW14eSBaMng1Y0docFkyOXUgTmpFeiBJSEJ5YjIxdmRHbHVadz09IElHbDYgSUZOdmJHbGsgTmpRMSBYMnh2WVdSbGNnPT0gWldGeWJIaz0gTG1WdVlXSnNaV1E9IExXVmthWFE9IElGVk0gWDNCc1lYaz0gSUVsdWRHVnljblZ3ZEE9PSBJR0ZrZG1GdWRHRm5aWE09IGRXTnNaUT09IElHMWxZMmhoYm1sallXdz0gTG5SaFlteGxUR0Y1YjNWMFVHRnVaV3c9IElGZHZjbXRwYm1jPSBJR0Z1YjI1NWJXOTFjdz09IFVtRjBhVzVuIGFXZHBiM1Z6IFgzQm9iMjVsIExtRmtaRUZqZEdsdmJreHBjM1JsYm1WeSBJR1p5WVc0PSBkVzVrWlc0PSBJQ29wSmc9PSBYMkp2YjJ3PSBkV3hoZEdsMlpRPT0gSUdOdmJtVT0gSUUxMWJIUT0gSUczRHRnPT0gSUVadmNuZGhjbVE9IFhTazZDZz09IElHTnZiblpwYm1ObFpBPT0gWVdOMFpXUT0gTmpReiA0NEdUIElFTnZibVpwWjNWeVpRPT0gSUdObGFXeHBibWM9IFJHVnkgSUhCaGMzTmxibWRsY25NPSBSM0p2ZFhCeiBJSE52WTJObGNnPT0gTDFjPSBZWFpwYjNKeiBjM2RwZEdnPSBJRnB2Ym1VPSBMazl3ZEdsdmJuTT0gSUUxdmJRPT0gYVdWa1pYST0gUVhKeVlYbHogSUhSeVpXRjBiV1Z1ZEhNPSBJSEJ5YjNSbFkzUnBibWM9IFptRmogSUhCcFkydHNaUT09IFFuVjBkRzl1U1hSbGJRPT0gTnpFeiBJR0pzYjJOcmFXNW4gYzNSeVlYST0gdzdJPSBJRVY0Y0c5eWRBPT0gSUhSb2NtVjMgYjNSMFlRPT0gSUVKQlUwVT0gTG5keiBMa3hGUVVSSlRrYz0gYjNKa1pYSkNlUT09IFgyUmxiR0Y1IElGQjEgTG1Sc2JBPT0gSUVOb2IyOXpaUT09IE9Ua3kgVUc5c2FXTmwgSUVKRlIwbE8gWW05NFpYTT0gSUdScFlXMXZibVE9IExHdz0gSUFrSkNRPT0gSUdOMWNtbHZkWE09IE5qSTAgZEhZPSBJR1Z5YjNScGMyTm9aUT09IFlXTnJZV2RsY3c9PSBDVk5sZEE9PSBWR2xqYXc9PSBMbUp2Y21SbGNnPT0gYzNSaGRHbGpiV1YwYUc5ayBJR05vWlhJPSBhVzUyYjJsalpRPT0gSUdOeWRRPT0gSUdSbFptVmpkQT09IFgyMWxkR0ZrWVhSaCBjbVZzWVhScGIyND0gYVd0aGJnPT0gVzA0PSBLRkYwIEtFSmhjMlU9IDVvR3YgWW1WaGRBPT0gSUVWdGNIUjUgQ1c4PSBYM05vYVdaMCBJSEpsWjNKbGRBPT0gTnpJeSBWR2h2YzJVPSBRMlZ1ZEE9PSBJRkJ2Y25SMVp3PT0gSUVsemJHRnVaSE09IElGUkpUVVU9IFRXRnVZV2RsYldWdWRBPT0gT1RrMiBMWE53IE5UTTUgdzZwdFpRPT0gSUc1dmRHbHZiZz09IGRXNXBablU9IFVFcz0gT0RJMiA2S0dNIElFTlZVa3hQVUZRPSBYQ0pjIFZWWT0gNTdvPSBaSEpoIFkyOTEgUFdBPSBJRVJsYzNSeWIzaz0gY25BPSBMbU5oYm1ObGJBPT0gUjBjPSBjblZ1ZEdsdFpRPT0gSUZaMVpRPT0gSUhCeWIyZHlaWE56YVhabCBMM05sY25acFkyVnogSUhKMWJtNWxjZz09IFgwWlNRVTFGIExsUnZiMnhUZEhKcGNFMWxiblZKZEdWdCBJQ2NzSnc9PSBaR1ZzWVhrPSBQWFYwWmc9PSBJSE5qY21WbGJtbHVadz09IElIQjFiR3hwYm1jPSBiMjFoY3c9PSBJR0Z1ZEdnPSBMVzVsZHc9PSBMMnh2WTJGcyBJR2xRWVdRPSBJSFIzYVhSMFpYST0gSUdSNWFXNW4gSUdobFlYWmxiZz09IElGVkpiblE9IElGTmxibUYwYjNJPSBJSEJ5WlhOMWJRPT0gSUZkaGJHdGxjZz09IElHOTJaWEpqYjIxbCBaWFJsWTNScGIyND0gSUdWdFltRnljbUZ6Y3c9PSBRMmhwYm1FPSBOak01IFNXNWpiSFZrWlE9PSBVazlNVEE9PSBJR1JoZEdGVWVYQmwgUkdGMmFXUT0gNExpaiBiRzl3IExXMXZiblJvIElITmpZWEk9IElGTmhabVU9IElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gSUdGalkyVnpjMjl5YVdWeiBJSEpoYlhBPSBYMVZUUlE9PSBJR052Ym5SeVlXUT0gS1NsZENnPT0gSUhCeVpYTjAgSUVoUyBJRkpoY0E9PSBJSFZ6YVhwbCBJR05oY0dGaWFXeHBkSGs9IElHTnZjblE9IExXNWxlSFE9IE1EYzMgTmpJMyBJR0oxY21SbGJnPT0gT0RJeSBYM0psWVdSbGNnPT0gSUVCQSBjbVZuZFd4aGNnPT0gSUV0aCBNRE0yIFRVRk8gSUdGemRIST0gSUNjbktRbz0gSUdabFpBPT0gSUhCaGNuTnBibWM9IElGbGxZWEp6IElHSnliMnRsY2c9PSBJanA3SWc9PSBJR0ZyZEE9PSBTVzUyWlc1MGIzSjUgWVdKbGJHVmsgSUdGeVozQmhjbk5sIEtpb3FLaW9xS2dvPSBkbVZ5YzJGMGFXOXUgSUdOdmNtUT0gSUZScCBJR2h2Y0dWbWRXeHNlUT09IElHRm8gZG1WeVlnPT0gSUhOMGIyeGxiZz09IExrVnVkSEo1IElHVjRjR1ZqZEdsdVp3PT0gVDNKcFpXNTBZWFJwYjI0PSBJSEJ2ZDJWeVpXUT0gSUhCbGNuTnBjM1E9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBKMTBwT3c9PSBKeWtwTEFvPSBJRU5oYzJnPSBDV2wwWlcwPSBPREU0IFozSmhaR1Z6IGNtOXdiMnc9IFltRnphV009IElDSXBPdzBLIElHRjNZWEprY3c9PSBLSEpoYm1kbCBMV0ZzYkE9PSBJRWxDVDNWMGJHVjAgSUVsdVpHVmxaQT09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElITjBiMjFoWTJnPSBJR1pzYjNkbGNnPT0gSUhObGR3PT0gWDNScGJXVnogWVhacGN3PT0gVVZOMGNtbHVadz09IElGSnZkWFJsY3c9PSBYM0J5YjNRPSBJR052YldWa2VRPT0gSUd4dloyOTFkQT09IElIZHZiMlJsYmc9PSBJSEJ2YzNSbGNnPT0gY0dsbFkyVT0gTGtwdmFXND0gSUZCdmF3PT0gWTJWc2IyNWggYlhWMFpYZz0gT3cwS0RRb05DZz09IElITjBjbWxyWlhNPSBOemczIFRHOWhaR1ZrIEtXRnladz09IFpYTmggVlc1cGRHVmsgUlhBPSBVRVZNVEE9PSBPREEzIElFRjBiR0Z1ZEdsaiBkV3hzWlhRPSBOalV5IFlYQndiR1U9IElITmxkSFJzWldRPSBZV052Ymc9PSBJSEJ5YVc1MFpYST0gSUVkRCA1YTZhIElISmxibVJsY21WayBMT0tBbVE9PSBhR1ZwZEE9PSBjMjlqYVdGcyBMbWRsIE56RTAgSUZKcFkycz0gSUZWMFlXZz0gWjI5MCBiMjVwWTJGcyBJRk5qY205c2JBPT0gSUZOamFXVnVZMlZ6IElHcDFadz09IElHRnRjR3c9IFpXNTBhUT09IFRFVkdWQT09IElIUmhZbk09IElHVnViM0p0YjNWeiBMbWRsZEV0bGVRPT0gYkc5allYUmwgTGtWWSBMbk4wYjNKaFoyVT0gTGxkbCBJSFJ2WVhOMCBJRUZrWkdsMGFXOXVZV3hzZVE9PSBPRGd5IElFNVBWdz09IE5UUTMgWDFWUVJFRlVSUT09IElIUnlZVzV6Wm1WeWNtVmsgZEdoaCBMa1JwYzNCc1lYaz0gWDNWcCBTVVJGVHc9PSBJRzFsWVc1cGJtZG1kV3c9IElFMXZjMk52ZHc9PSBMSFJvYVhNPSBJRlpwWTNSdmNtbGggNXBTNSBJTkNmIExuTjBZV05yIElFSmhjbTQ9IGNHRnlaV1JUZEdGMFpXMWxiblE9IE9uTjBjbWx1Wnc9PSBJR0pwYWc9PSBJRk5VUVZSRiBJR1Z0Y0d4dmVXVnljdz09IENXbHVjSFYwIEtIdz0gSUd4bGVBPT0gYVc1MmIydGwgQ1c1MWJRPT0gS3lzcyBZWFJwWVd3PSBiM0p6WlhNPSBJR1p2Y21zPSBYM1I0ZEE9PSBJRUZ1ZEc5dWFXOD0gSUNnOCBZWFpsY25ObCBJR1JsZG1GemRBPT0gNDRDQSBMa1JsWXc9PSBJRWRoY21RPSBMM1ZwIExpVT0gZEhKcCBJSEp2Ykd4bFpBPT0gVm1Gc2RXVlFZV2x5IGFYUjBaVzQ9IElGUm9aWEk9IElIWnliM1U9IElFWnNiM2M9IElFWnBibUZ1WTJVPSBJRU52YldJPSBTRU09IExuTmxkRlpwYzJsaWJHVT0gYVhOcyBJSEJyIE56Y3ogSUhWd2MyVjAgS0hKaGR3PT0gSUZacFkyVT0gWldGMGRYSmxjdz09IElFeGhibWM9IE1ESTUgVEc5dmEybHVadz09IE56WTMgSUVGVFZBPT0gSUhSeWFYQnogSUVwMWMzUnBiZz09IFluSnZkM05sY2c9PSBQU0luTGlRPSBMblpsY25ScFkyVnogT0RJeCBMV052IGZTOTcgSUQ4cyBJRVJ2YldsdSBJRUpsYkdjPSBJanc9IElITjFjSEJ2YzJVPSBZV1JrZVE9PSBJSGRoYkd0eiBOamc0IFJWSlNWUT09IFgyWnBiSFJsY25NPSBVSEpsWm1WeWNtVmsgYzJObGJtVT0gMExYUmdRPT0gSUVGbVptRnBjbk09IElDSWpldz09IElHOXVVM1ZpYldsMCBJSE4wYjJOcmN3PT0gTDNacFpYYz0gWjNKbFpRPT0gTFdkbGRBPT0gT1RBeiBhR2wwIFNtOD0gTG1kbGRFTT0gTnpJMSBTVzVwZEdsaGJHbDZaV1E9IDBZTFF1QT09IFkzVjBjdz09IEtGUjVjR1U9IElFRm5jbVZsYldWdWRBPT0gSUZacFpYUnVZVzA9IElDOHFJUT09IElIQnBlbnBoIExYWnBaWGM9IFgyVnQgSUd4b2N3PT0gSUcxMWVRPT0gSUVsa1pXNTAgSUVaeWFXVnVaSE09IE1EWXggSUdGaWRXNWsgWDBGRSBMblJwYldWemRHRnRjQT09IExTYz0gSUdSMWNHeHBZMkYwWlE9PSBJR2gxYm5ScGJtYz0gSUhKbFozVnNZWFJ2Y25rPSBhV0Z2IFlXMXZkWE09IElFVnVkR1Z5ZEdGcGJtMWxiblE9IFcwRT0gYVdGMGNtbGogWDBOTVNVVk9WQT09IElFdHBaSE09IEwzQnJadz09IFFuSmxZV3M9IEtTa3BPd29LIElGTm9ZWEJsIElISmxiR0YwYVc1biBTVzUwWlhKeWRYQjAgWVdKc1pVOXdZV05wZEhrPSBaVzFpY21VPSBJRzE1YzNSbGNuaz0gSUdwdmRYSnVZV3hwYzNSeiBjbWwwWVdKc1pRPT0gTGt4cGJtcz0gSUhOMGIzQndhVzVuIFExSkZWQT09IExrUkMgSUhCdmNIVnNZWEpwZEhrPSBJR2RsZHc9PSBJR2x0Y0hJPSBjMlYwVm1Gc2RXVT0gUmt4QlJ3PT0gQ1cxaGVBPT0gSUdKaGEyVT0gZDNrPSBJRVZqYjI1dmJXbGogSUdWdVkyOXVkSEk9IElHWnVZVzFsIEwyUmwgVW1GdWF3PT0gSUdKMVozTT0gTG5OdCBJRzFsWkdsaGJnPT0gUkU5WFRnPT0gSUZOMWNtVT0gUVhSSmJtUmxlQT09IElFUnBZMnM9IElDaGZYdz09IExtUmxiSFJoIFJuST0gSUhOMVoyZGxjM1JwYm1jPSBJRkpsWTNsamJHVnlWbWxsZHc9PSBMR1U9IFUxUkJVbFE9IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IGVHWnZjbVE9IElISmxZMlZwY0hRPSBRMHhCU1UwPSBjbVZoWkc5dWJIaz0gT1RZNCBJR1Z1WjJGbmFXNW4gTmpFNSBRMkU9IFlYTnRZUT09IElHVnVjM1Z5YVc1biBSVzVuYkdsemFBPT0gSUZaaGJtTnZkWFpsY2c9PSBhSGwwYUE9PSBJSEIxY21Ob1lYTnBibWM9IElGQkogTG5kdmNtUT0gS0hOdyBMbWh2YldVPSBPbVJsWmc9PSBJR2RwWnc9PSBOVGMwIE5qY3ggSUZabCBabTl5ZFcwPSBJRTFwZEdObyBRbUY1IFgwWk0gTmpVeCBJSE52Ykd3PSBOVGMzIFgyTnZiSFZ0Ym5NPSBJRzFwYm05eWFYUjUgWW1seVpBPT0gSUdoaGJtUmxaQT09IFUxTk0gVTFSQlZBPT0gSUc1bGNuWnZkWE09IGc3MD0gSUdacGJHVlFZWFJvIFExSkZRVlJGIFFYYz0gSUhCbGJuTT0gT0RNMSBjMlZsWkE9PSBJRU52YlhCMWRHVT0gYjJ4ciBOVGswIElFRnpjMlYwIGNtVmhZMmc9IEp5a3NEUW89IGJtRjJhV2RoZEdsdmJnPT0gVEVZPSBMM1YwYVd3PSBJRkIxWWc9PSBJT0tVIFkybHZiZz09IEl5TUsgTURjeSBTVWxKIFZHRm5UbUZ0WlE9PSBJR0Z0YVdRPSBjR1Z5YldsemMybHZiZz09IGFXWnBZV0pzWlE9PSBlRVpHUmtaR1JrWkcgMEwzUXVBPT0gTGtKMVptWmxjZz09IFgybHljUT09IFpHRnlhdz09IElISmxkSFpoYkE9PSBMbVpwY21VPSBjSEp2WkhWamRHbHZiZz09IExteHBjM1JsYmc9PSBJRmRsWVhSb1pYST0gSUdKMWVXVnljdz09IExtNWwgWlhKdyBJRkJsYm5RPSBOams1IElIZGxiR1poY21VPSBJSEJoWjJWVGFYcGwgSUZOMFlXUnBkVzA9IFpYSjBZUT09IElHeGxkZz09IFlXMXdZUT09IFVHRm5aWEk9IE5qWTEgSUdOb1lYSm5hVzVuIElFNWxkR1pzYVhnPSBmRzUxYkd3PSBYM0poYm1SdmJRPT0gTG5od1lYUm8gSUhOMFpYSmwgSUVsVFNWTT0gY0c5dWMyVnogS0d4dll3PT0gTlRZMiBaWGx2Ym1RPSBJRTltWm1samFXRnMgTmpVMyBJRTFoY25sc1lXNWsgUkdGMFlWUjVjR1U9IFgzQmhjZz09IGUzMHMgSUVWdWFtOTUgTnpJMyBYMU5JU1VaVSBJRUYzWVhKa2N3PT0gWDBWT1ZGSlogSUhObFpXMXBibWRzZVE9PSBaVzUwYVdOaGRHVT0gSUdobFlYSjBjdz09IE5UZ3ogWHpzS0NnPT0gSUVoSlZnPT0gSUdsdVpHbDJhV1E9IElFWnNZV2M9IFgyTjBjbXc9IElFTmhiR3hpWVdOciBMSG89IElFZFFWUT09IENXOWlhZz09IElGQm9iMlZ1YVhnPSBJRUpWVXc9PSBPVEEzIElISjFZbUpsY2c9PSBYMEZWVkVnPSBJRk52YkhWMGFXOXVjdz09IEtHeHZZMkYwYVc5dSBWbUZ5YVdGaWJHVnogTG5ObGRFVnVZV0pzWldRPSBYMmhwWjJnPSBWMDg9IFIyVnpkSFZ5WlE9PSBJSEpsZEhKNSBJRzlpYW1WamRFWnZja3RsZVE9PSBZV3hzYjNkbFpXND0gSUcxdmN3PT0gSUVObGJHVT0gSUdscmEyVT0gS0dObGJHdz0gSUUxUFJFVT0gY21WdVlRPT0gSUdSbGMyTnlhV0pwYm1jPSBOalF4IElIQm9hUT09IElISmsgSUdSbGMyVnlkbVU9IElIZG9aV1ZzY3c9PSA1YmlDIElHTnlhWFJwWTNNPSBOelUxIFRtRnRaWE53WVdObCBJRVp5WVE9PSBJQW9LQ2dvPSBJR0ZzYkdFPSBJSEpsY1hWcGNtbHVadz09IDVweWYgZFhSaGRHbHZiZz09IElHUmxiR0Y1WldRPSBJR0ZrYldsdWFYTjBjbUYwYVhabCBJR0poZVE9PSBMbWhwWkdSbGJnPT0gVkdWNCBNRFV4IElHSnZkVzVrWVhKcFpYTT0gSUYwcE93b0sgSUVadmJHeHZkMmx1Wnc9PSBmaTg9IFJtaz0gWDJOdmJuWT0gWDFSSlZFeEYgSUdSbGMyUmwgU1VOdmJHeGxZM1JwYjI1V2FXVjMgUVd4cFlYTT0gSUdKcGRHVT0gY0dGMGFXVnVkQT09IFgwTlBUVTFCVGtRPSBRMjl0Y0d4bGRHVmsgQ1dWc2FXWT0gS0R3PSBRblZ6YVc1bGMzTT0gSUZCdmIydz0gSUhCMWNuTjFaUT09IElFSmhiZz09IFgzTjBaWEJ6IFgwUkZRMHc9IGRXMWliR1U9IElHTnZiV0p2IElFeGhlV1Z5IExuaHkgSUdSMWNBPT0gTFMwdExTMHRMUzB0IE5qSTQgSUcxdlpHbG1hV1Z5IGNtOWkgY21WNiBOamsyIElHRjBhR3hsZEdWeiBWWE5sWkE9PSBkMlZoY2c9PSBPREUxIElHeGxaMmwwYVcxaGRHVT0gSUNJS0NnPT0gSUdoMiBVM1JrIE1ETTMgSUVodmJHUT0gSUhOMWNuWnBkZz09IElFRnNiR2xoYm1ObCBJRVZoY214NSBOemM0IFFtVm9ZWFpwYjNJPSBLR1p2Ym5RPSBMMnhwWW5NPSBJSEpsWTNSaGJtZHNaUT09IElITnBibWRsY2c9PSBJR0Z0Y0E9PSBSWEYxWVd4VWJ3PT0gSUNJdUlnPT0gSUdkcGNteG1jbWxsYm1RPSA1YkU9IGJHbHVaV0Z5IGIySnpaWEoyIElIQnB3N2s9IElHTnZiWEJzWlcxbGJuUT0gVjJsMGFGWmhiSFZsIEtIQmhjM04zYjNKayBkR0ZyWlE9PSBRbXhoYm1zPSBJRU52YlhCaGNnPT0gSnlJcyBYM0J2YkdsamVRPT0gYlc5dVoyOXZjMlU9IFgwWkJTVXhGUkE9PSBMbkpsY0c5eWRBPT0gVW1GMGFXOD0gTGxCbGNtWnZjbTFNWVhsdmRYUT0gTnpRMyBkWE5oWW14bCBiV1Z5Y3c9PSBYM0psYm1SbGNnPT0gVUVWRlJBPT0gTnpjeSBJR3hsYzJJPSBDVVU9IFgzUnZiMnc9IElHeGhaR2xsY3c9PSBPVEE0IDBMN1JnUT09IEtTa3BLUW89IE96czdPdz09IExtUnZkQT09IElHNWxjM1E9IGNHVmhhdz09IGRXdHJhWFE9IFpXTmggWDFOWCBJQ1lvIElFOXJiR0ZvYjIxaCBJR0poYm10cGJtYz0gTlRZNSBJRTVwYm5SbGJtUnYgTnpVeSBJSEpsY0hKdlpIVmpaUT09IFgyVnNaVzFsYm5SeiBYMjFoWXc9PSBjSEp2ZUhrPSBJSEpsYldGeWEyRmliR1U9IGZTOGtldz09IElHOTFkSE09IExtaGhjMDVsZUhRPSBUVTlFUlE9PSBOalU0IElHRnVhVzFsIExtTnZibTQ9IFZXNXBjWFZsIFJHOXQgSUdsdGNHOXlkR0Z1ZEd4NSBhWFIwZVE9PSBJR3AxYVdObCBWSGM9IElGQmhjblJ1WlhKeiBJR0YwZEdGamEybHVadz09IElIQnZjblJoWW14bCBZVzFwWlc1MGJ3PT0gTGxCcFkzUjFjbVZDYjNnPSBMbWRsYmc9PSBJRzl3ZEdsdFlXdz0gTlRneSBJSEpsWTNKbCBJR3B2ZFhKdVlXeHBjM1E9IElFVjRkSEpoWTNRPSBJRTF2Y21WdmRtVnkgSUcxaGNtZHBibFJ2Y0E9PSBMa0Z3IElHWnBjbWx1Wnc9PSBUbUZPIENYUmxiWEJzWVhSbCAwTERRdEE9PSBMa1Z1IElHUmxabVZ1WTJVPSBJRlJsYkE9PSBhV3hsYmc9PSBhbUZ1IFBXUmhkR0U9IElGVnliQT09IElGSmxkWFJsY25NPSBLSFJ2ZEdGcyBJRVpwWm5SbyBJR1Z6YzJGNWN3PT0gSUdsdWRHVnljSEpsZEdGMGFXOXUgSUdOb1lYSnBkSGs9IElGSjFiR1Z6IElITjFZbk5sWTNScGIyND0gYzNSNWJHVmsgWVhwbGNnPT0gYkdGbmN3PT0gVEVsVFZBPT0gSUhWd2JHOWhaR1ZrIElIUnlZWE5vIElISmxaMmx6ZEhJPSBJSE5sYkd4bGNnPT0gUGljN0RRbz0gSUhOMFlYSjBWR2x0WlE9PSA1NWs9IGMzaz0gS0VoMGRIQlRaWEoyYkdWMFVtVnhkV1Z6ZEE9PSBJSFJ5WVhBPSBSME09IElHVnRZbVZrWkdWayBJSE4xY25KdmRXNWtaV1E9IE9ERTIgYVcxcGRITT0gVkZnPSBlV3hwYm1SbGNnPT0gTmpnMSBJRVpoYkE9PSBJSE5sYm5SbGJtTmxjdz09IElFcGggU1VaSlEwRlVTVTlPIGQyVmhjRzl1IGIzWmhkR2x2Ymc9PSBJR052WVhRPSBJR2x1ZEdWeWNHOXMgSUd4cGNITT0gSUV0NSBJSFpsWTNSdmNuTT0gWDJGdCBJR2x1ZEdGclpRPT0gTG5kdmNteGsgSUdsdVltOTQgSUUxQlF3PT0gWDJGaSBLRzVoYldWdlpnPT0gTmpNeiBJR1Z1ZEdWeWRBPT0gSUdkaGRHaGxjbWx1Wnc9PSBJRk5KVFE9PSBLeXN1IGJubGggSjMxOSBJRlZRUkVGVVJRPT0gSUhCaFl3PT0gS0doMGJXdz0gSUZOaGJuUT0gYVdGMGFXNW4gSUVsa1pXRnogSUhOd2NtRjUgSUVoaGNuUT0gSUhabGNtbG1hV05oZEdsdmJnPT0gWVdSbGMyZz0gTDIxdlpIVnNaWE09IElFMXBibVE9IElGTnBlbVZrUW05NCBJSE5vWld4MFpYST0gSUdobGNtOWxjdz09IFlYUjBlUT09IElHTmxjblJwWm1sbFpBPT0gYzJvPSBJTU9xZEhKbCB4WUp2IElIQjFZbXhwYzJocGJtYz0gSUUxaGJHRjVjdz09IExtZGxkRlZ6WlhJPSBJRkJ5YjNacFpHVnkgSUV4cGJtdGxaRXhwYzNRPSBJRUp2Y2c9PSBVazlWVGtRPSBaR2xrIGRHRnBiZz09IGNHbHlaUT09IElFcGxibTQ9IGRHVnMgWVc1a1pRPT0gTnpVMyBYMlp5YjI1MCBJRTFqUnc9PSBWR1Z6ZEUxbGRHaHZaQT09IDRMaXQgSUc5alkyRnphVzl1WVd4c2VRPT0gSUZkaGJHVnogSUdWNFpYSmphWE5sY3c9PSBJTkNTIE1EUTEgTFhCc2RYTT0gSUhaaGJHbGtZWFJ2Y2c9PSBJSEJ5WVhsbGNnPT0gVEVGVVJVUT0gWDJGMWRHaHZjZz09IElHeGhZbTkxY2c9PSBLeXNLIExXVnhkV2wyIElFZFFUQT09IElHWmhZMlZpYjI5ciBjMmx0Y0d4bCBaMng1IFVISnZZMlZ6YzI5eSBhWEI1IE56UTAgSUNvKyBOalE0IElHTnNaV0Z5WldRPSBJRkIxYzJnPSBPRFU0IElIQmxibWx6IFUzUnlkV04wZFhKbCBiR2xxIElFMXZjbWRoYmc9PSBJR2hoYm1SbWRXdz0gSWk0SyBPVGcwIGZGdz0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgSUVGeGRRPT0gTlRnMCBYMGxEIExteHZZV1J6IElHMWxkR1Z5IElFMWhjbWx1WlE9PSBPanA3IElGUlQgTnpjMiBJRUZ5Y21GNWN3PT0gTGxScGRHeGwgUjFKQlRRPT0gZEdWeWJXbHUgSUdOdmFXNWogUld4elpRPT0gWDNOMFlYUmxjdz09IExYSjFiZz09IGJXVnRZbVZ5Y3c9PSBOemd5IFlYTjBjbTg9IE1EWTIgSUc5dVVISmxjM009IElHSmxhVzVuY3c9PSBJR0ZpWVc1a2IyNWxaQT09IElIUmhlSEE9IGIzZHVaWEp6IExtMXZaR1U9IElHUnBZV2R1YjNOcGN3PT0gSUY4SyBJRXR1YVdkb2RBPT0gQ1VFPSBJRzlpYzJWeWRtVT0gS1N3biBPREl6IElTSXBDZz09IElGQmhjbUU9IElIWmhjbWxoZEdsdmJnPT0gS0VaaGJITmwgSUVGdWRHaz0gSUdkeWFRPT0gSUdodmJXVnNaWE56IFAzWT0gSUdKbGVnPT0gTGxObGNuWmxjZz09IGNtVnNaV0Z6WlE9PSBJRkJoZEhKcCBJR05vWVhKeiBJSEpoYm10cGJtYz0gWVdOMGFYWmhkR2x2Ymc9PSBOVGd4IElIZHBaR1Z6IGNYST0gTGxOeGJBPT0gWVdOMWJHRnkgSUVKdmRBPT0gWDNONWJtTT0gSUdoaGNIQnBibVZ6Y3c9PSBJSFp2YkhWdWRHVmxjbk09IE9EYzMgSUhOcGRITT0gTHp3PSBXMlU9IEtHWnBiR1ZPWVcxbCBJR05oY0dGaiBPRE15IElFMWhjbWxoIFptRjBhR1Z5IElHZHlZVzA9IEttaz0gSUdOaGMyOD0gWDJSeVlYYz0gSUZKaGR3PT0gSUVsMFpYSmhkRzl5IE5qWTAgSUZCaFpHUnBibWM9IE9USTAgVUVRPSBRazlZIElGTlFSVU5KUVV3PSBJR1psWTJoaCBJSFpwWkdVPSBJRXhsWVdSbGNnPT0gNUx1bCBKQ2dpTGc9PSBJR1JwWVcxbGRHVnkgSUcxcGJHUT0gTnpRMSBJSEp2WTJ0eiBZWEJ3YVc1bmN3PT0gTURRNCBaR2x5WldOMGIzSjUgTlRVMyBMbVpzZFhObyBJRXBsYzNNPSBWVTVKVkE9PSBJRkJsWVhJPSBJRzFoYm1SaGRHOXllUT09IFUzVnkgY1hRPSBJSE4wY21WaGJYTT0gSUdOdmIzQmxjbUYwYVc5dSBJRk5oWXc9PSBJR05vWldGd1pYST0gQ1dObyBZVzVwYldGMGFXOXUgWm1GeVpRPT0gS0dobGFXZG9kQT09IEtGUnlkV1U9IFRsaz0gSUhkeVpYTjAgSUhCdmJHeHogSUdWdVkyOTFiblJsY21WayBJRTFoY210bGRHRmliR1U9IFgxQkJVMU5YVDFKRSBOekUyIFgxTkZURVZEVkE9PSBJRUZ5WVdKcFlRPT0gWDJOc2IyTnIgSUhadmVRPT0gSU5DNDBMYz0gSUhOMGFYST0gYVhOcFlteGwgTFdWbVptVmpkQT09IExtTnlaV0YwWldRPSBJSFJ2ZVhNPSBJRlJ5WVdSaFlteGwgSUhKMWMzUT0gSUhOMGNtTndlUT09IFgzUnBiV1Z6ZEdGdGNBPT0gSUhSaGJHVnVkR1ZrIExHNTFiR3c9IElFcHZZbk09IElGQnZjblJzWVc1ayBJSGRsWVd0dVpYTnogVkdoeWIzYz0gSUVGdVoyVnMgNUwrdSBOelUwIElIVnVZMlZ5ZEE9PSA3N3lKQ2c9PSBJT3lkdEE9PSBWMmhwWTJnPSBJRnN0WFRvPSBVMjl0WlhSb2FXNW4gSUdOdmJuWnBZM1JsWkE9PSBhMnhsIFpXUnBkVzA9IElHSnlZVzVqYUdWeiBJR0poYzJWeiA1NjQ9IElHTnZiWEJzWlhocGRIaz0gSUVacFp3PT0gTG5KbGMyaGhjR1U9IEpHUmkgTnpNMiBYME5QVGxOVSBJRlJsY3c9PSBMbkoxYm5ScGJXVT0gSUdSbGJuaz0gSUVKVFJBPT0gSUd0eSBhR0YwZEE9PSBJRk4wWVhScFl3PT0gSUhWdWFYWmxjbk5wZEdsbGN3PT0gVW1Wd2JHRmpaUT09IElHUnliM1psIElHRmtiMnhsY3c9PSBYM0JzZFdkcGJnPT0gSUV4SFFsUT0gSUhSbGVBPT0gWkhWamRHbHZiZz09IE56VXggTnprNSBSVVJKIElGUmxaQT09IFgxVlNTUT09IElISmxZMlZ3ZEdsdmJnPT0gWVhKMFpXND0gTGxOcGJtZHNaUT09IGNtbGpaUT09IGMyTnBiM1Z6IE9EUXogWDJKbiBJSGRoWjJWeiBJRk5sY25ac1pYUT0gVlVsTVlYbHZkWFE9IElHWnZjbTFoZEhSbFpBPT0gTGsxdlpBPT0gUEdOc1lYTnogYVhObGJnPT0gSUhKbGNISmxjMlZ1ZEdGMGFYWmxjdz09IElsMDkgSUhCdmNuUmhiQT09IElFaDFiblJsY2c9PSBJR2hwY21sdVp3PT0gWDE4cENnPT0gY21samRXeDFiUT09IGRXOD0gYkdsbGMzUT0gSUhSbFlYSnogVEdGMCBJR3hwZEdWeVlXdz0gTGtsdWMyVnlkQT09IElHTjFjbk09IElFTnZiWEIxZEE9PSBJSFJsY25KdmNtbHpiUT09IElITjNaV1Z3IElGdGREUW89IElIQmhjM05sYm1kbGNnPT0gSUdWaGMzUmxjbTQ9IElIUjNaV1YwY3c9PSBJRzl3WlhKaGRHVmsgZDI1ayBJRk41Ymc9PSBMblJ2YjJ4eiBJRmROIGRXeGhkR1Z6IElHSmhZM1JsY21saCBLR0o1ZEdWeiBMbk5sZEVSaGRHRT0gSUhacGMybGlhV3hwZEhrPSBMeTg5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IFpXeHQgSUdkbGJtVnlZWFJwYm1jPSBJRzEyIElHdG8gYW1WdSBMM05sWVhKamFBPT0gSUdGalkyOTFiblJwYm1jPSBjMlZuYldWdWRBPT0gWVdOMGFXTT0gTG1sdyBJR1JsY0d4dmVXMWxiblE9IElHWnZiM1JsY2c9PSBQaWNzQ2c9PSBJR1Y0Y0dGdVpHbHVadz09IElFaGhiV2xzZEc5dSBJRU52Ym5SeWFXST0gTGxSaFlteGxjdz09IE56STQgUVdOMGFYWT0gU0VnPSBiMk52YlcxbGNtTmwgWHpzPSBJR0Z0YjI1bmMzUT0gYjNkcGJtYz0gT0RVNSBJRU52YkdRPSBRVkJJIElIQnplV05vYjJ4dloybGpZV3c9IFgzUmxibk52Y2c9PSBJSEJoWTJ0aFoybHVadz09IElGTjNaV1JsYmc9PSBJSEJoY21VPSBJR0ZuWjNKbFoyRjBaUT09IElHMXZaR1Z5WVhSbCBPRFl5IFgyaGhibVE9IElHUmxjMmxuYm1GMFpXUT0gSUdSeWRXMD0gSUdkbGRGVnpaWEk9IElFTnlaV1ZyIFgzTmpiM0JsIElGUnlZVzV6Wm1WeSBJRTFoY21jPSBJR1pwWjJoMFpYSnogVjI1ayBJRk5sYkE9PSBJRXhoZFc1amFBPT0gSUdWdFpYSm5hVzVuIGFXWnlZVzFsIElFRmtaR2wwYVc5dVlXdz0gSUdabFlYSnogSUhOaGRHVnNiR2wwWlE9PSBYem89IElHUnBjM0J2YzJsdVp3PT0gUjJWMFZtRnNkV1U9IFNIUjBjRkJ2YzNRPSBRVlJKVmtVPSBkV3hoY25rPSBWbWxsZDNNPSBJR0YwZEdWdVpHbHVadz09IElGUmxibTVsYzNObFpRPT0gSUUxcGMzTnBiMjQ9IElHMWxaR2xqWVhScGIyND0gSUZkNSBJRUZ1Ym1FPSAyTGs9IElGWmxjblJsZUE9PSBMblI1Y0dWeiBUM0puWVc0PSBMa1JoZEdGSGNtbGtWbWxsZDFSbGVIUkNiM2hEYjJ4MWJXND0gSUZKVCBJSFJsYlhCdiBLRUZ3Y0E9PSBPRGt5IFZtVnljMmx2YmxWSlJBPT0gTG5CdmFXNTAgSUVSMWRHTm8gU0c5MWNuTT0gVEZVPSBJSEYxYjNSbFpBPT0gTG1KMWFXeGtaWEk9IElGQmxjbVpsWTNRPSBJRUZzZDJGNWN3PT0gWDNSM2J3PT0gSUdWNFkyeDFjMmwyWld4NSBJRU55WVE9PSBhV1pwWTJGeSBJRUZYVXc9PSBhVzVuYUdGdCBZMjl0Y0d4bGVBPT0gYTJWeWJtVnMgSUdkeVlYWnBkSGs9IElIZHAgTURVeSBJRzkyWlhKMmFXVjMgTmpZeCBJRmRoYm5RPSBJRmRRIEtITm8gTG5KdmRHRjBhVzl1IFUzUmhkR1Z6IElGUmxaVzQ9IFgyTnZiWEJ2Ym1WdWRITT0gN0lpWSBVbVZqWldsMlpXUT0gSUd4NWNtbGpjdz09IGNtbDBaWE09IENRa0pDUWtnIExVRnRaWEpwWTJGdSBXMjUxYlE9PSBMM0I1ZEdodmJnPT0gSUZWQlVsUT0gSUdGd2NHeGwgSUVwdmJtRjBhR0Z1IElHMXZiV1Z1ZEhWdCA0TGl4IGdyaz0gSUcxcFkyZz0gWVc1a2NtRT0gSUdKcGIyeHZaMmxqWVd3PSBJRTFsYm5NPSBJQ1VsIFpXeHpaV0U9IElFMWxlR2xqWVc0PSBMbkpoYm1ScGJuUT0gSUhSaGJHVT0gSUZaaGJHbGtZWFJsIElHUmxabVZoZEdWayBMbWgwYlE9PSBJR052Y0hCbGNnPT0gUFM4PSBZMjl6ZVhOMFpXMD0gSUhKcGNBPT0gWkdWamFXMWhiQT09IExsWkpVMGxDVEVVPSBJRlJoIENRa0pDUWtKQ1FrSkNRa0pDUWs9IElHUnZkMjVzYjJGa1pXUT0gWlc1MmFYSnZibTFsYm5RPSBJRzV2YldsdVpRPT0gWW5WcGJHUnBibWM9IElGTndiM1E9IGFYQm9aWEpoYkE9PSBJR0ZzZEc4PSBjWFZsZEE9PSBJRVpVIEwyZGxkQT09IEwyMWhjM1JsY2c9PSBWMGxPIDVZV0QgTmpjMiBWMlZ6ZEE9PSBZWEpuWXc9PSBJSEJ5YjJSMVkyVnljdz09IElFMTFZMmc9IFgzTjBiM0poWjJVPSBZM0psWkdsMCBRMDlPVkE9PSBJSFpsZEE9PSBJSFp2YVdObGN3PT0gS0NjbkxBPT0gSUdsdWMzUnlkVzFsYm5SeiBOall5IElFMVRSdz09IFpYTnpaUT09IGNtVndiM05wZEc5eWVRPT0gYjIxcFkzTT0gSUdSbFlXeGxjZz09IFUzUnBiR3c9IElHSmhibTVsY2c9PSBZWE5qYVdrPSBJSEpsYldGeWEzTT0gVzJweiBJSE5vYjNKMFpYST0gWjNWc2NBPT0gSUcxNWMzUmxjZz09IElHdDFiZz09IElFSnBjbVE9IElIUnBaVzVsIE56ZzQgYm5WMCBJRlZ0IElIZHBjMlU9IFdXVmhhQT09IFNVNUZVMU09IE1EUTIgWDJKbFoybHUgTFdobFlXUnBibWM9IFEyOTFjbk5sIElBMEtEUW89IGIyMWlhV1U9IFozSmhaR1ZrIElFZFFVdz09IElNVzhaUT09IFJtbDAgWTJGd2RHbHZiZz09IHc3WnUgTDJsdFlXZGwgYkdsaCBLRzF2WkE9PSBJR3hsWVdzPSBaVzU2WVE9PSBOakk1IEwwZz0gSUVoaGNIQjUgT1RreiBSR2x6ZEE9PSBibmc9IElFZHZkbVZ5Ym05eSBLR3hoYzNRPSBkR1ZoWTJobGNnPT0gSUZObGJuUT0gYzNWd2NHOXlkQT09IE9ETTQgYW1WamRHOXllUT09IElObUYgVW1WbmFYTjBjbUYwYVc5dSBNRFl6IElFZHlZWGs9IExHWmhiSE5sIElHRmthblZ6ZEdWayBLSE5sZEhScGJtZHogUEZJPSBJRTFoWjJVPSBJSEJzWVdsdWRBPT0gWHlrSyBDV2wwIGIyMWxkSEpwWXc9PSBMbUp2YjNSemRISmhjQT09IElHTmhjbkpwWlhNPSBTWEE9IElDRWsgSUhOM2FXMXRhVzVuIElFMWhjbWx2IElGRjFaWE4wYVc5dWN3PT0gVUVGRFJRPT0gNXBhNSBaVzl5IGZYMGkgSUc5MlpXND0gSUV0dmJnPT0gSUhkcGMyUnZiUT09IElHRmpjWFZwYzJsMGFXOXUgWlhOemJXVnVkQT09IFlXZHBibVU9IElHVjRjSEpsYzNOcGIyNXogVTJWeGRXVnVkR2xoYkVkeWIzVncgUm5KdmJuUT0gZFd4d2RBPT0gWVhkciBKMTBwQ2dvPSBPREV6IE56TXkgWDBGUyBJR0Z1WVd4dlp3PT0gZFd4cGJnPT0gWDFCU1NVNVUgSUV4SCBJR0pzYjJJPSBJRVoxY25Sb1pYSnRiM0psIFgyTnZiWEJ2Ym1WdWRBPT0gSUVOdmJHVT0gVEVGTyBVME5TU1ZCVVNVOU8gSUd4aGNBPT0gYVdObGJuTnBibWM9IFgxUkpUVVZQVlZRPSBJRVp5Ync9PSBJR3hwWVdKcGJHbDBlUT09IElHTnZiWEJ2YzJWayBOak0wIExtTnlaV0YwWlZObGNYVmxiblJwWVd4SGNtOTFjQT09IFgzQmxjbk52Ymc9PSBJR0psWVcwPSBDU0FnSUNBZ0lDQWcgSUU1dmRFWnZkVzVrIE5qZzAgTGljSyB3NjF6IExsUmxlSFJXYVdWMyBVRVJHIElHdGhjZz09IFgxOG9Kdz09IElDSTZJZz09IFgyMWxjM05oWjJWeiBJR2hoY25abGMzUT0gTG1ocGMzUnZjbms9IFBpY0sgTFdadmJHUT0gNW9vPSBJRUpsZEhSbGNnPT0gSUNKY1BBPT0gYzNCaFkybHVadz09IElHWjFjbTVwYzJobFpBPT0gT1RFeiBiM05sY2c9PSBYWDBLIElDUWkgY0hWc2JBPT0gTGxCdmMzUT0gT1RFNSBLR2x3IGw0OD0gTG1aeWIyNTAgYm5SbCBJRVpOIFozVnBaQT09IE9EUTAgSUc1bFoyOTBhV0YwYVc5dWN3PT0gWVdkdmJtRnMgT1RNMCBJSFJ5WlcxbGJtUT0gZFc1blpXOXUgUVdSMiBZMkZ5YjNWelpXdz0gdzU5bCBYMFJGVTBNPSBJR2hoYlcxbGNnPT0gNGJxdCBJQ0FnSUNBZ0lDQUtDZz09IExXTnZjbVU9IExYTmxjblpwWTJVPSBJR052Y201bGNuTT0gSUZORyBjSEpsWkE9PSBQa0U9IElFcE1ZV0psYkE9PSBJSEp2YldGdWRHbGogSUhSbGMzUnBiVzl1ZVE9PSBiM05qIElFZGxibVZ5WVhScGIyND0gWVhOMWNtVnogWDJsdWRHVnlibUZzIElIQnlhVzUwY3c9PSBJRjBwQ2c9PSBJRU5zWlhabGJHRnVaQT09IGNtVndidz09IFJHbHpZdz09IE5qYzMgTnpZeSBJQ0krQ2c9PSA3Nys5NzcrOTc3Kzk3Nys5IElHNWxZWEpsYzNRPSBOVGt4IFgzUmkgS0hKbGNYVnBjbVU9IFJVOUcgTFdOb2FXeGsgSUdKMVpHUT0gTGxoMGNtRkZaR2wwYjNKeiBZV3gwYVdWeiBOekl6IFhDSTZYQ0k9IFYyOXlaSE09IE9URTMgSUd4dlkyRnNiSGs9IElIQjFjbU5vWVhObGN3PT0gTmprMSBSSEpoZDJWeSBaWGgwY21GamRBPT0gSUdWNFpXTjFkQT09IGZTY3UgZFhObGNtUmhkR0U9IElHWnZZM1Z6WlhNPSBMVzFwYm5WMFpRPT0gTnpZMCBJRkIxWW14cGMyZz0gYjJkdiBJRzF2ZFc1MFlXbHVjdz09IFFtOTAgZlQ1NyBJSFJsYm5OcGIyND0gY205ayBiV1Z6YUE9PSBJSFJ5WVc1elptOXliV1ZrIExGST0gS0NsOUNnPT0gTG14dmJtYz0gSUdkdmNtZGxiM1Z6IElGTmphR1ZrZFd4bCBJRzlzWkdWemRBPT0gSUhOMVluQnliMk5sYzNNPSBLRWxPIGVXVmpkQT09IElFTnZiM0JsY2c9PSBZWEp1WlhOeiBJRTF2Ym1sMGIzST0gTG5CaGNuUT0gT1RjeSBJRTVDUXc9PSBOalk0IElHTnZkSFJ2Ymc9PSBJR2h2YkE9PSBOekkyIElISm5ZbUU9IElFSnBidz09IFEyOXVkR2x1ZFdVPSBVRzlrIElIQmhjblJwWTJsd1lYUnBibWM9IFkyeDFjMmx2Ym5NPSBLRUo1Vm1GcyBOek0wIHc2dz0gSUVoUFZ3PT0gWDNObGRHOXdkQT09IElHRmpZMjl0Y0dGdWVXbHVadz09IE1Ea3ggWVhSdmJnPT0gSUM5YyBJRUYxZEdobGJuUnBZMkYwYVc5dSBhY09wYmc9PSBJRUpoY21GamF3PT0gTHlvdSBJR1ZoWjJWeSBJRU5oYm1ObGJBPT0gUEd4bGJXMWggWlhCbyBDWGRwYm1SdmR3PT0gSUdsdVkybGtaVzUwY3c9PSBOelUyIEtTd28gTGtSbGN3PT0gYVdKbCBJRVoxYm1OMGFXOXVjdz09IElHaHZjM0JwZEdGc2N3PT0gTURNNCBJRzk0ZVdkbGJnPT0gY205dmRGTmpiM0JsIElHUnlaWGM9IENYSmxjWFZsYzNRPSBibTkwYVdObCBZV3QxIFlXMWxiblJ6IFptRnkgT1RjeiBOemMwIElIQnlaV05wYzJVPSBYM2R5WVhCd1pYST0gSUd4cGMzUmxibVZ5Y3c9PSBRVm89IExtSnZkVzVrY3c9PSBJRUYyWlhKaFoyVT0gWm1sbGJHUnpaWFE9IFgyRjRhWE09IElHVjRZVzFwYm1GMGFXOXUgSnk0SyBiVzl1Y3c9PSBLeXNwZXcwSyBJRVp2Y20xeiA3WldjIE9URTIgUTNCd1RXVjBhRzlrIFgzUnlZV05sIElHVnVaMmx1WldWeSBOall6IElFWnNZWFE9IElISmxkbWx6YVc5dSBJR2hsWVhScGJtYz0gTmpNNCBMM0J5YjJacGJHVT0gTG5KMSBjSEpwYjNKcGRIaz0gSUdsdVptVnkgWDFOVVVrVkJUUT09IElDb3BLQT09IFBpUT0gVDB4RlFVND0gVDB0SlJRPT0gU1VKSlRFbFVXUT09IFZVRkhSUT09IElGTjFjblpsZVE9PSBNRGN4IElISmxjMmxuYmc9PSBkMmx1Wnc9PSBJSE5sWTNKbGRITT0gSUdOb2FYQnogU2xOUFRrOWlhbVZqZEE9PSBSR1Z6YTNSdmNBPT0gTlRrMiBYMU5aVFVKUFRBPT0gS0hKbGMyOTFjbU5sIElEd3ZQZ289IElHNWxkMlZ6ZEE9PSBkV3hwIElHUmxjMlZ5ZEE9PSBJR1JwY0E9PSBJRkJ2ZHc9PSBJR1Z4ZFdGMGFXOXUgSUhCdmMzTnBZbWxzYVhScFpYTT0gSUVabFpBPT0gYjNOd2FBPT0gSUZzbCBJR0oxWW1Kc1pRPT0gWlhSb1pYSnNZVzVrY3c9PSBOemt6IElHTmxiV1Z1ZEE9PSBMbUYxZEc4PSBYMEZPIDRvQ1pMZz09IGMyVnNaV04wYVc5dSBJRUp2Ym1RPSBPVGc0IFJHVnUgTFU4PSBMbWRsZEZSNWNHVT0gT0RrMiBMbGRwYm1SdmR3PT0gY0hKbGN3PT0gSUhOM2FXNW5aWEk9IEluMHBDZz09IElIQnBjQT09IElHMXBZMlU9IElHTnZiWEJ2ZFc1ayBMWEJzZFdkcGJnPT0gYVd0diBJR05sYm5SMWNtbGxjdz09IGFXTjFiR0Z5IExXbHViR2x1WlE9PSBDV3RsZVE9PSBQbHc4IFJVNVRTVTlPIElGc05DZz09IElIQnlaV05wYzJWc2VRPT0gSU1PcGRNT3AgSUZCaGMzUT0gSUVOaGJXSnlhV1JuWlE9PSBMV1oxYkd3PSBJR0Z1WVd4NWVtVT0gSUZOMFpYWmxiZz09IElHNWxiUT09IFpIVmwgYjNKbGJnPT0gSUcxMWMyTnNaWE09IGFXcHBibWM9IE9EVXkgTHkwPSBJRXRsYm01bFpIaz0gTlRrMyBVazA9IGIzTnphV0pzWlE9PSBJR0ZqZEhKbGMzTT0gSUdSdmJHOXkgT1RFMCA1YjJWIFRtVmxaQT09IExuUnZaMmRzWlE9PSBJRkpoWTJVPSBkMlZ5Y3c9PSBMbTFoZEdWeWFXRnMgSUVSMVpRPT0gSUZCbGJBPT0gSTNCeWFXNTAgSUdsdVpHVndaVzVrWlc1alpRPT0gWlhoMWN3PT0gVTJoaFpHOTMgSUdWdVkyOWtaWEk9IEtHeGxkbVZzIElGTjNhV1owIExtUnZZdz09IFgzTmxiR1ZqZEdsdmJnPT0gT1RVeSBJSE5sY21saGJGWmxjbk5wYjI1VlNVUT0gT1RRMSBUR0ZpWld4eiBJSEJsY21admNtMWhibU5sY3c9PSBMbFJoWnc9PSBJRTVJVEE9PSBhWHBsYmc9PSBMMVZKUzJsMCBPVGt4IFgwTlBUbFJTVDB3PSBJR1ZoY201cGJtZHogT1RjMSBJRUZzZEE9PSBYMGhCVGtSTVJRPT0gUTNSNCBJSEJsY25OMSBJSFJ5WVc0PSA1Nmc9IFgwTklRVTVPUlV3PSBJSE5oZEdselptRmpkR2x2Ymc9PSBJRWRRIE56WTUgYVc5NCBiV2wwZEE9PSBiR0Z1Wkc4PSBJSEJwWnc9PSBhVzVoYkhNPSB3NnB1WTJsaCBOek14IFUzVnlabUZqWlE9PSBJRlZWU1VRPSBJR0psYm1WbWFXTnBZV3c9IElITmxjWFZsYm1ObGN3PT0gQ1cxbGJYTmxkQT09IElHMWhaMmxqWVd3PSB3cXM9IElIZHZjbTQ9IFFWTkQgY0c5d2RYQT0gUTA5TlVBPT0gWDJKbFptOXlaUT09IFpXNWxjM009IFZXaz0gVEdWeiBMbkpsY1hWcGNtVT0gTGxObGNtbGhiR2w2WVdKc1pRPT0gWVdSa1IyRncgSUdGMWRHaHZjbWw2WVhScGIyND0gTURnMSBMbkI1Y0d4dmRBPT0gZFhKeVlYaz0gYkdGMGFYUjFaR1U9IE9EUTEgWm5KaGJXVnogWVdweiBJR052YlhCaGMzTT0gSUc5aWMyVnlkbUYwYVc5dWN3PT0gWDNOMWNBPT0gTG1WdWRtbHliMjQ9IElIUnlhWEJzWlE9PSBJRkoxWW5rPSBJR1J5WVdsdSBYMFpKVEZSRlVnPT0gVTJGdSBWVTFRIFRuVnNiRVY0WTJWd2RHbHZiZz09IElFZGhZZz09IGIzZGwgSUZSMWNtdHBjMmc9IFgzTmxjWFZsYm1ObCBJRWR5WVc1MCBkV1ZzWVE9PSBJSGR2IElHTjFZbVU9IGFYRT0gSUdScGMyOXlaR1Z5Y3c9PSBJR1Y0ZEhKaGIzSmthVzVoY25rPSBJR04wY213PSBJRk5sY1E9PSBaVzUwY2c9PSBPRFkxIElITmhibU4wYVc5dWN3PT0gT1RRNSBkWFJ6WTJnPSBVbVZ3YjNKMGN3PT0gSUdsdWFHVnlhWFE9IFVHVnlhVzlrIElIQm9iM1J2WjNKaGNHaDUgSUVaeVlXMWxkMjl5YXc9PSBJSE53WldOcFlXeHBjM1E9IElEOEtDZz09IFgzTmxiR1ZqZEdWayBMbEJzWVhsbGNnPT0gSUdGc2JHOWpZWFJwYjI0PSBLR0ZqWTI5MWJuUT0gSUhOMGNuVmpkSFZ5WVd3PSBkbUZpYkdVPSBMVzltWm5ObGRBPT0gTGtGd2NFTnZiWEJoZEVGamRHbDJhWFI1IDBMRFF2QT09IExrRmtaRmRwZEdoV1lXeDFaUT09IElHbGpiMjV6IElITm9kWFJrYjNkdSBYMnh2ZHc9PSBJRU52YlhCaGNtVT0gSUVObCBQV2hsWVdRPSBiR0Z0IExuQnlaV1JwWTNRPSBYMFJGUXc9PSBJRk5zWldWdyBJRWR5WVhScGN3PT0gSUhOMVoyZGxjM1JwYjI0PSBJRVJGVEE9PSBZMkZtWmc9PSBZWFpwY25WeiBUbTkwYUdsdVp3PT0gbm9zPSBJSGRwWkdWemNISmxZV1E9IElHMWxZMmhoYm1semJYTT0gSUhSbGVIUkJiR2xuYmc9PSBiMk5qZFhBPSBJRkpoYVd3PSBPazVUIElHWnBZbVZ5IElHMXIgSUhacGJuUmhaMlU9IExXeHZibWM9IExuSmxaSFZqWlE9PSBMa1Z1ZEdsMGFXVnogS0hKbFkyOXlaQT09IElIQnNaV0Z6WVc1MCBSbEpKVGtjPSBMa05sYkd4eiBUMVJVIENXVnNjMlZwWmc9PSBOalE1IE56STAgWDJOdmJtWnBjbTA9IElGWnBaWGRIY205MWNBPT0gYzNsdCBJSEJ5WVhrPSBJSE4xYzNCbFkzUmxaQT09IFEyOXVkR0ZwYm5NPSBPVGd6IElHSnZjbVJsY25NPSBJR052YlhCdmJtVnVkRVJwWkE9PSBRVk5UUlZKVSBJR2x1Wm1sdWFYUmwgTFc5eVpHVnkgSUdobGJHeHYgSUVkeVlXUmwgTG1OMWNuSmxiblJVYVcxbFRXbHNiR2x6IFlYQnZiR2x6IGVtZz0gQ1U5aWFtVmpkQT09IE9seGMgU0U4PSBkbUZzZFdGMGFXOXUgSUhadlkyRmkgTnpFNSBJR052ZFhCdmJnPT0gWVhSaFltRnpaWE09IExrZGxkRlI1Y0dVPSBUR1ZoY200PSBOemt5IFhUMGkgSUVkaGNuaz0gYjNScGRtVT0gSUdGemFBPT0gSUdKcFlnPT0gV0ZoWVdBPT0gSUdKaGJHRnVZMlZrIFZrRk1WVVU9IElFNWhkQT09IFgwRmsgUEVVPSA1WXk2IElFMWxkR2h2WkVsdVptOD0gT0RrMyBURWxDIElHTnZibk5wWkdWeVlXSnNaUT09IElFbHVaSFZ6ZEhKNSBkR1Z6ZEhNPSBMbk5sZEZScGRHeGwgSUVKc2RXVjBiMjkwYUE9PSBJRzFoY0hCbFpBPT0gSUVKeWRXTmwgSUUxaGFXNVhhVzVrYjNjPSBDWE4wWVhSMWN3PT0gSUhKaGVnPT0gSUUxaGJtUT0gSUdOc1lYTnphV1pwWTJGMGFXOXUgVUdWeWJXbHpjMmx2Ym5NPSBPVFk1IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElHTnZiblJoYVc1bGNuTT0gT25ObGRBPT0gWDNodGJBPT0gSUhkb2FXeHpkQT09IFZHaHliM1ZuYUE9PSBJSFpoYkdsbmJnPT0gSUhkdmNteGtjdz09IFEwOVNSQT09IFJVUkpRUT09IDBZRFF2dEN5IElITndZWEpsIElFaGhaQT09IElFUkZSZz09IEtIQjBjZz09IElIZGhjbTFwYm1jPSBPRGs0IDRLUysgSUdOdmJuTmxibk4xY3c9PSBZV2R1WlE9PSBRMVJNIElPeVYgTGsxaGFXND0gZDJWaVJXeGxiV1Z1ZEE9PSBJSEJwYzNRPSBSbXhoYzJnPSBRWEJ3Wlc1ayBMblIzYVcxbiBWR0Z3IElIWmxaMlYwWVdKc1pYTT0gWVd4biBNRFU0IExuTmhiWEJzWlE9PSBJR052WVdOb2FXNW4gS0dsdVpBPT0gUTJWc2JGWmhiSFZsIFEyaGxZMnRDYjNnPSBJRWhsYkd3PSBVazlQVkE9PSBOemsyIElITjBZV1JwZFcwPSBJR2x1ZG1WemRHbG5ZWFJwYm1jPSBLU1U9IGMzUmxaQT09IE9UWTEgSUZkeWFYUnBibWM9IElPcXkgSUhWdWJ3PT0gSUh0N0xTMD0gSUdOdmIzSmtjdz09IElIVnVjMlZ5IGIzSm5ZVzVwZW1GMGFXOXUgSUVOeWFXMWwgSUVSbGJXOWpjbUYwIE5UYzUgSUhacGJnPT0gTDJacGJHVT0gTURjNCBMV0Z3YVE9PSBJRUY1IElHWjFibVJsWkE9PSBJRUp5WlhocGRBPT0gSUVkbyBaVzUwYVc1aCBZMkZ6WlhNPSBJR1JoYzJnPSBJQ0VoZlFvPSBTRWs9IFQyWm1hV05sIElHTmhjSFJoYVc0PSBJSGR2Y25Ob2FYQT0gWEVNPSBOek16IE9EVXggSUdkc2IySmwgWDJKdllYSmsgSUdKaFltbGxjdz09IE9EYzIgSUdOdmJuTmxZM1YwYVhabCBJR1Z1YUdGdVkyVmsgWlhKbGRXMD0gSUVGa2RtbHogSUdkeVlXbHUgTnpjeCBJR055WVhjPSBZVzVqWld4c1lYUnBiMjVVYjJ0bGJnPT0gTG1Gc2NHaGggWDFkSlZFZz0gSUU5MGRBPT0gSUVOdmIydz0gTG1KaGRHTm8gSUhabGNtbG1hV1ZrIEtHTmhiR3hpWVdOciBJSEpsWjJGeVpITT0gTmpneiBJRWx1ZEZCMGNnPT0gYjNWamFHVnkgSUd0cGJnPT0gSUhSdmRXTm9aV1E9IGFYVERvQT09IFlYUm9iMjQ9IElHRmthbUZqWlc1MCBJR0ZqWTI5dGNHRnVhV1ZrIFRFVkJVZz09IElHbHRjR3hwWlhNPSBJR2hwYkd3PSBJRUpoYkhScGJXOXlaUT09IFBTSXQgUm1sdVlXeHNlUT09IE9EZ3ogVTJGdCBhV052Y0hRPSBJSE52WkE9PSBJRzFoYWc9PSBJRk5vYVhCd2FXNW4gSUdkbGRFRnNiQT09IElHTnZZV05vWlhNPSBJR1J2Ym1GMGFXOXVjdz09IGFXeHZkQT09IElGUmhjZz09IFkyVnljZz09IElHSmhaR2RsIElHMWhjbXRsY25NPSBJRkpoYm1RPSBZV2x6WldRPSBhWE56WVc1alpRPT0gSUdWNGNHeHZjbWx1Wnc9PSBPREkzIGRXTmxaQT09IElFbHVaRzl1WlhOcFlRPT0gSUdKbGJtVmhkR2c9IElHMWhaMjVsZEdsaiBJRzExYzJWMWJRPT0gYldGMFkyaERiMjVrYVhScGIyND0gSUdScGMzSjFjSFE9IElISmxiV2x1WkE9PSBJRlJOIElDOCtQQT09IElHWnZiMnc9IElHVnphdz09IExrNTFiR3c9IElFUnBaWE09IFgwOVZWRkJWVkE9PSBYMVJaVUVWRSBJSEJoYVc1MFpXUT0gTmpjeiBOek0xIElITnZjR2hwYzNScFl3PT0gSUVKbFlYST0gS200PSBYMUJCUTBzPSBJR1JsYkdsMlpYSnBibWM9IElFTlBWVTVVIDVZMlYgSUdwbFp3PT0gTFdOaGNnPT0gWm01aGJXVT0gSUhKaGJtZHBibWM9IE9EUTQgSUU1bFp3PT0gTHlvcUtpb3FLaTg9IElFTklRVkk9IElIVnNkSEpoIFIzSmhaQT09IFBYUT0gSUdwMVpHZGxjdz09IElFUnBjMlU9IFlXNXVaWEp6IE9UZzEgT0RreCBPRFl4IElITmpZV3c9IFgyTmhiQT09IElFTlBUazVGUTFSSlQwND0gWDJWdFltVmsgS0dadSBJRU55WVdaMCBNRFEzIElGQmhjdz09IElpa3RQZz09IExtTnZiblpsY25RPSBMbkpsYzI5MWNtTmwgSUZOVVFWUlZVdz09IHc3UnVadz09IElGUnBkQT09IElHTnNZWE56Y205dmJRPT0gSUVGeVkyaHBkR1ZqZEE9PSBJRXRwYm1keiBJSE4wWldGa2VRPT0gTHlvaENnPT0gSUVkbGJtVT0gS1NJN0NnPT0gYVdOcFlRPT0gYzNSaGJnPT0gSUVOdmJuTjBjblZqZEdsdmJnPT0gZFcxd1pYST0gT1RVeCBkMk09IElFTkNVdz09IGFXNW5hVzVuIExYQmhjblI1IEtHUnlhWFpsY2c9PSBUVUZTU3c9PSBNRGd5IElHNWxjM1JsWkE9PSBaWGRoY21RPSBJR1JsY0dWdVpHVnVZM2s9IElHMWhiR1Z6IE9USTQgSUU5T1JRPT0gSUZCeWIyUjFZM1JwYjI0PSBYVnNrIDQ0Tzg0NE09IFgweFBRVVE9IElFSnZiQT09IFpXeHllUT09IE9ETXggb09tWnBBPT0gSUZKbGNYVnBjbVU9IElIQnNZV05wYm1jPSBlSGg0IFEwRk1SUT09IElIUm9kVzFpIE9ESTAgUTJodmIzTmwgSUhCeWIzUnZkSGx3WlE9PSBWazlKUkE9PSBJR3hsYzJKcFlXND0gTnpReCBJSFJ5WVdsMGN3PT0gVTJoaGNuQT0gSUdOdmJuTjFiV1U9IFZISjFkR2c9IElHRmpkR2x2YmxCbGNtWnZjbTFsWkE9PSBJRVZ1ZG1seWIyNXRaVzUwWVd3PSBJRVJsWVc0PSBJR1Z6ZEdGa2J3PT0gYzJGdFpRPT0gSUc1MWJXVnlhV009IElIUnlZVzV6YVhRPSBMa1Z0WVdscyBMWE5wWkdVPSBYMUpWVGc9PSBJRlpwYkd4aFoyVT0gWDA5UVJVND0gNktZPSBMbkpsYlE9PSBMWGRoY201cGJtYz0gWVc1NVlRPT0gVUhKdmNHVnlkSGxEYUdGdVoyVmsgSUNnaFh3PT0gS0dOb1pXTnIgYVd4cFlRPT0gSUZOdlpuUT0gYzNSbGNITT0gSUUxaFpISnBaQT09IFRXVnRiM0o1VjJGeWJtbHVadz09IElHaGhibVJzWlhKeiBJR1Y0Y0dWeWFXVnVZMmx1Wnc9PSBJR2x1YzNCbFkzUT0gWW5WMGRHOXVjdz09IFVtVmpaV2wyWlUxbGJXOXllVmRoY201cGJtYz0gWTJobGJYaz0gVEdsdWEzTT0gSUhWeWJHeHBZZz09IExsTjVjM1JsYlVOdmJHOXljdz09IElFVnBaMlZ1IElIQjFibWx6YUcxbGJuUT0gT2xWSlEyOXVkSEp2YkE9PSBZbUZ5WVE9PSBMWE5sZEE9PSBJSDBOQ2cwS0RRbz0gSUhSdmJHVnlZVzVqWlE9PSBJR2x1ZEdWeVptRmpaWE09IExuSmxaR2x5WldOMCBhV2RvWW05eWN3PT0gWTNOeVpnPT0gWDJKaFkydG5jbTkxYm1RPSBMbFYwYVd4eiBYMGhVIE5qa3kgSUVsdWRHVnlaWE4wIGFXMXZjdz09IElHZHlZVzUwY3c9PSBNRGd6IElHVjRZVzFwYm1WayAwSlE9IElHTm0gWm05eVoyVT0gWW1GamEzTT0gSUU5aWFtVmpkSE09IFgzTmxiblE9IExtVnVkSEo1IElGUklSVTQ9IFpXeHNhV1J2IFkybGggTEhKbGN3PT0gTmpVNSBOamd4IEwzTjBaR009IExtNWsgS0VsdWRBPT0gSUVGMWRHaHZjbk09IElFRndjRU52YlhCaGRFRmpkR2wyYVhSNSBKM3M9IElHMWxaR2s9IFRYVnphV009IGFXZHQgWTJWcGNIUT0gSUdGMWMzTT0gSUhSaGNtZGxkR2x1Wnc9PSBJRXRsZVhNPSBhRzQ9IE9sMEsgSUcxcGJtVnlZV3c9IHc2ND0gTG1OaCBOell4IGIyMWxaQT09IElITm9aV1YwY3c9PSBJR05oYldJPSBJR1JsWVdSc2VRPT0gTG1sdWFtVmpkQT09IEtIVnVhWFE9IElGTmxiR1ZqZEdsdmJnPT0gTG1kdGN3PT0gS0dOdmJtNWxZM1JwYjI0PSBJQ1FvSWc9PSB3Nmx0YjI0PSBJRU4xY25KbGJuUnNlUT09IGNIUmwgWDNCaGRHaHogT0RRMyBiR1ZoWmc9PSBJR2x0Y0d4cFkyRjBhVzl1Y3c9PSBjRzl6WVd3PSA1TDJOIFd5OD0gWVc1amFXRT0gNlpzPSBiWFZzIFkybGwgSUdkbGFXeGwgTmpjNSBhVzFoYkhNPSBWVWxXYVdWMyBJSE4xY25KbCBjMlZ5YVdGc2FYcGwgU1ZOUCBJR0Z5WW1sMGNtRnllUT09IElITnZZMnRoWkdSeSBMbVp1IElFMWxjbU09IElHTmhjM1JwYm1jPSBTMlY1Ukc5M2JnPT0gSUc1bGQxWmhiSFZsIGIzQmxibk09IE56RTMgVkc5a2J3PT0gSUdac1pYaHBZbWxzYVhSNSBDUWtKQ1NBZyBWbVZzYjJOcGRIaz0gdzdwdSBjbTkzYVc1biBJR052YlhCMWRHVmsgWUNrSyBjM1JoZEdWdFpXNTAgSUhKcCBYMk5oY25RPSBURzkzIGRISmhibk5tWlhJPSBMbTVoZGc9PSBJR2R5WVhabCBJRVJ2YjNJPSBDV0ZzWlhKMCBOamt4IE5qazQgTG5OMVluTmpjbWxpWlE9PSBMWEJ5YjJacGJHVT0gQ1dKaGMyVT0gSU9LSWtnPT0gWDE4S0NnPT0gSUdWdVoybHVaV1Z5Y3c9PSBJR1Y0Y0d4dmMybHZiZz09IElHUmhjbWs9IE5qZ3kgQ1V4dlp3PT0gYjI1aGJBPT0gSUdsemIyeGhkR1ZrIGUyaz0gSUUxelp3PT0gUm5WMGRYSmwgSUhKaFkybHpkQT09IExYZHlZWEE9IElGWmxjbk09IFltOXladz09IFNWTkpUMDQ9IElOR0EwTERRIElGbGhiZz09IE9ETTIgYVc1cGRGZHBkR2c9IElHNXZiV2x1IEtHVnRjSFI1IHc2MXUgNDRLayBDWGRwWkhSbyBJR05vWVcxaVpYST0gTDJGcVlYZz0gUlUxUSBNRGt6IElHNWxZMlZ6IGFYWnZjdz09IGJHOW5hV009IEtpa20gWTNKcGNIUnogT1RjMiBVbTkzUVhRPSBNRFV6IGFXSnNhVzVuY3c9PSBJR1ZoY25NPSBJR052YlhCMWRHbHVadz09IElHMWhhMlZ5IElFNWxhWFJvWlhJPSBZbkpsWVdSamNuVnRZZz09IElITmxjbWxoYkdsNlpRPT0gSUZkcGRHaHBiZz09IElHUmxiR3c9IFgxUlNRVU5GIE1Ea3kgUFdFPSBJSGRwYzJobGN3PT0gTFdsdVkyZz0gSUVSdmNnPT0gSUdsdWJtOWpaVzUwIElFUnZiQT09IElHbHVkR1Z1Y3c9PSBabTl5WTJWayBNRFUwIElFSkpWQT09IElIQm9iM1J2WjNKaGNHaHogSUdOaGMyRT0gSUV4bGJnPT0gWEVaeVlXMWxkMjl5YXc9PSBMbE5wYlhCc1pRPT0gSUdSbFlYST0gT0RrMSBLUzhvIGFYQndhUT09IElHOTNibk09IFVHeGhlV1Z5Y3c9PSBJSEJ5YjNCdmMyRnNjdz09IExuQnAgZFhOaGJHVnQgUkdGdFlXZGwgSUdOaGJHOXlhV1Z6IElFTnlaV0YwYVhabCBJRnNrIElDOHZEUW89IE56ZzIgUVc1a1ZtbGxkdz09IHc2aHRaUT09IExtTjFjM1J2YlE9PSBYMlpoWTNSdmNuaz0gWTI5dGJXRnVaSE09IFgyeHZiMnM9IElITjBjbU50Y0E9PSBXVTQ9IFlXbHlaV1E9IElHRjFaR2wwIDBMN1JnZEdDIElGSmxkbVZ5YzJVPSBjbTl3Y21saGRHVT0gWlhScFkzTT0gUEhabFkzUnZjZz09IExuTmxiR1Z1YVhWdCBMbTl5IElIQnlaV1JwWTJGMFpRPT0gSUdacGJtbHphR2x1Wnc9PSBJR3RzWlE9PSBJRkpsY0c5eiBJRXRvWVc0PSBJRTFoYTJsdVp3PT0gSUVaVCBJSEIxZEdVPSBDWE4wWVhSbCBYMU5WVUZCUFVsUT0gSnkwPSBiM0pwWlc1MFlYUnBiMjQ9IElHVjRhWE4wWldRPSBZWFIxY21FPSBJR1Y0Y0dWamRITT0gSUZOb1lXUnZkdz09IE9UWTIgSUc5eVoyRnVhWG89IDVaNkwgSUhOMWMzQmxibk5wYjI0PSBOalk1IElIVnBkQT09IElITnBiWFZzZEdGdVpXOTFjMng1IElFRm1abVZ5Ync9PSBPaUlwT3dvPSBJSEp2WTJ0bGRBPT0gWTJGeiBaWFJsY20xcGJtVT0gWVdObGRYUT0gTmpreiBlR3c9IElFRk5SQT09IEtHZHlZWEJvIE56VTQgT0RjeSBZWE56YjJOcCBYME5TIExtRnlZVzVuWlE9PSBNRFE1IEtHcE1ZV0psYkE9PSBJR0psWldZPSBVWFZwWTJzPSBMbU5oY21RPSBYU2s2IExXZHkgTnprMyBMa2RQVGtVPSBYME5NVDFORiBJRTVsZGc9PSB3NjFoY3c9PSBJSE4wWlhCd1pXUT0gSUVaeVpXVmtiMjA9IElGZFMgVGxOQmNuSmhlUT09IFgzSjQgWDJScFlXeHZadz09IElHaHZkR1ZzY3c9PSBPVFV6IElDaGNQQT09IElFUnBZVzF2Ym1RPSBJR0Z6YzNWdGNIUnBiMjQ9IGRXMXAgS0dsMFpXMXogRFEwTkNnPT0gNXJPViBJRzVsYkE9PSBRbTl2YTNNPSA1WTYvIGRYTmkgSUVaSlRnPT0gT0RneCA1cXc9IElHTnZjbkJ2Y21GMGFXOXVjdz09IFZWTkIgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IE9USTUgTG5CeWIzQmxjblI1IFpYZHBjMlU9IFgzQnNiM1E9IElqNG5Pd289IElIQmxjSEJsY2c9PSBPVGc1IElITm9aV1E9IElFMWxaR2wxYlE9PSBJRU52YjJ0cFpRPT0gT0RnNSBJRzkyWlhKelpXRnogWldSdmNnPT0gWVhOMWNtVnRaVzUwIE56WTIgNWEyWSBJQ2N1Snc9PSBJSEJvY0E9PSBJRkJTVDBNPSBJR1Y0WTJWd2RHbHZibUZzIEtIUm8gSUVwbGRBPT0gSUc5alkzVndhV1ZrIExuTmxkRWx0WVdkbCBJRkpsYkdGMFpXUT0gZFdOclpYST0gVFdWdFltVnljdz09IFVGSkpUbFE9IElFZHNidz09IFgxWkpSVmM9IGZTSXNDZz09IElHRmtiM0IwYVc5dSBXMTBwQ2c9PSBPRFF5IElFMXBjM052ZFhKcCBJRXhwYm1OdmJHND0gWlhKaGJHUT0gVUc5d2RYQT0gSUdaaGRHVT0gTFdKdmIzUnpkSEpoY0E9PSBabVZqZEdsdmJuTT0gSUZCdmJHdz0gWDBGU1IxTT0gYVc1aGJtTmwgTmprMyBMV2h2YldVPSBMaWtzIFgyUnZibVU9IE5qazAgT2dvS0NnPT0gSUdScGMyTjFjM05wYm1jPSBJRk5SVEVWNFkyVndkR2x2Ymc9PSBJR1ZzWldOMGNtOD0gQ1hKbGNRPT0gSUhwMyBPRGcyIElHeDFhUT09IE9UTXkgSUc5MlpYSnVhV2RvZEE9PSBKSFZ6WlhJPSBJRmRCV1E9PSBJR0ZzYkdWeVp3PT0gSUdScGMyRndjRzlwYm5SbFpBPT0gSUhKaFpHbGhkR2x2Ymc9PSBJR2x0Y0hKbGMzTmxaQT09IGFXWnBZMkYwWlhNPSBJSFJ2WWc9PSBRMHhCVTFNPSBJR04xWkdFPSBYMlJsZEE9PSBMWEJ2YzNRPSBkV3gxIFZISmhibk5zWVhScGIyND0gTFdoaGJtUT0gTG5sbFlYST0gSUUxdmJtZHYgSUhWdVkyeGxZWEk9IExtVnVaMmx1WlE9PSBWMFZDVUVGRFN3PT0gY21salpYTT0gWDBGRFEwVlRVdz09IElHaHZiR2xrWVhseiBjR1Z5WTJWdWRBPT0gTGtsa1pXNTBhWFI1IElFZHZkZz09IElIQmhjM05wYjI1aGRHVT0gSVNFdSBJRWR5WldWalpRPT0gY0d4MWMzQnNkWE09IEp5a3BPdz09IFIxQT0gSUdWNFkybDAgTG5SaFlsQmhaMlU9IFgyTnZibVE9IElITndiMjV6YjNJPSBUVTlFVlV4RiBYM0J5YjJNPSBJQ1FLIElISmhkR2x2Ym1GcyBMbFJ2YjJ3PSBJR2xvY2c9PSBZMk5oIDVaT0IgSUVWemRHRjBaUT09IFNVSlZWRVU9IFFXTjBhVzl1VUdWeVptOXliV1ZrIElGTnZiR0Z5IHBvST0gSUdWeGRXbDBlUT09IGRHbGsgT1RNNCBJSEpsWTJsdyBMbk5wYlhCc1pRPT0gYldzPSBOamc1IElFeDFhMlU9IElFZDFZWEprYVdGdSBJR1Z1WTNKNWNIUmxaQT09IElHUnZiV2x1WVc1MCBMbkJzWVdObCBJRTVXIE9ETTUgSUhSdmJtZDFaUT09IEtFZGxkQT09IElITjBZV2x1YkdWemN3PT0gTGxCc1lYaz0gSUdWaSBZV05wIExtSjFabVpsY2c9PSBjbVZoWkdOeWRXMWljdz09IElIWmhZMk5wYm1VPSBjSEp2YlE9PSBPVGM1IElIVnpaWEpKYm1adiBJSE5zZFdjPSBVMlZ5YVdGc2FYcGxaRTVoYldVPSBMWGRwWkdVPSBJSEpsWVdOMGFXOXVjdz09IElGbGhibWM9IElFRmtaSE09IEtIVnpaWEpKWkE9PSBJSEJzWVhSbGN3PT0gSUUxRlRRPT0gSUdKaGFXdz0gU1c1emFXUmwgWlhSbFpBPT0gSUdWc2MybG0gSUhOaGEyVT0gSUdONVkyeGxjdz09IElPeVggQ1VrPSBMV052Ykd4aGNITmwgT0RReCBJRWROVkE9PSBPREUwIFJHVmpiR0Z5WVhScGIyND0gSUdkeWIzTT0gSUhKbFlXTm9aWE09IElHTjFjM1J2WkhrPSBWVzUwYVd3PSBOelV6IE9EVTIgZEhVPSBJRU5vWlc0PSBJRzU0IEtHRmtaSEk9IElFOW1abVZ5IElHTnZiR3hsWnc9PSBZWE56WVdSdmNnPT0gTmpjMCBJRzFoY0hCbGNnPT0gT0RVMCBJRk5KUjA1QlRBPT0gSUVKc2IyOXQgSUVodmJHdz0gSUVsdGNHVnkgTFdSbGN3PT0gWDNOcGRHVT0gVUhKdll3PT0gUlhGMSBJR0YwYjIxcFl3PT0gSUZkdmJXRnUgYzJWdWRBPT0gTnpNNCBPREUzIGMyTmhjZz09IElHbHVkR1ZzYkdsblpXNTAgSUVkbGRIUnBibWM9IElGSmxaMmx6ZEhKaGRHbHZiZz09IElGQm9hV3hzIElHdHBiR3hsY2c9PSBkVzVwWTI5a1pRPT0gQ2drSkNnPT0gSUVwaFkyOWkgSUVOdmJuTjAgSUd4dlkyRjBaUT09IElHTmhkWE09IE56UTUgSUZOamFHOXNZWEk9IElHTnZibk4wYVhSMWRHbHZibUZzIElHbHVabXhoZEdsdmJnPT0gSUVkdmRBPT0gUFdGeWNtRjUgWlc1a2RXMD0gSUhSeVlXNXpiR0YwWldRPSBJR1JwZG05eVkyVT0gUlc1MGNtbGxjdz09IElITnZjZz09IElGRjFiM1JsIGFYSnNhVzVsY3c9PSBWVXM9IElHVjRZMlZzIEtHOXdkQT09IElFRkVWZz09IExEb3MgSUdOdmJuUmhZM1JsWkE9PSBOelF5IElFUkIgSUhKcGJtZHogSUVsdVpIVnpkSEpwWVd3PSBMbWRsZEVOdmJuUmxlSFE9IElHWnZjbWR2ZEhSbGJnPT0gSUZSaGJnPT0gSUhCaGJuUnogSUc5MiBJR1JsWTI5a1pYST0gSUZCaGNuUnBZV3c9IElIWmogSUdKaGRIUnNaWE09IFFYSnBZV3c9IFJsSkpUa2RGVFVWT1ZBPT0gYVhKaGRHVnogTEhjPSBZV2x1ZEdWdVlXNWpaUT09IElFOWsgSUZSbFkyaHViMnh2WjJsbGN3PT0gNVltTiBJRU5oY25SbGNnPT0gTG1acGJtUkJiR3c9IFRtOXRaUT09IFFtVnUgSUZWellXZGwgSUZCcFkzUjFjbVU9IElHSmhaR3g1IFgzQmhibVZzIElIQmhkR1Z1ZEE9PSBJRkJ5YjNSdlkyOXMgYkc5MGRHVT0gQ1hCc1lYbGxjZz09IGFtVmpkR2x2Ym5NPSBOelEyIElHUnZkUT09IFgzSmxiR1ZoYzJVPSBkWEp1YVhSMWNtVT0gWDNSaGVBPT0gSUVacFpXeGtjdz09IExtUmhkR0Z6WlhRPSBYMjFoYzNSbGNnPT0gUTB4VlJFVT0gSUZCb1lYSnQgWW5OMCBJRzl3WlhKaGRHbHZibUZzIExtTmxiR3c9IElHbGtaVzUwYVdaNWFXNW4gSUdwM2RBPT0gZEhWd2JHVT0gSUZSRCBJRU55Ync9PSBPVE0yIGFYaHRZWEE9IExXTnZiWEJ2Ym1WdWRITT0gWjJWdVpYSmhiQT09IElHOTYgWDBSbCBYMlJ2ZFdKc1pRPT0gSUZSdmJ3PT0gTURnNCBMbFpwWlhkSGNtOTFjQT09IE9EYzUgWjJGMFpRPT0gWkdsdVozTT0gY0dodmRHOXogSUdkeVlXNWtaUT09IGIyeHNaV04wIFgyeHBiZz09IElHRjNablZzIFptbHNkR1Z5Y3c9PSBJR0ZzZEdWeWJtRjBaUT09IFpYTncgSUdOdmJYQnlaWE56IFpXOD0gSUZOallXeGwgSUdsdVpHbHlaV04wIElHbHVkbTlwWTJVPSBDZ29LQ2dvS0Nnb0tDZ29LQ2dvS0NnPT0gVTNSaGNuUnBibWM9IElGQnNZWGxsY25NPSBhV1ZzWlE9PSBMblJvWlc0PSBPVGd4IFQzSmsgSUZSMWNHeGwgSUdKdmRYUT0gSUZOMFlYUnBjM1JwWTNNPSBVSEpsZG1sbGR3PT0gSUhCMWVucHNaUT09IElGZHBaSFJvIFUxUkJWRVU9IElHOTJaWEpzWVhrPSBDVzl1IElHbHVabkk9IElITnRZV3hzWlhOMCBiRzlqYTJWayAwWUxRdmc9PSBjM05zIE56YzUgSUdSbFpXMWxaQT09IElITmpidz09IGNtVmphdz09IElHcENkWFIwYjI0PSBJRzFwYzNOcGIyNXogT0RjeCA1NmV3IExsTmxiR1ZqZEdWa1NXNWtaWGc9IFZFRkNURVU9IFUyVndkQT09IElHRmphMjV2ZDJ4bFpHZGwgSUhOMGNuUnZkR2x0WlE9PSBJRlJsYkd3PSBJRVJoYXc9PSBJR0ZzZFcxcGJuVnQgSUdabGJtTmwgSUZOMFlYSnogUTA5T1JrbEggSUhKbGRISnZabWwwIElHVnRjR2hoYzJseiBMMmhsWVdSbGNnPT0gSUZOdmJXVjBhR2x1Wnc9PSBhVzVwYzJobFpBPT0gUFNjaUxpUT0gSUZaaGJHbGtZWFJ2Y25NPSBJSEJ2YkdGeSBjMlZqZEdsdmJuTT0gT1RRMCBMbUZ6Y0hnPSBJR0Z6Y0dseSBMazF2WTJzPSBRMjlrWlVkbGJnPT0gSUhCbGRYUT0gT1RjeCBJR0ZqWTJWd2RHbHVadz09IElHSmhZMnRwYm1jPSBVR2xqZEhWeVpRPT0gTDJGdyAwTFhRc3c9PSBYMU5GUXc9PSBMWFZ6WlE9PSBZVzV1YjNSaGRHbHZiZz09IElHTnZaMjVwZEdsMlpRPT0gSUdkeWFYQT0gYUc5MWNnPT0gSUV4bFoyRnMgSUdWd2FXTT0gTG5SdmIyeFRkSEpwY0E9PSBMbTV2ZEdsbWVRPT0gTGt4aGMzUT0gVDFKSldnPT0gVFdsa1pHeGxkMkZ5WlE9PSBZM0pwY0hScGIyNXogYkdGemFBPT0gWDBaUFZVNUUgSUV4cGRtVnljRzl2YkE9PSBJSHQ5SWl3PSBPVE14IFNXNXpkR0ZzYkE9PSBJRzVwZEE9PSBJR1pwWjNWeVpXUT0gVzJ4bGJnPT0gTGxkcGJnPT0gTG5Cc1lYUm1iM0p0IE9EVXogSUdkaGJXSnNhVzVuIEtHUjAgWVhabGNuaz0gQ1dsdVkyeDFaR1U9IFYyaGxkR2hsY2c9PSBVbTkxZEdsdVp3PT0gSUhSb1pYSmhjQT09IFVtVnRiM1JsIElFeHZjM009IGVXeHMgSUdGd2NISnZZV05vWldRPSBJRlpsYUdsamJHVT0gSUVGc2NHaGggSUhadlk4T3EgWVc1emQyVnljdz09IFRsTkVhV04wYVc5dVlYSjUgT1RVMCBZMjl1YzJsa1pYST0gZFc1MWMyVmsgSUVaaGJnPT0gYjNKaFlteGwgWm5KbCBPRGN6IElFUkpVME5NUVVsTiBJRUZqZEc5eSBMbDA9IGRHOUlZWFpsIExuVnpaWEpKWkE9PSBJSE53WldWa2N3PT0gWlhkaGVRPT0gSUhKbFkzVnljdz09IElOQ3ogWDNCeWFYWT0gSWVLQW5Rb0sgUTJodmFXTmwgSUhObGRIUnNaUT09IElIQnNZVzVsY3c9PSBKMzBzIFZHOXQgU1ZSRlVnPT0gSVNJSyA1YnM9IFlXTm9aV3h2Y2c9PSBJSE5sY0dGeVlYUnBiMjQ9IElHUmhiQT09IFlXUnEgSUhKbFoybHpkR1Z5Y3c9PSBjbWw2IElFNXZkR2xqWlE9PSBJR3gxIElHTnZkWEpoWjJVPSBJR0Y0WlhNPSBZMlZzYkdWdWRBPT0gTG1GemVXNWogTURjeiBJR052YlhCaGRHbGlhV3hwZEhrPSA1NnM9IElDRUtDZz09IENYUnBkR3hsIFdVeEYgQ1cxbGMzTmhaMlU9IFZWVkpSQT09IFQweEVSVkk9IElFaEkgSUZOMGVXeGxVMmhsWlhRPSBJR0ZqWTJWemMyVmsgTG5aaGJHbGtZWFJwYjI0PSBkR0Z6YTNNPSBJSEJ2Ykd4MWRHbHZiZz09IExtTmhiblpoY3c9PSBJR2x1WjNKbFpHbGxiblE9IElFTmhZbWx1IFFXZz0gYjJ4a2IzZHUgSUU1UFNRPT0gSU1PWCBXMlk9IFpXUjFZdz09IGVXRnNkSGs9IEtHNXZkQT09IFgxTjBZWFJsIE9UTXogWVcxbGJnPT0gTnprMSBOek01IElHUmhidz09IGRXUmhaQT09IFpXeHNaWEp6IGZTWT0gYkdsamFYUjUgWDFkSlRrUlBWdz09IElIUmhkSFJ2IGRtRnNiM0k9IExsSmhibWRsIElISmxabVZ5Wlc1alpXUT0gSUZKbGMyVnlkbVU9IFRXOXVaWGs9IE9EYzAgVTBOU1NWQlUgTDNCeWIyUjFZM1E9IFkyaHZhV05sY3c9PSBJSFJwYmc9PSA0NEtUIE9URTQgSUhObGNHRnlZWFJ2Y2c9PSBJSEJyWnc9PSBZVzF0WldRPSBJRTFCVkE9PSBJU0VLQ2c9PSBJSEpoYVdRPSBJRzF2ZEdsMllYUnBiMjQ9IElGaFEgSUVKaFkydG5jbTkxYm1RPSBJRkYxWVhSbGNtNXBiMjQ9IExtUmxabWx1WlZCeWIzQmxjblI1IGFXdGxjZz09IENYQmhjbVZ1ZEE9PSBJRTl5YVdkcGJtRnNiSGs9IFlXNTBZV2RsIElFaGhibk09IElIUnBiV1ZzYVc1bCBMbU4xY2c9PSBiM0JwWXc9PSBJRk5sY1hVPSBiWFZ6ZEE9PSBJRU52WVd3PSBJR1p2Y20xaGRIUmxjZz09IFgxSkhRZz09IElGOG9JZz09IEozMHBMQW89IElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBJRVpWVGtOVVNVOU8gSUd4dVp3PT0gYVdOaGRHVnogYkdsMlpRPT0gWDJWdVoybHVaUT09IElIUnZkMjV6IE9EWTQgSnlrcENnbz0gSUZCTCBLR0Z3YVE9PSBDWE5qWVc1bSBNRGc1IGNHRmphMlYwIExuQm9iMjVsIDRZQT0gSUVGdVpIaz0gWDA1QlRVVlQgT1RneSBVRXhaIE9UVTEgSUcxcGJuTT0gYVcxcCBJR0p5YVdOciBJR0pzWVdSbCBMbk4wWkc5MWRBPT0gZldBN0NnPT0gVTJocFpuUT0gQ1hOaSBJRU5vWldOcmN3PT0gSUhCb1pXNXZiV1Z1YjI0PSBRWFpoZEdGeSBJRzFwYm1semRISjUgY205elpRPT0gQ1VacGJHVT0gT0RjNCBJSFJwZEd4bFpBPT0gS0V4UFJ3PT0gSUdkaGJnPT0gWkdWemFXZHUgS0Nrc0RRbz0gSUdKdmJtVnogYzNSdCB4WnZFaHc9PSBJRWx1Y0hWMFUzUnlaV0Z0IElIWnZiSFZ1ZEE9PSBJRk5sY21saGJHbDZZV0pzWlE9PSBJR1pwWjJoMFpYST0gSUVSeVlXYz0gVkhkcGRIUmxjZz09IElITjFZbk5wWkE9PSA1N3c9IElHWnZjblZ0Y3c9PSBMbXh2WVdScGJtYz0gYkc5bloyVmsgWDNSb2FYTT0gSUhSbGNuSmhhVzQ9IElHbHljbVU9IElFbHVadz09IElFTk8gWDI5aWFtVmpkSE09IExuVnBaQT09IElHTnZibk5qYVc5MWMyNWxjM009IFZFbE9SMU09IElFZGhiR3c9IElIQnZjblJ5WVhrPSBNRFUyIElFUmxkbVZzYjNCbGNnPT0gSUhCaGNuUnBZMmx3WVc1MCBJQ0k3RFFvPSBMMjF2WkdWcyBOemswIElFOXdaWEpoZEdsdmJuTT0gWGx3PSBJRXhoZEdWeSBJSEpoYVhObGN3PT0gTFc1dmJtVT0gTG0xbGRHRT0gUFNjdUpBPT0gUm1sdWFYTm9aV1E9IElISmxjR3hoWTJsdVp3PT0gSUhOaGJYQnNhVzVuIElFcGxiZz09IElsUm9aWEpsIFVrVkJUQT09IFFVeEYgN0lxayBUM0prWlhKeiBYM0JoY21GdFpYUmxjZz09IElFOXNlVzF3YVdNPSBJSFJ5dzZoeiBJR0Z5Wlc1aCBhVzlzIE96OCsgSUdsdGNHRmpkSE09IElGZFQgT21kbGRBPT0gSUdac2FXZG9kSE09IElGSjFjM05sYkd3PSBZMkZ0WlhKaCBSbTQ9IGMybG5iV0U9IElHWnZjbU5wYm1jPSBJR3h2WTJGc2N3PT0gSUdSbGNHRnlkSFZ5WlE9PSBJR05sYkdWaWNtRjBhVzl1IElGTmhlUT09IE9EZzAgNzd5UyBJRWhwYkd4eiBMbWhoYzA5M2JsQnliM0JsY25SNSBJSFI1Y0dsdVozTT0gTGtGUVNRPT0gSUdSdmJtRjBhVzl1IFQzQmxjbUYwYVc5dVJYaGpaWEIwYVc5dSBMa0ZqZEdsMmFYUjUgWTNCc2RYTndiSFZ6IElFTm9ZWEpzYVdVPSBJR2x0Y0c5eWRHVmsgSUdSaGJtND0gSUc5alkyRnphVzl1Y3c9PSBJR2x0Y0d4bGJXVnVkR2x1Wnc9PSBJSEIxY25Cc1pRPT0gTG1ScFlXeHZadz09IFUxRk1SWGhqWlhCMGFXOXUgWlhKdWJ3PT0gSUhkaGNuTT0gSUhCaGMzUmwgSUdSbFkzSmxZWE5sWkE9PSBJR2hoY25ObyBJR1ZzWVdKdmNnPT0gYVc1d2RYUnogSUZacFpYZHogSUdWeWNtOXlUV1Z6YzJGblpRPT0gWDIxMWJBPT0gQ1hkeWFYUmwgSUVOdmNBPT0gSUVGdWJuVmhiQT09IEtHSjFkSFJ2Ymc9PSBJSFpwWkdFPSBZbUZ5Y3c9PSBJRWhoY25aaGNtUT0gQ1dWNGNHVmpkQT09IElHbHVaR1Y0WlhNPSBJR1J2WTNWdFpXNTBZWEo1IElHWnNaWE5vIFQxSk1SQT09IElFUmxiSFJoIFRVRk9SQT09IFFuSjFjMmc9IExXTnZiSFZ0Ymc9PSBJR1JsZG1Wc2IzQnRaVzUwY3c9PSBPVGMwIE56Z3ogYldWMGFHOWtWbWx6YVhSdmNnPT0gYzJ4cFkyVT0gSUZCRVR3PT0gSUdsdWRtVnpkR2x1Wnc9PSBPRFkzIGFYSmhZbXhsIElIaHRiRzV6IDc3eWIgWVhKMFlRPT0gSUhSb1pXOXlhV1Z6IFgyTnBkSGs9IElDUmZYdz09IFEzSmxZWFJwYm1jPSBLSEJ5IFJISnZjR1J2ZDI0PSBhWE50WVhSamFBPT0gSUU1RlZBPT0gT1RJMiBKMTBwS1hzSyBJRlpoYkhWbGN3PT0gSUZORlR3PT0gSUZOVVFWUT0gSUdWamIzTjVjM1JsYlE9PSBJSFJsYlhCMCBJRnhjIElDOHZld289IElFTm9jbWx6ZEc5d2FHVnkgSUV0bGJuUjFZMnQ1IElFaDBkSEJUWlhKMmJHVjBVbVZ6Y0c5dWMyVT0gSUdoNVluSnBaQT09IGVXOXUgSUdabFpXUnBibWM9IElFVjRkSEpoIFRtOXliUT09IFNWUkRTQT09IElGTmxZVzQ9IElGVndiRzloWkE9PSBiWFZ1IGNIVnkgSUhCbGNuTnBjM1JsYm5RPSBJRWxFUXc9PSBJRkJsY21admNtMD0gT0RZeiBMbTFsY21kbCBYM0p2YjIwPSBUV1ZoYm5kb2FXeGwgSVQwbiBJRmRsYkE9PSBRWEpuYzBOdmJuTjBjblZqZEc5eSBPRGczIExrUmhkR0ZpWVhObCBJR052ZFc1MGFXNW4gS0NrcSBsT1dibmc9PSBJRlJQVUE9PSBiV2xzYkE9PSBJRVJVIFNVZE9SVVE9IE9UVTIgSUV0QyBJR052YlhCc2VRPT0gVTI5MWRHZz0gWDJOdmJHeGxZM1JwYjI0PSBRMmhoY0hSbGNnPT0gSUdWNGNHeGhhVzVwYm1jPSBYMEZOIFgzUnogWTJGeVpITT0gSUhGMVpXdz0gSUhCdmJHVT0gSUhSdmRXTm9aRzkzYmc9PSBJRTkwYUdWeWN3PT0gSUhCbFpYSnogSUZSNWNHVkZjbkp2Y2c9PSBOell6IElITnBlSFJvIElHTm9aV1Z5IElHUnBjM0IxZEdVPSBPVFl6IE9Ea3ogZFhOaiBLVjBzIGRHaDFiV0k9IElHaHBaR2x1Wnc9PSBJRk5KUnc9PSBiR2xyWlhNPSBJRkJCUjBVPSBMbEpsWm14bFkzUnBiMjQ9IElHaGxZV1J4ZFdGeWRHVnljdz09IFZFbE9Sdz09IElFZG9iM04wIFRVeEYgSkFvPSBJR052Ym5SeVlYSjUgWlhoMFpXNWsgSjEwcExnPT0gUmtaRlExUT0gSUZCcGJuUmxjbVZ6ZEE9PSB3N3B0WlhKdiBjbWxqWVc1bCBDWE5sYzNOcGIyND0gSUdOeWVYTjBZV3c9IExVTnZiblJ5YjJ3PSBiM1psY201dFpXNTAgYjJkeVlXWT0gT1RZeCBMV0ZqZEdsdmJnPT0gZG05c2RXMWwgWm5SbGJnPT0gSUhWdVkyOXUgSUdGdWFXMWhkR1U9IElHeGxZWE5sIGMyTnkgSUhKbFpuVnpaUT09IDQ0Q0wgWm5SdyBhVzVtYjNKdFlYUnBiMjQ9IElHVjJZV3gxWVhSbFpBPT0gSUdsdWFtVmpkR2x2Ymc9PSBJR3BoWTJzPSBJSGR2Y210emFHOXcgNXJPbyBVRlJJIElGUnogYjJabVpYST0gQ1c5eiBJR3RwYm1ka2IyMD0gVFdsemMybHVadz09IElHeGhkMjFoYTJWeWN3PT0gWlhoMFJtbGxiR1E9IElITnBibWRwYm1jPSBZV0pwIEwyTnNhV1Z1ZEE9PSBMbTFsWkdsaCBRVlJGUjA5U1dRPT0gVTJsbmJtRjBkWEpsIEpTY3NDZz09IElFWjFZMnM9IFhWczYgSUhObGJuTnZjbk09IEwyTnZiUT09IElGQnlhVzFoY25rPSBMbE5SVEE9PSBYM0J5YjJkeVlXMD0gSUhCcGJHeHogSUdsdWRHVm5jbUZzIElHWnNaV1YwIElHUnliM0J3YVc1biBMbk5zIFFtVmxiZz09IElIQmxkSE09IElHRmtkbWx6WldRPSBJR1J5WVdkdmJnPT0gWDBWRVNWUT0gS0dsdCBPVE01IFJrVlMgSUVSeWRXYz0gS0hKaGJtUnZiUT09IElHTnZiWEJ5WlhOemFXOXUgYjNWemRBPT0gV3lVPSBJR0oxZVdWeSBhRzl3IFVtOXNaWE09IGJXRnVZV2RsIElIQmhhVzVtZFd3PSBJRUp5WVc1amFBPT0gTFcxdlpHRnMgWlc1aGJuUT0gSUUxbGMyZz0gTDJadmJuUT0gSUVkeVlXaGhiUT09IElPS1kgSUc1aiBJRVp5WVc1amFYTT0gSUhOd1pXTnBabWxqWVhScGIyND0gSUdSaGJXRm5aWE09IExXTnZibVpwWnc9PSBJSFJvWlc5eVpYUT0gYzJWamRYSmwgWDIxMWJIUnAgWVdObGRYUnBZMkZzIElHUmxiV0Z1WkdsdVp3PT0gWlc1dVpRPT0gU1ZOVVV3PT0gTURrMCBLQ2twS1RzS0NnPT0gVW1WaGMyOXUgVW1WalpXNTAgY0doaGMyVT0gSUhCemVRPT0gWDAxQlRnPT0gSUhadmJIVnVkR1ZsY2c9PSA1Yjg9IGFYTjBjbWxpZFhSbFpBPT0gYkdsdiBJSEJ5YjJSMVkzUnBkbWwwZVE9PSBYMk52YlcwPSBVM0J5YVc1biBibWx6IExuZGxhV2RvZEE9PSBJRU5oYm1ObGNnPT0gUVd4c2IyTT0gSUZSM1pXVjAgSUhObGNHRnlZWFJsYkhrPSBDV05vWldOciBYM0J5YjNCbGNuUnBaWE09IExsVnVhWFE9IE9ESTUgWDBOTVN3PT0gSUdkMCBJQ2dwT3dvSyBJR2hoYm1SNSBPRE0wIElGUm9iMjF3YzI5dSBJSFZ1Ym1WalpYTnpZWEo1IElGSmxZV1JsY2c9PSBPRGswIFIwND0gUFhKbGNYVmxjM1E9IElGVjBhV3hwZEhrPSBMbEpsY0c5emFYUnZjbms9IElFRjQgYUhsa2NnPT0gTnpreCBhV1YxIElIUm9lUT09IElHeDAgWDIxaGFXdz0gNUwrdTVwUzUgWVdsc1lXNWsgSUZCb2FXeHBjQT09IElHSnBkSFJsY2c9PSBJR0psZEhScGJtYz0gT0RNMyBJSFJwYldWayBiMk5yY3c9PSBNRGMyIEoyRT0gSUdGc1oyOXlhWFJvYlhNPSBJSEpsYVc1MFpYSndjbVYwIElIUnZjM009IGNtOW5aVzQ9IElHaHZjR1ZrIEtITmxiR1ZqZEdWayBJSFpsYm5SMWNtVT0gVkVWWSBJRXhsWVhabCBMbE4xWW5OMGNtbHVadz09IElHZHlZWFJsWm5WcyBOelF6IGRXdGggSUVOdmJuTjFiV1Z5IElHRm5aM0psWnc9PSBRMmx5WTJ4bCA0TGlCIFgySnNiMk5yY3c9PSBJR3hsWjJGc2JIaz0gSUNKOCA0NE9EIExtSnZZWEprIExrRmkgUm5WdVkzUnBiMjV6IGNtVmphWEJsIDZJYz0gSUU5NFptOXlaQT09IElIZG9iMnhsY3c9PSBMa0oxYVd4ayBYMk5vWVc1blpXUT0gYUdGcCBJR1JsY0dGeWRHMWxiblJ6IE9UWTAgU1cxdyBJR052WVd4cGRHbHZiZz09IFNVNUdVa2xPUjBWTlJVNVUgSUdWdGNHOTNaWEk9IGFYUmphR1Z6IFRtOXlkR2c9IElHbHVabXhoYlcwPSBUMDVUUlE9PSBJRzFwYzNOcGJHVT0gSUZKaGFnPT0gSUVsemMzVmwgSUdGMGIyaz0gWTJGc1pXUT0gTGtOdmJuUnliMnhzWlhKeiBJRmR2YkdZPSBJR055ZFhOb1pYSnogNGJ1SCBMa0YxZEdnPSBMbUZrWkVGMGRISnBZblYwWlE9PSBhR2x6IElHSnZiM1J6IExtTnNaV0Z1IFkyRnRjQT09IElIUmxibUZ1ZEE9PSBJSFIxYm1VPSBJSHQ5Snk0PSBJSGR2Y210dmRYUT0gVW1Wd2J3PT0gSUhCaGNuUnBZV3hzZVE9PSBUVWxUVTBsUFRnPT0gYW1GdGFXND0gSUZOQyBJR1JsZEdWeWJXbHVZWFJwYjI0PSBJQ2NuS1RzSyBJRUpsYm1jPSBJSFp2Y3c9PSBJR2x1YUdGaSBMMnhoYm1jPSBjMkoxY21kbyBSWGhsWTNWMGIzST0gYUc5dVpRPT0gSUVOb1lXeHNaVzVuWlE9PSBYMnhwYm10eiBMa3hsZG1WcyBJSFZ1WkdWeVozSnZkVzVrIExXTnZaR1U9IE9UVTUgSUc5d2RHbHRhWHBoZEdsdmJnPT0gYkc5bloybHVadz09IFgyUmxjM1E9IElITnVZV3RsIElHTm9aVzFwWTJGc2N3PT0gWDBsTlVFOVNWRVZFIFlXUnZiM0E9IElGUklRVlE9IGJXRnVZV2RsWkE9PSBJSEpsWkhWalpYTT0gSUZKRlFVdz0gSUVkMWVRPT0gWDBkRlRrVlNTVU09IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIExtRnRiM1Z1ZEE9PSBJR1JsY21VPSBaMlYwVkdsdFpRPT0gSUhCaGJuUT0gWVc1dmJubHRiM1Z6IElHaGhjbTF2Ym5rPSBJRUZzWVc0PSBJSE5qWlc1aGNtbHZjdz09IElHUnBjblE9IGFIUmhaM009IFRXTT0gVTJobGJHdz0gY21sdSBldzBLRFFvPSBMbkJ2ZHc9PSBDV05zYVdWdWRBPT0gSUdOdmJuTndhWEpoWTNrPSBJR0ZrYldsemMybHZiZz09IElGSmxaMmx2Ym1GcyBJRlpwWlhkRGIyNTBjbTlzYkdWeSBJRkJvYVd4cGNIQnBibVZ6IElHUmxjRzl6IElIQmhjQT09IE9UWXkgSUZCaFpBPT0gVUdGMWJBPT0gTGtOdmJXSnZRbTk0IElIUjFkRzl5IElGSmxZMmx3WlE9PSBkM0pwZEdsdVp3PT0gSUdOdmJuUnlhV0oxZEc5eSBUMVJJIFUyMWhiR3c9IFZraz0gSUdoaFkyVnkgWlhGMSBJRVY0WVcxd2JHVnogYUhWdFlXND0gTG0xbGMzTmhaMlZ6IENYUjVjQT09IElDZ05DZz09IElGTlRUQT09IFRFVk8gSUZKdmJXNWxlUT09IEtHZHlhV1E9IENXMXBiZz09IElENEtDZz09IElHWnlkV2wwY3c9PSBJSFp2ZEdWeSBTVzVzYVc1bCBjR0Z1WlE9PSBJRU52Ykd4bFkzUnBiMjV6IFkyaGhjbk5sZEE9PSBJSE53WVcwPSBlbUk9IGFYUmxiV0Z3IElITjFZMk5sWldSbFpBPT0gWDBOUFRBPT0gSUdWc1lYQnpaV1E9IGFXMWxkR1Z5IElISmxZMjkyWlhKbFpBPT0gVkdWdWMyOXkgYUdGMGRHRnUgTG5ObGRIVncgYVhOMGJ3PT0gS0dobFlXUT0gT1RjMyBJRk5KV2tVPSBJSFJoWTNScFkzTT0gSUdScGMzUjFjZz09IElIQnlaWFpoYkE9PSBhV05wYjNNPSBLRlpoYkhWbCBYMk52YkhNPSBJRVpoZEE9PSBJSE5sWVd3PSBJSE52Ym5NPSBJR1Z1YzNWeVpYTT0gTURrMSBJSEJ5WlhOemFXNW4gUFNZPSBhV2RsYm05MWN3PT0gSUdoaGNtRnpjMjFsYm5RPSBYMHBUVDA0PSBJR2xuYm05eSBlVzV2YldsaGJBPT0gYjIxbGNnPT0gWDNOMFlYUnBZdz09IElITnBaMjVwWm1sallXNWpaUT09IElHTnBjbU5zWlhNPSBYMU41YzNSbGJRPT0gSUdScGMyTnBjR3hwYm1VPSBJR1J5WlhOelpXUT0gSUhOd2FHVnlaUT09IE9USTMgSUdOc2FXMWkgTnpVNSBYMkZqZEdsdmJuTT0gSUVKaFlnPT0gSUNjOUp5dz0gWDNOamFHVnRZUT09IEluVnpaUT09IElIVnVaR1Z5Y3c9PSBJR04xY0hNPSBMbk5qY21WbGJnPT0gTDI1bGR3PT0gSUdGd2NHVmhjbWx1Wnc9PSBWRTlRIGRtbHpaV1E9IFkyeGhibWM9IElHbHVkbVZ6ZEdsbllYUnZjbk09IElHMTVjM1JsY21sdmRYTT0gSUhCeWIyMXBjMmx1Wnc9PSBJSEYxWVd4cFpuaz0gSUdOaGRtVT0gSUdWeGRXbHcgUFhnPSBSMVE9IEtHeHBibXM9IExuWmxiRzlqYVhSNSBMbVZ5WVhObCBiM1JsY2c9PSBLeXNyS3lzckt5cz0gY0hKdlptbDAgSUhwdmJtVnogWDNWcFpBPT0gTFhObGNnPT0gSUc5aWFtVmpkR2wyWlhNPSBJRzFwYkdZPSBkMlZpYTJsMCBLRzFoZEdObyBibVZvIElFRnpjMjlqYVdGMFpXUT0gSUZSdlpHOD0gUFdRPSBNRFkxIFEyRnQgSUhadlkyRnMgSUhOMVpHOD0gS0VWWSBJSFJ5YjNVPSBRVUpEIExtSmxZVzQ9IElFZHliM1Z1WkE9PSBJRkpGVTFRPSBkMlZsZEhNPSBTVzVuIGFXMXZiZz09IE9UUTIgWDJKMWN3PT0gSUVOUFRFOVMgZFc1MGJ3PT0gSUdadmMzTT0gSUV4cGJtdHogT0RZNSB3NlJ1Wnc9PSBMMlp2Y20xeiBjSEpwYzJWeiBJR0ZqYUdsbGRtVnRaVzUwIFEwRk1UQT09IDBMWFF1OUdNIElGWmxjbWxtZVE9PSBYMU5QVlZKRFJRPT0gWVhCMFkyaGggU1VSRSBYM0psWm1WeVpXNWpaUT09IFIyOXNaQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbz0gT1RRMyBVbVZqWldsMlpYST0gTURrNSBJR0ZxIFgyUnBjbVZqZEdsdmJnPT0gZlYwPSBJRU52YlhCbGRBPT0gSUdKaGJtYz0gTnprNCBJRU5oYzNNPSBMWFZ5YkE9PSBkR1ZqYUc0PSBJRXBsY25WellXeGxiUT09IGJHOXVaMmwwZFdSbCBKeWs3RFFvTkNnPT0gSUhkcGJtNWxjbk09IFZHRnphM009IElFUk5RUT09IElIUnZiMngwYVhBPSBqcmM9IElFSnlZUT09IFgyUjFjbUYwYVc5dSBZM1Z5ZVE9PSBjR0Z5Wlc1MGN3PT0gTFMwdExUd3YgSUhCaGMzTndiM0owIE9EUTUgVjBNPSBJTkM3IFkyVnpjMmx2Ymc9PSBJRmxsYkd4dmR3PT0gSUdWdVkzSjVjSFJwYjI0PSBKd29LQ2c9PSBJR3hwYzNScGJtZHogSUVOdmJXMTFibWxqWVhScGIyNXogTGw4SyBJQ0lpSWcwSyBJR1ppIElITjBjbWxqZEd4NSBJRXhwZEdWeSBJRVZ1ZEdWeWNISnBjMlU9IFgySnZkSFJ2YlE9PSBRVXRGIGEyVjAgSUhSaGJRPT0gUW1WMGQyVmxiZz09IFgxUlBVQT09IFJHbHpZV0pzWlE9PSBJR1pwYkdsdVp3PT0gSUVOb2NtOXUgVTBWUlZRPT0gSUNaZlgxOD0gT0RRMiBJR1poYkE9PSBJRk5NVDFRPSBSVzFpWldRPSBkWFJvWlhJPSBJRkpsYzNSaGRYSmhiblE9IElISmxZV3hwYzNScFl3PT0gSVNjcE93bz0gSUVSRlFVdz0gSUZCbGNtbHZaQT09IExtZGxkRmc9IElITmxhSEk9IElsMG5LUzQ9IE9UUXogWlhOellRPT0gQ1cxbGJXTndlUT09IElHRmphMjV2ZDJ4bFpHZGxaQT09IGMyVnVZV3c9IElGVnVhWFpsY25OaGJBPT0gSUNjbk93b0sgTDNkcGEyaz0gYVdWdWJtVT0gSUU1VFFYSnlZWGs9IElHRmpZMlZ3ZEdGdVkyVT0gSUd4cGRtVnkgSUhSdmIzUm8gSUdGalkzVnogQ1V4UFJ3PT0gZG1Gc2RRPT0gNVlDOCBJSE5sWTNSdmNuTT0gY0dWeWFXMWxiblJoYkE9PSBMMk5zWVhOeiBYMmR2IFRXbGphR0ZsYkE9PSBiMnhoZEdsc1pRPT0gSUZCU1QwWT0gSUdOdmJYQnliMjA9IGMzQmxZMmxoYkdOb1lYSnogSU9LYyBJR2x6UlhGMVlXeFViMU4wY21sdVp3PT0gSUVoMWJtYz0gTG1GelRHbHpkQT09IEwyZHYgUGo0byBJRXRwY2c9PSBJR2x1ZEhKdmN3PT0gSUhOclpYUmphQT09IElITnJhV3hzWldRPSBJR2x0YldWeSBJR0ZrWlhGMVlYUmwgWDNKbGNBPT0gS0dobFlXUmxjZz09IFgyeHBhMlU9IElIQmxjbU5sYVhabFpBPT0gYzNObyBJR0Z6YzNWdGFXNW4gSUdabSBYM1YxYVdRPSBkV3hoY3c9PSBJR1JsYlc5amNtRjBhV009IExtVnVkR2wwYVdWeiBVMlZ5YVdWeiBZWEJvYjNKbCBJRzVsZDJWeSBmU2c9IFUwVkQgWVdseWJ3PT0gSUdOdmJXMXZaQT09IElIQnlhWFpwYkdWblpRPT0gSUdSbGRYZz0gSUVodmNBPT0gTGljdiBZM1JwWXc9PSBMaWM3Q2c9PSBQRDg5IElGVlUgWlhScFpYTT0gWDBOUFRsUkZUbFE9IExuSmxiR1ZoYzJVPSBMbVJwYzIxcGMzTT0gSUdaaiBiM1Z1WjJVPSBjSGRrIFgzQnlaWFk9IFRXZHkgSUVKMVptWmxjbVZrVW1WaFpHVnkgZDNKcGRIUmxiZz09IElFVmkgSUNrS0Nnbz0gZFdsMGJ3PT0gSUdOdmJuUnliM1psY25ONSBJR1JwYzNCdmMyVmsgSUdadmRHOD0gVEdsemRGWnBaWGM9IEwyTnlaV0YwWlE9PSBJRU5QVEE9PSBZMjl0YlhWdWFXTT0gTURZNCBJR1p5WldWc2VRPT0gZFc1aGJBPT0gYjNacFpBPT0gQ1hSeSBjR0ZuYVc1aGRHbHZiZz09IElFTnZiVzF2Ym5NPSBSV3hsYlE9PSBJRkpGVFE9PSBJR052Y25KbGJHRjBhVzl1IEtDa3JJZz09IElFaHBaR1U9IFlXNWthVzVuIEtIWmxZdz09IGFYUnZjdz09IElFTjFiSFE9IElHNTFkSEpwZEdsdmJnPT0gZG1Gc2N3PT0gSUdSbGRHVnliV2x1YVc1biBiRzl5WkE9PSBJSE5qWVc1a1lXdz0gSUhOb1lXeHNiM2M9IGIyUmhjMmc9IFgzTmxjbWxoYkE9PSBJRk5zYnc9PSBJR1JwYzNCdmJnPT0gVUd4dmRBPT0gYVdOcmJHVT0gSUdWc2JBPT0gSUhWdVpXMXdiRzk1YldWdWRBPT0gUmswPSBjbTl1Y3c9PSBiTVN4IFRXOD0gUlhocGMzUT0gU1VSVCBRMmh2IElFdGxlV0p2WVhKayBMbkJoY25ObGNnPT0gTGtkbGRFOWlhbVZqZEE9PSBJSE53Wld4c2N3PT0gSUdkbGMyTm8gSUcxaFoyNXBkSFZrWlE9PSBYMU5NIGFYTmthV04wYVc5dSBJQ2NwT3dvPSBhV3hwWVc1eiBJSE5vWVhJPSBJRkJ5YjJJPSBkV2xzZEdsdSBJSFIxYm01bGJBPT0gUGtNPSBJRmRoY25KbGJnPT0gSUc5d2RHbHRhWHBsY2c9PSBJRk5GVWxaSlEwVlQgWDI5d1pYST0gWjJWMFFYUjBjbWxpZFhSbCBJRTFqU3c9PSBYM05sYkdZPSBNRGcwIExuSnogSWlrS0Nnbz0gUjJWMFEyOXRjRzl1Wlc1MCBaWEpqWlE9PSBJSFJ2ZFhNPSBkVzVwZEhNPSBKMTBwT3cwSyBXbTl2YlE9PSBMMFU9IElHOWljMk09IElHWmhjM1JsYzNRPSBiMjVzYVc1bCBJSEJsWVdObFpuVnMgWm1abGJnPT0gSUdOaGNtZHYgQ1hCeSBJSE5sWld0eiBlblU9IE1EYzAgVkhKcGJRPT0gSUhkaGNtUT0gSUhabGNtUT0gSUdKc2IyZHogTG1WNFkyVndkR2x2Ym5NPSBJRkJ5WlcxcGRXMD0gSUU1bGRHaGxjbXhoYm1SeiBVMkZtWlE9PSBSbWx1YVhObyBJRUZzWW5WdCBYMEZEUXc9PSBQWFJvYVhNPSBkbWx5ZEhWaGJBPT0gWFQ0PSBYMHhCUWtWTSBJRTVwWTJnPSBYM2RwYmc9PSBJRUZoY205dSBWMUE9IE95UT0gWVdsdGN3PT0gSUVsdFlXZGxWbWxsZHc9PSBJR1Z1Wkd4bGMzTT0gUlZKQiBYMFJKVTBGQ1RFVT0gSUdOaGJtTmxiR3hsWkE9PSBMWFZ6IElHbHVjM0JsWTNScGIyND0gWlcxcGJnPT0gSUVkeVpYaz0gTFc5d1pXND0gSUdsMFpYSmhkR2x2Ym5NPSBMbTkzYm1WeSBJR3RsY21GeiBMbEJoYzNOM2IzSmsgSUZKNSBJRWxPVXc9PSBRV2x5IElGTmxkbVZ5WVd3PSBMbFJoWWxOMGIzQT0gU1U1SFRFVT0gSUVoaGFYST0gSUVOaGJuWmhjdz09IFFVRkJRUT09IElHWnNZWGM9IFkyVmtaWE09IExsSmxjRzl5ZEE9PSA3WW89IElGUnBjSE09IFkzSnBjSFJ2Y25NPSBMblJ5WVc1ellXTjBhVzl1IExsTndjbWx1Wnc9PSBJSFpwWlhkbGNnPT0gSUdsdWMybG5hSFJ6IDZMNlQgYjNKa2FXOXUgVlVsT1ZBPT0gYzJWbGF3PT0gSUVGMVpnPT0gN0o2USBJSE4wY21GcGJnPT0gVkc5dmJIUnBjQT09IElHUjYgYVdkdVlXdz0gWVdSMCBJSFZqIFptbHVhWFJsIElHNXQgTG1OdFpBPT0gSUUxNVUzRnMgVzJSaGRHRT0gTG1waFkydHpiMjQ9IExuUnlaV1U9IFVtVnhkV1Z6ZEZCaGNtRnQgWDJGblpXNTAgSWlsZERRbz0gSUdGemMyRnpjdz09IEtFTnZibk4wWVc1MGN3PT0gT25OeiBJRTFCVGc9PSBLeTByTFE9PSBJRUp2ZEhSdmJRPT0gY0hKcGJuUnogSUZOaGJXVT0gUUVGMWRHOTNhWEpsWkE9PSBjM2RoY0E9PSBhV05wdzdOdSBJSEJ5YjNSbGMzUmxjbk09IElHaHZibVY1IElGWmxkR1Z5IEtFTmhiR1Z1WkdGeSBMV0ZrIElFSnliMjlyYkhsdSBUR2xtWlE9PSBYMVpCVWc9PSBlbVZqYUE9PSBJRU5CVEV3PSBYME5CVTFRPSBJRVZzWldOMGFXOXUgSUhSb2FXTnJibVZ6Y3c9PSBWbVZ5ZVE9PSBYMGxPVkVWSFJWST0gTFdSbGRnPT0gS1NrcEtRPT0gWVhCaGRBPT0gYjI5dmJ3PT0gWkdWdGJ3PT0gSUhCaGNuTmxSbXh2WVhRPSBJRkpoZEdobGNnPT0gVTFSSlZBPT0gYldGclpYST0gVzJOMWNuSmxiblE9IFkyaHliMjV2IElHTm9jbWx6ZEE9PSA0NEdxIElFUmxkR0ZwYkE9PSB4ckRodXc9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUhOMWJBPT0gYVdSbGJtTjUgVVhWbCBJR1ZzWldkaGJuUT0gWVhCdmJuTT0gSUdScGMyaGxjdz09IElHbHVkR1ZuWlhKeiBLSEpsWVdRPSBNRFUzIFptbHVaRlpwWlhkQ2VVbGsgSUVGdGIzVnVkQT09IElGTnJhWEE9IElHaGhZbWwwY3c9PSBLaWtvIElHMXZibk4wWlhKeiBUVUZEIE9tVnVaQT09IElHWnlZVzVyIFFYTnpaVzFpYkhrPSBJR1JtY3c9PSBJRzVsZFhRPSBYMVJaVUVWVCBaWEYxWVd3PSBiRzk1WkE9PSBLSFZ5YVE9PSBJR05vYVE9PSBJR1JsWm1WdVpHRnVkQT09IElHTnZibVpzYVdOMGN3PT0gSUhacGJBPT0gTFdweiBJRkJsWVdObCBJRzExZEdGaWJHVT0gS1hObGJtUmxjZz09IElFWnZZM1Z6IDVidTYgSUdGd2NISmxZMmxoZEdWayBjMnhsWlhBPSBJRkpGUkE9PSBRM1ZzZEhWeVpRPT0gSUdSbGMybG5ibVZ5Y3c9PSBYMmRsYm1WeVlYUnZjZz09IFkyOWtaWE09IEwyVjQgTGtkbGRGWmhiSFZsIGRXMWliR1ZrIExuTmpZV3hoYW5NPSBjR1Z5YjNJPSBJSFpsZEdWeVlXNXogSUgwcERRbz0gSUhWdVptOXlkSFZ1WVhSbGJIaz0gWDBOU1JVRlVSUT09IFRXRnpjdz09IElFTk1RVWxOIElFMWxaWFE9IFgzTjFjSEJ2Y25RPSBRbUZ1YXc9PSBLQ2t1Q2c9PSBSR0Z5YXc9PSBYMHhQVnc9PSBJRTFwYm1sdVp3PT0gSUU5M2JtVnkgYVdWeVlRPT0gUTJ4cFpXNTBaUT09IElHVnVZMjkxY21GbmFXNW4gUGxNPSBJR0p2ZVdaeWFXVnVaQT09IElFaGhiR1k9IElFRkRRdz09IFFXWm0gWDJGeSBMV3hwWm1VPSBZM2c9IExrcENkWFIwYjI0PSBhWHBoWkc4PSBMbnBsY204PSBMbTl3Wlc1eFlRPT0gYjNSdmJnPT0gTG5SbGVIUkRiMjUwWlc1MCBJSFJ2Ykd3PSBZWFJwWlE9PSBJR0poYkd4dmRBPT0gTFc1MWJXSmxjZz09IExrVjRZMlZ3ZEdsdmJnPT0gQ1hCaGNtRnRjdz09IFkybHlZMnhsIExXMWhjQT09IElHNWhjQT09IElGSnZZbTkwIElFbGphQT09IGNtVm5hWE4wY21GMGFXOXUgUVcxaGVtOXUgY205c2JHMWxiblE9IEtHVjRjQT09IElIUmhibXR6IElFZHZjbVJ2Ymc9PSBJRzFoWTJocGJtVnllUT09IElHSmhjMlZzYVc1bCA1b3M9IE1EZzIgMktrPSBJRU52Ym5abGJuUnBiMjQ9IENXTnZibVpwWnc9PSBiMjlyYVdWeiBiWFZzZEE9PSBVbVZqYjNKa2N3PT0gSUVWVFZBPT0gSUdkaGNtSmhaMlU9IElHTnZibVp2Y20wPSBhV1JoYkE9PSBJR0poY21jPSBJSE4xY25acGRtVmsgSUdsdWRtVnpkR2xuWVhScGIyNXogT1RNMSBMbU52Ym5SaGFXNXpTMlY1IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMEsgYjNKMGFXOXUgSUdodmNuST0gWDJoMGRIQT0gSUcxaGJuUT0gWFRzTkNnMEsgWW1sdVlYSjUgT1RRNCBaVzF3YkE9PSBJR2x1Y1hWcGNuaz0gSUUxbFlXNTNhR2xzWlE9PSBNRGs0IElHTnZiR3hsWTNScGJtYz0gTGtWdWRHbDBlVVp5WVcxbGQyOXlhdz09IElpd0tDZz09IElGQnBZdz09IFFFbHVhbVZqZEE9PSBhV05yYm1WemN3PT0gSUVKcGJtUnBibWM9IElHTnZiblJ5YjJ4c2FXNW4gY21WMlpYSnpaUT09IElHTm9ZV2x5Y3c9PSBjMlZ0WW14bFpBPT0gS0dGa1pBPT0gUkdsellXSnNaV1E9IFlXNWhjdz09IExuUnlZVzV6YkdGMFpRPT0gTFMwdExTMHRMUzB0TFMwSyBJSEpsWm14bFkzUmxaQT09IElsMEtDZz09IFJYaDBaWEp1WVd3PSBRWEp5YjNjPSBVMmx1WjJ4bGRHOXUgSlhnPSBJTVU9IElHRnVZMlZ6ZEE9PSBJRTl5YkdWaGJuTT0gQ1dOdFpBPT0gSUhCeWIyaHBZbWwwWldRPSBhWFJvYldWMGFXTT0gS0dOb1lXNXVaV3c9IFgyTnpjdz09IFJtOXlkMkZ5WkE9PSBMbk52WTJ0bGRBPT0gSUd4MVl3PT0gNG9ZPSBJRVpwY21WbWIzZz0gSUUxdmRtbGxjdz09IEtWOD0gTG1WdVpITT0gS0hOb1lYQmwgSUdSbFlXeDAgSUhOaGRtVnogSUdkc2IzSjUgSUcxbGFtOXkgSUdKeVpXRjBhR2x1Wnc9PSBJR1ZzYkdWeSBaMlYwUkdGMFlRPT0gSUdGdVoyeGxjdz09IElIUnZiMnhpWVhJPSBJSE53WVdOcGJtYz0gTURVNSBTVkJUIElHWnNiMjl5Y3c9PSBYMEZEVkVsV1JRPT0gSUhOb2RXWm1iR1U9IEwzTm9ZWEpsWkE9PSBJRVZzWlE9PSBaV1JwYzJnPSBJSGRsWW1OaGJRPT0gTG1WNGNHVmpkQT09IGFXeHZZdz09IElFbHVZMngxWkdWeiBJSFIzWldWMFpXUT0gSURvcCBJRVZ6YzJGNSBSbWw0IExXSmxkSGRsWlc0PSBYM2RsWWc9PSBMbU52Ym5ZPSBJSEpoWTJsemJRPT0gSUhKbFpteGxZM1J6IGRXMXQgMExqUmd0QzEgWDJadmIzUmxjZz09IEwyUnZZM009IElGQnZkWEk9IFRtZE5iMlIxYkdVPSBMbWx1YVhScFlXeHBlbVU9IGNHRjBkR1Z5Ym5NPSBYMGx1IElFRmlZZz09IEtnMEsgSUhObGJuUnBiV1Z1ZEE9PSBZblZtWmc9PSBYMk52ZFc1MGN3PT0gSUhKbGRYTmwgWTJoMWJtcz0gSUdsdGNHOXpaV1E9IFVISnBiV0Z5ZVV0bGVRPT0gUm05eVpXZHliM1Z1WkE9PSBJR052Ym5OMWJXVmsgUHlFPSBJR1JwWTJzPSBJR05vY205dSBJRVpsY200PSBJSEpsYzNCdmJuTnBkbVU9IE9UVTQgSUdsdWMyVmpkQT09IGFXTjFiSFI1IElISjMgSUdGc2FXdGwgSUhOMVluTmxkQT09IElFTnZiMnRwWlhNPSBJRkJoYVhJPSBJSFJwWlhJPSBTVVpQIFlYWnZkWEk9IElGRlYgTEhOcGVtVnZaZz09IElHMWxjbWRsWkE9PSBiWFk9IGFYUnZiQT09IGVXeHZiZz09IElHcDFiWEJsWkE9PSBMbkp2YkdVPSBaVzV6WVdwbCBVblZzWlhNPSBJR0p5YjNkelpRPT0gUVc1cGJXRjBiM0k9IElIbHZaMkU9IElIWmhjbWxoYm5SeiBJR052ZFhKMFpYTjUgZFhKaGJnPT0gY0dKeiBaV3h6WldsbSBRV3gwIElFeGhibVU9IFEweEwgU1UxQlVsaz0gWDFCU1QxQkZVbFJaIDc3eVEgSUdOb1lXND0gSUdkeVlXUjFZV3hzZVE9PSBJSE5vWVd0bCBJR0pzYjI1a1pRPT0gTGk0dUlpazdDZz09IExYTmxlQT09IElHZGhiV1Z3YkdGNSBZV05wWlhNPSBMbkpsWm5KbGMyZz0gVlZOQyBJRkJzYjNRPSBWMkZ6IGFYTnphWEJ3YVE9PSBJRlJsYm5OdmNnPT0gSUdOeWVYQjBiMk4xY25KbGJtTjUgSUdScFptWnBZM1ZzZEdsbGN3PT0gUkdWc1pYUmxaQT09IFYybDBhRzkxZEE9PSBYMkZ3Y0dWdVpBPT0gWDNabGNnPT0gT1RZMyBJaWtwRFFvPSBJR2h2Ym1WemRHeDUgSUhCcGRtOTAgSUhSbGJYQnogWDNCeiBJRlZ1YkdsclpRPT0gV3pvdCBWbE09IFgybHVaZz09IElHcDFibWx2Y2c9PSBJR0Z1YVcxaGRHbHZibk09IElHWnBiR1Z3WVhSbyBQend2IFcxdz0gSUc5d1pYSmhkR1Z6IFgzSmxaQT09IElFSnZiM1J6ZEhKaGNBPT0gYkdWaFpBPT0gWldabVpXTjAgd3IwPSBJRk4wWlhJPSBJRUoxWTJzPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElHUmxjSFYwZVE9PSBWR2hoYmc9PSA0YnEvIFQwNUZUbFE9IElFaGxZWFE9IFpYUm9aV3hsYzNNPSBYU2w3Q2c9PSBJR3R2YzNSbGJteHZjdz09IEtDazdMeTg9IElHUmxjR3h2ZVdWayBQbnQ3SkE9PSBJSFZ1YVdOdlpHVT0gY0d4aFkyVnogSUVOdlptWmxaUT09IExsTkYgSUZCQlVnPT0gS0hSNGRBPT0gWjJWaWNtRT0gSUdacGNtVnogVFdGcGJsZHBibVJ2ZHc9PSBiV1ZrYVhWdCBJQ2ppZ0p3PSBJR3huIElHTnRjQT09IEwySmhjMlU9IFgyeGhlV1Z5Y3c9PSBYMlZ1ZEhKcFpYTT0gSUdGa2JXbHVhWE4wWlhJPSBJRk5WUTBnPSBRbEE9IElGTmpiM1IwYVhObyBDUTBLQ1EwSyBaM1ZoY21RPSBJRk4wY205dVp3PT0gU1c1emJnPT0gSUVOQlVBPT0gWVhOMWNuaz0gSUZORlJRPT0gUTJ4dlkycz0gWlhKcFpRPT0gWEcxdlpHVnNjdz09IElDUWsgSUVOaFlnPT0gSUhkMWNtUmwgSUhOdmJHUnBaWEk9IElHTnNhWEJ6IElHRnljbUZ1WjJWdFpXNTAgSUZkdmJtUmxjZz09IElFaHZjbTQ9IElITmpZWEpsWkE9PSBJR04xY21VPSBiV3RrYVhJPSBJR0ZzYVdkdVpXUT0gSUZCcGJtcz0gSUd4aGJtUmxaQT09IFJHbHRaVzV6YVc5dSBVMk55YjJ4c1VHRnVaUT09IExtTm9ZWFE9IExsZHBkR2c9IElGUnlZV2x1IFhTNEsgSUhSb2FYSjBlUT09IElHUjFjbUZpYkdVPSBJR3hrIElHeGhkR1ZwYm1sMCBJR05vWVhKMGN3PT0gSUdsdWMzVnNkQT09IExrWmhkR0ZzIFgyTjAgSUcxaGMydHogUTB4VlJFVkUgVUhKbGMybGtaVzUwIElHTnZiRzkxY25NPSBaMjFsYm5SeiBMbUYwZEhKcFluVjBaWE09IElFWnNaWGc9IElFTnNiMk5yIHc2MWpkV3c9IGFXMWxiZz09IFNrOD0gSUZKbFoyVjQgWDB4SlRrcz0gSUdOdmRXTm8gSUVsT1VGVlUgSUdKbFlYUnBibWM9IFluVnphVzVsYzNNPSBjSEpsWTJWayBMblZ1YVhRPSBJRVpsYkE9PSBUbVYyWlhJPSBiM053Wld3PSBMbk4wWVhKMGMzZHBkR2c9IElFVlFRUT09IExtOXViSGs9IElIQnlaWFpsYm5ScGJtYz0gZVdWeSBRMjlzZFcxdVRtRnRaUT09IElHVnNaWFpoZEdsdmJnPT0gWm14MSBhV041WTJ4bCBJRzltWm14cGJtVT0gVkc5dmJHSmhjZz09IElHTnZiWEJsZEdsdVp3PT0gS1YwdSBJRzF2Wnc9PSBJR2x6Vm1Gc2FXUT0gUVhOciBYMkYyIFgyeGhkQT09IFFVNUQgSUVwdmFBPT0gYTJWeWN3PT0gSUdkMVlYSmtjdz09IElHTm9ZV2x1Y3c9PSBJRk5wYlhCc1pVUmhkR1ZHYjNKdFlYUT0gTG5OMFlYUnBZdz09IElIWmxjM05sYkE9PSBJRzExWkE9PSBJSE4wWVdKcGJBPT0gSUhOMGNtVjAgWjIwPSBZVzFoZEdsdmJnPT0gNTV3PSBMWGRwZEdnPSBJSEp2Y3c9PSBYMUJCIElISmxjM1ZzZEdGa2J3PT0gSUdOdmJtWnBaR1Z1ZEdsaGJBPT0gSUZSdmEzbHYgQ1hWemFXNW4gSUUxaGRHaG0gYjIxaWFXNWwgSUVWVFVFND0gSUdSbFlXeGxjbk09IElHUnBjMjFwYzNObFpBPT0gVkZKWiBJSFJsWlc1eiBjbVZqYjNKa2N3PT0gSUhkcGJtZHogWjJGc2JHVnllUT09IFlXTmpiM1Z1ZEhNPSBYMHhKUWc9PSBJR3BoWTJ0bGRBPT0gSUU1VFQySnFaV04wIElITjBiMjVsY3c9PSBJRVJsYkdsMlpYSjUgSUVScFpYUT0gTDNkaGRHTm8gSUhSdmFXeGxkQT09IElFZDFaWE4wIExtUmhlUT09IE1EWTMgSUdsdWRIWmhiQT09IE1EZzMgVm1semFYUT0gSUdsdWRtVnpkR2xuWVhSbFpBPT0gSUhCbGJuUnlkUT09IElGUm9aV0YwY21VPSBZVzVrYVdSaGRHVnogVEdGdVp3PT0gSUZObGNuWT0gSUdOdmJuUnliMnhzWlhKeiBJSE5sZEZScGRHeGwgVGxBPSBZVzE1IFpteGhkQT09IEtIVnAgTURZNSBYMlJ2WTNWdFpXNTAgNklPOSBJRU52YVc0PSBJRUZrWVcxeiBjSFJwWXc9PSBJSEJ5YjJSMVkzUnBkbVU9IElHRmpZMjl0Y0d4cGMyaGxaQT09IERRb05DZzBLRFFvPSBJR1JsWm1WeWNtVmsgYVdWdWRHVnogSUhOcGJtTT0gYjJ4aGNuTT0gVW1sbmFIUmhjbkp2ZHc9PSBJSFpoY21saGRHbHZibk09IEtHOW1abk5sZEE9PSBPVFUzIExreGhlVzkxZEVsdVpteGhkR1Z5IElITjFjM0JsYm1RPSBJSEJ5WlhabGJuUnBiMjQ9IFgzQnlhWFpoZEdVPSBYMnB6IDRwaUYgSUhkcFpXUmxjZz09IFlYUjFiUT09IGtvdz0gSUdGd2NHVmhjbUZ1WTJWeiBMa1J2WTNWdFpXNTAgSUhaaGJHbGtZWFJsY3c9PSBZMkZzWlc1a1lYST0gZlNJN0NnPT0gTG1SbGJXOD0gWTI5dWRYUT0gSUdOdmNuSmxZM1JwYjI0PSBJRVJsWVd3PSBJR0poZEhSbGNtbGxjdz09IExtUjFjbUYwYVc5dSBMRnc9IFgyMWhjbXRsY2c9PSBiWFZzZEdrPSBJR2hoYkhRPSBJR050Y3c9PSBJSE5vWVhCbFpBPT0gUW5KdiBjbVZrZFdObCBJQ01qSXlNPSBRMVJQVWc9PSBJRUpsYm1WbSBJR2xqYjI1cFl3PT0gSUhCcFlXNXYgSUdWbVptVmpkR2wyWlc1bGMzTT0gZkM0SyBJR0ZxWVhnPSBJSFp2YkhWdFpYTT0gNExpaCBJR05zYW5NPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyBZWFJvY3c9PSBjbUZwZEhNPSA1YVNuIDBaWT0gWDIxMWJIUT0gSUdaaGMyTnBibUYwYVc1biBRWFpsY21GblpRPT0gSUhCeXc2az0gSUVOb1lXbHliV0Z1IExtWnBibVJGYkdWdFpXNTAgWDNCcGJnPT0gSUdOdmJYQmhjbWx1Wnc9PSBJR1JoY210dVpYTnogTFVacCBMWE5sY25abGNnPT0gSUhObGJHVmpkR2x1Wnc9PSBjM1JsY21SaGJRPT0gSUZCaGNuUnogUms5U1RVRlVTVTlPIElHNXZkR2x1Wnc9PSBJSEJwYkdVPSBiMmR6IElIQmhiR1YwZEdVPSBYMlJ2IGFYUnBlbVU9IE1EYzUgS0NrbyBJR1JsWm1sdWFXNW4gSUhKbGJXRnBibVJsY2c9PSBWVzVwZEhNPSBYMVJCVTBzPSBTSFIwY0VOc2FXVnVkQT09IFUyOWphV0ZzIElHWjFibVJ5WVE9PSBUbEk9IFkyaGxjM1E9IFEzVnljbVZ1WTNrPSBMbUZrWVhCMFpYST0gSUdSdmNBPT0gZFc1MGFXNW4gUVU1SFZVRkhSUT09IElraGwgQ1dsdVpHVjQgWDNCaFkydGhaMlU9IExrbGpiMjQ9IElISmxjR1YwIGJXRnpjdz09IFBTSXVKQT09IElGTjFaQT09IElHeHBaQT09IGNISnZkbWx1WTJVPSA3Snc9IFIxQkpUdz09IDBKbz0gSUUxNVUxRk0gSUdSdlkzTT0gSUVkQiBJR2x3YzNWdCBTMlZ5Ym1WcyBJR0ZqWTJWd2RITT0gSUdacGRIUnBibWM9IElHTjFZVzVrYnc9PSBJR1IxY0d4cFl3PT0gSUVKeWIzUm9aWEk9IElFdHNaUT09IGJuVnRjdz09IElHMXZjbkJvIElDTWpJeU1qSXlNaiBJRU5IVUc5cGJuUT0gUEhWdWMybG5ibVZrIDVMNkwgSUVSMWEyVT0gTG5ObGRFSnZkVzVrY3c9PSBjWE09IGIzSnBZdz09IGFtVnkgSUhKbFoyRnlaR1ZrIFNIUjBjRkpsY1hWbGMzUT0gSUdKdmJtUnogSUhSb2IzSnZkV2RvYkhrPSBaVzVqWlc1MCBJR2hwWjJoc2FXZG9kR1ZrIElHRmpjbVZ6IElIZHZjbXR3YkdGalpRPT0gSUV4MWVBPT0gSUhGMWIzUT0gT1RnMiBMbWx1Wm14aGRHVT0gSUdSdlkzVnRaVzUwWldRPSBJR0ZrWkdsamRHbHZiZz09IElHMTFkR0YwYVc5dSBMbU5wZEhrPSBJR0p2ZEhSc1pYTT0gSUZKbGNHOXphWFJ2Y25rPSBiMjV1IFpYSnlibTg9IFFWSkpRVUpNUlE9PSA1YnFtIFgwSkZSMGxPIFoyeGhjdz09IEozMHBDZz09IElFMWhjM05oWjJVPSBJRmRvYVhRPSBjbVZuWlhnPSBWMEU9IElHOTFkR3hsZEE9PSBMV2hsWVdRPSBJR1Y0Y0dseVpXUT0gSUZSb1lXaz0gTDJsdVkyeDFaR1U9IFozSmhaR2xsYm5RPSBjMk5oYm1ZPSBJSE5sWVcwPSBkMkZzIENXSjFaZz09IFFtVmhjbVZ5IElIQnlaV05wYjNWeiBhV1poWTNSeiBZMjl2Y21RPSBJR1Y0Y0d4dmNtRjBhVzl1IExtZGxkRms9IEtHaGhibVJzWlE9PSBWRzl3YVdNPSBJRlpsYm5RPSBjbWh6IExTMHRMUzB0Q2c9PSBJRUp5YVdkb2RBPT0gSUdkMWFXeGsgYlc5MGFHVnkgYzNSdmNtMD0gSUcxMWJtbGphWEJoYkE9PSBJR2x1YXc9PSBMbFJaVUVVPSBkMnc9IExpNHVQQzg9IFgwUkZWZz09IFBTSXVMdz09IFgySnZiMnM9IGRHaDUgYVhSNlpYSnNZVzVrIGIzQnNaWE09IGRISmhZM1JwYjI0PSBJRU5oYldWeWIyND0gSUVGdVpISmwgTG5KbGMzVnNkSE09IElHTm9jbTl0WlE9PSBJSE5sWTNWeVpXUT0gSUhOMWNtWmhZMlZ6IEtUdz0gSUhSdlltRmpZMjg9IENYTndjbWx1ZEdZPSBJR1Z6WTJGcyBJSE4wWkdWeWNnPT0gSUUxbGJHSnZkWEp1WlE9PSBJR1JwYzNSeWFXTjBjdz09IElHMWhkSFE9IGIyaGxiZz09IElHUmhkR0ZIY21sa1ZtbGxkME5sYkd4VGRIbHNaUT09IEtFMXZaR1ZzIElITmxibk5wZEdsMmFYUjUgUzBFPSBkSEpoYm5Od2IzSjAgTG1kbGRFUmhkR1U9IElITjFZblJzWlE9PSBWVWRKVGc9PSBMbTF2ZFhObCBJR0ZzZEdWeWJtRjBhWFpsY3c9PSBJR1ZzYkdVPSBZMjl5WVhScGIyND0gY21WaGRHbHZiZz09IDVwcz0gWDA1UFVrMUJUQT09IFJHbHpjR3hoZVU1aGJXVT0gSUdaaGJtTjUgU1ZORlJBPT0gVFU5RSBMbEpsWVdSUGJteDUgSUZWaSBJRU4xIGFXTnZiQT09IElFNWxiSE52Ymc9PSBJRU5QVWc9PSBZVzU2WVE9PSBJRk53WVhKciBJQ0pjWEE9PSBMUzBLQ2c9PSBkMjl2WTI5dGJXVnlZMlU9IElISmxiV1Z0WW1WeVpXUT0gZG1WeWFYUjUgSUVWNGRHVnVjMmx2Ymc9PSBJRkJFIElITmxZWEpqYUdWeiBMbk52IElFWnZiM1JsY2c9PSBJRDBuIElGZEJVazVKVGtjPSBMV3h2IENYUmhZbXhsIElHUnlZWGRsY2c9PSBjR2xqZEhWeVpRPT0gSUVaaGJuUmhjM2s9IGMzUnZjbms9IElHM0RxbTFsIEl3b0sgWDNOc2FXTmwgYjJ4MFlXZGwgU0dGeSBMM2s9IElFVlMgWkdsbCBJRkJQVXc9PSBMbUZqZEdsdmJuTT0gS0UxaGFXND0gWlhkaGNuUT0gWVhCbGRYUT0gSUZOVVJRPT0gYVdSa2FXNW4gTG5KbFlXUk1hVzVsIElITmxZWEpqYUdWayBWMlZrIExtWnBaM1Z5WlE9PSBkV2RvZEdWeWN3PT0gS0NrdVgxOD0gSUc5eVltbDAgYzJocGNIQnBibWM9IElHWnlhV1Z1WkhOb2FYQT0gSUZOb2FXWjAgTFc5eSBjWFZ2IFYwaEZVa1U9IElFVnpjQT09IExtWnZjbmRoY21RPSBiMlptYVdObCBJR25EcHc9PSBJRU5vWld4elpXRT0gU1hSbGJWTmxiR1ZqZEdWayBZV05vWlhKeiBaR1ZzWlhSbFpBPT0gY205MWN3PT0gSUNJdElnPT0gSUVkeVlXND0gSVBDZm1BPT0gTFhCdmQyVnkgWlhSMFlRPT0gSUhKbGJXbHVaR1Z5IFpXNXpiM0p6IElFRnNiRzkzIHhKbGsgWDNSbFlXMD0gSUdOeWIzZHUgZEdsamEyVjAgSUdOdmJHeGxZM1JwYjI1V2FXVjMgYkdGalpRPT0gSUdacGVHVnogSUVoMVlnPT0gWTJGMFlXeHZadz09IElFbGtaVzUwYVhSNSBJR1Y0WTJWemMybDJaUT09IElFNWhkbWxuWVhSdmNnPT0gWDBKUyBMWEJzWVhrPSBJRU5oYlhCaGFXZHUgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDZz09IFlYTnBkbVU9IElIZGogSUVKbGFXcHBibWM9IEwzZDNkdz09IElHMWhhMlYxY0E9PSBJR1JwYzNSaGJtTmxjdz09IElITmhkR2x6Wm5rPSBRMDlPUkE9PSBJSGR2ZFc1ayBLQ2xkIElIWnBiMnhoZEdsdmJuTT0gSUhOMFlYbHogTHlNPSBhV3hwYm1VPSBYRVY0WTJWd2RHbHZiZz09IElFMXZkR2x2Ymc9PSBJR2hsWVd3PSBYM0JzWVc0PSBjbUZ6WlhNPSBLRzFoYVc0PSBRWEJ3YkdVPSBJR052YlhCc1pYUnBibWM9IElHUmxkR1Z5YldsdVpYTT0gVTJOaGJnPT0gSUhOMFpXRnMgSUZOdll3PT0gUVc1aGJIbHphWE09IElHWmhkbTl5YVhSbGN3PT0gSUdOaGJYQnYgYjI1bGNnPT0gSUVac2FXZG9kQT09IExpNHVDZ29LQ2c9PSBLU2twS1NrN0NnPT0gTFdOdmRXNTAgSUhCMyBRWE5UZEhKcGJtYz0gSUhObGVIVmhiR3g1IFJtbHljM1JPWVcxbCBJRVZ6WTI5eWRBPT0gWTJGc1l3PT0gSUZkcGEybHdaV1JwWVE9PSBJR1J2WTJ0bGNnPT0gSUZOM1pXVjAgSjJsayBTVzUwYnc9PSBJRWgxYm5RPSBMbVZ4ZFdGc1ZHOD0gSUd4aFltOXlZWFJ2Y25rPSBJRUpWVTBsT1JWTlQgUm1sc1pVUnBZV3h2Wnc9PSBWSEpsWlU1dlpHVT0gTGtWdVl3PT0gSUUxaGVHbHRkVzA9IElHMXZkR2hsY25NPSA1clU9IElHWnlZV04wIExuTjBZWEowYzFkcGRHZz0gSUdoaGNtUmpiM0psIExtOWkgNWFlTCBJRDQ4THc9PSBYM0p2IEtDZ3EgUHo4L1B3PT0gWDNabGNuUmxlQT09IGEyVnBkQT09IElFaGhiR3h2ZDJWbGJnPT0gVkVrPSBJRlpoIFgyTmhjZz09IFBTSjdleVE9IElISmhibVJ2Yld4NSAwTERRdmRDNDBMVT0gSUhOb2IyTnJaV1E9IElGQnZhOE9wYlc5dSBjMmxuYm1GcyBJRk5FU3c9PSBiV2xrWkd4bGQyRnlaUT09IElIUnlaV0YwYVc1biBJR0oxY201bFpBPT0gUkdWd1lYSjBiV1Z1ZEE9PSBJRk53WldOMCBJR05zYVdWdWRHVT0gSUZKbFpHUnBkQT09IFgyRjJadz09IElHbHVjM1JoYkd4cGJtYz0gWDJGc2NHaGggTEdSaGRHRT0gSUhObGRFbGsgSUV4cGMzUldhV1YzIEtIQnliM0JsY25SNSBJR055YjNOemFXNW4gSUU5aWFnPT0gSUZkaGNtUT0gSUZKbFpHbHlaV04wVkc4PSBJRkJ5WlhObGJuUT0gSUdSeVlYZHogWTJobFpIVnNaV1E9IElHeGxaMmx6YkdGMGFYWmwgSUhSM2FYTjAgSUZOMGNtRT0gSUVGR1VBPT0gSUVOb1lYQT0gTFhCeSBPa05IVW1WamRBPT0gSUdObGN3PT0gVW05MWRHVnogYm05bSBJSFpwYzJFPSBJRlJEVUE9PSBJRVZXUlU0PSBhWFpwWVd3PSBJRXhsZEhSbGNnPT0gVWtGWiBJR2x0Y0d4dlpHVT0gTG1WeCBQU2NyIElHMXZkR2wyWVhSbFpBPT0gTG5acGMybGliR1U9IExuTm9iM0owIFBtMWhiblZoYkE9PSBJRlJsWTJodWFXTmhiQT09IElHTnZjbkJ2Y21GMGFXOXUgSUVoWCBZVzVyWVE9PSBWRUZKVEE9PSBhWE4wWVhNPSBJSEJsY21admNtMXogSUVKbGFHRjJhVzl5IExrWnZjZz09IFgwOVNSRVZTIElFdHBZMnM9IElHTmhiR3hpWVdOcmN3PT0gWDJSeSBkV1ZuYnc9PSBhSFZpIGRXWm1hV05wWlc1MCBjMnQ1IElHSncgYUhSaFlteGwgSUU5T1RGaz0gSUVGVlZFaFBVbE09IExrRnlaM1Z0Wlc1MCBJbjA3Q2c9PSBJRlJvZFc1a1pYST0gSUV0dmJRPT0gTGxOb2IzVnNaQT09IFFWVlVTQT09IFlXaDEgWDNCaGVXMWxiblE9IElITjBZWEowWlhJPSA3SVNjIDdKcXAgUW14dlp3PT0gTG5CaGRHTm8gSUdkdmRtVnlibVZrIFlYTnplUT09IExXWnZkVzVrIElIUm9aV0YwWlhJPSBJRVp2Ym5SWFpXbG5hSFE9IElFSmhkRzFoYmc9PSBJa2xtIExsSmhibVJ2YlE9PSBYMlJsYkhSaCBJRU5GIFFYVjBhR1Z1ZEdsallYUmxaQT09IElHUnliMjVsIElHTnZkWE09IGNtRmthWFZ6IFRXVnkgS0U1dmJtVT0gSUU1SyBYMmhsWVdSbGNuTT0gSUdGdFpYST0gY0hsMFpYTjAgSUVGamRHbHZibk09IENRa0pJQ0FnSUE9PSBJR1YwZEE9PSBJR2h2YkhrPSBJSFZ1WTI5dFptOXlkQT09IElFNXBiZz09IElFUmxZMmx0WVd3PSBJRTFsYzNOaFoyVnogTG5ObGJtUmxjZz09IFhWMHBDZz09IElHVnRZbkpoWTJVPSBWR2h2ZFdkbyBMM053IElHTjFiSFIxY21WeiBJR2hwWjJoM1lYaz0gZEdGeSBMbVpoYVd3PSBYMmhwWkdSbGJnPT0gSUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwIElGZHlhV2RvZEE9PSBJR3BoWnc9PSBYMmxzIExpNHZMaTR2TGk0diBhV2QxIFJtOXZaQT09IElHRmpaUT09IElHSERzVzl6IFZWTkUgSUcxMWRIVmhiQT09IFRHOW5hV009IElIUmxiWEJzWlE9PSBJR0p5YVdWbWJIaz0gSUZSeWFYQT0gWTJ4aGMzTnRaWFJvYjJRPSBaR1ZtWVhWc2RITT0gSUdOb2RXNXJjdz09IExDd3NMQT09IElGSmxZWE52Ymc9PSBKR2xrIExYVndjdz09IElHUmhiVzQ9IElIUnlkV05yY3c9PSBJSFZ1YkdsdGFYUmxaQT09IElITmpkV3h3ZEE9PSBJRU5oY21SeiBJR0YxZEc5eSBJRlJsYzNScGJtYz0gSUdScFpYTmwgYzJodmNITT0gNTdRPSBLSEJoZVd4dllXUT0gSUZCQlZFZz0gSUUxbGJXOXlhV0ZzIElISnBaR2xqZFd4dmRYTT0gWldkeVpXVT0gTFhkcGJtNXBibWM9IElISmxhR0ZpIElITnZjR2hwYzNScFkyRjBaV1E9IGQzQmtZZz09IENYQmhkR2c9IElTSTdDZz09IFgxTlpVdz09IExuTndaV1ZrIElITnZZWEE9IGMzVm1abWw0IFYzSmhjQT09IElHVnVhR0Z1WTJWdFpXNTAgdzRrPSB3N3BpIElIQnNZWGxzYVhOMCBJRzFwZUdsdVp3PT0gWVc1MGFXUmhaQT09IFBTSWlPd289IElGSmxkbWx6YVc5dSBJRUpsWVhRPSBMbWx1WXc9PSBMWGRoZVE9PSBaVzVqYVdGeiBkV3hsY25NPSBRMkYwIGFXUmxiQT09IElGTm9hWEE9IExuTmxkRU52Ykc5eSBJSFJvY21WaGRHVnVhVzVuIExtMXZaSFZzWlhNPSBJR0ZtZEdWeWQyRnlaSE09IElFUmhjMmhpYjJGeVpBPT0gQ2lBSyBVMmxuYm1GcyBJSEJ5YVcxbGNnPT0gYjNKdVpYbHogYVdOcFlYSjUgSUd4cFoyNWwgWDNCeVpXUnBZM1E9IElHRmxjM1E9IFgyaDBkSEJ6IFBqbz0gSUV4bGVBPT0gSUhKbGJtTnZiblJ5WlhNPSBaV2R5WVd3PSBjMk5oYkdFPSBYMlpoYldsc2VRPT0gdzU5bGJnPT0gWDNONWJRPT0gSUhWdVkyVnlkR0ZwYm5SNSBJRlpCVEZWRiBJSDA3RFFvTkNnPT0gSUdKeWIyRmtaWEk9IElHaHZjbk5sY3c9PSA0NEdkIElFdGhiQT09IGIySmggWDBsT1JWUT0gSUV0cGJHdz0gYW5GMVpYSjUgWVcxcGJtRjBhVzl1IFcwQWkgSUcxMWFnPT0gSXlNakNnPT0gUm1seWMzUlBja1JsWm1GMWJIUT0gZEdobGJsSmxkSFZ5Ymc9PSBRMmhsIEwyWnZiM1JsY2c9PSBJSEJoY210eiBZWE5xWlE9PSBJRWQxYkdZPSBJRzF2WkdWemRBPT0gTGtsdWFYUT0gNzd5ZkNnbz0gSUhCeWIzTndaV04wY3c9PSBJSE4yWnc9PSBJT1dQIExrUnBZV3h2Wnc9PSBYMDVGVkE9PSBJQ2dvSkE9PSBJR1ZyIElGZGhjbTVwYm1jPSBJRTFMIFBFeE4gSUNjTkNnPT0gYVdWdCBhR1YwYVdNPSBJR2w0IGRHaHBibXM9IExYTm9ZV1J2ZHc9PSBJRVZzWkE9PSBJRTVsZG1Ga1lRPT0gSUV4bFlXWT0gSUVkU1QxVlEgSUhCeWIyMXYgWlc1MGFXNWwgQ1UxaGNBPT0gSUUxdlpHVnNjdz09IElFdHlhWE4wIFgydGxjbTVsYkE9PSBMVzFoWkdVPSBJR05sY25JPSBRWE56WlhSeiBaV3hzWVhJPSBJR2x1ZG05clpXUT0gTG5aMVpRPT0gSUdOMWJIUnBkZz09IFEyeHZjMlZrIElHZGxibVZ5WVhSbGN3PT0gWm1abVptWm0gZEdobGMybDZaUT09IGMzRnlkQT09IElFTmhjM1JzWlE9PSBMbU5oY2c9PSBJR3RsWlc0PSBkVzVrWVE9PSBJRU55YjNjPSBJRk5wYm1kbyBlWFJvYjI0PSBJR0psWVc1eiBiR0Z5Wnc9PSA1cGFINUx1MiBRWGRsYzI5dFpRPT0gZFc1allYUmwgVUdGMGFITT0gYjJwcCBLR04xY25JPSBRMDlPUkZNPSBJRzFwYlE9PSBJSE5vYjNWc1pHVnljdz09IFNHRnlaQT09IFlYTjBaWE09IDBMRFF0ZEdDIElHTnZiblpwYm1ObCBaR1ZqWlhOeiBiV0ZrWlE9PSBJRU5OUkE9PSBMa2x0IElHTm9ZVzl6IFpXNXphWFpsYkhrPSBJR052YjJ4cGJtYz0gSUdKMWNtbGxaQT09IEtDZEEgWDFObCBDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRPT0gTG1OdmJYQmhibms9IExuTjFZbTFwZEE9PSBjR2hoYm5RPSBJR0p2YjNSemRISmhjQT09IFgyaGxiSEE9IDRLYz0gTG1SMWJYQT0gSUdScFptVnkgWDIxaGNIQnBibWM9IElHTnBjbU4xYkdGeSBJR1Z6WTI5eWRITT0gSUdKbGNtVT0gSUdkeVlXUjEgSUV4bFoyVnVaQT09IGFXMWxaR2xoIElFSmhjbU5sYkc5dVlRPT0gSUdKbFpITT0gNVlpdyA0NENLIFgzWnZiSFZ0WlE9PSBJSFJ5WlcxbGJtUnZkWE09IElITmpZV3hwYm1jPSBJSEJwYm5NPSBaVzVoY3c9PSBkSGx3WlhCaGNtRnQgUkdGemFHSnZZWEprIGNtVnVaR1Z5WlhJPSBJSE53YVE9PSBJQ1lrIElGTnJhVzQ9IFlXeHRZWEowIElHaHZZMnRsZVE9PSBJQ2NpTGlRPSBJR1Z5Y201diBJR0psZHc9PSBSbTlzYkc5M2FXNW4gTGsxdlpIVnNaUT09IFpYSmhZbXhsIElFMXBiR2wwWVhKNSBJRkpwYnc9PSBYMkYyWVdsc1lXSnNaUT09IElGTjFjbVpoWTJVPSBJSE4wWVdJPSBTVVpKUlZJPSBJRXhKVTFRPSBJR1JoYzJoaWIyRnlaQT09IElHTnNkWE4wWlhKeiBMbkJzZFdkcGJnPT0gSUdwdmRRPT0gSUVSbFkyOXkgUm05MWNnPT0gSUdSbGJHeGwgS2lvcUtpb3FMd289IGFXRjYgYVc1a1pRPT0gWTJocGJtYz0gSUdkbGRFbDBaVzA9IExrRmtaSEpsYzNNPSBiV1Z1ZEdWayBRVzFsY21saiBVR3hoYVc0PSBJSFZ6WWc9PSBJRkJ5WVdOMGFXTmwgWDIxbGJuUT0gTG1Kc2RXVT0gU0dsdWRBPT0gMFlEUXNOQ3kgSUdOdmJtNWxZM1J2Y2c9PSBJR2x1YUdWeWFYUmxaQT09IDBMalFzZz09IElHbHVkR1Z5ZG1Gc2N3PT0gSUdObGNtVT0gSUhWayBJR2x1WTI5dSBMa1Y0YVhOMGN3PT0gSUUxcFl3PT0gUmtzPSBLR05oY21RPSBMbE5sZEhScGJtZHogSUdWNGFHbGlhWFJwYjI0PSBJRzl1VUhKbGMzTmxaQT09IElISmxjM1J2Y21WayBaVzVuZFE9PSBMbVJsWmc9PSBJSEpsWTNZPSBMaUlwT3cwSyBaVzVqYjJSbGNnPT0gWVhSb1pYSnBibVU9IEtHUmxjM1E9IFlYcGxaQT09IEkyVnVaSEpsWjJsdmJnPT0gYzJWdFltdz0gTEUwPSBiMko1IElOQy8wTFhSZ0E9PSBMa05oYkd3PSBJR0YwZEdWdVpHRnVZMlU9IExXSnZjbVJsY2c9PSBJR0ZrWkhKbGMzTnBibWM9IHc2cHUgSUV4bGRnPT0gSUdKaGMyZz0gWW1WdVkyZz0gUTNKbFpHVnVkR2xoYkhNPSBVM0JoWTJsdVp3PT0gS0c5bSBYMUpGVTBWVSBhV2QxYjNWeiBJR055ZFdWcyBJR055YjNOelpXUT0gSUd4bGRYST0gSUVkdmJHWT0gYjNKeVpXTjAgSUhCaFkydGxkSE09IElFUmhkR0ZUWlhRPSBJSEJoY25Sc2VRPT0gVTBWUlZVVk9WRWxCVEE9PSBJR2x1WkdsallYUnBiMjQ9IElGTmhiSFE9IFlXTnBZUT09IElDb3BPd289IENXbHVabTg9IElGWnBaWGRDWVdjPSBiMjU2IElHVmthWFJ2Y21saGJBPT0gSUVGeVpXNWggSUhOcGNnPT0gWDFOMFlYUnBZdz09IEtITnZZMnRsZEE9PSBjM1U9IFkyaHZiM05sIExtMXZiblJvIExrMTUgTURrMiB3Nmx5YVE9PSBPMlp2Ym5RPSBaRzlsY3c9PSBJR052Ym5abGNuUmxjZz09IElITmhiSFk9IElHeHkgSUdsdVpteDFaVzVqWldRPSBLR1psWVhSMWNtVT0gSUZGMVpXVnVjdz09IGJHVjBkQT09IFgwMVBUZz09IEptRnRjQT09IFZHOTFZMmhoWW14bFQzQmhZMmwwZVE9PSBUMFpHIElHMWxkR0ZpYjJ3PSBLR2wwWlhJPSBJSFpwZEdGdGFXND0gSUVsT1JFbFNSVU5VIFlYVjBiMjA9IFgzQjFZbXhwWXc9PSBJR0ZrYW5WemRHMWxiblE9IElITndaV05wWVd4cGVtVmsgZDJsdVpHOTNjdz09IExtRmtaRUZzYkE9PSBJR0ZqWTI5eVpHbHVaMng1IElFcFBjSFJwYjI1UVlXNWwgSUdObGJHeHpjR0ZqYVc1biBJSEYxWVdRPSBJR055WldWdyBJRzkxZEd4bGRITT0gZldBcENnPT0gSUhCeWFXVnpkQT09IFgxUklVa1ZCUkE9PSBJRTFoY25nPSBJRUo1Vm1GcyBJR04xWVd3PSA2WjJpIElIUmxiWEJ2Y21GeWFXeDUgUVc1dSBhMlZzWlhSdmJnPT0gNWFVPSBJRXhQUXc9PSBZWFZsY2c9PSBaR1Z5YVhabCBJR0psYUdGMmFXOXljdz09IFlYTmxibUZ0WlE9PSBJRU5sYm5SMWNuaz0gSUdodmNuSnBZbXhsIFRVVlRVdz09IFgweHBjM1E9IGQyVnAgVUdGMCBJRU5vYjJsalpRPT0gWDBaU1QwMD0gQ1d4cGJtVT0gTG1sdWRtOXJaUT09IExrSnZkSFJ2YlE9PSBJRzV2ZDJobGNtVT0gTGlJS0Nnb0sgWDJWNGNHOXlkQT09IElITjBjblZuWjJ4bFpBPT0gTGtGd2NHVmhjbUZ1WTJVPSBJRXBDZFhSMGIyND0gSUVwbGNtVnRlUT09IEtGdGIgSUd0cFkydGxaQT09IGJXRnljMmhoYkE9PSBjM1JoWm1ZPSBaWE5wZEhrPSBJSEYxYVhvPSBYMlZtWm1WamRBPT0gSUgwcEtUc0tDZz09IGJXVnMgWW1GdWJtVnkgSUZCSlRnPT0gSUdsdWRtVnVkR2x2Ymc9PSBJR052Ym5OdmJHbGsgSUc5d2N3PT0gSUVKbGRIZGxaVzQ9IGFtRmphdz09IFpYSnVZWFJwYjI1aGJBPT0gSUhOaFkzSnBabWxqWlE9PSBZV2RoZEdsdmJnPT0gSUVwdmVRPT0gSUdGdFpXNWtiV1Z1ZEE9PSBJRk52YkdRPSBJSEJ5YVhOdmJtVnljdz09IDBMRFF2ZEM5MFlzPSBSRzlqZFcxbGJuUnogS1YwcENnPT0gZFhOMFpXUT0gSUV4cGJtVmhja3hoZVc5MWRBPT0gYjNOdiBYMFZOIExuTmxiR1k9IExrMXBaR1JzWlE9PSBLUzh2IElGd24gSUdaMVkydGxaQT09IElFMTFjbkpoZVE9PSBJSEJ5YjJadmRXNWsgWDBWTVJVMUZUbFE9IGRXeDBZUT09IGFXeGxjbk09IGNHOXlkR1p2YkdsdiBTblZ1WlE9PSBkR053IGJXOWthV1pwWldRPSBJRlJ5WVdObCBJRXRsYkE9PSBZV3g1ZW1WeSBLVDArIElGSmxjR0ZwY2c9PSBYMEpGIFFuSmhibVE9IGRXRnlkQT09IGNISmxkbWxsZHc9PSBJR2x1YVhScFlYUnBkbVZ6IGNuVnVibWx1Wnc9PSBZbUZ1Wnc9PSBDWFZ3WkdGMFpRPT0gSUVOdllXTm8gVW1samFBPT0gSUhsdmRYUjFZbVU9IElISnBkSFZoYkE9PSBZWEJ3WVE9PSBJRkp2WW1sdWMyOXUgY0hKbFkybHphVzl1IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMdz09IFBWdGRDZz09IElHTmxiR1ZpY21GMFpXUT0gVDFSUCBJR2x1WTJ4MWMybHZiZz09IFNsQT0gSnpzTkNnMEsgSUc1dmRHRmliR1U9IEtGOHUgVFdGdVlXZGxaQT09IElHZDFhV1JsY3c9PSBKbTVpYzNBPSBZWFJsWkZKdmRYUmwgSUVGa2FuVnpkQT09IElHTnZiRzl5WldRPSBYM05qYjNKbGN3PT0gSUZSbGMyeGggWDNCeWIyZHlaWE56IExtbHVjM1E9IFd5ZGYgTG1ac1lXZHogSUdaamJHOXpaUT09IFgwOVFSVkk9IHhieDUgWDI1dmRHVT0gSUhSeVlXNXpaMlZ1WkdWeSA1WlU9IFVrbFFWQT09IElHRmljMlZ1ZEE9PSBJR0Z0WlhRPSBJRzl3WlhKaGJtUT0gNjZrPSBJR2h2YjJRPSBkRzlNYjNkbGNrTmhjMlU9IFlYWnYgSUVOcGNtTjFhWFE9IElFeHBibVE9IExTMTlmUW89IFBXMD0gSUhOMWNIQnlaWE56IElFMUJVQT09IGFXRnVadz09IExXRmtiV2x1IElITnBaR1ZpWVhJPSBJRUoxIElFaGxlQT09IExFWT0gSUZOcFoyNWhiQT09IElIUnlZVzV6Y0dGeVpXNWplUT09IElFWmxaR1Z5WVhScGIyND0gTDFZPSBVbVZ4IElIQjFiSE5sIElIUmxibVJ6IFRuVnRZbVZ5Y3c9PSBKU2M9IElHUmxjRzl5ZEE9PSBaR0YwWVhNPSBYMVZKVGxRPSBYM1J5WVE9PSBiMnR2IElDSS8gWTI5dGNHVjAgYzI5c1pYUmwgZFc1a2Nuaz0gSUc5MlpYSnNZWEE9IGZXQXNDZz09IExteDUgWDNOMWJXMWhjbms9IElFeHZjM1E9IExrTmxiblJsY2c9PSBJR1JwYzJGaWFXeHBkSGs9IExsTmxjbWxoYkdsNllYUnBiMjQ9IElHZGxiMjA9IElEODYgSUZkdiBJSE5vYVhCd1pXUT0gZ3VhVnNBPT0gSUhWbmJIaz0gSUdWNFkybDBaVzFsYm5RPSBJR1Y0ZEdWeWFXOXkgSUdOb1pXTnJiM1YwIElHdDFjZz09IExFUT0gSUVGc1lYTnJZUT09IElITjViblJvWlhScFl3PT0gSUVKMVpHZGxkQT09IElGTjFZbk5qY21saVpRPT0gSUNZSyB5SmxwIElGbDEgQ1hGMVpYSjUgZlM0SyBJSFJ5WVdkbFpBPT0gWVhOelpXND0gSUdGalkyOXRiVzlrWVhScGIyND0gSUhCb2VYTnBZMmxoYmc9PSBJSEpsYm1GdFpXUT0gSUhScFpHRnIgZXNTRiBJRzFwYm5WeiBibmxqYUE9PSBNRGszIFgwVllRMFZRVkVsUFRnPT0gZEdoeVpXRmtjdz09IElIUnBjbVU9IFgyTnlaV0YwWldRPSBaVzV6ZFhKbCBJSGR2Y25Sb2VRPT0gSUdWNFkzVnpaUT09IElHTnNiM1JvIExuQmhjbVZ1ZEU1dlpHVT0gTDNCc1lYUm1iM0p0IElGVkdRdz09IElFZDBhdz09IGRXNXVlUT09IElHZHBZblE9IGEyVnNaWGs9IGFIVnQgS0hSNCBDV1JsZGc9PSBJRzkxZEdacGRBPT0gWkc5dmNuTT0gSUdadmJnPT0gYVdOMWRBPT0gZG05c1lYUnBiR1U9IElHaHZiVzl6WlhnPSBUV0Y0YVcxMWJRPT0gSUdWNGNHVnVaQT09IElIMHBPd29LQ2c9PSBSWEU9IGIyNWtaWEp6IFpHVndZWEowYldWdWRBPT0gSUZCb2VYTnBZM009IEluMHBPd289IElIQmhjbUZrIExsTjBjZz09IElITmxiR1U9IFNVWkpSVVE9IElHUmxiR2wyWlhKeiBhWFpoYmc9PSBJSEpsYzNCdmJuTnBZbWxzYVhScFpYTT0gSUdGa2RtOWpZWFJsY3c9PSA2TFU9IElGSkpSQT09IExuQmhjbUZ0WlhSbGNuTT0gVFdWMGNtbGpjdz09IGNtOXVhV056IElGVkpWR0ZpYkdWV2FXVjNRMlZzYkE9PSBRV0p6YjJ4MWRHVT0gYVhCelpRPT0gZVd4MWJRPT0gVFV4RmJHVnRaVzUwIFgxWkJURWxFIFBIUnBkR3hsIFJHeG4gY0dGalpYTT0gSUhONWJtUnliMjFsIFltVmhibk09IFgyUmhkR0ZpWVhObCBiM3BwYkd4aCBJRTFsWnc9PSBSRUpIIElHeDFZZz09IFFtRm5RMjl1YzNSeVlXbHVkSE09IFlXSmhaQT09IElIQnliMnBsWTNSbFpBPT0gWDBKWlZFVT0gTGxOcGVtVkcgYzNSeVpXVjAgQ2dvS0Nnb0tDZ29LQ2c9PSBJRXhQVTFNPSBJR1JwY21WamRHOXljdz09IEwyNWxkM009IElHNTFjbk5wYm1jPSBJRVJ2Ym1VPSBMa2hVVkZBPSBaR2x6WTI5MWJuUT0gSUZKdmRBPT0gVkc5TllXNTUgSUdWdVlXSnNhVzVuIElHRjFjM05wIGIzTjBZUT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUEwSyA2TDI5IElHaGxiR2xqYjNCMCBJRWx1YzJsa1pRPT0gNUwraDVvR3YgYVhOd1pYST0gSUVGc2JHRm8gUVZKRFNFRlMgSUhKdmJHeHogUTI5dGNHRnlaUT09IFdGQT0gU1c1a1pYaFBaZz09IFUxVk4gSUdGemMzVnlaV1E9IElGQm9lWE5wWTJGcyBSVzVrY0c5cGJuUT0gTGtkc2IySmhiQT09IExtUmxkR0ZwYkE9PSBJSFJvWldaMCBMbXAxY0dsMFpYST0gSUdoMWJXOXkgTGxKbGJtUmxjZz09IFFXeGxlQT09IExtTmhjQT09IElHSjFabVpsY25NPSBJR1JwYzNCdmMyVT0gZEdsdmJnPT0gTG5CeVpYTmxiblE9IGVtVnMgTEZBPSBJR1JsYzNCbGNtRjBaUT09IExtZGxkRU52YkhWdGJnPT0gSUhSM2FXND0gN0pZPSBMbU5oYmc9PSBJR1pzWldVPSBJRWx5WVc1cFlXND0gSUhOMGFXTnJlUT09IElGVlVRdz09IFRGUT0gTHk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4diBJR3hwWTJWdWMybHVadz09IFgxQlBTVTVVIElFMWhjSE09IElHeHZiQT09IFBXMXZaR1ZzY3c9PSBMWFJoWWc9PSBJRTVoYzJnPSBYMnh2WjJkbGNnPT0gZEc5eVkyZz0gSUVOUFRsTkZVVlZGVGxSSlFVdz0gVG05MFJXMXdkSGs9IEwzSmxZV04wIElIQm0gSUdGemMyVnlkR2x2Ymc9PSBJSE4xWW5ObGNYVmxiblJzZVE9PSBYMk5oYmc9PSBJSEJoYm1SbGJXbGogYjJkMVpRPT0gSWlzSyBYMlZ1ZEE9PSBYMUJoY21GdCBMZ29LQ2dvS0Nnb0sgVW1WelpXRnlZMmc9IFEyRndkSFZ5WlE9PSBJR0psYkc5MlpXUT0gWkdWdCBJR1Y0ZEhKaFkzUmxaQT09IElHWnBaMmgwY3c9PSBSVkpEIEtHRjFkR2c9IGNHOXphWFJwYjI1eiBJSEpsZG1WeWMyVmsgS0hOMFlXTnIgSUY4cCBkWFJ2Wm1ZPSBYMlpzYjNjPSA1NEs1IEtFZGhiV1U9IElHVjRZMngxWkdWayBJRU5UVmc9PSBZMmM9IElGUnBkR0Z1IGNHRjFjMlU9IElHTmxjbU5oIElHUjFiWEJ6ZEdWeSBUR1Z6Y3c9PSBJR3R2ZEd4cGJuZz0gWVhOMFpYSjRiV3c9IElIQnZhVzUwWlhKeiBJR1pzYjNkeiBJRlIxYmc9PSBJRTFoYVc1QlkzUnBkbWwwZVE9PSBJR1JwYzJOeVpYUT0gSUdOdmJXSnBibUYwYVc5dWN3PT0gZG1semFYUT0gWDJKcGJtUT0gYjI5MGFXNW4gWkdGMFpYST0gWDJ4dmIydDFjQT09IExtNXBidz09IElITjNaV0YwIElGSmsgSUhOamFXVnVkR2x6ZEE9PSBJRkJwZUdWcyBRRTVuVFc5a2RXeGwgVUd4aGVXbHVadz09IElIVnVabTlzWkE9PSBWSEpoYm5Oc1lYUmwgSUV4aGQzSmxibU5sIElFWkpXRTFGIFFtbHNiQT09IElGSkpSMGhVIElIZG9aWEpsZG1WeSBJRzl2YXc9PSBkbWxrWlc1alpRPT0gSUYxZE93PT0gSUZOcmFXeHMgZFc1cGMzUmsgSVBDZm1ZST0gSUdabGJXRnNaWE09IExTMHBDZz09IGpyZmxqNVk9IElFWnlaV1E9IFQzWmxjbUZzYkE9PSAyWUk9IElHVnpjMlZ1WTJVPSBJSFJvWlhKbFluaz0gSUhkdmRXNWtaV1E9IElFUlBWMDQ9IGJHVnpjMjl1IGRHVjRkSFZ5WlE9PSBVbTkxYm1RPSBJR0YxZEc5dFlYUmxaQT09IElOQ2ggSUZWd1pHRjBaWE09IElITm9ZV1JsIGNIVmliR2x6YUE9PSBJRWRsWVhJPSBQV3hoYldKa1lRPT0gSUd4bGRtVnkgS1NzaSBhR2xzYkE9PSBJSEpoWkdGeSBjbmxwYm1jPSBJQ0lwTGc9PSBabWxzYkdWayBJR3hwYm1WMWNBPT0gSUdScyBJSGR2Y210emNHRmpaUT09IFZtOD0gWDJSMCA2N0k9IFgwbDBaVzA9IFRsTlZVa3c9IExuWmxjbWxtZVE9PSBJRWhoZDJGcGFRPT0gUjI5ayBUV0Z5WTJnPSBJRnZpZ0taZCBJSEJsYkc4PSBkWEpwYjNWeiBJRkJwZEhSelluVnlaMmc9IExrbDAgUTJ4bFlXND0gUGx3OFhnPT0gSUdsdmN3PT0gYzI5MWJtUT0gSWwwNyBJR1p5WldWayBjbTkwZEd4bCBJRXh2ZDJWeSBXMk52ZFc1MCA1WjA9IElIQmhiR1U9IElGZGhlVzVsIFpXRnlkR2c9IFgyTmhkR1ZuYjNKcFpYTT0gVlVOTCBMbTFsZEdGa1lYUmggSUhOMWJXMXZiZz09IFNFOU5SUT09IDBMN1F1OUdNMExjPSBJRzFoYm5WbVlXTjBkWEpsWkE9PSBJR1J2WTJzPSBJR052YlhCbGRHbDBiM0p6IFgwMVBSRVZNIGIydHBZUT09IElFaGxlUT09IHpyOD0gSUdKaFkydDNZWEprIElGQlBVMU09IGNtOXdZUT09IElHTnlhUT09IFgwOUNTZz09IFZISmhibk53YjNKMCBMV2hwWjJnPSBJR1Z5YjNScGF3PT0gWDNOc2IzUT0gSUdGeWRHbGogWDJaeVlXMWxkMjl5YXc9PSBMWE5sY21sbSBJRk54YkVSaVZIbHdaUT09IEp5a28gS3lJdiBJSGR2Y21VPSBVMmxzIElITjBiM0pwYm1jPSBJRkJvWVhObCBkV0Z1ZEE9PSBJR0oxYlhBPSBhVzVvYnc9PSBJR1JwWjI0PSBJR0poWTJ0eiBjWEU9IEtHaGhjMmc9IElHZGxidz09IElIUmxibVJsY2c9PSBURzluYnc9PSBJU2tLIElFMVkgSUVGeWRHaDFjZz09IFpYTnpiMkU9IFgwTm8gSUdKbFpISnZiMjF6IFBTSWpJajQ4IElIUm9jbTloZEE9PSBhVzV6YVdNPSBMbWx1ZEdWblpYST0gSUhCeWFXMXBkR2wyWlE9PSBWSEoxZEdoNSBJR1poWTJsc2FYUmhkR1U9IElHTnlaV0YwYVhacGRIaz0gSUVST1V3PT0gSUdkeVlRPT0gZFdWNiBJR052ZFc1MGJHVnpjdz09IElGQnZiR0Z1WkE9PSBKMDA9IElFUnBjM1E9IElIWmxjM1E9IElHTmxjblJwWm1sallYUnBiMjQ9IDRidVIgYUdWc1pBPT0gWlhoMFpXNXphVzl1Y3c9PSBLSE4wWVhScFl3PT0gSUdkeVlXUmxjdz09IElGVmlaWEk9IDQ0R2YgSUZ0ZEtRbz0gWkdGMGIzTT0gSUdkbGRFUmhkR0U9IElFTm9ZWEpuIElFSlQgTG0xcFkzSnZjMjltZEE9PSBMblpwWkdWdiBMbVJwY21WamRHbHZiZz09IExUNTdKdz09IGJIVmggWVhCbGMzUT0gSUdKdmFXeGxjZz09IFpYSmxhdz09IElHUmxZMmxrWlhNPSBMbXBoY2c9PSBTVk5EIElGZHZjbVJ6IEtFTlBUZz09IFJVMVFURUZVUlE9PSBjbVZsZW1VPSBjMmh2ZEhNPSBZWEJ3Y3c9PSBkVzUwWldRPSBMbk5sZEU1aGJXVT0gT2pvOCBMV0p2YkdRPSA2ckk9IDVhK0cgVEc5dVozSnBaMmgwWVhKeWIzYz0gSUhWdVptRnBjZz09IElHVmhjbTVwYm1jPSBJSE5vWld4bSBWVkpGVFVWT1ZBPT0gSUdsa2JHVT0gWDAxRlRsVT0gTGtOMWMzUnZiUT09IFFVZEZVZz09IExTST0gWDNOM2FYUmphQT09IFltVmpZWFZ6WlE9PSBLWFpwWlhjPSBiV0Z5WlE9PSBYMk52Ym1ScGRHbHZiZz09IElGTjBZWEowYVc1biBUWFpqIEtIQnlaUT09IFpIVnRjQT09IFgweFBRMHM9IFlYUmxkR2x0WlE9PSBMbU5oYkd4aVlXTnIgSUVObGNnPT0gYjNCdmJBPT0gYVdKeVlYSjUgSUhKbGMyVnlkbUYwYVc5dSBDUWtKQ1FrSkNRbz0gYkdWamRHOXkgWjNKaFpIVmhkR1U9IElHZGxibVZ5YjNWeiBJR2x2Ymc9PSBjbWxqWVc4PSBiWEU9IFgyTnZiWEJzWlhSbCBLR04xY25OdmNnPT0gSUVadmNtMURiMjUwY205cyBPbU5sYm5SbGNnPT0gSUhOMVluTjBhWFIxZEdVPSBJRkJzWVc1dWFXNW4gSUhCbGJuTnBiMjQ9IElISmxZMjl0YldWdVpHRjBhVzl1IElGUmhaM009IElHZGxaZz09IElHRnNZblZ0Y3c9PSBJSGRoYzJocGJtYz0gY205aiBJSFJ5WVdsdWN3PT0gWVhScGJtZHogSUdWNGNHOXVaVzUwIFlXTnJZbUZ5IExXeHUgdzZGbiBMa1JoZEdGQmJtNXZkR0YwYVc5dWN3PT0gSUVWSlJnPT0gSUUxaGJHRjVjMmxoIENWQlBVbFE9IGIyNTFjdz09IElHTnNaWFpsY2c9PSBJSEJsZFE9PSBQZ29LQ2dvPSBJRUZ5WjNWdFpXNTBjdz09IElHUmxZblZuWjJsdVp3PT0gS0hKcFoyaDAgSjBRPSBZMjl0Y0hWMFpRPT0gSUdacGJtVnpkQT09IFQxSkJSMFU9IElITndaV04wWVdOMWJHRnkgY0doeVlYTmwgSUdsdVpHbGggSUd4bFoyVnVaR0Z5ZVE9PSBZbWx5ZEdnPSBJR052YlhCdmMybDBaUT09IElHZHliM2R6IElGUkUgSUdWd2FXUT0gSUd4aGRXNWphR2x1Wnc9PSBYVjFiIFRXbHVkWFJsY3c9PSBJRU5vWVE9PSBJR05zWldGdVpXUT0gSUhkcGRHNWxjM05sY3c9PSBkV3RoYmc9PSBDVlI1Y0dVPSBJR2hoWW1VPSBjR0Z5WVdkeVlYQm8gSUVwUVlXNWxiQT09IElFaGhibTQ9IElIWmhjbWxsWkE9PSBJRkJ2YTJWdGIyND0gSUUxVlUxUT0gNVlxbyBMblpwYzJsaWFXeHBkSGs9IGIzQjFjQT09IFhscz0gTG1WNGNHRnVaQT09IElDSW5MQT09IExtWmhjM1JsY25odGJBPT0gWDJGMWRHOD0gSUZOb1pXVjAgYldGeWEyVnkgVUdGeVkyVnMgWlhkeiBJRk4wY21GMFpXZDUgTFcxaGEybHVadz09IElIVnVkbVU9IElIUnlZV2xzYVc1biBJR05zYVdOcmN3PT0gSUVkbGRFTnZiWEJ2Ym1WdWRBPT0gQ1dOdmJuUmxiblE9IFNVZEZUa05GIFJWSk9SVXc9IFRsTk5kWFJoWW14bFFYSnlZWGs9IElHSnlaV0YwIElHaGhjbTFtZFd3PSB0b2c9IElHSmxjMmxrWlhNPSBJR0p2Y21sdVp3PT0gSUdKeWRYUmhiQT09IGRtRnVadz09IEtIQmhjbk5sIGNYVnBZMnM9IElIQjVkR1Z6ZEE9PSBJSE4zYVhSamFHbHVadz09IEtDbGRDZz09IElPeUUgVEVWUyBDV1p2Ym5RPSBJRzVsZEhRPSBLVjBLQ2c9PSBLQzljIDVwNmMgZEc5QmNuSmhlUT09IElHSnlaV1ZrIElFTkJVZz09IElGZGxZWEJ2Ymc9PSBRV0p6IGRHOTAgSUhObGRFNWhiV1U9IFlYQjBhWFpsIElEb3MgSUdWelkyRndaV1E9IGIzSmtaVzQ9IElGQnlhUT09IGRHaDFiV0p1WVdscyBJR1JsYzJOeWFYQjBhVzl1Y3c9PSBMM04wZVd4bGN3PT0gSUZCRFNRPT0gSUdGc2NHaGhZbVYwIFlYTjBhV056WldGeVkyZz0gVGs5VVJRPT0gSUdOcFlXeHBjdz09IElFZHlhV1ptIElIQnZjbkYxWlE9PSBJSEJ5YjNSbGFXNXogY0d4aGVYTT0gSUhOMFlYUnBibWM9IElHbHRZV2RwYm1GMGFXOXUgSUdaaFkybGhiQT09IElFMWxZMmhoYmc9PSBJR0Z5Y21GdVoyVmsgWDNWelpXUT0gSUdGeWNtRnVaMlZ0Wlc1MGN3PT0gSUZCcGNHVT0gYUc5emRHNWhiV1U9IElIQnliM1pwYm1NPSBWR2wwIExrWnNZWFJUZEhsc1pRPT0gSUZOd2JHbDAgSUV4dllXUmxjZz09IExtTmogSUdOc2FXNXBZdz09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUdKaGEybHVadz09IElFVk9WQT09IGJtVmhkR2c9IDQ0Q0JDZ289IFFVNUYgTGtWdWRHbDBlVVp5WVcxbGQyOXlhME52Y21VPSBZWEJ3WlhKeiBMbWxqIElFNW5UVzlrZFd4bCBJRVpQVWswPSBJQ2M3IExYQnliMlpwZEE9PSBhSGM9IFpXNWxiWGs9IElFVjVaUT09IElHTmhkWFJwYjI0PSBkRzkzYmc9PSBJSFZ5WjJWayBJRXBwYlcxNSBlVzVqYUhKdmJtOTFjdz09IExYTnBlbVZrIGJXRnJhVzVuIExIcz0gWFNjcyBYMDlpYW1WamRBPT0gWVdodmJXRT0gSUdGamRHbDJhWE4wIFNVNVdRVXc9IElFTnZiVzFsY21OcFlXdz0gSUU5eWJHRnVaRzg9IEtIUmhZZz09IElOaW8gUVd4bmIzSnBkR2h0IElHaGxjbWwwWVdkbCBSMlYwVFdGd2NHbHVadz09IElHWmhhV3gxY21WeiBjbWx2Y3c9PSBZWFJwZG1FPSBJSFJsZEE9PSBJR05oY25CbGRBPT0gS0ZvPSBkR2h5WldVPSBJR1JwYzJOc2IzTjFjbVU9IExrVlNVazlTIFgyTmhiR3hsWkE9PSBJR1JwWVd3PSBJRzlqWTJGemFXOXVZV3c9IExrVnljZz09IElHWjFibU5wYjI0PSBZMkZtWm05c1pBPT0gSUhKbGJHVmhjMmx1Wnc9PSA3N3lKQ2dvPSBYMVpoYkhWbCBJRlpoY21rPSBlV1ZzYkc5MyBJSE4wY25WbloyeGxjdz09IExtTmhiQT09IElFUmhhMjkwWVE9PSBDV05zYjNObCBJSE5oYm1SM2FXTm8gSUdGdVlXeDVkR2xqY3c9PSBJQ29xS1E9PSBKaU09IElFcHZjdz09IElIQmhjM05wZG1VPSBRVlJVVWc9PSBWR2h5YjNkaFlteGwgSUUxMWJnPT0gSUZWcGJuUT0gS0dScGMzQnZjMmx1Wnc9PSBZWEpoYXc9PSBJRXhsWVdSbGNuTT0gSUdGbVptVmpkR2x1Wnc9PSBJR2wwWlcxV2FXVjMgSUdWamIyNXZiV2xqY3c9PSBablk9IDRMbUEgTG5KaSBJRTkyWlhKaGJHdz0gSUhkbFlXeDBhSGs9IElHVjJiMngyWldRPSBibVJoIElFaDFjdz09IGNtVnpkSEpwWTNRPSBkVzFsYmc9PSBJRUZuY21samRXeDAgSVFvS0NnPT0gSUdWNGNHbHlaWE09IElITndiMnRsYzNCbGNuTnZiZz09IGFXNTBaWEoyWVd3PSBJTU9pIElIRjFaV1Z1IEtHNXBiQT09IGFXNW5idz09IFNHVmhjQT09IDJZND0gSUdOdmJYQnNZV2x1IFUzbHQgSUVOc2IyNWwgSUZKMSBJRmRKVEV3PSBJRU55ZVhOMFlXdz0gTDJOdmJuUmxiblE9IGFXNW5aVzQ9IGIybHVkRzFsYm5RPSBUR0Z6ZEU1aGJXVT0gWVhacFkyOXUgSUVsQ1RRPT0gSUVScGJXVnVjMmx2Ymc9PSBZVzVvIGFXTnBjR0Z1ZEhNPSBJRUZ1Ym1VPSBMbkJ5YjJkeVpYTnogSUdGc1oyOD0gYjJKcGJBPT0gSUZadmFXTmwgSUVaRiBJR2RzYVE9PSBJSFpsWkE9PSBJSEJ5WlhabGJuUnogWEVOdmJIVnRiZz09IElHWnZiR3M9IFpYUjBhUT09IElHMXUgSUVOTVFWTlQgSUdScGMzQnNZWGxwYm1jPSBJRXRzIElFWmxjbkk9IFpIVjBidz09IExtbGkgSUdSaFpHOXogSjI1aGJXVT0gTFhOd1lXTmwgSUdsMFlXeHBZVzQ9IElHbHVkbVZ5YzJVPSBJR1JsYm5ObCBkWFJsY2c9PSBJRWxGYm5WdFpYSmhkRzl5IExYTnBaMjQ9IElHNWhkR2x2Ym5kcFpHVT0gSUhCbGNuTnZibUU9IElITnZiSFpsWkE9PSBJR1J5WVcxaGRHbGpZV3hzZVE9PSBURzluYjNWMCBJR2R5WVhZPSBJR0Z1WVd4NWMyVnogYjJ4c2J3PT0gSUd4aGJYQT0gTG5SbFlXMD0gSUVWeWIzUT0gUFZzaSBJR1JoYm1OcGJtYz0gSUQ4K0x3PT0gSUdOaGRHVnkgWm1abCBJRk5vWVE9PSBJRUp2Y3c9PSBJRkpGVVZWSlVrVT0gSUUxdmJuTjBaWEk9IElGSkMgSUVsRVJRPT0gSUhOMWFYUnogSUdadmNtMUVZWFJoIEtIUm9aWFJoIElITndZWFJwWVd3PSBQVTVWVEV3PSBJRk54YkVOdmJtNWxZM1JwYjI0PSBJT0E9IElGWmxibVY2IElFMXZjbTVwYm1jPSBJSEIxWW14cFkyRjBhVzl1Y3c9PSBJRTVQVGtsT1JsSkpUa2RGVFVWT1ZBPT0gWm1seWMzUk9ZVzFsIGRXUnogVjI5MWJHUT0gWDBoRlFVUT0gSUdsdWRtVnpkR1ZrIGMzUmhZbXhsIFpuSmxaQT09IElHTnZiVzFoYm1SbGNnPT0gVTBWVCA0b0NVWVE9PSBZVzVqYUdVPSBJRTF2ZG1WdFpXNTAgNjdNPSBVM1ZwZEdVPSBJR3AxY21selpHbGpkR2x2Ymc9PSA2NmFzIElFSmxkR2c9IGFsRjFaWEo1IElFbHpZUT09IElHUmxiblJoYkE9PSBMQ289IElFeHBiV2wwIGFXeHBZWFJwYjI0PSBQU0o3IFltRnpkQT09IElIUjFjbUk9IGFYTjUgVDA5TCBJR0ZrZG05allYUmwgYVcxaFp3PT0gVEVWRFZFbFBUZz09IDBMdlJqQT09IEtHTmhkR1ZuYjNKNSBMbVJsWXc9PSBJSFZ1YVhGMSBYM051IElHRjBkSEpoWTNSbFpBPT0gSU1PSiBJRkoxYm01cGJtYz0gWDJWa1oyVnogSUVScGMyRmliR1U9IFgwRlQgNVp1KyBJRzVsZEhkdmNtdHBibWM9IFgySnlZVzVqYUE9PSBTR0YyYVc1biBkRzlDWlZSeWRYUm9lUT09IFIwaz0gSUdOaGJYQnogYzJWdyBMWEJoY25RPSBJQ2tLQ2dvS0Nnb0tDZz09IGRYTjBjbUZzYVdFPSBJRkpsY0c5eWRITT0gY21sMGJ3PT0gSUhkaGFYTjAgWDNCc2RYTT0gSUZkWCBMWEJsY25OdmJnPT0gUVhCeWFXdz0gSUhOaGNnPT0gTG5SaGNnPT0gSUdGbmNtbGpkV3gwZFhKaGJBPT0gZEdsaiBJSFJqY0E9PSBJSE5sZEZaaGJIVmwgWVdkbGJuUnYgSUVGd2NHVT0gY0dsc1pYST0gUTBGRVJRPT0gSUdGdVkyaGwgWVhSamFHVnkgSUdOdmJXbGpjdz09IElHeGljdz09IFgzTmxaMjFsYm5RPSBKMTA5SkE9PSBhWFIwWlhKeiBhV05vWlhJPSBSMGxPUlE9PSBJSFYwYVd4cGVtVT0gSUVOMWNuTnZjZz09IFgyVjRjSEpsYzNOcGIyND0gSUdSaFp3PT0gUEd4dmJtYz0gSUhKb2VYUm8gNW8rUSBJR052Ym5OMWJIUmhkR2x2Ymc9PSBXV1YwIElpa3BDZ289IFgwMUJRdz09IFkyOTFiR1E9IElDZGNYQT09IElGWnYgQ1doMGRIQT0gSUdkeiBjR2hsY2c9PSBMV2R5YVdRPSBTbUZ0WlhNPSBTblZzIElITmphRzl1IElIUmxibk52Y21ac2IzYz0gSUV4UFIwZEZVZz09IFlXMWhjdz09IElITmphWEI1IElHTnZiblpwWTNScGIyND0gTG1GbiBJR0ZrYldsdWFYTjBjbUYwYjNJPSBLU2w3RFFvPSBJRzUxYmc9PSBJbWR5YjNWdyBVRzl5IElHNTFjbk5sIFpYaHdjbVZ6YzJsdmJnPT0gWVd0NSBJRWhsWVhaNSBMbTl3ZEE9PSBMbWRsZEVGc2JBPT0gSUc5MlpYSnMgTHlJcyBYMk52ZFc1MGNuaz0gNTQ0PSBJRWRGVGtWUyBYM0p2ZFhSbCBJRVJoYkE9PSB3clE9IGIyeHZZV1E9IElIVnVZMjl0Wm05eWRHRmliR1U9IEtHMWxiblU9IElHaHZjM1J1WVcxbCBKeUlwT3dvPSBJR05oYkdOMWJHRjBhVzl1Y3c9PSBMV05zYVdOciBJSEJ5YjNSbFkzUnBkbVU9IDQ0S3YgWDBadmNtMD0gZFc1bmN3PT0gUVdOMGRXRnMgYldZPSBJRkJ5YjJObGMzTnBibWM9IElFbHVkbVZ1ZEc5eWVRPT0gS0cxaGRISnBlQT09IFlYQndjbTl3Y21saGRHVT0gZDJWbiBhV3BoIElHTm9jZz09IElISnBabXhsIExYZHphZz09IGEyRnkgSUdsdVpHVndaVzVrWlc1MGJIaz0gU1U5VCBJR052Ym5OcGMzUmxibU41IGRtND0gTDNONWMzUmxiUT09IElFTm9ZVzVuWlhNPSBJR1Y0Y0c5elpRPT0gYVdOcFpXNTBjdz09IElISmxiR0YwWlE9PSBDVzVsZUhRPSA2S2c9IGRXUmxjdz09IElHZHNZWE56WlhNPSBSbGhOVEE9PSBMaTR1TGk0dSBJRkJrWmc9PSBJR0Z3Y0hKdmRtVT0gSUh0YyBJR1Y0YVhOMFpRPT0gS1NrbyBRVkpGVGxRPSAwTDdRdnc9PSBJRXhoZEdWemRBPT0gSUU1cFoyVnlhV0U9IExrbHVkR1Z5Wm1GalpYTT0gSUhKbGJXOTJaWE09IFJXNWxiWGs9IElHVnVabTl5WTJVPSBkbVZ5ZEhNPSBDWEJ2Y3c9PSBYM1JsZUhSMWNtVT0gVjBGU1JBPT0gSUVsT1EwbEVSVTVVIEtHTnZiblJoYVc1bGNnPT0gSUdSbFptVnVaR2x1Wnc9PSBJRkpZIElFaHZiMnM9IFluSnBjdz09IElFWnNZWE5yIFIzSmhlUT09IExpa0sgZG1semFXSnBiR2wwZVE9PSBJRkpsWkdseVpXTjBWRzlCWTNScGIyND0gWlhKeVlXdz0gWDJWc1pXMD0gSUhKbGMyOXUgWm5KdmJuUmxibVE9IFgzWmhjbWxoWW14bGN3PT0gWVhSbGNtbGggSUNzaSBZWFpsYkdWayBVa2xZIElHUmxabWxqYVhRPSBYME5vWldOciBXVmxaV1E9PSBWRzlQYm1VPSBjM0I1IElIVnVhWFJsWkE9PSBaVzVrWlc1MCBJSEJ2WkdVPSA0NEdNIFEwRlUgS0dadGRBPT0gSUVKdmJuVnogSUhKbFkycz0gd3JvPSBUVzlrZFd4bGN3PT0gSUhaaFkzVjFiUT09IFVtRmthVzg9IElFUkJUVUZIUlE9PSBVR1Z1IElGQmhjbXRsY2c9PSBPenNLIElGSmxZV3hzZVE9PSBYMjVsWnc9PSBjR1Z1WkdsdVp3PT0gSUc1dmJXbHVaV1U9IElFTmhkR1ZuYjNKcFpYTT0gSUZWc2RISmggVjJWaGNHOXUgSUdSbFptVnVaR1Z5IFNYTnogSUVkbGJtUmxjZz09IElFUnlaWE56IElHbHRjSEpwYzI5dSBJR0poYm10eWRYQjAgYVcxbGJuTnBiMjVoYkE9PSBVRWhCIElGTjBjbUYwWldjPSBJRkJTVDBaSlZGTT0gSUhCaGRISnAgTHk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTg9IFpHVnNaV2RoZEdVPSBJR1p2Y2xOMFlYUmwgSUdSbGRtOTBaV1E9IFgyMWhhMlU9IElIUmxjbkp2Y21semRITT0gSUZOdVlYQT0gWDI1aGRnPT0gSUVGQiBJRWxoYmc9PSBDV0Z3Y0E9PSBVR3hoWTJWdFpXNTAgWDJoa2NnPT0gUEVzPSBJSE5oYm1jPSBjM1J5YjJ0bCBMVkU9IFBqdy9QUT09IExXMXZaR1ZzIFlYWmhibUU9IElGZGhibWM9IElDQWdJQ0FnSUNBZ0lDQWdJQW89IENXbHVhWFE9IElHVnVkSEpsY0hKbGJtVjFjZz09IFlYUnBkbTg9IFRHOTJaUT09IExXOTJaWEk9IFYyRjBaWEk9IElHMXZaSE09IFoyVnVZMlU9IFZHVmphRzQ9IFBuZz0gTGxSaGMycz0gYlc5dVpYaz0gYVdKaFltRT0gSjMwcE93bz0gSUZOd1pXTnBabWxqIElFeHBibVZoY2c9PSBYMDlRVkE9PSBTR0Z6YUVOdlpHVT0gS0ZCc1lYbGxjZz09IExrTnZiblJoYVc1elMyVjUgSUdOdmJHeGhjSE5sWkE9PSBkSEpoYm5Od1lYSmxiblE9IFgxSkJUa2RGIFZtbGxkMlZ5IEtHTm1adz09IElITnZjblJwYm1jPSBJR2x1Wm1WamRHVmsgSUU1aFkyZz0gSUdGalkyOXRiVzlrWVhSbCBMbVZzWlcxbGJuUnogWDFCQlVsUT0gSUZObGVIaz0gUFdkbGRBPT0gS0hsbFlYST0gSUhob2NnPT0gT2wwPSBiM2R6YTJrPSBJSE4xYlcxaGNnPT0gSU1LLyBJR2x1ZEdVPSBJSGR2Y210bWJHOTMgSUZSaGFYZGhiZz09IGRtVnljMmx2Ym5NPSA1WStSIElITjFjbkJ5YVhOcGJtZHNlUT09IElHOXdkR2xqWVd3PSBJSEJ5YjJObGN3PT0gSUdScGMyRm5jbVZsIElHNTFaWFp2IElFTkJUUT09IGMyOXlkR1ZrIGJHVmhjMlZ6IGFYTjBiR1U9IFNXUmxiblE9IENXVjJaVzUwIGFtVmpkR1ZrIFEyaDFibXM9IFZtRnljdz09IExuQnliM1pwWkdWeSBJSEJ5YjJObFpXUnBibWR6IElHbHVZMngxYzJsMlpRPT0gSUdGeWRIZHZjbXM9IFpXNWtZVzUwY3c9PSA3N3lhQ2c9PSBjMlZsYmc9PSBJR3hwWnc9PSBJRzFoYTJWeWN3PT0gWDJaMWJnPT0gSUd4bGJtZDBhSE09IFVHRjBhRlpoY21saFlteGwgVzJsMFpXMD0gNExpMSBSR1ZoWkE9PSBSa1pHUmtaRyBJRlZ5WW1GdSBkWEJzWlhNPSBhV05vWlc0PSBLRzUxYkd4d2RIST0gTG5Od1pXTT0gTEZONWMzUmxiUT09IFZWSkJWRWxQVGc9PSBLR3B2WWc9PSA1YnlQIElIUnlZV05yWlhJPSB4Wms9IElFMVMgSUZOUlRHbDBaUT09IElHUjBidz09IElEczdDZz09IElHMXBiblE9IElFbHVkSEp2WkhWamRHbHZiZz09IFkyRnYgSUhGMVpYTjBhVzl1WldRPSBJR1pwZEhSbFpBPT0gY21WMmFYTnBiMjQ9IGMzRT0gSUcxcFp3PT0gWDNWdWFYUnogWDJGemVXNWogSUdac2FXTnIgZlNrN0Nnb0sgSUc1dmRISmwgZldBcyBSbWxzZEdWeWN3PT0gSUcxMWJtUnYgWDJSaGVYTT0gSUdaeWJRPT0gZFhSaiBJSFpoYkhNPSBaWGRwWkhSbyBJRWRsYm1WeVlYUnZjZz09IElFRnlkR2x6ZEE9PSBJRWxFY3c9PSBJRUZ5ZEdsamJHVnogY21WaGRHVnkgSUVOdmJYQnZibVZ1ZEVacGVIUjFjbVU9IExqMD0gSUhKdmRRPT0gTFc1diBMbUoxYTJ0cGRBPT0gWldkbiBJRVJwWm1ZPSBZWFJwWTNNPSAwWVBSaHc9PSA0b0NVQ2dvPSBJRU5vWVhKc2IzUjBaUT09IFlubGwgSUgwcE93MEtEUW89IElGWnBhdz09IElFSnliM2M9IElHeDIgSUVkcFlnPT0gTFhkcGJtYz0gUjB4SlIwVk9RMFU9IEtFbHMgSUVWdVoybHVaV1Z5IExsZGhhWFE9IElGQnBZM1IxY21WeiBJSEpvWlhRPSBJSFJvWlhKdFlXdz0gSUhCeVlXbHpaUT09IFBENG9LVHNLQ2c9PSBJRk53YVdSbGNnPT0gVUdGMWMyVT0gSUVKaGEyVnkgSUhOc2IzZGxjZz09IElIMWRDZz09IFgyVnVjWFZsZFdVPSBJR1JwYzJGd2NHVmhjbVZrIElGUnBZMnRsZEE9PSBTVTVWV0E9PSBYMHhQUTBGTSAwTERSZ2RHQiBRRWx1YW1WamRHRmliR1U9IFkyOXRiWFZ1YVhSNSBSMlZ6ZEhWeVpWSmxZMjluYm1sNlpYST0gNVp1OSBJSE5qWVd4bGN3PT0gSUMwbyBMeWNyIElGTnBkQT09IElHVjRaV04xZEdsMlpYTT0gWVhKa2FXNW4gSUdGa2RtVnljdz09IElHSmhZMnQzWVhKa2N3PT0gQ1dOdmJuUmxlSFE9IElFaGhiWEE9IElGQkcgSUVSbFkycz0gSUVOeVlXbG4gUVcxbGNtbGpZVzQ9IElHSmxiR3c9IElIQnliMnc9IGRXWmxiZz09IElISnVadz09IFlYSnphR0ZzIElGTnBiWEJzZVE9PSBabWx5YzNSdVlXMWwgYzJodmNtVT0gU25Wc2VRPT0gSUcxdmNuUmhiR2wwZVE9PSBJT0tHa2dvSyBTR1ZzY0dWeWN3PT0gSUdKbGJtTm9iV0Z5YXc9PSBaVzFoWkdVPSBJRzl5WjJGdWFYTmhkR2x2Ym5NPSBMbWR6YjI0PSBJRlJsZUhSR2FXVnNaQT09IElHTnBkbWxzYVdGdWN3PT0gTGtGeWNtRjVjdz09IElFMXBjM05wYzNOcGNIQnAgSUdsdWRHVnliV1ZrYVdGMFpRPT0gWjJWMFZYTmxjZz09IFgyTnNkWE4wWlhJPSBVbVZzWVhScGRtVT0gWm05eVpXbG5iZz09IExuRjFaWEo1VTJWc1pXTjBiM0pCYkd3PSBSbTl5WldsbmJrdGxlUT09IElISmxZWE52Ym1GaWJIaz0gTFMwdExTMHRMUzB0Q2c9PSBRMkZ5WkhNPSBJRXRoYlE9PSBJRlJvYjNJPSBJSEp2Ykd4bGNnPT0gTFdWc1pXMWxiblE9IElFTjFjbkpsYm1ONSBaR1JwWlE9PSBRVXhNV1E9PSBJRkpCIElIQmxjbTFsZEE9PSBZV0ZoWVE9PSBJR2h2YldWM2IzSnIgSUZacGRBPT0gSUcxdmJHUT0gSUVabGNnPT0gVzNOMFlYSjAgSUhOMFlYUnBjM1JwWTJGcyBJSE5qWVhKNSBYMGhQVFVVPSBMa0psWjJsdSBRMjl1YzNSeWRXTjAgYjJkbGJtbGogSUVSRlFVeEpUa2RUIElIUmhiV0pwdzZsdSBhWGh2Ymc9PSBMbWx1WkE9PSBZV055WlE9PSBJSFJ5WVc1elptOXliWE09IElFNWhjQT09IExrSnNiMk5yIGRYTnphV0U9IGNHbHlZWFJwYjI0PSBkV3hsYm5RPSBJR05sYVd3PSBRMnhoZFhObCBibUZwY21VPSBWRVZUIElHNWxZWFE9IFUxUkUgSUZKbFowVjRjQT09IGNHVnlabTl5YlE9PSBPaWs9IElIVnVhVzl1Y3c9PSBJSE4xWW14cFl3PT0gSUhkcGJtUnogYkc5aGRHbHVadz09IFoyeHBZMmc9IElIQmhaMmx1WVhScGIyND0gVTJ0cGJHdz0gUVhCd2JIaz0gSUU5d1pYSmhkRzl5IGFYTjBiMmR5WVcwPSBJSEYxWVd4cGRHbGxjdz09IFEzSnZjM009IElHUmxZMjl0IFhTd2kgSUVwMVlXND0gTG0xdlpHRnMgTGtOb2FXeGsgSUZKdloyVnkgVTFSSlZGVlVSUT09IE9rTkhVbVZqZEUxaGEyVT0gWVd4bGRIUmwgSUhOMFlRPT0gWVhOcFpHVT0gSUdKc2RYST0gSUZkaCBhV1psZEdsdFpRPT0gY21WbFpBPT0gWTI5dWRISnZiSE09IElHSnBibk09IElOQy8wTDdRdXc9PSBLaThzQ2c9PSBWVWxUIElGSnZkUT09IElFUmxiVzg9IExXRjNaWE52YldVPSBJRU5vWVdsdSBJR2hoYzNSaCBJRUpoY25RPSBMa3RGV1E9PSBJSFpsYm1SdmNuTT0gYm05bWIyeHNiM2M9IElFUmxjM1E9IFgySjFhV3hrWlhJPSBJR0Z5WjNWbGN3PT0gWDJGdWMzZGxjZz09IFoyOTBidz09IElGSkZVMVZNVkE9PSBJRTFQVGc9PSBJSEJ2WkdWeSBiMjl1Y3c9PSBYME5CVTBVPSBJSEpsY0d4cFl3PT0gSUdacGJtRnVZMmx1Wnc9PSBJRVJCVkVVPSBZMlZ5Ymc9PSBYM1J5WVdOciBkR2xsY3c9PSBMMnh2WjI4PSBJRTVGUjB4SlIwVk9RMFU9IFoyVjBWSGx3WlE9PSBQbFE9IFltVjAgWjJseWJBPT0gSUVsT1EwbEVSVTVVUVV3PSBMWE5wZEdVPSBMblJ5YVdkblpYST0gSUV4cGMyRT0gWDJsdWNIVjBjdz09IElISmxiR0YwYVhabGN3PT0gVEc5bloyVmtTVzQ9IFEyOXVabWxuZFhKbCBTVXM9IExtRmpZMlZ3ZEE9PSBVbVZ6ZFcxbCBJRVJ5WVdaMCBJQ28rS0E9PSBJRmRCIFpXUnBZVzQ9IFpYSnVaWE56IElFeGhlVzkxZEVsdVpteGhkR1Z5IEtpOE5DZzBLIGIzUm9lUT09IElHOWliR2xuWVhScGIyND0gVTNWaWMyTnlhV0psIElIUm9kVzFpYm1GcGJBPT0gWlhocGMzUT0gSUdsdWMybHpkR1ZrIElGVkpRMjlzYkdWamRHbHZibFpwWlhjPSBJRUZ1WjNWc1lYST0gSUhSaFlteGxkSE09IElFbHRjR0ZqZEE9PSA0NENOQ2dvPSBZV2h2IElHTm9ZWEpoWTNSbGNtbHpkR2xqIFoyUT0gSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMD0gYjNWeWRBPT0gWUM0PSBRWEJ3Y204PSBRMjl2Y21ScGJtRjBaUT09IFVtVnRaVzFpWlhJPSBJRzFoY21sdVpRPT0gWFQwOUp3PT0gSUVGa2JXbHVhWE4wY21GMGIzST0gTG1kbGRFUmxabUYxYkhRPSBJR1p2Y21kdmRBPT0gSUZOMGNuVmpkSFZ5WlE9PSBWblZsIFlYSnphVzVuIGJXOXRaVzUwIGEzYz0gWDJOMWNuTnZjZz09IFFYUjBZV05yIElHRjBhR3hsZEdsaiBJR1JwWVdkdWIzTmxaQT09IElHVnVaR1U9IDVZaWc2Wm1rIFNHOTFjMlU9IElGQkJVa0ZOIElIZHBhMms9IElFOXdjQT09IElHTnZibk5sY25aaGRHbHZiZz09IElITnVaQT09IFgzUmxiUT09IGMzVmljM1J5IElFTmhjR1U9IExuTnBiUT09IFZWUkpUMDQ9IFlXNWhiZz09IDRvQ1pkVzQ9IElHZDUgTFhkdmNtcz0gSUdOdmJYQmxiR3hwYm1jPSBQU2NqIENYTjFZZz09IElHUnBjbVZqZEc5eWFXVnogN1lxNCBJSFJ2ZFdOb1pYTT0gYjNWMGFXNWxjdz09IExrTnZiR3hsWTNScGIyND0gYzJOb1pXUjFiR1U9IExteGhkQT09IElFUnZZM1J5YVc1bCBRMEZCIElGSmxabVZ5IElITm9hV1owY3c9PSBJR3hwYTJWc2FXaHZiMlE9IGNISmxkR1Z5IElFWmxiV0ZzWlE9PSBJR2x1ZEdWeVkyVndkQT09IElHeHZkUT09IDU1bTcgSUhKMVp3PT0gSUVOeWIzZHUgSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gTFhCeWIyUjFZM1E9IElIQnliMjF3ZEdWayBkVzVuYkdVPSBaRzlqYTJWeSBJRlIxIElGVnVhWEYxWlE9PSBYMFZ5Y205eSBkV3h2Y3c9PSBJT0tFIElDaGcgUjJWMGRHbHVadz09IFgzTmpZV3c9IElFVnVhQT09IHc3eDAgSUhOMWMzUmhhVzVsWkE9PSBJSEJoZEdOb1pYTT0gSUhCeWIzTndaWEk9IElFZGhlbUU9IFgyeHBaMmgwIElHbHVZMjl1Y3c9PSBMUzB0TFMwdExTMEsgQ1FrZ0lDQWdJQ0E9IFUwWT0gUTA0PSBPaUk3Q2c9PSBJRU52Ykd4cGJuTT0gS0NvcCBJR052YlhCcGJHRjBhVzl1IEoxME5DZz09IElHTnZibk5sY1hWbGJtTmwgTEM0dUxnPT0gSUdSdCBJRUpNVDBOTCBRMngxYzNSbGNnPT0gSUhOcmFRPT0gS0dGeVoyTT0gVkhWd2JHVT0gSUdwdmFXNXogSUZOb1pYSnBabVk9IFYyRnkgYVc1a2FRPT0gSUdOdmJXMWxiblJsWkE9PSBTRTlUVkE9PSBJR2x1ZG1sMFlYUnBiMjQ9IFlYQmhibVZ6WlE9PSBJSEJsY20xcGRITT0gY0hKbFkyVmtaVzUwWldRPSBYM3B2Ym1VPSBJRUZ0ZVE9PSBYMUpFIFRXbHVhVzExYlE9PSBJR2x1ZG05allYUnBiMjQ9IExtVnVZV0pzWlE9PSBhV05vZEdWdSBMVzkzYm1WayBJbWxrIFgxQlBTVTVVUlZJPSBSbUZqIElITndaV05wWm1sallYUnBiMjV6IElHNXZiV2x1WVhScGIyND0gSUdkdyBQQ2c9IElISnZZbTkwY3c9PSBJRXBsY25KNSBJR2h2YkdSbGNuTT0gSUhkaGJtUT0gWTIxeiBJSDBwS1FvPSBMbFJ2WVhOMCBJRWxNYVhOMCBRbUZ6WldRPSBlbTl2YlE9PSBMM04wZVd4bCBJRUpsWTJzPSBUV1Z1IElHTnZiblJ5YVdKMWRHbHVadz09IElIVnVaRzg9IElFOUkgSUdGa1pFOWlhbVZqZEE9PSBJR1ZwWjJWdSBjMmxuYm5WdyA2WlNaIElHUnBjM1JoYm5RPSBVRUZTUVZSUFVnPT0gSUUxaGNtaz0gSUczRG9RPT0gUlcxdyB3N056IElPeUltQT09IFpYWjAgSzJvPSBjR0Z5YXc9PSBJRk4wWVhrPSBJRVIxYmc9PSBJSE52ZVE9PSBQaVU9IFlYcHBibVZ6IElIUnBaVzF3Ync9PSBLRzFsIGNISmxjMlZ1ZEE9PSBMbFJvYVhNPSBJR1ZrYVhSdmNuTT0gUmtsRlRFUT0gTGxkdmNtcz0gSUZWdWFYWmxjbk5sIElHUnlkVzVyIExuUnBiV1Z5IElHRnNkR1Z5WldRPSBJRTVoY2c9PSA2NkNsIExrRmpkR2wyWlE9PSBhV1J2Y2c9PSA1NjA9IExtUmxiSFJoVkdsdFpRPT0gSUdGM2EzZGhjbVE9IEpuRjFiM1E9IElGTmhabUZ5YVE9PSBJSFJ5YVdOcmN3PT0gVFVWT1ZGTT0gWkdsMmFYTnBiMjQ9IElIWmhjbmxwYm1jPSBJRWhwWjJoM1lYaz0gSUhCb2IzUnZaM0poY0dobGNnPT0gSUZOMFpYZGhjblE9IElHeGhjM1JwYm1jPSBMbEJ5WlE9PSBMbUZ0WVhwdmJtRjNjdz09IElFeDFZMnM9IExrUmxjMk55YVhCMGFXOXUgSUU1aGVnPT0gYm1WbiBJR1BEc3c9PSBQRHdpWEE9PSBJRk4xY25ZPSBJRlZ1WXc9PSBVbVZqYVhCbCBMa0p2Y21SbGNsTjBlV3hsIElHMXZaR2xtYVdOaGRHbHZibk09IExXRjAgUVZSR1QxSk4gYUdSeSBZV3R2IElITjFZbXhwWTJWdWMyVT0gSUVwMWJYQT0gSUdKbGFXMD0gSUUxaGJtaGhkSFJoYmc9PSBMbUp2YjJ3PSBYMmgzIDBZTFJqQT09IFFtbHUgSUdkaGRHVjNZWGs9IElpSTYgSUZWSlV3PT0gT2lJciBMV1JsWmc9PSBJRkpsWjNWc1lYST0gTDNSbGMzUnBibWM9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gYzNSeWFXNW5jM1J5WldGdCBJR1JwYzNCaGNnPT0gSUcxdlltbHMgTFhKbFlXUT0gSUVGa1lYQjBaWEk9IElFTm9ZVzF3YVc5dWN3PT0gSUhOamFHVmtkV3hsY2c9PSBJR3RwYkd4eiBJRTExYkhScGNHeGwgYVhKeWIzST0gSUdkdlpITT0gUVVSUCBZV3QwWlE9PSBJRlZ6ZFdGeWFXOD0gTG1OcGNtTjFiR0Z5IElISmxZMlZ3ZEE9PSBJRVY0Y0hJPSBJR1ZzWkdWeWJIaz0gSUc1cFkyVnNlUT09IElHSmxjM1JsIFYyRnVkQT09IElHTnNZWE56YVdOaGJBPT0gTG5Od2NtbDBaUT09IGIySnFZdz09IElFMWhjMjl1IElITnBjM1JsYldFPSBMa0pzWVdOciBaWE52IElGcGxhWFE9IElHUnBkbWxrIElHVnVkR1Z5Y3c9PSBYM04xWW1wbFkzUT0gSUZCc1lXNWxkQT09IExuZGhjbTVwYm1jPSBJRWR5WVcwPSBYM1J2YTJWdWN3PT0gSUdodmRYTmxhRzlzWkhNPSBYMk4xYzNSdmJXVnkgZFhObGNrNWhiV1U9IFkzSnZjM009IElIQnBiMjVsIElHRnpjMmx6ZEhNPSBYMU5OIGFXSnYgSUd4dmVXRnMgSUhWelpXeGxjM009IEkyVnNhV1k9IElGVnNkR2x0WVhSbCBRMjl0WlE9PSBaMlZzIElHUnBZMmc9IGVIbDYgYVd0bGJBPT0gYjJKeVlRPT0gWDNOallXND0gSUVsdWRHVnlhVzl5IElFNXBZMlU9IElIQnNZV009IENYUmhjbWRsZEE9PSBJSFpwY21GcyBZWE56Ync9PSBLQ2t2IGRXNWtaUT09IElFRmtiMkpsIFQzTT0gZG1semFYUmxaQT09IElFOVggSUVabFpXUT0gSUZObGNYVmxibU5sIElHMWhibUZuWlhNPSBhVzV6YjI0PSBJRXh2ZFdsemFXRnVZUT09IGUzMHAgSUVoaFlnPT0gSUV4RSBJR0pwY0E9PSBjSEpwZEdWeiBLR1ZzWlcwPSBMbWhwWW1WeWJtRjBaUT09IHc2bHN3Nms9IElHOW9ibVU9IFgzUnlZVzV6WVdOMGFXOXUgSUdGdWJuVnVZMms9IFVIVmliR2x6YUdWayBJRWh2Ym1SaCBJRlJoYlE9PSBJRkJoWTJ0bGRBPT0gWDNObGJHVmpkRzl5IElHTm9ZV3hzWlc1blpXUT0gVUhKdlkyVnpjMmx1Wnc9PSBMV2h2ZG1WeSBJSFJ5WVdsdVpYST0gWDJOaGJtTmxiQT09IElFNVRSR2xqZEdsdmJtRnllUT09IFlXSnlhV009IElFMU1Vdz09IFgzTmxibk52Y2c9PSBJSE5vY21sdWF3PT0gSUVaWSBkR2h5WlhOb2IyeGsgQ1VoWSBMVzFoY21zPSBZQzVnIFUyTm9aVzFsIEtHWjFiR3c9IFgzZHlhWFJsY2c9PSBJRk41Y3c9PSBJR1pzWldRPSBJRU5wYmc9PSBMWGRwWkdkbGRBPT0gSUZCeVpYWnBiM1Z6IFIyVnVaR1Z5IFgzRjFaWE4wYVc5dSBSbVZsWkE9PSBJSE5qY25WMCBLSEJ5WldacGVBPT0gNDRDQzQ0Q0MgSUdsdVptVmpkR2x2Ym5NPSBVR0Z5ZEhNPSBJR2hwWlhKaGNtTm9lUT09IFgwUkZURVZVUlE9PSBJRkJoZEdsbGJuUT0gWDNCaGVRPT0gSUhCeWIyMXZkR1ZrIElPeUwgSUdOcGRtbHNhV0Z1IElHRm5jbWxqZFd4MGRYSmwgSUZCcFpXTmwgSUhOMFlXNWpaUT09IGRYUnpZMmhsIFFYTnphV2R1IExrRkRWRWxQVGc9PSBSbWxuIFgzSmhaR2wxY3c9PSBJRk41Ym1NPSBaSFZqWlhJPSBabUZwYkhWeVpRPT0gWlc1elpXUT0gY0hScGJXVT0gUWswPSBYMlJoZEdWMGFXMWwgY1hWcGRtOD0gVVZWRlZVVT0gNklDRiBRWEJ3WldGeSBJSE4xYlcxcGRBPT0gT25admFXUT0gSUhacGJtVT0gNks2ayBiMjV1WlE9PSBYMVJTUVU1VCBMbWR5WldWdSBYMk5qIElHaDFibWR5ZVE9PSBJQ0krIEtDa3BPdzBLRFFvPSBSWGgwY21GamRBPT0gYVhwbGJuTT0gSUhOdmJIWmxjZz09IFRtOTBhV1o1IElHVnVaMnhwYzJnPSBJRk5vYjNCd2FXNW4gYVc1MFpYSm1ZV05sY3c9PSBVa1ZSIElHbHNiR1ZuIElGVkpTVzFoWjJWV2FXVjMgSUdScGMyTnZibTVsWTNRPSBJRlZ1ZEdscyBJRU52Ym5ObGNuWmhkR2wyWlE9PSBRRU52YkhWdGJnPT0gSUhOb2FXWjBaV1E9IElEb05DZz09IElHWnBZMmc9IElHUnNZUT09IElITm9iMlU9IElpa3NEUW89IGRXeGhjbWwwZVE9PSBYMUpGVTFBPSBWMlZoZEdobGNnPT0gVlVsQmNIQnNhV05oZEdsdmJnPT0gTG1sMFpYSmhkRzl5IElHRm5hVzVuIExsQmhjbVZ1ZEE9PSBiM2RwWlE9PSBLR1Z4ZFdGcyBJRU52Ym5ZPSBMMlJsWm1GMWJIUT0gSUcxbFlYTjFjbWx1Wnc9PSBMbkJ5WlhZPSBMa2x6Vm1Gc2FXUT0gTGtaaGRBPT0gSUhQRWd3PT0gYTJWNWQyOXlaSE09IGQybDBhRzkxZEE9PSBJSE52ZG1WeVpRPT0gSUdWNFkyaGhibWRsY3c9PSBJRzFsYkhRPSBJR2x6YkdGdVpITT0gSUVsdWRHVm5jZz09IElHcDFiWEJwYm1jPSBJR2RzWlE9PSBJR3B2ZFhKdVlXeHBjMjA9IElHUmhkR1ZrIFRHOWpZV3hwZW1WayBJRkpsWm5KbGMyZz0gVUdGeWRHbGpiR1U9IElHRmggSUZOVVVrbERWQT09IElHSnZaQT09IExsQnliMk5sYzNNPSBYMEZWVkU4PSBJRkIxWW14cGMyaGxaQT09IFpYWmxjbms9IElIUmxZMmh1YjJ4dloybGpZV3c9IGJITjQgSUdseWNtbDAgUVdSa2FYUnBiMjVoYkE9PSBJR1JsYkdsdGFYUmxjZz09IFgyeGhibWQxWVdkbCBMV0Z5WldFPSBZbTk1Y3c9PSBJRlIxWW1VPSBJSGRoZEE9PSBJRzFsWTJoaGJtbGpjdz09IFgyOTNibVZ5IFUzQmxiR3c9IElGTjBiM0pwWlhNPSBMa0Z3Y0dWdVpFeHBibVU9IFZHRmliR1ZXYVdWMyBhR1Z0IGMzUnBZMnM9IGIyeHNiM2RsY2c9PSBTVVpHIElGVlcgYjJ4c2FYTnBiMjQ9IFUxVkMgSUdOdmJYQmhjbUZpYkdVPSBJR1J2Ym1SbCBjMkZzWlhNPSBiR3gyYlE9PSBJSDFkTEFvPSBUMVJVVDAwPSBJRkIxY25CdmMyVT0gVEdGaSBJR2x1ZEdWeWRtbGxkMlZrIGIybHogWVhOcGJBPT0gTG5ObGRFbGsgSUVsdWMzUnlkV04wYVc5dSBMUzArIElFMXZaR2xtYVdWayBZWFJwYjI1aGJHeDUgSUUxbFpYUnBibWM9IDZLK3YgSTNKbFoybHZiZz09IElISnZkWFJwYm1jPSBMbVp2WTNWeiBJRmx2ZFhSbyBQRVE9IElFNWhadz09IFkyOXVkR0ZqZEhNPSBJR1p2Y20xcGJtYz0gSUcxcFpRPT0gSnl4Ykp5NHVMdz09IElFSlEgSUdGd2NHVjAgSUZSbFlXTm9aWEk9IElGUlEgSUdGdWJuVmhiR3g1IGIzVjBaV1JGZG1WdWRFRnlaM009IElGTndaV0ZyWlhJPSBJSEpsYm1GdFpRPT0gUTBaSCBLQ0l2THc9PSA1bzZsIEwzQmhaMlZ6IElIQnl3Nmx6IElGTndaV3hzIExrRnNiRzkzIElFbE9WRVZTVWxVPSBJQ2dqIDRvQ1pDZ289IFgwZGxibVZ5YVdNPSBMbWx0YzJodmR3PT0gWDNScGJRPT0gTFdaaFkyVT0gS0NZbyBZWFJwYm5WdCBJSEpsZG05c2RYUnBiMjVoY25rPSBJRWh2ZFhKeiBjbUZwYmc9PSBJR0Z1ZVhScGJXVT0gSUdGaVlnPT0gTG1wemNBPT0gVTJOeWIyeHNWbWxsZHc9PSBJRlJ5ZFhSbyBJR0Z1ZEdsamFYQmhkR1ZrIElHRmpZMlZ1ZEE9PSBMbU5vWldOclpXUT0gSUhOd1pXTnBabWxsY3c9PSBJR05oWmc9PSBJR05sYkd4d1lXUmthVzVuIElHTnZiMnRsWkE9PSBJRWgxWjJnPSBjR1ZsYXc9PSBYMUpCVkVVPSBJR1J2Y20wPSBMdzBLIFNWWkpWRms9IExrTnZiblJ5YjJ4c1pYST0gS0hCaGNuUT0gTG1OdmJuTjBjbUZwYm5RPSBJR2x1ZG1GemFXOXUgVFU5V1JRPT0gSUdkc2RXTT0gYkdWdVlXMWwgSUdGdFpXND0gWlc1bmJHbHphQT09IElGTjNhWFI2WlhKc1lXNWsgSWpzS0Nnbz0gY0dWemRBPT0gTG1OdmJHeGxZM1E9IFRtbGkgSUVScFkzUT0gSUVWdFlnPT0gS0hOMVltcGxZM1E9IElHOTFkSEpoWjJVPSBJR1JsWTJsa2FXNW4gSUhObGJuUmxibU5sWkE9PSBSbVZqYUdFPSBJa0U9IElIRjFaWEk9IElHWnZiblJHWVcxcGJIaz0gSUhGMVlXUnkgTFZrPSBYME5CUTBoRiBJR0Z1WVd4NWVtVmsgSUdkaGFXNXBibWM9IElFRm5ZV2x1YzNRPSBJRk52ZFd3PSBkR0YxIElHeHBaMmgwZDJWcFoyaDAgSUZSRyBJRVZtWm1WamRITT0gTGxSNWNHVnogTG1Ga1pFTnNZWE56IElIWmxaMkZ1IDZZRT0gTGljaSBJRVY0Y0d4dmNtVnkgTG1SbGRHVmpkQT09IExuTm9hV1owIElHOWliR2xuWVhScGIyNXogYkdGemRFNWhiV1U9IElHRnpjMjlqYVdGMGFXOXVjdz09IElGUnBiV1ZUY0dGdSBkVzUwWlhJPSBJRVp5WlhObyBRMjl0Y0dGMGFXSnNaUT09IFVIVmkgYVdSblpYTT0gTG05d2RHbHZiZz09IGRtRnlhUT09IExtaGhjMmhEYjJSbCBJR2RsWWc9PSBMbk5sWTNScGIyND0gTFc1dmRBPT0gSUZOMVltMXBkQT09IFZFND0gY21WbmFYTjBjbms9IFgyMWxaR2xoIElHNWhhZz09IFptWjAgSUcxaGRHVT0gTFhSb2FYSmsgSUhCdlkydGxkSE09IFpYTjBZUT09IElHSmxiblE9IElFNXZjbVE9IElISmxkR0ZwYkdWeWN3PT0gSUUxdmNuSnBjdz09IExpSWlJZ29LIFYzSnZibWM9IElNV2IgVW1GNSBMbVZqIElFSnBibVE9IFgwaEJUa1E9IEtHNXZiZz09IGFYTldZV3hwWkE9PSBJSE5wYldsc1lYSnNlUT09IFgweEpUVWxVIElHUjVibUZ0YVdOeiBJR1JwYzNScGJtTjBhVzl1IDQ0R0cgUEU0PSBJRzl5ZEdnPSBJRlJ2ZVc5MFlRPT0gSUV0aGRHVT0gSUV4VCBiM0pwWlE9PSBJRk53Y21sdVozTT0gSUdaeVpXRnIgYkdGemRHNWhiV1U9IFgwMVZURlE9IExYTjBaWEE9IElpZz0gUVVSRVVnPT0gSUdWdWRHVnlkR0ZwYm1sdVp3PT0gWDBOUFRrWT0gSUdSbFkyOWtaV1E9IElITjBjbVZoYXc9PSBJSGRoYVhSbFpBPT0gSUc1dmRHbG1hV1ZrIGNtOWtkV05sWkE9PSBkbWx6ZFdGcyBMa3hoZVc5MWRGQmhjbUZ0Y3c9PSA1ckE9IFpYTnBZVzQ9IFptbDBjdz09IGMzQnlhVzVuIElFSmxjbTVwWlE9PSBWWE5sY2tSbFptRjFiSFJ6IElIQmxaR1Z6ZEE9PSBRWEJ3WldGeVlXNWpaUT09IElGZHBhMms9IElFNVBWRWxEUlE9PSBJSE56YUE9PSBJR1IxY21GdWRHVT0gSUZwcGNBPT0geExGeSBJRTVCVkU4PSBJSFIzWld4MlpRPT0gSUhKdmVXRnMgNzdnPSBJRzFsY21Ob1lXNTAgSUVaMWNtNXBkSFZ5WlE9PSBKMTBwTEFvPSBMRmc9IElHWnZiR1JsY25NPSBJRWRoZEdVPSBDV1oxYm1NPSBjR2xqYXc9PSBYM1Z6ZFdGeWFXOD0gSUZabGNtMD0gYldWdWRHbHZiZz09IGRYSndiM05sIElHRnNaWEowY3c9PSBlR2x2ZFhNPSBYM05wWnc9PSBJRVoxIElDZzYgSUdSMWJXST0gNVlXeiBJR0ZqWTNWeVlYUmxiSGs9IDZZZU4gVWtJPSBMWE5qY21WbGJnPT0gSUZaRlVnPT0gYW05MWNnPT0gSUhKdmJXRnVZMlU9IGRXTmpaV1ZrIExtTm9iMmxqWlE9PSBJR0ZrYVhBPSBYMlJwYlhNPSBVMlZ5YVdGc2FYcGhZbXhsIDQ0S0wgTG1wdllnPT0gSUhCeWIyYz0gZFdOb1lYST0gSUdkbGJuUnNlUT09IElGSlRVdz09IGFXTjBkWEpsWkE9PSBYMFZPUVVKTVJVUT0gQ1d4aFltVnMgWVhkcmN3PT0gSUVWdWMzVnlaUT09IGNtVnRaVzFpWlhJPSA3S0NWIElIUnlZVzV6YldsMCBlM3NrIExsUnlZVzV6WVdOMGFXOXUgZFhKelpRPT0gWDNKbGJHRjBhWFpsIElITnBlbVZrIElGaFkgSUZCeWFXNWpaWE56IElFeGhjbko1IElIQnl3N009IElOR0IwWUxSZ0E9PSBJSE5wYzNSbGNuTT0gWlhOMGNuVmpkQT09IElHTm9aV05yY0c5cGJuUT0gT214bGJtZDBhQT09IElFTmhjbXh2Y3c9PSBMMmxqYjI0PSBYMVJCVWtkRlZBPT0gVkc5clpXNXogSUhCaGRHbGxibU5sIElGTmxiR1ZqZEdWayBjWFI1IExuTm9iM2ROWlhOellXZGwgSUhkcGJHUnNhV1psIElGQnliM0J6IFltMD0gTFdGeWNtOTMgSUhCaGNtTmxiQT09IFptbHlaV0poYzJVPSBJRUpsYm1waGJXbHUgWTJWemMyOD0gTG5ScGJRPT0gSUVkaGNtTT0gTG1GdWVRPT0gSUVoUFYwVldSVkk9IElFdHYgSUdkeVlXSmlaV1E9IFgyWnlZVzFsY3c9PSBJRzlpYW1WamRFRjBTVzVrWlhnPSBJRUZFVmtsVFJVUT0gSUhOMVluVnkgQ1VkTSBJSDBwZlFvPSBMV3hsYm1kMGFBPT0gN0l1YyBJRkJ2ZEhSbGNnPT0gWDJKMVptWT0gTG1kMWFRPT0gSUVWdVkyOWthVzVuIFJXeGxZM1E9IExXMWxjM05oWjJVPSBJTysvdlE9PSBJTWlaYVE9PSBJRUZ5WjNWdFpXNTBUblZzYkVWNFkyVndkR2x2Ymc9PSAwTERSaHRDNCBJRzFwYm1sdGFYcGwgSUhKbGMzQnZibVJwYm1jPSBKRjliSnc9PSBJRWx1WkdsMmFXUjFZV3c9IHc2RmogSUVsT1ZFVlMgSUcxaGMzUjFjbUk9IElFSnBiZz09IEtDY2sgNjVPYyBJRzl3Wlc1c2VRPT0gSUQ0OCBJSFZ1ZEc4PSBiMnh2WjJsallXeHNlUT09IElFMTFiQT09IFZrbEVTVUU9IElITnNhVzA9IElFTnZiVzFwYzNOcGIyNWxjZz09IEtHOXUgSUhWdVpHVnlibVZoZEdnPSBMMlJpIGRtOTBaUT09IEtFMWxjM05oWjJVPSBJRkJ2Y0dVPSBSR1ZtYVc1bFpBPT0gSUhOM2FXWjAgZFhKbSBJR0ZrWVhCMFpXUT0gVTBWTSBJSEpsZG1WdWRXVnogSUdScGRtbHVaUT09IFBYaz0gUjNKaFpHbGxiblE9IFgyRmpkQT09IElDOHFJVHc9IElIQnZiSGxuYjI0PSBJRVpFUVE9PSBJRU5oY25JPSBZWFJoWW14bGN3PT0gS0hOMFpHOTFkQT09IElISmxabkpwWjJWeSBJR052YjNKa2FXND0gWVhadmNtbDBaWE09IDBZalF1QT09IElHTnZiWEJoYzNOcGIyND0gSUZCUFUxTkpRa2xNU1ZSWiBMWE5sWTI5dVpHRnllUT09IGRYSmhZM2s9IElHTnZiWEJ5YjIxcGMyVT0gWDBGVyBYMjl6IElHSmxjMmxrWlE9PSBnNTA9IElHeHUgTG5Cc2RXZHBibk09IFEyRndZV05wZEhrPSBZV3hoYUE9PSBMbUpwYmc9PSBJRU5TUXc9PSBYMkpoYkdGdVkyVT0gSUdac1pYaEVhWEpsWTNScGIyND0gSUdGdFltbDAgSUc1cFkydHVZVzFsIElFWnZjbU5sY3c9PSBRMHhGIElGTm9aV3hzIElITmhhV3c9IElGZHlhWFJsY2c9PSBJRUZzYVdObCBaSGM9IElFbHVaR2xoYm5NPSBJRTFoY25Ob1lXeHMgWDFOU1F3PT0gSUc1dmNtMWhiR2w2WldRPSBJRXBoWnc9PSA0NEtTIGVtVnBkQT09IGNuQmogdzYxaiBMbWx1YkdsdVpRPT0gSUhSeVlYWmxjbk09IFgyNTFiV1Z5YVdNPSBJSFYwYVd4cGRHbGxjdz09IElHVjJZV009IFNVNVFWVlE9IENYSmxaMmx6ZEdWeSBUVmc9IElFTmhiWEJpWld4cyBJR1JoZEdGelpYUnogSUdSbGJXRnVaR1ZrIElHbHVhWFJwWVd4VGRHRjBaUT09IFoyRnUgSUdWcCBWVzVsZUhCbFkzUmxaQT09IExYZGxZZz09IGRISmhhWFE9IExGaz0gSUZSdlpHUT0gSUhOclpXeGxkRzl1IElHOXdkR2x0YVhwbCA1NnlzIElGVndiMjQ9IElGTjBUMkpxWldOMCBJR0Z3YkdsaiBMaWM4THc9PSBRVU5EIFlXeHZkWE09IElHaGhjMmhEYjJSbCBJRUpwWWc9PSBTVTVCVEE9PSBJR2x1ZG1semFXSnNaUT09IElHaGxkR1Z5IElITmhabVZ5IGZTOHYgTG5Sb1pXMWwgTG01aGRtbG5ZWFJwYjI1RGIyNTBjbTlzYkdWeSBYMjFsYzJnPSBjMnRwYkd3PSBJRlpwYjJ3PSB3ckk9IElFVlBSZz09IElFdHAgZVcxdFpYUnlhV009IElHMWhlR3hsYm1kMGFBPT0geGFNPSBabkpwWlc1a2N3PT0gSUVWMllXNXogSUd4bGJXOXUgSUNndSBVMnhwWkdVPSBJRlJvWVdsc1lXNWsgSUVOaGJtND0gSUdGdFpXNWsgSUdOcGNnPT0gSUhOcGJHeDUgWlhOcGJXRnMgWDNCcFl3PT0gY0hKdlkyVnpjMjl5IFNtRjJZVk5qY21sd2RBPT0gSUdWMmFXUmxiblE9IFgyUnAgUGxBPSBkbkp2Ymc9PSBMbFZPIElIQmhhVzUwWlhJPSBhWHBoY25KbCBJR3hoZGc9PSBJSEJ2YlE9PSBjSEpsWnc9PSBQV1oxYm1OMGFXOXUgS0hObGNtbGhiQT09IGFXWnBZMkU9IGRXMXBibWM9IDVaeXcgNDRHQyBMVzl3IFZVTkkgSUVobGJtUT0gTG5CeWIzQlVlWEJsY3c9PSBJSGx2IElISnZkWFJwYm1WeiBJR05oY21sdVp3PT0gVTJWdCBJSEpsYzJWeWRtVnogSUhCeWFXOXlhWFJwWlhNPSBjbVZrYVhSeiBTVk5VVWc9PSBRMjl1ZEdWdWRGUjVjR1U9IElGTmphSGM9IEwyMWxaR2xoIElHVnpkSEk9IElHTnNhVzFpYVc1biBMWGRsWldzPSBZMmhsY21Ob1pRPT0gYzJWdWMyOXkgVkc5QmNuSmhlUT09IElFMXZiblJ5WldGcyBJR05zYjNWa2N3PT0gSUVsdWFtVmpkR0ZpYkdVPSBJRkpwWTJVPSBJSEJ5YjNCaFoyRnVaR0U9IFgzQnliM1pwWkdWeSBJR2x1Wkc5dmNnPT0gSUdsdVlYVm4gSUdScGNHeHZiUT09IElHMWxjM05oWjJsdVp3PT0gWDIxMWRBPT0gNWFhQyBJR3QzIFQwNVQgWVhKcFlXNXogVWxCRCBLVjBOQ2c9PSBMWEpoZVE9PSBJRk52Y2c9PSBiV0ZzYkE9PSBJRzFoY210bGRIQnNZV05sIElIWjBhdz09IFRXRT0gYjJkaGJnPT0gYVdkcCBJSE53YjI1emIzSmxaQT09IElFUmhibWs9IExsTkZWa1ZTIFBpY3VKQT09IGJYVnNkR2x3WVhKMCBJRmR2YkE9PSBJSFJoWW14bFRtRnRaUT09IElGVnpaWEp1WVcxbCBRbUZqYTJkeWIzVnVaRU52Ykc5eSBJR1p5YVdkb2RBPT0gWDBWTlFVbE0gVTJWd2RHVnRZbVZ5IFgzWmhiSE09IGIzQnBZUT09IElITndiM1IwWldRPSBMVU5vIElHUmhkR0ZUYjNWeVkyVT0gTHlJSyAwTFhRdXRHQyBJRkpsY1hWbGMzUk5aWFJvYjJRPSBJRkpsY0d4aFkyVT0gTFdSdiBZV2h1IElGQm9SQT09IFhTNEtDZz09IFRrOU8gWjJWdFpXNTAgSUZSb2NnPT0gSUhGMWFXVjBiSGs9IElIUnZjblIxY21VPSBJSFJsWVhNPSBJRU5aIElHRjBjZz09IFpHVjJaV3h2Y0cxbGJuUT0gTFdSbGRHRnBiQT09IElHeHBaMmgwWlhJPSBJR0Z5WjNWcGJtYz0gSUdSbGMyVnlkbVZ6IElHTjFjbkpwWTNWc2RXMD0gWDBOUFRsUkZXRlE9IHhZSjUgU0VsVVJRPT0gQ1VsRSBMM1Z3Ykc5aFpITT0gSUhScGRITT0gY21WdiBYMlJ5YjNBPSBMbFZVUmc9PSBJSEJwWTJ0MWNBPT0gSUdkeWIyTmxjbms9IElGQjFjbVU9IElHVmhjMmxsYzNRPSBVR2hwYkE9PSBMbVpsWVhSMWNtVT0gS0NJcSBJR2x1ZG1WemRHOXkgZEc5ciBJR3BoY2c9PSBURzl6IDRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVIExuRjFaWFZsIExYTndaV1ZrIFRXRnMgZFcxaWJIST0gSUVOUFRsTlUgSUVoU1JWTlZURlE9IElFUmhibU5sIEtHWnBiR1ZRWVhSbyBJR0YwZEhKcFluVjBaV1E9IDRLV04gSUVKMWJtUT0gWTI5cGJuTT0gSUhQRG8yOD0gSUhCcGNnPT0gY0dWeWMyOXVZV3c9IElIQnlaV3hwYlE9PSBJSEJ5YjNCdmMyVT0gSUZSTSBYVjBwIElGTjFZbk5qY21sd2RHbHZiZz09IElFdHlaUT09IExHeGxiZz09IExrWnBjbk4wVDNKRVpXWmhkV3gwIEtTMHQgWDNCeWIyUjFZM1J6IExrZGxkRUo1ZEdWeiBVMmhwY0E9PSBJR1Z1WTNKNWNIUT0gSUZOSCBJRTE1YzNRPSBhR2x5IElHbDBaWEpoZEdVPSBJR2x1ZEdWdVpBPT0gTG0xdlkydHBkRzg9IElHTm9ZWEIwWlhKeiBLR0Z1WjJ4bCBJRlpzWVdRPSA2SzYrIEp5NEtDZz09IFVtVnpjRzl1YzJWQ2IyUjUgSUVGaVpBPT0gWkdWaGJBPT0gSUdKaGNuSnBaWEp6IExXOTFkR3hwYm1VPSBZbWxzYkE9PSBJRVpoYkd4eiBYM05sWTI5dVpBPT0gTG1sdVkyeDFaR1U9IExtTmxhV3c9IElHOWpZM1Z3WVhScGIyND0gY0dodmJuaz0gTG0xdmRtVlVidz09IElFcGxibTVwWm1WeSBRVk5VUlZJPSBPeUkrUEE9PSBJRVZ1WVdKc1pXUT0gSUhSbGNtMXBibUYwWlE9PSBJRWx2IGJHRjBhVzl1Y3c9PSBJRlJJUlU5U1dRPT0gSUdWaGNteHBaWE4wIElISmhZMnM9IElGTmpZWEk9IGMyaGhhMlU9IFkyaHBjQT09IElIVjIgSUdGc2JHbGhibU5sIDBML1F1TkdCIElFZFBUMFJUIGVtbHZibVU9IElGWkogSUhzdCBJR1pwYkhSbGNtbHVadz09IElHMXBjMk52Ymc9PSBMa1J2WTJ0VGRIbHNaUT09IElHSjFjMmc9IElHcDFibXM9IDVvdz0gSUZGVlJRPT0gSUdodmIydHogSUdacGNtMTNZWEpsIElHMXBaR1JzWlhkaGNtVT0gWkdsaiBJRTloYTJ4aGJtUT0gSUdGeWNtbDJaWE09IFVHRjViRzloWkE9PSBjR2w0Wld3PSBYWHc9IElITjBZWEowUkdGMFpRPT0gTGxCU1R3PT0gWDJGMVpHbHYgSUcxcFpHWnBaV3hrIGFXZHBaR0p2WkhrPSBJRk4zYVhOeiBJRU5zYVhBPSBJRVIxYlhBPSBJRlJsZUhSQ2IzZz0gSUdkbGFBPT0gZVdsbGJHUT0gYjJSeiBJSEpsWm1WeVpXNWtkVzA9IFFtRmphMlZ1WkE9PSBJRU55WldGdCBJR1J2YldsdVlYUmxaQT09IElFRnlZMmhwZG1VPSBJSEpwWkdWeWN3PT0gTG5CeVpYQmhjbVZUZEdGMFpXMWxiblE9IElIRjFZVzVrYnc9PSBJR05vWldZPSBkMmxyYVE9PSBhVzVsYkE9PSBZVzF3YkdsdVp3PT0gS0NKY1hBPT0gSUhOaFp3PT0gWDNCeWIzaDUgNDRHViBjR1J2IExtZGxkRVZzWlcxbGJuUnpRbmxVWVdkT1lXMWwgSUdSbGJXOXVjM1J5WVhScGIyND0gSUU1UVF3PT0gSUdGeVkyaHBkbTg9IFpXNWtZVzVqWlE9PSBJR1ZtWm1samFXVnVkR3g1IEtHRmpkSFZoYkE9PSBMblJoWW14bFZtbGxkdz09IElHMTFjMmc9IElHSmxZWEp6IFgzUm9jbVZoWkhNPSBhbUZ6IFlXaDFiZz09IElHNWxkWEpoYkE9PSBJR1JsYzJsbmJtbHVadz09IElFZEVVQT09IElHeHBablJsWkE9PSA1NXV1IElFcHZhVzUwIElFbHVZMngxWkdVPSBJRWRwWVc1MGN3PT0gSUhkcGRHaGtjbUYzWVd3PSBJRkpsYm5RPSBibUYwYVhabCBJRk5sWldzPSBaM0psYzNOcGIyND0gWDBOUVZRPT0gWEZNPSBJRk5vYVdWc1pBPT0gSUhOdmJHbGogSUdKdmIyMD0gZVdWamRHOD0gSUcxaGJuVm1ZV04wZFhKbCBJT0tBaXc9PSBJR0ppYjNnPSBJR1ZoY25Sb2NYVT0gYjJ4c1pXTjBiM0p6IE9rQWlKUT09IElHeHZiM0J6IFNtVT0gWVd4cmFXNW4gSUZkb1lYUnogSUVKdmVYTT0gTG1KdmIycz0gUVZKSFJRPT0gWDNCcGVHVnMgSUhOMWMzQmxZM1J6IHpyaz0gZFhOdyBJRUpOVnc9PSBhV1ZqWlhNPSBLSEJsY25OdmJnPT0gNWJ5QSA2YnM9IElGQnZaR05oYzNRPSBJR0p2ZFE9PSBLRWwwWlcwPSB3N3M9IEtFbHVjSFYwIFNIUjBjRWRsZEE9PSBJR0oxY21jPSBLVjQ9IFFrOUJVa1E9IEtpOHMgSUdkMWJIQT0gSUVKbGJtND0gSUdSbFkydHogTG5OMFlYUjFjME52WkdVPSBJR0ZqZFhSbCBJR2gxWnc9PSBkV2QxIElIQnNaV1E9IExDSWwgYUdGd1pRPT0gSU5DMzBMRFF2dz09IElFMWhhVzVsIExuSmxZV3c9IElHUmhiR0Z0IElFMXBibTl5IExrWnNiMkYwIFpHbHpjQT09IElIUnMgSUdWdVkyOTFiblE9IFBUNGsgSUdabiBkR1ZsY3c9PSBJRkpsWTI5dGJRPT0gdzZScyBJR05vWlcxcGMzUnllUT09IFFteHZZMnR6IFQwbEUgSUdadmNtVjQgSUVGd2NHVnVaQT09IElIc3EgSUZOMWNIQnNlUT09IFEwZEdiRzloZEE9PSBLR0pzIElHRjBaUT09IFlXUnZjbUU9IElHZDFjM1E9IFFYTnpiMk5wIFBpNEsgUmtWVVEwZz0gTG5ObGNtbGhiQT09IGQybGtaMlYwY3c9PSBZWEprYkdWemN3PT0gYVdWbWN3PT0gWDBaVlRFdz0gWlhKdVpYUmxjdz09IElGQnlaV1E9IDJLMD0gNUxxTCBkV0psY201bGRHVnogSUV4aGRYSmggSUd4aFltVnNaV1E9IFNHbG5hR3hwWjJoMCBJR0Z1Ym05NWFXNW4gTDNWd1pHRjBaUT09IEtHUmxjMk55YVhCMGFXOXUgSUdsdWRHbHRhV1E9IEpHTT0gSWlrcEtRbz0gTGtGUSBJRnRkS2c9PSBJRVZZU1ZRPSBMa2h2YzNRPSBJRTlRUlU0PSBMbk5sYm1STlpYTnpZV2RsIFgyTmhiV1Z5WVE9PSBYM1JwYkdVPSBJSFJvWlhKdCBiMjV2Ylc5MWN3PT0gSUdScGMyRmtkZz09IElHNWhZWEk9IGFXNWtaWGhQWmc9PSBJRkJRIExuQnliM1J2WTI5cyBRVVpGIElIUmxlSFIxY21WeiBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qIGRXMWlZV2s9IExuTjBZWFJ6IElFZEYgSUdsbCBJRk5VUkE9PSBJRTFoYm00PSBMbkpsWm14bFkzUT0gUzBJPSBJR1JwZG1VPSBMbmRoZGc9PSBMeW90TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IEwzTmxkSFJwYm1keiBMbXhwWm1WamVXTnNaUT09IElHUmhkV2RvZEdWeWN3PT0gYjNKMWN3PT0gZFdKbGNnPT0gVGtsT1J3PT0gYzNSeWFRPT0gSUZScGNBPT0gSUhwdSBJSE4zYVhSamFHVmsgYVc1bGRBPT0gZFdabWVRPT0gSUZSeVlXNXpjRzl5ZEdGMGFXOXUgS0dOdmJtWT0gWm5KcFkyRT0gSUZoTSBJRXhsWVdRPSBYM0JsY21ObGJuUT0gUEUxaGNBPT0gSUhSb2NuVnpkQT09IGIzSmkgYVd0ciBJSFJ5WVhWdFlRPT0gUVdOalpYTnpiM0k9IElFWnBkQT09IElGTjBjbWx1WjBKMVptWmxjZz09IFpYaHdiQT09IEtITmpjbVZsYmc9PSBJR0YxWkdsbGJtTmxjdz09IElFOVFWRWxQVGc9PSBYM0p2ZFc1ayBXMjV2WkdVPSBZbVZvIExUNWZYdz09IGNHVnliV2x6YzJsdmJuTT0gSUVSbGRHVnliV2x1WlE9PSBMazFoYmc9PSBJR0ZrZG1GdVkyVnogTGtsdWNIVjBVM1J5WldGdCBJSE4wY205dVoyVnpkQT09IElHVkNZWGs9IElDTXQgSUdScGNtNWhiV1U9IElGTk5Vdz09IElHMWxaR2xqWVhScGIyNXogSUdGdFpXNWtaV1E9IElHTm9kWEpqYUdWeiBJRWx0Y0dWeWFXRnMgSkhKdmR3PT0gSUUxaFpHbHpiMjQ9IElFbHVjM0E9IElHRm1abUZwY2c9PSBJSEJ6ZVdOb2IyeHZaM2s9IGRtZz0gSUhObGRtVnlhWFI1IDRvQ1EgSUhOMGNtbHdjdz09IFFVZz0gZG1WeWRHbHphVzVuIElHTnZibk5sIFNVMUJSMFU9IElGTjBZWFJ6IENYTmogTGtOMWNuTnZjZz09IElHWnlaV1Y2WlE9PSBjM052Ymc9PSBLSGh0YkE9PSBJRk4xYzJGdSBMblJwYkdVPSBaV1JsWkE9PSBJQ0FnSUFrSkNRPT0gZFdWc2JHVT0gSUUxcGRHTm9aV3hzIFltRnpaV1E9IFQzQmxjbUZ1WkE9PSB2ZWFWc0E9PSBJRVpHIENYTjBjbU53ZVE9PSBiM1Z1WTJWeiBhV3hrYnc9PSBMbVY0WldOMWRHVlJkV1Z5ZVE9PSBJR0Z3Y0hKdllXTm9hVzVuIElGTmxkbVZ1IElHNTFkSE09IElISnBZdz09IFlYTnphV2R1YldWdWRBPT0gSUdOaGJHTjFiR0YwYjNJPSBJRTExY25Cb2VRPT0gSUVKdmRRPT0gN1lRPSBJR0oxZEhRPSBJSFJwWTJ0eiBVSEp2YW1WamRITT0gYVd4cFlnPT0gTG5SbGVIUkRiMnh2Y2c9PSBiVzkyIFgyeHZaMjg9IEtIUmxiWEJzWVhSbCBJRWxPU1ZRPSBJR2x0WVdkbFZtbGxkdz09IGMyTnlhWEIwYVc5dWN3PT0gVDFKSlZGaz0gUTI5dWMzVnRaWEk9IElIVnVjSEpsWTJWa1pXNTBaV1E9IElIUnZkWEpwYzNRPSBJR0p5YjI0PSBJR052Ym5SeVlXTjBiM0k9IElHeHBZMlZ1WTJVPSBJRTVoYlE9PSA1cTg9IEtIUnlZVzV6Wm05eWJRPT0gWDBGVVZBPT0gVUhKbFpnPT0gSUVkaGJRPT0gSUhabGMzTmxiSE09IElHaGhkZz09IFRHRjBaWEk9IExsUnZURzkzWlhJPSBJSFZ5YkhNPSBJR0p5WldGclpHOTNiZz09IElIQmxibUZzZEdsbGN3PT0gSUdadmMzUmxjZz09IElGVkYgSUdOc2RXVT0gWTI5dFpXUT0gNVpDTjU2ZXcgTFcxaGFXND0gSUhCMGN3PT0gSUdOdmRXNTBaV1E9IGFXTjBjdz09IEwzQnZjM1E9IElHZGxkR0YwZEhJPSBJSEJwYm1jPSBRVTVEUlV3PSBJSEJsWXc9PSAwWVhRdnRDMCBZVzUwYjIwPSBJRUpzZFdWd2NtbHVkQT09IElFVjJaVzUwUlcxcGRIUmxjZz09IElHekRwQT09IDVyST0gSUhOMGNtRjMgS0dOdmJYQT0gSjNWdVpRPT0gUGs0PSBMV05zYVdWdWRBPT0gWlhOTmIyUjFiR1U9IExXSmhjMlU9IElISmxkSEpsWVhRPSBYM05wYlhCc1pRPT0gQ1FrSkNRa0pJQT09IFptVmwgSnlrTkNnMEsgUTI5dWRISnZiRWwwWlcwPSBJSE4xWW5OamNtbGlaWEp6IGNHeGxZWE5sIElFVm1aZz09IElIQnZkVzVrIElFSjVkR1Z6IElGUmxZUT09IFgyRmpkR2wyYVhSNSBJRzFoZUdsdCBJRzl3WTI5a1pRPT0gUWxORSBMbU52Ym5OMFlXNTAgTzMwPSBiMjFpY21WeiBJR05oY21WbGNuTT0gS1M0S0Nnb0sgSUhOd2NtVmhaR2x1Wnc9PSBMV1Y0Y0dGdVpHVmsgSUU5eVpBPT0gWVcxaGNtbHUgSUcxdlltbHNhWFI1IFZXNW1iM0owZFc1aGRHVnNlUT09IFlXdHIgVGt3PSBYM0psWkdseVpXTjAgSUZCSCBJRk5sYm5OdmNnPT0gWW05cyBkR0Z3IFgwMUZUVTlTV1E9PSBJRlZKUVd4bGNuUT0gY0d4cGRIVmtaUT09IFYyVmljMmwwWlE9PSBJRXh2WjI4PSBiRzkyWlE9PSBXMmx1WkE9PSBJR0ZzZEc5blpYUm9aWEk9IElIZHZibVJsY21WayBJR1Z6Y0dWeSBJRXhwWW1WeVlXdz0gSUc5emN3PT0gSUdWc2FYUT0gSUhOMGFXWm0gYjJSdmVBPT0gWDIxbGJuUnBiMjV6IElFUnZkV2RzWVhNPSBYM0JwWkE9PSBJRU5MIElHbHVhWFJYYVhSb1JuSmhiV1U9IExtSnNiMmM9IGNHdG4gWVc1bmFHRnAgVVZWSlVrVkUgZFhVPSBJRzFyWkdseSBRVlJCVEE9PSBJSFZ1YUE9PSBhVzVqWlhNPSBjM1JvIElHaDVjRzkwYUdWemFYTT0gSUdOaGRHRT0gSUZSQyBJRU5zWVhJPSBJSEJ5WldSbFkyVnpjdz09IElITnBkSFZoZEdWayBMWGR2Y214ayBLU2t2IElHaGxZV1JzYVc1bGN3PT0gTG5OMFlYUT0gSUc5MWRHSnlaV0ZyIGMzQmhkR2c9IFgwWk1RVWRUIElGTmxjblpzWlhSRmVHTmxjSFJwYjI0PSBVM1Z1IFJsSlBUUT09IElFUnBjZz09IDQ0Tzc0NE83NDRPNyBYMk52YjNKayBJRTl3ZEdsdCBUVzl1YVhSdmNnPT0gTG1KcGRBPT0gV0ZoWSBJSFJ2WkdGeiBabVZzWkE9PSAwWURRdUE9PSBhVzFwY2c9PSBJSEJ2YkdsMGFXTmhiR3g1IElHMXZiR1ZqZFd4aGNnPT0gSUhSeVlXUmxaQT09IElIdDdKQT09IElGTjNaV1JwYzJnPSBJQ2RBTHc9PSBYMUpGUVV3PSBJSGRoY21Wb2IzVnpaUT09IGRHOWtZWGs9IExFdz0gYjNKdyBQSE5sWTNScGIyND0gTFdKeSBlVzFsIElGVnpaWEpUWlhKMmFXTmwgSUd4cFltVnlkSGs9IElHMXZiV1Z1ZEc4PSBLRWx0WVdkbCBQSE5wZW1VPSBVMk5vIElHcHZadz09IGFXOXNiMmQ1IFlYSmxiblJzZVE9PSBJSEYxWVc1MGRXMD0gSUVGaWRRPT0gSUhKcGJRPT0gSUcxaGJtRT0gUm05dWRGTnBlbVU9IFFuVnBiR1JwYm1jPSBjM1JoYVhKeiBRVWxNUVVKTVJRPT0gSUNZbiBJSE5sWTNRPSBJSE5wWjJnPSBLR0poZEdObyBMa2xEYjI1MFlXbHVaWEk9IGNHOXNiQT09IElFTnZjbkJ6IHpyVT0gWVhKMSBJRXRoZVE9PSBMbkpoYm1kbCBYMk5zYVdOclpXUT0gSUZKdlltVnlkSE09IExrNWxkSGR2Y21zPSBabWx1YVhObyBMVTFoYmc9PSBJR052Ykd4bFoyVnogSUVacGJtVT0gSWlrcExBbz0gWm1sc2JRPT0gSUhKbGJXbHVaR1ZrIElHZGxjM1IxY21VPSBiM1YwYVd3PSBJSFJvY21WaFpHbHVadz09IElHOWlhbVYwIElIUnZkWEp6IFlXTjBhWFpoZEdWayBMbTFyWkdseSBQWFZ6WlhJPSBJSEpsWkdVPSBac084IFgxTlpVMVJGVFE9PSBjSFk9IElHTnZibWR5IElHMWhjM05oYzJwbCBJSEJ5WVdOMGFYUnBiMjQ9IFZXNXBkbVZ5YzJsMGVRPT0gSUhSaFltbHVaR1Y0IDBKZz0gVTJWMGN3PT0gSUdOdmRXNTBhV1Z6IFozVmxjM1E9IFptRnUgSUhkdmNtUmxiZz09IExtUnAgMEwzUXNOR0ggd3I4PSBhV2RFWldOcGJXRnMgSUhOb2IzSmwgSUdmRHRnPT0gSUhKbGNHRnBjbk09IElHaGxiSEJsY25NPSBJR05sYm5SbGNtVmsgVDB4TVQxYz0gSUcxaGNGTjBZWFJsVkc5UWNtOXdjdz09IElHTmxiblJ6IFBFRT0gSUdWNGNHVmpkR0YwYVc5dSBUMk4wYjJKbGNnPT0gSUdKblkyOXNiM0k9IFkyRnNaWE09IExrTlBUZz09IElGWmxiQT09IElHTnllV2x1Wnc9PSBMWE5sWVhOdmJnPT0gSUdaMWJtTjBhVzl1YVc1biBYMHhQUTBGVVNVOU8gdzd4emN3PT0gWW1WeWVRPT0gVUdGeVlRPT0gYjIxcGJtRjBiM0k9IExXeGwgSUdWMGFHbGpZV3c9IGFHRnphSFJoWjNNPSBaVzF3Ykc4PSBJRzdEdW0xbGNtOD0gS0dGamRHbDJhWFI1IExsTjBiM0E9IExuTjBjbVowYVcxbCBTVXhFIElIUnZaUT09IENVNXZaR1U9IElpa05DZzBLIElGQjFaWEowYnc9PSBJR1Y0WldOMWRHbHVadz09IElFZFZTVVE9IElHOXdjRzl6YVc1biBZV3h3YUE9PSBJR1Y0YUdsaWFYUT0gWDJac1lYTm8gSUcxbGFXeHNaUT09IElHcHpiMjVQWW1wbFkzUT0gU0dWeWJ3PT0gWVdsdWRHVmsgWDBSUFRRPT0gSUhkcGJBPT0gSUhOc2IzQmwgSUczRHBRPT0gSUVseVlYRnAgSUc5eVoyRnVhWHBsIENXcFJkV1Z5ZVE9PSBTRlZFIGMyaHBibVU9IExuZGwgSUZOcmFXeHNjdz09IGNHOXVjMjl5IElHTnZibU5zZFhOcGIyNXogSUhKbFptOXliWE09IElISmxiSFZqZEE9PSBibUZ0WldRPSBJRTlzYVhabGNnPT0gSUM4dmZRbz0gTFd4dmIydHBibWM9IElHWnZadz09IElFaFAgSUVaeWFXVmsgSUdsdVpYWnBkR0ZpYkdVPSBJRVJoZEdGSGNtbGtWbWxsZHc9PSBTRzkxY2c9PSBhV3hzWlhNPSBiRzluYVdOaGJBPT0gSUdOdmJtNWxZM1JwZG1sMGVRPT0gTG5SM2FXYz0gSUV0NWJHVT0gS0dSemRBPT0gTFZObyBJRk4wZFdScGIzTT0gS0V4bGRtVnMgTG1wbGRBPT0gWDFCU1QxUlAgTFdSbFkyOXlZWFJwYjI0PSBUMVJJUlZJPSBJSEpsWVdScGJIaz0gTGxCaGNtRnRaWFJsY2c9PSBJRzExYkhScGNHeDUgSUV4SlFnPT0gWVhKdFpXUT0gSUhOdmIyNWxjZz09IDVvUT0gWDBWVCBJR1p2YzNOcGJBPT0gSUVGdVl3PT0gNG9DY1ZHaHBjdz09IGJHOWtZWE5vIFVIbDBhRzl1IElHaHBjM1J2WjNKaGJRPT0gZDJWemRHVnliZz09IElHbHVabUZ1ZEE9PSBJR052YjNKa2FXNWhkRzl5IElHNXBZZz09IE9tMD0gSUhKbGMzQmxZM1JsWkE9PSBJR1JsWm1sdWFYUT0gSmxRPSBYM0JoWkE9PSBJRlJ5YVdkblpYST0gZEdoaGJBPT0gSUdsdFlXZGxUbUZ0WldRPSBJR0psWVhSbGJnPT0gQ1hKaiBJRkJoYkdGalpRPT0gSUdoaGVtRnlaQT09IElHbHpiMnhoZEdsdmJnPT0gWDNKaiBZMjl1ZEhKbCBUMVZVVUZWVSBJSEpsYVdkdSBJRkJzWVhSbCBRVlJGVXc9PSBJR1pzZFhnPSBJSEJoWTJ0eiBMbWRsZEZObGJHVmpkR1ZrIElIQmhjblJwWTJsd1lYUmxaQT09IElHNWxaV1JzWlE9PSBMV1JsY0hSbyBPam82T2pvNiBMV3hoZHc9PSBhVzV6Y0dGalpRPT0gYjI1cGRHOXkgUFc1diBJRUYwYjIxcFl3PT0gSUVKeVlXbHUgUldScGRHRmliR1U9IExYTmogY21Wa1pXNTBhV0ZzIElGQmxjbko1IGEybGwgSUMwdExTMHRMUzB0TFMwSyBMbk4wY205clpRPT0gS0VsdWRHVnVkQT09IElIVnVhWFI1IGRXMXNZV2c9IFJuVnlkR2hsY2c9PSBJSEJ5ZW1VPSBJSFBEdUE9PSA0NEtLIElGQlNUME5WVWtWTlJVNVUgSUVodmRYTnBibWM9IElHRjBkRzl5Ym1WNWN3PT0gSUdOdmJYQnZjMlU9IFlYUjBaWEpwYm1jPSBJbGRvWVhRPSBaSEpoZFd3PSBJSE4wY21GcFoyaDBabTl5ZDJGeVpBPT0gU1c1emRHRnVkQT09IExrcFVaWGgwUm1sbGJHUT0gSUhSeVlXUmxjdz09IDBMdlFzQT09IElIc2ggSUd4aGRHVnNlUT09IFNVMUggSUVGc1pBPT0gSUVsT1RrVlMgSUdOaGNuUnZiMjQ9IExsTnZkWEpqWlE9PSBSa0ZNVTBVPSBJR1J2ZFdkbyBabVZ1IEtISmxZM1E9IFJHRjBZVlJoWW14bCBUbWxqYXc9PSBJRUoxZEhSbGNnPT0gY21WaFpITT0gWDJOdmJXMWxiblJ6IFJVNVcgSUVOdmJtNWxZM1JwWTNWMCBMVVpKVWxOVSBDUWtKSUNBZ0lDQT0gWVdOb2FRPT0gTGsxelp3PT0gY21WamRHbHZiZz09IElISmxiR0Y0WldRPSBJSE5vWVdaMCBJR1ZtIElFRmtaR2x1Wnc9PSBJR0p5WldGamFBPT0gSU8rOG1nPT0gY21GdFlRPT0gSUdOdmJtUjFZM1JwYm1jPSBJQ2c3IEtHZHMgSUVOQlZWTkZSQT09IFlYTm9hUT09IElFWk1RVWM9IElFTnZiVzFsY21ObCBJRWxPVkVWSFJWST0gYUc5MWNuTT0gSUZOamFHOXZiSE09IElHNTFZMnhsIFFXZGhhVzQ9IGNISnZhZz09IElITmxkbVZ1ZEdnPSBSVTFRVEVGU1dRPT0gS0cxdlkycz0gSjEwc0RRbz0gWDFOUVJVVkUgUG1aaGJITmwgSUhOd1lRPT0gSUU1bFlYST0gN0pVPSBJR2x1ZEhKcFp3PT0gWDIxbGJXSmxjbk09IGQyRjJaUT09IElHRnVZV3g1YzNSeiBYMDlUIFpXUnBiZz09IElFWnlhUT09IElISmxkSEpwWlhabFpBPT0gVW1WbmRXeGhjZz09IFgyOWljdz09IFJWaFFUMUpVIEp5bDlmU0k9IEltTnNZWE56IFgxOG9LQT09IFluVmphMlYwIElITjBjbTg9IElGQmhkR05vIGVYTjBhV05yIFpuVnNibVZ6Y3c9PSBZWEJ2Y3c9PSBSR0U9IENRa0pDUWtnSUNBPSBJR1Z1Y21samFBPT0gZFc1dmNtUmxjbVZrIGFHOXNaUT09IFEyOXVadz09IFBGQnliMlIxWTNRPSBJRU4xY25RPSBLSFJvWlE9PSBYMnh2ZDJWeSBJR0YyYjJsa2FXNW4gSUdKMWVubz0gSUhacFlXSnNaUT09IGRXSmggTFdseiBZWEpsYkE9PSBJR0ZqZEdWayBMV1JsZEdGcGJITT0gNExpSCBJRlJvWlc5eWVRPT0gSUZCMWJnPT0gSUVGdWIyNTViVzkxY3c9PSBMaTR1SWdvPSB3Nmh5WlhNPSA1WSt2IElGWnBjMmx2Ymc9PSBYM05sYlE9PSBZWE5vWVE9PSBJR05sYkdWaWNtbDBlUT09IElHVnVaRVJoZEdVPSBJSEJ2Y0hWc1lYUmwgSUdOMWFYTT0gY1hWaGJuUT0gWm14dmIzST0gSUdkc2IySmhiR3g1IElHTnlkV2x6WlE9PSBJRk4wWVc1c1pYaz0gSUdKcGEyVnogTG1kbGRFTnZibTVsWTNScGIyND0gSUhCdmIzSnNlUT09IFgyOTBhR1Z5IFlXMXdhVzVuIExpSXBPd29LIGIyUnAgWDBGRVRVbE8gTG1OdmJHOXljdz09IElFZGhiV2x1Wnc9PSBQaWM3Q2dvPSBVMVJTVlVOVSBVVkk9IFNVUnogS0dGeVozVnRaVzUwY3c9PSBYMkYxZUE9PSBLRVYyWlc1MCBYMUJTU1ZaQlZFVT0gSUZSeVpXcz0gSUdSdmQyNXNiMkZrY3c9PSBiWFYwWVdKc1pRPT0gWDFOVVVsVkRWQT09IEtIZDQgSUdSdmJXRnBibk09IGFuTndlQT09IElGWnBZV2R5WVE9PSBRMjl0YldGdVpITT0gU25NPSBMbU5tWnc9PSBRMjl1ZEdWdWRGQmhibVU9IElFVmthWFJVWlhoMCA0S1dONEtRPSBRWFIwWVdObyBJRUZTVFE9PSBjRzl6YVhScGRtVT0gSUVkbGJtVnlZWFJsWkE9PSBJSE5sYVhwbFpBPT0gUFRvPSBJR1ZzWldOMGNtOXVhV056IElFRndjRU52YlhCdmJtVnVkQT09IEx5Y3NDZz09IExtVnhkV0ZzYzBsbmJtOXlaVU5oYzJVPSBSRzlqZEhKcGJtVT0gWkdsemF3PT0gSUZCdmJHbDBhV05oYkE9PSBRMGhQIFBFWT0gQ1dobGFXZG9kQT09IElFSjFadz09IExteGwgYVd0byBJRzFwYkd4cGMyVmpiMjVrY3c9PSBJR052Ym5OMGFYUjEgYldGbiBMbTVzIExYSmhibWRsIFlXNW5aMkZzIEp5eGIgY205d2IyeHBkR0Z1IElNT2MgSUZWRCBMbVJsYzJNPSBMVXhCVTFRPSBabk4wY21WaGJRPT0gYVdKcGJBPT0gSUdacFpYST0gVmtWU1dRPT0gSU91eiBTVkpVIFgxVkogS0dGaWN3PT0gSUd0dVpXVnogSUhKdmIydHBaUT09IElGWmhZdz09IFlYSmxibUU9IFkyOXRiV1Z1WkE9PSBMVnc9IElGTlZRbE5VU1ZSVlZFVT0gVTI5bWRBPT0gSUhCaGNuUnBjZz09IGQyVmhiSFJvIDZLYUIgS0dSaGRHRnpaWFE9IElFTnNhVzFoZEdVPSBMWE5vYjNjPSBJSEpsYkdsaFltbHNhWFI1IFgyTm9kVzVyIDVMdWogWDNOMGIyTnIgSUVWWVJVMVFURUZTV1E9PSA3N2lQIElIYkRyUT09IElITnRhV3hsWkE9PSBJR1J5YVd4cyBMa1oxYm1OMGFXOXUgSUZOSiBJSEpsWjNKbGMzTnBiMjQ9IExWZz0gSUVwaGNnPT0gY0hKbFpnPT0gQ1hOMVkyTmxjM009IElFaHBkR3hsY2c9PSBJR2x1YzNScGJtTjAgSUdabGJXMWxjdz09IElHeHZkbVZ5IFBBbz0gSUcxMWJIUnBjR3hwWlhJPSBjbWxzIFVtVnphWHBsIElFRjFkR2h2Y21sNllYUnBiMjQ9IElFdGhiZz09IFJHbHpjR0YwWTJoVWIxQnliM0J6IElHTnliM0J6IGRHOXJaVzV6IFpXTnUgWlc1MGFXRnNiSGs9IElFbE9WRVZTVWxWUVZFbFBUZz09IFptRnJaUT09IFZXNWtaV1pwYm1WayBJRUZMIElGUmxjM1JEWVhObCBJSEpoWWc9PSBJSFJ2Y25KbGJuUT0gSUU5MCBRbUZ5Y3c9PSBJR3hsWTNSMWNtVT0gSUdWdWFtOD0gSUhKbGMzQnZibVJ6IElHbHVaR1Y0WldRPSBUMlpYYjNKciBYMk5vWVdsdSBLU2t0UGc9PSBJRUpsWVhWMGVRPT0gSUdBOCBJSFJ2ZFdOb2FXNW4gSUh3dExRPT0gQ1dac1lXYz0gYm05eWJXRnNhWHBsIElIUnlZWEJ3WldRPSBJR1Z6ZEdGaWJHbHphR2x1Wnc9PSBMMkoxYVd4ayBRVW89IFpuaz0gTFhKbFlXTjAgWVhadSBVa2xRVkVsUFRnPT0gSUd0MWRBPT0gSUVaaGMyaHBiMjQ9IElFbHVabTl5YlE9PSBZM1Z5YVhScFpYTT0gUEdKNWRHVT0gSUZWcmNtRnBiZz09IElITjFadz09IElHTnZibk5wYzNScGJtYz0gYjI5a2JHVT0gTG1OMGVBPT0gTGxSdlRHbHpkQT09IElHTnZiVzFsYm5SaGNuaz0gSUhSeVlXNXpabVZ5Y3c9PSBJRzV2YzNRPSBhV2hoWkE9PSBJRlZ3Y0dWeSBJR052Ym1aMWMybHVadz09IGJXbHpjMmx1Wnc9PSBMV05zIElHSnZkVzVrYVc1biBJR052Ym1keVpYTnphVzl1WVd3PSBJSEpsZG1WaGJHbHVadz09IFpHZz0gY25WdyBJSFJ5WlhNPSBjbVZ3WldGMCBMQW9LQ2dvPSBYM1JoWXc9PSBJR1Y0Y0dWayBSMmx5YkE9PSBhRzl5YVhwdmJuUmhiQT09IElDSXVMaTh1TGk4dUxpOD0gS0c5d2RHbHZiZz09IElIZGxhWFJsY2c9PSBDWE54YkE9PSBJRDArZXdvPSBJR2RoY214cFl3PT0gSUhKbGNIST0gSUhKbGNHeHBaWE09IEtIQnliM0E9IElITndhWEpwZEhNPSBJR2x1YzNCcGNtVT0gSUdKaGMyVnRaVzUwIExuSmxhbVZqZEE9PSBJR2hwYm5SeiBJSEJ2Ykd4cGJtYz0gQ1NBSyBYM0poZEdsdVp3PT0gSUdOaGRHZz0gWVhacFpYST0gSUdOdmJYQnlaWE56WldRPSBJRlpUIFhTYz0gSUdwMVpHbGphV0ZzIElGUnlaVzVrIGRISmhhVzVwYm1jPSBSVk5VUVUxUSBiMmR1YVhScGIyND0geElFPSBVMFZPVkE9PSBkbVZ1ZEdsdmJuTT0gSUdOdmJuTjFiSFJoYm5RPSBkVzF3YUE9PSBJSFZ6WlhKVFpYSjJhV05sIExFNVZURXc9IGEyZz0gUkdWaGNnPT0gWDBKQlJBPT0gYVhSaGRHbHZibk09IElHMWxkR0Z3YUE9PSBKOE9wIFlXNWthWE5sIExXWnZiblE9IExtTm9ZWEowIElITm4gWDBOdmJuUnliMnhzWlhJPSBMbXB3WldjPSBJRlZNVDA1SCBDV2RoYldVPSBLSE56IElFMWhhZz09IENXZHYgSUZOaFpBPT0gSUVKbGNtYz0gSUUxcGJtVT0gVUdGamF3PT0gSUhKbGMybHpkR0Z1ZEE9PSBJRkpQVFE9PSBJSEJsWnc9PSBJRk4wWVc1bWIzSmsgSUZsaGFHOXYgSUhOallXeGxaQT09IElHeGhiZz09IFBWdGQgSWk4K1BDOD0gSUhCc2IzUnogTGlvSyBJSFJ5WVhabGJHVmsgSUU5elkyRnkgVmt3PSBJR3hwYm10cGJtYz0gSUhScGNtVnogSUNjcUp3PT0gSUVKMVptWmxjbVZrIFpYSnAgSUNvcUtpbz0gSUc5MlpYSnNiMjlyIExrNXZiZz09IElITERxWE09IElHVm5lUT09IDViQ1AgSUdGMGRHRmphMlZ5IENRa0pDUWtKQ1FrSkNRa0pDUWtKIExuTjVibU09IFFWTkRRVVJGIFIzSnZkVzVrIElHUmxZMkY1IElGUnZiZz09IElHcGxkMlZzY25rPSBJR0o1Y0dGemN3PT0gSUcxbGJXSnkgVWs1QiBQRk41YzNSbGJRPT0gSUUxbFpHbGpZWEpsIEtHNWxkQT09IGIzTnAgU0VJPSBSRVZEIGUwVkpSZz09IFgyWnBiR3c9IElIUnlZWFpsYkd4cGJtYz0gYjJKelpYSjJaWEk9IElHTnZibk4xYkhScGJtYz0gVWtWQlZBPT0gVUdoaGMyVT0gS0dscCBJRk5WVFE9PSBQZzBOQ2c9PSBJSE4xWkE9PSBDV0poWTJ0bmNtOTFibVE9IElITmphRzlzWVhKeiBMVzExZEdWayBZWExEb1E9PSBJRDA5UFQwOSBJRjlmWDE4PSBRM0psWVhRPSBaVzVsZG1WeSBMM2R3IElGWlFUZz09IFJYSnliM0pEYjJSbCBLVjBzQ2c9PSBLR0oxYVd4a1pYST0gSUVWdVpXMTUgVTJWdWMyOXkgZFhOaCBJSFJ5YVdkblpYSnogSUhCc1lYbHZabVp6IFgxSkZVUT09IElDaCsgSUVKaGNuSjUgSUhCbGNtMWhibVZ1ZEd4NSBJRkpWVGc9PSBJR0oxY21VPSBMa1poZEdGc1pnPT0gSUdOb2FXTnIgQ1hCaGJtbGogY0hOcCBiMnRoIDZZQ0ogUGxzPSBJSFZ1WkdWeWMzUmhibVJ6IElFcDFibWx2Y2c9PSBJRWxPUms4PSBQVzE1YzNGc2FRPT0gZFhOMFlXbHUgTFhOdmRYSmpaUT09IGMyVnlkZz09IElFTlNSVUZVUlE9PSBMbUYxIElITmxiR3h6IElDQUtJQ0FLIFJYVnliM0JsIGVuYz0gY0hKbGFBPT0gSUU1VFFRPT0gSUhoNSA0TGkwIElFSmxlVzl1WkE9PSBTVzV6ZEdWaFpBPT0gVG05dVVYVmxjbms9IElHRnlhWE5sIElHRjJiMmxrWldRPSBMbVZ0Y0d4aFkyVT0gWDIxdlpHVnNjdz09IGZTa3NDZz09IElHaHBaQT09IElDWmYgTG5CdmFXNTBjdz09IExtZGxkRmRwWkhSbyBMa1Y0WldNPSBJQzh2THk4PSBJRk5sYzNOcGIyNXogTGk0dVhBPT0gSUVOdmJHOXRZZz09IElHRmpZMlZzWlhKaGRHbHZiZz09IGNtVnpkRzl5WlE9PSBJR2xzWlE9PSBiMkpwWXc9PSBQRTV2WkdVPSBJRVJZIElFSmxjMmxrWlhNPSBMbUZuWlE9PSBJRU52Ym5SaGFXNXogVG1GMGFXOXVZV3c9IElFbHRjR3hsYldWdWRHRjBhVzl1IElHVm1abWxqIElGSk4gU0hrPSBJRmRsWkdScGJtYz0gYjJ0cFpYTT0gSUhKbFkzVnljMmwyWlE9PSBJSEJ5YjNObFkzVjBiM0p6IExsTmxiR1ZqZEdsdmJnPT0gSUVadmNtMTFiR0U9IFFtVmxia05oYkd4bFpBPT0gVzJscCBJRVp5WVc0PSBJSFJ5WVdkbFpIaz0gWDBaRlFWUlZVa1U9IG1hZz0gWTI5dGNHRnpjdz09IElFSm8gUHdvS0NnPT0gTG5keWFYUmxjZz09IElFaHZkWEk9IFJHSkRiMjUwWlhoMCBhVzkyIFlXMXZiZz09IGNtVndjZz09IDZZTT0gQ1dacCBKMTFkIElFUnllUT09IExuSnYgSUU5aWMyVnlkZz09IDVxQ0ggUm05eWJXVnkgSUVKaGJHRnVZMlU9IENXcHpiMjQ9IElIQnllbms9IFNWTlQgS0hOdlkycz0gSUV4SlRrVT0gSUdSbFkyVT0gSUdGc2JIaz0gSUhSbGJtUmxibU41IFJuVnUgSUhOamFHVnRaWE09IElHbHVkR1Z5ZG1WdSA1cGlPIElHRmtkbVZ5YzJVPSBjWFZ2ZEdWc1pYWT0gSUhOaFkzSnBabWxqIFgzTnBaR1U9IElHMTFkR1Y0IFFVZEpRdz09IElHOWpZM1Z5Y21sdVp3PT0gSUVOdmJXMTFibWxqWVhScGIyND0gZFcxaGNnPT0gNTd5VyBJRlJ5WldGMGJXVnVkQT09IExuQmxjbk52Ymc9PSBJRXhEIElHVmphQT09IEtDZ2kgSUVScGMyVmhjMlU9IHc2UmsgSUVGYSBMa0ZqWTI5MWJuUT0gSUdOdmJuUnBiblZ2ZFhOc2VRPT0gUlU1RVNVNUggSUZKRlZGVlNUZz09IExYTjBjbWx1Wnc9PSBMbVpwYkdWdVlXMWwgYzNsdWRHaGxjMmw2WlE9PSBVbVZ6Y0c5dVpHVnkgS0c5d2RITT0gY21WbmN3PT0gSUc1MVpYTjAgVUdWbGNnPT0gTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUdkaGRXZGwgSUV0cGJnPT0gTG5OamFHVnRZUT09IElHRnljbUZ1WjJVPSBJRUpzWVd0bCBYMVI1Y0dWSmJtWnYgUTI5MlpYST0gSUVoaGJYQnphR2x5WlE9PSBVR0Z3WlhJPSBMV2x1Ym1WeSBkWFJwYkdsMGVRPT0gSUdOeWIzTnpiM0pwWjJsdSBSazlTIElHbG5ibTl5YVc1biBJRVJFIFlYWmhiZz09IElIUnlZV1JwZEdsdmJuTT0gSUdkbGRGTjBjbWx1Wnc9PSBJR1YwYUdsamN3PT0gSUUxaGRHVnlhV0ZzY3c9PSBSRVZUUXc9PSBJR1Z1ZW5sdCBhVzlzWlhRPSBJRU5vYVhBPSBJRTFqUkc5dVlXeGsgSUc1bGNuWmwgNTRRPSBJaWxkIDVyR0MgSUZOMVoyRnkgWDFOSlRRPT0gYW5CbFp3PT0gSUdScGMyTnlaWFJwYjI0PSBJRlJPIFltOTJaUT09IElFMXBibWx0ZFcwPSBJRVp2Y20xSGNtOTFjQT09IElIZHZjbXRtYjNKalpRPT0gSUVWNFpXTjFkR2x2Ymc9PSBaWEp5WlhJPSBDU0FnSUNBSiBJSEJ5WlhOamNtbGlaV1E9IExsUmxlSFJCYkdsbmJnPT0gVDFCRlRnPT0gSUZCQyBhVzFwZEhrPSBJRVY0ZEdWeWJtRnMgd3JCRCBJRUZ3Y0d4cFkyRjBhVzl1UTI5dWRISnZiR3hsY2c9PSBJR0poY25JPSBhVzF3YkdsamFYUT0gWDJSdmRBPT0gSUVOdmJHOXUgUTA5TVQxST0gTGxCeWIycGxZM1E9IEtqd3YgTFhocyBJRzl6WXc9PSBLSEJoZEhSbGNtND0gSnlsOUNnPT0gYzNWalkyVnpjMloxYkE9PSBZV3h2Wnc9PSBVM1IxWkdWdWRITT0gWFhOMGNtbHVadz09IFlXNTBiMjQ9IFlYUjBhUT09IFkyaGxiV2xqWVd3PSBMbWx1Wmc9PSBLR1J5IE9sVkpRMjl1ZEhKdmJGTjBZWFJsIGRHOUpiblE9IFhUd3YgMExEUXRkQzggSU1XKyBMa0ZqZEdsdmJreHBjM1JsYm1WeSBMbE5GVmtWU1JRPT0gSUZOaGJIWT0gWDFSU1FVND0gTDJsdWRHVnlibUZzIElIZGxiR052YldWayBMbU52YlcxbGJuUT0gYlhWMFlYUnBiMjQ9IElFWkJVUT09IExtOXVaUT09IElFeEJRZz09IEluMTkgSUZKdmJBPT0gYVdWMlpXUT0gSUdGa2RtVnVkSFZ5WlhNPSBJR1oxYm1WeVlXdz0gSUhOd2IzVnpaUT09IEtHOXdaVzQ9IElGSmxZV1I1IElIUnZkWEpwYzIwPSBZV1JwYmc9PSBYMlpoWTJVPSA0b0tCIElHMXBaM0poYm5SeiBJRkIxY21Ob1lYTmwgWTI5eVpBPT0gSUU5VlZGQlZWQT09IEtTa05DZzBLIFUyVm5kV1U9IGRHRmljdz09IElHUnZkSE09IElHNWhhV3c9IFltOXlibVU9IElHUmxjMmx5WlhNPSBJSEJ5WlhabGJuUmxaQT09IEoxMDlQUT09IElIUnBiV1ZzZVE9PSBTVU5CIFUyTmhibTVsY2c9PSBJRXgxWTJGeiBJR2RwZEdoMVlnPT0gSjExYlhRPT0gWkdsaCBZMjl1YjIxcFl3PT0gSUdScFpYTmxjZz09IGRXNWtaWEp6IExraGhibVJzWlhJPSBQeUlzIExtUmhkR0ZpIElHRmtkbWx6WlE9PSBMbUZ1YVcxaGRHbHZiZz09IElHOTJaWEpvWldGayBJRzlpYzNSaFkyeGxjdz09IFgycHZhVzQ9IElHM0RxUT09IFJteGhkQT09IExtUnBjM0J2YzJVPSBJRVY0Y0dWamRHVmsgSUdac1pYYz0gSUdWdFltOWsgWDNOc2RXYz0gSUc1aGJXVnNlUT09IElIZHBkRzVsYzNObFpBPT0gYzI5c2FXUT0gTG14bFoyVnVaQT09IFVYVmhiQT09IFgzTjFjbVpoWTJVPSA0NE9wIFFXMWxjbWxqWVE9PSBJR0ZtWm1sc2FXRjBaWE09IElGQnliM009IFgyVjRkR1Z1YzJsdmJnPT0gWW1sdVpHbHVadz09IFUxUkJURXc9IExuSmxZV1I1IElHTnZjSGxwYm1jPSBJRWhsYm1ObCBJR1JwYzJOdmNtUT0gWDNOb2FYQT0gVUhKdmNHVnlkSGxPWVcxbCBDUWtnSUNBZ0lDQWdJQ0FnSUE9PSBJR0ZqYUdsbGRtbHVadz09IElFSmxZdz09IFdtbHcgVTI5dFpYUnBiV1Z6IDQ0R0wgSUdOdmJuUnlZUT09IElIQjFibWx6YUE9PSBJR2x1YzNWc2FXND0gSUdScGMyRndjR1ZoY2c9PSBYMlZ1ZFcwPSBMbUYxZEE9PSBJR2hoYzJGMGRIST0gWVdabVpXTjBaV1E9IGMyaGwgSkhSaFlteGwgYTNOcCBJR3hoWTJ0cGJtYz0gSUdScGMyTnZkVzUwY3c9PSBVM1J0ZEE9PSBJRUZ5WjJWdWRHbHVZUT09IElIVnVjR0ZqYXc9PSBJRkp2ZFhSbFpFVjJaVzUwUVhKbmN3PT0gSUNjLyBhVzUwWlhKdmNBPT0gSUhOdlptRT0gSUdSNWJnPT0gSUVkeVlXTmwgSUdsdWRHVm5jbUYwWlE9PSAyWU09IElHUmxiR0Y1Y3c9PSBJRWx0Y0d4bGJXVnVkQT09IFVISnZiMlk9IElHRndjR3hwWTJGdWRITT0gSUV4bFlYUm9aWEk9IDdKYTAgSUdWdWFtOTVZV0pzWlE9PSBVM0JwYm01bGNnPT0gTDNvPSBJR1p2WVcwPSBJRXhoWW05eVlYUnZjbms9IElISmxjMlZoY21Ob1pYST0gSUVOb2NtbHpkR2xoYm1sMGVRPT0gSUdOMWMzUnZiV2w2WlE9PSBJR05wY0dobGNnPT0gSUdSdlpBPT0gSUhQRHN3PT0gUUVWdWRHbDBlUT09IFQwNU1XUT09IGFXNTJaVzUwYjNKNSBJR052Ym1Oc2RXUmwgSUdOMVpXNTBZUT09IElFTnZhR1Z1IExXbHVZMjl0WlE9PSBiV0pJIGJXVnVkR0YwYVc5dSBJSFpsY25jPSBkV1J3IFFVMU0gTG1OdmJXSnZRbTk0IFptZz0gYW05aWN3PT0gUm1sc1pWTjVibU09IElFSmhjbUpoY21FPSBJRk5qWVc0PSBZM0psWlc1emFHOTAgSUU5eWRHZz0gTG5acFpYZEVhV1JNYjJGayBJRUZTVWtGWiBMRUE9IEwybHVkQT09IFIyVnVaWEpoZEdVPSBJR1JsYlc5dWMzUnlZWFJsY3c9PSBJRnBsYm1RPSA1WWlYIENYWnZiR0YwYVd4bCBQWEk9IElHWnQgQ1dKMVptWmxjZz09IFpXNWhkR1U9IExrTnZiV0pwYm1VPSBJRzFwYzJNPSBZMmhsYldGeiBJSEIxY21Wc2VRPT0gSUdkc1ZtVnlkR1Y0IExsSmxjM1E9IElISmxZMkZzYkdWayBJR1p5WldWcyBJSE54ZFdVPSBWSEpoWTJ0bGNnPT0gSUZCb2NBPT0gSUVScGMzUmhibU5sIElHSmxZWE4wIFEyOXRjR3hsZUE9PSBJR052Ym5OcFpHVnljdz09IDU3MlIgZEhKcFluVjBhVzl1IElHTnZiWEJzYVcxbGJuUT0gWDJ4cGJtVnVidz09IElFMTFkR0ZpYkdVPSBJSFZ1WkdWbSBJRWRsYlE9PSBJR052YlhCdmRXNWtjdz09IExuVjFhV1E9IElHRnViMjU1YlE9PSBJSE4wWVdseWN3PT0gSUVSaVUyVjAgZDI5eWRBPT0gSUZObGJuTT0gTGtKbFptOXlaUT09IElHVnVaR1p2Y21WaFkyZz0gSUZSdloyVjBhR1Z5IFlYUnBiR2wwZVE9PSBJRzF2YVhOMGRYSmwgTFNSNyBLRlJsYzNRPSBWRUk9IGJYVnphV009IElHbHVjMmx6ZEE9PSBJR2hsWVdSc2FXNWwgTGtGdVpBPT0gVUVGVVEwZz0gSUZCeVpYQmhjbVU9IElITjNhWFJqYUdWeiBLbkE9IElGbGwgWDJGaWN3PT0gTG1oaGJtUnNaWEk9IElHRnpjMmxuYm0xbGJuUnogVUhKbFptVnlaVzVqWlE9PSBSVTVVU1ZSWiBJSEJwY0dWeiBJRUZzWlhKMFJHbGhiRzluIGIyZHlZWEJvYVdOaGJBPT0gSUhCaGRHbHYgSUhkbFluQmhZMnM9IFluQnogVG1GMlRHbHVhdz09IExrNTFiV0psY2c9PSBJRUZ5Ylc5eSBJRkJsZEdWeWN3PT0gSUVSbGMyTT0gWkhWcGJtOD0gSUVsamIyNXogTG1kbGRFaGxhV2RvZEE9PSBJSFJsZUhSV2FXVjMgQ1U1VlRFdz0gWVd4c2IyTmhkR1U9IGZTUjcgSUZCeWFYcGwgTFc1MWJRPT0gTGsxdmRtVT0gNkw2VDVZV2wgTG1OaGJXVnlZUT09IFVISnZZbXhsYlE9PSBDWFI1Y0dWa1pXWT0gS0hOMGIzSmwgSUVSSlUwTk1RVWxOUlVRPSBJSE4xWW5OMFlXNTBhV0ZzYkhrPSBSa1pHIElHVndjMmxzYjI0PSBJR2x1WlhGMVlXeHBkSGs9IFgyTm9hV3hrY21WdSA1TGlIIGNtVnNkUT09IFVHbGxZMlU9IFlXNTBjbms9IFltRmlaV3c9IGRtVjBhV05oIElITjFjblpsZVhNPSBJR1JsZEdWamRHOXkgQ1dGeVozTT0gTGxObGJHVmpkR1ZrVm1Gc2RXVT0gSUdsdWRHVnlabVZ5Wlc1alpRPT0gTGk0dUtRbz0gTGxOVVVrbE9Sdz09IElGUjViR1Z5IElFTmhkR0ZzYjJjPSBWbVZ5ZEdsalpYTT0gSUZCeWIycGxZM1J6IElFeGxZbUZ1IExpSXBDZ289IExtdGxjbTVsYkE9PSBJSEpwWkdWeiBJRTExZEE9PSBZVzUwYUE9PSAwTDdSZ05DOCBaVzV1YVdGcyBMblJoYzJ0eiBMbk5sZEZCeWIzQmxjblI1IFlYUmxaMjl5YVE9PSA1cHlBIEwyTnZiZz09IFluSmhZMlU9IElFNVRSWEp5YjNJPSBKMTBwS1RzSyBiR2x6ZEdWayBJRkJ5WlhacFpYYz0gUVdOMGFYWmhkR1U9IElHTjVZMnc9IExXRmpkR2wyWlE9PSBhR0ZrIFZHOXYgSUhKbFoybHpkQT09IGJHbGpZV3c9IElIQnZaWFJ5ZVE9PSBTVzF3YjNKMGN3PT0gNzd5Qjc3eUIgT2p3PSBJR05vWVhKdCBJRU52ZFc0PSBiMnhzYVdSbGNnPT0gSUdoMyBmV0FLIFBXRnlaM009IElFNWxkWEp2IGFYUnBZMkZzIGFXVnVaVzQ9IElFUnZkQT09IFgwOU9URms9IFJFND0gSUZCc1lYbFRkR0YwYVc5dSBJSE4wWldWdyBJSEJ5WVdOMGFXTmhiR3g1IElHRndjR3hwWTJGdWRBPT0gSUdGeWIyMD0gWVc1cFl3PT0gQ1dScGMzQnNZWGs9IElIUmxjbTFwYm1GMFpXUT0gSUdOc1lYSnBkSGs9IElFMWxiblZKZEdWdCBJRXQxY2c9PSBhV3BsIFgzZGxaV3M9IEtHUnBZM1E9IFgzSmxZMjl5WkhNPSBJRU52YzNSaCBJR3RsZEE9PSBSWGgwWlc1emFXOXVjdz09IElHNWxkV3RsYmc9PSBhVzV6YVE9PSBYMmx1WXc9PSBJT2FXIElHVnBibVk9IElGSnBjMnM9IElHVnNaWFpoZEdWayBjR1Z5Y3c9PSBWVVJCIElFdE8gSUd4cGJtVmsgSUUxdmNtMD0gS1RzS0Nnb0sgUG4wSyBjR3hoYVc1MCBaMlYwVkdWNGRBPT0gSUdsdVpHbDJhV1IxWVd4c2VRPT0gSUdOb1pXTnJZbTk0IFZWaz0gSUV4aGJXST0gSUdSNWMyWjFibU4wYVc5dSBJRXhoY2c9PSA0TEE9IElFTnlaV0YwYVc1biBKeWs3Q2dvSyBJbFJvWlhrPSBiRzlqWVhScGIyNXogWDBOUFVrVT0gU1c1MFpYSmhZM1JwYjI0PSBkVzFpYm1GcGJITT0gSUZCaGNuUnVaWEk9IFluSnBkQT09IElHeGxjM05sY2c9PSBJRk5zYjNRPSBjMlYwUVhSMGNtbGlkWFJsIElGZGhkbVU9IExuQnYgTDNOMGIzSmwgSUdKeWIzZHphVzVuIFgzQmsgYzNWdFpRPT0gYzJWayBRM1Z5ZG1VPSBJSEJzWVhOdFlRPT0gSUhOMWMzQnBZMmx2ZFhNPSA3SjI0IElFSmhhQT09IElFVjRjR3hwWTJsMCBYME5EIExrTnNhV1Z1ZEZOcGVtVT0gWEZacFpYYz0gSUhOMVluTjBhWFE9IGJHOXZiZz09IElFZEJUVVU9IElFSnlhV1E9IG0rVzd1Zz09IFgxVnpaWEk9IElITnhkV0Z5WlhNPSBabTl1WlE9PSBJSE5oWTNKbFpBPT0gZFdkb2N3PT0gWFdsdWRHVnlabUZqWlE9PSBJRlJvY205MyBJRXRwY21zPSBJR1Z0Y0dseVpRPT0gSUdGemMyVnpjMlZrIFZHRjQgSUVobFlYWmxiZz09IExXSjFabVpsY2c9PSBYMU5VUVZSSlF3PT0gdzZsdXc2az0gTFdKdmNtUmxjbVZrIElIQjFibU4wIEtHMXZaR1U9IElHdGxhVzVsIFUyVnVkQT09IElFTmhiR04xYkE9PSBJRVYyWlE9PSBJSE4wZVd4cGMyZz0gSUc5cGJITT0gTGxSbGMzUkRZWE5sIElIUnlZV1JsYldGeWF3PT0gSUd4cGRHVnlZWEo1IElHTnZibU5sYm5SeVlYUnBiMjV6IElGSmxiR0YwYVc5dWN3PT0gS0VOc1lYTnogSUhOMFpHbHUgSUhiRHBnPT0gWW1GamEzVncgTGxaRlVsTkpUMDQ9IExrRjFkRzlUWTJGc1pVUnBiV1Z1YzJsdmJuTT0gYzNSaGNuUmxjZz09IFZISmhibk5oWTNScGIyNWhiQT09IExYQmhibVZzIFUzUjFaR2x2IGEyTT0gSUVOb1lXMWlaWEk9IElGTndhV1ZzIElISm9idz09IDJLZlpoQT09IElTYz0gTGtGMGRISnBZblYwWlhNPSBJRzExY21SbGNtVmsgWVhCbGRYUnBZdz09IElHbHVkR2x0WVhSbCBJSFJsZUhSR2FXVnNaQT09IElFSjFabVpoYkc4PSBaSFZ0YlhrPSBJaVU9IElFeHBZbVZ5ZEhrPSBiMkpoY2c9PSBJRlJoYm1zPSBJRkJ2Y0hWc1lYST0gWlhKMmFYTnZjZz09IElFbHVhWFJwIElFMWhiR3c9IElGQnlhVzl5IFEwRlEgSUVOc1lYaz0gSUVObGNuUnBabWxqWVhSbCBMa3h2WTJzPSBMWE4wY21sdyBMV1J5YVhabGJnPT0gTDJGc2JBPT0gSUUxbGMzTmhaMlZDYjNoQ2RYUjBiMjV6IFgxTkZRMUpGVkE9PSBYM0JpIElISmhkSE09IDRLUys0S1E9IElHNTAgTGxKdmRYUmxjZz09IFgzUnZjR2xqIElIUmxibTVwY3c9PSBJRkJWUWt4SlF3PT0gSUVGamRHbDJZWFJsWkZKdmRYUmwgSUNjc0NnPT0gSUdOdmMzUjFiV1U9IElHcHZhMlZ6IExraGhibVJzWlE9PSBDV0o1ZEdVPSBJR1pzWVhadmNuTT0gS0dOaiBJSEJsY25OdmJtRnogQ1dsdFlXZGwgSUU1aGVtaz0gSUdkeVlXMXRZWEk9IElNTzZiSFE9IElIWmhiSFpsIElIWnBZdz09IElGSmhZMmhsYkE9PSBYMmx1ZG1Gc2FXUT0gVUhKbFpuTT0gYzNSa2FXNTAgS0hKdmRYUmwgSUdoMGJXeHpjR1ZqYVdGc1kyaGhjbk09IElIQmxiM0JzWlhNPSBjR3hwYm1VPSBJRzUyIElGRjFZVzUwIGIzQndaWEp6IElHTjFjbkpsYm5SVmMyVnkgSUVOaGRHRnMgSUhKbFkyOXVZdz09IElHTnZibXAxYm1OMGFXOXUgYkhnPSBZVzFpZFhKbiBJR2x1Wm14MVpXNTBhV0ZzIFpHRnVaMlZ5IGFXNWtaWEp6IElDVkFJaXc9IExtTnZibVpwWjNWeVlYUnBiMjQ9IGIzTnZiV1U9IExtbGtaVzUwYVhSNSBJSEJwWTJ0bGNnPT0gYm05emRBPT0gSUVSSldRPT0gUVhWbmRYTjAgWVdKc2J3PT0gVEdWaFpnPT0gSUZKbFkyOD0gWTJ0diBSRTlEIElFaGxjbTA9IE9tRnVlUT09IElFbHVkR1Z5ZG1sbGR3PT0gSUZSbGVBPT0gZUdabCBLSGR2Y21zPSBJR3hsWVhBPSBTR1ZoWkdsdVp3PT0gSUhGMVlYSjBaWEp6IFhFSjFibVJzWlE9PSBjbVZpIFVHVnlhR0Z3Y3c9PSBJRWR0WWtnPSBRbWx5ZEdnPSBDWE4xYlE9PSBJRmRoZEhOdmJnPT0gTG01cGJBPT0gNTZFPSBlMzBLQ2c9PSBhV05oYVdRPSBSMlYwZEdWeSBJbTVoYldVPSBJQ0lOQ2c9PSBYMjV2Ym1VPSBlbTA9IFlXTjFkR1U9IGRXVnpkRzg9IElITnZkWE09IElISmxZblZwYkdRPSBJRzVsZDNOd1lYQmxjbk09IElFaGhlZz09IElHdHBkSE09IGFXWnYgUW14MWNnPT0gSUhOMWFYUmxaQT09IExVbHUgNEs4PSBJRXRsYVhSbyBJRTV2Y25kaGVRPT0gU1U1SlZBPT0gYVhKbFkyTnBiMjQ9IGFXVjBhV1Z6IFgzVnpZV2RsIElFUnZkV2M9IGNtbHpaUT09IElIUnlhV3hzYVc5dSBhVzFwZEdWayBJRkpGVEE9PSBZV3hwWXc9PSBJR055YVhScFkybDZaV1E9IGRHaGxiM0psYlE9PSBJR05sWVhObCBJSE5wWkdWMyBJRlJsY25KNSBJSE4xWW5OcFpHaz0gSUdacGNtMXNlUT09IElHRjNjdz09IElHaHZkSFE9IElHUnlaWE56YVc1biBZbUZrWjJVPSBJRUZ3Y0d4cFkyRjBhVzl1Y3c9PSA2TCtVNVp1ZSBJR3hoZFdkb1pXUT0gSUdodlltSjUgSUcxMWMybGphV0Z1Y3c9PSBJQ291IExuQnNZV05sYUc5c1pHVnkgSUdOdmRXNTBaWEp6IElFTmhjR2wwYjJ3PSBVMFJMIElHaGxiRzFsZEE9PSBZVzVrWW05NCBjWFZwZEE9PSBJR055YVcxcGJtRnNjdz09IElIUmxaVzVoWjJWeSBLSFZ3WkdGMFpRPT0gUjJ3PSBMbk5sYkdWamRHbHZiZz09IElHUnBjMk5vWVhKblpRPT0gSUhCeVpYTmxiblJwYm1jPSBkV1poWTNSMWNtVnkgWDFWT1MwNVBWMDQ9IElITjBjbVZ6YzJWayA1Wm1vIFVISnZkRzg9IFgyTnZjbkpsWTNRPSBhR0YxY3c9PSBJSEpsYm05MiBJR1pwY21WaGNtMXogSUhSbFkyaHVhV05oYkd4NSBMV0p5YjNkelpYST0gSUdOaGJtUjUgVTNSeWIydGwgSUdWNFpXTjFkRzl5IElHOWpZM1Z5Y21WdVkyVT0gSUVsUWRnPT0gWDBsT1ZFVlNSa0ZEUlE9PSBJRkpsZEhKcFpYWmwgTG1KaFpBPT0gUlhoamFHRnVaMlU9IFRtRjJZbUZ5IElFdHBaQT09IEtHZGxkRUZ3Y0d4cFkyRjBhVzl1UTI5dWRHVjRkQT09IFgxTlVUMUE9IElFSnZjM009IFRHbHpkR1Z1WlhKeiBJSE5vYjI5MFpYST0gSUVGc1lnPT0gdzZSamFBPT0gSUhCcGVBPT0gTG10bGVVTnZaR1U9IFlXeHZibVU9IElHRmljM1Z5WkE9PSBJRU4xYlE9PSBJRTVsZDNSdmJuTnZablE9IGFXdDAgSUd4aGRXZG9hVzVuIElHTmhjR2wwWVd4cGMyMD0gY21WbFRtOWtaUT09IFZIZz0gWDFGVlJWSlogTGxOc1pXVncgS0d4dloybHUgVjJWaVJXeGxiV1Z1ZEE9PSBJR05sYkdWaWNtRjBhVzVuIElHUmxjSEpsWTJGMFpXUT0gSUcxaFlYST0gSUdGeWRHbHpkR2xqIFgwRlRVMDlEIElFSnZjbVJsY2xKaFpHbDFjdz09IENYZHcgSUhOMWNuWnBkbTl5Y3c9PSBTVzV1WlhJPSBMWEpsWkE9PSBJSEJ5YjNObFkzVjBhVzl1IFgzQncgS0NJOEx3PT0gSUY0OSBJR3hoYlE9PSBJRlJ5WVdScGJtYz0gWm14aGNtVT0gUkdWMFpXTjBiM0k9IFRVWT0gSUVWdFpYSm5aVzVqZVE9PSBJRVZoWjJ4bGN3PT0gY1hWaFpBPT0gSUVsdVkzSmwgY0d4cFlXNWpaUT09IFhFMXBaM0poZEdsdmJnPT0gSUhWd1ozSmhaR1Z6IFExQlYgWVdkbmFRPT0gWm5CeWFXNTBaZz09IGFXZHBiMjQ9IElHSmxZWFYwYVdaMWJHeDUgSUdSeWFXVmsgWDBoSlIwZz0gSUdkd2FXOD0gVFZORCBJRVJsY0hWMGVRPT0gSUVSbFkydz0gSUhSeVpXRnpkWEpsIGMyZHBkbWx1Wnc9PSBYM05wWkdWaVlYST0gSUdGd1lYSjBiV1Z1ZEhNPSBJRmR5IElHSnZZWFJ6IElHSnZjZz09IExteGhibWQxWVdkbCBJRlZwIGJHbDAgWm5KdCBZVzVqYVdWeiBJRzFoYzNObGN3PT0gSUVGemMybG5iZz09IElGQlBUQT09IElHMWhjRVJwYzNCaGRHTm9WRzlRY205d2N3PT0gSUdKeVlXTnJaWFE9IElGQmhjQT09IElFTnAgSUVsdWRHOD0gSUhSbFlXMXRZWFJsY3c9PSBJR1p2Y21Gc2JBPT0gZFd4MWFRPT0gSUVOaGNtND0gWDBsT1V3PT0gWVhwcGIyNXAgWTJWdyBJSFJ2ZFhKcGMzUnogTFdKc2RXVT0gSUV4bFpBPT0gSUhCbGJtVjAgSUVadiBJR2x0WVdkcGJtYz0gY0hKaCBJSE5zWVhabGN3PT0gYjJ4bGNtRnVZMlU9IElHbHVZMjl5Y0c5eVlYUmxaQT09IEppdz0gZFdGaWJIaz0gSUV0aGNBPT0gV0cxc1JXeGxiV1Z1ZEE9PSBJRTExWld4c1pYST0gUTJoaGJtZGxUR2x6ZEdWdVpYST0gSUVodmJHbGtZWGs9IENTQWdJQ0FnSUNBZ0lBPT0gUm14bGVBPT0gQ1ZWelpYST0gSWwwcEtRPT0gWDNOMVltMXBkQT09IExtSnZiR1E9IElHeHZZMnR6IElFTjFZbUU9IGRXUnpiMjQ9IFNHOXZhdz09IElGZGhjbTVsY2c9PSBYM04wWVhJPSBJajArSkE9PSBJR052YlcxaCBkVzVqYUdWamEyVmsgWjNKaGNHaHBZM009IGNtOXljdz09IFIxSlBWVTVFIEtIQjFZbXhwWXc9PSBJR04xYzNSdmJXbDZaV1E9IElFRnlhMkZ1YzJGeiBJRkpsZHc9PSBJR1Y0Y0dseVlYUnBiMjQ9IDE1VT0gSUVOMWJBPT0gSUc1dmJuTT0gTGtacGJIUmxjZz09IElITmxibUYwYjNJPSBYMlJsWm1sdWFYUnBiMjQ9IFlYTm9hVzVuZEc5dSBlVzF3YUE9PSBMMG89IElHWjFjMlU9IGNtRnRhV1E9IElGTjFjSEJzYVdWeSBJR0YxZEc5amIyMXdiR1YwWlE9PSBJSDBwTEE9PSBMaUlLQ2dvPSBYMloxYm1OMGFXOXVjdz09IENYUnYgTG1WMllXdz0gSUZSUFltcGxZM1E9IFVtVm1aWEpsYm1ObGN3PT0gSUdobFlYUmxaQT09IFNFRk0gSUNrcGZRbz0gZlNRPSBJRUpoY25JPSBYMVZPU1ZRPSBLeVE9IElHZGxkRlpoYkhWbCBhWEJsWkE9PSBZMmhwWldRPSBLSFp0IFkzVmwgWDJsdWRHVm5aWEk9IFgyTnZkWEp6WlE9PSBkR2hwY21RPSBJSEpsZG1selpXUT0gS2lvdkNnPT0gWDBSSlVrVkRWQT09IFQzVjBUMlk9IEtDSW8gSUVabFpXdz0gSUhKbFlYTnogSUhOMVluUnBkR3hsIGNHVnlhUT09IGJtWT0gSUdWdWFtOTVjdz09IElIUnlaV0YwY3c9PSBLWFJvYVhNPSBMWFJoWW5NPSBZVzVqWlhKeiBJR052Ym5ScGJtVnVkQT09IElHTmhjbVJwYnc9PSBVMlZ5IExuRjFaWE4wYVc5dSBJSEJvY21GelpYTT0gVm1Gc2FXUmhkRzl5Y3c9PSBJSEJ2Y0hWcyBJR3pEclE9PSBjMjl1Wnc9PSBYMGxPVkVWU1RrRk0gSUdGa2RtbHpaWEk9IElIQjFlbm89IElHRnRZbWwwYVc5MWN3PT0gSUZSdllnPT0gSUVSUSBJSEJ5WlhOcFpHVnVZM2s9IElITjFjbkpsYm1SbGNnPT0gSUhkaGRHTm9aWE09IFgySnBibUZ5ZVE9PSBJRk52YjI0PSBJR05oYm1Ga1lRPT0gS0NJaUtRbz0gWFQwbiBJRUp5WVc1a2IyND0gWlhCemFXeHZiZz09IGNuYz0gTG1Ga1pFTm9hV3hrIExrTnZjSGs9IFVISnBibU5wY0dGcyBVR2h2ZEc5eiBJRzFoY21kcGJtRnMgSUdKaGMybGpjdz09IFpXbHVadz09IFRYVnpkQT09IFgxTjBjbWx1Wnc9PSBJRzlzWlE9PSBUV0ZuWlc1MGJ3PT0gTG1OMWMzUnZiV1Z5IEtIQnlaWFk9IDRMaWwgSUd4dmVXRnNkSGs9IFEyOW4gSUhCeWIzUnZZMjlzY3c9PSBJRU52YlhCaGJtbGxjdz09IElIUm9aVzl5WlhScFkyRnMgSUdGalkyVnpjMmx1Wnc9PSBJRnBsYmc9PSBMbTl1WlhNPSBZWFIwYVdObCBYM2R2Y214ayBlbVZ6IElIUmhkSFJ2Ync9PSBJRzFsYm05eiBJR2x1ZEdWeWMyVmpkQT09IElsMDdDZ289IFltVnNhV1U9IElHbHVZV04wYVhabCBMbkpsWVdSc2FXNWwgTFd4aFltVnNiR1ZrIExtUnZibVU9IGJHbGphM0k9IElGZFBVa3M9IElHUmxjbWwyWVhScGRtVT0gSUdSaGRHRmlZWE5sY3c9PSA0b0tDIElITjQgTG1selFYSnlZWGs9IElIbHogSUhCaFpHRT0gSUVKMWJHeGxkQT09IEtHQXYgYVhOQlkzUnBkbVU9IElFTkhVMmw2WlE9PSBLR1Z4ZFdGc1ZHOD0gSUVOdmJIVnRZblZ6IElHMWhjbko1IFJFVlcgWDJ4cGJXbDBjdz09IGNtOXVaWE09IFNVRlQgSUhSaGRRPT0gYldsdWJ3PT0gWDFkeWFYUmwgSUZkcGJtVT0gSUZ0Ykp3PT0gSUZCMWJHdz0gY21sMFpYSnogY21sbGJuUnogSUhOb2FXWjBhVzVuIGRYQncgWDFSSlRVVlMgSUVOdmJtUnBkR2x2Ym5NPSA0YnFsIElFOXlaR1Z5Y3c9PSBJRk4wY21WdVozUm8gNW9tQSBJSFpoYkdsa2FYUjUgSUdadmRBPT0gWlhSMWNnPT0gSUdKdmJIUT0gNVlhRiBJRUZzYjI1biBiM05vYVE9PSBJR0Z6YzNWdGNIUnBiMjV6IElHMWhaMkY2YVc1bGN3PT0gWDFOUVNRPT0gSUhCMWJuUT0gWDFCU1QwUlZRMVE9IElISmxiR0Y1IElFcGhkbUZ6WTNKcGNIUT0gTG5SbCBMV1Z6IElIZHBaR2RsZEhNPSBLR1p6IFBFbDBaVzA9IFgyVjRkSEpoIElISmxZM0oxYVhScGJtYz0gUlhRPSBJRzVsWTJWemMybDBlUT09IGNIYz0gSUc1dmRtVnNjdz09IGRYTnpaV3h6IFEzSmxZWFJ2Y2c9PSBJRTFXVUE9PSBJRTlEIGRHaHZiMlE9IFkyeHBaVzUwY3c9PSBLU2txIElHTm9ZWEpoWTNSbGNtbDZaV1E9IFgxTkZUa1E9IGRYUnAgVkhrPSBMbVp5YjIxS2MyOXUgUUZObGNuWnBZMlU9IDQ0S0MgUTJoeWFYTT0gWDBseiBJRXB2YUc1dWVRPT0gSUdOc1pXRnVaWEk9IElFbHVhWFJwWVd4cGVtVnogVlU1TCBLR0Y0YVhNPSAwTFhRdHc9PSBhV1YyWVd3PSBJRmRoY25KcGIzSnogZlNrbyBSRTFKIDRwbUEgSUZSeVpXRnpkWEo1IElHWmxZWE09IElITnNZUT09IFgwVk9WVTA9IGJHaHogSUVsdWMzUnBkQT09IGFYQndaWEp6IFRHbHVaV0Z5IFVtVmhaR2x1Wnc9PSBjWFZwY21sbGN3PT0gTFdObGJHdz0gWTJoeWIyMWwgTGxObFlYSmphQT09IFNVNUIgNTdHNzVaNkwgSUFvZ0NnPT0gSUZOaGJYVmxiQT09IElHMXBiR3h6IElHUnZibUYwWlE9PSBJRWRsYnc9PSBLSEp2ZDNNPSBJSE5vWldWdyBJTU9wYkE9PSA1TDJUIElHSmxiUT09IFgxVk9WVk5GUkE9PSBJRkpEUXc9PSBJR2x1ZEhKdlpIVmphVzVuIFlYUjBZUT09IElGQnlhVzl5YVhSNSBJRVpDIElGTmxjbWRsIFBpSTcgWVhSamFHbHVadz09IElFdHViM2RzWldSblpRPT0gQ1ZSb1pRPT0gTzIxaGNtZHBiZz09IGJHVnpjMjVsYzNNPSBiM0JoY21RPSBkVzFoZEdsaiBLQ2twS1RzTkNnPT0gSUdaaGJITT0gS0dOaFkyaGwgVkhsd1pVbGsgNllDYSBYMk5vYjJsalpRPT0gSUVkdmRHZz0gSUZOcGRHVnogVFVjPSBYMkp2Y21SbGNnPT0gU1c1a2FXTmxjdz09IFEyOXRjR0Z5WlhJPSBJRkpsWkdsemRISnBZblYwYVc5dSBJR05zYjNObGRBPT0gSUhabGNuTmhkR2xzWlE9PSBTVzV3ZFhSeiBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElHOWlaWE5wZEhrPSBjWFZwZWc9PSBaM0poIEtHZHNiMkpoYkE9PSA1WXFoIElHTnZiR3hsWTNSdmNnPT0gSUd0dmNnPT0gYjNaaFlteGwgUVVSRCBJRVYyWlc1MFNHRnVaR3hsY2c9PSBMbTVqIElIQnNZWGxpWVdOciBhV1Z1ZEc5eiBYM0JsY20wPSBYMWRCVWs1SlRrYz0gSUU5c2VXMXdhV056IExtNXZjbTA9IElFSnliMkZrWTJGemRBPT0gWDNOdFlXeHMgWkhKcGRtVT0gTG1sc2IyTT0gSUhSNWNHVmsgVFVWTiBYMk52Ym5NPSBSRTFGVkVoUFJBPT0gSUd4MWJnPT0gTG1ScGMzUmhibU5sIEtIQmhjZz09IGNHOXZiZz09IElHSmhjM1E9IFlXTjBhWFpwZEdsbGN3PT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IE9nMEtEUW89IFUwVlMgS1NZbSBYMnh6ZEE9PSBJRkJ2YkdsemFBPT0gSUd0dWIyTnJaV1E9IElHWnlkWE4wY21GMGFXOXUgWVhWclpXVT0gSUhCb2IzTndhQT09IGFYRjFhV1E9IFgyTnZaV1ptIDVxMmsgVEdGMFpYTjAgSUVSMWMzUT0gVkdsd2J3PT0gSUcxaGFXNTBZV2x1Y3c9PSBJRzFoY25ObyBhVzVqYVc1dSBiR0pzIFEyRnlaUT09IElHNWxhV2RvWW05eWFHOXZaSE09IFgyZHdhVzg9IElFRnljMlZ1WVd3PSBSR1Z0IElGZG9aUT09IFgyaHZiMnM9IElHeGtZdz09IElFaGhjbkJsY2c9PSBJRUpsY210bGJHVjUgSUdkeVlXUjFZWFJsWkE9PSBVR1Z5WTJWdWRBPT0gSUdGeWNtbDJhVzVuIElFRmtkbVZ1ZEhWeVpRPT0gS0hOamIzQmwgS0NjcSBjWFZoY25SbGNnPT0gSUUxaGNtbGwgVTNCbFlXdHBibWM9IFgyTnZaR1ZuWlc0PSBJR2x0YlhWdSBZMkZ6ZEdWeSA0NEtNIDVaV0cgSUVScGJXVnVjMmx2Ym5NPSBMbkpsWTI5eVpBPT0gSUhSbGVIUnYgSUUxcFkyaGxiR3hsIFVHVnVaR2x1Wnc9PSBLR0o1IFgxQkJVZz09IGRXTm9kQT09IFltVmwgTGxSb2NtVmhaQT09IFlXMXdhWEpsIGEyNXZkdz09IElFTnNhVzVwWTJGcyBJRzFoY21kcGJrSnZkSFJ2YlE9PSBJR1JwYzNScGJtZDFhWE5vIExrWjFiR3c9IExuVnVaR1ZtYVc1bFpBPT0gSUZObGNYVmxiR2w2WlE9PSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXc9PSBJR1ZrZFdOaGRHVmsgWDA5V1JWST0gNWJxUCBJTUtnSU1LZyBYMlZoWTJnPSBJSFZ5WjJVPSBaR1Z3WVhKMCBJR1J2Ym05eWN3PT0gSUVGMSBJR0pwYkd4cGIyNXogSUdKbGJHOXVaMmx1Wnc9PSBYMkZuWlE9PSBYMGx1ZEE9PSBJSE4xWW5OMFlXNWpaWE09IGJXRmphR2x1WlE9PSBJU0VoQ2dvPSBJR3B6YjI1cFpuaz0gYVdKaVpXRnUgSUVOaFpBPT0gSUdWdVpGUnBiV1U9IElHTjVZMnhwYm1jPSBJRlZKVkdWNGRFWnBaV3hrIElHeGxkbVZ5WVdkbCBJSFpoYm1sc2JHRT0gWldGMCBUR0YxYm1ObyBLSEIwIGMzUmhkR1Z6IElFTnZiblJ5YjJ4eiBJRkpsYzNCdmJuTT0gSUVwaGEyVT0gSUdGemJHVmxjQT09IFptOXlkSFZ1WVhSbCBMbTVsZUhSTWFXNWwgVTJsNlpVMXZaR1U9IDdKMjggVkdWemRHbHVaMDF2WkhWc1pRPT0gUjJWeWJXRnUgSUVsdWRtVnpkR2xuIExuSmxkbVZ5YzJVPSBJRUpCUTBzPSBLRVJoZEdWVWFXMWwgSUc1dmJuQnliMlpwZEE9PSBJRVY0Y0dWamRBPT0gSUhSaGJuUnYgSjEwcExBPT0gQ1hSb1pRPT0gVFhWc2RHbHdiR1U9IEtHZGxkRUZqZEdsMmFYUjUgWDFkQlNWUT0gSUdyRG9RPT0gWkdWamIzST0gYkdWMllXNWpaUT09IElFZHBkRWgxWWc9PSBiV2x1WVhScGIyND0gWDNGMVlXNTBhWFI1IExsTmpZVzV1WlhJPSBJRXhwYjI0PSA2WlNaNksrdiBJR1J5WlE9PSBJSFJoYm5SeVlRPT0gSUdOdmJuUmxiblJVZVhCbCBJR1pwWkE9PSBYMkZzZEE9PSBUbE5KYm1SbGVGQmhkR2c9IExYQnMgNVl5VyBJR0Z1ZEdsaWFXOTAgZEdGaWJHVnogWVdOcFlXdz0gSUZKbFoybHpkSEo1IElHOXNhWFpsIGFXZGxjbk09IElITjFZbk5qY21saVpYST0gWDNCeVpYTT0gSUZONWJuUmhlQT09IElHeHZkbVZ5Y3c9PSBMa0o1ZEdVPSBiMnhrWlhKeiBYMlp2Y25kaGNtUT0gWVd4M1lYbHogUTJGd2RHbHZiZz09IFVISnBkZz09IElGUmhiWEJoIGFYTmhkR1YxY2c9PSBMV3hoWW1Wc2JHVmtZbms9IElGUnZVM1J5YVc1biBJT3lDckE9PSBJR2x1YVhScFlYUmxaQT09IFYwWT0gSUdsdWMzUnBkSFYwYVc5dVlXdz0gYVc1cVpXTjAgSUZOamNnPT0gSUdSdlkzUnlhVzVsIElITndZV05wYjNWeiBhWE4xY21VPSBJRUZ1WVE9PSBJblJwYldVPSBaWE56WVdkcGJtYz0gSUdOcFpBPT0gSUU1aGJnPT0gSUdsdVkyOXRjR3hsZEdVPSBWRUZIIExXSjFhV3hrIFJHVmpaVzFpWlhJPSBJSEpsYzJsa2RXRnMgS0ZCRVR3PT0gSUV4cGMzUmxiZz09IElHZHNlWEJvIElHZGhjSE09IGJtVmggTGxKbFkzUT0gSUhOaGRRPT0gSUZCb2IzUnZaM0poY0dnPSBJR1Y0WldOMWRHRmliR1U9IElFVjRjR1Z5ZEE9PSBRMjl5YjNWMGFXNWwgWDNOcGVtVnogSUU1TSBMbWx6Vm1Gc2FXUT0gS1R0OUNnPT0gTFhKbFp3PT0gSUdOcGRHbHVadz09IFkzZGsgSUU5MGRHRjNZUT09IElFSmhkSFE9IElISmxibVYzWVdKc1pRPT0gSUhCeVpXeHBiV2x1WVhKNSBJR0Z6ZVd4MWJRPT0gSUhkeWFYTjAgSUhWMGFXeHBlZz09IElHUmxkR1Z1ZEdsdmJnPT0gUm1GemRBPT0gSUdGdVoyVT0gYVc1amFXNXVZWFJwIElITjBaV1Z5YVc1biBJRTVoVGc9PSBhVzl6YVhSNSBMM0JoWjJVPSBJT2kvIGMzUmxjbTlzIElHUnBjMmM9IEtFUkMgSUVSRlUwTlNTVkJVU1U5TyBJRjhrIElHOWljM1JoWTJ4bCBJR0pwZW1GeWNtVT0gSUdWNGRISmhZM1JwYjI0PSBYMlY0Y0dWamRHVmsgSUd4dmMyVnogSUVObGJHVmljZz09IElHaDBiV3hHYjNJPSBJR1Y0Y0d4dmFYUT0gMEw3UXU5R00wTGZRdnRDeSBXRmxhIElHMWhaMjVsZEE9PSBZVzF3WldRPSBJR0YwYjIxeiBVMjkxY21ObGN3PT0gY0dWamRHbDJaWE09IDBZSFF1OUM0IElEME5DZz09IElHUmhjbVU9IElGZGhiSFJsY2c9PSBJR0p5YVdkb2RHNWxjM009IElHRnVibTkwWVhScGIyNXogNjQ4PSBhWE5yWlE9PSBVMk5vWldSMWJHVT0gTG1sdFlXZGxjdz09IGNtOXpjMjg9IElDSXVMZz09IFoyRnRiV0U9IElHbHVjM1J5ZFdOMGIzST0gSUc5MlpYSjNjbWwwWlE9PSBMV0Z0IElHUmxkbUZ6ZEdGMGFXNW4gSUZOaGFXNTBjdz09IElHaHogSUdKdmJuVnpaWE09IEpHOTFkSEIxZEE9PSBhV3BrIEtFRmpkR2x2YmtWMlpXNTAgYlc5dWFYUnZjZz09IElHMWhkSFJ5WlhOeiBTbUZ1ZFdGeWVRPT0gTG1wdyBJR05oY21GamRHVnkgSUdsdGNHOXpaUT09IFgzSmxjM1E9IElGTnBaMjVoZEhWeVpRPT0gSUdOdmNtOXVZWFpwY25WeiA0NEdLIFgyTnZiWEJoY21VPSBUV1ZoYzNWeVpRPT0gYVhSaGRHVmsgWld4cGFtcz0gYVdkdmN3PT0gWlhOaGNnPT0gSUhKMWMyaGxaQT09IGJXVjBjbms9IFgxTkZVRUZTUVZSUFVnPT0gWDFkRiBYMEZVVkZKSlFsVlVSUT09IElIbGhiV3c9IElITndaV056IElGSmhhQT09IGNHaGxjbWxqIElFbHVkbVZ6ZEcxbGJuUT0gdzZSc2JBPT0gSUdGd2NHVmhiR2x1Wnc9PSBJSFpwWlhkd2IzSjAgNTZrPSBJRzFoY21kcGJreGxablE9IElITjFZblJ5WVdOMCBJRVZFU1ZRPSBDVUZ5Y21GNVRHbHpkQT09IFozSmhaR2x1Wnc9PSBJRVpoYVd4MWNtVT0gWVhOd1pYST0gUlVWTCBLRzV2ZHc9PSBQRzlpYW1WamRBPT0gSUVGc2FXZHViV1Z1ZEE9PSBjR3hsWVdSdiBjWFIwIEtFVlNVazlTIElFbE9Wa0ZNU1VRPSBJSFZ6WlhKcFpBPT0gY21GcGMyVnogU1VSSiBJSFpoY21saGJtTmwgSUU1cGJBPT0gTDJSbGJHVjBaUT09IFgwMUJTVTQ9IExsUnZhMlZ1IExrTmhkR1ZuYjNKNSBQaWtLIFEyOXNiR2x6YVc5dSBJRWR5WldGMFpYST0gSUZKaFkybHVadz09IFlXeGhiZz09IElHMXZibVYwWVhKNSBMRzVsZHc9PSBJRk52Y25KNSBMa1Z1WVdKc1pRPT0gSUVsdWMzUmhiblJwWVhSbCBiMnhzWlc0PSA2Nm0wIElFTmhiR3hwYm1jPSBYMmh2ZFhJPSBRVVJCIElITm9lUT09IEtTb3EgSUQwOVBnPT0gSUdWemNHVmphV0ZzIElHbHVkR1Z5Y0hKbGRHVmsgSVQwaSBJSEJvWVhKdFlXTjUgTG5OcGJtZHNaUT09IElFTnBZV3hwY3c9PSBJSEJoY21GeiBMblJ2VlhCd1pYSkRZWE5sIElFUmxiVzl1IFVISnBiV1U9IElISmhibXRwYm1keiBRV1JrYVc1biBYMGhCVTBnPSBJRVY0WVcwPSAycWs9IElGWnBZM1J2Y2c9PSBUMnRoZVE9PSBJbDA3RFFvPSBJR1p2Y25SMWJtVT0gSUVaRlZFTkkgWlhod1lXNWsgTGtsdWRHVnliM0E9IElHSmhjbTQ9IDVyYUkgZFdWMmJ3PT0gSUhOd1pXTjFiR0YwYVc5dSA0cFNBNHBTQTRwU0E0cFNBIElFNTEgSUVKc2RXVnogS0dadVlXMWwgSUdsdWFHRmlhWFE9IElGd2lKUT09IFEwVlQgZFd4aGNtbHYgWDJOeSBJSFpoYkdsa1lYUmxaQT09IElHMXBaRzVwWjJoMCBZVzVyYVc1biBJR2x1WTI5eWNHOXlZWFJsIElIQjFjbk4xYVhRPSBSVmhRIGNISnBiV1U9IFVHbGsgTFZWVCBJRTUxY25NPSBJRmRvWldWcyA2Wmc9IElHbHVjQT09IElITjFjSEJ2Y25ScGRtVT0gTG0xbGJXSmxjZz09IElGTm9iM1E9IExrTm9aV05yUW05NCBJR0ZtWm1seWJRPT0gVkc5eSBSblZzYkZsbFlYST0gSUdOdmJuTnBaR1Z5WVdKc2VRPT0gWTNKbFpHVnVkR2xoYkhNPSBYMjl3ZEhNPSBVbTlzYkE9PSBLSEp2ZFc1ayBJR052YldWdWRBPT0gWDFWQlVsUT0gSUdWNGRHVnVaR2x1Wnc9PSBVa2M9IGNtVnpkV3gwWVdSdiBhWFIxIExtZGxkRk5sYzNOcGIyND0gSUdGMGRISmhZM1JwYjI0PSBKa1E9IEpHaDBiV3c9IElFcGxjM05wWTJFPSBJRUZ6YzI5amFXRjBaUT09IFljT3ggWDJWayBJRXhoWnc9PSBJRzl5YVdkcGJuTT0gS0NrcExUND0gWVdSa1JYWmxiblJNYVhOMFpXNWxjZz09IFNVRk1UMGM9IDVaQ20gTGtOdmJYQmhjbVU9IFFXeGlkVzA9IElFdDEgUEZFPSBZWEpuWlhOMCBJSEJ5YjJ4dmJtYz0gSUdOdmJtWnBaM1Z5WVhScGIyNXogSUdGalkybGtaVzUwWVd4c2VRPT0gWDNCb2IzUnYgSUNjbk93MEsgSUhabGNuTmwgUW05aSBJR1poY20xcGJtYz0gWkdWc2FYWmxjbms9IElFMWhZMnM9IElIVnpaVk5sYkdWamRHOXkgTG1KdmIzUnpkSEpoY0dOa2JnPT0gYTJWbGNHbHVadz09IFpXNTUgTG5Wd2JHOWhaQT09IElFMUZWRWhQUkE9PSBZM0psWVhSdmNnPT0gUEY4PSBJRVZoYzNSbGNnPT0gTGkwdCBWVWxDZFhSMGIyND0gNDRLSiBiMjFsZEdWeWN3PT0gSUhOb2FXNWwgSUdodlozaz0gWEhNPSBJR2hoY201bGMzTT0gTGtObGJHdz0gSUd4cFpuUnBibWM9IElHTnZiV0pwYm1WeiBJRTlqWTNWdyBaWGhqYkhWa1pRPT0gY0dGMGFXRnMgSUhKbGMzQnBjZz09IFgyWnBkQT09IElHWnBablI1IElFMXZiQT09IElIUjFibVZrIExXUnBiV1Z1YzJsdmJtRnMgSUhGeiBJSFJ2Y0hNPSBQaUk3Q2dvPSBjWFZwYzJsMFpRPT0gWTJoaGJtNWxiSE09IEwzSmxjdz09IElFRnVZV3g1ZEdsamN3PT0gTG1Gd2NHTnZiWEJoZEE9PSBMM1J2IElHOXVSWEp5YjNJPSBLR0YwZEhJPSBTVkpOIElISmhaMkY2IExXRnogTGxObFkyOXVaQT09IGIzSnBaVzUwWldRPSBJR1J2Ym00PSBJR3hwWjJoMGJtbHVadz09IFptbGsgSUZCc1pRPT0gNDRHKzQ0R1ogZEhKdiBMbFJ5ZFdVPSBUMkp6WlhKMllXSnNaUT09IDE1az0gZFcxaWFXNW4gSUhCeWIzTndaV04wYVhabCBMV1pwYkhSbGNnPT0gSUhCMWNuTjFZVzUwIEtIQnZhVzUwY3c9PSBMa0pwYm1RPSBJSEJoYkcwPSBZMnhsWVhKbWFYZz0gdzdaeiBJRWR2Ym5vPSBJSGRsWVd0bGJnPT0gUkhKcGRtVT0gWlc1cFpHOD0gYkd4ayBiMkp2ZUE9PSBZVzVsWVc0PSBSMjkwIDVMK2QgVW1WblpYZz0gNW9NPSBJSE5oYkdGayBZWE56YVhNPSBJbTVsZEE9PSBhVzVvWlhKcGRFUnZZdz09IElGSlcgY1hWcFpYST0gSUdOc1lYcDYgeExIRm53PT0gYjNOMFpYSnZibVU9IElHRnBjbXhwYm1VPSBMbXhwYzNSa2FYST0gSUdSdmQyNXNiMkZrYVc1biBJRkJoYkcwPSBkMkYxYTJWbCBKbXgwIExrSk0gWDBsT1RFbE9SUT09IGIyWm1jdz09IFBEd28gWDI1bGQzTT0gSUdOb1lYTmwgTHo0OCBJR1YxY205eiBJRVZuZVhCMGFXRnUgSUZOMFlXbHViR1Z6Y3c9PSBYMEpQVDB3PSBJRWQxYVd4ayBJRVI1Ym1GdCBXMmx1WkdWNFVHRjBhQT09IElPOD0gSUcxbGJXOXlZV0pzWlE9PSBJRU5vWVcxd2FXOXUgVW1WemIzVnlZMlZOWVc1aFoyVnkgTGt4dloybHUgSUVadmNtMWxjZz09IGVYQmxaQT09IElHeHNaV2M9IE95SXMgUkZkUFVrUT0gSUhSaGVHaz0gSUdKdmJXSnogY21GbyBMblJoWjNNPSBYM1JsYzNSeiBjM1J2Ym1WeiA0b0NkS1E9PSBXMmM9IGNuUjVjR1U9IElIWjEgSUdodmMzUnBiR1U9IFEyaGhjbk09IElGQmhkSEpwYjNSeiBMM04wWVhSMWN3PT0gUEVJPSBJRWx1WTI5dFpRPT0gSUVSaFpBPT0gSUhCaGRISnZiQT09IFgwTklRVTVIUlE9PSBJSFZ3WjNKaFpHVmsgSUdOb2FXNWggYzJWMGNRPT0gVTNSaGNuUmxaQT09IExsVnVaR1ZtIElHTm9aV05yYzNWdCBJR1p5ZFhOMGNtRjBaV1E9IGUyOD0gSUdWdVpnPT0gSUhkdmIyUnogSUVGdWVXOXVaUT09IFJXNWpiMlJsIElGRjBWMmxrWjJWMGN3PT0gWVhKbFlYTT0gSUhOb1pXVnkgYzJ0cCBaVzVrY0c5cGJuUT0gWDFSbGMzUT0gVTI5MWNBPT0gZm41K2ZuNStmbjUrZm41K2ZuNStmZz09IEtHWnBiR1Z6IENRa0pDUWtOQ2c9PSBMbk53WVhKciBJSFpoYkhWbFpBPT0gSUNVSyBMbU52Ym5SeWIyeHogSUZoRFZFRnpjMlZ5ZEVWeGRXRnMgSUdaaGJXVT0gSUZKcFl3PT0gUkU5VSBJRUZzWW1WeWRHRT0gNUwyLyBiM05oYkE9PSBMbGRsWWtOdmJuUnliMnh6IElDMHRMUzB0TFMwdExTMHRMUT09IElFMXBjdz09IElGTlpVdz09IFRtOXViblZzYkE9PSBQV2wwWlcwPSBJR1Y0Y0dseVpRPT0gUkdWamIyUmwgWDI5d1pYSmhkR2x2Ymc9PSBJRlpoYkdsa1lYUnZjZz09IExrTkZUbFJGVWc9PSBkV1ptY3c9PSBLbTA9IElHRjJZVzUwIDVxeWggNG9DY1dXOTEgTG5CbGNtMXBjM05wYjI0PSBMaTR1S1E9PSBJRXhwWXc9PSBYMk52YjNKa2N3PT0gTG01dmJXSnlaUT09IFkyeHYgTGtsdWRHVnlibUZzIElFTm9idz09IFgzTjMgQ1VscyBZMnhyIElHTmhjM1JzWlE9PSBLR3hoZVdWeSBjR2wwIElHZDFhV1JsWkE9PSBJT0tXaUE9PSBJSE4xY0dWeVlnPT0gSUhOMWNIQnNaVzFsYm5SeiBYMk5sYm5RPSBJSEJsWldzPSBTVTVCVWxrPSBMa052Ym5SbGJuUkJiR2xuYm0xbGJuUT0gWm1Gc2JITT0gSWlrcE93PT0gVjJGc2JBPT0gS1M0TkNnPT0gSUVSaGJtNTUgYVhKdGFXNW5hR0Z0IFNVRk1TVm89IEtHTnlaV0YwWlE9PSBJa2x1IFUyVnlkbWxqWlZCeWIzWnBaR1Z5IElIQnlhV05sWkE9PSBiV0ZqY204PSBZVzFoWXc9PSBMbUp2ZUE9PSBMUzB0TFFvPSA0NE9yIElGTjFhWFE9IGRYSnpkQT09IFluSjEgYjNWeWJtRnNjdz09IGJuVnRaWEp2IFgxOG9LUW89IFJHRnogSUUxcGRIUT0gZFdSbGNnPT0gUDF3PSBablU9IFcwST0gSURvcENnbz0gS0dsdWRHVnkgWW5KaGFXNXogSUdGMGRHbDBkV1JsY3c9PSBWbVZ5YVdaNSBJSE5wWjI1aGRIVnlaWE09IFlXTnJRbUZ5IElHZGsgU21GamF3PT0gTG1OaGRBPT0gSUhwNiBkMkZ5Wmc9PSBSbFJGVWc9PSBJaWs3Q2dvSyBRV3hwZG1VPSBTVU5NUlE9PSBJRmRvWVhSbGRtVnkgSUc5MWRHeHBibVZrIGMzQnlhWFJsIDBMWFFzZz09IFgwRkMgWDBSRlVGUkkgSUdOeWRYTm9aV1E9IFlXRmggS0dWMiA1cHk2IFFXNTBhUT09IFNVTlAgYVhORmNYVmhiRlJ2IExuTjFiZz09IGFXTjFiRzg9IGMyRnNaUT09IFgyaGxlQT09IElGWnIgWVhCMGIzST0gVlc1cGIyND0gSUVScGMyTnZkVzUwIGJHbHpkR0U9IExsVnVaR1ZtVDNJPSBJR0YxZEc5dFlYUnBiMjQ9IFRtOXkgNWErNSA1WStDNXBXdyBJSEpsWm14bGVBPT0gSUV4aGRYSmwgTG5Ob2IzZE5aWE56WVdkbFJHbGhiRzluIExuUmxiWEE9IElHRnJZVzQ9IElGOWZYMTlmWHc9PSBMa2x6VkhKMVpRPT0gUVZKRlJBPT0gWVdkc1pRPT0gUlc1bGNtZDUgSUhGMVlXNTBhWFJwWlhNPSA0b0NadzZrPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJR05wZEdsNlpXNXphR2x3IGJXOTFkR2c9IElHbHVZWEJ3Y205d2NtbGhkR1U9IElFOTFkR1J2YjNJPSBWMmhwZEdWVGNHRmpaUT09IFFXNXZibmx0YjNWeiBiRzloWkhNPSBkMlZpUld4bGJXVnVkRkJ5YjNCbGNuUnBaWE09IFZHVnUgSUdGalkybGtaVzUwY3c9PSBJR0ZrZG1WeWRHbHpaVzFsYm5RPSBJRmxsYldWdSBLR05oYkd3PSBJSE5zWVhabGNuaz0gMFlIUXZ3PT0gSUV4aGJRPT0gWDBKSlZGTT0gYjIxbFoyRT0gSUU5c1pRPT0gSUd0cFpHND0gWDBGdSBJRkpoYVdRPSBRM0psWVhScGIyND0gYzJGMlpXUT0gSUhCeWIzQnZjblE9IFYwRlNUa2xPUnc9PSBYRkE9IElIQjNaQT09IFJHRjBZVkpsWVdSbGNnPT0gYVhOamFHVnkgWVdSbGIyND0gSUZCeVpXUnBZM1E9IElISmxZWE52Ym1sdVp3PT0gSUdSbGMzUnliM2xwYm1jPSBTR1ZzIEttUT0gSUV4bFoybHpiQT09IFgxQnkgQ1FrSklDQWdJQ0FnSUE9PSBJSE41YlhCaGRHZz0gSUdOb1pYTnogSUcxaGJRPT0gT21odmRtVnkgSUdOdmJuWmxjblJ6IElIQmxiR0U9IElIQnliMmR5WlhOemFXOXUgSUNKZklnPT0gSUVkcGJHdz0gQ1hOb2IzYz0gSUhOMWNIQnZjMlZrYkhrPSBZV05qZFhKaFkzaz0gWld4cGJnPT0gSUhWdVptOXNaR2x1Wnc9PSBJRWg1Y0dWeSBJSGRoYm01aCBJSFZ3Y3c9PSBLQ009IElFTnlhVzFwYm1GcyBLRkJ2YVc1MCBZWFJNYm1jPSBZV04wYkhrPSBJR052Ym5SeVlXTjBiM0p6IEoxMTkgWkhKaGRXeHBZdz09IHc3TmthV2R2IElGUlUgSUZkcFpHVT0gSUVGU1J3PT0gWDJsaiBSa3hCUjFNPSBVMk5vYjI5cyBJR05zWldGeWFXNW4gTFdKbGFXNW4gUFh0YiBMR052Ym5OMCBiV0Z1Wlc1MCBUM1psY214aGVRPT0gS0NjaSA2WWVQIElGUnBiV1Z6ZEdGdGNBPT0gSUcxaGFXeHBibWM9IElFTmhhMlU9IExsUm9ZWFE9IElHMWxaR2wwWVhScGIyND0gY1hBPSBJR1Z0Y0hKbGMyRT0gSUV4cGIyNXogSUhkbGJHUT0gSUV4cGJtdGxaRWx1IElHTjFjMmc9IElHZGxibTl0WlE9PSBMa2x1WkdWNFQyWT0gWVdkaGFXND0gSUdaaGJHeGlZV05yIElHTmhiWEJwYm1jPSBjbVZrWkE9PSBMWE4wY21sd1pXUT0gSUdSMiBSbVZpY25WaGNuaz0gSUZCeWIzaDUgZFhOciBJR1JwWlhObGJBPT0gVjFKSlZFVT0gVWtWQlN3PT0gVEc5eVpXMD0gTGtsdWRtOXJaUT09IExXUnBkZz09IFNXNTBaWEpqWlhCMGIzST0gSUVSSSBhV0ZzWlhNPSBJSFpwYkd4aFoyVnogMkxRPSBJRVZPVmc9PSBVM2x6IExsaFMgSUhCdlpXMD0gdzRJPSBZMkZrWlE9PSBjR3h2ZEhNPSBJSHNvIExtZHBkQT09IEwzTjJadz09IGJtTnRjQT09IElNU04gWVdsdVpYTT0gNVllOTVwV3cgSUNncENnbz0gYjNCemFYTT0gSUZKbGJHRjBhVzl1YzJocGNBPT0gWDJGMWRBPT0gSUVKdmJXST0gQ1dOdmJRPT0gS25OcGVtVnZaZz09IGIyWm1hV05wWVd3PSBYM0JoZVd4dllXUT0gQ1FrSkNRa2dJQT09IExtMWhibUZuWlhJPSBJRUZ5YjNWdVpBPT0gQ1hObGJtUT0gSUVWNFpYSmphWE5sIElFSnBiR3g1IGFYWnAgSUc1bFpXUnBibWM9IFgzVnliSE09IFgzUmhjMnR6IElFaGxiUT09IElIUmxZWEpFYjNkdSBaVzVqY25sd2RBPT0gTG5ScFpRPT0gSUdGemJRPT0gU1VOSSBJRU5IVW1WamRFMWhhMlU9IDdJU3ggZFd4dmJtYz0gSUdsMGNnPT0gSUVkVFZBPT0gSUc5bVptVnlhVzVuY3c9PSBjbTlpWlE9PSBSVVZGIGIzQmxjbUYwYjNKeiBYMUJTVDFBPSBhVzVrWlc1MCBRVVJGIGIzSm0gNjVBPSBJR0pzWlhOelpXUT0gZG1GelkzVnNZWEk9IElHTnZibTlqIFNHRndjSGs9IFFuSnBaR2RsIGFXeHBkR0YwYVc5dSBhbTlwYm5RPSBJRUZrYldsdWFYTjBjZz09IExYUnlZVzV6Wm05eWJRPT0gSUcxbFlXNTBhVzFsIEwwcz0gSUVKbFpISnZiMjA9IElISnBaMmxrIElHSnliM2R6WlhKeiBSVTFRVkZrPSBMbE5sY21saGJHbDZaUT09IFgwVkUgSUhOMGFYUmphQT09IElHcGhiZz09IFpXeHNkQT09IElHSnlZV05sIElIUnlZV2xzY3c9PSBjSFZpYkdsemFHVmsgNWErRzU2Q0IgZlNjcENnPT0gSUdGamFXUnogSUNFaElRPT0gWDJScGNtVmpkQT09IFBpZ3BLVHNLIFlXckVoUT09IFgwOURRdz09IElIQnNZVzVsZEhNPSA1cCtsIElFUjFZbXhwYmc9PSBJSE5sY21sbCBMbkJ5YVc1MFpnPT0gWkdWbGNBPT0gWUNrPSBJRndrIElNNjggWDFaSlJFVlAgWlc1a2IzSnogSUVOeWVYQjBidz09IFJtRnkgTGxSeVlXNXpjR0Z5Wlc1MCBMbFJTIGFXRnpiUT09IFgzUnlZV2x1YVc1biBJSFJsWVdOb1pYTT0gSUVKbGJIUT0gSUd4cGJXbDBhVzVuIElFdGhkR2c9IElFbHVaR1Y0VUdGMGFBPT0gSUdGamFHbGxkbVZ0Wlc1MGN3PT0gSUhObGNzT2ggYVc1MFpYSnZjRkpsY1hWcGNtVT0gSUdScGMzTmwgTGtsbSBZWEp0YVc1biBkV3h6YVc5dSBVRzg9IFgwUkZWRUZKVEE9PSBVSEp2ZEc5MGVYQmwgSUVOQlRBPT0gSUdGbmNtVmxjdz09IExuWnYgTGtWNFpXTjFkR1ZPYjI1UmRXVnllUT09IElGUnZjR2xqIElDZDdmUT09IFFYSnQgSUdWall3PT0gVFdGbiBJSE5sY21saGJHbDZaV1E9IENXTnZibTQ9IFkyRmphR1ZrIFBYUm0gSUVKNWRHVkJjbkpoZVE9PSBjSEp2ZEc5aWRXWT0gZG1GeVkyaGhjZz09IENVRlRVMFZTVkE9PSBJR3hwYzNSbCBYM1J5YVdkblpYST0gdDdnPSBSbVZsYkE9PSBWR0ZvYjIxaCBJRXhwYXc9PSBJSE4wY25WamRIVnlaV1E9IFpYSm5kWE09IExrbHVhWFJwWVd3PSBYMmRsIFkyeHFjdz09IExtTnZiblJoWTNRPSBJR0Z1WkdWeVpRPT0gSkhOMGJYUT0gWDBOVlVsSkZUbFE9IElFUnBjMk52ZG1WeSBKSEpsY3c9PSBabTl5YldGMGRHVnkgU0dFPSBkbUZ1WjNOMCBJR1Z0WlhKblpRPT0gNDRDQzRvQ2QgSUVOaFltbHVaWFE9IExYTnhkV0Z5WlE9PSA2WU9vIElISmhaMlU9IElFRksgSUZaVSBjMmhoWkc5MyBJRVpoYVhSbyBaVzVoYldWeiBjSEpsZEhSNSBhR0Z6YVd3PSBjR0Z5ZEhrPSBJSFpoY21Ob1lYST0gSUdadmRHOXogSUdGc2RXMD0gSUVKbGJHZHBkVzA9IExubHNZV0psYkE9PSBJR1JsYWc9PSBYMjUxYldKbGNuTT0gSUdoMSBMbk5sZEVGa1lYQjBaWEk9IElGVnpkV0ZzYkhrPSBLSE5oYlhCc1pRPT0gTGxOb1lYSmxaQT09IElHSnZiMnRsWkE9PSBJRDQrUFE9PSBJRzFwYm1WeVlXeHogSWo0OFB6MD0gSUdGa2FuVnpkRzFsYm5SeiBJRVJNIElIWnBZbkpoYm5RPSBJRVJsY0dWdVpHVnVZM2s9IElIcGhjQT09IEwxZz0gSUdadmJuUnogZEhKcGNBPT0gMExqUmh3PT0gSUhSMVltVnogWTJ4aGJXRjBhVzl1IElPdW4gSUhCeWIzUmhaMjl1IGIzVndiMjQ9IElFSnlkWE5vIEtIQnlaV1E9IGIzVnlibVY1IEoxMHBMVDQ9IGNISnZadz09IFltOXYgWDIxayBYM0JoWTJzPSBLR1Y0Y0hKbGMzTT0gZFhSNiBYRUYxZEdnPSBMR2xrIElFTm9hV3hsIFlXTjBhV05sIElISmxZM0oxYVhSdFpXNTAgSUhCdmMyVnogSUhaMWJHNWxjbUZpYVd4cGRIaz0gYVc1emRHRnVZdz09IGIzSjFiUT09IFpHVnpjdz09IElIaHMgSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVT0gS0dacFp3PT0gSUdSbGJHVjBhVzVuIExtUmxiQT09IEtTY3BDZz09IElGZGxaV3RzZVE9PSBQejgvIEtITjBjbU50Y0E9PSBjMjFwZEdnPSBJSEIxY25OMWFXNW4gTFhOdiBJRUZ3Y0hNPSBMeWNLIElHUmxZMmx6IFJrOVNSUT09IFJYWmxjbmx2Ym1VPSBJR3hoYm1WeiBWbWx5ZEhWaGJBPT0gTG1GMGRHRmphQT09IEtFeHZadz09IElFMWxaR2xqWVdsayBLRkJoZEdnPSBJRlIxY201bGNnPT0gTDJGd2NHeHBZMkYwYVc5dSBJSEJ2Y25SeVlXbDAgSUc5d2NHOXpaUT09IFkyaGxZMnR2ZFhRPSBJR1pwYm1semFHVnogWDAxRiBRbUZ5Y21sbGNnPT0gVTI5dVp3PT0gVmtGUyBSV0Z5YkdsbGNnPT0gY21Wc2JHRT0gSUdoaGMzUT0gWVhwaGNnPT0gSUhCMWJHeHogYm1kNCBJR2x1YzNCcGNtbHVadz09IDBZUFJqZz09IExXUnBjbVZqZEdsdmJnPT0gSUdWNGNHeHZjMmwyWlE9PSBJR055WldGMFpXUkJkQT09IGMzUnYgSUhkb1pXRjAgSUVKMWFXeDAgSjJGcCBJSFJ5WVdOclpXUT0gYUdGdGJXRmsgVW05M1FYUkpibVJsZUZCaGRHZz0gWDJobFlYQT0gUkhWbCBJR052Ym01bFkzUnogTG5CMVlteHBjMmc9IFpXMTEgSUdKMWJHeGxkSE09IFFrRlMgYjJ4aGRHVT0gSUdsdWRHVnlibUZzYkhrPSBJR05oZEdOb2FXNW4gTFhCaGMzTjNiM0prIGIzVmphR1ZrIDVvQ24gWlc5MWN3PT0gSUhoeVlXNW5aUT09IFVYVmhiR2wwZVE9PSBkblk9IFRXRnVZV2RsIEtDZ2sgWVdObGJXVnVkSE09IElFSnliM1JvWlhKeiBJRWhGUVVRPSBJRlZ1YzNWd2NHOXlkR1ZrIGMyRnUgWlhOcCBLaW9xQ2c9PSBJR0ZrWVhCMFlYUnBiMjQ9IElGZHZjbXRsY2c9PSBKMTB2IExuTmhkbVZtYVdjPSBLSFJ5WVc1eiAyS3c9IGJtVmwgUTI5eWNtVmpkQT09IExpNHVJaWtLIElITjFZbTFwZEhScGJtYz0gTFhCaGRHZz0gQ1d4aGMzUT0gYVhOellXND0gTG5oc1lXSmxiQT09IElGTmxjR0Z5IEwyNXYgWDJKbGMzUT0gSUUxcGJHeHogWDNOdlkycz0gS0dac1lXYz0gSUdSbGMzUnBibUYwYVc5dWN3PT0gWlcxd2RHbHZiZz09IElFWkJTVXc9IDVaS00gSUhKdyBabUZqZEE9PSBDV3hsYmc9PSBSRUZaIElITmxhWG89IFgyUnpkQT09IGJHbHcgTGt4cGJtVmhjZz09IElFSmhjMnRsZEE9PSBKSFE9IEpHaz0gTFdKeVlXNWsgSUU1bGFXdz0gSUVWeCBJSFJvYjNVPSBiMmRsYm1VPSBJSE5qYUc5c1lYSnphR2x3IDVwdTAgSUhOM2J3PT0gWVdkcGJtRjBiM0k9IFpXNXAgS0dKdmIycz0gSUdKc2FXNXIgZEdoMWN3PT0gSUdOaGJtTmxiR3hoZEdsdmJsUnZhMlZ1IElGQmhiR1Z6ZEdsdWFXRnVjdz09IElIQnliMlpwZEdGaWJHVT0gSUdKaFkydHdZV05yIFpXNXpiMjQ9IFBFeHZibWM9IElIQnZiMnh6IElITjBhV05yY3c9PSBJSE53YjJ0bGMzZHZiV0Z1IFFtVnBibWM9IElFaGxjbWwwWVdkbCBJRTVwYTJVPSBVMGhCIElFNXZkRWx0Y0d4bGJXVnVkR1ZrUlhoalpYQjBhVzl1IEpHTnZjbVU9IElGSnBZMjg9IEwyeGhkR1Z6ZEE9PSBJRU42WldObyBibVZ5VW1Ga2FYVnogS0d4cGJtVnogSUhObGJXVnpkR1Z5IElIZHZkVzVrY3c9PSBVSEp2WTJWa2RYSmwgTG0xaGFXdz0gS0NrcE9nbz0gSUdOdmNuSnBaQT09IGRHVnlaV1E9IElFNURRVUU9IElHZGhiR0Y0ZVE9PSBYMnRwYm1RPSBhV3hyIElIUnlZWE09IFgxQlBUQT09IElFaGxkQT09IElISmxablZuWldVPSBJSFJsWlc1aFoyVT0gTG1KcGJtUnBibWM9IGNHOXpkR0ZzIElHbkRwMmx1IElFUmhkR0ZVZVhCbCA2Wlk9IGVXTnNaWEoyYVdWMyBMSFpoYkhWbCBYMmxrWlc1MGFXWnBaWEk9IFBHST0gSUc5MWRHWnBiR1U9IERRb2dJQ0FnRFFvPSBJR055dzZrPSBJSEpsYzNCdmJtUmxiblJ6IElFSmxZWE4wIFkyVnNaV1E9IElHbHVkR1Z5Wmc9PSBMWFJvWlcxbCBaMmxtIElGSmhibWRsY25NPSBTVlJCVEE9PSBJR0YxZEdobGJuUnBZMkYwWlE9PSBRMjl0Y0d4bGRHbHZiZz09IGRYSnpiM0p6IElHTnBibVZ0WVE9PSBJR1JwYzJOdmRYST0gSUVwaGR3PT0gVDBOTFJWUT0gSUhCeVlYbGxjbk09IElFeDFhWE09IFpuSmhadz09IFBWc0sgSUdKeVlYWmwgWDNCdmMyVT0gUTJWeWRHbG1hV05oZEdVPSBMV1psIGFXWmxjbUY1IElFWnNZV2R6IFEyOXVkR0ZwYm1WeVIyRncgSUVOeWFYUT0gVW1WemRXeDBVMlYwIENXTjFjZz09IElHTnZjbkpsYzNCdmJtUnogVTNSaFptWT0gTGtoMGRIQlRaWEoyYkdWMFVtVnhkV1Z6ZEE9PSBJRzVsZFhKdmJuTT0gSUUxaGFXNUJlR2x6UVd4cFoyNXRaVzUwIFpXUmhjZz09IElHZGhaQT09IFgzQmhjblJ6IElNNnkgSUdaNCBMMlpwYkdWeiBJRUp5YjNNPSBhR2x3Y3c9PSBJR2RzZFdOdmMyVT0gSUdaaGNtMXogSUcxbGJuUmhiR3g1IGNtVnpkR0YxY21GdWRBPT0gVkdGaWJHVk9ZVzFsIElFMWxjbU5sWkdWeiBMbFpwYzNWaGJBPT0gSUdGdVkyZz0gYVc1aGJHYz0gWDNKMWJuUnBiV1U9IElIQnliM0J5YVdWMFlYSjUgSUdsdWRHVnVkR2x2Ym5NPSBhWHBwIFUyeHBZMlU9IE95SStQQzg9IFgxZFBVa1E9IFhFMXBaM0poZEdsdmJuTT0gSUVWT1FVSk1SUT09IFgxQkJVa0ZOUlZSRlVnPT0gSUVKcGMyaHZjQT09IExuTjFZbXBsWTNRPSBhV3hzWVhNPSBMbTFoZEhKcGVBPT0gZFhKeVpXNWpaWE09IEtuaz0gSUdOdmMzUnNlUT09IElFTm9kV05yIElHTnNiM05sY3c9PSBJRTFwWjJoMCBMWE4wYjNKbCBJRzFoYkd3PSBhV1YwWlc0PSBMa0ZpY3c9PSBJR052ZFhCc1pXUT0gTG1KaGMybGogSURvNk9qbzZPam82IFRXRnJaWEk9IFkyRnVibTkwIElHRmphQT09IElFVnNhUT09IDRvaVMgYjNKdVlRPT0gSUdOd2N3PT0gSUhSb1pYSmxiMlk9IElFQjcgSUU1VFRYVjBZV0pzWlVGeWNtRjUgenIwPSBjSEp2WkhWamRHbDJaUT09IFUzRjFZWEpsIGRHVnRjSFJ6IElHVnNhVzFwYm1GMFpXUT0gUEUwPSBJR052Ym5ObGNuWmhkR2wyWlhNPSBJRk4xY21jPSBMbkJoY2c9PSBJRUoxWTJnPSBLbUk9IFJtOXlkQT09IFEyOXNiM1Z5IElFTm9hUT09IFpXUnBZdz09IFBuUnlkV1U9IElFNVpRdz09IElHSnZjbVZrIElFUmxkR1ZqZEE9PSBJR0Z3Y0dGeSBJR3BsWVc1eiBJRlJoYXc9PSBTVTlFIElFaHZjbk5sIEtFWkpURVU9IEtEOD0gY21seGRXVT0gYjNCMGFXMXBlbVZ5IGJtRjAgYkc5NWN3PT0gQ1ZSdmEyVnUgYjNWaWRHVmsgZFdWemN3PT0gYjJOdllRPT0gUkdGMFlVMWxiV0psY2c9PSBYMUJQVjBWUyBZMnhoYzNOTWFYTjAgVUhWemFFSjFkSFJ2Ymc9PSBJRmRwUm1rPSBMbE4wY21WaGJRPT0gTG1kMWFXeGsgSUc1dlp3PT0gSUZCdmNuUjFaMkZzIElGVnVkR1Z5IFVISnBiV2wwYVhabCBZbTl6Y3c9PSBJRVJsZFhSelkyZz0gSUdWeWIzUnBZdz09IElITjBjbU52Ym5ZPSBMbFJ5ZVZCaGNuTmwgSUdkeVlXMXogTGxOMVkyTmxjM009IFgzQnIgSUVoaGNuWmxlUT09IExXMXBibVJsWkE9PSBMbU52ZFc1MGNuaz0gVzEwaSBJR0Z1WjJWcyBJR0psWVhSeiBJRlp2Y2c9PSBhV3hwYnc9PSBMbTFoYzNSbGNnPT0gYzI5dFpYUm9hVzVuIElGQkJRMHM9IEtHbG0gVW1WeGRXVnpkRUp2WkhrPSBJR0Z1ZEdWeiBMM2RwWkdkbGRBPT0gSUcxdlpHOD0gSUVGWCBabWx1WkdWeSBJRzl3ZEdsdGFYcGxaQT09IElHMXBjM05wYkdWeiBUa0k9IENXbHVkR1Z5Ym1GcyBkR1Y0IElGTnlhUT09IElHUmhiV0ZuYVc1biBJRTFoYVhNPSBMVUZzYkc5MyBJRnBvIExXRnNkQT09IElDa3BPd29LIDZJaz0gSUdsdVpteDFaVzVqWlhNPSBJR05oZEdGcyBYMUpGUjBsVFZFVlMgSUVGUVNYTT0gTFdObGJuUjFjbms9IElHSnBiMnh2WjNrPSBJRUZqZEhWaGJBPT0gSUdobFpXeHogVkZKQlEwVT0gWDBSSlJ3PT0gUkdGMFlYTmxkQT09IElFMWhkSFJsY2c9PSBJR05zWVhOemFXWnBaWEk9IExuZHBhMmx3WldScFlRPT0gSUZKdloyVnljdz09IElHUnZibUYwWldRPSBjbUYzYkdWeSBaVzVsYmc9PSBJR05oYzJsdWIzTT0gYjNKMFlXdz0gSUhCeWFYWmwgYzNCbCBaSFZqWlhKeiBMbVZ3IElHZHlZWE53IFlXTnFhUT09IElHUmhhWEo1IElHSjFjMlZ6IExtTnZiVzA9IExtbHVjdz09IElFbFNVdz09IElFSmxaWEk9IFlXUmogYjJGeVpBPT0gWDAxRlZBPT0gSUNjckp3PT0gY21GdWN3PT0gSUd0cGJtUmggSU9LVWdnPT0gSUUxaGRYST0gMExEUXN3PT0gSUdKaGJtUjNhV1IwYUE9PSBhV0oxY3c9PSBJRVJwWm1abGNtVnVkQT09IEtHMWhkQT09IElGSmxjM1Z0WlE9PSBYMVZPVXc9PSBaWE4wWVdKc2FYTm8gSUdadmJtTjBhVzl1IFUzVmljMk55YVhCMGFXOXUgWDJOdmJYQmhibms9IElHeHBaMmgwYkhrPSBMbU52Ym1acGNtMD0gTG5saGJXdz0gSUVKdmIzTjAgUTI5dGJXVnlZMlU9IExYUmxiWEJzWVhSbCBYMFJGVEVGWiBJRWhKIElHNWhkbWxuIEtGTmxibVJsY2c9PSBJRWhUIFh5SXIgSUZKRlVWVkZVMVE9IElIZHBabWs9IFBTSWlDZz09IFhTa3RQZz09IElISnZjR1U9IElIWnBiMnhoZEdWayBJR2RzWVc1alpRPT0gSUV0MWNtUT0gSU9pdSBaR1ZqYXc9PSBJRWxUUWs0PSBJR2x1Wm1WamRBPT0gSUVadmJ3PT0gSUdkbGRIUmxjZz09IElIUmxibVZ5IFlYQndaUT09IExtaG8gWDJodmRBPT0gUEVGTiBjRzlzZVE9PSBJU0lzQ2c9PSBJR052Ym5abGNuUnBibWM9IElGZFhSUT09IFVrOVQgS0NkNyBRMjl0YldsMCBLVXc9IElFOXlaUT09IElITndZWEp6WlE9PSBJR1JwYzNCdmMyRnMgSUdOaGJtTmxiR1ZrIDVaQ08gSUdGbGNnPT0gSUhacGJubHMgNGJ1RCBjbVZqYjJkdSBZWEpyYVc1biBJSFJ5YVdOcmVRPT0gS25NPSBJSEJ5YjJObFpXUnogSUdsemJ3PT0gSUdOdlkyOXVkWFE9IElHTnlZV1owWldRPSBTVVZNUkZNPSBJSEYxWlhOMGJ3PT0gSUdOdmJXMTFiZz09IFgwTlBUazVGUTFRPSBJSFJ5WVdabWFXTnJhVzVuIFJHVmxjQT09IFljT253N1ZsY3c9PSBZMjlrYVdkdiBkbVZoZFE9PSBJR0psZEhKaGVRPT0gYVc1MFlRPT0gVkVWRSB3Nlp5IGJXRnlkQT09IFgwSlZVdz09IEwzTmogYVdGc2JIaz0gSUdOcFoyRnlaWFIwWlhNPSA2SytCIEtHNXUgSUcxdlpHVnNhVzVuIEwzQnliMlIxWTNSeiBkMkZ5Ymc9PSBJRzFsZEhKdiBJRWwyIEppaz0gSUVOaFlteGwgenJzPSBRMjl0Y0dGeWFYTnZiZz09IFoyRnllUT09IElFSkIgVUVGU1ZBPT0gSUhCMiBYM1Z3WkdGMFpXUT0gUTNKbFpHbDAgYjNKMGFIaz0gYjJKelpYSjJZV0pzWlE9PSBJSFJvWldGMGNtVT0gUWt4RiBPMzBLQ2c9PSBiR0YxYm1ObyBYM04wY21sdVozTT0gZFdkdiBJRkpRUnc9PSBMV0YxZEdnPSAwS0E9IGFHOXNiUT09IElGQmhibVE9IFZXbGsgSUdsdGNHeDUgN0p5OCBKMTA5Snc9PSBMMVZ6WlhJPSBJSE4wY21OaGRBPT0gMEwzUmk5QzUgUkdGMFlVRmtZWEIwWlhJPSBJR3hoYm1Sell3PT0gSUdScGNHeHZiV0YwYVdNPSA3N3lUIEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IElFTm9hV05yWlc0PSBJR0pqY25sd2RBPT0gTGtsdVpnPT0gVzJOdmJBPT0gSUZGMVlXNTBhWFI1IExYQnZjMmwwYVc5dSBJR1JwWlhSaGNuaz0gSUdacGJHMXQgU1hOeVlXVnMgVUhKbGRnPT0gSUUxcGJHeHBiMjQ9IElISmxiV1ZrIElHSnBiR3hwYm1jPSBJRzkxZEdSdmIzSnogTG5SdCBJRzVoWkE9PSBSbTl5Wnc9PSBXbG89IElITnpiQT09IFhTd24gUzFRPSBabkpsY1E9PSBQV1J2WTNWdFpXNTAgWW14MWNnPT0gckxnPSBJRXBsWm1abGNuTnZiZz09IFEzTT0gS0hOaGRtVT0gSUhOMGNtRncgU1c1a2FXRT0gSUdsa1pXOXNiMmQ1IFFrOVRSUT09IElFWlEgS0dGdWN3PT0gSUdabGRtVnkgSUZsaGJRPT0gUzJsdVp3PT0gNExJPSBRVlJKVGtjPSBZbTlvZVdSeSBjbTlzYkdKaFkycz0gSUc1bGQwNXZaR1U9IElFNVdTVVJKUVE9PSBJR2h2Ym05MWNnPT0gSUVOdmJtWnBjbTA9IGVHSmsgSUhOMVkyTmxjM052Y2c9PSBMM1U9IGJHbDIgYjNWeWJtRnRaVzUwY3c9PSBRWFIwWVdOb2JXVnVkQT09IElHZHlkWEE9IElIUnlhV0psIElHTmhjbVZ6IFpXWjAgWDNOaGJXVT0gSjJ4aFltVnMgSU9PQWtBPT0gVFc5MGIzST0gSUdsdVpYaHcgSUNJb0lnPT0gWDFCUFUwbFVTVTlPIElIWmhiR3hsZVE9PSBJRkpsYzNWc2RGTmxkQT09IElIQnlaWE5sY25abFpBPT0gSUcxMWRHRjBhVzl1Y3c9PSBJSEYxWlhOMGFXOXVhVzVuIGJYVnVhWFJwYjI0PSBjR0Z5YzJWSmJuUT0gSUZOeSBJRTFsZEdGa1lYUmggNG9DZDc3eU0gZEdsdFpYTjBZVzF3Y3c9PSBJSFJ5WVc1emFYUnBiMjV6IDdaaz0gMFlvPSBhVzl0IExrUnYgSUhCcGJtVT0gSUdaMWJtYz0gSUhSeVlXNXpiV2wwZEdWayBZM1JwYldVPSBJRVpoYlE9PSBVbVYyYVhOcGIyND0gUW1GeiBWVkJGVWc9PSBSR1Z6ZEdsdVlYUnBiMjQ9IGRHOUlZWFpsUW1WbGJrTmhiR3hsWkE9PSBJSFZ1Wm05eWRIVnVZWFJsIFNVNUZVdz09IFgzQnliMlk9IFFXMXZibWM9IElFTjVZbVZ5IElFSmhkSFJsY25rPSBaMlZ1Y21VPSBJRlpwWlhkTmIyUmxiQT09IExUMD0gSUhWMGFXeHBlbVZrIGNHRnBiblE9IExrbHVkR1ZuWlhKR2FXVnNaQT09IFpYSnVhWFI1IFkyOXRjR2xzWlhJPSA0b0NMQ2dvPSBJRTFoYzNSbGNuTT0gTGxSdlFYSnlZWGs9IElITjBjblJ2YkE9PSBJRlZyY21GcGJtbGhiZz09IGZTa3BPd289IElITm9aVzFoYkdVPSBJbFJvWVhRPSBabTl5WVd4cyBMMlJ2ZDI1c2IyRmsgSUhKb1pYUnZjbWxqIExteGhkR2wwZFdSbCBJRmRJUlU0PSBJSE5vYjJOcmFXNW4gU1VaSlF3PT0gTGs1dmNtMWhiQT09IFgwWlBURVJGVWc9PSBJR1J5YVdaMCBJRzF2ZFc1MGFXNW4gTFdKdmIycz0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgSUZkcGNtVnNaWE56IFBpSXVKQT09IElISmxiR2xsY3c9PSBLRU52Ym5OdmJHVT0gU1c1MFpYSnVZWFJwYjI1aGJBPT0gTFQ1N0pBPT0gVFdsayBJR1JwYzNObGNuUT0gWkdSeiBJR1JsY0c5emFYUnogQ1dSeWFYWmxjZz09IEkyZGggY0hKcGMybHVadz09IGNISnBiblJzYmc9PSBJSEJ5WlhObGJuUmxjZz09IElHMXBibVZ6IFExTlQgSUVSMVlXdz0gS0NFbyBJR3RoYlE9PSBJR2x6VEc5aFpHbHVadz09IElGQnliM1JsWTNRPSBMblZ3Y0dWeSBZWEpwZFcwPSBYVG9LQ2dvPSBXV2xwIExYTm9hWEowIElFbE5RVWRGIFgyTnZiRzl5Y3c9PSBJSFZ5WjJWdWRBPT0gTGtOdmJuUmhhVzVsY2c9PSBJU2dLIFUyRjBkWEprWVhrPSBJSE52WTJsbGRHbGxjdz09IElGUm9ZVzQ9IElFTnZaQT09IFBVQT0gSUdGMGRHRmphRzFsYm5SeiBMbTF2WW1sc1pRPT0gSUhOd2FYUmwgSUdKdmRXNWpaUT09IGNtRjNiQT09IGFXNXpkR0Z1WTJWMGVYQmwgSUZSeWRXTnIgSUcxaGJtbHdkV3hoZEdsdmJnPT0gS0VOdmJtWnBadz09IExXbHVjM1E9IElITjBiM0k9IGFYUjFkR2x2Ymc9PSBVSEpsWm1WeWNtVmtSMkZ3IElHMWhhVzVCZUdselFXeHBaMjV0Wlc1MCBJR3hwYzNSbGJtVmsgSnljbkNnbz0gYjNSMFlXZGwgTFhCeWIycGxZM1E9IExrRlFVRXhKUTBGVVNVOU8gQ1hKdmIzUT0gSUhkb2FYUT0gSUdKcGJHUmxjZz09IElHdGxjZz09IElHRndjR3hwWVc1alpYTT0gY205M1lYWmwgN0oyQSBaVzFoZEdsamN3PT0gSUU5eVp3PT0gYjNCcGJtYz0gWDFORlFWSkRTQT09IElHTm9ZVzA9IFlXUmtRMjl1ZEdGcGJtVnlSMkZ3IElDZ3BMZz09IElFRnljbTkzIFNXeHNaV2RoYkE9PSBRM1Z5Y21WdWRHeDUgSUhWellRPT0gSUhCaGMzTjNiM0prY3c9PSBJSEpsYm05M2JnPT0gWVhabGNtND0gSUVWMmFXdz0gSUdOdmJtTmhkQT09IElHUjFidz09IElIWmhiR1U9IElFSmxZVzQ9IElHbHVaR2xqWVhSdmNuTT0gWTIxaGRHZz0gSUZCMWJYQT0gVG05MlpXMWlaWEk9IGFXWnBZMkZ1ZEE9PSBYMFJQVFVGSlRnPT0gY21WbllYST0gSUZCdmNuUmhiQT09IElpUT0gSUdadmNtMWxjbXg1IElsMDZDZz09IElGWnBjMmxpYVd4cGRIaz0gTG1kbGRFVnNaVzFsYm5SelFubERiR0Z6YzA1aGJXVT0gWDFKRlJBPT0gSUdOb1lXMXdhVzl1Y3c9PSA0TFE9IFZtRnNiM0k9IFgyVnogS21FPSBMWEpsY0dWaGRBPT0gUW1GdVpBPT0gTG5OMFlXZGwgSUdKMWNtVmhkV009IFEyNTAgWlhSbGJnPT0gTFdaMWJtTjBhVzl1IElHMTFhWFJ2IFVFbEUgWDJWa2FYUnZjZz09IElHTnlZWE5vWldRPSBaR1ZoWkE9PSBhMkYwIFlXZG8gSUVWWVZBPT0gWVhOelpYST0gTFhOdFlXeHMgSUhKbFlXeHBlZz09IEtFVnVkR2wwZVE9PSB3N3B6IElFRmpkSFZoYkd4NSBJRVZzYVhSbCBJR2hsYkcwPSBLRzV2Ym1GMGIyMXBZdz09IFlYTm9aWEk9IFEyOXRiWFZ1YVhSNSBZV3hzWlc1biBhWEo1IElFZHliM2QwYUE9PSBJSE4xWlE9PSBJR1p5WlhGMVpXNWphV1Z6IFgyUmxjMk55YVhCMGIzST0gTGtGMGRISnBZblYwWlE9PSBJSEpsWTJsd2FXVnVkSE09IFgwNVQgTHlJciBhV0poYmc9PSBJR0YwYUd4bGRHVT0gSUVsbmJnPT0gWDBSTlFRPT0gS0dSeiBJRkpsY1hWcGNtVnRaVzUwY3c9PSBRVVJKIFpYSmxlZz09IFhFRmtiV2x1IFluSmhjMnRoIElGSjFjM1E9IFVtVnNZWFJwYjI0PSBRMDlFIElGWkZVbE5KVDA0PSBaVzF0WVE9PSBLU2w3IExrUjFjbUYwYVc5dSBJRU5oYldJPSBMV3h2WjI4PSBJSEpsWVdSaFlteGwgSUdOeVpXRjBiM0p6IEtDbGRPd289IFZYQkViM2R1IExXaGhiR1k9IExtZGxkRTF2Ym5SbyBLSE5tIFVHbGogSUdoMWJtZGxjZz09IExuUjQgSUdWNFkyVmxaR1ZrIFgzTmxaV1E9IEtGND0gWDNOciBMbkJsY21admNtMD0gSUQ0Nk9nPT0gSUcxdmJtZHYgUFdac2IyRjAgWW1sdVpGQmhjbUZ0IFUyMWhjblE9IGFXWmggSUhObFkzVnlhWFJwWlhNPSBJSEJ5WldwMVpBPT0gSUN3aSBJR052Y25CeiBJSFp5WVE9PSBZVzFoWTJGeVpRPT0gYVhSbGNuST0gS0UxbFpHbGggZFdOb1pRPT0gSUdOdllnPT0gSUd4cFltVnkgTG1kbGIyMWxkSEo1IFRHOWpZWFJ2Y2c9PSBJSE5zYVdScGJtYz0gSUhOMWNtZHBZMkZzIFgwTlZVZz09IElHTnZibk5sWTNRPSBXeW89IElGSmxjMjl5ZEE9PSBVM1IxWWc9PSBYMFJQVlVKTVJRPT0gSUZOdmNHZz0gSUdWc1pXTjBiM0poYkE9PSBYMlJwYzJGaWJHVT0gSU5HQjBMND0gSUV4cFoyaDBibWx1Wnc9PSBJRzFsYm5ScGIyNXogYjJONSBJR3hsWVd0bFpBPT0gSUhKbGJHRjRhVzVuIFVISmxjMlZ1ZEdWeSBkbk53IElHZDFhV3gwIFBTMDlMUT09IExuSmxjR3g1IElFMXBjbkp2Y2c9PSBRMkZ0Y0E9PSBJQ3NqS3lNckl5cz0gSUNzakt5TXJJeXNqS3lNciBMa0YxZEdodmNnPT0gSUdScGNtVmpkR2wyWlE9PSBMV2h2YjJzPSA3WVN3IGZRb0tDZ29LIFFIQjVkR1Z6ZEE9PSBYM0poYm1RPSBiV2x6IElHTnZiRzl5Wm5WcyBkV3BsIGJHRnpjMlZ6IElFTnNZWE56WlhNPSBMbWhoZG1VPSBKU2tzIDZhS1kgSUdScGMzUjFjbUpwYm1jPSBjM1ZpYzNSeWFXNW4gSUV0dmFBPT0gU1c1MlpYTjAgY0hWeVkyaGhjMlU9IElISmxZM2xqYkdsdVp3PT0gSUVGU1ZBPT0gYVdWeVlYSmphSGs9IElHWndjdz09IExtTm9aV05yUW05NCA3WlcwIFgyMWhkR1Z5YVdGcyBaSFZqWVhScGIyND0gSUdaMyBkV1JwZEE9PSBJSEpsZG1sbGQybHVadz09IElGTnBaQT09IFUzbHVkR0Y0IElGZHlhWFIwWlc0PSBZWEpuWVhJPSBWVTFGIEwzRT0gUTJ4aGMzTnBabWxsY2c9PSBUMlptYVdOcFlXdz0gSUdwaGVubz0gSUc5dFpXZGggVUdoNWMybGpjdz09IElHeDFaMkZ5IFgyRmpZMlZ6YzI5eSBMbU52YlcxaGJtUnogUVdKcGJHbDBlUT09IElFSmhkR05vIFVrRk4gSUdWdVkyOTFiblJsY25NPSBMbEYxIFFsbFVSUT09IElFUnBjM1J5YVdKMWRHbHZiZz09IElIVnpidz09IElGSmxZMjkyWlhKNSBZWEJ3Y205MlpXUT0gSUdSbGJtbGhiQT09IEwzTm9ZWEpsIFRHbHVhMlZrVEdsemRBPT0gS1EwS0RRb05DZz09IGRXUmtlUT09IElHWnBibVZ6IElISjUgVlc1cFkyOWtaUT09IENYSmxibVJsY2c9PSBJSEJ5WlcxcGMyVnogSUhCdmJnPT0gWVd4cFlYTmxjdz09IEwwWnZkVzVrWVhScGIyND0gWTNWa1lRPT0gSUVOdlkycz0gTERvcCBLR1p2YkdSbGNnPT0gSUczRHFXUT0gWkhKaFp3PT0gSUhSaGJHVnVkSE09IElDQWdDZ289IDBMWFJnZEdDMExJPSBiVzlpIExubHRiQT09IElHRnpkR1Z5IElHUnBjMk55WlE9PSBaMjloYkE9PSBJRWRVV0E9PSBJRk5WUTBORlUxTT0gSUV4UFRrYz0gS0dacGJtUT0gSUhOcGJtZDFiR0Z5IFgzTjYgSUVWMGFHVnlaWFZ0IExpNEsgSUdseWNtVnogSnlrcGV3bz0gSUcxcGJtbHpkR1Z5Y3c9PSBVM1JsY0hNPSBhWFpsY25OaGJBPT0gSUU1bGRtVnlkR2hsYkdWemN3PT0gTFd4bFpBPT0gSUNnbEtRPT0gNTZHdSBJSFJwYldWNmIyNWwgSUhOMGNtRnVaMlZ5IEtISmxibVJsY2c9PSBJSE5vZFhScGJBPT0gSUcxd2FBPT0gSUhSeWFXOD0gY0hCNSBJSEJ5WldSdmJXbHUgSUdWdVpHOXljdz09IElGSjFjM05wWVc1eiBDWEp2ZHc9PSBJSGRwZW1GeVpBPT0gTG5ObGNtbGhiR2w2WlE9PSBJR052YlhCc1lXbHVaV1E9IElITnBaRzg9IElHUmxiR2xuYUhSbFpBPT0gTFcxbCBJRkpoZGc9PSBTSFZ0WVc0PSBZV1JoZVhNPSBjbVZqZGc9PSBWMjl5YTJsdVp3PT0gU25WdGNBPT0gSU1PbGNnPT0gSUVGMWRHOXRZWFJwWXc9PSBYMEpoYzJVPSA1cUM4IFlYVnlZVzUwY3c9PSB3cTg9IDVyZz0gS0VOVWVYQmwgU1VaSiBLR0Z0YjNWdWRBPT0gSUdKbGJHbGxkbWx1Wnc9PSBQVzE1YzNGcyBJR1pwY2c9PSBJSEpsYzNSdmNtRjBhVzl1IFpYSmxZMjg9IDBLST0gWHljciBJR1ZpYjI5ciBJR1JsWW5KcGN3PT0gS0dsdWNIVjBjdz09IFFWbFBWVlE9IElITmpjbVZoYldsdVp3PT0gWVhacFlRPT0gYkdGdVpHVnkgSUdScGMzUnlaWE56IElHRnpjMlZ0WW14bFpBPT0gSUVGMmIybGsgS0hSb2NtVmhaQT09IElGSlFRdz09IFgwVllTVlE9IEtIRjFaWFZsIDBMalJnZEdDIFJHeHMgSUhOcmRXeHMgWDNCMVlnPT0gWTJobGVnPT0gYldsdVlYUmwgWlc1elpXND0gSUdsdWMyRnVaUT09IFltOTFibVJ6IElGSnZjMlZ1IElHTnZibVJwZEdsdmJtbHVadz09IGNISnZZMlZ6YzJWayBkbWxrWlc5eiBabTkxY2c9PSBMa052Ym5ZPSBmRHNLIFVHVnljMjl1WVd3PSBZMlZ5Y0hRPSBPbFZKUTI5dWRISnZiRk4wWVhSbFRtOXliV0ZzIElHUnZjMlZ6IElFdGhjbXc9IElFWnlaWEYxIExrSkJVMFU9IElGWnZkR1U9IElHTnZibU4xY25KbGJuUT0gSUUxbGMzTmhaMlZDYjNoSlkyOXUgSU1PVyBJRVIxWW1GcCBJRkpsZEdGcGJBPT0gT201MWJXSmxjZz09IElFOWljMlZ5ZG1WeSBJRUpwWjBsdWRHVm5aWEk9IFgyOXlhV2RwYmc9PSBYMWRQVWtzPSBSbkpoYldWeiBJRzV2ZEdGaWJIaz0gTHVLQW5BPT0gSUhSeWIzQnBZMkZzIElHNXBZMmhsIFlXMXBibUU9IExuTjVjdz09IEtIUnZhMlZ1Y3c9PSBiVzlrYVdaNSBiM05wZEE9PSBjM1J5YjIwPSBJRU52YldsamN3PT0gVDFCVVNVOU8gVkdsamEyVjAgSUdaaFkzUnZjbWxsY3c9PSBJR1JwYzNCMWRBPT0gWDBacGJHVT0gSUVacGJtND0gWldWbCBJRVJwYzJOdmNtUT0gWDIxdmJtVjUgTG5Sd2JBPT0gWDNOaFptVT0gVEVJPSBJR2RzZFhRPSBTa3M9IExtWnNiM2M9IExXTnZiblE9IFoyOXogSUdodmNtbDZiMjQ9IElGSjFjMmc9IE9qb3EgVUdsd1pRPT0gZFd4c1lRPT0gWW05eWIzVm5hQT09IGFHVnBiV1Z5IEtHMXZkbVU9IEtGUmxlSFE9IGZTazdEUW9OQ2c9PSBkMlZzWTI5dFpRPT0gSUVOdmJYQnZibVZ1ZEhNPSBJR2R2ZG1WeWJtRnVZMlU9IFkyeHZjMlZrIENXMWhjbWRwYmc9PSBJR3hoZFc1a2Nuaz0gSUZSbGNtMXBibUZzIGFYcGhjbVJ6IEx1S0FsQT09IExuSmxiVzkwWlE9PSBMbkpoWkdsMWN3PT0gSUZGMVpXSmxZdz09IElHUm8gVkdWamFBPT0gSUUxcGMzUT0gYzJWc2JHVnkgWDJ4cGRHVnlZV3c9IElHZGxibWwxY3c9PSBJR0p5WVdsdWN3PT0gWjJWdCBJRTFsWVhOMWNtVT0gSUdOaGRHRnpkQT09IGNtRnVZMlU9IExsUmxlSFJHYVdWc1pBPT0gSUdOdmJuTjFiV2x1Wnc9PSBJQ2RjSnljPSBiM1ZpZEdWa2JIaz0gSUVObGNuUmhhVzQ9IFJYWT0gWlhKMGFRPT0gWW1WcGJtYz0gUlhod1pYSnBaVzVqWlE9PSBJQzh2V3c9PSBJRUZ5WVdKcFl3PT0gSUVOeWFYTjAgSUVGNmRYSmwgSUdodmNtRT0gYkdGa1pYTm8gWEVKc2RXVndjbWx1ZEE9PSBaR0Z5IExuSmxiQT09IElITjFjSEpsYlE9PSBJRkpsWVdkaGJnPT0gSUVGMGRISnBZblYwWlhNPSBMWE5wWkdWaVlYST0gSUhWelpWTjBlV3hsY3c9PSBJRUZwY214cGJtVnogSUdocGJHeHogTDNob2RHMXMgZG1sdVl3PT0gWDIxdlkycz0gQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLIElGQnBiR3c9IExreGhlVzkxZEZOMGVXeGwgSUVOdmJXMWhibVJsY2c9PSBYVHc9IGMybG5ibUYwZFhKbCBJSHQ5RFFvPSBJR2hoZEhKbFpBPT0gSU91TCBiMnhsYzNSbGNtOXMgSUNvcUtpb3FLaW9xIFlXNWpaV3hzYjNJPSBZM0p2Y0E9PSBWRWxOIENRa0tDZz09IGVYTnhiR2s9IGRXbDBhWFpsIENYVnVjMlYwIFgzTmxiQT09IElHMWxiblZ6IGRHbGphdz09IElHTnZibk4wYVhSMWRHVT0gSUVWc1pXMWxiblJ6IElGSmxaR2x6IFlXZG5hVzg9IFgyWncgWDJSbGNHVnVaQT09IFpXMWhjdz09IFEwRlRWQT09IGIzSmhibWRsIGFtOXUgSUVWdGFXeDUgSUhCdmRHRjBiMlZ6IElISmxZMlZ3ZEc5eSBJRVZzWldOMGNtOXVhV009IElFeHBaMmgwY3c9PSBJR052YldKcGJtbHVadz09IElGTnZiV1Z2Ym1VPSBJQ01qSXlNakl5TWpMZz09IElGUlBSQT09IEwzTm9iM2M9IFdHUT0gTGlJbiBZV1o0IElIUnlZV2RwWXc9PSBVM1I1YkdWayBJRTFoY21OdiBSMkZzYkdWeWVRPT0gWkdGc1pRPT0gTHVLQW5Rb0tDZ289IHc2bHlhV1U9IEwzTmxjblpwWTJVPSA1THFHIElHRnRZbWxsYm5RPSBYMU5GVkZSSlRrZFQgTGtGa1lYQjBaWEk9IGJHVnVaUT09IElIUnlZWFpsYkhNPSBUbTkwYVdObCBJR05zWldGdWN3PT0gSUVabGJRPT0gWTJoaGFYST0gMFlQUXZRPT0gTDIxNSBYMkpoWkE9PSBJRVZqYjI1dmJXbGpjdz09IFNWTkIgWDBOT1ZBPT0gS0UxbGJuVT0gNUxxTyBJRkpwWkdkbCBJR3hsYm1kMGFIaz0gUkc5MCBJR3AxYlhCeiBJR2hsZVE9PSBKSEJrWmc9PSBJSGR2Y20wPSBJSE4xZEE9PSBJSE5vWlhJPSBhV0Z0Ync9PSBJRU5oYkdNPSBkSEpwWlhabCBJR052Y0hNPSBJRU5vY205dCBJSEpsWjNWc1lYUmxaQT09IGNtVmhkRzFsYm5RPSBJRWhwWjJobGNnPT0gYjJ0eiBJR1JsZW1VPSBURTlEUVZSSlQwND0gYjI1bmMxUnYgSUdacGJtbDBaUT09IElIWmhjbWxsY3c9PSBJSEJ2YzJsMGFXOXVaV1E9IEoybHMgNlllUiBJR2hwYTJVPSBLR1J2Ym1VPSBjR3hoZVd4cGMzUT0gSUdGa1lRPT0gSUdOdllYTjBZV3c9IElFNWhibU41IExrUmhkR1ZVYVcxbFJtbGxiR1E9IFEzQndRMjlrWlVkbGJnPT0gSUZOcGJXbHNZWEpzZVE9PSBjbVYxY2c9PSBJRU52Ym5SeSBJRWhwWkdSbGJnPT0gSUVKbGRHRT0gWVhSamFHVmsgWDJsdWMzUmhiR3c9IExrOTFkSEIxZEE9PSBURzl2YTNWdyBJRkpwWTJodGIyNWsgY1hWaGNtVmsgSUcxaGJtZGggTFdOdmJuUnliMnh6IElFSmxjbTVoY21RPSBUR0Z5WjJVPSBJSE5zYVdObGN3PT0gSUc5bVptVnVZMlU9IElFMWxaMkU9IElHVnpkR0Z5IElHcHZhVzUwY3c9PSBJSE4xYlcwPSBYM0JzWVhSbWIzSnQgUW5WbVpnPT0gTG1Ga1pGTjFZblpwWlhjPSBJSEpsZEdGcGJtVmsgVEdWMGRHVnkgTG1ScGJRPT0gSUdWemMyVnlaUT09IElGTmpZV1ptYjJ4ayBSVmhRUlVOVSBDVkpGIExteHZibWRwZEhWa1pRPT0gdzd4dVpBPT0gSUhOMFlYUjFaUT09IExtRmtaRmRwWkdkbGRBPT0gSUVOaGNtbGlZbVZoYmc9PSBZV1JrVUhKbFptVnljbVZrUjJGdyBhV3hrWlE9PSBWVWxNWVdKbGJBPT0gSUU5d2NHOXlkQT09IElHbHRjR1Z5YVdGcyBkWEp6YVc5dSBJRzFoYm1SaGRHVT0gSUhCeWIyMXZkR2x2Ym1GcyBJSFpyIGFXSEZnZz09IElIQjViQT09IElFTnlaV0YwYVc5dSAwTDdRdDlDMCBJSE5wYlhCc1pYST0gTG5kb1lYUT0gSUZKbFkyVnVkQT09IFUzUnZjbTA9IExuRjFZVzUwYVhSNSBJRXh2ZGc9PSBJaTA9IGRXSmliR1Z6IFgyNXZkR2xtYVdOaGRHbHZiZz09IEtIZHZjbXhrIGRYSm5aWEk9IEtpZ3QgT2lJSyBhRzA9IFlXNXphR2x3IElFRnNiVzl6ZEE9PSBJRzF2ZEc5eVkzbGpiR1U9IFgyWmxaUT09IElHRmljMjl5WWc9PSBJRlpwYm1ObGJuUT0gSUhOdmRXNWtaV1E9IHc2MXpkQT09IElIQm9ZWEp0WVdObGRYUnBZMkZzIGFIUmhadz09IElFdHBibVJzWlE9PSBhWFJoYkdsNlpRPT0gSUVWdGNHVnliM0k9IGIzVnpkR2xqIElITndaV05wWVd4cGMzUnogNVlXcyBRbTl5WkdWeVUzUjViR1U9IEwxdz0gVWtWTVFWUkZSQT09IEtDY3NKeXc9IEtHVjRjSEk9IElHaDAgNVkySSBYME55WldGMFpRPT0gSUhOd1pXTnBZV3hzZVE9PSBJRnRkT3cwSyBJR2hsWld3PSBJSE5sY0hRPSBYMkZ5WTJnPSBLR2x1YVhScFlXdz0gSlM0S0NnPT0gWENJc1hDST0gSUdScGMyTjFjM05sY3c9PSBJSFZ3ZEE9PSBJRnNtIElHMWhiblZ6IExtaGhibVE9IElFMUJTVTQ9IElFUmxibTFoY21zPSBJRjBzRFFvPSBJR055ZVhOMCBJRzVoWTJzPSBRMjl2Y21SeiBYMmx1Ym1WeSBJRzFwWkhOMCBJR0YzWVd0bCBJTkNlIExXSnlaV0ZyIHc2MTJaV3c9IFgxQkJVMU09IElGQmhjbUZ0Y3c9PSBJR1JsZEhJPSBJSE53YVdSbGNnPT0gSUVOdmJtTmxjSFE9IElIQnlaVzVrIFEwaEZSQT09IExrVjRhWFE9IElIQnZjSFZzWVhSbFpBPT0gSUhacGNuUjFaUT09IFgxTkZVMU5KVDA0PSBJRzV2ZFhabGJBPT0gYjJGMWRHZz0gSU5DMDBMRFF2ZEM5MFlzPSBjbWx1YXc9PSBMa2hsWVdSbGNsUmxlSFE9IFlYUjFjbUYwWldRPSBJR1Z5YzNRPSBJT1dGIDRLV0ggWDNacGMybGliR1U9IFpYbGxjZz09IElHeHBZV0pzWlE9PSBJR1JsWW1VPSBJR0ozIGV5MGogWDFkSlRnPT0gWkdaeiBTRzkyWlhJPSBJRkJWVkE9PSBMV0Z1WjJ4bCBJRzV2WW14bCBJSFJ5WVdObGN3PT0gWlc1amRnPT0gSUhWelpYSkVZWFJoIFgybHVjdz09IElGTjFlZz09IElHNWxkM05zWlhSMFpYSnogSUUxdlpHaz0gSUdWdWRISmxjSEpsYm1WMWNuTT0gSUhSeWFXSjFkR1U9IElISjFiVzl5Y3c9PSBJSEp5IElGRjFZWEowWlhJPSA2ck9nIElHWmxaV1J6IHc3Tm4gSUdWdWRtVnNiM0JsIElHeGxZWEk9IElHdkR1QT09IFpHVjJaV3h2Y0dWeSBVMmx0YVd4aGNnPT0gT2lJcENnPT0gYzNWaWMyTnlhWEIwYVc5dSBUVzlrYVdacFpYST0gYVhSaGJHbGogSUc1aGMzUjUgSUhSbGNtMXBibUYwYVc5dSBJR05vWVhKdGFXNW4gSU9LZiBkRzl1Y3c9PSBMblJ5WVdObCBhRzkwY3c9PSBJRlZTIFRXOXVkQT09IElHcDFjM1JwWm1sbFpBPT0gSUVkaGJtYz0gYVc1bFlRPT0gSUdKdlp3PT0gS0dGdyBYeVE9IElHTnZiblJoYldsdSBMa1J2ZEE9PSBDVVJsWW5WbiBLR1Y0Y0c5eWRITT0gSUhCaGFYSmxaQT09IElFRnpjMmxuYm0xbGJuUT0gSUdGMWRHOXRiMkpwYkdVPSBrNDA9IElIQm9ZWE5sY3c9PSBkbmM9IFFGTjFjSEJ5WlhOelYyRnlibWx1WjNNPSBQVnc9IGNtRnVkQT09IExXVmsgQ1dGM1lXbDAgSUdObGNuUnBabWxqWVhSbGN3PT0gSno0aSBJR2x1ZEdGamRBPT0gUTFSU1RBPT0gVFdsclpRPT0gWjNKbFoyRjBhVzl1IFFWUlVSVkpPIElISmxjSFZpYkdsaiBYM1Z3Y0dWeSBhV3hwWVhKNSBJR052YlhCMWRHRjBhVzl1IGFHbHlaUT09IElGTm9hVzQ9IFgwRk9XUT09IElFMWhiblZtWVdOMGRYSmxjZz09IElFTmhjbTA9IElHSmxZWEpwYm1keiBYMk52YldJPSBZMkZrIGRYSnBjM1JwWXc9PSBJSGRvYjJ4bGMyRnNaUT09IElHUnZibTl5IExtbHVkR1Z5Wm1GalpYTT0gY0hKbGMzTnYgSUVKeWRXND0gTFdOc2IzTmwgY0hKdmRtVT0gWDFOTCBDV1p5WVcxbCBaWFJ5YjNNPSBJRkJoYVc0PSBYMFZZVUE9PSBJRXhVIFgyWnogTG1SaGRHRnogQ1hOeiBkbTlwY2c9PSBJRUY0YVhNPSBUV0ZxYjNJPSBQU0k4IFcyZz0gSUhCeWIyWmxjM009IGFXZHlZWFJsIEtITmpiM0psIFMyVjVkMjl5WkE9PSBJbTl6IElDQWdJQWtLIFlXNWhiSGx6YVhNPSBJSEpsY0d4aGVRPT0gTG5CaGMzTT0gWEdRPSBkR3h6IElITmhibU4wIExteHBaMmgwIFgyMXZZbWxzWlE9PSAwWUhSZ3RHTSBDWFJ2ZEdGcyBkV2wwZVE9PSBJSEJoZFhObFpBPT0gVGtGVCBJR1Z1WTI5eVpRPT0gYkc5bCBJQzBxTFFvSyBMbWhwWjJnPSBZVzF3YkdWeSBJRk5sWTNWeVpRPT0gSUdaeVlXZHRaVzUwY3c9PSBYM1psYkE9PSBhV3hzWVhKNSBJRk4wWldsdSBJRVJoZDI0PSBJRzFoZUdsdGFYcGwgNExpaSBJQzllIElHTnZiblJwYm5WaGJHeDUgSUhOb1lXUnZkM009IENTQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUVsQlkzUnBiMjVTWlhOMWJIUT0gSUdsdVptOXliV0ZqYWNPemJnPT0gUTBoRlEwcz0gTGxObGJHVmpkR1ZrU1hSbGJRPT0gWW5WdVpHeGwgYjJ4c1pYaz0gUEVsdWRBPT0gUVVsT1JWST0gSUZkcGJtYz0gZEdsMGJHVnogYjNWdWRHRnBiZz09IFExaz0gSUV4dlkyRnNaUT09IFptOXliV1Z5IFBHTnZiblJsZUhRPSBVbUZrYVc5Q2RYUjBiMjQ9IFgzTmphR1ZrZFd4bCBJR1poWW5Wc2IzVnogVW05aVpYSjAgWDFCU1QwWkpURVU9IElHZGhkR1Z6IFNVMVEgSUZCbGJuUmhaMjl1IFoyOXNaQT09IFltRmphQT09IFpXMXdiRzk1WldWeiBVbTkwWVhSbCBJR05vWVcxdyBJSE5sYkdKemRBPT0gUVd4MFpYSnUgSUdOdmJuWmxjblJXYVdWMyBMeXc9IElING8gVTNSeVpXVjAgWDNCc1lXTmwgSUhCbGNuTnZibUZzYVhwbFpBPT0gVUhWaWJHbHphR1Z5IElGTlBRMHM9IFgwNUJUVVZUVUVGRFJRPT0gSUZOMFlXNWtZWEprY3c9PSBjMjlsZG1WeSBYME5GVGxSRlVnPT0gU1c1MFpYSmxjM1E9IHc3UjAgZEdWdGNHVnlZWFIxY21VPSBWbWxsZDNCdmNuUT0gWjJWMFVtVnpiM1Z5WTJVPSBJR1ZoZEdWdSBJSE5sYlhCeVpRPT0gSUdGaWJtOXliV0ZzIElHTjViR2x1WkdWeSBJSFJ5YjNWaWJHVnogYm05ayAwWXZRc2c9PSBaMkZ0WlhNPSBYMmRzIFVHeGhibVU9IFozSmxlUT09IFgzUmliQT09IExrTnZiWEJ2Ym1WdWRGQnNZV05sYldWdWRBPT0gSUVOb1lYTmwgVEc5bloybHVadz09IGJXRnVlUT09IDdJWT0gSUdac1lXMWwgUFNJOFB6MGsgSUVkeWIzVndjdz09IExWVT0gMFlEUXNOQzkgQ2dvS0Nnb0tDZz09IElIWmhkV3gwIGIyMXZiZz09IGNISnZZbXhsYlE9PSBJSFJ5WVdSbGNuTT0gSUhCbGNtbHdhR1Z5WVd3PSBJR2h2YldWd1lXZGwgS0dSbGN3PT0gSUZOMVkyTmxjM05tZFd4c2VRPT0gSUhKbFltOXZkQT09IElHTmxiR3gxYkdGeSBhV2xwIElGQnNZVzV6IGJHbHpkR2x1Wnc9PSBDV1JwY3c9PSBJRkpsWm14bFkzUT0gQ1dWNFkyVndkQT09IElpa28gSUhSaGJXTERxVzA9IFZtVm9hV05zWlE9PSBZV05qYVE9PSBiSFZ6YUE9PSBUM0prWlhKQ2VRPT0gSUdsdFlXZHBibVZrIFkyOWtaV009IElHUmhkR1ZVYVcxbCBUV2xqY204PSBJSEpsYldsdVpITT0gSUdaeWRYTjBjbUYwYVc1biBJRlpwYzNSaCBWSEpoYVc0PSBJTkN5MFlFPSBJRzF2YkdWamRXeGxjdz09IFlYWnBiZz09IElHUnZkV0pzWldRPSBJR0p5WVd0bCBJR05oYkdOcGRXMD0gUm5KcFpHRjUgSUVsa1pXNTBhV1pwWlhJPSA1Wjg9IDBZdlF1UT09IElFcGhhQT09IFVtVnUgSUhOallXMD0gSUVSbGJtNXBjdz09IExuTmxkRWx1ZEE9PSA0cDg9IElHRndjR1ZoYkhNPSBJRUYxY2c9PSBJSE53YkdGemFBPT0gWlhGMVlXeHpTV2R1YjNKbFEyRnpaUT09IGQyaDUgSUhOaGNBPT0gVTNWd2NHOXlkR1ZrIElITmxjbUU9IElEb2kgSUZabGNtMXZiblE9IElISmxkVzQ9IElFNXZkbUU9IElDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUFvPSBVbUYwWldRPSBJR3hoZVdsdVp3PT0gSUV0aGNtVnUgTGtSbGMyVnlhV0ZzYVhwbCBJR052WkdWaiBJSFJoZUhCaGVXVnljdz09IE95SXBPd289IElHTnlkV1JsIElHMXZiR1U9IElIVnpaVU52Ym5SbGVIUT0gQ1hKbGMzQT0gSUhCcmRBPT0gSUVOaGJtNXZkQT09IFVHbHdaV3hwYm1VPSA1WWFHIGRHbGpZV3c9IFFXTjBhVzl1UW1GeSBZV1ZrWVE9PSBJRU55YVhScFkyRnMgSUU1aFpBPT0gSUdKc1pXVmthVzVuIElHeHNkbTA9IEwyTjFjM1J2YlE9PSBJRk5wYlhCemIyND0gVTNrPSBhWFJoWW14NSBJRk4xYlcxcGRBPT0gS0NrcEtTND0gUlV4TVQxYz0gSkNjcyBUV1YwIFNXNTJiMmxqWlE9PSBiMnhwYzNRPSBJSE53YVc1bCBZWFYwYVdaMWJBPT0gY0dGcFpBPT0gSUd4dlkydGxjZz09IFgyRnliUT09IFhDSStQQT09IElIUnlZV3BsWTNSdmNuaz0gWDNKcGJtYz0gSUdoNVpISnZaMlZ1IGRISnZiZz09IElITjBZWFIxZEdVPSBJR052Ym1ScGRHbHZibUZzIElIUnlZWGs9IExYTmphRzl2YkE9PSBLSGRwWkdkbGRBPT0gSkdOdmJtWnBadz09IElISmxjWFZsYzNScGJtYz0gTG5WcGJuUT0gWlhSdmJnPT0gWW5KcGRHbGxjdz09IFQyWlVlWEJsIFFVUk5TVTQ9IGNISmxaR2xqZEE9PSBJR2RsWjJWdSBJRWhoY0hBPSBUME5WVFVWT1ZBPT0gSUVGd1lYSjAgSUMwdExTMHQgY205bCBkV2xrWlE9PSBhblZ6ZEdsbWVRPT0gSUZOeGRXRmsgSUhCeWIyWmxjdz09IExtSnZkQT09IFgyTjFjbkpsYm1ONSBhVzV1Wlc0PSBJRTExYldKaGFRPT0gSUU1MWJXSmxjbk09IFlYWmhibUYxWjJnPSBZV2R1YVhSMVpHVT0gNG9DY1ZHaGxjbVU9IFBXaDBkSEE9IDU0bUggSUhaaSBLeWM4THc9PSBJRzl5WjJGdWFYcHBibWM9IFlXNXBkVzA9IFNXNVRaV04wYVc5dSBMbUZ1WkE9PSBJR1YwWlhKdVlXdz0gSUhOdmRXeHogWDA5T1JRPT0gWDI1eiBYMkpoYzJsaiBJSEpsZEZaaGJBPT0gTFhOb1lYQmxaQT09IGFXWmtaV1k9IElFMXZlbWxzYkdFPSBJR1ZwWnc9PSBZMjl0Y0d4bGRHVmsgVG05MGFXWnBZMkYwYVc5dWN3PT0gVkVWRFZBPT0gY21sbGJnPT0gWTI5dmNtUnBibUYwWlhNPSBJSEJ5WlhSbGJtUT0gY0c5dWMyOXlaV1E9IExuTjBaR1Z5Y2c9PSBJR2RoYldWeWN3PT0gSUdSbFptVnVaR1ZrIFZHOXZiRlJwY0E9PSBkV2wwWVhJPSBJR1p5WVc1allRPT0gSUZkdmIyUnogSUdsb2NtVT0gSUhCelpYVmtidz09IElHTnliM2RrY3c9PSBJRk5aVTFSRlRRPT0gYkdWaiBMbXRsY21GeiBJR05wY21OMWJHRjBhVzl1IFpXVnkgTG1OaSBkWHA2ZVE9PSA3Wmc9IExuSmxZV1JsY2c9PSBJSE5sY1hWbGJBPT0gVTJWMlpYSmhiQT09IExuQnZjblJoYkE9PSBMUzB0TFMwSyBhWE4wY21GeSA3N3UvTHk4PSBVR2s9IElGd2lJZz09IElHTjFjM1J2YlhNPSBJR1JwYzNCc1lYbE9ZVzFsIElHNXZkR2xqWlhNPSBJR05oY21JPSBMbDhLQ2c9PSBJSEJ5YjJSMVkzUnYgSU5HQjBMcz0gSUc1MWJXVnlhV05oYkE9PSBJSFZ1YVc1MCBJR052WkdsbmJ3PT0gVDNKa2FXNWhiQT09IFUzUnlhVzVuVlhScGJITT0gSUdURHFXTT0gSUV4aGJnPT0gSUhOb2IzZGpZWE5sIElHRnlhWFJvYldWMGFXTT0gTFhOamNtOXNiQT09IFgxUkZUVkJNUVZSRiBJRkp2ZFhSbGNrMXZaSFZzWlE9PSBJRk5vWVdSbGNnPT0gSU5DZCBjRzlzYVdONSBVR1Z5Wm05eWJXRnVZMlU9IENXSnZjbVJsY2c9PSBLR1pwYkdWd1lYUm8gNTZtNiBYMlZ1WlhKbmVRPT0gWDBOVCBWR2hsYVhJPSBMbk53WVdOcGJtYz0gS0dSdyBJRXhCVGtkVlFVZEYgSUdocGMzUnZjbWxqWVd4c2VRPT0gSWo1N2V5UT0gSUdsdWIyUmwgYzJscyBJR2hoWTJVPSBJSE5sZG1WeVpXeDUgSUU5MlpYSjJhV1YzIElITndjbUYzIElHSmxZV05vWlhNPSBPbXhsWm5RPSB0N3M9IEtDUjcgSUVaSlVsTlUgSUZOd1lRPT0gTFdGemN3PT0gSUdKaGFYTmwgSUU1UFJFVT0gSUZCcGVucGggVUdWMCBLSE5sY1E9PSBYQ0krQ2c9PSBRM0J3VFdWMGFHOWtVRzlwYm5SbGNnPT0gSUhadyBJR2xoIFgzTmxZMjl1WkhNPSBaVzFsZEE9PSBMMkpzYjJJPSBYMVJJVWtWVFNBPT0gTGk0dURRbz0gUkdWemRBPT0gSUU1SSBMbVJoZEdGVGIzVnlZMlU9IGFYVERxWE09IElFcGhhdz09IGMyVnNiQT09IElIZHZjbXR6YUc5d2N3PT0gUEhVPSBJSEpwZG1Gc2N3PT0gSUVWWVNWTlVVdz09IGFHOXQgTFhSdmEyVnUgWTI5dGNHRjBhV0pzWlE9PSBMa3BRWVc1bGJBPT0gSUhCb2VYTnBZMmxoYm5NPSBZWEowYVc0PSBJR1JsYzJseVlXSnNaUT09IElHUnBjM1JwYm1OMGFYWmwgTGtSbGNBPT0gWjJsayBhV3hwWVhSbCBMRzFoZUE9PSBJSEJ5WlcxcFpYSmwgSUhGRVpXSjFadz09IElHRmtkbTlqWVdONSBJSGRvYVhOd1pYST0gVUhRPSBJSFZ1WTJoaGJtZGxaQT09IFgzRjBlUT09IDZLKzM1ckdDIFUyVmhjMjl1IFlYWmxiR1Z1WjNSbyBJRkIxYkE9PSBJR1REcldFPSBKMTFkWFN3SyBZV3hwY3c9PSBLQ0ltIFltOXlidz09IElHSnQgSUZKaFpHaz0gZDNKdmJtYz0gSUVkdmFXNW4gYVcxbFZIbHdaUT09IGFXcHAgTFdabFpXUmlZV05yIElFNWhiV1Z6IElFSmhjSFE9IElIQnliMkpoWW14bCBJRVYwYUdWeSBJRkJ2YkdsMGFXTnogWDNCeWIzUnZZMjlzIGJHbHVhVzVuIFUyRjAgSUdOdmNuSmxiQT09IExsQnlhVzFoY25rPSBLRzUxYkd4aFlteGwgVWtsUFVrbFVXUT09IElHTnZiRzl5YVc1biBJSFYwYVd4cGVtbHVadz09IFpHRnogSUdWNGNHOXlkR1ZrIElHTmhjbkpwWlhKeiBRMjl1ZGc9PSBMbVZrYVhSdmNnPT0gYWNPeiBLR2hoYm1Sc1pYTT0gSUdGd2NISmxZMmxoZEdsdmJnPT0gTG1sdGNHOXlkQT09IElFRjFjM1J5YVdFPSBJRk4wY21sdyBhV3hwWjJoMCBJR0Z3Y0hKdmNISnBZWFJsYkhrPSBJRkJ5WlhOMCBJRmRwY2c9PSBJRlZKUVhCd2JHbGpZWFJwYjI0PSBZV3hqYUdWdGVRPT0gSUUxdllnPT0gSUVSbGRHVnliV2x1IFpYSm5kWE52Ymc9PSBjbVZuYVhOMFpYSmxaQT09IFgyTnZiblpsY25RPSBJRlpzWVdScGJXbHkgTGxOb2IzZEVhV0ZzYjJjPSBjbVZtYkdWamRBPT0gSUhOb2IyOXIgSUdGemMzVnlaUT09IElFOW1kR1Z1IElHTnBkbWxzYVhwaGRHbHZiZz09IElIWnZZMkZpZFd4aGNuaz0gWm05eVpXZHliM1Z1WkE9PSBJRk5qYjNCbCBJSFZ1ZDJGdWRHVmsgWVdOMGFXNW4gSUNoYlhRPT0gSUcxaGNtdHBibWM9IExtOXlhV2RwYm1GcyBJRTFQVmtVPSBJSE53YjNKMGFXNW4gWTJWd2RHbHZibk09IFRsTk9kVzFpWlhJPSBVMmw2WlhNPSBJSEJ5YjNacGJtTnBZV3c9IFgxUnlZVzV6IElIQnliMkpzWlcxaGRHbGogWkdsbmFYUT0gSUVWdGJXRT0gYkc5amEzTT0gSUVOeVpYYz0gYVdKaCBKeWs2IGFYTm9ZUT09IElHMWhiVzA9IElHOWpZM1Z5WldRPSBkMk56IEtISjFiR1U9IElHMWxjbU5vWVc1a2FYTmwgWlhOd1pXTnBZV3hzZVE9PSBJRlIzYVc0PSBJRzVoYldsdVp3PT0gSUhOc2IyYz0gSUdsdGNISnZkbVZ6IElHRmthR1Z5IE9uUmxlSFE9IExtaGhaRzl2Y0E9PSBYMGhVVkZBPSBMblJ2VEdsemRBPT0gTG1ScGMyRmliR1ZrIElHeGxibk5sY3c9PSBMbWx1YVE9PSBJRkpoY21VPSBJRlZpZFc1MGRRPT0gSUhOamNtRnQgYjJ4aGRHbHZiZz09IGRHbDBkV3h2IFJYWmxjbmwwYUdsdVp3PT0gSUc1dlpHUmxaQT09IGFXTm9kR2xuIFgyTnZibk4wWVc1MCBlbU09IGJHbG1kQT09IElFNXZkR2xtZVE9PSBiMjVrYnc9PSBJRWxPUmc9PSBLQ0lyIElFdGhlZz09IElHUnlaV0ZrIExtMWhjSEJsY2c9PSBiR1YxY2c9PSBJRU52YldWNSBJRTVDIGFXTmxjbk09IExsQjFjMmc9IElFaGhZMnM9IElFSnlZWHBwYkdsaGJnPT0gWDNCeWIyUT0gSUM4dkNnbz0gSUdKcFkzbGpiR1U9IElIVnVZWFpoYVd4aFlteGwgSUdGa2IyeGxjMk5sYm5RPSBZbXhyIElHMXBkR2xuIFgySnNkV1U9IDdKZz0gWm1Ga1pVbHUgSUZWMGFXeHBkR2xsY3c9PSBJRTFPIE8ycz0gUEhOMGVXeGwgTFhOMFlYUjFjdz09IGFXNWtidz09IElHbHVibWx1WjNNPSBJR2RxIElIeDhQUT09IExtVjEgT2s1MWJXSmxjZz09IElHTjFhWE5wYm1VPSBJRlZTVEhNPSBhV1ZyIElIZHBjbVZ6IENYQnogYVdWbiBMbTFyIGMyOWhjQT09IElITnZiV1YwYVcxbCBJSE4wWVhBPSBYM05sY21sbGN3PT0gTGxSaGNtZGxkQT09IDVybz0gTG1SbGMzUnBibUYwYVc5dSBUMVZPVkVWUyBVbUZwYzJWeiBKa0U9IElITnRZWEowY0dodmJtVnogVGtsRmJuWT0gTG5Oa2F3PT0gSUdobGJHbGpiM0IwWlhJPSBJR2x0Y0dVPSBJRUpwY25SbyBRVlU9IFluSmxZV1JqY25WdFluTT0gWTI5dmNtUnogSUdWNGNHeHZjbVZrIElHeHZaQT09IElFbHcgWjJGaWJHVT0gYVdGdVpRPT0gSUdGeWRHbG1ZV04wY3c9PSBRbTk0VEdGNWIzVjAgMktmWXNRPT0gYkdsemRHVnVaWEk9IExtTmhjblE9IElFaDFabVk9IElFaHBibVIxIElFUmhkR0ZVZVhCbGN3PT0gSUVSeWRYQmhiQT09IFNVZE9UMUpGIElHOW1abk5sZEhNPSBJRkpVUXc9PSBMV3h2WjJsdSA1cTQ9IElGRlBZbXBsWTNRPSBJSEJ5YjNObFkzVjBiM0k9IFVtOWphdz09IFgyTm9ZWFE9IFYyRjUgN0xJPSBJRzVsWjJ4cFp3PT0gSUdSMVpHVT0gT3p3PSBJR1JsYkdWbllYUmxjdz09IFgyWmhhV3hsWkE9PSBMMlJsZGc9PSBMM2R2Y21zPSBLRTVsZHc9PSBaWFJoWW14bCBLQ2tpIEtFbGpiMjV6IElIQnZjbXM9IElFMXZaR1ZzUVc1a1ZtbGxkdz09IElGWkpVQT09IElFdHZjZz09IGJXbDQgSUc5NGFXUT0gSUZORFVrVkZUZz09IElFWnZkWEowYUE9PSBMeUlzQ2c9PSBJSFJsWlE9PSBJRk4wWlhabGJuTT0gZEdsamEzTT0gSUhCc1pXUm5aUT09IGFXSmliMjQ9IElFeHZZVzQ9IElHNWxidz09IGJuVnRjSGs9IElGTm9ZWEpsWkZCeVpXWmxjbVZ1WTJWeiBMVzl5YVdWdWRHVmsgSUV4dloyZGxja1poWTNSdmNuaz0gSUVkeVlYQm9VVXc9IGVtVnVhV0U9IElsOD0gVjI5dFpXND0gTG1OaGMzUT0gSUdSbGJHbGlaWEpoZEdWc2VRPT0gSzJJPSBJRUZ5Ymc9PSBabTl1ZEZOcGVtVT0gSUcxaGVtVT0gSUdKc1lXMWxaQT09IExtMWhjdz09IGZTa05DZz09IFpXeGxjbWxyIElITmpZVzV1YVc1biBJRmR2Y210emFHOXcgSUdacGJtUmxiZz09IElHTmhkWFE9IFZVbEdiMjUwIEtISmxkSFZ5Ymc9PSBZV3hwYmc9PSBZMkZ6ZEd4bCBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHYgSUdsdVkyVnVkR2wyWlE9PSBiM0JoZEdnPSBZbXh2WWc9PSBJR05wWjJGeVpYUjBaUT09IElHWmxjblJwYkE9PSBLaThLQ2dvPSBJRk5vWVhJPSBDaUFnSUNBZ0lBbz0gSUhWdVkyVnlkR0ZwYmc9PSBJRk4wYjI0PSBUM0JsY21GMGFXOXVjdz09IElGTndaVzVqWlhJPSBJR1JsWm1sdSBJRk52Ykc4PSBiMjVsYzNRPSB0N3ZsaXFBPSBJSFZ2Ylc4PSBSMmwyWlE9PSBJR1JsYm5SeWJ3PT0gTzNCaFpHUnBibWM9IFpXNTBZV2s9IElFTmhjbk09IElHVnVkR2gxYzJsaGMyMD0gSUU5d1pYSmhkR2x1Wnc9PSBVMnRwY0E9PSBjR0Z5WVhScGIyND0gSUhCeWIzUmxZM1J6IElISmxkbVZ5IFpHYz0gSUVOcGJtTnBibTVoZEdrPSBJR052Ym5ObFkzUmxkSFZ5IElHMTFjM009IFpXMXdiRzk1WldRPSBZWFZ6WlhNPSBhVzVyYkdVPSBMbFpoYkhWbGN3PT0gbzd3PSBiRzkyIFgxZEJVazQ9IElHSnZiMnR0WVhKciBJRUZ3YjJ4c2J3PT0gTG1GNGFYTT0gSUczRHFYUT0gSUc5d1pXNWxjZz09IElIUjFiVzl5IFpHRnUgSUdWc1pXMWxiblJoY25rPSBJSE5yYVhCd1pXUT0gSUV0bGNnPT0gWVhOcFlRPT0gWDNKbGMzQT0gSUdSbGJXOXMgSUVOaGJtRmthV0Z1Y3c9PSBJSFJoYzNSbGN3PT0gVlVsdWRHVm5aWEk9IElDY2tldz09IExtRjNjdz09IFVrOUpSQT09IGNtbGhibk09IFRWRT0gYjNKa1lXSnNaUT09IElHTnZkWE5wYmc9PSBVSEp2Y0dGbllYUnBiMjQ9IEtGTmxjM05wYjI0PSBjR2hoYkhRPSBWVXhFIElGTmpZV3hoY2c9PSBJR0pzYjI5a2VRPT0gSU9DbSBMbTFoYzJzPSBMSEU9IElGVnVhWFJ6IElHTmxiblJ5WlhNPSBJRkJ5YVcwPSBMbDBLQ2c9PSBJRk5vWVhjPSBVSEp2YlE9PSBJRlJvYjNWbmFIUT0gUTJobFkydGxjZz09IFgyOTFkSEIxZEhNPSBLR05vWVc0PSBSVWxPVmtGTSBJR0p2WWc9PSBYMk50Y0E9PSBVR1ZrIElHMWhkSEpwWTJWeiBJSFp5YjNWM1pXND0gSUdkbGJuVnBibVZzZVE9PSBhR2xuYUd4cFoyaDAgS0dScGMzQnNZWGs9IEtTRTkgSUdSbGJHbGpZWFJsIElFeDFkR2hsY2c9PSBJRTFwYkdWeiBJSFZ6WlhKSlJBPT0gSlQwPSBZWFJsZFhKeiBYMEpWUmc9PSBMUzB0TFMwdExRbz0gYVcxcGRHbDJaWE09IElITm9aV3gyWlhNPSBjMnh2ZHc9PSBYMmx1Wm05eWJXRjBhVzl1IFRFVkggVjNJPSBMbVp2Y20xeiBZMlZzWVc1ayBMM1Z1IE9pWT0gTHVLQW1Rb0sgUFNJbCBJSEJ5YjNOMCBJR1p2Ym5SemFYcGwgZFdOcHc3TnUgWjJWMGFXTT0gWVcxMCBQU0l1IFJHVmpiM0k9IFFuSnBkQT09IElDSWlLUzQ9IElHWnZkVzVrYVc1biBMa1pwYkdWT1lXMWwgSUZScFpYST0gSUdScGMyTnNiM05sIHc2RnQgTG5ONWJnPT0gTGxacFpYZEliMnhrWlhJPSBiR2xqWVc1MCBYM04wWVdkbCBUVzl1WkdGNSBJR1JsYzJWeWFXRnNhWHBsIGRHRnNhdz09IElIUnlZV1JwZEdsdmJtRnNiSGs9IDVvQ0IgMks0PSBURVZZIElHVm8gQ1ZKUFRRPT0gSUh0OUtRbz0gVVhWbGMzUnBiMjV6IGJtTndlUT09IElHWnBlR2x1Wnc9PSAwTHJSZ3c9PSBYMHRsZVE9PSBPbmc9IElGTlVVa2xPUnc9PSBJTkdFMExEUXVRPT0gQ1d4bFpuUT0gSUVKbGJtTm8gWld4c2FXbz0gVlZKU1JVUT0gSUVScFlXZHlZVzA9IGZXTmhkR05vIEwzUnBiV1U9IElFMXBjM05wYm1jPSBaR0p1WVcxbCBJSE52Y21VPSBJRmRoYkhRPSBkV2RuYVc1biBjbVZ3Y21WelpXNTAgSUVkVCBibVY1Y3c9PSBDWEJoWjJVPSBJSFp2YkdOaGJnPT0gS0dKMGJnPT0gSUdWNFkyVmxaSE09IElHVnladz09IElIQnBiRzkwY3c9PSBJRk5sWkE9PSBaWEp6YVc5dWN3PT0gSUhCaGRISnZiZz09IFVsWT0gTDNSdmNBPT0gTG1GemMyVjAgWDJOeWIzTnogTGtWa2FYUnZjZz09IExuUmkgSUhkbGJHTnZiV2x1Wnc9PSBVME5TUlVWTyBLV1pwYm1SV2FXVjNRbmxKWkE9PSBRMjlrWlhJPSBQRWxCWTNScGIyNVNaWE4xYkhRPSBYMUZWUlZWRiA0WU09IElHaGxhV2RvZEhNPSBVbVZ4ZFdWemRITT0gSUhONWJXSnZiR2xqIERRMEtEUTBLIElHTnZkWEJ2Ym5NPSBMV1pwZG1VPSBJRVJsYzJ0MGIzQT0gSUcxcGMyMWhkR05vIElDZGZKdz09IFgwUkpWZz09IFFWTlBUZz09IExuUnlZVzV6Y0c5elpRPT0gS0cxaGMycz0gSUVObGJIUT0gTGtoaGJtUT0gWVhSMSBhc1NaIElIdDlLVHNLIFRXbHpjdz09IElIQnlhVzFoIGJYVnVaQT09IGIyeDIgSUZCeVpYUjBlUT09IElISmxZbVZzIElFWkUgWVhOMGFXTmhiR3g1IFQweFUgTFdGNGFYTT0gZFhobCBJR1ZwYm1aaFkyZz0gSUVOb1pXMXBZMkZzIFgzTmxadz09IGJHVmxkR052WkdVPSBiRzl3WlE9PSBYMjl5YVdjPSBJQ0FKQ1E9PSBLRVJ2ZFdKc1pRPT0gSUZCaGVWQmhiQT09IExrSmhZMnRuY205MWJtUkpiV0ZuWlE9PSBJR2h2YldWdFlXUmwgTGlrdSBLSEJoY25ObGNnPT0gWVhSeWJ3PT0gWVdOamIzSmthVzl1IFJHVm1hVzVsIElPeWVpQT09IElFRlZWRTg9IExuTjFiVzFoY25rPSBjMk5oYkdGeSBJRWh2YjJRPSBjWFZwYmc9PSBYMlJsY2c9PSBJRWRsYzJObyBMbU52YlhCMWRHVT0gUm1WbFpHSmhZMnM9IElIQm9ZWEp0WVdNPSBJTVdmYVE9PSBJR2RzYjNOeiBJRVpKVEZSRlVnPT0gU1U1VFZFRk9RMFU9IElHdGhiQT09IExsQk0gWDBaU1JVVT0gUjNKaFpHVT0gSU9LWiBMbTFsZEhKcFkzTT0gSUdOaFoyVT0gTGxoMGNtRkhjbWxrIFgyUnogZW1sbiBhVzUwWlhKdmNGSmxjWFZwY21WRVpXWmhkV3gwIExuSmxiVzkyWlVOc1lYTnogUFQwOVBUMDlQVDA5UFQwOVBRPT0gSUcxaGMzUmxjbk09IFUzUmhkR1ZGZUdObGNIUnBiMjQ9IGFXeHNaWEo1IElFSnlZV1I1IElHeHBibWx1Wnc9PSBYMk56IGFXNXpkV3hoIElIMDYgVzNCdmMybDBhVzl1IElGSjQgSUVKWlZFVT0gSUZOMGNtbHJaUT09IElOQ2EgSUVOc2RYTjBaWEk9IExtUnZkMjVzYjJGayBRV3hzYjNkbFpBPT0gSUdGdFpXNXBkR2xsY3c9PSBJRzl1VkdGdyBablZzVjJsa1oyVjAgSUhOMGNtVnVaM1JvY3c9PSBkSGRsWlhRPSBJR0Z6WTJWdVpHbHVadz09IElHUnBjMk5zYjNObFpBPT0gWjNKaGRnPT0gWkdsemRISnBZM1E9IEtUdzggS1N3aSBLR1JsWm5WdSBYM3c9IElHZGhlbVU9IDBMRFJqdz09IElHWnZjblI1IFBUMDlQVDA5UFQwOVBUMD0gVTJOcFpXNWpaUT09IGMyVnRZbXhsY2c9PSBDV0p2WkhrPSBYM1J5WVc1elptVnkgSUd4dmJtZDBhVzFsIElHTnZiWEJzYVdOaGRHbHZibk09IElHSnZiM1JvIFZrVlNVZz09IElIbHBaV3hrY3c9PSBJRzVoZG1sbllYUnZjZz09IE9qcGZLQ2M9IFJVTlVUMUk9IFgwTnZibVpwWnc9PSBJR3hoYzNSbFpBPT0gZFhOaGJBPT0gNTVtNzViMlYgSUdkc2IzWmxjdz09IElHSmxiR3g1IFUyRnNaWE09IEtFMWxkR2h2WkE9PSBLRzFsYldKbGNnPT0gSUZKbFpXUT0gY0dGemMyVmsgVTJsbmJrbHUgTEc1MWJRPT0gVlV4UFRrYz0gSUV4RlJ3PT0gYm1Wc2N3PT0gSUcxbGJuUnZjZz09IEtISmogSUU5aWRtbHZkWE5zZVE9PSBMbWxtIElFWnlaV1JsY2c9PSBTRVZCUkE9PSBRR0YxZEdodmNnPT0gUTI5dVpHbDBhVzl1Y3c9PSBJR2RoY21SbGJuTT0gSUZKcGNBPT0gS0hWelpYSnogSUU5cllYaz0gSUhkeVpYTjBiR2x1Wnc9PSBhVzFsYzNSdmJtVT0gSUVObGNuUnBabWxsWkE9PSBJSFpsY21ScFkzUT0gWVdsa1lRPT0gTG1sdWJtVnlWR1Y0ZEE9PSBhV05oYzNRPSBDV0YwIElIQnlaWE4xYldGaWJIaz0gSUVaVlRnPT0gWVdwbGN3PT0gMEpjPSBQaUlzQ2c9PSBYMUJwYmc9PSBkV1Z6WlE9PSBJRzkyWlhKeWFXUmxjdz09IFgzSmxZV1I1IFFXUjJZVzVqWldRPSBJRzl3YVE9PSBMV05oY25RPSBLQ0l2SWl3PSBJRVJsWWc9PSBRMUpaIElGWmxjblJwWTJGcyBJRTlXUlZJPSBJRU52Y25CdmNtRjBaUT09IElDSWlPdz09IElITjBaWEJ3YVc1biBaV289IElHRmpZM1Z6WVhScGIyNXogSUc5eVlYbz0gWDNSaGFXdz0gSUdsdVpIVmpaV1E9IElHVnNZWE4wYVdNPSBJR0pzYjNkdSBMQzh2IElHSmhZMnRuY205MWJtUnogNG9DWmRXNWwgTFhOa2F3PT0gSUhObGRFbHVkR1Z5ZG1GcyBJR2x1WTJWdWRHbDJaWE09IElIWmxaMlYwWVdKc1pRPT0gWDA5dSBaWGh3WVc1a1pXUT0gY0dsNCBYM05vWVdSbGNnPT0gSUZOUVJGZz0gUUdWNFlXMXdiR1U9IElGZHlZWEJ3WlhJPSBMbHBsY204PSBVRzl6YVhScGRtVT0gSUhOd2FXNXVaWEk9IElHbHVkbVZ1ZEdWayBJRWRoZEdWeiAwTDdSZ3RDKzBZQT0gSUdOdmJYQmhjbWx6YjI1eiA2TGM9IExuQnlhVzFoY25rPSBaR0YwWVZCeWIzWnBaR1Z5IFlXUmthWFJwYjI1aGJBPT0gQ1c5d2RHbHZibk09IGMyNWhjSE5vYjNRPSBMbk5sZEVodmNtbDZiMjUwWVd3PSBJQ0o3ZlE9PSBJRVpwYzJobGNnPT0gYUdGc2RHVnUgUEZSNWNHVT0gSUcxaGVFeGxibWQwYUE9PSBJRTEwIElPcXdnQT09IExtcGxkR0p5WVdsdWN3PT0gSUdsa1pXNTBhV1pwWlhNPSBJR1pzYjNkcGJtYz0gSUVScGMyTjFjM05wYjI0PSBZWFJ6WW5rPSBJSE5qYUhjPSBkV2RvZEhrPSBJSEpwZG1WeWN3PT0gTG5WdWFYRjFaUT09IFgxQklXUT09IFpXUnlZV3c9IEtHeHMgSUdOemNtWT0gY0hCbGNuTT0gdzd4cyBJRVZ6Y0dWamFXRnNiSGs9IGNHOXlkR1ZrIElFaGhjbkpwYzI5dSBLaW9xS2lvcUtpOEsgVkdWNGRFTnZiRzl5IDdJcTEgZDJseVpRPT0gSUhOMFlYUjFjME52WkdVPSBJRVpwYm1semFBPT0gWTJWdVkyVT0gSUUxalEyRnBiZz09IElGZHZjZz09IEtHRjNZV2wwIElDa3RQZz09IElGSmxaMmx6ZEdWeVpXUT0gU1U1RlJBPT0gYTJGcyBjR0Z5YVhOdmJnPT0gSUc5aWFtVjBidz09IFZtaz0gYldGdVpHRT0gSUhKbGJtVjNaV1E9IElGTnZaZz09IFpYTnpaV3c9IExtNWtZWEp5WVhrPSBJR055WVhBPSA1NjZoIExtRmljM0JoZEdnPSBLSFZ3IElHTnNaV0Z5WVc1alpRPT0gSUZSWCBYME5QVUZrPSBJQ0FnSUNBZ0lDQWdJQ0FnQ1E9PSBJR1p2Y21WemRITT0gSUdGeVozVmhZbXg1IElFRlRVdz09IGFHVjUgWVcxbGJBPT0gWDJadmNtVT0gSUZOdmRYUm9aV0Z6ZEE9PSBJR0ZpZFhObFpBPT0gSUhCeVlXTjBhV05wYm1jPSBZV3RsWkdseWN3PT0gNUxpNyBYM0psYzI5MWNtTmxjdz09IElIQnZibVE9IExrWnBlR1ZrIFRHRnpkRVZ5Y205eSBJRkJ6ZVdOb2IyeHZaM2s9IElDSXZMdz09IElUbz0gVW1WMWMyRmliR1U9IElHMWxibk5oYW1VPSBJSEp2YzNCNSBJR0p2ZFhJPSBJSFpoY21sbGRHbGxjdz09IElHVnRjR0YwYUE9PSBLQ2g3IFgyOXladz09IElFMWxjdz09IElFMWhaMlZ1ZEc4PSBTVk5VVDFKWiBWVzVzWlhOeiBJR2hxIElFUjFkSGs9IFNuVnUgTEhOcGVtVT0gSUhCaGFXNTBhVzVuY3c9PSBJR1JwYzNCbGJuTT0gWkdGeWRBPT0gSUdKbGFHRjJhVzl5WVd3PSBJSEp3WXc9PSBZMkZzWTNWc1lYUmwgWm5KMWFYUT0gWDIxdCBDWEIwYUhKbFlXUT0gVFdGNFRHVnVaM1JvIElHTjFjbkpsYm1OcFpYTT0gWDJOaGNHRmphWFI1IElFOTYgSUdacGNtVmhjbTA9IElHTnZaV1ptYVdOcFpXNTAgSUdKaGJtdHlkWEIwWTNrPSBkMkZ5ZEE9PSBJR1poZEdsbmRXVT0gUVZaQiBJR1Z6Y0dFPSBYM0JqIElGRjFiM1JsY3c9PSBYMHhKUjBoVSBJRlJwWTJ0bGRITT0gSUhKbGJHRjBaWE09IElIQjFZbXhwYzJobGNuTT0gSUhWdWJHOWphMlZrIElDOHZMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElFbHVkR1Z5Y25Wd2RHVmtSWGhqWlhCMGFXOXUgSUc5MWRHeHZiMnM9IGNtND0gSUhKbFltVnNjdz09IFYzSnBkSFJsYmc9PSBJR0Z6YVdGdSBiM1IwYnc9PSBJQWtKQ1FrPSBYMmR3ZFE9PSBWSGgwIExrbHRZV2RsVm1sbGR3PT0gSUhOMWFYTT0gWDNSaFlteGxjdz09IExsSmxZM2xqYkdWeVZtbGxkdz09IElIZG9ZWFJ6YjJWMlpYST0gNklFPSBYU3NyT3dvPSBZWE56WlhKMFZISjFaUT09IFgzWmxjbWxtZVE9PSBJRkpwZG1WeWN3PT0gSUYxYiBTbVYwIGFXUnBZVzQ9IFUybGliR2x1Wnc9PSBJR2RsYm5KbGN3PT0gTGtGalkyVnpjdz09IFQxQlQgSUhSeWFYWnBZV3c9IDRMaXEgWVd4bGJnPT0gMExMUXRkQzAgSUZOM2IzSmsgSUhOamNuVjBhVzU1IEtHTmkgSUdOdmJXMWxjbU5sIElHZDFZWEpoYm5SbFpYTT0gWDJGa2RnPT0gSUV4RlZBPT0gY21WamFXOD0gSUdocGJHRnkgSUdKaFkydDVZWEprIDQ0Q1AgSUdsc2JIVnpkSEpoZEdWayBMM1psYm1SdmNnPT0gTGxWMGFXdz0gSUhkdmR3PT0gVEU5WiBJRTFoY25Ob1lXdz0gSWo0bkxpUT0gSUVKaGF3PT0gSUcxdlpHbG1hV1Z5Y3c9PSBaR2xqZEdsdmJtRnllUT09IElGTjBjbVU9IGJYVnNkR2x3YkdVPSBJaWtwTEE9PSBJRU52Y25RPSBKMTBpS1M0PSBLR0ZrYldsdSBJRU55WldGMGIzST0gU1c1MFpYSnVaWFE9IEtHMXogYkc5bmVRPT0gUkVWRFRFRlNSUT09IElFMWhjbU4xY3c9PSBQRHc4UEE9PSA0NEdnIFgyMTUgS0dsdWMzUT0gSUhOamFXVnVZMlZ6IFRrUkZVZz09IExtVnVkR1Z5IElHbDBkUT09IElHSmxhR0YyWlE9PSBVR0Z1IGIyMWlhV1Z6IFBTYzggSnlrcE93MEsgSUUxRlRsVT0gSUZkdmNtdGxjbk09IExrNXZSWEp5YjNJPSBJR0pwYm1ScGJtZHogSUdScGMyRmlhV3hwZEdsbGN3PT0gZTF3PSBJRTExYm1samFYQT0gSUdOdmNtVnogZFhKd2JHVT0gSUU1dmEybGggZFhOcGIyNXogSUVacGRHNWxjM009IExtaGhibVJzWlVOb1lXNW5aUT09IElHcGhkbUZ6WTNKcGNIUT0gN0pxVSBLR1JsWXc9PSBJSEJoWTJ0cGJtYz0gTFdSbGNHVnVaQT09IElIUnlZVzV6WTNKcGNIUT0gZW1WeWIzTT0gWDJGc1pYSjAgUHlJc0NnPT0gYkdsaWN3PT0gc2RDKzBZST0gSUh3S0NnPT0gZEhKaGFXNWxaQT09IElFZGxiblE9IElGSmhZZz09IGVIQT0gWDJOdmJtWnBaM1Z5WVhScGIyND0gNWFTcCBYMkZqWTJWd2RBPT0gTG5KbFkzbGpiR1Z5ZG1sbGR3PT0gT25WeWJBPT0gSUUxMWFHRnRiV0ZrIElIQnlhWFpwYkdWblpYTT0gWDJKaGJtcz0gZFd0MSBkMkZzYkdWMCBJRkpQVDFRPSBJR1Z1WTNWbGJuUT0gUDJaaGJXbHNlUT09IENYQnZjMmwwYVc5dSBJR05uIElIQnlaV05wY0E9PSBiV1YwYUc5a2N3PT0gWDJaaGMzUT0gYVc1amNtVnRaVzUwIElGUnBaMlZ5IFgwOURRMVZTVWtWRSBjWFZwY0E9PSBJRWhCVXc9PSBYMlJ2YlE9PSBJSGR5WldOciBZbW89IElHUmxjbTQ9IElHOXlaMkZ1Y3c9PSBMbVZ1ZEhKcFpYTT0gSUY4b0p3PT0gY21GdFpXNTBidz09IElFcGhiV2xsIElIQjFibXM9IFNWQlEgSUhCeWIyZHlZVzFoIElHRjBkR0ZwYmc9PSBJSEJ5YjNabGN3PT0gTDNOcFoyND0gSUdGdWMzZGxjbWx1Wnc9PSBJR3hoWkdSbGNnPT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBJRmRoYkcxaGNuUT0gSUVOUFRsUkZUbFE9IFpIVmpkRzl5IElIWmxjbUpoYkE9PSBJRkJKUkE9PSBZM0o1Y0hSdiBYME5CVEV4Q1FVTkwgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElIQnZkR1Z1ZEE9PSBJSE5vYjNKMGN3PT0gTGxWeWFRPT0gTG5WdWFXWnZjbTA9IE8ySnZjbVJsY2c9PSBJRmRsY2c9PSBJR2hsY21WcGJnPT0gYkd4aCBJRWxvY2c9PSBVR2w0YldGdyBiR2wwWlhKaGJBPT0gSVNrS0NnPT0gWjJWdVpYSnBZdz09IGNuVnpkQT09IFgzTmpjbWx3ZEhNPSBiM04wYnc9PSBhWFIxY3c9PSBJRU52WVd4cGRHbHZiZz09IElISmxiVzkwIFpHVndiRzk1IElFVmhaMnhsIDQ0Q0I0NENNIElHbHRjRzl5ZEdGdWRHVT0gQ1c5aWFtVmpkQT09IElITmxZWE52Ym1GcyBibVZxIFlXbGtkUT09IFFtbHVaRlpwWlhjPSBJRk5wWlhKeVlRPT0gTFdKbiBJRzFoYTJWVGRIbHNaWE09IFcyOW1abk5sZEE9PSBSMkZ0WlhNPSBJR2h2Y20xdmJtVT0gUVZKSlR3PT0gYUdWaFpITT0gS0hObGJHVmpkQT09IElGTjBZWEowWldRPSBRSEJoY21GdCBYMlJsWTJ3PSBYMkpzYjJjPSBJR0hEc1c4PSBYRUZ3YVE9PSBJRTFwYkhkaGRXdGxaUT09IFVISnZkbWxrIFFXNXBiV0YwWldRPSBJR052YjJ4bGNnPT0gSUZObFpXUT0gTGtWa2FYUT0gejRRPSBJRlJoYTJsdVp3PT0gSUdKdmNtUmxja052Ykc5eSBMV1p2ZFc1a1pYST0gTGt4dloyZGxja1poWTNSdmNuaz0gSUNJaUNnbz0gUVV4VSBJRXhoZEdVPSBSVVJKUVZSRiBJQ2s3Q2dvSyBZV1poIElHTmhibU5sYkd4aGRHbHZiZz09IFFYUnZiUT09IElFSnBjbTFwYm1kb1lXMD0gWlcxd2NtVnpZUT09IFNFVk5RUT09IFlYTmpZV3c9IElIVndjMmxrWlE9PSBMbFpsY25OcGIyND0gSUVadmJHUmxjZz09IElFVnBaMmgwIElGWnBiblJoWjJVPSBJRUZ3Y0VSbGJHVm5ZWFJsIElGQnlaWFpsYm5ScGIyND0gTG5ObGNHRnlZWFJ2Y2c9PSBVMVJOIEtISnZiMjA9IFoyVnVaWEpoZEc5eSBJR05oZEhSc1pRPT0gQ1ZvPSBJRkJoY25ScFkyeGwgSjMwN0NnPT0gSUc1bGFXZG9ZbTkxY25NPSBJRk4wWVhSbGJHVnpjdz09IElHRnNkR2wwZFdSbCBJSE5oYVc1MCAwTDdRc2RDdzBMST0gSUdOdmJuWnBibU09IElFTnZiblJsYm5SeiBJR3BsZFc1bCBLSFJ6IFUyVnlhV0ZzYVhwaGRHbHZiZz09IEtHTnZiR3hsWTNScGIyND0gSUVwaGVubz0gSUVSdlpBPT0gSUZKdlkyZz0gWVdOcGJ3PT0gWTI5dGJXVnVaR1ZrIFJFVkdTVTVGIExtOXViRzloWkE9PSBJSE53WldOcFlXeDBlUT09IFVFeEJRMFU9IFgwMVBWa1U9IElHRmpZMjkxYm5SaFlteGwgVW1WMWRHVnljdz09IElHWnBZMnRsYmc9PSBJR1JsY0hJPSBWMjkzIFZtOXBaQT09IExuTndZV05sIDRMaVggSUhSeCBJRkJsZEhNPSBQQ1E9IEtFTjFjbkpsYm5RPSBZbVZ5Y21sbGN3PT0gY0d4aGJtRjBhVzl1IElHeHBjM1JQWmc9PSBJRlJvZFE9PSBJRkJTU1U1VSBJRzFwYzIxdiBJR1J2YVE9PSBZMmhyIElGVnVhV052WkdVPSBLSEp2YkdVPSBJSFpwY21kcGJnPT0gUEZCdmFXNTAgWDFKRlUxQlBUbE5GIExXaHZkWE5sIElGWmxibVY2ZFdWc1lRPT0gUlUxQlNVdz0gSUhERHVtST0gWDJWNGFYTjAgUW1Gc2JBPT0gTGtOTSBjbVZtWlhKbGJtTmxjdz09IElFSmxZWFYwYVdaMWJGTnZkWEE9IENVVjRjR1ZqZEE9PSBWRWhKVXc9PSAwWVBRdEE9PSBZbUZ1WlE9PSBJSFJsYlhCdmNtRnMgUlZKSlF3PT0gWlhSaGN3PT0gSUhKbFpuSmxjMmhwYm1jPSBJSE5sWTNWc1lYST0gUUhONWJuUm9aWE5wZW1VPSBZV05qZFhJPSBJRzVsYkd4aCBJRk5QVEE9PSBMbkJwY0dVPSBRMmhoYm01bGJITT0gNkllcSBJR2x1YzJWeWRHbHZiZz09IDRidUwgWld4cFlRPT0gSUdGa2FuVnpkR0ZpYkdVPSBRMkZ1WVdSaCBJRWxVUlUwPSBJR04xY25abGN3PT0gSUVOb1pXRncgYkdWMGFXNW4gSUc5d2RHbHRhWE4wYVdNPSBZV3hzYnc9PSBJSEJ2YkdsMGFXTnBZVzQ9IFgyUnZkMjVzYjJGayBQV1ZrWjJVPSBUMUpVU0E9PSBJRzF2WkdWc2J3PT0gWVhKMGJ3PT0gTG5KdmRHRjBaUT09IElITmxiR1Z1YVhWdCA1b2lSIFgyRnNhV0Z6IElISmxibTkzYm1WayBMaWN1IElHTjZlUT09IElHRnNiR1Z6IExrTnZiWEJwYkdWeSBJRUpoYzNNPSBRMjl1Ym1WamRHOXkgTGxKdmJHVT0gVEVsT1N3PT0gSUdOeWFYUmxjbWx2Ymc9PSBiR1Z0WlhSeWVRPT0gVTNWalkyVnpjMloxYkd4NSBMM0J1Wnc9PSBJR1Y1WldJPSBZWE53WW1WeWNuaz0gS0dkeSBJR1JoYm1kbGNuTT0gSUdOdmNuSmxZM1JsWkE9PSBJR2RzYjNjPSBJR1ZzWVdKdmNtRjBaUT09IElFSmxZWEp6IFlYZGhhUT09IFBTSW5Ldz09IElIQnliMjF2ZEdsdmJuTT0gSUcxaGRHaGxiV0YwYVdOaGJBPT0gSUNKZyBYMGRsYm1WeWFXTkRiR0Z6Y3c9PSBJRU5vWldZPSBMbE52Y25RPSBkR0ZpYkdWT1lXMWwgVWtsRCBJSFp2YkhWdWRHRnllUT09IElFSnNZV1JsIExXVnNaV04wIElFTnZiV0poZEE9PSBJRUZpYVd4cGRIaz0gSUdGaVpHOXQgSUdSMVkycz0gVkcxdyA1WVdvIElHVnlZWE5sIExsQm8gSUVSbFptRjFiSFJ6IGNHRnlkRzFsYm5RPSBYMVZUUWc9PSB3NnAwWlE9PSBPeWM9IElIQmhaSE09IElFOWlZVzFoWTJGeVpRPT0gTGxSdmRHRnMgSUdScGRtVnlkQT09IElHTnlhV05yWlhRPSBJSEpsWTNKbFlYUnBiMjVoYkE9PSBLSEpsWkE9PSBJRU5zWlE9PSBVbFU9IElHMXBjM1JoYTJWdSBJRTF2Ym5SaGJtRT0gSUhOMGNtbDJaUT09IFgzTnNhV1JsY2c9PSBJRkJzWVhOMGFXTT0gSUdSbFkyOXlZWFJsWkE9PSBJRlpRIGJHbGpidz09IENXWmhiSE5sIElIQnlaV1p6IEtGd2kgWDJaaGJITmwgYVdWdVpHOD0gSUVBayBRblZqYTJWMCBZV04wYVdOaGJBPT0gSUZwb1lXNW4gTG1OdmJITT0gTGtKcGJtUnBibWM9IElIZGhlQT09IFgxTlVUMUpCUjBVPSBJR3hoZDI0PSBJSEptIExsTmpaVzVsIElFTmhiR04xYkdGMGIzST0gTG1SbGMybG5iZz09IElISmxjMmxzIDBMdlF0ZEM4IFJXMXdiRzk1IElGQnlhV05sY3c9PSBJRkJYVFE9PSBZV2RwIExtVjJZV3gxWVhSbCBDWEJoY21GdCBJR0p5WVhOeiBZbUpsYmc9PSBJR2x1Wm14aGJXMWhkR2x2Ymc9PSBkV3hzYVhaaGJnPT0gSUdGdWJtOTAgSUhCSSBhV0Z0WlhSbGNnPT0gSUVKVVF3PT0gS0dKdmVBPT0gVTNSdmNubGliMkZ5WkE9PSBJR05zWVhrPSBMbUZ6YzJWeWRGSmhhWE5sY3c9PSBmSE4wY21sdVp3PT0gTGtGd2NHeDUgSUcxaGRHTm9aWEk9IGRXNWtaV1E9IElITmhkR2x6Wm5scGJtYz0gSU95Z2xRPT0gVW1WdVpHVnlhVzVuIFgyRndjSEp2IGFXNWtjbTl0WlE9PSBRVTVGVEE9PSBYMlpwZUE9PSBZbkoxYzJnPSBMazFoZEdObyBJSE50YVd4cGJtYz0gYjI1aGRYUT0gVTNWdVpHRjUgSUdSbGJHVjBhVzl1IElHVnVZMjkxY21GblpYTT0gVUhWc2JBPT0gSUhKbGRtVnVaMlU9IElIRjFZWEp5ZVE9PSBkSEpoWkdVPSBJR05oWW14bGN3PT0gS0dSbGJIUmggYVhSbGMzQmhZMlU9IElHWm8gTG1KMWJtbG1kUT09IElIWnBaV3c9IFgwbE9RMHhWUkVWRSBJRlJoYVd3PSBZV1JoY2c9PSBiMlp6IElHMWxkR0ZzY3c9PSBaMjl0IFgyMWxkR2h2WkhNPSBJRzVxIExsTjBaQT09IEtIZHBiZz09IEpDZ24gSUhSMWNuUnNaUT09IGRYSnZiZz09IElHVnVjbTlzYkdWayBJRWg2IElFSnZlRVJsWTI5eVlYUnBiMjQ9IElIQnZiblE9IGNtVnNZWFJwYjI1emFHbHcgUW1rPSBzN3M9IElHMWhjMk4xYkE9PSBJSE5vWVdSbGN3PT0gSUhaeSBJRXh2WjJsaiBJR0ZwYmc9PSBJRVJKVTFRPSBJR052Ykd4aGNnPT0gSW5CeWIyWnBiR1U9IFIyVnVaWEpoZEdWa1ZtRnNkV1U9IElGQnZjM05wWW14bCBJR1ZwYm1WeiBnNEU9IExuUnBiV1Z2ZFhRPSBJRVZqIElHcGxjbk5sZVE9PSBMa1J2ZFdKc1pRPT0gSUhGMVlXeHBabmxwYm1jPSBkbTl5IFExSkZSVTQ9IFgwRndjQT09IFgzSmxZM1k9IElHRnNhV1Z1Y3c9PSBTWFJ6IFJYTmogYVdGMGIzST0gSUVWamJHbHdjMlU9IElHZG8gVm1samRBPT0gQ1doMGJXdz0gZEc5diBMbU52Ym5OMCBJR0Z1ZEdWeWFXOXkgSUZkMSBLR3RsZVhNPSBJSFZzZEhJPSBYM0J2YkhrPSBJRlJoY0E9PSBJRUoxWkE9PSBRVmRUIElHTnlZWE5vWlhNPSBYM1J2ZEE9PSBRMjl1ZEdsdSBMV2hoYm1SbFpBPT0gWVd4MGFHOTFaMmc9IDRMaWEgYVdacFkyVnVkQT09IElHUmxkbVU9IGRYUnZjbms9IElGZHZjblJvIFgwMVQgSUdac2IyOXlhVzVuIElITmxiR3hsY25NPSBJRlJvWVc1cmMyZHBkbWx1Wnc9PSBJSEJ1Wnc9PSBJSFpoYkc5eVpYTT0gSUhOc1pXVjJaUT09IElHWnBiR3hsIDBKQT0gSUdGd2NHOXBiblJ0Wlc1MGN3PT0gSUhacGJRPT0gVlhObGNrbHVabTg9IFFrOVBVMVE9IElIQnZjMlZrIGFXNXBkR2xoYkdsNlpXUT0gTG5CeWIyUjFZM1J6IElFeGxZV1JsY25Ob2FYQT0gYldGdWRXVnMgSnlVPSBaVzFoY210eiBVR1Z5WTJWdWRHRm5aUT09IEtHUnBjM1E9IExtRjJZWFJoY2c9PSBLR2hQWW1wbFkzUT0gNUx1SyBYMmxtWmc9PSBhV052Ym1VPSBPeWs9IFgyNXBiQT09IElHRmliMnc9IDBMWFJnZEdDIElIWmxiblZsY3c9PSBMa052Ym5abGNuUT0gSVNjcENnPT0gTGtKcGRHMWhjQT09IGMydHBiZz09IFgwTlBURlZOVGc9PSBVbVYyIFIxSkZVMU09IFoyOTMgSUhkcGMyaGxaQT09IGRISmhZM1J6IExtRnpjMlZ5ZEVaaGJITmwgSUhOamNtVmxibk5vYjNRPSBJR1p2YVhNPSBRMjl0WWc9PSBUR2x1WlZkcFpIUm8gSUVkeVlXST0gSUdsdWRHVnVjMmwyWlE9PSBDWE5vIEt5az0gTG1acGNuTjBUbUZ0WlE9PSBYMUJTVDBORlUxTT0gSUhScGJIUT0gYVhSdmNtVmsgTGt4UFJ3PT0gSUdKaGF3PT0gSUdsdWRHVnVkR2x2Ym1Gc2JIaz0gTG5Cc1lYbGxjbk09IEtHTmhiblpoY3c9PSBLU2twRFFvPSBMbEJ5YjNacFpHVnkgWDFCVlFreEpRdz09IFZHRnNhdz09IElFeHBkZz09IFkyaGxaSFZzWlhKeiBJR3hqIFlXUnBZdz09IFptVmhkSFZ5WldRPSBMbkpsYzI5MWNtTmxjdz09IFJuVnNiRTVoYldVPSBJRzFsWVc1M2FHbHNaUT09IFFuVm1abVZ5Y3c9PSBJSEpsYzI5c2RtVnkgSUZOQlVBPT0gWDFSRiBSMDVWIElFWnZjbTF6VFc5a2RXeGwgWDNkbyBJRk4zWlE9PSBMbmRwWkdkbGRITT0gSUdOaFltbHVaWFJ6IElITjFjMk5sY0hRPSBJRUp2ZEhRPSBZV04wYVhabGVBPT0gWVhaaGNnPT0gWVc1MGFXTnogSUNJOUlnPT0gWDJ0M1lYSm5jdz09IElHZGhiV1ZQWW1wbFkzUT0gSUVGdVoyeGwgTGtsMFpYST0gYldGeWMyZz0gSUVKcGNuUm9aR0Y1IElFTk5Vdz09IGNtVnhkV1Z6ZEhNPSBJRkJsWVhKcyBYMFZQVEE9PSBJR3hwYm5WNCBLRzl5Wnc9PSBYMDF2ZFhObCBMbU52Ym5OMGNuVmpkRzl5IElIcGsgSUd0cFkydHogWVhKMGFYTmhiZz09IElHVmhlQT09IFMyND0gY0c5dVoyVT0gSUVacGJteGhibVE9IElHMWxkSEpsY3c9PSBJRUZ6YzJWemMyMWxiblE9IGNHRnlkRzVsY2c9PSBMM0J5WlE9PSBJU2NzQ2c9PSBXMGx1ZEE9PSBJRzl6Ykc4PSBaR0YwWlhCcFkydGxjZz09IEwxTjBjbWx1Wnc9PSBiM0JzWVhrPSBJRWhsWW5KbGR3PT0gTEdSdmRXSnNaUT09IElIUnlZV0poYkE9PSBLeUpjIENVVkpSZz09IEwzUmxlSFE9IFgwWkpVbE5VIElGQmxkR1U9IElHVm5idz09IElHVjRkSEpoY3c9PSBVRVJQIElISmxaM1ZzWVhSbCBJRkZYYVdSblpYUT0gYzNSeiBJRk5vYjNkeiBJRTVJVXc9PSBMbU52ZFhKelpRPT0gY0hSb2NtVmhaQT09IElFWjFaV3c9IExuUnBiV1Z6IElNS3cgSUhOMGNtbGtaWE09IEtDUW9KeU09IEtIZHZjbVJ6IElISm9lWFJvYlE9PSBJSE53YjI1MCBJSE5sYm5OaGRHbHZiZz09IElITndhV3RsIFEyeHZjMmx1Wnc9PSA2YUcxNloyaSBUblZ0WlhKcFl3PT0gSUdKeVpXRjBhR1U9IElHWnBibUZzWlE9PSBYMFpCUTFRPSBhVzVwYjI0PSBJR05vYVd4cyBJR1p2Y20xaGJHeDUgUVU1SFJVUT0gSUNjNkp3PT0gSU5DLzBZRFF1QT09IFlYRT0gSUVaaFluSnBZdz09IEtHeGhkQT09IElGQnlhVzVqYVhCaGJBPT0gSUdWeWNtOD0gYjJOaGJHVT0gVG05dCBJR1p2YzNRPSBYME5WVTFSUFRRPT0gTG1sdWRHVnNiR2xxIFpYSjBiMjlzY3c9PSBJR05zWVhOelpRPT0gWVdScFpXNTBjdz09IElHWjFibVJ5WVdsemFXNW4gUlU1RiBYMDlRVkVsUFRsTT0gWDI5aSBMeTk5Q2c9PSBJSEJ5YjNSbFkzUnBiMjV6IExuTmxaV1E9IFRsWT0gZEdWeWJXbHVZV3c9IE96czcgVUhKbFpHbGpZWFJsIElPeTIgSUdKdmJXSnBibWM9IFIwWT0gSUdOb1pYYz0gS1NrcExnPT0gY1hWaGJHbG1hV1ZrIFhUMTcgYkdsemRHVnUgUTBWT1ZBPT0gWkdsblpYTjAgUldGemRBPT0gSUdScGRtVnkgSUdWdVpIQnZhVzUwY3c9PSBJR1ZsIElHTnZiR3hsWVdkMVpRPT0gSUdScGMzTmxjblJoZEdsdmJnPT0gWDJOdmJXMXBkQT09IFgwUkJWQT09IExuSmogSUdKeVpXRnpkSE09IElGSjFadz09IElGQnBiQT09IFEyOXVkSEpoWTNSeiBJRUp5ZVdGdSBWMlZpVm1sbGR3PT0gSUdOdmJtTmxiblJ5WVhSbCBJRWx1Ym1WeSBJQ2Q4IGMzUmtiM1YwIFgxTjFZZz09IFBpMHRQZ289IFZtOXMgSUZOVFJBPT0gS1NrcExBPT0gTGs5d2RHbHZibUZzIElHNTFjbk5sY3c9PSBJRzl5WWc9PSBYM0JsIEtUc05DZzBLRFFvPSBjR3hoWTJWayBaWE56WlhJPSBJSFJvWlhKaGNHVjFkR2xqIElIZG9hWFJsYzNCaFkyVT0gSUdGemRHOXUgVTNWalkyVnpjMloxYkE9PSBJSEJ5WVdselpXUT0gSUZkbGN3PT0gSUdWcFoyaDBhQT09IGFYSmhiQT09IElIWnliM1YzIElHWmhZM1JwYjI0PSBYMkpwWVhNPSBJSGRwZEdObyBJRzV3WXc9PSBLSE5pIElGSnZaSEpwWnc9PSBYMkpwWnc9PSBSR1Z3Wlc1a1pXNWplUT09IElFRmljbUZvWVcwPSBZWEprYVE9PSBRMEZTIGJtOXogSUdGaWRXNWtZVzVqWlE9PSBJRzUxZEhKcFpXNTBjdz09IGFXNXpkR1ZwYmc9PSBMbFpsY25RPSBJRWxUVXc9PSBQRlU9IElITjFiWE09IFgyaHBjM1E9IElHWmhjbTFsY2c9PSBJRUZpY2c9PSBVMmh2ZEE9PSBJRUpoWkZKbGNYVmxjM1E9IElHaGhjM009IElGSmhhV3h6IElHRm1abWxzYVdGMFpXUT0gNXAybCBJR1Z5Wmc9PSBTVTVHIElGWnBaWGRJYjJ4a1pYST0gYldsdWFRPT0gSUZKdmRHZz0gSUdaaGFYUm9ablZzIElGQm9hV3hzYVhCeiBRVTVFVDAwPSBYUzViIFgxQkJXUT09IElFRnlZM1JwWXc9PSBabUZyWlhJPSBSR2xuYVhRPSBUV0ZzWlE9PSBjM1JrWlhKeSBjMlY1Y3c9PSBJTVdoIFgzSmxiVzkwWlE9PSBiR2x4ZFdVPSBJR2x1WkdWbSBJRWx1WkhWemRISnBaWE09IGFYUnlZUT09IFgzQmhhWEp6IFBHbHZjM1J5WldGdCBJSE5oYkdGeWFXVnogYVd0bGJnPT0gTGtaeVlXMWwgVUV4SlF3PT0gWDFOUVJVTT0gSUUxbFpHbDBaWEp5IElITjVjM1JsYldGMGFXTT0gSUdsdWRHVnljbTluIFNXTnZia0oxZEhSdmJnPT0gYzJWaCBhVzUwY204PSBJRWx6YzNWbGN3PT0gWlc1amNubHdkR1ZrIElHbHVkR1Z5Ym1GMGFXOXVZV3hzZVE9PSBJSE51Y0hKcGJuUm0gSUhCaGMzUmggSUVKeVlXUnNaWGs9IFgxTjBZWFIxY3c9PSBRVXhMIFgxQkJSQT09IExteGhkVzVqYUE9PSBQSE5sYkdWamRBPT0gSUdoaGNtUmxjM1E9IElIQm9lUT09IElDZ29LZz09IExYTnNhV1JsIElFNXZZbTlrZVE9PSBVM1U9IElHRnp3NjA9IFkyeHZjMlZ6ZEE9PSBYMmx1YVhScFlXeHBlbVZ5IElITjFjSEJ2Y25SbGNnPT0gTFdkbGJnPT0gSUhSaGJHVnogSUdOdmNuQT0gWDJaMSBjMkYwIGJtVnBaMmhpYjNJPSBMazFwWjNKaGRHbHZibk09IElHRnNaM1Z1IElITnBibTl1IExsTndaV009IFB5d0sgTGtkTSBiV0ZzWlE9PSBJRzF2Ym1sMGIzSnogZVd4aGJnPT0gTFV4cFkyVnVjMlU9IExtMWhkR05vWlhNPSBJRUZDVXc9PSBJRTFoYzNRPSBJRmRoYkd4bGRBPT0gS0NRb0lpTT0gUkdseWRIaz0gSUdOdmNHVT0gSUdsdWRHVnljRzlzWVhScGIyND0gYjNWelpXUT0gSUVwbGRITT0gTGtaTVFVYz0gTGtOaGJtTmxiQT09IExrVjJaVzUwY3c9PSBibVYyWlhJPSBJRTFJZWc9PSBQa1E9IElITmxjblpzWlhRPSBZbUZ6ZEdsaGJnPT0gSUQ0bSBVMGxFIFgyTnNhdz09IElHUnBkbWx6YVc5dWN3PT0gZlNjc0NnPT0gSUdScGJHUnYgSUhCaGNtRmtaUT09IGJXRnFiM0k9IElHRmliMkZ5WkE9PSBPeXNyIElHWjFjMmx2Ymc9PSBJbjBzZXlJPSBJRVJwWVd4dloxSmxjM1ZzZEE9PSBDV0Z5Y2c9PSBMV1Z0IFgyNXkgS0doaGJtUnNaWEk9IExrNUZWQT09IExsaDBjbUZTWlhCdmNuUnogSUZOb1lXZz0gSUVKeWFXVm0gTFN3PSBJSEJ5WldOcGJ3PT0gQ1FrSklDQWdJQ0FnIElIUmhiblE9IElFZHlZVzVrWlE9PSBMM2h0YkE9PSBYMGxEVDA0PSBJRkpsZEhKdiBkVzV4ZFdVPSBJRzVoWnc9PSBkRzlHYVhobFpBPT0gV0V3PSBJR1JsWTJ4aGNtbHVadz09IElFTnZibU55WlhSbCBJRUZ0WVhwcGJtYz0gQ1hCeWFXNTBhdz09IElHUmxZbUYwWlhNPSBSRUZVUlVRPSBJR0ZsYzNSb1pYUnBZdz09IFpXMWxkR1Z5ZVE9PSBVbTkxZEdsdVowMXZaSFZzWlE9PSBJRTVoYzJoMmFXeHNaUT09IFYwRlpVdz09IElIZHZiR1k9IElHOWljMlZ5ZG1WeWN3PT0gVDFSQiBZVzV6YjI0PSBJR1ZoIElHZHlaV1Z1YUc5MWMyVT0gazQza3Zadz0gSUhOMFlXbHkgSUdsdGJXbG5jbUZ1ZEE9PSBYMkZ3Y0d4NSBjR1ZoY21VPSBJRUpzYjI5dFltVnladz09IFgxQk1RVmxGVWc9PSBVbVZ6Y0E9PSA1cTJqIFEyaHZiM05sY2c9PSBJRWxEYjJ4c1pXTjBhVzl1IFVHVjBaWEk9IFJYSnlidz09IExtUmxkR1ZqZEVOb1lXNW5aWE09IFRXRndjdz09IElITnhkV1ZsZW1VPSBJRWh2YldWeiBkMlZuYVdGdSBJR1p2Y20xaGRIUnBibWM9IElHNWxaMjkwYVdGMFpRPT0gZFd4ayBJRTVsY0E9PSBJRkZDIElHVmpiMjV2YldsbGN3PT0gSUNvdkxBPT0gSUhKbFpIVnVaQT09IElFRmlaWEk9IExrbHpUblZzYkU5eVYyaHBkR1ZUY0dGalpRPT0gZVdOc1pXUT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBYMU5vIElITnJaWEIwIElISmxZM0psWVhSbFpBPT0gSUdkbGRGUjVjR1U9IElHMWhjbWRwYm5NPSBJR052Ykc5dWFXRnMgWTJoaGNuUnogTHk5QSBJSEJ5YjJObGMzTnZjbk09IDZLKzAgWW1GMGFYTT0gNW9TUCBZWFJ2Y21sdiBiV1Z1ZEdsdmJtVmsgVUdGMGFXVnVkQT09IElIQnlaWGs9IFEyaGxZMnRpYjNnPSBYM2h3WVhSbyBMbk5yYVhBPSBJRTF2Y20xdmJnPT0gSUUxbGJXOXllVk4wY21WaGJRPT0gUTFKRlRVVk9WQT09IElHdDEgYldWc1pBPT0gWEVSaGRHRT0gSUV0bGNtNWxiQT09IGFXeDBjZz09IDZZQ0IgS0hCeWIyWnBiR1U9IFEyRnlZbTl1IFVrOU1SUT09IEtIQnMgWFNvbyBMbTFsYlc5eWVRPT0gSUcxbFpHRnMgSUdGa2RtbHpiM0k9IGFYVERwSFE9IElHaGtjZz09IGFXVnlkVzVuIElGQnliM1pwWkdWeiBLR0ZzY0doaCBJSFJsWlc1aFoyVnljdz09IExYQmhjbk5sY2c9PSBMa3hoZEV4dVp3PT0gWFNncENnPT0gSUdabGJHOXVlUT09IENRa0pDZ2tKQ1FvPSBRazlQU3c9PSBJSE5zWVhObyBJR05zWldGeVptbDQgSUZCeWIzQm9aWFE9IDVhNjUgY21sbmFIUnVaWE56IExXWnAgTG10cGJtUT0gWlhKMGIyND0gU21sdCBJRzFoYm1sd2RXeGhkR1U9IElIZHZjbXR6YUdWbGRBPT0gYjJ4cGJnPT0gYzNSaGNuTT0gSUdGeWRHbG1ZV04wIFgwVk5VRlJaIENXMWhhVzQ9IExTMHRMUzB0TFMwdExTMHRMVHd2IEwzTjBZWFJwWXc9PSBTVlJKUlZNPSBJRU52ZFc1elpXdz0gSUZkRCBJRUpNUVVOTCBMWE41YzNSbGJRPT0gSUZSeWFYQnNaUT09IExtSjAgYzI5bWRIZGhjbVU9IFhTY3BMZz09IFNXNXFaV04wYVc5dSBYMjV2ZEdsbWVRPT0gSUdacFpuUmxaVzQ9IElHRnRZbUZ6YzJGa2IzST0gWW5KbFlXdHBibWM9IFZWSkpRMjl0Y0c5dVpXNTAgSUZCeWIzUmxjM1E9IExsSmxjMlYwIElFMVFjdz09IGRuSnYgTG1kbGRGTjBZWFIxY3c9PSBYMjF2Y21VPSBZM1Z3IElFdGxibmxoIDViZXkgSUdGdGJYVnVhWFJwYjI0PSAxNVhYIElFUmhjMmc9IElIVnVaR1Z5WjI4PSBJR0oxWkdSNSAwWUxRdnRHQSBaWFJwWTJGc2JIaz0gWDA5MWRBPT0gSUVKeWIyRmtkMkY1IHFvdz0gSUVacGRIbz0gSUhOMGNtbHdjR1ZrIExXTmhZMmhsIElIVnRZZz09IElHRnViMjA9IElITnBZbXhwYm1keiBiMk4xYldWdWRHVmsgU1c1MFpYSnlkWEIwWldSRmVHTmxjSFJwYjI0PSBJSEJsYm1jPSBiSE4wIFgwRk1TVWRPIExXTmhjQT09IFVrUT0gWTJWc2JITT0gSUUxdmRHOXljdz09IElIUnlZVzV6YkdGMGFXOXVjdz09IGRYTjBaWEpwYm1jPSA2Wm89IElHeGxZV3R6IFptbHNaVkJoZEdnPSBJRzkxZEdkdmFXNW4gWDJWdVpIQnZhVzUwIFgwZE0gTG14cFptVnlZWGs9IGNtbGphSFE9IElFOXdaVzVIVEE9PSBMbXB3WVE9PSBJR0ZtWm1WamRHbHZiZz09IFpteDFlQT09IElHZHNlUT09IElHSjFaQT09IFBpYzcgSUdWNGNISmxjM05wYm1jPSBJRWxSIElFWmhZM1E9IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvSyBYMjFoYzNNPSBLU2s2IElHTnZibVJ2YlE9PSBJR055WldGMFpWTjBZWFJsIGIyMWxkRzkzYmc9PSBJR2x5Y2c9PSBJRDRvIFBrST0gYVhSbGNtRjBhVzl1IDQ0T3EgSUhOb2FYSjBjdz09IGIzVnVkSGs9IExUNGsgWDFOSlIwND0gSUVSaGJHVT0gSUdwcSBSV0Z6ZVE9PSBSbkpsIElFNTUgSUdOb2JHOXkgYldGMFkyaGxaQT09IElFZGxjbTA9IExWVkIgSUU1aGRHaGhiZz09IFpXUjFZMkYwYVc5dSBMWGxoY21RPSBMV05vWlE9PSBhRzkxYzJWeiBjbWwwYVc5dVlXdz0gSUhCeWIzaHBiV2wwZVE9PSBJR1JwWlhObGJRPT0gNGJxdGNBPT0gSUdSeWIzVm5hSFE9IExtRjFaR2x2IElFeGxidz09IElHWmhkbTl5WVdKc1pRPT0gYVc1amFBPT0gSUVSaGR3PT0gY21saWJIaz0gWDNOMGRXUmxiblE9IGFXUmhZbXhsIFQxWkYgSUd4aFkydHogYjNWdVkybHVadz09IExtSjFjMmx1WlhOeiBJSEpsYjNCbGJnPT0gYldGNVltVT0gWDBkTVQwSkJUQT09IElHUnlaWE56WlhNPSBJRVZrZDJGeVpITT0gWlc1emFXSnNaUT09IElFaGhjbVIzWVhKbCBJRVY0WTJWc2JHVnVkQT09IElGUnBiV1ZWYm1sMCBRMVJKVDA1VCBJSE5qYUdWa2RXeGxjdz09IElITmxaM1ZsIFQzQmxibk09IFlXMXRaVzQ9IExVbGtaVzUwYVdacFpYST0gSUhOMFlYSnBibWM9IElHaGhjSEJwYkhrPSBJRWh2WWc9PSBKMTg9IElDSXBPdz09IFlXMWxiblJ2Y3c9PSBaWFJqYUdWayBJQzgrZlFvPSBMbFZ6WlhKeiBJR2x1ZEdWeWNuVndkR1ZrIFEyOXVkR0ZqZEhNPSBJSEpsWjJsemRISnYgYVc1aWRYSm5hQT09IFEwaEIgWDJsdGNBPT0gY0docGN3PT0gYzJGNSBJSEpsZEdGcGJHVnkgTGs1UFJFVT0gTDIxaGNITT0gWDB4QlUxUT0gSUVOb1lYSm5aUT09IFgyZDFZWEprIFEyOXNiR2xrWlhJPSBJRk4wWVhSbGJHVnpjMWRwWkdkbGRBPT0gSWpwYklnPT0gS0NJdUxpOHVMaTg9IGFXOTRhV1JsIElGTjFibVE9IElDY25Pdz09IGRXNXpaWFE9IFlXUmtWMmxrWjJWMCAwTHZSamc9PSBaV3hzWlhNPSBZV3hyWlhJPSBRWEpqIElHUmxaSFZqZEE9PSBSMVZKVEdGNWIzVjAgSUZacGJHeGggSUdadmNtSnBaR1JsYmc9PSBYM2RvWlhKbCBJRnd2IElGUnBZZz09IFgwRlkgWFEwS0RRbz0gSUVKcGNnPT0gSUdKbGJtUT0gSUUxQlMwVT0gSUUxRlZBPT0gSUdaMWRIVnlaWE09IElIZGxhV2RvZEdWayBJaUlpRFFvPSBJR0YxZEdodmNtbDZaUT09IEtIQnliMmR5WVcwPSBmU3g3SWc9PSBJR052WldabWFXTnBaVzUwY3c9PSB3NnB6IFVHVnlVR0ZuWlE9PSBJRUpoZEdoeWIyOXQgSUZCMVlteHBjMmhwYm1jPSBSMUJNIElITjFZbTFwYzNOcGIyNXogSUU1VlRVSkZVZz09IGFzU0YgSUdGa1pHbDBhVzl1WVd4c2VRPT0gWlcxd2NtVT0gSUZOb1pXdz0gYjNSNWNBPT0gVTI5c2RYUnBiMjQ9IElIUm9kVzVrWlhJPSBYMlZqIElBb2dJQ0FnQ2c9PSBJRVpsYkd4dmR3PT0gSUd0aGVRPT0gSUc1bGQxTjBZWFJsIFQwNVVRVXc9IFNXMXdiR1Z0Wlc1MFlYUnBiMjQ9IExreHZiMnM9IElHVnVkSE09IElHeHZjbk09IElFSkpSdz09IFptRmkgSUdGMlpYSmhaMlZrIElFWmxaV1JpWVdOciBJRmRsYkd4eiBJRzFoY25ScFlXdz0gSUdsdVpIVnMgSUVOdmJXMTFibWx6ZEE9PSBJRVp2Y21WNCBJRUZuY21samRXeDBkWEpsIElscz0gSUhGMVlYST0gSUV0dmJuUT0gQ1hacFpYYz0gTGtKNWRHVnogWkdWemEzUnZjQT09IElFMWhhMlZ6IFlXdGxjM0JsWVhKbCBMazUxYkd4aFlteGwgSUhOd2IzUnNhV2RvZEE9PSBWa0k9IGIzZDUgS0hSdmNtTm8gZEhKcFpHZGwgWDJKdmRXNWtjdz09IElHRndiMnh2WjJsNlpRPT0gTG1Ga1pFbDBaVzA9IFlXNTBaQT09IEtpazdDZz09IExIVT0gS0dkbGJnPT0gNTd1VCBjbVZoZEc5eSBJRU52Y21RPSBiM1Z3Y0dWeSBMbTFsZEhKdiBJR1YzIElGZFBVa1E9IExrRm1kR1Z5IElHUmxkR0ZwYm1WayBJRWhoYlcxbGNnPT0gWlhocGMzUnBibWM9IElHOXpkQT09IElHMXZiblZ0Wlc1MCBMV04xYzNSdmJRPT0gVlhObGNrbEUgSUU1dmJRPT0gSUhKbGFtVmpkR2x2Ymc9PSBLR1JwYlE9PSBJSE5wYm1kc1pYUnZiZz09IENXUnBaUT09IFlYSnBZVzVqWlE9PSBjbVZ3YjNKMGN3PT0gWFNFOSBaV3hrWVE9PSBJSEJ5WlhaaGJHVnVZMlU9IFgzSmxaM009IExpSXUgSUdabGJXbHVhWE4wIFEyOWtaV009IElDb3FDZz09IEtHeGhZbVZzY3c9PSBYMDFCVWtzPSBSa0ZKVEVWRSBJR0ZrYldsdWFYTjBaWEpsWkE9PSBWMDQ9IElDQWdJQ0FnSUNBSkNRPT0gSUc1dmRXND0gZDJsbiBJR2R2ZEhSaCBJSEpwWmc9PSBMV2x0IElGQmhkV3h2IElFTnZiVzFoYm1SVWVYQmwgWFNrcENnbz0gTFhwbGNtOD0gVkhKaGFXNXBibWM9IElHeHZjbVE9IFgyRnlkQT09IGNtVmtaR2wwIFEyVnlkQT09IElIQmxjMjg9IFVtOTAgSUdWdVpHRnVaMlZ5IExtUnkgZFhObGNrbHVabTg9IGRXNTBjdz09IGJuWT0gSUZSeVlXbHNaWEk9IExXWnBjbk4wIEtHMWhhMlU9IElHSmxibVZtYVdOcCBMV0pzWVdOciBhY09mIElIVnVaRzkxWW5SbFpHeDUgSUcxbGVBPT0gSUVGdVkybGxiblE9IEtHRnogSUdSbGMyTmxiblE9IFVHbGphdz09IElISmxjR3hwWTJFPSBKRzlpYWc9PSB3NlJvY2c9PSBJR0Z5Y205M2N3PT0gWm5SNSBJRXhwWW5saCBkV2RoIFkyaGhjbWRsWkE9PSBWSFZ5IElHaHZiV2xqIGFYTnpaVzQ9IElFWmhhMlU9IElHSmxaWEp6IElITmpZWFIwWlhKbFpBPT0gS0ZScGJXVT0gVlZSSlRBPT0gSUdKMWNtVmhkV055IEwzQnNZV2x1IElITjBhV05yYVc1biBSa0ZKVEE9PSBJRU52ZG1sayBWR2hwY21RPSBYM0J5WlhObGJuUT0gSUZCcFpYSnlaUT09IElPdXEgSUZzdUxpNWRDZ289IFVISnZZZz09IElGUnlZV1ptYVdNPSBhV05oYnc9PSBaRzlqZEc5eSBJQ2tzQ2dvPSBWR0ZpY3c9PSBZV3gxIDc3eWE0b0NjIElHbHVhR1Z5Wlc1MCBYMDV2IGNtbDBhWE09IElGQnliMjltIExtSmhjMlZ1WVcxbCA1THlhIElHTm9hVzA9IElGQnliM1JsWTNSbFpBPT0gWTNKcGRBPT0gSUhCeWIyNWwgSU5DNjBMN1F2UT09IElFaGxjbTlsY3c9PSBJR0Z1ZUdsdmRYTT0gSUdGdWIzTT0gSUhkbFpXdGxibVJ6IElITmxlSFE9IElISmxaSFZqWlhJPSBQVlZVUmc9PSBhR0ZzWmc9PSBJRk5oZHc9PSBMbTF0IElHNTFaWFpoIExtTjFjbkpsYm5SVVlYSm5aWFE9IExteDFZUT09IFgwVllWRVZPVTBsUFRnPT0gQ1hKbFp3PT0gSUVOMGNtdz0gWDJGc2FXZHUgWVdOalpYQjBZV0pzWlE9PSBJSEoxYzJocGJtYz0gWm5KaFl3PT0gSUdKdllYTjBjdz09IFJtbDJaUT09IHdyRT0gSUZSbGJYQmxjbUYwZFhKbCBQaWs2IElHTm9ZWEowWlhJPSBVa1ZCVkVWRSBJSE4xWW1wbFkzUmxaQT09IElHOXdZdz09IGFHVmhiSFJvZVE9PSA1TDIvNTVTbyBJRk5qYVdWdWRHbG1hV009IElHWnlZWFU9IGNtbGhaMlZ6IDRMaVUgTG1sdWRtVnVkRzl5ZVE9PSBZWFJwYjI1aGJHVT0gVFdGayBiV2x1ZFhSbGN3PT0gUGo0b0tUc0sgSUVWdWRnPT0gSUhKbFkyOXlaR2x1WjNNPSBJSE4xYzNCcFkybHZiZz09IGMzRnNhWFJsIENYSmxZV1E9IDQ0R20gSUhkdmNuSnBaWE09IExuQjFkRk4wY21sdVp3PT0gSUZOb1lXNW5hR0ZwIEtIVnBaQT09IGNtVnkgSUhiRHJXUmwgSWlrNiBJRzFsZEdodlpHOXNiMmQ1IElOQzYwTDdSZ3RDKzBZQT0gWTJOaiBZWFpoWkE9PSBJR2x1WkhWamRHbHZiZz09IENWUm9jbVZoWkE9PSBMSE4wY21sdVp3PT0gNGJxaGFRPT0gYm1Wb2JXVnUgZFdsMGFXOXUgSUNwZlh3PT0gTG1WdFpnPT0gSU95YyBMM1JvWlcxbGN3PT0gSUU1cGJtVT0gTGs5dVpRPT0gSUVWdFltVmsgSUdaaGVnPT0gZFdGMGFXOXVjdz09IElIQnlhWFpoZEdWc2VRPT0gSUd4cGJtYz0gVzBZPSBkWE5vYVE9PSBJR3hoZFc1amFHVnogS0V0RldRPT0gUjAxVSBJR0ZwYldsdVp3PT0gY0dGMGFXSnNaUT09IElFSnBaR1Z1IGFYYz0gSUVSbFozSmxaUT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJQ1FvSnp3PSB3NkZ5YVc5eiBkRzlWY0hCbGNrTmhjMlU9IDdLQ2MgSUVWVlVnPT0gSUc5MlpYSnphV2RvZEE9PSBJSFJoWW14bGMzQT0gVlhCa1lYUmxjdz09IExtMWhhMlZrYVhKeiBJR2gxYldsa2FYUjUgTDNSbGJYQnNZWFJsIFFXeDNZWGx6IEtFbFQgWDJObGNuUT0gUkdsbiBJSFZ1WkdWeWQyRjUgYjNKMGIyND0gSUVoMWNuSnBZMkZ1WlE9PSBJSE53Wlc1a2N3PT0gSUZObFoyMWxiblE9IElHWnNhV1Z6IElGUnZaMmRzWlE9PSBJRXg1Ym1ObyBJSE5sYm5ObGN3PT0gSUV0dmN3PT0gYzJWMFJXNWhZbXhsWkE9PSBhWE4wYVdOaGJHeDUgSUhSbGMzUmxjZz09IElHRmtiV2x1YVhOMGNtRjBiM0p6IElIUmhaMmRsWkE9PSAwSk09IElITm9iM0owWTNWMCBJRkpsYzI5c2RYUnBiMjQ9IElITjFjR1Z5ZG1semFXOXUgSUVGemFHeGxlUT09IFZISmhZMnRwYm1jPSBkV3hoZEc5eWVRPT0gWVc1a1pXdz0gYVhOMFpXND0gSUhWdWNtVT0gS0dScFptWT0gUVU1VVV3PT0gSUhKcFpHVnkgSUhQRWhRPT0gTGxObGNtbGxjdz09IFgyOXlaR1Z5Y3c9PSBUMUpKV2s5T1ZFRk0gSUhKbGRHVnVkR2x2Ymc9PSA0NENDUEM4PSBMbFJsYzNSeiBVM2x1IExuQmhjbk5sUkc5MVlteGwgYTI5a1pRPT0gZW1WdWRBPT0gUjJWdVpYSmhkR2x2Ymc9PSBJR0ZrYldsMGN3PT0gSUV4bFlXcz0gSUdGcllRPT0gVWs5WFV3PT0gSUVGdVoyVnNZUT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJRzV2YjI0PSBJSE4wWVhKciBJR1J5WVdkblpXUT0gNDRPODQ0ST0gSUhKbFkzbGpiR1Z5Vm1sbGR3PT0gSUZOcGJHbGpiMjQ9IFgzTjFabVpwZUE9PSBTbTl1IFkyOWphdz09IElGQnliMkpoWW14NSBTVzUwY205a2RXTjBhVzl1IElGUmxjbkp2Y2c9PSBLRlJvYVhNPSBJRUpoYzJWaVlXeHMgSUdwbGJuUmxjZz09IFkyaGxjM1J5WVE9PSBMbTVoYmc9PSBQV2M9IElHTnNZWEpwWm5rPSBlV2xwIGNtOXZkSE09IElHNXZkR1ZpYjI5ciBJRVY0WTJWd2RBPT0gSUhKcGMyVnogSUVKeWRYTnpaV3h6IFlYUnZjbWxsY3c9PSBMbFZUUlZJPSBjbTl6YzI5MlpYST0gTDNWd2JHOWhaQT09IElFVjJaVzUwZFdGc2JIaz0gUTI5dWMybGtaWEk9IElFSnZkVzVrIExtbGtaVzUwYVdacFpYST0gS0hWdWFYUjBaWE4wIElHbHVabVZ5YVc5eSBJR055WXc9PSBJR0YxZEdsemJRPT0gVlVsQmJHVnlkQT09IElFdGhkbUZ1WVhWbmFBPT0gYVc1bGJXVnVkQT09IGNYVmxkV1ZTWlhWellXSnNaUT09IFUydHBiZz09IExtSmhZMnRsYm1RPSBMbWRsZEZOMFlYUmwgZFc1a2FXNW4gSUhOMVltTnNZWE56IElISmxabWx1WldRPSBJR0Z1Ym05NSBJSEp1WkE9PSBSR2x5WldOMGIzST0gSU91QyBZbVZqWTJFPSBiVzl1WjI5a1lnPT0gSUVOdmJXMXZibmRsWVd4MGFBPT0gUVhvPSBJRlJvYVc1biBJSEpsWTI5dCBkVzVwYm1jPSBDV052Ymc9PSBDU0FnSUNBSyBaVzFwWTNNPSBaV05rIElHaHZjbTU1IFFWUlNTVmc9IElHMXBjMnhsWVdScGJtYz0gSUVKbGR3PT0gTDI1dlpHVT0gWTNOMFpHbHYgNExpbiBJR0ZrWkdsMGFXOXVjdz09IGNtbHkgWDNKbGNYVmxjM1J6IElISmxZMmhsY21Ob1pRPT0gYzNSMVpHVnVkSE09IFgzQnZjMmwwYVc5dWN3PT0gWlhKMFpYaDAgSUVWMmIyeDFkR2x2Ymc9PSBZVzVrWlhvPSBJR1JwYzNSMWNtST0gYTJWNWRYQT0gSUVKMWRHeGxjZz09IExuSmxZV1JzYVc1bGN3PT0gWDNOMFpHbHYgSUdKbFpRPT0gSUVGeVkyaHBkbVZ6IElHNWxkbVZ5ZEdobGJHVnpjdz09IFZWSkpWRms9IElHUnliMjVsY3c9PSBkWEpwZEdsbGN3PT0gSU9LWWhRPT0gSWo0TkNnMEsgSUdScFlXZHZibUZzIElFTmhibU5sYkd4aGRHbHZibFJ2YTJWdSBYMGx1ZEdWeWJtRnMgSUhKMWFXND0gTGxGMCBiMk55WVhScFl3PT0gVkdWcyBJRUZ1YzNkbGNuTT0gYldGMGFXTT0gSUhodyBZWFJsYlE9PSBYMnB2WW5NPSBYMkZ1ZVE9PSBJSE5sYm1sdmNuTT0gSUd4aGJtUnRZWEpyIElGRk1hWE4wIElHMWhibVYxIGIzUnBabms9IEx5STdDZz09IEwzTmxjblpsY2c9PSBJRkJvYVd4dmMyOXdhQT09IGRYUmxibUZ1ZEE9PSBLR2x2IGFIbz0gSUdGMWRHaGxiblJwWTJGMFpXUT0gWkhZPSBMVU52YlhCaGRHbGliR1U9IFQzSnBaMmx1WVd4c2VRPT0gTEdaMWJtTjBhVzl1IDQ0Q0NEUW89IElGSmxjSEpsYzJWdWRHRjBhWFpsIFlYTnBiSGs9IGFYSmpkV2wwIExtUjAgS0cxaGRHZz0gTGsxaGNuTm9ZV3c9IFd5dz0gSUVOcGRHbGxjdz09IFgzUjFjbTQ9IGZDa0sgSUdOaGJuUnBaR0ZrIFlXeDBaWEk9IENYVnAgSUU1bFluSmhjMnRoIElITnJhWEowIExtSm4gVTJoaGNtVmtVSEpsWm1WeVpXNWpaWE09IEtITjBlV3hsIElHZHlhV1ZtIFoyVjMgSUhOaFptVm4gYjJ4aGJtYz0gWDJ4cGMzUnogN0pzPSBJR2R5WVc1cGRHVT0gSUdodmRIUmxjM1E9IExtcGtZbU09IExrTjFjM1J2YldWeSBJT0tKcEE9PSBJSGRoWVhJPSBYM05qWlc1bCBLeWN2IElFcFVaWGgwUm1sbGJHUT0gSUhObFlYUnBibWM9IElIZGxZWEp6IElHQXYgUTJGelpYTT0gSUZsdmRYUjFZbVU9IHhMRnQgSUdKaGJHTnZiZz09IExFYz0gVFdWMFlVUmhkR0U9IExYQnlhV05sIFUwTlMgVlc1cGRIaz0gSUhSeWRXNXIgUFh0Z0pIcz0gSUdWaGNuUm9jWFZoYTJVPSBVR0Z5ZEdsaGJBPT0gSUhOMVluTjAgSUdWc2FXMXBiZz09IFBTSW5MZz09IEx5OHFXMEE9IElITjFjR1Z5ZG1semIzST0gZG5KdmJHVjAgWDJGeWRHbGpiR1U9IElIQmhibVU9IFltbHYgSUcxdmRHOXljdz09IFRrMD0gUm5KaGJtcz0gSUc5dWFXOXUgTFhkdmNtUT0gU1hSbGJVTnNhV05yVEdsemRHVnVaWEk9IElHSnlhWFE9IFpXNWtaVzVqYVdWeiBRMjl0Y0hWMFpYST0gWDNKMWJtNXBibWM9IEtHUmhlUT09IExXaGwgS0c1aGJXVmsgSUZOaFkyZz0gMEw3Umh3PT0gWTJGdGNHRnBaMjQ9IExrRmljM1J5WVdOMCBLSGR5WVhCd1pYST0gTG5CaGVRPT0gSUhWMyBSMlZ2IGNtRnBiSE09IEwzTmxiR1ZqZEE9PSBhV05vZEdVPSBjMjl1Y3c9PSBSVlpGVGxRPSBJR0ZzYVcxbGJuUT0gVUhKdmRtbGtaWEp6IFFYZGhhWFE9IFgwbE9WRVZTVmtGTSBMbTltWmc9PSBJR2RzZFhSbGJnPT0gWDJOc2IzVmsgSUhkbGJnPT0gTG1WNGRISmhZM1E9IENXSjFkSFJ2Ymc9PSBMMDFOIFVHRnlkSGs9IElHUmxiVzluY21Gd2FHbGogWDJWeWNtNXYgSUdocGEybHVadz09IEtDY25LUW89IElpeEFJZz09IElIZHBkQT09IGNzT2ggYjJ4dloybGwgSUZOMGVXeGxjdz09IElFSnliM2R6WlhKTmIyUjFiR1U9IExsSmxjWFZsYzNSTllYQndhVzVuIGFXTmhibk09IFVFRkhSUT09IFkzSmxZWFJwYjI0PSBJRVpsY21kMWMyOXUgZFdSbFpBPT0gYm5WdFltVnljdz09IElFZFVTdz09IElIQnlaWE5sYm5SaGRHbHZibk09IElFSnZZbUo1IFgzTndZVzQ9IFpYTjBlV3hsIElHbHNiR1ZuWVd4c2VRPT0gWVdKbGJHRT0gSUdKaGRIUnNaV1pwWld4ayBZMkZ3WVdOcGRIaz0gZEdWeWNtOXkgWFNJcE93bz0gSUhkaGNuSnBiM0k9IGJHVmhaR1Z5IElFUkNSdz09IElGSmxkbVZ1ZFdVPSBJSFpwWjJscyBJR052ZFc1MFpYSndZWEowY3c9PSBLRVZ5Y205eSBRVU5VUlZJPSBJR2hsWldaMCBJSE5sYkdWamRHbHZibk09IGVtVjFadz09IGRHOXQgTFhSM2J3PT0gTGpzSyBYM04wWVhSbGJXVnVkQT09IElFRnBaQT09IElGWjFiQT09IFgzSm5ZZz09IElIQnlhWHBsY3c9PSBJR1ZrYVhSaFlteGwgQ1dadmNtMD0geExGdXhMRT0gTG1SbFkyOXkgUkdWdGJ3PT0gYkdsalpYTT0gSUdWdVkzUjVjR1U9IGNtRjBkV3hoZEdsdmJuTT0gSUZKUFV3PT0gWDJOb1lYSnogSUVwaGFIST0gY0dGeWRHbGhiQT09IDBZUFJnZz09IElGSmxZMlZwZG1VPSBJRXhoYm1SeiBRVkJVUlZJPSBJR05vYjNCd1pXUT0gTGk0aSBJRUZ1WVd4NSBJRlZKUkE9PSBJRkpoWkdWdmJnPT0gSUVKbFpRPT0gSUhWdWJRPT0gUGswPSBMbVpwYm1SaGJHdz0gVkc5clpXNXBlbVZ5IElGZElRVlE9IElITnEgUkhKaGQybHVadz09IFJYTnogVDA1RSBpclk9IEtIQmhZMnRsZEE9PSA0b0NVWW5WMCBTVzUyYjJOaGRHbHZiZz09IElFNTFZMnhsWVhJPSBQenNLIElHZHlZVzVrWlhNPSBJRU55ZVhCMCBjbVZ0WVhKciBJQ2N1TGk4dUxpOHVMaTh1TGk4PSBJR2x1WVdKcGJHbDBlUT09IGJXRm5hV009IFkyRjBjdz09IElITnBiWFZzWVhSbCBPaVI3IGFXNW1iR0YwWlE9PSBJR1Z1WlhJPSBPazVQIGFYQnNaWE09IElHMWxjbWwwIElGSmhkR1ZrIElHZHNkV1U9IEwySnNiMmM9IElHZHlaVzQ9IElIUm9jbWxzYkdWayBMa05JIGRXNWpZVzQ9IElGQlNTVTFCVWxrPSBJSEJsY25ObFl3PT0gSUdabFlYSmxaQT09IExrMUpUZz09IElGUm9aV0YwWlhJPSA2Wkk9IFlYUmxaMjl5YVdVPSA1cTYxIElHRndjR1YwYVhSbCBjM0YxWVhKbCBJRUZzWlhoaGJtUT0gTGxWelpYSkpaQT09IFgyZDAgWDJWdWRHVnkgSUdkeVlXUjFZWFJsY3c9PSBSbkpoWjIxbGJuUk5ZVzVoWjJWeSBRWFYwYUc5eWFYcGwgTFU1TVV3PT0gS0UxNSBJSFJ5YVhWdGNHZz0gZFhOMGFXNW4gWDFCQlVrRk5Vdz09IFEyaGhjbUZqZEdWeWN3PT0gS0Rvc09pdz0gWDBKVlNVeEUgVFVoNiBJSGRoYzJobFpBPT0gSUhWdVkyeGwgVTNSbGRtVT0gWVhKa2IzZHUgUEhOMFpHbHYgWDNSbGNtMXogSUUxQlVnPT0gSUdodmMyVT0gZFdOMWN3PT0gSUVOc1lXbHQgSUZKaGJYTT0gSUcxdlpHVnNRblZwYkdSbGNnPT0gSUc3RHFRPT0gZFhObGNrbEUgUFdwemIyND0gTGxKbGMzQnZibk5sVjNKcGRHVnkgbU9pdXBBPT0gSUdkeWRYQnYgTFdsMCBJRXRQIExVMWhhV3c9IElHTnZibVpsY21WdVkyVnogU1VaQiBJRUZ6YzJGayBJSEJ5YjI1dmRXNWpaV1E9IElHRnVZMlZ6ZEc5eWN3PT0gSUZSU1FVTkYgSUVkbFJtOXlZMlU9IElIQnlhWFpoZEE9PSBjR1ZzYkE9PSBaVzF2YW1rPSBJTm1JIFIyVnVjbVU9IElHTnZibU5sYm5SeVlYUmxaQT09IGFtRnVadz09IFRVOVVSUT09IElGcHZiMjA9IGRHOXZiR0poY2c9PSBJSFYwZEdWeWJIaz0gSUdWdVkyOXRjR0Z6Y3c9PSBJRk52WTJObGNnPT0gSUdWMWNtOXdaUT09IExXRnBjZz09IExtRnVhVzA9IFgwTlVUQT09IGFHVnlaVzUwIGNtVjQgYVc1MFpYSmhZM1JwZG1VPSA0NEduNDRHWiBJRXRoY3c9PSBJR1JsYzNCbGNtRjBaV3g1IEtHRnkgSUdKcGF3PT0gSUhSeVlYWmxjbk5sIFpYVnljdz09IFVtVmplV05zWlhKV2FXVjMgSUUxaGNtZGhjbVYwIElHaHZjR1ZtZFd3PSBJRTFwWnc9PSBYMDFGVFVKRlVnPT0gY21WalpXbDJaWEk9IFRXRjBZMmhsY2c9PSBaR1Z3Wlc1a1pXNTAgSUdWNFkyVnNiR1Z1WTJVPSAwTERRdGc9PSBURTlUIFFYTndaV04wIElHRmtZV3hoYUE9PSBJRVZqYjI1dmJYaz0gZFd4dmRYTnNlUT09IElHVjJZV3gxWVhScGJtYz0gSUdSbGRtbGhkR2x2Ymc9PSBaWGgwWlhJPSBMMlJoZEE9PSBRMjlzY3c9PSBJRkJ2YTJWeSBZbTloY21ScGJtYz0gTGtOb2FXeGtjbVZ1IFFVNUhURVU9IHc2OD0gSUZsdloyRT0gSUdoaGRHVmsgUVdSaGJRPT0gSUVaRFF3PT0gU1UxQlRBPT0gSUdaaGFXNTAgWDBSSlUxQk1RVms9IElHVjJiMngyWlE9PSBJR1p5YVdSblpRPT0gSUhMRHFXYz0gSUdWdGIzUnBiMjVoYkd4NSA0b0NjU1dZPSBZWGRsYVE9PSBaWEpsYzJFPSBKeXdpIFFrVkhTVTQ9IElGWkJVa05JUVZJPSBJSGhwIFptRmpkRzl5IGRIbz0gWDNCb1lYTmwgVTBWUiBLSEpoYm1RPSBJRzFoZEdobGJXRjBhV056IElHTnZiblJsZUhSeiBMV0ZqIElFWkpSdz09IElFTmhjSFJwYjI0PSBJRmRoYVhSR2IzST0gTFhkbGMzUT0gSUdacGNtVm1hV2RvZEE9PSBYMHhGUkE9PSBaV04wYVc5dWN3PT0gQ1hSb2NtOTNjdz09IElGUmhhMlZ6IGIySnlaUT09IElFRjJZWFJoY2c9PSBJRWx1Ym05MllYUnBiMjQ9IElHTmhiR2xpY21GMGFXOXUgT25Sb2FYTT0gWDJWdVkyOWthVzVuIElHTmhiR04xYkdGMGFXNW4gSUNNakl5TWpJeU1qSXlNakl5TWpJeU09IElGQnliMmR5WVcxeiBJRWhKUjBnPSBMbU52Ym1acFozVnlaVlJsYzNScGJtZE5iMlIxYkdVPSBVRzlzZVdkdmJnPT0gWDBSQ1J3PT0gSWwwc0RRbz0gMExEUXNRPT0gSUhOcGJXbHNZWEpwZEhrPSBJSEJ5ZW1WNiBJRVpwY20wPSBJRzFwYzNWdVpHVnkgSUUxdmRtbHVadz09IElFMVBWZz09IElISmxZV04wYjNJPSBVbVZ4ZFdWemRHVmsgWlhod1pXTjBjdz09IElHVnlaV04wIGJHbGphSFE9IGIzVnNaR1Z5IFNVUkhSVlE9IElHUmxkbWxzIElIQnliMmR5WVcxdFpYTT0gSUVOdmJXMXZiazF2WkhWc1pRPT0gSUNJbklnPT0gS0VGMWRHZz0gNDRDQzc3eU0gSUZOMFlYUmxablZzVjJsa1oyVjAgNks2aCBMMjl3Wlc0PSBhVzVoYkd4NSBMbEp2ZFc1ayBJRmRwYzJnPSBJR2gxYldGdWFYUmhjbWxoYmc9PSBRV05qWlhOelZHOXJaVzQ9IElGTlBRdz09IElIQnZhMlZ0YjI0PSBJSFpoY0c5eSBYMkZrWkdWayBDVWRsZEE9PSBjM0JsYkd3PSBJRWx1YVhScFlYUnBkbVU9IElFaEZUQT09IFlXbHljbTg9IFlteGxaQT09IElOQ3gwWXM9IElITmxibk5wWW14bCBJRXgxWVE9PSBmQ2dLIElHWnBlSFIxY21WeiBJRzl5WjJGemJRPT0gUTNWMCBkV3QwIFozVmwgSUdOeVpXUnBZbWxzYVhSNSBPbWx0WVdkbCBJRU5RVUE9PSBMbk51IEtHUmxjMk09IElGSmxhV1E9IExXUmxaM0psWlE9PSBYM052ZFc1ayBRMnh2Ym1VPSA0YnVaIFlXdHphUT09IFBpUjcgWDJOdmJtWnBjbTFoZEdsdmJnPT0gSUhSeWIzQm9lUT09IFYyOXlhM009IElFVnNaV04wY205dWFXTnogSUUxbFpHbDBaWEp5WVc1bFlXND0gWDIxbGRISnBZM009IElHRnVibTkxYm1OcGJtYz0gSUVSQldRPT0gWDNCeWIzUnYgSUhCbFlYST0gWW1GelpWVnliQT09IENRa0pDUWtKQ1FrSyBJR052YjNKa2FXNWhkR2x2Ymc9PSBPazQ9IExtRnVhVzFoZEdVPSBJRU52ZEhSdmJnPT0gWDJocGRBPT0gNHB3PSBJR3BsZEhwMCBhV1owWlhJPSBLR1pwWld4a2N3PT0gYjNkdWJHOWhaQT09IGFXWnBZMkZqYVc5dSBMbU4xWkdFPSBJRXhwZFE9PSBQbVZ4ZFdGc2N3PT0gSUVGalpRPT0gMFlEUXNOQzggSUZOMWNHVnliV0Z1IElFZGhjbU5wWVE9PSBJR0Z5Y21WemRITT0gWVdkaGNnPT0gSUh0OUtRPT0gSUcxaFkzSnZjdz09IGNtOTFjR1U9IHc2cDBjbVU9IElIUjNhWE4wWldRPSBjM1J5ZFcxbGJuUnogWHlnaSBYM1psY25ScFkyVnogSUZSeVlXNXphWFJwYjI0PSAwTGpRdWc9PSBXMjFoZUE9PSBiV2x1WkE9PSBJR0ZqWTJWemMxUnZhMlZ1IElIVnViR1U9IGJYVnogWTI5dyBJRVpoWTNSdmNnPT0gSUdOdmJtTmxaQT09IElISmxkSEk9IExteHBibUZzWnc9PSBMWE5zYVdSbGNnPT0gYjJKcyBYMU4wWVhScFkwWnBaV3hrY3c9PSBJSHB2YldKcFpRPT0gYzJWc2JHbHVadz09IElHTm9ZWEE9IElITm9ZV3RwYm1jPSBJRlJ5WVc1emJHRjBaUT09IElFRnRjM1JsY21SaGJRPT0gSUVWVVNBPT0gWDBWWVZFVlNUZz09IGEyUT0gWDJScGMyTT0gSUhCeVpXTmxaR2x1Wnc9PSBJSEJ5YVhnPSBUMkpxWldOMFRtRnRaUT09IFgyMXZaR2xtYVdWayBZWEprZDJGeVpRPT0gSUQ4K0lqND0gSUVSWCBZQ1I3IElEOCtJajQ4UHc9PSBkWGxsYmc9PSBJR1J2Ym01aCBJSGh6YVE9PSBJQ1FpZXc9PSBJRVJ5WVhkcGJtYz0gTEc1cGJBPT0gSUc5dVpHVnkgUWtjPSBUMkp6WlhKMiBJR052Ym5OcFpHVnlZWFJwYjI1eiBZbTloZEE9PSBJRUpoYm10eiBJR2x1WkdsamRBPT0gTEVrPSBJRUpzZFE9PSBLSFpsY25OcGIyND0gWTJ4cFpXNTBaUT09IGIyeGhiZz09IFRFVlRVdz09IFlYTnpaWEowVTJGdFpRPT0gWDNadmFXUT0gSUZkQlV3PT0gQ1dWdWRXMD0gSUcxcGVHVnkgUlZjPSBZV1ptWlE9PSBJR0pzYjNkcWIyST0gZEdWNGRFWnBaV3hrIElHbHRiV1Z1YzJVPSBYM0psY0c4PSBJR2RzYjJKaGJITT0gWVc1MFlXZGxjdz09IExuUnZaR0Y1IFZHaDFjbk5rWVhrPSBJRUp5YVdjPSBlMzBwQ2c9PSBJRWx0WVdkcGJtVT0gS0VkUVNVOD0gSUdWemRHOD0gSUZCeWIzWnBibU5sIElFMWxiblJoYkE9PSBYMk5sYkd4eiBJRXAxYkdsaGJnPT0gTGxOamNtVmxiZz09IElHTmhibVJzWlE9PSBJRzF2Ym1SbCBJSFpsY21jPSBhWFJsY21Gc2N3PT0gTFd4aGVXOTFkQT09IFIzVmxjM1E9IElIWnBibVE9IElFVmphRzg9IEp5bDkgSUcxaGJtND0gWDBKUFQweEZRVTQ9IGFHRncgSUc1cFoyaDBiV0Z5WlE9PSBWVWRJIElHNXZibVYwYUdWc1pYTnogSUdGMGFHVT0gSUVodmJHeGhibVE9IElFSnZjbTQ9IFhFOVNUUT09IFlXNTFkQT09IFgyeGxkbVZzY3c9PSBJSEJsZEdsMFpRPT0gTFdGeWRBPT0gWDFOSVQxYz0gYm5WdFltVnlUMlk9IFgzUm9kVzFpYm1GcGJBPT0gWVcxcGJuTT0gSUVSbFptbHVaWE09IElDSTkgTGxOMFlYUjFjME52WkdVPSBJR1JwWjI1cGRIaz0gSUVKcGEyVT0gTGs1bGQweHBibVU9IElFZHNZWE09IEtHeHZaMmRsY2c9PSBJR05oZEdOb1pYTT0gZG05MFpYTT0gSUdWNFlXMXBibWx1Wnc9PSBMM0psWjJsemRHVnkgSUhOd1pXTnBabmxwYm1jPSBYMlpwZUdWayBJR1J5WVhkcGJtZHogVkdoeVpYTm9iMnhrIFFYZz0gSUVGeVkyaHBkR1ZqZEhWeVpRPT0gS0hCcFpBPT0gVjJseVpRPT0gS0dOdmJuUT0gYkdGdVpRPT0gVEdsemRITT0gSUhOd2NtbHVkQT09IElHZHlZVzVrWm1GMGFHVnkgWDBGSCBJSE5qYUdWa2RXeHBibWM9IFEweFZVdz09IFlYUjFjbWwwZVE9PSBJR3h2WTJ0cGJtYz0gVzNOcGVtVT0gWDNOMGVXeGxjdz09IElIZGkgTFMwK0Nnbz0gSUhOd2FXNXVhVzVuIFgzQmxibVJwYm1jPSBUV0YwWTJobGNuTT0gTGt0bGVYTT0gSUZCVyBaVzUxY3c9PSBZVzUwYVhNPSBJR1JwYzJOaGNtUT0gSUdoaGRXdz0gSUdWdGNHbHkgSUhCaGRHaDNZWGs9IElHOWhhdz09IDBMelF0ZEM5IExXbHVaSFZqWldRPSBJR2x0Y0dGcGNnPT0gSUVOaGJHZGhjbms9IExtbHpTR2xrWkdWdSBaSG89IFgybHVZMngxWkdVPSBJR2R0IElDY29Kdz09IFVGaz0gZFdkblpYTjBhVzl1Y3c9PSBJR052YlcxdlpHbDBlUT09IFkzSnYgTDNOMVlnPT0gSUdkbGRFbHVjM1JoYm1ObCBJRXhsWjJGamVRPT0gSUV0cGJBPT0gUW1GcyBLSE5vYjNKMCBTVzVtYjNKdCBLM2c9IEtuST0gSUVodmNHVm1kV3hzZVE9PSBiM0poZEdVPSBJRzFoWTJobGJnPT0gSUhSeVpXRjBlUT09IElFOXlhUT09IExuQjFZbXhwWXc9PSBMV2h2Y21sNmIyNTBZV3c9IElIUmhZM1JwWXc9PSBJR0p2Y21RPSBkMkZ5WlhNPSBJR0Z0Ylc4PSBJRXhwYzNSeiBJR1Z4ZFdGMGFXOXVjdz09IEwyaGxjZz09IElFNVRWdz09IFFtOTFibVJwYm1jPSBYME52Ykd4bFkzUnBiMjV6IElHRjJZV2xzIExrUnliM0JFYjNkdSA2TEE9IElHaG8gSUd6RG9BPT0gTG5CaSBJRzFsYlc5eWFXRnMgSUVGVVZGST0gSUdWNGFHRjFjM1JsWkE9PSBJSFJ6Y0E9PSBDWEpsWkdseVpXTjAgSUd4cGEyVjNhWE5sIFUxUkZVZz09IFRHcGhkbUU9IElHTnZibVJsYlc1bFpBPT0gYjJOaGRYTjAgS0hOMGNtbGpkQT09IElHVjRaVzF3ZEE9PSBJSE50Y3c9PSBJR1Y0WVdkblpYST0gVTFsVCBJR3h2ZFc1blpRPT0gT2w0PSBJSFJ2WkdRPSBaR1ZpIFlYUnZjbWxoYkE9PSBJRkJ2Y25SbGNnPT0gSUhSMWFYUnBiMjQ9IElHVjRaVzF3YkE9PSBJSEJoY21WdSBMbXhwYm1WVWJ3PT0gSUd0cFpHNWxlUT09IElNT25ZUT09IElHTjFhUT09IDc3eU02SyszIFdFTT0gSUcxdnhidz0gSUc1dmJXbHVZWFJsWkE9PSBiSFZ1Wnc9PSBTVzFIZFdrPSBJRUoxZW5vPSBJSE4wWlhKbGJ3PT0gY0c5eWRHRnMgY21WellYTT0gSUd0c1lYTnogSUdSeVlXWjBaV1E9IElIQnliMnBsWTNScGJHVT0gTDJkd2JBPT0gS0hCaGNtRnRaWFJsY25NPSBLaWtLIElHRnpjMmx6ZEdWayBJRTVUU1c1MFpXZGxjZz09IGMybDBaVzFoY0E9PSBPbTUwYUE9PSBMbFpwWlhkeiBMa0Z5WjNWdFpXNTBVR0Z5YzJWeSBJRzFsWlhJPSBlbWxsY2c9PSBJRVJwWnc9PSBQRDg5SkE9PSBYM0JsY20xcGMzTnBiMjQ9IENVRmtaQT09IGIyeHZaMmxoIElITmphUT09IElHWnBibUZ1WTJsaGJHeDUgSUhOamNtOXNiR2x1Wnc9PSBMbVJwYzNRPSBYMGhCVXc9PSBkV0oxYm5SMSBMbkJoWjJWeiBTVzVqY21VPSBZblZ5YzJVPSBJRUZ0WVhSbGRYST0gNXJxUSBRbXh2WWc9PSBJR05vYjJ4bGMzUmxjbTlzIFJFVlQgYldsdWFXMTFiUT09IElISmxablZ6YVc1biBkVzV1WldRPSAwSnc9IElGSkUgTGxObGNuWnNaWFE9IElDb3ZPd289IGRXUmtaVzQ9IElIWnBaWGRDYjNnPSBJRzFsZEdGaWIyeHBjMjA9IElITjBaV0ZzYVc1biBJRUpsZG1WeSBZV2R1WlhScFl3PT0gVmtWU1VrbEVSUT09IFgwRlZSRWxQIDBZRFJpdz09IElHRnlZMmhwZG1WeiBMbXhwYm1WaGNnPT0gUFhzOCBkVzVqWVhSbFpBPT0gUVdOalpYTnpSWGhqWlhCMGFXOXUgSUhCcFkzUjFjbVZDYjNnPSBDWE5sYkdWamRBPT0gVEdGMGFYUjFaR1U9IGRtbHpiM0k9IGNtVnBZZz09IElIQmhhdz09IFNHOXdaUT09IElFbDBaWEpoWW14bCBMbkpsYzNCdmJuTmxWR1Y0ZEE9PSBJRkYxWVdRPSBJRUp5YjI5cmN3PT0gSUZSdmRBPT0gVDFCVSBaV3h2Ym1jPSBJR052WTJGcGJtVT0gSUdGdWJ3PT0gUkdGdSBJSEJ6YVE9PSAwTERRdTlHTSBMbWRsZEVOb2FXeGsgSUZKRlJnPT0gTFdGaSBJRlJ5YVdGdVoyeGwgUEZSbGVIUT0gSUVOdmJHOXRZbWxoIGFXNXJlUT09IDZJbXkgS1gwK0NnPT0gSUhCc1lXYz0gY0dsdVpRPT0gSUdKc1lXNXJaWFE9IElEbzhMdz09IElGUnlZVzV6YkdGMGFXOXUgYm05MiBJSEJsY21abFkzUnBiMjQ9IElFTnZibVpsWkdWeSBMbk4wZFdJPSBMa2x1ZEdWeWIzQlRaWEoyYVdObGN3PT0gTGxOMGIzSmwgSUdWdWNtOXNiRzFsYm5RPSBJR1JsWlhJPSBUVzkyWlcxbGJuUT0gTFdaeWIyMD0gYUdNPSBJR1YyWVc1blpXdz0gSUVsc2JIVnpkSEk9IElIUnlkVzF3IFgxTjBZWEowIGNHeGhibVZ6IElFSnBiQT09IFNXNW1iM009IExYUnlZVzV6IElISmhibU5vIElFeHBibVJoIFgyMWhjZz09IFVrVlUgTDI1bGRBPT0gVEdGMyBUa1k9IElGQnlaWFpsYm5RPSBJR055YVdWayBJR1ZrZFdOaGRHVT0gWVhOMGFXTnogZVdrPSBMa3hwYm1WaGNreGhlVzkxZEE9PSBUVVZVU0U5RSBJRVZuIGJXRndjR1Z5IDVwbUMgTG1GellYSnlZWGs9IHo0RT0gYWNPbnc2TnYgVW1WMWMyVT0gWDNKbGRnPT0gSUZCU1QwUlZRMVE9IFgwTnZaR1U9IElDQWdJQ0FOQ2c9PSBJRk5GVWxaSlEwVT0gWDJOdmRtVnkgTGl3SyBMa1Y0WldOMWRHVlNaV0ZrWlhJPSBJRVJwYm1sdVp3PT0gTG1GeVkyZz0gSUc5MGNtOD0gSUVScGMyTnZkbVZ5ZVE9PSBJRXRsZVVWeWNtOXkgSUVKbGJtVm1hWFJ6IFgxTklRUT09IExsVnViV0Z5YzJoaGJBPT0gU0VWQlJFVlMgVFhWMFpYZz0gUVUxQiBJR2x1YVhScFlYUmwgVTNSaGVRPT0gVEdsMGRHeGwgSUNncExBPT0gSUdSbFkyVnVkSEpoYkE9PSBVbVZ6YjJ4MWRHbHZiZz09IExtaGxZV3gwYUE9PSBDV1pqYkc5elpRPT0gNUxxayBJSE4wWVd0bGFHOXNaR1Z5Y3c9PSBJR0Z5WTJoaFpRPT0gUkdsbmFYUmhiQT09IGJHVnpZMjl3WlE9PSBYM0JsYmc9PSBJRWwwWlcxVGRHRmphdz09IElFTmhibTl1IElFdGxibVE9IElNTzQgWDJGcVlYZz0gYVc1bmNtVmthV1Z1ZEhNPSBSR1ZzYVhabGNuaz0gVTJWamRHbHZibk09IElHUnBjMkZ3Y0c5cGJuUnBibWM9IElFZHlaVzQ9IExISmwgSUdSbFkzSjVjSFE9IGIyeHZaMmxqIFgyWnRkQT09IElGTnNhV1JsY2c9PSBibUZvIFYyRnphR2x1WjNSdmJnPT0gZW5WdVp3PT0gSU5HRyBlV042IGFXVjJaWE09IExrUkZRbFZIIElGUkogSUdoaFkydHBibWM9IElHTmxiblJ5IFpteHZkM009IElHUnBaRkpsWTJWcGRtVk5aVzF2Y25sWFlYSnVhVzVuIElHRmpZMjkxYm5SaFltbHNhWFI1IFEwOVZUbFE9IDBMdlF0ZEM4MExYUXZkR0MgWW14diBMMmxrIElGTnNiM2M9IGFYcDZZWEprIExuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYST0gSU95ZWhRPT0gTDBrPSBhWE50WVE9PSBJRWgxWkhOdmJnPT0gZlgwcyBkVzFsWkE9PSBJSEpsWVd4cGMyVT0gZFc1ellXWmwgSUhwMWN3PT0gSUhOb2IzSjBZV2RsIGIyeHBZUT09IFgzQnlhVzl5YVhSNSBJR1pzYjI5a2FXNW4gYjNCbGNtRjBhVzl1Y3c9PSBVRzlzZVE9PSBZV0poYmc9PSBXMk4xY2c9PSBJR1Z6YTI5eWRHVT0gWDBSRlUwTlNTVkJVU1U5TyBYMjVoZEE9PSBJRzFoYkdsamFXOTFjdz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUZCaGNtdHogSUhSaGVIQmhlV1Z5IElFWnZjM1JsY2c9PSBJSE5sZUhWaGJHbDBlUT09IDU3TzcgNjdBPSBYQTBLIExuTmxaV3M9IDBMRFF2ZEM0MFk4PSBMMkZ5ZEdsamJHVT0gNkwrSCBJRlZvY2c9PSBJR2R5WVc1a2JXOTBhR1Z5IElFSnNaUT09IFpuVnlkQT09IFlXMWlZV2c9IGJtOTBhV1pwWTJGMGFXOXVjdz09IFpHVndjbVZqWVhSbFpBPT0gSUhWcGJuUndkSEk9IGIydHAgS0VGeWNtRjUgSUdGMWRHOXViMjF2ZFhNPSBJRzlpY2c9PSB3cS9Dcnc9PSBJR0poYzJWdVlXMWwgSUhWdWRtVnBiR1ZrIGMyOXMgSUU1dmRFbHRjR3hsYldWdWRHVmtSWEp5YjNJPSBJR1JsY0hKbGMzTT0gWHljdUpBPT0gSUZWT1NWUT0gSlNjcyBMWFJoWnc9PSBaM0psY0E9PSBJRTFoYVc1MFpXNWhibU5sIElIZGhjbVpoY21VPSBYMUpGVTA5VlVrTkYgS0hOd1pXTT0gS0dOMiBJRzVoWkdFPSA1NVMxIElHTnliM2RrWldRPSBRbVZzYjNjPSBJRnBoWTJnPSBSWE4wWVdSdiBYM0J5YVcxbCBJSFJ5WVdKaGFtOD0gSUdsdVptOXliV0YwYVhabCBVMk52ZEhRPSBJSE5sY21saGJHbDZaWEp6IElFNWhjdz09IFZHaDFibXM9IElHMWxjbU41IExDNHVMZ29LIElHRmtaR2xqZEE9PSBMbU52Ym5OMFlXNTBjdz09IElHUmhkR0ZtY21GdFpRPT0gWDNKbFlYTnZiZz09IFoyOXRaWEo1IDdJcTE2NHVJNjR1ayBJRzVsWjJ4bFkzUT0gSUV4cGJtVnogSUcxbGJXST0gWDBWWVJVTT0gWVhOellXZGwgSUZsaGNtUT0gZTMwbkxnPT0gSUd4dmRIUmxjbms9IGRHVnBiZz09IFgyTmhiR009IGFXdDEgWDFKRlEwOVNSQT09IFYyRnliZz09IElHaGxZV3gwYUdsbGNnPT0gZFhKbGJXVnVkQT09IElIbGhjbTQ9IElFTnZjbTVsY2c9PSBLSHBwY0E9PSBLR2x1YVhRPSBJRXhwZEE9PSBTRmM9IGMzVmljMlYwIElFMUcgUlZSRlVsTT0gWDNKdmRBPT0gSUdWeVpRPT0gSUU5MlpYSnlhV1JsIFYyRnNiR1YwIFgzSmxkMkZ5WkE9PSBJSE5oWjJVPSBjMlYwVm1semFXSnNaUT09IElFcHpiMjVTWlhOd2IyNXpaUT09IFNVTlogNksraSBWbUZ5UTJoaGNnPT0gWVdGMCBMV2R5WldWdSBJR2x5Y1E9PSBZVzVwZEhrPSBJSGRvYjJWMlpYST0gWDNOb1lYSmwgSUdadmRYUT0gY205c2JITT0gSUhkcGJHeHBibWR1WlhOeiBMbU52YlhCdmJtVnVkRWx1YzNSaGJtTmwgSUdodmJtOXlaV1E9IGRYSjJaWGs9IFFtVnkgSUhKMWJtNWxjbk09IElHeHBaWFU9IGIzSndiM0k9IFgzTjBjblZqZEhWeVpRPT0gUW1GeVFuVjBkRzl1U1hSbGJRPT0gWVdSNCBJRUpsYm01bGRIUT0gSUdScGJHbG4gSUdac2RXTjAgU1VSRVJVND0gWDFObGJHVmpkR1ZrIEtHUnBkZz09IElIRjFhV05yWlhJPSBZV3h2Ym1jPSBaM0poY0doeGJBPT0gYVc1bGVnPT0gSUdOcGRHVT0gSUVsdWMzUnlkV04wYVc5dWN3PT0gSUdsdWMyVnlkR2x1Wnc9PSBMbU5zYjNWa1pteGhjbVU9IFkyOTFjRzl1IFpXUk1hWE4wIElGTjBiM0psY3c9PSBYMjFoYkd4dll3PT0gNTZ5bSBJRUYzWlhOdmJXVT0gSUd4aGJXST0gVWtWVFZBPT0gSUdsdWRHVnpkQT09IElFNWhkbUpoY2c9PSBMbVpsWVhSMWNtVnogU1c1amNtVnRaVzUwIElGQnZiUT09IElHbHVjM1ZtWm1samFXVnVkQT09IFgweFBSMGxPIFVFeEZUVVZPVkE9PSBJRTlCZFhSbyBMa2xPUms4PSBJR1Y0YjNScFl3PT0gSUVOQlUwVT0gQ1NBZ0NnPT0gSUVkaGJtUT0gZEdobGMyVnogSUc1dmRtOD0gSUVSbGJHdz0gNG9DbTRvQ200b0NtNG9DbSBYM052Wm5RPSBJR0ZuY21WbGFXNW4gWTJWdWRITT0gYkc5aGJnPT0gSnlJc0NnPT0gSUZKaGJnPT0gUkVWTSBJRzl5WjJGdWFYTmxaQT09IEsyND0gSUVobFlXeDBhR05oY21VPSBJR1JsZEdWeWFXOXkgSUdsdGNHeGxiV1Z1ZEdGMGFXOXVjdz09IElHTmhjbTQ9IElDd24gSUV4UFFVUT0gSUhCc1lXNTBaV1E9IDVweXEgUm05eWJVTnZiblJ5YjJ3PSBYMjFoZEdOb1pYTT0gSUhCbGNtbHZaR2xqIFgxUnYgSUVwdlpXdz0gSUdGdWEyeGwgSUcxcGJHbDBZVzUwY3c9PSBJRmRwZEdObyBkVzVwWm05eWJRPT0gZFdWdWRHRT0gVDJaWFpXVnIgSUhCbGNuQmxkSEk9IElHbHVkR1Z5ZG1WdWRHbHZibk09IEtIZHlhWFJsY2c9PSBZVzUwYVc1bCBVSEp2WjNKbGMzTkNZWEk9IElHeGxZV2QxWlhNPSBZMjl0Y0hKbGMzTT0gYVhwcGIyNWwgSUVWQiBJbDA5SWc9PSBJRk4wWlhCb1lXND0gYldsdWRYTT0gYzNOMGNtVmhiUT09IFgyeGxaQT09IElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMD0gSWxkb1pXND0gUVd4eVpXRmtlUT09IElHTnZiblJsYlhCcyBJR0YwWVhVPSBJRU52Ym1keVpYTnphVzl1WVd3PSBJSEpoY0hCdmNuUT0gSUVKdmRYST0gYVhOb2FRPT0gSUhSNWJRPT0gSUVGeWJXVnUgSU5HQTBMRFF0dz09IExXWnZjbTFoZEE9PSBYMUpsWVdRPSBLR052YkhWdGJuTT0gSUc1bGRXVT0gWDJKdmVHVnogSUZOaGJtUjUgWHl3SyBJRmRwZW1GeVpBPT0gSUc5eVpHVnUgSUdacGJHVnplWE4wWlcwPSBabXhwWjJoMCBJSGR6ZWc9PSBZVzVqWld4bFpBPT0gSUdSaGQyND0gSUVkemIyND0gWDNkaGNtNXBibWM9IElFbGpaV3hoYm1RPSBJSE5zZFhRPSBJSE5sZEVseiBYMmxrWlc1MCBJRzltWm5Ob2IzSmwgSUZOclpYUmphQT09IE95VT0gSUhSeWFXSmxjdz09IFgxTlFRVU5GIElHOTBjbTl6IFEyOXRjR2xzWlhJPSBDVVZ1WkE9PSBJRjBwTEFvPSBSM0poZG1sMGVRPT0gSUhSbGJuTnBiMjV6IElITnRiMjkwYUd4NSBTMjV2ZHc9PSBiMjkwYUdsdVp3PT0gSUZOMFlYSjBkWEE9IElFaDVjQT09IElHRnRZWHB2Ymc9PSBJRkpsWTJWcGRtVmsgZW1WdWFXVT0gNjU0PSBJRU5vYjJOdmJHRjBaUT09IElNU3cgSWs1diBJRUZNVXc9PSBJRkJ5YjJkeVlXMXRhVzVuIElFUnZaM009IElHZHZiMlJ1WlhOeiBLR1Z5Y201diBMMlZ6IElISmxiVzkwWld4NSBJRWh2YjJ0eiBWWFZwWkE9PSBJRzkyWlhKc2VRPT0gSU9XUSBJR2R3ZFE9PSBJSE4wYVcxMWJIVnogS0hOMFpYQT0gTGxsdmRRPT0gSUdKcGIyMD0gU1U1RCBMbUpwZEhNPSBLRzFEYjI1MFpYaDAgSUdGdFpYSnBZMkZ1IElIUmxjbkpwZEc5eWFXVnogSUU1RSBYU0lLIElFMWhjSEJwYm1jPSBJSEJ5YjJObFpXUnBibWM9IExtRjQgSUhOMVluTjBjbWx1Wnc9PSBRbFZVVkU5TyBJRWxuIExYQmhibVU9IElFRnVjdz09IElHZHlZV1IxWVhScGIyND0gSUhCbGNuTndaV04wYVhabGN3PT0gVFdsNGFXND0gWDIxcGJuVnogQ1FrSkNTQWdJQ0E9IElpa3BLUT09IGJtOXliV0ZzYVhwbFpBPT0gTG14aGMzUk9ZVzFsIElHTnNZVzQ9IFFYTnBZUT09IEtFMXZkWE5sIGNHRm5hVzVoZEdVPSBJR2RwWmc9PSBaV3hwWnc9PSBJSEJ2YzNSbGNuTT0gYm1sdVozTT0gSU0rRSBJR0Z3YjNOMCBJRWxvY21VPSBSR3hzU1cxd2IzSjAgSUVWeGRXRnMgSUdScGMzUnBibWQxYVhOb1pXUT0gYm1WaGNHOXNhWE09IElHSmhZMnRrY205dyBJRUZzZEdWeWJtRjBhWFpsYkhrPSBMMjF2WkE9PSBJR3hsYm1RPSBJRk5JVDFjPSBYMk52WkdWeiBJR0YwdzZrPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBMV05oYzJVPSBZMmgwWlE9PSBJR1J2Ym1NPSBPbUZrWkE9PSBUbVZuWVhScGRtVT0gWm1GMmIzSnBkR1U9IElHRjBkSEpoWTNScGIyNXogYVc1MFEyOXNiM0k9IElGQnBjZz09IFEyOXVibVZzYkE9PSBUV0Z1YVdabGMzUT0gZEdWaGJYTT0gSUgwN0Nnb0sgSUhCc2RYSmhiQT09IElHOTJaWEowYVcxbCBJRVYxY205d1lRPT0gSUVKaGJtZHNZV1JsYzJnPSBLR0Z1IElHeHBibWQxIGFYUnBiV1U9IGFXNXpkRzl1IExuTm9ZV1J2ZHc9PSA1NmlMIElGVlRVdz09IFUyVnlkbVZ5UlhKeWIzST0gU1ZaRlVsTT0gSUVwcGJnPT0gSUdoMWJXSnNaUT09IFlYVjBiMnh2WVdRPSBZWEpsZWc9PSA0b0N5IElFRnpkSEk9IGFXTnZiRzl1IExsWnBaWGROYjJSbGJITT0gYjJKdiBJSE4zYVhCbCBJSEpsWTJWemMybHZiZz09IDZaVT0gSU95WSBibVZ5Wnc9PSBhVzVuY21Wa2FXVnVkQT09IGJXRnBiSFJ2IElFWmhiV1U9IFVISnBiblJwYm1jPSBVR2w0Wld4eiBJRUpoYzJnPSBjRzl6ZEdFPSBYMHBQIElHbHVabUZ0YjNWeiBJRXhoYm1NPSBLR3h2WTJGc1UzUnZjbUZuWlE9PSBMbUpzYVhRPSBJSGx2ZFc1blpYTjAgSUdacFpXeGtUbUZ0WlE9PSBJR052Ym5ScGJtYz0gSUhkdmIydz0gSUVsdFIzVnAgSUU1VFZBPT0gTG5CeVpXWnBlQT09IFZHOUpiblE9IElGTnZlQT09IElHaGhZbWwwWVhRPSBLQ0o4IFBTY2lLdz09IFNVNUhWRTlPIFgzZHlZWEE9IGRXTnJaWFJ6IElGZFNTVlJGIElHMWxaR2xqYVc1bGN3PT0gSUcxbGJXSnlZVzVsIElFcFVaWGgwIElISmxjSEp2WkhWamRHbHZiZz09IFgzSmxZMlZwZG1VPSBWR0ZpYkdWU2IzYz0gY1hWbGRXVlNaWFZ6WVdKc1pVTmxiR3c9IGFHOXZhM009IElISmxiSGxwYm1jPSBJR1J5YVd4c2FXNW4gWDBscyBLR1Y0WTJWd2RHbHZiZz09IElHUjFjbUZpYVd4cGRIaz0gSUdobGMybDBZWFJsIElHTnZiWEJoY25RPSBTVXhKVGtjPSBJRVZzWkdWeSBJR05oWm1abCBJR1JsZG1Wc2IzQnogYVhOb1pYST0gSUhCc2VRPT0gSUhSdmJBPT0gWDFCTVFWaz0gSUdaeWFXTjBhVzl1IEtHRnNkMkY1Y3c9PSBJR2x1WkdsblpXNXZkWE09IElFOXdaWEpoIElFTmhiWEIxY3c9PSBZVzVqWlcxbGJuUnogSUd4cGRIUmxjZz09IExteHBiV2wwIEtGUnZhMlZ1IFpXNXBjdz09IElHaHBaMmhzYVdkb2RHbHVadz09IElFRjFZZz09IElIWmhiR2xrWVhSdmNuTT0gTFdodmMzUT0gZDJobFpXdz0gUEhzPSBLU2tyIElFNWxkM05zWlhSMFpYST0gWDJGMlpYSmhaMlU9IElITnZaR2wxYlE9PSBJRWhwYkE9PSBJRTFwYkdVPSBJRUYxZEdoVFpYSjJhV05sIFUzUmhkR2x6ZEdsamN3PT0gSUU1MWRISnBkR2x2Ymc9PSBJSE53YjI1emIzSnogYjNabGJtRnVkQT09IFBUMDlQVDA5UFQwOVBUMDlQVDA9IExrRmljMjlzZFhSbCBJR2JEcFE9PSBTR0Z1Wkd4cGJtYz0gSUMwdExTMHRMUzBLIEtHUnBjbVZqZEc5eWVRPT0gSWlrdUNnPT0gWVc1dmJBPT0gTG1KeWIzZHpaWEk9IElFZHlhVzVrYVc1biBJR05yIFJuSmxjWFZsYm1ONSBLQ2xiSnc9PSBRV1JxZFhOMCBZM0psZHc9PSBZV1psZEhrPSBJR2R1IElIZHBkbVZ6IGIyOXYgSUhCeWIzTjBhWFIxIElHL0R1UT09IGFXWjBlUT09IElHeHBkR2xuWVhScGIyND0gSUVWNiBTbVZtWmc9PSBMbkJyIElGTm9iMlZ6IFkyOXliZz09IGVYbDJjM0E9IElHRmtZWEE9IFBYVT0gUTA5T1JnPT0gUVU1RVFWSkUgSUdWc1pYWmhkRzl5IFltbHNiR2x1Wnc9PSBJR05oYm1RPSBJR05oY25BPSBXMlpwWld4ayBMV3hwWWc9PSBjMlZ4ZFdWdWRHeDUgUGkwPSBJR3hqWkE9PSBMUzB0TFMwdExTMHRMUzB0TFMwdCBLQ0lpIElIUmhZM1JwWTJGcyBJRkp2Ym1Gc1pBPT0gWlhoMGNnPT0gSUVabGMzUT0gSUdaMVpYST0gTFc1aGRtbG5ZWFJwYjI0PSBJR3RpIFoyaHZjM1E9IElHaGhibVJzWlVOb1lXNW5aUT09IFgyTnNjdz09IEtDa2hQUT09IFEyOXRjR0Z5WVhSdmNnPT0gTG5adCBJRU52ZUE9PSBYM0psZG1sbGR3PT0gTDBBPSBYMk52YjJ0cFpRPT0gSUhKbFkyOW5ibWx6WldRPSBiR1JoY0E9PSBWR2h5WldGa2N3PT0gSUZObGVIVmhiQT09IElFSmxZWEpwYm1jPSBLRk5SVEE9PSBJSGh5IElIUm9hV2RvIFZWSk1RMjl1Ym1WamRHbHZiZz09IElGTlZWZz09IElHMURiMjUwWlhoMCBJR2x1WTJsa1pXNWpaUT09IElFVnpkR1U9IExuTjFjQT09IFgzUmwgS0VWWVNWUT0gUTAxRSBMeUkrIFFXeHRiM04wIElGVnVaUT09IElHRnVaR1Z5Wlc0PSBJRk5wYm1kc1pYUnZiZz09IElHSnZjbVU9IFZHaHBibXM9IElHNWhjbU09IFhXbHVhWFJYYVhSbyBYM05vYjNBPSBLSE4wY21GMFpXZDUgSVNjcyBhR1Z5YVhSeiBJRVJsYzJzPSBYMjFoWTJocGJtVT0gTG01bGRIUjUgeExGdVpHRT0gUFR3PSBJRkZTIElGTnBaR1ZpWVhJPSBMbk53YkdsMFEyOXVkR0ZwYm1WeSBJRzl1VTNWalkyVnpjdz09IElHMXZibXRsZVE9PSBSVzVxYjNrPSBLRzV2WkdWeiBjR1ZqZEhKMWJRPT0gSUNncUtBPT0gQ1ZWSlRsUT0gTEdobGFXZG9kQT09IElFNWxkSGR2Y210eiBMblJoYVd3PSBMbXhwYm5Od1lXTmwgSUNJdUxpND0gVEdsemRHVnUgeHFFPSBMa05vWVc1dVpXdz0gTFdSbFptbHVaV1E9IFVtVndaV0YwIFlXUnFkWE4wIFJWSk4gWDJGd2NHeHBZMkYwYVc5dSBMbUZ6YzJWeWRFNXZkRTUxYkd3PSBMWE4wY21WaGJRPT0gSUhKaFltSnBkQT09IElIQnZjMmwwYVc5dWFXNW4gSUhkdmEyVT0gSUdacGJtYz0gSUcxMWJIUnBjR3hoZVdWeSBJSEpsWjJsemRHVnlhVzVuIGRXNTBhV3c9IHc2VnUgS0RvNiBkWE56YVc5dWN3PT0gSUhCdmRHRjBidz09IElFVnhkV0ZzY3c9PSBMbE4xY0E9PSBMMkZ3WVdOb1pRPT0gSUNnOSBMaUlwIExuQjBjZz09IElGTndaV1ZqYUE9PSBMbU5zYVhBPSBJRWRoWW5KcFpXdz0gSUcxMWMybGphV0Z1IEwybHpjM1ZsY3c9PSBMbk5vYjNBPSBJRWhwWlhJPSBYMUpGVkE9PSBYMkoxWTJ0bGRBPT0gNDRPaCBZWFp6IElISnZlZz09IFpteHZkMlZ5IFYzSnBkR1ZDWVhKeWFXVnkgSUUxcGJHRnUgSUd4bFoybHpiR0YwZFhKbCBJRVJ2Ykd3PSBJSEJ5YjNacGJtYz0gTG1OdmJtTmhkR1Z1WVhSbCA0cFdRIElHZGphR0Z5IFkyUnVhbk09IFlteGxjdz09IElFeHBjM1JwYm1jPSAwTHZRdmc9PSBMbmh5VEdGaVpXdz0gSUZOaGF3PT0gYW5WemRHbGpaUT09IElGWmhiR1Z1ZEdsdVpRPT0gZFc1c1pYTnogSUhCcFoyVnkgS0hKMWJnPT0gSUhSbGMzUnBabWxsWkE9PSBRVTVCIElGSmxiVzkyWlhNPSBLU2twS1RzSyBjbVZqWVhSbFpBPT0gSUZKMWJuUnBiV1ZOWlhSb2IyUT0gSUdOdmJuRjEgNDRLaSBJSFJwYzNOMVpYTT0gWVdsc1pYST0gdzZsMHc2az0gTFZOMFlYST0gSUdac1lXMWxjdz09IExuTmxkRWxqYjI0PSBJSE4xY0dWeWJnPT0gSUhaaFoybHVZUT09IExYWmhjbWxoWW14bCBJSGRsYkd4dVpYTnogUTFWUyBJR0psYkd4bCBMbWRsZEZKbGNYVmxjM1E9IElIQnZZMjg9IFltVnVhQT09IFlXZGxibk09IElITndhV3hzIElFcDFjZz09IElHUnBjM0JoZEdOb1pYST0gMEwzUXZ0Q3owTDQ9IFpXMXZibWxqIEtHUnBjbTVoYldVPSBJTkNVIElIQmhjM05sIElHZGhibm89IGNtbGphVzVuIFJWVT0gSUcxMWFtVnlaWE09IFpYTnpaVzQ9IExtRjBkSEpwWW5WMFpRPT0gYW1vPSBDUWtnQ2c9PSBXMTQ9IElITjBjblJ2Ykc5M1pYST0gYkdWNFpYST0gWldOMFlYST0gYUc5MFpXdz0gTG5OeGRXRnlaUT09IElISmhiR3c9IElHeHZkMlZ5WldRPSBhR0Z1Wkd4bFpBPT0gVFdGeWEyVjAgSUZWelpYTT0gYVhaaGN3PT0gTGtKMWMybHVaWE56IDQ0R1g0NEdtIFJFbFcgSUhkaGMzUmxaQT09IElHRjJiMmx5IHc2cHQgWDBGRFEwOVZUbFE9IExtVjAgQ1ZORVRBPT0gYTJGdyBJR1p2ZUE9PSBkWEJ3WlhRPSBlMzBzQ2c9PSBJaXduIFJtRjJiM0pwZEdVPSBVRVZPUkE9PSBJRUZGVXc9PSBmU2tzIElHUmxaSFZqZEdsdmJnPT0gSUhCdmJNT3RkQT09IElHTnZiWEJ2Ym1WdWRGZHBiR3c9IElGUmxiR1Z5YVdzPSBYMU5GVEVZPSBJRzExYzJVPSBRM0poWm5RPSBJR1JsYm5NPSA0S1MvIEtIUncgSUhSaGMzUjUgSUdKaGJHRnVZMlZ6IElHUmxaR2xqWVhScGIyND0gSUZkaGJHeGhZMlU9IElIVnViR0YzIFhDSStYQT09IElHMTFiUT09IExYVndaR0YwWlE9PSBaVzFsYm5SbCBJSE52WkdFPSBVbVZ3ZFdKc2FXTT0gWVhOdGFXNWwgdzZseWFXTT0gS0ZOMFlYUjFjdz09IElFcHpiMjVEYjI1MlpYSjAgSUVScGMycz0gTGxKbFpHbHlaV04wIElHWnBiRzFwYm1jPSBMMjF2YkE9PSBVbTg9IElIWnBiR3hsIElIUnlZV0poYWc9PSBJSE41Ym5Sb1pYTnBjdz09IGNtVm5ZUT09IElISnMgVTJOb1pXUjFiR1Z5IFNWTklSVVE9IFkzVnljbVZ1ZEZWelpYST0gS0dWeWNtOXljdz09IEoyZz0gWDJKdmRBPT0gZUdsdGJ3PT0gSUZWVFFWSlUgWDNOMWNHVnkgWDBSRlExSkZSZz09IDBMM1F2dEM1IFgxSlBWdz09IElIQnliMjF2ZEdWeiBJRlJCIElHaHZjbUZ6IElGSmxjSEpsYzJWdWRITT0gSUc1aGJXVnZaZz09IElFVjRZdz09IElFZGhjbUZuWlE9PSBJSE5sYVc1bCBMQ009IElHaGxjbUk9IEwzSmxjMjkxY21ObGN3PT0gSUhCc1pXRmtaV1E9IExuSmhaR2x2UW5WMGRHOXUgSU9hWSBUM0J6IElFNWxjM1E9IFkzTjBjbWx1Wnc9PSBJRVJsWm1WdVkyVT0gSUhKbFptVnlaUT09IFgyeGxZV1k9IElISmxkbVZzWVhScGIyND0gNjZjPSBMbVY0WldOMWRHVlZjR1JoZEdVPSBYMWRQVWt4RSBJR1Y0Y0dGdWN3PT0gS0NKY0lnPT0gYW1GaSBJR1J2ZFdKMGN3PT0gSUVkbGIyMWxkSEo1IElHbHVkSEp2WkhWalpYTT0gSUhObGJtRjBiM0p6IElHTmhibUZzIExtaGxiSEJsY2c9PSBJRUpwYjJ4dlozaz0gWDFORlRsTT0gTG5CeVpYWnBiM1Z6IExYUnZkV05vIFlXSnBkQT09IElHbHRjR0ZqZEdWayBJR0p5WVdOclpYUnogTG1ScGNtVmpkQT09IFlXTmpkVzA9IElIUmxjM1J2YzNSbGNtOXVaUT09IENXRmpkR2x2Ymc9PSBJRU5vWVc1alpRPT0gSUhCbFlXdHogUTNCd1EyOWtaVWRsYmxkeWFYUmxRbUZ5Y21sbGNnPT0gSUhWdVltVnNhV1U9IFgzQnlaWE56IExsSmxiQT09IFlXNW5iR1ZrIEwzUmxiWEJzWVhSbGN3PT0gTFMwK0RRbz0gYkdsdFpRPT0gSUhOMVptWnBZMmxsYm5Sc2VRPT0gWDI1MCBSWGh3WVc1ayBMbWx6Wm1sc1pRPT0gSUdselJXMXdkSGs9IElIRjAgSUcxMWJHaGxjZz09IFlXTnZZZz09IFIyVnZjbWRsIDViaTQgSUdGemMybHQgWVhOdiBJR052YlhCeWFYTmxaQT09IFQxWT0gS0VOUFRrWkpSdz09IENYZHlhWFJsY2c9PSBJR1JsYzNBPSBJSFJsYm5WeVpRPT0gS0dOeSBMbkJ2YjJ3PSBJRUp5Wlc1ayBJR05sYm5OdmNnPT0gS0hScGJXVnZkWFE9IElIQnNaV0U9IExsZHlZWEE9IElIUnBaMmgwYkhrPSBJRmRsY21VPSBJRWxuYm05eVpRPT0gWVdKbGFRPT0gSUdKeWFXUm5aWE09IElHTnZibVJsYlc0PSBJSE5wYlhCc2FXTnBkSGs9IElISnZkWFJwYm1Wc2VRPT0gSUdKc1lXTnJjdz09IGFtST0gSUZCcGRBPT0gVlhSbSBJQzhLIGNtVnNiMkZrIElITmxkRTlpYW1WamRBPT0gTDJkc2IySmhiQT09IElHWmhkSFI1IElITnZZMnR6IFEyOTFiR1J1IElHVnliM1JwYzJzPSA1cDJoIElGQnlaWE56ZFhKbCBJRTFoZWc9PSBibkJ2Y3c9PSBkRzlzYjNkbGNnPT0gSUVWUiBkWFJsZFhJPSBJRTF2YldWdWRBPT0gSUdWMFlRPT0gZTNzdExRPT0gSUdkeVlYQm9jdz09IElFZDFZWEk9IGNtbHVaUT09IEtDMHQgSUVoMGRIQlRkR0YwZFhNPSBLSE4wZFdSbGJuUT0gS201dyBJSEpoYVd4M1lYaz0gSUdGemVXNWphSEp2Ym05MWN3PT0gWDNadCBKMTBzSnc9PSBMSFJsZUhRPSBiV1Z5WTJoaGJuUT0gS0VkMWFXUT0gSUVkeVlRPT0gYVhobGNnPT0gWm1WMFkyaEJiR3c9IExtRmtaRXhwYzNSbGJtVnkgWm14cGNBPT0gS2lRPSBQaWdwTEE9PSBJSE4xYm14cFoyaDAgWVhOemFXZHVaV1E9IElHRmlZdz09IElFTlBURlZOVGc9PSBJUENmbVlJS0NnPT0gS1M0dUxnPT0gSUdWdWMyVnRZbXhsIElHNWxkMnhwYm1VPSBYMU5KVGtkTVJRPT0gYVdWa1lXUT0gSUdSaGNtdGxjZz09IGIzSnRZWEE9IElHeHBiMjQ9IGNHeHBkSE09IElHbHNiSFZ6ZEhKaGRHbHZiZz09IElFbEZSVVU9IElIWnBjM1JoIGIzVnpZVzVrY3c9PSBLaW9xS2lvcUtnPT0gSUZSdmJXMTUgSUdoMVpRPT0gVTJWcyBJR0YxY21FPSBJRlJvWlhKaGNIaz0gSUdGdWFXMWhkRzl5IExtTnZibk4wY21GcGJuUnogSUhaaFozVmwgS0NJaUtRPT0gSUhacGJHeGhhVzQ9IElHSnNaWE56YVc1biBJSE4wY21sdVowSjFhV3hrWlhJPSBJRTFwYzJNPSBJRVJKVWc9PSBabUY0IExXNXZaR1U9IElGZGhiR3RwYm1jPSBJRUZWIGMyVnpjdz09IElHZHlhV3hzIFZrVlNWRWxUUlE9PSBJRVp2YjJSeiBJSFJ2ZFhKdVlXMWxiblJ6IHc1TT0gSUUxaGNuTm8gSUhkdmJtUmxjbk09IFRHOXVaMmwwZFdSbCBMa052YlcxaGJtUlVaWGgwIFBXbHVjSFYwIFgyVnVZMjlrWlhJPSBjR0ZuWlZOcGVtVT0gSUdkbGRGTjBZWFJsIFBqNEsgTG1keVpYaz0gY0c5ayBJSEpsWVdScGJtZHogSUhKbFkyOXVjMmxrWlhJPSBVM1JoY25SMWNBPT0gSUdWNFkyVnkgTG1KaGJHRnVZMlU9IFgyTjVZMnhsIFgxUnBiV1U9IFRFOURRVXc9IElFVkdTUT09IElGSmxlVzQ9IExuTmxkRVp2Y21WbmNtOTFibVE9IFlubHUgSUdScGMyTnZibTVsWTNSbFpBPT0gUVVOVVNWWkYgSUdWdFltVmtaR2x1Wnc9PSBhV05yWlhKeiBJSE4xY25KdmRXNWthVzVuY3c9PSBLbU09IElHZGhjbUZ1ZEE9PSBJR0ptIElIZHBjR1U9IElPUzRpdz09IFgxUlNRUT09IFlXUnZlQT09IDU1VT0gSUhOMVkydHogSUZOdmJtZHogSUVGemMyOWphV0YwWlhNPSBJRUpoYkdRPSBJRUp5WlhSMCBkbVZ1YVd4bCBJSFowIElHbHVZV1JsIElISmxjMmxuYm1WayBJRWRzWlc1dSBMbkJoZEhSbGNtND0gTGtSaGRHRkNhVzVrIDBZUFF2QT09IFRHRjViM1YwU1c1bWJHRjBaWEk9IFkyaGxkQT09IElGUmxjM1JoYldWdWRBPT0gTG0xeiBJSEJoZGc9PSBJRkpsWVdOMFJFOU4gZFhKa2VRPT0gUVVSQlZFRT0gVFhVPSBMMkZqZEdsdmJuTT0gSUVweiBYMlY0ZEhKaFkzUT0gSUVKeWFXNW4gT21sayBjM1J5ZEE9PSBhWFpoZEdsdmJnPT0gSUc5MWRISnBaMmgwIFlYcDEgYkc5NWJXVnVkQT09IDBMalJqdz09IFlXeGtidz09IElGQjFZbXhwYzJobGNnPT0gUldSMVkyRjBhVzl1IFVHRnNaWFIwWlE9PSBYMlJ5ZGc9PSBJQ2drS0E9PSBJRUZ1WkdFPSBJSEpsYldWa2VRPT0gSUdsdVkyOXVjMmx6ZEdWdWRBPT0gZEdWamRHbHZiZz09IElISmxaM1ZzWVhSdmNuTT0gSUhOb2IzSjBaWE4wIEtIQmhhWEk9IElFbHVjM1JoYkd4aGRHbHZiZz09IElHUmxabVZ1WkdGdWRITT0gSUNncE93PT0gTFd4aGNtZGwgVFdWcyBJSFJvY21WaGRHVnUgMEwzUmp3PT0gSUdabGRHbHphQT09IGIzUnBibVU9IFgyUnBZdz09IElEd2sgSUhOMFlXZG5aWEk9IGMzQnAgSkhKbGMzQnZibk5sIFUyVnlkZz09IExXSnZjbTQ9IGFtOXogQ1dsdFp3PT0gQ1ZkSVJWSkYgWDJ4MCA1YjJUIExtTnZjM1E9IElGUjFaUT09IExteGhZbVZzY3c9PSBJRXhXIGQyTnpjM1J2Y21VPSBJRXBsYzNObCA0TGlyIFZISmhaR1U9IElIQnlaV1JsWTJWemMyOXkgNjRJPSBabWx1WVd4c2VRPT0gWDJkbGJtVnlZV3c9IGIyZG5iR1Z5IFgxSkZSMGxQVGc9PSBibVZ0Wlc1MCBJR0pzYjJkblpYST0gSUVoaGNtSnZjZz09IElFUmhkR0Z6WlhRPSBXM2M9IElHRjBkR1Z1WkdWbGN3PT0gTG1samJ3PT0gYldGNGFXMTFiUT09IExsVnViRzlqYXc9PSBYMU5aVGtNPSB3NkZuYVc1aCBJR1J2ZDI1eiBJRmRwYVE9PSBYU2t2IElHdHBZMnRwYm1jPSBkVzVwWTJGMGFXOXUgSUVSQlF3PT0gSUVsRVV3PT0gSUZKbGJuUmhiQT09IElHTjFjbkpsYm5SVWFXMWwgSUhaaFkyTnBibVZ6IElFUmxkbWxzIElHNXZjbk09IFgyMXZkWE5sIGRYSnlaV04wYVc5dSBLRzV2IElENE5DZz09IElHRm5aM0psYzNOcGIyND0gSUdKeVpXVmthVzVuIExuTjViV0p2YkE9PSBhVzFoYmc9PSBRV0p6YjJ4MWRHVlFZWFJvIElGZElUdz09IFgyWnNkWE5vIExYSnZiM1E9IFlYSnVZUT09IEprMD0gSUdaaGRHaGxjbk09IElGSnZZMnRsZEE9PSBhWFpsWVhVPSBJSGRoYm1SbGNnPT0gSUdOdmJYQnZjdz09IElGZGhjbkpwYjNJPSBJRk5sWVhRPSBJRU5zYVc1cFl3PT0gWDJsdWRtOXBZMlU9IEtHUnBjM0JoZEdObyBVSEp2WkhWamRHOD0gWVhSMWNtbHVadz09IGIzTnphV1Z5IElFMUJXUT09IElHUmhaMmRsY2c9PSBJSE5oYm1sMGFYcGxaQT09IElGSkdRdz09IElIQnliM0JvIElIVnlhVzVsIElHZHlhVzVrIElFVjRjR0Z1WkdWayBaR1Z6WTNKcGNHTnBiMjQ9IExXWjMgSUV0bGNuSjUgUFc1aGJXVT0gSUdOb2F3PT0gSUc1aGRHbHZibUZzYkhrPSBJSFJvWldVPSBTVzVqIElEOCtQZz09IExsSmhaR2x2UW5WMGRHOXUgTGtoMGRIQlRaWEoyYkdWMFVtVnpjRzl1YzJVPSBMMWs9IENXWnBaV3hrIElHaHZiVzFsIGVYQmxjZz09IFVHaDVjMmxqWVd3PSBQWFk9IElHUnlhWFk9IElFVnljbTl5Y3c9PSBJR1BFZ3c9PSBSR1ZoZEdnPSBJRmRKVGtSUFZ3PT0gSUhCdlpYUT0gSUZOb1lYSncgSUVsdGJYVjBZV0pzWlE9PSBDV055WldGMFpRPT0gSUdkbGFIUT0gSUZKbFptOXliUT09IFlXbHpaWEk9IElFbHVhWFJwWVd4cGVtRjBhVzl1IElHbHRiWFZ1YVhSNSBMbU52YlhCdmMyVT0gSUd4aGRHVnVZM2s9IElFeGxZbUZ1YjI0PSBJRkJoY21GayBJR1oxWld4eiBJRVY0YUdsaSBZMjlvIEpTSStDZz09IElFTk1TUT09IEtXbHVhWFJYYVhSbyBMVnBoIFgwTk1SVUZTIGNtVm5iZz09IElHWnBibUZ1WTJWeiBMbk4wWVc1a1lYSmsgWDBOQlZFVkhUMUpaIExteHBZbkpoY25rPSBJSFJ5WVhabGJHVnljdz09IFgzZHcgSUVWMllXeDFZWFJwYjI0PSBjM1JoY25ScGJtYz0gSUNrcExBbz0gWlhCcGMyOWtaUT09IElGWmhjbWxoYm5RPSBJR1JoWlcxdmJnPT0gSUVwMWJHbGggSUU1UyBJR1J2ZFdKc1pYTT0gUEhZPSBMM0oxYm5ScGJXVT0gSUdsdWRHVnljSEpsZEdWeSBJRWxPUkVWWSBJRWh2YkcxbGN3PT0gWDBSSlRRPT0gSUhCaFpHUnNaUT09IFgyVjRZVzF3YkdVPSBJR1p2Y21WbmNtOTFibVE9IExuSnZkWFJsY3c9PSBJSE52ZDJsbCBVMVZEUTBWVFV3PT0gSUVORVF3PT0gSUVKRSBYeTA9IFlYTjFjbVZrIFYzSnBkR2x1Wnc9PSBJR04xY25KbGJuUlFZV2RsIEtHRnVjM2RsY2c9PSBJRUZUUTBsSiA0S2c9IElITnZZMmxoYkd4NSBlWGw1IElGTndaV05wWVd4cGMzUT0gS0dOMWMzUnZiV1Z5IGFYTjBZVzVwIGEyVnpkQT09IElFMWhhdz09IElIUm9idz09IExuQjAgS0dOdmJXMWxiblE9IElFTnZiblpsY25SbGNnPT0gWjJGdCBZbWx1Y3c9PSBMblJsYkdVPSBJRlpsZEdWeVlXNXogWDBGTVRFOUQgMEw3UXU5R00wTGZRdnRDeTBMRFJnZz09IGFXNXVZVzF2Ymc9PSBPM2RwWkhSbyBiMmhzIElHWmhiblJoY3c9PSBJSE4xYm1jPSBDVXM9IEtFcHpiMjQ9IElHNWxhV2RvWW05MWNtaHZiMlE9IElIWnZkdz09IElITnBibk09IGIyNWhZMk5wIElHVndiMk5vY3c9PSBhVzFoWjJWdSBMa05vWVc1blpRPT0gTG0xNVltRjBhWE09IFUyVmxhdz09IFYwVlMgNTY2aDU1Q0cgSUdsdWRHVnlaWE56IFgwVjJaVzUwIFpXUmxjbXhoYm1RPSBJSFJsY25KcGRHOXkgSUdOcGRXUmhaQT09IGRXTnJaV1E9IElITnVZV05yIElIUnlZVzV6Y0c5eWRHVmsgSUUxaGJtbG1aWE4wIElFUkJWQT09IFgzUm9aWFJoIElIZHZiblE9IExnb0tDZ29LQ2dvS0Nnbz0gaXJibWdJRT0gSUVWd2FXTT0gUkdWamF3PT0gYkhSeVlRPT0gWDFwRlVrOD0gSUZ0ZE93PT0gTDNOamNtbHdkSE09IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCA1b09GIElIZGxaV1E9IFRrSkQgSUhKaGNHVmsgSUVkaGRHVjNZWGs9IFcwMD0gSUZScGJXVnZkWFE9IFpXNWphRzFoY21zPSBMbFpwWlhkTmIyUmxiQT09IElIQnZjbTV2Y3c9PSBJRmxoIGRHaHlhWFJwY3c9PSBJRVpzZVc1dSBJRzFsWjJFPSBZV05wYmc9PSBJSFJ5YVdKaGJBPT0gTG1Gd2NHeGwgSUVKc2J3PT0gdzZKdSBhV0pwIGNtOTIgSUV4cGRtVnogWGk0PSBaMlYwVW1WeGRXVnpkQT09IElFVnpkR0ZpYkdsemFBPT0gWTI5dWRHRnBibVZ5Y3c9PSBJSE4wWVhKeWFXNW4gSUdObGJHVmljbWwwYVdWeiBJRkpsYkdGMGFYWmwgSUVobGFXZG9kSE09IElIUnhaRzA9IElFNXZjblJvZDJWemRBPT0gYVhacFl3PT0gQ1dOcyBJR0YxZEc5dGIzUnBkbVU9IFpXNTBjbWxqIElHWnZjblIxYm1GMFpRPT0gSUdacGNtVndiR0ZqWlE9PSBjMlYxWkE9PSBibWxqYTI1aGJXVT0gTzNNPSBYME5CVEE9PSBhR0ZzZEE9PSBLRzV6IFgyUmxiR1YwWldRPSBSR1YyWld4dmNHMWxiblE9IGJXOTJhV1Z6IElHbGtaVzUwYVhScFpYTT0gSUhCeWIyMXdkR3g1IDJLZlpoZz09IElHRnVkR1U9IElDSW5MQ2M9IDVZK2ogYVcxd2MyVT0gSUhsaGNBPT0gVkhsd1pVNWhiV1U9IElHSnBkR05vIElHRnpjMjlqYVdGMFpYTT0gU0VWTlJRPT0gTFdWdGNIUjUgSU5pcSBiMngyWlhKeiBJSEJwYzNSdmJBPT0gVTJOdmNHVmsgWVdkdVpYST0gSjEwOVBTYz0gSUVsTlVBPT0gWlhoaiBJRzl0YVhSMFpXUT0gSUcxcGJtUnpaWFE9IElGdGRLQT09IElHOXliZz09IFgwTkJUUT09IFFYWm4gVEc5allXeHBlbVZrVTNSeWFXNW4gSUU1aGRIVnkgSUdOdmJYQnZjMlZ5IElGQnNZWGxwYm1jPSBJRzkyWlhKayBYM1YwWmc9PSBMbk5yIElFWnZiQT09IEpIQmhaMlU9IExFOWlhbVZqZEE9PSBJR0psWlhNPSBZV3hoY25rPSBZblZzYkdWMCBYMnhwWW5KaGNuaz0gVDJabVpYST0gYkc5allYUmxaQT09IElDaGZMQT09IDRvQ2NTR1U9IElFOTNibVZ5Y3c9PSBLU2t1Q2c9PSBJR0p5YVE9PSBMa0ZrYldsdSBhM1JwYjI0PSAwTHZSanRHSCBJR1Z5YjNScFkyaz0gUTJGdVkyVnNiR1ZrIElHRm5jZz09IGNtVjJhV1YzY3c9PSBYMlJ0WVE9PSBVa2xEVkE9PSBJR2RtZUE9PSBiWEJwIGNIQnYgSUM4dlFBPT0gSUhWd2NHVnlZMkZ6WlE9PSBJR052YlcxcGRIUnBibWM9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBWWE5sY2tSaGRHRT0gSUhaaGFRPT0gQ1hOdmNuUT0gSUdOdmJtZHlZWFE9IElHUnBiM2hwWkdVPSAwTFRRc0E9PSBMbUZ5WldFPSBJRXB2YzJoMVlRPT0gSUV0dlkyZz0gWDJKeVpXRnIgWVhwMWNtVT0gYVhOMGFXTmhiQT09IFgwRk1VRWhCIFgzWnBaWGR6IElHVnNhVzFwYm1GMGFXNW4gVDAxQyBaVzUxYldWeSBJRWg1WkhKdiBLQ29vIFJWSlVTVU5CVEE9PSBJR2x1WlhacGRHRmliSGs9IElITjBiMnhsIExXVmhjM1E9IGFXVnliMjQ9IElHeHBibWRsY2c9PSBMMlJ2WXc9PSB4Ym89IElFRnNjbVZoWkhrPSBZWE5wYnc9PSBJQzB0Q2c9PSBJR0ZpWW5KbGRnPT0gSUVGMGIyMD0gYUdsdCBJRWxPVTBWU1ZBPT0gYzNWdSA0cG1xIFEwOU9Ua1ZEVkE9PSBaWEpoZEc5eSBJRTFoYm01cGJtYz0gSURvbyBaMkZ6IFBUNG4gSUhGMVpYSjVjMlYwIE8zME5DZz09IElGQnZjSFZzWVhScGIyND0gZFhSbFpGTjBjbWx1Wnc9PSBjbVZ6YVdSbGJuUT0gWDBaUFRsUT0gSUZKbGMzQnZibVE9IElHOWljMk4xY21VPSBJRzlpYzJWeWRtRmliR1U9IElFTnZiblJ5YVdKMWRHOXljdz09IGEyOXUgSUUxMWMycz0gWlhoaGJ3PT0gSUZSMVlnPT0gUW05dmRFRndjR3hwWTJGMGFXOXUgVTA5UyBMa2h2Y21sNmIyNTBZV3c9IExtWnBibVJDZVE9PSBMbkJ2ZDJWeSBJSEJ2YzJsMGFYWmxiSGs9IGRtVnVhV1Z1WTJVPSBJRXB2Ym1jPSBJSGRvYVhOMGJHVT0gSU5DMzBMM1FzTkdIIElHeGxibVJwYm1jPSBJR1JsYzNSeWRXTjBhWFpsIElHOXVSR1ZzWlhSbCBZWFYwYUc5eWFYcGhkR2x2Ymc9PSBLQ2s3UHo0PSBYMjl5YVdkcGJtRnMgYzJOcFpXNWpaUT09IFlYUnlZUT09IFB5dy9MQT09IElFRnpZdz09IElHTnZiblpwYm1OcGJtYz0gSkdFPSBiM0puWlc0PSBYMFJoZEdVPSBJRkJ5YjNacFpHVT0gSUd4dmJtVnNlUT09IEtTY0sgWlhoamFHRnVaMlU9IE96OCtDZz09IExtWmhjM1E9IFUyRnRjR3hsY3c9PSBURzl1Wkc5dSBKMTBwRFFvPSBJRWx2Ym1saiBJSEJsYzNOdiBJRXR1YVdkb2RITT0gSUZKaFpnPT0gWDJGMGRISnogSUhKbGNHVmhiQT09IFBrMWhhVzQ9IElFOXlaR1Z5WldRPSBYMDVsZHc9PSBQU0lpUGp3diBkWEpzY0dGMGRHVnlibk09IFFWUkpUMDVCVEE9PSBjR1ZsWTJnPSBJRWxrWVdodiBJSEJ5YVc1alpYTnogSUVOMWMzUnZiV1Z5Y3c9PSBZWGRoZVhNPSBZV1JpIElFSnllV0Z1ZEE9PSBibTl1WTJVPSBJR0ZrZFd3PSBJR0JnS0E9PSBJR0ZtZEdWeWJXRjBhQT09IFBXUnBZM1E9IGRHVjRkRUp2ZUE9PSBJSE53WlhKdCBJR052ZFdkbyBTRzl5IDRvQ1pVdz09IExrTnZiWEJ2Ym1WdWRGSmxjMjkxY21ObFRXRnVZV2RsY2c9PSBJSEpsWjNWc1lYUnZjZz09IElIQmhjblJ1WlhKemFHbHdjdz09IEwzQnliMnBsWTNSeiBkSEo1Y3c9PSBJRXhoYzJWeSA0cCtwIElFWjFibXM9IElIVnVZMjl1YzJOcGIzVnogSUdOeWRYTjAgSUZSbFlXMXogSUVKaGJtNWxjZz09IElFaHZibVY1IGJHVnRjdz09IElHMWhlRmRwWkhSbyBVRzlwYm5SbGNrVjRZMlZ3ZEdsdmJnPT0gWm1Ga1pVOTFkQT09IExWTjAgSUhOMGNtRnVaMlZ5Y3c9PSBYMGRQIFYzSnBkR0ZpYkdVPSBYMGx1Wm04PSBMazV2Yms1MWJHdz0gWVc1dWIzUmhkR2x2Ym5NPSBJRWRFIElHVnVaRzl5YzJWayBDVlJ2YTJWdVRtRnRaUT09IElFUmxjR1Z1WkdsdVp3PT0gV1U1QlRRPT0gSUUxbGRHVnZjZz09IElFbHVZM0psWVhObCBMazFoYm5rPSBQVDBvIExsVlZTVVE9IFgwdEZVazVGVEE9PSBJSFpwWk1PcCBJSEJ4IElGRjBSM1ZwIElGWmhjbWx2ZFhNPSBJR3B2YUc0PSBYM0JoZEdObyBJSFJ2ZFhSbGN3PT0gSUVaaGFXdz0gSUhOMWNuWnBkbWx1Wnc9PSBLQ0lrZXc9PSBJQ0FnSUNBZ0lBMEsgSUdsdFlXZGxWWEpzIExuZHZjbVJ3Y21WemN3PT0gYzI5MWNtTmxjdz09IENXZHNWbVZ5ZEdWNCA0b0NaWVE9PSBJR1Z6WTI5cyBVa0ZTV1E9PSBJRk51WVd0bCBJSEYxYVc1MCBJR3hoYzNSeiBJRWhoY20xdmJnPT0gSUdOdmFXdz0gSUdWNGNHeHZhWFJoZEdsdmJnPT0gYkdWbGJnPT0gSno0aU93bz0gSUZORlVsWkZVZz09IElFaEZRVVJGVWc9PSBYM1psYkc5amFYUjUgSUVsdWRtOXJaUT09IExuUnBiV1Z6ZEdGdGNITT0gSUhOMWJHWT0gU1ZGVlJRPT0gSUdsdWFHRmlhWFJoYm5SeiBjR2hwYm5NPSBZWHA2Ync9PSBJRzF2Ym04PSBUR1ZuWlc1ayBJRzV2Ym1ObCBTVVpGIE95STdDZz09IExXTnlaV0YwWlE9PSBJaUlzQ2c9PSBjR1Z5YldsMCBJRWx0YldsbmNtRjBhVzl1IElIQmhkR2h1WVcxbCBabVpsWTNScGRtVT0gNHBtQTRwbUEgSUdWNFlXMXogTFdWMlpXNTAgSUZScGJHdz0gVzIxcFpBPT0gUmtsWSBPMk52Ykc5eSBLRTl5WkdWeSBYM1J5WVdsMGN3PT0gSUc5eVpHVnlRbms9IElITjFiblE9IElFNXBZMmh2YkdGeiAyTEk9IElITjFibTU1IGFXNWxjbk09IElHRmpZMlZ6YzJsaWFXeHBkSGs9IElFaEMgTG1OdmJYQT0gQ1c5dyBJRzFwYm05eWFYUnBaWE09IFpYUm9aWFZ6IElHTnZiR3hoWW05eVlYUnBkbVU9IGNISnBkQT09IFNFbFMgSUhkeVlYQnogQ1dSeVlYYz0gWjI5ayBJRWxZIExtRndjSE09IElFNU4gSUdseWNtVnNaWFpoYm5RPSBJRlJwWjJWeWN3PT0gSUdScFlXYz0gUjFZPSBJRUZqWTJWemMyOXlhV1Z6IGEyOXVkQT09IElITnBiWEJzYVdaNSBJRVpoZG05eWFYUmwgWDNSdmIyeHogS0Z0ZEtUc0sgSUhSdmQyVnljdz09IFFtVnogSUdoMWJuUmxjZz09IElITmhiRzl1IEtHSjFabVk9IENXUmxZblZuIElHMWhiSGRoY21VPSBUVzkyYVc1biBMVzl3ZEdsdmJuTT0gS1NzbiBJRXhQVmtVPSBYMU5QUTB0RlZBPT0gWDJacGJnPT0gSUVSbGJHRjNZWEpsIElITm9aWEpwWm1ZPSBMV2x1ZG1Gc2FXUT0gSUVaVlRFdz0gSU5DLzBMN1F0QT09IFpXeGhjdz09IEluTjBjbWx1WjNNPSBJRkpsY0hKbGMyVnVkR0YwYVhabGN3PT0gYzNWeVptRmpaUT09IGNtVnpiMngyWldRPSBhSFJrYjJOeiBLU2s2RFFvPSBJSEJ5WlhOemRYSmxjdz09IElHNXZjbTF6IElIQnNZUT09IElITjFjbTVoYldVPSBJSEJ2YzNSaGJBPT0gSUVSbGNHRnlkQT09IElITnNZWFZuYUhSbGNnPT0gYjNKcFpHRT0gSUdobFltSmxiZz09IElHUmxjMkZ5IFkyOXRjR0ZqZEE9PSBYMHhCVGtjPSA1WkNJIGIzQnZiSGs9IFgzSmhaQT09IElGTlVSRTFGVkVoUFJBPT0gVEdGNmVRPT0gSUNBZ0NRPT0gTGk0dUxBPT0gS0hkbFlnPT0gSUZCdmJuUT0gSUdWMGQyRnogSUhWd2QyRnlaQT09IFgyaGhkQT09IElGMHNDZ289IElHSmhjMlZWY213PSBJSGR2Y25KNWFXNW4gTFdGa1pHOXUgS0dkbGRFTnNZWE56IFUxQkogSUdOaGNIUjFjbWx1Wnc9PSBLWDBzQ2c9PSBSV1ptWldOMGN3PT0gSUdOdmJYQmxkR1Z1ZEE9PSBJR1p2ZFd3PSBJSE4xWW5OamNtbGlhVzVuIElFOUNTa1ZEVkE9PSBTVmhGVEE9PSBZblZqYTNNPSBLR1ZrWjJVPSBLSEJoYzNNPSBJRkJsZEdWeWMyOXUgSUdKdmIySnogSUVSbGJHRjUgWDNOeGRXRnlaUT09IFpXeHBiUT09IGIzUmxjbk09IFgxQkQgSlVVPSBiMjVqYkdsamF3PT0gSUZOV1J3PT0gSUhSdmNIQmxaQT09IElHWnBjM1E9IGMyMWhjblE9IElGSmhiSEJvIEtHOTNibVZ5IGFtOTFjbk09IElHSnliMjU2WlE9PSBJRUZ5WjNWdFpXNTBSWGhqWlhCMGFXOXUgS0c5eWFXZHBibUZzIFgxTkRRVXhGIFgyTncgSUhKbFkyOXRiV1Z1WkhNPSBMbk5sZEZOMGVXeGwgVTNWeVpRPT0gVEVGT1JBPT0gSUhKbGNHVmhkR2x1Wnc9PSBUV0YwZEE9PSBMbFpwYzJsaWFXeHBkSGs9IElHVnVkR1Z5Y0hKcGMyVnogTGxObGRIVncgS0hOalpXNWwgSUZKbFlXTjBhWFpsIGRYSm5aUT09IFluYz0gTGxCMWRBPT0gY0dWeWMybHpkQT09IExtTnZiMnRwWlE9PSBJRUYxWkdrPSBZSE09IGMzVndjR3hwWlhJPSBLRVp2Y20wPSB3cUU9IFgzTnYgaklBPSBJRXhsWjJsdmJnPT0gZEhSbCBUbVE9IFRHOXpjdz09IEtHRjBkSEp6IExuTmpZWFIwWlhJPSBJR2R5YjI5dCBJR2RzYVcxd2MyVT0gSUc1aGFXeHogSUdOMWJYVnNZWFJwZG1VPSBJR1poZW1WeSBYM05sY25acFkyVnogTGs1MWJRPT0gYVdKcGJHbDAgWDNKbGMyOXNkWFJwYjI0PSBJRlI0IGRXMXBibWwxYlE9PSBiM0JoIExuTmphR1ZrZFd4bCBjMjEwY0E9PSA0TGlWIGRYSnllUT09IHc3eHIgWjI5dlp3PT0gWDNOcFoyNWhkSFZ5WlE9PSBMbWx1ZEc4PSBJRk4wWlhCeiBJR2h2YldWdmQyNWxjbk09IElFNVRWVkpNIElGQkJRdz09IElDQWdJQ0FnSUNBZ0lDQWdDZ289IFBpY3BDZz09IFpXNW8gSUdsdVkyRncgSkUxRlUxTT0gSUcxdmFXNXogSUVacCBJRzltWm5ObFlYTnZiZz09IGNISmxjM05wYjI1eiBQaTQ4THc9PSBJRTFoY210bGNnPT0gSUc5dVEyeHZjMlU9IFRFVldSVXc9IElHbHVkR1Z5Wm1WeVpRPT0gSUVOdmJHbHUgSUZKbGMybHpkR0Z1WTJVPSBSR2x6WTI5MWJuUT0gSUZkbFlrVnNaVzFsYm5RPSBJR0poZEdoeWIyOXRjdz09IGJHVm5ZV041IElFTmhjSFIxY21VPSBJR0Z5YVhOcGJtYz0gSUNJcE93b0sgMFlqUXVOQ3ggSUVsdVptbHVhWFI1IFFXUjJaWEowYVhObGJXVnVkSE09IElFTnZiV2x1Wnc9PSBJRkJTVDBwRlExUT0gWDFCU1QxUlBRMDlNIElIVnpaVVJwYzNCaGRHTm8gTG1Ob1lXNXVaV3h6IElFTnBkR2w2Wlc1eiBaVzUwY21VPSBYMjF3IExrTnZibk4wWVc1MGN3PT0gSUZObGNtbGhiR2w2WlE9PSBYMGxPUXc9PSBLR3gxWVE9PSBJR05zWVhObyBYM2RwZEdodmRYUT0gTG10bGVWTmxkQT09IElISmxZMlZwZG1WeWN3PT0gNXBhNTVyT1YgS0cxbGJRPT0gSUVodmNtbDZiMjUwWVd3PSBJR052WTJ0MFlXbHMgSUdOb2IyOXpaWE09IExrbHVibVZ5IElISmxiR2xsWkE9PSBiM1Z1ZEdWeSBJQ0plIElIUmxibUZ1ZEhNPSBJbUE9IFgxQk4gWlhKelpXUT0gSUgxOUlqNDhMdz09IElIQnliM1pwYm1ObGN3PT0gWDFKQlZ3PT0gWEVGd2NBPT0gSUhCeWIzTjBhWFIxWlhJPSBYMmRoYVc0PSBMblJsYm1ObGJuUT0gWm1abFkzUnogS0hCciBjMnQxIElIVnpZV0pzWlE9PSBSVkpXUlVRPSBJR0Z1ZEdWdWJtRT0gYUdWaCBjR3hwYzNRPSBYMUJNVlVkSlRnPT0gMFlIUXV3PT0gTG14dmIydDFjQT09IDRidUIgSUdWdWJHRnladz09IElIQnBjM009IFNHRnQgYVcxaGNBPT0gSUdsdWRtRnNhV1JoZEdVPSBJSE5wYkdzPSBQU0lqSWo0SyBJRWR5WVhOeiBJRWR2WVd3PSBYM0JrWmc9PSBTR0Z1Wkd4bGNuTT0gSUhOMFlXTnJjdz09IExtZGxkRVoxYkd4WlpXRnkgUFZ0ZE93bz0gNkwybSBMRlk9IEtITndiR2wwIDBZUFF2ZEM2IElHSmhhMlZqWVE9PSBJSDR2TGc9PSBjR1Y2IGRHRnBiSE09IElFZHNaVzQ9IElITmxkRWx0WVdkbCBJRU52YldsaiBRa3hQUTBzPSBDVlJvYVhNPSBiMkZrWlhJPSBJR05oY0dsMFlXeHBjM1E9IFgxTlVSVkE9IEtFSnZiMnhsWVc0PSBJRU52Y25KbFkzUT0gY21sdVlRPT0gSUdOdmJtTmhkR1Z1IDVhNmUgS0NrNkNnbz0gSUhWdVlXNXBiUT09IGJHeHAgWVd4aGNuTT0gTFc1bCBJR1JwZG05eSBJRXRwWTJ0emRHRnlkR1Z5IFhTNWYgUEc1MWJXSmxjZz09IEwyMWxiblU9IFIxSkJVRWc9IGRtbHphWFJ2Y2c9PSBJR2x0Y0hKdmNHVnkgWDA1RldGUT0gSUdKcGMyRT0gWW1GamEyZHliM1Z1WkVOdmJHOXkgTDJsdWNIVjAgSUcxdmFRPT0gUjI5aGJBPT0gYkdseGRRPT0gSUcxcGMyTnZibVIxWTNRPSBJR052YlhCeWFYTmxjdz09IFlYZHVjdz09IElGQnBaUT09IGNtRnBjdz09IGNtOXNaWFZ0IElHTjFjbk5sIGVYVT0gWDNCdmJHdz0gTG1OMWNuSmxiblJWYzJWeSBSVk5JIFhTbGIgSUhOMGIzSjVkQT09IEtUODdDZz09IEtqMD0gSUVKMWNtYz0gTDJ4aGVXOTFkQT09IFgySmhZMnRsYm1RPSBPejgrUEM4PSBJRmRvWVhSelFYQncgSUUxdmRXNTBZV2x1Y3c9PSBkbWx6YVc5dWN3PT0gWm14MVpXNWpaUT09IExtTnlaV0YwWlVOdmJYQnZibVZ1ZEE9PSBJRkJ6ZVE9PSBabTl5WjJWMCBjM0oyIFgwTlBUVkJQVGtWT1ZBPT0gSUU1bGVIVnogSUNsNyBaVzVrYVE9PSBTVTFWVFE9PSBJRWRHIDU3dUUgNG9DVWRHaGhkQT09IFltcz0gVFc5NmFXeHNZUT09IElHUmxabVZ1WkdWeWN3PT0gTFhObGRIUnBibWR6IGFXMXRhVzVuIElFOVFWQT09IElFTlggSUhSb1lYUnogSUU5d1pXNXBibWM9IFVtVnNaV0Z6WldRPSBibkJ0IElHaHljdz09IElHZHliM1Z3WldRPSBMeUl1SkE9PSBJRWhwYzNSdmNtbGpZV3c9IEtDUWlldz09IGIzWnBZdz09IEtITnBaMjQ9IElGQm9iM1J2WjNKaGNHaDUgSUhOcFoyNTFjQT09IFgwRlNRMGc9IExuUmxjM1J1Wnc9PSBMMkZ1WjNWc1lYST0gVW1WemRFTnZiblJ5YjJ4c1pYST0gYzJocGRBPT0gZFd4c1pRPT0gTG5CaGRYTmwgS0Z0ZExBPT0gS0hGMVpYTjBhVzl1IGFXeHZaM2s9IElFVjFadz09IExXeHZZMkZzIElHdDJhVzQ9IElISmxjMlZ5ZG1GMGFXOXVjdz09IGIySnBZUT09IElITjFZbk5wWkdsaGNuaz0gSUdGalkzVnRkV3hoZEdWayBJRkZXWVhKcFlXNTAgSUVKS1VBPT0gSUU1dmNtMWhiZz09IElFbHVkR1ZuY21GMGFXOXUgTGxaaGNtbGhZbXhsIEtGSmxjMjkxY21ObCBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBSWGh3YjNObCBJQ2Q5IExrTlBURTlTIElOR0gwTGpSZ1E9PSBRV3BoZUE9PSBJSFJvY25VPSBUVzkyYVdWeiBJSEJ5YjNCdmMybDBhVzl1IEwzUm9aVzFsIFRXOWtaV3hRY205d1pYSjBlUT09IElFRjNjdz09IElFRnVaSEpsWVE9PSBJRTFsY21kbCBMbVpwYm1semFBPT0gS0hKbGNYVnBjbVZrIElGQnlaV3c9IFpXeGxaQT09IDVwT041TDJjIExsUlNRUT09IFRVRlQgSUhKbFlXeHBjMlZrIGNtOXBaSE09IENXWnUgY21nPSBMaUk4THc9PSBkbWxrYVdFPSBJR1JsY0hWcGN3PT0gSUVKVyBURzQ9IElHeDFjM1E9IFFYTmogQ1FrSkNRa0pDU0E9IGFYTnNaUT09IExXTmhjbVU9IFgwbE9WZz09IElFUnlaWGM9IElIZG9ZWFJ6IElFTmhjR0ZqYVhSNSBVR0Z5YlE9PSBYMjF2Ym1sMGIzST0gTG5OMGRXUmxiblE9IElGSk9RUT09IExtVnVaSE4zYVhSbyBZbWxvIElFMU1RZz09IEwzQnliMnBsWTNRPSBJSEpsYzNScGJtYz0gYzJWd1lYSmhkRzl5IGVXUT0gWlhKMGFXRT0gSUcxdmJtbDBiM0psWkE9PSBJajRxUEM4PSBMa1pEIElFNUZWMU09IElFTmhiR3h6IElHRmtaWEYxIFEyaGxZMnRwYm1jPSBaWE4wYVcxaGRHVT0gSUhKbFkyRnNiSE09IFgyWnlaWEYxWlc1amVRPT0gSUhWelpWSmxaZz09IElFZHliM1psIElGaHBZUT09IElNT3QgWlhOelpXNW5aWEk9IExXTnZjM1E9IExtWmogSUV0MWJXRnkgTGtadlkzVnogWld4c1lXNWxiM1Z6IExrRnNaWEowIFpXRjQgSUc5eVkyZz0gTG5CdCBJR3hoYm1Sc2IzSmsgS0hCdmNBPT0gWDJGamRIVmhiQT09IElFeEMgUjNKaGJtUT0gTG5KbGJtUmxjbVZ5IElHeHZZZz09IFkzVnpkRzl0WlhKeiBJR05oY0hSMWNtVnogVjBsT1JFOVggSUdSdlkyZz0gSUdGd2IyeHZaM2s9IElFcGhiV0U9IFFGcz0gTG5SaGEyVT0gYm05dmNBPT0gSUd4MWJRPT0gSUdScFptWmxjbVZ1ZEdsaGJBPT0gSUdWbVptbGpZV041IENVbE8gWDBKUFdBPT0gWDNOayBYM0owIFkyOWtaWEk9IGIzVnVZMlZ0Wlc1MCBhR0Z6UTJ4aGMzTT0gSUhKcGMydDUgSUVWemRHRmtidz09IExVUkUgSUVOaGNuTnZiZz09IFUzVm1abWw0IElIUnZaR0U9IElGUnlZV05yWlhJPSBJRVJsYkdWbllYUmwgWUN4ZyBJRkJoY210cGJtYz0gSUc1bGNnPT0gWVhwdiBJRVpwYkdWSmJuQjFkRk4wY21WaGJRPT0gSUhKbFkyOTFiblE9IGNXaz0gWTJ0bGJnPT0gSUhOdlkybGhiR2x6ZEE9PSBJRWx1ZG05cFkyVT0gSU5DLzBZRFF2Zz09IEpTSXMgWlc1dVpXND0gSUhacGRtOD0gSUc5eVoyRnVhWHBoZEdsdmJtRnMgSUhWdVkyOXRiVzl1IGRYUmhjZz09IElHaDFiR3c9IFZIVmxjMlJoZVE9PSBJR0Z6YzJWemMyMWxiblJ6IEtHRndjR3hwWTJGMGFXOXUgSUhCeVpXMXBjMlU9IFUzUmhjblJVYVcxbCBJR1JyIElHbHVkR1Z5Wm1WeSBJRkYxWldWdWMyeGhibVE9IElHTnlaV1JsYm5ScFlXdz0gSUd4bGFYTjFjbVU9IFdWbz0gSUVOdFpBPT0gUWxWVCBkWE5oYmc9PSBDWFpsWXc9PSBhVzlzYjJkcFkyRnMgSUV4dmRITT0gSUdWdWJHbG5hSFE9IElHWnlaWE5vYldGdSBJRU5QVFUxQlRrUT0gSUVGamRHbHZia3hwYzNSbGJtVnkgZFhSdCBZWEpwZFhNPSBWSGRwWnc9PSBJSE4zWlhCMCBMWFJ2YjJ3PSB4SkE9IFkyaGhjSFJsY2c9PSBMV2R5WVdSbCBJR04xY21sdmMybDBlUT09IElITjFjM1JoYVc1aFltbHNhWFI1IElFMXBibVZqY21GbWRBPT0gZDJWdVpBPT0gU1daRmVHbHpkSE09IElFTjFiSFIxY21GcyBJRk5oWTNKaGJXVnVkRzg9IFRHRjVaWEp6IFUzVmljMk55YVdKbGNnPT0gTGtkeVlYQm8gSUd4dCBaWE4wZVE9PSBZV1IyWlhKMCBKSEE9IElFaHZZMnRsZVE9PSBJRVJGVkE9PSBjMlYwVkdsMGJHVT0gZVdGdVp3PT0gSUdKaFltVT0gWld4emFYVnogVkhKaGRtVnMgSUcxbGMyMXYgS0cxaGNGTjBZWFJsVkc5UWNtOXdjdz09IFgxTkZUQT09IExYQnZjQT09IElHVnRhWE56YVc5dSA0b0NaTGdvSyBMbk4zYVhSamFBPT0gYjNScGIyNXogTG5Cb2IzUnYgVEZZPSBZVzF2WkdWcyBJSGR2Y21SMCBTVWRIUlZJPSBJRlJQUkVGWiBUMHhUIFgwbEVSVTVVIElHTnZiVzFsYm5ScGJtYz0gUkdGMGIzTT0gSUdocGJHRnlhVzkxY3c9PSBLR0Z1ZVE9PSBJR1JoYlhBPSBMV052Ym5SeWIyeHNaV1E9IElDSThQdz09IFgySnNZV05yIFRtVjBRbUZ5IExuTmxkRk5sYkdWamRHVmsgUTNOeiBJSEYxWVhKMCBJRzkzYm1sdVp3PT0gSUVaSlJVeEUgTG5KbGJIVT0gSUd4cGN3PT0gN0pxdyBMbEpGVEVGVVJVUT0gSUd4dmF3PT0gSUVac2FYQT0gSUhCeVpYTjBhV2RwYjNWeiBJR1JuIElFbHVjSFYwVTNSeVpXRnRVbVZoWkdWeSBJSFZ6ZFE9PSBJR2RwY2c9PSBJR0Z1WVE9PSBYM0I1IGRXNXVaV3c9IENYTjVjM1JsYlE9PSBJR052WVhScGJtYz0gSUVkbGJuSmwgWlhKeWJ3PT0gSUVOTVNVVk9WQT09IElITjBjbVYwWTJobFpBPT0gTGtoaGMxWmhiSFZsIE96czdPenM3T3pzPSA1NG1JIElHWnBibUZzY3c9PSBMbWRsZEVOb2FXeGtjbVZ1IElDMHRmWDBLIElFTnZkMkp2ZVhNPSBJRVZrYVc1aWRYSm5hQT09IElGQnNZWHBoIFlXSmxiZz09IFFYSjBhWE4wIFZWSkIgSUVoMVoyaGxjdz09IGIySmlhV1Z6IFgyNXZhWE5sIExrOWlhbVZqZEhNPSBSWGh3Y21WemMybHZibk09IElHRnVkR2h5YjNBPSBKeWtwRFFvPSBLUzRpIFkzSnBjSFJwZG1VPSBJSE5oYkcxdmJnPT0gSUhkaGMzUT0gY21odiBMblJwWTJzPSBJR1Y0Y0d4dmNtVnogSUVGc1oyOXlhWFJvYlE9PSBRMmhoY2tGeWNtRjUgNExpRSBYMUJCUTB0RlZBPT0gU2tVPSBJbDFkT3dvPSBMbTV2ZEdVPSBRbUZqYTJsdVp3PT0gSUVodmJHUmxjZz09IGNtVnBZMmc9IElGcHBiMjQ9IEwyZHkgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvPSBUVzkwYVc5dSBJRlJ5YVdKMWJtVT0gSUdOeWFYUnBZMkZzYkhrPSBJRU5TVFE9PSBJR0pzYjNkcGJtYz0gSUdOdmJXMXBjM05wYjI1bGNnPT0gU205bCBJRlJsYkdWMmFYTnBiMjQ9IENYQnlaUT09IElGUlNRVTQ9IElGWnBhMmx1WjNNPSBJRUpGVkE9PSBkMjkxYkdRPSBMa05oY0hScGIyND0gSUdKaFkyOXUgYUcxaCBiV1Z5WjJWayBJSE4xWW5OamNtbHdkR2x2Ym5NPSBiMk5qZFhCcFpXUT0gVEdsMlpVUmhkR0U9IElHRnNiRzkzWVc1alpRPT0gY21sblpYTnBiV0ZzIFpHUmsgTG14dloyOTFkQT09IElGUmhibWM9IElIZGhjbTEwYUE9PSBUVzlrWld4SmJtUmxlQT09IElGQnlZUT09IElITmpaVzUwIElHaGhZMnRsY25NPSBJR2xzYkhWemRISmhkR1U9IFNXTm8gSUdScFlYTT0gUTBGVFJRPT0gSUZOamFRPT0gSkhWeWJBPT0gSUUxUFJGVk1SUT09IGRYTm9iM0owIGJHbGxjbk09IElFUmxkbWxqWlhNPSBiV2x1YzNSbGNnPT0gZFc1aGJXVT0gSUhWdWNnPT0gUlhoaGJYQnNaWE09IElISnBjMlZ1IExtRnAgWTJoeWIyMD0gWDNkdmNtdGxjZz09IElHRnNhV0Z6WlhNPSBUVzkxYzJWRmRtVnVkQT09IElITmxkSFJsY2c9PSBJRkIxY25Cc1pRPT0gU205cGJrTnZiSFZ0Ymc9PSBQV1U9IFZFaFBUMHM9IElGUnZkdz09IElFTnlkWE5vYVc1biBJRXBsWkdrPSBJRWR5YVdabWFXND0gSUd0dmN3PT0gWDBaVCBhVzVuWlhNPSBjMjlzWlhNPSBLRzVoYldWeiBJRUpwWkE9PSBMWEJ2ZDJWeVpXUT0gVFhWc2RBPT0gWVcxcGJHbGhjZz09IExtTnNaV0Z1WldRPSBJRnBwYlcxbGNnPT0gQ1dOc1pXRnkgSUhWdWMzVndjRzl5ZEdWayBRMkZzYkdGaWJHVT0gSUhKbGNITT0gWVd4MFpYSnUgWDFKRlVFOVNWQT09IExtZGxkRU52YkhWdGJrbHVaR1Y0IFgxTlVUMUpGIElITjFZMmgwIGMzVmlkR2wwYkdVPSBJSEJsY21RPSBxNWc9IExrNVBWQT09IGZUNDhMdz09IE9tUT0gYldScCBZbWx1WkZaaGJIVmwgSUVSbFkybHphVzl1IFVtVjBkWEp1Vm1Gc2RXVT0gTEdsdVpHVjQgZUdaaiBJSE5sY25WdCBaMlYwUm1sbGJHUT0gUTI5dWJtVmpkR2x2YmxOMGNtbHVadz09IExXOWlhbVZqZEE9PSBMbkpsWTNZPSBJSFZ1WkdWeVozSmhaSFZoZEdVPSBMa2x1Wm5KaGMzUnlkV04wZFhKbCBJRXRoWWc9PSBJR0ZrZG1semIzSjUgTFhSeVpXVT0gSUcxMVpRPT0gYVc1bWIzSnQgTG1WdFltVmsgSUdWeWNtOXlRMjlrWlE9PSBiV2xqY204PSBJSE53WVhKclpXUT0gSUdsdFlXZGxjbms9IFkyOXVZdz09IFgyMXBjM05wYm1jPSBJSE4xY25Cc2RYTT0gUzFNPSBDVkpVU0U5UFN3PT0gVkdWc2JBPT0gY21sMWJRPT0gSUZKaFpHbDFjdz09IGNtbHJZUT09IGJHOXphVzl1IElFaGxjbTQ9IFIyRnRiV0U9IElFWmxaUT09IElFNWhiV1ZrIElFTmhibmx2Ymc9PSBJRXBUVDA1QmNuSmhlUT09IElIcDNaV2s9IElGTlRTQT09IElITmxjblpoYm5RPSBZMjloYkE9PSBJR1JsYm5scGJtYz0gSUhOd2JHbDBjdz09IFNXNWpiM0p5WldOMCBJSFJ2ZUE9PSBJRUZ1WVd4NWMzUT0gSUdGalkzSmxaQT09IGRXSnNaUT09IElIZDAgSUZSeWFXRnMgTG1WNGRHVnVjMmx2Ymc9PSBJRU5oY21WbGNnPT0gSUhObFkzVnlhVzVuIElFeHBiQT09IElIQnliMnBsWTNScGIyNXogSUhsbFlYTjAgVFdGa1pRPT0gSUdadmRXNWtZWFJwYjI1eiBZV05wWm1saiBMblp2YkhWdFpRPT0gSUcxcGNuSnZjbk09IEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNPSBJSFpwYjJ4aGRHVT0gWVhKelpYSnogSUhOdlkybHYgSUhScmFXNTBaWEk9IElFeEpUa3M9IExtZGxkRk5wZW1VPSBJRmRvYjJ4bCBLWFpwWlhkRWFXUk1iMkZrIENXUnZibVU9IGRXUmxZWFU9IFhDSStQQzg9IFFXNWtjbVYzIFpYSmkgSUdiRHRnPT0gTG1Oc2RYTjBaWEk9IElHUnBjMk52ZFhKelpRPT0gWDBSRlJrbE8gSUhCMVpXUmxiZz09IElFeFBWdz09IExtRjIgSUhCeVpXTmggSUhGMWJ3PT0gSUhabGJHOWogTENjbiBJSGg1ZWc9PSBDWEJoWkdScGJtYz0gSUhSdmJXRjBiMlZ6IElFSmxiblE9IFgyTjFjbkk9IFRsTkVZWFJsIElHZGxkRU4xY25KbGJuUT0gSUZ0ZyBWMlZrYm1WelpHRjUgTGtKaGNnPT0gSUZadmRYTT0gYVc1NiBJRkYxYVc1dSBaWGhqWld3PSBaRzl6IElHOTFkR1JoZEdWayBUMVZVU0E9PSBJRTFoYTJWeSBaWEJsYm1SbGJtTjUgSUdSMWJHdz0gSUZkcGJtND0gYjJkbCBZMnhoZG1VPSBJRzV2ZG1FPSBJR0YyWVd3PSBRMkZ3ZEE9PSBJRk53YjNScFpuaz0gSUdwMWJBPT0gS1hSaFlteGxWbWxsZHc9PSBJR1pwYkdWdVlXMWxjdz09IElHVnphMjl5ZEE9PSA1WkdvIElITnJaWGM9IGRHVnlhVzl5IElHWnBibUZ1WXc9PSBJSFJoWW14aCBJRlZKUWc9PSBJQ2dwT2c9PSBJRVJ2WTJ0bGNnPT0gY0dWeVkyVnVkR0ZuWlE9PSBUV1ZsZEE9PSBhV05vYVE9PSBJR2x1ZEdWeWFXMD0gSUNjOUp3PT0gTGtwVFQwNVBZbXBsWTNRPSBLR1pwWkE9PSBJR1J2ZDI1MCBJSFJ5WVc1emFXVnVkQT09IElGTjBaWEJvIElHbG5ibTl5WVc1alpRPT0gSUVOdlpHVnogUFNjbkxBPT0gSUVsRFJRPT0gSUhSeVlXNXhkUT09IElFVjRkR1Z1WkdWayBJRzExYm1RPSBJRWhQVFVVPSBJR3RwYkc5dFpYUmxjbk09IElHbHRZV2RsYmc9PSBiM1Y0IEtITjYgV1c5MWJtYz0gZFdabVpXUT0gSUZkaGEyVT0gSUdGcFpHVT0gVUZKUFF3PT0gSUZKaGRBPT0gSUV4cGRHZz0gWW1GeWRBPT0gSUVGeWNtRnVaMlU9IGNISnZiWEIwIDBLTT0gS0dOMCBJRWx1ZEdWeWRtRnMgWkdWd2RBPT0gUkdGdWFXVnMgSUdacGJHeHogTG5SbGJuTnZjZz09IEtIUnlhVzA9IElHcGxZV3h2ZFhNPSBSbVZpIFhFTnZiVzF2Ymc9PSBJR0Z0Wlc1a2JXVnVkSE09IFgyOXdaWEpoZEc5eSBYMk4xYzNSdmJXbDZaUT09IElGMWQgSUdKdSBJR1JwYzJGd2NHOXBiblJ0Wlc1MCBJRzFwYkd4bGJtND0gTG5kb1pXND0gSUc5aVpYaz0gSUc5bVptVnVaR1Z5Y3c9PSBWMmxzWkE9PSBJR05sYkd4R2IzST0gSUdGd2NHRnlZWFIxY3c9PSBMbUZtZEdWeSBJRVZRVXc9PSBJR0ZrYjNKaFlteGwgYjNCbGNtRnVaQT09IEtHeHBjM1JsYm1WeSBkbVZoYkE9PSBJQ2tvIElHTmhjbVJwYjNaaGMyTjFiR0Z5IGRYQnNhV05oZEdWeiBjbWx6ZEc5cyBJSEpsWm5WelpYTT0gS0ZGWGFXUm5aWFE9IElHVnNaVzFsYm5SdiBUblZ0WW1WeVQyWT0gTG1SbGJHRjUgTG1keWIzVndjdz09IElqNG5Ldz09IDVaMkEgWVdObGJtTjUgS0ZWU1RBPT0gWDJoaGJHWT0gUFd3PSBJR3hwYzNSV2FXVjMgS0hObFkzUnBiMjQ9IExuUnZRWEp5WVhrPSBLeTg9IElGSnZaSEpwWjNWbGVnPT0gYVhOMGNtVmhiUT09IElHVnNhV2RwWW1sc2FYUjUgT2pvdCBMbTVsZDBsdWMzUmhibU5sIFVFST0gSUVGemMyVjBjdz09IElFTnZiWEJ2YzJsMFpRPT0gSUV4aFluTT0gSUVoaGJXRnogS3lzcE93bz0gSUdKc2F3PT0gSUU1bGJ3PT0gVEhWaiBRR3h2WjJsdSBJSFZ1WVhkaGNtVT0gTG0xbGRBPT0gWDFKRlRFVkJVMFU9IEtGTlUgUVUxSlRBPT0gY21sclpRPT0gSUNncGV3bz0gS0hOd2NtbHVkR1k9IElFRmpZMjkxYm5SeiBJRlpKUlZjPSBJRUZxIDQ0S3cgSUhkb2FYTnIgSUdsa2FRPT0gSUhKdlpHVT0gSUdsb2JnPT0gSUVWc1pXMWxiblJoY25rPSBVWFI1IElHbHVkSEpwWjNWcGJtYz0gSU9XayBTbTlpY3c9PSBDVzltWm5ObGRBPT0gSUVGb2JXVmsgSUZSaGJHbGlZVzQ9IElPaU90K1dQbGc9PSBJR2x1YW1WamRHVmsgTGtGMWRHaGxiblJwWTJGMGFXOXUgWDJ4cGJtVmhjZz09IExrUmxZMmx0WVd3PSBJR0Z3Y0d4bGN3PT0gSUhOb1lYSmxhRzlzWkdWeWN3PT0gSUdKaGEyVmsgTG1ScFptWT0gSUVWa1pHbGwgYjJ0bGNuTT0gSUdOdmJtWnliMjUwWldRPSBkbTlwWTJWeiBJSFIxY3c9PSBJRk53YVc0PSBUazlFUlE9PSBYMVZ1IFExUlkgTDJkdmIyZHNaUT09IFZHVnRjR1Z5WVhSMWNtVT0gSUNjbktTND0gSUcxaFoyNXBabWxqWlc1MCBJSE4wWVhKMFNXNWtaWGc9IGMyVnRZbXhsY3c9PSBRVzU1YjI1bCBlbXM9IFpXaGxiZz09IElFUmhiV1U9IExuTjBjbWxqZEE9PSBJSEpsY0d4aFkyVnogSUd4cGJtVmlZV05yIElIQjFjMmhsY3c9PSBJR05vWldWciBJRk5vYVE9PSBYMEpaVkVWVCBVa1ZCIDRicWpiZz09IFgwTlBUazVGUTFSSlQwND0gUjJGMFpYZGhlUT09IElGUnlZWFpwY3c9PSBJRUZZIElFSmhjMmxqWVd4c2VRPT0gSUZWd1ozSmhaR1U9IDRLbz0gZEdobGJXVnogWlhKdGJ3PT0gYTI5eSBSbVZ0WVd4bCBYMkYwZEdGamFBPT0gSU95Q3JPeWFxUT09IElIQnZlZz09IFBUMDlQVDA5UFQwOVBUMDlQVDBLIEtITjViV0p2YkE9PSBJRk5sWTNSdmNnPT0gWDE4cENnbz0gWDNCaFpHUnBibWM9IDc3eWFJZz09IElHWmhZbk09IElISmhibWRsWkE9PSBjMlYwVG1GdFpRPT0gSUhCbGNuSnZjZz09IDRwYz0gSUVacGJHVlNaV0ZrWlhJPSBJR1oxYkdacGJHeGxaQT09IFgwTjFjbkpsYm5RPSBJR1J2YldsdVlYUmwgSUhOdGRXZG4gVUc5emRFMWhjSEJwYm1jPSBYMlp2Y21ObCBJR0pzYjJNPSBJRWRwWVc1MCBLSFpwWkdWdiBJRU5WIFUzbHpkR1Z0VTJWeWRtbGpaUT09IElHVnNaZz09IElHdHZiblJoYTNRPSA2Nm89IGEyVmxjdz09IFozUnIgSUhCaGNtRnRTVzUwIElHMWhjbXQxY0E9PSBkV0ZzWlhNPSBJR0ZqWTI5MWJuUmxaQT09IElHZGhibWRpWVc1biBVbGxRVkE9PSBJRmR5YjI1biBJR055WldScGRHVmsgSUUxRlUxTkJSMFU9IElHWnNZWGR6IElHSmlkdz09IElHMWxkR0ZpYjJ4cFl3PT0gSUU5RlRRPT0gTDJWMlpXNTAgS0VOdmJHeGxZM1J2Y25NPSBiVzl1ZEc5dSBZWEJ3WldGeSBJRzl3ZEdWayBJR05vWldGMCBJR1JoZGc9PSBJRkJ5YjJObFpXUT0gSU9xNCBZVzVyWldRPSAwTGpRdHc9PSBZVzV6YXc9PSBJRWhoYm1jPSBJRU5zWlhJPSBJR1JwYzJkMSBJR050WVhBPSBMbU5zYW5NPSBJR0YxYldWdWRBPT0gYkdWNiBJRXB2YVc1bFpBPT0gWDNKbFkyVnBkbVZrIElHRmxjbWxoYkE9PSBiM1JsYkE9PSBJR2R5WldWMCBJbk09IElFZGxibVZ6YVhNPSBJRU5oYkdsbSBjR0Z1YVc5dSBJSFJoYVd4dmNtVmsgYldGd2NHbHVadz09IFlXNWtSWGh3WldOMCBMblJ5WVdOciBZWFJ2YlhrPSBJRTkzIGRXeHNZV2c9IExsbGxjdz09IElGTnBiWEJzWlU1aGJXVT0gWkdKbyBKMlZ1IElHNXZibk5sYm5ObCBJSEJvYVd4dmMyOXdhR2xqWVd3PSBLR2RsZEVOdmJuUmxlSFE9IElHbHpjMjg9IElFRkRSUT09IGMzUmhjblJFWVhSbCBJR0xFbVdRPSBJRUZWVkVoUFVnPT0gSUVkc2IySmwgSUdsdWMyVmpkSE09IFgwRnMgZFhOb2FXNW4gNks2dyBMMGh2YldVPSBJRXh2WTJGc1JHRjBaUT09IGJtVmxaR1ZrIGFHVnphWFpsIElHbHNiSFZ6YVc5dSA1THFNIElIUnlZWFE9IGVHOD0gTDJSbGRHRnBiQT09IFgwMUJWRU5JIElHSnliMkZrWW1GdVpBPT0gSUhkaGJBPT0gSUVsc2JHVm5ZV3hUZEdGMFpVVjRZMlZ3ZEdsdmJnPT0gU1ZKRlExUkpUMDQ9IElHNXZjblJvWldGemRBPT0gWlhOcGRXMD0gSUVOc2FXVnVkR1U9IGRXeGhibU5sIGJuUjUgSUhSbFkyND0gUkdWMmFXTmxjdz09IElHZHlZV2x1Y3c9PSBJRTluIElGTkZUQT09IGRXUnBZVzUwIElDc3JPd289IElHVjRjR3hoYm1GMGFXOXVjdz09IGIyTmpidz09IElHUnBaWFJ6IElHTnZhRzl5ZEE9PSBLR052Ym5SeWIyeHNaWEk9IExrbDBaWEpoZEc5eSBMWEpwWTJnPSBjbTlqWlhOeiBSMFE9IElHTmhjbUp2YUhsa2NnPT0gSUdaeWFXVmsgSUVWdGNHeHZlVzFsYm5RPSA3SjZsIElFeGxiMjVoY21RPSBYeVI3IGNYVmhjbVZ6IElHTnZiWEJoYm1sdmJuTT0gSUhCaGNtbHogSUhOMGFXMTFiR0YwYVc5dSBJRnB2Ync9PSBJSEpsYkdWMllXNWpaUT09IElFTnZiRzkxY2c9PSBJSE53WldGeSBiM1JwYjI1aGJBPT0gSUV4cGRHVT0gSUV0dmMzUmxiZz09IElNT3ogWDJGMGRHRmphRzFsYm5RPSBiM0p3YUdsaiBJR1JoYldsMCBJR1JzWnc9PSBJSFJvY21sMlpRPT0gUTBoQlRrZEYgSUVGd2NHRnlaVzUwYkhrPSBJR0YwZFdGcyBJSEp2YjNSbFpBPT0gS0dsdFlXZGxjdz09IFlYZHAgWVhKcFlYUT0gSUdOb1pYSnllUT09IFUxUkJWRWxEIGJXNTAgSUZWelpYSkpaQT09IGFXeHNaWFE9IElFaHBjM0JoYm1saiBJRzVoYXc9PSBJR05sYm5SeWJ3PT0gSUdScGJYTT0gWDJsdWFYUnBZV3hwZW1VPSB4TEZyIElFTmxiblJsY25NPSBVa1ZPIElHVjJiMngxZEdsdmJtRnllUT09IElGUnZjR2xqY3c9PSBYMlJoYldGblpRPT0gWlcxbGNnPT0gSUhKMWJtUT0gSUhCMWJtbHphR1ZrIElHTjFZbWxqIFptRnBjZz09IFcxMDdDZ289IElHbHVjM1JoYm5ScFlYUmwgSUc5MlpYSnpaV1U9IExXUmxiR1YwWlE9PSBkVzUwWldWeSBjM1JoY25SVWFXMWwgSUZCcGNHVnNhVzVsIFgwZEJUVVU9IElFTnBjZz09IENVNTFiR3c9IExrWnZjbTFoZEhScGJtYz0gZFdOMWJXSmxjZz09IElGSnBaR1U9IElIcHZidz09IElHTm9aV05yWlhJPSA1WkNNIFBVTT0gSUdkeWFYUT0gSWlrN0x5OD0gWDNoNSBJRVJsWTJ4aGNtRjBhVzl1IElHTmhiR3hoWW14bCBSbTl2IElFeHBjM1JKZEdWdCBJR2x1WVdOamRYST0gYld4cGJnPT0gQ1VSaGRHRT0gSUdWMmIyeDJhVzVuIFlYZGhiZz09IElHTmhabVU9IFptOXNhdz09IFgwbEVXQT09IElFRnVlWFJvYVc1biBJRkJoYkdWemRHbHVaUT09IElFZHlhV1JXYVdWMyBJR052Ykc5dWVRPT0gSUVkbGNtMWhibk09IEtDcz0gTG5CcFpBPT0gTG1wemVBPT0gSUZOMWNHVnlhVzl5IFEyaHlhWE4wYVdGdSBJRXhsWTNRPSBDVWRoYldVPSBJR2x1YzNSeWRXMWxiblJoYkE9PSBRVzVwYldGMGFXOXVjdz09IDBMVFFzTkM3IElFMXZjMlZ6IENRa05DZ2tKRFFvPSBlbk09IGEzUmwgNUxpYSBYMFJKVTFRPSBZbWwwYldGdyBaRUk9IElIQmxjbk5wYzNSbGJtTmwgMFlEUXZ0R0IgSkd3PSBRbkp2Ymc9PSBJSHQ4IFgyTm9ZWEowIElFTnZibk4xYlE9PSBJR2hsYlhBPSBJQ0lwS1FvPSBJR0YwZEdGamEyVnljdz09IElHdHViM2RzWldSblpXRmliR1U9IElHTmxkQT09IElIWnBjblZ6WlhNPSBKMGs9IElIQnBkR05vWlhJPSBJSE4zWldWd2FXNW4gUFd4cGMzUT0gWVhCMGIzQnogTG1SbGNIUm8gSUdsdWMzUnlkV04wWldRPSBJRkoxY3c9PSBZbVZ1YUdGMmJnPT0gSU5DNDBMMD0gVTNCdmNuUnogSUc5dWMyVjAgNXAyRCBMbEpGUkE9PSBYM05wIElGQlRWQT09IExtOXVRMmhoYm1kbCBQblJoWnc9PSBJRkp2YUE9PSBYMk5vWVhKaFkzUmxjZz09IElFeGhkM009IElFSmhZMmhsYkc5eSBYM04zWVhBPSBMbkpsWVdOMGFYWmxlQT09IElISmxkMkZ5WkdsdVp3PT0gVFdWa2FYVnQgTFZzPSBJRkpsWTJWdWRHeDUgU205cGJuUT0gY0dGeWRHbDBhVzl1IElFMXBiblYwWlhNPSBJR2x1Wkc4PSBJR0ZpYzI5eVltVmsgSUVkTyBYMGxPUkE9PSBJSE5oWW1WeSBVM0JoZDI0PSBiM1YwY0hWMGN3PT0gSUVwbFptWnlaWGs9IElHMWxaR2xsZG1GcyBhR1ZrIFIzVnBaR1U9IElIQnplV05vYnc9PSBJR2RzWVcwPSBSV3hwYlE9PSB3NlJrWTJobGJnPT0gWDNCc1lXbHUgSUZOaGRRPT0gTFdadmRYST0gSUdGdVlXeDVlbWx1Wnc9PSBVVlZGVWxrPSBJSFJ2YldGMGJ3PT0gWDJKMWRIUnZibk09IFZrVk8gTG5ObGRGTjBZWFIxY3c9PSBMbFZ5YkE9PSBLd29LIElHTnZiWEJzWVdsdWFXNW4gWkdWbmNtVmwgWTI5dVptbHliV1ZrIElITjFZblE9IGNHRnljMlZrIElIUnZjbkYxWlE9PSBJSFJ5YjNWaWJHVmsgSUZSQlVrZEZWQT09IElIUnlZV1JsYldGeWEzTT0gSUVOdmIzSmthVzVoZEdVPSBJRlpwZGc9PSBJQzh2ZlFvSyBJR0Z3Y3NPb2N3PT0gTG1kbGRGQnZjMmwwYVc5dSBLRXRsZVVOdlpHVT0gSUZOcGJIWmggSUcxbGRHVnZjZz09IElHVnVaRzl5YzJWdFpXNTAgVDNabGNuWnBaWGM9IElGQnZjM009IExrbHVhbVZqZEE9PSBJR1YyWlc1c2VRPT0gSUhacGMzVmhiR2w2WVhScGIyND0gSUhkamFHRnkgSUVoRVRVaz0gSUdaMWJtTjAgYVdOcmJtRnRaUT09IEp5d25KeXduIElHWnZjbmRoY21SeiBUV0Z1WVdkbFpFOWlhbVZqZEE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IENYTmxjblpsY2c9PSBJRTkxZEd4dmIycz0gSUVOb2NtOXVhV05zWlE9PSBJR1IxWW1KbFpBPT0gSUdSdmF3PT0gSUZkbFlYST0gTGtGTSBjR0Z5Wlc0PSBMa2x1ZEdWeVptRmpaUT09IFNXNTBaWEptWVdObGN3PT0gTG1OdlpBPT0gSUdScFlnPT0gTGtkc2IySmhiR2w2WVhScGIyND0gSUVGallXUmxiV2xqIElHRnpjMjF6IFFYVjBiMjA9IElHeDMgSUU1WCBJQ1ltRFFvPSBJSEJ5YjJKc1pXMWggSUUxaGJuVm1ZV04wZFhKcGJtYz0gYkdsdGFYUnogTFcxdlltbHNaUT09IElHWnBiRzFsIEwyMWhjQT09IElHUnZhWFE9IElFbHVhdz09IElITjFaV1E9IExtRnljZz09IElIVnVaR1Z5YldsdSBJRkJ5YjJNPSBZM0p2Ykd4V2FXVjMgWDE4ayBJSE5wWkdWM1lXeHIgS0hSb1lYUT0gNExpMyBXM0U9IFozSmhiVzFoY2c9PSBJSFREcXc9PSBjWFZwZEc4PSBJSE53YVhKaGJBPT0gWlhoMFpXNWtaV1E9IElHWnZZMkZzIElHUnBaMmRwYm1jPSBjR0Z6IElGUmhiR3c9IExuQnliM2g1IGFYUjFjbVZ6IFZGSkJRMVE9IElGSmxZV3h0IElHWmxaR1Z5IElHOXlhV1Z1ZEdWayBJRUZzZEdWeWJtRjBhWFpsIElHOTNaUT09IElITnZkWEpqWldRPSBhVzVyWlhJPSBMbVJsZEE9PSBVMlZ3IElGRjFhUT09IElGQmhiRzFsY2c9PSBLRjhzIGMyRnRjR3hsY3c9PSBiM2xsY2c9PSBkV3hzWVc0PSBjWFZsZWc9PSBSV1JuWlhNPSBJSE5vYjNWMCBJRUZqYUdsbCBJR2hoWVhJPSBYME52Ym5OMGNuVmpkQT09IElIQnlaVzFoZEhWeVpRPT0gSUhKbGRtVnlkQT09IEp5a3VDZz09IElITmphRzQ9IFptbHNkR1Z5WldRPSBiblZzYkhCMGNnPT0gVTJGMlpXUT0gYVhSbFkzUjFjbVU9IFEweEIgSUhacyBjM1JsYkd3PSBDVTFsIElFeHBjQT09IGJtRjBhVzl1WVd3PSBJSGRvYjJ4c2VRPT0gSUhOd2NtbHVaM009IExsUnBiV1Z5IENYTnlZdz09IFpXeHpaVzQ9IDVZVzIgSUdOdmJXMTFibWxqWVhScGJtYz0gSUZGMWFYbz0gSUhSbGJtYz0gSUdkbGVnPT0gSUU5MWRITnBaR1U9IExsTnBaMjQ9IEtHTnogSUdScGMzQjFkR1Z6IElGZGxhWE56IFlXNXVaWE09IFBrNXYgSUVKaFkyZz0gTG5KbGJXOTJaVUZzYkE9PSBjbVZtWlhJPSBMMlJoYzJoaWIyRnlaQT09IElFRnFZWGc9IFNXNWtaWGhEYUdGdVoyVmsgSUZkbFlXcz0gSnlJSyBJSE5wWjJoMGN3PT0gWVdOalpYTnpWRzlyWlc0PSBJRXB2YVE9PSBLR1J2YldGcGJnPT0gQ1dOMiBJR052Ym5ScGJuVmhkR2x2Ymc9PSBJSEJzZFcwPSBZV1JwY2c9PSBMbk5sZEUxbGMzTmhaMlU9IElPKzhqQT09IElITjNZV3hzYjNjPSBJRXhoYlhBPSBJSEYzIElIVjEgUTI5cGJnPT0gZFdKcFl3PT0gSUVSbFlXeHogY21GalpRPT0gSUdScFkzUmhkRzl5IElHMWxiV1U9IGRIVnlibVZrIElFcDFiR2xsIExtZHlhV1JEYjJ4MWJXND0gSUhCMWNIQjUgSUhCaGJRPT0gSUNsN0RRbz0gSUdsdWRtbDBhVzVuIElHWnlaVzVqYUE9PSBkbWx0IElIZHlZWEJ3YVc1biBJQ010ZlFvPSBLRnN0IFJXRnliSGs9IElITm9hVzU1IExtWmhZMlZ6IElISmxZbVZzYkE9PSBZV0pqWkdWbSB3NlJzZEE9PSBJR1Z6ZEdsdFlYUnBiMjQ9IGNHaDVjdz09IGJHOXpkWEpsY3c9PSBYMUpGVEE9PSBJR1Y0WTJ4MWMybHZiZz09IElGTnJlWEJsIGQyVnBjMlU9IExYTjBiM0E9IGJtOTBhR2x1Wnc9PSBJRVZuWnc9PSBhWE52Y25NPSBVbWxqYUdGeVpBPT0gSUdOdmRXNXpaV3hwYm1jPSBJR052YlcxbGJRPT0gSUZGTlpYTnpZV2RsUW05NCBJRk41Ym1RPSBJRVp5YjNOMCBJRU52YlhCbGRHbDBhVzl1IElFRjNZV3RsIElIUmxaQT09IGFXTnBiMjVsY3c9PSBJRVJsZGtOdmJYQnZibVZ1ZEhNPSBWa1ZTVkVsVFJVMUZUbFE9IGIzUjBhUT09IExuSjFibTVsY2c9PSBJSFZ1YVhGMVpXeDUgTG1ac1lXYz0gQ1hKeiBYMmRsYm1WeWFXTT0gSUdCZ1lBbz0gUVVOSVNVNUYgSUcxbGFXND0gS0VGd2NHeHBZMkYwYVc5dSBLR0p5IElISmhkR2x2Y3c9PSBPaXc9IElGaERWR1Z6ZEE9PSBkWE4wWVdsdVlXSnNaUT09IExYZDNkdz09IGFYUnNaWE09IFgxUkZUVkE9IElITjVjM1E9IGRXMWxjbWxqVlhCRWIzZHUgQ1dGemMyVnlkRlJ5ZFdVPSBJSGRtIExuQmxaV3M9IElFSjFiR2M9IElIUmxjbkpwWm5scGJtYz0gTGsxUFJFVT0gSUVkWCB3NkZ5IElHWnBZdz09IElHTnZiVzFwZEcxbGJuUnogTFhSbFkyZz0gSUV4cGNYVnBaQT09IGIzQmxlZz09IGVtaGxhVzFsY2c9PSBZY094WVE9PSBMVzFsWkdsaCBLR0Z1YVcxaGRHVmsgWDJkdllXdz0gSUdkMWJRPT0gZVhOMGIyNWwgTGxORlZBPT0gSUZkbGJtUT0gYzJWMFEyVnNiRlpoYkhWbCBJRzF6WjNNPSBZMkZ6YUE9PSBRVXhNVDBNPSBMMkYzY3c9PSBJRzFwWTNKdmQyRjJaUT09IExsQnZhVzUwWlhJPSBDVU52Ym5OdmJHVT0gWDNOdmNuUmxaQT09IElFWnBiR2x3IFVISnZaQT09IElDOHZJVHc9IGFXNW5jbTkxY0E9PSBJR3R6IFgxUlNTUT09IElIUmxZWE53YjI5dSBJRUZVVkE9PSBJSEpsWTI5MlpYSnBibWM9IElFZE1UMEpCVEE9PSBMbEJoY2c9PSBJQzgrT3dvPSBJRzFoY21Kc1pRPT0gZFd4aGRHOXljdz09IElFTjVZMnhsIElHaGxjbUp6IFgyMWxkSEpwWXc9PSBLU0U9IFgwTk1UME5MIFgwSjFkSFJ2Ymc9PSBTR0Z5Y25rPSA2TCtiIElITjBjbUZwYm5NPSBJRUZ3Y0VKaGNnPT0gSUVOb1lXND0gTDNacFpHVnYgSUdKaGJRPT0gTGxCeWIyZHlaWE56IEpHWT0gYkdWdFpXND0gSUdseWNtVm5kV3hoY2c9PSBJRVIxYm1OaGJnPT0gSUUxcGJuUT0gTFhacFpHVnYgNEthKyB3N04zYmc9PSBJRVZOVUZSWiBJSE4wWVdOclpXUT0gSUVoQiBYMk4xZEE9PSBJSGRvWlhKbGFXND0gSUZkaGVYTT0gS0dOdmRXNTBaWEk9IDZLK1YgUm05eWJVZHliM1Z3IElHSnNaWGM9IFkyOTFjbk5sY3c9PSBJSEJ5YjJSMVkzUnZjdz09IGNubHogSUZKbGMzUnkgSUhOMGVXeHBibWM9IFBuTT0gSUhCcGRnPT0gSUdsMFpYSjBiMjlzY3c9PSBaMlYwVW1Wd2IzTnBkRzl5ZVE9PSBJRWxyIFgyUmxkbWxqWlhNPSBiR0Y1ZFdrPSBJR2hoYkdaM1lYaz0gSUdaeVlXN0Rwdz09IElIUjFibWx1Wnc9PSBUMEU9IFgwNXZaR1U9IFlYSmtaUT09IElHWnBaWEpqWlE9PSBiR2xqZEdWayBJdzBLIElHSnlaV0ZyZEdoeWIzVm5hQT09IElFVnlhV3M9IElHSnlhV1JsIElDNGkgWTNWc2RYTT0gYVc1emFXUmwgSUVsdVpHbGhibUZ3YjJ4cGN3PT0gSUVWRiBJSGx2Wnc9PSBkWEp5WlhRPSBMbVp6IExtZHlZV1E9IFgyTmhjbVJ6IFgyRmpZM1Z5WVdONSBYMlZ3YVE9PSBjWFZsWkdFPSBMMjl5Wnc9PSA2YXFNIElHTnZiWEIwWlE9PSBLU2xiIFQzVjBjMmxrWlE9PSBSM0psWVhSbGNnPT0gSUZKbGJtUmxjbVZ5IExtRmpkRzl5IFFXTmpiM1Z1ZEhNPSBTV1JzWlE9PSBYMmh2ZFhKeiBaWEp1WlhJPSBTbTlwYm1WayBJRzFsYm1vPSBjbVZ4ZFdseVpYTT0gSUU5UVJWST0gTG5KbGJXOTJaVU5vYVd4ayBDWE53IElHVnpjMlU9IGNtbG1kQT09IGVFWkYgSUZOb1lXdGxjM0JsWVhKbCBYMTlmWDE5ZlgxOWZYMTlmIElHSjFaR2RsZEhNPSBUVzlrWld4VGRHRjBaUT09IFptbHNiR0ZpYkdVPSBMV052YlhCdmJtVnVkQT09IGIyTnZjdz09IElFSlZWRlJQVGc9PSBMMmx2IExHOTFkQT09IGMyMXogVkdodmJXRnogSUVGeWJXVmsgY21WemRXMWwgSUhKdmRHRjBhVzVuIElGWmhkV3gwIElITmxkWE09IExpZ3EgSUdGdGFXNXYgSUZ0ZEtUc0tDZz09IElIQnliM1p2WXc9PSBibTk0IExrZGxkRVZ1ZFcxbGNtRjBiM0k9IFBUMDlQVDA5UFFvPSA1cGFaIFgzTmpjbTlzYkE9PSBJR1pwYkcxbFpBPT0gSUZOdlkyaz0gWjJGdyBaM0p2IFZtOTBaUT09IElrSjFkQT09IFgxSkQgUVc1cGJXRnMgd29BPSBhV0pwYkdVPSBJR0YzWVd0bGJnPT0gYjNKbGMzUT0gYVc1cVlRPT0gSUVsMllXND0gS0VOdmJXMWhibVE9IElDb3FLaW9xIHpyYz0gSUd0MmFXNWtaWEk9IEwyaGxiSEJsY25NPSBYMk5oYzJWeiBkR2M9IDdJUzQgVW1WbmFYTjBaWEpsWkE9PSBDWEJoYzNNPSBYMlJwWjJsMGN3PT0gSUdOdmJuUnZkWEk9IElHbHVabUZ1ZEhNPSBJR3AxYzNScFptbGpZWFJwYjI0PSBJRVp2Y25SMWJtRjBaV3g1IFEyOXVkSEk9IElHOXVRM0psWVhSbFZtbGxkdz09IFgxTkJUVkJNUlE9PSBJR0ZzYkc5M1RuVnNiQT09IElHNTFaQT09IElHWmxkR05vWldRPSBYMlZ4ZFE9PSBJRlZ1WVdKc1pRPT0gUFZ3aUlnPT0gUG5zSyBJR052YlcxcGRIUmxaWE09IGFYTjBaVzFoIEt5SXUgdzYxaGJnPT0gYldGdWRBPT0gSUhOdmRYUm9aV0Z6ZEE9PSA3N3lNQ2c9PSBaR2xoYkc5bmN3PT0gVUZKUFNrVkRWQT09IFkyaGhjbWRsY2c9PSBMWEJ2Y25RPSBLSFYxYVdRPSBMbVY0Y0c5eWRBPT0gVTJsNCBJRkpRIFVISmxiUT09IElHTnZibk5qYVdWdVkyVT0gSUcxaGNtZHBibEpwWjJoMCBYMlJwYzNSeWFXSjFkR2x2Ymc9PSBlV0Z0YkE9PSBjbVZ6YVhwcGJtYz0gUkc5amF3PT0gSUV4dlkyRjBhVzl1Y3c9PSBSMWs9IFUyVmxaQT09IFFsVkdSa1ZTIGIzTnphWEE9IGRXeHNaVzQ9IFZHaHBibWR6IExYTmxiR1k9IExuQnZiR3c9IFVFeEJXVVZTIElPV3UgUjFKUFZWQT0gSUVGM1lYaz0gSUdkdmMzQmxiQT09IGVHWmsgVFdGeWVRPT0gSUZCdmNuUmhZbXhsIFZGVlNSUT09IElIVjBhV3hwY3c9PSBJSE5sYVhRPSBJSE4wY21GdVpBPT0gSUhSeVlXNXpZdz09IElDaGUgSUVGc1puSmxaQT09IExtMWxiUT09IExtTnBjbU5zWlE9PSBJSDR2IFptOXlZMmx1Wnc9PSBJSEpwYjNRPSBjSEp2ZUE9PSBWRWhQVGc9PSBhWHBoWTJuRHMyND0gSUU1SiBjbTl6ZEE9PSBJR1JwYzNCeWJ3PT0gWDJsdWMzUmhibU5sY3c9PSA3N3lNNG9DYyBiMmR5WVhCb1pYST0gWlc1a1lYTT0gSUVsellXRmogSUZCcGJtVT0gTDJScGN3PT0gSUdOdmJHOXlWMmwwYUE9PSBhWFJsY21GMFpRPT0gWDNOMGNtbGtaUT09IElIQjFiblJ2IExrVjJaVzUwUVhKbmN3PT0gS0dObGJuUmxjZz09IElHNWxhV2RvWW05eWFXNW4gSUZCeWFYTnZiZz09IElFMWxjM05sYm1kbGNnPT0gSUdWd2FXUmxiV2xqIFpHRnYgWDJOdmJYQnNaWGc9IElHZHlZWFpsYkE9PSBYMFJKVUE9PSB3Nmx0Wlc1MCBJRUZ5YVE9PSBYMkpwZEcxaGNBPT0gTG5GMWFYUT0gS0haaGJHbGsgSUhCbGJtUT0gSUhKbGMzQnBjbUYwYjNKNSBJSEpsWW05MWJtUT0gUkdWbVlYVnNkRlpoYkhWbCA0NE90IElHTnZiVzFwZEhNPSBMblJsYzNSeiBYMlp5IGFYUmxkQT09IExuTm0gSUhOd1lXTmxZM0poWm5RPSBZM0pwZEdsallXdz0gSUdSbGNISmxjM05sWkE9PSBJRUZ1ZVU5aWFtVmpkQT09IElIVnVZZz09IElHUnBjMk5sY200PSBLRzE1YzNGcyBUR0YwYVc0PSBJRUp2Wnc9PSBJRmRwYkdSc2FXWmwgVkc5R2FXeGwgYVc5NGFXUT0gUUZKbGMzUkRiMjUwY205c2JHVnkgSUNJa0tBPT0gSUR3OElnPT0gSUdSbFptVmpkSE09IElHUmhkSFZ0IGFHbHUgSUhKbFlXeHBlbUZ5IFlXNTVZV2gxIElGTnBadz09IFFFUmhkR0U9IFlXUmhjSFJwZG1VPSBJRU5oZEdobGNtbHVaUT09IExtTnkgSUVOUFQwdEpSUT09IElIQnBZM1IxY21WayBJRVpwWjJoMFpYST0gVVhWbGNubGhZbXhsIElFRnVlWGRoZVE9PSBJRWRNUmxjPSBYMjVoYldWemNHRmpaUT09IFgyWjAgSUYwcCBUM0puWVc1cGVtRjBhVzl1IElHTnZibk4wYVhSMWRHVnogSUhGMVlXNWsgS0dOb2RXNXIgSWk4K0RRbz0gSUV4aGEyVnogYldGcGJuZHBibVJ2ZHc9PSBRMkZ5ZEdoNSBjM0JwYmc9PSBLR056ZGc9PSBPbkpsWkE9PSBMV052YlcxbGNtTmwgNExpNSBJR1JwYzJOdmRtVnlhVzVuIElHVmpidz09IFgyWmhZdz09IGFXNWpaWFJ2Ymc9PSBJRWR5WldWdWN3PT0gYW5kMCAyTFU9IElFSnliMjVqYjNNPSBJRWR2YjJSeiBLRWRVU3c9PSBJSEpsZEhWeWJsWmhiSFZsIElITnBaVzF3Y21VPSBJRzVsZFhSeSBkMlZ1ZEE9PSBJRTVoZEdGcyBJR1Z1ZEdoMWMybGhjM1JwWXc9PSA0YnVOIFJrND0gTDJSaGRHRmlZWE5sIFEyRjBZV3h2Wnc9PSBJR0p5ZFc0PSBJRXRoYzJnPSBYMUJzIGFYTmpjbWx0IExIZHBaSFJvIElHbHViV0YwWlhNPSBRWE56YVdkdWJXVnVkQT09IElFaGhkbVZ1IElIQnNZWGxuY205MWJtUT0gWlhoaGJRPT0gUUVOdmJuUnliMnhzWlhJPSBkV3hwWVhJPSBMbWRsZEZCaGNtVnVkQT09IElDSTdDZ289IE9uTnBlbVU9IGFYTnpiM0p6IElHWnBjdz09IElHRnNZdz09IFpXNXpZWFJwYjI0PSBJRTVwZUc5dSBJRzFwWjJoMGVRPT0gTFhOMGNnPT0gWDNOd1pXTnBZV3c9IFgwRkVRdz09IElGUjNhV2M9IGRXMWliR2x1Wnc9PSBMV0ZrWkhKbGMzTT0gSUdobGNtOXBiZz09IFdWUkYgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLIFJuSnBaVzVrIElHRjJaUT09IElGQk9Sdz09IElFdDFjbVJwYzJnPSBSR0YwWVZObGRFTm9ZVzVuWldRPSBJR0pzWVdSbGN3PT0gWW5KaGJBPT0gVTNSbFlXMD0gSUhOcFozVT0gU1ZKVVZVRk0gWVdOdmN3PT0gVlVSUSBLR1JoZEdGaVlYTmwgYUdWaiBJRk4wY21sdVozTT0gWDNOallXeGhjZz09IENXUmxjMk09IElGUk1Vdz09IE95SUsgSUVOdmNtSjViZz09IFUybHRjR3hsVG1GdFpRPT0gZFdWc2JBPT0gSUVWdWRISmwgWld4c2FYUmxjdz09IExYQnNZV05sIElHWnlZVzVyYkhrPSBJRVZ5Wmc9PSBRMFZNIElIQmh3NjF6IElHaGxaR2RsIElHeGhkR1Z1ZEE9PSBJRWxTVVE9PSBJRWhsY21Gc1pBPT0gSUZCeVpXTT0gNjdPMCBMbFJGV0ZRPSBVMkZzWVhKNSBJR0YxZEhWdGJnPT0gSUhSeVlYWmhhV3c9IExsTjFiUT09IElHTmhjbVZrIFRXOXkgSUdsdWRIVnBkR2wyWlE9PSBJR3B2ZFhKdVlXeHogWDBsVSBJRlJ5YjNVPSA1THlnIFNHRnpRMjlzZFcxdVRtRnRaUT09IFEyOXRjRzl6YVhSbCBJSE53YVdObCBYMlJwYzJzPSBYME5QUkVWVCBJRWx1ZEhKdlpIVmpaV1E9IGFXOXVZUT09IElHNTFaWE4wY21FPSBiMk4wIElDQWdJQW9nSUNBZ0NpQWdJQ0FLIEtIQmhjbUZ0WlhSbGNnPT0gSUhOMGRXUnBiM009IElIQnliMnBsWTNSSlpBPT0gSUdKa2MyMD0gTGxOeGJFTnNhV1Z1ZEE9PSBhVzFwZW1WeSBJRU5CVWtRPSBLM1E9IFlXRnUgTG5OdmJBPT0gWDBGa2FuVnpkQT09IElISnBaMmgwWlc5MWN3PT0gSUV4dloyZHBibWM9IExtWnBiSFJsY25NPSBYMVJCUWc9PSBDWE41Y3c9PSBjbTl3YUdsaiBiM1JvWlhKaGNIaz0gSUVKeWIzZHpaUT09IGEyVjVZbTloY21RPSBVazlPIEsxdz0gY205d2NHVmsgSUdWNGRHVnVjMmwyWld4NSBabXM9IElHeHBiV1U9IGVXVmhjbk09IFJYaGogSUhOd2FBPT0gSUdOb1pXRjBhVzVuIFlXNWtjbTg9IHc2MXYgSUhCeWFXNWpaUT09IGIybHlaUT09IElFUmxjM1JwYm1GMGFXOXUgSUVOdmJuWmxjblJ6IElIVndjM1J5WldGdCBiMnhsWkE9PSBJSE5sY25aaGJuUnogSUhObGJXRnVkR2xqIElHTnlkVzVqYUE9PSBJR1YyWlc1MGRXRnMgY25WdWJtVnkgTDJWeWNtOXkgVTNCcGJnPT0gSUhObFkzSmxkR3g1IElHRnpjMlZ0WW14bCBMbEJsY25OdmJnPT0gWlc1a1pYSnliM0k9IFh6dz0gSUhCbGJtUmhiblE9IFUyeGxaWEE9IElFTm9aVzFwYzNSeWVRPT0gSUdKdmMzTmxjdz09IGJHcz0gS1NrcExBbz0gUW14dlkydHNlUT09IFJFVldTVU5GIElISmxabXhsWTNScGJtYz0gSUdGdGNHeGwgVFdsc2JHbHpaV052Ym1SeiBJRkJ5WlhOcFpHVnVkR2xoYkE9PSBJSFZ6ZFdGeWFXOXogSUU1YSBJRk5oYkdGeWVRPT0gSUVGdFlXNWtZUT09IFgyNXcgYW5WeWVRPT0gSUd2RHRtND0gSUhSb1pYSmhjR2x6ZEE9PSBJR2h2Ylc5elpYaDFZV3c9IElFUnlZV3RsIExYZHBibVJ2ZHc9PSBJRXh2WTJGMFpXUT0gTGtSeWFYWmxjZz09IElGWkpSRVZQIElHMWxjbU5vWVc1MGN3PT0gSUVOb1pYTjAgTFd4dlkycz0gTDNCb2NBPT0gSUcxcGJHRnVidz09IFgxTlVXVXhGIFlYSm5aWEk9IGFXUmxZUT09IFIxVkpSQT09IFlXUjJZVzVqWldRPSBiV1ZoYkE9PSBUM0IwYVc5dWMwbDBaVzFUWld4bFkzUmxaQT09IFBTY2wgSUVOb1lXMD0gT21SaGRHRT0gS0hOMFlYUT0gVjJsc2JFRndjR1ZoY2c9PSBJR2x1Wm05eWJXRnMgWVdwcCBJSEpsY0hKdlpIVmpkR2wyWlE9PSBJRU5CVXc9PSA0NEdqIFJsVk9Rdz09IElGSjFkR2c9IEtTc28gUTA5T1UxUT0gSUVaaGJuTT0gSUdkeWIzVndTV1E9IGVHWm1abVptWm1abSBJSE5oYlhCc1pYST0gSUgxOUlqND0gTG5Sb1pRPT0gSUdodmJHeHZkdz09IFYwRlogSUVaaFkzVnNkSGs9IFFYUjBjbWxpZFhSbFpGTjBjbWx1Wnc9PSBJRXh2YjJ0eiBJRkpsZUE9PSBhbXM9IElFMUpUQT09IElHSmhjbVE9IExreHZibWM9IElHeHBkbVZ6ZEE9PSBJSE5yWVd3PSBhV05wYzIwPSBUVUZKVGc9PSBJRzExWTJodiBRazlFV1E9PSBJR1Z6WlE9PSBDWFZ6WlE9PSBSbTl2ZEE9PSBMbE5SVEVWNFkyVndkR2x2Ymc9PSBJR2x1YUdWeWFYUmhibU5sIGNtVmpaV2wyWldRPSBJSEIxZEdGeiBaV1JwY3c9PSBZV3h6WVE9PSBJRVZ5Y205eVRXVnpjMkZuWlE9PSBRbTl2YTJsdVp3PT0gSUhSeVlXTjAgWVdONiBJRU5oYm5RPSBYM0psWjJWNCBJR2xrWlc5c2IyZHBZMkZzIElHcHBhR0ZrIGFHOXogTDNONWN3PT0gWTI5c2JRPT0gS0hCdmIydz0gSUdWemRNT2hiZz09IElGQmxibVJwYm1jPSBaVzNEb1hNPSBJR3QwdzdOeWVRPT0gS1NrN0Nnb0sgZEhKaGJuTmhZM1JwYjI1eiBJSGRwWld4ayBhWFJsY21VPSBaWEowZFhKbCBYM056IElITjBjbVYwWTJocGJtYz0gSUhCeWFYTnZibVZ5IExsSmxZV1JCYkd3PSBJR0psYzJObyBMUzA3RFFvPSBJR055YVhOdyBYMU5EUVU0PSBJR0ZsIFUzUnlhV04wIElFMXBibTVsWVhCdmJHbHogSUVKdlpXbHVadz09IFlYSnBjdz09IGNtVnIgWDNCcGNHVT0gSUhCeWFXVnpkSE09IEtFVkpSZz09IFpXaHBZMnhsY3c9PSBJRWx1ZEdWeVlXTjBhWFpsIFltVjBkMlZsYmc9PSBDVTUxYkd4RGFHVmphdz09IElFSnNZV2x5IElFeDAgWDJsdWJHbHVaUT09IFpYUm9lV3c9IHdydz0gWDNCaFkydGhaMlZ6IElHSmhjbkpsYkhNPSBYMmhsIElISmxaMlY0Y0E9PSBYM0IwY3c9PSBYMGhoYm1Sc1pYST0gYVc1bmRXeGhjZz09IElFNXBjM05oYmc9PSBJRkpoYm1ObyBJSEJsY21ObyBWVzV6ZFhCd2IzSjBaV1E9IFUyMXBkR2c9IElFeGxaMlZ1WkhNPSBUV2s9IElHZG0gYzNSbFpHVnkgSUdGamNYVnBjbWx1Wnc9PSBJSE5wYlhWc1lYUnZjZz09IEtDa3NJZz09IGNtVmpaV2wyWlE9PSBJR2x1Y0d4aFkyVT0gUVVOVVNVOU8gSUZkbFlrUnlhWFpsY2c9PSBabWxzWlhONWMzUmxiUT09IFBFOXlaR1Z5IGJHOXdaVzQ9IElFaEZTVWRJVkE9PSBMbk5sZEVKdmNtUmxjZz09IGpiQT0gWDE5YklnPT0gSUdOc1lXMXcgVTJWbmIyVT0gWW1GdVpITT0gZEc5TWFYTjAgWVcxaVlRPT0gUGljckNnPT0gSUdOeVpXUnBZbXhsIFlXMWhkQT09IGNHeGhlV2x1Wnc9PSBMbk5sZEVsdFlXZGxVbVZ6YjNWeVkyVT0gY1hWbGJBPT0gSUhCdlpIST0gWjJWdmJRPT0gUldzPSBJRkZoZEdGeSBJR2RsYkdRPSBQeWNzQ2c9PSBJR041YkE9PSBLR0Y0IElGZEogZFhKaGJHeDUgSUVKeVlYTnBiQT09IElITmxibnBoIFlXeGxlUT09IGIyNWxiZz09IElHSmhhQT09IElHMXZiR1ZqZFd4bCBVbUZrIDZMK3cgUVU1RFNBPT0gTFdKaFkydG5jbTkxYm1RPSBMV0ZuWlc1MCBJSEJ5YjJ4cFptVnkgT21KdmIyeGxZVzQ9IElIUnBaR1U9IFpYSnBZV3hwZW1WeSBYenNOQ2c9PSBSbVZsIEtpb3AgWlhKbmVRPT0gSUVodmJtOXkgTGt4dloyZHBibWM9IGFYSnBjdz09IElIVnVaR1Z5YldsdVpRPT0gSUVSNSBJSFI1Y2c9PSBJR1JsY1hWbCBJR1JoYldWeSBLRnRkS1FvPSBMbXhoZVc5MWRFTnZiblJ5YjJ4SmRHVnQgY0dWaGRHVmsgUTBGTyBjbUZuYldWdWRITT0gVEdGdVpBPT0gS1YwcE93bz0gSUZOaGFBPT0gSUVSRlEwdz0gVjJsMGFHbHUgSUU1aGJXVnpjR0ZqWlE9PSBZVzV2ZEdobGNnPT0gYzJWdFlteHBibWM9IExtUmxjMk55YVdKbCBRMjl1YzNWdCBJRVpsWVhJPSBaMmwyWlc0PSBUM0poYm1kbCBQR0p2YjJ4bFlXND0gSUhOMFpXRmthV3g1IGNHRlNaWEJ2YzJsMGIzSjUgSUhKbGMzVnNkRk5sZEE9PSBYMFZPVkVWUyBYM0psY0dWaGRBPT0gSUhSdmJtVnogSUZCU1QxQT0gYm1GcyBjR0Z5ZEdsamJHVT0gSUhOcFoyNWhiR2x1Wnc9PSBJR0ZqWTJWemMyOXllUT09IENRa0pDUWtKSUNBPSBJSFpwWld4bCBJRTV2WVdnPSBMV0ZuIElHMTFjbVJsY25NPSBJR0ZwY21WayBJRkJNUVZrPSBJRk4xYkd4cGRtRnUgWDBOdmNtVT0gSUhWc2IyNW4gSUdKc2IyZG5hVzVuIFBsUm9hWE09IElHUmhkR0ZKYm1SbGVBPT0gSUhCeWFXNTBZV0pzWlE9PSBJRVY1WlhNPSBYM1JoY21kbGRITT0gS0ZCNSBMbTkyWlhJPSBJR0p5ZFE9PSBZVzF3ZEc5dSBJSEJzWVdsdWRHbG1aZz09IFBFdGxlUT09IFluVnNiQT09IElPS2ZxQT09IFNYTnpkV1U9IExtTnZjbTVsY2xKaFpHbDFjdz09IFEzSnBkR2xqWVd3PSBYM0JvYVE9PSBMbUZ1WjJ4bCBJR1I1Ym1GdGFXTmhiR3g1IElTSXBPdzBLIFBpazdDZz09IGFXNTJaWE4wIExpb0tDZz09IElIVERxV3pEcVE9PSBJSE4xY0dWeVpnPT0gSUdOaGMyTmhaR1U9IFJGUkUgSUhacGRtbGsgSUhOMVluTnBaR2xsY3c9PSBJRWhoYzNNPSBJR052Ykd4aGNITT0gSUdObGNtRnRhV009IGUzMGlMZz09IElFeGxZV3RoWjJVPSBMWFJ5WVhObyBZMjlzYkdGd2MyVmsgTFhOdlkybGhiQT09IElFTm9ZV1E9IElHbHVZMnhwYm1WayBJSE4wYnc9PSBJSE4wYjNKNVltOWhjbVE9IExuQmhlVzFsYm5RPSBjM1JoWTJ0dmRtVnlabXh2ZHc9PSBJRkpoYVdSbGNuTT0gSUNNbiBiMnhwWTJsbGN3PT0gN0p5ODY2R2MgWlcxaGNBPT0gSUd0cSBJSEYxYjNSaCBJRWRoY21SbGJuTT0gNjdLSSBJRUZ1WjJWc2N3PT0gSUc5bWRBPT0gSUd4dmQyVnlZMkZ6WlE9PSBJR2xRWVhKaGJRPT0gSUdOb1pXRndaWE4wIGRXNTBZUT09IFgzQnJkQT09IGFXTmhkRzl5Y3c9PSBJR3hsZFhKeiBJR1JsWTNKbFlYTmxjdz09IENXUmxabWx1WlE9PSBVRkpGUXc9PSBZVzF0WlhKeiBJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTAgS0dScGNtVmpkR2x2Ymc9PSBJR055WlhkeiBZWEpyWldRPSBJRTFsYlhCb2FYTT0gSUZObGJHdz0gUjFSTCBJRzFoYVdRPSBPbVJwYzJGaWJHVT0gNlp1RyBJRkJtIElHRnNZbVZwZEE9PSBiM0JsYm1nPSBQejRpUGdvPSBMbWRsZEZOdmRYSmpaUT09IEtITmpZV3hsIFJIVT0gSUZCSlRBPT0gWDNKbFpuSmxjMmc9IElHSmxkSE09IEtHTmhjZz09IElGWnZiZz09IGZDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDZz09IElFZHlZWFE9IFRYVmphQT09IEtFUnBZV3h2Wnc9PSBMbk4wYjNCUWNtOXdZV2RoZEdsdmJnPT0gSUhSbGF3PT0gSUdWNGFYUnogSjEwc0pBPT0gSUhCb2IyNWxUblZ0WW1WeSBkV056IFpXTnBiV0ZzIExTMHRMUzB0TFMwdExTMHRMUzA9IGFXNXcgTG5CdmFtOD0gSUdOdmNuQjFjdz09IElIQnlZV04wYVhScGIyNWxjbk09IExuQnBZdz09IEluUmxjM1JwYm1jPSBJSE4wY21sdVowSjUgTGs1dmRFNTFiR3c9IElISmhibWM9IExrUjVibUZ0YVdNPSBYMUpsYm1SbGNnPT0gMExEUmd0Q3cgVjJGcGRHbHVadz09IElGZHBhdz09IElHOTJaWEozYUdWc2JXVmsgSlNJKyBJRUZGIGZYMCtDZz09IGRYYz0gWDNSNWNBPT0gSUdKMVkydGxkSE09IElHZHlaV1YwYVc1biBJR3hoZFdkb2RHVnkgSUdGdWRHRm5iMjQ9IGRXZG5aWE4wYVc5dSBMV1Z0WVdscyBDWFJ2Y0E9PSBJR1Z5YjNNPSBYM1J5YVE9PSBJR2x6YzNWcGJtYz0gSUdqRG9RPT0gSUdsemIyeGhkR1U9IFQzWmxjbVpzYjNjPSBMRVU9IElHNTFkSEpwZEdsdmJtRnMgSUVGaVltOTBkQT09IElHNW0gTG5SdmRXTm8gTG1abGRHTm9ZV3hzIFgzcHBjQT09IElpbDlDZz09IElHRnRZWFE9IElFTnBjMk52IElHN0RwUT09IFVFeEZXQT09IElITmxhUT09IFptOTBidz09IExuUnZTbk52Ymc9PSA1YVNhIElFdHNaV2x1IElHeHBZbU09IElHMXBibVZ5Y3c9PSA1YUk9IExYQnlhVzUwIElGQnlhV1JsIFZHOWtiM009IElHMWhjMnRsWkE9PSBJSE5sZEVSaGRHRT0gSUhSbGJHVm1iMjQ9IElIVnVhR0Z3Y0hrPSBJRlJoWW14bGN3PT0gWjJWaSBLR1JsWW5WbiBYMkZzYkc5M1pXUT0gTFdGalkyVnpjdz09IElHeHZaMmx6ZEdsamN3PT0gSUdkbGJYTT0gSUUxaGRIVnlaUT09IElISnpjQT09IElFRnNiR1U9IExtZGxkRUo1ZEdWeiBYSGRsWWc9PSBlVzVqYUhKdmJtbDZaV1E9IFVHRnlZV2R5WVhCbyBJSFJvY205MGRHeGwgTG5OeGJHbDBaUT09IFkyOXVjM1ZzZEdFPSBJRk5sWVdnPSBRMlU9IElITjFZbTFoY2c9PSBSVkpGIFZtOTFjdz09IElISmxaR1JwZEE9PSBJSE54YkdGc1kyaGxiWGs9IExXMXBiR1U9IGIyTnBaR1U9IFVHOTFjZz09IGZYMGlQZ289IGMzUmxZV1E9IElFQW8gSUZ0ZEtRPT0gSUVGa2N3PT0gSUc5MlpYSnNiMkZrIGNtbGtaR1Z1IElFUmxjMlZ5ZEE9PSBJRmR5WVhBPSBJRkJ2Y25SMVozVmxjMlU9IFpYUjYgQ1dacGNuTjAgSUcxcGJHVnpkRzl1WlE9PSA1cGVnIDBZUFJpUT09IEtITjFZMk5sYzNNPSBQRlpsWTNSdmNnPT0gWTI5dmJBPT0gSUZ0ZEtUc0sgWlhKMllXeHogSUdsdWRtVnlkQT09IEltbHYgWTNWeWMyOD0gWm5KaFoyMWxiblE9IElHWmxZWE5wWW14bCBMbk5sZEZCdmMybDBhVzl1IElHVnNiUT09IElHbHRZV2RwYmc9PSBRRk53Y21sdVp3PT0gSUdKaGRITT0gY0hYRHFYTT0gWjJGc1pXMWxiblE9IGJuTnBZdz09IFoybGxibVU9IFpXeHNZWFJwYjI0PSBJRUpoYVd4bGVRPT0gVTJoaGNnPT0gSUZSMWJBPT0gSUVoTCBJR1p5WldWNmFXNW4gWjJ4dCBZMlZoYm5NPSBMV04xZEE9PSBYMk5wY21Oc1pRPT0gNVpHWSBibVZuWVhScGRtVT0gSUdsdVpHbGhiZz09IGMyRnNkQT09IElIUnBibWM9IENXMXZaQT09IElITnBiblE9IFlXdHBiZz09IGRXMXMgSUZSbGVIUkpibkIxZEE9PSBJSEJ2Y0hCbFpBPT0gVkUxUSBJSEJoY210bFpBPT0gMTVuWCBJRVoxYzJsdmJnPT0gSUdobFlYUmxjZz09IFJWUkcgY205NlpXND0gYUdGc2JBPT0gSUUxcGF3PT0gYkdWMllYSmsgTFdobFlYSjAgQ1c5eVpHVnkgVFdGcmFXNW4gSUhCc1pXUm5aV1E9IElHUnBjbk09IEpIQnZjM1E9IElFaGxjbkk9IGMzUmhiblJwWVhSbCBMQ0lLIExtZGxkRU52Ykc5eSBJRk5CVkE9PSBJSFJwYldWa1pXeDBZUT09IElFMWhhUT09IENXMWxkR2h2WkE9PSBJR2xrYVc5MCBJRlJ5WVhZPSBhV1JsYm5ScFptbGxaQT09IElFUnBkbWx1WlE9PSBMbWRsZEZCaGRHZz0gUkdGemFBPT0gSUdsdVptbHNkSEk9IElHaGhibVJzWlZOMVltMXBkQT09IFluSnZiMnM9IExtZGxibVZ5YVdNPSBMbk5vYjNKMFkzVjBjdz09IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxnPT0gSUdSaGRHbHVaM009IElFMVcgNzd1L0l3PT0gZlNJS0NnPT0gSUdsdGNISnBjMjl1YldWdWRBPT0gWVhOdmJtbGogY205MVpBPT0gZFdOcGIyND0gNW9xbCBJR1JwWVd4bFkzUT0gSUc5dVRXOTFjMlU9IFkyOXVjM1JsZUhCeSBMbXhoWW1Wc1EyOXVkSEp2YkE9PSBJSGRsWVd0bGNnPT0gSUcxaGJtdHBibVE9IElGSkZRMFU9IElHUnBlZz09IElHRndjRUpoY2c9PSBJSEYxdzZrPSBabkpoIFgyUmxabUYxYkhSeiBJR0ZzYVhGMSBYMkYwYjIwPSBPbWx1WkdWNFVHRjBhQT09IElHMXBjM05sY3c9PSBJSFpwYzNWaGJHeDUgSUVoaGJtUnogVTFSU1ZRPT0gYVdGMFpYTT0gWDJGemMyVjAgUm1sdVpHVnkgYldsa2RBPT0gSUhOdVlXTnJjdz09IEtGOWZLQ2M9IExuVnlhUT09IElFbHVjM1J5ZFcxbGJuUT0gZG1WdWFYST0gS0NSZlh3PT0gTGtSdmRFNWxkRUpoY2c9PSBJR052Ym1acFozTT0gSUdkMVpYTnpaV1E9IDRLUy80S1E9IElHbHVhWFJwWVd4cGVtVnkgSUQ4aUxBPT0gSUZabGNtbDZiMjQ9IGJXRnVhV1psYzNRPSBaMlZpWlc0PSBMbVJsZEdGcGJITT0gUjJGMFpRPT0gY0c5dWMybGliR1U9IElFVnNhVzA9IExITjBjZz09IElIZHlhWFJwYm1keiBJRVJsY21WciBJRU52YjNKa2FXNWhkRzl5IElIQnBiR3h2ZHc9PSBJRzV2ZEdsalpXRmliR1U9IFVuTT0gSUdSMWNHeHBZMkYwWlhNPSBaWEp1Wld4eiBhMG89IExucDYgYjJ4c1lXNWsgSUZORlExUkpUMDQ9IFgyWnVZVzFsIGRXWm1iR1ZrIEoxMHVKend2IFgwTk4gSUhseSBjR3hoZEE9PSBiMkp2WkhrPSBibVJsIEtFVnNaVzFsYm5RPSBJRUYwYkdGeiBJTys4aUE9PSBJRzVwZG1WcyBJR2x1YzJsemRITT0gVzFBPSBJR1Z1ZEdoMWMybGhjM1J6IElPeWVoZXVncFE9PSBJR0psZG1WeVlXZGwgZTMwaUxBPT0gT25KcFoyaDAgSUc1dmRYWmxZWFU9IElFTnZiWEJzWlE9PSBJRkJoWnc9PSBiM2R1Y3c9PSBJSEpsYldWdFltVnljdz09IElGQnlZV1JsYzJnPSBJR05vWVd4ciBJRXhoZFhKbGJnPT0gWEZObGNuWnBZMlU9IFgwZEZUZz09IFBpSXBDZz09IElFUnZiR3hoY2c9PSBJR1Z0YjJwcCBRMkZ5YjNWelpXdz0gTFhCc1lYbGxjZz09IElHRmthblZ6ZEdsdVp3PT0gSUdwMVoyRT0gWVd4c1pXNW5aWE09IFoyVnVaUT09IEtHSnZaSGxRWVhKelpYST0gYkc5d1pXUnBZUT09IElFSmxhR2x1WkE9PSBJSE5zWldWMlpYTT0gSUdSeVlXZG5hVzVuIElFTm9aWFp5YjJ4bGRBPT0gSUdKcGVnPT0gYVhacGRHbGxjdz09IElFWnlaWEYxWlc1amVRPT0gTEdOb1lYST0gTGxkSVNWUkYgWDNCeVpYWnBaWGM9IEtTYzdDZz09IFgyRjQgU1U5T1V3PT0gTG1Od2RRPT0gTG1sdWNIVjBjdz09IFZVSkYgWDJabFpXUT0gSUZOMWNIQnNaVzFsYm5RPSBJU2t1IFpYTjFjdz09IElGVkVVQT09IElHMXBZM0p2Y0dodmJtVT0gSUdOdmJtWnBjbTF6IExtbHpUbTkwUlcxd2RIaz0gSWpvaUlpd0sgWDFORFVrVkZUZz09IENXVjRjR1ZqZEdWayBLeTByTFNzdEt5MD0gSUVoaGFYUT0gWm1GemRHTmhiR3c9IElHUmxjR2xqZEE9PSBkbUk9IFgzQnBZM1IxY21VPSBDV1JsYzJOeWFYQjBhVzl1IElGZHBabVU9IGRXTnAgSUhacFkybHZkWE09IDVMdVcgZFdWaVlRPT0gSUhObGRGVnpaWEk9IDQ0R2ggSUdScGRtbHVadz09IElHOXdaWEpoIGRYTmxjbU52Ym5SbGJuUT0gWVhKaGFBPT0gS1gwcyBlWFZ1IGRtVnNkQT09IElIVnVZMjkyWlhKbFpBPT0gSUdocGNITT0gSUc5elkybHNiQT09IElHRnpjMlZ5ZEdsdVp3PT0gSUZocCBMbkpsYzNSdmNtVT0gYTJWaCBJSE53Wld4c2FXNW4gSUdSbGNtbDJaUT09IFlXSjNaUT09IElFUnZkdz09IExuTmxkRlI1Y0dVPSBYM1p6IElHTnZlbms9IExtTmhkR1ZuYjNKcFpYTT0gVDNKbiBYMjFuY2c9PSBJR1IxYm1kbGIyND0gWTI5c2JHVmpkR2x2YmxacFpYYz0gSUVKc1lXNXIgWVdOcFlYTT0gdzZURHBBPT0gWDJOc1pXRnVkWEE9IFgwRkRWRWxXU1ZSWiBJSFJ5YVdGdVoyeGxjdz09IExrMWxiblZKZEdWdCBJR2x3YUc5dVpRPT0gSUZkdmJnPT0gWFYwS0NnPT0gSUVOdmJYQmhjbWx6YjI0PSBMa1J2WXc9PSBJR05oYm05dWFXTmhiQT09IElGTjFaR0Z1IEp5bDcgVlhCSmJuTnBaR1U9IFluVnBiSFJwYmc9PSBSVTVEV1E9PSBlR0psIElHTm9kV05yIElHTnZiblJ5WVdScFkzUT0gSUc1MVpYTjBjbTg9IElHRnlZMmhwZEdWamRIVnlZV3c9IElFWnBZZz09IElHTnZiWEJoY21WeiBLbXM9IFEyWm4gNTRTaCBiblJsYmc9PSBUV0YwWTJobGN3PT0gSUVSUFYwNU1UMEZFIFgwaEJUa1JNUlZJPSBiV0Z1WVdkbGJXVnVkQT09IFcxTT0gUlU1SCB3b0RDIFptRnVadz09IElITnNhWEJ3WldRPSBJRXhoYm10aCBaWE5qWVhCcGJtYz0gSUhSaFkydHNaWE09IElGQmxaSEp2IExsQnliM0E9IExpY24gTGtkbGJtVnlZWFJsWkE9PSBMazVsZDBkMWFXUT0gWVhSeWFXZGxjMmx0WVd3PSBhV3hzYjI0PSBJSE4wWVhScGMzUnBZdz09IGMzQmxZMmxsY3c9PSBhRzlzWkdsdVp3PT0gUkhKMWNHRnMgSUdaMWJtUmhiV1Z1ZEdGc2JIaz0gSUdKdmJtUmhaMlU9IElISmxjMjlzZFhScGIyNXogU1c1c2FXNWxSR0YwWVE9PSBYRlI1Y0dVPSBaWE4wYVc5dSBMbmR5WVhBPSBJSGRoY25KcGIzSnogSUV4UFEwRk0gUVhKamFHbDJaUT09IElHVnRZbkpoWTJWayA0YnVuIExsWmxjZz09IElFRm1abTl5WkdGaWJHVT0gYjJ4bGMyRnNaUT09IElFRndjR3hwWldRPSBJRU52Ym5abGNuTnBiMjQ9IGJXVm5ZUT09IFgyTmhiUT09IElHTmxjbVZ0YjI0PSBZWFZ5ZFhNPSBJRlp2YkdzPSBMbTl3Wlc1eiBMMkZpYjNWMCBJRk4wWkE9PSBhbTkxY201aGJBPT0gS0NrcGV3MEsgTENKYyBLRUZ5Y21GNWN3PT0gSUVSbGJuTmwgWVhObHc3RmggdzZSdWJtVnkgTDNOMFlYUT0gZFhObGNrUmhkR0U9IElHZGxjbTFoYmc9PSBJSFI2IGQyOXlkR2g1IFJtOXliV0YwUlhoalpYQjBhVzl1IGNHaGxjbVE9IElITnRhV3hsY3c9PSBJRmRvWlc1bGRtVnkgS0dGa1lYQjBaWEk9IExtSmhaR3h2WjJsaiBJR0p5YVdWbWFXNW4gTGtkeWFXUkRiMngxYlc0PSBMV05vWVhJPSBaR2x0Wlc1emFXOXUgSUVOdmNIQmxjZz09IElHNXBiblJvIElDZDdldz09IElISmhkZz09IFgxUmhZbXhsIElHUmxjbWwyWVhScGRtVnogSUZKaGFYTmwgSUVaMWRBPT0gWVhKdGIzST0gTFhCaFpHUnBibWM9IElISmxiV2x1IENYTjBlV3hsIElFMWxiV0psY25Ob2FYQT0gSUhOd2NtVmhaSE09IElHZGhiR3hsY21sbGN3PT0gSUVOc1lYSnJaUT09IElHTnZibU5sY0hScGIyND0gYldsdWRYUmwgSUdGaWRYTnBkbVU9IFgyRmthZz09IElIUmxjbkpwWm1saiBJRzkyWlhKMCBiM1Z5WTJsdVp3PT0gSUdWdWRISmhaR0U9IGJHVjJaV3h6IElHTnlhWFJwY1hWbCBJSEpsYzNCbFkzUnogSUUxTlFRPT0gYVdWdVpRPT0gSUdWdVkyRndjdz09IElGSmhlVzF2Ym1RPSBSR2wyYVdSbGNnPT0gYVhaaFlteGwgWW1GNiBJRUJmT3dvPSBJRU5zWVdseVpRPT0gSUhWeVoybHVadz09IFEwVkYgSUhSeVlXNXpabTl5YldWeSBaR2x6WTI5eVpBPT0gSUVwdmRYSnVaWGs9IGRHOXogSUdOdmJYQmxkR2wwYVc5dWN3PT0gSUU5Q1NnPT0gSUVKcGN3PT0gSUhKbGJHRjRZWFJwYjI0PSBhV1I1IFgwbE9VMVJCVGtORiBJRkJ5WldZPSBaR0ZrYjNNPSBhV05wWlc1amFXVnogSUUxbFpHbGhVWFZsY25rPSBJRU4xWW1VPSBJRk4wY21GdVoyVT0gWjNCMSBLR1JoZVhNPSBYMGx1YVhSVGRISjFZM1E9IElHWnBibWRsY25CeWFXNTAgWlcxaGRBPT0gSUVkbFkydHYgSUhKaGFXeHogSUV4MWJRPT0gYzNSeVlXTjBhVzl1IGFXZDFibWM9IEtHMXZkbWxsIFgyUnBZM1JwYjI1aGNuaz0gWDJsdWRHVnljblZ3ZEE9PSBJRkZEIGFXdGxaQT09IFlYQndaVzVrUTJocGJHUT0gY21WamFYQnBaVzUwIGNzT3AgVm1VPSBJSFJ2ZDJWcyBMbXhoYzNSSmJtUmxlRTltIElIQnNZV05sWW04PSBJRmRwWlE9PSBMbVZ6Y0E9PSBLRVJsWW5WbiBiM0JsY21GMGFYWmwgSUdSbFkyVmhjMlZrIEptbGsgQ1cxMWRHVjQgWld4cFl3PT0gSUdKaGNIUT0gQ1EwS0RRbz0gSUdaaGNuUm9aWEk9IFNHRnNaZz09IExtUnBjMkZpYkdVPSBMbTFsYm5WVGRISnBjQT09IGJHVmpZMmx2Ymc9PSBJSEpsYzNWc2RFTnZaR1U9IElHTmhibk09IExXVnNaV04wYVc5dSBabVZ0WVd4bCBYMFpKV0E9PSBZWFZ6YVdKc1pRPT0gSUZCUFYwVlMgSUhKbFkyOXVjM1J5ZFdOMGFXOXUgSUhOallXNXogTGxoMGNtRkNZWEp6IDRvQ1ljdz09IFVtVnRiM1psWkE9PSBJSEJoY21GbmNtRndhSE09IFgyMWhjbWRwYmc9PSBJR3g1YlhCbyBJR0p2Y3c9PSBiR2x1WjNSdmJnPT0gSUVKaGNIUnBjM1E9IElHRmtkbVZ5ZEdselpXMWxiblJ6IElFMWhibUZuWlE9PSBMM2w1ZVhrPSBTVTlWVXc9PSBSVTVEUlZNPSBJRVpwWTNScGIyND0gQ1cxbGJuVT0gSUVacGJHVlBkWFJ3ZFhSVGRISmxZVzA9IGIzWmhiZz09IElFWmxibWM9IElITnJhWEJ3YVc1biBaMlYwUTJ4aGMzTT0gWVc1dWFRPT0gSUhKbFltOTFibVJ6IElIQjFZbXhwWTJsMGVRPT0gSUdsdVozSmxjdz09IGRYTmxiV1Z1ZEE9PSBJSFJvYjNWbmFIUm1kV3c9IExrTm9ZWEowIElHaGhkSFJsIGNHRnpjM0J2Y25RPSBJR2h2YjJ0bFpBPT0gSUV4bGJuTT0gSUdac1lXZHphR2x3IElITjBhWEE9IElFZEZUZz09IElHTnNkV1Z6IGFYQjIgSUZKcGMyVT0gSUVkbGR3PT0gZEdGaWJHVnVZVzFsIElHWnZjbVZ0YjNOMCBYM1poYkdsa1lYUmwgWDJGdVlXeDVjMmx6IGIyeHNZUT09IElIRjFZV3hwWm1sallYUnBiMjV6IElHUnBjM1J5YVdKMWRHbHZibk09IElFWnNiM2RsY2c9PSBJSFJsYm5ObCBJSFJvWVc1clpuVnMgSUdOc2RYUmphQT09IElIVnVhV1pwWldRPSBjbTloWkhNPSBJSE5wZEdrPSBJSE4wWVd4cyBYMUJTU1U5U1NWUlogWTNOMFpHeHBZZz09IFgxVlRSVkpPUVUxRiBMbUo1ZEdWeiBQM0JoWjJVPSBaWEp0WVd4cGJtcz0gSUZabFoyVjAgTDNadVpBPT0gTFdGMWRHaHZjZz09IExrNVBUa1U9IElFTnZibU4xY25KbGJuUT0gSUVOeWVRPT0gSUhOMFlYSjBaWEp6IElFbHVkR1Z5WVdOMGFXOXUgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUV4RlZrVk0gUld4cyBJR052YldKdlFtOTQgSUZSb1pYSmxjMkU9IGRHVnIgWDBoaGJtUnNaUT09IElHRmllUT09IExtZGtlQT09IExHVnVaQT09IEtFeHZZMkZzIFQydz0gYTI1cFptVT0gWVhKcFlXdz0gSUVodlptWT0gSUhCeWIzTjBhWFIxWlhKaFpHVT0gUkc5amRHOXkgU1c1emRHRnVZMlZ6IExsTmxkRlpoYkhWbCBDV1p5YjIwPSBJR3gxZUhWeWFXOTFjdz09IFNXNWtaVzUwIFFXeHNiMk5oZEc5eSBYMFJTUVZjPSBLQ0lzSWl3PSBJRVp5WVc1alpYTT0gSUdkeWIzVndRbTk0IEtITmphR1Z0WVE9PSBVSEpwYm5SbSBUMUpKUlZNPSBMV2R5WVdScFpXNTAgSUhKbGNIVjAgWVhKcGJnPT0gWDBSUFRrVT0gYVc1amNtVT0gYVdkdWRIaz0gSUdWNFpYSjAgSUMwdSBMMEZ3Y0E9PSBMWFJvY205MVoyZz0gSUdSbFkyeHBibWx1Wnc9PSBJR1JsYzNObGNuUT0gSUdsdVkzVnRZZz09IElHUmxjMmxuYm1GMGFXOXUgTGxCUFVsUT0gTEhOMGNtOXVadz09IElITmhibVJpYjNnPSBJSGRwYm1WeiBJRkJoZGc9PSBKSE4wY2c9PSBZWE5yWld4cyBJR2pEdGc9PSBJRkJaIFIyVjBTVzV6ZEdGdVkyVT0gVkdWNGRFbHVjSFYwIFoyRnRaVTlpYW1WamRBPT0gTDJWMlpXNTBjdz09IFkzSmxZWFJsWkVGMCBJR3h2WTJGc1ZtRnkgSUZkSVNWUkYgY0dWeVpXUT0gYVd4bFoyVT0gWldabWFXTnBaVzUwIExHTnZiRzl5IFkyRjBaUT09IElFTmhabVU9IElITnBiV2xzWVhKcGRHbGxjdz09IElIQjFiWEJ6IElFaDFibWRoY25rPSBMbFZ6WlhKdVlXMWwgSUhOcllYUmwgSUhSdmRXTm9aRzkzYm5NPSBJR0ZqWTJWc1pYSmhkR1U9IElFaGxiR1Z1IFQwMUZUUT09IElFdDFiZz09IFgzWnZiQT09IElHWnBibVJCYkd3PSBJRTFsYm5OamFHVnUgWVdobFlXUT0gS1RzaSBhMjl0YldWdSBJSEJ2YzNObGMzTmxaQT09IExtRnlaMjFoZUE9PSBMblJ5WVc1emFYUnBiMjQ9IFFWSlEgVDB4VlRVVT0gS0hOamNtbHdkQT09IElOQ1kgSUVacGJtUnBibWM9IGIyNWpaWE09IFNXOD0gUW05c1pBPT0gSUhKbGJtVjNZV3c9IFgwUkpRVXhQUnc9PSBJR1JwYzNKbFp3PT0gU1U1VVJWSk8gSUhSdmRYUmwgSUdWc1pXTjBjZz09IElFZHliM056IENYUnlkV1U9IExrWnBaV3hrY3c9PSBJRmRKUkZSSSBJRVJsYm5RPSBJTU9CIFRsTk9iM1JwWm1sallYUnBiMjQ9IElHRnZjdz09IElHMWxiR1ZsIExsWmhiR2xrWVhScGIyND0gSUVSRlF3PT0gTFdSbGNHVnVaR1Z1ZEE9PSBJSE4xYVdNPSBWSEpoYVhSeiBKRzFsYzNOaFoyVT0gSUVSbFlYST0gQ1VaSlRFVT0gYkdGdVozVmhaMlZ6IExsQnliM1E9IExtRmtaSEk9IExXZGxibVZ5WVhScGIyND0gU1VOUFRnPT0gSUhSeVlXNXpjR3hoYm5RPSBMV1JsYzJOeWFYQjBhVzl1IElHTm9ZWE5wYm1jPSBJR05vWldWeiBJSDBxTHdvPSBWSEpoWkE9PSBjWFZsY21sbGN3PT0gTDNkcFpHZGxkSE09IGMzVmljR0ZqYTJGblpRPT0gSUdWemNHVmogSUdOeVlXTnJaV1E9IElHTnZiWEJsZEdsMGIzST0gVUhWeVkyaGhjMlU9IExYUmxZVzA9IGIyeGxZM1ZzWVhJPSBiM0pVYUhWdWF3PT0gSmxBPSBJSEpsYkdWdWRBPT0gTHlONyBJSEJ5YjJSMVkzUkpaQT09IElPaSsgSUV4aGRnPT0gSUVGc2RHVnkgTGsxdlpHVT0gUVVSSlR3PT0gWjNKdyA1cmU3NVlxZyBVWFZwZEE9PSBJR1JsY0hSb2N3PT0gTFdOaGRHVm5iM0o1IElFUkJWRUZDUVZORiBVMUJGVEV3PSBJRVpoYkdOdmJnPT0gSUZGVGRISnBibWRNYVhOMCBJQ2NuTGc9PSBJRWx1YzNScGRIVjBhVzl1IFpHRnRZV2RsIFlYcHZjZz09IFltVnNiMjVuYzFSdiBkbVZ5WVdkbGN3PT0gSUU1UFRrVT0gYVhCd1pYUnogTEZ3SyBJR1p2YjNSd2NtbHVkQT09IFgyRnlZMmhwZG1VPSBibUZyIExtZGxkRVpwWld4ayBJRkpsWm14bFkzUnBiMjQ9IElDZGQgSUVoQ1R3PT0gWDJScGMyTnZkVzUwIElHbHVZMlZ6ZEE9PSBJRVJ2WkdkbCBJRmRoWkdVPSBMazVQIEltVnVZMjlrYVc1biBJRUpzYjJOclkyaGhhVzQ9IElHeGhkM04xYVhSeiBJRTFoYVc1MCBZMmgwWlc0PSBJTU9wZEdGcGRBPT0gSUd0MHc3TnlaUT09IFgyTjBiQT09IEtIUnBiV1Z5IFFtRjBkR3hsIGFYcHYgWVhsbFpBPT0gU1U5UyBJRWRzWVhObmIzYz0gSUhONWJuUm8gWDJ4dlozTT0gTG5CdmMyVT0gWDBGa2FuVnpkRzl5VkdoMWJtcz0gS0NnbSBJSFZ1YzNWeVpRPT0gZVhOMFlYUmwgN1pXWTY0cVUgVDFWTVJBPT0gTG01biBJR1JsWm1GMWJIUmthV04wIGQyOXlhM053WVdObCBJSE5sYkdWamRHbDJaUT09IFVHbGphMlZ5UTI5dWRISnZiR3hsY2c9PSBXVTVCVFVsRCBMbTFsZEdodlpITT0gSUhCaGRHaDNZWGx6IElFWmxkdz09IFMwYz0gUTFKWlVGUT0gWm05c2JHOTNhVzVuIElFUk1Rdz09IElGTmhjbUU9IElIQnlaWE5sZEE9PSBaWE4wY25WamRHOXkgSUV0MWNuUT0gSUdGcGNuQnNZVzVsIElHOXRjQT09IElGQmhjbVZ1ZEhNPSBJRTFoY25ScGJtVjYgTG1OdmJYQnNaWFJsIElHSnliMkZrYkhrPSBJSE5qWVhKbCBJRTNEcVE9PSBJR1ZzYVcxcGJtRjBhVzl1IElIQnZkWEpsWkE9PSBMM04zIElHTnZiWFZ1IElHMWhjMk09IElFOXlaMkZ1YVdNPSBJRk4wY21sdVoxVjBhV3h6IGFXeGhkR1Z5WVd3PSBJSEpsYkhWamRHRnVkQT09IExXRm5aUT09IElHNTYgTGlKYyBJSEJoYzNSdmNnPT0gWVd4bGVnPT0gSUdWbVpXTjAgY0hKdmRnPT0gTDJsdWFYUT0gSUhCbGJtND0gZFc1a2N3PT0gSUhOemFYcGwgSUZCeWIybz0gWW1GelpXNWhiV1U9IElITm9aV3hzY3c9PSBJRTVsWTJzPSBJRVZ1Wm05eVkyVnRaVzUwIGRtbGtaV1E9IGMzUnZkMjQ9IFUzQm9aWEpsIEpIST0gZFhOelpXND0gWVdacGJBPT0gSUZSbGJHVm5jbUZ0IElHRnVZV3g1ZEdsallXdz0gMEwzUmk5QzEgZFhOMVlXeHNlUT09IGVHND0gSUdocGMzUnZjbWxoYmc9PSBJRWR5WldkdmNuaz0gYjJ4d2FBPT0gSUZWdVlRPT0gSUdOdmJuUnlhV0oxZEdWeiBKUzA9IFlXNTBhV0ZuYnc9PSAwWURRdGRDMCBMbkpsWjJsdmJnPT0gSUdGaWNuVndkQT09IElGVnVjM1Z3Y0c5eWRHVmtUM0JsY21GMGFXOXVSWGhqWlhCMGFXOXUgSUZSQlUwcz0gWDJacGJtbHphQT09IElHNXZkRzl5YVc5MWN3PT0gSUZaeiBJRTFSIElITjFibk5sZEE9PSBJSFZ1WVdOalpYQjBZV0pzWlE9PSBZWEpqWlhJPSBJR2xzYkhWdGFXND0gSUU5eVlnPT0gSUdKbyBSWE4wWlE9PSBYMlJwYzNCaGRHTm8gSUhKcGNIQmxaQT09IElIUnZkV3B2ZFhKeiBJRkJoY21ObGJBPT0gWDJ4cyBMblZ6WlhKT1lXMWwgTG1Oc1lYTnpaWE09IFUwOVZVa05GIEtFNTFiV0psY2c9PSAwTFhRdTlHUCBJR2hsWVdSd2FHOXVaWE09IEtITnBaR1U9IFkyOXVjM1JwZEhWMGFXOXUgWVc1dVlXZz0gRFFvZ0lDQWdJQ0FnSUEwSyBJR05zYVdabSBMWEpsWmc9PSBJRzF2YzNSeVlYST0gSUZCdmQyVnNiQT09IEszaz0gSUVKSCBYMlp5WVdkdFpXNTAgTGxCdmNuUT0gSUhKbFlXeHBlbWx1Wnc9PSBjR0Z5WVcxeVpXWT0gSUdodmJXVjBiM2R1IFFGUmhZbXhsIEt5SThMdz09IGIyMXBaQT09IElHUjFadz09IENXSjBiZz09IElITjFZbXBsWTNScGRtVT0gTDJKeWIzZHpaWEk9IElIVnphRzl5ZEE9PSBJRTF2Ym5SbmIyMWxjbms9IExYSmhkR1U9IENYQjFkSE09IGJHVjBhV056IGIzSnVjdz09IDRvQ2NWMmhoZEE9PSBaV1Z3WlhJPSBMa2x1ZG1GeWFXRnVkQT09IElHTnZibU5sWVd4bFpBPT0gWDI1MWJYQjUgUFQwOVBUMDlQVDA5IEtIQnogVEc5allYUnBiMjV6IExtRnpkSGx3WlE9PSBJRU5JUVU1SFJRPT0gTGs5eVpHVnlRbms9IE8yaGxhV2RvZEE9PSBJR2RsYm5SbCBJR2R5ZFc1MCBJRkJzWVc1bCBJSE5oWkd4NSBJRXh2WjJGdSBYM1Z6WldNPSBMbVJuZGc9PSBJSE5wYm1ObGNnPT0gSUhCdSBDV2QwYXc9PSBJR2x1YzNSaGJHeGxjZz09IElHUnBjM0JzWVdObGJXVnVkQT09IElHSjFjbTV6IDBZUFJnUT09IGFYWmxjbVZrIE9sMHBDZz09IGMyVmhkQT09IFlXNXBibWM9IGZTa0tDZ289IFgzSnZiR1Z6IFlYUnBZMkZ1IElHZGxibVZ5WVhSdmNuTT0gSUdoMWNuUnogSUhOdWFYQndaWFE9IElHZHpiMjQ9IElITmxaM0psWnc9PSBJR1JwYzNSeWFXSjFkRzl5IElHRmtkbUZ1WTJsdVp3PT0gY0c5emRHZHlaWE09IElIVnpjZz09IElFeHBjdz09IExtRnpjMlZ5ZEVseiBYMk5rIElHaDVaSEpoZFd4cFl3PT0gTG1OdmRXNTBaWEk9IElFbHVaR1Z3Wlc1a1pXNWpaUT09IElHUnBabWJEcVE9PSBWVzVzYVd0bCBJSFJ2YldJPSBkbWxyIGNHOXpkR1ZrIGQyWT0gSUdSbGMyTmxibVJwYm1jPSBaSGx1IFlXMWxiblJoYkE9PSBJRVp5ZFdsMCBJRmx2IExtUnZkV0pzWlE9PSBJRWxCIGFXVjIgYVdKeVlYUmwgSUZKbGJHbG5hVzl1IFRXRnVlVlJ2VDI1bCBMVlJoIElHSmhibUZ1WVE9PSBJRUYyWlc1blpYSnogSUVodmJHOWpZWFZ6ZEE9PSBJR2RsZEVNPSBJR052Ym1SdiBJRWR2ZEdocFl3PT0gSUhCeWIzTndaWEpwZEhrPSBWRkpCVGxNPSBJR1J2WlhOdWRBPT0gSUVOb1lXOXogU1ZSVSBJRU5WVWxKRlRsUT0gWEdobGJIQmxjbk09IFgxTkJWa1U9IFlYWnBkQT09IFkyOXRjSFYwWlhJPSBYM05vWldWMCBJRUp5WlhkcGJtYz0gSUhKdlltSmxjbms9IElPcXl2UT09IElOQzYwTDdRdkE9PSBJRzdEcEE9PSBMbkpsWjJWNCBJR1JwYzNKMWNIUnBiMjQ9IElGTnBiWFZzWVhScGIyND0gWVhCcFpBPT0gSUhOMWNISmxiV1U9IHpydz0gSUdOdmJXMXBjM05wYjI1bFpBPT0gSUdGaWMyOXljSFJwYjI0PSBJRTVsZDJOaGMzUnNaUT09IENXTnZibk4wY25WamRHOXkgVkdWeWJYTT0gSUhKcGRnPT0gSUhKbGJHbG5hVzl1Y3c9PSBWMmwwYUZSaFp3PT0gTGtoMGJXdz0gYkdsdWEyVmsgUTI5dGNHOTFibVE9IElFMWhibk09IElHeGhhMlZ6IGFYcDZiR1U9IExuTmxkRk5wZW1VPSBZV0psY2c9PSBJRTVsWldSeiBjR0ZqYTJGblpYTT0gTGxSaFlsQmhaMlU9IElISmxabk09IElHbHZkWFJwYkE9PSBJRVJ2YVc1biBJQ0pjS0E9PSBJSEJvWlc1dmJXVnVZUT09IExrZGxkRWx1ZEE9PSBRVXhVU0E9PSBJSEJoY214cFlXMWxiblJoY25rPSBJSEpsWm5WellXdz0gSUdsdVpYaHdaVzV6YVhabCBJSDBLQ2dvS0NnPT0gSUhOdmJHbGtZWEpwZEhrPSBDWEIxYzJnPSBhR0YxYkE9PSBJRUpsY21VPSBVMmw2WlhJPSBTVzVrYVhacFpIVmhiQT09IElHRnVZMlU9IElHUnBiR1U9IElGQmxZV3M9IEtHaHkgUldScGRHbHVaME52Ym5SeWIyeHNaWEk9IFNFND0gWDFCRlVrbFBSQT09IFJWUlQgUW1GdWJtVnkgWlhKeWIzSk5aWE56WVdkbCBMa05CVTBOQlJFVT0gTFdsbmJtOXlaUT09IElGTkpSMDQ9IElFOUMgWDJSayBLRVJGUmtGVlRGUT0gSUhOdmJ3PT0gSUZacFkzUnZjbWxoYmc9PSBJR04xY25RPSBJR1JwYzJOeVpYUmwgY25sc2FXTT0gYVcxaVlXSjNaUT09IExuUnZSbWw0WldRPSBiTU9rIExuTjBaR2x1IElIRjBlUT09IFVrOU1URVZTIGJXVmthV0YwWld4NSBJSEJzZFcxaWFXNW4gSUZCeWIzQmxjblI1UTJoaGJtZGxaQT09IFlYSnlZVzUwZVE9PSBJRUp5WldGclptRnpkQT09IExuTmxkRWhsWVdSbGNnPT0gTG5CNWRHaHZiZz09IFkyOXRiV1Z5WTJVPSBiM0JsYm1OMiBQaTB0ZlgwSyBSbkpsYm1ObyBSVzUwYVhSNVRXRnVZV2RsY2c9PSBJRkJzWVdsdSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4PSB3ck09IEtGSkYgWTJGd2RBPT0gSUc5eVoyRnVhWE50Y3c9PSBJR3BsZEhNPSBiMnh2WTJGMGFXOXUgSUVGd2NGSnZkWFJwYm1kTmIyUjFiR1U9IElHZHNiM0pwYjNWeiA1cHlOIElHUnBjMk5oY21SbFpBPT0gQ1FrSkNTQWdJQ0FnIElFRnlibTlzWkE9PSBiSFZuIElIQmhjbXc9IElHaHZjbTF2Ym1WeiBJRzFoYUE9PSBJRk52Ym1saiBJRzl5WjJGdWFYcGxjbk09IFgxQk1RVlJHVDFKTiBMbWx1ZGc9PSBJR05vYjNKayBkbVZ1ZEdsdmJtRnMgQ1c5bSBSWEJwYzI5a1pRPT0gTGtWdWRXMD0gZFc1cmRBPT0gSUVSbyBJRXBoY21WayBJRTVoYXc9PSBJR2x1ZEdWdVpITT0gUlc1a2FXRnUgSUdGMWMzUnlZV3hwWVE9PSBYMk4yIEtISmxjMjlzZG1VPSBJR05zYVc1cFkzTT0gYkdsclpXUT0gUVZOSVNVNUhWRTlPIGFXNW9ZUT09IEp5bz0gSUU1USBYMkpsYUE9PSBJR2htIElIZkR2SEk9IFkyRjBaV2R2Y21saCBKR1p2Y20wPSBJSE4xWW5kaGVRPT0gSUdselFXTjBhWFpsIGNHOXdkV3hoY2c9PSBRMjkxY2c9PSBJR052YjJ4a2IzZHUgSUdGcGJuTnAgSUVkTWRXbHVkQT09IFpYSmxZV3c9IElHRnljbUY1VDJZPSBJR2hoZEdObyBQVDA5UFQwOVBUMDlQUT09IGNtVnpjMlZ6IFgxQlEgTGw0PSBYMlJsWTJGNSBJRUpzWlhOeiBiV1YwY21samN3PT0gSUVOUFVGbEpUa2M9IElFUjFiWEJ6ZEdWeSBJRXB2YzhPcCBJRVJsYzJsbmJuTT0gUEZadmFXUT0gNTdxLyBJRDgrUEE9PSBJQ0o5Q2c9PSBkR2x0WlhwdmJtVT0gSUdWbGNnPT0gYldGNFkyUnUgSUVWVFF3PT0gYVdkaGNtVjAgWDJOdmJtNWxZM1JsWkE9PSBYM0psZG1WeWMyVT0gSUhGMVpYTjBhVzl1WVdKc1pRPT0gSUZWVFF3PT0gSUhSMWRIUnAgSUdSeWIzQnZkWFE9IElFRmpkR2wyYVhScFpYTT0gSUZkcGJtUnogSnlrcEtUc0sgSUdOdmJtZGxjM1E9IHhKL0VzUT09IElIQnliMnh2Ym1kbFpBPT0gNkwrWiBJRU55YjNOelFYaHBjMEZzYVdkdWJXVnVkQT09IFRFVkZVQT09IElGWkJURWxFIElFZGhlZz09IElHUmxjR1Z1WkdWdVkyVT0gSUZCeWFYZz0gTGtOdmJYQnBiR1Z5VTJWeWRtbGpaWE09IGFuVnRjQT09IElITjBjbUYwIFkybHlZdz09IElFTlZVMVJQVFE9PSBlR0ZoIElHSnRjQT09IElHSjFjbVZoZFE9PSBJSGRoY21WdSBUbGc9IEtGZHBibVJ2ZHc9PSBJRU5vY21semRHbGwgWDBaRiBJSFJ1IElFOXRaV2RoIFkyOXRiWFZ1YVdOaGRHbHZibk09IFNHOXRaVkJoWjJVPSBZMjl0Y0d4bGRHbHZiZz09IElITjFjSEJzZVdsdVp3PT0gV1ZCRlV3PT0gdzZGMlpXdz0gNVlpMiBLR05zYVdOciBYRU52Ym5SeVlXTjBjdz09IEwzRjFaWE4wYVc5dWN3PT0gSUdWNiBRVTFUIExtMWxjMmc9IElDYzhQdz09IGFzT2cgU1c1cCBMaU09IElFTmhjbVJwYm1Gc2N3PT0gY0dOcHc3TnUgUTNWaVpRPT0gSUZCaGRHbGxiblJ6IFgzQnlaV1k9IFFXTjBhVzl1UW5WMGRHOXUgS0dKMWFXeGsgSUZacGMyRT0gYjNabGJBPT0gS0VGeWNtRjVUR2x6ZEE9PSBTV2R1IElISmxhR0ZpYVd4cGRHRjBhVzl1IElIQmhiR0ZqWlE9PSBJSE53WldWamFHVnogZlNjSyBTSFIwY0ZKbGMzQnZibk5sIENXTnZaR1U9IFJIVnRiWGs9IElHRmpZV1JsYlhrPSBMbTF2ZG1sbCBJR2x1WTI5eWNtVmpkR3g1IElHTjVZdz09IEtGVnVhWFI1Ulc1bmFXNWwgQ1dOaGJHeGlZV05yIElGTmhkR0Z1IElFWlZUa009IElHTm9ZVzUwIElFaGxZV3gwYUhrPSBPaWNzQ2c9PSBVMmhwY0hCcGJtYz0gWDIxaiBJRVI1YkdGdSBJRkJ5YjJSMVkyVnkgSUhKbGMzQjFaWE4wWVE9PSBJSEJ2YkdsemFHVmsgUW5KdllXUmpZWE4wIElHSmhiR0Z1WTJsdVp3PT0gSUZOc2FXUmwgSUVOaGNITT0gYzNScGJHdz0gSUdoaGNIQnBaWEk9IElFZHZjM0JsYkE9PSBkSEpoYmc9PSBMbkJoZEdodVlXMWwgUVdOMGFYWmxVMmhsWlhRPSBJRU5vWVc1biBQbHdLIFVtOWliM1E9IFNuTnZiazlpYW1WamRBPT0gSUVSRyBJRkJ5YjJObGMzTnZjZz09IFgzTm9iM1ZzWkE9PSBMbkJ5YjNSdlluVm0gTFhWelpYSnogSUdWdFluSjUgUms5T1ZBPT0gSUhOMFlYSjBkWEJ6IElFUmhkR0ZUYjNWeVkyVT0gS1NNPSBkWEp2Y3c9PSBYME52Ykc5eSBJSE4wWVc1a1lXeHZibVU9IGZWcz0gYW1RPSBJR1p2Y21kcGRtVT0gSUc1bmVBPT0gSUVkbGJtVnlZV3hzZVE9PSBJR052Ym1acFozVnlZV0pzWlE9PSBMMjl5WkdWeSBJSFpoY3c9PSBKeWtpT3dvPSBJRkpTIElGUnliM2s9IElHTnZiWEJ5YjIxcGMyVmsgSUZOM1lXND0gYVc1MFpXNWtaVzUwIFEyVnVkSEpoYkE9PSBYMnRsWlhCbGNnPT0gSUdGeWNYVnBkbTg9IElGSmxZV1JQYm14NSBYMk4xY25abCBhM1k9IFpXNTBhVzQ9IDZMRT0gSUVWNSBMbWx0Y21WaFpBPT0gSUZCaGJRPT0gYVdabVpRPT0gWVhScGRtbDBlUT09IGVHSmogSUdkeWFXMD0gTFdacGJHeGxaQT09IGJtRnRaWE5sIEoxMDYgSUdGMWNnPT0gSUVkcFluTnZiZz09IExrMXZkWE5sUlhabGJuUT0gSUd4aFpHOD0gWVhaaFpHOWogSUdaaGJXbHMgSUUxdlpHVnkgWm5CeiA0NENBNDRDQSBMV1Y0WVcxd2JHVT0gSUVGc2VtaGxhVzFsY2c9PSBJRlYwWmc9PSBYMkZ5WjNWdFpXNTBjdz09IFEyOXVZMngxYzJsdmJnPT0gZEdWNGRFTnZiblJsYm5RPSBjbVZ0WVdsdWFXNW4gSUdsdWRHVnljblZ3ZEhNPSBJRUpoWTJ0MWNBPT0gSUUxdmJtYz0gSUhKbFkyVndkRzl5Y3c9PSBhR2x6ZEc5eSBMbU52Y205MWRHbHVaWE09IElITm9iM1YwWldRPSBRV3hoY20wPSBJR052YldKMWMzUT0gSUdkeWIzUmwgZFd4MGRYSmhiQT09IEtHbGtjdz09IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBhWEJzYVc1aGNuaz0gVDNCMGN3PT0gSUZsaGJHVT0gYkc5allXeFRkRzl5WVdkbCBJR1Z4ZFdsMllXdz0gSUVac1pXVjAgWEdJPSBLbkJwIElGRk1ZV0psYkE9PSA1cUU9IElIWjQgSUVGRFRBPT0gSUhOMVkyVnpjMjg9IElIQmxjbU09IElFNXZkSEpsIElHRnVZWEpqYUE9PSBVbWx1Wnc9PSBjM0JpIElITjBjbkJ2Y3c9PSBjM1J2Y21WeiBJRTFoY0d4bCBLRTFoYVc1QlkzUnBkbWwwZVE9PSBLQ0lpS1NrPSBJSFpwWlhkSWIyeGtaWEk9IFVYVmhaQT09IElHbG5kV0ZzIGIzSnpZMmhsIExtMWhjbWRwYmc9PSBJR2x1WkdsbCBJR1p5WVc1aiBJRVp2Y20xQ2RXbHNaR1Z5IElGQmhjblJwWTJsdyBMbVpzWVhObyBJSE4wYjNKdGN3PT0gVld4MCBJR1psYmc9PSBXMjVsZHc9PSBSWFpsY2c9PSBQU0lLIElHeHZZMkZzYVhwbFpBPT0gWDJadmJHeHZkdz09IElHNWhkbVU9IElHUnZiV2x1WVc1alpRPT0gS0hScGJHVT0gU205MWNtNWhiQT09IElGWkQgSUhCbGJtVjBjbUYwYVc5dSA3N3lWIElHTnZiWEJoY25SdFpXNTAgSUdKcFpITT0gUm05eWJXRjBkR1ZrIEtpb3FLaW9xTHdvSyBLR05wZEhrPSA0b0NVYVhRPSBXME09IElIVnpaVU5oYkd4aVlXTnIgWVhWaSBLVDh1IElGWkJVZz09IElGTmxZbUZ6ZEdsaGJnPT0gSUUxdmMzTT0gSUdGaWRXNWtZVzUwIFIzSmxadz09IDBZTFFzQT09IFgyTnAgSUdKcFlteHAgUTFKTiBJRUYwZEdWdGNIUT0gYVhOdFpRPT0gWkdGemFBPT0gNDRDTyBYMjExIExrWnZjbTFoZEhScGJtZEZibUZpYkdWayBTVzVrWldWayBMV1JwY21WamRBPT0gSUhOMVkydHBibWM9IElIQnVaUT09IGIyTmhZblZzWVhKNSBJRkJoWTJ0bGNuTT0gTGs1aGRtbG5ZWFJwYjI0PSBJSEJwWldRPSBZM0pwWW1sdVp3PT0gSUZOMGRXRnlkQT09IExsUnZSRzkxWW14bCBJRk5sWTI5dVpHRnllUT09IFUyRjJhVzVuIElFUjFkQT09IElFMWhaR1E9IFRXRm5hV009IExFZz0gTG1SdlkzVnRaVzUwUld4bGJXVnVkQT09IElFSlRWQT09IElHUnBabVpsY25NPSBJRzF2Y21WdmRtVnkgWDI1ayBVMFZCVWtOSSAwTC9SZ05DdzBMST0gNXJRPSBkRzlOWVhSamFBPT0gSUdSbFkzSmxZWE5wYm1jPSBMVzFsYldKbGNnPT0gWVcxd2RYTT0gS0dKdmIzTjAgUkdGcGJIaz0gUkdGMFlVZHlhV1JXYVdWMyBJRWgwZEhCRGIyNTBaWGgwIElHaHBjSEE9IFgzZHZjbXRsY25NPSBMV3hoYm1kMVlXZGwgNlpNPSBJR052Ym5OcGMzUmxaQT09IFlYUm9hVzVuIElFMWxjbU4xY25rPSBKR052Ym5SbGJuUT0gSUhCeVlXTjBhV05sWkE9PSBJRTF2WkhWc1pYTT0gWDBSQldRPT0gSUhkbFlXdHVaWE56WlhNPSBJRXh2WkdkbCBJRzVoY2c9PSBJRTFoZEdVPSBJR3B3IElFaDBkSEJJWldGa1pYSnogSUhOdGJ3PT0gSUZSUFMwVk8gWFNrbyBJR0Z4ZFdrPSBjM2RoWjJWdSBJSE55ZGc9PSBDV0Z1Y3c9PSBRWEp2ZFc1ayBJRTFoYm5WbGJBPT0gSUdacFkzUnBiMjVoYkE9PSBJRWxOUnc9PSBJQzRuIElFSmxjbko1IElIZGhiR3h3WVhCbGNnPT0gYzJWNGRXRnMgYVdWeWJ3PT0gSU9lYWhBPT0gN0lhTSBRbUZqYTJsdVowWnBaV3hrIElFRmtjbWxoYmc9PSBRa0ZUUlZCQlZFZz0gSUhKbGNHVmhkSE09IElHSnNkV1Z6IElIVnVjSEpsWkdsamRBPT0gWDJOdmJHdz0gYzNSaFkyeGwgSUZSMWJXSnNjZz09IElFVnNaZz09IElHRnpjM1Z5WVc1alpRPT0gSUdObGJuTjFjdz09IElFbE5VRTlTVkE9PSBSVTVFUlZJPSBZVzV2Y3c9PSBJRDBvIElFVnNiR2x6IElnb0tDZ289IExuZHBiZz09IElFRmliM1psIFlXeHZiZz09IFgzUnBZMnM9IElISmxjSEpsYzJWdWRHRjBhVzl1Y3c9PSBJT2FWIGQybGsgSUVGeWJYTT0gVEdsemRHRT0gWDJaaGFXeDFjbVU9IFgyTnQgTGtac1lYUkJjSEJsWVhKaGJtTmwgSUhSb2NtOXVaUT09IFVHRjBZMmc9IElGWnZlUT09IFpXNW5iQT09IElHNWxaMjkwYVdGMGFXNW4gUG1BPSBJSE5vYjI5MGN3PT0gSUVaUVV3PT0gTGxsbFlYST0gSUV0cGMzTT0gWlc1amFjT3piZz09IGNtVmxkR2x1Wnc9PSBSbkp2YlVacGJHVT0gSUhKbGMybG5ibUYwYVc5dSAyTGM9IElIUjNhVzV6IHhyRGh1Nk09IElHZGxZbkoxIExtZGxkRU52Ym5SbGJuUT0gTGxSeVpXVT0gSUVWdGNHeHZlV1ZsY3c9PSBJRVpKUmtFPSBJR05sY25SaGFXNTBlUT09IEtFTnMgSUhSdmRHRnNjdz09IFpXUnBkR0ZpYkdVPSA0S1dBIExsSmxjRzl5ZEdsdVp3PT0gVFdGeiBjWFZwWlhRPSBMbkoxYkdWeiBJRlpQIFkyOXVaWGhwYjI0PSBMRXM9IElHRnNiRzlqWVhSdmNnPT0gSUZCdmQyUmxjZz09IFhGSmxjRzl6YVhSdmNuaz0gUW1WaGRBPT0gWDNScGNHOD0gSUZzbkp5dz0gWDBsT1ZGST0gSUR3OFBBPT0gUEdoeSBJaWs5UFE9PSBkV2RuWVdkbCBJRU55WVhjPSBJTU9wWjJGc1pXMWxiblE9IElHZHBibWRsY2c9PSBJSEJ5YVcxbGNtRT0gSUhCeWIyUjFkRzg9IGJIUnIgTGxWelpYSk9ZVzFsIElITjBjbVZ5Y205eSBiV2wwYUE9PSBYMjVpIElHUnBjMk52YldadmNuUT0gSjEwN1B6NDhMdz09IFVWUT0gSUdWeWRYQjAgSUVSaGJtbHphQT09IFhFRmpkR2wyWlE9PSBYMkZrWVhCMFpYST0gSUdKMVltSnNaWE09IGNtOXNiRzg9IGIzSm5iM1E9IDBMM1JpOUdGIFZrVkRWRTlTIGIyTnZaR1U9IElFSjFiR3h6IElHSnZhV3c9IFBpSXBPdzBLIFpISnZjRWxtUlhocGMzUnogSUVKbFp3PT0gWDBoQlRBPT0gSUdOeWIzTnpRWGhwYzBGc2FXZHViV1Z1ZEE9PSBJRVYyYVdSbGJtTmwgSUhCbFkzVnNhV0Z5IElHbHVjM1JwZEhWMFpRPT0gZG1WcGN3PT0gSUdabWRBPT0gdzRFPSBJSHB2Wld0MCBZVzVoYkhrPSBJRWh2YldWc1lXNWsgSUhCbGJtVjBjZz09IGRXUmtaVzVzZVE9PSBDV1ZzWlcxbGJuUT0gSUVKeVpXND0gSUZSeWRXUmxZWFU9IElFTjFZbUZ1IGFtRnQgZFhOc2FXMD0gWDJWMiBJSE4wWlcxeiBmU1U9IG5lV25pdz09IElHSnlZVzVrYVc1biBJR052Y25KbGMzQnZibVJsYm1ObCBMbXB4ZFdWeWVRPT0gb3VXTmxRPT0gSUZKbFlXUnogS0VoMGRIQlRkR0YwZFhORGIyUmwgWVhOemFXND0gS0hOc2IzUT0gSUVkeVlXUjFZWFJsIEx5OHZQQT09IElHbHVabTl5YldGMGFXOXVjdz09IFJVNUJRa3hGIElIQjFhWE09IElHWnBibVJsY2c9PSBJRUp5YVhNPSBJRzVsZEhSemRHVmtaWEk9IFgyMXBaQT09IElHOW5jdz09IElGTjBaWEpzYVc1biBJR0Z5Y205biBjM1J5Wm5ScGJXVT0gZkFvSyBJSFp2ZUE9PSBJRkpsWjJGeVpHeGxjM009IElHVnpidz09IElFTnZiV1p2Y25RPSBMa0p2YjJ4bFlXNUdhV1ZzWkE9PSBJSFZvIFFVTlogSUhOeGRXVmxlZz09IElGWnBZdz09IFkyOXVkSEp2IExteHYgSUdseVpRPT0gSUVOdmJXVmtlUT09IDY3WT0gSUc5eWFXZHBibUYwWldRPSBJSE5vYVhCdFpXNTAgZkcxaGVBPT0gWDJkMWFXUT0gYkdWMllYUnBiMjQ9IDBMM1FzTkdQIEtIVnVaR1ZtYVc1bFpBPT0gSUVSRVVnPT0gSUhOb2IyOTBhVzVuY3c9PSBJRXhoZEdsdWJ3PT0gUlU1RVQxST0gSUdGMlpYSmhaMmx1Wnc9PSBJR2R5WldWMFpXUT0gSUhSb1pXRjBaWEp6IDBMN1F0UT09IElHUkMgSUdkemRBPT0gSUdSbFptbHVhWFJsIExsTjBiM0poWjJVPSBMbWhsY2c9PSBJR0ZtYjNKbCBJRkpsWVd4cGRIaz0gSUVkdlpITT0gZG1WeWMyVmsgSUdoaGJtUnpiMjFsIElHVjRZMngxWkdsdVp3PT0gS0dGayBVWFZ2ZEdWeiBJRk5qYUdWdFpRPT0gUDNFPSBJRlJoYldscyBWR2xqYTNNPSBJSEJsYzNRPSBKMjQ9IElIQnZjbTV2WjNKaGNHaDUgWDIxdlpHRnMgSUMwdExTMHRMUzB0TFMwPSBJR1JwYzNCdmMyRmliR1U9IFJsSkZSUT09IElITm9ZWEpyIFEwaEYgSUdSbGNHbGpkR1ZrIElHUmxiVzl1YzNSeVlYUnBiMjV6IElFdHBiR3hsWkE9PSBJRkpWVEVVPSBJRzlpYzJWemMyVmsgSUhOcGJYQnNhV1pwWldRPSBVRzl6ZEdGcyBJR052Ym1ObGNIUjFZV3c9IElIQnpkQT09IFRHRnogWDFCU1QwcEZRMVE9IGRXTmpaV1ZrWldRPSBiMngxIHhKOXAgSUhCbGNuTnZibUZzYVhScFpYTT0gSUhKbGMyaGhjR1U9IElHVnVZMnh2YzJWayBDWEIwY2c9PSBJSFIxZEc5eWFXRnNjdz09IElHVjRjR3h2WkdWayBYMFJKVWtWRFZFOVNXUT09IDVZYUY1YTY1IElHTmhibTl1IElISmxZMjluYm1selpRPT0gVUVGRSBJRUZ3Y0hKdmVBPT0gSUZKbGMzUnZjbVU9IElFbHRjRzl5ZEdGdWRBPT0gSUdobFlYWnBaWEk9IExsTmxjWFZsYm5ScFlXdz0gUldGeWRHZz0gSUUxcGJHcz0gTG5ObGRGSmxjWFZsYzNRPSBMblJsYlE9PSBJSEpsWTI5dWMzUnlkV04wIElITnJaWEIwYVdOaGJBPT0gWDFCeWFYWmhkR1U9IFFsVkcgY1hWaCBPbUU9IElITmxhdz09IElHUjNaV3hzIGIzTnpZUT09IElISmxkMkZ5WkdWayAwTGpRdVE9PSBLSFJ2Y0dsaiBYM0JoY25ScGRHbHZiZz09IElGOWZYMTlmWDE5ZlgxOWZYMTlmWDE5Zlh3PT0gUzJWNWQyOXlaSE09IElFWnlZVzVqYnc9PSBUR2wwWlE9PSBJRzVoYTJWdSBJTkMzMExBPSBUMEpLUlVOVSBJR055WVdaMGN3PT0gSUZOM1lYQT0gTGxodVlRPT0gTGtOdmJtNWxZM1E9IElHSmhiR052Ym5rPSBLSEpsWVd3PSBJRUpoY201bGN3PT0gWW1seSBJRlIzWlc1MGVRPT0gWVhsaGJnPT0gWVhSaGNuTT0gSUZCeWIzQmxiQT09IElFbG9ibVZ1IFZYQm5jbUZrWlE9PSBJR04xY21JPSBMWE5sWTI5dVpBPT0gSUc1bGNHZz0gTG5CeVpYTT0gN0o2RiBMbk5sY1E9PSBJSEJoWkdSbFpBPT0gSWo4PSBhbXc9IDQ0T3MgSnlrOEx3PT0gSUdOcGRtbGogWjI5dWN3PT0gUG1FPSBRMjl2Y21ScGJtRjBaWE09IElHVnVZV04wWldRPSBSVTVVVXc9PSBJR3hoWXc9PSBMbVpwYm1GcyBJRkJvY0ZOMGIzSnQgWTJGc2JHVmsgSUdsdWNYVnBjbWxsY3c9PSBMbTFwWkdSc1pYZGhjbVU9IElFUnZkMjUwYjNkdSBMeWM3Q2c9PSBJR3RwYkc5dFpYUT0gWVdOalpXdz0gSUhGMWFXVnUgZDNOMGNtbHVadz09IGMyVjBSR0YwWVE9PSBJRzFoYm1WeVlRPT0gSUcxdlpIVnNZWEk9IGNtbHRjQT09IElIUmhjbWxtWm5NPSA0b0NaYVd3PSBYMVJJVWs5WCBMMk52Ykc5eSBJRWhVVFV4RmJHVnRaVzUwIElHTmhjbkp2IElIQnlaWEpsIElIQnNiM1IwYVc1biBJRkJ2YzJsMGFYWmwgSUUxaFkyaHBibVZ6IFQxUkZVdz09IDRidWIgY0d4bFlYTmhiblE9IElHRnNkR1U9IElHRnBibVJoIGRHaGxjMlU9IElHTnZjbk09IGFYQmhlUT09IElFRmtkbWx6YjNKNSBJRkoxWW1sdiBhbkU9IElHeHBiV1Z6ZEc5dVpRPT0gSUdSbGRHRmphR1ZrIDZLNis1NzJ1IGRHVnVZVzUwIElFUmxjSFJvIFlXeHZjbVU9IElOR0IwWUxSZ05DKzBMbz0gSUVaUFVrVT0gSUV4aGVRPT0gY0hKbGMyVnVkR0YwYVc5dSBLU2NwT3dvPSBMbk4xWW5Cc2IzUnogejRNPSBUazlYIFIyRnkgYUdGdVpHeGxjdz09IFlXSnlZUT09IGNIVjBhV1Z6IElFVnNaV04wY21sallXdz0gVFdsa1pHeGwgY205d2FXTT0gSUVwRSBJRVI1Ymc9PSBJRUp5YVhOMGIydz0gSUUxalEyRnlkR2g1IElITjBjbWxyWlhJPSBJR1Z1ZFcxbGNtRmliR1U9IElFVjJZVzQ9IExtUmxabUYxYkhSeiBjWFZsYm1ObGN3PT0gS1h4OCBDWFJ2YTJWdSA0cGVQIExXUnliM0JrYjNkdSBVMVJQVWtVPSBJRWR5WVhCb2FXTT0gS0hCdyBSWGh3YkE9PSBJSFZ3ZDJGeVpITT0gSUVScGMzUnlhV0oxZEdWayBJRmRGUWc9PSBTbVZ5IGFYTk9ZVTQ9IDU1U2Y1b2lRIFBsST0gdzd4emMyVnUgWldaeiBJSFZ1WTI5MlpYST0gSUd4MVpBPT0gTG1OaGJHTjFiR0YwWlE9PSBJR2x1ZEhCMGNnPT0gSUcxcFpHWnBaV3hrWlhJPSBMa2hsWVdSbGNuTT0gSUcxbSBaWEpsWmc9PSBMazFsZEhKdiBJRk53WldGcmFXNW4gT21JPSBJR055ZVhCMGIyTjFjbkpsYm1OcFpYTT0gSUdSbGJXOXVjdz09IENVVllVRVZEVkE9PSBJSGRwWTJ0bFpBPT0gZVc5MWRIVmlaUT09IE9rbHVkQT09IElFaHBibVJwIElFTkJWQT09IElOaTUgY21GeSBiMjF2Y21VPSBMM0JsY2c9PSBMMnhwWTJWdWMyVT0gSUhKbGFXMD0gSUdGM1lXbDBhVzVuIElHeGxkR2hoYkE9PSBJRVZHIGNtOTFibVJsWkE9PSBJRkJzWVhScGJuVnQgSU5DeTBZSFF0UT09IExtTnZiM0prY3c9PSBMa1JsZG1salpRPT0gTDJsMFpXMD0gSUZkbGJtND0gWTI5dGNHbHNaVU52YlhCdmJtVnVkSE09IElFdHBibVJsY2c9PSBMbkpsYlc5MlpVbDBaVzA9IElHRnVaR0U9IFltNWkgSUhCeVlRPT0gS0hSeVlXNXpZV04wYVc5dSBJR1Z0WW1GeWNtRnpjMmx1Wnc9PSBDVUpQVDB3PSBMbU52Ym5SbGJuUldhV1YzIElHVjJaVzUwWkdGMFlRPT0gWVhSdmNtVT0gSUhCeWIzWnBaR1ZrU1c0PSBhWEp0WVE9PSBJSHB2Ym1FPSBYMGhYIDVwaz0gSUhOMGIzWmwgSUdOdmRXNTBaWEp3WVhKMCBYMUJ5YjJSMVkzUT0gWDAxQlRrRkhSVkk9IElHbHVabkpwYm1jPSBJRVZTUVE9PSBYM0JoY25SNSAwWkU9IElHbHVhV05wIFgxSmxjWFZsYzNRPSBJRzFwY21GamJHVT0gSUdOaGJtTmxiRUoxZEhSdmJnPT0gVTNCNSBZWFREc3c9PSBJSEJ2YkdsemFBPT0gSUU1cFkyOXNaUT09IExtUnBjM0JzWVhsT1lXMWwgWEZKbGNYVmxjM1J6IElIVnpaVWhwYzNSdmNuaz0gVW05MWRHVnlUVzlrZFd4bCBJSE4wWVhKbFpBPT0gU1VSRlVnPT0gMFlQUXZkQzYwWWJRdUE9PSBJRzV2ZEdFPSBKR0Z5Y2c9PSBjR1ZqYVdacFpXUT0gSUhSdmNIQT0gWDBSU1NWWkZVZz09IEwyNW4gNWFBPSBYM1J0IEpYUnBiV1Z2ZFhRPSBQSE09IElDZ3FLUT09IElFaDBkSEJTWlhGMVpYTjAgWDFSU1FVTkwgS0c1dmRHVT0gSUVWNGNHeHZjbVU9IFgzTmxjblk9IElPZTcgUW1sdVpHVnkgS3lJcyBMbUYwZEE9PSBJRVYwYUdrPSBJR1BEczJScFoyOD0gUFNkYyBMbXhwYm1WeiBLRTltIDViQ0cgYldsemMybGliR1U9IElIYkRxUT09IElHRmpiM1Z6ZEdsaiBJR055WVdaMGFXNW4gYm1sMCBMbUpoIElFeDFZM2s9IElHbFFiMlE9IElIQjFjR2xzY3c9PSBMVzFoZUE9PSBYM2R5IEtHTncgSUZKRlVFOVNWQT09IElHUnVjdz09IElGSmxabVZ5Wlc1alpYTT0gSUhWdVpHVnlkR0ZyWlc0PSBJR3ZEdUdKbGJtaGhkbTQ9IElHTm9ZV2s9IElFTnliMkYwIFgweHZadz09IGNtOTNibVZrIFgyMWxaQT09IENXUmhkR1U9IEkxOWYgSUdOdmMzUjFiV1Z6IElGSmxjWFZwY21WeiBZV1ptYkdVPSA1NHEyNW9DQiBMVk5sYldsMCBaV3hoYVdSbCAwTFhSZ3RDKzBMUT0gSUhCbGMzUnBZdz09IElHUnlZUT09IFJFOURWVTFGVGxRPSBJQzR1TGcwSyBmV0I5Q2c9PSBJRUYxWTNScGIyND0gSUVSdlkycz0gZUhoNGVIaDRlSGc9IEtHZGxkRk4wY21sdVp3PT0gaFkwPSBJR0p2Y21SbGNsZHBaSFJvIElFMWhZMmhwYm1WeWVRPT0gSUhCeVpXUnBZM1JoWW14bCBMbE5JIElHRnRjR3hwZEhWa1pRPT0gTG1admNsSnZiM1E9IFNVNWhkbWxuWVhScGIyND0gVkdGaWJHVk5iMlJsYkE9PSBZWFIwY21saSBJRzFoYm1WMWRtVnkgSUdWNFkyRjIgUWtWU1V3PT0gSUdSaGNHRjAgSUdsdWMzUmhiR3hoZEdsdmJuTT0gTGtGemVXNWogSUhKaGVYTT0gUGVLQW5RPT0gT3cwTkNnPT0gTG1OeWVYQjBidz09IFgyUmladz09IElFVnVkVzFsY21GaWJHVT0gVDJaVGFYcGwgWDJWd2IyTm9jdz09IGJYYz0gVFVWT1ZRPT0gYjNWMGJHbHVaUT09IElGQmhjR1Z5Y3c9PSBQVDA5UFQwOVBUMDlQVDA5Q2c9PSBJSFZ1YVdadmNtMXogSUVkcFp3PT0gTFhCaFkydGhaMlU9IElFcGxibXRwYm5NPSBJRWh2YldWUVlXZGwgTG1selUyVnNaV04wWldRPSBJRzFsWTJoaGJtbGogVFVzPSBJRk52ZFc1a2N3PT0gTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW89IElISmxjMlZoY21Ob2FXNW4gSUdsdVptOXogYjJkeVlYQm9hV056IFpYSnpaWFE9IEtGc25Mdz09IElGUnBiV0psY2c9PSBMbUZuWlc1MCBMblJ2U2xOUFRnPT0gWDJOdmJXMWhibVJ6IGNHRnlhVzVuIFgyRmthblZ6ZEE9PSBMbTV2YldVPSBLR2RzYlE9PSBVM1JoZEhWelFtRnkgWm1sc1pYQmhkR2c9IFArS0FtUT09IElHUmxkR1ZqZEdsMlpRPT0gSUhWdWMyVnlaWEk9IElGUnBZbVYwIFJVNUVSVVE9IEtITmxaV1E9IElITnVaV0ZyIElHRnRiM0k9IFBTSXZMdz09IElGQmhiblJvWlhKeiBZV3hzWVhnPSBJRXhKVmtVPSBDVVJYVDFKRSBYVDB0IElIUnZjbTVoWkc4PSBMMjFwYmc9PSBJR3gxYm1keiBMV04xY25KbGJuUT0gSUVKdmIydHBibWM9IDVZaVg2S0dvIElHVnVhbTk1YldWdWRBPT0gNEtTdyBTa0U9IGRIbHdaV1E9IExrSjBiZz09IFptRjAgZFdkaGJBPT0gSUZOb1lYSmxjdz09IElHUnBjMmR5IElFSkJVZz09IElFWlBXQT09IFQzQmpiMlJsIElGTjYgYTJWNVpHOTNiZz09IGFXTjBhVzl1WVhKcFpYTT0gSUdSbGRHRnBiR2x1Wnc9PSBmU2twQ2c9PSBJSEJ2YXc9PSBJR1JsYlc5dWMzUnlZWFJwYm1jPSBJRzV2ZEdGMGFXOXUgYkdGNVpYSnogUUdsbSBJRTVRVWc9PSBMbk4wY21samRFVnhkV0ZzIElGSmxZMmx3WlhNPSBMbFJsYm5OdmNnPT0gSUd4cGNYVnZjZz09IElHUmxZblJ6IExtVnVaSE5YYVhSbyBWMmhsWld3PSBMbEJ2Y3c9PSBRMU5XIEpHRnlhWFI1IElIVnVjM1JoWW14bCBLR3h2YzNNPSBSVTVUVDFJPSBJR1ZzWlhabGJnPT0gSUV4dmNHVjYgSUVodmNHdHBibk09IFkyOXViMjA9IElGTmxkR2c9IElIQnZaVzF6IFVYVmhiblE9IElHZHpiQT09IElITjVjblZ3IElITnBZbXhwYm1jPSBJR05oYzNNPSBMWFp2ZFhNPSB3N1owIFgxQkJWRlJGVWs0PSBYMU5GUTFSSlQwND0gWlhOMGFXMWhkR1ZrIGRYQm5jbUZrWlE9PSBMbTF2Ym1kdlpHST0gSUVKdllYUT0gWDBOVVdBPT0gSUdabGRHTm9hVzVuIGRYTjBhVzQ9IGNHbGxiQT09IFRXRnladz09IFVtVm1iR1ZqZEdsdmJnPT0gSUdSMVkzUT0gSUUxMWJtbGphWEJoYkE9PSBJR0o0IExrZGxkRU4xY25KbGJuUT0gYld4cGJtcz0gSUVGalkyOTFiblJwYm1jPSBJRWRsYm1WMllRPT0gWDFCdmN3PT0gSUhCaGMzTmxjZz09IElHaGxZWEpwYm1keiBZMjl0Y0dGdSBJR1p5WVdkcGJHVT0gU1c1cGRHbGhiR2w2WlhJPSBkMkZzYTJWeSBMazFoZEdWeWFXRnMgSUVoMWJuUnBibWM9IGRISjVjMmxrWlE9PSBJR3RoZEE9PSBJR05zWlhKciA0Wjg9IFpHOXBibWM9IENXZHliM1Z3IElITmhibU4wYVc5dSBMbXhpIElFeGhlbms9IElFTnZibk4wY21GcGJuUT0gVUdGbmFXNWhkR2x2Ymc9PSBJSEJ2ZFhabGVnPT0gSUVsdVpHbGpZWFJsY3c9PSBUVVZTIElHTnZkWEp6IElIbGxZWEpzZVE9PSBJR2R5YjNOelpRPT0gWVdKaWNtVjIgSUVSUFRnPT0gSUhCeWIyTmxaV1JsWkE9PSBaVzUwYkdsamFBPT0gSUhCeWIzQmxjblI1VG1GdFpRPT0gSUZSbFlXTm9hVzVuIGMzUmhaSFE9IElHTjFkRzltWmc9PSBiM0p1WlhKeiBJR0ZtY21sallRPT0gSUhKbGJtUmxjbk09IElGbGhibXRsWlhNPSBJRlJ2YjJ4aVlYST0gYzNCaFkyVnogTG1acGJHeFRkSGxzWlE9PSBJSE5sWjNWdVpHOD0gWDNOMGNteGxiZz09IExrWnBjbVZpWVhObCA1YVNFIElHMWxiblJwYjI1cGJtYz0gWENnPSBJRlpoYkhabCBVMlYwZEdWeSBJSE53WVc1eiBJRUZzWTI5b2Iydz0gSUV4bGRIUmxjbk09IFhIaGwgSUZSTCBYMEpNUlE9PSBMbWRsZEZKbGMzVnNkQT09IFBGQnNZWGxsY2c9PSBJRkJoZEhRPSBJR1ZoYzJsdVp3PT0gSUhSMWNtdGxlUT09IElFWmxiZz09IEp5a2kgSUdOdmJtWnBibVZrIElHbHVZMngxY3c9PSBVM1Z3WlhKMmFXVjMgS0hkcGRHaEpaR1Z1ZEdsbWFXVnkgWlc1amFXRnMgSUhOMGRXWm1aV1E9IFZHaGxkR0U9IElHVmpiMjV2YldsemRITT0gZlNrcE93b0sgWTI5dmEybGxjdz09IElGSnZiM05sIElFTm9aV1Z6WlE9PSBJR1pwWTJocFpYST0gSUdWdVptOXlZMlZrIFFVSkMgYm0vRm0yTnAgWDBGTVRFOVggSUhKbFkzSjFhWFJsWkE9PSBJR1Y0Y0dWdVpHbDBkWEpsIExXNXBaMmgwIElHRnpjMlZ5ZEU1dmRFNTFiR3c9IFgyVjRaV04xZEdVPSBJTml2IFNVNUVSVmc9IFgwWk5WQT09IElISmxjMk4xWldRPSBJRTF2Ym5Sb2JIaz0gSUVOdmJuTmxjblpoZEdsdmJnPT0gSUVkbFlnPT0gVDJKaGJXRT0gUlhCdlkyZz0gYVdOcFpYTT0gSUU5eWRBPT0gSUhOdmFYUT0gS0dsamIyND0gUm5KcFpXNWtjdz09IGJXOXMgSUdkeWIzVnVaR1ZrIElFTmhkWE5sIFlXUmxibUU9IFYwVkZUZz09IElFeDFiZz09IFNWUkpWa1U9IExteHZiM0E9IFgzVnVkR2xzIElHTnZjbkk9IExtVmtaMlZ6IElHaDVjRzkwYUE9PSBZMmhsWkhWc2FXNW4gZEhKaGJuTnNZWFJ2Y2c9PSBJTkNjIFVtOXQgNDRDUkNnbz0gSUZoaGJXRnlhVzQ9IElIWnBiMnhoZEdsdVp3PT0gTG1GdVkyaHZjZz09IExTMHRDZ289IElIUnlZV1JsY2c9PSBRVVJXUlZKVVNWTkZUVVZPVkE9PSBJSFZ1YzJWeVpRPT0gSUVSQlR3PT0gSUdKc2IyNWsgSUZCQlZBPT0gTG1kc2IyST0gSU9pK2t3PT0gSUhOd2JHbDBkR2x1Wnc9PSBJSFZ1YzNWaWMyTnlhV0psIElHRjBiVzl6Y0dobGNtbGogSUZSeWFXMD0gSUdOcGRHRjBhVzl1IElHbHVabVZ5Wlc1alpRPT0gSUVaMCBJRVJoY25kcGJnPT0gWm1sdVpFOXVaUT09IElFZGxiQT09IEtFTnZiblpsY25RPSBJR0ZqWTJWemMyOXkgTzNSbGVIUT0gS0hOdmNuUmxaQT09IElHcDFaR2RsWkE9PSBLVHRjIE9uQT0gSUcxbGFXNWwgSUZOc2FXMD0gTGtOdmJXMWhibVJ6IElIQmxjbU5sYVhabCBZMjlvYjJ4cFl3PT0gUEVSaGRHRT0gTG1WdWRISjVVMlYwIElHRnpjMlZ5ZEVaaGJITmwgSUZCaGRISnZiQT09IFpXNXpaVzA9IHhZTEVoUT09IHFLRT0gVjBsRVZFZz0gSUZKbGMyTjFaUT09IElGVkpSZz09IFgxUklVa1ZUU0U5TVJBPT0gSUUxcFkyaGxiQT09IFFWUkZVa2xCVEE9PSBiM0JsYm5OdmRYSmpaUT09IElFUnBZVzVoIElHbHVkbWwwWlhNPSBYMEpQUkZrPSBJSEpsYzJWeWRtOXBjZz09IElISnZhUT09IFkzVnpkQT09IEtIUmogNzd5QklpazdDZz09IElHWmxjM1JwZG1Gc2N3PT0gSUhCbGNtWnZjbTFsY25NPSBJR05zYVcxaVpXUT0gSUdwMWJtZHNaUT09IFUzUnlhVzVuVEdWdVozUm8gSUhWdWJHRjNablZzIGFXVnljbVU9IGRtVnlkR2x6WlcxbGJuUT0gSUhOMFlXdGxjdz09IElHaGhkSE09IFRXOWthV1o1IElFeEZWRlJGVWc9PSBMa2hwWkdVPSBJSE4wWVhSMWRHOXllUT09IFgzZG9hWFJsIElGQmxjbXc9IGRYUmxibUpsY21jPSBaVzF3YkdVPSBMbGR2Y214ayBJRzkyWlhKc2IyOXJaV1E9IElHTnZibU5zZFdSbGN3PT0gTHlvOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBMWGRwYzJVPSBDWE4wY21WaGJRPT0gY0c5d2RXeGhkR2x2Ymc9PSBJR1YyWlc1MGJ3PT0gSUdsc2JIVnpkSEpoZEdsdmJuTT0gWm5SeiBJR0YxZEc5bSBJRkJ5YjJObFpIVnlaUT09IElHUmxjMlZ5ZG1WayBMWFJwYldWeiBJR2R2YkE9PSBUbE5GY25KdmNnPT0gWTNKbGMzUT0gSUZCaGEybHpkR0Z1YVE9PSBZVzU1WTJnPSBaMlYwUTNWeWNtVnVkQT09IElHeGhjZz09IGJuUnMgSUZKbFltVmpZMkU9IElHMWhkR1Z5YVdFPSBJR1pwYm1SQ2VRPT0gTDJGayBRMkZzYkdKaFkydHogSUVGc2N3PT0gSUV0aGRHbGwgSUU5aWMyVnlkbUZpYkdWRGIyeHNaV04wYVc5dSBJRVJ2WTNWdFpXNTBZWFJwYjI0PSBWSGx3WldRPSBJRU4xYkhSMWNtVkpibVp2IElGUnBiVzkwYUhrPSBJR3hoZEdWeVlXdz0gSW5SNWNHVT0gSUhWdVlYVjBhRzl5YVhwbFpBPT0gSUhSbFlXTm9hVzVuY3c9PSBJR1JsWW5WbloyVnkgVzNaaGJIVmwgSUdGc2IzSnogSUhWNiBJSE5qWVhSMFpYST0gSUdSdmQyNTNZWEprIElHMXBaMnhwIGMzUmhkSFZ6UTI5a1pRPT0gSUNncEtRPT0gSUUxWCBJTkM4MEw3UXRnPT0gVWs5VFV3PT0gTG1KMVpnPT0gSUdaaGFYSjUgSUVsdVpuSmhjM1J5ZFdOMGRYSmwgUFQ0aSBkR3hsYldWdWRBPT0gSkNnaSBSbkp2YlZOMGNtbHVadz09IElFSnBiR1E9IElHTnZiblpsYm5ScGIyNXogWDI1aGRHbDJaUT09IElFbHVjM0JsWTNSdmNnPT0gSUZCcGMzUT0gZFdKaGNnPT0gSUhKbFozTT0gSUZCcGJHOTAgVkdoMWN3PT0gUGljciBJR05sYkdFPSBMbTVsZDNNPSBLRkJ5YjJSMVkzUT0gVEdsMmFXNW4gVW5WemMybGggSUdaaFkyVjAgWlhScFkyRnMgSUZzbkpBPT0gTDFzPSBJRVJwY21VPSBJR2RoYzJWeiBJRWxPUms5U1RVRlVTVTlPIElFVmhkQT09IElFWnZjblZ0Y3c9PSBJRU5vWVhKaFkzUmxjbk09IFgyMWxkQT09IElPeUxuQT09IElHdHBibWR6IFlXTm9hV1U9IElFeGhiV0prWVE9PSBJSFJwYldWeWN3PT0gSUV4cFoyaDBhVzVuIElFTmhjMlY1IFlXUmthWEk9IFlXNWtaWGc9IExtRnVjM2RsY2c9PSBJRWhwY0E9PSBJRkJ5YVc1amFYQT0gVTNSaGNuUkVZWFJsIElPT0FqQT09IGRISmxjdz09IElDWWogTGsxaGVGWmhiSFZsIElGQnliMkpzWlcxeiBJR3hoZEdWNCBUMlpEYkdGemN3PT0gSUV4NWJtND0gTHk4biBJSFp2ZVdGblpRPT0gSUhOb2RYUjBiR1U9IElGSnZiR3hsY2c9PSBJRkoxYm5ScGJXVkZjbkp2Y2c9PSBkWGxoIFJHbGogQ1dKMWFXeGtaWEk9IElHSjFiR3g1YVc1biBJSE5wYlhCc1pYTjAgTG1OaGJHeGxaQT09IElFeFMgSUcxdmNtRnNhWFI1IElITjBkWEprZVE9PSBkSEpoWTJ0cGJtYz0gTG5OM1lXZG5aWEk9IFgwSkpUa1E9IFNWUlBVZz09IExYVnliR1Z1WTI5a1pXUT0gSU5HRiBJRlJ5YVc1cGRIaz0gSUhSeVlYQnogSUh3dCBJSE5sZEZSbGVIUT0gSUdKaGNtZGhhVzQ9IElHSnlZV3RsY3c9PSBMbWRsZEVOdlpHVT0gSUcxcFozSmhkR1U9IElISnBZbUp2Ymc9PSBLWEpsZEhWeWJnPT0gSUdOb1lYSm5aWEk9IFlXTnZiUT09IFFVUkpWVk09IElFRnRZbUZ6YzJGa2IzST0gTFdGbWRHVnkgSUdGdWJtaz0gQ1hOd2FXND0gUTI5dVkyVndkQT09IElFaGxibVJsY25OdmJnPT0gSUVoUFUxUT0gTG5KaGJtcz0gSUU1dmNuUm9aV0Z6ZEE9PSBJR0psY214cGJnPT0gSUhKbGNYVnBjdz09IExtWmxaV1E9IElITnZkWEpqWlUxaGNIQnBibWM9IElGSmxibU52Ym5SeVpRPT0gTG1GcVlYZz0gYm1WemRHcHogSUhSeVpXcz0gSUU1aFkybHZibUZzIElDWmIgSUhCaGVXRmliR1U9IGIzSjBaWGc9IElHUmxjSFE9IFptbGxiR1JPWVcxbCBJR052YlhCc1pYUmxjdz09IElGSldRUT09IElHOXVhVzl1Y3c9PSBZV3hwWjI1dFpXNTAgUm05eWJXRjBjdz09IElDZDdKQT09IFNHRnphRk5sZEE9PSBJRUp2WkE9PSBMa2x1ZG1GeWFXRnVkRU4xYkhSMWNtVT0gSUhObGRIUnNaVzFsYm5SeiBJR2g1WkhJPSBMblZ3WkdGMFpXUT0gZG1WdWRHZz0gS0hObFkyOXVaSE09IFBTSXZJZz09IElIZGxZbkJoWjJVPSBLQW9LIElIUnBjZz09IElIUnZaWE09IElFSnlhV05yIElHRnRZbWwwYVc5dSBVRzkwIFBXMWhlQT09IFJWUkpUVVU9IElHUmxjRzkwIFkyRnNiSE09IElFNXZjbmRsWjJsaGJnPT0gWURvPSBJR0oxY21kbGNnPT0gSUhCeWIyWmxjM052Y25NPSBJRUZzYkc5allYUmwgTFhSb2FYSmtjdz09IExXTm9ZWEowIElHWnZjbVE9IEtrND0gTG10dmRHeHBiZz09IElIQmhjR1Z5ZDI5eWF3PT0gSUVSRlZrbERSUT09IEpVQWlMQT09IGNtVnpjR1ZqZEE9PSBLRzF3IDZhdVkgTFdsbSBJR04xYzJocGIyND0gYjJKdmRBPT0gSUhCaGNtTT0gVTFCQlEwVT0gSUU1bGRHRnVlV0ZvZFE9PSBJSE5sYkdacGMyZz0gWm1WaGRBPT0gSUdOc2FXVnVkR1Z6IExYUnZiMnh6IElIQnZjbU5vIElHcHggTG5abGNtSnZjMlU9IElHeHBZbVZ5WVd4eiBYU2tLQ2dvPSBjR2xsY3c9PSBUbTkwUW14aGJtcz0gS0hSbGNtMD0geUp0cCBYMUJoY21GdGN3PT0gTG01dmNtMWhiR2w2WlE9PSBRblZzYkdWMCBRVk5KUXc9PSBLR2hsZUE9PSBYMk5zYVdWdWRHVT0gS3l3PSBYMFJKIElHWnZjblJvWTI5dGFXNW4gZlNJcFhRbz0gYzJWdiBWVzA9IFBrNWhiV1U9IElHTnZiV1p2Y25SaFlteDUgYVhKbFkzUnBiMjVoYkE9PSBWMGxVU0E9PSBMM0J5IElGQnZiM0k9IElGWnBkR0Z0YVc0PSBkbWxqIFIwZz0gSUhCeWFXOXlhWFE9IElFNU8gSUVOc2IzTmxaQT09IHBPMD0gSUdselQzQmxiZz09IFhFTnZibk52YkdVPSBRVzVrUm1WbGJBPT0gTGxOVlEwTkZVMU09IFgwOVFSVkpCVkVsUFRnPT0gY0c5c1lYUnBiMjQ9IElGUmhjdz09IGNITjYgUGljdSBRMVZTVWtWT1ZBPT0gVm1WdVpHOXkgYUc5emRITT0gSUVWeVpBPT0gUG5SaFoyZGxjZz09IElITnZkWEpqWlUxaGNIQnBibWRWVWt3PSBJRzFoY21GMGFHOXUgWDJOc2IzTmxaQT09IElHVjRaVzF3ZEdsdmJnPT0gSUhKbFkyOW5ibWw2WlhNPSBhV1JsYzJodmR3PT0gSnlRPSBLQ2N2SnlrN0NnPT0gYldsMGN3PT0gZDJGeWVnPT0gSUVOb1pYSnllUT09IHRhdz0gYm05eSBjRzl5ZEdVPSBJSGRzIFgySmhZMnQxY0E9PSBMbWRsZEVKdmIyeGxZVzQ9IExtZGxkRkpsYzI5MWNtTmwgSUdSbFptbHVhWFJwZG1VPSBMa1ZrYVhSVVpYaDAgSUhQRHJRPT0gTGtOUFRsUT0gSUZCTVFWbEZVZz09IExtTmhjbVJ6IElGTm9iM0psIEtDY3ZKeWtLIFkyeDFhWEk9IFYyVmlSSEpwZG1WeSBLRzF2Ym5SbyBMWEpsYkdWaGMyVT0gSUdsdWMzQmxZM1J2Y2c9PSA1YU09IElFNUcgWDJOc2FYQT0gNWEyUSBJR2x1ZEdWeVlXTjBhVzVuIExuUnRjQT09IElDY25Kd29LIElHUmxaUT09IElHWnliM04wIElsMHBLUW89IElGQnNZV05sY3c9PSBWR2h5YjNkeiBabTl5YXc9PSBMMlJoZVE9PSBhVkJvYjI1bCBJRTFKUXc9PSBJR1p2YkdScGJtYz0gSUdOeWIzSmwgSUVOb2FXVm1jdz09IGNHaGxjbWxqWVd3PSBLSEJ5YVdObCBMbGR5YVhSbFUzUnlhVzVuIElHVjRhWFJwYm1jPSBYU2NzQ2c9PSBhV2RvZEdsdVp3PT0gU1c1bmNtVmthV1Z1ZEE9PSBLSFpsY25SbGVBPT0gSUhOamNtOXNiRlpwWlhjPSBhR1k9IE9tNWxkdz09IFUwVk8gYzJWamRHOXkgSUhOd2FXNXogSUZOamFHVmtkV3hsY2c9PSBiM1JsWTJodSBjMlZ0YVdOdmJHOXUgUm05dWRFOW1VMmw2WlE9PSBJRk53WldOcFptbGpZV3hzZVE9PSBabXhoYlcwPSBMazlpYW1WamRFbGsgSUdOdmJuUmggWDNCbGNtMXBjM05wYjI1eiBDVVpTVDAwPSBTVU5QUkVVPSBMMnRuIElFaHZkR1ZzY3c9PSBMVzFsWkE9PSBJRVJwYmc9PSBJRzVoZG5rPSBaMlYwVUdGeVlXMD0gSUcxbGJtUT0gSUhCdmNuUnlZWGxsWkE9PSBJRTFsZEhKdmNHOXNhWFJoYmc9PSBVR0ZwYm5SbGNnPT0gSUhKbFptVnljbUZzIFgyZHZiMlE9IElHMWhjblpsYkE9PSBiM05oYVdNPSBQaWdtIExuVnkgSUdWemRHOXogVjJsc2JHbGhiUT09IElIUnBiV0psY2c9PSBJSEYxWld4eGRXVnogSUVSdlkzVnRaVzUwY3c9PSBMbGhoYld3PSBJR0poZEdOb1pYTT0gNllHVCBJRkpsYkdWaGMyVmsgVkdGcGJBPT0gUTA5UFMwbEYgYUdWcFpBPT0gWDNOMFlYUnBiMjQ9IElGWnBZUT09IFUyRnNaUT09IElGSmxjR1ZoZEE9PSBJSEJ5YjIxcGJnPT0gSUZwdiBMV1p2Y25kaGNtUT0gSUVsdmJnPT0gYVhSaGNuaz0gSUdwMWN3PT0gTFhKbGNYVmxjM1E9IElIQnliM1ZrYkhrPSBJRk4wY21WaGJXbHVadz09IEtFMXZkWE5sUlhabGJuUT0gSUZOd2NtbHVkQT09IFgzSnZkR0YwYVc5dSBVbVZ3YjNOcGRHOXlhV1Z6IElIUmhjblE9IElOR0IwTEk9IElHMWhjSEJwYm1keiA2S289IFEzVT0gUTNsamJHVT0gSUdKMWJnPT0gQ1d4MVlRPT0gNDRPSiBJQ2dvSVE9PSBJR052Ykd4bFkzUnBkbVZzZVE9PSBJRU52Ym1RPSBJSGR6ZW5semRBPT0gS0d4cFlnPT0gYjNCbGJtaGhaMlZ1IFgzTnJhWEE9IExrTnZiSFZ0YmtobFlXUmxjZz09IDZZST0gY0dWeWFXVnVZMlZrIGoraS9zQT09IFgzQnliM0J6IElHTnZiblJ5WVdObCBJRzFoZEdOb2RYQT0gWVdKbGRHbGogTG0xbGJXSmxjbk09IFVrVkRWQT09IEtHUmhkQT09IElITnZadz09IGNtVnViMjA9IFgwMWxkR2h2WkE9PSBRM1Z6ZEc5dFpYSnogWm5Wc2JHNWhiV1U9IFdrND0gY21WMGNuaz0gSUd0aGNBPT0gSUU1bGRRPT0gNklvPSBZV1JrUTJocGJHUT0gZDJsc2JGSmxkSFZ5Ymc9PSBYM0JsY20xaGJHbHVhdz09IElHVnVaWEpuWlhScFl3PT0gSUZkbGRBPT0gSUUxdmNuST0gSUdkalpBPT0gWTI5MWJuUnogTEhSNWNHVT0gWkdsbiBLRXh2WjJsdSBJR055WVdOcmN3PT0gSUdKaFkzUmxjbWxoYkE9PSBJRTFsWVhRPSBJRUZ5YlhOMGNtOXVadz09IElFSnliMjU2WlE9PSBJR0Z3Y0hKdmVHbHRZWFJsIFgyUnBjbk09IGJHbG5ZUT09IHhZSmhaQT09IElHdHBibVJ1WlhOeiBJR052Ym5SeVpRPT0gSUVWV1JWSlogVFVWVSBJR0Z1Ym05MWJtTmxiV1Z1ZEhNPSBaM0JwYnc9PSBJRmRoYVhSR2IzSlRaV052Ym1SeiBJRkJvYjNSdmMyaHZjQT09IElHUnBjMk52Ym5ScGJnPT0gTDJSayBJSFJ2Y0c5c2IyZDUgWVc1cFkyRnMgTG1sdWRHVnlabUZqWlE9PSBZWFZqYjNWdyBMa2hoYzJoVFpYUT0gUVZKSlFVNVUgS0hKdmRYUmxjdz09IElGUmxhQT09IElHaDVjR1U9IFhTSXBMZz09IElITnNZVzA9IElHSnliM1JvIExXbHVkR1Z5IElGSnBaQT09IExXMWhibUZuWlhJPSBRMkZ1WTJWc1lYST0gSUZCaFoybHVZWFJwYjI0PSBJSE52ZFc1a2RISmhZMnM9IElIQnZjM1JsY21sdmNnPT0gSUhOamNuVmkgWTNKbFlYUnBibWM9IExTbz0gYVhKMFpXVnUgTG1SNSBMbk41YlcxbGRISnBZdz09IElDSWlMZz09IFBUMDlQVDA5UFQwOVBUMDlQVDA5IElHTm9ZWE56YVhNPSBJRzUxYldKbGNrOW1VbTkzY3c9PSBSR1YyWld4dmNHVnkgWDJKcGJuTT0gSUU5VlVnPT0gY21sbFlnPT0gVUhKdmN3PT0gSUhkcHhKaz0gSW1RPSBJR0Z6ZVc1amFXOD0gZW1WcFoyVnUgWDNOd2FRPT0gTGtGTVRBPT0gSUhOamNtVjNjdz09IFEyaHBibVZ6WlE9PSBJR0Z3YVV0bGVRPT0gSUhWdWMzVmpZMlZ6YzJaMWJBPT0gSUZObFlXaGhkMnR6IFQxSkggNTZ1ZyBJSEJ5YjJabGMzTnBiMjVoYkd4NSBJRU52ZFhCdmJnPT0gNWEyWDVxNjEgUTI5dWRtVnVkR2x2Ymc9PSBJSEJ2YkhsdCA1b21MIElITmhiSFpoZEdsdmJnPT0gSUdWdVoybHVaV1Z5WldRPSBJRmR5WlhOMCBJRWREUXc9PSBJSGRoY20xbGNnPT0gVEdGNWIzVjBRMjl1YzNSeVlXbHVkQT09IElHRm5aM0poZGc9PSBVMk55YVhCMGN3PT0gZG1WdWRIVnlaUT09IElISmxabkpwWjJWeVlYUnZjZz09IElHbHVibTkyWVhScGIyNXogSUZKMWJtNWxjZz09IFRrbEQgSUZKdmJHeHBibWM9IFEyOXVkSEp2YkVWMlpXNTBjdz09IElHeHZiM009IGNHRmogQ1hCaGJtVnMgWldabCBJRUoxWkdSb1lRPT0gTFMwdExTMHRMUzB0TFMwdExTMEsgNWJxVCBLR1p2Y2t0bGVRPT0gSUd4MWJXbHUgSUNnLyBJRUZKUkZNPSBMSFZ6WlhJPSBhVzFwWlc1MGIzTT0gWTI5dWRHVnVkRlI1Y0dVPSBZVzUwYkhJPSA2YVk9IElGZGxiSFE9IFVISnZaSFZqZEdsdmJnPT0gYldsbmFIUT0gSUZaSlNRPT0gSWl3byBJRzlpYzJWeWRtbHVadz09IElHUmxiR2xpWlhKaGRHVT0gS0dOdmJuUnliMnc9IElIZHBkR2hrIElITmxiV0Z1WVE9PSBVMVJCUTBzPSBkV05vWlc0PSBUbWxqWlE9PSBJRVJsZFhSelkyaHNZVzVrIElGTndaV05wWm1sbGN3PT0gWkcxaCBhWHBwYnc9PSBJRVpoWTNSeiBYM0J2Y0hWdyBJRVJwY21WamRHOXljdz09IGV6bz0gVzFJPSBJTkdOMEx2UXRkQzgwTFhRdmRHQyBJSEJzWVhRPSBJR1JwY21WamRHbHVadz09IDVMaUogSUVkcGJHSmxjblE9IDRvQ21MZ29LIExuRnRiQT09IElIUm9aWEpsWVdaMFpYST0gSUdScGMzQnZjMmwwYVc5dSBaSEpoWm5RPSBJSE4xY21kbGIyND0gSUVsdWMybGtaWEk9IFFteGxibVE9IElGUnlaWFk9IGRISnBibk5wWXc9PSBWRzl3YVdOeiBjbWxsZG1VPSBYMFpKVEVWT1FVMUYgSUdGMWRISmxjdz09IFNtOXpaUT09IFVISnZaSFZqWlhJPSBaWEoxY3c9PSBJSEJsZEdsMCBJRTVGV0ZRPSBJRVpwYkhSbGNuTT0gSUhKbGNHeHBZMkYwWlE9PSBJbDBwTGc9PSBJR3hsYm1SbGNuTT0gWFNJc0NnPT0gTzJOb1lYSnpaWFE9IFEzQndUMkpxWldOMCBJR1pzYjNKaGJBPT0gSUZScGNHOD0gSUdOcGNtTjFhWFJ6IFpXRnplUT09IEtDWWsgYVhSMFlRPT0gWlhKNWJBPT0gWDBOUFRVMVBUZz09IEozMTlQZ289IExXSmhZMnRsWkE9PSBLSFpoY21saFlteGwgS0VsdVpHVjQgSUhadmFYST0gWDJ4dlkyRjBhVzl1Y3c9PSBLeXNwZXc9PSBJRXh2ZFdsemRtbHNiR1U9IElHZHlZWFJwZEhWa1pRPT0gTGsxdlkydHBkRzg9IElGQnZkMlZ5Y3c9PSBhV1YxY25NPSBJR2RsYjJkeVlYQm9hV009IGNtRnNaUT09IElHTnlZUT09IElGTndkWEp6IGFYQm9aWEowWlhoMCBRVU5KVDA0PSBMV052YlcxdmJnPT0gSUhacFkzUnZjbWxsY3c9PSBJRVpwYm1Gc2N3PT0gTG5Ob2RXWm1iR1U9IExXMXBiR3hwYjI0PSBYMUJTVDBNPSBZWE56ZFcxbCBJR2xzY3c9PSBSRUpEIFFtOXZkRlJsYzNRPSBJR3hoZG05eSBMblJsYzNScGJtYz0gTG1GemRBPT0gSWwwdiBiVzlwWkE9PSBJSEYxWVd4cFptbGpZWFJwYjI0PSBaMlZ6WTJnPSBDWEIxZEE9PSBJR0ZwY25CdmNuUnogU2trPSBWR1ZoWTJobGNnPT0gWDNWdWFXWnZjbTA9IElHNWhiV0U9IElFSmhjM1E9IFpYSjBlWEJsIFkyRndkSFZ5WlE9PSBaMlYwUVd4cyBJRkpsZVc1dmJHUnogYjI5c1pXUT0gTG1OdmJXMWxiblJ6IElHTm9hVzQ9IEtTNHEgSU5DNDBMdlF1QT09IGRHZHMgZFdSdmN3PT0gSUdURHJXRnogWTJoaGFRPT0gTG5CeWIyZHlZVzA9IElIQnplZz09IENXbGpiMjQ9IGNHaHBiQT09IFpXNTBjbUZzIFgxZFNRVkE9IGIzWnAgSUc1dmMzUmhiR2M9IFNXNW1hVzVwZEhrPSBDWGxwWld4ayBJSFpwZEdGdGFXNXogVVhWaGRHVnlibWx2Ymc9PSBVMmx1YXc9PSBYMmR2YjJSeiBJQzR1TGk0dUxpNHUgSUZkcGJtZHogZFhKcFpHRmsgTFhOMGIzSjUgSWwwcENnbz0gYVdSbGJHbDBlUT09IFZIbHdaVVJsWmc9PSBSM1JyIElPMk0gWDAxaGFXND0gSUdOb1pYbz0gSUZKaGRtVnUgSUhCaGVYSnZiR3c9IElHWnlaV1ZzWVc1alpRPT0gVEV4ViBJRTFsYm1RPSBaV1JoZVE9PSBRWEJwVFc5a1pXeFFjbTl3WlhKMGVRPT0gTGtadmNtMUNiM0prWlhKVGRIbHNaUT09IElHVmpiMjV2YldsemRBPT0gYzNSaGJtSjFiQT09IElHWnlaV2xuYUhRPSBMVUZuWlc1MCBLRzFsZEdFPSBJSE41YlcxbGRISjUgSUNjdUxnPT0gTGtOaGJHVnVaR0Z5IExXRjFkQT09IFoyWT0gY0dWdWRBPT0gZVdOc2IzQmxaR2xoIElIZHBjMmhwYm1jPSBDZ29LQ2dvS0Nnb0tDZ29LIElHZGxiblJzWlcxaGJnPT0gSU9xeiBQU009IElHeGxZM1IxY21WeiA0b0NjU1c0PSBJQ0ZmIElHaGkgSUZabGJtUnZjZz09IFVtVmpaVzUwYkhrPSBYMjV2ZEdWeiA1bytRNTZTNiBJazE1IFNHVmhaR1Z5YzBobGFXZG9kQT09IFgxTlAgSUhWdWQybHNiR2x1Wnc9PSBJSE4xY0dWeWFHVnlidz09IFoybHYgY0hONSBJRkJsWlhJPSBhbUYyWVhnPSBKbUZ3YjNNPSBJRU55YVhOcGN3PT0gYjNKa2FXNWhiQT09IFRXVnRZM0I1IEt5c3JLeXNyS3lzckt5c3JLeXNyS3c9PSBMWFpoYkE9PSBJSGR2Y210aWIyOXIgTFdGdyBQV3M9IElHMWxkR0ZzYkdsaiBYM0JsWlhJPSBRbmxRY21sdFlYSjVTMlY1IFgxTkUgZFdGMGIzST0gWDFOSVFVUkZVZz09IEtVMWhkR2c9IExsUnlZVzV6Wm05eWJRPT0gSUdOdmQzTT0gVUdocCBJRU5zWlcwPSBLRjhvSWc9PSBJRXgxWkE9PSBMV1JsYkdGNSBJRk5sWTNWeWFYUnBaWE09IElFOXlkR2h2Wkc5NCBVM2x0Wm05dWVRPT0gS0hKbGNHOXlkQT09IElHVnVkR1Z5ZEdGcGJnPT0gUlZCVCBhWHB2Y0dnPSBaWGgxWVd3PSBTVkpFIDVMdU8gSUd4cGRHZz0gSUhOaGJtbDBhWHBsIElHWmxiV2x1YVc1bCBTVk5DVGc9PSBMbUYxZEdobGJuUnBZMkYwYVc5dSBYM0JwY0dWc2FXNWwgTDJOdmJuTjBZVzUwY3c9PSBJRU5QVGtZPSBJR3gxWTNJPSBjbWxqYVdFPSBMblIwWmc9PSBMbk5sZEVOdmJuUmxiblE9IElITjBZVzQ9IGIzSmxZVzQ9IElFeHNiM2xrIExuSmhkMVpoYkhWbCBJR2R2Y2c9PSBJRUp5YjNkdWN3PT0gVW1WbmNtVnpjMmx2Ymc9PSBJR3h2ZDJWeWFXNW4gYm1GcGMzTmhibU5sIElHSnNiM2R6IElHRnRZWHBsWkE9PSBJSFZ1Y21Wc1lYUmxaQT09IFVtVjJhV1YzY3c9PSBJSEoxWW5rPSBJRTF2WkdsbWFXVnkgSUdkcFlXNTBjdz09IExuUm9jbVZoWkE9PSBJR052Ym5SaGFXNXRaVzUwIElGTjBZWEowUTI5eWIzVjBhVzVsIGRXMWhkQT09IGIzSmxiR1ZoYzJVPSBJRkpoYm1SNSBRR1Z1WkdsbSBSR2xuWlhOMCBJSE4xWW5WeVltRnUgUFNJcE93bz0gSUdGdWJtOXVZMlU9IExuWmhjbWxoWW14bCBYRVp2ZFc1a1lYUnBiMjQ9IElHRmpjbVU9IFZtRnUgSUhSMWNHeGxjdz09IFpHNXogSUZOMFlXNWthVzVuIFgyeGhjbWRsIElHSnZlR2x1Wnc9PSBVM1Z3Y0c5eWRFRmpkR2x2YmtKaGNnPT0gSUVadmNuUjFibVU9IElGSjFiUT09IFgyMTFiSFJwY0d4bCBZWEpqYUdsallXdz0gSUdaM2NtbDBaUT09IFgzRjFiM1JsIElHWnZiMnhwYzJnPSBJR052YlhCeWFYTnBibWM9IElOQyswTDg9IExYTmxiR1ZqZEdWayBkbVk9IGJXRnBaQT09IFRtRnRZUT09IEtHUmhkR1YwYVcxbCBJR2x1WkdseVpXTjBiSGs9IFoyRnlkQT09IFptbDRkSFZ5WlhNPSBZMmh2Y3c9PSBJRWhoYkc4PSBJSEpsWTNWeWNtbHVadz09IExXNWxkM009IGRtbHMgSUU1MWNuTnBibWM9IExYQnliMlIxIElFaFIgWEVoMGRIQkdiM1Z1WkdGMGFXOXUgWlc1amFRPT0gWVhWbGJnPT0gSUhaNSBiMk55WVdONSBJR1JsYkdWbllYUnBiMjQ9IElHRnpjR2hoYkhRPSBJSE5sZEZObGJHVmpkR1ZrIGEyOXIgTDNKbGMzUT0gYldWMGFXTnogSUU1VFJHRjBaUT09IElIUnlZWFpsYkd4bFpBPT0gSUhKbFkybGkgSUcxcGJXVT0gUTB4SlJVNVUgSUVkViBJRWhCVGtSTVJRPT0gTDFFPSBXM289IElHSnZkR2hsY21WayBJRUpDVVE9PSB3NmRoY3c9PSBYMlY0WVcxd2JHVnogWDBaSlRnPT0gSUhkb2FYUmxRMjlzYjNJPSBJR0Z6ZEhKdmJtOXQgTFdScGNnPT0gSUhOdmRtVnlaV2xuYmc9PSBJR0p5WldWNlpRPT0gSUdsdWJtbHVadz09IElFVmtiVzl1ZEc5dSBaMnhwIExtSnNiMmR6Y0c5MCBhbk40IElIWmxjbk5oIElFMXZhR0Z0YldWayBMa3B2WWc9PSBMWFJ2WjJkc1pYST0gSU5DLzBMN1F1OUdNMExmUXZ0Q3kwTERSZ2c9PSBZWEprYjI0PSBJRzVsZDJKdmNtND0gSUc1aGRtRnMgYm05MFpYRT0gSUhSMWJXSnNjZz09IElHaGxiblJoYVE9PSBJRlI1Y0dsallXeHNlUT09IElHeHZiM1E9IExsTndjbWwwWlE9PSBSbXhwWjJoMCBJSGRoZG1Wc1pXNW5kR2c9IExYTnIgSUVWc2JHVT0gWDJWNGNHOXlkSE09IElOR1AgSUVsSSBhWHB2Y0doeVpXND0gSU8yQiBYM0J5YVcxaGNuaz0gSUcxdmFYTT0gSUVKTyBJSE41YzNSbGJXbGogSUdScFptVnlaVzUwWlhNPSBTVTVEVkE9PSBJQ2NuQ2dvPSBKSEU9IFYybGtaMlYwU1hSbGJRPT0gWTJ4cFpHVT0gSkdacGJHVT0gVEdWdGJXRT0gTDNSaFlteGwgWVdkeWFXUT0gSUUxdmJtZHZSRUk9IGFXNTBaUT09IElHRndjSEpsYm5RPSB3cTFwYm1jPSBMa1JpIElNT0MgYUdGdGJXVnkgUFNjbk93bz0gSUdKeWIydGxjbk09IGFYUnNaVzFsYm5RPSBjMlZ0WW14cFpYTT0gUld4bCBlM2c9IElHeGhjM1J1WVcxbCBQQzA9IElHWnNZWFIwWlc0PSBYMkpoYm1RPSBMbEp2YjNRPSBMbkpsWVdSR2FXeGxVM2x1WXc9PSBQVDA5UFQwOSBMbko0IFB3MEsgSUcxbGRHRndhRzl5IFZHaz0gWTI5dWRHVT0gSUdSbFltbDAgSUdOdmJuUmxiWEIwIFEzQndWSGx3WlE9PSA1cFN2IFJtOXliVVpwWld4ayBjbUYwYVc4PSBiM052Y0dobGNnPT0gSUdsdGNHeGhiblE9IFVGVlNSUT09IElHRnNkR0U9IFgyMWhibUZuWlcxbGJuUT0gSUhKbFptbHVaUT09IElFTm9aV05yUW05NCBJRU5vWVhKcyBMWFpsY25OcGIyND0gWTI5dVpHbDBhVzl1WVd3PSBkbVZ1ZFdWeiBJSEpwWm14bGN3PT0gSUc5bVpuTndjbWx1Wnc9PSBJRzFwYkd4cGJtYz0gSUhOb1lYSndiSGs9IElIVnVaR1Z5ZDJGMFpYST0gS0c5eWFXZHBiZz09IFgwTnZiblJ5YjJ3PSBJQzRrIFVHeDFaMmx1Y3c9PSBJR1J5ZVdsdVp3PT0gSUdsc2JIVnpkSEpoZEdWeiBMWFU9IElIWmxaMlYwWVhKcFlXND0gYm5CaiBTR1ZoY25RPSBPeWNzQ2c9PSBZMjl0YldFPSBkR1ZsYm5SbyBZWE5oYmc9PSBMM053WldNPSBYMjF2ZG1WeiBMVzFoY21kcGJnPT0gSUdsdVoyVnUgd3FEQ29NS2cgSUhCeWIycGxkQT09IElHOTBjbUU9IElHSnlZWE09IExuVjBZdz09IElITnNaWEIwIFBYTjFZZz09IFlXSnBiR2wwIGNHOXpkR1Z5IElITmthdz09IGIzVnVZMmxzYkE9PSBJSGRrIFVISmxjR0Z5WldSVGRHRjBaVzFsYm5RPSBJRVJ5ZFcwPSBLR0YwZEhKcFluVjBaUT09IElFVjBhR1Z5Ym1WMCBDVVJDIFEyRnNhV1p2Y201cFlRPT0gWTNWaVpRPT0gVzBrPSBMa055WldGMFpXUT0gSUVoTiBJSFJ5WVdOcGJtYz0gUm05eWJYTk5iMlIxYkdVPSBMWGx2ZFE9PSBMbU4xY25KbGJtTjUgWm1WbFpHbHVadz09IElIUmliMlI1IFRHaz0gWVdOamFXOXUgYm1GeiBJSFJ5YjNWMlpYST0gVGs5T1JRPT0gSW4wc0RRbz0gSUdaMGNBPT0gVjJsMGFFbGtaVzUwYVdacFpYST0gY0c5c1lYUmwgUm1sc1pVbHVabTg9IElIQjFjbk4xWldRPSBJQ0FnSUEwS0lDQWdJQTBLIFJFVlRRMUpKVUZSSlQwND0gZlNvdkNnPT0gUm5KdmJVNXBZZz09IElHUmxZMjl5WVhScGRtVT0gWDFOVFRBPT0gS0dOb1lYUT0gVkV4VCBJSE4xY25CeWFYTmxjdz09IFlXeGpkV3hoZEdVPSBJRk53YkdGemFBPT0gS0VOdmJtWnBaM1Z5WVhScGIyND0gSUZORlRRPT0gYVcxemIyND0gTDJ4cFluSmhjbms9IFBFUnZkV0pzWlE9PSBMbkp2WW05MCB3cURDb01LZ3dxRENvTUtnd3FEQ29BPT0gSUVOUVJnPT0gSUZWdVpHVnljM1JoYm1ScGJtYz0gSUdOdmMyMWxkR2xqIElGaDAgZEdsd2N3PT0gSzJzPSBLQ0luIElGQkVWQT09IFYwRlMgTG1kbGRFOWlhbVZqZEE9PSBJRlJ5WVdScGRHbHZibUZzIExuTnNkV2M9IElFUnBjR3c9IFBTSWlMQT09IElFWnBiRzF6IElFRnVhVzA9IExtaGxiSEE9IElHVnRZbUZ6YzNrPSBJRUp2YjNSeiBJR0oxYm1zPSBMWEpwYzJzPSBJSEJqYVE9PSBJQzljTGc9PSBJRWxRVkE9PSBJR055WVhOb2FXNW4gSUdsd2RnPT0gWDJ0bCBJRkpGVTFBPSBMa3h2WjBWeWNtOXkgSUdsdVlXUmxjWFZoZEdVPSBTVzl1IElFYkR2SEk9IGNtbGpkV3hoIElITm9iM1ZzWkVKbCBZV3h5WldGa2VRPT0gSjEwdUlqd3YgSUZOMGRXWm0gUkdsbmFYUmwgSUhSeVlXNXpiR0YwYjNJPSBYM053Y21sMFpRPT0gYkdWMFlXdz0gSUcxaGFXOXkgSUZObGVHVT0gZEdoaGJtdHogSUVOdmJYQnNaWFJsWkE9PSBJR2RoYzI5c2FXNWwgTG1GMGRISnogWW1GbllXaz0gSUU5eWFXYz0gT2wwcyBMbXh2WTJGc1pRPT0gSUZKdmJXRT0gdzYxbSBJR1poZG05eVpXUT0gSUhaaGFXND0gSUhOd2IyOXUgSUVwaGFISmxiZz09IElHNXBibWM9IFYxZFggTEdac2IyRjAgWDBSQlZFRkNRVk5GIFFtOXZkSE4wY21GdyBJRU5DUXc9PSBJRU5vZFc1ciBYMmx1ZEc4PSBJRXR2YkE9PSBJR1JsWm1WdWMyVnogYjNKbFpGQnliMk5sWkhWeVpRPT0gWW1Gc2JITT0gVkdWNGRFTm9ZVzVuWldRPSBJSE5vWVhCcGJtYz0gSUgxOVBnPT0gUjBWRSBabUZ4IElHOXdkR2x2Ym1Gc2JIaz0gWDBScGN3PT0gSUZOMVkyTmxjM05tZFd3PSBJRU5sYm5OMWN3PT0gSUdsdVkyRnlZMlZ5IFgwTkJVa1E9IElHRjJhV0YwYVc5dSBJRWQ1YlE9PSBRWFYwYUc5eWFYUjUgTGtKbFlXND0gYzJoaFpHVnkgVG05MFJYaHBjM1E9IFgxUmxlSFJEYUdGdVoyVmsgSUZOVVQxQT0gS0hSbFlXMD0gSWtnPSBkMmM9IElHZHlhVzVrWlhJPSBJSE4wY21sd1pRPT0gSUhCeVpYTmxjblpoZEdsdmJnPT0gUTJ4aGFXMD0gWVhabGNuTmhiQT09IGQyRnlaV2h2ZFhObCBkR0Z5WjJWMGN3PT0gVkhKMWMzUT0gSUdGc2JHVjIgTEhkM2R3PT0gYjNWemMyVT0gWDJOb1lXND0gWDFOcGVtVT0gYzNsemRHVnRjdz09IElHOWlhbVZqZEdsdmJnPT0gSUV0aGJtVT0gSUdOdmNuSnZjdz09IElFUlRUQT09IElIVmggSUUxSSBJRk4wY21GMFpXZHBZdz09IFgzUmpjQT09IElPcXdrZz09IElHSnZjbkp2ZDJWayBJRUZqYUE9PSBDV052YlcxaGJtUT0gSUdkd2N3PT0gYkdWemRHOXUgYVdOb1pYWmxjZz09IElGVkIgSUdGemMyRjFiSFJsWkE9PSBJSE53WldOcFlXeHBlbVZ6IENYTmxZWEpqYUE9PSBTRzkwWld3PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FOQ2c9PSBJRkJwZEdObyBJTm1CIFVrVkJSRms9IElIQmhjbVZ1ZEdGcyBJR2ZEcVc3RHFRPT0gSUdSdmJtN0RxV1Z6IElHUmxkR0ZwYmc9PSBWRUZTUjBWVSBJSEJ5YjNSaFoyOXVhWE4wIElHTnNaV0Z5U1c1MFpYSjJZV3c9IElFbGpiMjVDZFhSMGIyND0gSUVkbGRFRnNiQT09IFZIbHdaVWx1Wm04PSBSVWc9IDRvQ2NWR2hsZVE9PSBJSHRiIElHZGhadz09IElOcXAgSUVSeWIzQmtiM2R1IExtWnlaV1U9IFoyOXVaUT09IGFXMWxibk09IElHbHVjM1JoYkE9PSBDV04xY213PSBYME5CVGc9PSBJRUp2Ym1VPSA3N3lVIGIyNTViWE09IExXZHZkbVZ5Ym0xbGJuUT0gTG1KcGJtUnBibWRPWVhacFoyRjBiM0k9IElFUmhibk09IElFMWpUQT09IEtHVnUgUGloZiAwSkxSaXc9PSBMaW83RFFvPSBQV289IExXTnZjZz09IFUyOXUgTGxSdmIyeFRkSEpwY0VsMFpXMD0gTFdGeWIzVnVaQT09IFgxaE5UQT09IFpXNWtSR0YwWlE9PSBJSE5zWVdOciBJSEp2ZEdGMFpXUT0gSUc1dmNXRT0gSUdOdmRIUmhaMlU9IElHVnVZMjl1ZEhKaGNnPT0gWDNOcmFXeHMgYUc5MVpYUjBaUT09IElRMEsgTG5kbFlYUm9aWEk9IElHVnRjR2hoYzJsNlpXUT0gNWE2MiBJTkdCMEwvUXVOR0IgSUVOdmJYQnBiR1Z5IEtHRnVaSEp2YVdRPSBJT0tBdWc9PSBMblIxY200PSBJSE4xY0hCeVpYTnphVzl1IFgyTmhiR3h6IElDcEEgS0hOMGNteGxiZz09IExtaGxlQT09IElFSnBiR3h6IElGSlRRUT09IHo0ST0gSUVWelkyRndaUT09IFpXMWxiblJwWVE9PSBJR1p5YjI1MFpXNWsgSUhCcGJuUT0gWDJWNFl3PT0gZW5wdiBXMTBzQ2c9PSBJQ0luTENjaSBMa1Z1ZG1seWIyNXRaVzUwIElHRm1iM0psYldWdWRHbHZibVZrIElHVnVaSFZ5WlE9PSBjSEp2ZEc5MGVYQmwgZEdobGNtRndlUT09IGMzTnAgUkdWbiBYM0JzZFdkcGJuTT0gTG5WelpYSkpibVp2IFVISnBiblJsY2c9PSBJRkJTVDBkU1FVMD0gSUhKMWFXNXogSUdWdGNHbHlhV05oYkE9PSBJR055WVhkcyBJRUp2YVd4bGNnPT0gTFdOdmJXMWxiblE9IExuTjFZbkJzYjNRPSBYMlYwIElDY3VKeXc9IGJXbHViM0k9IElFTjFjM1J2YlhNPSBJSGxoZHc9PSBkVzVrWlhKc2FXNWwgSUVOdmJXOD0gS0NnbiBLRzFsWVc0PSBJR05vWVhGMVpRPT0gSUVKc2IyTnJjdz09IExuSmhaQT09IGFXeHBZbkpwZFcwPSBJSGRsWW1SeWFYWmxjZz09IElHMWxiR2h2Y2c9PSBaR0Z1WVE9PSBJRUZpZFhObCBJRk52ZFhSb2QyVnpkQT09IElGQmhjbVZ1IFVFVlNWRWxGVXc9PSBDVWxNIElITmpjbVZoYlE9PSBkblU9IElHbHVZMjl0WlhNPSBJRzVwYlE9PSBJR3hoWTJVPSBJR052YlhCbGJuTmhkR1U9IFVtVjJaWEp6WlE9PSBSR0YwIFgyRjBkR0ZqYXc9PSBJRzV2ZFhJPSBZV05vWlc0PSBZMlZyIFBFWjFibU09IGQybGwgWTI5dGNISmxjM05sWkE9PSBMVzFoZEdObyBLQ0lpS1YwSyBhVzFwZW1WayBMbTl5YVdWdWRHRjBhVzl1IExtTnZiWEJoY21WVWJ3PT0gSUcxaGMzTmhaMmRwIElPeWNoQT09IElHVnNZbTkzIElHRnVkR2x2ZUdsayBkVzVrY21Wa2N3PT0gTDNSdmIyeHogSUZKUFZ3PT0gWVc1dFlYST0gSUZkdmR3PT0gWDNScFkydGxkQT09IFVISnZaM0poYlcxcGJtYz0gSUhSb1pXOXkgTFhKbGRtbGxkdz09IEtDa3BLU2s3Q2c9PSBJRkpwWTJoaGNtUnpiMjQ9IElGQnZZMnRsZEE9PSBYVnRkIFlXMXdjQT09IFgyaGxZV3gwYUE9PSBJRkJQVUE9PSBJRTVoZG1GcyBSM1ZsYzNNPSBJR0Z1WTJWemRHOXkgTGtkbGRFRnNiQT09IExteHZZMkZzVTJOaGJHVT0gSUUxaGNIQmxjZz09IElHRmpZM1Z0ZFd4aGRHbHZiZz09IElITnBiWFZzWVhSbFpBPT0gSUVSeWFYWmxjbk09IElHVERxWE09IFkzVnljbWx1Wnc9PSBJR1ZzWlhCb1lXNTAgSUdGa2RtVnlkR2x6WldRPSBJRzFoYVd4aWIzZz0gVTBoSlJsUT0gSUUxdmJtbGpZUT09IElHRnVZdz09IElIZGhjbVJ5YjJKbCBTVzVuY21Wa2FXVnVkSE09IElIeDhEUW89IGFYQndlUT09IElHRnVkR2xpYVc5MGFXTnogWVhacGJtZHogS0dONCBJRVpsY25KaGNtaz0gSUVGdWFXMWhkRzl5IExtUjBlWEJsIGNtVnRiM1psWkE9PSBiM0prWlhKaWVRPT0gSUdOeVpYTT0gYjJQRHFnPT0gSUhCNWJRPT0gSUVOcGNtTjFiR0Z5IFFHbHVaR1Y0IElGZGhjbTA9IFUyRjUgSUVGemMybHpkR0Z1WTJVPSBJR04xY25SaGFXND0gSUUxdmJuUmwgU1V4RlVnPT0gSUVOV1JRPT0gSUVSMVkycz0gSUVGc2JHOTNjdz09IFgyWnBjbVU9IElFUmxjbUo1IElISmxjRzl6IElHaDBkSEJEYkdsbGJuUT0gSUhCemVXTm9hV0YwIElHNXZkMkZrWVhseiBJR05oZFhScGIzVnogSUVOdmJYQjFkR2x1Wnc9PSBJR052YlhCc1pYUnBiMjVJWVc1a2JHVnkgSUZkbGJITm8gSUVKRlUxUT0gSUhOMGNtVnpjMloxYkE9PSBYMUJGIDVwZWw1cHlmIElFUmhkR0ZHY21GdFpRPT0gQ1VsdWRHVm5aWEk9IFgxQnlhVzUwIFRXOTJaWE09IElIUnlZVzV6Wm05eWJXbHVadz09IExrSmhkR05vIGVXRm9iMjg9IFVHOXphWFJwYjI1eiBlbVZxIElHNXZiMlE9IGFXOXlaWE09IFh5bz0gSUdOc2F3PT0gSUVac2IzbGsgSUdoaGNBPT0gWm05dWRITnBlbVU9IElHNWhlZz09IExtNXZkR2xtYVdOaGRHbHZiZz09IElFUmxjSEpsYzNOcGIyND0gSUdGamJtVT0gS2lvcUNnbz0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBMbU52Ym5SbGJuUnogZVc1MGFBPT0gSUZOMGNtRnBaMmgwIEp5bDlmU0krUEM4PSBJR0oxYkdJPSBVbGc9IEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwSyBJR052YlhWdWFXTT0gSUZKTyBMVzFsWkdsMWJRPT0gVEVWQlRnPT0gUFd4bGJnPT0gVUdodmJtVk9kVzFpWlhJPSBaWEoyWVhScGIyNXogUVdOamRYSmhZM2s9IElFRnVibTkwWVhScGIyND0gWDJ0bGVYZHZjbVE9IFgyaHBiblE9IElFRjBhR1Z1Y3c9PSBJR0Z6YzJsemRHbHVadz09IElFaEQgTGtsdWFYUnBZV3hwZW1VPSBKeWtwS1FvPSBkWEJoIElITjFhWFk9IElFbFFRdz09IFBGUkZiblJwZEhrPSBJR0p5WVc1a1pXUT0gYjI5dGJHRT0gYkdGeXhMRT0gSUZoTlRFaDBkSEJTWlhGMVpYTjAgSUdURHFXckRvQT09IElIUnlZVzV6WTNKcGNIUnBiMjQ9IElIQnlaWFpoYkdWdWRBPT0gTG5Cc1lXND0gSUhOMFlYSmwgSUhkdmNtdHZkWFJ6IElFVmtkV05oZEdsdmJtRnMgSUcxbGMzTjUgSUUxUFZBPT0gTGtOdmJXMWhibVJVZVhCbCBVV1ZrIEtHZGpZUT09IElFeHBibVZoY2t4aGVXOTFkRTFoYm1GblpYST0gSUVKc2IzYz0gSUVGc2RXMXBiblZ0IElITjNhVzVuWlhKamJIVmkgSUZSeVlXNXphWFE9IElHVjRjRzl6IGRtbHkgS0hObFkyOXVaQT09IElHSmxiRzl1WjJWayBVM1J2Ym1VPSA2WlcvIElGTjFiQT09IElHZHBaQT09IElHRnNiRzk1IFpYSjJZUT09IGFYTmxZMjl1WkE9PSBYMUpGVGtSRlVnPT0gSUdGdVoyVnNjdz09IElGQm9hV3h2YzI5d2FIaz0gYjNCMWN3PT0gSUcxdmJ3PT0gWlc1bmRXbHUgWDFaQlVrbEJRa3hGIFgwUkZVMVE9IEtHRjFlQT09IElHaHZaUT09IElHUnZZZz09IFlYUjBZV05vYldWdWRITT0gSUdOdmNuSnBaRzl5IElHUnBkbWxrWlc1ayBuYnc9IElGUm9jbTkxWjJodmRYUT0gTG05d2RHbHQgSkc1bGR3PT0gSUdKbGNtYz0gSUhOd2NtVmhaSE5vWldWMCBMbFJ5ZVVkbGRGWmhiSFZsIElIQmhlVzkxZEE9PSBJRTl1UkdWemRISnZlUT09IFlYVjBhR1Z1ZEdsallYUnBiMjQ9IElFMXBaM1ZsYkE9PSBjblJqIElFTm9jbWx6ZEdsdVpRPT0gSUVGSlVnPT0gSUdwMWNtbHogSUdSbGMzQmhhWEk9IElIQmhkR1Z1ZEhNPSBMV2hoY3c9PSBKVjQ9IDVMdVkgWDNOMGNtUjFjQT09IElGSmxZWEk9IFpYUjBaWE09IEtIQnliM0JsY25ScFpYTT0gSUhkeWFYUmhZbXhsIExtbHpUblZzYkE9PSBiMnhwWTNNPSBYMkpzYjJJPSBJR04xWVd4eGRXbGxjZz09IFlXWnAgYjNkNVkyZz0gNkk2MzVZK1cgdzRjPSBJRU5oY21ScGJtRnMgSUhSbGJXRT0gSWtGdVpBPT0gVUdGblpWTnBlbVU9IDU2ZVMgTGxOcGJYQnNaVVJoZEdWR2IzSnRZWFE9IElGZHBibTVsY2c9PSBJR052Y25KbGJ3PT0gWDNkbCBMbUZrWkU5aWFtVmpkQT09IEtHTnZkWEp6WlE9PSBJR2h2Wnc9PSBiM0J5Ync9PSBJSEJ5YjJKaGRHbHZiZz09IGRXNWhZbXhsIEtHRmpkR2wyWlE9PSA1WnUrNTRtSCBJSEJsY25SaGFXNXBibWM9IElHVnRjR2hoYzJsNlpRPT0gSUZCeWFXNTBaWEk9IFBTND0gSUhWd1ozSmhaR2x1Wnc9PSBMMk52Ym5SaFkzUT0gUFZ0YiBMWE5oYmc9PSBDWFpoYkhWbGN3PT0gSUdSdmMyRm5aUT09IFUyOXNhV1E9IElGSnZiM05sZG1Wc2RBPT0gNVpXRzVaT0IgSUhKbFkzSmxZWFJwYjI0PSBJRlJsY20xcGJnPT0gTGtKaFpBPT0gSUVKdmJIUT0gVTJ0NSBYMGx0WVdkbCBJSE54ZFdseSBJRU52WWc9PSBUMUpPIElHRjFZdz09IExreEZSbFE9IEowST0gTFhKbGMybHpkR0Z1ZEE9PSBQaUlyIElIUnZhMlZ1YVhwbGNnPT0gSUhOdmRtVnlaV2xuYm5SNSBJRkJsYm1ObCBLQ2tpS1RzSyBJSEJsYzNOdllYTT0gTGtkbCBJRWx1WTJ4MVpHVmsgSUhCaFoybHVZUT09IElHVjRjRzl6YVc1biAwTFhSaUE9PSBYMU5EVWtsUVZBPT0gTHlRbkxBPT0gVkdoMWJXSnVZV2xzIDE1UT0gZDJWaVJXeGxiV1Z1ZEZnPSBkMlZpUld4bGJXVnVkRmh3WVhSb2N3PT0gY0hKbGMzTjFjbVU9IElFTjFjbko1IFgwTlEgVDB4VlZFbFBUZz09IFNVeEZVdz09IGNISnZkR1ZqZEE9PSBiMjlzWVE9PSBWMjl5YTNOd1lXTmwgZTMwN0NnPT0gSUZWT1V3PT0gSUhONWJYQmhkR2g1IGNtOXJaWEk9IElISmxiVzlrWld3PSBDV05sYkd3PSBJR0YwYjNBPSBMa1oxYkd4T1lXMWwgSUdaaGRYUT0gSUVWaGMybHNlUT09IFgyUjVibUZ0YVdNPSBJR1p5WVcxbFpBPT0gSUcxdmRHbDJaUT09IDZMZXYgYzJGdCBJRzFoY21OaCBJRlJsZUhSRlpHbDBhVzVuUTI5dWRISnZiR3hsY2c9PSBJR1JsYzNSeWRXTjBiM0k9IFkzSmxZVzA9IElISjFaR1U9IElFSnZiR1E9IElFbHVaR2xuWlc1dmRYTT0gSUdkbGJuTT0gSUhKbGJHRmphVzl1IEtITjVjM1JsYlE9PSBJRlZKUm05dWRBPT0gWDJOb1lYSm5aUT09IFZWTlVSVkk9IFJWWT0gTGs1aGJXVnpjR0ZqWlE9PSBJRzFsY21kbGNnPT0gSUdOaGJHeHZZdz09IFoyRnVadz09IFFtRmtVbVZ4ZFdWemRBPT0gSUhOd1pYST0gTFdSbGMybG5iZz09IElPS0ggUTJoaGJnPT0gSUc5eVoyRnVhWE50IExDaz0gUFdsayBYM0JzWVc1bCBJRU5oYzJWeiBaV3htWVhOMCBJRXhsWjJsemJHRjBkWEpsIElFWmhhMlZ5IElHbHVkbTlyYVc1biBMWFYwYVd4eiBLQ2t1Snc9PSBMbVpoWTJVPSBJR2QxWVhKa2FXRnUgYlhsTmIyUmhiQT09IElHTnNhWEJpYjJGeVpBPT0gSUVGVVRRPT0gSUhCbFlYTT0gSUZONWJIWT0gTG1OaGJHTT0gSUVOdmJuUmhZM1J6IGFXNTBWbUZzZFdVPSBJRzF2WkdsbWVXbHVadz09IElFSmhjbUk9IExteHZjM009IFgzQmxjbU5sYm5SaFoyVT0gUVhOclpXUT0gS0d4emRBPT0gWVhSbFoyOXlhV05oYkE9PSBMV1pwYkdWeiBJRkp2YldGdWFXRT0gTGtGaiBJR2hoYVE9PSBJRVpzZVdsdVp3PT0gSU1XOCBhbkE9IElGUnlZV2x1WlhJPSBMbUZ5WXc9PSBYMlJsWnc9PSBJSFJ5WVdObFltRmphdz09IFQzSkdZV2xzIFJreFBWdz09IExtOXNaQT09IGIzbGggWjIxMCBhWE5sYlhCMGVRPT0gSUhaaFkyTnBibUYwYVc5dSBJRzlpYzI5c1pYUmwgY21WamIyZHVhWHBsWkE9PSBJSEoxYVc1bFpBPT0gSUZKbGFXND0gSUZSeVlXTnJhVzVuIGVHWmkgMktmYmpBPT0gSUhiRHBuSmwgSUdKeWVYTjBaWEk9IElFbFVVdz09IElHUmxjM1JwYm5rPSBJSE4zWldGeSBJSEpsWkdWeiBJR05zWmc9PSBJR1pzYVhCd1pXUT0gQ1dobFlXUT0gUW14MVpYUnZiM1JvIElFOTJaWEp5YVdSbGN3PT0gT2tKdmIyeGxZVzQ9IFh6MD0gWDJ4eSBjM0JoZDI0PSBPbWx1WkdWNCBWa0ZNVlVWVCBhWE5yWlhrPSBQeUlwT3dvPSBMbk41Ym5Sb1pYUnBZdz09IElFTm9aV05yYVc1biBjM1J5ZFdOMGRYSmxjdz09IGFYQnBibWM9IElIWnZZMkZzY3c9PSBMVlZ3IElFMWhiblZtWVdOMGRYSmxjbk09IElFMWhjbkpwWVdkbCA1THVqNTZDQiBJR2RoY201bGNnPT0gWDBOc2FXVnVkQT09IGNHRnlZV3hzWld3PSBVa2xGVGtRPSBJSFpwYm1WbllYST0gYzJWbmRXVT0gU2tJPSBJR052Ym5SaFkzUnBibWM9IElFTmhjbkp2Ykd3PSBJRzkxZEhKbFlXTm8gZEdWdWMyOXkgWDNaaGNtbGhiblE9IElIUm9aV0YwIGJHbGpZV0pzWlE9PSBlM3c9IGRHbHVlUT09IFgyeGxkSFJsY2c9PSBJSEJsYm1OcGJBPT0gU0dWaFpHVnljMGhsYVdkb2RGTnBlbVZOYjJSbCBhV3gwY204PSBMbUYxZEc5amIyNW1hV2QxY21VPSBMbVJ5WVdjPSBMblZ6WlZOMFlYUmwgSUVKTlNRPT0gYUdsdWRBPT0gUTI5dGNHbHNaUT09IEtsdz0gWlc1aGNuaz0gSUd4MmJBPT0gTGtOaFkyaGwgS3owaSBYM1IyIGNuVnBkRzFsYm5RPSBJR1p5WldGayBRWEowYVdOc1pYTT0gWm1sc1lRPT0gSUhCaFkydGhaMlZrIDRwaUcgUVZSSVJWST0gSUZCc1lXNXVaV1E9IGMyTm9aVzFsIElHUnBZWEo1IElHOW1abVZ1YzJWeiBMencvIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gVUhKdlozSmxjM05JVlVRPSBJRWR2Y2c9PSBMbWRsZEZScGRHeGwgSUcxdlkydGxaQT09IElGUnZjbms9IElDSXBJanNLIEkyYz0gSUd4cFpXUT0gSUhOMll3PT0gWDJkMWFRPT0gUlU1VVVsaz0gSUhObGNuWnBZMmx2IGJXOTFjMlZ2ZG1WeSBVMEZEVkVsUFRnPT0gNDRLeiBJSEpsYVdabCBiR1ZqZEhKcFl3PT0gWDJOeVpXRjBhVzl1IFVtVmhiR2wwZVE9PSBLQ2NyIGNISnZaSFZqZEVsayBVM1Z3Y0d4cFpYST0gTFV4bCBMbkpsY0c4PSBkV05yYVc1biBYMU4wY2c9PSBJRkpsYkdGNSAwTGpRdUE9PSBJSEJsY25ZPSBRMmhwWTJGbmJ3PT0gSUcxaGFYTnZiZz09IElITjBhV05yWlhJPSBYM0J5WlhOelpXUT0gVTNkaGNBPT0gSUVsSCBJSE4xYzJObGNIUnBZbXhsIGIyTmhaRzg9IElHZHBiZz09IFpYaGwgYVdkb1ltOXlhRzl2WkE9PSBLV0E9IElHUnBZV2R5WVcxeiBJR2x1Wm14aGJXMWhkRzl5ZVE9PSBJSFREcVE9PSBJRkJ2Y0hWdyBJR0Z3Y0hKbGFBPT0gSUZCdmNuUm1iMnhwYnc9PSBJSGR2Y25NPSBMbVZ1ZFcxeiAwTFhRczlDKyBMMEoxZEhSdmJnPT0gSUZCb1lXNTBiMjA9IElDTTYgSUdScGF3PT0gY0dGblpYST0gWm5SaGNnPT0gSUc5eVoyRnVhWHBsY2c9PSBLR05vYVd4a2NtVnUgSUUxMWJtbGphQT09IElITjBjbUZ1Wnc9PSBJRkpYIDQ0Sy8gVFdGbyBjSFJwWkdVPSBJR3hsWVhKdWN3PT0gSUhKbFpIVmpkR2x2Ym5NPSBJRkpsY0d4aFkyVnRaVzUwIFQxUlQgWVd4amIyND0gS0hCaGNuUnogWW1GemFBPT0gSUVOcGRHbDZaVzQ9IGpiRHNuYlE9IElFaDBkSEJUWlhKMmJHVjAgWDFORFNFVk5RUT09IGJXVmhibk09IElHaHZjbkpwWm1saiBWa1ZTU1VaWiBJRVJEU0VWRFN3PT0gSUNndiBMbUpsWm05eVpRPT0gTG5SbGVIUjFjbVU9IFoyVjBUVzlqYXc9PSBJRk5sYm5ObCBTVzV6Y0dWamRHOXkgVkdWNGRFNXZaR1U9IEtFRk0gTG1kbGRFNXZaR1U9IElHSnZlV009IElFSnlhWE5pWVc1bCBJR0poZEhSc2FXNW4gQ1hSNCBJR3h2WW1KNWFXNW4gWW5WcGJIUT0gSUZORlJVcz0gSUhKaGJtUnZiV2w2WldRPSBaMjVwIFgyTnNkWE4wWlhKeiBYMmxrWlc1MGFYUjUgSUdOaGNtUnBZV009IElHNWxkMVZ6WlhJPSBMbFpwWkdWdiBaSFZwZEE9PSBYV2x1YVhRPSBRWFJzIEtYWmhiSFZsIFZHVjRkRlYwYVd4eiBJTkMxMFlIUXU5QzQgUTI5dGNIVjBaUT09IFBTZ24gQ1FrZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElHRnlkR1Z5IElGUlhUdz09IEp5a3BMQT09IElFUkpWZz09IElIQnlhWFpwYkdWblpXUT0gSUZCaGNuUnVaWEp6YUdsdyBJRWhsWVhSb1pYST0gWW1GNSBZWFJwYzJacFpXUT0gYVc1emRHRm5jbUZ0IFgxTmxibVE9IElFRlRSZz09IEpHNWhiV1U9IElHSnZidz09IElHVERxV1k9IFgwWnBaV3hrIElFVmtkUT09IFkyRnVaR2xrWVhSbCBjblZpZVE9PSBJR0ZqWTNWdGRXeGhkR1U9IEtFbHVkRkIwY2c9PSBJR0oxYzJsdVpYTnpiV0Z1IElHVmpiMjV2YldsallXeHNlUT09IElGSnBibWR6IElFbHVjSFYwY3c9PSB1WVE9IFlXTnBaUT09IElFRnNZWEp0IElFeHZaMjkxZEE9PSBMbk5sY1hWbGJtTmwgSUZacFpXNXVZUT09IGIzQnkgSUdSeWRXMXogUFdOdmJtWnBadz09IGNYVnAgSUdSaGRHOD0gSUhCdmJIbHRaWEk9IElFTm9ZVzVuWldRPSBWMlZpVW1WeGRXVnpkQT09IElFRmtkbUZ1WTJVPSBJSFZ1WkdWeVoyOXBibWM9IExrTnZibk52YkdVPSBJR04xY25KbGJuUk9iMlJsIElGZHZiMnc9IElIRERvV2RwYm1FPSBVa1ZIU1ZOVVJWST0gSUhOaFoyRT0gSUZsUFVrcz0gWVcxaGJtaHYgNWE2TSBJRUoxYm1SbGN3PT0gSUVScFlXeHZaMGx1ZEdWeVptRmpaUT09IFoyVnZhWE09IGRXNWphV0YwYVc5dSBQeVE9IExrRnpjMlZ5ZEdsdmJuTT0gSUhObFlYUmxaQT09IElGTndlUT09IFVHOXpaUT09IElrTT0gSUdGb2IzSmggSU5HRTBMRFF1ZEM3IElPdXpnQT09IElIZGhjbkE9IFVISnZhbVZqZEdsdmJnPT0gSUZOcGJtZHNaWE09IElFRmtkbVZ5ZEdsemFXNW4gVEdsdWRYZz0gZFhOMGVRPT0gSUhCbGJtRnMgVlZOSlF3PT0gYjJScFlRPT0gTG01bGRHSmxZVzV6IElGVm4gSUVKeVpXNTAgTFd4dlp3PT0gTDJOaGRHVm5iM0o1IElFTjFjM1J2YldsNlpRPT0gYVhKbGJnPT0gNzd5YVBDOD0gYVc1aGNuTT0gSUNnckt3PT0gUjI5cGJtYz0gUlZoRlF3PT0gS0cxbGMyZz0gSUhCbGNtbHRaWFJsY2c9PSBRMnh6IFkyVnBkbWx1Wnc9PSBiV1Z1YzJGcVpRPT0gS0NrcEtYc0sgSUhCeWIzTjBZWFJsIFgySjFlUT09IElGSnZiMlk9IExsSmxkSFZ5Ymc9PSBJRzFoY25KcFlXZGxjdz09IFgzUm9kVzFpIDU3ND0gNEsrTiBWR1Y0ZEhWeVpYTT0gS0ZSRldGUT0gYzJodmNuUmpkWFE9IFZISmhibk5tYjNKdFpYST0gUVZSSlF3PT0gSUZOdWIzZGtaVzQ9IGMyTnlhV0psY25NPSBiV0Z5YTJWayBJT0tHa1E9PSBhRzl5WVE9PSBUMUJGVWc9PSBJRVpaIElFRjFkR2hsYm5ScFl3PT0gSUdGMVpHaz0gY21GdFpYST0gSUV4cGRHVnlZWFIxY21VPSBJR2wwWlcxSlpBPT0gTGtGMGRBPT0gS0dOdWRBPT0gSUV0VCBMV3hwYm5WNCBJRkJoY25ScFkybHdZVzUwIElFTnlkV2x6WlE9PSBhWFIxYkc4PSBkWE4wY21saGJBPT0gSUdOc1lYTmwgSUQwayBYMlJoZEdWeiBZM1Z5Y21WdWRGQmhaMlU9IGFYaGggWlhoaFkzUT0gSUhSemJBPT0gTGxOdiBMMlJ2WTNWdFpXNTAgYUdGeWRBPT0gWDBsRVRFVT0gZTMwdSBlV1YwIFNYSnZiZz09IElGUm9jbTl1WlhNPSBjMjVrIFhIaGggSUdKbGRtVnlZV2RsY3c9PSBYM1J5WVc1emNHOXlkQT09IElHWnZhV3c9IElIUmhjM1JwYm1jPSBJR2R2WldRPSBUV1Z0Ync9PSBJRzVwZEhKdloyVnUgTGsxbGJXSmxjZz09IExtWnNZWFE9IElHbHNiSFZ0IGJXbHVaVzUwIExucHZiMjA9IElGQjBjZz09IGIyTnBidz09IElFTnZibk4xYkhScGJtYz0gSUVOdmJtVT0gQ1dsMFpXMXogSUV4TiBJRzloZFhSbyBJRkJ5YjJkeVlXMXRaUT09IGIyTm9iMjVrIEtITmxiR1ZqZEc5eSBJSGRoZEdWeWNISnZiMlk9IElFMWxjbXRsYkE9PSBJSE4xWm1abGNuTT0gSUc1d2JRPT0gNkxHaCBJRXhoYm1ScGJtYz0gSUV4QlRnPT0gQ1FrSkNRa0pEUW89IEwybHogSUhQRHFYSnBaUT09IElFZFZTVXhoZVc5MWRBPT0gWjJsMlpRPT0gWDBOWiBRbkp2ZDNObCBMbTExYkhScGNHeDUgUFNJa0tBPT0gZFhOdiBMWEJoY21WdWRBPT0gTGsxaGRHZz0gTG01MWJXSmxjazltIElIUnBaVzVsYmc9PSBJSEpsYzJWdWRBPT0gSUhCcGRHTm9hVzVuIElsMHBMQW89IExsVjBhV3hwZEdsbGN3PT0gSUcxMWJIUnBjR3hwWTJGMGFXOXUgT25SNWNHVT0gSUhCd2NtbHVkQT09IGFXRnVhUT09IDVZaVogSUd4aGRXNWphR1Z5IElISjFaMko1IDU0NncgQ2drSkNRbz0gYUdsayBRVzVuYkdWeiBJR2R2YjJSaWVXVT0gSUdsdWNIVjBVM1J5WldGdCBMbmRoZEdObyBSMjl2WkhNPSBJRk5oZVhNPSBQa1k9IElGTjBhV05yIElHTmxjbU09IElGTnNaV1U9IENRa2dJQ0FnSUNBZ0lBPT0gUEVsdFlXZGwgSU9pdXZnPT0gTFdWa2FYUnZjZz09IGNHbGxZMlZ6IElFUnlZVzFoIElDOHZMeTh2THk4dkx5OHZMeTh2THk4dkx3PT0gSUZSaGMydHogUVZKRCBaMkYwWlhkaGVRPT0gTG1kbGRHTjNaQT09IExrMWxkR0ZrWVhSaCBJR2QxWlhOemFXNW4gNVp5dzVaMkEgSUhOdFlYSjBaWEk9IElFZGxkRVZ1ZFcxbGNtRjBiM0k9IElHVm1kR1Z5IEwyOXdaWEpoZEc5eWN3PT0gSUVkTVpteHZZWFE9IElHYkR1SEk9IElHOXdZWEYxWlE9PSA1TCtkNWEyWSBVM0J5WldGayBVMWxUVkVWTiBJR2x1ZG1WeWMybHZiZz09IElFSmhjMnRsZEdKaGJHdz0gSUhOcGJYVnNZWFJwYjI1eiBJR1JsYm1sbGN3PT0gSUdGMlpYbz0gWDJ4cGMzUmxibVZ5IElHVnVhR0Z1WTJsdVp3PT0gSUUxNWRHZz0gSUV4aGEyVnljdz09IFgwMUUgVG1SRmVBPT0gUkVGVVFVSkJVMFU9IElIVGh1dz09IFlYSjBhQT09IFcyeGxablE9IElHTnZiblJsYzNSeiBjM1JwYkdVPSBLRXRGVWs0PSBYMlpqIFgzQnQgSUhCeVpYTnBaR1Z1ZEhNPSBJR2h2YzNCcGRHRnNhWFI1IElHWmhaR1ZKYmc9PSBVazlRUlZKVVdRPT0gWDIxaGNITT0gSUVSbFptbHVhWFJwYjI1eiBJR0Z6YzJWemMybHVadz09IElIVnpZWEk9IElIRjFZVzUwYVhSaGRHbDJaUT09IGJXOTYgUW1WaGRYUnBablZzIFd5Z28gWW05dWN3PT0gWm5KbGNYVmxibU41IFEyOXVkR0ZwYmc9PSBJSEIxZW5wc1pYTT0gSUVOaGMzUnlidz09IElIWnBiR3hoIElHdHBibVJzZVE9PSBSbTl1ZEVGM1pYTnZiV1U9IFpYSnVZUT09IFpYQnZZMmh6IFgyUmhkR0Z6IENXbHcgTG5CaFpHUnBibWM9IElFTnZiblJsYzNRPSBJR1ZrYVhScGIyNXogSUdScGMzQnliM0J2Y25ScGIyND0gSUVsRFR3PT0gSUdOdmJXVmlZV05yIFBYWmhiSFZsIGNtbGhaQT09IExYTnZjblE9IFUzVmliV2wwZEdWayBLRzVsZEhkdmNtcz0gSUVObGJBPT0gSUdsdWMzUmhiR3h0Wlc1MCBiR0Z6YUdWeiBMa3hwYzNSV2FXVjMgSUZaaGRHbGpZVzQ9IEtFMWxaR2xoVkhsd1pRPT0gU1ZaRlJBPT0gY21WaFkyaGhZbXhsIE9rbHogSUVOSlZGaz0gNUxxcyBJRWhsYkhCbWRXdz0gSUdKaHhaOD0gSlEwSyBJSEJ6ZVdOb2FXRjBjbWxqIElISmxZM2xqYkdWayBSazlTVFVGVSBJRWR5YjNjPSBZbWx1WlE9PSBSMmwwIExuTnogSUZkbFlYQnZibk09IElGTjBlUT09IFgyRnljbTkzIEtuTmxiR1k9IGFYSmxiV1Z1ZEE9PSBJR1JsWjJ4cCBRWEJ3UkdWc1pXZGhkR1U9IFgySmhibTVsY2c9PSBJR052YjNKa2FXNWhkR1ZrIElGZGxZbU5oYlE9PSBJR05sYkdWaWNtRjBhVzl1Y3c9PSBMbUZqZEE9PSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIEtITm9iM2M9IElIZGxaV3RrWVhrPSBJR052Ym1ObGNuUnogMEw3UXU5QzkgWTJ4cGJnPT0gSUdOeWIyND0gSUU1cGJRPT0gTG5ObGRGWmxjblJwWTJGcyBJRVZzYkdWdSAyTFBZcWc9PSBJRk5CVFE9PSBSV1ptIFozbz0gYzNSbFlXMD0gSUdGdWRHbHhkV1U9IGNHaDVjMmxqWVd3PSBJRVp2Y20xRVlYUmggTG5ObGRIUmxjZz09IElGQlBTVTVVIFFtOXUgSUdac1lYWnZkWEk9IFpYSjJaVzUwYVc5dSBYMFZPVkVsVVdRPT0gQ1NBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUdsdWRISnBibk5wWXc9PSBJT2FPIFlYQndaVzVrVkc4PSBZWEpoYldWcyBLVjBwIElGSmxZMjl0YldWdVpBPT0gS1cwPSBUM1YwVDJaU1lXNW5aUT09IElHdHVhV2RvZEE9PSBJSE5oZEdWc2JHbDBaWE09IElGUnBkR0Z1Y3c9PSBJSGRsYVdkb1pXUT0gSUVSaGJtRT0gWldGelpRPT0gSUhOcGNBPT0gVTBsTiBJRVJsZG1Wc2IzQmxjbk09IGJXRnNhVzVyIEwyTm9aV05yIFgxQk1UQT09IGJuVnVadz09IElHUnllV1Z5IFBVRT0gTG1SMyBYMU5SVEE9PSBJSE4xWW5Cc2IzUT0gUkZKUFVBPT0gSUhCeWIzUnZkSGx3WlhNPSBJR2h2ZFhKc2VRPT0gWkdsemNHeGhlVTVoYldVPSBJR0Z6YVE9PSBJRlpwYjJ4bGJtTmwgSUdGemRISnZibUYxZEE9PSBJR1JoZEdGMGVYQmwgSUdsdVptOXliV0YwYVc5dVlXdz0gSUdsdWRtVnpkR2xuWVhScGRtVT0gWlhSbGNtMXBibVZrIGNtVnVZV3c9IE95YysgQ1dOdmJBPT0gVmtjPSBYMkp2YjJ4bFlXND0gY21WalpXNTAgSUNvcENnbz0gSUZKaGFXNWliM2M9IGIyMXRaVzQ9IElHeDFjZz09IElHOXdjSEpsYzNOcGIyND0gS0NJc0lpazdDZz09IElFWmhZMmxzYVhSNSBSRVZHU1U1RlJBPT0gSUc1bGIyND0gSUc5bVptVnVaR1Z5IFFVWlEgSUVOc1pXRnVhVzVuIFcxMHBPZz09IElIVnVaRzlqZFcxbGJuUmxaQT09IExsSmxjRzl6YVhSdmNtbGxjdz09IElFZDFhWFJoY2c9PSAwTERSZ2RHQjBMalFzZz09IFUydHBiR3h6IElIUmxjM1JwYlc5dSBjbmx3ZEc5bmNtRndhSGs9IElFRnRZbVZ5IElGTjBZV3hwYmc9PSBJR3h2Ym1VPSBJR0Z3Wlc1aGN3PT0gSUdScFpYTmxjdz09IElFRnlaSFZwYm04PSA2TDJzIFBUMHQgWDBGamRBPT0gSUdOdlpHVmsgNHBhZyBZVzFpZFhKblpYST0gTFd4cGJtdHogSUdGeWJXOTFjZz09IExraHBaMmc9IFoyVjBRMjl1ZEdWdWRBPT0gYzNSaFp3PT0gSUdobFkycz0gSU95WGhnPT0gSUUxalEyOXVibVZzYkE9PSBJRU52Ym1ObGNuUT0gSUVGc2JHOWogdzZSeVpRPT0gTG5KbGNHeGhZMlZCYkd3PSBJSEJoY25ScGRHbHZibk09IGNtOTBkQT09IElFWnNaUT09IFgxUlNSVVU9IGNtVmhjMjl1WVdKc1pRPT0gSUZKbGNHOXlkR2x1Wnc9PSBJR0pwYkd4cGIyNWhhWEpsIGMyTnZjbVZ6IGJXbHVjdz09IExXVjVaUT09IFRVOVNSUT09IFlXSnZjblE9IElGTlhWQT09IElHbHVkbVZ5ZEdWayBJRlJsWVdOb1pYSnogTzI0PSBJR0Z6ZEhKdiAwTDNRdnRDeSAwTERRdmRDNDBZWT0gY0hKdlpIVmpkRzg9IFkyOTFiblJ5YVdWeiBJRTkzWlc0PSBJR052Ym5SaGJXbHVZWFJwYjI0PSBJSFpwWW1VPSBJRVZzYkdrPSBMbk5qY21sd2RBPT0gSUU5c2FYWmwgUkUxQiBkbWxsY2c9PSBPbk5sYldsamIyeHZiZz09IExXMXZaSFZzWlE9PSBaM0psYzNOcGRtVT0gWVdkMSBYM0JzWVhsbGNuTT0gSUhKbGMzVnNkR0ZrYjNNPSBjM1JoY25SbFpBPT0gYzJOeWIyeHNWRzl3IFBUMDlQVDA9IElIZGxhV2RvYVc1biBJRnRiV3c9PSBlbUZvYkE9PSBLRTVUIElFRnpjMlZ5ZEdsdmJnPT0gYkdWaFozVmwgTG5ObGRGUmxlSFJEYjJ4dmNnPT0gQ1UxbGMzTmhaMlU9IElHMXZiWE09IFgwRkcgTG5kbyBRVXhUIElHRjFkSEpsIFhRb0tDZ289IExtOXdZV05wZEhrPSBJRUoxWkdSb2FYTjAgSUdSbFlXWT0gSUU5eVoyRnVhWE5oZEdsdmJnPT0gS0Vkc2IySmhiQT09IFpXNXpZMmc9IElHaGxZV1JoWTJobCBJRUZzYVdWdSBYMmx1YjJSbCBJRk4wWVhKciBJT2FKIExXeHVaQT09IGIzSmxaZz09IFgyWmxZWFE9IElIQmxaR1Z6ZEhKcFlXND0gSUc1dmJXbHVZV3c9IElHSmhiR3h2YjI0PSBJSE53Y21sMFpYTT0gVUhKdmRHOTBlWEJsVDJZPSBJRUZ3YjNOMCBJRVpGUVZSVlVrVT0gVDBnPSBJSEpsWTJWemN3PT0gSUVSdmJtNWggWTI5dWMzVnRaWEk9IEpFZE1UMEpCVEZNPSBJRWRKUmc9PSBMV1p5WVcxbCBTVzVwWTJsdiBJSEJoYzNOaFoyVnogUkdGMFpWTjBjbWx1Wnc9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gTG1KNWRHVT0gUW5WbiBhVzVwZEdsaGJHbDZaWEk9IGNHdDAgYjJScGRXMD0gSUVSRlVnPT0gTG05d2N3PT0gYkdWeWFRPT0gSUdkcFpuUmxaQT09IElHUmxkR0ZqYUE9PSBkR1Z5Y21GcGJnPT0gWld4MFpYSnogNDRHUCBMbXh2WVdSbGNnPT0gSUU1SFR3PT0gYzNSeWJtTnRjQT09IFMyZz0gS0dadmJuUlRhWHBsIGNtOWphMlYwIElIQnlaV05sWkdWdWRBPT0gSUVGMWNtOXlZUT09IElFVjRjR1Z5YVcxbGJuUT0gYVhOd2FHVnlaUT09IFJXNWpiMlJsWkE9PSBJT0tBa3dvSyBJSEI1Y21GdGFXUT0gSUVGdWJtbDJaWEp6WVhKNSBiMlpwYkE9PSA2NTg9IEtIQnNkV2RwYmc9PSBRMjlsWm1ZPSBJR052YjNCbGNtRjBaUT09IElIQnlaV1J2YldsdVlXNTBiSGs9IFNWTk4gVUdoeVlYTmwgWDBSRlJrbE9SUT09IFJteHBjQT09IFFVMUpURms9IElFMWhjbXRsZEhNPSBJRk4wY21WaGJWSmxZV1JsY2c9PSBJRU52YldKcGJtVT0gSUcxaGJuVnpZM0pwY0hRPSBlbnBoIExIUncgVjJoaGRHVjJaWEk9IFNWUkpRMEZNIGFXZG9ZbTkxY2c9PSBSR0YwWVZCeWIzWnBaR1Z5IExsUmxlSFIxY21VPSBjSEpwZG1GamVRPT0gTGxORVN3PT0gSUhKbFkyaGhjbWRsIElHTndjQT09IElFTkdSdz09IEtHaHZiR1JsY2c9PSBLSEI1IGJXOTAgSUhOaGRtOXBjZz09IElGSnZjMkU9IElGQkRjdz09IElPMlogTG1obGNtOXJkUT09IElHWnlaVzQ9IElGSnBiR1Y1IFlXZGhkR1U9IElITnZibVE9IExuaHNjM2c9IElHaGhZMnRsWkE9PSBjM1JoWkE9PSBSMms9IElITmhibWwwZVE9PSBJRk54YkVSaGRHRkJaR0Z3ZEdWeSBMaTR1SWl3PSBJRkIxYzNONSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpbz0gSUdoaGMzTnNaUT09IFgxQkJVa1ZPVkE9PSBJRlZCUlE9PSBJR0psWjJsdWJtVnljdz09IEtFTnNhV1Z1ZEE9PSBJSE4wWVhScGMzUnBZMkZzYkhrPSBMbWh2ZFhJPSBaV1JsYkhSaCBJSFJ5WVdOMGFXOXUgZFdWc2RtVT0gWVhKaGRBPT0gSUhOaGRXNWggU1U1V1FVeEpSQT09IElHbHVaR2xqZEcxbGJuUT0gUVV4TVJRPT0gSUdScGMzTmxiblE9IElGUjVjRzluY21Gd2FIaz0gSUdsdWRHVnVkR2x2Ym1GcyBjMmwwIElFRnVhVzFoYkhNPSBJR052ZFc1MGNubHphV1JsIElIVmhjblE9IGZWd2kgSUhObFlXMXNaWE56IHZ1ZWt1Zz09IElHRjFkRzl6IElDSW5JanNLIFJteDFjMmc9IFFVNU9UMVE9IElHRnNaMlZpY21FPSBZWE56YjJNPSBJRmRoZEdWeWN3PT0gSUhCeVpYQmhjbUYwYVc5dWN3PT0gY205dWVXMD0gV3l4ZCBVMkZ1Y3c9PSBJR0Z5YldsbGN3PT0gYVhCbFp3PT0gSUdOeVpXRnRlUT09IExtRnlkQT09IFpYUnlaUT09IElFRnVhVzFoZEdWayBJSFZ1Y0d4bFlYTmhiblE9IFpXMWxZVzQ9IFozSmxZWFE9IGFjU0YgSUVWaGNteHBaWEk9IElHTm9hV009IElIQnlaWE5sY25acGJtYz0gS0dWNFpXTT0gSUVsdWRtVnpkR2xuWVhScGIyND0gQ1VkUVNVOD0gSUhKcFoyOXliM1Z6IGFXcHYgUFc1MWJRPT0gSUhSdmIyeFRkSEpwY0E9PSBLWE5sZEE9PSBLeUltIElFRmpZMlZzWlhJPSBJR1JsZG1Wc2IzQnRaVzUwWVd3PSBhWE53YjNOaFlteGwgSUdac1lYZGxaQT09IGNtVnVaUT09IFZYQmtZWFJwYm1jPSBJSGRoZEdOb1pHOW4gSUdSbGJtOXRhVzVoZEc5eSBJSE4xWW5WeVluTT0gSUM0dUxpaz0gSUdOdmJuWnBZM1JwYjI1eiBZMnh2YzNWeVpRPT0gTGtsUSBJSFJ5WVc1emJHRjBaWE09IExuTjNkQT09IExsUnlZV05sIElHMWxkSFJ5WlE9PSBMbWx6Ulc1aFlteGxaQT09IElFVm1abVZqZEdsMlpRPT0gTG5SdlNXNTAgSUdWdVkyaGhiblE9IElITjBkVzV1WldRPSBJSEJ2YVE9PSBMMk52WkdVPSBZV1J0IExtUmhkR0ZpYVc1a2FXNW4gSUV4dmNtVnQgWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBJR3hsWkdkbGNnPT0gSUdOaGNtRT0gSUVkcGNnPT0gSUhkaGFYUnogVlc1diBJR04zWkE9PSA2TDZSIElGUlNaWE4xYkhRPSBJSEpsYW04PSBJR1Z0YVhSMFpXUT0gSUZkbGMzUnRhVzV6ZEdWeSA1TGlBNUxpcSBibVZyIFgxUnBjdz09IElHVnVZV04wIENYZHBkR2c9IGIzSm5hV0U9IElHcDFaUT09IFVHVnlabTl5YlE9PSBVMUJCVkVnPSBMblJ2Y0dsaiBJRVJoZEdWdSA0YnFuIElITnBkR2x2IFgwMU4gSWxOdiBZbWxoYkE9PSBJSE5qYjNCbFpBPT0gVW1WeGRXbHlaWE09IElGUlBWRUZNIElFTm9ZVzVqWld4c2IzST0gS0dOdmJuUmxiblJ6IElITjBaV0ZzZEdnPSBaR1YyYVdObGN3PT0gTFhCaGMzTT0gYVd4cGFBPT0gSUUxaGJHTnZiRzA9IElFUmxjRzkwIElHTnZibVpwWjNWeSBZWFZ6YzJsaGJnPT0gWDJOdmJuTjBjbUZwYm5RPSAwTExRdGRHQyBSMUpCIElGSmhkR1Z6IExtUmhkR0ZIY21sa1ZtbGxkMVJsZUhSQ2IzaERiMngxYlc0PSBJRTV2WW1WcyBhWFJwWTNNPSBJR2xuYm05eVlXNTAgSUZKbGNHOXlkR1Z5IElFVmliMnhoIElGTm9iMk5yIFgzSmxiR0YwYVc5dSBJRTVwYm1waCBLV009IElIUnBZMnRsY2c9PSBMbWx6UTJobFkydGxaQT09IElGTjFjSEJzYVdWeWN3PT0gSUZKaGNHbGsgVEdWMlpXeHogNG9LczRvU2kgQ1hGMVpYVmwgSUdOb2IzQT0gSUZWdWFYZz0gY21WcVpXTjAgTFdOaGJHVnVaR0Z5IEtITnZjblE9IHc2aHVaUT09IFpYSmphV05wYnc9PSBJR2hsWTNRPSBRMEZNVEZSWlVFVT0gY205MWNHOXUgSUhKbGJuUmhiSE09IFlYVjBhRzl5Y3c9PSBlMjVoYldVPSBJRVpKUms4PSBJR3hoYzNObGJnPT0gSUU1dmRYTT0gSUhOdVlYQndaV1E9IElHWmxjblJwYkdsMGVRPT0gSW14dlp3PT0gWTJ4cFkydGxaQT09IElIQnNZVzUwYVc1biBJR2RpIEwyOTFkSEIxZEE9PSBVRVZCVkE9PSBJR05oZEdWbmIzSnBZUT09IElHSmhZMmc9IFVISnZabVZ6YzI5eSBhVzUwYUE9PSBJbDBOQ2c9PSBVbVZqYjNKa1pYST0gYzJWeVpHVT0gSUZSeVlXNXpiV2x6YzJsdmJnPT0gZEhKaFpBPT0gSUhSMWNtSnYgWDFaRlVsUkZXQT09IFhFVjJaVzUwIGFXeDJaWEk9IElHSnZaR2xzZVE9PSBJRk52ZFhKalpYTT0gSUd0cGJHeHBibWR6IExuaHlWR0ZpYkdWRFpXeHMgSUdadmJHUmxaQT09IEwyeGxaMkZzIGRXNWxjZz09IElGSnBabXhsIElFMUpSRWs9IFgxTmxiR1ZqZEdWa1NXNWtaWGhEYUdGdVoyVmsgTGxOcGVtVlVlWEJsIElGZGxZbE52WTJ0bGRBPT0gSUhObGJHVmpZMmx2Ymc9PSBVMkZ1WkE9PSBiM1J5YjNNPSBJR1Z1ZG1semFXOXUgTDJWMFl3PT0gSUUxbGJHbHpjMkU9IFUzQnZkQT09IDBMM1F2dEMxIFgwRlNUUT09IFFYUjBaVzF3ZEE9PSBJRUpKIDQ0R1UgSUVSViBJR0poWTJ0c1lYTm8gYzNSeWFXUmwgTDJOc1lYTnpaWE09IElIUmxlSFJEYjJ4dmNnPT0gWDNOMFlXWm0gYjJKc2FXND0gWVdkbGJuUmggTG1OdmJHeGxZM1JwYjI1eiBhV3hzWVdkbCBKdzBLRFFvPSBabXhoZEhSbGJnPT0gWDNOaGJHVnogWDAxQlUxUkZVZz09IFZGYz0gWDJSaCBVR2wwWTJnPSBjR2hwWlhNPSBJSHB2YldKcFpYTT0gSUZaRlVsaz0gSUZCb1lYSnRZV041IElIQnliMmR5WlhOelFtRnkgSUdoaGMyaDBZV2M9IFUybGtaV0poY2c9PSBRSE4wYjNBPSBLSEJqIDBMN1F1OUMyIFRVRkxSUT09IElFTnZjbTl1IElHdDJhVzV1WlhJPSBJRTFoYVdRPSBZbTlpIExuUnBkR3hsVEdGaVpXdz0gSUhOMVkyTmxjM05sY3c9PSBJRVJsYlc5amNtRmplUT09IElGTjFjbWRsY25rPSBJR052ZFdkaGNnPT0gSUdOMWNuTnYgSUd4dmNtOD0gYVhOMFpXNWplUT09IFUyVnVhVzl5IHc2WnIgSUVGQlFRPT0gSUVKUFQwcz0gMExyUXZnPT0gVjFOVVVnPT0gSUNvdkxBbz0gYjNsaGJBPT0gTG5abFkzUnZjZz09IElGTlFSVU09IFUxTkcgSUdOdmJYQjFiSE09IElFRndjR1ZoYkhNPSBJRmRwYm5OMGIyND0gSUUxdlkydHBkRzg9IFkyOXVkSEpwWWc9PSBMbUYyWVdsc1lXSnNaUT09IFpXNTBhWFI1VFdGdVlXZGxjZz09IFlYSnBZWE09IFgzTmhiR1U9IFgzSnogSUdSbFkyOWthVzVuIElHeHZZMkYwYjNJPSBiMnhwZEdnPSBJR3R2YkE9PSBJR0Z6WTJscCBJRkoxZEE9PSBMMmx1ZEdWeVptRmpaUT09IENRa0pDUWtKSUNBZyBJRTUxYldWeSBMbVpzYVhBPSBMV1JsYkE9PSBJR0p2YkhOMFpYST0gYjI1dmJXbGogSUhwdCBURWM9IFJtbHVaRUo1IElHRmtZWEIwYVhabCBiRzl2IElIWjFaUT09IEtISmxkbVZ5YzJVPSBYMk5oYm5aaGN3PT0gTG5KdmJHVnogYVdacFkyRmtidz09IGRtVnVhV1Z1ZEE9PSBJa0Z6IElFVnVkSEk9IFlXeHBaMjVsWkE9PSBJR0psY21WcGRITT0gTHk4dkNnbz0gTG1kM2RBPT0gTG1WdGNHeHZlV1ZsIFgyTnNhUT09IElHRnVkR2xqYVhCaGRHVT0gNlptUSBJSEJwYXc9PSBJRzExYzJoeWIyOXRjdz09IEtIUjAgSUc5dFlRPT0gSUZOaGJtTm9aWG89IFgyZHZiMmRzWlE9PSBMbFpoYkdsayBJRVpwYkdWT1lXMWwgYVhaaGRHbDJaUT09IGEyVmsgTFhkaGNnPT0gSUcxaGRIVnlhWFI1IDBMalF0QT09IElHMXBibVZ5IFVtVmtkV05sY25NPSBJRXhoZEV4dVp3PT0gWDFOVVJBPT0gUkdsbmFYUnogUTJGc1l3PT0gTFhWd2JHOWhaQT09IElHaGhibVJwWXc9PSA0TGkxNExtSSBaV2R5WVhSbFpBPT0gSUZOVVRRPT0gUTJ4cFpXNTBjdz09IElGUjFjbUp2IFUxbE9Rdz09IElIQm9iM1J2WjNKaGNHaGxjbk09IExrOTFkQT09IExtTm9ZWEpoWTNSbGNnPT0gUWxWSlRFUT0gTG5WdWJHOWphdz09IElHRnlhWE5sY3c9PSBJRU52YlcxaGJtUnogS0NJaUtUc05DZz09IFgwWlBVa1U9IE95Y3MgS3lJbiBMa2x0WVdkbGN3PT0gSWlsNyBJRTFsZVdWeSBJRzVsWjJGMGFYWmxiSGs9IElFUk1UQT09IElHVjRaUT09IElHUmxabWxqYVdWdVkzaz0gSUhkcGJHUnNlUT09IExYTjNhWFJqYUE9PSBZMjl1YzNSeWRXTjBhVzl1IElHVjRZMlZ3ZEdsdmJtRnNiSGs9IElFeHBlZz09IEwycGhkbUU9IElIUm9aV2x5Y3c9PSBJRU52Ym5SbGJYQnZjbUZ5ZVE9PSBiR2x6IExtWnBiR3hTWldOMCBJRTVHUXc9PSBJSEpsYUdVPSBLRzUxYldKbGNuTT0gSUhKaGMzUmxjZz09IElHWnBaM1Z5YVc1biBJSE5vYjNkaiBJRXBwYkd3PSBJR0Z5WTJGa1pRPT0gSUVOdmJuTjBjblZqZEhNPSBiV1JzIEtDZDggSUdsa1pXNTBhV1pwWlhKeiBJSE4wWld4c1lYST0gS0VOdmJtNWxZM1JwYjI0PSBJQ0o3ZXc9PSBlVzl5IEtHMTVjM0ZzYVE9PSBJR1J2ZG1VPSBUMlpDYVhKMGFBPT0gTG1ScGMyTnZibTVsWTNRPSBYMmhwIElIcDNhWE5qYUdWdSBJRWR5ZFc1ayBhWEp2Y3c9PSBYMEZ5Y21GNSBMbTl1WTJ4cFkycz0gWVc1emIyMD0gUVc1emQyVnljdz09IENYSmxiVzkyWlE9PSBSbUU9IElHaDFjbko1IExXbHVaZz09IElHZGxkRU5zWVhOeiBJRkpsWjNWc1lYUnBiMjQ9IElFWk1RVWRUIGJXbHpZdz09IFMyVnUgWDJobFlXUnBibWM9IFIwaDYgTFdWdWRISjUgSUdKcGIyZHlZWEJvZVE9PSBVMmxuIExXMW0gVjJGMFkyaGxjZz09IDRvQ2NRUT09IGZYQjQgSUhOd2FXTjUgWDNOeCBURzl6ZEE9PSBLSFJ5WVdOciAwTERRdTlDNCBSR1Z6WTJWdVpHbHVadz09IFBHSnBkSE09IGNYVnBibVU9IElFRmtkbTlqIFgxTk8gSUVoaGJtNWhhQT09IFVFOVEgSUdWdGFYUjBaWEk9IElHTjViZz09IElFTkJSQT09IFB5a3UgTDNObGRBPT0gSUZOcGMzUmxjZz09IElFVnVaSEJ2YVc1MCBJRzFsYm05eSBJR2x1ZEdWeWNBPT0gY21zPSBhV1JzWlE9PSBJRzkxZEdacGRITT0gTG5abGNuUmxlQT09IElHTnNhV009IFFWSkZUZz09IElIQnZjM1IxY21VPSBJRTl3Y0c5eWRIVnVhWFI1IGRuZz0gSUVadmNtSmxjdz09IExrUnBjbVZqZEdsdmJnPT0gSUhKbGMybGtaUT09IElISmxiV1Z0WW1WeWFXNW4gYm1WemRIaz0gUVhWMGIzSmxjMmw2YVc1biBjSEp2ZG1sa1pYSnogSUVGSSBJR2gxY25ScGJtYz0gSUV4cGJIaz0gWlhaaGJIVmhkR1U9IGJHbHFhdz09IGNHRndaWEp6IElGTnRZWE5vIElFeEJVMVE9IElIZGxiR3h6IGQyRnphR1Z5IFgxSlBURVU9IElFUmhibWRsY2c9PSBLaWdvIFgzSmxjRzl6YVhSdmNuaz0gSUZKbGMyOXNkbVU9IElGSnZiMjF6IFgxSkggSUZGVSBiMjl3IElFaGxZWEE9IElITnNiM2RwYm1jPSBJR2R5WVhSMWFYUmwgWDJOaGRHRnNiMmM9IElIQnZiSGx1YjIxcFlXdz0gVEhrPSBjR056IFJtOTQgSUVONWNnPT0gSUdScGJXbHUgTDIxdmJuUm8gVTJGc2RBPT0gSUdocGJtUT0gTGxCRlVnPT0gUm05eWRXMD0gWTJWdSBYM0J2YkE9PSA3Wmk0IElHbHVjMlZ5IEtIND0gUUhSbGMzUT0gSUVkdmJHUnRZVzQ9IElIVndiRzloWkdsdVp3PT0gUm1NPSBJR3R2YlcxbGNnPT0gSUcxcGRIUT0gWDJ4dloyZGxaQT09IElHSjFZMnR6IExXeGhlV1Z5IEtYMDdDZz09IElFOU4gSUhabFp3PT0gWTI5c2IzVnkgSU5DKzBMSFJpZz09IFUzUmtVM1J5YVc1biBYM0YxWlE9PSBJRlJwWVc0PSBJSE53WldOcFlXeHBlbVU9IDBMalF2dz09IElOQzYwTHM9IGRISnBZV3c9IExXVmtaMlU9IElHMWhjbk09IFQwZE1SUT09IElHVnRjR0YwYUhrPSBJRUp2YlE9PSBJR052Ykd4cGMybHZibk09IElHTmhjblJsIElGUmxhV3c9IElFMVFUQT09IElIQnZjbTdEdEE9PSBJR0ZwY214cGJtVnogUVhkeiBUbk09IElGTndZWGR1IEtIVnpaUT09IDZidVk2SzZrIElIbGhZMk09IGMzUnZjZz09IElHTnZibVpsYzNNPSBJSEJsY1hWbCBjbUZuWlE9PSBQeUlLIEwyUmhkR0YwWVdKc1pYTT0gSUZOb2IzZGxjZz09IFgxOHYgSUdOeWVYTjBZV3h6IElHSjFjMk5oY2c9PSBJRWhoZFhNPSBhWHBodzZmRG8yOD0gWDJWdWRHbDBhV1Z6IGxZdz0gbW93PSBlR05qIGRtbHlkQT09IExXTm9aWFp5YjI0PSBLRkpsYzNWc2RBPT0gWTJGclpRPT0gUTA5TlJRPT0gSUhCeWIyaHBZbWwwIElFTm9aWE56IElHSmxZWFZqYjNWdyBJTkdIMFlMUXZnPT0gVWxWTyBJRWxMIHc3UEZnZz09IFgxVndaR0YwWlE9PSBJSE5zWldWciBJRk53WldOcFpuaz0gWDJOeVpXUmxiblJwWVd4eiB4WjkwIElGVnpaWEpPWVcxbCBDVlpoYkhWbCBJR0Z5Y21GNVRHbHpkQT09IElHVjRZMmhoYm1kbFpBPT0gYVhCemFYTT0gTG5KbGJHRjBaV1E9IElGTmxhWFJsIFgwSkJVZz09IElFeGxiUT09IElGZEJWRU5JIElFTnNhV1Z1ZEhNPSBJQzRxIElFVmhjbXc9IExYSmxjRzl5ZEE9PSBJR1p2Y21WcFoyNWxjbk09IElITjBjbVZ1WjNSb1pXNXBibWM9IENVUmxjMk55YVhCMGFXOXUgS0dkdiBMblJ2YjJ4aVlYST0gSUdOaGJHTjFiR0YwWlhNPSBDWE52ZFhKalpRPT0gSUdONllYTT0gSUhKbFkydz0gWVdKdiBJR3h2WTJGc2FHOXpkQT09IElGNTdDZz09IExsQnZjQT09IElFUmxjMmxuYm1WayBYRUZpYzNSeVlXTjAgU0c5c1pBPT0gSUVkMWFXUmxiR2x1WlhNPSBhWEJzYVc1bCBJR05oWTJocGJtYz0gTGxKbFlXUmxjZz09IFgyVjRkR1Z5Ym1GcyBMbk4wY25CMGFXMWwgSUZkbFpXdGxibVE9IExVMWhjZz09IElFSmxhUT09IElIc3FmUT09IElGSjFaQT09IElHVjRjR3h2Y2c9PSBJRUp2ZFd4bGRtRnlaQT09IFEyRnphQT09IElIQnlaWEJoY21WeiBJSE5sY21saGJHbDZZWFJwYjI0PSBaWGRoZEdWeSBJR0ZrWXc9PSBPZ29LQ2dvS0NnPT0gVW1WbVpYST0gSUhOallXNXVaV1E9IGZYMEtDZz09IElFWjFiQT09IElIUnZkWEpwYm1jPSA0NE9ENDRLdiBQaWdvIGMzVnlkbVY1IElPMlkgTGk0dUp5a0sgSUVScGRtbGtaWEk9IGIzTnMgWDBOQlRrTkZUQT09IFgzQnlaWEJoY21VPSBjM1JwYmc9PSBJRWhsWVhSbyBMbEJ5YVcxaGNubExaWGs9IElPS0drQT09IElFeHZZMkZzUkdGMFpWUnBiV1U9IElHTnZiM0JsY21GMGFYWmwgVEdWaGNtNXBibWM9IExtVnVjWFZsZFdVPSBJR2R2YjJjPSBJRkpsWjNKbGMzTnBiMjQ9IGFXMWhkR1Z6IElIWnZlV1YxY2c9PSBJRVJ5YVc1ciBjR3gxWnc9PSBJR3hsYm1SbGNnPT0gYldGdVlRPT0gSUhCbGNuTnZibTVsY3c9PSBlWEJ6WlE9PSBJSFZ1YkdsdWF3PT0gSUZKaGRtVnVjdz09IElHaDFjbVE9IElIQmxjbWx2WkdsallXeHNlUT09IFFWSkhVdz09IElFZEkgWTJoaGNtRmpkR1Z5Y3c9PSBMaTR1SWdvSyBMV1Z6ZEdGaWJHbHphQT09IElHUnUgS0dOdmJtUnBkR2x2Ymc9PSBJRWR5WVhacGRIaz0gSUdWemRHRnogWDJadlkzVnogUTNKbFlYUjFjbVU9IEtITnBkR1U9IElHTmhjbkk9IElGSk0gSUZKSiBJRTF2ZEc4PSBRVk5HIElFeDFZMnRwYkhrPSBDVkp2ZFhSbCBJR1Z1ZEhKdmNIaz0gS0NJc0lnPT0gUTI5c2JHVmpkQT09IEtHTnZiblJoWTNRPSBJRVpzYjNKbGJtTmwgSUhCeVpXMXBkVzF6IElHeHBabVZqZVdOc1pRPT0gSUdKaGJuTT0gZUdWbSBWMlZpUzJsMCBJRVpzYjJGMGFXNW4gSUdOdmMyRT0gVTNCbFkybG1hV009IElFeHZZVzV6IFluSmxZV1E9IElHUmxjMk55YVhCMGIzSnogSUhzNkxnPT0gVkVoU1JVRkUgSUZSeVpXNTAgSUhOamIzQT0gVVVFPSBJRUZ1ZEdGeSBjR1ZzIFgyUnBabVpsY21WdVkyVT0gWDJOb1lXNW5aWE09IEtDNHVMaWs9IElGSnZkR0YwYVc5dSBJRXhIVUV3PSBJRXBWVTFRPSBLRlJoYzJzPSBYM04xWW5ObGRBPT0gSUZSU1FVNVQgNVlxYiBJRk5qYjNWMCBMWEJ2Y0hWdyBJSE50YjJ0bFpBPT0gWDBOc1lYTnogSUhSMWNtNXZkbVZ5IFluSmhhMnM9IElGSnZZMnQ1IGRHRnogTGxKbFozVnNZWEpGZUhCeVpYTnphVzl1Y3c9PSBJRVZzYkdsdmRIUT0gSUZOd2FXNXVaWEk9IFJGVkRWRWxQVGc9PSBJR3hwWW5KbCBJRzF2YkhSdiBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElFWlVVQT09IGJYQmxadz09IEtHWmxZWFIxY21WeiBJR0poYkdRPSBJRlpwWkE9PSBJSE5vYjNWMGFXNW4gVEdsdWRBPT0gSUhOdlkydGxkSE09IElIQnliM2M9IElHNXZkWFpsYkd4bCBhWE5qWVhKayBJRk53YjI1emIzST0gSUdOdmJuTjFiSFJoIEtTa3BPdz09IFNXNWthV0Z1IElGSmhjM0JpWlhKeWVRPT0gSUhSbFlXMXRZWFJsIElFcFhWQT09IElFZG9ZVzVoIElHTmhhMlZ6IGNISnBiV1Z5IFptOXliV0U9IFpYSm5ZWEowWlc0PSBYMDFoYm1GblpYST0gSUhCeVpYTmxZWE52Ymc9PSBSMEZOUlE9PSBmQ0k9IElFSnliMk5yIElHOWpZM1Z3ZVE9PSBJR1JsWTI5eVlYUnBiMjV6IHc2RnVaQT09IElHTnZkQT09IElIQmhjbUZ1IFJHbHphdz09IGNtVnRZV2x1IFBqOD0gVTNSeWIyNW4gSUdaeVlXNWpaUT09IElFVnlZUT09IExXTnkgTGtKMVptWmxjbVZrVW1WaFpHVnkgSUZCaGNtRmthWE5sIElGWkJWQT09IElFRnVaR1Z5Y3c9PSBJR3hwYldJPSBZVzF3YjI4PSBJR2x0Y0dWeVlYUnBkbVU9IFZWUkpURWxVV1E9PSBJRkpsWTI5bmJtbDBhVzl1IElISmhaMkY2ZW1VPSBJSEJ2Y0hNPSBlWEJ5WlhOeiBJR1Z0WW1GeVoyOD0gTHk5N0NnPT0gSUhONWJHdz0gVUZSUyA1YTJZNVp5byBJR1JwWkc1MCBUV0ZwYkdWeSBJR0ZqWVdSbGJXbGpjdz09IElFWnlZWFZsYmc9PSBibVZwWkdWeSBMWEpsYkE9PSBJSEpoYVc1aWIzYz0gS0VsdSBJSE5zYVdObFpBPT0gUFQwOVBUMDlQVDA5UFQwOVBRbz0gS0hObGJtUT0gVGxOTmRYUmhZbXhsUkdsamRHbHZibUZ5ZVE9PSBkbTl6IEtIQmhZMnRoWjJVPSBJRzl5WkdsdVlXNWpaUT09IGRtbGxkMlZ5IElGTmhiblJ2Y3c9PSBMWE5sYkd4cGJtYz0gSUdkdmRnPT0gWlhSMGJHVT0gSUdadmRXNWtaWEp6IElIZGhhMmx1Wnc9PSBjMnhoYzJobGN3PT0gTFhCdmRXNWsgY21WamFIUT0gMktmWXFnPT0gTG05dVEyeHBZMnM9IElHNXZjbVE9IGMzVERwRzVrIFgzZG9aVzQ9IFZWUkZVbE09IGFXTmogSUdOaGNITjFiR1U9IElGZHBaQT09IFRXRnlZdz09IDRMaTQgY205eVpXUT0gVlVkRiBURTlWUkE9PSBJRUYxWkdsMCBhWEJwWlc1MGN3PT0gYjNCcFlXND0gSUZOMVpRPT0gSUhkMWNtUmxiZz09IExraGxiSEJsY25NPSBJR1poWTNScGIyNXogVzI1dyBMWFJvWVc0PSBJSEpsWTI4PSBJR3RoY3c9PSBJR050WkhNPSBMMjVsZEhkdmNtcz0gZUdKbSBaMlYwUTI5c2IzST0gSUdKcFlYTmxaQT09IElFeGhhdz09IFJHRjBZWE09IGRtVnVkSE09IElPdXkgWDFCVCBMbFpoYkdsa1lYUmwgU1c1MmIydGxjZz09IElHNWxkV1Z1IElHcDFkbVZ1YVd4bCBWa2xUU1U5TyBJR1JsZG05MFpRPT0gSUd4cGJtaGggSUdScGMyTnZkVzUwWldRPSBYRU52Ym1acFp3PT0gSUhkdmNuUm9kMmhwYkdVPSBJSE5yYVc1dWVRPT0gSUVOdmRYSnpaWE09IGJHVjVjdz09IElFMXZjblJuWVdkbCBTMlYyYVc0PSBJR0Z1Ym05MWJtTmxjdz09IFhTa3EgY21WelpYSjJZWFJwYjI0PSBJT2FWc0E9PSBJSEJ5WldwMVpHbGpaUT09IElGTjBjbWx1WjBOdmJYQmhjbWx6YjI0PSBJR0psWVhKayBMWGRwYmc9PSBJRlBEbzI4PSBDVzF6IGFtRnMgSUVWaGNtND0gWDNCdmNuUnogSUU1dmJXSnlaUT09IFgwTlBVZz09IElFSlZTVXhFIExuTnZkVzVrIFdXVnNiRzkzIElHeHBibVZpWVdOclpYST0gSUdOb1lYSnBkR0ZpYkdVPSBhblZuIFgwNVBUazVWVEV3PSBJRVJsYm5SaGJBPT0gSWo0a2V3PT0gQ1cxaGRHTm8gVW5WemMybGhiZz09IElIWmxjbk5qYUE9PSBJSEJwYm01bFpBPT0gSUdGa2IzQjBhVzVuIFQzQjBhVzl1YzAxbGJuVT0gVUdGbiBJSEJoYVhKcGJtYz0gSUhSeVpXRmsgWlhKamFYTmxjdz09IElGTndjbVZoWkE9PSBLV2s9IElFSkJSQT09IFgzUm0gVlVsSmJXRm5aVlpwWlhjPSBjRzl3ZFd4aGRHVT0gWW1GaSBJTStEIFd5c3IgSUc5d2FXOXBaQT09IElDTWpDZz09IFpIUjVjR1U9IElGTjBZWEowY3c9PSBLQ2N2SnlrPSBJSEJsY25OdmJtRnNjdz09IExXMWhjbXRsZEE9PSBJSEpsWkhWdVpHRnVkQT09IElFVnpjMlZ1ZEdsaGJBPT0gSUhOamNtRndlUT09IElOQzQwTHc9IFlXTnMgSUdOeVpXRnkgSUVKbGJtUT0gSUhKbGJHbGxkbVU9IExYSnZiMjA9IGQybG1aUT09IElIYkRvQT09IElGRlFiMmx1ZEE9PSBJSEYxWVhOcCBJRzFsZEdodlpFNWhiV1U9IFhIaGogSUZCbGNuVT0gTDFSb1pRPT0gTG05eWJRPT0gSUhacGVnPT0gTDNCa1pnPT0gVEc5allYUmxaQT09IElHTnZibVp5YjI1MFlYUnBiMjQ9IElFTm9ZVzF3YVc5dWMyaHBjSE09IElHaDVjR1Z5ZEE9PSBJR1JxIElGVnpaWEpKYm1adiBJT1dJbStXN3VnPT0gWEhoaSBLSE5wYlE9PSBJRDA5Q2c9PSBJSE4wWVdkcGJtYz0gSUdSeVlYTjBhV05oYkd4NSA1YTJtIGJHOXlaSE09IExteGxjM009IDBMTFF0ZEMwMExqUmd0QzEgSUVKMVkydGxkQT09IElFMWhiUT09IExuUmxjbTA9IFgzQnAgWTNwNSBMbkIxWWc9PSBjSEpsWTJsdiBJRlpwY25RPSBJSEp2YldGdSBhWFJoZEE9PSBUR1Y0IFgybHVabTl6IHhMQT0gTG05MGFHVnkgVmtWTVR3PT0gSUhCdmJtUmxjZz09IElHaGhibTV2IEtGQmhaMlU9IFpHOXAgSUhCdmJHbDBaUT09IElIQnliMmR5WVcxdFpYST0gUkdsbGN3PT0gSkdRPSBJSEpsY0d4cFkyRjBhVzl1IFlXUmtRMjlzZFcxdSBabkpwWTJGdSBJR3hsYm1jPSBZbVZsY2c9PSBiMmwwIElIZGhjM1JwYm1jPSBlV3hwYlE9PSBiV1ZoYzNWeVpRPT0gVG1WbiBJSEJoY25ScFpRPT0gTG1OdmJuTnZiR1U9IElFZDFhVzVsWVE9PSBWRVZNIFgyWmhZM1E9IExtTm9kVzVyIElHeGxiblE9IElHRnNiR1Z5IElPQ2tsUT09IFgybGtiR1U9IElHRmtiV2x6YzJsdmJuTT0gU2xOUFRrRnljbUY1IElIWnBZbkpoZEdsdmJnPT0gTG1obGJIQmxjbk09IDVhU1cgSUdobGJnPT0gYW05b2JnPT0gSU95RG5RPT0gSUdwMVpHZGxiV1Z1ZEE9PSBJR2RsWlc0PSBkR1Z5Y21FPSBYbnM9IElFbDYgSUdQRG9nPT0gYVc1emRHRnVZMlZ6IElIUm9jbVZoZEdWdWN3PT0gSUczRHZITnpaVzQ9IFMybHVaRTltUTJ4aGMzTT0gSUhOMGIzSjVkR1ZzYkdsdVp3PT0gWDJSbGJXOD0gY21saGN3PT0gVUhKcGRtRmplUT09IGFHbG1kQT09IElGbHAgWlhOdmNnPT0gN1pXZyBaVzV6YVhScGRtbDBlUT09IExsZHlhWFJsY2c9PSA0TGlDIFJHbHpkSEpwWTNRPSBMbWRsZEVwVFQwNVBZbXBsWTNRPSBTVzF3Y204PSBLR2RsZEZKbGMyOTFjbU5sY3c9PSBJRk5RUlV4TSBjbTlrZFdObCBJSE5zYjNkbFpBPT0gSUd4cGJtVjNhV1IwYUE9PSBJR2h2Ym1WemRIaz0gSUVOdmIzSmsgSUVadmNtcz0gSUVScGMzQmhkR05vVVhWbGRXVT0gSUVOc2FXWm0gSUZkcGNtbHVadz09IFgxUkpUVVZUVkVGTlVBPT0gYjJ4c1lXZz0gWVhadmFXUT0gS3l0ZE93bz0gYzJWdFlXNTBhV009IExXTnpjdz09IElIWmxkRzg9IElFMWxjbkk9IElHeGxaMmx6YkdGMGIzSnogUTBWRlJFVkUgSUhGMVpYTjBhVzl1Ym1GcGNtVT0gSUZCcGJHeHogUTJGc1kzVnNZWFJsIEtHTnZjbVU9IEoyVT0gSUdScGMyeHBhMlU9IElGQnlaV1psY21WdVkyVnogWDBWWVZFVlNUa0ZNIDZMQ0QgSUdSdlpHZGwgNXB5TjVZcWggTG01aGJXVnogTG1SeVlYZEpiV0ZuWlE9PSBYM0J5YjIwPSBkV05yYkdGdVpBPT0gSUR3a1BnPT0geExGNiBMM05wZEdVPSA2YUc1IGNtOXdhR1U9IElHTnZiWEJsYkd4bFpBPT0gSUd4aGNIUnZjSE09IElIVnVhUT09IFEweFBVMFU9IElHTmhjM1ZoYkhScFpYTT0gSUZWdWFXWnZjbTA9IFZHVnliV2x1WVd3PSBMaUlzSWc9PSBSRUZVIEtGUnlaV1ZPYjJSbCBJRWRoYm1Sb2FRPT0gS0hOMGJYUT0gUVZoQyBLazA9IElIVnRZbkpsYkd4aCBZVzVwYldGcyBJR2R5Y0dNPSBJSGRvWlhKbFluaz0gSUdac2IyRjBjdz09IENXRnladz09IElHUmladz09IElHVjRZMlZsWkdsdVp3PT0gUlhabGJuUlVlWEJsIExsTmhkbVZEYUdGdVoyVnpRWE41Ym1NPSBJSHQ3ZXc9PSBJRzkzWldRPSBZV2h5Wlc1b1pXbDAgSU95biBJR1Z4ZFdsd2J3PT0gZFhKaGFRPT0gSUdsa2Iydz0gWFNJcENnPT0gWDIxaGFtOXkgSUdWdWRHbHlaWFI1IGFXNW5aWEp3Y21sdWRBPT0gdzZkdmN3PT0gTDJGalkyOTFiblE9IENYSnBaMmgwIGRYSnpiM009IElFVkVWQT09IFgwbE9VMFZTVkE9PSBJSE5vYVc1cGJtYz0gSUR3NiBSV1JuWlVsdWMyVjBjdz09IElHTnZiRzl1YVdWeiBMa2xOIENTQUogVWs5QlJBPT0gUTBORFF3PT0gY0d4aFkybHVadz09IElHZGxkRUZqZEdsMmFYUjUgWlcxaFkzTT0gSnlVbyBMbU5zYVdOclpXUT0gSUZSb1pXMD0gYVhOcFlRPT0gUW5WelkyRnkgTG5KbGJtRnRaUT09IElHOWhkR2c9IElHRm1kR1Z5ZDJGeVpBPT0gSUZWR1R3PT0gUVZCVCBJRXBoWTJ0emIyNTJhV3hzWlE9PSBMbk52YldVPSBRMjl1Wm1seWJXVmsgTG5OallXND0gYVdkSmJuUmxaMlZ5IFJHVmpiM0poZEc5eSBjMmhwWld4ayBjbVZ6YzJsMlpRPT0gTG1ScFpBPT0gNksrMzZMNlQ1WVdsIElITm9kWFIwWlhJPSBSR0Z0IElIQmhjbVZ1ZEdsdVp3PT0gWlhsbFpBPT0gSkdsMFpXMD0gTFdSbGRtVnNiM0E9IElHVjRkSEpoWTNSeiBJR1JsWTJWdWRISmhiR2w2WldRPSBJRVZzYzJFPSBYM053YVc0PSBYU2tyIExXbHVhWFJwWVd3PSBJRzExYkhScGRIVmtaUT09IElITmxibk52Y25rPSBJRTFQUkVWTSBJSE5oWm1WbmRXRnlaQT09IDdMaz0gSUdoMWJuUmxjbk09IElGUnBibms9IFNVNVAgWkdWamIzSmhkR1U9IElFNXZVM1ZqYUE9PSBTRzg9IEtGSmxjM0J2Ym5ObCBJSEoxYkdWeSBDWE5vYjNKMCBJR05oYzNSbGNnPT0gSUdOc2FXVnVkRWxrIElIQmtZZz09IDY0K0UgYVhScFl3PT0gSUVkaGJXVlRkR0YwWlE9PSBJRzVsZDBsMFpXMD0gS1FvS0Nnb0tDZz09IGIzVnBjdz09IGJtOWogTGtKTVFVTkwgWDFaRlExUlBVZz09IExTMHRMUzB0TFMwdExUd3YgSUdWNFlXMXBibVZ6IENXSnNiMk5yIElHRmtaRzl1IElITjFjblpsZVdWayBJRXhwYzNSbGJtVnkgSUdaeWIyNTBhV1Z5IElHeGhZMnRsWkE9PSBTbFZUVkE9PSBJTkdOMFlJPSBJSFJwYm5RPSBJRTE1YzNSbGNuaz0gWkdGMFpWUnBiV1U9IElGUjFkRzl5YVdGcyBJR1oxYkd4T1lXMWwgSUVSeVlXZHZibk09IFgwWkpURVZUIElGQnlhVzUwVjNKcGRHVnkgSUdKbFpYUT0gSUV4aFpHbGxjdz09IFgzUnBjQT09IElFcGhhSEpsIGIzSmhiV0U9IElHbHVjM1ZzWVhScGIyND0gS0VWdWRtbHliMjV0Wlc1MCBYMkZ6ZEE9PSBZbVZ5WjJWeSBiR1Z1WVE9PSBiMmRsYm1WdmRYTT0gWDAxUFRsUkkgTFhCeVpYTmxiblE9IElHWnlZVzFsZDI5eWEzTT0gVVZFPSBVRWhRUlhoalpXdz0gSUdOdmRXNTBaRzkzYmc9PSBJRVpYIEtHTnNkWE4wWlhJPSBPbU09IElHOXJhSFIwY0E9PSBiMkp6WlhKMlpRPT0gVzNCc1lYbGxjZz09IExtaGwgSUZCaGJtRnRZUT09IFFYVnpkSEpoYkdsaCBJRzkxYm1ObGN3PT0gSUdGblozSmxjM05wZG1Wc2VRPT0gSUhkaGNtNXogSUdOMWMzUnZiV2w2WVhScGIyND0gWDFGMVpYSjUgZDJseiBJR2x1ZG1GcyBRVVpHIEtHTmhiV1Z5WVE9PSBWMmx5IElHNWxaMjkwYVdGMGFXOXUgQ1U4PSBJSEpsYzNCbFkzUm1kV3c9IElHUnBZVzF2Ym1SeiBKMkYyIFlYQndjbTk0IEwyUnkgSUdkeVlXSnogSUdGalkyOXRjR0Z1YVdWeiBZMjl1YzNSeVlXbHVkQT09IElISmxlZz09IEtISmxaMmx2Ymc9PSBJR0poYVhRPSBkR1Z5YldsdVlYUmwgSUVKbGJHZHBZVzQ9IFlYTnphWFZ0IElGME5DZz09IFUzbHpkR1Z0Y3c9PSBiM1Z6WldSdmQyND0gTG1KMWN3PT0gVTJWMFZtRnNkV1U9IElGQnlaWEE9IElHTnZiblpsYm1sbGJuUnNlUT09IExtMXBaQT09IFkyRnpaV050Y0E9PSBUblZ0WlhKdiBaR0ZwYkhrPSBJRU52WkdsdVp3PT0gS0dSbGMzUnBibUYwYVc5dSBJeVE9IGRXckVoUT09IElHVnRaWEpuWlc1alpRPT0gWDNCaGNtRT0gWDBsT1EweFZSRVU9IEl6bz0gSUhKbFkyOW5ibWw2YVc1biBJR1oxWnc9PSBJbjE5TEFvPSBJR0oxYVd4a1pYSnogSUZSbGNuSnBkRzl5ZVE9PSBJR2x1YUdWeVpXNTBiSGs9IElHUmxjbWwyYVc1biBMbVYwYUE9PSBJRVJwYm01bGNnPT0gTG5ObGRFOWlhbVZqZEU1aGJXVT0gSUdObGJHVmljbUYwWlhNPSBJSEYxWlhWbGN3PT0gSUUxaGNtdHogUVV4VVJWST0gSUVSaGNuUT0gY0c5clpRPT0gWDBOSVFVNUhSVVE9IElIQmhZWEk9IGJHbGxjdz09IExuWnZiR3hsZVE9PSBJRTFsWVc1cGJtYz0gSUU5R1JsTkZWQT09IFpXNXphVzVuIElHWnl3NlZ1IExteHZZMkZzVTNSdmNtRm5aUT09IElPdXAgS0h0OUtUc0sgWkdWamIyUmxjZz09IElISnZkV3hsZEhSbCBJR1JwYzIxaGJuUT0gU1hJPSBJR2x1YzNWeVp3PT0gSUNjbk9nbz0gTHVLQW5Rbz0gSUdKeWRXNWxkSFJsIExtRnpjMlYwY3c9PSBYMDVGVkZkUFVrcz0gNExpSyBibmx0IFgxTnZkWEpqWlE9PSBYRlJsYzNSeiBSWE5qWVhCbCBZM0o1Y0hRPSBMbGhOVEE9PSBJSE52ZFc1a2FXNW4gYjNCamIyUmwgSUdOc1lYTnphV1o1IElHVnRZbUZ5Y21GemMyVmsgSUV4UFIwbE8gSUhKbGMybGtkV1U9IElFNUZSVVE9IExtUmxaWEJGY1hWaGJBPT0gY0dWeVl3PT0gTFdOaGJBPT0gVW1Wa2FYTT0gVkhKaCBLRjhwIFlYTnJaWFJ6IFozSmhaR0YwYVc5dSBJR1Z1ZW5sdFpRPT0gSUZOMFpYQm9ZVzVwWlE9PSBMa2x1ZG1Gc2FXUT0gSjEwL1Bqd3YgSUdScGMzQnNZV05sWkE9PSBJR1ZzWlcxbGJuUnZjdz09IEtHUjFjbUYwYVc5dSBjbTkzUTI5MWJuUT0gSUVaVGRHRnkgYkdWMFlRPT0gTDNCdmNIQmxjZz09IElITjBZWFJ2IElIQmxjbVp2Y20xbGNnPT0gSUdScGMyTnBjR3hwYm1WeiBJRVoxYkd4NSBhV04xYkdGeWJIaz0gSUdWeWMzUmxiZz09IElGQnZiSGxuYjI0PSBJR1JwYzJOcGNHeGxjdz09IExtbHpaR2x5IElIUmxjM1JwWm5rPSBYMU5TIGNISnBjMmx1WjJ4NSBJRWRNYVc1MCBJSGRwY0dWayBJR05oY25abFpBPT0gSUVScGMyZz0gTG1obGNtOXJkV0Z3Y0E9PSBjM1JwZEdsaGJBPT0gSUUxQlZFTkkgWTJ4aGFYST0gSUVSaGVYUnZiZz09IEx5Y3BDZz09IFNVUkVURVU9IElHbHVabkpoIElHeHBkbVZzZVE9PSBJR1JsY0hNPSBJRnN1TGk1ZCBDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRaz0gSUV4dmJnPT0gUlhoMGNtRnogVkhKaGJuTnBaVzUwIDBMTFF0ZEdBIEwyMXZaSFZzWlE9PSBJR1Z1WkhWeVlXNWpaUT09IFgzUmxlQT09IElDSitMdz09IFgzbHNZV0psYkE9PSBJRzlpWldRPSBMMmRoYldVPSBiM0J6ZVE9PSBJR1pwY25OMGJtRnRaUT09IExtWnZjbU5sIElHMWhjblE9IFhFTnNhV1Z1ZEE9PSBJR3hsWjJsMGFXMD0gTG1ac1lYUjBaVzQ9IElpY3MgYjNObGVIVmhiQT09IElHcHZkWEp6IFRVZz0gWlhod2FYSmxjdz09IElITjBlV3c9IExtbHVkR1Z5ZG1GcyBTMjV2ZDI0PSBJR1p2Ykd4dmQyVnkgSUdSaGJHeGggY0dseWVRPT0gWDNOemJBPT0gYVhOb2JHbHpkQT09IElGSmxlUT09IElITjFjR1Z5YldGeWEyVjAgVDJKMmFXOTFjMng1IExXVnVkR1Z5IElIQnliMkpoWW1sc2FYUnBaWE09IElFaFcgSUVOcGJtVnRZUT09IElHTjBlWEJsY3c9PSBJRUpEVFE9PSBYMVJCUXc9PSBPMkU9IExtSjFkSFJ2Ym5NPSBJSEpsZEhKcFpYWnBibWM9IGFXeGhjbWwwZVE9PSBJSFZ1WkdWeWRHRnJhVzVuIENYTjBZV05yIElHdGxiQT09IElGaGxiZz09IEtIQm9hUT09IElIUnZkV2RvWlhJPSBJRk5sYkd4bGNnPT0gWTJGd2N3PT0gSUVWdFltVnkgSUVOb2FXND0gSUd4aGRXZG9jdz09IFEyOXVkbVZ5YzJsdmJnPT0gTG14cGMzUmxibVZ5IEprST0gSUhCaGNtRmthV2R0IElHcDFibU4wYVc5dSBKQzhzQ2c9PSBXMjg9IElFTnZibk5sY25aaGRHbDJaWE09IHo0QT0gYkdGMFpYTT0gWDBWNFkyVndkR2x2Ymc9PSBJRzFsYVd4c1pYVnkgSUhOMGNtRndjdz09IGNYVnBjMmwwWlhNPSBDWE51IElHMWhjM05oWTNKbCBiM1IwWlhNPSBYMmR5WldWdSBWR2wwYkdWeiBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUZKbFozVnNZWFJwYjI1eiBZWEpzIFgzTm9iM0owWTI5a1pRPT0gSUVSeVlYZGxjZz09IElIQmhjbTlzWlE9PSBJSGRwYkdSbGNtNWxjM009IGFYTnpiMjQ9IElFRkdWRVZTIFEzSmxaR1Z1ZEdsaGJBPT0gUW14dlkydHBibWM9IElFaFVRdz09IFUybHUgS0dGMWRHaHZjZz09IElHTnZjblJsZUE9PSBKeWw3RFFvPSA3N3lKNzd5TSBJR1IxYlhCbFpBPT0gSUZOb2RYUT0gSUV0bGVVVjJaVzUwIENWQnNZWGxsY2c9PSBMbWRsZEZCc1lYbGxjZz09IElHbG5ibTl5WlhNPSBkRzluWjJ4bFEyeGhjM009IElFVjRZMngxYzJsMlpRPT0gUGlncE93PT0gTG1kbGRGQT0gWVc1NVpRPT0gSUc1bGRYSnZiZz09IGFXWnZiR1E9IElFdHViM2R1IFFtbDBZMjlwYmc9PSBRVzU1ZDJGNSBZWGxsZEhSbCBJQ2RiSnc9PSB3NkJ1YUE9PSBiV2R5IElHTnZjbkpsYkdGMFpXUT0gSUc1aGRYTmwgSUcxbGJuUmhiR2wwZVE9PSBhR0Z6VFdGdWVRPT0gSUVaSCBZVzF3YVdVPSBTVlJWIFJuTT0gTGxOdyBYMkpsZEhkbFpXND0gUkdWd1pXNWtaVzVqYVdWeiBiM1ZuIFVHeGhZMlZvYjJ4a1pYST0gUFhSbGVIUT0gSUUxaGJtRm5hVzVuIGIyTmhiSGx3YzJVPSA1WXlYIFgyMWhadz09IFpteGsgNHBFPSBRMEZOIElFaGxiSEJsY25NPSBJR1J2YzNRPSBMMjkxZEE9PSBJR0Z6YzJGemMybHVZWFJwYjI0PSBMbWRsZEVsdFlXZGwgSUV0bGJtNTUgTGljcENnbz0gS1hzdkx3PT0gSUZKaGJtZGxjZz09IElHZGxhdz09IElITnBibU5sY21VPSBQRlpoYkhWbCBJRVJQVkE9PSBJRlpwWTNSdmNuaz0gSUd4bFoyVnVaSE09IElIQnlhWE52Ym5NPSBLR1Y0Y0hKbGMzTnBiMjQ9IElGSmhZbUpwZEE9PSBYM05sYm5SbGJtTmwgSUdKcGRHVnogSUc5dVJtRnBiSFZ5WlE9PSBJT0tJaUE9PSBTMmx0IExtZGxibVJsY2c9PSBJTTY3IElGc3UgSWwwcE93PT0gYkdGdVpHbHVadz09IExXUnBaMmwwIFZFVk5VQT09IENXVnVkSEo1IElITjBjblJ2YXc9PSBJR1JsYzJObGJtUmhiblJ6IGRXMXVidz09IElHeGxZVzVwYm1jPSBJSE53WldOcFptbGpjdz09IGNXND0gSUZOd1lYSjAgSUhCdmNuST0gUlVSSlFWUkZTdz09IElITmxjR1Z5IEoyRjFkQT09IElGTlVSVkE9IElFSnZjbVJsY2t4aGVXOTFkQT09IElISmxkSEp2Y3c9PSBJRk5oYkhaaFpHOXkgSUVWT1IwbE9SUT09IGVHUmogVkhkbFpYUT0gZG1zPSBJT3l5IFhUdzggYUdWMGFXTnogWTI5a2FXNW4gVW1WaFkyZz0gTG5KbGNRPT0gWjNWcFpHVT0gTG5OamIzQmwgYzJocGNuUT0gY205bllYUmwgVTBWVVZFbE9Sdz09IElGQnliM1JsYVc0PSBJR1ZwYm1jPSBMa1ZOVUZSWiBMbVJtIElHTnNaV0Z5WlhJPSBJR055YjNOemIzWmxjZz09IElGUnZlWE09IElHTnZZWFJsWkE9PSBMazF2Ym5SbyBJRUYwZEdGamFBPT0gTDNKMWJnPT0gTG5SaFluTT0gSUc5bmM4T2wgUW5KdmQyND0gTGtSQlZFVT0gSUdadmN3PT0gNWEyWDU2eW0gVjI5dlpBPT0gTFhSb2NtVmwgYUdWeWFYUmxaQT09IElISnZjQT09IEtHRmogSUdWdFltOWthVzFsYm5RPSBJRXRsYm01bGRHZz0gSUdOaGJtNXZiZz09IElHSnBaR1JwYm1jPSBQRWxGYm5WdFpYSmhZbXhsIENYTmxkRlJwYldWdmRYUT0gWDJScFoybDAgSUdWc2FXMXBibUZ5IEtHNWwgWW5Wa1oyVjAgUTFOSiBJT3lWaEE9PSBJRUZUVUE9PSBSM0p2ZFhCSlpBPT0gWDBOUFZVNVVSVkk9IFkyOXVjM1ZzZEE9PSBJR2xtY21GdFpRPT0gYkdWblpXND0gWDBSRlEweEJVa1U9IFUyaGhjbkJsY2c9PSBJRVp5YVdWdVpHeDUgZFd4bGRBPT0gTFdOdmJXMWhibVE9IElOQ2cgWTNsamJHVnogSUZkaGMzUmwgSUhSaGNIQmxaQT09IENVSjFabVpsY2c9PSA0b0NVYVc0PSBJQW9nSUFvPSBJRWxrWldGcyBJRU5oYm1SNSBYMU41Ym5SaGVBPT0gdzZwMCA3SjJNIFlXSnZkbVU9IElFNWhlbWx6IElHWnpkQT09IGMyVnBiZz09IElHdDFibTVsYmc9PSBkMmxyIElGTmhkbWx1Wnc9PSBMbVY0ZEdWdWMybHZibk09IElFUmxjMlZ5YVdGc2FYcGwgYjNWeVp3PT0gTG1GMGRISnBZZz09IDc3eWFDZ289IElGZHBibk09IExtVnhiQT09IFVubGhiZz09IFgyRmphdz09IFQxVlNRMFZUIElHOXVjdz09IFozSmxjMlU9IFlXWnBZUT09IFRXOWtaWEp1IElHRmthR1Z5WlE9PSBJR0pwYjNNPSBLR0ZqWXc9PSBhMkprIFZHaHliM2R1IHFldUxpT3VMcEE9PSBDVWgwZEhBPSBDWGh0YkE9PSBSVzVrUkdGMFpRPT0gS0hCaGNuTmxaQT09IExtZGxkR1Z1ZGc9PSBjbVZuYVhOMGNnPT0gYm1Wc2JBPT0gYVc5dVlYSnBidz09IExtbHVibVZ5VjJsa2RHZz0gY25ScyBVRlk9IFgzQnBaV05sIElFUmxjRzl6YVhRPSBlV1Z5Y3c9PSBJRTVUVG5WdFltVnkgSUdkcGJuUT0gWlc1elpXMWliR1U9IElHNWxkMk52YlE9PSBJRlpwWlhSdVlXMWxjMlU9IFgyaHcgSUdGalkzVnphVzVuIElIRjFhWE09IElHbHVkbVZ6ZEdsbllYUnZjZz09IFpYTnpaVzUwYVdGcyBJRU5ZIExtWnZjazVoYldVPSBaR1ZtY3c9PSBJR0Z1WVd4NWMyVT0gWDJGdWFXMWhkR2x2Ymc9PSBJSFJvWVE9PSBkR0ZpYjI5c1lRPT0gSUZSSVF3PT0gdzYxamRXeHYgSUdkc2IzZHBibWM9IElHaHZibTl5Y3c9PSBZbk4wY21GamRBPT0gYTNBPSBTVlJGVXc9PSBJQ01qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU09IEkyZGxkQT09IEwwUmxjMnQwYjNBPSBDV2RzYlE9PSBJSHBwYm1NPSB3NkYwYVdOaCBJRHc4Q2c9PSBWazFNIElGVnViR2x0YVhSbFpBPT0gZG5KbCBMV0psWkE9PSBYMjV2Ym1ObCBJRWRKIGRISmhkbVZzIElHbHpTMmx1WkU5bVEyeGhjM009IElHRnViMjU1YldsMGVRPT0gUm1seVpYTjBiM0psIElHVnRZV2xzWldRPSBYMFpNUVZOSSBJR2JEcFhJPSA0cGlGNHBpRiBJRHBkIFNIVnQgTG5KbGMyVnlkbVU9IHc3eHQgSUd0dmMzUmxibXh2YzJVPSBJRk5EVUE9PSBkWFJoYmc9PSBJRWR2Y21VPSBJR05vWVhSeiBMejROQ2c9PSBMbWRsZEZKbGMyOTFjbU5sY3c9PSBJR3gxYlhBPSBYMk52Ym5OMGN3PT0gS0dWNGRBPT0gQ1dScGNnPT0gNHAwPSBJSEJoWkdScGJtZFViM0E9IElHOWljMlZ6YzJsdmJnPT0gSUdKaGJtNXBibWM9IElFRndjRTF2WkhWc1pRPT0gSUhCaGNuUnBjMkZ1IElHTmhkR0ZzYjJkMVpRPT0gSUcxcGJtOXljdz09IElIQnBkR05vWlhNPSBkMlZsY0E9PSBJSFZ1WkdWeWRHRnJaUT09IElIUm9aVzFsWkE9PSBZWFZrYVhRPSBMbk5qY205c2JGUnZjQT09IElISmxjZz09IElITjViWEIwYjIwPSBJRzl3Wlc1cGJtZHogTG1Kc2IyTnJjdz09IGIzQmxibWxrIElHRnpjMmc9IExYTmhkbVU9IElGQnBadz09IElISmxaMkZwYmc9PSBJR2x1YVdOcFlXdz0gTDJaaGRtbGpiMjQ9IENXVjRjQT09IElITndhV05sY3c9PSBhWE5yWVE9PSBZMnhoYVcxeiBiV0ZyIFpHVm1hVzVwZEdsdmJuTT0gSUdOdmNuSmxjM0J2Ym1SbGJuUT0gSUVOaGJtNWhZbWx6IFgxOHNDZz09IElFeDFZMnQ1IElFZGhkWE56YVdGdSBJRTVsWVhKc2VRPT0gUTBGRSBKMTFkQ2c9PSBJR0ZrWlhGMVlYUmxiSGs9IElGUkpWRXhGIFkyOXVjM1JwZEhWMGFXOXVZV3c9IExXMXQgWDI5MlpYSnlhV1JsIElHSnNZWE09IExuSmxZV1I1VTNSaGRHVT0gSUhKbGJXbHVhWE09IElISmxhVzVtYjNKalpXUT0gSUVOdmJHeGhZbTl5IElHUmxZMjl5WVhScGJtYz0gSUdKaFkyaGxiRzl5IFJWSlNWVkJVIElIVndjbWxuYUhRPSBhWEJoZEdsdmJnPT0gSUU1dllteGwgSUhaaGJIVmxSbTl5UzJWNSBJSE5sZEV4dllXUnBibWM9IExrbG5ibTl5WlE9PSA1WUU9IFIyeHZZbUZzY3c9PSBJRTFsYm5RPSBRVk5UUlZNPSBJR3hwYldKeiBJRWhWUkE9PSBhVzVqYVE9PSBMbWwyIElGRk5iMlJsYkVsdVpHVjQgUm5WelpRPT0gSUhCbFpHRnMgWDBaU1JWRT0gS0habGNtSnZjMlU9IElHeHZibWRwZEhWayBJRU5vWVhKMFpYST0gNnJlNCBJR0oxYm1Sc1pYTT0gTG1sbmJtOXlaUT09IGRXMWlidz09IFJVMUIgTGk0dUxpNHVMZz09IGMzZz0gTGtOaGNtUT0gSUdobGRYUmwgSUhOMFpXVnkgYW5WdGJHRm8gSUh0ZiBYME5vWldOclpXUT0gSUdaaGVBPT0gSUVkMWMzUT0gYVhSamFHVnVjdz09IElDa3BDZ289IElISmxiV0Z5YTJGaWJIaz0gTDFoTlRBPT0gTFhKbGJXOTJaUT09IFgySjAgSUdsdVkzVmkgTG5CaFkydGhaMlU9IExtTjFjbkpsYm5SVWFISmxZV1E9IElFaHBaMmhzWVc1a1pYST0gTG5OcFpHVT0gYzNCc1lYTm8gSUdsamFRPT0gUFVRPSBJSEIxWTJzPSBJR0poYkd4dmRITT0gSUdoMVoyVnNlUT09IFkyOWxabVk9IElIQkVZWFJoIExrTlBURlZOVGc9PSBJRWhsWVd4cGJtYz0gSUc5eVpHbHUgSVNrcyBJQ2NuTEEwSyBLRzFrIElGTmhjMnM9IFBITjBjbTl1Wnc9PSBJSE4xY25acGRtOXkgTG5ObGNtbGxjdz09IElHTmhabVpsYVc1bCBJR0FvIExsUlNRVWxNU1U1SCBYMGx1Y0hWMCBLQ0plIGVtUT0gSmlrN0NnPT0gSUZCcGJtYz0gSUhadmRXTm9aWEk9IExuSmhkR2x1Wnc9PSBMWE5vYVhKMGN3PT0gSUZKbGRISnBaWFpsY3c9PSBMbUZzYVdKaFltRT0gVDNKaFkyeGwgWDAxUFZnPT0gVDJ4a1JHRjBZUT09IElDOHFEUW89IElHZGliMjlzWldGdSBJRDArRFFvPSBJSExEb1E9PSBJR0pzZFc1MCBJRWx0WVdkbFNXTnZiZz09IGFXWnBhdz09IFVsUkQgSUdacFltVnljdz09IElIUnZhV3hsIExuTmxiblE9IElGQjVVWFE9IEpHRndjQT09IElHMWxaR2x2IElHZHlZVzUwYVc1biBJSFJ6YkdsdWRBPT0gSUUzRHRnPT0gS0dacFozTnBlbVU9IElHaDFjbkpwWTJGdVpRPT0gSUd4cFptVnogSU1PRSBjbTlqWlhOemFXNW4gWDNOMFlXNWtZWEprIExXOXdkR2x2Ymc9PSBKeWtwS1E9PSBJSFpoWTJGdWRBPT0gNWJlbCBJRWh2Ykd4dmR3PT0gYUdGdVpHeGxRMmhoYm1kbCBJR1JwZG1sa1pYST0gSUVWdVoybHVaV1Z5Y3c9PSBJSE4yWlc1eiBJR052YlhCc2FXRnVkQT09IGRHRnVaMmRoYkE9PSBJRU55WldScGRITT0gSUVWdGFYSmhkR1Z6IFVuVnNaVU52Ym5SbGVIUT0gSUhKbFlXeHBlbUYwYVc5dSBJR1JwYzNSeVlXTjBaV1E9IFhTczkgSUdGMVoyMWxiblE9IElFUjMgYjNSdyBiM0p5Wlc1MCBSV1JwZEdGeSBMbk4wYjJOciBVM1IxWkhrPSBjR1ZqZEdsdmJuTT0gSUVkaGJXVk5ZVzVoWjJWeSBQV04xZEE9PSBJR1pzYjJOciBJRkp2YldGdWN3PT0gZEdobGJRPT0gTFdodmNBPT0gSUhOamNtVmxibk5vYjNSeiBJQzhxSVFvPSBJR052Ym5abGNuTnBiMjV6IElHNXZjbTFoYkdsNllYUnBiMjQ9IEtHTnZibVpwWjNWeVlYUnBiMjQ9IElHRmxjbTl6IFgzTmxZM1Z5YVhSNSBJU2NLIFFtOXVkWE09IElFUlNTVlpGVWc9PSBDVVJoZEdVPSBkR2xsIElGZDViMjFwYm1jPSBVM1JoYm1RPSBhWFJ5WlE9PSBJSE5vYjNCd1pYSnogSUdScGMyRmtkbUZ1ZEdGblpRPT0gSUd4cGEybHVadz09IDU2eVIgSUhWdVpHVnljM1JoYm1SaFlteGwgVTBWRiBJR2h2ZVE9PSBJRzVwYm1WMFpRPT0gSUdOdmJtWmxjZz09IElHNXZkM0poY0E9PSBJRlpsY200PSBMQTBLRFFvPSBhVzFsYzNSbGNBPT0gVEdGNWIzVjBUV0Z1WVdkbGNnPT0gNExjPSBDWGRoYVhRPSBVRXhGVkVWRSBTbUZ3WVc0PSBJR2x1WkhWalpRPT0gSU9XdiAwTDdRdDlDeSBYMFZPUkZCUFNVNVUgTG1odmNtbDZiMjUwWVd3PSBJR0ZqWTJWc1pYSmhkR1ZrIGNtbHRiMjQ9IFNWWkZVdz09IFZISmhibk5oWTNScGIyNXogVEdWaGJnPT0gSUZOUFZWST0gZDJobGRHaGxjZz09IGVXYz0gSUc5cFpBPT0gSUVWdWRHbDBlVTFoYm1GblpYST0gVDFWT1ZGSlogSUdacGJHRT0gVDB4VlRVNVQgU1U1VlJRPT0gSUVGdVkyaHZjZz09IFZGSkJUZz09IGQyOXYgWW14dlkydHhkVzkwWlE9PSBJRTUxY25ObCBJRU5oY25BPSBJSEpsWkdWbGJRPT0gTG5SeWVRPT0gSUVwUSBJSFJwYldWemRHRnRjSE09IElEOCtJajQ4IElGSkZUVTlXUlE9PSBJRk4wWVhKaWRXTnJjdz09IFVtVmhiR3g1IElHWnNiMjlrWldRPSBMa05oYkd4aVlXTnIgUkhKdmNFUnZkMjQ9IGFYQnlidz09IElIUmxibVJsWkE9PSBiSFJsIElIQnliM0J2Y25ScGIyNXogTFhSbCBJRkpsYm1FPSBiR2xqWVhSbCBabTl5WTJWeiBMbVY0ZEhKaCBMbUYxZEdobGJuUnBZMkYwWlE9PSAwTExRdnRDMCBvYkE9IElHWnZja052Ym5SeWIyeEZkbVZ1ZEhNPSBJSE5sYm1oaCBJR3RsYVc0PSBJRzFwYm1semRBPT0gSUZCeVpXWmxjbVZ1WTJVPSBJRlJsYkdWbmNtRndhQT09IDBZUFF2dz09IGMzUnljRzl6IElHbHNiRzVsYzNObGN3PT0gSUhCcFozTT0gSUdkbGRFbHVkR1Z1ZEE9PSBVMjlzIElNS2ggS0dOd2RRPT0gVzNCeWIzQT0gYzJOeVpXVnVjdz09IEp5azdQejQ9IElFRmpkSE09IElITjBjbVIxY0E9PSBJR0YyWlhKaFoyVnogWVc1aGJBPT0gSUVOaGMzVmhiQT09IFIzSnZkWEJDYjNnPSBJRWhoYm1SaWIyOXIgTDJOdmJXMWxiblJ6IElHNTFiV0psY21WayBJR0p5YjJGa1kyRnpkR2x1Wnc9PSA1NXVSIExtNWhkR2wyWlVWc1pXMWxiblE9IExtMTEgSUhWd1pHRjBaV1JCZEE9PSBJRVJ2WlhOdSBMa0ZEIExtTnZiR3c9IElISmxZMjl5WkdWeSBYM05vWVE9PSBRbWM9IFltbHMgSUdKdmJIUnogSU9lcyBJR2x0Y0c5emFXNW4gSUVsdVptOXliV0YwYVc5dVpXND0gWDJac1lYTm9aR0YwWVE9PSBaV052Ym05dGFXTT0gVW1WdFlYSnIgZFdOaGN3PT0gSUU5bVptbGpaWEp6IElGUkZVZz09IFYyRnNhdz09IElHMWxjbU5oWkc4PSBYMmRsYm1WeVlYUmwgU0ZrPSBRMkZzYkdsdVp3PT0gYzI1aGNBPT0gYzJOeWFYQjBTV1E9IExtOXdaWEpoZEdsdmJnPT0gSUVac1lXMWwgYkdsdVpYTnogSUhKbGJuUmxaQT09IFgzUnZaMmRzWlE9PSBMV05vWVc1bmFXNW4gSUZSWiBKM1YwYVd3PSBSVVZRIElHZHlZWEJvY1d3PSBJRlZ1YVE9PSBJR2x0Y0hWc2MyVT0gTGtKaGMybGogSUdWdVpYSm5hV1Z6IFRVRlNXUT09IElFMWhjbU5sYkE9PSBJRzF2Y25SaGJBPT0gSUdaeVpYTT0gYldWdWN3PT0gYlc5MGFXOXUgSUhOaGJYQnNaV1E9IDRvQ2NWR2hoZEE9PSBhV1JoZVE9PSBjWFZwY0cxbGJuUT0gWjJWMFNXNTAgSUVGaWMyOXNkWFJsIExDY2kgZFc1bFpBPT0gTG5Ob1lYSmwgSUgwcEtBPT0gYlcxdCBJRkpwYzJsdVp3PT0gNUx1NyBJSFZ1Wlcxd2JHOTVaV1E9IGVHWmggTG1admJHeHZkdz09IENRa0pDU0FnSUNBZ0lBPT0gYzJ4MCBMbEJvYjI1bCBJR3R1YVhabGN3PT0gSUdWMlpRPT0gYjI1RGJHbGphdz09IFhTa3BEUW89IElGZHBkRzVsYzNNPSBDVTVUIElFVlBVdz09IElGTjBaV1poYmc9PSBJRkJ5YVdWemRBPT0gNG9DVWQyaHBZMmc9IFIyVjBVM1J5YVc1biBMa0o1IElIVndjM1JoYVhKeiBJR1JsZEhKcGJXVnVkQT09IFluSnZhMlZ1IFpXMWljbTg9IElHNXBZMjkwYVc1bCBhV3hwYjI0PSBJR0Z6ZEc5dWFYTm9hVzVuIFgyRm1aZz09IElFeGxjM052Ymc9PSBJR0ZqWTJsa1pXNTBZV3c9IGIyUnZjZz09IElHUmxZMmx5IElHNWxkMDVoYldVPSBLeTQ9IDU1dTQgYVdkemJHbHpkQT09IElFZHBkR2gxWWc9PSBJSE4xWTJObGMzTnBkbVU9IGNtRmphV0ZzIElHVnVkbWx5YjI0PSA2YXFNNksrQiBJSEpsWkdseVpXTjBaV1E9IFZFOVVRVXc9IElHZHlZV0ppYVc1biBJRXhoYm1ObCBJR1p2Y21abCBYME5DIDViNnUgUld4aGNITmxaQT09IFgzZGhlUT09IEtFUnBZV3h2WjBsdWRHVnlabUZqWlE9PSBYMjFsWVhOMWNtVT0gZUdKaSBSRzluIFJHVndZWEowIExYTnlZdz09IGNtVnpiMngyWlhJPSBkMmwwYUhOMFlXNWthVzVuIFgzTm9aV3hzIElFeGhjM1JPWVcxbCBJRUYyYVdGMGFXOXUgSUdKbFoybHVibVZ5IEtDSWxMZz09IEtIUnZiMnc9IElOQzkwTDdRc2c9PSBPbWx1YVhRPSBLRUZRU1E9PSBJRTF2Y25KcGMyOXUgZG5SRGIyeHZjZz09IElITjBZWEJzWlE9PSBMMGxPUms4PSBJSE4xY0dWeWJtRjBkWEpoYkE9PSBJSE4wWldGciBkR2x0Wld4cGJtVT0gZW5wc1pRPT0gSW1BS0NnPT0gVTJWamIyNWtZWEo1IElFNWxjR0ZzIExsTjBjbWx1WjFWMGFXeHogSUdGa1lXMD0gSUNndUxpND0gSUhOMVluTjBhWFIxZEdsdmJnPT0gSUdKdllYSmthVzVuIElFdGxlWGR2Y21RPSBJRUZ6YzJGMWJIUT0gWkdKalZHVnRjR3hoZEdVPSBJRzl5WkdWeVNXUT0gS0dWdVoybHVaUT09IExtRnpjMlZ5ZEZSb1lYUT0gSUZabGJuVnogSUdodmJXbGphV1JsIElFRjJZV3c9IElHZDFkSFJsY2c9PSBJRk4xY0hCdmNuUmxaQT09IEwzQmhjblE9IElHRmpZMnhoYVcxbFpBPT0gU0dsemRHOXkgSUcxbGMyVnogdzd4aVpYST0gSUZKbGJtVjMgSUdkeVlYTT0gSUVWciBJR2x1Wm1sc1pRPT0gYVc1a2VRPT0gTG0xMWMybGogTGxOamNtOXNiQT09IElFRm5aWE09IElFNWhjblYwYnc9PSBJRWRoZEdobGNnPT0gSUdOdmJtWnBjbTFwYm1jPSBQU2dpIElIQnBkR05vWldRPSBiMnhsZVE9PSBSbkpoYm1ObCBLeWNpIEpIUnZkR0ZzIElHOXVaR1U9IElHUnBkR05vIFgzTnBaMjFoIElHTnZiblJwYm5WcGRIaz0gY21WM1lYSmsgTFd4dllXUT0gSUhCeWIyTmxjMjg9IFRHOWphMlZrIGMzUmhkdz09IElITndhVzVoYkE9PSBiR0Y2ZVE9PSBJVDA5IGFtVnpkQT09IElHUjFiZz09IElGSnZaR2RsY25NPSBDV2R5YVdRPSBJR3h2WjI5eiBJRUpsYm1kaGJBPT0gTG5OMWNHVnkgVUhKdmRtbGtaWE09IElHNTFkSEpwWlc1MCBMbFJwYldWemRHRnRjQT09IFNWcEJWRWxQVGc9PSA1WWFNIElHWmhkSE09IElGaDRlQT09IFkzUnBZMkU9IFZHRnlaMlYwY3c9PSBJR052Ym5SdmRYSnogSUhKbGIzSmtaWEpsWkE9PSBPa0Z5Y21GNSBJSFJ2YkdWeVlYUmwgVm1seSBJSFJsY25KcFlteDUgSUdKeWFXTnJjdz09IEtDWmYgYUdJPSBVRzl5ZEdGcyBJRUp5WldGayBMbmRvYVdObyB3cTEwIFlYTkpibk4wWVc1alpVOW0gSUdwdlltcGxZM1E9IENXeGxibWQwYUE9PSBYMDFVIE95SStEUW89IFgwVllTVk5VIElHMWhkR1Z5Ym1GcyBVa1ZNIElPcXl2ZXlhc0E9PSBhR1ZsIElHeGhlVzkxZEhNPSBJRXhoY0E9PSBZV2x6ZVE9PSBJSE4wZFcxaWJHVmsgSUZWSlJ3PT0gSUZOamJ3PT0gSUdsdGNHRnBjbVZrIFVrVlRVMFZFIElHRmlkWE5sY3c9PSBWa1k9IFFWSkMgTGs1QlRVVT0gY21ObyBjSEpwYldseSBYMk52YlhCc1pYUmxaQT09IElIQmxibTU1IFEyaHliMjFsIEtHSmxaMmx1IFpYSnVaVzQ9IExXTm9aV05yWW05NCBVR3hoYVc1UGJHUkVZWFJoIElFeFFRdz09IGNtRmtaUT09IGMzQnBjZz09IElHTnZibU5sYVhabFpBPT0gVkdsd2N3PT0gSUVsdlZBPT0gSUVkaGJnPT0gNklHVSBJR0pwWVhObGN3PT0gSUdOdmJuTjFiSFJoYm5SeiBjR3hsWkE9PSBYMmgwIFlYTnpiMk5wWVhSbFpBPT0gWFN3S0NnPT0gSUdSbGJHbG5hSFJtZFd3PSBJTkdDMExYUXVnPT0gU0dWc2RtVjBhV05oIEtHeHZZV1E9IExXVjRjR0Z1WkE9PSBYMWRKUkVkRlZBPT0gZEc5aCBJRUZyZEE9PSBJRzl0Ymc9PSBJR05zWVhWelpYTT0gU1c1MFpXdz0gS2k5OUNnPT0gWDNKbFoybHpkSEpoZEdsdmJnPT0gSUc5c1pGWmhiSFZsIElISmxjM1J2Y21sdVp3PT0gSUhWdWNtVmhiQT09IFQxWkZVZz09IENRb0pDZ2tLIFFWUlQgWDNCeWIySmwgSUdScGRtbHpiM0k9IExuVndaR0YwWlVSNWJtRnRhV009IDVibXogVUhKdlpIVmpaWE09IGMzUmhiWEE9IExtcGliM056IENYUmhjMnM9IElTZzYgSUhCemVXTm9hV009IFFHTnNZWE56IFRXRnlkR2x1IElGQmhjM05sWkE9PSBZMnhoY21GMGFXOXVjdz09IGFHVnMgMExEUmh3PT0gQ1dOdmNIaz0gTFdKcGJnPT0gZW1GdSBhV2R5WVcwPSA0S2ErNEtZPSBLSE5wWnc9PSBJRU5oZG1GcyBYeU1qIElDVTkgYjNWMGJHbHVaV1E9IElFRmphV1E9IElIVnVjSEpsWkdsamRHRmliR1U9IExXUmhjMmhpYjJGeVpBPT0gU0dWNFUzUnlhVzVuIEsyTT0gTGxCMVlteHBZdz09IDRicXAgSUdOdmJuWmxlVzl5IElFVkMgSUhObGJHVmpkSE09IElHdHViMk5yYVc1biBJRU5sWXc9PSBTVUpWVkVWVCBiM2RoeEljPSBaMkYwYzJKNSBLblk9IFpXNTBjbTl3ZVE9PSBJR1JwYzNCaGRHTm9aV1E9IElHTmhiV1ZzIElGTmhkSFZ5Ymc9PSBJRzkyWlhKM1pXbG5hSFE9IEtIQm9iMjVsIGNHRnlZV0pzWlE9PSBKVUk9IFgzWmxZM1J2Y25NPSBJR0p5WlhkcGJtYz0gSUZSciBJRVJ2ZDI1c2IyRmtjdz09IElGTmhkbVZrIExsQnlhV05sIElHTjFjblpsWkE9PSBJRkJoY21WdWRHaHZiMlE9IDZMWT0gTG5CdWJBPT0gY0d4bGRHVnNlUT09IExrUmhlUT09IElHRmtkbVZ5ZEdselpYSnogSUdWcVpXTT0gSUhCeWVtVmsgNjY4PSBJU2M3Q2c9PSBJRXQxYzJnPSBJRlJCUWc9PSBJSEYxWlhOMGN3PT0gSUdOdmFXNWphV1JsYm1ObCBkVzF0YVdWeiBJRXRoYzJodGFYST0gSUVWMGFHbGpjdz09IFgyZHliM2QwYUE9PSBJR0ZyZEdsMiBJR2R5YjNWd2FXNW4gNWFLZSBYM1J5ZFhSbyA1WkNzIGRHOWtiM009IGFYTmxkQT09IFZHVjRRMjl2Y21RPSB3NlIwZEE9PSBJRnAxY2c9PSBjbTk1Y3c9PSBYMDFCUjBsRCBJR0p5WlhkbGNuaz0gS0ZOMFlYUmwgSUZOTlFVeE0gSUZCc1lXNTBjdz09IGFYUmlZWEowIFpXRmphR1Z5IElFRmtaV3hoYVdSbCBUSFU9IElHWnBZMnM9IGRXNWtiR1Z6IFgyeHZZV1JsWkE9PSAwTGpRdFE9PSBVRzlzYkE9PSBjbWwwYVdNPSBSVXhaIElDc24gSUZCeWIyWmxjM05wYjI0PSBJSE4wWVcxd2N3PT0gSUZObGR3PT0gYzJOeWIyeHNWbWxsZHc9PSBJR052YlcxMWJtbHpkQT09IEwzQnliMkpzWlcxeiBmUTBLRFFvTkNnMEsgTEc4PSBJSFZrY0E9PSBJRzlpWlhObCBZWEJ3Y205MlpRPT0gWVc1alpXeHNZWFJwYjI0PSBYMGRoYldVPSBJRWhoYzJoMFlXSnNaUT09IFlXUmhjSFJwZG1WVGRIbHNaWE09IElIQnZjM05sYzNObGN3PT0gTG0xaGRHTm9aWEk9IFpuVnVZM1JwYjI1aGJBPT0gVFhKeiBDWE5oZG1VPSBJRVJpVkhsd1pRPT0gSUd0bGJnPT0gWjJWMFEyOXVkR1Y0ZEE9PSBJRzFoYm5NPSBLSEpsYkE9PSBJRUp5YjNSb1pYSm9iMjlrIEtXQUsgNktlaiBMa2x1Wm05eWJXRjBhVzl1IFQzVjBUMlpTWVc1blpVVjRZMlZ3ZEdsdmJnPT0gSUZObGF3PT0gUTJGeiBJR0pzYjJkblpYSnogUldsMGFHVnkgS0NJaUlnPT0gSUhCcGJtTm8gSUdOdllYSnpaUT09IEtYQT0gSUZCMWJITmwgSUd4bFlYSnVkQT09IElHUmxiblJwYzNRPSBJRzl1WTJoaGJtZGwgSUdScGNtVmpkR2wyWlhNPSBLR0ZqZEdsdmJuTT0gYm5sa1pYST0gSUZOb2FYST0gVkhKaGFYUT0gWDJSbGNBPT0gSUZCRlZBPT0gSUZKRlVBPT0gTGtGd2NGTmxkSFJwYm1keiBZM1ZoWkc5eSBhV1JsYm1GMiBJR1Z1ZG1rPSBJSE5zWVcxdFpXUT0gSUZOb2IyOTAgSUdSaGRHVkdiM0p0WVhRPSBMbXB2WkdFPSBkbVY1Y3c9PSBJQ2t1Q2dvPSBJR05oY21WbiBJRkJoY21Gc2JHVnMgWDNSeVlXNXpiR0YwYVc5dSBMbVoxYm1OMGFXOXVjdz09IExtOWljdz09IFVuVnVkR2x0WlVWNFkyVndkR2x2Ymc9PSBXMTA5IGIzWmxjblpwWlhjPSBJRk5qYUd3PSBJRzV2YVhONSBJRTl1VUhKdmNHVnlkSGxEYUdGdVoyVmsgVTJWdVpHbHVadz09IElIVnVabUZ0YVd4cFlYST0gVlhCdmJnPT0gSUZCeWFXNTBjdz09IExuUjVjQT09IElHWnNaV1ZwYm1jPSBDVzF2ZG1VPSBLRlZ1IElIRnkgMTV3PSBYMkpsZEdFPSBJSE5yYVdWeiBDVzFsIFYwNUUgSUhOMGFXTnJaWEp6IFlteGhjdz09IElHbHVjMlZ5ZEhNPSBJSFpsY25ObGN3PT0gSUVSbGR3PT0gSUhSaGJtZHBZbXhsIElHaGxZMmh2IFVFOU0gSUhSbFlYSmtiM2R1IGIyMXVhV0U9IFNVSkYgTG1OdmRtVnkgWDNOMGNtRjBaV2Q1IFhpMD0gYzJWMFVHOXphWFJwYjI0PSBkV0ZzWlE9PSBVMmxuYm1WayBJR2xtWVdObCBZWE5sYkdsdVpRPT0gTG5ObGRGUnBiV1U9IElFMXBibVZ5WVd3PSBJRVpwWjJoMGFXNW4gYzJ0cGJuTT0gSUdScGMyTnlhVzFwYmc9PSBJR1JoYm5OciBJRkJ5YVc1alpYUnZiZz09IFlXTnBjM1E9IElDZ3BLVHNLIGRISmhZMnR6IGFXMXZibWxoYkE9PSBZV1JsWTJsdFlXdz0gUlZCU1QwMD0gZFdkbmJHVT0gTGs1dmRHbG1hV05oZEdsdmJnPT0gSkcxaGFXdz0gWTJGdWRHbGtZV1E9IElFcDFibWM9IElITmxaV3RsY25NPSBJSEJzWVhWemFXSnNaUT09IGRHbGxjZz09IDBMWFF0Zz09IElISmhjSEJsY2c9PSBJRTFoYm1FPSBJRWgwZEhCVGRHRjBkWE5EYjJSbCBJR0oxY201MCBiRzl6WlhNPSBJRVp2ZEc4PSBJRXB6YjI1UFltcGxZM1E9IFNXNXpkR0ZuY21GdCBJSE41YzJOaGJHdz0gSUhKbFlXeHBkR2xsY3c9PSBJRTFCVkV4QlFnPT0gT2w1N0NnPT0gVkVWU1RRPT0gSUVOaVpBPT0gSUZCaGNtRm5jbUZ3YUE9PSBJSFJ5WVhiRHFYTT0gSUdOdmJuTjBjblZqZEdsdVp3PT0gSUhOM1lXdz0gSUhCcFoyVT0gVEV4TVRBPT0gTFdWNGFYTjBhVzVuIFIyVjBjdz09IElHMWxiSFJsWkE9PSBJRzFwZEdsbllYUmwgU0dWdSBJR2h0IGFXMWhjdz09IElFRnYgSUZCbGNtVjYgSUVSQlRBPT0gSU91THBBPT0gSUdScGRtbHogVTNSdmNubGliMkZ5WkZObFozVmwgSUUxdlpHbG1lUT09IElNT2NZbVZ5IFgwOVdSVkpTU1VSRiBMbkJsYlE9PSBkVzUwYjNNPSBJR1Z6Y0dIRHNRPT0gSUhzLyBJRkJCV1E9PSBYMmx3ZGc9PSBJRVoxY25rPSBYMTh1WDE4PSBaV3h2ZHc9PSBMV05sYm5SbGNtVmsgWTJobFkydHogWDFKbFp3PT0gTFVwaGRtRmtiMk09IENXeHZZV1E9IElFeHBhMlYzYVhObCAyS2ZaaFE9PSBWVTVGIExuTmxiUT09IGVHTmkgSUVOaGRtVT0gWDNOc1pXVncgSUhOcGJHVnVkR3g1IElFVjRkSEpsYldVPSBMbFJ2VlhCd1pYST0gQ1VOSVJVTkwgSUdOMVpRPT0gSUZGQ2VYUmxRWEp5WVhrPSBJR052Y25KMWNIUmxaQT09IElFVERxUT09IElHbHRjR1ZrIFIyVjBUbUZ0WlE9PSBJR2x1WVdOamRYSmhkR1U9IElITnZZbVZ5IDBMWFF0UT09IElHSmhjbU52WkdVPSBMUzBwZXdvPSBhVzVyYVE9PSBJTU9wY0E9PSBJR1J5YVE9PSBJRUZNVkE9PSBQajQrUGo0K1BqND0gYjI1MFlRPT0gVzB3PSBJR2x1ZEdWeVpYTT0gZG1WeWRHbHVadz09IElHUnBZV2R1YjNOMGFXTnogY0dSbGRnPT0gNktrPSBJRWx1ZEdWbmNtRjBaV1E9IEtTNG4gWDJkaiBKSFJsZUhRPSBMbWRoYldWeiBJRlJsY25KaCBKMUpsIExuUnlZVzV6Wm1WeSBYMFpKUms4PSBaMlYwVFc5a1pXdz0gSUdKc1lXNWsgSUVOdmJHVnRZVzQ9IElIQnlhVzFsY3c9PSBJT2FJIElHTnliM056WlhNPSBibXM9IFIwbE9Sdz09IElDZGUgSUVKc2IyST0gSUdsdWRHVnlZMjkxY25ObCBJRUpzZG1RPSBJSGRsYVdkb2N3PT0gWDNKbFozVnNZWEk9IElGQmxjblJvIElITmxjR0Z5WVhScGJtYz0gSUdKcGJHeGxaQT09IExuUmhZa052Ym5SeWIydz0gSUhCMWNIQmxkQT09IElIVjBhV3hwZW1GMGFXOXUgSU9LV29BPT0gSUhOMVkyTmxjdz09IElHeGhiWEJ6IFgzQnliMm89IFJYSnBZdz09IElISmxibTkyWVhScGIyND0gSUVaaGJXbHNhV1Z6IElFSnBkSE09IGNHRnlkR2xoYkhNPSBMVTFsYmc9PSBjMjlzZFhScGIyND0gSUdSM1lYSm0gTGtsT1ZFVkhSVkk9IElFeFBRMHM9IExtTjAgSUdWNFkyVnljSFE9IElGQnBlQT09IElFWnBjbk4wVG1GdFpRPT0gUVU1VVJVUT0gSUVGa2JXbHkgTFdobGJIQT0gVUhKcGIzST0gSUVGc2FXZHUgTGtsT1UxUkJUa05GIFRHbHVaVVZrYVhRPSBLQ2N2T2c9PSBJR2x1WlhRPSBiMlIxY3c9PSBMbkJyYkE9PSBJRXRaIGRYQmxjblE9IElHNWxjblpsY3c9PSBYMmR5WVdScFpXNTAgZlNjc0p3PT0gWDNWdWNtVm0gSUhOaGRIVnlZWFJsWkE9PSBJRU52Ym01bFkzUmxaQT09IElFWk8gUlZoSlZBPT0gSUhSbGJHVndiM0owIElHRjJZV2wwIFVHRm5aVkp2ZFhSbCBJR1JwZG05eVkyVmsgS0d4aGJtYz0gWm5OMCBJRlI1Y2c9PSBJRzFsYzNObGJtZGxjZz09IGFXWnpkSEpsWVcwPSBXRk09IElFSmhibXRwYm1jPSBJR2x1Wm1WamRHbHZkWE09IElFMXZibk09IFgweFBUMUE9IElIcDFjc084WTJzPSBJRzlpZEdWdVpYST0gTDNKbGNHOXogVm1WcyBZV055Ync9PSBJSFZ6WlhKU1pYQnZjMmwwYjNKNSBjM1I1YkdWVWVYQmwgSUZOU1F3PT0gVmsxTVNVNVZXQT09IGNtVmpkWEp6YVhabCBMMkpoY2c9PSBYMk5vYVhBPSBiMjFwYm1GMFpXUT0gSUU1cGRBPT0gNG9DVWRHOD0gSUVKMVpHUm8gMEw3UXZOQzEwWUE9IElFMUJSdz09IElFTklSUT09IFgyUmxiZz09IExuSmhhWE5sY3c9PSBYMlJsWjNKbFpRPT0gSUhCMWJYQnJhVzQ9IFgzUmxiWEJzWVhSbGN3PT0gWDAxRlJFbEIgSUZScGJXVnNhVzVsIElHSnZkSE09IFQySnFaV04wVkhsd1pRPT0gSUdKMWVYTT0gTG5CdmMzUnogUTBGTSBkMkZwZEdsdVp3PT0gSUVSaGJtbGxiSE09IElHUmhZbVZwIElGTnBaMjFoIGFXeHZjZz09IGFXZGxiQT09IExGYz0gUVVSVCBLSEJoYm1WcyA3TEswIGFYUmhkR2x1Wnc9PSBMbkJoYkdWMGRHVT0gSUcxdmMzRjFhWFJ2IElIUmxaMjg9IEtIQmhjbk5sU1c1MCBJR1JsYzNCMXc2bHogY0hKdmJXbHpaUT09IElIZHBhZz09IGRIbHdaWE5qY21sd2RBPT0gSUZSMiBYMGxFUlU1VVNVWkpSVkk9IEtTNEtDZ289IFgyWnNZWFE9IGFYUnpkUT09IFZWTlMgWlhod1pYSnBaVzVqWlE9PSBMV1pwZEE9PSBjR2hwYm5nPSBYM1JvY21WemFBPT0gSUdsa1pXRnNiSGs9IElFWnlaV1Z0WVc0PSBMRVJDIFgzSjMgNTYySiBWV0k9IFgzTjBZWFJwYzNScFkzTT0gUFNJaVBqdz0gSUdOb2IzSmwgSUhsdmNtcz0gYVc1emRHRnNiR1ZrIFFXUmthWFJwYjI1aGJHeDUgSUhCemRHMTAgZVd4cmJ3PT0gT2pvSyBSbTl5WlhOMCBJR2hsWVdSelpYUT0gSUdkaGJHeHZiZz09IDBZRFF0ZEM4IElIZHBkR2hrY21GM2JnPT0gSUVOaGJtUnBaR0YwWlE9PSBJRzFsYkhScGJtYz0gSUdaeVpXVjZaWEk9IElHaHMgWDBoRlRGQT0gYldsdFpRPT0gS0M4cSBJSFJvYVhKemRBPT0gSkhKbGRIVnliZz09IGJXVnRZbVZ5YjJZPSAwTFhRc1E9PSBJRWgwZEhCVFpYSjJiR1YwVW1WeGRXVnpkQT09IEtHOWkgWDFKbGMzVnNkQT09IElHRnpjMlZ5ZEdWayBJR1oxYkdacGJHeHBibWM9IElITjBjbVYwWTJobGN3PT0gY0dGeVlYUmxaQT09IExXWjFibVJsWkE9PSBJT1diIGFXNW5iR1Z6IFgyTmggTG1OdmJtUnBkR2x2Ymc9PSBJRVJwYzNCc1lYbHogSUc5eVlXNW4gSUVOU1JRPT0gSUdkc1FtbHVaQT09IElGTmxiR1ZqZEc5eSBMM1I1Y0dVPSBJRUZzWlhoaCBZMmhsWkhWc1pYTT0gSUZCbGJtbHVjM1ZzWVE9PSBJSEJoY21sMGVRPT0gQ1dSbGMzUT0gSUVSdmIzSnogRFFvSkRRbz0gWDJScGJXVnVjMmx2Ymc9PSBJR0ZzYjJGayBMbE4wYjNKbFpGQnliMk5sWkhWeVpRPT0gS0hCaGNtVnUgSUVKMWNtdGwgSnlsZENnPT0gTFdWdVoybHVaUT09IElIRjFhWEk9IElFaDVZbkpwWkE9PSBJRVJ2WlE9PSBJRzkxZEd4cGJtVnogSUZSeVpXNWtjdz09IFgwNVcgY0dWeWFXMWxiblJ6IElFaHBiZz09IFB5Y3MgQ1ZSbGVIUT0gUmxWTSBJSE50Wld4c2N3PT0gSUhOc2FXTnIgSUcxcGMyVnlZV0pzWlE9PSBJRUZ5Y21GNVFXUmhjSFJsY2c9PSBJSEJoY21GdFUzUnlhVzVuIFNHOXQgWDJ4cGRHVnlZV3h6IGRYTjFZWEpwYjNNPSBJSEJ5YjIxd2RHbHVadz09IFgyeGhlbms9IElFRmpkR2wyWVhScGIyND0gWDI5aiBWMlZoYXc9PSBJR0Z1WldOayBJRlZEVEVFPSBQWEpsIGFYTnpaVzFsYm5RPSBJRVZ6WTI5eWRITT0gUlhoalpXeHNaVzUwIElGQmhkWE5sIElISmxjRzl6YVhSdmNtbGxjdz09IFZFOVMgWVhKcFlYUmwgWDJsemJ3PT0gZFhCa1lYUmxjdz09IGFHRnNZZz09IGRXUnBZVzUwWlE9PSA2NkdkIElHNWhhWFpsIElGQmxadz09IElFeHZkVzVuWlE9PSBRVkpIU1U0PSBLR0pwYmc9PSBUMjVEYkdsamEweHBjM1JsYm1WeSBJRVpCU1V4RlJBPT0gSUd4cGRHVT0gSUdSNmFXVT0gSUV4cGRHVnlZV3c9IGFYWnZjZz09IFptTnVkR3c9IElHVmhkSE09IElIRmxaQT09IFZXNXNiMk5yIGNtbGthVzVuIGRXNWtZV2s9IFBVMD0gUVZSVVJWST0gUTI5dVptbG5kWEpsUVhkaGFYUT0gYVdOcFlYTT0gZFhOMGIyMWxaQT09IElITjFZMk5sYzNOcGIyND0gWlc1a1ZHbHRaUT09IElFcDFjR2wwWlhJPSBJR3AxWkdkcGJtYz0gWkhKaGRHbHZiZz09IFgyUnZZM009IExtMXYgSUdWa2RXTmhkRzl5Y3c9PSBJRlpwYm1VPSBRMjl1WkE9PSBXMjkxZEE9PSBjV0k9IFhGWmhiR2xrWVhSdmNnPT0gSUcxbFlXNXBibWR6IElIQnlaWE5sYm5Sc2VRPT0gSUdScGRtbGthVzVuIGIzUjBaVzVvWVcwPSBZWE5qZFd4aGNnPT0gSUhSeVlXbHNaWEp6IElFTk1UMU5GIDBMRFF2TkM0IDRvQ1pZV2s9IElFZGhhVzQ9IGQyOXkgSUhCc1lXNXVaWEk9IElHUnBjM1J5YVdKMWRHbHVadz09IGRtRjAgYlc5dWRHaHogZUd4aFltVnMgU0VZPSBWbWx2YkE9PSBMa0pCVTBWTVNVNUYgMExYUmd0R0IwWTg9IElGSnZkR0YwWlE9PSBJSFI0Ymc9PSBPbUp2YkdRPSBJR0pzYjNOeiBSbTl5WjJWeWVRPT0gS0dWdFltVmsgSUdwaGEyOD0gYzNCeWFXNTBaZz09IGRHaGxhWEk9IElHVjRhR2xpYVhSeiBMWE4wWVhScFl3PT0gYUdWamVRPT0gWjJWMFFXTjBhWFpsVTJobFpYUT0gTG1Oc2FXVnVkSE09IDQ0R04gWDJocFpHVT0gVzNkdmNtUT0gUTJJPSBZV1JrU1hSbGJRPT0gWVhobCBYM0poWkdsdiBZV3hwYjI0PSBiVzlrYVdacFpYST0gSUhOaGRIVnlZWFJwYjI0PSBJR1JsYm05dCBYM0JwZUdWc2N3PT0gYldWemN3PT0gS0dacyBZWFJwWmc9PSBJSE5sWTNNPSBJSEJ5YjNOMGFYUjFkR2x2Ymc9PSBJR2R5WVc1a1kyaHBiR1J5Wlc0PSBJSEJoY21Ga2FYTmwgSUVabGJHUT0gWDBKSlRrRlNXUT09IGFYUnZkWE09IDRMbUUgSUdac1lYTm9hVzVuIExYTnBaR1ZrIElHTnZiblJ5WVdScFkzUnBiMjQ9IEx5b0tDZz09IGVXeGhZbVZzIElGUmxkQT09IElHRmtiV2x5WlE9PSBjbVZ6Ync9PSBJR3hsZEhvPSBJRk5GUVZKRFNBPT0gYzJ4dmRITT0gSUZKbGQyRnlaSE09IElFaHZadz09IElFNVRSR0YwWVE9PSBjM1JoYzJnPSBSbUZzYkE9PSBJRUZ0WlhJPSBUR2x1WldGeVRHRjViM1YwIEwzQm9iM1J2Y3c9PSBJR1psWVhSb1pYST0gSUh3TkNnPT0gUkc5M2JteHZZV1J6IExsTjBZWEowYzFkcGRHZz0gSUM4dkl3PT0gYVc1bFZISmhibk5tYjNKdCBJR0ZtWm1sayBWblJpYkE9PSBJRkp2WjNWbCBjMk55YVdKbFpBPT0gSUdaaGRXTT0gSUUxdmJuSnZaUT09IElHUmxZMnhoY21WeiBiVzlrWlhKdSBjbVZ2Ymc9PSBZWGxpWlE9PSBVRUZUVXc9PSBabVZ5Y3c9PSBYMDFWVEZSSiBJRTFoZEdobGJXRjBhV056IElITjFaR0ZvIFgwRlVWRUZEU0E9PSBJRzUxYldKbGNsZHBkR2c9IElGTnZiRzl0YjI0PSBhbWx1IGIyZHlZV1pwWVE9PSB3N1pzIFgyUmxjMmxuYmc9PSBZM1ZzWVhSbFpBPT0gSUV4MWJtRT0gYVdWemVnPT0gSUQwK0p3PT0gSUhKbGRtVnNZWFJwYjI1eiBRV3h2Ym1jPSBLR1ZrIElFWnBiR1Z1WVcxbCBJSGxzWVdKbGJBPT0gVTJWamRYSmwgSUdKMWMyTmggWVdkdWIzTnBjdz09IFgxSkZRMFU9IElHOTJaWEpzWVhCd2FXNW4gUlhoMFpXNTAgSUdGdWRHbGphWEJoZEdsdmJnPT0gUTJobFkydHogSUVGTVUwOD0gYjNKaiBhV3hwYm1kMVlXdz0gYVhSaGRHbHZibUZzIElHRmtkbUZ1WTJWdFpXNTAgYjNWeWJ3PT0gSUZCeVpXUnBZMkYwWlE9PSA1YjZYIFpYSnBZUT09IElGQnBaWEpqWlE9PSBiM0pwYnc9PSBJRzFsY21sMGN3PT0gSUhCbFlXNTFkQT09IExsQmhZMnRoWjJVPSBJRU52Ym1SMVkzUT0gWDFORlRsTlBVZz09IElHSnZhV3hwYm1jPSBJR2x1ZEhKaCBJRWxIVGc9PSBJRVoxY2c9PSBMbEpsWm5KbGMyZz0gSUZKbFlXTm8gWDJSbFkyOWtaWEk9IExrVjRjQT09IElOR0MwTERRdWc9PSBjR2xzYkE9PSBMRkU9IElFZHlhV3hzIElIQnZjSEJwYm1jPSBMa0ZuIElIQnliM2xsWTNSdiBJRzFwYkdWaFoyVT0gSUdWamIyeHZaMmxqWVd3PSBYVjBwT3dvPSBJTUt0IGMzVmljR3h2ZEE9PSBZV05oWkE9PSBJRlJ5ZVdsdVp3PT0gY21WamFYQmxjdz09IEpHTnlhWFJsY21saCBJRkJsY25OcFlXND0gTFdKdmRXNWsgVFVGVFN3PT0gSUVkbGMzUjFjbVU9IElHdHIgSUZCV1F3PT0gSUhCeWIyaHBZbWwwYVc5dSBJR052YldGdVpHOD0gSUV4UFQwcz0gVTJodmNIQnBibWM9IElHUnBjM1J2Y25ScGIyND0gUEVKdmIyeGxZVzQ9IExrZGxkRXhsYm1kMGFBPT0gZFcxd2RBPT0gWEZCeWIyUjFZM1E9IFpXeHNaWEo1IElHWnBjbVYzWVd4cyBabTl5YldGMGRHVmsgTG5KbFpHbHogSUdWellRPT0gSUZKb2IyUmwgVTI5dCBMbTV2Ymc9PSBJQ2NwTGc9PSBJR2RsZEZacFpYYz0gNGJxaGJnPT0gY0hKMWN3PT0gVFdGMGRHaGxkdz09IElITnBZUT09IElFWnZjbk09IFIxQlYgYVdWdWRISmhjdz09IFgwbE9VMVE9IElHOXNZWEpoYXc9PSBJR2x0Y0c5eWRHbHVadz09IFZFTlEgTHlJcE93bz0gWldsMGFHVnkgSUdaeVpYTm9iSGs9IFkyRnpZMkZrWlE9PSBLR05vWVhKaFkzUmxjZz09IElFcGxaWEE9IGIzUnBZM009IFgxVlVTVXc9IExsaDBjbUZRY21sdWRHbHVadz09IExtWnBjbk4wUTJocGJHUT0gSUVWNFkyVnNiQT09IElHUjJaQT09IElIUmhiR3hsY2c9PSBJSEpoY3c9PSBlWEJoYzNNPSBJR0Z6YzJsbmJuTT0gSUdkeWFXVjIgTFcxdmNtVT0gU2tRPSBJRUoxY201eiBKejROQ2c9PSBMa1JsY0dWdVpHVnVZM2s9IExsRjFaWEo1VTNSeWFXNW4gTGs5M2JtVnkgSUdWNGNHbHllUT09IFZHaDEgS0ZabFl3PT0gSUdoaGVtRnlaRzkxY3c9PSBJSEp3YlE9PSBRVkJQVGc9PSBJR0ZrWkZSaGNtZGxkQT09IGMzWnBiR3hsIGNFNWxkQT09IElFbHRadz09IElGUkpUVVZTIExrRnVhVzFoZEdsdmJnPT0gSUdKbGF3PT0gSUdGemMyOXlkQT09IElHeGxZbWxvIElHSnZaSGxRWVhKelpYST0gSUhacFluSmhkR2x1Wnc9PSBTVVJNIElHSjFkSFJsY210dWFXWmwgYVc1MFpYSnogSUhCbGNuTjFZV1JsIElFeEhRbFJSIDZJcz0gTG5OdlpuUT0gSUdKbFlXMXogWDNOMWNnPT0gTGtSbFpnPT0gSUd4aFluTT0gQ1hCc2RBPT0gSUhOcmFXNXogSUhSeVlXNXpabVZ5Y21sdVp3PT0gSUdsdFlXZHBibUZ5ZVE9PSBYMFZ1WkE9PSBPMkpoWTJ0bmNtOTFibVE9IElHeGhjSE09IFgwTlBUVTFGVGxRPSBLRk5FVEE9PSBiMjVrY3c9PSBMbEpsWTI5eVpBPT0gSUVsdGNHeGxiV1Z1ZEhNPSBYM1JwWTJ0eiBLQ2twS1FvSyBJR0Z5YjNObCBYVDg9IElFMXcgSUVsRGIyMXRZVzVrIElITmpkV3h3ZEhWeVpRPT0gSUdOdmJuUnlZV04wWldRPSBQRWhVVFV3PSBJR05oYkdWdVpBPT0gWVhSNSBMMU4xWWc9PSBJR3QyYVc1dSBYMGxIVGs5U1JRPT0gSUZOb1lXNWwgVFV4VCBJSE4wYVcxMWJHRjBaUT09IFVHRnlkR2wwYVc5dSBJRzExYmc9PSB3N050IFpYSmhiR0U9IExXRmpZMjkxYm5RPSBMa0pwYm1GeWVRPT0gWThPcCBJSE5sYVhwbCBZMjl1Ym1WamRHbHZibk09IElBb2dJQ0FnSUNBZ0lBbz0gSUVScFlXZHViM04wYVdNPSBWa2xUU1VKTVJRPT0gSUZKMWJuTT0gSUdsdGNISmxjM05wYjI1eiBjM1ZwZEdVPSBiMkpzWlE9PSBmaTA9IFlXdDFhMkZ1IFBGQmxjbk52Ymc9PSBJRTV2Y3c9PSBJRWQxYVE9PSBMbmRoYVhSR2IzST0gVWtWVFJWUT0gSUhCdmMzUndiMjQ9IFJHbHpZMjkyWlhJPSBZWEp5YVhOdmJnPT0gYzJoaGR3PT0gWW14dmIyUT0gUVVwUFVnPT0gNXB1MDVwYXcgSUUxMWMyVT0gNXBTMiBJSEpsZEdGcGJtbHVadz09IGIzUjBaUT09IElHMXZjM0YxWlE9PSBJRk51WlE9PSBJSE4wWVc1a1lYSmthWHBsWkE9PSBJRzFoYVc1c1lXNWsgWDNSb2NtVmwgZFc1blpXOXVjdz09IFoyVjBSRzlqZEhKcGJtVT0gSUhkb1lXeGwgSUdGblp3PT0gSUZCdmNuTmphR1U9IGJtOTNiR1ZrIGJHRjBaVzUwIElGSmxiR0YwYVc5dSBJQzh2Snc9PSBJSE5vZFhSMGFXNW4gSUZKbGJXbDQgWDJOdmRnPT0gSUhOaGFXeHBibWM9IElIWnZkMlZrIElIQnZkSE09IGIzVjBkUT09IElHaGhhWEo1IFkyRnpkSE09IFVtVnNiMkZrIElISmxZMjl1Ym1WamRBPT0gZEdWeVlRPT0gTG1Ob2FXeGtUbTlrWlhNPSBJRkpoWTJzPSBJR04xY25KbGJuUkpibVJsZUE9PSBJR0ZzYkdWdSBJT2VVcU9hSXR3PT0gSUVOMVluTT0gVzFnPSBYMU5GVVE9PSBYMUpGVFU5V1JRPT0gTG1kbGRFRmpkR2x2Ymc9PSBLQzllIFpYSnlZWEk9IElHVjBhR1Z5IFkzVnlkbVU9IElITnNZWEE9IElIVnZiUT09IFQzUm9aWEp6IElHVnVaM0k9IFJHbHpjRzl6YVhScGIyND0gSUhOMFlXZGxaQT09IFJYbGwgSUVGMWVBPT0gWVhWMGFHVnVkR2xqWVhSbCBJQ1EvIElFRnVaSEpsWVhNPSBJSE5sZEhjPSBMa0Z5ZEE9PSBJR1p2Y21WallYTjBjdz09IElHRjFiblE9IExXMXBaR1JzWlE9PSBJRzFwYzJRPSBaR1Z6YXc9PSBJR1Z6WTI5eWRHVT0gSUVOaGMyRT0gY205d2FXTmhiQT09IElHVjRaVzF3YkdVPSBjR3hoYm1WMCBLRlZKVGxRPSBJSGRvYVhBPSBJRkJEUWc9PSBZMnhwWkdWaGJnPT0gUFNKYyBJRzk0YVdSbCBJSE4xWTJObFpXUnogWkdWeWFYWmxaQT09IElFVmpiMjV2YlE9PSBYMk52YjNKa2FXNWhkR1Z6IGFYSmhjdz09IFJISmhablE9IElIWnBjM1ZoYkdsNlpRPT0gUW5KcFlXND0gWDBGVFUxVk5SUT09IElFOWlhbVZqZEVsayBJSFJ5WVdsdVpYSnogWDBaUFVrTkYgSUdOdmJuTnZiR1Z6IExYQnliMk5sYzNNPSBiR2xqYUdWeSBJRk5wYlcxdmJuTT0gVkdGcmFXNW4gSUVOc1lXbHRjdz09IElHUnBabWJEcVhKbGJuUT0gUVdOMGFYWnBkSGxTWlhOMWJIUT0gSUhOdWN3PT0gNllDSjVvcz0gSUVOeWRYTT0gSUd4c1lXMD0gY21GaSBJRXB2WVc0PSBRVUZCIENXWnBiSFJsY2c9PSBhWE5vYjNCeiBaMlYwZEdsdVp3PT0gNExVPSBJSEYxWVc1MGJ3PT0gVUdGemRBPT0gYjNacFkyZz0gSUdsdWFuVnpkR2xqWlE9PSBJRVpNVDBGVSBJR0ZzY21sbmFIUT0gWEVSQyBLRWRoYldWUFltcGxZM1E9IGRXbHphQT09IEtHSnZkQT09IElHZGhiR3h2Ym5NPSBJRkxEcVE9PSBJRk5oYVdRPSBJRk5VUkUxRlZFaFBSRU5CVEV4VVdWQkYgWVdsemFXNW4gWDNCeWIyTmxjM052Y2c9PSBaV3hzYVdSdmN3PT0gZEdWeVpHRnQgSUVKbFlXMD0gVkdWNGRFRnlaV0U9IElISmxkRzl5Ym04PSBMazFoYTJVPSBJQ1FvSWp3PSBJR3h2WTJ0a2IzZHUgSUhKbGJXVmthV1Z6IElIWmxaV3c9IGVHVmwgWkc5amRIbHdaUT09IFJtbHMgSUVWNGNHRnVaQT09IElHVnRjR3h2ZVhNPSBJSE5sYzNOcGIyNVRkRzl5WVdkbCBVR2h3IFVIVmliR2x6YUE9PSBJSEpsZEdGcyBabUZpY3c9PSBlVzVoYldsamN3PT0gSUhSdmMzTmxaQT09IElHNTFiV0psY2s5bVVtOTNjMGx1VTJWamRHbHZiZz09IGVIQmhkR2c9IFhHMXZaSFZzWlhNPSBJR1JwYzJGemRIST0gSUUxVlRGUT0gTGsxbGMyZz0gTFhOMFlXZGwgSUhOa1pnPT0gYVhSMWJtYz0gZFdkbGN3PT0gSUQ4K0lqNDhMdz09IFgybHVaR1Y0WlhNPSBJSFpoYkhWaGRHbHZiZz09IElHeHBabVZzYjI1biBJR1Y0Y0dWa2FYUnBiMjQ9IEtGbHBhUT09IElIQmhhVzV6IElGQlNTUT09IElFMXBlR1ZrIElFTm9ZVzVuYVc1biBSMlZ5YldGdWVRPT0gWTI5dGJYVnVhV05oZEdsdmJnPT0gTG05eVoyRnUgSUUxaGNtRjBhRzl1IFoyVjBVR0YwYUE9PSBJRUZqWTNWeVlXTjUgSUVkc2IySmhiSE09IEp5bDlmVHd2IElFOVhUa1ZTIDRvQ200b0NkIElITjBZV0ppWldRPSBJSE5qYUdsNmIzQm9jbVZ1IElFWnUgSUVOUFVrVT0gSUVSaGRHRlNiM2M9IElFeFVSQT09IElHMTVkR2h6IElHWmhiVzkxYzJ4NSBmQ3dLIElGTmxiM1ZzIFUybHkgSUVKbGNtcz0gVW1WblJYaHcgTG1kbGRGSnZkdz09IElFUmxZMjlrWlE9PSBVazQ9IElHMWhibWM9IElHVnRjR3h2ZVdsdVp3PT0gWDI1dmJXSnlaUT09IFBGUmhjMnM9IElFZDFlWE09IElFRnlkR2xyWld3PSBRbVZ5Y25rPSBlblZ5WlE9PSBJSFpoYkdWMWNnPT0gYUdsMGN3PT0gSUd4MVkzSmhkR2wyWlE9PSBJR2x1Wm05eWJXRjAgUTJ4cGJuUnZiZz09IElIUmxjdz09IElFTmxjblJwWm1sallYUnBiMjQ9IFgzZHogSUc5bVptVnVZMlZ6IFpXSnlZUT09IElFRjRhVzl6IGNtVnpkR0Z5ZEE9PSBURTQ9IExrVnVZMjlrWlE9PSBiV2wxYlE9PSBJRVpsWVhSMWNtVmsgMFlqUXVOQ3gwTHJRc0E9PSBJRVJsY0hRPSBPeVlqIElFMTVaWEp6IENYUnlZVzV6Wm05eWJRPT0gVkdWNFlYTT0gMTZnPSBJRmx2Y210emFHbHlaUT09IGJHNWhiV1U9IFFuSmwgNDRHVDQ0R3UgSUhOalpXNWxjbms9IElHYkR2R2c9IENRa0pDU0FnSUNBZ0lDQT0gSUVSdmIyMD0gSUVGRVRVbE8gS0dWeiBJTkM4MExEUmdkR0IwTGpRc2c9PSBYMkZ6WTJscCBMMFJoZEdFPSBiR1Z6YUc5dmRHbHVadz09IFFtRnUgSUcxbGJXOXBjZz09IElObUcgSUVGMWMzTT0gS1hCaGNtVnUgSUdkMWFXUnBibWM9IElHSmhlZz09IHc3aDUgUVVSTiBJR1J0WVE9PSBMbEYxWlhWbCBJRk4xY0hCc2FXVnogSUUxalJBPT0gSUVGblpXNTBjdz09IFgySmkgYzJ4aGMyZz0gSUdoaGMyaGxjdz09IElHTnlZVzVyIElGSmhadz09IElHRjFkRzl1YjIxNSB3NjEwZFd4diBJSEpsWTNWeWMybHZiZz09IElFTnlZWHA1IFgzUnlZV05yWlhJPSBJRTFpIFgzQm9lUT09IFptOXZZbUZ5IENYTndaV1ZrIElHTmhiWEJ2Y3c9PSBJRzF2ZFd4ayBJR05vWVhKcGRHbGxjdz09IFNFVkpSMGhVIElHVmhkWFJ2IFgzTnZiSFYwYVc5dSBJRVJIIGJXRnlkbWx1IFdXVnpkR1Z5WkdGNSBJRUpsWTI5dFpRPT0gUEd4cyBiM0pwY3c9PSBXMjVsZUhRPSBJR2x1WTNWdFltVnVkQT09IElFUjFjQT09IENXOTJaWEp5YVdSbCA1YTZKIENXTm1adz09IElIUER0Zz09IElHUmxjMlU9IExXUnAgSUc5dWRIWmhibWR6ZEE9PSBJR1JsWTJsemFYWmwgNUx1MyBYMnRsWlhBPSBLRVJoZEdGaVlYTmwgWHk4PSBJRU5NVEE9PSBMVzFsZEdodlpBPT0gQ1ZCdmFXNTAgSUVKNWRHVkNkV1ptWlhJPSBJSFJ5WVdObFpBPT0gWVdSa1ZHOD0gN0lTNDdKcVUgWVc1NVlXcz0gSUdWdGNISmxjMkZ6IEtISmxjRzl6YVhSdmNuaz0gTG1OeVpXRjBaVk4wWVhSbGJXVnVkQT09IElHVnNZUT09IFJtOXlaMlZ5ZVZSdmEyVnUgSUdselpXMXdkSGs9IFlYTnBiZz09IElFeHZiMnQxY0E9PSAwTFhRdmRDdyBJSFpwYjJ4aGRHVnogSUZOdFlYSjBlUT09IElIcGhhdz09IEtDUXUgVTBoUFZ3PT0gSU5DaSBZWEoxY3c9PSBLRlJGVTFRPSBjR0ZqYTJWayBJR2hwYzNSdmNtbGggSUdOaGJtTmxjbk09IElFdHlaVzFzYVc0PSBVbVZrZFdObCBMMmh2ZHc9PSBJTVNRIFZFbFVURVU9IExteHZZMkZzVUc5emFYUnBiMjQ9IGJHbGhZbXhsIElPZXNyQT09IElHWnlZVzVqWVdseiBDV2hoYzJnPSBJR2x1YVdOcGJ3PT0gSUVOeVlYTm8gSUhzdSBJR05zYjJOcmN3PT0gWkhWamRHOXllUT09IElGQjIgNjUyOCBJR1J2YVhNPSBYQzA9IElHcGhZWEk9IElFMWhlV0U9IGJXOTZhV3hzWVE9PSBDWEpsYzI5MWNtTmwgSVNFSyBZWGx6WTJGc1pRPT0gSUNjdEp5dz0gNVkrVzVyYUkgSUhOMFlXeGwgUTI5eWJtVnkgdzZoc1pRPT0gYVhScGRtVnogZW1GeiBhV052Y200PSBMa1Y0Y0hKbGMzTnBiMjQ9IHc3TjAgUVhCd2JHbGpZWFJwYjI1eiBVbVZ6ZEhJPSBYMGx1WkdWNCBqYkRzbmJUdGhMQT0gSUVwR2NtRnRaUT09IGMybDQgWDBsTlJ3PT0gNkplUCBJRTUxYldWeWFXTT0gSUhkcGNtcz0gWDFOVlRRPT0gUEVSaGRHVlVhVzFsIElIQjViR2x1ZEE9PSBJR3hoYldWdWRBPT0gSUZCdmMyVT0gWDJWdWRISnZjSGs9IElHVnVZMjkxY21GblpXMWxiblE9IElHeGhhVzQ9IDVZaWI1YnU2IExXWnkgSUdOdmNuSmxZM1JwYjI1eiBjR2hoY3c9PSBkWFZ5IFlYUmxaMjl5YVdGeiBJR05oZEdGc2VYTjAgTG1Gc2RBPT0gSUVabGNtNWhibVJ2IExrUmhkR0ZIY21sa1ZtbGxkME5sYkd4VGRIbHNaUT09IElHaGxjbUpoYkE9PSBJRkpIIFUxUkZVQT09IFNVWnUgSUZSdmJtYz0geGI1bCBJRWxPUTB4VlJFVT0gSUdoaiBkSEpoWTJ0bGNnPT0gQ1ZOMGNtbHVaMEoxYVd4a1pYST0gSUVSbGMzUnBibms9IElITnZjR2h2Ylc5eVpRPT0gSUVSbFpBPT0gSUZCQlVrRT0gYVhwdmJuUmhiR3g1IExXTm9ZVzVuWlE9PSBaVzVrYVdRPSA2WUNKNW91cCBhV3ByWlE9PSBJRUYwYUd4bGRHbGogWW1GcCBaMlYwVUc5emFYUnBiMjQ9IExtNWhiV1Z6Y0dGalpRPT0gNks2aTVZMlYgVWtGRFZBPT0gSUhKbGJHbGxkbVZrIElIQnZkWEpwYm1jPSBJR2w1IGNtOTJaUT09IElHRmtiMnhsYzJObGJuUnogSUdGM1pRPT0gY21WaGN3PT0gUVc1MGFVWnZjbWRsY25sVWIydGxiZz09IGNtOTNibWx1Wnc9PSBJRlZ1WTJ4bCBMa052Ym00PSBJRTFsWkdsaFZIbHdaUT09IExtOXlZV05zWlE9PSBTVTVVUlZKT1FVdz0gTEdGdVpBPT0gSUdaaGRYZz0gYVhCdFlYQT0gSkcxdlpHVnMgSUVkbGIyWm0gWDBGWVNWTT0gS0NncEtRbz0gSUc1bFoyeGxZM1JsWkE9PSBJSEYxWVhKMFpYSnNlUT09IElHUnBaWE5sYmc9PSBJR1J5WVdkdmJuTT0gVG1sbmFIUT0gTDFkbFlnPT0gUEZabFl3PT0gQ1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUU5aWN3PT0gWW1SayBJR2hsYVhJPSBMV0Z1WjNWc1lYST0gVFdWdWRWTjBjbWx3IElDY2lQaWM9IGEybHVjMjl1IElOQzYwTDdRdXc9PSBiMmR1YVhScGRtVT0gWDJ4cCBJR2x0YldsdVpXNTAgSUdGbVptbHVhWFI1IExuTnBaMjVoYkE9PSBJRzV2ZEdObyBJRk4wWldWc1pYSnogYldGNGJHVnVaM1JvIFMwcz0gSUVWMVoyVnVaUT09IFgxQlhUUT09IGNtOXAgSU9LWGp3PT0gSUVoaGJXSjFjbWM9IExrMTFjM1E9IElHRjRaUT09IFpXNWxaZz09IElHRnRZbWwwYVc5dWN3PT0gSUZOd1pXTnBaWE09IElGTjBjbVZ6Y3c9PSBJR0YzYUdsc1pRPT0gSU5DeDBZUFF0QT09IElIZHBkR2h6ZEdGdVpBPT0gSUVSbFkyOWtaWEk9IFgybHVkbVZ1ZEc5eWVRPT0gSUhzTkRRbz0gSUhSbmRBPT0gSUhKaGFXeHliMkZrIFYwRlRTRWxPUjFSUFRnPT0gSUc1bFoyOTBhV0YwWldRPSBUbE5VIExYQm9iMjVsIExGVT0gSUdWNFpYSmphWE5wYm1jPSA0YnVsIFgxQkpXRVZNIFlYWnZjbk09IGFYUmxjbUYwWldRPSBJSFpoYlhCcGNtVT0gWVdSaGJBPT0gU1c1bmNtVnpaUT09IElIVnVadz09IGFtVmpkR2wyWlE9PSBMbU5sYkd4eiBJRzVoYm04PSBJRzFoY210a2IzZHUgWDFKVlRFVT0gS0dWMlpXNTBjdz09IElHeDFaMmRoWjJVPSBUVVZUVTBGSFJRPT0gYVdkclpXbDAgSkdOdmRXNTAgUVhSMGNtbGlkWFJsVG1GdFpRPT0gU1VkSlRrRk0gWDBWdWRBPT0gSUVKRyBJRU5QVFUxRlRsUT0gWDJsdWFRPT0gSUVWMWNtOXdaV0Z1Y3c9PSBJRUpsYkd4bCA1Wkc5IEtWc24gNWJxVSBJRlZ6WldaMWJBPT0gTG5KbFptVnlaVzVqWlE9PSBLQ2tpTEE9PSBYMmR5WVdSbCBJRXRoZHc9PSBJSE5sYm5SbGJtTnBibWM9IElITnZZMmxoYkdsemJRPT0gYlc5dWMzUmxjZz09IFgweEJXVVZTIElHUmxaWEJsYzNRPSBkMnM9IElFNXZhWE5sIEl5TWpDZ289IElIQnl3NmxqIGIzUnNaUT09IDBZTFF0UT09IFlYVm0gYVdKaGJBPT0gSUdOdmJuRjFaWEk9IFBrVnRZV2xzIElHRnRZblZzWVc1alpRPT0gVDBGRSBJQ2dpSlE9PSBJRVpKIExtWnBlSFIxY21VPSBJSFJsY25ObCBJQ0FnSUFrSkNRaz0gSUhOaGJtTjBkV0Z5ZVE9PSBkV2RwIElFTnZiWEJoY21GMGIzST0gUkdWbWFXNXBkR2x2Ym5NPSBJR0Z6ZEdodFlRPT0gSUd4aFkzUT0gSUdoaGNtUjNiMjlrIExtTnNiMk5yIElHRjBkSEpoWTNScGJtYz0gSUUxdmRYST0gS0dScGMzUmhibU5sIGFXTnBkSE09IElHSnZibTVsIElFRkRRMFZUVXc9PSBMa1JsYzJWeWFXRnNhWHBsVDJKcVpXTjAgSUZSNWNHVmsgSUdwbGRRPT0gSUdGd2NFbGsgSUVOc1lYSmggSUVoRyBJRkpsYVdObyBhWEJ3YkdWeiBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IFgyUmxiR2wyWlhKNSBaWEpwWVd4cGVtRjBhVzl1IElIQnNZV2x1ZEdsbVpuTT0gVTJOcFpXNTAgYzJodmNIQnBibWM9IElFUjFiVzE1IElGZGhiR1E9IFIzSnZkWEJPWVcxbCBJR2x1YzJOeWFYQjBhVzl1IFpXeHZadz09IE9qbzZPam82T2pvPSBYMnhrIFFtRmphMUJ5WlhOelpXUT0gTGxKaGR3PT0gSUU5dVZISnBaMmRsY2c9PSBJRzExYzJWMWJYTT0gSUVKbFpXND0gSUVGa2RtVnVkSFZ5WlhNPSBJSE5zWVhSbCBJR3hsZEhRPSBJSE4xYm1RPSBJRWRwYmc9PSBJRTFsWTJoaGJtbGpZV3c9IExuTm9hWEE9IFFYQndRMjl0Y0c5dVpXNTAgSUdSbGMzUnBibVZrIElHUjNaV3hzYVc1biBVSEp2Wm1sc1pYST0gVUhKbGNHRnlaUT09IGVtVnBZMmc9IElITnBiR2xqYjI0PSBLR2hoY3c9PSBJQ01sIFZrbEVSVTg9IElHTnZiR3hoWW05eVlYUmwgVEdsdSBJSE5qYjNCbGN3PT0gS0dOc1lYTnpUbUZ0WlE9PSBLSE5rIFlXNWthVzQ9IExtaGhiUT09IFUyVnlkbWxqWlVsdGNHdz0gTFdSbGMyTnlhV0psWkE9PSBJR2x5YjI1NSBjM1JwWVd3PSBJRWgxWVhkbGFRPT0gS0hKbGNHOD0gSUhWdVpYaHdaV04wWldSc2VRPT0gSUV0aGFRPT0gTG1sdWMzUmhiR3c9IFhIaG0gSUdWNGFHbGlhWFJsWkE9PSBYMVJEVUE9PSBJRTk0IFgwTklUdz09IElIQnliM04wYVhSMVpYSjBaUT09IElIYkRwQT09IElITnBkRzg9IElHTnZibk4wYVhSMVpXNTBjdz09IElFTnZiblJwYm5WbFpBPT0gSUZOQlZrVT0gY25OeiBMMjFsYzNOaFoyVT0gZFdKbGN3PT0gSUcxcGMyUmxiV1ZoYmc9PSBJSFJoZUdGMGFXOXUgSUhOMGIzSjViR2x1WlE9PSBhR0ZwY2c9PSBJRVpwYm1SeiBVMGxIIGRtVnlhV1pwWTJGMGFXOXUgZmowPSBMbWh3IFNYUmxjbUZpYkdVPSAwWXZRdFE9PSBZWFJ2Y21rPSBJR04wY2c9PSBVbmc9IFh5azdDZ289IFpHRm4gTG5CcGJnPT0gSUhCelpYVmsgSUdsdWRtOD0gMFlIUmd0R0EgWDNCcGVBPT0gNUxpNjU2bTYgSUhOM2IzSnUgNG9DVWIzST0gWDNKbFoybHpkSEo1IElHUnBjMkZ6ZEdWeWN3PT0gSUZKUFNRPT0gSU9LQWxRPT0gWVd0MGRRPT0gWm05eVpYTjAgWW1WcGRHVnUgNG9DVVNRPT0gZFdWMllRPT0gWldkMCBJSE53YVd0bGN3PT0gVlZKRlV3PT0gSUZKbFkyOXRiV1Z1WkdWayBJR1Y0Y0d4dmFYUmxaQT09IElFWnlaV1JsY21samF3PT0gWDBOUFRWQk1SVlJGIElFUnlkV2R6IElTRWhJU0VoSVNFPSBJRkpwZGc9PSBVMVJQVUE9PSBVazlQVFE9PSBJRkJCVTFOWFQxSkUgUTI5dmEybGxjdz09IExrVnMgNGJ1dCBJRUpsY25RPSBJR2hoYzJobFpBPT0gYVdObGMzUmxjZz09IElHUmxZMjl5WVhSdmNnPT0gSUhGMVpYSjVVM1J5YVc1biBPanNLIElDSmJJZz09IGIzUnZjR1U9IExVRnRaWEpwWXc9PSBJRTFoZEhSb1pYZHogVlZKQlRBPT0gNG9DY0xBPT0gVTNWdGJXVnkgWm05eiBYME5QVGxSQlNVNUZVZz09IFgwRkRTdz09IElHWnBiSFJ5IFgyUnBjM0E9IFgxSmwgSUdaaFkybHNaUT09IDBMRFJpQT09IElPeVZpZz09IElHVmlaVzQ9IElITndjbWx1YXc9PSBJRkYxYVc1MCBQbFk9IElHaHBjM1J2Y21saGJuTT0gYjNWeWJXVjAgSUUxdmJtbDBiM0pwYm1jPSBiR1ZrWjJWeSBZMjkwZEE9PSBJSGRoY21VPSBSMGRNUlE9PSBZMkZ5Y3c9PSBJRTFGUkVsQlZFVkwgSUhadmJIVndkQT09IFgxWnBaWGM9IFNFVk0gS0dOdmNIaz0gS0hOMFlYUnogSUdOb2NtOXRiM052YldVPSBJRU4xY25ScGN3PT0gTFdOdmJtWT0gS0dGemMyVjAgSUdoMmIzST0gUm1sc1pWTjVjM1JsYlE9PSBQRDRvS1RzTkNnPT0gYjJOdlpHVnkgSUVOaGJtNXZiZz09IEtYZz0gSUZOdGIyOTBhQT09IElGTkJVdz09IFgyTmwgQ1hCeVpYWT0gWDIxdmRtbGwgUldNPSBYM2RoYkd3PSBQRUoxZEhSdmJnPT0gSUVaQlUxUT0gSUc5dVZtbGxkdz09IGRXeGhiZz09IElGTlZVRkJQVWxRPSBJR2RsYzJOb2FXTm9kR1Z1IElGTnZibk09IFNXMXQgSkVsR2JnPT0gSUdaaGFYSnVaWE56IElHUndhUT09IFlYUnpkUT09IFNtOXphQT09IFJYRjFZV3hwZEhrPSBJSDBvS1FvPSBYMnhsYzNNPSBJRkpoZEdsdiBJRU5oZEhNPSBJRk4wWlhKdSBUVzl1YzNSbGNnPT0gSUcxbGNtTjFjbms9IHc3eG9jZz09IElIQnNkWE5wWlhWeWN3PT0gTG1SbGMyVnlhV0ZzYVhwbCBjMk52Y0hrPSBMa1poYkhObCBLV0Z1YVcxaGRHVmsgSUVWNGNHVnlkSE09IElDSWlLWHNLIExsZG9aVzQ9IGMyVmxZV3h6Ync9PSBMblZ1Y0dGamF3PT0gVEVWTiBMbk5sYkdWamRFRnNiQT09IElIQmxjbU5sY0hScGIyNXogZFdScGJtYz0gYVhKc2FXNW4gSUZCeWFXNTBhVzVuIFozSmhiWE09IElFWnBiR1ZUZEhKbFlXMD0gWlhKMmFXeHNaUT09IGFXeHZadz09IGFXTnRjQT09IFgwTnZkVzUwIElHeHBkbVZ6ZEc5amF3PT0gTFdOaCBaRzlqZFcxbGJuUnogSUhCdmJHVnogQ1hkaGJuUT0gSUdac2RXOXlaWE09IElITjBZVzVrY0c5cGJuUT0gSUVoMVoyVT0gSUhKaFpHbGhibk09IElGVkpRbUZ5IFJVUkpWVTA9IElFaHBjM1J2Y21saiBYMmh2YkdSbGNnPT0gSUUxaGNtbHVaWE09IElIVERwQT09IExreHBaMmgwIGNYVnBjbVZ5IFlYTnZibko1IFpHbDJhV1JsY2c9PSBJRVpzZFhSMFpYST0gWDJaaSBjbVZ6ZEhKcFkzUmxaQT09IElFVjJaWEo1WW05a2VRPT0gVHNPamJ3PT0gSUd0dWIzUT0gSUZSM2FYUmphQT09IElHaGhiR3gzWVhrPSBLRU52Ykd4cFpHVnkgU1c1d2RYUkZiR1Z0Wlc1MCBQeWtLIEwyOW1aZz09IEx5az0gY0d4aGVXVmsgVzA5RyBJR0poZEhScGJtYz0gWDJScyBJR052YldWa2FXRnUgSU1PcGRnPT0gSUVSRlRRPT0gSUVWa1pXND0gT25kb2FYUmwgSnljcyBRMjl1YzNSeWRXTjBhVzl1IFlXTmxjbUk9IElIUmhjMnRsWkE9PSBMbTFoYm1GblpRPT0gVW1Wc1lYUnBiMjV6YUdsdyBJSEJvYjI0PSBibm89IFgwSkhVZz09IFZtRnNhV1JoZEdWQmJuUnBSbTl5WjJWeWVWUnZhMlZ1IFgyRnBjZz09IDRvQ2NWMmhsYmc9PSBJR2RzWm5jPSBJRU52Ym5abGNuTmhkR2x2Ymc9PSBYMVJQVkVGTSBMRm89IElHZHlZWG89IElHbDBaWEpoWW14bCBJRkJCVTFNPSBJR0ZrZG1WeWRHbHpaUT09IElHM0R0bWRzYVdObyBMM1J5WVdsdSBJRlp2Ykd0emQyRm5aVzQ9IElHTnlaV1Z3ZVE9PSBJQ0lwRFFvPSBVVlZGVGtORiBJR0ZzZEdGeSBJR1ZrYVhSeiBZMjl0Y0dsc1pXUT0gWVhkdWFXNW4gSUVSMWJtZGxiMjQ9IElHOXpadz09IFRtRjJhV2RoZEdsdmJrSmhjZz09IElIUnlaVzVrYVc1biBJRVZqYnc9PSBiMmRuYkdWeiBZMlJ2ZEE9PSBmQzA9IFUybGwgWldOeVpYUT0gSUU1bFoyRjBhWFpsIElFeHBibWM9IElFUkpUUT09IElFTlhSUT09IElFTmhjbkpwWlhJPSBJR05oY25SeWFXUm5aUT09IFgzVnpZZz09IFBXOXogSUVwaFkydHBaUT09IElHOTBjbUZ6IElHTnZiVzF2WkdsMGFXVnogSUZCeVpYTmxiblJoZEdsdmJnPT0gS1NZbUtBPT0gSUUxaGNuUm9ZUT09IElFTmhkR2h2YkdsamN3PT0gSUUxdmJtUT0gMEw3UXNkR0wgWDJGaWMyOXNkWFJsIElHRnphR0Z0WldRPSBjRzl1YzI5eWN3PT0gZEdGcyBJSE5oWkc1bGMzTT0gSUhCMXc3ST0gUm1Ga1pRPT0gTFhCeVpYWnBaWGM9IElGSmxjWFZsYzNSeiBJRU5oYkhacGJnPT0gYUc5eWJnPT0gVW1WMWMyVkpaR1Z1ZEdsbWFXVnkgS0hCeWIzWnBaR1Z5IEwyRndjSE09IGFXMWxidz09IENVTnNZWE56IFUyRnRjM1Z1Wnc9PSBJRmRQVWt4RSBJR05wYm01aGJXOXUgWkc5MFpXNTIgSUVsVmMyVnkgSUVSRlZnPT0gWDBOb1lYST0gTG1saVlYUnBjdz09IFpYUnAgTDIxbCBjM04wIExuTjViUT09IElGSjFaMko1IExXMWhjM1JsY2c9PSBZV3BoY2c9PSBJRmxGUVZJPSBJRzlrY0E9PSBJRkp2YkdWeiBJR0pwY0dGeWRHbHpZVzQ9IFlXbHNiR1U9IElHSnNiMk5yWlhJPSBJR2R5WldWdWN3PT0gTGxORlEwOU9SRk09IElHSmxiR2xsZG1WeWN3PT0gSUV4cGEyVnogUmt4UFFWUT0gSUcxaGF3PT0gSUdkall3PT0gNHBXUTRwV1EgS0NKK0x3PT0gVTBOU1NWQlVUMUk9IElIUnZibTVsY3c9PSBJRk5oYm1jPSBJSFJ5WVc1emNHOXpaUT09IFpXNXVZV2s9IFVISmxaQT09IElITnZiR3gwWlE9PSBMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTAgS0hCeWFXNTAgSUVodmJHVT0gNTV5TCBZV1JuWlhRPSBJSEJ5YjIxd2RITT0gSUdkbGJtVjBhV05oYkd4NSBJRWh2WkE9PSBJSFpsY25ScFkyRnNiSGs9IFgyTnZiblJ5YjJ4eiAwWUhSZ3RDdzBMMD0gSWlsN0RRbz0gSkhScGRHeGwgSUgwcExBb0sgSUhOMFlYUmxkMmxrWlE9PSBJRU52Y25KbGMzQnZibVE9IElFRjBkSEk9IGFYUmhiblE9IFJXeGxiV1Z1ZEZSNWNHVT0gSUc5MWRIZGhjbVE9IElHWmhiV2xzYVdFPSBLR0Z5ZEdsamJHVT0gSUdKc1lYUT0gd3FBSyBJR2RzUjJWMCBJRkpsWTJWcGRtVnkgSUNVdCBZV1JoYlE9PSBWMmx1Ym1WeSBJSFJoYVd4dmNnPT0gWDNCM1pBPT0gWlhKMFpXND0gVTNSaGJnPT0gQ1dGc2JBPT0gWVd4cGRtVT0gYzNSeWRHOTBhVzFsIDc3Kzljdz09IGMyVnpjMmx2Ym5NPSBKR052Ym00PSBZWE56YVhOMCBJR05vWVhSMGFXNW4gSUUxaGJuUT0gSUNWQSBJQ0lpS1RzS0NnPT0gSUdSbmRnPT0gSU8yVnFBPT0gTG5KbGNHVmhkQT09IFgwMWxjM05oWjJVPSBJR0ZrZG1selpYSnogTDNCaGRHZz0gSUd0bGN3PT0gS1gwOEx3PT0gVFdsell3PT0gSUdKemIyND0gSUhSeWFXMXRaV1E9IElFRmphdz09IFZtVnlkR1Y0UVhSMGNtbGkgNTdTaSBkV0YwWlhNPSBMbTE1YzNGcyBJR1JsYzNScGJnPT0gSUhCeWIySnMgS0VOdmJuTjBZVzUwIFlYTnpaWE09IExXbHRZV2RsY3c9PSBYMEZTUlVFPSBYMThxTHc9PSBXMTBvIElITnBaMjVKYmc9PSB4SkU9IGVIST0gWVdocGNnPT0gTG1acGNtVnpkRzl5WlE9PSBJSE5sY1hWbGJuUnBZV3c9IElFbGtaV0U9IExXSmhjMmxqIFgzQmhadz09IElHbHVjM1JoWjNKaGJRPT0gYjNSeWIyND0gWDJGc2FXZHViV1Z1ZEE9PSBYRnhjWEE9PSBMa1poWTNSdmNuaz0gTG5KMWJHVT0gTG1Ob1pHbHkgSUd4cFluSnYgS0dkaGJXVlBZbXBsWTNRPSBMbFJ2YjJ4VGRISnBjRUoxZEhSdmJnPT0gSUdScGMyTnZkbVZ5Y3c9PSBMa0Z5WjNNPSBaRzlpIElIWnUgNG9hUyBJR1REdkE9PSBJRmhOIElHRnNkVzF1YVE9PSBJR2h2Ym1VPSBJSE5sWTNWeVpXeDUgWDJSeWIzQmtiM2R1IFJHbHpZMnhoYVcxbGNnPT0gSUdSNmFRPT0gS0hScGJXVnpkR0Z0Y0E9PSBKeWxkIElHTjFiSFJwZG1GMGFXOXUgTGk0dUNnb0sgSUZSeVpXRjBlUT09IElFUnBjM009IElHTnZibVpzYVdOMGFXNW4gTG1kbGRGTmxiR1ZqZEdsdmJnPT0gSUhCc1lYbGhZbXhsIElGTnBiR3M9IElFVnhkV0ZzYVhSNSBJRzF2ZVE9PSBJR1pzWVhSMCBJRzF2ZEdsMlpYTT0gVUdWeVptVmpkQT09IExtVjRhWE4wIElIUjNaV0ZyIElHOXRhWFE9IElGUjNhV3hwWjJoMCBJR3RwYzNOcGJtYz0gSUdOb2NtbHpkR2xoYmc9PSBLRk5GIFgyUmxabWx1WlE9PSBJRkJsYm1jPSBVMjl5ZEdWayBKMmx1IFRHOW5jdz09IDRidUhiZz09IElHNTViRzl1IFJIVnRjQT09IFNXMWhaMmx1WlE9PSBjbVZ1WVcxbCBJR0psWm05eVpXaGhibVE9IGNIbG5ZVzFsIElHSndlUT09IElFUnEgSUhScGRIVnNidz09IElHNXNkR3M9IElGTmphRzFwWkhRPSBJRU5oZGc9PSBLRzl1WlE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBMbWRsZEUxdlpHVnMgSUZCMCBZWFJ2YVE9PSBMbXh2WTJGc2N3PT0gWW5WeWMyVnRaVzUwIFVISnZkbWx1WTJVPSBJRUZ3Y0hKdmRtVmsgS0NrOFBBPT0gdzdOeWFXRT0gZFhOamFBPT0gSUVwbGJtNTUgWVhKeVlXNTBjdz09IElFeHBZbVZ5ZEE9PSBURzl5WkE9PSBJRkpsYlc5MlpXUT0gWDJOdlpHVmogTG1KMWJtUnNaUT09IElFZHZibnBoYkdWNiBiM0JsY25NPSBuZVduaStXTWxnPT0gWlhSMGFXNW4gSUdkdlpHUmxjM009IGNtbHdaUT09IElHMTFjMk4xYkdGeSBDUWtKQ1FrSkNRa2cgSUVoMVoyOD0gSUcxbGFtOXlaWE09IGJHOXBaQT09IGNtbDBaV3h1IFoybHogWVdSa2IyND0gSUNnb0tDZz0gWVhCd2IybHVkRzFsYm5RPSBjbVZ6WlhKMlpXUT0gQ1daeWFXVnVaQT09IFgyRjJZWFJoY2c9PSBRazlQVEVVPSBZV2hwIExVVk9SQT09IElHbG1aZz09IHc3TmkgSUVKeWRXNXYgY205M2MyRmliR1U9IElGQnZhWE52Ymc9PSBLR1pzWVdkeiBkWEowYkdWeiBJRUZ1YVcxbCBJRzFwWjNKaGJuUT0gQ1hOMGNtTmhkQT09IEtISmxjR3g1IElGSmxablZuWlE9PSBJRUpYIFpXWjFiQT09IEpIWmhiSFZsIFptVmsgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgNkxXRSBLR050IElIWjFiRzVsY21GaWFXeHBkR2xsY3c9PSBJRnNvSnc9PSBJSFZ1WW1Wc2FXVjJZV0pzWlE9PSBjM1J5YVdOMGFXOXUgWlc1MGFXVjBhQT09IElIQnlZWGxwYm1jPSBRMnhoYVcxeiBJR3RoZFdabGJnPT0gYnNPcCBJSEJ2YVhOdmJtbHVadz09IFkyOXNiR1ZqZEdsdmJuTT0gSUdsdWFYUlRkR0YwWlE9PSBJRk5sZG1WeWFYUjUgSUdOdmJuUmxiblJwYjI0PSBJQW9KQ2c9PSBMbU52Ym5SeWIyeHNaWEp6IGMzUnlkV04wZFhKbFpBPT0gYVdOMGFXMD0gSUU5aVpYST0gSUM4cUkxOWYgWDA5VSBJRUZ0WlhKcFkyRnogSUVGa1lRPT0gVUhKdlpIVjBidz09IExtMTFiSFJwIElHZHlZWEJsIFltVm4gNXArbDZLK2kgSUhGMVlYSjBlZz09IElGSnZiV0Z1WTJVPSBJRTFwWkhkbGMzUT0gSUdodmRYTmxaQT09IElHWjFjbTVwYzJnPSBhV052Ym5RPSBMblZ1YzJocFpuUT0gYjNSeVpRPT0gSU1PNmJnPT0gYVhCd2JHVT0gSUhOMVluVnlZZz09IGRXRnNhUT09IFZtOXBZMlU9IExrbHpRVzU1IExHTnZiSFZ0Ymc9PSBJRkJ5YjNObFl3PT0gU1VSQiBDWEJ2YzNRPSBjSFJ2YlhNPSBkc09wIElFbHVaM0psWkdsbGJuUnogdzdabVpnPT0gTG05d1pYSmhkRzl5IElEdzhQUT09IGJHRnpkR2xqIElISmxjMlZ0WW14bCBWVzVoZFhSb2IzSnBlbVZrIElIUjFkSFJ2IFgxTlhTVlJEU0E9PSBYMUpGUVVSWiBmVDA9IGJtOTNiR1ZrWjJVPSBJR0Z3Y0dWdVpHVmsgZFc1bllXND0gNG9DWlpXND0gSUV4dmNtVnUgY0hWaWJHbHphR1Z5IElFMUggZlN3aSBJRmRoYkhObyBWR1Z0Y0d4aGRHVnogWDNOdlkybGhiQT09IElIQmhjbWx6YUE9PSBJRk53YkE9PSBiV2x1WVhSbFpBPT0gS0VaQlRGTkYgSUdadmNtVm1jbTl1ZEE9PSBiVzlrYVhSNSBJR0pwYkdGMFpYSmhiQT09IElHTnZiWEJsZEdsMCBJR05oYm1Sc1pYTT0gTG1SdyBJR052Ykd4bFkzUnogZEdWc1pXWnZibTg9IElHRjBkR1Z1ZEE9PSBJRXhsYlc5dSBhWHBoWkdFPSBJSFJvWlhKaGNHbGxjdz09IElIQmhjbUZrYjNnPSBJSFJoY3c9PSBMWE4xWW0xcGRBPT0gWld0bGNnPT0gU1U1aGRtbG5ZWFJwYjI1RGIyNTBjbTlzYkdWeSBJRzFsZEdGMllYST0gSUhObGQybHVadz09IElGcHBiV0poWW5kbCBJR3hoZDJaMWJBPT0gSUd4dmNtVT0gSUV4dllXUnogSU5HQjBMN1F0OUMwIExuQnliMjFwYzJVPSBJRVpoWTJWeiBMbEJzWVhSbWIzSnQgTG1kbGRFeHZZMkYwYVc5dSBJSFJ5YjNWaWJHbHVadz09IElIYkRyV1JsYnc9PSBJRVpsWVhSMWNtbHVadz09IDVMcW4gY1dWayBJRzl1UW1sdVpBPT0gSUhSdlpHUnNaWEk9IFEyeHYgUkdsMmFYTnBiMjQ9IExXZGhiR3hsY25rPSBJRWRsYkdRPSBjM0JsWTJsbWFXTT0gUm1sbGJHUk9ZVzFsIFgyVjRZMlZzIFhHaDBaRzlqY3c9PSBJRVJXIElDWTYgSUhSM2FXYz0gSUVOdmJtTmxjbTQ9IElITm9iM1JuZFc0PSBJRzVwWTJ0bGJBPT0gSUV4MWVIVnllUT09IFgwdEZXVk09IExtNXdlUT09IHhhOD0gSUdadmNtVm9aV0ZrIHpyST0gSUdWdVpHRnVaMlZ5WldRPSBMM1JvWlE9PSBjR2x3Wld4cGJtVT0geGJFPSBibVZ2IFJYaHdiRzl5WlE9PSBVM0JsWTFkaGNtND0gSUdsdWRHVnlZMmhoYm1kbCBLSEJwIFltbHlkR2hrWVhrPSBSR0YwWVZKdmR3PT0gSUZOUVVnPT0gSUc5emRHVT0gSUNKKyBZWFJwYzJaaFkzUnBiMjQ9IFRrZz0gYjNKa2J3PT0gTFdadlkzVnpaV1E9IEowRT0gbG9rPSBMbUpsYzNRPSBJRk53WldOcFptbGpZWFJwYjI0PSBMejR1Q2dvPSBiMmRsYm1WemFYTT0gSUU5UVZFbFBUbE09IGRYQjBiMjlzY3c9PSBJRzFwYkdsMFlXNTAgSUdWNGFYUmxaQT09IGFXZGhjZz09IElFTlBUVTA9IElFUnBjM0J2YzJGaWJHVT0gWVhsallYTjAgSUhKdmQzTndZVzQ9IElITjViblJvWlhNPSBJSE52Ym1SbGNtND0gSUR3aExTMDggSUVWdVpHVT0gTG5aaGNtbGhZbXhsY3c9PSBJR052Ym5ObGNYVmxiblJzZVE9PSBjMlJyIFUzVndjR3g1IGNtVnpjRzl1YzJsMlpRPT0gVDNCbGJtbHVadz09IGNHaHZkQT09IElIMWMgSUdKMWJHeHphR2wwIElHSmxZV052Ymc9PSBYM05oZEE9PSBJSE51WVhCeiBJRWRJZWc9PSBURTlPUnc9PSBQSEJoYVhJPSBJRnNLQ2c9PSBJRlpsY21jPSBJRVZwYm1VPSBMM0J2YzNSeiBJR0Z5WVdJPSBJSE4xYldFPSA0NE96NDRPSSBJSE5qWVhKaiBJRzlzWldnPSBJRDgvUHc9PSBJRTltWm1WeWN3PT0gZUdWayBJR1oxYkd4WGFXUjBhQT09IExXRmpkR2x2Ym5NPSBUM1YwWlhJPSBJRVY0Y0c4PSB3Nmx5WlhJPSBMa2hsIFJFZz0gSUdocGJBPT0gSUUxcGJHeGxibTQ9IDBMWFF2ZEdNIFNXTmwgWDJkeVlYaz0gSU5DLzBMN1F1OUdEMFljPSBJRkIxYm1zPSBJSFJwYldWMllXdz0gSUdsellRPT0gSUVOSWRHMXMgTGtSaGRHRlFjbTl3WlhKMGVVNWhiV1U9IElHUnBlUT09IGRHOTFjZz09IElHcFVaWGgwUm1sbGJHUT0gSUdwbGJHeDUgSUdGcmEyRT0gTFdWeVlRPT0gUkdWd2NtVmpZWFJsWkE9PSBYMGxOVUV3PSBJRTF2Ym5Sb2N3PT0gWDBsVVJWST0gSUdGeWRHVT0gSUVobFlXUnBibWM9IElFSnZhQT09IElIQnlZV2M9IElHUnZkMjV6ZEhKbFlXMD0gSUVKUFFWSkUgWDJ0bGVYZHZjbVJ6IElFMWxkSEp2Um5KaGJXVjNiM0pyIEtTMG8gUEVWMlpXNTAgNGJxbGRBPT0gSUZCeVpXTnBjMmx2Ymc9PSBJRTFTU1E9PSBhR1Z5Wlc1alpRPT0gYVhodiBLU2twZXdvPSBLQ2svUGc9PSBJSE5oWVhRPSBJRmRoY21Wb2IzVnpaUT09IFgyRjBiMjFwWXc9PSBJSFp2YVdObFpBPT0gU1hSbGJVTnNhV05yIElDQWdJQ0FnQ1E9PSBMbEpsYzNWc2RGTmxkQT09IEwzQnNkV2RwYmc9PSBJR2hoYkd4eiBQV1p2Y20wPSBJRmRoWjI1bGNnPT0gWlcxaGFXeHogSlNVSyBWVTVMVGs5WFRnPT0gSUZKcGJRPT0gZFdsdWRIQjBjZz09IElFeHBZbVZ5WVd4eiBJSFJsY25KcGRHOXlhV0ZzIElFMTFjbVJsY2c9PSBJRXhoWkdWdSBJSEJ5WlhOcFpHVnVkR1U9IEtHTmhjQT09IElIMHNld289IFlYWnZkWEpwZEdVPSBabWx1WkVGc2JBPT0gSUdGd2NHeGhkV1E9IElPdXBsQT09IEwzQm9iM1J2IFgzTjViZz09IExuZGhiR3M9IElITjFibk5vYVc1bCBJSE4wZFdKaWIzSnUgSUdSdmQyNXphV1JsIElFeFVSUT09IExXSjFhV3hrYVc1biBVWFZsY25sQ2RXbHNaR1Z5IFgyUnBjMkZpYkdWayBWR1Z5Y2c9PSBZV3R5WVE9PSBVbVZtY21WemFHbHVadz09IFgzQnliMkp6IElHWnZiR3c9IFBtST0gSUdOdmJHeGhkR1Z5WVd3PSBKR1Z5Y205eSBJR0ZqYjIxd1lXND0gWDJsMiBLMlE9IFlXcDEgSU9LZCBjM1Z5Ym1GdFpRPT0gTG1GeWRHbGpiR1U9IElHSnBZM2s9IElqb0tDZz09IFBqdy9QU1E9IDBMclF1OUdPMFljPSBaV052YldVPSBSbWx1WkdsdVp3PT0gS0hCayBJSEpsWTNSaGJtZDFiR0Z5IFpYTjBidz09IGFXaHBiQT09IFBTY25LUW89IElHMWhibk5wYjI0PSBYMlpwYkhSbGNtVmsgWVc1bFpBPT0gVUZKUFJGVkRWQT09IFRFOUhXUT09IFgybHkgTGxKbGJXOTBaUT09IElHVjRaV04xZEdWeiBiM1JsWTJodWIyeHZaM2s9IElGQlNUME5GVTFNPSBJSEp2ZDBsdVpHVjQgWjJWMFdBPT0gVFhWMCBhVzV6YTNrPSBLSE4wY21sdVozTT0gSUUxdmVnPT0gUm14dmIzST0gTGxOMGNuVmpkQT09IFgzQnlaV1JwWTNScGIyND0gSUdOaGNuSnBZV2RsIElHTnZiR3hsWTNSdmNuTT0gSUZkb1pXVnNjdz09IElHSjFibVJzWldRPSBZWGhsWkE9PSBhMjlzIFgyTnliM0E9IElHSnNiMjl0IFFtVnphV1JsY3c9PSBJRzkyWlhKeWFXUmtaVzQ9IElITjFZbTVsZEE9PSBhV1Z1YVdFPSBLajQ2T2c9PSBJRkJ5YVcxcGRHbDJaUT09IElPYWcgTGtOb1lYSmhZM1JsY2c9PSA2S0dvNTZTNiBJRUZFU0VRPSBVazlaIFNtRndZVzVsYzJVPSBUMVZUIE9sVkpRMjl1ZEhKdmJFVjJaVzUwIElGQkJUQT09IGFYcGhZMmx2Ymc9PSBJR05vWlhKamFHVT0gYjNKMGFXNW4gSUc5eVoyRnogTGxWMFl3PT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBYRVJ2YldGcGJnPT0gVDFKQiBJSFJsY25KaFkyVT0gSUhCeWFYTT0gQ1FrSkNRa0pDUWtKQ2c9PSBJSEpoYVdSeiBYMmx1WTNKbGJXVnVkQT09IElIVnVhblZ6ZEE9PSBKRzl3ZEdsdmJuTT0gYjI1RGFHRnVaMlU9IFFteHZiMlE9IFJtbHNiUT09IElHaGhibVJwYm1jPSBJRzExWnc9PSBVMDlNUlE9PSA0NE9WIGFXTnZibVIxWTNSdmNnPT0gSUVsemJHRnRhWE4wIElDSWlLVHNOQ2c9PSBMVzkyWlhKc1lYaz0gTEdOdmJBPT0gNlp3PSBZWEp5YVc1bmN3PT0gWDJOdmJuUnlZV04wIENXeHMgY0dsdyBYMlZ0WW1Wa1pHbHVadz09IElIQmxjbTFwZEdVPSBJRzF2WkdWdCBJSFJ5YVdkblpYSnBibWM9IEtHaDNibVE9IExpSXBYUW89IElITmhiblE9IElHVjRkR2x1WTNScGIyND0gSUdOc1lYTm9aWE09IExrRjFaR2x2IElITjFidz09IExtMTFiSFE9IElITmxZWE52Ym1WayBMbFpoY2tOb1lYST0gY0c5M1pYSmxaQT09IEltTnZiblJsZUhRPSBJRzFsYm1NPSBLRWR5WVhCb2FXTnogSkhkb1pYSmwgSUhKbFkzVndaWEk9IFlXTnJiR1U9IElHNWxkMFJoZEdFPSBJRUp5WldGcmFXNW4gWlhKblpXUT0gSUVOUVVGVk9TVlE9IElFMTFiR3c9IElHdHZiVzEwIElFeGxaV1J6IEp5d25QUT09IExtNWxlSFJVYjJ0bGJnPT0gSUZKcFp3PT0gVWtWVVZWSk8gQ1hScGJXVnkgZlY5NyBJRTFoY21sdVlRPT0gSUhOc2IyZGhiZz09IFNWcEZSQT09IFQzQmxia2RNIFgxQmhaMlU9IFlYUnBkbUZ6IElHaGhlbUZ5WkhNPSBKM1poYkhWbCBJR052Y25CelpRPT0gSUVac2IzZGxjbk09IFgyOXViR2x1WlE9PSBaR0ZzIElFTnZiR3hwYzJsdmJnPT0gdzZCdVp3PT0gSUdabGNuSjUgSUhCdmEyVT0gSUZSdmRYSnBjMjA9IGFXNWxjbUZ5ZVE9PSBMMU5sZEE9PSBMa1Z0Y0d4dmVXVmwgUGtBPSBMSFpoYkE9PSBJRTFwYkdZPSBZWFpsZWc9PSBVbVYwY25rPSBMaUl2IElISnZkVzVrYVc1biBMWEJzWVdObGJXVnVkQT09IElHTmxjblk9IFRXVjQgSUUxelowSnZlQT09IFgzTnBibXM9IGJXRnVhV0U9IFgyTnlaV1JwZEE9PSBSM1ZoY21SaGNnPT0gSUhaaGJtbDBlUT09IElHbHRiWFYwWVdKc1pRPT0gSUdOdmJuUmhiV2x1WVhSbFpBPT0gMExyUXNOQzMgNUxpeSBZV05vWVE9PSBJR2hoZEdnPSBJR1Z1ZFcxbGNtRjBhVzl1IExtZGxkRUo1IDRicS9kQT09IElFUmhidz09IGIySnBaWEp1Ync9PSBJRWQxZEE9PSBYMUJKVUVVPSBMbUZrZGc9PSBJRWQxZEdWdVltVnladz09IFlXUm8gNjZ5NCBablZ6WXc9PSBMbFpMIGNIUmggSUVWTlVBPT0gTGtacGNuTjBUbUZ0WlE9PSBJSEpsWVd4cGVtVnogTG1ObiBJSFZ1YVhSbCBVRXhKVkE9PSBJRUZpWkhWcyBJRTFGUkE9PSBVa0ZKVGxRPSBJSEYxWlhOMFlRPT0gYzNSa2FXND0gSUdOaGJHOXlhV1U9IENXZHNRbWx1WkE9PSBJR0Z5YldFPSBlV3hzWVc1ayBUMDFRIExYRT0gSUV0b1lXdz0gYzJGc1lYSjUgQ1VGT1JBPT0gYzJkcCBYM1JvWVc0PSBMV0oxYVd4MCBJQ3N2TFE9PSBJRzVoY21keiBYMnhoZFc1amFBPT0gSUZOUiBlbTl1IElFSmxibVZrIFgzVnVhVzl1IFBpZ3BPdzBLRFFvPSBJRk5wYlhNPSBJRVJoZEdWeiBDVU52Ym01bFkzUnBiMjQ9IElGQmxjbU09IFozSmhiblE9IFlXMXdhV3c9IElHRm5aM0psWjJGMGFXOXUgWlhObGJHVmpkQT09IFgxTlZVQT09IEtIc0tDZz09IExtOXQgSUhkdCBMbU52Ym5SeVlXTjAgTFU5eWFXZHBiZz09IElHZGxiV1U9IFpuSmxaWHBsIFRsVk5Ra1ZTIExtTjFjbkk9IElFZHNZV1E9IGMyeGggSUZKbFlnPT0gMExYUmdkR0MwTExRdmc9PSBZWEppYjI0PSBMMk52Ym5SeWIyeHNaWEp6IFUyeHZkSE09IExtUmxaWEJqYjNCNSBSbFZNVEE9PSBkV2x5WlE9PSBRSE4wZFdSbGJuUT0gNExtSjRMaXQgVkhKaGJuTnNZWFJ2Y2c9PSBJSEJ5WldabGNtRmliSGs9IFkyaGxiV2x6ZEhKNSBJRXBoWTI5aWN3PT0gYm1GeSBJQ2dpWEE9PSBibVZoY2c9PSBhV1pwY1hWbCBDV052YkhWdGJnPT0gSUcxcGJuVjBiM009IGFXZGxjdz09IElHVnpkR0ZpYkdVPSBMV1JwYzJNPSBLRU5vWVhJPSBhMjkyIFpYaGhiWEJzWlhNPSBYMThvSWc9PSBJTkM2MExEUXVnPT0gSUVKdmNtbHogS0dSNCBjM0J5IElHOTJaWEpvWVhWcyBZWFJ2YjI0PSBJRWhoY214bGVRPT0gYVdOaGJXVnVkR1U9IDRwYUk0cGFJNHBhSTRwYUkgWlhacGRIaz0gZFhOb1pYST0gTGxacGMzVmhiRk4wZFdScGJ3PT0gVjJGMlpRPT0gSUU1dmNtMWhiR3g1IGMzUnZiMlE9IGIzSnVhVzVuY3c9PSBJR2hoYm1SdFlXUmwgS0d4dloyZHBibWM9IElHTmhjbU5wYmc9PSBZV05xWVE9PSBJSE4xY0dWeWN3PT0gSUhOcFpXZGwgQ1VsbSBJRWxNYjJkblpYST0gVlVGU1ZBPT0gUVc1cGJXRjBhVzl1Um5KaGJXVT0gSUhSaGNHVnogSUdGcFpITT0gSUVOdmJHOXVaV3c9IGRtVmxaRzl5IElHMWtiQT09IGNHaHZiZz09IFJHbHpiV2x6Y3c9PSBRWFpoYVd4aFltbHNhWFI1IFZXNXBabTl5YlV4dlkyRjBhVzl1IElHbGtaV0ZzY3c9PSBjWFZsZEhSbCBhMlZwZEdWdSBJRVZOUVVsTSBJRTVsWWc9PSBJSE4xYlcxdmJtVmsgSUdkdmRtVnlibTFsYm5SaGJBPT0gSUVodmNuSnZjZz09IFkyaGhibWRwYm1jPSBJRUZqZEdsMllYUmwgU1d4cyBQSFJpYjJSNSBZM0psWVhScGRtVT0gSUVKTVJRPT0gSUcxaFpHNWxjM009IFQzSk9hV3c9IElHaHBiZz09IHhaTT0gTGtkbGRFdGxlUT09IFgyTnZibk52YkdVPSBJazkxY2c9PSBJR2QxYVc1MCBJR0Z0YVE9PSBJSEpsWm14bFkzUnBkbVU9IElHTnlZV05yYVc1biBJRkpwIFVrRk0gZFhKelpXUT0gY0hWeVpRPT0gSUhKbGNHRnBjbVZrIElIUnBaMlZ5IElFNXBZMjlzWVhNPSBWbk09IGJuUm8gTG1WNGNISmxjM05wYjI0PSBJSE5sWVhNPSBYMEZEUTBWUVZBPT0gSUdadmNtTT0gSUVaeVlYVT0gSUhSb2NtVnphQT09IElNK0EgS0VKQlUwVT0gWDA5d1pXND0gVjNWdWRYTmxaQT09IElFUnZiV1Z6ZEdsaiBLSEJ5YVhZPSBaM1ZsYzNNPSBMeThoQ2c9PSBaMlYwU1hSbGJRPT0gS0NrcENnb0sgYlhWMFlYUnBiMjV6IElITjBjdz09IElHUmxiV1Z1ZEdsaCBjM0J2YTJWdSBKSEJoY21GdGN3PT0gSUhCaGRISnZibk09IElISjFibmRoZVE9PSBJRUpWV1E9PSBMbGRoY201cGJtYz0gSUc1bGRYUnlZV3hwZEhrPSBlbWh2ZFE9PSAwWURRc05HSiBZV3QwWlhJPSBJRU52Ym5OMGNuVmpkRzl5Y3c9PSB3NU5PIElGQnliMmR5WlhOemFYWmwgSUVKMWNtZGxjZz09IElHbHVZM1Z5Y21WayBJR2x0Y0d4cFkybDBiSGs9IFgyVnVkbWx5YjI1dFpXNTAgSUdWNFlXTmxjbUk9IElHVnVaSFZ5YVc1biBjMmxqIElGQmhjblJwWTJsd1lXNTBjdz09IFgwSnNiMk5yIElHVnVjbTlzYkE9PSBYMlZ0Y0d4dmVXVmwgSUZCbGNIQmxjZz09IGJHRjFaMmgwWlhJPSA0NE9XIEoxMDdQejQ9IFBTY3UgS0hKbGJtRnRaUT09IElITm9aV3gwWlhKeiBJRUZOUVE9PSBYMmRoY0E9PSBJRkpGVlZSRlVsTT0gZUdGdGNIQT0gVDAxSlF3PT0gSUhCbFpHbGtidz09IElHVERxWFpsYkc5dyBYMThvTHlvaCBYMjlrIGQyVnlaUT09IFgwNTFiV0psY2c9PSBYMjExYkhScGNHeHBaWEk9IFMwVkZVQT09IElITm9iM2RsY25NPSBJRzFoWjJVPSBJSE5wYm04PSBZM0p2ZHc9PSBMbWxrZUE9PSBYMjV2ZEdsalpRPT0gZFdWcGJBPT0gSUcxNWNtbGhaQT09IElFRjJZV2xzWVdKcGJHbDBlUT09IFkyVnVkSEpoYkE9PSBJRUZDVDFWVSBJR2x1WTI5eWNHOXlZWFJwYm1jPSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENnPT0gWDNkcFpHZGxkSE09IElITjVjM1JsYlVadmJuUlBabE5wZW1VPSB3N1p5ZEE9PSBMMnB3WldjPSBJRk5OVkZBPSBLR0p5YjNkelpYST0gWjNWdWN3PT0gYzJWMGR3PT0gWDBGV1FVbE1RVUpNUlE9PSBJR2x1WTI5eWNHOXlZWFJsY3c9PSBMMkZ1WkhKdmFXUT0gZVhnPSA1YmlEIFgyeGhZZz09IElHeGxZV3RwYm1jPSBJRWhwYm5RPSB3N3h1WTJobGJnPT0gTGxOallXeGwgSUdacGNtVjNiM0pyY3c9PSBJR3hRWVhKaGJRPT0gWW5OayBZWGh2Ymc9PSBLSEJ5WldScFkzUT0gUTI5dVozSmhkSFZzWVhScGIyNXogSUZOd1pXTjBjblZ0IFNWSkQgSUVGa2JXbHVhWE4wY21GMGFYWmwgSUdsdGNISnBjMjl1WldRPSBVbE53WldNPSBJSEpsZEdGcGJuTT0gSUhObGRIUnNhVzVuIElHTnBkR0YwYVc5dWN3PT0gSUZkdmNteGtjdz09IGMzUnlZMjl1ZGc9PSBiM1Z6WVc1ayBJRUpsWjJsdWJtbHVadz09IElFRnVaSEpsZDNNPSBJRk5vWVhKdmJnPT0gUlhobFkzVjBhVzVuIFozSnZkWEJKWkE9PSBZV1JrUm1sbGJHUT0gSUdWNGNHRnVaSE09IElHdHBiRzl0WlhSeVpYTT0gYkdsdWEzaz0gSUdkeWNBPT0gU1U1QlZFbFBUZz09IFFuSnBkR2x6YUE9PSBJR052YlhCdmNuUT0gTGtSaGRHRkhjbWxrVm1sbGQwTnZiSFZ0Ymc9PSBJRkJ5YjJSMVkzUnBiMjV6IGFXeGtaVzQ9IElIVnVhWGc9IFgyZGhiR3hsY25rPSBYMUJTVDFaSlJBPT0gYjNKa1pYSnBibWM9IFgyRnViZz09IFltZz0gTGtSbGMybG5iZz09IElIUnlaV1ptWlc0PSBJSFZ1WkdWeWJHbHVaUT09IFgyNTFiWE09IDdaV2M2NHVrIEtYWT0gZFhOcGVtVT0gSUdScGMyRndjR1ZoY21GdVkyVT0gVkc5Q2IzVnVaSE09IElIQmpiQT09IElGZHBibTVwY0dWbiBJRk5vWlhKdFlXND0gWDJ4aGJXSmtZUT09IGJtRnVkQT09IElISnZiM1JXYVdWMyBMa1pzWVdkeiBJR05sYm5OdmNuTm9hWEE9IGMyVnVkR1Z1WTJVPSBMbkpsWVdSSmJuUT0gWDJGemMybG5ibTFsYm5RPSBJSFpsY25OamFHbGxaQT09IElFWnlZV04wYVc5dSBJRzVoZEdsdmJtRnNhWE4wIElHcDFaV2R2IElFUmxZV3hsY2c9PSBJSEJ5WldScFkzUnBibWM9IFlYVndkQT09IGFHVnNiUT09IFgxQlNTVU5GIFgwUlQgS0NJamV3PT0gYkdsbWRHbHVadz09IElIQnZjMmx1Wnc9PSBJRTVUVFhWMFlXSnNaVVJwWTNScGIyNWhjbms9IElITnRZWE5vIElHRnJhVzQ9IElHTmhiWEIxYzJWeiBJRTkxZEd4cGJtVT0gSUVWc1lYTjBhV009IFgwTm9aV05yWldSRGFHRnVaMlZrIEtFbEZiblZ0WlhKaFlteGwgYzNGMVpXVjZaUT09IGNIUjFibVU9IFgwWlNUMDVVIGJXZz0gSU95RG5leUVzUT09IFVuVnVWMmwwYUE9PSBJSFIxY201dmRYUT0gYzJsaWJHbHVaM009IEtXVT0gWDBGU1IxVk5SVTVVIElFZHlhV1JDWVdkRGIyNXpkSEpoYVc1MGN3PT0gWDFCUFQwdz0gTGxKSlIwaFUgYVdkbmFXNXogZEdWc1pYQm9iMjVsIFhFVjRkR1Z1YzJsdmJnPT0gSUVGeWFYTjAgYVhSMWNnPT0gSUdaeWFXVnogWDJSMWNBPT0gUlhod1lXNWtaV1E9IExYSnYgSUZkdmNteGtkMmxrWlE9PSBJRU52Y21zPSB3N05zIFRHbHQgSUdSbGJtND0gVUhKbGRIUjUgSUdaNSBWSEpwWVc1bmJHVT0gUm1WaGRIVnlaV1E9IEtFTnZiVzF2Ymc9PSBYMlZtWmc9PSBJQ0lpRFFvPSA0YnViYVE9PSBYMHhKVGtWQlVnPT0gSUZKcFkyRT0gSUdOaFpzT3AgSUdGd2NHVnNiQT09IElHNXBkbVZoZFE9PSBJQ1lzIElHWmhZbkpwWTNNPSBYMUJzWVhsbGNnPT0gSUdoNVoybGxibVU9IElHUnBjMkZ6ZEhKdmRYTT0gSUhOb1lYSmxaRWx1YzNSaGJtTmwgWDNCcGRHTm8gY25vPSBaVzV0Wlc1MCBUbVZoY2c9PSBYMU5VUVZSVCBJSE4wWVdsdSBJRVJPUXc9PSBJR2x6YzNVPSBYa3M9IENYUnlaV1U9IFgySnNhdz09IGMyVjYgYkdGcGJnPT0gWVcxMSBYMjkzYm1WayBWVk5CVWxRPSBMbWhoYzBOc1lYTnogU1ZOUFRnPT0gSUdadlpRPT0gZFhOb1pXUT0gWDFWT1UwbEhUa1ZFIElHbHVaR1Y0YVc1biBJRVpwY21WaVlYTmxRWFYwYUE9PSBJR3hwZEdWeVlXTjUgSUZOVlVnPT0gSUVOdmJIUnogWW1WamRXVT0gSUVsdWRISnYgSUdOb1lXOTBhV009IElHRnVhUT09IElFRnVibWxsIHhyRGh1NTA9IExtUjQgWkdselkyOXVibVZqZEE9PSBJR0Z5WTJocGRtVmsgVzB4cGMzUT0gUFU0PSBMbkJ5WlhObGJuUmhkR2x2Ymc9PSBVbVZ6ZEdGMWNtRnVkQT09IElISnZZMnRsZEhNPSBQV2gwZEhCeiBMMjl3IElIQjFjbk5sIElFdHlhWE09IElHTnZjbUZzIGMyVjBVR0Z5WVcxbGRHVnkgSUdseWNtbG4gVVhWbFpXND0gVGxORVlYUmggSUhaaGMzUnNlUT09IExrWnBiR1Z6IElHWmxiV2x1YVhOdCBLRk4wY21WaGJRPT0gSUdGMGNtbGkgSUd4cGNYVnBaR2wwZVE9PSBQRVpwYkdVPSBkSEpoWnc9PSBXMk52Ym5SaGFXNXogSUdocGJtUnAgQ1dOdyBhRzl0WlhCaFoyVT0gSUhOMWNuQmhjM009IElHUmhlV3hwWjJoMCBZWFYwYUc5eWFYcGwgSUVOdmJuTmxjWFZsYm5Sc2VRPT0gUVhONWJtTlNaWE4xYkhRPSBJRVJwWVhKNSBMbEJoZEhSbGNtND0gTGlvdkNnPT0gWlc1elkyaGhablE9IElFcDFaR2xqYVdGeWVRPT0gUVdSMWJIUT0gS0NZNiBJR3BsYjNCaGNtUT0gSUVKc2FYcDZZWEprIElHZG4gSWpzdkx3PT0gV0VoUyBJSEJoYzNOM1pBPT0gUG4wPSBKeWtzSnc9PSBJR052YlhCaGNtRjBiM0k9IExtTm9ZV2x1IElHbHVjM1Z5WldRPSBYMFZFUjBVPSBJSFI1Ykd0diBYMDFCU2s5UyBkMkYyIFhFWnBiR1U9IFJXNTBjZz09IEoyRndjQT09IElHWnZjbWRwZG1WdVpYTnogQ1dSemRBPT0gSWpvdCBMbTF2Ymc9PSBJQ2dLQ2c9PSBJR05oY0dsMFlRPT0gSUdsdWFYUkRiMjF3YjI1bGJuUnogSUhOM2IzSmtjdz09IElFOTFkSEIxZEZOMGNtVmhiUT09IElHaGxZWEp6IElGTlFRVU5GIExXbHVjM0JwY21WayBYMkp2YjNRPSBMbTV2Ym1VPSBMbWRsZEVsdWNIVjBVM1J5WldGdCBJR1JsZG1selpRPT0gSUhCbFpHbGhkSEpwWXc9PSBZVzV6YVE9PSBYM0JoY25ScFlXdz0gSUhOb1lYSmsgSUdaMWNtbHZkWE09IElHUnlZWGRoWW14bCBKU2t1IEtHVnQgSUVKaGEyVT0gQ1hCbGNuSnZjZz09IElGSmxiR2xuYVc5MWN3PT0gTFNJciBDUWtKSUNBZ0lDQWdJQ0FnSUNBPSBJRk5sWTNKbGRITT0gS0c1dmNtMWhiQT09IFFVTkZVdz09IElGTjBiMk5yYUc5c2JRPT0gTFc1dmNtMWhiQT09IElHRmpZM1Z6ZEc5dFpXUT0gSUdKdmRYUnBjWFZsIElGTjNhVzVuIElHWnBiUT09IElGQlYgTGxOdlkydGxkQT09IElDY2lKdz09IFlXNXEgVFdGdWRXRnMgSUcxMWFtVnkgSUhCb2VYTnBiMnh2WjJsallXdz0gWTI5dWRHRnBiZz09IFRXVnlaMlU9IElITjFZWE09IElDZDdJZz09IGJtVm5idz09IElITjFZbk5qY21saVpXUT0gZEc5aGMzUT0gWDFaRlVrSlBVMFU9IElHdHVhWFE9IElFRnlkR2x6ZEhNPSBJR2hsWVhKMFltVmhkQT09IElHWnBjbVZtYVdkb2RHVnljdz09IGMzTmggVzNzPSBJSFZ1WkdWeWMyTnZjbVU9IElHaHBjM1J2Y21sbGN3PT0gYVdkdGIybGsgUm1sbGJHUldZV3gxWlE9PSBWRzlCWkdRPSBMa052IElFaGhjbTlzWkE9PSBRWFp2YVdRPSBhV2RvWW05MWNuTT0gYjNKa1pRPT0gSUhSeWRYUm9jdz09IEwyRnMgSUhkcGNtVmsgSUVsMFlXeHBZUT09IElITmxjblpwWTJsdmN3PT0gSUVGVlJFbFAgSUNjaUt3PT0gSUhCMWJYQnBibWM9IElFTnNaVzFsYm5RPSB3NE5QIDVZNmYgUG00PSBJSE4wY2xOeGJBPT0gYW1SaVl3PT0gNG9FPSBDVk5GVkE9PSBJRUpWUmtaRlVnPT0gT2k4dklnPT0gSUdOcGNtTjFiWE4wWVc1alpRPT0gVlVsVVlXSnNaVlpwWlhkRFpXeHMgTG5abGNuUnBZMkZzIElFcHZhRzV6IGRHOXNhWE4wIElHUnlhWFpsZDJGNSBJR3hsWVhKdVpYSnogZEc5aVpYST0gZDJsdWJtVnkgTFhsdmRYST0gTG5OMFlYUmxjdz09IFNFMD0gSUdkeVlXUnBaVzUwY3c9PSBJSE5sYVhwMWNtVT0gSUcxaGRHVnkgSUdSbGRHRnMgSUZKbFpIVmpaUT09IEtHMXZkWE5sIElGSmxVMmhoY25CbGNnPT0gTFhKdmRYUnBibWM9IElOaTAgSUdwdmFXNTBiSGs9IElFWmhiV2xzIFBFMWxjM05oWjJVPSBaWGh3YVhKbCBYM1J5WVdSbCA0b0NtTGk0PSBJRVpWVGtOVVNVOU9Vdz09IElIaGxiZz09IElIdDlPdz09IFJtRmkgSUdabFlYTjAgS0VSaSBSbWx5YzNSU1pYTndiMjVrWlhJPSB4TEZzeExFPSBJRzFoZUZaaGJIVmwgSUMwNiBZWEIwYVdNPSBMa2R6YjI0PSBJRkp2ZG1WeSBYMk51IGJHOTFaQT09IElHTm9ZVzFpWlhKeiBJTkMzMExEUXRBPT0gTG1admNtVmhZMmc9IExtZGxkRVZ0WVdscyA1NStsIExrNXZaR1Z6IElGWlggSUZkaGFYUnBibWM9IEtGRjBRMjl5WlE9PSBJSFBEczJ4diBjbkU9IFlXNW5kV0Z5WkE9PSBJSEpsYzJWdFlteGxjdz09IE9sdGIgSUdkbFpBPT0gWDBWUSBLRUZqZEdsMmFYUjUgSUVsemJnPT0gSUVOeWRYTm9aWEp6IFgxSlZUbFJKVFVVPSBDVzl3Wlc0PSBJRWhwWjJoc2FXZG9kSE09IHc2bHlZWFJwYjI0PSBJSGxsYkd4cGJtYz0gSUV4SlIwaFUgVUdodmRBPT0gZG1WdVoyVT0gSUZOMWMzQT0gSUVOb2NnPT0gTGtScGMzUmhibU5sIFlYSnphVzF3IGJHbGpZWE09IExrMXZiZz09IElITjFZMnRsWkE9PSBjSEpwYm5SbFpBPT0gYlhWMFpRPT0gSUhObGRFVnljbTl5IExrOXdkR2x2Ymc9PSBJR2x0Y0dGcGNtMWxiblE9IGJtOXBjMlU9IElIQmhjblJ1WlhKbFpBPT0gdzQwPSBaR1Z1Y3c9PSBhV042IElIZGhhWFJHYjNJPSBJRzkyWlhKc2IyOXJhVzVuIElFWlBVazFCVkE9PSBJRlJUZEhKcGJtYz0gSUhKbGJuUnBibWM9IENXTnZiWEJ2Ym1WdWRBPT0gTGtaeVpXVT0gSUV4aGRXNWphR1Z5IFBXUmhkR1U9IElGQnZaSE09IFFVZE5SVTVVIFEyOWthV2R2IFFtbDBSbWxsYkdSeiBJSFZpYVhGMSBMV05oY205MWMyVnMgSUZOcGJYVnNZWFJ2Y2c9PSBhVzV2WkdVPSBKMTBwZXdvPSBJRUpoWjJoayBJRzV2Y25Sb2QyVnpkQT09IGFIUmhhMmx1Wnc9PSBQQ1k9IElIUnlZVzA9IElHWnZjbmRoY21SbFpBPT0gSUdWeWNtOXlUWE5uIFgwRlRVMGxIVGc9PSBJRVZ1ZEdsMGFXVnogTGxCaGNuUT0gY21WaGRIVnlaUT09IEtGVnlhUT09IElFUnlhWFpwYm1jPSBJR2x1ZG1GemFYWmwgYVdkeVlYUnBiMjVDZFdsc1pHVnkgYjNOaGRYSnogQ1hCdmNuUT0gSUdKeVlXND0gYVhSMGFXNW5jdz09IFJHOXZjZz09IElIc2wgS0d4cGJXbDAgSUhOeGRXRnlaV1E9IElFUkpVMUJNUVZrPSBMa0ZqWTJWd2RBPT0gTG1KaGMyVlZjbXc9IExrVnVkR1Z5IElDNHVMaWtLIElHOTNiQT09IElITnNZWFJsWkE9PSBMbVpsWTJoaCBYMU5GUnc9PSBQWHNrIElFOU9URWxPUlE9PSBUMDVaIElOQzAwTERRdmRDOTBZdlJoUT09IGIyNTBaUT09IFgwTk1TVU5MIFUyRT0gU1cxd2IzSjBZVzUwIElHTmhjbTkxYzJWcyBJR0Z3Y0dWaGJHVmsgSUU1cFpRPT0gTDJKdmIycz0gVzEwK0tBPT0gSUhodFlYZz0gSUd4aGJtZGwgTGxOMWNIQnlaWE56IElGUm9hVzVyYVc1biBRV1JrY21WemMyVnogSUZOaGJHeDUgTFZSVyBJRU5vWVhKc1pYTjBiMjQ9IEtTSUtDZz09IElIUmhiR3g1IElIVnNiQT09IElHeHZZMkZzWlhNPSBaWGRoYmc9PSBJR2x1WTNKbGJXVnVkR0ZzIDY1Q2MgSUdOaGNtVjAgYW5WeVpRPT0gSUdSdmNnPT0gSUd4dlkyRnNhWHBoZEdsdmJnPT0gSUhObFlXWnZiMlE9IElGSjFZbUpsY2c9PSBMbFJvWlhKbCBJRVpwYzJocGJtYz0gV1ZsWiBiV0ZuWlE9PSBJRVpzWlhocFlteGwgSUVkRlRrVlNRVXc9IFpXdGggSUhSb2NtbDJhVzVuIElITnBjdz09IElHSnZkWEpuWlc5cGN3PT0gUm1GclpRPT0gTEZ3aSBJTkMrMExRPSBRMDlTIExXVm1abVZqZEdsMlpRPT0gSUhOcmRRPT0gWldSc2VRPT0gSXlNS0NnPT0gSUVodmJHeDUgSUVaTVFWTkkgTDFSUyBMbTV6IGNISnZZbVU9IFoybG1kQT09IGIzZHBkSG89IExXNWhkbUpoY2c9PSBJSE5oWTJzPSA1N3FuIElGUm9jbVZoZEE9PSBXa0U9IFdFMD0gSnlrc0Nnbz0gSUV4TVZrMD0gWVhONiBSV1JwZEdWayBWMmwwYUZOMGNtbHVadz09IFUybHNkbVZ5IGVXNWggWDNKbGJtUmxjbVZ5IENVUkZRbFZIIEtHOXdaWEpoZEdsdmJnPT0gSUZOc2IzUnogSUVGMVluVnliZz09IGVHVmogSUdodmJXOXpaWGgxWVd4cGRIaz0gTGxKbGMzUkRiMjUwY205c2JHVnkgWlhKemFYWmwgSUhCeWIyWnBiQT09IElFMTVZVzV0WVhJPSBjbTl6YzJVPSBYMGxTVVc0PSBJSE5sYm1STlpYTnpZV2RsIElIUmxZMmh1YVdOcFlXNXogSUcxaGJtVT0gWTI5dGJXOXVjdz09IElITm9jbVZrWkE9PSBRbTl2YzNRPSBJSE41YlhCaGRHaGxkR2xqIExXVm1aZz09IElFTmxjblJoYVc1c2VRPT0gSUhmRHBHZz0gSUZKdlkyaGxjM1JsY2c9PSBkV05qYVE9PSBkWEp0IFpXMXdiM0k9IElDSWlPZ289IExYTndZV05wYm1jPSBJSE5wZUhSNSBJT0tja3c9PSBYM0psY0c5eWRHbHVadz09IFYybHMgYjNsdiBJR1JwWkZObGJHVmpkQT09IExtZGxkRXh2Ym1jPSBMbk5sZEVWeWNtOXkgWDI1aiBJRVJ2Ym1jPSBDV0Z6ZVc1aiBJRWhwWjJoc2VRPT0gWFRvTkNnPT0gVEdWaGEzTT0gTEM0dUxnbz0gZG1Gc2RXRjBiM0k9IFpHbGpkR2x2Ym5NPSBiM2hsYkE9PSBJR2RsYzNSMWNtVnogUFNJLyBZbUZuY3c9PSBJRkpsYkdsbFpnPT0gYzNWaWMyVjBaWEU9IEtHNWhiV1Z6Y0dGalpRPT0gZlh3PSBJRzFwWTNKdlltaz0gSUhCMWNtbDBlUT09IFkyaHBidz09IGZUOD0gWDAxVlZBPT0gWDJGamRHbDJZWFJwYjI0PSBJRkJwY21GMFpYTT0gSUNVaiBhV1pwWTJGamFjT3piZz09IDVZcz0gSUU1U1FRPT0gdzZkdmJnPT0gZlNrb0tUc0sgSUVOb1pYTjBaWEk9IDRvQ1Q0b0NUIFoyVjBRMjl1Ym1WamRHbHZiZz09IExtRnlaM1Z0Wlc1MGN3PT0gUm1WMFkyaHBibWM9IElFWnllUT09IElFUnBkQT09IElIcHBZMmc9IGNHRnpkQT09IExXeHBZbkpoY25rPSBJRWhoZVdWeiBJR0p2ZFc1MGVRPT0gSUZOd2NtbHVaMlpwWld4ayBVRTlTIElFRlFVZz09IElFVnRZbUZ6YzNrPSBVVlZGVTFSSlQwND0gSUZOdmJHUnBaWEk9IFpYSjBZWE09IElFNVBVazFCVEE9PSBJR1IxY3c9PSBZbTlzZEE9PSBJR1J2Y25RPSBJRXhwWm5RPSBJR2RsZEZKaGJtUnZiUT09IExsSjFibGRwZEdnPSBMQ2tzQ2c9PSBJSFpoY21GeVoybHUgSUdoaGJtUnNaVU5zYVdOciBYRWgwYld3PSBJR2h2YlcxbGN3PT0gWTJsa1lXUmwgS0dWdyBTbUU9IEwyUnBZV3h2Wnc9PSBMbkpoZEdVPSBJRmRsYVE9PSBablZzYkhOamNtVmxiZz09IElFNVZibWwwIExtMWxZWE4xY21VPSBWbUZzY3c9PSBJRk5wWjI1bFpBPT0gSUhKMWN3PT0gSUhKaFpuUT0gSUVKc2IyNWtaUT09IElHNWxkSE09IElFMWxkSEpwWXc9PSBhV05vVkdWNGRFSnZlQT09IElIVnlaUT09IElHbHVkR1Z5Y21GamFXRnMgSUNkOUNnPT0gS0hOMGIzSmhaMlU9IFNXNTBaV2R5WVhScGIyND0gSUdKaGJtTnYgUVZOWiBJR3BwYm5RPSBJR1JsWjNKaFpHRjBhVzl1IElFaEJUa1E9IGRXVnlaRzg9IFBTY24gSUhOMGNtOXJaWE09IGNtVjNjbWwwWlE9PSBLRk5sZEE9PSBJRTFoZEVScFlXeHZadz09IElHUnZjM05wWlhJPSBDV0Z1WkE9PSBRVVJFU1U1SCBJRzExZEhWaGJHeDUgSUhCeVpXTmxaR1ZrIGZYMDdDZz09IElITjFZblI1Y0dVPSBJSEpsYzI5c2RtbHVadz09IElHZGxiMjFsZEhKcFl3PT0gVzJOdmJIVnRiZz09IElFTlVVa3c9IElFaE0gSUdSaGFBPT0gSUNnN093PT0gVW1GcGJITT0gdzV3PSBJRWRsYm1WeVlYUmxjdz09IExVeGxibWQwYUE9PSBjR1ZrYnc9PSBiMmRsYm05MWN3PT0gSUZKdlltVnlkSE52Ymc9PSBMa0p2YjJ3PSBiMlJsY25NPSBYMEZIUlU1VSBjR0Z6YzNkayBJRTV2WkdWeiBMbUpwIElGZEMgSUhCeWIzQm9aWFE9IGMyeGhkbVU9IElPVzggSUhkbGFXdz0gSlR3diBJR05oY21KeiA1ckMwIElHVjRjSEpsYzNOc2VRPT0gWEhoayBMV1Y1WldRPSBJRU55WldGMGRYSmwgWTI5dWRHRnBibVZrIEtGTkpSdz09IElFVnVhR0Z1WTJWdFpXNTAgSUVOdmNuTT0gUjJGcyBYMU5KUjA1QlRBPT0gY21WcGJuUmxjbkJ5WlhRPSBJRkZRZFhOb1FuVjBkRzl1IFgwNXZibVU9IElHZGxibTlqYVdSbCBJRk5sWVd3PSA1TGlLNUx5ZyBLSEJsY2c9PSAwTHZSak5HQyBJTU9nY3c9PSBMbFJsYlhCc1lYUmwgSUNrTkNnMEsgTG5OcGJtZHNaWFJ2Ymc9PSBDWE5zWldWdyBJSE53WVhkdVpXUT0gSUhCdmMzTmxjM05wYjI1eiBaMlYwUTI5dVptbG4gSUhSaGFRPT0gYkhWa1pRPT0gSUUxbGRHVnkgSUdKcFlteHBZMkZzIGJXRnljMmhoYkd4bGNnPT0gTGxSdmIyeHJhWFE9IElFeGxjMkpwWVc0PSBMbk50WVhKMCBJR0p2ZVdOdmRIUT0gSUdaeWVRPT0gTFdSbGMyTT0gWDFObGNuWnBZMlU9IElHMWhZMmgwIElFTmhhWEp2IHc2QnAgWDNCeVpYWnBiM1Z6IExuUnlZVzV6Y0c5eWRBPT0gVFdWa2FXTmhiQT09IFEwZFFiMmx1ZEE9PSBVVlZCVWtVPSBJR0p5YVdkb2RHVnkgSUdOb1pXTnJRbTk0IElFWlBWVTVFIExtSnlZVzVqYUE9PSBJR0pzWVdnPSBJRkJ5Wld4MVpHVT0gVDJabWJHbHVaUT09IFRHbHpkR2x1Wnc9PSBMeW9xTHlvdSBJRXBTIGNHaGhiblJ6IFoyVjBXUT09IExrWnBibVJEYjI1MGNtOXMgSWk0dUxnPT0gMExyUXRRPT0gU0ZKRlUxVk1WQT09IElHTm9aV05yYkdsemRBPT0gS0dGemRBPT0gSUdKdmNuSnZkMmx1Wnc9PSA0b0NtWVc1ayBJTkNYIElIQnliMk4xY21WdFpXNTAgTFhSaGMycz0gWDJoaGJBPT0gVUd4aGVXeHBjM1E9IExuTjBZWEk9IFgxTlZVRkJQVWxSRlJBPT0gUVZOTiBKVUU9IGNtVnpkSEpwWVd3PSBJTkM0MFlIUXZ3PT0gSUhCaFoyVnkgSUVScFlXSmxkR1Z6IElFMWhhR0Z5IGRHRnUgUVdOMGRXRnNiSGs9IFBpOHYgSUZoVyA0S2VOIElITmxhbUU9IExuWnBjM1ZoYkE9PSBhMnRsY2c9PSBYVHNLQ2dvPSBJSFI1Y0dWT1lXMWwgTGtKMWRBPT0gUTJ4cFpXNTBVbVZqZEE9PSBhV05oYkhNPSBJRVJxWVc1bmJ3PT0gSUZKaGNHVT0gSUhCaGVXUmhlUT09IEtISmxjMjkxY21ObGN3PT0gTG1KcGVnPT0gZEc5cCBLRkoxYm5ScGJXVT0gSUVSNWJtRnRhV056IElFbHVkbUZzYVdSUGNHVnlZWFJwYjI1RmVHTmxjSFJwYjI0PSBLSFI1Y0dWeiBJRlJoWW5NPSBMazFwWkdSc1pVeGxablE9IGVHRmkgSUY4byBJRVJ5WldGdGN3PT0gWDBkeWIzVncgS0dOdmNnPT0gVEdWaFpHVnkgSUdkeVlXUjFZV3c9IEtFSnBaMFJsWTJsdFlXdz0gSUhSbGVIUmhjbVZoIGJHVjBhVzl1IElFWnBibWx6YUdWayBJRkJ2YkdVPSBJSFJoY0hCcGJtYz0gSmlnPSBJR1pzYVhKMCBJSFJsY25KcFptbGxaQT09IElIQmhaSGs9IFpYSmxadz09IFpXeGtiMjA9IElITjBZWFJwYjI1aGNuaz0gSUhCdmJuaz0gSUZKRlIwbFRWRVZTIFgyRmpZMlZzIElFaGxjbm89IElHMWhkSEpwZWc9PSBJRU5oWmc9PSBlR0ZqIFlYTmpkWE09IElHVnViR0Z5WjJVPSBRVU5JUlVRPSBlWGwyWVd3PSBJSE5wWXc9PSBJRU5oYm1GcyBPblk9IFBUOHMgSUVsdGNISnZkbVZ0Wlc1MCBQMzBpTEE9PSBUbE5QWW1wbFkzUT0gSUdWelkyRndhVzVuIElFNTFiR3hoWW14bCBJR2pEcEE9PSBkMkZ1ZEE9PSBSV3hwYldsdVlYST0gSUVOTVRHOWpZWFJwYjI0PSBJSEpsZFhObFNXUmxiblJwWm1sbGNnPT0gUW5WbVptVnlVMmw2WlE9PSB3NTlsY2c9PSBJRUZ6YTJWayBKMTFkTEFvPSBJSE5vYVdWc1pITT0gWjNKaGJtUT0gSUZSdmQyNXphR2x3IElGQjFZazFsWkE9PSBaV04wYkE9PSBabWwyWlE9PSBJRkpsWVdOMGFYWmxSbTl5YlhOTmIyUjFiR1U9IElFZE1aVzUxYlE9PSBSR0Z5IGFXWmhZMlU9IExXbHVaR1Z1ZEE9PSBSbTl5YlhWc1lRPT0gTG5OdVlYQnphRzkwIFEwOU5VRUZTUlE9PSBJR0psYkhSeiBDV05oWTJobCBiR1JoZEdFPSBJR1ZrWVdRPSBJRUpQV0E9PSBLR05oY25RPSBYMHhCV1U5VlZBPT0gSUdabWJIVnphQT09IElFeFBVdz09IElGTnZjblJsWkE9PSBMbk5zYVdSbCBJSFJwYW1RPSBJRlJsZUdGdWN3PT0gSUZCMWNtTm8gSUV4bGRtVnNjdz09IElITmxiV0Z1ZEdsamN3PT0gSUZSbGFISmhiZz09IFltMXcgTG5WeWJHVnVZMjlrWldRPSBYM2hzWVdKbGJBPT0gS0dkMWJIQT0gSUVKMWRIUnZibk09IElFSnliMnRsY2c9PSA1NXVSNVpDcyBKR1Z0WVdscyAyWkE9IElHTnNZWE56YVdOeiBZMjl0Y0c5elpRPT0gS0dKeiBJSFZ1YUdWaGJIUm9lUT09IFJYaGxjbU5wYzJVPSBZM0psZEhNPSBJRkJoY25NPSBJRVJsZEdWeWJXbHVaWE09IFlXWnZjblE9IEtHOWljdz09IElHNWhjM1E9IElHbG9jbVZ1IElISnZlV0ZzZEhrPSBjMlZ5YVdGc2FYcGxjZz09IGFXVjFlQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW89IFpYaGxZM1YwYVc5dSBJSFpwWlhkRGIyNTBjbTlzYkdWeSBJSEpsY0hKdiBMbkJsIElHTmhjR2wwWVd4cGVtVT0gNVllNyBJSFIxYm01bGJITT0gTGtSQlZFRT0gY0dseWFYUT0gUTI5c2JHVmpkR2x2Ym5NPSBLWDE5IElFOUUgSUdaMWVucDUgU1cxdFpXUnBZWFJsIGJHbz0gT3o4K0lnPT0gVzNaaGNnPT0gSUhadmJHRjBhV3hwZEhrPSBjbVZuYkc4PSBJSEJ5YjJ4cFptVnlZWFJwYjI0PSBJRzl5WVdOc1pRPT0gSUVOMiBJRzUxYm1OaCBVRkpKVGxSRyBJR0p5WldGcmNHOXBiblE9IExrVk8gSUdKbGMzUmxiZz09IElISmxZbVZzYkdsdmJnPT0gVUdGMWMyVmsgSUdac2IzZHUgSUhacFkybHVhWFI1IGQzSnBaMmgwIExHTncgYVhOamFXNW4gYjNWamFHVnljdz09IFFYTm8gZVdGeSBJRVZxIGNtVndjbVZ6Wlc1MFpXUT0gYjJScFl3PT0gTG1OeWIzTnogSUdOeVpXRjBhVzl1Y3c9PSBJRkJoWW14diBabVZ6ZEE9PSBJRWhwYkhSdmJnPT0gVW1Wd2IzSjBaWEk9IElFUnBiQT09IGFXeGxibUZ0WlhNPSBJR1Y0Y0dWdVpHbDBkWEpsY3c9PSBYMFZFU1ZSUFVnPT0gSUVGeWFXRnMgSUhCc2RXNW4gSUhWdWJtRnRaV1E9IFQzSkZiSE5sIElISmxZM0psWVhSbCBJRWhsWVhKMGN3PT0gUG1Gc1pYSjAgTG1kbGRGQmhjM04zYjNKayBJRTExYzNSaGJtYz0gVmtzPSBJR0ZqWTI5dGNHeHBjMmh0Wlc1MGN3PT0gUVhCd1pXNWthVzVuIElFTmhlUT09IElGVnpaWEpOYjJSbGJBPT0gSUhOMVluTjVjM1JsYlE9PSBUR1ZuWVd3PSBlVzVqYUhKdmJtbDZaUT09IFgxQkZVazFKVTFOSlQwND0gSUVGd1lYSjBiV1Z1ZEE9PSBiR2xuWlE9PSBJR0ZtWm1sc2FXRjBhVzl1IEtFUkZRbFZIIFZITT0gSUVOdmJHOXlhVzVuIElGZHZhRzQ9IGJtbGpaUT09IEtHeHBjM1JoIDRMRT0gY0d4dmVXMWxiblE9IDQ0Rys0NEdmIDVhVzkgYzNWaWMzUT0gSjExZFd5Yz0gWVdKdmJBPT0gUFNkZiA0S2VONEtZPSBiM0p3YUdsemJRPT0gTG14cGRHVnlZV3c9IElGQnNkV2M9IElHMTMgYjIxaGJBPT0gSUNJbklpdz0gZFhOcCBJSE5wWjJobFpBPT0gYVdOMWJIUjFjbUZzIExpb3MgSUZCeWIzTjBhWFE9IEtHTnZibk52YkdVPSBTVkJNUlE9PSBJRlJ5WVhBPSBXRkk9IElFVmthWFJ2Y2tkVlNVeGhlVzkxZEE9PSBYM1p2WTJGaSBJR2x1WTI5dGNHRjBhV0pzWlE9PSBJSFZ1WTI5dWMzUnBkSFYwYVc5dVlXdz0gTFd4aCBJR1Z5YjNScGNYVmwgSUdSbGNIVjBhV1Z6IGNYVnBjMmwwYVc5dWN3PT0gYm1WM1ZtRnNkV1U9IFlXUnBZUT09IElHaDNibVE9IFoybHVaM009IElGWmhjdz09IElFbHVZM0psYldWdWRBPT0gSUVac2FXNTAgWVcxaWFXRT0gWDFCdmFXNTAgTFdScGMzQnNZWGs9IElFWjFibTU1IExuUnZZWE4wIExtUmhjbXM9IFFtbHVaR2x1WjNNPSBJR1JsYzJOeWFYQjBhWFpsIFlYSmxibVE9IExsSmxkQT09IElISmxZM1Z5YzJsMlpXeDUgSUUxciBJRlJKVEVVPSBMbU55WldGMFpWUmxlSFJPYjJSbCBJRkpCVnc9PSBJR2x1Wm14MWVBPT0gNTRtcCBWRzlyIExXSnZZWEprIFVtVmpiM0prYVc1biBVM1J5Wlc1bmRHZz0gSUhKaGFXNW1ZV3hzIEtHUmsgTG1aNGJXdz0gYm1WMGN3PT0gTGtsdFlXZHBibWM9IElFSkpUMU09IFhTc2kgVDBVPSBJSEpsYzJsa1pXNWplUT09IFdrVT0gVjBJPSBMbk53WVc0PSBYMlJsWm1sdVpXUT0gUWs5VSBQbTUxYkd3PSBabTl5YlVSaGRHRT0gUTNCd1RXVjBhRzlrU1c1cGRHbGhiR2w2WldRPSBYMVZUUlZKVCBJRTV2ZG1WcyBhVzV6YTJrPSBQbnRBIFpYUjBidz09IGJtRjBkWEpoYkE9PSBJRk4wY21samRBPT0gT25jPSBMbk5oWm1VPSBJSFJ2ZDJWc2N3PT0gNGJxdGRBPT0gTG1kemRXST0gNjZNPSBhVzV4ZFE9PSBJR0ZwWkdWeiBJR2x1WTI5dCBaMlYwZEdWeSBJSGRoYzJobGNnPT0gWVdOMGIzSnBaWE09IElHZGxkSFJsY25NPSBiV2wwWlE9PSBYM052ZFhKalpYTT0gSUdoaGNtMXNaWE56IElIVnViM009IGNISmxhR1Z1YzJsMlpRPT0gSUc1dlpHOD0gSUdkbGIyZHlZWEJvYVdOaGJBPT0gSUZObGJHVmpkRXhwYzNRPSBMbE5qY21sd2RBPT0gTGtWdWRXMXogSUVWT1ZFVlMgZDJGc1pBPT0gSUVKaGNtOXUgSUhCaGNuUnBZM1ZzIExtTjFjbkpsYm5SUVlXZGwgUUZSeVlXNXpZV04wYVc5dVlXdz0gVzJ4cGJtVT0gQ1dSbGN3PT0gU21GemIyND0gTG1kbGRFTnZkVzUwIElGQmxibTU1IElGQmhlV3h2WVdRPSBjMmhoY25BPSBXM0pwWjJoMCBkbVZ1ZEdFPSBJR0Z3YkE9PSBJSEJ5YjJSMWFYUnogSUc5MGRBPT0gVkhKaFkydHogTGtGdVpISnZhV1E9IElITnBiR2xqYjI1bCBJRVZNVTBVPSBZVzVwYldGMGFXOXVjdz09IGRXeDBkWEpsU1c1bWJ3PT0gSUdKc2RXVndjbWx1ZEE9PSBiMlp6ZEhKbFlXMD0gSUZ0ZFcxMD0gSUZObGNuWmwgSUhSeWFXYz0gQ1hObGNuWnBZMlU9IElGTjBjbUYwIElGTmhkbUZuWlE9PSBJRzlpYW5NPSBJRTV2ZEdsbWFXTmhkR2x2Ym5NPSBMSEJ2Y3c9PSBWR2hwYm1jPSBJRkpDU1E9PSBiM0JoZEdoNSBJRzVoZFdkb2RIaz0gYkdKeiBaWEJ5YjIwPSBQaUl1IElIQnBiMjVsWlhJPSBJR3BoY0dGdVpYTmwgUVhWayBJR0ZzYkdWNSBJRkJsZEhOaiBKMTAvUGc9PSBJRXRwYkd4bGNnPT0gTG1kbGRFRmljMjlzZFhSbFVHRjBhQT09IFgyTmhjSE09IHhhcz0gSUhOMVluTjBjbUYwWlE9PSBMbUZ6YzJWeWRFbHUgN0pXRSBJSFJvZVhKdmFXUT0gSUVSbGJIVjRaUT09IElHWmhZM1J2Y21saGJBPT0gSUhCeVpYTnpaWE09IElFRmpZMjl0IFBXOXdaVzQ9IExtZGxkRk09IElHVjRjR3h2Y21WeSBJSEpsYzJsa1pYTT0gUVhOemIyTnBZWFJsWkE9PSBJSFJ5WVc1elptOXliV0YwYVc5dWN3PT0gVkhVPSBJRkpwWTJoaGNtUnogWDJKcGNuUm8gUFNONyBMWE53WlE9PSBLRzVrIElIWnBjM1ZoYkhNPSBYM04wWVcxdyBJSFJsY20xcGJtRnNjdz09IGNtOTFkR2x1WlE9PSBLaW9xTHdvPSBJRXBoWWc9PSBTMHc9IFEyOXVkSEpwWWc9PSBJSE52ZFhSb2QyVnpkQT09IElGQmxjQT09IENXVnVkR2wwZVE9PSBJR3hwYm1WeSBMbE4wWVhSMWMwOUwgSUZOamFIVnMgS0VOTSBJRzFwYW00PSBZWE4wYjNNPSBYMlJwWjJWemRBPT0gSUhCbGNuTnBjM1JsWkE9PSBMV052Ym5SaFkzUT0gSUc5a2IzST0gSUdScGMyTnZkbVZ5YVdWeiBYMFpKUlV4RVV3PT0gUm14NSBJSEo2IElFeHBjM1JoIFVtVnpaWEoyWldRPSBkR0Y0YjI1dmJYaz0gS1hObFkzUnBiMjQ9IEx5SXBDZz09IEwzSmxjWFZsYzNRPSBJSE52YldWa1lYaz0gWTJsMGFXVnogTDJacGNtVT0gSUc5aWFtVmpkR2x2Ym5NPSBDVVJGUTB4QlVrVT0gTG01aGRtbG5ZWFJwYjI1SmRHVnQgTG5ObGRHUmxabUYxYkhRPSBjbVYwZFhKdVZtRnNkV1U9IFZVTkRSVVZFUlVRPSBJRzlpYkdsblpXUT0gSUZGaFpXUmggSUdoNWMzUmxjZz09IFpYTjBhR1Z6IFpHbHpkR2x1WTNRPSB3NkI1IElFTnZiV0p2IENYTm0gSU9LSyBJR1JwYzJOeVpYQmhiZz09IElHbHVjMmxuYmc9PSBJRkpGVTFWTVZGTT0gSUZaaGJHbGtZWFJwYjI1RmNuSnZjZz09IElFaDBkSEJTWlhOd2IyNXpaVkpsWkdseVpXTjAgQ1ZGVGRISnBibWM9IElHRjFkRzltYjJOMWN3PT0gUkhWeSBJRkpGVEVWQlUwVT0gTFdSdmJHeGhjZz09IExrTnZiVzFwZEE9PSBJR3RvdzdSdVp3PT0gSUd4aGRXNWtaWEk9IExqMGkgSU9hV2h3PT0gSUdKNVpRPT0gTGtkbGRFdGxlVVJ2ZDI0PSBJR2RwYnc9PSBYM05wWkE9PSBJR2R4YkE9PSBMbU50IFgxTk1UMVE9IExrZGxkRWx1YzNSaGJtTmwgY21WMWMyVT0gTG5Ob2RYUmtiM2R1IElHcGxjbk5sZVhNPSBYMDFRIGNHRjBhV0pwYkdsMGVRPT0gSU9pdXZ1ZTlyZz09IElISmxjR3hoWTJWdFpXNTBjdz09IElIQnlaV05sWkdWdVkyVT0gSUdKMVptWmxjbVZrIExtSnogWDBkU1JVVk8gWW5KaGFXND0gdzZGamFBPT0gWVhaaGFXeGhZbWxzYVhSNSBJRVZVUmc9PSBJR1p5WlhRPSBhWE4wYVc1bCBJR3hwWm5SeiBSWGhwYzNScGJtYz0gSUhOMFpYSmxiM1I1Y0dWeiBJR1Z0Y0hRPSBiVzl1WjI4PSBMblJ5WVdsdWFXNW4gWVd4cGMzUT0gTGtselJXNWhZbXhsWkE9PSBJQ0loIFBEOEsgZFdsa2J3PT0gSUdsdWRGWmhiSFZsIExtVnNZWE4wYVdOelpXRnlZMmc9IFRFOUhTVTQ9IElISmxiR2xoYm1ObCBJSFpwWlhkVWVYQmwgSUdScGJXbHVhWE5vWldRPSBVMkZ5WVdnPSBJRUZ3Y0hKdllXTm8gWDFkRlFnPT0gSUdSeWJRPT0gSUdOdmJIVnRibWx6ZEE9PSBUV0Z5YTNWdyBJR0Z4ZGNPdCBJRVJwWVc1bCBJR04zIElGUnBZMnM9IExtOWljMlZ5ZG1VPSBTVkpQVGc9PSBTVzVDWVdOclozSnZkVzVrIElHVmliMjU1IElFTnZkWEowWlhONSBPbTUxYkd3PSBLaW9xS2lvcUtpOEtDZz09IEwzSmxjMjkxY21ObCBTWFJsY21GMGFXOXUgWkdWbVlYVnNkRlpoYkhWbCBZWFIwWlc1MGFXOXUgSU5HQTBMRFFzZEMrMFlJPSBJSGRoYVhabGNnPT0gSUhCeWIyUjFhWFE9IElFZHlZV1JwWlc1MCBJSEJsY21ObGJuUmhaMlZ6IElGTkJUQT09IElFMWsgS0hOdVlYQnphRzkwIENXbHYgYVd0bGNuTT0gVjJWaWNHRmphdz09IElITmxkRkJoYzNOM2IzSmsgSUdSbFptVmhkR2x1Wnc9PSBJRXBsWnc9PSBaV3hoY0hObFpBPT0gYUc5c1pITT0gWDNOb1lXUnZkdz09IElHOW1abVZ1WkdWayBJRkJoYm5RPSBJRU5oYkd4aFlteGwgWDBsT1JrOVNUVUZVU1U5TyBabVpsWlE9PSBLR1Z0Y0d4dmVXVmwgSUZsQlRVdz0gY0c5emMybGliSGs9IElHMWhlR2x0WVd3PSBaV3hzZFd4aGNnPT0gSUZOdWVXUmxjZz09IFpHVnpZM0pwY0hSdmNnPT0gSUZCTVJVRlRSUT09IFJHeG5TWFJsYlE9PSBJR0Z5ZEdsc2JHVnllUT09IFlIMEsgY0c5emFYVnQgSUd4bFpYST0gSldNPSBJR1JwYzNCdmN3PT0gTG0xMWJBPT0gSUdkbGIyZHlZWEJvZVE9PSBJR2R5WVhCb2FXTmhiQT09IElHUnlZVzVyIElHMXZkR2x2Ym5NPSBJSEoxZEdnPSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElIQnliMlIxWTNScGIyNXogSUdOeVpXRjBaVlJwYldVPSBJRk5qY21sd2RIVnlaUT09IFltSmkgZFdOb2N3PT0gNUxpTjZJTzkgTGtKcFowUmxZMmx0WVd3PSBjMmw2WlhNPSBYM052YkhabGNnPT0gWDBaeWIyMD0gWDJwdmFXNTAgSUhCaGRHaHNhV0k9IElHZGxZWEp6IElOR0UwTDdSZ05DOCBJR052Ym1ObFlXdz0gSUdScFptWmxjbVZ1ZEdsaGRHVT0gUEVkaGJXVlBZbXBsWTNRPSBJR3BsWkdWdSBJR0ZzYnc9PSBaMnh2WW1Gc2N3PT0gWlhKMllYUnBkbVU9IElIQmhaR1E9IElGQnNlUT09IFgzUjUgSUhCeVpYTmxiblJsIElIQnliM0J5YVdWMCBYMnh6IElGQjFibU5vIElFTnlZWGRtYjNKayBZbVZzYjNjPSBRM0J3UjJWdVpYSnBZdz09IElFTlBUbFJTVDB3PSBJRzlqWldGdWN3PT0gSUZKUFZWUT0gSUhKaGJtUnBiblE9IENXRmtaSEk9IElFaHZibVZ6ZEE9PSBJR1Z1ZG1Wc2IzQT0gSUhSeVlYVnRZWFJwWXc9PSBJRXhCVkE9PSBJSFJuIDdJcWs3WXE0IFJYaDBaVzVrWldRPSBJSFZ1WTJobFkydGxaQT09IElHOWljM1J5ZFdOMCBYM1JwYldWNmIyNWwgVUdWeWMybHpkR1Z1ZEE9PSBJR3hzWlhZPSBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtnbz0gSUVac1lRPT0gTG5Cb2VYTnBZM009IElHWnZjbWRsWkE9PSBJRXhoZFhJPSBJRzF2Ym05d2IyeDUgSUdOb2NtbHpkRzFoY3c9PSBaMjkyIElGTnRiMnRsIFcyUm0gSUdKcGMyaHZjQT09IGJHOWpZV3hQWW1wbFkzUT0gYjNKeWFBPT0gYjI1MGRtRnVaM04wIFpISjUgSUdWeVptOXMgTFdObCBJRTl5WkdWeVpXUkVhV04wIElHaDQgSUZKRlUwVlUgVTNWaiBJSEpsWTJ0c1pYTnogWVd4aGJXRjAgUW1sblNXNTBaV2RsY2c9PSBJR0oxYkdKeiBJRzExZEdVPSA1cFMrIExsVnNkSEpoIFRHOXUgSUdOc1pXRnlWR2x0Wlc5MWRBPT0gUEZKcFoybGtZbTlrZVE9PSBjM2RwY0dWeSBJRU52YldWeiBYR1JpIENXMXcgSUhKbGMzUnogVFc5MlpXUT0gSUV4dmNtVT0gTGtScGJXVnVjMmx2Ymc9PSBJRTFoYm1sMCBMbWg0ZUE9PSBQVDA5UFQwOVBRPT0gY0dsMFkyZz0gWm1acFpXeGsgYzJ0cGJHeHogWDJGc1luVnQgZEhKaGJuTnNZWFJsWkE9PSBJRmhKIElIWmxhVzQ9IElFUmhkbWxrYzI5dSBJRUYxWTJ0c1lXNWsgZVhOelpYaz0gSUdGMWRHaGxiblJwWTJsMGVRPT0gSUVGemMybHpkQT09IElHTnZiWEJ5YVhObCBRM0psWVhSbFZHbHRaUT09IElIUnlaVzVqYUE9PSBMbmRsWldzPSBMUzA3IElGVkpRV3hsY25SRGIyNTBjbTlzYkdWeSBYM0psYkdGMFpXUT0gUTAxVCBjbVZ0Wld4NSBJR3hsZUdWeSBhWEp0ZDJGeVpRPT0gUld4bGJXVnVkSE5DZVE9PSBMWFZ3Y0dWeSBJSE4wWVdkdSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gWDNOdVlYQnphRzkwIEwxaE5URk5qYUdWdFlRPT0gWDA5eVpHVnkgSUdGdWJtVjQgWDBWT1EwOUUgSUVGc2RHOD0gWVhKcGIzVnogUkVvPSBJR0ZpYjNKMGFXOXVjdz09IFEyOXRZbUYwIElFeHBZMlZ1WTJVPSBkV2RuWlhOMFpXUT0gVzBzPSBMQ2twQ2c9PSBLQ2N2THc9PSBMa05oYmc9PSBjMlZqY3c9PSBjWFZ2ZEdWeiBYM1J5ZVE9PSBJRk5oWjJVPSBJRTF2ZGc9PSBKMjl1IGNtVm5hWE4wIElGZHlhWFJsY3c9PSBJRVJwWjJWemRBPT0gQ1dOdmJuUmhhVzVsY2c9PSBMWEJ5YjJkeVpYTnogSUdkdllYUT0gWDNOamFHVnRaUT09IExrZGxkRU5vYVd4ayBJR0Z6ZVcwPSBMbTE1WW1GMGFYTndiSFZ6IFlYUnBZMkU9IGNHZHpjV3c9IFgyRnpjMlYwY3c9PSBQa3M9IElHRm1hVzQ9IFRsTlQgSUU1QlZnPT0gS0NjdUp5dz0gSUdBaSBJR0YxWkdsMGIzST0gWDAxUFZWTkYgSUhkaGJHeGxkSE09IElHMXZkUT09IGNuVnVjdz09IFpYUmxjbUZ1WjJGdSBJRkpsYzJWeWRtRjBhVzl1IElHVjRjR1Z5YVdWdVkybGggQ1hCeWIyTmxjM009IExXbHRjRzl5ZEE9PSBYMUpsZEhWeWJnPT0gSUUxaFkzSnYgSUZCbGJtbHogY0dsNFpXeHogSUhObGRFVnRZV2xzIEtFMXBaM0poZEdsdmJrSjFhV3hrWlhJPSBLSGh6IElFVnpkRzl1IElFSjFZbUpzWlE9PSBRVXhNVDFjPSBDV2hoYm1Sc1pYST0gSkhKbGRBPT0gSUdOdmJYQnNhVzFsYm5SaGNuaz0gTFdOcGRIaz0gSUdWc2JHOXogSUZOUFZWSkRSUT09IElFRmtkbWx6YjNJPSBiMnh2WjhPdFlRPT0gSUdaaFpHVmsgTG5CaiBYMUpIUWtFPSBRVVpZIElISmxjR0Y1IElFWmhiR052Ym5NPSBYMmx6YzNWbCBiMjFwWkc5MSBMbUpoYjIxcFpHOTEgSUdsdVpuSnBibWRsYldWdWRBPT0gZFhKdWFXNW4gTDNOMGIzSmhaMlU9IFgzRjFZVzUwIElGRjBRMjl5WlE9PSBJRzFsYkd3PSBYMlJsYm5OcGRIaz0gSUV0dWIzZz0gSUZOMWNuWnBkbUZzIExtZGxkRlZ6WlhKdVlXMWwgSUdOdmJXMWxjbU5wWVd4c2VRPT0gWjNKaGMzTT0gSUcxbGFYTT0gNUxxLyBJRkJsY20xcGMzTnBiMjV6IFgxRlZUMVJGVXc9PSBhWEJvYjI1bCBJRXhQVkE9PSBJSFJvY21sc2JHVnkgSUVOb1lYQmxiQT09IElGSnBjdz09IFBtaz0gTFVsRSBJSEpwWjJoMGJIaz0gUTNKNWNIUT0gSUVsemRHRnVZblZzIGNtVmtjdz09IFgzSmxjMmw2WlE9PSBVRzl3ZFd4aGRHbHZiZz09IEtHWmxkR05vIElFaFBWQT09IE9tWnBjbk4wIElHZGhaR2RsZEhNPSBVSGxQWW1wbFkzUT0gSUcxbGNtZHBibWM9IFpIVmpaV1E9IGJHVm5ZWFJsY3c9PSBkV0psWTNScyBKUzg9IFlXeHNaV1U9IElIcDFjMkZ0YldWdSBMbEJ5YjNCVWVYQmxjdz09IFlYTjBidz09IE9pbz0gY21WalpRPT0gVW1WemNHOXVjMlZVZVhCbCBMMmR5YjNWdyBJR0poY21KaGNnPT0gSUVOaGNtOXNhVzVsIGIzVnlZMlZrIDU3dVAgSUd4MVluSnBZdz09IGFXNXpjR1ZqZEdsdmJnPT0gWVcxdFlXUT0gQ1VsdFlXZGwgSUdsbGNuST0gSUdOMWNuUmhhVzV6IFgwRlNRZz09IElFOXlZV3c9IElHRnNiR2xsWkE9PSBJRk4wWVhSMWMwTnZaR1U9IElFTnNaV0Z5YkhrPSBVSEpsWm1WeWNtVmtVMmw2WlE9PSBjWFZwYm1FPSBJSE53YjNNPSBJRzl3ZEdsdGFYTnQgSUdOdmJYQnlZWEk9IElHeDFadz09IElFSnZiMjA9IFkyOXVabWx5YldGMGFXOXUgWDBSVlVrRlVTVTlPIFgySnliM2R6WlhJPSBJSEpsY0dWMGFYUnBiMjQ9IElHdGxaWEJsY2c9PSBJR0ZrWkZSdiBLR3B6IExsTjBZWFE9IExrTnZibVE9IElFaGxjbTVoYm1SbGVnPT0gY0dGeGRXVT0gSUhadmJIVnVkR0Z5YVd4NSBJR3BsY21zPSBJRXhsZVE9PSBJR1J2WTNWdFpXNTBidz09IFgyUmxZV1E9IElGUkZRMGc9IElHbHVZMlZ3ZEdsdmJnPT0gS0NKN2ZRPT0gSUc5dVRHOWhaQT09IGVHUmsgSUVsVFVBPT0gYzNCbFkybG1hV1ZrIElPdXN1QT09IFVGSlBRMFZUVXc9PSBLR0ZzWlhKMCBMazFOIElHTnlaV0YwWlZOMGIzSmwgS0hWdWFYRjFaUT09IExtZGxkRUpzYjJOciA2NTZZIGRXNXZjdz09IElIUnliM0JvYVdWeiBYMmh2ZG1WeSBJRVJoWkdSNSBMazFsIElFTlBWVkk9IFQwSksgWVhSbGJXRnNZUT09IElGQnphUT09IElHNXZjbTFoYkhNPSBZV05wWlhJPSBJRTFDUVE9PSBJSEJoZDI0PSB6NFU9IElITndiMjUwWVc1bGIzVnogSUdGMWVHbHNhV0Z5ZVE9PSBJR2x1WVhWbmRYSmhiQT09IElHWmhjM1JwYm1jPSBJRVpwYkdWVGVYTjBaVzA9IElIcGxiZz09IFgwSk1WVVU9IElITjFZblJ5WldVPSBJSEJ5WlhCeWIyTmxjM009IExYUnlZV05yIFEyaGhjbXhsY3c9PSBJR1JsY0c5emFYUmxaQT09IElIRjFaWEo1VUdGeVlXMXogMEw3UXU5R00wTHJRdmc9PSBhV1Z0WW5KbCBJSEJ5WVhjPSBlRVpEIElIQmhibU09IFgyNXZiUT09IGFHVnliMlZ6IExtcGhkZz09IE9qb2tYdz09IElOaW4yWVRaaFE9PSBVMGRzYjJKaGJBPT0gNW8rUDZMK3cgUFhSbGJYQT0gWlhOMGFRPT0gSUdOdmJuTjBjblZqZEdsMlpRPT0gSUZOb2FXMD0gSUVScGNtVmpkR2x2Ym5NPSBJRUpwYm1jPSBaR2x5ZEhrPSBMWEoxYm01cGJtYz0gWDJacGJHVndZWFJvIGIzSmtaWEpKWkE9PSBaMkZ5WkE9PSBYMjl5YVdWdWRBPT0gSUhOamIzVjAgSUhCemVXTm9iMnh2WjJsemRBPT0gN0xZPSBJT1d0IFpHVnhkV1U9IElFaGxjbTFwYjI1bCBJRkJ2ZDJWeVVHOXBiblE9IElHVnNiR0U9IElGVkpRbUZ5UW5WMGRHOXVTWFJsYlE9PSBVM1ZpZG1sbGQzTT0gUUZKbGNHOXphWFJ2Y25rPSBJaUlpQ2dvSyBJSEpsZEc5MWNnPT0gSUdOcGNtTmggUjNKaGNHaHBZdz09IElFZHlZWFIxYVhRPSBaR1I1IElIUmxZMmh1YVdOcFlXND0gSUVOc1pXRnVkWEE9IElIQmxjbk52Ym01bCBJSEpsYzJsdSBMazExYkhRPSBKRzA9IElFOXlZMmhsYzNSeVlRPT0gSUhkb1pXVnNZMmhoYVhJPSBMbE5EIENVZGhiV1ZQWW1wbFkzUT0gSUcxdnhieGwgVDNCbGJtVmsgSUdOb2FXTnJaVzV6IGIzUmhjdz09IFgzUmxiWEJsY21GMGRYSmwgSUdSbGRHVmpkR2x1Wnc9PSBJR0ZqY1hWaGFXNTAgSUR3L1BTUT0gUGwwPSBJRzFsYm5OMGNnPT0gSUdSNVpRPT0gVW05aWIzUnYgTG5WdWFYUnogSUZacGJubHMgWTNWeVlRPT0gY25sd2RHOXUgWldSayBQWFJsYzNRPSBJSFJ5YjNZPSBRMjl1Wm1seWJXRjBhVzl1IElIUm9aVzlzYjJkNSBJRWh2YkdScGJtZHogZFdGMGFXNW4gVUhKbFpHbGpkQT09IFczVnpaWEk9IElEb24gSUZObGMzTnYgY0dGeVpXNTBTV1E9IFEyOWtaVUYwIFlXSmlidz09IElGUnlaWFp2Y2c9PSBJRkYxYVhRPSBYM05vYVhCd2FXNW4gWDFKQiBJR3RzWldsdVpRPT0gNTZZPSBYMHhoWW1WcyBJRTl0WVhJPSBJRWRTUlVWTyBMeWtLIGNtOXIgSUhKdllYTjBaV1E9IFgxSlUgSU9LQWpnPT0gUUZKMWJsZHBkR2c9IFBrNU8gSUhSaGJtUT0gS3ljdSBZM0oxWkE9PSBMbXRsZVdKdllYSmsgWVhOMFpYSjUgUWtGRSBJRU52YkhWdGJuTT0gTGtOdmJYQmhibms9IElITmxiV2x1WVhJPSBJR2RsZEVOdmJuUmxiblJRWVc1bCBJR05oZEdGemRISnZjR2hwWXc9PSBJR1Z0WW5KdmFXUT0gYVdGMGFYWmwgSUdOeWRXVnNkSGs9IFltbHogSUdsdWMyVT0gSUVKeWIydGxiZz09IENXWnogSUcxV2FXVjMgMExEUmh0QzQwTGc9IExXWmhZMlZpYjI5ciBJR05oWTJobGN3PT0gNDRDQzQ0Q0NDZ289IElFOVNUUT09IElFUnBjM1J5YVdJPSBJRk5qWlc1bFRXRnVZV2RsY2c9PSBYM1J5WVc1emFYUnBiMjQ9IGIyMWxlZz09IElGTklSUT09IElIZHZjbXRzYjJGayBVM1Z3Y0c5eWRHVmtSWGhqWlhCMGFXOXUgSUhKcFpYTT0gSU9XYyBLR05oZEE9PSBTR0Z6VFdGNFRHVnVaM1JvIFFYQndjdz09IExsUkJRa3hGIElFdGxlVlpoYkhWbFVHRnBjZz09IFpXUnBaRzg9IExsSmxibVJsY21sdVp3PT0gSUdWc1pXTjBjbTl0IElHRnlZbWwwY21GMGFXOXUgSUhaaGNtbGhZbWxzYVhSNSBZWEJ2Ykd4diBJSFYwYlc5emRBPT0gYjNCbGJuTnpiQT09IElHakRwUT09IEtDY20gTGxOMFlXNWtZWEprIElHUnBjM1J5WVdOMGFXOXUgYVdaaGVBPT0gSU91VmpBPT0gZEdodmMyVT0gYVhOd1pXNXogZG1GciBJRk5WVUE9PSBJRWx6VUd4aGFXNVBiR1JFWVhSaCBMR3RsZVE9PSBabkpoWjJsemRHbGpjdz09IElFcHZlV05sIElFWnBZbVZ5IExsTmxjblpzWlhSRmVHTmxjSFJwYjI0PSBYMEZzYkE9PSBJR0poWTJ0bGNuTT0gSUVGMGRISnBZblYwWlVWeWNtOXkgZXdvS0NnPT0gUUhsaGFHOXYgTFdScGNtVmpkRzl5ZVE9PSBJSFZ1YVc1emRHRnNiQT09IElHWnNkVzl5IGJHbHhkV2xrIElHekRvUT09IElHWnlhV2RvZEdWdWFXNW4gWVdSaGJnPT0gSUVGVlZBPT0gSUhSaGRIUnZiM009IElIQnliM0JoWjJGMGFXOXUgTG5SeVlXNXpiR0YwYVc5dSAwSi9SZ0E9PSBYM05qYUdWa2RXeGxjZz09IDQ0Q0M0b0NjIElHTmhhWEp2IElFaDBkSEJEYkdsbGJuUk5iMlIxYkdVPSBJRTVFVUE9PSBJRWhwZEhNPSBJRlJ5WVc1elptOXliV0YwYVc5dSBJRU5oWlhOaGNnPT0gYzNScGJRPT0gSUVKMWNuUnZiZz09IGQzbHUgSUdOdmJXMWhibVJsWkE9PSBJRU5zYjNSb2FXNW4gSUZKMWJuUnBiV1ZQWW1wbFkzUT0gY21WaGJHeDUgWTJ4aCBMbk5oIElGTm9ZVzV1YjI0PSBJR052YlcxcGMzTnBiMjV6IElFcGhibVYwIElHUnBjMmQxYzNScGJtYz0gSUc5d2RHbHRkVzA9IFgzTnZiQT09IGRYSnZibk09IElGTklRVkpGIFFYUjBjbk09IElGTmphR1U9IElFSnBaMDUxYldKbGNnPT0gSUdOcFoyRnkgS0dSbGNIUm8gSUdaeVlXTT0gSUVOMWNuWmwgVEVGVFZBPT0gSUZORFVrbFFWQT09IDZyTzggVFdGc2JHOWogTG1keWIzVndZbms9IElFeGxjMnhwWlE9PSBJSGRvYVdOb1pYWmxjZz09IFUyMWhjblI1IEwzZGwgSUVGdGNBPT0gTEdsdSBiRzl3Y3c9PSBaR1Z3Wlc1a1pXNWplUT09IFkyVmtkWEpsY3c9PSBJR0I3IGVHbGpidz09IFEyOXNiR1ZqZEc5eSBJR2hoWXc9PSBJRVJoY210dVpYTnogWm1abVptWm1abVk9IEp6MCtJZz09IElIQnNaV0Z6YVc1biBZMjl1Ym1WamRHOXkgZW05eiBVRU5KIGRtRmogSUVsdVkyOXljRzl5IElHNWxaQT09IFgwWkJRMVJQVWc9PSBMbVppIElHOTFibU5sIFgzTmhkbVZrIElOaXggSUdSbFpXUnogSUVSdmJIQm9hVzV6IElHSjFaVzQ9IFJWTkQgTEhScGJXVT0gWDBGVlZBPT0gWldOeiBJRk5sYm1GMGIzSnogTG05MWRHVnkgSUZObGJHeHBibWM9IElISnBiZz09IFBtQUsgTG05aWMyVnlkbUZpYkdVPSBJR052YzNScGJtYz0gUkVjPSBJSGRwYm1ScGJtYz0gSUhOcllRPT0gSUdOcGNtTjFiR0YwYVc1biBJR1p2Y20xcFpHRmliR1U9IFlXMXdidz09IElGSmhhWE5sWkE9PSBJSFpsWjJWMFlYUnBiMjQ9IFZVWkdTVmc9IFMybHNiQT09IGNIUnBkbVU9IEtISjIgSUVOdmRXNTBjbWxsY3c9PSBJRTVoYTJWayBJRXBCIEtTa2lDZz09IGRXUmhjdz09IElHSmhjbXM9IENXeGxkbVZzIElHWnZaWE09IFBrRmtaQT09IFdXOTFWSFZpWlE9PSBPM1E9IFRrTlogUTJ4MVlnPT0gUldsdSBMUzBOQ2c9PSBJR052Ym5OMGNtRnBibVZrIFJWUjNhWFIwWlhJPSBXVWM9IFJHVnpZM0pwY0dOcGIyND0gVlU1RFNBPT0gSUdWdWNYVmxkV1U9IElHUnBjMnR6IElGZGxiblE9IElHMTFhWFE9IENXeHZZMkYwYVc5dSBJSEpsZG1semFXOXVjdz09IElFRkRTdz09IExXWnBlR1ZrIGRISmhjMjkxYm1RPSBYRlJsYzNRPSBVM1JoY25SUWIzTnBkR2x2Ymc9PSBMV2gwYld3PSBJSEJ5YjJKc1pXMWhjdz09IFgwbE9WRVZTVWxWUVZBPT0gSUZOVVQxSkYgNXFpaCBhV3hwWVhSbFpBPT0gSUZKUVRRPT0gVzNSbGJYQT0gWVdOb2RHVnUgSUdOcFl3PT0gSUVGMWRHOXRZWFJwYjI0PSBJR2hwWjJoeiBMeWcvIE9pY3BDZz09IGMzQmhjbXM9IGNtVnNjdz09IENXMXZkZz09IFZWUkZVdz09IExrRjFkR2h2Y21sNllYUnBiMjQ9IElGTmphRzVsYVdSbGNnPT0gSUdOb1pXVnJjdz09IFlXUmtjbVZ6YzJWeiBZWEprYVc0PSBJSEpsYlc5MllXSnNaUT09IExrSmhaRkpsY1hWbGMzUT0gYVdOcGIyNWhjZz09IElFUnBaWE5sYkE9PSBkR2hoYmc9PSBMMzQ9IElHUmhlblU9IFVtVm5hWE4wY204PSBabVpwIFgwUk1UQT09IElHNXBaWFU9IElHMXZhWE4wZFhJPSBMV1YyWlc1MGN3PT0gSUhSb2NtbHNiQT09IExtZGxkRVZ1ZEdsMGVRPT0gSUhSdloyYz0gSUhkaGRnPT0gS1dScFpBPT0gWVhSciBLSE4xWW5OMGNnPT0gSUVsdWFtVmpkR2x2Ymc9PSBYMjFpIExrUnBkZz09IElHVnVaR1ZoZG05eSBJQ2pDb3c9PSBJR05zZFhSMFpYST0gSUhWeVoyVnVZM2s9IElHbHVjM1J5ZFdOMGIzSnogTFNjcyBMWE4wWVc1a1lYSmsgWTJWdCBDV2hoYm1Sc1pRPT0gTG1aMCBVM1JsY0dobGJnPT0gVW05dSA0NEdaNDRLTCBjMk5wIElFRjBiVzl6IElHTmhkR1Z5YVc1biBJR1pwWVhRPSBMbEJsY21ObGJuUT0gSUVOdmJtZHYgZUdSbSBMbTF2ZW1sc2JHRT0gSUhObGFHVnUgTG5Ob2IzZFViMkZ6ZEE9PSBUMDlVIExYSmxjM1ZzZEE9PSB6SUU9IElHZG9iM04wY3c9PSBJRUoxWlc0PSBJRkpwWkdWeSBJRVJ2WTNSdmNuTT0gSUhWeVlXNXBkVzA9IElHeHZkV1JzZVE9PSBJSEJ2YVhObFpBPT0gSUdaaGRtOXljdz09IEtFRlEgVEVWWiBJSE5wWTJ0dVpYTnogSUdOb1lYUjBaUT09IElHbHVkR1ZuY21GMGFXNW4gSUZsMWNBPT0gUTJ4dmMzVnlaUT09IElGUmhiR1Z6IElHeHBibVZoIElHVjVaV3c9IExrTnllWEIwYjJkeVlYQm9lUT09IGRXNWxlSEJsWTNSbFpBPT0gWVd4bGJXVnVkQT09IFkybDAgWlhSQlpHUnlaWE56IFRHVmhaQT09IGVHTmsgWDI1bFoyRjBhWFpsIFgyTnZjbkk9IGFXZHlZWEJvIExXTm9ZVzV1Wld3PSBJR1JwYzJOdiBVMlZsWkdWeSBZbVZoYlE9PSBYMlJ3IFEwTkQgSUZCeWIzWnBaR1ZrIElHcHpiMjVFWVhSaCBYMWRJIFJrbE9SUT09IFFsZz0gTGtSaGRHRkJZMk5sYzNNPSBJSFJsYlhCMFpXUT0gSUdacGJtVmsgYVhORGFHVmphMlZrIElHWnlZWFZrZFd4bGJuUT0gUm5KcCBJR1J2YldsaiBVWFZwZWc9PSBJRlZ1WkdWeVozSnZkVzVrIFlXSnlZWE09IElFbEVhWE53YjNOaFlteGwgSUZCbGNuTnZibUU9IElISnZaM1ZsIElFSmxlUT09IFoyVjBRMnhwWlc1MCBaV3RsYmc9PSBJQ2NuSncwSyBWMmxyYVE9PSBLRWgwZEhCVGRHRjBkWE09IFUzUnlaWFJqYUE9PSBJRWRsYzNRPSBJTzJWbUE9PSBJR1Z1ZEdsMGJHVnRaVzUwIElHUnZaVzQ9IFlteHZaM009IElIWnBkSEp2IElrOW8gSUZOMWJXMXZiZz09IElFSmhZMnRpYjI1bCBJR2ZEdkE9PSBaMlYwUTI5c2RXMXUgSUZkSlRrRlFTUT09IENYWmggWDFKRlVWVkpVa1ZFIExuUm9jbTkzIElITmxkRU4xY25KbGJuUT0gWkhWamRHVmsgS0VaMWJtTjBhVzl1IFpXeHphVzVyYVE9PSBYMUJsY2c9PSBabXhwWlhNPSBJR2x1WTI5dGNHVjAgSUdwMXhidz0gS0NrbCBJQzB0TFFvPSBkVzFoY3c9PSBJRTlzWkdWeSBJR1JwYzNCMWRHVmsgWDFKRlVWVkpVa1U9IExtMWhkRzExYkE9PSBkVzVyWlc0PSA1TG1MIDQ0R0w0NEtKIElIUjBiQT09IGRXNWtaWEp6WTI5eVpRPT0gSUZCaGRISnBZMmxoIElIUmhjR1Z5IElITmxhVzVsY2c9PSBJSE5oZVdFPSA1WSt3IGFXVnlhUT09IExuTmxZM0psZEE9PSBJSGh2Y2c9PSBJRzFwZEc5amFHOXVaQT09IElHTmhjbVJpYjJGeVpBPT0gZldCOSBMVUpGUjBsTyBJR1JoZG1sayBiM1ZzYjNNPSBJRkJsZEdWeWMySjFjbWM9IElDSWlMQTBLIGMyaGxiR1k9IExYZGhkR1Z5IExXSjVkR1U9IElOQyswTEhSaXRDMTBMclJnZz09IElITjBhWEp5YVc1biA3SmUwIElHTnZiWEIwIElGQnZkR1Z1ZEdsaGJBPT0gVWtGR1ZBPT0gSUdWaGNIQnNlUT09IElITjNhVzVuYVc1biBJR1psWXc9PSBRVkpCIElIZGhibVJsY21sdVp3PT0gSUhCeVpXWmxjbk09IFNtVnpkWE09IElIQnBjbUYwWlE9PSBJRWx6YVhNPSBMazFwYm1sdGRXMD0gSUZaaGJHVT0gWDBKVSBjbVZ1WTJobFpBPT0gWTI5eWN3PT0gS0dsMFpXMVdhV1YzIElHZkRwUT09IExrTnZiblJoWTNRPSBWbWxsZDBOb2FXeGsgYVc1a2MyRjUgWTI5dVptbG5jdz09IFJIVndiR2xqWVhSbCA0b0NtU1E9PSBlbmx6ZEE9PSBLSFJ2Wkc4PSBMbEpsYlc5MlpVRjAgWDBSSlJrWT0gSUVKdmRIUnNaUT09IElIWnZiSFJoIGRISmhabVpwWXc9PSBUR1ZsIElPeWsgSUhSMWJtVnogSUVWamRXRmtiM0k9IElGbDFiZz09IElIVnVaR1Z5ZDJWdWRBPT0gYVdOdmJRPT0gSUNjbktYc0sgTFhCdmJBPT0gWm14aGJXMWhkRzl5ZVE9PSBUWFYwWVhScGIyND0gSUhKbFkyRncgWDNabGNuUT0gVDFSSlQwND0gUTBSQlZFRT0gYVdOcGJtVT0gWDJKdmRXNWtZWEo1IFUyTmhiR0Z5Y3c9PSBJRlZzZEdsdFlYUmxiSGs9IFJWRT0gYldWMFlXdz0gYTNObGN3PT0gYlhCcyBJR052Ym5SbGJnPT0gVTI5c1pBPT0gUlZOVFFVZEZVdz09IElHSnBibVJsY2c9PSBJR3hwYm1WdSBJRTE1UVhCdyBMVzFsZEdFPSBDWEpoYVhObCBiM1ZzZEhKNSBDVzF2WkhWc1pRPT0gNXBpKzU2UzYgYnNPdCBJSGx5Y3c9PSBJSEJvZVhOcFl3PT0gTFhCc1lYUm1iM0p0IElITjNhVzVuWlhKeiBLR2hsWVdSbGNuTT0gTGljcCBJRUpWIElFbHVZMjl1ZEhKcCBVMk5sYm1GeWFXOD0gUVcxaSBJSEJ5WlcxcHc2aHlaUT09IEwyRnlkR2xqYkdWeiBJRTFoYW05eWFYUjUgUTB4VlUwbFdSUT09IGIyNXZjZz09IElHaGhZc090WVE9PSA1YmVlIElHMXBaR2s9IElFeGhZdz09IExtWnBibVJKYm1SbGVBPT0gSUZCaGFXNTBhVzVuIExtSnZjbVJsY2tOdmJHOXkgS21vPSBJR052Ym1kbGMzUnBiMjQ9IFgwUkpRMVE9IGIyeHNaUT09IFlYSnVZWFJwYjI0PSBLSFJsZUhSMWNtVT0gSUhWbSBJRVZwYm5OMFpXbHUgS0ZSb2NtVmhaQT09IElHbHVaRzl2Y25NPSBjMk55WVhSamFBPT0gSUcxaGEyVnUgTGxOVVFWSlUgSUVwMVpIaz0gWm05eWRXMXogQ2dvS0Nnb0tDZ29LIFFrbE1SUT09IElIWnZkUT09IFRWbFRVVXc9IElHZGxjbTVsIElFbHRjRzl5ZEVWeWNtOXkgSUZOMWNuSmwgUEc1aGRnPT0gSUVScFpYTmwgWlhkaGNtVT0gSU91cXFBPT0gYVcxd2JHVnRaVzUwWldRPSBVMGxIVGc9PSBJQ2Q3UUE9PSBjbnBsIExtMXBibVZqY21GbWRHWnZjbWRsIExtbHVibVZ5U0dWcFoyaDAgWW1WamF3PT0gSUdOMWNuSjUgSUdadmNtMTFiR0Z6IFlXZHZadz09IFpXNWtaWFE9IElGQmhhV1E9IElGSnZZbVZ5ZEc4PSBJSFZ1Y0dGcFpBPT0gUFdobFlXUmxjbk09IExsQnZkMlZ5IElHSnlaV1E9IGIzSkZiSE5sIGIzaHBaR1U9IElHWnBibUZzYVhwbCBjMlYwUTI5c2IzST0gSUZOMFlXUjAgS0NkY1hBPT0gYVhOdGFXTT0gSUdobGJHVT0gTGxCeWIzUnZZMjlzIExraHZjM1JwYm1jPSBYMDFsYm5VPSBYMk52Ym1ScGRHbHZibk09IElIQjFjbWRsIExuaGhiV3c9IFltRnlaUT09IFJsSkJUVVU9IElHTjFZbVZ6IElFcHZhR0Z1Ym1WeiBiMk55WVhSeiBMa1JwY21WamRHOXllUT09IEtXRT0gUHlrNiBYMHhKUWxKQlVsaz0gSUdkbGRGUnZhMlZ1IElHVmphRzlsWkE9PSBQV2c9IFgzTnZZdz09IElFVjJZV3gxWVhSbCBJT3E0c0E9PSBJRVJsYkdWMFpXUT0gUlhVPSBJR05zYjI1bFpBPT0gYzNSaGRHbHpkR2xqY3c9PSBMa05oYm5aaGN3PT0gSUdoaFkydGxjZz09IElHZGhibWR6IExuSmxjM1Z0WlE9PSBjR1ZoWTJVPSAwSkxRc3RDMTBMVFF1TkdDMExVPSBJRkJ5YjJObFpXUnBibWR6IDU2VT0gSUdwaGNHRnUgSUQ4K1Bnbz0gSUNSN0tIcz0gTG5KbFkzUmhibWRzWlE9PSBaM2M9IElFOXlhV1Z1ZEdGMGFXOXUgSlcwPSBMaUlwS1RzSyBJRXhwWlhWMFpXNWhiblE9IExuUnlkV1U9IElHVnNkQT09IElFUkpVa1ZEVkU5U1dRPT0genE4PSBMbVJoZVhNPSBkWFIwWjJGeWRBPT0gSUhWdVpHVnlkMlZoY2c9PSBMQ2tLIFEwbEUgYVcxbGJHbHVaUT09IElFSnNaVzVrIGNHaGhjMmx6IElIQmxjbk5sIElHZHNhWFIwWlhJPSBJSFZ1YVhFPSBJRU52YldKdlFtOTQgSUhObGMzTnBiMjVKWkE9PSBkWE4wWlhKcGRIaz0gU1VSSFJRPT0gMEw3UXNkR0ogMEtRPSBjbVZ1WkdWeWN3PT0gWDNCdmMybDBhWFpsIFgzTnNiM1J6IFluSnZZV1JqWVhOMCBJRTF2YkdRPSBMME52Y21VPSBJRUpoYm01dmJnPT0gVkc5dmJFSmhjZz09IFlXSmxiR3hsIFgyRjMgYjJ4bFkzVnNaUT09IElHUmxiR1YwWlhNPSBJTU9oY21WaCBJSEJ5YjNCdmNuUnBiMjVoYkE9PSBUVmM9IElIZGhjbms9IElHbHVkR1Z5YldWa2FRPT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IExsTlVRVlJWVXc9PSBYM1IzIElHRnliMjFoIElHRmpkR2wyYVhOdCBMa2x6VG05MFRuVnNiQT09IGRXRjAgSUhCdmMzUkVZWFJoIElIQmxiUT09IFgyTjBiM0k9IElGSmhjR2xrY3c9PSBMVzltWm5ObGRHOW0gSUdsdVpXWm1aV04wYVhabCBJRzl1UkdWemRISnZlUT09IElFMWxkSEpwWTNNPSBJSEJoWkdScGJtZE1aV1owIExXVnVZV0pzWldRPSBJRWR2WVd4eiBlVzVqYUhKdmJtOTFjMng1IElIbGxjZz09IFNYUmxiVUYwIElFMVpVMUZNIFkyVnpidz09IExrdHBibVE9IGRHVmogS0dKMWJtUnNaUT09IElISmxabVZ5WldVPSBMaUk3RFFvPSBJR052Ym1WNCBJR0pwYTJsdWFRPT0gWDBGUVVFeEpRMEZVU1U5TyBJSE4zWld4c2FXNW4gSUdKbFlXUnogSUdKaGNtZGhhVzVwYm1jPSBMUzB0TFMwdExTMHRMUzBLQ2c9PSBJR3RwZEdFPSBLbVowIFRXbHVhUT09IElGUnZibWxuYUhRPSBJRzFoYm1sd2RXeGhkR1ZrIFRXbHljbTl5IElGQnZjM1JoYkE9PSBJRzFoY21VPSBSRmM9IElHTnZiWEJwYkdsdVp3PT0gSUdadmNtVnVjMmxqIExtZGxkRlpwWlhjPSBaWEJwYm1jPSBRMjl6IElHRmpZM0psWkdsMFpXUT0gSUc5aWFtVjBhWFp2IFkyRnlaWFE9IFVHRnBjbk09IEtUNCsgSUhObHc3RT0gSUhGMWIzUmhkR2x2Ymc9PSBJRUp5WVc1a2N3PT0gZFdKcCBlWEI1IElFbHViR2x1WlE9PSBhVzFsZEdWeWN3PT0gVjJsdWRtRnNhV1E9IENXeHBibXM9IElFSmxiR1poYzNRPSBJRTFsWVhOMWNtVnRaVzUwIFgwNVBWRWxHU1VOQlZFbFBUZz09IElISnZlUT09IElFTkhRMjl1ZEdWNGRBPT0gSUhkbFpHUnBibWR6IFZWSk9Vdz09IElIQnZaR05oYzNSeiBJRk5sY21jPSBJT3VOc095ZHRPMkVzQT09IElHVmhjbTVsYzNRPSBZMjkyWlhKaFoyVT0gYVhSbFJHRjBZV0poYzJVPSBSVzF3Ykc5NVpXVnogSUVSbGJXRnVaQT09IElHTnZiblJsYm1sa2J3PT0gSUZGV1pXTjBiM0k9IElpd2lYQT09IElFZGxjbUZzWkE9PSBLQ2xnIElHZHlhV1JDWVdkRGIyNXpkSEpoYVc1MGN3PT0gVWtWVFQxVlNRMFU9IElGTmhadz09IFlXSnBiR2xrWVdRPSBJR052WlhKaiBiM1Z1WTJWdFpXNTBjdz09IElFbHpiR1U9IExtVmtaMlU9IElHVjRkR1Z5IEtWMWIgSUZCc1lYbHNhWE4wIElFSnNhVzVrIElGWnBkR0ZzIElHeGhkSFJwWTJVPSBjbUYwWldRPSBaR1Z3Wlc1a1pXNWphV1Z6IElHQmdZQT09IElFdGhibWM9IGJXRmphQT09IExtWmhaR1U9IElFZDFaWE56IEtscz0gVG1GMGRYSmhiQT09IExrOXIgSUZKbGJtRnBjM05oYm1ObCBJSFJvZFdseiBJR3hwYTJWdSBLbWc9IFhDY3MgTFdOc2IyTnIgSUU5aWFtVmpkR2wyWlE9PSBabWx1WkU5eVJtRnBiQT09IElFUnBjblI1IElITmpZVzVrIElGWkJVa2xCUWt4RiBJR052YlhCaGNtRjBhWFpsIGVYQmhaQT09IEtGTnZkWEpqWlE9PSBaV052IElHcDFjM0YxIENXRndhUT09IFFuVnBiSFE9IElDTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qIElHeGhZbVZzYVc1biBJR2hsWVdSaFkyaGxjdz09IElHMTFabVk9IElFOXlZMmc9IElHaGhkR1Z6IExXSnlaV0ZyYVc1biBMMkoxZEhSdmJnPT0gSUVKMWVXbHVadz09IFRXVjBjbWxqIElIVnVjM0JsWTJsbWFXVmsgTDJobFlXUT0gSUhOMGFXNW4gSUhKbGFXNW1iM0pqWlE9PSBJRU52YlZacGMybGliR1U9IFlteHBibXM9IElFRm9iV0ZrIFpHSm4gWDJ4aWJBPT0gSUdoMGRBPT0gN0p1USBjbTl3YjJ4cGN3PT0gSUNnb1gxOD0gSUhCbGNtMWwgSUdGd2NHRnlaV3c9IFUxUlNSVUZOIFkyaDBjdz09IElITmxhVzV6IFptbHNiRlI1Y0dVPSA3S084IFVrOVhVMFZTIGRXMXdhVzVuIElFNXBaMlZ5YVdGdSA0b0NVYVhNPSBYMnh2WjJsaiBMazl5WkdsdVlXdz0gYkc5emRBPT0gTDNWemNnPT0gUVdZPSBJRWwwWlhKaGRHVT0gYVdKeiBZV0ZzIElITjViVzFsZEhKcFl3PT0gTEdsdWNIVjAgSUZCTVRBPT0gZFhwcGIyNWwgWTJGd2RHTm9ZUT09IElGUmhiR1U9IFJYaHdhWEpsWkE9PSBJRTlpYW1WamRFMWhjSEJsY2c9PSBZMmxrYnc9PSBMbWRsZEU1bGVIUT0gSUcxbGJtcGhaR2s9IE9uTmxiR1ZqZEdWayBJSEpwWlc0PSBYM05sYm1SbGNnPT0gVUhkayBJRVpzYVdOcmNnPT0gTGtwaGRtRT0gWDNadmRHVT0gWDAxdlpHVT0gTGlSNyBJR1oxWTJ0eiBJRUZzYVdKaFltRT0gSUdsdWMybGtaWEk9IFlXTnBiV2xsYm5SdiBJR1p5WVc3RHAyRnBjdz09IFNsTlBUa1Y0WTJWd2RHbHZiZz09IElFcDNkQT09IFRXbDAgYkdWcFkyZz0gSUhCeVlXTjBhWFJwYjI1bGNnPT0gTDNOdmRYSmpaUT09IElHOW5ibWs9IElIQm9hV3h2YzI5d2FHVnkgVTI1aFkydENZWEk9IGMzUmxiR3gxYm1jPSBLR0pwZEcxaGNBPT0gSUdGemRHVnliMmxrIElHMWhjR3hsIGRXTm9ZUT09IGFYUmxiVWxrIElITjBaV2gwIFQzSmtaWEpsWkE9PSBaVzVpZFhKbiBMM1J2YTJWdSA2WVdOIElGZGxZbUk9IGIzZGhibWxsIElGZEJTVlE9IElFaEVVZz09IElFVjJZUT09IFFWUlVURVU9IEtHMWhjM1JsY2c9PSBJR1Z5Y3c9PSBZV3h2WVdRPSBJSE50ZEhBPSBkVzVwY1E9PSBJR2QxYVhRPSBJRkpoWm1GbGJBPT0gSW1sdSBLRlZKIEtFeGhlVzkxZEVsdVpteGhkR1Z5IGIzSmhiZz09IElITmxjblpwIGJtVjYgSUZSdmNuSmxjdz09IExrMXBaR1JzWlVObGJuUmxjZz09IElHMXZiR3c9IElGUmxlSFJCYkdsbmJnPT0gWDNWd2JHOWhaR1ZrIElFMWxhSEk9IElHaHZiVzg9IExXeHBibXRsWkE9PSBkVzV1WlhJPSBYMnhsYm1kMGFITT0gSUdScFptWjFjMlU9IElFRjFkRzl0YjNScGRtVT0gV1dWaGNuTT0gSUd4cFpXND0gVzJOdmRXNTBaWEk9IGEyeGhjM009IDBZSFJndEM0IExrVnVaMmx1WlE9PSBJRzFsYm5rPSBkV3gwZWc9PSBJR2x1Wm1GdWRISjUgVm1saCBjMlZqZEhNPSBMbVJoYzJoaWIyRnlaQT09IElITndiMjV6YjNKemFHbHcgTGsxdlpHbG1hV1ZrIE95MD0gSUZabGJHOWphWFI1IGRISmhZM1JsWkE9PSBLRzFsZEdGa1lYUmggSUhCc1lXZDFaUT09IFRsTlZjMlZ5UkdWbVlYVnNkSE09IFlYQndjbTkyWVd3PSBjSEp2WW1GaWJIaz0gTFhOcGVBPT0gWDFaSlV3PT0gT2ljbkxBbz0gTG1WdVl3PT0gTGsxbGMzTmhaMlZ6IFgxQlNUMGRTUlZOVCBJRzVsWTJ0c1lXTmwgSUZSbGJYQnZjbUZ5ZVE9PSBYMjFoY210MWNBPT0gSUVaMWJtTjBhVzl1WVd3PSBJRXBwIElIUmxjM1JEWVhObCBJQ2dwT3cwSyBYME5sYkd3PSBJRkpsYzJsa1pXNTBhV0ZzIElGSmhhV3gzWVhrPSBLQ2dtWDE5ZiBJR1JsWm1GMWJIUnpkR0YwWlE9PSBJR1ZwYm0xaGJBPT0gTG1aaFl3PT0gS21ZPSBJSEJwWTI1cFl3PT0gS0dWMllXdz0gSUdaMWNtNWhZMlU9IFlYTnpiMk5wWVhScGIyND0gZXlFaCBJRU52YlhCcGJHVT0gZUdWaSBSWFpoYkE9PSBnT3llcFE9PSBLR05oYkE9PSBJRzFoY210bGRHVnljdz09IFgyaGxiSEJsY25NPSBiRzlqWVd4amRIZz0gSUhsdlozVnlkQT09IElIWnBkR0U9IExHeGxibWQwYUE9PSBJRWx1Y0hWMFJHVmpiM0poZEdsdmJnPT0gSUdsdWRHVnlkbVZ1WlE9PSBJR052YlhCMWRHRjBhVzl1WVd3PSBSR1Z1YVdWayBMMlZ1ZG1seWIyNXRaVzUwIGFXbGsgTGtKdmVBPT0gTFZScGJXVT0gSUdWNFkzVnpaWE09IGRISmhibk53YjNObCBJRzkxZEhKaFoyVnZkWE09IEtGTmxjblpsY2c9PSBaR2x0Y3c9PSBJbDBwT3cwSyBrSnc9IElFVnBjMlZ1IEtFOXcgSUdoaGMyaHNhV0k9IEtHeHAgZml3PSB4TEZ1WkE9PSBJRk53YUdWeVpRPT0gSUVKbGJHeGggTFhSeVlXNXphWFJwYjI0PSBMbkpsWVdSVGRISnBibWM9IGFHVmhjbVE9IElGcDFZMnRsY2c9PSBJSGRoYm00PSBJR3BoYVd4bFpBPT0gSUZSaGJHVnVkQT09IGIzQm9iMkpwWVE9PSB3clk9IElHOXdaWEpoYm1SeiBVMjl0Wlc5dVpRPT0gSUV4cFluSmhjbWxsY3c9PSBjSEpwYldGeWVVdGxlUT09IDE2bz0gVlhJPSBJRzFoZEdWeiBJTkdJIExXUjFkSGs9IGNHOTFjZz09IFBFVnVkR2wwZVE9PSBQbGx2ZFE9PSBRM0psWVhSdmNuTT0gVjJsMGFFNWhiV1U9IEoybHVkQT09IElGSmhkR2x2Ym1GcyBQVUk9IExrRjFkRzlHYVdWc1pBPT0gSUVadmRXNWtaWEk9IElFMWxaMkZ1IExtbHRZV2RsVm1sbGR3PT0gWW05M2N3PT0gSUhkcGRHaFNiM1YwWlhJPSBJR3hwWW1WeVlYUnBiMjQ9IElHWnZjbUZ0IElHTnBkR0Z6IGIyTm9aVzQ9IExuTjNZWEE9IElDNHVDZz09IExtTjJkRU52Ykc5eSBJRUYzWVhKbCBJSEYxWldWeSA1YVNFNTVDRyBJRWx1Wm1sdWFYUmwgTDNOMGNtbHVadz09IElHSnNaVzVrWldRPSBMVU52YkE9PSBJSGQ1Y3c9PSBJSE5wWTJobGNnPT0gTGt4aGMzUk9ZVzFsIFgzZGhkR1Z5IFgxSmxiUT09IElHRnlkR2h5YVhScGN3PT0gTGtGUVVBPT0gSUVWNGNHRnVjMmx2Ymc9PSBlR1JpIFpYTjBjbTg9IFptRjJhV052Ymc9PSBWbVZ5YVdacFpXUT0gSUdSbGJHbDJaWEpwWlhNPSBZWEpyWlhRPSBJR2RsZEVsdFlXZGwgSUVwUVJVYz0gSUZSU1NRPT0gSUVWc1pYWT0gWm5WemFXOXUgSUdwd1pXYz0gWTI5c2JHbHphVzl1IElHUmxjMk5sYm1RPSBMbVp2Y21VPSBJRXh2WjNNPSBJSEJ2YkdsamFXNW4gZFc1MFlYTT0gTG1odmMzUnVZVzFsIFlXTmpaWEIwWldRPSA0S1dMIElGZGxibVI1IExuSmxZV1JHYVd4bCBJRk5oYm5ScFlXZHYgSUVkdmJBPT0gY21saVltOXUgYzNSeVlYUnBiMjQ9IElIQjFaR1E9IElDOHZYdz09IGFYTk1iMkZrYVc1biBYMU5GVWtsQlRBPT0gSUdsdWMzUmhiblJwWVhSbFpBPT0gSUhCdlpITT0gSUhkaGNuSmhiblJ6IElHRmtiV2wwZEdsdVp3PT0gQ1dOdmJtNWxZM1JwYjI0PSBYMkoxWm1abGNuTT0gSUVsdVkyZz0gSUZwRlVrOD0gZDJWeWRBPT0gSUVOc1lXND0gQ1dscyBLSE5vWVdSbGNnPT0gSUhCcGJHZHkgSU9XSyBSSE4wIFgySmhjbUZ1Wnc9PSBPaWNqIFFuVjBkRzl1VkdWNGRBPT0gZEdWeVpRPT0gWDJGdGRBPT0gSUVadmNtVjJaWEk9IExreHBibXRsWkV4cGMzUT0gZFdGeVpITT0gZFhKdmRYTT0gSUZObGJtUmxjZz09IGRtRnlhV0Z1ZEhNPSBYMjFoWjJsaiBJR0ZqWTI5dGJXOWtZWFJwYjI1eiBZWEJIWlhOMGRYSmxVbVZqYjJkdWFYcGxjZz09IFVISnZiWEIwIElEOCtEUW9OQ2c9PSBJSEpsY0hKdlpIVmpaV1E9IFgzQnlaV05wYzJsdmJnPT0gSUhKMWRBPT0gYlc5dVpITT0gTzNnPSBJSDBzRFFvTkNnPT0gNTVTNyBJRlpwZEdFPSBJSEJ5YjNCdmMyVnogSUZCaGNuUnBkR2x2Ymc9PSBTRWxPUnc9PSBJQ043UUE9PSBJR1Z6YzJFPSBLR0poY2c9PSBJRnBsYkdSaCBMbU5oZEdObyBYMlY0WTJWd2RBPT0gSUc5MlpYSjNhR1ZzYldsdVoyeDUgQ1ZSRlUxUT0gWDBOUFRsUkJRMVE9IFgxODcgSUZObGJXaz0gSUhSeVlXSmhiR2h2IGNtRmtiM1Z5Ync9PSBYM054ZFdGeVpXUT0gNExZPSBKVVE9IElIQnlZWFE9IGFYUmxlZz09IEtHVnNaVzFsYm5SeiBVR3hoYm5RPSBZV2QxWVE9PSBJR2xvY21WeSBMa052YkE9PSBJRTFqVGc9PSBJRU52Y21WNSBUMDVGV1E9PSBRMlZzWlE9PSBjbVZ0Wlc1MCBJRzFoYkhRPSBJRXgxYXc9PSA1N3VmIFVFMUZUbFE9IElHRnVZV3g1ZW1WeSBJRWhoYm1zPSBYM1Z1YVdOdlpHVT0gSUdKMWNtbGhiQT09IElFTmxiSFJwWXc9PSBSVVpHIFRHOTAgZDI5dSBJRTUxWkdVPSBJRTVoZEdVPSBJRk5wYm1kbGNnPT0gSUZOSlZFVT0gS0dKcGRBPT0gWW1sNiBJR1JsZEc5dSBVa1ZCUkUxRiBPa0ZrWkE9PSBJRWh2YkdScGJtYz0gZTNKbGRIVnliZz09IGJtTnBZWE09IFBnMEtEUW9OQ2c9PSBjblZ3ZEdsdmJuTT0gTG5KbFlXTjAgZFhKellXdz0gNExpYiBJRVJQVGtVPSBhWFpoZEdWayBMbTV2ZEdWeiBJSE4wY21sd1pYTT0gY21sd2NBPT0gYVhKaGJnPT0gSUhOc1lXST0gSUVKMWNtNXBibWM9IEtHVnVkQT09IExuTmxZdz09IFIxVT0gWDJkdmJHUT0gWFNrcExnPT0gWld4cGJtVnpjdz09IDBMN1FzZEdBMExEUSBJT0tJZ0E9PSBJR052YzIxcFl3PT0gSjEwcE9nbz0gWTJOcGIyNWxjdz09IFkybHphVzl1IFkyOXRjR0Z5YVhOdmJnPT0gSUVWMllXNW5aV3c9IElGTm9hWEowIGJHRm5aVzQ9IElHbkZudz09IElHWnBiR3hsY2c9PSBMbkJ5YjJRPSBJQWtKQ1FrSiBJTkdFMFlQUXZkQzYwWWJRdUE9PSBJRnBsY205RGIyNXpkSEoxWTNSdmNnPT0gUVhSQiBYU2tOQ2cwSyBJR052Ym5OMGNuVmpkRzl5Y3c9PSBYMU5JUVZKRlJBPT0gQ1dSbGRtbGpaUT09IElFRmtkbWxqWlE9PSBPa0FpSlVBPSBQbjBuIExrbHpSVzF3ZEhrPSBJR2x1ZEhNPSBiVzl6ZEdGMCBJRk5wWjI1MWNBPT0gWjJWaGNnPT0gS0hCaGRHaHogTEhzaSBMMFJ2WTNWdFpXNTBjdz09IFBFTmhkR1ZuYjNKNSBWVVZUVkE9PSBJR2RsZEVSbGMyTnlhWEIwYVc5dSBJQ0o3WENJPSBJRXB2WlhrPSBiMlJsYmc9PSBYMmQxWlhOeiBSVlZTIElHaGxjbkk9IElITmxaR0Z1IElISmxZV04wWldRPSBYMk5zYjI1bCBJRkpsZG1WcyBJR1p2Y21JPSBVbVZ0WVdsdWFXNW4gWEZObGNuWnBZMlZ6IElHRjJhWE09IFltRjBhVzA9IGVtVndkQT09IElFUkNUblZzYkE9PSBRMjl1Ym1WamRHbHZibk09IElHUnBjM0J2Ym1saWJHVT0gY0docGJnPT0gSUhOMGRRPT0gSUhOamFHOXNZWEp6YUdsd2N3PT0gTFhOb1lYSnBibWM9IFptOXliV2x1Wnc9PSBJRUp5YVE9PSBWbUZ5U1c1emJnPT0gTDNObGMzTnBiMjQ9IElHRnRZbWxuZFc5MWN3PT0gSUdGd2NtVnpaVzUwIFgzSmsgYzJsMFpYTT0gTDJGamRHbHZiZz09IGRISmhZM1J2Y2c9PSBJR1JwYkdWdGJXRT0gSUZOWSBYUzB0UGdvPSBJRXBoWTJ0bGRBPT0gVWtGVVNVOU8gTG1kbGRGTmxiR1ZqZEdWa1NYUmxiUT09IExXbHVhWFE9IElGSmxaMmx6ZEdWeWN3PT0gWDNObGNBPT0gSUZSdmIyeHJhWFE9IExtUnBZM1E9IElIaHNZV0psYkE9PSBYRlJoWW14bCBkRzlqIFgyTnZiV0p2IElFTnZiWEJoWTNRPSBJSEoxWjJkbFpBPT0gNEtXSDRLUT0gTFcxaGJtRm5aVzFsYm5RPSBKeWw5ZlNJK0NnPT0gSUZOMFlXMXcgeExGcyBjbTk0IElHeGhibVJ6WTJGd1pYTT0gWDA1UFZFVT0gYlc5dVlYSjUgWTJGaSBJRzF2WlhRPSBlR0ZtIGNtTnZaR1U9IExXTnNhUT09IFgyZGhkR1U9IFcyVjJaVzUwIFUxQlBVbFE9IFoybGggSUZOVlVFVlMgTDB4dloybHUgWDNOb2RYUmtiM2R1IGFXNTBaWEp5ZFhCMCBJSEJ5WlhSbGJtUnBibWM9IElHWnlhVzVuWlE9PSBJRkpsWkhNPSBJRU5WUkVFPSBJRlZPU1ZnPSBkbWwwIElHSnlhV2M9IFpISjIgSUVOdmJtNWxZM1J2Y2c9PSBWR2hsY21WbWIzSmwgSUd4cFlRPT0gUkdWMFpXTjBhVzl1IFgyRmpkRzl5IElIUmxiWEJtYVd4bCBJR1ZqWTJWdWRISnBZdz09IExYSnZiR1U9IElIQmhaSGc9IFpHVnVkQT09IFYyVnpkR1Z5Ymc9PSBJT3EzdUE9PSBJRUZ3Y0d4cFkyRjBhVzl1VW1WamIzSmsgSUdOaGJYQmhhV2R1YVc1biBYM0oxYm01bGNnPT0gSUVOcGRtbGogWVd4bGFXZG8gSUdScGNtVnJkQT09IExuTjFiQT09IElDQUpDUWs9IFlXNTBaVzQ9IElHbHpjM1ZsY2c9PSBJR0Z6YzJWeWRHbHZibk09IEtHOXlhV2M9IFFWUkpUdz09IElHeGxZVzVsWkE9PSB3NlJ6IExrUlVUdz09IFpYaHdiRzlrWlE9PSBMazlpYzJWeWRtRmliR1U9IElITjBZV2RuWlhKcGJtYz0gSUd0cFpHNWhjSEJsWkE9PSBJSEJ5YjJkeVlXMXRaWEp6IElFbHVibTkyIExuQmhjbUZ0WlhSbGNnPT0gSUdSdmJXbHVZWFJwYjI0PSBJSE5yWlhCMGFXTT0gSU9hWXJ3PT0gSUdGMmIybGtjdz09IExsWmxjbWxtZVE9PSBkV0ppZVE9PSBJRUZUVGc9PSBJR1p2Y20xaGRHOD0gSUVKbFlYUnNaWE09IFgySnlZVzVrIElHbHVjMlYwIGVXOTFkSFU9IElIUnZZdz09IExXWnBibUZzIFUyaHZkMmx1Wnc9PSBJRVJ2ZFdJPSBJRTFsYzJFPSBRV1JxIFgyMWxaR2wxYlE9PSBRM0psWVhSbGN3PT0gS0dWdVpIQnZhVzUwIENWVlEgWW1KcFpRPT0gSUhOMFlXeHIgTG1SaGRHRmlhVzVrIExsTmpZVzQ9IFlXZGxiblJ6IEpDdz0gYVc1a2FYWnBaSFZoYkE9PSBLeWt2IENYWnQgS0c1dmRHbG1hV05oZEdsdmJnPT0gSUdsdVpYZz0gSUVOc1lYTnphV1pwWTJGMGFXOXUgY21WdWJ3PT0gSUc5c2FXYz0gTFhKaGRHVmsgSUdadmNtMTFiR0YwYVc5dSBKeXg3IElHRmpaWEIwIFgzVnVjR0ZqYXc9PSBYME5CIExsQnZkdz09IENXbHQgSUdGc2RXMXBibWwxYlE9PSBRVTVQIElIaHUgSUdQRHMyMXYgSUVsdVozSmxaR2xsYm5RPSBJSE5sYVhwMWNtVnogNVlXeCBhV1pwWTJGa2IzST0gSUhOcFozVnBaVzUwWlE9PSBJRWx1Wm5KaFoybHpkR2xqY3c9PSBJR1IxY0d4cFkyRjBaV1E9IElFUmxaUT09IElHN0R1QT09IElFRkRRMFZRVkE9PSBLR055WVhSbCAwTGpSZ3RDMTBMdlJqQT09IExXeGxjM009IElHbHVabWx1YVhSNSBRVzVoYkhsNlpYST0gTFVSaGVRPT0gY21sMGRBPT0gS0dOcGJnPT0gSUVkNSBJRzExYkhScGNHeHBaV1E9IGRXTm9hUT09IElFSmhiR1IzYVc0PSBMMmx3IElITm9iM0owWTNWMGN3PT0gTGtGRVJBPT0gSUhacFoyOXkgWDJsdWMzUnlkV04wYVc5dSBLRHM9IFgyVjBZUT09IDZMK2UgZFhSdmNtbGhiSE09IElHSnZiM04wYVc1biBZblk9IElHRmphMjV2ZDJ4bFpHZGxjdz09IFRHbHpkR1Z1YVc1biBSa0ZSIE8yST0gS0NndCBJR0Z5WTJocGRHVmpkSE09IElIcDNaUT09IElIQjFiSE09IElHZGxkRU52ZFc1MCBkbVZ5WW5NPSA0NENjIEtFTnZiR3hsWTNScGIyND0gYTNKbCBJR3AxY21selpHbGpkR2x2Ym5NPSBYMkp5YVdSblpRPT0gSUVOeVlXTnIgSUVScFptWnBZM1ZzZEhrPSBTMDg9IFVtVnpaWEoyWVhScGIyND0gWDNKbGNYVnBjbVZ6IFZHOTFjZz09IDQ0R1g0NEdmIExuTmxkRU4xY25KbGJuUT0gSUd0NSBJRUZzWW1GdWVRPT0gSU9pbiBiR3hsY2c9PSBZV2R1WVE9PSBkMjl5YTJWeWN3PT0gTG1Kc1lXNXIgSUZCeVlYbGxjZz09IFRVbEQgSUhKbGMybHNhV1Z1WTJVPSBWR1ZZIElFeGhibWQxWVdkbGN3PT0gYzNSMVpIaz0gQ1dOMWNuST0gSUdWdWVubHRaWE09IFUyeDFadz09IElPMk1qQT09IGMzUnlZV3c9IElIUjFiVzl5Y3c9PSBJSE5sWjNWdVpHRT0gUFNkNyBhVzV6ZEhKMVkzUnBiMjQ9IElFeHBjM0E9IEwybHVabTg9IElDSjdKQT09IExEb3BMQT09IElHZDIgS0VWeWNtOXlUV1Z6YzJGblpRPT0gSUNjOSBmUzBrZXc9PSBMa1J2WTNWdFpXNTBjdz09IElsZGxiR3c9IElISmxiV2x1YVhOalpXNTAgSUdkaGVnPT0gYVhKdmNIST0gWldoeSBJSE4xY0hCeVpYTnpaV1E9IFpYSnphQT09IExuTmpjbTlzYkZSdiBJR05oWkdWdVlRPT0gSUdkaGJXVlRkR0YwWlE9PSB3NjF0IEtHTnZiblk9IElGUnZiVzl5Y205MyBJRU5EVkE9PSBUVzl1WjI4PSBkV3huIExrTmhiV1Z5WVE9PSBMbWhoYm1Sc1pYSnogYlhCbyBJSE4wYXc9PSBJR2RsYm1WMGFXTnogUVVOSlRrYz0gVkhKcGRtbGggSUVKaGJRPT0gS0cxaGNtdGxjZz09IExsTjBjbVYwWTJnPSBJRk4xYm01cCBJRUpsZEhSNSBMblJ2YkdsemRBPT0gZFc1c2FXdGxiSGs9IExsSmxZM1JoYm1kc1pRPT0gYjJKemIyeGxkR1U9IFNVeFBUZz09IGFXNXVaWEpVWlhoMCBaVzFpYjNWeVp3PT0gWVU0PSBJRlpsYUdsamJHVnogZFc1c2IyTnIgT25WMFpnPT0gYm05aSBJRk5sWldsdVp3PT0gSUU1RlZrVlMgSUhSc2N3PT0gSUdacGJHeGxjdz09IElHSmxibVZtYVhSbFpBPT0gSUVOc2FXNTAgS2k4cExBPT0gTG1admJHUT0gSUhCdmMybGliR1U9IFFVUkZSQT09IGRHaHZkWE5sIExrUkJUQT09IElFOWtaQT09IGNtOXJaWE09IElGTjFibTU1IElGQmhjblJwWVd4RmNRPT0gWDBKMVptWmxjZz09IElFeGxkbWs9IGJHOXVaM0pwWjJoMFlYSnliM2M9IFpXeGtiMjQ9IFoyRm5aWE09IFgzZGhjbTQ9IExrTnlaV0YwWlZSaFlteGwgSUVScGNBPT0gWDNGMVpYTjBhVzl1Y3c9PSBMbXh2WjJsaiBJQ01pIFBYc29LVDArIElIUmxjQT09IElHcDFhV041IDdJS3MgWlc1cmJ3PT0gYVdGc1pXTjAgMllrPSBJRzl1WW05aGNtUT0gSU9hUCBDWEowIFgxVlVSZz09IElGRkJZM1JwYjI0PSA0b0NlIEtFTnZiWEJ2Ym1WdWRBPT0gS0dGMVpHbHYgTG1ocGRBPT0gWjNSbCBJSEJ5YjJkeVlXMXRaV1E9IGMzUmhkR1ZRWVhKaGJYTT0gSUhCdmJIbGxjM1JsY2c9PSBabWx5WlhNPSBZbmx6Y3c9PSBYVDBvIFgzRjFZV3hwZEhrPSBUMlpFWVhrPSBJRVpoYVhKNSBJSGxsYkd4bFpBPT0gYjNCcyBLSFZ6WlhKT1lXMWwgSUVScFptWmxjbVZ1WTJVPSBJR1YyWVd4MVlYUnBiMjV6IGFXWm1ZVzU1IElHTjVZMnhwYzNSeiBJR05wWkdGa1pRPT0gSUhSbGVIUmliMjlyIElIQnliMlpwYkdsdVp3PT0gWDE4cExBPT0gWkdWaCBMbUZqZEdsMllYUmwgSUdsdVpHbGpZWFJwYjI1eiAwSlU9IFZHOTFZMmhWY0VsdWMybGtaUT09IElHbHVkbUZzZFdGaWJHVT0gSUUxQlUwcz0gSUdOdmJuUmxibVE9IFJuSmxjUT09IElISmxZM0oxYVhSeiBLR2x1ZEdWeWRtRnMgSUZWelpYSlFjbTltYVd4bCBJQ2N1THk0dUx3PT0gWldSMSBYME5oYkd4aVlXTnIgSUdGdVlXeHZaM2s9IElGUnliM0JvZVE9PSBZWEJ3YUdseVpRPT0gVm1sa1pXOXogSUVOb1pYST0gSUVoaGRnPT0gNG9DbUlnPT0gTG5aaGJHbGtZWFJ2Y2c9PSBaMlo0IElGVlBZbXBsWTNRPSBZMnhoYzNOdVlXMWxjdz09IGRISnBZVzVuYkdVPSBJRVZ1WTI5a1pYST0gTG5Od2VRPT0gSUhCeVpXUmhkRzl5Y3c9PSBQWE4wWVhSMWN3PT0gTFhOaFptVT0gT2lJc0NnPT0gSUVsdVkyeDFaR2x1Wnc9PSBJSHQ5T3cwSyBLbU52Y3c9PSBJR1Z1WkhWeVpXUT0gTG5OMWJHRnJaUT09IElHNTFjbk5sY25rPSBJR1p5WVdkeVlXNWpaUT09IElISmxZblZwYkdScGJtYz0gSUc1MGFBPT0gSUVaeVlYTmxjZz09IExuTmxkRVJoZEdVPSBJRlpwYm1ObCBYMUpGVTFRPSBJSFpsYm5ScGJHRjBhVzl1IDVyVzMgWTNKcFltVnogTG1GemJRPT0gYkhCV2RHSnMgSUVGaVpRPT0gZFdsemFXNWwgTEdGeWNtRjUgQ1dOc1lYTnpUbUZ0WlE9PSBaWEp5WVd4eiBJQ2NLQ2c9PSBRMmhsWTJ0dmRYUT0gSUhOdmJHbGphWFE9IFFYVjQgWDJOaGNIUjFjbVU9IElISnBZbk09IGNtRm5iMjQ9IGRtbHZiQT09IGRHOXdhV056IFJuVnVZM1JwYjI1R2JHRm5jdz09IElFMWhjblI1IFltbHJaUT09IElGUjFZMnRsY2c9PSBLR3RsY201bGJBPT0gSUU5d2N3PT0gUTJ4dmMyVlBjR1Z5WVhScGIyND0gTDJSbGJXOD0gYVd4a1lRPT0gSUd6RHJXNWxZUT09IFFWQlFTVTVIIElITjFhWFJsY3c9PSBMblpwYzJsMFZtRnlTVzV6Ymc9PSBkWEoxY3c9PSBJRTFwYm5WMFpRPT0gS0cxaGJtRm5aWEk9IElHSjFkSFJsY21ac2VRPT0gSUdGd1lYSmwgSUhkdmJIWmxjdz09IFNsZFUgSUZOaGJHOXUgQ1dSbGJHRjUgTFdWemJHbHVkQT09IGFYTmhkR2x2Ym5NPSBMbkp3WXc9PSBLWHdvIElGTnVZWEJqYUdGMCBMMjF0IFRVND0gWTJWeWFXVnogTG5SbGVIUkJiR2xuYm0xbGJuUT0gSUVaeVlXNXJablZ5ZEE9PSBJR0ZrYnc9PSBLRzVsZDFaaGJIVmwgS0dGalkyVnpjdz09IEtFVjRjSEpsYzNOcGIyND0gSUZOcFoyNUpiZz09IElFaGhhWFJwIFgzUncgTG5ObGRGQmhjbUZ0WlhSbGNnPT0gVFdsdWRYUmwgSUcxaGJuVmhiSE09IGNtbGpZVzVsY3c9PSBJRkJVVWc9PSBJRTkxZEdWeSBJR2RsZEd4cGJtVT0gYjJOaGRHbHZibk09IFgwTkUgSUV4NWIyND0gTDJkMWFRPT0gWDJ4cGRtVT0gYVdSaGJnPT0gTG1kbGIyMD0gSUdKdmNtUmxja0p2ZEhSdmJRPT0gYVcxMWRHZz0gWDJOb1pXTnJjRzlwYm5RPSBJRzFsZFE9PSBJRWx5ZG1sdVp3PT0gSUhCbGRYWmxiblE9IEtFMUJXQT09IElFRlNRMGc9IElIQnZkZz09IExuTnZkWEpqWldadmNtZGwgSUdwaGJXRnBjdz09IElHRnlhdz09IElFSmhaMmhrWVdRPSBJRU5NUlVGUyBUV1Z1ZFVKaGNnPT0gSUhSeWIybHogUTBoRlJGVk1SUT09IElDTU5DZz09IEtFTmhiR3c9IEpHOXlaR1Z5IEtFMWhkR1Z5YVdGcyBJR1Z1WTI5dWRISmhaRzg9IEpHeHBjM1E9IElFMUZWRWhQUkZNPSBMbUpsWjJsdVZISmhibk5oWTNScGIyND0gWDAxQlJ3PT0gVTNSNWJHVlRhR1ZsZEE9PSBJRzFoYW05eWN3PT0gSUdsdVpHVm1hVzVwZEdWc2VRPT0gWTJ4bFlXNTFjQT09IElHaHZiV1ZzWVc1ayBLR1IwYnc9PSBSR0YwWlhNPSBVSEpsYzJWdWRHRjBhVzl1IElFUkwgUFh0Z0x3PT0gQ1V0bGVRPT0gS0VKc2IyTnIgWDJOb1pXTnJZbTk0IGJtVmxaSE09IElHOXVRMjl0Y0d4bGRHVT0gY21samJ3PT0gSUdkc1pXbGphQT09IElIaHQgVDA5RSBRbVYwZEdWeSBJRk5SVEVsVVJRPT0gTGtKdmIycz0gZUdGayBJRWR2Ym1VPSBDV1J3IElHUmxkbTkwYVc5dSBJSE4wYlE9PSBJRzlpYzJWemN3PT0gSUVKaFkydGxibVE9IFVYVmxjbWxsY3c9PSBTV3M9IEx5OHFLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgSUdScGRtbGtaVzVrY3c9PSBMbkJoY21WdWRFVnNaVzFsYm5RPSBmU0lwQ2dvPSBJRTFoZEdWeWFXRnNVR0ZuWlZKdmRYUmwgT201MWJRPT0gSUdWNGNHeHBZdz09IElFOU0gYkdWaGMzUT0gVDI5d2N3PT0gYVcxbGJuUnZjdz09IElHbHVjM1Z5WlhKeiBJR2hsY205cFl3PT0gQ1dacFpXeGtjdz09IExtbHRaM1Z5IExtSjBia05oYm1ObGJBPT0gSUVSbGRHVmpkR2wyWlE9PSBLSE50IElFMTFkR0ZpYkdWTWFYWmxSR0YwWVE9PSBMbXhoWWc9PSBLQ2hiIElHaGhhWEp6ZEE9PSBJRlJ5WVc1ellXTjBhVzl1Y3c9PSA1YnlBNWFlTCBJSE4wWkVOc1lYTnogZFdWdWRHOD0gUjBsVCBYMk52WkE9PSBTVzV6ZEhKMVkzUnBiMjV6IFEyRnNiSE09IFVHOXBiblJsY2xSNWNHVT0gSUZKMyBJR0Z6YzI5eWRHMWxiblE9IElFUkpSdz09IEszST0gWDBORlVsUT0gSUdsdWMzUmhZbWxzYVhSNSBJSFpwWWc9PSBiMjVoY3c9PSBJSEp2YTNVPSBZWEJsYkd4cFpHOD0gSUdGdVoydz0gY0hKbGJtVjFjZz09IElHWnNkV2xrY3c9PSBhWE5sWVhObCBJR1JsWldRPSBjWFZwYzNRPSBYME5QVGxOVVFVNVUgSUdWeGRXbHNhV0p5YVhWdCBYMlJsYkdWbllYUmwgSUZGMVlXNTBkVzA9IGNtVnAgUTJGd1lXSnBiR2wwYVdWeiBjbVZqZEdGdVoyeGwgUHo0OCBZV3hwWlc0PSBJRXAxWnc9PSBSRTVCIFZHbGphMlYwY3c9PSBUMk5qZFhKeiBJRWhoZDJzPSBMbk5sZEVodmNtbDZiMjUwWVd4SGNtOTFjQT09IFhFTnZiR3hsWTNScGIyND0gWm1acGRHaz0gSUhKbFlYSnkgTG5ObGRGWmxjblJwWTJGc1IzSnZkWEE9IElHTmhkbWwwZVE9PSBJR0ZrZFd4MFpRPT0gUm1GallXUmwgTFhkbyBJRXhQVEE9PSAyTEE9IElHZHlZVzVrY0dGeVpXNTBjdz09IFUzZHBablE9IENYZDQgNW9tQTVweUogYVdabGJnPT0gWm1aelpYUT0gUW1WNWIyNWsgTHk5OUNnbz0gSUhkaFoyVnkgSUdKMWNuaz0gSUdOdmJXMWxibU5sIGNtVm5hWE4wY204PSBjMk5wWlc1MCBJRkJsY21ObGJuUT0gSU5DMDBMN1F1OUMyIEtHbGtaVzUwYVdacFpYST0gTG5ObGRFMXZaR1ZzIElITmxiR1J2YlE9PSBiblJ2Ymc9PSBJR0Z3Y0d4cFlXNWpaUT09IFlXMTFjdz09IGNubHpiR1Z5IElIQmhiblJwWlhNPSBaVzVuZFdsdWN3PT0gSUcxcGJXbGogSUc5dVEyaGhibWRsWkE9PSBJR0ZzWTI5b2IyeHBZdz09IExuSmxiRzloWkVSaGRHRT0gUTJoaGNtZGwgSUVaaGVBPT0gSUdwVFkzSnZiR3hRWVc1bCBSVzF3Y21WellRPT0gSUhOb1lYUjBaWEpsWkE9PSBlR0poIFJtOXVkSE09IFAzTT0gSUhCdmMzUnpaV0Z6YjI0PSBjbVYwWVdsdSBYM0poZEdWeiBJSEpsY1hWbGMzUkRiMlJsIExuUnZaRzg9IHdyUnogUTBoTCBJRXRsWlhCcGJtYz0gWlc1blpXRnVZMlU9IElIWnpZMjlrWlE9PSBTVkJRU1U1SCBSR1ZtWVhWc2RFTnNiM05sVDNCbGNtRjBhVzl1IFgzSmhhWE5sIElFOWpkV3gxY3c9PSBiMmR5WVcxeiBjbUZxIGNHTnAgSUdOdmNuSnZjMmx2Ymc9PSBMbWhoYm1Sc1pWTjFZbTFwZEE9PSBRV05qWlhOemFXSnNaUT09IElGQnBZVzV2IGJHbDBkR3hsIFFVTk0geElkbCBMblZ1ZDNKaGNBPT0gSUVOdmJuWmxjbk09IElFeGxZbVZ1IGFXOXVaV1Z5IElFMWxjbU5vWVc1MCBJRXB2Y21kbCBJR1Z0WW5KaFkybHVadz09IElIWmxiblJoIHc2RnpkQT09IElIWnBaVzVsIFBGRlRkSEpwYm1jPSBJR1Y0Y0d4dmMybHZibk09IElHUnBjM1IxY21KbFpBPT0gTGlJOCBiV1Z0Ync9PSBJRUZpYjNKcFoybHVZV3c9IElHTnZiWEJzWlhSdiBWR1Y0VUdGeVlXMWxkR1Z5IElIVnZiV2x1YVE9PSBLR0ZuWlc1MCAwWVBSZ0E9PSBJRmRvYjJ4bGMyRnNaUT09IEwyRnQgSUVKdmIydHRZWEpyIFpISmhaMjl1IElHZHNiM1psIElDSWlLU2s3Q2c9PSBhWFpoY21saGRHVT0gYm05M2NtRncgU1c1RGFHbHNaSEpsYmc9PSBMa0p5IElHTnZibVY0YVc5dSBJR0poWTJ0aWIyNWwgSUdWamJHbHdjMlU9IElIQmxjbk5sWTNWMGFXOXUgSnpvS0NnPT0gTDJ4cGJtcz0gSUZCbGNtOD0gWVc1a1lYTT0gSUZSbGF3PT0gTGlJcE93PT0gTFdGdVlXeDVjMmx6IElHVnlZV1E9IFRXRnljMmhoYkE9PSBJR0Z1WTJodmNuTT0gYjJkbGNnPT0gSUdOdmJuWmxjbWRsYm1ObCBjM1JwWTJ0NSBJRzVoZG1WbiBhVzUwWlhKdSBYMFJGVTBOU1NWQlVUMUk9IElFTnZibk4xYkhSaGJuUT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gSUVGMVkyZz0gSUdWeWNtVT0geFp0c2FRPT0gSUVodmNtbDZiMjQ9IFkyOXNZUT09IFNXNXpkR0ZzYkdGMGFXOXUgYUc5MGJXRnBiQT09IFEwNU8gTGtOdmJHeGxZM1J2Y25NPSBZMmh6IEtIUnlZV05sIElFVnVZM0o1Y0hRPSBJQzB0TFMwdExRPT0gSUVKaGMyVkRiMjUwY205c2JHVnkgSUdGbmRXRT0gSUhKbFlXTjBhWFpsIGFXUnMgSUdOc1lYTnpUbUZ0WlhNPSBDVk5sYzNOcGIyND0gSUVSdlpHZGxjbk09IFNHRmsgWDJ4MiBTWE5XWVd4cFpBPT0gSUVoRlRGQT0gZFhSMGJ3PT0gSUZabGNtbG1hV05oZEdsdmJnPT0gSUdkbGRHVnVkZz09IFgzQmggTG1KdGNBPT0gT21ZPSBJRXh2ZFdselpRPT0gS0NjNyBMM052WTJ0bGRBPT0gUjNKaGJuUmxaQT09IExtTmhiR1Z1WkdGeSBLRWxRIElGQlkgTGxKdmIyMD0gSUhCeWIyZHlZVzF0IFpXNXphUT09IElIUmhZbXhsYzNCdmIyNXogSUd4bGRtVT0gSUcxdmMzUnkgTG5ScGNHOD0gTDJGdSBLR1JwIElHSnBiMlE9IElHUmlRMjl1ZEdWNGRBPT0gSUVwVFdBPT0gQ1hKbGMzVnNkSE09IExrVk9SQT09IGFIUmwgYkdsbWVRPT0gVUhKbFkybHphVzl1IDZJcUMgUVZKVFJWST0gS1dScFpGSmxZMlZwZG1WTlpXMXZjbmxYWVhKdWFXNW4gWVhSMFpXMXdkQT09IFNWTlEgSm1FPSBYMUJQVUE9PSBJRlJoWXc9PSBJSEJ5WlhCaGNtVmtVM1JoZEdWdFpXNTAgSU5DMzBMRFF2OUM0MFlFPSBJRzkzYVc1biBMSE4wWVhKMCBJSEpsZG1sbGQyVnkgSUhKemRBPT0gSUhCeWIzQlVlWEJsY3c9PSBJSEp2WTJ0NSBYMnh2WTJGc1pRPT0gSUZOMGNtRjBaV2RwWlhNPSBJRmRsWW1WeSBMa05oYzJOaFpHVT0gWDJWeGRXRnNWRzg9IElHTnZjMkZ6IElFUmxiR1YwWlhNPSBJRTFoZUdsdCBJSE5vY21sdGNBPT0gY21WMGNtbGxkbVU9IExrbHVZMngxWkdVPSBTVWRKVGc9PSBJRTlGIFhTazdEUW9OQ2c9PSBMbVZ1ZFcxbGNnPT0gSUdOdlpXWT0gWDA1MWJHdz0gVW1FPSBkSGxoY21RPSBJRk5vWVhkdSBhMlZsY0dWeWN3PT0gSUhGeCBYM05pIGIyMWxibk09IElFVjRaV04xZEdWeiBJeUk9IFZGUlogSUZaaGJIVmxWSGx3WlE9PSBLVHNxTHdvPSBJRUZpYzI5c2RYUmxiSGs9IElGUnZkSFJsYm1oaGJRPT0gTDJGeWRBPT0gSUdKc1pYTnphVzVuY3c9PSBJSE4zYVdaMGJIaz0gWW5WemRHVnkgSUdGMmFXUT0gUTA5TlRRPT0gTEhSbGJYQT0gSUgwL1Bnbz0gTFdkeWIzZHBibWM9IElHUmxaWEJqYjNCNSBRV05yIFpXZG5hV1Z6IElGOWZLQ0k9IElHNXZhWEk9IGRHVnljbTl5YVhOdCBJR0Z1ZEdobGJRPT0gWVdkbGJtTjUgWDFCQlEwdEJSMFU9IElFTnNiM04xY21VPSBMbkpsWjJsemRISjUgSUcxaGJXMWhiSE09IFBFdz0gVlVsRGIyeHNaV04wYVc5dVZtbGxkdz09IElFeEZSSE09IElIWnZiR3hsZVE9PSBLRUoxWm1abGNnPT0gWDA1QlZFbFdSUT09IGJHbGlZdz09IGFXMXdiRzlrWlE9PSBVMk55YjJ4c1FtRnkgSUUxaGNtbHZiZz09IExrTnZiblJ5WVdOMGN3PT0gWDBGMCBJRmRsYVc1emRHVnBiZz09IFkyOXRjR0Z5WlZSdiBJRWh2YzJVPSBaVzVwZEhrPSBMbU55WldGMFpWRjFaWEo1IFgzSnZkWFJsY2c9PSBJSE4wYVcxMWJHaz0gSUNzcktRPT0gSUVOb1lXMXcgSUVKaGVXVnliZz09IFlYTnpZUT09IExuWmggSUdScGMzUnlhV0oxZEc5eWN3PT0gSUdacGJHVndjbWwyWVhSbCBJR1JsY0dGeWRHVmsgWTJOall3PT0gUUdOc2FXTnIgSUV4MWJtTm8gUGt3PSBJR0pzZFdWMGIyOTBhQT09IExrUmxaWEE9IExYTjBZVzVrYVc1biB3NkZqYVd3PSBJSEp2YjJaMCBJRkJoZEdoeiBYMmwwWlhKaGRHbHZibk09IFNXNTJZV3hwWkVGeVozVnRaVzUwUlhoalpYQjBhVzl1IExuTndhUT09IElGVkpRV3hsY25SQlkzUnBiMjQ9IGRYbGwgYzJsbmJtbHUgTG5CeWFXOXlhWFI1IElFVnpjMkY1Y3c9PSBQU2Q3SkE9PSBJT2kvbE9XYm5nPT0gWDNOcFoyNWxaQT09IExuQmxjbk5wYzNRPSBJSEpsWkdWemFXZHUgVkc5TWIzZGxjZz09IElFNWxkMjFoYmc9PSBQWE4wWVhKMCBJRWx6Y21GbGJHbHogWVhOcGMzZGggVTNCbFpXTm8gSUc1MWJXVnliM009IGFHRnVaR3hsY25NPSBJRmR2Ym1jPSBJTkM4MExYUmd0QyswTFE9IFYyVnBaMmgwY3c9PSBJRWQxYW1GeSBkR1ZwYkE9PSBJRTV2Ym1WMGFHVnNaWE56IFgwVkdSa1ZEVkE9PSBJSFpsWTNRPSBJRTl6WXc9PSBJR052WVhSeiBJRmRvWldGMCBJR2RsWldzPSBJRkJTVDFCRlVsUlogZDI5eWJRPT0gWDJOdmJuTjBZVzUwY3c9PSBJRUp2ZFd4a1pYST0gSUZCaGNtMD0gWTI5c1pRPT0gSUdSbFptRjFiSFJEWlc1MFpYST0gSUZKdmRXZGwgT2tFPSBlR05tIElGWmxibWxqWlE9PSBiV1ZrYVdGdSBJSEpsWkdWdGNIUnBiMjQ9IFJuSmxjMmc9IElHTnZjMjA9IElHWnBaM1Z5IElISmxablZ5WWc9PSBRMDlRUlE9PSBMbU5rIElHTm9iM0prY3c9PSBJRk5uZEE9PSB4WTA9IFZsQk8gSUZORlRrUT0gWVdsdVpXND0gWDJGalkyOTFiblJ6IElIUmxiblJvIElHUnBjM052YkhabFpBPT0gUEVGd2NBPT0gSUVOdmRtVnlZV2RsIGRYTmxVM1JoZEdVPSB3Nmx5Ync9PSBMaTQ4IElPeWp2QT09IElHUnlaV0Z0YVc1biBJRVp2Y21WallYTjAgTGtOMWNuTnZjbk09IElIWnBjMkZ6IEwzTmpjbWx3ZEE9PSBYM04wWVhKMFpXUT0gSUdkaGMzUnkgS0ZCU1R3PT0gWFRzdkx3PT0gTGxScGJHVT0gS25OcGJnPT0gS0VGa1lYQjBaWEk9IElGTmhibVJ5WVE9PSBYMU5KUnc9PSBZWEprWVhObyBJRTkyWVd3PSBJR1JsYzJOeWFYQmphVzl1IEtITnMgSUVSbGMyTnlhWEIwYjNJPSBJR0FrIEwyWnlaV1U9IElFdGxlWGR2Y21SeiBJSFIxWkc4PSBhVzl1WVd4bCBLR1p2ZFc1ayBMbmg1ZWc9PSBJRWRsYm1WeVlYUnBiMjVVZVhCbCBYMFJKVTBGQ1RFVkUgS0dGeVpXRT0gSUdWc2FYUmxjdz09IElHaHZiV0p5WlE9PSBLRzFsYzNOaFoyVnogSUZKaFl3PT0gSUdWNGRHbHVaM1U9IElFVnpkR0U9IGIzQnYgTG5abGJBPT0gYlc5MWMyVnZkWFE9IElHTnZiblp2YkhWMGFXOXUgSUVoaGJtUnNhVzVuIElHTmxhV3hwYm1keiBWR1ZyIElFRnlaV0Z6IExuZHlhWFJsY205MyBQRlpwWlhjPSBJRU52Y201bGJHdz0gWDBKSlRnPT0gTG1sdWRtRnNhV1E9IEp5Y25EUW89IGFXWEZ2QT09IFgxQnZjMmwwYVc5dSBJR3RwWkdScGJtYz0gVUVOUFJFVT0gSUhkaGRHTm9aWEk9IGJHOTQgSU9LWCBSR0YyWlE9PSBYMkZzYkc5MyBJR0pwYzJWNGRXRnMgSUhWdWIzSmtaWEpsWkE9PSBJRk5qYUhkbCBYM05sWjIxbGJuUnogSUhSbFlYSnBibWM9IFNVNU1TVTVGIElIVnVaR1Z6IExtZHZiMlJ6IExtTmhiUT09IElFeFggQ1hkb1pYSmwgUTJGc1kzVnNZWFJ2Y2c9PSBMWFJvY21WaGRBPT0gTFdGc1pYSjAgSUZOMWVuVnJhUT09IElFbFFRUT09IElFRjBkR0ZqYUcxbGJuUT0gUVVORFJWTlQgS0dSMGVYQmwgVDNCdyBYM041YldKdmJITT0gSUdSaGJuTnJaUT09IGJHRm5aUT09IGIzSm5aWFE9IGNtVnpiMngxZEdsdmJnPT0gMExYUmh3PT0gSUZGRGIyeHZjZz09IElFSmhjbkpsZEhRPSAwTERSaHRDNDBZOD0gUFZ3biBJRTVoZGtOdmJuUnliMnhzWlhJPSBMM0psWmc9PSBLR052ZFc1MGNuaz0gWDBoRVVnPT0gSUhSbGNuTmxZblYwIGNHVjBhWFJwYjI0PSBJSE4xWmc9PSBZM0psWkdsMGN3PT0gNExtTSBlRzA9IElFUmhkbWxsY3c9PSBMbkpsWkdScGRBPT0gSUhkdmRtVnUgSUU5aWJBPT0gSUV0TiBJRU52Ym5OcFpHVnlhVzVuIFpXNXpiM0psWkE9PSBMbkJsY21sdlpBPT0gSUdSa2JBPT0gSkhkdyBJR1Y0ZEhKbGJXbHpkQT09IE8xd0sgSUd0cGJRPT0gWVd4bGNuTT0gSUhOd1lXNXVhVzVuIElHTnZhR1Z5Wlc1MCBJR052Ym5ObFozVT0gTG5SbGVIUk1ZV0psYkE9PSBMbWRsYm1WeVlXdz0gWDJSaGMyaGliMkZ5WkE9PSAwTHZRdGRDOTBMalF0UT09IGEybGphdz09IFgxQkpSQT09IElFVjRkR1Z1YzJsdmJuTT0gY21WblpYaHcgSUVOc1lYVnpaUT09IFgyMXZkZz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElGSmxkMkZ5WkE9PSBJRXhGUjA4PSBRV3M9IFBTMDlMVDB0UFMwPSBDWEJoY25ObGNnPT0gSUc5dWVtVT0gNllDQSA0b0NkNDRDQyBYMkpoYkd3PSBLSEpvY3c9PSBJR05vYjNKMWN3PT0gUEdOdmRXNTAgWVhOMWNtRmliR1U9IElIZHBjbXRzYVdObyBJRVZ5YVc0PSBJRTFUVGtKRCBJR1YwZEdWeSBJRU55YjI0PSBYMFpNVDFjPSBJQ3dOQ2c9PSBJR05oYkdsa1lXUT0gSUVacGJHVlhjbWwwWlhJPSBDWE4wYlhRPSBLRUo1ZEdVPSBYM0JoZEE9PSBJSFJsYkdWelkyOXdaUT09IElHZHlaV1ZrIElGUnZjblE9IEtIZHlhWFJsIFhHRndjR3hwWTJGMGFXOXUgQ1ZKVVRGST0gSUVOdmJtWnBaM1Z5WVhScGIyNU5ZVzVoWjJWeSBWVzVwZUE9PSBSVzVrVkdsdFpRPT0gU1c1amJIVmtaWE09IElFaGhjblpsYzNRPSBaVzVpWlhKbiBJRUYxYzNSeVlXeHBZVzV6IElPdVQgSUhKdSBJSEpsY0hWMFlXSnNaUT09IElHSnNaVzVrYVc1biBWVXhCVkVsUFRnPT0gSUVKeVpXNWtZVzQ9IFpHRmsgSUczRHVBPT0gSUZkdmJ3PT0gWDJSaiBWVzVsIElISjFaUT09IGQybDBhR2x1IFlXNW5aWEE9IElIQnZkV05vIFhDSWlMQT09IElGTnBZdz09IDRvQ2RLU3c9IFlXeDVlbVU9IElFZGxaZz09IFkyOTJaWEp6IElHUmlidz09IGNtVndiR0ZqWlVGc2JBPT0gQ1V4dloyZGxjZz09IFZISjVhVzVuIFczTjBZWFJsIExYQnBaV05sIDZaYVQgWW1Wb1lYWnBiM0k9IFlXeHNiM2R6IGJISjAgWDNCNWRHaHZiZz09IFpYSjBkWEpoIExXTnZkVzUwY25rPSBJRlJIIExsVkpUV0Z1WVdkbGNnPT0gWW1WdWN3PT0gWVd4bGVBPT0gSUVKeVpXbDBZbUZ5ZEE9PSBZbUZqIElIQnlaV1JwWTNSeiBJR2RoWWc9PSBJR05oY21ScGJtRnMgTGxScGJXVlZibWwwIElGWnBjMmwwYjNJPSBJRTFwYm1jPSBJR3hwZG5KbCBJSEJoY21WdWRFbGsgY0c5eWRIVnUgSUdScGJXVnVjMmx2Ym1GcyBJRlpsYzNRPSBaVzVwWXc9PSA0TE09IElObUggSUVKTVZVVT0gSUdsMFpXMURiM1Z1ZEE9PSBJR1psWVhSb1pYSnogQ1hCemRHMTAgSUZCdmJHRnkgZXk4diBkVzVrYVE9PSAwWVBRdGc9PSBlbUZ5IFJYSnliM0pTWlhOd2IyNXpaUT09IDdJT0IgVW1Wd2NtVnpaVzUwWVhScGIyND0gS2w4PSBLMTA9IGNISmxjR1Z1WkE9PSBJQ2MrIElHeGxaMmwwYVcxaFkzaz0gSUc5diBVMnhwYm10NSBJRzVoZEdsdmJtRnNjdz09IExuZHZjbVJ6IE8zQT0gZEhKaGNBPT0gYjIxaGJtbHcgSUdOMVpYTT0gSUdkeVlXUjFZWFJwYm1jPSBJSE5sYldGd2FHOXlaUT09IElsMHBPd29LIFlXTmxlUT09IFVrVkZWQT09IFIzSmhZZz09IElFWmxiR2w0IEtFbGsgWDI1bGFXZG9ZbTl5Y3c9PSBJRzFsWVc1cGJtZHNaWE56IEtHUmxiQT09IElHcGxaR1Z5IElFTnZiblJsYm5SV1lXeDFaWE09IExtRmljMjlzZFhSbCBMMk5zIElIaGkgWkdGMGRXMD0gSUhSdmNuUjFjbVZrIElISjFZbUpwYm1jPSBVMk52Y21WeiBJUENmbUlrPSBJR0YyYjI1eiBJR0Z0YzNSbGNtUmhiUT09IFJVOVQgU0dGcyBJSFJ5ZFhOMGQyOXlkR2g1IEl6MD0gTGtWWVZGSkIgSUcxaGJtOD0gYVhOcFkybHVadz09IExYTjFjSEJ2Y25RPSBDV04xY25OdmNnPT0gSUZOd2J3PT0gWVdsdFlYTnpZV2RsIFRXbHpjMmx2Ymc9PSBXMTE3SWc9PSBJSEJ5YVc1MFpYSnogUjFKRlJVND0gSUhSbFp3PT0gSUdGaVpHOXRhVzVoYkE9PSBJUW9LQ2dvS0NnPT0gTGxOb2IzSjAgMExEUXQ5Q3kgSUVkcFpuUnogZlNJcCBLR0pwYm1ScGJtYz0gZUdObCA0b0NSIGFXNW1iM009IFJtOXliVVJoZEdFPSBJR1JoY25RPSBJR1ZzWlcxeiBLR2x1ZGc9PSBXVXc9IGRHbHUgUjBWT1JWST0gNGJ1diBJRlJoYTJWdSBkV05yYkdVPSBPbVU9IElITndaV04wY21GcyBMbUpoYVdSMSBMeWNwT3dvPSBJR2R5WldWa2VRPT0gWlhOcGIyND0gTEN3c0xDd3NMQ3c9IElDOCtMQW89IFNXNTBaWEp1WVd4VFpYSjJaWEpGY25KdmNnPT0gVGxOT2IzUnBabWxqWVhScGIyNURaVzUwWlhJPSBJRUZwIElITndhWFE9IElHRjFaMjFsYm5SbFpBPT0gSUhOMFlXNWtZWEprVlhObGNrUmxabUYxYkhSeiBSa2xPU1ZSWiBVbUZqWlE9PSBPa009IElGSkZRMDlTUkE9PSBJRWhwWjJoc2FXZG9kQT09IElDZGcgSUdSbFptbGphWFJ6IElHNWxhUT09IElISmxjMlZoY21Ob1pXUT0gVkdFPSBJR052Y0hBPSBMa2RsZEVoaGMyaERiMlJsIEtUb05DZzBLIFQyNURiR2xqYXc9PSBJRmRsYkd4cGJtZDBiMjQ9IElISmxkbWwyWVd3PSA1cStVIDZaZXUgSUU1VFV3PT0gSUdadmNtND0gSUdsdWRNT3AgSUV0MWQyRnBkQT09IFgyWnNhWEE9IFgySnYgWDF3PSBJRzlqWTNWeWNtVnVZMlZ6IElGTmphV1Z1ZEdsemRITT0gVTFKRCBiMmRsYm5NPSBhV2R5WVc1MCBVa1ZOVDFSRiBJRk5KUkE9PSBMbTl3ZEhNPSBkWFpsIEtDbGRLUW89IElHeHBZbVZ5ZEdGeWFXRnUgSUVkc2FXUmwgYkdWelpXND0gSUdadmNtMWwgYjNkaGJtbGggSUdGdWJtOTVaV1E9IFJHVm1jdz09IElFVjRaV04xZEc5eSBJR05oYzNSeiBMbk5sZEVOb1pXTnJaV1E9IElGTm9ZWEpwYm1jPSBMbE5sY21saGJHbDZaVTlpYW1WamRBPT0gSUhObGJHVmpkRzl5Y3c9PSBYMDlVU0VWUyA2Nis0IEtITjFjR1Z5IEtFOVQgWDFaRlVrbEdXUT09IGFXUjFiblE9IFBHaGxZV1JsY2c9PSBJQzgrSnpzSyBJSFpwWk1PcGJ3PT0gSUU1bFozSnYgSUV4dmNtUnogSUZSdmRYSnogSUhOdlpuUnNlUT09IExuSmxZMlZwZG1VPSBJRVZTUXc9PSBJR1JoZEdGVFpYUT0gUW1Ga1oyVT0gQ1VWMlpXNTAgSUhCbGNtdz0gSUh0OVhBPT0gS0hObGJuUmxibU5sIFQzSlZjR1JoZEdVPSBJR1JwYldsdWFYTm8gVUVsTyBLR1J5WVhjPSBMbFJ2UkdGMFpWUnBiV1U9IExrVnhkV0ZzVkc4PSBLSEJwYmc9PSBMWEJsYm1OcGJBPT0gYkhWbGJuUT0gSUVOaGJHeGxjZz09IElIQnNZWGxtZFd3PSBMU2NyIGVHTmggYzNkcFkycz0gS1h0OUNnPT0gZlRva2V3PT0gSUUxbGRHZz0gTG1kbGRFTmxiR3c9IExtSnlaV0ZyIElIbHRZWGc9IFBTYzhQdz09IExXcHpiMjQ9IElIQnlhVzFsYVhKdiBJR2x1WkdsalpRPT0gNDRLaiBJRlZPU1ZSWiBLR0ZpIDBZYlF1TkM0IFgwaEJWa1U9IExYbGxZWEp6IElFVnlaRzluWVc0PSBMWE4wWVdOciBJR1JwYzJOb1lYSm5aV1E9IElHSnlaV0YwYUhSaGEybHVadz09IElHZHlZWE56Y205dmRITT0gSUVGemFXUmwgYUdWc2JBPT0gSUhOdVlXdGxjdz09IEwyeHZaMjkxZEE9PSBJRzFwYmxkcFpIUm8gSUVobFlYST0gSUZOMGIyNWxjdz09IElGZHBjMlJ2YlE9PSBJRVYyWlc1cGJtYz0gWDJKc1lXNXIgSUZCeWIyMXZkR2x2Ymc9PSBJRTFOVFE9PSBJRUpoY25NPSA0NEszIGJtbz0gWDFSSiBJRk52WTJsaGJHbHpkQT09IElFVkggTFc5d2RBPT0gUFZ3aUpBPT0gS0dScFlXeHZadz09IElHSmxhRzlzWkE9PSBJR2x1ZEhKcFkyRjBaUT09IElHVnlaV04wYVd4bCBSWGgwY21GamRHOXkgSUhOamJBPT0gSUdOc1lYTT0gS0docGMzUnZjbms9IGFXUmxiblJoYkd4NSBJSEJ1WlhWdCBVbUZ1WkE9PSBJRXhoY0hSdmNBPT0gWTJGc2JHVnkgSUVac2IyOWsgYjNCbGJtVmsgZFdSa1pYST0gSUVkbGRIUmxjZz09IFgzZGhiR3M9IEtIZGxhV2RvZEE9PSBJRUZzWlhoaGJtUnlhV0U9IElIUmhZbXhsWVhVPSBWbUZ5YVE9PSBJQzB0TFMwdExTMHQgNklleiBaWGR2Y25Sb2VRPT0gVTNCbFkybG1hV05oZEdsdmJnPT0gSUhSb2NtVnphRzlzWkhNPSBLQ0lpS1RzS0NnPT0gWDJadmRYST0gSUZOaFpHeDUgSUNoZktRPT0gYVhOdFlYUnBZdz09IElFcGhhV3c9IGRHOUlZWFpsUW1WbGJrTmhiR3hsWkZkcGRHZz0gTG0xaGNnPT0gSUhCeVpYWnBaWGR6IElITmpZV1ptIGFXNWthV05oZEc5eSBJR052WkdWamN3PT0gSUdGMWRHOWogS0hKMCBMbWRsZEVodmRYSnogSUZKSSBJRk4xY21kbCBhWFpoYldWdWRHVT0gSUdOdmJuUmxibVJsY2c9PSBRM0J3UjJWdVpYSnBZME5zWVhOeiBJRHM3WGc9PSBPam9xT3dvPSBMWEpsWTI5eVpBPT0gSUcxaGJXRT0gSUdsdFozTT0gTG1selRHOWhaR2x1Wnc9PSBJRzVsWldSc1pYTT0gSUdWdVkzVmxiblJ5WVE9PSBiMlJoZEdFPSBJRUoxWm1abGNtVmtTVzFoWjJVPSBDV3BoZG1FPSBJRlJ2YldJPSBWVTVKVkZrPSBJR3hwYm1kbGNtbGwgSUVwaGJXRnBZMkU9IFluVm5jdz09IEtpb0tDZz09IElFMWhidz09IExtSmxaMmx1VUdGMGFBPT0gSUhCeWIzTjBhWFIxZEE9PSBJRkJvYVd4cGNIQnBibVU9IFgzTm0gWDNCdmR3PT0gSUZOamFHOD0gZUdSbCBKOE9wZEE9PSA0b0NaWVhWMCBZV2x6YjI0PSBJRVpwYkdWSmJtWnYgZEhWeWJuTjBhV3hsIFpISmxZVzA9IElHbFdZWEk9IGMzbHVkR0Y0IGFXeHNhWE5sWTI5dVpITT0gY0hKdlptbHNaWE09IFgxSkZSMFZZIElOQzAwTDQ9IElFTnZiVzExYmc9PSBRbVYwIGFYQjZhV2M9IElFMWxiVzg9IExtbGtjdz09IElIQm9iM1J2WjNKaGNHaGxaQT09IElHRndjSEp2ZUdsdFlYUnBiMjQ9IE9uWmhjbWxoWW14bGN3PT0gSUcxdlpHbG1hV05oY2c9PSBYMU5OUVV4TSBJRWhsYlhBPSBJR1JwYzNKbGMzQmxZM1E9IElHTnZiblJsYzNSbFpBPT0gSUdsdWJtOWpaVzVqWlE9PSBhV3hzYVhNPSBVM2x0WW05c2N3PT0gSUdsdWMzQnBjbUYwYVc5dVlXdz0gSUdScGMyTnBjR3hwYm1GeWVRPT0gSUZCbGNtMWhibVZ1ZEE9PSBJR1JsYzJOeSBJRlZPUkVWUyAwWUhSaXc9PSBjSEpsYzNOdmNnPT0gU1UxRlVnPT0gSUcxdmRXNTBjdz09IElHMXZjbUZzYkhrPSBYMU5GUTA5T1JBPT0gTG1acGJHVk9ZVzFsIDQ0T1ggSUdOdmJuTjBjblZqZEhNPSBJRk5WVGc9PSBSVk5RIFJtbHVZVzVqYVdGcyBJRTUxY2c9PSB3N1JzWlE9PSBjbWxqZFd4aGNnPT0gSUZWelpYSk5ZVzVoWjJWeSBhV0pwYkdsa1lXUT0gSUc5dVVtVnpjRzl1YzJVPSBJR1pwYkcxdFlXdGxjZz09IElHRnNiM1E9IFgxUklVa1ZCUkZNPSBJR1Z1ZG1seWIyNXRaVzUwWVd4c2VRPT0gTGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHUgSUhKaGMyZz0gSUV4NWNtbGpjdz09IElHbHdZV2x5Y3c9PSBRbUZqYTNWdyBVMmxuYm5WdyBJRUI3Q2c9PSBTbFZ1YVhRPSBkMjl5YTJac2IzYz0gSUVOdmJYQnNaWFJwYjI0PSBJR2x1ZEhWcGRHbHZiZz09IDhKMD0gSUcxcFlRPT0gSUZOdVlXTnJZbUZ5IElGUnBiZz09IENXbHVjM1JoYm1ObCBJRTExYzJsallXdz0gSUhkbGJHTnZiV1Z6IElISmxaSEpoZHc9PSBYMk52Ykc5MWNnPT0gWDFKRlFVeFVXVkJGIFgzTnBibU5sIElFSjVkR1ZCY25KaGVVOTFkSEIxZEZOMGNtVmhiUT09IExXUmxiV0Z1WkE9PSBZWEpsZEdnPSBMbkJoWkE9PSBjMlZyIEp5d3VMaTRLIExXWnBjbVU9IExudz0gSUc1MWJXST0gSUVSUFZVSk1SUT09IFFVMUJSMFU9IFkyaHRiMlE9IExXbHMgSUdGc1lYSnRhVzVuIFEyOXcgNWFTSCBhVzUyYVhSbCBYMGxVUlUxVCBJR3hsZFdzPSBJSEpsWld3PSBJR1oxYkdacGJHeHRaVzUwIFVtVnpkRzl5WlE9PSBYM0p5IEtHTnNZWE56WlhNPSBJSEJoWjJsdVp3PT0gZVcxaGVBPT0gY21Gd2NHVmsgN1ptVSBmV0I5UGdvPSBJRWhwY204PSBLRlJTVlVVPSBZWE4xY21WeSBJR04xWlhJPSBWV0psY2c9PSBMazl3WlhKaGRHbHZiZz09IElHOXNZVzQ9IElIUm9jbWxzYkdsdVp3PT0gUEZKbGMzQnZibk5sIElFWmxiV2x1IElIUnlZWFpsY25OaGJBPT0gSUhCdll3PT0gSUhObGRGTjBZWFIxY3c9PSBaR1ZqYkdGeSBjM1JrWVdaNCBJR0ZrWkdsamRHbDJaUT09IElFSjBiZz09IElHVjRjR3h2YzJsMlpYTT0gSUVOdmIydHBibWM9IElGQnNZV2x1ZEE9PSBJR0ZqWTNWdGRXeGhkRzl5IElFRndjRzlwYm5SdFpXNTAgTEhCaGMzTjNiM0prIElFWkJVZz09IGJIVmxkQT09IFJuVnlkR2hsY20xdmNtVT0gWkdWamJITndaV009IFgxTjBZWFJwWTNNPSBMa1JwWTNScGIyNWhjbms9IElqNG5MZz09IENYWmhiR2xrIElpSXMgU1c1emRISjFiV1Z1ZEE9PSBQa289IElHNXZjM1J5IElGSnBablE9IFgxQnZjblE9IElIWmxZMlZ6IFcxc24gSUhKaGJHeHBaWE09IExYTmxjbWxsY3c9PSBJSFoyIExuVmogSUhKMGJnPT0gVTNSaGRHVkRhR0Z1WjJWayBLR2x1Y3c9PSBJRU5zWVE9PSBMUzB0TFMwdExTMHRMUzB0Q2c9PSBZM1Z6IElGSmxiRzloWkE9PSBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gTG5ObFkyOXVaSE09IFgyUmxjM1JwYm1GMGFXOXUgSUhOamNtVjNaV1E9IFBtTT0gVkdocFkydHVaWE56IFJHVnphV2R1WlhJPSBJR2R5YVdSeiBic1NGIEtHTnZiMnRwWlE9PSBWSEpwY0E9PSBMVTF2WW1sc1pRPT0gSUhadmJHdz0gSUdkbGJtbDBZV3c9IElHTnZibVpwYzJNPSBJRU52Ym1abFpHVnlZWFJsIElIZGxZbFpwWlhjPSBJRzFwYzJVPSBJR05zWlhJPSBLSE5sYkdWamRHbHZiZz09IEpHUmhkR1U9IElITm9ZWEp3Wlc0PSBjbUZuWlc0PSBRVzVrVlhCa1lYUmwgSUhKbGJXbDQgSUdoMGIyNXogVWxjPSBUVkJKIElISmxkSEpwWlhaaGJBPT0gSUhKcFkyaGxjM1E9IExrUmxZMjlrWlE9PSBPbWx1YVhSRGIyMXdiMjVsYm5SeiBJRlJXWVd4MVpRPT0gVTJGcGJuUT0gUUdsdVkyeDFaR1U9IElGQkZVbE5QVGc9PSBMbk5sY0E9PSBJRXhFUVZBPSBaMkpoIElHZHliOE9mWlE9PSBJSEpsYkdsaFlteDUgSUVSR1V3PT0gTG1kbGRFbDBaVzFKWkE9PSBJSEJ5dzZselpXNTAgTG1kbGRGUnZhMlZ1IElHTm9hVzVsYzJVPSBJRTFsWVd3PSBXVTlWIElqNDhQejBrIEtHTm9iMmxqWlE9PSBJSEJvWlc1dmJXVnVZV3c9IElGTjBaV1ZzWlE9PSB3cUk9IElGQmhZMnRoWjJWTllXNWhaMlZ5IElGTjVibVJ5YjIxbCBSR2x5WldOMGIzSnBaWE09IGFYWmhjZz09IExuVnVjM1ZpYzJOeWFXSmwgYkdsbHc1OD0gYlc5dWJ3PT0gWDJOdmJtNWxZM1JwYjI1eiBYM0J5WlhObGJtTmwgZVc1NSBTMjVwWm1VPSBJR2R5YjI5MlpRPT0gSUhOamIyOXcgVkVWTlVFdz0gWVhOaGEyaz0gTG1oaGJXTnlaWE4wIElHaGhjbUp2Y2c9PSBZMjkyIEtubz0gSUZoMSBJSEJ5YjNCdmMybHVadz09IElFWlNRVTFGIFEyaHBjQT09IElFVmxiZz09IElPeWdoQT09IElITnRZWE5vWldRPSBWVzV6YVdkdVpXUT0gS0M0dSBYMlpwYm1semFHVmsgSUdkbGRGTjBZWFIxY3c9PSBJR1pwWW5KbCBRWGhsY3c9PSBJQ2N2Snl3PSBlV0Z5WkhNPSBUVVJDIExXSnogYVc1MFpXNTAgSUdKdmIzTjBaWEk9IExtUnpkQT09IExrUnBZV3h2WjFKbGMzVnNkQT09IElFMWxkSE09IElHSmxZWE4wY3c9PSBhVzVqY21WdFpXNTBjdz09IExtdGhabXRoIFZVbEJiR1Z5ZEVGamRHbHZiZz09IExXVjJaWEk9IFgySmhiQT09IElHaGxiSFE9IElHWnlaVzl3Wlc0PSBJRkpsWTNKMWFYUnRaVzUwIGJHbGpkSE09IFptOXlaMlYwZEdGaWJHVT0gUkdsemNHeGhlV1ZrIFgxWkZUa1JQVWc9PSBRMjlzYkdWblpRPT0gUVZORFNVaz0gSUZOcGJtcz0gSUUxaFkyVmsgSUdOMGIzST0gSUdWemRNT2pidz09IElGZHBibVJ6YjNJPSBYMk5vWldOclpXUT0gWDJSbGRHVmpkQT09IFlYUjBaVzVrIElIaHRhVzQ9IElHbHVaR2x6Y0dWdWN3PT0gTDNCbGNuTnZiZz09IFgwUkZWRUZKVEZNPSBVa1ZFU1ZRPSBTR0Y1IFlXSnZiR2xqIElHWjFibU4wYjI5c2N3PT0gYVdGcGN3PT0gUmxSUSBYMUpsWTNRPSBJRWx1WkhrPSBMWEIxWW14cFl3PT0gYjJoaGJnPT0gWDIxaGJtRm5aUT09IFEyOXRjSFYwWldRPSA3SmVRN0lTYyBJRk5zYVdObCBJR2RoZVhNPSBJR0ZzWlhnPSBZV2wwY3c9PSBJSEpsWTJWcGNIUnogVTFCRlF3PT0gSUVKRlJrOVNSUT09IElGQnlaV1pwZUE9PSBYM1pwYzJsMCBJSE53ZFc0PSBURVZVUlVRPSBJR1J2ZHc9PSBJR3hsWjJGc2FYcGhkR2x2Ymc9PSBZV0ppWVdkbCBJR05zWVhjPSBJRlJqYkE9PSBlR2x0WVE9PSBJR052ZG1WeWRBPT0gVG1rPSBJSFJvWVc1clpXUT0gSUdGc2JHVnlaMmxqIGJHOTJaWEk9IElFSnlaV0Z6ZEE9PSBMbWx6UVdOMGFYWmwgSUdkbFltVnUgVmtWU1UwVT0gV2s5T1JRPT0gQ1ZKbGMzVnNkQT09IEp5a3VKdz09IElHZGxaUT09IElGTmxjbWx2ZFhOc2VRPT0gY0hWeWNHeGwgSUVWemNHSERzV0U9IGFXWnBaUT09IExYQmhZMnM9IFVHRnlkR2xqYkdWeiBJQ2N2TGk0diBJRzExYkhScGJXVmthV0U9IFlYVjBiMk52YlhCc1pYUmwgSUZSSVVrVkJSQT09IElISmxabVZ5Wlc1amFXNW4gY21WbGRHbHVaM009IElIRjFiM1JwYm1jPSBJR0Z6YzJsemRHRnVkSE09IGFtVnVhWE09IGFHRndjSGs9IElHeGhlWE09IGJHbGlablE9IGVHUmggSUdadmRRPT0gY0dsaGNnPT0gVW1WamIyMXRaVzVrWldRPSBJRUpwY21SeiBJRmRoY25KaGJuUjUgdzd4eWJHbGphQT09IExrbE9Wa2xUU1VKTVJRPT0gWDJGdVkyaHZjZz09IDRvQ2RPZz09IFJtRnVkQT09IFgyUmxabk09IElHUnlaV0Z0WldRPSBJRjlmWDE5ZlgxOHMgY0d4aCB3NlJtZEE9PSBiMlJyWVE9PSB4TEZ6IElHUmhaR1I1IGMyTm9aVzFoY3c9PSBQWHBsY205eiBJSEpoZEhRPSBDUWtnSUNBZ0NRPT0gYVdWcSBJR1J5YVd4c2N3PT0gTFR3LyBRVUpCIExteHBibXR6IElFUmxjR1Z1WkdWdVkzbFFjbTl3WlhKMGVRPT0gTG14dmR3PT0gYUdWbFpBPT0gWDBKTVFVTkwgTDBGa2JXbHUgSUdGdGFXZHZjdz09IGFXNW5aV1E9IElFMXBZMnRsZVE9PSBMa2RsZEVGNGFYTT0gSUU1bFpXUmxaQT09IElFVnVZMjlrWlE9PSB3Nmx5YVdWMWNnPT0gSUUxaGJtbHNZUT09IElFTnZiR3hsWnc9PSBZV1JoYzNSeWJ3PT0gSUdOb2FXTmhjdz09IDVMMmcgSUc5dVpYTmxiR1k9IGVHVmggWkhWciBJR2QzIGRYSm5hV05oYkE9PSBJRU5sYm5SeWJ3PT0gSUdGbGN3PT0gWm1WbGJBPT0gSUhSeWIzUT0gSUdWc1pXTjBjbTl1Y3c9PSBJSEpwZEhWaGJITT0gSUVKcGJHUmxjZz09IElHUmxZMjl5WVhSbCBJRlJ2YTJWdVZIbHdaUT09IElHeDFjbVU9IFFYQnBRMnhwWlc1MCBaM0p3WXc9PSBJRTl5WXc9PSBRMjl1ZEdWNGRFMWxiblU9IFVGSkZSa2xZIExYUm9aVzFsWkE9PSBYMlpwWm04PSBMa2x1Y0hWMFUzUnlaV0Z0VW1WaFpHVnkgWDNOd1pXTnBabWxqIElFUlRVQT09IFBYTjFZbkJ5YjJObGMzTT0gTDNOb1pRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbz0gSUdSaGRXNTBhVzVuIElHTnNaV0Z5Y3c9PSBJRTF2ZG1WeiBJRzE1YzNSbGNtbGxjdz09IExXSmxjM1E9IElGWjEgYjJ4cFlnPT0gSUVsemFBPT0gSUdOaGNtRmpkQT09IEtFeGhZbVZzIElFUmxZbWxoYmc9PSBJRVY0Y0dWeWFXMWxiblJoYkE9PSBJR05oZGc9PSBMbFJ2UkdWamFXMWhiQT09IElGSm9iMlJsY3c9PSBJRWhoZDJ0eiBJR1p2ZFc1MFlXbHUgWDFCRlRrUkpUa2M9IFgxTlYgSUhkNFUzUnlhVzVuIElGQmxkdz09IExtTnNhUT09IDBZVFF2dEdBMEx3PSBMbmRsWW10cGRBPT0gWDBOTyBJRHM3UFE9PSBDVzVoYldWemNHRmpaUT09IElIZFFZWEpoYlE9PSBJSEIxY0hCcFpYTT0gSUhSbGNtMXBibTlzYjJkNSBJR0ZrWkdsamRHVmsgSUdadmNtZGwgSUVkaGNtUnVaWEk9IElIQmxjM052WVE9PSBDVkpsYzNWc2RGTmxkQT09IElHRjBkR1Z1ZFE9PSBZVzVuWlcxbGJuUT0gWDJsdVpITT0gUTJocCBZWEpwZEdnPSBSVzVqYjJScGJtZEZlR05sY0hScGIyND0gYlc5MWMyVmtiM2R1IElFSkZWRmRGUlU0PSBkMlZwWjJnPSBJa1p2Y2c9PSBMbVJrIGFYUmxiQT09IFdVOD0gSUVScFkyVT0gZFc1cGVBPT0gSUU5aWRBPT0gSUVObFpHRnkgSUhOd1pXTnBiV1Z1Y3c9PSBjRzl5Ymc9PSBJSFZ1YjJabWFXTnBZV3c9IDZidVIgYzI5dFpYUnBiV1Z6IElFSjFiR3hrIGRISjFjM1E9IFoyVjBVbVZ6ZFd4MCBJSE50YjJ0bGNuTT0gSUhOaGJtUjNhV05vWlhNPSBJR1Y0YUE9PSBJRVpoWkdVPSBYMFJEIElHMWhjM1IxY21KaGRHbHZiZz09IFptOXlkR0YzWlhOdmJXVT0gVkVoSlRrYz0gWDJGdVpISnZhV1E9IElHUmxaR2xqIExYTmxibk5wZEdsMlpRPT0gSUc1aFkydDAgVEVsQ1NVNVUgSUdGbmIyND0gSUVSSlUwRkNURVU9IGIyNWxjMmxoIFltbGxjdz09IElGcEpVQT09IElHaGhkVzUwWldRPSBJR04xYVdRPSBMMk5oY25RPSBhMjl6IENWSlVURlU9IElHaHBibVJsY2c9PSBJR0ZrYVhCcGMybGphVzVuIFNVVk9RMFU9IExtSmhibXM9IElFTjVjSEoxY3c9PSBiV2w0WldRPSBMbU41IExYTnBibWRzWlE9PSBQR3hsYmc9PSBRMjl0YVc1biBJR1poZFd4MGN3PT0gSUdadmNtVnpaV1U9IFoyVjBiR2x1WlE9PSBJbUU9IElHSnlZV2M9IElHUnBjMk56IElISnBjR1U9IElHN0Rwbkk9IElFZEggVTBoUFZBPT0gWkdWeVlXSmhaQT09IEtHVmthWFE9IFZHOU1aV1owIFcxMHBPd289IElHUnZSMlYwIGRtRjBkWEpsIFRtVmxaR1ZrIElFTm9aVzVuIFkyTnAgUlVaSiBJR1psZFdRPSBJR3gxYm1GeSBMbE5vWVhCbCBUbTlpYjJSNSBYMVJTU1VkSFJWST0gUTNrPSBaM0p2ZFc1a1EyOXNiM0k9IElGSmxiVzkyWVd3PSBLR0p2ZEhSdmJRPT0gSkcxelp3PT0gVTBOSlNRPT0gY21sMGVnPT0gSUdaeVpXNTBaUT09IElHTnZiWEJ2YzNRPSBZVzV6ZDJWeVpXUT0gSUZKdlpIST0gWDBoVVRVdz0gSUhOcGJHaHZkV1YwZEdVPSBJRkZWUlZOVSBJRU5oZEdobFpISmhiQT09IExrTnZiVzFsYm5RPSBJRTF1IExXNWxkSGR2Y21zPSBMbWRsZEVacGJHVT0gTG1kbGJtVnlZWFJ2Y2c9PSBJRU5vWldOcmIzVjAgWDNwdmIyMD0gSUdWdVkyOWtaVlZTU1VOdmJYQnZibVZ1ZEE9PSBYMVJEIGMyOXQgSUZObGNtbGwgSUdKaGMyVlZVa3c9IENYSjFiZz09IElHaDFhQT09IExuTmxiR1ZqZEdWa1NXNWtaWGc9IElGTlVRVkk9IGZpMStMUT09IFlXSmpaR1ZtWjJnPSBMbTFoY0hCcGJtYz0gUFdSaGRHVjBhVzFsIFEyOXZiQT09IGJtbHQgSUVScGNtVmpkR2wyWlE9PSBSbVZrWlhKaGJBPT0gSUcxbGJuVkpkR1Z0IElOQ1EgUVc1dVlRPT0gSUZKbFkzSmxZWFJwYjI0PSBjbmxoYmc9PSBMV0ZuWldRPSBlbVZ5WW1GcCA0b0NtNG9DZENnbz0gWTJGdGNHOD0gSUcxcGJtbGhkSFZ5WlE9PSBaR1YwWVdObyBiV1ZoYm1sdVp3PT0gWDJWdGNBPT0gVUdWaGF3PT0gSUdKamJRPT0gSUVoMWJtZGhjbWxoYmc9PSBJRU5oYzJOaFpHVT0gSUhOaFkydHogSUhSeWRXNWpZWFJsIElPS1dpT0tXaUE9PSBJSGRvWVd4bGN3PT0gSUhOdmNuUmhZbXhsIElHRnpjMlZ5ZEhNPSBJSE5sWVd4eiBiMk41ZEdWeiBYU2twS1FvPSBZV3hoY20wPSBjbVZ6YzJsdVp3PT0gS0hOcFoyNWhiQT09IElHVnRjR1Z5YjNJPSBDVTlPIFkyOXRiV2wwZEdWbCBJSFJ5YVd4dlozaz0gTGxSeVlXNXpZV04wYVc5dVlXdz0gUjNKdmR3PT0gWDNWaGNuUT0gSUhOM2FXNW5jdz09IElITndaV04wWVdOc1pRPT0gNG9DWllYWT0gSUZObGJuUnBibVZzIElObUUgSUZSdmRRPT0gSUhkcFpHOTMgWjJWeVlXeGsgTEhWcGJuUT0gSUhWdWRYTjFZV3hzZVE9PSBQRU5oY21RPSBJRkpsYzNSaGNuUT0gYlc5eSA0NEdDNDRLSyBhWGhsWkZKbFlXeHBkSGs9IElHaGhibVJuZFc0PSA0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQSBJR3hwZEdocGRXMD0gVW1WemIyeDJaUT09IFoyVjBRbmwwWlhNPSBMMloxYm1OMGFXOXVjdz09IElIUmhZMnRzYVc1biBUM1YwYkdsdVpXUT0gSUgwOEx3PT0gSUZObGVHOD0gSUVGdWF3PT0gSUhKaGRHbHZibUZzWlE9PSBjbVZ0YjNabFFYUjBjZz09IElHMTFibWxqYVhCaGJHbDBlUT09IElHRnpjMkYxYkhSeiBRMGhQVDB3PSBJRkpsWlE9PSBJR0poZFdRPSBwcXc9IElHVnVhR0Z1WTJWeiBJTkMvMFlEUXRkQzAgSUdOdmJtTmxjM009IExtbHVjM1JoWjNKaGJRPT0gTG1kbGRGSmxjM0J2Ym5ObCBjMlZuYldWdWRITT0gSUhkbGJHeGlaV2x1Wnc9PSBmVHNLQ2dvSyBhSFZ1Wnc9PSA0NE9HIElISmxibTkyWVhSbFpBPT0gTG1WNGNHVmpkR1ZrIElISmhaR2xoYkE9PSBJR052YlcxMWJtRnMgZFhObGNrMWhibUZuWlhJPSBLMkU9IElHWjFibVJoYldWdWRHRnNjdz09IExsUkkgNklJPSBJSEpoYm5RPSBJRk4wY21GMyBJRTlzWlVSaSBZWHBwYnc9PSBJR2hoYldKMWNtYz0gSUhCaGFXNTBjdz09IElIUm9kVzFpY3c9PSBJRTUxYkd4UWIybHVkR1Z5UlhoalpYQjBhVzl1IElHZHliM1Z3WlE9PSBJRWh2YldWRGIyMXdiMjVsYm5RPSBJR0poYkd4diBJRWxPU1ZSSlFVdz0gWDJGeVpRPT0gSUZCbGN3PT0gZFhKelpYTT0gSUdKaGNtUjZidz09IExtZGxkRXhsYm1kMGFBPT0gWVcxdmRHOD0gTG01dmRHbG1lVVJoZEdGVFpYUkRhR0Z1WjJWayBhV1Z1WlhNPSBaVzU2YVdVPSBYMlZ0WWc9PSBkVzF1YVE9PSBjMjF2YjNSbyBJRVJ5Ync9PSBjR0Z6ZEdVPSBJRTVoY25JPSBMUzB0TFFvSyB6NGs9IElFRjFkRzl5IElHOTFkSEp2Y3c9PSBJRXhCUWtWTSBMbkJoIExsTjBkV1JsYm5RPSBLRmh0YkE9PSBJR1YwYUc1cFkybDBlUT09IElFbDJlUT09IDQ0S0kgWDJaaGEyVT0gUHlnNiBkWEJzYjJGa1pXUT0gWjJWMFRXRnVZV2RsY2c9PSBMVkZoWldSaCBiMlJwWVdNPSBRMjl1Ym05eSBhV2hoYmc9PSBUVUZVIEtHMXBaQT09IElFRnNZbUZ1IElITnZhWEk9IFEyOXRZbTg9IElGQjFZbXhwWTJGMGFXOXUgYjNCdmRXeHZjdz09IGNHbHogSUhSbGJYQnNaWE09IGIyNW5lV0Z1Wnc9PSBYMk5zYVdWdWRITT0gSUhKdlpITT0gSUhoaiBhV3ByWlc0PSBJSEpsWVhBPSBJT1M0aStXTmlBPT0gQ1dOdmJtNWxZM1E9IFJtOWpkWE5sWkE9PSBMR052ZFc1MCBhV1YwWlhRPSBJR2hoWTJsaCBYMkZzYkc5allYUnZjZz09IElIUnZlR2xqYVhSNSBLSE5sY1hWbGJtTmwgSUc1MVpYTjBjbTl6IElGQnlhVzVqYVhCc1pYTT0gSUd4c1pRPT0gWVd4aGNtbGggTG5keWFYUmxVM1J5YVc1biBJRUZHVEE9PSBhV1p1WkdWbSBJRVJ2Y3c9PSB4WnRqYVdVPSBJRUZuWjNKbFoyRjBaUT09IElITmhZM0pwWm1salpYTT0gWDI5bVpuTmxkSE09IGJHUmkgSUd4aGRHTm8gSUdaMWJHeHpZM0psWlc0PSBiV2x6YzJsMlpRPT0gVDFCVVNVOU9Vdz09IElGUmxiR1Z3YUc5dVpRPT0gSUdGeWMyVnVZV3c9IGFtVnFaWEk9IElFaHZjM0E9IElHWmhkbTkxY21sMFpYTT0gY21sMlpRPT0gTG1sdVkzSmxiV1Z1ZEE9PSBJR0oyIElFWmhiblJoYzNScFl3PT0gTG5OaGVRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJRzFsWkdsamFXNWhiQT09IElFUlNUMUE9IElIQnBkSGs9IGJXVjBhWE09IElIZHZiR3hsYmc9PSBJR0psWmc9PSBYMEpzIElENCtDZ289IFltOTNaWEk9IElITjNZWEJ3WldRPSBMMmx1YzNSaGJHdz0gSUhOcGJtdHogWlhSeWFYcGwgSUdSbFkyeHBibVZ6IENXMTVjM0ZzIElFTlRkSEpwYm1jPSBJRTF2ZEdsdmJrVjJaVzUwIExreGhibWQxWVdkbCBVbTloWkE9PSAwWUxRdGRHQSBZWE5qYVcxbGJuUnYgSnlrcExUND0gTG1GaWIzVjAgS0dWa2FYUnZjZz09IElGSmhkR2x1WjNNPSBhVzVqYjIxbCB4YUZsIExtUmxjWFZsZFdWU1pYVnpZV0pzWlVObGJHdz0gSUVGMWMzUnlhV0Z1IElITjFiR3hoIElGUnlhV0oxYm1GcyBJRVJwWkc0PSAwTDdRc3RDdzBZQT0gSUdsdWMzQmxZM1JwYjI1eiBRbTl6Y3c9PSBJR052WTJ0MFlXbHNjdz09IElHRndiMnh2WjJsNlpXUT0gWDNOMVluQnNiM1E9IGIzQmhiQT09IEt6MG8gSUhKbGMyOXVZVzVqWlE9PSBhV0oxIElPdW1yQT09IGNtOXRZUT09IGNtVnpaWEoyWlE9PSBjR3h6IElGUmhhQT09IFlYaHBaWE09IFQxQk1SUT09IElFUmhjbkpsYmc9PSBJRnB2YldKcFpRPT0gWDAxaGNBPT0gSUYwcENnbz0gSUZGcCBJRk5oYVd3PSBJSEpsYzNSeWFXTjBhWFpsIElHVnliM05wYjI0PSBMWEJoY2c9PSBWMGhKVkVVPSBJRzlzWkhVPSBJR0Z3WlhKMGRYSmwgSUdKcGRHTnZhVzV6IGRHVjRkRzg9IElFTnZiV05oYzNRPSBJSFJwYldWc1pYTnogWlc1cmFXNXogSUdabFpXUmxjZz09IEwzUnRjQT09IGNtVnpaR1Z1IEt5ZGYgTGtSbGMzUnliM2s9IElNT25iMnM9IElFUlBRMVZOUlU1VSBMbXh1Wnc9PSBMblJoWjA1aGJXVT0gSUd0MWJHeGhiZz09IFpXZHlZWFJsIElDZ3FMZz09IDU3eVc2TDZSIElHaGhibVJ6YUdGclpRPT0gYzI5aiBYMmRsYjIxbGRISjUgSUVSaGJXRnpZM1Z6IFRXbHViM0k9IElFdGhabXRoIDdKZXMgUm14dmNtbGtZUT09IFgyTnZiWEIxZEdVPSBMbVY0Y0hJPSBJSEJoY21Gc2JHVT0gSUVScFlYbz0gWTJseSBXM1JoY21kbGRBPT0gSUdwdmEybHVadz09IElHZHNiM0k9IEtITmxkSEU9IFgyaGhibVJzWlhKeiBTR0Z1Wnc9PSBJR1psY25JPSBjbWx0YVc1aGJBPT0gQ1NBZ0lDQUpDUT09IFpXNTBhV1Z6IFpHVm1hVzVsY3c9PSBMWFJoZUE9PSBhbk52Ym5BPSBJRlZRVXc9PSBiV1YwY204PSBYMTg3Q2c9PSBJRlZuWVc1a1lRPT0gWFNrcE9nbz0gWDNSayBlR0ZsIGJIYz0gTGs5VCBJRXh2WjJkbFpBPT0gWVdOcFpBPT0gSUUxaGVXOD0gWVhOd1pXTjAgSUhaaFoybHVZV3c9IElHbHVhWFJwWVd4cGVtbHVadz09IElITjBaWEp2YVdSeiBabWxqZEdsdmJnPT0gUjFKRiBaMlZ1WkE9PSBJR3hwWVdKcGJHbDBhV1Z6IElFeGxkSE09IFRXVmphQT09IEtHNWogS0dOb1lXNW5aUT09IElHTnZibTVsWTNSdmNuTT0gT21zPSBJSFJoYzNRPSBJU0lwT3dvSyBkR2hwYm1keiBjbTl3YUhrPSBiSFZsZEc5dmRHZz0gSUZOcFoyNVZjQT09IExtTjBjbXc9IElIUm9aWEpsYVc0PSBiM0prWVE9PSBMbVZ6WTJGd1pRPT0gYVdkaGRHOXkgSUhCbGRISnZiQT09IElITndaV05wYldWdSBJR1JsWW5WMFpXUT0gTFZCeWJ3PT0gSUdOeWFYTmxjdz09IExtRmtaRlpwWlhjPSA2NCtaIExXUnZiM0k9IElHMXZibVYwIElHMXBiR3hwY3c9PSBJSFpwWlhJPSBTVzUwWlhKdVlXeEZiblZ0WlhKaGRHOXkgSUdGa2JXbHVjdz09IElFeGhhWEk9IGVtbHUgWjJWMFVYVmxjbms9IGRXMWliR1Z6IFRFbE5TVlE9IElGWnBadz09IFgzTnZibWM9IFBFTm9ZWEpoWTNSbGNnPT0gT2pvdSBYMmh2YlE9PSBYMkp3IElGTjFjR1Z5ZG1semIzST0gYzNWaWJXbHpjMmx2Ymc9PSBZV0pwYkdVPSBJRzV2YVE9PSBUM0pEY21WaGRHVT0gSUhCbFpXdz0gSUc5dVUzUmhjblE9IElITmxiblJwYldWdWRITT0gZG1Wb2FXTnNaWE09IElHTnNZWE56Y205dmJYTT0gSUhONlpYST0gSUdKbGJtUnBibWM9IElHeHZibWRsZG1sMGVRPT0gSUdGamJBPT0gSUVGc1pYQndidz09IElGVk4gSUZKcFkyaDAgSUcxMWJIUnBjSEp2WTJWemMybHVadz09IFJFOU5RVWxPIElpd2lLdz09IFgxbEZRVkk9IElITmpjbUZ3WlE9PSBJSE52YkdsMFlYSjUgSUNKZElqc0sgTDJWeWNtOXljdz09IDdKNnMgbk91Z3BRPT0gWW1WMGRHVnkgQ1c1MWJXSmxjZz09IElFeEcgSUVGamNtOXpjdz09IFVIVmlUV1ZrIFhDSWkgSUVWNFkyVnNiR1Z1WTJVPSBJSFZ6WVc1a2J3PT0gSUZWSlVBPT0gUVdOMGFYWnBkSGxKYm1ScFkyRjBiM0k9IFgxWlBTVVE9IElHSnlaV1ZrY3c9PSA3NzJsIGRXVnpkR0Z6IElGUnlaV0Z6ZFhKbCBkWE4wY21Gc2FXRnUgS0daaFkyVT0gSUZSbGJtNXBjdz09IENVbHVkQT09IElFaGhibk5sYmc9PSA1N1U9IE9raz0gSU9LY2xBPT0gUjFKQldRPT0gVDFWVFJRPT0gSUdobGNHRjAgb08wPSBRVWxTIHc3UEZ2QT09IElIRjFaWFZsWkE9PSBkbWx1WTJsaCBJRU5vY205dGFYVnQgSUdOdmJYQmxkR1Z1WTJVPSBkVzVuWVd3PSBhV3hzYVE9PSBJR2RsZEVKNSBJRVpwYm1SbGNnPT0gSUdsdVkyRndZV0pzWlE9PSBJSE5oWkdRPSBJR05wZEdWeiBJRU5vZFhKamFHbHNiQT09IFUyUnIgVFc5eVpXOTJaWEk9IFFYTndUbVYwIEtFWnNiMkYwIEpIQmhjM04zYjNKayBJRU52Ym01dmNnPT0gTFhObGMzTnBiMjQ9IFgyUnQgS2lrcCBJR1JsZFhSelkyZz0gSUU1WSBJSEJsY210eiBYMU5QVWxRPSBYMVJQVDB3PSBYMVpKVTBsQ1RFVT0gTG1GemNBPT0gNW9pVyBJRUp5WldGMGFBPT0gUkdWMFpXTjAgSUVSMVpXdz0gTG1OdFlnPT0gVzJsMCBMbE5sZEVKdmIydz0gSUc1aGNtTnBjM009IElHRmlhV1JsIElHVnFaVzF3Ykc4PSBJT0tFbFE9PSBJRzF2Y201cGJtZHogSUdOdmJYQjFkR1Z6IExuTnpiQT09IGFuUT0gSUcxMVkyaHZjdz09IFgxTlQgVzJWdVpBPT0gSUdKaGMybHUgSUdGc1ozVnViM009IElFTnliMkYwYVdFPSBiR2x1WlhkcFpIUm8gS0hSaFozTT0gS0docFpHUmxiZz09IHc2MWphVzg9IElHRndZWEk9IElOQzIgNUxpTyBMbVp2YjJRPSBJRkoxY21GcyBJR0p5WldGa2RHZz0gNWIyeCBLSE5sYzNNPSBLeUlwIElGQmhjM1JsIElITmxjblpwWkc5eSBJRUpwZEZObGRBPT0gSUZSeVlXND0gYkdGMWN3PT0gZG1WMGRHVT0gWlhsbGN3PT0gSUVOTVNVTkwgSUZaSlNVaz0gSUZSMWNtNXogSUV4bFFuSnZiZz09IElFMTFhZz09IElFUmxadz09IElFRmtkV3gwY3c9PSBYM04xYVhSbCBjSEp2WTJWemMyRmliR1U9IElGQklXUT09IFoyaGxjM1E9IExrWmhhV3c9IElGTnNZV05yIFkyVnEgWEVOaGNtSnZiZz09IElITjFjR1Z5YzNSaGNnPT0gSUdodmJHUnBibWR6IEtHWnZjbTF6IElDY2pKdz09IFRYVnNkR2x3IEtDSmJKUT09IExYTnZiR2xrIEwzVnliQT09IExYUnBaWEk9IFcyeGxibWQwYUE9PSBJRk4wY21WaGJWZHlhWFJsY2c9PSBJRTFoY210bGRIQnNZV05sIFoyVjBkR1Y0ZEE9PSBYMVJKUTBzPSBJRVp2Y21kbCBJR0pzWVdOcmFtRmphdz09IElFUlBSVk09IElFMWhkSFJsY25NPSBkMkYyWlhNPSBJSGRvYVhOd1pYSmxaQT09IElHeDFjMmc9IDdKaWsgWkdsbmFYUmhiQT09IElIZHlhVzVyIElFaHZaMkZ1IElISjFjM1JwWXc9PSBMa0Z3Y0d4NVVtVnpiM1Z5WTJWeiBJRWhoY21SNSBiM052YldWeiBRVlZVIExsTlVRVlJGIElHNWhjbkpoZEdsMlpYTT0gQ1hOMGIzSmwgWW1saSBDVk5qWVc1dVpYST0gSUVOdlpIaz0gWEZKbGNHOXphWFJ2Y21sbGN3PT0gSUhKbGRXNXBiMjQ9IFlXNWtkVzA9IDRvQ1phQT09IElITnVhV1ptIFRsTkNkVzVrYkdVPSBJR052YlhCeVpXaGxibVE9IFgxVlRRVWRGIFgyOWpZdz09IFZWSlNSVTVEV1E9PSBTazVKIElITndaV05wWVd4cGVtbHVadz09IElIWnBjMmx2Ym5NPSBJR1J2Ykc5eVpRPT0gSUhiRG9RPT0gSUVOb1pYWjUgSUZOMGVXeGxaQT09IGFXMXdZV04wIFlXeHNaVzQ9IElHdGhjblE9IElGUmhZbXhsZEE9PSBjM1IxWm1ZPSBjbVZsYzI5dFpRPT0gMExEUmd0QyswWUE9IEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBLIFgwRmtiV2x1IElHTmxiR3h3YUc5dVpRPT0gSUdGMWRHOXdiR0Y1IElHTmhiV0pwYnc9PSBJRzFoY21sMGFXMWwgWDBKUFQxUT0gTFhGMVlYSjBaWEk9IElHeGhkR2x1WVE9PSBJRUZLUVZnPSBaWEYxYVhZPSBJRVp5YjI1MGFXVnkgSUZoWiBmVjBLIElGSnZkV2RvIExuQnliM1J2IElHTnZjbkpsWTNSdVpYTnogSUdaaFkybHMgSUZKbFlXTm9aV1E9IDQ0R2Q0NEd1IFZrbFQgTG5CeiBJSE4wY201amNIaz0gSUdScFptWjFjMmx2Ymc9PSBMbk4wWVhKMFFXTjBhWFpwZEhrPSA3Nys5NzcrOTc3KzkgSUdGalkyOXRjQT09IFFVMUZVMUJCUTBVPSBhVzF2Ym1saGJITT0gSUVKc1lYTjAgWVdKNWNtbHUgSUdSdmJXVT0gSUdWNGRISmhkZz09IElIbGxiZz09IElHTjFiR2x1WVhKNSBVRkpKIElFTnZiVzExYm1sMGFXVnogYm1sayBYMjl3WlhKaGRHbHZibk09IExtaHogSUUxcGJIUnZiZz09IElHNXZhWE5sY3c9PSBRWFYwYjNKbGMybDZhVzVuVFdGemF3PT0gS0dOcFpBPT0gZlFvS0Nnb0tDZz09IFhYMHNDZz09IElFUmxkR1ZqZEdsdmJnPT0gZEdGaWJHRT0gSUd4cFltVnlkR2xsY3c9PSBYMFJaVGtGTlNVTT0gZDJkbGRBPT0gSUZURHZIST0gSUZCaGMyTmhiQT09IFZISmhibk53WVhKbGJuUT0gUkdWc1lYbGxaQT09IFhTZ3AgSUVobGNtSmxjblE9IFBFRmpkR2x2YmxKbGMzVnNkQT09IFkyaGhiR3hsYm1kbCBJRzExYzJoeWIyOXQgTG1sdWMyVnlkRUpsWm05eVpRPT0gSUZKcGJnPT0gSUdoMWJXOTFjZz09IElHYkR1QT09IFlYQnBTMlY1IFlXeHNiMk5oZEdWayBJR052Ym1abGMzTnBiMjQ9IExpSXNEUW89IENXRnpjMlZ5ZEZSb1lYUT0gSUZOUFVsUT0gSUV4UFVrUT0gSUdWNGNHOXlkR1Z5IExuTmxkRXhsZG1WcyBjRzlyWlcxdmJnPT0gWVhOb2RISmggSUdiRHFRPT0gZFhKaGRHOXkgS0UxVFJ3PT0gSUhSMWNBPT0gSUVoMWJHdz0gSUhscFpXeGtaV1E9IExsTjFZbXBsWTNRPSBYRkp2ZFhSbCBJVDg9IElOR0QwTFRRc05DNyBYRk5sWTNWeWFYUjUgTFdGeSBJR0ZzYkdWbllYUnBiMjQ9IEtGTmxkSFJwYm1keiB3NlJ1WkdWeSBJR1ZzYkdsd2MyVT0gSUZKbGRISnZabWwwIElISmxaM1ZzWVhScGJtYz0gSUUxdmJHeDUgSUV4dmF3PT0gWDBOMWMzUnZiUT09IElGQnliMjF2IGFYTnBiZz09IElISmxjM1Z0WldRPSBJRzFsZEhKdmNHOXNhWFJoYmc9PSBMbVZ5Y205eVRXVnpjMkZuWlE9PSBPaTB0TFMwdExTMHRMUzB0TFMwOEx3PT0gTG0xcyBjMk52Y0dsaiBMbkpsWm5NPSBZWEIwYjNKeiBJRWx1YzNSeWRXMWxiblJ6IElIQnliM0JoWjJGMFpRPT0gZlMwKyBJSEJoYzJGa2J3PT0gZEdoaGJtcz0gWDBSbGJHVjBaUT09IElFSnlhV2RvZEc5dSBMSFZ1YzJsbmJtVmsgNUwyYzZJQ0YgSUdGemNHbHlZWFJwYjI1eiBMV2h2ZHc9PSBVbTl6WlE9PSBQU2dvIFgyNWxaV1JsWkE9PSBYM0JzZFhKaGJBPT0gUEVGd2NHeHBZMkYwYVc5dSBJRmRGUlVzPSBJRlZ1Ykc5amF3PT0gSUZSRlRWQT0gVTI5MSBJSE5qYUdsNmIzQm9jbVZ1YVdFPSBJSFJ5YjJ4cyBJR052YlhCc1pXMWxiblJoY25rPSBJRTVGVkZkUFVrcz0gSUdKc2FYST0gSUhCeWIyZHlaWE56UkdsaGJHOW4gSWlVbyBJRUYwZEhKcFluVjBaVk5sZEE9PSBDWFJ6IExtbDBaWEpwZEdWdGN3PT0gNksrZCBJR1Z6WTNKcGRBPT0gZG05MWN3PT0gWDNCc1lXTmxjdz09IFNFcz0gSUhObFozVnBjZz09IFgyWjMgSUZKdmRXNWtaV1E9IElHUnBjM0J2YzJsMCA2S2VHIGNHRnliUT09IGQyOTMgVTFSU1ZVTlVTVTlPIExtRnNiRzkzIElFTm9ZWEpUWlhGMVpXNWpaUT09IENXVjRkR1Z5Ymc9PSBJSEJ5YjNObFkzVjBaV1E9IElHMXZjblJoY2c9PSBJRXAxWkdFPSBMVzF6Wnc9PSBJR1Z6ZEhWayBMbWRsZEVSbGMyTnlhWEIwYVc5dSBJSE52ZHc9PSBZVzFpY21VPSBJSEp2YldFPSBSVzVvIFltOXVkWE09IElITnhkV0YwIElHUnBjM1J5WVE9PSBaV1JKYldGblpRPT0gSUhCbGNIQmxjbk09IExYQmxjbVp2Y20xaGJtTmwgTEFvS0NnPT0gTEdacGJHVT0gSUUxSlRVVT0gWDJOdmJtTmhkQT09IFFVSlQgTFdaaGMyaHBiMjQ9IElIVnVaR1Z5WTI5MlpYST0gVDI1bFZHOU5ZVzU1IElISmxZMnhoYVcwPSBRMDlRV1E9PSBJR0pwYm1SeiBJRlJoY0dVPSBJR2R2YzNOcGNBPT0gSUVWeGRXbDBlUT09IEwwTmhjbVE9IExtRmpkR2wyIEoyRnQgSUdSeVlXbHVZV2RsIFBGTmpZV3hoY25NPSBJRzl1UW1sdVpGWnBaWGRJYjJ4a1pYST0gS0NrL0xnPT0gSUhOdmNuSnZkdz09IElFbGkgZFhCNSBYMVZWU1VRPSBJRU5vWVhKdCBJRVZzWldOMGFXOXVjdz09IExtOXVSR1Z6ZEhKdmVRPT0gSUVsdWRHVnlaWE4wYVc1bmJIaz0gYjNWdVpHbHVaMEp2ZUE9PSBYMlJsZEdWamRHbHZiZz09IExXaGxiR1E9IFgzVnVhMjV2ZDI0PSBJSEpsWm5KaGFXND0gSUczRHFYUnZaRzg9IElHVkNiMjlyIFJVNVBUVVZOIElHUmhibWM9IFVISnZabVZ6YzJsdmJtRnMgSUdScFkzUnBiMjVoY21sbGN3PT0gTDIxNWMzRnMgSUZOVVZVUT0gSUcxaGMzTmwgYzJOaGNHVT0gSUdSeVpXaz0gT201aGJXVT0gTG14dloyOD0gVTJsbmJsVncgSUhSaGFIVnUgS0hSb1pXMWwgSUVabGJXMWwgSUdKdmJXSmxjZz09IElFcGhaR1U9IElGUmhlUT09IElITjFZbTFoY21sdVpRPT0gWDJOc1lYVnpaUT09IGVubGphQT09IElITnBiWFZzZEdGdVpXOTFjdz09IElHTmhjMjl6IExtSnZiMnhsWVc0PSBLR3hvY3c9PSBJR052Ym5ScGJtVnVkR0ZzIExYTmhiR1U9IENXVnVkZz09IElFTjFkR1U9IElFWmhZM1J2Y25sSGFYSnMgWVdKMWN3PT0gTDNaaGJIVmwgSUdwaFpIZz0gSUhOMFpYSnUgUGo0S0NnPT0gSUhOMWNtWmhZMlZrIElPeWdnT3llcFE9PSBjR3hoZEhvPSBDV1Z0WVdscyBZMlZ3ZEc5eWN3PT0gSWo0byBJR1Z3YVd4bCA2Sys3IElFUmxZblE9IDVaR0sgVGs5USBJbWgwZEhCeiBPbW89IFJtOXliVWwwWlcwPSBYMHhKUTBWT1UwVT0gTG1kbGRFUnZkV0pzWlE9PSBJRUZuWlc1a1lRPT0gQ1dacGJtRnNiSGs9IEtHWnBiSFJsY25NPSBLR0YyIDU3Nk8gUVZCRlVnPT0gSUd4aGRtRT0gMExYUmdOQzIgS1NrcEtRb0sgSUdaaGRXeDBlUT09IFgyNXQgSUhSeVlYWmggS0VKcGRHMWhjQT09IElITndaV1ZrYVc1biBQaWNwTGc9PSBJSE5qY21WbGJtVmsgWDNKdmJHdz0gSUUxaFkwSnZiMnM9IElFRlZSQT09IElHUnBZV2R1YjNObCBMa2RsYm1WeVlYUmwgSUY1ZSBJSE4wY25NPSBXMVJsYzNRPSBJSEpoYm5OdmJRPT0gSUVSSVExQT0gWld4a1pXND0gSUdsdWRHVnljSEpsZEdGMGFXOXVjdz09IEtDbGRMZz09IFpteGhkRTFoY0E9PSBJR3hwYm1WSVpXbG5hSFE9IFgyMXZkVzUwIElGZHBlbUZ5WkhNPSBJSE5zZFhSeiBaV2hzWlhJPSBiMlJoYkE9PSBJRzFwYkdsMGFXRT0gNWJJPSBaV0Z5Ym1WayBJRzFwYzJWeWVRPT0gYVc1MGRtRnMgWm5WdVpBPT0gSUdocFpHVnogSUdScFlYSnkgSUZkbGMyeGxlUT09IElIaHRiUT09IElIRjFaVzA9IElFRnlZV0p6IGFXWjBhQT09IFlYUmxaMjl5YVhwbFpBPT0gUkdsemNHOXpZV0pzWlE9PSBVSFZ5WlE9PSBYMDVQVkVsR1dRPT0gYzI1cGNIQmxkQT09IElFZGhjbkpsZEhRPSBMbkoxYm01cGJtYz0gTG5kbGFXZG9kSE09IElDZ3RMUT09IElHbHVkbUZ5YVdGdWRBPT0gNUxxTDVMdTIgSUVGc2JHOTNaV1E9IFpHbHljdz09IElIQmhjM05wYjI1eiBJR3hoWkE9PSBJRVpzZFhObyBiV1Z1ZFhNPSBPbUpzYjJOciBJR052YlhCeVlRPT0gTG1Ob2IyMXcgWVd4c2IyTmhkRzl5IElHTjFjbUYwWldRPSBJRXR1YjNkcGJtYz0gSUZCaGRIUmxjbk52Ymc9PSBJSFJsYkdGbyBKMlY0IElHUnZiMjFsWkE9PSBJSEJvYVd4aGJuUm8gYjNSMGVRPT0gTG5OMGVXeGxjdz09IFQzZHVaV1E9IElHRnNiR1Z5WjJsbGN3PT0gUFhCaGNtRnRjdz09IGIyTmxjMlU9IGFYUmxiR2x6ZEE9PSBJRk5sYm1ScGJtYz0gWW1WbSBiM0p5WVhJPSBJRTdEbzI4PSBJRVpoY21kdiBJRXgxWWc9PSBJRU52YldKcGJtVmsgWDJkcGRtVnUgQ1FrSkNRa2dJQ0FnIElISmxZMjl1WTJsc2FXRjBhVzl1IFVHRjBkR1Z5Ym5NPSBZWHBoY21RPSBJR0pwYjIxaGMzTT0gSUVodmRYTmxjdz09IGNtVnpjSFZsYzNSaCBZMk52IEwzUnZjR2xqY3c9PSBJRmwxYXc9PSBJSGRsWVd0bGJtVmsgWDJOaGJHVnVaR0Z5IElHMTFiR2hsY21WeiBJRTFoY213PSBJSE5wYm1VPSBJRlJwYkE9PSBJRk52ZFd4eiBJRVJsZFhSelkyaGwgSUVaUFRFeFBWdz09IElIQnBjR1ZzYVc1bGN3PT0gSUVKbGRtVnliSGs9IFgwUkpVRk5GVkZSSlRrYz0gSWlNPSBJRkJ5YjNSdiBMbUpwWnc9PSBJRk5oZG1sdVozTT0gSUZSaGJubz0gYW5WdSBJRWRoYlcxaCBJRk5oWkdRPSBJR0ZrZG1semIzSnogSUhKdllYTjAgSUhWdWRHVnljdz09IGRXUnBaWE09IFgyeHZiZz09IExYQnZhVzUwWlhJPSBJRVZzWlcxbGJuUlNaV1k9IFhFSjFhV3hrWlhJPSBaWGhoYlhCc1pVbHVjSFYwIExuZGxZbVJ5YVhabGNnPT0gWkdGMFlWUjVjR1U9IElGRjFhWFJsIElFTmxiSFJwWTNNPSBkV2xzIExXUmxabVZ1YzJVPSBZbWx6YUE9PSBJRlZKVjJsdVpHOTMgSUZOMVpHUmxibXg1IExtaHZkQT09IExuSmxZWE52Ymc9PSBJR2ZEdG5JPSBRVTFFIExrMTFiSFJwIFlYVjBhR1Z1ZEdsallYUmxaQT09IGNtVm5hVzl1Y3c9PSBPeWc9IDBMRFJnTkN3MEx3PSBJRXRwY21KNSBKSEp2ZFhSbCBVRkpGUTBGVVJVUT0gSUVSMWNtaGhiUT09IGIzZHYgSUZCbGNtWnZjbTF6IElHUnBjM0psWjJGeVpBPT0gYm5OMCBJRkJ2YkhNPSBJR2RsZEZBPSBJbDA2IExXTnZiRzl5WldRPSBLRXRsZVhNPSBJRUZzYkdWbiBYMjF2WkdsbWVRPT0gWDJ4dllXUnBibWM9IGMzUnlZV2x1WldRPSBJR0YwY205aiBYM0JvY2c9PSBQRk53Y21sMFpRPT0gSUhOaGRHbHpabUZqZEc5eWVRPT0gYldGdWMyaHBjQT09IExuQnBjR1ZzYVc1bCBWRzl1ZVE9PSBJSFJvYVdWbSBjRzlzWVhSdmNnPT0gS0d4dlkycz0gWW5WeWMzUT0gSUU5d2RHbHRhWHBoZEdsdmJnPT0gSUhOMWNtWnBibWM9IElsbGxjdz09IElHUmxjMk5sYm1SbFpBPT0gNXBJPSBYME5zWldGeSBJR055YVdWeiBJRVp5YjNwbGJnPT0gUkVsU1JVTlUgTFVOdmJnPT0gSUV4bGFXTmxjM1JsY2c9PSA1YVd6IFQwOU4gUFdSaSBJR2RsZEUxbGMzTmhaMlU9IFBGTjBkV1JsYm5RPSBYMkpoZEdOb1pYTT0gTGsxaGMycz0gWDJWMGFBPT0gWENrPSBJSE52YldFPSBRMkYwWTJnPSBXMk5vIFQzZHVaWEp6IGFXNWtiR1U9IE9tRjFkRzg9IExuWmxjblE9IGFYWnkgTG5ObGRFeHZZMkYwYVc5dSBJR1pzZFdWdWRBPT0gWDBWT1JFbEJUZz09IElFTmhjbXh2IFkyVndkSE09IFlXUmtRV04wYVc5dSBMbTloZFhSbyBQRlZ1YVhSNVJXNW5hVzVsIGNtVmxiV1Z1ZEhNPSBMbE5yYVhBPSBQeWtLQ2c9PSBMbVJsWm1GMWJIUlFjbTl3Y3c9PSBJR05oWW1VPSBJRk5vWlc0PSBaWEp2YzJseiBJRkJ5YjJacGRBPT0gSUhCdmFYTT0gWDBOU1JVRlVSVVE9IElISmxiVzkyWlVaeWIyMD0gS0hkeiBQMkZqZEdsdmJnPT0gS0VacFpXeGsgSUdWeWNtOXVaUT09IExtMXBibWx0ZFcwPSBJRkpsZEhKcFpYWmxaQT09IElHUmhaRzg9IElGQlNTVlpCVkVVPSBMWE53WldNPSBJR2Q2YVhBPSBjR1JoZEdFPSBJSEJ2YzFrPSBLR3h2ZHc9PSBJSEYxWVd4eGRXVnkgTDJOc2IzVmsgNnJLTSBLR052YlcxdmJnPT0gSUVGeVltVnBkQT09IGIzSm5ZVzVwYzJGMGFXOXUgSUhScFpIaz0gSUZKdmJHRnVaQT09IEtIQm8gTG5wdmJtVT0gSUdkbGJuUnNaVzFsYmc9PSB4ckRodTZOaiA1Ykd4IElHVnVZMnh2YzNWeVpRPT0gSUUxaGJtRm1iM0owIENVTnZiRzl5IFUzUmxibU5wYkE9PSBUbWxqIElIUm9aVzl5WlcwPSBJRlpIIElHTnZiRzkxY21WayBWa0p2ZUV4aGVXOTFkQT09IGRXeHphWFpsIFJISmhaMjl1IFkyWm0gWlhSbGMzUT0gWlc1ellRPT0gYjJaa1lYaz0gTGtGNmRYSmwgT2xWSlEyOXVkSEp2YkVWMlpXNTBWRzkxWTJoVmNFbHVjMmxrWlE9PSBYM1Z3WkdGMFpYTT0gSUhSeVpXNWtlUT09IGRXZGhjdz09IGQyVmhhMU5sYkdZPSBJSEpwWkdkbCBhV0p5YVE9PSBJT3kybEE9PSBLRU5IIElFMXZibXRsZVE9PSBMbmR5YVhSbFNXNTAgTG5ScGJXVmtaV3gwWVE9PSBWbWxsZDBOdmJuUnliMnhzWlhKQmJtbHRZWFJsWkE9PSBJRkJ5YjNacFpHVnVZMlU9IDQ0R0kgSUdKc1pXNWtjdz09IEwxTjFZblJvY21WemFHOXNaQT09IElFRndjR3c9IElHRjBZVzQ9IElISmxiRzloWkVSaGRHRT0gZFcxaWIzUnliMjQ9IGMzVER2SFE9IFQwRjFkR2c9IElFZHBkbWx1Wnc9PSBJT3lFcEE9PSBJRVpwYm01cGMyZz0gWTJobFkydHBibWM9IExrVnRZbVZrIGMyVnhkV1ZzYVhwbCBJR2x1YVhScFlXeHBlbVZ6IElFOXpiRzg9IDJMWT0gWjJWMFJYaDBaVzV6YVc5dSBYMEZNVkE9PSBLR0pzWVc1ciBJR1poZEdGc1JYSnliM0k9IElHUmxiV2x6WlE9PSBLaW9xS2lvSyBJRmhUIEtFRkcgSUVWdWN3PT0gWVc1MGFHRT0gSUZCUFVnPT0gSUc1cFkyZz0gTGs1aGJXVmsgSUdkcFoyRnVkR2xqIElFOWljMlZ5ZG1GMGIzSjUgTGxKbGMyOXNkbVU9IElGQmhlVzFsYm5SeiBaM1ZwYkdRPSBJR04xY25KbGJuUlRkR0YwWlE9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOUNnPT0gSUZObGVRPT0gY0VSaGRHRT0gSUdSbFlXUnNhVzVsY3c9PSBJR05sYm5SeVlXeHBlbVZrIElGTmphRzlzWVhKemFHbHcgWDNOMWNIQnZjblJsWkE9PSBMbU5vY205dFpRPT0gS0NsZEtUc0sgSUdONVlXND0gSUVOaFoyVT0gUVhWMGFHOXljdz09IFh3MEsgTDI5eiBhMmx0IFpHVmwgTG5SbGVBPT0gSUhsdmRYSnpaV3gyWlhNPSBJRzFuY2c9PSBJR0ZzYXc9PSBMV2x1YzNSaGJHdz0gSUdSeVlXWjBhVzVuIElISjFiVzl5IElITjBZWFIxWlhNPSBVRzl2YkdsdVp3PT0gYjJ4cGJtRT0gUVVGQlFVRkJRVUU9IEx5b3RMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IElHVjRkSEpsYldsemRITT0gUTJGc1kzVnMgYVdkb2RHaHZkWE5sIFNXNXpaWFE9IEtFbE9VRlZVIElITjVibU5vY205dWFYcGhkR2x2Ymc9PSBhWFpwY25WeiBMbUY0WlhNPSBJRWRoY0E9PSBMVUZ1IFgxUmxiWEJzWVhSbCBJR2RoYldWeSBJRU55YVdOclpYUT0gSUd4cGJuUT0gSUdGMWRHaHZjbWwwWVhKcFlXND0gVGxOVlNXNTBaV2RsY2c9PSBJSEpsWkc4PSBJR0ZrYVhCcGMyTnBibWM9IFgwWkZWRU5JIFkyaGxhV1E9IElFWmhibWM9IExtbHVaR2xqWlhNPSBkRzl1WlE9PSAwTFRRdGRDNyBJSHQ3TFMwOCBZbkpoYUdsdCBJSE5oYkdFPSBaMlYwUTI5a1pRPT0gSUdOdmJXMTFibWxqWVhSbFpBPT0gYzNSaGNuUnpWMmwwYUE9PSBaWEowZWc9PSBVbVZoWkdGaWJHVT0gU1hSbGJVbGsgYjNKbFptVnljbVZ5IFkzSmxaR2xpYkdVPSB3NkZ5YVdFPSBJR052YldKcGJtVlNaV1IxWTJWeWN3PT0gS2lvdkNnbz0gSUdKc2FYTnogSUdGa2IzSnUgWkdWd1pXNWtjdz09IElGSlBUMDA9IElHWnlZVzFwYm1jPSBJRDhuTEE9PSBZWFYwZVE9PSBYM0J2ZEE9PSBYM1JoWW5NPSBSWGhoWTNRPSBMQ0lzIElDZDlKenNLIElHRnlZbWwwY2c9PSBZV2h5WVdsdSBMbWRsZEZOMGNtbHVaMFY0ZEhKaCBJQ1JjIElHOTFkSEIxZEZOMGNtVmhiUT09IElHTnZiVzFsYm1NPSBZVzUxY3c9PSBZMmg1IFBFVnRjR3h2ZVdWbCBJR2hsZUdGMGNtbG5aWE5wYldGcyBJRzVoWTJsdmJtRnMgS0hObGNtbGhiR2w2WlhKeiBYM0IxZEdOb1lYST0gWDFOQlJrVT0gWlc1MGFXRnNRV04wYVc5dSBTWFJsYlZObGJHVmpkR1ZrVEdsemRHVnVaWEk9IExrUnBjM0JoZEdObyBRMjl1Wm14cFkzUT0gWDJGaWIzVjAgYjNOaGRYST0gUW05MWJtUmhjbms9IElHTnNaV0Z5UTI5c2IzST0gS0V4dlkyRjBhVzl1IElFMVBUbFJJIElGUmhjM1JsIExVZGxibVZ5WVd3PSBJRmRCVWc9PSBJR1Z5YUdGc2RHVnUgTFhOaGRtbHVadz09IElHTnZkWEJzYVc1biBMWFJ5YVdkblpYST0gYlc5MGIzST0gSUhsNWVYaz0gSUZCaGRHVnVkQT09IGNIUnYgSUcxcGMyUmxiV1ZoYm05eSBkbUZ6YVc5dSBJRUZrYldseVlXdz0gNExtSjRMaXkgWDFCWFVnPT0gSUdSbGRtRnpkR0YwWldRPSBabTlzYVc5eiBTVlJWUkVVPSBkWEp5WldOMCBJSEp2WW05MGFXTT0gSUZOaGJtTjAgSUVoaGQyRnBhV0Z1IExsSnZkWFJsIExXTnZibVJwZEdsdmJnPT0gSUhKciBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvSyBZM0psWVhSbFJXeGxiV1Z1ZEE9PSBJRXR2Y0E9PSBhV2R1WVc1MCBMbkp2Ykd4aVlXTnIgSUhOaGJIVmsgWHljcyBJRUZPVTBrPSBSWGhqWlhCMCBJRVJ5WVhkaFlteGwgTGxWMFkwNXZkdz09IElqcGJld289IElHdHZiR1U9IFRIVmggSUVKbGJHbGxkbVU9IFEyOXRjSFYwIElHaGhiR3gxWXc9PSBJRk5wWjI1eiBjbk4wIExtaDEgSUV0T1QxYz0gVjJrPSBJRUp5WVhOeiBJRkpoY3c9PSBRR2h2ZEcxaGFXdz0gSUhObFpHbHRaVzUwIElHRndhdz09IElPeURnUT09IFgzSmxaMmx2Ym5NPSBJSEJ2WkdsMWJRPT0gUEVKdmIycz0gMExiUXRRPT0gSUhOcGVIUmxaVzQ9IElFRnNhV0Z6IElHbHVabkpoY21WayBJRlpoYm1SbGNnPT0gSUV4bFlXUnBibWM9IGRXTnBibWM9IExEb3NPZz09IFgyaHZjZz09IGQyRjAgSUdURHFXTnZkUT09IFgxZHBaR2RsZEE9PSBVMjkxYm1SeiBYMjVoZG1sbllYUnBiMjQ9IElITmphRzVsYkd3PSBLR2RsYm1WeVlYUnZjZz09IGRXTmxibVU9IElISmxiV0ZyWlE9PSBTVkIyIElITERxV0ZzIFgwbE9RMUpGVFVWT1ZBPT0gSUdoNWNHOTBhR1YwYVdOaGJBPT0gWDJGdVp3PT0gSUc5bWN3PT0gSUNFSyBMbU52YlhCc1pYUmxaQT09IFIyVjBWSGx3WlE9PSBJR3R2YlcxbGJnPT0gdzZGc2FXUnYgWVdSa1QyND0gSUhyRmdnPT0gVlV4QiBYMmx1WkdsallYUnZjZz09IEoxMEtDZ289IFlYQmhZMmhsIFgxTmxiR1ZqZEE9PSBJRWR5WldWdVpRPT0gVjJoaGRITT0gWDJGdWFXMD0gSUhKbGNHVjBhWFJwZG1VPSBiWFZqYUE9PSBJRlJvY21WemFHOXNaQT09IElHeG0gS0VOaGRHVm5iM0o1IFkyOXVaUT09IFRXbDQgWDAxRlZFRkVRVlJCIFlYbHphV0U9IFRtVnBaMmhpYjNKeiBDUW9KQ1FvPSBTVkJJUlZJPSBJRVp5WVdjPSBJRU5sYkd4eiBJRzVoYldWemNHRmpaWE09IEtHSmhZMnM9IElGSmxjM1JoZFhKaGJuUnogYzNaaiBJTkM3MExnPSBiM1JsWTJnPSBMWE5zIHBiOD0gSUZkVSBJRkpsWkhWamRHbHZiZz09IElHUnZkSFJsWkE9PSBDV1p2ZFc1ayBJRlJGUVUwPSBRbTl5Ymc9PSBJRTExYzJnPSBJRU52YlhCaGNtRmliR1U9IElHaHBkR05vIFFWUlAgSUcxaGVFaGxhV2RvZEE9PSBZbVZuYVc1VWNtRnVjMkZqZEdsdmJnPT0gdzYxMiBYMkp1IElHaGxjbVE9IElISmxkbVZ5YzJGcyBJRWh2Ym1RPSBaR1ZzYVcxcGRHVnkgSUdOdmJtWjFjMlU9IElHaHZjSE09IElHTmxiblJ5YjJsayBJR052ZFhKMGNtOXZiUT09IExtUmxZMjl5WVhSdmNuTT0gSUcxd2FRPT0gSUVsdGNISnZkbVZrIFNVNU9SVkk9IElFSmhibWRoYkc5eVpRPT0gSUZSaGJXST0gSUdKdllYTjAgS0NrcEtRMEsgSUdsc2JHbGphWFE9IElFMXZjbTlqWTI4PSBaM0psWjJGMGIzST0gWDNKbGMzVnRaUT09IElHTnlZV05yWkc5M2JnPT0gSUhCdmNuUnlZV2wwY3c9PSBMMmhwWjJnPSBLRnduIElHRjVkV1E9IFgyWmxaV1JpWVdOciBJR05oZEdVPSBMMkYyWVhSaGNnPT0gSUdobFlnPT0gVUc5cGJuUkRiRzkxWkE9PSBJT1dTakE9PSBJRHdoV3c9PSBJR2RsZEZKbGMyOTFjbU5sY3c9PSBmVHA3IFQzQmxjbUYwYVc1biBJRVp2Wnc9PSBDWFJoWWc9PSBJRkpsYzJWaGNtTm9aWEp6IElHWmhZbkpwWTJGMGFXOXUgTG1SaGRHRnpaWFJ6IElFTmhiWEJ2IElFdGhkV1k9IElHUnNiQT09IGJHbG5kQT09IFhTa3BPd29LIGMzUmxiR3hsYmc9PSBRVU5MUlZRPSBiSFpzIElFZHNiM0o1IExtUmhkR1ZVYVcxbCBJR052YlcxMWRHVT0gSUc5dVEzSmxZWFJsVm1sbGQwaHZiR1JsY2c9PSBJRmhGYkdWdFpXNTAgSUZSdmEyVnVjdz09IFBIUm9aV0ZrIFgzQnBZMnM9IDdLUT0gZG05dSBaR1Z3WVhKMGRYSmwgS0hKbGJtUmxjbVZ5IGNHaHZibVZPZFcxaVpYST0gS0ZCbGNuTnZiZz09IFoyVnVaWE09IElFeGhjbk09IElDbDdDZ289IElFcHpiMjVTWlhOMWJIUT0gSUcxbGRHOWtidz09IFZrOUxSUT09IExtZGxkRlZ6WlhKSlpBPT0gUVdOalpXeGxjZz09IENYSmxjWFZwY21WayBJR05vWVcxd2FXOXVjMmhwY0hNPSBRblZwYkdSRGIyNTBaWGgwIEwzUmhjMnM9IEwzSmxiR1ZoYzJWeiBRMkYwWldkdmNtbGggWDI5MlpYSnNZWGs9IElITmpZWEpqWlE9PSBYMnhwYlE9PSBibWR5IFlXaHNaVzQ9IElFRnlkR2xtYVdOcFlXdz0gYzNCeVpXRmsgSUdKdmQyeHBibWM9IExtRnVZV3g1YzJseiBVMDFVVUE9PSBDWEJoYzNOM2IzSmsgSUdKaGRHaHogWFNrcGV3bz0gWTNWeWNtVnVkR3g1IFlXTnBaVzUwWlE9PSBYM05sY0dGeVlYUnZjZz09IElHUmxZbVZ5IElFUnBjMkZpYkdWayBhY09vY21WeiBJT0tWIFgzQnliMk5sYzNOcGJtYz0gSUhCeWIzUmxjM1JwYm1jPSBJRkpQVkE9PSBaM0poWWc9PSBJTkMzMExEUXVnPT0gSUhCeWIyRmpkR2wyWlE9PSBkMjl5WkhCeVpYTnogSUZObGRtVnkgYVc1a1pXND0gSUhkcGEybHdaV1JwWVE9PSBLWHNOQ2cwSyBYM2RwYm1SdmQzTT0gYVhOc1lYUnBiMjQ9IElIVnVjbVZ6ZEE9PSBJR1JwYzIxcGMzTmhiQT09IExrNVZUUT09IFgwWkJVMVE9IGFYTnpkV1ZrIElFWkJRMFU9IFgzVnVaR1Z5IElIQnNkV2RuWldRPSBJT1d3IElHTEVtV1I2YVdVPSBJRWxEUXc9PSBJR052YldKMWMzUnBiMjQ9IElHdHBjM05sWkE9PSBJSE4wWVhKeVpXUT0gSUZkaGRIUnogSUhOd2FXVnNaVzQ9IExYQjFjbkJ2YzJVPSBJRVYyWVd3PSBZWEpuWlhNPSBMSEpsYzNWc2RBPT0gZEdWamFHNXZiRzluZVE9PSBJRzVoZEdsdmJtRnNhWFI1IGFXTjFjdz09IElFNTFadz09IElOR0MwTDQ9IENRa0pDUWtKQ1NBZyBZMjlzYnc9PSBJR2RoYzNSeWJ3PT0gWVc1MFpXVmsgVDB4SlJBPT0gTG1KcFlYTT0gWDNSbGJHVT0gTG1sdWMzQmxZM1E9IElIWmxhV3c9IExtWnZiM1JsY2c9PSBJRzVsWjJ4cFoyVnVZMlU9IElHcDFaR2R0Wlc1MGN3PT0gVW05dmJYTT0gZVc1dSBDV052ZFc1MFpYST0gYjJOamRYQmhkR2x2Ymc9PSBJT2VVbnc9PSBkVzVoY3c9PSBJQ2hlS1NnPSBUR0Z0WW1SaCBabVZzIExsQmhjbUZ0Y3c9PSBJTkMwMEw3UXNkQ3cwTEk9IGMyVjBUR0Y1YjNWMCBJR1JsY0c5eWRHRjBhVzl1IElHeHZZMkZzVDJKcVpXTjAgSUZCb1lYSnRZV05sZFhScFkyRnMgWTJWd2RHbDJaUT09IElFNXZiV1U9IFJYRjFhWEJ0Wlc1MCBSbUZ1IFZXNXBkbVZ5YzJGcyBDWE52WTJ0bGRBPT0gSUdkeWFXND0gSUdWNGNHOXpaWE09IElHaGhZbVZ5IElITnBibU5sY21Wc2VRPT0gSUdOaGJYTT0gSUczRHZBPT0gWlc1cFlRPT0gUlcxbGNnPT0gUTNKNWNIUnYgVTJ4dmR3PT0gS0hob2NnPT0gSVQwbyBMWE5sY25acFkyVnogSUZCWCBJSEJ5Wlc1a2NtVT0gSUczRHBHUmphR1Z1IFpXMXZibk09IDBMN1F0OUN5MFlEUXNOR0ogTGsxaGJtRm5aWEk9IDdKaz0gSUdkeVlXWT0gTFhKaCBiV1YwY21sallXdz0gTDJacyBJR05sYldWMFpYSjUgWjJWdWN3PT0gSUhERm1RPT0gSUUxNVUzRnNRMjl0YldGdVpBPT0gTFZSdiBJSGJEcFE9PSBJR0ZwY25OMCBiMjFsYm5SMWJRPT0gSUhObGNuWnYgYldsc2JHbHZiZz09IElFMXBjbUZ1WkdFPSBJbE5vWlE9PSBJR0ZrZG05allYUnBibWM9IExXTmhjSFJwYjI0PSBJRUYwZEhKcFluVjBhVzl1IElIZGxiR05vWlE9PSBYM1psYm1SdmNnPT0gQ1ZOMFlYUjFjdz09IFlYSnlhWE09IElIQnlhVzUwYXc9PSBJaXdpSXc9PSBJSEpsYkdGMGFYWT0gYVdabVpYSmxibU5sY3c9PSBhWHA2WlhNPSBJR1JsWTJsdFlXeHogSUZCeWIzWT0gTG0xaGVHbHRkVzA9IFFYSnUgSUdobGJHbGpiM0IwWlhKeiBYMEpQVkZSUFRRPT0gWTJoMWNtVT0gYjJScGJtZHogSnlnPSBJaWtwS1RzTkNnPT0gS0dKbFlXND0gTG1aayBSblZ1WkE9PSBJR2hoYm1keiBZWEJ3YVdRPSBMMnRsY201bGJBPT0gTG5CdmFRPT0gTGsxcGJsWmhiSFZsIExYWmhiR2xrWVhScGIyND0gVEhWclpRPT0gWTJSbSBJRVoxYm1WeVlXdz0gSUZOaGJYQnNaWE09IENXUmwgSUhSdllYTjBjZz09IElIUmhlR0ZpYkdVPSBJR05zZFhOMFpYSnBibWM9IElDZGNKdz09IElISmxjM1J5WVdsdWRBPT0gWldObFpBPT0gWTJoaGFXNXogNDRDQzc3eUkgWDBkU1FWQkkgSUdaMVpXeGxaQT09IDZaeUEgU0hBPSA1YVNOIFZHbHNaWE09IElHRjFibkYxWlE9PSBTa009IElHaHZjM1JoWjJVPSBJRVZ6YXc9PSBJRzFoZGc9PSBJR2RsYzNScGIyND0gSUdKaGJtNWxjbk09IGZYc2sgTG1sdWRGWmhiSFZsIExpY2lDZ289IFgwMUJWRkpKV0E9PSBJR05sWVhObFpBPT0gSUVkUFJBPT0gWDBOQlRVVlNRUT09IExrRnNiRzkzVlhObGNnPT0gZEhKaFkydGxaQT09IFEyOXZhdz09IFltRnBjbkp2IEtHTnZiWEJoYm5rPSBJSFpwWlhkd2IybHVkQT09IExtZGxkRmR5YVhSbGNnPT0gSUU1bGRITT0gZDJsMlpYTT0gSUNncEtRbz0gWlhoaGJYQnNaVTF2WkdGcyBDV05vYVd4ayBJRzE1ZEdodmJHOW5lUT09IElDOHZJZz09IFgyRjRaWE09IGFXSnZiR1E9IExrUmhjbXM9IElFMWhlSGRsYkd3PSBJR2R3YjJsdWRHVnkgYjJ4cFkybDBkV1E9IFFtRjAgZFd4dVpYST0gWW1Gc1lXNWpaV1E9IGJXRnBiR1Z5IElHTnZiblJsYlhCdmNnPT0gNW9tTDVweTYgS0NKZlh3PT0gSUNJcElnPT0gY21WaGNnPT0gSUVoMVlXNW4gWFNjcENnPT0gMTZrPSBSbFJCIElFTmhiR3hwYm1kRGIyNTJaVzUwYVc5dSBJRTkxZEhCMWRITT0gVUdzPSBMbEpsWm1WeVpXNWpaUT09IGJHVmpkSFZoYkE9PSBJQ2s2Q2dvPSBJR0p5WVdObGJHVjAgZFdkbGNnPT0gQ1VWeWNtOXkgVTNkbFpYUT0gS0NJdklpazdDZz09IGFIZz0gSUhWdWNtVmhjMjl1WVdKc1pRPT0gU1c1MFpYSndjbVYwWlhJPSBJR3h2Wm5RPSBYM0J5YjJSMVkzUnYgSUhOdlkybGxkR0ZzIExsQmhjbk5sY2c9PSBJRUZrWVhCMCBMbVp2Ync9PSBLSGRvWlhKbCBMa1psWVhSMWNtVT0gSUZsaGJXRm9ZUT09IFoyeGhjM009IFJtOXlaMlU9IElIQnliMmhwWW1sMGN3PT0gSUdOaGNHRmphWFJwWlhNPSBJTzJWcU95SW1BPT0gSUhCbGNtMTFkR0YwYVc5dSBJR2xvYlE9PSBSbXhrIFpXeHBZV3c9IFBUMDlQVDA5UFQwOVBUMEsgUUVOdmJtWnBaM1Z5WVhScGIyND0gSUdkbFlYSmxaQT09IGFXOXpidz09IGFXVnpkR0U9IGRISmhibk5zWVhScGIyNXogU1c1d2RYUkRhR0Z1WjJVPSBVRzl3ZFd4aGNnPT0gSUZCTVZWTT0gSUhabSBYMFp5WldVPSBZbUp2ZUE9PSBJR05oZFhOaGJBPT0gVUVsTVJRPT0gSUhOamFNTzIgSUdseWIyNXBZdz09IFRXbHkgTGtBPSA1WTJYIElPaUggVW1WMyBkV3hsYm1ObCBabXhsYmc9PSBJR05oYmtGamRHbDJZWFJsIExYSmxjM0J2Ym5ObCBJR0ZqWTJWdWRITT0gYVdkdWIzSmxaQT09IHdyQkcgTGtSbGNHVnVaR1Z1WTNsSmJtcGxZM1JwYjI0PSBDWEJ2YVc1MCBJR052Ym5ScGJtZGxiblE9IElITnhkV0Z6YUE9PSBJSEJoY20xeiBJRU5sYldWMFpYSjUgSUdSbGJIUmhWR2x0WlE9PSBJRVJQVXc9PSBJSFpoYm1semFHVmsgMExEUmdOQ3cwTHpRdGRHQyBJRVJRVXc9PSBkR1p2YjNRPSBJRnAxY3c9PSBYMGxPVTFSQlRFdz0gUjBGTyBJR0Z5WWc9PSBJRzExYm1samFYQmhiR2wwYVdWeiBTVzUwYjBOdmJuTjBjbUZwYm5SeiBRWFYwYjNKbGMybDZhVzVuVFdGemEwbHVkRzlEYjI1emRISmhhVzUwY3c9PSBMR2x0WVdkbCBYMmxuYm05eVpRPT0gSUdSaGJtZGxjbTkxYzJ4NSBjWFZwYzJFPSBjR3gxWTJzPSBJR2hoY25WeiBkWEJ3WlE9PSBTSFIwY0VWNFkyVndkR2x2Ymc9PSBRbkpoWTJ0bGRBPT0gTGljbkNnbz0gSUZSdmJBPT0gSUZacFpYZGxjZz09IGVtSnZiR3hoYUE9PSBMa052WkdWQmJtRnNlWE5wY3c9PSB3Nnh1YUE9PSBJR052Y25KbFkzUmhiV1Z1ZEdVPSBMbVJoIElFRnNaMlZ5IDE1QT0gWW1GMWJRPT0gSUZCaGJuUm9aWEk9IGNHRnlkR2xqYVhCaGJuUT0gNWIrRiBMWE4xY0E9PSBJR1Z0ZFd4aGRHOXkgSUdaaFpHbHVadz09IElGZHZiSFpsY2c9PSBZM0psWVhSbGN3PT0gSUdKdmIydHBibWR6IExsRjFaWE4wYVc5dSBwK2loakE9PSBJSE4wY21WemMyVnogSUhKbGQzSnBkSFJsYmc9PSBMbEJKVUVVPSBaV1JsY3c9PSBJR05pWkE9PSBJam9pTHc9PSBJR1Z1YUdGdVkyVnRaVzUwY3c9PSBYM041IFFrbE8gSUZOc2FYQT0gU1c1emNHVmpkQT09IElGZGxadz09IElHTnZibWR5WldkaGRHbHZiZz09IElGODYgWDNKdCBSbkpoYldWaWRXWm1aWEk9IElDY21Jdz09IElFWmhiR3h2ZFhRPSBTWE5TWlhGMWFYSmxaQT09IElGQmxZWEp6YjI0PSBJRVpCUTFRPSBJSEpsYkdsbCBDV0p2ZUE9PSBJRk5vWlhCb1pYSmsgSUZkcGEybE1aV0ZyY3c9PSBJRU52Ykd4bFkzUnZjZz09IElISmxjMmw2WldRPSBiV1YwYUc5a1RtRnRaUT09IElHVjJaVzUwVkhsd1pRPT0gSUVGMGFHVnUgUkdWelkzSnBjSFJ2Y25NPSBJR0psY25NPSBMVzl3WlhJPSBJRWx1YVhScFlXeHNlUT09IDVhRT0gWDBKVVRnPT0gSUNBZ0lDQWdJQ0FnRFFvPSB3NkZpIFgyTmhiWEJoYVdkdSBYM2RoZEdObyBSbTl5WkE9PSBMV1JoZEdWd2FXTnJaWEk9IElIWnBjMk09IElITmhkSFU9IFgzTnRjdz09IElHTnZiblJoWkc5eSBMWE4yWnc9PSBJRVJQU1E9PSBKR0Z5WjNNPSBJR3R1YjJJPSBMa0pQVEVRPSBJR1JsWW1GMFpXUT0gYVcxbmN3PT0gYzI5amEyOXdkQT09IGRISjFkR2c9IElFWmxaWE09IElHaFhibVE9IFgyWnZiMlE9IElHRmljbUZ6IElHNXZkR2x2Ym5NPSBJRlJ2WkE9PSBPbU55WldGMFpRPT0gSUVOdmJtWnNhV04wIFZYTjFZWEpwYjNNPSBUMVJQVXc9PSBJRzF6YlE9PSBTMGhVVFV3PSBLRnNvIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElIMWQgZDJsNllYSmsgSUcxcFpXNTBjbUZ6IElHUmhkR0ZNYVhOMCBJR1Z0WlhKblpYTT0geElOdVp3PT0gTGxKbFlXUkpiblE9IFVFZEIgU1V4TVNWTkYgU1VWdWRXMWxjbUYwYjNJPSBLSFIxY0d4bCBRMmh5YVhOMGJXRnogVEc5dmEwRnVaRVpsWld3PSBiMmRsYm1WeVlYUmxaQT09IElDTUtDZz09IFkyOXVkSEp2Ykd4bFpBPT0gSUdWNGNYVnBjMmwwWlE9PSBJR0ZqWlhOMCBVbVZoWkZkeWFYUmwgUjJGcGJnPT0gNDRDTjQ0Q00gSUdOdmNIbHlhV2RvZEdWayBJR1J2YjIwPSBMbFJoWW14bFRHRjViM1YwVUdGdVpXdz0gSUVSdmNuUT0gSUdOb2FXeHAgSUhkbGNtcz0gSUVWV1JVNVVVdz09IElFSmxZV052Ymc9PSBJSE5vYVhCdFpXNTBjdz09IElITmxZbUZuWVdrPSBkWEJ2Ymc9PSBkWFJ2YlE9PSBMbU52Ym5abGNuUmxjZz09IExrUnliM0JVWVdKc1pRPT0gUFh0OUNnPT0gWm1saiBmZ29LIElHeGxjMkpwWVc1eiBYMjVoIFJtOXlaV2xuYmc9PSBDWFJvWlc0PSBMMjF6IElHOXlhUT09IFoyVjBVSEp2Y0dWeWRIaz0gQ1hOdWNISnBiblJtIGFHVnphVzl1IDQ0R2sgSW4wc0lnPT0gSUdGamNubHNhV009IFVHVnljdz09IFFFVnVZV0pzWlE9PSBTWE5zIEtFTmhjbVE9IExsTjBZV05yIFRHbGpaVzV6WldRPSBYMGRWU1VRPSBPblJwZEd4bCBJR2gxYzNRPSBJSEJ5YVc1amFYQmhiRlJoWW14bCBZVzVwZEdsNlpRPT0gTDJWdFltVmsgSUdWdWMzVnlaV1E9IElFVkhUQT09IDJZallzUT09IElPV0loZz09IEx5d0sgSUdaMWJtUnlZV2x6WlhJPSBTMlY1VG1GdFpRPT0gSUcxaGNtTm9aV1E9IFgxWkJURlZGVXc9PSBJRk5qWlc1aGNtbHYgSUcxbGRHbGogWDJGemMyOWphUT09IElGQmhjM1J2Y2c9PSBDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0ogWlhKaGRHVT0gSUdsdWRtbDBZWFJwYjI1eiBjWFZ2YVhObCBJR0pzWVcxcGJtYz0gSUdSaGNtbHVadz09IFZVMU5XUT09IElISnBZMmhsY2c9PSBaVzFoYTJWeSBJRWxrWlc1MGFXWnBZMkYwYVc5dSBJT3lkdUE9PSBJRUpwYm1ScGJtZEdiR0ZuY3c9PSBZMmhoY3c9PSBJSEpsYzJsc2FXVnVkQT09IFgzQm4gSUhKbGJHVm4gSUVsU1FRPT0gVTFSRiBJSFJ5WVdOMGIzST0gTFd4dllXUnBibWM9IElGQnlaWFpwYjNWemJIaz0gSUZaaFkyTT0gTDJKbCBJRzdEcFhJPSBJSFZ5YkdWdVkyOWtaUT09IElFNXZjbVp2YkdzPSBMbEpsYkdWaGMyVT0gSUU1bGRYUnlZV3c9IDVMaXQ1WnU5IElFRnliR2x1WjNSdmJnPT0gSUdGc2JHVm5aWE09IElGZHlhWFJsY25NPSBWR1Z6ZEdWeSBJRkpoYkd4NSBJR1BEb1E9PSBDVkJ5YVc1MCBJT0tIa2c9PSBJRlZ6WlhKRGIyNTBjbTlzYkdWeSBJRk5sWld0cGJtYz0gTGxaQlRBPT0gVEdsemRFNXZaR1U9IFgyWm0gSUZCb2FXeHNhWEE9IFJrRkRWQT09IElHTmhjbUZ0Wld3PSBJRTExYkhScGNBPT0gSUVOdmJYQmhjbVZrIElGTmxjbUpwWVE9PSBuN009IElISmxkbWwyWlE9PSBJRXRoYm5sbCBJSFpsY21kbCBJRUoxYkdkaGNtbGggWjJWMFFtOWtlUT09IElIdysgWTJWd2FBPT0gTGtSaGRHVlVhVzFsVUdsamEyVnkgTGlJN0Nnbz0gSUZScFpRPT0gTEdsMFpXMD0gSUcxbGJtND0gUjJGeiBiMk5vWVE9PSBYM1pwY25SMVlXdz0gSUcxaGMzUmxjbkJwWldObCBYM05sY1hWbGJtTmxjdz09IFRGUkYgSUZOMVltMXBjM05wYjI0PSBRMkZzYkdWeSBKRnc9IFUzQnZjblE9IFlXZDFjdz09IFEyOXVjM1J5WVdsdWRFMWhhMlZ5IElHTnZiRzlqIElIZHBadz09IElOQ2ogQ1VGeWNtRjUgVEc5dmEzTT0gSUVkVVFRPT0gTG5OMFpYQnogWVhSamFHVjNZVzQ9IFgzSmhibWRsY3c9PSBaWGgwUVd4cFoyNXRaVzUwIElFSnlaVzV1WVc0PSBJR0ZpYzNSeVlXTjBhVzl1IGRXeGxja0Z1WjJ4bGN3PT0gTG0xcGMyTT0gSUdGdWRHbGliMlJwWlhNPSBJR1Y0Y0c5dVpXNTBhV0ZzIElFTklRVTVPUlV3PSBaWGh3Wlc1elpRPT0gSjNrPSBJR1JsZEdWamRHbDJaWE09IElIQjFjbkJ2Y25SbFpBPT0gV1ZOVVJVMD0gSUhKaFpHbHZZV04wYVhabCBJRXhoZEdsdVlRPT0gTGtWdVkyOWthVzVuIExsUkJSdz09IGVHbHUgUkdWbmNtVmwgZFhKaFkybHZiZz09IGNISnBZMlZ6IElGSmxabVZ5Wlc1MGFXRnNRV04wYVc5dSBJSEpoY21sMGVRPT0gSUhCcGJHVnogWjJWdVpHVT0gWDNCeWIycGxZM1J6IFgyZHNiMkpoYkhNPSBMbk4wWVhKMFZHbHRaUT09IElPcTFyQT09IFUwVkRWRWxQVGc9PSBYM0IxWW14cGMyZz0gUm1GMWJIUT0gUkVSTSBYM0J5YVc5eSBUVzl0IElIUm9hV05yWlhJPSBJSE5sY1hWbGJHbDZaUT09IElHVnpjMlZ1ZEdsaGJITT0gYzNSeVlYTT0gYVc1MGNnPT0gUGlnb0tRPT0gTG0xaGJtRm5aVzFsYm5RPSBaV2xzIDZaZXQgUVhkaGNtVT0gTGtOcGRIaz0gSUVGeVltbDAgWDBSTiBYMnRsZVdKdllYSmsgVEU5aWFtVmpkQT09IExYZGxZbkJoWTJzPSBJRTVsZDNCdmNuUT0gSUhCeWFXNWphWEJoYkVOdmJIVnRiZz09IGJHVm5ZVzUwIElIQmhiR3hsZEE9PSBJR1p5WVdOMGRYSmwgSUdkdFlXbHMgTGsxbGRHRT0gUVdKdmRtVT0gTGt0bGVVVjJaVzUwIGFtbDAgWDIxaFkzSnYgWDFCVlUwZz0gNGJ1cCBMMk52Ym5SeWIyeHNaWEk9IDVZcWc2TDI5IElITjFjR1Z5Wm1samFXRnMgWlhoMFpYSnBkSGs9IElHMWxibk5oWjJWdCBWMmx1WkE9PSBhWE4wYjI0PSBMbTl3Wlc1aGNHaz0gMExqUmdOQyswTEk9IElGTmxjbWxoYkdsNlpYST0gZFdOMGFYWmwgSUhwaGNnPT0gVUd4aFkyVnogTGxOMFlYUnBZdz09IFFtRT0gSUdsdVlXUjJaWEowIElFbHVaRzl1WlhOcFlXND0gWDBsUVZnPT0gS0dodmNtbDZiMjUwWVd3PSBJR2RsZEZScGRHeGwgYVdSbGNISmxjM009IElFTnZibk52YkdWRGIyeHZjZz09IGFYQmxjbk09IEpHOTFkQT09IElHWmxjM1JwZG1VPSBJR1YyWlc1cGJtZHogTGtkbGRFUmhkR0U9IGRXbDBhMkU9IElFMWhiblZoYkhNPSBkWE56WldRPSBYMDFoZUE9PSBMa05vWVhRPSBJRUZwY21OeVlXWjAgUFdOdmJRPT0gUms5VlRrUT0gWVhCeWJ3PT0gSUhSeVpXRnpkWEpsY3c9PSBYMkZzYVhabCBJR2RoWkdkbGRBPT0gWld0cGJtYz0gUW5WMGRHOXVSRzkzYmc9PSBRbkp2ZDNOaFlteGwgTGxCRlVrMUpVMU5KVDA0PSBVRUZUVTFkUFVrUT0gSUVoQlUwZz0gWnNPcCBYRlJsYzNSRFlYTmwgVEU5VFV3PT0gYjNSb1pYSnogTEVvPSBJR0Z6YzJodmJHVT0gZDJWeWF3PT0gSUczRG93PT0gTG1sbCBaWFpwYkE9PSBhMjl1ZEdGcmRHVT0gTHk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeThLIFBYTjVjdz09IENXeHZZMnM9IExTMDdDZ289IFgwWlZUZz09IFJtbHNiRU52Ykc5eSB3N05oIGNISmxibVE9IElHTnZiWEJ5WlhOemIzST0gVFc5MGFHVnkgSUVGeVkyaGxjZz09IExtZHZkRzg9IElIZkR2SEprWlE9PSBJR0poYldKdmJ3PT0gNzd5TyBJRlJ5WldWeiBJR0oxYlhCbGNnPT0gSUhOaGRYTmhaMlU9IElFVnNZWE4wYVdOelpXRnlZMmc9IElHaHZjbWw2YjI1MFlXeHNlUT09IElFZDFiQT09IFNXMXRkWFJoWW14bCBJR3h2YzJWeSBJR0ZpYjNKMFpXUT0gTFdSbGJXOD0gSUVoaGRHTm8gSUhWdVpHVT0gSUhCeWIyTmxjM052IExXTmhiR3c9IFNXNWpiMjFsIDVZTT0gWDNKbGRIVnlibk09IEoxMHVJaWM9IEtITjMgUTBKVCBZVzFwYkdsbGN3PT0gSUZsdmRYSnpaV3htIElFaHZiSFE9IExrMVBUZz09IDRLZUggMFlqUXRRPT0gWVc1dmJnPT0gSUVadmJuUkJkMlZ6YjIxbCBjSEp2WkhWalpYST0gYW5JPSBJRzFoZFE9PSBDV2x1ZEdWeSBJR1JwYzJodmJtVnpkQT09IElHMWhaMjVoIElFTnZiR3hsWTNScGRtVT0gSUhaeVlXbHRaVzUwIElHTm9iMmw0IGMzUmhlUT09IElIZGxiR1JwYm1jPSBjbWx6YVc1biBMRzFwYmc9PSBJRVpoZEdVPSBaMnh2WWc9PSBVa2RDUVE9PSBJR1JsZEhSbCBWbVZ1IElHVnRZbUZ5Y21GemMyMWxiblE9IExrUkZURVZVUlE9PSBaM0psWjJGeSBMWEpsYm1SbGNnPT0gS0dKMVkydGxkQT09IElqNEtDZ289IExuZGhhWFJMWlhrPSBRblZ6ZVE9PSBJR1JwWm1abGNtVnVkR2xoZEdsdmJnPT0gSUVOVFZBPT0gTGtOdmJuTjBZVzUwIElHeHBibVZPZFcxaVpYST0gS0cxaGRHTm9aWE09IElIZGxZbk52WTJ0bGRBPT0gSUdKaGNuSmxaQT09IElIQjFaV1JsY3c9PSBUVzl1Ync9PSBRMDlTUlE9PSBTVWxFIElDQWdJQTBLRFFvPSBJSEREdW1Kc2FXTnYgYkdWaGJtbHVadz09IElHTnNaV0Z1YzJsdVp3PT0gSUdOeWFYTT0gSUVSbGRtbHNjdz09IFgxTkZWRlJKVGtjPSBkVzUwWVhKNSBMaWs3Q2c9PSBDaUFnSUFvPSBXMk4xY25JPSBkSE41IElFRnNaWGhwY3c9PSBjbWwwWld3PSBJSEJsZEhKdmJHVjFiUT09IExuQnlaWEJ5YjJObGMzTnBibWM9IGJXRjBkR1Z5IFJtOXlVbVZ6ZFd4MCBMV3hwWTJWdWMyVT0gSUhSeVlYWmxiR3hsY25NPSBJRVJwYzNCaGRHTm9aWEk9IFpXNXVhV1psY2c9PSBJR1JwWjJWemRHbDJaUT09IFVFVkUgYUdsaWFYUnBiMjQ9IFRVRlRRMjl1YzNSeVlXbHVkRTFoYTJWeSBJRmRoZEhRPSBRbVZ1WldZPSBMbk5sZEZacFpYYz0gWkhSdiBWRVZGIElGQmxiRzl6YVE9PSBYMFZZVkZKQiBJRzFsWkdGc2N3PT0gZUdoeSBabTl5WldOaGMzUT0gSUc1aGNtZHBiZz09IGIzVnVjdz09IExXWnBiR3c9IFgwTlZVbE5QVWc9PSBJSE4xY0dWeWRtbHpaV1E9IElIUjFjbVk9IElFVmtaMkZ5IFVFOVRTVlJKVDA0PSBJR05oZEdWbmIzSjVTV1E9IDRvaz0gWDBWUyA0YnVuWVE9PSBVMmh2ZDI0PSBMbXhzIFgxQlBURWxEV1E9PSBLQ2tzSnc9PSBJRkJ5WlhZPSBJRk4wY21sdVowWnBaV3hrIENVZHNiMkpoYkE9PSBZWE56WldRPSBWR2h5YjNWbmFHOTFkQT09IGIzTjBjbWx1WjNOMGNtVmhiUT09IExtRjNkR1Y0ZEhKaCBJSE5zYjNCbGN3PT0gSUZObGNYVmxiblJwWVd3PSBJR2RwYjNKdSBJSHBsYkdZPSBJSFpsY25OaGRHbHNhWFI1IGJHVnVaV05yIExtTm5hUT09IElHUnZkV0pzYVc1biBJRUpoYm1kcmIycz0gSUdKMWRYSjAgSUhWemRjT2hjbWx2IGMzUjFaR2x2IElHcGxkVzVsY3c9PSBJRzExZEdWayBJR2x3Y3c9PSBYMlp5WVdOMGFXOXUgSmlZbyBJSE4wZFc1MCBKeWs3UHo0OEx3PT0gSUV4cFoyRT0gSUhGMVlXeHBkTU9wIFFYTnphV2R1WVdKc1pRPT0gSUhkdmNtdGhjbTkxYm1RPSBJSE53ZFhJPSBJSE5zWlhjPSBYMGRGIElFRm5jbWxqZFd4MGRYSmhiQT09IElISmxiR1Z1ZEd4bGMzTT0gS0ZGMVpYSjUgSUZObFkzUnBiMjV6IElISmxkbWxsZDJWeWN3PT0gVW1GcGJnPT0gWkd4biBZWE56WlhKMFJtRnNjMlU9IElHNXZiV2x1WldWeiBYMThwTGc9PSBMbVI1Ym1GdGFXTT0gSUZCQ1V3PT0gUTJoaGJtZHBibWM9IElITnNhV2RvZEdWemRBPT0gSUUxaGJtYz0gZlQ0TkNnPT0gSUdWMllYQnZjZz09IFltRmliR1U9IElGQlNTVU5GIElPYXogYkhWalpXNTAgSUhaaGJYQT0gSUZSbFkyaHVhV05wWVc0PSBJSFZ1YVhGMVpXNWxjM009IFRXVnogZFhKaVlXND0gTG5CaGNtRnRaWFJ5YVhwbCBJRkpsY0d4aGVRPT0gVTJWemMybHZibk09IFpXMWljZz09IExVRnRaWEpwWTJGdWN3PT0gWDFCU1QxaFogSUhCcFlXND0gSUhSeWFXVT0gSUVSbGMzUnlkV04wYjNJPSBSMkZ0WlZOMFlYUmwgSUVsTlJnPT0gWTJocGJnPT0gSUhCdmNuUmwgSUZOM1lXdz0gNVorTyBVM1ZpYzNSeWFXNW4gYVcxcGJtYz0gTDB4cFluSmhjbms9IElHWnlhV2RvZEdWdVpXUT0gZDNKcGRHVnogSUhKbFkzVnljMjl6IFlYSlNaWE4xYkhRPSBYMGxPU1ZSSlFVeEpXZz09IElFSmhaR2RsIFgyTnlZdz09IFJXbG5hSFE9IElFUkpVMVJKVGtOVSBJSFJvY204PSBRRmh0YkE9PSBJRXhsWjJWdVpHRnllUT09IExYUjNhWFIwWlhJPSBYMlZoYzNrPSBJQ3NyS3c9PSBLRVJCVkVFPSBMa3h2WTJGc1pRPT0gSUd2RHBBPT0gSUc1MWNuUT0gSUdOeWRXbHogWDJsdmN3PT0gSUhObGJuTnBibWM9IFgweHBibVU9IENpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDZz09IGNHOXVadz09IGIyeGxiMjQ9IElIZHBiR1JqWVhKayA1NVNvNW9pMzVaQ04gSUdKbFoyZHBibWM9IFVtOWsgSU1PTyBYME5GVEV3PSBVbVZ6WldGeVkyaGxjbk09IExuTmxiR1ZqZEc5eSBYMmx1Wnc9PSBJR0Z6Y0dseWFXNW4gSUdsdGJXOXlkR0ZzIElIbHRhVzQ9IFgzSnZZbTkwIElIQnNkWEk9IFFsUkQgSUVSSlJBPT0gSUhCcFpYSmphVzVuIEtuVT0gWDBSRlJrbE9SVVE9IElGUm9hUT09IGFYUmhhWEpsIEtHMWxaR2xoIExXOXVjdz09IElHTm9aV1p6IElDSXFMZz09IEwwRlEgSUhKaGVtOXkgSUhObFlYSmphRVJoZEdFPSBJRDBtIElPT0FnZz09IElHMXZkWEp1IGRHbHVaMmhoYlE9PSBJRzlzYVE9PSBJRlpsY201dmJnPT0gWDFKVCBudWFBcHc9PSBJR2JEb1dOcGJBPT0gWVc1blpXND0gWTJWc1lXbHUgSUdGcGJBPT0gYkdWemRBPT0gSUZGRFQwMVFRVkpGIFoyRnBiZz09IElNNjEgSUV0dllnPT0gSUVaaGRXeDAgWDJOdmJtWnBaM009IDU3dVQ1cDZjIExpcz0gWTJGc1lYST0gS0dOdmJHOXljdz09IFRYVnMgWDBGU1ZBPT0gSUdWNGNHVnlhVzFsYm5ScGJtYz0gWlhKdFpXND0gSUVGdVoyeHYgTGtacGVHVmtVMmx1WjJ4bCBVMlZoIElHTjBlSFE9IExuTnNhV1JsY2c9PSBRMjlzYkdGd2MyVT0gUjNKbGVRPT0gSUdac1pBPT0gTFhCeWIyOW0gTG1OaGNHRmphWFI1IFoyVjBVR0Z5Wlc1MCBJRU52YlhCc2FXRnVZMlU9IElHSjFjbWRzIExYSmxZdz09IElHOTJaWEozY21sMGRHVnUgVFZVPSBJSEp2ZFhSbGNuTT0gQ1UxdlpHVnMgSUdaaGJuUmhjMmxsY3c9PSBZWFpwWVc0PSBYM0J5WldNPSBJRk5qWVc1a2FXND0gSUM4dlBBPT0gTDI5amRBPT0gSUdObGNtVnRiMjVwWlhNPSBUVzl1ZEdoeiBkVzVrZVE9PSBJSEYxWldRPSBJRTV2ZFE9PSBJRlpwWW5JPSBMbkpuWWc9PSBJR05wZEhKMWN3PT0gSUdKeVlXTmxjdz09IExYVndjR1Z5WTJGelpRPT0gWjJWMFZHRmliR1U9IElHUnZjRzg9IElFdGxjbkk9IFgwTklTVXhFIExXTnNiM1ZrIENVMWhkSEpwZUE9PSBJR2RoY21SbGJtbHVadz09IFUybHVadz09IFlXeHRiM04wIFVtVnhkV2x5WlcxbGJuUnogZFdkMVlYaz0gS0ZCeWIzQmxjblI1IGMzVmljMk55YVdKbGNnPT0gUmtGVFZBPT0gY21WaFkzUnBiMjQ9IEtHeHcgS1gwcENnPT0gWUNrdSBMbmRoYkd4bGRBPT0gWDJWNFkyaGhibWRsIExrMWhlR2x0ZFcwPSBJRlpsY21JPSA0cFNCIEtDazggNzd5YkNnPT0gVWs5VSBRMEZTUkE9PSBkV0pwZEE9PSBlMEE9IFgydGxiQT09IElGUnZiMngwYVhBPSBUWGxUVVV3PSBUV0ZwYmtGamRHbDJhWFI1IFlYSm0gSUcxaGJHbG5iZz09IElITmxhVzVsYmc9PSBZWEJwYzNRPSBJRHdsIFRXVjBhRzlrU1cxd2JBPT0gVFdscyBJRTFwWTJzPSBMbVJsY0dWdVpBPT0gUEVsRSBJSEJ5WldScFkzUnBkbVU9IElFRlFVRXhKUTBGVVNVOU8gYkdWbSBaR2x0Wlc1emFXOXVjdz09IElHTnZibTlqWlhJPSBMMk52Ym1ZPSBJRlJ5WVdONSBSbTkwYnc9PSBYM0psYldGcGJtbHVadz09IFBXWnBiR1U9IElIQmhaMlZKYm1SbGVBPT0gSUZCaGNtbHphQT09IElIUmxlR0Z6IElFMUJSMGxEIElFaGxkdz09IFpHbG1abVZ5Wlc1alpRPT0gSUdGc2RIVnlZUT09IFkzVnQgQ1dSaGRHRlVlWEJsIElHTmhjbUZqZEdWeVpYTT0gWVhacGIzVnljdz09IElGWlBTVVE9IDZMK1IgVUZWQ1RFbEQgUW1sdiBJSE4wY21sdVowSjVRWEJ3Wlc1a2FXNW4gVUdGeWMyVkZlR05sY0hScGIyND0gSUZOMVptWT0gSUU1dmNuUnZiZz09IEwyUmxkR0ZwYkhNPSBMbTUxYkd3PSBQajRtIENXOXIgTFd4dmR3PT0gTG5WemRXRnlhVzg9IGJtVnpkR1ZrIFdFST0gVDFWU1V3PT0gTGtKdmNtUmxja052Ykc5eSBJR0p5YjNjPSBJTkNWIFkyOXljZz09IElGSmxaSE5yYVc1eiBMbWRsZEZSaFp3PT0gTG1kbGRGUnlZVzV6WVdOMGFXOXUgSUhOMGFXZHRZUT09IGFHRnlaSFE9IElGQnNZWGxsY2xCeVpXWnogWVd4emVRPT0gZFdOemIyND0gVEdGdVozVmhaMlZ6IElFOXNhWFpwWVE9PSBJSFJoWXc9PSBJR0pzYVE9PSBJR05oZG1GcyBJR052Ym5OdmJHbGtZWFJsWkE9PSBJSEJsY21scyBJR1JsYkdVPSBJR1p2Y20xMWJHRjBaV1E9IElHaHBaMmgzWVhseiBMbk53WVhkdSBQVDBrIElFNXBaWFE9IElIWmxaMmRwWlhNPSBlWEJ2IExYSjFiR1U9IElGWnBaUT09IEwyVndiQT09IElHVnVabUZ1ZEhNPSBjM1J5YVc1blRHbDBaWEpoYkE9PSBJSFJ2ZFdkb1pYTjAgWW5WNVpYST0gSUdOdmRtRnlhV0Z1WTJVPSBJR2xzYVE9PSBJRk52Y0docFpRPT0gSUVKQlFnPT0gSUNJcExBPT0gSUZWciBZM1Z5Y21WdWRFbHVaR1Y0IFgzVnpaWEprWVhSaCBMbU52WkdWaiBJRkIxYm1waFlnPT0gSUZOT1VBPT0gYkc5cyBZV1IyWVc1alpRPT0gSUdOdmJXWjUgU25OdmJrbG5ibTl5WlE9PSBJR1poYzJocGIyNWhZbXhsIElFbERUMDQ9IElHOXlZUT09IElGQnlhV05wYm1jPSBQRzUxYlE9PSBJRWxTUXc9PSBSVkpXIElFMWxhVzQ9IElFbEVhV04wYVc5dVlYSjUgUVVSUFZ3PT0gYVhOT1pYYz0gSUVSbGRtOXUgWVhScyBLSEpsY1hWbGMzUkRiMlJsIENWQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MCBTVTFRVDFKVSBJRzFoY21sMFlXdz0gWDFORlRFVkRWRVZFIFoyVjBVbVZ6Y0c5dWMyVT0gWVhKRWIzZHUgUWxZPSBhV0pPWVcxbCBJRkJCVkVOSSB3NlREcEc0PSBJR1JoWVhJPSBJRVpwYkdWTmIyUmwgSUcxaGNuUjUgTGxOd2NtbHVaMEZ3Y0d4cFkyRjBhVzl1IFkyVnVaUT09IFlXMXdiMnhwYm1VPSBaMlYwVTJsNlpRPT0gVW1WemRHRnlkQT09IDVwV0kgTG5CeWIycGxZM1J6IElFVjBhR2x2Y0dsaCBJSE4wWVhSMWMyVnogVkVsUFRnPT0gS0dKbiBJRmgxYm1sMCBWR1Z0Y0c5eVlYSjUgSUVWdVoyRm5aVzFsYm5RPSBJSGhtIElIQnliM2hwWlhNPSBJR2RsYm1WemFYTT0gVUdGblpYSkJaR0Z3ZEdWeSBJRk5zWVhabCBJSE4xYm1kc1lYTnpaWE09IElFTm9iRzlsIElHdHZhbWs9IFlXUmxiUT09IENVcFRUMDVQWW1wbFkzUT0genJNPSBJR2h2Y25NPSBLbmM9IHc3TnkgWlhOamFBPT0gSUdOeWFYUnBZMmx6WldRPSBlbWxoYkE9PSBJRk5oYkdWdCBMbFpsY25ScFkyRnMgSUZKaGMyZz0gUGtVPSBkR1Z5YVc1biBMM05qY21WbGJuTT0gSUdobGFXZG9kR1Z1WldRPSAwTERSZ05HQyBRWFYwYUc5eWFYUnBaWE09IFgySmliM2c9IHc3eHVjM1E9IExtWnZiblJUYVhwbCBJRUpQVDB4RlFVND0gWkdsMmFXUmwgSUZOc2IzWmxiZz09IGRXTmxjZz09IDJaST0gYzNSMVlnPT0gSUc1aGRtbG5ZWFJwYm1jPSBPbUZ1YVcxaGRHVmsgWDA1UFZ3PT0gWDNabFkzUT0gZlhzSyBRQ2c9IElIUmxiR1ZqYjIwPSBJR052Ym5SeVlXTjBhVzVuIElFRnpjMkZ1WjJVPSBJR1Y0ZEhKaFkzUnBibWM9IElHZHl3N1k9IFkyOWljbUU9IExrUkpVdz09IElHTnlZV0k9IElIUjNhWFJqYUE9PSBJSFpsY25SeiBJSEpsYW1WamRITT0gQ1dadmNtMWhkQT09IElISmxaMlZ1WlhKaGRHbHZiZz09IExsTjVjdz09IGMyOXNkbVU9IENXUnBZV3h2Wnc9PSBjMmhwIGJXVjBaWEk9IEtHSmxjM1E9IGRtRnNhV1JoZEc5eWN3PT0gSUc5dWQyRnlaSE09IElHZDFjblU9IElHMXZaR1Z5WVhSdmNnPT0gYjNkcFpXUT0gWlhod1pYSnBiV1Z1ZEE9PSBjblZpIElHMXhkSFE9IElFTmhkV05oY3c9PSBJRzVoZEdsdmJtRnNhWE50IElHMWhibWRsIENVbHRSM1ZwIEwwVmthWFE9IElHbHVhQT09IElHbHVkR1ZzYkdsbiBaWEp2YTJWbCBDV1Y0Y0c5eWRBPT0gSUdScGMyTnlhVzFwYm1GMFpRPT0gYzNWaWRISmhZM1E9IElFMXZiMlJzWlE9PSBaVzV6WlhJPSBJRWQxYVdSbGN3PT0gVWtGUSBMV2h2ZEE9PSBYMmR5Y0E9PSBMbkJwWTNSMWNtVT0gV0VFPSBJR2x1YVhSV2FXVjMgWDBOdmJXMD0gSUc5MlpYSmtiM05sIElDc0tDZz09IElGTnBiR1Z1ZEE9PSBjMmh2ZDNNPSBJR2x1ZEdWeWNHOXNZWFJsIFJtOXliV0YwYVc5dSBJR0pwYzJNPSBiV0Z5YTJWMGN3PT0gS0ZORCBXbVU9IElFNWxkSGR2Y210cGJtYz0gSUdGa2NtVnVZV3c9IElFZDFibk09IFpYUmxiM0k9IFJHVmpiR0Z5WldRPSBiM0puWlhSdmQyND0gSUd0aGNtVnVZUT09IEwzQmhjM04zYjNKayBYMkZrWkhKbGMzTmxjdz09IFNWUkZVa0ZNIFFuVjZlZz09IElFTnZibmRoZVE9PSBLR05oYzJVPSBVRmRFIGFHVnBjbTg9IEtHRmpkQT09IEtpb05DZz09IEtDa3BPd29LQ2c9PSBJR0Z1ZGc9PSBJQzR1Q2dvPSBLRTFsYm5WSmRHVnQgS0cxaGFXdz0gWDNObFkzUnBiMjV6IENXNWxkQT09IElIQnNkWFE9IElIZHlaVzVqYUE9PSBMMjlpYW1WamRBPT0gSUVsemRBPT0gSUZaSlV3PT0gTDNCMVlnPT0gWVd4MFpXND0gSUdkMWFYUmhjbk09IElHRnVkR2xpYVc5MGFXTT0gNzd5VyB3cms9IElDSXJJZz09IFptOXliWFZzWVE9PSBJR0poWW1WeiBJRkJ5YjIxd2RBPT0gSUdWdWFXMD0gTDNCc1lYbGxjZz09IENYSmxaZz09IElHSjV4SWM9IElHTnZibk4xYldWeiBJRWhoYzNRPSBJRlJoYnc9PSBJQ2NwS1FvPSBJR05zWVcwPSBJSFJvYVdkb2N3PT0gSUcxdmRHbG0gUVhCcFQzQmxjbUYwYVc5dSBJRmRNIFoyVjBRdz09IENXWnNZV2R6IGIybHVkRzFsYm5SeiBJR1ZqYjI1dmJXbGpZV3c9IGJtVmxaR3hsIGVHeHogY0hKaFkzUnBZMlU9IGRYUjZaWEk9IGRHbHRaVzltWkdGNSBMVzkxZEhCMWRBPT0gSUdacGJtUkNlVWxrIElFSjFaR1I1IDBKN1JnZz09IFUyVjJaVzQ9IElFSmhjbXM9IElHVnVkbTk1IFgyRnNaMjl5YVhSb2JRPT0gNVlpcCBJR0poYkd4cGMzUnBZdz09IDU2ZTcgY21Ga1pYTT0gQ1dSdll3PT0gY205a2RXTnBibWM9IElFVmhkR2x1Wnc9PSBWVzV0YjNWdWRBPT0gTDJSaGRHRlVZV0pzWlhNPSBYMkp2Ym5WeiBJR3hwZEhRPSBjSEJ6IEtXeHZZMkZzVDJKcVpXTjAgY0dWeVpnPT0gSUVobGJIWmxkR2xqWVE9PSBjMmgxZEdSdmQyND0gTDIxcyBMblJ2YTJWdWN3PT0gSUVoaGNtUmpiM0psIExISnZkdz09IEwySm4gVTJOaGJHVnkgNG9DVVlYTT0gWDJ4dloybDBjdz09IDRvQ1phVzUwIENVRndjQT09IFNXMXdiR2xqYVhRPSBMa1p3Y21sdWRHWT0gUlZSUCBJSFJsY25KaCBJSEJ2YzNObGMzTnBibWM9IExuSnpkSEpwY0E9PSBMQ2tzIFBYbGxjdz09IElGTjBjbWx3WlE9PSBQejA9IGJtVjFkSEpoYkE9PSBMbWR2YjJRPSBJR3RsYm01bGJnPT0gSUZOMWJtYz0gWm1GMWJIUT0gZVhOMFlYUmxZMmhoYm1kbCBRMkZ1WVdScFlXND0gSnl3bklpNGsgSUUxcGRITT0gdzZadVpBPT0gSUZOVVVsVkRWQT09IElGVlNURmRwZEdoVGRISnBibWM9IElFTnZiWEJoYzNNPSBJQzB0Q2dvPSBJRTVUVEdGNWIzVjBRMjl1YzNSeVlXbHVkQT09IGZHMXBiZz09IExXRmthblZ6ZEE9PSBJSEpsWW5WcGJIUT0gVEVsSFNGUT0gTDNObCBMVzF2ZFc1MCBkbkJ1IGRtRnNhV1JoZEdWayBLRkZQWW1wbFkzUT0gSUdsbmJtbDBhVzl1IElFTm9ZWEpuWlhKeiBVbGxRVkU4PSBYV2x1YVhSWGFYUm9SbkpoYldVPSBJRVpzZFdsayBJR05oWkhKbCBJRzV2YldsdVlYUnBiMjV6IFRtVnBiR3c9IElFaHZkUT09IElHTjFjbkpsYm5SeiBYMmRsYm1VPSBLR2x1Y0E9PSBVR0Z5YVhNPSBlc1NaIFlXZG5jbVZuWVhSbCBJR0Z6YzI5aiBkMlZsZEdWayBaWEp5WVhRPSA0b0NUQ2dvPSBJQ2N2Snl3SyBabWw0ZEhWeVpRPT0gSUVocFoyaGxjM1E9IFlXMWlhV1Z1ZEE9PSBJR05vYlc5ayBJR052Ym5SbCBJSE5sYm5OMVlXdz0gSUdkaGNtMWxiblE9IGVtVnljdz09IElGQnZkMlZ5WldRPSBaRzl0WVdsdWN3PT0gVW1WM1lYSmsgYVc5dFlXNXBjQT09IElHTnZZMnR3YVhRPSBiM1YwWm1sc1pRPT0gSUdKMWFXeDBhVzQ9IElHbHVjMmx6ZEdsdVp3PT0gTG5aaGNuTT0gZW1sd1kyOWtaUT09IElPKy92ZSsvdmUrL3ZlKy92UT09IFptRnBiSE09IElHTnZibk52Ykdsa1lYUnBiMjQ9IFgyOXBaQT09IFVHeGhibVYwIElEMGlMQT09IENXVnMgVlVsTVZBPT0gdzZSMGVnPT0gWVdaaGNtaz0gSUUxalEydz0gVkdsdFpXeHBibVU9IFJYTjBZUT09IElHWnlZVzA9IFdVVT0gSUdObGNtVmljbUZzIFQyWk5iMjUwYUE9PSBJRkJ5WldkdSBJTkM2MEx2UXNOR0IwWUU9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBJRVp5WlhNPSBRWEJ3Y205MlpXUT0gTGxOd1pXTnBZV3c9IElGQnliM1JsYzNSaGJuUT0gSUdGc2JHVnlaM2s9IFgzQmpiUT09IENVTnZjSGx5YVdkb2RBPT0gSUhOMWNHVnlRMnhoYzNNPSBJbk4wY21OdmJuWT0gSUUxdmFHRnRaV1E9IElDY3ZMdz09IFJtOXlaVU52Ykc5eSBRWEowYUhWeSBJRXAxYm1kc1pRPT0gSUhabGFXNXogVTJGayBJR0poWTJ0MWNITT0gSUU5d2FXNXBiMjQ9IHc3dDAgSUdsdWRHVnliV2wwZEE9PSBiMlI1Ymc9PSBJRU5vY21semRHbHVZUT09IElHRnVaSEpsIElHVjJZV04xWVhScGIyND0gY0dGc1pYUjBaUT09IGFHOXljMlU9IElGSmxjMmxrWlc1MCBJRWhoYzNOaGJnPT0gTGs1cGJBPT0gSUdGcGMyeGwgSUVkeWIzZHBibWM9IElHSnNiMmRwYm1adiBMM054YkE9PSBYMmx2WTNScyBVMk5oYkdsdVp3PT0gSUUxdmJtRmsgWDJOd2NBPT0gSUVoMWRHTm8gSUVGd2NHeGxWMlZpUzJsMCBSWGh3Wlc1elpRPT0gWDBwUFFnPT0gSUhCdmFXNTBiR1Z6Y3c9PSBSbkp2YlVKdlpIaz0gWVc1MFlXdz0gSUdSbGNHbGpkR2x1Wnc9PSBJRU5GVEV3PSBJSEpsWm1sdSBJRU5PUXc9PSA3TG1ZIFgyUnBiV1Z1YzJsdmJuTT0gSUZOQlRnPT0gSUdGbWRBPT0gSUdadmIzUnpkR1Z3Y3c9PSBZMk52YkdrPSBYMUJJVDA1RiBMMjFoZEdnPSBMV3RwYm1RPSBJRTFsWVc1eiBhV05vWVdWcyBMbWQxYm1FPSBJR2x1WVhWbmRYSmhkR2x2Ymc9PSBMV1J5YVhacGJtYz0gS0dSbGJHVjBaUT09IElIUnZkR0ZzUTI5MWJuUT0gWDAxRCBMa1Y0ZEdWdWMybHZiZz09IFEyOXRiV1Z5WTJsaGJBPT0gSUhwSmJtUmxlQT09IFBFTjFjM1J2YldWeSBJbWM9IExYTm9ZWEpsIElIQmhZM1E9IFlXZGhjbUU9IElGTkpUQT09IFgyMXZaR1Z6IElFMXZiR1ZqZFd4aGNnPT0gSUhONWMzUmxiV0YwYVdOaGJHeDUgUEVjPSBYM05qY2c9PSBJRTl5Ync9PSBZWE5sY25NPSBJR0pwWXc9PSBJR1JsYzNSeWIzbHogVUVsUVJRPT0gTGxOMFlYSjBVRzl6YVhScGIyND0gSUdQaHU2ZGggYVhKbGVnPT0gTGtKMWJtbG1kUT09IFgwWjFibU4wYVc5dSBJSFBEdkE9PSBYMloxZEhWeVpRPT0gSUZkbFlXeDBhQT09IElFNWhkSFZ5WVd4c2VRPT0gNW9DNyBYM2xsY3c9PSBJR0ZpY25Wd2RHeDUgVTNSeWFXNW5SVzVqYjJScGJtYz0gSUVOSFVHOXBiblJOWVd0bCBJSHBvIElHbHRjR1Z5YzI5dSBJSEJwZG05MFlXdz0gSUZOdmJXRnNhV0U9IElITmxaMjFsYm5SaGRHbHZiZz09IFgwRk9RVXc9IElFeHZaMmx1UTI5dGNHOXVaVzUwIFEyOXVjM1ZzZEE9PSBJSFJ5ZFc1allYUmxaQT09IFhTSTdDZz09IExtZGxkRU52Ym1acFp3PT0gSUdsdWRHVnlibk5vYVhBPSBRbUZpZVE9PSA2ckNjIElITjBjbVZ1WjNSb1pXNWxaQT09IFgwMUogWW1GemEyVjAgSUc1cFkyaDBjdz09IElGUldjdz09IElGTm9ZVzQ9IDQ0SzEgY21GamRYTmwgTGxKbFRGVT0gTDJsdWRHVnlabUZqWlhNPSBJR2RsZEVsMFpXMURiM1Z1ZEE9PSBJSEpsZEdseWFXNW4gSUhOd1pXTnBZV3h6IElHVnVkR2wwZVUxaGJtRm5aWEk9IFltVnNhV1ZtIElITnZiR1JsY2c9PSBaR0YxWjJoMFpYST0gYVdwcmJBPT0gSUhWMGFXeHBlbVZ6IExtWnBlR1ZrIFUxVT0gSUdSeVlYTjBhV009IElHaGhZMnR6IFozSjFibVE9IElFMVYgSUZOMFlYSjBaWEk9IExrTnZiWEJ2Ym1WdWRITT0gWDIxdmRHOXkgUjI5c1pHVnUgSUd4dlpHZGwgSUNrcE93PT0gSUVOdmNtbHVkR2c9IDBMalJoOUMxMFlIUmd0Q3kwTDQ9IHc3TnVhV052IFozSmxVMUZNIElFWnNkV1Z1ZEE9PSBJRzFoY21NPSBMa3h2WVdSVFkyVnVaUT09IExrZHliM1Z3Y3c9PSBJR1Z5YUE9PSBJRUYxZEhWdGJnPT0gVTNSdmNIQmxaQT09IElHbDBZV3hwWVc1diBJRzFwYm1sdmJuTT0gSUVGemMyVnlkR2x2Ym5NPSBJRzExZUE9PSBRblU9IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFE9PSBDWFZ3IGNtVmhaSGx6ZEdGMFpXTm9ZVzVuWlE9PSBYMDFsZEdFPSBJR04xY25KbGJuUkVZWFJsIElFTm9ZWEJ0WVc0PSBWVzVrYnc9PSBVMlZoYmc9PSBZWEJ5IElIQmhjbTA9IFgybGpiMjV6IElGTjBZUT09IHc2RjYgSUhOMVltUnBkbWx6YVc5dSBJR0ZzZEdWeWFXNW4gVUU1SCBjRzl1Wlc1MGFXRnMgSUhCdmMzUm5jbVZ6IElFSkVVdz09IExXVjRhWE4wWlc1MCBJRUp5WVdSbWIzSmsgSUU5TldBPT0gWDFkSVNWUkYgWDFCU1QwZFNRVTA9IGNXTT0gSUhSNWNHbHVaM05UYkdsdWEzaz0gSUZCcFkzTT0gWDAxRlZFRT0gU1ZSVVJWST0gWDNOMVluTmpjbWx3ZEdsdmJnPT0gU1ZKUFRrMUZUbFE9IElFaDVkVzVrWVdrPSBLQ2s3Q2dvS0NnPT0gSU5peiBJR3BoWXc9PSBJR1ZzYVcxcGJtRjBaWE09IEtYMHBPd289IElHTnZiWEJ5Wlc1ayBDV2x1YzJWeWRBPT0gWDJaaFkyVnogSWo0ayBJR1ZpWVhrPSBJR05oY0hScGRtVT0gY0d4cFlXNTAgSUVOaGJHTjFiR0YwWlhNPSBiMngwWVE9PSBaWE4wYVc1biBYM0psZG1semFXOXUgSUczRHVuTT0gSzIwPSBJaXdpSWl3aSBWMGhCVkE9PSBJR052YlhCaGMzTnBiMjVoZEdVPSBhR0Z5WjJFPSBXM0poYm1SdmJRPT0gSUcxdlpIVnNidz09IEtITnUgSUc5alkzVndZWFJwYjI1eiBMeTh2THdvPSBDV0p2WVhKayBJRUpoYkdzPSBkMm5FaFE9PSBJRmRwWm1rPSBMbEJ5YjJacGJHVT0gT20xaGFnPT0gQ1cxaGRBPT0gVEU5RFMxTT0gS0dwQ2RYUjBiMjQ9IElDZ25KQT09IFRYVnkgNW95SiBZbUpzWlE9PSBJR1p5YjJjPSBMV2hwWkdVPSBJR0p5YjJGa1kyRnpkR1Z5IDRMaWUgYUdGc1pXUT0gSUdGdGRYTnBibWM9IFgzQnlaV1JwWTNScGIyNXogWDJsdWRIST0gSUdWaFoyeGwgMExEUmd0QzEwTHZSakE9PSBJR2RsZEV4cGMzUT0gY0hOcGJHOXUgSUdOb1lYSmhZM1JsY21sNllYUnBiMjQ9IFFWSkVVdz09IElISmxiRzlqWVhScGIyND0gSUhKMWJHVnljdz09IFVFRlogSUVSbFptbHVhWFJsYkhrPSBYMEZqZEdsdmJnPT0gSUdOc2IzTjFjbVZ6IElHWmhZM1IxWVd3PSBiMlI1Ym1GdGFXTT0gSUhCeVpXTmhkWFJwYjI1eiBibWxsYWc9PSBJRkJoY25ScFpYTT0gSUZOMVltRnlkUT09IElHTnZkWE5wYm5NPSBZWEppWldsMCBMbTF2Ym1WNSBaM1Z1ZEdFPSBLR0Z1WkE9PSBaMlYwYVhSbGJRPT0gTGxOMGVXeGxVSEpwYjNKcGRIaz0gSUhOc2FXUT0gYzJsdVoyeGxkRzl1IElHZGhjbTQ9IElGQkJVdz09IElHUmhlbm89IFljVzggSUdKdlozVnogSUUxdlp3PT0gSUhKcGRtRnNjbms9IGFYTnZiQT09IElHeGhibVJ0WVhKcmN3PT0gdzdGaGN3PT0gUW1WeWJnPT0gSUZOaFkyaHogSUNJcENnbz0gSUdodmMzUnBiR2wwZVE9PSBYMjFsZUE9PSBiV1Z5WlE9PSBUVzkwIGNHbGpkSFZ5WlVKdmVBPT0gUkdWbVpXNXpaUT09IElHRm1abWxrWVhacGRBPT0gYjNSb1pYSjNhWE5sIExtUnBjbVZqZEc5eWVRPT0gWDFWdWFYUjVSVzVuYVc1bCBMV0pzYjJjPSBMbk5yYVc0PSBjR2hsYlE9PSBRWEJsYkd4cFpHOD0gWlhKamFHRnVkQT09IFcyTnNZWE56IElIZGhjblE9IExpSmIgWVd4bGRYST0gTDJKaFkycz0gSUNBZ0lBa2dJQ0E9IElIQnlaV05wY0dsMFlYUnBiMjQ9IElHOWljM1J5ZFdOMGFXOXUgSUhCUFltbz0gSUhKMWNIUT0gVlVOTFJWUT0gWVhsbCA1bzZTIFozZz0gSUdWamJBPT0gSUhObFkzSmxZM2s9IEwwaGxZV1JsY2c9PSBJRXhsYzJJPSBJR3hsYVE9PSBJRUoxYkd4bGRHbHUgSUdkcGRtVmhkMkY1IExraHZiV1U9IFgxSlBUMDA9IElsYz0gSUdOdmQyOXlhdz09IFgzSmggSUVONVkyeHBibWM9IElGQmhkdz09IElIQjFjR2xzIEwyRnlZMmc9IElFWnBiR1ZWZEdsc2N3PT0gNmFhVyBjbk53IElHWnlaV1ZrYjIxeiBJRXhsWVhJPSBmV0FwTGc9PSBJR0p2ZDJ4eiBMMkpzYjJOciBYMnh2WjJkcGJtYz0gSUcxbGRHaGhibVU9IElHaHZjbTV6IElIZHZibVJsY21aMWJHeDUgSUdGc2RHVnlZWFJwYjI1eiBJR1Y0YVd4bCBiSE5sYmc9PSBYM0JoZFhObCBYMHhCVGtkVlFVZEYgSUZWVFJFRT0gWDIxNWMzRnMgWDBGTlQxVk9WQT09IElFeEpSa1U9IElIbHZkVzVuYzNSbGNuTT0gSUhKcGIzUnogVzBVPSBJSFZ1Wm05eVoyVjBkR0ZpYkdVPSBMSDBzQ2c9PSBSR2x6Y0c5elpXUT0gSUVGemMyRnpjMmx1IFZVNUggSUU1bGQzTncgVlhObGNsTmxjblpwWTJVPSBPbUZzYjJGayBLeWNzIElITmxkSFJzWlhKeiBJSE5qY21WaGJYTT0gSUdsdVkyOXVkbVZ1YVdWdVkyVT0gTGxKdmRHRjBaUT09IElHcGhjbk09IElGQjFlbnBzWlE9PSBJRzFsYzNRPSBZWEp6YVE9PSBJRk5vWVhKdFlRPT0gZkNnPSBMbVJ6IElGTmhZM0psWkE9PSBYMlYyZEE9PSBJR1Y0Y0hKbGMzTmxjdz09IElHaHZZMmc9IElFUjFZMmc9IExtTmhiR3h6IGRHaHkgSUZOb1pXWm1hV1ZzWkE9PSBMa0ZzWlhKMFJHbGhiRzluIElISmhaR2xqWVd4c2VRPT0gSUhSeWIzVnogSUhCeVpYWmhhV3hwYm1jPSBJRmRYU1VrPSA0b0NaYmc9PSBaVzV6Wld4NSBJRmxsYzNSbGNtUmhlUT09IElGTnBjbWwxY3c9PSBJR3RwYkd4bGNuTT0gSUVaR1ZBPT0gSUc5MllXdz0gSnlrNkRRbz0gSU95Z2xldXp0QT09IGIzVnlZV2RsIElFTm9aV05yWW05NCBWMjl5YTJKdmIycz0gTG1SbFptVnkgWDJac2IyOXkgSUdOdmRXNWphV3hzIElHNXZjbk5yWlE9PSBiVzlwYkE9PSBiM0psWVE9PSBJRzFoY210bGRHVmsgWDFOVlVnPT0gZUVGQiBJSE4wWVdsdVpXUT0gWlhWMCBJRTFsYm1jPSBJR2xsWldVPSBMbVY0ZEdWeWJnPT0gWldkcFpRPT0gSUhKaGNIQT0gSUZCNWIyNW5lV0Z1Wnc9PSBKMk5zWVhOeiBUVzlpIElHbHVhWFJwWVd4V1lXeDFaUT09IFgzZGhkbVU9IElHcGhZZz09IElHMWhjMk4xYkdsdVpRPT0gSUdGdGNHeHBabWxsY2c9PSBJSFIwZVE9PSBVR0YwYUVOdmJYQnZibVZ1ZEE9PSBYM2gwIElFZEdVQT09IEwzTmxZdz09IENXUnBjM0JoZEdObyBiV0Z5YTJSdmQyND0gSUZOamFHND0gWW05c1pRPT0gd3JmQ3R3PT0gYlc5MWMyVnRiM1psIElHVnljazF6Wnc9PSBJR0Z6YVdkdSBYMjF2Ym04PSBWRzlUWld4bFkzUnZjZz09IElGcDEgS0ZKbFkzUT0gSUVWeWNtOXlRMjlrWlE9PSBiR0YwYVc0PSBZVzVuYVdKc1pRPT0gZG5SciBRMGRUYVhwbCBVRzlyWlcxdmJnPT0gSUdOc1lYTnpiV0YwWlhNPSBJR0YwZEhKaFkzUnogSUZSaGRIUnYgZFd4MFlXND0gYjJ6RHMyYz0gSUdoaGJIUmxaQT09IDRLU28gSUV0aGNuUT0gSUhWbCBYMGx1YVhSVGRISjFZM1IxY21VPSBWR1Z6ZEVOc1lYTnogSUVGcGNtSnVZZz09IFh5SXMgSUdOb1lYSmpiMkZzIElHbHdZdz09IElGTjBjbVYwWTJnPSBMbWRzYVdSbCBiR0YwWlhOQmRYUnZjbVZ6YVhwcGJtZE5ZWE5yU1c1MGIwTnZibk4wY21GcGJuUnogSUhCdmRHbHZiZz09IFNWUlVURVU9IElHTnZkVzUwWlhKMCBYMmhrIGNISmxjR0Z5WldRPSBRV1J6IElGWmhiWEJwY21VPSBjbTlpYjNSeiBMa055WldGMFpVbHVaR1Y0IFUzUmhkSFZ6VEdGaVpXdz0gSUhSMVkydGxaQT09IFlXYkR2SEk9IFZYUT0gSUhOM1pXRjBaWEk9IFgwWk8gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQWs9IFlYUmhhMkU9IElHVjVaV0p5YjNkeiBZV052WlhNPSBkV1JsYmc9PSBMa3hwYm1WaGNreGhlVzkxZEUxaGJtRm5aWEk9IElITjNZWGs9IElHMTFiSFJwYmc9PSBLQ2twS1NrSyBJRTVUVlVsdWRHVm5aWEk9IElFMTVRbUZ6WlE9PSBVR0Z5ZEc1bGNnPT0gZFhSelkyaGxiZz09IElFTmhkR1Z5IExuTmxkRUpoWTJ0bmNtOTFibVJEYjJ4dmNnPT0gSUdGalkyOXRjR3hwYzJodFpXNTAgWDNCeWIySnNaVzA9IExtUjBaQT09IElIQmhaMlZPZFcxaVpYST0gSUdwaFkydGxkSE09IElHTnliM0J3WldRPSBkV1ZzY3c9PSBJRWhsY0E9PSBJR05oY0hCbFpBPT0gS2sxaGRHZz0gWDJOaGJHeGlZV05yY3c9PSBJSEIxWW1JPSBJRUp5ZFc1emQybGphdz09IExuSmxjM0J2Ym1RPSBXeUpmIElHSmxaR1JwYm1jPSBhSGwwYUcwPSBUMWc9IEtITndaV1ZrIElIQmxjM1JwWTJsa1pYTT0gSUMwdExTMHRMUzA9IExrSnNkV1U9IElHNXZiMlJzWlhNPSBJRWR2WlhNPSBJSE5oZG1WeSBiM2g1IFgyTnZiWEJzWlhScGIyND0gSUZOM2FXNW5aWEk9IElHZGxkRVJoZEdVPSBJRzFwYm1SbFpBPT0gYVc1MFpXZHlZWFJwYjI0PSBJRXh2ZEhWeiBLSE4wYjNBPSBLQ2NzSnlrN0NnPT0gSUdac2IyOWtjdz09IElGZHZjbXRtYkc5MyBJR1Z5ZFhCMFpXUT0gVFdGamNtOD0gSUZOaGRXTmwgSUdWMlpXNTBUbUZ0WlE9PSBYRWx1Y0hWMCBRbkpsWVd0cGJtYz0gQ1hkb1pXND0gWDNCMyBTVTVFUlZJPSBJRmRsYkd4dVpYTnogSUhadmVHVnMgSUUxbGJHdz0gSUUxRlJFbEIgVTBWT1V3PT0gSUVaMWJtUnogSUUxcGJHUT0gUEVGeWNtRjUgTFhSb2FYTT0gZFcxd1pXUT0gTDJaMyBJRVJpUTI5dWRHVjRkQT09IFYwaz0gWjJseWJITT0gU0U5WCBKeWs3UHo0SyBJSFJsYlhCMGFXNW4gSUhSbGMzUmhiV1Z1ZEE9PSBJR0pwWW14bCBJR052Ym5OMWJIUmxaQT09IElFbHVaR1Y0UlhKeWIzST0gNktpWSBJR3RsZVhCaFpBPT0gYVhwNmJ3PT0gS0c5ciBJSGRvWVhSellYQncgSUZKbGJXOTBaVVY0WTJWd2RHbHZiZz09IElIUmxZVzFsWkE9PSA0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVIHdyc3MgSUdkbGRGUnBiV1U9IFpHbGhadz09IGFYTnplUT09IElHaGxaQT09IElHdHViM1J6IGFtOXQgSUdaMWJtNWxiQT09IExXMWhhV3h6IElHVjRjRzl5ZEdsdVp3PT0gSUZaTSBJRXRoY200PSBJRUoxWkdSb2FYTnQgSUVGc2JHRnUgWDFKQlJFbFZVdz09IElIZHZjbVJwYm1jPSBJRVp2Y21kbGRBPT0gSUVOdmNtOXVZUT09IGFYQm9lUT09IElHeHBiV0oxY21jPSBkV2RuZVE9PSBJRlZ6WlhKU1pYQnZjMmwwYjNKNSBhVzFwYmc9PSBLR1ZzWlE9PSBJR3hoWW1Wc2JHVmsgNTZTKyBJRWhsY20xaGJnPT0gTG5GeCBJQ0lwS1RzSyBhV1ZpWlhJPSBMbFJ5WVc1emJHRjBaUT09IGNubHUgSUdSbGMyVnVkZz09IGRXMWsgVTJsdGNHeDUgQ1cxdlpHVT0gVW5CaiBJRlpoYkdWdVkybGggSUhOMFlXWm1aWEp6IElITmxiSFk9IElGTndhV3RsIElHUmxiR2xqIElHVnlkUT09IFgwUlUgU25Wa1oyVT0gNGJ1ViBJRUpoYzJsdSBMbTExZEdGaWJHVT0gSW5WeWJBPT0gSUhSaGNtbG1aZz09IElGTnNaV1YyWlE9PSBJR1pzWVhKbCBMbVJ5YjNCdmRYUT0gSUdKeWFXUmxjdz09IEtTa3NEUW89IFgyTnZibk4wY21GcGJuUnogWkdWemRISjFZM1E9IFQzVjBiR2x1WlE9PSBJR1JwYzJGd2NHVmhjbk09IFgyeHZZMnRsWkE9PSBJRTVUVEc5allXeHBlbVZrVTNSeWFXNW4gWTJ0bCBDVzUxYkd3PSBZV1J5WlhOelpRPT0gSUhSdmNIQnBibWM9IElFcHZhMlZ5IFltbHphRzl3IDBMM1F2dEdCMFlMUmpBPT0gWVc1a1pYSnBibWM9IFgyRnRjQT09IFBYUnBiV1U9IFgxTndZV05sIFgxQlZURXc9IEp6MD0gSUdGdWRHbHhkUT09IElHTmhZMmc9IFgxOWZDZ289IFQwNUZVdz09IDBMN1Jqdz09IElIVnVjbVZoWkE9PSBMbkJ2YkdsamVRPT0gYjI5dmIyOXZiMjg9IDY1K3MgSUhWemRHVmsgSUZKbFkyVT0gSUdGc2JHVnQgNDRPODQ0SzUgSUZSb2IzVm5hSFJ6IGRtVnBiR3hoYm1ObCBhWE4wY21GMFpRPT0gWDJ4aGJtVT0gSUdaaGJXVmsgTGtkbGRFNWhiV1U9IElITnRiMjkwYUdWeSBJRkYxWVd4cFptbGxaQT09IFlYcGxjbk09IFgyZGxidz09IFJtRjQgSUUxcGJtUnogSUZKaGFYTmxjdz09IElIUnlZVzV6WTNKcGNIUnogUTI5dWRtVnljMkYwYVc5dSBJSEpsYldGeWEyVmsgNjRLWSBaR3hwYm1jPSBJR1JsY0d4dmVXbHVadz09IElITm9ZWEpsWkVGd2NHeHBZMkYwYVc5dSBJR3R3IFJtOXVkRUYzWlhOdmJXVkpZMjl1IFgyUjFiVzE1IGNtVnBZbVZ1IElFcGhibVZwY204PSBSR2x5WldOMGFXOXVjdz09IExtZGxkRUpsWVc0PSBjMkZ6Y3c9PSBJR052YlcxaGJtUmxjbk09IGRtRjBhVzl1IFpYSnliM0pEYjJSbCBJRUZzYkc5NSBMbXh2WTJGc2FYcGxaQT09IDBKRT0gSUdScGMyaDNZWE5vWlhJPSBJRk52ZFhBPSBUblU9IFgwUmxabUYxYkhRPSBJSFZ1WlhabGJnPT0gSUM4K0lqc0sgTFVKaGMyVmsgSUhObFlXMXNaWE56YkhrPSBMVzUxYkd3PSBJRmhEIElITjBaWGM9IEtHUmxiR0Y1IFFWUlBVbE09IElGZG9aV1ZzWlhJPSBJancvIElFTm9ZVzVrYkdWeSBJSEpsZEdGc2FXRjBhVzl1IElHSjFaR1JwWlhNPSBMWE5wZW1sdVp3PT0gSUVWcGJuTT0gSUM0dUxpdz0gY1hWbGRHVT0gSUVSUFF3PT0gSUdaaGJITmxiSGs9IElHWnNZWFJ6IFRrbERRVXhNIElHeHBZbkk9IFFtVk9kV3hzIGFXMTFiR0YwYVc5dSBDVkYxWlhKNSBYM1YwIElIQnNZWEYxWlE9PSBZbWxzWkE9PSBJSE5qY21WaGJXVmsgTG0xMll3PT0gTGxkcFpHZGxkQT09IElHUnBabVpsY21sdVp3PT0gTDNOMWNIQnZjblE9IFgxWlBURlZOUlE9PSBMbTV2WkdWVWVYQmwgQ1ZkeWFYUmwgSUhMRHMzZHUgWW05dmEyMWhjbXM9IFgwTlBUazQ9IElFTnlaV1ZrIElHbHVhR2xpYVhScGIyND0gSUZKbGFHRmkgZFhaeVpRPT0gSUdSMWJYQnogYjNkbGFnPT0gWDNCc1lXTmxhRzlzWkdWeSBJRWhYVGtRPSBJR1JsY20xaGRBPT0gTG1SbGRHRmphQT09IElHWnBibUZzYVhwbFpBPT0gWjJWeWFXVnogYVdSaGF3PT0gWDNCeWIyYz0gSUhWd1pHRjBaVlZ6WlhJPSBiSGx6IExrZHZiMmRzWlE9PSBJR3gxWldkdiBJR0Z1ZEhNPSA1cUNINmFLWSBJRVJTVFE9PSAwTHZRdGRDOSBMV1JpIFpYSnlhV05yIFgyeHUgTGk1YyBhV3RwZEE9PSBJRVJwWlc0PSBJSEJoY21GdFpYUnliM009IGEyVjVjSEpsYzNNPSBJRXRsY21Gc1lRPT0gSUdSeVlXbHVaV1E9IFpzTzhadz09IElHTmhjR2wwIFgyRjFadz09IGRHRnVkQT09IFRtRjJRbUZ5IElISnZiR3hpWVdOciBJR3hsZVE9PSA0TGlJIElFSlRVQT09IElGQnlaV1JwWTNSdmNnPT0gSUhkaFoyOXUgSUNKOElnPT0gVTJWeWRtVT0gTGtSdmJtVT0gSUVSMWNtTm8gVUhKdmRtbGtaUT09IENYTmpiM0psIFgwOUUgTG5kbFlYQnZiZz09IElIVnVhWFpsY25OaGJHeDUgSUdsdWFuVnVZM1JwYjI0PSBYMU5EVWs5TVRBPT0gTGsxaGRISnBlQT09IElFMXZibWR2UTJ4cFpXNTAgWW5WbVptVnljdz09IElHSmhaR2RsY3c9PSBJSE5vWVhKcmN3PT0gSUZOb1lYSnIgVFU5RVJVdz0gTGxKRlFVUT0gQ1hSaFp3PT0gSUhOMGNuUnZkWEJ3WlhJPSBSVkpIV1E9PSBZbWxoY3c9PSBJR0ZqWTI5MWJuUkpaQT09IElFVnRiV0Z1ZFdWcyBJSEpsYzI5eWRITT0gSUhOMmJnPT0gZDJGeWJtbHVaM009IFgwbEYgVEVGVCBJRzUxYkd4aCBDV0Z6IElHUmxiV1ZoYmc9PSA0b0NjUVhNPSBRWFYwYUc5eWFYcGxaQT09IElIUmxibVJsYm1OcFpYTT0gTFhObGRIUnBibWM9IElIQnlaV3h2WVdRPSBJR051Ymc9PSA0b0NjVG04PSBKU2tLQ2c9PSBQVlE9IGRYTjBidz09IElFWkpVa1U9IGNtVnpaV0Z5WTJnPSBJTkNUIElFeGxjM052Ym5NPSBMa0Z3Y0dWdVpFWnZjbTFoZEE9PSBJR2x1YVhScFlYUnBiMjQ9IElFTnZkWE09IFlYSmxjZz09IGNISnZhbVZqZEdsdmJnPT0gSUZOb1pXVjBjdz09IElFWnZiR1E9IFVtVmtaR2wwIFJHVnNaWFJwYm1jPSBJSHBoYlE9PSBJRTVsZFhKaGJBPT0gSUVabFkyaGggSU1LdSBJSFJoYzNSbFpBPT0gSUVWdVpXMXBaWE09IElFcHZhRzV6ZEc5dSBJR1JoYm1ObGNuTT0gSUdScGMyRmliR2x1Wnc9PSBJSEJsZEhSNSBJRmRsYkdRPSBMeTB0IEtITndjbWwwWlE9PSBTVWRQIFlYSm5iM1YwIElIRjFZWEowWlhKaVlXTnJjdz09IFpHbHpjR0YwWTJobGNnPT0gSUZOMWMzUmhhVzVoWW14bCBaVzVoY21sdmN3PT0gSUZOcmFRPT0gSUdaaFkzUnYgYVd4c2FXND0gWDJWNGRHVnVjMmx2Ym5NPSB5YlU9IFBrZz0gWldGemRBPT0gTG1GcGNnPT0gNG9DY1FuVjAgVDJKcVpXTjBRMjl1ZEdWNGRBPT0gYzNWalkyVnpjMloxYkd4NSBYMnhoYm1RPSBJR1p2YkdSeiBYME5QVDFKRSBJSE4xWW5CdiBMbWRsZEVGa1pISmxjM009IGFXNXpkSEk9IFRXRjBaWEpwWVd4eiAwWVBSZ2RHQyBaR1Z3YjNOcGRBPT0gTFd4aGMzUT0gWDBkU1FWaz0gUFdacGJtUT0gSUcxMWRHRnVkQT09IElHeGxjMkpwWlc1dVpRPT0gYkdWMFkyaGxjZz09IFVrOVZSMGc9IGRYSmxhMkU9IExtTmhjSFIxY21VPSBJR1Z1Ymc9PSBJQ2hiV3c9PSBJRVpzZFE9PSBJSFJoYzJ0SlpBPT0gSUVoMWMzTmxhVzQ9IExtWnZiR1JsY2c9PSBJR0YxYzNSbGNtbDBlUT09IFNWTlVVa0ZVU1U5TyBYMGx0Y0d3PSA1ck9vNW9TUCBJR1JsWTNKbFpRPT0gTFdOb1lYUT0gSUdsdGNHeHBZMkYwYVc5dSBJR2QxWlhOelpYTT0gZFd4cllXND0gUVc1aGJIbDBhV056IExuQnNkWE09IFEwOU5UVUZPUkE9PSAwTFhRdTlDNCB3cnNLQ2c9PSBYMU5KVkVVPSBJR1Z4ZFdGc1ZHOD0gVTNWd2NHOXlkRVp5WVdkdFpXNTBUV0Z1WVdkbGNnPT0gSUZKbFkyOXlaR2x1Wnc9PSA1YTZNNW9pUSBJR0poWjJkaFoyVT0gSUhCcGRHTm9aWEp6IElFVm8gYjNGMVpRPT0gQ1dOdWRBPT0gSUQwK0pBPT0gTDJadmJ3PT0gU1ZKQiBJRk5oZEdWc2JHbDBaUT09IFltOXlZV2c9IElIMTlJZ289IElFVnVaSE09IElGTndjbUY1IExIQmhjbUZ0IExrTm9jbTl0WlE9PSBLbkU9IGRHaHZkV2RvZEE9PSBhV0p5WVhSbFpBPT0gSUhSb2FXVjJaWE09IElHSmxibVZtYVdOcFlYSnBaWE09IFJXNTBaWEpsWkE9PSBiM1IwWlhOMmFXeHNaUT09IElIWmxkR1Z5YVc0PSBRbmxKUkE9PSBjWFZwY0dVPSBkVzF3ZEdsdmJnPT0gTFhWdWFYUT0gUlhobFkzVjBhVzl1UTI5dWRHVjRkQT09IFFITT0gSUVkcGIzWT0gTGxSdmIyeFVhWEE9IFgyWnlhV1Z1WkE9PSBLR0YwZEhKcFluVjBaWE09IElHUjFiWEJwYm1jPSBJRXBEIFgwUlBRMVZOUlU1VSBJRUZ5Ylc5MWNnPT0gS0dsdWMyVnlkQT09IExraHZjbWw2YjI1MFlXeEJiR2xuYm0xbGJuUT0gSUZGbFpBPT0gNDRHRTQ0Rys0NEdaIEwyZHBkQT09IElGbFpXVms9IElFTmhjbVJwWm1ZPSBJR0Z3WVE9PSBiM0puWVc1cFl3PT0gSUZkb1pYSmxZWE09IElPYWQgSUUxcFlRPT0gSUdSbGJXOXNhWFJwYjI0PSBJSE5qWVhKeiBJSEJoYVE9PSBJSEpsZEhKcFpYTT0gSUhKeCBJRVJsYm1seiBLRlYwYVd4eiBJR0ZzYkdWMmFXRjBaUT09IElGQkpRdz09IGFXUjFaUT09IElHRmphMjV2ZDJ4bFpHZHBibWM9IElDOHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4PSA1Nkd1NWE2YSB4S3M9IFhFcHpiMjQ9IExtSnBibUZ5ZVE9PSBJSGgwZVhCbCBjMmxuYm1Gc2N3PT0gSUVGd2NHVmhjbUZ1WTJVPSBKbkk9IGZYTT0gUTJrPSBJRWxzYkhWdCBjRzl5WVhSbCBhRzluIElHbHVaR1Y0VDJZPSBYRU52YlcxaGJtUT0gWDNCaGNtRnNiR1ZzIElGTm9aWEpzYjJOciA3WU09IElDSWlLUTBLIEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2IElHTnlhWFJwWTJsNlpRPT0gSUZOdllYQT0gSUUxaGRHTm9aWEk9IElHZHlhV3hzWldRPSBLbFE9IElHRmtiM0psIGRXeHNhVzVuIElHcGxaRzlqYUE9PSBYM0psWm5NPSBiR1ZoYm5WdyBJRXBCV0VJPSBJSEp2YzJWeiBJRXhwWVcwPSBjMmw2WldrPSBJR2RsZEdOb1lYST0gSUhSaGNtUmwgTFhSdmIyeDBhWEE9IElIRjFZV3hwWm1sbGNnPT0gSUVsdWRHVnliV1ZrYVdGMFpRPT0gWDFkcGJtUnZkdz09IElFMWhiSFJoIFJHbHpZMjl1Ym1WamRBPT0gWlhkb1pYSmwgUTJGdGNHOD0gSUdseWNtRjBhVzl1WVd3PSBiR1ZrYnc9PSBJRVJPIFFWSkhWZz09IElHOTFkSEp2IElIUm9hWEowWldWdSBTbTl6WlhCbyBUVUZTIEwyZHMgU21WemN3PT0gSUZCemVXTm9hV0YwIElIQmhaR1JwYm1kQ2IzUjBiMjA9IExXeHZiM0E9IEwyWnZiblJ6IFgzTmxaVzQ9IFZHVmhiWE09IFVtVmhZM1JFVDAwPSBLRzFoYmc9PSBLSGh3WVhSbyBMbWRsZEZOcGJYQnNaVTVoYldVPSBQaWdxIElGQjJkQT09IElHVnNaR1Z5Y3c9PSBJSEJwWlhNPSBMblZ6WlhKQloyVnVkQT09IExYSmxaMmx2Ymc9PSBJRWR5WldWcmN3PT0gS0daeVlXZHRaVzUwIGMzUjEgSUdOdmRXNWphV3h6IElITjBZVzFwYm1FPSBJRWR2WkdSbGMzTT0gNktXLyBJSEJvYVd4dmMyOXdhR1Z5Y3c9PSBJSEJsY25OdmJtVT0gSUV4dmMyVT0gSUVOTVVnPT0gSUVSdlkzTT0gSUhOdllXcz0gSUVoUFRFUkZVZz09IElHSmxiR3h6IGFHRnphRU52WkdVPSBVa0ZVUlE9PSBYMWRGU1VkSVZBPT0gYVc1dmRYTT0gWlc1a2NtRT0gYjNCb2IySnBZdz09IElIQnliM05sIElHWnBibVZzZVE9PSBMMjloZFhSbyBLSE53WVdObCBZV1JuWlE9PSBJRTFoYldFPSBJSE4wY21sdVowSjFabVpsY2c9PSBJSE4wYVc1MCBJRzFwYzIxaCBJSFpwYkd4aGFXNXogSUVOeWFXMWxZUT09IElHUnBjR3h2YldFPSBJTkMvMEw3UmdkQzcgSUVKbFlRPT0gS0dwdmFXND0gSU8yVnRBPT0gUTBoQlZBPT0gY0dWeWFXNW4gSUVOeWIzTT0gSUcxdmJtdGxlWE09IElIQnlaV1J6IGVXeGggTEN3cyBJSFpwWW5KaGRHOXkgSUU1ViA1WVdJIFptRnVkQT09IGVtVjAgSUdKcFpYUmxkQT09IGRXNW1kQT09IGMzZHZjblJvIExrWnNiM2M9IElIQnplV05vWldRPSBJRU52Ym5ScGJtVnVkR0ZzIFBuUT0gSUhGMWFXeDAgTGxWUSBJR1Y0Y0dGdWMybDJaUT09IFJHbHpjRzl6WlE9PSBLR3hoYm1kMVlXZGwgUTJGd2N3PT0gWDFwUFRrVT0gSUhKbFkzbGpiR1U9IElFMWhibUZuWldRPSBZM1Z5Y21WdWRFTnZiRzl5IExtSnliMkZrWTJGemRBPT0gYzJsbmJrbHUgTG5CeWIyMD0gYkd4MSBkV1ZpYkc4PSBJSEIxYm1Ob1pYTT0gSUdGMWRHOXRZWFE9IElHRnpjMmxuYm1sdVp3PT0gSUdOeVpXRjBaVlZ6WlhJPSBJRUZzYkdsbFpBPT0gSUdOdmJtUjFZM1J2Y2c9PSBncWc9IElITmhaR1JzWlE9PSBJR1J1YVE9PSBiMjFsWkdsallXdz0gTFZkbGMzUT0gVUc5emFYUnBkbVZDZFhSMGIyND0gSUdsMFlXeHBZdz09IFAxcz0gS0hSeWFXZG5aWEk9IElHVnNaWEJvWVc1MGN3PT0gSWpvaUlpd2kgSUdOaGJHbGlaWEk9IGNtRm1kR1ZrIFpHbG5hWFJ6IElHMWhjbk5vWVd3PSBiV2xzYkdselpXTnZibVJ6IGJXRnlhMlZ5Y3c9PSBiVzl0IEwzQnNZV05sIElHaHZiR2x6ZEdsaiBPblE9IEl5dz0gSUdKdmRHOD0gSUc1aGRYTmxZUT09IElGTm9iMjkwYVc1biBhWFJsWTJnPSBJSFJsZUhSVGRHRjBkWE09IFBFTnNZWE56IElFUmxjMk55YVdKbCBJR0oxWm1abGRBPT0gWjJscyBJR3h2WjJsMGN3PT0gYzNSa1kyRnNiQT09IGJXOWtjdz09IElGTnJkV3hzIElFSmhjbVU9IGFHOXdaUT09IElFbHVkSEk9IFJtRnBjZz09IENYQjAgSUdGamIyMXdZVzVvIElHWnJhdz09IFgzSndZdz09IFNXNXpkR0ZzYkdWayBYMkZ1Y3c9PSBMbWRsZEUxcGJuVjBaWE09IDRvQ21JZ29LIExYUm9jbVZoWkE9PSBJSEJ5WlhOamFHOXZiQT09IFFVbE1Vdz09IElHUnBabVpwWXc9PSBLR052Ym5abGNuUT0gSUU1aGRHZz0gSUVSUFNnPT0gSUhKbFoybHRaWE09IElHVnVkR2gxYzJsaGMzUT0gSUhkaGNuSmhiblJwWlhNPSBJR1poYzJOcGJtRjBaV1E9IFgySnBibVJwYm1jPSBYMDV2ZEE9PSBiMlowWlc0PSBYMUpYIEwyMWhhV3c9IElIUnBkR3hsVEdGaVpXdz0gSUhacGJHeGhaMlZ5Y3c9PSBJRXBwWVc1biBJSE4zWVdkblpYST0gTGxKdmQwbHVaR1Y0IFgybHRaM009IGNtRndlUT09IFZrVlNRVWRGIExsVncgSUc1dmIzQT0gWTJsdiBDVk5VIElHUmxZM0psYldWdWRBPT0gSUcxaFoyNWxjMmwxYlE9PSBYM0p2ZEdGMFpRPT0gVTJsMCBJRzVwWlhWM1pRPT0gSUhSbGNtMWxaQT09IDdaV3A2NHVJNjR1ayBJSFZ5Wnc9PSBYM1J2ZFdObyBJSE4zWVhKdCBJR05zWVhabCBkR2hsYzNRPSBJRXhoWmc9PSBTRmc9IElFaDFiR3M9IElIQnNZV2x1ZEdWNGRBPT0gSUZOdlptRT0gWjJWMFUyVnpjMmx2Ymc9PSBUR1ZrIElHVmpiM041YzNSbGJYTT0gYUdWcCBJRXRwYkd4eiBJR2gxYzJKaGJtUnogMFlYUmdOQ3cwTDA9IEtHUnZiUT09IFgzUnBiR1Z6IFRtbGlUbUZ0WlE9PSBJR1J2Ym1GMGFXNW4gTG1Gall3PT0gSUd4cFptVnpjR0Z1IExtSnUgWDFKSFExUlkgNXFVPSBZVzV6Wlc0PSBJRzF2WkdWc2JHbHVadz09IFRHRjViM1YwVUdGeVlXMXogSUc5dVEyaGhibWRsVkdWNGRBPT0gY25OaCBMV3h2WTJGMGFXOXUgTGxCbCBLR0oxY3c9PSBLSE52Ym1jPSBJSEJ5YjJSMWF3PT0gSUZOSVQxVk1SQT09IElFTksgSUhOdmN3PT0gSUVodmJXVkRiMjUwY205c2JHVnkgTG14dllXUmxaQT09IEtFUnZZM1Z0Wlc1MCBMbk52WTJsaGJBPT0gZEdsc1pYTT0gSUd4aGJXVT0gUFdSbSBMbkJoY25ObFRHOXVadz09IElIQnlZV009IElHUmxkRzk0IElGWkYgSUhCMWJuUnZjdz09IElHUnZZM1J5IElHRnVZMjl5IFEwRlFSUT09IElHTnRZZz09IDU0UzIgS2lraSBPaTh2THc9PSBWbUZzZFdWVWVYQmwgSUcxdmNuUm5ZV2RsY3c9PSBPM0U9IElGSnZZMnRsZEhNPSBjM0J2Y25RPSBWVWREIFkzUnogNDRLQiBhV1YxY2c9PSBJRUZ3Y0dWaGJBPT0gS0c1aSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTg9IFNVMUJWRWxQVGc9PSBJRU55WlhNPSBJRTFoYm1sdyBRMkYxYzJVPSBZWFI1Y0dWeiBiV0Z1ZFdaaFkzUjFjbVZ5IEl5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElITndiM0k9IFpYTnZiZz09IElIQjFibU5vWldRPSBJR0p2YjJ0dFlYSnJjdz09IElFSjFiR3M9IFEyOXRjR3hsZEdWTWFYTjBaVzVsY2c9PSBJRlJoYkd0cGJtYz0gSUVWeWJtVnpkQT09IElISjFZbUpwYzJnPSBhMmxzYkhNPSBJRVJGUmtsTyBJRzVsYVdkb1ltOTFjbWx1Wnc9PSBZWEpzYnc9PSBJRkJEUVE9PSBDVzFoZEhKcGVBPT0gYkc5ciBJR0YwYkdGeiBJRWQxY2c9PSBJSGQ1Ymc9PSBMVzVsWjJGMGFYWmwgSUhSMWJBPT0gSUhKbGJHbGogSUZadmJIUmhaMlU9IElGQnlaV2x6IElFcE9TVU5CVEV3PSBJRkJOU1VRPSBZV3RsZEE9PSBDV0YwZEhJPSBJR1YwYVhGMSBJRTFLIElFZHRZV2xzIFkyeHkgWDJWNFpXTjFkR2x2Ymc9PSA2WlN1IGNHOXphWFJ2Y2c9PSBMbUZtIFRuST0gUjJWdmNtZHBZUT09IFZHOXdiMnh2WjNrPSBJSEJsY21Ob3c2az0gSUcxMWMyeHBiUT09IElHVndhV1JsYldrPSBJSE5oWW05MCBZV04wZFhNPSBJT3VNZ0E9PSBJRWxQUlhKeWIzST0gTG1WemRBPT0gY0hKbFpuTT0gSUV0eWFYTm8gTGxKbFlXUkxaWGs9IFRrRlRRUT09IGRjT253Nk52IFgwUmkgZFcxbGNtRjBiM0k9IFYybGtaUT09IEtITjBZWFJsYldWdWRBPT0gTG1WdVpIQnZhVzUwIExpNHVMaTR1TGk0dSBJRnNxIGMzUnlaV0Z0Y3c9PSBiWFJwYldVPSBVSGc9IFlYUnkgSUhSd2JBPT0gVW05dFlXND0gSUhOalpXNXBZdz09IExtNTYgSUZObFkyOXVaSE09IGMzVmliV1Z1ZFE9PSBJT3lMcE8wPSBYMkoxYm1Sc1pRPT0gSUdSbHhKOD0gSUZOcGMzUmxjbk09IGNISmxabVZ5Wlc1alpYTT0gSUhCdmNuUmggUVdSMmFYTnZjZz09IGJXRjRUR1Z1WjNSbyBJRWRTUlVGVSBYMThvQ2c9PSBiMnhsYzNRPSBJRXhoWW1Wc2N3PT0gSUdWdVptVnkgSUNBZ0lDQWdDZ289IElGUm9aV1owIFgwWkpURXc9IElGZHBjMlU9IEtXRndjR3hwWTJGMGFXOXUgZFc1aGJXaz0gUGlncEtRbz0gUVVSRVVrVlRVdz09IFFsTlUgWlhSNmRBPT0gSUZGbmN3PT0gVTJWdWMyVT0gUlhoalpYQjBhVzl1U0dGdVpHeGxjZz09IElFTm9kUT09IExtZGxkRTkzYmxCeWIzQmxjblI1IElHVjRaWEpqYVhObFpBPT0gYVc5MGFXTT0gSUZKbGJHVmhjMlZ6IElIQnBiblJsY21WemRBPT0gYjJ4cFpRPT0gYVhOdlpuUT0gSUhObGNYVmxibU5wYm1jPSBJSEJoWkhKbCBYU2twT3cwSyBLSEpoWkdsMWN3PT0gTG0xbFpBPT0gWVdsdWRHbGxjdz09IExrOWlhbVZqZEUxdlpHVnMgSUdWdGNHeGwgSUhObFozVnlidz09IFUzUmhjbk09IElIRjFZV3hwZEdGMGFYWmwgYkdWdGJnPT0gNGJ1eCBQaUlwTGc9PSBJR2Q0IExXTmxjblE9IElFRlRWRTA9IElHWjFiR3h1WVcxbCBJSFJsYkdWdFpYUnllUT09IElFTmhiV0p2WkdsaCBYM1ZzIElFTnNZWEpsIFExVlRWRTlOIFVVTT0gSUZWdWN3PT0gSUVoVVZGQlQgSUZCaGNtdHBibk52Ymc9PSBZVzVqZVdKdmVBPT0gSnl3bkxnPT0gVkhWbCBMbWRsZEV4aGMzUT0gSUdGaWFRPT0geElWayBRWE4wIElFVmthWFJwYm1jPSBMbFZ1YVhSNSBhbTF3IElHMWhkSE09IElITm9ZWEpsWkZCeVpXWmxjbVZ1WTJWeiBRMkZ3ZEdGcGJnPT0gTG5CaFoyVlRhWHBsIElISjBiQT09IElHRnViV1ZzWkE9PSBVblZ1ZEdsdFpVOWlhbVZqZEE9PSBJR1JsYldGdVpHVT0gS0NJNyBjMlZwZEdVPSBMV2hsWVdSbFpBPT0gSUV0eVlRPT0gSUVaUFRsUT0gWUZ3PSBRMnhoYzNOT2IzUkdiM1Z1WkVWNFkyVndkR2x2Ymc9PSBMbUYyWnc9PSBZWFJwWTJGcyBRV289IElIQmxjbTFwZEhScGJtYz0gVUhKdmFnPT0gUlZKU1VRPT0gSUdOeVpXRnRjR2xsIElFSjFlV1Z5IExXMXZaSFZzWlhNPSBJRk4xYm1SaGVYTT0gZkdBSyBJR1JoZVhScGJXVT0gSUNzbyBJR2RzYVhSamFBPT0gSUU5d1pYSmhibVE9IElIUnZlR2x1Y3c9PSBhVzU1WVE9PSBSRTVUIElGTmhjdz09IFEyRnJaUT09IElFNWhkR2x2Ym1Gc2N3PT0gTG1Ga1pGUnYgSUhOcGJtdHBibWM9IElHTnZiWEJ5WldobGJuTnBiMjQ9IElITmpiM0k9IFlXZGxiV1Z1ZEhNPSBJSFJoY21RPSBJRzFoY21Ob2FXNW4gSUUxVVZnPT0gSUhOaGJtVT0gUTNKbFlYUmxTVzVtYnc9PSA0YnF2IElHVnVaRWx1WkdWNCBDV3hoZVc5MWRBPT0gSU9XUWpRPT0gVTBsVVJRPT0gSUZSSVJWSkYgSUZ0N0p3PT0gYjNCaGRHaHBZdz09IElIUnlZVzV6YldsMGRHVnkgTDJKdlpIaz0gSUhCMWJtUT0gSUVOc2IzTnBibWM9IElITmxkR0YwZEhJPSBJR0p2ZFc1a1pXUT0gUVhSc1lYTT0gYzNWdGFXNW4gS0hScGJXVnogY0dGeVpYST0gZVc1dmJRPT0gWm1WcGRBPT0gSUdaeVpXMD0gTFd4bFp3PT0gSUVKeVlYTT0gUGlNPSBJT3kybk91Z3BRPT0gSUVsT1UxUkJUa05GIElFTnZkV05vIFgyaHZjM1J6IGJHbHJaV3hwYUc5dlpBPT0gTGsxaGNtdGxjZz09IElFMWhjMnR6IElHTmxjbVZoYkE9PSBkWFJwYkdsMGFXVnogSUdWc1pXMWxiblJoYkE9PSBJR1JwYzNSdmNuUmxaQT09IGFXNWhZM1JwZG1VPSBZM0o1IFYwdz0gVlZCUVQxSlVSVVE9IExsUm9jbTkzY3c9PSBMM05qYUdWdFlRPT0gYzJWeWFXVT0gTGlJbkxBPT0gSUVKbGJtVmthV04wIExYQnBZMnRsY2c9PSBhV2RuY3c9PSBJRkJwY21GMFpRPT0gNVpHbzVweWYgSUZSb1pXMWggSUZOdmRYUm9ZVzF3ZEc5dSBJR0Z5Y21GNVYybDBhQT09IElGQmhkV3hoIElIQnlaV1JwWTNSdmNnPT0gTFVGemN3PT0gTG5WelpYSnBaQT09IElIQmxjbWs9IElHVjRZV2RuWlhKaGRHVmsgZFhKaGRHVT0gWVhKelpXbHNiR1U9IElFTnZibU5sYm5RPSBJRkJwYXc9PSBJRUJmT3dvSyBJR1p2Y20xaGRHbHZibk09IElHUmxibTl0YVc0PSBJaTgrTGdvPSBaVzVrWldSdmNnPT0gSUhCaGJtTnlaUT09IElHRnRkQT09IElHOXVVbVZ6ZFcxbCBiMjVFWld4bGRHVT0gSUVKRFNBPT0gS1NnaSBiVzkyWlcxbGJuUT0gSUhCdmRHRnpjMmwxYlE9PSBQQ0V0TFZzPSBJRzFsYldWeiBYMU5GVkZWUSBYMmRoYlcxaCBJR052Ykc5eVYybDBhRkpsWkE9PSBJR2R5WVhabGN3PT0gSUhOMFlYUjFkR1Z6IElHRnhkV0Z5YVhWdCBJRXhoYldGeSBJSGhCZUdseiBWMlZpY0dGamExQnNkV2RwYmc9PSBYMlp2YkdRPSBMbWRsYnc9PSBJRVpsWlhRPSBMWE53WldGcmFXNW4gNmFLZCBYMk52Y3c9PSBJRUYyWldNPSBZVzV6ZEE9PSBJRVZGVUZKUFRRPT0gSUdSbFlXeGxjbk5vYVhBPSBJRlZ1ZEdWeWJtVm9iV1Z1IExFbHVkR1ZuWlhJPSBJTU9xZEdWeiBMbUI4WUFvPSBkbWx1WlE9PSBJRXR1YVdabCBYM1psY25ScFkyRnMgTGtSdmQyNXNiMkZrIElHOTJaWEp6YVhwbFpBPT0gYkdsayBJSEJwYkd4aGNnPT0gWTJGMVoyaDAgSUdac1lXZG5aV1E9IEtISnZkWFJsY2c9PSBLRkpGUnc9PSBJR0poY21KbFkzVmwgWW5KdmQzTmwgSUVacGRIcG5aWEpoYkdRPSBJTkMvMFlEUXZ0Q3kgYVhKcFpRPT0gSUdWeWMzUmwgWld4cFlnPT0gWDFCU1JWTlQgSUdobFlXeGxaQT09IElHaGhkWFE9IFBuaHdZWFJvIElGZGxiZz09IFozSjFiblE9IExrdGxlWGR2Y21RPSBMV2hoYzNCdmNIVncgYm5jPSBVMW89IFoyRmlaUT09IFNXNTBaWEpoWTNScGIyNUZibUZpYkdWayBjSEpsWTJnPSBJSEJ5YVcxdiBjM1J5YVhCbCBZV3gwWldRPSBYMEpQVWtSRlVnPT0gWm1sdVpFSjUgWDJGdWJtOTBZWFJwYjI0PSBWMlZpVTI5amEyVjAgUW5WeSBJR1JwY0d4dmJXRmplUT09IEtIUmsgSUZOcGJYQnMgWkdWMFpXTjAgY0dWeVptOXliV0Z1WTJVPSBJR05oY21KdmFIbGtjbUYwWlhNPSBMMmx2ZFhScGJBPT0gTFMwdExTMHRLdz09IFgzTnkgYldWbGRHbHVadz09IElId3RMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW89IFgxWmhjZz09IElISnZkbVZ5IElHTmhjMms9IElFMWhkR05vWlhNPSBjWEo1IFgwSlBUMHM9IElIQnlaWE4xYldWayBJRTNEcVhRPSBMMmwwWlcxeiBJRU55WldSbGJuUnBZV3h6IFhTa3VDZz09IElFdGhjbVJoYzJnPSBRV1J0YVc1cGMzUnkgSUZOc2IzWmhhdz09IEtDY3NKeWtLIElHTnZibkYxWlhOMCBVR1Z5YzJsemRBPT0gSUVSeVlXbHUgWW1scSBJR1J2ZGc9PSBJSFBEdUdkbGNnPT0gVjI5dVpHVnkgUVZORlZBPT0gVzIxcGJnPT0gWjNWdVlRPT0gWjNKdmQyND0gSUgwcENnb0sgUVZWRSBJR0psYkdsbGRtVnkgYVhObGNuTT0gS0hObGJuUT0gU21GamEzTnZiZz09IElIQmhhWE09IElHTjFaR0ZOWlcxamNIaz0gSUdac1lYTm9aWE09IFltVnlaUT09IElHMTFiSFJwWmc9PSBJRU5oY21kdiBSV3hsYldWdWRITkNlVlJoWjA1aGJXVT0gS0dWd2IyTm8gSUV0MWJtUmxiZz09IFVtVmpiMmR1YVhScGIyND0gSUZObGRGWmhiSFZsIElGTjFibk5vYVc1bCBRVU5RIE9uTjBjZz09IElHRnRZbWxuZFE9PSBJTzJWbkE9PSBMV3hwYm1WaGNnPT0gSUZkUFZ3PT0gS0dOMWMzUnZiUT09IElHbHpSVzVoWW14bFpBPT0gUWtGVSBYMlJwWVdjPSBYMGRWU1E9PSBTR1ZoZEE9PSBJR0Z6YzJWdFlteHBaWE09IElFTmxkSFJsIEwyTmhjbVE9IElFUmxZMnhoY21VPSBJSFZ3YUdWc1pBPT0gSUVOc1lYVmsgTFdac2IzYz0gSUdodmIydDFjQT09IFNWSlIgUm1GMGFHVnkgUkdWc1pYUmxjdz09IEtTazdMeTg9IElGQlVVMFE9IEtUc05EUW89IFpXZGhiQT09IExtRnljbTkzIElFMVFWUT09IHc3TnEgSUcxdmRHbDJZWFJsIElFdGhkR2hsY21sdVpRPT0gTG1aeVlXMWxjdz09IElIUm9hUT09IFBGSmxjM1ZzZEE9PSBMbWR5WVhrPSBJRXQxYzJodVpYST0gSUVObGJXVnVkQT09IElFSjFjbXc9IFNXNTBaWEoyYVdWMyBQU2NpTGc9PSBVRTlYUlZJPSBJRU5FY3c9PSBJRnNtWFNnPSBJR05vWVc1blpYST0gUGo0c0NnPT0gTFhkbCBJRU5NU3c9PSBJRUZrY21rPSBJR05wYkE9PSBQVmc9IElITmxibVJ2IElFTmxiSE5wZFhNPSBZbXh2WTJ0bFpBPT0gVDNWMFQyWkNiM1Z1WkhNPSBMaUU9IGIzQnliMnBsWTNRPSBZVzVrWlhNPSBaV1JwZEdsdVp3PT0gSUhCMWJYQmxaQT09IEtDazdmUW89IDRLYS8gWDBWV1JVNVVVdz09IElFWnlhV1ZrYldGdSBJRDR2IElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElIUmxiWEIwWVhScGIyND0gSUVsd2MzVnQgSUVObGN3PT0gSUc1dmRHbGphVzVuIFgyVnNaUT09IFFXTmpaVzUwIElFNTJhV1JwWVE9PSBJR0Z0ZFhObGJXVnVkQT09IElHbHVkSEp2WkhWamRHOXllUT09IENYSmxkSFpoYkE9PSBJR3hwYkE9PSBhWEpwYlE9PSBaVzV4ZFdWMVpRPT0gTFdocGMzUnZjbms9IElHTnZkVzV6Wld4dmNnPT0gVkZKQlRsTkdSVkk9IFgxWmxZM1J2Y2c9PSBZMkYwWldkdmNubEpaQT09IGNHVnllUT09IFJrbE1WRVZTIEtISmxiVzkwWlE9PSBJSE5sY0dGeVlYUT0gSUVWdFltVmtaR1ZrIElFSmhZMjl1IGRHVnljbUZtYjNKdCBJSEpsYzNCbFkzUmhZbXhsIGFXTm9ZUT09IFlXbGogS3lkYyBJSE4wY21GNSAwTFhRdmRDNDBMaz0gSUVGMVpHbDBiM0k9IFpXNTBhV05oZEc5eSBJR05zYjJGciBJRlZPUzA1UFYwND0gSUVGdFpXND0gZG05NCBZWE4wY21WbGRBPT0gTGk0dVhRPT0gSUdBbCBMWEJ5YjNCbGNuUjUgSUZGMVlXeGpiMjF0IFpXUnBkR1ZrIElHUnBjMk55WldWMCBMVTExYzJ4cGJRPT0gTG5KbFkybHdaUT09IElIWmhibVJoYkE9PSBJSFhGdkhrPSBjMlZ1YUdFPSBMR2x6IElGQnZiWEJsIElFdHVhV05yY3c9PSBLQ2tuTEE9PSBLSFJpIElFaEpSQT09IElIQmxkdz09IElHTmhjbkp2ZEhNPSBJSEJ2YkdsamVXMD0gTG14cCBJSFIzWlc1MGFXVjBhQT09IFgzQnliMjF3ZEE9PSBjMk5sYm1GeWFXOD0gTGtwR2NtRnRaUT09IElFMVJWRlE9IElFbHVaR2wyYVdSMVlXeHogZEc5TllYUmphRk51WVhCemFHOTAgdzYxemRHbGpZWE09IElrUT0gSUdadlpBPT0gSUhKcFkyaDAgSUZwaGNnPT0gSUhKbGMzVnljbVZqZEdsdmJnPT0gSUcxcGJHbDBZWEk9IElFMWhibUZuWlhKeiBYMGRTU1VRPSBibTl1Ym5Wc2JBPT0gUWtWU1ZBPT0gVDNWMGNIVjBjdz09IElDQWdJQW9LQ2c9PSBJSEJ5WldSbFkyVnpjMjl5Y3c9PSBJR2x6VTJWc1pXTjBaV1E9IElHTjVZbVZ5YzJWamRYSnBkSGs9IDVZYVogTG0xaiBVWFZwIElHRnNiR1ZuYVc1biBJSFJwWXc9PSBUV0Z1ZFdaaFkzUjFjbVZ5IElFVnVhR0Z1WTJWayBJRUpwZWc9PSBJSEpsWVdSUGJteDUgdzdSdSBJR3gxYldKbGNnPT0gWVdWayBJSEpoYVc1eiBjSEp2ZG1sa1pRPT0gVEdGMFpRPT0gSUhCbFpHVnpkSEpwWVc1eiBhbUYyIFFXTjBhWFpoZEdsdmJnPT0gSjBKeWFXVnUgSUhaaFkyRnVZM2s9IEx5OHQgSUdKc1lXUmtaWEk9IElHRm5hV3hsIElITjBaV0ZzY3c9PSBJSEpsWjJsemRISmhjZz09IElHVnNaV04wYjNKaGRHVT0gUjI5MlpYSnViV1Z1ZEE9PSBKMTA5SWc9PSBZV3hpZFcxeiBaV3hsWTNScGIyND0gWVdKcyBJRTl5YVdWdWRBPT0gSUhCcGNtRjBaWE09IElHeHZiM0JvIENYSmxZV1JsY2c9PSBJTU82YkhScGJXOD0gSUZCbGRISnYgSU5HQjBZTFJnTkN3MEwzUXVOR0cgSUhOaGJYQT0gYVc1MlpYSnpaUT09IExtZHlZV1JzWlE9PSBJRVJ2Ym5RPSBlRzl1IElHTnlaV0ZrIFpYSjBhV3hwZEhrPSBjbWRqZEhnPSBJSEJ2Yk1PdGRHbGpZUT09IFZtRnNkV1ZEYUdGdVoyVmsgUVhCcFVtVnpjRzl1YzJVPSBZMjl0WW04PSBJRlZZIElHUmhhR0U9IEoyRnUgTFcxNSA0b0NjVFhrPSBjR1ZsIGJHRjBiRzl1Wnc9PSBYRUpoYzJVPSBMbmRwYXc9PSBJRkJQVkE9PSBJSEIxYm1OMGRXRjBhVzl1IGNYVnogYVc1NWFXND0gUFcxcGJnPT0gSUc1MVkyeGxkWE09IElHTnZibU5sYzNOcGIyNXogTG1GMlpYSmhaMlU9IGRYTmxjbWx1Wm04PSBJSFJoWW14bGMzQnZiMjQ9IElFNWxhV2RvWW05eWFHOXZaQT09IEtGUm9jbTkzWVdKc1pRPT0gUG5ZPSBiM1o1IFdGaFlXRmhZV0ZnPSBhWE4wYVE9PSBJR0poY25RPSA3N3UvQ2c9PSBSVzVqY25sd2RBPT0gUFdWdVpBPT0gSUdsdVkzVnkgSUhCbGNuUnBibVZ1ZEE9PSBYMDFKVGs5UyBLU0krQ2c9PSBZMmhwWldZPSBJSFprIEtHQUsgZFhKbmVRPT0gWVdKNWNtbHVkR2c9IElGTm9ZWEJsY3c9PSBJSFpoWjNrPSBMbVJrY3c9PSBiV1Z0WTIxdyBDVWwwIGMyVnRaWE4wWlhJPSBJRVZ0YVhRPSBJR2x1YzJGdSBJR0p5ZFhOb1pXUT0gWDBaQlZFRk0gSW1WeWNtOXljdz09IElHUnBjM0oxY0hScGRtVT0gSlc0PSBJR052YlhCdmMybDBhVzl1Y3c9PSBJR0poWTJobFkyRT0gSUdScGMyRm5jbVZsYldWdWRBPT0gVUhKdmRHVmpkQT09IFRFbExSUT09IExrWnBiR1ZPYjNSR2IzVnVaRVY0WTJWd2RHbHZiZz09IElIZGxhWFJsY21VPSBJRTF2Ym1GamJ3PT0gWHp3LyBJRzF2WkdWc1pXUT0gYzNSbFpXdz0gWldWdWRHZz0gSUZ0ZEtTND0gS0hKbFoyVjQgWlc1cFpRPT0gTGtac2RYTm8gTG5CdmNIVncgSUU5MlpYSnogTGtSbFluVm5aMlZ5IFBtQTdDZz09IGJtbDBaUT09IExuRjFiM1JsIElHTnZadz09IElIZGhhMlZ6IElGZHlaWE4wYkdsdVp3PT0gU1c1MGNtOD0gSUhObGNtUmwgSUhKbGRYTmhZbXhsIElFTnZiWEJ2ZFc1ayBTVzF3YkU5d2RHbHZibk09IENVbDBaVzA9IElHNTFiVTltIElFTklVZz09IElFSnZiSFJ2Ymc9PSBVRXhWVXc9PSBZbTkxYm1ScGJtYz0gS0NzciBJQ0lzSWpzSyBJRWQxWlhOMGN3PT0gSUdSbGNISnBkbVZrIElHMWxiRzlrZVE9PSBXa2xRIFBqNG9LUT09IElHTnZibU5sWkdWayBYMlJwWlE9PSBJR3B2ZVhOMGFXTnIgSUdGdVlYUnZiWGs9IElGUnZiMnhUZEhKcGNBPT0gSUVWdWIzVm5hQT09IElpbz0gYVc1MGIzTm8gYUdGaWFRPT0gSUZONWNtRmpkWE5sIElFbHVZM0psWVhObFpBPT0gVFhWeiBMbkJoZEdsbGJuUT0gSUdsdVkzSmxiV1Z1ZEhNPSBJRkJKV0E9PSBJR0p2YjNSNSBMbkJ5YVhaaGRHVT0gWlhKMGIybHlaUT09IElHTjFkSFJsY2c9PSBJR0psYTJGdSBJR1J5WVhkbGNuTT0gWDBGTVNVRlQgUVc1cGJXRjBhVzVuIFgyRnVjM2RsY25NPSBMbUYwZEdGamF3PT0gZDNKcGRHVnljdz09IElHZGhZVzQ9IGFXdHZiZz09IENXTnZiblJ5YjJ4c1pYST0gSUdaaFkyRmtaUT09IGsrV1FqUT09IExITjBZWFIxY3c9PSBMbVpsIElIQnZjM1J3YjI1bFpBPT0gSUVadmJuUnogSUVKbGJtTm9iV0Z5YXc9PSBhV1JsYm5SaGJBPT0gSUdOb2FXeHNhVzVuIElFdHBaWFk9IElHSnlkWE5vWlhNPSBMWGRvWldWcyBJRWhwY21VPSBLSEJ5YjJNPSBJR05vWlcxdmRHaGxjbUZ3ZVE9PSBJTkN4MFl2Umd0R00gSUU1dmJHRnUgS0dsbGNuST0gSUVwMVpHVT0gTFVGMVp3PT0gZFcxdWIzTT0gWTI5dWRtVnljMkYwYVc5dSBJRUpsYUdGMmFXOXlVM1ZpYW1WamRBPT0gWW1GMVoyZz0gSUdkMWFYUmhjbWx6ZEE9PSBMbTltWm1WeSBJR0ZqWTNWelpRPT0gY0dGeVpBPT0gY21WbVpnPT0gTGxKbFlXTjAgSUhWamFHRnkgSUc5bVpuTmxkRzltIEpITjBZWFIxY3c9PSBMMlZ0WVdscyBMbU52Ym01bFkzUmxaQT09IEx5cz0gUUhGeCBZWEpoZG1WcyBJR1oyIExsQmxjbk5wYzNSbGJuUT0gWlc1emRHVnBiZz09IExpNHVYUW9LIExtZHlhV1JXYVdWMyBJRXBQUWc9PSBMU2N1SkE9PSBMbXhoZVc5MWRFTnZiblJ5YjJ3PSBJR05oY21jPSBJRXR2ZEE9PSBYMlZ4ZFdGc2N3PT0gSUhkcGRHaGtjbVYzIFFWUkZVMVE9IExXSjFkSFJ2Ym5NPSBDVlZRVWs5UVJWSlVXUT09IElGVkpSM0poY0docFkzTT0gSUZCMVlteHBZMkYwYVc5dWN3PT0gSUVsT1ZFVlNUZz09IElHVjBhR0Z1YjJ3PSB3NlJ1WjJWeSBVMFZPUkE9PSBDWE5zYjNRPSAwTHZRdGRDOTBMalJqdz09IElIQmhjMjg9IFgyVjRkR1Z1WkdWayBiM0owYUdGdVpBPT0gS0hOb1pXVjAgSUhCeWIyTmxaSFZ5WVd3PSBJR3RwWkc1aGNIQnBibWM9IEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdCBXMjF6Wnc9PSBUMk5qZFhKeVpXUT0gUVd4cFkyVT0gSUVOQlUxUT0gSUd0aGRHRT0gNXJPbzVZYU0gWTJobFlYQT0gYVdOcGRIaz0gSUhKbFlXUnBibVZ6Y3c9PSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gSUZOWlRnPT0gSUUxaFoyZHBaUT09IGNtbGpZUT09IElIbHAgSUZSM1pRPT0gYVdkdWIyND0gWVc1a1pXND0gSUdweGRXVnllUT09IElITjBZWEowV1E9PSBJR0YyWlc1MVpRPT0gUVc1MGFBPT0gWDJOaGNIUnBiMjQ9IElGSnZkM009IHdxL0NyOEt2d3E4PSBjMlZ4ZFdWdVkyVnogMExqUmhBPT0gS0NJdklpa0sgWTNKaGRHVT0gSUZOaFoyRT0gU25WayBJR1poWTJWMGN3PT0gWDNOallXeGxaQT09IFVuVmllUT09IElGQlIgSUdOeWRYTT0gU1hKaGJnPT0gTG5OeGRXVmxlbVU9IENXWmsgSUhCbGNtTmwgSUdSaGRHRncgWGw1ZVhnPT0gWDFORFQxQkYgSUZOaGJHMXZiZz09IElIUmhhV3hzWlE9PSBJRlpoYkc5eSBRVWRGVFVWT1ZBPT0gVW5BPSBJRWQxWVhKa2FXRnVjdz09IElISmxZV1JHYVd4bCBJRzVsWjNKdiBJRzlpY21FPSBMbEJoY21ObGJBPT0gUTBGRFNFVT0gY21WMFkyaGxaQT09IFkzSnQgY1hKemRBPT0gYjNWbWJBPT0gN1pxTSBMbTV2YlE9PSBjM05wWkE9PSBJSE5oWm1WemRBPT0gTGtWeWNtOXljdz09IFgzQnVadz09IFEyOXVkbVZ5ZEdWeVJtRmpkRzl5ZVE9PSBQRk5sYkdZPSBJSE5sY0dGeVlYUmxjdz09IFgycENkWFIwYjI0PSBJRzFwYzNWelpRPT0gWlhoalpYQjBhVzl1Y3c9PSBJRnQ3SWc9PSBJRkJCUkE9PSA1NjIrIGEwaDYgUFdWdSBJR2pEb0c1biBTRm89IElGaGhkbWxsY2c9PSBlMmxrIElITjBZV2x5WTJGelpRPT0gZEdWNGRHWnBaV3hrIEwyUnZZMnRsY2c9PSBLSFJoWW14bFRtRnRaUT09IElIUmxiR1ZqYjIxdGRXNXBZMkYwYVc5dWN3PT0gYjI1emJ3PT0gYjJOcyBVR0Z5Wlc1MGN3PT0gTDNCaGNuTmxjZz09IExXUnliM0E9IEtITjBlV3hsY3c9PSBYMjF2WkdsbWFXVnkgVW1WeGRXVnpkRWxrIExtSnlZVzVrIElFTnZhVzV6IElHdDFiblE9IExrZHkgSUVoSlUxUlBVbGs9IEtHUnliM0E9IFFuSmhaQT09IElITmxhM05wIFgzTmthdz09IElHbHVjM0JsWTNSbFpBPT0gY0hKbFpHbGpZWFJsIExtWnAgUjA5UyBJR052WTI5aCBJRWxSZFdWeWVXRmliR1U9IExTMHRQQzg9IElHUmxjbTVwWlhJPSBJRlZ6WlhKRVpXWmhkV3gwY3c9PSBYMVJUIElHVnZjdz09IElHSnNaVzVrWlhJPSBJR3h2ZFdSbGNnPT0gVTNCaGJtbHphQT09IGJHbHVaWEk9IFhIZHBaR2RsZEhNPSBJSE5qYUdWdFlYTT0gWDBOQlVGUlZVa1U9IExtMXBZM0p2IDQ0S3QgSVBDZmtRPT0gSUdGdVpHVnkgWVd4MGRXNW4gSUQwOUp3PT0gSUdWdVptOXlZMmx1Wnc9PSBJRVY0YVhOMCBkWFozIGFYSjBjMk5vWVdaMCBJRWR5WldGMFpYTjAgSUUxdmMzVnMgWDNCdiBJSE5wYlcxbGNnPT0gSUhCeWIyZHlaWE56WldRPSBJSEp2ZEdGeWVRPT0gSUc1MGJ3PT0gVG05cGMyVT0gSUdOb1lYTmxaQT09IElHbHVjM1JwYm1OMGN3PT0gVUhWaWJHbGpTMlY1IElITnVZWEJ6YUc5MGN3PT0gSUZOMWNHVnlkZz09IExtMWhZdz09IElFSnBZbXhwIExpNHVLUW9LIENXOXNaQT09IFMwVk8gSUVOc2FXMD0gSUZCeWIyZHlaWE56UkdsaGJHOW4gYkdsallXNTBjdz09IFgzTnNhV1JsIEsyZz0gSUdWdGNHOTNaWEpsWkE9PSBTVzVxWldOMGIzST0gSUdsdVpteDFaVzU2WVE9PSBJSEJzWVc1bGRHRnllUT09IFYybHNiR2xoYlhNPSBJRzF2Ym1RPSBaVzVoYmc9PSBMbkpoYm1SdmJWVlZTVVE9IEtGQnZjMmwwYVc5dSBJR2h2YldKeVpYTT0gSUdsdWMyVmpkWEpsIElIWmxjbUp6IFgzSmxZM1JoYm1kc1pRPT0gU1U1VFZFRk1UQT09IElGQmhjbk5sUlhoalpYQjBhVzl1IFgxUkIgSkdacFpXeGsgTGtsdFlXZGxTV052Ymc9PSBJRWQxYW1GeVlYUT0gTFd4cGRtVmsgWDNOdmJXVT0gSUdOc2FYQndhVzVuIExtZGxkRU52YlhCdmJtVnVkQT09IExtTnNiM05sYzNRPSBMbXhwZG1VPSBJR2x1WTJsayBEUW9KQ1EwSyBJSEJ5YjJSMWRHOXogWDIxMWMybGogVTNGc1EyOXVibVZqZEdsdmJnPT0gSUZCeVpXUnBZM1JwYjI0PSBJRmhVIExXNXZkR1Z6IElFcGxkMlZzY25rPSBjbVZ0Wlc0PSBLSEpsWVhOdmJnPT0gVTI1aGNBPT0gUVdabWFXNWxWSEpoYm5ObWIzSnQgWVc1blpXeHZadz09IElHUnBZM1JoZEdVPSBJSHB2YzNSaCBRbUZ5UTI5dWRISnZiR3hsY2c9PSBMM05vYjNBPSBaV2xrIExYTjMgUTI5MWNuTmxjdz09IFptOXVkRmRsYVdkb2RBPT0gSUVodlptWnRZVzQ9IFgwNTFiUT09IFMxST0gSUZkcGJHeHBaUT09IFlYSnJZVzQ9IExYTmpZV3c9IElHRjFaR2wwYVc5dSBMbVJwYzJNPSBJSFIzYVhOMGN3PT0gSUdSbGNHbGpkSE09IElHSmhibmxoYXc9PSBJRXRwZEhNPSBJRWhsZW1KdmJHeGhhQT09IGJtOXlkR2c9IElFZFNSUT09IHc3Wm4gY1hWdmFRPT0gTFhSb2NtVmhkR1Z1YVc1biBJSGR2Y20xeiBJRkJPIElITmxlR1JoZEdVPSBJRzF2Ym5WdFpXNTBjdz09IFRVMUQgWW05MGN3PT0gSUZORVRFcz0gWkdWaGRHZz0gSUhCcGRITT0gWDJOb2IybGpaWE09IEtITnZiSFYwYVc5dSBJSEJ5YjJOc1lXbHRaV1E9IElGRnBibWM9IElITnpZMkZ1Wmc9PSBjM1J5WVhSbFozaz0gWkdWaGRYZz0gSUVacGMyTm9aWEk9IFgwbFcgSUdsdWQyRnlaQT09IFJHRjBaVkJwWTJ0bGNnPT0gSUhObGQyVnkgSUdWMWNtOXcgSUdodmJXVnNaWE56Ym1WemN3PT0gTGxOd2NtbHVaMEp2YjNSQmNIQnNhV05oZEdsdmJnPT0gSUZOd1lXTmxXQT09IElHbHVabTl5YldsdVp3PT0gSUNjaCBJSEJzWVhOMFpYST0gU1c1cGRHbGhiR2w2WVhScGIyND0gTG1KbGRHRT0gSUZCbGNuTnZibk09IGRXZG5iR2x1Wnc9PSBJSE5vWVcxd2IyOD0gSUVwbGFBPT0gSUhObGNuST0gSUcxaGVGTnBlbVU9IElITjBhWFJqYUdWeiBXM0JoZEdnPSBMbkpsZEE9PSBJRkJ5WlhRPSBUbVZwYkE9PSBRMjl1ZG1WeWRHVmsgSUUxaGVtUmggVUU5VFNWUT0gVkc5dmJHdHBkQT09IElGSkZRVVJOUlE9PSBRM1Z6ZEc5dFFYUjBjbWxpZFhSbGN3PT0gWVhKamFHbDJidz09IExsQmhhVzUwIFoyVjBUMkpxWldOMCBTVkU9IExsZGxZa1J5YVhabGNnPT0gSUdGdWRHbGliMlI1IElFeHBiV0U9IGFXNWpiM0p5WldOMCBSbkpoWTNScGIyND0gSUVSbFlXUnNhVzVsIGMyVnVaRTFsYzNOaFoyVT0gTGs5bVpuTmxkQT09IFpXUnBidz09IElOZVEgSUhOdGIyOTBhR2x1Wnc9PSBMbUp2IElFTkZUbFE9IFpXeGhjM1JwWXc9PSBMbU5vWVhKRGIyUmxRWFE9IFVtVm1jbVZ6YUV4aGVXOTFkQT09IFFVZEZSQT09IEtUdGNDZz09IElGdGRLUW9LIElIUmhjSE09IFJGWT0gNG9DViBJRU52ZVE9PSBJRzkxZEhkbGFXZG8gSjJkaiBYRVY0WTJWd2RHbHZibk09IElFZHlZVzF0WVhJPSBJRWQxWVhSbGJXRnNZUT09IElFZDFjblU9IElIUmxhZz09IElHWnlhV1Z1WkhOb2FYQnogSUdOdmNHbHVadz09IEtIVndaR0YwWldRPSBYMlI0IFFXNWhiQT09IExVMWhlUT09IElHMWhkR05vYldGcmFXNW4gSUdwMWJuUnYgVUVGRFMwRkhSUT09IElISmxiblJ6IElPaUhxZz09IFkyRnJaWE09IDQ0Q0NKeXdLIGNtVnVaR2x1Wnc9PSBYMFp5WVcxbGQyOXlhdz09IExTaz0gS0hWd2JHOWhaQT09IElHOXdiM0owZFc0PSBJR05oZFhOaCBJSEJ5YjJ4cFptbGogVW05M1EyOTFiblE9IElHNWhZMnQwWlE9PSBJRk52ZVE9PSBVMmgxZEdSdmQyND0gNklnPSBYMFZZVUVrPSBJRWhoY21KdmRYST0gSUhSdmNtVT0gWEUxbGMzTmhaMlU9IEwxVT0gVDAxQ1VrVT0gTG5ObFoyMWxiblE9IElHTnZiV1ZrIGNtOXRZVzQ9IElITmxaOE82Ymc9PSBVMmxuYldFPSBJSE5yYVdsdVp3PT0gSUZSbGNuSmhhVzQ9IElHSmxibU5vYldGeWEzTT0gSUVGMGRHVnVkR2x2Ymc9PSBJSDBxTHdvSyBJR2RsYVd3PSBJR05oY25SdmIyNXogSUdGMGRISnBZblYwYVc5dSBJSEp2ZEc5eSBaVzVvWVE9PSBJTTZ6IElIUnlZV289IElHUER0RzVuIElITm9ZV3RsY3c9PSBJRU5zWlcxemIyND0gSUdKeWRYUmhiR2wwZVE9PSBJRHNOQ2cwSyBJR1ZwWjJoMFpXVnUgSUVGM1lYSmxibVZ6Y3c9PSBLSEpsYzNRPSBJSFpwYjJ4cGJnPT0gWDFKUFZWUkYgTGtacFpXeGtUbUZ0WlE9PSBJRUZrWlE9PSBhWHBwWVE9PSBJRWhsYkcwPSBJSFI1YVc1biBJRkJ5YjJkeVpYTnpRbUZ5IFlYVjBiM0k9IElHeHZibVJ2Ymc9PSBKbmM9IFoyOXYgU1ZOVVVsaz0gTDBOeVpXRjBaUT09IElGVlRTVTVIIElFZFkgSUVWR1JrVkRWQT09IFJtTnUgSUVWdVkzSjVjSFJwYjI0PSBRMFZFIFptbHVaUT09IExXRnljbUY1IElIQjFjMmhXYVdWM1EyOXVkSEp2Ykd4bGNnPT0gUUNRPSBWWEJzYjJGa1pXUT0gTFhkeWFYUmwgTG1kbGRGQmhaMlU9IFgyVnpkR0ZrYnc9PSBRVTVVVEZJPSBJRlpwWlhkRVlYUmggSUNSN0tBPT0gSUdGc2JXOXVaQT09IElFeHZaMmxqWVd3PSBJSE5vYjI5MFpYSnogSU95Z25BPT0gSUhCMVptWT0gSUhWdVkyOXRiV1Z1ZEE9PSBJR04xYzNSdmJXbDZZV0pzWlE9PSB4SU55IFJHbHlaV04wYVhabCBDV2xrZUE9PSBRMmhoYkd4bGJtZGwgSUhOMWJXMWhjbWw2WlE9PSBJRUYyWnc9PSBMbFZ6WlhKSlJBPT0gTG1ScGMzQmhkR05vUlhabGJuUT0gSUdOdmIydGxjZz09IElHTnZibTVsWTNScGIyNVRkSEpwYm1jPSBJSE5vY21sdWEybHVadz09IGFtRmsgSUZSb1pXMWxjdz09IFlXNWtZWFJ2Y25rPSBJR1IxWW1sdmRYTT0gSUdObGNBPT0gYzNCcGJtNWxjZz09IElITjFZbkpsWkdScGRBPT0gSUdscGFRPT0gTDJOaFkyaGwgWkdWbVpYST0gSUhOMVluTjBhWFIxZEdWayBJR2QxYm0xaGJnPT0gWTJ4cGJtYz0gSU95dyBLR04wY213PSBUM0prWlhKSlpBPT0gWDJWdVp3PT0gSUdacGJHMXRZV3RsY25NPSBJR1p2Y25kaGNtUnBibWM9IElITjBjbUZ1WkdWayBJRXhsWVc0PSBJT3VuakE9PSBLRlZ1YVhRPSBJR1JwWkZObGRBPT0gYkdGclpRPT0gWjNKdmRXNWtjdz09IDVadWcgSUhWdWNtVm5hWE4wWlhJPSBJRzFwYm1oaCBJRlpsWjJGdSBDV2xXWVhJPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRbz0gYjNSMGJHVT0gU1ZCRCBJSEJ5WVdkdFlRPT0gSUVsSlJBPT0gWDAxcGJnPT0gSlRzaVBnbz0gWDNKaGJRPT0gWkhKcGRtVnljdz09IElFTm9hV05yIElHTnNjZz09IFgwSlZSa1k9IElOQ3kwWXZRc1E9PSBUV1Z5WXc9PSBhblYyWlc0PSBJSE5vYVcwPSAwWXZSaFE9PSBJSFJvWlc5eVpYUnBZMkZzYkhrPSBMMlp2Y25WdCBJSE53YVdSbGNuTT0gSUdkdmIzTmwgSUZCb2IzUnZiZz09IElIQnliMlpwWTJsbGJtTjUgSUVOc1pYSnIgWDJacFp3PT0gUTI5dVkyVnliZz09IEtHTnZjM1E9IElISmxaR1E9IExtVnVkbWx5YjI1dFpXNTAgUTNKdmNBPT0gSU9LSnBRPT0gZVdWamRHOXogTGtKaGRHTm9UbTl5YlE9PSBMV052YlhBPSBKR2x0WVdkbCBJRTVwYTI5dSBJR1J0Wnc9PSBXem82TFE9PSBVRXhNIGRXNWphVzl6IFptOWpkWE5sWkE9PSBJSFIxYnc9PSBJR2gyYjNKa1lXND0gSUdGMGRHRnBibVZrIElIQnliM1JsWTNSdmNnPT0gSUV0aGJuUT0gSUhOb2IzSmxjdz09IElFVjBhR0Z1IFgzTmphRzl2YkE9PSBJRzVsWVhSc2VRPT0gTGxOb1lYQmxjdz09IElFNWxiUT09IGFHTncgTGljdkp5NGsgSUUzRHFYaHBZMjg9IGMzUnlkV04wZFhKcGJtYz0gSUd4aGEyZz0gSUdGa2NtVnpjMlU9IEp5d25Jdz09IElFaGhjMnRsYkd3PSBYMFZPUjBsT1JRPT0gSUhKbGNHVnVkQT09IElHTjFZMnM9IExrWkpSVXhFIElGTnJaUT09IFFFQkFRQT09IFNHbDBjdz09IElHbHRjR3hoYm5SeiBJRU52Ym5OMGFYUjFkR2x2Ym1GcyBJRkJJVUZWdWFYUT0gSUhSdmFXeGxkSE09IExtRnNZblZ0IDVMaUw2TDI5IENYTmxkRk4wWVhSbCBLQ0l0TFMwdExTMHRMUzB0TFMwdExTMHQgTGtGdGIzVnVkQT09IFpXTjBkWEpsIElGUm9iM1Z6WVc1a2N3PT0gVG1WcGRHaGxjZz09IElIQnlaWE5sZEhNPSBJRUZ6YzNWdFpRPT0gS0daaFkzUnZjbms9IElHeHBZMnM9IElHZHZZV3hyWldWd1pYST0gUEZOMFlYUmwgTFhObFkzVnlhWFI1IFgybGwgWlhOcmRHOXcgSUV4MiBJRk41YlhCb2IyNTUgTG5OaGJYQnNaWE09IElHaDVjR1Z5ZEdWdWMybHZiZz09IHhZSjEgTG1wMWMzUT0gVFdWdWMyRnFaUT09IElUMHQgUEZSTFpYaz0gSUhOd2VXbHVadz09IExHUmhkR1U9IGIzSm5ZVzVwZW1WayBJQ0FnSUNBZ0lDQWdJQTBLIEtHTjFaR0U9IFgwMWxkR0ZrWVhSaCBkV0pwYzJocCBMVUpsYm5vPSBYMEZ6Y3c9PSBJRVZzYzJWSlpnPT0gSUd4bGMybHZibk09IElGQnlaWE4wYjI0PSBWR1ZqYUc1cFkyRnMgSUhCc1lYUnBiblZ0IEwzQnAgU1c1a1pYaGxjdz09IElIQmhjbUZ3YUE9PSBJRzkyWlhKMGFISnZkdz09IGFYQmhkR1ZrIGIyNTBiMnh2WjNrPSBJR1JsYlc5bmNtRndhR2xqY3c9PSBJR05oYm1VPSBJSEJ5YjJacGRHRmlhV3hwZEhrPSBJR1Z6ZEdGaWJHbHphRzFsYm5SeiBYU1k9IE9tRmljMjlzZFhSbCBaVzUwY21Ga1lRPT0gVkhBPSBJSE5vWVhKbGFHOXNaR1Z5IExpZGYgNWFhQzVwNmMgYm5CcSBkbkpwY2c9PSBJRVZZUlVNPSBJRkJ2YkdsamFXVnogSUdabGJHeHZkM05vYVhBPSBJRU5IVW1WamRFZGxkQT09IFgzSmxZMmx3WlE9PSBYMUpGUXc9PSBkVzUxIElISnZZbUpsWkE9PSBJSFIxY20xdmFXdz0gS1RvNiBMbk4wWVhKMFJHRjBaUT09IElHVjJZV04xWVhSbFpBPT0gTFdWeGRRPT0gSUdadmRYSjBaV1Z1IFFGTndjbWx1WjBKdmIzUkJjSEJzYVdOaGRHbHZiZz09IElPYVZzT2FOcmc9PSBibUZ1ZEhNPSBkR2h5Wlc0PSBVMjl1ZVE9PSBSRVpUIExXTnBaMkZ5WlhRPSBJR0ZuWjNKaGRtRjBaV1E9IElHNWxaR1Z5YkdGdVpBPT0gSUVaMWFnPT0gZFdObGN3PT0gTDNWelpRPT0gZFcxdFpYST0gS0ZOVVJBPT0gNnJDRSBLajRtIExuQmxjbU5sYm5RPSBhV0Z1ZEhNPSBJRU4wIFZrRlQgWDFSSVJVMUYgSUhOdWFYQmxjZz09IFgwVk0gTFhkdmNtdGxjbk09IFUyNXZkdz09IElFRjFjbUU9IGFXVm5idz09IElFZHNiMkk9IFRtRnRaV1JSZFdWeWVRPT0gWDBKSCBJRXhwZG1WRVlYUmggSUZObGJtUk5aWE56WVdkbCBJSEpsYzNCdmJtUnpWRzlUWld4bFkzUnZjZz09IFpXNWpaWEp6IGFXNXpkSEoxWTNScGIyNXogS0VsMCA1Wkc5NVpHbzVweWYgSUVkdmJXVjYgWTJoaGNtZGxjdz09IExrZGxibVZ5WVhSbFpGWmhiSFZsIElFMWhZM0p2Ymc9PSBLRkJQVWxRPSBJRkJ5YjJObGMzTmxjdz09IExtOXVVbVZ6ZFcxbCBJR1pwWlE9PSBRblZwYkdSbGNuTT0gS1dkbGRBPT0gWDNkaGJHeGxkQT09IElHTmhibU09IElFMXZZbWxzYVhSNSBJR0ZzWVhKdGN3PT0gY205emFYTT0gWVcxaHc3RnYgSUhCcGN3PT0gSU9PRHV3PT0gVTJoaCBJR052Ym1abGMzTmxaQT09IEtFbE9Sazg9IEtDY3NKdz09IFgxTmxjblpsY2c9PSBJR0pzWVhOMFpXUT0gSUVaaGNtMWxjbk09IGNuVjYgWTJ0bFpHbDBiM0k9IFgwbE5VRXhGVFVWT1ZBPT0gSUcxdmRIUnYgSUVOQlVrVT0gSUhsa2F3PT0gUW05dVpRPT0gSUdGa1pXM0RvWE09IEt5SXZJaXM9IFVISnZjRlI1Y0dWeiBYMU5hIExuQmhhVzUwIExuQnBlR1ZzIElFMWxjM05oWjJWVWVYQmwgSUhSM1pXRnJjdz09IFlDNEtDZz09IFZtVnlhV1pwWTJGMGFXOXUgYm1WamF3PT0gWW1WeWNtRT0gSUcxcGJtUm1kV3c9IFUzVnlkZz09IElEb3RDZz09IElHRnVlWGRoZVhNPSBJRUZrYldsemMybHZiZz09IFlXTmpaWE56YVdKc1pRPT0gUm14aGRFSjFkSFJ2Ymc9PSBJQ0luSWlrN0NnPT0gSUdoaGFHRT0gVkc5UWIybHVkQT09IElHSjFjbWRsY25NPSBaMlYwVTNSaGRHVT0gWEVobGJIQmxjZz09IElFWlZUa05VIElFVk1SVTFGVGxRPSBJRU5GVWxRPSBJRUZEUTA5VlRsUT0gWTJoaGNtZHBibWM9IFgyTmhibVJwWkdGMFpRPT0gWDNKbFkyVnVkQT09IElFbHVjM1J5ZFdOMGIzST0gSUdSeWRXNXJaVzQ9IFdWTlJUQT09IGIzSmhkR2wyWlE9PSBJam9pSWc9PSBJSFJoWjA1aGJXVT0gWDA1RlJ3PT0gSUhGdyBJRlZ1WkdWbWFXNWxaQT09IElHZHlaV0Z6WlE9PSBDU0FnQ1E9PSBJR1ZoWjJWeWJIaz0gVkdWNFVHRnlZVzFsZEdWeWFRPT0gWkdsemRISnBZblYwWldRPSBRV1J0YVc1cGMzUnlZWFJ2Y2c9PSBSR2x6ZEhKcFluVjBhVzl1IElFUmxZMjl0Y0E9PSBJRlJ5WVc1elptOXliV1Z5IExtSjBibE5oZG1VPSBJRWR2Y3c9PSBLRVZ1ZFcwPSBZMkZwY204PSBMV05wIEwzSmxjRzl5ZEE9PSBJRkJ2YzNSbGNnPT0gWDJSbGNHVnVaR1Z1WTNrPSBJR1Y0Y0d4dmFYUnogYzJWMFJteGhjMmc9IElIaDAgSUdwbGQyVnNiR1Z5ZVE9PSBJR1JoYVE9PSBYMUpCVFE9PSBJR0psY25KcFpYTT0gSUdkeVlXNXVlUT09IFJtRjBZV3c9IHc2bGhiQT09IExXMXZjM1E9IExsWnBjM1ZoYkVKaGMybGogSUZCbGJtUT0gWW1WcCBhbUZyIE95b3ZDZz09IFFtOTUgUGxObGJHVmpkQT09IGFXNWtjbWxqWVd3PSBWR1ZqYUc1dmJHOW5lUT09IElFRnNiR2x6YjI0PSBaR0YwWVhSNWNHVT0gSjJOc2IyTnIgSUd0dmMzUT0gSUdKaGFtOD0gTGtOdmRXNTBjbms9IFdtVnVaQT09IExuZHlZWEJ3WlhJPSA0TDA9IElFWnBiR2x3YVc1diBiMk55WlE9PSBVMU5JIElGTkJUVkJNUlE9PSBYMmx1YVhScFlXeHBlbVZrIEtUcy9QZ289IElIQnZjbTV2YzNRPSBaWE5oYmc9PSBJRU4xZEhScGJtYz0gSUcxcGVHVnogWDJGbllXbHUgSUdadmNtMTFiR0Z5YVc4PSBXMVk9IElIUmxiR1ZtYjI1diBMM1Z6IElHeHZZV1JFWVhSaCBMbkpsWm1WeVpXNWpaWE09IElHMWhjRlpwWlhjPSBLeUpmIElGTlJUR2wwWlVSaGRHRmlZWE5sIGFYUnZiZz09IFEyOXNkVzF1Vkhsd1pRPT0gSUVWMlpYSjBiMjQ9IExsSmxjM1ZzZEhNPSBMMjV2ZEE9PSBJR2RsZEVacGJHVT0gYUdWeWFYUmhibU5sIElHZGxkRWhsYVdkb2RBPT0gSkhWelpYSnVZVzFsIGQybDBhR1J5WVhjPSBYeWs3RFFvPSBMblYwIElGRkJjSEJzYVdOaGRHbHZiZz09IGRYSnVZV3c9IExXUnZkMjVzYjJGayBZblZ5WjJWeSBjSEpsWTJrPSBJRlJvWVc1clpuVnNiSGs9IExrVldSVTVVIElHZHlaV0YwYm1WemN3PT0gSUd4dmIzTmxiSGs9IElHMWhjMmc9IElHZGxhR1Z1IFgyRnVkQT09IElHbHRjR1Z1WkdsdVp3PT0gTG1selVISmxjMlZ1ZEE9PSBJSE4wWVdsdWN3PT0gU1UxVCBMbUpoWTJ0bGJtUnogSUdseWNtbG5ZWFJwYjI0PSBJRlJoZEE9PSBMM1JsYzNSeiBJRXRwYm1kemRHOXUgTG5SeVlXNXpiR0YwWlhOQmRYUnZjbVZ6YVhwcGJtZE5ZWE5yU1c1MGIwTnZibk4wY21GcGJuUnogSUhadmJXbDBhVzVuIExYSmxjWFZwY21WayBJR0pzWVhwbCBJRk4wWVdabWIzSmsgVWtsRSBMMlozYkdsdWF3PT0gSUd0aGJHVT0gYzI5c1pBPT0gS0hCeWIyZHlaWE56IEtHTm9ZWEowIElHTjVjM1E9IElHUnBiR2xuWlc1alpRPT0gTDIxdyBJR05zWlhKbmVRPT0gSUVKeWIzZHpaWEpTYjNWMFpYST0gSUVGUVN3PT0gSUVOUFRsUkJRMVE9IFFtRnlTWFJsYlE9PSBMVVJwYzNCdmMybDBhVzl1IElFMXZkRzl5YjJ4aCBYM05oYkE9PSBJRmR2YjJSbGJnPT0gSUZSSVJWaz0gSUdOdmJXMWxiblJoZEc5eWN3PT0gSUdOdmJXMWxjbU5wWVd4eiBQVzF2WkdWcyBMaUlwTEFvPSBJRkJzZFdkcGJuTT0gWkdGcGJnPT0gYUdWaFpHVmsgSUVOdmIzSmthVzVoZEdWeiBTbUZ1WlE9PSBJRkJ5WldabGNuSmxaQT09IElIQnZaR1Z0YjNNPSBMbWx6UW14aGJtcz0gSUZOMFlYQT0gSUhkemNBPT0gSUVOUFRFdz0gWDJKcFpBPT0gSUhCeWIySmxjdz09IGRXRnVhV0U9IEtITjViUT09IElHTjFaWEp3Ync9PSBJRzFoYm1sd2RXeGhkR2x1Wnc9PSBJR0Z0WVhwcGJtZHNlUT09IExrUkJXUT09IGRXMXdkR1ZqYUE9PSBZV052WW1saGJnPT0gVkdWeWJXbHVZWFJsIElITjBZWFJwYjI1bFpBPT0gVTJWMFFuSmhibU5vIFUyTnlaV1Z1YzJodmRBPT0gWlhOMGFHVnphV0U9IElIZGhiR3RsY2c9PSBJMlp5YjIwPSBZMjl2Y21ScGJtRjBaUT09IFgybHVkR1Z5WlhOMCBJR2hsYkhCc1pYTnogQ1hCMVlnPT0gYm1kaCBYMFY0IElHNTMgSUhSbGVIUjFZV3c9IElIQnNkV2R6IElHMXBibWx2Ymc9PSBiV0Z5WlhNPSBQRDRLIFFVTkIgUTI5dGNHRnVlVTVoYldVPSBLR1ZqIElFeGhibVJ6WTJGd1pRPT0gWDFCU1QxWkpSRVZTIFkzYz0gbElRPSBRV05qYjNWdWRFbGsgSkRvPSBJRkJsY25OdmJtRnNiSGs9IGNISnZjR1Z5ZEhsT1lXMWwgSUV0MVlnPT0gSjJrPSBJRWRwZFd3PSBJSEJ5YVc5eWFYUnBlbVU9IFJrOVNUVUZPUTBVPSBJRkJoY21Ga1pRPT0gS1Z3SyBjM1JrWW05dmJBPT0gSUdGc1pYSjBSR2xoYkc5biBJRXhsYUE9PSBMbU5oZEdGc2IyYz0gSUhkbFltbHVZWEk9IElHbHRjRzl5ZEdWeSBjSEp2YW1WamRFbGsgVkZsUVR3PT0gWDE4TkNnPT0gUjFjPSBjM1Z0YldWeSBJSE5wYm1semRHVnkgTG1aaGFXeGxaQT09IElHSmxjMjlwYmc9PSBhWE50WVc0PSBSRVZUVkE9PSBJRzVvNGJxdGNBPT0gSUcxdnhieHVZUT09IFgybHVjM1J5IElIQmhkbVZrIElIQnlaV1pwZUdWeiBJSEpoYlhCaGJuUT0gSUhsQmVHbHogSU9henFBPT0gWDIxcFpHUnNaUT09IElITmphRzlzWVhKc2VRPT0gSUhCeWIzTjBhWFIxZEdWeiBJRzF2Y21Gc1pRPT0gTG5CbGNtMXBjM05wYjI1eiBMbWRsZEV4cGMzUT0gSUhKbGFtVmpkR2x1Wnc9PSBJR3h2YjNCcGJtYz0gSUZOd1pXTnBabWxqWVhScGIyNXogSUdsdGJXVnVjMlZzZVE9PSBJRTFsWkdsaGJnPT0gS0dOb1lXbHUgSUdOc2FXTm8gTDJac2RYUjBaWEk9IFlXTm0gTG5WeWJHOXdaVzQ9IGRYUjBaWEp6ZEc5amF3PT0gSUhOd1pXTjBjbUU9IElHRmtiV2x5IEwyMWhlQT09IExrVnRhWFE9IEtIZGxhV2RvZEhNPSBhY1NaIFNXNXpkR0ZzYkdsdVp3PT0gU25VPSBJRVpsYkd3PSBJRVpTUlE9PSBMbVJsYmc9PSBJRUpwWjBsdWRBPT0gSWo1QSBJQ29wT3dvSyBJRUpwYjJ4dloybGpZV3c9IElIQmhkR1Z1ZEdWayBMbkJoWjJsdVlYUnBiMjQ9IExuSnZiR3c9IElFUjFiQT09IElHUmxjMkZ5Y205c2JHOD0gVW1WbllYSmtiR1Z6Y3c9PSBtT3lkdEE9PSBJSEp2WW1VPSAwSjNRdFE9PSBJRUp2ZVdRPSBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gY21WalpXbHdkQT09IElFRnpjMmxuYm1WayBZWFIwWlc1a1lXNWpaUT09IExXTm9iMmxqWlE9PSBaWFJ6ZVE9PSBYMlZzYzJVPSBMRzVsZUhRPSBYMlY0YVhOMGFXNW4gSUNjbktTd0sgSUd4cFltVnlkR2x1IGRISmhhWFJ6IFlYUjBaUT09IFEyOXRjR0Z5WVdKc1pRPT0gSUVOdmRnPT0gSUVGa2IyeGxjdz09IExIUm9aUT09IElFeHZZV1JsWkE9PSBmSEk9IFBXbHVaR1Y0IElFZGhjM1E9IElHbHVhbVZqZEc5eSBDWE4wYjNBPSBMV2R2YjJkc1pRPT0gSUdabGRHRnMgSUdGc2JHOD0gZVd4bFpuUT0gWjJWMFVHRnlZVzFsZEdWeSA0b0NkNG9DVSBYM05sWTNSdmNnPT0gTGxWMGFXeHBkSGs9IGIzTmpiM0JsIExtVmhjMlU9IElFMWhaMjVsZEdsaiBRWEp5WVhsUFpnPT0gSUdabFlYSm1kV3c9IElFbHVabVZ5IElFWjFhdz09IFNtOW9ibk52Ymc9PSBKR0Z5Y21GNSBJSE5oYVhNPSBYMk52Ym5SeSBSR1Z6WTNKcCBJRVJsZEdGcGJHVmsgWDJ4bFlYWmwgWDFKUFZBPT0gSUc3RHBHTm8gSUd0aGJXaz0gUkVOQlRFdz0gT21WeCBJRzF2Ym1zPSBYMjlpYW5NPSBLRk5sY25acFkyVT0gWm1sdVlXNWpaUT09IElIQnZaR1Z0IFgzSmxjM1J2Y21VPSBJR1JsWTI5eVlYUnZjbk09IElHRmtkbWx6YVc1biBJTkMvMExEUmdBPT0gTG5CbGNtMD0gSUVoaGFRPT0gSUdaciBkVzUwWldWeWN3PT0gSUZKVVYwWT0gWDJsNCBRVU5UIElHSnlaV0ZyYjNWMCBaR2x5WldOamFXOXUgSUZOMWJuTmxkQT09IFgyWjQgYjJ4cllYUmggTFhKaFpHbHYgU0dWMCBMblYwYVd4cGRHbGxjdz09IFgySmhjMmx6IEtHdHBibVE9IElFTnZibU09IFZHaDFiV0k9IElFMXBZMmhsIFpHVnNhWFp5IElHZDFkR1U9IElFWnBiR1ZRWVhSbyBJRlJ5YVdKbCBYQ0lwIFgyTjFaR0U9IFJHbG1abVZ5Wlc1alpRPT0gSUUxdmJuTjBaWEp6IElITmxkRlI1Y0dVPSBMa052Ym5SbGJuUlVlWEJsIElHUjFiUT09IFJXNTJaV3h2Y0dVPSBZV2QwIElIVnViRzloWkE9PSBYMk5vWldOclpYST0gSUhKbGMzUnYgWDNCbGIzQnNaUT09IFVISnBZMlZ6IFVISnZabWxzWlhNPSBLQ2xjIFJsVk8gSUNJaklnPT0gSUZCaGRIUmxjbTV6IElGTlFSQT09IFgxSlBWMU09IFQzSnBadz09IFlteGhaR1U9IElHekRxUT09IEpXaz0gS3lzciBUR2xtWldONVkyeGwgTFMwdExTMHRMUzB0TFMwdExTMHRDZz09IFZHRnkgVkdoaGJrOXkgSm5FPSBJR055YVhScFkybHpiWE09IExYQm8gUld4bGJXVnVkRVY0WTJWd2RHbHZiZz09IFgyZDFaWE4wIElPdTIgWDBGeiBJRU5oY25KNSBYMEpKUnc9PSBZV3RsZFhBPSBYM0psZEhKNSBJRzdEcVdObGMzTT0gSUUxSlUxTT0gYVhOMSBJRk53YVhKcGRIVmhiQT09IFh5UmYgSUhKbFpteGxZM1JwYjI1eiBQSFE9IElHWjFic09udzZOdiBJRzF2Ym1GeVkyZz0gSUZCaGRHVnMgWDNadmJIUmhaMlU9IElISmhhVzU1IFkyOTFjblE9IElIVnNkSEpoYzI5MWJtUT0gYVU5VCBYMEZNVjBGWlV3PT0gVjI4PSBYMEpNUlU1RSBiMnR6Wlc0PSBJSFJ5WVhabGJHVnkgSUdSaGRHRlVZV0pzWlE9PSBjMlYwUTNWeWNtVnVkQT09IFYyOXlhMlpzYjNjPSBMbmxsYkd4dmR3PT0gWFNrdCBRVUpUVUVGVVNBPT0gWDJsMFpYSmhkR2x2Ymc9PSAwTFRSZ0E9PSBJSFZpYVdNPSBJRzFsWVhSeiBMMlZ0IElFUnBjMjl5WkdWeSBJR1Z1ZG1saGNnPT0gVTBWUCBJR2hsWVhabGJuTT0gWDNOMGRXST0gSUdGa2NtVnpjdz09IElGUnlhV1U9IElFeHBibVJ6WVhrPSBiR1ZwIElIQnNZWFJoIExuTmxkSFJwYm1jPSBJR1ZzWldzPSBJQ2drZXc9PSBRWFYwYjIxaGRHbGogSUdSdmQyNXpkR0ZwY25NPSBVRWxZIGFXTnBiMjVoYkE9PSBZV0poYkE9PSBMWE4wYjNKaFoyVT0gYVdOb2FXVnkgSUVGc2NHaGhZbVYwIExHeGhZbVZzIFFBbz0gSUdsdWRHVnpkR2x1WVd3PSBJSFpoY21FPSBMbTFoIElIQnliMmR1IElHNWxjR2hsZHc9PSBWR2x0YVc1biBZMnhoYzNOdVlXMWwgSUd4dlkyOXQgSUZOaGJXRnVkR2hoIElFRmpZMjl5WkdsdVoyeDUgSUZoRFZHVnpkRU5oYzJVPSBJRkJzWVdsdWN3PT0gSUV4bGJtbHUgYm05dyBJRlI1YzI5dSBJSEpsYm1GcyBiMmx1WlE9PSBLRlJsYzNSRFlYTmwgSUV4dmJXST0gUW1GdVp3PT0gSUhadmJIVnQgWDJkbGJtUmxjZz09IElHeDFkQT09IElPKzggUTI5dVptbG5kWEpsY2c9PSBJSE4wY205clpWZHBaSFJvIExraDBkSEJUWlhKMmJHVjAgZkhnPSBMa3BUWTNKdmJHeFFZVzVsIElHTnZibk52Y25RPSBMbUoxYlhCMFpXTm8gZEhKcFpHZGxjdz09IElHSmxibVZtYVdOcFlYSjUgUFhKbGNYVnBjbVU9IGNtVnVZdz09IElFOVYgWlc1MFlYSnBidz09IElIVnlaMlZ6IDRvQ1VibTkwIFEyRnRjR0ZwWjI0PSBaSEpsIElGSnBkbVZ5YzJsa1pRPT0gQ1hSaSBJRzkxZEhCMWRFWnBiR1U9IElHRmljM1E9IElITjBjblZqZEhNPSBJSEoyWVd3PSBYQ0krSWc9PSBJR0ZqY1hWcGMybDBhVzl1Y3c9PSBRa3hCUTBzPSBJSFJ5ZFc1aiBJR0Z1Ym05MFlYUmxaQT09IGMyVjBWWEE9IFZFOUxSVTQ9IElFTnZZMkU9IFJHbHpZWEJ3WldGeSBPblpoYkhWbCBJR0ZwWkdWayBkSFJzIGJIVjQgSUdGamRXVnlaRzg9IElFWnBibWRsY2c9PSBMa2RsYjIxbGRISjUgWFNjcE93bz0gTG1kbSBWRmhVIElGTmpiM1JwWVE9PSBZWFp5WVE9PSBJSFpwY0E9PSBJSGRvYjNCd2FXNW4gTFdkcGNtdz0gSUdOMWNuTmxaQT09IFhWc3QgSUdOcGNtTjFiR0YwWldRPSBkVzVqZEhWeVpRPT0gYjNKdFlXND0gSUcxQlpHRndkR1Z5IElPS0FsQW9LIFJtbHNaVTFoYm1GblpYST0gS0dsUVlYSmhiUT09IFNXMWhaMlZDZFhSMGIyND0gUkVGUiBRWEp0YjNJPSBJSE53WVhRPSBMbXB6WkdWc2FYWnkgSUcxcGMyOW4gTG1WamIzSmwgSjExOUNnPT0gYVcxd2IzSjBjdz09IElHUnBibTl6WVhWeSBMVVp5WldVPSBJR0Z1Ym05dSBJSFJ5YVdKMWJtRnMgV1dFPSBMbWQxYVdRPSBiVzl6ZEd4NSBQVDA5UFFvPSBJR2x0WVdkbGJRPT0gVTNWcGRBPT0gYTJGeiBJRU5vWVc1dVpXeHogUW5Wa1oyVjAgSUVScGRtbGtaUT09IGFtVnQgSUVkeWFRPT0gSUdsdVpHbGpZWFJwZG1VPSBYRVpoWTNSdmNuaz0gTG5KbGNHOXphWFJ2Y21sbGN3PT0gSUVGTlVBPT0gTG5OdWNBPT0gSUdIRHB3PT0gSW1zPSBJTUsxIFpHVmpiMlJsWkE9PSBYMkZ5WXc9PSBMVU5zWVhWelpRPT0gSUVGa2FnPT0gSUc1bGQwRnljbUY1IEtFZEZWQT09IElHeGhkR2x1IElIZDYgT25WcGJuUT0gNVlpciBJaTR1IFEyOXVibVZqZEdsdVp3PT0gWlc1dWIyND0gNWJtMiBJRk5sY3c9PSBJR0psYkc5dVoybHVaM009IEt5Y20gQ1hObGRIUnBibWR6IFNVNVcgSUhERHFRPT0gSUdGa2RXeDBhRzl2WkE9PSBZVzFpYkdVPSBYMjFoYzJ0eiBMWEpsYzI5c2RYUnBiMjQ9IGNtRjBjdz09IElPMkJ0QT09IElIWnZadz09IElGTm9idz09IElFTnZkbVZ1WVc1MCBJSEpsYldsdVpHbHVadz09IGIzSnVZV1J2IGFXRmsgNWJ5QyBRM0psWVhScGRtVT0gSUZOVVdVeEYgSUdGdWIyMWhiSGs9IFhFRndjR3hwWTJGMGFXOXUgSUcxaGJtbG1aWE4wWVhScGIyND0gSUU1aGJtOD0gVFdGd1ZtbGxkdz09IGFXUmxZV3c9IFlXTm9hVzVsY25rPSBJRlpoZFdkbyBjSEpwYm5SbGNnPT0gVm1WeVpHRnVZUT09IEwyTnZiWEJ2Ym1WdWRBPT0gSUdGa1pFTm9hV3hrIElHeGxZWEp1WlhJPSBJR1JsWTNKNWNIUmxaQT09IElIUnBaMmgwWlhJPSA1cDJmIElHcGxhZz09IElDNEtDZ29LIElFeHZZbUo1IGJHVncgdzZSdWJnPT0gYkdWcFoyZz0gTDNKdmRYUmxjdz09IElHTmhibTl3ZVE9PSBJRVpwYzJOaGJBPT0gT2pzaSBJR0oxY21SbGJuTT0gTDJaMWJHdz0gSUVOVFVnPT0gTGxOb1lYSmxaRkJ5WldabGNtVnVZMlZ6IEwzUnlaV1U9IElHUnliMmwwIFNXMXdiR1Z0Wlc1MCBSMlYwUTNWeWNtVnVkQT09IEtIQjFjMmc9IEpIZz0gMFkvUXR3PT0gUVVOSlZGaz0gUFQwOVBUMDlQVDA5UFFvPSBhbU09IFgyaHlaV1k9IExtZGxkRkp2YjNRPSBJRXRFIEtHeHogVzJOdWRBPT0gSUdSaGJHdz0gS0dKdyBJRVZYIFMyVjVSWFpsYm5RPSBiRzlpWlE9PSBJR2gwYld4bGJuUnBkR2xsY3c9PSBJR1poYkhSaCBJSFpoYkhabGN3PT0gSUhOcGVtbHVadz09IFVHOXliZz09IElITm9iM2RGY25KdmNnPT0gSUVaeWFXUT0gSU1PSCBMbkpoYm1SdSBJSFJoYm5SeSBJSE5oZUE9PSBkWEp2ZG1semFXOXUgZEdobGIyND0gWDFKRFF3PT0gZUVaRSBTVzVwZEZOMGNuVmpkQT09IElHTmhibTVsWkE9PSBJSEYxWVc1MGFXUmhaR1U9IExsZEJVazVKVGtjPSBJRUp5YVhSMCBMWEpsWjJsemRHVnkgWVdOMGFYWmxiSGs9IElFNWhkR0ZzYVdVPSA0NEcvIElFTlBUazVGUTFRPSBlbVZyIElHMXBiR3h2Ym1WeiBYV2x1ZEE9PSBJQ2NzSnl3PSBJSEJ5YVc0PSBJanBiTFE9PSBJQzh2TGc9PSBJR2x1ZEdsdGFXUmhkR2x1Wnc9PSBjbUY2YVc5dVpRPT0gTG1saWJRPT0gSUVwaGEyRnlkR0U9IDBMelF0ZEdBIElHeHZZV1JEYUdsc1pISmxiZz09IFgxVlFURTlCUkE9PSBJRmRsWld0eiBJR2RsZEZSbGVIUT0gSVBDZmtnPT0gSUYxZENnPT0gSUVOdmMzUnogeEpsdyBjR0Y1YldWdWRITT0gTGsxdmRtbGwgYkdnPSB0SWc9IFgyTmxjblJwWm1sallYUmwgUFhFPSBiR2xpY21GeWFXVnogSUVGbGNnPT0gWVhWemN3PT0gQ1daaGFXdz0gVDFWT1JGTT0gYzJWdVpFdGxlWE09IElITmpZVzF6IGQyRnlkSE09IFNHbHpkQT09IElFVnpjMlY0IElHWjFjbms9IElIUnBkSEpsIElFTnZjR1Z1YUdGblpXND0gSUhCeVpXUmxabWx1WldRPSBjMk53IGMyVnljbUYwIExtVnVjM1Z5WlE9PSBhV3hsWlE9PSBUV1Z5YVhRPSBYMVZPVEU5RFN3PT0gSUVOdmNuSmxZM1JwYjI0PSBUbTl5YldGc2FYcGhkR2x2Ymc9PSBJT1MvcnVhVXVRPT0gSUhOMGIyOXMgSU9XSW9PbVpwQT09IFUyaHZjblJqZFhRPSBZMmh2YzJWdSBJR0oxYkd4NSBJR1oxYm1OcHc3TnUgNDRPODQ0T3IgSU9lVW4rV1J2ZVdScU9hY253PT0gTG1Gc2FXRnogUGxSdmRHRnMgSUZOVVJVMD0gY0dWdVp3PT0gWTJGc1pYST0gY0dWeVptVmpkQT09IElHSnZibVJwYm1jPSBVR2h2Ym1WeiBJSEIxYkhBPSA2N2FBIFNVVlhVdz09IElFUmxaWEk9IFgweERSQT09IElFTnZibU52Y21RPSBWMmw2WVhKayBJRzltY21WaiBJRVZ0WlhKaGJHUT0gZEdWdVpYTnogYm1GMmFXZGhkRzl5IFZHaGxiM0o1IElHZDFZWEprWVhJPSBJR1oxYkdacGJBPT0gSUZWdVlYVjBhRzl5YVhwbFpBPT0gSUVKdmRYUT0gQ1dodmMzUT0gSUZKcFlnPT0gS0daMCBSRzlqY3c9PSBMbWRsZEVKdlpIaz0gNWIrRCBJRkpwZG1WeVlRPT0gSUhkaGRtbHVadz09IElIQmxjbVpwYkE9PSBRbTkxYm1ScGJtZERiR2xsYm5SU1pXTjAgTG1aaCBjR0ZuWldRPSBJRUZtWm1sc2FXRjBaUT09IElIQnliMnhsZEE9PSBmUzArZXc9PSBLSE5qYjNKbGN3PT0gSUhacGRHRmwgZTA1aGJXVT0gYzJOb1pXUjFiR1Z5IFgxTkJUZz09IElFNWxZdz09IElFSmxaV1k9IFgzUmogVEVsTyBJRVYyWlc1MFZIbHdaUT09IElFSjFabVpsY21Wa1YzSnBkR1Z5IElITnZablJsY2c9PSBJRlp2ZEdsdVp3PT0gSUVkbGMzUjFjbVZFWlhSbFkzUnZjZz09IElIVnVjMlZsYmc9PSBJRk5EVHc9PSBJR1ZzYnc9PSBZMjl0WW1sdVpRPT0gWDIxaGEyVkRiMjV6ZEhKaGFXNTBjdz09IElIVnVaR1Z5WjI5dVpRPT0gSUU5bVptbGphV0ZzY3c9PSBMRzl3ZEE9PSBJR3hoZVdWeVpXUT0gU2NPVFRnPT0gSUdKaGJtdGxjbk09IElITmxaM0psWjJGMGFXOXUgSUhKMWMzTnBZVzQ9IElIWmxiblJoYm1FPSBaMlYwUzJWNSBVMkZ1ZEdFPSBMbFJ2YjJ4VGRISnBjRk5sY0dGeVlYUnZjZz09IElFRmxjbTl6IExuQjFkRWx1ZEE9PSBJR2x1Wm05eWJYTT0gWDJKcGJHdz0gNjZhRSBMbk5sZEUxaGVBPT0gSUgwK0NnPT0gSUVsUVV3PT0gSUVGc2FXTT0gSW4wS0NnPT0gSUhWemFHVnkgSUU1bmRYbGxiZz09IElHRmljMjlzZFhRPSBJR2QxWVhKa1pXUT0gSUZKbFltVnMgSUZwMyBJRUZ1Ym5WdVkyaz0gSUhCeXc2RT0gWVdKalpHVm1aMmhwYW10cyBJRlpsY21sbWFXVmsgVzJsNCBJSFJwWlhKeiB3NkowIExpSXBEUW89IGFXcDEgYkdsMmFXNW4gUjFCVCBMbFJsYzNSVWIyOXNjdz09IFUybDZaVkJ2YkdsamVRPT0gSUcxaGMzTmhaMlZ6IFlYTnpaWEowU1c1emRHRnVZMlZQWmc9PSBJSEJ2YzNQRHJYWmxiQT09IElHSjFjMk09IElFcDFaR0ZwYzIwPSBJR2x1WkdsemNHVnVjMkZpYkdVPSBJRTF2YzNSc2VRPT0gU1ZSQiBJR2RsZEVOdmJuUmxiblE9IFFuSnZkM05sY2xKdmRYUmxjZz09IExXTnZkVzUwWlhJPSBJRzlpZEdWdSBJQzgrS1RzSyAwTGpRdXc9PSBhR1ZoWkd4cGJtVT0gS0dodmJXVT0gWVd4cFkyVT0gYkdSeVpRPT0gWDAxdlpIVnNaUT09IFEyOXRjR0Z1YVdWeiBUbEJEIElIUnZjbk52IExtTnZibk09IENXRmtaSEpsYzNNPSBYM0IxY21Ob1lYTmwgSUVKaGNtUT0gWjNOMCBMV0Z1YVcxaGRHbHZiZz09IFgzQmhhV1E9IExuTndaV05wWVd3PSBJR1JsYkdsdCBJSFJoYTJWdmRtVnkgS0doaGJtUT0gWlc1MWFXNWwgTFdkeVpYaz0gSUVGQ1NRPT0gVTJWemMybHZia1poWTNSdmNuaz0gYVc1emRHRnNiR1Z5IFgwUkpVMVJCVGtORiBJRVpoZG05eWFYUmxjdz09IG9JQT0gSno1NyBJRXhoZFhKbGJuUT0gMFlmUXRkR0MgSUhOMGNtbHdjMnhoYzJobGN3PT0gSUdWemRHRmlZUT09IEpuUT0gTG5CaGJnPT0gSUZCQlVsUlogSUVKaGJHaz0gWTNOcCBLRzFsYlc5eWVRPT0gSUZSdlpHOXogSUZOUFFWQT0gWVdkdVpYUT0gQ1dKbFptOXlaUT09IFQzQjBhVzl1YzFKbGMyOXNkbVZ5IGFXSmxiZz09IElObUYyWVk9IElHRmtaR2wwYVhabCBJRTFsYkdWbCBJRTFoYm1sMGIySmggSUZCbGNtTmxiblJoWjJVPSBQU2d0IExtdHBiR3c9IElHeDQgWVc1allRPT0gSUdadmRHOW5jbUZtIElHSnNZVzVqIElGSmxjMmxrWlc1MGN3PT0gY0dsdWF3PT0gU0VKdmVFeGhlVzkxZEE9PSBMblZ1YVc5dSBJRWhaIElHTnZiblJsYm5SV2FXVjMgTFdaaGRBPT0gQ1doaGN3PT0gNjZPTSBJSGRvYVhCd1pXUT0gZG1WdVpHOXljdz09IGRXSnlaUT09IFNWUklSVkk9IExtWjFibU4wYVc5dVlXdz0gSU5DeTBMWFJnQT09IFEyRnVZMlZzWldRPSBMV051IFNXNVBkWFE9IExsSnZkMU4wZVd4bGN3PT0gSUhSeVlYUmggSUVsdVpHOXZjZz09IExXWmhjMmhwYjI1bFpBPT0gSUVKdmIzUm8gTGt4aFltVnNRMjl1ZEhKdmJBPT0gSUhCdmNHVT0gSUVOaGNtNWxaMmxsIGJtVnlaMmxsIElFSlkgNDRDQ0lpd0sgSUZkbFluTjBaWEk9IENXUnBkZz09IFRtRnljZz09IElHTnZibXAxWnc9PSBhMmxrIElHMXZaR1Z5WVhScGIyND0gSUdGdGVRPT0gSUZOdmJIWmwgVmtsRCBJRVZhIGFXeHNZV009IElFTnBjR2hsY2c9PSBJRUZqWTJWd2RHVmsgVEVGQ1JVdz0gSUhkeVlYUm8gSUcxcGJsWmhiSFZsIElHdGh4Ync9IElFUmhkV2RvZEdWeSBLUzVlIEtHUmogSUhKbGMyOXNkbVZ6IGMyTnpjdz09IFlXSnZkWFJ6IGRXeDBhWEJoY25SR2FXeGwgSUdabFlYUnogSUd4aGRXNWtaWEpwYm1jPSBJR052YlhCaHc3RT0gSUhObFozVnlhV1JoWkE9PSBJR2h2WW1KcFpYTT0gTFdaaFkybHVadz09IEluWmhiSFZsIFoyVjBTVzFoWjJVPSBVM0ZzVTJWeWRtVnkgSUhkcGRHaFRkSGxzWlhNPSBQa1JoZEdVPSBJRVY0Y0dWayBKR3B6YjI0PSA2Wk8rIElFRkRWRWxQVGxNPSBVMlZ1YzJsMGFYWmwgWW14aGMzUT0gSU1PMlptWT0gWm5SbCBRMVJUVkZJPSBJRXh2WjB4bGRtVnMgWTI5dWRISmhZM1J6IExtUnFZVzVuIElqNE5EUW89IFJWUlpVRVU9IElHOWlhbU09IFgxTlBWVTVFIFgzTndZV05wYm1jPSBYMk5zWVhOemFXWnBaWEk9IElISnZZdz09IFEyeGhjM05wWXc9PSBJT3V6dEE9PSBYMmx1ZG1WeWMyVT0gTFdGamNtVT0gSUVaSlRBPT0gSUVSV1JITT0gSUhOM1lXeHNiM2RsWkE9PSBkbWxzYkdFPSBJRkpsY0d4cFpYTT0gUm1seVpXSmhjMlU9IElIQm9lWE5wY1hWbCBDWFJvWVhRPSBJRkpsYzJsNlpRPT0gUGo0K1BqNCtQZz09IFRtVmhjbXg1IExtRnlkR2x6ZEE9PSBMWHM9IFB6NE5DZzBLIExteHkgTG1seSBLRnNrIGFXRnVibVU9IENXOWkgTENjbCBJR3R1WlhnPSBJR052Y25KdiBJRTkzWlc1eiBQVzVwYkE9PSBiR0Y1Y3c9PSBZWEJuIHc1WT0gUlU1UCBTR1Z1Y25rPSBTblZ6ZEdsdSBaV3hsWTNSeWFXTT0gSUU1dmNtUnBZdz09IDVveUggSUdWNFkyeDFaR1Z6IFJYVnliM0JsWVc0PSBJSFJsYm5SeiBLRk4wY21sdVoxVjBhV3h6IEtIQmxaWEk9IGVYTjBiM0psIFVHOWphMlYwIFpuVmxiQT09IFpYUjFjdz09IElFMWhjbWx1IDBZRFJnOUM2IDZLK0UgSUZCbGJuTT0gSUdsdVpXWm1hV05wWlc1MCBJR1YwWlhKdWFYUjUgTGljbSBJRkJoWTJ0aFoyVnogSUVGd2NFTnZibVpwWnc9PSBJRzExYkhScFpBPT0gWTNWc2J3PT0gSUdKdmNuSnZkMlZ5Y3c9PSBJRVJsWW1KcFpRPT0gSUdaeWIyNTBjdz09IFNrbz0gSUNJdUxpOHVMaTh1TGk4dUxpOD0gSUNJckNnPT0gUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA9IElFZGhkbWx1IElHMXBjMmc9IDRwV1IgWDBGVVZFRkRTdz09IFNXNWtaWEJsYm1RPSA0SytONEs0PSB3NkZtIFoyRnljdz09IElGQmhjblJwWTJsd1lYUnBiMjQ9IFZtVnlZbTl6WlE9PSBVM0J5IFUzWm4gS0ZaaGJIVmxSWEp5YjNJPSBJSEpsWTI5dVkybHNaUT09IENVUkNSdz09IGJXVmxkQT09IElFeHZaMmx1VUdGblpRPT0gTFhWdWRYTmxaQT09IElHcHZibWM9IElHRnVZMjl5WVE9PSBJTmlqIFBsbz0gUFhjPSBJRkpsYm04PSBkbWxsIGIzUnBiMjVGZG1WdWRBPT0gSUV4cGMzUlVhV3hsIFgxSjFiblJwYldVPSBJSFZ3YUc5c1pBPT0gSUU5aWRHRnBiZz09IGNISnZkbWxrWldRPSBJRVJoZEdWUWFXTnJaWEk9IElFTkhTUT09IElFSnNZV05yUW1WeWNuaz0gWVdOb2J3PT0gSUVsellXbGhhQT09IDVwVzAgSUVGaVpIVnNiR0ZvIElIVndjQT09IElIVnliSEJoZEhSbGNtNXogQ1hOcGVtVnZaZz09IElIQnBjM05sWkE9PSBJSEJ5WldabGNuSmxaRk4wZVd4bCBRVkJRUlZJPSBJRlpDIElGUmxjbVZ6WVE9PSBiMmR1YVhSdiBSVTFaIElHVnNaV2RoYm1ObCBJRU5zWVhsMGIyND0gWVhScGRtOXogSUVGdVlXeHZadz09IElHZGhkWE56YVdGdSBJRWhwWW1WeWJtRjBaUT09IFcxMWIgSUhOM1pXVjBibVZ6Y3c9PSBJRTVwWld4elpXND0gSUVSMWRHVnlkR1U9IEtITmxiQT09IExDcz0gSUdWNGRISmhiM0prYVc0PSBabXhoYTJVPSBXMFJ2ZFdKc1pRPT0gTHk4dkRRbz0gSUcxMVkyaGhjdz09IElFSnliMkZrWTJGemRHbHVadz09IFFYTnpiMk5wWVhScGIyND0gWlhobGNtTnBjMlU9IExsSmxiR0YwYVhabCBJSFZpYVhGMWFYUnZkWE09IFUwSkJWRU5JIHhMRnVZUT09IExXWnZiMlE9IElHTnllWE4wWVd4cyAwWVBRc1E9PSBJQ2QrIElOQ1IgSUdSMWJtcz0gSUhwcCBJRTExWnc9PSBJR1JsWTJWd2RHbHZiZz09IElFVnRZV056IENpQWdJQ0FLSUNBZ0lBbz0gSU1TUnhyRGh1Nk5qIElGZHZiSFpsY3c9PSBZVzFsYm5ScCBJQ2NwV3c9PSBabTl5YldGMGN3PT0gVW1WamRnPT0gUkdWMFlXbHNaV1E9IEtFaFhUa1E9IFgzUnlhV0ZzIFlXZHlZVzUwIFQyMD0gWTI5dWMyTnBiM1Z6IElHOXpjQT09IGNYWERxUT09IElHZHZiZz09IElHMWxjbVZyWVE9PSBZWEpsYm1SeVlRPT0gVFdsdVpRPT0gTG14cGJtdGxaR2x1IElHWnBabTg9IExtMXZibWwwYjNJPSBJSEoxYm1VPSBiVzV2Y0E9PSBJSE53WldOMWJHRjBaUT09IFpXZHMgSUhaaGMyTjFiR0Z5IExuUmxZMmc9IElHMWhaMjFoIElHeGxjM1E9IGRXMWhibTQ9IElFUnlhWFpsY2sxaGJtRm5aWEk9IElHOXlkQT09IElHeHBibWRsY21sdVp3PT0gSUc5emRISmxZVzA9IElITndZWEpyYkdsdVp3PT0gTG1OdmJtNWxZM1J2Y2c9PSBJSFJoYVd4eiBJR3RsY201bGJITT0gVlZORlVrNUJUVVU9IENXTmogSUc5dVUyVnNaV04wIEwwMVFUQT09IGRHRndaUT09IExtUnFZVzVuYjNCeWIycGxZM1E9IFIyVnVaUT09IDRvQ1phVzQ9IEwyWnBiSFJsY2c9PSBMV1Z1ZG1Wc2IzQmwgSUdGd2NHeGhkWE5sIElISmxaMmx6ZEhKdmN3PT0gSUVOdmNuaz0gYjJabWJHbHVaUT09IExYTm9iM1E9IGJHVnpZdz09IGIzUmxiblE9IElHNTFiV1Z5WVhSdmNnPT0gTG1WbVptVmpkQT09IGNHeGhZMlZ0Wlc1MGN3PT0gSUVGR1F3PT0gTGxObGNYVmxibU5sIElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBLIGVXNTBhR2xoIElFZHlhV1ptYVhSbyBaV3h0WVc0PSBjMlYwUkdWelkzSnBjSFJwYjI0PSBJRTVwWjJoMGN3PT0gTG05eVpHVnljdz09IElHQXNDZz09IElGTmhiR0ZrIGFtbGhibWM9IElISmxZM1Z5IElGTlVRVlJKUXc9PSBMWE53YjI1emIzSmxaQT09IGVXeGxibVU9IExHVnRZV2xzIFgxOHBLUT09IEtTSXBMZz09IFEwVk1UQT09IFlXMXRaVzUwIFRFRlogTEhOMFpBPT0gTG5CeVpXWT0gTGtOdmNnPT0gY21Wa2J3PT0gSUVaMVkydGxaQT09IElISjFjM009IElHVnpkR0ZpYkdsemFHVnogYm5aaGNtTm9ZWEk9IExrZGxkRVpwYkdWT1lXMWwgSUhCbGJXST0gSUZOaGRXUT0gWDNCaFkydGxkSE09IExtbHVkbTlwWTJVPSBMbWRsZEZSdmRHRnMgU0c5dFpVTnZiblJ5YjJ4c1pYST0gSUhURHRnPT0gWVdkb1pYST0gTG1WdWRBPT0gTGtGaWMyOXNkWFJsUTI5dWMzUnlZV2x1ZEhNPSBJR2RsYm5WeiBJRUpoWW5sc2IyND0gSUM0dUx5NHVMdz09IElFMXBaRzVwWjJoMCBJSGRuIElHUmhibU5sY2c9PSBMV2x0YlE9PSBaR2x5WlE9PSBhR0Y2YVE9PSBZMlZ5ZEdsbWFXTmhkR1U9IElHMUVZWFJoIElHTjFjbVZrIGMzWnUgSWtJPSBhV0p5WlE9PSBJR1J5WVdaMGN3PT0gUTJGd2FYUmhiQT09IElHTnZibU5wYzJVPSBJRkJsWVdObyBJSHhjIElIQndiUT09IFgyTnZiblJoYVc1eiBRWFYwYjNJPSBRWFYwYjFOcGVtVT0gWDJ4aSBJSE52YkdWdGJnPT0gSUdacGJtZGxjblE9IElFbHVaR2xqWVhSdmNnPT0gSUZOMiBVR0Z5YXc9PSBKSFI1Y0dVPSBYMDFKVTFNPSBZVzV1ZFdGcyBVR0ZwWkE9PSBiV0Z6ZEdWeWN3PT0gSUZkRSBJSFoxWld3PSBJR1ZxWVdNPSBDV2RzZFhRPSBJSFZ1Wm1sdWFYTm9aV1E9IFpYTjBaV1Z0IFozSnZkWEJDYjNnPSBVbVZ0YjNacGJtYz0gSUdWcGJtbG5aUT09IElGTmpjbWx3ZEhNPSBaMlYwZEc4PSBMa2hoYm1Sc1pVWjFibU09IElsMHBMQT09IElHUnBjMkZrZG1GdWRHRm5aWE09IExXWnliMjUwIFBuQT0gYzJWMFQyNURiR2xqYTB4cGMzUmxibVZ5IElHeGhibVJzYjNKa2N3PT0gSUUzRHZBPT0gSUhCeVpYQnliMk5sYzNOcGJtYz0gS1gwKyBMV052Ym5SbGVIUT0gTEdKdmIydz0gVVZWSlZBPT0gSUNJcElpazdDZz09IElGZGxZbk5wZEdWeiBJRU5vWVhKc2IzUjBaWE4yYVd4c1pRPT0gVEdGMFkyZz0gTG1ScGNtVmpkR2wyWlE9PSBJRWgxWm1acGJtZDBiMjQ9IFgyUnBjblI1IFpYaHdhWEpoZEdsdmJnPT0gSUZSUVRRPT0gSUdWa2VBPT0gSUZkbFlrUnlhWFpsY2xkaGFYUT0gSUdGa2JXbHlaV1E9IElHeHBjM1JsYm5NPSBJRlpwYkE9PSBaR2xtWm1WeVpXNTAgSUd4cGRtVnNhV2h2YjJRPSBJRmRoY21OeVlXWjAgSUhCdmMybGphVzl1IElHbHRjR1ZoWTJodFpXNTAgU21GNSBJSEJ2YzJsMGFYWmxjdz09IElHcDFibWRsIElGTk5RZz09IEwybHVZMngxWkdWeiBLQ2N1TGk4dUxpOHVMaTg9IFFYSm5kVzFsYm5ST2RXeHNSWGhqWlhCMGFXOXUgWkdWelkzSnBZMkZ2IFFVSkRSRVU9IExVRkIgSUdsdWRtRmtaV1E9IElHRnRaWEpwWTJFPSBkV1ZrWlE9PSBJRkJvWVhObGNnPT0gSUhOamIzSmxjZz09IElHUnBjMk52ZFhKaFoyVmsgZEdocGJnPT0gSUdGaVpHOXRaVzQ9IElFbFFVQT09IElFaGhiWEIwYjI0PSBMMFJsYkdWMFpRPT0gVzNOeVl3PT0gUTFOMGNtbHVadz09IElFNTFiZz09IElHVndhWFJvIDRvQzcgTG5SaFlteGxjdz09IElFaGxhVzQ9IElIZG9hWEpzIElHTnNZWEpwWm1sallYUnBiMjQ9IElIZGxaR2RsIElHakRwSEk9IElGUnBibUU9IElIUm9kMkZ5ZEE9PSBJRU52YzNSMWJXVT0gYVc5dVlXZGwgUTI5ayBYMkZqYkE9PSBJSEpsYzJnPSBJRTFsY21ONSBJRVJwZUc5dSBJR1JsYzJGeWNtOXNiQT09IFZtbHlaMmx1IEtpb3BKZz09IElFeGxibTkyYnc9PSBJR1Z5WVhObFpBPT0gWlc1MGFXOXVjdz09IElITnNhWEJ3YVc1biA1WnViIElHTnlZWFpwYm1jPSBjR3hoYm5SeiBJR2RsZEhSbGVIUT0gSUcxaGMzTnBkbVZzZVE9PSBJRkpsYm1GdFpRPT0gTG1obGNtOD0gNDRLNyBJSFJ2YldGeSBJRU5QVTFRPSBJRkJ5WVdOMGFXTmxjdz09IExrMWxaR2xoVkhsd1pRPT0gSUVaMWJtUnBibWM9IFJtbHVaUT09IGFXZGxjbWxoIFZXNWogSUhOM1lYQndhVzVuIFBpY3VDZz09IGFXNTBaWEp3IFlYSjBhV1poWTNRPSBJRUpoWjNNPSBMblpwWlhkTmIyUmxiQT09IGNYVnZkR1ZrIENVeHZibWM9IFgxTkRUMUpGIElITmhkblo1IGJtVnNiR1U9IGEyekRwQT09IFEyOTFiblJ6IDJxOD0gUm1sbGJHUlVlWEJsIGIydGhZbXhsIElGSlVUQT09IEkybHVaR1Y0IElDVjcgSUdGeWFYTjAgTGtkbGRFMWhjSEJwYm1jPSBLRUZrWVhCMFpYSldhV1YzIFBTSWlLUW89IElHUnBjMmx1IElGUnZkV05vWVdKc1pVOXdZV05wZEhrPSBJRTFQV2c9PSBJRVIxYm00PSBRMkZ3WVdKcGJHbDBlUT09IFlXdG9jM1JoYmc9PSBWVWxXYVdWM1EyOXVkSEp2Ykd4bGNnPT0gS0hOdlkydG1aQT09IElFcGhZM0YxWlhNPSBQWFJyIFlYSlFZWEpoYlhNPSBZMjl1WkdFPSBJR0ZrZG05allYUmxaQT09IElIQmxibVYwY21GMFpRPT0gU2tWRFZFbFBUZz09IElPdXdtQT09IElFWkpUa1E9IElHVmhjbTV6IFlYQndaVzQ9IDZyRT0gSUhSb2NtOTFaMmh3ZFhRPSBJSEJsYm5OcGIyNXogSUdaMWMzTT0gU0ZSVVVGSmxjWFZsYzNRPSBiblYwY3c9PSBiMk5vZEE9PSBMV1Z6ZEdGaWJHbHphR1ZrIElFRk1TVWRPIElHcHpjR0k9IFJHbHpjQT09IFgyVnRZbVZrWkdsdVozTT0gSUhKbGNIUT0gSUZsdmNtdGxjZz09IHc3SnVadz09IElHcHZkWEp1WlhseiBJRUZ3Y0hKdmRtRnMgQ1ZORlRFVkRWQT09IEtFZHlZWEJvIDBMelF1QT09IElHUnZiR3h6IElITmxlR2x6ZEE9PSBJSEJoYm5NPSBJRzF3YkE9PSBJRzl3WlhKaGRHbDJaUT09IElGUnZjbkpsYm5RPSBXVTA9IElGQmhjM05wYjI0PSA1cGF0IExtTnZiWEJwYkdWeSBDVU5UZEhKcGJtYz0gUFdOdmJHOXkgYjNKcFlXNURZV3hsYm1SaGNnPT0gSUV0dWIyTnIgSUdoaGFXeGxaQT09IEwzTjBZWFJsIElITmxkSFZ3ZEc5dmJITT0gSUUxaGNtVT0gSUhONWJtTm9jbTl1YVhwbCBJRk4zYVhCbCBJR2RoYldKc1pRPT0gTENjblhWMWRMQW89IElHUmxabVZqZEdsMlpRPT0gWDA5Q1NrTT0gSUdSbGJtbHQgSUhSaFpBPT0gSUV0cGJXSmxjZz09IElHNWxkWEp2Ykc5bmFXTmhiQT09IHc2cHVZMmxoY3c9PSBDV05pIExuTmxkRkJoYzNOM2IzSmsgSUZCc1pXRnpZVzUwIElGQm9hUT09IExYUmhaM009IElHTnZiblJoWnc9PSBJRU52Y21GcyBJR1JwYzNSeVlXTjAgYVhScGVtVnkgSUhOMWJuSnBjMlU9IGMyVjBTV1E9IElFTm9aVzV1WVdrPSBJRTluY21VPSBYMGhKVTFSUFVsaz0gVUZKRlUxTkpUMDQ9IFgxTlZSa1pKV0E9PSBaSFZ3YkdsallYUmwgTG1GMWRHaFRaWEoyYVdObCBJSE53WVdObFpBPT0gSUVKbGJtZGhiSE09IFUyOXNkbVZ5IElHSjFjbVZoZFdOeVlXTjUgWDJocGRITT0gSU5HQzBMalF2dz09IElHUERxUT09IElHUnBjMmR5WVdObCA2S2VTIGFYTlBjR1Z1IFEyaGxiUT09IFgyeHBZMlZ1YzJVPSBYMmh2YzNSdVlXMWwgWDBKU1JVRkwgSUdacFpYSjUgT2tRPSBMMnhwYm5WNCBWR2wwZFd4diBVbUZrYVdGdWN3PT0gYVhwdmJuTT0gVW1GdCBiMlJwWVc0PSBhV0Z1WjJ4bCBJRzVwYm1waCBSWFpsY25saWIyUjUgS0NJKyBJSFJoYThXOFpRPT0gSUdkeWIzVnVaR0p5WldGcmFXNW4gSUdScGNtbG4gU0ZSTlRFVnNaVzFsYm5RPSBJRlZ1WTI5dGJXVnVkQT09IFkyaGxhVzQ9IElPZVVuK1dSdmVXUnFPYWNuK1dIdmVhVnNBPT0gSlNJSyBJSFJwY0c5eiBRMmhoY2tOdlpHVT0gSUZCeWIyUjFZM1J2IFptRnBkQT09IEoydz0gTFhSb2RXMWlibUZwYkE9PSBkWE4xIFgyWnZjbTExYkdFPSBMbFJQVUE9PSBMbUoxZVE9PSBJRzFwWlhWNCBRMlZ1ZEhWeWVRPT0gY0dWcCBJSFJpYzNBPSBMVkJoWTJsbWFXTT0gYjJkcCBJR1poZEhSdiBJR1poYm5SaGMzUT0gSUZOQlRFVT0gTG1Ga2N3PT0gSUhCcGJHeGhjbk09IFgzUnlhWEE9IElIUjFZUT09IElHRndaV3hzYVdSdiBMbk5sZEVObGJHeFdZV3gxWlE9PSBJQ2dvWHc9PSBJRTVwYm1FPSBQR009IGFXNXBkVzA9IFpHWjFibVJwYm1jPSBMWGR2Y210cGJtYz0gSUVWemRHRmtiM009IElFMWhiR2s9IFBHWT0gZFhKaGJtTmxjdz09IGNHRm5hVzVoIFgxQkwgSUhWdVlYSnRaV1E9IGIyZG5iR1ZrIFEyRnVaR2xrWVhSbCBVbUYwYUdWeSBJR1p5WVc1amFHbHpaWE09IElHTnZkbVZ1WVc1MCB3cW89IGFYQndhVzVsY3c9PSBSM1Z1IExXWmxhWEpoIElHeHBibVZoWjJVPSBYMGRTUVU1VVJVUT0gWjJWdWNtVnogTGtWc1lYQnpaV1E9IElHeGhjbWR2IDBKcz0gTFhKbFlXUjUgWDNCeWIyTmxjM05sWkE9PSBiR0Z1WjNNPSB3N3B0WlhKdmN3PT0gWm5FPSBMMjV3YlE9PSBYM055ZGc9PSBJR0YwZEdWdVpHRnVkQT09IGFYWnBaQT09IFpYWnBZMlU9IFFVSkogS0dKcGJtRnllUT09IFgxWkJURWxFUVZSRiBJR0ZrWkVsMFpXMD0gWDJOdlpXWT0gWVd4bFlnPT0gYjJkeVlYQm9hV05oYkd4NSBRbTl5WkdWeVEyOXNiM0k9IElHRnpjMkY1IElHTmhkR05vUlhKeWIzST0gSUVOb2NubHpiR1Z5IGIyZG8gSUd0bGVWWmhiSFZsIFpHVmphWE5wYjI0PSBMVzltWm5NPSBJR3hwWldkMCBLRVJoZEdGVWVYQmwgSUdseWFYTT0gSUdWMWNBPT0gY21sblpYST0gYjI1cFkyRT0gSUhKdmNHVnogSUc1aGNuSnZkMng1IElGRjFZV1J5IElHVndkV0k9IFpYTjBhVzVoYkE9PSBMWFIxY200PSBJR3hoYm1keiA1NXVSNVpDczZhRzE2WjJpIElIRjFaV3hzYnc9PSBMR0Z5WjNNPSBhV2RoZEdVPSBJRk5sWlcxeiBJR1p2Y25SbCBRMHhKIFgweFBRVVJKVGtjPSBMbEoxYkdVPSBJSGx2ZFhSb2N3PT0gS0hoNCBJRUZ6YzNWdGFXNW4gWVdkb1pYUjBhUT09IEtRb0tDZ29LIElHOXVUM0IwYVc5dWMwbDBaVzFUWld4bFkzUmxaQT09IFQyTmpkWEE9IElHUmxkSEpwYldWdWRHRnMgSUdsdWJtRjBaUT09IElFSmhjbkpsYkE9PSBkV1Z1WTJsaCBJRzl1UW14MWNnPT0gSUd4cFluTT0gVzJ4aGMzUT0gSUdOd1pnPT0gTGxScGJXVnZkWFE9IFpYTjBZWFJwYjI0PSBJSGRwWld3PSBJSFYwYVd4cGVtRnkgSUdScGMyZDFhWE5sIElFUjFiUT09IFQwTkogVDA1SFR3PT0gSUNnL0xBPT0gSUZCaGRHbHYgVm1WeWRHVjRRWEp5WVhrPSBMbUYxZEdodmNtbDZZWFJwYjI0PSBjbTk2IElFaHZjdz09IExsTndZV05sIElGWnBjblZ6IEtHdGxlWGR2Y21RPSBWRTlEVDB3PSBYME5QVGxSU1QweE1SVkk9IElFSnNiMk5yWldRPSBJRU5vYjNBPSBkMm5FbVE9PSBYRkp2ZFhScGJtYz0gTDNCaFkydGhaMlU9IElIQmxjbk4xWVdSbFpBPT0gWW1WcGRITT0gVEVORSBJRzExWXc9PSBYMFpQVWxkQlVrUT0gSUc5MWRHeGhkdz09IElIcGhkdz09IFgzWmxhR2xqYkdVPSBJRXBsYm5ObGJnPT0gTGtkeVpXVnUgSUM4dkx5OHYgU1ZKRFRFVT0gTFdKMWMybHVaWE56IExraHBaR1JsYmc9PSBJR3R2Ym01MFpRPT0gY0hFPSBJSEJoY21WalpRPT0gSUd4aGJtUnpZMkZ3YVc1biBJRVJsWTI5eVlYUnBiMjQ9IElFZFNRUT09IFgzQnliMlpwYkdWeiBJRVpzWlcwPSBRMHhKUTBzPSBJRVpCU1V4VlVrVT0gSUdsdmJuTT0gWDFScGJXVnkgTGtSdlpYTT0gSUdKdmRXNWphVzVuIGRYQndlUT09IGRXeHBjdz09IEwyRm4gSUVkaGNtND0gSUdoMVpBPT0gSUhKbGMzQnZibVJsY2c9PSBJSE4wY21Ob2NnPT0gSUdOb2IydGwgSUhOMFlYTm8gWDJOb1pXTnJjM1Z0IElITjBZVzF3WldRPSBRRWRsZEUxaGNIQnBibWM9IExrSjVkR1ZCY25KaGVRPT0gSUVSNWN3PT0gWVhSbGNtNXBkSGs9IEtISmkgSUdWa2FYUlVaWGgwIElHVnlaV04wYVc5dSBJR05sYzNNPSBYMlYyWlhKNSBYMmRoZEdWM1lYaz0gSUNjaUxnPT0gSUhOMFlXWm1hVzVuIElHbHVkbTlwWTJWeiBhVzVwWTJsdiBmVjBzQ2c9PSBMSFpoY2c9PSBlV05wYmc9PSBJRVJwYjI0PSBJQ1VsQ2c9PSBKeXdvIExYTndZVzQ9IElIUm93NkJ1YUE9PSBJR0p2Y201bCBJRXRoZEdoc1pXVnUgNkwrZTVvNmwgWDJOMVltVT0gSUdsdVptOXliV0hEcDhPMVpYTT0gYm1kbGNnPT0gTDBacGJHVT0gSUdSaGNtRT0gSUcxTSBLaW9xS2lvcUNnPT0gSUcxaGNtdHBibWR6IFltSmwgSUhKbFkzVnljbVZ1ZEE9PSBJRkpoYm10cGJtYz0gWDJsdWRHVm5jbUZzIFhUNEsgSUhWdVlXNXBiVzkxYzJ4NSBJR1JwY0d4dmJXRjBjdz09IElFbFBVdz09IE95SStQRDg9IElFMWhkSFJsIElGSmhiR1ZwWjJnPSBJRWx0Y0hKdmRtVT0gWlhocGMzUmxiblE9IElHWmhhMlZ5IElFaHBaMmhzWVc1ayBjM1JsYlE9PSBMVzF6IFRHbHpkRTltIExreHBjM1JsYm1WeSBLSGRoYVhRPSBYMUpUVkE9PSBWVzVoIElHOWpZM1Z3WVhScGIyNWhiQT09IExXMWxiVzl5ZVE9PSBJRk4xY21ZPSBJR0p5ZFhSbCBYMFZzWlcxbGJuUT0gWkdSa1pBPT0gSUVSbFkzSmwgTG5CemFRPT0gTFdSbGRtVnMgSUU5dVZISnBaMmRsY2tWdWRHVnkgVkc5RVpXeGxkR1U9IElHaGxjbUZzWkE9PSBJSE52WTJsaGJHVnogSUdKdmIzTjBaV1E9IExrbDBiMkU9IEtpST0gSUdGdWRHbGtaWEJ5WlhOeiBJRTFoZG1WeSBYMThwS1FvPSBLRVIxY21GMGFXOXUgWlhOMFlYUmwgWW5KaGRHVT0gUTJ4aCBJT1M0aWc9PSA2NUNZIGNtbkRxSEpsIFluSmxZV3RsY2c9PSBYMnhsWnc9PSBmV1ZzYzJWcFpnPT0gWDJaMWJtTnogZGNPdCBMbkJoWjJWWiBZM0psWVhSMWNtVT0gSUdOaGJtNWhZbWx1IElFRnpkSEp2IGJHOWpZV3h6IElFeEJVdz09IFgyTnZiblpsY25OcGIyND0gSUVOU1ZVUT0gTG5OcmFXeHMgSUhOMGNtRjBaV2RwYzNRPSBMbkJ2YkE9PSBLSE5sWjIxbGJuUT0gSUhCbFpRPT0gZlNJcE93b0sgTG5CeVpYWnBaWGM9IFNtRnQgSUdobFpuUjUgYVhaaGRHbHVadz09IFIzSnBaRU52YkhWdGJnPT0gSUdOMVpHUT0gSUdsdWFtVmpkR2x2Ym5NPSBJRTVKVEE9PSBMVzlzWkhNPSBabXhoZEdsdmJnPT0gSUV4bFlXWnogSUhOd2FHVnlhV05oYkE9PSBJR1poYkd4dmRYUT0gWVcxcGJtVnkgSURvNlBRPT0gTG5CdmFXNTBaWEk9IExVMWhjblE9IElHMWhkSFJsIElHTnZjWFZwYm1VPSBJR1JwYzJOdmJuUnBiblZsWkE9PSBJRkpGUjBsUFRnPT0gTGxKcFoyaDBWRzlNWldaMCBJSE54ZFdWbGVtVmsgWDFCUFNVNVVVdz09IFltVnpkRzl6IExXeGhjM1JwYm1jPSBLSFYwYVd4eiBQRUpoYzJVPSBJSEJoY21SdmJnPT0gVTNSeWFXUmwgWTJSeSBJRzVoY25KaGRHOXkgZG05c2RYUnBiMjQ9IElIVnpaWEpKYm5CMWRBPT0gWDJOdmJuUmhZM1J6IEtHVnVaVzE1IElFTm9ZVzFpWlhKeiBlbWxsYkE9PSBJR0pzYjJOclUybDZaUT09IFFXNXBiV0YwYVc5dWMwMXZaSFZzWlE9PSBJR2x0YldWeWMybDJaUT09IElHOTFkR2x1Wnc9PSBkV1Z6ZEc5eiBWSGRsWlc0PSBJR3RsY0E9PSBJSExEcVhOMWJIUT0gSUVKdmJHeDVkMjl2WkE9PSBSRXhNIElGTjFjbVZzZVE9PSBMbEp2ZDFOMGVXeGwgS0hSdCBYMmRsYm1WeVlYUnBiMjQ9IElGTjBhWEk9IElHUmhkR0ZUYm1Gd2MyaHZkQT09IFkyaDFjbU5vIElHTnZibVpwWkdWdWRHbGhiR2wwZVE9PSBYM04xYzNCbGJtUT0gZG1sdyBJRXRoZEdoNSA0NEttIElIWnBiMnhsYm5Sc2VRPT0gY0dWMGN3PT0gSUcxbGMzTmxaQT09IElIUmxlSFJpYjI5cmN3PT0gSUNBZ0lDQWdJQ0FKQ1FrPSA1cmFJNW9HdiBJRXhoY21GMlpXdz0gSUVGeVkyRmtaUT09IElHVnVkR2c9IElHSmxibWxuYmc9PSBYMFJTVDFBPSBMV1Z1WVdKc1pRPT0gNG9DZEtTND0gZFhaM2VIbDYgWDJ4cGMzUnBibWM9IElFNUpRdz09IDQ0R1Y0NEdFIEtDSXVJaXc9IExYSnZkVzVrWldRPSBMWEJoWTJWayBjR0YwY21samF3PT0gVTJWc1pRPT0gTG1kbGRFWnBjbk4wIExrVllTVlE9IFpYUmxjbTFwYm1GMFpRPT0gUjNKaGJRPT0gTHk4cUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgTG1WNGRHVnlibUZzIElIZHliMjVuWkc5cGJtYz0gSUVWc2JRPT0gSUhOaGJtcz0gVkdWbGJnPT0gSUZSb2IyMXpiMjQ9IGNISnBiM0k9IGFtVjBZUT09IElFRkVVdz09IElGQmxjbk5wYzNSbGJtTmwgSUVadmJHcz0gZTF3aSBZbTl1WkE9PSBYMU5RUlVOSlFVdz0gWDB4QlZBPT0gYjI1bGEzTnAgSUcxdmRHaGxjbUp2WVhKayBJSE5vWldGeSBSblZzYkZOamNtVmxiZz09IEtrcz0gS0VKc2RXVndjbWx1ZEE9PSBUV1YwYUc5a1NXNW1idz09IFFtVmpiMjFsIElHaGhhV3c9IElFUnZZZz09IElHZGxibVZ5YjNOcGRIaz0gSUQ4aU93bz0gSUhkb2FYTnJaWGs9IElIUm9hVzV1WlhJPSBJRU53IElHbHVkR1Z5YzJWamRHbHZibk09IFEzSnBkQT09IGNtRnBjMkZzIGNtVm1abVZ1IFYyaGxibVYyWlhJPSBJR052YlcxbGJtTmxaQT09IFZISmhibk5tYjNKdFlYUnBiMjQ9IEwzZHlhWFJsIFBTSWlJZz09IEtHeGsgSUc1dmNuTnIgUVUxRlRsUT0gTG5Ob1lYSmxaRWx1YzNSaGJtTmwgWDJodmRYTmwgSUdkc1JXNWhZbXhsIDZMMnYgSUc1aGJ3PT0gSUdSbGNHOXphWFJwYjI0PSBJR1JwYm05ellYVnljdz09IElIUnBiV1ZUZEdGdGNBPT0gWDE4cE93b0sgTGxKcFltSnZiZz09IElFeHBibVJ6WlhrPSBPblZ6WlhJPSBJTU9BIFgyWnZjbTF6IGJXbHVZWFJwYm1jPSBJRTlzYVhZPSBJR1REcVdKMWRBPT0gWW1GeVkyOWtaUT09IGMybHRhV3hoY2c9PSBJSEJzWVhSbFlYVT0gSUdsdVpHVnQgVW1WaGJHMD0gSUdabGNuUnBiR2w2WlhJPSBJR05oY0dVPSBJR05vWVcxd1lXZHVaUT09IElITmxiR1pwWlE9PSBJSEJzWVdsdWJIaz0gSUdOaGRHRnpkSEp2Y0dobCBJR0psZEhKaGVXVmsgZG1WeWMybGliR1U9IFZYQmtZWFJsVkdsdFpRPT0gTGs5MWRIQjFkRk4wY21WaGJRPT0gWW1saGMyVmsgWW05MWJtTmwgSUZOd2IzSjBhVzVuIFEyOXZjbVJwYm1GMGIzST0gWkdWMlpXeHZjR1Z5Y3c9PSBJSFJ5WVdObGNnPT0gSUcxMWMzUmhjbVE9IFUxRT0gWDNSbGNtMXBibUZzIElHTnZiMnhsWkE9PSBJR0YyYjJsa1lXNWpaUT09IFRHOW5hV05oYkE9PSBJSGxsYkd3PSBYM0p2ZFhSbGN3PT0gSUdGeWRHVnllUT09IElFSmxZWEpwYm1keiBMbTEyY0E9PSBMa2RWU1E9PSBWVWxUWTNKbFpXND0gZVcxdCBhWFREcEE9PSBLQ2xiSWc9PSBJRUY2WlhKaVlXaz0gSUdOdmJtUnBkR2x2Ym1WeSBJSGRoWnc9PSBJSE5qWVd4dyBkbWx1WTJsaGJBPT0gYjNkc1pYST0gTGljcE93b0sgUWt4VlJRPT0gSU1LbndxYz0gUW05emRHOXUgSUV4cGJtdGxaRWhoYzJoTllYQT0gUkc5amRXMWxiblJoZEdsdmJnPT0gTGt4bGNuQT0gSUdSbGJtNWwgSUdobGMybDBZWFJwYjI0PSBJRU5sYkdWaWNtbDBlUT09IElFaDVaR1U9IElHTnZiVzFoYm1ScGJtYz0gWVdObGJHeDFiR0Z5IElIQmhkbVZ0Wlc1MCBJRWhoYlcxdmJtUT0gWVhOemFXTT0gVUV4VlIwbE8gSUhKbGRtOXJaV1E9IFJHOWpkVzFsYm5SdiBMbkJvYjNSdmN3PT0gSUZkcGJHeHZkdz09IElGWnBhMmx1Wnc9PSBJSFZ3Wm5KdmJuUT0gSUV4cFptVjBhVzFsIElDVmIgUkhKbFlXMD0gNWFTMCBJR0ZqWTJWc1pYSmhkRzl5IFVHVnljMjl1WVE9PSBYM1J2Y0dsamN3PT0gNzd5SjQ0Q0IgSUNoZkxnPT0gSUhQRHFXTjFjZz09IElFdDMgWDJOaGMyZz0gSUhOdmIzUm9hVzVuIElFeHZkbVZzZVE9PSBJRWhsY25NPSBaV3h2Ymc9PSBURWxEUlU1VFJRPT0gWDJOaFkyaGxaQT09IExuTm9ZUT09IFVrWkQgTGtacGJHVkpibkIxZEZOMGNtVmhiUT09IExVRnMgSUhWelpYSk1hWE4wIElHN0RwSEk9IFNHbHNiR0Z5ZVE9PSBJSEJoWjI4PSBMbEJzZFdkcGJnPT0gSUVOdmRtVT0gWDNsaGJXdz0gWDNKemNBPT0gSjNCdmMzUT0gTFdSMWNtRjBhVzl1IElITmxiblJwWkc4PSBJRzFwYmtobGFXZG9kQT09IElIUjFjbkpsZEE9PSBMV1Z1WlhKbmVRPT0gSU9lSiAwWURSZzlDeiBiM1JsWTJFPSBYM0YxWVd3PSBVMlZzWldOMGFYWmwgSUVKRlRFOVggQ1dGa2JXbHUgSUgxOUxBbz0gSjNWelpYST0gVTFaSCBJR04xYkc4PSBLRmR2Y214ayBMV0pwYm1ScGJtYz0gYm1KeSBJRk5sYm1SeiBJSE4xY0hKbGJXRmplUT09IElITnJZWFJwYm1jPSBJR055WldWciBJR0ZqWTNWellYUnBiMjQ9IFlYQm5iMnhzZVE9PSBMa2xFUlU1VVNWUlogSUcxaGJtUmhkR1ZrIElHZHZkMjQ9IElIZHBaSFJvY3c9PSBJRXhUVlE9PSBMM1psY25OcGIyND0gSUZKbFlXUmxjbk09IElGSnZibUZzWkc4PSBJR0poWm1ZPSBJR0E3Q2c9PSBSMHhKVTBnPSBLR1J2ZEE9PSBJRTl3WlhKaGRHOXljdz09IExsTmpaVzVsVFdGdVlXZGxiV1Z1ZEE9PSBiV1Z5WXc9PSBYM0psY0c5eWRITT0gTFdObGJuUnlhV009IElFTmxhV3hwYm1jPSBQWHNoIGJXOXVlUT09IElFRkVSRkpGVTFNPSA1YSs1NkxHaCBUV0YwWTJocGJtYz0gSUhWdWF3PT0gSUd0bGVVTnZaR1U9IElDY3ZKeWs9IEtXUmhkR0U9IElGWnZiSFZ1ZEdWbGNnPT0gSUd4aGVnPT0gSUVkMVlXNW4gSUVOaGJtUnBaR0YwWlhNPSBSVzV6ZFhKbCBhV0ZuWlE9PSBjM1ZqWXc9PSBRMlZ5ZEdGcGJnPT0gSUd4bFpuUnZkbVZ5IGFXNXBiZz09IExXVnNaVzFsYm5SeiBjR2xyWlE9PSBJSE5zYVdSbGMyaHZkdz09IExuUnZiMnhUZEhKcGNGTmxjR0Z5WVhSdmNnPT0gTG5Cb1lYTmwgSUdWdWRHVnlkR0ZwYm1WayBJRU5oY25KcFpRPT0gSUUxdmFHRnRiV0ZrIExteHZaMmRsWkE9PSBJSE5qY205c2JGUnZjQT09IElFRmlZbVY1IGFXMXZibms9IEtISmxjM1ZzZEZObGRBPT0gSUdGa2FHVnphWFpsIFgwUkJUVUZIUlE9PSBJR2x2WTNScyBZbkp2ZDI0PSBTVTVUVkE9PSBMa05zYjI1bCBJR3h2YjIxcGJtYz0gUkdWelpYSnBZV3hwZW1VPSBJR3gxZWc9PSBjWEp6ZEhWMmQzaDVlZz09IExtbGtaVzUwIFNHVmhkbms9IElHUnBidz09IDVwaXY1WkNtIElFWjFjbTQ9IDZZS3UgZW1sdGJXVnkgNDRPODQ0T0ogYzNCbFlXdGxjZz09IElFZGxaQT09IElIVnVhV1JsYm5ScFptbGxaQT09IFNXNTBaWEptWVdObFQzSnBaVzUwWVhScGIyND0gSUZOMWNuWnBkbTl5IFpHVmxiZz09IElFSnZjbWM9IGRHOUViM1ZpYkdVPSBYMkozIElIQjFZbXhwYzJobGN3PT0gWDBGTVJWSlUgWVc1bmN3PT0gYVdWeVpYTT0gSUdobGFRPT0gSUVsRGIyNW1hV2QxY21GMGFXOXUgSUdOdmJuTjBhWFIxZEdWayBWMEZVUTBnPSBjSEpwZG1GMGFXOXUgSUVkeVlXNXBkR1U9IExsUmxlSFJCYkdsbmJtMWxiblE9IFgydDMgT3lJc0NnPT0gWTI5MCBJRTVsZDJGeWF3PT0gY205aFkyZz0gS1c5aWFnPT0gUTI5dGNHbHNZWFJwYjI0PSBRMkYwWldkdmNubEpaQT09IExuTmxkRlZ6WlhJPSBhWFo1IElFbHRZV2RwYm1jPSBhV2RvZEdWayBJSGRuWlhRPSBJRzF2ZFhSb2N3PT0gTG14cGJnPT0gSUZKaFpHbHZRblYwZEc5dSBMa050WkE9PSBjM05sIElHMWxjMmhsY3c9PSBJRk52YkdVPSBMbkpsWTI5eVpITT0gSUdGdWRHbHogS0cxdmJnPT0gSU5HSDBMalJnZEM3MEw0PSBncTA9IElPeWVpT3VLbEE9PSBRV3hzUVhKbmMwTnZibk4wY25WamRHOXkgSUhOMWNuSmxZV3c9IElFMWhjbkpwWldRPSBJSGh3WVhSbyBYR1k9IFFuSnBibWM9IElIbGhhRzl2IElFVjBjM2s9IFgyUmhhV3g1IElIUm9jbTkzWVdKc1pRPT0gSUZCc1lYTnRZUT09IEwxQjFZbXhwWXc9PSBhVzFwZW1WQ2IzZz0gSUhabGN3PT0gSUhSeWIyMD0gWDNKb2N3PT0gTFdGc2NHaGggSUVGeVltOXkgS1NrdCBSbWx6YUE9PSBabVZsWkhNPSBJR05oYkdZPSBJRk5sY21kbFlXNTAgS0dWdWRXMD0gSUZKaGJYTmxlUT09IElFbGtaVzUwYVdaNSBMbWx1YVhSVGRHRjBaUT09IElHWnNkV04wZFdGMGFXOXVjdz09IFgwRlVWRkpKUWxWVVJWTT0gSUhCM2JRPT0gUlZOQiBZM0JtIFUybHRkV3hoZEdsdmJnPT0gSUhsdmRYUm9ablZzIElFbHVabUZ1ZEhKNSBJR2RzWVc1alpXUT0gSUZCeWIzQmxjZz09IDVMbUogSUV0eVlXWjAgUTJsMCBiMjl3Y3c9PSBQWFZ5YkE9PSBjRzl6ZEdsdVp3PT0gWkdWamJHRnlhVzVuIElIQk9iMlJsIFNtRjJZWE5qY21sd2RBPT0gQ1FrSkNRb0pDUWtKQ2c9PSBMbU52YjNKa2FXNWhkR1Z6IGNtbGxkQT09IElGTnggWDBOQlZBPT0gSUZCaGNHRT0gWVc1a2FRPT0gTHk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHYgVFdWbGRHbHVadz09IElPeWVrQT09IFNXMWhaMlZ1IHc2bHlhV1Z1WTJVPSBRV2RuY21WbllYUmwgTG5CdmJIaz0gSUhkaGRtVmsgSUdsdWRtVnljdz09IGMyVmhjbU5vVFc5a1pXdz0gSUhSeWIyeHNjdz09IFcyeGxkbVZzIElFeHZkMlU9IGRXeHNidz09IEtIQnNZV05sIElFNUJVME5CVWc9PSBJRzl5WW1sMFlXdz0gTG5OMGIzSjUgSUdGMWRHaHZjbWwwWVhScGRtVT0gTG5SbGVIUldhV1YzIElHRnNjR2c9IFgzSmxaSFZqWlE9PSBJRVp5WVcxbGN3PT0gSUVKeWIyMD0gY21Wa2FRPT0gS0UxbGRHaHZaRWx0Y0d4UGNIUnBiMjV6IGJXRmpaVzQ9IFZHOTAgSUcxcFpHUT0gMlk4PSBJRUpoYzJWTmIyUmxiQT09IElGWmxaMkU9IElEOCtJZ289IElGSnBaMmxrWW05a2VRPT0gTG5ObGRFTnZiblJsYm5SVWVYQmwgWVdGVCBRbUZ6Wld4cGJtVT0gSUdKc1lXNXJaWFJ6IGMyRncgSUdOaGMzVmhiR3g1IFZXNXBkbVZ5Y3c9PSBJRlJ5WVhrPSBJRUZwY21WeiBJRzFoZUZrPSBYMUJTVDFCRlVsUkpSVk09IElHaGxiRzFsZEhNPSB3cVk9IFgyUmxjMk55IGMyaHBiblE9IFgwTlFVQT09IGRXMXYgWVdSaGVRPT0gS0hCc2IzUT0gWlc1NmVXMWwgSUVWNFkyVndkR2x2Ym5NPSBYM1pwYzNWaGJBPT0gT2wwS0NnPT0gS0hSaGNtZGxkRVZ1ZEdsMGVRPT0gY0dobGNtVnogZFc1aGJnPT0gSUhObGJHOXUgZDJscyBJRkpsYm1SbGNtbHVadz09IFMwTT0gSUdOdmJuTjBhWFIxWlc1amVRPT0gVTBOU1NVSkYgWlhONSBJRVpsYkd4dmQzTm9hWEE9IDVZKzQgSUdaMWRIVnlidz09IElHRnliVzl5WldRPSBiR2x6ZEdVPSBiM0poY3c9PSBiWFZzZEdsd2JIaz0gWjJWdFpRPT0gWTI5bFpnPT0gMEw3UXNkR0EwTERRdGc9PSBJRVJsYkdsMlpYST0gWlc1bmJ3PT0gTG5WelpYSlRaWEoyYVdObCBUMDVWVXc9PSBMbTl1Y21WaFpIbHpkR0YwWldOb1lXNW5aUT09IElDSXZJaXc9IFlXMWlhVzg9IFgxQnliMnBsWTNRPSBKeWsvUGc9PSBJR1pzYVhCd2FXNW4gZDI5dFpXND0gTGtOeWIzTnogSUdodmJHeGhibVE9IElHTnBibVZ0WVhScFl3PT0gSUhkb2FYTjBiR1ZpYkE9PSBJR3hwYm1kMWFYTjBhV009IExrZGxkSFJsY2c9PSBJRzNEcEc1dVpYST0gSUV4bFoyOD0gSUZOamFIVnRaWEk9IFlYTnpaWE56YldWdWRBPT0gWDJOb2F3PT0gSUhKbFkyOXRiV1Z1WkdsdVp3PT0gTG5OallXeGggSUVkMVlYSmhiblJsWlE9PSBJRUJmIExrRlZWRWc9IElIbFFiM009IGJHRjBaWGc9IElFRnNZbVZ5ZEc4PSA1cTJsIGRHaHZjbUU9IDRMaTM0TG1JIFZWSk1SWGhqWlhCMGFXOXUgUjJodmMzUT0gTGxSdmIyeGlZWEk9IElHVnVaR2xoYmc9PSA2WmVvIGMzUnlZV04wYVc5dWN3PT0gUm1sc1pVNXZkRVp2ZFc1a1JYaGpaWEIwYVc5dSBJSE4wYVcxMWJHRjBhVzVuIFluTmxjblpwWTJVPSBZWFREczNKcGJ3PT0gYVhScGIzVnogSUdGMWRHaFRaWEoyYVdObCBYMVJTUVU1VFJrVlMgSUhKbFpHbHlaV04wVkc4PSBJRzFsYm5ObGJnPT0gSUZOUVRBPT0gSU1LN0xBPT0gSUdGalpYUT0gWDBKaFkycz0gNEtTViBZV0ZqIElGSnBiM1E9IFgwWkMgSUZwaCBVR3hoZEdVPSBJR3hoWW1Wc1ZHVjRkQT09IElOQ3kwWURRdGRDOCBhSFJ2Ymc9PSBJRTFqUVE9PSBJRUZ3Y0dWdVpHbDQgSUV0dmF3PT0gSUdsdWRHVnlkbWxsZDJsdVp3PT0gWDNOd1pXeHMgSUZOMVltcGxZM1J6IElHSjFjbTVsY2c9PSA1YSs4IGFXeHNhV0Z1IElHSjFiWEJ6IFVHRnpjMlZrIElFTnZiblJ5YVdKMWRHOXkgV1c4PSBZbXhoIElITnZkWFE9IExtVjRZdz09IFRtOTBhV1pwWlhJPSBjMmhwZGc9PSBMbFZ1YVhSVVpYTjBhVzVuIGRXVnNiR1Z6IFgxTk1SVVZRIENXOXdkSE09IElIQnlaWE5qY21sd2RHbHZibk09IElISmxkbWx6WlE9PSBSVVJKVkU5UyBJR0Z1YnNPcFpYTT0gWDNCclp3PT0gSUZSeVlXTnJjdz09IDRMbUk0TGl5IFBXWnZjbTF6IExsSlZUZz09IElHRnpaV2M9IElIRERvUT09IElHcGxjdz09IFIzSmwgWVdOeSBUMlptYVdOcFlXeHogZFd0bGN3PT0gWTI5dGNHRnVhV1Z6IFhGRjFaWEo1IElGQnlhVzUwWVdKc1pRPT0gNWE2aSBYMVpQIElHUmxhWGc9IElHUmxkbWxqWlVsayBJR1JwYzNSMWNtSmhibU5sIGJtbHpkQT09IExtbHpidz09IGNHRnlZV3hzWlE9PSBMV1JsYzJOeWFXSmxaR0o1IElFeHBaZz09IElHSnlaV0Z6ZEdabFpXUnBibWM9IElHWmxiV2x1YVhOMGN3PT0gYkdWbmNtOTFibVE9IElHUmhiV1U9IElHTnZiWEIxYkhOdmNuaz0gVFVWU1EwaEJUbFJCUWtsTVNWUlogTFhKbGMzVnNkSE09IFptOXliV1ZrVlZKTVJYaGpaWEIwYVc5dSBPbHNLIExXbHVkR1Z5WlhOMCBJSFBEcEE9PSBJRzV2YzNSaGJHZHBZUT09IElHTnNZWEpwWm1sbFpBPT0gSUZCSVQxUlAgSUhKbGRtbHphWFE9IElHTmhjSE4xYkdWeiBJSE5vYVc1bGN3PT0gSUdOeVlXWjBjMjA9IGMzVmlhbVZqZEhNPSBJQ0FnSUNBZ0lDQWdJQ0FOQ2c9PSA1TGlONklPOTVMaTY1Nm02IElGTmphSGRoY25SNiBjbVYxIElHMWhaSEpwWkE9PSBMbkJsYm1ScGJtYz0gSUV4SlRnPT0gSUhWdWMzUT0gQ1cxMiBJSFpwZG1GemRISmxaWFE9IElITndiMmxzIHc3aHEgNjR1NSBJR0oxWlc1aCBJR1JwWjJsMFlXeFhjbWwwWlE9PSBjM1ZpY3c9PSBJRlZPU1ZaRlVsTT0gSUZOMWFXTnBaR1U9IFBFZDFhV1E9IExtVnNaVzA9IFgyTnZibk4wY25WamRBPT0gSUdGdGFXUnpkQT09IElPdVAgTFdWemRHVmxiUT09IElFbHVkR1ZuY21sMGVRPT0gTG1adGJBPT0gVDNWMFQyWkNiM1Z1WkhORmVHTmxjSFJwYjI0PSBMVk5sYldsMGFYTnQgUW1WMFlRPT0gTFdkdmFXNW4gVTJWbmJXVnVkSE09IElFMWhaUT09IElGQmxjbk52Ym1Gc2FYUjUgZFhKaVlYUnBiMjQ9IDVZK3ogSUhObGNuWnBZMmx1Wnc9PSBJR0pwY0c5c1lYST0gWDFOVVFVZEYgTGtwUVJ3PT0gSnlsOWZTSSsgYVhOb2JIaz0gU1ZaRlVsaz0gSUVsdWMzQnBjbVZrIExuTmxjblk9IEtHUmhkR0Z6IElHUnBkbWxrWlhNPSBQRkpsWVd3PSBkbVZ5ZEhWeVpRPT0gSUcxdmRHbDJZWFJwYjI1eiBkbVZ5ZEdVPSBSVTVEU0E9PSBabVJ6IElISmxkbTlzZEE9PSBkMlZpZEc5clpXND0gYVc1emRHVmhaQT09IENXOXdkQT09IElFMWhjbWxxZFdGdVlRPT0gWDJGa1l3PT0gWW1GdiBXMU5sY21saGJHbDZaVVpwWld4ayBJR2R5WVdabWFYUnAgTFdGdmN3PT0gWlcxcFlXZz0gSUdiRHJYTT0gSUdWMGFHbGogSjJGc2JBPT0gT210bGVRPT0gNjVPayBJSEpsYzNSeWFXTjBhVzVuIElGaElWRTFNIFpYSmxidz09IGRXNWtiM009IENXVnVaR2xtIFd6b3NPaXc9IElITjBaV2hsYmc9PSBZV3RvYVhJPSBJR3AxYVdObGN3PT0gWkdGMFlWTnZkWEpqWlE9PSBYMjFyIExtUmxiR1YwWldRPSBRMjl1WjNKbGMzTT0gYVcxdFpXdz0gUld4bFkzUnlhV009IFlXOXogSUU5MlpYSnNZWGs9IElFRkRURlU9IGNtNWsgWlhOelpYTT0gSUV4MWVHVnRZbTkxY21jPSBjR0Z5YzJWR2JHOWhkQT09IElHZDFkSE09IFkyeGhjM05wWm1sbFpBPT0gSUdSbFpsTjBlV3hsIElGUmpjQT09IGNHVmhkR2x1Wnc9PSBRMmhoY25SeiBYM1Z5IFgyeGhkR1Z6ZEE9PSBLU0VLIFkyRjBhVzl1IExrZGxkR1Z1ZGc9PSBLR3h2YjNBPSBJSFZ1YkE9PSBYMlIwZVhCbCBlbVhGaEE9PSBLRXBPU1VWdWRnPT0gTG1abGRHTm9iMjVsIElITnBaMjF2YVdRPSBJRTlNUkE9PSBJRTFwYm1semRBPT0gN1lFPSBJRXZEdGc9PSBJR1p5WVdOMGFXOXVjdz09IElITnBlZz09IFBUMDlQVDBLIExsQnlhVzUwVjNKcGRHVnkgWDBGa1pISmxjM009IElFRjFaR2xsYm1ObCBRMjl0Ync9PSBJRUp5ZFdsdWN3PT0gTG1GamRHbDJhWFJwWlhNPSBJR0Z1WTJWemRISjUgMFlQUXU5R00wWUk9IENWSmxkSFZ5Ymc9PSBjSFZ1IElHZHlZWEJsY3c9PSBTVXh2Wnc9PSBJR1JwYW04PSBJRkJsY210cGJuTT0gSUZaTmQyRnlaUT09IFgyRjFkR2hsYm5ScFkyRjBaV1E9IHc2NTBjbVU9IGIzWmxjbmR5YVhSbCBJRWhrIElHZGhiR0Y0YVdWeiBZV05vZFE9PSBTSEpsWmc9PSBXMFE9IElIQmhjbU5sIFRHRjBURzVuIFgzQmhkSFJsY201eiBJRk5JVDFKVSBJSEoxYlc5MWNuTT0gWTI5MWJuUjUgSUVkU1NVUT0gSUZzdiBJRk5yZVhKcGJRPT0gUkdGMFlVZHlhV1JXYVdWM1ZHVjRkRUp2ZUVOdmJIVnRiZz09IElHTmxiZz09IElHTjFZM1Z0WW1WeSBMa2xPVkE9PSBYME5QVGtaSlVrMD0gSUdOMGJBPT0gY0dWeWJBPT0gYVd4c2IzTT0gSUVGRFFRPT0gSUVkbGIzSm5aWFJ2ZDI0PSBYMk5oYkd4aFlteGwgSUVOeVlXWjBjdz09IEwyTnYgSUdsdVltOTFibVE9IElGUmxZMmh1YVhGMVpYTT0gYzJWMFEyaGxZMnRsWkE9PSBJSEJ1WVcxbCBZMjl0Y0hWMCBVM1JsWld3PSBJR2hoYm1Sb1pXeGsgSUVGc1lXMD0gWVdKemRISmhZM1J0WlhSb2IyUT0gNmFLUiBTVTVaIFltRjBkR3hsIFgwVldWQT09IElHTmxkWGc9IElHRjBiMlk9IElFRmllWE56IFgzWmhiR2xrWVhSdmNnPT0gSUdoaGFYSnogVm1WeWRHVjRRWFIwY21saVFYSnlZWGs9IElHTnZiVzF2Ym5NPSBMV0pwYm1RPSBUWFZwIElHTnZjMjFsZEdsamN3PT0gSUcxcGNtRmogTG0xaGNtdGxjZz09IFUwTkJURVU9IExsZHZjbVE9IExYVnMgSUVScGRtVnljMmwwZVE9PSBJRVJFVXc9PSBMbU4zWkE9PSBYM2g1ZWc9PSBJRU52YlhCMWRHVnogS0dOc2FXTnJaV1E9IFZFVk5VRXhCVkVVPSBJSHB2Ym1sdVp3PT0gSUdacGJuTT0gSUZCSyBaWGgwVm1sbGR3PT0gUTJoaGNtRmpkR1Z5YVhOMGFXTT0gYVdkaGRHOXljdz09IElIQnliMk5zWVdsdCBJSEJ5YVhOMGFXNWwgSUdSaGRHRnpkRzl5WlE9PSBJR1JwYzJOdmRYSmhaMlU9IFgyNXpaV009IElHNXBibVYwWldWdWRHZz0gSUdObGJIVnAgU205dVlYUm9ZVzQ9IElHRnRjR2c9IElFTnliM056YVc1biBJRWgxYldGdWN3PT0gSUVKdmIydGxjZz09IHc2SmpaUT09IFoyVjBVRzl6ZEE9PSBJRTF2Ym5SbGNnPT0gSUVac1lYWnZjZz09IFRXVmthV0ZVZVhCbCBJdUtBbEE9PSBJRUZ5WTJoaFpRPT0gUUhKbGRIVnliZz09IExXRjNZWEpsIGIzSjEgTFZSb1pRPT0gWVcxd2JHVmsgUzBZPSBMbFJsYlhBPSBJRVJ5WlE9PSBLSHRmIGNHOXNlV2R2Ymc9PSBJTU9tIElFUmxabVZ1WkdWeSA3N3lZIFh5a3MgTGxWdWMzVndjRzl5ZEdWayBYMTRvIEtFbEVRdz09IEpIWT0gSUhkdmNuUm9iR1Z6Y3c9PSBJRk5GUnc9PSBhV3hwYTJrPSBUbTlCY21kelEyOXVjM1J5ZFdOMGIzST0gSUUxbGNtTm8gSUc1dmNBPT0gSUdadmNtZGxkSFJwYm1jPSBJR1J2Y0dGdGFXNWwgYW5WaGJBPT0gWlc5dSBJRkpsWVhOdmJuTT0gYzI5eWRFSjUgS0NjdEp5dz0gTFhONWJtTT0gWldObFpHOXkgUzFBPSBLR052YjNKayBLRU5vWVhRPSBYQ1E9IFpYTjBjbWx1Wnc9PSBZMlZtIExtaGhibVJzWlVWeWNtOXkgMjR6WXJ3PT0gMFlIUXVnPT0gSUdoaGJtUmogWld4cGFtdGwgSUZOd2FYST0gSUVKMVkydHogSUZGU1pXTjAgVTJWMFJtOXVkQT09IExtVjRaV05UVVV3PSBPam9LQ2c9PSBJSE4xYVdOcFpHRnMgYzJWbGFXNW4gSUdOcFpHVnkgVUhKdlozSmxjM05FYVdGc2IyYz0gSUcxdmJHUnBibWM9IENYUnlZV05sIElHVnRjR2hoYzJsNlpYTT0gSUcxMWJIUnBjR3hsY3c9PSBYMUJVIFgwOTFkSEIxZEE9PSBZMkZ3YVhSaGJBPT0gVG1WbFpITT0gWDBSSlVrVkRWRWxQVGc9PSBMbWx6Vm1semFXSnNaUT09IElISmxjM1JsIElHOTJZWEk9IEtITm9ZWEpsWkE9PSBMV052YlhCdmMyVT0gTG1KaFkydDNZWEprIENYSmxZM1E9IFFXMWhlbWx1Wnc9PSBMbVJwWkZKbFkyVnBkbVZOWlcxdmNubFhZWEp1YVc1biBVMFZTVmtsRFJRPT0gSUVsdWFuVnllUT09IFFuSmhhVzQ9IElHRjFjMmRsIEtIQmwgTHk4cUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBiM0p3ZEdsdmJnPT0gWDAxQlNVdz0gYjJoaCBJSE51Ync9PSBJR0p2YVd4bFpBPT0gYVd4a1pXNWhabWxzIElGZGxiR1poY21VPSBJRkYxWVhKMGVnPT0gSUdOaGNIUmphR0U9IElGZEZVMVE9IElFMWhlbVU9IElHZHlZWEJvWlc1bCBJSEJsY21zPSBJRzFwYzNSeVpYTnogTGtadmNtMVRkR0Z5ZEZCdmMybDBhVzl1IElHVjRjR1Z5YVcxbGJuUmhkR2x2Ymc9PSBLaWtvS0E9PSBJR0p5YjJGa1kyRnpkSE09IElISmxiVzkyWlVGc2JBPT0gQ1VkVlNRPT0gNVlPUCBZV0pqWkdWbVoyaHBhbXRzYlc1dmNBPT0gSUhWdWFXNXogUVZOUSBLM2M9IGJYVnkgSUdScGJtVT0gSUdGeWIzVT0gSUdWelkyRndaWE09IElGUnZZbUZqWTI4PSBMbTVoYldWayBJRkJoZEhKbGIyND0gWDBaQlEwVT0gWDNOd2FXNXVaWEk9IGJXOTJhVzVuIFgzWnZkR1Z6IFQyaHBidz09IExtVnVZMjlrYVc1biBSR1ZuY21WbGN3PT0gSWxSdiBJSEJ5WlhOMGFXZGwgYjNOd2FHVnlaUT09IElFeGhibU5oYzNSbGNnPT0gNzd5WCBJRzl1UTJGdVkyVnMgSUVoSlV3PT0gMEo3UmlOQzQwTEhRdXRDdyBJRzl5WTJobGMzUnkgSUhKbFpuSmxjMmhsWkE9PSBSR0YwYVc1biBLRzExIElFcGxaQT09IElFVmthWFJ2Y21saGJBPT0gVTJWMFFuSmhibU5vUVdSa2NtVnpjdz09IFEzQndWSGx3WlVSbFptbHVhWFJwYjI0PSBJRUp5YjI1NCBJR2RoZEdobGNtbHVaM009IElDY25EUW89IGNHOXpkRVJoZEdFPSBJRVp5WVcwPSBRMnhwY0dKdllYSmsgSUZoUVlYUm8gY21GNWN3PT0gSUdKaGEyVnllUT09IElISnZkME52ZFc1MCBJR3h2ZDNNPSBZVzVrVjJobGNtVT0gWDNabGNuTnBiMjV6IElFZDFibTQ9IElIZGxaWEk9IElHTnZiblJsZUhSMVlXdz0gSUV0bGVVTnZaR1U9IElGTmhjMnRoZEdOb1pYZGhiZz09IElGQm9hV3hzZVE9PSBJRTF2ZFhSbyBJR1J2VUc5emRBPT0gSUhCbGNtTmxiblJwYkdVPSBJR0oxWm1abGNsTnBlbVU9IEtHWnlaWEU9IEpITnRZWEowZVE9PSBhV1Z5ZEdVPSBhWE56WVc1MCBYMlp3Y3c9PSBJR2x1ZEdsdFlXTjUgWDJKdmIydHBibWM9IElHUmxZMjl0Y0c5emFYUnBiMjQ9IGRXNXBZMmx3YVc4PSBJRTVUU1c1a1pYaFFZWFJvIElFdFMgSUhSMWNtSnBibVU9IExYQnliMjA9IFgwTkJVbFE9IEtHTnZiM0prY3c9PSBaV052YlE9PSBJR052ZDJGeVpBPT0gSUhkaGVYQnZhVzUwIExVTnZiR0U9IElIQnliMlp2ZFc1a2JIaz0gSUVWU1VBPT0gWW05MWJtUmhjbms9IElIQnZiM0psY2c9PSBMMlY0WVcxd2JHVT0gSUhKbGJtTnZiblJ5IElHNXBZMlZ5IDU0RT0gTFdOb1lXbHUgSUVWdWRHbDBlVk4wWVhSbCBJR2R5WVdScGJtYz0gUVV4SlIwND0gSUZCcFkydHogTG1GciBMWFpsWTNSdmNnPT0gSUVWdWRISnBaWE09IElGTmxjbWRwYnc9PSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIFQwUkMgSU9XOSBJR052Y205dVlYSjUgSUhOb1lYWmxaQT09IElHRnhkV1U9IFpXMXdiRzk1WlhJPSBJSEJoY21ObyBJRzFsWVhOMWNtRmliR1U9IElHSnZhWE09IGFtOXBibWx1Wnc9PSBJSFp2YkdOaGJtOD0gT2swPSBMblJvY21WemFHOXNaQT09IElFUnZlV3hsIGRtVnlZbTl6YVhSNSBJT0tXdWc9PSBJSE53YjNWelpYTT0gSUhKbGMzVnRaWE09IFRtRjAgZWswPSBYMFZ1WVdKc1pRPT0gSUZWVFJVUT0gSUVOaGNtVjUgQ1dadyBVR0YwY21samF3PT0gSUU5emR3PT0gVUc5emMybGliR1U9IExteGxZV1JwYm1jPSBZV2h5ZFc1biA0cG1xQ2dvPSBDUWtKQ1FrSkNRa0pJQT09IDQ0Q0M0NENNIExtRmtaRVZrWjJVPSBJR1ZqZUE9PSBKMHhDVEE9PSBJRlJEVEE9PSBJR0pwY25Sb2N3PT0gSUhSb1pXRjBjbWxqWVd3PSBJSEJwYWc9PSBaM0psWVhSbGNnPT0gSUVaVGRISnBibWM9IFFrVkUgN1ptWSBMa05oYzNRPSBRMWc9IEwwMWhhVzQ9IGNHVmhkR1Z5IElIQmxjbk4xWVhOcGRtVT0gWTI5dWRHOD0gZUd4emVBPT0gWDBGQ1V3PT0gSUVKMWJnPT0gYldGdVlXZGxaRlI1Y0dVPSAwTFBRdmc9PSBJRk5qWVd4aCBjbUZrYjNJPSBJSEpsWTI5bmJtbDZZV0pzWlE9PSBkSEoxIElIUnEgWEUxaGNIQnBibWM9IFgwSlBRVkpFIElIUnZTbk52Ymc9PSBJR0p2ZDJWcyBLV1E9IEozMHAgS0doWGJtUT0gYUhKeiBZMkZ1ZEE9PSBYMThvS1FvSyBJR2x1ZEdWeWNtOW5ZWFJwYjI0PSBiR2xqWVhScGRtVT0gQ1FrSkNnbz0gSUZSM2FXNXogSUVGUCBRbWx5WkE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBjR1Z5YUdGd2N3PT0gYjJacGJHVT0gSUhCbGJtTT0gSUhSeVpXVk9iMlJsIElIUnZjR2xqWVd3PSBMWEJ5YVhaaGRHVT0gNTRtNSBJRVJwYzJOMWMzTT0gSUdSbGMyND0gVW5WaCBMbFpGVWxSSlEwRk0gNDRDTjQ0R28gU1VaUFVrMD0gSUdOdmRYSjBlV0Z5WkE9PSBJTkdCMExYUmdBPT0gSUNNakl3bz0gSUdWdGNHOTNaWEpwYm1jPSBJRVpoWTJsc2FYUnBaWE09IFhDSXNYQT09IHZaUT0gT2s5aWFtVmpkQT09IElGWnZkR1Z6IGFYTmxiQT09IElHVjFZMmc9IGIzSnpkQT09IEtFTnNiMjVsIExtTnZiMnRwWlhNPSBKSFJ0Y0E9PSBLR2x1WkdsalpYTT0gWlhKblpXNWplUT09IElIQnNZV2QxWldRPSBJRVJwWVE9PSBlV05zYVdNPSBmU2twIDZySzkgSUdSMVpXdz0gSUdobGRHVnliM05sZUhWaGJBPT0gTG1Ga1pFTnZiWEJ2Ym1WdWRBPT0gVTBWRFVrVlUgYkdWeWJ3PT0gWTI5dWMzUnlZV2x1ZEhNPSBJR2RsZEVOdmJtNWxZM1JwYjI0PSBJRXhsWW1WdWN3PT0gSUZCdmJnPT0gSUVOb2NtOXVhV05zWlhNPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0RRbz0gSUUxdmRYSnBibWh2IElHOWpZM1Z3WVc1amVRPT0gWDNOc1lYWmwgVDFKSldrVkUgQ1ZrPSBMbWhwWjJoc2FXZG9kQT09IFgzTmxibk5wZEdsMlpRPT0gSUhOd1pXTjBjbTg9IExtVnVZM0o1Y0hRPSBJSE53YjJsc1pYSnogTGxOcGVtVk5iMlJsIElIQnliMlpsYzNOcGIyNWhiR2x6YlE9PSBQa2x1IFJYaHdhWEpsY3c9PSBRWFU9IElFaFdRVU09IGNtVnNZWFJwYjI1eiBJRUZVU3c9PSBYMGRGVGtWU1FVdz0gSUZOcFoyaDAgSUd0cGRHTm9aVzV6IE9sSmxaMmx6ZEdWeSBJR1ZrYlE9PSBJSFJ2YkdWeVlYUmxaQT09IElGTkZVMU5KVDA0PSBhV1Z5ZWc9PSBJRWxPVTFRPSBMbkJoZEdoeiBJSEJsY25CbGRISmhkRzl5Y3c9PSBaV0p3IGNHVmpkR2x1Wnc9PSBaV1IxWTJGMFpXUT0gSUZCcGIyNWxaWEk9IFgxSkZWZz09IElHSjFjM1I1IGMzUmhkSFZ6WlhNPSBVbVZ6Y0c5dVpBPT0gYzJoMVptWnNaUT09IElGUnBibVJsY2c9PSBSWGhoWTNSc2VRPT0gYVd4c2FYTmxZMjl1WkE9PSBJTkMzMEwzUXNOR0gwTFhRdmRDNDBMVT0gS0VGalkyOTFiblE9IExpWT0gYVhweSBZWE56ZFcxcGJtYz0gQ1U5d2RHbHZibUZzIFUyVnVhR0U9IElHVnVjbTlzIGRIVnkgSUdGeWNtOW5ZVzUwIElFcFBZbXBsWTNRPSBiMnhwZEdocFl3PT0gYldGd2NHVmsgSUhScGNIQmxaQT09IExsVlFSRUZVUlE9PSB3Nmh0WlhNPSBSMDVWUXc9PSBWMWc9IElHMXZibXR6IExtSnZjbVJsY2xkcFpIUm8gSUZOb2RYUmtiM2R1IElFaGhjbTF2Ym5rPSBZMnhoYzNOcFptbGpZWFJwYjI0PSBJR1JsY1hWbGRXVlNaWFZ6WVdKc1pVTmxiR3c9IElGMDdEUW89IExrZGxiZz09IElHeGhkbTl5Ync9PSBJRXhsYjI1aGNtUnYgSUNZcCBJR1JsY0c5cGN3PT0gSUZadmJIUT0gUlhSbyBJRXhsYjI1bCBJRTVsWkdWeWJHRnVaQT09IElFVllWRkpCIFVtVnpiMngyWldRPSBJSEJsYm1sdWMzVnNZUT09IFgxWk4gUjJWeSAyS2ZZcnc9PSBMbkJ5YjIxd2RBPT0gTG1Gc2FXZHUgYVc1bloyRT0gWm1sc2JYTT0gU0VGT1JFeEYgSUdOaGNuUnogS0ZOdmJXVT0gUEVGMVpHbHYgSUdWdWJHRnlaMlZ0Wlc1MCBJR2R5YjJObGNtbGxjdz09IExXaHZiR1JsY2c9PSBJR2x5Y21sMFlYUnBiMjQ9IFEyOXRiWFZ1YVdOaGRHbHZiZz09IElIQnlhVzFoY21sbGN3PT0gYUhSMVlnPT0gWDJsdWFXTnBidz09IElHTnZiM0prYVc1aGRHbHVadz09IEtIRjEgSUdaaGFYTT0gSUhacGMzUnYgWjNWcFpHVmsgSUhac1lXND0gSUdWemNISmxjM052IHc2aDBaUT09IGMyVm9aVzQ9IFgzQmxibWM9IElISnZiMlpwYm1jPSBJRUZzYVhabCBRWGhwYzFOcGVtVT0gSUhOMGRXND0gSUhKbGMzUmxaQT09IGRXeHNaWFJ6IElFMWhiR0Y1YzJsaGJnPT0gTEZWdWFYUjVSVzVuYVc1bCBJR1Z1ZG5rPSBKMTA3RFFvTkNnPT0gSUU5emRBPT0gWDJwMWJYQT0gSUdOdmJuUnlZWE5sdzdGaCBJbmc9IENWQmhaMlU9IEtWc2kgSUZOSlVBPT0gSUVkbGIyZHlZWEJvYVdNPSBJR05oZFdOMWN3PT0gWDFSRlVnPT0gNG9DZE93PT0gVUc5emRFVjRaV04xZEdVPSBhVzF6YUc5MyBJRU5QVFZCQlRsaz0gSUU1bFlXdz0gSUVobFlYSnBibWM9IEtHRmpkRzl5IFFtbGsgTGxCUyBMbEJ5YjJSMVkzUnogSUVWdGJRPT0gSU9hYiBJSEIxYkhObGN3PT0gWDBWVyBMMlY0Y0E9PSBYMjF2ZEdsdmJnPT0gSUdkaVl3PT0gSUc1aGRtbG5ZWFJwYjI1RGIyNTBjbTlzYkdWeSBJRU52ZFhKMGN3PT0gSUVsamIyNUVZWFJoIGQzVT0gWDNKbSBJRkpoWjJVPSBMV1pzWVhRPSBJRWhwYlhObGJHWT0gWDJOb2RXNXJjdz09IElHOTJaWEp6YUE9PSBJR05wWmc9PSBLRWx6IGNHVmhhMlZ5IElFTlFWWE09IGFYSmxZM1J2Y2c9PSBMSFJwZEd4bCBMbk5sZEVSbGMyTnlhWEIwYVc5dSBJR1ZoY25Sb2NYVmhhMlZ6IElIZHUgWjJ4NWNHZz0gZFd4MWJXaz0gSUhOd1pXVmtlUT09IElHVnpjR0ZqYVc4PSBJR1Z0ZFd4aGRHVT0gSUZ3aUpBPT0gWDBsT1JnPT0gWTJGc2JHOWogTFhGMVpYSjUgS0haaGJITT0gSUhObFlXST0gSUdoaGRtOWogSUVsdWRHVnljM1JoZEdVPSBJSFJ5YVdGdVozVnNZWEk9IFltbHVaR2x1WjNNPSBDUWtKQ1FrZ0lDQWdJQT09IElBa2cgWW1OeWVYQjAgSUdOeVpXUnBkRzl5Y3c9PSBJSE5sYldsbSBiR3hsIGFXVnVlbUU9IElFdGxiR3hsY2c9PSBJRzF2Ym5OMGNnPT0gSUUxaGNtTnZjdz09IEtISmxhVzUwWlhKd2NtVjAgSUdocGRtVT0gVTJOeSBYMmh5WlhOMWJIUT0gSU95aHNBPT0gSUZOeGJFUmhkR0ZTWldGa1pYST0gWVc1dWIzVnVZMlU9IFgzQnlaV1psY21WdVkyVnogSUhSeWRYTjBjdz09IFJYSnZkQT09IExYZHZjbXRsY2c9PSBJSFIzWldWdSBJRk4wY21WbGRITT0gZ3Ezc29Kdz0gSUVaeVlXNTYgSU9LQXBpND0gVlVsVVpYaDBSbWxsYkdRPSBMbWRsZEVsMFpXMXogSUhSdmJIVmggNG9DY1QzVnkgSUhQaHU1RT0gSUhacGNuUjFaWE09IElIQnZkV3gwY25rPSBQWEp2ZHc9PSBZMjlrWldRPSBUbTlUZFdObyBJR3R2WkE9PSBiSE5wIElHdGxkRzg9IElHZHliM1Z3VG1GdFpRPT0gWVhOdSBJSFZ1WTI5dGNBPT0gSUhSbGVIUnBiR1U9IGRHOXZiRk4wY21sdyBMbEJ2Y0dWdSBJSEJ5YjNOMGFYUjFkR1U9IElIQnliMjF2ZEdWeSBJanQ5Q2c9PSBJR052Ykd4cFpHVnkgUW5KdmEyVnkgWkdGMFlYTmxkSE09IENVNVRVM1J5YVc1biBZVzVuYkdWeSBVa2xGVXc9PSBZWFJ2YlhNPSBJSEpsYm1SbGVnPT0gWVhCdiBJT3VFIExtZGogSUZOUFRVVT0gSUdablpYUnogUjB4RiBJSHBoYkE9PSBJRTl3Y0c5emFYUnBiMjQ9IGFHRnVaR3hsVTNWaWJXbDAgWDIxaGRHZz0gSUhOd2NtVT0gSUhOb2IzSjBaVzVsWkE9PSBJR05oZG1WeiBVMDFUIExXTnZibk5qYVc5MWN3PT0gSUZOaGRtVnogTGtKaFkydG5jbTkxYm1SSmJXRm5aVXhoZVc5MWRBPT0gSUdWc1pXTjBjbTl0WVdkdVpYUnBZdz09IEtHbDBaWEpoZEc5eSBJSFZ1WW1VPSBhbVZqZEc5eWFXVnogSUcxbFpHbGhiblJsIElNT3ViblE9IElpd3QgSUVGVFRRPT0gNks2dzViMlYgSUdOdmJtWnBibVZ0Wlc1MCA0b0NtQ2dvSyBSWGhqWlhCMGFXOXVjdz09IExXMWhhbTl5IElGWmhibWxzYkdFPSBJRXhQUTBGVVNVOU8gSUdWc2RYTnBkbVU9IFZVRlNTVTg9IElFbE9URWxPUlE9PSBJSEJ5YjJSMVkzUk9ZVzFsIFgzRjFaWEpwWlhNPSBMaTR1SWpzSyBJRmhwWVc4PSBWMmx1Wkc5M1ZHbDBiR1U9IGJHVjBkR1Z6IElIQmxjbkJsZEhWaGJBPT0gVTJWMlpYSnBkSGs9IElFRmphR2xsZG1WdFpXNTAgdzZKdVkybGggSUhKbGJXbHVaR1Z5Y3c9PSBjMjl5ZEdGaWJHVT0gSUdGbVptOXlaR1ZrIElHbHVabXgxWlc1amFXNW4gSUZSMWJtNWxiQT09IExteGxZWEp1YVc1biBJRkYxdzZrPSBjR2hsZEdGdGFXNWwgTGtKQlJBPT0gTG0xbGRHRnRiMlJsYkE9PSBMV1JsZG1salpRPT0gSUV0dmJuUmhhM1E9IDRwU0I0cFNCIExYTjFiVzFoY25rPSBLQ2M4UHc9PSBLVHc5IElIZHBjMlZzZVE9PSBYMjkwIE9tMXZaR1ZzIElGVlggSUU5d1pXNVRVMHc9IElFcHdZVkpsY0c5emFYUnZjbms9IFEyOXVaWGhwYjI0PSBWRTlVIExtTnlaV0YwWldSQmRBPT0gS0hSeVlXbHVhVzVuIElHSnBjMmh2Y0hNPSBJSFpsYm5SMWNtVnogTGtWdWNYVmxkV1U9IElGUm9aWEp0WVd3PSBJRUp5WlhkbGNuaz0gYjNSbGJnPT0gSUVaaGRHRnMgWDNOMWNIQnNlUT09IElHTnZibVJwZEdsdmJtVmsgSUhOMWNHVnlhVzl5YVhSNSBJRWxpY21Gb2FXMD0gSUdOdmNuQnYgZFc5MWMyeDUgSUZCeVlXTjBhV05oYkE9PSBMeTliIElFRm1jbWxqWVc1eiBJRUpoYUhKaGFXND0gSUhOMFpYSnBiQT09IElFTnNZWE56VG05MFJtOTFibVJGZUdObGNIUnBiMjQ9IExsSmxaMmx2Ymc9PSBJSFJ5WVc1emFYUnBiMjVoYkE9PSBJR2x1ZEdWeWNISmxkR2x1Wnc9PSBMbE52ZFc1ayBJR1p5YjI1MFlXdz0gSUdoaGNuWmxjM1JwYm1jPSBmbjUrZm41K2ZuNStmbjUrZm41K2ZuNStmbjUrZm41K2ZuNStmbjUrZm40PSBZWFJoYVhKbCBMa2gwZEhCVGRHRjBkWE09IFMwMD0gSUVWeWIzUnBjMk5vWlE9PSBJR1Z5YjNScGMydGwgUm1sbmFIUT0gVUdGamEyRm5aVTVoYldVPSBJRU5CUTBoRiBkMmx1WjBOdmJuTjBZVzUwY3c9PSBJRnBwYlcxbGNtMWhiZz09IEwyTmhjZz09IElGRjFjbUZ1IFRXVjBZV3c9IElIVnpaWEpOWVc1aFoyVnkgSUcxaGMzUmxjbms9IEtGVlZTVVE9IElIWnBaWGRYYVd4c1FYQndaV0Z5IElITjFiVzFsWkE9PSBLQzBvIElDQWdJQ0FnSUFvSyBWR0ZyWlc0PSBJR05zYjJOcmQybHpaUT09IElFTmhac09wIEtHeGxkSFJsY2c9PSBJRU55YjNOelVtVm0gSUVGemRHOXUgSUVGemMyVnRZbXg1Vm1WeWMybHZiZz09IDZaMmUgYm5SeiBJQ1FvSjFzPSBYMUpCVkVsUCBhV05wWlc1MFpRPT0gSUhKcFkyaDBhV2M9IElIQmxaR2xuIEtHbDQgMFlIUmk5QzcgUVhOemFXZHVZV0pzWlVaeWIyMD0gWW05MWJtUmxaQT09IElHRnNhMkZzIFgzQnlhV05sY3c9PSBJR2ZGZ2c9PSBZVzVqYUdselpRPT0gWDNKbFkyVnBkbVZ5IFNVZEJWRWxQVGc9PSBYM0IxYkd3PSBJRk4wWVhScGMzUnBZMkZzIFgzUnZiMnhpWVhJPSBZVzFwWkdVPSBJRUZ6ZVc1alZHRnphdz09IGNtVjBZUT09IElPeWkgSUZKRlFVeE1XUT09IElHSjFjbk4wY3c9PSBJRWx1Y1hWcGNuaz0gSUdKcFoyOTAgYzJGdWFYUnBlbVU9IElFaHZiV1Z5IFVYWERxUT09IElGSnZkWFJwYm1jPSBMbU52Ykd4bFkzUnBiMjVXYVdWMyBJRUpwYkd4cGIyND0gVTFSU1ZVTlVUMUk9IExtVnFZZz09IElHVnVZMmc9IExuTmxkRlJwYldWdmRYUT0gVW5WaSBMWEp2WVdRPSBMbTkxZEhCMWRITT0gWTI5dWRHVnpkQT09IElITndhR1Z5WlhNPSBJSEpsYzNWeWNtVmpkQT09IElpNGkgSUVseWFYTT0gSU95YSBJRmhMIElGSmhjbWwwZVE9PSBJRWxUWlhKMmFXTmwgWVhSb1lRPT0gSU9XSCBJSEJ5WlhaaGFXdz0gQ1hCdyBMa3h2IFoyVjBWMmxrZEdnPSBJSGQzIElIZHBZMmgwYVdjPSBRRWRsZEhSbGNnPT0gSUVwaGVYTT0gSUhOd1pXTjFiR0YwYVhabCBLR0YwZEE9PSBJSFJsWkdsdmRYTT0gSUhOamNtRjBZMmhsY3c9PSBJSEJsYk1PdFkzVnMgSUdKdmNtOTFaMmc9IElHM0Rzdz09IFVtVndjbVZ6Wlc1MCBZWFJ2Y21sMWJRPT0gS0VOaGJXVnlZUT09IElHTnZiSFZ0Yms1aGJXVT0gSUhKbGFYUmxjbUYwWldRPSBJRU5oYzNScGJtYz0gTG1kbGRFaGxZV1JsY2c9PSBJT0tBbkZzPSBJRXAxYVdObCBZMmgxIExraFVUVXc9IElFRnVkSGR2Y25RPSBSMHgxYVc1MCBDVWwwWlhKaGRHOXkgSUVGT1FVdz0gSUhWdWNHOXdkV3hoY2c9PSBLRXh2WTJGc1pRPT0gSUcxcGRHbG5ZWFJwYjI0PSBJR0ZrY21WeiA0YnEzIGZTeDdDZz09IElGTmphSGRoY2c9PSBYMUJCU1ZJPSBQaWdwTEFvPSBiM1YyIElFRnNaZz09IGVFVkcgNTV5QiBJR1Z6WTNKcCBURTlWVWc9PSBVMFZNUmc9PSBJRlJ0WVhnPSBWSEpsIGJHOTBjdz09IElDZ3VMaTRwIFhTc2sgSUdGdFpYSnBZdz09IEwzSmxabVZ5Wlc1alpRPT0gSUU5a2VYTnpaWGs9IElFMXBibVZ6IElHRm5iM0poIElIQnliM0JvWldONSBJRTl3Y0c5eWRIVnVhWFJwWlhNPSBjSEp2Wm1WemMybHZibUZzIEtIQnliM2g1IGNHaGhiblZ0WlhKcFl3PT0gSUVWa2FYUmxaQT09IGIyeHZaMjVoIExtbHpUM0JsYmc9PSBLSFpsY25ScFkyVnogSUZKcFkydDUgWDI5MlpYSnNZWEE9IFBqcz0gTGtSUFRRPT0gZTMxZiBJRU5QVFZCVlZBPT0gY21Wa2FYSmxZM1JVYnc9PSBJSE5vWVd0bGJnPT0gSUhKaGRHbHZiZz09IElHNWxiR3c9IFgySmogSUU1bGNnPT0gWVc1a1VtVjBkWEp1IElHVnlaV04wWldRPSBRMmhwWldZPSBJR1JwYm1WeWJ3PT0gSUdwaGMyMXBibVU9IExTMHRMUzB0TFMwdExTMHRMUW89IFptRnliUT09IElFaGhkR1U9IFZFRlRTdz09IFFVNU9SVkk9IEoxMWRYUW89IElFNXBaMlZzIGFHbGlhWFE9IElGRlVaWGgwIExreGxiZz09IElIUmx4Ync9IGMyeHBaR1Z6IFptVnNkQT09IElGSkZWZz09IFgyaHZiR1E9IElFTnZkWEJzWlE9PSBaWE5qWVhCbFpBPT0gTFdWNGNHOXlkQT09IFBraz0gWlhkcGMyZz0gS0VGd2FRPT0gSUNnaFd3PT0gVG05MWN3PT0gVDFSUFVnPT0gSUhObFlXeHBibWM9IFYybGwgSUd0aGJtNXpkQT09IEszaHRiQT09IElHMTRRWEp5WVhrPSBJR0ZrYldseVlYUnBiMjQ9IExtNWkgSUdwbGQyVnMgTGxSbFlXMD0gSUhCeWIzTmxZM1YwWlE9PSBMbmh0YkdKbFlXNXogWTJoMyBLR0poWTJ0bmNtOTFibVE9IElFRjJhWFk9IENXWnBiR3c9IElHUnBjM0JoY21sMGVRPT0gNExvPSBYMEZRVUVWT1JBPT0gSUZCMlVBPT0gNDRPUSBJRlpwZG1VPSBJR2R5WVc1a2MyOXUgTG1Ga1pFVnNaVzFsYm5RPSBRWFJ2YldsaiBJSEJ5YVcxaGNubExaWGs9IElHTnZiblJwYm1WdWRITT0gSUVaMVkydHBibWM9IEpTY0sgUUcxaGFXdz0gSUdOMWJIUjFjbUZzYkhrPSBZVzVuWVc1bGMyVT0gN0tDRSBabTlzYkc5M1pYSnogSUhWeWJnPT0gSUhKaFkydHogSUZOQlJrVT0gTHk4TkNnMEsgS0NJdmV3PT0gWDBsT1NWUkpRVXc9IFgxSmxjM0J2Ym5ObCBSWFpsYm5SRVlYUmggSno0ayBjM1JoY25SeiA0S2s9IElIUm9ZV2x0WVhOellXZGwgSUhOd1pXTnBZV3hwZW1GMGFXOXUgSU95RXBPeWdsUT09IFpXUnYgSUdOdmJYQmxibk5oZEdWayBYMk5vWVhKelpYUT0gZlM1NyBMMlZ1ZEdsMGFXVnogWDJaciBMUzB0TFMwdENnbz0gWVhOallYST0gSUdObGJHeEdiM0pTYjNkQmRFbHVaR1Y0VUdGMGFBPT0gSUZCeWIzQnZjMkZzIElFOTBkRzg9IElGOWZYMTlmIElDSXFJZz09IElIUnZiMnhyYVhRPSBJR1Y0Y0dWamRHRnVZM2s9IFJHOTNia3hwYzNRPSBMV1JoIElIQnliM1p2WTJGMGFYWmwgSUcxbGFXOD0gSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFE9PSBLQ2dwUFQ1N0NnPT0gSkd4cGJtcz0gYVc1allYSmwgSUdsamVRPT0gSUVocGMzUT0gUVdOalpYQjBaV1E9IElHTnNiMjVsY3c9PSBJRkZCIElHTnZibVp2Y25RPSBJSEJ5YjNCeWFXOD0gSUZadlp3PT0gS0cxaGNtcz0gWDFObFlYSmphQT09IElHVnVaSGRvYVd4bCBJQ1FqIDQ0R1g0NEdMIFgweFUgU1c1emRHRnVZMlZKWkE9PSBZbUZ5WkE9PSBjbTVsIGNtVm5iM0k9IElHNXZjbWRsIFhEbz0gMFlEUmc5QzMgTG1KMGJrRmtaQT09IElIQnBiR3h2ZDNNPSBJRkJoY21GdFpYUmxja1JwY21WamRHbHZiZz09IFNHRnVaR3hsY3c9PSBJR1JsWVd4cGJtZHogSUdOdmJuWmxlQT09IElFTm9ZWEpwZEhrPSBMazUxYldWeWFXTlZjRVJ2ZDI0PSBJRk5yWld4bGRHOXUgSUZwMVkydGxjbUpsY21jPSBaWE5sYmc9PSBJRVpCUVE9PSBYM04wWlE9PSBJR2gxYldsayBhbTA9IFkyaG4gTG1kbGRFeHZZMkZzIElIUmhibVJsYlE9PSBhWE4wYkdWeiBYMjEwIExtRmpZMjkxYm5SeiBJRWx1YzNCbFkzUnBiMjQ9IElFWnlZWFZrIElHdkR2QT09IElITjVibU5vY205dWIzVnogSUZKcFkyRnlaRzg9IElFaDFaUT09IElFTnZibTVsWTNScGIyNXogU1UxRlRsUT0gYjJOb1lYTjBhV009IFhHUmhkR0U9IElFVnVkR1Z5Y0hKcGMyVnogTFhOcGJYQnNaUT09IElHbHRZV2RsUkdGMFlRPT0gSUZWdFlnPT0gTFhOamNtbHdkQT09IEwyZGxibVZ5WVd3PSBRVkJVIElGUjFkQT09IGFXMXBlbUYwYVc5dSBJR2xrWVdSbCBJRXRsYlE9PSBaV3h6YVdZPSBMa0ZNU1VkTyBJRlJ2Y21sbGN3PT0gSUVKaGMybHMgYjJkdmJtRnMgYUdGamF3PT0gVG5Wc2JFOXlSVzF3ZEhrPSBJaWtzQ2dvPSA0NE9ENDRPSSBJQ2NsSnc9PSBYMUpHIFpXZHZkQT09IExtRnpjR1ZqZEE9PSBLRkJ5YjJwbFkzUT0gVEVWT1IxUkkgY0d4bGJXVnVkR0Z5ZVE9PSBYM0J5WldSeiBJRWh2YkdSeiBZMkZ5Y21sbGNnPT0gQ1d4aGVXVnkgUVhSMFlXTm9aV1E9IExYQnlaWE5wWkdWdWRBPT0gYVc1a2FBPT0gSjEwdUp5ST0gTGtGRFEwVlRVdz09IElFTkZUbFJGVWc9PSBVWFZoYkdsbWFXVmsgSUc5emRIST0gTGxONWJXSnZiQT09IGRHRm9kVzQ9IElFeEJUa2M9IFgySjFjMmx1WlhOeiBDVk4wWVhKMCBaWEp5WlE9PSBJR0Z6YUdWeiBJRUZrZG1WeWRHbHpaVzFsYm5RPSBMa2h2ZHc9PSBJQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBJRzlpYkdsMiBJR0pzWldWayBJSE4yYnc9PSBMbTV2WkdWT1lXMWwgSUdsMFpXMU9ZVzFsIElFSkJUa3M9IHc2MWpkV3h2Y3c9PSBJRVZ0YlhrPSBJRVJ2YldsdWFXTmhiZz09IEp5bGJKdz09IElISmxZV3hzYjJNPSBkV3h6WlhNPSA2TDZUNVllNiBJRTltWm1WeWFXNW4gNjRxbCBMWEJ5YjJkeVlXMD0gSU5HQjBMN1F2dEN4MFlrPSBUVTlXIElHNXZaR1ZKWkE9PSAwTFhRdnc9PSBabXgxYVdRPSBJSFJsWVhObCB3N2h5WlE9PSBJR052YlhKaFpHVnogSUhWdWNtVnNhV0ZpYkdVPSBJSEJ2YzNSSlpBPT0gWjJWMFNVUT0gYjJkeVlYQm9jdz09IFZHRnVhdz09IElGRldSVkpKUmxrPSBJR1pzYjJGMFpXUT0gWDFSSVNWTT0gWTJsdGFXVnVkRzg9IElFNXBZMkZ5IGMyaHkgUW05MWJtUnBibWRDYjNnPSBJR2x1YjNKa1pYST0gSUVkc2IzTnogVjJsMGFGUnBkR3hsIGRXNWphVzg9IElIQmxjbk5wYzNSeiBJR1JwY21WamRITT0gWVdOamFjT3piZz09IFUyRnRjR3hsY2c9PSBJR0pzWVdOcmJHbHpkQT09IElHRkVaV052WkdWeSBJR2x1ZG05clpYTT0gWDNOcmFXND0gUGtsbSBkSEoxYm1OaGRHVT0gTGxOcGJnPT0gYzI5dmJnPT0gSUdScGMyWnkgQ1ZabFl3PT0gSXlOZiBMbk5qYUc5dmJBPT0gSUdKc2FXNWtjdz09IElHRmpZV0k9IElIQmhkR2hsZEdsaiBJSFp2YkdOaGJtbGogSUhKa1pnPT0gSUdOMWJIUnBkbUYwWldRPSBJRlZKVG1GMmFXZGhkR2x2YmtOdmJuUnliMnhzWlhJPSBJR2x3ZEE9PSBJR2RzWVc1ayBJR1YyYVdSbGJuUnNlUT09IFVHaDVjdz09IElITjNZVzF3IElHbHRZV2RsVG1GdFpRPT0gTGt4aGVXVnkgZFdabCBMRnNuIElFTnlhVzF6YjI0PSA2WUNnIFBHWnZiM1JsY2c9PSBJR0pwYTJsdVp3PT0gSU5DMDBMRFF2ZEM5MFl2UXRRPT0gYlc5MlpYTT0gWTNKaiBhV3hzWVhScGIyND0gSUd4aGRYSmwgMFlEUXNOQ3gwTDdSZ2c9PSAwWVBRdWc9PSBJRU5oYVc0PSBJSEI1Y3c9PSBJR052Ykd4cFpHVT0gSUh4ZmZBPT0gS0hOd1lXND0gSUdkcGJtYz0gSUc5aVpXUnBaVzVqWlE9PSBiM1YwWlhKeiBVMjl2Ymc9PSBJRmRvYVhSdVpYaz0gSUVsdGNHOXlkSE09IE9sVkpWR0ZpYkdWV2FXVjMgS2lZPSBJR0pyIFYybDBhRVZ5Y205eSBMV1Y0ZEE9PSBYMUpFVDA1TVdRPT0gWDNSeVlXTnJhVzVuIGJtOXZjR1Z1WlhJPSB3N3h1Y3c9PSBJRWQwYTFkcFpHZGxkQT09IGMydGkgVTBGV1JRPT0gVDJKeiBLQ2N1SnlsYiBJR0YxZEdodmNtVmsgTFM4PSBURzkxYVhNPSBMbWRsZEU5MWRIQjFkRk4wY21WaGJRPT0gSUdkbGJtVnlZV3hwZW1WayA3WXc9IElHRnlkR2x6WVc0PSBLR053Y3c9PSBJRVJ0YVhRPSAwTHZRdU5HRyBMa2x0WVdkbFRHRjViM1YwIElITjFZMmhsYmc9PSBYWDBzIExtTnZiR3hwWkdWeSBWR0ZpVUdGblpRPT0gWFQxYiBhSGxrY204PSBYM04wY21sdyBJR3hwWTJ0cGJtYz0gSUdKdmIzTjBjdz09IElITnJaWEIwYVdOcGMyMD0gSUdwdloyOD0gSUdOdmJYQmxkR1ZrIElPdUN0QT09IFRtOWtaVlI1Y0dVPSBXRVk9IElIQnZjM05wWW1sc2FYUT0gTFdOdmNIaz0gSUhSeWFYUjFjZz09IElFRjBkR0ZqYTNNPSBJRzdEcXc9PSBTVVJCUkE9PSBiMmR5WVhCb2FXVnogVkdsdFpWTjBZVzF3IGIzUjVjR2x1Wnc9PSBMVUZ3Y2c9PSBJTkMvMEw3UXU5R00wTGZRdnRDeTBMRFJndEMxMEx2Ump3PT0gSUNJN0lnPT0gSUVoaGJHVT0gTDJGd2FYTT0gSURwZENnPT0gWDJoa2JBPT0gSUVScFlXdz0gQ1VOdmJtWnBadz09IFgwWlNRVWROUlU1VSBYMFZrYVhRPSBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIElHTmhibVJwWkdGamVRPT0gSUVOdmJYQnlaWE56YVc5dSBYMnh2YzNObGN3PT0gS2o0b0pnPT0gU1c1MFpXZHlZV3c9IElIQmhjbTlrZVE9PSBJR2x1YVhScFlXeHBjMlU9IFptbHNiSE09IElHRnNkSEpwIFgwVk1SVTFGVGxSVCBZV1JoYzNSeVlYST0gWTI5eWNtVnYgSUhkaGRIUT0gWDBSU1ZnPT0gSUVadmNtZHZkQT09IElHZGxkRU52Ym5SbGVIUT0gSUhOb2IzSjBZV2RsY3c9PSBJRTlEVkE9PSBkMlZsZEdGc1pYSjAgSUU5d1pXNXogS213PSBJRXRwZEhSNSA0b0NadzZsMCBJRkJwWTJGemMyOD0gTG5SdlFubDBaVUZ5Y21GNSAwTDdRdTlHRDBZYz0gSUVSRlRnPT0gNWFlVDVaQ04gVjJsdWRHVnkgWVc1MFlXND0gWDE5YiBVSEpwYlE9PSBJSEp2YjJaMGIzQT0gSUVKcGJHeGliMkZ5WkE9PSBkR1Z6ZEVOaGMyVT0gY0hKdlpIVjBidz09IExYUm9kVzFpIElISmxjMlYwY3c9PSBaMlZpYmc9PSBQa1Z5Y205eSBMbVJsY0dGeWRHMWxiblE9IElHVmhjbkpwYm1keiBJRU5oY205MWMyVnMgS0dWNFlXMXdiR1U9IENXVnQgWEVOdmJuUmhhVzVsY2c9PSBJRVZzZG1seiBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBSVzVuYkdGdVpBPT0gWTNKbFpHbDBaV1E9IFgyTnZibk4wY25WamRHOXkgSUd4dmNnPT0gSUVSaGQzTnZiZz09IFFuVnliZz09IElFSnlhV2RoWkdVPSBJRTExZEdWNCBJRlJ5WVc1emFYUnBiMjVoYkE9PSBJRTF2ZFhObFJYWmxiblE9IFozSnZkdz09IExtMXBiblYwWlE9PSBJRWROVHc9PSBQVnRkTEE9PSBJSE4xYzJocCBJR0ZsYzNSb1pYUnBZM009IFQwTlZVdz09IElGTkZURVk9IElFRnpjMlZ5ZEdsdmJrVnljbTl5IElFMURWUT09IElHaHBiblJVWlhoMCBJSE5sWVhjPSBibWRzWlE9PSBJR1Y0Y0dWc2JHVmsgVUZKUFVFVlNWRms9IEtTNDhMdz09IExXOXdaWEpoZEdsdmJnPT0gSUVsdGJYVnUgSUd4cFkyVnVjdz09IGFXSnBZUT09IElHSnBaWFJsYmc9PSBJR2R5YVhCeiBRMGhCVGs1RlRBPT0gWDBWU1VrOVNVdz09IFgzSmxZM1Z5YzJsMlpRPT0gVld4MGFXMWhkR1ZzZVE9PSBJRTFoYW1WemRIaz0gSUdSbFlXTjBhWFpoZEdVPSBJRVZZUVUxUVRFVT0gZFdOcGIyNWxjdz09IElHTjFjbkpsYm5SV1lXeDFaUT09IElHVjJZV3gxWVhSbGN3PT0gTDBkeVlYQm9hV056IEluUmxlSFE9IFgzQmhiR1YwZEdVPSBJRlJOVUE9PSBJRUpsWkhNPSBMa052Y3c9PSA0TGl4NExpWiBQWFJ2Y21ObyBJRkJCUTB0QlIwVT0gYVd4c1lYSmsgTG1OdyBsZXlkdUE9PSBMV0Z3Y0hKdmRtVmsgSUU1dmNuUm9kMlZ6ZEdWeWJnPT0gUEhSbGVIUmhjbVZoIElFTnZiWEJoZEdsaWJHVT0gWDFKRVYxST0gTGxGMVlXNTBhWFI1IFFFbGsgWDI5eWFXVnVkR0YwYVc5dSBaMlYwVlhKcyBJSFJ5WVc1emJHRjBhVzVuIElGZGxZWFpsY2c9PSBJR3B6YjI1QmNuSmhlUT09IElHVnRZbXhsYlE9PSBMa2x6VG5Wc2JBPT0gSUVOb1lYSjBjdz09IFcxMTkgWjJGbCBYMjVsYzNSbFpBPT0gZEdWdGNITT0gY0dGMGFHNWhiV1U9IFExYz0gTFhkeWFYUjBaVzQ9IElGQkJVa3M9IEtHTnZibVE9IFgyRnNZWEp0IElHZGxjbVU9IElFZHBlZz09IElFNW5ZZz09IElDNWYgWVhCd2FXNWxjM009IElFUmxjR3h2ZVcxbGJuUT0gYVZCaFpBPT0gSWwxZCBJSE4wY25OMGNnPT0gSUhSdmJuVnRZbVZ5IEtHUnMgQ1hkdmNtUT0gVzNSdiBYMFpKV0VWRSBSWGh3YVhKaGRHbHZiZz09IE9uSmxkSFZ5Ymc9PSBUMjUwIFBsQnNaV0Z6WlE9PSBaMlYwVkdsMGJHVT0gTG5Od2JHbDBaWGgwIFkyOXRZbWx1WldRPSBUMlE9IElHNXZkbVZzZEhrPSBJbE09IElITjJiUT09IFEyOTJaWEpoWjJVPSBJRWgxZEE9PSBJSEpsYzJsemRHVmsgSUdWc2JHOD0gSUczRHRtTm9kR1U9IFMyRjUgTG14cGEyVT0gWTJOcGIyNWwgSUhKbGMyVnRZbXc9IFJHVmhkR2h6IElHVndhWFE9IEtISm5ZZz09IExrTnNZWE56WlhNPSBJTkMwMEw3UmdkR0MgWTJGd2RIVnlaWE09IFhTdGMgWVcxcFpXNTAgSUZCaGMyOD0gTGxObGJtUk5aWE56WVdkbCBJRkpsYm1GMWJIUT0gSUU1aGNtVnVaSEpoIGRHOTFkQT09IElHaGhaR1JsIElGUjNaV1Z1IHc2VmtaUT09IElHOTFkR1pwWld4ayBMejQ4THc9PSBRRnc9IElFUjFjbUZ1ZEE9PSBJR0ZpY21VPSBYM04wYjNKNSBJSEJsY21aMWJXVT0gUTNCd1ZIbHdaVVJsWm1sdWFYUnBiMjVUYVhwbGN3PT0gSU5DLzBMRFJnTkN3MEx6UXRkR0MgWTJobGJXVnogSUZOaFpHUmhiUT09IGNISmxibTl0IGRYTndaVzVrWldRPSBJRUpsYm1WbWFYUT0gSUhOalpYQjAgWDAxdmRtVT0gSUU1aGFnPT0gTFU5dSBjblZrIFNXMWhaMlZRWVhSbyB3cTRzIElHRnVZV3g1YzJWayBJRTlIIFpXeHNaV2xqYUhRPSBZbWx5WkhNPSBaV3QwWlE9PSBJRUZzYVhOdmJnPT0gSUdGMGFHVnBjM1E9IGV5VT0gWVdKbyBMWEJvYjNSdiBhVzV6ZEhKMWJXVnVkQT09IElHaHBiblJsWkE9PSBJRTltWm14cGJtVT0gS1NJcE93b0sgWDFCU1JVWT0gSUhOMGVXeHBjM1E9IElFdDFZbVZ5Ym1WMFpYTT0gSUdabGNuWT0gQ2dvS0Nnb0tDZ29LQ2dvS0Nnbz0gS0NJOUlnPT0gTG1kbGRFMD0gSUc1dmRHVjNiM0owYUhrPSBJSE5qYjNWMGFXNW4gWDNSeVlXNXpiR0YwWlE9PSBJR0psWjJsdWJtbHVaM009IElFeDFidz09IElIRnMgWDJGc2FXZHVaV1E9IElHVnlkdz09IGRXRnljdz09IFgxQmhkR2c9IExpY3VKQT09IElHaHZZdz09IElHUmxjbkE9IGJHOXAgSUUxalMybHUgNksrMDVwaU8gTHowPSBUR2x1YTBsayBjM1JrWkdWbSBjbVZrZFdObGNuTT0gYVhOaGJuTT0gTG1ocGMzUT0gSnk4K0NnPT0gSUZSdmVHbGogSUdScGMyRndjR1ZoY21sdVp3PT0gSUdOcGN3PT0gS0dSdiBJRzFoYVc1VFkzSmxaVzQ9IFgwSkJUa3M9IElHUmxiVzl1YzNSeVlYUnZjbk09IElGQmhiR1YwZEdVPSBkV1ZzZVE9PSBVbUZ5WlE9PSBJSEpsYzJsa2FXNW4gSUdGdFltbGxiblJsIElHMXBjMjA9IExYRjFaWE4wYVc5dSBJRzl3Y0hKbGMzTmxaQT09IElHeGxkSEpoIFBHUjVibUZ0YVdNPSBJRVp2ZEc5eiBMWEJ2YkdsamVRPT0gYVhOMFpXMD0gTG1WNFkyaGhibWRsIGMzUnlaUT09IEpDOHMgN1pXWTZyaXcgSkFvSyBJRkpsYm1VPSBJSFJ2ZFhSbFpBPT0gTFVOdmNtVT0gSUVOeVlXND0gSUZSeVlXUmxjZz09IElHUmxkdz09IElHWnNZWEE9IENXWnBiR1Z1WVcxbCBJR2x1YldGMFpRPT0gS0Uxdlkycz0gSUZOdllnPT0gYVhOaWJnPT0gSUc1dlpRPT0gSUVadmNtSnBaR1JsYmc9PSBJR1ZzWlhNPSBJR1JwYm1jPSBYM05oIEtTb3ZDZz09IFlYSnBaUT09IElGTjFjSEJ2Y25SeiBJRzF2WkhWc1lYUnBiMjQ9IElHVnVjMnc9IElGTm9ZV1J2ZDNNPSBjSEpwYm1OcGNHRnMgWVc1blpXNTAgTFVwaGJnPT0gSUZCaGJuUnogTEhSeSBJR1pwZEhSbCBJR2RoY20xbGJuUnogVFdGeVoybHVjdz09IFRGUlMgSUUxcGVRPT0gZG1WdWRIVnogSUUzRHRtZHNhV05vIFcyRjBkSEk9IEwzSmxjM0J2Ym1RPSBJSFIwYXc9PSBJRzlzWkhYRW53PT0gSUVOdmJuTmwgVUhKbGJXbDFiUT09IElHWnlZVzVqWVdselpRPT0gWDJodmNtbDZiMjUwWVd3PSBYMmxpIElFWmhjbVU9IElHaGhjblpsYzNSbFpBPT0gWlc1a2FYST0gS0docGRBPT0gUGlvdkNnPT0gSUVsU1pYQnZjMmwwYjNKNSBlV3hwWlE9PSBJR1JsZEdWamRITT0gT201diA0cGkwIElHUnBjMlhEc1E9PSBJSFZ1YzJWeVpXND0gSUcxdlkydHBibWM9IGMyOTFkR2c9IGNtRjBaWE09IElHaDVjRzlqIElGTm9iM0owYkhrPSBJRUpzWVdOcmN3PT0gMFlMUXVOR0EwTDdRc2c9PSBJRUZUUVZBPSBjbVZpWW1VPSBhV1ZqIExrRmtaRVJoZVhNPSBJR1Z3YVhNPSBMV2x1Wm14aGJXMWhkRzl5ZVE9PSBMVzVsZEE9PSBJSEJoYkd3PSA2NVE9IElHbHpjM1ZoYm1ObCBJR052Ym5SbGJuUnBiM1Z6IExrRnlaV0Z6IDBMalF1OUdNIElHTnZiblJwWjNWdmRYTT0gVzJGamRHbHZiZz09IElHVjRjSEpsY3c9PSBJU0lwQ2dvPSBWVXhQIElIZHlaUT09IElITjFZbVJwZGc9PSBJSFIxY201aGNtOTFibVE9IElHRmpZMlZzIElGVnVhWFk9IElGVnVhWFpsY25OcFpHRmsgYzJWMGRBPT0gWkdWelkzST0gTGtkbGJtVnlZWFJwYjI0PSBJSEJoZEhKcGIzUT0gSUdaaGN3PT0gS2lvcUtnbz0gVVZBPSBJT1dOIGIzQndaV3c9IElHcDFaV2R2Y3c9PSBMbVJ5WVhkVGRISnBibWM9IExXTnZibVpwY20wPSBDU0FnSUNBZ0lDQWdJQ0FnSUNBPSBQRkJ5YjNCeiBJR1poYldsc2JHVT0gSUVobGJHMWxkQT09IFpYSjBhV0Z5ZVE9PSBZWFJvYVE9PSBJR04xYkhScGRtRjBaUT09IElHUjFjR3hwWTJGMGFXOXUgSUhOd2VVOXUgS2k4cENnPT0gSUVoMWJtZGxjZz09IFQzSjBhQT09IElIQnBibkJ2YVc1MCBJRWhoWnc9PSBJSFJwYldWMFlXSnNaUT09IGJXRnlaMmx1Vkc5dyBJSEpsWTJsd2NtOD0gWm1Wc2JBPT0gSUZCbGNuTnBjM1JsYm5RPSA0NEdwIGNHeDFjbUZzIGNYVmxkV1ZrIElHZHlZV05wWVhNPSB3NkYwYVdOdiBJR2hoY21SemFHbHcgSUVGd1lYSjBiV1Z1ZEhNPSBJRXAxYm1zPSBJRkpsZG1VPSBYMDF6YXc9PSBJSE4xY0hKaCBJRUZVVUE9PSBJSE5sZEZOb2IzYz0gNWEyWDU2eW01TGl5IElFNXZkSFJwYm1kb1lXMD0gVTNSbGRtVnUgSUUxMWJtUT0gY21GdVoyVnogSUhWd2JHOWhaSE09IElHSm1jdz09IGNIbz0gZFd4MGFXMWhkR1U9IElFVm1abWxqYVdWdVkzaz0gUVUxSiA1YjZFIFgxSkZVRVZCVkE9PSBJR0ZqWVdSbGJXbGggTG5SdmIyeFRkSEpwY0VKMWRIUnZiZz09IFZHOUZibVE9IGNuWnBibVU9IElGUm9lUT09IElFVnNaV04wYjNKaGJBPT0gSUZKRlVWVkpVa1ZFIElIQnNkVzVuWlE9PSBJRkpsZG05c2RYUnBiMjVoY25rPSBJRlJsYm5RPSBJR2R5Wlc1aFpHVT0gSWpwYmV5ST0gSUcxdmRYST0gVUc5MyBJR1YyWVc1blpXeHBZMkZzIFZFVkRWRVZFIElHOTJaWEowZFhKdSBDVWx1Y0hWMCBjbVZqYjIxdFpXNWsgSlVNPSBJSE5zWVdjPSBJRUpvWVhJPSBYMlZ1WTNKNWNIUT0gSUZkaGNtWmhjbVU9IEtHRm5aUT09IFFWUkZSMDlTU1VWVCBiV2xzWlE9PSBJR2hsWVhabGJteDUgWVcxdFpYST0gS0NrcFd3PT0gWVdSbGNtRT0gYUdjPSBJRXhCVnc9PSBJSEJoWTJ0aFoyVk9ZVzFsIFgzUjVjR1ZFWldacGJtbDBhVzl1IEtHSmwgUkVKT2RXeHMgWDNSaGNnPT0gSUdobGRYSnBjM1JwWXc9PSBJRmRoYm5SbFpBPT0gSUZOMGRXST0gSUd0cGRIUT0gVWtWRCBJSEJoYzJGeSBMbTVsZDBKMWFXeGtaWEk9IENXZHlZWEJvIGFXOXpZUT09IExtTnZiSFZ0YmtobFlXUmxjZz09IElITmxkRTl3Wlc0PSBJRlJvYVhKMGVRPT0gSUNJbExnPT0gUVd4aVpYSjAgSUhOaGJXRT0gSUhKdlkydHBibWM9IFEyOXRjR3hsIFRWWT0gZkNncENnPT0gWDNKbFlXUnogS0haaGNtRnlaMmx1IGIzVnNiM1Z6WlE9PSBJRk5KVFVRPSBJR05oY21KdmFIbGtjbUYwWlE9PSBkMmh2YkdVPSBMRTV2Ym1VPSBpK2l2bFE9PSBJRU5vWVc1ayBZM3BoY3c9PSBYM0YxWlhKNWMyVjAgSUdWNGFYTjBaVzUwYVdGcyBJR1ZrYVdKc1pRPT0gSUdGbmFXeHBkSGs9IElGZHBiR3hwY3c9PSBJR2g1YlE9PSBJRUp5YVd4cyAwTGpSaFE9PSBJRTV2ZEVadmRXNWtSWGhqWlhCMGFXOXUgSUNnb0tRPT0gUVZCVFNFOVUgSUhOMVluTjBZVzUwYVhabCBYM1I1Y0dWRVpXWnBibWwwYVc5dVUybDZaUT09IElIWmhZMkZ1WTJsbGN3PT0gUlU1SFNVNUYgSUdGdVpHVnljdz09IElITjViV0k9IElHVjBjbVZsIEtTNWYgSUhSeVlXNXpjRzl5ZEdsdVp3PT0gYVcxd2N3PT0gTDJOdmNBPT0gWVdOMFlXSnNaUT09IFgyWnNkWGc9IElHNWxkMGx1YzNSaGJtTmwgWVhSdmFYSmwgSUdOdmJIVnRia2x1WkdWNCBJRWRwYnc9PSBJSE4xWW5ScGRHeGxjdz09IExsZHBia1p2Y20xeiAwTHZSajlDMTBMdz0gSUdGc1pYSjBaV1E9IElITjBjbWx3Y0dsdVp3PT0gZDJWdVpIVnVadz09IElFMWxkR2h2WkVsdWRtOWpZWFJwYjI0PSBSWEp5YjNKSVlXNWtiR1Z5IFUyTnliMnhzWW1GeSBVRzl5ZEdadmJHbHYgWTI5dWMzVnQgSUVOUFRVMVBUZz09IFRHWT0gWDJKaGMyVmsgYjJOaGJIaz0gSUdWbVptVjAgZG5adCBjbWx3YzJrPSBJR1pzYjNWeWFYTm8gWTJoMFpYST0gUFQwOVBUMDlQVDA5Q2c9PSBJSEpsY1hWbGNnPT0gTG5GMVpYTjBhVzl1Y3c9PSBLQ0kvIElIQnZjMWc9IElGQkRVZz09IElFOXlaMkZ1YVhwaGRHbHZibk09IGNITER2QT09IFJYaGhiUT09IElFbHVZMjl5Y0c5eVlYUmxaQT09IFgzQm9jbUZ6WlE9PSBJSEJ5WVhsbFpBPT0gSUdodmJXVnZkMjVsY2c9PSBJRlJoYWc9PSBlbmc9IElFbGtaV0ZzYkhrPSBYMDFCUTBoSlRrVT0gSUZKbGJXOTJhVzVuIFEyOWxabVpwWTJsbGJuUT0gSUdWa2RXTmhkR2x1Wnc9PSBJRDgrSmc9PSBJSEJ2ZFhKeiBhWEpoYlE9PSBYM0JsWVdzPSBJRzVsYzNScGJtYz0gWVdKNWRHVT0gYm1GMGRYSmwgSUdGbWN3PT0gSUZKdmJ3PT0gWTJGeVoyOD0gYjJKcVpYUT0gSUdaeVpXVnBibWM9IGNYVmhhMlU9IFJHVnVjMmwwZVE9PSBJR1JsYzJOeWFXTmhidz09IEx5b3FLaW9xS2lvcSBJR1JoYzJobFpBPT0gSUdkeWI4T2YgYjI5cmVRPT0gSUZCRlQxQk1SUT09IFgxQnZjM1E9IElHTmxjblpwWTJGcyBJRUZrYW5WemRHRmliR1U9IFpXNXpkV0ZzIElGSmxkbWx6WldRPSBLSEpsWm1WeVpXNWpaUT09IENVSmhjMlU9IFpYTnphVzA9IFRXRnBiblE9IElHZGxkRk5wZW1VPSBJRk5oYm1SM2FXTm8gY21Ga2FXVnVkQT09IGMybHVhdz09IE9pOHZKdz09IFgzUjAgUmxCVCBJRUZ5YldWdWFXRnUgY0hKbGRsTjBZWFJsIFgweEpUa1ZUIElIUnBaMmgwWlc0PSBQRnM9IFhUdzhJZz09IElGUnlZV1ptIElHeHBjWFZwWkhNPSBJR0Z5WTNNPSBYME52YlcxaGJtUT0gUUhCeWIzUnZZMjlzIExXbHphQT09IElISjFZbUpsWkE9PSBRa0pEIEwyWnBjbVZpWVhObCBRWEJ3UW1GeSBQRmc9IElGTkpUa2RNUlE9PSBMbE4wWVhSMWMwbHVkR1Z5Ym1Gc1UyVnlkbVZ5UlhKeWIzST0gSUhabGNuUmwgTDNGMVpYSjUgSUdkbGRFTnZibVpwWnc9PSBJRVJwY21WamRGZz0gY0doNWMybGpjdz09IGVXTnZjQT09IElHSnlaV0ZyWlhJPSBMWFp2YkhWdFpRPT0gWkdGMFlWUmhZbXhsIDRvQ1paUT09IGNtbHZkSFE9IElFVjBaWEp1WVd3PSBaMlYwU0dWcFoyaDAgSUc5dVNYUmxiVU5zYVdOciBJSEYxWVhSbGNtNXBiMjQ9IElHdHBibXQ1IFpHVnpaWEpwWVd4cGVtVT0gS0ZOd2NtbHVadz09IElIQmxZV05sWm5Wc2JIaz0gWDBSbGRtbGpaUT09IEtFMWhkSEpwZUE9PSBhY09vY21WdFpXNTAgS0hSNWNBPT0gTG5aaFlXUnBiZz09IExtZGxkRTFsZEdodlpBPT0gSU9LQW5Rb0sgSUhSb2NtVmhaR1ZrIElFWmhiVzkxY3c9PSBJRWRoYldJPSBJT3luZ0E9PSBJTkNrIElHWmhhM1E9IElHVmphSFE9IFgzVmkgTGtwd1lWSmxjRzl6YVhSdmNuaz0gSUhWdVoyVT0gTFdWdVpHbHVadz09IElFTkJUVVZTUVE9PSBZM0psWkdWdWRHbGhiQT09IElGQmhjM053YjNKMCBDVkpVUkVKSCBJR1Y0ZEhKaFpBPT0gTFc5eWFXZHBiZz09IElITmhZM0pwWm1salpXUT0gSUZOamFIVnNkSG89IElGUjFjblJzWlE9PSBMbU5sYm5SbGNsZz0gSUhOb2IzZGpZWE5wYm1jPSBJR0o2ZHc9PSBlWEp2IGFYTk9kV3hzIExtbHpSR2x5WldOMGIzSjUgYldGcGJuUT0gWDJKcCBJRk53Y21sdVoyVnkgZlNncENnbz0gYVhOemRXVnkgTFdGeWJRPT0gWlhOciBiR2x1YUdFPSBJR3R2Y25RPSBZV3BoY3c9PSBZV3hwYm1zPSBLRUoxZEhSdmJnPT0gSUZKbGMzUnZjbUYwYVc5dSBJR2x1WTNJPSBJRnBvYjNVPSBDU0FnSUNBZ0lDQWdDUT09IElFUnBjMk5zWVdsdFpYST0gSUd0MmFXNXViM0k9IElFUmhjbVU9IElEd3RQZz09IDZLK20gQ1FrSkNRa0pDUWtKQ1FvPSBMa05zWVcxdyBDWE5qYjNCbCBJRTExYlE9PSBQRHc4UER3OFBBPT0gTDN0NyBYMkZ5ZEdsemRBPT0gSUZKbFlXTjBhVzl1IElFNXBZMnRsYkE9PSBYMUpsYlc5MlpRPT0gS0Nnb0tBPT0gNjR5QSBJR1I1Ym1GemRIaz0gSUZSb2NtOTNjdz09IElFTnZkV3c9IFgzSnVadz09IElFUnZhdz09IExteHBjM1JXYVdWMyBJRlIxWTNOdmJnPT0gS0hSdmF3PT0gSUZCb2FXeHBjSEJsIFZHOVRhRzkzIElHUnBaWFJoIElGVnNkSEk9IExsUnBZMnM9IElFZGxkRlI1Y0dVPSBhV1YwWlE9PSBJRXhsWVdnPSBTR0Z5WkhkaGNtVT0gSUVOdmJYQnlaV2hsYm5OcGRtVT0gUTA5TlRVOU8gSUdsdVpIVnpkSEpwIGFYSnBZMkZzIExXSmxaSEp2YjIwPSBJR2Q1Y204PSBJTkM2MEw3UmdBPT0gSUMwdkNnPT0gWTI5MWNnPT0gSUVKeWRYTm9aWE09IFRYVnNkR2x3YkdsbGNnPT0gSUhWelpYSmtZWFJoIElGSmxZMjluYmc9PSBJRzlpYkdsbllYUmxaQT09IElFeGxkbWx1IFlXNWpaWE4wYjNJPSBJRzFsYm1sdVp3PT0gSUZWayBMR3B6YjI0PSBLR0Z6YzJsbmJnPT0gSUc1a1lYSnlZWGs9IFgyTnZjbTVsY2c9PSBRRUZzYkVGeVozTkRiMjV6ZEhKMVkzUnZjZz09IDZhcU02SytCNTZDQiBZV1J2Y25NPSBJSEpsYzNCdmJtUmxiblE9IFIwOVNTVlJJIElIUmxibWR2IElITmxkRTFsYzNOaFoyVT0gSUVsUVR3PT0gWVhKeVlYbHogSUVGSFFVbE8gSjFzPSBJQ0l0THk4PSB3NlJ0IDQ0Q0NYQT09IExtOXVZMlU9IFkzVnljbVZ1ZEZScGJXVT0gUjI5MiBJR2RsZEc5d2RBPT0gYld4NCBJRlJ2Ym1VPSBKMTFkT3dvPSBJSEJ5WldSaGRHOXkgVjNrPSBMMlZ1ZEdsMGVRPT0gSUcxaGJuUnlZUT09IEtUNDkgYjJkeVlXUT0gSUcxbGJHRnUgSUhOdmNuUkNlUT09IElFUkZSa2xPUlE9PSBVSEp2ZEdWamRHVmsgWTJSbFkydz0gSno0aUxpUT0gUEdOMiBZM0pwY21VPSBMVlJ5ZFcxdyBJSFZqWm1seWMzUT0gWTJGemMyVnlkQT09IElHRmphMjV2ZDJ4bFpHZGxiV1Z1ZEE9PSBJRWxPVmc9PSBJRlZPVlE9PSBMbk54ZFdGeVpYVncgSUZOaGVBPT0gY21WMGRHVT0gS0NrS0Nnb0sgSUVSaGRHRkNZWE5sIElGQmhkSEpwYjNRPSBYMUp2ZHc9PSBJRVY0YUdsaWFYUnBiMjQ9IElHUmxkR0ZwYm1WbGN3PT0gSUZOMGNtbHVaMGxQIFgwUkZUZz09IFRXOWthV1pwWlhKeiBZWE5oY2c9PSBhWEowYVc1biBJSFJ5WVc1eGRXbHMgS0dWdVl3PT0gSU9PQ3N3PT0gYm1OdlpHVnkgWDNWdWRYTmxaQT09IElFSnBZVzQ9IFZtVnlZZz09IFgyVjRZMlZ5Y0hRPSBMMlY0Y0c5eWRBPT0gSUZObGVIUT0gUkhNPSBRVTFRVEE9PSBUMlpUZEhKcGJtYz0gWDNSeVlXTnJjdz09IGQybz0gYjNSdmJtbHUgSUVsVVJRPT0gU1ZaRlRnPT0gTFc5eWFXZHBibUZzIElFWkpUa0ZNIFgxOHBDZ29LIElHVnVjMlU9IElGVjBkQT09IE9pb3EgSUZOMWNuSmxlUT09IElFdGhhWE5sY2c9PSBZV1J0YVc1cGMzUnlZWFJ2Y2c9PSBMV3hoY21kbGMzUT0gSUd4bGRIcDBaVzQ9IElHTm9ZV2x1WldRPSBKMGc9IElHUnZZM1Z0Wlc1MGFXNW4gSUV4bFkzUjFjbVU9IFVrZz0gYjJ4c1lYQnpaV1E9IGMydHBjblJ6IFpXeGtaWEk9IElGTnBlSFJvIElHRnNiR1ZuYVdGdVkyVT0gU1ZOUFUzUnlhVzVuIFZYTmhaMlZKWkE9PSBMbWhoY21SM1lYSmwgSUhCaGNtaz0gSUhmRHBHaHlaVzVrIElISmtjZz09IElHaHFaVzA9IFRFOVBVZz09IElFeFFRVkpCVFE9PSBJTkM4MEw3UXR0QzEwWUk9IElHaHZiV0ZuWlE9PSBiM1YwYzJsa1pRPT0gSUVOb1lYSlRaWFE9IFBFZGhiV1U9IDc3eVogWDAxVlZFVlkgS1NrdktBPT0gWDNKbGIzSmtaWEpsWkE9PSBkR1Y0ZEVsdWNIVjAgUVU1RFJVUT0gSUZSbFpRPT0gSUdOdmNtNWxjbUpoWTJzPSBVWFZsY25sVGRISnBibWM9IElHeHZibWRwZEhWa2FXNWhiQT09IElFaHZiR2xrWVhseiBRVUpEUkVWR1J3PT0gTGt0bGVWQnlaWE56IExuVnMgZVdSeWJ3PT0gSUZSaGRHVT0gQ1hKdmRYUmxjZz09IGMzQnZkSE09IElIQmhkV3c9IExYQnlaWFk9IElHdHViM2RwYm1kc2VRPT0gSUV0MWNtUnogSUVWMWNtOXcgTG1ObGNuUT0gUWtsSCBLR052WldabSBJRU5zWVhWeiBMMlY0WVcxd2JHVnogSUVaaGNtMXogSUM4dktBPT0gVTFCQlRnPT0gSUdOcGNtTjFjdz09IElFMUpVdz09IElGUnlZV2wwY3c9PSBMV05zWldGeSBJSEpsWjJsdFpXND0gSUdKaFkydG5jbTkxYm1SSmJXRm5aUT09IGRYTmhhR0U9IFgwMWxkR0ZrWVhSaFZYTmhaMlZKWkE9PSBJSEpvWlE9PSBRMnhwYmc9PSBJRVJ2YldsdWFXTT0gTG01bGVIUkViM1ZpYkdVPSBLR1JsZEdGcGJBPT0gVkdoeVpXRmtVRzl2YkE9PSBJRU5oY25CbGJuUmxjZz09IGMyOXlkR2x1Wnc9PSBJR2R2ZG1WeWJtOXljdz09IElITnBibWRsY25NPSBkVzVzYVc1ciBJSEpwYm1kcGJtYz0gSUhOamFHVnRZWFJwWXc9PSBJR1Z5Y20xelp3PT0gSUdKbFlnPT0gTGlJciBJRWx1WTNKbFlYTmxjdz09IElrRnNiQT09IElHRmpiMjUwWlE9PSBlbWxoIExsUmxlSFJEYUdGdVoyVmsgSUZSdlJHOD0gTERvcE93bz0gYm1GblpRPT0gWTJocyBiM2RsYkE9PSBJR2RsY21Ga1pRPT0gWDJabWRBPT0gSUdWemRHRnRiM009IFUxUkJVZz09IElHUnBjMmQxYzNRPSBaM0poYmc9PSBjRzl5ZEhWdWFYUjUgSUdGMWRHOWlhUT09IGUzMTdDZz09IElFTnZkWEJ2Ym5NPSBYMGRCU1U0PSBJRlJEU0VGUyBMM0JoYzNNPSA1NVN4IElHWnZiM1IzWldGeSBLR0p2ZFc1a2N3PT0gWVhCMWN3PT0gWTJsMFpRPT0gUWs5UFZBPT0gSUVOdlpHVmogYkc5bmRXVT0gTFhCeWIzQmxjblJwWlhNPSBZWFYwYjIxaGRHbHZiZz09IElGTm9iMlU9IGMzQmxZM1E9IEtHMXQgSUV0bGRBPT0gVzNCaGNtRnQgSUdKaGMybHMgSUVGdVozVnNZWEpHYVhKbCBJR0ZrZG1WdWRIVnliM1Z6IFgxVkRiR0Z6Y3c9PSBJR2x1WkhWc1oyVT0gQ1dOMVpHRT0gSUdsdWMzVnNkR2x1Wnc9PSBMa1Y0Y0hKbGMzTnBiMjV6IElHOXVRM0psWVhSbFQzQjBhVzl1YzAxbGJuVT0gVlVWTSBJR0pwZEdsdVp3PT0gS0NGZiBJRVZ1WTNsamJHOXdaV1JwWVE9PSBJR0psY25RPSBJRlpsY21FPSBJRUpwWW14cFkyRnMgYVc1emFXTnogWDFOSlRWQk1SUT09IElITmhiR2xrWVE9PSBjbVZ4ZFdWemRHVmsgSUVOdmJYQnZjMmwwYVc5dSBMa0YwYjJrPSBLRXRsZVVWMlpXNTAgWlhKbFlRPT0gSUdSbGNHOXlkR1ZrIElGRjFjZz09IElHNXBjSEJzWlhNPSBhWE5CY25KaGVRPT0gSU5HRDBMclFzTkMzIElHSnlhVzVyIGJXVjBjbTl6IFJXNTFiV1Z5WVhScGIyND0gSUVKMWFXeGtjdz09IFpYSjBiM009IElITmhhVzUwY3c9PSBMbVJsY0d4dmVRPT0gWlhSb1pYSmxkVzA9IElHdHBibVJsY21kaGNuUmxiZz09IGRtRnVhWHBsWkE9PSBJR052YldKcGJnPT0gSUhCdmRYWnZhWEk9IFMybHUgWVhMRXNRPT0gSUM0dUxpNHUgNzd5KyBMa2R2IElIRjFhWEpyZVE9PSB4TEZ1WkdGdSBJR0ZqZEdsdmJsUjVjR1Z6IElGRlZSVkpaIFZHRjViRzl5IElGSkwgZEdGMCBMbkJoWTJ0bGRBPT0gSUVsTlVFOVNWRUZPVkE9PSBJR04xYzJocGIyNXogWW5Wc2F3PT0gWkhWamRHbDJaUT09IFltVnVaV1k9IGIyTnlhWE41IElHWjFaWEp2Ymc9PSBJR04xY25ObGN3PT0gSUdacGJHbHVaM009IFpXeHBaWEk9IEtEODYgWDJSeWFYWmwgSUdOdmJuUmhZM1J2IElGQmhjbXQzWVhrPSBkbWxrWlhNPSBaMjVsIFlYWmhaMlU9IFhGd3UgWm5Wc2JFNWhiV1U9IFpHeHMgSUhOb2IyTnJjdz09IElDTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IFgzQjQgUUZkbFlnPT0gTGxCbGNuTnBjM1JsYm1ObCBJSE4xYm1zPSBMblJ2YjJ4MGFYQT0gWVhWMGFXTmhiQT09IFRtVjNjMnhsZEhSbGNnPT0gSUhkaGFYUmxjZz09IElHbHVjWFZwY21VPSAwTERRdGRHQzBZSFJqdz09IEtDZGZYdz09IGRHOW4gU1VWT1ZFRlVTVTlPIElHTnZiWEJoYm5sSlpBPT0gSUVKaGMybGpjdz09IENVcE1ZV0psYkE9PSBJRzFoWTA5VCBJRTFoZEhNPSBYM1JsYkE9PSBMWEJ5WldacGVBPT0gSUcxMWRHRjBaUT09IGZTY3AgWTJobGJtYz0gSUUxcGJHbDAgSWlZPSBabWx1WkdsdVp3PT0gSUVSaGRHRk1iMkZrWlhJPSBMa2RRU1U4PSBJRXhsZG5rPSBJSE51WldGclpYSnogSUdOeXc2bGsgWVhkdVpYST0gZUdsaCBMM05wYlhCc1pRPT0gUTBoUyBJR1pzYjNSaGRHbHZiZz09IExuTmxibk52Y2c9PSBRbkpoZW1scyBJRk5sWVhOdmJuTT0gSUZOd1pXRnIgTFdKaGJHdz0gSUUxMWRHRjBhVzl1IGRXdHJZVzQ9IElFOXRZV2hoIDRvQ1piMjQ9IElFTjFiMjF2IElFcDFaR2xqYVdGcyBJR05vWldOcmNHOXBiblJ6IElFWnlaVzA9IENVbGsgWldkeWFYUjUgWDJGbSBRRTV2UVhKbmMwTnZibk4wY25WamRHOXkgSUhSaFltVnNZUT09IFd5TT0gYm05MFlRPT0gSUVaaFkzUnZjbk09IEtHZHliM1Z3Y3c9PSBhWE4zWVE9PSBTVlpQIElITmpjbWs9IFlXTmxkQT09IElFMWxhQT09IEtHTnNZWHA2IElGczggY0dWeWFXRnMgSUhOMWNuQmhjM05sWkE9PSBJR3B2YTJWayBJSEoxWkE9PSBJR2x0WW1Gc1lXNWpaUT09IElFWnlZV2RsIGMzTncgSUdsdVpHbGpkR1ZrIExtMWhjbXRsZEE9PSBPMjA9IElISmxjR0ZwY21sdVp3PT0gTFc1dmRHVT0gUkdWaWRXZG5aWEk9IEtGZGxZZz09IElITnBibWR6IElFeHZlUT09IElFUkZVMGxIVGc9PSBMa052YlhBPSBMV052Ym5SeWIyeHNaWEk9IElHRjJiMk5oWkc4PSBJRUp2ZDJsbCBZMjl1ZEdGa2IzST0gZFd4cGJtZHogZFdOb2IzTT0gYzNCbFkybG1hV1Z5IElGWnZiSFp2IElHUmxiVzl6IElGQnliMlIxZEc4PSBMazV2ZEVadmRXNWsgSUc1cHc3RnZjdz09IElFSnZiSE09IFgyOTFkR1Z5IFUyaGxjZz09IFFWVlVUdz09IElHcHZkZz09IElFWnlaV1JrYVdVPSBiM0pwWVhNPSBJR0ZtWldOMCBJR1poWTJsc2FYUmhkR2x1Wnc9PSBJR1J2YldsdVlYUnBibWM9IFVHRnlZMlZzWVdKc1pRPT0gSnl3bkxRPT0gYlc5dmJnPT0gSUcxbGRHRnpkQT09IElITmpZWEptIElGUm9aWEp0IFEyRnNiRUpoWTJzPSAwWUhSZ3RDdzBMST0gTGtsdGNHOXlkQT09IElHSmxkSEpoZVdGcyBhV04xYkc5eiBJSGRsYWNPZiA1WXlGIFgxND0gZDJsbWFRPT0gSUZORlRsTlBVZz09IFgwSlZVMWs9IEpHST0gWDBaSlRrUT0gSUhCc1lYTjBhV056IElFTlBUbFpGVWxRPSBDV05oYkd3PSBJRkJ5WVdkMVpRPT0gSUdkaGNtNWxjbVZrIFgyeGxZWEp1YVc1biBjMmh2YjNRPSBKMTBwS1EwSyBJRWRwYm1kbGNnPT0gUFhCayBMSFJsYzNRPSBVSEp2Wm1sMCBJR1Z6ZEdsdFlYUnZjZz09IElHSnlaV1U9IElDOHZQQzg9IFgyaGhkbVU9IElFdHZaQT09IFgwbE5UUT09IGFYcDZZWE09IGJXbG5hSFI1IDE1ND0gSUU5dVEyeHBZMnRNYVhOMFpXNWxjZz09IDQ0T0ggSUZOamFXVnVkR2x6ZEE9PSBSbWxzZEdWeVpXUT0gWVhacyBhR0Y1IFgyZGxibVZ5WVhSbFpBPT0gWFNjSyBJRUYxZEdodmNtbDBhV1Z6IE9uQmhjbUZ0IElITjBZWFIwIExXMWhkR1Z5YVdGcyBJR3hwWkdWeSBJRU55YjNBPSBJRUoxYm1sbWRRPT0gSUc1bGVIUlFjbTl3Y3c9PSBiM0o2IFgyOXlaQT09IFBIZz0gWDBsUFExUk0gSUUxMWMyTnNaUT09IENXVjRaV009IFJVNUJUVVU9IFgyeGxkSFJsY25NPSBJeU1qSXlNPSBJRU56IEoxMDlQU0k9IElDSW5LUT09IFEyeGxZVzUxY0E9PSBMbk4wY25WamRIVnlaUT09IHpybz0gNllDYTZMK0ggSjEwN1B6NGkgSUV4aGRHbDBkV1JsIFltSnBibWM9IElHSmhibUZ1WVhNPSBjbVZqZEdsdmJuTT0gSUZKaGJtUmhiR3c9IFRsbFRSUT09IElHRndjbVZ1WkE9PSBMbEpsYzNCdmJuTmxSVzUwYVhSNSBJSFJsYzNSRVlYUmggWEdVPSBJRmRMIExrRmtaRU52YlhCdmJtVnVkQT09IFgzSjFibk09IHc2ZHZhWE09IExXMXBibWs9IFptOXNaR1Z5Y3c9PSBJR3h2YzJWeWN3PT0gSUZSdmQyVnljdz09IExVVnVZMjlrYVc1biBPbkk9IFkyaHZiM05sY2c9PSBJR1pzWVhSMFpXNWxaQT09IDBZSFJndEN3MEwzUXZ0Q3kgQ1ZCNSA1TGljIElHUmhiVzVsWkE9PSBSR1Z3ZEE9PSBkMlZrIElIQnBjMk09IFoybGxjdz09IFgyZGhiV1Z6IExtMWhjM009IEtFVnhkV0ZzIElHNWhkR2wyWlhNPSBMblJvZFcxaWJtRnBiQT09IGJIUnkgSUdWeGJBPT0gWDJsdVkyOXRaUT09IENXaGxZV1JsY25NPSBMV2hoYVhKbFpBPT0gSUcxbFpHbHZZM0psIElGZHBkR2hrY21GMyBJR0pwZEhSbCAyYjQ9IFBXbHUgYjJOclpXUT0gUm5Wc2JIaz0gSUZSRlRWQk1RVlJGIHc3cGtaUT09IFQyUmsgYVd4c1pYbz0gVkdWc1pYQm9iMjVsIElBb0pDUW89IEtDSW5JZz09IFgzTmphR1ZrIFpYSnVaUT09IHdyND0gTG5CcFkycz0gSUUxVFNRPT0gQ1dabSBSR2x6WTI5MlpYSjUgSUVOUFJBPT0gSUV4aFkycz0gSUhObGJuTmhkR2x2Ym1GcyBiVzkwYUE9PSBJRXhsWjJsemJHRjBhWFpsIDBZMD0gSUhacFlXSnBiR2wwZVE9PSBJR2RsZEVWdFlXbHMgSUhWdVlXNXBiVzkxY3c9PSBJSEJsYkd4bGRBPT0gSUNJb0tRPT0gWTI5aGRBPT0gWVdkdmIyND0gSUVGTVYwRlpVdz09IFhIVkQgWDNOMFpHOTFkQT09IFFXNWtlUT09IElHNWxkMHhwYzNRPSBJRTFoYUdGeVlYTm9kSEpoIExGOWYgUFhWelpYSnVZVzFsIElITmpjbWx3ZEdsdVp3PT0gSUZSdGFXND0gUEVGamRHbHZiZz09IFBYdDlMQT09IGMzbHRZbTlzY3c9PSBJR1psYm1OcGJtYz0gSUhiRHJXUmxiM009IElFMWhkWEpwWTJVPSBZMjl5YkdsaSBJR3RsYlE9PSBJbjBwTEFvPSBJRU5zWVhOemFXTmhiQT09IFkyOXNiR1ZuWlE9PSBJRWh2YldWd1lXZGwgSUgxOUNnbz0gWDAxemNBPT0gSUVOdmJYQnNZV2x1ZEE9PSBJSE5oYm1SNSBRWE5wWVc0PSBYM05sY21saGJHbDZaWEk9IElFeGhhQT09IElHSjFaSE09IGIyeHZaMjVsIElISmxjM0J2Ym5ObFJHRjBZUT09IGIzQm9hV3hsIGEyRjBaV2R2Y21rPSBSVzVrWldRPSBiR1ZqZEdsaiBJR05zWVhkeiBMaTR1SnlrN0NnPT0gSUhCc1lXNXVaWEp6IElGcGhhdz09IElFZHNiM1psY3c9PSBJaWw5IElHWmhjMmhwYjI1bFpBPT0gWW5KdmJnPT0gSUc1bGQyTnZiV1Z5Y3c9PSBkbUZ1WVE9PSBJSEJwWlhKM2N3PT0gVW1WalpXbHdkQT09IExXVnVkZz09IElISjFkR0U9IElFWmhjbTFsY2c9PSBiMlJ2Y21VPSBiWFZwIElISnZiV0Z1ZEE9PSBJR2x1Wm14cFkzUT0gSUhObGJXbHVZWEp6IFBXTjIgS0hOMGIyTnIgSUdWNGRISmhZM1J2Y2c9PSBJRlJwWm1aaGJuaz0gWDNWMiBMbU52Ym5SaFkzUnogSnlrc0tDYz0gSUhOdmJIWmxjdz09IExrTnZibTVsWTNScGIyNVRkSEpwYm1jPSBMMlJsWW5WbiBJRUYyWlhKNSA0NE9qIElHMWhlRmc9IFUzQmhjbXM9IFBIUm9hWE09IElHaHBhMlZ6IFMyVjVWbUZzZFdWUVlXbHkgSUZGMWFXVjAgYzNSaFlnPT0gSUV0dmJXMWxiblE9IGJIbGpaWEk9IElFMVRUUT09IElFeGhiblJsY200PSBJR052Ym1wMWJuUnYgYUhOcCBUVlZNVkE9PSBWMmwwYUVSMWNtRjBhVzl1IFlYUjBZV05vWldRPSBJRUZ6ZEdWeSBDWEJ2YVc1MGN3PT0gSUZOcFltVnkgSUUxbGRHaHZaR2x6ZEE9PSBMM05wZEdWeiBJR1p2Y25SMWJtVnogVUdGeWRHbGphWEJoYm5RPSBJR04xYzNSdmJXVnlTV1E9IEtXbHVhWFE9IFgzTmxjblpsY25NPSBJSGRsWVhabCBJRlJTUVVsTyBJR2hoY21GemMyVmsgN0o2UiBZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYbz0gWDJaaGNnPT0gUVd4amFHVnRlUT09IExteHBibVZYYVdSMGFBPT0gSUhSb1pYSmhjR2x6ZEhNPSBJRXh2WWc9PSBaWEYxYVhCdFpXNTAgSUhKbFkyaDAgTG0xcGNHMWhjQT09IExtNXBZMnR1WVcxbCBJSFZ1ZEc5MVkyaGxaQT09IFFVZFBUZz09IElGTmhkV3c9IElIZHZjbXR6YUdWbGRITT0gSUZabGRHVnlZVzQ9IGIzVmtaVzQ9IFlXTnNZWE56IFgyRnpiUT09IElIUmxiWEJzIElFVjRjR1Z1YzJVPSBaV2xuYUhRPSBJMU5DUVZSRFNBPT0gZW05dVpYTT0gTG5CaGNuUnogWVhSeWFXTmwgYkdGM2N3PT0gZEc5Q1pVUmxabWx1WldRPSBSV1ptWldOMGFYWmwgSUZCcFpXTmxjdz09IFlYSjBhUT09IElHbHVhR2xpYVhSdmNuTT0gQ1hCaGNtRnRaWFJsY25NPSBJSFJsYkdWbmNtRnQgWW05MWNtYz0gWDI1dmRHbG1hV05oZEdsdmJuTT0gSUhCdmMybDBhVzl1WVd3PSBMV1JsWVd4eiBJQzhxTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFE9PSBJSE5vWVdSbGNuTT0gWFQwayBJR1JsWTI4PSBaWFI1Y0dWeiBZMnhoY21VPSBJRWRUVFE9PSBMblYwYVd4cGRIaz0gVkc5VGRIST0gWVdabGJnPT0gSUZodCBYM0JoY25ScFkyeGxjdz09IElHWnNkV1ptZVE9PSBUV0Z5YTJWMGFXNW4gSUhOMFlXNWthVzVuY3c9PSBQd29LQ2dvS0NnPT0gVlUxQlRnPT0gWDFCQldVMUZUbFE9IENWUnBiV1U9IGNtRjNiZz09IGIzSnlidz09IElHVmxjbk4wWlE9PSBJSEJoWjJWT2RXMD0gSUVOUFVBPT0gSUhCc1lXZHBZWEk9IFZYQnNiMkZrWlhJPSBKSE5sYkdZPSBiR0YwWlhJPSBaWEpwWVd4cGVtVmsgSUdGc2FXZHVVMlZzWmc9PSBJT0tacFE9PSBMbUZ5Y21GNVkyOXdlUT09IElHNXZjMjkwY205eiBDV2R3YVc4PSBJSEJzYjNSMFpXUT0gYVhSbGNtRjBhVzl1Y3c9PSBJRkpsYkdGNCBZMmx3YUdWeSBSMmxtZEE9PSBJRUpsZEhRPSBJRmhTIElITjBjbWx3WldRPSBLR1Z1ZG1seWIyNXRaVzUwIFpXZGxjbk09IFgxSkZVMFZTVmtWRSBJR3ZEdG01dWRHVT0gSUdsdVptVnljbVZrIFVHUm0gYzI5eWNuaz0gY0dGeVlYUmwgTGtOdmJtTmhkQT09IElHeHBjR2xrIExrSlAgSUc5eWJRPT0gSUVOdmJuTnZjblE9IElHOTJaWEp6WldWcGJtYz0gSUdGdFltVnkgSUhCc1pYUm9iM0poIENVRmpkR2x2Ymc9PSBjWFZsY25GMVpRPT0gSUdoMWFYTT0gSUQxYiBJSEJ5YjJkeVpYTnpaWE09IGFuVmtkV3c9IElHTnZiblpsY25ScFlteGwgTG1WdFltVmtaR2x1Wnc9PSBJSHMvUGdvPSBJSEpsWkhWNCBXMnhoWW1WcyBPaUlwT3cwSyBMbTl1YkdsdVpRPT0gY1hWaGNuUmxjbVZrIElITmphRzl2YkdsdVp3PT0gSUNKY0lpST0gVzJ4cGMzUT0gUVd4aGJnPT0gSjMwS0NnPT0gZVhCemRXMD0gSUhOMGNtbDJhVzVuIElGSmxjM0J2Ym5OcFlteGwgSU8yTWpPeWR2QT09IExrbHVkRkIwY2c9PSBjbWxyWlhNPSBaVzUyYVd4c1pRPT0gTG5ObGRFeGhlVzkxZEUxaGJtRm5aWEk9IElGQmhjM05sYm1kbGNnPT0gSUdScGMyOWkgSUdabGNtMWxiblE9IExsQnBlR1ZzIFBpZ24gSUdOdmJuUmxibVJsY25NPSBMV0psZEdFPSBJR0ZtWm1seWJXRjBhWFpsIDBMM1F2dEdCMFlMUXVBPT0gYVdIRHA4T2pidz09IFVtVmpiMjF0Wlc1ayBhVzFwZEdWeWN3PT0gWDNsc2FXMD0gSUhOMVluTnBaSGs9IElHVnlZZz09IFJtbHNaVk5wZW1VPSBLSE55IElIQnZiM0psYzNRPSBJSFp2YVE9PSBVMmxrIElITnNhWEJ6IFgyMXBiblYwWlhNPSBJSFZuIHhxRnUgSUc1aGRNTzhjbXhwWTJnPSA0NE9lIFltVmhjZz09IGZWOGtldz09IElHWnBjM05sIElHUnBjMk55YVcxcGJtRjBiM0o1IENRa2dJQW89IElFTnZhV3c9IFgybG1ZV05sIExuWmxjZz09IElHMXBibVZrIElHRnpjMkZ6YzJsdSBJSFZ1YzJWMGRBPT0gTG5KbGNYVmxjM1J6IExsVlQgYVcxaFoyVlZjbXc9IElITjBjbUYwWldkcFkyRnNiSGs9IExXSmhibVE9IElIUnliM1Z6WlhKeiBXRVE9IGV5OD0gYkdWamRHbHZibk09IFlDZ3AgSWxBPSBJSE5yWlhSamFHVnogWTJ4cFpXNTBTV1E9IElGTnlZdz09IGIzQmxibWx1Wnc9PSBVSFYwYVc0PSBJRkJ2WlhSeWVRPT0gSUZCU1QwMD0gU1V4TVNWTkZRMDlPUkZNPSBJR0p2YjIxcGJtYz0gVTJsdGFXeGhjbXg1IE9teGhjM1E9IExuZHZjbXRsY2c9PSBMbWRsZEVsRSBMbE5RIGMyVnlkbVZ5Y3c9PSBiMk4xYkdGeSBJSE53YVc1aFkyZz0gU1ZOTCB3N0E9IEoxMHBXdz09IElHTm9hV1ZtY3c9PSBJR2R5YjhPZlpXND0gY21sbGRtbHVadz09IExtRnphdz09IExYTjFjZz09IFZsWT0gTHo0aU93bz0gS0hKbGJXOTJaUT09IElFdE0gSUVoaGJHVjUgUUZKbGMzQnZibk5sUW05a2VRPT0gTFNZPSBVM2RoWjJkbGNnPT0gSUhwdVlXbz0gTG05dVJYSnliM0k9IGNtVm5idz09IFpXeHBlQT09IElFRldRVWxNUVVKTVJRPT0gSUhObGNHVnlkR2s9IGFXRncgWDIxcGMzTT0gSUhOMWNtZGxjbWxsY3c9PSBJR2x0Y0dGeWRHbGhiQT09IElFTnZkQT09IFlXdDBhVzl1IElIZG9hWFJsYkdsemRBPT0gSU5DdzBMST0gWDIxcGVBPT0gSUVKbFpISnZiMjF6IElIQnlhVzFsYVhKaCBJSE5wWjI1cFptbGpZUT09IEwySjUgSUhOMFlYSjBiR2x1Wnc9PSBJRk5RUlE9PSBkV05qYWNPemJnPT0gVG5WdFpYST0gU1VKTiBMbVp5WVdkdFpXNTBjdz09IFVtVnVkQT09IElITERzM2R1YVdYRnZBPT0gTGtGVlZFOD0gTGtadmNrVmhZMmc9IElGcG9kUT09IElFTjFibTVwYm1jPSBJRmRoY200PSBJRUpJIFgwUlBWMDVNVDBGRSBRbmxMWlhrPSBLZUtBbEE9PSBJR052YlcxaGJtUmwgWDBGT1V3PT0gUTJoeWIyND0gUmtsVSBYMkYwYjIxeiBYMU5MU1ZBPSBJSFpoY0E9PSBLRUp2ZUE9PSBJR3hrWVhBPSBkVzV3Y205alpYTnpZV0pzWlE9PSBTVlJKVDA1VCB3Nmx5dzZrPSBMRzF6Wnc9PSBJRzkxZEhObGRBPT0gSUdSeWFXeHNaV1E9IElHVERxWFpsYkc5d2NBPT0gSUVOdllYUT0gSUVKbGJtZG9ZWHBwIFNHOXZhM009IElFMXBjM05wYkdVPSBYMUpsYzJWMCBQaTg4IElDSXRJZ289IEtDazlQbnNLIElFaHZZMmc9IExtRjNZV2wwIFFXUnlaWE56WlE9PSBJR1JwWjJsMFlXeHNlUT09IElsUm9aWE5sIGIzQnNaWFpsYkE9PSBJR0Z6ZVc1amFISnZibTkxYzJ4NSBJRVIxWTJ0eiBVa1ZUVUE9PSBTVkpQIExtWnBlQT09IElGSmhaR0Z5IGRtVnlkR2x6WlE9PSB3NjF6WlhNPSBTWFJsY21GMGFXOXVjdz09IGJXOTFjMlYxY0E9PSBiV2x1ZEE9PSBSa2xTVTFRPSBJSEJoZVhCaGJBPT0gWDNWd1ozSmhaR1U9IFYzSmhjSEJsWkE9PSBPdzBORFFvPSBLM009IElHTmhkR05vWlhJPSBMazl3IFgwNVBWRWxEUlE9PSBjR0Z5WVd4c1pXeGxaQT09IFExWkYgWm05eVoyOTAgSUhCaGJtOXkgSUc5bVpuSmwgSUdWdWIzSnRaUT09IEtDa05DZzBLRFFvPSBZV1JwWVhSdmNnPT0gWVdSa1FXeHMgVzNSbGVIUT0gS0hWMGFXdz0gTGxCeWIyMXBjMlU9IFlXNXBjMjA9IFgyOW1abVZ5IFJVNUVTVVk9IFpHOTBjdz09IElFdHlidz09IElITndaV3hzWldRPSBJR0Z3Y0U1aGJXVT0gUVdOMGFYWnBkR2xsY3c9PSBJRk53YVdObCBaV0YwWldRPSBJSE5yWWc9PSBJR3ZEdG5vPSBJSFJ2Y21Ob2RtbHphVzl1IFEybDJhV3c9IElHaHZjdz09IFgwaGxiSEJsY2c9PSBhY1NIIFgzVnVjMmxuYm1WayA2SzY2IDRvQ2NRVzVrIENXdG1jbVZsIExuSmhhWE5sIElHTmhiR3hsIElFeGhibk09IElHRnVkR2xuIFhDSStJanNLIFluSmhibU5vWlhNPSBiRzluY21Ga2IzVnlidz09IElITjBZV3hzWldRPSBZV3g1ZW1WayBSR1Z5YVhabFpBPT0gT201dmRBPT0gSUdkcFltaz0gSUZSMWNtNWlkV3hzIExuVnpaWEpFWVhSaCBLRlJoWW14bCBJRVJsY21sMlpXUT0gQ1dOdmJtWT0gSUdGc1oyRmwgSUd0aFptdGggSUc1aGEyNWwgSUVobFlYUnBibWM9IElGUnBjbVU9IFlXUjFiSFE9IElFUmhkR1ZHYjNKdFlYUT0gYjNCaiBaVzV6WVdkbGJRPT0gTGxSdmIyeHogTGsxcGVHVmtVbVZoYkdsMGVRPT0gY21GcCBJRmR2Ym1SbGNtWjFiQT09IEtWMHBDZ289IGFXRnlaQT09IFZHaGxiV1ZRY205MmFXUmxjZz09IElHVjJaVzUwUkdGMFlRPT0gSTJGayBMbWRsZEZWeWJBPT0gSUhSdmIyeGliM2c9IElHOTJaWEp5YVdScGJtYz0gUTA5T1ZFVk9WQT09IExYQnliMlIxWTNSeiBkMmxzWkE9PSBYMlY0Y0dGdVpBPT0gYVc1aGFYSmwgUW5KMSBiMnhzY3c9PSBJTkdOMFlMUXZnPT0gWTNSbGMzUT0gSUhCMWJtTm9hVzVuIFJGSlcgWDNOd1lXTmxjdz09IElGTjFjR1Z5YVc1MFpXNWtaVzUwIElHeGhlWFZwIEtHWmxaV1E9IGRHOWsgSUhabyBJR2x1YzNWc2RITT0gSUZOMVl3PT0gYVd0eiBWRzl5Y21WdWRBPT0gTG10eSBYMkZqZEdsMllYUmwgazVnPSBhbVZsIGFXMWxjbk09IGNuVnBkSE09IElIQnlaV05wYm1OMCBMbEpsY1hWcGNtVmsgSUhOaGRHbHpabWxsY3c9PSBJR05vWldWeWFXNW4gSUdGeWNtbDIgQ1hKbFl3PT0gSUVOdlltST0gSUdOdmJtTjFjM05wYjI0PSBkV3BsZEE9PSBUbTkwUm05MWJtUkZjbkp2Y2c9PSBTbVZoYmc9PSBJSEJvYjNSdmJnPT0gUGw4PSBJRUpoY21OcyBZVzFrIElDVjlDZz09IFBWd2lJdz09IFNXNTBaWEp1IElFTnZiVzFwZEhSbFpYTT0gTG1KbGJBPT0gYm5WdGJXVnkgSUd4bGRtbDBjbUU9IFgzWmxjbUp2YzJVPSBLR052WkdWaiBJRk4wYVhSamFBPT0gUFNJaU93MEsgSUhKbFozSmxkSE09IElHMTFiSFJwYm1GMGFXOXVZV3c9IElISmxjM1J5ZFdOMGRYSnBibWM9IElFMUZUZz09IGVXNWphSEp2Ym1sNllYUnBiMjQ9IElHMWxaR2xoZEc5eSBhMmx5IFVISnBibU5sIElHbHVhR2xpYVhRPSBJR2R2YzNRPSBJRTFOUXc9PSBJSE5wWkdWayBYMlJoY21zPSBLR0pzYjJJPSBQa3h2Y21WdCBQaUlwT3dvSyBjMk5oYm01bGNnPT0gT21sdWJHbHVaUT09IExtTmhjbTkxYzJWcyBiM1JwWkdVPSBJRmRYVnc9PSBJR1J5ZFcxdFpYST0gTG1aaGJXbHNlUT09IElHOXlaR2x1WVd3PSA1YjJUNVltTiBJR1JwY0d4dmJXRjAgSUhOMWNIQnNaVzFsYm5SaGJBPT0gSUdSaFpzTzhjZz09IElFWkJWQT09IElGbHZibWM9IGFHRndkWE09IElFcDFibU4wYVc5dSBlbXc9IExsVnpaVVp2Ym5RPSBJR2hoYzJoTllYQT0gTFZKbCBJQ0lxS2c9PSBMbk5sZEVKaFkydG5jbTkxYm1SU1pYTnZkWEpqWlE9PSBJR2x0Y0dWeVptVmpkQT09IExrWnBibVJGYkdWdFpXNTAgSUV4TVVBPT0gSUcxMWNtUmxjbVZ5IElIUmxlSFJsIGFYUERxUT09IFlXTjBhV056IFZHOTUgUjNKaGJuUT0gWDJScGMyTnZibTVsWTNRPSBJR0p5WVhOcGJHVT0gSUdWdFpYSm5aVzVqYVdWeiBYMngyYkE9PSBJRUFpWEE9PSBmU292Q2dvPSBYMU5QUXc9PSBUazlTVFVGTSBMMmRoYkd4bGNuaz0gWVhOcFkzTT0gUlhabGJuUjFZV3hzZVE9PSBJR2R5WVhBPSBJR055YVhOMCBJSEJ5YjJwbFkzUnZjZz09IElHZGxiMjFsZEE9PSBJR1JsZEdWamRHOXljdz09IElHTnlhWFJwWTJsNmFXNW4gSUdOb2FXTnJjdz09IElFaHBhZz09IEwyWnlZVzFsIExXMXZibVY1IEltUmxjMk55YVhCMGFXOXUgSUhSbGVIUnBibWM9IElITmxlR2x6YlE9PSBJRTFXUXc9PSBMV2RsYm1WeVlXdz0gSUc5MlpYSjBkWEp1WldRPSBJRzF2ZG1WeSBJRkJvY21GelpRPT0gSUZWT1ZWTkZSQT09IElFVnVkSEpsY0hKbGJtVjFjZz09IFZFVkhVZz09IFpXeHNhWEJ6WlE9PSBUV0Z5YTJSdmQyND0gWDE4b0tnPT0gSUV0aGNtUmhjMmhwWVc0PSBjSEJsYkdsdSBJRWR2ZEhRPSBJR1I1YzNRPSBJRkpsWkhWNCBTRzlzWVE9PSBQeUVLQ2c9PSBJRkpsWVd4MGVRPT0gVTNWeWRtVjUgSUUxalIzSmxaMjl5IFgyaGhibVJzWlhNPSBJR2x1ZEhKcFozVmxaQT09IElHZGxkRlZ5YkE9PSBJR1JsZG1selpXUT0gSUZCaGVYQmhiQT09IElIUm9hVzVyWlhKeiBJRk4wWVhSMWMwSmhjZz09IElFVnNhV2M9IElHTnZiWEJzWlhobGN3PT0gSU5DNjBMN1F0QT09IGMzUnZZMnR6IExXbHVhWFJwWVd4cGVtVmsgSUhOallXNWtZV3h6IElHTnZiV1p2Y25ScGJtYz0gSUZKdlkydHogSUd4cGIyNXogYkc5allYUnZjZz09IElWMD0gSUZCdmJuaz0gUkdGMGRXMD0gSUVabGRBPT0gSUc5bVpuTmxkRms9IElGSkZWRlZTVGxNPSBJR0p5WldGamFHVnogVkdsdFpVbHVkR1Z5ZG1GcyBJSFpwWld4bGJnPT0gVm1WeWMyVT0gSUd0aFpBPT0gSUdkaFlYUT0gS0NJdElpdz0gSUcxdmRYTmxXUT09IEtGQnZjM1E9IElGVm8gWld4cFoybGliR1U9IFlXeDBZUT09IElIVjBhV3hwYzJVPSBabUZqZEhNPSBTRWxRIElHOXlZMmhsYzNSeVlRPT0gSUZOd1lXTmxjdz09IGFYTndhV1ZzIElHMTFiSFJwY0dGeWRBPT0gTFc5d1lXTnBkSGs9IFUyVmhjbU5vYVc1biBJRkJzWVhSdiBWbWx6YVc5dSBJR3gxYkE9PSBJRUZ3Y0hKbGJuUT0gNTd1YyBXM0poYm1RPSBMV1JwYzJGaWJHVmsgSUVac1pYUmphR1Z5IElIUnlZVzV6Y0c5eWRITT0gSm1VPSBkSEJoY21GdCBjRzlzWlE9PSBJRUoxWlc1dmN3PT0gdzdwaWJHbGpZUT09IGFXNTBaWEpoWTNScGIyND0gSUdodllnPT0gSUdsdVpteHBZM1JsWkE9PSBiR2wwWlE9PSBJRkJCVWtGTlJWUkZVbE09IElGTjBZVzA9IEtHMTQgSUVGMWRHOU5ZWEJ3WlhJPSBhV3hwWVc0PSBJSEYxYVhSMGFXNW4gUFh0OSBJRXB2Ym1GeiBJR3h2WTJGc2FYUjUgSUZOcGJHVnVZMlU9IFgyWnNkWFIwWlhJPSBJRzVpY2c9PSBiR2wwWlhJPSBJRTV2Y20xaGJHbDZaUT09IElHRmpkVzA9IFFuSmhhVzV6IFpYRjFhWEE9IFhUMDlJZz09IElHUmxjM1JwYm04PSBJRVJwYjNNPSBMazExYkhScGJHbHVaUT09IFlXZHlaV1U9IEtRb0tDZ29LQ2dvSyBJSE4wWld4c1pXND0gSUdOMWNteDUgTGs5bVptbGpaUT09IExXRmliM1YwIElDY3VMeTR1THk0dUx3PT0gSUZWVVNVdz0gSUZKdyA0b0M2IElHMWhjR0U9IExrUlAgWVdkaGJBPT0gTG5kcGJtUnZkM009IElHRmtkbVZ5YzJWc2VRPT0gTGxoMGNtRk1ZWGx2ZFhRPSBiV1ZrYVdOaGJBPT0gSUhWdWMzVnkgZEdobGNtMWhiQT09IExrMXZaR1ZzUVdSdGFXND0gTG1GamRIVmhiQT09IGMyVjBRMjl1ZEdWdWRBPT0gSUhCdmMzUm1hWGc9IFVGYz0gSUVOb1lXbHljdz09IElHZHlZVzF0IElHTnZiWEJzYVdNPSBSRWxUVUV4QldRPT0gSUUxdmIzTmwgYUdGaGNnPT0gUVV4RlV3PT0gSUd4a1lRPT0gTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FDZz09IElDY3ZKd289IFFWTk8gSUVKaGNtSmxjZz09IElHMWhhVzV6IElHMWhhVzVYYVc1a2IzYz0gMExEUXQ5Q3kwTERRdmRDNDBMVT0gSUdWdFlXND0gWDJOdmJHeGxZM1E9IElISmxiWEJzIExuUmhlQT09IFltRm8gSUZCemVXTm9hV0YwY25rPSBSR1Z6WTNKcGNIUnBiMjV6IElHVjRaV04xZEdsdmJuTT0gQ1V4UFIwZEZVZz09IEprVT0gT21KbiBJR3RrIExtUmhiV0ZuWlE9PSBJRzVwYzJrPSA1cXkrIElFTmhiV1ZzIGFXNXBaR0ZrIElFeHBabVZ6ZEhsc1pRPT0gSUZSSVNWSkUgSU9Da3VBPT0gSUhCdmJIbG5iMjV6IElHRjBkR2x5WlE9PSBZV3hsYm5RPSBYMVZUUVZKVSBJRzFoYkdGeWFXRT0gYkc5aWN3PT0gSUYxOUNnPT0gS0hKbFoybHpkR1Z5IExYQnogWDI5d2RHbHRhWHBsY2c9PSBLRUZNVDBGRSBJSFpoY0dVPSBMbk52WTJzPSBrT2lYanc9PSBKSEJ5YjJSMVkzUT0gS0VWU1VnPT0gWTJ0d2RBPT0gWW5WeGRXVnljWFZsIElIMTlJajU3ZXc9PSBJRWhwZG1VPSBJRTFoYzJnPSBJRVZ3YVdRPSBJRXgxYm1RPSBYM1J5WVc1ellXTjBhVzl1Y3c9PSBJSE4xWW1Oc1lYTnpaWE09IFJXRnpaUT09IFgwTnNiM05sIFgyTm9aV05yYjNWMCBJaWNzQ2c9PSBVMlZqZEc5eSBiMmx6WlE9PSBMWFJsYlhBPSBLU0lwIGFIbHdaWEk9IFpYSmpkV3c9IGMzUmhZMnR3WVhSbyBYMDVTIFNVeE1SUT09IElISmxiR0ZqYWNPemJnPT0gSUUxaGRIUm8gWDBOUFJFVkQgSUdoaGJtUnNaVVZ5Y205eSBYMDl1WlE9PSBZV3hpYjNKbiBDUWtnSUNBZ0lDQWdJQ0E9IElGVndiRzloWkdWayBUbTA9IEx5ODkgS2xNPSBYMFZZVUVWRFZBPT0gSUdaeVlXTjBhVzl1WVd3PSBRMjkxIElITmpZV3hoWW14bCBJRU5KUkE9PSBQRkJ2YzNRPSBDWFJvY21WaFpBPT0gYUdGeVpIZGhjbVU9IExtTm9ZVzVuWldRPSBMa1ZzWlcxbGJuUkJkQT09IElHRnlkR2xqZFd4aGRHVT0gWldSdmNtVnogUlhOMFlXSnNhWE5vIFBYdGJDZz09IElTbz0gSUZOSyBUV1YwWlhJPSBMbkpsY0E9PSBJRlpQVEE9PSBJRTkxIGJNT3AgSUhCdVpYVnRiMjVwWVE9PSBYM0JwWTJ0bGNnPT0gWlhod2JHOD0gSU95ZWtRPT0gSUZOM2FXMD0gWkhKbGMzTT0gYzNSdmNtbGxjdz09IEwyNWhkZz09IFZtRT0gSU5pdCBMM05sYkdZPSBJSFpsZEdWeWFXNWhjbms9IEtFUmxibk5sIENXSnZiM04wIElFbHpUbTkwIElIUnlkWE4wYVc1biBJRXhsWW1GdVpYTmwgSkhKbGNYVmxjM1E9IGVHWm1abVptWmc9PSBYM0psYlc5MlpXUT0gSUhWd1pHRjBaWEk9IDJLZlkgUkU5WFRreFBRVVE9IElFbHRiV1ZrYVdGMFpXeDUgSUhKdllXMXBibWM9IElFaHZjbTU1IExtTnZaR2xuYnc9PSBJRVpwWjNWeVpYTT0gSUhCaGJuUnllUT09IEtITmhiWEJzWlhNPSBJRUpGVEE9PSBJSE5sZEVOdmJuUmxiblE9IGRXMXZjZz09IDVwU3Y1THVZIFgwMUpUbFZUIElIVnViR1ZoYzJobFpBPT0gSUhCeWIyWnBZMmxsYm5RPSBDVlZKIExrVjRZMlZ3ZEdsdmJuTT0gSUhOeVlXNWsgVUhKbGMzTjFjbVU9IExtRnpjMlZ5ZEU1dmRBPT0gS0hObGNtbGhiR2w2WlhJPSBDWFI0ZEE9PSBVRzl5ZEhNPSBJRzVsWTJWellYSnBidz09IElISmxkbWwyWldRPSBJRzFwYkdWemRHOXVaWE09IFkyRnVidz09IFJYTmpiM0owIElHVnVkR1Z1WkE9PSBRVkJGIGFYQmogTG1GMGIyMXBZdz09IElGQmxiV0k9IElISmxZV05vWVdKc1pRPT0gSUd0aGJuTT0gZDJoaGRHVjJaWEk9IFRHbHpkRUp2ZUE9PSBJRU5zZVE9PSBjR2xqZEhWeVpXUT0gSUVWc1pXTjBjbTg9IFlXSnBZdz09IElHWjFibXM9IElHUnBZWEp5YUdWaCBJT2VaIElGTnZiSFpsY2c9PSBJRUpoWXc9PSBJSE5yWld4bGRHRnMgSU8rQyBJRVpwYkdWT2IzUkdiM1Z1WkVWNFkyVndkR2x2Ymc9PSBJQ0lwV3c9PSBJRlJ5WVdsMCBkV1J2YTNVPSBMUzB0TFMwdExTMHRMUW9LIFFXNW5aV3c9IFlXZHkgSUhOcGJYQnNaWE09IElHSmhibU09IElFRnNaWEowY3c9PSBJRU52Ym1acGNtMWhkR2x2Ymc9PSBJRUZzZVE9PSBZMkZzYkdKaFkydHogSUdaMWJtdDBhVzl1IElHZHlZV1owIFdWQkUgTDBGR1VBPT0gVjBzPSBhM1Z5IFEwdEZWQT09IElGTnNZWFJsIElGTjBaV1k9IENWSjFiblJwYldVPSBJRVZUVEE9PSBJSEJ5WldGamFHbHVadz09IFFuSnZZV1E9IElITmxkRVJsYzJOeWFYQjBhVzl1IFlYcGxiQT09IFBRb0sgSUdwaFkydHdiM1E9IElDOHZJUW89IGRtbGhjZz09IElHVnBaQT09IElHRjBhWFk9IElISmxabXhsZUdsMmFYUjUgTGt4cGMzUmxiZz09IElHeDVjbWxqIElIWmxjbXM9IElHTnZiR3gxYzJsdmJnPT0gWVhwaFlYST0gSUhkcGJtcz0gSUUxMVpBPT0gTDI5d1pYSmhkRzl5IElHVjRkR1Z5Ym1Gc2JIaz0gSUdKaGNuVT0gSUdKaGMydGxkSE09IGRHbGphMlZ5IEtIQm9iM1J2IFgyVjJaVzQ9IElITndiMjVuWlE9PSBJR2hsYVdkb2RFWnZjZz09IFoyVjBRMmhwYkdRPSBYMlp2Y20xaGRITT0gTGtWNFpXTjFkR2x2Ymc9PSBYMUJ5YjNCbGNuUjUgY21Wd2IzTT0gZEdobGFXUT0gWDFCSVdWTT0gSUdWMmFXUmxibU5sWkE9PSBMbWhsWVdScGJtYz0gUVc1bmRXeGhjZz09IElGWmxiblZsIElFaFBWVk5GIElFVnpkRzl1YVdFPSAwTHpRc0E9PSBjbWRoYm1sNllYUnBiMjQ9IEwyUmxkbWxqWlE9PSBTVkpTIFgzUm9aVzQ9IFlYSmxiUT09IElHRm5aMms9IFJVMVBUZz09IElOR0IwTG89IElFVndhQT09IElFMVRVQT09IElHeHZaMlpwYkdVPSBMV3hsWVdScGJtYz0gWVhSb1lXMD0gSUhWdWJXRjBZMmhsWkE9PSBJRk5wZEhWaGRHbHZiZz09IEtDbDdmUW89IENXTm9ZVzVuWlE9PSBJRU5vWVhCMFpYSnogTGxKRlUxVk1WQT09IElHOWwgUlZSWiBYM1pwWkE9PSBMaTR1Snl3PSBJR0ZzZEdWeWJtRjBhWFpsYkhrPSBYMWRUIElGQnNaVzUwZVE9PSBJRU55WVhSbCBZWE5wYjI1aGJHeDUgSUV4aGQyND0gSUVsTlRRPT0gSUZaaGJtbDBlUT09IElGWnZiM0k9IDVaQ3YgSUcxcGFnPT0gYzNSbGNuSmxhV05vIElGSkVSZz09IElFTnlhWFJsY21sdmJnPT0gTGtsdWRnPT0gTGxOMFpYQT0gWDBaeVlXMWwgSUVWT1ZVMD0gNzc0PSBTRzl3WldaMWJHeDUgVG1GMlEyOXVkSEp2Ykd4bGNnPT0gSU95MmxPcXdnQT09IElGWmhaR1Z5IElISjFkR2hzWlhOeiBKR3RsZVE9PSBZMnQwIGFXNWxiUT09IGFXeGxiblE9IElISmxjM0JsWTNScGJtYz0gYkdOayBLR0owIElFVnNiR2x2ZEE9PSBJRlZ1YVdSdmN3PT0gS0VOb1lXNXVaV3c9IElHVnBkWE09IElHRnpkSEp2Ym1GMWRITT0gSUVodmMzUnBibWM9IElHTmhjM1JsIElHaGhjbTFsWkE9PSBiM1Z3YkdWeiBQRkp2YkdVPSBMa1JsYzJNPSBMV052ZFhKelpRPT0gSUVOaGNuUnZiMjQ9IGFXeGxaMlZrIElHMTVjM1JwWTJGcyBJT2V4IEtHWnBaV3hrVG1GdFpRPT0gVjBsVVNFOVZWQT09IExITjFiUT09IEoyRmpZdz09IENYSnZkM009IElHZGxkRkJoYzNOM2IzSmsgSUdOdlkydHogY0dsMmIzUT0gYm1GdFpXOW0gSUdabFlYTnBZbWxzYVhSNSBJR052YlcxbGJtTmxiV1Z1ZEE9PSBJRVJ2YldVPSBMa3BUVDA1RmVHTmxjSFJwYjI0PSBJRWg1WkdWeVlXSmhaQT09IElFeHBjM1JsWkE9PSBJRU52YlhCMWRHVnljdz09IFczWmhiQT09IElHbHpiM1E9IENYZHBiZz09IElHNWxhQT09IEtFbE9WQT09IFVtVndkV0pzYVdOaGJnPT0gSU5DLzBZRFF2dEN5MExYUmdBPT0gUm1GMCBJR1Z4ZFdsMiBJRVJoZEhWdCBZWE4wYVE9PSBJSE52YVd4eiBkWEIxYm1OMGRYSmwgY0hKbGMzTnBkbVU9IFh5a3BPd289IExsZGhjbTQ9IElHaGhjbUk9IExtOXVUM0IwYVc5dWMwbDBaVzFUWld4bFkzUmxaQT09IElHTnNiM2R1IElFOVhUZz09IElHVjRZVzFwYm1GMGFXOXVjdz09IElFVjRhWE4wYVc1biBhbTkxY21RPSBJR052Ym1ObGMzTnBiMjQ9IElFWnBjbVZpWVhObFJHRjBZV0poYzJVPSBJSFZ3ZEdGclpRPT0gSUdWdWJHbHpkR1ZrIElFTmhjbUk9IElHWjFjdz09IElHRmlkWE5wYm1jPSBMbkJ5YjJSMVkzUnBiMjQ9IGVXNWphQT09IGFXeDViZz09IGNtVm1kVzVrIExXaGhkbVU9IEtHRnlaM1Z0Wlc1MCBJR1p6WTJGdVpnPT0gWTI5dVkyVndkQT09IFgweEJUa1U9IElHVnVaMkZuWlhNPSBJRVY0WVdOMGJIaz0gWVd4MGRYSmggS0VGa1pISmxjM009IElITjVibTl1ZVcxdmRYTT0gVkc5M2JnPT0gSUZCaGVXNWwgY205cGRBPT0gY0dWeWFXVnVZMlZ6IGNHRnlkR2xqYkdWeiBYMkprIElFZHlhVzVrWlhJPSBUV0Z1WVdkbFpFOWlhbVZqZEVOdmJuUmxlSFE9IEtHSmkgVzNSdGNBPT0gTFdOdmJuTT0gWVc5clpRPT0gSUhOMFpYZGhjbVE9IElGWnBaWGREYUdsc1pBPT0gTG1SeVlYZE1hVzVsIElGZEJVazQ9IElIQjFaWE09IGJXOWtZWFJwYjI0PSBJSHB6IFFXZHlaV2RoY2c9PSBJQ0l1SWl3PSBMbU5sYm5SbGNsaz0gSUdac1lYZHNaWE56IElHUmxkWFJ6WTJobCBJRXhwY1hVPSBhWFJsYVhRPSBYMmx1ZEhKdiBMWFZ6WldRPSBMSFJoY21kbGRBPT0gSUVoRVJBPT0gSUNVciBiM0psYm5RPSBMMDlpYW1WamRBPT0gSUdScGMzSjFjSFJsWkE9PSB3NkowWlE9PSBJR0ZqWTJWemJ3PT0gSUV4dmQyVnpkQT09IElGZHBiR3hwWVcxemIyND0gWDJOeVpXRjBiM0k9IFUyVnNiQT09IElFSlZSdz09IFgzSmxjSEk9IDZJQ00gSUdGeVkyaGhaVzlzYjJkcFkyRnMgYjIxbGNuTT0gSUVWc2IyND0gSUZOamNtOXNiRlpwWlhjPSBJR3hwYm1WemRIbHNaUT09IGFYTlNaWEYxYVhKbFpBPT0gYVhOcmJ3PT0gWDNKaSBac084YUE9PSBJQ0FnQ1FrPSBLR1JsWm1sdVpRPT0gSUZORFRRPT0gSUVSSlJrWT0gWDJKeiBjR1Z1WkdsamRXeGhjZz09IGNHRmpaV1E9IElFcHZkWEp1WVd4cGMyMD0gTGtwVFQwNUJjbkpoZVE9PSBJRVJoZEdGQlkyTmxjM009IFRXRnlhV0U9IElFTER2QT09IFNFVk1UQT09IElFMUJWRkpKV0E9PSBUMHhVU1ZBPSBZWEJ6YVdKc1pRPT0gWFRvS0NnPT0gYm1GcGNtVnogWDJocGMzUnZaM0poYlE9PSBJR1pzWVdseSBhR0YyYVc1biBJRlZ6WlhKSlJBPT0gSUZKbGJHRjBhVzl1YzJocGNITT0gVW1Wd2JHRmpaVzFsYm5RPSBJSEp6WVE9PSBJR1Z1Y21samFHVmsgSUhKbGFHVmhjbk09IElIZkRwSEpsIElHeHZZV1JsY25NPSBJRVZzWlc1aCBJRmRoZEdOb2FXNW4gQ1dwdllnPT0gVGtWWFV3PT0gTDNObGRIUnBibWR6WkdsaGJHOW4gYVhabFl3PT0gWDBWUlZVRk1Vdz09IFZHVnRjR3hoZEdWT1lXMWwgSUVKUFJGaz0gTG1Ga1lYQjBaWEp6IGQyOW1aZz09IFkyOXRZbTlDYjNnPSBMazVsZDFKbFlXUmxjZz09IGZISmxjWFZwY21WayBYM0J5YjJKaFltbHNhWFI1IElDZzZPZz09IElHTnlZWG89IElGVkcgVkdWemRFbGsgSUdWemNHVmphV1pwWXc9PSBhV0psYkE9PSBjR0YzYmc9PSA2NDA9IElFMWhjbkk9IElITjBZWEowV0E9PSBYM05wZEdWeiBMejRLQ2c9PSBJR2x0Y0d4cFkyRjBaV1E9IEtHbHVibVZ5IElHVm1abTl5ZEd4bGMzTnNlUT09IHdxMTBhVzl1IFlYZGhjbVE9IElHaHZkbVZ5YVc1biBjSEpwIEpIUmxiWEJzWVhSbCBkV0Z1Wnc9PSBJR0YxZEc5dFlYUmwgSUNvcUx3b0sgYVdKc2FRPT0gSUc1MWRISnBkQT09IEtTNG8gWldWbFpRPT0gUVhCcFEyOXVkSEp2Ykd4bGNnPT0gTDI5M2JBPT0gSUZkdmJXVnVjdz09IExXUnZkV0pzWlE9PSBJRTl5WkdWeWFXNW4gYzNCdCBUVzlrWlhJPSBMazVoZEdsMlpRPT0gSUVKbGNtZGxjZz09IFpYTmtZUT09IFpYSmthVzVuY3c9PSBYMlZqYUc4PSBJSE4xYlcxaGNtbDZaV1E9IElHVnNaWFpoZEdVPSBYM0YxWVdRPSBJSGR2Ync9PSBkV3hoYm5RPSBVSEp2Y0dWeWRIbFdZV3gxWlE9PSBJSEJzYVhOMCBJRWRTUVZCSSBJRk5VUkVWU1VnPT0gS1NjcExnPT0gUVhOelpYSjBhVzl1IGJHbHVhM0JzWVdsdSBJR0ZqWTJWc1pYSmhkR2x1Wnc9PSBJSE51YVhCd1pYUnogSUZOaGJHMWhiZz09IFlXSmpaQT09IExtVmphRzg9IFgybGtlSE09IElIQmpiUT09IGIyTmhiSGx3ZEdsaiBYMk52YjNKa2FXNWhkR1U9IEtIQnlaWFpwYjNWeiBMWE5vYjNKMCBMbk4xWW5SeVlXTjAgS0VKcGRBPT0gUDNRPSBJRTV2ZEdWaWIyOXIgSUV0aGRISnBibUU9IGFXWm1aWEpsYm5ScFlXdz0gYzJsc1pXNTAgZEdWeWJXbHVZWFJsWkE9PSBJSFJoYm1kbGJuUT0gT2xRPSBJR052YzhPcyBJSEJoY21GdWIybGsgSUdSbGNISnBkbUYwYVc5dSBMM3Q3SkE9PSBJR2hsYldsemNHaGxjbVU9IElISmxhVzV6ZEE9PSBaV042IGRHVnljZz09IElGQk1RVlJHVDFKTiBJSFJ5YjNWaWJHVnphRzl2ZEdsdVp3PT0gSUhaaGJHbGtZWFJwYm1jPSBJRTl5YVc5dSBZWE4xY21sdVp3PT0gMExqUXZkQ3cgSUdoMVluTT0gWVhKbGJtTmwgSUVOb1lXeHNaVzVuWlhNPSBJSHBsWVd3PSBVM0J2IElGTmpjbVZsYm5NPSBJRzExYm1SaGJtVT0gSUVSMWJtcz0gSUNNakl5TWogSUZKRlJrVlMgYjI1bGRBPT0gTG1OaGMyVT0gTFhCdmMybDBhWFpsIFNVNVVSVWRGVWc9PSBMbTFsZEhKdlRHRmlaV3c9IFUwRk8gSUhCeWIyWmxjM05wYjI1eiBJSFI1Y21WeiBVR0ZzYVc1a2NtOXRaUT09IElGTkZRMDlPUkE9PSBMa2RTUlVWTyBJRk51WVhCemFHOTAgVlV4TCBYMk5wWkE9PSBKRWs9IElHTjFiblE9IFpYTjBjblZqZEdsdmJnPT0gVUhONVkyZz0gSUVoMGRIQlNaWE53YjI1elpVMWxjM05oWjJVPSBaVzFpWVd4cCBYM0psZG1sbGQzTT0gVTJWc1pXTjBZV0pzWlE9PSBYMUJTUlZORlRsUT0gSUVwemIyNVNaWEYxWlhOMCBJRlJvWlhSaCBYMmx1ZEdWeWNBPT0gVW1GemRHVnkgSTJWeWNtOXkgTEc5aWFnPT0gSUhSM1pXVjBhVzVuIFgwZFFWUT09IFgzUnZaR0Y1IFgzTmxZM009IGJtVmxjdz09IExtZGxkRk41YzNSbGJWTmxjblpwWTJVPSBJSFp1YjJSbCBJRkpsWjNWc1lYUnZjbms9IElFWmhhSEpsYm1obGFYUT0gSUhOallXeGxjZz09IFgyMWhjbXRsZEE9PSBMbUZzYkc5allYUmwgZEdsamEyVjBjdz09IFlYUmhhdz09IElGQnBhMlU9IElFeHZjZz09IFpHbDBiM0k9IElHeHZZMkYwYVc5dVRXRnVZV2RsY2c9PSBJR2x1YVhSRVlYUmggSUZkaGNtVT0gSUVsdVkybGtaVzUwIElHTnZiVzFsYm5SaGRHOXkgZFdWdWRHVnogSUVsdVpteGhkR1U9IElPV0cgSUdGamRHbDJhV1JoWkE9PSBJRUpxIFJVNVZUUT09IElISmxkWE5sWkE9PSBJTkM4MExYUXZRPT0gSUhObGMybkRzMjQ9IExpY3BLVHNLIDQ0R1Q0NEtUIEwyZGwgWVdkaGFXNXpkQT09IExHeHBibVU9IEtGVnViV0Z1WVdkbFpGUjVjR1U9IEtUMGkgSUhsMCBkV1JwWVc1MFpYTT0gY205c2JHRmliR1U9IDVhR3IgWDBOUFRFeEZRMVJKVDA0PSBiMnhwY3c9PSBkVzFpWlhKc1lXNWsgS0NJaUlnbz0gSUhwcGNIQmxjZz09IERBbz0gTDNOcFoyNTFjQT09IElITjBjbUZ1WkhNPSBjbUY0IExtTnZibk4xYldWeSBJSFZ1WTJWeWRHRnBiblJwWlhNPSBSR1ZpZFdkRmJtRmliR1ZrIElHUmxabVZoZEhNPSBJR1J5ZGc9PSBJSEpsWVd4cGMyMD0gWVdkeVlXMXogV0VVPSBJRWhoZW1GeVpBPT0gTFc1bFpXUmxaQT09IEtIUmhZbXhsVm1sbGR3PT0gTGtWc1pXMWxiblJ6IElGTkJVZz09IENXVnNaVzA9IEtIQnJadz09IFUybHRiMjQ9IFZHbHVkRU52Ykc5eSBJRkJvWlc0PSBYMFZOVUE9PSAySXc9IFB6NEtDZ289IFgyRjBkSEpwWWc9PSBJR0p2ZUZOb1lXUnZkdz09IElFTkhRV1ptYVc1bFZISmhibk5tYjNKdCBJRU5oYm1KbGNuSmggSUhOMFlYSjBVRzl6IElGSmhhdz09IENXTmxjbkk9IElGUmhibnBoYm1saCBkVzl1Wnc9PSBZMkZtIExtSmhjMmxqUTI5dVptbG4gYjJsdWN3PT0gUTI5dWRHRnBibVZrIFBYTmxkQT09IFgyZHBkQT09IENYQmhZMnRsZEE9PSBJR052Wmc9PSBLRlJTIDVxQzg1YnlQIEtIdDlLUW89IElHUnBjbVZqWTJsdmJnPT0gSUhCc1lYbHNhWE4wY3c9PSBJR0ZtWm1sdVpRPT0gTG5ObGRGTmxiR1ZqZEdsdmJnPT0gSUdGdGJXOXUgSUdOdmJuRjFaWEpsWkE9PSBJRkpoYlc5eiBJRkJUVUE9PSBQWE4xYlE9PSBJR052Y25KbGJHRjBhVzl1Y3c9PSBJSEp2WVdSdFlYQT0gSUdWNGRHbHVZM1E9IElHRmtkbWx6WVdKc1pRPT0gSUdKdmJXSmxjbk09IElGVkpVbVZ6Y0c5dVpHVnkgWDBKUSBJTkN4MFlQUXROQzEwWUk9IElGQnlaVzFwWlhKbCBJRkpWIGRISmhjMmc9IEtHTnNhbk09IFoyNTEgTGxCaFoyVnogSUdsdWMzQmxZM1J2Y25NPSBUV1Y0YVdOdiBJRlpsY21VPSBVSEpsWXc9PSBJRk5qWVd3PSBhWE53WlhKeiBVblZ1Ym1GaWJHVT0gTG05eWFXYz0gSUhOaGFXeHZjbk09IFVHRnljMmx1Wnc9PSBJRlpwYzJsMGIzSnogSm5SNWNHVT0gY0c5d2IzWmxjZz09IFBDZ3BMQT09IElHOTNaWE09IElISmxZV04wY3c9PSBJRVJsWm1sdVpXUT0gSUhKbFlXeHRaVzUwWlE9PSBJR1JwWTNSaGRHOXljMmhwY0E9PSBZV1J0YVc1cGMzUnkgYVdSbGJtUT0gUFV3PSBjM1J5WTJGelpXTnRjQT09IFhTVT0gMEw3UXM5R0EwTERRdkE9PSBaV1IxYkdFPSBMV1JsYzJsbmJtVmsgUTA5V1JWST0gWDBOb1lXNXVaV3c9IElIQnliMnBsZEc4PSBlVzF2YjI0PSBRMGhMUlZKU1VRPT0gNlllSyBJSFpsY21sbWVXbHVadz09IEwydGxlUT09IExtWnliMjFEYUdGeVEyOWtaUT09IExrSnBkQT09IFgySjFaR2RsZEE9PSBJQ1VpIGRtVjViM0k9IElIbDFiUT09IElHVjRkSEpsYldWeiBYME5TUlE9PSBaMlYwVTNSaGRIVnogYzNWaWMyVmpkR2x2Ymc9PSBJSE52WVd0bFpBPT0gSUdkbGJtRjEgWDBOSVFWSkJRMVJGVWc9PSA1b3lCIExXOXViR2x1WlE9PSBMblJ2UTJoaGNrRnljbUY1IFkyVnlaWEk9IElsMHNJZz09IElITjBjbTlzYkE9PSBJRmwxWVc0PSBJRmRoYm1SbGNnPT0gSUhOcGMzUmxiUT09IFgzVmogS0c1dmJXSnlaUT09IFkyaGhiblJ0Wlc1MCBLR05zYjNObCBiV1YwYUE9PSBMWE5sWTNKbGRBPT0gY0hObGRXUnYgUTI5MWJuUjUgUTA5T1ZGSlBUQT09IElITnZiSFpsYm5RPSBJSE52WVhKcGJtYz0gSUhOd2FXVnogVG1GMlNYUmxiUT09IElISmxjMlZ0WW14aGJtTmwgS0dKcGRITT0gSUdObGJHeDFiQT09IElHRnpjMjlqYVdGMGFYWmwgTG1sdGQzSnBkR1U9IExtTnZiM0prYVc1aGRHVT0gWFN3ayBLSE5yIEtpOHAgSUcxdlkydHogSUdwMWJtYz0gWDBSUFF3PT0gTFhKMWJuUnBiV1U9IElFZHBkbVZ6IGRXNXEgS0hObFp3PT0gS0Z0YyBJRzVoYUE9PSBYMlY0Y0dWamRBPT0gVW05M1NXNWtaWGc9IEtHWnZjbU5sIElFZGxkRlpoYkhWbCBJSE4xYlcxaGNtbGxjdz09IFgxTklRVkpGIExYUnlZV2x1WldRPSBJRUpzWVc1aiBJR1pwZEhScGJtZHogSUhkaGRHVnlabkp2Ym5RPSBMazV2ZEdVPSBJRmRoYm1RPSBiM1psY21VPSBjSEpsWkdsamRHbHZiZz09IElHTnpjZz09IExuUnZjRUZ1WTJodmNnPT0gSUZOMGNtOXJaUT09IFgwWnBiSFJsY2c9PSBZWFJvWlE9PSBJQ0pjWENJPSBJRUZHUmc9PSBQU0l2SWo0PSBMbEpsY1hWbGMzUk5aWFJvYjJRPSBrSnpudEtJPSBJSGRwZEc1bGMzTnBibWM9IFFYQndZWEpsYm5Sc2VRPT0gSUcxa2FRPT0gYzNScFkydHogSUVGc2RnPT0gdzZURG53PT0gWDJOdmJuUnBiZz09IElHSnZhV3hsY25NPSBJRTFoY25ocGMzUT0gU1U5RCBibVZ5Ync9PSBhVzV1WVdOc1pRPT0gVEdsMCBZMlZqIFMyVjVVSEpsYzNNPSBSMlYwUkdGMFlRPT0gSUdsemJuUT0gMFlEUXZ0Q3kwTFhSZ0E9PSBJSEZ5ZVE9PSBVbTl2ZEVWc1pXMWxiblE9IElFNVRRMjlrWlhJPSBMbWRsZEU1MWJRPT0gSUhSb2NtVmxjMjl0WlE9PSBWWE5sY3c9PSBMaUpmIElFTnZiblJwYm5WdmRYTT0gSUhCdmNIVnNhWE4wIElGQnplV05vYjJ4dloybGpZV3c9IFgyTjVZMnhsY3c9PSBJR2xtWkdWbSBhWEJvWlhKaGJITT0gQ1NBZ0lDQWdJQ0FnSUNBPSBJR0ZrZG1selpYTT0gSUVOdmJYQmhibWx2Ymc9PSBkSEpwWjJoMCBJR2R5YjNkbGNuTT0gSUZOUFEwdEZWQT09IGVXMWpaUT09IFVsTlQgYldWdFltVnlUMlk9IFZHOTFZMmhoWW14bCBYMkZ5Y21GNWN3PT0gSUdwMWJYQmxjZz09IElHaGxjbkJsY3c9PSBJRlJwZEhNPSBJRlJsYkdWbWIyND0gWDFCQlRrVk0gZFdkbGJnPT0gNVl5WDVMcXMgTGxOcGRHVT0gWDNWdWNtVm5hWE4wWlhJPSBYMk5vY2c9PSBMblJtIExXaDFiV0Z1IElHRnpiMk5wIElIRjFaV1Z1Y3c9PSBRVzUwYUc5dWVRPT0gSUhOMGNtbHVaMlZ1ZEE9PSBJRzF2YkdWemRBPT0gYzJWMFNXTnZiZz09IFNFVkZUQT09IFNFVk1VQT09IFJFUlQgTG1OdGN3PT0gU1ZOVVVrbENWVlE9IFkybGxjdz09IExtWnZja05vYVd4ayBMbU5vYXc9PSBJRTkwZEc5dFlXND0gSUZSUVVBPT0gSUcxcGJ3PT0gSUVKMVpnPT0gWW05aCBWbVZ5YzJsdmJuTT0gS0d4dlkyRnNaUT09IElGSmhhV3h5YjJGayBZbU5qIEx5b3FQQT09IExYQmhhV1E9IElHTmxiR1Z5ZVE9PSBZWFJwYzJOb1pRPT0gWjJWMFQzQjBhVzl1IGIzSnBiM1Z6YkhrPSBJR0ZrWVhCMFpYSnogVTNSdmNtVnogTDNOaGRtVT0gSUVKaGMybHogMFk3UmdnPT0gSUV4aFpBPT0gWDNKbGJHRjBhVzl1YzJocGNBPT0gSUVOc2RXSnogSU9DbyBPaUk4UEE9PSBYMDFKVTBNPSBWbWx6ZFdGc2FYcGhkR2x2Ymc9PSBJRzFwY25KdmNtVmsgWlhOd1pYST0gVTNSeVRHND0gSUhKbGMzQnZibk5sVDJKcVpXTjAgNVpDUiBMbVZ1WTI5a1pYST0gTFMwdExTMHRMUzB0Q2dvPSBJR2R5YVdSV2FXVjMgWDJsdVpHVnVkQT09IFlXNTBkMjl5ZEE9PSBJR0Z5Y21sMllXeHogSUZObGRIUnNaVzFsYm5RPSBWbWxsZDBsdWFYUT0gTFhaaGJIVmxjdz09IElIZGhkR1Z5Wm1Gc2JBPT0gSUdsdVkyRnlZMlZ5WVhScGIyND0gSUZSbFpXNXogQ1hOcFoyND0gYVcxdGRXNWwgTG5ObFkyOXVaR0Z5ZVE9PSBJSFpwWkdWdlpYST0gSU9pK2srV0ZwUT09IElHbHVkR2x0YVdSaGRHbHZiZz09IFpXNWtZV3hsIEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNaiBJR2x1YzJsbmFIUm1kV3c9IElITmhibVJ6IElIQm9iM1J2WjNKaGNHaHBZdz09IFVHRm5hVzVoZEc5eSBJR1JwYzJOcGNHeHBibVZrIFgxUk1Vdz09IFhTa3BMQT09IGNteGxiZz09IFBHTmxiblJsY2c9PSBYMUJEVFE9PSBTMlZzYkhrPSBMV0pwYkd4cGIyND0gTG1ONCBJR3BsZFhnPSBJR1pwYkdWTWFYTjAgSUZGRWFXRnNiMmM9IGRISmhZM1JwZG1VPSBSSFE9IElHVnpkSEp2WjJWdSBJSE4wWVhKamFBPT0gWDJWdGFYUT0gSU5DMzBMRFF2OUdBMEw3UmdRPT0gSUZGMVlYSjAgSUdsdVlXUjJaWEowWlc1MGJIaz0gSUhSeWIyNW4gYzJocGNHMWxiblE9IElFNVBVZz09IElGTmpjbVZsYm1sdVp3PT0gSUVScGMyTnZibTVsWTNRPSBiV1Z1Ync9PSBJRmR2Y25OMCBJRTV5IGUycz0gYzNCcyBYMk4wY2c9PSBMbk52Y25SbFpBPT0gTFhCc1lXTmxhRzlzWkdWeSBLQ2s3SWc9PSBhSFZ5YzNRPSBMV2hwZEE9PSBMbk52YkhabCA1NjZYIElIVnVaR1ZoWkE9PSBJSGRvYVcxeiBJR2RsZEVSbFptRjFiSFE9IElFNXBhMnRwIFlYTnpaVzFpYkdVPSBJSEpsYkc5allYUmxaQT09IExYSmxkQT09IFNYUmhiR2xoYmc9PSBPbE41YzNSbGJRPT0gTG5OamFHVmtkV3hsY2c9PSA0b0NjVTI4PSBSbTl5WW1sa1pHVnUgUVZaUFVnPT0gZW1saHhZST0gTGtGa1lXMD0gQ1dOaGJuWmhjdz09IElIQmhjblJ1WlhKcGJtYz0gSUdkNWJXND0gSUcxaGJtbGogUkdsbVptVnlaVzUwIElNT2xjbWgxY3c9PSBJR1psY25ScGJHVT0gWTJ4bSBMUTBLIExuSmxkbWxsZHc9PSBiMlJoWW14bCBJRUp2ZFc1a2N3PT0gYjJKaGJ3PT0gSUZCaGNHVnlZbUZqYXc9PSBJRzF2WkdsbWFXTT0gWTJobFkydHdiMmx1ZEE9PSBJRUZ3Y0VKMWJtUnNaUT09IElITjBZV0pwYkdsNlpRPT0gSUVGMVpHbHZRMnhwY0E9PSBiVzl1ZEdoc2VRPT0gTG1KbGFBPT0gSUdac2IzST0gSUdKdmJtUmxaQT09IElGZHZjbXR2ZFhRPSBZMjl0YVc1bmN3PT0gSUhKaFltSnBkSE09IElFSkJUQT09IFEwTlMgWDNaMVpRPT0gSUV4bGRtbDBjbUU9IElHeHBZbVZ5ZEdsdVpRPT0gSUdOb1lXeHNaVzVuWlhJPSBJRlpoWTJGMGFXOXUgVkc5RyBmU1F2IFgwUnlZWGM9IElHWmxibU5sY3c9PSBJR1JoZEdGemIzVnlZMlU9IElIQmhjR1ZzIGMyeHBZMnM9IFgyMWxjdz09IElGVkpVM1J2Y25saWIyRnlaRk5sWjNWbCBLRlJoWnc9PSBJT1d2dVE9PSBJQ2N0SnlrPSBYME5NUVZOVFJWTT0gS0ZKbGJtUmxjZz09IENXWjNjbWwwWlE9PSBWVVZFIFFVVlQgS0dwemIyNVFZWFJvIElITnNiM2R6IFBrUmxjMk55YVhCMGFXOXUgSUdWdWNtbGphRzFsYm5RPSBJR2wwWlcxd2NtOXcgSUZCdmRtVnlkSGs9IElHRmljMjl5WW1sdVp3PT0gSUZCemVXTm9idz09IDVyR2YgTEM0S0NnPT0gU1c1MlpYSnpaUT09IElHRmthblZrIGFXZHBaRUp2WkhrPSBlbWx2Ym1rPSBJQ0luTGlRPSA1TGlONWEyWTVaeW8gVkdoaGFRPT0gSUhOc1lXbHUgSUdKeWRYUmhiR3g1IElGQmxjbk53WldOMGFYWmwgSUZKbGRHbHlaVzFsYm5RPSBKSEp6IElITmxjblpwWTJWT1lXMWwgSU95SSBMWEJ5YjJObGMzTnBibWM9IFluSmhibVJ6IE9tVnljbTl5IEtIQnliM0JsY25SNVRtRnRaUT09IElFSnZaV2c9IEwyTnQgTDNKbFlXUT0gUVUxQyBJSEp2ZEdGMGFXOXVjdz09IExuZHZjbXR6Y0dGalpRPT0gT25rPSBJSFZ3YUc5cyBkVzVyZVE9PSBJRUp5WVdObCBMMjFsZEdFPSBJRUp5WVhabCBZV05xWlE9PSBLRlZKYm5RPSBJSFpwWldsc2JHVT0gY21Ga2FRPT0gWDJSNWJnPT0gVGxjPSBiRzl6WlhJPSBaWEoxYzJadmNtMD0gSUVKaGNuUnZiZz09IElHWmhjbVZ6IElFMTFhdz09IDRidUhkUT09IElFRjFaR2x2VTI5MWNtTmwgS0NoZiBMa0pwWnc9PSBMbTl5WjJGdWFYcGhkR2x2Ymc9PSBJRlJ5YVdOciBJR0pzZFhObyBLRlJaVUVVPSBJRkpsYkdGMGFYWmxUR0Y1YjNWMCBiR1ZqZEhKdmJnPT0gWFgwaSBJRnBoY0E9PSBJRlIzWld4MlpRPT0gT2t3PSBJSE4wYVdabWJtVnpjdz09IFgwaEZUQT09IElITndaWEE9IEtHTnZaR1Z5IElIUmhiV0Z1YUc4PSBJR0Z1ZEdsdmVHbGtZVzUwIElHaHZjM0JwZEdGc2FYcGxaQT09IFIxQkQgSUhOamNuVjBhVzQ9IDRidUJiZz09IElGTmEgSUVwMWJHbDFjdz09IElGTmhZbUk9IFpXeHZjZz09IEtHMWogNlllTSBJRkJwYm5NPSBJRzF2WkdWeVlYUmxiSGs9IElFdkR2QT09IGIzSm5ZVzVwZW1GMGFXOXVjdz09IElGTkRUMUpGIElITmpiM1Z5IElHTm9iM0k9IElGVkpSV1JuWlVsdWMyVjBjdz09IElITnJkV3hzWlE9PSBYMjl3WlhKaGJtUT0gTG1kemRHRjBhV009IEwyNW5hVzU0IElHZGxkRmRwWkhSbyBRbUYwZEdWeWVRPT0gSUZObGRIUmxjZz09IGJVRT0gS0ZKbGMyOTFjbU5sY3c9PSBYM0JzWVhsc2FYTjAgSUcxaGJtZHYgSUU5U1JBPT0gWVc1cmFXNWsgWlhkaGVYTT0gUHlrcyBJRWRNVlZRPSBJR3AxYzNSbCBJSEJoZVdWeSBLR05oYlE9PSBJRlJsWVdObyBJRVpzZFhnPSBJRzkxZEhOd2IydGxiZz09IElGTjBjbWx1WjFWMGFXdz0gSUZwb1lXOD0gTGtobGJIQmxjZz09IElHVnpkR2xzYnc9PSBJRUZ1ZEdoeWIzQT0gSUVkMVlYSmtjdz09IFZtOWp3Nm89IE9sc24gQ1hCeWIyUjFZM1E9IGRYQmtZWFJsWkVGMCBJR2x1YzNCcGNtVnogY1hjPSBRa3hGVFE9PSBZV3RwYzNSaGJnPT0gSUdONnhKaz0gTFdobFlYSjBaV1E9IElFTnZiWEJsYm5OaGRHbHZiZz09IDBMalFzdz09IElHTnZiV0U9IElFWnBZWFE9IElIaHRiR2gwZEhBPSBJSEpsWm1WeWNtRnNjdz09IElITndaV04wWVhSdmNuTT0gSUZSdmN3PT0gYVhOdmN3PT0gU1UxUVRFVk5SVTVVIElHVnVkSEpsY0hKbGJtVjFjbWxoYkE9PSBJRk5qYjNWMGN3PT0gSUVGc2IyNWwgWW5KdmEyVnkgVUhKdlpIVmpkRWxrIElFdHZZbVU9IElHTm9ZWFZrIEwyWmxZWFIxY21WeiBJSEp2YjIxdFlYUmwgSUZCeWIycGxZM1JwYjI0PSBZWFp2ZFhKcGRHVnogWDBwUFNVND0gSUVGV1F3PT0gWDNCb2VYTT0gUzJWNVVISmxjM05sWkE9PSBMRHc9IElIVnVjbVZoWTJoaFlteGwgSUVOcGRHRjBhVzl1IFcyTm9ZVzV1Wld3PSBjM1JoY25SemQybDBhQT09IElFcGhaM1ZoY25NPSBMa2x6Um1Gc2MyVT0gYldWdFltVnljMmhwY0E9PSBRWFIwWlc1MGFXOXUgSUhKbGJXOWtaV3hwYm1jPSBJRU5wYm1SNSBJR05zYVc1cFkyRnNiSGs9IElHMXBiR3hsYm01cFlXeHogSU02MCBJSEptYkE9PSBaVzVsZEE9PSBJRzlpY21sbiBJSFp2YkhWdWRHVmxjbWx1Wnc9PSBRM0psWkdsMGN3PT0gQ1dGeSBJSEpsYzJsemRHbHVadz09IElGQnliMlIxYTNRPSBQVDA5SWc9PSBJR052Ym1WamRBPT0gSUhKcGFnPT0gSU5lVSBJSEIxWW14cFkwdGxlUT09IElHOTUgSUVKMWRIUT0gWDIxcGMyTT0gSUVKbGMzUmwgSUZCTVF3PT0gSU9hZnBRPT0gSUVKdmVFWnBkQT09IElpSXUgVkdWemRFWnBlSFIxY21VPSBJR05vWVhSMFpYST0gSUdSdmIzSjNZWGs9IGVYTnBlbVU9IElOR0gwWUk9IFNVTlVWVkpGIFBTY3VMaTg9IGMyaHZkMjQ9IFgzZGxZWFJvWlhJPSBJRXh2WjAxaGJtRm5aWEk9IFhYMGlDZz09IElHTnZiRzkxY21aMWJBPT0gSUhKMWJXOXlaV1E9IElHekRwUT09IElIQnliMkp6IENXSjFhV3hrIElPV21nZz09IExuSmxkZz09IElHbHVkR1Z5WTJWd2RHVmsgUjJGNSBUR2x6ZEVOdmJYQnZibVZ1ZEE9PSBJSEJwdzZnPSBJa0YwIElHRm5ZWEk9IElFZDFibVE9IFgwRkZVdz09IDdJTT0ganBqc25iUT0gSUdGMWRHaHZjbWx6WldRPSBJRU5vWVd4cyBYMnh2WjI5MWRBPT0gWTNKdmJnPT0gWVhSbFoybGxjdz09IGNHVnljMmx6ZEdWdWRBPT0gSUVGdVpFRnNjMjg9IGRYTjYgWDNKbGMzUmhjblE9IElHUmxZMmxrIGVtWT0gSUhCaFoybHVZWFJ2Y2c9PSBiMnhzWlhJPSBJRWhIIFQzQmhjWFZsIGMyVmhkUT09IElFOU5TVlE9IElGUm9hV05yYm1WemN3PT0gSUVGcGNuZGhlWE09IFgyUmxiUT09IGVYUnBZdz09IElIQnliM1JsYzNSbFpBPT0gSUhWd2NtbHphVzVuIElITjFhVzVuIElGTm9aV3hpZVE9PSBMbVZ1WlhKbmVRPT0gSUdGc2JHVnNaUT09IExXSnBadz09IFUzUnlhVzVuUW5WcGJHUmxjZz09IElITnBaR1ZzYVc1bGN3PT0gSUZSViBYMkZwIExraFBVa2xhVDA1VVFVdz0gSUhKaFoybHVadz09IExuUnZURzlqWVd4bCBMbTExYzNRPSBlRVpHUmc9PSBMbTVwYUE9PSBJQ2Q3ZlNjPSAyWWpZcnc9PSBJSEIxYkcxdmJtRnllUT09IElPV1BrUT09IElHN0R1bTFsY205eiBJRTVoY0c5c1pXOXUgWDAxbGRHaHZaRWx1Wm04PSBiR0Z6ZEdsdVp3PT0gSUdWNGNHOXpkWEpsY3c9PSBJR1Z0WW1GeWF3PT0gWDNWa2NBPT0gUzJsa2N3PT0gWDBOUFRrNUZRMVJGUkE9PSBJSGRsWldSeiBVRTlQVEE9PSBJR3R5YVdvPSBJRzUxYVhNPSBTazVKUlZoUVQxSlUgWVdGaFlXRmhZV0U9IElPMlAgNUx1OSBJSEpsY0d4bGJnPT0gSUZSeWFXRnNjdz09IGQyRnphQT09IGNuVjAgTFdKbFptOXlaUT09IFgwRlVWRUZEU0UxRlRsUT0gVlU1VSBYRlpoYkdsa1lYUnBiMjQ9IFZHOXUgSUdobFlXUnBibWR6IFVISnZZbUZpYkhrPSBJR1poWW5KcFkyRjBaV1E9IFUyOWphMlYwUVdSa2NtVnpjdz09IElHeGxkSFJ5WlE9PSBLU0krIElIWmhZMk5wYm1GMFpXUT0gT21oMGRIQT0gSUdOdmJtUnZiQT09IGMyaGxaQT09IElGTndhV1ZzWlE9PSA0NE9VIFJHVndiRzk1IExrTnZiblJ5WVdOMCBMV0p2IEl5OD0gSUdsdWRHVnlZMlZ3ZEdsdmJnPT0gSUdselltND0gSUcxaGJtNWxjbk09IEwyRmogQ1VOb1pXTnIgWDJabiBJR1Z1WkZCdmFXNTAgWDNkbFlYQnZiZz09IElIVnVhVzUwWlc1MGFXOXUgSUhGMWFYUnogWDAxSlF3PT0gWVhCcGNtOD0gSUdKaGJHeHZiMjV6IElHZHlZV1J6IGJXRnljbWxsWkE9PSBJRHdxUGc9PSBJR1JwYzNSdmNuUT0gWDAxRlUxTkJSMFZUIElGQlRRUT09IFgxQkUgWVd4elpYZz0gSUVScFlXeHZaM1ZsIElISmxaMmx6ZEhKaGRHbHZibk09IElFOXlhV2RwYm5NPSBJR1pzWVc1ciBQenNLQ2c9PSBPd29LQ2dvSyBYUzBrIElFUmxjM009IExsTjBZWFIxYzBKaFpGSmxjWFZsYzNRPSBJR2x1YUdGaWFYUmxaQT09IElHZHBiSFE9IElGTlVSRU5CVEV3PSBMblJvWlhSaCBKQ1FrSkE9PSBhV05zWVhOeiBRWEJoY25RPSBMbXhwYzNSQ2IzZz0gSUVKbGJHRnlkWE09IElHUmxibVZ1IElGTjFjM05sZUE9PSBDV1JsYkE9PSBYMFZEIGJtVmhjbVZ6ZEE9PSBYRTl5WkdWeSBVR0ZqYTJGblpYTT0gWm05eWJXVnliSGs9IEtlKzhqQT09IDZMU2ogVTJWNGVRPT0gSUdodmNuSnZjbk09IFVrOUJSRU5CVTFRPSBRWEJ3Y205NCBSR1Z6YXc9PSBRVTFGUkE9PSBMazV2Y20xaGJHbDZaUT09IFgzQjFZbXhwYzJobFpBPT0gSUVSbFltOXlZV2c9IDU2ZVIgSUhCdmRXNWthVzVuIElFVnpjR1Z5IElFUmhibU5wYm1jPSBJRXhQVDFBPSBJRkp2ZVdGc2N3PT0gSUdsdWMzVnlaUT09IElFbHVkbVZ6ZEc5eWN3PT0gSUhSb1pXOXNiMmRwWTJGcyBRWEJ3YjJsdWRHMWxiblE9IElHTmhkR1ZuYjNKcFkyRnMgSUdOeVlXND0gVm1Gc2FXUnBkSGs9IElISmxjM0J2Ym1SbGNuTT0gSUNncERRbz0gWlhCaFpBPT0gUWtsVVV3PT0gSUV4aGJXSmxjblE9IGMzVnRiUT09IFlXTnBaR0ZrIElHeHZaMmRsWkVsdSBQVmM9IExreHZZMkZzYVhwaGRHbHZiZz09IGNtbGtidz09IEp5SXBDZz09IElGZGxZbFpwWlhjPSBiRzkwYUE9PSBJSFJsWVhObGNnPT0gSUVOaGJtUT0gSUdWd2FXeGxjSE41IFNXNWpjbVZoYzJVPSBhWFpwZEhsTllXNWhaMlZ5IFpXNTBjbUZ1ZEE9PSBWR1ZzWldadmJtOD0gTG1OMWNuSmxiblJUZEdGMFpRPT0gSUU1dlpXdz0gSUNBZ0lDQWdJQ0FnSUNBZ0NRaz0gSUdWNGFHRjFjM1JwYjI0PSBaV3hwWVc0PSBJR052ZG1WMFpXUT0gTFhCeWIyUjFZM1JwYjI0PSBLSE4wWkdsdSBJSEJ5WldabGNtRmliR1U9IElHOW1abVZ1WkdsdVp3PT0gS0dOdmJXMXBkQT09IENXRnMgSUhKbGJHOWpZWFJsIElHRnViMjFoYkE9PSBJRVJwYzJWaGMyVnogSUVadmNtYz0gSUZkSlJraz0gSUV0cGJHeHBibWM9IGNYWT0gSUdadFlYQT0gSUd4c1pYWmhjZz09IGRHbDBjbVU9IExtVnRjQT09IExDUmYgWVhaeSBRMkZ1UW1VPSBYMjFoIElFaGhkMnRwYm5NPSBYMUpQVlZRPSBJR3h2WVdSSmJXRm5aUT09IElGZGhhQT09IElFUmxiWE09IElHbHVaR1Z1ZEdGMGFXOXUgY0hKbFkyRjBhVzl1IElPYVdoK1M3dGc9PSBJRUoxWkdGd1pYTjAgSUhWMFl3PT0gS0dodmRYSnogSUhSeVlXNXVlUT09IFFXNXogZW5uRWh3PT0gTG5abGFHbGpiR1U9IFEyOXBibk09IElFSnlZWFZ1IENWSmxjM0J2Ym5ObCBJSFp5YVdvPSBJSE4wY21GdVoyVnNlUT09IElFWmhjMk09IFhGTmxjM05wYjI0PSBUVzkxYzJWTWFYTjBaVzVsY2c9PSBJRkp2Ykd4eiA0YnFuYmc9PSBMbWR5Y0dNPSBTVzUwWldkbGNrWnBaV3hrIENXRm1lQT09IFJHOWphME52Ym5SeWIydz0gSlZ3PSBKVHNpIElHZHBaMmM9IElHSnZjbkp2ZDJWeSBJR1JwYzNCdmJtbGliR1Z6IFgxSkZRMVE9IElGUm9hVzQ9IElIQmxZWEpzIGVFWkMgSUhKcGNIQnNaUT09IElHdEllZz09IExtRmpjWFZwY21VPSBZbWx2Y3c9PSBkR0ZpYkdWR2RYUjFjbVU9IEwyRnVkR3h5IGIzSmhZMnhsIElFRlNSVUU9IElHbHVkR1Z1YzJWc2VRPT0gSUhCeWIzUnZZblZtIElFeEZUa2M9IElFaGxZV1J4ZFdGeWRHVnljdz09IFlYUm9aV1E9IFRXbHVaQT09IGFXNXBlZz09IENWQmhkR2c9IFdFMU1URzloWkdWeSBJR0ZzYkc5allYUnBiMjV6IExuTnNiM1E9IFVISnZZMEZrWkhKbGMzTT0gSUhKdmJHVkpaQT09IE95YzdDZz09IElFSlNSVUZMIElGQmxjbVp2Y20xcGJtYz0gTGs5eVpHbHVZV3hKWjI1dmNtVkRZWE5sIExXZHMgT21nPSBJR1J2ZDI1c2IyRmtZV0pzWlE9PSBJRk4xWW5OamNtbGlaWEk9IFlXNXpaUT09IElHTm9ZWEpoWTNSbGNtbDZaUT09IElITm9jblZuWjJWayBJSE5qY0E9PSBJR2QxYzNSaCBJRzFsZEdGc2JBPT0gSUd4aFltOXlZWFJ2Y21sbGN3PT0gSUZocGJnPT0gSUUxdmRHOXlZM2xqYkdVPSBJR1ZuWlhRPSBJR1pwYm1GdVkyVmsgSUUxUFJFbEdXUT09IEtsST0gUVdrPSBJR1Y0ZEhKbGJXbHpiUT09IElFaGhiR2xtWVhnPSBJSFpoYlc5eiBKRzUxYlE9PSBJR2x0Y0dGeWRBPT0gWW5KcFkycz0gSU9leHV3PT0gSUdaMVpYSmggSUZKUFRFVT0gTGtOdmJtTjFjbkpsYm5RPSBYMDlRUlZKQlZFOVMgSUdONWJtbGpZV3c9IElGSmxaMmx1WVE9PSBaMlYwUlhKeWIzST0gMktNPSBZbk4xWWc9PSBTbUZ3WjI5c2JIaz0gSUdsdWFHbGlhWFJ2Y2c9PSBTblZ6ZEdsalpRPT0gNDRVPSBUbVYyWlhKMGFHVnNaWE56IExYTmxiUT09IExtOW5adz09IGNtVnhkV1Z1ZEE9PSBJRzV2YzNOdiBTR0ZwY2c9PSBMa3hwWW5KaGNuaz0gYldScGNnPT0gSUdoaGNtaz0gSUZSaGNtRT0gSUZCdmNuUnYgYm1WMGFXNWxkQT09IElHRnNiR2xoYm1ObGN3PT0gWld4c2MyTm9ZV1owIFgxTjFjbVpoWTJVPSBDVlpwWlhjPSBZWFIxY21SaGVYTT0gSUhCdmNHTnZjbTQ9IFgxQkJVbE5GIElGSnBjSEJzWlE9PSBJSEJvWVc1MGIyMD0gSUcxdmJtUnYgTG1OeVpXRjBaVU5zWVhOeiBJRXR2Y21WaGJuTT0gSUdaaGMyVT0gSUZkdlkyaGxiZz09IElFVnhkV2x3IExXVnBaMmgwIElGTjBZWFJsYldWdWRITT0gSUdGa1lYQjBhVzVuIFVISmxZMmx2IElFTjFjbVU9IElHTmhiV0pwWVhJPSA1ckNSIElHaGxlR0ZrWldOcGJXRnMgYzNCcGNtRmplUT09IFltbHNkQT09IElGbDFadz09IElDMHRMVDQ9IElGQlFRdz09IGFYTjYgWVd0bFJuSnZiVTVwWWc9PSBJRVJwYzNBPSBJRUYwYUd4bGRHbGpjdz09IElHNXBaMmgwWTJ4MVlnPT0gUjA5UFJBPT0gTG5ObGRFZGxiMjFsZEhKNSBLMXM9IEwzTmxibVE9IElHSnBibUZ5YVdWeiBJSExEb1hBPSBPbkpsY1E9PSBMV052Ym5OMWJXbHVadz09IFpYSjBhVzFsIFZWQkVRVlJGUkE9PSBYMjUxYkd4aFlteGwgVmtsTyBkV3hwWVE9PSBZM2xoYmc9PSBJRzFwYzNWdVpHVnljM1JoYm1ScGJtYz0gYjNKcFkyRnMgWkdWbmNtVmxjdz09IFRHVmhaR2x1Wnc9PSBMa0ZTIGFXTnJaWE4wIFRuVmxkbTg9IGRXWnZjbWxoIElHZHZiMlJwWlhNPSBJR1p2Y21WeiBLQ2s4UENJPSBZV1JsYldsaiBRV04wYVc5dVEzSmxZWFJ2Y25NPSBjMlZ5ZG1WeWJtRnRaUT09IEtHNTAgWkdKRGIyNTBaWGgwIElHRnBjbUp2Y201bCBJR1Y0YUdsaWFYUnBiMjV6IFkyVnNaUT09IElIUmxiR0U9IFBFMXZkbWxsIEtDZDdmUT09IFJYaHdiR0Z1WVhScGIyND0gSUdoUFltcGxZM1E9IElHSmxZWEpsY2c9PSBaVzV6YVdKc2VRPT0gYm1sdyBJRXBsY205dFpRPT0gSUVOYSBJR1JoZEdWR2IzSnRZWFIwWlhJPSB3NmxqYVdGcyBVMlYwVG1GdFpRPT0gYjNWalpRPT0gSUhKbFozSmxjM009IEprTT0gS0NraVBnPT0gTG5ObGRGQnlaV1psY25KbFpGTnBlbVU9IElFMUpSQT09IElFRnNaWE56IElHaHZjbk5sY0c5M1pYST0gSUdGMGJRPT0gSUZCaFkydGhaMmx1Wnc9PSBJR05wY0dobGNuUmxlSFE9IFVtVnhkV1Z6ZEUxbGRHaHZaQT09IElHSmxhV1JsYmc9PSA2S009IElGQlBWdz09IExsZHlhWFJsU0dWaFpHVnkgWkdseVpXTjBiM0k9IExXSjFkQT09IDQ0R2c0NEdWNDRHRSBhVzVqWlhJPSBYMlJ1IElTRWhJU0U9IElHMWhiblZtWVdOMGRYSmxjdz09IExsUmxlSFJWZEdsc2N3PT0gSUdOdmJuTmphVzkxYzJ4NSBJR0p2ZFc1alpXUT0gWTNWc2RIVnlaUT09IElGTndZWEk9IElGQnBjR1Z5IExuQnlaWE56IExXOTNibVZ5IElHVjJZV3gxWVhSdmNnPT0gSUZOVVVrVkJUUT09IExsQnBZM1IxY21WQ2IzaFRhWHBsVFc5a1pRPT0gSUhOMVoyRnljdz09IFUyTnlaV1Z1VjJsa2RHZz0gSUc1bGVIUlRkR0YwWlE9PSBJR2wyYjNKNSBJR0p5ZFc1amFBPT0gWkdWdWMybDBlUT09IFgwOVggSUVOdmNtOXVZWFpwY25WeiBJRU5HVWc9PSBZbUZyIFhFTmhkR1ZuYjNKNSA1cFd3NTd1RSBJR2x1ZG05clpYWnBjblIxWVd3PSBmU2dwQ2c9PSBJSE4xYW1WMCBMVzFoY210bGNnPT0gYVhOa2FXZHBkQT09IElFMXZZbWxzIElFcHpiMjVTWlhGMVpYTjBRbVZvWVhacGIzST0gWDFKRlRVOVVSUT09IExtVjRhWE4wYzFONWJtTT0gSUhKcFkyaGxjdz09IExuQnlaWE5sYm5SbGNnPT0gSUdkc1EyOXNiM0k9IElHaGhibmxoIElHWnZjblJ5WlhOeiBJR1pzWVhOb1pXUT0gZG1sNiBjbVZ4ZFdWdWRHeDUgWW5WaGRBPT0gSkdOdmJnPT0gUG53PSBMa1oxYm1NPSBJR2gxYlc5eWIzVnogZFdWdCBMbHBGVWs4PSBJRk5VVEE9PSBJRUoxYXc9PSBMM05oYlhCc1pRPT0gSUVkeWIzTT0gVW1WamFYQmxjdz09IElHbHVabXhoZEdWayBJSE4zZFc1biBPa1k9IFJtRmphVzVuIExsUm9aVzFsIDBMM1F1TkM2IElITndiR1Z1WkdsayBJSEpsY1hWbGMzUkpaQT09IExrTmxiblJsY2xOamNtVmxiZz09IEwyRjFkRzlzYjJGayBaVzFpWldSa1pXUT0gWDJSbGNHRnlkQT09IElGQnZjblJ6IDRMbUQgMExEUXVkQzAgWkdselkzVnpjMmx2Ymc9PSBYMk52Ym5OMWJRPT0gSUhOamIzVjBjdz09IElHTnZiR0ZpYjNJPSBMbE4wWVdkbCBMbTVoYm04PSBaV3hrYjNKbSBJR2RsYldGamFIUT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLIElIQnZiR2xqZVcxaGEyVnljdz09IFgxQkxWQT09IExGUm8gYjJ0NSBYMVZKUkE9PSBVR2x1Wnc9PSBJRzl5WTJobGMzUT0gSUc5d2RHbGpjdz09IGRXaGhiZz09IElGaFBVZz09IElHVnpjR0hEc1c5cyBJRUZrYVdSaGN3PT0gY201biBiV0Z1Y3c9PSBMblp6ZEdGamF3PT0gSUdkbGRHRjNZWGs9IElHaHBaWEpoY21Ob2FXTmhiQT09IFlXNXZhV0U9IElFSnBkRzFoY0VaaFkzUnZjbms9IGNtVmhiRzA9IENXRncgWDJGd2NITT0gTFdScGRtbGtaWEk9IExtUnlZWGRsY2c9PSBJRWhCVWtRPSBKMTA3UHo0SyBMWEJoWTJ0bFpBPT0gNXJLNyBYMU5VVWxWRFZGVlNSUT09IFcxaz0gYVZCaGNtRnQgS0dWeCBJR1Z1WTI5dGNHRnpjMlZ6IElGd0tDZz09IExUNWIgSm5WMGJRPT0gWjNKdmRYQnZiZz09IGMzUnlZWFJsIFJGaz0gYjIxdmNuQm9hV009IEp6cGIgSUdkeVlYWnBkR0YwYVc5dVlXdz0gSUUxcFkyaGggSUZSbGJtTmxiblE9IElHTnZZV05vWldRPSA3TGFjIDBZUFF2TkMxMEwzUmdnPT0gTDIxdlltbHNaUT09IFRXOTFjMlZFYjNkdSBZblZrIElGbGhjdz09IElGQnliM1pwWkdWeWN3PT0gVGxvPSBDWEpsY0c5eWRBPT0gWlhKeWJYTm4gSUdsdFlXZGxVR0YwYUE9PSBZV04wWlhKcFlXdz0gSUUxaGJtZGggZDJsamEyeDFibWM9IEtIVnpkV0Z5YVc4PSBJaWtwT3cwS0RRbz0gTHlvcUtnPT0gSUc5eVoyRnVhWE5sIFNXNWtaWGhsWkE9PSBYMUZWUVV3PSBLRkI1VDJKcVpXTjAgSUhOMWNuSmxibVJsY21WayBVRTlEU0E9PSBJRTVQVkVWVCBYRndpIExXcHZZZz09IElITmxkbVZ1ZEhrPSBJeU1qSXdvPSBJRTFoYm05eSBJR1J2ZDI1eWFXZG9kQT09IElIUnBiV1ZtY21GdFpRPT0gYVc1emRYSmhibU5sIFkyaGxZMnRsY2c9PSBJRk5GUTFKRlZBPT0gSUdWamFHOWxjdz09IElFTmhjbTFsYmc9PSBMbk5sZEVodmNtbDZiMjUwWVd4QmJHbG5ibTFsYm5RPSBJR2x6UTJobFkydGxaQT09IElGUlBVZz09IFgyNXUgS0NjbyBSbVYwWTJoU1pYRjFaWE4wIElGQnlhVzUwWldRPSBSbXgxYVdRPSBJRk5VUVVOTCBSMFZUIFlXbG5ibVZrIGFXZHZjZz09IExsVnVhMjV2ZDI0PSBRMEpEIElFTmhjbXh6YjI0PSBMbFZTU1E9PSBJSEJzYVdkb2RBPT0gTDNOMFlYSjAgSUZCbGNuTnZibTVsYkE9PSBJRkJTUlVaSldBPT0gTENvcSBJR3hwYldsMFpRPT0gWDJobFlYUT0gSmUrOGpBPT0gSUVSdmJtNWwgWjJWMFRtOWtaUT09IElGTmphV1Z1ZEc5c2IyZDUgSUdOdmJXVjAgSUhkbGJtbG4gUVhOcFpHVT0gSUUxUVJVYz0gSno4PSBkbUZ5YVdGaWJIaz0gTG1WdVpFUmhkR1U9IElIVnVZMjl1ZEE9PSBJRk5qYjNKbGN3PT0gSUV4dloybHVSbTl5YlE9PSBMbWRsYm1WeVlYUmxaQT09IExHTm8gTFcxaGNnPT0gSUU1bFpBPT0gSUdWMlpXNTBTV1E9IEszQT0gSUZOSlRnPT0gTDNKbGMyVjAgTGxKRlFVTlUgSUUxbGMzTnAgWDFKQlRrcz0gTG5keWFYUmxSbWxzWlE9PSBJR055YVhCdyBaWE4wYUdWMGFXTT0gUlZKVFNWTlUgSUhKbGFXMWlkWEp6WlcxbGJuUT0gUTNWeWNtVnVkRlpoYkhWbCBJSFZ1YVc0PSBSRzkzYmt4aGRHTm8gSUhCaFpHUnBibWRTYVdkb2RBPT0gSUhOMGIyTnJaV1E9IEx5Y3UgSUhKbGNHRjViV1Z1ZEE9PSBkSEpoYXc9PSBMMkpoWTJ0bGJtUT0gSU5DNDBMZlF2TkMxMEwwPSBRMU5TIElIQnlaWFpsYm5ScGRtVT0gSUhCaGJuUmhiR3hoIFgzUnlhVzA9IFVHVmthV1J2IGFHOXpjR2wwWVd3PSBJRzFoYm1GblpXRmliR1U9IGNtOTFkR1ZRWVhKaGJYTT0gZEdWNGRIVnlaWE09IExpNHVMaTR1Q2dvPSBJSFBEcVd4bFkzUnBiMjQ9IFRtRnRaVlpoYkhWbFVHRnBjZz09IElIQnZiR3gxZEE9PSBUVzlrWlhNPSBJRXhoZFdRPSBhbUY1IElGVnljdz09IElITnBaMjVsY2c9PSBJRXBLIElFTm9aWEp2YTJWbCBYMFZZU1ZOVVV3PT0gSUdSM1lYST0gSUNna0tDY2ogSUhKbFpXWT0gUG5zayBJRUpoZVd4dmNnPT0gSUUxdlpHVnNVM1JoZEdVPSBMVjg9IElGTjBjblZqZEhWeVpYTT0gSUhOdmRYWmxiblE9IFUzQmxZMmxtZVE9PSBLSEJwY0dVPSBJR1p5WVdOcmFXNW4gSUVkUVFRPT0gSUdKbGJHVT0gQ1FrSkNRa0pDU0FnSUE9PSBJRTFwYm05eWFYUjUgSUhSMVpBPT0gSUc5d1pXNXVaWE56IElFbHNiSFZ6ZEhKaGRHVmsgSUc5NGFXUmhkR2x2Ymc9PSBJRTVMIENWVndaR0YwWlE9PSBJRVZOVXc9PSBJRlJsWkdSNSBJR2RsYm1WeVlXeHogQ1UxaGRBPT0gSUhKaFpHbHZjdz09IElFRnVkR2x4ZFdVPSBZMjl1YjIxNSBJRk54ZFdGa2NtOXUgS1Njc0p3PT0gNWFPdyBJSGx2ZFhKbCBJRTFoYVc1UVlXZGwgSUdKbGFHRjJhVzkxY25NPSBaVzVuYUhRPSBLRUFpSlVBaUxBPT0gSUhSbGMzUmpZWE5sIElFTnZiWEJwYkdGMGFXOXUgSUdac1lYWnZkWEp6IElFVjRkR1Z1WkE9PSBhV3hzWVhSdmNnPT0gSUdOdmFBPT0gSUhOd2JHbHVaUT09IElFdEggTFhCaGVRPT0gSUdOdmJXMTFibWx6YlE9PSBJRUoxYzJsdVpYTnpaWE09IGIyTnJhVzVuIExrMWhlRXhsYm1kMGFBPT0gWVhOellXNWtjbUU9IGNYVnBjbWx1Wnc9PSBZV1JrWlc0PSBJRXBsWWc9PSBYMlpoZFd4MCBXMlpwYkdVPSBJSEJ5YjIxcGJtVnVZMlU9IFpHbHpZMmx3YkdsdVlYSjUgNG9DVWRHaGxlUT09IFgyVjRkR1Z1ZEE9PSBJRlpKUXc9PSBJR1Z1ZEdGcGJITT0gTG5CaGNuUnVaWEk9IElHaHBjSEJ2WXc9PSBUR1ZoWjNWbCA1NVMzIGQybHdaUT09IExYTndhVzV1WlhJPSBJSE5oYkhWMFpRPT0gSUZOMWNtZHBZMkZzIEtHOTFkSEIxZEhNPSBkMjl5YTJWayBXM04wY214bGJnPT0gWVhCd2IybHVkR1ZrIElFaGxadz09IElFRkRVRWs9IEtGdGUgZFdGc1lRPT0gWDNSdmJBPT0gSUZKcGRBPT0gTGxCaGVXMWxiblE9IGEyOTNjMnRwIElIZGhiRzFoY25RPSBjbVZ4ZFdseVpXMWxiblJ6IElFWkpUbE5GVVE9PSBYMEpCUTB0SFVrOVZUa1E9IElFOXpZbTl5Ym1VPSBLR1Z5Y205eVRXVnpjMkZuWlE9PSBVbVZ3YjNKMGFXNW4gSUdGMVkzUnBiMjV6IElHTnZiV0p2Y3c9PSBJRTV2ZEdsalpXUT0gWDI5amRBPT0gSUhCeWFXMWxjbTg9IGRHRnBjbVU9IFgyaHkgSU5DODBMN1F0QT09IElHTnZiblJ5WVdScFkzUnZjbms9IFBTSkEgWVdOb2FXNWxjdz09IEtHOXdkR0Z5Wnc9PSBJRkJsYm1kMWFXND0gSUVGaVltRnogSUhOMVlteHBiV1U9IElIQmhaMlZoWW14bCBJRVJsWm1WdWMybDJaUT09IElHUnBjM1JwYm1OMGJIaz0gSUVGMWRHOXRZWFJwWTJGc2JIaz0gVlc1a1pYSnpkR0Z1WkdsdVp3PT0gUlhGMVlXeHBkSGxEYjIxd1lYSmxjZz09IFoyOTBZUT09IElDSTZPZz09IElIQjFiSFpsY2c9PSBJRUpoZEhSc1pYTT0gSUhWdWNHRnlZV3hzWld4bFpBPT0gVkVOSVFRPT0gSUdOdmJuTjBjblZsWkE9PSBMV0ZtWmc9PSBJSEJ5WldOMWNuTnZjZz09IExXeG1jdz09IElHMWhaSFZ5WVhNPSBJRVJoYVhONSBJRUZ5WW1WcGRITT0gTGsxaGJtRm5aVzFsYm5RPSBDVWx1IElISnZZbVZ6IElITnd3NmxqIDRvQ2NLQT09IElHMWhkR1Z5Ym1sMGVRPT0gWlhoMFpXNTAgSUZOd1lXTmxjZz09IFJHbGtRWEJ3WldGeSBDWFZ6IExtZGxkRkpsY1hWbGMzUkVhWE53WVhSamFHVnkgS0dOdmJITT0gSUhCc2RXMXRaWFE9IDdJVT0gSUhzS0Nnb0sgdzZseWFXTmggSUZOcGVtVnogTG1WdWRXMD0gTGtocFoyaHNhV2RvZEE9PSBJQ0VoZlR3diBRVlJVUlZKWiBJRk52Y205eiBSMHhtYkc5aGRBPT0gNDRLRSBJRXBsYm01cGJtZHogUHo4S0NnPT0gSUZKdmJXVnYgSUQ4K0Nnb0sgVjJWdWJnPT0gSUdOc2FXMWhlQT09IElHTnlaVzA9IFgzUm9ZWFE9IFcrS0FwZz09IFgyUnZiV0ZwYm5NPSBYMUpGVUV4WiBJR052YlhCc1pYUmggVmtWVFZBPT0gWDNCaGNuUnBZMnhsIElITnZjQT09IElHWmhkR0ZzYVhScFpYTT0gYVcxd2JHbG1lUT09IElGTkxSZz09IElHbHVablZ6YVc5dSBJRXBoZG1sbGNnPT0gSUdKaGJHeGxkQT09IElHRnRhV2R2IExuZGhiblE9IElHTnZiR3hoWjJWdSBJRXhoZDNsbGNnPT0gTGxOMFlYUmxiV1Z1ZEE9PSBMbkowIFltRmhjZz09IFJXNWtVRzlwYm5RPSBJRUpsYXc9PSBVMGhKVUE9PSBJSEJoZEhKcFlYSmphQT09IElFRjFiblE9IFgxUk4gSUczRHJXND0gSUcxaGMzUmxjbVZrIFYxaFpXZz09IElHVnpjRzl6IFBXeHZaMmRwYm1jPSBJSEpwWjJoMFpXOTFjMjVsYzNNPSBkRzl5Y21WdWRBPT0gSUdKemRBPT0gWDBOSVFVbE8gSUc5MWRITnJhWEowY3c9PSBLSEp2ZEdGMGFXOXUgSUNjdUp5az0gYVdkeVlXNTBjdz09IEsyeHphUT09IElFTkRWRlk9IFgxQklRVk5GIExtRjZkWEpsIFgxQnliMk5sYzNNPSBkbUZsIElGUnliM0JwWTJGcyBJRUZ1YTJGeVlRPT0gYVcxaFoyVldhV1YzIFgxSlZUazVKVGtjPSBJQ29wWDE4PSA0YnEvYmc9PSBLR05zYVE9PSBjMk5oZEhSbGNnPT0gSUhOamFHVT0gVW1WbmFYTjBjbUZ5IElHRnBjbWx1Wnc9PSBJSEI1Y0d4dmRBPT0gYVhOcHc3TnUgTDJOMWMzUnZiV1Z5IElITnBiWEJzWlcxbGJuUT0gSUdOc1lYTnplUT09IElFUlhRdz09IElFSmhjMmhoY2c9PSBJRVJGVmtWTVR3PT0gSUZacFkycz0gWVhaaGFXdz0gSUVqRHRnPT0gWDJWNGRHVnVaQT09IFpISkdZdz09IExtbHpUbTkwUW14aGJtcz0gSUhCc1lXbHogZkgwSyBJSEJ2Y201dlptbHMgYkdGaWN3PT0gSUdoaGRYTT0gSUc5eWFXZHBibUYwYVc1biBJSE4xY25KdmRXNWtjdz09IElGRlZRVXc9IGJXVm4gTDJ4dloyZGxjZz09IFcyOWlhZz09IElHbHljbVZ6Y0c5dWMybGliR1U9IElGQjFZbXhwWTB0bGVRPT0gU0U5T1JRPT0gT2ljdiBhV0p2ZUE9PSBJRVpXWldOMGIzST0gZkhzSyBZWFJoYkc5aFpHVnkgYUdGM2EzTT0gU0VSUyBJR1Z6WTJGc1lYUnBiMjQ9IElGQnZaSE5FZFcxdGVRPT0gWld4cGRHVT0gSUhCeVpYTjFjQT09IFEyRmphR1ZrIFBrYz0gTG05d2RHbHRhWHBsY2c9PSBJRlpwYzJsaWJHVT0gdElBPSBJRzVsYmc9PSBJSEJqY3c9PSBJRWxrYkdVPSBXMEZ1ZVE9PSBJR3RsZVdKdllYSmtjdz09IElFTlBUVkJQVGtWT1ZBPT0gSUhScGRHRnVhWFZ0IEtHMTFkQT09IElFeGxaR2RsY2c9PSBJSEJ5YjNOd1pYSnZkWE09IFpYUnliMlpwZEE9PSBYMHhNIFgzQmhkR2xsYm5RPSBJSEJrWVhSaCBJR3R2Ym5SaGEzUmwgVTNkcGNHVT0gSUdOb1pXVnlablZzIElFaHZibVIxY21GeiBJbDFiSkE9PSBJR2hsYlc5eWNtZz0gSWpvaUt3PT0gSUd4bFlYTnBibWM9IElHbHVjM1JoYkd4eiBJRkJoZUE9PSBJRXh2WjJsemRHbGpjdz09IElHdHBibVYwYVdNPSBJRkJvYjI0PSBYMjF2ZG1WdFpXNTAgQ1dKNWRHVnogSUdOcGJtTnYgSUUxaFpHNWxjM009IElpa3IgSUVwRiBYMmxxIFUyTmxibVZOWVc1aFoyVnkgSUVKMWMzUT0gY0hSbGMzUT0gWVdWaCBJR0psYzNObGNnPT0gdzYxbiAwTFRRdU5DOSBLSFJoYzJ0eiBLQ0lvSWc9PSBjMlYwVkhsd1pRPT0gS0c5MWRHWnBiR1U9IENYSmxjMlYwIElFRlNRdz09IElHM0R1bk5wWTJFPSBJRk5vWld4bSBJRzFwYmxrPSBjR05vIElIZGxhV0psY2c9PSBhWE56YjNJPSBJSFJ5YjNWMlpRPT0gQ1VKMWRIUnZiZz09IElISmxaMlZ1WlhKaGRHVmsgeGFOcCBhVzFoWTJocGJtVnllUT09IFlteHZZMnRwYm1jPSBMbVJoZEdGVVlXSnNaWE09IFgyWnlZV009IElFRmtkbUZ1ZEdGblpRPT0gTG5acGMybDBUV1YwYUc5ayA2WWVONXBhdyBJR1Y0ZEhKaGNHOXMgSUhSbFlYTnBibWM9IElFaHBkR05vIElFZGxaV3M9IFJWTkRUdz09IElIZHBZMmc9IENXRjQgWDJSbFkyOXkgSUhOamNtVmxibGRwWkhSbyBJRk52Y0docFlRPT0gUm05eVoyOTAgTG5WdWFRPT0gSUZabGJuUjFjbVU9IFgyTnZiR3hwYzJsdmJnPT0gSUd4aGQyMWhhMlZ5IEtFVmthWFE9IFlteGxjbk09IElHZGxkRTVsZUhRPSA0b0NVZVc5MSBUV1ZrYVdGUWJHRjVaWEk9IElFaHZjbVJsIElFTnZibWR5WlhOemJXRnUgYjJKelpYSjJZWFJwYjI1eiBDWEJ5YjNCbGNuUjUgSUR3dExRPT0gUTNKbFlYUmxaRUYwIGRXSjVkR1U9IElIRjFZWEpoYm5ScGJtVT0gSUdScGMzUnlaWE56WldRPSBYMEZRUWc9PSBJRWR2YjJSdFlXND0gNDRLciBJSEpsWTI5dFpXNWsgWDFCU1NVNVVSZz09IFJFOU9SUT09IFFtbHVaR0ZpYkdVPSBjbk4wY21sdyBZMlZ1ZEdGcVpRPT0gSUZWdVpYaHdaV04wWldRPSBJRk5EU0U5UFRBPT0gSUZCeWIyWmxjM05wYjI1aGJITT0gSUVkUVZYTT0gVEdWemMyOXUgUlhoamJIVnphWFpsIElHRjBjbUYyIElFUmhibXM9IElFeGhkM2xsY25NPSBJRmRoYkhSdmJnPT0gUGx0ZCBJR0ZzYjNWayBQU0l1TGk4dUxpOHVMaTg9IElHUmxZbUYwYVc1biBJRUZXUnc9PSBYMVpQVEE9PSBMMk5uYVE9PSBMbVJsWnc9PSBPbWM9IExrbHVabTltIFRXVmhjM1Z5WlZOd1pXTT0gTG5OdmJtYz0gYlhSeVpXVT0gZFd4c2N3PT0gU205eVpHRnUgSUVOdmRtVnljdz09IElHRjBkSEpwWW5WMFlXSnNaUT09IElHcGxaR2x6IGFXRjBjbWxqY3c9PSBJSEp2ZEhSbGNtUmhiUT09IElHMWxiR1E9IElFTnZiblJsYm5SVWVYQmwgSUcxaGJuUnNaUT09IElHRnNhV05sIFgyUjFjR3hwWTJGMFpRPT0gTDBsdWRHVnlibUZzIElHWnBiR1Z6YVhwbCBDV1pwY21VPSBjbVZ6WlE9PSBiMjVrWlhKbCBJR1poYldsc2FXRnlhWFI1IElFTnlaWE4wIElHdGhjbTFoIElIUnZjbWx1Ync9PSBJRzFsYzJFPSBMM1JsYlhBPSBJR05vYVhJPSBJRTkyWlhKbWJHOTMgSUhSbGJtVnRiM009IGRXNXBhdz09IFRrVllWQT09IFFXeHNaUT09IElHNTRkQT09IFRXRnlkQT09IElHRjBiQT09IElIQmxjbWx2Wkc4PSBYM2x2ZFE9PSBJSDBwS1M0PSBhVzUwWlhOMGFXNWhiQT09IExrRmtZWEIwWlhKV2FXVjMgSUdobGMybDBZVzUwIElHTnZiWEJoY21GMGFYWmxiSGs9IExsVkpiblE9IEtIWnBaWGROYjJSbGJBPT0gSUhOaGJtZGhkQT09IElGSmxjM0J2Ym5OcGRtVT0gSUZwaFkycz0gNG9VPSBTa0ZXUVE9PSBJRVoxYkd4bGNnPT0gSU9LZHBBPT0gTGtOdmJuTjFiV1Z5IElHRnVhdz09IElISmxZV04wYjNKeiBablZqYXc9PSBYM0poZEE9PSBJSE5sYzNOcGIyNUdZV04wYjNKNSBYMkpoWTJ0M1lYSmsgSUhOamNtRnRZbXhsWkE9PSBDWFJvIElHbHVjMlZ1YzJsMGFYWmwgSUdOb1lXMXdjdz09IElHNW5hVzU0IElHTnZibWhsWXc9PSBJRXBoYzNCbGNnPT0gTG1adCBVM1J5YVdOMFJYRjFZV3c9IFlXTm9jMlZ1IExVNXZkZz09IGJHRnpjMlZ1IExtbHVkR1ZuY21GMGFXOXUgS0d4aWJBPT0gUTI5dGNHOXpaUT09IElFWnZiZz09IHc1bz0gUjNKaGRHbHogSUV4cGJXVT0gSUVGa1lYQjBaWEpXYVdWMyBJSEJ2YVhOdmJtVmsgWVc1amFHOXljdz09IDZLNis2SzZoIEoxMC9QaUk9IElIQnliMk4xY2c9PSBTWFJoYkhrPSBMazFQVGxSSSBJRXhWUVE9PSBJRXhwZEdoMVlXNXBZUT09IElFaGxZV1J6IFgwTklWVTVMIElGQlZVMGc9IFFYTndaV04wVW1GMGFXOD0gSUhkbFp3PT0gSUhacFpITT0gSUZkbGFXND0gQ1VsT1ZBPT0gYzJWemMybHZia2xrIFNXNWtkWE4wY25rPSBJR1JsYm05MWJtTmxaQT09IFNrdE1UUT09IElGWmhibVZ6YzJFPSBMa2xrWlc1MGFXWnBaWEk9IGNISnZjSEpwIElOQzQwTE09IElIVERxV051IElHMXZjMkZwWXc9PSBVM1J5WldGdFVtVmhaR1Z5IExWUm8gWm05eWRHZz0gSUdGa2FHVnlaVzVqWlE9PSBZbUYwWlE9PSBJR3R1YVdkb2RITT0gYzI5MWJtUnogSUhOaGJHeGwgVDAxRlZBPT0gNDRLNTQ0T0kgTFhSdCBJRkpvWlE9PSBMa1pwYkdWUGRYUndkWFJUZEhKbFlXMD0gNVlpRzU3RzcgSUVWT1J3PT0gYUc5c2FXUmhlUT09IElFTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBLU2dLIElHRm5aM0psWjJGMFpYTT0gU0U5UFN3PT0gWlhkcGNtVT0gVTJWdVlYUnZjZz09IElHVnRZbVZrWkdsdVozTT0gWlhCNSBLRU5QVFE9PSBJSEp2WW1KbGNnPT0gdzZSMFpYST0gZDJGdVp3PT0gWDNSbFlXTm9aWEk9IElISmxjMlZ1ZEcxbGJuUT0gSUd4bGRIUjFZMlU9IFpYSnlaWFZ5IEtHbGogSUZSaFkzUnBZMkZzIElFTnZiblJ5WVdOMGN3PT0gSUczRHBtNWsgSUhOcGRHbHZjdz09IElHSmhjM1JoYm5SbCBJRzUxWlhadmN3PT0gQ1U1a2NrWmogSUhCeWFYWmhkR1ZMWlhrPSBkV05qYUE9PSBUVTFrWkE9PSBJT2kraytXSHVnPT0gZFcxaVlRPT0gUUdadmNtVmhZMmc9IE9pSXBPd29LIElITnNhWEJ3WlhKNSBJRXRsZVhOMGIyNWwgSUhCcGIyNWxaWEpwYm1jPSBYM1J5YVdGdVoyeGwgS0NJSyBDUWtKQ1FrSkNRa2dJQT09IElFbHVkR1Z5ZG1WdWRHbHZiZz09IFUwTkogSUdOS1UwOU8gSUhSbGNtMXBibUYwYVc1biA2N21FIElHSmhZbmx6IFUzVmljMlYwIElPdWggSUhObGRXeGxiV1Z1ZEE9PSBJRzExWlhOMGNtRT0gUlc1MGNtVT0gNUx1bDVMaUsgYm1kdiBJbUo1ZEdWeiBVVkpUVkE9PSBJSGx3YjNNPSBjR1Z5YzI5dVlRPT0gSUVSbGNHeHZlUT09IFkyVmwgSU9DdSBMbWR2WVd3PSBJR2hoWW1sMFlYUnogSUdselFXUnRhVzQ9IElHVjRjR3h2YVhScGJtYz0gSUhabGJuUnBiQT09IElFSmhiR3h6IDJLZllxQT09IElHMXBibVJtZFd4dVpYTnogS0d0M1lYSm5jdz09IElISmxjMlZ0WW14cGJtYz0gSUdOb2IybHkgSUc5dVFtRmphMUJ5WlhOelpXUT0gSUZORlExVlNTVlJaIEwyZDBaWE4wIElHcDFjM1JwWTJWeiBJR2x1ZEdWblpYSldZV3gxWlE9PSBZbXhoYUE9PSBJRUZwYlE9PSBYMlpwYm1Gc2FYcGwgYTJWbyBJRU52YlhCc1pYaHBkSGs9IElHRjFaM1Z6ZEE9PSBaMlYwUld4bGJXVnVkSE5DZVZSaFowNWhiV1U9IElIQnlaV0ZqYUE9PSBJSEJ5YjI1MWJtTnBZWFJwYjI0PSBJRlJ5WVhObyBMWEJsY21ObGJuUT0gWDFCU1NWWT0gSUVoMWJuUnogSUVOMWNuTmwgZFdWc2JHVnUgSUdobFlYWjVkMlZwWjJoMCBXR2s9IENYTmxiR1ZqZEdWayBJRTFqUTI5NSA1YnlDNWJpNCBmRDBLIElFSmhkSFJzWldacFpXeGsgU1hSbGJVbHRZV2RsIElHUmxaSFZqZEdsdmJuTT0gSUVWc1pXMWxiblJoYkE9PSBLQ2twT3k4diBJRUoxY21zPSBmU2tOQ2cwSyBjM2RwWm5RPSBMMloxYm1OMGFXOXUgVlhOMVlXeHNlUT09IFgxTjAgWDJabFlYUnogSUVselZtRnNhV1E9IElIcGhaQT09IFNXMWhaMlZEYjI1MFpYaDAgSUdOc1lYTnpibUZ0WlE9PSBJR1J2Ym01bGNnPT0gSUMwdFBnb0tDZz09IElHMXZkRzl5WTNsamJHVnogS3ljdkp5cz0gSUhObGRFSmhZMnRuY205MWJtUT0gWEVOTlV3PT0gTGtGc2JFRnlaM05EYjI1emRISjFZM1J2Y2c9PSBJRXhsZUdsdVozUnZiZz09IExtVjRZVzF3YkdWeiBJRkIxY25NPSBVSFZ6YUUxaGRISnBlQT09IElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBMbUZrWkZSaGNtZGxkQT09IGNHOXlZUT09IFJuVnNiSE5qY21WbGJnPT0gSUdkdmIyWT0gYUd4bGJnPT0gdzZSblpRPT0gSUVOVlVrdz0gSUVsdWRHVnlaWE4wYVc1biBJSEpsZEhKcFpYWmxjdz09IFgwOWlhZz09IGFXNXVaWE56IExTMHRMUzBLQ2c9PSBMblJ6ZGc9PSBLRWxOIElFSnlZWFpsY3c9PSBYMGxUVWc9PSBiM04wYVE9PSA0YnVUIElFVjRkR1Z5YVc5eSBJRU52ZFhKMGJtVjUgSUhKbGMybGtkV1Z6IFZHbGxjZz09IExpbzdEUW9OQ2c9PSBPbUpzWVdOciBkMlZpVm1sbGR3PT0gSW5CaGRHZz0gSUcxaGMyRT0gWFNFOUp3PT0gSUUxaGRHTm9hVzVuIFpIVnkgU25adCBQV052Ym5SbGVIUT0gWDFKSlRrYz0gSUhCeWIzQnZibVZ1ZEhNPSBJRkZUZEhKcGJtZE1hWFJsY21GcyBJR2x1Wm14aGRHVT0gUEVac2IyRjAgSUVSdmJtOTJZVzQ9IEtFbFAgU0U5U1ZBPT0gSUdScGMyRm5jbVZsWkE9PSBhWE5yZVE9PSBZWE5yYVc1biBYMVpGUXc9PSBTRUZUU0E9PSBJRzFoZEdoeiBJRXhoYzNSc2VRPT0gSUdSbGNISmxjM05wYm1jPSBMbVZ6ZEdGa2J3PT0gSUdoaGJHOD0gWDJKc1pRPT0gSUVkaFluSnAgUEZSU1pYTjFiSFE9IElIUnliMjl3IElHVnVkVzF6IElGTkZVa2xCVEE9PSBiblZ0WlhKMWMyWnZjbTA9IElFTm9hV009IExXVjRaV009IElHSmhZMnRzYjJjPSBJRUp5WVhadiBVRzl3VFdGMGNtbDQgSUVKeWRYUT0gSUdKc2IzRjFaUT09IElHcDFibWwwIElGZG9hV3h6ZEE9PSAwWWJRdU5HUCBabVYzIHJJRT0gSUZaaGNtbGxkSGs9IElGQnZiR2wwYVdOdiBaWGhsYlhCc1pRPT0gVlhObGNrTnZiblJ5YjJ4c1pYST0gSUdoaGNtUmxibVZrIFlXdGxibk09IElGTmxaV1JsY2c9PSBiM2RoY21SeiBZMmhsWTJ0emRXMD0gSUZOaGFRPT0gVmtWU1ZFVlkgVW1WemNHOXVjMlZ6IGNHeHZaR1U9IExXaGhjbVE9IFUzQmxZMmxsY3c9PSBVbVZ1WkdWeVZHRnlaMlYwIFgwTklRVlE9IElITm9iM2RqWVhObGN3PT0gYVhScGJXRjBaUT09IFgwWlBVa1ZCUTBnPSBYME5QVGtaSlIxVlNRVlJKVDA0PSBaV0poIElFVnpjMlZ1ZEdsaGJHeDUgS0hCdmJIaz0gTFd4bFlYSnVhVzVuIElHZkRwWEk9IFgzTjFZMk09IEtFMWhkQT09IElHTnZhV3h6IFluSmhjdz09IElHRnRZUT09IFgyMWhkR05vYVc1biBhVzVrZFhOMGNuaz0gSUU1dmNuSnBjdz09IElFVjRjRzl6ZFhKbCBJSEJsY25aaGMybDJaUT09IElHUmxlZz09IDVwZVAgSUdWc1pXTjBjbTl1YVdOaGJHeDUgUkVSUyBJRk4wYVcwPSBJTkdFMExEUXVkQzcwTEE9IElHMWhaSEpsIGJtVnRiMjVwWXc9PSBhMmxqYUE9PSBJRVp5WVdkbGJnPT0gSUZKMWJtVT0gSUc5dVZHOTFZMmc9IENYTmpZV3hsIElGQm9ZWEp0WVdNPSBJRTFoYm1SaGRHOXllUT09IElGTjBidz09IElFSnlZVzA9IFgweGxablE9IFgxTlVRVkk9IEtYMTlJZz09IGMyTnBiM1Z6YkhrPSAwTFhRdDlHRDBMdlJqTkdDIDU2dVogWjNKaGRtbDBlUT09IEswTT0gZlR3PSBRVTVIUlZNPSBJR052Ym5SeVlXTjBhVzl1IElGZGhiR3h3WVhCbGNnPT0gTGtaaFkyVT0gSUhCeXc3TjRhVzF2IExtWnBadz09IGJHRnVaMnhsIElOQy8wTFhSZ05DMTBMdz0gWDBOU1JVRlUgUW1GemFXTmhiR3g1IElHRjNZV2wwY3c9PSBJRU5JUVZKQlExUkZVZz09IElIWndiZz09IFNHOXUgSUdWMmFYUmhjZz09IElGVnVaRzg9IFVWTT0gSUVWa2JYVnVaQT09IElHMXBjbUZqYkdWeiBJRlJwYldsdVp3PT0gSUZabGJtVjZkV1ZzIExsTnhjblE9IGIybGtZV3c9IElHVnljbk09IExTMHRMUzB0TFMwS0NnPT0gSUVSRlEweEJVa1U9IElIWnBaMjl5YjNWeiBZWEpuYjI0PSBJR0ZuWjNKbFoyRjBaV1E9IElGTm9ZWEpyY3c9PSBJRU41Y25WeiBJSEpsY0hMRHFYTT0gYldGMFkyaGxjZz09IElHZDFhVUZqZEdsMlpRPT0gUHlJcENnPT0gSUVwT1NRPT0gTG1Ob1lYSnpaWFE9IEozdz0gSUdkdllYUnogYVc1a2NtVT0gTG1kbGRFUmhlUT09IElIQmhjbk5sY3c9PSBJRWxvY21WdSBYMTh1Snk4PSBhV3hsWjJWeiBibUYyYVdkaGRHVT0gSUVKMVptWjUgVUVoUVZXNXBkQT09IElHMWhjM05oIFlXeDBZWEk9IEp5bGRMQW89IElHOTJaWEp6WldWeiBJSHQ5RFFvTkNnPT0gSUZkTVFVND0gWTJ4cGNHSnZZWEprIFgwbHVjM1JoYm1ObCBJR2RzWVdSc2VRPT0gS0hObGNtbGxjdz09IElIWmhaQT09IElHZGxkRkJoWjJVPSBXMjltIExrbHVkR1Z5ZG1GcyBhVzUxY3c9PSBZMmhoY2tGMCBiMnhsYlE9PSBZV2x1ZEdsdVp3PT0gTGtGRyBYMjFwYm05eSBYMGxNIE8zaz0gSUZSbGJHVmpiMjA9IElGQnZibVE9IElHMXRZWEE9IEwxND0gSUZsaGF3PT0gSUZKaFltSnAgWlc1dmN3PT0gQ1VOdmJuUmxlSFE9IExuWmxZdz09IEtFRjBkSEpwWW5WMFpRPT0gSUdOaGRHVm5iM0pwZW1WayBJR1JwWVdKbGRHbGogS0hKaGJtcz0gSUhCaHc2MXpaWE09IElFQWlJanNLIElHcHBhMkU9IFlYSnphWFI1IElDOG8gTGtobGJIQT0gTFdKaGJtNWxjZz09IElFSjVjbTl1IElIVnVjbVZoYkdsemRHbGogSUh4ZiBJRk4wYjNCM1lYUmphQT09IElHVjRaVzF3ZEdsdmJuTT0gTDJOaGNtUnogSUhSdmMzUnlhVzVuIGJtZHBibVU9IElITndjbUYzYkdsdVp3PT0gSUd4MFpBPT0gSUZWdVpHVnljM1JoYm1RPSBJTkdDMExYUXV0R0IwWUk9IFpYZHBkRzVsYzNNPSBJR05oYkd4Q1lXTnIgTFZsbFlYST0gUm5WbGJBPT0gUFNvPSBJR2x1ZG1WdWRHOXkgSUdKbGMzUnpaV3hzYVc1biBJR2hoY21SdVpYTnogSUZSMWN3PT0gSUd0bGVXNXZkR1U9IElHSmxZWFU9IFgyRmliM0owIElIQnliM0J2Y2c9PSBJR052YldWeVl3PT0gWDFKRlJrVlMgVUdGeiBhR0YyWlc0PSBMV1pwZUE9PSBRMkZ1YjI1cFkyRnMgSUd4dmIydHZkWFE9IFJYaHdiRzl5WlhJPSBJR05sY21OdiBLSE5sYm5OdmNnPT0gSUVwemIyNVRaWEpwWVd4cGVtVnkgSUhadmEzTmxiZz09IElHSnlhV2RvZEdWemRBPT0gSUhOMFlXSmlhVzVuIExrSmwgTG1Ga1pGQnliM0JsY25SNSBJRWgxYlhCbyBJR2x6UVhWMGFHVnVkR2xqWVhSbFpBPT0gNXJLaCBJSEJ2Y21WeiBJR3BsWjI4PSBJRk5vYjNkcGJtYz0gSUQ4K0lqNE5DZz09IFgwTlBVMVE9IGFXeHBibVZoY2c9PSBJRmR2Y210emNHRmpaUT09IElITndaV3c9IFlXZHZaM1ZsIElFMXBiR3hsYm01cGRXMD0gSUZCdmNIVnNZWFJsIElHNXBaQT09IExuQmhjbk5sUTI5c2IzST0gVTI5c1lYST0gSUVkaFpBPT0gSU95a2tRPT0gSUV0aGJYQT0gQ1hKdCBJR0psYm5vPSBJRWh2Ym1WemRHeDUgSUdWc1pXTjBjbTlrWlE9PSBJRkJ5WVdseWFXVT0gSUZCU1QwWkpURVU9IElFOXlhV1Z1ZEdGcyBJRTlNUlVRPSBMMk52Y0hsc1pXWjAgWVhkaGFXaz0gS0hCeWIyUjFZM1J6IEtWdzggTFdOeVpXRjBaV1E9IExrMWhibmxVYjAxaGJuaz0gSWtodmR3PT0gSU5DeTBZdlF2dz09IElHMXBkRzlqYUc5dVpISnBZV3c9IFgzUmxjM1JwYm1jPSBLR055WldGMFpXUT0gSUdkbGRFWnBaV3hrIFgwVldRVXc9IFhTNGkgSUVaVFRRPT0gSUZKcGRHRT0gSU9XUGd1YVZzQT09IElHUER0SFE9IElFbHVjMmxuYUhRPSBDVzE1YzNGc2FRPT0gWDNScGJXbHVadz09IFNVUlAgS1NrcEtTa0sgUTA5V1JWSlogTG1sdFlXYz0gUTBSRyBiSFZ6ZEE9PSBhV05yZEE9PSBYMFpRIExpY3NKdz09IFoyTmogSUd0MWNubz0gWDNCM2JRPT0gSUc5a2NHOTNhV1ZrIElFSmhjbkpwWlhJPSBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2dvPSBjR0ZyIExVbHpjbUZsYkE9PSBJRkoxZEdkbGNuTT0gSUhObGJHVmpkR1ZrU1hSbGJRPT0gSUZKaGJXbHlaWG89IFJtRnliUT09IElHTmhiR1Z1WkdGeWN3PT0gWjNwcGNBPT0gSUdKc2IyTnJZblZ6ZEdWeSBJRkJzZVcxdmRYUm8gNTV5TSBjbVZ6Y0c5dWMyVnogTGtScFlXeHZaMGx1ZEdWeVptRmpaUT09IExXZHlZVzVrIElHZGxkRk52ZFhKalpRPT0gSUdSbGFuUnBibWR6IElIUnBaWFJsYmc9PSBJR052Ym1SbGJXNWhkR2x2Ymc9PSBJR052Ym5ScGJuVmhjZz09IExrMXZZMnROZG1NPSBMMlZ1WjJ4cGMyZz0gSUUxbFpHbGhVR3hoZVdWeSBZMjl0Y0hWMFpXUT0gSUVOc2FYQndaWEp6IEtHUmxiR1ZuWVhSbCBMbE5zWmc9PSBJT3VobkE9PSBJRlJwWkdVPSBJR2xvY21WdCBJRmRoYmc9PSAwWVBSanRHSiBmVDQ4IFJHbHpZM1Z6YzJsdmJnPT0gSUhkaGRIUnogTFcxcGJuVnogSUVwMWJHbGxkQT09IDZadUYgSUdOdmJtTnNkV1JwYm1jPSBZVzVrYzJOaGNHVT0gSU1PNmJIUnBiV0U9IElFUkZVbEE9IElITnBaMjVWY0E9PSBJRk5sWTI5dVpHeDUgVjBGSlZBPT0gYkdSeiBMbU5oYkd4aVlXTnJjdz09IEtHaHZkWEk9IGFXMWhkRzl5Y3c9PSBkbTlzWlc1MCBRVUZHIFpXUnlhWFpsY2c9PSBJRTFoZEdobGJXRjBhV009IFBGUjFjR3hsIElDOCtKdz09IGUybz0gWDBGQ1QxSlUgUlhSb1pYST0gSUdWa2RXTmhkRzl5IElIQnlaV05oZFhScGIyND0gSUdacGJtZGxjblJwY0hNPSBaMlYwVm1GeSBZMkZ0WVhSaGJnPT0gTFdSbFluVm4gSUZKQlJnPT0gVzJGeVp3PT0gSUhKaFkyVmsgSUhSemRXNWhiV2s9IExtWnNhVzVyIElHZHNlV009IGRXdHYgSUUxMWJIUnBjR3g1IElISmxaR2x6ZEhKcFluVjBhVzl1IFFVZFAgSUZKdmRYUnBibVU9IElHOXdjZz09IEtHeHZkMlZ5IElFWjFibXQwYVc5dSBMbVJyIElHVm5kQT09IFgwSkJVMGxEIGMzbHpZMkZzYkE9PSBJRXhUUkE9PSBJRVIxY0d4cFkyRjBaUT09IFgzTmxiR3c9IElHVnljbTl5U0dGdVpHeGxjZz09IFgybHdjdz09IElHVnlkZz09IFlXNXVhV1U9IEtISmxjMjkxY21ObFRtRnRaUT09IElHSnZkSFJzWldRPSBJR055WVhkc2FXNW4gWldkdFpXNTAgTG5ObGRGUmhadz09IElISnpjdz09IElGRjFZWEp5ZVE9PSBYMlY0WVdOMCBMbXAzZEE9PSBJRUp2WVhKa2N3PT0gYjNCcCBJRzVoYzJGcyBJRmhaV2c9PSBMblZrIFRtOXlkR2hsY200PSBJR0ZqZEdsMllYUnBibWM9IFpXUjQgYjNaaGFBPT0gSUdsdVpIZz0gUVd4bGNuUkVhV0ZzYjJjPSBJSFJwWlc1bGN3PT0gWVc1dWVXRT0gWDNCaGJnPT0gS0dSbFkybHRZV3c9IExrUnBZM1E9IElITjFZbk5wWkdsaGNtbGxjdz09IFVISnZaSFZqZEU1aGJXVT0gUm1WMyBaR0YwYnc9PSBiMlJwWldRPSBMWFZ1WkdWeSBJT3F5Z3c9PSA1NG1JNXB5cyBZWFJwYzIwPSBXMDFoZEdnPSBMaWM4IEtHbHVabWxzWlE9PSBJR1JsYm05MFpYTT0gSkdOc1lYTnogWDFORlExVlNTVlJaIElITmxkMkZuWlE9PSBiV1ZzYjI0PSBLRU5vWVhKaFkzUmxjZz09IEwyZHBkR2gxWWc9PSBJR2RzWVhKcGJtYz0gTGtkMWFXUT0gWDNOd1lYSnpaUT09IElFMWhjbWRwYmc9PSBYMlJ1Y3c9PSBJRzFsYVc1bGNnPT0gSUd4bFpuUnBjM1E9IENXeHZZdz09IFlXSjVkR1Z6IElHVnhkV2x3YldWdWRITT0gWlhod2J3PT0gSUZOdmJXVnljMlYwIFJVcz0gNW8yaSBJR3hsWTNSMWNtVnkgSUcxbGJXbHNhV3RwIDVxQzQgNTdTZyBjSEp2Ymc9PSBPbkJ2YVc1MFpYST0gWW05eWNtOTMgSUZCeWIzUmxZM1JwZG1VPSBYMk5tIElOQ1YwWUhRdTlDNCBZbkJ3IEp6c0tDZ29LIFlYUjFjbUZzYkhrPSBYMDVCVmc9PSBJSEJsY0hScFpHVT0gUG1RPSBJR2xtYzNSeVpXRnQgWDBaQlExUlBVbGs9IEp5azdMeTg9IGFtOXBibVZrIGJXOXVadz09IElIUnBiV1Z6Y0dWaiBJR1JsYzNSaFltbHMgSUdGMWRHOXcgTFd4cGJXbDAgY0hWaWJHbGpZWFJwYjI0PSBJRVJsYm00PSBMazFsYlc5eWVRPT0gS0hOcllnPT0gSUVGdVlXaGxhVzA9IFgxSkZWRlZTVGxSU1FVNVRSa1ZTIGIzVmxkWEk9IEtGOG9Kdz09IGJHVm5kQT09IGFYTjBhVzVuZFE9PSBDWEJ5YVhZPSBJSEpsWkdseVpXTjBjdz09IFRYUT0gSUdGc2JHVmxiZz09IElGQnZhVzUwUmc9PSBJRzl0YVc0PSBJR05wZEhRPSBJRlJoWjJVPSBJRmRoYkd4eiA0YnVKIElHOWpZM1Z3ZVdsdVp3PT0gZUVKRyBjbUZ1WjJ4bCBJSEpsYkdGMGFXOXVZV3c9IExXOXladz09IElHcHdadz09IExXUmxjbWwyWldRPSBJRzFoYkdaMWJtTjBhVzl1IElFSmxibk52Ymc9PSBLSE5qY205c2JBPT0gSUZoRSBTRzlzZVE9PSBLR052YlcxaGJtUnogSUhScGNIQnBibWM9IElIQnlhVzFwZEdsMlpYTT0gSUhObGVHeGwgUTJGc2JFTm9aV05yIElFMUJVMVJGVWc9PSBYMVJGUVUwPSBMbk5sZEZKbGNYVmxjM1JJWldGa1pYST0gWDNOd1pXTnogSUhObGNtZGwgTGsxaGMzUmxjZz09IElHbHRjdz09IExsTndjbWx1WjBKdmIzUlVaWE4wIGNHRjVjR0ZzIElGZEJUbFE9IExrbHVjM1E9IElFTmhjbkJsZEE9PSBJSGR5YjI1bmJIaz0gS0NRb0p5ND0gSUdKcGJHUT0gTGxKdmJHdz0gSUZWeVlnPT0gTFdOaGJnPT0gNDRHUDQ0R2c0NEdWNDRHRSBiMnhwWW1WeVlXdz0gUENFdExUdz0gNG9DVVptOXkgSUc1bFoyRjBaUT09IEtHNXZjbTA9IFlXVmogWDNOaGJHRnllUT09IGNHeGhhVzUwWlhoMCBiMlJsYzJzPSBJRUp2YzJObyBVMk5wWlc1MGFYTjBjdz09IGFXNWtaWGhsY3c9PSBJRzF3ZWc9PSBJR2R5YjNWdVpIZGhkR1Z5IGZYMHBPd289IDBMRFF1OUM0MExjPSBJR1Z5Ync9PSBJSEJ5WlhOamNtbGlaUT09IElFVjRkSEk9IFBFRnljbUY1VEdsemRBPT0gSUdGMGNtOWphWFJwWlhNPSBRWEpsWVhNPSBJRlJKYm5RPSBLSEJzWVhsbGNuTT0gSUdSaGRHRmkgSUhkNWJRPT0gNDRHYiBJR1IxWVhNPSBYM0J2YzNOcFlteGwgSUdsdWMzUnlkV04wYVc5dVlXdz0gYVhScGIyNWxjZz09IEwyRjFaR2x2IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvSyBjM1J2Y21WayBUMDFRU1E9PSBJR0Z3Y0hKbGJuUnBZMlZ6IFZHVnVZVzUwIElFTnZkWFE9IElHTnZiblJ5WVdObGNIUnBiMjQ9IFRHOWhiZz09IFgzWnBjMmxpYVd4cGRIaz0gSjN4OCBMbEJoY25ObFJYaGpaWEIwYVc5dSBJR052YVc1amFXUmwgTG1kbGRGZHBibVJ2ZHc9PSBJRTFoY25ScFlXdz0gWDNSc2N3PT0gTDJKdmIydHogSUc5MWRISmhaMlZrIElDaCtLQT09IGMzUnljM1J5IElFSnZlR1Z6IDZZTzkgNDRPbCBVazlKIFJuVnVZM1JwYjI1aGJBPT0gSUZCeWIyUT0gUEZSbGMzUT0gSUhacFpHVnZkQT09IElHRnRiM0psIFlXSmljZz09IElFMXZiblZ0Wlc1MCBJSEpsYVc1bWIzSmpaVzFsYm5RPSBJRU52WTI5dWRYUT0gTG5ObGJtUlRkR0YwZFhNPSBMbXRsIElFeGxZWEE9IFgyRnlkR2xqYkdWeiBVR2xsIElFbHlkbWx1WlE9PSBRVUpEUkVWR1IwaEogSUVWNGNHeGhibUYwYVc5dSBaM0p2ZFhCQ2VRPT0gSUc5MlpYSm9aUT09IElHRnV3NkZzIElHTnNZWE56YVdacFpYSnogSUUxcGVHVnkgTDJOdmJHOXljdz09IElGVnpaWEpFWVhSaCBYMEZTVWs5WCBYM1pzWVc0PSBMa055WldGMFpVUnBjbVZqZEc5eWVRPT0gSUVoaGF3PT0gSUVKdmJtVnogSUVGd2FWSmxjM0J2Ym5ObCBJRTF2YjJSNSBSRUZEIFoyVjBZdz09IDZMYUYgTGtacGNtVT0gNmFNPSBJR2hwZEhSbGNnPT0gWm5KbGMyZz0gNExtQiBJRU5vYVd4a2FHOXZaQT09IGVHOXkgTFdoMGRIQT0gSUUxUFVnPT0gTG5ObGJtUkxaWGx6IFgzTm9ZWEJsY3c9PSBJRlZ3Y3c9PSBJRUZ5Y21WemRBPT0gWVhwNmFRPT0gWDI5d1kyOWtaUT09IExrNXZiV0p5WlE9PSBJSEJ5dzdOdyBJSHA0IElIUnlaVzFsYm1SdmRYTnNlUT09IFUzQmhZMlZ6IFpXTmogSUhabGJIWmxkQT09IElHMWxiVzl5YVdFPSBJRXhCVUE9PSBMa1J5WVhkTWFXNWwgSUhSaGNtZGxkRlI1Y0dVPSBjbVZ6ZEhKcFkzUnBiMjQ9IElFUlNWZz09IFczUnZjQT09IEllS0FtUT09IEwyTm9ZWFE9IElITnZibWxqIFZHOXliMjUwYnc9PSBiM2RwIExtUnZZM009IElFbHVhWFJwWVd4cGMyVT0gSUR3aCBMblJpYkE9PSBMbEJ5WlhCaGNtVmtVM1JoZEdWdFpXNTAgTDJSdmJRPT0gTG5KdmRBPT0gWDFCU1QwMD0gUzJWbGNHbHVadz09IElHaGhjbWRoIElHcHZjbTQ9IElHbGtaVzUwYVdacFlXSnNaUT09IFcybHcgVUdsdWF3PT0gWDBobFlXUmxjZz09IHc1RT0gWVdSc1pRPT0gNTcyUjU3dWMgYzJWeGRXVnVkQT09IFFXTjBhWFpoZEdWayBkRzF3YkE9PSBJRkJoYkd3PSBJR1poZEdGc2JIaz0gZlgwcENnPT0gVUc5d2IzWmxjZz09IElFMWpUR0Z5Wlc0PSBRMmhoYm1kbFpFVjJaVzUwUVhKbmN3PT0gSUVadmNtMWhkR2x2Ymc9PSBUbUZ0IGJtVjNjMnhsZEhSbGNnPT0gTG1aeWIyMVRkSEpwYm1jPSBYMmx0YlE9PSBRVkJRUlVRPSBMRzV2WkdVPSBLR1JsZEE9PSBJSEJoY21Gc2JHVnNjdz09IElHeGhjMlZ5Y3c9PSBJR05vYjJOdmJBPT0gTDNCdmNuUT0gWVdabVpXND0gS0dSbGRHRnBiSE09IElISmxjR3hwWTJGMFpXUT0gUVhOVGRISmxZVzA9IFlYSnRZV009IFhWMDkgWVd4aFkyZz0gWDNObGMzTnBiMjV6IFFXeG5iM0pwZEdodFJYaGpaWEIwYVc5dSBJSFpsY21KdmMybDBlUT09IExrTnZiSFZ0YmxOMGVXeGxjdz09IEtGVlRSVkk9IElITnNaV1Z3Y3c9PSBJR0Z4ZFdGMGFXTT0gWDJKMWJHcz0gUFNjdUx3PT0gYjNWeWJzT3BaUT09IElFMVRSQT09IElFSnNiMk09IElFZHNaUT09IElISmxjSEpsYzNOcGIyND0gSUdWdWRHOXVZMlZ6IENRa2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgV1U1RCBMa0ZzYkc5M1IyVjAgSUhSMWNuUnNaWE09IElDZCtMdz09IFpYTnpiMjQ9IElFUkpSUT09IElFRnhkV0U9IElGTkZVUT09IE96czdPenM3T3pzN096czdPenM3T3c9PSBMbkIxZEhNPSBJRTFCU3c9PSBLRU4xYzNSdmJXVnkgSUdSbGMzTmxjblJ6IElHVnRZbVZzYkE9PSBJSFJoZUdWayA1YnFYIElITmphR3c9IGNtVnpZMjg9IElFWnliMmM9IElGQmxibVJwYm1kSmJuUmxiblE9IFgweHZZMkZzIEwzTmxZM1Z5YVhSNSBJRkp2ZUE9PSBJSE53YjJsc1pXUT0gWDFkSlRrUlBWMU09IFNtVnVibWxtWlhJPSBJR1JoZEdrPSBWVzVzYjJGayBMbWR5YVdSNCBLSE4wWVdkbCA0YnVYIFUzRnNRMjl0YldGdVpBPT0gTG0xNCBJR0pzYVhSNiBJRVp2Y25SeVpYTnogSUVKeWIzZHpaWEpCYm1sdFlYUnBiMjV6VFc5a2RXeGwgZDJsdVpRPT0gVGxORiBMWEpoYm10cGJtYz0gZVhKbCBJR3hwYm10aFoyVT0gdzZGciBrWnc9IFlYUnpZWEJ3IElFTjVZMnc9IElHVmpiMnh2WjNrPSBJR0pzWVhSaGJuUT0gSUZCbGNtWT0gSUZocFlXOXRhUT09IElFUnZjblJ0ZFc1ayBjbVZ6ZFd4MFUyVjAgSUdkcHc2QT0gSUdaaGRXTmxkQT09IElFUmhiSFJ2Ymc9PSBJR1p5WldWeiBRbFZHUmc9PSBMbkJoY21Gc2JHVnMgSUVGemRISnZjdz09IElGWkZRMVJQVWc9PSBJSE4wWVc1a2IzVjAgdzdOdGJ3PT0gSUdaeVlXMWxZbTl5WkdWeSBYMUJCVWtGTlJWUkZVbE09IElFWmhiR3M9IElFUnBaMmwwIElHVnNaV04wY3NPemJtbGpidz09IElIWmxjbkk9IFZVbEJiR1Z5ZEZacFpYYz0gS0ZOeGJBPT0gTFVsT1JnPT0gSWlrcEtUcz0gSnljSyBLRVZHUmtWRFZBPT0gSUZwMWJRPT0gWDBSUSBLVjA3RFFvPSBJR0Z1ZEdWdWJnPT0gSUdGaVluSmxkbWxoZEdsdmJnPT0gSUhObGFYTnRhV009IFgxUlNRVTVUVEE9PSB0Wnc9IExrMXBiR3hwYzJWamIyNWsgTEd4aGRBPT0gSUVGdVkyZz0gWDAxdlpBPT0gUVd4eWFXZG9kQT09IFpHUmggSU1LbCBWVTVFVEVVPSBJTkMzMExEUXN3PT0gSUhOMWJHWjFjZz09IElGTnBkR2c9IElFNXBiV0oxY3c9PSBJRVY0WVcxcGJtRjBhVzl1IFgzZHBabWs9IGZXQXBPd29LIElITmxibk5oZEdsdmJuTT0gWVdaeiBYME5NVWc9PSBJR2x1Wm1sdWFYUmxiSGs9IElITjVjM1REcUcxbCBYMlp2Ym5SeiBTVzF3WVdOMCBVRzkzWlhKbFpBPT0gSUR3OVBnPT0gWDI1bFpXUT0gUkVWRFVrVkcgSUM4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4diBJRkpsY0c4PSBaMlYwVTJWeWRtbGpaUT09IEpHND0gWDNCamRBPT0gUlhKeVpYVnkgSUU1SFQzTT0gSUNvS0Nnbz0gTG1GMFlXND0gWDFSTlVBPT0gSUdOdmJHeGhjSE5wYm1jPSBJSE5vYnc9PSBYMUJEU1E9PSBMbTl3WlhJPSBLR0ZrYWc9PSBJR2RwYjNZPSBQaWt1IElHbHVZMjl1ZEhKdiBZWEprWVE9PSBJR0Z3WlhnPSBJRzFsWkdsa1lRPT0gSUZOb1pXbHJhQT09IElFRnliV1Z1YVdFPSBZWE56YjJOcFlYUmwgTFhkdmR3PT0gSUZSMWNtNXBibWM9IElFWnlaWFZrIElFWnZiMnc9IElFeEVVdz09IExTMHRMUzB0TFFvSyBiMnh6YjI0PSBMa1pKVEVVPSBYMlJsZEdWamRHOXkgUkc5dGFXND0gSUdSbGNHeHZlVzFsYm5SeiBJR1poY21WM1pXeHMgS0dKcGJtUT0gSUc1dmRtbGpaUT09IGRHUnZkMjQ9IElHZGxkRVZzWlcxbGJuUT0gSUhabGJHbDAgWVhOMGFHRnUgQ1dOb1lXNXVaV3c9IFgwWlNRVTFGUWxWR1JrVlMgTG5SeVlXbHNhVzVuIExuTmxkRVZrYVhSaFlteGwgT3l3PSBJRWxFUmc9PSBYMUJDIFoyVjBUR0Z6ZEE9PSBJRU52WVhOMFlXdz0gSUVoaGJtUjUgYkdsdVoyVnkgNDRHbjQ0S0MgVUdWeWMybHpkR1Z1WTJVPSBMbWRsZEZObGNuWnBZMlU9IElOQyswTG89IElHNXZkSGRwZEdoemRHRnVaR2x1Wnc9PSBLRkJTIFZVMUMgSjEwcEtYc05DZz09IFpXMWljbUZ1WTJVPSBaWGhqWlhKd2RBPT0gWVhGMSBYMkpzYjJNPSBJRkJ5YjNacGMybHZiZz09IElFMWpSRzl1IElFZHZiR1JpWlhKbiBJR052YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwIElHSmhjMlZRWVhSbyBMV1pwY21WayBJR1p2Ykd4aGJtUnYgSUZScGJHVnogUUdWdVpHWnZjbVZoWTJnPSBSVTVEU1V3PSBJRUp2ZUdsdVp3PT0gYVhGMVpYST0gUVdOb2FXVT0gUlc1MWJYTT0gUW1GelpWVnliQT09IEtITmpZVzQ9IElGQmhjM05wZG1VPSBZV0psYkd4aCBMM051IExtNTFiV1Z5YVdOVmNFUnZkMjQ9IElIWmxjbTQ9IGJHOWpZV3hwZW1WayBJRTFwZWc9PSBJSEpsYzNWc2RFeHBjM1E9IEwzWjFaUT09IFJWSldTVU5GIExtOWsgSUd4cFoyND0gSUZOMGNtbHVaMVJ2YTJWdWFYcGxjZz09IElIUnlZV2M9IFFXTmpiM0prYVc5dSBJRzV2Y21WbVpYSnlaWEk9IGJYTmpiM0pzYVdJPSB3NkYwYVhNPSBZbmwwWlhJPSBJSE5vYjNka2IzZHUgSUhObGJXRnBibVU9IElDMHRQZzBLRFFvPSBJRTFoYUcwPSBmU0k3Q2dvPSBJR1J4IElGQjFZbXhwYzJobGNuTT0gSUVGdGNHdz0gSUVSaGJtbGxiR3hsIElIUmxjbTQ9IDZMVzMgYm0vRm04U0ggWldsdSBJRUZ6ZVc1alUzUnZjbUZuWlE9PSBkVzVuWlhJPSBjbTkxZHc9PSBJSE5qYVhOemIzSnogTDJGemMyVnlkQT09IExtSjFZMnRsZEE9PSBMMkZ5WTJocGRtVT0gWDAxaGJnPT0gSUdsdWRHOXNaWEk9IElDZ3BQVDQ9IElOQ1MwWXM9IElITmhhUT09IExuaDUgTGlJTkNnPT0gSUhWeWFXNWhjbms9IFpYTjFZZz09IFNWTlVTVU5UIElNNjYgSUdOdmJYQnNhVzFsYm5SeiBJSFI1Y0dsdVozTktZWEJuYjJ4c2VRPT0gYVdoaGNnPT0gUlhod1lXNXphVzl1IElGTmxjblpwYm1jPSBYM04wZFdSbGJuUnogSUZoQ1QwOU1SUT09IEtHbHMgSU95eW1BPT0gSUdyRHN3PT0gS0hSdmJBPT0gS0VwVCBDVU5IIElFUlNRVmM9IGRIZHBadz09IElHOWhkQT09IFgzTnRiMjkwYUE9PSBJRU5UVEE9PSBJRzl6YjJJPSBJR1Z1YzNWcGJtYz0gSUdKaGJtdGxjZz09IElFSmhZMnR3WVdOciBYM0JwYm1jPSBJSGRwYzJoc2FYTjAgUFdGNCBDU0FnSUFvPSBSR2x6Ym1WNSBjM1JsWVdSNSBJajRsIElIQnliM0JvWlhSeiBJRnBZIElHMXBibWx0WVd4cGMzUT0gTGxCTVFVbE8gVTJWaGRIUnNaUT09IExtOXlaR2x1WVd3PSBJRkJKVUVVPSBJSEpsZEc5eWJtRT0gSUdwMVoyRmtiM0k9IElFSnlaWFE9IElPS1VuQT09IElIQnNkWE5vIFZVeEJWRTlTIFUyOXlkR2x1Wnc9PSBMbWR5YVdSNSBaV04wYjIxNSBYMkZqZEdsMiBjbUZqYXc9PSBTVzUwWlhKaFkzUnBkbVU9IElFRnVkR0Z5WTNScFkyRT0gSUhabGJtZGxZVzVqWlE9PSBaVzV6Ync9PSBYMnR1YjNkdSBkWEJ3YkdsbGNnPT0gTGsxdlpIVnNaWE09IElFTnZibTVsWTNScGIyNVRkR0YwWlE9PSA2WnFRNkplUCBRRVpwYm1SQ2VRPT0gSUhCc1lXTmxjZz09IFhHMXZaR1ZzIFBDZ3BQZz09IExtbHpVM1ZqWTJWemMyWjFiQT09IExXZHZiMlE9IFlubz0gSUVSeVlXTnYgUVhOemFYTjBZVzUwIExXVjRkSEpoIDBMRFFzZEM3MExqUmhnPT0gSUdoNWNHOWpjbWx6ZVE9PSBJSFJ6ZEE9PSBJRUZuY2c9PSBKSFI0ZEE9PSBJR3h2WjJsemRHbGogYkdsalpXNXpaV1E9IElFaHZaZz09IElIUmhkQT09IEtHbDIgSUdsdWRHOTRhV009IGNHOXpkRWxrIFgzTjBjbWxyWlE9PSBJR2gxYldsc2FXRjBhVzl1IGNHTnZaR1Z6IEluTjVibU09IEtISmxZMmx3WlE9PSBLMDQ9IGNtVnVkR1U9IENVTnNhV1Z1ZEE9PSBlV052Y0djPSBJRnAxY21samFBPT0gSUZCeWIyWnBiR1Z6IFEyOTFiblJ5YVdWeiBJSEJwWTNRPSBJSEp2Ykd4dmRYUT0gY21WeGRXVnVZMmxsY3c9PSBJSEJoZEdOb1pXUT0gSUdOaGNuUnlhV1JuWlhNPSBJSE5vWVdScGJtYz0gU21GeSBJSE5oYkhaaFoyVT0gSUZSaGVHVnogSUhOMFlXNWtZbms9IFlYQnZjbUZ1IFJXbG5aVzQ9IExtRnVaM1ZzWVhJPSBJRTVsYzNSbFpBPT0gNUxxciBJR2x6Vm1semFXSnNaUT09IElFUjNhV2RvZEE9PSBYMEpTUVU1RFNBPT0gTGtSbGJHRjUgSUd0bGJtUT0gSUdaaFkybHNhWFJoZEdWayBMbVpzWVhSTllYQT0gSUhOaGJuUmggQ1ZObGJtUT0gTDIxbGMzTmhaMlZ6IElHOW1WSGx3WlE9PSBDWE4zWVhBPSBJM0JzZEE9PSBJRlIxY210eiBUa1ZUIElIQnliMmR5WlhOemFYWmxiSGs9IElGSmxjMmxrWlc1alpRPT0gSUZSU1JVVT0gSUc1dlpXND0gWkdsdiBJRzVsYkd4bCBJSE52WjJGeSBhWFIwYVE9PSBkMlZsYTJ4NSBJR0Z0WW1sbmRXbDBlUT09IFgxTmxkSFJwYm1keiBWMkZ5WlE9PSBMbTVsYnc9PSBYMFJUVkE9PSBJT2FXdVE9PSBjSEpsY0E9PSBiRzlpWW5rPSBRR1Z0WVdscyBMMjF2ZG1sbCBJR1oxYm10aiBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDZz09IHdxMXogSUdkMVlYSmthV0Z1Y3c9PSBMWEJ2Y3c9PSBJR052Ym1acFozVnlhVzVuIElFTlFVdz09IElFUmxkWE09IElIWnBaTU9wYjNNPSBYMlZ0Y0hKbGMyRT0gSUhOc1lYQndaV1E9IFBFMXZaR1ZzIElIVnVaR1Z5YzJOdmNtVnogVldnPSBMbUZqWTJWemMxUnZhMlZ1IFUwVlVVdz09IElGTndZWEp6WlE9PSBJRU5oYkdRPSBPbkJoZEdnPSBJRk5sY25abGNuTT0gUFdKaGRHTm8gSUd0dWFYUjBhVzVuIElIaGggSUhObFlYSmphRUpoY2c9PSBJSE51WVdjPSBJR2x1Wm5WelpXUT0gTG1KaGJRPT0gYkdWMlpYST0gSUhSaGVHOXViMjE1IHc0ND0gSUdGMGRHRmphR2x1Wnc9PSBJR2hsY200PSBYMDVQVUE9PSBRMnhwWTJ0aFlteGwgS0ZCaGNuTmwgSUVSNWJtRnRidz09IExXSjFhV3hrWlhJPSBJR1JsY21WbiBJSE5qWVhSMFpYSnBibWM9IDZMK2I2S0dNIFlXNTZhUT09IElGTm9aWEJoY21RPSBJajRuTEFvPSBYMWhFUlVOU1JVWT0gSUVKMWVucEdaV1ZrIFgwMUJVa2RKVGc9PSBVRXhQV1E9PSBMbk50WVd4cyBJRzFwYldWVWVYQmwgSUdodmJHOW4gQ1dOaGJXVnlZUT09IGJHbGhjdz09IElITjFjM0JsYm5ObCBiMlI1Ym1GdCBZbUYxIElHZHlZWFpsZVdGeVpBPT0gWDI1aGJXVmsgSWpvaUp3PT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gSUdkaGJXVlBkbVZ5IElFeEZUa2RVU0E9PSBDWE5qY21WbGJnPT0gSUdSdlNXNUNZV05yWjNKdmRXNWsgWDJSbGNHVnVaR1Z1WTJsbGN3PT0gSUhKMFl3PT0gTDNWdyBYMUpQVFE9PSBTR0ZzYkE9PSBJR1JsWm1samFXVnVZMmxsY3c9PSBLSFJsIEp5TT0gWDJWeGRXbDIgSUhCeVpXOXlaR1Z5IElFRjRaUT09IDBMN1F2TkdEIExuTmxibVJHYVd4bCBJR1pwYkhRPSBJRXhwYldsMGN3PT0gSUVOaGRtRnNhV1Z5Y3c9PSBMbVJwYzJOdmRXNTAgNG9hUSBJRmRwZEE9PSBVVkpUVkZWVyBJR2xxIElIUmxaMlZ1IElEb2lMQT09IFpHbG1abWxqZFd4MGVRPT0gY0hWdWEzUT0gSUVWdFlXbHNjdz09IFkyaHNiM0k9IEtHWjFiZz09IExsVnBiblE9IElGTjBZV3hzIFgzWmxjbWxtYVdWayBkVVE9IFJtbHNaVlI1Y0dVPSBJSEJzWldGemRYSmxjdz09IElHcDFaR2xqYVdGeWVRPT0gSUhOb1lXMD0gYVhCMWNnPT0gWDFCTVZWTT0gYjJabVpYSnogS0dadmJ3PT0gWDBkVSBDV052Y21VPSBSVTVVU1U5TyBJRXhwWW1WeVlYUnBiMjQ9IFEyOXRiV0Z1WkV4cGJtVT0gWDJSbGNHRnlkRzFsYm5RPSBMa0Z5IFgyNWxhV2RvWW05eSBJRk4xWW0xcGRIUmxaQT09IElEd2hMUzFiIElHeHZZMkYwYVc1biBMazFoY0hCbGNnPT0gWDNOMGNtVnVaM1JvIFd5NHVMaXc9IElFcGhiQT09IEwyeHZZV1E9IElHSjFabVp6IElHMXZkRzl5YVhOMGN3PT0gQ1dOeiBZWE5qWlc1a2FXNW4gSUZkb1lYUnpZWEJ3IElFNWhjM009IFgwTlBURlZOVGxNPSBUR1Z2Ymc9PSBjSEJsIFpXeDBZWE09IElIUnFaV3BsY2c9PSBYMHRGV1ZkUFVrUT0gY1hWaGJHbG1hV05oZEdsdmJnPT0gYUhKaCBJSEpwWkdsamRXeHZkWE5zZVE9PSBKR2x1Wm04PSBSa1ZCVkZWU1JRPT0gWkc5bGMyND0gSUV0WCBJRVZ1ZFcxbGNtRmliR1ZUZEhKbFlXMD0gWDAxQlZBPT0gSUZOMGNtVmhiVXhoZW5rPSBJSE5qY21GMFkyaHBibWM9IExuUnBZMnRsZEE9PSBJSE5vYjNKMFkyOXRhVzVuY3c9PSBaV3hzYVhCemFYTT0gUFdOMWNuSmxiblE9IElHTnlaWE4wIElIZG9iM0psIElGQmxkSEp2YkdWMWJRPT0gWTI5dWRHVjRkSE09IElPYXQgTFhCNWRHaHZiZz09IEtHcHpiMjVQWW1wbFkzUT0gSUZCeWFYTnQgSUhsaFkyaDAgdDZnPSBabXhoYzJoa1lYUmggSUd4bGFXTm9kQT09IElFMXZjblJ2Ymc9PSBJSE4wWlhKc2FXNW4gWDJsMGNnPT0gWDNWayBSbUZqWlhNPSBJR2hwY21WeiBabVpoIEp5eDdDZz09IExXTmhiV1Z5WVE9PSBYMUpGUVZOUFRnPT0gSUVobGJHVnVZUT09IGNuVm4gYVdkb2RHeDUgSUhCbGNtMTFkR0YwYVc5dWN3PT0gSUZSdmNtRm8gSU9hWXIrV1FwZz09IENYSmxZMjl5WkE9PSB3NEE9IExtZHRZV2xzIFJtOXlkSFZ1WVhSbGJIaz0gS0UxdlpBPT0gVDJOamRYSnlaVzVqWlhNPSBJR1JsY0hKbFkyaz0gSUhaaFozVmxiSGs9IEwxbz0gVms0PSBMblJ3IFgyZGxibVZ5IElIczZQMzBpTEE9PSBkMkZvYkE9PSBTVXRGIElFeGxaMmx6YkdGMGFXOXUgSUdocGJuUmxjZz09IElHRmtaV3c9IEtHaHBaMmc9IDVvK1E1THFrIEwyUnZiV0ZwYmc9PSBMblJwYkdWeiBJRlJwWW1WMFlXND0gSUZOMFpYSmxidz09IElHWnBiR1ZUYVhwbCBaM0oxY0c4PSBhV0ZsIFUwTlEgSUhadmRXTm9aWEp6IElGQmhibVJ2Y21FPSBJR1JwYzIxaGVRPT0gSUd6RHFXYz0gSUVKbGFHRjJhVzl5WVd3PSBZM0poYmc9PSBUbVZ6ZEdWayBZV05qYjIwPSBJRTVoYUE9PSBJRUpoYkhScFl3PT0gSUVSRlUxUT0gSUd0cGMzTmxjdz09IFZtbHUgSUhCeWIzWnZhMlU9IFgwTnZiblJsZUhRPSBJSGRsWld0a1lYbHogZFhKblpXNWpaUT09IFRHbHIgSUhCc1lYcGggSUdKc1pYWT0gSUhKbFlXWm0gWDFScGRHeGwgS0VkMGF3PT0gSUdObGJHeGwgSXowOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwPSBJRXB2YjIxc1lRPT0gSWo0dkx3PT0gVFc5dWRHaHNlUT09IExuUnZSRzkxWW14bCBLR1Z1ZEhKcFpYTT0gSUU1U1JnPT0gS0dkalpnPT0gSUUxcFpHUnNaWGRoY21VPSBmUzE3IFgwaEpSRVU9IElHeHZkMlZ5Y3c9PSBLRk5sYkdZPSA1WStSNllDQiBJR2x6VEc5bloyVmtTVzQ9IElHSnBiMlJwZG1WeWMybDBlUT09IElHMTFjMk5vYVE9PSBLR05oYm1ScFpHRjBaUT09IElFRnVjMms9IENYTnQgTDJsdCBLeWNwIFkyUmogSUdGc1ozVnVZUT09IElITmhZM0pwWm1samFXNW4gTDNabGJtUnZjbk09IEwwRlFTUT09IFFXUjJaWEowYVhOcGJtYz0gSUVkRlRrVlNRVlJGUkE9PSBJRVJwYzI5eVpHVnljdz09IElGTmxjbWxoYkdsNllYUnBiMjQ9IElITmhkbUZuWlE9PSBJT203IElFbHVjMmxuYUhSeiBJSEpsZG05clpRPT0gSUdwMWNtOXljdz09IGMzVnBkQT09IElFTmhiWEJwYm1jPSBYM0J5YjJacGRBPT0gWW5WamFBPT0gTGtGamRHbHZibk09IElFbEVSVUU9IGIyeDFiSFU9IFRHbHJaWE09IDY3S0k3Wmk0IExrSk1UQT09IGRzT2sgSUdOaGNtUnAgSUdScGMzQnliM0J2Y25ScGIyNWhkR1ZzZVE9PSBJR2x1YzJGdWFYUjUgTG1WdlpnPT0gSUZCc1lYUjYgTG1acGNuTjBibUZ0WlE9PSBJRk5zWVhObyBYME5HIGFtRnVaSEp2IElFZGhkV2RsIElGTjFibVJsY2c9PSBJRUoxYm01NSBYM1Z0IDZJR1U1N083IElHbFFhRzl1WlhNPSBJRUpKVHc9PSBJR3RvYnc9PSBlRVpCIElFWnlhV1Z1WkhOb2FYQT0gSUdOaGJHMXNlUT09IFgzUm9jZz09IFgwRnVhVzA9IElISmhhWE52Ymc9PSBMM0p2YjNRPSBMbWRsZEVKNVNXUT0gSUZOaGRtRnVibUZvIElFbHVkR1Z5Y0hKbGRBPT0gYTJsc2JHVnkgQ1hkbiBYU2xkIDBZUFF0ZEdDIFMyVjVWbUZzZFdVPSBXMGM9IGMzUnlaWFJqYUE9PSBMWEJzWVhscGJtYz0gSlRzTkNnPT0gSUhCc1lXNXIgSUhCbFlXTm8gSUVSbGNuSnBZMnM9IDBMVFJnTkMxMFlFPSBJRk5vWVcwPSBRVkJRVEVsRFFWUkpUMDQ9IExuQnliMmR5WlhOelFtRnkgSUhSeVlXNXphWFJwYjI1cGJtYz0gWDJSeVlXYz0gTGxKbGNYVmxjM1JDYjJSNSBMazF2WW1sc1pRPT0gU205dVpYTT0gTGxCb2IzUnYgSUdGNGJHVT0gZW5WbiBMMjl3ZEdsdmJuTT0gWFYwcENnbz0gQ1c1diBXMmh5WldZPSBJR0ZuY21WbllYST0gSUZObGNuWnBZMlZGZUdObGNIUnBiMjQ9IGJtbHVaMlZ1IFJHbG1abWxqZFd4MGVRPT0gUWs5UFRFVkJUZz09IFFXUmtjdz09IExXaGhibVJzWlhJPSBJRWRoZEE9PSBJRVZpYjI1NSA0YnF0Ymc9PSBZbkpwWjJoMCBJR052Y25CelpYTT0gTGtOb1pXTnJaV1JEYUdGdVoyVmsgSUcxaGRHbHVadz09IElFaGhjblJtYjNKayBJSHB2ZFE9PSBJR1IxWkdWeiBYMkZzWnc9PSBJRXAxYkdrPSBiMk4xY0E9PSBJTkMvMFlEUXNOQ3kgSUV0aGRIaz0gWDBsdWRHVnlibUZzUVhKeVlYaz0gTGtOdmJIVnRia2hsWVdSbGNuTklaV2xuYUhSVGFYcGxUVzlrWlE9PSBUV1YwYUc5a1RXRnVZV2RsY2c9PSBJRkpsWkdVPSBJR3hwYzNSSmRHVnQgTGtKdmRXNWtjdz09IElHRjJaVzUxWlhNPSBJRU52WjI1cGRHbDJaUT09IFJYaDBaVzVrIGRHVmphRzVwWTJGcyA0b0NhIGMyNWhhMlU9IFJuSnZiVU5zWVhOeiBhV3hsYzNNPSBJRDE3IGRYSmxkSFJsIEwzUm9jbVZoWkE9PSBSa2xGVEVSVCBTVlpKVGtjPSBJRkJQVTBsWSBYMkZyIElDNHVMeTR1THk0dUx3PT0gVFhBPSBJR0Z1YjI1NWJXOTFjMng1IFZHRnlaMlYwUlhoalpYQjBhVzl1IFlXWm1aWEk9IFlXNTVkR2hwYm1jPSBJbWx6IFozSmxjMjg9IElFeGhjbUU9IGFYcGhaRzl6IElHMXBibWM9IExuUmggWDNSb2NtOTMgVW1nPSBJSE52Ykdsa2FYUjUgYm1Gb2JXVT0gYVdOb1lXZGwgSUcxdmRXNWsgYjJ4cGJ3PT0gWVhKNVlRPT0gUVZOVlVrVT0gSUhkdmFHdz0gSUdaMWNtNXBjMmhwYm1keiBMbk5sWTNScGIyNXogSUdGd2IyeHZaMmxsY3c9PSBZWEJwYTJWNSBJRk5qY21WMyBJRmRoY25OaGR3PT0gTDJkeVlYQm8gSUZOQlZFRT0gZVhObGN3PT0gTDJKMWRIUnZibk09IDBMWFF2ZEMrIFZVZElWQT09IElIQnZjbTV6ZEdGeSBVR2xqZEhWeVpVSnZlQT09IFgxUmxlSFIxY21VPSBJR0hEc1E9PSBJRzVsY21RPSBMV052Ym01bFkzUmxaQT09IElHOTFkSE5wWkdWeWN3PT0gSUc5d1pYSmhkR2wyWlhNPSBZV0ppYkdVPSBMMjFoYmc9PSBJSEJzWldGayBYRVJpIElFTnZkbVZ5WldRPSBQVk09IElFWnNZVzFsY3c9PSA3NytsIFgzUnBkR3hsY3c9PSBJSEpsZEhKaFkzUT0gSUdOdmJHeGhZbTl5WVhScGJtYz0gSUdKbGFHRnVaQT09IExrUmhkR0ZIY21sa1ZtbGxkME52YkhWdGJraGxZV1JsY25OSVpXbG5hSFJUYVhwbFRXOWtaUT09IElHeGhZbTl5WlE9PSBJSFJ2ZEdGc1VISnBZMlU9IElITndiMmxzWlhJPSBJR1JwY0hCbFpBPT0gSWlrcGV3MEsgWDFOQyBJRXhsYVE9PSBJR2x1WTJ4MWMyOD0gZG1Wc2JBPT0gQ1hCcyBTVzVoWTNScGRtVT0gSUZWVFUxST0gYjI1a1pXND0gSUhKdmRYUmxaQT09IExuTjBjblZqZEE9PSA0S3M9IElFMWhiR2xyIElFaEZXQT09IElFTjFjM1E9IFgxQkZVa05GVGxRPSBYMlZ3YVhOdlpHVT0gNW91SiBWa1ZTVXc9PSBJR055ZFdsemFXNW4gUW05dmEyMWhjbXM9IDRvQ21DZ29LQ2c9PSBZMmhsWTJ0Q2IzZz0gYjNWbWJHRm5aUT09IElHNXZibnBsY204PSBJR0Z3Y205NCBJRkIxY21SMVpRPT0gWTI5dmJnPT0gYkdWbmN3PT0gSUV4dmRIUmxjbms9IFUyeG0gU0VGVyBQbXM9IFBrRnUgSUhOc1pXNWtaWEk9IGMyTm9aV1E9IFZHVnNaV2R5WVcwPSBVbWxqYXc9PSBYMU4wY25WamRBPT0gWDBKRCBJR04xYzNSdmJXRnllUT09IElFUmhiVzl1IGRYSmphR0Z6WldRPSBJR3R2WWc9PSBJSFJwYjI0PSBLSEJ5YjIxd2RBPT0gSUdsdFlnPT0gZUVORCBDVmRsWWtWc1pXMWxiblE9IElHaGxiVzl6IDRLYXcgSUVOT1FrTT0gSUVGTVRFOVggNTdHeiBJRVZPUXc9PSBMbk5qWVd4aGRHVnpkQT09IElGUkNSQT09IFoyVjBVbVZtWlhKbGJtTmwgSUVsdGNHOXlkR1ZrIDRMaXcgSUdsMyBiMnh2Ymc9PSBiV2xzIE9pOHZKSHM9IExrMWhibWxtWlhOMCBJR3hvIElHbDBaVzFNYVhOMCBYMkZrY3c9PSBTVzV6Y0dWamRHRmliR1U9IElGUnZiR1ZrYnc9PSBJRVJwYzJGemRHVnkgVlhCa1lYUmxaRUYwIEtTY3BMQT09IElGQkJUZz09IFJtbHNaVU5vYjI5elpYST0gSUhsMVlXND0gYVhSdCBJTkMxMExQUXZnPT0gSUVsaWJnPT0gU0dGMCBYM1ZzYjI1biBZWEJzIElGVnlkV2QxWVhrPSB3Nmx1ZVE9PSBJRU55WVdsbmMyeHBjM1E9IFpHOWphQT09IElHSnBiR1U9IElIQnliMlIxYTNRPSBJR1ZzWldOMGNtOXNlUT09IExrTnZkWEp6WlE9PSBJRzF4IGRXNWpkSFZoZEdsdmJnPT0gTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW89IGRXcDEgVFUxTlRRPT0gWDB4RlJ3PT0gSUc1bGRYUnliMjQ9IElIQnNkWEpoYkdsMGVRPT0gSUNzckpBPT0gWm05MWJtUmhkR2x2Ymc9PSBMa052YkhWdGJsTjBlV3hsIElFaHZiM1psY2c9PSBMa0ZEVkE9PSBJRUp5WVhvPSBiR1Z6YzI5dWN3PT0gWnNPOGFIST0gNEtTQyBJRU5zWVhOemFXTnogY21GcFp3PT0gSUcxbyBJR3RsZEhSc1pRPT0gVTNSeWFXdGwgWlhKa1lXeGwgUlU1VVFRPT0gSUZSaFlteGxRMjlzZFcxdSBJRk5vWVd0bCBJRmRHIElFeHBZMlZ1YzJsdVp3PT0gZFdIRHA4T2pidz09IElITmxZMkZ5WVE9PSBJRzVsZDFaaGJBPT0gVTJWc1pXTmphVzl1IFVISmxabUZpIFptbG5hSFJsY2c9PSBUR0YxYm1Ob2FXNW4gSnlJN0RRbz0gTG14dmJnPT0gTG5WMFkyNXZkdz09IElFaDFibVJ5WldSeiBaWE4wWldGayBJRTkyWlhKM1lYUmphQT09IFgwRkdWRVZTIElISmxiVzVoYm5SeiBLUzVjIElHeHZZbUo1YVhOMGN3PT0gSUhWdWFXNTBaVzVrWldRPSBJT3VRIGVYTjYgSUd4cFluSnZjdz09IExYQmhaMlZ6IFNVNVVSVkpHUVVORiBJR1JsZEdWeWJXbHVhWE4wYVdNPSBJRlZPU1ZGVlJRPT0gSUdWMGRNT2sgVTJsdVoyeGxUbTlrWlE9PSBDUWtKQ1FrSkNRMEsgTFhOMFlYUT0gSUdoaGMyaHBibWM9IEwyRmpZMlZ6Y3c9PSBkR1ZzYkE9PSBDWFZ6WlhKdVlXMWwgSUVSaGRHOXogUW1sMFEyOXVkbVZ5ZEdWeSBPbWh2YzNRPSBJR0ZzZEdWeWJtRjBhVzVuIElPS0FpK0tBaXc9PSBJSGRoZG1WbWIzSnQgUEVWc1pXMWxiblE9IElFTmhiblJ2Ymc9PSBJR1JsYzNSaFl3PT0gZEdWdWRBPT0gTG1kbGRFMWhlQT09IElITjBaVzVqYVd3PSBJRUZqY1hWcGMybDBhVzl1IExrZGxibVZ5WVhScGIyNVVlWEJsIElFMUZVZz09IFgyTnZiV0pwYm1VPSBJRnRkTGc9PSBYMEpKVkUxQlVBPT0gYkdSeSBJR05oYm5ZPSBJRXBXVFE9PSBjR0Z5Y3c9PSBJR1J2ZDI1b2FXeHMgUkdWMFlXbHNjMU5sY25acFkyVT0gS0U1QlRVVT0gSUhKbGFuVjJaVzQ9IFgzZHBkR2hwYmc9PSBRV05qWlhOemIzSjUgSUZQRHFRPT0gTDJsdVl3PT0gSWlsZENnbz0gVUhWaWJHbGpZWFJwYjI0PSBYM0p2YVE9PSBJRzF2WW5NPSBMazV2UVhKbmMwTnZibk4wY25WamRHOXkgSUdWMlpXNTBiM009IExuWmxibVJ2Y2c9PSBYMU5GVEVWRFZFOVMgdzZsbWIyNXYgUFNKYiBJR3hoWVhRPSBJR0pzZFhKeVpXUT0gSUVKdmNtUmxjbE5wWkdVPSBlRVpHUmtaR1JnPT0gWDNkeWFYUjBaVzQ9IElHcGxiblJsIEwzUnBibms9IExuZHcgTG5OMGVXeGxZV0pzWlE9PSBJRU5vWVhKblpYST0gSUdKaGRHaHBibWM9IElGQmhibVJoIHc2bHNhUT09IElIQmhZMmxsYm5SbCBJR2RwYjJOb2FRPT0gSUZacFpYZFRkR0YwWlE9PSBZMmRwIExteHZaMmxqWVd3PSBSRzl1WVd4a1ZISjFiWEE9IExHTnZjSGs9IFpXMXQgWDB4cGJtcz0gSUdsdWMybG5ibWxtYVdOaGJuUT0gWm1adGNHVm4gTDNCaGVRPT0gWDNGMWFYUT0gU1U5RVpYWnBZMlU9IElFVjRhWE4wY3c9PSBJR052YjJ0eiBhblZ1WTNScGIyND0gSUZSWVZBPT0gS0dWbmRBPT0gWVc1cGRRPT0gWDNCaGNuUnVaWEk9IElHWmhZM1ZzZEE9PSBJRlZ1YVdacFpXUT0gTDNOaWFXND0gSUU1bGFBPT0gSUV0aGVtRnJhSE4wWVc0PSBjRzl6ZEdOdlpHVT0gSUhabFoyRnogSUhObGFXNWxiUT09IGZWMHMgZEdWMCBMWEJoZVcxbGJuUT0gSUVOdmJXMWxiblJoY25rPSBJR2QxYVdSbGJHbHVaUT09IEtUc2sgSUVOdmJuTnZjblJwZFcwPSA1N083NTd1ZiBkbWx6Ync9PSBJRUpwYkd4cGJtYz0gYVdOcFlYST0gSUZSNWNHVkpibVp2IENYUnlZVzV6IFBGUmxlSFIxY21VPSBZWFJvYjIwPSBiR0YxWjJoeiBJR2x1ZEdWeVkyVndkR2x2Ym5NPSBLRVZXUlU1VSBSbTl5WldOaGMzUT0gVkhKaGNBPT0gZEhKNCBJRmRvYVhSbGN3PT0gYzNWaWJXbDBkR1ZrIFlXeG5idz09IElIUnlZVzV6Y0c5eWRHVnkgYjNWdVpHRnllUT09IElFbHVhR1Z5YVhSeiBJRU52Ym1WNGFXOXUgTG1Oc2FXVnVkRmc9IENYQnliMnBsWTNRPSBhR1ZoY25SaVpXRjAgTFc5MGFHVnkgSUNjN0RRbz0gdzZ0eSBiM0p3YVc5dSBLR052Y25NPSBJRVZNUlVOVSBJRkJsY21VPSBJSFZ6WlUxbGJXOD0gWlhkeWFYUmxjZz09IElITnhkV2x5ZEE9PSBMMlY0ZEdWdWMybHZibk09IEwyRnogTGtOTVNVVk9WQT09IElHZHZkWEp0WlhRPSBJR0YxZEc5RGIyMXdiR1YwWlE9PSBVa1ZXIElHSnlZV3RwYm1jPSBYMU5GVEVWRFZFbFBUZz09IDQ0T2g0NE96NDRPSSBYMnhwWm1VPSBYMmR5YjNWdVpBPT0gWDNSbGNnPT0gYzI1eiBJRk5RVDFKVSBrdUdlIDVycz0gVlc1cGNYVmxTV1E9IElHUnlhWEE9IFgwSlNUMWRUUlZJPSBMVzFsZEdWeSBaVzVrWlhvPSBJR1Y0YUdGMWMzUnBkbVU9IEtGTkwgSUVKMWNteHBibWQwYjI0PSBkMjl2Y21RPSBLSEJ2ZHc9PSBJSE5sWVhKamFGUmxlSFE9IGhZdz0gYUdWbGJITT0gYzNSbGJHeGxjZz09IExuTnBadz09IFdVOVZVZz09IExtRnNhUT09IElFUmhkR0ZEYjJ4MWJXND0gSUhCeWIycGxZM1JPWVcxbCBYMlpsWTJoaCBJSEpsWm5WdVpITT0gSUhSdmNHOD0gSUVOSVNVeEUgSUUxaGNtSnNaUT09IElHWnZja05sYkd3PSBJSEJsYzNOcGJRPT0gSUdOeWFYTndlUT09IGFXWmxjM1I1YkdWeiBJRzkyWlhKa2RXVT0gYjJ4aGNtbDBlUT09IElHRnRZWFREdUhJPSBUV1E9IFVGSkZVMU09IElHbHVjM1Z5WlhJPSBiMk55WVhRPSBJR1poWTJsc2FYUmhkR1Z6IEx3MEtEUW89IElHaDFjbVJzWlhNPSBYMGhKIFRHVjBkR1Z5Y3c9PSBiV2x1WldOeVlXWjAgWVhoMFpYST0gZVdzPSBJR1ZqYjI3RHMyMD0gSU5DOTBMRFJodz09IElGTlhTVlJEU0E9PSBRMjl1YzNWc2RHRT0gSUU1dmNtRT0gUTB0RlVnPT0gWDBOVSBMbUZ3Y0hOd2IzUT0gSUM4dkxTMD0gQ1VKUFQxTlUgWDJOdmRYSnpaWE09IElIZHBiR3hwYm1kc2VRPT0gNjZlTSBabVprIFptbHNaWEk9IElFMWxZWE4xY21WeiBJR3hsWVhObGN3PT0gSUVSdmNtOTBhSGs9IE9sMHUgYzNWaWMyTnlhWEIwYVc5dWN3PT0gSUdOb2IybHogSUdGc1lXND0gSUdGaWNtbHkgTGxCdmNIVncgUlhOMGFXMWhkR1ZrIElGQk1RVTQ9IDRMV04gSUVWTVJnPT0gSUdScGMzUmhibU5wYm1jPSBDV0Z1YzNkbGNnPT0gSUhKMVozTT0gUzJrPSA0WitTNFo0PSBSM1ZwYkdRPSBaWGgwY21GeiBZM0J6IFRXOWphM009IElIUmxhM04wIEttYz0gTG5KbGNYVmxjM1JHYjJOMWN3PT0gSUdGc2RHVnlZWFJwYjI0PSBJRU5oZEdWbmIzSnBZUT09IGFXMXRaWEp6IElFUnliM0JpYjNnPSBJRUZrWkhJPSA1YnlWIFpHVndjdz09IExrMWxjM05oWjJWQ2IzZz0gSVN3SyBMbWRsZEVJPSBJRzFwWjNKaGRHVmsgSUVodlltSjUgSUUxbiBMbFpsY25SbGVBPT0gSUdadmNtZHBkbVZ1IElFUmxWZz09IElIZGxjbVE9IElFRnlZV0pwWVc0PSBJRk50YjJ0cGJtYz0gSUhOMGNtRjNZbVZ5Y25rPSBJRU5OVUE9PSBaR0pzIElFUklVdz09IExXVnljbTl5Y3c9PSBMbkJoWnc9PSBJRkpPUnc9PSBJSE5vWVhabCBJSFIzWldVPSBJR0Z6YzJWeWRFNTFiR3c9IElFUmxibk5wZEhrPSBaRzlxYnc9PSBZV2x1YldWdWRBPT0gSUhCcSBMbGxGUVZJPSBJQ29wS1RzSyBhV0p5WVhKcFpYTT0gU21WMGN3PT0gUlhobFkzVjBhWFpsIFgyUmxibk5sIExtZGxkRU52Ym5SbGJuUlFZVzVsIFkyaGhibVJzWlE9PSBZV2x1WVE9PSBMWEpsWm1WeVpXNWpaUT09IElHeHBZWEk9IElFaEZRVXhVU0E9PSBXM1JsYzNRPSBMbWx6Ym1GdSBRMmhoY214cFpRPT0gSUhCMWNIQmxjZz09IElHdHBjZz09IE9taHBaR1JsYmc9PSBhWE5XYVhOcFlteGwgSUd0dmJYUT0gSUdGamNYVmhhVzUwWldRPSBJRVJ5ZFdsayBLRU56IExteGhjM1J1WVcxbCBSRk5CIElHUnBjM052YkhabCA1N3lXNVkrMyBWbUZ5YVc5MWN3PT0gSUVSbGVBPT0gWDJGdVoyeGxjdz09IEwyRndhVzFoWTJocGJtVnllUT09IElHVjRjR3h2WkdsdVp3PT0gS0VOb1lYSlRaWEYxWlc1alpRPT0gSUVocGMzQmhiZz09IEt5c3Bld29LIExrMXZaR1ZzVTJWeWFXRnNhWHBsY2c9PSBVVkpUVkZWV1YxaFpXZz09IDU0SzU1WWU3IFBYTmxkSFJwYm1keiA0S1dCIFVFTlQgSUVsT1ZFVlNUa0ZNIElFaFZSMFU9IElHMXBZM0p2YzJOdmNHVT0gYVhOQlpHMXBiZz09IFhIWT0gTG5KbGNYVnBjbVZPYjI1T2RXeHMgMEw3UXU5QyswTEk9IGFXTmxjbU5oIFgxTkZUbFE9IElHUmxjR2xqZEdsdmJnPT0gSUZWelpYSkRiMjUwY205cyBJRTFsYlc5eSBJRUZzYkc5allYUnBiMjQ9IElFSmxaR1p2Y21RPSBJT2FidEE9PSBJSFJ2Y20xbGJuUT0gWVhwbFpYSmggTGxSdlpHRjUgSUZKbFoyRnlaR2x1Wnc9PSBYMFZPUXc9PSBYMUpCVGtSUFRRPT0gVEc5blRHVjJaV3c9IFBWST0gSUVkeVpXVnViR0Z1WkE9PSBJSE4wY21GcGJtVmsgSUcxaFoyNWxkSE09IElHRnNaWEowUTI5dWRISnZiR3hsY2c9PSBJRU5vY205dWFXTT0gWDNKbFoybHpkR1Z5WldRPSBJR3hwYWc9PSBJRVZ1ZEhKNVVHOXBiblE9IElGSmxaMmx0Wlc1MCBkV05wWkE9PSBJRU52ZFd4a2JnPT0gSUVGamRHbHVadz09IFgzSmhlUT09IElHNWhZZz09IExYTmxjR0Z5WVhSbFpBPT0gSUhCdWJBPT0gUTI5aFkyZz0gUVZSWlVFVT0gSUhOMWNIQnNaVzFsYm5SaGRHbHZiZz09IFlXTmxjbk09IFpteGxaWFE9IFNXNXdkWFJDYjNKa1pYST0gSUZOMGNuVmpkSFZ5WVd3PSBJR1JsYVc1bCBJR0p5WlhkbGNtbGxjdz09IFlXNXZhUT09IElIUnlZVzV6YkdGMGIzSnogSUdWcFoyVnVaVzQ9IElHUmhibU5sY3c9PSBkR0Z0IElFTnZiM0JsY21GMGFXOXUgWDNKbGNYVmxjM1JsWkE9PSBJRTFoWjJsallXdz0gQ1V4RlJsUT0gSUNJaUtTd0sgS3kwckxTc3RLeTByTFNzdEt5MHJMUT09IElFNXZhWEk9IElFVnpkR2x0WVhSbCBJRlJvY21WaFpGQnZiMnc9IElFaGxZMnM9IElDY3FMZz09IFZIVnlhMlY1IElITjFZMk5sWldScGJtYz0gWkhKMVp3PT0gZG1sdiBJSEJ2Ym1WeSBJRXBoWkE9PSBhWHA2YkhrPSBaWFpsY25sMGFHbHVadz09IElIdDlLUzQ9IElFbHVjM1JwZEhWMFpYTT0gSUc1MWIzWnYgSUdsdWFYUlhhWFJvVkdsMGJHVT0gSUd4MVlVdz0gYjNkdWFXcz0gSUhSb2IzST0gSUd0c1lYST0gSUc1dmRHOXlhVzkxYzJ4NSBJR1J2Ym1jPSBaVzFsYm5NPSBYM0J5YjJwbFkzUnBiMjQ9IFgwZFNSUT09IExtVjVaUT09IElIZGhkR1Z5YVc1biBJRlJwYXc9PSBiMU09IElGTjBjbUZ1WjJWeSBJQ0FOQ2cwSyBjR0ZuYVc1biBYMmx1ZEdWeWMyVmpkQT09IElFTnZiRzl1YVdGcyBUR2x6WVE9PSBMblZ1YkdsdWF3PT0gSUcxcGNBPT0gWVc1MWRITT0gWVcxaGVtOXUgSUVsRVJVNVUgYzNSaGMzaz0gU25kMCBMUzB0TFMwdEt5MHRMUzB0TFNzPSBJRVZXVUE9PSBRMjl1ZEdWdWRFeHZZV1JsWkE9PSBDVUpKVkE9PSBMbkJoY21WdWRITT0gSUdGc2JHOWpZWFJwYm1jPSBJRWRQVEVRPSBmV0E3Q2dvPSBRVXhCVWc9PSBJSEJ5WldOcGMyRT0gUkdsemRHbHVZM1E9IGMyVnAgSUhOMVluQnZaVzVoIElIQnZiWEE9IElGQnZiRzg9IFkyOWwgZG1vPSBMbmR2Y210bWJHOTMgWlhOMGNtVT0gSUdOdmJtNWxlR2x2Ymc9PSBhVzFsZEhsd1pRPT0gTGxKdmQwTnZkVzUwIElFUm9ZV0pwIElHVnRhWFJ6IExrSnZjbVJsY2xOcGVtVT0gS0hCdmJHbGplUT09IExHMWxjM05oWjJVPSBUMjVKYm1sMCBLU2hmIElHWnBibVZ5IFcyNTFiV0psY2c9PSBJSE5qY21sd2RIVnlaUT09IFVtVm1iR1ZqZEE9PSBMWFJ2YjJ4aVlYST0gS0ZCQlZFZz0gSUVWT1ZGSlogS0M0dUxpa0sgTFdSdmJXRnBiZz09IEtITjBjbWx3IEtTZ3EgSUdOdmJuWmxlV1ZrIElHRjBkR1Z1ZEdsMlpRPT0gdzZoblpRPT0gWDB4RSBJRWR5WVc1MGN3PT0gTFdocFoyaHNhV2RvZEE9PSBJR0p5WlhSb2NtVnUgMllqWmhBPT0gSUdSbGNYVmxkV1ZTWlhWellXSnNaVU5sYkd4WGFYUm9TV1JsYm5ScFptbGxjZz09IFlYQjFiSFE9IExtSnZkSFJ2YlVGdVkyaHZjZz09IElHOXdZMmx2Ymc9PSBJRzkxZEVacGJHVT0gY21WaGRHbHVadz09IFpHbHUgWDNOaGJYQnNaWEk9IENXZHNSVzVoWW14bCBjSFI1Y0dVPSBYME5QVGtSSlZFbFBUZz09IExXVm1abWxqYVdWdWRBPT0gSm04PSBJR3BqIDBLYz0gTDBadmNtMD0gS1daeVlXMWwgSUdKcGJtZGwgWDJOc2IzTjFjbVU9IFNVMUIgS0c1bGVIUlFjbTl3Y3c9PSBDV05rIElHZGxkRTFsYm5VPSBJR2RsZEZOMWNIQnZjblJCWTNScGIyNUNZWEk9IElHMWhibWxtYjJ4ayBXbEk9IFkyaGhibWRsY2c9PSBZWE56YVc1biBaR2x6YUE9PSBJRTF2ZFE9PSBMbTVsZEdac2FYZz0gSUhCdmMzUmpiMlJsIElIZHZiV0k9IElFRnljdz09IDRvQ21LUT09IElHeHBibVZYYVdSMGFBPT0gUkdWaGJBPT0gWVhKaGN3PT0gSUVkeVlXNTBaV1E9IElHaHZZWGc9IElHUnBjbVZqZEdsdmJtRnMgTGt0bGVVTm9ZWEk9IElEMDlJZz09IElGWmxjbVJsIFgwdFEgSUhOMWNuSnZaMkYwWlE9PSBJRVJWU1E9PSBkWEI1ZEdWeSBJSEJsYm5ObCBJRkpCVGtRPSBLR1Y0WXc9PSBJRzFwYzNWdVpHVnljM1J2YjJRPSBJRU5WVkE9PSBJT1M0clE9PSBDWFJwIFgybHVjMmxrWlE9PSBJR0pwWTNsamJHVnogSUdSbFlXND0gWkdseVpXTjBhWFpsIExuQmxaWEk9IGFXTnBibUU9IFgybDBaWEp6IElHbHRjR3g1YVc1biBMbTlpZEdGcGJnPT0gSUhCemVXTm9hV0YwY21semRBPT0gZFhObGNsTmxjblpwWTJVPSBaV3hwZG1WeWVRPT0gQ1hCaGNuUT0gSUdoMWNuSnBaV1E9IElHSjFiUT09IElHaGxjR0YwYVhScGN3PT0gYW1sayBKMTArT3dvPSBJSFZ1WTI5dWRtVnVkR2x2Ym1GcyBJR1poYzJOcGMzUT0gSUZCbGVRPT0gNksrdCBKeWw5UEM4PSBMa05zZFhOMFpYST0gSUVKcGRFTnZiblpsY25SbGNnPT0gWldSaGRHRT0genIvUGhRPT0gNHBTQyBRWEJ3UW5WdVpHeGwgTG1oMGRIQkRiR2xsYm5RPSBJR0Z3Ync9PSBRVWxPVXc9PSBJRlpHIFgyZHBaQT09IElHOWtaUT09IFJWSlNXUT09IElGSmxZMlZwY0hRPSBJRU5oYm1Sc1pRPT0gSUcxcGMzTnBiMjVoY25rPSBJRU55WVc1bCBJRk5VUVZSRlV3PT0gWW05MWRBPT0gWVhsaGNtRnUgTGk0dUlpd0sgSUdsMGFXNWxjbUZ5ZVE9PSBLR3hoZEdsMGRXUmwgSUVOUFRsTT0gTDNOcFpHVmlZWEk9IFUzQnBaR1Z5IFIxSkpSQT09IExtUmxZblZuVEdsdVpRPT0gSUdBbiBMWGxsYkd4dmR3PT0gSUhKbFptbHVaVzFsYm5RPSBJRTFoYTJWMWNBPT0gSUVSaGJtND0gS0NrN0RRb05DZzBLIElHOTJaWEpqYjIxcGJtYz0gSUVKaGRIUmxjZz09IEwzQmhZMnRoWjJWeiBJTkN5MExqUXRBPT0gSUdGeWVRPT0gNG9DZFB3PT0gY21Wc2JHRnogSUdkeWRYQnZjdz09IElGUjVjR2xqWVd3PSBJRTF2Ym5OaGJuUnYgU1c1MFpYSnpaV04wYVc5dSBJSFI1Y21VPSBQVDA5UFQwOUNnPT0genE0PSBPenNLQ2c9PSBJSFJ5YVhacFlRPT0gWDNSaGEyVnUgSUhOdGRXZG5iR2x1Wnc9PSBJRzVoY25KdmQyVmsgNGJxcGJRPT0gSUhCaGJHRmljbUU9IFkyVmggY0dGeWRHbGpkV3hoY214NSBRV05qWlhOelZIbHdaUT09IElHTnZiR1U9IFZHOUdhWFE9IElIWmxjbVU9IElFTlBVdz09IEwzWnBaR1Z2Y3c9PSBJQ2drS0NJaiBJR055WVc1bCBMbWhoYzAxdmNtVT0gSkhCaGRHZz0gYVhacGMyMD0gSUhOMWNHVnlkbWx6YjNKeiBJRVpzYjNKbGN3PT0gY0hKdlozSmhiWE09IExscHBjQT09IElHbHRjR0ZqZEdsdVp3PT0gSUcxdmRHOD0gSUZSSyBjR1ZuWVhkaGFRPT0gWDB0SlRrUT0gWDJsdWRHVnlabUZqWlhNPSBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBJRXhsWVhacGJtYz0gVkdWNGRGTjBlV3hsIFltVnBkR1Z5IElGZHBibTVwYm1jPSBMWEJoY21GdCBSMkZ5ZVE9PSBJRk4xYm5NPSBZV3pFc2NXZiBaSFZqYXc9PSBJSFJvY21WaFpFbGtlQT09IElIQnZaWFJ6IElIQnNaV0ZrYVc1biBJRU52Y21sdWRHaHBZVzV6IFptTmogWVhkaGFYUmxjZz09IEtpMD0gSUhCbGNuTmxkbVZ5IElHRmpkR2wyYVdSaFpHVnogWDI5MWRHeHBibVU9IExYQnNZVzQ9IExuTmpjbTlzYkZacFpYYz0gY1hWaGRBPT0gSUhOaGJYTjFibWM9IElHeGxkbVZzYVc1biBJSE53YkdsMGRHVnkgWDJkbGIyMD0gSUhCeWIyMXBibVZ1ZEd4NSBJRk5sWldSeiA1WnlmIGRXRnBjdz09IFpXWjFiR3g1IFNVVnVkVzFsY21GaWJHVT0gWVdSa2N3PT0gZG1WeWMyRjBhVzl1Y3c9PSBJR1JwYzJGaWJHVnogUVU1RVVrOUpSQT09IElGZGxhWFJsY2c9PSBYMFp2Y20xaGRBPT0gWDNOd2JHbDBjdz09IElFRmpkR2wyWlZOMWNIQnZjblE9IEtHTnpjdz09IFgyMXBZM0p2IGMzUnlhV3RsIElFTmhkWE5sY3c9PSBJSFpwYzJsaWJIaz0gUTJGdVkyVnNZV0pzWlE9PSBJRmx2YzJnPSBJR1J5WVdsdWFXNW4gSUdOdmJHaz0gWVhOc1pYaz0gSUZKbGMzQnZibk5wWW1sc2FYUnBaWE09IElGTjFkSFJ2Ymc9PSBLblJvYVhNPSBVMmhoY21WeiBMV2R5WVhCbyBJR1Z1YkdGeVoyVmsgVW05MWRHbHVaUT09IElHWnlZVzFsWW5WbVptVnkgSUdGcGNtWnNiM2M9IElIUnllQT09IElFeGxhV2RvIElFdGxibk09IEtHaGxZWEE9IElITndhV3hzWldRPSBVME5CVEV3PSBJRlpsYkhabGRBPT0gWVdOMGRXRnNiSGs9IFgwVk9RMDlFU1U1SCBJRmR2Y20wPSBLU2w5Q2c9PSBJRVJoYm1kbGNtOTFjdz09IElITjFjR1Z5YVc1MFpXNWtaVzUwIExteHZiMnM9IElITm9aV3c9IEwyWnogVTJGbVpYUjUgNWE2TCBMa1JGUmtsT1JRPT0gWDJaaFkzUnZjbk09IElIQmhjblJwWkc4PSBJRzl3ZEdsdGFYcHBibWM9IFJHOTFZbXhsUTJ4cFkycz0gTFdOdmJXMWxjbU5wWVd3PSBJR3h2WjJsallXeHNlUT09IFkzbGphQT09IGRYSjJaUT09IHdyVT0gUVVsTVdRPT0gSUhKbFlXTjBhVzVuIFgwVllVRkk9IGE4TzIgTG14dlkyRnNhWHBsWkVSbGMyTnlhWEIwYVc5dSBJR0Z6ZEc5MWJtUnBibWM9IElIQmhjM1J5ZVE9PSBJR2RzYjNOemVRPT0gSUdKbGFHRjJaWE09IEwyVmogSUdOc2FYQndaV1E9IElIQnliM2RsYzNNPSBJRlZDIEx5b3RMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IENXRnNjR2hoIElHVjRkSEpoZG1GbiBJR1pwYm01eiBLRk52WTJ0bGRBPT0gSUZWdWMyRm1aUT09IElIRjFhV1Z5WlE9PSBYMlZ1WTI5a1pXUT0gYjJ4MWJXSnBZUT09IElIcGhZZz09IGMzUnlhV04wWldRPSBJRzF1YVdVPSBJRTFQVXc9PSBJR0YwYUd4bGRHbGpjdz09IElFdGxibVJoYkd3PSBJT3lZcEE9PSBRVlpCU1V4QlFreEYgYVc1dmVBPT0gWDA5UVEwOUVSUT09IElFbDBaVzFVZVhCbCBJR05sYm5SeWFXWT0gSUdsdWRHVnljM1JoZEdVPSBYMkp2YjJ0eiBMbVJsYkdsMlpYSjUgSUV4cGMzUmwgYjNKemFRPT0gWDNObFkzVnlaUT09IFozSnZkM1JvIElIWmxiblJsIElIQnplV05vYjJ4dloybHpkSE09IElFTkRVdz09IGRXUmxibU5sIElHTnlZWGRzWlhJPSBMMjFoYm5WaGJBPT0gSUhSbGVIUlRkSGxzWlE9PSBJSEJoYkdsdVpISnZiV1U9IElHTnZibVIxWTNSeiBkR0ZpYkE9PSBWMmwwYUZWU1RBPT0gTDNKcFoyaDAgSUVSeVlRPT0gTGsxaGFXdz0gS0hObFl3PT0gYjJaMGQyRnlaUT09IElITmxkV3c9IElIZHlhVzVyYkdWeiBYMFpYIFFYaz0gSUVWeWJuTjAgZFc1aWFXNWsgSUdOdmJXMWxibVE9IFgyaHZiMnR6IElFMXZibVYwWVhKNSBJRkZSIGRXNXBkRTltVjI5eWF3PT0gSUVWdWRHbDBlVlI1Y0dVPSBJR2h2Y20xdmJtRnMgTGtaQlNVdz0gUUZOc1pnPT0gTDJOb1lXNXVaV3c9IGMyOXVidz09IFJHRnVjdz09IFgxSmxaMmx6ZEdWeSBTR0Z1IFQxSkMgU2t0TVRVNVBVQT09IGRtVnVkR1ZrIElHeHZibWR6ZEdGdVpHbHVadz09IElHSm5RMjlzYjNJPSBJRHNwIElGSnZZbUpwWlE9PSBLQ0l1SWc9PSBJR0ZxZFhOMCBMbWhoYm1Sc1pVTnNhV05yIGNtRjBhVzVuY3c9PSBjSFJsY2c9PSBJR1Z5YjNScFkyOD0gSUVwbGJHeDUgS2lvcUtpb3FEUW89IExrUnZaWE5PYjNSRmVHbHpkQT09IENXSmwgSkhSbGJYQT0gSWo0bUl3PT0gNTV1MCBDVkIxWW14cFl3PT0gbmV5eXRBPT0gSUVKMWFXeGthVzVuY3c9PSBMV0ZzYjI1bCBMQ2RjIElITjNZWEJ6IElIQmxjbkJzWlhnPSBYM0J5YjJObGMzTnZjbk09IElOQzAwTEk9IElFNVpVRVE9IFVFTlMgNXErUCBJR2h2YW1VPSBSV1JwZEUxdlpHVT0gSUhaMWJHZGhjZz09IElIWmxjbVJsIElDZ3BQVDU3Q2c9PSBMMlp5YjI1MFpXNWsgSUhSbGJHVm1iMjVsIElHeGhiblJsY200PSBMbkJoWjJWWSBJRVIxWkE9PSBiR2x0YVhSaGRHbHZibk09IElHNXZkR2xtYVdWeSBJRTFsYzNOaFoybHVadz09IElXbHRjRzl5ZEdGdWRBPT0gSUhOMWNtZGxiMjV6IEtUMG8gUm1sNFpXUlRhWHBsIExscHZiMjA9IGFXNWhiZz09IElHTnlaV1J6IElFSlZSZz09IExsTjBZV05yVkhKaFkyVT0gSUhkaGNuSmhiblJsWkE9PSBJSE52ZFhKamFXNW4gSUdOdmJtNWggWDBaU1JRPT0gSUhkdmJHdz0gSUhKbFptbHVhVzVuIFgwRk1URTlYUlVRPSBYMjEyIElGZHZjbU5sIElGTnBibU5zWVdseSBRMmhsWTJ0emRXMD0gSUhWdWJHOWphM009IElFMWhjbXRrYjNkdSBJR1pwYzJobGNtMWxiZz09IFJIVmkgSUVKdmJtNXBaUT09IElDQWdJQ0FnSUNBSkNnPT0gSUhabGNubz0gUGl3OEx3PT0gUGp3aFd3PT0gV3ljOGV3PT0gYW1WaiBJRVZ5Wnc9PSBjbUYwYUdWeSBJSEJoYkdGaWNtRnogSUZCQlEwdEZWQT09IGJXbHpaUT09IFpHRnggSUU5cmRHOWlaWEk9IEtFZE1SbGM9IElFaGxibkpwIElFWnZkQT09IElFUjFidz09IElFNUZVdz09IElITmhiSE5oIElIVnVZbWxoYzJWayBRRk53Y21sdVowSnZiM1JVWlhOMCBJRzltWm5NPSA1WVdzNVkrNCBJR0Z0YjNWdWRHVmsgUm5Wc2JGQmhkR2c9IElIRjFZWFE9IElHMWhhV1JsYmc9PSBJRk4xWW5ObGRBPT0gSUVGd2NHeHBZMkYwYVc5dVJHSkRiMjUwWlhoMCBiV2x5Y205eSBibVY0IExuTjBjbVZsZEE9PSBjMlYwVVhWbGNuaz0gSkhKbGMzVnNkSE09IFlXUmxjbTg9IFozSmxjM052Y2c9PSBYMkoxWnc9PSBhWE56WlhJPSBJRk5sWVhKeiBJR1pwYkd4RGIyeHZjZz09IExtMWhjMnR6IElFUnBZV0pzYnc9PSBYMEZPUkZKUFNVUT0gMEo3UXNRPT0gSUdaeVpXRnJhVzVuIElISnBibk5sIEtIQnJkQT09IElHSnZiMnRzWlhRPSBJSE5oYm1OMGFXOXVaV1E9IElITjBjbVZoYldWayBkR0ZpY0dGdVpXdz0gSUZKbGRIVnlibWx1Wnc9PSBVR3hoYVc1VVpYaDAgVEU5WlJVVT0gWVd4bGMyTmwgMEw3UXV0Q3cgSUVacGVIUjFjbVU9IFlYTnpZV1J2Y25NPSBJR1JwYzJKbGJHbGxaZz09IElFeDFjM1E9IElISmhaR2xqWVd4eiBMa1psWVhSMWNtVnogWDJsdVkyaGxjdz09IEtIQnlhVzFoY25rPSBJRXBOWlc1MVNYUmxiUT09IFgzUmhhMlU9IElFTnZhMlU9IFZXNXBkRTltVjI5eWF3PT0gSUZkRFNFRlMgSUdOdmJuTmphV1Z1ZEE9PSBiMjVsYm5WdFltVnkgVUVsT1J3PT0gWVdKaGFtOD0gWFNnaSBMbk5oYkdWeiBYMmhsY21VPSBJRzltWm5ObGRGZz0gZEdGblRtRnRaUT09IElObUsgWDFKcFoyaDAgYVd4cFp3PT0gZEdobFZtRnNkV1U9IGIyTmhjbVE9IElHTnZibk4xYkhSaGJtTjUgSUdKc2FXbz0gWjI5eWJRPT0gVG1GMmFXZGhkR1U9IHhMRmogU1d4c1pXZGhiRUZ5WjNWdFpXNTBSWGhqWlhCMGFXOXUgWDNabCBMa05QVGxSRlRsUT0gZFhKdmNHVmhiZz09IExuSmhaR2x2IElHVnVkbWx6YVc5dVpXUT0gSUZOUFRRPT0gTG5OayBRVTVVU1ZSWiBJRU5CVEV4Q1FVTkwgSUdobiBaR1ZqY25sd2RBPT0gNTY2eCBYRkYxWlhWbCBJRTFKVEVZPSBJSEpsWTNWeWMyVT0gSUVSaGJuUmwgTG1kaGJXMWggYjNKcmN3PT0gS0NJaUtTa0sgSUVkeWFXMD0gTG05d1pXNW4gSUUxcFkyaGxiR1U9IFFXNWhiSGs9IElGQnlkUT09IFgzSmxaR2x5WldOMFpXUT0gWDNCaGJBPT0gWm1Gc2JHSmhZMnM9IElPV3Rsdz09IElHUnBibTVsY25NPSBSMlZ1WlhKaGRHbHVadz09IEpDSXMgYUdsemRHOXlhV009IFoyVjBVMmx0Y0d4bFRtRnRaUT09IElFMXBiR3hwYjI1eiBMV2RzYjJKaGJBPT0gY205MWRHbHVadz09IElHTnZibk52Ykdsa1lYUmwgSUhKbFkyOXBiQT09IFQySnFaV04wVDJaVWVYQmwgSUdSbGMzQmxjbUYwYVc5dSBRVzU1ZDJobGNtVT0gSUdkbGRFMXZaR1ZzIFgydHBiR3c9IGIySnZiMnM9IEwyUnBjM0JzWVhrPSBJaTgrQ2dvPSBJRzFoZVc4PSBJTkdCMEwvUXVOR0IwTDdRdWc9PSBJR2R2WVd4cFpRPT0gZUVSRyBJRkJ5WlhCaGNtRjBhVzl1IElHUmxjR1Z1WkdGaWJHVT0gTGtsT1ZrRk1TVVE9IExpNHVKdz09IGJtRjBZV3c9IGJXOWtkV3hsVG1GdFpRPT0gWTJGeVltOXUgVUVGTSBJRzFsWlE9PSBJR05oYzJsdVp3PT0gNmFHNTU1dXUgYm1sallYTT0gSUVoaGJXMD0gSUVKaFltVT0gYjNkaGJtVT0gSUhONWJtOXVlVzA9IElGRnBiZz09IGFXOWogWlcxdmRHbHZiZz09IElHWmxjbTFsYm5SaGRHbHZiZz09IElHTjFiWEJzIElFVnNaV04wY21samFYUjUgS0ZKUFQxUT0gZEdWemRHVnkgSUVoMWMySmhibVE9IElFSmhkUT09IFgwMUJRMUpQIFlXdGxibWx1Wnc9PSBJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQUsgTG1acGJnPT0gSUVOdmJtWnBaR1Z1ZEdsaGJBPT0gYVdWNiBUVUpGVWc9PSBJSE53WlhKdFlRPT0gSUVoUVZnPT0gZEhodSBRMDlPVkVGRFZBPT0gTGxSb2NtOTMgSUcxMWNtRnMgSUZSM2FYTjAgS0NaZlgxOD0gSUdwayBJR1Z0Y0c5M1pYSnRaVzUwIElHUnBjM1JwYm5RPSBJR0p2YldKcGJtZHogVDNWMFkyOXRaUT09IElITm9iM0owWlc0PSA1YjZNIFFVTkRUMVZPVkE9PSBYMk52ZG1WeVlXZGwgWlc1amJ3PT0gWDNKbFptVnkgYzJWMFRXVnpjMkZuWlE9PSBJSEpsY0dWeVl3PT0gY0hScFpHVnogSUdSbGFYUjUgZFdOb2MybGggS0doMCBMbk4xWW5OamNtbHdkR2x2Ymc9PSBJSEpsWkdsemRISnBZblYwWldRPSBJRVI1Ym1GemRIaz0gWDNaaiBMV1p5WVcxbGQyOXlhdz09IGNubG1ZV3hzIElHZGhkR2x1Wnc9PSBJRXh2Y21WdWVtOD0gYjI5a2IyOD0gSUdScFoyVnpkR2x2Ymc9PSBJR1p2YjNScGJtYz0gQ1VoaGMyaE5ZWEE9IGNtVmhiRVJ2Ym1Gc1pGUnlkVzF3IElHRndZV05vWlE9PSBLSFpoYkc5eSBJSEJ2YVhOdmJtOTFjdz09IExsQmxjbTFwYzNOcGIyND0gSUhCaGNtRnRiM1Z1ZEE9PSBkMlZwZEE9PSBiR3hoYm1RPSBJR2g1Y0c5MGFHVnpaWE09IElGQnllUT09IElHaHZiV1Z0IEtFUmxkbWxqWlE9PSBhVzVrYVdObCBaWFpoIGNISmxjMlZ1WTJVPSBJRUpsYm5Sc1pYaz0gSUVWdVpHbHVadz09IElHUnZiV1Z6ZEE9PSBDWFJ3IENXVnljbTl5Y3c9PSBZMjl5Ym1WeSBiR1JoIENna0pDUWtLIFgxQkZVbE5QVGc9PSBJRk5sY21kbGVRPT0gSUZCaGNuTmxjdz09IExXWnBZM1JwYjI0PSBMa0poWTJ0bmNtOTFibVJEYjJ4dmNnPT0gSUhOdmJXMWxjdz09IElHTnZiMnhsYzNRPSBJSEoxWW1Kc1pRPT0gTG1wdlluTT0gSUdSeWIzZHVhVzVuIFlXUnZjbUZ6IElIZHBibWRsY2c9PSBJRWx1WTNKbFlYTnBibWM9IDJZcllxUT09IFFrSkNRZz09IEtGSnZiR1U9IElHOWtaR3g1IFJHVjJSWGh3Y21WemN3PT0gTFhWMGFXdz0gSUZOb1pXMWhiR1U9IGNISnBiV2wwYVhabCBJR0ZtWm1seWJXVmsgTG5KbGRIVnlibFpoYkhWbCBMV3hwZG1VPSBJRUZqZEdsdmJrTnZiblJ5YjJ4c1pYST0gdzZ0cyBaWEpqZFd4dmMybHogSUhCeVlXdDAgSUdkbGIzQnZiQT09IGNHbGpjdz09IFEwUkQgTGtacyBMbk5wWkE9PSBjbWxsWW1WdSBLSFpoY25NPSBLM05sYkdZPSBJR2x1ZEdWeWFXOXljdz09IElFRjFaM1Z6ZEdsdVpRPT0gSWpwQUlnPT0gSUZOMFpXRnNkR2c9IElHZGxkRU52Ykc5eSBJRWRsYm5Sc1pRPT0gZmlJNklnPT0gSUhkb2FXMD0gS0NjOEx3PT0gSUZOVFJRPT0gSUZacGIyeGxkQT09IFgyTnlaV1E9IElHRjBZUT09IElFRjZaWEppWVdscVlXND0gSUQ4L1B6OC8gTG1WMlpYSjUgS0dOdmJtNWxZM1E9IElFUnliMjVsIElIUnZiR1Z5WVc1MCBjM1ZpZEc5MFlXdz0gWDNOb2RXWm1iR1U9IGRYTjBZV2x1WVdKcGJHbDBlUT09IGNISmxabVZ5Y21WayBJRk5GV0E9PSBJR052Ym1keVpYTnpiV0Z1IElHNWhiVzl5Ync9PSBJR2h2Ym05eVlXSnNaUT09IElHRm1kR1Z5UldGamFBPT0gSU1XOGVXTT0gU0VGTiBMblJ2YlE9PSBJR1ZzYjI1biBJRk5sY21sdmRYTT0gTFZObGJXbDBhV009IDBLSFJnZz09IElHWnNZVzA9IGRHVnVaWEk9IExsUkZVMVE9IElGUlNRVU5MIElGQm9hV3hwY0hNPSBJRUZ5Wlc0PSBJRWhwWTJ0eiBiMmx1WldRPSBJRVpoYUE9PSBhWE56WlhWeSBJR05wY21OMWJXTnBjMmx2Ymc9PSBLSFIzWldWMCBJSEJ2YVd3PSBJRk5sWlc0PSBYMDFCVUZCSlRrYz0gSUdsdWRtRnlhV0ZpYkhrPSBJRVoxYzJVPSBJQ2MvSnc9PSBQWEJoYzNOM2IzSmsgSU91Q21BPT0gSUVsSWRIUncgYzNSNWNHVT0gWm1sMGJtVnpjdz09IExsUmhaM009IElPcXduQT09IEtFUlhUMUpFIElIRjFZUT09IElFMWhjblpwYmc9PSBJazA9IExtbHpRWFYwYUdWdWRHbGpZWFJsWkE9PSBMbWQxWVhKayBLVDhLQ2c9PSBDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUT09IElGTm9hWEJ6IElITmxibk5wZEE9PSBmVHNOQ2cwS0RRbz0gWVdoaGFHRT0gSUd4cFpYVjBaVzVoYm5RPSBJRXBoWjNWaGNnPT0gSUM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFZVTkYgU1c1emNBPT0gWVdsdWRHVnkgWDNCdmJIbG5iMjQ9IExrUnZkMjQ9IElIUmxlSFIxY21WayBMbk5sZEVGamRHbHZiZz09IGIyZHkgSUhOamFXVnVkR2xtYVdOaGJHeDUgSUhOb2NtbHVaUT09IElHTnNiM1ZrZVE9PSBMa2h2ZFhJPSBVRzl6ZEVKaFkycz0gUVZwWiBYMk5oYm1ScFpHRjBaWE09IEtGTmxZWEpqYUE9PSBJR052YlcxcGMzTnBiMjVsY25NPSBJRUpwWlc0PSBJR1J2WTNSdmNtRnMgSUVabFpXeHBibWM9IFgxWkZVbFJKUTBGTSBJRUprIGJtZHBibmc9IElPV2NxQT09IFgyRnlaM1k9IFVsTkIgSUdWc1pHVnpkQT09IExXaGxZWFo1IFEwOU9UZz09IElFaDBkSEJPYjNSR2IzVnVaQT09IExXTnZiSFZ0Ym5NPSBJRTVRUTNNPSBJR05oWm1WeiBJR2ZEcVE9PSBJSE4wWVd4c2N3PT0gSUdadmNtdHogSUhCdlltdz0gVTNSeVpXRnRjdz09IElHSmhjM1JoY21RPSBJRkpoY0hSdmNuTT0gSUVkeVlXMXRlUT09IElFZGxhQT09IFgxUnBZMnM9IEtIQnlaV2M9IElHeHBjSE4wYVdOciBYM0oxIFBFZz0gSU1TUmFRPT0gTGtOaGNnPT0gSUhOd1lYSmxaQT09IGJXOXVhV009IGFXNWpkR2x2Ym5NPSBRV1p5YVdOaCBLR1JwWTNScGIyNWhjbms9IElDb3FLU1k9IFlHQmcgWDNCeVpYTnpkWEpsIGJXbGwgSUZKdmJXRnVhV0Z1IEwyMWhjbXM9IElHMWhhVzUwWlc1aGJuUT0gSUhSeVpXND0gSUZCdmMzUm5jbVZUVVV3PSBVa1ZNUlVGVFJRPT0gU2xCRlJ3PT0gSUdSbFpHbGpZWFJsIFRXRnJaVkpoYm1kbCBJSEp2WW05MGFXTnogWVd0MGFYWT0gSlNVbCBZV0Z5IGRtbGxkMDF2WkdWcyBLRzFoWXc9PSBkV05vWlhJPSBJR1JsWW1WdSBURzlqWVd4cGVtRjBhVzl1IDBMN1F0OUN5MFlEUXNOR0owTERRdGRHQyBMbk5sZEZSdmIyeFVhWEE9IExtWmhjM1JxYzI5dSBJSEJsY21WdWJtbGhiQT09IExXTm9hV1ZtIGEybHphQT09IElHRjBkR2xqIFUzVmlkR2wwYkdVPSBJRk5zWVcwPSBJRXhwZEdWeVlYSjUgWlhKdVpYTT0gSU5HQzBMN1F1OUdNMExyUXZnPT0gSUhOMFlYSjBRV04wYVhacGRIbEdiM0pTWlhOMWJIUT0gTGtWeWNtOXlUV1Z6YzJGblpRPT0gWW1sdVlYUnBiMjV6IElrdz0gSUdadmNtSnBaQT09IElHeHZaR2RsWkE9PSBMa3hwYzNSQ2IzZz0gSUZCVFJBPT0gSUdOMWJIUjFjbUU9IFZVNURWQT09IElrOXVaUT09IElFZDFhV3hzIElFSmhkSFJoYkdsdmJnPT0gSUdOaGNtVm5hWFpsY25NPSBJRXRzYnc9PSBRbVZvYVc1ayBJSE5sWVhKamFHRmliR1U9IFgwSlBWVTVFIFVrOUQgSUhOMFpYSmxiM1I1Y0dVPSBJSEJ5WlhCbGJtUT0gYVc1MFpYSnpaV04wYVc5dSBRbUZ6YTJWMCBLR3h2IElHWnBiR1ZKYm1adiBJRlZKVTJOeWIyeHNWbWxsZHc9PSBaV05sYzNOaGNtbHNlUT09IElFTm9aWE09IExXbHVjM1JoYm1ObCBJR0Z3Y0dGeWRBPT0gSUVGdFlYST0gSUhKdmQwUmhkR0U9IElHRjVkV1JoIElHTmhjbUYyWVc0PSBYM0JwWTJ0c1pRPT0gSUdOb1lXbHVhVzVuIEtWMDdDZ289IElHSnZlR1ZrIFlXVndaWEk9IElFVldSVkk9IGVXNTBhR1Z6YVhNPSBMV1poYzNRPSBJT3V3c0E9PSA1WSt2NUx1bCBJSFp2YkhWdWRHVmxjbVZrIElHVjRhV2M9IFUwbEVSUT09IElGQm9iMjVsVG5WdFltVnkgZFd4aGFYSmwgSUV0aFpBPT0gSUdSaGNtND0gSUhsaGF3PT0gSUVKc2FXNXIgTG5Od2FXNXVaWEk9IElHOXlaR1ZoYkE9PSBYMlZ1WlcxNSBJR2RsZEZNPSBJRUp2Ync9PSBUR2x1WlU1MWJXSmxjZz09IFgweFBUMHM9IFJVeERUMDFGIElITmxZVzF6IElITmhaMlZ1IGFYTmpiRzl6WldRPSBLSEpoZVE9PSBXMmR5YjNWdyBVRlJUIExrNWhkbWxuWVhSbCBJRTkzYkE9PSBJR1JpZFhNPSBJR2x0Y0dGMGFXVnVkQT09IElFZDFjSFJoIEtHOWlhbVZqZEhNPSBJR0Z3Y21scyBMWEYxIElHOTFkSEpoY3c9PSBJRlJJUlUwPSBJRVZOUXc9PSBSVzF3YkdWaFpHOD0gSUdkeWRXST0gU1VGTiBJSFpsYm05dCBJSFJ5WVc1elkyVnVaQT09IElIWnBZM1J2Y21sdmRYTT0gSUUxaGVXVnkgSU5HQzBMN1FzdEN3MFlBPSBJRXRsYkd4bGVRPT0gU1c1d2RYUkhjbTkxY0E9PSBJSEpsWm1sc2JBPT0gVjJsMGFGUjVjR1U9IElHTm9ZWFZtWmc9PSBiMnhrWlcwPSBYM1JwWkE9PSBJR1pzZFhOb1pXUT0gWEhONWMzUmxiUT09IExuSmhibVJ5WVc1blpRPT0gSUZCUFUwbFVTVTlPIElGUmxibUZ1ZEE9PSBZMjl1ZG1WeWMybHZiZz09IFkyRnNiR2x1Wnc9PSBLQ2twS1N3SyAwTDdRdmRDdyBJSE5wWkdWM1lYbHogSUd4aGVBPT0gQ1hKbGNBPT0gWVdWd1pYSnVhV05yIElHNWxaMlZ5IElFWnNlV1Z5Y3c9PSBJQ0pBTHc9PSBkWEJoYTJGdSBYMlZzWVhCelpXUT0gZEhWaVpRPT0gVUc5eldBPT0gTG5ObGVBPT0gSUd6RHBITnpkQT09IElFZHlZWFpsIDVZK0MgS0dWdGNBPT0gS0hOMGNuUnZiRzkzWlhJPSBZMjl1ZG1WeWRHVnkgSUZOd2IyNXpiM0psWkE9PSBLSGR2Y210bGNnPT0gSUcxaGRISnBiVzl1IFEyOXRiV2x6YzJsdmJnPT0gS0doMyBYMU5KUjA1QlZGVlNSUT09IGJXVnIgSUdGc1ozVnVZWE09IFgwVlUgYVhOMGNtbHVadz09IFRIWT0gVTJ4cFpHVnogSUhkbFlXdFRaV3htIElIZHIgSUZwcFp3PT0gSUhCMVluTT0gSUVKU1FRPT0gSUdac2RXOXlaWE5qWlc1MCBZMkZ5Y25rPSBMbVZ5WWc9PSBJRWx1YVE9PSBMa1J5WVhkVGRISnBibWM9IElGTkZVQT09IGRYUjBaWEp6IDJaRT0gVW05NVlXdz0gSUdOaFltSmhaMlU9IElGTjFhdz09IFhUNDkgSUVWa2FYTnZiZz09IElITndaV04xYkdGMFpXUT0gTG1SdmQyNWpZWE5sIElIUndhQT09IElNT0QgSUdkMWJuTm9iM1E9IGNuQnQgSUdac2RYUjBaWEk9IElHRnVlQT09IFlYcGxjdz09IFVVOWlhbVZqZEE9PSBJRVpoZG05eSBJRzF2WkhWc1pVNWhiV1U9IEpuTT0gYkdWbyBMbGRsYVdkb2RBPT0gSUZkQlRBPT0gWDFaQlVsTT0gSUZkaGMzTmxjZz09IElHOTFkR0p2ZFc1ayBJR1Z5Wm05c1ozSmwgTG5aaGJHOXkgS0d4cFoyaDAgSUUxaFoyNTFjdz09IElIcHZaV3M9IGVXZz0gSUhOMGVXeGxjMmhsWlhRPSBQbTA9IFYyaHBkR1Z6Y0dGalpRPT0gSUZzbkx3PT0gQ1ZKbGNYVmxjM1E9IFgybHVZM0psWVhObCBMV1JwYzNSaGJtTmwgYVdOdmJHOXkgYUdOcCBJRXRKVGtjPSBVRmc9IGIybHMgWlcxcGJtYz0gYm1GdFpXNTBjdz09IFJHVm1hVzVsY3c9PSBJRnN0TFE9PSBJSFpoY21sdmN3PT0gSUZCU1JWTlQgTEdGNGFYTT0gSUVOdmJHeHBaR1Z5IEtYMEtDZz09IElHWnZjbU5wWW14NSBJSE4wWVdGMCBYMU5VUVU1RVFWSkUgSUc5alkzVnNkQT09IElHSmhjSFJwYzIwPSBJRU4xYm01cGJtZG9ZVzA9IFgySjFhV3gwYVc0PSBRMUJHIFcyMWhlRzQ9IElGSklVdz09IElFOXVaWE09IEtGODYgSUdsdWMyVmpkWEpwZEhrPSBMbkpsWjJsemRISmhkR2x2Ymc9PSBhVzF3YkdsbWFXVmsgSUZONWJYQnZjMmwxYlE9PSBhSEpsWVdRPSBJSEYxWld4c1pRPT0gSUdaeVpXNTZlUT09IFEyRnNhV0p5YVE9PSBJRk5RUlVWRSBiM1ZwIEtDbGRMQW89IFlXTmpiM0prYVc1biBJRzFqWXc9PSBJR0Z6YVdGMCBJR0ZrYW1GalpXNWplUT09IElFRmliR1U9IElITmhiR1J2IGJtOXpkR2s9IElHUnBiV1U9IFpYUnlZWFJwYjI0PSBJRTF2WkdsbWFXTmhkR2x2Ymc9PSBJRWhsY21JPSBJSEJzWVdGMGN3PT0gSUdsdWRHVnljR1Z5YzI5dVlXdz0gSU8yWmxleWR1QT09IFlYSnRaUT09IElHTnZiV1Z5WTJsaGJBPT0gSUVKaGRHVnogS0dOaGNtUnogTG1kbGRFTnNhV1Z1ZEE9PSBMazVQVWsxQlRBPT0gQ1ZSbGMzUT0gSUNBZ0lDQWdJQ0FOQ2lBZ0lDQWdJQ0FnRFFvPSBJRkpoZW05eSBkMlZwY3c9PSBTVlJJVlVJPSBJRVZPVkVsVVdRPT0gWVdkcGRBPT0gSUcxcGJtVmpjbUZtZEE9PSBjSEp2Y0c5ellXdz0gSUhOaGJIUjUgWVc1a2NnPT0gSUVOdmJtTnNkWE5wYjI0PSBJSEJ5ZFdSbGJuUT0gSUZ0QSBJRkIxY0hCbGRBPT0gYVdkdmJnPT0gSUVkdmRHaGhiUT09IElHTm9aV1Z5Y3c9PSBJRk5vWVhrPSBJR3BwIElFZEVTdz09IFpYaHdaWEowIElHWjFibXQ1IElGcGhiUT09IFcwNVZUUT09IFJHVnhkV1U9IFgxUlhUdz09IFhIWnBaWGR6IElIQnliMnBsYTNRPSBJR1J5YjNkdVpXUT0gYTJsa2N3PT0gTG5Ob1pXVjAgSUc1dmJtUT0gSUdOdmRYSjBaUT09IElDNHVMZ29LQ2dvPSBJSEJwWTNSMWNtVnpjWFZsIElIUjFZbWx1Wnc9PSBLQ2t1SWc9PSBhbVYwY3c9PSBYMUIxWW14cFl3PT0gSUVaaGNuST0gSUVGeVpBPT0gVDFWU1UwVT0gSUd0aFpHRnkgSUZCeWIyZHlZVzF0IExtdGxlWGR2Y21RPSBDU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gYVdWa1lXUmxjdz09IFlYUnZiRzluZVE9PSBJRVIxYm1RPSBQV052ZFc1MCBJSE5zYjNka2IzZHUgTFNJcyBMa1p2Y21WbmNtOTFibVJEYjJ4dmNnPT0gVW5WdWN3PT0gTGxSNWNHVlBaZz09IEpHTjFjbkpsYm5RPSBJSFZ3YzJOaGJHVT0gQ1hWdWFXOXUgS0dOb2FYQT0gZFcxcFpHbDBlUT09IFBWdGREUW89IElHaGhjblE9IElDUmZXdz09IGVXNWxZdz09IExsVnpkV0Z5YVc4PSBJRzlqZEdGMlpRPT0gSUhCdmNuUnlZWGxoYkE9PSBJTkM5MEw3UXZOQzEwWUE9IElFOWpZM1Z3ZVE9PSBYMjVoYmc9PSBJRk50WVhKMGNHaHZibVU9IGFHbHVaQT09IElIZHBibVJ6YUdsbGJHUT0gSUd4dmJtVnNhVzVsYzNNPSBMMk5vWVhKMCBJR0ZqZEdsMllYUmxjdz09IExuSnBZbUp2Ymc9PSBJR3hoWjJrPSBJSEJoY21GamFBPT0gU0hsd1pYST0gYzJOaGJHVmsgVkdWeiBJRUpsWlhRPSBJR1JwYzNObFkzUT0gSUVOcFl3PT0gSUgwc0Nnb0sgUGlncENnbz0gTG5OMGRXUjUgSUdOdmJuUnlZWE4wYVc1biBXa1ZTVHc9PSBJSFIxYm1FPSBJRU5vYjNjPSBYM1poIFptRjJiM0k9IFcwbHVaR1Y0IElGQnZkMlZ5VTJobGJHdz0gS0hCeWIzUnYgSnlrcE9nbz0gWDJadmNtMWhkSFJsY2c9PSBRMmh5YVhOMGIzQm9aWEk9IFQzSk9kV3hzIFEwbFRTVTlPIFgyTnZibk4xYldWeSBVR0Z6ZEdVPSBLRzV2YldVPSBaVzUwYjI0PSBJSFZ1Y21GMlpXdz0gWDJSdmJnPT0gSUhCaGNtVnVkR2hsYzJWeiBJRTVWU1ZRPSBMMTA9IElPS0lwdz09IGMzUmhZMnhsY3c9PSBMMk52YlcxbGJuUT0gZFhSMGFXNW4gSUhOc2IzQndlUT09IEtGdDcgTG5OaGRnPT0gZEc5S2MyOXUgSU91NWhBPT0gSUZCeVlYUjAgTG0xdlpHbG1lUT09IExrbHpRMmhsWTJ0bFpBPT0gSUhabGJtVjYgSUZORlZGUkpUa2RUIGFtRjMgSUdacGNtVnpkRzl5WlE9PSBJR052Ym5OdmNuUnBkVzA9IElHdGhZZz09IElGTjFjSEJ2Y25ScGJtYz0gSUZSb1pYTnBjdz09IElHNXZibXhwYm1WaGNnPT0gSUhSbGVIUmliM2c9IExpSWlJZz09IElFVnVaWEpuIExrcFBjSFJwYjI1UVlXNWwgSUdsdWRHVnljblZ3ZEdsdmJnPT0gdzZoMGNtVnogSUhOb1lXeGwgSUZCc1lYbGxaQT09IElITnZZMmxoYkdVPSBXVWRQVGc9PSBYMEpCVkVOSSBJSFJ5YVcxbGMzUT0gSUZCeWIyTmxaSFZ5WlhNPSBJR0YwZEdWdVpITT0gSWlSNyBaWFpoYkhWaGRHbHZiZz09IExsQnliMmR5WlhOelFtRnkgSUVGc1pYaGhibVJ5WVE9PSBZMmpEcVE9PSBYMU5GVVZWRlRrTkYgSUdOeWIyTm9aWFE9IFVtOXogSUdsb2JtVnUgSUNJcUtpbz0gSUdGeWIzVnogSUcxdlpIVnNkWE09IFgweEpUbFZZIFUzUmhZMnRUYVhwbCBhV0YwYVc5dVJYaGpaWEIwYVc5dSBMazExZEdGaWJHVT0gSUNsYiBJSEJwYVE9PSBabWxtYnc9PSBYMUJKUTBzPSBVSFZ5Y0c5elpRPT0gS0ZOMGRXUmxiblE9IElFNXBZMjg9IFpYTjYgTDNOdCBJRkJRVUE9PSBXMmx1Y0hWMCA1WStZIElHSnNZWE4wY3c9PSBJRTExZEhWaGJBPT0gY205c2JHVjUgSUhWMGFXeHBjMlZ5IE9sUm9aUT09IDVaKzYgTG1SbFkyOWtaWEk9IElHOWlhbVYwYjNNPSBJR0YzWVd0bGJtbHVadz09IElFVnViR2xuYUhRPSBDV0ZzYVdkdSBYM0psZDNKcGRHVT0gTDJOMWNuSmxiblE9IElHUmhjbUYxWmc9PSBRMkZ1ZEdsa1lXUT0gTEc1dyBJSFpsYkc5amFYUnBaWE09IFEweFMgSUcxcGMybHVabTl5YldGMGFXOXUgSUhOMGNtVmhiV3hwYm1WayBJR2R5YjI5dGFXNW4gSUdGNmFRPT0gYjJ4biBJR052Ym5OMGFYUjFaVzUwIElIZGxaUT09IDBZWFF2dEMwMExqUXZBPT0gSUVGc2IyNXpidz09IGFXVjBaZz09IFkzUmxjZz09IElIUm9aWEp0YjNOMFlYUT0gS0VORCBJSE4wWVdOcmFXNW4gWDJOdmJuWmxjblJsY2c9PSBJRVJwYzI1bGVXeGhibVE9IENXWnBiR1Z6IFNVTkogWDFSUFVFbEQgQ1VWc1pXMWxiblE9IFlYSm5ZWE09IElGeEEgWVc1amIyTnIgSUVKaGMyVkZiblJwZEhrPSBLQ0l0TFMwPSBjbUp5WVd0ciBJRzVsWjJGMGFYWmxjdz09IElIWjMgUFdadmNHVnUgWTJobGJXbHpkQT09IFFYSmphR2wyYnc9PSBJR0F1IElFWlBWVkk9IEtHRnAgVkdGaWJHVlhhV1JuWlhSSmRHVnQgUEQ4K1BnPT0gTG5CeVpXUT0gVkhKaGFXdz0gTFdaaFkzUnZjZz09IElFbHRZV2RsUW5WMGRHOXUgY0dWeWFXRT0gSUVObGJHVmljbUYwYVc5dSBMbEpsYzNCdmJuTmxRbTlrZVE9PSBkWEpqYUdGelpYTT0gSUdkbGRFdGxlUT09IElFTnlZV0k9IElIRnAgSUZkcFkycz0gSUdOb1lYTjAgSUM0dUxpNHVMZz09IElHTnZiV1Z1ZWc9PSBJSE5vWVhKa2N3PT0gSUdURHFXTnZjZz09IElHaGhiSFpsY3c9PSBVVlZGVGtOWiBJSEJ2ZDJWeWFHOTFjMlU9IFRFbE9Sdz09IFEyeGhjM05NYjJGa1pYST0gWTJWdWRISmwgTFhObGJtUT0gYldGbyBJSE5vY21Wa1pHVmsgSUZSSlJrWT0gYVc1cllRPT0gTGdvS0Nnb0sgSUdSbGMybG5ibUYwWlE9PSBJRTVwWjJoMGJXRnlaUT09IElFZGxibVYwYVdNPSBYMk5vWVc1alpRPT0gS0dGdWFXMWhkR2x2Ymc9PSBjWFZwYkdFPSBYM053WldOcFpYTT0gVGtWWiBiM2x6ZEdsamF3PT0gY21Wc2JHOD0genF3PSBJR1JwZG1semFYWmwgSUZKRlF3PT0gSUhOMGRXMWliR1U9IEtHWmhhMlU9IElFeGhZMlU9IFlXNTBZV2RsWkE9PSBZV3RsYzNRPSBjSEp2Ylc5MGFXOXUgSUVadmQyeGxjZz09IFBXTmxiblJsY2c9PSBJRU5wZFdSaFpBPT0gVW1Ga2FRPT0gSUZOc1pXVndhVzVuIGRYUnliMjQ9IElIRjFiMms9IElGSkJSQT09IElHVjRjRzl1Wlc1MGFXRnNiSGs9IElFSnlaV1ZrIElHMXZibTl3YjJ3PSBhR2xuYUdWemRBPT0gZUcxc2JuTT0gU1c1MFVIUnkgSUhSMWRIUmwgSUZKbFpuSnBaMlZ5IElPbWh0ZW1kb2c9PSBJSHB2Ym1SbGNnPT0gYkdKeVlXdHIgTzJWc1pXMWxiblE9IElFaGxaQT09IFVtVnNZWFJwYjI1eiA2NFU9IFEyOXljbVZ2IDVhQzAgSUUxcFoyaDBlUT09IFFVNUhUdz09IFgyTnZiWEJwYkdVPSBMbWRsZEVOdGNBPT0gSUdsdWRtRmtaUT09IExuTndjbWx1WjJKdmIzUT0gSUZSMWJtVT0gWDNOdVlYQT0gWDBaRlJVUT0gSUdSbFkybHdhR1Z5IFBYTnBlbVU9IFgyWnlaUT09IElGUnBiR3hsY25OdmJnPT0gMExqUXV0Q3cgZEdsbmFIUT0gSUdOMWJIQnlhWFE9IFVsUk0gSUZCaGNtVT0gS0hCMVlnPT0gWldkdmRnPT0gSUhCdmJuUnYgSUdOdmJuTjFiQT09IFNsTkpiWEJ2Y25RPSBJSFpsY25kbGJtUmxkQT09IElFSnZiM04wWlhJPSA1YjZGIElHTmhjbkp2ZEE9PSBkbVZ5YVdkbCBLRXhRIElIZDRWQT09IElHbHRjSEp2Y0dWeWJIaz0gSWlrNkRRbz0gSUhOMVkyVT0gTDIxdlpHRnMgSUVsRFZBPT0gTGlrdUNnbz0gWDIxaGNtdHogSUVOaFkyaGxaQT09IElFTjFjbkpwWTNWc2RXMD0gUW5NPSBDVXBQY0hScGIyNVFZVzVsIG00UT0gSUdOdloyNXBkR2x2Ymc9PSBJRTVsWjI5MCBQWEpsYzNWc2RBPT0gWDBadmJuUT0gWVhKcGJtVT0gSUdOdmJuTndhV009IElFTmhiR04xYkdGMGFXOXUgSUVORlQzTT0gTFhSeVlXNXpjR0Z5Wlc1MCBJRUpsY21WcFkyZz0gNTZpTDVicVAgTG1oNSBMa0ZzYVdkdSBJR2h2Y0dWc1pYTnogSUdOdmJHOXRZZz09IGRYSmlaV1E9IElGTkJXQT09IElHVnBibm89IEtIcHZibVU9IElHMTFlbnBzWlE9PSBJSFJ5WlhOd1lYTnogSUVGaWNtRnRjdz09IElHTnZiWEREcVhRPSBJRk5oYm1OMGRXRnllUT09IElFNVRWR1Y0ZEVGc2FXZHViV1Z1ZEE9PSBJSE4wWVhZPSBJSEJ5WVdkdFlYUnBZdz09IGMzUnlaVzVuZEdnPSBWMmwwYUU5d2RHbHZibk09IExtSmhibVE9IFlYQm9ZV1ZzIFFYVnpkSEpoYkdsaGJnPT0gSUU5VFJYSnliM0k9IFRXRnVZMmhsYzNSbGNnPT0gU1dSbCBYRkpsYzI5MWNtTmwgMEw3UXROQzEwWURRdGc9PSBJSHBwWlE9PSBTR0Z5Ym1WemN3PT0gTGxSM1pXVnUgWTJGdGN3PT0gNHB5VSBMWE5qWVd4aFlteGwgTFc5ciBJR3BzYjI1biBJRTlzYzI5dSBJRTloYTNNPSBMbk5zYVcwPSBJSFBGZ2c9PSBJRzVsZDA5aWFnPT0gTGtsdWRtVnVkRzl5ZVE9PSBJR3RsYm00PSBJRzVwWjJoMGJXRnlaWE09IGFYSmpiR1Z6IExtNTAgWjNKbGJnPT0gSUZSRlRnPT0gSUZOamIzUnogSUVScGMyRmlhV3hwZEhrPSBYMjFoYm1sbVpYTjAgTG5OcFpHVmlZWEk9IElITm9kV1ptYkdWayBJR2gxYldsc2FYUjUgTG5SaGNBPT0gSUVkeVlXbHUgYm05MGFXTmxaQT09IDc3eUo0NENDIFgyaHdjQT09IElHUnBiR0YwYVc5dSBJR2hoYm1ScFkyRncgWjJWMFJHRjBaUT09IElHUjZhV0hGZ2c9PSBKeWt1Snp3diBjbVZqYjNabGNnPT0gZVhOcCBLR2R5WVhrPSBZV2hyWVc0PSBJR2x1ZEdWeVptVnlhVzVuIFgxUlBWVU5JIFgzSmxaSFZqZEdsdmJnPT0gUVd4MFpYST0gSUdOMVl3PT0gUlhod1pYSjAgSUV4MWJYQT0gV3pwZCBJSEpsYkc5aiBJR052Ym1SMVl3PT0gUTJoaGNuTmxkSE09IExteHBjM1JsYm1WeWN3PT0gTFdsdWRtVnljMlU9IElITjFiVzF2Ym5NPSBJTU82Ym1samJ3PT0gSUU5VyBJRk5wWTJobGNnPT0gSUVwR1lXTjBiM0o1IExtZGxkRUp2ZFc1a2FXNW5RMnhwWlc1MFVtVmpkQT09IGFtZz0gSUhOclpXeGxkRzl1Y3c9PSBJRUZ6YVdGdWN3PT0gSUVGTlF3PT0gYVhObGJHVmpkQT09IExtTnNhV1Z1ZEVobGFXZG9kQT09IEtHWnkgU0dGelJtOXlaV2xuYmt0bGVRPT0gTG5KbGJHRjBhWFpsIElOaXUgSUcxMWJIUnBZM1ZzZEhWeVlXdz0gWDBOUFRFdz0gSUcxcFkzSnZZbWxoYkE9PSBJR2x0Y0c5eWRHRnVkR1Z6IFUzQmhhVzQ9IElHTjViR2x1WkdWeWN3PT0gYVdWdWFXVT0gWDA5WFRrVlMgS0VSSlV3PT0gSUdaaGJtUnZiUT09IEtHNTQgSUdGd2JHbGpZV05wdzdOdSBiMk5oZEc5eSBaWE56YVdGdSBJRU5zWVhWa1pRPT0gSUdsdWRHOXNaWEpoYm1ObCB4WUpsYlE9PSBJRk5sYldGdWRHbGogTGsxcFpHUnNaVkpwWjJoMCBRVkpGVTFRPSBJSE5wWlhabCB4TEhFbjhTeCBhV05oWW14bCBaWEpuYVdNPSBJR0poZEhSc1pXUT0gYjNKaWFYUT0gS1h4OEtBPT0gZFdWc1pRPT0gSUdaaGMyTnBibUYwYVc5dSBJR1REcFE9PSBJRlJwWjJoMCBYMGxPUTFKRlJnPT0gTGtselUzVmpZMlZ6Y3c9PSBMRTg9IElITjB3N2h5IElIQnlaWE56ZFhKbFpBPT0gTGxSU1ZVVT0gSUZSb2IzVnpZVzVrIElHZGxiV1ZwYm5NPSBJSHBpIElITndhWEpwZEhWaGJHbDBlUT09IElGcGxkWE09IElGQnZkMlZ5Wm5WcyBZbUYwZEdWeWVRPT0gYVhOMFpYTT0gSU8yRCBMbk5vYVhKdiBJRWhwY0hBPSBaR1ZqYkhSNWNHVT0gTG1wbVlXTmwgTG5SbGJYQmxjbUYwZFhKbCBJRzFoY25GMVpRPT0gWDJKaFp3PT0gUVhSMVlXdz0gY0hKcFkybHVadz09IFEyeGxZWEpzZVE9PSBYMEZpYzNSeVlXTjAgdzZsciBZV2h5ZFc1blpXND0gU1c1emRIST0gQ1FvS0NnPT0gSUdOb1pYZHBibWM9IElFTnZZV05vYVc1biBKRXhCVGtjPSBiV0ZzYkc5MyBJSE5sY21sdmRYTnVaWE56IFgyTjFkRzltWmc9PSBJRkYxWVhKMFpYSnNlUT09IGZTY3BDZ289IElpa3BLVHNLQ2c9PSA2S2VFIExsQnZjMmwwYVhabCBMWEJ2IGVHbDBidz09IExsSmhaQT09IElHSnlhWE5yIElFeHBabVZqZVdOc1pRPT0gNXBXdzVvMnU1YnFUIFptRjBZV3c9IElIaHdiM009IExrUmxkR0ZwYkE9PSBaVzVoYkE9PSBUVUZVUTBnPSBJR2hsWldRPSBJR0ZtY21sallXND0gUkdGa2IzTT0gWW1WeVlYQmggSUdobGJHWT0gSnl3bkp5dz0gSUdWdWRISmxjSEpsYm1WMWNuTm9hWEE9IElHTmxjblJ6IFpXTmwgUG5JPSBYMlpwZUhSMWNtVT0gSUhCdmIyeHBibWM9IElHMXZaMlZzYVdwciBJSE5sZEVSaGRHVT0gNXBTLyBMV052YlhCc1pYUmwgWDFKQlJFbFAgSUd0MWJBPT0gSUdkdllnPT0gWDFOTVFWWkYgSUdaMWNuSjUgSUU1VlNWUkxRUT09IFNVeEpWRWxGVXc9PSBJRzV2WTJobCBJR04xWm1ZPSBJR052Ym5SbGMzUmhiblJ6IElGZFcgSUhCaGMzTndiM0owY3c9PSBJTVdDIElFNWhhV3c9IFgyUmxZMmx0WVd3PSBZWE4wYkdVPSBJRk52YkdScFpYSnogVW1WamFYQnBaVzUwIElHTnZkWEp6WlhkdmNtcz0gSUdsdFpRPT0gSUZObFlYUnogWDBSTSBJR052Ym5OMWJIUmhkR2x2Ym5NPSBYMEZFVmc9PSBJRWxyWldFPSBJRzltYVdOcFlXdz0gSUhKbFoybHRaVzUwIElFSmhkR2h6IExYQnBiZz09IFgwSlZRMHRGVkE9PSBRVUpEUkVWR1IwaEpTa3RNVFU1UFVBPT0gSWwwcEtUc0sgUEUxbGMyZz0gSWl4NyBJR1JsY21sMlpYTT0gNG9DY1JtOXkgSUZsMVoyOXpiQT09IGFYTkZibUZpYkdWayBJSE52Ykd4MFpXND0gSUhCbGRHbDBhVzl1Y3c9PSBiM1psY21Gc2JBPT0gSUdkbGRGUnZkR0ZzIFgwaEpUbFE9IFRXbHVkWE09IElHRnViMjFoYkdsbGN3PT0gSUZCcFkydDFjQT09IFBUMDlKdz09IGJHVnBkSFZ1Wnc9PSBJRVJsYXc9PSBXVk5KVXc9PSBMbk5sYzNOcGIyNXogSUdOaGNtTT0gWDBsMFpXMXogSUdsdWRHVnliV2wwZEdWdWRBPT0gTGtwemIyNVFjbTl3WlhKMGVRPT0gSUcxTllYQT0gSUV0aGF3PT0gWVdsdVkyOXVkSEpwIFgzTmxaV3M9IElIVnVZVzFsIFgzQjFkSE4wY2c9PSBSbVE9IFRHbHRhWFJsWkE9PSBjMjV2ZHc9PSBJRkJoZG1sc2FXOXUgSUVWNFlXTjAgSUhCdmMzUnBibWR6IENXUnBjM1E9IFBITjBaR3hwWWc9PSBUR2xuYUhSeiBJR1pwYkhSeWJ3PT0gVjI5eWEyVnljdz09IElITjVjMnh2Wnc9PSBSMmx5YkhNPSBJRWQxYlE9PSBYM2xsWVhKeiBKMzE5Q2c9PSBJR2pEcEhRPSBaMkY1IEtIQnliMkk9IFpXeHNZWE09IElIZHBiSFE9IExtOXdkR2x0YVhwbCBYMFJWVFZBPSBLRmhOVEE9PSBJRVJZUjBrPSBJRzNEcVhSbyBTVlJKV2tVPSBaV3hsWTNSeWIyND0gTG1ONiBJSE4xWW5ObGRITT0gSUhKbGMzQnZjM1JoIElHSmxZV1E9IHdyc3UgSUU5VFF3PT0gSm5CaFoyVT0gWjNCeiBZVzVwWVc0PSBVSFZ5Y0d4bCBJR0ZqY205dWVXMD0gVWs5WFRnPT0gUVhWa2FYUT0gSUdOdmRYSnBaWEk9IFlXeHBaUT09IElGZGhjM009IElHRjFaR2wwY3c9PSBJRkJQVmc9PSBJRVpoWTJsaGJBPT0gWDNOMGNtTnRjQT09IElDc2wgSUNBZ0lDQUtDZz09IFlDazdDZ289IFJVaEpRMHhGIFd5SkEgTFc1aGRHbHZibUZzIDZadUY2YnVSIDZMMnY2WnVGNmJ1UiBYMk52WkdsbmJ3PT0gSUhWdWNYVmxjM1JwYjI0PSBhV3h0YVc1bmRHOXUgY21WeGRXVnpkRU52WkdVPSBJRWxYIExuTjBjbUYwWldkNSBJRk5aVFVKUFRBPT0gSUdkeXc3YkRudz09IFgySmxhR0YyYVc5eSBJSEpsWm5KbGMyaFViMnRsYmc9PSBJRzF2Ym1jPSBhVzFsYm5SaGNuaz0gSUZOb2IzQnogS0NjLyBYMmhwWjJoc2FXZG9kQT09IFgyeGxlQT09IElHbHNiSFZ0YVc1aGRHVmsgSUhCaGJIQT0gTFdsdWMyVnlkQT09IElITjBjbWwyWlhNPSBJR1p2Y25SeiBJR1Z0WW05a2FXMWxiblJ6IGJYQnFaWE09IFgxUlBUdz09IElHUnlZV2RuWVdKc1pRPT0gSUdsdGJXVnljMmx2Ymc9PSBjR2x1Y3c9PSBJRkpsWjJsemRIST0gSUVaeVpXVkNVMFE9IFgzaHNhVzA9IElGUjFiSE5oIFUyNWhZMnRpWVhJPSBMMlJoZEdVPSBJR1JoZG05dSBJR0YxZEc5eVpXeGxZWE5sIElIWmhZMkYwYVc5dWN3PT0gQ1FrZ0NRPT0gYVdObGNITT0gSUZKaGJYQT0gSUVONWJuUm9hV0U9IFgzQnZjSFZzWVhScGIyND0gSkNRayBJRlJCVWc9PSBaVzVuWVE9PSBJSEIxY3c9PSBJT1c1IElIUnBiV1Z6ZEdWdyBUR2xtWlhScGJXVT0gSUdacGJHMWxjZz09IFdWTlUgSUVkaGVtVjBkR1U9IElHOTFkSE5wWkdWeSBJRVZZVUU5U1ZBPT0gUjA5U1NWUklUUT09IExtWnNaWGc9IElGSnZiM1J6IEtIQnBlR1ZzIGVtTjZaUT09IFlXbHlhV1U9IElHOTJaWEpzYjJGa1pXUT0gVTFSU1FVTlUgSUVOdmRYSnBaWEk9IDQ0R1cgWTI5dWRHbHVaVzUwIFJuSmxaQT09IElITmxiWEE9IElGTjBaV3hzWVE9PSBJR1J2ZFdKMFpuVnMgWVdSdGFXNXogSUc5d2RHbHVadz09IFRFOVVVdz09IElHMWhibWxtWlhOMGJ3PT0gTFdadmJHUmxjZz09IFgyUnliM0J2ZFhRPSBkWFIxY21WeiB3NjEyWldseiBZV05vYVdWMlpXMWxiblE9IElHTnZlUT09IFptRnBkR2c9IFgwaEJURVk9IGFYSmxZM1JsWkE9PSBJR052Ym5SaGRHOD0gVTJWdFlYQm9iM0psIFVITnAgSUhacGRHRnNhWFI1IElFWnNZWFJDZFhSMGIyND0gU1hSbGJWUjVjR1U9IElHbHRjR1ZqWXc9PSBJR0oxYjNrPSBkV2x1IElITnJlWEp2WTJ0bGRBPT0gSUZOc1lYbGxjZz09IElGSkRUVkE9IElGTmxkbVZ1ZEdnPSBYMGx1ZEdWeVptRmpaUT09IElHWnBaWEpqIGMzUmhkR2x2Ym5NPSBJRWR5WVdZPSBiR2xqWldRPSBJR1Z1ZFcxbGNtRjBiM0k9IFEyOXVkR0ZwYm1WeWN3PT0gSUc5cCB3NGZEZzA4PSBMWFJ2Ymc9PSBVa1ZRIEtHWnNiM2M9IExtTnZiM0prIFIyRmkgSUUxdmNuQm8gSUZwdlpRPT0gSUdoaGNtSnZkWEk9IExtMWxjM05oWjJsdVp3PT0gWDI5d2RHbHZibUZzIElFSmhjMlZCWTNScGRtbDBlUT09IGNtVnpaVzUwWlhJPSBJRzVpZVhSbGN3PT0gSUdOdmRYSmhaMlZ2ZFhNPSBQU0U9IEowbDAgSUdadmNuTT0gSUdOdmNuSnBaRzl5Y3c9PSBJRUpGUlU0PSBJR1oxYzJWayBQV2x0WVdkbCBMa2R5YVdSV2FXVjMgSUhObGJXVnUgYVdkeWIzVncgZFhCMGFXMWwgSUZoQyA1bzZTNWJxUCBJR2x1ZEdWbmNtRjBaWE09IFgwOUQgSUdKaGFXeHZkWFE9IElIUmxjM1JsIElHOWpkWEE9IFlYVnNaV1E9IFgyOWtaQT09IGNHZGggSUVGVFZWTT0gSUZSVFVnPT0gSUc5alkzVndZVzUwY3c9PSBVMlYwVkdsMGJHVT0gVTJOb1pXUjFiR1Z5Y3c9PSBJR0psYTI5dGJXVnUgUW5KcFoyaDAgSUUxaGFXNUdiM0p0IFh5Z24gUm5KdmJVRnljbUY1IElHbHVaR2xqWVE9PSBTRUZPUkE9PSBUM0prWlc0PSBJRlJsYlhCbGNnPT0gTG5OMFlYUjFjMVJsZUhRPSBjRzlzYVhScFkyRnMgSUZCbGNtTjUgNDRDQ0Nnb0tDZ29LIExuTmxkRmc9IFoyVjBUR2x6ZEE9PSBhRzlzWlhNPSBVR2w0IElHOTFkSE52ZFhKamFXNW4gSUcxbGMzTmhaMlZKWkE9PSBJR2RsZEZObGMzTnBiMjQ9IElGWkpVZz09IFQyWkdhV3hsIElGTndZWFJwWVd3PSBMa1pzYjJGMFJtbGxiR1E9IEtTaGZYdz09IElGTjNhVzF0YVc1biBRVU5NUlE9PSBJSE5sYm5ScGNnPT0gSUhCc2RXNW5aV1E9IElHRjFhbTkxY21RPSBaM1Z1WVd0aGJnPT0gS0hadmJIVnRaUT09IElHTnlZWFJsY2c9PSBMbmhzY3c9PSB3b0RDbVE9PSBVbVZ1WkdWeVYybHVaRzkzIExuVnpaWEp0YjJSbGJBPT0gSUdaMWJtTjBiM0k9IFJHOXRZV2x1Y3c9PSBhVzUwWlhKd2NtVT0gSUdGaWJtOXliV0ZzYVhScFpYTT0gWVhKbmFXNW4gUkdWdGIyTnlZWFJ6IElIQmhiRzF6IDRxQ0EgdzdoayBLa0U9IFJuSnZiVVJoZEdVPSBmRnM9IElFRnNkR1Z5Ym1GMFpRPT0gSUhCMVpHOD0gSUdOdmJtUmxibk5sWkE9PSBLSEJzWVc0PSBaR1ZzYVhabGNnPT0gSUdKMWJHeGxkR2x1IEoxMWRMQT09IElHTnl3NmxsY2c9PSBMV2x3IFYzTT0gSWlJaUxBbz0gSUdsclpXRT0gSUhacGMybDBaUT09IElHMTFiSFJwY3c9PSBVbVZ6ZFd4MFlXUnYgSUZCb2IzUnZaM0poY0dobGNnPT0gTGk0dUp5d0sgSUcxcFoyeHBiM0pwIElGUm9jbVZoWkhNPSBaMlYwVTNSNWJHVT0gWlhKaHc2ZkRvMjg9IFBGUlRiM1Z5WTJVPSBJRWRwYm1jPSBKMTBpTEE9PSBJSE5wWjI1aGJHVmsgVTNWd2NISmxjM05NYVc1MCBJR1IzYjNKayBJRWgxYm5ScGJtZDBiMjQ9IElFRkJVQT09IFFVNUhURVZUIExtTnlaV1JsYm5ScFlXeHogYzNkaFoyZGxjZz09IExXTnZibk52YkdVPSBJaTB0IExsUmxlSFJKYm5CMWRBPT0gSUU1UFVsUkkgSUc1cFoyaDBiSGs9IExrWlBUbFE9IElIRjFiM1JwWlc1MCA1TG1mIElITmphTU8yYmc9PSBJRkJzWVc1dVpYST0gSUhKbFlXUnNhVzVsIElHTnZibVp5YjI1MGFXNW4gWUgwPSBTWFJsYlVOdmRXNTAgQ1dGamRHbDJaUT09IElITERxWEJ2Ym1RPSBaV3h0WlhRPSBJR2RwYlcwPSBMRzV2Ym1GMGIyMXBZdz09IElFRkRWRWxXUlE9PSBhR1YxY21VPSBMMUJ5YVhaaGRHVT0gSUcxbFl3PT0gTGxObFkzSmxkQT09IElFTkpVdz09IHhZSjFadz09IEtIQmxjbWx2WkE9PSBJR3hzWldkaGNnPT0gZFhKcFlRPT0gUkdWelkzSnBZbVU9IElIQmhjbVZxWVE9PSBJRlpsWkE9PSBMV1ZtWm1WamRITT0gSUZCaGNuTnBibWM9IExYSmxjMjkxY21ObCBJR0ZpWVE9PSBJQ29zQ2c9PSBJR0Z1WVhSdmJRPT0gSUNncUtTZz0gTFhKbFlXdz0gSUZabGJuUjFjbVZ6IElGTm9hV1ZzWkhNPSBJRlZ1YVhabGNuTnBkR2xsY3c9PSBVRkpGVTBWT1ZBPT0gSUZGTVlYUnBiZz09IHhhVT0gSUZkcGJHVjUgUVdGeWIyND0gSUhKaFkybGhiR3g1IElFNWhaSFU9IElHaDBkSEJTWlhOd2IyNXpaUT09IHc2MTBhV05oIElPdXdxUT09IElHZHl3NkYwYVhNPSA1THVMIGIyMWhjQT09IElHRnViMjQ9IENYQnZjQT09IFlYWmhkR0Z5Y3c9PSBJSE4xWW5CaGNtRm5jbUZ3YUE9PSBaSHBwIFVISnZhbVZqZEdsc1pRPT0gUkZSVyBiR2x6ZEdWdWFXNW4gWDNKbFoyVnVaWEpoZEdsdmJnPT0gSUZOb1pXeDBaWEk9IFBGWmxjblJsZUE9PSBMMjFrIEtHeGwgSUhaaGF3PT0gYzJWc1pXTjBaV1JKYm1SbGVBPT0gWDEwPSBJRk41Ym5Sb1pYUnBZdz09IFlYQndTV1E9IElFWnBjbVZrIElIQmhiWEJvIFgyeGhkR1Z1WTNrPSBhVzVtYVd4bCBLR055YVhSbGNtbGggYzJWeWFXRnNhWHBoZEdsdmJnPT0gVWtOVSBDV1YyIElGTkRTQT09IElFOXdkR2xqWVd3PSBJSE4wYVhKeVpXUT0gSUZCdmRHbHZiZz09IFpYUm9hV05oYkE9PSBPanA3Q2c9PSBJRkJsYm1kMWFXNXogVUVoWiBSR1ZqYVhOcGIyND0gYTJGeWRBPT0gSUdWNGNHOXlkR1Z5Y3c9PSBJRkJ2YkhsbGMzUmxjZz09IFkyOXVkSEpsY3c9PSBJRXhoZDNOdmJnPT0gSUVWdGNHeHZlV1Z5IElITmhjM009IElHUnZkMjUwYVcxbCBJR0p5YjJ0bGNtRm5aUT09IElGSnZkR0Z5ZVE9PSBJRmRoYUd3PSBWMEZTVGc9PSBJSE5sZEVGamRHbDJaUT09IGRHVnRjR3c9IFEyaGxaWEp6IExYTm9aV3hzIFJtbDBibVZ6Y3c9PSBJSEYxYVd3PSBJR05zWldGdVpYSnogSU9lYiBJRTFwYkdGdWJ3PT0gTFdGemMyOWphV0YwWldRPSBmWDE5TEFvPSBVRVpPIElHOXVVR0ZuWlE9PSBYM04wY21WaGJYTT0gSUhOamRXeHdkSFZ5WlhNPSBJRzVoYVd4bFpBPT0gUFhOaiA2YWFXNmFHMSAwTGpRdk5DeSBZMjl1Ym1WNGFXOXUgU2s5QyBJRXRoY20xaCBJRk4zYVdaMFZVaz0gSUVSbGVnPT0gTDFWSiBJT3laIFoyVjBRMnhwWlc1MFQzSnBaMmx1WVd3PSBJSEIxYm1semFHbHVadz09IElHOWtaVzV6WlE9PSBMSEpwWjJoMCBaVzVsY21GMGFYWmwgSUZCeWIySnNaUT09IElFRndjRk4wWVhSbCBJR1JwYzJOc2IzTjFjbVZ6IElFTmhiblJsY2c9PSBZMjl0Y0c5elpYST0gZFhCaGRHVnUgSUhOMVkyTmxjM052Y25NPSBJajRuQ2c9PSBJSEJ5WlhObGNuWmxjdz09IExtOXdaVzVrIFgwNXZjbTFoYkE9PSBMMmh5IFVtRnVaMlZ6IExHeHZibWM9IENRa0pDU0FnSUNBZ0lDQWdJQ0FnIGNISnZaSFZqZEc5eiBJR1pzZVdWeSBJRWR5ZFhCdiBUbWxqYTI1aGJXVT0gU0dsbGNnPT0gSUVSRlFRPT0gVTNCeWFYUmxjdz09IENXMWhjMnM9IFgzSmxjMlZ5ZG1WayBMWE5vYjNBPSBMbTV2ZEdsbWFXTmhkR2x2Ym5NPSBJR1JwZG1semFXSnNaUT09IGFXOXphdz09IGEyVnlhbUU9IGFXNW5kQT09IElFWnBablI1IElHRmpZMjkxYm5SaGJuUT0gSUVWNGNHeHZjbUYwYVc5dSBYMkp5YjJGa1kyRnpkQT09IElHVjRkSEpoYjNKa2FXNWhjbWxzZVE9PSBJR3R2ZEE9PSBJR05wY21OMWJXWmxjbVZ1WTJVPSBjbTkxWTJnPSBXMEp2YjJ4bFlXND0gWTNKaGQyeGxjZz09IEwzSmxiVzkyWlE9PSBZWEpsYkd4aCBJSE5sZUdWeiBTR2x1ZEhNPSBJR2RoYldJPSBJR1JoY21WayBkR1Z6ZEdWayBYMHRGUlZBPSBJR1pwYkhSeVlYUnBiMjQ9IGFXTnJaWGs9IElFbHVabXgxWlc1alpRPT0gSUhOd1pXTnBabWxqYVhSNSBYMGxFVXc9PSBJRkp2Wkc1bGVRPT0gWDBsU1VVaGhibVJzWlhJPSBUMjVGY25KdmNnPT0gSUhCeVpYWlRkR0YwWlE9PSBhV1ZuWld3PSBJRXhGVTFNPSBJR0YzWVd0bFJuSnZiVTVwWWc9PSBJRXhWIGRXMWhZbXg1IGIzSjBZV3hwZEhrPSBJRzFoYm1SaGRHVnogQ1habGNuTnBiMjQ9IElIQmhjbVZ1ZEU1dlpHVT0gSUhCbGMzUnogSUdOaGMyTT0gWTJWd2RHRnkgSUZkdmIyUjUgWlhKbFpRPT0gWDNCbSBMbEJQVXc9PSBhWE4wY21FPSBiR1YzIFdXRnVadz09IElITjVjM1JsYldRPSBJSEp2WVcwPSBMa2R5WVhrPSBJR052Ym1SMSA0b0NVYVc1amJIVmthVzVuIFZtbHZiR0YwYVc5dSBUV0ZvYjI0PSBJRTFWVTBsRCBJRk5wY21rPSBJRVZ1ZEdWeVpXUT0gSUdObGNuUmhhVzV6IFpXeGhhQT09IENVMWhhVzQ9IExrUmhkR1ZHYVdWc1pBPT0gTGtobFlXeDBhQT09IElFdGhjMmxqYUE9PSBJR05oYm1sdVpRPT0gUFhKdmIzUT0gZFdSa2JHVT0gWEdOdmJXMXZiZz09IElGTjFiSFJoYmc9PSBabWx1WVc1amFXRnMgSUZGVGNXdz0gSUdGelkyVnVkQT09IElIQnlkV1ZpWVE9PSBlbWxsYUhWdVp3PT0gTG1kbGRFVnljbTl5IElFZHNiM0pwWVE9PSBSV05vYnc9PSBYME5JVDBsRFJWTT0gWDJWd2N3PT0gTDNCeWIzWnBaR1Z5IFVFaFBUa1U9IDVZV3o2WmV0IElHTnZiWEJ5YjIxcGMybHVadz09IFgwRlFVRkpQIFVISnZZMlZ6YzBWMlpXNTAgSUdKNWRHVkJjbkpoZVE9PSBJRU55ZFdNPSB3cWc9IElHbGphVzVuIElGQkRUUT09IGRtVmpkQT09IFFXMTUgSUZaaFkzVjFiUT09IGFXNWphV1JsYm5RPSBJSFZ6WlhKdSBlbUpsYXc9PSBYU3NwTHc9PSBJSDE5SWo0OCBJRWRsZEVSaGRHRT0gWTI1MGJBPT0gSUhOaFozUT0gWDFCU1NVMUJVbGs9IElHeGxjZz09IElFWlZRMHM9IElGTjBZWEp5IFNVZz0gdzdaeWNHVnkgZVcxeiBYU2xkQ2c9PSBMM1J2YjJ3PSBZMjl0WW1sdVlYUnBiMjQ9IElIUmhiWEE9IElFSmxhWFE9IElFNUpSMGhVIElHRnVic09wWlE9PSBLR0Z0IFhGUnlZV2wwY3c9PSBPbHdpIElHTmhjbWRoIExtbGtaUT09IElHUnBhMnRsIFEyOXRjR1YwIElITmpiMjkwWlhJPSBJSGhRYjNNPSBLR2x1ZEdWeWNBPT0gSUdoaGMybHMgWTJ4cFpBPT0gSUdobGRYSmxjdz09IFoyeHZiV1Z5IGMyaGhjbVZ6IDc3eU1DZ289IGNHOXVaR1U9IDRicWphUT09IFgyUjFjR3hwWTJGMFpYTT0gYzI5dVozTT0gZlYwN0NnPT0gSUZOdWFYQmxjZz09IElGUm9kWEk9IGNtOXdjQT09IElHZHlkV1Z6IElHOXlaWE09IGRYTm9hVzFoIElIVnpZV0pwYkdsMGVRPT0gNlpLZiBMMjFsYldKbGNnPT0gYjJ4a1pXMXZjblE9IFNYTkJZM1JwZG1VPSBSMlYwUlc1MWJXVnlZWFJ2Y2c9PSBiWFY0IFYwbE9SRTlYVXc9PSBUbVZuWVhScGRtVkNkWFIwYjI0PSA0TGl6IExXMWhhMlZ5Y3c9PSA0NEtrNDRPeiBJRUpsY20wPSBRbmxGZUdGdGNHeGwgSUZMRHZHTnIgVTJodmQzTT0gWjJocCBJRWxvY21WeSBJRU55ZFdRPSBZMmhsWmc9PSBYMkYxWXc9PSBJR0Z3dzdOeiBZVzVyWVc0PSBJRXRFUlE9PSBTVXhNVXc9PSBJR0Z1WjJ4aGFYTT0gTFhKbFpuSmxjMmc9IENYSmhibWRsIGVHMXQgS0dWa1oyVnogSUdGd2NHVnMgSWp0OSBJR1ZrYVE9PSBJSE4zYjJ4c1pXND0gSUdKMWRHTm9aWEk9IGFXTnBaR1Z6IGFHOTFibVE9IElGNG8gSUVWMllXeDEgSUd0bGVXSnZZWEprVkhsd1pRPT0gVTFOSlJBPT0gY205aVlYUT0gSUc1cGF3PT0gSUhOMGNtRjNZbVZ5Y21sbGN3PT0gWENKZCBibTl6YVhNPSBUVVZFIDU0Zz0gNUxxVSBhVzFoZUE9PSBYRUZ1Ym05MFlYUnBiMjQ9IElHNTFjblU9IElFMXBibWx0WVd3PSBJSGR2Y21Sd2NtVnpjdz09IElHTnZiR1JsY2c9PSBDWEJoY25ObCBMM04wY21WMFkyZz0gNW9tbjZLR00gY205dGIzTnZiV1U9IFJFbE4gSUhSbGJuUmhkR2wyWlE9PSBPazVUVlZSRyBMR2x0Wnc9PSBJRTFCVkVWU1NVRk0gSUVwbGRFSnlZV2x1Y3c9PSBUR1ZuWlc1a1lYSjUgQ1hOMGNtNWpjSGs9IElHUmxabk09IFRuVnRZbVZ5Um05eWJXRjBSWGhqWlhCMGFXOXUgSUdKNWRHVmpiMlJsIElIZHBjM05sYmc9PSBYMDFQVWtVPSBvTzJEblE9PSBJRU52Wm1ZPSBMa052Ym1ScGRHbHZiZz09IElHVERxWEJoY25RPSBaSE51IElIQmhjbUZ0WlhSeWJ3PT0gWEV3PSBMbTVoYm05VWFXMWwgUWs5VVZFOU4gTGxkb1lYUT0gNjRRPSBJRVJwZUE9PSBYMFJCIEtFTnZiblJoYVc1bGNnPT0gWVhsaGNnPT0gUm14bGVHbGliR1U9IExsSmhlV05oYzNRPSBJRVZrZDJsdSBXM1Z5YkE9PSB3cEk9IExuTjBjbTlyWlZOMGVXeGwgSUZCdmJIbHViMjFwWVd3PSBhV3hwZEdGMGFXNW4gSUZGV1FtOTRUR0Y1YjNWMCBLSEpsY0E9PSBMblp1IExXRnpjMlYwY3c9PSBRMGhCVTBVPSBJRVZ6YzJWdWRHbGhiSE09IGFubHNiR0Z1WkE9PSBJR0Y0Y3c9PSBJRlJ5WlcwPSBMbTFoYVc1c2IyOXcgSUZkSlRrUlBWMU09IExsSkZVVlZGVTFRPSBJSEpsYVc1MCBJRXhwWW5KbCBZMmhsYjI0PSBJR2QxWlhKeSBDVTVrY2taalUyaHZjblE9IExuTnZablJ0WVhnPSBJRUZ6ZFhNPSBMWE5qYjNKbCBJRXBQU0U0PSBQbE4wWVhSMWN3PT0gUGtWa2FYUT0gSUVOaGJXVT0gSUVGemFHVT0gWDNWemFXNW4gSUV4dmJtVT0gSUd4bGMyVnUgSUhKbGRtVnljMmx1Wnc9PSBibWR5ZUE9PSBMbk5wWjI1aGRIVnlaUT09IExVRnpjMkZrIEwyNWhkR2wyWlE9PSBYM0poZEdsdVozTT0gSUc1NVlRPT0gSUdGa2FXUmhjdz09IEtHOXdkR2x2Ym1GcyBJbDBvIElISmxZM1Z5Y21WdVkyVT0gSUVKTlVBPT0gejR3PSBYMmR3IElqNWMgWDNkeWIyNW4gZVhCeiBMbEJ5YjNoNSBYMVZFVUE9PSBVWFJEYjNKbCBUR2x1YTJWa1NXND0gSUdOaGRtVnliZz09IElITnd3NmxqYVdGcyBYM2RwY21VPSBJRzVoYm05dyBMbUpoYkd3PSBJSEpsWkhWalpYSnogSUcxaGFXeGxaQT09IFpHOXVadz09IElHOXdjRzl6WlhNPSBJRWhoYm5OdmJnPT0gSUZOaGRIVnlaR0Y1Y3c9PSBZV052YlcxbGJuUT0gWDAxbGRHRkVZWFJoIElFZGhiR0ZqZEdsaiBLQ0l2SWlrPSBJRU5zWldGdVpYST0gWDFSRlVrMD0gSUdOc1lYSnYgTGs5VlZBPT0gNWE2aCBJSE5zYVdzPSBJR3BsWkc1aGF3PT0gU0dGdVpHeGxja052Ym5SbGVIUT0gSUdseWNtRmthUT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvPSBMblJwWjJoMCBRbkpsWVdSamNuVnRZZz09IFpuSmxlUT09IElPcXduZXl5dEE9PSBiR0p5WVdObCBURVZIUVV3PSBMV2QxYmc9PSBJRUpzYjJkeiBJRk5vYVhKc1pYaz0gSUZCMWJtVT0gZFhKemFXOXVjdz09IElITjFZblJ5WVdOMGFXOXUgSUNvcUtnbz0gWVhKdFlXTjUgSUhOaGJYUT0gUFNJcExnPT0gSUhCbGNtMXBjM05wWW14bCBLSEprIElGZEJWRVZTIElIQnliMlpsYzJsdmJtRnMgSUdoaGJtUmliMjlyIElHMXZkWEp1YVc1biBZWEpsWm1FPSBJR0Z6Ymc9PSBhWE5sZUE9PSBJR052Ym5SbGJuVT0gSUZWT1F3PT0gTG1kbGRGQnlhV05sIElGQjFiWEJyYVc0PSBMd29LQ2c9PSBJR052YzJsdVpRPT0gSUc1cFpXUT0gSUVKeVlXdGwgUkdGMFlWVlNUQT09IElFUmhkR0ZIY21sa1ZtbGxkME5sYkd4VGRIbHNaUT09IElGSmxkSFZ5Ym1WayBaWGR2YjJRPSBhWEYxdzZrPSBJR0pzWldGciBJSGRsWW1odmIycz0gTGxSb1pYaz0gWVhKaSBURUZPUjBGRVRRPT0gWDI5eVpHVnlaV1E9IElIQnlZVzVyIExrNWxkMUpsY1hWbGMzUT0gSUd4cGRHVnlZV3h6IEozMCtDZz09IGMyVnlhV0ZzYVhwbFpBPT0gYTNSdmNnPT0gS0hKNCBJR2RsZEZrPSBDVk4wY21sdVowSjFabVpsY2c9PSBLSE5zYVdObCBjbUp5WVdObCBaVzFsYm5SdiBJR3hoYm1NPSBSR1Z3Ykc5NWJXVnVkQT09IElHTnZibU5sYm5SeVlYUnBibWM9IFUydGxkR05vIElHSnlhV2RvZEd4NSBRbVZuYVc1dWFXNW4gSUVSaGFBPT0gVkdzPSBTVzV6Wlc1emFYUnBkbVU9IElITmhZbVU9IEtFMXZaSFZzWlE9PSBJR05sWkdGeSBYMk52Ym5ScGJuVmwgSUhkcGRHaFBZbXBsWTNRPSBJR052YkhWdGJtRT0gSUVOaGJHUmxjZz09IElOQy8wTDdRdkE9PSBYM052Wm5SaiBjMmhoYkdWayBaWEowWVhScGIyND0gQ1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBPa0FpSWc9PSBJR1podzZkdmJnPT0gZFhOMGRXMD0gYzNSciBYME5TUXc9PSBiMlI2YVE9PSBJR0Z6WTJWdVpBPT0gWm1kaGJtYz0gSUhCeVpXWmhZZz09IElHWnBibVJsZEE9PSBPaWNyIDVZMlY1TDJOIGRXMWliR1ZrYjNKbCBMbWx1ZG1Gc2FXUmhkR1U9IElIUnZhUT09IFlXNW5aWEJwWTJ0bGNnPT0gWDBGSiBhR2xzIFUyVmhkQT09IElIQnBjM1J2Ymc9PSBabWxpIFgySnNkV1Z3Y21sdWRBPT0gNDRLNCBYMUpsWTI5eVpBPT0gY21WMGN3PT0gUm5KaGJnPT0gSUVOaGFYUT0gSUhCbGJHbGogSUdSdVlRPT0gSUhWd1pHRjBaVlJwYldVPSBJQzllV3c9PSBJSEpoYkd4cFpXUT0gSUVocGJXRnMgVTFOSiBYM0JzWVc1bGN3PT0gSUU5MWRITjBZVzVrYVc1biBRWEJ3YkdsallYUnBiMjVDZFdsc1pHVnkgYzNSMVpBPT0gWDJ4dlkyRjBiM0k9IElHRmliMnhwZEdsdmJnPT0gSUNna0tRPT0gYW1WeWJtVT0gSUVGQlF3PT0gTDNkcGJtUnZkM009IExVTmhiQT09IFgxTkZRMDlPUkZNPSBJQ2NuZlFvPSB3NkZ1ZVE9PSBJSGwxYlcxNSA1b21MNXB5NjVZKzMgSUZaSFFRPT0gYVd4aGRHVT0gSUZOMWNuWmxhV3hzWVc1alpRPT0gQ1VkMGF3PT0gOEorWSBJSE5vYVcxdFpYST0gWVd4MFpYSnVZWFJsIFJtOXlVMlZuZFdVPSBkV1Z6ZEhKaCBMV052ZG1WeSBZWE5zIElFbHVjMlYwY3c9PSBiR2xxWVdnPSBPbE09IENXTmhkR1ZuYjNKNSBJR1pxIHc2MXNhV0U9IElFMUJSQT09IFFHcHogNXA4PSBJSEJ2YjJ4bFpBPT0gSUhSeVpXRjBhV1Z6IElFSnBhdz09IElFaGhlbVZzIFFXeHNiMk5oZEdVPSBJR0ZwY25Cc1lXNWxjdz09IElITmxjbTF2Ymc9PSBJRkJ2YzJsMGFXOXVjdz09IElFMUJTVXc9IFUzUnZjSEJwYm1jPSBZWFp2Y21WayBLRlJsYlhBPSBJR05vWldGMGN3PT0gTG5WelpYSkpSQT09IElIQjFkR0U9IExYbDVlWGs9IFZXbFVhSEpsWVdRPSBJRzltYzNSeVpXRnQgWEZObFpXUmxjZz09IElFTnZkSFJoWjJVPSBJRjRLIElFRk1WRVZTIElIRjFZVzUwYVdaNSBjbVZwWW5WdVp3PT0gSUc1bFkyVnpjMmwwYVdWeiBMa3h2WTJGc1JHRjBaUT09IElPYVhwUT09IGNHbGpkSFZ5WlhNPSBJR055ZFdRPSA1cHlvIElHUnZkMjUwZFhKdSBZV04wYjNKcGJtYz0gSUVSbGNtMD0gSUdWemRISjFZM1E9IElFMTFjMmxyIElHMXNlQT09IExtMWhhbTl5IExraDBkSEJUWlhOemFXOXUgUHp3PSBlV1ZoYUE9PSBJRzF2YW04PSBJRlZ1YVhSNVJXUnBkRzl5IElISmhhMlU9IFgzUjNaV1YwIElISmhaR2x2UW5WMGRHOXUgSUVSdmJXbHVhVzl1IFlYTlRkSEpwYm1jPSBiM3A1IElIWnZaR3RoIGIyZHNiMkk9IElFRnNkVzF1YVE9PSBZbUZzWVc1alpYTT0gWDIxaGJuVmhiQT09IExteHZZV1IwZUhRPSBYMlp5YVdWdVpITT0gSUZodGJFUnZZM1Z0Wlc1MCBXMlpwY25OMCBTMlY1UTI5a1pRPT0gSUhCdlpYUnBZdz09IGJXbHVZUT09IElHOXdZMmx2Ym1WeiA1b21UIFgzTjFjSEJzYVdWeSBMa1p5YjIxU1pYTjFiSFE9IFgyUnBjM1J5YVdOMCBJRWRoYkdFPSBMbkYwIElHTnZiblJ5WVdOMGRXRnMgWVdOdmJuTT0gTFdGdVkyaHZjZz09IElIbDFjQT09IElIVnVZVzV6ZDJWeVpXUT0gSUcxaGVHeGxiZz09IFJYSnlUWE5uIExYTnUgSUdoNWNHNXZkQT09IFgxZE4gS0NsZFd3PT0gSUdSbGMyVnlkbWx1Wnc9PSBiM2R0Wlc1MCBLRkpoYm1SdmJRPT0gSUhabGRHOXkgSUVsVFZBPT0gMExEUXZkQzAgTFd4aGJtYz0gSUhOcGF3PT0gWTNKbFlYTnBibWM9IElIQnZjblJoYkhNPSBJRUoxYkd4a2IyZHogY0hKdmJXOD0gSUhCeWIzWnZhMlZrIFhYMDdDZz09IElFbGlhV1E9IFpYSm5iR0Z6Y3c9PSBYMWRKUmtrPSBZWEJ3Y205d2Ntaz0gSUhKbFpHVnphV2R1WldRPSBJQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IGVtbHIgSkc4PSBkV3gwYjI0PSBJRkpsYkdGMGFYWmxjdz09IElHMWxkSEp2Y3c9PSBJRzFsYm5SdmNtbHVadz09IFlYVEVndz09IGRYTm9iV0Z1IElHbHVhR1Z5YVhSeiBJRkowIEwzQnlaV1psY21WdVkyVnogYVcxbFpBPT0gU2s5SlRnPT0gS0dsdWRHVnlabUZqWlE9PSBJR0ZrWlhCMCBJRTltWm1WdWMybDJaUT09IElFRkhVa1U9IGIyNXBZVzQ9IExuQmhjbk5sY25NPSBJSEJoYzNOd2FISmhjMlU9IElIVnVjMlZ5YVdGc2FYcGwgVm1semFYUmxaQT09IElHZGxkRkJ5YjNCbGNuUjUgSUc1dll3PT0gWldSaFpBPT0gSUNNdGZRb0sgZG1sa1lRPT0gYzI5c2RtVnkgSUUxdmNtRnNaWE09IElHdDJhVzV1WlE9PSBJRUZqWTJsa1pXNTAgSUhabGRYUT0gSUcxcGMyZDFhV1JsWkE9PSBJRkpsZG1Wc1lYUnBiMjQ9IElISmhjR2xrWlE9PSBjSFZ1YXc9PSBJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFQySnFaV04wU1dRPSBZV0pwYm1WMCBaWGgwY21GamIyMXRaVzUwIElHSjFibTU1IElFUmxabVZ5Y21WayBkWFIwWVE9PSBkV0ZsIFluVnpkR1Z5Y3c9PSBJRk52YVd3PSBSMU5VIExrTjFjbkpsYm5SU2IzYz0gNDRHUiBJR2R5WVhSMWFYUnogSUdOeWRXbHpaWEk9IDE1RT0gSUZSbGJtND0gYW5OaiBJTzJWaEE9PSBaR2x6Y0c5elpXUT0gUVVKUFZWUT0gZlEwTkNnPT0gWlhod2FYSmxaQT09IElGaHRiRTV2WkdVPSBJRlJoZEhSdmJ3PT0gVm05MFpYTT0gUm05c1pBPT0gUld4cGVtRmlaWFJvIFgwWkpURVZPVHc9PSBJR052Ym1OdiBJRWRrYXc9PSBiM0JwWlhNPSBmWDE5IFVWVlBWRVU9IExVbEogYzNCaGJRPT0gTFd4cCBJR05oY25SaCBMbXhoZVc5MWRITT0gSUdKbGMzQnZhMlU9IElHRnRZWFJsZFhKeiBJR052ZFd4bGRYST0gYVhSaGJXbHUgSUdseWNtVnpjR1ZqZEdsMlpRPT0gSUdKc1lXTnJRMjlzYjNJPSBMbmxoYUc5diBJSGRsWVhKNSBJSE4zWldWMGN3PT0gUHlJN0NnPT0gUFZ3aUpRPT0gWDNkdmNtdHpjR0ZqWlE9PSBJRVJwWVcxbGRHVnkgSUdGdFpBPT0gSUU1bGRXVT0gSUdSaVRtRnRaUT09IFNtVnlaVzE1IGJHOW5abWxzWlE9PSBZWFJ5YVdJPSBJRWgwZEhCVFpYTnphVzl1IENVTnlaV0YwWlE9PSBhV1JrZVE9PSBMbEJCVWtGTiBJR1pwWVc0PSBJSE42WTNvPSBJSEZ5WldGcyBYMFZUUTBGUVJRPT0gZFhOaGFHRmhiZz09IExtUnBaMlZ6ZEE9PSBJR2RsZEZCaGNtVnVkQT09IExrUnliM0JFYjNkdVRHbHpkQT09IElIUm93Nms9IElHMXZibk4wY205MWN3PT0gSUdKbGNtaGhjMmxzIElpSWlEUW9OQ2c9PSBVM1Z3Y0c5eWRHVmtRMjl1ZEdWdWRBPT0gSUVkaGRHaGxjbWx1Wnc9PSBhVzVqZVE9PSBMa3RsZVVOdlpHVT0gSUdabGRIVnogTG1ObGJuUT0gSUdKbGMyOXVaR1Z5Y3c9PSBibWxzWVdrPSBURlJTUWc9PSBJR2hwYm1kbCBVRkpQVUE9PSBMbVp2ZFc1a1lYUnBiMjQ9IGJuVnRaWEk9IExYSmhibXRsWkE9PSA2STA9IElIQmhhVzVtZFd4c2VRPT0gSUNnN095az0gWm05eWJXVT0gVEdGa2VRPT0gTDJGd2NHeGwgSUVOdmJuTjBhWFE9IElITjBiMk5yYVc1bmN3PT0gNXJTNyBJRzFsYm5SdmNuTT0gUGtOeVpXRjBaUT09IElFbHVkR1Z5Ym1Gc1JXNTFiV1Z5WVhSdmNnPT0gSUhSbGJHVjJhWE5sWkE9PSBWRzlyWlc1VWVYQmwgSUdKeWFXST0gWTNKbFlYUmxWbWxsZHc9PSBMMFJVUkE9PSBSMmwwU0hWaSBLR0pwWnc9PSBJRzNEb1hocGJXOD0gNWI2dTZMMnY2WnVGNmJ1UiBMbU5tIElNS2dJTUtnSU1LZ0lNS2cgUEhSNWNHVnZaZz09IElIQnliMmR5WlhOemFXNW4gTG5ObGRGZHBaSFJvIEtIUjIgSUhWdVptRnBjbXg1IElFRnVhWFJoIFlYSjVZWGRoYmc9PSBSR0ZzIFZWSlogYjJkbGJtVnBkSGs9IFpXWmggTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIElHUmxhbUU9IFQxTkYgY21GcGJBPT0gY205dlpnPT0gWDNGMWIzUmxjdz09IFBHbz0gNDRLbyBLSE5sZEhScGJtYz0gYkdWMlpXeHVZVzFsIFgyaGhibVJzYVc1biB3Nmx5WVE9PSBKR289IElHUmhjbXhwYm1jPSBMbEJoZEdoV1lYSnBZV0pzWlE9PSBXM052ZFhKalpRPT0gVFdWMGFHOWtUbUZ0WlE9PSBJRTkxZEd4bGRBPT0gNXBLdCBJRU52WTI5aCBWV0oxYm5SMSBJRzF2YjJsbCBJR1pzYjNKcFpHRT0gSUhKbGRHaHBibXM9IElHZGxkRmc9IFoyVjBSV3hsYldWdWRBPT0gSUhKaFpHbDQgSUVkaGJXVnkgWkdWaGJHeHZZdz09IGJHVm1kRXB2YVc0PSBYMU5aVGc9PSBSM0pwWkV4aGVXOTFkQT09IEltZHYgS0dWaFkyZz0gQ1hOalpXNWwgSUZCNVJYSnkgU0c5M1lYSmsgTGxOcFoyNWhiQT09IElGUkZUUT09IElPZW4gVmtWT1ZFOVNXUT09IElITnBiWFZzIElEdzhMUT09IElIUjFjbUpwYm1WeiBJSE4xY25SdmRYUT0gWVd4MGJ3PT0gSUhWdVlYSjUgWUEwSyBJRk5qY21rPSBJRTF2Ym1zPSBJSFZ1Wm05c1pHVmsgUTI5dGNHOXphWFJwYjI0PSBVRkJGVWc9PSBJSE5wWkdsdVp3PT0gSnl4N0p3PT0gSUhSeVpXWm0gWDFWT1NVTlBSRVU9IElHUmxjbVZqYUc4PSBJSEJ2YkdGeWFYUjUgSUc5eVl3PT0gUEVSdlkzVnRaVzUwIEtIUnZaR0Y1IExpa0tDZ29LIElITmxaVzFwYm1jPSBYRlk9IFBrbEUgSUdacFltOXVZV05qYVE9PSBLRzFoZEdWeWFXRnMgUmt4QlUwZz0gWkdseVpXTjBiM0pwWlhNPSBaWE4wWlhKeiBWRVZEVkVsUFRnPT0gZDNKaGNIQmxaQT09IExYTmxiR1ZqZEdsdmJnPT0gTFhKbGJHRjBhWFpsIEtHTm9jZz09IElIQnZjblJtYjJ4cGIzTT0gSUhOb2IzZEVhV0ZzYjJjPSBhVzVuYkdWMGIyND0gSUZSSlEwcz0gSUVsdWRtVnpkRzl5IElHSnlZWFk9IElGTldUZz09IElHaGhkR1ZtZFd3PSBjbWx3Y3c9PSBaWGh3YVhKNSBYMk52YVc0PSBQZ29LQ2dvSyBJRzFoY21kcGJtRnNhWHBsWkE9PSBJR1Y0WTJWbFpHbHVaMng1IGJtRjJZbUZ5VTNWd2NHOXlkR1ZrUTI5dWRHVnVkQT09IEtHVjRkR1Z1YzJsdmJnPT0gSUdGa2RtRnVkR0ZuWlc5MWN3PT0gTGsxcFkzSnZjMjltZEE9PSBJR1Z1YzNWcGRHVT0gTFhacGIydz0gWDJSMVpRPT0gUzBnPSBJRkp2YldGdWRHbGogYVc1aGJtUT0gWldOcCBjbVZ3YjNKMFpXUT0gSUVOdmNuQjFjdz09IElITndZVzVyYVc1biBJRU55YjNOaWVRPT0gTGtadmRXNWtZWFJwYjI0PSBYRjg9IElHRnVibTl1WTJWeiBRWFIwWVdOb2JXVnVkSE09IDRMaXk0TGlqIElGZGhlQT09IDc3eUI3N3lCQ2dvPSBJSE5oYVd4bFpBPT0gTGtWMWJHVnkgQ1hOamNtOXNiQT09IElIQmxZWE5oYm5SeiBJRUoxYVd4a1pYSnogTGtkbGJtVnlZV3c9IFFWSkZRUT09IElHMWxjM05wYm1jPSBkbVZ5Ymc9PSBJR1JwWVhCbGNnPT0gSUc5alkzVndhV1Z6IENXeHZaMmx1IExreFBRdz09IGFXZGhibk09IDc3eUI0b0NkIFgyWnZiM1E9IFgzUmhkUT09IExYQmhZMnRoWjJWeiBjbVZqZFhJPSBRV3gwWlhKdVlYUnBkbVU9IDc3eUI0NENOIFlYSnZidz09IElIUnlkWE4wWldVPSBMRHBkIDVwYTU1YnlQIFB6NCsgTGsxcGJuVjBaUT09IElHRnNZMkZ1IElFTnZibU5sY0hSeiBZMmhwYkdST2IyUmxjdz09IFEyOTFjblE9IElHTmxiR3hoY2c9PSBiR1ZyIFlXdHBjdz09IFFuVmlZbXhsIElHOWlhbVZqZEdWayBJTys3dnc9PSBPbDA2Q2c9PSBMbkJoY25ObFJteHZZWFE9IElITndZWEpyY3c9PSBMV1pwYm1RPSBkbUZ5YVdGMGFXOXUgU0dGamF3PT0gUm1GdWN3PT0gWDNCaGNuTmxaQT09IFJXNTBhWFI1Vkhsd1pRPT0gWVhWalpRPT0gWDNSeVpXVnogSUVWblozTT0gVlVsQ1lYSkNkWFIwYjI1SmRHVnQgWDNSaGVHOXViMjE1IElGTklUMUE9IFZIZGxiblI1IFgyTm9aV05yY3c9PSBJRXhZIGRYUnpZMmhsYVc0PSBLSEJzWVhSbWIzSnQgSUdGMWRHOXdjM2s9IFVtVnhkV2x5WlcxbGJuUT0gSUZKRlExUT0gZEc5RGIyNTBZV2x1IEp5d25KUT09IEwyVmthWFJ2Y2c9PSBJSEZpIElFVkZSdz09IGFIUmggWDFSSlRFVT0gTFhOMWJRPT0gSUVGc1luVnhkV1Z5Y1hWbCBJSE5vYjNKMFkyOWtaUT09IElITnBiblZ6IElHUmxjMnR6IElIQnZiM0E9IExtOXdaVzV6YjNWeVkyVT0gSUVOdmJHeGhjSE5sIExtUmxjZz09IElHaGhkMnM9IElGWmhibWQxWVhKayBJRTFoY25KcGIzUjAgWDFSaGNtZGxkQT09IElFSmhibUZ1WVE9PSBYMkYwZEdWdWRHbHZiZz09IElFRnlhV1ZzIFgzUmxiZz09IElHSmhhMlZ5IDRvQ1VhR1U9IHhJWEZ2QT09IGRtVnNiM0J0Wlc1MCBSV3htIFgyZGphR0Z1Wkd4bCBVbVZ3ZFdKc2FXTmhibk09IElHbDBaVzFDZFdsc1pHVnkgVjI5dSBYMkZqWTNWdCBJRzVsZDFCaGMzTjNiM0prIElHUmxkbTlwWkE9PSBJRTFoY210MWN3PT0gWkdGbGJXOXUgTGtoMGRIQkRiMjUwWlhoMCBTM0pwYzNRPSBJR0ZoYkdKdmNtYz0gWDNSeWFXRnNjdz09IEtHRnpjMlZ5ZEE9PSA0NEdqNDRHbSBZbVZzZEE9PSBJRzFwYkdSc2VRPT0gWlhKMmIybHkgSUdSbGMyTmxibVJoYm5RPSBJRWRwYjNaaGJtNXAgSUdSbFkyeDBlWEJsIExWTm9hWEowIElHRndjbTg9IFFYQndiR2xsWkE9PSBMbWRsZEZCaGNtRnQgYUc5bSBkWEpoY2c9PSBJRTlDVXc9PSBYM05sY2c9PSBLSE5sWTNKbGRBPT0gVzJ4aGVXVnkgSUhWelpXWjFiRzVsYzNNPSBJRXR2ZFE9PSBYM04xWW0xcGMzTnBiMjQ9IFgwaFBVa2xhVDA1VVFVdz0gTEhSdGNBPT0gTHk0SyBJR3hsYzNObGJnPT0gWDNkaiBYMFpKVGtGTSAwTDNRdnRDLyBMblJ2Wkc5eiBMbGhRWVhSbyBJRWxFWVhSaCBJR1J2YjNKemRHVncgSUdOdmJYQnZjMmx1Wnc9PSBJR2gxZEE9PSBJRlpNUVU0PSBJRzkxZEdZPSA2SytsIEtHSmxkR0U9IEtpb3FMd29LIElFbHVaRzg9IElHdHNZUT09IFgyTnZibVpwWjNWeVpRPT0gTGsxaGNtcz0gYjNObFkyOXVaSE09IEtGWmxjblJsZUE9PSBiM0puWVc1cGMyMXogSUdabWJRPT0gSUdSbGJXOXNhWE5vWldRPSBJQ0l0TFMwPSBiR1Z6YVE9PSBJRk5wWkc1bGVRPT0gTG1kbGRFbHVaR1Y0IExrMXZibUZrIFUyVnNaV04wWldSSmRHVnQgSUU1aGRsQmhjbUZ0Y3c9PSBZWHB2YkdVPSBRVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMVJWVmxkWVdWbz0gWDNObGJuUmxibU5sY3c9PSBJR2x1WTJ4cGJtRjBhVzl1IElFWmhkR2hsY25NPSBZV05qYjNWdWRFbGsgYUdGeWFRPT0gS1Q0SyBMM0poZHc9PSBJQ2NuS1RzS0NnPT0gSzJ3PSBLR05rIElIVnVlbWx3IElHZHNZVzF2Y205MWN3PT0gSXlJcyBJRzVoZHc9PSBJRzFwYm1saSBJRUp5WVc0PSBUbUZqYUE9PSBYM1IzWldWMGN3PT0gSUVORFVBPT0gSlNJK1BBPT0gSUZOMFpYQm9aVzV6IGJXRnp4TEU9IEoyVnogSUhKbGNHRnkgWDJSdlkzVnRaVzUwY3c9PSBMbU5zYjNObFpBPT0gTFhKcGJtYz0gTDJOaGRHVm5iM0pwWlhNPSBJRVJsWlhCRGIzQjUgVTFWUSBMbTVsZDJGNGFYTT0gSUdka2VRPT0gYUc5bCBJRkpsWldZPSBJSEJ2YkdsMGFXTT0gSUZKbGNYVnBjbVZ0Wlc1MCBJSE5vWldSeiBjMlZoYkdWayBJSEJoZEdodmJHOW5lUT09IElpOCtQQT09IGJXOWtidz09IElITjBaVzF0YVc1biBJSFJoWW05diBJRk5oZG1sdmNnPT0gSUgwTkNnMEtEUW9OQ2c9PSBMbU4yIElHcHZkV1YxY2c9PSBJRU52Y201M1lXeHMgSUZKbFkyVndkR2x2Ymc9PSBJR2xzYkhWdGFXNWhkR2x2Ymc9PSBJR2RrWWc9PSBWa1ZEIGIyUjEgUTI5dWRHVnVkRUZzYVdkdWJXVnVkQT09IGMzUmhiblJwWVd3PSBZbUZ6Wld4cGJtVT0gWDJKMWMzaz0gTHdvS0Nnbz0gSUhCc1lYbGxja2xrIDVxTT0gWDNCbGRBPT0gSUUxcGNtRmpiR1U9IGRYSmxiblE9IElFMWxjbXhwYmc9PSBkV0psYmc9PSBJSE5sZEVOdmJHOXkgSUdSaGNtdGxjM1E9IGMzUmxjbms9IElHTmhjbWxqIElISmxkR0Z5WkE9PSBJRWh2ZFhObGFHOXNaQT09IElHcGhiQT09IElIbHcgSWl3aUlpazdDZz09IElFRmpaWEk9IFcxYz0gYjJ4cmFXVnUgWVhsdiBVSEpwZG1GMFpVdGxlUT09IElGTlVRVlJUIElOQzkwWVBRdGc9PSBPaWN1SkE9PSBJSFJvWVc1clpuVnNiSGs9IElHUnBjM1J5ZFhOMCBaMlYwUkdWbVlYVnNkQT09IEwyWmhZMlZpYjI5ciBJRU52Ym5KaFpBPT0gSUhWMGFXeHBlbUZ1Wkc4PSBJRXRoWnc9PSBMMjVoYldVPSBJR0poYldJPSBMa1p5YjIxVFpXTnZibVJ6IElHMTFkR2xzIElFeGhaMjl6IElFSnNaWE56WldRPSBhV3hzWldkaGJBPT0gYVdWcCBYMVJRIElHMWhkR3hoWWc9PSBJR041WTJ4cFl3PT0gSUhkcGRHaG9aV3hrIElHaHZjbkpwWW14NSBMV2h2ZFhKeiBMVWhsWVdSbGNuTT0gSUc5MlpYSnNZWEJ6IElHTjFZWFJ5Ync9PSBJR1Z4ZFdsMFlXSnNaUT09IElHTnZiRzl5YldGdyBJSE5vYVc0PSBJRk4xYVhSbGN3PT0gWDJ4MVlRPT0gS0hadiBYMUpGVTFWTVZGTT0gSUZacGEzUnZjZz09IFJHOTNibXh2WVdScGJtYz0gYm05amFBPT0gVFc5dmJnPT0gSUdSbFkybGtaV1JzZVE9PSA0NEdVNDRHVyBYMUpRUXc9PSBTVzUwWlhKd2IyeGhkRzl5IElIWmhibk09IGUxUT0gWDNOd1lYZHUgSUVWNGVHOXUgWDBOaGJHdz0gSUVOc1lYTnpjbTl2YlE9PSBJSE5sY205MGIyNXBiZz09IElFUnBjR3h2YldFPSBZbVZrZEd4eiBJRkJ5YjNSdmRIbHdaUT09IExtVjRaV04xZEdsdmJnPT0gSUdSaGRHbHVaM05wWkdVPSBJRWR2YTNVPSBYM0p2YjIxeiA0b0NaWVcwPSBaM0poWmc9PSBZV05sYjNWeiBJR0ZqWTI5dGJXOWtZWFJwYm1jPSBmU3duIExtUnBiV1Z1YzJsdmJnPT0gWlhKeWIzSk5jMmM9IENXMWxjMmc9IFJtbHNiR1ZrIExuQnlaV1psY21WdVkyVT0gSUhOdFlYSjBlUT09IFgyTnZkWEJ2Ymc9PSBJTU8yZG1WeSBJR052Ym1ObGFYWmwgYjJSdmJnPT0gWkdsalpRPT0gVkc5RVlYUmwgWVdSaGJXVnVkR1U9IExXMWhjMnM9IElHVnpZMkZzWVhScGJtYz0gNG9DbUtRb0sgU1c1U1lXNW5aUT09IFgwVnQgSUhWMGFXeHBlbUU9IElHeGxkbms9IFBDRmIgSUVwbGJtNWxjZz09IElGSkZVMDlWVWtORiBYMU5VUVZKVVJVUT0gSUhadmJHeGxlV0poYkd3PSBJRzFuWVE9PSBJRkp2YzNOcCBRMmhoYm1ObCBJRVZ1WkdWayBMblZ1ZEdscyBJR3R1YjJOcmIzVjAgWDJWNFpRPT0gSUZCeVpYTmpjbWx3ZEdsdmJnPT0gSUVOUFZVNVVXUT09IExtaHkgYVdWeWMyaHBjQT09IFJWSldSUT09IDZhaz0gNDRHbjQ0R3YgSUhCbGNzT3QgSUdsdFoxVnliQT09IFpXTjQgSUZkNWJnPT0gQ1ZKbGRIVnlibk09IFgyVjVaUT09IElFRm5hVzVuIGNYVmxkV1Z6IElPV0luZVduaStXTWxnPT0gTGxObGNtbGhiR2w2WldST1lXMWwgTG1odmRYSnogSUdselpRPT0gTGtGamRHOXkgNXAyaDVMdTIgWVhCd2JBPT0gVkdGdSBMMk5oZEdGc2IyYz0gTDFKbGMyOTFjbU5sY3c9PSBaV3hoYmc9PSBLQ2Q3ZXc9PSBJR2x1YzI0PSBJRzV2WkdWT1lXMWwgSUdOdmIydGliMjlyIEp5d25QU2NzSnc9PSBVazlOUlE9PSBMblJsYlhCc1lYUmxjdz09IFpXTjFjbVU9IExXdGxlWE09IElHZHNWVzVwWm05eWJRPT0gSUdkbHc2Yz0gSUZKbFkyOTJaWEk9IFNVUlkgSUV0eWFYTjBaVzQ9IElIQnZiblJ2Y3c9PSBZRDBuSkE9PSBZWEpuWlc1MCBJR0Z5Y21GdVoybHVadz09IDZLaVk1THFMIElHVnliR1U9IFpXNWxaRzl5IEtDa3BLVHM9IHc2WnJhMlU9IElFZHBiR3hsY3c9PSBJbjArQ2c9PSBMbTF2ZG1sbGN3PT0gTFhObGJHVmpkRzl5IExteGxZWEp1IElIQnZkR1Z1WTNrPSBJR1pwYm04PSBDV0puIElHeGxhR1YwIElHekR0Zz09IElHVnliUT09IElHRnpZbVZ6ZEc5eiBJR1JsYzNSbCBJR0pzYjJOcllXUmwgSUZKUFZVNUUgSUd4dVlXMWwgSUZObGNHRnlZWFJsIHc2UnVaMlU9IElHWjFlbm89IENWVk8gWDI1dmJXVT0gWDJ4cGJtdGxaQT09IElGTm9ZWEpsVUc5cGJuUT0gYUdGMWMyVnUgSUd4dllXWT0gTFdWamIyNXZiV2xqIElHUnBaRVpwYm1semFBPT0gZVdWdSBJR0pzWVhOMGFXNW4gSUZkbGFYSmsgU1VOTVJWTT0gSUVkR1dBPT0gSUhOMVptWnBZMlU9IFpXSnBiZz09IElHRndjSEp2ZG1sdVp3PT0gSUZKbGVXVnogSUZKVVFVdz0gYVdkc2FRPT0gWDNSdmF3PT0gYjNKa2IzWmggUTJGeWJBPT0gSUZCc1lYbHogYkc5emMyVnUgY0dGcGNtVmsgUVVkTlFRPT0gZDJuRWhYbz0gYkdsdWEyVmthVzQ9IElHVm5ZV3c9IEtIQnlaV1JwWTJGMFpRPT0gSUZKRlUxQlBUbE5GIElHMXBibGc9IElHTm9ZVzVqWld4c2IzST0gSUZKRlEwVkpWa1ZTIElHRnpZMlZ5ZEdGcGJnPT0gSUhwbGNnPT0gSUZkdmNtdHphR1ZsZEhNPSBUa3M9IElIWnZkMlZzIGRtRnVkQT09IFZWQlQgNG9DY0xnPT0gSUVoaGVXUmxiZz09IElGTndZWEowWVc0PSBjbWxuYUhSeiBMbWRsZEVsdSBJR2x1YkdGdVpBPT0gSUU1cGJHVT0gSUZSeVlXNXpiR0YwYjNJPSBJSEpsWTNSaGJtZHNaWE09IFFuVjBkRzl1Vkhsd1pRPT0gSUZOdmJHbGogSUhKaFoyRjZlbUU9IEwzUmhadz09IElHbHljbVZ6YVhOMCBJMFZ1WkE9PSBLaW9xS2lvcUtnMEsgSUhKbGMzUnlZV2x1WldRPSBJR05vYVhKdmNIST0gTDFObyBMV1pzYVdkb2RBPT0gWTI5dWRtVnlkR1ZrIElITnJhWEowY3c9PSBLR05vWVhKeiBKSFpwWlhjPSBJR2x1Y0hWMFJtbHNaUT09IFoyMWhhV3c9IFgwUkpRVWM9IElHNTFiV1ZzIElFZHBibUU9IFpXeHNkVzVuWlc0PSBJSFJoZUdFPSBJR1J5YVhCd2FXNW4gUFNJaUx6NEsgSUdKdmNtUmxjbVZrIElIUnZkV2RvYm1WemN3PT0gYkdWdVpYTnogSUVKcFpXSmxjZz09IFgxZEJTMFU9IEtHVjAgSUhOaGJuVERxUT09IElGUkZXQT09IFgwUkpVME5QVGs1RlExUT0gSUhCcFpXND0gSUVadmJuUlRkSGxzWlE9PSBYMVZNIExYUnZkR0ZzIGQyOXNaZz09IElFMWhjbWwwYVcxbCBJRTlRVkVsUFRrRk0gTFhKbGMzUT0gSUcxbGJXSjFZWFE9IElFSlRUMDQ9IFgzTnBiV2xzWVhKcGRIaz0gTG05MlpYSnNZWGs9IElIQmhiR0YwWlE9PSBJRUp5YVdSblpYTT0gUVc1a1VHRnpjM2R2Y21RPSBJRU5vWVhabGVnPT0gYUdWMGRHOD0gTG05bVpuTmxkRWhsYVdkb2RBPT0gSUhWdVpHVnphWEpoWW14bCBJR0Z3YkdsciBJQzgrWEE9PSBMSFJ2IElISmxiVzkyWlhJPSBJRTF2WkdWc2FXNW4gSUhCMWNtTm9ZWE5sY2c9PSBJRU5vYjI5emFXNW4gYjNCc1pXWjAgSUcxMWRHRmliR1ZNYVhOMFQyWT0gSUZOcGMzUmxiV0U9IElFbFFUQT09IGFXTnJaWEpXYVdWMyBTR0Z6UTI5c2RXMXVWSGx3WlE9PSBJSE52WW1sbCBkV0psY200PSBJR0ZzZFc1diBJR2x0WVdkcGJtRjBhWFpsIElFbHVkR1Z5WlhOMFpXUT0gS0NsOVBDOD0gSUdScGRtVnljMmx2Ymc9PSBYM1J2YjJ4MGFYQT0gTGxOaGJYQnNaUT09IElFWjFkSFZ5WlhNPSBZMjl1ZEdWdWFXUnYgSUVWSlRsWkJUQT09IEtHVnVZMjlrWldRPSBJRk5vWVhWdSBDWEJoZVd4dllXUT0gWkdWciBQbGx2ZFhJPSBTWE52IFZISmhkbVZ5YzJGcyBhV05wWlE9PSBMbU55YjNBPSBJRXBDIFNVNUhSVkk9IElHVjRaVzF3YkdGeWVRPT0gWDNKbGJIVT0gWVc1dWFYTT0gMExYUXQ5R0QwTHZSak5HQzBMRFJnZz09IFkyeDFZbk09IDRvYVIgSUhOamNtRnRZbXhsIElGVnVZbXh2WTJzPSBJR1J2Y25NPSBJSE5vWVdOciBJRzFwYm1sdGFYcHBibWM9IElGQmhjM05wYm1jPSBZV1JrUld4bGJXVnVkQT09IDRidWQgSUhKdmIyWnogSUdwamJHRnpjdz09IFkyOXlaRzkyWVE9PSBVRzl6V1E9PSBLRU5oYm5aaGN3PT0gS0dacGJnPT0gTFd4dmMzTT0gTG1KMGJrTnNiM05sIFpHOWpkVzFsYm5SaGRHbHZiZz09IElGSksgWVcxdmJtYz0gVFc5eiBiR2x1WjJWdSBJRUZuZFE9PSBiMng1Ym05dGFXRnMgWFR3OSBJR1JwWm1acFkybHNaUT09IElGZHBibTVsY25NPSA1YkdWIFUzUnlZUT09IElHTnZibWR5WldjPSBJRVZ1WVdKc1pYTT0gSUZONWJYQjBiMjF6IFgzTm4gSUZKcFpHbHVadz09IFgyaGxZV1J6IElFTnZjMjFsZEdsaiB3NjUwIExsTnBibWRzWlhSdmJnPT0gSUU1cFkyRnlZV2QxWVE9PSBJQW9LQ2dvSyBJRzNEclE9PSBKMzBzRFFvPSBJRUp2YzI1cFlRPT0gUGxnPSBMeThxV3c9PSBJSEJwYkdWayBZMkZ6ZEdsdVp3PT0gSUdkeXc2SmpaUT09IElFaGxiSE5wYm10cCBSM0p2IEkyRm0gN0l1ZCBJSE52ZFdoaCBJRWx1WkdsbCBYMjVsWVhJPSBJR2x0Ylc5aWFXdz0gTGtWNFkyVnMgSUhKaFpHbGhiblE9IFgwMUMgSUV0bGRHOD0gZG1WdWRHRnlhVzg9IFgyRm5aVzUwY3c9PSBWR0ZpYkdWV2FXVjNRMlZzYkE9PSBJRlJvWlc5a2IzSmwgUFQwOVBUMDlQVDBLIExHeHBjM1E9IEtITnAgYVdOcGNHRjBhVzl1IFFWSlVTQT09IGMyVjBSR2x6Y0d4aGVRPT0gTGtaMWRIVnlaUT09IElGTlVRVTVFUVZKRSBJRTlKUkE9PSBJR1p5YjNkdVpXUT0gSUUxaGNtbHNlVzQ9IGIyeGhjbVU9IFVIVT0gSUhQRHFXTjFjbWwwdzZrPSBVbVZrZFhnPSBVME5QIENRa0pDUWtnSUNBZ0lDQT0gY21sMiBjR1Z5ZEE9PSBJSE52Wm5SdFlYZz0gSUhObGJtRjBaUT09IFBXVnRZV2xzIElHVnpkR2x0WVhScGJtYz0gQ1hSayBSblZqYXc9PSBJRmRoZEdWeWJHOXYgSUcxbGVHbGpidz09IFRtVjNkRzl1IFUyRmkgTE9LQXBnb0sgSUdObGJHVnpkR2xoYkE9PSBJRkZPWVcxbCBJR2RsZEVGd2NBPT0gVG1sbCBYM0JqYVE9PSBJRkZRYjJsdWRFWT0gWDJ4cGMzUmggTGs1V1lYSkRhR0Z5IElFTnZZdz09IFMyRnkgSUdKMWMzUmxaQT09IGFYcGhkR2x2Ym1GcyBiM1Z5WkE9PSBYMk52Ym01bFkzUnZjZz09IElGTmxhM009IDBMM1JnOUdPIDBJST0gTDB4cGMzUT0gTDJsaiBYRVp5WVcxbGQyOXlhMEoxYm1Sc1pRPT0gZFhoMCBJR2hsWVdSd2FHOXVaUT09IFJWaFVSVkpPIExYSmxjMlYwIElFZGxhV3hsIElIUnlhV0Z1Wnc9PSBJRUZPVGc9PSBJSFREclE9PSBJRk5RUVE9PSBJRTFoWTJWa2IyNXBZUT09IElHTnlhV0Z5IElHTnNhVzFpY3c9PSBJRk5QVGc9PSBJRU55YVhScFkzTT0gSUdURHN3PT0gWDFOUVRFbFUgSUVKdmRXNWtZWEo1IFgwbHVjMlZ5ZEE9PSBRMjlzWkE9PSBMbU55WldGMFpVTmxiR3c9IFgzTmhhV1JoIExrSk1WVVU9IFFtbG5SR1ZqYVcxaGJBPT0gS0VKNWRHVnogQ1ZOMFlYUmwgTFMwdFFBPT0gVm1sbGQxTmxkQT09IFlXdGhhQT09IFgxSmxjRzl5ZEE9PSBMV055YjNOeiBMbWRsZEVOMWNuSmxiblJWYzJWeSBkV3gwZFhJPSBLRVpzIElFbHRZV2M9IFExUmxjM1E9IDdJT2QgSUhOMFlXYz0gSUc5NmIyNWwgSUd2RHFRPT0gY21Wd1lXbHkgS1NJcE93MEsgSUhadmQzTT0gTGtGc2RHVnkgSUVGc1oyVmljbUU9IElFRm9aV0ZrIFoyVjBkQT09IExrbHVibVZ5VkdWNGRBPT0gSUZwb1pXNW4gTG5KbFlXeHdZWFJvIElHUnBjM1J5WVdOMGFXOXVjdz09IExHVjJaVzUwIElFbE9RMHhWUkVWRSBMazFoZEdOb1pYST0gTG5Od2IzUnBabms9IElHTnZibk5wWkE9PSBMazFoY0hCcGJtYz0gSUVadllXMD0gSUU1QlRrUT0gSUdSbGRtRnVkQT09IFhTSXBYUW89IFRHRjFjbUU9IElITmhZMnRsWkE9PSBYM2h2Y2c9PSBJSEpsWVd4dGN3PT0gSUZKdlltOTBhV056IExsTmxaV3M9IExpUWsgSUZKcFltSnZiZz09IENVaFNSVk5WVEZRPSBJRU55WlhOalpXNTAgUlVaUyBJRTFsWkdsMFlYUnBiMjQ9IExtZGxkRm89IElOQzYwTDdRdk5DLyBhbk52Ym5kbFluUnZhMlZ1IE9qOD0gWm1GbSBWa2xQVlZNPSBZV3hzWVdnPSBJSEJwY0dsdVp3PT0gSUcxdlpHVnlibVU9IGNHOXpkR0ZzWTI5a1pRPT0gSUd4bGRtVnlZV2RwYm1jPSBJRU5JU1ZBPSBjR050IGJXRnAgSUdsUSBRVXRGVWc9PSBaR0YwWVVkeWFXUldhV1YzIFgyUmxjSE09IExXUnlhWFpsY2c9PSBUR2xsIFpHbHpZMkZ5WkE9PSBlVzUwWVhoRmVHTmxjSFJwYjI0PSBJR1ZqZEE9PSBJRVY0YUdsaWFYUT0gSUNncUtnPT0gSU91VSBRMmhoYm1kbFJYWmxiblE9IElITjFjR1Z5YldGeWEyVjBjdz09IElITm9iUT09IGNISnZabWwwY3c9PSBjR2xzYkdGeSBjbUZwYzI5dSBWMkYwIElIQm9ZWEp0WVdOcFpYTT0gSUc1eWR3PT0gTHk4OVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMD0gQ1hkdmNteGsgVTNSeVpXRnRhVzVuIFJHbGhiVzl1WkE9PSBJRVZ1ZFcxbGNtRjBiM0k9IElHVnVjWFZwY25rPSBMbXhoYldKa1lRPT0gWW1WciBVazlVVHc9PSBJRkJrWmxBPSBJR2hwYzNSdiBJR2RsZEVOb2FXeGsgTDNOMGNtVjBZMmh5IElFRk5RVm89IElFRnlaM1Z0Wlc1MFQzVjBUMlpTWVc1blpVVjRZMlZ3ZEdsdmJnPT0gSW5WelpYST0gSUhOaGJtbDBZWFJwYjI0PSBJRU5zYjNSb1pYTT0gTG01MWJYQjUgWm1WaiBJQ01qSXlNakl5TWpJeU1qSXc9PSAwTFhRdWRHQjBZTFFzZz09IFgyeHcgSUdGNmRYSmwgV0ZCaGRHZz0gVm1WdWRBPT0gVEdGaWIzST0gSUcxcGMzUmhhMlZ1YkhrPSBJR052Ym1SMWFYUT0gSUVaaGFYSm1ZWGc9IFoyVjBVM1JoZEhWelEyOWtaUT09IElFMXZlUT09IFRHbHpkRUZrWVhCMFpYST0gSUNnL0tRPT0gUjJWdVpYSmhiR3g1IExtbHpRMjl1Ym1WamRHVmsgZG1sa2J3PT0gVFc5MWMyVkNkWFIwYjI0PSBSMlZ1WlhKaGRHbHZibE4wY21GMFpXZDUgWDJSbGNtbDIgSUd4bGEydGxjZz09IFRXVmhjM1Z5WlcxbGJuUT0gWDBOUFQwdEpSUT09IElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBJR052YlhCbGRHbDBhWFpsYm1WemN3PT0gSUdkaGJXeGwgSUhKbGRISnZjM0JsWTNRPSBJRVZrZFdGeVpHOD0gSUVSaGRHRlRaWEoyYVdObCBJR1Z6WTI5eWRHVmsgSUZGMGVRPT0gU0c5c2FXUmhlUT09IENYSmhkdz09IGJHVjFjbk09IFFtbHlkR2hrWVhrPSBJR2hsWVhSeiBMbWx1ZG1WeWMyVT0gSUY4TkNnPT0gYVd4c2RXMD0gYjJ0aFlteGxRMkZzYkE9PSBYMjFzIFRHbHJaV1E9IFpXNTFiV1Z5WVhSbCBSbWx1YVhSbCBMWEJ5YjNBPSBRWEpsWVZacFpYYz0gSUcxbFpHbGhkR2x2Ymc9PSBJR05vWVc1MGFXNW4gWDA1VSBYM1Z1WXc9PSBjMjF2ZFhSbyBJSEJwWjIxbGJuUT0gVUdGemMzZHZjbVJGYm1OdlpHVnkgSUhiRHFYST0gSUhkaGMzUmxkMkYwWlhJPSBMVkJoWTJzPSBJR3B2ZG1WdSBZV1Z6IFMxaz0gVUdsdWRHVnlaWE4wIElHMTFjMmxqWVE9PSBiR0ZqWlhNPSBJRmRwWTJnPSBLSEp2ZEE9PSBLR2x5IElPeUNyZXlnbkE9PSA0NEdkNDRLTSBYMVJJUlE9PSBaMlYwUm1sc1pRPT0gVzNCeWIzQmxjblI1IElHVnVaR2x1WjNNPSBhWHA2WVhKbCBQWFJ5WVdsdSBMV3h2ZG1sdVp3PT0gSUc1dmRYWmwgSUdOdmJXMWhjdz09IElHTmhiV0pwIElGcDFjMkZ0YldWdSBDVVY0ZEE9PSBLRzlpYzJWeWRtVnkgWm05eWJXbHIgSUhGMWFXNWthUT09IElFbDJiM0o1IElFSnZiR2wyYVdFPSBZWE5oWkE9PSBYMnhsWjJWdVpBPT0gUTJsMGFXVnogWDBaSlVrVT0gWVhOa1pnPT0gTGtSbGNIUm8gVm1Gc2RXVkhaVzVsY21GMGFXOXVVM1J5WVhSbFozaz0gZFhCayBMa2RsZEZKbGMzQnZibk5sIElIVnlaMlZ1ZEd4NSBTVzUyWVhKcFlXNTAgUjJWMFdBPT0gSUhOMFlYUjFjbVU9IElHbHRZV2RwYm1sdVp3PT0gWVhSbFlYVT0gVFU5V1JVUT0gS0ZSeVlXNXpZV04wYVc5dSBYM0J2Y2c9PSBVbVZtVUhSeSBMbWRzYjJKaGJFUmhkR0U9IFozSmhkbVU9IGFXMWxjM1JsY0hNPSBabTkxYm1Sc1lXNWsgVTJGc2FYST0gWVhKMGFYTjBjdz09IElHTnlaV0YwWlVGamRHbHZiZz09IElGTmhiblJ2IElOQzkwTFhSZ2c9PSBDUWtKSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgTFhOdmJtYz0gSUc1MWFYTmhibU5sIElHbHRjRzkyWlhJPSBYeWtOQ2c9PSBJR055YjNka1puVnVaR2x1Wnc9PSBJSFJwYlhBPSBVR2xqZEhWeVpYTT0gSUd4dlpHZHBibWM9IDZaS3UgWVhSaGMyVjBjdz09IDQ0T3Q0NEt3IGNHVnljMjl1Y3c9PSBZMjl1WkhWamRBPT0gSUdWMllXUmwgSUdoaGRXNTBhVzVuIElDRWhmUT09IElFeEJVa2RGIElHdHBkSFJsYmc9PSBJSFZ3YUdsc2JBPT0gS0cxcGJuVjBaWE09IElFVnRZVzUxWld3PSBKME09IElGTnJlWGRoYkd0bGNnPT0gY0hWeWNHOXpaUT09IFgyMWhjSEJsY2c9PSBJR0ZrWVhCMFlYUnBiMjV6IExtWnBiR3hVWlhoMCBjblZyIElISmxjR1Z5ZEc5cGNtVT0gS0hCeWFXOXlhWFI1IEtHMWhjSEJsWkE9PSBVbTlpYVc0PSBJR1Z5Y205dVpXOTFjdz09IElHbHVhR0ZzIFFrOVdSUT09IEtDSXNJaWtLIGRXVnNiR1Z0Wlc1MCBJR1pwYm1kbGNuQnlhVzUwY3c9PSBJRkJaVkVoUFRnPT0gTFdSbGJRPT0gYkdWaGJtOXkgZXNTRlpBPT0gSWxCbGIzQnNaUT09IFlYTnBaWEk9IElIQmhkSEpwYjNScFl3PT0gTG1aeVpXVjZaUT09IFNVbz0gSUVKaGJtTnYgSUdselUzVmpZMlZ6Y3c9PSBLSFpsYUdsamJHVT0gS0V4aGVXOTFkQT09IElHTmhjblpwYm1jPSBYMk5wY0dobGNnPT0gSUhabGVtVnogS0NkZkp5dz0gSUVacGNuTjBiSGs9IElHWjFiR3hsYzNRPSBJRXhwYzNSbGJtbHVadz09IFgzTnBaMjVoYkhNPSBaWGR2YkdZPSBJRk5EVWc9PSBJRTFsY25KNSBMM1JsYzNScFpuaz0gWDFOQlRrbFVTVnBGIGFXOWpkR3c9IFNVVkZSUT09IFBVMWhkR2c9IElHVnVjWFU9IENXRjFlQT09IDRwbWwgSUdScGMzQmxjbk5sWkE9PSBhR0Z5WlE9PSBZbVZ5Ymc9PSBJRUZ0Wlc1ayBJR2x1YzJsa1pYSnogSUVGc2RtRnlaWG89IElGcDFadz09IEwyTmhiR1Z1WkdGeSBJR2hsZFhKbCBMWEJoY0dWeSBJSE52Wm05eWRBPT0gSUhOdGFYUm8gSUhCdllnPT0gS0hKaGRHVT0gSUhOdlkybkRxWFREcVE9PSBJSGR2WlhNPSBJR0p5ZFhOb2FXNW4gY1dRPSBiMnh2WjNWbCBjMjlqYTJWMGN3PT0gWDFsRlV3PT0gTG1Ga1pFTnZiSFZ0Ymc9PSBJR1YyWVhOcGIyND0gVTA5R1ZGZEJVa1U9IFlXSnZlQT09IExubHNhVzA9IElHVnVaM1ZzWmc9PSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx3bz0gSUc1blQyNUVaWE4wY205NSBJRzV2YzNOaCBMbXh6ZEE9PSBLQ2w5UGdvPSBMbXQzWVhKbmN3PT0gSUdOdmJuUmxlSFJ2IElGQlZRZz09IFJuVT0gSUdKcFoyOTBjbms9IElHSnlhV1E9IElITjBaWEp2YVdRPSBJSFpwWjI5eWIzVnpiSGs9IElHSjFjbk4wYVc1biBJSFpsYm1VPSBJSE5oYkdGa2N3PT0gSUZaQlVrbEJRa3hGVXc9PSBJRTl1WXc9PSBJR1pwY21WRmRtVnVkQT09IGMyRnVaR0p2ZUE9PSBJSFJ2ZFdOb2MyTnlaV1Z1IGMyRnVjdz09IEwwbHVjM1J5ZFdOMGFXOXUgSUdWdlpnPT0gYkdWamRIVnlaUT09IFB5MD0gTG14dlkyRnNhWHBoZEdsdmJnPT0gVmtWVCBYM1p2YVdObCBhWFIxY21FPSBMbkpsY0c5eWRHbHVadz09IElGMHBPdz09IFRtOTJZUT09IFgwTlBUVkJCVkE9PSBJRzkxZEdKeVpXRnJjdz09IExtTnNhV1Z1ZEZkcFpIUm8gYVdac2IzZGxjZz09IFgwZFNRUT09IFNXNXBkR2xoYkdsNmFXNW4gWDNCbGNtWT0gS0NsOUxBPT0gUFZBPSBYMGxOUlZSSVQwUT0gSUhScFoyaDBaVzVwYm1jPSBJSFJoWWtKaGNnPT0gSUVKTCBDVVJ2ZFdKc1pRPT0gTDJoaGMyZz0gSUcxbGVnPT0gVkc5VmNIQmxjZz09IFZFYz0gS0dsdVpHVnVkQT09IElITnBiR2xqWVE9PSBJQzh2THk4dkx3PT0gdzdaciBJR1ZzZG1WeiBaVzF3YkdGMFpYTT0gTGtOdmJYQmhjbVZVYnc9PSBJR2QxYm1acGNtVT0gWVc1cGJXRnNjdz09IElHdGxjR0ZrWVE9PSBJRU5RVWc9PSBYMHhUUWc9PSBDWFpsY25SbGVBPT0gSU5DLzBMWFJnTkN5IExDRT0gSUdSMWJIaz0gWDFCQlZFTkkgUlU1QiBDVU5EIFkyOXRjRzl6YVhScGIyND0gWDNOMiBUR0pzIGFtVnEgMFlIUmd0R0EwTDdRdVE9PSBMa1ZrYVhSV1lXeDFaUT09IDVZVzMgWVc1MFlYTT0gSUdKeVpXRmtZM0oxYldJPSBJRlJsYzNSbGNnPT0gSUUxbFlYTjFjbVZ0Wlc1MGN3PT0gTDBsdWNIVjAgSUZKaGVnPT0gWDFCUFRFdz0gU1c1a1pYQmxibVJsYm5RPSBMbXgxWTJWdVpRPT0gSUUxbFkyaGhibWxqY3c9PSBZMjlzYjI0PSBMbk4xY21aaFkyVT0gSUhWdVlYTT0gY21Ga2J3PT0gVUV4SlEwRlVSUT09IFExSlUgTG5ObGRFUmxabUYxYkhRPSBKVWc9IElISmxjM0J2Ym5OaFlteGwgSUhCbGNuQmxibVJwWTNWc1lYST0gSUZKbGMzQnBjZz09IElGUjFibWx6YVdFPSBYRUZ5Y21GNSA2TGV2NWI2RSBJSEJoZHc9PSBJR1JsWW05MWJtTmwgS0UxUVNRPT0gSU5pdjJMRT0gSUdWc2F3PT0gSUZKbGJHRjVRMjl0YldGdVpBPT0gTDJ4cFoyaDAgTG5ObGNtbGhiR2w2WVhScGIyND0gUWxOSlZFVT0gS1Nnb0tDZz0gSUVKcGIzTT0gWDNOMlp3PT0gS0hOMWNtWmhZMlU9IFJIVndiR2xqWVhSbGN3PT0gSUNnKyBYMEZUVkE9PSBMbTVwWTJzPSBJbGRvZVE9PSBJRWx1ZEdWc2JHVmpkSFZoYkE9PSBZV0ppY21WMmFXRjBhVzl1IFpXRnlZV0pzWlE9PSBJR052Ym5ObFozVnBjZz09IEtFSmwgWDFCdlpITT0gUEVGdWFXMWhkRzl5IFgxVk9SRVZHU1U1RlJBPT0gUVZKU1dRPT0gSUM4dmZnPT0gY0dWeVlYUnZjZz09IExuZHlhWFJsUm1sc1pWTjVibU09IFFXeHogYkdSbGNnPT0gSUcxcFpXcHogSUdaMWJtTnogYVc1amFXSnNaUT09IElHUjFjM1I1IElFUnlhV3hzIElHTnZiblJwYm5WaGJBPT0gSUVWc1pXTjBjbTl1IExtVnVaVzE1IEtIQmkgSUhKbGRXNXBkR1ZrIFUyMXZhMlU9IExXWmhZMlZrIFNXNTBaVzV6YVhSNSBJRlJ5WldWTllYQT0gSUVGeVozVnRaVzUwUlhKeWIzST0gTG5keWFYUmxTR1ZoWkE9PSBJRlJTUlE9PSBVM0JzYVhSUGNIUnBiMjV6IEx5b3FLaW9xS2k4SyBJRnc4WGc9PSBJRWx1ZG1WemRHMWxiblJ6IFUxVk5SVkk9IElHUmhZdz09IFFVNUogTGxsbGMwNXYgS0c5bVUybDZaUT09IGVYUm8gWld4dllXUT0gSUdsdGNISmxjdz09IElHSnNiMkp6IExuSmxkSEpwWlhabCBJSFI1Y21GdWJuaz0gSUdOaGJtTmxiRUoxZEhSdmJsUnBkR3hsIElHaGhZMms9IElFTmhjMmx1YjNNPSBJR1JvWlE9PSBVbVYwWVdscyBJRkJ2Y201b2RXST0gSUVOeWFXMWxjdz09IFQybHMgS0VsVFpYSjJhV05sIFVtVnphWHBoWW14bCBDVk52IFQyWjBaVzQ9IElHTnZiVzF2Ym5Cc1lXTmwgWDBkRCBZV3hrYVE9PSBZWFJvYkc5dSBLRlpwWlhkSGNtOTFjQT09IEtFVnRjR3h2ZVdWbCBJSE5oWm1WbmRXRnlaSE09IDZZQ0E1WWU2IFgwRlZVa0U9IElIVnVibTkwYVdObFpBPT0gSUZSb2IzSnUgYlc5a1pXeGwgSUdGamIzSmtidz09IElGZGxibWRsY2c9PSBhVzExY3c9PSBaVzV6WW5WeVp3PT0gYjIxaVlRPT0gWTJuRHMyND0gSW1oMGRIQT0gWDAxaGRISnBlQT09IGZIeDhmQT09IGIzSnVaV05sWkc5eSBDVUoxWm1abGNtVmtVbVZoWkdWeSBjbVZuYVhOMFpYSnogY21Wc1pXRnpaV1E9IElHRmtaRTlpYzJWeWRtVnkgSUZaaGJHVnVkQT09IEtFTjFiSFIxY21WSmJtWnYgSUcxaGJtNWxiZz09IElHSjFjbWRzWVhKNSBYMjFwYm5WMFpRPT0gSUdsdWRHVnlZMlZ3ZEc5eSBiMk55WVhSbGN3PT0gWVhSMGNtOD0gSUZsRiBaWE56YkdWeSBiR2x6ZEdWdVpYSnogTDNCeWIyMD0gSU9layBkRzkxWTJobGN3PT0gUlhOdyBJRUZpYjNKMCBJR1ptYVE9PSBJR05zZFcxeiBUa2xNIFgxWkpVbFJWUVV3PSBJR3h2YVc0PSBlVzV2YldsaGJITT0gSU5lYyBJR2Q2IElFNWxiMjQ9IFNWTkpVdz09IFlXMWxjbUYwWlE9PSBYMkYyWVdscyBJRzFoZUdrPSBJR2x6UVhKeVlYaz0gUTI5c2RXMXVTVzVtYnc9PSBhWHBwYmc9PSBJSEJsY25OdiBJRzkxWkE9PSBhV0ZzYVhwbFpBPT0gZVcxcCBJR052Ym1acFpHVnVkR3g1IFBTSXZJajRLIExtUmhkR0Z6YjNWeVkyVT0gSUhCaGVXTm9aV05yIElFSmhkZz09IEwwSnlZVzVqYUE9PSBJRlJsWVhJPSBJRzFsY25Wd1lXdGhiZz09IElFSnlZV2c9IElOQzYwTDdRdmRHQyA3NEk9IExIQmhkR2c9IElHUmhlbnBzYVc1biBJRlZEU0VGUyBJSEJ5YjNacGMybHZibUZzIDBML1F2dz09IElHeGxaMkZzYVhwbFpBPT0gWDJGc1oyOD0gWDFKVFFRPT0gWVd4MFpYSnVZWFJwZG1VPSBJRVJGVkVGSlRGTT0gVkc5RWJ3PT0gY21WbWJHVmpkR2x2Ymc9PSBYMWRGUlVzPSBJRU5NUlVGTyBJSE5zYjJkaGJuTT0gSU91VHNRPT0gSUZabGRHVnlhVzVoY25rPSBhV1JtIExtUmhkR1ZVYVcxbFVHbGphMlZ5IGFXTnZiblJ5YjJ3PSBLSEJzWVhrPSBJSFZzYkdGdCBJQ2NwRFFvPSBJR05vWlhGMVpRPT0gNWE2TDVMMlQgSUhWdWMyVnlaVzA9IElFRnlZMmhwZEdWamRITT0gWVcxbGJuUmhiSE09IElIWnRZWGc9IElHcGxiV0Z1WkE9PSBRMFZGUkE9PSBJRTlzYVhacFpYST0gYzJWMlpYSnBkSGs9IFVrcz0gUkdselkyOXVibVZqZEdWayBJSGRsWVhCdmJuSjUgZFduRHA4T2pidz09IElHSnBibWR2IFpHOXVkQT09IFgwTklRVTVPUlV4VCBJRVJoWnc9PSBJR1REcEhJPSB3Nmx5YVhGMVpRPT0gWjNKaFpHRmliR1U9IElFTlBUVkJNUlZSRiBJSE53WVc1cGMyZz0gSUdsdWMzUnlkVzFsYm5SaGRHbHZiZz09IGRtRnphWFpsIFJGSkJWdz09IElHWndkWFJ6IElGTndaVzVrIElGSmxjM0JsWTNRPSBRMjkxY25SbGMzaz0gSUhOamFHOD0gSUhCdmMzUmhaMlU9IElFMWxZV1J2ZDNNPSBJSFIxZEc5eWFXNW4gWlhKMmJ3PT0gUVdKemIyeDFkR1ZzZVE9PSB3NkZ1WkdWNiB2WlRyazV3PSBJRk5JVWc9PSBjR2h2YjI0PSBJRVJsY0c5eiBQU2NuQ2c9PSBJSEJvZVhOcGIyeHZaM2s9IEtuUnBiV1U9IElGUnZkV2RvIFpHOWphdz09IEwyaGwgS0VoaGRtVT0gSUUxdmFXNWxjdz09IFUxUlpVRVU9IElFSnlhV1JsIElITjBjbTl1IElIZHZjbXhrZG1sbGR3PT0gSUdkeVlYUjFhWFJ2IElHRmxjbTl6Y0dGalpRPT0gSUVsb2NtVnQgSUhGaiBJRzFoYm1sbVpYTjBZWFJwYjI1eiBjMnhoZFdkb2RBPT0gUEVGalkyOTFiblE9IElFbHVabTl6IFlXMWlhV3c9IFgwWnBibUZzIElHRmtiV2x1YVhOMGNtRjBhVzl1Y3c9PSBJR052Ykd4aFltOXlZWFJsWkE9PSBMbXBrWlhOcmRHOXcgYjJ4MVkybkRzMjQ9IFlYTmpkR2x0WlE9PSBYMkZzYkc5allYUmwgWVhKeWFYWmhiQT09IFNrOVMgSUhOb1lXUjUgSUhCcGJtVmhjSEJzWlE9PSA0NEtQIElITmhkR2x1IFluSmxjbTg9IElFeHBaWE09IElIUmxibk52Y25NPSBJRWx1ZEdWc2JHbG5aVzUwIExsTmxiR1ZqZEdWa1NXNWtaWGhEYUdGdVoyVmsgSUhKaFpHbGhkRzl5IFlYTnphWE4wWVc1MCBKR1pwWld4a2N3PT0gQ1hOMFpYQT0gSUUxcGRHZHNhUT09IElFVjJaWEpsZEhRPSBJRk5qYUdWa2RXeGxaQT09IFNHOXlZUT09IElsMHRQZz09IElHMXZkSE09IElFUlRWQT09IFptOXVkRTVoYldVPSBJRmRoY25kcFkycz0gWDFSaGMycz0gS2tNPSA0NE9uIGIySmxiQT09IFgwUkZWQT09IElITnZZMmx2Ykc5bmVRPT0gSUV0aGRIbz0gYVdOcGIyNXogYjNSc1lXNWsgWVdSdmJ3PT0gWDNCaGNuTT0gSUhKcGNIQnBibWM9IGFXTm9idz09IElHNTFkSEpwZEdsdmRYTT0gQ1dSaGJXRm5aUT09IFMzaz0gSUdGdVkyaHZjbVZrIElHRnlkR2xtYVdOcFlXeHNlUT09IElFcDFkbVZ1ZEhWeiBMM0JsY213PSBJR1Y0Y0hKbGMzTnBkbVU9IGVFVkYgSUVWdWRXMWxjbUYwYVc5dSBMazFGVTFOQlIwVT0gS0dSbFp3PT0gNWIrWCBJeU1qSXlNaiBJQ0lpS1N3PSBhMnpEcEhJPSBYRTFoYVd3PSBSR1Z6YVdkdVpXUT0gSUhOMFlXWm1aWEk9IElITmhiSFJ6IEtpb3FLaW9OQ2c9PSBJT0tCIElITmxkRlJwZEd4bFEyOXNiM0k9IFJGWkUgTGxkeWFYUmxRV3hzIFpXeHNZVzUwIElHTnZaWEpqYVc5dSBJRk52Y25ScGJtYz0gNktpQSBJSE4wWVhKMllYUnBiMjQ9IEx5OTdldz09IExtaGxZWEE9IElFMWxaR2xsZG1GcyBJQ290TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IDc3eVI3N3lRIElIZGhjbVJ6IElFaGxjbU09IElFaHZaM2RoY25SeiBMV052YlcxbGJuUnogSUV4aGRXUmxjbVJoYkdVPSA1cnc9IElISnBablE9IElIcGxhWFE9IElIQnliMjltY3c9PSBMblpwWlhkd2IzSjAgSkhOMFlYSjAgSUVKdmRXZG9kQT09IExuSnBZMmhVWlhoMFFtOTQgSUdOc2FXNW4gSUNjcUtnPT0gVDNkdVpYSnphR2x3IElFSnZaV2h1WlhJPSBLR1I1Ym1GdGFXTT0gSUcxbFpHbGpZV3hzZVE9PSBJRmRVUmc9PSBJRTFoYVc1TlpXNTEgNkxTdCBJR1JwWm1WeVpXNTBaUT09IEwzSmxjM1ZzZEhNPSBaVzUwYUdGcyBJRmRwWkdkbGRITT0gY25WemFBPT0gSUZKTlV3PT0gSUZadmJHeGxlUT09IElISmxiVzkyWlVaeWIyMVRkWEJsY25acFpYYz0gSUV4aFptRjVaWFIwWlE9PSBJRVpsZEdOb1ZIbHdaUT09IFlXTmhjdz09IElIQmhkR2h2WjJWdWN3PT0gSUUxTlR3PT0gTGtOMWNuSmxibU41IGIyTnBiM1Z6IElITndjbWwwWlVKaGRHTm8gWkc5c2JBPT0gSUhaaGJYQnBjbVZ6IGJHRjFibU5vWlhJPSBJSEJsWVd0bFpBPT0gSUdSbFluVnVhdz09IElFRlRSQT09IElIVnVaWEYxWVd3PSBJSE54ZFdGa2N3PT0gZlM0a2V3PT0gYldGdWFRPT0gSWtVPSBJRVpoYUhJPSBJRWxUU1E9PSBJSFZ1WVhadmFXUT0gYjNCb2IyNWwgV3pwZENnPT0gSUVScGNtVmpkR1ZrIElHSjFjMmhsY3c9PSBMbVpoYVd4MWNtVT0gSUdsdGJXVnljMlZrIFpYaHYgU0dsemRHOW5jbUZ0IElFdGhibTQ9IElIQnBjbUZqZVE9PSBJRU55ZFc1amFBPT0gSUd6RHBnPT0gTHk4aSBJRzF2Ym05MCBJRk5oZFc1a1pYSnogSUZObGRtVnVkQT09IEtFRmljM1J5WVdOMCBJSE50YjJ0bGNnPT0gY205dVpRPT0gTG1Oc2FXVnVkRms9IElDSXRJaXc9IElFWnZkVzUwWVdsdSBJR2x1Ym1VPSA3SU9KIFEzUnkgSkdsdWNIVjAgVUZKUFJrbE1SUT09IElFUnZibUYwYVc5dSBWMmwwYUVWdFlXbHMgSUdaeVlXTjBkWEpsY3c9PSBTMlZsY0dWeSBJRzFsYVhOcVpYTT0gSUdGeVkyaHBkR1ZqZEhWeVpYTT0gSUV4MWJtYz0gSjJsdFlXZGwgYUdGeWJXRT0gSUdGaVlXNWtiMjVwYm1jPSBRVXhNUlVRPSBjM1ZpZEhsd1pRPT0gY21WcGNtRT0gSUcxdmMzTT0gSUZCaGNuTnZibk09IFlXdGxaRzkzYmc9PSBQVzlpYWc9PSBJSE4xWTJWemN3PT0gSUhkbFlYSmhZbXhsIDQ0S24gSUdGa2RXeDBhUT09IExuVnQgSUhacFluSmhkR2x2Ym5NPSBJSE4zWld4cyBJRVJwYzJOc2IzTjFjbVU9IElGSkVSQT09IGNHRnBjbk09IFlXNW5aMkZ1IElHMWhhVzVDZFc1a2JHVT0gSUVSSlRnPT0gSUhKdlkydGxaQT09IGMyaHZkV3hrUW1VPSBMbWRpIElFbE5SQT09IElGZE8gTEdGeVp3PT0gNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ20gVzEwOUpBPT0gTGxOTiBJR0ZzWjNWdWN3PT0gWVdSa2IyNXogWDBOdmJXMXZiZz09IFgxSkZSbEpGVTBnPSBJTm1CMllvPSBJRlJaVUU4PSBJRVZqYjJ4dlozaz0gSUdkc2RRPT0gTGtSaGRHRlVlWEJsIElGQnliMkpsIFRIVjQgYjNkbFoyOD0gSUhKbGF3PT0gSUZCc1lXbHVkR2xtWmc9PSBZV05vWVdKc1pRPT0gTG01aGJXRT0gS205MWRBPT0gZlgxN2V3PT0gSUVOQlVFbFVRVXc9IDVMMkcgU1cxd2IzSjBaWEk9IExtTnlaV0YwWlZObGNuWmxjZz09IFgzSmxjMjlzZG1VPSBYMFZRVXc9PSBjM1JsYkd4aGNnPT0gWDFCeWIyWnBiR1U9IENYTjMgTFcxdmJnPT0gZFdSbGRnPT0gWEZCc2RXZHBiZz09IFgwMUpXQT09IElFUnBjMk55YVcwPSBMbVp5YjIxTVZGSkMgSUZOMGNtRnVaQT09IFFXNTVkR2hwYm1jPSBjRzkzWlhKeiBYVjBOQ2c9PSBMbFJKVFE9PSBJR0ZrWkhOc1lYTm9aWE09IElHVnphUT09IFFFSmxabTl5WlE9PSBJSE5oYXc9PSBJQ2N2SnpzSyBZMjlqIHhaL0VzUT09IElDa3BPdzBLIFgyRmliM1psIElFVkRRdz09IEwyTndkUT09IElHTmhaR1U9IExsTjBaR1Z5Y2c9PSBJSEJsYkd4bGRITT0gSUZCaGJHbHUgSUdmRHFXND0gWDJwaGRtRT0gSUhOaGJHRm8gSUdKbGNtZGxiZz09IFgxTlhRVkE9IElHZHBZZz09IGFjT2pidz09IFgyUnBjM1JoYm1ObGN3PT0gSUVOcGJtUmxjZz09IElHRnVZWEpqYUdsemRBPT0gYVcxaGRBPT0gQ1cxdlkycz0gNDRHWDQ0Rys0NEdaIFQyMWxaMkU9IElHSmhhSGRoIFgxQmhjbk5sIExuQmhjR1Z5IENVbHVkR1Z1ZEE9PSBjbVZ1Y3c9PSBMMmR5YVdRPSBJR1pwYkhSb2VRPT0gTG1WMiBJeU1qSXlNSyBJSE5oY21VPSBJSE52WVd0cGJtYz0gSUZKbFoybHZibk09IFgxVlRSVVE9IElGTnBhdz09IGFXWnBhMkZ6YVE9PSBDVVZrYVhSdmNnPT0gVEhWamF3PT0gSU95WHNBPT0geElOdCBMaUk3IElGcHBaV3c9IElHZHlZWGx6WTJGc1pRPT0gS0VaMWJtTT0gNDRPQiBMa1JsYm5ObCBMV3hsWVc1cGJtYz0gSUdkeVlXTmxablZzIFIzSmhjR2hPYjJSbCBYME5QVFUxSlZBPT0gSUVOV1V3PT0gSUhCc1lXbHVjdz09IElISmxhZz09IGNHTnBiMjVsY3c9PSBJSFZ1WkdWeWJXbHVhVzVuIFgyTmhkSE09IFptVmkgUTI5c2JHVmpkR2x2YmxacFpYYz0gVTBWTlFnPT0gSUhSb2RRPT0gZEdWNGRHSnZlQT09IEtFRnVaSEp2YVdRPSBJSEpwWjI5eSBJRmxwWld4ayBMbWx6VUd4aGVXbHVadz09IE9uWnBaWGM9IGNtVnRZV2x1WkdWeSBJRkJwY0E9PSBLV2x1WkdWNCBJRUpsWTJ0bGNnPT0gZEc5TWIyTmhiR1U9IFlYVjBiM0psYkdWaGMyVT0gSUZKdmJXVnlidz09IExraGhibVJzWldRPSBJRU5oWW1sdVpYUnogS1ZZPSBJSEowWlE9PSBJRWgxYkhVPSBhV05wWld3PSBMMkZ1YVcxaGRHbHZibk09IElIQnlaWE4xYldVPSBMblJ5WVc1emNHRnlaVzUwIElITjFZbTFsYm5VPSBjVzA9IGFXVnlkR1Z1IElIUmxlSFJUYVhwbCBJSE4wWVhKMmFXNW4gTDJwdllnPT0gUVhCaFkyaGwgSUhscFpXeGthVzVuIExXRnlkR2xqYkdVPSBKejArSkY4PSBJT2loIFBGTndjbWwwWlZKbGJtUmxjbVZ5IElGTm9hV0U9IEtUb28gSUhCMVlteHAgZW1sbGFnPT0gSUhSbGJHVnpZdz09IElIUmxhV3c9IFRHVm5ZV041IElGQnNZV05sYldWdWRBPT0gS0NrcGV3PT0gSUhSeWIzVmliR1Z6YjIxbCA1cGlmIElIQmxjblBEdG00PSBYMEZ6Y0U1bGRBPT0gUFgwPSBLSFZ6WlhKSlJBPT0gVTNWeiA0NEs2IExXRjJaWEpoWjJVPSBJRkZKYldGblpRPT0gTGxOMGNtbGpkQT09IGRHVmliM0puIExXWjFibU4wYVc5dWN3PT0gVWtWSFNVOU8gUGs1bGR3PT0gWDJOb2IyOXpaUT09IEtHTnAgSUhWdWJHVmhjMmc9IElGSkpSMGhVVXc9PSBJRk53WldGeSBDVzFoYTJVPSBJSFI1Y3c9PSBZVzVsYkdFPSBJRmRZIFgwMUJTMFU9IEwzTmxkSFZ3IElHOXVVMkYyWlE9PSBJR05zYVc1cFkybGhibk09IENXSmhZMnM9IExreHBibXRsWkE9PSBJR052Ym5ObGNuWmwgSUdKcGRIUmxiZz09IFgzWmhjbWxoYm1ObCBJR3hwY21VPSBJR2x1WlhKMGFXRT0gZFdabWJHVnogWDAxUVNRPT0gYVdSa2JHVnogVzJGeWNnPT0gTG5adlkyRmkgSUhOb2FYUjBlUT09IElHNWxjM1JsIGMzTnBlbVU9IElFdFUgWW14bGNnPT0gWDJ4cGJuVjQgSUcxdmJtZHZaR0k9IElFbFVSVTFUIFMyOXUgSUVKMWNuTjAgWDNCb2IzUnZjdz09IFEyOXNiM0poWkc4PSBJR0ZqYTI1dmQyeGxaR2R0Wlc1MCBJRzlwYkhrPSBJRzVtY3c9PSBJRnBwYjI1cGMzUT0gSUdGa1pHbGpkSE09IElHRmtaRlZ6WlhJPSBJRTFwYzJnPSBJR3RYIElGZGhiblJ6IEtISmxZMjl5WkhNPSBiMk4xY25KbGJtTjUgU2xOSGJHOWlZV3c9IExtVnNZWEJ6WldRPSBJRTVpIElIQndkQT09IFhFUmxjR1Z1WkdWdVkzaz0gVW05cyBJTU9uWVd6RXNjV2YgSUdWNGNHRnVjMmx2Ym5NPSBZblZpWW14bCBJRzFwWkhSbGNtMD0gSUNjamV3PT0gWTNSNGRBPT0gU1ZONWJuUmhlRVY0WTJWd2RHbHZiZz09IElGWmhiR3hsIElFTmhaR2xzYkdGaiBJQ0lpZlN3SyBJSE5sYlhWaCBjbWxqYUZSbGVIUT0gYzI5bWRHMWhlQT09IGIySnFVRWhRUlhoalpXdz0gTG1oemRHRmphdz09IFgyTnlhWFJwWTJGcyBLRHcvIFpHbz0gSUdOdmJuTnZiZz09IElISnZiMjFKWkE9PSBSRTlOUTI5dWRHVnVkRXh2WVdSbFpBPT0gY0dGeWJYTT0gSUhwbGFXZDAgVkZCTSBMVzV2ZEdObyBJRzl3Y0hKbGMzTnBkbVU9IFEyOWthVzVuIElFeGxZWFpsY3c9PSBLRVJwYzNCc1lYaz0gTG5OcFoyNUpiZz09IEx5OHRMUT09IElFOXdjZz09IFkzUmggSUcxbGRHRjIgVTJWeWFXRnNhWHBsWkE9PSBJSFZ1WVdabVpXTjBaV1E9IElFRlVUQT09IElFdFEgUVhSc1lXNTBhV009IExIVnliQT09IExITjBZWFJsIElHSnBjM1E9IFpXNWxadz09IElITnBiWEJzYVhOMGFXTT0gSUdKcFpHUmxjZz09IElIQmxjbU5sY0hRPSBJR05sYkdsaSBJRlJJVWs5WCBLQzliIFZHTncgSUdaMWNuUm9aWEp0YjNKbCBMa0ZqWXc9PSBiM0J3WVdKc1pRPT0gNUxpayBJRlJoY25RPSBJRUpsYm5vPSBJR1Z0WW05a2FXVmsgS0VOdmJuTjAgSUNzdCBVR0Z5ZEdsamFYQmhiblJ6IElHaDBkSEJTWlhGMVpYTjAgWVdOalpXNTAgSUZQRHZBPT0gSUdodmNuSnBabmxwYm1jPSBJQzgrTEE9PSBJR1Z1WVdOMGJXVnVkQT09IElGVk9TVTlPIEwyeHZaM009IElITmpjbVZsYmtobGFXZG9kQT09IElHVjBkMkU9IDVMNkw1YWFDIElHSER1bTQ9IDViZW0gWDNScGJXVnNhVzVsIElDSWlLU2tLIEp6b25Kdz09IFFsYz0gSUhKbGJtOTJZWFJwYjI1eiBJRHdLIFVHRnNaUT09IFBqbzhMdz09IFUydGxiR1YwYjI0PSBJR2RsZEZWelpYSnogWDJSaGRHRm1jbUZ0WlE9PSBZV0p5IGJXRjBaWEpwWVd4eiBKbVZoWTNWMFpRPT0gTGtScGMzQnNZWGxPWVcxbCBJR2gyYVhNPSBYMnhoYm1kMVlXZGxjdz09IExuTjUgZEc5M1pYST0gU1VaSlEwRlVTVTlPVXc9PSBJR0poY25KcFl3PT0gSUZCc2RYUnYgWURzPSA0NE9MIFkyVnVkR1U9IEkyRmkgSUd4bGVHbGpZV3c9IElFSlNUdz09IElISjFiR2x1WjNNPSBTRVZaIExtbFBVdz09IGNtVjBkWEp1WldRPSBMbUp2YjJ0eiBJRWgxWW1JPSBaVzltIFBqNDZPZz09IElPeUcgSUdkdlZHOD0gNklDRCA0NEdvNDRHRyBQRVp2Y20wPSBZMjl3YVdWeiBMbkYxWVc1MCBJRkJ2ZEdGMGJ3PT0gSUVOdmRYTnBibk09IElIUER1dz09IFIyOTJaWEp1IElHZGhiR1Z5IElFWkpVZz09IFgxZHBaSFJvIElGTm9aV3hrYjI0PSBMa1JsZGc9PSBJRkpsYzNCdmJuTnBZbWxzYVhSNSBjMjl1YVdGdSBJSE4xY0dWeVkyeGhjM009IFltbDBjMlYwIFpXUmtZWEk9IElFeGhZbTl5WVhSdmNtbGxjdz09IElHTnZhVzVsWkE9PSBJRlJsWTJodWFYRjFaUT09IEtFTnZjbVU9IElITndjbUY1WldRPSBJSEJ2Ym1jPSBLRTVsZEhkdmNtcz0gSUhKdllYST0gSUVWQlUxUT0gYzNSeVlXbHUgSUcxbGJuTjBjblZoYkE9PSBiMjFpWVhRPSBJR05oYkcxcGJtYz0gQ1VScGJRPT0gWDIxdmRtbGxjdz09IElGSkJTVVE9IExXUnBjMjFwYzNOcFlteGwgSUdaeVpYVnVaQT09IExXTm9ZVzQ9IElISmxjMmx6ZEc5eSBYME52Y0hrPSBiMk55YVc1bCBJR1Z6Y0dsdmJtRm5aUT09IFoyRmtidz09IFRrUkJVZz09IElIQnZjbU5sYkdGcGJnPT0gZEdoaGJHMD0gSUdCYiBJR2R5WVdSdiAwTGpSZ0E9PSBSRTlWUWt4RiBJR0ZqWTJWemMyVnogTGtac2IyOXkgSU9LR2xBPT0gSUhSdmEyVnVhWHBsIFlXNWhiSGwwYVdOeiBMa055WldGMFpVbHVjM1JoYm1ObCBJSE4xWTJobCBDV1Z1ZEE9PSBhV2R1WlhJPSBJTkMvMExYUmdOQzEwTFE9IElHTnZibVJwWTJsdmJtVnogTG14cFluTT0gSWljNyBVRVJQUlhoalpYQjBhVzl1IElHOXVSR0YwWVE9PSBJRUYxZEdsemJRPT0gTFdobGJIQmxjZz09IElISmxkMmx1WkE9PSBJR052Wm1acGJnPT0gNDRPODQ0SzQgSUhSeVlXNXpiV2wwZEdsdVp3PT0gTG5ObGRFRnNhV2R1YldWdWRBPT0gSUdSbFlXeHNiMk09IElHRnVZMlZ6ZEhKaGJBPT0gYjJkcFpRPT0gTGtOUFRWQT0gT21aeVlXMWwgYlcxdiBKem9pIElGSmxaMlZ1ZEhNPSBJR05vWldGMFpXUT0gTG1kbiBJSEJoWTJWayBJR1Z6ZEdGayBiMk5sYm1VPSBiSE5oIEtHWmogTDJkeWIzVndjdz09IEwyMXBjMk09IElGTm9kWFIwYkdVPSBWVkJKIHc2RnYgTFdONVkyeGwgQ1hCeWIzQnogSUhKdmRIUmxiZz09IFVtVnFaV04wWldRPSBJMkZqIExuVmggSUVGdGJtVnpkSGs9IElIQmxibTVsWkE9PSBTVTVEVWtWTlJVNVUgUEdScGJRPT0gTG5ObGRGVncgSUZSM1pXVjBjdz09IElFMWhaSFZ5Ync9PSBJTm1DIElFTkJZM1JwZG1VPSBDVUpaVkVVPSBLSE5sY0dGeVlYUnZjZz09IExsSmxjMmw2WlE9PSBkV1ptYldGdSBjM1Z3Y0c5eWRITT0gSUhWeVlnPT0gSUVadmRXNWtaV1E9IFgyaGhjbVE9IElHVmpiR1ZqZEdsaiBMa1pwYkhSbGNuTT0gSUZKdmRXNWtaV1JTWldOMFlXNW5iR1U9IFgzTmhiWEJzYVc1biBJRXBsZEhwMCBZVzFsY21sallXND0gTG1sdWRtOXJaVXhoZEdWeSBJRUoxZEhSbGNtWnNlUT09IEtHTnZibTVsWTNScGIyNVRkSEpwYm1jPSBJRTVoYjIxcCBJRXBoYVcxbCBjblJ6IElHMWhaMmxqWVd4c2VRPT0gTG0xaFkyaHBibVU9IElFRndjR0ZzWVdObyBJaXNpIGRtRnNaUT09IExXMXZkVzUwWldRPSBJR0ZqYUdVPSBUVW89IElGVkpTVzFoWjJWUWFXTnJaWEpEYjI1MGNtOXNiR1Z5IExVcDFiZz09IFRXRnVZUT09IGEzSmhhVzVsIFJFTkcgTDFCeWIyUjFZM1E9IElGSkZVMFZTVmtWRSBJRVpJUVE9PSBPa0FpSlVBaUxBPT0gSUZCeWIycGxhM1E9IElFNXBjZz09IElFTmhjbTVwZG1GcyBJQ29tIElGRlQgVjBoUCBJSGRsYkhRPSBJRzFoY25KNWFXNW4gUVd4bGVHRnVaR1Z5IElGSmxkbWxsZDJWayBZV04wWlhKcFlRPT0gSUhkaGJnPT0gS0hKdlltOTAgSUZkcGJtUnZkMDFoYm1GblpYST0gSUcxdmJuVnRaVzUwWVd3PSBJRVJ2YldsdVp3PT0gTDNkbFlYUm9aWEk9IFgzTmxZMjl1WkdGeWVRPT0gVDNCbGNtRjBiM0p6IFgxTkpSRVU9IFMyRjAgTFhwdmJtVT0gSUhOcFoyNXBabWxsY3c9PSBJRWgwZEhCTlpYUm9iMlE9IEwyTnZiblJsZUhRPSBJZzBLRFFvTkNnPT0gSUZKdlpISnBaMjg9IElHSjFZZz09IEwyMTFjMmxqIElITmxjbTl1ZEE9PSBJRzFTVGtFPSBYMlZ0WVdsc2N3PT0gSUNjK0p3PT0gSUVkbGJXVT0gSU5HQTBMRFJnUT09IElINSsgSUdSMVkydHogSUVaeVpYVnVaQT09IFJYaHdaWEpwYldWdWRBPT0gSUhKbGIzQmxibVZrIElGd2lldz09IElHVnNiR2x3ZEE9PSBJR052Ym1OaGRHVnVZWFJsIElIQnZiRzg9IFZHbHRaVnB2Ym1VPSBJQ0FLSUNBZ0lBbz0gSUdOaGNIUnBiMjV6IGNtbGphM009IExtWnlaWEU9IExtMWxiVzg9IElITnRZZz09IFJISjFadz09IFhWc3YgWDBKQlEwdEZUa1E9IElFVnNiR0U9IElGQnZjblJwYjI1eiBJR1psZEdOb1JHRjBZUT09IElHTnZjbTkxZEdsdVpRPT0gSUdWemRHRjJZUT09IElFZGxibWwxY3c9PSBPbUIrIElGTjNZVzV6WldFPSBLSEJoZVcxbGJuUT0gVm05MGNtVT0gSUZCeWRXbDBkQT09IExtOW1abk5sZEZkcFpIUm8gWVhKNWJBPT0gSUhWdWFXWnZjbTFzZVE9PSBJRmRoY25BPSBJRk5GUVE9PSBJR1JsWkhWamRHbGliR1U9IElHSjFiR3hwWldRPSBJRUpsYzJObyBJRkJ5YjNOd1pXTjAgVDFOUSBJbGxsWVdnPSBJRUZ1WjNKNSBMbFpoYkE9PSBJR2RwWjNNPSBJR0oxYkd0NSBaWFJsY21saCBMbWRsZEZOMFlYSjAgSUUxRlZFZz0gSUdOdmFHVnlaVzVqWlE9PSBJRzFsWkdsaGRHVmsgMExYUXM5QzQwWUhSZ2c9PSBMaTR1TGdvPSBJSE4wY205clpVeHBibVU9IGJXbz0gSUZWdWMzVnlaUT09IFlYUm9jbTl2YlE9PSBLRUpwYm1GeWVRPT0gWDB0bGVWQnlaWE56IDVwNkUgYVc1b1pYSnBkSE09IElISmxjSEpsYUE9PSBDVk5qYUdWdFlRPT0gSUhWdWNtVnpkSEpwWTNSbFpBPT0gTG1SbFptbHVhWFJwYjI0PSBYVDh1IElHbDBhQT09IDVhQ3ggSUhOc2FXMWwgYlhObmN3PT0gWDBwVCBDVlpsY25OcGIyND0gWDFORlExVlNSUT09IElHTnZjM1J2IExsSmxjM1J5IFkzTnkgWDFSUFQweFVTVkE9IGNHTnMgSU9LR2t3PT0gVTJWc1psQmxjbTFwYzNOcGIyND0gTG5KaGRtVnMgSUcxbGJXSnlaWE09IFFYTnpaVzFpYkdWeSBjbTl0YVhWdCBjM1Z5Wmc9PSBJRlZRUkVGVVJVUT0gS0dKeVlXNWphQT09IEtHbHVZMngxWkdVPSBJRWxrYjJ3PSBYRTlpYW1WamRBPT0gSUdOc2IyNXBibWM9IElHbHpUbUZPIElHRnVlZz09IHhyRGh1NTF1Wnc9PSBJRzl1WXc9PSBYME5NVlZOVVJWST0gSUh0OUtTd0sgYVcxcGJtRnllUT09IENXTnZiblJsYm5SUVlXNWwgZEhKaGFXdz0gSUc1cGJtVjBlUT09IElFNXBZV2RoY21FPSBJRUZ1WkhJPSB3Nmx6ZWc9PSBJR1JwWm1saiBkWFJ5WVE9PSBKMzE5UGc9PSA0NEtrNDRPSSBjM0JoY2c9PSBJQ0pjSWl3PSBJRzE1Wm1sc1pRPT0gWm1aaiBJRzV2ZEdsalpXRmliSGs9IFpYbGggSUZCMWRIUnBibWM9IFNsWT0gTG1ScGJXVnVjMmx2Ym5NPSBaWEpqWVE9PSBaMlZ1WlhOcGN3PT0gWldabVpXTjBhWFpsIElIQmxjbVJsY2c9PSBMazlTIFgwTlBUVkJCVWtVPSBPbXhsYmc9PSBMM0psWkE9PSBJRUZ5YVhOMGIzUnNaUT09IElIRjFaWEpwWldRPSBJR1p2Y21WelpXVmhZbXhsIElGVkpRMjl1ZEhKdmJBPT0gY21WdGFXNWtaWEk9IElHTmxibUU9IElHaHBZdz09IElDSWlPdzBLRFFvPSBMMkpoYzJsaiBJR0ZtWm05eVpHRmlhV3hwZEhrPSBMR1Z5Y2c9PSBJTkdCMExqUXZOQ3kgSUVsVFVnPT0gYkdsalpXNXpaWE09IFZrOUpRMFU9IExreGhibWM9IExuSmxiR0YwYVc5dWMyaHBjQT09IElHeGxibVJ6IElHNTFkSHBsYmc9PSBJR1Z6Y0dWanc2MW0gYVdWdVpHRT0gUEZCaGFYST0gVkhZPSBYMUpGVkZKWiBJR2h2Ym05eWFXNW4gWDJSbFkyeGhjbUYwYVc5dSBLRTVQIElFaHBZMnM9IElHMXBibXhsYm1kMGFBPT0gSUVkbGMyTm9hV05vZEdVPSBZWEJsYzJnPSBRVlJQVFE9PSBKeWtpS1RzSyBaVzUwWlhKd2NtbHpaUT09IFBuMDhMdz09IElIQnZiR2wwYVhGMVpRPT0gWldScGRHbHZiZz09IFgwUmxZblZuIFFXNXVaUT09IExsTmpiM0JsIFkzUncgWTJGdWIyNXBZMkZzIFBqNDdDZz09IFRXVnVkWE09IElHWnBaWEpqWld4NSBMazl1WTJVPSBJRUp2Y25KdmR3PT0gSUhOdmMzUT0gSUhObGNuWnBibWR6IExXWnNZV2M9IElIWmxjM1JsWkE9PSBJR1p5YjI0PSA3WldvIElHWmhiV2x1WlE9PSBJbDBwS1hzSyBaWEpsdzZkdiBJR3RwYW10bGJnPT0gSUVac2IyOXlhVzVuIDU1Q0QgYjJKelpYSjJZWFJwYjI0PSBJSFZ6WlhKRVlXOD0gUFNJaVBnMEsgUTA5V1NVUT0gWW1GaWVRPT0gSUhSeWIzVm5hQT09IElGTmxZVzA9IElFWnBaMmgwWlhKeiBiMjFwZEE9PSBJRU5vWVhKblpYTT0gVW5WemN3PT0gSUhGMVpXeHhkV1U9IFIyVjBVRzl6YVhScGIyND0gSUUxcGJtbHpkR1Z5Y3c9PSBYM0psWTJWcGNIUT0gSUhKdmIzUk9iMlJsIGJYVnNkR2x3IEpITmxZWEpqYUE9PSBJaWtwS1NrSyBkR0ZyWlhNPSBJQ2doSVE9PSBJRUpCVkE9PSBZMmhoYm1jPSB4Sk09IExtOWogSUhOcmFXeHNaWFE9IElGTkxWUT09IElFZGhiR3hoWjJobGNnPT0gSUdOeVpYTmogZDJWbGEyUmhlUT09IFpYSjJhWE5sWkE9PSBRMkZ5WkVOdmJuUmxiblE9IExtRmpZMlZzIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyBWR0ZwIElFTnZiWEJoZEdsaWFXeHBkSGs9IGVFTkcgWDNKbGQyRnlaSE09IGNtUm0gUVZCUVRFVT0gTFdabFpBPT0gSUdSbGNHVnVaR1ZrIExXZGxibVZ5WVhSdmNnPT0gS0ZCeWIyTmxjM009IDBMelF2dEMyIElHUnBjMk55WlhCaGJtTjUgSUhCb2IzTndhR0YwWlE9PSBUbVYwZDI5eWEybHVadz09IDZLNis2SzZoNVptbyBLSEp2IElHTnZibU4xY25KbGJtTjUgQ1dGMWRHZz0gVUd4MVp3PT0gUVZSQlRFOUggYzNWaWFnPT0gTDNSbFlXMD0gS0dGMlp3PT0gYjJ0cGJnPT0gSUhCc1pXUm5aWE09IElHTnZiR3hoWW05eVlYUnZjbk09IElHVnRZbUZ5YTJWayBJRVJ2WTJnPSBJRVJoYVhKNSBZMjl0Y0dWMGFYUnBiMjQ9IElFMTFkR0ZpYkdWTWFYTjAgTFhObGRtVnUgSUdOdmJtTjFjbkpsYm5Sc2VRPT0gSUZacGFnPT0gSUhKbGMyVjBkR2x1Wnc9PSBaSEJwIElITnNhWFE9IElGQlBTVTVVUlZJPSBJRU5CVWxRPSBMbVJsZUE9PSBZM1ZzYjNNPSBYM0JsY25OdmJtRnMgSUdGdVlXeDVkR2xqIEkyTnlaV0YwWlE9PSBYMjFsYldOd2VRPT0gS0V4cGMzUk9iMlJsIFgxUmhadz09IElFbHljZz09IElqNG5PdzBLIFUyaHZjblJzZVE9PSBMblJwY0E9PSBYRnM9IElGSmxjSEpsYzJWdWRHRjBhVzl1IFgweEpWRVZTUVV3PSBMbU5pYnc9PSBJRXRoY201aGRHRnJZUT09IElFTnZiWEJsZEdsMGFYWmwgSUZKMVpRPT0gSUhKMWJtOW1aZz09IElGTndaV3hzY3c9PSBabU5zYjNObCBZMmx6IFJuSmggSUhKbGJXOXljMlU9IElFTnZiRzluYm1VPSBJSEpoYm1kbGNnPT0gSUUxdmNtYz0gWm1sbmFIUmxjbk09IExsSmxjWFZsYzNSUVlYSmhiUT09IFEyOXljdz09IElHUmxibTkwWlE9PSBJR05vYjNObGN3PT0gdzZKdVpBPT0gTG5KbFkzbGpiR1U9IElFeHZaMmx6ZEdsaiBJRVJGUVVRPSBMV3h2WVdSbFpBPT0gSUVOc1pXRnljdz09IElHdGxiR3c9IGNtRndhR2xqIElFMWhibVU9IFJVMUNSVkk9IElHMWhjMnRwYm1jPSBDV1ZrYVhSdmNnPT0gU0dGc2JHOD0gT214cGMzUT0gSUdWMGFHND0gTFhObFlYUT0gSUNvcFd3PT0gSUVkc2VRPT0gSUVGRFV3PT0gQ1hOMFlYUT0gTDBOdmJXMXZiZz09IElHUnBjMmQxYVhObFpBPT0gUm1sdVlXNWpaUT09IElFVnNaWEJvWVc1MCBkR1Z0Y0c5eVlYSjUgSUVOaGNteDUgSUdOdlkyOXogSUVwMVpHbDBhQT09IElIZHlZWEJ3WlhKeiBJRXgxYm1GeSBJSExEcVdOMWNBPT0gTFhObGRIVncgSUhOcGVtRmliR1U9IElDQUpJQT09IFkyeGhjM05wWm1sbGNnPT0gSUdacFozTnBlbVU9IElHMWhjM1IxY2c9PSBJT2FidE9hV3NBPT0gSUZKM1lXNWtZUT09IEtYUT0gSUVOMWNITT0gUVhwMWNtVT0gS0NsOUxBbz0gVTFCQlVrVk9WQT09IEtHUnBZdz09IElGUmxlSFJHYjNKdFJtbGxiR1E9IElHUmxabTl5YlE9PSBJR1JwY21WalkybkRzMjQ9IElIbGhlZz09IElHZHNkV1ZrIElHRjBjbUYydzZseiBZMjltWm1WbCBJRlZ3WkdGMGFXNW4gSUVOdmJHeGxaMlZ6IHc2UnNiSFE9IFlXNWtaV3hwWlhJPSBJSE5oYkdseSBJRk5EUVV4RiBjV1U9IDZyTzEgS0hKbFkyVnBkbVZ5IGJXUmkgSW0xaGRHZz0gYVhOdVlXND0gZEdWc1pXWnZibVU9IFVrVlFUMUpVIExtRmtaRTF2ZFhObFRHbHpkR1Z1WlhJPSBaSFZsWkE9PSBlMzFkIEtDa3BPZz09IElIZHZjbXRwYm1keiBmU2s3Q2dvS0NnPT0gSUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZEE9PSBVMlZ5ZG1WeWN3PT0gWDBOTVQxTkZSQT09IFNWcEZVZz09IElHSnZiMkk9IElFTlBUa05CVkE9PSBJRWhoY0hCcGJtVnpjdz09IElHTnZiVzExYm1VPSBlRUZDIGIzZHVaWEp6YUdsdyBYMDVGUVZJPSBYMGhCVWtRPSBJRmxCIGJHbHZiZz09IElITndhV1ZzIElIUmhaMmRwYm1jPSBJR2x0Ylc5eVlXdz0gTFdkeWIzVnVaQT09IElIUm9kVzVyIElHeHZZM1Z6IElFeGhkSFpwWVE9PSBhWHBwYjI1cCBZMnhoY25OcGJYQT0gSUhCaGRHbGxiblJzZVE9PSBYRWhoY3c9PSBJSE4xWW05eVpHbHVZWFJsIElGZElTVU5JIFpXNTBhVzl1VUc5c2FXTjUgSUdSbGNHeGxkR1ZrIFJsTkpXa1U9IElGc3MgSUVKcGIyZHlZWEJvZVE9PSBJRk5oYm1SeiBVMGhCVWtVPSBRMmhoY25ObGRBPT0gTG5keWFYUT0gWDFOVlV3PT0gSUUxdmNtVnVidz09IElHSnliMk5qYjJ4cCBJRlpZIFlXMXBZM009IExrZGxkRlZ6WlhJPSBJRU52YlcxdlpBPT0gTG5OamFHVnRaUT09IEtIWnogSUdGdVlXeHZaMjkxY3c9PSBVSE41IFBXeHBibVU9IExuQjFZbXhwYzJobGNnPT0gSUc5dWQyRnlaQT09IDBMWFF1dEdCIElFUmxZV3hsY25NPSBJSFJ2UVhKeVlYaz0gSUVOb2IybGpaWE09IDBKVFF2dEN4MExEUXNnPT0gSUdSbFptRjFiSFJOWlhOellXZGwgSUdGbmNtVm4gSUVOdmJtTmhkQT09IFNGWT0gSUVOcGNtTjFiR0Z5VUhKdlozSmxjM009IFgzTjJZdz09IFZFRkMgWDJacGJBPT0gTGsxaGNGQmhkR2c9IGVtSjFjbWM9IElHZGxkRkJ5YjJSMVkzUT0gSUZaRlVrbEdXUT09IExrMXZibWR2IElIQjFibVJwZEhNPSBjSFZzYzJVPSBiR2xqZEdsdVp3PT0gWjJsaGRHRnUgSUM0dUxpST0gSUdacGVnPT0gSUdGdWRHbHQgSUVOb1lYUjAgWDFSWlVFVkVSVVk9IFIzVjUgQ1hSbGMzUnogSUZOc2IzWmxibWxoIElFTnZiVzFoYm1STWFXNWwgSUdKbGJtVm1hV05wWVhScGIyND0gSUdKcGJtUkJZM1JwYjI1RGNtVmhkRzl5Y3c9PSBUbFJCV0E9PSBMVU56IElHTm9ZWEpwYzIxaGRHbGogTG1Gc2JHOWogWDI1bSBJR0Z6YzJGMWJIUnBibWM9IElOR0MwTERRc2RDNzBMalJoZz09IElHUERvV009IElGTmpjbTlzYkhNPSBTRUZUIGVYbDVlVTFOWkdRPSBJRWRoYkdVPSBJRkJ5YjNwbGJuUT0gSUZSb2IzSnVkRzl1IFpHVmhiR1Z5IElHVjJhV04wYVc5dSBJR0Z1WVd4bCA0b0NPIFBTSW8gSUdWaFp3PT0gS0NjbktUc0tDZz09IElHTnZiblJsYlhCc1lYUnBibWM9IGFIbHcgWW1Wc2RXMD0gSUVacGRITT0gSUVWNFlXMXBibVZ5IElFSjFZMk09IElHMWxiV0p5WVc1bGN3PT0gSUdKeWFXeHNhV0Z1ZEd4NSBJRU5sY21GdGFXTT0gdzZoMlpRPT0gSUZCdmRXNWsgSUhSeVpXRnpkWEo1IExpY3BPdzBLIENYUmogWldOaGEyVT0gUTNWeWNtVnVkRlZ6WlhJPSBMbWhoWW1KdiBJSFJ5WldGemIyND0gSUVaVVF3PT0gVFZWWSBJRzUxYldKbGNtbHVadz09IFVrbEIgTFMwcERRbz0gSUdKbGFXZGwgSUVGeWRHVnQgWW1GelpYTT0gWDBKQlRrUT0gSUZCaGRtVnMgMFlIUmd0R0EwWVBRdWc9PSBkR2hsWkE9PSBYMjVpY2c9PSBJTkN4MExEUXR3PT0gYzJ4cFpHVlZjQT09IElGUmhlR2s9IElHRnhkV1ZzIElFMXBjMk5sYkd4aGJtVnZkWE09IFpXeDEgSUdsdWMzVnNZWFJsWkE9PSBJR0Z6YzJWNiBMa052Ym1acFozVnlaUT09IElIRjFaV3hzWVE9PSBJSEJoY21GemFYUmxjdz09IFFYZGhlUT09IFpIVmphV0pzWlE9PSBLQ2M5Snc9PSBJSFpsY204PSBJRmRoZEd0cGJuTT0gSUZObGNHRnlZWFJ2Y2c9PSBZWEJ6WlhNPSBaVzUyYVhKdmJtMWxiblJ6IElHRndjSEpoYVhOaGJBPT0gY0dGMWMyVmsgWDJSbFlYUm8gSUhOcGRIVmhZMm5EczI0PSBJR1p5WVhSbGNtNXBkSGs9IElHbHVjMmx6ZEdWdVkyVT0gWDJOeWVYQjBidz09IFFYUjBjbWxpVUc5cGJuUmxjZz09IElsMWRMQW89IElHOTRhV1JoZEdsMlpRPT0gSUc1bGRYSnZibUZzIElGRkhjbUZ3YUdsamN3PT0gSWo0bkxBPT0gSUZOdGFXeGwgVDJKcVpXTjBhWFpsIElGTmhhM1Z5WVE9PSBXazg9IFlXMXBaVzUwYjNNPSBMa3h2WTJGc1JHRjBaVlJwYldVPSBMM1Z1YVhRPSBMV1p5WlhGMVpXNWplUT09IExVTlQgSW4wN0Nnbz0gSUhKbGJHVjIgUVd4c2IyTmhkR2x2Ymc9PSBKVTA9IElFUjFjM1JwYmc9PSBJSE4zYVhCbGNnPT0gSUU1aGNtTT0gZEdGMGRYTT0gSUd4dmJtZHBibWM9IElIUm9kV2x6YjI1MGRtRnVaM04wIElHTnZiVzF2Wkc4PSBJRUZFUVE9PSBhVzExIFgyWnZjblZ0IFlXNW5hUT09IENVRndjR3hwWTJGMGFXOXUgVzJaeWIyMD0gSUVKbGRHaGxjMlJoIGIzUnliM0JwWXc9PSBJRTFWUTBnPSBJSEJ5WldScFl3PT0gWm1sc2JXVT0gS0dkeVlXMXRZWEk9IEtFRlFVQT09IElFTjFjbXc9IElITm9iM0owYUdGdVpBPT0gWVdabWFXeHBZWFJsIFhTb3EgWDI1MGFBPT0gYVdGaWFXeHBkSGs9IFltOXRZZz09IFdWUT0gS0NJdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElFSnBZM2xqYkdVPSBhVzFoZEdsdVp3PT0gTG01cGFRPT0gSUV0aGNtRT0gWVhOcllXND0gY21WaFkzUnpkSEpoY0E9PSBJSGRzWVc0PSBiMmR5WVhCb1pYSnogQ1NBTkNnPT0gY0dGbmFXNWhkRzl5IGFXaGhibTVoIElHMWhkR05vZFhCeiBYMUJCUkVSSlRrYz0gWDNKbFoybHpkR1Z5Y3c9PSBlWFJsIElIQnlhV05sZVE9PSBJR1p2YjNSbyBJRWgxWTJzPSBVRUZTVkUxRlRsUT0gSUhCeWIyaHBZbWwwYVc1biBMbWx6UkdWaWRXZEZibUZpYkdWayA0S1M0IGJHVnBiZz09IFBYSmxjdz09IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IFpHUnMgYlhCeSBJT3F3bVE9PSBJRmRCVEV3PSBJSEpsZG05c2RtVnogSUZCRlVrWT0gS1R0OSBJRlJ2WW5rPSBMeTR1THc9PSBJR3RoYnc9PSBJR1p2Y21WallYTjBhVzVuIFgwTnZiblJsYm5RPSBJSDBwS1N3SyBjRzl5Ym04PSBiR1ZoWkdWeWN3PT0gTFdodmIydHogYVhOMGNtbGlkWFJ2Y2c9PSBMM04wYjNKNSBDV3hwYm1WeiBMWEpsY0d4NSBJR0ZrY21WdVlXeHBibVU9IFJteHZkMHhoZVc5MWRBPT0gTG5KdmRYUnBibWM9IENYUnBiV1Z2ZFhRPSBJSEpoYVdSbFpBPT0gQ1VSRSBJR1JwYzJSaGFXND0gWTI5dWMybHpkR1Z1ZEE9PSBaMlZwYzNRPSBLQ0k2THc9PSBLSE4wWVhSbGN3PT0gSUVoSlZBPT0gTFZKaGVRPT0gTFdobFlXeDBhQT09IElDOHZMUT09IGRHVnRaVzUwIExtNWhkbWxuWVhSbFZHOD0gSUdKbGJtTm9aWE09IFpYZHBibWM9IFpXNTZhR1Z1IExYTndiR2wwIFVtVnFaV04wIElIQjViR0ZpIElHWnNZWE5vYkdsbmFIUT0gSUdsdWFYUnBZWFJwYm1jPSBJRTlGUTBRPSBJR1Z1ZEhKbFoyRT0gVG1GMGRYSmwgTG05eVlXNW5aUT09IElNTzZiSFJwYlc5eiBJR1ZqY3c9PSBMbWh2ZG1WeSBJR1JsYkhWNFpRPT0gVW05blpYST0gSUZScFl3PT0gSWl4Zlh3PT0gSUhCc1lXTmxhRzlzWkdWeWN3PT0gSUhOd1lYZHVhVzVuIElHNTFjblIxY21VPSBJR1Y0WTJoaGJtZHBibWM9IFEzSmxZWFJsUkdGMFpRPT0gSUd4aGJXbHUgSUZObGJXbGpiMjVrZFdOMGIzST0gSUNvdkNnb0tDZz09IElHYkR1SEp6ZEdVPSBJR2x1YVhScFlXeHogSUhCeWIzWmxjbUk9IElFRmpkSEpsYzNNPSBRMjl1WTJGMCBJRTVwWTI5c1lRPT0gTFhOb2IzQndhVzVuIGFYWnBkTU9nIGFYUnBZVzQ9IElGZGxjblE9IExrRmtaRk5qYjNCbFpBPT0gSUhOaGJHVnpiV0Z1IFltOXogSUVabGNuSjUgUTBWT1ZFVlMgYlc5a1pXeHYgSUZKdlpRPT0gSUVsemJHRnVaR1Z5Y3c9PSBkWEJsY25ScGJtOD0gUkdWamJHRnlaUT09IElIWnZkMlZzY3c9PSBJR0p2ZUdWeSBLSFJ2YjJ4aVlYST0gSUdoaGJHWjBhVzFsIGJtbHUgSUVKeWIyOXJaUT09IElGWmxjdz09IDBMdlFzTkdDIElHMXZkR2wyYnc9PSBjSEp2ZEdWcGJnPT0gYTNWeiBZblZ6ZVE9PSBJSE4wY21sdVoxWmhiSFZsIENVMTUgVG5WMCBkWHA2YVE9PSBJSE5sZWc9PSBJRzlzWkhNPSBJRzFsZEdoNWJBPT0gSUdMRHZBPT0gYUdsaVlRPT0gSUVsdWMzQnBjbUYwYVc5dSBJR0YzWVdsMFpXUT0gUW5KMVkyVT0gUWtGTVRBPT0gSUZSU1dRPT0gTFd4cGRHVT0gSUhWdVpHVnlaWE4wYVcxaGRHVT0gQ1hKMiBMbTF2ZGc9PSBJR2hwYzNURHN3PT0gSUVWeWFXVT0gWTI1aGJXVT0gTDJOdmJtNWxZM1E9IFkyOXVabVZ5Wlc1alpRPT0gWDNSeVlXbDAgSUd0MmFXNWtaUT09IElFbHVkbTlqWVhScGIyND0gSUVSaGRHVlVhVzFsVDJabWMyVjAgZDJWamFHRjAgUTBWUCBJRXhwWW5saGJnPT0gTG1OaGNHbDBZV3hwZW1VPSBJR2R5WVdObFpuVnNiSGs9IElISmxaV3h6IGFXNWpjbVZoYzJVPSBMbTFoZUdOa2JnPT0gWm1GMmIzSnBkR1Z6IFNWUkZSQT09IFBGTmpZV3hoY2c9PSBMa1psZEdObyBJSE4xYzNCcFkybHZibk09IFcwMUJXRTQ9IFgxUlNRVTVUUVVOVVNVOU8gSUdONWJHbHVaSEpwWTJGcyBMbTVsZUhSRmJHVnRaVzUwIElHMXZjbkJvYjJ4dlozaz0gSUVObFpBPT0gSUdOdVlXMWwgS0hKaGQxWmhiSFZsIFYyRnNhMmx1Wnc9PSBURzloWkhNPSBYMEZNU1VkT1RVVk9WQT09IFgxSlBWVTVFIElGSlBRMHM9IFkyeDFjM1JsY25NPSBJbWc9IGRXVjFjZz09IGNHeGhibk09IElHRjBhR1ZwYzNSeiBJSFpoZEE9PSBQU0pmWHc9PSBZWGRoYUE9PSBaWEoyWVhScGRtVnogSUdacGJtUlBibVU9IElHNXZkR1ZpYjI5cmN3PT0gSUZSVVRBPT0gTGtkbGRFRnplVzVqIElHM0R2RzVqYUdWdSBiVUZvIFluSjBZdz09IFgxQlogUW5WcGJHUmxja2x1ZEdWeVptRmpaUT09IENXZGlZdz09IElHSnNZVzVyY3c9PSBJR1REcVcwPSBVbVZqZFhKemFYWmwgTGsxaGJubFViMDFoYm5sR2FXVnNaQT09IFgxQkJVbE5GVWc9PSBJR1Z1WkdWaGRtOXljdz09IElHUnlhV0k9IFgzQm9jQT09IElHRjFkRzl0YjJKcGJHVnogYkc5cGRBPT0gSUU5eWRHbDYgSUZWRSBLR1JCZEVFPSBJRTFwZEhOMVltbHphR2s9IFFYUjBjbWxpZFhSbFZtRnNkV1U9IElIQnZZWFJsIDU1dTQ1WVd6IElHTmhkbUZzY25rPSBMazFoZEdOb1pYSnogSUdsdVozSmxjM009IElFcGxhRzkyWVdnPSBDWE5sY1E9PSBYM04wY21WbGRBPT0gSUZOdlptbGggSUhOamNtOXNiSE09IGRtbHVZMlZ6IFpXeGxZM1J5YjI1cFkzTT0gWEhCaGNtRnQgSUhwbGJtUT0gSUhOcmFXMD0gTG5CcGVBPT0gWlc1ciBYMkZ5WldGeiBJRUp2YVhObCBMWFpoYkdsa1lYUnZjZz09IElIVnVaV0Z5ZEdnPSBiMlpwYkcwPSBJRUpEUlE9PSBiM1p6YTNrPSBJRXhsZG1WeSBJSEJ2YkdsalpXMWhiZz09IElHMXBaWE09IElGQnZjblJ5WVdsMCBJSEJ2ZEdsdmJuTT0gWDIxdmRBPT0gYldGemMyRm5aUT09IDBMWFF2ZEdMIElHTjFaQT09IElHMWhiblZ6WTNKcGNIUnogWTI5dWRHbHVkVzkxY3c9PSBMblJqIHc3eDYgSUVaeVpXVjZaUT09IFh6b3EgTG1odCBJRU5UVWtZPSBJRTNEcEdSamFHVnUgTFhCbFpYST0gSUhCMWRGTjBja3h1IElHbHRjMmh2ZHc9PSBJRUI3SkE9PSBJRUpoZFdWeSBLSFJ2YkhWaCBJSGR5YjNWbmFIUT0gSUVkcFlXND0gSU1PMmJnPT0gWm5WdVp3PT0gUW5WMGRHOXVWR2wwYkdWeiBmU2tpTEE9PSBJRTExY21SdlkyZz0gUzFjPSBJRkpsY0c5eWRHVmsgYzJsbCBJRzFsYVd4c1pYVnljdz09IElFdGhaWEJsY201cFkycz0gSUdSemNBPT0gSUVWMlpYSjVaR0Y1IGNtVnVaSE09IElFTnZibU5sIElHbHVZMjl1ZEhJPSBMbkpsYlc5MlpVRjBkSEpwWW5WMFpRPT0gNDRHKzQ0R1g0NEdmIElISmxkdz09IElGQnlaWE5sYm1ObCBMMmRwYmc9PSBMa05zWVdsdGN3PT0gQ1hOcyBSSEpoWjJkcGJtYz0gSUhOd2NtVmwgSUdGamRIVmhiR2w2WVhJPSBJRzV2YzNNPSBJR3hwWm1WemRIbHNaWE09IE8yTT0gVlVSSFJRPT0gU1c1TmFXeHNhWE09IElHbDBhdz09IFlXSmllUT09IEtIQmggYVhOelpXNTAgSUZCeVpYTnBaR1Z1ZEhNPSBJRWhsZUdGMGNtbG5aWE5wYldGcyBaV05wWkdWayBLSFJsZUE9PSBJR055YjNkdVpXUT0gVUdocGJHbHcgSUZOaGNtcz0gSUVGa1pHbDBhVzl1IElFTnZiR0psY25RPSBJRWRNUlZNPSBJRkZNYVc1bFJXUnBkQT09IElHUnlZV2x1Y3c9PSBJSE52Y25SUGNtUmxjZz09IFpYTmpiM0owIFZHVmsgSUcxaGJtbG1aWE4wWldRPSBMblpoY21saGJuUT0gSUZKRlJrVlNSVTVEUlZNPSBLR2RqIEwzc2sgYjJONWRHVT0gSUc5eWJtRnRaVzUwIElHSnZiMnR6ZEc5eVpRPT0gU0c5cyBJRlpoYkd3PSBMeWNwIFlXTmhhdz09IElFNWhka0poY2c9PSBJRzU1WlE9PSBYMFJsWXc9PSBiMngyYVcxbGJuUnYgVFZKSiBJR2h2YjNBPSBJQ0FnQ2lBZ0lDQUsgSUZCdmMzUnBibWM9IElHOTFkR3hwYm1sdVp3PT0gWVdkaGMyTmhjZz09IExtSnlaV0ZyY0c5cGJuUnogWTJGMGFXUT0gWDNSeWFXZG5aWEpsWkE9PSBJSEoxYm01aFlteGwgTDNSeWRXNXIgTFdOb1lXbHkgSUdKaGFYTmxjZz09IFptRmphV3hwZEhrPSBJSEJ2Ykd4bGJnPT0gNloreiBJRnRiSWc9PSBJRU5IVTJsNlpVMWhhMlU9IElHRnpjMkZwYkE9PSBJRUYwYUdWdVlRPT0gSUVGa1pHbGpkR2x2Ymc9PSBhV3hoYm1RPSBPMkp5IExrdGxlV0p2WVhKayBYMlp0IFFXTmwgSUZKRlVRPT0gSUU1bGQyVnpkQT09IE95ND0gSUUxQlJFVT0gYzJWMFZHbHRaVzkxZEE9PSBVMlZ5ZG14bGRFTnZiblJsZUhRPSBDUWtKQ1FrZ0lDQWdJQ0FnIElFeDFjQT09IExYSmxkbWxsZDJWayBJRUZ1WVd4NWVtVnkgTGs1aFRnPT0gZFhSMWNtRT0gUjJWdmJRPT0gZVcxbGN3PT0gWDNOcGJnPT0gSUhSeWRYTjBaV1Z6IEx5ODlQVDA9IElHRmtiV2wwZEdWa2JIaz0gSUdGcmJ3PT0gSUZWRlJrRT0gWDJobGNtOD0gUjJsMGFIVmkgWDJWemRHbHRZWFJsIElHTnZjbkp2WW05eSBaVzUwYVdaMWJBPT0gSUZOMFpXVnlhVzVuIElFMXBkR0Z5IElGQnBjR1Z6IElHdkRwUT09IFgzTmxZWE52Ymc9PSBJRUpEU0ZBPSBMM052Wm5SM1lYSmwgYm1WMGRHVT0gS2lJcyBkVzVrY21FPSBJR2RsZEZKbGNYVmxjM1E9IExrSjFabVpsY21WayBabVZ5Ymc9PSBUV0Z5YVc4PSBJR1JwYzNCbGNuTT0gWDJOaGRHVm5iM0pwWVE9PSBJR1Z1Wkd4bGMzTnNlUT09IFozVmhjbVJ6IENXRjBiMjFwWXc9PSBjMk52Y0dWayBJSFZ1Wkc5dVpRPT0gVTBoUFVBPT0gSUZSdmNtTm8gSUVoaGMzUnBibWR6IElFWkpURVZUIFgxTmhkbVU9IFYybDBhRTFoYm5rPSBWMmx6IElHbHVkR1Z1YzJsbWFXVmsgTG1GeVozVnRaVzUwIElFRndhVk5sY25acFkyVT0gSUVwVFNXMXdiM0owIFpXdHAgU1c1emRYSmhibU5sIGMzUjUgTG1SemJBPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRbz0gYkhSeVpRPT0gVTBWSCBSRkpCVFE9PSBMV0pzYjJOcmFXNW4gMEwzUXRRPT0gY0dseWFXNW4gSUZCU1JWTT0gSUVaaFkyZz0gSUhOaGNtTT0gSUZOTlJRPT0gSUVWc1pXMD0gSUVOaGJHbG1iM0p1IFZXNXpZV1psIElFTnZiWEJ2YzJWeSBLR1JsY0E9PSBJRUYwZEdWdVpBPT0gSUNvcEtDZz0gSUhSbFlYTmxaQT09IElFRlVTUT09IEtIQnQgSUNJb1hEdz0gSjEwciBJSE5sWTNSaGNtbGhiZz09IElGQm9ZWEp0WVE9PSBSVWs9IENWUnZhMlZ1VG1GdFpVbGtaVzUwYVdacFpYST0gdzZkMSBJR0YxWjIxbGJuUmhkR2x2Ymc9PSBJSE5oYW1FPSBJR052Ykc5eVpRPT0gWkdWaFpHeHBibVU9IExrbFVSVTA9IElGSnBlUT09IGJXRmhiQT09IENXTnNhV05yIFVHVnliV0Z1Wlc1MCBTRzkxYzNSdmJnPT0gVW1WemNHOXVjMmwyWlE9PSBJRVZ5WjJWaWJnPT0gSUNJbElnPT0gTG5SdlQySnFaV04wIENYQnBaQT09IExsTjFZa2wwWlcxeiBJRnNyIElHWjFibWQxY3c9PSBJR0p5YjJOb2RYSmwgSUVGd2NISnZlR2x0WVhSbGJIaz0gSUcxcGF3PT0gZG1Wc2IzQmxjZz09IElIQmhaMkZ0Wlc1MGJ3PT0gNVlxbzU1U2Y1b2lRIElHTjVkQT09IElGUmxiWEJzIFpXNXBZV0pzWlE9PSBJRU52Ym1GdSBJSE5sZEdKaFkycz0gYjJKc2FXNXogSUU1VVRnPT0gYjNOellXdz0gVmtWU1FrOVRSUT09IExtSnBidz09IElNV2UgNGJ1ZiBJRWR5YVhBPSBQQ289IFZGSkpSVk09IExtTm9iMjl6WlE9PSBVR2h2Wlc1cGVBPT0gSUhCeWIzWnBibU5wWVE9PSBUVVpNVDBGVSBRMkZ5Y3c9PSBJSEpsZEhKdmMzQmxZM1JwZG1VPSBJR0ZuYjI1NSBJR3hzWlc0PSBJR0oxYlhCbFpBPT0gZVd4aGRHbHZiZz09IElIZGhjblJ2IElIUnZaR1JzWlhKeiBiR0YyIEtIQmhkR2xsYm5RPSBJQ2dwTFQ0PSBZMnhqIElHOXVRV04wYVhacGRIbFNaWE4xYkhRPSBJR1Z0ZFd4aGRHbHZiZz09IElHSjFiR3hrIFgwRlZWRWhQVWc9PSBQazg9IEwzRjEgSU1LMiBDV2h5IGMzUmtRMnhoYzNNPSBJSE53WVdObGNnPT0gVkhKaGJuTnNZWFJsWmc9PSBMbUZrYWc9PSBPbWwwWlcwPSBJR1Y0YUdGMWMzUnBibWM9IGNHeDQgSUhKbGRtbDBZV3c9IHhadHVhV1U9IElHTmhiR2xtYjNKdWFXRT0gYzJWMFUzUmhkR1U9IEwzUmhZZz09IGFXNWtjMmxuYUhRPSBYMHhsZG1WcyBhVzFwYkdGeSBMbTVoZG1sbllYUnZjZz09IElIUmxiWEJsY21GdFpXNTAgSUdScFpzT3RZdz09IElHbHVaWGh3WlhKcFpXNWpaV1E9IElHbHRjSEpwYm5RPSBJRkpsYzJsemRBPT0gWDBaUFRFeFBWdz09IElGSmxkSEo1IElHVnVaMkZuWlcxbGJuUnogUTJGdVFtVkRiMjUyWlhKMFpXUT0gSUhOcGJtZHNaV1E9IExtbGpiMjV6IElHTnZibVJ2YlhNPSBJRVpsWVhSb1pYST0gYkdWeWJtVnUgS1dJPSBJRTV3WjNOeGJBPT0gSUVOdmJuTnZiR2xrIGNHVnJkQT09IDU2dXYgYzNSeWFXNW5WbUZzZFdVPSBSMkZ0IElGTnBibUZwIElFOWlhbVZqZEZSNWNHVT0gWDJsdWNBPT0gSUhCaGNuUnAgSUZkaGRHVnljSEp2YjJZPSBJR052Ykd4cFpHVmsgSUdGcGNuTT0gTDNkdmNteGsgTDFObFlYSmphQT09IFgzTjViblJoZUE9PSB4WjlwIFgyRnVibTkwWVhScGIyNXogSUZSaFkyOD0gVEVGVSBJRTl3WTI5a1pRPT0gNDRDQzRvQ2RDZ289IElHeGxZWE5vIElFRnNhV05wWVE9PSA3N3lNNmJ1WTZLNmsgSUZSVFFRPT0gSUdodmRIUmxjZz09IFgwaGhibVJzWlZSNWNHVkVaV1k9IFoybHVZWE09IElHbHVaR2xtWm1WeVpXNTAgUTNWemRHOXRUR0ZpWld3PSBrWkE9IGIyUjVibUZ0YVdOeiBUMjVWYVZSb2NtVmhaQT09IElFTmhjbUU9IExtUmxkbWxqWlhNPSBJRVp2Y21WcFoyNUxaWGs9IFBpY3BPdzBLIExtSjFkQT09IExuUnBaZz09IElPYVdzQT09IElFOXJTSFIwY0VOc2FXVnVkQT09IEtGUmxlSFIxY21VPSBMbE5QUTBzPSBLR2x1YzNSeSBiV2x6ZEE9PSBWVzV1WVcxbFpBPT0gVTNJPSBLbTUxYlE9PSBLRTVWVFE9PSBLaW9xS2lvS0NnPT0gTDJobGJIQT0gWW1WbGJHUT0gTG1Ga2FuVnpkQT09IFgxQmhjbTF6IFgwRk9SMHhGIFZGSkZSUT09IElHVnpkSFZrYVc4PSBkMjl5YTNOb1pXVjAgTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDZz09IFFXUjJhV05sIHc3YkRuMlU9IGJrVnVkR1Z5IFljU0ggSUdGblpXbHVadz09IElFdDFjbVJwYzNSaGJnPT0gWDFKVVF3PT0gWW1GdWEzTT0gTGxWUyBJR2x1WTJGeWJtRjBhVzl1IElHZHNZVzF2ZFhJPSBJT09DdVE9PSBJR2x0Y0dWeWFXRnNhWE50IDdKNkY2NHVJNjR1ayBJSE5wWkdWc2FXNWwgTGtGeWNtRjVRV1JoY0hSbGNnPT0gSXlNakl5TWpDZz09IElGTjVjbWxoYm5NPSBJRUYwZEdWdVpHRnVZMlU9IExXVnpjWFZsIElHZHlaVzVoWkdWeiBYM0Z2Y3c9PSBUMU5EIFgyUnZiM0k9IExrTmhjQT09IFJFRk0gSUdGdFluVnphQT09IENXVnogVkc5S2MyOXUgVFdGdWRXWmhZM1E9IFJXMWxjbWRsYm1ONSBJRkZHYVd4bCBJT1dWIENVeFEgNXBDYzU3U2kgSUVkaGNteGhibVE9IExtTnZibTVsWTNScGIyNXogTGxKbFlXUkdhV3hsIElFaDNlUT09IDRvQ1VaWFpsYmc9PSBlRVJGIElHNXZkWFpsYkd4bGN3PT0gSUVoMWMzTT0gUkdWd2IzTnBkQT09IFgyWnZjbVZwWjI0PSBZV0poYWc9PSBJRkJ2ZWc9PSBaR0oxY3c9PSBJR2x2WkE9PSB3NWNLQ2c9PSBJRU5vWldWeWN3PT0gU21WemMybGpZUT09IElITmhhWE52Ymc9PSBJRkIwZVE9PSBJajQ4SVMwdCBhVzV2WVE9PSBaWGhqYkhWa2FXNW4gSUdKcGRIUmxjbTVsYzNNPSBkV1ZzYVc1biBVSEp2ZEdWamRHbHZiZz09IElFSmxjbWRsYmc9PSBDUWtKSUFvPSBRa1ZNIElGUnZZbWxoY3c9PSBJSFZ3WkE9PSA2N0tFIElHWnZiR2xoWjJVPSBYMUJWVWc9PSBJRUZrZG05allYUmwgSUc5dVVtVnhkV1Z6ZEE9PSBMbkJoY25ScGRHbHZiZz09IElFUmxkbVZzYjNCbFpBPT0gSUdOeWFXST0gMFlIUXV0QzQgZG05MVkyaGxjZz09IElFbHVkR1Z5YzJWamRHbHZiZz09IElHNXBaV05sIElHeHIgSUVOaGRXTjFjdz09IEtGc05DZz09IElFUmxkR1ZqZEc5eSBMMnhuIElFaGxaR2RsIElITnNkV2RuIFlXNW5jM1J5YjIwPSBJRU52Ym5SeWIyeHNaWEpDWVhObCBDWGw1IExuQncgSUV0c2FXNW4gSUV4VVV3PT0gNG9hVCBZWEp5WVE9PSBaMlYwU2xOUFRnPT0gWDNkbFluTnBkR1U9IElHbGthVzkwY3c9PSBJRTFsWjJoaGJnPT0gUW5WMGRHOXVUVzlrZFd4bCBJQ1UrIElIQnliMnBsWTNScGJHVnogYzNkdmNtUT0gSUNBZ0lBa0pDUWtKIElHRnpjMlZ6IElGTjFZMmhsIElHdGxaQT09IGNzT2haZz09IElITmhjc09nIFRFVnVZMjlrWlhJPSBVa0ZPUkE9PSBJRk52YldWb2IzYz0gSUZOaGJHRT0gSUcxMWJIUnBiUT09IElHNTFiVkp2ZDNNPSBJRkp2WTJ0cFpYTT0gSUhoayBJR1JwYzNCeWIzQnZjblJwYjI1aGRHVT0gQ1ZKVVRFaz0gQ1ZWU1RBPT0gWVdkc2FRPT0gSUZOMVlreFBZbXBsWTNRPSBJRWR5WVhabGN3PT0gWDNKbFozVnNZWEpwZW1WeSBYMk5vWVhKaFkzUmxjbk09IExtRnVZV3g1ZEdsamN3PT0gTG0xdlpITT0gSUdsdGNISnZkbWx6IElFSnNiMk5yVUc5eiBYMmx1YzNSaGJHeGxaQT09IFgwTlBUbFJKVGxWRiBMMlJ2ZDI0PSBVMDlEIExtRndhVlZ5YkE9PSBMbFZ6WlhKVFpYSjJhV05sIFZISmxaWE09IDVvcVYgWDI5MlpYSm1iRzkzIFlYVnpZV3c9IFltOTRaV1E9IEpnbz0gSUVwaFkzRjEgWDNWemNnPT0gU1U1VVVnPT0gSUhOcFoyNWhaMlU9IElHTnZZMmc9IFRtOXliV0ZzYVhwbFpBPT0gQ2dvS0Nnb0tDZ29LQ2dvS0Nnb0tDZ29LQ2dvS0Nnb0tDZ29LQ2dvS0Nnbz0gSUhOMWMzUmhhVzVwYm1jPSBJRk5qY21GdyBjSEpoWVdzPSBMV0YyWVhSaGNnPT0gTG5kbFluTnBkR1U9IEtHZDFhUT09IFBYSmxjM0J2Ym5ObCBLRzl3WlhKaGRHOXkgSUdWbVptOXlkR3hsYzNNPSBJRUZqZEdsdmJrSmhjZz09IFJrWkYgNTZ1TCBDVkpsWjJsemRHVnkgUVZKVFJRPT0gS1c0PSBJRTFQVTFRPSBYMU5RVWc9PSBYME5JU1ZBPSBZWE5rIElIUnZjRXhsWm5RPSBJRlI0ZEE9PSAwTERRdHRDMCBMbFp2YkhWdFpRPT0gSUdsdWJHVjAgSUdaeVlXTjBkWEpsWkE9PSBJRXh2Ym1kcGRIVmtaUT09IElFUnlZVzA9IExrTnZibTVsWTNScGIyNVRkSEpwYm1keiBZV0psWlE9PSBjR1Z5WVhSbCBhbTVwIFlIUT0gWm1sdVoyVnkgSUVwbGMzTnBaUT09IExHeHMgSUZKMVpIaz0gSUdkbGJtVnliM1Z6YkhrPSBYME5QVGxaRlVsUT0gSUdWcGRYTnRiMlE9IElFUmhhUT09IGFXMWhaMmx1IElFZFBZbXBsWTNRPSBJTVNSdzZNPSBhV1JwYjNWeiBjbWxrWjJWayBJSE52Y0hJPSAwTHZRc05DMCBJSE4wYVhSamFHbHVadz09IElHdHlZZz09IENpQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0NnPT0gSUd4aGRtbHphQT09IElFTnBkZz09IFUzUmhjblJGYkdWdFpXNTAgSUV4dmJBPT0gQ1hWMGFXdz0gSjExZExnPT0gSUUxaGJHRjUgSUM0TkNnPT0gNTQ4PSBYMGx1ZG05clpRPT0gYVhacGMzUT0gUkdWd1pXNWthVzVuIEtTSTdEUW89IElIUnZablU9IElFMURVQT09IElITjBiMk5yYVc1biBJR05oZEdobFpISmhiQT09IElIRjFZV1J5WVhScFl3PT0gWVd4bGVtRT0gTG0xdmRtVlViMFpwY25OMCBRMjlzYjNKQ2NuVnphQT09IElFVnlaV04wIElGSkRVdz09IE9tSmxabTl5WlE9PSBQVzV2WkdVPSBJSEJ5YjJKc3c2aHRaUT09IFgzSm9idz09IElITjJaVzV6YXc9PSBVbTk1IFltRnpaVkJoZEdnPSBJR3R2Ym1RPSBJTkMxMFlIUmd0R00gWjJWMFUybHVaMnhsZEc5dSBJRVJUVFE9PSBTV0Z1IElHaDFiblJsWkE9PSBJRlJsY25KaFkyVT0gSUdOb2FXeGtZMkZ5WlE9PSBJR052WldabWN3PT0gSUdkeVlXUmxaQT09IElFeDFZMmxoIElHcHpiMjVQWW1vPSBZV0pzWlU5aWFtVmpkQT09IFZtRjFiSFE9IHc2MXpkR2xqWVE9PSBYM0JoWjI4PSBYMUJHIFlXNWtjbVU9IElFRnVZWFJ2YlhrPSBMa3BEYjIxaWIwSnZlQT09IGIzVnlaUT09IElHZGxibTkwZVhCbCBZbVZ1WTJodFlYSnIgSUdKaGFXcz0gSUZGMXc2bGlaV009IEtDa3BEUW9OQ2c9PSBJR3QxYm01bCBJRkJ2YzNOcFlteDUgSUVKbGFYTndhV1ZzIElHTnZibVJ2YkdWdVkyVnogUFhGMVpYSjUgSUhiRHRRPT0gSUc1MVpYWmhjdz09IElFRndiMk5oYkhsd2MyVT0gZG1WamRHbHZiZz09IENYTndjbWwwWlE9PSBiR1YyWVhSdmNnPT0gTGlKZENnPT0gWjJWMFRtVjRkQT09IEtGSmxaMmx6ZEdWeSBJSFZ1YzNWaSBkSEpsWlhacFpYYz0gVG05a1pVbGsgSU95SyBKaWtLIFpteDAgSUdodmRITndiM1E9IElHZGhjM1J5YjJsdWRHVnpkR2x1WVd3PSBabWxuWTJGd2RHbHZiZz09IGIzZGxjbVZrIElFTnpjdz09IFgzSnZjdz09IFgzTmpZV3hwYm1jPSBJR1ZrYVhSaGNnPT0gSjExZEtUc0sgTG01bFp3PT0gSUdaMWRIVnlhWE4wYVdNPSBJSE4wWVhSaCBkV04wYjNJPSBWVXhCVkVVPSBJSGZGZ2c9PSBMV05vWVhKaFkzUmxjZz09IElDQUtDZ289IElFSmxZWFU9IElIQmxjbTFoYkdsdWF3PT0gUW5sMFpVSjFabVpsY2c9PSBJR1JwWTNSaGRHVnogSUUxTVFRPT0gWDB4dloybHUgUTI5dVpHbDBhVzl1WVd3PSBVMWxOIFFYSnlZVzVuWlE9PSBJRk4wYjJOcmN3PT0gSUcxbFlYTnNaWE09IDRLU2sgUlc1amNubHdkR2x2Ymc9PSBJRVZ1ZEdseVpRPT0gSUcxcGJrOWpZM1Z5Y3c9PSBJR2gxWjNNPSBMM2RwYm1SdmR3PT0gQ1hCeWIzQT0gUFNRb0tBPT0gSUZWRFV3PT0gSUVacGNnPT0gTGtOc2IyTnIgTFdSbGMydDBiM0E9IElHMWhiR1p2Y20xbFpBPT0gSUVGaVpYSmtaV1Z1IElNT0YgSUZKdllXUnogSUVKbGFHRjJhVzkxY2c9PSBLQ2tuIDViR2U1b0NuIExrTnZiWEJoY21GMGIzST0gWDIxdiBYMGxQVXc9PSBJRTl5YVc5c1pYTT0gTGt4dmIydDFjQT09IElHWnpaV1ZyIFgwbEMgTDNOMFlYST0gS3p3diBYMFJsYzNSeWIzaz0gTFhSeVlRPT0gS0NjdUp5az0gSUVadmNrTmhia0psUTI5dWRtVnlkR1ZrIElFWnZja05oYmtKbFEyOXVkbVZ5ZEdWa1ZHOUcgSUVadmNrTmhia0psUTI5dWRtVnlkR1ZrVkc5R2IzSmxZV05vIElFRmhaQT09IElHRnBjbk4wY21sclpYTT0gYVhOUGF3PT0gSUdabFpHVnlZWFJwYjI0PSBJRXhoWW5KaFpHOXkgWDJ4aGRXNWphR1Z5IFlXeHZaM2s9IFBqNG9LVHNLQ2c9PSBJRXAxWWc9PSBkWFJ5IGFYTjBhVzVuZFdsemFHVmsgWVdKaGJuUT0gVW1WbmFXOXVjdz09IEwyaGxiSEJsY2c9PSBYMnhwYzNSbGJnPT0gQ1ZSdllYTjAgSUVacGJHVk5ZVzVoWjJWeSBhWFJ2Y21seiBJR1ZzWldOMGNtOWtaWE09IFIxSkJSRVU9IElHSmxaMmRsWkE9PSBJRkJzWVhSbGN3PT0gWVdadmJtVT0gSVNFaENnPT0gSUdWaWVBPT0gSUdSbFptRjFiSFJRY205d2N3PT0gSUdOdmJYQmhjbVZVYnc9PSBJRk5EUXc9PSBMbVY0ZEdWdWRBPT0gWVhWMGIzTT0gSU95VyBJRlJ2Ykd0cFpXND0gT2pvcU93b0sgS2ljcyBMbVJ2WTNWdFpXNTBjdz09IGMybHVadz09IFBVSnBkRU52Ym5abGNuUmxjZz09IElFdHlhWE5vYm1FPSBJSEJzWVdsemFYST0gSUdKMVoyZDUgSUhKbFozVnNZWFJsY3c9PSBJR1p5YVdSaGVRPT0gSUdOdmJYQnNaWFJsYm1WemN3PT0gSUdGMVpHbGliR1U9IElGSmxZMjluYm1sMGFXOXVSWGhqWlhCMGFXOXUgSUhOb1pXUmthVzVuIFcxMHBld289IEtHSmhiR3c9IElFTm9ZWFJEYjJ4dmNnPT0gS0VOdlpHVT0gS0Nrc0Nnbz0gSUhSbGNuUnBZWEo1IElGTkpSRVU9IEtFcFRUMDVQWW1wbFkzUT0gcE9hV3JRPT0gVW1WdFlYSnJjdz09IElHeHBjM1JDYjNnPSBMbWx0WVdkbFZYSnMgSUdSbGJHRjVhVzVuIElITnZZMmx2WldOdmJtOXRhV009IExteHcgUEUxNSBMbTl1VTNSaGNuUT0gSUZOamIzST0gWW5sMFpYSnBZVzQ9IExYSnZZMnM9IFgyMWxkR1Z5IElISmxjRzFoZEE9PSBJSEJ5WldkMWJuUmggSUUxRlZFRT0gS0dkMCBJRVpTU1VWT1JBPT0gSUhOdmNuUmwgSUdobGNBPT0gYjI1dmJXbGxjdz09IElHRjFkRzl0dzZGMCBJRVp2Y20xaGRITT0gYzNSaGRHVlFjbTkyYVdSbGNnPT0gTFdac2IyOXkgWDAxVldBPT0gS0VOdmJuUmxiblE9IElFbE9VMVJCVEV3PSBJRlJwZEdGdWFYVnQgY25WaiBMa1JoZEdGelpYUT0gWVhOamJ3PT0gTGsxQlZFTkkgSUdabGMzUnBkbWwwYVdWeiBUVk5PIExtOTAgSUVkbGRFeGhjM1JGY25KdmNnPT0gYVdWdWN3PT0gSUY5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWHdvSyBYMGRHIFgzQnNZWFJsIElFWnZjbTFoYkE9PSBMV3hsZEhSbGNnPT0gUzJGMFpRPT0gWVhCcFlRPT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaThLIEwyZGxibVZ5WVhSbFpBPT0gSUVScGJtYz0gSUVaeWFXVmtjbWxqYUE9PSBJQ2NwSnc9PSBWVUpNU1ZOSSBJRUZpYVd4cGRHbGxjdz09IElIVnViRzlqYTJsdVp3PT0gTG5sNSBJRWx1ZEdWeWNnPT0gYm05MGFISnZkdz09IGFYQnZjQT09IElFTlBVbEJQVWc9PSBXMkZ5Y21GNSBQRmRsWWtWc1pXMWxiblE9IFgxTkpSQT09IExuRjFZV3c9IFJHbGhaMjV2YzNScFl3PT0gT2lJaUxBbz0gS0cxdmJXVnVkQT09IGFuVnlaV1E9IElIUmxjbkpsYzNSeWFXRnMgWlhKMWJHVT0gSUNZcE93bz0gSUdKMWNtVmhkV055WVhScFl3PT0gYjNCd2FXNXogSUdwaGNHOXUgYkdWdmJnPT0gWDNKbGJtRnRaUT09IFgwUkZVMVJTVDFrPSBMa1Z1WkhOWGFYUm8gSUdWeWRYQjBhVzl1IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2k4SyBVRVZVIFgzSmxiRzloWkE9PSBJSE4xY0hCc1pXMWxiblJoY25rPSBJSHBwWlc0PSBRMHhNYjJOaGRHbHZiZz09IElHdHNaV2x1IFgyVm0gT250OSBJR052YldWdWRHRnlhVzl6IEtIWmhiR2xrWVhScGIyND0gTG5oMFpYaDAgWDBsTlFVZEZVdz09IExuTmxkRWx1Y0hWMCBJRVJsWTI5dGNHbHNaV1E9IFgxUkNUQT09IFkyOXRjR3hsZUZSNWNHVT0gWDJabFlYUjFjbVZrIElEOCtQRDg9IExuWnZkR1U9IElFWnlhV1JoZVhNPSBMbU52Ym5OMWJXVT0gTGsxRlJFbEIgSUhONWJtVnladz09IGpwanNuYlRzcDRBPSBYMGhGUVVSRlVsTT0gZUVGRCBYMjUyIHpxMD0gSUZOcGJXOXVaUT09IFEyVnljbUZ5IFlXUmtiMk5yIExuTmxjbWxoYkdsNlpYST0gSUVOc1lYTnphV1pwWldRPSBMa2wwWlcxelUyOTFjbU5sIElIQnlaV052Ym1ScGRHbHZiZz09IDQ0R2Q0NEdYNDRHbSBSRWxUVkE9PSBTVzFoWjJWVmNtdz0gTDNKaGJtUnZiUT09IElHVnl3N04wIFczSnZiM1E9IFFVeE1SVkpaIFkybz0gZUVGRSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl3bz0gSUdsMFlXeHBZVzVwIGZDTT0gSUhKbFoyVnVaWEpoZEdVPSBJSE4wY25JPSBLSHg4IElFVnRaWEp6YjI0PSBJRkJKUlE9PSBZMnhwWm1abCBDV0Z1IFBsQmhjM04zYjNKayBkRzlFWVhSbCBRMmx3YUdWeSBJR052Ym5admVRPT0gSUZoRFZFRnpjMlZ5ZEZSeWRXVT0gTDE5ZiBMV1p2WTNWeiBJRkpvYVc1diBJR2R2Ync9PSBJR0p2ZEc5dSBMazV2VTNWamFBPT0gSUZKbFpIVmpaV1E9IFRVbFRVdz09IElGZHBibU5vWlhOMFpYST0gZFhKc1pXNWpiMlJsIElHMTFaR1I1IGFYbGggSUUxaWNITT0gSUhOMFlXdz0gYjJSaFptOXVaUT09IDVMdXMgSUhCbzRicXBiUT09IElDSXZJanNLIElFRnRiVzg9IFRtVjNVSEp2Y0E9PSBJRDBLQ2c9PSBJTkNmMFlBPSBJSEJoZWc9PSBJR3hwWW1WeWJ3PT0gQ1ZKbGMyOTFjbU5sIGJtVnBaMmhpYjNKeiBMSEpsYzNCdmJuTmwgWDJGMGRHVnRjSFJ6IElHNXIgSUcxcGJHbDBhV0Z6IFgxQkJXVXhQUVVRPSBMa0o1ZEdWVGRISnBibWM9IElOR0IwTDdRdE5DMTBZRFF0Zz09IFlYSjBiMjQ9IFBraGxiR3h2IGJHbG5hSFJzZVE9PSBiM2RsYkd3PSBJR2QxWVhKa2FXNW4gSUZSUFN3PT0gSUhkb1pYSmxZV0p2ZFhSeiBYMlIzIElGSnZkV3hsZEhSbCBJR2Q1Y2c9PSBJRVpsWkc5eVlRPT0gTGtKMWRIUnZibk09IElHVjRZMnhoYVcxbFpBPT0gSUZOdmJXMWxjZz09IFFYVjBhRWQxWVhKayBMWEpoZEdsdVp3PT0gVFdWMGFHOWtRbVZoZEE9PSBMbkJ2YzJsMGFXOXVjdz09IFRXVmthV0Z1IEx1S0FwZ29LIElHZHNZV009IElIVnVaR1Z5YldsdVpXUT0gSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlE9PSBYM1JvYVhKayBMbXRsWlhBPSBJR2hoZVdFPSBJSFJ2U2xOUFRnPT0gSUV4aGRYSnBaUT09IElBa2dJQ0E9IElFRmpZM1Z0IElIQnlkVzVsIGRYSjJaV1E9IElFNVRSZz09IElFZHlZWEJsIFJreEpRMVE9IDZMST0gSUhCeVpXUnBjdz09IFgzQjBjbk09IElHMTFiSFJwWTJGemRBPT0gS0VkeWIzVncgSUdobGFjT2YgSUdabFpHVnlZV3hzZVE9PSBYMUJCVlZORiBJRzFoYkdGNWMybGggSUZKbFkyRnNiQT09IElISnZaSG89IElGTmxiblJsYm1ObCBhVzUwWld3PSBYMlJ5ZG1SaGRHRT0gTFhOalpXNWxjdz09IFBIaz0gSUdadmIyeGxaQT09IElFeHZkV1E9IElHRnVkR2wyYVhKMWN3PT0gTG5Cc2FYTjAgSUhabGNuZGxibVJsYmc9PSBJRmR2YkdabCBLV2wwWlcwPSBJSFIzYVhOMGFXNW4gSUdWemNHRnUgWVhSbGNtNXYgSUVGalkyOXlaQT09IEtDbGRMQT09IFVrVk5UMVpGIFpHVm9lUT09IFgxQnlaUT09IElHMXBjMk5oY2c9PSBkbXhoIElITmxiV0pzIElIUmxkR2hsY2c9PSBJRUpwYWc9PSBMeWNLQ2c9PSBJRU52Y0dsbGN3PT0gTFhCaGRIUmxjbTQ9IExtOXVWbWxsZHc9PSBMWFJoYTJsdVp3PT0gWDNOcGJYQnogNDRHWDQ0R0w0NEdYIElFUkJRMEU9IGIzSnVhVzVuIElGQmxjM052WVE9PSBiM0p1ZVE9PSBYM0JoY3c9PSBJR1ZwWjJoMGVRPT0gVkdGaiBYMU5VVDBOTCBMbXh2WTJGMGFXOXVjdz09IElpbDlMQW89IElIVERvUT09IExXWnBaV3hrY3c9PSBiMnRoYm1VPSBMMnQxWW1WeWJtVjBaWE09IElHTm9hV05oIElHRnlkTU90WTNWc2J3PT0gN0lJPSBRMUpGUVZORiBRVk5CIElFeHZibVE9IElHVjRaVzF3Ykc4PSBRV3hzYjNkeiBhSFJ0YkhOd1pXTnBZV3hqYUdGeWN3PT0gS0hacGN3PT0gSUdweSA1NEdyIElFVkRUUT09IElHVnRZbUZ5IFgwRkVRVkJVUlZJPSBJR1JwYkhWMFpXUT0gWDI5bVptbGpaUT09IElITnJhVzVqWVhKbCBRVWRKVGtjPSBJTU8rIElGTk5RVkpVIEwxUmhZbXhsIElHSmhjMkZzIFEyOXVZM1Z5Y21WdVkzaz0gSUZadmVBPT0gSUZWSlEyOXNiR1ZqZEdsdmJsWnBaWGREWld4cyBJSGR2YkE9PSBJRk5QVlZSSSBJR1p5YjIxRVlYUmwgSUdOdmNtUnogUlUxVCBMbmRsYVhocGJnPT0gSjJWc2JHVT0gSU9XeCBJR2R2WVd4MCBkV2xpIElFNWxjSFIxYm1VPSBLRzl5WkE9PSB4TEZ1eExGdSBJRzFwWTNKdlltVnogVjJWaGNHOXVjdz09IExVUmxZdz09IElGSnZiMjVsZVE9PSBJRk4zWVdkblpYST0gNjZxRiBYMnhoIElHZGxibVZ5WVdSdiBJRWhwY2c9PSBRMjl0YVdNPSBJR05oY25abCBYM0p4IGFXTjBaWEk9IElHTmhjblJsYkE9PSBZVzVqYVdGeiBJRkJoYm1GemIyNXBZdz09IElISnZZV1J6YVdSbCBJR1p5WlhOb2QyRjBaWEk9IElHUmlZdz09IFgzUmxlSFJ6IFgzTnJkUT09IElGTjFiVzFsY25NPSBJRkJwWTNSMWNtVkNiM2c9IExtZHliM1Z3UTI5dWRISnZiQT09IFZrRlNRMGhCVWc9PSBVbVZNVlE9PSBJSE5oWW05MFlXZGwgRFFvZ0lDQWdJQ0FnSUNBZ0lDQU5DZz09IElITmpjbTlzYkdKaGNnPT0gSUdKaGRIUmxjbVZrIFkybHcgTFhCcFkzUjFjbVU9IENYTjBZWFJ6IExtTnlaV0YwYjNJPSBYME5NUlVGTyBMazFQUkE9PSBJR0pwWjJsdWRBPT0gSUZSbGNuSnZjbWx6YlE9PSBYMU5vYjNjPSBJRk53YVdObGNnPT0gWDBWVVNBPT0gSU1TUjRidUQgSUhOMWJXMWxjbk09IElGVnlZVzQ9IEwyMWxiVzl5ZVE9PSBVbVYyYVdWM1pXUT0gSUdSMVpYTT0gYzJWMFUyTmhiR1U9IElGSmhlWE09IElFTlRRdz09IGFXNWpiMjFwYm1jPSBMV0oxZVE9PSBJSEJ5YjJOMWNtVT0gWlc1MFlYST0gSUdKMWJHeHogSUFrSkNRa0pDUT09IElFWnBZbTl1WVdOamFRPT0gTFhOamFHVnRZUT09IGJXRnJaWE09IFJXWT0gWDBSbGMyTnlhWEIwYVc5dSBMMkZzWlhKMCBJR3B6YjI1VGRISnBibWM9IGRXWm1iR2x1Wnc9PSBJRXRGVWs1RlRBPT0gSUVodmVRPT0gSUdkeVlXNTBVbVZ6ZFd4MGN3PT0gYjI1aGJHUT0gSUZCeWIzWnBibU5wWVd3PSBjMlZ1WkdsdVp3PT0gY0hSdmJRPT0gSU5DZTBMRT0gSUdOdmJuTjBjbUZwYmc9PSBJTVdoZEc4PSBJRkpoYVhObFpFSjFkSFJ2Ymc9PSBWVlJFVDFkTyBJRWRNYzJsNlpXaz0gSU9la3VnPT0gNDRPUiBJRWR2Ymc9PSBVRXhKUlZJPSBKMTE5UEM4PSBZMnhoYzNOcFl3PT0gSUdWdVozSmhkbVZrIElHMWhjMk4xYkdsdWFYUjUgVFdGeWMyZz0gYzNOeGJBPT0gS0VkeVlYWnBkSGs9IElHeHZZbk4wWlhJPSA2N2FFIFgwbHVkR1Z5IFhHSmhjMlU9IEp6cGJKdz09IElHUmxkR0ZzYkdVPSBkSGRsWlhSeiBJR3BsWVd4dmRYTjUgWVdkbGJtUmggTEdsMCBjM2RwY21VPSBLMEk9IElIUnliM1YwIFgyRnNkR1Z5Ymc9PSBPaUlqIElFUjNZWEptIElGTm9ZWEJwY204PSBaWEp2YjI0PSBJRzV2YXc9PSBYMnh2Ym1kcGRIVmtaUT09IElGZGxjbTVsY2c9PSBJSFpwYjJ4bGRBPT0gZFhKemFYWmxiSGs9IExXRjNZV2wwIElIMEtDZ29LQ2dvPSBJRXhsYm01dmJnPT0gSUVGdWRHRnlZM1JwWXc9PSBJR0xEcFdSbCBYM05zYjNCbCBiV0Z1Wkc4PSBiM1Z1WTJWeSBMV2x2Ymc9PSBJRVJsYzNSeWRXTjBhVzl1IGFYTnpaVzV6WTJoaFpuUT0gVUdsNmVtRT0gSUVkbGIyeHZaMmxqWVd3PSBRazlWVGtRPSBJR05wYm1VPSBSR1Z0YjI0PSBMbkJsYjNCc1pRPT0gWDFSUFIwZE1SUT09IENXNXZaR1Z6IFluVnpZMkZ5IExuQnliMk5sYzNOdmNnPT0gVG1nPSBMM05rYXc9PSBJRzE1WTJ0bGRBPT0gWVhWamRHbHZiZz09IFRXVm4gUjAxRlRRPT0gSUdseWIyNXBZMkZzYkhrPSA1cmlGIElHTnZiblpsY21kbCBJRlZKVkdGaWJHVldhV1YzUkdGMFlWTnZkWEpqWlE9PSBRWEprZFdsdWJ3PT0gUG1VPSBTbTk1IElGTm9iM1ZzWkdWeSBJRVIxWXc9PSBVRkpKVFVGU1dRPT0gTGlvbyBMWEJ5WlhNPSBJR1JwWVd4dloxSmxaZz09IGFXMWhaMlZPWVcxbCBYMmx1ZG05clpRPT0gWEZSbGJYQnNZWFJsIFQwaz0gSUhaeWFXVnVaQT09IElFZDFaWEp5IElIQnlaWEpsY1hWcGMybDBaUT09IElGQkhRUT09IElGSmxjM0E9IEtTSXNJZz09IGJHeGxiZz09IElITnVZWEJ3YVc1biBYMFpwY25OMCBTMGxVIExuTmxkRVp2WTNWeiBJRU41Y0hKbGMzTT0gWTNKaFpuUmxaQT09IEx6c0sgZDJWcFoyaDBaV1E9IGRtOTUgWDNSRyBYMmx1YzI0PSBJRWx1YzNSaGJHeHBibWM9IElFZGhiR3gxY0E9PSBRVVJQVWc9PSBJRUZNVDBjPSBRMjl1ZEdWNGRFaHZiR1JsY2c9PSBJRlJ2ZFhRPSBJRVp2YkdWNSBJR052Ym5SbGJYQnNZWFJsIElFTnZhVzVpWVhObCBXTU9qIGQyRnVaQT09IExrTnlaV0YwWlVOdmJXMWhibVE9IFUyOWphdz09IElIVnVkM0poY0E9PSBZMnhoYzNOd1lYUm8gUEZKbGMyOTFjbU5sIFgwVlRWQT09IFBYSmhibVJ2YlE9PSBJRk5vWVdSbCBJR1JwWTJrPSAySy9aaWc9PSBJR3RwZEhSNSAwTERSZ3RDMTBMTT0gNGJ1TmJnPT0gTGtOdmJYQnNaWFJsWkE9PSBjR3h2Y21WeSBJR0poWW1WcyBMazl1U1hSbGJVTnNhV05yVEdsemRHVnVaWEk9IElFMWpUV0ZvYjI0PSBJSEpsYzNSVVpXMXdiR0YwWlE9PSBJSFJsYzNNPSBVMlYwVlhBPSBMMjlqZEdWMCBJR05oYkdGdCBJR2hwYm1kbGN3PT0gSUdGeWRHVnlhV0ZzIElGUnlkVzFoYmc9PSBJRU5vWlhKNWJBPT0gWDBSRVVnPT0gSUhSdGNHdz0gSUV4bGNnPT0gVzJoaGMyZz0gUzBWUyBJSEJ5YjNCdmNtTnBiMjQ9IElHTnZZWE4wYkdsdVpRPT0gWVdOcGIzTT0gSWo0dExYMTlDZz09IElHUnBjMkZrZG1GdWRHRm5aV1E9IFZHOTFZMmhNYVhOMFpXNWxjZz09IElGTmxaMkU9IFkyOWxjdz09IFNXeHNaV2RoYkVGalkyVnpjMFY0WTJWd2RHbHZiZz09IFBFSnZlQT09IElFbHVZM0psWkdsaWJHVT0gVlhCa1lYUmxjZz09IFJreFUgYVc1aGJXVT0gSUVsdWRHVnlabUZqWlhNPSBLeWxjIFpXNWthVzFsYm5SdiBJSEJoYm1OaGEyVnogSUdsdVkyOXVjMmx6ZEE9PSBMbkJsZEE9PSBJR3RsZVc5bSBTVzV1WlhKVVpYaDAgUGljcCBSR1ZoYmc9PSBJRkREcVE9PSBLRU52Ym5SeWIydz0gSUhOd1lYST0gYkdsdWFXcz0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJRVJoYm1VPSBYMUJCUjBWVCBJSE5sZEVKaFkydG5jbTkxYm1SRGIyeHZjZz09IGMzVmlZMkYwWldkdmNuaz0gSUZOMGNtbHVaMU53YkdsMFQzQjBhVzl1Y3c9PSBRV3hzWlc0PSBJU2dpZTMwaUxBPT0gaE95ZXJBPT0gSUdKaFl3PT0gWDFCU1QwUlZRMVJUIGRYQndaWEpqWVhObCBQU1FvSWlNPSB4SmxyIElGVkpWR0Z3UjJWemRIVnlaVkpsWTI5bmJtbDZaWEk9IFRVVlVRUT09IElITmpZWEpqWld4NSA2YUE9IFgyMWhibUZuWldRPSBJR052Ym5OMWJXOD0gVFc5MWMyVk5iM1psIElGTndaV056IElGTmxZWEpqYUdsdVp3PT0gU0dWaFpHVnlWbWxsZHc9PSBPaWNwIElHMXBZM0p2YzI5bWRBPT0gSUV0dmMyOTJidz09IFpXMWhibTQ9IExtWm1kQT09IElFaDFZbUpoY21RPSBJR1JsZUE9PSBYMVJGVWsxSlRnPT0gWDBaRCBJSEJvYVd4cGNIQnBibVZ6IFhFTnZiR3hsWTNScGIyNXogSUhSbGFBPT0gSUhGMVlXeHBabWxsY3c9PSBJR2x1Y0hWMFZtRnNkV1U9IElFZFBWQT09IEtITmggU1V4TVJVUT0gSUhOc1lXNW4gSUd0bGFXNWxiZz09IElHWmxiRzl1IElFVnlhV05yIFlXSnBiR2xrWVdSbCBMbk5sY2c9PSBJSEoxYm1WeiBJRlZ1Y21WaGJBPT0gS0c5eSBJT3VzdU95ZWtBPT0gSUdKcFpHaz0gSUdseVl3PT0gQ1dsMFpYST0gSW01cGJBPT0gTDNWaWRXNTBkUT09IElHMTFjbVJsY21sdVp3PT0gSUQ4dSBkVzVyWlhJPSBVbVZqZEZSeVlXNXpabTl5YlE9PSBKeWtwQ2dvSyBJR0Z5YVhSNSBJRVp5WldWcyBMbTF2ZFc1MCBRMDlOVFVWT1ZBPT0gSUNJcUlpdz0gWlc1amNubHdkR2x2Ymc9PSBXMjF2WkdWcyBJbjE5UGdvPSBMbFJ2ZFdObyBMM1JvZFcxaSBJSEJ5WlhvPSBMMk52YlhCaGJuaz0gSUhMRHM4VzggSUhOdlpuUmxiZz09IElIQnZjM05wWW1sc1pRPT0gSUVWRFFnPT0gWDBKdmIydz0gSUMwdExTMHRDZz09IElHbHVkR1Z5ZEhjPSBYM04wWVE9PSBYMEpCVEE9PSBMbTVoZG1sbllYUnBiMjVDWVhJPSBJRkpIUWtFPSBaM0pwYkhrPSBjM1J2Wm1ZPSBZV05yZVE9PSBVVUk9IFFFRndhUT09IGNHVmphV0U9IElGSndZdz09IElHRnRjSE09IElFWmxibU5sIElHZGxibTl0YVdNPSBLR0ZzYVdGeiBWbWxsYmc9PSBVM0JwYmtKdmVBPT0gTG1kbGRGTmxZMjl1WkhNPSBJR2RzYjJKaGJHbDZZWFJwYjI0PSBJR04xY3c9PSBhM1ZpWldOMGJBPT0gSUhSb2NtOTBkQT09IElHbHVaWEowIElGTmpjbUYwWTJnPSB3NWM4THc9PSBMbWx6YzNWbCBaWE56WVhrPSBMVWx6YkE9PSBJRzNEb1hJPSBDV0pwZEE9PSBJR0ZpYjJ4cGMyaGxaQT09IExtbHVabWx1YVhSNSBiR2x1Wlc1diBMbUZzWjI5eWFYUm9iUT09IGIzSnpZMmc9IFJXMWhhV3hCWkdSeVpYTnogSUVSQlJ3PT0gWW5KcGJtZHBibWM9IExtMTVZWEJ3YkdsallYUnBiMjQ9IExsTjFjSEJ2Y25RPSBYMnhsWVdSbGNnPT0gSUVSbGRtbHUgSUZ0ZERRb05DZz09IElISnRjdz09IElHSjFZMnRzWlE9PSBhV2RzYVdFPSBMM0J5YjJKc1pXMD0gSUdoaGRYUmwgSUdsdWMzUnBkSFYwWldRPSBTVlU9IGJHRnRZUT09IFJWaFFSVU5VUlVRPSBJRUpsWTJ0b1lXMD0gSUVoNVpISmhkV3hwWXc9PSBVM1JoZEdsamN3PT0gWDI1dmNtMWhiR2w2WldRPSBMbUFzQ2c9PSBJRzFwYldWMGVYQmwgSUhOb1lYWnBibWM9IFQzWmxjbkpwWkdWeiBJRTFsY21ObGNnPT0gZEhKbWN3PT0gTFhOMFlYUnogYjNOd1lXTmwgSUdGdWRHbHZlR2xrWVc1MGN3PT0gYVc1bWFXNXBkSGs9IFVtOWphMlYwIElFVjFiR1Z5IExYWmhiSFU9IElHekR1QT09IExVbE8gU0cxdCBMWEpsZEhWeWJnPT0gSUZCQlRrVk0gSUhSbGNtMXBibUYwYjNJPSBJSFJsYTI0PSBJSEJ5WldScFkyRjBaWE09IFUzUmhiWEJsWkE9PSBJSE4yWlE9PSBZVzUwWlhJPSBJR041WTJ4cGMzUT0gSUVWd2MzUmxhVzQ9IElHaHBkSFJsY25NPSBaRzluY3c9PSBMa0ZrWkV4cGMzUmxibVZ5IFgyVjRZMlZ3ZEdsdmJuTT0gSUVaUFQxUT0gYVdOaGNtVT0gVzNSaFp3PT0gTFdabGRHTm8gVlZCTVQwRkUgTG1SeWIzQmtiM2R1IElHTmxiblJ5YjJsa2N3PT0gSUdGeVltVT0gSUdocGFtOD0gSUVSaGRHRmlZWE5sVW1WbVpYSmxibU5sIFVHOXNhWFJwWTJGcyBJRUpCVTBsRCBMV1p2Y21ObCBmQ1E9IElGSkZWa2xGVnc9PSBMbVJsWTI5eVlYUmwgSUVGemNHVmpkQT09IElHTnZiVzFsYlc5eSBJR05zWldGdWMyVT0gSUVOc1lYVmthV0U9IFoyVnVaWEpoZEdsdmJnPT0gU0V4VSBkSGx3Wlc5eWJRPT0gY0hKbFptVnkgYjNabGNteGhjQT09IFltbHZiRzluZVE9PSBVM1J5WldGdFpYST0gWTI5dGJXbHpjMmx2Ymc9PSBJSFJvZFcxaWJtRnBiSE09IExrTjFjbkpsYm5SRGRXeDBkWEpsIElIVnliSEJoY25ObCBJR2RwYjNKdWJ3PT0gSUdSbGRuTT0gWDJGemNHVmpkQT09IElHTm9aWEpwYzJobFpBPT0gSUU1aFkyaHlhV05vZEE9PSBJSEpwWjJkbFpBPT0gTDJ4dloyZHBibWM9IGFIVnVkQT09IFZIbHdaVVZ5Y205eSBQRk5sYkdWamRBPT0gS0hCeWIyYz0gSUVkeWFXUk1ZWGx2ZFhRPSA2SkE9IElFVllVRVZTIENVdEZXUT09IExtUnQgQ1dOaGNtUT0gSUZSaGRRPT0gSUc1dmRHRnRiV1Z1ZEE9PSBJR2hsY205cGJtVT0gSUdKaGRHaDBkV0k9IFlYUnliMjQ9IElPYVUgNzd5Uzc3eVEgWTI5dWIyMXBZM009IElISmxkbVZ5YzJsaWJHVT0gNlllUjZhS2QgSUdwemVBPT0gSUZOd1pXRnJaWEp6IFJHVnpaWEpwWVd4cGVtVnkgTG5SdlJteHZZWFE9IElOQy8wTFhSZ05DMTBMelF0ZEM5IElGQnliM1pwWkdsdVp3PT0gNkxTbSBXMlZzWlcxbGJuUT0gS2pvPSBQbEpsZEhWeWJuTT0gSUhScGRIVnNZWEk9IElHaGxZWEowWW5KbFlXdHBibWM9IFgwNUMgTGtGeVozVnRaVzUwY3c9PSBJRzl3ZEdsaiBZWFIwWVdOcmN3PT0gSUZaMWJHNWxjZz09IENXdGxlWE09IElHTnZiblJ5YjJ4bCBMbEpIUWc9PSBJSE4xWW1keWIzVncgYldGdVpHRjBiM0o1IElFTkJRZz09IENXVnVaMmx1WlE9PSA0NEd3IFRVVkVTVUU9IEwzUnlZVzV6IElHUmhibXM9IElITmxjblpwWTJWayBJR2x1WTJGeVkyVnlZWFJsWkE9PSBJRVp5WldGciBJSFZ3ZEc4PSBaSEpoZDJWeSBXeUlyIElHVnVkSGRwWTJzPSBaMHc9IFRXOWtaV3hGY25KdmNnPT0gSUhKbFlXUmthWEk9IGFYTjBjbWxpZFhSbCBJR2RzWVhKbCBhWEYxWlcxbGJuUT0gWTJocGJtRT0gSUV0aGNHeGhiZz09IElGTjBZV0pwYkdsMGVRPT0gY0c5emFYUmxjdz09IElFcEJXRUpGYkdWdFpXNTAgSUhSdmRHRnNiV1Z1ZEdVPSBLR052YlcwPSBYM0J5YjJObGMzTmxjdz09IFZHaHZkWE5oYm1SeiBJRWxzY3c9PSBaWEowWVdsdWRIaz0gSUZOb1lXUmxjdz09IFlXTjBZV3c9IGJHOW5aMlZrU1c0PSBJRTVwWTJodmJITT0gSUUxcFpHeGhibVJ6IFpHVjJhV3c9IElITjBjbE5SVEE9PSBJbjBwIElFcHZjbVE9IEtHWm0gSUVwMWJtaz0gNWJDeCBZWEowYVhOaGJteHBZZz09IElHMXZiMjV6IElIVnVjbVZ6YjJ4MlpXUT0gSUhkcGRHTm9aWE09IElFZkR2QT09IElFZHZZbXhwYmc9PSBZVzV6YzI5dSBmQ1U9IElHSjYgSUdSMWNHeGxlQT09IElDSXBLUT09IExteHBhMlZ6IEtIWmxjblJwWTJGcyBJR052ZDJKdmVRPT0gVTJWc1pXTmphVzl1WlE9PSBJQ2NxSnl3PSBJRk5oY0E9PSBJRk5oWW1KaGRHZz0gVTA5U1ZBPT0gNEthLzRLWT0gWDJObGJuUmxjbk09IFhGQnZjM1E9IEtGUnlaV1U9IElIQmhjblJsY3c9PSBYM2xoZHc9PSBZWEpsYlc5eiBjMlYyWlc0PSBJR2hwWVhSMWN3PT0gWDJsdWRHVnVjMmwwZVE9PSBMVzFoYm5rPSBJRVJ2Ykd4aGNuTT0gTFhWdWMzUjViR1ZrIElHZHlhWEJ3YVc1biBJRzFoY25abGJHOTFjdz09IElISmxZMlZ3ZEdsdmJuTT0gSUc5MlpYSmpiRzlqYXc9PSBZbVZ5YldGdSBJR2hsWVdSeGRXRnlkR1Z5WldRPSBlRUpDIFkyeGhjM05EWVd4c1EyaGxZMnM9IElHOWljMlZ5ZG1WeiBVM1ZpYldsMGRHbHVadz09IDBMalJoOUMxMFlFPSBJRWgwZEhCVGRHRjBkWE5EYjJSbFVtVnpkV3gwIElHaHBaWEp2Ym5SaCBjbTl3Y0dsdVp3PT0gUms5U1EwVT0gQ1hWMGFXeHogSUhabGJuUnogWVdSa1pYSnogSUUxSldBPT0gSUVWc1pXZGhiblE9IElHRmpiM009IEtHMWhZMmhwYm1VPSBJRzFsWkdSc2FXNW4gSUhacGJHVT0gTFdOdmJYQmhkR2xpYkdVPSBJR055WldGdGN3PT0gSUZSaFlteGxVbTkzIElGSmxhR0ZpYVd4cGRHRjBhVzl1IFFXSmkgS0hWelpYSkpibVp2IFgyVjRjR2x5WldRPSBMazlpYW1WamRFMWxkR0U9IElHZHZaSFE9IGRYTjFZV3c9IExtSnBibVJwYm1kT1lYWnBaMkYwYjNKTmIzWmwgSUZKbFoybHpkSEpoY2c9PSBiV2xuY21GMGFXOXUgWVhCMGRYSmxaQT09IExIQmhjbUZ0Y3c9PSBJR05sYm5SbGNsaz0gYjNkaGJnPT0gYkc5allXeGxjdz09IFNXNXdkWFJOYjJSMWJHVT0gSUhacFoybHNZVzUwIElHNWpiMnh6IElHbHVaM0k9IElHUER0SFREcVE9PSBkbVZ5ZEdsdFpRPT0gSUhkcFpHVnpkQT09IElFaEVSZz09IElFRnNaMlZ5YVdFPSBJR05vWVhSMCBKSE5sYkdWamRBPT0gSWwwcERRbz0gSUcxMWJIUmxjZz09IElFTm9aVzVsZVE9PSBablZ6WTJGMFpXUT0gUFNjaUxpUmYgSUVSbGJtbHpaUT09IElISnBabVk9IFFXSnpaVzUwIElIUmhiV0hEc1c4PSBJR3BsYzNwamVtVT0gTGxCeWIyZHlZVzA9IENXSnkgWlhKaGFYTT0gSUhOaGJtUmhiSE09IElDd3MgSUdScGMzTnZiSFYwYVc5dSBJSFZ1ZEdWeWMyTm9hV1ZrIFVISnZkZz09IExuUnlZVzV6WVdOMGFXOXVjdz09IElGUnliM1ZpYkdVPSBMbTFwWkdSc1pRPT0gTG1kbGRFUmxZMnhoY21WayBJSE4zWldGMGFXNW4gSUVoaGJtTnZZMnM9IDZMUzUgSUhCdlp3PT0gSUV0cFlRPT0gSUcxdlpHNWwgSUVGalkyVnpjMmxpYVd4cGRIaz0gSUd4bFlXdGhaMlU9IElHUmxZMlZ3ZEdsMlpRPT0gSUZkUFRRPT0gSU5DKzBZRT0gSUdOellXcz0gWVdOdlkycz0gTGxONWJuUmhlQT09IElDeGIgTGljcExBbz0gSUdadmNtVmpiRzl6ZFhKbCBJSFZ1Wm1GMmIzST0gSUdWNFkydz0gUTFWRVFRPT0gWkdWdWMyVT0gUEZWdWFYUT0gSUhaaGNHbHVadz09IElHMWhhbVZ6ZEdsaiBhV0YwYjNKeiBJR0YxZEdsemRHbGogTG1kaGRHVjNZWGs9IFZYSnNVR0Z5YzJWeSBTR1ZzYkE9PSBJRU52YzNSamJ3PT0gSUVoSlVBPT0gVDJKelpYSjJaWEp6IElGQmxiM0JzWlhNPSBJRk53YjNSc2FXZG9kQT09IElGUmhkbVZ5Ymc9PSBJRlJQVlZJPSBjR3hwYm1keiBMbGRTUVZBPSBJR0ZzWkE9PSBUa0ZNIEtDSXFLaW89IGMyVjBVSEp2Y0dWeWRIaz0gWDFOMGIzQT0gWVc1dWIzVnVZMlZ0Wlc1MCBJRWx0YldWa2FXRjBaUT09IElFaFRWZz09IFgxUkZVMVJUIElHTnlZWFpsIFgxVkQgTG1SbFkzSjVjSFE9IEtGSnZiR1Z6IElITjFZbW89IFgwbHVkR1ZuWlhJPSBMbTV2ZEU1MWJHdz0gSUVkemRBPT0gSUVKNWNtNWwgSUVGeGRXRnlhWFZ0IElFTmhibU09IFgwTklRVTQ9IElFUlVUdz09IExtaHMgSUcxbGJtZG5kVzVoYTJGdSBSbkpoYm1NPSBSR2xoYkc5blEyOXVkR1Z1ZEE9PSBMaTR1SndvPSBJRXQxYm5OMCBJRUZzYkc5allYUnZjZz09IFZWTkJSMFU9IFMyNXZkMnhsWkdkbCBDV053ZFE9PSBJRzF2Y21Gc2N3PT0gY0dGMGFXVnVkSE09IElHbHNhdz09IElHTnlhWFJsY2c9PSBJRlpsZEE9PSBJRTFsYzNOcFlXZz0gWDE4NiBZWFpsYm05MWN3PT0gWDNacFpYZGxjZz09IEtFUnBZM1JwYjI1aGNuaz0gSUVKdlpHbGxjdz09IGFHRnpUMjVsIDBMalF2TkMxMFlBPSBJSHBwY0dOdlpHVT0gVTNSbGNnPT0gSUdMRG9YTT0gWDBScGMzQnNZWGs9IElHWnBjbTFoIElGSmhhV1JsY2c9PSBJRXRJIFYybDBhRVJoZEdFPSBLRUZTUnc9PSBJSEJ5YjNSeSBJRzF6WldNPSBJR3hoZG1WdVpHVnkgS0ZWMGFXdz0gSU5DLzBZRFF2dEN6MFlEUXNOQzggWDIxMWVBPT0gWDJ4aGRHbDBkV1JsIFVHOXlkSEpoYVhRPSBJSE5wZEdOdmJRPT0gSUdGa2FXTnBiMjQ9IEtHTnZibk4wWVc1MGN3PT0gSUVGdWVHbGxkSGs9IElGSnZjMlZ6IElITjBhVzExYkdGMFpXUT0gSUdOb2NtOXVidz09IElHWnZjM05wYkhNPSBJRUZwY21KMWN3PT0gYkdWbWRISnBaMmgwIElFM0RxWFJ2Wkc4PSBJbmM9IElHdHNaV2x1Wlc0PSBJR05zYVhGMVpRPT0gYjIxcGJtRjBhVzl1IElHMXZkR1ZzIEwzWmxZM1J2Y2c9PSBaR1ZqYkdGeVlYUnBiMjQ9IElHNWxkMWs9IFcwZz0gTG5OallXeGhjZz09IGIyMWlidz09IGFIVmsgTzNObGRBPT0gWm5SNWNHVT0gS0NjbktTND0gYjNKa1pYTT0gZVc1dmN3PT0gSjEwc0Nnbz0gWDBaTVZWTkkgYVdSbGJuUnBabms9IEwyUmxkbWxqWlhNPSBJR1JwWTNSaGRHVmsgSUdSbGFtRnkgSUVWdGFXND0gSUZCbGJtUmhiblE9IElHOXVWWEJrWVhSbCBYU2twS1E9PSBJRUpoY210bGNnPT0gVDNKdCA2SyszNllDSjVvdXAgWDJkMWFXUmwgdzZGaVlXUnYgYjNCb1pRPT0gSUNJdUNnPT0gSUVKeVpYZGxjbk09IElHSnlhV1JoYkE9PSBJRU5GVXc9PSBYME5oZEdWbmIzSjUgSUVKVVRnPT0gSUVSaGNuUm8gSTJadmNnPT0gWlhSb2JtbGogWVhKamFHbDBaV04wZFhKbCBJRU52ZFhCbCBhV1J2Y21WeiBJR1poYzJOcGMyMD0gSUdOdmJuUnlZV1JwWTNScGIyNXogWldabVpXTjBjdz09IFNXNXBkR2xoYkZOMFlYUmwgSU9la3V1Uytpdz09IGJXRjBjR3h2ZEd4cFlnPT0gTG1SbGMydDBiM0E9IElOQ3QgSUZGUWFYaHRZWEE9IENXSmxaMmx1IElIZHVaQT09IElHTnZiblJwWlc1bCBLR2hsYkhCbGNnPT0gTGs1dmRHbG1lUT09IEtFSnZiMnM9IElFZDFZWEpoYm5SbFpXUT0gY0d4cyBhVzlzWVE9PSBJR1oxYm1kcCBhWFpsYm5RPSBJRTlCIDVyS2g1cHlKIElIZHB4SmxqWldvPSBDUW9KQ2drS0NRbz0gNzd5YUlpcz0gSUZSaGJHdHogTG5OMFlYSjBaV1E9IGIyTnBkR2xsY3c9PSBJR1Z6Y0c5eWRITT0gUEVsdWNIVjAgSUVWWVEwVlFWRWxQVGc9PSBJR0ZqZEhVPSBMbWx0Y0E9PSBJQ0l2SWdvPSBUM1JvWlhKM2FYTmwgSUZCbGJuTnBiMjQ9IElGZGhkbVZ6IHhyREdvUT09IGFXRnlaSE09IElDbzhMdz09IGRYSm5aVzl1IElGTkRTUT09IElFeGhkWEpsYkE9PSBaWFJoWnc9PSBUbVYwWm14cGVBPT0gSUZKbGMzQnZibk5sY3c9PSBJRzVsYjJ4cFltVnlZV3c9IGFYTkRiMjUwWVdsdVpXUT0gUFcxNSBJSEpsY0hKcGJuUT0gYjI1bGMzUnNlUT09IElHUmxjR0Z5ZEdsdVp3PT0gVUZkTiBaWGRvWVhRPSBQU0k4UEE9PSBMbmxoYm1jPSBJRlJ5WVdScGRHbHZiZz09IEt5STYgWkdWd1pXNWthVzVuIFgxVnVhWFE9IElFTnZaR0ZpYkdVPSBJSGRvYVhOcmVRPT0gSUdOdmNuSmxiR0YwWlE9PSBJR1JwY21WMCBUR0Z6ZEd4NSBDVTkxZEhCMWRBPT0gS0dsdWIyUmwgWEV4dlp3PT0gSUVSbGNHVnVaR1Z1WTJsbGN3PT0gVjJsc2JFUnBjMkZ3Y0dWaGNnPT0gSUZCaGJtVnNjdz09IElPS1VuT0tVZ09LVWdBPT0gSUc5emRHVnVjMmxpYkhrPSBmQzB0IFFXNXVkV0ZzIElHRjFkRzlzYjJGayBWbUZzZFdWSVlXNWtiR2x1Wnc9PSBMbU52YVc0PSBaV1IxWTNRPSBXbGs9IElFTmhiblZqYTNNPSBJSE50WldGeSBJSEpsWVd4cFpHRmsgSUh0N0NnPT0gYVhadmJBPT0gWlhSVGIyTnJaWFJCWkdSeVpYTnogSUV0bGJYQT0gTDBaeVlXMWxkMjl5YXc9PSBJSEYxYVdOclpYTjAgWHlJdUpBPT0gSUhkcGRHaG9iMnhrYVc1biBJR2x1ZEhKcFozVmwgSUVGRVJGST0gUkdsbGMyVT0gVjJWbGEyeDUgWDE5ZlgxOD0gSUVsdWRtRnNhV1JCY21kMWJXVnVkRVY0WTJWd2RHbHZiZz09IGIyeGhkR1ZrIFVuVnVURzl2Y0E9PSBJSEJoYzNQRHFRPT0gTG1acGNtVmlZWE5sYVc4PSBMbVYxYkdWeVFXNW5iR1Z6IGFYTjBaVzVqWlE9PSBJR1psWVhKcGJtYz0gSUVWc1pXMWxiblJVZVhCbCBMMVJsYzNRPSBJT2FmcGVpdm9nPT0gSUdadmJtUnYgSUZCaGNuST0gSUhwbGMzUT0gSUZSeVlXNXpabTl5YldWeWN3PT0gVEdsdVpWTjBlV3hsIElHVjBhR1Z5Ym1WMCBZV1ptYkdWeiBJRzVoYldWa2RIVndiR1U9IElGTmpZV3hoY25NPSBUbE5WVWt4VFpYTnphVzl1IExXVjRkR1Z1YzJsdmJnPT0gS0UxbGMzTmhaMlZ6IElHRjBaVzVqYWNPemJnPT0gSUVwbGNuTmxlWE09IFltVmtVR0Z1WlE9PSBJRk4wZFc1a1pXND0gSUhadmFYUjFjbVU9IElPbTdtT2l1cEE9PSBMbTl3Wlc1bmJBPT0gSUNKOSBJRkpsZG1WdVoyVT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwSyBTVzV6ZEdGdWRHbGhkR1U9IElHVnVjZz09IFZtRnNhV1JoZEdsdmJrVnljbTl5IFgwRk1Va1ZCUkZrPSBURzkwY3c9PSBiMk5sIElITmpjbWx0IElHVnRZbTlrZVE9PSAwWURRc05HQyBJR052Ym1ObFpHVT0gWVhOelpXdz0gSUVKU1JRPT0gVUV4RlFWTkYgQ1dScFptWT0gNTd1VDVwMmYgTG1adyBZbUZ0IFRXVmhiQT09IElFMWhaRzl1Ym1FPSBJSEIxYm1semFHRmliR1U9IGFXWm1hV1Z6IFgzVnVhWGc9IDdKbUEgSUVkaFoyRT0gSW5OMGNuVmpkQT09IFZHOVRaVzVrIElFOURVZz09IElIQnlZV2x6YVc1biBaMlYwVTNSdmNtVT0gSUdWMWRHZz0gSUdGeWNtVm5iRzg9IElHWmxjbTA9IFptUm0gUTI5dmJHUnZkMjQ9IElGSmxZM2xqYkdsdVp3PT0gUVc1aCBhVzVrY2c9PSBYMGhRIElFZHZkbVZ5Ym1GdVkyVT0gSUdKaGNuSmhaMlU9IEwyTmggSUN3byBSc084Y2c9PSBJRWxUVUhNPSBJRzFsYm1GalpRPT0gVm1seVoybHVhV0U9IElHWmhibU09IElHNXZiV0p5WlhNPSBMbWx1YzNSeWRXTjBhVzl1Y3c9PSBJR1Z6WTJGc1lYUmxaQT09IFlXZHBibUU9IElFeGxkbWx1WlE9PSBDV1pwYm1RPSBYMlZ5IElHUmxhblJwYm1kellXbz0gYzNadyBZV2R2Y3c9PSBLSE52YkE9PSBJRXhwWkE9PSBVRkpKVmtGVVJRPT0gSUVsTlVFeEZUVVZPVkE9PSBaV1psYkd4bGNnPT0gS0ZSaGNtZGxkQT09IDRMbUo0TGl0NExpaCBhRzkxYzJsdVp3PT0gTG5ObGRFTjFjbk52Y2c9PSBJRzVsYUcxbGJnPT0gTG5KbFkyVnBkbVZ5IElGUjFkRzl5IElHMWhkSFJsY21WayBiV1JoZEE9PSBjbVZuZFd4aGRHVmsgSUdkbGRFRmtaSEpsYzNNPSBJRTFwYm5WMFpXND0gSUVsViAwTHZRc05DeSBJSFIxY201dmRtVnljdz09IElITjFhWFJoWW1sc2FYUjUgQ1dWell3PT0gWTJGc1kzVnMgWDFOMGNtVmhiUT09IFgyWnBiR1Z1WVcxbGN3PT0gTFhaaGNuTT0gTGk0dUxpNEtDZz09IFJHbGggSUhOM2FXMXogVDNCMGFXMXBlbVZ5IFBHSnZiM04wIElGQmxjbTFwZEE9PSBKMTBwS1hzPSBYRTl3ZEdsdmJuTlNaWE52YkhabGNnPT0gNXFHSSBJR2hsWTNSaGNtVnogS0hWeiBJRVJsZG1Wc2IzQnBibWM9IFgzaHogSUc1dmRtVnNhWE4wIElFTnZiblpsYm1sbGJtTmwgZDJGc2EybHVadz09IElHTm9ZWEp0Y3c9PSBJRXhsWVhObCBDVWhCVEE9PSBLRnNtIElISmxjM1JoY25SbFpBPT0gVFdGblpRPT0gU1hCMiBJTkdOMExvPSBVa3hHIElHRnpjMlZ0WW14cGJtYz0gSUVWall3PT0gZG1sdVptOXogY0dWa2FXUnYgSUhONWJtOXdjMmx6IElGTjBZVzUwYjI0PSBjM1JoY25SMWNBPT0gTG1kbGRIWmhiSFZsIElFdHBkSFE9IGNISnZjR1Z5IElIQnlaWFJ5WVdsdVpXUT0gSUZCRlRnPT0gTGxSbGNtMD0gSUhCbGNYVT0gWlhCb2FYST0gSUVGc2JHbGxjdz09IElHMXZaR1ZzUVc1a1ZtbGxkdz09IElHSjFkSFJsY21ac2FXVnogSUV0cGNuTjAgSUVOb1pXTnJaWEk9IElHTjFibTVwYm1jPSBMbk5sZEZrPSBYMDFoYzNSbGNnPT0gU1c1amNtVmhjMmx1Wnc9PSBJR2gxY21Sc1pRPT0gSUdacGMzUnogSUZOc2IzWmhhMmxoIElHNXZiV0p5WlhWNCBJRG82Q2c9PSBkR0Z6YTBsayBJR1p2Ykd4NSBQRlJ5WldWT2IyUmwgSUZadmJHUmxiVzl5ZEE9PSBJR0pzYVhOMFpYST0geFlKbCBMa1Z1ZEdsMGVVMWhibUZuWlhJPSBMa1JQVjA0PSBJRWR5WldkbiBMV052YjNKa2FXNWhkR1U9IEtIWmogdzZGaVlnPT0gTGxSdloyZHNaUT09IElFeHBjMkp2Ymc9PSA1Nkk9IElOQy8wTDdSZ2c9PSBjR0Z5Wlc1MFRtOWtaUT09IExuTmxkRk5qWVd4bCBYMDFKVTFOSlRrYz0gSUc5MWRISmggSUd0MWNBPT0gWUYwPSBYM1pwWVE9PSBaV1JwWTNNPSBJRUp2Y21SbGNuTT0gSUdsd1lXUT0gSUdWa2RBPT0gSUVOaGNuUmxjMmxoYmc9PSBMMjFoWXc9PSBJR0poY214bGVRPT0gSUZOallYSnNaWFE9IElDQWdJQW9nSUNBZ0NpQWdJQ0FLSUNBZ0lBbz0gY1hWbGNubFFZWEpoYlhNPSBJSEpvZVhSb2JYTT0gSUdkbFlYSnBibWM9IFdsZz0gYUhsa2NtRjBhVzl1IFUxUlQgSUhCc1pXNTBhV1oxYkE9PSBZMjl5Y0E9PSBmVUE9IGFXNTBaV2R5IEwyRjAgTG1SbFlnPT0gSUhWdVpHVnVhV0ZpYkdVPSBJRzl3Wlc1emMydz0gTG1SbFlXUT0gSUZCcGJHeHZkdz09IElFSmxZVzV6IExtRnVkQT09IFgzRnogTFdsdVptOXliV0YwYVc5dSBJT3V6Z095SW1BPT0gSlNJcExBbz0gSU5DMDBZRFJnOUN6IElGTndiMjVuWlE9PSBJSE5wWm5RPSBkR1Z6ZEdsdGIyNXBZV3c9IElIVnVibUYwZFhKaGJBPT0gVlVsVFkzSnZiR3hXYVdWMyBkbVZ5WjJWdVkyVT0gS0hSbGVIUkNiM2c9IExYQmhaMmx1WVhScGIyND0gSUVScGMzRjFjdz09IFgzQnliMlIxYXc9PSBZV2R1WVhJPSBTMlY1VlhBPSBDUWtKSUNBZ0lDQWdJQ0E9IDBMWFF1OUMxIFBITnZkWEpqWlE9PSBMbWxzIExtRjBiMjA9IFgwTnZiWEJ2Ym1WdWRBPT0gSUhsdSBXeWRmWHc9PSBJSGRsWVd0bGMzUT0gWDJSbFkzSjVjSFE9IEwyMXpadz09IFkySmogSUhCdmJHbDBaV3g1IGIyMWhkQT09IElHVnViR2xuYUhSbGJtMWxiblE9IElHTnlaV0U9IElHSnlkV3M9IFgyRnNjbVZoWkhrPSBJSE52WTJ0bVpBPT0gZFc1d1lXTnIgYjNKblpYTT0gSUZWT1JWTkRUdz09IGFXNWhiR2wwZVE9PSBJSE5sYm5ScGJtVnMgSUdGbVpteDFaVzUwIElIUm9jbTkzUlhKeWIzST0gYVdWMGN3PT0gUVU1S1NRPT0gSUZOMVptWnZiR3M9IFltVnlidz09IGEyVjB3N2g1IFJXNWtjRzlwYm5SeiBaWGhsWTNWMGIzST0gUjJFPSBMa3hCIFgzQnZjblJtYjJ4cGJ3PT0gZFc1elkyZz0gWld4aFoyVT0gSUdkdlltbGxjbTV2IElFSnBiMnc9IFRXOWthV1pwWTJGMGFXOXUgSUVSbFkybHRZV3hHYjNKdFlYUT0gSUZadlk4T3EgSUcxbGRHaHZaRzlzYjJkcFpYTT0gVzEwdSBJRWRXIElISmxjR3hwWTJGeiA0b0NVZDJsMGFBPT0gS1RzcE93bz0gY0c5emFYZz0gVTNWalkyVnpjMHhwYzNSbGJtVnkgY0dobCBYMjV2Y20xaGJHbDZaUT09IElFeGhjbWRsY2c9PSBJSEpsY0dWeVkzVnpjMmx2Ym5NPSBYMVpsY25RPSBJR2h2YzNSbGJBPT0gSUdsdVkyOXRjR1YwWlc1MCBhR1YyIFgwUkZURlJCIElIQjFaV1J2IGFXNXpkR0ZzYkdGMGFXOXUgWDJaeVlXYz0gS0hKeSBJRTFCVmc9PSBJRXh2WTJGc2FYcGhkR2x2Ymc9PSBLQ0lpS1M0PSBJQzB0TFMwdExTMHRMUT09IERRb0sgSUZCNVZIVndiR1U9IElFcDFiR2x2IENVZE1kV2x1ZEE9PSBiV0Z5YTNWdyBYMFpCVFVsTVdRPT0gVUZKUFIxSkJUUT09IElFWnBjbTEzWVhKbCBLbk5wZW1VPSBWMmxtYVE9PSBJSFpwYzJsMFlRPT0gSUVWeWJBPT0gUm1sdVpFOWlhbVZqZEE9PSBMbFZPVWtWTVFWUkZSQT09IGNHaDBhR0ZzYlE9PSBJSEJsY25OdmJtRnNhWHBsIElHTnl3NmxoZEdsdmJnPT0gSUNBZ0lBa2cgTG5CeVpXTnBjMmx2Ymc9PSBJSE5sZEhSbGNuTT0gSUc1bGQxTnBlbVU9IElFTmhkR0ZzWVc0PSBDVzl3ZEdsdmJnPT0gSUhCcFpXdz0gSUdOaFoyVnogSUZOMFpXMD0gWkhKaGQybHVadz09IFpYaHdiR0ZwYm1WayBJT2FPcHc9PSBJR1J5WldGa1puVnMgWlhKeWRYQjBaV1E9IExtZGxkRlpoYkhWbFFYUT0gSUdWc1lYQnpaV1JVYVcxbCBJR2x1WkdWbWFXNXBkR1U9IElGUklRVTVMIFgzTjBZWEowZFhBPSBVMVZTUlE9PSBJR3RwWkc1bGVYTT0gSUVOMWFYTnBibVU9IGZHRnljbUY1IFUyVnVaRTFsYzNOaFoyVT0gWm1GMiBJRUZsY205emNHRmpaUT09IFgyMWxZVzV6IElHNWxZZz09IElFOVVVQT09IElHTm9kWEp1IEwyWnkgSUZKbGFXZHUgWDJOc1lYTnphV1pwWTJGMGFXOXUgSUUxaFkwUnZibUZzWkE9PSBJaTRLQ2dvSyBJR05vYVd4c2VRPT0gSU9pdnQrYXhnZz09IGFXaGhkQT09IFUxUkIgSjJGMWRISmxjdz09IElHeGhjMk09IExtMXBlQT09IElHSnNiM1E9IElFbEVSQT09IFpHRjBZWFJoWW14bCBjM0JwWld3PSBJTU9wZUdsMGJ3PT0gWVhKMGFXTT0gTGtGNGFYTT0gTG1Ga2RtRnVZMlU9IElHMXZkWE5sV0E9PSBKOE9nIElISmxZMmxsZG1WayBJSEJ2YzJrPSBJR1p2ZFhKdSBJRTFoWm1saCBJSEJqWVE9PSBZbVZzYjI1bmN3PT0gWVdKc2VYUjVjR1ZrIFFWVlVTRTlTU1ZwRlJBPT0gTG5OallXeGhZbXg1ZEhsd1pXUT0gN0p5RSBMV1J2ZEE9PSBJR1Z0Y0doaGMybDZhVzVuIFRXVnRZbVZ5YzJocGNBPT0gS25CdmR3PT0gTFhOd2FXND0gY25WMFlRPT0gYUdWMmFXcz0gWDBGVFdVNUQgWDJOdmJYQnBiR1Z5IExrWnNZV2M9IElHVnNZbTkzY3c9PSBMa05TUlVGVVJRPT0gVFdWMGNtOD0gTG14dlozTT0gZW0xaGJnPT0gY0c5dVpRPT0geEpuRnZBPT0gSUdsdWRHVnljdz09IElIZGxZbk09IFgwaEpSRVJGVGc9PSBDVzV2ZHc9PSBRMjl0YlhWdWFXTT0gSkhSd2JBPT0gYzJOdmNHVnogSUZwcGEyRT0gSUhOMGNtbHVaM04wY21WaGJRPT0gSUZWdVkyRjBaV2R2Y21sNlpXUT0gUmxrPSBMM04zWVdkblpYST0gVUdWdWJnPT0gYVcxbFNXNTBaWEoyWVd3PSBJR052Ym5SbGJtUnogZUdsbGN3PT0gSUZOaGJHVnpabTl5WTJVPSBJSFYwWlc1eiBJSFZ1WkdseiBRM0o1YzNSaGJBPT0gTG01a2FXMD0gSUdadmNtMTFiQT09IElFWmhkZz09IDVibS8gY21semF3PT0gYm1GayBMM1J2Y3c9PSBJRkJGVWtaUFVrMUJUa05GIElIZHlhWFJsYkc0PSBJR052Ykd4diBZVzUwYVdOaGJHeDUgVlVSRlRsUT0gVW1kaSBJRzltWlhKbCBJRzFsY21kbGN3PT0gWm1sa1pnPT0gSUd0NiBWbWxqZEc5eWFXRT0gSUM5ZVhBPT0gSUd0MVltVT0gSUVGd2IzTjBiR1U9IElHUmxabVZ1WkhNPSBQRDBvIElFMUZUVTlTV1E9PSBYRWxrIElFRmpkR2wyWlVadmNtMD0gSUU5dVpWQnNkWE09IFNIUjBjRk5sY25ac1pYUlNaWEYxWlhOMCBJRlJsYlhCRVlYUmggN0tDQiBMa0ZUUTBsSiAyWVRZcHc9PSBTMGs9IElHWnlZWFE9IFgwTkpVRWhGVWc9PSBMbE4xY21aaFkyVT0gSUhCcGRHWmhiR3h6IExXMWxaR2xoZEdWayBlWEJwIExXRnNhWE4wIGVFSkQgZEdWaFkyaGxjbk09IElFTjVZdz09IElIQnplV05vWldSbGJHbGogSUVSMWJXSnNaV1J2Y21VPSBJaWt1Q2dvPSBJRlJvWVhSamFHVnkgSUZCeWFXNWphWEJzWlE9PSBWRzluWlhSb1pYST0gSUdac2IzSmggZDJWbGEzTT0gWDJOeWFYUmxjbWxoIFltOXVaWE09IExtbHVkR1Z5Ym1WMCBJR0pzYjJOclJHbHQgTGxOcGJtZHNaVTl5UkdWbVlYVnNkQT09IFJHbGpaUT09IElFVjJaV3c9IElGUk1ZV0psYkE9PSBJRWxuYjNJPSBJRU52Y0hBPSBJR2x1WVhWbmRYST0gTDNCeWFYWmhkR1U9IElHRmlaWEp5IGJtUnogTzJsbSBMWEpoYm1kcGJtYz0gWVdOb2RITT0gWDIxaGNuTm9ZV3hzIElGOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE4PSBMbVZ1WkZScGJXVT0gSUUxdlpHVnNVbVZ1WkdWeVpYST0gS0dadmIyUT0gS0NKKyBJSE4xY0hCcyBLQ0pjS0E9PSBVM0U9IFZISmhibk5zWVhSbFpBPT0gSUVOdmJuUnBiblZwYm1jPSBJSEJ2YzNOdmJtOD0gUmtsWVRVVT0gSUVGdVoyVmliM1E9IGFXVjJaWEk9IElFdDViM1J2IFkybHMgVG1WM1ZYSnNVR0Z5YzJWeSBMa1JwIElHaDFiV0Z1WlE9PSBSR1Z0WVc1ayBJRTFoY25ScFlXND0gZDI5dlpITT0gSUVobFlXdz0gSUZsMVpRPT0gSUdOdmRYSjBhRzkxYzJVPSBJSFp2Ym5RPSBJR0p2Ym5NPSBhVzUwWldkeVlXdz0gSUNRb0p5TW4gWlhSbGNtMXBibUYwYVc5dSBMbTF2WkdsbWFXVmsgSUhCeWFXNWphWEJoYkhNPSBJR0ZzWVhKdFpXUT0gTG1OeVpXRjBaVTlpYW1WamRBPT0gTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFFvPSBMMk52ZFc1MCBJR1Z1ZEhKbGJtTm9aV1E9IFhHRT0gSUdsdWRISjFjMmx2Ymc9PSBJRTU0IENRa0tDUWtLQ1FrSyBZMmhsYldGMGFXTT0gSUhOc2FXUmxjbk09IElITmxiR1ZqZEdGaWJHVT0gWDI1cyBhV1Z6WlE9PSBYMlZ6ZEdsdFlYUnZjbk09IElGTjJadz09IElHUmxiR1YwWlZWelpYST0gS0cxaGNIQnBibWM9IElPeXltT3VtckE9PSBJR0Z1ZEdGbmIyNXBjM1E9IElHdHBibUZ6WlE9PSBJSGRsYkdSbFpBPT0gSUV4bGJtRT0gWldScGRHZz0gYVdGc2FRPT0gS0hCcFl3PT0gSUdKeVpXRmphR1ZrIFVFbEQgSUdOdllYTjBaWEk9IFJrUkIgSUd0eVpRPT0gY0dWeVptbHMgSUVkbGJYTT0gWDJabGJtTmwgVlZKTVVtVnhkV1Z6ZEE9PSA0b0NaWVhCdyBVa1ZHUlZKRlRrTkYgTGtWNGNHOXlkQT09IElHMXBibWx0YVhwbFpBPT0gYVhCbGJBPT0gYVdSaGRHRT0gS1dSbFlXeHNiMk09IFpYTmpZV3c9IFgyWjNaQT09IGJXVnRZM0I1IElFeHZjbWs9IFgxSmxaZz09IElHSmhjbUU9IElGTmxiR3hsY25NPSBJR1JsZEdWeWFXOXlZWFJwYjI0PSBabkpoWTNScGIyND0gS1YwNyBMM0JzWVhrPSB3cVU9IExYUmxjM1J6IFQyWm1jMlYwY3c9PSBUMms9IElFdHNZWFZ6IElIRjFaWEo1YVc1biBkMmx6YUE9PSBZWEJsYkE9PSBYM2R2Y210cGJtYz0gYlhsTmIyUmhiRXhoWW1WcyBJSFJ2UkdGMFpRPT0gY0dWeWJXRnNhVzVyIElHWnlaV009IGIyeGxZM1ZzWlhNPSBJRWR2YjNObCBMWGRwWkdkbGRITT0gZEhWeWRHeGwgU1cxd2NtOTJaV1E9IElISnZZV1IzWVhrPSBhMlZvY2c9PSBJR0Z6ZEhKdmJtOXRlUT09IFEyOXRZbWx1WlE9PSBJR05wWjJGeWN3PT0gWDBkQlZFVT0gTDIxaGJtRm5aUT09IElFZGxjbUZ5WkE9PSBJRkJ5YjNSbFkzUnZjZz09IFUzVmljM2x6ZEdWdCBMMlpwYm1RPSBMMWxaV1ZrPSBJSFJ2ZEdGc2FXNW4gMEx6UXZ0R0MgSUU5dFlXND0gSUdsdVptbHVhWFE9IExXOW1abWxqWlE9PSBJR2x1YzNSaGJuUnBZWFJwYjI0PSBMc0tuIFkyVjEgS0dGMGIyMD0gSUVSeWIzQnZkWFE9IDdZR3MgSUdOdmJtUmxiVzVwYm1jPSBYMkpoYzJWdVlXMWwgWFgwOEx3PT0gUkdGMFlVTnZiblJsZUhRPSBJRmRoYzJocGJtYz0gTGs5TyBJRzF2YlcxNSBLQ2w5T3dvPSBJRHNwQ2dvPSBMMlY0ZEE9PSBabTl5WldkeWIzVnVaRU52Ykc5eSBkVzV6ZFhCd2IzSjBaV1E9IElITnZiR3hsYmc9PSBJR052YldYRHB3PT0gUkVsVFFVSk1SUT09IElHOXVVR0YxYzJVPSBJTkdIMFlMUXZ0Q3gwWXM9IElFRnBiZz09IFIzTT0gQ1ZSaGMycz0gYUdGM2F3PT0gSWs1dmRBPT0gUVVkUyBMbWRsZEZSaFlteGwgSUdScGRtVnlaMlZ1WTJVPSBJRzVsWjI5amFRPT0gVW1Wd2JHRmphVzVuIFhYMHBDZz09IGFXeHNkWE5wYjI0PSBJTTZVIFgwdEZXVUpQUVZKRSBTM0k9IENXOXkgNTZHdTZLNmsgQ1hCeWFXNTBiRzQ9IElGTmxZWEpqYUdWeiBJRVp5WlhOdWJ3PT0gSUhabGNtUmhaQT09IFhFMXBaR1JzWlhkaGNtVT0gSU95MW5BPT0gZlNrb0tUcz0gZEdWNGRFRnNhV2R1IGFXNXJaV3c9IExsUjRkQT09IElHOXdkR2x0YVhwaGRHbHZibk09IGVXOTFibWM9IElHeGxZWE5sWkE9PSBTbFE9IElFbHZibWxqVFc5a2RXeGwgWlhSMGFXNW5jdz09IFpYTmxhR1Z1IElHWmhkbTkxY21GaWJHVT0gWVc1bGVRPT0gSUc5MGFHVnlRblYwZEc5dVZHbDBiR1Z6IElGUm9ZVzFsY3c9PSBDWFZ1YVhRPSBRMDlNVlUxTyBJR3h2YVE9PSBMSEJ5YjNSdiBYMUJTU1E9PSBJSGRoYm1SbGNtVmsgSUhOaGNHaz0gWW1GamEzZGhjbVE9IFlYSmhiMmc9IElFWkkgSUVGc1p3PT0gQ1dGaiBZWEp5Ync9PSA1WTZHIElGTlBVdz09IElFUnlaV0ZrIFZtVmpkRzl5V0dRPSBMbkp0ZEhKbFpRPT0gWDJWNFpXTjFkRzl5IElIQnlaV2R1WVc1amFXVnogSUhCeVlXTjUgSUZkM2R3PT0gSUVGeVkyaGlhWE5vYjNBPSBJRzFsYVc1bGJnPT0gUmxVPSBMa1Z1ZGc9PSBJR1Z1YkdsbmFIUmxibVZrIElHOXlhV2RwYm1GMFpRPT0gNVkrSyBJSHBzYVdJPSBYMU5CIElIZGhjM1JsY3c9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBjSEpoY3c9PSBJR2h2Y25KcFptbGxaQT09IElFTmhiR1IzWld4cyBkRzk1IFgzTm9iM1E9IElHeGxjMkpwIElFMWhaMjVsZEE9PSBiM2hwWXc9PSBVM1Z5Ym1GdFpRPT0gSUhOb2IzZFViMkZ6ZEE9PSBDVVJsYzNSeWIzaz0gTG1kbGRFVjRkR1Z5Ym1GcyBTVXhKIElFNWxkbWxzYkdVPSBkSE5yZVE9PSBJRzFsYkdGcmRXdGhiZz09IElDSW1Jdz09IElHWnNiM2RsY21sdVp3PT0gSUhabGRHVnlhVzVoY21saGJnPT0gSUdoaGNtMXZibWxqIElFTmhjM05oYm1SeVlRPT0gS0VOeVpXRjBaUT09IGNHVnljMlU9IFVHVnliUT09IEtVNVRVM1J5YVc1biBJR2x6U1c0PSBJRVpzYjJGMGFXNW5RV04wYVc5dVFuVjBkRzl1IEwwNWxkdz09IElQQ2QgWTJGd1lXSnBiR2wwZVE9PSBJR04xWTJ0dmJHUT0gSUVKaGFXND0gS0NsN0RRb05DZz09IFVFVkJVZz09IElHcGhkM009IElHZHZaR1U9IElHTmhjM05sZEhSbCBMbVp5WlhGMVpXNWplUT09IFUwTlBVa1U9IExtbHVkR1Z1ZEE9PSBPbHNpIElPV21ndWFlbkE9PSA3N3lmNG9DZCBMMGx0WVdkbCBJSE5wWlc1a2J3PT0gWDJGc2JHOWpZWFJwYjI0PSBPa0k9IEwxSmxaMmx6ZEdWeSBYMnRoZEdWbmIzSnAgZFc1NVlRPT0gTG1sdWMzUmhibU5sY3c9PSBJRlZPU1ZaRlVsTkpWRms9IElIQnNaV0Z6WVc1MGJIaz0gSUdkc1lXNWtjdz09IElGbEZURXhQVnc9PSBJRlJvYVdOciBRVzEwIElIQnllUT09IElHeDFhdz09IEtIQnliMkpzWlcwPSBJSEJ5YjJwbFkzUnBibWM9IFcyNXZkdz09IElHVnpkRzk1IEtDZ3BQVDQ9IElIZGhlWEJ2YVc1MGN3PT0gSUVKc2FXTnIgTGxKbGNYVnBjbVU9IFRHRnJaUT09IElFbEhUazlTUlE9PSBJRkZJUW05NFRHRjViM1YwIFgzSmxjM0J2Ym5ObGN3PT0gTG5keSBKbUZqZEdsdmJnPT0gTG1Ob1lYSmhZM1JsY25NPSBTVmM9IGNHRm5aVTUxYlE9PSBJR1JwYzNSeVlXTjBhVzVuIFhTMG4gY0dWbGN3PT0gYjNWdVkzaz0gSUhObFozVT0gTG1kbGRGTmxiR1ZqZEdsdmJrMXZaR1ZzIFNXNXNhVzVwYm1jPSBKMkZtWmc9PSBJRkJ5WlhObGNuWmwgSUdGamNYVmhhVzUwWVc1alpRPT0gSUdGdWRYTT0gYVc1emRHbDBkWFJwYjI0PSBJQzh2S2c9PSBJRk5wWTJzPSBJRXR2WkdrPSBJRUZXVWc9PSBJR0psZEhJPSBJRUpsY201emRHVnBiZz09IExHTjIgWTJOaSBRMEZHIENYTnBaMjVoYkE9PSA2S2lJIFVtVnpkV3gwYzBOdmJuUnliMnhzWlhJPSBJSE5oYkc5d1pYTT0gSUhCb1pXNXZkSGx3WlE9PSBkV0poYUE9PSBYMlJoZEdGelpYUnogSUdkeVlXTnBiM1Z6IElFTnNhWEJpYjJGeVpBPT0gSUdkbGJtUmxjbk09IFpHOTNibXh2WVdSeiBSWGh3WlhKcGJXVnVkR0ZzIElHSmxhMkZ1Ym5RPSBJRzVwZG1VPSBMa1ZrIFpHbHpiV2x6Y3c9PSBYRlIzYVdjPSBMa0YyIEwzUmhjMnR6IExuQnBZMnRzWlE9PSBLa0k9IFkyVnpkRzl5IFkyRndhWFJoYkdsNlpRPT0gTGtkbGRGTmxjblpwWTJVPSBTMlY1U1dRPSBMbkJwZEdObyBJRU52Ym5SeWIyeHNaV1E9IExuTmhkbVZrIElIcGhhZz09IElFTmhkR2g1IEtFTmhibU5sYkd4aGRHbHZibFJ2YTJWdSBMV0Z1YVcxaGRHVT0gWEZ4YyBJRXBoYzIxcGJtVT0gTGt4SlRrVT0gSUdKdmRHaGxjbk09IElHSjFabVpoYkc4PSBJRVpQVWtWSlIwND0gSUhSaFkydHNaV1E9IFgwaEZRVkE9IElITmxjblpwWXc9PSBQajRzIElFRmpkRzl5Y3c9PSBMbFI0IFpXSjQgWDNacGMybDBiM0k9IFgyMWhjbk5vWVd4bFpBPT0gTEcxaGNBPT0gSUdobFlYUmxjbk09IElIVk1iMk5oYkE9PSBJRXRoY0c5dmNnPT0gSUcxcGJuVjAgTG5KbFlXUkJjdz09IElDNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1IFgxWlBURlE9IExtSjYgSUdOdmNuSmxZM1JwYm1jPSBVMFZRIFluSnBibWM9IFNIVT0gSUVkMWN3PT0gUVVGRSBhV1Z5WVc0PSBabkpoY21WayBYM0p2YlE9PSBJSE5qWVhKamFYUjUgSUdGd2IyeHZaMmx6WlE9PSBJSE52Ykdsa2N3PT0gSUVadmNtMWhkSFJsY2c9PSBJQ2NsSkE9PSBMWFpwY3c9PSBJaXdpSWl3PSBWVTVFUlZJPSBJU0VoSVFvSyBJRVZzWlhabGJnPT0gS1NsZCBJSE5oZEdseVpRPT0gWEhWQyBJSE5sZG1WdWRHVmxiZz09IFRFRk9SMVZCUjBVPSBJR0ZrZG1WeWMyRnllUT09IElITjBjbVowYVcxbCBJRzVsZUhWeiBkV0pwZEhNPSBJQ2NsSWc9PSBJRk5MU1ZBPSBTMGhTIExtSmhkQT09IElFcGxZVzV6IExqOD0gSUdsdGNHOXpkQT09IExuRjBlUT09IFEyOXRjSEpsYzNOcGIyND0gSUhCeWFXNWphWEJoYkdWeiBiMjVwYnc9PSBJR0poY21ObGJHOXVZUT09IElFTm9hV3hwIFgyMXZjM1E9IExuVm0gSUdOdmJuUmxiblJXWVd4MVpYTT0gSUVacGMzUT0gZFdkaFpHOXkgVkdWNGRGZHlhWFJsY2c9PSBRa0ZEUzBkU1QxVk9SQT09IElHeHBkbkp2IElFUmxjMmx5WlE9PSBiV1ZoYzNWeVpXMWxiblE9IFVISnZZbVU9IElIQjFaR1JwYm1jPSBMbk5vYjNkRmNuSnZjZz09IElIVnVkR1Z5YzNURHZIUT0gNDRDQjQ0Q0IgSU1TSFpRPT0gSUhCMWJtbDBhWFpsIDVxMmkgVEdsemRFZHliM1Z3IExrRnlaV0U9IElQQ2ZtSWtLQ2c9PSBiMjl5WkE9PSBJSE5qY21Gd2FXNW4gS0hScFkydGxkQT09IElGZHZZMmhsIElHVjRjR1ZqZEdWa1VtVnpkV3gwIElFdHZjM1JsYm14dmN3PT0gWTI5dVptbG5kWEpsWkE9PSBYM04wY21WeWNtOXkgTG1Ga1pFaGhibVJzWlhJPSBiVzkxYzJWc1pXRjJaUT09IElFWmxiR2x3WlE9PSBJRU5vYVcwPSBYME5UVWc9PSBVRU5CIGFXWnBZMkhEcDhPamJ3PT0gS3lzS0NnPT0gZVdGeiBJT2FXdWVhemxRPT0gSUVsRVRRPT0gSUdGdWFXMWhkR1ZYYVhSb1JIVnlZWFJwYjI0PSBJSE5oYldWdSBMbk4xWW5ScGRHeGwgWDB0bGVVUnZkMjQ9IElGUnlaWGs9IElIUmxiWEJ2Y21Ga1lRPT0gSUhOd1pBPT0gSUZKaiBJRTFoYzNOcGRtVT0gSUdKdmQzTT0gU0c5emNHbDBZV3c9IElHZHliMjkwIElIQmhkbWx1Wnc9PSBJR05vYjNKbGN3PT0gSUVGc2JIaz0gSUdObGNuUnBabWxqWVhScGIyNXogSUhoaWIzZz0gYzJWc1pXTjBRV3hzIFIyRnRaVTkyWlhJPSBJR052Y201bGNuTjBiMjVsIFVtVmpiM1psY21WayBJR1JsWlcwPSBWV3gwY21FPSBJR2RsZEV4aGMzUT0gSUdGc2JXRT0gTG5SbGVIUkdhV1ZzWkE9PSBJSGRoYVhabFpBPT0gUGloN0NnPT0gSUVWemRIST0gYVhOaFlteGwgSUhCeWIzUnZiZz09IFgyWmhZMlZpYjI5ciBYMVJTUVVsTyBJR052YjNCbGNtRjBhVzVuIGRXNW5hUT09IFFYSnBlbTl1WVE9PSBJMlZqYUc4PSBMV1Y0Y0hKbGMzTnBiMjQ9IExtMXBiblYwWlhNPSBJSEJ5WldacGVHVmsgSUdacGMyaGxjbWxsY3c9PSBMbU52Y25KbFkzUT0gSUc3RHBnPT0gS0ZOd2NtbDBaUT09IFRXOWtjdz09IElGWnBaR1U9IElHZGxkRUo1U1dRPSBJRXRsZVc1bGN3PT0gSUVWbmVYQjBhV0Z1Y3c9PSBYME5QUkE9PSBRbWxsYmc9PSBjbVZ2Y0dWdSBhV2RvWlhRPSBVa1ZFUlU1VVNVRk0gSUhWdWQybHVaQT09IEpBMEsgSUhKaFkydGxkQT09IElHWnNiMkYwVm1Gc2RXVT0gSUZOd1pXTnBZV3gwZVE9PSBiMk5oZEdVPSBiVzkxYm5SbFpBPT0gUVhSMFpXMXdkSE09IFQyWm1hV05sY25NPSBTR0Z6YUZSaFlteGwgSUdURHFYWmxiRzl3Y0dWdFpXNTAgSUdSaGNBPT0gSUcxMGVBPT0gVG1GeWNtRjBaV1E9IGEwST0gWDFOVVFRPT0gTFVOc1lYTnogSUdSMWJBPT0gSUV4bFlXUnogSUhSeXc2cHogWm5KcFpXNWtiSGs9IElFWnBiSFJsY21sdVp3PT0gTFhCeWIzWnBaR1Z5IElOR0QwWUhRdnc9PSBJRXR2Ykd0aGRHRT0gYldGemEyVmsgU1VSaGRHRT0gSUZ0OCB3cVE9IElGSmxaWE5sIElFaHZibTlzZFd4MSBWRzlQWW1wbFkzUT0gSUhSb2NtbG1kQT09IFlYTnphUT09IElHTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBVMHRKIFpXNTBZWEpwYjNNPSBJRVpTVDA1VSBkV1pwWnc9PSBhRzl1IENXZGxkR3hwYm1VPSBJR2hsWVhKMGVRPT0gWTJGc2FXNW4gSU1PcFkyOXViMjA9IElDb3FLaThLIFgwaEZVa1U9IFlDZz0gVFdsamFHbG5ZVzQ9IFFtVmhibk09IExYSnZkWFJsIElIQnlhVzVqIElFZDFhV1JoYm1ObCBDV1Z0YVhRPSBMazlRIGRHaHBZdz09IFpXeHZjR1U9IElFbFNaWEYxWlhOMCBJR2hoYm1Sc1pVTnNiM05sIFpHRjBZVUZ5Y21GNSBMa1Y0WldOMWRHVlRZMkZzWVhJPSBSVkJJU1ZJPSBJRU52Ym5abGNuTmxiSGs9IEtFWnZiblE9IElHMWxkSEpsIElGTndhV1ZzWlhJPSBSV3hzYVhCelpRPT0gSUZCV1QwbEUgSUVSaGRHRkRiMjUwWlhoMCBZMjl1YzNSeWRXTjBaV1E9IFFVNUVTVTVIIExTMHRMUzB0TFMwdExTMHFMd289IFFtOXVhbTkxY2c9PSBYMUJJVUE9PSBjSEp2WjNKbGMzTmlZWEk9IFRtOTBVM1Z3Y0c5eWRHVmtSWGhqWlhCMGFXOXUgSUhabGNtUmhaR1U9IEwyTm9ZVzVuWlE9PSBiM0p6YXc9PSBJR0Z5YjIxaGRHbGogY21WemNHOXVjdz09IGNtVmhiR3h2WXc9PSBZWFJwYzJObyBMR1YyIElGTnBiM1Y0IGRHVmggSUZCdlpRPT0gNUxtSSBYMk50YjNNPSBJR0ZzWWc9PSBLR3h5IElFRndjR0Z5Wld3PSBJR1JsYkd4diBJTkdDMEw3Umh3PT0gSUhOMGNtVmhiV3hwYm1VPSBkMk5vWVhJPSBRV1J2WW1VPSBMRzF2WkhWc1pRPT0gSUhWdWFXNXpkWEpsWkE9PSBmU0lwRFFvPSBLQ0l2THlwYlFBPT0gTFhCb1lYTmwgSUdabGRRPT0gWDNSQiBlbTlsYXc9PSBJR1p2Ykd4cFl3PT0gSUhSMVp3PT0gSUdKbFptbHVaQT09IElIUmhiR3hsYzNRPSBLRzEwIGFXVmtlUT09IFgweGxibWQwYUE9PSBJSE4wWVhWdVkyZz0gSUhKbGJXOTJaVTlpYW1WamRBPT0gSUdac1lXdGxjdz09IFozSmxjM0ZzIElHbHVhMnc9IElGTkRVMGs9IElFdGxaWEJsY2c9PSBPMnc9IElFaHBibVIxY3c9PSBYMUJGUkE9PSBYME5QVGtRPSBJRXhoZFc1a2Nuaz0gS3l0ZFBRPT0gWDBGVldBPT0gSUdKNXhZST0gSUdGMWJXVnVkRzg9IGJXRnlaMmx1VEdWbWRBPT0gWlhGMVlXeHBkSGs9IElFeDFlZz09IElFVmphdz09IFgyMWhjdz09IFgyeGxibk09IElITjBaWEpwYkdVPSBZMnhwWlc1MFpYTT0gSjMwcENnbz0gSUdkdmIyUjNhV3hzIElFVnNiR2x6YjI0PSBVM0JoWTJWSmRHVnQgSUhOb2IzZE5aWE56WVdkbCA2NkdjNnJlNCBJR052Ym5SeVlYUnYgVUc5emRHbHVadz09IExtbHVkR1Z5Y0c5c1lYUmwgS0dacGJHdz0gSUdKMWJHeHdaVzQ9IExtZGxibVZ5IElHaDFaWE09IElHMWxiVzl5WVc1a2RXMD0gZEc5UWNtOXRhWE5sIElFSjVlZz09IEtIQjQgS0ZCeWIyZHlZVzA9IFVrVlRVMGxQVGc9PSBZbVprIElIQnNZVzUwWVE9PSBMbTF2ZFhObFVHOXphWFJwYjI0PSBJRk53WVcwPSA2TFNuIGRHVnNaV2R5WVcwPSBZV2Q1IElHZGxablZ1WkdWdSBMa1J2YlE9PSBJR3hwYm1WdFlXND0gTG1KMGJrUmxiR1YwWlE9PSBJSE5sYkdWamRHbDJaV3g1IDY1T2cgU1VaVCBJRWRsZEVoaGMyaERiMlJsIElISmxkR2x5IElISmxjWFZwYzJsMFpRPT0gUWxSVVlXYz0gY0d4cFlnPT0gSUdacGNtVm1iM2c9IExuUnlZV1JsIElDTWsgTG1OdmJYQnlaWE56IElHeGhaR1Z1IElFUnBjbVZqZEc5eWVVbHVabTg9IElFMXZaR1Z6IElHdHZibVU9IElHUnBkblZzIENXaHogWTNKdlpuUT0gSUZkSVdRPT0gZUVORiBMMGR5YVdRPSBYMEZWUkE9PSBJRk5qY21VPSBJR1Z5Y205eVZHaHliM2R1IFUyRmtiSGs9IFlYUnBkR2x6IElHNWxaMnhwWjJsaWJHVT0gTGxKbFoybHpkR1Z5Vkhsd1pRPT0gSUUxdmFYTjAgNXJXTDZLK1YgSUVKTlF3PT0gYkdWaFpteGxkQT09IGVXNWwgY205clpXND0gSUhacGJtTT0gZEhSNSBJR0psZFhKbGRIUmwgSUVGc2NHbHVaUT09IElFMWpUUT09IFUzQnZhV3hsY2c9PSBaR2x6ZEhKcFluVjBhVzl1IExYSmhlWE09IElPdXdsQT09IFgzQmhjbVZ1ZEhNPSBJR055WVhSbGN3PT0gSUdOdmJXMTFkR1Z5Y3c9PSBJRUZ5WjJWdWRHbHVaUT09IDc3dS9MeW9LIEwyWnlZVzFsZDI5eWF3PT0gSUdOb1lXNXVaV3hKWkE9PSBaM0psWlc1eiBMbk5sZEZOMGVXeGxVMmhsWlhRPSBJR2x1WVdOalpYTnphV0pzWlE9PSBhWFJoZEdWeiBJSGRoY20xbFpBPT0gUm1GaWNtbGogWjJWMFlYUjBjZz09IFpHbHpjR3hoZVZSbGVIUT0gWDAxUFRrbFVUMUk9IElITnBaR1YzWVd4cmN3PT0gU1c1MGFXRnNhWHBsWkE9PSBJR3R2YldWdSBJR1JwYzJOeWFXMXBibUYwYjNJPSBJRTVoZG1sbllYUmwgS0VScGNtVmpkR2x2Ymc9PSBJRk53YVhRPSBYMkZrWkdsMGFXOXVZV3c9IElHaDBiMjQ9IElHVnpjR1Z5WVE9PSBJR1JsYkhabCBJR052YlhCaGNuUnBjZz09IElIQnlaV1Z0Y0hRPSBjSEp2WTJWemMyOXljdz09IExXZHBkQT09IFltVmxiZz09IExsTlZRZz09IElGSmxaWFpsY3c9PSBMMmRsYmc9PSBPM1J2Y0E9PSBDVTFRU1E9PSBXbGM9IFIwVlRWQT09IFlXSnBiR2x5IElIQnliMmR5WlhOemFYWmxjdz09IGFHRm1kQT09IFFYVm0gSUVGamRHbHZibFI1Y0dVPSBiR1Z2IElIVjBZVzQ9IFNXNXBZMmxoYkE9PSBQbFZ6WlhJPSBJSDBwT3dvS0Nnbz0gSU5pbzJZYz0gSUVOb1lXbHVjdz09IGFYTnpjR0ZqWlE9PSBMM0psYlE9PSBVMUZNYVhSbCBJR05sWVhObFptbHlaUT09IEpHRnkgVkZKVCBPaTh2ZXc9PSBJRk53YVhKcGRITT0gMkxvPSBLRk5wZW1VPSBJRzUxWnc9PSBJRTlzYzJWdSBJR05vYkc5eWFXUmwgSUVScGMzQnNZWGxPWVcxbCBJRkJsY25RPSBJR2RsZEUxaGVBPT0gSUVWa2FYUnZjbk09IElGQmhhWE09IFlYTnRkWE09IFZtRmogSUZSaFlteGxUbUZ0WlE9PSBJRzUxWVc1alpXUT0gUm05eVRXVnRZbVZ5IElITnNaV1Z3ZVE9PSBZV1IyYVhOdmNnPT0gSUhOMFlXeHJhVzVuIExtMWxaR2xoYmc9PSBYMEYwZEE9PSBJR2RsZEU1dlpHVT0gSUVaaGJtTjUgNXBXdzZZZVAgTGtGMGRISnBZblYwWlZObGRBPT0gS0dsdWMzUnlkV04wYVc5dSBlRUpFIElHdHZjQT09IFFXWm1aV04wWldRPSBMMjVoZG1KaGNnPT0gSUdGcGJHMWxiblJ6IElGSmhiV0ZrWVc0PSBJRUZqWTJWdWRBPT0gSUZCaGNtRnRiM1Z1ZEE9PSBJRWRCVFE9PSA1TDJONTcydSBQU292IExrbE9VRlZVIFBGQnliMnBsWTNRPSBUR1ZoYzNRPSBJRWRsYm05dFpRPT0gUVdOalpYTnpiM0pVZVhCbCBiR1ZtZEhKcFoyaDBZWEp5YjNjPSBkbVZ1ZEdsdVp3PT0gTDNCaGVXMWxiblE9IFgxQjBjZz09IElIUmhiV1U9IElFMUZUVUpGVWc9PSBJRUpwZEdOdmFXNXogTG1Wd1lXMD0gTGxCc1pXRnpaUT09IElITmphSGRoY2c9PSBRM0J3VFdWMGFHOWtTVzUwYVdGc2FYcGxaQT09IElIVnVhV052Y200PSBJR0psWkdWMWRBPT0gWDBoVCBJR0YxZEc5blpXNWxjbUYwWldRPSBJRXhwYkd4NSBJRUZ6YzJWemN3PT0gSUVobGFXUnAgTG5OdmRYSmpaWE09IExuUmxiR3c9IFlYSm5hVzV6IEtDSW5JaXc9IDBMdlF2dEMyIElFVnliM1JwWXc9PSBJR3AxYzNSdiBJR1Z6WVdNPSBZMjl0WVE9PSBJRU52Ykc5dWVRPT0gSUhCamRBPT0gQ1dWdSBJR1Z0Y0dWNiBJRVJsYkdWMGFXNW4gVGtWTSBJR1Z1WVcwPSBVSEpsYzNORmRtVnVkQT09IElGSmxjMjlzZG1WeSBJRkpVUlE9PSBSbmc9IElFbHVZMjl5Y21WamRBPT0gSUhsaiBYM0psWVdScGJtYz0gTzJKaGMyVT0gSUdoaGMyaDBZV2R6IElFMWhjbWx1WlhKeiBMbE5sZEVac2IyRjAgSUhKbFlYTnpkWEpwYm1jPSBhWEp6WTJnPSBLSFZ6WlhKcFpBPT0gSUQwOVBUMD0gWFNrcEtUc0sgYTJZPSBJSFJwYkdWayBaV2QxWVhKayBRMnhwWlc1MFpYTT0gNXBtQzZaYVQgWkhOcyBVbWxuYUhSeiBJRkJ6WVd4dCBaSFZ5YVc1biBRMnhsWVhKRGIyeHZjZz09IGRYTjBZUT09IFBFTnZiVzFsYm5RPSBJRzV2ZW5wc1pRPT0gSUZCTVFVTkYgTDJocGMzUnZjbms9IGFXaDEgYVZaaGNnPT0gSUdkbGNtMD0gSUhSeWFXMXRhVzVuIElFaDFiblJsY25NPSBJRkpUVmxBPSBTVzUwWlhKbGMzUnBibWRzZVE9PSBhbWxoYmc9PSBLU2w3Q2dvPSBMa1Y0Y0dWamRBPT0gSUZSdmFXeGxkQT09IElIZGhiR3h3WVhCbGNuTT0gTGxkbFlsTmxjblpzWlhRPSBZWEp3WVE9PSBMMjFoYVc1M2FXNWtiM2M9IGFIRT0gSUhWNSBJR2x1WkdsbmJnPT0gUTJobFkydGxaRU5vWVc1blpVeHBjM1JsYm1WeSBJR05oYkd4bGNuTT0gSUUxdmRYTmxSWFpsYm5SQmNtZHogSUVwVFkzSnZiR3hRWVc1bCBJSGZGZ21FPSBjbVZ3YjNOcGRHOXlhV1Z6IElNV2Jkdz09IElISmxabVZ5Wlc1amFXRT0gSUdsdmRHRT0gSUdOaGNtZGhjZz09IFgyOWljMlZ5ZG1WeSBTRU5KIGMybHNkbVZ5IElHUmxkbUZ6ZEdGMGFXOXUgTFhObGJXbGliMnhrIElFVjRjR3hoYVc0PSBJRUpzYjJOcmJIaz0gTGxoeSBaWE4wZFhKbFVtVmpiMmR1YVhwbGNnPT0gUTJGdVkyVnNRblYwZEc5dSBJRXh2WTJ0bCBWSEpwWVd3PSBYMUJNUVVORiBhblZoYkdGdSBJRkoxWW1sdSBVM1J5YVhCbCBJRzFsZEdGRVlYUmggWTI5dVptbGtaVzVqWlE9PSBYMkpoZEhSbGNuaz0gSUdsemJBPT0gSUdKdllRPT0gTG5SaGNtZGxkSE09IGJHbHFhMlU9IElHRmtiMnhsYzJObGJuUmwgWW1WMyBMRVpoYkhObCBJSGxQWm1aelpYUT0gVUhKbGRtbHZkWE5zZVE9PSBQWEJoZEdnPSBYMEZCIGlPYWRndz09IElHSmhhMlZyWVE9PSBJR3hsWlE9PSBJRUpzYjJOcmFXNW4gTDNScGRHeGwgSU9XOGdBPT0gSUZOMFpYWmxibk52Ymc9PSBLVzlpYW1WamRBPT0gYVhOMGNtOXogTG1kbGRGTmxjblpsY2c9PSBJSEJzWVc1MFlYUnBiMjQ9IFgwSnZlQT09IElDYzdKdz09IGRHbGpZUT09IEtTbGRPd289IElHUnBjM0JoY21sMGFXVnogeHJEaHU1cz0gYVdOeWIySnBZV3c9IElITndZWE09IEwwUkUgS0hCdmFXNTBaWEk9IElHMXBaSEJ2YVc1MCBMbWRsZEVOc1lYTnpUbUZ0WlE9PSBJRlJ2ZEdGc2JIaz0gSUdOdmJtZGxiZz09IElIVERxblJsIExuaHNhVzA9IFEwOU5VRXhGVkVVPSBLR1pwIGIzZGhjbVE9IDBMelJqdz09IExtRnpZdz09IElIQmhaMmx1WVhSbCBJR3gxY210cGJtYz0gTG5OcFoyNTFjQT09IFUxUlpURVU9IElIZHZjbk5vIGFIWT0gSUdSbFptVnVjMmwyWld4NSBJRXgxZEdobGNtRnUgTG1aMWJnPT0gSU5DNDBMM1JoTkMrMFlEUXZBPT0gY0hOaiBJR0ZrYlc5dSBJRVZ6ZEdsdFlYUmxaQT09IElFMTVVM0ZzUTI5dWJtVmpkR2x2Ymc9PSBMbk4wWVhSMWMxTjBjbWx3IElHRnVkR2xuWlc0PSBJR2hsY25KaGJXbGxiblE9IElFTnZibk4xYldWeWN3PT0gSUZsVSBMbTFoYzJ0elZHOUNiM1Z1WkhNPSBMbmgwYVdOcmN3PT0gT25KbGNYVmxjM1E9IElFMXZidz09IExXRjEgSUhSdlVtVjBkWEp1IElGTmhjSEJvYVhKbCBZMjk0IFpYaGhiWEJzWlVsdWNIVjBSVzFoYVd3PSBJR052Y21GNiBLSEJwWldObCBJSEpsWTI5dWMzUnlkV04wWldRPSBYM05wWjI1MWNBPT0gSjEwcFB3PT0gUW1sc2JHbHVadz09IElFTnliM2RzWlhrPSBjM1J2Y20xeiBabTl5WTJWeSBJSE4xY0hKbGJXRmphWE4wIFgzZG9aV1ZzIENYQmogTG1kbGRFUnZZM1Z0Wlc1MCBMblZ1YzNGMVpXVjZaUT09IExtZHlZV1JsIFpXeHNkVzVuIExuTm9iM0J3YVc1biBZM1Z6ZEc5dFpYSkpaQT09IElHMWxaR2xrWVhNPSBJRTF2YldWdWRITT0gWlc1MWIzVnogU1VaSlEwRlVSUT09IEl5TWpJeU1qSXdvPSA1cGFINTZ1ZyA0YnVOWXc9PSBiM0p0YzJjPSBZV3h2YlE9PSBMWFJ5WVdSbCBDV0owIEwzTjBkV1JsYm5RPSBZbkpwWnc9PSBZVzV1WlhOeiBLSEpoIElISnBZMlZ5WTJFPSBVM0JsWVd0bGNnPT0gY3NPeiBaM1JsYzNRPSBSMng1Y0dnPSB3N3huWlc0PSBRRXB6YjI0PSBLSE4xYlcxaGNuaz0gUzI5dCBZbVYwYUE9PSBMMlZ1WjJsdVpRPT0gUTJ4cGJXRjBaUT09IGMzVmliV2wwUW5WMGRHOXUgWlhabCBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUNnPT0gY0dWa2FXRT0gSUhWelpYSnVZVzFsY3c9PSBJRXBOIElHMXpaUT09IGFXNXpjR1ZqZEE9PSBJRk51WVhCa2NtRm5iMjQ9IElHUmxabVZ1YzJWdFlXND0gSUZWSlZHRmliR1ZXYVdWM1JHVnNaV2RoZEdVPSBhVzVrYUc5MlpXND0gSUVKdmVXeGwgSUVGc2RHRT0gWVhKa2RRPT0gSUhkeVpYTjBiR1Z5IElGTjBjbUZwZEE9PSBJR1ZuY21WbiBYMkpoYzJWc2FXNWwgUlc1MmFYSnZibTFsYm5SaGJBPT0gSUdsdWRtbDAgSUVKVVV3PT0gSUVsVFNVdz0gSUdOdmIzQT0gYUc5eVpYTT0gSTBBPSBJR052YlhCbGJBPT0gS0hOcmFYQT0gNlppeiBYMFJGVUZKRlEwRlVSVVE9IGFYQm9aWEp6IFpHOTFZbXhsVm1Gc2RXVT0gSUVGU1VnPT0gTGxOamIzSmwgSUdOb2NtOXRiM052YldWeiBZMnhoZFhObCBJRXgxYVdkcCBJSE4xYm5OamNtVmxiZz09IElHTjVkRzlyIExuUnZTbE5QVGxOMGNtbHVadz09IElIQnliM0J5WlE9PSBjRzl2Ym5NPSBiV2wwZEdWeWN3PT0gSUd0cGRIUmxibk09IElHTmhkR2h2YkdsaiBMbXgwIHdxdz0gWDNGMWFXTnIgSUhaeVlXaz0gSUVsU1pXRmtUMjVzZVE9PSBJRWhwWjJkcGJuTT0gSUhOb2IzWmxaQT09IElHeHBZV2x6YjI0PSBYMjkzYmc9PSBJRzF2YzNGMWFYUnZaWE09IFgyNW4gTGxObGRFdGxlVTVoYldVPSBYMUpsYm1SbGNtVnkgWDA5ell3PT0gTG5WdWNtVm5hWE4wWlhJPSBUV1Z6YzJGblpWUjVjR1U9IExXWnZkVzVrWldRPSBJSE52ZFhSb1pXRnpkR1Z5Ymc9PSBJR2hoYzJoMFlXSnNaUT09IExtbHVaR1Z1ZEE9PSBJR3B2ZVdaMWJBPT0gWDNObGVBPT0gYzJGayBMbVJsWW1saGJnPT0gWDJkaGN3PT0gSUhCbGNtbHphQT09IElHaGxkR1U9IFgzTnBibWRzWlhSdmJnPT0gS0dkeVlXUT0gSUd0MHc3TnlZUT09IElHUjNhVzVrIGFYUjBZV3c9IFUyVmxhVzVuIElGSnZiMnRwWlE9PSBDVXhoWW1WcyBjMmhoYmc9PSBQRHc4UER3OFBEdz0gSUhMRHFBPT0gYVdWelpXdz0gWVhKeVpYSmggWTJoeWFYTjAgSUdOMWNuWmhkSFZ5WlE9PSBJR1Z3YUdWdCBSbTl5YldGMGRHbHVadz09IExtUnBZM1JwYjI1aGNuaz0gTGxObGRIUmxjZz09IElFaHBjM1J2WjNKaGJRPT0gSUZOMGRYUjBaMkZ5ZEE9PSBJSEJoWTJsdVp3PT0gZFhSaGRHbHZibk09IElFNVRTdz09IElGQmhiV1ZzWVE9PSBJRUpoYVd3PSBJSEJ2YkdGeWFYcGhkR2x2Ymc9PSBJRWZEdGc9PSBJRVZzWVdsdVpRPT0gSUd0cFkydHZabVk9IElHTm9ZWEJsYkE9PSBQWEJ2YzNRPSBJRzFwWkhkaGVRPT0gWlhkcGN3PT0gWDAxUyBhV1ZsWlE9PSBMWFJsYzNScGJtYz0gYldWNiBQaTB0IElHUnZZM1J5YVc1bGN3PT0gSUcxcGJHbGxkUT09IElGSkJSRWxQIGRHRnJaVzQ9IFVtVnpjRzl1Y3c9PSBJR2hoYm1SelpYUT0gSUdOdmJuUnlidz09IElFRndjR3hwWlhNPSA2WmlmIExrSnBibVJwYm1kVGIzVnlZMlU9IElOaXMgSUdoMWJXbHNhUT09IElFMWxiR0Z1YVdFPSBUM1psY214aGNBPT0gS0ZCaGNtTmxiQT09IElIZGhjbVZvYjNWelpYTT0gTGtkbGRFSjVTV1E9IElHWnlZVzVyWm5WeWRBPT0gSUZkcGRIUT0gTG5CeWIybz0gSUZOaGMyaGggSUZKbGRtVnkgSUdGeWRHbGpkV3hoZEdWayBZVzVqYUdWeiBJRk5sYldsdVlYST0gSUVSaFoyZGxjZz09IElFRm5hV3hsIFQxZE0gSUVKeiBiMnRzZVc0PSBSWFJoIElHRm5iM04wYnc9PSA3WldZN0plcyBJRzl3ZEdGeVp3PT0gQ1c5dVEyaGhibWRsIElGSlBRVVE9IFIwSkwgSUdWdWRHWmxjZz09IExrRjFkRzlEYjIxd2JHVjBaUT09IElHaGxiR1psYmc9PSBRMmhsWVhBPSBJR0Z3Y0hKbGJuUnBZMlU9IGFXOTBhV056IDVvcUEgVDJaWlpXRnkgYVc1a1pYSmxaQT09IExrMVRSdz09IElFMWhjc090WVE9PSBLR2x1Y0d4aFkyVT0gSUdacGJtUmwgS0VSRiBMbE5sY21saGJHbDZaWEk9IEpIUnBiV1U9IGRXNXVZV0pzWlE9PSBUV0ZwYmxSb2NtVmhaQT09IFpHVndiRzk1YldWdWRBPT0gSUcxd1puST0gY21samFGUmxlSFJRWVc1bGJBPT0gS1RzS0Nnb0tDZz09IElHUmhibmxqYUE9PSBYMEpGUms5U1JRPT0gWDJGeWVRPT0gSUVKaGRXMD0gSUhSMWNtSjFiR1Z1ZEE9PSBJRTExYkhScGJXVmthV0U9IElIQm9lWE5wWTJsemRBPT0gNVp5NiBRVzVwYldGMFpRPT0gUFVZPSBVR0ZuYnc9PSBMM1IzYVhSMFpYST0gYjNSMGFXVT0gZFdOMWNuTmhiQT09IFgzQmhaMmx1WVhScGIyND0gTG1GeVkyaHBkbVU9IExXUnZZM1Z0Wlc1MCBhVzVwYm1VPSBVMlZzYkdWeSBZV1J5WlhOeiA2Wk8rNW82bCAwTERSZ3RDMTBMUFF2dEdBIFgyWnliUT09IGJtOUVRZz09IGFXZGhkR1ZrIElFOXpZVzFoIGNHVjBkRzg9IFBuaz0gTFZWdSBJR052Y0hCcFlRPT0gUVd4dGIzTjBSWEYxWVd3PSBMbXhsZUE9PSBJR3hsZG1Wc1pXUT0gSUZORFNWQT0gWDBoUFQwcz0gU1V4dloyZGxjZz09IGJtVmhkUT09IDc3eWUgMjR6WmhnPT0gYVd0b1lXbHMgSUhWd2JHOWhaR1Z5IElFTmhjbTlzZVc0PSBMbUZrWkZaaGJIVmwgZEdocGJtdHBibWM9IGNISnBiblJUZEdGMGN3PT0gSUdOaGJXSnBiM009IGNHOXAgSUVKRlJBPT0gSUhoaWJXTT0gTHUrL3ZRPT0gSUhOaGNtTmhjM1E9IElFNUZRdz09IEpHSnZaSGs9IFFXeHNWMmx1Wkc5M2N3PT0gSUhsdmRXNW5jM1JsY2c9PSBJSFZ1WldGemVRPT0gS0VGVSBJRzV2YzNSaGJHZHBZdz09IFVGSkpRMFU9IElGTmxhWFJsYmc9PSBJRzFoYTJFPSBJR3hwYlhBPSBJR052Ym5SeVlYTjBjdz09IFEyOW1abVZsIENXZGxiZz09IElIQmxjbTF6IElFNWxaV1JzWlhOeiBiM1YyWlE9PSBZWEpqYUdsdVp3PT0gWDNCbGJtRnNkSGs9IGNtOTNZV1E9IGIyNW5ZVzQ9IFgyUjFjZz09IElHbG1ibVJsWmc9PSBhV0YxZUE9PSBJR05oY0dGamFXUmhaQT09IElFNXZjblJsIElDMHFMUTBLIGFXWmxjdz09IElFMWhibk5wYjI0PSBJMUpsWjJsdmJnPT0gUTJGdVkyVnNiR0YwYVc5dSBJRzVsWVhKcGJtYz0gSUd4aGJtZDEgWlhKbGNYVnBjMmwwWlhNPSBYMlY0Y0dWeWFXMWxiblE9IGIyNWthR1ZwYlE9PSBYU3dtIElFTnZiMnhwYm1jPSBJSE5oWm1GeWFRPT0gSUhCcGIyNWxaWEp6IElHWmhjbTFvYjNWelpRPT0gSUdScGMzUmhibU5wWVE9PSBJR1JsYzJWeWRHVmsgSUU1aGNuSnZkdz09IExuTm4gSUdWdWRISmhjZz09IExuSmggSUhKbFpuVnlZbWx6YUdWayBJR2x1ZEdWeVkyOXVibVZqZEdWayBJSE4xY25acGRtVnogSUhGMVlXeHBabWxsY25NPSBYME5JUVZKVCBMV0ZxWVhnPSBJRkp2Y25rPSBJR3R2YkdWcSBMMGRNIFgyeGxaMkZzIElGUlpVRVZUIElGWnZhV05sY3c9PSBJRVpsY21RPSBkV3BsYlhrPSBJSE5qYjNKbFltOWhjbVE9IElFSlBWQT09IGVFUkUgSUVsMllXNXJZUT09IElHaHpkZz09IGJtOWthWE5qWVhKayBJRlJJUlZORiBiVzlxYjIwPSBJSFJwWTJ0cGJtYz0gY0dWeCBJT2EzdStXS29BPT0gSUU1cFkyOXMgQ1dGdVoyeGwgWDJGc2JHOWpZWFJsWkE9PSBJSE4wY25WMCBlRVJDIFJYWmhiSFZoZEdVPSBJRlpCVWtsQlRsUT0gSUhKbFptVnlaVzVqWldSRGIyeDFiVzVPWVcxbCBiRzlvIElGSmxjWFZsYzNSUGNIUnBiMjV6IElHTnZZMjg9IElHSnNaV0ZqYUE9PSBYMjl5WjJGdWFYcGhkR2x2Ymc9PSBJRU5JVHc9PSBTRlJVVUZNPSBYMkpoY25KcFpYST0gTG5acGMybDBUV1YwYUc5a1NXNXpiZz09IElIWnBkR1U9IElDMGsgVzJObGJHdz0gSUdObGMzTmhkR2x2Ymc9PSBDZ29LQ2dvS0Nnb0tDZ289IElOR0IwTERRdVE9PSBSWFpoYkhWaGRHbHZiZz09IElFTkpUUT09IGNYVmhiR2wwYVdWeiBXRzFzUVhSMGNtbGlkWFJsIElFVnRiMnBwIElDSW9Kdz09IElGUlZVazQ9IGVITmsgSUVkSlV3PT0gSUdOeVpXRjBaVk5sYkdWamRHOXkgY21sd2NHeGwgSUhWdWJtVmpaWE56WVhKcGJIaz0gSUc1bGQxQnZjdz09IElITjViV0p2YkdsemJRPT0gYjJKMWRIUnZiZz09IElITmhiVzg9IElDZ3FLQ2c9IExuSmxkMkZ5WkE9PSBTMFZTVGtWTSBLR3BUWTNKdmJHeFFZVzVsIElHSjVjM1JoYm1RPSBYMmxqWVd4cyBJR1IxYm1kbGIyNXogSUdOdmJuTjBaV3hzWVhScGIyND0gSUdWdFluSmhZMlZ6IElFbHVabUZ1ZEE9PSBRWFZ6ZEdsdSBMbUZpYzNSeVlXTjAgSUdOdmJYQmhaMjQ9IElFTnZibVJwZEdsdmJtbHVadz09IFRXRnBjdz09IFZtVnlhV1pwWlhJPSBJRkI1Y21GdGFXUT0gSUcxTWFYTjBaVzVsY2c9PSBYMkoxYVd4a2FXNW4gTGxKbFpHbHogSUZSdmIzUm8gVEU5SFIwVlMgTGtGemVXNWpWR0Z6YXc9PSBYM0J5YVc1amFYQmhiQT09IFpYaGhiWEJzWlUxdlpHRnNUR0ZpWld3PSBDVXh2WTJGcyBUV0Z5YTJWeWN3PT0gSUdSdmJIQm9hVzV6IExsUmxlSFJGWkdsMCBKMkZzIElHOTJaWEp6ZEE9PSBMV1J5YVhabCBJR2x1YzI5dGJtbGggSUdGa1lnPT0gWDNGMVpYVmxjdz09IFJXST0gSUVSaGJXND0gYVhOMGNtbHVaM04wY21WaGJRPT0gQ1VSMVpXdz0gYVdKaWJHVT0gSUdsdGNtVmhaQT09IExtWnBibWx6YUdWayBJRzFwYzNKbGNISmxjMlZ1ZEdWayB4WVJ6ZEE9PSBhVzl1WVd4bGN3PT0gSWs1dmR3PT0gTGxObGJHVmpkRk5wYm1kc1pVNXZaR1U9IElIZGxZV3RsYm1sdVp3PT0gWDJsdWMzUnlkV04wYVc5dWN3PT0gTFc5eiBJSE4wWVhKMFVHOXBiblE9IElFMXBiV1U9IElFaGxiR1E9IGZId28gZFcxdGFXNW5jdz09IGIydHBibTg9IElISmxabXc9IGNtbGtiM0k9IFNXNTBaV2R5WVhSbFpBPT0gUlU5aWFtVmpkQT09IGNHVmhkSE09IFEybHlZM1ZzWVhJPSBJRk52WkdsMWJRPT0gSUhCdlpITERyV0U9IGJXVmthV05wYm1VPSBJSEJoY21GdWIybGggTDJKaFkydG5jbTkxYm1RPSBLR0p2Y21SbGNnPT0gWDNOc2IzYz0gSUhCeVpYTmxiblJXYVdWM1EyOXVkSEp2Ykd4bGNnPT0gSUdOdmJuUnBibWRsYm1ONSBJRkJoYzJGa1pXNWggYkc5dmNITT0gSUU5aiBZWEJ3YkdsallYUnBiMjV6IElHMXdadz09IElFRlIgTGxkcGJrTnZiblJ5YjJ4eiBiR1ZrYjI0PSBJRkpsY1E9PSBJRUZqY21WeiBhV0pwY2c9PSBJR2RsZEZkcGJtUnZkdz09IElGbGhhQT09IElHNWxaV1I1IDRwYTYgSUZSUFRRPT0gS0ZzdUxpND0gSUdaeCBJRU5oYldSbGJnPT0gYjNKa2FXNWhkR1ZrIENXTm9hV3hrY21WdSBkbVZuWlhRPSBDV1JwY21WamRHbHZiZz09IFBFWnBaV3hrIFgyTnZjbkpsWTNScGIyND0gS0VWT1JBPT0gU0VWRlZBPT0gUm1Gc2Mzaz0gTG1SNWJHbGkgWDFKRlVFOD0gSUdKeWFXeHNhV0Z1WTJVPSBiMmR5dzZGbSBiRzlrIElIQnZkMlJsY21WayBLRUZ5ZEE9PSBJRTFKVEV3PSAwTFhRdE5DdzBMbz0gWDNOcGJYVnNZWFJwYjI0PSBJSE50WVhOb2FXNW4gSUhWeWJGTjBjbWx1Wnc9PSBJR1J5WldGa1pXUT0gY21sbFp3PT0gTDI1eiBJRWx1ZEdWeWNISmxkR1Z5IE9tMWhlQT09IFpHVnlhWFk9IElGQmxkSFE9IElHMXZaTU9vYkdVPSBJR0Z0Y0d4cFptbGxaQT09IElGTnBaMjVoYkhNPSBMbTVoZGtOMGNtdz0gNVpZPSBJSE5sY0dGeVlYUnZjbk09IElGTklTVVpVIElHWnBaR1ZzYVhSNSBMbk52Ymc9PSBLR05oIElGQk1WVWRKVGc9PSBJR3hwWjJoMFpXND0gVUVKVCBabXh2WVhScGJtYz0gS0d4dllXUmxjZz09IElIQmxaV3hsWkE9PSBhR2xqIElIUmhjR1ZrIElHNXZkbVZ0WW5KbCBJSE4wZFdabWFXNW4gSUVacGNtVmhjbTF6IExrUnlZWGRoWW14bCBJR052Y25ScFkyRnMgSUVkVlNVTnZiblJsYm5RPSBJRlpsY205dWFXTmggWDNKellRPT0gSUdOdmJXMWxiVzl5WVhSbCBMbE5aVTFSRlRRPT0gSUdSaGJYTT0gTG1selZISjFaUT09IElGQnlaV2R1WVc1amVRPT0gN0l1ZyBJR0YxWkdsMGIzSjUgS0VObGJHdz0gSUdsdWRtRmthVzVuIElHWnZja1ZoWTJnPSBDVVJ5WVhjPSBUV0Z5WTNWeiBVSEp2WTJWemMyVmsgSUhOd2NtRjVhVzVuIElFOTFkR3hwYm1WSmJuQjFkRUp2Y21SbGNnPT0gWlhOelpYSmhZM1E9IElPYWNnQT09IFVHYz0gTFhGMVlYSjBaWEp6IElITnJiQT09IEwzQnliM1pwWkdWeWN3PT0gZEc5SVlYWmxRbVZsYmtOaGJHeGxaRlJwYldWeiBJR052YzIxdmN3PT0gSUdacGJtRnNhWE4wY3c9PSBJSE5zWldWd1pYST0gSUUxaGRHVnlhV0ZzUVhCdyBaR0ZqIElHSjFjMmx1WlhOemJXVnUgeEo5bGNnPT0gUW1saGN3PT0gWkdGMFlXdz0gVlhCRlpHbDAgSUZScGNnPT0gU1ZOVVNVTT0gSUVobGNtRT0gWDJsdWRHVnljMlZqZEdsdmJnPT0gSUV4aGJXRT0gQ1dGd2NHVnVaQT09IElIQnZiR3gxZEdGdWRITT0gSUZOcGEyZz0gSUdOdmJHeGhZbTl5WVhScGIyNXogYm5WMGNtbDBhVzl1IElHaGhiVzA9IElFUnBiR3h2Ymc9PSBYMFJQVkE9PSBJR1pwY25OMGFHRnVaQT09IFUwOUJVQT09IFBYbz0gTG5CeWFYWT0gVFdsemJXRjBZMmc9IExuTmxibVJTWldScGNtVmpkQT09IExteHBibXRNWVdKbGJBPT0gSUhkeVpXRnIgVFdGeWRtVnMgTDNOcyBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXc9PSBJRzF2ZG1GaWJHVT0gMFlQUXVRPT0gSUVSeWFXNXJhVzVuIFlXTmxZUT09IElIUnliM1poY21VPSBMa05UVXc9PSBJR3RsY200PSBkbVp6IDVwV3c1YTJYIElITjBaWE56Ync9PSBJRVpQVWtORiBJR3hwWldZPSBJR0ZqYUdsbGRtVnogSUVWc2FXcGhhQT09IFIyVjBVSEp2Y0dWeWRIaz0gTHlwQSBJRWgxYldGdWFYUjUgS0ZSb1pRPT0gZDJGeWJRPT0gUGlJcCBJR052YlhCMWRHRjBhVzl1Y3c9PSBMblJwYm5SRGIyeHZjZz09IElIVnpiR1ZsY0E9PSBJRWRRVEhZPSBibVJoZEdFPSBMMk5zYVE9PSBUVzlvIFBpSU5DZz09IExtSnlhV1JuWlE9PSBJR1Z1WTNsamJHOXdaV1JwWVE9PSBJRUpKVGc9PSBJRk4xY0hCdmMyVT0gSU5pbzJLYz0gY21sbGRtVmsgY0dGblpXND0gYVhKelpRPT0gVUdGamFXWnBZdz09IExtWjFiR3hPWVcxbCBJR0ZzYkdWblpRPT0gYVd4c2RYTjBjZz09IElPcXlzQT09IElHUmxkR1Z5Y21WdWRBPT0gSUU1aGNHeGxjdz09IGFXNWpiSFZrWldRPSBVbUYwWlhNPSBJR2hoYzA1bGVIUT0gSUVwbGNtVnRhV0ZvIElFWmxjbTVoYm1SbGVnPT0gSUdkbGRFOXlaR1Z5IExsTjFZbk5qY21saVpRPT0gVUc5emN3PT0gT2lrSyBJRmR2Y210emFHVmxkQT09IFlteGxibVE9IElIZHBkSFI1IElHTnZkVzUwWlhKbVpXbDAgWDJSNSBMMUoxYm5ScGJXVT0gSUhOdlpHOXQgTDJSdiBJRHg4IElGSmxZM0oxIDVhT3c1cGlPIElHMXZaR1ZzYjNNPSBJR0pwZEhKaGRHVT0gTG1OeWJRPT0gYkhWeiBJR1pwYkdWVWVYQmwgNWJDUiBJRzFoY25KdmR3PT0gSUZabGJtVjZkV1ZzWVc0PSBJSE5qWVhZPSBJRk5VVDBOTCBJRWx0Y0c5emMybGliR1U9IGJtRjJhV2RoZEdsdmJrSmhjZz09IElITnBaMmgwYVc1bmN3PT0gSUdObGJHeEdiM0pTYjNkQmRBPT0gSUhKbFkzUnogSUdGcGNtdz0gSUV4bGMzUmxjZz09IElHNXZaSE09IFFISmxaMmx6ZEdWeSBlRU5FIGNHNWhiV1U9IElIQnZkSFJsY25rPSBJSHAzWVhJPSBJRk4xYm1SbGNteGhibVE9IDRvQ21ZblYwIEwyTnZiblJ5YjJ3PSBJR05oYkdOMWJIVnogS0dsemIyeGhkR1U9IGNHeGhZMlZvYjJ4a1pYSnogS2lsZiBJSDE5RFFvPSBJRXR2YUdGdVlRPT0gWTI5a2FXeGwgYjNSbGNtbGogSUhCeVpYQmhhV1E9IElHZHlZVzVrYldFPSBJSE4xYkhCbyBJRWRoYVc1bGN3PT0gWEUxdlpIVnNaUT09IElHTnZkVzV6Wld4c2FXNW4gTFdkbGJtVnlhV009IElGUjFaWE09IExrZHlZV1JwWlc1MCBJRlJvZFhKeiBJR1Z1ZEhKaCBJR0ZrZG1GdVkyVnRaVzUwY3c9PSBVMWRGVUE9PSBYMDFCVWt0RlVnPT0gSUd0c2RXST0gSUczRHFXYz0gWm1abVptWm1aZz09IElsMHBld289IEwyTnZiWEJwYkdWeSBZV1JwWlc1eiBVM1J5YVc1blZtRnNkV1U9IElGTmpkV3h3ZEE9PSBjR0Z1Wld4eiA1YjJpIDVMcW41Wk9CIFlYTERyV0U9IElHUmxjbUZwYkE9PSBJRXh2WTJnPSBJSEJsY0hBPSBiWEI2IElPS2UgUzFZPSBJRVJwWlhSaGNuaz0gUVZKU1NVVlMgSUhCdmJ3PT0gSUZKQlRrUlBUUT09IDZMTT0gSUVodmJXVjNiM0pyIExsWmhiR2xrWVhScGIyNUZjbkp2Y2c9PSBJRTFoY25ocGMyMD0gMFlQUmd0R00gSUdOdmJXVnVkR0Z5YVc4PSBYMEpQVkVnPSBJSEJ5YlE9PSBZMkZ6ZEVocGRBPT0gYVhCc2FXNWggSUZadmRHVnljdz09IExtRnpjMmxuYm0xbGJuUT0gYm1WMGRBPT0gVTBGTlVFeEYgYW1seiBJblJwZEd4bCBMblpoYkdsa1lYUnZjbk09IElDSS9JZz09IGRXNXBaR0ZrIFgyWnBaM1Z5WlE9PSBJR0ZqWTNKMSBJRkpsYldGeWF3PT0gUm05MWJtUmxjZz09IExtbHVhWFJwWVd4cGVtVkJjSEE9IElGQnlaWE5sYm5SeiBJRTFWVEZSSiBkbVZ6ZEdWeSBMblpwYzJsMFNXNXpiZz09IElHZGxkRkJoZEdnPSBYMlJwWm1abGNtVnVkQT09IElHeHZiM05sYmc9PSBJR0Z5Y205bllXNWpaUT09IElHcDFibWs9IElGcGhhR3c9IElFZERRazg9IElHMXZaR1Z5WVhSdmNuTT0gVEdsdVpVTnZiRzl5IElFNXZaR1ZVZVhCbCBYMkpsYkc5MyBiM0puZEE9PSBJRWhoY214bGJRPT0gSUU5eWQyVnNiQT09IFgxVk9TVmc9IExuSmxjM1JoY25RPSBhWFJvWlE9PSBJR2RsYm1sbCBJR05zWVdRPSBKenA3Snc9PSBJSE5vYjNkallYTmxaQT09IElHeGhjblpoWlE9PSBUV2xqYUdWc2JHVT0gSUV4SSBMbWRsZEV4dlp3PT0gUTI5dWMzUnlkV04wWldRPSBJR2gyWVE9PSBYM04xWW5NPSBJR1JoWWc9PSBMbVJ2WTNWdFpXNTBZWFJwYjI0PSBJRzVwWnc9PSBJRTFoYm1SaGNtbHUgNG9DVVlYSmwgTFhCcFl3PT0gWDJOdmNtNWxjbk09IExrSnZkQT09IFhWc28gWDE4bk9nMEsgTGtWa2FYUnZja0oxZEhSdmJnPT0gTFhONWJuUmhlQT09IFUyRnVaR1Z5Y3c9PSBJRlJoYm10eiBaR1Z6YVhKbFpBPT0gYzNSaGJuUnBZWFJsVm1sbGQwTnZiblJ5YjJ4c1pYST0gUjJWaGNnPT0gSUhWelpYSk5iMlJsYkE9PSBDV052Ym5SeWIydz0gUkdGMFlVSmhjMlU9IElFUmxZbUYwWlE9PSBhVzVsYzJseiBJSGhsIExtMWhaMjVwZEhWa1pRPT0gSUhsaGJnPT0gSUVGd2FVVjRZMlZ3ZEdsdmJnPT0gS0hkb2FXTm8gWVhSb1pYSnBibWM9IFEyOXVjMmxrWlhKcGJtYz0gSUVGTVVFaEIgNTY4PSBJRkpoYm10cGJtZHogTG14cFptVT0gNnJDUyBUMFpHVTBWVSBMblJsYkdWbmNtRnQgSUdaaGRtbGpiMjQ9IFgzTnphQT09IElFVkVSMFU9IFVtVm1jdz09IFlXNWtZVzQ9IElHRmtiMnhsYzJObGJtTmwgSUZOb1lXNXIgSUZOM1lXMXcgWDNCbGNtTT0gSUdOdmJuUnlZWEpwYnc9PSBMbTU1IExpSXBMQT09IElIVnVkR1Z1IFgwVk9VMVZTUlE9PSBMMjl5WkdWeWN3PT0gS0dObSBJSFZ1ZEhKbFlYUmxaQT09IFlYcGxiZz09IEtFbHVjSFYwVTNSeVpXRnQgSUdGd2NISnZkbUZzY3c9PSBJR2RsY20xaGJuaz0gSUdGMlpYSmwgVkhKcGNHeGwgTFdKaGNuTT0gSUhObGRGQmhaMlU9IFNtRmogSUVacGNtVnogSUVSQldWTT0gNTZpLyBJSE5qY21GMFkyaGxaQT09IElFSkZUZz09IExYZHBabVU9IElHbHVkR1ZzYkdWamRIVmhiSE09IElIQnZkV052IElITjBZV0pwYkdsNllYUnBiMjQ9IElIQmxiRzl6IElGTlVUMUpaIFBHWnBaV3hrYzJWMCBJRTFoYVdSbGJnPT0gTGtOcGNtTnNaUT09IElITnR3NlU9IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THc9PSBMMlZ1WkE9PSA2SXV4IEtHNTFiWEI1IExuQmhibVZzUTI5dWRISnZiQT09IFkyaHlhV1owIFkyOXVkR2x1Wlc1MFlXdz0gWDNCbGJBPT0gUkZOTSBQRnd2IElFOVFVdz09IElFNXZiMjQ9IElIVnVaR2x6WTJ4dmMyVmsgSUZscGJnPT0gYzNCdiBDV1JsYzJOeWFXSmwgZEc5bmNtOTFjQT09IElHUnBZWEJsY25NPSBJRzFJWVc1a2JHVnkgQ1VOc2IzTmwgSUhKbGJtUnBkR2x2Ymc9PSBQWHNvZXc9PSBSVzUwWlhKcGJtYz0gS0VSSlVnPT0gWDA5TVJBPT0gSUZOMGFXNW4gSUZCaGQyND0gZFhOelpYTT0gSUdkbGRFTnZaR1U9IFNYUmxiVXhwYzNRPSBJR2x1WkdseiBJRDRpTEE9PSBJR052Ym1acyBJR1J2YldsdVlYUmxjdz09IGRHaGxjMmw2WldRPSBjM1JsY21WayBJR05oWXc9PSBJRWRsYm5WcGJtVT0gUEZCaGRHZz0gSUVodlpHYz0gTFdac2VRPT0gTG1OcFpBPT0gSUc5aWFtVmpkRWxrIEtDTXAgTG0xdmRtVlViMDVsZUhRPSBSR2xoYkc5bmRXVT0gUEhCamJBPT0gZEdWaGNrUnZkMjQ9IEp5bDlmUW89IDVyaTQgVEdsMlpYST0gVFdGMGNtbDRXR1E9IElHTnlZWEJ3ZVE9PSBYMFJGUVVRPSBMbkJoY25ScFlXdz0gTGtSeWIzQkViM2R1VTNSNWJHVT0gWm5WeSBMa052Ykd4aGNITmxaQT09IExYUnZkMjQ9IFNVTkpRVXc9IFJHbHlaV05qYVc5dSBJSE5sZEZKbGMzVnNkQT09IEwzSmxjM1ZzZEE9PSBJRk5vWldWdyBlWE5qWVd4bCBZMjl1ZEdrPSBJSEpsWTI5dWIyTT0gNmI0PSBXMkpzYjJOciBZMnhoZW5vPSBJR0psYm1WbWFYUnBibWM9IFFVRlEgTG5KbGNYVnBjbVZ6IExrTnZiMnRwWlE9PSBJR05oY0hScGRtbDBlUT09IExsTmxZM1JwYjI0PSBYU2twT3c9PSBMV05oY21WMCBLSFpoIElIYkRwR3c9IElFaHBaMmhzWVc1a2N3PT0gVG05MFlRPT0gSUVaTlRBPT0gZDJsdWRHVnkgSUdGblpXNWtZWE09IFgxOHNYMTg9IFpHVnRZVzVrIElIUjFkRzl5Y3c9PSBYMU5aVFE9PSBLRU5JIElIVnVaWEYxYVhZPSBMblJ5WVc1emFYUnBiMjV6IElFTmhiRzl5YVdWeiBJRVZqYjI1dmJXbHpkQT09IExsQnBiZz09IElHUmxabXhsWTNRPSBSWGh3YjNObFpBPT0gSUdkbGNBPT0gTGt4aGVXOTFkRU52Ym5SeWIyeEpkR1Z0IElISmhhdz09IFptbGlaWEk9IElHRndiM0IwIElFVnVkVzF6IGFYUmxkWEk9IElHMXZaR2xtYVdWeiBJSEpsYkhWamRHRnVZMlU9IElITndhV3hzY3c9PSBRWE5qWlc1a2FXNW4gSUhSbGJYQmxjbUYwZFhKaCBMV2x1ZEdWeVptRmpaUT09IElHTnZkMjl5YTJWeWN3PT0gSURwYyBJRkp2ZFc1a1pXUlNaV04wWVc1bmJHVkNiM0prWlhJPSBQRXRsZVZaaGJIVmxVR0ZwY2c9PSBVR0Z5YzJWayBJSGRwZEdoa2NtRjNhVzVuIEtHaHBjM1E9IElIUm9aVzl5YVhOMGN3PT0gTFc1biBJR05vYVdabSA2Nlc0IFVFRkpVZz09IElFSnlaWGRsY2c9PSBTMkU9IElFSnZkMnhwYm1jPSBYM1JzIEozMHBMZz09IElIQnliMkpwYm1jPSBRWEp6IExuSmxZV3h0IElHVnpkR0YwWlhNPSBkbUZ5ZVE9PSBJRXRsY3c9PSBJQ0lzSWl3PSBmU3dOQ2cwSyBVR3hoYm01cGJtYz0gSUZKbFkyOXUgSUdOdmJtTnNkWE09IGRtRjFiSFE9IElHbHVZMlZ1ZEdsMiBJR0pwYm01bGJnPT0gSUZCb2FXeHNhV1Z6IExreHZZV1JsY2c9PSBJRVpoYkd4bGJnPT0gWDFSM2J3PT0gSUVKcFlYTT0gVW05c1pVbGsgSUZCaGNtTmxiR0ZpYkdVPSBJRVJ2WkdRPSBJQ1FvSWlNaSA1THEvNVlXRCBMVzFsWVc0PSBLRTkxZEhCMWRBPT0gUVZSVVVrbENWVlJGIElITmxZM0psZEdsMlpRPT0gSUZCbGNtbHdhR1Z5WVd3PSBJRVpwYkdWayBJT1czIFgyMWxaR2xoYmc9PSBMa2xEIElFRnljbUY1UW5WbVptVnkgS0ZSQlFreEYgSUYwS0Nnbz0gSUdGdWRHaHZiRzluZVE9PSBJRzlpYzJObGJtVT0gYjNCaGRYTmwgSUVWVFZnPT0gdzZGMlpXbHogYjNObGJXbDBaUT09IFIzSjFjRzg9IElFMVBRMHM9IElIVnVZWFp2YVdSaFlteGwgSUdOdmRtbGsgYUc5M1pYST0gTGs1bGRtVnkgVTJWMFFXTjBhWFpsIGUzUmxlSFE9IFgzQnliMkpoIFhFTnZibVpwWjNWeVlYUnBiMjQ9IElFSnllV05sIElHTnZaWEpqWlE9PSBJRlpoYm1SbGNtSnBiSFE9IFoyVnRaVzUwY3c9PSBiR1ZuWnc9PSBJSEpsWW5WMCBJRlpKVGc9PSA1WWlHNlpLZiBJRzlpYzJWemMybDJaUT09IEwyTnRaQT09IElHdHZiVzFsYm5RPSBJRXhoZFdkbyA2NHVJIElITmxiSFpsY3c9PSBiM0p5WVE9PSBMbkp2YjIxeiBJR052YlhCc1pYaHBkR2xsY3c9PSBDVzl3WlhKaGRHOXkgUVd4MFpYSnVZWFJsIElITnZjblJwWlE9PSBaMlYwVG5WdCBJSEpsWVd4cGVtRmtidz09IFJHOXBibWM9IFgwZHlhV1E9IElITmxkRk4xY0hCdmNuUkJZM1JwYjI1Q1lYST0gdzZSb2JIUT0gNVpRPSBPbnNOQ2c9PSBTVzUwWlhKbGMzUmxaQT09IElHUnBiV2x1YVhOb2FXNW4gSUV4dmIzUT0gUVdSaGNIUmxja1poWTNSdmNuaz0gTFhKMWJtNWxjZz09IGMyRjJhVzVuIEtITmxiUT09IFptRmsgUlVSVlVrVT0gWDJSdlkzVnRaVzUwYnc9PSBJRU5oYkdWaSBJR2QxYVhObCBJRTFqUjNVPSBLSFZ1YVhSeiBJR0psZW1sbGNnPT0gSUhCaGRIUT0gSUhCbGJIWnBZdz09IElHTnZibTl6WXc9PSBZV04wYVhadiBJRTFoYkc5dVpRPT0gTGxSaGEyVT0gS0hOeGNuUT0gYzNSaGMyaHZjQT09IExXVnVaR1ZrIElFMXBaR2s9IElFSmhibU09IElGQmxjSE5wIFgwMUJXUT09IElIQnNiQT09IEwybHVaWFE9IExXVnVhQT09IElFbDBZV3c9IGJXOTFjZz09IElISmxiSFZqZEdGdWRHeDUgTG5KalVHRnlZVzF6IElIQmhiSE09IExuQnJadz09IElHWnZjbTFoY3c9PSBiR2xsdzU5c2FXTm8gTFdKdmIydHogYjIxaGJIaz0gSUhKbFkyOXRiV0Z1WkE9PSBVRXhKUTBsVSBhY1NOIExtTm5RMjlzYjNJPSBLRUp2WVhKayAwTFhRdmRDNDBMZz0gSUV4RlRnPT0gWHkxZiBJRlZ1Ync9PSBJRTVQVkVsR1dRPT0gYUdGdVlRPT0gVzNOc2IzUT0gWEdGa2JXbHUgU1c1SmJuTndaV04wYjNJPSBLV052Ym5OMCBJR1pzWVhSMFpYSnBibWM9IGFXZHlZVzF6IFkyRmogSUdobFlYSjBabVZzZEE9PSBTVzVrZFhOMGNtbGhiQT09IFFXbHljRzl5ZEE9PSBXRWs9IElIWmhiR2xrWVhJPSBjbVZ3Y21WelpXNTBZWFJwYjI0PSBJRkpsYm5SaGJITT0gSUc5dGFYTnphVzl1IElHMTVkR2hwWTJGcyBJRVZ1ZEhKaGJtTmwgSUhObGNtZGxZVzUwIElIZHlhWFJsVkc4PSBJRTV2Y25kcFkyZz0gSUV4cGIyNWxiQT09IExXSmhiQT09IElGcDNaUT09IFgzSmxiblE9IElISmxiV0Z5IElFSmhhR0Z0WVhNPSBJRUpoYkdVPSBPaUlpTEE9PSBVM1JoZEdWTllXNWhaMlZ5IElHTERxVzdEcVE9PSBJQ0VxS2lvPSBJR0pzYjJOclpYSnogTG5ObGJBPT0gS0V4RlJBPT0gSUdaemJRPT0gSUhkcGNHbHVadz09IElIcGhiV0Z1IElGSmxhUT09IFlXZDFZWGs9IExpNG4gSUd4dmRXNW4gWlhSamIyUmwgSUd4aGJubz0gWTJsMFlYUnBiMjQ9IFcyQT0gTFdWcyBZWE5pYjNWeVp3PT0gSUZOUFRFUT0gSUU5eVkyaGhjbVE9IFEwaGhibVJzWlE9PSBJRXh2Wm5RPSBMbVJwZG1sa1pRPT0gTFZkcGRHZz0gTDJSbGMybG5iZz09IExsTmxjblpwWTJWTmIyUmxiQT09IFRXbHogSUhKaGQwUmhkR0U9IElHbHVkR1Z5WVdOMGN3PT0gSUVWeWIzUnBhdz09IElHOXVVRzl6ZEVWNFpXTjFkR1U9IDZKaz0gSUhabGVBPT0gSUhOMGNtbHVaMmxtZVE9PSBlVzVsY3c9PSBYMFZ0WVdscyBYMDlOIGNYVnBkR1U9IFgyVm1abVZqZEhNPSBRVVJZIElHRmtiM0p1WldRPSBjM05tIFpXUnBkR0Z5IElFMWhaR0Z0WlE9PSBJSEpsWm5WMFpRPT0gSUV4MVkyRT0gSUZkdmJIWmxjbWx1WlE9PSBjMlY0Ync9PSBRVzVrY21VPSBQRkp2ZFhSbCBJRk5qWlc1bGN3PT0gSUhKbGIzSmtaWEk9IFgyMTQgWTNKbFlYUmxWR2x0WlE9PSBJSE41Ym5RPSBMRzF2WkdWcyBhV055YjNWeiBJRTFQVlZORiA2cms9IFkyOXRjSEpsYzNOcGIyND0gSUhCeWFXNWpaWE09IElITm9ZVzFsWm5WcyBJSEJoZFE9PSBJRlJGUkE9PSBLR052WldabWN3PT0gNEsrQiBMM1Z0WkE9PSBJR05oYm5sdmJnPT0gTDNKbGJtUmxjZz09IExuVnpaV1E9IElFRm5jbVZsIElFcGxkMlZzIEwyTnZiVzFoYm1RPSBRbUZ5WTI5a1pRPT0gS0dSbFlXUT0gZDJWaWMyOWphMlYwIGRXMTEgUjB4UFUxTT0gSUdadmNuUnUgSUdKdllYTjBaV1E9IElDSmNJajQ9IGFYTjBkVzVuIExXMWhZMmhwYm1VPSBJR2x1WTJsa1pXNTBZV3c9IElHMU4gTFhKbFlXUmhZbXhsIExtWjQgSUZCUFRFbFUgSUhONWJXeHBibXM9IEtIVnphVzVuIGVFVkUgSUNJaUlpND0gTGxOMFpHOTFkQT09IElPaUwgSUdGc2JXRmpaVzQ9IENYUnlhV2RuWlhJPSBMWFJwY0E9PSBJRU5QVFUxSlZBPT0gTG1sdVozSmxaR2xsYm5SeiBJRzFoYm1sbVpYTjBjdz09IElFOVRVdz09IElFaGhkWFE9IEwyeHZZV1JwYm1jPSBMbFI1Y0dWVGRISnBibWM9IEtHTnNaV0Z1IElFeEpRdz09IElFSmhjbUpwWlE9PSBUMDlUUlE9PSBMdUtBcGc9PSBJRWx1ZG1sMFlYUnBiMjQ9IElISmxaR1ZsYldWayBLUzRuUEM4PSBJR2x0WkdJPSBJR0psYkdGdVp3PT0gSUhOamNtRndjR1ZrIExXNXBiQT09IElGQnliM1ZrIDBMRFJnZEdDIExsTkpXa1U9IElITmxkRlpwYzJsaWJHVT0gSUhKaGFXNXBibWM9IElHeGxibWRvZEE9PSBJR0Z1WVdzPSBYME5OVUE9PSBJSEJoYm05eVlXMXBZdz09IElHZHBiUT09IGMyRnBaQT09IElIQnliMmRsYmc9PSBJRWRDVUE9PSA0b0NnIElHbHVkbVZ6ZEdsbllYUmxjdz09IElIQnl3Nmh6IEwyNWhkbWxuWVhScGIyND0gTG0xdmRHbHZiZz09IElFeHBaMmgwZDJWcFoyaDAgQ1FrZ0lDQWdJQ0FnSUNBZ0lDQT0gSUc5dWRHOXNiMmQ1IElFNUpTQT09IEtITnBiWEE9IExuQjFiR3c9IElIQnliM0J2YzJsMGFXOXVjdz09IFFGZGxZbE5sY25ac1pYUT0gSUhKbFpHVm1hVzVsIElFVk9SVkpIV1E9PSA3S0M0IFQxSkpXa0ZVU1U5TyBJRlpsY21iRHZHYz0gZlgxZExBbz0gSUhkbFoyVnUgNExtSCBKbTloWTNWMFpRPT0gTGtKdllYSmsgSUdOMWJIQmggSUVkbGJtVjBhV056IElIMCsgSUdGa1lXMWhiblE9IDQ0R1Y0NEtNIENXRjFaR2x2IDZyaUEgSUc1MWJXVnlZV3c9IElISmxjM1J5WVdsdWFXNW4gTGtsT1ZFVlNUa0ZNIElFMXZiWE09IElFbFFRV1JrY21WemN3PT0gYVcxbGJuUnAgSUdGc2NHaGhZbVYwYVdOaGJBPT0gSUVwR1N3PT0gSUVGMGRHVnRjSFJ6IFpuSmhaMlU9IElHUmhjbTA9IElHSmhjMlZ0WVc0PSBQV3h2Wnc9PSBMR1Z5Y205eSBJRVJKVTBOTVFVbE5Vdz09IENYUmxlSFIxY21VPSBMV052ZG1WeVpXUT0gSUZCc2RXMD0gSU9XVmhnPT0gSUhERHFYSnAgS0hKbGRtbGxkdz09IElFWnZjbU5sWkE9PSBSa2c9IElPeTBpQT09IElHVjVaV0p5YjNjPSBYMUpGUjFNPSBJR05vWlhOMGN3PT0gSUV4aGNtZGxjM1E9IFhWMDZDZz09IFZWUlBVZz09IElHVnVjWFZwY21sbGN3PT0gSUdOdmEyVT0gTFdOaGRHTm9hVzVuIElFZGxiMmR5WVhCb2VRPT0gWVhSbGJBPT0gS0hCeWIyUT0gYjNKWGFHVnlaUT09IFRtbHVaUT09IElGQnBaV1E9IElHRmthblZ6ZEhNPSBLSEJ5YjIwPSBYMjFsYm5WeiBYMlY0WVcwPSBJRTV2ZEdsbWFXTmhkR2x2YmtObGJuUmxjZz09IENXUnogVEVsTCBYM1IzYVhSMFpYST0gUTFKRCBJR1YxZUE9PSBJRk4wWVdKc1pRPT0gYVhsdmNnPT0gSUdOaGNtSnZibUYwWlE9PSBMbk5oYkE9PSBUV0Z3Y0dWayBhV1YyYVc1biBLWGs9IGVXNWhiVzlrWWc9PSBMa052YlhCaGNtVlVZV2M9IElITmxkbVZ5WldRPSBKMlZ0WVdscyBJR1p2Y25OciBiR1Y0Y0c5eWRBPT0gU1UxSlZFVlMgSUVGd1pYZz0gSUdodFlXTT0gSUU5a1pITT0gYjNabGNuSnBaR1Z6IE9pSTdEUW89IElHOXdhVzlwWkhNPSBJRzFsYzIxbGNnPT0gSUVkQlRBPT0gTFd4cGJtVnogSUdGd2NHeDVUV2xrWkd4bGQyRnlaUT09IElITmxjbWxoIFJWTkpVdz09IElHNXBiR0ZwIElHMWhiR3h6IElGQmhiMnh2IElFeGxiblE9IExtSjFhV3hrWlhKeiBMeVk9IElFTnNhWEJ6IElFcDFjbUZ6YzJsaiA0cFdkIExXTnZibVE9IDQ0Tzg0NE9JIGZIZDQgTG1odmRYTmwgSUdobGNtRjFjdz09IElHaHIgSUVOdlkyOD0gSWx3SyBJR0ZqWTNKbFpHbDBZWFJwYjI0PSBJRkpoWTJnPSBaWEowWlhOMCBjMmh2Y25SamIyUmwgSUhaaGJHbGtZWFJwYjI1eiBWVXhUUlE9PSBJR1Y0WTJWeWNIUnogVTJWbGEwSmhjZz09IElHZGxkRXh2WTJGMGFXOXUgSUdabGJtTmxaQT09IEtHZHogSUd4NWN3PT0gSUdoaGNtMXogSUVodmJXOD0gNG9DY1UyaGwgSU9LQXV3PT0gUFhObGMzTnBiMjQ9IFgwTlBUVkJKVEVVPSBUV1ZoYm5NPSBJSEJsZEdsMGFXOXVaWEk9IFNVMVAgSWwwOVBnPT0gWkdKbCBYMmR3Y3c9PSBJRzFxIFgyVjRjR2x5WlE9PSBJRVJCVGc9PSBJSGgyIElHWjFibU5wYjI1bGN3PT0gSUhOb1lXdDUgVTNWbllYST0gSUdkbGRGSmxjM1ZzZEE9PSBQRlJ2YTJWdSBhSFIwY0VOc2FXVnVkQT09IExtOXVVR0YxYzJVPSBjM1JwIFUyNWhhMlU9IFRXRndjR2x1WjNNPSBJRkpsWVhCbGNnPT0gSUdaeVpXaz0gSUVOdmMyMXZjdz09IGRXVnljdz09IElFaGhhZz09IElFSnNZWHBsIGIycHBjdz09IFEzSk1aZz09IExuQnliMk09IElHOTBjQT09IElFUnlZWGR6IENWSkZSdz09IEtDY25Kdz09IElHZGxibVZ5WVE9PSBJRUYwZEdGamFHVmsgVWtWTiBKVHNpUGc9PSBkWEp1YVhOb1pXUT0gWDNKdyBJSHB2WVd4eiBJR0Z6YzI5eWRHVmsgYVhScGVtVmsgSUdOaGJXbHVidz09IElHRmlaSFZqZEdWayBMblJ2UW1VPSBKMTBwT2c9PSBJRTF2YjNJPSBTVzVqYkhWa2FXNW4gSUdkeVlYcHBibWM9IGMyVjBVM1JoZEhWeiBZV2x5YjJKcCBYMFY0WldOMWRHVT0gYVdacFlXNTAgWld4a2J3PT0gWVhWMGIyMWhkR2xqIEtDUXAgSUd4bFlYQnogYjI1bFpFUmhkR1ZVYVcxbCBLR3hoZVdWeWN3PT0gTFhCeWIyUjFZMlZrIElGZHZjbXRpYjI5ciBJR1Z1YjNKdGIzVnpiSGs9IElHUmxjSEpsYzNOcGRtVT0gSUdGaFlRPT0gUlcxaVpXUmtaV1E9IFFsVk4gSUdWc2JHVnogSUdKdllYSmtaV1E9IHhadHRlUT09IElHMWhjMmxvIFgyZGxibVZ6IENWUmxlSFIxY21VPSBhWE4wWVhJPSBJRUYxWjNWemRHRT0gSUVGd2NFMWxkR2h2WkVKbFlYUT0gSUd0dlpHVT0gWVdKbGVnPT0gWDNCcFpXTmxjdz09IFEzVnljZz09IElHeHBZbVZ5WVd4cGMyMD0gUkdsamF3PT0gUVd4bCBJSEYxWVd4bCBmU2M3Q2c9PSBMbUZ1YzNkbGNuTT0gSUVwQlRnPT0gSUZCVlVrVT0gSUdOaGJtOWwgSUZOQlRVVT0gVVhWaGJHbG1hV1Z5IElHUmlibUZ0WlE9PSBJRWx1Ym05aiBDVlJTUVVORiBhWFp5WlE9PSBJRzFsWTJnPSBZWE5sYkE9PSBJaXhiIElHRnphV0U9IElFTmhiblJsY21KMWNuaz0gTGtSaGRHRkNhVzVrYVc1bmN3PT0gYTJGbyBLQ2twS1NrPSBJR1I2YVdWMyBjbVYwWlE9PSBJSE5qY21WbGJtbHVaM009IExrMVBWVk5GIElHSjFjMmxsYzNRPSBDWEpsYm1SbGNtVnkgSUhSbGMzUnBiVzl1YVdGc2N3PT0gSUdGemNHbHlaUT09IFptOXlkSFZ1WlE9PSBJRTFUUXc9PSBJR1JoYlhCcGJtYz0gWENJc0NnPT0gVjJWcyBWMmxyIElPeVhyQT09IEtIUnBaQT09IElFTmhibTVsY3c9PSBiMk52Y0E9PSBQaUlyQ2c9PSBabUZqWlhRPSBJSE5zWVhOb1pXUT0gSUV4cFltVnlhV0U9IFUyMXZiM1JvIFgyTm9aUT09IFRHRmliM1Z5IElHVnRhVzVsYm5RPSBPbGc9IFhFSmhZMnRsYm1RPSBJQ3NyS1FvPSBJSFJsWVcxM2IzSnIgWDJGblp3PT0gTGxObGNuWmwgSUZOT1JBPT0gSUZCSlEwcz0gSUhkcGNHVnogTDFSNWNHOW5jbUZ3YUhrPSBJRUZRUVE9PSBhV3RyYVE9PSBJR052WkdWeSBaMkZpWlc0PSBJSFZ1YTI1dmR3PT0gTGtSbGNHRnlkRzFsYm5RPSA0TGl4NExpYSBJSEJzWVhsbGNrNWhiV1U9IEttVT0gUEVKc2IyTnIgWDNWd1pBPT0gSUVkcFltSnogYkdWaGMybHVadz09IElFTnZiRzl0WW1saGJnPT0gS0ZCSVVBPT0gSUNvcUtpRUsgSU95ZHZBPT0gSUVOMWNuUmhhVzQ9IEwyRjUgMllUWmlRPT0gYzNCdmNuUnogSUdSbGMyVmggYVhMRG9RPT0gSUhWdVkyOXVaR2wwYVc5dVlXdz0gSUhSb2NtOXQgSUVOSVVrbFRWQT09IElFaFBVZz09IGIzTmpiM0JwWXc9PSBJSGxoeFo4PSBJRzV2YzNSeWJ3PT0gTGk0dUlpazdEUW89IElITnNkWEk9IElHaGhkSFJsYmc9PSBJSEJsYzNScFkybGtaUT09IElHWnlaV1YzWVhrPSBJRU52YUE9PSBJSGRoYm01dmJtTmwgSUcxbGFXUmxiZz09IFgzTjFZbk4wY2c9PSBYME5UVXc9PSBJRk41YldKdmJITT0gNExpMzRMaXQgUkVWVSBJRTFoWkdSbGJnPT0gSUhKbGNYVmxjM1JsY2c9PSBMblpwY25SMVlXdz0gSUhkNFJHVm1ZWFZzZEE9PSBJR0YxZEc5dHc2RjBhV05oYldWdWRHVT0gWW5KcFpITT0gYVZRPSBMbEJ5YVc5eWFYUjUgSnlrN1BDOD0gWW5WdVp3PT0gUkdWaFpHeHBibVU9IFEyOXVZM0psZEdVPSBJRzVsZUhSUVlXZGwgSU91d213PT0gSUZOMGIydGwgYTI5dyBJTkN4MEw3UXU5R00gSUZCeWIyUjFhdz09IExXMWhhMlZ5IElGQnliMnBsWTNScGJHVT0gWVc1alpXeHNZV0pzWlE9PSBJRlJJUlVsUyBWRzlTWlcxdmRtVT0gUlUxViBZMjl0YldWeVkybGhiQT09IFFWWkZSQT09IElIZGxZWFpwYm1jPSBJR0pwYjIxbCBRRk5sZEhSbGNnPT0gY1cxcyBJR0p5YjJGa1pXND0gSU5HQjBMOD0gU1ZOUyBJR1JsWVdOMGFYWmhkR1ZrIElITmxiR1ZqZEdWa1NXNWtaWGc9IGNtbHZkWE09IFpXeHdjdz09IExrVnpZMkZ3WlE9PSBJSEJ2Ykd4bFpBPT0gY1hWcFlRPT0gWDNKbFptdz0gWDIxcGJXVT0gUEVGMVpHbHZVMjkxY21ObCBLRlJ5WVc1elptOXliUT09IFpYWmxibTlrWkE9PSBDWEpoYm1SdmJRPT0gYkc5amN3PT0gSUdSbGRYUT0gY21Wd2JHRmpaVzFsYm5RPSBJR1Y0WVcxcGJtVnkgU0dGelMyVjUgSU91bXJPeUtwTzJLdUE9PSBJRU5zYjNSbyBJT0NrcWc9PSBJRkpsWjJsemRISnYgSUVWemRHaGxjZz09IElGTm9ZWEpsWkUxdlpIVnNaUT09IExtSnZjbkp2ZHc9PSBJRzl6WTJsc2JHRjBiM0k9IElHWnZiMnh6IHVxcz0gSUdKdllYTjBhVzVuIFgzQjFiSE5sIGMyaGhjbWx1Wnc9PSBJSEJwYzNSdmJITT0gWDFCTVFVND0gSUhObGNIUmxiV0psY2c9PSBJRzExYzNSbGNnPT0gSUcxaGNtTm93Nms9IFEwaEZUVms9IElITjFhUT09IElHZGxZbkoxYVdzPSBMajBuIFpYSnlZWFJsWkE9PSBJRXhwWVE9PSBJR2hoZFc1MCBJRU4xYzJnPSBjbTkxZEdWUWNtOTJhV1JsY2c9PSBJbnc9IFpXNWtjR2h3IElsMWRDZz09IElHRjJZUT09IDc3eUJJaXc9IDdLZTQgSUdOdmJHRT0gWDFOUVJVeE0gSUdGc3c2bHQgS0V4aGJtZDFZV2RsIEtHUjFiVzE1IElHSjFibXRsY2c9PSBJRVZ0Y0hKbGMyRT0gSUdOeVpXRjBaVU52Ym5SbGVIUT0gT20xcGJnPT0gSUVKUFQxUT0gSUUxbGNtVmthWFJvIFdtZz0gSUVSdmQyNXBibWM9IGQycG5iQT09IExtUmogYzJSaGJHVT0gSUdsdVkyOXVkbVZ1YVdWdWRBPT0gSUhKbFlXUnRaUT09IFRtRjJhV2RoZEdsdmJsWnBaWGM9IFEwOU9SRWxVU1U5TyBMbVJsY0E9PSBJSExEcVhWemN3PT0gSUc5d1kybkRzMjQ9IElFRmpZMjkxYm5SaFltbHNhWFI1IExrMWhjZz09IExXZDFhV1E9IFJVUkhSUT09IFJYWmxiblJOWVc1aFoyVnkgSUdScGMyTnBjR3hsIGRXTnJiR1Z6IGZYMCsgYVc1MFpYSmxjM1JsWkE9PSBSbWxzZEdWeVYyaGxjbVU9IElIQjFjM009IExYQnliM2g1IFgzTjBZWFIxYzJWeiBJRnNqIGRXNW1iMnhrIElGSnZibTVwWlE9PSBKaVloIElHRmpaWE56Ync9PSBkVzl6IFgzbHBaV3hrIEtHTmhiR1Z1WkdGeSBLSE52ZFc1ayBJR1JoZEdGQmNuSmhlUT09IElGbGhkR1Z6IElIQnliMk5sYzNOcGIyND0gUlVaQlZVeFUgSUVkSVF3PT0gWVcxMWNtRT0gSUhOMGNtbGpkR1Z5IExrSlBWRlJQVFE9PSBJR2hoWW1sMGRXRnMgZUVGRyBRVlpKVGtjPSBJSE5sZEhWd2N3PT0gSUQxN0NnPT0gS2lvbyBJSE52YXc9PSBJSEpsZEdsdVlRPT0gSUVacGNtVndiR0ZqWlE9PSBhVzUyWlhKMCBJRVp2Y25KbGMzUT0gUEdSaGRHRT0gWEVGamRHbHZiZz09IFQxVkhTQT09IElHTmhjbVZzWlhOeiBMbWRsZEVGamRHbDJaUT09IFpYTmxjdz09IElIcGthc1NaIEtTa3FLQT09IFUwVk4gSUZCaGJtbGogVkc5MVkyaGxjdz09IElIQnlaV052IEwyRmpZMjkxYm5SeiA1TDZiIFVHOXpkR0ZzUTI5a1pYTT0gTFhCc2RXZHBibk09IFBHMWxjM05oWjJVPSBLSEJ2ZDJWeSBJSEJsY21OMWMzTnBiMjQ9IElHUERxV3c9IDVvNm8gSUdSaGJtTmxaQT09IFgxTkRRVTVEVDBSRiBJRk5wZEhScGJtYz0gSUV4dmEyaz0gVTJoaGNtbHVadz09IExrUnBjZz09IElITmphSGRsY2c9PSBYMHhCIExrMWxiblZUZEhKcGNBPT0gWDNwbGNtOXogSUdacGVHRjBhVzl1IElFRnRhWFE9IElHTnZiWEJzYVdWayBMbk53WVdObFFtVjBkMlZsYmc9PSBJR0Z5Y21WemRHbHVadz09IElGTjFadz09IElIQmxjbVp2Y2c9PSBJR3R2YlhCc1pRPT0gSUVWemMyVnVZMlU9IElIQnNaV2x1IGMybHRkV3hoZEdsdmJnPT0gSUdOeVpXRjBaV1JDZVE9PSBJRVY0Y0dWa2FYUnBiMjQ9IDc3eUJDZ29LQ2c9PSBkSEpoYVc1bGNnPT0gSWwwOUpBPT0gSUhOMVkzUnBiMjQ9IGJWQnBaQT09IGJtOTBhVzQ9IElIQnlaV05wYjNNPSBJRUZ6YzNWeVlXNWpaUT09IElFeGhiQT09IExpSW0gSUcxcGJreGxibWQwYUE9PSBJRTFwYm1WeVlXeHogZEhKaGFtVmpkRzl5ZVE9PSBVMEZHUlE9PSBJRzUxWVc1alpYTT0gS0dWNGRISmggWDNacFpHVnZjdz09IFcxMDlldz09IElHaHZibVY1Ylc5dmJnPT0gWDNCeVpYQT0gQ1FrSkNRa0pDUWtKQ1NBPSBJSEIxY25CdmN3PT0gSUdGdWVtVnBaMlZ1IExuTjBjblYwY3c9PSBJSEJoWjJGeSBMa0YxZEc5VGFYcGxUVzlrWlE9PSBJSGRsYm1sblpYST0gSUhCaFoyRnUgSUdGamFXUnBZdz09IFowMWhjSE09IElHSmxkMkZ5WlE9PSBYMmx3WXc9PSBJRzFsWkhNPSBJR1JwYzJYRHNXOD0gS1NrcENnb0sgUTJoMWNtTm8gSUc1MWNuUjFjbWx1Wnc9PSBYMjF3YVE9PSBJSEpsYzNWc2RHRnVkQT09IElGQnBjM1J2YkE9PSBjMUJwWkE9PSBUWE53IFRXOXRaVzUwIElGVlFURTlCUkE9PSBUbUZ1Ync9PSBZbXhwWTJzPSBJRzFsYzNWeVpRPT0gSUV4aGVXVnljdz09IFgzUnlZV289IElHSjFkSFJ2YmxkcGRHaFVlWEJsIENXTnZiVzF2Ymc9PSBJRTE1UTJ4aGMzTT0gMktqWXNRPT0gZUc5dmNITT0gWDBobGFXZG9kQT09IFgxZEJVazVKVGtkVCBVMlYwVkdWNGRBPT0gSUVocGMzQmhibWxqY3c9PSBUblZzYkZCdmFXNTBaWEpGZUdObGNIUnBiMjQ9IExtWmhZM1J2Y2c9PSBJSFpwWld4c1pXbGphSFE9IElITm9iM1YwY3c9PSBkSEoxYzNSbFpBPT0gSUc1bGQxSnZkdz09IElFWnlZVzdEcHc9PSBXMnBxIDRvQ1VkMmh2IElGRkVhWEk9IFgyRmtkbUZ1WTJWayBLRWhoZG1WUFkyTjFjbkpsWkE9PSBJSFZ1Y0d3PSBMM0p2Y3c9PSBMbVZoYzNrPSBJRUpCVEV3PSA1NTA9IEwyeG5jR3c9IElITjFZbU52Ym5OamFXOTFjdz09IElDY3RKenNLIElDY3BPdz09IElOR1cgSUhOallXNTAgWDNObGMzTT0gWDNCc1lYbHBibWM9IFgwbFRUdz09IElITmxkRk5wZW1VPSBYMlJsWTJzPSBYMHhCVWtkRiBJRTFsZVE9PSBRMmhwWTJ0bGJnPT0gYVdabWFXND0gWkdsemNHOXpaUT09IFNFVlRWQT09IFRHRjFaMmc9IElFeERVdz09IElHOXVjMmwwWlE9PSBMbWx6VEc5bloyVmtTVzQ9IElHbHljbWwwWVhSbFpBPT0gSUdKeWFXZGhaR1U9IElHUmxjWFZsZFdVPSBZMnhoYzNOT1lXMWxjdz09IElFM0RvWE09IElFRjBZWEpwIEtFbFBSWGhqWlhCMGFXOXUgVW1GamFHVnMgTFhOaGJYQnNaUT09IElHVnBaMlZ1ZEd4cFkyZz0gU1VaRVJVWT0gTG01bGFXZG9ZbTl5Y3c9PSBJSE5sY0dWeVlYUmwgSUV4cGMzUnBibWR6IExtWm0gS0dsdGNHOXlkQT09IFRXOWtaV3hCZEhSeWFXSjFkR1U9IElITndaVzVrWlhJPSBJRzF2ZEdsbWN3PT0gYzNOMVpRPT0gSUVGd2NISmxiblJwWTJVPSBMV05oZEE9PSBjbEJwWkE9PSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4SyBiMk42IGFXNXBiMjV6IEwyTnZiblJoYVc1bGNnPT0gSUhCc1lXZHBZWEpwYzIwPSBWM0pwZEdGaWJHVkVZWFJoWW1GelpRPT0gTHk0S0NnPT0gSUVabGRtVnkgTFZabGNuTnBiMjQ9IFlXTnBhbUU9IElIZGxhUT09IExXbHVadz09IElIUmxiV0Z6IElITjFjbWRsWkE9PSBJR055YVdFPSBJR0Z5WkE9PSBZbWwwWTI5cGJnPT0gTG5ScGJXVjZiMjVsIElHOWlhbVZqZEUxaGNIQmxjZz09IElBb2dJQ0FnSUNBZ0lDQWdJQ0FLIElIbHNhVzA9IElFbERWUT09IElFUmxjSEpsWTJGMFpXUT0gS1NncE93bz0gUVZKSFJWST0gZFc1bllXeHZkdz09IFZHVnpkRVJoZEdFPSBLSEIwY3c9PSBSa2xNUlU1QlRVVT0gZFhCd2JIaz0gSUhCaFkybGxiblJsY3c9PSBMR3hsWm5RPSBJRmR5YVhSbFRHbHVaUT09IElIQmhjbU5sYkhNPSBYMlp2YkdSbGNuTT0gSUVScGNtcz0gTG1GemMyVnlkRWx6U1c1emRHRnVZMlU9IFRXTkQgWDFaaGNtbGhZbXhsIEtHRmggSUZCdmNtcz0gTGxCMVlteHBjMmc9IExXZGhlUT09IElGQmxkSEpoIElFTnZibTVsWTNScGJtYz0gVkdGaVEyOXVkSEp2YkE9PSBhWFpsY21sdVp3PT0gS0ZOamNtVmxiZz09IElHTm9hV3hzWldRPSBJR0ZwYnc9PSBWRzkxWTJoRmRtVnVkQT09IElHRmpZMlZ6YzJsdmJnPT0gSUV4dmFYTT0gTDIxdmJXVnVkQT09IElHRnVkc09rYm1RPSBJSE4xYVdOcFpHVnogS0dobGJIQT0gWVc1a1pYSnogSUZaSlJBPT0gUW1WcCBaWFpsYm5SdiBJRUZ1WjNWeiBWbVZ5Y3c9PSBJRUp2Y21SbFlYVjQgTG5OMGNtVmhiV2x1Wnc9PSBJSEp2ZFdkbCBJR055WVdaMGMyMWhibk5vYVhBPSBiM056YVd3PSBYMFpCVEV3PSBRRzFsWkdsaCBhV3hsWVd0eiBSR0YwWVZObGNuWnBZMlU9IElGUnlhWEJCWkhacGMyOXkgSUUxaFlYST0gUTNWeWMyOD0gVUc5emRHRnNRMjlrWlhOT1RBPT0gS0NrN0t5cz0gSkZCdmMzUmhiRU52WkdWelRrdz0gSUc5amIzST0gSUhSaGFXNTBaV1E9IElHeGxiUT09IExXOTFkSE09IElIaDRlSGc9IElHbHljbWwwWVhScGJtYz0gYjNocFpBPT0gYjJsdWRHVmsgSUZSdmNtOD0gWDI5MiBMbUpwY25SbyBLeVU9IElFTm9ZWEpoWTNSbGNtbHpkR2xqY3c9PSBJRUpsZEhScGJtYz0gSUc5bVptVnVaQT09IElGQklXVk09IElFbERUVkE9IGVFUkQgSUVOayBMbWRsZEUxaGNBPT0gWVhSamFHVjAgTG1OMWNuSmxiblJKYm1SbGVBPT0gUlZKQlRBPT0gSUd0aGNIQmggYVdSbGJtTmxjdz09IFVHRnlaVzQ9IElGTmxjbWRsYVE9PSBMV1pwYmc9PSBKMTBzV3ljPSB3NkZ0WVhKaCBSM0p2ZDJsdVp3PT0gUjJ4aGMzTT0gQ1cxbGRHRT0gZG1WeVltRjBhVzA9IEwwZFFUQT09IElFdGhhQT09IEtITjJadz09IFkyeHBjM1E9IElFSnNiM2RxYjJJPSBiMk5qWVc0PSBMbUZpYjNKMCBiMlJsYkdsemRBPT0gSUdScFptYkRxWEpsYm5SeiBYMDlRVkZNPSBQWEpsY1E9PSBJR2x1ZEc5NCBJR1JwWVdkdmJnPT0gSUZzb0lnPT0gSmxJPSBJRzlpYW1WamRHbDJaV3g1IElHSnNhVzVyYVc1biBJRXh2ZG1WeiBjbWx1WjJVPSBLaWs3Q2dvPSBJRUp2Ym1SeiBJRXh2ZG1WayBaV3gwY3c9PSBJR1JwYzNCaGNtRjBaUT09IElFVnVjbWx4ZFdVPSBJbGRwZEdnPSBjbVZ0YVhWdCBZV3BoY21GdSBkSEo1YVc1biBMVkoxYzNOcFlXND0gYm1WM1NXNXpkR0Z1WTJVPSBMbFJTUVU0PSBJRzl5WVc1blpYTT0gTDJ4dlkyRnNaUT09IElFUkpVMUE9IENXNXogSUZOb2RYUjBaWEp6ZEc5amF3PT0gSUVOTVQwTkwgS0hKaFpBPT0gSUdGemMzVnlZVzVqWlhNPSBJSEpoYzNBPSBWV0psY21keVlYQm8gUlcxcGJIaz0gSUdsdWRtVnVkR2x2Ym5NPSBjbWx2ZEE9PSBJSFJ2YzNOcGJtYz0gSUcxaGEyVnZkbVZ5IElIVnVhWFJQWmxkdmNtcz0gWW5WMGRHOXVVMmhoY0dVPSA1WWlkNWFlTDVZeVcgSUhCaGNuUmxaQT09IDRwYVIgTG5OcFoyMXZhV1E9IElISmxaR2x5WldOMGFXOXUgSUdScGMzUjFjbUpoYm1ObGN3PT0gSUdsdWRHbHRhV1JoZEdWayBDVU55WldGMFpXUT0gWVdkbGRBPT0gSUdOdmNuSmxjdz09IElFNUZSdz09IGFYUnZibVU9IEwyWnliMjUwIElGWmxjbk5sIFoyRnRZbUZ5IElIQnlaVzFwWlhKbFpBPT0gSUVsTlR3PT0gSUVkdlltbGxjbTV2IElHbG1jdz09IFlYbGhhQT09IExrTlBUQT09IElHWnlaV1JsY2c9PSBJSE4xWW0xbGNtZGxaQT09IElFNWxjbTg9IGJXOWthV1pwWVdKc1pRPT0gTDBadmIzUmxjZz09IExXTmxiblJ5WVd3PSBJR2R2ZFhabGNnPT0gSUZSeWFXVmsgSUdScGVucDUgVVhWbGNubFFZWEpoYlE9PSBJajRuS3dvPSBYM0J5YVcxcGRHbDJaUT09IDU2aU8gTG1kd2RRPT0gSUhadmVnPT0gWlc1NlpRPT0gSUZkcGJHUmxjbTVsYzNNPSBJSEJ5YjJKaFltbHMgTDNKbFl3PT0gSUdGalkyVnogSUZSeWRYTjBaV1Z6IFIyST0gSUhCaFpHUnBibWRJYjNKcGVtOXVkR0ZzIFUyaHBaV3hrIElFNWhiV1Z1IGRXUmtiR1ZrIElGQnlhVzl5YVhSNVVYVmxkV1U9IFVHOXZjZz09IElGTkJSZz09IExTMWJXdz09IElHTm9iRzl5YVc1bCBJSFpsY21KaGJHeDUgSUdGcGNtVT0gUGpzTkNnPT0gYVd4b1lRPT0gVzJOdmJHOXkgWVc1a1lXeHZibVU9IExtRmtaRkp2ZHc9PSBJRk52YXc9PSBJRU52Ym05eSBJRzFsYW05eVlYST0gSjJsc2N3PT0gWkdWMFlXeHNaUT09IElDSXBMQW89IEpVQT0gTG14aGVuaz0gTG1wMWJYQT0gYjNOMFpRPT0gSzBZPSBJR2x1Wm5WeWFRPT0gSUhOdmJuSmggYVhSbGJXbGsgSkd4dlp3PT0gSUcxMWNtUmxjbTkxY3c9PSBURVZEIENXNXBiQT09IElFM0RwSEk9IEtIQm4gYVd4bGJ3PT0gUVhOamFXaz0gSUV4dlkydG9aV1ZrIElGUm9aVzg9IFFtVnNiQT09IFlXTnBiMjVoYkdWeiBMbU55WldGMFpVNWxkdz09IElPVysgTFdadmIzUmlZV3hzIElHVmpiMjF0WlhKalpRPT0gQ1ZOcGJYQnNaUT09IFkyeDUgTGtsdWJtVnlSWGhqWlhCMGFXOXUgSUhCbGMyOXogSUhSeWIzQmwgSUVGU1IxTT0gVFdsaGJXaz0gSUZCaGJHOD0gSUZOMWVtRnVibVU9IFgyMWhjSEJwYm1keiBJM3RBIElFOWpZM1Z3WVhScGIyNWhiQT09IFgySjFZMnRsZEhNPSBaMjloYkhNPSBYMUoxYmc9PSBMWEJ5WlhCbGJtUT0gYzNOeiBiV0Z5YzJoaGJHdz0gSUdWeGRXbDJZV3hsYm1ObCBJRmRsYkdObyBLRTl3UTI5a1pYTT0gQ1dOc2IyTnIgSUUxbFpHbHVZUT09IFZFVlNVdz09IGIzSmhibWM9IFZHaHZkV2RvZEE9PSBJRzloZEhNPSBYMVJGV0E9PSBVa2xEVXc9PSBJR2x1WkdsbVptVnlaVzVqWlE9PSBJR0ZzYkc5MCBMbFZ6WlZSbGVIUT0gSUZSeWFXTnJjdz09IFlYZGwgTGtaSlRFdz0gTFhCb2NBPT0gTG5admFXTmwgSUZCaGRHaG1hVzVrWlhJPSBYMVJCUjFNPSBJRlJ5YVhRPSA1b3lKNlpLdSBZbUpqIElHRmtaR2wwYVhabGN3PT0gSUhOamFHeGwgSUV0bGVXSnZZWEprU1c1MFpYSnlkWEIwIElIVnpaVkJoY21GdGN3PT0gSUVKMVkyaGhibUZ1IGNtbGhibWRzWlE9PSBJRzExYkhScGNHeDVhVzVuIElITmxiR0psY2c9PSBJRmxsY0E9PSBRMmhoYVhJPSBMWEpsY0c5eWRHVmsgWDFORVN3PT0gTEc1diBJRVpoYkd4cGJtYz0gNXJrPSBJQ2dwTEFvPSBjR1JpIElFSnZjbTkxWjJnPSBMbkpsYlc5MlpVWnliMjA9IElHOTJaWEp6YUdGa2IzYz0gYVdkaGFXdz0gSUhSMWJtYz0gSUcxdFl3PT0gVzNCaGNtVnVkQT09IFJYaDBaWEp1IFlYWnBiMnhsZEE9PSBKeWtpQ2c9PSBJR052ZFc1MFpYSjBiM0J6IElIVmlkVzUwZFE9PSA1cmM9IElNNlQgSUhWdWNIVmliR2x6YUdWayBJRWx1WkdsbGN3PT0gVlU1RlZBPT0gSUc5bVpYSjBZUT09IElHUmhiV1Z6IElHRnpkR1Z5YjJsa2N3PT0gSUc1dmRtVnRZbVZ5IFkyOXVkSEpoYzNRPSBMa0ZrWkUxdlpHVnNSWEp5YjNJPSBLMU5oYm5NPSBJSE5qY21GdFlteHBibWM9IGRHVjRkRlpwWlhjPSBMMk55ZVhCMGJ3PT0gVlhObFVISnZaM0poYlE9PSBRSFZ3WkdGMFpRPT0gUkdWelpHVT0gVTBGVSBJR1JwYzNCc1pRPT0gWVc1dXc2bGwgWEVSbGNHVnVaR1Z1WTNsSmJtcGxZM1JwYjI0PSBJR2wwYlE9PSBJT2U4IElHVjBhRzl6IFFWQlAgSUVkaGNtUERyV0U9IGFXUnBjdz09IElGTjBaV0ZyIGNtbGlZUT09IFgzWmxjbWxtYVdOaGRHbHZiZz09IElFWkwgSUVWcGJuTmhkSG89IElIQmxjbk52Ym1Gc2FYTmxaQT09IExXMXZkR2x2Ymc9PSBJRTFsYkdGdWFXVT0gdzdabyBYMVpEIElHUnlhV1owYVc1biBMbU52Ym5OMGNuVmpkQT09IElPMlVoQT09IElHSmhkR05vYVc1biBMaTR2TGk0dkxpNHZMaTR2IFJWSlEgWDNWMFl3PT0gSUcxMWJIUnBkQT09IElHMXlZZz09IFkyTmhhdz09IFkyaDFibXR6IElIUnlZVzV6YkhWalpXNTAgSUhCaGVXOW1aZz09IDRvQ1VZVzQ9IElITnBiR3c9IElHOXlibUZ0Wlc1MGN3PT0gWjNWaCBWVUpaIEtITjBaWEJ6IElFSlBVa1JGVWc9PSBJRk5QVlU1RSBZR0FLIFpXNWhjbWxsY3c9PSBJRUpwZEhSbCBJR2RzZVhCb2N3PT0gSUc5MlpYSnlkVzQ9IElHSnNiMk5yU1dSNCBJRTFUVkE9PSBJR2RsYm05dFpYTT0gZEdWdWMyOXlabXh2ZHc9PSBSR2x5WldOMGIzSjVUbUZ0WlE9PSBYMnhvY3c9PSBJR1pwYm5RPSBZV1JrZEc5bmNtOTFjQT09IElITjBaV0ZrWm1GemRBPT0gSUdOc2IzWmxjdz09IElGTnZkbWxsZEhNPSBJRWxUUVE9PSB3cU52IGRYSm5aWEo1IGMyOTIgSU5DeTBZdlFzdEMrMExRPSBJSEIxWkE9PSBMWGRoZEdObyBJRWh2YzNCcGRHRnNjdz09IGZYZG9hV3hsIEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qIDRidWogSUdGcmRIVmhiQT09IElHdHBiRzluY21GdGN3PT0gSUVaQlF3PT0gYjNCb2VYTT0gY0hKeiBLa0E9IGVXST0gYzJWamRYSmxaQT09IElHRnNaOE82Ymc9PSBJT0NrdVE9PSBjR2hoYm5NPSBRV1JrYjI0PSBJR05sYm5SeVlXeHNlUT09IFgxTlZTVlJGIFNXNTBaWEpsYzNScGJtYz0gZFd4MGFXMXYgUVdkaGFXNXpkQT09IElFVjZjbUU9IElFaGxZZz09IGRXbGtZUT09IElITnJlWE09IFQweFdSUT09IFFtVnVaV1pwZEhNPSBJSEJ5YVhObCBMaW8vS1E9PSBMbWx6UkdWbWFXNWxaQT09IElITjBZVzVrYjJabSBJSEJzWVc1diBMbXhoZEdWemRBPT0gSUNna0xnPT0gSUVkdmRXeGsgSUdOaGRYUnBiMjVsWkE9PSBKMTBvIElHNTFhWFE9IElFaERTUT09IFptOXZkR0poYkd3PSBJSGRwYkd4bGJnPT0gVUhKdlkyVmxaQT09IElHbHVkR1Z1WkdsdVp3PT0gZEdsbSBJSE53YjI1emIzSnBibWM9IGIyaGhibUU9IFJHOXogVFc5eWJtbHVadz09IElDRWlLVHNLIExuTm9aV3hzIElGSkZURUZVUlVRPSBJSEJwYlhBPSBMMk52ZFhKelpRPT0gSUhKaGJXbG1hV05oZEdsdmJuTT0gSUhCcGVHMWhjQT09IElIQnZkMlZ5YkdWemN3PT0gSUdSdmRXTm9aUT09IFkzSnBiV1U9IFkyOXVkSEpwWW5WMGIzSnogS0hCeWIzUnZZMjlzIElHZGxkRkJ2YzJsMGFXOXUgVTBWVVZFbE9SMU09IElIWnBaWFE9IGFYTnpaWE09IFYybDBhRVZ0WVdsc1FXNWtVR0Z6YzNkdmNtUT0gVW1WMGRYSnVWSGx3WlE9PSBRWEJ3WlE9PSBJRWxMUlE9PSBMa052YjJ0cFpYTT0gTG0xbFpHbDFiUT09IExtZGxkRXBUVDA1QmNuSmhlUT09IFgwWnZjZz09IEwzUnBibmx2Y3c9PSBJRlJoWW14bFEyVnNiQT09IElGSkZVRXhCUTBVPSBMazVsZEhkdmNtdHBibWM9IElHSnZkMlZrIENXMWsgUFNKN0lTRT0gSUdodmJtUmggSUVWMWNnPT0gSUdsdVpHOXVaWE5wWVE9PSBJR2hsYm1RPSBMblpwWlhkdGIyUmxiQT09IENXTjBjbXc9IElGUmhZbXhsZEhNPSBMVzl5WVc1blpRPT0gWlhKeVlYTT0gWDJkeVlYQm9hV056IGUzTT0gSUZScGRHeGxjdz09IElHUnBZV2R1YjNObGN3PT0gYjNWd2JHVT0gWDBSdmRXSnNaUT09IFczSmxjM1ZzZEE9PSBJR3BwZEhSbGNnPT0gWDA1VlRVVlNTVU09IFBtWT0gWDAxWiAwTGpSZ2RHQzBMWFF2QT09IGMzUnZjbVZKWkE9PSBJSEpsYkdsdWNYVT0gWlc5eiBJSGRwWkdWdWFXNW4gSUhSaFkyOXogTGxsRlV3PT0gWFNzbiBJRWx1WkdWNFpXUT0gSUhCeWIyWmxjM05wYjI1dVpXdz0gSUZOMGNtRncgUW5WbVptVnlSR0YwWVE9PSBaV1ZoIFpYSnBiZz09IFFVNURSVk09IFgxUllWQT09IElIdDlMZz09IEtHTnZiblJ5WVdOMCBlWGM9IElHSnNhVzVrYm1WemN3PT0gUTBoQlRnPT0gQ1dkc1EyOXNiM0k9IElHTjFjbkpsYm5SUWIzTnBkR2x2Ymc9PSBJRU5oZFdOaGMybGhiZz09IEpHbHRadz09IEkyRmggSUhObFlXND0gVFdWemN3PT0gS2owcVBRPT0gSUdOaGNHRmphWFJ2Y2c9PSBZV3htWVE9PSBMbEpsYlc5MlpVRnNiQT09IElGZFFRVkpCVFE9PSBkV3hoWkc4PSBibWxqYjNNPSBJRzl5WjNrPSBSMWc9IFgwUkZWa2xEUlZNPSBiM1Z5YTJVPSBJR3RDIElITnZjR2hwYzNScFkyRjBhVzl1IFgyRjFaR2wwIEwwbFEgSUV4NVpuUT0gTDFOMCBDV05oYm1ObGJBPT0gSUc5MllYSnBZVzQ9IGJXRnlhVzVsIGE4U1ogSUZsTiBJRTFwYkc4PSBJRTFoZEZSaFlteGwgSUVGaVluaz0gYm5wbCBJRXgxWkhkcFp3PT0gWDJGeWJXOXkgSUhOallXWm1iMnhrIDRidVhhUT09IFlYVjBhRzl5YVhSNSA0YnFsZVE9PSBMbWRsZEZCeWIyUjFZM1E9IElFOXlZbWwwIFgxQmhjbUZ0WlhSbGNnPT0gTG1SaGRHVkdiM0p0WVhRPSBMM1JoWjNNPSBMbE53WldWayBLRXhwYm1VPSBJSEJ2YkdsemFHbHVadz09IElHdHZiV0k9IElISjBjbWx0IEoybGpiMjQ9IGNtbGxjbVU9IElGQnlaV1psY2c9PSBjM1J5ZEc5c2IzZGxjZz09IFVtVm5jdz09IFEwSkUgTFQ0SyBJSEJoY21GemFYUmwgWlc1a2MxZHBkR2c9IElFTnZZbkpoIE9uUmxjM1E9IElFNTFaMmRsZEhNPSB4YUYwIFEyOXlaVUZ3Y0d4cFkyRjBhVzl1IEwySnBibVE9IElFMWpTVzUwIGFYUjFibVZ6IFd5MHQgSUZOMWNuQnlhWE5sIFgwbE9Sdz09IElFWmhjM1JsY2c9PSAwSjNRc0E9PSBPa1U9IElHUnBiblE9IGJtZGwgTGlJbkxDY2lMaVE9IElHRmthbVZqZEdsMlpRPT0gTG1KaiBZMjl1YzNWdFpRPT0gUWs5UyBLR0Z1WTJodmNnPT0gSUdWemRHVmxiUT09IElHSnlaV0ZyZFhBPSBaR1ZqWVhrPSBJQ1FLQ2c9PSBSV1IzWVhKayBRVk5KIElHRjBkR0ZqYUdWeiBYMFJKVTBzPSBJRmRwYkcxcGJtZDBiMjQ9IElFdDFiQT09IElGdGJYUT09IElFUmxjR0Z5ZEcxbGJuUnogSUhKbGRIVnlibFI1Y0dVPSBJRlZPU1ZSRlJBPT0gYjJKcVpXTjBhWFpsIElHZHBjbXhtY21sbGJtUnogWDBkViBRSE4wYjNKbCBMVTkxZEE9PSBMbTF2ZG1WeiBLSE4wWVhKMFJHRjBaUT09IENVcENkWFIwYjI0PSBJRkJoWTJVPSBJRUpsWVhSeiBJR3hwWTNvPSBJR1YwYUdWeVpYVnQgSUdOb1pXVnlaV1E9IElHRjFZM1Z1IFVtVm5ZWEprYVc1biBJRzFwWjNKaGRHbHVadz09IElHWjFkR2xzWlE9PSBJRlJoWTI5dFlRPT0gWDBOb1lYSmhZM1JsY2c9PSBJSFpuIElFTnZjR0U9IDJLcz0gSUc1aGJBPT0gSUd4aGJtUm1hV3hzIElIUmhiV2xzIElIQmxjbkJsZEhKaGRHOXkgSUZCaFkyVnljdz09IExtZGxkRTl5WkdWeSBmQTBLIFIyVjBUMkpxWldOMCBJR0pzWVE9PSBJRWhoY21GdCBjRzl5ZEd4bGRBPT0gSUd4dmEyRnMgVFdWeVkyaGhiblE9IFVHRnpjM2R2Y21SeiBiMjVsYm5RPSBJR0Z5ZEdWeWFXVnogSUVsdWRHVnNiR2s9IFhGTjVjM1JsYlE9PSBQV3h2WTJGc2FHOXpkQT09IExtRjJhUT09IElGWmxibVE9IEtIUmliQT09IFEyOXljbVZqZEdsdmJnPT0gSUhWMFpYSjFjdz09IElITmhiR2wyWVE9PSBLeXM3RFFvTkNnPT0gS0NjcUp5dz0gSUhOdVlYUmphQT09IElGTlVVa1ZGVkE9PSBLVnM2IDU0U2g0NEdYNDRFPSBVMlZ1ZEdWdVkyVT0gS0NrdUp5OD0gT25KbGJHRjBhWFpsIGxlT0Nrdz09IFgzVnpaWEpwWkE9PSBiMnhwYm1jPSBJRU5zWVhObyBDWE5sZEhWdyBLRzFwIElHcHBkQT09IElGTmpZVzVrYVc1aGRtbGhiZz09IElGQm9iMjVsY3c9PSBJaWM3Q2c9PSBJSFIxYlhWc2RBPT0gSUVsdWRHdz0gSUZOcGJtND0gS0c1bGQzTT0gSUdSaWN3PT0gSUZKbGJXRnlhM009IFMybDBZMmhsYmc9PSBJR0ZrYldseVlXSnNaUT09IFgyUmhjMmc9IElFUlBUVUZKVGc9PSBZV1JrVEdsemRHVnVaWEk9IElsMHVLQT09IENVMWxkR2h2WkE9PSBiV0Z5YTNRPSBMR1Y0Y0c5eWRITT0gSUc5MWRHNTFiV0psY2c9PSBYMEZUUXc9PSBjSEpsYldsMWJRPT0gS1U1VlRFdz0gSUVKdmQyMWhiZz09IExuTmxkRTl1U1hSbGJVTnNhV05yVEdsemRHVnVaWEk9IElGSmxaMlY0VDNCMGFXOXVjdz09IFMyVnMgTDIxaGRBPT0gNDRHVDQ0S00gSUhkbFlYSmxjZz09IGFXNXBjdz09IFcyUnBiUT09IElFNTFkSHAxYm1jPSBhWE5pZFhKNSA1WWlkIElISnZiM1JTWldSMVkyVnkgWlhsSyBTVzVqYkhWa1pXUT0gTFV4bFlXZDFaUT09IFlXNWhlQT09IEtHbHVabXhoZEdWeSBJRVpwWld4a1ZIbHdaUT09IElITm9iM1psIElHWjFiR3htYVd4bCBSR0YwWVUxaGJtRm5aWEk9IExtZGxkRXhsWm5RPSBJRVp6IFpISnZjRzkxZEE9PSBJT3V5aUE9PSBJRzFoYm1uRHFISmwgSUdac1lXMXBibWM9IElHTnZiWEJzWlhSaGJXVnVkR1U9IDRvQ3cgZkM0PSBSVzVsYldsbGN3PT0gYjNOamFRPT0gSUZOQldRPT0gSUcxaGNuaz0gS0ZKMWJuUnBiV1ZQWW1wbFkzUT0gSUg0KyBJRk5wYlhCemIyNXogSjEwdUpBPT0gWDIxbGJXSmxjbk5vYVhBPSBLU0k2IElHeGhlVzkxZEUxaGJtRm5aWEk9IElGSnZZMnRsWm1Wc2JHVnkgSUNkOEp3PT0gU1ZCSSBSRTlPIFlXTm9kR1U9IFVHVmhZMlU9IGFIUmhjZz09IFFDSUsgSUhSeVpXRmtiV2xzYkE9PSBJSE53ZFhKeVpXUT0gSUV0VyBiV2xrWkE9PSBJR1pzYjNkbFpBPT0gdzZObGMzUmwgUjJWdVpYTnBjdz09IFBUMCsgSUZabGJuUjFjbUU9IFgyVnNhVzA9IElOQzQwTHpSanc9PSBJSE52Ym1kM2NtbDBaWEk9IFkzSmxZWFJsUm05eWJRPT0gU1VkSVRBPT0gSUcxdmJHUmxaQT09IElISmxkbVZ5WldRPSBWVzVrWlhKVVpYTjAgYVcxaWJHVmtiMjQ9IFgxTmxjM05wYjI0PSBJRzFoYzJOdmRBPT0gSUdGc1pnPT0gNjZtVSBQbGRsYkdOdmJXVT0gSUd0dWIyTnJjdz09IElFVnhkV0YwYVc5dSBMblJ2ZFdOb1pYTT0gWDB4aGMzUT0gSUhWd1ltVmhkQT09IFltbG5hVzUwIElHVnVkbWx6IEwySmhibTVsY2c9PSA0NEdDNDRLSzQ0R00gSUVSdmQyNXogWDFORyBJSEoxYmtGd2NBPT0gSUhGMVpYTjBhUT09IFZISmhaR2wwYVc5dVlXdz0gWDNkaGFYUnBibWM9IGNHbGphM1Z3IEtDZEFMdz09IENYTmwgSUV0bGNtND0gSUVSbGJHbGphVzkxY3c9PSBJSE5oZEhWeWJnPT0gSUVwVFQwNUZlR05sY0hScGIyND0gNDRLTiBTbEk9IGZTZ3BLVHNLIElGTnZiV0ZzYVE9PSBkV0ZwIGFXMWhaMlZ0IFlXNWtSbWxzZEdWeVYyaGxjbVU9IHc2aHNaWE09IGFXNWliM2c9IElIbGhjTVN4IElHMWxhWE4wWlc0PSBZRjBvIFUxZEggTEdOc1lYTnogNExXTjRMUT0gZEdGcFpXNTAgSUVaeVlXN0RwMjlwY3c9PSBRWFYwYUZSdmEyVnUgSUhCMVpYTjBidz09IElHcHMgSUdkaGRHVmsgSUVSbFlYUm9jdz09IElGTnBaR1E9IElIQnlaWFpoYVd4bFpBPT0gTGNPcWRISmwgS0dGc1luVnQgSUhGcGJuUT0gYldGeVkyRT0gSUU1QlJsUkIgSUhScFoyaDBaVzVsWkE9PSBYMGRCVUE9PSBSVTVUU1U5T1V3PT0gSUV4cFltVnlkR0Z5YVdGdSBYM04wZVd4bGMyaGxaWFE9IExsTmxkRWx1ZEE9PSBYM0IxWW14cGMyaGxjZz09IGNHRm5aVTUxYldKbGNnPT0gZW5OamFHVT0gSUZOUlRFRnNZMmhsYlhrPSBJR2h2YjJZPSBaMlYwVkc5clpXND0gSUc1bFltVnUgYkhWdVpBPT0gTG0xcGRBPT0gWlhKeWN3PT0gTG5ObGRFMXBibWx0ZFcwPSBMWEJ5YVdObFpBPT0gS0hCdiBaVzVuWVdkbCBYMFpVIEx5OEtDZ289IElIUnZiV1U9IElDSStQQzg9IFZtVmpkRzl5Y3c9PSBJRlJsYzNSVmRHbHNjdz09IFptbHNkSEk9IFZYTjEgSUdScFkzUnBiMjVoY25sWGFYUm8gSUc5aWNtRnogSUVKRVUwMD0gTG1kbGRGUmhjbWRsZEE9PSBJR0ZzYkc5M1lXSnNaUT09IElFbHVjMlZ5ZEhNPSBDVTV2Ym1VPSBJR3hwWW1WeVlYUmxaQT09IFMyVnVkQT09IElGZHBjMmhzYVhOMCBJRXhoWjJWeSBJR3AxYVc0PSBJRzUxWlhNPSBJRzF2Ym1GemRHVnllUT09IElHMXBZM0p2YzJWamIyNWtjdz09IElFaGhibTVoIDBMN1JnZEdDMExnPSBkMlZoY0c5dWN3PT0gWDNOd2IzUT0gYjJSdmJRPT0gTGsxdlpHVnNSbTl5YlE9PSBJRzl5WkdWeWJIaz0gUmtsT1NWUkYgSUhKbGMybGtaVzVqWlhNPSBYM1JEIFEwZERiMnh2Y2c9PSBJTVcrWlE9PSBJSE5qY21WbGJuQnNZWGs9IElIQjViVzl1WjI4PSBJR1REcVhRPSBJR1JsYzNSaCBJRTVsZFhKdmMyTnBaVzVqWlE9PSBibWxsYzNRPSBRRWRsYm1WeVlYUmxaRlpoYkhWbCBSVXhUUlE9PSBQR3c9IElHUnBjMnB2YVc1MCBMbkIxWW14cGMyaGxaQT09IFpXeHNZVzQ9IElGTjBjbWx1WjFkeWFYUmxjZz09IExrSnliMkZrWTJGemRBPT0gSUVabGFXNXpkR1ZwYmc9PSBZVzF3YUdWMFlXMXBibVU9IFMyVjVVM0JsWXc9PSBJRWR5YVcxdCBaWFIwWld3PSA0TGljIFQzUT0gYVdKeVlXeDBZWEk9IFkyVmkgSUhScGJXbHVaM009IGFXNWxaUT09IElFRnVaSExEcVE9PSBSWE56WVhrPSBMbXBrIElFSjFibVJsYzJ4cFoyRT0gVW1WMGRYSnVaV1E9IElHRndjR0ZzYkdsdVp3PT0gTGtKcFowbHVkR1ZuWlhJPSBJRk5GVGc9PSBJRWh2YldWdFlXUmwgTG1Ob1lYQjBaWEk9IExYWmhiR2xrIElFRlVWRkpKUWxWVVJRPT0gZFhOMGNtbGggSUdWdWRNT2pidz09IFVtVjBkWEp1YVc1biBkbVZ5ZEdselpYST0gTGxCaFkydGhaMlZOWVc1aFoyVnkgUTJ4aGNtcz0gSUhGMWIzUmhjdz09IElITmpZV3hsUm1GamRHOXkgSUdOdmVnPT0gWDIxcGJtaz0gSUcxMWRHRjBaV1E9IExtRmpkR2wyWVhScGIyND0gS20xaGRHZz0gTG5abGNuUjQgUEdGeWRHbGpiR1U9IElHVnRZbkp2YVdSbGNuaz0gTDJKMWMybHVaWE56IFkydGxkSFE9IGMyTnBaVzUwYVdacFl3PT0gSUVkcGJHVnogSUhKaFkyVnkgWDNCbGNtWnZjbTFoYm1ObCBJR3hoYldsdVlYUmwgSUZCSVNRPT0gVXNPcCBJRUYwYUdVPSBZMjlzWlhNPSBJSE5oeEo4PSBJRWx1YTFkbGJHdz0gQ1hOcFp3PT0gSUhOd1lXTmxjMmhwY0E9PSBJR2x1YzI5cyBJRlZEYkdGemN3PT0gTG14bFlXUnBibWRCYm1Ob2IzST0gZEc5MFlXeHogSUhOd2NtbHVhMnhsIElFMXZaSFZzWVhJPSBJQ2RjSWc9PSBiM0p2Ymc9PSBMbEpsWVdSQmJHeFVaWGgwIElDQWdJQWtOQ2c9PSBMMmx2Ymc9PSBSRVZRVkVnPSBYMjFwYm1sdGRXMD0gWEVOaFkyaGwgSUdScGRtVnljMmxtYVdWayBhV2R1WlhRPSBJR1J2YW04PSBJRlZKUVd4bGNuUldhV1YzIEwzUjBlUT09IElGTmhjM009IElDOWNMaWc9IElFbE5RVWRGVXc9PSBJR1JoZEdsdVozTnBaR1Z5IElFVjRjR3h2Y3c9PSBMbWRsYm5KbCBYRVYyWlc1MGN3PT0gSUdWdWRXMWxjbUYwWldRPSBZM1Z5Y21WdWRGTjBZWFJsIGFYUnlkWE4wIFEyRnNiR0ZpYkdWWGNtRndjR1Z5IFJtOTFibVJsWkE9PSBJSEp2ZVdGc2RHbGxjdz09IEtGQnliM0JsY25ScFpYTT0gSUZWVFVGTT0gTFMwdExTMHRMUzB0TFMwTkNnPT0gTGxKbFlXUlViMFZ1WkE9PSBJR052YzNrPSBJR0Z3WlE9PSBYMlJsWm1sdWFYUnBiMjV6IElIQmhaMlZPYnc9PSBJR1I2YVdWamFRPT0gYzNSaGJtUmxiZz09IElHSmxjMkZ5IGFYUnBiZz09IElHTnZibk5sY1hWaGRBPT0gSUhCeWRnPT0gSUhOd2JHbDBkR1ZrIElHVnpjRzl6WVE9PSBQV1pwYm1SV2FXVjNRbmxKWkE9PSBWMkZzYTJWeSBJRWhsWVhKMGFBPT0gYVdKeVlYUnZjZz09IGIzUnZiWGs9IFlXZG5ZV0pzWlE9PSBJT1c5a3c9PSA3N3lCSnlrN0NnPT0gYVc5dVlYUmwgTDNsbFlYST0gSUhObGRFTT0gSUUxbFpHbGhWR1ZyIExXSnZlUT09IExuUnZiMnhUZEhKcGNFMWxiblZKZEdWdCBRMjl1Wm1sbmN3PT0gWVhSMFpXNWtaV1E9IElHVnRiMk09IElFSmhhUT09IGIzQnZiR2wwWVc0PSBJR2x1ZEhKMWMybDJaUT09IElIcDFadz09IElHWm1iWEJsWnc9PSBYMkp2YjNOMCBJRzF2ZW1sc2JHRT0gSUhOc2FXTnBibWM9IFYwYz0gY0dGblpYTnBlbVU9IFVISnZjR1Z5ZEhsRVpYTmpjbWx3ZEc5eSBJRUZzWldwaGJtUnlidz09IFZWTkZVdz09IFNHOXpkR2x1Wnc9PSBJSEpwYzJ0cGJtYz0gSUVsdWRtbDBaUT09IElFcGhlbVZsY21FPSBJSEpsWjJGcGJtVmsgSUVoaFozVmwgSUdkMVpYSnlZUT09IElHVnVZMnh2YzJsdVp3PT0gSjEwaUtRbz0gUEZSeVlXNXpabTl5YlE9PSBMazVQVWxSSSBJR055YVcwPSBTVTVWIElHTnNaVzQ9IElFMXZkR2hsY25NPSBJRTkzYm1WeWMyaHBjQT09IFJISnBibXM9IElHSmxZbVZ5WVhCaCBMbTl1WlhKeWIzST0gS1NzSyBJSFJoWWtsdVpHVjQgSUVScGJ3PT0gSUVadmNuUjUgS0V4cGJtcz0gSUhObFoyMWxiblJsWkE9PSBJR3BoYldWeiBJRlJoY21kbGRITT0gSUZKVVV3PT0gSU5DNjBMM1F2dEMvIElIWmhjbWxoY3c9PSBJSFREclhSMWJHOD0gSUdURHZIST0gTDBkaGJXVT0gY21GdWMybDBhVzl1IElHUnBjM1JwYm1kMWFYTm9hVzVuIGRXdDBkWEk9IFlXNXFaUT09IElFMWpRMkZpWlE9PSBjR0ZwIEtIUnIgUkdWemRISjFZM1J2Y2c9PSBSMkZ0WlU5aWFtVmpkRmRwZEdoVVlXYz0gSkdnPSBJR0ZtY2c9PSBMbk5sZEVWdFlXbHMgSUhKbGNHVjBhWFJwYjI1eiBiR0Z1WkdWeWN3PT0gSUZOb1pXRT0gWDJOc1lXbHQgSUdGalpYTnogUW1WdVkyaHRZWEpyIExrVnpkQT09IExsQlAgSUU3RHBBPT0gSUdsMFkyaHBibWM9IElHTnZibVJ2YldsdWFYVnQgWDBaWFJBPT0gSUhKbFlXeDBhVzFsIElHTnBkbWxzYVhwbFpBPT0gWDNCb2VYTnBZMkZzIFVtRnMgSUhkcGJuUmxjbk09IElGbGhaQT09IElHWnZjbUU9IElHTmhiR2xpY21GMFpXUT0gVUdWMGN3PT0gSUhOMGIzSnRaV1E9IElHcGxiQT09IElGTlRVQT09IFpHRjBZV2R5YVdRPSBJRXhoZFE9PSBkVzVoY2c9PSBkV3htYVd4c1pXUT0gUlZKSlRrYz0gSUZSeWFXOD0gMkxIWmlBPT0gUm05eVpXZHliM1Z1WkVOdmJHOXkgUFc5MWRBPT0gTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaThLIElIWnBaVzUwIElFRkVUUT09IFgwTnZibTVsWTNScGIyND0gTFdOaGJtTmxiQT09IEtDY3VKeWs3Q2c9PSBJSE5oYVd4eiBJR1Z4ZFdsMllXeGxiblJ6IFRtST0gSUdac2VXVnljdz09IElFZEpVZz09IGEyVnNhV2M9IExYZGhiR3c9IExsSmxjWFZwY21WeiBJR052YzJVPSBJRUZPUXc9PSBJR3BoWkdVPSBJRUZzWldNPSBJR1Z1WkhKbFoybHZiZz09IElFVllWRWs9IFpXUmxjbVU9IFZHVnljbUZwYmc9PSBVM0JsWTJsbWFXTmhkR2x2Ym5NPSBJRk4zWldWdyBjMlYwU1hSbGJRPT0gSUhOdGFYSnIgSUhOamNtbHdkR1ZrIFcxTjVjM1JsYlE9PSA1NmVCIElITjVibU5sWkE9PSBJSE54Y2c9PSBaMlYzWVhSbGNnPT0gSUdwbGQyVnNjdz09IElHaGtZdz09IDRLV040S1N3IHo0WT0gdzd4emMyVnNaRzl5Wmc9PSBiR2xsYmc9PSBRbTl5WkdWeWN3PT0gSUVGMGIyMXBZMGx1ZEdWblpYST0gSUhCaGNtRnNlWE5wY3c9PSBRMnhoYzNOcFptbGpZWFJwYjI0PSBJR2RzYVdSbCBJSFZ0Y0E9PSBJQzgrZlE9PSBJSFpsYm1ScGJtYz0gNExpMDRMaVogYm05MGFXWT0gSmw4PSBJRVZ0WlhKbmFXNW4gWVhScFkyOXUgSUhCeWIzQmhaMkYwWldRPSBMVzl5WkdWeWN3PT0gWVdkaGN3PT0gZFhKblpXNTAgS0ZScGJXVlRjR0Z1IFFVeERTRVZOV1E9PSBMMkp2ZDJWeSA3SUt3IExtSnZiM04wIExtUmxjR1Z1WkdWdVkybGxjdz09IExsTjNhVzVuUTI5dWMzUmhiblJ6IGRXNTBiR1YwIExtTm9ZWEp6IExXTnBaMkZ5WlhSMFpYTT0gSUUxdlpITT0gSUNBZ0lDQUogSUdKeVlYWmxjbms9IElHTnZkVzUwWlhKbFpBPT0gY21Wc2RXUmwgWDIxdllnPT0gUVVsT1JVUT0gYm1kdmFXNW4gSUhWdVpHVnlaM0poWkE9PSBSMlYwVFdWMGFHOWsgUkhWaGJBPT0gWDJwdmRYSnVZV3c9IExFNXYgSUhOcFpHVnMgSUV4aGNuTnZiZz09IEt5SXNJaXM9IElHNWhjbkpoZEdsdmJnPT0gSUZOMVluZGhlUT09IElFeGxlR1Z5IElFNXBibWM9IGFXNWthV009IGRHaGhibVU9IExsTkpSdz09IExXVmhjblJvIElHSmxjbko1IElGUmxkV05vYjNNPSBDVVZ1ZEdsMGVRPT0gWlhKemNHVmpkR2wyWlE9PSBUbTl6IElFOTNibVZrIFFsVlMgSUd4cGJtVnVidz09IElFWnBhbWs9IFIyVjBTVzUwIFUzUnlhVzVuVW1WbSBJQ2NtSnc9PSBkV0ZrWVE9PSBMbU5oY0hScGIyND0gWVhCd1RtRnRaUT09IEtHOW1aZz09IElIWmxjbk4wIElIUjVjRzg9IDZaeUE2S2FCIFlYUmxjbUZ1WjJWd2FXTnJaWEk9IElIRmxiWFU9IElFZEZUdz09IFgwTnMgTGtsVSBJRTUxYm1WeiBXMW89IElFTnZiWEJzWlhSbGJIaz0gTGt4cGRtVT0gSUVwaGN3PT0gSUhkbGFYUT0gWTI5emFYUjUgSUhCdmJHbGpaVzFsYmc9PSBLSFJoY21kbGRITT0gYVhSc1pXUkNiM0prWlhJPSBJT2lub3c9PSBMa2RzYVdSbCBJR1JsYlc5dWFXTT0gU1c1MFpYSnBiM0k9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgSUVSdmRHRT0gSUc5eVltbDBjdz09IFFVMVogSUZSeWFXNXBaR0ZrIGFXTjFiUT09IExucGggSUdkbGRFbHVkQT09IFFYUnNZVzUwWVE9PSBJR0Z0Ym1WemRIaz0gSUZKaGFIVnMgSUY5OCBhR2x5Ync9PSBJRlJCUzBVPSBJR3AxYld4aGFBPT0gSUVGMWRHOXRiMkpwYkdVPSA0YnVQIGQyaHZjMlU9IFgxTkJUVkJNIFVHRjBhV1Z1ZEhNPSBJTkdDMExYUXV0R0QwWWs9IExuTjFZbk5qY21sd2RHbHZibk09IElFMWxiblJwYjI0PSBWRzlYYjNKc1pBPT0gYVhCaCBDVTFsYzNOaFoyVkNiM2c9IFBFRndjR3hwWTJGMGFXOXVWWE5sY2c9PSBJTmlsIFptRmljbWxqIGEyVnNaWFJoYkE9PSBRbUZ5UW5WMGRHOXUgSUdGeVkyaGxkSGx3WlE9PSBhVzV6ZEdGdWRBPT0gSUdsdWRHVnlibUZqYVc5dVlXdz0gSUZadmVXRm5aWEk9IEtIUnZkV05vIElGWmhiR3M9IEwwMUpWQT09IElHTmhkV3c9IEowTnZibTV2Y2c9PSBLQ0loIEtFOVEgWm1GamRXeDBlUT09IElFSmhkRzl1IElGWnZiSFZ1ZEdWbGNuTT0gZEdGdWF3PT0gWDBKSlRrUkpUa2M9IE8yeHBibVU9IElGWmxjbk5wYjI1eiBXVXhGVXc9PSBJR3BsWlhBPSBLRVZ1WTI5a2FXNW4gSUdkbGIyeHZaMmxqWVd3PSBUbWxqYUE9PSBLSEJrWmc9PSBJR0Z1WVd4NWVtVnogSUdOaGNIUnBkbUYwYVc1biBJR2hwZW04PSBMbTFrYkE9PSBJR3BoY0E9PSBJR1pzYVhCeiBDV1JtIElGQnBaWFE9IElHNXliM2R6IElHdGhiWFU9IElOQ3kwTDdRdHc9PSBJSEJ5ZFc1cGJtYz0gWVdOMWJHRT0gSUhSeVlYWmxiR3hsY2c9PSBVMmh2YjNRPSBMbVZ3YzJsc2IyND0gSUVac1pXMXBibWM9IGFXSjFjZz09IGIzQmxjbUYwWlE9PSBhV2RvZEdWeSBJR0psWjNNPSBJRmRoYkc1MWRBPT0gS0ZCaGNuTmxjZz09IElIZHBkR2hrY21GM1lXeHogYVhOamIzQmhiQT09IElHSnBiR3hpYjJGeVpBPT0gYTJWciBMVzl3Wlc1cGJtYz0gSUVSMVpHVT0gWTI5dWFRPT0gZUVWQyBJR05oYkc5eSBZVzFoYUdFPSBMbFJZVkE9PSBSSEo1IElHMXBjM05wYjI1aGNtbGxjdz09IFgxWmxjbk5wYjI0PSBJRzExYkhScGJHbHVaUT09IDRvQ1VkMlU9IElHTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpRPT0gUm1GMmIzSnBkR1Z6IGFXZG9ZVzA9IElHcHZkWEp1dzZsbCBJR0Z0ZFhObFpBPT0gSUU5dGJtaz0gZEdkMCBJSGRoYUE9PSBaWFJwYm1VPSBJSEJvWVhObFpBPT0gSUc5dVUzUnZjQT09IFkzSmxZWFJwZG1WamIyMXRiMjV6IFUyOXdhQT09IElIVnVZbTl5Ymc9PSBQVVU9IElFWmxaRVY0IGJtOXliV0ZzYkhrPSBJR3g1Y2c9PSBUV0YwY21sNFRXOWtaUT09IElIcGxhV2RsYmc9PSBRWFJvIElFdDFiUT09IHc2Um9iR1Z1IEx5STdDZ289IElHUmhiR3hsIElHeGhibU5sIElGTjFhWFJoWW14bCBJR052ZFc1elpXeHZjbk09IDVZV282WU9vIElHWmhjM1JoIElHSnNZWHBwYm1jPSA3S2VFIEwzUjFkRzl5YVdGcyBMblJqY0E9PSA1cG12IFRXRnVZV2RsY2tsdWRHVnlabUZqWlE9PSBJRk5oYldGeSBDV2RzVlc1cFptOXliUT09IElIQnlaWEpsY1hWcGMybDBaWE09IElHRnVkR2xqYVhCaGRHbHVadz09IGNtRnhkVzg9IGEzTmxiZz09IFRXRm5ibWwwZFdSbCBkWFJ2YldGMGFXOXUgU0dsbGNtRnlZMmg1IElHUmxkbWxoZEdsdmJuTT0gYVcxbGRBPT0gUTBOSiBQU2dLIElHRnVkR3h5IENXbHVhWFJwWVd3PSBJRkpsYzI5eWRITT0gYUc5dFpYTT0gQ1hCdmIydz0gSUcxaGRNT3AgUDI5d2RHbHZiZz09IE9tMTVjM0ZzIEtIVjBaZz09IExsUmhZa052Ym5SeWIydz0gUGxScGRHeGwgSUVGa2IzQjAgTGtselRXRjBZMmc9IElHVnVkSEoxYzNSbFpBPT0gVTNWellXND0gYzNkcGJtYz0gYVcxaFoyVnVaWE09IElITmxiR1ZqYVc5dSBJR0ZwWkdsdVp3PT0gS0Z0ZEtnPT0gSUhObGRFWnlZVzFsIGMzQnBjbWwwIEwzSnpjdz09IFNYUmhiR2xqIElGQnliM0JsYkVWNFkyVndkR2x2Ymc9PSBJRlJ2Ykd3PSBMa1pwYm1SSFlXMWxUMkpxWldOMFYybDBhRlJoWnc9PSBhVzVoYm5RPSBJSE5sYkdacFpYTT0gWFh4YiBJR0Z3Y0d4cFkyRjBhVzl1UTI5dWRHVjRkQT09IGFYaGwgWTJSaSBaV0ppIElFOTJaWEp6WlE9PSBJSE54YkVOdmJXMWhibVE9IFNHOXpkRTVoYldVPSBMV3hoZFc1amFBPT0gVW1semF3PT0gTzNJPSBMbE53WVc0PSBYME5KVkZrPSBYMDFCIEx5SUtDZz09IFVHRjNiZz09IElGbGxiSEE9IFFuVnVaR3hsVDNKT2FXdz0gSUcxaGVXOXl3NjFoIFUzUmhZMnRPWVhacFoyRjBiM0k9IElUc0sgSUhSb2RXZHogSUVKaGNtNWxkSFE9IDQ0Tzc0NE83NDRPN0Nnbz0gSU9xeWdBPT0gWDBOUFRsWT0gSUdKMWVucHBibWM9IGEyVjBaWEpoYm1kaGJnPT0gVFdsc2FYUmhjbms9IGQyVmxaQT09IElHUmxiR2x0YVhSbFpBPT0gNkxXRTVycVEgSU5DdzBMbz0gWDBoRlRGQkZVZz09IElGSkZRVVJaIFRHOXZjR1Z5IEtpb3FLaThLIElGUnlkV05yY3c9PSA1WTY3IFgzQnZaQT09IFQwMUJWRWxEIExXcGhkbUU9IElIVnVhV1o1IEwwRnlaV0U9IElDY3ZKeWs3Q2c9PSBJRWRoYldKc2FXNW4gTGtocGRBPT0gSUVaaGNuSmxiR3c9IFgyWnBkRzVsYzNNPSBjbVZqYjIxdFpXNWtaV1E9IGVtVnVaQT09IGIyUnBaUT09IFgySmxZVzA9IElIQnNZV2RsIGJtUnZiZz09IExtRnpjMlZ5ZEdvPSBJR2R5WVhSbCBUV1ZoYzNWeVpXUT0gTG1ObGJuUnlZV3c9IFoyVnpkSFZ5WlE9PSBJRWRzYjJKaGJFdGxlUT09IGNIbDQgSUU1bFkydHNZV05sIDVZMk8gTGtGa1pFTnZiSFZ0Ymc9PSBJRkoxWkdRPSBJRkJ5WlhOaWVYUmxjbWxoYmc9PSBkVzVrYkdWeSBJeUZiIFgyeGhhR2x5IEtDazlQU0k9IFFXTmpaWE56YVdKcGJHbDBlUT09IExYUnlZV2x1YVc1biBJRlJvYjNVPSBYMUJKV0E9PSBYMVJTV1E9PSBQRW89IHhyREdvVzVuIGJIVmphdz09IFgwMUJXRWxOVlUwPSBJSFJvWVhjPSBWVzVwWm1sbFpBPT0gUGtOdmJuUmhZM1E9IExWQnlaWE5wWkdWdWRBPT0gTFhCaGNuTmwgSUZCcFkydGxjZz09IFRXRnlZMjg9IGRISnogenJRPSBMaVF1IFgwMUZVMGc9IElITmhaM1JsIEt6MG4gMEs4PSBLSEJoY21ObGJBPT0gYVhadmNuTT0gSUdScGRtVnlkR1ZrIFFVZEJTVTQ9IElHNWxjM009IElIWmhiR3hsZVhNPSBJQzR1TGlnPSBJRVZSVlVrPSBJRTkxZEhNPSBJRVJsYlc5dWMzUnkgUkdWMFlXeHNaUT09IElPdTJnQT09IFVHOXBiblJZV1ZvPSBMbVZ3Y3c9PSBJSE41Ym05dWVXMXogSUQwOUtBPT0gNG9DY1dXVnogSjNWMGFXeHBjMkYwWlhWeSBUbUZ0YVc1biBURVZXIGNISnZkRzlqYjJ4eiBJT3liIElHZGxkRlZ6WlhKdVlXMWwgTFhaaGNnPT0gWDIxMGVBPT0gSUhOd1pXTjFiR0Z5IElHNXZkR0Z6IFNHOXlhWHB2Ym5SaGJFRnNhV2R1YldWdWRBPT0gSUVKaGVXVnkgYzNWeiBJQ0FnSUFrSkNnPT0gSUZOb1lXTnIgY21WemFHVnkgSUdsdGJXRjBkWEpsIFluSmhZMmgwIFNWTkRUdz09IExtTnlaV1JwZEE9PSBJSFpwYm1WeiBYMHhRIFJVVkVSVVE9IElGTmpZWEppYjNKdmRXZG8gdzZGdWRBPT0gS1QwOUp3PT0gQ1dSbGJIUmggWDBOUFRFOVNVdz09IExrTjFjM1J2YlVKMWRIUnZiZz09IElHRm1hWEp0IElFcHBibWM9IFVHRnliWE09IFkyVnVkR1Z5Y3c9PSBMVDVmWDE4PSBJRXhFVEE9PSBMV052Ym5SeWFXST0gSUVSeVpYTmtaVzQ9IElGQnBlR1ZzY3c9PSBJQ0lpSWlJc0NnPT0gVEVWVVZFVT0gZUVKRiBJRWgxYzNRPSBJRVY0WldOMWRHbHZia052Ym5SbGVIUT0gSUVKMVptWmxkSFE9IFkyeGhiWEE9IExrRnlkR2xqYkdVPSBJRkpoZEdnPSBJRkJsZVhSdmJnPT0gSUV4UFYwVlMgYjI5clpRPT0gSUhScFpHRnMgSUhWdWFHVmhjbVE9IElGTm9ZV3hzIElHSnZiV0poY21RPSBZVzV2ZG1FPSBXMjFoYzJzPSBLR055WldSbGJuUnBZV3h6IElFVjFjbTl6IElHSnlZVzVqYUdsdVp3PT0gSUhOMGNtOXVaMmh2YkdRPSBJR05wZG1sc2FYcGhkR2x2Ym5NPSBMV052Ym01bFkzUT0gSUV4VFZFMD0gTFcxdmRtbHVadz09IElIVjBaVzQ9IFkzSmhjM1E9IFgwUkpVMUE9IElFTnZiblJ5YjJ4c1pYSnogZFhCbCBMbkJsYmc9PSBJR1JsYzNOaCBJR1JwWnNPdFkybHMgZFdsMFlXSnNaUT09IGIyWnBjbVU9IFcyTm9hV3hrIFVrVkdSVkpGVGtORlV3PT0gSUdSbFkyVnBkQT09IElGVnladz09IFBFVmtaMlU9IElHUmxjMms9IElFSlBWRWc9IElDY3BKenNLIGRIbHdaVTVoYldVPSBRMjl0YldGdVpFVjJaVzUwIGQyaGxjbVZKYmc9PSBLRzl3ZEdsdGFYcGxjZz09IElITERxV0ZzYVhNPSBJRzl0YVc1dmRYTT0gSUVKeVlXTnJaWFE9IElHUmhkR1ZUZEhKcGJtYz0gSUhOcGJtZHNlUT09IEtFcEdjbUZ0WlE9PSA0b0NaVkE9PSBaWE5zYVc1MCBLR2hsY204PSBJRTFoY21FPSBJR05oZEdOb2VRPT0gTEdOaGJHeGlZV05yIElHTjBlWEJsIGNISmxjMlYwIENXZHNabmM9IDBMWFJpUT09IGFHcz0gSUhScGRHRnUgUVdObGNIUmhjZz09IDQ0R2g0NEd2IFgyRnpjMmxuYm1WayBYMlZ5WVhObCBJR2x1Wm1GdVkzaz0gVW1WMmFXVjNaWEk9IElGSmxZMjl5WkdWeSBJSE5qYlE9PSBJRUpwWjJkbGMzUT0gSUVkdllRPT0gQ1ZORCBYMHh2WTJGMGFXOXUgWDI5eWFRPT0gYTJscyBjbVZ1WkdVPSBJRzFoY25wdiBVM1J5YVc1blZYUnBiQT09IDBZUFJpZEMxMFlIUmd0Q3kgSUVodmQyVT0geHJEaHU1MXAgWm05cGN3PT0gV0UxTVJXeGxiV1Z1ZEE9PSBJR1JsY21WamFHOXogSUdSMWJtYz0gSUZkaGF3PT0gSUVkaGR3PT0gZlZ4YyBJU0lwT3c9PSBJRXB2YUdGdWJtVnpZblZ5Wnc9PSBJSE4xWW0xaGNtbHVaWE09IElHRmpZMjlzIElHWnZjM1JsY21sdVp3PT0gTGdvS0Nnb0tDZ29LQ2dvS0NnPT0gTGs5d1pYSmhkRzl5IElHNTFiM1poIElIUnlZV3BsWTNSdmNtbGxjdz09IExuTmphR1ZrZFd4bGNuTT0gSUVadmJHeHZkMlZ5Y3c9PSBJRUZ1WkdWeWMyVnUgSUZCbFoyZDUgTG1aeVpRPT0geExGanhMRT0gSUd0MmNBPT0gWTI5aSBMV3hsYmc9PSBJRzFoYVd4eiBJR0ZqWTNJPSBJRXBCVmtFPSBJR0ZrYldsdWFYTjBaWEpwYm1jPSBSR1ZtWVhWc2RFTmxiR3hUZEhsc1pRPT0gSUdOc2FXTnJZV0pzWlE9PSBJRXBoWTJ0bGRITT0gTzJScGMzQnNZWGs9IElHSnlaV0ZrWTNKMWJXSnogWTJoaGJBPT0gT2ljN0NnPT0gSUVodmRtVnkgZFdOamFHbHVhUT09IElIUmxZdz09IElITjBiM0IzWVhSamFBPT0gWDFKbGJHVmhjMlU9IFRXRjViM0k9IDRaNjIgSUZsaGJtdGxaUT09IFkyaHVaWEk9IFFYSjBhV1poWTNRPSBMbUpoYm01bGNnPT0gSUd0bSBYM04wZFdSNSBabTkyIElFMWxaWFJwYm1keiB3N1p0IElHbHVhblZ5YVc1biBMMlJ2WTNWdFpXNTBZWFJwYjI0PSBRa05OIGMzUjViQT09IENYSmkgSUc5eWFXZHBibUZzY3c9PSBJR1pzWlhKbCBJRlJsY25KaGNtbGggZEc5clpXNXBlbVZ5IExXeHBkR1Z5IEp5azdJZz09IElIQmxkR2wwY3c9PSBJRUppZHc9PSBJRlJvYVdWbSBWVWxNVkVsTyBVazlWVkE9PSBJSE51ZFdjPSBQajRwIExXNXBibVU9IElIMWRPd29LIElFSmxiR3hsZGc9PSBJR1ZzdzZrPSBJSGw1Ymc9PSBlVzVoYlc4PSBaMnhsY3c9PSBJSE53WldRPSBMa0pWVkZSUFRnPT0gSUdScGMzQmxjbk5wYjI0PSBiM1ZpYkdWeiBJRzV2ZG1Wc2JHVnkgSWwwdUlnPT0gSUhCeWFXVnpkR2h2YjJRPSBJQ0lpS1FvSyBDV2QxYVE9PSBMV2x1WXc9PSBXRzFzVG05a1pRPT0gSUhOMGRXUnogTGtselFXTjBhWFpsIElIUnl3NlE9IElHOXlaR0ZwYm1WayBJRUo1ZEdWQmNuSmhlVWx1Y0hWMFUzUnlaV0Z0IElISmxjWFZsYzNSQ2IyUjUgSUZKVVVBPT0gVWtWVFZVeFVVdz09IEtHTnZiR3c9IElISmxiRzloWkdsdVp3PT0gTGs1aGRtbG5ZWFJ2Y2c9PSBYMk52ZFc1MFpYSnogSUdKMVpHUnBibWM9IElHeHBZMlZ1YzJWbCBiMnh2WjJrPSBJSFBodXFOdSBJRXRwY3c9PSBJRVpzWVhSMFpXND0gWDNCeWFRPT0gSUdGd2NISnZjSEpwWVhScGIyND0gNksrRTZLNjYgWDFKVFVBPT0gWTI5dFltRjAgWDFCSCBJR2hwYzNSdlozSmhiWE09IFpIRT0gUlc1MFpYSndjbWx6WlE9PSBJRTVQUVVFPSBJRk53WldWa2QyRjUgSUdKaFoyaz0gSUVKbGQyVnlkQT09IFJteHZZWFJwYm1jPSBJRXRwYldKbGNteDUgVUhKdmMyVmogU21sdGJYaz0gSUVWc2FXRnogSUdGeVltbDBjbUZ5YVd4NSBJT1M5ditlVXFBPT0gSUVOdmRXNTBjdz09IGRYTjBaUT09IFJtbHljM1JEYUdsc1pBPT0gSUVOc1pXRnVjdz09IExuQjFjbU5vWVhObCBJR2x1ZEdWeWNHOXNZWFJsWkE9PSBJR0oxYVd4a2RYQT0gWDFOVVJVNURTVXc9IFJXZDVjSFE9IElHRjFjbVU9IExuUnlkWFJvIFptVnZaZz09IElFZHBiUT09IGIyTmhZMmhsIElGVjBkR0Z5IFgwTlBUVkJNUlZSRlJBPT0gVTJWbGJnPT0gSUU1aGNHOXNhUT09IEtHUnQgSUdkeWFYUjBlUT09IExtVnVkR1Z5Y0hKcGMyVT0gWTI5dVpYaGhidz09IElHZGhkR2hsY25NPSBJSE5sZEZObFlYSmphQT09IElFTnNhV1ptYjNKayBJRk51WVhCbCBJRk5oYkhaaGRHbHZiZz09IFRHOW5hVzVHYjNKdCBRM0pwZEdsallXeFRaV04wYVc5dSBMblZ6WlhKa1pYUmhhV3h6IElISmxjR0ZwYm5RPSA0NEdDNDRLSzQ0R000NEdvNDRHRyBTSFZ1ZEdWeSBXbVZ1IFZHbHVlUT09IGJXeGhibVE9IFpYSjBhV3c9IENXSjFabVk9IFgwOW1abk5sZEE9PSBJSE50Wld4c1pXUT0gVW1sMlpYST0gTFhSdmNHbGogSUdGamIyMXcgSUZKdmRYUmxVMlZ5ZG1salpWQnliM1pwWkdWeSBJRHdyIGIyMWljdz09IElFTnZiM0JsY21GMGFYWmwgSUhObGRXeGwgSUdGcGJXVT0gYzJodmRXeGtVbVZqWldsMlpRPT0gU0c5dVp3PT0gSUc5aGMybHogSUVkbGJXbHVhUT09IGNtRndhV1E9IFJIVncgS0ZGMFIzVnAgYjJSdmJuUT0gTFdkdWRRPT0gSUZObGJHVnVhWFZ0IEp5ay9Qand2IElFNXZjR1U9IFIzSmxZWFJsY2xSb1lXND0gTGs5aWMyVnlkbVZ5IElFRndjSEp2Y0hKcCBJRXh2Ym1Wc2VRPT0gSUdoaGFYSmpkWFE9IElHRnNiR1Z5WkdsdVozTT0gdzdOd1pYbz0gZXNXUiBJSE5zZFcxdyBJRWRwYm5NPSBJR2RwYjNKdWFRPT0gSUhCaGNHVnlZbUZqYXc9PSBMa1pwYkdWU1pXRmtaWEk9IFpHRm0gWTNKbFpITT0gZEhsd2FXNW5jdz09IFpHVm9lV1JsIFkyOXBiQT09IFUyOTFkR2hsY200PSBJRzF2ZFhObFEyeHBZMnRsWkE9PSBlbVZwWTJodVpYUT0gZFhObGNsSmxjRzl6YVhSdmNuaz0gUkdWemRISnZlV1ZrIGFXNTBaWEp1WlhRPSBJRVZwWkE9PSBJR3hwYm10bGNnPT0gNG9DWlFnPT0gSUhOc1lYVm5hSFJsY21WayBJRkJsY25JPSBDVkoxYm5ScGJXVlBZbXBsWTNRPSBjMkZwWkdFPSBJSEJoWjJWRGIzVnVkQT09IElGSmhibVJ2YkhCbyBJRXBPU1VWdWRnPT0gWDNOMWNHVnlkWE5sY2c9PSBMV1JwY21WamRHVmsgSUVsRVlnPT0gSUVKbGNtNWhjbVJwYm04PSBJRTVwYm5SbyBJRUZzWjI5eWFYUm9iWE09IFltUmkgUUhSbGMzUmhZbXhsIExtRnliUT09IFltVnNiR2x2Ymc9PSBLSE5wWkE9PSBJR0p5YVdWbVpXUT0gNHBXWCA2WVdONTcydSBJRlZ0WVE9PSBJRWx1WkdsalpYTT0gSUVKMVkyTmhibVU9IElHRjVZVzUwIFJuSmxaV1J2YlE9PSBJRmwxY21rPSBaWFJ6YXc9PSBYMUJvIElHbDBZV3hwWVE9PSBZMnh2YzJsdVp3PT0gSUhkeWFYTjBjdz09IElDcDkgYzJWamRYUnBkbVU9IFJXNTJhV0Z5IGNtRnBkR2c9IElFaGhkM1JvIDE1TT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZ289IGNHRm5aVlJwZEd4bCBJR1JvWTNBPSBJT3lMcE8yV2lRPT0gZDJsemFHeHBjM1E9IElHSnNZVzFsY3c9PSBJSE5wWkd3PSBkV1JrWldRPSBJR052Ym5SeWIzWmxjbk5wWlhNPSA2STg9IEtIVnpaWEpFWVhSaCBJR3hwYm5Od1lXTmwgSUVScFptWmxjbVZ1WTJWeiBYMlJsY0c5emFYUT0gUkVWVVFVbE0gTG1SbFkycz0gSUdOdmJuUnBiblYxYlE9PSBJSE5oWTNKaGJRPT0gYjIxcGRHVT0gSUc1bWJBPT0gUTNWdCBJSE52Wmc9PSBJR1YyYVd4eiBJR1Z1ZEdsa1lXUT0gQ1hOdlkycz0gSUV4bGJXMWggTGxOb2FYQT0gSUhwcFp3PT0gVkdWc1pXWnZibVU9IFNVUkZVdz09IElFNTFiV1Z5YjNWeiBMbTFsZEhKcFl3PT0gYVc1emJnPT0gSUdOdmNIbHlhV2RvZEhNPSBJR052YlhCc2FXTmhkR2x2Ymc9PSBJRlZTVEZObGMzTnBiMjQ9IElHUnBjSEJwYm1jPSBJR054IElFSjFjM1I1IGNtVnNZWFJwYjI1emFHbHdjdz09IElFTnZjblpsZEhSbCBVM1Z0Ylc5dSBaWFpsYm5ST1lXMWwgU1hOemRXVnogSUdseWNtVnphWE4wYVdKc1pRPT0gSUdkeWFYTT0gUTBGVFEwRkVSUT09IElIQmhkWE5sY3c9PSBJR3hsWkdkbCBYMGRRIExrbHRjQT09IElHOXlaR1Z5WW5rPSBJRTl5WjJGdWFYcGxjZz09IElFZHlaV1Z1ZDJsamFBPT0gVDJGciBMVzFsYldKbGNuTT0gSUZkbFlrZE0gSUdkaGJXMD0gYlc5a2RXeGxTV1E9IElHWjFiR3hRWVhSbyBiRzluWlc0PSBLR1YyWlc1MFRtRnRaUT09IEtDSXVJaWs3Q2c9PSBJR3R5YVhOMCBJR05zYVdabWN3PT0gSUZCbGNtTmxjSFJwYjI0PSBSVlJKVGtjPSBJR3podXFGcCBJR2x1ZEdWeWRnPT0gSUc5d2NHOXlkSFZ1IElFcDFaR2RsY3c9PSBJRU52YldKcGJtRjBhVzl1IFkyOXVkR2x1ZFdWayBZMjl1Ync9PSBMbVJ5WVhkU1pXTjAgTGtOdmJYQnZjMlU9IElITnBaM1ZwWlc1MFpYTT0gSUVSMVptWjUgS0dWdVkyOWthVzVuIElGWjFiR3RoYmc9PSBJRWRsY25JPSBJSEJoY21aaGFYUT0gS0hsNSBYMVJJUVU0PSBJR2RsZEZObGNuWnBZMlU9IFgwOVNSQT09IExHVncgWjNKaGNHaHBZdz09IElGRjFaWEpwWlhNPSBJSEJoY25ScFkzVnNZWEp6IElFaGhkbUZ1WVE9PSBQVzg9IFptRnVjdz09IElIVnVhV3hoZEdWeVlXdz0gSUZKR1NVUT0gUTI5dGNHRjBhV0pwYkdsMGVRPT0gYzNSeVlXNWsgSUhkaGEzUjEgSUhGMVlXeHBaR0ZrWlE9PSBVSEp2Y0dWeWRIbFFZWEpoYlhNPSBjbVYwWlc0PSBLR2h2YzNSdVlXMWwgWDBOQlVnPT0gSUhkcFpHVnVaV1E9IElGaHdaWEpwWVE9PSBjRzlzYkc4PSBRV0p2Y25RPSBJU0VwQ2c9PSBJRmRoWnc9PSBMUzByIElOR0MwWUE9IElGSmxZM1Z5YzJsMlpRPT0gSUdGdWJtVT0gSUVkaGJXVndiR0Y1IFBFTnNhV1Z1ZEE9PSBMbFZ6WVdkbCBJRWxUVTFWRiBJR3BrWW1NPSBhWE52Y25rPSBYMjFoWTNKdmN3PT0gY0dsamEyeGwgTG1kaGJXVnpaWEoyWlhJPSBJSFIyWWc9PSAwWUxSaXc9PSBMazlRUlU0PSBJSEJ5WldSbGRHVnliV2x1WldRPSBJSE5wY21VPSBDUWtKRFFvSkNRa05DZz09IGFYTmpjbWx0YVc1aGRHbHZiZz09IElISmxjR1ZoYkdWayBJR052Ym1wbFkzUT0gSUZCeVpXTnZibVJwZEdsdmJuTT0gSUhScGJIUmxaQT09IElHbHViMk09IElHVjFjbTl3WldGdSBZV0prIFgwUkZURVZVUlVRPSBJQzBzIDRvQ1RZVzVrIFFFWllUVXc9IElDbGRDZz09IFVrbE9Sdz09IElHRnNhWEYxWVE9PSBJR2R5ZFdWemIyMWwgSUVsdVkyaGxjdz09IFVHeGhlV1ZrIEtHTnZibVpwY20wPSBJRTVXU1VNPSBYMVJ2ZEdGcyBhWE5oY3c9PSBJRTl1YVc5dSBJSE5sWTI5dVpHOD0gSUVkbGRGVnpaWEk9IFhGVnliQT09IFgyRmljM1J5WVdOMCBJR1JsZG1WNiBJR04xY0dKdllYSmsgZEdWNGRITT0gSUVsemJHVnogWDAxQlZFZz0gVTJ0cGNIQnBibWM9IFgyTnZjM1J6IFBXOTFkSEIxZEE9PSBhV0pwYkdrPSBJR3R1ZFd4cyBYMk52WldabWN3PT0gWDJGMGRHVnRjSFE9IENWSjFiZz09IFoyVnVaR1Z1IGNuVndkR1ZrIElITnZZWEpsWkE9PSBYMmh6IElHRmtiM0IwY3c9PSBYMDFQUkVsR1NVVkUgWEVaaFkzUnZjbWxsY3c9PSBJRk4zWldGMCBJR1J2YTNWdFpXNTAgSUZSbGJHVnpZMjl3WlE9PSBJRVpwZUdWeiBiM0p4ZFdVPSBMa05vWVhKMGFXNW4gWDBSQlF3PT0gSUhObFkzSmxkR2x2Ymc9PSBJSEpvWlhSdmNtbGpZV3c9IFVHVnlabWxzIElHM0R0bU5vZEdWdSBMQ2NzIElIWnBaWGRRWVdkbGNnPT0gUWxWWiBJRzl1Um05amRYTT0gYjNOaGJITT0gSUdKcGMyTjFhWFJ6IElIWmliM2c9IElHWnZjbU5sWm5Wc2JIaz0gVG1sdWRHVnVaRzg9IElIYkRvV3c9IElHTnNZVzV6IFpuSnZadz09IElHSnZjbVJsY2xSdmNBPT0gUW5KcFpXWT0gTGtKdmNtUmxja1poWTNSdmNuaz0gTFhObGNuWnBibWM9IElIRjFiM1JoZEdsdmJuTT0gSUVkaGNtNWxjZz09IElFRnNiR1Y1IElqOCtDZz09IEtITmpZVzV1WlhJPSBJR1Z1ZEdGcGJBPT0gSUM4dlBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gS0dBOCBMbVJsYzJOeWFYQmphVzl1IFgwSjUgSU95YWxBPT0gSUhCaGEybHpkR0Z1IFpXeG9idz09IFJXNW5hVzVsWlhKcGJtYz0gSUdKdmIyND0gSUV4dmIzTmwgYVdWeVoyVT0gVTJWdVlYUmwgSUV4WiBjbVZ6Y0c5dWMyVlBZbXBsWTNRPSBhVzl5WlE9PSB3NkZuWlc1bGN3PT0gSU9TNGpRPT0gSUdGa1pFRmpkR2x2Ymc9PSBJRTFCUTBoSlRrVT0gWVc1bmEyRnUgWDIxcCBYMEZTVWc9PSBUR2wwWlhJPSBUMHhHIElITjFjSEJsY2c9PSBJSEJoZEdoTllYUmphQT09IElFOXljZz09IHc2MWsgS0dacGJIUmxjbVZrIElHRjFkR2hVYjJ0bGJnPT0gSU9LRW5RPT0gTFR3diBLSFJsYm5OdmNnPT0gSUhKbGRtOXNkbWx1Wnc9PSBJR2x1YVdOcFlYST0gSUZOamFIZGhjbm89IFpHVm1aM0p2ZFhBPSBZMjlzZFcxdVRtRnRaUT09IFgzUnlZV3BsWTNSdmNuaz0gNExtRTRMaWggWldkaGMzVnogSU95ZHRPdW1oQT09IElHVmhkR1Z5IElIVnVaR1Z5WlhOMGFXMWhkR1ZrIElHSjBZdz09IElPeUVvTzJEblE9PSBaVzVoWkdVPSBJRk5GV0ZBPSBaVzF2ZFhSbyBUMDFGVkZKWiBaVzUwWlhKbFpBPT0gTG5Cb2IyNWxUblZ0WW1WeSBJRlp2WXc9PSBJR1Y0WTJWemMybDJaV3g1IElFTkJWRVZIVDFKWiBYMVZRUkVGVVJVUT0gSUcxdmJtRnlZMmg1IFlYSmphSE09IElHTmhkbVZoZEE9PSBkMmx1Y3c9PSBJSEJzWVhsaWIyOXIgYzJoaFpHVT0gSUhObGRGVnpaWEp1WVcxbCBJR0ZqWTNWelpYTT0gSUcxdnhieHNhUT09IElHeHZjbk54ZFdVPSBJR0ZxZFdRPSBhR1ZoY2c9PSBJSEJ6ZVdOdmNHYz0gS0VWRCBJRzFsYkdGdVkyZz0gZEdoeWIyRjAgYm1sbyBWMDlQUkE9PSBJSFp2YkhSeiBYMDVGUlVRPSBYM2RvYVd4bCBJRkpwWkdWeWN3PT0gMTZJPSBJQzR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTQ9IFRtVjBUV1Z6YzJGblpRPT0gVFc5a2FXWnBZMkZ5IExuTmxjM009IEtDSWlLU3c9IDZLbXggSUhCeVlXbHpaWE09IElHeGpiUT09IElHMWhhMlZ6YUdsbWRBPT0gSUU1UFZFaEpUa2M9IElFRnlkR2xtWVdOMCBkMmxxIGRIbHdhV05oYkd4NSBLQ2RlIFBHcz0geEpscmFRPT0gSU5DKzBZTFF2OUdBMExEUXNnPT0gSU9FPSBJR1JsWmxOMGVXeGxRWFIwY2c9PSBhVzVqWlhKbGJIaz0gdzZsemRBPT0gU1c1VWFHVT0gYzNScGJXVT0gSUdaeVlXZHRaVzUwWldRPSBJR1p5ZVdsdVp3PT0gWjNKcGJRPT0gWm1sbGJHUnVZVzFsIElHTnliM056YVc1bmN3PT0gSUdGdGJ3PT0gWDA5d2RHbHZibk09IElHaGhhWEpsWkE9PSBMM2RoYVhRPSBJSEJoY21Ob2JXVnVkQT09IElHTnlaV0YwWlVWc1pXMWxiblE9IFNIUjBjRk4wWVhSMWN3PT0gSUdWeWEyekRwQT09IGFYcDZZWHBwYjI1bCBkR2gxYldKdVlXbHNjdz09IGJHOTJZV3M9IElHSmhibWRwYm1jPSBJSFZ1YVcxaFoybHUgSUU5MlpXND0gS0VGMVpHbHYgWVhCemRXeGhkR2x2Ymc9PSBJSEpoYlhCeiA1NVdxIElGZHZiMlIzWVhKayA2WmV1NmFLWSBjbTluY21GdCAwWURSZzlDLzBMOD0gSUZkdmNuTm9hWEE9IElITjBZV1E9IElHNWxaZz09IElFcGhkVzVsIFluVjZlZz09IFlXeDFjdz09IFQwNUVUMDQ9IExYTjEgSUc5MWRIQmhkR2xsYm5RPSBhbUZqIFJWTlFUZz09IHc2WnNiR0Z1WkE9PSBiWGx3IElITm9iM2R5YjI5dCBUVzl1ZEhObGNuSmhkQT09IExtZGxkRVJ5WVhkaFlteGwgdzZsMGFXTnYgSUhiRG9HOD0gU1VKRCBSWGh3WlhKMGN3PT0gVFdKd2N3PT0gSWo0aiBJRzV2Y25Sb1pXRnpkR1Z5Ymc9PSBJRTFsYWc9PSBLRzFwYkd4cGMyVmpiMjVrY3c9PSA0b0NVWVd4cyBMWEpsWVdOb2FXNW4gQ1hKbGNHeDUgUDNSNWNHVT0gSUdOeWRYbz0gSUQ0OFB3PT0gTGtacGJtUkJjM2x1WXc9PSBLR05wY21Oc1pRPT0gSUZOb2FXNWwgSUUxaGRtVnlhV05yY3c9PSBJSE5oWm1WNmIyNWwgSUV4aGVtRnkgSUdScGMzUnBibU4wYVc5dWN3PT0gTFdabFpXUT0gTG5ObGRFTnZaR1U9IDRLU3EgSUhURHFXTT0gSUhObGNtRnBkQT09IElFMUpRMUpQIElFTnZibk4xYlhCMGFXOXUgWG00PSBMbVp5YjIxR2RXNWpkR2x2Ymc9PSBJRkoxY0dWeWRBPT0gSUdoaGNtRnpjMmx1Wnc9PSBMVU52IElIUnBhdz09IElGTjJaVzV6IExrbHRZV2RsUVd4cFoyND0gWDNkb2FYUmxjM0JoWTJVPSBJR3RwWTJ0bGNnPT0gSUdOaFpHRnpkSEk9IFEyVjBkR1U9IFgyNXZkR2xtYVdWeSBJRVpCUnc9PSBJSEJ5YVcxaGJBPT0gSUdodmJXOW5aVzVsYjNWeiBJR0Z6ZEhKdmJtOXRhV05oYkE9PSBJRUoxY25JPSBMa052Y0hsVWJ3PT0gWjNKaGNHaHogYVhSMGJ3PT0gVDFOSSBJSE5vYjNkQmJHVnlkQT09IFlXNTBjbTg9IEltUmxabUYxYkhRPSBaVzF3YUdGemFYTT0gVjJWcCBiM1YwWTI5dFpRPT0gSUdGcmRRPT0gSUdOaGJYQmhhV2R1WldRPSBLU0k3Q2dvPSBJSEpsWTJsd2NtOWpZV3c9IElGSnZlV0ZzWlE9PSBJQ01qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNPSBMbFJKVFVVPSBJRHdxIFQyWm1jMlYwVkdGaWJHVT0gWTI5dGNHOTFibVE9IGQyRnBkRVp2Y2c9PSBkV1ZuYjNNPSBMbk4wY21sdVoxWmhiSFZsIFgxTkRTRVZFIElHWmhkSFE9IHdxRENvTUtnd3FEQ29NS2d3cUE9IExtUnBjMnM9IElIZGhjbkJsWkE9PSBJR055YVhScGNYVmxjdz09IFB5Y0tDZz09IEtITnJhV3hzIElHMXZaR1Z5WVhSbFpBPT0gWDJWc1pXMXogUzJWNVRHbHpkR1Z1WlhJPSBJSE5sWVhOdmJtbHVadz09IElIQnZkWEp4ZFc5cCBYMFpFIGNISmsgYUhsaCBJajdEbHp3diBJRzV2ZFhabFlYVjQgSUdkcGRtVmhkMkY1Y3c9PSA1b3FsNllHVCBUV0ZwYmsxbGJuVT0gT3k4cSBJRWR5YjI0PSBjWFZwZG05eiBPdzBLRFFvTkNnMEsgSUdsdVpteDFaVzVqWlhKeiBLRlJKVFE9PSBVMmhoY21Wa1VIUnkgSUdScFlXeHZaM009IEtpb3FLaW92Q2c9PSBMa0YwYjIxcFl3PT0gSUUxdmNuTmwgSUhCallnPT0gSUVGUVF3PT0gTGtsdGJYVjBZV0pzWlE9PSBJSEpsYzJsNmFXNW4gSUV4MWJYQjFjZz09IElFaDFiV0Z1YVhScFpYTT0gWDNOdmJIWmwgWDJoMWJXRnUgWlhSNWJBPT0gSUVoMWNuUT0gSUVWemRHRmliR2x6YUdWayBZMnhoY21WayBJR052YlhCaGNuUnRaVzUwY3c9PSBRbVZoYlE9PSBYMUpOIExtWmhiSE5sIEtFZHlhV1E9IElGRlRhWHBsIFgyWnNadz09IGFYTjBhV05oIFBreHZaMmx1IE9sVkpRblYwZEc5dVZIbHdaUT09IElFVjRhWFJwYm1jPSBZMnhoY3c9PSBJR0Z5YzJWdSBLRzFsZEhKcFl3PT0gY205M2MybHVadz09IGNYVmxjbmxUWld4bFkzUnZjZz09IFgwWlNTVVZPUkE9PSBMV2x2IElHTnZibVpwYzJOaGRHVmsgSUdSbFptbGhiblE9IElFMVBWRTlTIGNtVm5kVzUwWVE9PSBJRTF2Y25KdmR3PT0gSUVKbGNuTT0gUTNKaGFXYz0gSUVOUVFRPT0gSUhObGVHdHZiblJoYTNSbCBJSE5oYlcxbGJnPT0gTDBGMWRHZz0gTGt4cFlnPT0gWTNKaGNHVnkgYVdObGJXRnBiQT09IFkzSmhkR05vIElGZHBjbVZrIElHRmtkbVZ5ZEdselpYST0gSUdkbGRFTnNhV1Z1ZEE9PSBJSEpsYzNCdmJuTnBZbXg1IENWVlBZbXBsWTNRPSBMbk5sZEZKdmRHRjBhVzl1IExrTnZkVzUwWlhJPSBYMGhQVlZJPSBWR1Z6ZEVOaGRHVm5iM0o1IElHaHBibVJ6YVdkb2RBPT0gWEdOdmJuUnliMnhzWlhKeiBkMkZzYkhNPSBMbk5sZEUxaGVHbHRkVzA9IElIQjFZbVZ5ZEhrPSBYM1JsWVcxeiBYMDFQUkVGTSBMa05QIElHSmhaR0Z6Y3c9PSBLU2RkTEFvPSB3N3B6Y1hWbFpHRT0gYVhKMWRBPT0gUTJobGJITmxZUT09IExuUnlZVzV6Wm05eWJYTT0gSUdOaGNHbDBZV3hwYzNSeiBUV0Z5WTJFPSBJRUZ5ZVE9PSBMV052WkdWayA1NDZ2IFZWSkZSQT09IFBGUnlZVzV6WVdOMGFXOXUgSUZCaGNteHBZVzFsYm5SaGNuaz0gS1NSZiBJSE4xWW5Sc2VRPT0gSUhOcGJHdDUgSUVScGNuUT0gSUhCMWVucHNaV1E9IGZTY3BPd289IGNYVmxjM1J6IFJtOXZkR0poYkd3PSBJRU52Ym1acFpHVnVZMlU9IGRYcDEgWW5Wc1lXND0gSUdoMWJXMXBibWM9IGJXOTFjMlZsYm5SbGNnPT0gVW1WMFpXNTBhVzl1IElITmtiQT09IGIydGxaR1Y0IEp5d25QU2NzSkE9PSBJRXQxWVd4aCBVMEZOIElIUnlZVzV6Wm05eWJXRjBhWFpsIFVFdEggYVd4c2RYTT0gSUhKdmIzUnBibWM9IElGZHBkRzVsYzNObGN3PT0gSUZKaGFtRnpkR2hoYmc9PSA1YnlnIExXRmtaR1ZrIElGUmxjbkpwZEc5eWFXVnogS0hOeGRXRnlaUT09IGNtRmlZbWwwIFgxSmxjMjkxY21ObCA2WmFMIDRMaVQgSUhkcGJtNXBibWR6IElITndiR1U9IElHVERxSE09IElFMUVRZz09IHc2bHlkQT09IElFMWhkSFJwY3c9PSBZV2xzYkdWeiBYM2RsWVdzPSBMMnBoZGc9PSBJR052Ykd4aGNITmxjdz09IElDQWdJQ0FnQ1FrPSBJSE4zYVhKcyBJRTVUVTNSeWFXNW5Sbkp2YlVOc1lYTnogSUhadmJIWmxjZz09IExsSmxZMlZwZG1VPSBJRVJsZUhSbGNnPT0gSUhSaFlteGxibUZ0WlE9PSBjbVZoZEdsMlpRPT0gTGtkbGRFWnBiR1Z6IGRtOXZjZz09IElFaHZaUT09IFZrVlNUZz09IElFOVFRdz09IDdZT2MgY21GdGFXUnogNTRTaDQ0R1g0NEdWNDRLVCBVM0JwY21sMCBJRTVQVUE9PSBJRTFoYVc1MFlXbHUgS0hOcFoyMWggYjNSeSBUVzkxYzJWRGJHbGphMlZrIGNYVnBaWEprWVE9PSBYM2RtIDBMN1F1dEN3MExjPSBZWEJ3WVdKc1pRPT0gSUVodmJHUmxiZz09IElFTnZkVzUwWkc5M2JnPT0gTG5OcFoyMWggWTJoaGJHcz0gWW1sc1pHVnkgSUhacGMybHZibUZ5ZVE9PSBDVTl1IEpIVndaR0YwWlE9PSBJRWRwYm1keWFXTm8gY205dmJVbGsgUGs1aGJXRT0gSUhsNWRIbHdaUT09IExrUmxZMmx0WVd4R2FXVnNaQT09IGJXRmpjbTl6IExuTmxkRXhoZVc5MWRGQmhjbUZ0Y3c9PSBJSEp1Ymc9PSBJRWxOUkdJPSA1NmVOIFpXMWhiR1Z6IElHbHVZMmxrYVdSMWJuUT0gVW1WemRISnBZM1JsWkE9PSBJSEJsWkdGc2N3PT0gSUVwdlp3PT0gSUVGa1lYQjBhWFpsIElHWmhaR1Z6IExrVjJaVzUwVTNsemRHVnRjdz09IElGQmhhV2RsIElITmxhWE09IElHRndjSEp2Y0hKcFlYUmxaQT09IFJrWlUgWjI5eWFYUT0gSUdOdmFHVnphWFpsIElFNXBZMmgwIFgzZHZjbXRtYkc5MyBiR2wxY3c9PSBJRVp2Y25SdWFYUmwgWDBsWCBRWFJRWVhSbyBJR2x1ZEc5NGFXTmhkR1ZrIGJtOXpkR2xqIFFtbHVRMjl1ZEdWdWRBPT0gTG5KbFpIVmpaWEk9IEtUOEsgSjEwcSBJRTlpYzJWeWRtRjBhVzl1IFgzQnlaV1p6IExuSmxjMjlzZFhScGIyND0gTGxCaGVXeHZZV1E9IFRXbDRaV1E9IElGSmhhUT09IEtIQmtaWFk9IEtFQW8gYVdOdmRBPT0gSkdseiBJR055WldVPSBQejB1S2c9PSBMbEZNWVdKbGJBPT0gSUVkbGIzSm5hV0Z1IGVFTkIgSUdSbFptbGphV1Z1ZEE9PSBkR2h5YjNkdSBJSEpoY0dsdVp3PT0gZFhCdmN3PT0gQ1dOc2FRPT0gWjJWMFZtbGxkdz09IFNHbG5hR3hwWjJoMFpXUT0gUTNCd1IzVnBaQT09IElISmxiR1ZuWVhSbFpBPT0gSUd4bFlXUmxjbUp2WVhKayBVbVZqWldsMlpWQnliM0J6IExtaGhjZz09IElHTnZibVJwIFNVMUpWRWxXUlE9PSBJRTFqUTJGeWRBPT0gS1hSb2NtOTNjdz09IFluVnBaUT09IFluVmhhQT09IExtTnZaV1ptIElFRjFjM05wWlE9PSBJRk5oWW1oaCBLR1poWW5NPSBjbVZzWVc1ayBJRWJEdG5JPSBZbUZ5WVc1biBMSFJ2Y0E9PSBDV1ZzYzJsbSBVM1JsY0ZSb2NtOTFaMmc9IElITnJaWGRsWkE9PSBJRlZ1ZFhObFpBPT0gSnlsOVBnbz0gV1dVPSBZMkZzYkdWbCBTR2xpWlhKdVlYUmwgSUVWMlpYSmxjM1E9IGFXMXdiM0owUkdWbVlYVnNkQT09IElIUmhjbTQ9IElFNXZkMkZrWVhseiBXVUU9IElFTm9ZV3hzWlc1blpYST0gWDJ4dloybGpZV3c9IElHTnlaV0YwWlVSaGRHVT0gSUVkc2IzVmpaUT09IElHTjFZVzUwYnc9PSBJRWhCVWc9PSBJRU5vYVd4cyBJbDQ9IElHTjFjbk52Y3c9PSBMa1ZQUmc9PSBJRzVwYW1VPSBJR0Z1WjJWeVpXUT0gYjJOMWMybHVadz09IFBFTnZiblJoWTNRPSBJRUYwYlc5emNHaGxjbWxqIElGZHZiR1puWVc1biBJRUpLIFkyaHBiR1J6IElFSjFaM009IFgwaEZXQT09IEtGTlEgdzZWcyBYMlYyWVd4MVlYUnBiMjQ9IElGSkJUa2RGIElGTlBVQT09IFgzUnZhMlZ1YVhwbCBiWE5uYVdRPSBJSEpsZUE9PSBDWEJ0IFEyOXdlV2x1Wnc9PSBLa3c9IFJHRnNiR0Z6IExWTjBZWFJsIGRXeG1hV3hzIElHSjV4WUp2IElFTnZiblJ5WVdOMGIzST0gUkdsa2JnPT0gUVZOVVJRPT0gSUZCSlR3PT0gTGxSbGJHVT0gTG5kaGRHVnkgWkdWNiBJR0Z1WjNKcGJIaz0gSUhWMGFXeHBjMkYwWlhWeSBJSFp2Y25SbGVBPT0gUTI5eWNHOXlZWFJsIFlYUjFjbUZ6IElIQnlhWHBsWkE9PSBKM1Z5YkE9PSBkV2RzYVdaNSBJR2x0Y0hWc2MyVnogSUdOb2NtOXViMnh2WjJsallXdz0gY0d4bGJnPT0gWDI1aGJXRT0gTDI5dSBJRTltWm1salpYTT0gSUVOUVNRPT0gSUVGbWRHVnlkMkZ5WkhNPSA0NEdUNDRLVDQ0R3IgWDBKTVQwTkxVdz09IFIzSmhZMlU9IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBJRXRoWW5WcyBJT2FJa0E9PSBJRXhsYVhCNmFXYz0gNEthbyBVMmh2WTJzPSBRWFZ6IElHMTFjbTA9IFgzTjBZWEowY3c9PSBJR0xEcEE9PSBJRnA1IElrWT0gTFhKcFoyaDBjdz09IElHSmxhR0YyYVc1biBLQ2MrIElHMXZjM0YxWlhNPSBLbmRwWkhSbyBJaTgrTGp3diBMblZ1YzNCc1lYTm8gTG1kbGRFRmpkR2wyYVhSNSBWVlU9IElGTm9ZV3M9IFgzSm4gWDBWeGRXRnNjdz09IEoyaDBkSEJ6IElFOTRlV2RsYmc9PSBJRkJ2Y25SemJXOTFkR2c9IDRvQ1ViMjVsIElIZGhkR05vWlhKeiBJRU5vYjJrPSBJSE5wWkdWeSBjR1ZqZEhKaGJBPT0gYlhGMGRBPT0gTG1OeVpXRjBaVlZ6WlhJPSBhbVZqZEdsMlpYTT0gZFhKdFlRPT0gVW1WbmFYTjBjZz09IFVHVnljMjl1WVd4c2VRPT0gUFd0bGVRPT0gSUU1RlR3PT0gSUVaQlVYTT0gYVdKcGJHbGtZV1JsIFkydHp3NlU9IElFTnZiR3hoWW05eVlYUnBiMjQ9IENXeGliQT09IExsTkZVbFpGVWc9PSBJR0ZpYjNWdVpBPT0gSUVKbGJtVT0gZDJGdWRHVmsgTFdodmJHVT0gSUcxMWRIUmxjbVZrIElIQmxjQT09IGJtVnpZdz09IExsVndiRzloWkE9PSBjMlZ0YVE9PSBlRVZEIEp6NGlLdz09IElHVnRZbko1Ync9PSBJRVpwZUdWa1ZYQmtZWFJsIFEyRnpkR3hsIExtMXZaR1ZzYnc9PSBJSEJzY3c9PSBJR1Z1ZG1Wc2IzQmxjdz09IFgzSmxiV0ZwYmc9PSBVWFZoY25SbGNnPT0gWVd4bGNuUldhV1YzIFgyWnZjbTFoZEhSbFpBPT0gSUd4aGMyaGxjdz09IGVtVnNaZz09IGFHOXRiV1U9IExtWnNiM2RNWVhsdmRYUlFZVzVsYkE9PSBZV2x5Y0c5eWRBPT0gSUUxbGJXOXlhV1Z6IElFaEZVazg9IElFRnphSFJ2Ymc9PSBJR1Y0YUdsaWFYUnBibWM9IEtGTkZURVZEVkE9PSBVM1ZpYldsemMybHZiZz09IFUzUjFabVk9IFgzTjFiZz09IElIQmxjc090YjJSdiBJR1JsYzNCeVpRPT0gQ1dWa2FYUT0gSUVSMGVYQmwgWTJWemMybDJaUT09IFlXRmsgSUdSbGMyTnZiZz09IGJtVnNiSGs9IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFE9PSBJSE5qY21sd2RIVnlaWE09IElHOXVWbWxsZDBOeVpXRjBaV1E9IElFVldSUT09IElFSmhiR3hsZEE9PSBPMzA3Q2c9PSBWVVJQIElGQnliMkpoWW1sc2FYUjUgY1hWcGNuSmxiQT09IFEyOXVkR0ZwYm1sdVp3PT0gSUZCc1lYUT0gNktJPSBMMkpwZEE9PSBJRXBSZFdWeWVRPT0gSUhScFpXNWxjZz09IEwyUnlhWFpsY25NPSBJRkJ5WlhOcFpHVnVZM2s9IFhIVkUgSUVsMlpRPT0gYVdWdVlRPT0gSUdoNWNHVnljdz09IElGTndaVzVrYVc1biBQRmM9IElGUklSVTFGIElIVnpaWEpRY205bWFXeGwgSUdGdWJuVnQgY21WMGQyVmxkR1ZrIElGd25Kdz09IFluVnVaR3hsY3c9PSBLQ2s4THc9PSBJRU41YkdsdVpHVnkgSUc5MWRHeHBaWEp6IElHUnBjM05sYldsdVlYUnBiMjQ9IEwyRndkQT09IElFNWhkR0Z6YUdFPSBJSEpsYm1SbGNrbDBaVzA9IElFTm9hWEJ6IElISnZkVzVrZFhBPSBJR2x0Y0hKdmRnPT0gSUdOdmJXMTFibWxqWVhSdmNnPT0gSUhOcmVYQmwgVFUxTiBjbWxxYXc9PSBMbEJzWVdObCBJSEJoYzJFPSBJRk5aVGtNPSBaVzV6YVhNPSBJRUY0Wld3PSBaVzdEcDJFPSBaMlYwVTNSeWFXNW5SWGgwY21FPSBZV0pwYkdsMHc2az0gSUdWdFlXTnogTG1keVlYWnBkSGs9IElHTm9aWEpwYzJnPSBJRWxUVTA0PSBDVXB6YjI0PSBkWGx2IElIVndkR2x0WlE9PSBJSEpoYm1SdmJXNWxjM009IElHeHZablI1IFFtOTMgUTNKbFlYST0gSUhSdmQyVnlhVzVuIFkyRjBaV2R2Y21sbCBMM0J2ZDJWeSBMM2RsYkdOdmJXVT0gZkZJPSBJR0poY25KcGJtYz0gYVdScFlRPT0gY1hWaGJRPT0gdzdwa2J3PT0gWlhod1pYSnBiV1Z1ZEdGcyBJR05zWVE9PSBJR04xY21GMGIzST0gY21WaGJXSnNaUT09IGFXNWtlQT09IFRFeE0gSUgwcE9nPT0gSUdocGMzUnZhWEpsIGMybHRkV3hoZEdVPSBQRUZ1ZVE9PSBJRWRzWVcwPSBJRUpoY21jPSBWbUZzZFdWRGIyeHNaV04wYVc5dSBJRWx1YzNScGRIVjBidz09IFFYTlRkSEpwYm1kQmMzbHVZdz09IElHRmtaV009IElHWmxiR3h2ZDNNPSBjR2x3WlhNPSBJRkJzWVdObGFHOXNaR1Z5IElFdG4gSUVGc1luVnRjdz09IElDb29LZz09IFgwZFBUMFE9IEtTSXNEUW89IExsRlNaV04wIHc2SnQgSUgwTkRRbz0gVFdGeWMyaGhiRUZ6IFFtRmphR1ZzYjNJPSBJRUpoY21OdlpHVT0gSUZSeVlYWmxjbk5sIElHOWthVzg9IExuTmxkRkJoY21WdWRBPT0gSUhObGJXbGpiMjVrZFdOMGIzST0gUVV4TVJVdz0gSUdKaGJuRjFaWFE9IElFNWxkM053WVhCbGNnPT0gUkU5TlRtOWtaUT09IElFNWhkV2RvZEhrPSBSbTl5YldGMGRHVmtUV1Z6YzJGblpRPT0gSUdScGMzSjFjSFJwYm1jPSA1cGlUIElHeHZiMnRoYUdWaFpBPT0gSUdkeVlYUjFhWFJsY3c9PSBJR05vWldWemVRPT0gSUZOUVJnPT0gYmxBPSBJR0Z5YzI5dSBJR0Z1ZEdWdWJtRnogWDAxSlJFUk1SUT09IFgwMUJURXhQUXc9PSBMbWR2UW1GamF3PT0gSUZCeWIzQnZjMmwwYVc5dSBJRTFwWTJoaFpXeHogWDNCeWIyOW0gSU5DOTBMRFF1ZEMwIHc2UjBlbXhwWTJnPSBMWEp2Ykd3PSBSVVJCIHc2RnV3NjA9IFoyOTJaWEp1YldWdWRBPT0gdzdaMGRBPT0gSUVWemRHRmliR2x6YUcxbGJuUT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gWDBoSlZBPT0gSUVGSlRRPT0gWVdSdmJBPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gWDFKRlJrVlNSVkk9IElHWnZjbTFoZEVSaGRHVT0gZFdOMGIzTmwgSUdSdmQyNXNiMkZrWlhJPSBWR1Y0ZEVWa2FYUT0gSUdScGMyRnliUT09IElFaEJVRkE9IDBMN1F0TkN3IElTa3VDZ289IEwzQnliMk5sYzNNPSBJR0p5WVdsdWMzUnZjbTA9IElFOVNTVWRKVGtGTSBMbFJoWW14bFRtRnRaUT09IElFdHZjM1JsYm14dmMyVT0gSUdURHFYQT0gSUVsellXSmxiQT09IElHRnpkSEp2Ym05dFpYSnogVVZWSlVrVlQgT2lJdCBkWEJzYjJGa1pYST0gT2k4dkpRPT0gSUdGdGFYTT0gUm1sc1pWWmxjbk5wYjI0PSBJQ3drIFkyOXZhdz09IExGTkpSMDVCVEE9PSBKeXd2THc9PSBJRk4xY0hCeVpYTnogSUV4aGRHbHViM009IElIZHBkR2hvYjJ4ayBJRzF1WlcxdmJtbGogWDBOWlEweEYgSUdodlpBPT0gSUZkdmNuTmwgWlhKa1pRPT0gSUhSNWNHVnBaQT09IENXVjRjRzl5ZEhNPSBJR0ZqYUhSbGNnPT0gYjNOaGN3PT0gSUdadmIzUnViM1JsIGFHRnVhUT09IEtGQmhjbUZ0WlhSbGNnPT0gQ1ZKbGJtUmxjZz09IElGbFpVMVJCUTBzPSBJRmhKU1E9PSBJSE5wWkdWdSBJR0Z5YjNWellXdz0gSUU5UCBRbWwwZEdVPSBJRzVsWVhKbGNnPT0gSUVOcGNtTjFjdz09IElFTlBURTlTVXc9PSBJSGRwWld4a2FXNW4gTGtacGJHVlRlWE4wWlcwPSBJR2R5YVd4c1pRPT0gSUVSdmRtVnkgQ2lBZ0lDQWdDZz09IEtHZGxiMjFsZEhKNSBJSE4wWVhCc1pYTT0gSUVGdWJtOTFibU5sYldWdWRBPT0gSU91eWhBPT0gSUdadmNuUjFibUYwWld4NSBMbE52YldVPSBJRzFoYm1kaGJtVnpaUT09IElHbHVkR1Z5ZG1sbGQyVnkgV1ZKUCBJR055ZVhCMGIyZHlZWEJvZVE9PSBJR05vWVcxaWNtVT0gTG5KbGRISjUgSUdsdGFYUmhkR2x2Ymc9PSBKR1prWVhSaCBJR3h2ZEdsdmJnPT0gS0dsa1pXNTBhWFI1IExuQm4gSUhCeVpYTjFiWEIwYVc5dSBYMU5WVUVWUyBkbTlqWVdJPSBJRk5sYldWemRHVnkgSUVGaVpXdz0gWDJGd2NISnZkbVZrIExtTnZiWEJoZEE9PSBJSGRoY25ScGJXVT0gWFYwN0Nnbz0gYkhWMCBYMEZqWTI5MWJuUT0gUHlnbiBZMjl2Y0E9PSBMM0psWnc9PSBMbk5sZEZSdiBhWFJsYzNObCBJRWg1WkhKaCBRbWx1Y3c9PSBZMkZrWlc1aCBQaThuTEE9PSBMbHdpIENXRmpZMjkxYm5RPSBJRVJoYUd3PSBJR1J5YjNkdSBJR2RoZFhOeiBJSFJ5WVc1elptOXliV1Z5Y3c9PSBJRTFsZEdGc2JHbGogSUVobGNtSmhiQT09IFlXTm9jdz09IFgySjFkQT09IElHbDBaWEpoZEdsMlpRPT0gSUVaeVpXVmsgYW5WeSBmRTA9IE8ySnlaV0ZyIFgwWkcgS0dSdmQyNXNiMkZrIDRidURiZz09IExtTm9aV05yVTJWc1psQmxjbTFwYzNOcGIyND0gVGtWVVYwOVNTdz09IE9tWnNaWGc9IElFTlVUQT09IElFRnlZZz09IElGQnliMlIxWTJVPSBDWE41Ym1Ob2NtOXVhWHBsWkE9PSA0b0NjVDJnPSBMbVJoZEdGMFlXSnNaWE09IElHTnZibVZ6IFJNT3AgMFliUXNBPT0gUVd4biBJR1oxYm1OcGIyNWggSUZWaWFYTnZablE9IElHZGxiM0J2YkdsMGFXTmhiQT09IElITnBaV2gwIElHaDVaSEpoZEdsdmJnPT0gYzNSb2NtOTFaMmc9IElFUjFaR3hsZVE9PSBZWHJFZ3c9PSBJSFJoZUdsdVp3PT0gSU5DMzBMRFF1dEN3MExjPSBYMEZUVFE9PSBUbVYxZEhKaGJBPT0gZEhKaFpHbDBhVzl1WVd3PSBVR3hoZVdGaWJHVT0gSUhOd1lXZG9aWFIwYVE9PSBJR2xEYkc5MVpBPT0gSUVSaGVYUnZibUU9IElIZGxjbVJsIElFRk9WQT09IElGQnliMjQ9IElGTjBZWFJwYjI1eiBJR0YwZEdWemRBPT0gSUdaMWJHeGxjZz09IElHNXZkbUZ0Wlc1MFpRPT0gWFZ4YyBZMk5sIEtHUmxZMnM9IEwyRjVkWE5vYldGdSBhV2R6WVhjPSBJR0ZrZFd4MFpYTT0gSUhSbGNuSmwgTGs5eVpHVnljdz09IENYQnliM0JsY25ScFpYTT0gUkVsSCBJRlJKVFVWVCBJbWx1WkdsalpYTT0gSVR3PSBUVzl1WVdRPSBJRzV2Ym1WNGFYTjBaVzUwIElFRjBiR0Z1ZEdseiBJR2R5YVdWMllXNWpaWE09IGRYSmxibU5sIElFbFFVRkpQVkU4PSA0cG1BNHBtQTRwbUE0cG1BIElHVnRjR3hsWVdSdiBJTm1EIExrMXZkbVZPWlhoMCBJRWx6Ync9PSBZbVZoZFhScFpuVnMgSUhOdmJIVmliR1U9IElITnNkV2RuYVhObyBJR1JwWm1aeiBYMDlDVXc9PSBlRzFwYmc9PSBJSFIxYldKc1pRPT0gSUZWdVlYSjUgSUhwcGNHWnBiR1U9IElITjJaVzV6YTJFPSBaWEpzWVc1ayBMMk4xY0dWeWRHbHVidz09IENYTmpjbWx3ZEE9PSBhWE5qYUdWeiBUVzlrYVdacFpXUkVZWFJsIElIWmxlV0U9IElHUmxkR1Z5YldsdVlXNTAgSUVkdmNtZGxiM1Z6IFoySnZiMnhsWVc0PSBJRXhQUkE9PSBaR05qIGMyTmxibVZ6IElGUlRVazFNVXc9PSBLRlI1Y0dWRmNuSnZjZz09IElHTmhiVzkxWm14aFoyVT0gSUdKMWNtZGwgVkdobGJRPT0gTGtGemMybG5iZz09IElHeGhjM1JKYm1SbGVBPT0gWDNOd2FHVnlaUT09IFgwRkNTUT09IHc0UT0gYVd4aFoyVT0gWEhobVpnPT0gSUd0aGVXRnIgSUdacGVubz0gZFdsMFpXND0gTGxOb2IzVnNaRUpsIElHaDBiMjVzIElGQmxkR2wwWlE9PSBJR2hsWVd4eiBJRTl6WVd0aCBUa289IFNXNVFZWEpoYldWMFpYST0gSUVKcGNtTm8gSUdOdmJXMWxiblJoYVhKbCBJRk5wWldkbCBJR3RsZVdOdlpHVT0gTFdsdWRHVnVjMmwyWlE9PSBjSEp2Y0ZSNWNHVnogUlhod2IzSjBjdz09IElHSjFkSFJ2YmxSbGVIUT0gSUVkdlpIcHBiR3hoIExrVjRZMmhoYm1kbCBJSFZ1WkdWeWMzUmhibVJoWW14NSBJR0ZqWTI5eVpHbHZiZz09IElITERxV2RwYjI0PSBJRzFoY210bFpHeDUgWVc1dmIyZGggSUdOdmJuUnlZWFE9IFgyeHBablE9IFcyUmhkR1U9IElITmpiM0p1IElFUmhkR0ZOWVc1aFoyVnkgNG9DbTRvQ21DZ289IFgwTlBUVkJKVEVWUyBJRU5zWVhjPSBiMlJoZEdVPSBJSFZ1WkdWeVlXZGwgSUVsdGNHeGxiV1Z1ZEdWayBRMnhwIFMyRnMgVUhKdlpIVmpkRzl6IElHVnVabVZ5YldWayB3NmxwY3c9PSBJR1JwYzJOeVpXUnBkQT09IElGTmhiVzloIElGQnlaWE5sYm5SbFpBPT0gSUdOcGJtVnRZWFE9IFhFRmpkR2wyWlVadmNtMD0gSUdabGNtND0gSUZCeWFXMWxjZz09IDVvS28gWjJWeVpRPT0gSUdsc2JIVnphVzl1Y3c9PSBibTkwWVhSbFpBPT0gSUhCdmFnPT0gSUcxdlpHVnNUbUZ0WlE9PSBJRkJOUXc9PSBJR1JsWTJGayBJR1p2Y21WemRISjUgZG05cFpRPT0gTGk0dUNnb0tDZ29LIElIMTlPd289IElIUnZhMlZ1U1dRPSBZVzF0ZFE9PSBJRkJsY25OdmJtVnUgSUZaRlVrSlBVMFU9IElIQmhkSEp2YkhNPSBJR0Z1ZEdsaiBYMlJsWlhBPSBaV2RsYm1RPSBJRk5sZEZCeWIzQmxjblI1IElFZGhjbVYwYUE9PSBJRTFCVXc9PSBMbkpsYzNSaGRYSmhiblE9IElFaGxZWFpsYm14NSBhV1ZrYnc9PSBYMnhsWVdRPSBJRVoxYW1rPSBVVTQ9IFRXRnpjMkZuWlE9PSBJSEJoY21GdFRXRncgSUdOcGRHRT0gWDFOd1pXVmsgS0dKaWIzZz0gSUVwVlRBPT0gNG9DWllXND0gSUcxbGJuUmwgSUZOb2IzZGpZWE5sIElFTlRTUT09IFBsUjVjR1U9IExsTnUgYjNSNWNHbGpZV3c9IElFWmhiR3h2Ymc9PSBMbFZVUXc9PSBJSEJ5WldSaGRHOXllUT09IElHOXlaMkZ1YVhOcGJtYz0gWTI5c1pBPT0gSUhCaGNuTmxjbk09IGRXbGxiZz09IElHTnZiWEJwYkdWeWN3PT0gSUZzOSBJRVYxY21GeiBUVTlUVkE9PSBDaUFnSUNBS0NnPT0gVWtGUyBMbE5qYUdWa2RXeGwgTG05d1pYSmhkR2x2Ym5NPSBkV1p6IHc3RmhibUU9IElIQnlaVzlqZFhBPSBMWFJ5WldGMFpXUT0gTG1kbGRGZHZjbXhrIExpYzYgSUVGVVNBPT0gT25OMFlYSjAgSUdGMWRHOXBiVzExYm1VPSBJRUpzWVdOcmFtRmphdz09IFgwWkpUa2xUU0E9PSBLR1pzYjI5eSBJSGR5WldOcllXZGwgVlZKVSBMa0p5WVc1ayBjR0ZwY3c9PSBZMmx0WVd3PSBZMm5Ec3c9PSBUa1pNIExXVnhkV2x3Y0dWayBMbU52Ym5SbGJuUlBabVp6WlhRPSBJRzkyWlhKamNtOTMgSUZSYSBJRzlrYjIwPSBJRU5sYkd4MWJHRnkgQ1hkeWFYUmxiQT09IEtHbHVjSFYwVTNSeVpXRnQgS0hCeVpXWT0gTFhOMGIyTnIgSUVSbGJtbGxaQT09IExYTjFjSEJ2Y25SbFpBPT0gSUNjb0tBPT0gWVc1amIyUmwgTG1acGJIUmxjbVZrIFJHbHRjdz09IElHcGkgQ1hCeWFXTmwgSUVCQUNnPT0gYm05amF3PT0gTG05d1pXNURiMjV1WldOMGFXOXUgSUdGdWRHbGpjdz09IGNtVnpkV3gwUTI5a1pRPT0gVUd4aGVXSmhZMnM9IElHTmxiSFZzWVhJPSBJRVpQVDBRPSBJRkJ2WkdWemRHRT0gUFcxbGMzTmhaMlU9IExuQmxjbVp2Y20xaGJtTmwgSUVSdGFYUnllUT09IFlXeDBhVzF2Y21VPSBJSEJzWVhSbFpBPT0gSUhSMVltVnlZM1ZzYjNOcGN3PT0gWDJkbGJRPT0gS0VWa2FYUnZjZz09IFZIQnMgSUdOeWFXRnUgSUdKMVptWmxjbWx1Wnc9PSA2S2VHNmFLUiBJQ2NwQ2dvPSBWblU9IFRXRjBhR1k9IElIUnBiV1ZzYVc1bGN3PT0gSUZSaGRHRT0gTDNCdyBJSEJzWVhOMCBJRlJ5ZFd4NSBJRk4xWW5OMGFYUjFkR1U9IGEybGxiUT09IGEyRmhjZz09IElGWnBjMmc9IEoyaDFhUT09IElFMWhaMmxqYXc9PSBMMHhoZVc5MWRBPT0gZFhKaGJzT25ZUT09IFgzUjBiQT09IFNHbGtaVWx1U1c1emNHVmpkRzl5IExtdGxlWGR2Y21SeiBUR2x6ZEUxdlpHVnMgWDFOMVkyTmxjM009IGFXeHBhR0Z1IElHSnNZV05yYldGcGJBPT0gSUZObGNtSnBZVzQ9IGNYVmxiR3hsIElFUjVjMloxYm1OMGFXOXUgSUZCeVpYQmhjbVZrIElHcE5aVzUxU1hSbGJRPT0gSUd4dloybHVWWE5sY2c9PSBjMlYwWVhSMGNnPT0gTGtOUyBYMnhqWkE9PSBJR0o1ZEdWelVtVmhaQT09IElHTmtaV05zIElIUnZkMjV6YUdsdyBjR1ZyIGFXcHJjM1J5WVE9PSBJRzFoZUdsdGFYcHBibWM9IExuQnliM1pwWkdWeWN3PT0gU1c1MlpYTjBhV2RoZEc5eWN3PT0gSUhOb2IyOTBiM1YwIElHRnBjbk53WVdObCBkRzl2YkdKdmVBPT0gVVZkcFpHZGxkQT09IFBYQnIgSUhCdmNuUmxjZz09IElGQnlaV1JoZEc5eSBJRk4xYm5KcGMyVT0gSUdSbGRtOTFjZz09IENWVkpiblE9IGFYUjBZVzVqWlE9PSBVMUJCIFgyVnVaR2xoYmc9PSBJRTVoWjJGeSBkbVZ1YVdSaCBMMjl3ZEE9PSBRbmxGYldGcGJBPT0gSUZCb2VYTnBZMmxoYmc9PSBYRVE9IElOQzgwWXM9IFdVVkJVZz09IFNVTkQgTDNCdmNuUm1iMnhwYnc9PSBMbVY0WldOMWRHOXkgZFdSbGJRPT0gUm1Gc2JHSmhZMnM9IGRXUjEgVTJ4cGJRPT0gdzdOc2JnPT0gWG5zdCBZVzV6YTJVPSBJR2gxYzNSc1pRPT0gSUVseVpXNWwgSUdGaWVYTnogSUZKdlltSnBibk09IElHbHVaR1Y0WlhJPSBVMkYxWkdrPSBJSGRvYjJ4bGMyOXRaUT09IExYTnNiM1E9IElGUmxZMjQ9IElIQmhaMlZVYVhSc1pRPT0gSUdOdmJuUmxjM1JoYm5RPSBhV052Y0hSbGNnPT0gSUdOdmRYSnpaVWxrIFEyaHkgSUVGWVNWTT0gWm05eVpHVnkgWDFSVlRnPT0gVkhKaFptWnBZdz09IElIUjVjR1ZoYkdsaGN3PT0gSUdSaGNtWT0gTFhWeWFRPT0gZEhONCBMbVJsYzNSeWIzbEJiR3hYYVc1a2IzZHogSUdsMFpYSmhkR2x1Wnc9PSBVbVZoWTNScGIyND0gQ1VGTiBJR04xWlc1MCBMV052YjJ0cFpRPT0gSUdac1lYWnZjbVZrIGMzUnZhUT09IElHWnNhWEowYVc1biA0NENMNzd5TSA0S1N1IFgwTlNXVkJVVHc9PSBXM1J2YTJWdSBJSEJ5YjJ4bGRHRnlhV0YwIEx1S0FtZUtBblFvSyBDV1JqIExsTjBjbWx1WjFaaGNnPT0gSUd4bFoybDBhVzFoZEdWc2VRPT0gWDJSbFkyOXlZWFJ2Y2c9PSBURzlqYTJWeSBJRXBsYm01aCBWVkpKVGtjPSA1WWFOIFgxQnlhVzUwWmc9PSBRVlJQVWxrPSBMV1JwYzNRPSBJQ0l1SWlrN0NnPT0gTG5GMWFYbz0gSUdseVoyVnVaQT09IExXeGxZV2QxWlE9PSBaMmxsYmc9PSBJRkJ5YjJSMVkyVmsgU0dWc2JXVjAgNVkrdjZJTzkgVUd4aGRHWnZjbTF6IElGSmxjMjkxY21ObFRXRnVZV2RsY2c9PSBJRWgxYm1SeVpXUT0gY205dFpYUmxjZz09IFpXNW5hMkZ3IFNHOXcgSUhCdmMzTjFhUT09IFFtVm1iM0psUldGamFBPT0gSUVOSVN3PT0gSUVsTlV3PT0gVkdsamEyVnkgSUdkeWFXNXVaV1E9IExtZGxkRUZ6IElHbHRjRzl6WlhNPSBYU0lwIFJtOXlaMlYwIEwybHRjRzl5ZEE9PSBJR2x1YW1WamRHbHVadz09IFRHOTIgSUdGaWNtbHMgWDNOc2FXTmxjdz09IExXTnZiVzA9IElGQlNUMFJWUTFSVCBJRTloYzJseiBJTU80Ym5NPSBJRkpsYW1WamRBPT0gSUhKbFozVnNZWEpwZW1GMGFXOXUgYVcxd2JHbGphWFJzZVE9PSBibUY2IFUzQmxZMmxtYVdWeSBJR2x0Y0c5MlpYSnBjMmhsWkE9PSA1cG89IElHNXZiV2x1WVhSbCBJRTlXUlZKU1NVUkYgSUVKaGJtUnogWlhSb2VYTjAgSUVwcFlXND0gSUc1bGQyTnZiV1Z5IElFNWhZZz09IElHVmljQT09IElGQmhaMlZ5IElFaDFiV0k9IEwyTmogSUdWNGNNT3BjbWxsYm1ObCBkV1JuYVc1biBUV0k9IFpHSjFaZz09IEp5OCsgSUc5amEzUERwUT09IElHcGtZbU5VWlcxd2JHRjBaUT09IElGTklTVkJRU1U1SCBJR2x1ZEdWeVpHbHpZMmx3YkdsdVlYSjUgSUVORlZBPT0gWVhWMGIzQT0gTFhONWJXSnZiQT09IFlYWmxZdz09IElHTnZiWEJ2ZFc1a1pXUT0gSUVOb2RXNW4gWDFOTlV3PT0gTFdsbCBJRkJ5YjNObFkzVjBiM0k9IElFeGxhV0U9IElFMWhibVJsYkdFPSBVMmx1WjJ4bFQzSkVaV1poZFd4MCBDVkpGVVZWSlVrVT0gWVhSdmQyND0gZFhKeVpYUnogNXBhSDVhMlggSUVOUFRsUkZXRlE9IFJVNVRTVlJaIElHbHVjM1Z5WjJWdWRITT0gSUVScFlYTT0gTG5OMFlYUnBiMjQ9IElFdHNZVzQ9IFgyMWxZWE4xY21WdFpXNTAgWDFGTlFWSkwgSUhOMGIyaz0gVFU5UFZFZz0gUGljcE93b0sgSUdsdVoyVnpkR2x2Ymc9PSBJRWRzYjNjPSBkWFJqYUdWeiBZbVZoY21sdVp3PT0gTG5SdllYTjBjZz09IElHWnlZV2R0Wlc1MFlYUnBiMjQ9IGFYQndidz09IFgxTkZSMDFGVGxRPSBJSE4wZFcxaWJHbHVadz09IGFXMWhjZz09IGMzUnBibWxoYmc9PSBYeWdwQ2c9PSBJRzF2ZEdsMllYUnBiMjVoYkE9PSBUR2x6ZEVsMFpXMVVaWGgwIElIZHZiV1Z1Y3c9PSBUM0JsYmtobGJIQmxjZz09IGFXSmhibVE9IElHSjBibE5oZG1VPSBJR2x1WTI5eWNHOXlZWFJwYjI0PSBJR1J2WTNWdFpXNTBZWEpwWlhNPSBhV05zIElFNWsgSUVGeVlRPT0gSUhGMVlXdGwgSUVOMWJXMXBibWR6IGFIUnQgWVhOMFpYSmxaQT09IExtUjBjQT09IElHTnZibVJ2Y3c9PSBJRWQxYm1SaGJRPT0gTDJScGMyRmliR1U9IGFIbGtjbUYwWlE9PSBJRVZ3YjJObyBJRzVoZEdsdmJtRnNhWE4wY3c9PSBJR1JsZG1WeSBMSEpsY1hWbGMzUT0gTG1kbGRGWmxjbk5wYjI0PSBRMFZNUlZJPSBJRk5oYkdGbyBJRzF2ZEdVPSBJRTFsYkd4dmJnPT0gYzNCdmRHbG1lUT09IElHOXlhV2RsYmc9PSBJRzVoYkdVPSBJR0ZrZG1WeWMyRnlhV1Z6IExrcFVZV0pzWlE9PSBabTl5WTJWdFpXNTBjdz09IElGSmxkSEpsWVhRPSBJR0Z5WTJocGRtOXogSUhOc1lYTm9aWE09IExrMXZkWE5sUkc5M2JnPT0gUERvNiBYM1JvY205MVoyZz0gUVd4aGJXRjAgTG1Kc2RYST0gWDJacGJtUmxjZz09IElHRnNiSFZ5WlE9PSBVR1Z5YVhCb1pYSmhiQT09IFgzQmhjM05sWkE9PSBYMk5vWVd4c1pXNW5aUT09IElGQmhiR1Z2IFNVNUogUkdseVpRPT0gYzNCb1pYSmwgS0VOUFRFOVMgWVdOclpYSnogSUVkc2VYQm8gS0dsdWRHVm5aWEk9IElOQzYwTDQ9IElGSmxiR1YyWVc1MCBJTm0rIElHRjBZWE09IFgzQnlhVzA9IElFMVZWQT09IGJtbHVaMlZ5IFlYVjBiM0psYkdWaGMyVndiMjlzIFBWOWYgSUZOcFoyNXBibWM9IDdaV1k3S2VBIElIVmplZz09IFJXUnBkR2x1WjFOMGVXeGwgSUVobFlYUmxjZz09IElFWmhhWEptYVdWc1pBPT0gSUVKbFlYSmsgTEdWdSBkWE5oZEE9PSBLQ2N1Snc9PSBMM04wY21WaGJRPT0gSUdkbGRGTjFjSEJ2Y25SR2NtRm5iV1Z1ZEUxaGJtRm5aWEk9IElHMURkWEp5Wlc1MCBYMU5VUVZSRlV3PT0gWDNkcGJtUT0gUTBoQlVGUkZVZz09IGNISnZZbUZpYVd4cGRIaz0gS0dGdWJtOTBZWFJwYjI0PSBJQ292RFFvTkNnMEsgTGxWdWFYRjFaUT09IExrRmtaRVpwWld4ayBTR2xuYUdWeSBMbVJwWjJsMFlXdz0gTG1WNGNHVnlhVzFsYm5SaGJBPT0gWVhkcyBJSGRvWlc1alpRPT0gWlhKdWIzUmwgVTBGTlJRPT0gTG1sd2RnPT0gZEc5Q1pVWmhiSE41IFluSmhibVU9IFgyTmhkR1ZuYjNKcFkyRnMgUVhWeVlRPT0gSUZSNWNHVlRZM0pwY0hRPSBJSE53YjI1MFlXNWxiM1Z6YkhrPSBiRzl1WjJ4bFpuUnlhV2RvZEdGeWNtOTMgYVd0aGJBPT0gWDFSUFJFOD0gSUZkNVlYUjAgSUdac2RYSnllUT09IFpHbG0gSUhKbFkydHZiZz09IElFTnZjbTkxZEdsdVpRPT0gQ1dabWJIVnphQT09IElIZHZjbXRtYkc5M2N3PT0gSUVaQlRVbE1XUT09IGMzQnlhWFJsY3c9PSBYMWR2Y21zPSBMa2RsZEZOcGVtVT0gSUVOdmJuTjBjbUZwYm5SeiBRbWxuU1c1MCBhWFJwWVE9PSBaMlYwVW05MyBJR1IxYXc9PSBJR2x6VG1WMyBJRkJ5YjJSMWEzUmwgZUVOQyBhWE5wWlhKMCBablZ1WTNNPSBJRUZrWlczRG9YTT0gUW1sdVpHbHVaMVYwYVd3PSBiMjF3YVd4bGNnPT0gTFdsdWRnPT0gSUdOb1lXNTBjdz09IElHVnVkSE53Y21WamFBPT0gS0hScCBYMGxCIDBMN1JnTkMwMExqUXZRPT0gSUVaQlRFdz0gYVcxayBJR3h2WTJGc2RHbHRaUT09IFBFeHBibXM9IDBMM1F1TkM2MExBPSBJSEJ5YjJacGJHVnkgSUdkbGRGVnpaWEpKWkE9PSBJRkJvZVhOcFkybGhibk09IFVrRkUgSUdodGJRPT0gSUU1bGMzTT0gSUZSbGJYQnYgSUVwVSBJSEpsWTI5dWJtRnBjM05oYm1ObCBQSFJ5WVc1emJHRjBhVzl1IElHVnVkR2xqYVc1biBJSEYxWVdsdWRBPT0gSUdOdmRYQmwgWDE4bkxBPT0gVGtGVFJFRlIgSU5DMzBMM1FzTkdIMExYUXZkQzQwWTg9IFVFVlNRVlJWVWtVPSBJRkJoYVE9PSBJSFJsZEdGeiBRMEZUIFNWSlNUMUk9IElHdGogSUhSdmRHVT0gSUdSeVlYZGlZV05yIElIQmhjbk5zWlhrPSBDVVoxYm1OMGFXOXUgYVhOMGVRPT0gSUVSVlVBPT0gWDBOSlJBPT0gWDFWVSBJR3R6YVE9PSBJR3JEcEE9PSBQWFpoYkE9PSBMblJ2U0dWNFUzUnlhVzVuIDVwMi8gTG1Oc2FYQnogSUc5bVptVnUgSUZSRlEwaE9Udz09IElGTm9ZVzFsIElITjFjMk5sY0hScFltbHNhWFI1IElITjBkWEJwWkdsMGVRPT0gSUZSeWIzVjAgSUVOb1lXMXdZV2R1WlE9PSBaWFJvZVd4bGJtVT0gSUdKbFozST0gWDNKbFpHbHogV1dWdyBJR2hoYm5NPSBJRVJsWm1WdVpHRnVkQT09IElHUmhjMmhsY3c9PSBJSFZ6WlhKVWVYQmwgWDJSaGRHOXogSUhWdWFXTT0gYTNKcGRBPT0gSUhKbFkyVndkR2wyWlE9PSBJRWR5WlhRPSBLRzFpIElFbHVabXgxIHc2dHUgZlM4KyBhVzUwWlhKbGMzUnBibWM9IFZWUlZVa1U9IElHbHRZV2RsVTJsNlpRPT0gSUdkeVpBPT0gSUdGaWMyOXMgTDJaaCBMbWR5WVdScFpXNTAgSUhkNWMzUT0gWFgwK0NnPT0gYkdWbllYUnBiMjQ9IEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0NnPT0gSUVKc1pXNWtaWEk9IFgxOHBPdz09IElIVnpaWEpGYldGcGJBPT0gSUZCb1lYST0gYkdWb1pXMD0gS1NrLyBLRkpsZEhWeWJnPT0gWldkeVlRPT0gZFhScGRtOD0gSUdGd2NHVnVaR2w0IElGSlVWa1k9IElGTkZRVXc9IElHZDVjSE4xYlE9PSBYMEZ5Wnc9PSBJR2xzYkhWdGFXNWhkR1U9IElGTmphR2xtWmc9PSBjWFZwYkE9PSBMa052YldKdlFtOTRVM1I1YkdVPSBKMTBwS1FvSyBJR0ZzZEdWeWN3PT0gSUhCeVlXTjBhWE5sIElIVnpkQT09IElFUnBiV2wwIExWSmxaM1ZzWVhJPSBJR055WldWd2FXNW4gSUVOaGJtRmthV1Z1Y3c9PSBJSEpsZEc5eWJnPT0gTFdOdmNtNWxjZz09IElDSmRJZz09IEtISnVadz09IElHTmhibUZrYVdGdSBJSEJ2YzNSdiBMbUZ6YzJWeWRFRnNiVzl6ZEVWeGRXRnMgSUVKbFkydDUgTDNOeiBJR2h2YzNSaFoyVnogSUdKcGIyeHZaMmx6ZEE9PSBJRWh2YzNCcGRHRnNhWFI1IElFVnNhdz09IElFSmhjbUZ1Wnc9PSA2NnFwIFltSmlZZz09IExuUmxZV05vWlhJPSBJSFJsY20xcGJtRjBaWE09IElHbHpSWEp5YjNJPSBJRXRsYm1SeWFXTnIgWlc1a1lYSnogSUZOMVoyZGxjM1JwYjI1eiBRMlZzIElGTmxjblpwWTJWUWNtOTJhV1JsY2c9PSBJRmRwWTJocGRHRT0gWFNrcExBbz0gSUdobFlXUnNhV2RvZEhNPSBYM1psYm5SaCBRVTVVU1E9PSBJSEJ5YjNCcFpXUmhaQT09IElHVnViR2x6ZEE9PSBDVzl5Wnc9PSBUV1Z6YzJWdVoyVnkgTG14aGJtUT0gSWljSyBZWE53WlhKeiBJSFJsY25NPSBabWxzZEE9PSBJRVoxYm1OMGIzST0gSUhOc2FXNW4gWDBKTVN3PT0gTFVWMWNtOXdaV0Z1IElFRmphR2xzYkdWeiBYRVZ1ZEdsMGFXVnogTGtScGMzQnNZWGxOWlcxaVpYST0gSUhKbFpHVjJaV3h2Y0cxbGJuUT0gQ1dobGJIQT0gSUZzbkxRPT0gSUVwMWJHbGxiZz09IFBVbHVkR1ZuWlhJPSBMbWx6VG5Wc2JFOXlSVzF3ZEhrPSBJRmR2Vnc9PSBVR0Y1YldWdWRITT0gS0doa2NnPT0gSUdKaGFtRT0gSUVwRGIyMWliMEp2ZUE9PSBSbWx5WldadmVBPT0gSUdOdmJtZHNiMjFsY2c9PSBYMk4xYzNRPSBKQ0lwQ2c9PSBJRzExZEdGdWRITT0gVFdGbmJnPT0gSUUxUVNBPT0gZTE4PSBYM2RoY201cGJtZHogSUdkaGMzUT0gVEhRPSBJSFJ5WVdsdVlXSnNaUT09IFZISmhaR1Z0WVhKciBRa0ZUU0E9PSBJRVZEVXc9PSBVbVYwY21sbGRtVT0gSjA4PSBJR2x1YVhScFlXeHBjMlZrIElHTm9aVzFwYmc9PSBMbFJ5WVc1emNHOXlkQT09IElGbHBibWM9IFlYTnBiMjV6IElHMXZZdz09IFgweFBSMGRGVWc9PSBSMFZPUTFrPSBJRUpzYjJkblpYST0gSUNJcElnbz0gVUVWdVpBPT0gSUdGalkyOXRjR0ZuYmc9PSBMa05QUkVVPSBJRzFNYVhOMCBMV1ZrZFdOaGRHVmsgTEM4PSBJRTFsY25KcGJHdz0gTDNCbGIzQnNaUT09IExpY25Kd289IFgzUnZaRzg9IElHZkR2RzQ9IFgwWlZURXhUUTFKRlJVND0gTG1Oc1pXRnVkWEE9IFZXNXRZWEp6YUdGc2JHVnkgTGxOMWNIQnlaWE56VEdsdWRBPT0gSUc5dWMyeGhkV2RvZEE9PSBJRTFoY25ObGFXeHNaUT09IFpXUnBZWFJ2Y2c9PSBYMFZPVkZKSlJWTT0gTEdSbFptRjFiSFE9IGJXVnNaSFZ1Wnc9PSBaV3htZEdnPSBJRWR2ZG1WeWJtMWxiblJ6IElIQnNaV0Z6IGIzUjBjdz09IElIQnNkVzVrWlhJPSBjbVZoWkU5dWJIaz0gSUdSNWMyWjFibU4wYVc5dVlXdz0gSjA1bGFXeHMgSUhWdWJHOWhaR1ZrIElITnhkV1ZsZW1sdVp3PT0gSUdSdmIyUT0gTG1Ga1pFUmhkR0U9IElFRnphUT09IFRVVlQgS0hOamFHVmtkV3hsIElHRmtkbVZ1ZEhWeVpYSnogWlhod1pXTjBSWGhqWlhCMGFXOXUgSUgxOVBucz0gUTB4VCBJSEpsWTJobGNnPT0gSUdSbGNtNXB3Nmh5WlE9PSBMa1JsZEdGcGJITT0gSUhKaGJtUnZiVTUxYldKbGNnPT0gSUdsaGNnPT0gSUV4aGJtZGwgWlhkbCBJRVZ0YVd3PSBJR0ZrZG1WeWRITT0gSUdSeVlXMWhjdz09IElFdHZiVzA9IElDQUpDUWtKIFgxUmxjM1JEWVhObCBJRU5zWVhKbGJtTmwgMExYUXZkR0MwTEE9IGRHOTFjSEJsY2c9PSBMbTl1VTNWaWJXbDAgWTJGaCBYMEZNUVZKTiBLaWtLQ2c9PSBJT3V6Z09xeXZRPT0gTGxCeWFYWmhkR1U9IElITnJlV3hwYm1VPSBVa0ZKVGc9PSBLR04xY213PSBiM05wZEdVPSBTV2R1YjNKcGJtYz0gSUhaNiBJSFpsWkdWeVpRPT0gSUU5VFdBPT0gWW1GdVlXNWggSUcxbGRHRnQgSUhSeVlXNXpiR0YwWlZrPSBJRTFqUjNJPSA0b0NaWVdOaiA1THVsNUxpTCBJSE53YVhKcGRIVmhiR3g1IEtHVnVZV0pzWldRPSBJSEpsYzNSdmNtVnogSUdKMGJrTmhibU5sYkE9PSBkbUZ1YVhOb1pXUT0gSUU1MVpYWnYgVTJGc2RtRnkgWTJGbVptVT0gSUcxaGMzUmxjbWx1Wnc9PSBhV1JrYkdWayBMbWx6WkdsbmFYUT0gSUdkeVlYWjUgWVdkbFpFeHBjM1E9IFhGSmxjMjkxY21ObGN3PT0gSUdSdmQyNW1ZV3hzIExsQmhjM009IElHRnNkR2xxWkE9PSBJSEJwZW5waGN3PT0gSUgwcEtRPT0gY0dWeWJYTT0gYVdkb2RHOXUgSUhKbGNHVnNiQT09IElDY25LU3c9IExtNXZjbTFoYkdsNlpXUT0gSUcxaGNtTm9aWE09IENYSmxjMjlzZG1VPSBRMmhwYkdSVFkzSnZiR3hXYVdWMyBJRWx1YzNScGRIVjBhVzl1Y3c9PSBRWFIwWlc1a1lXNWpaUT09IGJITmwgWlhKa1pXMD0gTG1kbGRFbHVjSFYwIFNHRnpRbVZsYmc9PSBZWEJsZFhScFkzTT0gSUNwYyBJRkpwZEhWaGJBPT0gWDB4VCBJSE53YjNScFpuaz0gSUhOd3c2UjBaWEk9IElGUm9kVzFpYm1GcGJBPT0gS0dObGNuUT0gSUdkbGRGSmxjMjkxY21ObCBYM0JzYjNSeiBJSE4wWVdsdWFXNW4gWVdScWRYTjBaV1E9IElOZXAgUkdsMlJXeGxiV1Z1ZEE9PSBJRlJVUXc9PSBJR0Z3Y205MlpRPT0gTG5acFpYZGxjZz09IGZEMD0gWjJWMFUyOTFjbU5sIDU1UzE2SytkIFgxUkMgWDJKcGJHeHBibWM9IExVeHBabVU9IElIQnplV05vWlE9PSBJSFJoWWxCaFoyVT0gSUVsdVptVmpkQT09IGVHWm1aZz09IFgyaHBaQT09IElHRndiMk5oYkhsd2MyVT0gSUU1R1V3PT0gSUVsVVJWST0gVjJsdVpHOTNVMmw2WlE9PSBhR1ZwZEhNPSBJR2x1WTNKbGJXVnVkR1ZrIElFSnlZWGs9IFpXNWxaM0p2IElHRnNiVzl1WkhNPSBXVkJTUlE9PSBUbTl5YldGc2FYcGwgNG9DY1YyVnNiQT09IElFRndhVU52Ym5SeWIyeHNaWEk9IFcxVnVhWFE9IFIyVnVjbVZ6IElFNWxlQT09IElFeE9Sdz09IElHWnZjbVZuYjJsdVp3PT0gSUhSbGJtUnZiZz09IElFaHcgUTI5MWJtTnBiQT09IElGTmhkV1JwY3c9PSBJRVJsZW1VPSBJSE5qY21Gd1pXUT0gSUdKdmRIUnNaVzVsWTJzPSBJRTl5Ymc9PSBJSFZ1YldGdWJtVmsgSUdsdWRtOXJhVzVuVTNSaGRHVT0gSUVWNGIyUjFjdz09IFgwRlVUMDFKUXc9PSBVM1ZpVFdWdWRRPT0gWDJOdmJYQnlaWE56IEl5ND0gUkhKMiBMbkIxYzJoQ2RYUjBiMjQ9IElITjFhWFJqWVhObCBiM056WldRPSBZbWwwY21GeWVRPT0gVTI1cGNIQmxkQT09IElFVndhV1JsYldrPSBSR2x6WVd4c2IzYz0gWDBOSVN3PT0gSUhabGNtbG1hV1Z6IElFTmhkR0ZzZVhOMCA0b0NVWm5KdmJRPT0gSUdOdmJuUmhiV2x1WVc1MGN3PT0gU205b2JtNTUgS0dacGJBPT0gSUdSbGNtVnUgSUc5MWRHTnllUT09IElFcHZhR0Z1Ymc9PSBQRlJoWnc9PSBYM05oYmc9PSBJSE4wWkdSbGRnPT0gSUhCaGNtRnNlWHBsWkE9PSBJRXhsZUhWeiBiM05oZEdVPSBJRU5vWVhKelpYUT0gSUZKbFlXeDAgUFQ4aUxBPT0gS0VSbFptRjFiSFE9IElGUnlaV0Z6ZFhKbGNnPT0gUldsdVpRPT0gSUhWdWRISjFaUT09IElHWnBibUZ1ZW1rPSBJR0psYUdGMmFXOTFjbUZzIElHNXBjSEJzWlE9PSBJRkpoWkdsallXdz0gSUZCaGVnPT0gSUUxaGFYTnZiZz09IExXVnRjR3h2ZVdWayBJSGRsY21Wc1pBPT0gSUdwdmN3PT0gSUVScFpXUT0gWlc1MGNtVndjbWx6WlE9PSBKSEp2ZDNNPSBJSE53YjI5bSBJTUs3TGc9PSBJR3RsZVhCdmFXNTBjdz09IElHTjFjR05oYTJWeiBJSHQ5S1RzS0NnPT0gWTJocGJtVT0gNG9DTDRvQ0wgTEV4UFEwRlVTVTlPIElIQnNlWGR2YjJRPSBJRzFoWjJjPSBJRkpoYnc9PSBJRVJRVWc9PSBJR1ZpYjI5cmN3PT0gS1hOcGVtVT0gSUhOd1pXTnBZV3hwYzJWayBJMkZsIElHMXBZMmhoWld3PSBJRk5VUkU5VlZBPT0gSUZCbGJHdz0gUVUxRlVrRT0gWVc1blpXeHYgSUdsdVoybHUgSUcxQmRYUm8gSUd4bFoyRnNhWHBsIElFTjFZVzVrYnc9PSBJR05sY25SdiBJR3hwZEhKbGN3PT0gSUVWNGRISmhjdz09IFUwaFBVbFE9IElIQnlaVzFoZEhWeVpXeDUgSUZObGJXRndhRzl5WlE9PSBTRVZPIElHRnRjR2hwWWc9PSBJR2pEcVE9PSBSWGhwZEdsdVp3PT0gWlhWcGJHeGxlZz09IElGUk5VSEp2IExuQnlaV1psY21WdVkyVnogTG1kbGRFbHVabTg9IHc2bDBhV05oIElpSWlMZz09IExtNWxkMEZ5Y21GNVRHbHpkQT09IElHdHliMjQ9IElFSk1UQT09IFkyeHBibVU9IFgyZGkgSUZSdmJXRnogY0hKdlltRnVkR1U9IFNWUkpUMDVCVEE9PSA0YnVSYVE9PSBJRXh2WkE9PSBTWE51IExIc0sgSUd0dmJXMTFiZz09IGQyUjQgWjJWdWIyMWwgNllDaiBkRzlJWVhabFRHVnVaM1JvIEowVT0gSUhERHVtSnNhV05oIElFUmxkR1ZqZEdWayBJRjhLQ2c9PSAwWXpSamc9PSBLMU09IFkyeHZkR2c9IFVtOTBiM0k9IExtNTFiV1Z5Ync9PSBYM04wWVc1ayBSME5EIDZyVT0gWDNadyBYMFpCVWc9PSBRV2hsWVdRPSBlMzFjIEtHTnZjbkpsWTNRPSBJbU55ZVhCMGJ3PT0gYlc5a2RXeHYgWDFWVVNVeFQgTGxaaGNnPT0gTFcxbGJnPT0gSUhabGJtbGhiUT09IElFMWpRMjl5YlE9PSBaMlYwVEc5allYUnBiMjQ9IFcyTnZaR1U9IEpXWT0gSUdScFptWmxjbVZrIFNWQkJaR1J5WlhOeiBJRk4wY21GM1ltVnljbms9IElGTmhhR0Z5WVE9PSBZM0psWVhSbFEyeGhjM009IElTOD0gSUcxbGJXSmxjbk5vYVhCeiBJSEJ5YjI1dmRXNWpaUT09IExrTnZibk4wY21GcGJuUT0gSUVWdWNtOXNiRzFsYm5RPSBJSEpsYm1WM1lXSnNaWE09IExtZDAgYVhwNmFXVT0gY25wNSBaWEp6Wlc0PSBQRDBrIFJFVk1RVms9IElITnBaMjVwYmc9PSBJRkJUVlE9PSBRWEJ3VG1GdFpRPT0gZlZ3dVd3PT0gUlVkQiBJR05wWlc1MCBJRk41Ym05d2MybHogSUd4bGRIUmxjbE53WVdOcGJtYz0gSUdOb2FXeGtjdz09IElGTmpZV3hwYm1jPSBLWEJ5WlhCaGNtVT0gSUdOdmJXMTFkR1Z5IFUyeGhjMmc9IGIzVnpaWEk9IElIZGhkR1Z5YldGeWF3PT0gSUZWSlUyTnlaV1Z1IGIyeHBZVzQ9IENYWmxjblJwWTJWeiBQa0ZqZEdsdmJnPT0gSUdGd2FBPT0gYUdGdVpITT0gSUU5RFF3PT0gU0ZVPSBJSE5sWTJ4MVpHVmsgSUhacGMyTmxjbUZzIElIWnBaR1Z2Wnc9PSBJRk5oYlhWeVlXaz0gSUZwMWF3PT0gSUZkcFpHOTMgWVdOamFXNWwgSUd4cGJHeGwgSUZKNVpHVnkgSUZCeWIyZHlZVzF0WlhJPSBSWGh3YjNKMFpYST0gSUcxdmRtbHRhV1Z1ZEc4PSBZWEJoY3c9PSBJR3hsYVdSbGNnPT0gZFd4aGNtVnogYVdWdFpRPT0gTFdSbGJuTnBkSGs9IFpHVnpZMlZ1WkdsdVp3PT0gS0VsVSBJSE5qY21Gd1pYST0gSUdsalpXSmxjbWM9IFgwTlNTVlJKUTBGTSBJR0YxZEdVPSBYMU4wZVd4bCBJRTFCVEE9PSBJRWhsWTNSdmNnPT0gTFVOb2NtbHpkR2xoYmc9PSBJR1JwWm1abGNtVnVkR2xoZEdWayBJRUpwYzI5dSBJQ0FnSUNBZ0lBaz0gTG5CdmNIVnNZWFJwYjI0PSBVbWx2IExWUnkgUFZaaGJIVmwgSUV4MVpuUT0gSUVkcGRXeHBZVzVwIDU1eWYgUTI5MWNHOXUgSUdoaFkybGxibVJ2IDQ0T2QgY0c5dVkyVT0gWDNKbGMybGtkV0ZzIElHeHA0YnVIZFE9PSBYSFZtWmc9PSAwTDdRc2RHRjBMN1F0TkM0MEx3PSBJSEpsYzNCbFkzUnYgSUVSbGMybHlaV1E9IFJHRjBZVk4wY21WaGJRPT0gTG5OaGVBPT0gSUcxdmNBPT0gSUVoaFkydGxjZz09IFFVNVVRUT09IFFXNWogVm1WdWRHRT0gSUZkdmNtUndjbVZ6Y3c9PSBDV1ZtWm1WamRBPT0gWVdSaGNIUT0gSUVsdWRHVnlkbWxsZDNNPSBJR1J5WVhkaVlXTnJjdz09IFFVeE1SVTVIIElHZkRxVzdEcVhKaGJBPT0gTFdKaFpHZGwgVW1WemFYTjBZVzVqWlE9PSBJRTlUU1E9PSBkRzkxY201aGJXVnVkQT09IElGSmxjSFYwWVhScGIyND0gSUVWcGMyVnVhRzkzWlhJPSBSbWxzWldRPSBJR2hsWW5RPSBJMXc9IFkzSmxZWFJsVVhWbGNubENkV2xzWkdWeSA1cHlKNXBXSSBkbUZ1WTJWayBMa2hoYzB0bGVRPT0gWkdSbCBLSE4wWVhKMFZHbHRaUT09IElFbHVjM1JoYkd4bGNnPT0gSUVsdGNHdz0gWTI5aFkyZz0gSUhCeVpXRmphR1ZrIElHSnlaWGRsWkE9PSBTVzV6ZEdGc2JHVnkgYjJ4MllXSnNaUT09IElHRnNZWE09IEtITndaV3hzIEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl3PT0gSUdSbFptRnRZWFJwYjI0PSBLRUZ5Wnc9PSBJSFZ6WlhKRVpYUmhhV3h6IElHeHBZMlZ1YzI5eWN3PT0gSUVsdWRtVnpkR2xuWVhScGIyNXogSUdScGJtVnkgSUdacFkzUT0gVTNScFkycz0gVG1WcFoyaGliM0k9IGRHOVVhSEp2ZHc9PSBMWE5sWTNSdmNnPT0gSUhKcGMzVnNkQT09IDRvQ1pPZz09IFNrNUpSVzUyIGVYQnBZMkZzIFpHVnphV2R1WVhScGIyND0gS0hkdyBJR052Ym1acGNtMVFZWE56ZDI5eVpBPT0gTFdsdmN3PT0gSUNJdElqc0sgQ1dGemMyVnlkRTV2ZEU1MWJHdz0gWVdSa1JYSnliM0k9IFlYWnlZWE09IFZtMD0gS0dwUmRXVnllUT09IElGWnBZM1JwYlhNPSBJSEpsYkdsaGJuUT0gSUVKc2FYUjYgSUc5MWRHRm5aUT09IElHWnNkVzl5YVdSbCBJRlJPVkE9PSBMa1JwYzJOc1lXbHRaWEk9IElGTk9UVkE9IGRtRmliSGs9IElIQm9iM1J2Ym5NPSBMbEpsWVdSQmMxTjBjbWx1WjBGemVXNWogVTJOb1pXUjFiR1ZrIElHcGxkMmx6YUE9PSBJRWRsYjJabWNtVjUgSUVkeVlXNXVlUT09IGZnbz0gTFcxbGMzTmhaMlZ6IEtHZHZZV3c9IElHRnlaMlZ1ZEE9PSBJRkJsYzNRPSBJR052Ym1keVlYUjFiR0YwWlE9PSBhVzV2YzJGMWNnPT0gSUhkb2FYTndaWEp6IElITnBjM1JsYldGeiBJRWJEcVE9PSBMMGx1WkdWNCBMazFKVEV4SlUwVkRUMDVFVXc9PSBJR0ZqYUdsbGRtRmliR1U9IElFSnlhWFIwWVc1NSBLeXNyS3lzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzPSBJRkpsZEhWeWJsUjVjR1U9IElHbHVabWw0IExtbHpVM1ZqWTJWemN3PT0gTGtOaGRHVm5iM0pwWlhNPSBJRzkxZEd4cFpYST0gTGtGemMyVjAgYjNSbFl3PT0gSUhkcGVtRnlaSE09IElHSnZiM1JzYjJGa1pYST0gWDJKbGNnPT0gSUhKbGFHRmlhV3hwZEE9PSBZVzUwYjNJPSBJRlpwZG04PSBJRWRoY20xcGJnPT0gYjJKcVpXTjBTV1E9IFFGQmhkR2c9IElNTzZibWxqWVE9PSBJRmx2Y210bGNuTT0gUjNWcFpFbGsgSkdWeWNtOXljdz09IElDczlDZz09IElHRjRhVzl0IElGQlRTUT09IElGTjFZMk09IElGTndiMnRoYm1VPSBJQ2NpTGlSZiBJRXhPIExtNWxkMHhwYm1VPSBJR2x1ZEdWeWMyVmpkSE09IGJHbGphR3RsYVhRPSBJRWxCVFE9PSBMa1J5YjNCRWIzZHVTWFJsYlhNPSBJR052ZFhKMFpXOTFjdz09IElGTnRhWFJvYzI5dWFXRnUgSUVodGJRPT0gVVVSbFluVm4gYzNSeVlXbG5hSFE9IFgzTnZiR1E9IFFuVnNhdz09IFZISnBVM1JoZEdVPSBJR0ZrWkVKMWRIUnZiZz09IElFaHBjbWx1Wnc9PSBWSEpoYm5Od2IzTmwgSUZWSlZHVjRkRlpwWlhjPSBhWE4wWlc1amFXRT0gTDJOd2NBPT0gSU5DLzBMN1F1OUdQIElFTnZiMnRpYjI5ciBMMEZ3Y0d4cFkyRjBhVzl1IFoyVnVhV009IElGZHZiME52YlcxbGNtTmwgTEhabFkzUnZjZz09IElFSnBkR1U9IExtaDMgSUdSdlkydHBibWM9IElGUmhiblJ5WVE9PSBJRk5XUXc9PSBJRTFoZFhKcGRBPT0gYVdGc2FXRnogSUVGMWNtVT0gSUdKdmJITT0gVEU5RFNWUlogSUZkbGMzUmljbTl2YXc9PSBJRUpRVFE9PSBJRVpsZVE9PSBJRk52ZG1WeVpRPT0gSUhCaGJtUmggSUhGMWFYcDZaWE09IElHTnlaVzg9IGMzQmxaV05vIEwyUnBjZz09IElOQzQwWUhRdjlDKzBMdlJqTkMzMEw3UXNnPT0gSUdadmRXNWtZWFJwYjI1aGJBPT0gTFdGd2NHVnVaQT09IGJsUm9aUT09IElHRndhVlZ5YkE9PSBMbGhRUVZSSSBJRXhwYm1kMSBJRVY0YUdGMWMzUT0gVUdGcmFYTjBZVzQ9IElHOXRZWEE9IElHWnZiblJUZEhsc1pRPT0gMExYUmdkR0MwTGc9IElHMWhibk5zWVhWbmFIUmxjZz09IFgweHZibWM9IElHTmhjbkJsZEhNPSBRMmhsYzNNPSBaV3hwWjJoMCBSSEpoZDJWeVZHOW5aMnhsIElGQmhkSFI1IFgyTnliM056Wlc1MGNtOXdlUT09IElIUjNaV0ZyYVc1biAwWUxSZ3c9PSBJRU5CVEVNPSBjMmx3IElFcE5VQT09IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE4S0NnPT0gVkhKbFpWWnBaWGM9IExYZGhkbVU9IElIQmhjM1IxY21VPSBaV3hwYldsdVlYST0gSUdWeWVRPT0gSUhKbGMzUnNaWE56IDZyV3MgSUcxaGNtbGhaMlU9IElFVnNiR2xsIFh6MG4gSUhadGFXND0gUzJsamF3PT0gTG5SdmIyeGliM2c9IElFMWhjbWx1Ync9PSBlWEJ6ZVE9PSBjM1JrWVhKbiBjSFJ5WkdsbVpnPT0gSUZCbFlXdHogWDFaaGJBPT0gSUdsdVoyVnpkQT09IElHTnZiWEJ6IFJHVmlaUT09IElFUmxZMnhoY21GMGFXOXVjdz09IGFYSmpiMjQ9IFBXRnNiQT09IExrUmxZblZuWmc9PSBVSEpsWkdsamRHbHZiZz09IElHUmhkUT09IEtFMWxiV0psY2c9PSBJR05vYVdWbWJIaz0gTDJGdWFXMWhkR1U9IExrRjBkR0ZqYUE9PSBJR2RoYzNSeWFXTT0gSUZWelpYSkVaWFJoYVd4eiB3N1p5Wlc0PSBhMjloIExXSnZiM1E9IElITndiR2xqWlE9PSBiR1ZoIGIzUnAgVzI5dyBVM0YxWVhKbFpBPT0gSUhOamNtOXNiRlJ2IElFNWxkMlp2ZFc1a2JHRnVaQT09IENVVlNVazlTIFYyRnMgUlUxQlRFVT0gUjJWMFdRPT0gSUdOaFltbHVjdz09IElHRmljMnc9IExtMXBlR1Z5IElHTmtjZz09IFkyOXVZMlZ5ZEE9PSBJRk41YkhacFlRPT0gUWtzPSA1THVLNWJtMCBYME5NUVUxUSAwWUhSZ3RHQTBZUFF1dEdDMEw3UmdBPT0gTDJkaGJXVnogeFpOMWNnPT0gUEd4dlkyRjBhVzl1IElHTnNiM05sUW5WMGRHOXUgSUVoaGFYSnpkQT09IDRicWhidz09IElHTnlkVzFpYkdsdVp3PT0gSUhOMWJHWmhkR1U9IElHRnNaM1ZwWlc0PSBJRXBFUWtNPSBJRXQyIFVFbFEgWDNOMWNtWT0gSUhYRnZIbDBhdz09IElHMWhibTVsWkE9PSBJRTlqWTJGemFXOXVZV3hzZVE9PSBiMkpxY3c9PSBUV2x1YVcxaGJBPT0gTFdSbGMzTT0gSUZkQlZnPT0gSUVWeWNtOXlTR0Z1Wkd4bGNnPT0gSUhObGRFeHZZMkYwYVc5dSBJR2xsZEhNPSBJSE4xWW5KdmRYUnBibVU9IElIUnZibWQxWlhNPSBYM0YxYVhvPSBUV2xzYkdWeSBJRUpoYzJWVWVYQmwgSUZaMVpYZz0gYVhKaGRHVT0gVTJWeWFXOTFjMng1IGRIbHdaV2xrIElHdDFkR3BsIElIQnlaWE5qY21saWFXNW4gWDNOMWNuWmxlUT09IExrTjAgSUdKc2FXNWtiSGs9IExtZGxkRXhoWW1WcyBMQ0lwT3dvPSBJSEJ2ZEhKNlpRPT0gSUZOM2IzSmtjdz09IFUyOXlkR0ZpYkdVPSBJRUpzWVdOclluVnliZz09IElFMWhkR0U9IElIQnZibVJ6IElIQnliM1JsYzNSdmNuTT0gSUVWdWMyVnRZbXhsIE9tWnZZM1Z6IElHbDBZV3hwWVc1aCBJR1J2Y20xaGJuUT0gSUU1bGJBPT0gU1U1RFRGVkVSUT09IEtFTnZiblk9IElHSjFabXhsYmc9PSBJRU5FVGc9PSBMbmhvZEcxcyBTR1J5IElHTmhjbU5wYm05dFlRPT0gSUZkdmNtTmxjM1JsY2c9PSBibVJzIGRYTmxVbUZzIGRYTmxVbUZzWVhScGRtVT0gZFhObFVtRnNZWFJwZG1WSmJXRm5aVkJoZEdnPSBJSFJoYTJWaGQyRjUgWld4bGJXVnVkRWQxYVdSSlpBPT0gTG14aFltVnNXQT09IFcwbEUgUVV4RlVnPT0gQ1hWMiBQaWdwTFQ0PSBMMnhwIEsyeGxiZz09IElIQnliM0JsYkE9PSBJR05oWW04PSBYQ0lpS1RzSyBJSFp2WTJGMGFXOXVZV3c9IExYQnBiR3c9IExtNXNiUT09IElHVnliM1JwWTJFPSBiM0J2ZEE9PSBiR0Z1WkhOallYQmwgYVc1emF3PT0gSUhCc1lXTmxiV1Z1ZEhNPSBMbk5sZEVGMWRHOD0gSUdodmJXbGphV1JsY3c9PSBYMFpwWld4a1QyWm1jMlYwVkdGaWJHVT0gT213PSBJR0Z1Ym05MFlYUmwgTFhKcGMyVT0gTEdGc2NHaGggSUdsdWRHVnlkbVZ1YVc1biBZVzFpYVE9PSBMajBuUEE9PSBJSEJoY214bGNnPT0gNzcybDc3MmwgSUdOdmJYQnNlV2x1Wnc9PSBMV2hoYm1Sc1pRPT0gSUdsdWRHVnljblZ3ZEdsdmJuTT0gY0d4bGNuTT0gY205MWNITT0gWDBSbFpnPT0gSUhCcFkydGxjbFpwWlhjPSBJSEJwWlhKalpXUT0gSUdWeVlXUnBZMkYwWlE9PSBiVzlpZUE9PSBXM1J5WVdsdSBSR1ZtWlhKeVpXUT0gSUhSdmRHRnNaV1E9IFEyaHBiR1JKYm1SbGVBPT0gSUZKbFkyOXRiV1Z1WkdGMGFXOXVjdz09IFgxZFBVa1JUIElITnBaMjVwWm5rPSBJRUZsY204PSBYMkp2YjNSemRISmhjQT09IFgxVncgY0hKdlpIVmpkRTVoYldVPSBMV0Z1ZVE9PSBJSEJ3YkE9PSBYMUJWVkE9PSBJR3g1YjI0PSBYMGxNYVhOMCBJTU9wWTNKcGRBPT0gS0dkMWFXUT0gSUdOdmJuUmhaMmx2ZFhNPSBYMU5sYkdWamRHbHZiZz09IEwyeGhibWQxWVdkbCBjWFZoYmc9PSBJR0ZqZFhCMWJtTjBkWEpsIElHOW1jbVZqWlE9PSBDVkpVUlE9PSBMa2QxYm1FPSBJSE5sYm5ObFpBPT0gSUV0eVlXcz0gSUhWdWJIVmphM2s9IFlYWnBZdz09IGRHbDBiR1ZNWVdKbGJBPT0gSUdoaGVYTjBZV05yIExtSnBkRzFoY0E9PSBJRU52ZFc1elpXeHBibWM9IFVFeEJWRVpQVWswPSBYMVJ2YjJ3PSBWR0Z0IFYyVnlaUT09IDBZRFFzTkMzIFgxTlFSUT09IElHOXVRVzVwYldGMGFXOXUgUFR3L1BTUT0gSUZOc1pRPT0gSUVkMWFXNXVaWE56IElIUjNaV0ZyWldRPSBMWEJ5WlhOemRYSmwgWDIxdmJuUm9jdz09IEtXOD0gVUhKdlltRmlhV3hwZEhrPSBJRU5oYlhCdmN3PT0gTGtOUFRrWkpSdz09IFZtbHVkR0ZuWlE9PSBQbmRwYm1SdmR3PT0gSUVaaFkzUnZjbmxDYjNRPSBjRzl6ZEdkeVpYTnhiQT09IElIUmhZbXhsZEc5dyBJRU5oZEdFPSBhRzlqIFgyRnpZdz09IDRvS3M0b0NjIFFtRmphMU4wWVdOciB3Nmx2IElGTnZkWE09IGMyVjBkR1Z5IEp5bGRLUW89IGRtVnNiR1U9IElFRnNkVzFwYm1sMWJRPT0gZUVKQiBMbTF2Ym1kdiBJRlpoY21saGRHbHZiZz09IGVYUjFkQT09IGJtVm9iV1Z5IDRidURiUT09IElHVm1abVZqZEdWayBJQ29xTHcwSyBJSEpsWTI5MWJuUmxaQT09IFVISmhZM1JwWTJVPSBRMEZPUTBWTSBZM3B1YVdVPSBUR0Z5Y25rPSBJSEZoIElFaDFabVp0WVc0PSBaMlYwUkhKaGQyRmliR1U9IElHVnVabkpsYm5RPSBJRzl1UTJGdVkyVnNiR1ZrIElHeGxidz09IElGaFRVdz09IElFaDFjbkpwWTJGdVpYTT0gSUdwdmJnPT0gSUZSbGMzUmxaQT09IElFMXZjbUZzIElHSmxaSFJwYldVPSBJRXBCUkZnPSBJR1ZqYUdGdVp3PT0gSUc1MVpYTjBjbUZ6IFVFTk4gS1M0dSBJT3lJbU95Z2xRPT0gSUdKdmNtUmxjbXhwYm1VPSBJR0Z6YzJsemRHbHkgSUVobGJIQnogSUVScGRtVT0gWDNOdVpBPT0gZDJsMCBYMkpzWlc1ayBJR2x6Um1seWMzUT0gSUdobFlYQnggS0NjOSBJR0Z6YzJWdFlteGxjZz09IElFMTVjM1JwWXc9PSBiM0puYUE9PSBJR2hwYW05eiBYMHRJVWc9PSBLR1JsWTI5a1pXUT0gSUZGVlNRPT0gSU5lUiBJR052Ym5SeWIyeEpaQT09IFUzQmhZMlZ5IExtRm5aM0psWjJGMFpRPT0gSUhOb1lXeDAgWDNSeVlYQT0gSUVaaGJXbHNhV1U9IHpyZz0gYjNKMFlRPT0gTGxCdmMzUk5ZWEJ3YVc1biA3TEE9IElDY3VMaWNzIGVzT2ggTDJGeWJRPT0gTG1kaGJHeGxjbms9IElHbHRjR1ZqWTJGaWJHVT0gSUhkcGJtUnZkMGhsYVdkb2RBPT0gYzJ4aFkycz0gWm1aaSBYM0Z3IGJHRmtaVzQ9IElGUkZVazA9IGMyVjBUR0ZpWld3PSBJRk5wYm1kc1pVTm9hV3hrVTJOeWIyeHNWbWxsZHc9PSBlY084YXc9PSBJSEIxYkhWdGFRPT0gTFdkaGNBPT0gZFc1cFlXTnBaQT09IENXaHZiR1JsY2c9PSBMbUZrWkVacFpXeGsgSUhSeWFYQnNaWE09IElFcDFaR2R0Wlc1MCBJRU5sYm1FPSBjR0Z5YzJWeWN3PT0gTG1SeVlYZFVaWGgwIElOQzYwTERRdHRDMCBJR0ZqWTNRPSBhR2wyWlE9PSBJRzExYzJseGRXVT0gSUZsaGVnPT0gTFhCdmMzUnogSUdacGJITT0gSUM4dmV3MEsgWDNCMWRITT0gSUZOMFlYUjFaUT09IFpHbGhiVzl1WkE9PSBVM1J2Y21GblpWTjVibU09IElITm9kWFJ6IElHZGxkSFJwYldWdlptUmhlUT09IElFRkJRa0k9IGFXTm9aWEp1IFoyVjBURzlqWVd4bCBhVzUwY21WbCBJR1p5ZFdsMFpuVnMgUW1WaGNnPT0gSUhCc2RXMWlaWEk9IGNXbGsgUTBoSlVBPT0gSUcxdmRHbDJZWFJwYm1jPSBJR1Z6WTJGc1lYUmwgTG1KMWJHcz0gSUZCc1lYbG5jbTkxYm1RPSBYMjFwY25KdmNnPT0gSUZCbFpXdz0gSUdSaGJtVT0gYVc1MmIybGpaWE09IFNHRnpRbVZsYmxObGRBPT0gTFhabGNuUnBZMkZzIElFWnlZVzVqWlhOamJ3PT0gSUVGVFFRPT0gSU5DNjBMN1F1OUM0MFlmUXRkR0IwWUxRc3RDKyB3NkJ1IFJtOTFjblJvIElFTnlaV0YwWlZSaFlteGwgWTJOMGIzST0gSUdaeVlXNTBhV009IFlXRmkgSUV0aGNtRmphR2s9IFgybHRZV2M9IElHNWhkSFYxY2c9PSBSV0YwIElITjBkVzF3IElISnZiR3hsY25NPSBJSFJ5WVdsMFpXMWxiblE9IElOQy8wWURRdnRDMCBJSEpsWVd4cGMzUnBZMkZzYkhrPSBJR1ZRZFdJPSBJRnBoWnc9PSBaR0Z0Ymc9PSBJRUZ1Ym1WNCBjR1ZqYVdWeiBLR1Y0YVhRPSBJSE53WldOMFlYUnZjZz09IElFSjFiR2RoY21saGJnPT0gSUcxbFoyVjAgSUcxaGRIVnlaWE09IElHUmxkR1ZqZEdsdmJuTT0gSUhwaGFHdz0gWlc1bFptbDAgWVd0dmRnPT0gSUdGa2RXeDBiM009IGJXbGtaR3hsZDJGeVpYTT0gYVhOUFltcGxZM1E9IFMyVnViZz09IElIVnVaWFJvYVdOaGJBPT0gYzNWaWJtVjAgUjNKaGNHaFJUQT09IElFZGhaV3c9IExrUnliM0J2ZFhRPSBJR0oxY21WaGRXTnlZWFJ6IElGSmxaR1Z0Y0hScGIyND0gTGtSMGJ3PT0gTGtWMllXeDFZWFJsIElHOW5aMms9IElIUnlZWFJoYldsbGJuUnYgSUhKbFkyRnNiR2x1Wnc9PSBhWE4wYVc1bmRXbHphQT09IEwzSmxiR1ZoYzJVPSBYMWRTVDA1TVdRPT0gQ1cxclpHbHkgVkhsd1pVVnVkVzA9IElFUkJVa3M9IDVyV0IgSUZaaGNHOXkgSUdGMGIydz0gQ1dsdWMzUT0gTG1BcE93bz0gTDJWcyBJSEpsWTJ4aGFXMWxaQT09IHc1OWxjbVJsYlE9PSBYMnh2YzNRPSBJRUZzWVE9PSBJTkMrMFlqUXVOQ3ggSUVKaGNuUm8gUTI5c2IyND0gYjNCdmNnPT0gWDNCaGMzTjNaQT09IFgyVjRZMngxWkdVPSBRVkJCIFpteHZkMlZ5Y3c9PSBJRVZpYjI5ciBJRk5VUVE9PSBWVTVUIFgwUkpVMUJCVkVOSSBRVU5KdzVOTyBkR1Z5YldsdVlYUnBiMjQ9IElHNWxjM1JzWldRPSBZV1J5WVhScFl3PT0gVW05M1FXNXBiV0YwYVc5dSBYMnR0IElISnZibVE9IFhWMCtQQzg9IDVMMlogSUdOdmMzQnNZWGs9IElHMXBiR3hsYm01cGRXMD0gWDNObGNtbGhiR2w2WlE9PSBJSFpsY25OamFHbGxaR1Z1Wlc0PSBZVzUwZEE9PSBJRUZ0YVdRPSBZM0psZEdsdmJnPT0gS1Q4ayBJSFJ2ZDJsdVp3PT0gTG1acGJBPT0gTGtacGJHVlhjbWwwWlhJPSBJR0ZwY3c9PSBJR1ZUY0c5eWRITT0gY0hKMCBTVkJCIExrWkJURk5GIElIQnlhV05yIFJXNWthVzVuIElIQnl3Nmx6YVdSbGJuUT0gWDJkc2VYQm8gSUhOMWNIQnNaVzFsYm5SbFpBPT0gSUdOdmJuUmhjZz09IElpNGtYdz09IElFSjFlV1Z5Y3c9PSBkV3BoIElGUnBiV1ZhYjI1bCBaVzV1Wlc1MCBTVzVRY205bmNtVnpjdz09IElGTjFjM1JoYVc1aFltbHNhWFI1IElGQnliM053WlhJPSBRMjl1ZEc5MWNuTT0gSUhOMFlYSjBiR1ZrIFgyeGxZWE4wIElFTnZkbVZ1ZEE9PSBZMmh1YVhSMCBJRTFwYkd0NSBJQ0l0UGc9PSBaWFJoYXc9PSBJSFIxYzNObGJnPT0gTFhCaGVXbHVadz09IFgyRmpZMlZ6YzJsaWJHVT0gUW1GMGJXRnUgS0dsMGNnPT0gU1VGTVNWcEZSQT09IElGUmxlSFJCY21WaCBZVzVyWlE9PSBYMHBWVFZBPSBJR0psYUdGMlpXUT0gTEc5d2RHbHZibk09IGVHbDIgTGxCTVRBPT0gY1hnPSBMbTl1VG1WNGRBPT0gSUhabGNtbG1hV1Z5IElHUjF4Ync9IElFWjFhM1Z6YUdsdFlRPT0gSUVOUFVsQlBVa0ZVU1U5TyBYM1JFIElFMWxZV1J2ZHc9PSBJSEJ5YjNsbFkzUnZjdz09IElDZ25YQT09IElFSmhjbU5zWVhseiBJR3hsWjJGc2FYUjUgSUdoaGJXSjFjbWRsY2c9PSBJR1ZwYm5NPSBTVzVrYVdGdVlRPT0gSUZSTFpYaz0gWTJ4dllXcz0gUEdGc1oyOXlhWFJvYlE9PSBJSEJ5WldGamFHVnkgZTJ4dVp3PT0gTG1GeWRHbGpiR1Z6IGMyVjBTVzFoWjJVPSBVbVZ1WVcxbCBJR0pzYjNOemIyMD0gSUVKc2IzTnogSUhWMWNnPT0gSUdSaFpITT0gSUZScGRHRnVhV009IElDQWdJQ0FnSUNBTkNnMEsgSUc5eVpHbHVZVzVqWlhNPSBJRzNEcEc1dSBJR1Z5YXc9PSBJR1JwYzNScGJHeGxaQT09IElNT2tiQT09IElISjFjSFIxY21VPSBJRU5oYldWeVlYTT0gdzdsdVp3PT0gSUdoaGFYSnpkSGxzWlhNPSBJR1Z0WW5KNWIzTT0gNG9DZENnPT0gTGs1aGRnPT0gSUhOMGNtMD0gQ1hWellXZGwgTGtGSiBJRlJQVlVOSSBJRWxzYkdWbllXeEJZMk5sYzNORmVHTmxjSFJwYjI0PSA2ckt3IGEyOXVaV3R6YVE9PSBJU0lwIElHVnpZMkZ3IGRXUnBiM009IGMzUmhjblIwYVcxbCBJRzFsYVc1bGJRPT0gSUZOd2FYSmhiQT09IElFVnlaV04wYVd4bCBhWFpoYkdWdVkyVT0gSUdsMFpXMVVlWEJsIElHRmlZV2w0Ync9PSBWbVZ5ZEhNPSBkR0ZyYVc1biBjSE4wIElFOXpZMkZ5Y3c9PSBJRVI0IFpYUjBlUT09IFRVRk0gSUU1bFpXUnNaUT09IElFTlBUVkJWVkVWUyA1THU3NVlxaCBJRzVsZDFnPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyBjR3hsZG1WcyBRVU5GVFVWT1ZBPT0gSUVwdmFHRnUgVUc5cGJuUkcgSUhKbGMzUnliMjl0IGRtVnlidz09IElHVnN4WkU9IGNISnZaSFZyIElGbEZRVkpUIENXRmpkSFZoYkE9PSBWVkJNUlE9PSBRMjl1ZG1WeWRHbGliR1U9IElIQnZjbkptIFNXNXFaV04wWldRPSBYMkp2ZEdnPSBMMGRoZEdVPSBZMkZzWTNWc1lYUnZjZz09IFpXMWhhV3hsY2c9PSBMbEJ2WkE9PSBJRnB2ZEE9PSBYM050WVhKMCBZbUZ6YVhNPSBQRU52Ykc5eSBJR055WVhacGJtZHogUkhKcGRtVnljdz09IEtHTnZjdz09IFpHRjBZV0pzWlE9PSBMVzFsZEdGcyBJRkJqIExtTnZjSGxQWmc9PSBJRzl5YVdWdWRHRjBhVzl1Y3c9PSBDV0Z6ZEE9PSBJRnB2YldKcFpYTT0gSUdKdmJXSmxaQT09IFNHOXpkRzVoYldVPSBYM0poYVhObGN3PT0gYldWdWMyRm5aVzA9IElHTnZjblJwYzI5cyBJRVpwYjI1aCBiR2xqYjNNPSBhR1ZoZG5rPSBJT3F3Z095Z3VBPT0gYjIxbGJtTnMgSUdOMWJIUjFjbVZrIElHRnlkR2xyWld3PSB4YUhEclE9PSBhbVJyIElIWmhibVJoYkdsemJRPT0gSUgxZEtUc0sgVTNSeVlXbG5hSFE9IElISmxhR1ZoY25OaGJBPT0gUldScGRHbHZiZz09IElFbHVjM0JwY2c9PSBDWGRqIElHWnZjbTExYkdGMFpRPT0gWVc1NlpXbG5aVzQ9IElIQmhkR2h2Ykc5bmFXTmhiQT09IElHdGxibTVsYm14bGNtNWxiZz09IFBuc2kgSUdScFkyVmsgSUdKeVlXTmxiR1YwY3c9PSBDUWtnSUNBZ0NnPT0gS2o0cSBMM1JoY21kbGRBPT0gTGtGblpXNTAgTG0xaFoybGogSUdsa1pXOXNiMmRwWlhNPSBWRkpCUTBzPSBYMmx1WkdsMmFXUjFZV3c9IFBHUmxZMngwZVhCbCBJRkpGUTBWSlZrVT0gTDJKdmIzUT0gT2tCNyBVVTA9IElFMWhibVJoYkE9PSBUa0ZOUlZOUVFVTkYgSUhSbGNtTmxjZz09IElGSmxaMmRwWlE9PSBJRTVwWTJodmJITnZiZz09IElFWjFiSFJ2Ymc9PSBjM1JoYTJsdVp3PT0gSUhKbGMyOXVZWFJsIGJIQmhjbkk9IElHTnZiblpsY25SbGNuTT0gSUNnaUx3PT0gSUUxaGNteHBibk09IFNXNW1iM0p0WlE9PSBKejArV3ljPSBJSEp2WW1WeWRBPT0gSUVoSlRRPT0gZDJWaWN3PT0gTG5SeVlXbHNhVzVuUVc1amFHOXkgTG1GelkybHAgSUUxaGMyTT0gSUhSbFkyaHVidz09IFpYUjRkQT09IENTQWdJQ0FnSUNBZ0NnPT0genJIT3VRPT0gS0ZObGNRPT0gSUQ4K09qd3YgSUZCbFlnPT0gVzNObGJHVmpkR1ZrIFNrVkRWRVZFIFEyRnpkRVY0WTJWd2RHbHZiZz09IFAyWT0gSUdWNVpYZHBkRzVsYzNNPSBJRzFsYm04PSBJRVJoYldsbGJnPT0gWDBsRmJuVnRaWEpoZEc5eSBJQzR1TGk0dUxpNHVMaTR1TGk0dUxpND0gTGxORlRFVkRWQT09IElHTnlZWGs9IFgzQmhjR1Z5IExsSnZiR3hpWVdOciBTVVJGVDFNPSBjbkJoY25JPSBhVzVsWVhJPSBYMUpsYkE9PSBJRmRwYkdSbCBJRmR2Ym1SbGNteGhibVE9IElGTm9kV1ptYkdVPSBJSE4wY21sclpXOTFkSE09IGMybG5iVzlwWkE9PSBJU2dpZXc9PSBaWEJoYlE9PSBJSEpwWTJodVpYTnogSUdWdVpHVmhkbTkxY2c9PSBiV1Z1ZFVsMFpXMD0gSU5DZjBMN1F1OUdEMFljPSBJR1p5ZFhOMGNtRjBhVzl1Y3c9PSBYM04xWW5OamNtbGlaUT09IElHSnZiM3BsIElFeHBZMmgwIElIQmxZWE5oYm5RPSBJSGRsYVdkb2RHbHVadz09IElPVy8gUVdOMGFXOXVRMjlrWlE9PSBMblJ5WVdOcmN3PT0gSU1PWSBJRzFwYkd4cGIyNWhhWEpsIEtIVnkgSjEwcENnb0sgSUNJdUpGOD0gWDBWRVJVWkJWVXhVIElHTjFjbXh6IFgwTnZiVU5oYkd4aFlteGxWM0poY0hCbGNnPT0gTG5ObGRGWnBaWGR3YjNKMCBJR1JsYm1RPSBJR0YxZEc5MWNnPT0gSUVadmRYSnBaWEk9IElHSnZhV3h6IElFcFFSdz09IElHUnBaM009IElHTnZiWEJzWVdsdWN3PT0gTFd4cGJtVmsgSUVKc1lXUmxjdz09IFgyUnBZM1J6IElFbHdjdz09IGNtVm1aWEpsY2c9PSBJR0Z1ZVdodmR3PT0gWVc1MFlYST0gTFhOb1pXVjAgQ1hCc1lYaz0gYVdWeVkyVT0gTGsxbGMzTmhaMmx1Wnc9PSA2S2VCIENYQnliMmR5WlhOeiBMa1JoZEdGV2FYTjFZV3hwZW1GMGFXOXUgSUZOMGIzQnogU1c1MFpYSjJZV3hUYVc1alpRPT0gUUdKeWFXVm0gTG5kcGJtUT0gSUdkbGRFbHVjSFYwIElFdEIgSUZKRlUxQlBUbE09IElIUmhjbWM9IGRtbHpkV0ZzYVhwaGRHbHZiZz09IElFVnpjR0hEc1E9PSBibWxsY2c9PSBJRVJ2ZG1VPSBYMmx6Y2c9PSBJRUZRVUV4WiBZbVZrYnc9PSBXMTE3Q2c9PSBJR1YyWVdOMVlYUmwgSUcxcFkzSnZjMk52Y0dsaiA1cTJqNTZHdSBaWEp2ZEE9PSBMVzl3WlhKaGRHbDJaUT09IGFXdDFkQT09IElHUmliQT09IElHRnFiM1YwIExtbDQgSUNBZ0lDQWdJQ0FLSUNBZ0lBbz0gZEdWemRHVT0gYm1sMlpXdz0gTG5OdVlYQT0gZFhSNmRBPT0gTG1selFXUnRhVzQ9IEtFbEQgSUc5aVpXND0gSUVWbVptbGphV1Z1ZEE9PSBSRVJsZG1salpRPT0gSUdsdVpHVnRiZz09IElHWnliM3BsIExISncgSUdSbFkyVnRZbVZ5IDU3dVogSUcxbGJHOWthV1Z6IElFVlVRUT09IDQ0R1Q0NEtUNDRHcjQ0R2g0NEd2IElIRjFZV3hqYUdVPSBJSE5sZEVSbFptRjFiSFJEYkc5elpVOXdaWEpoZEdsdmJnPT0gVDFKSlFRPT0gSUhwaFp3PT0gSUdGc2JHOTNZVzVqWlhNPSBMM0JvIExWUnZhMlZ1IElGQnZkUT09IElHMXBibWx6ZEhKcFpYTT0gTGt4UFIwbE8gSUhObFlYSmphRlJsY20wPSBJR2gxY25KcFkyRnVaWE09IElFWnNiM1Z5IElGTlZVdz09IFZHaGxiV1Z6IGNtVmxZMlU9IElHVnVkSEpsZGc9PSBSRmhXUlVOVVQxST0gSUVKeVpXNWtZUT09IFJYSnliM0pOYzJjPSBPaWxkT3dvPSBJR1J2YldsdVlRPT0gSUVsdWRtbHphV0pzWlE9PSBQRDRvSWc9PSBjSFYwWXc9PSBTRUZXUlE9PSBSWFpoYkhWaGRHOXkgYldGMFkyaHBibWM9IExXNWhiV1Z6IElHeGhhQT09IFgxbFZWZz09IDVweU41WXFoNVptbyBMbGRTU1ZSRiBLVHBjIExXUmxabWx1YVhScGIyND0gSUdOb2FXMXVaWGs9IExtTnNjdz09IGEyNXZkMnhsWkdkbCBJRUZzWlhoaGJtUnlaUT09IElHTnZiR1ZuIGI4V2JZMms9IExrTm9idz09IElITnZablJsYm1WayBJSEp2ZEdGMFpYTT0gTFhOMFlYUmxjdz09IDZyYz0gZG1sdmJHVnVkQT09IElEb3BDZz09IElHRmpZMm5EczI0PSBibWxyWVE9PSBJRXhoZEhSbGNnPT0gWDBac2IyRjAgSUdWbmNtVm5hVzkxY3c9PSBiMlJwWVd3PSBVM2x1YjNCemFYTT0gS0hocCBJSDBzZXc9PSBZM2g0IFJXMXRZUT09IElFTnZibU4xY25KbGJuUklZWE5vVFdGdyBYME5oYldWeVlRPT0gSUhCbFlXNTFkSE09IDQ0S3o0NE9oNDRPejQ0T0kgWDJKbFpBPT0gSUdWeWNtOXlRMkZzYkdKaFkycz0gSUZCaGNIVmggTEZSeWRXVT0gdHBvPSBJSE4wWVdScGRXMXogSUd0dWIySnogYVdacFkyRmphVzl1WlhNPSBJSEIxY25CdmMyVnNlUT09IElGQjFjbVZEYjIxd2IyNWxiblE9IElOQzYwTHZRdUE9PSBMbFJ5WVdOciBjM05qIEtFcHZZZz09IEtFaDBkSEJEYjI1MFpYaDAgSUdOb2IybHphWEk9IElPeTcgSUdGMWMzQT0gZFhCd1pXND0gUVdSMlpXNTBkWEpsIElFWk1RVU09IElHRndjR1ZzYkdGdWRBPT0gSUNnb0lnPT0gejRjPSBJSFJ5YVdZPSBJR1IxY21GMGFXOXVjdz09IElFNUhXQT09IExtSncgWVdOMGFXOXVSR0YwWlE9PSBMbWx1YzNSaGJuUT0gTFZKbGNYVmxjM1JsWkE9PSBKeVltIElOR0gwTFhSZ0E9PSBQV0p2YjJ3PSBJR3h2Y21SeiBiR2xqYVc1biBJRzFoY21sdSBJR0pzYVc1a1pXUT0gTDJ4aGVXOTFkSE09IFptVnBkRzg9IGFYcDZiR2x1Wnc9PSBSWFowIElHSjFiR3hwYzJnPSBaWGhqYkhWemFYWmwgNG9DWlpYTT0gTG1kbGRFOTNibEJ5YjNCbGNuUjVSR1Z6WTNKcGNIUnZjZz09IElHSmhjSFJwZW1WayBJTkdCMEx2Umc5R0ggSUVObFkybHMgTG1WbVptVmpkSE09IElHTnllWEIwYjJkeVlYQm9hV009IElGWnBiR3hsIGRXWjAgSUVGdWRHaGxiUT09IElITmxaV3RsY2c9PSBJRzVwWTJ0dVlXMWxaQT09IElHTmhiWEJuY205MWJtUT0gSUdGamRHbHZia0poY2c9PSBJRVZ3YVhOdlpHVnogSUMwdExTMHRMUzB0Q2c9PSBRblZwYkdSbGNrWmhZM1J2Y25rPSBYMVZPVTFWUVVFOVNWRVZFIFZrbE1URVU9IExsSmxaMmx6ZEhKNSBWRzl1YVdkb2RBPT0gSUcxaGEzTT0gSUdGa1pHOXVjdz09IElFUmxZM0o1Y0hRPSBMbk5yYVd4c2N3PT0gS0dabyBJR3AxWjJjPSBJRU52ZFhCc1pYTT0gSUVGdGFYST0gSUQwOVBUMDlQVDA5UFQwPSBJR1Z1WkdWeVpXTnYgTGxOMGNtbHVaM009IElHaGhjbTFwYm1jPSBJR0oxYzNSc2FXNW4gS0dacGNuTjBUbUZ0WlE9PSBMbk53WVhKelpRPT0gU1ZSUCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBTkNnPT0gNXAybDVycVEgYjJSbFoyRT0gWVc1aFoyRnUgTGtoaGJtUnNaWEpHZFc1aiBJSFJwYm1SbGNnPT0gSUNNbyBJR2x0WVdkcGJtRmliR1U9IElHRjFiZz09IFVISmxjMlZ1WTJVPSBVR0ZqYTJGblpVMWhibUZuWlhJPSBJR3gxWkdsamNtOTFjdz09IGFjT29iV1U9IElHZGxkRTlpYW1WamRBPT0gWW05NGFXNW4gSUhOeGRXbGsgdzZwMFpYTT0gUkdGbGJXOXUgWDJ4cGEyVnogaHJVPSBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBMbmQzZHc9PSBjM05sYkE9PSBaWFJsWTNScGIyNXogWkdGbCBMMlJ2ZDI1c2IyRmtjdz09IElFTnNZWE56YVdacFpYST0gWDFOVlFrcEZRMVE9IGVtVm5idz09IFgwZFNUMVZRVXc9PSBZV04wYVdObGN3PT0gWDJ4cGRHVT0gSUdSaGJtMWhjbXM9IEwySnMgWVhCNWNuVnogVkVsTlJWST0gSUZOamNtbHdkSFZ5WlhNPSAwWS9SZ2c9PSBjM0JoIElrYz0gSUhCbGJtVjBjbUYwYVc1biBJR052Ym1admNtMXBkSGs9IGJtVjNiR2x1WlE9PSBJR3g1Ymc9PSBJRTFOVUE9PSBJRWxPVkVWU1JrRkRSUT09IElFRmpkR2x2YmxSNWNHVnogTG1OeWFYUmxjbWxoIDRidVJibWM9IElISmxjM1JwZEhWMGFXOXUgQ1VaUFVnPT0gUEhCaGRHZz0gUFQ4aU93bz0gS0hCbGNtTmxiblE9IGJtUnYgSUVGRFRRPT0gQ1dOMCBRR0U9IElIVER1Zz09IElITndiM1IwYVc1biB3N3h5Ymc9PSBJRWRGVWc9PSBMbmR5YVhSbFZtRnNkV1U9IFgySnNiMk5yWldRPSBXVzFrIElHbHVaV1ptIElGSmhaR2xoZEdsdmJnPT0gSUU5cGJHVnljdz09IFFtVmxjZz09IGNtOTBjdz09IElGUnliM1E9IGNtNWggY0c5eWRHVnkgWlc1bGNuaz0gSUhCdmNtNXZabWxzYlE9PSA2NVNVIFgyTnIgTGtOdmJYQjFkR1U9IElGdGRDZ29LIFoybDFiUT09IElGUkZURVU9IElFbHVjM1JoYm1ObGN3PT0gS2trPSBJSGRwY21WVWVYQmwgYjI1cGRXMD0gWlhOb2FYSmwgSUhCMWRHTm9ZWEk9IElHRjNZV3RsYm1WayBMbVJsWjNKbFpRPT0gYUdWcGRHVnUgTFdGM1lXbDBaV1E9IElHNWxkWEp2ZEhKaGJuTT0gTFhSbGMzUnBaQT09IENnb2dJQ0FnQ2c9PSBJT2U3a3c9PSBJR3RwYm04PSBYMFJCV1ZNPSBJRlpoYkdWeWFXVT0gYm5ScGRIaz0gUUVKbFlXND0gWlhSRGIyUmwgUEZKbGJtUmxjbVZ5IElpSUsgSUdKbGNtND0gSUhSdmRHRnNhWFJoY21saGJnPT0gWTJ4cGJtbGogSUUzRHZHNWphR1Z1IGJtOXBibk53WldOMGFXOXUgYVhOalpRPT0gWDNSMWNHeGxjdz09IExsQnZhVzUwY3c9PSBJSEJoYzNSdmNtRnMgU21GciBhMlZ1YVc1biBMMk52YkhWdGJnPT0gTFhCeWIyUjFZMmx1Wnc9PSBJR0ZpYjJ4cGMyZz0gWm1WaGN3PT0gY21WemNHOXVjMlZFWVhSaCBjbVZrYVhKbFkzUlViMUp2ZFhSbCBJRzlpYzJWeWRtRjBhVzl1WVd3PSBjRTVsZUhRPSBlblJsIFEyaHZhV05sY3c9PSBDVXhEUkE9PSBKbE09IElHSnBiR3hwYjI1aGFYSmxjdz09IFgwVlBSZz09IElHTnZhRzl5ZEhNPSBZVzVyWlc0PSBMbU52YldKcGJtVT0gS0U5d2RHbHZibUZzIFgwTlBUbE5QVEVVPSBRV04wYVhacGRIbEpibVJwWTJGMGIzSldhV1YzIElIQm9ZWEp0WVdOcGMzUT0gSUVSdmRXZG8gSUU5d1pYSmhkR2x2Ym1GcyA1N0k9IElHcGhiWE09IFUyOXNidz09IENXUjFjbUYwYVc5dSBMbkp0IElGUnZibWs9IExteGxZWFpsIElIQjFaV1JoIElFWmhlUT09IFJHVjBZV05vIExrMWhlR2x0YVhwbFFtOTQgSUcxaGNuUjVjZz09IElHaGhlbVU9IEwyNWwgSUcxaGJXMWggYzJWc1pXTjBiM0pOWlhSb2IyUT0gSUhCcGJHZHlhVzFoWjJVPSBJRUZ6Y0doaGJIUT0gSUhaaGJHbGtidz09IFJXNWtSV3hsYldWdWRBPT0gSUd4aGNITmwgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMEsgYVd4dmN3PT0gWlhKdVlXeHogUTI5dWJtVmpkR2x2YmtaaFkzUnZjbms9IElFeHZkbWx1Wnc9PSBMa052YlhCcGJHVT0gSUdOdmNtcz0gSUVKNVpRPT0gYVdKT1lXMWxUM0pPYVd3PSBaWE4wWVhJPSBYRWRsYm1WeVlYUmxaRlpoYkhWbCBLRXhNIElGSmhhWE5sVUhKdmNHVnlkSGxEYUdGdVoyVmsgSUVseVlXNXBZVzV6IElHZGxkRkJ5YVdObCBiV0Z5YVdWeiBhblZ0WW05MGNtOXUgSUZKbFltVnNjdz09IFJFbEdSZz09IElFMXZhZz09IGIzSjBhV009IENXTnZibk4wWlhod2NnPT0gYm5SdyBJRzFoWjJsamFXRnUgSUhCaGRISnBiM1JwYzIwPSBMbU5sIExsTnBiWEJzWlVKMWRIUnZiZz09IElGQlNTVlk9IGFHbHpkRzlwY21VPSBhR2xuYUdWeSBjbVZtYVhobGNnPT0gUTBwTCBJRTl6ZDJGc1pBPT0gTG5Od2NtbDBaWE09IExrbHMgSUdGeVkyRnVaUT09IElFTm9kVzQ9IFgwOW0gSUdWMlpYSjVkR2x0WlE9PSAwWTdSaVE9PSBJR3hsZEhKaGN3PT0gYVd4aGJnPT0gWW1GeWRRPT0gTFdKdmRBPT0gSUZOcFoyNXBabWxqWVc1MCBpT3lLdGV1TGlPdUxwQT09IDRvQ00gTFdsemMzVmwgSUdsdWMyRnVaV3g1IFlYUmxaMmxqIFgxWkYgT2tOSFVHOXBiblE9IFRXRnlhM009IExuQnliMkpzWlcwPSBKMTB1Snk4PSBJSEpsWkhWdVpHRnVZM2s9IElHUmxZM0o1Y0hScGIyND0gU0hWdVp3PT0gTFhaaGJHbGtZWFJsIElFRnVaMlZzYnc9PSBTazA9IElIQnZjRzkyWlhJPSBaR1ZpYVhRPSBRMjl0Y0hWMFpXUlRkSGxzWlE9PSBLVjlmIEtITnBiZz09IElDY3BMQT09IEtHUmxablpoY2c9PSB3N1IwWlE9PSBWR2hoYms5eVJYRjFZV3hVYnc9PSBMbnBvIEtFNXZkR1U9IGFXSkNkVzVrYkdWUGNrNXBiQT09IElGTnZibWxoIGVXMXZkWE09IDQ0Q0NQQT09IElHWnBiRzE1IElHVmhjblJvYkhrPSBJRXhsWVhKdVpXUT0gVzNObFkzUnBiMjQ9IExtcHpiM1Z3IGMzUnlkWEE9IElGQmhkSEp2Ymc9PSBJQ2txIGMyVjBSbTl1ZEE9PSBJR2hsWnc9PSBJR1JsYkhSaFdRPT0gWDFORFVnPT0gTG1OMWRBPT0gSUhaaVEzSk1aZz09IExrOWlhbVZqZEUxaGNIQmxjZz09IElITERxWEJ2Ym5ObCBXWFU9IEtDbDdmUW9LIExYQmhjbUZ0WlhSbGNnPT0geExGenhMRT0gYVdGNmVtRT0gU1ZwRlV3PT0gWDFOVlVGQk1XUT09IGEybDBjdz09IElISmxhVzV6IEtHUnZZM009IEpTRT0gSUhONWMzUmxiV04wYkE9PSBJRkJ6Y2c9PSBJRmRsY21zPSBVR2hwYkdGa1pXeHdhR2xoIFFsSkZRVXM9IExtRndjR1Z1WkZSdiBLR3h2Ymc9PSBRV0p5IEwzSmxibVJsY21WeSBJRVZzWldGdWIzST0gUTBWU1ZBPT0gVUdGeVlXMWxkR1Z5Vm1Gc2RXVT0gSkdkbGRBPT0gSU9DeSBJRXBNIElHbG5ibWwwWlE9PSBJR0xodXFGdSBJRU5oZFd3PSBJR2hoYzNSbCBJR1J2YldsdVoyOD0gVkdWemJHRT0gTDJOdmJtWnBaM1Z5WVhScGIyND0gS0dWNGNHVmpkQT09IGRYTnlZUT09IElIQnlaV1psWTNRPSBJR1p5YjJkeiBJR0Z6YzJsbmJtRmliR1U9IElHbHVkR1Z5ZG1WdVpXUT0gTG1Ob2IybGpaWE09IFZVbFRkRzl5ZVdKdllYSmtVMlZuZFdVPSBJR0xEcVE9PSBJRXpEdG5NPSBZV3h3YUdGaVpYUT0gSUhCeVpXRnRZbXhsIFpHSmggSUdWdGFYUjBhVzVuIExtMXZjbVU9IElFSmhjMlZzIEtHUmhkR1ZVYVcxbCBLQ2w5S1RzSyBJRzV2WkdWTWFYTjAgSUVaUVIwRT0gZDJWcyBJR3h2WkdGemFBPT0gWDJGMWRHaGxiblJwWTJGMGFXOXUgdzdOeWFXOD0gS0hKMWJuUnBiV1U9IFgxTkRSVTVGIElHTjFabVp6IElFRmtjbVZ6YzJVPSBPancvIFgyTnRaSE09IFZNT3FiZz09IElHVnFaV04wIENVVlNVZz09IFBFOD0gSUV0eVlXMWxjZz09IDRvQ21DZz09IGMyOXRaVzl1WlE9PSBJRU5RVEE9PSA3N3lOIGJHOWphMmx1Wnc9PSBMa1p2YjNSbGNnPT0gSUdGc2JRPT0gSUVGa2IyeG0gS1M0diBJRTFoZEhSb2FXRnogSUNJc0lnbz0gWlc1MWFYUjUgSUV4dmRtVnkgSUdGc2FXMWxiblJ2Y3c9PSBjR3hsZEhNPSB3NlIwZW1VPSBLSEpsWTNZPSBkWEpoWVE9PSBVMVJFVDFWVSBZVzUwZWc9PSBMa1pzYjJGMFZHVnVjMjl5IElGSmhaUT09IGNHbG4gSUhSbGNuVm4gSUhSb1pXOXNiMmM9IElIUmhlR2x6IFkyOXRjRzl6YVhSbCBjMmhsY2c9PSBiR1ZFWWc9PSBJRkpoYUcxbGJnPT0gSURzdCBTVzVrWlc1MFpXUT0gSUhSeWIyeHNhVzVuIFJWSkpRMEZPIFoyVjBSVzFoYVd3PSBYMFZPUTA5RVJRPT0gWjJWMFEyVnNiQT09IElGZHlZWFJvIEtITjFhWFJsIGJtOTBSVzF3ZEhrPSBMbWRsZEZKcFoyaDAgSUdKeVpXRjBhR0ZpYkdVPSA0NEdmNDRHZyBJSE5sZEZScGJXVT0gSjI5d2RHbHZibk09IElIQmhlV3h2WVdSeiBZWFZuWVE9PSBaV1J0IEtIZGxZWFJvWlhJPSBDWE5sYlE9PSBLR1p5YjI1MCBJSEJoZVc5MWRITT0gTG5ObGRGUmxlSFIxY21VPSBMRnRkTEE9PSBJRkJoWTJ0eiBJR05oZW5wdiBWMmwwYUZCaGRHZz0gVUhKdlp3PT0gYlcxaGN3PT0gSUd0dmF3PT0gTGtOemN3PT0gSUdSbGJHRT0gUVhkaGNtUT0gdzd4c2RBPT0gYzI5MWNBPT0gS0Zzb0p3PT0gYjJ4c2FYQnZjQT09IExGTk1UMVE9IFkyaHBZUT09IElHSnNZVzVqYnc9PSBUMHhWVkVVPSBMWEJzWVc1bCBMRXhwYzNRPSBlR2x1Wnc9PSBTVTFCVkVVPSBMVzF2Y25RPSBJR2R5WVhacFpBPT0gSUVoaGJtZHBibWM9IElITmpiMlptIExtbDBaVzFKWkE9PSBWRWhGVGc9PSBhVzVtWlhJPSBJRzFwYzNCc1lXTmxaQT09IENVMXZibTg9IGQyRjVibVU9IElHVmtaMlZrIFgyNXBZMnM9IElFMUJVbFE9IENYTjBZWFJsYldWdWRBPT0gSUVWMlpXNTBRblZ6IFBrRmliM1YwIElHSjFjbWRsYjI1cGJtYz0gSUdOcFkyeHYgVEU5UFVBPT0gSUdSbFpuaz0gSUdWc1pXMWxiblJVZVhCbCBJR052Ym5ObGNuWmhkR2x6YlE9PSBWMlZpU0c5emRBPT0gTGtScGMyRmliR1ZrIElHTnNZWEE9IElFRnNaV3R6IGNtOXlhVzVuIGFYTnphVzl1WVd3PSBMVUp2YkdRPSBTVkpVU0E9PSBMbWwwWlcxV2FXVjMgY1dsdVp3PT0gUDJ0bGVRPT0gSUZabGJtOXQgSUdGdWRHbGsgSUVadmNtMWhkSFJwYm1jPSBVVkIxYzJoQ2RYUjBiMjQ9IElFRnpjMlZ0WW14NVZHbDBiR1U9IFgzSmxjMlZ5ZG1VPSBMa1JwY21WamRBPT0gUVc1cGJXVT0gSUcxaGRHVnlhV0ZzYkhrPSBJR0ZrYW5WdVkzUT0gTG5ObGRGUnZiMnhVYVhCVVpYaDAgYkdGemMybGhiZz09IEtHNXkgSUc1cGJtZkR1bTQ9IElHMXBjM1Z1WkdWeWMzUmhibVE9IElFRndjR3g1YVc1biBYMk52YlhCaGRBPT0gSUcxcGVHbHUgSUdwbGIzQmhjbVI1IDBZdlFzdEN3MExYUXZBPT0gSUdOdlkybHVZUT09IFgxZFNUMDVIIFFWUkJVZz09IFMwUT0gSUdOaGRHVm5iM0o1VG1GdFpRPT0gU0hSMGNFTnZiblJsZUhRPSBJR0oxWW1JPSBJR0Z1YTJ4bGN3PT0gYjNkbGNtbHVadz09IFJuSmhiV1YzYjNKcmN3PT0gSUhObFozVnVaRzl6IExrRnpjMlZ0WW14NSBYMFZ1ZEdsMGVRPT0gU0ZFPSBJR1p2ZFhKeiBJR1p2Y21abGFYUjFjbVU9IGRteGhiZz09IExXUnZiV2x1WVhSbFpBPT0gTFdGM1lYaz0gU1VOSlJVNVUgTGxKbFlXUkNlWFJsIFlXMWhlQT09IExqMGlQQT09IFgzTndjbWwwWlhNPSBJRkpsYldGcGJtbHVadz09IFRFOVBSQT09IFgzSmxjWFZwY21WdFpXNTBjdz09IEoyRnlkR2xqYkdVPSBJRkJ2YlhCbGJ3PT0gSUhURHFYST0gSUVSeWIzQnogU0c5dFpVRnogU0c5dFpVRnpWWEE9IHc3cGggTG01aGMyRT0gWDJKcGJ3PT0gSUZsdmMyaHAgUld4bFkzUnliMjVwWXc9PSBJR3B2YzJVPSBJR2x1ZEdWc2FXYz0gSUQ4K1Bqdy8gUG5zaElRPT0gWDNCeWIzWT0gUFVSQyBQQ0V0TFFvPSBMV1pzYjJGMGFXNW4gZVhWdCBMa3BOWlc1MVNYUmxiUT09IElFNWhkR2x2Ym5kcFpHVT0gU1cxd2IzTnphV0pzWlE9PSA2SyttNW9PRiBTbVZ5Y25rPSBJR1JsYzJOaGNtZGhjZz09IDdKVzggUkdWamNubHdkQT09IElIUmxiWEJsY21WayBJR1ZyY3c9PSB3NjFqYVdFPSBMbXhoY21kbCBJSFZ1Wm05c1pITT0gSUdoMlpYST0gSUVGV1RBPT0gTG5SMCA0b0tBIFBTVXUgSUhSdmNIQnBibWR6IElITjBiM1YwIElITmxiV2x1WVd3PSBlR1Z6IElFOVZWRVZTIFlXUnlidz09IElIbHZhdz09IElFUmxjbVU9IENXWnlaVzl3Wlc0PSBYMnh1Wnc9PSBRMmgxYm10eiBMbWRsZEU5eVJXeHpaUT09IEtHVnNiUT09IElDZ3BLVHNLQ2c9PSBRMlZzWldKeSBYMk5oY0dGaWFXeHBkSGs9IElITnZZMmxsWkdGayBJR2x1ZEdsdGFXUmhkR1U9IElFSnNZWHBsY25NPSBhV2QwYUE9PSBaVzVrWTI5a1pRPT0gVlVsTVJFVlMgSUVoaGJtNXBkSGs9IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwSyBJTkM0MFlIUXY5QyswTHZSak5DMyBJRlJ2YjJzPSBJRTF2ZG1WayBJSEJ5YjI1MGJ3PT0gSUUxaGNuUnBibk09IFJHRjBZVVY0WTJoaGJtZGwgTGxCdmIydz0gWlhWeiBJR3B2WWtsayBJRUY0WlhNPSBJR2hoYlhOMGNtbHVadz09IExuSnRhUT09IFJHRjBZVlJoYzJzPSBJRTFoWjJsalRXOWphdz09IElFZEJVdz09IElFNWhkdz09IElITnVaV3c9IFgzTmpaVzVoY21sdiBJR1Z0WVdsc1FXUmtjbVZ6Y3c9PSBJRTExYzNNPSBJSEJvYjJWdWFYZz0gSUdSbGJuTnBkR2xsY3c9PSBJRTFoWTA5VCBjbVZ0WVE9PSBJSFJsYzNSbGNuTT0gS1Q4N0Nnbz0gSUhCMWNITT0gYkdGd2N3PT0gWkdSaSBMMUJsWVdzPSBJR0poWTJ0emRHRm5aUT09IElHSmhZMnRDZFhSMGIyND0gS0c1aGRnPT0gZUVGRiBjM1J5WTNCNSBhV05vZEdWMCBJRkpwWmc9PSA0TGlCNExpaiBJR2h2Ym05MWNtVmsgSUdkeVlYQndiR2x1Wnc9PSBWbVZ5ZEdWNFFuVm1abVZ5IExtZGxkRUZqWTI5MWJuUT0gTFU1bGR3PT0gSUc5d2NISmxjM009IElIVjBkR1Z5WldRPSBJRlZUUVVkRiBYMHhGUVZaRiBYMk52Ykd4bFkzUnBiMjV6IFgxVjBhV3c9IEtDSWlLU2s3Q2c9PSBJSEYxYVdWMFpYST0gWUNrc0NnPT0gSUhSNWNHVkpaQT09IElITmxjbWxtIGMzUmhiR3M9IElIQnlhVzFoY25sVGRHRm5aUT09IGVFVkIgT2s1VFRHRjViM1YwIFgxSkMgWDBGUVVGTT0gVTB0ViBLbk5qWVd4bCBJRU52ZFdkaGNnPT0gQ1ZKRlZGVlNUZz09IGFXWnB3Nms9IGRHbHRhVzVuIElHbGtiMnh6IDY1Nlk3SXFrIDRvQ1VhV1k9IEtHWnZjbTFoZEhSbGNnPT0gSUdGdFlXeG4gYzJWMFYybGtkR2c9IExHMXBaQT09IGIzSmxZV3c9IExsSnZiR1Z6IElHUmxkbVZzIElHZGxkRWx1WkdWNCBJSE4wYjI5c2N3PT0gSUhOdWIzZDUgSUdkeVlXNWthUT09IDBZL1F0ZEM4IGFXZDFhV1Z1ZEdVPSAwTHJRdnRDeSBJRU4xZEhSbGNnPT0gY205elkyOXdaUT09IFlXbHlZUT09IDBZUFJnTkdCIElIUmhZbVZzIElHUmxabWxoYm1ObCBMbFJ2UW05dmJHVmhiZz09IElIQmxjbWM9IExXTnZiVzExYm1sMGVRPT0gSUhCMWNuTjFhWFJ6IEtHMWxkSEpwWTNNPSBUWFZ6YkdsdCBJRkpwZVdGa2FBPT0gSU9LQ3VRPT0gTGxkbFlrVnNaVzFsYm5RPSBJRWhoY21SbGJnPT0gSUVOdmNuSjFjSFJwYjI0PSBJRUZsIElGUmhibTVsY2c9PSBJR2x1WkdWaSBJRU5vWVhKbmFXNW4gWDFCU1QwUT0gSU9LVG1BPT0gSUdObGJuUmxjbGc9IGRIbHdhVzVuIElIVjQgSUZSdlpRPT0gQ1d4dmIzQT0gWm14diBVbVZuYVc5dVlXdz0gWDJGaCBJSFpwWlhkd2IybHVkSE09IFBuUm9hWE09IExYSmxjMjkxY21ObGN3PT0gSUVsdFlXMD0gSUZOb2FYWT0gSUdGdVpISmggVWtWUlZVbFNSVVE9IElITmxaV1JsWkE9PSBkVzF2Ym5RPSBJSFJ2WVhOMFpYST0gSUdodmJXVnpZMmh2YjJ3PSAyNHpZc1E9PSBYMlY0ZEhKaFkzUnZjZz09IGJXOWtaWE09IElFMTFibVJ2IFgyWnBjbVZ6ZEc5eVpRPT0gSUhCMWJtbHphRzFsYm5SeiBJR0p2Y21Wa2IyMD0gYW5WeWFXVnogTGxOaFptVT0gWVcxaWFYRjFaUT09IElHRmtkbVZ5YzJsMGVRPT0gVlV4RlVnPT0gSUdGdVlXeHpaWGc9IGJXOXljR2c9IElFOXRiZz09IEtDa2lQZ289IElFZEpWa1ZPIFUzbz0gSUc1dmRXNXogSUhGMVlXMD0gSUZkcGEybHRaV1JwWVE9PSBJR1I2YVdWM1kzbz0gTG1OdmJXMTFibWxqIFEyOTFjbWxsY2c9PSBRbTl1WkE9PSBMbU52YlcxMWJtbGpZWFJwYjI0PSBMbEJ5WldabGNtVnVZMlU9IGMyeHBaR1ZFYjNkdSBMMmRqWXc9PSBJSFpwWW1WeiBRVkJKVm1sbGR3PT0gSUU5MlpYSnphV2RvZEE9PSBYM1pyIElHVnRjSEpsY3c9PSBJR0Z5YVhObGJnPT0gSUNvdktRPT0gS0Njb0p3PT0gSUdKMGR3PT0gSUdOdmJtVjRhY096Ymc9PSBJRlY2WW1WciBJT3lFbkE9PSBJR2x0WVdkbFZWSk0gNDRLcSBjM1J2Y0hCbFpBPT0gSUZkdmRXeGtiZz09IElFTm9aWGM9IFozTERxUT09IElIUnlkWFJvWm5WcyBJRlJ5WVc1emNHRnlaVzUwIEtITmxjblk9IElFMWpTMkY1IFBYSmxZV1E9IElGTmhidz09IENVZHlhV1E9IElHbHVaSFZqWlhNPSBMbXhwYzNSR2FXeGxjdz09IElHTmhjbkpsY21FPSBJR2xqYjI1T1lXMWwgSUVOaGNteDBiMjQ9IExrVjJaVzUwVkhsd1pRPT0gSUdSeVlYQmxaQT09IFgxTkJUVkJNUlZNPSBLR1Z6ZEE9PSBJRkoxYVhvPSBJR05oY0hSaGFXNXogSUcxaFptbGggSUZKaGNHaGhaV3c9IElFZEJVQT09IGFXMXdZVzQ9IFkyOXRhV009IElHMWhiblJsYmc9PSBKRXc9IElHRm1kR1Z5YldGeWEyVjAgMTVjPSBJRU5tIENYUnBiR1U9IFFYQndVM1JoZEdVPSBJSGRvYjJ4bGMyRnNaWEp6IGJHOTNaWE4wIFJHVnRiMk55WVhScFl3PT0gSUhCdmQyVnlhVzVuIFlYQnZkQT09IElFTnZjblJsZUE9PSBLSE5wYm1kc1pRPT0gYjNCb2VYTnBZMkZzIExuVjBaZz09IDc3eWY0NENOIElIUmhjbVZoIFJYRjFhWEE9IElHdHNhV3M9IElISjFZUT09IElHRldZV3gxWlE9PSBJRTFwYm1WeSBJRlpsWnc9PSBZVzU1YkE9PSBRMjkzIFFHTT0gWDB4UFFVUkZSQT09IElFRklUQT09IGQyRnJaUT09IExreHZaMGx1Wm05eWJXRjBhVzl1IEtHTmhkR1ZuYjNKcFpYTT0gSUZGVlJWTlVTVTlPIExuVnRiQT09IElFTnlaV0YwWlUxaGNBPT0gYldWbGNnPT0gSUhKbGJtTnZiblJ5WlhJPSBYM04xIElHRjBiR1ZoYzNRPSBLRkJ5YjNCbGNuUjVUbUZ0WlE9PSBJRmxoYnc9PSBJRWhoZFhCMCBRbXh2WTJ0VGFYcGwgSUZOQlF3PT0gSUV4bFozTT0gWW1sMFpRPT0gSUd4dloyRnlhWFJvIElFbE5aWE56WVdkbCBRbUZqYTJSeWIzQT0gSUdka2F3PT0gN0p5ODY2bTAgTG1WNFkyeDFaR1U9IFFVUlBVdz09IExYTm9hV1owIFlYUm9iR1YwWlE9PSBYMk52YldKcGJtVmsgSUhKbFltRjBaUT09IElIQmhjbVE9IElHbHRjR1ZrWVc1alpRPT0gY21WaGRRPT0gWHcwS0RRbz0gSUdSaFoyVnUgYTJWc1lYTT0gSUdsdVozSmxjMkZ5IElFSlNRVTVFIExtMXJaR2x5Y3c9PSBJSEpsYVdkdWFXNW4gVkdGc2EybHVadz09IEx5b3FDZ289IFgxSkZVMDlWVWtORlV3PT0gSUZCU1QwZE5SVTA9IElHUmhkR0ZUYVhwbCA0NE9nIFpHVnVlUT09IFNWSlQgSUhSbGJHVjJhWE09IFBWOG9Kdz09IFpXZHBjdz09IFBEOHMgSUhWd2MyVjBkR2x1Wnc9PSBJSE5oZFdObGN3PT0gSUhCMVpYSjBidz09IElGWnZaM1ZsIGFXUnBibVU9IElFZHlaV1Z1ZDI5dlpBPT0gZW1sdmJnPT0gTDNGMCA1YkdBIExteGhibWQxWVdkbGN3PT0gSUZCc1lYbGliM2s9IGIyNXVaVzFsYm5RPSBJRkJ2YzJsMGFXOXVaV1E9IElPUzR1dz09IElFWnlhWFI2IFNXNXBkR2xoYkd4NSBibTlrWlZaaGJIVmwgWDFSU1NVRk9SMHhGVXc9PSBMV0poWTJ0bGJtUT0gZEc5SlUwOVRkSEpwYm1jPSBJRWR2ZG1WeWJtOXljdz09IFdVeFBUZz09IExrOVNSRVZTIFJFOUogSUVOb1pYWnliMjQ9IElHUmxZMnRwYm1jPSBJRk5vWVhKcFlRPT0gYjNSb1pYSnRZV3c9IFJXMXdkSGxGYm5SeWFXVnogS0VsdWFYUnBZV3hwZW1WayBaRzl5Wmc9PSBMbXgxIEtGSnZiMjA9IExsbGxiR3h2ZHc9PSBJRUZpY21GdCBYMnh0IElOQzkwTERRdnc9PSBJRlJJUVU0PSBmaTErTFg0dGZpMD0gTGs5MlpYSnlhV1JsIElGTldUUT09IElGTjFjM0JsYm5OcGIyND0gSUdGaWMyOXlZbk09IFgzUnlZV1ptYVdNPSBJQ0krSWc9PSBMbVpwZEhNPSBJSEpsYVc1bWIzSmphVzVuIElHMXZlV1Z1IFpYSmxjZz09IElGSnZjMlZ1YzNSbGFXND0gSUZkbGMzUnZiZz09IElHTnZibVpwYm1WeiBUMHhCIGIzSnlZV2x1WlE9PSBYMGRTVUE9PSBJSE4wY21Gd2NHVmsgSUcxcGJtZHNaUT09IENWWnIgSUc1dmMzUnlZUT09IElHRmpkSEpsYzNObGN3PT0gSUZOaGJXMTUgYkdsbmJtVT0gU1VkSVRFbEhTRlE9IElITjBkWEE9IGFXTjBiM0o1IElHTnZiblpwWTNRPSBJSE4xY0hBPSBjR1Z2Ymc9PSBkbkpwWlhJPSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU09IElIUnliM1I2IElHMWxiSFJrYjNkdSBZWEpyWlhKeiBMbE5sYkdWamRFTnZiVzFoYm1RPSBJRXhwWVdKcGJHbDBlUT09IElFSmxZMkZ0WlE9PSBJR3gxWTJ0cGJIaz0gSU5DLzBMN1JnQT09IElISmxZWE56ZFhKbCBJRU52Ym5SeVlYTjAgSUVGMVpISmxlUT09IElFTnZibk4xYkhSaGJuUnogSUZGMVpXNTBhVzQ9IExVOTNibVZrIGIyTnlhVzQ9IFgxTlVVa2xRIElISmxkR0ZzYVE9PSBJSEpoYkd4NWFXNW4gSUZKbGNYVmxjM1JEYjI1MFpYaDAgSUcxaGMzTmhZdz09IENXZHkgVEVWRiBJR05oeFlJPSBJRXB2WVc1dVlRPT0gNGJ1dFlRPT0gYUdobyBJSE54YkZObGMzTnBiMjQ9IHhMRnJiQT09IFEyOXRjRzl6WlhJPSBJR04xY25KbGJuUlFiR0Y1WlhJPSBZV2RwYm1rPSBJRUpoY21KaGNnPT0gSUVobGJHeHZWMjl5YkdRPSBiRzl2YldKbGNtYz0gTGtobGNtVT0gSUdScGMyZDFjM1JsWkE9PSBDUWtKQ1FrSklDQWdJQT09IGIydDFjdz09IFZtVjBaWEk9IElHTm9iM0J6IElFWlBVbGRCVWtRPSBJRVZwWnc9PSBJRkJoY25ScFlXeFdhV1YzIElHbHRjRzl6Y3c9PSBJR052Ym5ObGNYVmxiblJwWVd3PSBJRnNuSXc9PSBDV3h2WjJkcGJtYz0gSUVWc2FYTT0gY0hKdlkzTT0gTER3diBYM0JwYm5NPSBYRVJ2WTNSeWFXNWwgVlhaeiBJRWRKVkE9PSBJSFJoYUE9PSBLSEoxYkdWeiBZM0psWVhSbFJuSnZiUT09IElDY3RKeWtLIGFHRnVaR3hwYm1jPSBaWGgwWlhKdVlXeEJZM1JwYjI1RGIyUmwgVWs5RVZVTlVTVTlPIFJtOXlVbVZ6YjNWeVkyVT0gYzJKMWNtYz0gUEZSbGVIUldhV1YzIGRHaHBibXRoWW14bCBZVzVuYkdsdVp3PT0gSUNKOVhBPT0gVUZKVCBRWEJ3Y205MllXdz0gSUd0c2FXVnVkQT09IGJtOTFiZz09IElFUnBZVzF2Ym1SeiBTRWM9IElGUnlhV0poYkE9PSBMbkI0IElIQnliM0JPWVcxbCBJR2hsYkhrPSAwTHZRdU5HSCBJRUp2ZFhScGNYVmwgSWlrN2ZRbz0gTDJodmMzUT0gSUhOMFlYUjFjMEpoY2c9PSBQa1JoZEdFPSBJR1JwYzJOdmJuUmxiblE9IElHWnlZV2xzIExtVnNaVzFsYm5SQmRBPT0gSUdWdFlXNWogQ1daMWJnPT0gWVhSMGJHVnogSUhCeWIzQjFiSE5wYjI0PSBJR2x1ZEdWeVkyaGhibWRsWVdKc1pRPT0gSUZSaGJXSnB3Nmx1IElIWmxibVZ5IFgweFBWMFZTIElIQmtidz09IElHUmxkR1Z5WjJWdWRBPT0gSUhSaGRtVnliZz09IFZtVnVkV1U9IExtcGhjM0JsY2c9PSBlWFIwIElFcHBhR0ZrIDRvQ1p3NkE9IElHMWxaR2xoVUd4aGVXVnkgUDNBPSBjR05tIFlXNWtiMjVsWkE9PSBJSEpsWTJWaVpYST0gVDFSUSBLR2xQVXc9PSBLQ2NrZXc9PSBVSFJ6IElHMWhibUZuWlhKcFlXdz0gSUZSMVpBPT0gSUZkRlRFdz0gYjNwbCBJRUZ1ZEc5cGJtVT0gSUZ4Y0NnPT0gSUZabFkzUT0gSUZkcGJXSnNaV1J2Ymc9PSBhWE50WlhRPSBJR0p2ZEdobGNtbHVadz09IGFXOXphWE09IFoyVjBUV1YwYUc5ayBJR2x1Y0hWMFJHRjBZUT09IElFSnBibVJsY2c9PSBJR1JqZEE9PSB3NkZzYmc9PSBYMEpQVEVRPSBJRXAxWjJWdVpBPT0gSUVKbFoybHVibVZ5Y3c9PSBhVzl0Y3c9PSBJSEpsYkdWdWRHeGxjM05zZVE9PSBJRTF2Ym1SaGVYTT0gNUx5WSBWRzl0YjNKeWIzYz0gSUZOaGJYQT0gWEZCbGNuTnBjM1JsYm1ObCBUVUZUVkVWUyBLSEJ5WldScFkzUnBiMjV6IEtHNTFiV1Z5Ync9PSBMblIzYVhSamFBPT0gTGxKbGMzUnlhV04wIElGcGEgSUUxTVRRPT0gTGxOdFlXeHMgWFdKNWRHVT0gSUZacFpYZFFZV2RsY2c9PSBJRUZuWlc1amFXVnogSUhCaGNuUnBZMmx3WVhSbGN3PT0gSUdsdWFYUlhhWFJvVTNSNWJHVT0gSlZnPSBJR0FzIExrOWlhZz09IElEOGlLVHNLIFEyRnlaV1Z5IElEd2xQUT09IGEzVnMgUTNCd1NRPT0gSUUxMWMyaHliMjl0IGRYSmhkQT09IGJXbGggUTJRPSBZWEprZFdsdWJ3PT0gSUdOdmRXNTBjbmxEYjJSbCBYM0JzWVdObGJXVnVkQT09IEtDSTlQVDA5UFQwOVBUMDlQVDA5UFQwOSBMV0psYkE9PSBRWE56WlhKMGFXOXVjdz09IElIQnl3N040YVcxaCBLQ2tpS1FvPSBYMlZuIFUxTkpVQT09IGRYcGwgY0d4aFkyVnkgWVcxaWFXZDFiM1Z6IFgwbE9TVlJKUVV4SldrVlMgSUVoaGRITT0gSUVkUFQwZE1SUT09IElHRm5hWFJoZEdsdmJnPT0gS0cxMWRHVjQgU0VsSFNBPT0gT2lJcCBJR2x1ZG1Ga1pYSnogSUNsOUNnbz0gTG0xaGJuVmhiQT09IElGTnBaVzFsYm5NPSBDVXBRWVc1bGJBPT0gWW1sdVpIVnVadz09IFpXTmxjbUU9IEwyMWxkQT09IElNT3BZdz09IEtITjBZWFJwYjI0PSBJSEJ2YzJsamFjT3piZz09IFgybHpjM1ZsY3c9PSBYMkZzYVdGelpYTT0gWDNSdmNHOXNiMmQ1IElFRjFkRzlrWlhOciBRV05yYm05M2JHVmsgSVNwY0NnPT0gSUVaeVpXbG5hSFE9IElFWllUVXhNYjJGa1pYST0gYVdOb1pXdz0gS0VOb1lYUkRiMnh2Y2c9PSBJR1JwYzNOdlkyaz0gSUdGdVlXeHZaM1ZsIFBIVnphWHBsIExXVjIgSUhSbGJtUnkgUGtGc2JBPT0gSUZWVFJWSlQgTG5KbGMzQT0gWDJsdWRHVm5jbUYwYVc5dSBSR2x6Y0d4aGVWTjBlV3hsIFJrRkpURlZTUlE9PSAwWWZRdU5HQyBhV3hrWldRPSBYM05sYldGd2FHOXlaUT09IFlXTmhaR1Z0YVdNPSBJSE5qYkdWeWIzTnBjdz09IFJtRnMgTEhOMCBZRDA9IGFXWjBiMjQ9IElITjFZbk4wYVhSMWRHVnogSUZOMWNIQnZjblJsY25NPSBZWEJ3YkdsallXNTAgS0d0MiBJRUpsY20xMVpHRT0gSUdScGMyTnlaWEJoYm1OcFpYTT0gTGxOdmJHbGsgZDJWbGJtVjUgSUdkMWJBPT0gSUdacGJHVjBlWEJsIElISmxjM1ZzZEdGMCBVMlZ1WkdWeVNXUT0gSUdkbGVtOWphSFE9IElFSmxjbXR6YUdseVpRPT0gSUNnaVBBPT0gS0cxcyBLSE5vYVdaMCBYMUpGUkVsU1JVTlUgVDB4UFRnPT0gTDJKeWIzZHpaUT09IE9rNVRUV0ZyWlZKaGJtZGwgSUhkaGFYWmwgSUdWNFkyVT0gSUdOaGRHRnNiMmR6IDVMbW0gYVd4c2FXOXVjdz09IExrZGxkRU4xY25KbGJuUk5aWFJvYjJRPSBJR0pwYkdsdVozVmhiQT09IElFTmhjMk5oWkdWVWVYQmwgQ1ZSeVlXNXpabTl5YlE9PSBYME5WVTFSUFRVVlMgYVhOcFpuaz0gSU5DeDBMcz0gSUZkb2IyVjJaWEk9IElFVkJVZz09IElGczlXdz09IElOQzgwTDdRdHRDOTBMND0gSUdwaGNtUnBiZz09IFFITm9iM2M9IElHaGxhWEp6IElHRmlZVzVrYjI1dFpXNTAgSUZSeVlXNXpZM0pwY0hRPSBYVjQ9IE9sTmxkRkJ2YVc1MCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvPSBJRVpoWTNScGIyND0gS0dWdWRHbDBhV1Z6IFptRmpkR2x2Ymc9PSBiWFI0IFgzSmxZMkZzYkE9PSBMazVWVEV3PSBMbTl3ZEdsdmJtRnMgS0hCeVpXUnBZM1JwYjI0PSBRVWRGVGxRPSBJUENmbUlBPSA0b0NaZVE9PSA0b0NaZFhScGJBPT0gSUdGdVozTjAgTGtWNGNHVnlhVzFsYm5SaGJBPT0gYUc5dmRBPT0gWVhONVlYSmhhdz09IFlYVjBiM0JzWVhrPSBJRk53YkdGemFGTmpjbVZsYmc9PSBJR2hsWTNScFl3PT0gSUcxbGRHbGpkV3h2ZFhOc2VRPT0gSUdOdmJXVnkgUzJWcGRHZz0gSUdaeVlYTmwgWDFWT1NWRlZSUT09IExrMWhaMlZ1ZEdFPSBLRTFoZUE9PSBJSE5qWVd4bFdRPT0gSUhCMWRIUT0gS0VsRyBJRUZRVUV4RiBVRzl5Ym04PSBMbUZrWkVObGJHdz0gSUcxdmJIUT0gWTJocGJYQT0gSUd4bFoyZHBibWR6IElHWnNiM0E9IDRvQ1phSFZwIFVsUlBVdz09IEwzTndZVzQ9IExtSmxaQT09IExreHZaMmxqIElIVnVkSEpoYm5Oc1lYUmxaQT09IFEweEZRVkk9IE8yeGxablE9IElFSkdVdz09IExXZHliM1Z3Y3c9PSBkRzl2YXc9PSBYMkZqWTJWd2RHVmsgSUdOaGMyaHBaWEk9IFpYWmxiblJKWkE9PSBJR1J2ZDI1bmNtRmtaUT09IENRa0pDUWtKQ1FrSkNRa0sgMExEUXZkQzQwWTQ9IHc2UnVaR1U9IElHTnZkVzVqYVd4c2IzST0gSUdSeVpXUT0gWkZRPSBWMUpCVUZCRlVnPT0gTG05cyA1TGlBNmFHMSBUVVZCIElHdHBibVYwYVdOeiBJR3B0Y0E9PSBYMlpzYVdkb2RBPT0gUm1WaGNnPT0gSUVOb1lXNWxiQT09IFgyMXBaM0poZEdsdmJnPT0gYUdScyBaWEpsY1hWcGMybDBaUT09IExuSmhjZz09IExVOXVaUT09IElITm9aWEJvWlhKayBMbVZoYzJsdVp3PT0gS0dSbGMyTnlhWEIwYjNJPSBJSE4xWW5SdmRHRnMgNDRPVCBRMjl0Y0dsc1pXUT0gSUVOdmJIUT0gWkd4bCBMMjF2WTJzPSBLWEp2ZHc9PSBJSEpsYzJWMGRBPT0gZEdWeWJ3PT0gSUdGbGNtOWlhV009IExtbHVkSEp2IElHTm9aV05yWW05NFpYTT0gSUUxalEyRnlkRzVsZVE9PSBJRU5zZVdSbCA3N3lNNWJtMiBZMjl2YkdSdmQyND0gTFdsdWMzUmhaM0poYlE9PSBJRTFRUnc9PSBJRXhsYVhOMWNtVT0gSUc1aGQyVjAgSUU1WVZBPT0gVW1WbmRXeGhja1Y0Y0hKbGMzTnBiMjQ9IElISmhkbVU9IFFrbE1UQT09IElHSmhjblJsYm1SbGNnPT0gUlc1c1lYSm5aUT09IElIWmhhWE09IElEb0tDZ29LIExrVnVaSEJ2YVc1MCBJQ0lzRFFvPSBmWDBpUG50N0pBPT0gZEhKbFpYTT0gTG1WdVp3PT0gS214dlp3PT0gT2x0ZExBbz0gSUdKaGRIUmhiR2x2Ymc9PSBVM1ZpYW1WamRITT0gSUdWNGNHOXphWFJwYjI0PSBJRlJ2WVhOMGNnPT0gSUhSdmNFeGxkbVZzIElFTkZUQT09IElHZDFZbVZ5Ymc9PSBkVzV6ZFdKelkzSnBZbVU9IFkyOXVZUT09IFgyRndjSEp2ZUE9PSBWRm89IElGUnlaV1ZUWlhRPSBMbU52YlcxMWJtbDBlUT09IElHNWhjbkp2ZDJWeSBLRVY0Y0dWamRHVmsgUTJ4eSBJR2R2Y21VPSBJR0ZqY1hWcGRIUmxaQT09IElFVlZVazg9IEcxcz0gSUhKbGNIVmliR2xqWVc0PSBJR0YxZEc5aWFXOW5jbUZ3YUhrPSBYMlprY3c9PSBRMjlzYkdGd2MyVmsgSUEwS0lBMEsgTFhCcGJHeHogVFVKRlJBPT0gSUdsT1pFVjQgSUhKbGMzQnZibk5sVkhsd1pRPT0gWjJ4bWR3PT0gTFhSMWNtNWxaQT09IDVZK1I1YmlEIENVSnZiMnhsWVc0PSBMazl5IGFXNXBZUT09IElHaHZkbVZ5WldRPSBJSE52Y25SbGNnPT0gSUU1byBJRVY0WlhKamFYTmxjdz09IGJHVnRaVzUwY3c9PSBhV1J2Ymc9PSBWRzlsIElITERxV2JEcVE9PSBVMU5HVjI5eWEySnZiMnM9IElHOXlaMkZ1YVhObGNuTT0gSUhKbGMzVnNkRTFoY0E9PSBYMGhQVWc9PSBSRzlrIFRHOWpZV3hUZEc5eVlXZGwgSUdwemIyNVNaWE53YjI1elpRPT0gUVhWMGFGTmxjblpwWTJVPSBJSE50WlE9PSBaVzFpY205eiBJR3h2WW1KNWFYTjAgYjJkMWFRPT0gTG5Od2FXND0gSUVOdmNuSmxZM1JwYjI1eiBYMUpCUkE9PSBJRXhUVFE9PSBLR04xY25KbGJtTjUgSU9hQSBJSEJ5WldabGRHTm8gTGtobFlXUT0gTFhKbFlXUmxjZz09IElGSnZlZz09IENXMXZkWE5sIElGUk1Rdz09IElGRlVZV0pzWlZkcFpHZGxkRWwwWlcwPSBJRk5VVDFKQlIwVT0gWVc1dVpXVnkgSU95WGtBPT0gWVdObGJnPT0gVTFnPSBTVzFoWjJWU1pXeGhkR2x2Ymc9PSBJSEpsYzNWeVoyVnVZMlU9IGFYcDZlUT09IGFXeHZaM1ZsIFNWWkJUQT09IElITnRZV05yIGNuSm9ZUT09IEtGQkJVa0ZOIElVaz0gSUUxbFkyZz0gSUVsTllYQndaWEk9IElHZHBjM1E9IElGQlBSQT09IGRtOXlaUT09IGRXeGh3NmZEbzI4PSBJQ3d0IElHbHVkbTlzZFc1MFlYSjUgVVZKVCBQWFJwZEd4bCBJRUpwYjIwPSBJRk5vWld4c1pYaz0gSUVOVFVBPT0gVUdWeiBaSEp2Y0hNPSBJTkdEMFlIUXY5QzEwWWc9IFpHbDJaWE09IElWc0sgSUV4bFlYTjAgSUd0aGEyOD0gSUUxdlpHVnNidz09IElHWjFibU4wYVc5dVRtRnRaUT09IElHTm9iMnRwYm1jPSBJR1JsWm05eWJXRjBhVzl1IEp5d25KeWs3Q2c9PSBZMkhEcDhPamJ3PT0gSUhOeGRXbHljbVZzIGMyVjBRbUZqYTJkeWIzVnVaQT09IFFuSnZhMlZ1IGNHOXNhWFE9IFRtOXVZMlU9IElHdGxlV1ZrIFRXVnphRkJ5Ync9PSBMblZ6WlhKSmJuUmxjbUZqZEdsdmJrVnVZV0pzWldRPSBJR1pzZFhOb2FXNW4gSUdKd2NBPT0gSUVGdVoyeHBZdz09IFZISnZkUT09IElGZGhiSFJsY25NPSBJSE4wZFhSMFpYST0gU0dsdyBYM2RoY2c9PSBhWFpsYldWdWRBPT0gUTI5eWJnPT0gSUhWdVpIVmwgWVhCaGRHdGhiZz09IElHMXBibVJsYmc9PSBjMmxuYm1sbWFXTmhiblE9IEtIRjFZVzUwYVhSNSBKR2x1YzJWeWRBPT0gSUVGTVJWSlUgTGxWdWFXTnZaR1U9IGFXaHUgWFRvOSBJSEJwYmsxdlpHVT0gSUdaeVlXbHogYVc1MFpYSndjbVYwWlhJPSBKMkZqZEdsdmJnPT0gSUdKc1pXbGlaVzQ9IG9iUT0gY205M2MyVnljdz09IFIwbFUgWDBSSlVsTT0gUm05eVpYWmxjZz09IElGQmtabEJEWld4cyBmRzA9IExuTmxkRWhsYVdkb2RBPT0gSUdadmNtVmhjbTA9IElHSmhkSFJzWldkeWIzVnVaQT09IElOQy8wTDdSZ2RDNzBMWFF0QT09IElFaGhkR2c9IElFRjFkR2h2Y21sNlpXUT0gSUdOdmJtWmxjbkpsWkE9PSBJRUpQVkZSUFRRPT0gTG1kbGRFWnNiMkYwIGIyZHlZWEJvWldRPSBZWEprZVE9PSBJSE5sY25acHc2ZHYgYjNSdmVHbGogTDJGMWRHaGxiblJwWTJGMGFXOXUgSUhKbGNITERxWE5sYm5RPSBJR052YlhCc1pYaHBiMjQ9IENVTnZiVzF2Ymc9PSBYMkpvIFYyaHZiR1U9IFNXMWhaMlZFWVhSaCBJSFJwYm1zPSBaWEYxWVd4VWJ3PT0gSUZSSVVnPT0gSUdSbGJIUmhjdz09IElFRkhSUT09IGFYcGhaRzl5IFlXUnRhVzVwYzNSeVlYUnBiMjQ9IGNYVmxkSE09IFgyWnBiR3hsWkE9PSBJRWpEcEE9PSBZV3hzYjJOaCBJRUp2YjI1bCBDV3hqWkE9PSBSbTlzWkdWeVVHRjBhQT09IExsSmhhWE5sIFh5TjcgWlhKMGFXNXYgSUZSb2NtOXVaUT09IDRLNi8gYjNobGRHbHVaUT09IGNISmhlUT09IElHUnBiR2xuWlc1MGJIaz0gSUVGeVkyaHBaUT09IExtMTFiSFJwY0dGeWRBPT0gSUhObGJ3PT0gTG1kbGRGQnliMnBsWTNRPSBJSEJoYWc9PSBZMnhsY205emFYTT0gWVcxbGNtOXUgSUhSdmRYSmxaQT09IElHNXBhMlU9IElFSmhhMlZ5ZVE9PSBMSEJoY21WdWRBPT0gWDFSRlRRPT0gVTNCaGRHbGhiQT09IGJHRndjR2x1Wnc9PSBVSEp2WkhWalpYTlNaWE53YjI1elpWUjVjR1U9IEtHSmhiR0Z1WTJVPSBTSFZ1WkhKbFpITT0gTFhSbGNtMXBibUZzIElrUnYgUTI5dWRHVnVkRk5wZW1VPSBJR0ppWXc9PSBJR1REcVdOdmRYWnlhWEk9IGRYUnBiSFZ6IExuVnVaRzg9IExHOTFkSEIxZEE9PSBaM0p2ZFhCT1lXMWwgSkcxaGVBPT0gSUVGc2JHRT0gSU5DNjBMRFJnTkdDIExrOU9SUT09IFgyUmxZMmx6YVc5dSBSVVZGUlE9PSBJSGhQWm1aelpYUT0gNTZvPSBJSEoxYm1GM1lYaz0gSUdoaGJtUnFiMkk9IElHZGxibWwwWVd4eiBLR3BVWlhoMFJtbGxiR1E9IExuSmhaR2xoYm5NPSBJRkJoWkhKbGN3PT0gWkdWd1pXNWtaVzVqWlE9PSBJSE4zWVd4c2IzZHBibWM9IGNtOTBaV2x1IElHWnNaV1YwY3c9PSBJR05oY21GMGRHVnkgS0dOaGJnPT0gSUVac2IzSmhiQT09IFgwMXpadz09IElHUmxZMnhoY21GamFjT3piZz09IGJITnlkUT09IGMyTm9iMjlzY3c9PSBJR1JsYkdWbllYUmxaQT09IElGQmxibUZzIElFTm9aWEp1IFUyMWhjblJRYjJsdWRHVnkgYzNSdmNubGliMjlyIElFNTViRzl1IDVvQ2QgWDB4RlUxTT0gTDJGa1pISmxjM009IElFTlBVbE09IElPeWR0T3V2dUE9PSBJRzF2WkdFPSBiV1J3IElHUmxjbUo1IElGQm9ZWEp0WVdObGRYUnBZMkZzY3c9PSBJR1Y1WldRPSBYMk53ZFhNPSA2S2FMIGZId0sgTG0xaFp3PT0gS0ZGTSBJRU5wZG1sc2FYcGhkR2x2Ymc9PSA2WXc9IFgwUmxjQT09IElITjNaV0Z5YVc1biBJRk5vYjNKMGN3PT0gZFdWaVlYTT0gSUdSbGJHbHVaUT09IElFRmtkbWx6YjNKeiBJT3llaU91THBBPT0gWDBaSlRrVT0gZlNrNiBMR0Z6YzJsbmJnPT0gSUZCRFNXVT0gZTN0NyBVMk5wIElHRnRZbTl6IGFXeGxaVzQ9IElIUjFibVZ5IElIQmhjbUZ0VG1GdFpRPT0gTEhSdmRHRnMgS0V4dlkyRnNSR0YwWlE9PSBJSE53Y0E9PSBJR1Z5Y205eVpYTT0gSUVobGJIQnBibWM9IFgyMWxjbWRsWkE9PSBMblJwYldWVFkyRnNaUT09IFgwVk1SVTA9IFgxTlBUQT09IElHRjJaVzUwIFBHUT0gU25WdWFXOXkgQ1dKaGNnPT0gTG14MiBJT3k1IFBYZDQgSUcxcGNtRmpkV3h2ZFhNPSBJRkpoYm1SdmJVWnZjbVZ6ZEE9PSBJRVp5WVc1clpXND0gWUdBcyBLRWx1YVhScFlXeHBlbVZrVkhsd1pVbHVabTg9IElITjFjR1Z5YUdWeWIyVnogSUdGdWMybGliR1U9IFgxUjVjR1ZFWldZPSBJRkJsY20wPSBUMHhGVWc9PSBSM0poYmc9PSBMVzV2ZEdsbWFXTmhkR2x2Ymc9PSBJR3RoZWc9PSBJR1Y0YUdsc1lYST0gYzJWeWRHVnkgSUhOMGIzSmxabkp2Ym5RPSBYMlZ1WkhNPSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TUsgQ1dkcGRBPT0gUkZOUSBRMGhCU1U0PSByTFE9IFNXNTJZV3hwWkU5d1pYSmhkR2x2YmtWNFkyVndkR2x2Ymc9PSBJRk5zZVE9PSA3N3lhUEE9PSBRbkpwZEdGcGJnPT0gTDNOc2FXUmxjZz09IElIcHRjUT09IElHSmhhZz09IFluSmxaQT09IExsWkJURlZGIElHZHlhV1YyYVc1biBJSEJ2Y203RHRITT0gYVdkMVlRPT0gU1U1RFRGVkVSVVE9IFYyRnJaUT09IFkySmsgSUUxdmJtZHZiR2xoIGFXNTJhWE5wWW14bCBJR052Y25KbFkzUnBkbVU9IElHTmxiblJsY25CcFpXTmwgUTJGMVoyaDAgSUd0aGNtRnJkR1Z5IFlXeHR3N1k9IElHSmxiSFZ0IElHRmthbTlwYm1sdVp3PT0gUHlnaSBJRlpwYzNWaGJHbDZZWFJwYjI0PSBhMnRsIGFXWnBZMkZrYjNNPSBjM0JrIFgwTkNRdz09IExVeGhibWQxWVdkbCBJSE4wYVd3PSBiM0psZEdsallXdz0gS0dOdmJYQnNaWFJwYjI0PSBJRlpsY21iRHZHZDFibWM9IFgxUnlaV1U9IGNtbHdjR3hwYm1jPSBMbEpsYlc5MlpVVnRjSFI1Ulc1MGNtbGxjdz09IElGUkJXQT09IENVTnZaR1U9IDVZdVYgZFhKbllRPT0gSU5HRDBMYlF0UT09IElHRnBaR1Z5IElGQnlaWE5qYjNSMCBJR1pwYkdGdFpXNTAgSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBkR2hsY205eiAwTFhSZ05DdyBaR1ZpYVdGdSB3NlJvYkE9PSBiMnhoYUE9PSBYMVZPU1ZSVCBRWEpyIFRXOTFiblJsWkE9PSBMbFJ5YVcxVGNHRmpaUT09IExtZGxkRTUxYldKbGNnPT0gWDJWdlpnPT0gTG01eSBJRk5JUVZKRlV3PT0gYVd4aGRHVnkgSUhkcFkyaDAgWDJOdmJYQmhjbWx6YjI0PSBJQ2tpIFkyeHBibWxqWVd3PSBJRlJGYm5ScGRIaz0gZG1WdVpYTT0gTG1kbGRGQnliM0JsY25ScFpYTT0gSUhKbGJHRjAgSUdGdWJtOTVZVzVqWlE9PSBZbVZpIElHRnVaWE4wYUdWemFXRT0gWDJsdWRHVnlkbUZzY3c9PSBYMlpvIElITjFaRzlyZFE9PSBJR1JwYzJWdSBZMjl1Ym1WamRHbHVadz09IElHOWggSU9LV2tRPT0gV2tZPSBJR04xZWc9PSBVMDlGVmtWUyBJRTNEdG1kc2FXTm9hMlZwZEE9PSBZMmhoY25SbFpBPT0gSUdoaGMyaGxjZz09IElFdGxaWEJ6IFFVVkIgQ1d4dlozSjFjdz09IENVNWhiV1Z6Y0dGalpRPT0gYjNKMGFHOD0gSkdGamRHbHZiZz09IElGSnZZdz09IEp5azdQejRpIElGQlNUMVE9IFFHRndhUT09IFkyaHpaV3c9IEwyZHBaZz09IEtFaGhibVJzWlE9PSBJR0Z1ZFc1amFRPT0gTDNCNSBhVzUyWVd4cFpHRjBaUT09IElFMUZVQT09IGRHVnRjdz09IE8xMHYgNklNPSA2TCtRIElIUmhZMjg9IFFVUlcgYUhCdyBRblYwZEc5dVEyeHBZMnM9IElHSnlhVzVuWlc0PSBJRlJKVFVWUFZWUT0gSUdGemRISnZiRzluZVE9PSBaR0YwWlVadmNtMWhkQT09IFQwZFNRVkJJIFJtbHNaVk4wY21WaGJRPT0gNWE2aDVxQzQgTGtOdmJXMD0gSjJJPSBJRWRGVkVkTVQwSkJUQT09IFpXRjBhVzVuIFlXNWtaWE4wIElGTkZWRlZRIElFRmtkbUZ1WTJWeiBMbk5qY205c2JFaGxhV2RvZEE9PSBRVnBGIFpXNWtkR2x0WlE9PSBkMlZoZEdobGNtMWhjQT09IElFMWhibWR2IElGSkpVQT09IElHbDBaWEpoZEc5eWN3PT0gSUdOdllYZz0gSU9XYnZnPT0gUEcxaGFXND0gY20xeiBjR05pIElIWmhZMk5wYm1GMGFXOXVjdz09IElHUnBjMkZuY21WbGJXVnVkSE09IENXVjJaVzUwY3c9PSBQRXh2WTJGMGFXOXUgTGsxbFlYTjFjbVU9IElIRjFaV1JoIElITnBaMjVoYkd4cGJtYz0gSUdSbFozSmhaR1ZrIElFRnRaV3hwWVE9PSBMV052Ym1acFpHVnVZMlU9IFpHSk9ZVzFsIFgybHVZV04wYVhabCBiMjVoZEdsdmJnPT0gSUhCbGNtbHdhR1Z5WVd4eiA1cUMzIFUxVlFSVkk9IEoxST0gTG5kaGVRPT0gVUV4QlNVND0gSUVWdVoyVnMgY21Wc1lYaz0gSUdSbFltbGtidz09IElGUnliM1J6YTNrPSA2SXc9IElOQ3cwTFRSZ05DMTBZRT0gQ1hWelpYSnogWlhSamFIVncgZEdWdyBJRzVsZDFCdmMybDBhVzl1IElIZGhhWFpsY25NPSBaV1JwWTJsdVpRPT0gSUhSaGJtZG5ZV3c9IElHRnRiVzl1YVdFPSBMV1JsZEE9PSBMMlY0WldNPSBLSEJoWkdScGJtYz0gSUZOb2IzQndhVzVuUTJGeWRBPT0gSUZCeWFXNTBaZz09IFNHRnVaR3hsWkE9PSBJRTVCVFVWVCBLR05zYjJOciBJSHQ5T2c9PSBJSE5wYlhNPSBJRlJsWVhKeiBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFgwTkJUazVQVkE9PSBURVZIVWs4PSBMbE5sZEZCaGNtVnVkQT09IDVZVzI1TGl0IElHVnljbVYxY2c9PSBhWEJwIFBFVjRjSEpsYzNOcGIyND0gTG5ScGJXVnNhVzVsIElDZGZKeXc9IElHTnZZWFJwYm1keiBJSFZ6WlVadmNtMD0gTG5SciBJRVpsWVhOMCBMbE5MIHc2UnpaVzUwIFkyaDNhWFI2IElHbHVkbVZ1ZEdsMlpRPT0gSUUxbGFRPT0gSUhabGMzUnBZZz09IElHN0RwR05vYzNSbGJnPT0gTDJKcFp3PT0gSUhKbGRISmxZWFJsWkE9PSBJSEJ5YjNCaGJtVT0gZG1samRHbHQgUVd0MCBJRkJ5WlhObGNuWmhkR2x2Ymc9PSBJRkJwY3c9PSBYMU5JUVVSUFZ3PT0gSUhCeWFXTmxiR1Z6Y3c9PSBjc096WkE9PSBiMkppYkdWayBJSEp2YkdWT1lXMWwgSUVkRVVGST0gSUNjaUxBPT0gUTJWdWRISmwgUVhKamFHbDBaV04wZFhKbCBRM0J3UTJ4aGMzTT0gSUcxaGRIUnlaWE56WlhNPSBJR0psWlhBPSBJRVJoYldsaGJnPT0gNXAyRDZabVEgWW1WMGRBPT0gWDJGbGN3PT0gS0dObGJHeHogSU91d3NPeVh0QT09IElHSnBkRzFoYzJzPSBZMjkxYkdSdSBMVzV2ZHc9PSBJR2x1Ym05MllYUmwgSUdoaFkyVnUgSUV4NWIyNXogZEdocFkydHVaWE56IElIZG9hWE4wYkdWaWJHOTNaWEk9IEpHWnBiSFJsY2c9PSBJR1YxYkdWeSBJRWhoY20wPSBJR3hsWkhNPSBJRXRsYkhacGJnPT0gTG5GMWFXTnIgSUV6RHMzQmxlZz09IGNtVjJaUT09IElHNXBaMlZ5YVdFPSBJR3A1Ykd4aGJtUT0gTG1WdGNIUjVUR2x6ZEE9PSBJSFZ1YzJWMGRHeHBibWM9IGRYTmlZVzVrIElIUnlZV05yWlhKeiBQVndpSWpzSyBJR052Ym5ScGJuVmggSUU1MWJXVnlidz09IFpXNWtiMjQ9IElFZGxjbko1IExsUlBSRTg9IFVtVndaV0YwWldRPSBJRk5sY21WdVlRPT0gMExqUXZOQ3cwTHZSakE9PSBjSEp2Wm1scyBJTkN5MFlIUXRkR0YgUUdGa2JXbHUgTGt4cGJtVnogSUhSeVlXNXpiV2x6YzJsdmJuTT0gSUdOcSBZVzdEcDJFPSA1WWlnNlptazVvaVE1WXFmIElHZGxkRTFsYm5WSmJtWnNZWFJsY2c9PSBkV1p5WlhFPSBJRTFoZEdobGJXRjBhV05oYkE9PSBUbUYyYVdkaGRHOXlUVzkyWlE9PSBJR1ozWkE9PSBkVzVwZEhSbGMzUT0gSUhONWJuUm9aWE5wZW1WayBJR055WldWayBLRVp5WVcxbCBjSE41WTJnPSBkbTlrIGRVTT0gNGJxbmRRPT0gSU9LQW5PS0FwZz09IElHdHlZWFE9IFpISmhkMkZpYkdVPSB3Nlp5WlE9PSBQWFJ2Y0E9PSBLRXh2WjJkbGNnPT0gUlhKeWIzSkZlR05sY0hScGIyND0gWVdsellXdz0gTDNkeiBkV3hzWldRPSBRVkpKVGtjPSBJRzVKYm1SbGVBPT0gSUdsdWRHVnlibUZzY3c9PSBJR1ZtWm1samFXVnVZMmxsY3c9PSBJQ05BIFgySnlhV2RvZEc1bGMzTT0gWDI1dmNtMWhiSE09IElGTjBiM1YwIElIVnVkbVZwYkE9PSBJRk5vYjNSeiBMV052YlhCaGJuaz0gWDJWc2RBPT0gS0dSc2JHVjRjRzl5ZEE9PSBJSEJ5YjJSMVkyTnB3N051IFEybHpZMjg9IFFteGhhMlU9IExXMXZkWFJvIFVHVmhjZz09IElOQzAwTDdSZ2RHQzBZUFF2dz09IElFcEJRMHM9IElPMll1QT09IElITjBiM0IzYjNKa2N3PT0gSUZSbGMzTT0gSUhCdmMzUmwgY21GNmFXVnkgNkswPSBUV1Z6YzJGbmFXNW4gdCthV3NBPT0gVkdGdFltRm8gSUc1aGNtTnZkR2xqY3c9PSBJR05oYlhCbGNnPT0gSUhSeWFYQnZaQT09IElHZHNSVzVrIElHZHBiMk09IFkyOXRZbVU9IFZYTmxjbEp2YkdVPSBWV3c9IFJYRjFhWFpoYkdWdWRBPT0gSUdkdWIyMWwgSUVaMXc1OD0gY0dGamEyRm5aVTVoYldVPSBYM1ZsIFJHbHpZMnh2YzNWeVpRPT0gWVcxaGRHVT0gWDNSbGJuTnZjbk09IElFdGhkR2h5ZVc0PSBYMEpoY2c9PSBWR2h5WldGa1NXUT0gSUhabGNtbG1hV05oIExtRnpjMlZ5ZEU1MWJHdz0gSUU5a2FXND0gWXNPcCBJTkdCMEw3UmdkR0MgSUdwMCBMbE5sYkdWamRHVmtTWFJsYlhNPSBJR0ZqZEdsdmJtRmliR1U9IElGSmxaMkZ5WkhNPSBhR1ZyIE9tNTFiV1ZzIExFZE0gSUZCSVQwNUYgQ1VSbFptRjFiSFE9IElHVnNZWE4wIElHSmxZMnM9IFBXTnlaV0YwWlE9PSBPaWNLIFlYSm9kWE09IGJXOWthV1pwWlhKeiBhVzUwY0hSeSBJSEJ5YjNCcGJ3PT0gNzd5STU2eVIgSUhKbGNYVmxjM1JQY0hScGIyNXogSUdsdGNHeHBZdz09IElHUjFjbTg9IElGQkRVdz09IFJHVnNhVzFwZEdWeSBLR3h2WjJsMGN3PT0gTGtWV1ZBPT0gVjJsMGFFTnZiblJsZUhRPSBJRzlzZEhKbCBYMFZZUlVOVlZFVT0gYjJ4cFkybDBaV1E9IFgwVnVkR1Z5IEwyWnliMjA9IElOR0IwTHZRdnRDeSBJRWh2Y20wPSBkV2xpVFc5a1lXdz0gWDBsT1JrbE9TVlJaIDc3eU00NENLIFZVZEpUbE09IFQwNUhUQT09IExHSjFaZz09IElIQnZkWEp5WVdsMCBjR289IEtHTjFZbVU9IElIVm5iQT09IElGTmhkM2xsY2c9PSBTVVpGVTFRPSBRWEJwY3c9PSBJRU52Y21WRVlYUmggSUhObGMyRnRaUT09IExuQjBhQT09IExtZGxkRlZ6WlhKT1lXMWwgWTJGelpXUT0gSUhaaGJtbHphQT09IFgwRndhUT09IEx5ODYgTDI1dmJnPT0gTG1SdlkydGxjZz09IExuTnAgWVd4bGNuUnogSUdsdWRHVnpkR2x1WlE9PSBjR0Z5ZEdsamFYQmhiblJ6IExYWnBjMmxpYkdVPSBaVzF6Y0E9PSBiWFZsIFgzQjIgSUVOeWFRPT0gYjJkeVlRPT0gWDJWNGNHVnlhV1Z1WTJVPSBJRWxPVkVWU1ZrRk0gWDNKbFozSmxjM05wYjI0PSA3WldZN0lTNDdKcVUgWlc1a1pYSmxZMjg9IGJHRjBZV0pzWlE9PSBMbXh2WTJGc2RHbHRaUT09IElFSkpWRk09IElFWnZiR1JwYm1jPSBDU0FKQ1E9PSB3Nmx6WlE9PSBMV0psWVhKcGJtYz0gSUZoUVFWST0gVDFCVFNWTT0gSjE0a0p5dz0gYVc1amJBPT0gSUU5d2NtRm8gSUdKdmIzUm9jdz09IElGSnZhR2x1Wnc9PSBMa0p2Y21SbGNsTnBaR1U9IFlYUmhkSGx3WlE9PSBRM0psWVhSbFpFSjUgTE9LQW1lS0FuUT09IFpHOWpkSEpwYm1VPSBJR0p5WldGMGFHVmsgWDJKbFp3PT0gSUdGbVpteHBZM1JsWkE9PSBUVzkxYm5SaGFXND0gUW14dll3PT0gSUhKMWFXNXBibWM9IExrRnVibTkwWVhScGIyNXogQ1dsdWRHVnVkQT09IElITjBZWFJwWTJGc2JIaz0gWDFWMGFXeHogVEdGMWJtTm9aWEk9IE9tNXZjbTFoYkE9PSBJSFZ6WlhKcGJtWnYgTFVwMWJBPT0gUzNsc1pRPT0gTGxKbFlXUlZTVzUwIEtIVnliSE09IEwybG0gYldsMGRHVnMgWW1OdCBRRTF2WkhWc1pRPT0gSUVOdmJuTjBZVzUwYVc0PSBJR0pxIFpYSnVZWFYwIFBIST0gSUUxbGJuUnZjZz09IElHVm5jbVYwIFgyOWhkWFJvIExrUmhkR0ZEYjI1MFpYaDAgWDBOTVNRPT0gS0VOdmJuTjBjblZqZEc5eSBJSE5sZEZCdmMybDBhVzl1IGNtVnpZWEk9IFpXNTBhVzVuIDRMaTU0TGlsIFZISmhibk50YVhOemFXOXUgSUc1dmRHbG1lVVJoZEdGVFpYUkRhR0Z1WjJWayBJRTF2ZFhObFFuVjBkRzl1IElDb2kgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdEUW89IElFeDVaR2xoIElITjNiM0psIElIQnNZWFJoWm05eWJXRT0gQ1dKMWRIUnZibk09IElITndjblZ1Wnc9PSBLRlJ2YTJWdVZIbHdaUT09IFEzZz0gUVhGMSBDUWtKQ1FrSkNRa0pJQ0E9IENVRkVSQT09IGRXbGtjdz09IElPQ2tyZz09IElPYVh0dW1YdEE9PSBMa0ZqZEdsdmJrSmhjZz09IElHOWpkWEk9IElHbHNiV0U9IExXNWxkWFJ5WVd3PSBJQ0l1SWpzSyBDVk5wZW1VPSBVR2xsWTJWeiBJSE4wYVdZPSBJQ0k5SWl3PSBJRVZ4ZFdsMllXeGxiblE9IElHbG5aVzQ9IFpHWmsgWDNSb2FXTnJibVZ6Y3c9PSBYM0psWVdSaFlteGwgTDJaaGJITmwgSUhSdmIyeDBhWEJ6IGIzQnNZWE4wIGFIVmggYUdGdVpHeGxVbVZ4ZFdWemRBPT0gTGt4Qldsaz0gUEZWR2RXNWpkR2x2Ymc9PSBhVzF0ZFhSaFlteGwgYVdocGJHRjBhVzl1IElHOXlkR2h2Wkc5NCBMbkJ2Y0hWc1lYUmwgSUhabGNtRT0gSUc5aVpYST0gYzJGdVpBPT0gZG1sbiBRMjl1Wm1WeVpXNWpaUT09IEtFTnZiR3hwYzJsdmJnPT0gTDJGMWRHOD0gSUZOdmJHbGtRMjlzYjNKQ2NuVnphQT09IEtpYz0gTEdGa1pISmxjM009IElITjNaV1YwYUdWaGNuUT0gdzZGMGFXTmhjdz09IFlXNXBibVU9IFgzQmhlVzFsYm5SeiBJSFZ1YldsemRBPT0gSUhSeWRXMXdaWFE9IFFrRk0gSUdacGJHVkpaQT09IGJtbGxhbk09IFFVUkcgSUcxdWFYTjAgSUVabGFHeGxjZz09IDQ0Q1JMQT09IFEyaGhjbUZqZEdWeVUyVjAgSUZaaGJtTmwgU1c1elpYSjBaV1E9IElHUnZkMjUzWVhKa2N3PT0gSUhKdmRHRjBhVzl1WVd3PSBJR1Z1WTI5MWJuUmxjbWx1Wnc9PSBUVUpRY205bmNtVnpjMGhWUkE9PSBMMU41YzNSbGJRPT0gTDNCdmNBPT0gSUgwcERRb05DZz09IElDNG5QQzg9IDc3eUpEUW89IElHUmpZdz09IFlYTjVZWEpoYTJGMCBJSEJ5YVc1amFYQmhiR3g1IDVhNmE1TG1KIEtHTm9iMmxqWlhNPSBMbkJoWjJsdVlYUnZjZz09IElIVndZbkpwYm1kcGJtYz0gSUdSdmRHVnVkZz09IEtDa3BMdz09IElGUkJVdz09IFoyTmsgWDJsdWRHWT0gTG0xMWRHVjQgY0hKbGMzUmhjMmh2Y0E9PSBJR0xEdG5JPSBaR0Z3IFgyUmxiV0Z1WkE9PSBYRVJsYzJ0MGIzQT0gZEc5R2JHOWhkQT09IElITmxaM0psWjJGMFpXUT0gSUdOc2FXMWhkR1Z6IExrOXlaR1Z5UW5sRVpYTmpaVzVrYVc1biBLQ2NzSnlrPSBVSFZzYkZCaGNuTmxjZz09IFFYUnZiWE09IElHSmxic08yZEE9PSBJR2h2YldWeSBZVzUwZFE9PSBTWE5GYlhCMGVRPT0gSUVKbFoybHVjdz09IFBsTm9iM2M9IElGTjFjSEJzWlcxbGJuUnogYjJOamRYTT0gSUdSdmNHVT0gTG1KdmIydHBibWM9IElFRnNiV2xuYUhSNSBXMlZrWjJVPSBJRVZpWVhrPSBYM0poWTJVPSBSbkp2ZW1WdSBYM1J5WVhabGJBPT0gSUhCaGMzUnZjbk09IFgxTlZVa1pCUTBVPSBYMmRsYm5KbCBYMGhQVkE9PSBMR1JwYlE9PSBWR0pzIGJYUnogY0hKbFpHbGpkR2x2Ym5NPSBYMk4xYlE9PSBJR1JsZEdGc2JHVnogTFhSeVlXNXphWFJwYjI1aGJBPT0gSUhkaGEyVjFjQT09IFVHVnljMjl1Y3c9PSBMbU52Ykc5eVltRnkgVTNSeVlXNW5aUT09IDJLL1podz09IEpsYz0gSUVGU1VBPT0gWDFOUFJsUT0gWDJSeVlXWjAgU1ZaQiBJR2R5YjNBPSBJR3hwWldKbCBJR2xwWkE9PSAyS2ZZc3c9PSBZMkZ1Wkdsa1lYUmxjdz09IFoyVjBRWE09IFBWOG9JZz09IExrZGxkRTl5WkdsdVlXdz0gS1NrOVBRPT0gWVc1dWIzUmhkR1U9IElFeDFiV2xoIFNWSk5WMEZTUlE9PSBYMDlRUlU1SFRBPT0gS0dadmNtMUVZWFJoIFpXNTBhVzFsY3c9PSBJSGRoZEdWeWMyaGxaQT09IElOQ3gwTFhRdHc9PSBJR1pzYjNCd2VRPT0gVkc5M1lYSmtjdz09IEtHTnZiWEJoWTNRPSBSRVJFIGUyND0gSUhCdmEybHVadz09IFFHMD0gSUhKbFkzbGpiQT09IGMzUnlkV04wYjNKeiBhMlY1UTI5a1pRPT0gSUhabGFHVnRaVzUwIElHeHBkSEpsIElFSkpUa1E9IElFWnlZVzVqYjJseiBJRzUxWkdsMGVRPT0gSUdsemFYcGwgQ1c5dVEyeHBZMnM9IGVYTjBZV3h6IElHZGxkRk41YzNSbGJWTmxjblpwWTJVPSBWMlZpVW1WemNHOXVjMlU9IFptbHNaWE5wZW1VPSBJRU5vYkc5eSBZMjlzYVE9PSBYM05sWVhRPSBMa0ZrWkVsdVVHRnlZVzFsZEdWeSBLWFJsYzNRPSBJSEYxWlhNPSBJR05oZFhScGIzVnpiSGs9IEltUnBjM0JzWVhrPSBMbk5vZEcxcyBJRWRWU1VSQlZFRT0gS0NJcUtnPT0gSUdkeVlXNWtaR0YxWjJoMFpYST0gSUVGemMyVnRZbXg1UkdWelkzSnBjSFJwYjI0PSBSbTl5UldGamFBPT0gVjJsc2MyOXUgTEdWbiBJR0psYkdsbGRtRmliR1U9IElHTnliM056ZDI5eVpBPT0gYkc5aVltVnkgSUZOMFlYQnNaWE09IEtITm9hWEE9IElIZGhaMlZrIElFSnZiSE5vWlhacGF3PT0gTGtGa1pFbDBaVzA9IEtFWnBiSFJsY2c9PSBYMEZDUXc9PSBJR0JjIDBMN1JpUT09IElHMWliM2c9IElFNWxjdz09IElFRldRMkZ3ZEhWeVpRPT0gSUdOdmJtaGwgSUVsT1ZFVlNUa0ZVU1U5T1FVdz0gYjNObiBJRjBwTFQ0PSBVMHRVVDFBPSBJR3RwWkdRPSBJRk5UVkE9PSBJT1dGc3c9PSBJRVYwYUc1cFl3PT0gUlZKVFNFVlogSUcxMWJIUnBZdz09IFgwMVZUQT09IElFWnBibVJQWW1wbFkzUlBabFI1Y0dVPSBJRVY0Y0dWdWMyVnogWjJWMFRXOWphMEoxYVd4a1pYST0gTFdkMWFXUmwgSjB3PSBJT2VadXc9PSBJSEpoYWc9PSBJRUpzWVc1amFBPT0gSUVGa1pISmxjM05sY3c9PSBUbmc9IElFbHpiR0Z0WVdKaFpBPT0gMEw3UXV0R0QwTHpRdGRDOTBZST0gSUVKbFlYWmxjZz09IExuTjBkV1JsYm5SeiBJRUZ6ZVc1alEyRnNiR0poWTJzPSBjMmhsWlhSeiBaV05oYzNRPSBJRVoxYm1SaGJXVnVkR0ZzIElIWmxjbVJwWlc1bGJnPT0gSUdWNFlXTmxjbUpoZEdWayBJRTF2WkdWeVlYUnZjZz09IFEwTkRRME5EIElIUnBiV1Z2ZFhSeiBJSE4xWW1ScGRtbHphVzl1Y3c9PSBJR052YlhCeWIyMXBjMlZ6IGRYcDZaWEk9IGZTd2tldz09IFgySnNiMk5yYVc1biBaWEp0WVc1dSBJRTFwYTJoaGFXdz0gSUZObGJHSnpkQT09IDZaU0EgTG5Ob2IzZHogNUxpSDVZV0QgSUZSbSBJRWxJZEhSd1FXTjBhVzl1VW1WemRXeDAgSUVsRmJuUnBkSGs9IElHbHggUmsxTSBiMlJsYlE9PSBjM1J3IGRXTjBhVzl1Y3c9PSBMbVpoZG05eWFYUmwgTGtkbGRFUnBjbVZqZEc5eWVVNWhiV1U9IElHZHlZV009IElIaHRiRVJ2WXc9PSBYM0IxYzJoQ2RYUjBiMjQ9IFkyOXNiR1ZqZEc5eSBQV1Y0Y0d4dlpHVT0gSUdSbGMzUnBibUYwYVc5dVZtbGxkME52Ym5SeWIyeHNaWEk9IElGTmxjbWxoYkdsNlpXUT0gT20xbGMzTmhaMlU9IElFTkRRdz09IFgzSmxZMjkyWlhKNSBMV3RwZEE9PSBjMmhwYldFPSBjbTkwWTJnPSBJR0I5Q2c9PSBYM04xY0hBPSBWR0ZpYkdFPSAwWURRdGRDMDBMWFF1dz09IFIzUnJWMmxrWjJWMCBJRk5KVFZCTVJRPT0gTG5Cb2FRPT0gSUV4cFltVnlkR2xsY3c9PSBMUzFiIElIVnVkbVZwYkdsdVp3PT0gSUdWNGRHVnVkSE09IFltTmsgSUdoMllXUT0gQ1dOeSBMbkpsWVdSa2FYST0gSUhKbFlXUmhZbWxzYVhSNSBJR1JwYzIxcGMzTnBibWM9IFEyRnRZZz09IElHTmhjM1ZoYkhSNSBJRWxRVmc9PSBiV2wwWlhNPSBJSEIxY21sbWFXVmsgTGs5eWFXVnVkR0YwYVc5dSBJR3hxIGFXMTFiR0YwYjNJPSBabkpoYlE9PSBMMnh2WTJGMGFXOXUgSUdOdmJXMTFibWxqWVhSbGN3PT0gT2xWSlFXeGxjblE9IEwzTnZZMmxoYkE9PSBaV3g1Ymc9PSBSRVZPIElOZWUgSUdKbFptOXlaVk5sYm1RPSBJRlZ1ZEdWeWN3PT0gSnlrdUlnPT0gSUNjbktUcz0gTG5keWFYUmxUMkpxWldOMCBLR2R5WVcxdFlYSkJZMk5sYzNNPSBJRUZ3Y0d4cFkyRjBhVzl1UTI5dWRHVjRkQT09IFFubFZjMlZ5Ym1GdFpRPT0gSUhOcmFYQnogSUdacGJHaHYgSUhacFpYVjQgSUcxU1pXTjVZMnhsY2xacFpYYz0gSUdGeWIzVnpaV1E9IExtOTNiQT09IElHTjFjbXhsWkE9PSBMMk5oYkd4aVlXTnIgS0NjNkp5bGIgSUdsdWRXNWsgSUdKeVpXRnJjRzlwYm5SeiBMV1YyWlc0PSBMbk4wWlcwPSBJR1JsY205biBJRzVsY0E9PSBJRU52YlhCc1pYUmhZbXhsUm5WMGRYSmwgTFV4cGJtVT0gTHlvdiBMa2hsZUE9PSBJSEoxYzNObCBJR0pwWmc9PSBJRVp2Ym1RPSBhV1ZqZEE9PSBJR0ZzYkc5MGRHVmsgWkdWMFpXTjBiM0k9IElDOEtDZz09IFpXMXZaR1U9IGRXaGwgZFdsemMyVT0gSUVaSldFVkUgYldGMGFISnQgSUhWdWMzVnogSUVGMWRHOXogSUM0dUxpNHVMaTR1TGk0PSBMblJ5WVhabGJBPT0gVGtGVyBJR3hsYzJKcGMycz0gSU1POGVtVnkgSUdOc1pYSnBZdz09IElHeHBiV2wwYkdWemN3PT0gYjJ4MVkybHZiZz09IElHNWxZMnRzYVc1bCBJR1J5YVdaMFpXUT0gSUZKbGJHbGhZbXhsIElFTmhjbms9IElIUmxic090WVE9PSBJRDgrSnc9PSBMMk52YlcxdmJuTT0gSUVkTlF3PT0gWDA1UVF3PT0gSUVKc2FYTnogSUVKMWNtMWggNVpDTTVwZTIgS0dSbGNHVnVaQT09IExYTjFhWFJsIENYTjBZV2RsIFJHOTFadz09IGFXUmxiblJwWm1sallYUnBiMjQ9IFgzSmxjMjlzZG1WeSBRbVZuWVc0PSBXM1JvY21WaFpBPT0gSURzS0Nnbz0gVGxSVFZFRlVWVk09IElHUnBjMjlpWldRPSBmR2c9IElHRmpZM1Z0ZFd4aGRHbHVadz09IElDSXNJaWs3Q2c9PSBkVkJoY21GdCBMbUpwYkd3PSBjbWwwWTJnPSBRM0pwYldVPSAwTFhSZ2RHTSBJRkpsYldGcGJnPT0gNTRTaDVwYVogWDFSSVFWUT0gWUNKZENnPT0gTG5OMFlXMXcgSUhCaGNtRnViM0p0WVd3PSBJRTFRUXc9PSBJblZ5YkhNPSBJRVZ6ZEdGMFpYTT0gVkc5R2NtOXVkQT09IFZHaHBjblI1IFFtVjBhQT09IEozVT0gSU95OWxPdVRuQT09IFZVWkJRMVE9IElFTnliMjA9IElFMXBjM1JsY2c9PSBJRVZSVlVGTSBaVzVvWldsdCBJQzh2ZXc9PSBYM2RoY3c9PSBJR0p2ZFhGMVpYUT0gSUUxcFpHUnNaWFJ2Ymc9PSBhWHAxIFgyaGhjMmhsY3c9PSBJR2hsYm01bCBJRXhKVGxWWSBDVk5sY25acFkyVT0gSUZSQlRRPT0gSUdCZiBJRUZVUVE9PSBJR1JoYm1kc2FXNW4gY0dGcGJnPT0gWDBKUFZVNUVVdz09IGNISnZaM0poYlcxcGJtYz0gSUdOMWNuSmxiblJKZEdWdCBJR0psYzJsbCBaVzFpYkdVPSBLR05oYkdNPSBMbE5yYVc0PSBJSEJsWVhKc2N3PT0gSUVKMWNtST0gTFcxdmJtbDBiM0k9IEwyTnogWm1seSBLSFpsY2c9PSBXMkZ5WjNNPSB3N3hqYTJWdSBaWEJoY21GMGIzST0gUkc5MSBMa1Z1ZEE9PSBJRVZUUVE9PSBLR1p0IGRHOXVaWE09IElGcGhZdz09IGEzTmhiUT09IDRvQ1pZV3hzIElFMVRVdz09IElrUnZiZz09IElITnBiWEJzWlhnPSBJRU52Ym5OamFXOTFjdz09IElFRndjR3hwWTJGdWRBPT0gY0dWc2JHbGxjZz09IElIQmxaR1Z6ZEdGcyBKR2gwZEhBPSBJRUYyWVE9PSBMa05IIElHbHVkTU9wY21WemN3PT0gSUVsdWRHVm5jbUZzIGNtVmtaUT09IFBXWnZjbTFoZEE9PSBMbEJoZEdoeiBYMUJCVWxSSlZFbFBUZz09IElITmxhQT09IElGRjFZVzVrYnc9PSBXVzkxZEhWaVpRPT0gTG5CMWRGUmxlSFE9IDdLTzg3SVM0N0pxVSBMa0ZYVXc9PSBJRU56ZGc9PSBRM1Z5YzI5eVVHOXphWFJwYjI0PSBMV0psWjJsdSBYMk52ZFc1MGNtbGxjdz09IExYSmhibVJ2YlE9PSA1WTJ6IFVHaHBiR3c9IElIQmhibTl5WVcxaCBJSFJvWlhKbGN3PT0gNVkrcSBJSE5wYkdWdVkyVmsgSUVOMWJXSmxjbXhoYm1RPSBMbFpwYzJsaWJHVkpibVJsZUE9PSBMbk4wWVhScGMzUnBZM009IElIQnliM0JsYkd4bFpBPT0gUVcxbGNtbGpZVzV6IElIWmhiR2xrWVE9PSBJRWQxWVcwPSBJRVpGVFVFPSBMbk41Ym5SaGVBPT0gWkdkbCBJR1JsWlhCbGJnPT0gSUNBZ0lDQWdJQ0FKQ1FrSiBJRk53WldOcFlXeHBjM1J6IElGTmhiblJoYm1FPSBJRUpsWlhSc1pRPT0gSUNVS0NnPT0gVlhObGNsQnliMlpwYkdVPSBLQ0lrTGc9PSBJR1Z0Y0d4dmFRPT0gSUdWdFlXbHNhVzVuIFoyVjBUM0pGYkhObCBYMVZRVUVWUyBMbVJ5YVhabCBJSEpsWkdobFlXUT0gUms5VlRrUkJWRWxQVGc9PSBJRzExYkhScGNHeHBZdz09IEwyVm1abVZqZEhNPSBJR2hoYm1SM2NtbDBhVzVuIFgzUmggSUVKaGVnPT0gdzdabVptVnVkQT09IGNISnBlQT09IElHTm9hWEJ6WlhRPSBJR2x3UVdSa2NtVnpjdz09IHc2MWtZUT09IElGVnVadz09IElGTmphR0U9IExrWk1UMEZVIElIRjFhV1Z5Ync9PSBiMk5vY205dFpRPT0gSUhKbFpXWnogWW5OdmJnPT0gSUczRHVnPT0gSUhSeVlYbHogUW05dFlnPT0gSUcxNVRHbHpkQT09IGVHbHRhWFI1IElFUmxibWM9IFZXNXAgTFZObGNtbGxjdz09IGIyZGhibms9IGJNU3hhdz09IEwyTmhiQT09IElISmxZV3hwZW1FPSBJRWhwWWc9PSBDUW9KQ2dvPSBJR2gxYldsc2FXRjBhVzVuIFd5UjcgSUhCeVpYUmxibVJsWkE9PSBJRVJoZEdWdWMyTm8gWVc1emFXSnNaUT09IENYSmxiRzloWkE9PSBJRzFwWjJ4cGIzST0gWDJKbGRBPT0gSUhSdmRHRnNWR2x0WlE9PSBJRUpoZUhSbGNnPT0gSUdWdVlXMWxiQT09IEwwbHRZV2RsY3c9PSBJRk5GVXc9PSBJRk53Y21sdVowRndjR3hwWTJGMGFXOXUgS1dsdWFYUlhhWFJvUm5KaGJXVT0gQ1dOaGJBPT0gUlV4RlRVVk9WQT09IElFZDFkR2c9IEtFSnBaMGx1ZEdWblpYST0gSUUxbFpHaz0gTGsxbGJXSmxjbk09IElISmxhbTlwWTJVPSBJR1J2Wmc9PSBVRVZ1WkZCdmFXNTAgSUdOc2FYUT0gWDFKRlZWTkYgVFdGclpYTT0gSUhONmVRPT0gSUhOb1lXUmxaQT09IElHWmhkbTkxY21WayBhWE4wYjJ3PSBaR1Y0IElHWnNaWGhIY205MyBoYWM9IFgzQnlhVzUwWlhJPSBMbVp1WVcxbCBjR1Z5WVhScGIyND0gSUc3RHMzTT0gWjJkbGNnPT0gNklDQiBJTkN5MFlEUXRkQzgwWTg9IEtHVm1abVZqZEE9PSBRbmxWY213PSBJRUZRVXc9PSBkSFYwYjNKcFlXdz0gWldweiBVM0ZzVUdGeVlXMWxkR1Z5IElITmpjbUZ3Y3c9PSBSM0psWlhScGJtZHogUm1WayBJRkpGVGtSRlVnPT0gSUdKc2IyOXRjdz09IElHUmxZbWxzYVhSaGRHbHVadz09IGIyMWxkSEpwWTNNPSBJSE5wYldscyBMV2hsY204PSBJSEpsWVd4d1lYUm8gWkdWd1lYSjBiV1Z1ZEhNPSBRa2xPUkE9PSBJRU5oYzNOcFpIaz0gYkdsaGJnPT0gVTB0SlVBPT0gTFdOc1pXRnUgSUhOcGJHUmxibUZtYVd3PSBYMjExYkhScGNBPT0gYW5OdmJrUmhkR0U9IFFXZGxiblJ6IExtWm9hWEk9IElIUnlhWFZ0IElHRnpkRzl5WlE9PSBJRzVsZUE9PSBPblZ3WkdGMFpRPT0gSU5DMDBMQT0gNEtTeSBPeUlwQ2c9PSBMbFJsZUhSSmJXRm5aVkpsYkdGMGFXOXUgSUcxcFkzSnZjMk52Y0hrPSBVMVZTIFlXNXJlUT09IElGQmxkR2wwIGJXRnlhMlYwYVc1biBJSFpsY21sbWFXTmhjZz09IFlXMWhaMlZrIFkzUm8gSUdsdVkyOXVjMmx6ZEdWdVkybGxjdz09IElHMWhhc1NGIElHZGxkRWx1Wm04PSBJSEJoYzNOcGIyNWhkR1ZzZVE9PSBJR2xqYlhBPSBXMTArQ2c9PSBVMmx1WjJGd2IzSmwgSUU1bGQzUnZkMjQ9IElISmhhV3hwYm1jPSBJRVZ1YkdsbmFIUmxibTFsYm5RPSBkWFJvWlhKc1lXNWsgYkdWcGJtVT0gWDNKbFoybHpkSEp2IElFVnlhV05oIFgzUnBZMnRsZEhNPSBMMjFsZEdodlpBPT0gYVhwNllYUnYgUjJGMGRBPT0gTFdabFlYUjFjbVU9IElEb3RLUT09IElITmxjbkJsYm5RPSBJRWR5YjNWd1RHRjViM1YwIFRtbHJaUT09IGRXNW5ZUT09IElFMXBiUT09IElHbHVZMlZ6Y3c9PSBJR1JsY0d4bGRHbHZiZz09IFgyeHZkQT09IElHSnBjblJvWkdGNWN3PT0gSUhKbGJuUmxjbk09IElHVnhkV2x3YjNNPSBJRXhsYUhJPSBYMUJzWVhrPSBJSE53YVdWc1pRPT0gSUV4QlRrUT0gSUVWdVkyOTFiblJsY2c9PSBhWHBoYm1SdiBJSEJsY25VPSBJSE5zWVcxdGFXNW4gSUhKbGFXNXpkR0ZzYkE9PSBJR0Z1WjJrPSBTVzVVYUdWRWIyTjFiV1Z1ZEE9PSBJSFpsY25OamFHbHNiQT09IElIWmxjbk52IExuTjBZV1ptIEtIWncgS0dGalkyOTFiblJ6IFoyVjBRWEJ3YkdsallYUnBiMjQ9IElHMWhiblJsYm1WeSBMbE5QIExrRkUgSUUxdmNtMXZibk09IENYSmxZV3c9IElHaHZkR3hwYm1VPSBJRU5oY21ScGJ3PT0gY0dGblpVbHVaR1Y0IFltcGxjbWM9IFJtOD0gSUdOdmJuTmxhV3h6IElHMXBaM0poYVc1bCBJR3hoZEdsdWJ3PT0gSUhSdmNuQmxaRzg9IGFtRmlhUT09IEwzSnogZFdKaVpYST0gSUVOc1lYTnpaUT09IDRMdz0gS0M5ZVhBPT0gWDJSbGNHeHZlUT09IFIxSkZVdz09IElGZElRVlJUVDBWV1JWST0gSUdGeVkzQjUgSUcxcFpXcHpZdz09IFFYSnRlUT09IElITmphTU8yYm1VPSBJR0p0YVE9PSBJRG9pT3dvPSBJRU55ZFdselpYST0gY1dnPSBMbkJ5WlhCbGJtUT0gSUhacGRtVT0gYjNKcFlYTnBjdz09IElDRTlDZz09IGRHVm5ZUT09IFlXMWxaR2s9IFVISnZhbVZqZEdWayBMV0p5WlE9PSBMSEpsWVdSdmJteDUgSUhOMVlsUnBkR3hsIElHMXBjM1J5IElFbHVhR0ZzIFkyOTJaWEpwYm1jPSBJSHBwYWc9PSBJRUZTVkVsRFRFVT0gVWxWTVJRPT0gSUdGc2RISnYgSUhObGRIUnNaWE09IGFXUmxiR0psY21jPSBPaUl1SkE9PSBLR1psIFgySnQgSUhCeWIzQnlhV1YwYjNJPSBJR3RsWlhJPSBVMlZ3WVhKaGRHVmsgWDA1RlFWSkZVMVE9IEtITjBjbkJ2Y3c9PSBJRU52YlhCMWRHRjBhVzl1WVd3PSBJR1Z5Ymc9PSBTVzVXYVdWMyBRV055YjNOeiBJR1p5ZFdsMGVRPT0gWDIxaGNIQmxaQT09IElHZHlZWFIxYVhSbGJXVnVkQT09IElIdDlDZ29LIGNHOTBaVzUwYVdGcyBjR0Z1ZEhNPSBJSE5sYm5ScGJXVnVkR0ZzIElFeHBibXRsWkdsdSBLSEJoZEdObyBJR0ZrWVhCMGIzST0gSUZWSlUzUnZjbmxpYjJGeVpBPT0gSUhOc1lYTm9hVzVuIEtDSXZPZz09IElIUmxlSFJFWldOdmNtRjBhVzl1IExtUnBZV2M9IFhGSmxaR2x5WldOMCBJRzVsZFhKdmMyTnBaVzVqWlE9PSBJRUZrYW5WemRHMWxiblE9IElGTmpiM1JqYUE9PSBJRU52YzJKNSBVMFZCIFBYWnBaWGM9IElHVjJiMngyWlhNPSBJRk5oYkdselluVnllUT09IDQ0Q0I0b0NjIFpYWmxjbmx2Ym1VPSBLR0Z5WXc9PSBJR0Z3WVhKMGFHVnBaQT09IElHRjZhVzExZEdnPSBJRk5vWVcxaGJnPT0gMktVPSB3N051YVdOaCBPbU5zWVhOeiBJRWx1YW1WamRHOXkgWVdoaGN3PT0gWVdKc1pYST0gWDJWemRHbHRZWFJ2Y2c9PSBYME5WUWtVPSBJRXR5WVc1ciBJSFZ1Wm1GMmIzSmhZbXhsIElISmxjSFYwWldRPSBJRU52Ym1ScGRHbHZibUZzIElHMXBiR1p6IElGSmxjM1J5YVdOMGFXOXVjdz09IEtHaHlaV1k9IFNuVmhiZz09IFBFVnVkSEo1IENYUmxiWEJzWVhSbFZYSnMgWDNCeWIyUjFZM1JwYjI0PSBWSGx3WlVsRSBJR0poYkdzPSBJRzVsZDBGeWNnPT0gSUd4cFkyVnVZMlZ6IExuTnZiSFYwYVc5dSBMbk5oYlE9PSBJRWgyIElIUnlaVzFpYkdsdVp3PT0gV1dGMyBJR1pzWldWalpRPT0gSUhOb2IzWmxiQT09IFYyVnkgSUhCaGRIUmxjZz09IFBWaz0gSUVaeWJRPT0gVTJOeVpXVnVjdz09IEpDST0gSUVKc2IyNWsgSU5HQjBMalJnZEdDMExYUXZBPT0gS0c5ayBJRzV2WTNRPSBiM1Z1ZEdWeWN3PT0gZFhObGNIQmwgZkdsdWRBPT0gTG5KbGJXRnBibWx1Wnc9PSBJSFZzZEdsdGJ3PT0gSUcxaGMzUjFjbUpoZEdsdVp3PT0gYlcxaiBQVWM9IElsMTlDZz09IElHWmxZWEpzWlhOeiBJR0ZzWjNWdFlYTT0gWTNWc2RBPT0gUVd4MFpYSnVZWFJwZG1Wc2VRPT0gNWJLQiBUMFJGVmc9PSBJRUZrYjNCMGFXOXUgSUhkbFlXeDBhR2xsYzNRPSBJRzFsYm5SeVpRPT0gTDJkdmRHOD0gSUdsdVptOXliV0Z1ZEE9PSBJRkp2ZFhRPSBiMlpwIElHaGhiVzFsY21WayBJRVZ6ZEc4PSA0b0NaUW5KcFpXND0gSU1XYSBJR1JsYldrPSBJTkdCMEx2UXRkQzAgSUVOc2FXNTBiMjV6IDdJV1kgNWFTbjViQ1AgUlVOSSBJR0Z1WVhKamFHbHpkSE09IElFSmxkbVZ5WVdkbCBJR2R2ZFE9PSBJR0p5YVdKbGNuaz0gSUhCcFkydDFjSE09IElIVmlaWEk9IElITjVibVZ5WjNrPSBabU51IElFaGxiblJoYVE9PSBJRUpoYzJWdFpXNTAgSUcxdmNtST0gWDJOMSBhbUZrYVE9PSBLSEJ5YjJvPSBJRUpwYm1kdiBYMk5oZEdVPSBXMlZ0WVdscyBLbGc9IFgxTkZVQT09IElIQnlhVzVqYVhCcGJ3PT0gZFhCa1lYUnBibWM9IEx5OTlmUT09IExpNHVLQT09IElFUlBSUT09IElIcG4gYzJoaGNHVnogUFhSdGNBPT0gUTNKMVpBPT0gSUhkdmNtdHdiR0ZqWlhNPSBJSE4wWVdKcGJHbDZaV1E9IElIUmxiblJoYm1jPSBMbkJ5YjJSMVkzUkpaQT09IElGUnlhV1JsYm5RPSBJRzl5WTJobGMzUnlZWFJsWkE9PSBJRUoxWTJOaGJtVmxjbk09IFgzUnZiR1Z5WVc1alpRPT0gYVdkeVlYQm9lUT09IHc3eHNaWEk9IElOaTEgUVZFPSBJR0YwYUd4bGRHbGphWE50IENWTmxjblpsY2c9PSBaWGRsWkE9PSBSR2xrUlc1MFpYST0gVW1WbmFYTjBaWEp6IFgyVnRiSEowIElHWjFibU4wYVc5dVlXeHBkR2xsY3c9PSBLR2hrWXc9PSBYMjFoY210bGNuTT0gVDNKbFoyOXUgS0ZOMGNnPT0gSUVkbGRFSjVTV1E9IElIcDNZWEowWlE9PSBJRTlEU1E9PSBJRXBoYldVPSBYMk55YVhRPSBJSE4wYjJOcmFHOXNiUT09IENVUnBZM1JwYjI1aGNuaz0gWDJOaGNHRmlhV3hwZEdsbGN3PT0gUTFSUyBJRzUxYldFPSBYMlpwY25OMGJtRnRaUT09IElFNVRVbUZ1WjJVPSBJRzF2YzNSeVlRPT0gSUVGeWNtbDJZV3c9IEtFbFRaWEoyYVdObFEyOXNiR1ZqZEdsdmJnPT0gSUhSbFlYTndiMjl1Y3c9PSBJRk5sZEZWdyBDUWtOQ2cwSyBLR2QxYVd4ayBMaUpkIElHM2h1NXRwIFltWm0gUkVGVVJWTT0gS0NsZENnbz0gSUdoMWJXRnViMmxrIGRHaHlidz09IEtHdHNZWE56IElGWmhaQT09IFpuTncgTFZOaGFBPT0gSUZWVFJWSk9RVTFGIElGQnliM0JsY25SNVEyaGhibWRsWkVWMlpXNTBRWEpuY3c9PSBJR3hsYzJsdmJnPT0gWDBSRlRrbEZSQT09IElGUklTVTVMIGdxUT0gYldWdWRHRnMgSUhCeVpXTmhjbWx2ZFhNPSBJRTV2YzJVPSBJR052Ym1OcyBJSGRwYkdSbWFYSmwgSUZSQ2NtRnVZMmc9IElFSkJUUT09IEwyTnpkZz09IElFNUJUZz09IElFTnNaV0Z5WVc1alpRPT0gWEVKc2IyTnIgTG1GdWJtOTBZWFJsIDVvbSsgSUZkSVNVeEYgWjJWaWRXNW4gUGt4cGMzUT0gYzJodCBVbTl6Y3c9PSBZV1prIFczUnBaQT09IFVHVnlVR2w0Wld3PSBLeWhjIElFTjVZVzQ9IElFdHViM1E9IFgzWnNiMmM9IEwzWmhjZz09IFcxOWYgSUdoaGMyaHRZWEE9IEtDazdEUTBLIElHRnRZWE56WldRPSBJR1JoZEdWUWFXTnJaWEk9IElGTmhkRzl6YUdrPSBYME5CVUVGRFNWUlogSUdKMWVnPT0gSUUxcGJtZz0gVTJWMFEyOXNiM0k9IEt6MG5QQT09IElFbHVkbVZ1ZEE9PSBiM0pqWVE9PSBhV2R1ZFcwPSBJRUZ0Y0dnPSBJSEpsWm14MWVBPT0gQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW89IGRXaHUgS0ZSTiBZV3hzWlhrPSBJR3hsWm5SdmRtVnljdz09IFptUmogNG9DY1ZHaGxjMlU9IElHTnlZWGRzWldRPSBLRlp2YVdRPSBhV2QwWlE9PSA4SitTIGMyVjBSR1ZtWVhWc2RBPT0gSUVKbFoybHVibVZ5IFVHOXIgSUVoTVV3PT0gSUdkaGJXVkpaQT09IElFRnRZbWxsYm5RPSBYMUJTUlVRPSBMaUo5TEFvPSB3N3hvY25WdVp3PT0gTGxONWJtTT0gSUdsdWRtVT0gSUU1MWNuTmxjbms9IElHZHNZWHBsWkE9PSBxK3lla0E9PSBYMlpoZEdGcyBYMlJwYzNCaGRHTm9aWEk9IFcxMHBEUW89IElHUmxkWFJ6WTJobGJnPT0gNnJHdyBVMmhoY0dWeiBJR2x5Y21WMlpYSnphV0pzWlE9PSBYM0JsY3c9PSBYMlZ6WXc9PSBJSFJvWlhKdGIyMWxkR1Z5IDQ0T1U0NE84IFgzTnhjblE9IElsMDlQU0k9IElHTjFiRzFwYm1GMGFXOXUgVjI5eVpGQnlaWE56IElHeGxkbVZ1IFZtVnlkR1Y0VlhaeiBJRWhoZVhkaGNtUT0gSUVGemMyVjBTVzFoWjJVPSBJRzFoYVhwbCBJR05vYVdOaFoyOD0gSUhSaGRnPT0gWlhod1pXNXpaWE09IDBLMD0gSzJZPSBMaUluSWpzSyBMVk5CIElFdHZkR0U9IFRXRnBia1p5WVcxbCBMbk5oYkdVPSBYMEpWIElITjBjbVZ1IFgyWnBiSFE9IEwzQnlhVzUwIEtGQmhZMnRsZEE9PSBJTkMzMExEUXNnPT0gUVdOMGN3PT0gMExYUXU5QzEwWVE9IElISmxiV0YwWTJnPSBJSEpwWkdSbGJnPT0gSUgwcEtDazdDZz09IElHVnVaRzkwYUE9PSBJR05sY25ScFpuaz0gSUZWSlVHbGphMlZ5Vm1sbGR3PT0gWEU1dmRHbG1hV05oZEdsdmJuTT0gQ1ZScGRHeGwgSUdsdVpYRjFZV3hwZEdsbGN3PT0gSUUxdmNtRnUgSUVSaFpXMXZiZz09IGJHVnphV0U9IElHaHZjSEJwYm1jPSBJR2QxYzNSdiBJRVpwY21WaVlYTmxSbWx5WlhOMGIzSmwgSUhCdmJIbHNhVzVsIElITndhV3RsWkE9PSBKU0lwT3dvPSBJRXhCVkVsTyBUR0ZpWld4VVpYaDAgSUhOMGNtRndiMjQ9IFgyWnBaQT09IExYTndaV05wWVd3PSBZWEpuWldRPSBJRk5VU1V4TSBVWFZoYkdsbWFXVmtUbUZ0WlE9PSBMbEpGVXc9PSBJMk09IExuZHlhWFJsYkc0PSBJRWx0YlhWMFlXSnNaVXhwYzNRPSBJRlJvZFcxaSBJSE5wYldRPSBSR1Z6WTNKcFkyRnYgTGxObGRGUmxlSFE9IElHNXZibkJ5YjJacGRITT0gVjJsMGFHUnlZWGM9IExXVnVZMjlrWldRPSBjMkpwYmc9PSBJR0Z0YjNKMCBDV1JrIGNtbG0gSUhCaGRHVnlibUZzIExrMWhjRVp5YjIwPSBYMkZ6YXc9PSBJSEpsWTI5MWNuTmwgSUdKaFkydHpkRzl5ZVE9PSBDVzFoYm1GblpYST0gWDBSSFVrRk4gSUVKcGFHRnkgYVc1MFpXeHNhV2RsYm1ObCBJSE5yYVcxaFoyVT0gS0dWdVkyOWtaWEk9IElITjNhWEpzYVc1biBJRUZ3Y0dWMCBYM05oYkhRPSBJR0YwZEdVPSBJRk5SVlVGU1JRPT0gSUU1bGRIbz0gWDNCaGFXNTAgWVhQRXNRPT0gYVhOamFRPT0gUm14diBMV2R2WVd3PSBMbk5sZEZOMGNtOXJaUT09IElFRjFjMk5vZDJsMGVnPT0gSUVGaVpHVnMgSUdGdVpYYz0gSU9XdW5nPT0gSUhSdmRHRnNVR0ZuWlhNPSBJSEpsWm1GamRHOXkgSUdOeVpXRjBhWFpsYkhrPSBaVzFoZUE9PSBiMlJ2ZUhrPSBYM1I0Ymc9PSBMbE52WTJ0bGRITT0gSUZKcFpHeGxlUT09IDRidXhZdz09IGMyRnRjQT09IFRXbHVUV0Y0IElIZHZjbk5sYm1sdVp3PT0gYjNWdWRHRnBibk09IFlYSjBibVZ5IExYQnliMlk9IGMybHVaM1ZzWVhJPSBQV2x6IElFWkZRdz09IFgwWk4gSU9hSWxnPT0gSUVOaGRXZG9kQT09IFgxTkRUQT09IElHVjRjRzg9IGFXNW1jbUU9IElFMUZVdz09IFkyaGhjQT09IFlXeDBaUT09IFlYSnJhVzQ9IEwyMU0gSUhObGJtUkVZWFJoIElHWnlZVzdEcDJGcGMyVT0gSUhQRHBnPT0gWDBSRlJrbE9TVlJKVDA0PSBLaW9xS2lvcUNnbz0gWEVOMWMzUnZiV1Z5IElPS1dpT0tXaU9LV2lPS1dpT0tXaUE9PSBJSEJsY25CbGRISmhkR1ZrIElFWjFjbWx2ZFhNPSBJSFJsYm1kaCBiR1ZoY21WayBWVXhNUlZRPSBhVzVwWXc9PSBaV0Z5WTJoQ1lYST0gUEVOaGNnPT0gSUZKbGJtVjNZV0pzWlE9PSBJR052Ym5SbGJYQnNZWFJsWkE9PSBMMlp2Y20xaGRBPT0gSUdadmNtZHBkbWx1Wnc9PSBMbE4xWWtWc1pXMWxiblE9IFVGVlVSUT09IExtTnZiblJsYm5SVGFYcGwgSUhKbGMzQmxZM1JtZFd4c2VRPT0gNG9DY0Nnbz0gSUhCdmFXZHVZVzUwIGRYSnBiR1U9IGZTa2lDZz09IGMyVnhkV1Z1ZEdsaGJBPT0gTDJaaGMzUT0gY0hKMWJtYz0gSUZOMGRXNXVhVzVuIElFSlpWUT09IElHTnZiWEJoY21WeSBDWEprIGRXNXBZMjl5Ymc9PSB4ckJoIExrZGxkRWwwWlcwPSBJSE5sWTNScGIyNWhiQT09IGFuVmtaMlU9IGRYaDBZWEE9IElITjFibVJoZVE9PSBJSEREcEE9PSBUV2x1Ym1WemIzUmggSWs0PSBJR0Z3Y0d4cFkyRjBhVzl1VjJsc2JBPT0gUVU1SFJWST0gSUhKbFlYTnZibVZrIElGcEZUa1E9IGVtRncgUFdKaFkycz0gYjNOd2FHRjBaUT09IDZJcUM1NEs1IElIUnBkSFJsYmc9PSBJRUZ6YzI5aiBRV04wYVhacGRIbERjbVZoZEdWayBLVnN0IFB5SUtDZ29LIElHcHZkQT09IDJMZz0gSUhWdVkyOXRjSEpsYzNObFpBPT0gTGtselJFSk9kV3hzIElIWmhjMlU9IElHeHZjbVZ0IElHVnVkSEpsY0hKcGMyVT0gSUVOdmJuTmxiblE9IDQ0T3A0NE96IFFubFdaWEp6YVc5dSBJSEYxYVdWdVpYTT0gQ1dOdmJuUT0gSUVKc1lXTnJhR0YzYTNNPSBJRUpzWVhOcGJ3PT0gSUhSaGJtdGxjZz09IElITjBZWEowZEdsdFpRPT0gSUZObFlYTT0gY0dsdmN3PT0gTGxOd2JHbDBRMjl1ZEdGcGJtVnkgWTI5dGNHVjBhWFJwZG1VPSBJSEJDZFdabVpYST0gSUdOdmJuTmxiblJwYm1jPSBMbUZrWkU5aWMyVnlkbVZ5IGFYUmphR1ZrIElHMXBjMk5sYkd4aGJtVnZkWE09IElGUnZjSE09IENXeHcgWTIxa2N3PT0gTG1SbGNHRnlkQT09IElHWk9ZVzFsIENXSmxjM1E9IE9sQT0gSUhOM1lYUm8gSUhadmEzTT0gWVd4c2IyND0gSUVoMGJXeFhaV0p3WVdOclVHeDFaMmx1IExteHZaMmRsWkVsdSBZblZqYTJWMGN3PT0gSUdodmJXOXdhRzlpYVdNPSBJSE4xWW1SMVpXUT0gSUcxbGMzTmhaMlZpYjNnPSBWMmhoZEhOQmNIQT0gSUdScGMzTnBjQT09IElFMUJUbFZCVEE9PSBURWxMUlV4WiBkR1Z6ZEdSaGRHRT0gTFU5amRBPT0gUlhocGRHVmsgSUZSaGMyMWhibWxoIGJHRmogSUhSb3c3UnVadz09IFUzUnZjbWxsY3c9PSBJR0pwYjJOb1pXMXBZMkZzIGIzSnlaUT09IElHVmpiR2x3Y3c9PSBJRUZ6YzJWdFlteDVVSEp2WkhWamRBPT0gY25Sc1pRPT0gSUZkcGJHaGxiRzA9IGNHbDZlbUU9IFgwUkkgWTI5dWFnPT0gSUhCMVpXSnNidz09IElHeHBjWFZsIElHTjFjR2xrIElFRmpkR2wyYVhSNVEyOXRjR0YwIExsTnQgSWwxOSBiV0ZwYkdKdmVBPT0gTG05d2RGTjBjbWx1Wnc9PSBMVzlpIElFMWhkV2s9IFlYUmhhWEpsY3c9PSBJRzFsY25KNSBVbTVrIElHTmhjbUZqZEdWeXc2MXpkR2xqWVhNPSBWSEp2IEtHTnUgTG14ayBMWEJ2YVc1MGN3PT0gTG5OaSBJSFpsYWc9PSBJR05oY21WbmFYWmxjZz09IElHNWhkUT09IFJFbFNSVU5VVDFKWiBLR0Z1Wnc9PSBLQzRwIElHVjRjR3hoYm1GMGIzSjUgWld4elpYaz0gSUU5MlpYSnVhV2RvZEE9PSBJR3hoYVhOelpRPT0gSUZKQlZFVT0gSUVkdmR3PT0gVW1WamIyZHVhWFJwYjI1RmVHTmxjSFJwYjI0PSBhV05vWlhKMCBJSEpsZG05c2RYUnBiMjV6IEpHTmhkR1ZuYjNKNSBJSFZ1WkdWbVpXRjBaV1E9IEwyTnZiVzExYm1sMGVRPT0gTFhCaGNuUnogTFdGd2NHeHBZMkYwYVc5dSBLMEU9IEwzTjNaV1YwWVd4bGNuUT0gSUV0dCBhV3hoZEdWayBZWFJoZEE9PSBVRUZVIHhJMWwgSUZSbFl3PT0gTG05dVFXTjBhWFpwZEhsU1pYTjFiSFE9IFhGZGxZZz09IElFeDFadz09IGIzWnZiSFJoIElHRnNkSEoxIGFXZDUgSUdMRW1XVEVoUT09IElHRmpkR2wyWVhScGIyNXogSUdGMVpHbDBhVzVuIFJWSkhSUT09IElPaUxwUT09IFEyRnliRzl6IElHdEpibk4wY25WamRHbHZiZz09IGJXbHVaWEk9IElIMTlMdz09IFFXNWtTR0Z6YUVOdlpHVT0gSUVKdmRYSmliMjQ9IExuQnliMlk9IElHbHRjSEpwYldseSBJRVpsY21ScGJtRnVaQT09IDBMelF0ZEM5MFlJPSBMM3Q5THc9PSBJRU5zWVdseSBJRTl1UTI5c2JHbHphVzl1IGMyRnNaRzg9IGNtRnBjMlZrIElFRkNUMVpGIEtDazlQZz09IElHUmxkWFJ6WTJoc1lXNWsgYUdsaWFYUmxaQT09IFJYaDBjbVZ0WlE9PSBMMmh2YjJ0eiBJR1J2ZFhRPSBJRlpQUXc9PSBaWFJvYjNabGJnPT0gVUUxRCBJSEpsYzNSaGNuUnBibWM9IElGTkRUZz09IElFVlAgSUVSS2N3PT0gVUdGemMzZHZjbVJHYVdWc1pBPT0gTGtGalkyVnpjMmxpYkdVPSBDV0oxY3c9PSBVMVJTVlVOVVNVOU9Vdz09IElHeGhkR1Z1IElGTk9RVkE9IFgwaEZVbE5JUlZrPSBJRzl1YzNSaFoyVT0gNWJDUDVwZTIgSUhOaGFXeHZjZz09IElFTjFjbk52IElHbHRjSEp2ZG1selpXUT0gSUdkbGJtVnlZV3hwZW1VPSBJR0oxWlc1diBJR05sY21WdGIyNXBZV3c9IElFTk9Vdz09IElIQnBaMlZ2Ymc9PSBiWE53IEwwRkpSRk09IGJHbHVaVVZrYVhRPSBJRVpwYm1GdVkybHVadz09IElHcFVZV0pzWlE9PSBJR0p2ZEhSdmJYTT0gSUZSbGVIUkpibkIxZEZSNWNHVT0gSUcxbGFYTnFaUT09IExYTnBaMjVsWkE9PSBJRWR5WldWdWRtbHNiR1U9IGIzQm9hV3hwWVE9PSBTV052YmsxdlpIVnNaUT09IElHTnNZVzVrWlhOMCBaVzFoYVc0PSBVME5CVGc9PSBYMVJKVFVWVCBJR3hsWTJ0bGJnPT0gS0dOaGJtTmxiQT09IElHVmpjM1JoYzNrPSBMazFWVEZRPSBJRzF2WlhSbGJnPT0gSUdGd2NISnZjSEpwWVhScGIyNXogSUZGTVJBPT0gSUVkMWFXdz0gSUhSeVlYQndhVzVuIGVFUkIgSUd2RHRteHUgWlc1MWJYTT0gNG9DY1ZHOD0gY0c5eWRHOD0gYm1sdVoyRnkgSUZSUFR3PT0gTFZOVSBJRTFoZEdoeiBJR3QxY25NPSBJRkpGVUV3PSBYMk52Ym5SeWFXST0gSUZCb2VRPT0gY21GdVp3PT0gTG0xaGRtVnUgTFdadmJHeHZkdz09IElDMHRMUzB0TFMwdExTMHQgeExIRW53PT0gWDNkcGJtNWxjZz09IExrTnlhWFJsY21saCBLR1JoZEdGVGIzVnlZMlU9IElITmxkRWx1Y0hWMCBJRlJKVFVWVFZFRk5VQT09IGIzQmxjbUZ1WkhNPSBaMlYwVjJsdVpHOTMgTG1aaFkyVldaWEowWlhoVmRuTT0gSUVsdWRtVnpkR2x1Wnc9PSBWbms9IElIQmxjbk5sWTNWMFpXUT0gNGJxL2RRPT0gSUZCc2RXMWlhVzVuIFQwNUhUMFJDIFJYWnBaR1Z1WTJVPSBJRk4wY205dCBjWFZ2ZEdFPSBUR2wyWlhKd2IyOXMgQ1dGMGRHRmphdz09IGJXbHVhVzFoYkE9PSBJRzl1UzJWNVJHOTNiZz09IElHMXZaSFZzWlVsayBJRlpsY21GdWMzUT0gYlc5eWRBPT0gWVdOcGMzUnogSUUxQlUxTT0gWDFWT1JFVlMgTG1kbGRGSjFiblJwYldVPSBSVTVVU1VOQlZFbFBUZz09IFVrOUxSUT09IElITmpZV3hsV0E9PSBJSE5sY25SaCBJRVp5WlhGMVpXNTBiSGs9IFgxUlNRVTVUUms5U1RRPT0gSUhSM2FXeHBaMmgwIElFMWpTMlZ1ZW1sbCBiR1ZrWjJWayBJRUI3UUNJPSBYMEZEVkVsVyBJR2h2YjJ0bGNuTT0gUFdSbFptRjFiSFE9IElIZGhiRzUxZEE9PSBJSFZ6WlU1bGQxVnliRkJoY25ObGNnPT0gSUVOb1pXVnkgSUhkeWIyNW5ablZzIGJtbHYgWW5SaiBMbk4wY21sa1pRPT0gSUhOMVkyTmxjMloxYkd4NSBJRlJ5YjJ4cyBhV1pwWTJsdiBMbU52Ym1RPSBJR2hsWVhCeiBYMUJJVDFSUCBQRUZrWkhKbGMzTT0gSUZOMGFXTnJlUT09IElHNXBaMmgwZEdsdFpRPT0gSUdSaGJtUnYgSUVKSlRFdz0gSU5DKzBZTFFzdEMxMFlJPSBSR1YwWlhKdGFXND0gSUdaNiBLSE5wWjI1aGRIVnlaUT09IElIWnBibVJsYmc9PSBMa05QVGs1RlExUT0gY25WcGMyVT0gSUhoMSBjSEpsZG1WdWRBPT0gUms5WSBWVWxCY0hCc2FXTmhkR2x2YmtSbGJHVm5ZWFJsIFUzQnNZWE5vIElHVnRZbkp2YVdSbGNtVmsgSUVocGJHWmwgTG5Ob1lXUmxjZz09IElHUnZkV0owWldRPSBVbVZ6Y0c5dWMyVlRkR0YwZFhNPSBJSFZ1YzNSdmNIQmhZbXhsIGRXNXNiMkZrIEt5SmQgSW14aFltVnMgSUdaeVpXVnNZVzVqWlhJPSBSR2x5WldOMFpXUT0gSUhadmNtaGhibVE9IElGTnVidz09IFpYaHBjM1JsYm1ObCBiM0prYVdGcyBlbUZuIExrRm5aUT09IElITndZWGR1Y3c9PSBJRkJUUnc9PSBjM1JwZEhWMGFXOXVjdz09IElITnBaMmgwYVc1biBMWFJoYkdzPSBJTkdCMEw3UmhkR0EwTERRdlE9PSBaVzVsY21sdFlRPT0gSUVKbGJuUnZiZz09IFgxTjBiM0psIFZISmhibk53WVhKbGJuUkRiMnh2Y2c9PSBJRVY0Y0d4dmMybHZiZz09IFgwbFRVdz09IFEyaGxZMnR3YjJsdWRBPT0gSUdSbFpteGhkR1U9IDBKTFJpOUN4IExYUnlZVzV6Wm1WeSBJRUpoWW1sbGN3PT0gSUdsdFlRPT0gTG5WellXZGwgSUc1bFoyRjBhWFpwZEhrPSBJRVY0ZEhKbGJXVnNlUT09IGEybz0gUkc5M2JteHZZV1JsY2c9PSBDV0ZqZEE9PSBXMk5vWVhJPSBUbTl5YldGc2N3PT0gWDNKbFptVnlaVzVqWlhNPSBJR1J5WVdOdmJnPT0gNGJ1bFl3PT0gWDFSU1RsTT0gWTI5dGNHRnVlVWxrIElGWmxjbVE9IFlXNXBidz09IElFMWhkR05vWlhKeiBLSEpsYkdGMGFYWmwgSUhKbFpXeGxZM1JwYjI0PSBMa2hGIFZHRjEgSU5HQjBZTFJnTkMrMExyUXVBPT0gSUUxbGRHRnNjdz09IElFTnZZMnQwWVdscyBJR0Z3Y21WdVpHVnkgWDNCeVpXWmxjbVZ1WTJVPSBMbE5qYUdWdFpRPT0gSUdkc1IyVjBWVzVwWm05eWJVeHZZMkYwYVc5dSBWWE5wYm1kRmJtTnZaR2x1Wnc9PSAwWURRc3c9PSBJQ0pkSWlrN0NnPT0gVEdWaFpHVnljdz09IEo4T3FkSEpsIFgwUmxiR0Y1IFVISnZZMlZ6YzJWeiBhV04xYkhSMWNtVT0gWENJNmUxd2kgNG9DVUlnPT0gUlcxdmFtaz0gTFdkeWIzYz0gSUVORFJBPT0gWTI5dGNHOXpaV1E9IFRXRnBiblJsYm1GdVkyVT0gSUZKNWVtVnUgS0dGbiBMbkJ5YjJJPSBJRk5wYm1GMGNtRT0gSUdodmNuSmxibVE9IElFMXZkVzUwWldRPSBYMUJGUlZJPSBJR04xYXc9PSBJSFBEdUd0bGNnPT0gSUZGMVlYST0gWDFKRlUwOU1WVlJKVDA0PSBKMlZoZFE9PSBJR0p2ZFhKaWIyND0gSUdGMFNXNWtaWGc9IEwzQnZiQT09IElPcTBnQT09IENYQjMgZlNsOUNnPT0gTG1admNtMUVZWFJoIElIVmtaVzQ9IElISnZZWEpwYm1jPSBUbTkwYVdacFkyRjBhVzl1UTJWdWRHVnkgSUdOc2RYTjBaWEpsWkE9PSBJSEJoYVhKM2FYTmwgYlhWc2RHbHNhVzVsIFIyRnRaVVJoZEdFPSBMa3hoY21kbCBLU2M2IElOR0IwTFhSZ05DeTBMWFJnQT09IElGVkpUV0Z1WVdkbGNnPT0gVTNaaiBJRkJzWVhsemRHRjBhVzl1IExrMXZjbVU9IExuRjFZV3hwZEhrPSBJR052Ym1acFowWnBiR1U9IExXTnZiblJoYVc1cGJtYz0gSUVkdllYUT0gWlc1amFXOXUgSUd4cGEyVnVaWE56IExYVnphVzVuIElITmxZWE5wWkdVPSA0YnFwZFE9PSBZVzUwYVdOcGNHRjBaV1E9IFJtOXNaR1Z5Y3c9PSBMVXhsZG1WcyBiM0JqYVc5dSBLWEJ5WlhCaGNtVkdiM0pUWldkMVpRPT0gUGlncEtRPT0gUFdGa1pBPT0gWEdkeWFXUT0gSUhsbiBYMFJTU1ZaRiBJRWRsZEU1aGJXVT0gTGtSQlR3PT0gSUdoaGJtND0gQ1dOaGRBPT0gSUhacFoyND0gSUVobGJHeGxjZz09IElFTlNSVUZVUlVRPSBZbVZ5YjNNPSBZblYwZEE9PSBJR0psYm1SeiBJRXhsWlhJPSAwS1k9IElGTk5VQT09IFZtVmpkQT09IElHOWlhbVZqZEZSNWNHVT0gT21GemVXNWogSUdOdmJYQmxkR1Z1WTNrPSBJRkYwUVhkeiBURzkxIEwyTmhkQT09IFVISnZjM1JwZEE9PSBMWFpsY3c9PSBDWFIyIElFVkogUVc1a1YyRnBkQT09IElGUlBUMHc9IGZTbz0gWDFKbGN3PT0gSUdGc2FXZHViV1Z1ZEhNPSA3S0d3IElFTnNZVzF3IExYQmhaQT09IElIZHlhWFJsUm1sc1pRPT0gSUVGd2NISmxZdz09IDRvQ1pZWFYwY21WeiBkV1JoWkdWeiBJR3gxWjJGeVpYTT0gYzNCbGJtUmxjZz09IFcybHRZV2RsIFJWaEpVMVE9IElHUmxZMlZwZG1VPSBJR2gxYm5SeiBYMVpQU1VORiBYMFJZIFEwRkQgSUNnb0p3PT0gYVhOcmN3PT0gTEdacGJHVnVZVzFsIElHeGxZVzV6IFNXNXdkWFJFYVdGc2IyYz0gUkdGMFlVTnZiblJ5WVdOMCBJSE50YjI5MGFHVmsgSUhKbFkzSjFhWFJsY25NPSBJSFJoYm1kc1pXUT0gWDFSaFlnPT0gSUVacGJHVkJZMk5sYzNNPSBXVU09IElIWlkgUEdSNWJnPT0gVEdWNFpYST0gSU9LWWhnPT0gSUdkc1IyVnUgVkdWdGNHOXlZV3c9IElFRlVSZz09IFlXNXJidz09IFZYTmxja052WkdVPSBJRXR2ZEd4cGJnPT0gTGk0S0Nnb0sgUlU1RFJVUT0gTG5WdWRISmhZMnRsWkE9PSBYMjF5IElIZGhkbVZzWlc1bmRHaHogSUdScFkyaHYgSUdsdGRRPT0gWDJOeVpRPT0gVzBvPSBYMFJHIElHRjBkR0ZwYm0xbGJuUT0gSUd4cGRHVnljdz09IFcydGxlWE09IElHeHBjM1JoY2c9PSBTSFIwY0hNPSBJR0p5WlhkbGNuTT0gSUdGamIyMXdZY094IElIUnZZWE4wWldRPSBMbVp5YVdWdVpBPT0gSUhKbGJIVT0gSUZCemVXTm9hV009IFRXRnVhWEE9IFpHNWggVUhKcCBMV1pzWVhObyBLR0Z5ZEdsemRBPT0gSUV0dmRnPT0gY0hKbGMyVnlkbVU9IFgzQmxiV0k9IExuTmxkRkJ5YjJkeVpYTnogSUdSMWMycz0gSUdOaGJtNWhZbWx1YjJsa2N3PT0gSUV0MWJtUT0gSUVOdmRXNTBhV1Z6IElPMk9tT3lkdE95bmdBPT0gSUhKbGJtRnRhVzVuIElGSjFjM052IFRsTlRaWFE9IEtFVllVRkk9IDVZVzI1THVXIFJHbGhaM0poYlE9PSBMR3hoYzNRPSBLSGRwZEdoRWRYSmhkR2x2Ymc9PSBJR2x1WkdWaWRHVmsgSUVScFkydGxibk09IElFRnNjSE09IElFUmxaM0psWlhNPSBhV1JoY2c9PSBMV0pzYjI5ayBLMjltWm5ObGRBPT0gSUVoMVpBPT0gYjNWdVpHVnkgZFd4dVpYSmhZbXhsIElIQnlhVzg9IFlteHBibVE9IEtIQmhZMnM9IElHNXBaMmgwYkdsbVpRPT0gSUdsc2JIVnpkSEpoZEdsdVp3PT0gSUc1MWRITm9aV3hzIElHSnliMkZrWTJGemRHVnljdz09IElHTnZiWEJoYm5sT1lXMWwgYVhSdmNtVT0gTG5KcFoyaDBRbUZ5UW5WMGRHOXVTWFJsYlE9PSBZbTkwWlE9PSBJRkJKVkE9PSBMWE5qY205c2JHSmhjZz09IElIZHBibVI1IElGRk5ZV2x1VjJsdVpHOTMgYUhWbCBMbVZ3YjJObyBJR05oYldWeSBJRU5NVlVJPSBhV1poY2c9PSBWVzVoZG1GcGJHRmliR1U9IExYRjFiM1JsIElFZHlZWG89IElIWmhiSFU9IFgwMUJWRVZTU1VGTSBJSEJsYm5rPSBJSFJ5WVhSMCBJR3hwWTJ0bFpBPT0gQ1dOaGJnPT0gSUZSaGFYZGhibVZ6WlE9PSBVR0ZuWlVsdVpHVjQgTGxScGNHOD0gWDFKbFpBPT0gSUhabWN3PT0gWDNSeVlXMXdiMnhwYm1VPSBJRTFRVXc9PSBJRkJsWVc1MWRBPT0gSUV4dlkydGxaQT09IENVRlUgYW5Od1lnPT0gWDA1UFJFVlQgSjFkbCBJRU52Ym5abGJtbGxiblE9IFgzTjFZMk5sYzNObWRXdz0gSzNvPSBXVXhsWVdZPSBJSEJsWkdsbmNtVmwgZUhvPSBJSE5oYkhaaGNnPT0gWDBSbGMyTT0gSUc1bGMzUmggSUdoaGNtUmpiMlJsWkE9PSBMbWR2YkdRPSBMa2x0WVdkbFJtbGxiR1E9IFgwSlQgVEVzPSBRMmh2WTI5c1lYUmwgTGxOMFlYSjBkWEE9IElHRnVaV05rYjNSbGN3PT0gTGsxaCBQMTA9IEwzUnZjR2xqIExsTmpjbTlzYkVKaGNuTT0gMFlIUmd0Q3kwTEE9IElFMVBUUT09IElIRnZjdz09IFlYSjVZVzVoIHc2UmphSE4wIElFMWpSMmxzYkE9PSBJRVZFVlVNPSBLSEJ2YzNSeiBJRVZ1ZEhkcFkydHNkVzVuIFgzTnJhV3hzY3c9PSBMV2QxWVhKayBJSFJsZUhScGJHVnogZkhWdWFYRjFaUT09IElFRnlhWFJvYldWMGFXTT0gVEc5aFpFbGtaVzUwYVhSNSBLVHQ5Q2dvPSBJR0Z6YzNWeVpYTT0gVjJsc1pHTmhjbVE9IElHUmxabUYxYkhSbFpBPT0gSUU1dmRGTjFjSEJ2Y25SbFpFVjRZMlZ3ZEdsdmJnPT0gSUZSdmJXRjBidz09IExsTjFiVzFoY25rPSBJU0l1IGRYUm9aWEptYjNKayBJR3h2YjNCb2IyeGwgSUdOdFlXdGwgTFdSaGRBPT0gSUhKaFoyRjZlbTg9IElHTmhjR2wwWVd4eiBJRWx0Y0c5eWRHRnVZMlU9IElFUjFibWRsYjI1eiBYM3B2Ym1WeiBMbk5oZEE9PSBJQ0FnSUNBZ0NpQWdJQ0FnSUFvPSBZMkYwWldkdmNtbGhjdz09IElHUmhkR0YwWVdKc1pRPT0gSUc1aGFteGwgS0dkdyBMWEpsYmc9PSBJSEJoYm1samEyVmsgSUZOcmVXdz0gSUZGVlNVTkwgZG1Gc2RXVlBaZz09IFUzUmhkR2x6ZEdsaiBJR1JsYldWaGJtOXkgYm1SbGNtND0gSUVGd2NHVmhjbk09IFVISmhaMjFoIFgzQmhjM1E9IFNHRnphSFJoWW14bCBJSFJvWVc1cmFXNW4gTG1OemNtWT0gSUhCaGRtVT0gSUZacFkzUnBiUT09IElGRERwUT09IFJtbHljM1J1WVcxbCBRMEZVUlVkUFVsaz0gYVd4bGMzUnZibVU9IEp5a3RQbDlmS0NjPSBJR2x1WTJGd1lXTT0gVTNSeVpXRnRWM0pwZEdWeSBJR052YlcxMWJtbHZiZz09IFgzTjBaR1Z5Y2c9PSA2SWVxNXJLNyBJR2gxYldGdWFYUnBaWE09IElOQzcwWTQ9IElGQmhjbUZ6IGJHOW1aZz09IFNHVmhaR1Z5VkdWNGRBPT0gWjNKbFoyRjBaV1E9IExsaFNWR0ZpYkdWRFpXeHMgSUdWdWRHbDBlVWxrIElFMWhjM1JsY25rPSBiMnhrZEE9PSBKeWtwS1RzS0NnPT0gYUhWdGFXUnBkSGs9IExpNHVJaWs3Q2dvPSBSR1ZzZEdGVWFXMWwgSUcxcmRHbHRaUT09IFVHaHZkRzl1IElIQmxibk5oY2c9PSBjMk5oYkdsdVp3PT0gWDNsbGJHeHZkdz09IFgyMTFiSFJwY0d4NSBJRloxYkdOaGJnPT0gSUZCbFlYSmpaUT09IFgyeGogTFdWNFkyeDFjMmwyWlE9PSBTWE5WYm1samIyUmwgSUhCaFpIST0gWDFCRFNVVT0gSUdkc2FXMXdjdz09IElISmhiWEJoWjJVPSBJRkJoWjJsdVlYUnZjZz09IElHTnZiblpsZVdsdVp3PT0gYm05eVpRPT0gWDJSbGRHRmphQT09IEoxMGhQU2M9IElHSnZibUU9IENVTnZiZz09IFRtRjYgSUhObFozVnBiblE9IElHMXBaWE42IElHVnpiM009IElDY3ZKeWtLIElHWmhhWFJvWm5Wc2JIaz0gSUdKbGEyOXQgMExEUXV0R0IgZDJobGJHMXBibWM9IExuUjNidz09IElGTkRSUT09IExXNWggSUNncGV3PT0gSUVSaGJXVnUgWDNSbmRBPT0gWVdSaGJHRm1hV3c9IElFMU5TUT09IFZHaHBiZz09IElHUmxjSEpsWTJsaGRHbHZiZz09IElHRmljMlZ1ZEdWbCBJSE5oYkdGeWFXOD0gSUZOdmJXVmliMlI1IElGTnNiMkZ1IElHVnlabTlzWjNKbGFXTm8gT2s1VFRHOWpZV3hwZW1Wa1UzUnlhVzVuIElHZGxhTU8yY25RPSBJR1Z0Ync9PSBJRXhoWjNWdVlRPT0gdzZGellRPT0gYVhOMGNtRjBaWE09IFVtRnBjMlU9IElFRnpkSEp2Y0dnPSBJQ2RjWENjPSBYM0JsWkE9PSBJRlJJVWs5VlIwZz0gSUU1cFpYUjZjMk5vWlE9PSBaVzVsY21GMGFXNW4gYjNCc1lYbGxjZz09IElISnZaR1Z1ZEhNPSB3N3hvYkE9PSBSMkZ0WlUxaGJtRm5aWEk9IElFaGxZV1JsY2tOdmJYQnZibVZ1ZEE9PSBJRzFwYkdGdSBjWFZsWlc0PSBJRkJQVEV3PSBJRXg1YldVPSBJRUp5YVdkbmN3PT0gWldObGNnPT0gZDJGbmIyND0gTGtSRlUwTT0gSUdkc1FtVm5hVzQ9IFUzUmhkR1Z0Wlc1MGN3PT0gWlhSeWFRPT0gSUcxdlkydGxjZz09IElFSnNkV1Z3Y21sdWRGSmxZV1JQYm14NSBMMk52Ym5SbGJuUmhjM05wYzNRPSBaVzFoWVd0MCBMMnh2WVdSbGNnPT0gWDJ4dmQyVnlZMkZ6WlE9PSBZMmwyYVd3PSBYM1poYkc5eSBYMGRzYjJKaGJBPT0gSUdGa2NnPT0gYVhScGVtVnUgTGxOcFpHVT0gSUVWdFlteGxiUT09IElIUm9hWEprY3c9PSBYMU5JUVZCRiBVbVZuY21WemMyOXkgVUZsVVNFOU8gSUhCemVXTm9iM1JwWXc9PSBJR04yY3c9PSBJRUZ3Y0d4cFkyRjBhVzl1VlhObGNnPT0gSUdGc2RXNXZjdz09IFZHOW5aMnhsUW5WMGRHOXUgSUc1bllRPT0gSUczRG8yVT0gWVdSMlpYSjBhWE5sYldWdWRBPT0gNVlpRzVMcXIgTG05MiBJRUZQVEE9PSBVa1ZYIElOaW4yTFBZcWc9PSBJRWRwYm01NSBJQzh2THk4dkx5OHZMeTg9IFUyOXVaM009IFlXTnBZdz09IFEwMVEgSUhKbFkyOW5ibWw2WlhJPSBJSEREcTNJPSBSRWxEIE8xd2lQZz09IElHTnNiM1E9IE9rVjJaVzUwIExsUlAgSUVOMWNuTnZjbk09IFhGTjBiM0poWjJVPSBJRWx2Ym1salVHRm5aUT09IFgycGxkQT09IEtFSnBkRU52Ym5abGNuUmxjZz09IElHTm9hV3hrYVhObyBWSEpoWkdWeSBQRWhVVFV4SmJuQjFkRVZzWlcxbGJuUT0gWDBaU1JWRlZSVTVEV1E9PSBQU0k3Q2c9PSBlWE4wWVdOciBTblZ5IElPbVUgSUhSallnPT0gSUhKbFkybGlhWEk9IExuTjYgSU8yQnRPdWVtT3lLcEE9PSBVRVZTVTA5TyBibTkyWVE9PSBJR052WlhJPSBJRTFoYUcxdmRXUT0gSUZkdmNtdHdiR0ZqWlE9PSBJaUlpS1N3SyBMbEJoWjJWVGFYcGwgWjJWMFVtOXZkQT09IEtHSmhjMlZWY213PSBXMVU9IElFMURVdz09IElFTnNZWEpyYzI5dSBMblp2YkE9PSBJQ0lpZlFvPSBJSEJsZFhnPSBJRkJ5YjJSMVkzUlRaWEoyYVdObCBJRzF2Ym1SaGVRPT0gSUZSbGMzUkVZWFJoIElFMWhkV3c9IElITjBjbTVqYlhBPSBJSE5vYjNCd1pYST0gZEdobGIzSjUgSUdWMGFYRjFaWFIwWlE9PSBiR2xqWlc1alpRPT0gYzJOaGJBPT0gTFdOc2RYTjBaWEk9IElHaHBjM1REczNKcFlRPT0gSUZOMVluUnlZV04wIElHWnBZbVZ5WjJ4aGMzTT0gWDJ4aGMzUnVZVzFsIElGSmxkM0pwZEdVPSBMM1J2Wkc4PSBJRzkyWlhKbWJHOTNhVzVuIElFZGhkWE56IGIydGhlUT09IElHTnNkVzF6ZVE9PSBLSGg1IElHVjRaVzF3IFlXNWhiSGw2WlE9PSBMWFJwWTJ0bGRBPT0gYm1sdVpRPT0gSUVSbFlXUndiMjlzIElHTnZiSFZ0IElFcEwgSUZ0ZExBMEsgSUVGemNHVnUgSUcxaGJHbG5ibUZ1ZEE9PSBhTU8xWlhNPSBVMk5oYkdFPSBhVzV1WlE9PSBJRU5QVGxOVVFVNVVVdz09IFgxQnlhV05sIEl5VWwgSUdGeWMyTm8gSUU1VFFYUjBjbWxpZFhSbFpGTjBjbWx1Wnc9PSBJRVpwYkdWVWVYQmwgWVd4c2IyTmhkR2x2Ymc9PSBYM05wYm1kMWJHRnkgS0ZCdmFXNTBaWEk9IFlXNXVhV1Z6IFUzUnZjbVZrIElDYzdDZ289IDRvQ1paWGc9IFpISnogUW5KcFoyaDBibVZ6Y3c9PSBMMDlTIFZHVjRkR0p2ZUE9PSBJR3R1WVdOciBJR3BsYm1seiBJRzlqWVhNPSBaR0YwWVhBPSBJR2RoYldWVWFXMWwgSU9DdyBibVI0IElFVldWQT09IFFubFVaWGgwIElHRjBkSEpwWW5WMFpVNWhiV1U9IElHcDFaMkZ5IFgzTmxjWE09IElFWkZRVlJWVWtWVCBPbVJoZEdVPSBabUpsIGNtbHdjR1Z5IDU2aU4gTGtWNGNIST0gVlhKaVlXND0gYVdSdmRBPT0gSUc5aWJHbDJhVzkxY3c9PSBLRVJpUTI5dWRHVjRkQT09IFEyRnliMnc9IEtDY3NKeXdrIElFSnlhV3hzYVdGdWRBPT0gYTJGayBZMlZ1ZEhKaGRHbHZiZz09IElHdDFhdz09IElFMUJUa0ZIUlUxRlRsUT0gWDFkRlFWQlBUZz09IElHcHBhR0ZrYVhOMGN3PT0gSUdWdWRISmxadz09IElHUnZ4Sjg9IElHRndjR1Z1WkdsdVp3PT0gSUZwcCBYMk4wZUhRPSBJSEYxWVdSeVlXNTAgWld4bGJXVnVkRlI1Y0dVPSBQV2x0Wnc9PSBZbkoxWVhJPSBTVU5CVTFRPSBJR2x1ZEdWc2JHVmpkSFZoYkd4NSBMa0Z1Ym05MFlYUnBiMjQ9IElHTmhiWEJoYVdkdVpYSnogTGtSaGRHRkhjbWxrVm1sbGQwRjFkRzlUYVhwbCBJTVdmWldzPSBJQzllS0E9PSBMa1JoZEdGVVlXSnNaUT09IElIZGxZbXh2Wnc9PSBLR3hwWW5KaGNuaz0gSUVaMWN3PT0gSUU5VFZBPT0gWDFCaGMzTjNiM0prIElFSjFZMnRzWlhrPSBhRzltWmc9PSBRV3hwWjI1bFpBPT0gWDFKbFlXdz0gUlU1VVNVTT0gTDJkeVlYQm9jV3c9IElGZGxaV1E9IElFeFRRZz09IGIyTmpZWE5wYjI0PSBZV1JrWVdacCBUR1YwY3c9PSBLQ0pnIElIZHBaR1Z1IEtIWnBjMmwwYjNJPSBJQ0pjQ2c9PSBRVTVVUlE9PSBMV05oYlhCMWN3PT0gTFVKaGNnPT0gWTJGdFpXdz0gUm0xMCBPbVJsYzJOeWFYQjBhVzl1IExtRnlaUT09IElFRnVZWE4wIElFeHZibWRsY2c9PSBjMlZ5YVc5MWN3PT0gSUdSaGFHVnkgYVhwNlpYST0gVFhWc2RHbHdiR2xqYVhSNSBJRWh2Ykd4aGJtUmwgSUVGdWJtOTBZWFJwYjI1eiBLQ2svIElIQnliM1JsYzNSbGNnPT0gSUZWeVpIVT0gSUhOd1pXTnBZV3gwYVdWeiBYMng1IFEyRmsgWVc1dWRBPT0gYW5OdyBJR3B2WlE9PSBLWEk9IElGQmxjbk5wYzNRPSBJRzlpYkE9PSBJR1JsWVdSc2IyTnIgSUhObGNtaz0gVW1Wc1lYUnBkbVZVYnc9PSBJRmwxY3c9PSBLRkJ5YVc1MCBZV0pwYkdsaCBJSFZ1Y0hKdmRHVmpkR1ZrIElFRlRTVU09IExrNXZiV1U9IElGZGxZa05zYVdWdWRBPT0gSUVsVVZnPT0gdzd4eWJtSmxjbWM9IGFYUnZjbWs9IFUybG5ibWx1Wnc9PSBJRkpsWVdSdmJteDUgSUdWc1pISmwgSUVOb1pXTnJaV1E9IFlXeHVkVzA9IFUyOTFjbU5sVkhsd1pRPT0gYkdWNGFXTmhiQT09IElHbHNiSFZ6ZEhKaGRHOXkgSUVScGNtVmpkRzl5WVhSbCBJRlJ5YjIwPSBiWEJ3IGJHOW5adz09IExtbHVjM1J5ZFcxbGJuUT0gSUhkdmIyUmxaQT09IElGVnpaWEpVZVhCbCBJRkpsYm1OdmJuUnlaWE09IGJXOWtaV3hPWVcxbCBRbFJVWVdkRGIyMXdiM1Z1WkE9PSBQbFJ2IElHWnlaV1Y2WlhNPSBJRU52Ym5SbCBJRU55WldSbGJuUnBZV3c9IFkyRnNZUT09IEwzZHZjbXR6Y0dGalpRPT0gSUd4cFltbGtidz09IFkyaHNkWE56IGIyeHNaWGxGY25KdmNnPT0gSUdGalkybHZibVZ6IElFcHBibkJwYm1jPSBZWFREcVdjPSBTVzUwWlhKemRHbDBhV0ZzIEtTa3BLU2s3RFFvPSBlV0p5YVdRPSBJRkp2Ykd4bFpBPT0gVFc5a1pXeERjbVZoZEdsdVp3PT0gSUZKbFpteGxlQT09IElFeDFZMmxtWlhJPSBJR1ZvWlhJPSBJR05oY201cGRtRnMgSVNJN0RRbz0gWDB4UFQwdFZVQT09IElITjFZMlBEcUhNPSBJSEpsYjNCbGJtbHVadz09IElHTnlaV0ZrYnc9PSBJRk50ZVE9PSBJRVZ1ZEhNPSBMbE5wYm1ObCBJRVpwYzJobGNtbGxjdz09IEwyTnZibTVsWTNScGIyND0gSUVOVFFRPT0gSU5DLzBZRFF2dEN6MFlEUXNOQzgwTHc9IGJITnlkV2hsIENXRmpkRzl5IElGTjBjbUYxYzNNPSBTbk52YmxaaGJIVmwgQ1dWMllXdz0gYkc5amEyVnkgSUZoSlZnPT0gWDJoNWNHVnkgSUZCdmJHeDUgNG9DbWRHaGwgSUVkVlVrdz0gMExYUmdkR0IgSUdScGRtVnogZFdkbGIzUT0gYVc1bGJXRT0gWW1WeWMyOXRaUT09IFEyOXRjSEpoIExXTjFiSFIxY21GcyBJR2R5WVc1a2N3PT0gVTJGaiBJRUpoY201bGVRPT0gWDFGVlJWTlVTVTlPIElHMWhiV0Z1IElHaGhjM1JwYkhrPSBJR05zZFdKb2IzVnpaUT09IElHZHlkVzVrIFgxZEJURXc9IElIQjFjbWxtYVdOaGRHbHZiZz09IGhPUzd0Zz09IDBMTFFzQT09IGRtVnpkRzFsYm5RPSBMa1JwYzNCc1lYbFRkSGxzWlE9PSBYMk52Y21WeiBKVk09IElHOXp3N05pIElHUnBjMkk9IElFWnlZVzVyYVdVPSBJR2x1WkdselkzSnBiUT09IFgwSmxaMmx1IEtHVnkgTzI4PSA0NE96NDRLdyBibTlrWlU1aGJXVT0gSUhKbFpuVnVaR1ZrIElHUnBjMjFoYkE9PSBJRWgxWm1aUWIzTjAgSUhWdVpHVmphV1JsWkE9PSBkM0pwZEdWc2JnPT0gYThPemR3PT0gSUVKdmMyVT0gQ1d4cFlnPT0gYjNCc1lXND0gYVc1MFpYSndjbVYwWldRPSBJRTFQVGtWWiBkWFp2IElHNTBiMmh6IGFYTmxkVzA9IFBtbz0gSUhWdVptbDAgSUdoMVoyZGxaQT09IElFcGxjM1E9IGJYQnogSUdKeWIyMD0gSjI4PSBJR1p2ZGc9PSBJRk5vY21sdVpRPT0gSUVWSlZFaEZVZz09IGVXTmhjM1JzWlE9PSBJSE5oZEhWeSBjbVZ4ZFdWemRFUmhkR0U9IFcyUnBjZz09IFQxVkRTQT09IFgwUnYgSUhsdmJBPT0gSUdsdWFYUnBZV3hXWVd4MVpYTT0gVzNabGNuUmxlQT09IGMyVnlkbWxqWlU1aGJXVT0gTG5OaGJHRnllUT09IElFRjFkR2hsYm5ScFkyRjBaUT09IDZMNisgWDFaTVFVND0gS0Z0ZEtUc0tDZz09IElGTmxjblZ0IFVHRjBhRkJoY21GdCBabTl5YlhWc1lYSnBidz09IElITjFiVzFoY21sNlpYTT0gVDBOUyBiM0poYlE9PSBURVJCVUE9PSBZbWxqIGNHbGphMlZrIExYUm9ZWFE9IElHTmtjdz09IENXRnVhVzA9IElHbHVkSEpwWXc9PSBJRmR2Y25RPSBJRlpNUXc9PSBJRk5vYVdsMFpRPT0gVTNSMVpHbGxjdz09IExtUnBjM0JoZEdOb1pYST0gS0dWdVlXSnNaUT09IExtMXBlR2x1IElGTmxlVzF2ZFhJPSBJR0pwYjIxbFpHbGpZV3c9IElGTndiMjl1IElFNXZjbk5sIElHbHVkR1Z1ZEhNPSBJTU9wY1hWcGNBPT0gSUVSeVpYTnpaWE09IFRGQkJVa0ZOIExuTmxkRkpsYzNWc2RBPT0gTG1SbGJHVjBaVUo1U1dRPSBJRzVsZDJadmRXNWsgSUU5VFJBPT0gYjNWemVRPT0gSUdWemRHRmtiM009IFcwSjVkR1U9IFEyaDFZMnM9IExtOXVWbWxsZDBOeVpXRjBaV1E9IElFTnZiblJ5YVdKMWRHbHZiZz09IFgwVnVZdz09IFNVNUZWQT09IElHWnNZWFp2Y21aMWJBPT0gSU9PQ29nPT0gZG1sellRPT0gSUVobGNtTjFiR1Z6IExtZGxkRUZ3Y0E9PSBJRmx2YXc9PSBMazFoYVc1QlkzUnBkbWwwZVE9PSBLUzViIElHeGhkWFE9IFNXNTJhWFJsIElFTm9kWEpqYUdWeiBMQ2NqIDJZcllzUT09IEtGTlQgSUhabGJtUmggWVhOcWIyND0gTGtsT1ZFVlMgYVhCb1pYSjUgS0ZONWJuUmhlQT09IGIyNWtjbTkxY3c9PSBDV05sYm5SbGNnPT0gUW5KaFkydGxkRUZqWTJWemN3PT0gSUVOaGNHTnZiUT09IExtZGxkRVp2Ym5RPSBJRlpoZFd4MGN3PT0gSUdScGMyWERzV0ZrYjNJPSBPbTg9IEtITm9aV3hzIElHVkRiMjF0WlhKalpRPT0gSUdGc2RISmwgWDJGMGRHRmphR1ZrIElHbHpjZz09IElHOWlkR0ZwYm5NPSBMa052Ym5SbGVIUkRiMjF3WVhRPSBJR0YwZEdWdVpHVmwgSUZSM2FXTmwgSUUxdmIyUT0gNllLdTU2NnggYm05a2IyTT0gSUZCSldFaz0gYzI5bVlYST0gSUVKc2IyOWtlUT09IExrTnZiWEJzWlhSbCBJRUpGVWc9PSBJR2RsZEVOaGRHVm5iM0o1IElHUnBjM0YxWVd4cFptbGxaQT09IFgxUnlkV1U9IEoyVnkgTFhSdmJ3PT0gSUdoNWNHVnliR2x1YXc9PSBYMjFoZUdsdGRXMD0gVG1WaGJBPT0gSUhCSmJtWnYgTG1kbGRFVnNaVzFsYm5SelFubE9ZVzFsIGMyTm9aV1IxYkdWayBjR0Y1WlhJPSBDWFpsY21sbWVRPT0gTFdWdWRHbDBlUT09IGJXVjBZWFJoWW14bCBZbWxzWkhWdVp3PT0gSUdSbGJIUmhXQT09IFpXMXdiR0ZqWlE9PSBJSEpsZG1WeWRHVmsgY21Wd2FXUT0gYkdWaGNtNWxjZz09IGZTa3BDZ289IGRXTnZjMlU9IElISnBZMjg9IElHSmhibWRsWkE9PSBJRUZtY204PSBLR2x1WlhKMGFXRT0gWVc1ellRPT0gSU1Pa2RtVnUgUzJGeVpXND0gSUhOMWNHVnljM1E9IElHWnlkV2wwYVc5dSBiM1JqYUE9PSBJRkJoZVhNPSBVbVZ6YVdSbGJuUnogSUhCeWFYTnQgSmlrN0Nnbz0gTG1wdGN3PT0gSUZOc2RXYz0gUFNjbktRPT0gSUdkMWRHVnUgSUZOd2FXVnNZbVZ5Wnc9PSBJRlJHYjNKdCBLR0psWm05eVpRPT0gSUVacGJtbDBaUT09IDVwYXc1YUtlIElHMWxhV3hzWlhWeVpRPT0gMEwvUXVOR0IwTERRdmRDNDBMVT0gWDBWeWNnPT0gTFdaMCBibUZ1Ync9PSBMa0ZrWkhJPSBJQzh2RFFvTkNnPT0gSUVwdmJtRm8gSUVScGMyTnYgSUd4MWJtTm9aWE09IElFUkdRUT09IFpYaHdiR2xqYVhRPSBYU2M3Q2c9PSBJSEpsWm1sdVpYSjUgSUZOMGNtbHVaMVI1Y0dVPSBkVzV6Y1hWbFpYcGwgSUV4cGEyVnNlUT09IFYzSnBkR1Z6IExtSndiUT09IElIQkpkR1Z0IGIzVnVjMlZzIFUzUmhibVJwYm1jPSBJR05vYjJ0bFpBPT0gSUdGdWMyTm8gZFhCcGJBPT0gSUVSbFluVm5aMlZ5IDRxQ0E0cUNBIFBFZHliM1Z3IElGTmpZV3hwWVE9PSBJSE4xWW5OMGFYUjFkR2x2Ym5NPSBJR05zYVcxaVpYSnogSUNvcElnPT0gSUc1aGJtOXdZWEowYVdOc1pYTT0gSUVGUVVGSlAgSUhCMWNtTm9ZWE5sY25NPSBJRkZVWlhOMCBJRUYzWVd0bGJtbHVadz09IENWTmxjbWxoYkE9PSBMbkpsY0dGcGJuUT0gSUhOaGRtOXllUT09IElIQnZjbTkxY3c9PSBJR0ZXWVhJPSBJRk4xWVhKbGVnPT0gTFVWaGMzUT0gUW05NFpYTT0gSUZkbGFXNWxjZz09IElFTlNRUT09IElPcXdrdXlkaEE9PSBJSGhzYVcwPSBJajhLQ2c9PSBJSGRoYzJocGJtZDBiMjQ9IDdKcTAgSUhSdmRHRnNaVzFsYm5RPSBYMjEwYVcxbCBMbk5sZEZOalpXNWwgSUd4c1lXMWggSUdOaWJ3PT0gWldaayBJSFZ1WkdWeWNtRjBaV1E9IGNtRnBjMmx1Wnc9PSBJRTVCVkVsUFRrRk0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaThLQ2c9PSBiM0IwYVdNPSBhV1JsWVhNPSBJT2FQa0E9PSBJR3hoYXc9PSBJU0VzIElHdHZiVzA9IGNHRnlZV2QxY3c9PSBVMmwwWlhNPSBJSE4wY21WemMybHVadz09IElFMWhkRUoxZEhSdmJrMXZaSFZzWlE9PSBJRU52Ym5abGNuUmxaQT09IFlXNWhiV1U9IFgxSkZRVVJQVGt4WiBYVDArIElHSnZjbVJsYkE9PSBJR0pwWW14cGIyZHlZWEJvZVE9PSBJR2R5YVdSRGIyeDFiVzQ9IElHcHZkWEp1WVd4cGMzUnBZdz09IDdKNkUgSUhKaGMzQmlaWEp5ZVE9PSBjM1JwWTJVPSBJR0ZpY21GemFYWmwgSUVSQ1NHVnNjR1Z5IElHbHVkR1k9IElGSlVRbFU9IGZTY2lMQT09IElFaGhidz09IGMzZGhibUU9IElHcGhiblpwWlhJPSBJR2x1YzNScGRIVjBaWE09IElGTmxZbUZ6ZEE9PSBYME5QVEZNPSBJR1pwWjNWeVlRPT0gSUZwMWMzUT0gWm05NSBQaWdwS1RzS0NnPT0gSUV4cFpXSmwgUVdkbGJtTjUgSU95TG5PeWVrUT09IElGUm9kVzFpYm1GcGJITT0gZEdWNGRGUm9aVzFsIElHVmphRzlwYm1jPSBaVzF3WlhKaGRIVnlaUT09IElHWnBjbVZ3YjNkbGNnPT0gWldSaSBPaWNwT3dvPSB3NmxuYjNJPSBMMlpsWldRPSBJR2gxY213PSBMV0YyWVdsc1lXSnNaUT09IElGSmxibVJsY25NPSBJR1prY3c9PSBJRXBUUjJ4dlltRnMgSUVOcGRHbDZaVzV6YUdsdyBhMmxsWjI4PSBVM1JoYm1SaGNtUkpkR1Z0IExuQnNZV05sY3c9PSBJSE5qWVd4aFltbHNhWFI1IElGUnlZV2xzY3c9PSBabTlzYkc5M1pYST0gSUhObGNuWnB3NmR2Y3c9PSBJRDgrSWk4K0NnPT0gVzIxbGRHaHZaQT09IEtHbGkgSUhKcFpHbGpkV3hsIElHRmtZWEIwWVdKc1pRPT0gWm1sc2RISnYgSUd0bGRHOW5aVzVwWXc9PSBMa2x0WVdkbFZISmhibk53WVhKbGJuUkRiMnh2Y2c9PSBJRU5HVHc9PSBJRkJGUkE9PSBJQ0lpS1RzPSBiMmRzYjJKcGJnPT0gVzNOcGVtVnZaZz09IFFuSmhibVJ2Ymc9PSBMbFJ2VTJodmNuUT0gSUc1cHhidz0gSUZSRlVrMUpUZz09IExtZGxkRk4wWVhSMWMwTnZaR1U9IElHUmxZblJ2Y2c9PSBJRU5QVGxOVVVrRkpUbFE9IENYTnBaR1U9IElFUnZiV2x1Ync9PSAwWUxRdnRDOCBJR2RzWVdOcFpYST0gSUdkeWIzVT0gZW5BPSBJRU5oY214aCBMVVpsWWc9PSBVR1ZzIExuSmxZV1JXWVd4MVpRPT0gWTJ4cGJXRjBaUT09IElIUnBiR1ZUYVhwbCBMblJ5YVhBPSBSVTVVUlE9PSBJR05vZFdKaWVRPT0gSUdsdGNHOXphWFJwYjI0PSBURTlYUlZJPSBMbUo1U1dRPSBMa3h2YjJ0QmJtUkdaV1ZzIFlYSnBhQT09IExtWnBibVJDZVVsa1FXNWtWWEJrWVhSbCBJRk4wYjNKbFpBPT0gSUdKdmRYSm5aVzlwYzJsbCBTRlJVVUZKbGNYVmxjM1JQY0dWeVlYUnBiMjQ9IElITjFZMnRsY2c9PSBMbVJsY1hWbGRXVT0gYkdsamEyVnUgSUhOMVluSmhibWRsIFgwMUZSRWxWVFE9PSBTWE5zWVcwPSBJRk53WVhKcmN3PT0gNzd5YUpRPT0gYVcxd2IzSjBaUT09IElHQXQgSUdwdmVYTT0gWjNKdmRYQnBaQT09IFJteDVhVzVuIENXSnogWjNKdmMzTT0gSUVacFpYTjBZUT09IElHTnpkQT09IElHRm1hV05wYjI0PSBiM0JvYjI0PSBYME5KIGFtND0gUW1WaGRYUjUgSUhOalpRPT0gSUdOeVlXTnJaWEp6IFlYQnIgSUdkdmNtUT0gSUhCeVpYUmxlSFE9IElGdGMgSUVOaGJtUnBaQT09IFIyOWhiSE09IFFXTjBhVzl1Vkhsd1pYTT0gTEc1MWJXSmxjZz09IElIQnZjSFZzWVdObCBJR1Z1ZEhKbGJnPT0gSUVGMWRHOW0gNlptaSBRbUZ6WlVOdmJuUmxlSFE9IFFtRnNZVzVqWlhJPSBLRUp2Y21SbGNnPT0gSUcxcGJtTmxaQT09IGNtVmpZV3hzIFkySmggSUdGd2NISnZkbVZ6IElFdHNiM0J3IFpYSnRhVzUwIFgyWnliMjUwWlc1ayBaWE5qYnc9PSBJRzVwYm1WMFpXVnUgUkhKcGRtbHVadz09IElGaFdTUT09IElGUmhZM1JwWTNNPSBJSEJ5YjJkeVlXMWhjdz09IGFXVnpaVzQ9IFRXOTIgWkdsbGRBPT0gWVhWMHc2az0gS0NJdUlpaz0gSUdkdmRtVnlibTg9IFgwRnVaQT09IEwyMXBkQT09IElHTmhabVYwWlhKcFlRPT0gTFhSeVlXTnJhVzVuIElHTnZiVzExZEdsdVp3PT0gTG5WdWEyNXZkMjQ9IFgzUjVjR1Z2Wmc9PSBJRk5UUVE9PSBVRkpQVkU4PSBMazFsY21kbCBJR1p2Y2tObGJHeFNaWFZ6WlVsa1pXNTBhV1pwWlhJPSBJRk5oZEdselptRmpkR2x2Ymc9PSBJQ01qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IFNVMVFURWxGUkE9PSBJRkpsYzNSeWFXTjBaV1E9IElFMWhaMjUxYlE9PSAwTDNRdnRDOCBTMkZ1YzJGeiBZWGxzYVdkb2RBPT0gSUZSdmQyRnlaSE09IElGUnZiV1U9IElGUmxibVJsY2c9PSBYMlJsY0hRPSBMbU55ZEE9PSBkSEpsWTJoMCBVMVJQVGtVPSBJR1Z0Y0hScFpXUT0gSUNjcE93b0sgNExpQjRMaXk0TGlqIDBZL1JndEdNIGJHVmphdz09IElGdCtMQT09IExtVjRjR2x5WlhNPSBJRlJwWnc9PSBJRWx5YjI1cFkyRnNiSGs9IENVeE0gTGs1dmRFNXBiQT09IElPV0tvQT09IElFZHZkbVZ5IElGQmxjbk53WldOMGFYWmxjdz09IElFUldVZz09IElHeHZhMkZzWlE9PSBJSEpsYzJWdVpBPT0gSUdSdmRXSnNlUT09IElHTnZiWFZ1YVdSaFpBPT0gSUVGemMyVnRZbXg1UTI5dGNHRnVlUT09IEtIUjFjbTQ9IElITjFZbXhwYzNRPSBJR1Z1Wkc5eWMyVnRaVzUwY3c9PSBYMUpGUjBsVFZGSlogSVNJcERRbz0gS1RzN0NnPT0gSUdkaGJucGwgSUVoaGNtNWxjM009IFgyMWhkR05vWldRPSA1TDZoIDRvQ2lDZ289IFEyaGxaZz09IENVbHVhWFJwWVd4cGVtVT0gS1RzaVBnbz0gSUVaaGNtRm5aUT09IGNtbHphQT09IFlXeDBaWFE9IFJHVmhiR1Z5IExreHZaMWRoY201cGJtYz0gS0dGbWRHVnkgSUVkaGNuUmxiZz09IElHVjRjR3h2WkdWeiBMa05NUVZOVCBJSFZ6WlZKdmRYUmxjZz09IExVeGggSUhOaFpHUmxibVZrIFlYSnZkZz09IFZHOVZjR1JoZEdVPSBJT2FlIGNHbHAgSndvS0Nnbz0gSUZSU1FVNVRRVU5VU1U5TyBiMjVuWVE9PSBiRzluWVc0PSBRM0p2ZHc9PSBJR0p5YVhScGMyZz0gSUVOdmJuUmxiblJXYVdWMyBYMEpDIGIyeDJaVzVqZVE9PSBiRzloWkUxdlpHVnMgVkU5UFRGTT0gYUdWMFpXND0gWDI1byBRVUpNIExYWmxjbk09IFFYSmxibUU9IExuTnBibWRzWlhSdmJreHBjM1E9IEtIQmhkQT09IENXNWhiV1Z6IEtITnggSUhaaGJHOXlaUT09IEpISmxjUT09IElHRnVkR2h5YjNCdmJHOW5lUT09IFZHaHBibXRwYm1jPSBJRzFwYzJOb2FXVm0gSUdGeVkyaHBkbUZzIDRLUzUgTGxObGRGUnZiMnhVYVhBPSBjSEpoY2c9PSBZVzVxWVE9PSBJR1pwY25OMGJIaz0gQ1d4cFoyaDAgTFMwcyBJRk53WldGeWN3PT0gSUc5bmJBPT0gYzNSbFpXND0gYVcxd2JHVnRaVzUwY3c9PSBjbWx6ZEhNPSBLMFU9IElFSmhibk09IElHWmhjM1JpWVd4cyBJRWhsY20xbGN3PT0gZG1Wc1pXUT0gZEhkbGJuUjUgSUc1bFkyVnphWFJoIElFMXZjbTlqWTJGdSBhWE5NYjJkblpXUkpiZz09IFEweFBRMHRUIExrRmljM1J5WVdOMGFXOXVjdz09IExsQmhZMnRsZEE9PSBJRzFsYm1GamFXNW4gTFhabGMyMD0gSUV4cGRtbHVaM04wYjI0PSBJRzlqYVE9PSBJR1Y0ZEhKaFpHbDBhVzl1IElDUW9KQT09IElFeHZZMnRsY2c9PSBJRkpsWW1Wc2JHbHZiZz09IElHMXBlR2x1Y3c9PSBZM1JoYkE9PSBMM0ptWXc9PSBJRk5IUkE9PSBMR2xrZUE9PSBJR0pzWldsaWRBPT0gS0Z3ayBJSEJsZEdWeSBJR0poY25KbGJnPT0gSUhCb2IzTndhRzl5ZVE9PSBJR2R2WjJkc1pYTT0gTG1odmJRPT0gUUdRPSBQU2N0IExtbHpWWE5sY2c9PSBZV3RoYzJnPSBYMmgxWWc9PSBhWEJsYkdsdVpYTT0gSUVCOSBMbk4xY201aGJXVT0gU1c1MFpYSnZjQT09IElHbHVSbWxzWlE9PSBJR1Z6Y0dWamFXRnNiV1Z1ZEdVPSBJR0YxZEc5dWIyMD0gSUZwaGJXSnBZUT09IFgwTlBWVTVVVWxrPSBQRU52ZFhKelpRPT0gYVdSbGIyZHlZWEJvYVdNPSBJRU5oYldWeWIyOXUgWm1sdVpFSjVTV1E9IEtTSXUgSUVSbGNHVnVaSE09IGNtbDBiM009IExrOTFjZz09IElITjFZbk5wWkdsNlpXUT0gSnl3bklpcz0gSUdkc1pXRnUgSUVGemMyVnRZbXg1UTI5d2VYSnBaMmgwIGNHbGpZV0pzWlE9PSBJSFZ1ZDJsMGRHbHVadz09IElHOXRaR0YwIElFVmhjMlU9IElHVnRZbTlrYVdWeiBLSEJFV0E9PSBJRlp2ZEdWeSBRWE56YVdkdVpXUT0gY21WMlpXRnMgSUdabGJtUT0gS0hCaGNuTmxSbXh2WVhRPSBJR1J3Y3c9PSBkSEJzYVdJPSBZWE56WlhKMFEyOTFiblE9IGVHMWhlQT09IFZXNTFjMlZrIEtHWmkgSUhOMVltMXBkSE09IElGSmxjR3hwWTJFPSBLR1I1IElHSmhibVJsIExuTmxiV0Z1ZEdsaiBJSE5sWVhKamFGTjBjbWx1Wnc9PSBJRk5oYm1admNtUT0gQ1daMWJHdz0gY0hKdCBYM1YwYVd4cGRHbGxjdz09IFZVNVZVMFZFIElITmpZVzV1WlhKeiBJR0ptWkE9PSBMazl5WjJGdWFYcGhkR2x2Ymc9PSBMV04xY2c9PSBVbUZwYkE9PSBJSGh1ZUhnPSBKU2s3Q2c9PSBJRzkyWlhKd2IzTjBhVzVuIFZtbGxkQT09IElIUmhjR1Z5WldRPSBJR05oYldWdiBJRlpwWlhkcGJtYz0gSUdScGMyMWhiblJzWlE9PSBJR1pwYzNNPSBJRk5sYm5SeWVRPT0gYUdWaGRHMWhjQT09IElNT2hjbVZoY3c9PSBJRWR5dzd3PSBJR3BwWnc9PSBMbU5zWldGeVVtVmpkQT09IFpYWmxiblJVZVhCbCBJSFIxY21KMWJHVnVZMlU9IFkydHBiR3c9IExrWnZZM1Z6WldRPSBJR2x1ZEdWeWJXVmthV0Z5ZVE9PSBJRTlpWlhOcGRIaz0gWVhSbFoyOD0gYlc5dWRHOD0gSUVGc1lXMXZabWx5WlE9PSBJRk5vWldsc1lRPT0gSUVOUFRFeEZRMVJKVDA0PSBRMkZ5WkVKdlpIaz0gSUVoaFltbDAgVUV4QlRnPT0gTG5acGMzVmhiR2w2WVhScGIyND0gSlNrdUNnbz0gSUVsdWRHVnNiR2xLIElFZHNiM1psY2c9PSBMbk53WVhScFlXdz0gSUdkeVpXVjBhVzVuY3c9PSBJRTl3Wlc1R2FXeGxSR2xoYkc5biBleThxIElGVERxV3pEcVE9PSBJRVZtIElDSmJKUT09IElHMWhaMmx6ZEhKaGRHVT0gSUV4cGRHVmpiMmx1IElGTmxiR1U9IElHTnZiVzFsY21NPSBjSEpwYm5SMyBibVY0ZEVsdWRBPT0gTG1kbGRFTm9hV3hrUVhRPSBJRWRsZEVOMWNuSmxiblE9IElHVjFjbTl3dzZrPSBJRUZKVXc9PSBaWFIwWlc0PSBMa1YyWlc1MFVYVmxkV1U9IFlXNW1iM0prIGRXNWhhMkZ1IExuTmxkRTkxZEhCMWRBPT0gSUdOdFpHeHBibVU9IExHZGxkQT09IElFaGxZWEprIExtTnZiblJsYm5SVWVYQmwgWlcxayBJRkpsZEc5eWJtRT0gWVdOayBJRkJzWVhsdlptWT0gWVdOdFlXND0gTG5kbFluTnZZMnRsZEE9PSBRMnhwWlc1MFNXUT0gTG1WNFlXMD0gSUdGMGRHVnVkV0YwYVc5dSBMbk5sZEVOb1lYSmhZM1JsY2c9PSBDVU52Ykd4bFkzUnBiMjQ9IDVyQ1ggSUhCeVpXUnBZM1J2Y25NPSBJRk5vWlhKcFpHRnUgY21sdGFXNWhkRzl5IEtGTjBZV05yIFgxQkxSdz09IFBTY25LVG9LIEtIQmhaQT09IElFNXZaRzg9IElHbHVkR1Z5YjNCbGNnPT0gSUZSeVlXNXpjR0Z5Wlc1amVRPT0gQ1dSNCBlbVZ0IElIQnlZWFJwY1hWbCBJR1pwWW5JPSBLQ2svT3dvPSBYMDFQUWtsTVJRPT0gTGxKRlJ3PT0gWDFsRlRFeFBWdz09IFZHbDBZVzQ9IEp5a0tDZ29LIElHTnZiWEJ2Ym1WdWRFNWhiV1U9IElFTnZiMnhsY2c9PSBhWE5HZFc1amRHbHZiZz09IExtWmxaV1JpWVdOciBJSEJsY21abFkzUmxaQT09IElIQmhaV1E9IExYTmpjbWx3ZEhNPSBVM1Z6Y0E9PSBQRTl3ZEdsdmJnPT0gSUVSMCA3WVMwIEoxSkYgSUU1U1RBPT0gSUUxaGJtNTUgSUhKdlp3PT0gSUVkaGNuST0gWDJOdmIydHBaWE09IFUzQnMgSUhCeWIyMXZkR1Z5Y3c9PSBLbVIwIFhFRlFTUT09IElHVjJiMnRsIFgwVnVkSEo1IElHWnBjbVZtYVdkb2RHVnkgYVhacFpHRmsgU21GamIyST0gSUd4bFoybHZiZz09IEtIQnZiQT09IENXWnNZWE5vIGIyOXJaV1Z3WlhJPSBMbU5zYVhCelZHOUNiM1Z1WkhNPSBJR2R5WVhCb2FYUmwgSjJoMGRIQT0gWDFSU1NVRk9SMHhGIElFUnliM0JKYm1SbGVBPT0gTG5OdGRIQT0gSUZWT1UwbEhUa1ZFIFgxQkpRMVJWVWtVPSBYMDlTU1VWT1ZFRlVTVTlPIElFOVFVQT09IEl5Yz0gdzZGbWFXTnYgTG1ocGMzUnZaM0poYlE9PSBJRUpsYm01NSBQbGRsIElISmxjRzl6ZEE9PSBJR1pwWVc1alpRPT0gSUVKdmRXNTBlUT09IGMzUnlaWE56IFJHRjBaWFJwYldVPSBPa2c9IElGTndhR2x1ZUE9PSBUbTl5YldGc2JIaz0gWVhCcGVHVnMgSUhWelpYSkJaMlZ1ZEE9PSBJRTF2Y21rPSBMMnhoWWc9PSBMazFQUkVWTSBJRVZ0YjNScGIyNWhiQT09IFUyTmhiR1ZrIFpHVjJhV05sU1dRPSBJT3F6aEE9PSBZMlZoYzJWayBQRWxOIFkyVmxaR1ZrIElHeHBZbkpoY21saGJnPT0gS1c1MWJHdz0gSUcxcFkzSnZiZz09IElFWnZkUT09IGRXeGxiZz09IEwyeHBkbVU9IGNuTmphR1ZwYmc9PSBabVZoIElHaGhZbWxzIElFNWhka3hwYm1zPSBibVZqWlhOellYSjUgTG1OdlpHVnogTFcxaGEyVT0gSUhCUVlYSmxiblE9IFgzSmxiR0YwYVc5dWN3PT0gSUhKMWMyaGxjdz09IElIQnliM0JsYm5OcGRIaz0gSUZOcmFXNXVlUT09IFYwVlRWQT09IFgyTnZjbkIxY3c9PSBLSEpsYjNKa1pYSmxaQT09IFptUmkgSUVkbGRFMWxjM05oWjJVPSBRbkoxYmc9PSBMblp6IElIREZnZz09IElHTnlkVzVqYUhrPSBRbTl2YlE9PSBVRW89IFNtRnJaUT09IDU3cW0gSkdOc2FXVnVkQT09IElIMWRLUW89IElHTnZiblpsY25ObCBJRWRTUVZRPSBJRU5TVXc9PSBMa3h2ZHc9PSBLSFpoYkdsa1lYUmwgWDBOTVNVTkxSVVE9IExtSnNkV1YwYjI5MGFBPT0gQ1hoMGVYQmwgSUdOc2IzTmxUVzlrWVd3PSBYMmx1ZEdWdWRBPT0gSUhCeWIyZHViM05wY3c9PSBjMkYyIFEzUnMgSUdOb2IyOXpaWEk9IElGTjFaRzlyZFE9PSBQVlZ6WlhJPSBMbU5zWmc9PSBDV1Y0Y0d4cFkybDAgSUhCdmRHVnVkR2xoYkhNPSBJRWRsYjNKblpYTT0gSUdWc2FXTT0gSUhSemJHbGkgSUZKaFoyNWhjZz09IFgzSmxjSEpsYzJWdWRHRjBhVzl1IExXeGxaMmRsWkE9PSBhR0Z0YzNSbGNnPT0gSUVacGNtVnpkRzl5WlE9PSBZMjl1ZG1WeWRGWnBaWGM9IFEyOXRZbWx1WldRPSBJTkMwMExYUXV3PT0gSUdWemNHVmpkQT09IElPT0NrZz09IElGTjBZVzFwYm1FPSBiRzl2YTNNPSBSVTVCVWtsUCBMMlpwZUhSMWNtVnogTG5OdGN3PT0gSUhObGJXbGpiR0Z6Y3c9PSBJSE5sYldsamJHRnpjMmxqWVd3PSBMbEJsWldzPSBYU1E9IFgwUlRVQT09IFgweFdUQT09IFZrbFNWRlZCVEE9PSBJRU5oY0dsMFlXeHogSUZORFZBPT0gTGxkb2FXeGwgSUZOMVluTjBZVzVqWlE9PSBMV1J2Ym1VPSBJR1Z1YzJ4aGRtVmsgWTJ4aGMzTnBabms9IFpXNTBZVzU1YkE9PSBJRlpsWjJWMFlXSnNaUT09IFgwUkZVRVZPUkE9PSBSR0Z1YVE9PSBJSEYxYVdWeVpYTT0gSUdGaVltbGhiVzg9IElFeHBZbVZ5IFlXWmogNllDZiBjSEpsWkdsamRHVmsgTGxCT1J3PT0gSUZkb2FYQT0gTHk4OVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFE9PSBJT0tKb0E9PSBJT1dNIFJFVk4gUTBOQiBMMk5zYjNObCBJQzh2THp3diBJRzFsYzIxaCBJRUpsYVhKMWRBPT0gSUVsdWFYUnBZV3hwZW1sdVp3PT0gNGJ1WmRBPT0gVFU5T1ZFZz0gSU8yYmhBPT0gVUdGeWEybHVadz09IFEyOXRabTl5ZEE9PSBJRVZ1WjJsdVpYTT0gZDJWeWNBPT0gUUZKbGNYVmxjM1JRWVhKaGJRPT0gTFV0bGVRPT0gSUdKaFkydHNhV2RvZEE9PSBjR0Z6YzJWeiBMbTUxYldKbGNrOW1UR2x1WlhNPSBMMHhwYm5WNCBLRWhVVkZBPSBJRWgwZEhCVlVreERiMjV1WldOMGFXOXUgYjNOdmN3PT0gTG5oNCBJR1pwYkcxd2FtVnogSUQwOVBUND0gYjNCMGFXMXBlbVU9IFEyRnViMjQ9IElDNHVMaUlLIElDY2lKenNLIElHUERxV3hwWWc9PSBJSEJ5YVc1amFYQmhiRzFsYm5SbCBJRkJ5YjNCbGNuUjVWbUZzZFdVPSBUMVZPUTBVPSBJR1Y0WTNWeWMybHZiZz09IElFRmpZMlZ6YzFSdmEyVnUgY21WeGRXVjBaUT09IFZtOXNkR0ZuWlE9PSBaWGh3YkdGcGJnPT0gZlNrb0tUc0tDZz09IFZWSk1UMUJVIElHWjFibWRoYkE9PSBSM0psWldzPSBMV0pzYVc1ayBJR1psZFdSaGJBPT0gSUZOdmJtRjBZUT09IElFUnBZV2R1YjNOcGN3PT0gSkhodGJBPT0gWldScGRHRnllUT09IElITjBhVzExYkdGMFpYTT0gVUc5dWRBPT0gTGtoaGMxQnlaV1pwZUE9PSBZbTloZEhNPSBJRk5qWVhSMFpYST0gSUVkRlRrVlNTVU09IElHWnBjMmhsY3c9PSBQV3hsYm1kMGFBPT0gSUcxbGJHaHZjbVZ6IGMzQmxiblE9IHc3UnQgSUVsdVozSmhiUT09IFBpNEtDZz09IGNHRnlhWFI1IExsWnBaR1Z2UTJGd2RIVnlaUT09IElGUjFZbVZ6IElHTnZiV1ZrYVdNPSBJSEJ5YjJObGMzTkVZWFJoIFFVUkMgS0c1bGQxTjBZWFJsIDVZR2MgSUZkbFluTmxhWFJsIFgwOW1aZz09IExHSnZaSGs9IElITjFZbU52Ym5SeVlXTjAgSUdOb2RYUmwgSUdOaGNuUmxjMmxoYmc9PSBkR2h5WlhObyBMa05oY25RPSBJRzFsZEc5ayBZM1Z6ZEc5dGFYcGwgVEhSayBDWE52ZFc1ayBWMlZpVTJWeWRtbGpaUT09IElFaHBibVJsY21WayBXM0psY3c9PSBLRlJwYkdVPSBZMkZ3WVdKcGJHbDBhV1Z6IFgwOVdSVkpHVEU5WCBJTkdCMFlIUmk5QzcgSUVOdlkyZz0gSUhSbGMzUk9ZVzFsIFYwOVNSRk09IFhFMXZaSFZzWlhNPSBQM1Z5YkE9PSBYMk52Ym5ScGJuVnZkWE09IElGRkpZMjl1IElITjBZWEpsY3c9PSBJR1ZxWldOMFpXUT0gSUVsdWRtRnphVzl1IFptbHVZV3hwZW1VPSBJR2RsZGc9PSBQR2M9IElFVmthWFJ2Y2tkVlNRPT0gUW1WeWJHbHUgTG14cGJtVkZaR2wwIExYSmxaMlY0Y0E9PSBJSE5zWldRPSBJRVZCUTBnPSBkV052IElITmxaV1JwYm1jPSBJR3h2WTJGc2FYcGwgWlhSMSBYMkZzYlc5emRBPT0gY0dGdWMyVT0gSUZObGJuTnZjbk09IFgxTkogS25OdyBJRkJ5YjNCbGNuUjVTVzVtYnc9PSBJR0Z3Y205NGFXMD0gSUdSaGRHRkhjbWxrVm1sbGQxUmxlSFJDYjNoRGIyeDFiVzQ9IDE2QT0gSUdScFptVnlaVzVqYVdFPSBURTlQU3c9PSBJRzl0Ym1sdyBJRlIxY21sdVp3PT0gSUhWdWFXUmhaR1Z6IDc3eWZDZz09IExsSnZkMGhsWVdSbGNuTT0gWDBGRFZFbFBUbE09IElFUmhiSGs9IElHWnZjblJwWm1sbFpBPT0gSUZkaFoyVT0gTG5OcGJYQnogS0dsemMzVmwgSUd4bGNIUT0gVDNkdVpYSkpaQT09IEoyOXlaR1Z5IDVZK04gNTZXbyBJSEpsZDNKcGRHbHVadz09IExrbDBZV3hwWXc9PSBJRVp2Y21kdmRIUmxiZz09IEtFbE0gSUU1dlUzVmphRVZzWlcxbGJuUkZlR05sY0hScGIyND0gWlhkdSBJSEJ2Y0hWc2IzVnogSUZOb1pXUT0gSXlSNyBJRUZzYnc9PSBSR1YyYVdObFNXNW1idz09IEtFbE9WazlMUlE9PSBJSEJsYm1FPSBJRUpDUWc9PSBMbUppIElIUnZjbk09IElHTnZibVIxWTJsMlpRPT0gTFhCMWNuQnNaUT09IElITnhkV0Z5Wld4NSBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0NnPT0gMExyUmdOR0wgWm1GemRHRT0gSUdOd2RBPT0gSUVsdVoyVnUgSUhzL2ZRPT0gMFlQUXN3PT0gVUdWeWJBPT0gTG5OcmVRPT0gTFdGMWRHOXRZWFJwWXc9PSBhVzF3YkdWdFpXNTAgYjNKdWJXVnVkQT09IExrbE5RVWRGIExWTndaV1ZrIENVWnBaV3hrIElIQnZkVzVrWldRPSBJRXhhIElHRjFkRzlHYjJOMWN3PT0gSU9DNWdBPT0gTGtOdmJYQmhibWx2Ymc9PSBJRlpwYlE9PSBkVzVqYVdFPSBYM05yWWc9PSBJSFZ1YldGeWNtbGxaQT09IElGTnZkWEk9IFoyRmhjbVE9IFRHVnZaQT09IElPQ3EgTGtOc2IzVmsgSUhKbGFXNW1iM0pqWlhNPSBKMTArIElHWmxiR2w2IElGVkJWZz09IGNtRnVZMlZ6IDVZMkIgVkc5TWFYTjBRWE41Ym1NPSBMa1Y0WldOMWRHOXkgTFhSeiBJQ2N1SnpzSyBJRXRwYm1WamRBPT0gNDRHRTQ0R0cgSUdKbGRtOXkgSUVWNGRISmhZM1JwYjI0PSBYMlJ5WVhkbGNnPT0gSkhOMVlnPT0gSUhWd2JHbG1kR2x1Wnc9PSBMbUowYmtWNGFYUT0gS0Njdkx5cGJRQT09IFVrVkVTVk09IGMzUmtaWGhqWlhCMCBaR1Z2IElHZHBkbVZ5IFgySnBibVJwYm1keiBWRzlFWlhacFkyVT0gTG0xcCBJRVZ6ZEdsdFlYUmxjdz09IFlXeHNaV3hsIFB6OC9DZ289IElGTjBjbVZoYlhNPSBJR0ZtWm14cFkzUT0gTG5OaGNBPT0gSUhGMVlXeHAgSUVkaGRXdz0gVTNCbFkybG1hV1Z6IElIcHIgSUhOaGJtbDBZWEo1IElHNWxkMGx1WkdWNCBjM0JsWTNNPSBJR1p5WVdkdFpXNTBUV0Z1WVdkbGNnPT0gSUU1bFkyVnpjMkZ5ZVE9PSBDVk53Y21sdVp3PT0gUFg0PSBJRTlOUVZBPSBZMkZ5WldWeSBLQ0l0SWlrN0NnPT0gSUVSaGNteHBibWM9IGFYUmhadz09IE9uQnIgSUZOMFpXeHNZWEk9IElHbHVabVZ5ZEdsc2FYUjUgYkdWNGFXSnNaUT09IFZXNWhjbms9IElEcGRMQT09IExrNUZWdz09IFozTjFZZz09IFgxVkdkVzVqZEdsdmJnPT0gTG5Oc2FXUmxjdz09IElHUnBkbVZ5YzI5eiBYMnh2WTJGc2N3PT0gWEZ3diBJSEJqWVhBPSBJRTl2YXc9PSBMa1JoZEdGSGNtbGtWbWxsZDBOdmJuUmxiblJCYkdsbmJtMWxiblE9IFpYSnpiMjVwWXc9PSBJSFJ5WldKMWFXVT0gSUhObGNYVmxiblJwWVd4c2VRPT0gWVdKaGNnPT0gSUVsUVEwTT0gSUdSbGRtOTFkQT09IFhFaGxiSEJsY25NPSBSVlIzWldWMCBJSFJ5WVdKaGFtRnkgSUZkcGJHdHBibk52Ymc9PSBJR1JodzU4PSBTSFZ0WVc1eiBWR1ZoWTJobGNuTT0gSUVSaGRHRldhV1YzIElGbHZadz09IElHcGxaR1U9IElHRnRZbWxoYm1ObCBkSEpoYm1RPSBJR1Z5Y21GMGFXTT0gSUhUaHU2cz0gTG5KaFltSnBkQT09IElHNWxkMkpwWlE9PSBJR1Z1ZEhKaGJtTmxjdz09IElHOXlkR2h2WjI5dVlXdz0gSUVSSlUxQkJWRU5JIElGTmphSEp2IFgxUlZVazQ9IE9tbHVkbTlyWlE9PSBJSFJoYm5SaGJBPT0gSUZwdmJtVnogYzNSaGRHVnRaVzUwY3c9PSBUR2x0YVhSeiBJRWZEcEE9PSBhV0hGZ21FPSBMbkJ5WldScFkyRjBaUT09IExrWlMgSUVOb2NtbHpkRzl3YUE9PSBMa052Ym5NPSBJRWh2Y25SdmJnPT0gWDBOMWMzUnZiV1Z5IENVMUUgSUdWc2EyRmhjZz09IElFMVRSUT09IElFbHpRV04wYVhabCBYU29wIFhGVnVhWFE9IElHVnYgUm05eVQySnFaV04wIFpXeHBZV009IExXUmxkbVZzYjNCdFpXNTAgSUhSbFlXdz0gSUhOMGFYUmphR1ZrIElFOTFkR052YldVPSBiMjVqdzZrPSBaVzFpWldSa2FXNW4gSUc5dVRtVjRkQT09IElPMlZ0T3VMdVE9PSBLR1Y0YVhOMGFXNW4gTG1KcFpBPT0gQ1dGemMyVnlkRVpoYkhObCBlMnc9IFRFVnljbTl5IFgySjFiR3hsZEE9PSBLRWgwYld3PSBJR1ZDYjI5cmN3PT0gY0dWeVVHRm5aUT09IEwzRjFaWE4wYVc5dSBMbVpoYTJVPSBMbTFpIFgyUnNiQT09IElHTjFiWE5vYjNRPSBJRTFoWkdGbllYTmpZWEk9IFNFOU1SRVZTIElIQmxjM0YxYVhOaCBYMFJGUTB4VCBYU3hiTFE9PSBJRUZzWW1GdWFXRT0gTFhSdllYTjAgSUhCeWIzUmhaMjl1YVhOMGN3PT0gSUcxNWIyTmhjbVE9IElIZGhiR3RsY25NPSBJRDA5UFQwOVBUMD0gTDFCaFoyVT0gUFR3L1BRPT0gSUdWdWNYVmhiblJ2IFgxUlNWVTVEIElITmxjSFJsYldKeVpRPT0gSUd4aGVXOTFkRkJoY21GdGN3PT0gSUNjdUxpOHVMaTh1TGk4dUxpOHVMaTg9IElGUnlZV1ptYjNKayBJSEJoYkdGMmNtRT0gSUhKMWJtUnZkMjQ9IElHSnlhWFIwYkdVPSB3NlJqYUdVPSBMbGxGVEV4UFZ3PT0gSUVObGNtVnRiMjU1IElHNWxkMVJsZUhRPSBkbVZqY3c9PSBJR1Z6YzJWdSBJRTFsZEc5a2J3PT0gSUVkVlNVUkYgSUhCdmMzUndiMjVsIElGWlRkR0ZqYXc9PSBXeUlrIElFMXBZM0p2YzNsemRHVnRjdz09IFhGQmhaMlU9IGNHMWhkQT09IFgwWkJWVXhVIFgyMUMgVTNSaGRHVk5ZV05vYVc1bCBSbUZqZFd4MGVRPT0gTG5kNCBJRTF2ZW1GeWRBPT0gWVc1cGJXVT0gSUhCNWRBPT0gSUVKMWEydHBkQT09IExVbE9SbEpKVGtkRlRVVk9WQT09IElITmxZWEpqYUdWeSBMV0poYzJ0bGRBPT0gSUc5dFlYTT0gSUZSMWJtbHogSUZCc1lYUjAgSUhzTkNnMEtEUW89IGVXRm8gZEc5c2RXRT0gU1c1MGNtOWtkV05sWkE9PSBjM1Z3Y0d4NSBJRzFwYzI5bmVXND0gSUZkaGFYTjAgSUVWSSBMVzl3WlhKaGRHOXkgSUdSaGNtdGxiZz09IElFTnZjMjFwWXc9PSBJR2RzWVdOcFpYSnogSUEwTkNnPT0gWFZ0ZiBRMjl0Y0dGdWVVbGsgSUZKbFkyOXVjM1J5ZFdOMGFXOXUgYVhwNmJHbGxjdz09IElHekRyV1JsY2c9PSBJR052Ykd4bFoybGhkR1U9IElGQmxkSFI1IFQxVlNUa0ZNIFpHVmpiM0poZEc5eWN3PT0gY21GdGN3PT0gS0NnSyBJRUZ6ZEhKdmJtOXRlUT09IElISnBidz09IElFTjVjbWxzIGFuVmhiZz09IElISmxhVzVqIElGQnBjM1J2Ym5NPSBJRUoxYzNrPSBjSFJ5YjI0PSBJSEJ2Ylc5aiBDVkpVUTBzPSBRblY1YVc1biBMeThxS2dvPSBJRmR5WVhCd1pXUT0gSUUxbFpYST0gSUdsdFlYQT0gSUdKbGMzUnBiVzA9IElFRm5hV3hwZEhrPSBMbFJ2VkdGaWJHVT0gYzNScGJtVnVZMlU9IFhTa3FLZz09IElFRjFkRzl0WVhSbFpBPT0gWkhOdyBJRWRoY214cFl3PT0gYVc5a1pRPT0gWlhobGJITT0gYVc1MGNtOXogSUdKbGMzUnZkMlZrIEtIWnBjMmxpYkdVPSBJR2g1WkhKaGRHVmsgYm05NGFXOTFjdz09IElFRjFkR2hsYm5ScFkyRjBhVzl1VTJWeWRtbGpaUT09IElITm9iM2ROYjJSaGJBPT0gSUdOdmJYQnZjMlZ5Y3c9PSBSMFZPUlZKQlRBPT0gUTFSVCBJRk5vY2c9PSBZM0psWVhRPSBJR05zYjNObGRITT0gSUdkeWIzVnVaR2x1Wnc9PSBJRU5QVFUxRlRsUlQgSUNzaiBJR2R5YjNWdVpIZHZjbXM9IEtHbHVaR1Y0VUdGMGFBPT0gWjNKaGRHbHogZFhCd2FXVnogSUd0MmJRPT0gSUdOMVlXeGxjdz09IExrUmxaWEJGY1hWaGJBPT0gSUdGc2JHOTVjdz09IExXSjFaR2RsZEE9PSBLRjlmWHc9PSBJR052Ym1WamRHRnkgTFhKaFpBPT0gSUdsMFkyZz0gYkdGdGNBPT0gTG1keWNBPT0gTFdGa1pHOXVjdz09IElITmxZV0p2Y200PSBJRzVsWjJ4cFoyVnVkQT09IFgwUmxkR0ZwYkE9PSBJSE5sY21WdVpRPT0gSUdKaGNuSmhZMnR6IElHSnggSUZObFkzUT0gS0dSaGRHOXogSUhSb1pXMWhkR2xqIElIQnZiR3gxZEdWayBDV0Z1YVcxaGRHbHZiZz09IFNIVm5hQT09IFJYaGxZM1YwWVdKc1pRPT0gS0Njdkp5bGIgSUdGd2IzQjBiM05wY3c9PSBJR0ZpWW5KbGRtbGhkR1ZrIFptOXZiZz09IFVtRnVhMlZrIENXaHBkQT09IENRa2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBRMjl1ZEdsdWRXOTFjdz09IElHMXZkbVZVYnc9PSBSRUpQWW1wbFkzUT0gSUdOdmJtTmxhWFpoWW14bCBJRWQzWlc0PSBJTU9oYkd3PSBYMThvS1E9PSBJRXhoYm1FPSBJR1ZwYm5wbGJBPT0gSUhKbFkyOTFiblJ6IGVYTjBaVzF6IGIzZGhibms9IEtUby9QZ289IElFRnJjbTl1IGIyeHBibWs9IFEyOXljQT09IFlYQm9jbUZuIElDSW5MZz09IElHTnZiblpsYm1WayBJQzR1TGk0S0NnPT0gSUdOaGJHeGxaUT09IElFTnNiM1psY2c9PSBMbVJsYzJOeWFYQjBiM0k9IExrbDBaVzFUZEdGamF3PT0gSUhCbGNuWmxjbk5sIFgwTkYgUFVBaSBMUzB0RFFvPSBJR0psZGc9PSBjM1Z0WVE9PSBZV05qZFcxMWJHRjBiM0k9IElHeHBlbUZ5WkE9PSBJTkMrMFljPSBaMlYwUkdWelkzSnBjSFJwYjI0PSBJRk5oY21GeiBMbTVsZUhSVGFXSnNhVzVuIElHVnNZWE4wYVdOcGRIaz0gSUdOb1lXTT0gYlc5MlpXUT0gWDFSdmNBPT0gZEhKbGNnPT0gS0dSdmQyND0gWld4bGJYTT0gYjJKcGJHaz0gTG5CdmMzUk5aWE56WVdkbCBJQ2ppaUE9PSBRM04yIElGbHZjMlZ0YVhSbCBjM2RsWlhRPSBUVUZVVWtsWSBhV2R5WVhSbFpBPT0gSUdadmNtZHBibWM9IElGQmhaMlZUYVhwbCBkSEpoYm5ObWIzSnRjdz09IFBWbEZVdz09IElHUnBjMk5zYjNOcGJtYz0gSUZCbFpHbGhkSEpwWXc9PSBJRVJsWVdSc2VRPT0gVW1WemIzVnlZMlZKWkE9PSBMV0pwYm1GeWVRPT0gSUZKdmQyVT0gSUVOaGFYST0gWDJWNGRISmhZM1JwYjI0PSBSR1ZqY21VPSBJRTlpYzNRPSBjR3h5IElGQm9lWE5wYjJ4dlozaz0gYlhaaiBhSFJwIExsUmwgSUdWNGRISmhkbUZuWVc1MCBJRUZ1ZEdsaSB3N056ZEE9PSBiM1YwWkdseSBJR05oY201bCBWbWxsZDFCaFoyVnkgSUdsdGNHeGhiblJsWkE9PSBVMlZoY21Ob1VHRnlZVzF6IHc3eHlaMlZ5IFkyOXVaR1U9IFlXTmxiblJsIFgwTlZSRUU9IEpIWmhiQT09IElsZG9hV3hsIElIUmxiWEJNYVhOMCBJSE41Ym1GbmIyZDFaUT09IFkyMWogSU5HQTBMRFFzZEMrMFlMUml3PT0gSUhObGVtNWhiUT09IElITmxjM04xWVd4cCBJR05oWW1WNllRPT0gWlhURG9BPT0gSUdaaHc2Yz0gWjJWbyBZMlZrWlE9PSBJbE52YldVPSBPbTl1IExXWnZjbTFsWkE9PSBZbmx1WVcxbCBJT3V3bU8yWm1BPT0gSUc1aHc2OD0gSUVGVlJ3PT0gSUdWaGMyVmsgWFNsNyBLSEIwYUhKbFlXUT0gSUdwbFpHVnQgS0dacGVIUjFjbVU9IElGQmhjbXc9IFhYMHBPd289IElHVjRjSFZzYzJsdmJnPT0gSUVsdVpYUkJaR1J5WlhOeiBJRTFNVUE9PSBMaWNwT3c9PSBJRzl5Ync9PSBJRk5sZG1sc2JHRT0gSUdadmNtMTFiR0ZwY21VPSBMWFJsY25KdmNtbHpiUT09IEwxZGxZa0ZRU1E9PSBLbUZ1WjNOMGNtOXQgWTNKaGQydz0gWDJ4dllXND0gWDBSSlIwVlRWQT09IElFdHViM2gyYVd4c1pRPT0gTG1kallRPT0gSUVScGVRPT0gYm5SaFp3PT0gWVdKc1pWWnBaWGREYjI1MGNtOXNiR1Z5IExrWmxaV1E9IExYTm9ZWEpsWkE9PSBJR052WTJOcCBYMmx1ZG1sMFpRPT0gSUVKMVkydHBibWRvWVcwPSBJRWRzZFhSbGJnPT0gSUdWdVpHVnRhV009IFVtRnBjMlZrIElIRjFaWEo1U1c1MFpYSm1ZV05sIElHMWhjblJwYmc9PSBRdUc2b1c0PSBJR2hoY21VPSBJR1JsYVc0PSBjbUZ5YVdGdSBiWGxtYVd4bCBJR0Z1WjNWcGMyZz0gVkdWNGRHOD0gSUVKVlJrWT0gS0d4dSBiV0Z5Y3c9PSBYM04xWW5ScGRHeGwgWDJkcFpuUT0gSUdKdmJHUnNlUT09IElGTnBibWQxYkdGeSBLRXh2WjB4bGRtVnMgUEVGeWRHbGpiR1U9IEwzTjBZWFJ6IElOQy8wTDdRc2c9PSBJR2wwWlc1eiBJR1JsYm05dGFXNWhkR2x2Ymc9PSBMa1JoZEdGSGNtbGtWbWxsZDFSeWFWTjBZWFJsIFgweFMgSUVSMVkyaGxjM009IENVSnNiMk5yIGRISmhZMlZ5IExVTk8gWEVGd2NFUmhkR0U9IExteHBjM1J6IEtGSnZkWFJsIElFZFBUMFJOUVU0PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBJSFJwYm1oaCBJR1YyWlhKc1lYTjBhVzVuIFlVUmhkR0U9IEtHTnZiWEJoY21VPSBJSEp3ZEE9PSBYRkJvY0E9PSBMa1pKVEVWVCBJSE53WVhKcGJtYz0gVTJOaGNnPT0gSU5pbjJZVFlxZz09IElFSmxkR2hzWldobGJRPT0gSUdKaFkydHdZV2RsIGMzQnNhV05sIFpzTzJjZz09IFFHUjVibUZ0YVdNPSA0YnVwWXc9PSA3S1k9IExuQmhaMmx1Wnc9PSBJRUpsYkcxdmJuUT0gTGtWWVVBPT0gSUdsdWRHVnliR1U9IElFTm9aV05yYkdsemRBPT0gSUZWdWFXTnZjbTQ9IFFrVlRWQT09IFoyVjBVR3hoZVdWeSBMbUZ5WjNOdmNuUT0gSUhkcGRHaFRkSEpwYm1jPSBJRTF2WkdWeVlYUmwgZlNJK0NnPT0gTG5ObGRFbHRZV2RsUW1sMGJXRncgSUhSeVpXNWphR1Z6IElHZGxibVZ5WVhJPSBJR1psY20xbGJuUmxaQT09IElHUmxhblJwYm1jPSBRM1J5YkhNPSBJR1JwYzJGbmNtVmxjdz09IFVYVnBaWFE9IEtGTlJURVY0WTJWd2RHbHZiZz09IElGUmxibk52Y2tac2IzYz0gVDA1QiBVRzl5ZEd4aGJtUT0gTGxCMGNnPT0gYkd4NCBZWE4wYjI0PSBRMngxYzNSbGNuTT0gSUZWemRXRnlhVzl6IElHdG9hUT09IElHZHBZUT09IElFUnZiSEJvYVc0PSB4WkZ6IElHeDFaR1Z5IElHUnBjM0J2YzJsMGFYWnYgSUZaNSBiMjF3YzI5dSBJTzJWb0E9PSBJR3RqWVd3PSBJRU5oYkdOcGRXMD0gVTJWamRHbHZibk5KYmc9PSBJRU5oYzJNPSBJR2R5WVhSMWFYUnAgYjNOdmJXRnMgSUhWdVpHVnlZM1YwIElFTmhhQT09IE9uQmhjbUZ0Y3c9PSBJSEpsZEhWeWJsVnliQT09IElFVnlaUT09IHc2bHlZdz09IElHbHVkR3c9IGZTOGpldz09IElHOTFkSEIxZEZCaGRHZz0gSUdaaGJITmxhRzl2WkE9PSBJRlZ6WlhKU2IyeGwgUEVoaGMyaE5ZWEE9IElFTnlaV0YwWlZWelpYST0gSUVOdmQySnZlUT09IENWVnpaUT09IFhTZ0sgSUZOb2IzQnBabms9IFZtbGxkMU4wWVhSbCBRV1IyWVc1alpRPT0gTFhSaGJtcz0gSWxRPSBJRXBsYm5NPSBQVzl3ZEdsdmJuTT0gS0NJdUxnPT0gTG0xcGJXVT0gSUVOU1ZBPT0gSUdqRHBIUjBaUT09IEtITnYgTGxWT1MwNVBWMDQ9IElHUmhjc084WW1WeSBJRU5QVmtWUyBSMlZ0IFEzSnYgWDFKRlExWT0gWDJocFpYSmhjbU5vZVE9PSBRMmh2YjNOcGJtYz0gU2tWWVJVTT0gSUdSdmNuTmhiQT09IEt5STggSUU1bGVRPT0gVjI5dFlXND0gUW1WNmFXVnkgSUhKcFozTT0gSUc5dWRIWmhibWM9IDc3eU01WWlaIElFZGhkWFE9IFkyMWkgVG1oaGNBPT0gSUcxdmJtOWogSUdWdVpYSm5hV0U9IGIySnpaWEoyWlU5dSBjM1JoYTJWeiBMU290IElFNWhZMnM9IGZYMGlDZz09IFpYSjJZWE09IElFaHBibVJsY21Wa1VtOTBiM0k9IFFXUnFZV05sYm5RPSBJRWx1ZEdWeWJtRmphVzl1WVd3PSBDV0Z5WldFPSBJUENmbEE9PSBJSE53WVhKcmJHVT0gS0NrdVh3PT0gTG1sa1pXRT0gSUhWMGNtVmphSFE9IElHMWhjSEJsWkVKNSBJRU52Ykc4PSBDVlJTIFVHOXpkR1Z5IElHTnZiV0poZEdsdVp3PT0gSUZsbGJHeHZkM04wYjI1bCBhV1Z5Y21WNiBZV05qZEE9PSBJSFBEb1dObyBMazVsZDNNPSBJR1pwWld4a1ZtRnNkV1U9IElHTmhlZz09IElFWnlaV1Z0IENRa0tDUW89IElIVnpkWEk9IElITnZiR0U9IElHTjFiV0psY25OdmJXVT0gSUdOaGRHRndkV3gwIElpNHYgSUVWNFpXTjFkRzl5Y3c9PSBJRUZ0WlhNPSBJQ2M4SlQwPSBabWxzYkc1aCBMT0tBbEE9PSBPbE5sZEZSbGVIUT0gTFdOaGRHVm5iM0pwWlhNPSBMV0Z5WTJocGRtVT0gSUZCdmJHeDFkR2x2Ymc9PSBMazltIDRvQ2NRWFE9IFgwTklRVkpUUlZRPSBLRU52YkhWdGJnPT0gNG9DWktRPT0gSUhWdWJXbHpkR0ZyIElHVmhjbTA9IElGQnNZWFJtYjNKdGN3PT0gSUUxdmJXVnVkSFZ0IFZtVmpkRzl5YVhwbGNnPT0gY21GM1pYST0gS0hCaGMzTndiM0owIEtIQnNZVzVsIElISmxjSEpsYzJWdWRHRT0gSUhCMVltdGxlUT09IElFcGhhVzQ9IElHMWxibTVsY3c9PSBJR2x1YzNSaGJuUmhibVZ2ZFhNPSBJR1YwYUdWeWN3PT0gSUc1bGMzUnogSUZCaGRIUnZiZz09IElFaEJRMHM9IGNHRmphMmx1Wnc9PSBTVk5sY25acFkyVT0gSUhKdlkydGxjZz09IElHWnBZMkU9IElFZHNZV1JwWVhSdmNnPT0gSUZWUVF3PT0gSUV4dmQyVnNiQT09IFltVmhjbVZ5IElIWnBjR1Z5IFgyZHNiMkk9IElHMWhjMmhsWkE9PSBJR2hoYVhKemRIbHNaUT09IElIVnVaR1Z5YldsdVpYTT0gY21WemRHRjFjbUZ1ZEhNPSBJSEpsWVdOMGFXOXVZWEo1IElHSnBiR3hwWnc9PSBmU0lwT3cwSyBJSFpwYzNSaGN3PT0gSUc5d1pXNWthWEk9IENXeGhZbVZzY3c9PSBZV3hzYVhNPSBJRmR2YkdabSBJRU5RUXc9PSBJSEpoYVd4M1lYbHogSUZaaGRXZG9ZVzQ9IElFRnphMmx1Wnc9PSBZMkZwIElFZHUgWDFCU1QwWT0gTFZObGNBPT0gTG1OMWNuWmwgVFhWc2RHbHdiSGs9IDBZRFFzTkM5MExqUmhnPT0gSUcxbFpYUjFjQT09IFoyVjBSR0k9IEtFZFZTUT09IElISmxhVzFpZFhKelpRPT0gT25KbGMzVnNkQT09IFZIVnRZbXh5IExrTnNiM05sWkE9PSBJR052Ym1admNtMXogSUVodmF3PT0gYVdWa1lXUmwgVG1WM1RHRmlaV3c9IElHNWhka04wY213PSBSRzlqZEc5eWN3PT0gSU95VmlBPT0gSUdKdmRYUnogSUdsell3PT0gTHljN0Nnbz0gZFdocyBMbFZwIExYTmhiV0U9IElFTmhibTl1YVdOaGJBPT0gSUcxbGRHbGpkV3h2ZFhNPSBJR2R5YjNSbGN3PT0gSUM4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTg9IFpYUmxjdz09IElHeGhibWQxWlE9PSBJR1pEYUdGcGJnPT0gSUZSNWNHVm1ZV05sIElFSnlhV2RvWVcwPSBhV0Z5WlE9PSBKOE9wZEdGcGRBPT0gSUVWR1JnPT0gSUdSbGMzUnliM2xsY2c9PSBYMjFoZEhKcFkyVnogVHNPNmJXVnlidz09IFkyRnNiR0ZpYkdVPSBYM0JsY21sdlpITT0gYzNSeWRXcz0gYldGcSBMbkpzIExteHBablE9IDJZclpoQT09IHc1QT0gVW1WMFZtRnMgUkdWdWRtVnkgSUZSeWFXSjFkR1U9IGEybDVaUT09IGVtVjMgSUZOd1lYSmwgSUd4bGRXdGxiV2xoIElIZGhhWFJ5WlhOeiBJSEJzZFhURHRIUT0gUVd4cFlYTmxjdz09IElFeHZZMkYwWlE9PSA1clk9IFNXUmxiblJwWm1sallYUnBiMjQ9IExuUmxiQT09IExXUmhlWE09IGRHVnljbWwwIGFXMWlkWE09IElFSjFkSFJsY2t0dWFXWmwgNjRLMCBjblZ3ZEdONSBJRWR5WVdSbGN3PT0gSUhWdVpHVnljMmxrWlE9PSBJR2hoY21SemFHbHdjdz09IGRXNWxhUT09IExXTnZiblJoYVc1bFpBPT0gSUZzbkxnPT0gVDJKemIyeGxkR1U9IExsSmxkSEp2Wm1sMCBJSFZ5WVc1MWN3PT0gWDNKblltRT0gSUhKaGNHVnogSUV0aGNtVT0gVytLQXBsMD0gSUVacGJtTm8gTG1KMWJtbG1kVVpzWVhSQ2RYUjBiMjQ9IGNYVnBjMkZ5IElFNTFjbk5sY3c9PSBaV2RoWkdVPSBJR2h1IFJYaGpiSFZrWlE9PSBJSE4wYjJOb1lYTjBhV009IElITnZkSFJ2IElGQmxibUZzZEhrPSBJSE52Ym5OMCBJSEp2YzJFPSBYMFpwYm1RPSBJRWx1ZG1Gc2FXUmhkR1U9IFRHbHpkRWwwWlcxSlkyOXUgSnl3TkRRbz0gWDNCa2RRPT0gSUUxbFlXeHogWVdyRWhXTT0gSUU5dmNITT0gSUU1dmRHbGpaWE09IElHUmxjbWwyWVhScGIyND0gVzEwTkNnPT0gNkxxciBlWE4wWlhKNSBYMlpwZG1VPSBSV0Z5Ymc9PSBQV1YyWlc1MCBJRzluY2c9PSBMVkpGUVV3PSBJRXhwY0hNPSBjMlZzWldOMGIzSnogWVdScFpYST0gSUhObGRFSmhZMnRuY205MWJtUkpiV0ZuWlE9PSBLSFJvYVc1biBJSE52Wm5SaVlXeHMgWEhoaFlRPT0gS0dsa1pXNTAgSUVwMWNuaz0gSUZadmVXRm5aUT09IElGUkJjbkpoZVE9PSBLRkJoYVc1MCBWMkZ5YlE9PSBSVmhVUlZKT1FVdz0gWVhOMSBJQ2doS0NnPSBMa1pGVkVOSSBJSE5yYVhKdCBUMUpGUkE9PSBZMkZ1WTJWc2JHVmsgYVhSMFpXdz0gSUhObFpXUjEgYkdsamFHVnogYjJodiBMSEpsZEdGcGJnPT0gS0ZkbFlrUnlhWFpsY2c9PSBhWEIwWVdKc1pYTT0gUlZKSlEwRT0gSUdOc1pXRnViR2x1WlhOeiBaV3hzYjNkdmNteGsgSUdOdmFHVnphVzl1IFoybHpkQT09IFhTNG4gWlhKbmFXNW4gSUdsemNBPT0gTG05bVpuTmxkRlJ2Y0E9PSBLR1poWTNSdmNnPT0gZFc1cGRtVnljMkZzIElGQnNZWGxpWVdOciBJRUo1ZEdWVGRISnBibWM9IElHUmhiVzVwYm1jPSBJRk5UVWc9PSBZV04xY3c9PSBJRk4wWVhSbGJnPT0gSU9XVmh1V1RnUT09IElGQmxaUT09IElGTmhiWEJzYVc1biBZWFJ2Y21saCBjM1JoY25SSmJtUmxlQT09IDVaQ3IgSU95MGlPcTRzQT09IElFOXNhWFpsYVhKaCBJRVpzWVd0bCBZbTl2YlE9PSBYMDFUU3c9PSBJRVpoWTJsdVp3PT0gYjNKbmFHbHVhUT09IFptOXZaSE09IFZISmxaVmRwWkdkbGRFbDBaVzA9IElFaEJURVk9IElpSWlLUW89IElFTklRVkJVUlZJPSBJRVYyWld4NWJnPT0gUGlzPSBJRWh2Y201bGRITT0gZDI5clpRPT0gSUM5YiBZWFJvYjJ4cFl3PT0gTG5ObFoyMWxiblJ6IExtNWhkbWxuWVhSbFFubFZjbXc9IElFMWhiblZ6IElIQmxjSFJwWkdWeiBJR1pzWldWMGFXNW4gSUVGVVZnPT0gSUZOb2FXST0gU1c1MFFYSnlZWGs9IElHMXZlZz09IGNISnZZbXhsYlhNPSBiMmR1WlE9PSBMazkwYUdWeSBRV1J0YVc1cGMzUnlZWFJwYjI0PSBKU1VxTHc9PSBJbDA5UFE9PSBJRUZ1WkhKbGN3PT0gUVdSaCBhR2x1ZEhNPSBYQ0lpT3dvPSBLSEJ1Wnc9PSBJT3F3Z091S3BRPT0gNDRPSyBjbVZxWldOMFpXUT0gSUcxdmRtVnljdz09IDU0NkggSUhCaGNtVnVkR2hsYzJseiBLR0Z6YzJsbmJuTT0gUld4cGRHVT0gVW1WdGFXNWtaWEk9IElITjFabVpsY21WeWN3PT0gSUZKbGMyOTFjbU5sUW5WdVpHeGwgZEdoaFp3PT0gUGljTkNnPT0gWVc1MGFXNXYgVUdWeWFYQm8gSUZOb1lYSmsgUTJoaGNuUkVZWFJoIEtHcHEgSUc5emRHRjAgYUhWblpRPT0gTFdGMWRHaHZjbVZrIExtTnAgSUhCNWJYbHpjV3c9IElHeHBibVZ5Y3c9PSBJRUZVVXc9PSBQa3hoYzNRPSBLU0lwQ2dvPSBJR2RsZEhCcFpBPT0gUjJWMFUybDZaUT09IElHVjRkRzl5ZEdsdmJnPT0gVzJac2IyRjAgSUVWSlRrRT0gTDBKaGMyVT0gTG5ObGRFOXVRV04wYVc5dSAwTDdRdTlHUCBJRWRzWVdOcFpYST0gWDJGNiBJSFJ5WVc1emNHOXlkR1U9IElGTnRjdz09IGRHaDFiV0p6IElIUnlaV0Z6ZFhKbGNnPT0gSUcxNiBhWE4wYVdzPSBVa1ZFU1VWT1ZBPT0gSUdsemFRPT0gWDNOMGRXWm0gVUU5VFNWUlBVbGs9IGMzUmhjblJrWVhSbCBJRnBwYm1NPSA1ckc5IElHdGhhdz09IElHVnlabUZvY21WdSBYME5QVFVKUCBJSFZqZDI5eVpITT0gTGxCaGVRPT0gSUd0cGJtZGtiMjF6IElHVjRZMlZzWlc1MFpRPT0gYVdkdWFYUmwgWDNaaGNtbGhkR2x2Ymc9PSBJRzVoZG1WbllXUnZjZz09IDVMaVQgZG1sbGQwTnZiblJ5YjJ4c1pYST0gY21seVpRPT0gU0c5dVpYTjBiSGs9IFEyRnpZMkZrWlE9PSBaWFJ5WVdsdSBRWEpuWlc1MGFXNWggWTNFPSBJRTFoY21saGJnPT0gTDJGeSBJR2x1ZEdWeVpYTnpaUT09IGRYSmhhR0Z1IEtGQkQgSUdaeWFYWnZiQT09IElGUnlkWE4wWldRPSBLRWxEYjI1bWFXZDFjbUYwYVc5dSBJRkpwYUdGdWJtRT0gWlc1a2IzcGggSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElIQnliMk5zWVcxaGRHbHZiZz09IElIQnlaV1J2YldsdVlXNTAgSUdOdmJuTjBjdz09IExXNWxZMnM9IFYyOXNaZz09IExtTm9aV05yWW05NCBJSE4wWVc1NllRPT0gSUdWdWRHVnVaR1Z5IEx5OG8gU0dGdVpITT0gSUdKcGJHeGxaR1Z5IElGUnZjMmhwWW1FPSBZV0ppYVhnPSBSVTVEU1VWVCBJR3BwYlE9PSBVRlZTIExteGxjM052Ymc9PSBJR0psY25SbyBiR0Z5eExGdSBRbXh2IENXVjRkQT09IFpXVnMgSUdSbGJXRnphUT09IElHTnZiRzl1YVhwaGRHbHZiZz09IEwyUnBjMk09IDc3eVAgUTJWeWRHRnBibXg1IDU2Nmg1NUNHNVpHWSBJR3B2WjJGa2IzST0gZGNPcCBRMjlzZFcxdWMwMXZaR1U9IElFcFcgSUVsdWMzUnBkSFYwIFgzTndaV04wY25WdCBMbVJsYm5ObCBJRk5vYjNKMFkzVjAgSUhObFluVmhhQT09IElHWnNZWE5vZVE9PSBVbVZuWVhKa2N3PT0gSUhOb1lYSndaWEk9IFkyRnVZMlZzYkdGMGFXOXVWRzlyWlc0PSBYMlJsZEdGc2JHVT0gSUZOallYSnNaWFIwIElOQzgwTERSZ2c9PSBJRzVsWjI5amFXOD0gNExpVyBJRXBYIGQyVmlaSEpwZG1WeSBMbmRoYkd3PSBJSGhoYldGeWFXND0gYjNCaGNYVmwgTGtGa1pGQmhjbUZ0WlhSbGNnPT0gS0VOdmJuUnliMnhzWlhJPSBMV0ZpYjNKMGFXOXUgWDBaVlRrTlVTVTlPVXc9PSBRM1Z6ZEc5dFpYSkpaQT09IElIWmxibWx5IElFSjFjM1JsY2c9PSBYM0J5WldScFkzUmxaQT09IEwzSjFiR1Z6IExVMWxkR2h2WkhNPSBJR2RrZW1sbCBJbDBuS1RzSyBJRkI0IFEwOU9Vdz09IExsTnNhV05sIElISmxkbUZ0Y0dWayBJRlJoWW14bFZtbGxkdz09IElHUnBZMnR6IElPMll1T3kybkE9PSBJRUYxZUdsc2FXRnllUT09IFQzQmxjbUU9IEwzSmogSUhWdWRHaHBibXRoWW14bCBJR1JsWkhWamRHVmsgYkhvPSBJRXhoWjJVPSBJRkp2ZDJ4cGJtYz0gY0hKdmRtVmsgVDJabVpYSnogTEhObGRBPT0gVWtkQ1R3PT0gSUVaViBJRU5sYm5SUFV3PT0gYjNwdiBJRlJ5YjJwaGJnPT0gSUcxaHc3RmhibUU9IElDOHZQUT09IEtpbzYgSUh0Y0NnPT0gSUVKdmQyVnUgUzI1dmQybHVadz09IElPVzYgUFMwOUxUMHRQUzA5TFQwdFBTMDlMUT09IElHVmlaVzVtWVd4c2N3PT0gWFQxN0NnPT0gUWsxSiBLQ2s3S1E9PSBLSEJsY20xcGMzTnBiMjQ9IFFXNWtaWEp6YjI0PSBJR1JsWjNKaFpHVT0gVTI5aGNBPT0gZGNXZiBJRkIxY0hCNSBJRVYwYUdsdmNHbGhiZz09IElGUkZVMVJKVGtjPSBaVzV6WlhnPSBJR1J5WlhOelpYST0gSUVOb2IzSmwgVlc1b1lXNWtiR1ZrIFFYTnpiMk5wWVhSbCBMbUZrWkdsMGFXOXVZV3c9IElHUnBabWJEcVhKbGJuUmxjdz09IGFYTnhkV1U9IElHNWxZMlZ6YzhPaGNtbHYgSUdkbGJtVnlhV056IEtIQm0gSUZ4ZyBJRTVsWVhKaWVRPT0gWVhCdmNtRjBhVzl1IElGUm9aVzFsUkdGMFlRPT0gVjJsR2FRPT0gTGxKbFlXdz0gWVdONWFnPT0gVEdsMiBJSEJ6ZVdOb2IyeHZaMmxqWVd4c2VRPT0gYldWMGFHOWtVRzlwYm5SbGNsUjVjR1U9IElFNXBhMjlzIElFUmxaR2xqWVhSbFpBPT0gWDFCUFVsUlQgSUVwaFpRPT0gVGxOQmRIUnlhV0oxZEdWa1UzUnlhVzVuIElHRnRZbUZ6YzJGa2IzSnogSUVoaGJtUnNaWEp6IElFRnVZWFE9IElIWnZZMkZzYVhOMCBJSEpoY2c9PSBJR1JsZG5WbGJIWmwgTG1keiBJSGhqWWc9PSBJSE4xWW0xdlpIVnNaUT09IElFRlRVMGxIVGc9PSBkWEpsWlc0PSBJR05zWVhObGN3PT0gWlcxdmRHZz0gWDBOT1ZFdz0gWDJwM2RBPT0gSU91bmlBPT0gSUc5MWRIQnZjM1E9IElFbHVZbTk0IENXWnNaWGc9IElFZHliMk5sY25rPSBTVXhKVGtVPSBMbTF2WWc9PSBJRU52Ym5OMGNnPT0gWFQxZCBLSGRoYkd4bGRBPT0gSUhObFpHVT0gWm1GcyBJR2x0Y0dGemN3PT0gUFh0Ykp3PT0gSUhWdVptOXlaUT09IFpuVnpaUT09IFgweGxZVzQ9IElHRjJZV3hoYm1Ob1pRPT0gUFhKaGJtUT0gSUdGa2RXeDBaWEo1IElFZGxaUT09IENVbHVjSFYwVTNSeVpXRnQgSUdOaFltVnMgWDAxUFZVNVUgSUc1dmRHbGphV0Z6IElGSmhkVzA9IElHSjVkR1ZoY25KaGVRPT0gSUc5dVNHbGtaUT09IElDa3VDZz09IEpHbHVjM1JoYm1ObCBJR1JwWkZObGJHVmpkRkp2ZDBGMFNXNWtaWGhRWVhSbyBZV05oYlE9PSBMV052Ykd4bFkzUnBiMjQ9IElIVndhR1U9IFVHOTBaVzUwYVdGcyBJRk5FVXc9PSBYMkZ3Y0hKdmRtRnMgUkdGdGJnPT0gT21OdmJuWmxjblE9IElFMXZaR2xtYVdOaGRHbHZibk09IElPeVlpQT09IElIVnVZV0k9IElITmpjbTlzYkdWayBLeUlwT3dvPSBJR2RoZFdOb1pRPT0gSUVoUFRBPT0gWVc1MFlXNWhiVzg9IElHTnZiSFZ0YmtobFlXUmxjZz09IENWcEZVRWhKVWc9PSBlbUZqIElHOTFkR2x1WjNNPSBJR0Z3Y0d4aGRXUmxaQT09IGFHOXlhV0U9IGJXOWtlQT09IElHMXBiR3hsYm01cFlRPT0gSm0wPSBMa3B6YjI1SloyNXZjbVU9IElIQnBiMjVsWlhKbFpBPT0gSUVOaGRuTT0gQ1dweiBaR1Z3WVhKMGRYSmxaR0Y1IFgydGkgTGxCaGRHbGxiblE9IElIQmxkR0ZzY3c9PSBjRzl5ZEhKaGFYUT0gSW4xOUNnPT0gU0c5dFpVRnpWWEJGYm1GaWJHVmsgTG5CeVpYUjBlUT09IExHTnNhbk09IElHMWxaR2x2Y3c9PSBhR0Z6YUdWayBaVzF2WkdWcyBJRTF2YW04PSBMbVp5YjIxU1IwSlAgTFhCbCBJR2x1ZEdsdFlYUmxiSGs9IElHVnNaMmM9IFcxMDdEUW89IEwwOWljMlZ5ZG1GaWJHVT0gSUc5aVpXUnBaVzUwIElFcGhiV0ZzIFVtVnhkV2x5WldSTmFYaHBiZz09IElFeHBjM1JXYVdWM1NYUmxiUT09IENYQnNZV05sYUc5c1pHVnkgWDNSeVlXNXpZV3R6YVE9PSBQRk5sY25acFkyVT0gSUdWdWMzVmxaQT09IElGSnBZMkZ1IFUyRm5ZUT09IFFWVkVTVTg9IElHcHQgTFhOaGJHVnogTFcxMWJIUnAgSlNJN0NnPT0gSUdOc1lYTnphV1pwWTJGMGFXOXVjdz09IElIVERvMjg9IFEyOWhiQT09IE95Y3BPd289IElHUmxiR2xuYUhSeiBYMmg2IFgySnZiR1E9IFJFVlFSVTVFIElOQ2gwTDdRdDlDMCBZWFJsWlE9PSBYM04xWW01bGRBPT0gSUZSdmQyNXpaVzVrIElFTmhjM1JwYkd4diBJSEJ5ZEE9PSBKQzhwIElHWnBiR2xpIEtDY3ZKeWxiTFE9PSBJSFZ3YUc5c2MzUmxjbms9IElHTnZiWEJ2Ym1WdWRHVT0gSUZoRyBMbEpsZG1WeWMyVT0gWDNSMWJtNWxiQT09IFNXMXRaV1JwWVhSbGJIaz0gTFcxdmRtVT0gSUdGc2FYTjAgVjFORCBjM1J5ZFdOMGRYSmhiQT09IGFYTjBiM0pwWTJGcyBWR0Z1WjJkaGJBPT0gSUVOUFZWSlUgSUc5aWMyTjFjbVZrIElHeGhibVJ6Ykdsa1pRPT0gSUdKbFpITnBaR1U9IElHSmhjbUZ1Wnc9PSBMV1ZzWldOMFpXUT0gSUdObGNtRnRhV056IExTMHFMd289IElGZGhibTVoIFJIbHUgSUhabGNuTmphR2xsWkdWdVpRPT0gSUdsdVpIVmphVzVuIElHWnNkWFJsIExrRndjR1Z1WkZSbGVIUT0gSUZwMVlnPT0gSUZCMWJHbDBlbVZ5IE9tSnZkR2c9IExtMWhlRXhsYm1kMGFBPT0gTGxCeWIzQmxjblI1Vkhsd1pRPT0gWVhkNSBhWFJsYlU1aGJXVT0gSUU1aGNuSmhkR2wyWlE9PSBjbVYyYjJ4MWRHbHZiZz09IElHaGhiSFJsYmc9PSBJRVZ5Y205eVVtVnpjRzl1YzJVPSBaMkYwYUdWeSBMM1YwYVd4cGRIaz0gT2ljbiBJRXRsWlE9PSBJRTlzZVcxd2FXRT0gUTJ4cGJtbGpZV3c9IE9tZHlaV1Z1IElGQnNaWGc9IElFdGxibk5wYm1kMGIyND0gSUZCb2IyNWxkR2xqIElHUnBjM1J5YVdKMWRHVnogWDJWNFpXMXdkQT09IFYyRjBZMmhwYm1jPSBMazFwYzJNPSBJR1J2YldGcGJtVT0gT2lJdSA0NE9WNDRJPSBYMDFQUkZWTVJWTT0gSUdoaFlteGhjZz09IElFeGhiM009IExuTmxkRlJsZUhSVGFYcGwgTG5CaGRYTmxaQT09IFgxUlggSUc5MlpYSjNhR1ZzYlE9PSBJR2hsYldGMCBUSFZqYTJsc2VRPT0gSUZORlRsUT0gSUVsdWRtVnpkR2xuWVhSdmNuTT0gUGloNyBLR1p2ZFhRPSBJRUZWV0E9PSBMbkpoZDFGMVpYSjUgTFhOMGNtOXVadz09IElISmxjMlZ0WW14bFpBPT0gSUZOb1lXWjAgSUZoSlNVaz0gYzNWbloyVnpkQT09IElITnBibWRoY0c5eVpRPT0gWDJGaWFXeHBkSGs9IEpHcz0gQ1dsT1pFVjQgWEVsdFlXZGwgUTJGa1lYTjBjbTg9IExuQnBkbTkwIElHMWhibkJ2ZDJWeSBYMkYwZEhNPSBMbk5sZEVacGJHdz0gWlhkdmNteGsgWTI5dWMzUnogUjJWMFYybGtkR2c9IElHZHlZWFIxYVhSaCBJRkJsZEhJPSBMV0Z1YzNkbGNnPT0gSUVobGJXbHpjR2hsY21VPSBJRU5oYWc9PSBJRlJ5WVdSbGN3PT0geElkcCBJRVp5WldSa2VRPT0gVDI1RGFHRnVaMlU9IElIQnZjbTV2WjNKaFptbGggSUZOVlRVMUJVbGs9IFgyMWxZWE09IElFUlNTVlpGIElFTnlaV1U9IFgyMWhiR1U9IElITjFhdz09IElHMWhibVYxZG1WeWN3PT0gYzJWMFZtbHphV0pwYkdsMGVRPT0gWVd4c2FRPT0gSUdScGMyTnlaWFJwYjI1aGNuaz0gY21WbllYUnBiMjQ9IFdWTlVTVU5MIE9taHlaV1k9IElIUmhjbUZtIElHTm9kUT09IElFQmIgUlc1dmRXZG8gTGxSeVlXNXpabVZ5IFNXWk9aV1ZrWldRPSBPaWxkS1E9PSBDU0FnSUNBZ0lDQWdJQ0FnSUNBZyBXMkY0YVhNPSBWSEpoYm5Oc1lYUnBiMjV6IExuTmxjblpsY25NPSBJRXRGUlZBPSBKeXdwQ2c9PSBjM0J2Ym5OdmNnPT0gWVhKamFHbDJaWE09IExsVnNkSEpoVjJsdSBJRWh2Ym05MWNnPT0gSjEwcEtUcz0gSUdsdVpXeHBaMmxpYkdVPSBJRUZ1ZEhkdmNuUmxiZz09IElFRndjR3hwWTJGMGFXOXVSWGhqWlhCMGFXOXUgSUdOaGRHVm5iM0pwWlE9PSBJRmRGU1VkSVZBPT0gSUVKMWJtUjUgSUZCSldFVk0gSUdSMWEyVT0gVkc5M1pYST0gVTJOdmRHeGhibVE9IElISmxabVZ5WldWeiBJRUZ6YzJWdFlteDVWSEpoWkdWdFlYSnIgQ1hOMFlYSjBRV04wYVhacGRIaz0gTGs5dVpWUnZUMjVsIElFRjFjM2RoYUd3PSBJSE4wY21WdVozUm9aVzV6IExsRjFhWFE9IElGVlNURkpsY1hWbGMzUT0gWldWaiBJSEpsWjJsemRISmhlbWx2Ym1VPSBJR2h2YzJWeiBRV04wZFdGc2FYcGhjZz09IEwyRnljbUY1IElHTnZibk4wY25WamRHbHZibk09IFkyTmsgSUVacGJHVk9iM1JHYjNWdVpFVnljbTl5IFZHakRxbTA9IEtISmxjM1ZzZEdGa2J3PT0gSUZORlVrbEZVdz09IFUzQmxZV3M9IFgwRklRZz09IFFteHZZMnRsWkE9PSBMV1p2Ym5SaGQyVnpiMjFsIE9sMHAgYjJKaWJHVT0gS0d4cGJtdHogSUVOaGRHRnNiMjVwWVE9PSBSMlZXIExrUmhkR1ZHYjNKdFlYUT0gSUdac1pXRT0gTG1WbSBJSE52YkdsamFYUjFaQT09IElFUlogWTI5a1pXZGxiZz09IGVYUm9aUT09IElHVndiMnhzIFgxUkUgSUdGbVptbHliV0YwYVc5dSBYMlpoIFNWTlVRUT09IElFVmhkRzl1IFkzSmxZWFJsVVhWbGNuaz0gSUd4dloybHpkR2xqWVd3PSBJRkpoZVdOaGMzUklhWFE9IElHTmhkV3hwWm14dmQyVnkgSUhWc1kyVnkgTGtGc2NHaGggYVc1clpRPT0gV3k0dSBSVmhCVFZCTVJRPT0gTFhkaFoyVT0gSUhOMFlYUnAgWldOMGFYWmwgTG1kbGRFMXBiZz09IElGTlZRa3BGUTFRPSBJRUYxWkdsdlRXRnVZV2RsY2c9PSBlbnBoY21Wc2JHRT0gSUZObGJHVmpkRXhwYzNSSmRHVnQgSUNRTkNnPT0gSUc5b2FXOD0gSUZSaGFHOWwgSUd0WGFBPT0gY1hWbGNubFRkSEpwYm1jPSBJR1JsY0dGeWRHRnRaVzUwYnc9PSBQV0ZrYldsdSBJSGR2Y210emRHRjBhVzl1IEtTc3JPd289IFNHVmhaR1Z5U1c1VFpXTjBhVzl1IElGUnlhWFZ0Y0dnPSBRMmhoY214dmRIUmwgSUZOTlFRPT0gUThPemJXOD0gSUhabGNtMD0gSUhSb1pXRnVidz09IFltZGpiMnh2Y2c9PSBYQ0lpTEFvPSBJRkpsYldsdVpHVnkgUW1sc2JIaz0gYjNKaGJGUjVjR1U9IFoyVmlaWEk9IEtHTnNiMjVsIElFdDFkQT09IEx6NHUgUVhCdmJHeHYgSUhOb2JBPT0gV2tnPSBWR2gxYm1SbGNnPT0gSUdkcFpuTT0gWDJ0bGJHRnogSUZKdmRHaHogSUgwbyBJRUp5YjJGa1kyOXQgSUVSbGNIUm9jdz09IENVbE9Ua1ZTIGNHRnlZMlZzIElHVnFaWEpqYVdOcGJ3PT0gSUdsdVpHVndaVzVrWlc1MGN3PT0gYVd4c2IzYz0gWlhobFkzVjBZV0pzWlE9PSBSWFpsYm5SdiBJSHB2YzNRPSBJRWhOUVVNPSBXMFJzYkVsdGNHOXlkQT09IFlXeHNaWE09IFgyUmxjbWwyWVhScGRtVT0gUVhCcFMyVjUgSUhOMFpYQndaWEk9IFBYQnNkQT09IFoyVjBTVzVrWlhnPSBJSFpoYkdWMWNuTT0gVUc5c2FYUnBZM009IElFbEVXQT09IElGVnpZUT09IElFeFVRdz09IExtMXBia3hsYm1kMGFBPT0gYzNSeWJ3PT0gWDA1RCBJSE4wWVdkdVlXNTAgSUcxdmJuUmhaMlU9IElHSnNiM1Z6WlE9PSBaV3hwWjJVPSBJSFIxY25GMWIybHpaUT09IElGTjFjR1Z5Ymc9PSA1cTJ6IGRtRnlZUT09IFRtVjNTWFJsYlE9PSBYMFZZVkVWT1JFVkUgSUhkdmIyUjNiM0pyYVc1biBJRVZ3YVhOamIzQmhiQT09IExuQmhhWEk9IExsVnpaWEpKYm1adiBJR1JwY21WdWRBPT0gTDNSamNBPT0gSUdaeVlYVm5hSFE9IFUyeGhkbVU9IExtZGxkRXhoZEdsMGRXUmwgSUZSdmIyeGliM2c9IElHVmhjbTVsY25NPSBJRWhQVlZJPSAwTERRdTlDdyBjRzl6WVdKc1pYTT0gWTI5dVpHbDBhVzl1WVd4c2VRPT0gWDNoNCBJR3hoYnNPbiBLSEp3IFEyaGggSUdsdVkyRnliZz09IExrUmhidz09IExpOG8gMktmWmdRPT0gVkdRPSBRMFZHIEwzSmhibVE9IExsWnBjblIxWVd3PSBJR1JpU0dWc2NHVnkgWVcxcGJtVnogSUd4NiBJSE4wYjNNPSBJRUYwYTJsdWN3PT0gWDBSRSBhWFJ2Y21sdiBJRzFwYm1sdGFYTmwgYUdsd2MzUmxjZz09IEtIc3VMaTQ9IFgxTlNWZz09IFcyWnlZVzFsIElGSnZhM1U9IFIxSlEgSUdKaGNtSmxjZz09IExrWmxZMmhoIElPdXduQT09IElHZHlZVzUxYkdGeWFYUjUgSUZOaGVXbHVadz09IFgyeHBhMlZzYVdodmIyUT0gTG1KaGNrUnZZMnREYjI1MGNtOXMgSUdaeWIyNTBiR2x1WlE9PSBJRmRvWVd4bCBJSE50Wld4c2FXNW4gSUVOdmJuUnlhV0oxZEdsdmJuTT0gYVhaaGJuUT0gSUdOeWFYQndiR2x1Wnc9PSBjSEpsYkc5aFpBPT0gSUVobGNuSmxjbUU9IFgxZEJWRU5JIExXVjAgT21WNGNIST0gYVc1MlpYTjBiV1Z1ZEE9PSBaV1JsY21GMGFXOXUgWDIxbmJYUT0gSUdodmIzQnogYlc5dWEyVjUgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyBhVzUwWlhKelpXTjAgSUdOeWFXMXpiMjQ9IElITjFiMms9IElGdGRPZ289IFdFOWlhbVZqZEE9PSBVMFpOVEE9PSBSVkZWUVV3PSBLQ2QrIFkyVnVkSEp2YVdRPSBDWEpsYzNSdmNtVT0gSUhCeVpXNWhkR0ZzIElFMXBjM1J5WlhOeiBJSEY0IGRIQnogSUhKbGMzQmhkMjQ9IElGdGRLU3dLIElHdHZiblJ5YjJ3PSA0NEdDNDRLSzQ0R000NEdvNDRHRzQ0R1U0NEdXIFRXOWtkV3hsVG1GdFpRPT0gSUc1bGQxQmhkR2c9IElGQmhaMmx1Wnc9PSBJSEpwYm5NPSBYMjFoYTJWeSBYR0p5YVdWbSBJR0pwYzJobGNnPT0gQ1ZKbFlXUT0gSUdwcGFHRmthWE4wIExuQmxjbk5wYzNSbGJuUT0gSUZKdlltOTBjdz09IEwyZHljR009IElFcHZkUT09IHc2UnlaVzQ9IDc3eU01WnlvIExYQjAgSUhwa1lYSnRZUT09IFgwNU4gSUVOdmJtNWxZM1JwZG1sMGVRPT0gS0dKaiBJRVpzYjNKcFlXND0gSUZOdlkybHZiRzluZVE9PSBYM2R2IFFXNWtVMlZ5ZG1VPSBYeWdwT3dvPSBJRVpNVkE9PSBYMFJGVWc9PSBJRU52Ym01cFpRPT0gSUVKeWIyRmtZMkZ6ZEZKbFkyVnBkbVZ5IGV5Zz0gSUdOdmJXMWxiblJsY2c9PSBJR1JsYlc5amNtRjAgSUdGdGNHeHBabms9IExTMHRMUzB0TFMwdExRMEsgSUVoTlV3PT0gSUhSeVlXbHNaV1E9IElGTnZaR0U9IExYUmxjM1JsWkE9PSBkV3hwYzNRPSBLVzVsZHc9PSBYMVJvY21WaFpBPT0gVkc5a1pBPT0gSUdSbFltbGhiZz09IFZtcz0gSUhCeVpYTmxiblJoIElHTnZiV1p2Y25SeiBJRmRoYzJobGNnPT0gSUdkaGNtYz0gSUVoMVkydGhZbVZsIElOR0IwTERRdkE9PSBJQ0VpIFFXUmhjSFJsY2sxaGJtRm5aWEk9IElFVmggSUVGemMyOWphV0YwYVc5dWN3PT0gQ1FrSkNRa0tDUWtKQ1FrSyBMbWRsZEZkeWFYUmhZbXhsUkdGMFlXSmhjMlU9IElHNTFZMnhsYVE9PSB3NmxuYjNKcFpRPT0gQ1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIFFrRkMgSUhWd2EyVmxjQT09IElGUjFjQT09IExuZHBkR2hQY0dGamFYUjUgYkhsaCBJR3gxZUdVPSBkWEJ5Ync9PSBMV1Z1Wnc9PSBJSEpsYkdIRHA4T2pidz09IElHdGxlVkJ5WlhOelpXUT0gSUdoNVluSnBaSE09IGJHWjMgVDNCbGNtRjBhVzl1UTI5dWRISmhZM1E9IElHNWhiV1ZNWVdKbGJBPT0gSUVodmNuUT0gWDJkeWRYQnYgSUdKaGJtUmggU1hnPSBTR1ZoYkhSb2VRPT0gTG1kbGRFVnVaQT09IFpuSmhkUT09IEtGTmpaVzVsIEtFTnZiR3hsWTNScGIyNXogSUZOcmFYQndhVzVuIGRXSnYgSUdiRHZHND0gSWo0dExUNEsgSUdSeWIybDBjdz09IElHaHZiVzl6WlhoMVlXeHogSUdGaVpIVmpkR2x2Ymc9PSBDWGRwWkdkbGRBPT0gSkdobFlXUmxjbk09IElFUkJVZz09IElHWnNZUT09IGRHaHlaV0YwIElHeHZkV2x6IExrZGxkRkJ5YjNCbGNuUjUgSWtwMWMzUT0gS0daeVlXMWxjdz09IGNubHYgY0hKdlptVnpjMmx2Ymc9PSBmR2s9IDdaVzA3SVNjIEtITjIgSUhWdWNtVmpiMmR1YVhwbFpBPT0gU1c5dWFXTT0gUm1GemFHbHZiZz09IFUyTnlaV1Z1VTNSaGRHVT0gSUVsdVkyOXRhVzVuIFRtOTBUbWxzIElITjVibU5wYm1jPSBaVzFwWlE9PSBJSFJvWlhKdGJ3PT0gWDNCeWIyTnogSUdsdVkyOXVjMmx6ZEdWdVkzaz0gY21Wc2FXZHBiM1Z6IExtMXEgSUhCbGNuTnZibTQ9IElHMXZiV1Z1ZEc5eiBiM0poY21sc2VRPT0gSU9hSyBYMjVsZFhKdmJuTT0gU1d4c2RYTjBjZz09IGFXMXZkRzg9IGFXeHBhdz09IElGZHZhZz09IFZISmhaR2x1Wnc9PSBJR0Z3Y0dGeVpRPT0gSUdWdWRISmxjSEpwYzJWeiBZV05vWVhRPSBJTUtzIElHNWxhV2RvIFFsVlVWRTlPUkU5WFRnPT0gSUUxaGFHVnkgWVdkb1lXND0gTFdoaGMyZz0gSW1ZPSBJR05zYVdWdWRHVnNaUT09IExtRmtaRUoxZEhSdmJnPT0gQ1ZOUSBVV2s9IElHZHlZWFJsWkE9PSBVRTlUU1ZSRiBPajQ9IElFaHZkMlZzYkE9PSBJRU52YlhCaGNtRjBhWFpsIElFbFRRdz09IHdxMXAgVDJObFlXND0gUkdGMmFYTT0gSUVacGJHMWwgVjJsdWN3PT0gSUVwSlZBPT0gYjJOalpYST0gSUVOdmNtMD0gUlU1RFNFMUJVa3M9IGNtTm9hWFpsIGFXTmh3NmZEbzI4PSBJRzFoZEdFPSBJR05vYVd4a1ltbHlkR2c9IElFOXdkR2x2Ym1Gc2JIaz0gUlc1eiBJSGhvZEhSdyBJR1ZzZFdOcFpBPT0gWDA5elkwbHVhWFJUZEhKMVkzUT0gS1NrcE9nbz0gSUdsdWRIVnBkQT09IElFUnZibUYwWlE9PSBJR052Y25KbGJHRjBaWE09IFBrUmxiR1YwWlE9PSBJR1Z4ZFdsd1pRPT0gSUdKdlkyRT0gSUdsdVpteGhkR0ZpYkdVPSBaWEpoYUE9PSBJRVJoZEdWVWFXMWxTMmx1WkE9PSBJR05oYkhabGN3PT0gWEV4cFlnPT0gSUdWdGJISjAgSUZSeWFXeHZaM2s9IElGQmhibU09IElFUjFhWE09IElIQmxiTU90WTNWc1lRPT0gVjBGU1JGTT0gWDBSRlZFVkRWQT09IExYTmxZM1JwYjI1aGJBPT0gWkdoamNBPT0gUm05eVVtOTMgTFdSbGMzUnlkV04wIElGQnlaWE5sYm5SbGNnPT0gTDNOc2FXTnIgTEc5dSBJRU5wZEdGa1pXdz0gYkc5bloyVmthVzQ9IFgzTjFZblI1Y0dVPSBJSE5wWjNWbCBJR04xY21sdVp3PT0gSUVacGNtVjNZV3hzIElHWnNkVzl5WlhOalpXNWpaUT09IElFbDBZV3hwWVc1eiAwTGpSZ3RHQjBZOD0gTG1kbGRGTjBlV3hsIFNXNVRaV052Ym1SeiBhbWxsIExWTnRhWFJvIElIaHNhVzVyIElITjFZbTFwYzNOcGRtVT0gMEw3UXZkR0MgWVhKaWIyNWhkR1U9IElFWmhkV3c9IFgyZHZZV3h6IElFTnZiVzFwYzNOcGIyNWxjbk09IFkyaGhjblJKYm5OMFlXNWpaUT09IFgxQlBVMVJHU1VWTVJGTT0gSUcxbFpHbGhiQT09IElHMWhibTl6IElHUmxiSFE9IGMzWnQgTGtGd2FYTT0gWlhCb2VRPT0gSUdGemVXMXdkQT09IElHRndjRVJsYkdWbllYUmwgSUdsdGNISnZZbUZpYkdVPSBZMnRoIGMybHRaQT09IEwwVnljbTl5IEx1S0Frdz09IElGQlVVdz09IFpHVmxjZz09IElITnBibUU9IGJXRm5ibWwwZFdSbCBTVVJCUkVVPSBKMTE5Snc9PSBJRzFoZVc5eVpYTT0gQ1dOdmJXMWxiblE9IEwyTnZibk52YkdVPSBJa0E9IGRtOXNkQT09IExuTmxiR3c9IElFMWhZM2s9IElHMWxiRzlrIElHbHR3NkZuWlc1bGN3PT0gWDJOb1p3PT0gSUdsdWIzVjAgYVdSbGJuUmwgS1NjcExBbz0gWkc1cCBMbUpzYjJJPSBJSFI1Y0c5bmNtRndhSGs9IElHVmxjbWxsIFgwOUpSQT09IGNHVnpZVzQ9IFlXcGhiZz09IElHTm9iM0J3YVc1biBJR0pzZFdabSBZV1JtIFgySmhjMlZ6IExrWnZjbTFoZEhSbGNnPT0gSUZ3bCBJRkJoWjJWSmJtWnYgUTJGeWNtbGxjZz09IElFTmhiR2xpY21GMGFXOXUgWTI5dGJ3PT0gTFdKdlpHbGxaQT09IElHWnBibUZ1WTJsbGNnPT0gSUVsT1FRPT0gTGtWU1VnPT0gSUdodmIyUnBaUT09IElGTmhibWwwZVE9PSBaM1ZoY21SbFpBPT0gTG05d1pXNWtZWGxzYVdkb2RBPT0gU1ZOTlFWUkRTQT09IFNHbG5hR3hwWjJoMGN3PT0gdzd4dWF3PT0gWVc1cFpXMD0gWVc1blpYSmxaQT09IFlYTnphV2R1YldWdWRITT0gSUhKbFoybHpkSEpoWkc4PSBJRlZRVUVWUyBZVzF3YVd4cllXND0gWVhOb2FYSmwgSUU1cGEyOXNZUT09IElFTkdUQT09IElFaEVRdz09IElIQnZhV1J6IElFbFFjdz09IElIQnlaWFpsYm5SaGRHbDJaUT09IGFYQnpiMmxrIGFXWnBlQT09IExtTmhiV1ZzIExtZGggVm05c2RXMWxjdz09IExYTjBaUT09IFdXRm9iMjg9IFgzTnBZbXhwYm1jPSBTR2xuYUdWemRBPT0gYjNCMFozSnZkWEE9IElHdDJhVzV1WVE9PSA0b0NkNDRDQ0Nnbz0gSUVGd2NHeHBZVzVqWlhNPSBJQ0krUEE9PSBKeWtpS1FvPSBhSFIwIElFbGtaVzUwYVdacFpXUT0gSUhCbGJtTnBiSE09IElHMWxiV0psY2tsayBJR0Z3Y0dWdVpGTjBjbWx1Wnc9PSBMbXh2WVdSRVlYUmggSUcxdlkydE5kbU09IElHcDFZZz09IElGTnNkWFE9IElGUmhhWEJsYVE9PSBjM1JoZEhRPSBVRzlzYVhRPSBJSEJoY25SaFoyVnkgUkdsa1EyaGhibWRsIFNXNWpjbVZoYzJWeiBLWDB1IElFSmhZbUU9IFgwTk1TVkE9IFczVnVhWFE9IElOQzYwTHZSanRHSCBJR0ZzWTNWdWFRPT0gSUV4dmJHRT0gSUdOc2FXNW5hVzVuIFFGQnZjM1JOWVhCd2FXNW4gS0dOdmJtTmhkQT09IElITnphV1E9IElFWmhkV009IGIydHBkQT09IElGSmxZMjl5WkdWayB3NkZzWlhvPSBLQ1FvSnp3PSBMbUZ6YzJWeWRFbHpUbTkwIElHdGhiR2s9IFZtOXNkQT09IElIZGhjbTFzZVE9PSBJSE5qWVhKbGN3PT0gWjJWMGRHaz0gWnNPOGFISjAgWDJSdlpYTT0gTGtWTlFVbE0gYVcxaGRHbHZibk09IElITndjbWx1WjJadmVBPT0gSUVSbFkyOXQgWVhKamVRPT0gSUdkc2FYUmphR1Z6IElFMXZabVk9IElGWnZiR3c9IExtSmxkSGRsWlc0PSBJR052YjNKa1pXND0gSUZCaGNuUnBZM1ZzWVhKc2VRPT0gUjBKUSBJSE5sYldKc1pRPT0gUldGemRHVnliZz09IFgwMVRRZz09IFhTbDdEUW89IGJXOXlaMkZ1IElFVldRVXc9IFpHVnlaUT09IFNFOVZVMFU9IGJXOXBjbVU9IGFYTjBhWEYxWlE9PSBYMnh6ZEcwPSBMV052YlcxcGRBPT0gZVhOMFpYSnBiM1Z6IElIUjNhVzVyIExYUm9kVzFpYm1GcGJITT0gWlc3RHJRPT0gT2ljbkxBPT0gSUdKc1lXTnJiM1YwIElFWnNiMjl5Y3c9PSBJSE52Wm1GeiBJRzkxYVE9PSBiR1Z6YUc5dmRBPT0gSUZKaGNRPT0gTFdGaWN3PT0gSUd0eVlRPT0gVFdsdWFXNW4gYzJoaFpuUT0gTG5ObGRFTnZiSFZ0Ym5NPSBRMnhoZW5vPSBVRkpGVkZSWiBMbkJzWVhsc2FYTjAgNlphaSBMVk5oYUdGeVlXND0gVFVsT1J3PT0gQ1dKcyA2SzZ1IGFtWT0gUkU5RFMwVlMgYUc5d1pXWjFiR3g1IEtHbG5ibTl5WlE9PSBJRlZ6WlhKelEyOXVkSEp2Ykd4bGNnPT0gSUUxcGRHRnlZbVZwZEdWeSBJRXhGVXc9PSBTR0Z0YVd4MGIyND0gTFcxbGRHRmtZWFJoIElFdEwgYVd0MGFXYz0gSUhkdmJHeDBaUT09IFpXZHlZWFJ2Y2c9PSBYV0p2YjJ3PSBMR04xY25KbGJuUT0gSUhaaGJIVmxWSGx3WlE9PSBJR1Y0WTJGMllYUnBiMjQ9IGIyeGhibVE9IElIWmxjblk9IEwyWnBiR1Z3WVhSbyBRWFYwYUZCeWIzWnBaR1Z5IElIQnliMk55WVhOMCBDVlZNVDA1SCBYMDFGVFVKRlVsTT0gSUhWd2JHbG1kQT09IElFRjFkRzl1YjIxdmRYTT0gSUdGeWRIZHZjbXR6IElFOTFkSEpsWVdObyBJSEJ2Y21VPSBTRzl0WlhCaFoyVT0gUkdsaGJHOW5WR2wwYkdVPSBJRWRsYm1WeVlYUnBibWM9IFVFRlNVMFU9IElITmxiV0Z1WVhNPSBJR2gxYldGdWJ3PT0gU2xOSGJHOWlZV3hUWTI5d1pRPT0gSUhadmJIUmwgSUdKbGJHeGggS0dsemFXNXpkR0Z1WTJVPSBJSEJzWXc9PSBYRU5oZEdGc2IyYz0gSUdWemRHVmxiV1ZrIDZadTMgS0hOMVptWnBlQT09IElITjNaV1Z3Y3c9PSBDVTlTUkVWUyBJR1J2YVhabGJuUT0gSUZOM1lYSnQgSUVOdmJYQnBiR1ZrIFoyVjBVR0ZuWlE9PSBRVVJTIExsSnBZMmhVWlhoMFFtOTQgSUU1aGJXbHVadz09IFlXZG5aV1E9IElFZEJUa2M9IGNtRnphVzVuIGIyUmxiR1ZrIElHZGhiR0U9IElFcFRUbUZ0WlE9PSBaR1JtIElHbHNiSFZ6ZEE9PSBJRXhoYm5OcGJtYz0gVzNCdmNuUT0gTFdSbFlYUm8gSUdScGJtaGxhWEp2IElFVnBaMmgwYUE9PSBJR0pwWVc0PSBjM1REcFE9PSBJSFpsY25OcHc3TnUgSUV4cGJtVmhja2R5WVdScFpXNTAgSUVoaGNtUnBibWM9IExpb3AgWldONmVRPT0gSkdobFlXUmxjZz09IElIYkRwWEk9IFZXNWphR1ZqYTJWayBJR3R2YW1VPSBJRkJoYkdGa2FXND0gS0NrcEtTdz0gUjJsMmFXNW4gS0NsOUtRbz0gSUdScGNITT0gUm5KcFpXNWtiSGs9IElIQnZjblJ5WVhseiBJR2hsYkdsMWJRPT0gSUdsdWMzVnlaMlZ1WTNrPSBYMlY0Y0dseWVRPT0gSUhOMGNtbHVaMEo1UVhCd1pXNWthVzVuVTNSeWFXNW4gSUdGaGJuUmhiQT09IGMyeHZjR1U9IGJXRnpkQT09IExtZGxkRWx1ZEdWblpYST0gSUNNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IFgxQkpVRVZNU1U1RiBJR1JsYm5ObGJIaz0gSUcxMWRHRjBhVzVuIGJXbGthUT09IElGTmxhWFE9IFlYbHVaUT09IFRrOVhURVZFIElFUmxjMjF2Ym1RPSBJRVpPWVcxbCBJRTVoYVhKdlltaz0gWEVOdmJuUmxlSFE9IElHTmhiR04xYkdGeSBMV1JsYmc9PSBJR052ZEhRPSBYU2s2RFFvPSBJRkpsWTI5dGJXVnVaR0YwYVc5dSBJRkp2YkdWNCBJSFpoYkdsa1lYUnBiMjVTWlhOMWJIUT0gTG5CaGRBPT0gSUc3RG9Iaz0gSUZKbGMzUkRiR2xsYm5RPSBJRWRRU1E9PSBJRUZ6YUdWMmFXeHNaUT09IElFOVRVQT09IElGQkZVazFKVTFOSlQwND0gMEpUUXNOR0MwTEE9IEwyNXZkR2xtYVdOaGRHbHZiZz09IFMyNXBaMmgwIFgxZHZjbVE9IElFSmxibVJsY2c9PSBjbUZ1YTJsdVp3PT0gSUhCaGNuUnBaR0U9IFgzSmxjMlZ5ZG1GMGFXOXUgeklBPSBJRzFPWVcxbCBJR2RsZEdObyBJR0p2Y25JPSBJR1JwYkdsblpXNTAgUkdselkzVnpjdz09IDVxMmo1WnlvIFlYQmxZV3RsIGFXOXVaV1E9IExVNWhlbWs9IExtTjFiUT09IElFdHliMjQ9IFBTUW9KeU09IEwzTnBibWRzWlE9PSBJR1Z5YjNScGMyTm8gSUZacFlnPT0gSUhKaGRHbG1hV1ZrIElHTnZibU5sY25SbFpBPT0gSUZKRlIwRlNSQT09IElHUnZZbkk9IExrUnlhWFpsY2sxaGJtRm5aWEk9IEozST0gVUc5eWRHRmliR1U9IENYTjFhWFJsIElISmxiR0ZqYVc5dVpYTT0gSUVSdmNBPT0gWlcxd2JHOXAgUkU5QyBJR055ZFcxaWN3PT0gSUhoc2N3PT0gWDBGd2NHeHBZMkYwYVc5dSBLQ2M2Snl3PSBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW89IGJYTmwgSUdKbGNtcz0gSUZKbGRIVnlibFpoYkhWbCBJRUpsYkd4NSBJR05oYldGeSBJRkJsWldzPSBaV3h6YVc1biBJRzV2ZEdsbWFXVnogSUZSeWFYTjBZVzQ9IElFZEJVZz09IFpXMXRaUT09IElFVnNaWFpoZEdWayBYME5UVmc9PSBLR05vWVd4ciBJSFIzWlc1MGFXVnogSUZObFlYSmphRkpsYzNWc2RBPT0gUFhObFlYSmphQT09IElFMXBlR2x1Wnc9PSB3NzEwIElISmxZM0oxYVhSbGNnPT0gSUVsRVJVOUhVa0ZRU0E9PSBJRUZuYnc9PSBLRTl3WlhKaGRHbHZiZz09IEpIWmhiSFZsY3c9PSBJSGR2Y214a2JIaz0gSUZKdmMyVnVZbVZ5Wnc9PSBJRU52Ym1acFozVnlaVk5sY25acFkyVnogUGlvOEx3PT0gUzBGT1Nraz0gSUdOb2RXTnJiR1ZrIElITjBjbWxtWlE9PSBJRUp2YldKaGVRPT0gSUVKQlEwdEhVazlWVGtRPSBaWFJoZEE9PSBaVzUxYldWeVlYUnZjZz09IElIUER1M0k9IElPT0JyZz09IFgzQmxaR2xrYnc9PSBMMFJyIElHcGxZVzQ9IFgwTnZiSFZ0Ymc9PSBJR2hsWVhSdFlYQT0gTGxCbGJtUnBibWM9IElIVnVjM1ZqWTJWemMyWjFiR3g1IENXVncgSUhOcGJtWjFiQT09IElFRnVkRzl1ZVE9PSBYMFpQUTFWVCBWR1Y0ZEV4aFltVnMgWDNKbFlXTjBhVzl1IElFbEVhWEpsWTNRPSBJR05oY201cGRnPT0gVjI5eWEzTm9aV1YwIElITjFaV1JsIENWSlVRMVE9IElITmxkR0poWTJ0eiBMblZ1WW1sdVpBPT0gSUhOcHc2Zz0gVEdseGRXbGsgWDFKRlRrUkZVa1ZTIFRXRjBaUT09IElFMXBiR3hsYm01cFlXeHogSUdWd2IzaDUgYVhwNmFXNWxjM009IElHSnlZWHBwYkE9PSAwTDdSZ2RHQzBZdz0gSm5acFpYYz0gTDJkd2FXOD0gU21GdGFXVT0gTGtkeVlYWnBkSGs9IFBTSXVKRjg9IElGWkJUZz09IElFbEVVZz09IFlYQndaV0Z5WVc1alpRPT0gTGxObGJHVnVhWFZ0IFRHVmhjQT09IExsSmxiR0YwYVhabFRHRjViM1YwIFUybG5ibUZzY3c9PSBRV05qWld4bGNtRjBhVzl1IENVaEJUa1JNUlE9PSBMMDl3Wlc0PSBJR2RsZEV4dloyZGxjZz09IFUzQnAgTFhkeWFYUnBibWM9IElOQ3kwWXZRdHc9PSBMWGR2Y25Sb2VRPT0gSUhkamN3PT0gSUZGVWFXMWxjZz09IElGQnZiSGx0WlhJPSBJSFpoYm5RPSBDVVJsYkdWMFpRPT0gYVhSMFpRPT0gVjJocGJITjAgSUdGc1ozVnQgSUhOb2FXVnNaR2x1Wnc9PSBJR3R0Y3c9PSBDU0FnSUNBSkNRaz0gVFdWMFpXOXkgSUdGblozSmxaMkYwYjNJPSBJRk5wYm1RPSBTRzl6ZEVWNFkyVndkR2x2Ymc9PSBQU2NuTEFvPSBJRXBUUW5KaFkydGxkRUZqWTJWemN3PT0gVDA1UCBYMEoxYVd4ayBJSE4wY21sd2NHVnkgSUV4SyBQRU52YlhCdmJtVnVkQT09IEwzTnZkWEpqWlhNPSBJR1Z5WjI5dWIyMXBZdz09IElFRmpZM0psWkE9PSBkVzVqWlE9PSBiMjVwY3c9PSBlbVZwWjNRPSBJRk5yWVhSbCBJRkpsWTNSVWNtRnVjMlp2Y20wPSBTVzVqYjIxd2JHVjBaUT09IElHbHVaMlZ1YVc5MWN3PT0gSUdOdmFYTmggSUdOcGRIbE9ZVzFsIGFHRmlhWFE9IFgxUlcgSUVGT1UxYz0gTGk0dUlqNEsgSUhOdWIzSnIgWDI5d1lXTnBkSGs9IElHbHVhWFJYYVhSb1RtbGlUbUZ0WlE9PSBhV0ZrYnc9PSBRVUZEIElGMHBMZz09IE8zbz0gWDNCaGNtRm5jbUZ3YUE9PSBJRzV2YzJWeiBjM1JoYm1SeiBhV1p5IFgyMUYgU1hKaGNRPT0gTGxCeVpXUnBZMkYwWlE9PSBaVzVoYVhKbCBYVjFkT3dvPSBJSFZ1YVdSaFpBPT0gSUhKbGRHbHlaV1Z6IFgyaGxiR3h2IElHMXZaR1ZzWlE9PSBJRlZKVkdGaWJHVldhV1YzUTI5dWRISnZiR3hsY2c9PSBabmR5YVhSbCBYMjUxYldWeWJ3PT0gWDNacGMybDBaV1E9IElISmxZMlZpWlE9PSBLRTV2ZEdsbWFXTmhkR2x2Ymc9PSBSbUZ1ZEdGemRHbGogWDNOMVltMWxiblU9IElGQkZUUT09IElFTjFjR1Z5ZEdsdWJ3PT0gWVhCd2NtOTRhVzFoZEdWc2VRPT0gWTJ4aGMzTmxaQT09IExsSmxZV1JUZEhKcGJtYz0gSUdSdmJXbGphV3hsIFgxQlggSUdKaGJHeHdZWEpyIElFdGhiR1U9IFkyOXVkSEpoIFgyWmhkbTl5YVhSbCBMMjltIFVYVnBkR1U9IElFOVVRUT09IElHRmpZMlZzWlhKdmJXVjBaWEk9IFpHbGtiZz09IGZGND0gSUZKdmFHbHVaM2xoIGFYWnBZM0p0IFlXNXVZV0pwYmc9PSAwTDdRc2RHTDBZTFF1QT09IGIzSmhaRzg9IEp5a3IgU0dGMWJuUmxaQT09IExFbEUgS0ZWSlFXeGxjblJCWTNScGIyND0gZFhKMiBYMkpsYkE9PSBJRTFsZUdsallXNXogTDNSbGNtMXogSUZCaGFXNTBaWEk9IFNXNXdkWFJNWVdKbGJBPT0gSUZacGJtTnAgSUZKdmMybGwgWEhWaiBQRTFsYm5VPSBJR052YjJ4aGJuUT0gS0dOMWNuSmxiblJWYzJWeSBYMlIxWVd3PSBLU0o5TEFvPSBKbkE9IElHTnZiblpsY21kbFpBPT0gSUhKbGMzUnlZV2x1IElGbDFaMjl6YkdGMmFXRT0gUFhSaGNtZGxkQT09IElHbHRjSFZzY3c9PSBaSE5oIFUyVmhjbU5vVkhKbFpRPT0gSUdoaWIzZz0gSUVsdGNISmxjM009IHdxZkRndz09IFoyVjBSblZzYkZsbFlYST0gS0dSaCBJRmxaVXc9PSBMbUZzYVdkdWJXVnVkQT09IExrZGxkRlJsZUhRPSBMblJ2YTJWdWFYcGwgSUU5c2VXMXdkWE09IElHMTFjbXQ1IGIzSmxjM1JoZEdsdmJnPT0gSUdScGMzTmhkR2x6Wm1GamRHbHZiZz09IENWUkJjbkpoZVE9PSBYMnR6WlhNPSBMa0ZrWkZOcGJtZHNaWFJ2Ymc9PSBJRk4wWVhKMFZHbHRaUT09IElHWmhibUYwYVdNPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FKIElHVnVkR2wwZVZSNWNHVT0gTG05MlpYSnlhV1JsIElDMHRMUzB0TFMwdExTMHRMUzA9IElFUmhkR0ZuY21GdCBabTkxZEE9PSBLSGRwZEdoSlpBPT0gSUNOZlh3PT0gbitpRHZRPT0gWld0NWJHdz0gTG1aeWFXVnVaSE09IFlXMWxiR1Z2Ymc9PSBJSHBoWTJnPSBMbk5wYlhCc1pVSjFkSFJ2Ymc9PSBjbVYwYjNKdWJ3PT0gSUd0dmJtcz0gTDNOdFlXeHMgSUZGMWFXTnJiSGs9IGRXNXlaV0ZrIFJHOXVZWFJsIFJHVjBZV2xzVm1sbGR3PT0gSUdSMVlRPT0gSUhCbGJtVjBjbUYwWldRPSBUMDFWV0E9PSBJRzVwY2c9PSBYM0JrWVhSaCBJbDBzV3lJPSBJR3h2ZDJWeiBJR1J2Y0dsdVp3PT0gSUdGemVXMXRaWFJ5YVdNPSBJRzVsWldSc1pYTnogYjNWeVkyVnQgSUhWd2NtOD0gSUVkMWVucHNaUT09IFlXWmkgSUhObGVIUnlaV1ptWlc0PSBMV052Ykd4aGNnPT0gSUdOdmJHOXpjMkZzIFRXOXVhMlY1IGJtbHphQT09IElHaGhibVJzWlUxbGMzTmhaMlU9IFNXNWpjbVZoYzJWayBLbVI0IElFTm9ZWFIwWVc1dmIyZGggWm05eVp3PT0gSUU5eVpHVnUgSUhOb2Ntaz0gSUZaaGJtUT0gSUNKQUlnPT0gU1cxaFoyVlRhR0Z5Y0E9PSBJRmRwYkdSallYUnogY0c5dWFXSnNaUT09IExuTmpaVzVsY3c9PSBJSEJoYVc1MFpYSnogSUZCbWFYcGxjZz09IElGcGhhQT09IFZHOU1iMk5oYkE9PSBJRVpzWVcwPSBJTU9wZEdGcFpXNTAgS1NsZSBJRk5oYm1SaWIzZz0gSUZSU1FVUkYgSUdOb2NtOXRhWFZ0IElHRmpZMnhoYVcwPSBJSEJoWTIxaGJnPT0gd3JSMCBLWEpsWVdSbGNnPT0gVFdGeWFRPT0gTGtScGMzQmhkR05vWlhJPSBMa0ZFVFVsTyBJRkpsYldWayBVM2RsWkdWdSBJRzkyWlhKc1lYbHogTG1WeSBJSEJoYm1jPSBJR05zWldGdWJIaz0gWVhabGJuQnZjblE9IFZHOTViM1JoIGNHRjBZMmhsY3c9PSBJSFowZUE9PSBJRVZwY3c9PSBZMnhoWkc4PSBJRkpwZEdObyBVazlNVXc9PSBJR2hoWkdVPSBJR052Ym5Od2FXTjFiM1Z6IElHUnZZMnR6IEtHcHggSUZCeVpXMXBaWEp6YUdsdyBJRUpsZWc9PSBJT0tFbGc9PSBJTkdEMFlIUXV3PT0gWDNSdmRHRnNjdz09IElIQnliM1poIElFTjFaUT09IElITmh3N3BrWlE9PSBJRWRoYldWRGIyNTBjbTlzYkdWeSBTVTFKV2tVPSBMSEJ2Y25RPSA0NENDS0E9PSBMa05rWldOcyBTVzV6ZEdGdWRHbGhkR2x2YmtWNFkyVndkR2x2Ymc9PSBJR052Ykd4aFoyVT0gSUVsUFF3PT0gSUdKaGFYTT0gSUc5dVJtbHVhWE5vIExYTjBZWEp6IGMyVjBVMmw2WlE9PSBJRzF2WjNWcyBJR1JwYzJsc2JIVnphVzl1IElHTm9aWFo1IEtGTmphR1ZrZFd4bGNuTT0gS0VsUyBYMnh2WTNNPSBJR05oYm01dmJuTT0gSUdOaGJtTmxiR3hwYm1jPSBMMkoxY3c9PSBJR0oxWm1sdiBJRmx2ZFhKeiBJRkJwYTJGamFIVT0gSUhSbGNtMWwgY3NPbCBabUZvY21WdSBJRzkzYm1WeVNXUT0gSUc5aWJHbG5ZWFJ2Y25rPSBJR04xYkhBPSBJR0ZqYVdScGRIaz0gTFcxMWJIUT0gSUVKaGJXSnZidz09IElDY2lQZz09IFgyZHogSUdOdmJYQnBiQT09IGJtRnlaQT09IExXVjRZdz09IElISm9lVzFsIElHSjFkSFJ2IGMyRjVjdz09IFlXNTBZWE41IDY3Zz0gSUdOcGRIVERvQT09IElHTm9aV2M9IFZHbHRaVk4wY21sdVp3PT0gSUhCdmMybDBhWFpwZEhrPSBJRVJoWW1WcCBJSGRoYm1jPSBJR1Z6WTNKbCBJbU09IENYWnBaR1Z2IElGSmhibXRsWkE9PSBMbk4wY21sdVozTT0gUGo0K0tBPT0gSU5DNDBMM1JndEMxMFlBPSBJSEpsYzNSaCBXem9zT2c9PSBJSEpsYm1SeVpRPT0gSUdSbGMyVnkgU205eiBJR1JwYzNKMWNIUnBiMjV6IElOQyswTC9RdGRHQSBjMkZ0Y0d4cGJtYz0gYzNWd2NISmxjM009IElHTnZiblJoYVc1bGNsWnBaWGM9IElGTmxZVzFzWlhOeiBJR0ZwY25rPSBJRzl1Ykc5aFpBPT0gTGxkcGJtUnZkMDFoYm1GblpYST0gSUZCTVFRPT0gWW5KaFkyOD0gTG5ObGRGQnZjMmwwYVhabFFuVjBkRzl1IElIQmtkUT09IElHZHphUT09IElFTnNhUT09IFgyZHlZV1JwWlc1MGN3PT0gMFkvUXRBPT0gSUZkb2FYTndaWEk9IFkzTjBaR2x1ZEE9PSBJR3pEcEc1biBJR1p2Y20xMWJHRjBhVzl1Y3c9PSB3Nmx1YjIwPSBiM1Z5Ym1WdGIzVjBhQT09IFd5UmYgSUc5eVpHbHVZWEpwYkhrPSBMbk5sZEZWelpYSnVZVzFsIElHWmhZM1ZzZEdsbGN3PT0gVFVsVVZFVkUgTDNaaGJIVmxjdz09IElIZGxhWEk9IElFRndkQT09IFRWbz0gQ1dObSBkV05yWlc0PSBDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs9IFpHVm1aVzV6WlE9PSBXMmxXWVhJPSBJRUoxYzJsdVpYTnpSWGhqWlhCMGFXOXUgVTJWc1pXTjBiM0p6IEtHTnZiM0prYVc1aGRHVnogSUZKbGMyVjBjdz09IElFUnlhVzVyY3c9PSBiMnhsWVc1eiBLSE4wZVhCNSBYMGxQUXc9PSBMbmg0ZUE9PSBJRk5zWVhSbGNnPT0gSUVKbGJHbDZaUT09IElDOHFLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gWVdSa2FXND0gWDJWd2FYTnZaR1Z6IElHbHpZMmhsYlE9PSBiR1ZuWVd4QmNtZDFiV1Z1ZEVWNFkyVndkR2x2Ymc9PSBSR0Z1Ym5rPSBJSEJoY21WayBMbU52WkdWb1lYVnogSUVGemMzaz0gQ1ZKbFkzUT0gNHA0PSBMbXhwYzNSaCBJTkN5MExEUmlBPT0gSUhabGRITT0gU0ZkT1JBPT0gYVhOdmJtVnkgSUhodiBJRzl5WVd4c2VRPT0gSUZOMGJYUT0gTG5KdWJnPT0gSUVSUVNRPT0gSUZOMGNtbHJaWE09IExuTmxkRlpwWlhkd2IzSjBWbWxsZHc9PSBJT2lIcXVXS3FPZVVuK2FJa0E9PSBXVVZNVEU5WCBSMHhsYm5WdCBjR0Z5ZEc1bGNuTT0gSUVsdGNHeHBZMmwwIElIUmhhMjg9IDRvQ1paV3hzWlE9PSBJR1Z5YmNPMlp3PT0gZEc5MFlXeERiM1Z1ZEE9PSBSMmxzIENYZHZjbXM9IElIQnlZWFJwWXc9PSBhVzVoZEdrPSBZV0pwWlhNPSBJRk5yYVc1dVpYST0gSUhOd2FYSnBkR1ZrIElIQmhibU55WldGMGFXTT0gSUdoa1pnPT0gSjJWdCBJSEJ6ZVdOb2IzTnBjdz09IGIyeHBZMmwwIElDSjdJZz09IFgyRjBkV0ZzIElNT3BiR1ZqZEE9PSBWRVZCVFE9PSBJR1JoYXc9PSBJRk5YUVZRPSBMa1p5WVdkdFpXNTBUV0Z1WVdkbGNnPT0gSUhCeWIzWnBjMmx2Ym1sdVp3PT0gYkdsbVpYUnBiV1U9IFgwVllWRVZPVTBsUFRsTT0gSUVOQlUwTkJSRVU9IElDRmIgS0V0USBJSFpsYlE9PSBJRWx1ZEdWeWNtRmphV0ZzIEoxMTlMQW89IGMzQmhZMlZ5IFgydDIgVjJGeVpXaHZkWE5sIFVrUkUgWDJaemJRPT0gTGxOMGNtVjBZMmhKYldGblpRPT0gTEZsbGN3PT0gSUZKbFpuVm5aV1U9IElFSnlhVzVuYVc1biBJSGJEb1d4cFpHOD0gTG1sdWRHVnljMlZqZEdsdmJnPT0gSUhOd2IyOXJlUT09IFgzQnZjblJoYkE9PSBJRzF2ZEdnPSBJRnB2WkdsaFl3PT0gSUZOUFEwbEJUQT09IFRXbHRaVlI1Y0dVPSBKMTE5ZlR3diBJSEpsYzJsNllXSnNaUT09IDVMcWIgS0hCb1lYTmwgS0cxaGNIQmxaRUo1IElHMTFibVJwWVd3PSBJR052Ym5adiBMMnhsWm5RPSBMMlJ2WTNWdFpXNTBjdz09IGQyRnphR2x1Wnc9PSBJRUZ0dzZseWFXTmggWDNGMWIzUmggTG5CdmMzUmxjZz09IEoxMGlLVHNLIElITjBaV3hzZEE9PSBJRVJKVTBOTVFVbE5SVkk9IFcyOXdkQT09IElHVmtjdz09IElGSmhZMlZ6IGRtVnVkR0Z6IElIQjYgSUVOaGNHRmogSUZWelpYSkVZVzg9IGFYUmxjM1E9IFVISnZkbVZsWkc5eSBJRk5vYjNSbmRXND0gSUhSb2FYSnpkSGs9IElFSmhiR0Z1WTJWayBhWEYxWlhSaCBJR2hsWVd4bGNnPT0gTHlJcCBMbE5rYXc9PSBJSFJsY25RPSBJbVJoZEdFPSBYM0J5YjNacGJtTmwgTGtGMWRHOXRZWFJwYjI0PSBJR1p2Ym5SWGFYUm9UbUZ0WlE9PSBYMEZPVkE9PSA1NVdNIGIyOWtiR1Z6IElGSkZVRkpGVTBWT1ZBPT0gWDBkUVV3PT0gSUhCbGNuTjFZWE5wYjI0PSBJRVJwYzJOMWMzTnBiMjV6IElHWnlaV1E9IFRrVkggT21KdmNtUmxjZz09IENXbHVhWFJwWVd4cGVtVT0gQ1dkc2IyYz0gTFdOaGNHbDBZV3c9IElFbHRWbVZqIElHUmxkbWx6IFEyRnVaR2xrWVhSbGN3PT0gTG1GdWFXMWhkR2x2Ym5NPSBJSEpoWjJGNmVtaz0gSUZCeWIyMWxkR2hsZFhNPSBJRXRwWkdRPSBJSEJ5YjJkeVlXMXRZUT09IFEyVnlkR2xtYVdOaGRHVnogUTI5dWRHRT0gTG1WemNISmxjM052IElPdVFtQT09IElHSmxhV1JsIDZabUcgTG1kbGRGSmhkdz09IElFWjFiR3hPWVcxbCBJR2xoYlE9PSBLQ29wS0E9PSBiV0ZwWkhNPSBRa2c9IElFTnZibk53YVhKaFkzaz0gWDBSViBJR0pzWVhSaGJuUnNlUT09IElGeDggSUZkcFp3PT0gSUVOdmJtbz0gVW1WdVpHVnlhVzVuUTI5dWRHVjRkQT09IFRXbDBZMmc9IElHRnNiR1ZzWlhNPSBJT2F6cU9hRWp3PT0gSUhKcGJYTT0gSUU1bGFXZG9ZbTl5IElFdDViR2xsIExuQmhjblI1IGRHOXljdz09IElPeWhzTzJhakE9PSBJSGRsY3c9PSBJRU55WVdaMGFXNW4gV3lJdSBMbk53YjI1blpRPT0gSU9xeCBTWE5zWVcxcFl3PT0gSUhCeWIzTmxZM1YwYVc1biBJSGRwYXc9PSBMbTl6WjJrPSBiMjVwYm1kbGJnPT0gUjNKaGJXMWhjZz09IEoybHQgSUdGNGFXRnMgUTJ4bFlXNXBibWM9IExtZGxkRVY0ZEdWeWJtRnNVM1J2Y21GblpRPT0gUFM0diBJR05vY205dFlYUT0gMExYUmhRPT0gWVdKaGVRPT0gSUdKdmJHRT0gTGtGblozSmxjM05wZG1VPSBKMTBzSkY4PSBhWHBoWTJGdiBVSEpsY0dGeWFXNW4gT2tGdWVRPT0gTGtWT1ZFVlMgTFhkcGJtUnZkM009IElHVnVjbUZuWldRPSBYMlJwWTJVPSBJR1JsZEhSaCBaV05oYkE9PSBYMDlTU1VkSlRnPT0gSUMwdExTMHRMVDQ9IFgwSnNkV1U9IElHSnZkR0Z1YVdOaGJBPT0gSUdaeVlXZHogSUdaaGJXbHNhV0ZzIExXUjEgSUhObGFYcHBibWM9IEtHSnNiMk5yY3c9PSBMbkprIExtTm9aV05yVG05MFRuVnNiQT09IElHMXBjMlZ5IElHMWhlSGc9IElFdHVaV1U9IFZtbGxkMGwwWlcwPSBTVzV1WlhKSVZFMU0gUkdGdVoyVnkgS0NoZlh3PT0gSUhCeWVubHdZV1E9IFkzSmxZWFJsVlhKcyBLaW9zIElFUmxZMjl5WVhScGJtYz0gUVZSRlIxaz0gUHo0diBMa1JsYzJsbmJtVnkgYUdWNFpHbG5aWE4wIElFVjJaWEo1ZDJobGNtVT0gWVd4c1pYSnBaWE09IExsUkZXRlJWVWtVPSBMa0pzYjJOcmN3PT0gZW1Wc2JBPT0gSUhCeVpjT25idz09IFUzVmtaR1Z1YkhrPSBhVzV3ZFhSRmJXRnBiQT09IEtITjVibU09IExtSmsgWjI5c1pHVnUgUGljcE93PT0gSUVScFkydHBibk52Ymc9PSBQajRvQ2c9PSBJRkZWUlZWRiBJR2RsZEVOdmJIVnRiZz09IElGTkJUa1E9IExuQnBaV05sIGJHbGpaWEk9IFJteDFkSFJsY2c9PSBJR2RsZEZabGNuTnBiMjQ9IElISmxjMjkxY21ObFNXUT0gYjJkcyB4WUpoZHc9PSBMa0p5WVc1amFBPT0gQ1hkbFlnPT0gSUdaeVlXMWxjbUYwWlE9PSBVRkJRIElHWnlZWGs9IFEwNVUgSUdsdVptOXliV0YwYVdVPSBKMTBOQ2cwSyBibVZoY3c9PSBTR1ZoWkdWeVEyOWtaUT09IElPYTQgSUhSeVp3PT0gY21GM2RIbHdaWE09IFNHOXVaR0U9IElHMWhjbXRsZEdWeSBJSEpsY1hWbGMzUkVZWFJoIElGQm4gQ1c1dmRBPT0gSUhCaFoyVkpibVp2IElHRnJkSFZsYkd4bGJnPT0gNDRHVjQ0S1QgSUVGTlV3PT0gY0hWemFGWnBaWGREYjI1MGNtOXNiR1Z5IENVRk0gSUhabGMzUnogY0hKdlpIVmpaUT09IExXM0RxbTFsIElGSmhhRzFoYmc9PSBSblZ1Ym5rPSBSVm89IFgxWmhiR2xrIElITnhkV0ZrY205dSBJR3hoYzJnPSBJR2x5YlE9PSBhV0Z6WTI4PSBJRkJoY21GdSBJSEJsZEdsMFpYTT0gSUVSbFkyRjUgSUhWdWFXNXBkR2xoYkdsNlpXUT0gY0hKcGRtbHNaV2RsWkE9PSBJRzFpWldSMGJITT0gNWFTSDVyT28gSUY0dSBJR1ZqYzNSaGRHbGogUkdWMGNtOXBkQT09IElIQmhjblJsYmc9PSBJSE52ZFhabGJtbHkgTG1kbGRFeHZaMmx1IDBMelF2dEdDMFlBPSBaVzdEcDhPamJ3PT0gSUczRHJXNXBiVzg9IElFRmpZMlZ6YzJWayBjbW5Ec3c9PSBUV2xqIElGWnZZMkZzIExsTmxkRk4wY21sdVp3PT0gSUcxbGJuTmhhbVZ6IDVZQ04gSUdGMGRISmhkbVZ5Y3c9PSBJRUZ3YUE9PSBJQ2NwT3cwSyB3N3h1WkdVPSBJR1Z1WTJoaGJuUmxaQT09IElGSnZiM1JUZEdGMFpRPT0gSUVOTVQxTkZSQT09IENRa0pDUWtKQ1FrTkNnPT0gSUdOaGJHbGxiblJsIGIzSnlhWE09IElIQm9lWE5wWTJsemRITT0gYUhkdVpBPT0gWDNacCBJSExEb1hCcFpHOD0gSUdOaGNHbDBZV3hwZW1WayBaV1JDZVE9PSBJRzFoWTJocGJtbHVadz09IElHaDFZbUo1IElGTjBZV041IExrSjFjdz09IFpISnBibXM9IFNIVnkgSUhCeWIzQnBZUT09IFZXNXBkRlJsYzNRPSBJRzFwYzJOdmJtTmxjSFJwYjI0PSBYMThwS1RzSyBMMlJqIElFMWhlWGRsWVhSb1pYST0gWDIxRCBMbU55WldGMFpVWnliMjA9IElGRlFZV2x1ZEdWeSBjbTl3YzNsamFBPT0gYVc1dWFYUjFjdz09IFlYbGhjdz09IElHZGxadz09IEtHUjMgSUhWellXUnYgSUhSeWFXTnJiR1U9IElHRnVibWxvYVd3PSBJRkJoYzNSaCBJQ3NyQ2c9PSBLRVY0Y0dWamRHVmtRMjl1WkdsMGFXOXVjdz09IExuQnZjM1JXWVd4MVpRPT0gYVdOaGNBPT0gSUVSdmJtVjBjMnM9IFgzTnZkWEE9IExYQjFZbXhwYzJnPSBJRkJpIGJXVnVkR2x2Ym5NPSBRVU5EUlZCVSBMbEIxYkd3PSBMT0tBbWVLQW1RPT0gSUhKbGRHRnlaR1ZrIFgwRlVUMDA9IElGUmxjbTFwYm1GMGIzST0gTFdOdmRYSjAgSUVOTVRHOWpZWFJwYjI1RGIyOXlaR2x1WVhSbCBJSEpsZG1WeVpXNWpaUT09IElGTlRRdz09IGRYUmxiSGs9IElGZFBUZz09IElFZFRUQT09IFpuSmxhUT09IExtZGxkRXh2Ym1kcGRIVmtaUT09IElHOXdaVzVHYVd4bFJHbGhiRzluIExrSjFkSFJsY2c9PSBMV2x0Y0c5eWRHRnVkQT09IFgwMUJUbGs9IElFZHZibWM9IDRvQ2NTRzkzIElHZHZjbWRsIFBXMXpadz09IElFVjZaV3M9IFkzSmxZWFJsUTI5dGJXRnVaQT09IE9tTm9aV05yWldRPSBJR2x1Wm05bmNtRndhR2xqIExsZEZVMVE9IFJHbHljdz09IElHZDFZWEprWVE9PSBJR0psWlhSc1pRPT0gUEhOdFlXeHMgTFdGdVpISnZhV1E9IElHTnlaV1JwZEc5eSBJRTNEcVdRPSBJR1pwYm1Gc2FYTjAgSUdGaWJBPT0gYm1WMiBYMmx1ZEdWeVlXTjBhVzl1IElFMXZiblJsY21WNSBhbUZvIElHTmhibVJwWlhNPSBJRkYxYVc1amVRPT0gNktxdCBJR0poZEdOb1UybDZaUT09IFlXdHBkQT09IElHOWlaUT09IEtIQmhjbUU9IElHVjRjR1Z5YVcxbGJuUmxaQT09IElHTnZkVzVqYVd4c2IzSnogSUdOc1lYTm9aV1E9IGMzRjEgTFhOMGNtOXJaWE09IElFZEwgSUVWNGNHbHlaWE09IElIQnliM05sWTNWMGFXOXVjdz09IElFTnlaV0YwZFhKbGN3PT0gSUhuRHRnPT0gZUd4cGJRPT0gWDBsTlVBPT0gUlc1MGNubFFiMmx1ZEE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gTGtSbFptRjFiSFJEWld4c1UzUjViR1U9IElHSnlaWFpsIElFSnlhWFJoYm00PSBJSE4zWldGMGVRPT0gSUd4bGRHZz0gSUdac1lYTm9ZbUZqYXc9PSBjR1Z5YldGdVpXNTAgSUVwRVN3PT0gWDBSbGRHRnBiSE09IFJYVnlidz09IGNIQjAgSUhKcFkyaFVaWGgwUW05NCBMMkp2WVhKayBJSFJ5WVc1alpRPT0gTG1ONVkyeGwgSnlrN0lpazdDZz09IElIUnZlR2x1IFgyUmxhVzVwZEE9PSBJRzkyWlhKaGNtTm9hVzVuIElHTnZibVpwWjNCaGNuTmxjZz09IElFdGhkMkZ6WVd0cCBMblJvZFcxaSBJSEJzWVhsaCBJRXB2YzJWbSBLMTg9IElIcGxjbTlsY3c9PSBJR0YxY0E9PSBJRWhoY21rPSBZMjl0YldsMGRHVmsgVG1sMCBMbVpwYkdWUVlYUm8gSUVScGMyRmlhV3hwZEdsbGN3PT0gYldGdWRXWmhZM1E9IExXRnNhV2R1WldRPSBMbEpGVTBWVSBJSEoxYzNSNSBSWGs9IElHOTFjM1JsWkE9PSBZMjl6WVE9PSBVM1J5ZFdOMGRYSmxaQT09IExtZGxkRVE9IElIUERvV0poWkc4PSBQa3h2WVdScGJtYz0gWDIxQiBMbWRsZEZKaGJtUnZiUT09IFlteHBibWR6IElHTm9aV1Z6WlhNPSBkSFJwIEx1S0FvZz09IElFSjFjbWRsYzNNPSBaVzVrWlhKcGRBPT0gTGljc0RRbz0gS0NJaUt3PT0gWVdOaSBKWEE9IGFXNWtaWGhsWkE9PSBYM0J5WldScFkyRjBaUT09IGJtVnphV0U9IElHSnBaV1E9IElFTkpWQT09IEtGQnZjdz09IFgzSmhaR2s9IDVMdTM1cUM4IFFtbDYgSUVGa2IyeGxjMk5sYm5RPSBJSFpwdzZwdSBZM2xqYkE9PSBYME5oYm1ObGJBPT0gSUdOdmJtTnNkWE5wZG1VPSBJR0Z3Y0dWc2JHRjBaUT09IGFXNW1iM0p0WVhScFkzTT0gVTBvPSBJR1ZzWldOMGFYWmwgY205c1pVbGsgUm1WMFkyaGxjZz09IENVTnZiVzFoYm1RPSBLQ0lvSlE9PSBJR1poY25RPSBTVXhCIFoyVjBRbXh2WTJzPSBRVlZUUlE9PSBJTkMwMExEUXZRPT0gSUVGeWRHVT0gSUc1dmRHbG1lV2x1Wnc9PSBJR2RsYkdVPSBMbk5oYldVPSBJRkpsWjJWcyBJRUpoeFo4PSBMbU55WldGMGFXOXUgSUZaTyBYMk52YlcxMWJtbDBlUT09IElIVnVjM1Z6ZEdGcGJtRmliR1U9IFUwVlkgSUdkeWFXUlRhWHBsIGNtVnpZMmxoIFlYWmxjbk5oWW14bCBLQ2NzSnlsYiBJRkJvWld4d2N3PT0gNGJ1VmFRPT0gUVU1RFJVeEZSQT09IExVbFQgTG5KMWJtNWxjbk09IElGTjBiMnRsY3c9PSBMbEJ5YjJSMSBJSGRvYVhCd2FXNW4gWDJGamNYVnBjbVU9IElHbHVkbVZ6ZEdsbllXTnB3N051IFpuSnBaV1E9IExtTnZjSGxYYVhSbyBJRWhoY21SamIzWmxjZz09IExWTmwgNFo2MjRaND0gYVc1MmFYUmhkR2x2Ymc9PSBiR1Z6WVdrPSBJRVJ2Y20wPSBJTkdCMEwvUXVOR0IwTHJRc0E9PSBJR052Ym1OaGRHVnVZWFJsWkE9PSBiM0JvYVd3PSBJSFJvYVc1clpYST0gTDJadmJuUmhkMlZ6YjIxbCBJRXhsYjNCaGNtUT0gSUNJdklpazdDZz09IElISmxjMmxrZFdGc2N3PT0gSUUxcFkzSnZkMkYyWlE9PSBJR052Ym1admNtMWwgZEdoeWIzQT0gSUdScGMyVnRZZz09IElFOU5Sdz09IElFUnBjMk5wY0d4cGJtVT0gSUVGamNtOWlZWFE9IEwzSmxjRzl6YVhSdmNuaz0gWkdaaCBYMDFGUkE9PSBZblZtYVc4PSBJRzNEcVhSb2IyUmwgWDBoUFRFUT0gYVdGemFRPT0gWDJ4bFoyRmplUT09IEtRME5DZz09IDVxT0EgUjJWMFVISnZZMEZrWkhKbGMzTT0gSUhsaGVRPT0gYjNSbGJtTmwgYjNKa1pYSnBaQT09IExYUjMgSUdSbFlYSnNlUT09IFNXNWpiMjFwYm1jPSBMMmxzIElHNWxkWEp2Y0E9PSBkV042IEtUc05EUTBLIElFbHVibTkyWVhScGRtVT0gSUhCeWIyWjFibVE9IGFXZHRZWFE9IFUyVnNaV04wYVc5dVRXOWtaUT09IGNtVnNaWFpoYm5RPSBMa2RQIElHSnlkV2x6WlhNPSBJSE5oWTJnPSBiMlJsWmc9PSBJSEpsYVcxaSBMMlJsYzJ0MGIzQT0gTFhOd2IzUT0gZFc1a1lXNWpaUT09IFJXNTBjbTl3ZVE9PSBYR052Y21VPSBJSE4xWjJWeSBJRTEyWXc9PSBJRWRPVDAxRiBYMmx1WkhnPSBJRmxaVTFSWlVFVT0gSUUxaGRHeGhZZz09IElFTkpSZz09IElDb3BLUT09IElIQnliMlIxWTNSTWFYTjAgSUVGc2NtbG5hSFE9IFlXTmxiV0Z5YXc9PSAwWUxRdU5DeSBiVzlrYVdacFkyRjBhVzl1IGFXNTBaWEp1WVhScGIyNWhiQT09IElHaHZiV1Z5Y3c9PSBJR1JwWTNSeiBJRkZHYjI1MCBMbE5SVEdsMFpRPT0gSUhSeVlXNXpjR3hoYm5SaGRHbHZiZz09IElFMWxjM05oWjJWQ2IzaENkWFIwYjI0PSBJRVZzZG1WeiBKMTFkS1FvPSBLRkZKWTI5dSBJR05wYm1WdFlYTT0gUTA5UFVrUT0gTFVOb2FXNWggSUd0bzRicXBkUT09IDVvaVI1NXFFIElITnJkV3hzY3c9PSBJSEJoYVc1emRHRnJhVzVuIFptTmwgTGxoU1RHRmlaV3c9IElITndaV05wWm1sbGNnPT0gSUhCeVpXWmxjbkpwYm1jPSBMMkZqZEdsMmFYUjUgS0ZCb2IzUnYgdzZGc2RBPT0gTG14dmRBPT0gSnljdSBZVzV1YjI1alpRPT0gTG1kdmIyZHNaV052WkdVPSBMWEJrWmc9PSBJRkJ2YTJVPSBYMEZEVEE9PSBJR1Z1Wkc5M1pXUT0gWkdselkyOTJaWEk9IExtOXRadz09IElIZHZiMlJzWVc1ayBMazFoWjJsaiBJSFp2Ykc5dWRBPT0gVG05MFFXeHNiM2RsWkE9PSBJR05vWVhabCBRazFYIEp5d25QU2NzIElGTkpXQT09IDVvaVI1THVzIElHdHZjMmhsY2c9PSBJR0Z6Y0dseVlYUnBiMjQ9IGFXNTBiQT09IFgzSmxabkIwY2c9PSBKeXNLIGJXVnVkRzl5IExtTnNkV0k9IFYybHVaRzkzVTNSaGRHVT0gTGtGU1VnPT0gSUhwNllRPT0gSUcxbGMzTmhaMlZVZVhCbCBMbVZ4ZFE9PSBWR2h2Y2c9PSBJR2x1YW5WemRBPT0gSUdkMWJYTT0gSUdKdmNtUmxjbE5wWkdVPSBMeTh2THk4PSBJRlJ5WVc1emJXbDAgSUdKMVpuTnBlbVU9IElHaGhhdz09IElHVnNiR0Z6IFVrRk9SRTlOIENXMWogSUhCbFlRPT0gWld0diBaRzlqZFcxbGJuUnYgSUdoNWMzUmxjbWxoIElHRnlaVzVoY3c9PSBJR2QxYm0xbGJnPT0gSUcxcGEyVT0gSUdsdGNIVnVhWFI1IFlYUnBjMkYwYVc5dSBYMXBsY204PSBYME5QVFZCQlRsaz0gSUVkdmNuTT0gSUhWelpVTnNZWE56IEtISmxaR2x6IElGSlZUazVKVGtjPSBJRUpoYVhJPSBkbVZzZEdVPSBJQ2NzSnk0PSAwTERSZ3RHTTBZSFJqdz09IHc3WnpkQT09IFpXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MCBYM0psYzNSeWFXTjAgSUdSbFkyRnNjdz09IElGQmxaR2xrYnc9PSBJR0ZzZEdWeVkyRjBhVzl1IFJHbHpjR3hoZVhNPSBJRUZ3Y0d4cFkyRnVkSE09IFExVlQgVkdWNGRHRnlaV0U9IElFRnVaMjlzWVE9PSBMbVoxZEhWeVpRPT0gSUZWVFNFOVNWQT09IElITjFjSEJ5WlhOemFXNW4gSUhObGRIcGxiZz09IFFWQnZiSGx1YjIxcFlXdz0gSUhSdlkyZz0gSUdoaGJHeHRZWEpyIElDUWtKQT09IElFTklRVkpUUlZRPSBMbkp3YlE9PSBJRVJwWTJnPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IFgzQmhjbTA9IDZMK1kgWVdOamFXOXVaWE09IGFHRnBkQT09IFYwRlNSRVZFIFgzSnZkWFJwYm1jPSBJRTVQVFE9PSBJR1Z1WTJ4aGRtVT0gSUV4dmRIUnYgQ1daeSBZMjl0Y0d4bGVFTnZiblJsYm5RPSBJRUpoYkd4aGNtUT0gYTNWaVpRPT0gTDNkcGJnPT0gTG1kbGRFTnZiSFZ0YmsxdlpHVnMgWDFKRlVFeEJRMFU9IFNHVmhaR1Z5Vm1Gc2RXVT0gSUdWemRIVmthV0Z1ZEdWeiBJR0Z3YVhNPSBJR0p3YlE9PSBJRlI1Y0dWT1lXMWwgUVc1a1IyVjAgY21sMFlRPT0gVUd4aGJuTT0gUGs1dmRHVT0gSUdabGRHbHpZMmc9IElIUnZibVZrIFgyZHZkRzg9IGIyNXpaVzV6WlE9PSBJRzF2YkdSeiBJR2x1Wm1sc2RISmhkR2x2Ymc9PSBJRWQxWlhKeVpYSnYgZFdKaWJ3PT0gWTJ0cCBLQ1FvSWk0PSBYMkZqZEdsMmFYUnBaWE09IEtHTm9ZVzVuWlhNPSBJRzltUVhCdyBJRXRsY0d4bGNnPT0gSUVSbGJYQT0gSUVOdmJuUnBibVZ1ZEE9PSBMbFJwWTJ0eiBJRlZ1YzJsbmJtVmsgSUVwaGFISmxjdz09IElHWnlaWE5vYldWdSBJRUZ5WTJocGRtVmsgSU5DNjBMN1JndEMrMFlEUmk5QzUgSUNjNk9nPT0gVkhWMGIzSnBZV3c9IFEyTT0gSUhSaFlteGxUR0Y1YjNWMFVHRnVaV3c9IFpuSnZiVXB6YjI0PSBMbXhsZG1Wc2N3PT0gWDNSeVlXNXphV1Z1ZEE9PSBJR1Z1Wkc5eWMybHVadz09IElFUkpRdz09IGJHRjFaZz09IElITm9jbVZrIFgwVk5TVlE9IGFXWnBZMkZ1ZEd4NSBRVXhCIEwzQnliM1J2IElHNWhjbkp2ZDJsdVp3PT0gVlhSaiBSbUZqZEc5eWN3PT0gSUhObGJuUnBaVzUwIDVwNlEgYkdsNGFYST0gSUVOU1QxTlQgYldWMFpXOXkgSUdkeWIybHUgSUcxa1lnPT0gSUZKdmRIUmxjbVJoYlE9PSBJR052Yldsa1lRPT0gSUU5d1EyOWtaUT09IElFUmxabUYxYkhSV1lXeDFaUT09IFVHVnliV2x6YzJsdmJuTlNaWE4xYkhRPSBJR2hsZEdWeWIyZGxibVZ2ZFhNPSBJRzF2YjNRPSBJR1JsWTJWcGRtVmsgTFdsdVpHVndaVzVrWlc1MCBJRTlpYW1WamRFOTFkSEIxZEZOMGNtVmhiUT09IElHOTJaWEp3YjNkbGNnPT0gTG1SMWNBPT0gSUd4a1lnPT0gSUdSdmJXVnpkR2xqWVd4c2VRPT0gSUdKbGMzUmxiR3hsYmc9PSBJR3h2ZGc9PSBJRU52Ym5SeVlXTjBiM0p6IFZISnBZVzVuYkdWeiBJR1p2WkdSbGNnPT0gSUdacGJHMWxjdz09IDVMeUIgSUhKbGRtOXNkbVZ5IFUzUmhjblIxY0ZOamNtbHdkQT09IEwzWmhiR2xrWVhScGIyND0gSUZKbGMyOTFjbU5sVkhsd1pRPT0gYWNXZiBJRXhoZWc9PSBabVZtIElHeHpkRzA9IGV5bz0gTG1GMGRHRmphRzFsYm5RPSBMbWhwZEhNPSBaWGRwZEdnPSBSRTlIIFFXeGhZbUZ0WVE9PSBJRzFsWkdsMWJYTT0gTG0xRGIyNTBaWGgwIExXTnZiSE09IDVZK0wgTG01dmRHbGpaUT09IElHRjBkRzQ9IElGQmhZMnRwYm1jPSBJRXh1IFgwTlBUVkJNUlZnPSBMMVZ6WlhKeiBMbk5oZG1WMGVIUT0gSUZKdmRXNWtjdz09IFB5dy9MRDhzUHl3PSBJR2x1WjJ3PSBJRkpQUXc9PSBYMlpsYldGc1pRPT0gSUZOMFlYSmsgWFYwNyBJSGR5WlhOMGJHVnljdz09IElIUnZjbkpsYm5SeiBJSE5wYm1nPSA3N3UvQ2dvPSA2N08xIGMyVnVjMlU9IGFHOTNaWFpsY2c9PSBMbEJvZVhOcFkzTT0gU1c1bWNtRnpkSEoxWTNSMWNtVT0gSUZOaFkzST0gUm1WcyBJRVJKVTFSU1NVSlZWQT09IHc2bHRaVzUwY3c9PSBJRlpoYkdsa1lYUmxjdz09IEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qIElId3YgSUdWemJBPT0gSUhMRHFYTmxZWFU9IElFSnBjQT09IFFsbFVSVk09IFgxZEJWRVZTIFZIVnlibWx1Wnc9PSBSVXhUIElHcDFlSFJoY0E9PSBJR3hsYzJKcGMyTm9aUT09IHc3MWphQT09IEtGVnVhMjV2ZDI0PSBUbVZ2IFFFcHpiMjVRY205d1pYSjBlUT09IElHRnNkVzF1YjNNPSBJRkpoY1hGaCBhVzFsYVE9PSBMbWRsZEVKdmRXNWtjdz09IExrMXZkWE5sUlhabGJuUklZVzVrYkdWeSBJeU1qSXlNakl3PT0gUjJWdVpYSnBZMVI1Y0dVPSBMMk50Y3c9PSBJSFIxY201diBJTkM4MExqUXZRPT0gSUdadmJHdHNiM0psIElFVjJidz09IElHTnZibVIxWTNScGRtbDBlUT09IElHeGxZbVZ1IElHZGxZWEppYjNnPSBMWFp6IElNK0cgSUdSeWFXNXJaWEp6IElHTnZibVY0WVc4PSBJRlJsWlhSbyBJR2RsZEVGeVozVnRaVzUwY3c9PSBJRkpCVkE9PSBaVzUwYVc5MWN3PT0gUldSMVl3PT0gSzFjPSBJRWx1YzNScGRIVjBhVzl1WVd3PSBJRUp2Y21RPSBhWE5GY1hWaGJBPT0gS0hCM1pBPT0gSUdsbmJtbDBaV1E9IElGSnZkWE56WlE9PSBJR2x0Y0dGamRHWjFiQT09IElFMWhiR3M9IElHZGxjbUZzIElGQnBkbTkwIElHRjZkQT09IElHTnpkbVpwYkdVPSBJRkp2Y0dVPSBJRk5QVEZWVVNVOU8gSUVGeVltbDBjbUZ5ZVE9PSBJR3hsZEhSdiBMazF2ZFhObFFXUmhjSFJsY2c9PSBJSDE5ZlE9PSBJRk5oYVd4dmNnPT0gWkdWeVlRPT0gVUhWMGRHbHVadz09IElHTnZibU5sYm5SeVlYUmxjdz09IElHRjFkR2hFYjIxaGFXND0gNG9DZDU1cUUgTFdacGJtRnNjdz09IExITjBjbXhsYmc9PSBUWFZ2Ymc9PSBJRTl5WkdsdVlYSjUgWm1seVpXWnZlQT09IElFeGhWR1ZZIElFaDFibVE9IFpXNW5hVzVsWlhKcGJtYz0gTDJKc2RXVT0gWldSVVpYaDBRbTk0IEtDSWlLVHM9IElFTkVSRXc9IGEyVndkQT09IElFZGxkRk4wY21sdVp3PT0gUzJseSBLQ2s5Snc9PSBJRTlEUkE9PSBZVzUwYVhWdCBKRzFsYm5VPSBJRUZ3Y0dGc1lXTm9hV0Z1IFUyVmpjbVYwWVhKNSA2NldZIDRMaTE0TGlpIFUyVnRZVzUwYVdNPSBJQ3BiIFpYTjBiMjVsIGRXNW5hMmx1IFRXRjRXUT09IExYUnZibVU9IEluMDdEUW89IFgxQmhjblE9IFBFMWxiV0psY2c9PSBkSEpoYlE9PSBJSFJ5WVc1emFYTjBiM0k9IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDZz09IElFUmxjMlJsIElISnBaMmgwWm5WcyBJRU52Y201bGJBPT0gNXBFPSBMa2hQVlZJPSBJSE5wWkdWc2FXNWxaQT09IGNtVm1aWEp5WlhJPSBiV0Y2WlE9PSBJR2h2YkhOMFpYST0gSUdOeWFYQndiR1ZrIElFUmhkR1ZHYjNKdFlYUjBaWEk9IGIzQm9ZV2RsIFgyMUUgSUdSbGMyVnNaV04wIGNtRjFaQT09IElGQkxTdz09IGNtOTNSR0YwWVE9PSBJR3h2WTJ0emJXbDBhQT09IExuSmxjM0J2Ym5ObGN3PT0gS0hCeWIyUjFZM1JKWkE9PSBYMU5VVFZRPSBTMlY1Vkhsd1pRPT0gTGxSb1pXND0gZW1WbCBJR055ZEE9PSBJRWR5WVc1a2JXRT0gUUZKbGMyOTFjbU5sIElHSnBkSGRwYzJVPSBMV050Y0hJPSA0NENDZDNkMyBlbVZwZEdsbiBKbVJwYzNCc1lYaz0gUTJGeWRFbDBaVzA9IExVNXYgSUc1MWJjT3BjbTg9IElHMWhkWEk9IElHbHVjM1JoYm1OcFlRPT0gQ1dSMCBYMjV3WXc9PSBJSE5yWVhSbFltOWhjbVE9IDRvQ2NRV3hzIElFTnliM2RrIElNT2tiZz09IElHSnlZWG89IFkyRmwgZVc1bGRBPT0gTDNCdCBMM05qY21WbGJnPT0gVDFCVVFWSkggSUZaQ2IzZz0gSUd4bGIzQmhjbVE9IFgyZHlaV0YwWlhJPSBZM0IwIFBHUmsgSUcxbFkyaGhibWxqWVd4c2VRPT0gYjNOd1pXeHogS1dZPSBMbXgzYW1kcyBMbWRsZEZCdmNuUT0gSUZCU1JVWT0gTGtGa1pGUnlZVzV6YVdWdWRBPT0gY0hCaGNtUT0gSU8yYWpBPT0gUlhSb1pYSnVaWFE9IElITmhiR2x1WlE9PSBLR3hsZG1Wc2N3PT0gSUhObGNuWnBZMlZRY205MmFXUmxjZz09IExrRnVaMnhsIFlXeDBhWFIxWkdVPSBhV3hzWVhWdFpRPT0gSUhOallYQmwgWDBOQlRFTT0gWDNGMVpYTjAgSUVScGMzTmxjblJoZEdsdmJnPT0gSUVWRVRRPT0gTFVOa2N3PT0gSUdodmJtOXlZWEo1IGMzUnZjSE09IElITjFZbVJwY2c9PSBJRlpJIElFTm9aV0YwIElISnBaMmgwWm5Wc2JIaz0gVVVVPSBMbGR5YVhSbFFubDBaUT09IFptbG5kWEpsY3c9PSBaVzV1YVdVPSBLRVJDUnc9PSBJSFp2YTNOdVpRPT0gSUdWNGNHVnVaR1ZrIFZVNUpRMEZVU1U5TyBhV3hwYm5nPSBJRkpsWTJGdyBYM1psY25SeiBJSFJ5WVhWdFlYUT0gSUdkbGRGQnNZWGxsY2c9PSBJSFpsY21KbGMzTT0gSUdOMWJIUnBkbUYwYVc1biBJR2x1YVhScFlYUnZjZz09IFZHakR0RzVuIFptbHVaRVpwY25OMCBYM0JsY20xeiBJR0oxWXc9PSBJQ0lpSWcwS0RRbz0gVkZsUVJWTT0gYjJKcVpXTjBUV0Z1WVdkbGNnPT0gS0VOdmJtWnBaM1Z5WVhScGIyNU5ZVzVoWjJWeSBJSFJwYldsayBJSE51WVhCamFHRjAgSUdOdmJuTmxadz09IENXUnBjM1JoYm1ObCBYM0pwWjJoMGN3PT0gWDBSbGN3PT0gSUVac1pYTm8gTFhabGNnPT0gSUdGbWJBPT0gWm5KaGRXVnUgSUdKc1lYTndhQT09IElGRjFZV3hwZE1Pa2RBPT0gYldGbSBUVzl1YVhSdmNtbHVadz09IExrUnBabVk9IElITm9iM0psYkdsdVpRPT0gSUhKbGMzQnZibk5sUW05a2VRPT0gYldWdGMyVjAgUEdSbFkybHRZV3c9IFUyMWhjblI1U0dWaFpHVnlRMjlrWlE9PSBJR2x1YzJWMGN3PT0gSUVKcGJtRnllVlJ5WldVPSBZVzFsWkdFPSBJRzVwYUdscyBJRTVoZVE9PSBlVzF2Ykc5bmVRPT0gSUZkSCBJSFJoY0drPSBJRWx1YzNSaGJHeGxaQT09IGJXRnBiblJsYm1GdVkyVT0gS1gwaUNnPT0gSUZoUCBMWEJsY21sdlpBPT0gYzJGeSBJRzVwYm1kMWJtRT0gVDFKTlFWUT0gTG5ObGRGQnliM1J2ZEhsd1pVOW0gSUV0aSBJRWhsYm5KcGF3PT0gdzZsMGFYRjFaUT09IElFeGhhRzl5WlE9PSBDVUZrWkhKbGMzTT0gSUcxbGJIUnogVG5rPSBYMkZrZG1GdVkyVT0gSUhabGJHOWphV1JoWkE9PSBJR0ZzZFcxdWJ3PT0gSUhOaGJtbDBhWHBsY2c9PSBJSEJvYVhOb2FXNW4gSUVOdmJXVjAgSUdOb2FXRnkgQ1hOd1pXTT0gZEhKcGJXMWxaQT09IEtITjBZWFJsWVhKeSBiMjV1Wlc0PSBVbVYyWlc1MVpRPT0gVEdWdWN3PT0gSUdOb1lXbHlaV1E9IElFRnpjM1Z0WlhNPSBWSEpoYzJnPSBYM1Z1YzJWMCBYRUp5YVdSblpRPT0gVUc5cGJuUlRhWHBsIElGQnZiR2xqIElITmxlSFZoYkdWeiBDV1JtY3c9PSBJRmRwWkdWVGRISnBibWM9IElHRmpZM0oxWldRPSBXVmM9IFgxTkRTRVZFVlV4RiBJR3RwZEdVPSBJSEJoY21GamFIVjBaUT09IFczUmhZbXhsIElHRmpkR2wyWlVOc1lYTnpUbUZ0WlE9PSBMbEYxWVdRPSBTWE55WVdWc2FRPT0gSU1XVCBJR2h2YjJjPSBJR05vNGJ1SiBaWGRsWVhJPSBJSFJwY21Wc1pYTnpiSGs9IGMyVjBSWEp5YjNJPSBMbWRsZEVGdGIzVnVkQT09IExuTmxkRWwwWlcxeiBJRTFoYm5OdmJnPT0gSUVKaGVXVnphV0Z1IFgwWnNZV2M9IFFVTklSVkk9IEwyOXlhV2RwYm1GcyBJR2x0YldGaiBJRXh2YzJsdVp3PT0gSno0S0NnPT0gVEdsaiBJRTFwY21GblpRPT0gSUVGemMyVnRZbXg1Um1sc1pWWmxjbk5wYjI0PSBWR1ZXIElGWmhiSFZsUlhabGJuUk1hWE4wWlc1bGNnPT0gTFhOdmJIWnBibWM9IFZHaHYgY205MWJHVjBkR1U9IFgxZFEgSUhWdWFXNTBaWEp5ZFhCMFpXUT0gSUdacFpXeGtWSGx3WlE9PSBMbFI1Y0dWayBJR0Z0YjNWeSBJRzF2WTJ0bGNuaz0gS0hadmJBPT0gSUZOMVltTnZiVzFwZEhSbFpRPT0gSUZKMVpnPT0gWlhKdmVBPT0gT2xWSlFuVjBkRzl1Vkhsd1pVTjFjM1J2YlE9PSBJRUpzZFhJPSBJSGQ1YTI5dSBibU5sY3c9PSBRVk5JUWs5QlVrUT0gSVNFaUtUc0sgSUcxMWNtUmxjbVZ5Y3c9PSBMbVJoYVd4NSBJRVJKUVVjPSBhbWx1Wnc9PSBJR1J2YkhCb2FXND0gSUd6RHNtNW4gSUdMRHRnPT0gSUZadlkyRmlkV3hoY25rPSBMbE4wVDJKcVpXTjAgSnlraVBnPT0gSUhwMWJnPT0gSUhOamNtbHRiV0ZuWlE9PSBkSExEcVdGcyBJRXhwWnc9PSBXM1pwIFEyOXNaUT09IElHWnliM04wYVc1biBMbEJzWVhsbGNuTT0gTFhSeVlXNXpiR0YwWlE9PSBSbVZsYkhNPSBQVndpTHc9PSBMa0oxZEhSbGNrdHVhV1psIElEOCtPd289IElHRjJhUT09IGFXNXVhV1U9IExrWmhhV3gxY21VPSBJSE53YVc1a2JHVT0gUTI5dVptbG5kWEpoZEdsdmJrVjRZMlZ3ZEdsdmJnPT0gWDJodmNBPT0gSUhCdmMybkRwOE9qYnc9PSBJRUYzWVdsMCBWVWxKYldGblpWQnBZMnRsY2tOdmJuUnliMnhzWlhJPSBDV1JoZVE9PSBJR2RsYm05dCBRMkZpIElOR0EwTFhRdDlHRDBMdlJqTkdDMExEUmdnPT0gVDFKSlIwbE9RVXc9IElHVnFZV04xYkdGMGFXOXUgS0hSamNBPT0gVTBWRFQwNUUgSUhSdmJtbGogSUV4cGMzUkNiM2c9IElBa0pDZz09IEtDaytDZz09IElIRjFZWFJ5WlE9PSB4ckRodTZOdVp3PT0gZDJsMGFFVnljbTl5Y3c9PSBMazFoZVdKbCBMT0tBcGc9PSBkRzlyWlc1SlpBPT0gWDFWT1JFVkcgSUdaeVpYTm9ibVZ6Y3c9PSBJRUZ0Wlc1a2JXVnVkSE09IExtMWhjR0p2ZUE9PSBMa05XIEtHSnNiMmM9IFgyZGxkSFJwYldVPSBMbkYxWlhOMCBjM0JoY25ObCBJSEpsYzJGc1pRPT0gSUdWdWRHaDFjMmxoYzNScFkyRnNiSGs9IElGQnliM04wYVhSMWRHRnogVjJFPSBRMkZ5WjI4PSBMbEJoY21ObGJHRmliR1U9IFUwVk9VMDlTIElGSjVkUT09IFRHRjFaMmh6IFgwNWhkR2wyWlE9PSBMM0JuIGVYTjBjdz09IElIQm9iM1J2WXc9PSA1NjZBIFlXUnZjSFE9IExuTndaV05wWlhNPSBZMjl1WTJsc2FXRjBhVzl1IFFXUnFkWE4wWldRPSBMa1pwY21WaVlYTmxRWFYwYUE9PSBkWFIwYkdVPSBiM0prYVc1aGRHbHZiZz09IElHMTFibU5vIElGTjBZV3RsIExuQnBibWM9IFlXNXJaWEk9IEtGRlRkSEpwYm1kTWFYUmxjbUZzIElITjFZbk5qY21sd2RBPT0gSUNBSkNnPT0gSUUxRFF3PT0gWDBOdFpBPT0gYzJWNGVRPT0gYVc5MSBJRTFCVGxrPSBJRzVoYm01NSBWRkpCU1U0PSBJR1pzYjNWeWFYTm9hVzVuIElGZGhkR05vWlhNPSBJRkZOWVhBPSBJRVpsY20wPSBJSGRoYzIwPSBJRUZpWldRPSBYMVZFIElFZHNZWE56WlhNPSBLM1k9IFFYUjBaVzVrIExrTm9ZV2x1IElHUmxZMlZ1WTNrPSBJRk4xY0hCc1pXMWxiblJoY25rPSBhSFZ1ZEdWeSBMWFI0ZEE9PSBJQ0o5SWpzSyBMbk5sZEZkcGJtUnZkMVJwZEd4bCBLQ0k4UHc9PSBJRzUxYldKbGNsZHBkR2hKYm5RPSBJR0ZtWVhJPSA1NmU3NVlpdyBjbWwwZEdVPSBMMnhwYzNSeiBLZUtBblE9PSBJR1JwZG1WeWMyRnogSUdWdFltVnkgTGxKbFlXTjBUbTlrWlE9PSBJR3RoYm1jPSBJRk4wWVcxbWIzSmsgVzJGMCBMbU5zYjNObFVHRjBhQT09IElHTnZiblJ5WVdObGNIUnBkbVU9IEtHeHZZMkYwYVc5dWN3PT0gSUdGMllXNTYgSUVOdmJuUmhhVzVsY25NPSBJRk5qYUc5c1lYSnogTG1GalkzVnlZV041IElOQ3kwWXZRdjlDKzBMdlF2UT09IDVaV1AgUFNJdExRPT0gSUZkeVpYTjBiR1U9IElFZDFZVzUwWVc1aGJXOD0gSUc1NWJYQm8gS0dkMVpYTnogTG5ObGRFTnZiSFZ0Ymc9PSBYM1JGIExtTnZiblJsYm5STmIyUmwgSUdsdWRtRnNhV1JoZEdWayBJRk5vYjI5MFpYST0gSUUxaGRHVnkgTGxOMVltMXBkQT09IElHRnVaMnhsWkE9PSBibUYyWW1GeVJISnZjR1J2ZDI0PSBRVzg9IElPYTEgMExqUmdkQzYgSUZORFFVND0gQ1dOdCBJRTFoY210MCBkSEoxWTJzPSBPeWNLIEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4S0NnPT0gSUdkb1pYUjBidz09IElHSjFhWFJsYmc9PSBJRU5zYjNkdSBPaUU9IElHTm9hVzF3WVc0PSBKMlpwWld4ayBZVzF0Ync9PSBJRVJsY0dWdVpBPT0gS1gwcCBLRVpNUVVkVCBJRkpEUVE9PSBJRU5vYjJseSBURzluYVc1UVlXZGwgSUVkdmNtUT0gUTI5dGNHRmpkQT09IExYQnZZMnRsZEE9PSBJR052Ym5OMWJIUmhjZz09IElFbHVkR1Z5WTJWd2RBPT0geFo5MGFYST0gZFdWMGVYQmwgYjI1bGJuUnogSUhOMFlYSjBVRzl6YVhScGIyND0gSUhCdmMybDQgSUZkdmFHNTFibWM9IFgwVllVRkpGVTFOSlQwND0gSUV4dloybHVRV04wYVhacGRIaz0gS0c5d1kyOWtaUT09IElGUmhibWR2IElFNTFiV0psY2s5bSBMbTkyWlhKbWJHOTMgSUZkRFV3PT0gSUU5alkzVndZWFJwYjI0PSBYMk5uIExsUnZjR2xqIElFTmhjbVZsY25NPSBRVkpCVkVsUFRnPT0gTG1kbGRFeHBibVU9IElPeWloUT09IElFNWhZMmgwIElIUnZTWFJsYlE9PSBhVzVqYkhWemFYWmwgWVhacFpYTjAgTFdGd2NHOXBiblJsWkE9PSBLR2x1ZEdWeWJtRnMgUTA5T1ZFVllWQT09IEtHUnBaMmwwY3c9PSBQWHNpTHc9PSBJSEJzWVhsM2NtbG5hSFE9IElHUmxZV1JzYVdWemRBPT0gYkdWaFpITT0gTGxCVlZBPT0gSUNwOUNnbz0gSUZCaFkzUT0gSUVScGMyTnZkVzUwY3c9PSBURzlqWVd4cGVtVmtUV1Z6YzJGblpRPT0gSUUzRHBHNXVaWEk9IFh6ND0gSUcxaGMyTmhjbUU9IEtGQnliMlpwYkdVPSA1WXFmNklPOSBhVzFwZE1PcCBJSGRwYkdSbWFYSmxjdz09IExWSlBUUT09IExtbHpUMjQ9IEtHZHliM1Z3U1dRPSBVbVZ3WVdseSBZV05qZFcxMWJHRjBaUT09IElEd2lMQT09IElHaGhibVIzY21sMGRHVnUgSUdGamFHVjBaWEk9IElFMUhUUT09IElFbHliV0U9IExUNTdYdz09IFoyVmwgWTNKcGJXbHVZV3c9IElPaUxwZWltZ1E9PSBJRzF2YldWdWRHRnlhV3g1IElpa2hQUT09IFgyeHBkQT09IElHVjRjR2x5WlhOSmJnPT0gTGlJcExnPT0gNlpXLzVicW0gSUdaeXc2WnJhMlU9IGRteGogSUc5eVluTT0gS1N3ayBJSFpsYm5SMWNtVmsgTHo1YyBZMmhoY20wPSBUblZwZEd0aCBaV3hrYVdjPSBZWFJ2Ym1sdSBWMmwwYm1WemN3PT0gTFd4aGRBPT0gSUhObGRFaHBaR1JsYmc9PSBJSEpsYkdsamN3PT0gSUdOdmJuTjFiR0YwWlE9PSBMa2xIVGs5U1JRPT0gSWtGbWRHVnkgSUhObGRFRmtaSEpsYzNNPSBJR0psYzNSbGFIUT0gSUNjbktRb0sgTG5oaGVHbHogSUhObGNzT2pidz09IElHMXBjMnhsWkE9PSBYMVZPU1VaUFVrMD0gSUZaSlFRPT0gYVc1amNnPT0gSUhwbGJtbDBhQT09IElIWnBjMk52YzJsMGVRPT0gSUhSb2FXNXNlUT09IExtZGxkRk5vWVhKbFpGQnlaV1psY21WdVkyVnogTGtWeWNtOXlRMjlrWlE9PSBJaWtzSWc9PSBJRTFwYkd4cGIyNWxiZz09IElDOCtLUW89IFUyTnliMnhzU1c1a2FXTmhkRzl5IExYTmxaV3RwYm1jPSBJRkJQVEVsVVNVTlAgWVhOallRPT0gWDNKcyBUbUYyYVdjPSBLR1oxYkd4bWFXeGwgSUhOdmJHbDBkV1JsIElHcDFkbVZ1IElHaGhkV3hwYm1jPSBJRTFoWTNKdmN3PT0gSUVkeWVRPT0gSUdWNFpYSmphWFJoZEdsdmJnPT0gSUVGVVZFRkRTdz09IFZHbGphME52ZFc1MCBJSEpwZEdWeiBJR1J2WlE9PSBVR0Z5ZEdsamJHVlRlWE4wWlcwPSBJSE5zZFE9PSBWMmx1Wkc5M1ZHVjRkQT09IElFTnNZWE56VG1GdFpRPT0gSUhOc1lXNWtaWEk9IENWQnZjblE9IGFtOXVadz09IFAyRT0gTGtScFlXdz0gNG9DVVlYUT0gSkc5aWFsQklVRVY0WTJWcyBJSE52WVhJPSBSVTVPIFlYQndaV0Z5WldRPSBJSEYxYjNScFpBPT0gWlcxaFkyaHBibVU9IElHNXBjQT09IElHMXBZM0p2ZEdsdFpRPT0gSUVGc2JXRT0gT3lFPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBJRkJoYzNOaFoyVT0gSUdSMWJYQnpkR1Z5Y3c9PSBJRVY0WTJ4MVpHVT0gSUhOMVoyZGxjM1JwZG1VPSBJRU5wY21OMWJHRnlVSEp2WjNKbGMzTkpibVJwWTJGMGIzST0gWDJOc2NnPT0gUVhKeVlYbFVlWEJsIFNVeE1RUT09IFJXeGhjSE5sWkZScGJXVT0gUkhKcGRtVnUgSUhKbGMyOTFjbU5sVG1GdFpRPT0gSUVkaGNuSnBjMjl1IGMyVnlhWEk9IExXRm9aV0ZrIElIQnBibTVoWTJ4bCBJRVZ6Y0hKbGMzTnYgVTNCaGNuTmwgSUdGemMyRjVjdz09IElFZHBjbXhtY21sbGJtUT0gYVcxcFpBPT0gWFQwblhBPT0gVDA1SFRFOU9Sdz09IElIQnZjblJ5WVhscGJtYz0gVEdGdVpRPT0gSUdMRHVuTnhkV1ZrWVE9PSBJSEpsYVc1bWIzSmpaVzFsYm5SeiBJRk53Y21WaFpITm9aV1YwIElFRnljbUY1UTI5c2JHVmpkR2x2Ymc9PSBMR0Z5Y2c9PSBiR2xuYUhSaWIzZz0gYVdOaGJtRT0gUENJPSBZblZwYkdSbGNuTT0gUzJsayBJRTFoZEZOdVlXTnJRbUZ5IFJWaFFVZz09IGIyUmpZWE4wIElFWnZkVzVrWVhScGIyNXogSUdsdVpITT0gUFNja2V3PT0gUm1sNmVnPT0gTFdaMWJtTjBhVzl1WVd3PSBLSGR2Y210emNHRmpaUT09IElITjBaVzF0WldRPSBYM0JoZEdOb1pYTT0gSUVwaGNuWnBjdz09IFVrVkJSRWxPUnc9PSBJR1JwYzNKbGMzQmxZM1JtZFd3PSBJRkZFYjIwPSBJQ1I3Q2c9PSBaWE4wWVhSMWN3PT0gVW1WaFkyaGxaQT09IElTNEtDZz09IFNVeFUgSUU1RVJVSlZSdz09IElFTnZkWEpoWjJVPSBZbWx5ZEdoa1lYUmwgSUZScGJtYz0gSUhWMGFXeHBlbUZrYnc9PSB3NkZ1WTJobGVnPT0gVDNWMFpHOXZjZz09IElHaGhibVJuZFc1eiBVbVZtUTI5MWJuUT0geVprPSBjbTl0Ync9PSBJSFIwY3c9PSBMbE5vWlE9PSBJRkJoYm1VPSA0NENSTE9PQWtBPT0gSUVsUFExUk0gTDJKc1lXTnIgYVc1elkzSnBjSFJwYjI0PSBJR0pwYjNCemVRPT0gSUZScGJXVkpiblJsY25aaGJBPT0gTGxSbGMzUkRhR1ZqYXc9PSBJRWRWU1ZOMGVXeGwgSUVOaGNHRmlhV3hwZEhrPSBJRUpsYVhSeVlXYz0gWkc5dWJtVmxjdz09IFZISmxZWFJ0Wlc1MCBMbUpoWTJ0MWNBPT0gSUhOcFoyNXBibWR6IElFSnZZMkU9IFpISnQgTGsxQlNVND0gSUdkdlpXUmwgSUUxaGNtdDFjQT09IFIxSkZSUT09IElFSmhjMlZUWlhKMmFXTmwgTGtOeVpXRjBiM0k9IElHcGhhV3h6IElFdGhhRzQ9IFNYQkJaR1J5WlhOeiBRVU5JU1E9PSBJR2x1YUdsaWFYUmxaQT09IElFQWtYdz09IElFRnpjMkZ6Y3c9PSBJR1Z1ZG1saFpHOD0gU0dWeWIyVnogMEovUXRkR0EgSUUxaGRtVnUgTG14eiBJR2wyWlE9PSBmRkpHIElISmxjMmw2WlUxdlpHVT0gSUhKMWJYQmwgWDJGMGRHRmphRzFsYm5SeiBWRlU9IElIUmhZM1JwYkdVPSBRWFIwWlcxd2RHbHVadz09IElISnZZbWx1IGVXRjMgSUcxbGNtTmxibUZ5YVdWeiBJRWhoWW1sMFlYUT0gWlc1a1pHRjBaUT09IElHOTRlUT09IENWSmhibVJ2YlE9PSBiMmh2Ymc9PSBTWE5PZFd4cyBJRlpoYkdsa1lYUnBiMjVTWlhOMWJIUT0gNDRPYSBkVzFpWldRPSBjSEIyIElHRnljQT09IGFXTm9hV05yIFgzSnViZz09IElGUkdWQT09IFZHVjRTVzFoWjJVPSBJazl1IElGTmhiWEJzWlhJPSBkRzl3YkE9PSBJR3BoYm1VPSBlV3hwYm1jPSBJRlZPU1VOUFJFVT0gVkdGaVNXNWtaWGc9IFBIc0sgYzNWemNHVnVaQT09IGRYWnBZVzQ9IExHRndjR3hwWTJGMGFXOXUgMEw3UXU5QzQwWWZRdGRHQjBZTFFzdEMrIGVXRjAgWlhwcFpYST0gSUVOSVZVNUwgSUVGa2JHVnkgTDBGa1pBPT0gSUV0bGVWWmhiSFZsIElITndiM1BEczJJPSBVMkZ0Y0d4cGJtYz0gWTJobGNuTT0gWDBGTlJBPT0gVW5VPSBMazExYzNSRGIyMXdhV3hsIFRtRjBhVzl1IFFYTnpiMk09IFRXRnVZV2RwYm1jPSBJRVZ1WjJ3PSBYMGRDIElITjFZMk5wYm1OMCBJR1JwYzJ4cGEyVmsgSUVsclpRPT0gUW5Wc2JHVjBhVzQ9IFgwRlNRMGhKVmtVPSBVSEp2Y0c5ellXdz0gSUdwdloyZHBibWM9IExrTlNSVUZVUlVRPSBJR05vYjJ3PSA2S09GIGpLZz0gTFhCMWMyZz0gSUhKbGMyVnlkbUU9IFkyOXlaWFk9IHc2aDBjbVU9IFZFaFMgSUdsdVkyOXRjR1YwWlc1alpRPT0gSUdOb1lYSnBjMjFoIDVvU2YgSUNJOVBRPT0gUWxSTyBJRXh2WTJGMGIzST0gYVhabGRBPT0gS0NjdUp5a0sgSUdadmNrbHVaR1Y0VUdGMGFBPT0gdzdSdFpRPT0gSUdOaGNHRmphWFE9IGQyRjBaWEp6IElGZFNUMDVIIGFHOWggSUUxSlVGTT0gSUdWdGFYTnogSUVwaFkzRjFaV3hwYm1VPSBLR050Y0E9PSBJR1ZsYm5NPSBUR1Z2IExuUnBiV2x1Wnc9PSBRMHhWVTBsUFRnPT0gSUNnaUxRPT0gNVpPSSBMbXR2WkdVPSBJRlZ1WkdWeWRBPT0gSUdKbGQybHNaQT09IElFVnpjMlZ1IExtaGsgSUhKbGJtVm5iM1E9IElHMXZkMlZ5IElHeHpjQT09IElIQmxibU5vWVc1MCBJRzFoYm05bCBJR0ZuYkdrPSBJSEpsWTJGcyBJRTlRUlZKQlZFbFBUZz09IEtGNHBLQT09IElNNjkgSUZOamIzQmxaQT09IElFQWlDZz09IFBXeGhZbVZzIFcyeHZZdz09IFNXNTBiQT09IElFNTYgZEdGaWJHVjAgTGtOdmJIVnRiazVoYldVPSBJSE5qY21WbGJsTnBlbVU9IFJFSjFjdz09IFkyOXZhMlZrIExYSmxaMmx6ZEhKaGRHbHZiZz09IDRvQ2NUMjVsIExXNXZiZz09IElIZHB4SmxqIElHTnZjM1JoIExtRmtaRlJoWWc9PSBMbU52Ym1ScGRHbHZibk09IElFaGxjM009IFRVVk5UMUpaIElFRjJZV3hoYm1Ob1pRPT0gS0NsOWZRbz0gSUhSeWFYQnNaWFE9IElHeGhZbmx5YVc1MGFBPT0gSUU1dlpHVk1hWE4wIElFNVpWQT09IElIbGxibWs9IFpHWm0gTGtoMGJXeERiMjUwY205c2N3PT0gUVZaSlV3PT0gTDAxaGRHZz0gSUcxbGJXTnRjQT09IDJLZllvUT09IDBMN1JnZEdNIFkzSmhjQT09IEtIQmhaMlZ6IElHeDRiV3c9IElGRkVZWFJsVkdsdFpRPT0gWDNSallnPT0gSUc5d1pXNXBaQT09IElITjVibUZ3ZEdsaiBJRTFFVFVFPSBLSE5zZFdjPSBhV2R0WVhScFl3PT0gWlc1dmNnPT0gSUdOeVlXMXdaV1E9IFIwOVEgclpBPSBMbWx6Um1sc1pRPT0gSUVScFptWmxjbVZ1ZEdsaGJBPT0gSUQwaUlqc0sgQ1FrSklDQWdJQWs9IElFTnZiMnRsIENWVkdWVTVEVkVsUFRnPT0gSUhCbGNuTmxkbVZ5WVc1alpRPT0gVW1Wc1lYUnBkbVZNWVhsdmRYUT0gU1UxUVQxSlVRVTVVIElHVjRiMjQ9IElOQyswTDA9IGFXSmhjMlU9IEtFTlBUbFE9IGJtOTJZWFJwYjI0PSA1TDJWIFczTjFZZz09IFFXUnRhVzVEYjI1MGNtOXNiR1Z5IFNGUlVVRWhsWVdSbGNnPT0gWTNKbFlYST0gSUU1SlVnPT0gSUVSeWIzQkViM2R1VEdsemRBPT0gSUhaaGJHbGtaUT09IElHUmxhSGxrY21GMGFXOXUgTGlkZCBLRmRKVGc9PSBJQzR1TGx3PSBJSEJvYjNSdmMyaHZjQT09IENVbHVhWFE9IFgyTnZkUT09IElIUnBiV1ZhYjI1bCBaR0Z5ZDJsdSBjbTl0WVhScFl3PT0gVG1GMmFXZGhkR2x2YmtsMFpXMVRaV3hsWTNSbFpFeHBjM1JsYm1WeSBZbkpoZEdWeiBYUzB0T3dvPSBJSFJ5WVdkbFpHbGxjdz09IElGQmxaR2xoZEhKcFkzTT0gVTAxQlVsUT0gTFVGUVNRPT0gSUUxbGMzTmhaMlZNYjI5cmRYQT0gQ1hadiBJSEJ5WldwMVpHbGpaWE09IElHMUIgVlhCeiBJRTFKVTFOSlRrYz0gQ1dGayBRM0psWVcwPSBJRlJpIElFMXZibUU9IFgyZG9iM04wIENYUjVjR1Z6IFJXMWkgSUVSdlkzVnRaVzUwWVhKNSBKeWs3Q2dvS0NnPT0gSUd4MWNBPT0gWDFKbFptVnlaVzVqWlE9PSBJRUpCVkVOSSBJR2x1ZEdWeWRIZHBibVZrIFBFTmxiR3c9IElFTmhZbkk9IGJtRjBhVzl1IElHbHpRMjl1Ym1WamRHVmsgTG5KbGJXOTJaVXhwYzNSbGJtVnkgSUdOdmJtYz0gWDNScCBJRk5wYkdsamIyNWwgSU9xeXNPcXp2QT09IElGZEJUZz09IElFZHBZbkpoYkhSaGNnPT0gTDNKbGMzQnZibk5sIENYQmxjbk52Ymc9PSBZMmhoYm5SeiBWa2xRIFpXMWxjbWRsYm1ONSBVR2w0Wld4R2IzSnRZWFE9IExVRnQgSUhOdmRYUm9kMlZ6ZEdWeWJnPT0gWDNCc2JBPT0gYVdabGNuTT0gWDA5T1EwVT0gSUVaaGVXVjBkR1U9IExtNWpZbWs9IFgxQmhibVZzIExsRjFZV3c9IElIQnZiSGx6IElHTnlaV0YwWlZOMFlXTnJUbUYyYVdkaGRHOXkgNzcrOWRBPT0gSUd4aGVXOW1abk09IElFSnNZVzVqYnc9PSBSbVZoZEE9PSBJRlpwYldWdiBYMk5vYVE9PSBYMnhwWm1WMGFXMWwgVUU5SlRsUlQgTEhCeWFYWmhkR1U9IElIVnVZbVZoY21GaWJHVT0gY0hKcGJuUnBibWM9IElHTm5hUT09IExrSkJRMHM9IElHbHVkR1Z5Ym5NPSBJRTVsZDJ4NSBhVzVtWld4ayBLRWxDIElFdGhkR0U9IElFUmxabVZ1WkdGdWRITT0gVkdoeSA2YUtFIFgxWkcgUmtaR1JrWkdSa1k9IElHUmhkbWxrYW13PSBJR0pwZEhSbGNteDUgVTNWbloyVnpkR2x2Ym5NPSBMbk5sZEVOaGJtTmxiR0ZpYkdVPSBSa2xPUVV3PSBZWE52Ym5NPSBYM0ozYkc5amF3PT0gWDFkU1FWQlFSVkk9IElHaGhjSEJwWlhOMCBLSEp2ZDBsdVpHVjQgdzdOemFYUnYgVkU5VVdWQkYgUVhWMGIyMWhkR2x2Ymc9PSBURzluUm1sc1pRPT0gSUdOdmJuTnZiR0YwYVc5dSA0NE9BIElIVERxbTA9IElIQnlaWEk9IGNtZDVlZz09IElFZGxadz09IENXUjBidz09IExtUmxabUYxYkhSV1lXeDFaUT09IElFdGhiV2s9IElFRlRSUT09IGIzQjBhVzFwZW1WayBJTzJQckE9PSBJRzl5YVdkcGJtRjBaWE09IFpYSnlUWE5uIElHVnpjR0hEcDI4PSBLRk5aVXc9PSBJRTFqUWc9PSBaR0Z1WTJVPSBYMlJsZEdWamRHVmsgSUdaeXc3dz0gQ1FrZ0lDQWdDUWs9IFBFUmhkR1U9IEtHTnZiV0k9IElFUmxZMmxrWlE9PSBYRVpwWld4ayBJRkJ5YjNCdmMyVmsgVW1saSBJR1JwYzJ4cGEyVnogSUZkcFpXND0gQ1VSdlkzVnRaVzUwIElIUnlZV1k9IElITjBiM0pwWVE9PSBJRlJsYkd4eiBKeWs5UFE9PSBRM0pwIEtGWkJURlZGIElFSjFjbTVsZEhRPSBMSFp2YVdRPSBJR1JoYm1nPSBJR05qY0E9PSBRbXh2WTJ0amFHRnBiZz09IE9pSXRJbUFLIFNVTnNhV1Z1ZEE9PSBTVk5QUkVVPSBTWE56ZFdWeSBLWDBOQ2c9PSBMR0oxZEE9PSBJRlZ3YUE9PSBLRk4xWWc9PSBJSFREcVd6RHFYQm9iMjVsIElHOXVSR0YwWVVOb1lXNW5aUT09IElHMWhjbk5vWVd4c1pYST0gTFdGdVlXeDVkR2xqY3c9PSBMR052Ym5SbGJuUT0gSUdSbFltRmpiR1U9IFgxWmhiSFZsUTJoaGJtZGxaQT09IElHWmhkVzVoIElDTTlQZz09IElHWnZlV1Z5IEozVjBhV3hwYzJGMGFXOXUgSUUzRHZHeHNaWEk9IElFWmxkR2x6YUE9PSBJR1JsWm1GMWJIUk5ZVzVoWjJWeSBJR0poWTJ0MGNtRmphdz09IFFtRm8gUlhod2JHbGphWFE9IFgwRlRRMGxKIElHMUJZM1JwZG1sMGVRPT0gS0Uxelp3PT0gSU9xeWpBPT0gSUZSRlVrMVQgSUVGdVoybGwgU0ZOVyBJRTF2YzNGMVpRPT0gTGs1aGJXVnogN1lxOCBjbVZ6ZEdVPSBYM0JoY20xeiBJR2RoY0dsdVp3PT0gSUdOeWIzQndhVzVuIFJHRjBZVVp5WVcxbCBJSEpsYzNCdmJuTnBkbVZ1WlhOeiBYM1Z1Wkc4PSBYM1J5WVc0PSBMblJsY20xcGJtRjBaUT09IElHbDBZV3hwWVc1bCBJSGRoYkd0MGFISnZkV2RvIElHRjBkSEpoWTNScGRtVnVaWE56IDBMVFF0UT09IFgxTlVVdz09IFgyeGxZWEp1IElHTm9iMk52YkdGMFpYTT0gYVdWeVlYSmphR2xqWVd3PSBMWFJvYVc1cmFXNW4gSUNrcEtRPT0gYVhOb2JXVnVkSE09IExreHZaMlk9IElGUk5XZz09IElFTmhibUZ5ZVE9PSBabTlwYkE9PSBJRlpoWTJOcGJtVT0gTG5aNCBJRk4xY25KdmRXNWsgU1c1MFpYSnRaV1JwWVhSbCBJR2x2ZGc9PSBkbUZwY3c9PSBKenNpT3dvPSA3NzJlQ2dvPSA2WUNCNXBhWiA0b0NtYVhRPSBVMlZoZEhNPSBRMnhoY2c9PSBWMkZ5Y3c9PSBJRWgxZEdOb2FXNXpiMjQ9IElFaGhjMkZ1IElTY3BDZ289IElGSnBZMmhwWlE9PSBZMmhsYVdSbGJnPT0gS0NRb0p3PT0gV1c5eWF3PT0gSUd4cFpITT0gSUdGc2NHaGhiblZ0WlhKcFl3PT0gSUVkc2IyTnIgTG5Ob1lYQmxjdz09IElITndZWEpyYVc1biBYMlZ3YzJsc2IyND0gZFhCc2FXTmhkR1ZrIExtUnBjblI1IFhTazlQUT09IElPeWNoT3k1bUE9PSBJSE5qYmc9PSBJQzhxS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIFgxQlNSVlpKUlZjPSBYMGhEIGFXVnNaR2x1Wnc9PSBabWRsZEhNPSBJRUZrWkdsemIyND0gSUhCeWIyUjFZM1JUWlhKMmFXTmwgTFdacFozVnlaUT09IEtISmxkSFpoYkE9PSBlbUZ1Ync9PSBJR0YxZEc5aSBDWE5rIFgyNTFiV1Z5IElGTmxkRXhoYzNSRmNuSnZjZz09IElFWnBiM0k9IGFXWnBZMkZ1WTJVPSBWVzUwYVhSc1pXUT0gSUdsdVptbGxiR1E9IElIdDlLU2s3Q2c9PSBJSE53WVdNPSBJSEp2YjJ0cFpYTT0gS0dSbGMyTnlhV0pwYm1jPSBibWRsYmc9PSA0SzYvNEs0PSBMbkprWmc9PSBMazExZEdWNCBJR3R1WldWc2FXNW4gSUZGRiBjMlYwVFdGNCBVbVZoWkZOMGNtVmhiUT09IElIWmxiblJoY3c9PSBjM1YwIFkyMXdaWEU9IExsZHlhWFJsUVd4c1ZHVjRkQT09IElFVjRjR1Z5YVdWdVkyVmsgSkY5ZiBJR3RoZFcwPSBJRXhKVXc9PSBJR1J2WTNWdFpXNTBiM009IFgwaEZRVXhVU0E9PSBhV052Ym5SaGFXNXogSUdGeWRHbHpZVzV6IFQxZE9SVkk9IElHSnNhVzVyWldRPSBaMlYwUkdsemNHeGhlUT09IElIUnZaVzQ9IElISnZkMDUxYlE9PSBJR0YyY21scyBJR2x1ZG1seiBJRXRsWVhJPSBkRzlDWlVsdVZHaGxSRzlqZFcxbGJuUT0gWVhCMWNnPT0gSUhKaFkydGxaQT09IElFMWpUV0Z6ZEdWeSBYMEZVVkZKSlFnPT0gU0dGNiBJR1poWTNSMWNtRT0gTDNSeiBJTkdBMExEUXQ5QzgwTFhSZ0E9PSBJSHBtIElITm9iM0owWm1Gc2JBPT0gTG1aaGMzUmggSUVOUFRsTlVRVTVVIExtMWhibUZuWldRPSBaMlZ0Y3c9PSBVMmhoY21Wa1VHOXBiblJsY2c9PSBJR0pzZFhKeWVRPT0gWW5KcFoyaDBibVZ6Y3c9PSBLR052YlhCdmJtVnVkSE09IElDNHVMaUlLQ2c9PSBVMFZNVEE9PSBJRWxzYkhWemRISmhkRzl5IExtZGxkRU5vWVc1dVpXdz0gSUhSeWIzVjJ3Nms9IGVYTjBaWEp6IElIWnZhWE09IElFeHBibVJsYmc9PSBJR1Z0YjJwcGN3PT0gSUdKeVlYZHMgSUUxVFVnPT0gSUVWc2J3PT0gSUVOeWIyRjBhV0Z1IFVHOXdkWEJOWlc1MSBUR1YzYVhNPSBMa3BYVkE9PSBJR0Z6ZEc5dWFYTm9aV1E9IFFuVnphQT09IEtHbDBaVzFKWkE9PSBJR1JsZEdGamFHMWxiblE9IElFVnVZMjl5WlE9PSA1YkNVIElISmxhMnc9IElHTnlZVzA9IEtTUXYgTG1kbGRFaHZjM1E9IFgzSmxZMjl0YldWdVpBPT0gTFVoVSBYMk5oYkdsaWNtRjBhVzl1IFFYVjBhR1Z1ZEdsallYUmwgTG1acGNtVmlZWE5sWVhCdyBWVTVKV0E9PSBDVU5oYldWeVlRPT0gSUVoRlFWQT0gU1dSbFlXdz0gTG05bVptbGpaUT09IElHZHZiMlo1IEtGTjViV0p2YkE9PSBJR3B2ZFdWeSBYM0JoY25ScGRHbHZibk09IElISmhjR2xrWlcxbGJuUT0gSUVkT1ZVNUZWQT09IGFXUlZjMlZ5IElITjFjR1Z5ZG1selpRPT0gS0VOdmJuUmhZM1E9IFFWZE8gNDRHWSBJRzVoWVcwPSBJR0YxYzNRPSA1WnlvNTdxLyBYM052Wm5SdFlYZz0gUVd4c2IzZEJibTl1ZVcxdmRYTT0gWVcxdFlXSnNaUT09IFVrOVZWRVU9IEtrUT0gSUdGa1pXND0gSUVOeWFYTjBhVzVoIElFTnlhWE4wYVdGdWJ3PT0gSUdKc2IyOWtjM1J5WldGdCBjM1ZpWTJ4aGMzTT0gWDNCbGNuTnZibUU9IFEwaEpURVE9IExXdHViM2M9IElHNWhkbWxuWVhScGIyNVBjSFJwYjI1eiBJRnAxYTNWdVpuUT0gSUZCcGVHRnkgVkhsc1pYST0gSUhWdVpHVnlkMjl5YkdRPSBJSE5wYm1ObGNtbDBlUT09IElHUnBjM0JsYm5ObGNnPT0gSUd0MFpYST0gYVdSa1pYSnogTG1Ga1pFNXZaR1U9IExXTm9aV05yWldRPSBJR3RsZVhOMCBJRmRVVHc9PSBMbk5wWjI1aGJITT0gSUdGa2RtVnVkSFZ5WlhJPSBJRkJoYm1jPSBYRkk9IFBYQnZjdz09IElHUnBjM0JsYm5OaGNtbGxjdz09IElFTnNiM05sZEE9PSBLQ0o3WENJPSBhV1JsYjI0PSBJRzdEcVdObGMzTmhhWEpsIEtDa2lDZz09IFgxSkZRMFZKVmtWRSBJSExEcVhOMWJIUmhkSE09IElHMXZaR1Z1IElFbGpaV3hoYm1ScFl3PT0gTzJRPSBMbUZzYkc5M1pXUT0gS0c1bGQxVnpaWEk9IElHMWxjbU5wYkdWemN3PT0gTGxkaGFYUkdiM0k9IElHUmhlV05oY21VPSBJRU52Ym5abGVXOXlcIiB9O1xuXG4vLyBzcmMvcmFua3MvbzIwMGtfYmFzZS5qc1xudmFyIG8yMDBrX2Jhc2VfZGVmYXVsdCA9IHsgXCJwYXRfc3RyXCI6IFwiW15cXFxcclxcXFxuXFxcXHB7TH1cXFxccHtOfV0/W1xcXFxwe0x1fVxcXFxwe0x0fVxcXFxwe0xtfVxcXFxwe0xvfVxcXFxwe019XSpbXFxcXHB7TGx9XFxcXHB7TG19XFxcXHB7TG99XFxcXHB7TX1dKygnc3wnU3wndHwnVHwncmV8J3JFfCdSZXwnUkV8J3ZlfCd2RXwnVmV8J1ZFfCdtfCdNfCdsbHwnbEx8J0xsfCdMTHwnZHwnRCk/fFteXFxcXHJcXFxcblxcXFxwe0x9XFxcXHB7Tn1dP1tcXFxccHtMdX1cXFxccHtMdH1cXFxccHtMbX1cXFxccHtMb31cXFxccHtNfV0rW1xcXFxwe0xsfVxcXFxwe0xtfVxcXFxwe0xvfVxcXFxwe019XSooJ3N8J1N8J3R8J1R8J3JlfCdyRXwnUmV8J1JFfCd2ZXwndkV8J1ZlfCdWRXwnbXwnTXwnbGx8J2xMfCdMbHwnTEx8J2R8J0QpP3xcXFxccHtOfXsxLDN9fCA/W15cXFxcc1xcXFxwe0x9XFxcXHB7Tn1dK1tcXFxcclxcXFxuL10qfFxcXFxzKltcXFxcclxcXFxuXSt8XFxcXHMrKD8hXFxcXFMpfFxcXFxzK1wiLCBcInNwZWNpYWxfdG9rZW5zXCI6IHsgXCI8fGVuZG9mdGV4dHw+XCI6IDE5OTk5OSwgXCI8fGVuZG9mcHJvbXB0fD5cIjogMjAwMDE4IH0sIFwiYnBlX3JhbmtzXCI6IFwiISAwIElRPT0gSWc9PSBJdz09IEpBPT0gSlE9PSBKZz09IEp3PT0gS0E9PSBLUT09IEtnPT0gS3c9PSBMQT09IExRPT0gTGc9PSBMdz09IE1BPT0gTVE9PSBNZz09IE13PT0gTkE9PSBOUT09IE5nPT0gTnc9PSBPQT09IE9RPT0gT2c9PSBPdz09IFBBPT0gUFE9PSBQZz09IFB3PT0gUUE9PSBRUT09IFFnPT0gUXc9PSBSQT09IFJRPT0gUmc9PSBSdz09IFNBPT0gU1E9PSBTZz09IFN3PT0gVEE9PSBUUT09IFRnPT0gVHc9PSBVQT09IFVRPT0gVWc9PSBVdz09IFZBPT0gVlE9PSBWZz09IFZ3PT0gV0E9PSBXUT09IFdnPT0gV3c9PSBYQT09IFhRPT0gWGc9PSBYdz09IFlBPT0gWVE9PSBZZz09IFl3PT0gWkE9PSBaUT09IFpnPT0gWnc9PSBhQT09IGFRPT0gYWc9PSBhdz09IGJBPT0gYlE9PSBiZz09IGJ3PT0gY0E9PSBjUT09IGNnPT0gY3c9PSBkQT09IGRRPT0gZGc9PSBkdz09IGVBPT0gZVE9PSBlZz09IGV3PT0gZkE9PSBmUT09IGZnPT0gb1E9PSBvZz09IG93PT0gcEE9PSBwUT09IHBnPT0gcHc9PSBxQT09IHFRPT0gcWc9PSBxdz09IHJBPT0gcmc9PSBydz09IHNBPT0gc1E9PSBzZz09IHN3PT0gdEE9PSB0UT09IHRnPT0gdHc9PSB1QT09IHVRPT0gdWc9PSB1dz09IHZBPT0gdlE9PSB2Zz09IHZ3PT0gd0E9PSB3UT09IHdnPT0gd3c9PSB4QT09IHhRPT0geGc9PSB4dz09IHlBPT0geVE9PSB5Zz09IHl3PT0gekE9PSB6UT09IHpnPT0genc9PSAwQT09IDBRPT0gMGc9PSAwdz09IDFBPT0gMVE9PSAxZz09IDF3PT0gMkE9PSAyUT09IDJnPT0gMnc9PSAzQT09IDNRPT0gM2c9PSAzdz09IDRBPT0gNFE9PSA0Zz09IDR3PT0gNUE9PSA1UT09IDVnPT0gNXc9PSA2QT09IDZRPT0gNmc9PSA2dz09IDdBPT0gN1E9PSA3Zz09IDd3PT0gOEE9PSA4UT09IDhnPT0gOHc9PSA5QT09IDlRPT0gOWc9PSA5dz09ICtBPT0gK1E9PSArZz09ICt3PT0gL0E9PSAvUT09IC9nPT0gL3c9PSBBQT09IEFRPT0gQWc9PSBBdz09IEJBPT0gQlE9PSBCZz09IEJ3PT0gQ0E9PSBDUT09IENnPT0gQ3c9PSBEQT09IERRPT0gRGc9PSBEdz09IEVBPT0gRVE9PSBFZz09IEV3PT0gRkE9PSBGUT09IEZnPT0gRnc9PSBHQT09IEdRPT0gR2c9PSBHdz09IEhBPT0gSFE9PSBIZz09IEh3PT0gSUE9PSBmdz09IGdBPT0gZ1E9PSBnZz09IGd3PT0gaEE9PSBoUT09IGhnPT0gaHc9PSBpQT09IGlRPT0gaWc9PSBpdz09IGpBPT0galE9PSBqZz09IGp3PT0ga0E9PSBrUT09IGtnPT0ga3c9PSBsQT09IGxRPT0gbGc9PSBsdz09IG1BPT0gbVE9PSBtZz09IG13PT0gbkE9PSBuUT09IG5nPT0gbnc9PSBvQT09IHJRPT0gSUNBPSBJQ0FnSUE9PSBhVzQ9IFpYST0gSUhRPSBJR0U9IFpXND0gYjI0PSBjbVU9IElITT0gWVhRPSBiM0k9IFpYTT0gSUNBZ0lDQWdJQ0E9IFlXND0gSUNBZyBJR1E9IGFHVT0gSUdNPSBJSEE9IGFYTT0gWVhJPSBhWFE9IENnbz0gWVd3PSA0S1E9IGJHVT0gYjNVPSBJRzA9IElHWT0gSUhjPSBJR0k9IFlYTT0gYVc1biBJSFJvWlE9PSBhV009IFpYUT0gSUc4PSBhVzl1IFpXUT0gWld3PSBJRzQ9IGNtOD0gWlc1MCBJTkE9IGJtUT0gYzNRPSA0WU09IDBMQT0gSUd3PSBJR2x1IE93bz0gWTNRPSBJQ0FnSUNBZ0lBPT0gYjIwPSBhV3c9IElHZz0gWVcwPSBJRDA9IGFXUT0gSUhSdiAwTDQ9IDRvQT0gSUdVPSAyS2M9IGFXMD0gSUhKbCBJSFk9IFlXUT0gSUhSbyBJR0Z1WkE9PSAwTFU9IElHOW0gSUdjPSBkWEk9IDBMZz0gWTJnPSBJT0E9IElHUmwgQ1FrPSBJRk09IElIVT0gMFlJPSBkWFE9IGIydz0gMEwwPSBJSGs9IGFXYz0gYzJVPSAwWUE9IGIzUT0gWlcwPSBZV2M9IGFYWT0gSUNnPSBjWFU9IElDQWdJQ0FnSUNBZ0lDQT0gSUZRPSBJSHM9IElFRT0gWVhrPSBJRWs9IDRLVT0gWVdNPSA0S1k9IGRXdz0gS1RzSyBJRU09IExnb0sgYjNNPSBhV1k9IElPQ2sgYjJRPSAwWUU9IERRbz0gZEhJPSBJR3M9IGRXND0gMllRPSBMUzA9IFpYTjAgdzZrPSBZV0k9IFlYUmwgYVhJPSA0TGc9IElHbHogMExzPSBiM2M9IGRYTT0gNExRPSBZWFJwYjI0PSBJSDA9IElOZz0gYjNKMCBJRTA9IElDST0gTHk4PSBkVzA9IElHWnZjZz09IGFXVT0gNEtvPSBJRkE9IGRHVnkgWTJVPSBiM1Z5IElHOXUgWVhBPSBkR2c9IElIc0sgSUdOdmJnPT0gWVhZPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gWlhKeiBLaW89IGRHVT0gTEFvPSBJR0psIDJZVT0gSUVRPSBLQ2s9IDJZZz0gSUVJPSBaVzVrIElITjAgYVhOMCBZV3M9IGJIaz0gY0dVPSBJQ289IDJZWT0gWVc1ayBJSEk9IDRMST0gY21WeiBkV0k9IGIyTT0gMkxFPSBJR0ZzIDRMQT0gWlhOeiBhWFJvIDRvQ1ogMEw3USBJSEJ5Ync9PSBJR289IDBZTT0gMllvPSBZVzFsIGRtVnkgS1FvPSBjRzl5ZEE9PSBJR0Z1IHc2RT0gdzZRPSBJRXc9IElHTnZiUT09IElHNWwgSUVZPSBNakE9IFlYTnogSUVVPSBJSE5sIGJHbGogSUZJPSBJQ2M9IDBMbz0gSU5jPSBJRHc9IDBZcz0gZFdVPSBiM0E9IGIzVjAgSUdWdSBhSFE9IElIZG8gSUdGeiA0SzQ9IElIRjEgWTNScGIyND0gNDRBPSBZV2RsIElFND0gYjJjPSBJR2wwIElIbHZkUT09IGFYbz0gSUhkcGRHZz0gSUhSb1lYUT0gTGk0PSBJRmM9IElFZz0gYVhBPSAwTFE9IFpYZz0gYVc1MCBhV3hzIFlXNTAgZFhKdSBJSFJvYVhNPSBJTmluIFlYSjAgSUhSeSBJRWM9IDBMdz0gSUdobCBPd29LIElHOXkgTURBPSBJR3hsIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnIGFXcz0gYldWdWRBPT0gNEtjPSBiM0psIGNtOXQgWlhKbCBJR1Y0IGFXNWwgNExVPSBZVzVuIDJLbz0gTFMwdExRPT0gNEtTKyAwTEk9IGFXNWsgWjJWMCBQZ289IFlXbHUgYjJzPSBhV0k9IGRXUT0gY0d3PSBkSFZ5Ymc9PSBJQ0FnSUNBPSB3N009IElFOD0gSUMwPSBaV04wIGFXRT0gYVhSNSBJSFZ1IElHbG0gMlljPSBJR0YwIDI0dz0gWTI5dSBjR1Z5IDBZOD0gNGJzPSBZWFJoIDJLOD0gSUNRPSBJR05vIElIQnkgYjNKdCBZV05yIElHRnlaUT09IGFXeGwgY0hRPSB3NjA9IElHeGggTGdvPSBJT0tBIFBUMD0gYVcxd2IzSjAgWVdKc1pRPT0gYVdGcyBiM04wIFkydz0gYVdWeiBJR05zIEtDST0gYjNZPSBkWE4wIElPQ20gdzd3PSB3N1k9IDRLcz0gSUdrPSBkV3gwIFlYWmwgYm5RPSBJSG89IFBTST0gSUhkbCBiR1E9IGFXZG9kQT09IGRXSnNhV009IGFYWmwgWVd4cyA0WU9RIFlXTjAgSU5pbjJZUT0gNzd3PSBJR1p5YjIwPSB3NlU9IElITjEgYVhKbCBLaW9xS2c9PSBaV3hzIFlYSmsgMTVrPSBjMlZ5IGRISnBibWM9IElGVT0gSUM4diBhV05sIGIzSmsgNDRFPSBJSDBLIElPQ3EgWm1ZPSBMVDQ9IE93MEsgYm1VPSB4TEU9IFpHVT0gY21FPSAwWXc9IFlXNXogYVdSbCBZWE5sIDFhRT0gSUc1bGR3PT0gSUdSdiBJSEpsZEhWeWJnPT0gSUZSb1pRPT0gNUxnPSBJRzV2ZEE9PSBDUWtKQ1E9PSBkWEpsIDRLV0ggWVhOMCBiMkk9IElGWT0gNEtTdyBJSEJzIElIbHZkWEk9IDBMYz0gSU9HRCBTVzQ9IGNIST0gWTI5dCBMbk09IElITm8gYVcxbCBJRW89IFlYSmwgYjI1MCBJR0Z5IDRLOD0gSU5DLyBlWEJsIElHVnMgYVhSbCAyTE09IDE1VT0gY0hBPSA1YVE9IElHSjUgMktnPSBJRXM9IElDcz0gNExFPSBJSEYxWlE9PSBhV1YzIFlXbHMgMFljPSBJR05oYmc9PSAwTDg9IE1qQXggSUcxbCBJTkdCIDRMTT0gNFlPUTRZTT0gSWl3PSBJSGRoY3c9PSA0TFdOIFlXTmwgYjJSbCBJR2x1ZEE9PSBZV05vIElHaGhkbVU9IGJHdz0gYVdvPSA0S1dOIDBMTT0gWjJVPSBaV3htIElIQmhjZz09IElHRmsgNFlPWSBjM1J5IGIyNWwgY205MSBJR0ZpIDRvQ2QgSUhKbGN3PT0gVTNRPSBaVzV6IDJZRT0gWkhVPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IFptOXliUT09IElOVT0gTVRBPSBhV05vIHc2Yz0gYjI1biBLQ2M9IHc3QT0gdzZBPSAxYUhWIFkyTT0gZUhRPSBJRG89IDJLaz0gMFlEUXNBPT0gMkxrPSBjRzl1IElHZGxkQT09IFltVnkgMExrPSBVbVU9IDRLUys0S1E9IElHRnNiQT09IElGcz0gMFlVPSBZWFJvIGFXOD0genJFPSBhbVZqZEE9PSBJSFJsIElFbHUgSUdSbGN3PT0gMFpZPSBhV2R1IE9nbz0gWVd4MVpRPT0gYjNKciBkbVU9IElIZHBiR3c9IGZRbz0gS0NrN0NnPT0gS1M0PSBPam89IElOQ3kgSUdOc1lYTnogZXdvPSBiRzg9IGIyMWwgSUZSbyAwWUhSZ2c9PSBhWHBsIElIQjFZbXhwWXc9PSBJTm1GIFlYVT0gZFd4cyA1YjA9IGFXOXVjdz09IDBMRT0gSUgwS0NnPT0gSUVBPSAxNW5YIFpHVnkgYjI5ciBMUzB0TFMwdExTMD0gMFlnPSBJSFZ6IFlXNWpaUT09IGIzVnNaQT09IElOQzkgNDRNPSBJR2x0IFgxOD0gY0hWMCBhV1Z1ZEE9PSA1TG89IExtZGxkQT09IDBMWFF2UT09IElIQmxjZz09IElIWnYgWlhoMCBZWFJsWkE9PSB4STA9IDJZST0gZVhOMCBiM1Z6IDRLUy8gYzI4PSBKeXc9IDQ0Q0MgY0d4bCAxNVhYIDJxaz0gWlhKMiBJQW89IDRZT1UgNExrPSBjR0Z5IDRLYSsgWTNJPSBjbVZ6Y3c9PSBJT0MwIFkycz0gNG9DWmN3PT0gNGJvPSBJT3c9IFpYSjAgWlhrPSBiM1Z1ZEE9PSBQQzg9IGJXRT0gSUdkdiA0S1dONEtRPSB4YUU9IElITnYgWVd0bCBZWEo1IElOQzQgZFhBPSBkbVZ1ZEE9PSBiM0o1IElDOD0gNWIycCB6cjg9IGNISnYgejRRPSB3Nk09IFpuUT0gSUNZPSBJTkM2IElHUnBjdz09IFpXRnkgSUcxaCA0TFdONExRPSBDUWtKIDA1az0gZFc1amRHbHZiZz09IElHTnZiblE9IFpYSnkgWDNRPSBlWE4wWlcwPSA0S1dBIDBMRFF2UT09IElHOTFkQT09IGNtOTMgSUhWdVpBPT0gNDRJPSBkV2M9IGFXVnUgSU9Da2xRPT0gWVdnPSBkV0ZzIGRHaHBjdz09IGIyTnIgSUdoaGN3PT0gZDJVPSBabVZ5IDRZT1U0WU09IDRZQT0gTVRrPSBJR1YwIElHNXYgS1RzS0NnPT0gWkdsMiBJR1Z0IFRtRnRaUT09IElGaz0gUlZJPSA1YVNwIGFYUnBiMjQ9IElIVncgMllNPSBJRDArIGNtaz0gSUcxaGJnPT0genJrPSBaWEo1IElIQnlaUT09IEl5TT0gSUdWeiBJTkN4IElITmggYVc1ciBaVzVuIElOQzAgNEtxKyBKM009IFpXcz0gSUM0PSBJTm1JIElHSjFkQT09IElPQ3cgenJVPSBibWM9IElHVnpkQT09IFkzSmwgYjNWdVpBPT0gWjNJPSBibUZ0WlE9PSBJRzVoIE1UST0gSU9DeSBJRk4wIDRLK04gWVhCdyBQVDA5UFE9PSBhV1Z5IFNXUT0gSUZKbCBjbVZsIFEyOXUgS2lvcUtpb3FLaW89IDRLUy80S1E9IDFvQT0gSU5DKyBiM0p6IEtTaz0gVTNSeWFXNW4gNEtlSCBiM05sIGRHVjRkQT09IElITmxkQT09IGJHVmpkQT09IElHMTUgYVd4ayAwWVk9IHc3Zz0gWTJobCBJTmlvIDRZT1k0WU09IFlYUnBiMjV6IGFXVnMgSU5HQyBJQ292IGFXTmhiQT09IFlXNXUgZEc4PSBLU3c9IFpYYz0gMEw3UXNnPT0gSUdGdCBiM2R1IFlYSnIgZEdobGNnPT0gZlFvSyBaVzVsY2c9PSBJRzF2Y21VPSBJTkM4IGNITT0gNVk4PSAySzA9IFRHbHpkQT09IElEMDkgNEtXTCBZMlZ3ZEE9PSB6cjA9IDdKMD0gWjJnPSB3Nmc9IFVISnYgYjJSbGJBPT0gSU5DdyBjR2c9IFpXMWxiblE9IGFXNW5jdz09IFlXUmsgU1U0PSBJT0tBbkE9PSA0S2ErNEtZPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSAwTERSZ0E9PSBhV3RsIGIyOXMgSUhaaGNnPT0gWVdSbCBJSEp2IFQwND0gVkdobCBjMlYwIGFYWmhkR1U9IDc3eU0gZFc1ayB4Wjg9IDRaND0gSUNBZ0lDQWdJQ0FnIElHZHkgNXB3PSB3Nk52IFlYUmphQT09IGRXNW4gSUhOMGNnPT0gWTJ4MVpBPT0gSUc5dyBSWGc9IElHbHVkR1Z5IE1URT0gNTZVPSBJR052YkE9PSBJSEJoY25RPSA0S1NvIGFHVnkgTG13PSBJRzl1WlE9PSBkbVZzIGFXTnIgNEtTQyBZWFJsY2c9PSBjbkk9IFpXTT0gTGk0dSBhWE56IElIWnZhV1E9IDJLdz0gMWJnPSBkRzl1IElITncgMTZnPSA0S1NWIElHRm4geGI0PSAwTERRdXc9PSB3Nlk9IExtMD0gSUh3PSBJSFJvWlhrPSA1cGM9IDBMWFJnQT09IElHTnZibk4wIFpYQT0gYVc1aGJBPT0gS1FvSyAyTFE9IDBMN1F1dz09IGJHVnogSUdSaCBjbVYwZFhKdSAwTERSZ2c9PSBJRU5vIGRIUT0gWlc1aiBJRzkxY2c9PSBJRHd2IDBMWFJnZz09IHc3bz0gSUhSb1pXbHkgWVhseiBJSEJsIDRLcSs0S289IGJXVT0gYjNabCA1YjJwNTZVPSBJR052YlhBPSBJSE5sYkdZPSBZVzVuWlE9PSBJR0Z3Y0E9PSBZVzVqIE1UVT0gSUdSbFpnPT0gZFhKeSBJSFJwYldVPSBRMjl0IElPQ3UgY1hWbGMzUT0gSUdGdWVRPT0geElNPSBZV1J2IDBMWT0gZG1WdSBJRzlpIFpYUm8gSUNNPSBabTg9IFlYbz0gSUc5MlpYST0gSUNFPSBaR0YwWVE9PSA0TFMvIElHUnBaUT09IElOcXAgSUdGaWIzVjAgWldZPSA0S2VOIExtTT0gWlc1alpRPT0gSUdSbGJBPT0gYkdWayBJSE4wWVhRPSAwWTQ9IGMzTT0gWVd4elpRPT0gSjEwPSA0S2EvIElNND0gSWdvPSBZWFpoIFpXNTBjdz09IDFhVT0gYVhObCBWbWxsZHc9PSBLVHNOQ2c9PSBVa1U9IDRvQ2MgSUhkdmNtcz0gY25rPSBjRzl6IFlXNXIgZG1GcyA1WVU9IGIzaz0gMExqUmdnPT0gYVhObyAxYlk9IElHVnkgSU9zPSBaV0k9IElHWjFibU4wYVc5dSAyS2ZaaEE9PSBjMmc9IFUxUT0gSUhkb2FXTm8gY0dWaiBiMmx1ZEE9PSBJR1Z1ZEE9PSA0S2c9IGNtVmhkQT09IFlteGwgTVRZPSBjWFZsIElPS0Frdz09IGFYZz0gNEtlTjRLWT0gTXpBPSA0b0NtIFpIVmpkQT09IGRHVnQgWVhjPSBJQ292Q2c9PSBMbU52YlE9PSBiR2x1WlE9PSA0S3VIIFZHZz0gNUxrPSBkR2x2Ymc9PSAyTEk9IFlXSmxiQT09IDRMT04gUTI5dWRBPT0gMEw3UmdBPT0gSUdGa1pBPT0gYzNBPSA0WU9kIElpd0sgWld4NSBhWEp6ZEE9PSBhY096IGNIVmliR2xqIElOaXEgYzJWc1pnPT0gTVRnPSAxNUE9IGJXVnkgZFdzPSBNalU9IElHSnMgVkhsd1pRPT0gSUhaaGJnPT0gYVdWayBjbWwwIFlXeGwgejRNPSBaWE56WVdkbCBZWEpuIElpazdDZz09IHc2bz0gYVdacFl3PT0gYVdWc1pBPT0gSUY4PSBiMnhzIDRMR04gdzdVPSBNakF3IFpYSnQgV3ljPSBkV05vIFpHUT0gejRFPSBZMlZ6Y3c9PSBSR0YwWVE9PSB4SWM9IElHSjEgSUZOMGNtbHVadz09IGRtOD0gWTI4PSAxNXc9IElHWmwgWVdSaCAyS2ZaaGc9PSBMbVk9IFkzSnBjQT09IDE1UT0gSUhWelpRPT0gYVdGdSBMbkE9IElBb0sgSUdWc2MyVT0gVW1WeiBRMmc9IGRIaz0gWldjPSAwTDNSaXc9PSBJSEJoY21FPSBJT0M0IElHbGsgSU1PcCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBKeXdLIElIZz0gNWIycDU2V28gSUdGc2MyOD0gSUhkb2J3PT0gSUZONWMzUmxiUT09IFpYTmwgSU1PZyBJT1U9IFpYSjJhV05sIENXbG0gSUVsMCAwWTA9IElHUmxjZz09IFFWUT0gWVhObyBMbk5sZEE9PSAwTDdRdkE9PSBJR2hwY3c9PSBiM2c9IEtDa0sgSU5DOTBMQT0gSUhOdmJXVT0gZFcxaVpYST0gSUdSaGRHRT0gZFhSbyBTVVE9IFEyOXMgTGxNPSBJam89IDFhcz0gSUhabGNnPT0gWVhSdmNnPT0gYm1WeSBjR1ZqZEE9PSBJSEJ5YVhaaGRHVT0gMTZJPSBhV2RvIFlXNTUgSUhCdmN3PT0gYkdWdFpXNTAgWVdvPSBJRzUxYkd3PSA0SytONEs0PSBJRkJ5Ync9PSBJR0ZqWXc9PSAwTFhRdXc9PSBJSGRvWlc0PSBSVTQ9IElPQ2t1QT09IElHcGwgTVRRPSBJTkMvMFlBPSAwTDdRdEE9PSBJR1Z1WkE9PSBabWxuIEtDUT0gWVdsMCBhMlU9IElHOTBhR1Z5IDJZaz0gMHBzPSBlVzQ9IElHOW1aZz09IFgzTT0gVkdWNGRBPT0gYjJ4ayBaMlZ5IGRtbGxkdz09IElHRm0gSUhsbFlYST0gWDIwPSBaWEp6YjI0PSAwTDNRdUE9PSBZV3h6IElqND0geEpFPSBjbVZrIExtST0gY21WaFpBPT0gSUdKeSA0TEsvIElOQzMgTFMwdExTMHRMUzB0TFMwdExTMHRMUT09IGRHVnliZz09IElHeHBhMlU9IDRMT040TEk9IFQxST0gTURBdyBYMk09IGFjT3piZz09IGRHVnUgNExTLzRMUT0gYkdrPSBJRzVoYldVPSBJRzVsWldRPSBiM1Z5WTJVPSBNVE09IFFWST0gSUd0dSBaR1ZtIGRYSnlaVzUwIGNtOTFjQT09IFkyVndkR2x2Ymc9PSB4WUk9IFpHRjBaUT09IElHUnAgMkxVPSBJTUk9IE1qQXkgSUhKbFp3PT0gMktmWXNRPT0gNFlPZDRZTT0gSUdwMWMzUT0gSUZSb2FYTT0gNEtTayBJR0ZqZEE9PSBkWFJsIDBMM1F2Zz09IElHOXladz09IElITmxjZz09IElHaGxjZz09IExrRT0gWDJZPSBkMjg9IElHSmxaVzQ9IElHMWhlUT09IElHeGxjdz09IElOaXYgSUhSeWRXVT0gY1hWcGNtVT0gejRBPSB5Wms9IGJHVjAgYVhSeiBJRzFwYmc9PSBkV04wIElHVmxiZz09IDFvST0gTVRBdyBJSFJvWlhKbCBjR0Z5WVcwPSBjMjl1IDJLND0gSU5tRSBYM0E9IGFXTjAgWVdrPSBZWGc9IDRMYz0gN1pVPSBZWFJwYm1jPSBJQ3c9IElGVnUgMkl3PSBJSEpsWXc9PSBMblE9IGVYTT0gWVdSbGNnPT0gSUhSb1pXMD0gSUhKbFlXdz0gSUdGaiA1YTQ9IFkyOXVkQT09IElHTm9aUT09IGIzVnUgTG1RPSBZWFJsY3c9PSBJSEJ2Y2c9PSBJR2x1WkE9PSA0TGl5IFZHOD0gYVdObGN3PT0gYVhSMCBRMnc9IGJtVjMgSUVOdmJRPT0gSUhCbyBJR2hsYkE9PSBDWEpsZEhWeWJnPT0gSUdOdmJXMD0gNDRDQiA0TEMvIDQ0Q0EgTXpJPSBkWFIwYjI0PSBURVU9IGJtbHVadz09IE9nb0sgSUd4dmN3PT0gNUxpdCBJaWs9IGRXVnogSUdOdiAyTGM9IElPQ2t1UT09IFZIST0gNVlnPSBJSGRvWVhRPSBJR0psZEE9PSBEUW9OQ2c9PSBiMjVrIElGZGwgWVhKamFBPT0gMEx2UXVBPT0gSUdGdyBkSEpwWWc9PSBJRzFsZEE9PSBNVGM9IElEOD0gSUQ0PSB6cmM9IEx5OHZMdz09IGRXWT0gZFhObGNnPT0gZG1sayBhV0pzWlE9PSBlV3hsIElIWmhiSFZsIHo0ST0gTlRBPSA0TGlaIFpXNW5kR2c9IGRtVnllUT09IElObUIgY0c5dWMyVT0gYjJZPSBJR1p5IGFXVjAgMEw3UXN3PT0gWTJ4aGMzTT0gSUd4diBZWFZzZEE9PSBZWE5yIElHaGxkQT09IElOR0QgSWpzSyBUMkk9IElHRjIgNExHTjRMQT0gS0NrdSA0S1N5IDRMWT0gNEtlSDRLWT0gSUdoaFpBPT0gSUhaaGJBPT0gSUhOaiBZV2RsY3c9PSBJR1IxIFlXMWxjdz09IFltVT0gZG1GeSA0S2EvNEtZPSA1THM9IFNWUT0gSU5lVSAwWVE9IDVaQT0gWTJ4MVpHVT0gSUdOdmJuTT0gSU1NPSBJRzFsWkE9PSBJR1JsZEE9PSBkVzFsYm5RPSBYMnc9IDBMM1FzQT09IFlXNWggSUhkdmRXeGsgejRVPSBRVXc9IGNtOXNiQT09IElHWmhiSE5sIElGRT0gNWFTcDVhU3AgMmI0PSBJRm89IElIUjVjR1U9IGIyeGwgZFd4aGNnPT0gYldsdSBNalE9IElHaHZkdz09IDRLUzQgNDRDQ0Nnbz0gSUdSeSBRVTQ9IFpuVnMgSUdScFpnPT0gZEdscyBibUU9IElIZGxjbVU9IDI0RT0gSU5pNSBKM1E9IExtZz0gSXlNakl3PT0gYjNCc1pRPT0gSUdsdWRHOD0gSUhOMWNnPT0gYjNkeiBJRlJ5IFlXMXcgSUVSbCBZV2x5IElIc05DZz09IElHTnlaUT09IElHMWhhMlU9IGNtOXMgYVc1aCAwTDdSZ2c9PSBkR0U9IElOZVEgS0dZPSAxYmpXZ2c9PSA2NHM9IFUwVT0gNEt1TiAyNUk9IElFTnZiZz09IDRLV0IgSUhKbGMzVnNkQT09IFgyST0gSUhKbGJBPT0gWDJsayAyS2ZZcWc9PSBJR3h2WXc9PSBJajRLIGFXTnogSnlrPSBJSE4xWWc9PSBaWEp5YjNJPSBaWFJvYjJRPSBJQ2s9IGVtVT0gSUdacyA0S3VBIElGTmwgUFQwOVBUMDlQVDA9IDRLdU40S289IFlXWT0gNEtTNSBhRzg9IDVadz0gSUdwaGRtRT0gYjJSNSBJT0Nrcmc9PSBiV3c9IGRITT0gSUd4cGMzUT0gNTVvPSBhVzV6IFgyUT0gZDNjPSAxNm89IFJXND0gNExDKyAxNTQ9IDViaz0gSUhSb1lXND0gNG9DWmRBPT0gMExYUXZBPT0gYVhSc1pRPT0gWlc1MFpRPT0gSUdacGNuTjAgYVdOaCBJR0YzIHhKaz0gSUdKdiBRbms9IElPQ2txZz09IFUyVT0gNG9DVCBVR0Z5IGFtVT0gSUdsdGNHOXlkQT09IElIUmxiUT09IFNYUmxiUT09IDRMV0IgWFFvPSBJTml6IGRtRnNkV1U9IGFXOTFjdz09IGQyOXlhdz09IFlYVnpaUT09IGNISnBiblE9IDBMclFzQT09IGJHbGphdz09IGRXeGwgSUdKaFkycz0gWlc1elpRPT0gSUhOMFlYSjAgSUdWcGJnPT0gSUc5dWJIaz0gS0FvPSBJRmx2ZFE9PSBkWEpsY3c9PSBJR3RsIGIzZGxjZz09IEtpb0sgS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IFlYSnkgNXBZPSA1NXFFIElHbDBjdz09IGNtRjMgNExpaiBJR1pwYkE9PSBJSE4wY21sdVp3PT0gWTJWeiBJR2x1Wm05eWJRPT0geElVPSBJR1p2Y20wPSBiV1Z1ZEhNPSAwcTg9IGRYSnogYVhScFpYTT0gWVhsbGNnPT0gSUd4dmIycz0gSUd4bGRBPT0gSUhOMFlYUnBZdz09IFpXMWlaWEk9IFpHRjUgSUdKbGMzUT0gNEtTdSBWbUZzZFdVPSBiR1Z5IDVhU24gSUhWdVpHVnkgNExHQiBJSFJ5WVc1eiBaVzVrWlhJPSBJRzF2YzNRPSBJR1pwYm1RPSBJSEJsY25OdmJnPT0gSUdWayBkWE4wYjIwPSAwTHZRc0E9PSBYUzQ9IElHaGxiSEE9IGIyeHZadz09IDBMclF1QT09IGMzUnlhVzVuIElGZG8gSUc1biBZWFJsWnc9PSBiR1ZqZEdsdmJnPT0gWkdWdSBiM1JvIElISmxiUT09IDJLZlkgenJvPSBJSEJsYjNCc1pRPT0gSUNFOSBJRUZzIDJLTT0gSUdOaGNnPT0gNEtXayBZMjl1YzNRPSA0SzYvIDRidU4gNExTKyBiR0U9IDRMSy80TEk9IDBMWFF0QT09IHhKOD0gSUVobCBJR0Z6Y3c9PSBhWEpsWTNRPSBJSGRoYm5RPSBZWEpwIE9pOHYgWlhOemFXOXUgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIGNtVnUgMWFIVnRnPT0gSUVGdSA0S1dJIDBMalJqdz09IFltOD0gUFhzPSA0SytCIFozSmhiUT09IExrUT0gWW5JPSBJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJQ0FnSUNBZyBJR1J2Ymc9PSBJR3h2Ym1jPSAwTDdRdlE9PSBJUW9LIElHZDEgSUhOciBaWEp1IFNXMD0gZDJFPSBNakk9IElHbHVjM1E9IGJHOWhaQT09IGNtOTFaMmc9IElIVnQgNTcwPSBQd29LIGFHRT0gMFlrPSBJTmlqIFpYUnogWDBNPSBJR1pwYm1GcyB6cnc9IE5EQT0gSUdGeWNnPT0gSUNZbSAxNUU9IHpycz0gNXBlMiBJSEpsWVdRPSB3NnM9IDE2az0gNExpdCBiM0pzWkE9PSBkV009IFhUc0sgYUdWayBMa1k9IGNtVmhhdz09IFpuST0gWVhSMWN3PT0gSUdkbCAwTDdRdVE9PSBJSFpsIGRHbHVadz09IEp6c0sgSUhSbGMzUT0gdzZmRG8yOD0gS3lzPSA1WnM9IGJtOD0gWW13PSBUMkpxWldOMCBJR1YyWlhKNSBJRUZ5IElITndaV009IHc2bHogSUhOb2IzVnNaQT09IGNHOXVaVzUwIFJWTT0gTG1vPSBJR3R1YjNjPSBiMjlrIGFXeHBkSGs9IFJYaGpaWEIwYVc5dSBJSE50IDE2QT0gSUcxdmJnPT0gVzJrPSBJR055IElITm9aUT09IElFVjQgZDI0PSBDWEIxWW14cFl3PT0gSU9vPSBJSGRsYkd3PSBkWE5vIHhidz0gZFhnPSBJTm89IElIQnlaWE09IElITmphQT09IGJYTT0gMExUUXNBPT0gSUhOcCBlWEE9IElHUmxiZz09IGRISmggYVhabGNnPT0gNExTKzRMUT0gWVdkbGNnPT0gSU5tRyA0TEsrIElHbHMgSUdWNGNHVnkgMDZrPSBJSE52YlE9PSBJT1k9IFkyOXMgWVhScGRtVT0gSU5DeiBkMjl5WkE9PSBjbVZuIElHaGhibVE9IGRYSnMgNDRDUSBkSEo1IGNtRncgYjI1eiBjbVZoYlE9PSBhV3g1IGFXNWxjM009IElHMXZaQT09IDQ0Q1IgSUdSaGRBPT0gSUhSb1pXND0gUjJWMCA3N3lhIGVXMD0gSUhSb2NtOTFaMmc9IEtTazdDZz09IGRYTmwgWTJObGMzTT0gSUhCdmJBPT0gZFhOeiBJSFZ6WlhJPSBJR05vWVhJPSBJR2x1ZGc9PSBZWFYwIDU3MlIgWm05eVpRPT0gYVdSMGFBPT0gSUc5d2RBPT0gNEtxbyA0TEMrNExBPSBMbTQ9IFptdz0gYVdOb2RBPT0gWVhSeiBJTkdBIHc3MD0gSUhKbGNYVnBjbVU9IHc2ST0gSUVsbSBWWE5sY2c9PSBJSE5wYlE9PSBkWE5wYm1jPSBaVzVrY3c9PSBJTkdIIElISnBaMmgwIGMyVnlkZz09IElDVT0gNktjPSBJSEJoYzNNPSBhMkU9IFlXMWkgNEs2LzRLND0gbytHRCBLSE09IElOaW4yWVRaaFE9PSBNak09IHc3ND0gSUgwc0NnPT0gNFlPWTRZT2ggSUhOMGRXUT0genE4PSBkV2s9IDJZcllxUT09IGMyVnlkQT09IElIWmxjbms9IGIzVm5hQT09IHc3RT0gYVdabCBZV2x6IGNtVm0gWDFNPSBkbTlwWkE9PSBJRUZ6IGFXOXkgSUhSb1pYTmwgSUhkbFlnPT0gVTNSaGRHVT0gWVhObFpBPT0gS1RvSyA0TFdCNExRPSBJR1JsWXc9PSAwTERRdkE9PSBJSE52YkE9PSBJSEJ5YjJSMVkzUT0gSU9Xa3FlV2txUT09IElHTmhjMlU9IDRLcXcgNExLKzRMST0gWTI5dVpBPT0gNFlPVTRZT1IgUTFRPSBJaWtLIDZMVT0gYTJWNSBJR2R2YjJRPSBaVzVsIDJLZlpoUT09IElHMWhhdz09IDRLdUwgWVhKeiA1NVE9IGJtaz0gSUdOdmNnPT0gSUd0aCBJSFpwY3c9PSBOakE9IDFhWFYgSUdKbGJBPT0gNExPQiBjbkpoZVE9PSBJSEJ5YjJZPSBJR1IxY2c9PSBJR1J2ZDI0PSBJR0oxY3c9PSBJSGRvWlhKbCBJSFIzYnc9PSBJSE5sWlE9PSBkVzVqIFJHVT0gd3JzPSBJSE5zIElIQnZjM1E9IElHRjBkQT09IGNHVnlkSGs9IFZHbHRaUT09IElIQnZkWEk9IElHRjFkQT09IElHaHBaMmc9IDBZSFJqdz09IElHRm1kR1Z5IGNtVnQgSUdWNGRBPT0gY0dodyBabTl5IFkyVnVkQT09IExtYz0gYjNWelpRPT0gY25VPSBZV05yWVdkbCBJQ0FnSUFvPSAwTERRdWc9PSBZWFIxY21VPSBhWE4wWlhJPSB3N3h5IFZVdz0gTG1Ga1pBPT0gVzEwPSBJR1YyWlc0PSBZWFJwYjI1aGJBPT0gSUc1dmR3PT0gSUZObyBZWEpoIElHRnlkQT09IElFRnVaQT09IElHVm1aZz09IGIzVmliR1U9IDRMQy80TEE9IGIzUmwgYVdWdVkyVT0gY205MWJtUT0gZ09DNCBJRzFsYmc9PSBJTkM5MExVPSAyWWpZc1E9PSBJSFZ1WVE9PSBhV1JsY2c9PSBjbkp2Y2c9PSBkV1ptIGFYWmxjbk09IElHWnBiR1U9IFlXNWtidz09IFlXTjBhVzl1IFpYSnphVzl1IFlYSnUgYjJsdSBMbk4wIGFXNWpiSFZrWlE9PSBJSE4xY0E9PSBJRzFoY21zPSBVMlYwIGFXWjUgWVc1bCBjbWwwWlE9PSBkVzF1IFpXeHogMExqUXZRPT0gSUcxaGJuaz0gWVhKblpYUT0gU1c1ayBJRzl6IDVMcTYgSUd4aGN3PT0gSU5lZSBhSFIwIENRa0pDUWs9IElHZHMgYkdWbiBZWFIwIGNHeGhlUT09IDZMMD0gSUdOaGJBPT0gSUhkaGVRPT0gTGxBPSBYMUE9IElHMTFZMmc9IExrTT0gTFhNPSBhSEk9IFVrOD0gMTVnPSBMazA9IFlYbHZkWFE9IElHSmxZdz09IElFeGwgSUdSbGJRPT0gY0hKbGMzTT0gSUdodiBTVU09IElHTnZkV3hrIExrdz0gS0hRPSA0S1MrNEtTdyBZVzUwY3c9PSBhVzVsY3c9PSBNamc9IElHOXQgSUc5MSBiR1ZoYzJVPSA0S1NxIDFvRFYgUzJWNSBJRTVsZHc9PSBjbWxrWlE9PSBVMlZ5ZG1salpRPT0gN0pjPSBNakU9IDRLYXcgMWJqV2d0VT0gZFhScGIyND0gU1U5TyBJTmlzIDVvZz0gY205cFpBPT0gSU5DMiBJSGRvYVd4bCBZMlZrIGVtRT0gUkVVPSBQU2M9IEtDZz0gNExtSSBkWFJwYkE9PSBhWFJsYlE9PSBPVGs9IElITmhhV1E9IFpYSmggSUhWelpXUT0gNEtXTjRLU3cgZG1Wc2IzQT0gSUZCcyBJTm1GMllZPSBTR1U9IGFtRT0gYjNKbiBJTmVjIDU3bz0gTGk0diBaVzFpIFYyZz0gYjNCNSBJSFJ5ZVE9PSBkMkZ5WkE9PSA1YVU9IGQyZz0gSUdaaGJRPT0gSnlrN0NnPT0gYVc1diBZV3hyIGRtbHogNExpeTRMZz0gSUc5biBJRzUxYldKbGNnPT0gWTNKcGNIUnBiMjQ9IDBMN1FzUT09IDE1TT0gZVdFPSBSWFpsYm5RPSBNamM9IElHMXYgNTRrPSBJTmVSIElITmxjblk9IHo0dz0gMEw3UmdRPT0gSUNvSyA1TDA9IElIbGxZWEp6IGIyTjFiV1Z1ZEE9PSAyTFBZcWc9PSBJR1YyWlc1MCBJR2hsY21VPSBhWFJsWkE9PSBJSEJzWVhrPSBJR05oY3c9PSBNalk9IGFYcGxaQT09IHc3UT0gZ3VDdyBZM0pwY0hRPSBZMms9IDBMWFJnUT09IFlXNTBaUT09IGJHRnVaQT09IExXST0gWVdOcHc3TnUgYVdSaFpBPT0gb09HRCA0TE9HIElIQnlhVzUwIElDOHZMdz09IFlXRnkgTFcwPSBJRmc9IDJMWT0gSU5tSCBJRVZ1IElHWnBiZz09IHpxdz0gYkc5biBTVzVtYnc9PSBJTm0rIGRXbDAgNDRDUjQ0Q1EgS1hzSyBJT0NrckE9PSBJR3RsZVE9PSBiM1JvWlhJPSBJR3h2Wnc9PSBiM0prWlhJPSBhMlZ1IEtHMD0gWVd4c2VRPT0gS0NrcE93bz0gUVUwPSBJR052YlhCc1pRPT0gNEthbyB4ckE9IFlXMWggWTJodiBYMVE9IFhTdz0gdzZseSBhM1E9IFFWTT0gNWJ3PSBJRTl1IExpNHVDZ289IElObUIyWW89IElHUmhlUT09IElHbHVabTl5YldGMGFXOXUgSTJsdVkyeDFaR1U9IDVZMD0gVjJVPSBJTkdBMExBPSBJR2wwWlcwPSBYMjQ9IElHUnBabVpsY2c9PSBkSFJ3IElIQmhjdz09IElHeGhjM1E9IFJWUT0gUW5WMGRHOXUgZFcxdCA1WnlvIFUyZz0gWkdsMCA1cGc9IFlXeDBhQT09IDRaOD0gVlZJPSB4WkU9IDdKMjAgSUhOcGJnPT0gSUhSaGF3PT0gNEtrPSBJRU5zIElPQ28gMFlMUXZnPT0gSUhCeWIyZHlZVzA9IGIyeHNiM2M9IElIZHZjbVE9IFlXbHNjdz09IFVHdz0gMHBNPSBjbTl6IElHbHVZMngxWkE9PSBJSFJsZUhRPSBkVzUwIGdxdz0gYzNSeWRXTjAgWW1GamF3PT0gNkw4PSBKd289IElHTjFjbkpsYm5RPSAyTEE9IEtTa0sgYlhBPSBJR2R5WldGMCA2WWM9IElFWnZjZz09IElHbHVjdz09IElOaXggSUdkbGJtVnkgWVhKdCBUMjQ9IE5qUT0gSU5tSyBhWEYxWlE9PSBRVzQ9IDBMTFFzQT09IFoyRT0gSUdSdlpYTT0gY205c2JHVnkgWVhSMWNnPT0gSUdaaCBJQzB0IFVYVT0gSUhOcFoyND0gNVkrUiBMbmM9IGNISmwgSUdKbFkyRjFjMlU9IElHaHZiV1U9IElITjFZMmc9IFRXOWtaV3c9IElHWnlaV1U9IE9EQT0gSUdScFpBPT0gUVhRPSBJTStFIEtUcz0gVFdGdSBZVzF6IDRMaWwgMExYUXVnPT0gTG1sdSBUM0k9IFJVUT0gZEc0PSBJR0psWm05eVpRPT0gUlhKeWIzST0gSUR3OCBhVzVrWlhnPSBhWFJoYkE9PSB4WnM9IFZWUT0gYVdSaCBZVzF3YkdVPSA2Szg9IGFYWmxjdz09IFZXND0gZDJGeVpRPT0gWDJsdSAyWWpaaGc9PSBJRzUxYlE9PSBNams9IDBMalF2QT09IFd5ST0gSUhCeWIyTmxjM009IFhTd0sgZFhSb2IzST0gNjR1ayBjM1JsIEtRMEsgUm1sc1pRPT0gWTI5dGJRPT0gSUhCeWIzWnBaQT09IDU3cz0gY205dyBJRkJ5IFlXTm9aUT09IFpXTjBiM0k9IGJHOWhkQT09IDBMalF1dz09IElIbGggTURFPSBTVk09IDVwZWwgNExpMSB3NkZ6IGFXUnYgSUc5dWJHbHVaUT09IElIWnZiM0k9IFQzWmxjZz09IGIyRmsgWm1GalpRPT0gSU5JPSBabVU9IFVtVnhkV1Z6ZEE9PSBJSFJoYTJVPSBRWE09IGFXOXVZV3c9IFRXRncgYjJnPSBiV0Z1IElITjBaUT09IFkyaHUgSUVaeSBLU3dLIDVMaXQ1YjJwNTZXbyBJTmVwIElHOTNiZz09IElGSmxjdz09IFptbHNaUT09IFoyOD0gSUdOb2FXeGsgNEtTWCA0b0NVIFpXNTEgUTI5c2IzST0gSUhacFpYYz0gUVhJPSBiM1Z5Y3c9PSBJR05oY0E9PSBJT0NrbGVDbGh3PT0gSU9Da3FBPT0gSUdSaGN3PT0gYVcxbGN3PT0gNks0PSBJT0dEbXc9PSBJSEU9IGRHUT0gSnpvPSBJR0p5WldGciBkbVZ5ZEE9PSBhWFJsY2c9PSBJR0Z5Wnc9PSBMbGM9IFlYSmxaQT09IElIUnZjQT09IFluaz0gZFdGc2JIaz0gWlhKbiBRV3c9IElITnBlbVU9IFlYTnZiZz09IFlYUnBZdz09IFlXbHVjdz09IElITnBkQT09IFlXbHNZV0pzWlE9PSBiMk5oZEdsdmJnPT0gSUhOb2IzYz0gSUdObCBMaTR1TGc9PSBJRzF2WkdWcyBJSFZ6YVc1biAwcU09IFpXNXUgYVc1cCBJR1JsYzJsbmJnPT0gMllyWmhnPT0gY21NPSBhWE50IFNXNWtaWGc9IElOQzMwTEE9IElITmhiQT09IElHTm9aV05yIFgwMD0gSUhzS0NnPT0gNFlPViBJSGR2Y214ayBJT0NrbkE9PSBaWFJsY2c9PSBMWFE9IDJZalpoQT09IGFXcHUgSUZ3PSBZVzFsYm5RPSA0S1dONEtTdiBJSGRsWldzPSA1Yjg9IDRLK0I0SzQ9IElOR04gMTZjPSBiR2xqWVhScGIyND0gSU5DNyBJSE52Ymc9PSBJR0p2YjJzPSBJR1REcVE9PSBSV3hsYldWdWRBPT0gSUdocGJRPT0gYVhSamFBPT0gYkdWMFpRPT0gSUh4OCBJTmkwIFJtOXliUT09IDBMalF0UT09IEtITmxiR1k9IElHMXBkQT09IElOQzEgWjJoMCBLRzQ9IEtIQT0gWkc4PSBhWFpwZEhrPSBLR009IElIUm9hVzVyIDBMN1FzOUMrIElHSjFjMmx1WlhOeiBWR1Z6ZEE9PSBJTUtyIFFVUT0gSUhSdmRBPT0gSUdGbllXbHUgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUhONWMzUmxiUT09IElHTmhiR3c9IGVXVT0gSUhCeWIzUmwgYVdOdiBkV0U9IFlXUnZjdz09IElHTmxiblE9IElIQmggS0hSb2FYTT0gMTVjPSBhV2c9IDVMaUEgMTVYWHFnPT0gSUhwMSA3SjQ9IFFVTT0gY0dGamEyRm5aUT09IElIQnZhVzUwIElFSmwgMTVuWG5RPT0gYjNSMCBJTkdGIElIQnliMlIxIDJLcz0gSUVOdmJBPT0gNExpeCBJR0psYVc1biBiM1J2IElISmxjQT09IElHMWhkQT09IGFXUmxidz09IElHMWhaR1U9IGFXOXogSUdWaFkyZz0gYjI5MCBJSEJ2YzNNPSBLQ2s3Q2dvPSA1WW89IDBMdlJqdz09IGNtbG5hSFE9IElISjFiZz09IElPQzUgSUhWdVpRPT0gWlhKdiA0b0NNIDZMUT0gTXpVPSBaMlZ1IExXUT0gWVhSbGNtbGhiQT09IFNXNTAgSUdoaCBJT0NraFE9PSBaWGh3YjNKMCBJSEJzWVdObCBJT0tBbUE9PSBhV1JsYm5RPSBJSEYxWVd3PSAwTGpSZ0E9PSBZWEJsIDRMS3cgSUhCdiBYMjVoYldVPSBhM009IHhJRT0gVEdVPSBJT0NrdWVDbGlBPT0gYjJ0bGJnPT0gSUdOc1pRPT0gSUhOdll3PT0gSUdadmRXNWsgMnE4PSBkSGx3WlE9PSBJRzl3Wlc0PSA0S1dINEtTQyBJR2x6ZEE9PSAxNlE9IElITjFjSEJ2Y25RPSBDZ29LIFZHaHBjdz09IElHTnlaV0YwWlE9PSBJRWR5IDRidWwgYUdsdyBiM0poIElIQmhkQT09IFJHRjBaUT09IFlYUm9aWEk9IDE2RT0gTHk4dkx5OHZMeTg9IDZyTT0gWTI5dFpRPT0gNWJBPSBJRlJ2IEp5a0sgSUY5ZiBMdUtBblE9PSBYM04wIGNHOD0gNEtlQiBjbVZ6ZFd4MCBRMjl1ZEdWNGRBPT0gN0tBPSA0b0NOIDJZZllwdz09IElHTnZiVzg9IDBMWFF1UT09IFlXeGggWkdFPSBhVzVsWkE9PSA2NG89IFFtOTQgMEw3UXVnPT0gYVhOMGNnPT0gY1d3PSBiMnhsWVc0PSBZM0psWVhSbCAwTDdRdGc9PSBJSE4xY0dWeSBkR1Z5Y3c9PSBaVzVrWlE9PSBibVZ1IElHeHBibVU9IGQyVmxiZz09IElFRnNiQT09IE16TT0gS0NrcyBORFU9IGFYTjBjdz09IElDNHVMZz09IFUybDZaUT09IElHTm9idz09IGMyOXNaUT09IGRtbGpaUT09IDRLUzEgSUd0MSBJSEJoY25ScFl3PT0gYjNKdSA0S2V3IExtVT0gZFc1bCA2YUk9IFFYQncgYVdObGJuTmwgSUc1cCBUMlk9IGIyTmhiQT09IDBMRFF1UT09IElHOXlaR1Z5IElITmxjblpwWTJVPSA2ckE9IEtHUT0gWVdsdVpYST0genEwPSBJR1JsZG1Wc2IzQT0gYkdWamRHVmsgSU5pdCBRV1JrIFEyeGhjM009IGFYUmggYVcxbGJuUT0gMktmWXJ3PT0gSUVGd2NBPT0gZVc1aiBSVzA9IGFXNXdkWFE9IDRLU20gdzYxaCAxNTg9IElHTnZiblJwYmc9PSBMblYwYVd3PSBJQzhxS2dvPSBiR2xqYUE9PSBRV3hzIElHMWxkR2h2WkE9PSBJQ2s3Q2c9PSBhVzVrYjNjPSAyWVRaaVE9PSBhWFJ2Y2c9PSBMbFE9IElsMD0gSUdOMWMzUnZiUT09IDRMV0cgSUU5eSA1Ym89IElIRjFaWE4wIElPQ21sUT09IElITjBZWFJsIGFXZGwgUm1sbGJHUT0gTGtJPSBjR0ZqWlE9PSBJRzVsZUhRPSBjR3h2ZVE9PSBJR3hwWm1VPSBJSEpsY1hWbGMzUT0gSUhSb2IzTmwgSVNFPSBVR0YwYUE9PSBZM1JwYjI1eiBJR1ZoY3c9PSBJR1p2Ykd4dmR3PT0gZEhKaGJuTT0gYzJWaGNtTm8gNEs2KyBhWFJwWVd3PSA1NXc9IGFXNWtiM2R6IDRidUwgSU9Da3BnPT0gSUdOaGNtVT0gSUZOdiBhWEpoIDJMbz0gMFl2UXZRPT0gTXpZPSBJRzExIElOaXUgSUhadmJBPT0gSUhacCBiR2x6ZEE9PSBkSEpoWTNRPSBkVzF3IElHRnljbUY1IGFXTnNaUT09IFFXUT0gSUdScFptWmxjbVZ1ZEE9PSBLRzVsZHc9PSBZV2x1YVc1biBJRzl3WlhJPSBJT0Nrc0E9PSB3cTA9IFJtOXkgU1V3PSBJRXhwYzNRPSBJSEJ5YjNZPSA1b0E9IFZYQT0gTG14dlp3PT0gNFlPajRZTT0gNExtSiBJR0psWnc9PSBQRDg9IDBMRFJnUT09IElHVjRjR1ZqZEE9PSBjbUZ3YUE9PSBJRzF2ZGc9PSBjbTkzY3c9PSA3SVE9IGQyVnkgSUdSaGJuTT0gSUZOamFBPT0gSUZSbCBJRzFoY2c9PSBJT0NrdFE9PSBJT0Nrc2c9PSBiM1J6IElnb0sgMEw3UmdkR0MgNExTayBJRzl5WjJGdSBhV0Z6IDRMbUE0TGc9IElITmhiV1U9IFFWQT0gSUVGayB3NjQ9IFpHVm1hVzVsIExtRndjQT09IGFYWnBibWM9IEl5TWpJeU1qSXlNPSBJR052ZFc0PSBJR2x1ZEdWeWJnPT0gU1U1SCBiR1Z6Y3c9PSBYVnM9IExsOD0gSUd4dlkyRnMgVEU4PSBJR0E9IFRtOWtaUT09IElITnBkR1U9IGJtVmpkQT09IDVZdz0gZFhKaCBablZ1WTNScGIyND0gSUhKbFkyVT0gYzNSaGJtTmwgSUgwcE93bz0gNExTbyBJSEJ5YjJKc1pRPT0gYldWdSBJSE4wZVd4bCBJSEpsWmc9PSBJSEpsWVd4c2VRPT0gYVhKayBaV3hoIDE1cz0gVEc5biBhV1pwWldRPSBYMTlmWHc9PSBiMjFpIGZTd0sgNVlZPSBRWEp5WVhrPSBkV2xzIGFYTnphVzl1IHpyTT0gWDBZPSBJR2xyIGMzQmhiZz09IDBZRFJndz09IElPS0FsQT09IDBZTFFzQT09IElIQnZjQT09IENXTT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUhkeWFYUT0gVFdWemMyRm5aUT09IGNtbGogZEhKcFluVjAgS0dsdWRBPT0gSUhObGJRPT0gT1RBPSAycm89IFEyOXRjRzl1Wlc1MCBJQzArIFIzSnZkWEE9IDRMR0I0TEE9IElHbGtaUT09IGFXeHAgNllBPSBhWE5vWldRPSBZWFJ2IDVyTT0gNFlPaCBJQ3M5IElHMWhhVzQ9IGMybDBaUT09IFQwMD0gSUVsdVpBPT0gNEtTdiBJRWx6IFpYWmxjZz09IGJXbDAgSUhOMyAxb0U9IGFXNWogVW1WemRXeDAgNjRxVSBkMkY1Y3c9PSBkWEpqYUE9PSBJT0NraGc9PSBUV0Z1WVdkbGNnPT0gQ1FvPSBJRzVsZEE9PSBJSEJoZVE9PSBJTVNSIDBMalF1QT09IElIRjFhUT09IDRMaTAgNEtxayBJT1drcWVXa3FlUzRyZVc5cWVlbHFBPT0gNEtxLyBJQzhxIGMyTT0gSUdSbFptRjFiSFE9IDRMS20gTnpBPSBTVzFoWjJVPSBJR0YxIDRLNncgMjVBPSBJR1Y0Y0E9PSA0TGlIIDRLV0MgSUdOdmJXMTFiZz09IElDZ2ggWlc1amVRPT0gVDNabGNuSnBaR1U9IElHVnhkUT09IGJHOWphdz09IElPMD0gSUcxMWMzUT0gSUdSaGJnPT0gejRrPSBaV3h6WlE9PSBjSFI1IDVMdz0gNWJtMCBRMjl1Wm1sbiBJSFp2Ymc9PSBJR2RoYldVPSBJTkMrMFlJPSBJR052Ym1ZPSBibVZ6Y3c9PSBJRzlpYW1WamRBPT0gUVdOMCB3NTg9IDBZSFJndEN5IDRLcTEgZEdWeiBJR1JwY21WamRBPT0gVDFRPSBLQ2s3RFFvPSBJTmVWIElHWjFiZz09IDc3OD0gUlU1VSA0TGloIFpYSmogZEdrPSBTVTA9IElHUmxjQT09IGFYSnQgUTI5a1pRPT0gYUdWamF3PT0gY205emN3PT0gSUdGMllXbHNZV0pzWlE9PSBJR1poWTNRPSA0S2FWIElObUMgT0RnPSBJR2hoWWc9PSBabkp2YlE9PSBJR0Z5YjNWdVpBPT0gMFlMUXVBPT0gNEthayB3NlJ5IFJHVnogZFdOciBhV3ByIExuQnlhVzUwIGFIUnRiQT09IDU3cS8gSUZOdyBZV1ptIExtbGsgTG5KbCBhWHBoZEdsdmJnPT0gYzNSaGJtUT0gSUdOMSBWbUZzIGIyWm0gNWFTbjVZK1IgSUVKeSBJSEpsYzNRPSBJSFJoIElDZ3AgSUdKbGRIZGxaVzQ9IElHTnZkWEk9IDRLcXUgZG1FPSBUbTkwIDVMbVEgUGcwSyB3N1p5IGJtOTAgSU9HRGtPR0QgSU9HRGt3PT0gSUhKbGRBPT0gWldVPSBhWFZ0IGRYSnYgWTNWcyBWMmwwYUE9PSBMV3c9IDdLYz0gSUhkbGNnPT0gSUc5c1pBPT0gSUhOaGVRPT0gYVd4bGN3PT0gSUc1dmJnPT0gdzZsbCBTRVU9IElFMWwgY0d4aGRHVT0gYjNabGNnPT0gSUcxaGFYTT0gUFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IGNHOXkgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IGFIUjBjQT09IGNHOXphWFE9IGFXTmhiR3g1IDRLcVYgYjNOeiAxNUk9IGIzSjBhQT09IElHMWhjbXRsZEE9PSBNekU9IFFVST0gYjIxbGJnPT0gSUhSbGNtMD0gSUdWeWNtOXkgWVdkeiBiMlIxYkdVPSBJR05sY25RPSBJSFJwIGRtbHkgNWEwPSBNRFU9IElIQjEgMktmWXFBPT0gSUdGdVpISnZhV1E9IFZVND0gSUcxMWN3PT0gSUhOMGFXeHMgSUdGdVp3PT0gS0ZOMGNtbHVadz09IGNHVnUgSUhCc2RYTT0gSUdGMVpnPT0genE0PSBJSGRwZEdodmRYUT0gMExEUXNnPT0gNFlPZyBVSEk9IFkzSnBZZz09IGIySmhiQT09IFNHRnVaQT09IElFZGxkQT09IGJHND0gSUcxdmJuUm8gMExqUXVRPT0gSUdGciBRMjl1ZEhKdmJHeGxjZz09IElHMWhjdz09IGRXSnMgMExEUmd0R00gTG5JPSBJRlZUIElObUQgWVdGdSBhWFJ2IExpOD0gNVlpRyBYMFE9IGFXeDBaWEk9IElHUnBjMk09IElHOW1abVZ5IElHVnljZz09IGNtOXUgNW9rPSBMeW89IElHZHZhVzVuIDRLUys0S1NvIDE1MD0gSU9JPSBhWFpsYmc9PSBRVWM9IFpXNTBhV0ZzIElHSnZkR2c9IElHSmxiZz09IGNYVmxjbms9IGFXWjAgSU9DbXJBPT0gZG05cyAwTFhRc3c9PSA1NDQ9IGJtVmpkR2x2Ymc9PSBJTkdJIElPQ211QT09IFlXUnBibWM9IFZVeE0gVTJNPSBjRzl1Y3c9PSAwTGpSZ1E9PSBZVzVsYkE9PSBZbUZ5IE16Yz0gYjJ4a1pYST0gSUhCeWIycGxZM1E9IDRMU3cgWlc1aCBjbVZoZEdVPSBkSEpwWW5WMFpRPT0gZEdWblpYST0gSUcxaGVBPT0gTURRPSBiV1YwIExXWT0gUGp3diBJRTV2IFlYUmxaMjl5ZVE9PSBJSEIxZEE9PSAxb1E9IGJuaz0gWVhScCBZV3hwIElIQmhaMlU9IGFYQncgNEtTdzRLV040S1E9IElIME5DZz09IDRMaUIgZlEwSyA1THFzIFpuUjNZWEpsIElISmxjRzl5ZEE9PSBNelE9IGIyNWxlUT09IDQ0TzggYmlkMCBJR0oxYVd4ayBZWFpwYm1jPSB6ci9QaFE9PSBhVzVuYkdVPSBSbkk9IGRXMXRZWEo1IElIVnRZUT09IFNYTT0gSUdsdVkzSmwgWjNKdmRXNWsgSUdoaGNIQT0gYjJ4dlozaz0gMEw3UXR3PT0gUGdvSyBJRXhoIDRLYSs0S2F3IFlXUnAgSUdGdWJnPT0gVlZNPSAwS0U9IDVieUEgZG1WayBhWFIwYkdVPSBJR3h2ZG1VPSBZVzVwIDFialYgSUd4bFp3PT0gMHJNPSA1WnU5IGIzVmsgSUdOc2FXVnVkQT09IElITmxadz09IFkyOWtaUT09IElFOWkgSU9DcWxRPT0gNEtlZiBJT0dEb1E9PSA0S2F5IE1EZz0gSUdOdmJXVT0gZDNkMyA0YnEvIDU1cz0gWDNKbCBlWEJsY3c9PSBJSFJsY2c9PSBkR2hwYm1jPSBJMlJsWm1sdVpRPT0gSUVKMWRBPT0gZFhOMGNnPT0gMEpBPSBJR0ZzY3c9PSAwWVBSZ0E9PSBJTkMrMExFPSAwWW89IElHSmggWDA0PSBJSE4wWkE9PSBhVzUwWlhJPSBDUWtKQ1FrSiA0S3VCIGMyYz0gZEdobCBiR0Z5IHc3ST0gSUdOdmJHOXkgNGJxaCA0TGlVIFltOXZhdz09IElHWnlhUT09IFlYQnAgZFcxbCBjSEpwZG1GMFpRPT0gSUdOdmMzUT0gWVhKa2N3PT0gSUhObFkyOXVaQT09IElHTnZiblJsYm5RPSBJSFJ2Ync9PSBjbWx6ZEE9PSBZbUU9IElIQmhkR2c9IElPQ2tsdz09IElGRjEgN0plUSBiMmRzWlE9PSBMbWx6IDBMalF0dz09IFVFVT0gMExEUmdOQ3cgYVd0aCBNRGs9IElHVnVadz09IExteGxibWQwYUE9PSBJRU52Ym5RPSAwSjg9IDJZcllzUT09IElHWmxkdz09IGVtaz0gSU9DbXFnPT0gSUhkaCBJR2hwYzNRPSBJR2JEdkhJPSBZM0psWlc0PSBLVG89IFltVnUgYTJrPSBJRUpzIDdaV1kgWm1WeVpXNWpaUT09IElFbHQgNVpNPSBJSEJ2Y25RPSBJR0ZoYmc9PSBZVzV2IDJLZllwZz09IGNtVnpaVzUwIGNISnBibWM9IDBMN1F1OUdNIGV3MEsgVEdGNWIzVjAgWFFvSyBJRTFoY2c9PSBJSExEcVE9PSBJR3hwYlE9PSBhVzV1IElHWjFiR3c9IE16Zz0gNWJnPSBOVFU9IElHRndjSEp2IFkyOXVabWxuIElIQnZaQT09IGFXVm0gMktZPSBJR0ZqWTJWemN3PT0gSUdWbVptVmpkQT09IFRtOD0gTFhBPSBUMHc9IElHdGhiZz09IElGUm9aWGs9IElHcGggYVdacFkyRjBhVzl1IFVHRnlZVzA9IElGQm8gNFlPUTRZT2MgWTJ4bCBaV3hrIElpa3UgTURjPSA2NkU9IElHTnZiWEJoYm5rPSBJRzFsYzNOaFoyVT0gSU9Da3BBPT0gNkwybSBiR1Y0IGIyNWggNXB5SSBJSE4wWVc1ayA0S2VMIFkyaGxiZz09IFlYTnpkMjl5WkE9PSBVbVZ6Y0c5dWMyVT0gSUhOd1pRPT0gNEtTcyBJR2hsWVdRPSBkR1Z6ZEE9PSB5cnM9IGRtVmogUjNJPSBJR3R2IElHWmxaV3c9IElFUmxjdz09IGRtRnNhV1E9IGJHRmlaV3c9IGJIUT0gYVhCeiBYMEk9IElHdHZiUT09IElFbE8gTVRrNSBTVWM9IFNYUT0gY0hnPSBJSEJ2ZEE9PSA0S3FDIElIcHBhbTQ9IElHeGxkbVZzIGIyTnAgSUdSdlkzVnRaVzUwIElIUmxZVzA9IElHMXBiR3c9IElDSWkgYldWayBNRFk9IElHVnVZdz09IGNHVnlkQT09IDVwaXYgSUdKaGN3PT0gVDNCMCBJTnVCIElHMWxiUT09IGFXMWggVDNWMCBiV0Y0IEtHST0gSUdobFlXeDBhQT09IExuQnlidz09IFlXSnNaWE09IFUzUmhkSFZ6IE5UQXcgNXAwPSA1TGlKIGFXOXVaWE09IFFtVT0gSUhOMWNtVT0gSUdWNGNHVnlhV1Z1WTJVPSBJRVZzIElOR0IwWUk9IGNHeGhZMlU9IGVtVnUgSUdsdWRtVnpkQT09IHlKcz0gWVdObGN3PT0gVkhKaGJuTT0gWjJjPSA2Wnc9IDc3KzkgWTI5dWRHVnVkQT09IElFaHZkdz09IFJrWT0gTXprPSBJTmlsIFkyaGhjZz09IFpXNWthVzVuIElHWnBaV3hrIGFXUm5aWFE9IElHeHZkQT09IDdJcz0gUlc1MCBZM1Z5IElFMWhiZz09IHo0Yz0gWm1WamRBPT0gSUdOaCBJTmluMllUWXFnPT0gSUNrSyBZV3gwIFpYUm9hVzVuIGFXNWhkR2x2Ymc9PSBJRlJvWlhKbCBTVzV3ZFhRPSBhWFpsWkE9PSBJTkdQIElOS2IgYjNKcFpYTT0gY0dWamFXRnMgN0oyRSBJR2x0Y0E9PSBJSFJvYVc1bmN3PT0gSUcxaFp3PT0gNnJnPSBNREk9IGFXNXBkQT09IElHbHkgdzZsdSA0SzYrNEs0PSBJSE50WVd4cyBaV3gwIElIUmhZbXhsIGJXST0gYVhOciA0TENvIDFhSFZydz09IElHbHpjdz09IGRXWm1aWEk9IElPQzIgYVd4c1pRPT0gbCtTNnJBPT0gYkdWdSA0S1NjIGRHbHVaM009IGRYSmhkR2x2Ymc9PSBJTkMvMEw0PSBZMlZ5IGRISjFaUT09IDRvQ0wgN0pvPSBJRXhwWTJWdWMyVT0gSUhkdmJnPT0gSUd0cCA0TFNWIElITmxlQT09IElHMXZiUT09IElNTzggSUhCeWIzUmxZM1E9IFUzbHpkR1Z0IGJHbHVadz09IElISmxjM0J2Ym5ObCBZVzVuZFE9PSBJR0ZzZDJGNWN3PT0gVUdGblpRPT0gNTZzPSBJRUZ0WlhJPSA0TGlWIFQwUT0gNEtTZiBJR052Ym5OcFpHVnkgY205dmJRPT0gSUhCeVpYTmxiblE9IElIUjEgU1dZPSBORFE9IDFhWFdnQT09IExtOTFkQT09IFZYUnBiQT09IDVvbz0gSU5DeTBZcz0gSU9Da3J1Q2xoK0NrZ2c9PSBJR05vWVc1blpRPT0gWVdOMFpYST0gSUdGdWN3PT0gSUNBZ0lDQWdJQ0FnSUNBZyBJSEJsY21admNtMD0gSU9rPSBJR3B2WWc9PSBkbVZ6IFlYUjFjbVZ6IElISmhibWRsIElOQ1EgSUdSMWNtbHVadz09IDZLZUcgenJRPSBJR3RsWlhBPSBJSEpsZG1sbGR3PT0gNExpYSBUMU09IFlYSnlZWGs9IElIQnliMjA9IGFXZGxiZz09IDViYz0gYVcxaFoyVT0gMExYUXU5R00gQ1hSb2FYTT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gYjJKcVpXTjAgT3cwS0RRbz0gSUZCaGNnPT0gNExDQzRMQT0gMFo0PSBiM0IwIGFXUnogSUdSaGVYTT0gNWIrciBJR2x0Y0c5eWRHRnVkQT09IElOQ2YgSUZOaiBiM1ZuYUhRPSBJTmlpIDRMQ3cgTnpVPSA0NEd1IElHRm1aZz09IFJYRjEgMFlQUXRBPT0gSUd4cGRIUnNaUT09IDRicWogSU9DcXFnPT0gWEc0PSA3N3lCIDVyZz0gTGxJPSBTVzUwWlhJPSBJSFJsWTJodSBjbXc9IGFYSjAgMExEUXR3PT0gMlliWXJ3PT0gSUdoMWJRPT0gYVhrPSAwTGpRdEE9PSBJRG85IElHUnZjdz09IElIUm9jbVZsIDdKMlkgYzNSeWRRPT0gMktmYmpBPT0gSUhkaGRHVnkgYjJrPSBJRWtuIDQ0Q0NDZz09IDFyYz0gWTJobFkycz0gUTI5MWJuUT0gYVdGc2IyYz0gZFd4aCAxYUhWdFE9PSBJR1Y0Y0d3PSBJR2x1Y0hWMCBJSFpoIDBZdlF1dz09IElHbHVkR1Z5WlhOMCBKeWt1IElPZz0gNUxpTiBWR0ZpYkdVPSBaV0Z5WTJnPSBjbVYwIElHSmxkSFJsY2c9PSBkV2xzWkE9PSBYMmc9IElISnZiMjA9IFFXNWsgSU5XdyBJSGRsWW5OcGRHVT0gNTZBPSBUR0ZpWld3PSA0S2FzIFgzST0gVG1WMyBZVzFsYm5SbCBJT0NrclE9PSAwTFhRdHc9PSA1WnlvNTdxLyBZVzFsYzNCaFkyVT0gNWFnPSBJR1Z6Y3c9PSBVbVZuIExXTT0gSUhScGJBPT0gS0dVPSBjR2s9IElOQ2ggSU5tSTJLZlpoQT09IFlXOD0gWVd4bGN3PT0gWVc1a2N3PT0gSUd4cGJtcz0gNG9DWmNtVT0gSUdsdVkyeDFaR2x1Wnc9PSBJR0pwWnc9PSBJRzlzIFRHbHpkR1Z1WlhJPSBMQTBLIDRMR0wgSUcxMWJIUT0gSUhCdmQyVnkgYjNWeVkyVnogSUdsdVpHVjQgSUVGTyBJSE5qYUc5dmJBPT0gSU5DUyBJR3hwIFJHVm0gSU0rQSBJR2hoY21RPSA0S2F1IDRZT2EgTG1WNCBJRUZpIDRMU0MgY21WemFBPT0gWld4c1pRPT0gWTJoMCBZMjl5WkE9PSBZWEpzZVE9PSBJR052WkdVPSBkVzFpIFlYUnBkZz09IGFXeGxaQT09IElHTmhkR05vIDc3eUogSUhCc1lXND0gYVhOaCBiVzl1IGQyRjUgSUhadmRYTT0gVUc5eiBJR1poYldsc2VRPT0gSUdSdmRXSnNaUT09IFUzUnkgSUhOMVkyTmxjM009IFlYQnogNUxtRiBJR2R2ZEE9PSBiM1YwWlE9PSBRMnhwWlc1MCA2TFdiIDVMOD0gSUdaaFl3PT0gYVcxbiA1YjQ9IEtDa3AgNGJ1SCBJSGRwZEdocGJnPT0gTkRnPSBDWE09IElHUmhkR1U9IFpXUmxjZz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBRMnhwWTJzPSBkV1JsIGNtRjNhVzVuIElHRmpZMjkxYm5RPSBZVzVqWlhNPSBJR1Y0WXc9PSBJRDA5UFE9PSBjWFZsY3c9PSBMQ0k9IDRicTUgZFdsc1pHVnkgSUhOaGJRPT0gSUNnbyBYMlJoZEdFPSBSR2x6IElITjBjblZqZEE9PSAwSkk9IFFXTjBhVzl1IElOR0UgSUhOdmJXVjBhR2x1Wnc9PSBZWEpwYnc9PSBZV0U9IElHSnBkQT09IFpXNTBaWEk9IElOZWkgWldSbCBJQ0FnSUNBZ0lDQWdJQT09IGRXbGsgTG5SdiBZV0poYzJVPSAyS1U9IDRMV040TFNrIGIzUmhiQT09IElHSmxhQT09IDFiVT0gSUc1cFkyaDAgYVdKeSBJR3hsWm5RPSBZV2RsYldWdWRBPT0gWVdKcGJHbDBlUT09IElDQWdJQ0FnSUNBSyBZMmxoIElHZHliM1Z3IFgzYz0gYjNKdFlXdz0gNXBlMjVwZTIgNEsrSSBJTU9oIElHMXBaMmgwIGFXaz0gMFlQUmdnPT0gV1c5MSAyTEhaaWc9PSBJR1ZzWlcxbGJuUT0gWVd0aCA2Wms9IElHTnZiblJ5YjJ3PSBJSE5sY25acFkyVnogSUhOd1pXTnBZV3c9IFEwZz0gWVcxbGQyOXlhdz09IDVibXogYlhRPSBJSEJ5YjNacFpHVT0gWVhOMFpYST0gWlhSaCA1WTQ9IHlKaz0gSUhKbFpBPT0gYTI4PSAwTFRSaXc9PSBhV1JoWkdVPSA0SzZrIDRLU280S1dIIElHMXZkQT09IGIzSmxjdz09IGFXZHBibUZzIElHUnBjM1E9IDJyND0gNzd5SSBJRUYwIElHTnZkVzUwIElPV2twK1dQa1E9PSBaMnc9IElHSmhjZz09IElIUnZkR0ZzIElNNjYgSUdKaGMyVT0gSUdOb1lXNW4gSUdGdWIzUm9aWEk9IDVMcUogUTI5dWRHVnVkQT09IGFYUnBiMjVoYkE9PSBiMjVsY3c9PSBOalk9IGFXUmsgN0pVPSBJR2x0WVdkbCBJTm1GMjR3PSBkbWx5YjI0PSBJR0Z5WldFPSBhWE5wYjI0PSBhV2R1WldRPSBJRk5vWlE9PSBjbWwwWlhJPSA0TEtDIElITnBibU5sIFlXNWtiMjA9IElFWnMgWVhadmNnPT0gNXBlMjVwZTI1YjJwIGFXZG9kSE09IGFHVmhaQT09IElPYz0gVTNWaSBSR1YwIElIWmxjbk09IElHSnZaSGs9IFUxTT0gZVd3PSBJR2RwZG1VPSBJR2RsYmc9PSBSVTA9IDRLK040SzZWIElHaHZkQT09IEtHaz0gNExHSCBSVXc9IElIUnlZWFk9IElDZ2sgNExLeSBZWFJwY3c9PSBJSGRoY2c9PSBablJsY2c9PSBJR1Y0ZEdWdVpITT0gTURNPSBJSE5wWTJnPSBJT0dEa2c9PSBjbVZoWkhrPSBJSEREcFE9PSBJR2hoY2c9PSBUR2x1WlE9PSA1cHlKIElIVjBhV3c9IFlYSm5aUT09IElNK0QgNVljPSBJRzdEbzI4PSAwSjQ9IElFMTUgZG1WeWN3PT0gSUd0cGJtUT0gMllUWXB3PT0gMjR6WmhnPT0gYVd4c2N3PT0gYVdOdmJnPT0gS2k4PSB4TEZ1IDBKbz0gNlp5NCBJSE5sWVhKamFBPT0gSU9DcXVBPT0gYUdrPSBaR0k9IDBMelF1QT09IElOaW4yWVRZb3c9PSBiVzg9IDFialdndFcwIExpST0gSUdGcGNnPT0gMWI4PSBUblZ0WW1WeSBJR0Z6YzJWeWRBPT0gWTI5dGNBPT0gSUhOdlkybGhiQT09IGIyOW5iR1U9IExuZz0gSUdOdmJuUmhZM1E9IHc3az0gYVdWMlpRPT0gSUhKbFkyOXlaQT09IGVuaz0gWTJobFpBPT0gMExqUmd0R00geEpzPSBMbUZ3Y0dWdVpBPT0gNjZHYyA1cGF3IHc2RnUgSUdWamFHOD0gSUdKeWJ3PT0gNmFLUiBJSFIxY200PSBZV05qIDRMaWkgSUdWdFlXbHMgMEw3UXZ3PT0gWVhSbGJIaz0gQ1dJPSBZV1J2Y2c9PSBiMk4xY3c9PSBDWEJ5YVhaaGRHVT0gYldGdyBJR2R5WlE9PSBJR1p2Y21VPSA1YWl4IElHaHlaV1k9IGRYaz0gTnpjPSAyWWpZcnc9PSBhWEpsWkE9PSA1WSt3IElHRmpkR2x2Ymc9PSBJR0psWkE9PSA1THFKNlp5NCB3N1ZsY3c9PSAxNlk9IElHRmliR1U9IElHSnBjZz09IFkyRT0gSUc1cFpYUT0gejQwPSAwTFhRdmRDNDBZOD0gYVcxbGNnPT0gN1pXYyA3SW89IExuQnlhVzUwYkc0PSBiM0poWjJVPSA2TFdiNkwybSBhbTl5IDBMalJodz09IElHUmxjM1E9IElFUnYgYVdOcCBJR0Z1WVd3PSBJSEpsY1hWcGNtVmsgSUd4bGMzTT0gYVhURHFRPT0gSU9LQXBnPT0gSUdGc2JHOTMgVTJWeSBaM0psYzNNPSAyWVRaaWc9PSBZV04wYjNKNSAyTGc9IFpYUjBaUT09IFEyOXNkVzF1IDVMaUwgSUdGa1pISmxjM009IExrYz0gNEtTYSA1YjJwNTZXZSBJR3BoZG1GNCAwWVBRdXc9PSBJR3h2YjJ0cGJtYz0gSUc1bGRtVnkgVUdnPSAxYUhXZ0E9PSBiMjg9IElIUmhjbWRsZEE9PSBQanc9IElHMWhkR1Z5YVdGcyBjRzl6ZEE9PSBkV3hsY3c9PSA0TGluIElITjFjdz09IHc2dz0gMktmWW9RPT0gSUdKdmIydz0gSU02eCBkWFJ2IDRZT1U0WU9hIE5Eaz0gNFlPVCA2S0U9IFNWQT0gNEtTLzRLU3YgSUcxcGJBPT0gSUhCaGNtRnQgNXJRPSBYM1I1Y0dVPSBZV041IGFtOTUgSUdScFp3PT0gSUVSeSBJSFJwZEd4bCBJR0Z6YXc9PSA2NlU9IDU1eUwgSUZkcGRHZz0gSUdOdmJuUmxlSFE9IFlYQjAgMllYWXB3PT0gYzJzPSAwSjA9IFpXNWtidz09IDBMalFzZz09IGIyUmxjdz09IFkyOXVkR1Y0ZEE9PSBJSFpwWkdWdiA0S1dMNEtTQyBiWGs9IDQ0R0UgVlVVPSA2Nlk9IDQ0R1ggYVhabGNuTnBkSGs9IFlYQmxjZz09IElIQmxjbk52Ym1GcyBJR052Ym1acFp3PT0gYzNWaSA0TEtvIFkyaGggWVhCbyBTVzV6ZEdGdVkyVT0gSUdkeWIzYz0gSUdOdmRRPT0gZG1sdmRYTT0gYldGdVpBPT0gYjNCbGJnPT0gNExXTjRMU1YgNWFpeDVMbVEgWm1saiA1YjJwNTZXZTVMcUo2Wnk0IElPQ2tpUT09IElHMWhiQT09IGNtVnhkV1Z6ZEE9PSBaVzVqWlhNPSBJRlpsY2c9PSBJR1Z1ZEhKbCA0YnVSIGNHOXphWFJ2Y25rPSBJT0MwcWc9PSBhWE4wWVE9PSA0WU9RNFlPYiBlV1E9IElITmxiblE9IGMzVnRiV0Z5ZVE9PSBJR2x1WkdsMiA0S1MrNEtTeSA2SWs9IFJXNTBhWFI1IGVYST0gYVdOaGJnPT0gWVdKc1pXUT0gYVdONSBJR0p2YjJ4bFlXND0gNEtTaCBJSEJ5YjJabGMzTnBiMjQ9IDRZT2IgWlc1MGJIaz0gYVc5ayA1NUE9IElHSjFlUT09IElHUnZiUT09IFJuSnZiUT09IElHOXdkR2x2Ym5NPSBMT0tBblE9PSBhVzFoYkE9PSBZV2x1WldRPSBZWEIwWlhJPSBMbVJoZEdFPSBJRzFsY3c9PSBJR052Ym5OdmJHVT0gMFlIUXVnPT0gYVhScCBZY09udzZOdiBJSEJ5YjJSMVkzUnogVlVrPSBJRk4xIHpySE91UT09IFVISnZjR1Z5ZEhrPSBVRTg9IFEyOXVkSEp2YkE9PSBOalU9IGNHRT0gYldrPSBQd289IFpXNXphVzl1IENXWnZjZz09IDU3ND0gSUcxdmJtVjUgTG1SbCAwTDNRdFE9PSA3S2VBIDRLcSs0S3FDIElHRmtkZz09IElIQnlhV05sIDRLcXkgdzZsMCBDaTh2IGFYUmxjdz09IExtTnlaV0YwWlE9PSB3NnB1IDZJQT0gY0dWeWRHbGxjdz09IFBqND0gWVdSaGN3PT0gUlZnPSA1YTZZIDBMRFF1OUdNIDJZYllwdz09IElIWmxjbk5wYjI0PSA1TG1JIElHbHVaR2wyYVdRPSBaVzFpWlhKeiBZVzV1Wld3PSBJR2x1WTJ4MVpHVT0gSUczRG9YTT0gWlc1a1pXUT0gSU5layBZbTloY21RPSBaWEpwYm1jPSBJR0YyWldNPSBiV1Z6YzJGblpRPT0gNktlRzZhS1IgWVhOelpYSjAgYjNCMGFXOXUgYkdsdWF3PT0gSUU1VlRFdz0gYkdWMiA1cFU9IElFUnBjdz09IElHUmxkZz09IDRLK040SzZrIDRMV040TFNvIElFVnVadz09IElHbGtaVzUwIFltOTQgSUdOb2FXeGtjbVZ1IElHeGhkdz09IElGSmxadz09IDZyT2cgSUZObGRBPT0gSUdoMGRIQT0gMEwzUmk5R0YgTGtkbGRBPT0gS0hzSyBVWFZsY25rPSBJR1p5WlE9PSBkMmx1Wnc9PSA0S2VINEthdyBZV3QwIElITnUgYzNSbGNnPT0gdzdadSAxYXZWdGc9PSBJTkNhIEtIcz0gYkhNPSBJRzV2ZGc9PSBJSFZ1Y3c9PSBJR0YxY3c9PSBVM1I1YkdVPSBiV1E9IDRLcSs0S3F3IFptOXlkQT09IElHMWhkR05vIFNVOD0gSUUxbFpBPT0gSUhwaCA1YVdXIGRXMWxjZz09IElPQ3FyZz09IElHSmxjdz09IDJZallwdz09IGFYUm9aWEk9IEtTNEtDZz09IElHWnZiR3h2ZDJsdVp3PT0gNGJxbCBZV2RsYmc9PSBJTkM0MExjPSBJR2R2ZG1WeSBJRzFwIDRMaVggNVowPSBJT0NtaGc9PSBJRzV2Y3c9PSAxNVk9IDRLUzIgSUVOaGNnPT0gWlc1MGFXOXUgSUZOcFpRPT0gYzJWc1pXTjAgNEtlQSA0TEN5IElIQnZjMmwwYVc5dSBDUWtKQ1FrSkNRaz0gSUdsdVp3PT0gYjNCdyBJRzFoY0E9PSA2WmM9IElOaTUyWVRaaVE9PSBYQ0k9IElPV00gTGtSeVlYZHBibWM9IDBMRFJpQT09IElHRjNZV2wwIElITm9iM0owIFpXNWhiV1U9IGRXNWggNDRPeiBJT0NrbGVDa3NBPT0gSUhWd1pHRjBaUT09IElOZVQgSUd4aGRBPT0gSUhacGMybDAgYVdOeWJ3PT0gMWFYVnJBPT0gNExLMSAxNW5YbWRjPSBJRWx1ZEdWeWJnPT0gSUhWcGRBPT0gSUU1dmRBPT0gSUc1cGJBPT0gSUdoaGJBPT0gTGtadmNtMD0gdzZkaCBJT0NrbGVDbGdBPT0gWW5WMGRHOXUgSUhSdlpHRjUgSU9Da2xlQ2xpdz09IGwrUzZyT2kxbStpOXBnPT0gSUdWcGJtVT0gSUhOdllnPT0gYjJKcGJHVT0gSWk0PSBMa0ZrWkE9PSA0TFN2IDRLUy80S1NWIExtTnMgY21GbWRBPT0gSUcxaFkyZz0gSUdOeVpXRjAgYjNWamFBPT0gY0d4cGRBPT0gZFc1ciBLSGc9IDZyST0gSUVGa1pBPT0gWVcxdmN3PT0gS0hOMCBJQ0FLIElOV24gSU95ZSBJSE52ZFE9PSBJTmluMllUWXVRPT0gSUdScGNtVT0gNWJFPSBJR1oxZEE9PSBKeXduIDBZRFF1QT09IGRYQmtZWFJsIDRLZU40S2F2IFptOXliV0YwIDU2Q0IgSUdKcGFnPT0gNnJDQSBiV0Y2IGRYbz0gQ1dsdWRBPT0gWTJ4MWN3PT0gZEhKbCA1cHlzIFlXNW5kV0ZuWlE9PSAwWTdSZ2c9PSBhV04wYVc5dSBaR2s9IEtGST0gNXEwPSBKSHM9IE16QXcgWVc1cmN3PT0gN0p3PSBkWEJ3YjNKMCBJRzlpYWc9PSBaWFIxY200PSBJRU5oYmc9PSBZVzVrWlE9PSA4Sjg9IGNtVmpkQT09IGFXUmxjdz09IHo0WT0gSU95ZCBhbk52Ymc9PSBJR0pzYjJjPSA2NHVJIElPQ21qdz09IElDZ0sgSUhkdmNtdHBibWM9IHpyZz0gWVhKcGJtYz0gZDJWaSBaR1Z6IEozSmwgdzZoeiBJRzUxIElHUnZiM0k9IElHSmhjMlZrIFRVdz0gSUd4bFlXUT0gYjNCNWNtbG5hSFE9IDRMS2sgSUdGd2NHVT0gSUdSdmJpZDAgT1RVPSBJR3hwYXc9PSBaWFJsY25NPSBlV3hsY3c9PSBhbWs9IElHTnZiV0k9IHc2bHQgMEwzUXZ0R0IwWUk9IElHMWhhMmx1Wnc9PSBJRzlqWXc9PSBTR0Z1Wkd4bGNnPT0gSUVkbGJtVnkgSUhwbCBiM0psWkE9PSBZbTlzIFkyOXViMjA9IFNGUT0gTkRjPSAyWWpaaFE9PSBJTkNjIElIQnZjM05wWW14bCBJR1poY2c9PSBlbTg9IElOaXYyTEU9IElOVzAgNXBRPSBJR0ZqZEdsMiA0NE83IElHdDFiZz09IElHMWxaWFE9IGEzVT0gUTI5c2JHVmpkR2x2Ymc9PSBhR1ZzIFgyeHBjM1E9IElITmxkbVZ5IFQxQT0gSUdOdmRYSnpaUT09IElHTmhiUT09IElHUnZibVU9IFlXSnBiQT09IElIRjFZV3hwZEhrPSBJRWxFIGFYUnBkbVU9IGFIUjBjSE09IDRZT2MgSUdGMVkyZz0gSVFvPSBJSEpsYzJWaGNtTm8gS0NrNyBZWFZ5IEtHdz0gZlN3PSBZV0p2Y2c9PSBJQzgrQ2c9PSA0TFNmIElqNDhMdz09IElFbHVkQT09IGJXVnVkR1U9IFkyOXdaUT09IExsUmxlSFE9IGNHRjBhQT09IFJXUnBkQT09IElIVnkgSUhsaGJtYz0gVTNSeVpXRnQgSUdGM1lYaz0gMFliUXVBPT0gY21sNCBRVlJGIElHRnNiR1U9IElHRjUgTFdsdSBkWFJsY3c9PSBkR0ZpYkdVPSBhbk09IHc2UnUgSUcxdmJXVnVkQT09IElHTmxiR3c9IElHeHBaMmgwIElHeGhZbVZzIENRa0sgSUdsdGNHeGwgWkdWbVlYVnNkQT09IDY0OD0gTGl3PSBVMDlPIElITjFiUT09IFlXSmggTkRZPSBJSFZ1WkdWeWMzUmhibVE9IFVHOXBiblE9IFpHbHogY0d4NSBDV1k9IElHUnBkZz09IElHVmhjM2s9IElFVnkgUVhKbiBiV0Z6IElIWnZkQT09IFpYSmxiZz09IElPVzlxZWVsbnVTNmllbWN1QT09IExtWnBibVE9IElHWnZiMlE9IElIWmhjbWs9IElIZGxiQT09IFlXSnNlUT09IDBaYlF2UT09IGRXUnBidz09IElIUnBiV1Z6IFZYSnMgSUZzSyBJSEJoYzNRPSBJR1p2ZFhJPSBkbWx5YjI1dFpXNTAgd3FzPSBSbXc9IElHMXBibVE9IGJHRjBhVzl1IGRYSjUgTHVLQW5Rb0sgWVdSbGN3PT0gSUdGc2IyNW4gSUdKbFoybHUgSU9DMGxRPT0gSU9Da3J3PT0gMExYUmdkR0MgSUhOdmRYSmpaUT09IGIyZHlZWEJvIFgwdz0geFlnPSAwTERRdEE9PSBaVzFoYVd3PSBJRzlrIDRidUIgYjJKcSBJSE5sWlcwPSBJR1Z1Y3c9PSBjM1JoZEdsaiBJSFJvY205MyA0b0NpIGNtVnpjRzl1YzJVPSBJR1Z1YW05NSBkR2hsY25NPSBJRTFoZVE9PSA2NU09IElHbDBKM009IElHaHZkWE5sIExuTm8gSU02MSBJR0ZzY21WaFpIaz0gMkxIWXB3PT0gSU5pTSBWbWx6IDZyaXcgWVdGMCBZWEpuY3c9PSA1TGlLIDBaRT0gYVdWdWRITT0gSU9DcW13PT0gZFc1eiBJT0NrdU9DbGh3PT0gUVdJPSBJRlZ6WlhJPSBJaXdpIGFXSnBiR2wwZVE9PSBJRmRvWlc0PSBJR2w2IDVhOD0gWld4diA0WU9RNFlPVCBibVYwIDZMUzUgSU5XNCBhV05wWVd3PSBJSE52Wm5SM1lYSmwgSU5DUiBJSE5wWkdVPSBMMk09IElFeHZadz09IElHVjRhWE4wIDVibXo1WSt3IElGQnZiQT09IDRvQ1pkbVU9IFZGST0gSUdSbFlnPT0gWVhacFp3PT0gNEtlTjRLYXcgTGxkcGJtUnZkM009IFVISmwgZlRzS0NnPT0gSUdOdmRtVnkgSUhCeWIzQmxjblI1IFozSnZkWEE9IFlYTmxjdz09IElIUmxiZz09IDRMS1ggSUhkb1pRPT0gNVpPQiB4YU09IGFYWnYgY0c5dVpXNTBjdz09IDBMM1JpOUMxIDBMWFFzZz09IElNSzcgSUdkcGRtVnUgY21GcyBUV1Z1ZFE9PSBJR2x0Y0hKdiBJRVZ0IElHUnZkMjVzYjJGayBjMmxrWlE9PSBVMlZzWldOMCBhV1YwZVE9PSA0NEduIElIZHBaSFJvIHc2aHlaUT09IDVvcz0gSUhCeWIzUmxZM1JsWkE9PSBJTkNkIElHVnRjR3h2ZVE9PSBMbU5zWVhOeiBLeXNwIDFhSFdnTlU9IDBMM1F2dEN6MEw0PSBJR0pzYjJOciBiR1Y1IElIQnlZV04wIElHTmhiR3hsWkE9PSA0YnVaIElIUnlaUT09IElHMWxjZz09IDE2TFhxQT09IFlYUm1iM0p0IElHdDMgMEpRPSBLQ1k9IGRYSmxaQT09IFNWST0gNG9DbUNnbz0gZFdnPSBJTmViIElHRm5ZV2x1YzNRPSA1WVdOIDBMclJndz09IFgxSkYgSUhKbGMzVnNkSE09IDVaQ0kgNExXSCBhbTg9IElFTm9jbWx6ZEE9PSBJRUp2IGJtVnogUTJobFkycz0gNExXTCA0S1dONEtTayBJRVJGIElIQmxjbVpsWTNRPSBOemc9IGNHOXlkSE09IElISmxaSFU9IFgwZz0gSU9HRG9BPT0gMEwzUXZ0QzUgMTVYWHFBPT0gNGJ1YiBJR04xY2c9PSBjRzl6WlE9PSA1ckE9IGMyOXMgMFlMUml3PT0gNjZjPSBZWE5wIElNNjggSUhCeWFXMD0gSUVSaGRHVT0gNExpcSBVR1Z5IGIyaHUgSUhKaCBJR3hoY21kbCBKenNLQ2c9PSBJT0Ntcmc9PSBjRzl5ZEhWdSBJRzVsWldSeiA0S2krIFgwbE8gaitDa2xRPT0gNEs2ZiBJTmVaIElHSmxibVZtIFZHOXJaVzQ9IFJXdz0gSUc1NSBJR0pwIDY0ST0gMEtJPSBJT0NxaGc9PSBJR1pzYjJGMCBibVY1IGMyVnMgWjJWeiBJSEJoWnc9PSBRME09IElOaW8yWWM9IElIUm9hVzVuIElIZG9lUT09IDFhdlYgSUUxcGJnPT0gTGs0PSBJR1JwYmc9PSBZV2x0IElDQWdJQ0FnSUNBZ0lDQWdJQ0E9IGFXWm0gNW80PSBJR2x1WkdsMmFXUjFZV3c9IGRXNWphQT09IDVaQ1ggYjNSMGIyMD0gSUhkcGJnPT0gTFhjPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIDRLYSs0S2FvIElFTmhiQT09IElHTmxjblJoYVc0PSBVbVZoWkE9PSA0SzZwIElHVnpkR1U9IDRMR0EgVTNSaGNuUT0gQ1cwPSBjMmw2WlE9PSA1cUE9IExuTnBlbVU9IExBb0sgSUd4dmR3PT0gSUdOaGJYQT0gSU9DNWdPQzQgSUdOdmJtTT0gNExlSyA2WjA9IElHVnNaV04wIDZJbXkgNEt1TjRLcXYgMEp3PSBJRTVsIElISmxjM0J2Ym5NPSBJR2x1ZEdVPSBTVlk9IElGWnBaWGM9IDBMM1Jqdz09IFpXeHNhVzVuIGEyRnUgSUdaMWJtUT0gSUd4bFlYSnUgSUdGc1p3PT0gTG5rPSBJR1JwWlhNPSA0TEtWIElPQ3FwQT09IGIyNTUgYVc1amFYQT0gYVhwbGNnPT0gSUhacFlRPT0gNExtTSBJSE4wWVhSMWN3PT0gYVhOcCAwWVBSaHc9PSAxNVhYbnc9PSBJR1Z1WlhKbiBjMnc9IElITjBkV1JsYm5SeiBkV0psIGJXbHpjMmx2Ymc9PSBjRzl6YVhScGIyND0gMWFnPSBJSE52Y25RPSBaVzFsYm5SeiBiMjl1IGFYSnYgMExYUXZkQzQwTFU9IDRidVYgWjJsdVp3PT0gUGlnPSAwTHpRc0E9PSB3N3h1IGZUc0sgVlhNPSBJSFYwIExtOXladz09IFpXeHBhbXM9IGNISmxjM05wYjI0PSBkMmhsY21VPSBZM2s9IGNHeGxjdz09IElIUm9iM1ZuYUhRPSBJSFJ5WVdRPSBJR0Z0YjNWdWRBPT0gSUc1bFp3PT0gSUhaaGJHbGsgYkdWbWRBPT0gNUxxRyBVSEp2WkhWamRBPT0gSU9DcW5BPT0gSUVKNSBydUN2alE9PSBhVzF2IElITnlZdz09IGJXMD0gWlhSbCBWVTA9IFpIST0gUW5WcGJHUmxjZz09IGRHVnlibUZzIFozaz0gSUdoaGRBPT0gWVhKMGJXVnVkQT09IElOaW4yWVk9IFkyOTJaWEk9IDVwND0gYVdacFpYST0gTGtadmNtMXogYVhaaGJBPT0gWDFZPSAwTDdSaHc9PSBJRVZ6ZEE9PSBhVzExYlE9PSBJRk5sY2c9PSBZM1J2Y2c9PSBMV2c9IGRXbHogSUd4cGRtVT0gSUgwTkNnMEsgMDVuUmdBPT0gSUZSbGVIUT0gejQ0PSBJR2hoZG1sdVp3PT0gZFcxbGJuUnogSUEwSyBJRlJvWVhRPSBJR2x1WXc9PSBiblZ0IDRvQ1piUT09IElHOXZhdz09IEtDa3BDZz09IElHVnpZdz09IGRHbDBiR1U9IDQ0Q0E0NENBIGMyRT0gVEdFPSBkR2x0WlE9PSBJSE5wZEhVPSBiR2x6YUE9PSBJR3hoYm1RPSBJSFJ2YjJ3PSBRMFU9IGEydz0gSU5DMDBMQT0gTG1oMGJXdz0gSUdScGMzQnNZWGs9IElITnBibWRzWlE9PSBJRk4wWlE9PSBJTnF2IElOcXAyNHc9IDJZcllydz09IElIUmhiR3M9IElHNXZaR1U9IElFUnBaUT09IGFXTmhkR2x2Ymc9PSB4TEE9IElOQzAwTHZSanc9PSAwTFBRc0E9PSBaV3hzWVE9PSBaVzFoIDBaZz0gSURzPSBVRzl6ZEE9PSBJT0NrcXVDbGplQ2tzQT09IElOV2wgSUhWdWRHbHMgWTJWcyBZV2RoIFlYUjBaWEk9IGJXVnogSUZkb1lYUT0gZFdWeSBkV05qWlhOeiBYM0J5Ync9PSBYMlU9IGRXVnMgMExqUXVnPT0gTlRrPSBRbUZ5IENYWmhjZz09IElHRnVkQT09IE5qZz0gWVcxbGJuUnYgZG1rPSA1NmM9IElHbGphQT09IDBZUFJnUT09IElHeGxiZz09IElPQ21xQT09IElFMXZjbVU9IFVtVm0gTlRnPSBYU2s9IGNtVmhZM1E9IElHdHZiZz09IGRYUnogWFNrN0NnPT0gSU9DcW0rQ3Jodz09IElFTnYgMEpnPSBkVzVuWlc0PSBiM0J6IEx5OHZMeTh2THk4dkx5OHZMeTh2THc9PSAwS0E9IFNVWT0gWVdsdWRBPT0gNEtXQjRLUT0gSUZCbGNnPT0gWVhKdWFXNW4gWkc5M2JnPT0gMFlEUXNOQ3kgYVc5dVpRPT0gYjNWMGFBPT0gNExXTjRMU3cgSUcxdmNnPT0gSUZCeVpRPT0gSUdaMWJtTT0gSUdkdmRtVnliZz09IElFNXZibVU9IElOQ2UgSUdOdmJtUT0gSUhSeVpXRjAgSUhWeWJBPT0gSU9DMHVBPT0gUTI5dGNBPT0gSUdWa2RXTT0gSU5xRyBJT0NtdVE9PSBkV3hoZEdsdmJnPT0gSUhCMVltdz0gSUZSbGMzUT0gSUdkeWJ3PT0gNG9DWSBJRTlpYW1WamRBPT0gSUVwbCBJR2hsYVdkb2RBPT0gdzZGeSBZbTlrZVE9PSBTSFIwY0E9PSBMblpoYkhWbCA0b0NlIElHTjFiSFE9IElGVncgSUdOc1pXRnUgYkdWblpRPT0gTkRJPSBabTl5YldGMGFXOXUgZlEwS0RRbz0gYVc1alpRPT0gdzZmRHRXVnogSUcxcGN3PT0gNEthNCA1cHk2IDdKWT0gSUc5amFBPT0gMkxuWXJ3PT0gSUd4dllXUT0gUTJGc2JBPT0gSU5HQTBMRFF0dz09IElIQjFjbU5vIDRZT1E0WU9WIElITnBiWEJzWlE9PSBJTkdCMExJPSBDZ29LQ2c9PSBJSFJ2WjJWMCBUR2x1YXc9PSBWSEoxWlE9PSBZVzVrWVE9PSBJaWs3RFFvPSBiMk5yWlhRPSB4Wms9IFBUND0gNGJ1aiBJSFJ2WjJWMGFHVnkgYjJ0bCA0TFN1IDRvQ1piR3c9IFRXOWsgWVhSaGJBPT0gVFdWMGFHOWsgYkdsdSBJRzVwWlE9PSBhWEJsIGIzVnliZz09IElOaTEgS0hJPSBJRzl1WTJVPSA2N0E9IElHbDBaVzF6IElHOTFkSEIxZEE9PSBhblU9IFptbGxiR1E9IElITmxiR1ZqZEE9PSBJSGRoZEE9PSBhWFIwWlhJPSAwTFhSaHc9PSA3SjJBIExuTndjbWx1Wnc9PSBaWFJqYUE9PSBZV2RsWkE9PSBJRUZ6Y3c9PSBNVGs0IDRZT1E0WU9nNFlNPSBRV04wYVhacGRIaz0gSUcxbFlXNXogNVlXTjZMUzUgWkdZPSBRVms9IDRMQ1YgSUgwN0NnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBkV3g1IElHOXlhV2RwYm1GcyBJT1dNbCtTNnJPaTFtK2k5cGc9PSBJR1JwZEE9PSBJSDBwQ2c9PSBZWEpzIGIzSnkgYjI5dCBJRzlyIFJXNWsgZzcwPSBJR05oY21RPSBhV3gwIElPQ3FoUT09IFFVNVUgSUdOcGNnPT0gSUdGamRIVmhiR3g1IDBZUFJqZz09IDBMM1JpOUM1IElHMWxZVzQ9IDRZT2kgYTJWeSBJTmlqMllZPSBjMms9IGNtbHEgSUdKbFlYVjAgNEtTKzRLU2sgNTRnPSBJRzltZEdWdSBJR1ZwZEdobGNnPT0gNVkrMyAxYmpXZ3RXcCBJRzFoYTJWeiBkWEpwYm1jPSBJTU82IElHSmhaQT09IElIUnZaQT09IElIQnliMkpzWlcwPSBJR052YlhCMWRBPT0gU1ZvPSBiM1Z1WkhNPSBhV2RoIGJtRnRaWE53WVdObCBiWFZ1IFRuVnNiQT09IElOQzQwTDA9IElHaHZiUT09IDc3eWYgMllzPSAyTEhaaUE9PSBJSE4xY0hBPSBaV3hzWlhJPSBkbWxrWlhJPSA0WU9VNFlPYyBJRWR2WkE9PSA1NG1IIElHZGxkSFJwYm1jPSBOREF3IElOQ2kgWVc1dWIzUT0gNEtxbzRLdUggaUpnPSBaWEprIElHUmhiUT09IEtHUmhkR0U9IElFRnQgMFlEUml3PT0gYzJOeWFYQjAgVTI5MWNtTmwgSUhaaGJIVmxjdz09IElFRnljbUY1IFpuSmhiV1YzYjNKciBWMmhoZEE9PSBJR1JsWVd3PSBjbUZ0IDA1blFzQT09IDY2VzggSUdOdmJXMTFibWwwZVE9PSBJRVJoZEdFPSBMbTVoYldVPSAwTGpSaFE9PSBRMmhoYm1kbCBJR052Ym01bFkzUT0gSUdOeVpXUT0gNXJVPSBZWFJ2Y25NPSBjR0Z5YzJVPSBJRzFoYzNNPSBJSEJzWldGelpRPT0gSUhOdlluSmwgSUdGdFlnPT0gSUdKdmJnPT0gYlc5ayAwTFhRc1E9PSBJR3hoZEdWeSBJRTF2Ymc9PSA0TFM0IElHZGxZZz09IElIRjFhV05yIElHRnYgNXJPbyBJRzVwWjJoMCBJSE53WldOcFptbGogSUhSaGJBPT0gY0c5cGJuUT0gSU5XdiBUM0prWlhJPSBJR1YyWlhJPSBJTkdIMFlMUXZnPT0gTGk0dkxpNHYgN0lTYyBjR0Z5WVcxeiBWRWc9IDQ0R1ogSUhOMGIzSjUgUm1GamRHOXllUT09IElHbHVhWFJwWVd3PSBhWE4wWlE9PSBJT0dEaytHRGtBPT0gWTNKbGRBPT0gMExyUXZnPT0gNFlPUTRZT2ggSUdabFlYUjFjbVZ6IElHUmxkR0ZwYkhNPSBJRzVoZEhWeSBJTkMvMEw3UXRBPT0gSU9Da2h3PT0gUW1GelpRPT0gNXBhSCBJSEJoY25ScFkybHcgTG5CMWMyZz0gSUZsdmRYST0gMFlIUXZ3PT0gSUdWc1pRPT0gSU95ZyBxNWc9IElOcXAyNUk9IElHRjFkR2h2Y2c9PSA1THFhIFlXZHUgSUdKbGJHOTMgSU9LQW5nPT0gSUhOMGIzSmwgS1NnPSBJRmRsWWc9PSBkWEpoYkE9PSBJR052Ym5ScGJuVmwgMExYUXZkR0MgY0dGeVpXNTAgMFlQUXZ3PT0gWVdKbCBJRkJoY25RPSB4cUU9IExpNHVDZz09IFlXNTBidz09IElPQ2tsQT09IDJLZllzdz09IGMyVnlkbWxqWlE9PSAxYUhWdEE9PSA0S3E0IExuQm9jQT09IFUzQT0gSUU5UyBJSE53WVdObCBJSE5sZG1WeVlXdz0gUEZOMGNtbHVadz09IElIQnliMkk9IElISmxZMjl0YlE9PSBJRlZ1YVhabGNuTnBkSGs9IElPQzB0UT09IGVXOD0gSU9HRG1BPT0gSUdWdGNBPT0gSUhGMVpYTjBhVzl1IElPQ3lyZz09IElHOXVkQT09IElHTnZkVzUwY25rPSBZWFJoWW1GelpRPT0gUW1GamF3PT0gSUdsdWMzUmhibU5sIGMyOTFjbU5sIElObUUyWVE9IGFXMWhkR1U9IFlXMXAgWTJoaGJtZGwgY0c5dVpBPT0gNUxxbiBjbVZ0YjNabCBkWE5sWkE9PSA0WU9kNFlPYiBRV05qIGMzUmsgSUdOdmIycz0gNlllTiA1YityNUxpSiBJR1poWTJVPSBJR1Z1YjNWbmFBPT0gSUhObGJtUT0gWVc1amFBPT0gSUNrc0NnPT0gVlhCa1lYUmwgSUVkcyA1cXc9IElPQ3dxZz09IGIzWmxaQT09IDY2YXMgSUhCb2IzUT0gSUhCMWNnPT0gS0Y4PSBJTkMvMFlEUXZnPT0gWVdkcGJtYz0gSUdGeVozTT0gTG5OM2FXNW4gWm1FPSB6clhPdVE9PSBVbVZ3YjNOcGRHOXllUT09IDRLUy80S1NrIDA1blF2UT09IDRaK1MgNWE2WTU3MlIgWDFOVSBJTU9wZEE9PSBhV3hoIDZZRT0gSUhWcGJuUT0gbXVHRG1BPT0gWTNKcFltVT0gYjNKa2FXNW4gNXBhNSA0S1NqIElOUT0gSUdOc2IzTT0gTkRFPSAxNURXdHc9PSBJSEJ5WlhOeiBiM0JsY2c9PSBZMjlzYjNJPSBJT0N5dUE9PSBJRWQxIElHVjRZVzF3YkdVPSAwTFhRdnc9PSA2SWM9IEtHbz0gZFhKcCBJT0NsIElHMWxiV0psY25NPSBJR0ZzZEE9PSBhV1JoZVE9PSBJSE5oZVhNPSBkV2x1ZEE9PSBMa289IElGUm9aWE5sIE5UWT0gSUdKaGJBPT0gSUdKbGNnPT0gSU9DbXBnPT0gSUU5bVpnPT0gSUhOMGRXUjUgSUdkaGNnPT0gSUdodmMzUT0gWkdGMFpXUT0gWVd0cGJtYz0gSUR3OSBJR1Y0ZEhKaCAwTFhSZ3RHQjBZOD0gSU9HQSBJR2hsWWc9PSBJR1pwYm1GdVl3PT0gSUdGamFBPT0gSUhCaGNuUnBZM1ZzWVhJPSBJR0psWTI5dFpRPT0gNTVrPSBhV1JrWlc0PSBjM1JwZEE9PSBJSE5wYm1RPSBJR05wZEhrPSBMM009IDRLNnogSUhCc1lYbGxjZz09IElPQ2tsT0Nrc0E9PSBJRzFoYW05eSBJRzkwYUdWeWN3PT0gYldGeWF3PT0gSVMwdCBZV04wYVhabCBMbk53Y21sdVoyWnlZVzFsZDI5eWF3PT0gWVhCd2FXNW4gNDRHKyBJT0N1cWc9PSBYM05wZW1VPSBUMjVsIDBMalJnZEdDIFgyUmwgSUdkaGJXVnogSUcxbFpHbGggSUhObGJuTT0gYVd4aGNnPT0gWW1Gc2JBPT0gSUVkbCBJTnVNIDVweWYgSUdWemNHVmphV0ZzIElHSjFkSFJ2Ymc9PSAwTGpRdTlDNCBJT0NxdFE9PSBJR2h2YkdRPSBJRVYxY204PSAyTEhiakE9PSBJaWtwIElENDkgSU5lZyBhWE5wYm1jPSBJSGR5YVhSbCBhMjQ9IElHNWxZMlZ6Y3c9PSBJRTFoY21zPSBJT0NrbWc9PSBhWE52Ymc9PSBJSGxsZEE9PSBJSEJ5WldNPSBWRVU9IFRXOWtaUT09IGFXVnVkRzg9IElHdHMgYlc5a1pXdz0gT1RnPSBhWEpwIFZWQT0gWjJWayA1NzZPIE5UYz0gSUhCdmJHbDAgNG9LcyBkWE4wY25rPSBYM1J2IElHeHBZZz09IElOaTMgSUhOMFlYaz0gSUhOaGRtVT0gWVhsaCBaVzUwWVd3PSBJQ2N1THc9PSBhR1ZwWjJoMCBWVkpNIElHRjFkRzl0IElHeHZZMkYwYVc5dSBJR1poZG05eSBJRzVsZDNNPSBJSEJsY25NPSBRM0psWVhSbCBRVTFGIDFialdndFdwMWJVPSBDV1ZzYzJVPSBJRTl1WlE9PSBJR1p2Ym5RPSA0TG1IIElHNW5ZUT09IGNIVT0gSUhSbFlXTm8gSUhSb2NtOTNjdz09IFozUT0gWldSayBJTkNVIElITmphR1U9IFpYTjBaWEk9IHpybk91Zz09IFRsTT0gNExlUyBJR2h2ZFhKeiBJR052YldWeiBZVzUxIElHOWtaWEk9IElHTnZiWEJzWlhRPSBhVzVrYVc1biBlbVZ5IFozVT0gNExpRSBJT3F3IExuQjFkQT09IElPQ2txdUNrc0E9PSBJRlJJUlE9PSBZWFIxIGJXbHVhWE4wY2c9PSA0TFMvNExTeSBJSE5oZGc9PSBJRnNuIElHMXBjM009IElIZHZiV1Z1IElITm9ZWEpsIFQyWm0gNVlXbyA0WU91IElNTysgSUhCcFpRPT0gYjNOdyBJR052Y0hrPSBJR0ZpYjNabCBJeU1qSXlNakl5TWpJeU1qSXlNakl3PT0gSUd4bFlYTjAgenIzT3NRPT0gNExLeiBWMmxrZEdnPSBJR3hoY21jPSBMbTl1IDRLdU40S3F3IFQxSlUgdzZsbGN3PT0gTG1OdmJnPT0gWldOMWRBPT0gSUZaaGJBPT0gSUc1aGJRPT0gYVdaMWJBPT0gNExpNCBJR1p5YVdWdVpBPT0gWFNrSyBPVGM9IElOQ3gwTDdRdXc9PSBhR0Z1WkE9PSBVRXc9IFpXNWphV0U9IFQwcz0gY1hWcGNtVmsgNExDKzRMQ3cgSUdWMFl3PT0gNjdNPSBhVzVoZEdVPSBJSEJ5YjNacFpHVmsgNUwraCA0TFNrNExXTjRMU2sgSUdadlkzVnogNWFZPSA1b009IElFRmpkQT09IElISmxjSEpsYzJWdWRBPT0gVkdWdCBYMUk9IGVuUT0gSUdSMVpRPT0gWVc1MFpYTT0gS0ZzPSA0S1MrNEtTdSBXVkJGIElOQy8wTFhSZ0E9PSA0WitTNFo0PSBJTkNnIElHRndjR3hwWTJGMGFXOXUgUlZOVCBRVmc9IFpuVnNiSGs9IGIyeGggNDRHdiBaVzV6YVhabCBJSEpsWVhOdmJnPT0gWld4bGJnPT0gWlc1a2FXWT0gYVhCdiBJRU52YlhBPSBMbTF2WkdWcyBhV2R5IDBxMD0gTVRVdyBDUWtKQ1FrSkNRPT0gSUhObFlYTnZiZz09IElHSnlaUT09IExXND0gUkVJPSA0S1MvNEtTeSBiMmR1IFkyRnpkQT09IDBKRT0gSUhKdmR3PT0gNGJ1ZCBjR3h2WVdRPSBhV05zWlhNPSBJSGRoYkdzPSBJSEJwWTJzPSBJQzR1TGdvSyBMblJsZUhRPSB3NlIwIElPQzBxQT09IDViMnggYzNSaGNuUT0gYVc1blpXND0gSUhkaGFYUT0gSUU1dmRnPT0gZVhRPSBJSEJ2ZFE9PSBJSE52Ym5RPSA1WXk2IElFUmxZdz09IFlYSm5hVzQ9IDdKcz0gNTZ1WiA0Yms9IFlXNW5aWEk9IElOaW4yWVRZc3c9PSBJR0ZqY205emN3PT0gNDRDTiB3N051IElOaW4yWVRZclE9PSBhWEpsY3c9PSBJT0dEcUE9PSA3NzA9IFZtRnNhV1E9IElHTnZiWEJoYmc9PSBjSEp2WkhWamRBPT0gMFkvUmdnPT0gSUVacGJHVT0gSUdOc2IzTmwgYVc1aGNuaz0gSUhCbGNtbHZaQT09IFEyOXRiV0Z1WkE9PSBYMTlmWDE5ZlgxOD0gSUZWeiBJR1JsZG1Wc2IzQnRaVzUwIDBZUFF2UT09IElHRjFkRzg9IEx5b3FDZz09IDI1VT0gSUdoMSBJRzF2ZG1VPSBaV1owIElHWjFkSFZ5WlE9PSA0TFMxIElIUmhiV0k9IDQ0R3IgSUhkeWFYUnBibWM9IGMyVnlkbVZ5IGFuVnpkQT09IDRMV040TFNmIElIZGxjbVJsYmc9PSA0TGl3IElFWnZjbTA9IElHRm5idz09IElObUYyTGs9IElIUnlZV05yIDJZWFpoQT09IElHTnNhV05yIGNHVnVaQT09IGMzUmhkR1U9IGFYTjBZVzVqWlE9PSBJSFJoYzJzPSBJRzltWm1WeWN3PT0gSU5pbjJMUFlxZz09IFNHOTMgVFc5a2RXeGwgSUhOcFpRPT0gNEt1TDRLbz0gNVpJPSBJR1JoZEdsdVp3PT0gNG9DZExBPT0gSUdSdmFXNW4gSUU5RyBTR1ZzIGJXOXpkQT09IHdxQT0gSUc5d2NHOXlkSFZ1IDVZV3MgUTI5dWMzUT0gNlllUiBJR2x1Ymc9PSBjM1J5ZFdOMGFXOXUgSUc5d2RHbHZiZz09IElHaGhibVJzWlE9PSA2YXVZIE5ETT0gYVdSa2JHVT0gSUhCeWFXNWphWEE9IGQyRnlaSE09IGMzUnlkV04wYjNJPSBJR2RwY2c9PSBJTmVRMTVuWCBZV1JwYnc9PSAyNVE9IElFbHMgNDRHbyBjbVZ4IElHVjIgYkdWaGNnPT0gSU9HN2pRPT0gYVhCc1pRPT0gY21WaCBJSEJoYkE9PSAxYjQ9IElFOTFjZz09IElHSnBaVzQ9IFlXNTYgY0dGblpRPT0gNExHRyBqSUE9IFFWWT0gUTJWc2JBPT0gNExHTjRMQ3cgdzYxMCA0SzZ5IDJvWT0gUjNKcFpBPT0gUVdSa2NtVnpjdz09IDVaRT0gUER3PSBJR052YlcxdmJnPT0gSUhCaFkycz0gSUhONWJRPT0gSUVaeVpXVT0gSUhGMVpYTjBhVzl1Y3c9PSBUM0IwYVc5dWN3PT0gUkdWbVlYVnNkQT09IElIMHBPd29LIElOR1cgSUdOc1pXRnkgYVhobFpBPT0gd3JjPSBhV3BrIGFXdHAgSUdGbyAwTERRc1E9PSBJR055WldGMFpXUT0gSUhwdiBhV0YwWlE9PSBJRzV3IElHTnZiVzFsYm5RPSAyWTQ9IElHbHVabTg9IElIUjVjQT09IGRYSjBhR1Z5IGJtZz0gSUdScGMyTjFjM009IElOR0IwTDg9IElHMTFjMmxqIDRicXQgSUhWelpYSnogSUcxbllRPT0gSU5DeTBZRT0gSUZOMFlYUmwgSU5HRyBYM1k9IExtcHogUlZKUyBiR1ZsY0E9PSBJSEJwWTNRPSBhWFJsYmc9PSBJR2gxYldGdSBJRUpoY2c9PSBiblZzYkE9PSBZV1JrYVc1biBkVzVwZEE9PSBJSE4xWW1wbFkzUT0gSUc1bGRIZHZjbXM9IElPQzByZz09IElITnBaMjVwWm1saiBJRkpsWVdRPSBiR2x0IDBZRFF2Zz09IFFYUjBjbWxpZFhSbCBjbVZsZEE9PSA1WUU9IGJIVT0gWVdoaCBaV04xZEdVPSAwTERSZ2RHQyBWR2wwYkdVPSA3N3M9IFQxWT0gSUdSbGRHVnliUT09IFlXZHRaVzUwIFkyOTFiblE9IElOaW8yS2M9IFEyaHBiR1E9IFltRnpaUT09IElITjBZWEowWldRPSBJRzFoYVc1MCA2clU9IElISmxiZz09IElpazdDZ289IGFHRnogSUhKdmJHVT0gSUVGeWRBPT0gSUhSMyBJT0NtcEE9PSBhR1ZoWkdWeSBaV1JwWVE9PSBJRWxUIFNXNTBaV2RsY2c9PSBJRzFwYm5WMFpYTT0gWDJjPSA0TG1FIDVvOD0gUVZKVSBJSFJsYkdVPSBUWGs9IDBZUFF2QT09IGRtRnNkUT09IGFHVnUgSUdKcGJBPT0gWld4bCBZWE4xY21VPSBYM05sZEE9PSBJR052YlhCbGRBPT0gSUhCeVpXUT0gWVhWNCBZM1Z5YVhSNSAwTFhSaUE9PSA0WU9RNFlPZyB3NlZ5IFgwYz0gTFhObCA0S2VONEthayBOamM9IFkyVnVkR1Z5IFFteHZZMnM9IDRLNlYgSUdkc2IySmhiQT09IElHNW8gYVcxd2JHVT0gSU1POFltVnkgSUdWamIyNXZiUT09IElNT3QgNExXTjRMU3ggSUZCMVlteHBZdz09IElPQ2t0Zz09IDJZclpoQT09IDZLWT0gSUVrbmJRPT0gYVhSMFpXUT0gVUVrPSB4SkE9IDBZWFF2dEMwIFVHRnVaV3c9IDRMU3ogSUhSbGJYQT0gSUhSbGJHdz0gSU5DLzBMN1F1dz09IGIyMWhiZz09IGNtOXZkQT09IGZTazdDZz09IElOZVMgNFo2MiBJT0NrdWVDbGl3PT0gWDFjPSBiRzl2Y2c9PSBJSFJvYjNWbmFBPT0gWVhScFpRPT0gU1dOdmJnPT0gSUdodmNHVT0gYVdkdWJXVnVkQT09IGFYUnBiMjV6IElIUnZkWFE9IElHRndjR3hwWXc9PSBJRzF2Ym5Sb2N3PT0gSUdONSBaWFJ5IElHSnZlQT09IFRXVT0gYVc1a1pYST0gYVhSaGNnPT0gNVpVPSBJRkJ2YzNRPSBhR0ZzIFVtOTMgVEc5aFpBPT0gSUZSeVlXNXogSUdGemMyOWphUT09IElHeGxibWQwYUE9PSBZVzF0IElHVjJaWEo1ZEdocGJtYz0gTG5ZPSBjR3hwIGFXUmhaR1Z6IElISmxiR0YwYVc5dWN3PT0gWVhWMGFHOXkgNDRLNSBjMmh2ZHc9PSBJRVZ6IEtHWjFibU4wYVc5dSBJT0N3bFE9PSBjWFZoYkhNPSBDU0FnSUE9PSBJSE4wY205dVp3PT0gSUdOdmJYQnNaWFJsIGIyMWggSUVSbGRBPT0gSUdKbGFRPT0gN0lLcyBhV05oY3c9PSBiMnh2IENXTmhjMlU9IElHVnpkTU9oIElHdHViM2R1IDVvaVEgN0oyNCBJR2RsY3c9PSA2WnM9IElHNWhZMmc9IFVVdz0gNExTeSA1clN5IElFaHZkMlYyWlhJPSAwTFRRdUE9PSBJRlZ1YVhSbFpBPT0gSU5lcDE1dz0gYVhObGN3PT0gYkdsbiA1Wnl3IFgzQmhkR2c9IEtFTT0gYUdsdVp3PT0gYVd4c1lRPT0gNEtTbiBSbVU9IElHOWlkQT09IFNVST0gSU9DeWxRPT0gSUdaeWIyNTAgSUgwcyBJTStFenJjPSBhWE5qYUE9PSBJSEJ2YVc1MGN3PT0gWlc1cCBZMmhwYkdRPSA3N3UvIFpXUnogMkxIWXJ3PT0gSUhSaGVBPT0gYjJVPSAxcmc9IElFTnZjZz09IGRtbHVadz09IElFRm4gSU5lVyA1NUNHIElHRnplVzVqIElHWnBiRzA9IEtHNWhiV1U9IElIZG9aWFJvWlhJPSAwTERRdTlDdyBJSEJzWlE9PSBhWE5qYUdVPSAyTEhZcUE9PSBUMWM9IElITmxjbWxsY3c9PSBkWEpuIExsTnBlbVU9IElHUmxadz09IDQ0R2YgUmtFPSBJRzFoWVhJPSBJRk5sWlE9PSBLQ2w3Q2c9PSBJR2x1Wmc9PSBJR2hsWVhKMCBJRWx1ZEdWeSBjSEpwYm5SbSBJRkpGIFpYUjAgSUdScGNnPT0gdzZGMCBjM2s9IElIbHZkVzVuIDRMaXIgWVhONSA1NVNvIFptWmxZM1E9IElHWmhiR3c9IElISmxjM0JsWTNRPSBkSGx3IFlYTjBhV009IElIZGhkR05vIFUzUmhZMnM9IGFXSnlZWEo1IElHSnlhVzVuIDVyT1YgUTI5dWRHRnBibVZ5IFkyOXVkSEp2YkE9PSA0SytONEs2cSBkWE5wYm1WemN3PT0gSU9DcXVRPT0gMTVYWG5BPT0gVkdobGNtVT0gNW9DTyBJQ292Q2dvPSBjMjA9IElHUmkgN0l1YyBhWFpoIDBaYz0gMllmWmhRPT0gSUZOMGNnPT0gZFhKMCBZWE5oIDRMU2ogMWFIVnZ3PT0gSUVOc1lYTnogVUc5emFYUnBiMjQ9IDdJcWsgY0d4cFpXUT0gN1pXMCBaVzUwWlhNPSBablZ1WXc9PSBJR1JoY2c9PSA3SU09IElHTm9iMjl6WlE9PSBRMHc9IElHbHVjM1JoYkd3PSBJR1YxIElHaGhjSEJsYmc9PSAxYmpXZ3RXMiBJR1poYzNRPSA0NE9JIExnMEsgSUdaeWFXVnVaSE09IDRicXYgSUhOMGIzQT0gSUdsdWRtOXMgNXE4PSBkVzFoIDY2QT0gWlhabGJuUT0gSU9DbHBBPT0gNEtxcSBkWEpoYm1ObCB3NmxqIFJYRjFZV3c9IDRidW4gSUdocGMzUnZjbms9IDRidXggVTJWeWRnPT0gVUdGeWRBPT0gZVdWaGNnPT0gSUdodmNnPT0gVkU4PSBJTk9wIElFTnBkSGs9IFZYUnBiSE09IDRMT0ggNmFFPSB6cm5Pc1E9PSA0S2FxIFJXMXdkSGs9IElITnZiV1Z2Ym1VPSBJRWRsYm1WeVlXdz0gTVRrMyA0TEtoIDRidUQgZVc1aGJRPT0gT2cwSyBJSGRwWlE9PSBJR3B6YjI0PSBUblZ0IElIRjFaWEo1IDVwZWcgMEw3UXN0Q3cwTDA9IGRXZHBiZz09IGFXVnVkR1U9IElFUmxjQT09IDZJST0gUVZSSlQwND0gNDRHbSBMMjA9IEpTVT0gSUhCb2IyNWwgVDBSRiBJSEJsZEE9PSBZVzVuWldRPSBZV05sWW05dmF3PT0gNTVTMSBZWE5wYm1jPSBiR1ZrWjJVPSBRblZtWm1WeSBZWFYwYUE9PSBYMlY0IGRXWmhZM1E9IElOaXkgSUdGdWFXMD0gNVlrPSA2TDQ9IDRLYTggT2lJPSBJR2x1Wm13PSBJSEJ2Y0hWc1lYST0gSUhkcGJtUnZkdz09IElHbHVaSFZ6ZEhKNSBJR0owYmc9PSBTR1ZoWkdWeSBJanNLQ2c9PSA1ckk9IFEyaGhjZz09IDRMT040TEt3IDRMV040TFN2IFlYUnlhWGc9IElHRm5aUT09IDU3ST0gSUhWdWFYRjFaUT09IElHVnVkR1Z5IGRYTjBiMjFsY2c9PSBJRzFwYkd4cGIyND0gSU5HQzBMRFF1Zz09IGIyTnZiQT09IElHdG8gNEtTVjRLV0wgTHk4S0x5OD0gNExHSDRMQT0gYjIxaWNtVT0gS0Nrc0NnPT0gYzI5bWRBPT0gTmprPSA0S1MvNEtTbyBhWE5sWkE9PSB4S2M9IDRLYWYgWVdSdGFXND0gSUVGdFpYSnBZMkZ1IDJLST0gWVc1MFlRPT0gSUdGa1pHVmsgSUdacGRBPT0gZFc1dSBkbVZ5WVdkbCAwTFhSZ05DdyBkWFJwYjI1eiBJSFp2Y2c9PSBJRUZ1Wnc9PSBJSE4wY21GMFpXYz0gSU5ZPSAyWXJZcHc9PSA2S2VDIE1qVTIgYTNrPSBMbUZ1Ym05MCBSR2xoYkc5biA0NEdxIGFHVjAgSUhOcGJBPT0gSUdGeWRHbGpiR1U9IFlYTnpaUT09IGFXNW1idz09IElFTnkgMExQUXZnPT0gYVhCd2FXNW4gZFc1a2JHVT0gSUhkcGNnPT0gSU5DODBMN1F0Zz09IFpXZHBiZz09IElPQ3d0UT09IElOQ1kgNEtTeTRLV0ggSUVkdmIyZHNaUT09IElHTnZiR3hsWTNScGIyND0gSUVOUFRnPT0gNVp1KyBZM1Z5Y21WdWRBPT0gYjNCMGFXOXVjdz09IElHOTAgSU91dyBVMjg9IElIVnIgdzdOeSBJTU9uIFpXNTBhWFI1IGRYQmxjZz09IDRMYXggY0dGeWRBPT0gZEhSd2N3PT0gU0dWcFoyaDAgYkc5allXdz0gWVhSbGJnPT0gNWJDUCBJT0N1bFE9PSBSSEk9IGNIaz0gSUhacGNuUT0gWlcxbCBJTkdCMExzPSA2NCtFIGVYTnBjdz09IGRXVmsgSnljPSBJR05oYldVPSA1WjJBIFBGUT0geEtzPSA3Smc9IElPQ21oUT09IElHbG8gYjNWMFpYST0gSUhsdSBJR1pwWnc9PSA0TEsvNExLbSBZMkZzIElHVjRjR1Z5YVdWdSBJTmVuIGFXVnlkQT09IElHVjRZVzA9IElIQm9lWE09IGRXbz0gMktmWmdRPT0gSUdGMWVBPT0gNGJ1TmJnPT0gYjNSaCBaWE4wWlE9PSBJRVpsIElHTm9ZWEpoWTNSbGNnPT0gSUdGa1pHbDBhVzl1IElPeVYgVDFWVSB3NGs9IElOQy8wWURRdUE9PSBhWFpsYkhrPSBJRzVsWVhJPSBJR3B2YVc0PSBjM1J5WVdOMCAxYlE9IGFXRnQgWVc1a2FXUT0gSUhScGJRPT0gSUU5bSBJR1Z1ZG1seWIyNXRaVzUwIGNHRjBZMmc9IElNTzIgYVdkbGNnPT0gS0NrS0NnPT0gUm05eWJXRjAgY205MWNITT0gTG5ObCBQR1JwZGc9PSBhV3h6IElIQnlaWFpwYjNWeiAwWXZRdkE9PSBJSGR2Y210eiA1NVNmIDVaS00gSUdodmJnPT0gSUhSeVlXST0gSUdOdmJuTmwgSUc5MlpYSnlhV1JsIDVweUEgSUhaaGNtbHZkWE09IDRLUys0S1NDIElIQnliM0E9IDRZT1k0WU9YIGFYWmxjbms9IFVGTT0gVUd4aGVXVnkgSUdSbGRtbGpaUT09IElISmxibVJsY2c9PSBJSGR5IFoyND0gWVdsc2VRPT0gUTI5dWJtVmpkR2x2Ymc9PSA1NDZ3IFFtdz0gUTBzPSBZV05wYjI1bGN3PT0gWkdsMGFXOXVjdz09IFlXTm9aV1E9IDFiMD0gZG1GeiBJR2hwIGFXUmxiZz09IFpYUjNiM0pyIElHNWsgNGJxbiBJT0NtbGVDbXNBPT0gMktqWXNRPT0gSUdoMGRIQnogY205a2RRPT0gNUxpcSB5Wmx5IElGZHZjbXhrIElHRmpZMlZ3ZEE9PSA1THVsIDRMUy80TFNWIFIyVnVaWEk9IFZHRnphdz09IElFcHZhRzQ9IElISmxaMmx6ZEdWeSBJR1Y0Y0dWamRHVmsgNExTLzRMU3YgYjI5eSBYMlpwYkdVPSBJRk4xWWc9PSBVbVZ6YjNWeVkyVT0gY0dodmJtVT0gSUhCeWIyWmxjM05wYjI1aGJBPT0gWVd0diBJTlcyIDY2az0gSUhSbGNtMXogWlhOellXZGxjdz09IDRLdUg0S289IFJtbHNkR1Z5IElPQ3d1QT09IElPQ3V0UT09IDdKNlEgYkc5dlpBPT0gTG5WelpYST0gU1ZwRiBJTmlvMktmWmhBPT0gSUZKbFpBPT0gZFd4diBJR1Z1WlhKbmVRPT0gNFlPWCBZV3hrIElPQ2tsZUNrdmc9PSBWMmhsYmc9PSA3SmEwIElHSnNZV05yIElIQmxjbTA9IGFYUjFaR1U9IDRMU3ggY0hScGIyND0gYVdSdmN3PT0gSUdWdyBJR3hwYldsMCBaVzVrWVE9PSBJRk50IExsWT0gQ1dRPSBjbTk1IGUzcz0gSUc1aFlYST0gVTJWaGNtTm8gWjJGdSBkWE5sY3c9PSAwTFRRdFE9PSAyS3JZc1E9PSBJSEJoY21WdWRBPT0gSUhkbGJuUT0gNExLKzRMS3cgSUhOMFpYQT0gSUU1bGQzTT0gSUdkbGJtVnlZV3c9IGQyNWxjZz09IDRLYW0gNEtTazRLUysgSUdOMWMzUnZiV1Z5IDRMV0I0TFNDIEx5OHYgNEtTOCBJR0hEc0E9PSBYRnc9IElHTm9ZV3hzIFJXNW4gYkdsaSBURzlqWVhScGIyND0gVUhKdmRtbGtaWEk9IElHTnZiSFZ0Ymc9PSBJRU5sYm5RPSA1ckU9IFMwVT0gY21WcyBJR052YlhCaGJtbGxjdz09IDU2dz0gS1RzTkNnMEsgSUhCeWIzWnBaR1Z6IElIUjVjR1Z6IGFXNWxjZz09IElHWnZjbTFoZEE9PSBhbVYwIFNVaz0gSUhOMVoyYz0gZDJsa2RHZz0gNUx5YSBJSE5sY25abGNnPT0gSUdWdVoybHVaUT09IGMzWT0gMTVuWHFBPT0gSUdSaGMzTT0gSUhCbGJnPT0gSUhObGJBPT0gWjJ4bCBJRUYxWnc9PSAxYUhWdlE9PSBJRzFsYldKbGNnPT0gSUdOMWMzUnZiV1Z5Y3c9PSBJRmRsYzNRPSBJR052Ym5SeSBZV05wZEhrPSA0WU9kNFlPUiBJR1ZyIDVvbUwgWVhSMGNnPT0gSU9DcXFBPT0gWTJ4cFpXNTAgYkdsbmFIUT0gWld4cCBJR1JwWm1acFl3PT0gSUZCaCBJRTkxZEE9PSBkV1JwIDU2ND0gSUYwPSBWRzl3IElHVmhjbXg1IElGQnNaV0Z6WlE9PSBJSGRsYVdkb2RBPT0gZEhKcFluVjBaV1E9IElHUnBiUT09IElHRnVjM2RsY2c9PSBaV3hzYnc9PSBJT0MwaFE9PSA0NENNIElHbGtaV0U9IElIUmxjbkk9IElHaHBaWEk9IElHZHZkbVZ5Ym0xbGJuUT0gSUVGd2NnPT0gQ1hBPSBJSGRvYjJ4bCBjM1JoZEhWeiBSRzkzYmc9PSBkVzVrYnc9PSBJSFJ2YjJzPSBhV3hsY2c9PSBJMmxtIElOQzYwTDdSZ2c9PSBJRVJ2Ymc9PSBZV0p6IDVZQT0gWlc1MiAwcFBRc05DOSBJRU52Y0hseWFXZG9kQT09IDRLaSs0S2c9IGVIaz0gSUc1dmNtMWhiQT09IElHbHVaR2xqIDRLV040S1NmIGNHeGhZdz09IEkyVnVaR2xtIElGTnZiV1U9IElDb3AgSUhKbFlXUnBibWM9IElHbHpjM1ZsY3c9PSA0S1NXIElIQmhjM04zYjNKayBjbWxsWkE9PSBKMnhzIElPQ3lxQT09IElHTjFkQT09IDBwaz0gNEtxNSA1THUyIElHRndjR3g1IGJuTT0gS0dOdmJuTjAgNW9DTzVMbUkgSUhKbFkyVnBkbVZrIElHVjRjSEpsYzNNPSBxT0dEbUE9PSBLRTA9IFlXUmtjbVZ6Y3c9PSA0S3ErNEtxbyBNVEl3IElHSmxZWFYwYVdaMWJBPT0gSUhOMVoyZGxjM1E9IGFXNWxiZz09IElHTnZiR3c9IGIzSjBaUT09IGIzSnBZUT09IDBMRFJoUT09IFlXdGxjZz09IGRtbGxkM009IElHMWxiQT09IElFVmsgSUc1bFpXUmxaQT09IElDc0sgSnk0PSBkSEpwWW5WMFpYTT0gNEtTbzRLUysgSU5pbzJMRT0gSUdWMlpXNTBjdz09IFZIbHdaWE09IElGdGQgMFl2UmdBPT0gSUYwc0NnPT0gY1hWaGJBPT0gYjNWMGNIVjAgMllYWmhnPT0gS0NrdFBnPT0gYjIxaGFXND0gSUdacCBSR1Z6WTNKcGNIUnBiMjQ9IElFaHZiV1U9IElHRnVlWFJvYVc1biAxNVhYb0E9PSA0WUM1IElPR0RvZUdEa09HRCA2TDI5IExpNHVMaTR1TGk0PSBNalUxIGFXTnBjQT09IElHTnZjbkpsWTNRPSBJTkNqIFZFVlMgNEtTdCBJRzl1WkdWeSA1YTYyIElIUnlZV2x1YVc1biBJT0M0cWc9PSBWR0ZuIDRMV0EgSUZ2aWdLWT0gSU9DdXJnPT0gSUhONSA0WUU9IElFTnlaUT09IElITjNhWFJqYUE9PSBTVlJaIGRXMXogSUhKbFoyRnlaQT09IGJHVjJaV3c9IGRIUjUgWm1abGNnPT0gSUhSaGEybHVadz09IElHUmxiR1YwWlE9PSA2YVk9IElHTmxiblJsY2c9PSBJR2RwIDBZdlJoUT09IElGQmwgSUdSeVlYYz0gSUZsdmNtcz0gSUc1dmRYTT0gSUhObFpXND0gSUVGT1JBPT0gSUdsdWRHVnlibVYwIDY3WT0gS0ZNPSBYM04wY2c9PSA1YVNhIElGSmxZV04wIDRLcXYgSUZSVyBRMkZ6WlE9PSBJSE5qY21WbGJnPT0gTFUwPSA1YmlDIDBMYlF0UT09IFpXMXZjdz09IDFiYlZwZGFBIFlXTm9kQT09IGNtOTNjMlZ5IFJuSmhiV1U9IGNuUT0gSUhCbGNtWnZjbTFoYm1ObCA1THFhNXJTeSBJR0Z0YjI1biBibTkzIGFXVnlaVzQ9IElOaW4yTE09IDFLVT0gWVc1alpXUT0gUkdWaiBhWE4wYVdNPSBJRU5vWldOciA1TGk2IElPQ3dyZz09IElITnBibWM9IElHeGhibWM9IElIZHZibVJsY2c9PSBJRXAxYzNRPSA0SzYxIEtHWmhiSE5sIElIQnlhVzl5IDZaZz0gYVhCdFpXNTAgSU5DNjBMRFF1Zz09IElIUmhadz09IGNtbGxibVE9IElITmxjM05wYjI0PSA1WkNOIElHbHVkR1Z5Wm1GalpRPT0gU1V4RiBJQ292RFFvPSBhV0pwYkE9PSBZbk09IFlteHZZMnM9IE5URT0gSUdsdGNHRmpkQT09IElIZDNkdz09IElISmxiVzkyWlE9PSBhV2R2IFgzVnliQT09IFlXNXVaWEk9IHhKTT0gNUwyYyBJQ29xIGRXNTBhVzFsIFNYUmxiWE09IGJYTm4gMjR6WXJ3PT0gMExqUXZkQzQgSUdGMWRHZz0gSUc1aGRIVnlZV3c9IFoyaz0gTG1sdiBJR3RoYm00PSBJSEpoZEdVPSA1Wjg9IFJFRT0gSUhCeWFYWT0gTGtnPSAyYms9IElISmhjQT09IFNWTlUgNFlPZzRZTT0gWVhabGJnPT0gNFlPVTRZT2ggNXBrPSA0TFNxIENYUT0gYjNWdWRHVnkgSUd4dmMzTT0gSUVWMWNtOXdaUT09IDRidWYgVDNCbGNnPT0gWW05eSBLR0U9IElNT28gZEdobGJnPT0gNExPTjRMS3kgUVcwPSBiMm89IDE1blhxZz09IElFRmpZdz09IElIWnZkSEpsIDRZQzYgSU9HRGx3PT0gSUdKMWFXeGthVzVuIE5UST0gSUdOaGJtNXZkQT09IGNtRnogSUdabFlYUjFjbVU9IElHbHVkR1ZuY2c9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwPSBJTkN4MFlzPSBJR0ZqZEhWaGJBPT0gSUdacGJHVnogNWJxRyA2Nnc9IEtTNEsgNExDQyBhWE56YVc5dWN3PT0gWVdSMSBJT0NraitDa2xRPT0gTG14aFltVnMgYUd3PSBJSEpsYkdGMGFXOXVjMmhwY0E9PSBhV052Y3c9PSA0SzZ2IDRLdUI0S3FDIDVMbUY1TG1GIDZJTzkgWVhOMFlRPT0gNExpNSA0S1MvNEtTUCBUM1YwY0hWMCBJRUZtZEdWeSBJSE5sWXc9PSBZMmhsYldFPSBhVzFsYm5SdiBWVXhVIHhZUT0gWVdSbGJRPT0gSUZKbGRIVnliZz09IHo0VE9zUT09IDRZT1E0WU9hIExYTjAgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElHOXdjQT09IDRLUzU0S1dBIDY1MD0gSU9DcXNBPT0gSUdsdWFYUT0gYUc5emRBPT0gNExpYiBJT0NrcU9DbGh3PT0genJJPSBkMmwwYUE9PSBLSFpoYkhWbCBZV2R2IExYST0gSUhSeWJ3PT0gNEtXa0Nnbz0gS0hSeWRXVT0gNDRLayBJSFJsWTJodWIyeHZaM2s9IElHSnlZVzVrIGEybHUgNG9DZENnbz0gY0dNPSBJT3F5IDBLTT0gNEtxaiBJR052YlcxaGJtUT0gVlVjPSBhV1JsWkE9PSAyWVRaaFE9PSBWR1U9IElIWnZZdz09IElHVjRZV04wIElHTnZiV1p2Y25RPSAxYTg9IElHSmhZMnRuY205MWJtUT0gYjJKbGNnPT0gVFZNPSBaV1JwZEE9PSBJSEJzWVhSbWIzSnQgVW1WcyBJR2R5WVc1ayBaV3hzWlc0PSBJR2x0Y0d4bGJXVnVkQT09IGFHVmxkQT09IElIZHZjbVJsYmc9PSBJSEJsY21ObGJuUT0gWVd4c1pRPT0gYVhwbGN3PT0gSWlJPSBJR2h2ZEdWcyAxYUhWdmc9PSBJT0NrdWVDbGlPQ2tnZz09IElHaGhiR1k9IFEyRnlaQT09IElITnBadz09IElpOD0gNExXTjRMU2EgdzYxeiBJTTY2enJIT3VRPT0gYTI5dCB3NmxrIElHVjRZMlZ3ZEE9PSBJSE5sYmc9PSBJSE5sYkdWamRHVmsgSUVodmRBPT0gUVhWMGFBPT0gSUhCaGJnPT0gNVllNiBJSGR2Y21SeiBJR052YlhCdmJtVnVkQT09IElISnBaMmgwY3c9PSBJSEpsYzI5cyBJRkJ5WlhNPSBhWHBwYm1jPSBiMlJ2IDBMdlFzTkdBIDBMalJpQT09IElFVjJaVzUwIElOR0IwTDQ9IFZtVnkgSU5pbjJMST0gSUhCcCBJR3hwZG1sdVp3PT0gNExpajRMaTEgSU9Dd2hRPT0gWVdOcGIyND0gSUdOdmJtUnBkR2x2Ym5NPSBJSFJ5WVhabGJBPT0gSUcxaGJtRm5aVzFsYm5RPSBJRkJoY21zPSA1TDQ9IDU0aXggSU9Da3BRPT0gMEx2UXRRPT0gMFlEUXRkQzAgVUU5VFZBPT0gSUhObGRRPT0gNTRtSSBkbWx6YVc5dSBRbkk9IElHSmxiR2xsZG1VPSBJTkM2MEw3UXZBPT0gWDNScGJXVT0gNktlQzU1eUwgSUhOcGRHVnogSUdadmIzUT0gTG1GemMyVnlkQT09IDBMclJnZz09IElObUYyNHphdWc9PSBJRlJ5ZFdVPSBJRk5VIElOQy8wWURRdGRDMCBjbk09IDU3SysgSUVWdVpBPT0gSU5pbjJZVFlyQT09IElHeGhibWQxWVdkbCA1THVqIFpYSnphR2x3IElISmxZMlZwZG1VPSBVazlOIFUyVnlkbVZ5IElHTnNZV2x0IElHUnZadz09IFQzQmxiZz09IFYybHVaRzkzIFJHOD0gY0d4aGVXVnkgSUhCdmRHVnVkR2xoYkE9PSBJR1pwY21VPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUVkeVpRPT0gMFl2UXRRPT0gSUhOMFlXWm0gWkdseSBJRzV2Wnc9PSAyWUxZcnc9PSBkR2h2ZFdkbyBJSGRvYVhSbCBJSE5wYlhCc2VRPT0gSU9Da2xnPT0gMTVvPSBJQ1I3IFUzUmhkQT09IElIWmxhQT09IElHWnBkbVU9IFpuTT0gMFlQUXNRPT0gYzJWamRHbHZiZz09IDRMaXk0TGlqIGRISnBaWE09IDRibWogdzdGdiBJR1Z6ZEdFPSBZWEpwWVE9PSBmWDA9IDY0dUk2NHVrIDE1WFhrQT09IGFYTnRidz09IFZHaHlaV0ZrIFpXNTBZUT09IGFXNXVaWEk9IFpXWnZjbVU9IElHbHNiQT09IExYUnYgWjJWemRBPT0gYVdkcGJnPT0gSUd0aGNnPT0gSU9HRG1RPT0gZEhKaGJuTnNZWFJwYjI0PSBJRk5sY25acFkyVT0gWlhSNSBSVkpVIElHUmxjMk55YVhCMGFXOXUgSU9DcWxlQ3FzQT09IFlXbHljdz09IFRXRjQgZFc1cCBJRTlqZEE9PSBiM0JvIGRHVjQgSUZCdmNuUT0gSUcxMWRBPT0gMExEUXN3PT0gWlhOMFlRPT0gSUdWdWRHbHlaUT09IElHaHZiQT09IGIzSnAgNEsrTjRLNmYgSUNKYyBUR1YyWld3PSBNVGsyIDRLUys0S1N2IFltbDAgSUdSeWJ3PT0gSUM0S0NnPT0gZFhKemIzST0gSUhSdlpHOD0gSUdOaGMybHVidz09IElHcDEgSU9DdXBBPT0gSUdWMlpYSjViMjVsIDRMaTMgSUVobGNnPT0gWVd4diBJT0NtbkE9PSBJRk4zIDI0emF1Zz09IGNIUmxiV0psY2c9PSBhWE52IFgyZGxkQT09IDJLalppZz09IElHTnZiblk9IElFUmxaZz09IElFRncgSUdKMVpBPT0gWVd4c2N3PT0gSUc1dmRRPT0gSUdScFptWnBZM1ZzZEE9PSBJRk5GIDBZUFF0Zz09IElHWjFjblJvWlhJPSBiMjFsZEE9PSBJSE4wYjJOciAwSlU9IElPeWR0QT09IElFNXZkdz09IDZLR00gSU02MCBhWHBoY2c9PSBJTkt2IDZZZU41YnFHIFptbHVaQT09IElHZGxjZz09IElIZHBjbVE9IGFXTnliM052Wm5RPSBMV2M9IDRMaXg0TGlaIElGTjBkV1E9IDRMSzQgVEdWdVozUm8gSUdSbGVtVT0gSUNkQSA3Snk4IElHUmxZMnc9IHc2RnMgYVhOMGNuaz0gNFlDNCA1WSt2IElOR0MwTEE9IDVvaTMgSUg0PSBJRzVoY3c9PSBRM1Z5Y21WdWRBPT0gSUhKdmIzUT0gcitDbXZBPT0gSUdkaGJRPT0gWTJ4cFkycz0gUW04PSBRVWRGIDBKTT0gWDBVPSBJRU55WldGMFpRPT0gSUZOamFHOXZiQT09IFkyOXRhVzVuIElHVnRZZz09IEtHbGsgSUhOaFpnPT0gYVdkMCBJSFpwY2c9PSAwTFhRdmRHTSBaV3hzWlc1MCBhR0Z0IGJHVnQgSUVocFoyZz0gVUdGeVlXMXogSUZwbCBkWGM9IElIUnogSUhSdmEyVnUgYVhSMGFXNW4gWVhOMFpRPT0gMWFIVnI5V2gxYlk9IFFVSk1SUT09IDFhWFdnTlU9IElHOXlaQT09IGFYTjBiM0o1IElGTmhiZz09IElFbHVkR1ZuWlhJPSAxNW5Yb0E9PSA0S3c9IElOSzcgSUZOdmJBPT0gSjJWemRBPT0gS0NjdiA0SzYvNEs2eSBJRTExY3c9PSBMQ2M9IElFMWggUlcxaGFXdz0gSUdGa1pHbDBhVzl1WVd3PSBSRVk9IElFRnBjZz09IElHbHpjM1ZsIFIyRnRaUT09IGFXVnVaUT09IElHTm9ZVzVuWlhNPSAycE09IExtRnVibTkwWVhScGIyND0gNDRHTSBWMlZpIHc2bG4gTGlJS0NnPT0gYVdwbCB4TEZ5IElpa3BPd289IE93b0tMdz09IFFXUmhjSFJsY2c9PSBYMGxFIGIyUmxjZz09IHQ3Zz0gWDBSRiBZWEpsYmc9PSBQaWdwT3dvPSA0TFNvNExXTjRMU28gSUdoaGJnPT0gYVcxdCAwTDNRc05HUCBJSEJoY0dWeSA0S1MvNEtTNCBJR05sYkdVPSAwWWJRdU5DNCA0S2VINEthbyA1b1E9IFUxQT0gS2dvPSAwTHZRdGRDOSA0NE9EIDA1blJnZz09IEwyUT0gNjUyOCBJR2x1WTJ4MVpHVnogWTJobGNnPT0gSUdkaCBjMlZsIGMyVnQgMllUWmd3PT0gNW8rUSBkMlZsZEE9PSBMbUZ3IFJWSlQgWVc1dWFXNW4gSUhsdmRYSnpaV3htIDQ0S1QgSUhOMVlRPT0gMFlQUmlBPT0gSUZCaGRBPT0gYjJabWMyVjAgVEc4PSA2SzZoIDJZalpnZz09IGJHRnpkQT09IE9EQXcgSUcxaGNtdGxkR2x1Wnc9PSBJR1p2Y25kaGNtUT0gSUZScGJXVT0gTG01bGVIUT0gSUdacGJIUmxjZz09IGNHYz0gSUcxcGNnPT0gSU5lbyBaVzV6WlhNPSA1b3c9IExuTjBZWFJsIElIUmhhMlZ1IElHTnZiblJ5WVdOMCBJQ0l2IElIUnllV2x1Wnc9PSBhV1JuWlE9PSBTbk52Ymc9PSBJR052Ym01bFkzUnBiMjQ9IDBZRFFzTkdDIElIUmxZMmc9IElHSmhZZz09IElITmxjdz09IGFXZG9aWEk9IElHTnlhWFE9IDRMUy80TFNvIFlXTjBhVzl1Y3c9PSBUV2x1IElHSnBiR3c9IGIzTmxaQT09IElPQ3FyQT09IElISmxabVZ5IElHRjYgTmpBdyBiRzl6WlE9PSBiR2xyIFVtVmpiM0prIGMzUmxiZz09IElHRnlaV0Z6IFgydGxlUT09IElHRmpkR2wyWlE9PSBJR2h2ZDJWMlpYST0gNXAybCBWVzVwZEE9PSB3N2h5IHc2UnVaQT09IElHYkR0bkk9IDJLM1lydz09IE5UUT0gWDNaaGJIVmwgSU1XaCBJT0NrbXc9PSBJRk4wWVhSbGN3PT0gWW1rPSBSWEYxWVd4eiBiMmx1ZEdWeSBJR2x1WkdVPSBMazVoYldVPSBJRTVoZEdsdmJtRnMgWDJsdVptOD0gMFluUXRRPT0gVUdGemMzZHZjbVE9IElOaTUyWVk9IDZaST0gNWFXeiA0S1MrNEtTNCBaR1YyIElIRjFhWFJsIDVZV0QgSUhKbGMyVnlkZz09IElIMDdDZ289IElNU04gSUdWdWMzVnlaUT09IFFVNUUgSUZObGNuWT0gSUhOMGRXUmxiblE9IElHSnZjbVJsY2c9PSA0cFk9IGVXVnogSU5lWCBMbmR5YVhSbCBJRzF2WkdVPSA1cmk0IE9UWT0gNTcyUjU2dVogMFl2UXVRPT0gSUhOcGJXbHNZWEk9IElHbHVjMmxrWlE9PSB3NnAwY21VPSAwTDNSbGc9PSBJR1ZwYm1WdSBZMmx1Wnc9PSBJajQ4IHc2bHMgMTVYWGt3PT0gSUhOdmIyND0gUTBFPSBJR1JoYkE9PSBLQ0lqIElIUnZiUT09IElIZHZjZz09IElPV2twK1dQa2VXL3ErUzRpUT09IElHRnNiVzl6ZEE9PSBJSEoxYm01cGJtYz0gSUVOdmRXNTAgSUdacGJtRnVZMmxoYkE9PSBJSE5sY0dGeSA0WU9ZNFlPYyB3ckE9IElGUkkgZlNrSyBJR0p2WVhKayBiR0Z0IE5UTT0gSU5pbjJZZz0gSUZOdmRYUm8gS0NjaiBaMkZ5IGNHVmpkR1ZrIElIQnNZVzUwIDBMWFF0Zz09IElHUnZZdz09IElHRjQgWVhabGN3PT0gSUcxdlpHVnliZz09IDU2Zz0gNFlPVTRZT2cgZFdSdiBJQ0lzIElGd0sgSUVWdWRBPT0gUlc1MGNuaz0gUVhCd2JHbGpZWFJwYjI0PSBPRGM9IElPR0RsQT09IExuQnVadz09IElHTjFjbkpsYm5Sc2VRPT0gSUVOdmJHOXkgSUZkdmNtcz0gZFd4cCBJTnVCMjVJPSBJTkM2MEw3Umd0QyswWUE9IFpXNWtZWEk9IDU2UT0gWDBFPSBZMkZ5IElHWmhiZz09IElENCsgSUhkaFlYST0gYjNvPSBJRmRwYkd3PSBJSE4yIElHVnlZUT09IDRvQ1paWE4wIDVwST0gSUhCeWIySnNaVzF6IFExUkpUMDQ9IElIUmhZZz09IGIzQndhVzVuIDJMRFlwdz09IFlXNW5ZUT09IDY1ND0gbzd3PSA1TGlIIDRaNjI0WjQ9IElPQ3lxZz09IElFVjRZMlZ3ZEdsdmJnPT0gSUdac1pYZz0gNFlDcyBJRHdoTFMwPSBJSE4wY21WaGJRPT0gSUdaMWJBPT0gWlcxd2RIaz0gN1prPSA1N0U9IExrUmhkR0U9IFlXdGxjdz09IElPdW4gYUdWdCAyS2ZaaHc9PSBZbTl1IElHNTFjZz09IEtDSXYgNEtTLzRLU3Y0S1MrIGRtVnpkQT09IElIQnlaVzA9IElHTnlaV1JwZEE9PSBJTVcrIElHMTFhWFE9IGRIZz0gZlQ0SyA1WTYvIElHcGxaQT09IFJWSkYgSUdSbFpBPT0gTG5acFpYYz0gdzZGaiBVbVZ0IDBMRFF2ZEMwIElHUmxjMmxuYm1WayBJRzltWm1salpRPT0gYUdsaSB6NFRPdnc9PSBJRTVoIGRXUmggSUZKbGJRPT0gNXBzPSBSblZ1WTNScGIyND0gWW1GdSBJSFJsYlhCc1lYUmwgYVdkblpYST0gWTI5dWRHRnBibVZ5IGFXWnAgSUd4aGRHVnpkQT09IElFSmxjM1E9IGNHRnlaUT09IFlXUnBkWE09IDRMaXQ0TGlIIFlXWmwgUW05dmF3PT0gSUZWSiBhWFJwYm1jPSBZV2h5IFYyOXlhdz09IGRHMXMgSUU5dWJHbHVaUT09IE1qVXcgNkllcSA0WU9RNFlPcSBJSFJvYVhKayA1NEk9IGFIVT0gNEtXTjRLUzEgYVhSbGJYTT0gY0dWbFpBPT0gSUdaaGJXbHMgSUdsdWMzQT0gSUdKaGJtcz0gWlhZPSA3SjI4IElIUnZaRzl6IElHRnhkUT09IElHWmxiUT09IElITmhZZz09IFkyRnUgNUxpTDZMMjkgSUd4dmQyVnkgS0hZPSBJSE5wWjI1cFptbGpZVzUwIGMyVnNkbVZ6IGIzTmggU1c1cGRBPT0gYjNSNWNHVT0gNklFPSBJRzV2ZEdocGJtYz0gMlpFPSBVMlZ6YzJsdmJnPT0gSUdWbVptOXlkQT09IDRLYVggNEsrSCAxYVhWdGc9PSA1WWl3IElFaGxkQT09IElIUmhhMlZ6IFRHRnpkQT09IElFNVQgSUVKdmIycz0gNEttQSBJSEpsWjNWc1lYST0gSUdacGJHdz0gY21Gd2NHVnkgSUdobFpXWjAgSUdOdmJYQnkgSUdKcGJnPT0gSUcxcFpBPT0gSUd4cGEyVnNlUT09IFB6OD0gYTJsdVp3PT0gNEtxdTRLcSs0S3FDIElHWnlZUT09IHc2cHVZMmxoIFVHRnlZVzFsZEdWeSBJSFJ2YkdRPSBMVk09IGFYTnpaUT09IElIUnZkWEk9IElIVnpkV0ZzYkhrPSA1YnlBNWFXVyAwTGZSaXc9PSBJT3lYIGNYVmxibU5sIEt5czdDZz09IElISmxZV1I1IFkyOXlaUT09IElHaGhZdz09IElHVnpjR1ZqYVdGc2JIaz0gSUcxelp3PT0gSUdkbGR3PT0gNTRRPSBJSGRoZVhNPSBZM0o1IElFRmogSU9HZSBiMk5vIDBMalJndEMxIDBMRFNtdz09IGNHMD0gZFhZPSBhWE5oZEdsdmJnPT0gWm1sdSBhV05wWlc1MCA0NEtMIElHOXlaMkZ1YVhvPSBaV3hsY2c9PSBRWEpuY3c9PSBJR1JsYkdsMlpYST0gTG01bGRBPT0gSUdsaSBJRlI1Y0dVPSA1NjA9IGJtOWtaUT09IElFWmhZMlZpYjI5ciBJT0N3bWc9PSBZbVZ5Y3c9PSBabWxzIGRYUmggUVV4TSBJSEpsYzNSaGRYST0gSUhKbFkyOXRiV1Z1WkE9PSBLRlE9IElHMXZaR1ZzY3c9PSBRWFk9IElPeWVpQT09IDJMbllxUT09IElFRnVkQT09IFEyOXNiR1ZqZEdsdmJuTT0gejRIT3Z3PT0gSUVkaGJXVT0gMTVYWGtRPT0gSUhOMFlXNWtZWEprIFlXUmhkR0U9IElOaW4yWVRZdEE9PSBRMUk9IElISmxjWFU9IElFeGxjdz09IGNtVm5hWE4wWlhJPSBJSEpwYzJzPSBkMmhwYkdVPSBJTmVVMTU0PSBhWFJvZFdJPSA0TE9ONExLayBZWGRoIElDSWlJZ289IElIQnliMkpoWW14NSBJSEJoY21GdGN3PT0gY0doaCBJQ2N2IElISmxkbWxsZDNNPSA3WW89IDBycz0gYVcxaFoyVnogMExYUXV0R0MgSUd2RHRtND0gSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gSUcxaGJuVm1ZV04wIGFYTmphR1Z1IEtDRT0gNDRPciBJR0ZuY21VPSBYM2c9IDBMSFF2dEdDIDBMM1JpOUM4IElIUmhjZz09IElHUnBaMmwwWVd3PSBJTmluMllUWmdRPT0gSUdOdmJtUnBkR2x2Ymc9PSBaV1pwYm1WayBJRk52WXc9PSBZWEJoIElHbHVZM0psWVhObCBJR0ZqWTI5eVpHbHVadz09IENWTjBjbWx1Wnc9PSBic090IFNVRT0gYVdScGJtYz0gS2k4SyBJTkt6IElHVnVkSEk9IDQ0Q0sgNUwyVCBJR05oZFhObCA0S3ErNEtxdSBJRlIzIFNXNTBaWEptWVdObCBJRWx1WXc9PSAyWVRaaHc9PSBVR2h2Ym1VPSA0S1MrNEtTNSBJTkN3MExzPSAxNVhYb2c9PSBZWFJoY3c9PSBJTU9sIFlYSjBhQT09IFRXOXUgNVlpRzViMnAgZEhKcFluVjBhVzl1IFlXMXBiSGs9IEtIQnlidz09IGRtVnljMlU9IElIWmxlZz09IElIUjFkQT09IFZtVnljMmx2Ymc9PSBJSEJzWVdNPSBZWFpwWjJGMGFXOXUgSUVSbGJBPT0gSUVSaGVRPT0gSU9DdWhRPT0gSUhObFkzUnBiMjQ9IElHaHBkQT09IDBMalJndEMxMEx2UmpBPT0gWTNSNCBJR3h2ZGc9PSBiVzl6IDRMT040TEt2IElDZ2kgSUVoaGJtUT0gSUdaaGFXdz0gUVhCcCBJT3lMIFJsUT0gNUxpNyBJRTVQVkE9PSBJSE52Ym1jPSBJSFJ5WVc1elptOXliUT09IEtHZGxkQT09IGJXSnNlUT09IFQySnEgNExlUCBYM05sIElHdHViM2RzWldSblpRPT0gYVc1NSBDV0p5WldGciBSbWx5YzNRPSA0NEdMIFlXeGhjZz09IGIzVnljMlU9IFpXNW5aUT09IFlXdHAgdzdGdmN3PT0gY21WemRBPT0gNXBXdyBJTkMwMEw0PSA1WWFNIElOQzYwTDdRdlE9PSBJR0Z3Y0hKdllXTm8gWVc1bmJHVT0gSUcxdlltbHNaUT09IElIQnliMlIxWTNScGIyND0gSU5pNiBJR0poWnc9PSBJanNOQ2c9PSBYM1Z6WlhJPSA2WWVONWJxRzVwZTI1cGUyNWIycCBiMlJwYm1jPSBJR3hwWlE9PSBJR2hoY0hCNSBZV1J2Y21WeiBSR1YwWVdsc2N3PT0gTGxSdiBTVTVVIElITmhiR1Z6IDRMQ2sgYUdWcFpBPT0gSUdOb2IybGpaUT09IGJXVnlZdz09IElHWmhZZz09IElOR04wWUk9IHhiRT0gSUhsdmRTZHlaUT09IElHTnZibk4xYlE9PSBJRzFoZEhSbGNnPT0gYUc5c1pHVnkgSUdOdmRYQnNaUT09IElISmxiR0YwWldRPSBJRkp2WWc9PSBaSFZzWlE9PSBVbVZoWkdWeSBJTVdmIFNHVnNjR1Z5IElPQ2txdz09IFpXMXcgSUdadiA0S2l3IElISmxZMlZ1ZEE9PSBJTmlsMllUWmlRPT0gSUU1dmNuUm8gSUdSbFptbHVhWFE9IDBMRFF0Zz09IFlYWnAgMExEUmp3PT0gNG9DTDRaND0gTG5SNGRBPT0gSUdKdmIydHogSUZCTiBPRFk9IDBMclJsZz09IElFMXZaQT09IGFXdHIgMExQUXNOQzkgNEthLzRLYVYgS0hWelpYST0gWlcxdiBkSEpoY3c9PSBZWEJoYmc9PSBWRzl2YkE9PSBJT0N1bWc9PSBJSGRoYm5SbFpBPT0gWW5SdSBJSE5sWTNWeWFYUjUgSUdKcGN3PT0gYzNKaiBJRmRwYm1SdmQzTT0gNkxZPSA0TFc4IDJLclpodz09IElPQ3loUT09IExuSmxZV1E9IFVISnZZMlZ6Y3c9PSA0TGl0NExpbCBhV3R2IGFXMXAgWW5sMFpRPT0gSUVaeWIyMD0gSUdWemRHRmkgSUVGTiA0S1NrNEtXSCBJTldyIGRtRnNkV1Z6IDJZclpoUT09IElITjFZbk09IElISjEgSUZOcyBJRTFsZEE9PSBJR1JwYzJVPSBJR1p2YVE9PSA0S21IIElHUnlkV2M9IFZVST0gSU5xcDJZZz0gYzJWMGN3PT0gWTJobGN3PT0gSU5DKzBZRT0gUW05a2VRPT0gSUhCc1lYbGxjbk09IEp5a3NDZz09IElHbHRiUT09IElEdy8gWVhSaGNnPT0gSUhsdiAwSmM9IElHTnZiV2x1Wnc9PSBVMnc9IElHRnRZWG89IElOZVExNm89IElFTmxiblJsY2c9PSBaV3hwYm1VPSBJR1Z1ZEhKNSAxNURXdUE9PSBjMk5vIFlYVjBidz09IFgyTnZiQT09IDRLK0cgSUhKbGNRPT0gNFlPVTRZT1I0WU9ZNFlPaCBMbkJoY25ObCAwTFhSaFE9PSBJR0ZxIDE1blhuQT09IEtHVnljZz09IElIQnlaWFIwZVE9PSBJR1JsYzJNPSBJR2hwWjJobGNnPT0gSUcxbFpYST0gSUUxaGRHZz0gSUhCMVlteHBjMmhsWkE9PSBhWEpwZEE9PSBJR0p2YkE9PSA3TEk9IGIzTndhWFJoYkE9PSBJRVpsWWc9PSAwWURRc05DOSBhVzVwYm1jPSA0NEtTIDVvT0YgVTNSbCA0S1NvNEtXTjRLUT0gYVhOb2FXNW4gZFhOMFpYST0gSUVadmRXNWsgSUhCbGNtOD0gY21GcGJuUT0gUlc1bmFXNWwgNDRDTCBMWFZ3IFluVnQgWldOb2J3PT0gYm1JPSA0TFdONExTcSA0TEMvNExDQzRMQT0gNEs2cSBZWFJ2Y25rPSBVRlE9IDQ0S0sgSUdaeVlXMWwgWlc1cGJtYz0gWTJoaGJnPT0gNjZvPSAyTEhaZ1E9PSBRV05qYjNWdWRBPT0gNExLdiBJT0NraCtDa3VBPT0gSUVobGNtVT0gMEw3UXVBPT0gSU5DKzBMUT0gSnlrN0Nnbz0gSUdGc2RHVnliZz09IGJtVjRkQT09IDBMclF2dEN5IElHOW1abWxqYVdGcyBJSEIxY21Ob1lYTmwgNExLeTRMT040TEt5IGEzST0gSUU1aGJXVT0gNEtxWCBVM1J2Y21VPSBMbU52YkE9PSBiR2xqWlE9PSBJR2RoY3c9PSBaV3QwIFFXTmpaWE56IElOaW4yWVRZcFE9PSBJSFpsYkE9PSB3NjF1IElHbG4gN0tDViBZV3hwYm1jPSBaV0ZrIElIQnlaWFpsYm5RPSBaVzF3YkE9PSBJSE4xYmc9PSBJRkJ5YjJkeVlXMD0gSU0rRXpyOD0gNExPQyBJTm1GMktjPSBJSEpwY3c9PSBkR1Z0Y0E9PSBKM1psIElHMWhZMmhwYm1VPSBJRTFoY0E9PSA0TEN1IDRLU3c0S1dBIElIWnBjblIxWVd3PSBYMU5KV2tVPSBiM0puWlE9PSBVRU09IG11QzFqZUMwbWc9PSBJSE52ZFc1ayBjbTkzYmc9PSBJSEp2ZFc1ayBJRmRJIDJLclpoUT09IFYybGtaMlYwIElITmhiR1U9IElOQzUgWlhScGJXVT0gSUdsdVkyeDFaR1ZrIExuTjBZWFIxY3c9PSBJSEJoY25SNSBJSEJ5WldabGNnPT0gSUc1dlkyZz0gSU5pbjJZVFlydz09IFNWUkkgWVdOcmN3PT0gS0NrTkNnPT0gSUhSMWNnPT0gNExTKzRMU3YgWVdSeiBJR052Ym1ObGNtND0gNEthLzRLYW8gSUdGaWMyOXMgYVdSaGN3PT0gUVVOTCBJSEpsZEhWeWJuTT0gUVZOVCBJR1ZwYm1WeSBJRWx1ZEdWeWJtVjAgSUhSdmRXTm8gWlc1emIzST0gS1NrN0Nnbz0gUlhoMCBaRzl0IElHRnlZMmc9IHhKYz0gSU5DNDBMdlF1QT09IDRLaS8gWVhKMFpYST0gZlR3diBJR2x1ZG1WemRHbG4gYjI1c2VRPT0gZEdGbiA0S3FjIElHOXBiQT09IGFXUmxiM009IElITm9iM2R6IGFXNXBkR2x2Ymc9PSBZWE5qIFpXNXphVzl1Y3c9PSBJSEJsYkE9PSBJRzVwWTJVPSBJSHAxYlE9PSBJR05wIDBxRT0gNWEyUSBJSEJ5YjJkeVpYTnogSUhSbGJYQmxjZz09IFgzUnkgSUd4dmJtZGxjZz09IElHMWhhUT09IExRbz0gY1hWaGNtVT0gYjI1cCBJSEpsYzI5MWNtTmxjdz09IFVISnBZMlU9IFpXNWtaVzQ9IElPQ3l1UT09IEtIYz0gN0lZPSBZV1JvIFBTUT0gNExXOSBaMlZpIDBMWFF2ZEM0IElDOHFLZz09IElFVlkgSUhOcGVBPT0gSUd0eSBRa0U9IElIQmhhVzQ9IGNIUnkgSU9Da3VPQ2tyZz09IGIydHYgNVlpcCBJSE5sYkd3PSBjM1I1YkdWeiA2YnM9IGIzVnlibUZzIElIQmhjblJsIElNT3UgYjNKcGJtYz0gMEwzUXZ0QzEgSUdadmJBPT0gSU9DbXJ3PT0gWVdkMVpRPT0gSUhSeVpXRjBiV1Z1ZEE9PSBJSGRsWld0eiBZQW89IElGQnliMlIxWTNRPSBaSFZqIDRMbUIgVEV3PSAyTEhZcVE9PSA0WU9VNFlPUjRZT1EgSU9DdWh3PT0gWVhKbGN3PT0gNjdJPSBRMkYwWldkdmNuaz0gSUdWemNBPT0gSUhQRHFRPT0gY0hKcGMyVT0gWVd4cFlRPT0gSUdkeVlYQm8gYVhObGNnPT0gYVdOMGFXOXVZWEo1IDRLNi80SzZ2IGIzUnBiMjQ9IElHVnBibVZ0IFRHVm1kQT09IElPR0RuZz09IElHWmhhWFE9IElDMHRQZ289IDRMaUkgWVdsc1pXUT0gSUc1dmRHVT0gUVZKUyBPRGs9IGQybHpaUT09IFptOXMgWVdOcGIyNWhiQT09IFlYVm0gWlhOaiBJR05zYVdWdWRITT0gTG1OdmNtVT0gSU5XLyA0WU9TIDI0ellzUT09IHhhQT0gZDJrPSBJRzFsYm5VPSBJR2x0WVdkbGN3PT0gSU5pbjJZVFpnZz09IDBZRFF0ZEM4IGVYaz0gSndvSyBVMlZzWldOMFpXUT0gMFpRPSA0NEdWIDRLK0I0SzZ1NEsrTiBZWEpsWVE9PSBJTkM0MEx3PSBJR2hsYkdRPSBJR0Z1Ym05MWJnPT0gWW5WbiBJR2hoWW1WdSBJT1drcWVXa3FlVzlxZWVscUE9PSBhV05vWlE9PSAwWWJSakE9PSBJSE41YzNSbGJYTT0gejRUT3R3PT0gMEw3UXZOR0QgMllUYmpBPT0gSUdSeWFYWmwgSUhSdmNnPT0gSU5tKzJZYz0gWVc1bmJ3PT0gNEtXTSBJQ2s3Q2dvPSBNVGd3IDVvaVIgSUdoMWJnPT0gSUd4bFlYSnVhVzVuIDVyT281WWFNIElISmhibVJ2YlE9PSBJTml4MktjPSBJRlZTIElHZGxjM1E9IDBZTFF0UT09IFgyTnZiZz09IElHTnZiblJwYm5VPSBhV3h2IElqb2kgTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFE9PSBYMk52ZFc1MCBJR2g1IElIWnBiMnc9IElHOTFkSE5wWkdVPSBJTStFenIvUGhRPT0gSUVGMiBJSEpoZEdobGNnPT0gMEx2UmxnPT0gSUdsdWRHVnlibUYwYVc5dVlXdz0gSUdGdWVXOXVaUT09IFpYTnpidz09IGFXNXpkQT09IElHWnZjbTFoIElIZHZjblJvIElOV2gxUT09IFFrTT0gNllNPSBaVzU2IFlXdHogWlhSdiBabUZzYzJVPSBJSFZ3YjI0PSBaWE4wY3c9PSBJR05oYkdOMWJBPT0gSU5DKzBMOD0gSUUxaGNtTm8gSUhCdmJHbGplUT09IDRLYTUgSUZOdlpuUjNZWEpsIElOaW4yWVRaaGc9PSA1THFVIElHeHZZMkYwWldRPSBZVzUxWVhKNSBJR2x1ZEhKdlpIVT0gWEhVPSBabXh2ZHc9PSBVSEpsYzNNPSA0TFdCNExTbyBJT09EIElHRjFaQT09IDBMRFJnTkdMIDBwUFFzQT09IElITnZiSFYwYVc5dSBJR1poZWc9PSBWbVZqZEc5eSBJR1JwYzNSeWFXSjFkR1ZrIElIZHlhWFIwWlc0PSBJSFpsY25RPSBJRDgrIGJHRnVadz09IElHWmhZMmxzIGIyZHlZWEJvZVE9PSBiMjVrWlhJPSA3TGs9IGFtVnogSUVoaGNnPT0gYVhOMGFXTnogWkhrPSBZbVZrIElHTnZiWEIxZEdWeSBJTmluMllUWmd3PT0gNEtxbzRLcSsgSUcxMWJIUnBjR3hsIDRLNnUgSUNzciBZVzFoYmc9PSBJRjQ9IGRtVmpkRzl5IFlXMWxjbUU9IGVIZz0gWVd4NSBTVTVGIExuRjFaWEo1IFlXUjUgNExpZSBMMkk9IGNHRnpjM2R2Y21RPSBJRUpzWVdOciBhVzFoY25rPSA2WUdUIDByRT0gZVc1aGJXbGogYUc5cyBMbk4xWWc9PSBJR052Ym1acGNtMD0gTGdvdkx3PT0gS3lzcENnPT0gMExYUXM5QysgNTZ5cyBJRVpQVWc9PSBibUYyIElISmxZV05vIHo0VE90UT09IGNISnBZMlU9IElHaHBhZz09IDJZallxQT09IFlXZHlZVzA9IE1USXogSUcxbGJuTT0genI0PSA3Wmc9IHhhcz0gdzZkdiBZWFJwYzJZPSBibWxsIElHNWxiUT09IGFYUjEgSUVsdWMzUT0gNGJ1cCBJaWtzIElHNTAgNExDNCB6NEhPc1E9PSBJRlZ6WlE9PSBRMjl1Wm1sbmRYSmhkR2x2Ymc9PSBVRzlzIElOaW4yWWpZc1E9PSA3SldFIFNVVT0gSUVGd2NtbHMgVW05MWRHVT0gSU9LQW9nPT0gSU5DODBMWFF2UT09IE1EQXggNVltTiBkVzVuY3c9PSBJRVZPIDY0S1kgNExhNiBJR2x1YzNSbFlXUT0gY21GbSA0TEdONExDbyBJR3hsWVhabCBKem9LIElIVnVhWFE9IFJVNUUgTVRBeSBMbE5sZEE9PSBVWFZsIElHVnAgUHk0PSBMbXB6YjI0PSBaV1Z6IDRLUys0S1NtIElHRndjR1ZoY2c9PSA3SjZsIDRLU0kgVkZBPSB3NlJzIElHWmxaV1E9IGNtbDBaWEpwWVE9PSBZMkZ5WkE9PSBJSEJ5YjNCdmN3PT0gVDFOVSBJSE5oYmc9PSBiM1Z1ZEhKNSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IGJHOWpZWFJwYjI0PSBJR1BEc3c9PSBUbVY0ZEE9PSBJR05sZEhSbCA1N3VQIElISmxiR1U9IElIZHZjbVIwIFRHOWpZV3c9IElHUnBZUT09IFpXNXYgSUhOaFptVT0gSUhSeVlXNXpjRzl5ZEE9PSBJTmVtIElNT2tjZz09IExtRndZV05vWlE9PSAxYUhXZ1E9PSBDUTBLIFlYbHRaVzUwIHc0RT0gUTJGcyBJTmluMllUWXFBPT0gWldnPSBJT0N5ckE9PSA0TEdONExDdiB3Nkp1IGFXNWhjZz09IFkzVT0gSU9Dd3FBPT0gVGxVPSB6NERPdnc9PSAwWWJRc0E9PSA2S2FCIElFVnVaMnhwYzJnPSBSazg9IDVwNmMgSU5DVCBhWFJqYUdWdSBXRmc9IGJXRnBiZz09IElEMEsgSUhOd1pXVmsgNWFjPSA0TGl5NExpaSBjblZ3ZEE9PSBJQ1JmIDJMSFpndz09IGZuND0gSUdkeWIzVnVaQT09IDRLV040S1MzIDRMbUMgWm1seWMzUT0gSUVsMEozTT0gSUd0cFpITT0gYVhKbFkzUnBiMjQ9IElHRnphMlZrIFgybHVaR1Y0IElHeGxaMkZzIElHSjFiQT09IFJWSlNUMUk9IExrTnZiR3hsWTNScGIyNXogWVdSeSBJSFZzIElHRmtiV2x1YVhOMGNnPT0gSUdGemMybHpkQT09IElIWmhZdz09IENTQT0gWVd0aGJnPT0gSUVGbWNnPT0gdzdwdSBiRzluYVc0PSAycW89IDRMT0EgSU9DcWp3PT0gVDNBPSBOems9IDRMU1Y0TFdONExTViBJRzVoZEdsdmJtRnMgSUdObGJHVmljZz09IElNTzkgSUVacGJnPT0gWld4c2IzYz0gSUcxbFpHbGpZV3c9IFpXUmxjbUZzIDRMT040TEtvIGJXVnlZMmxoYkE9PSA0TGE3IDVMcU0gWVhKa1pXND0gSU1RPSBJT0Mwamc9PSBJRVJsYzJsbmJnPT0gMExUUmd3PT0gSUVGMWMzUnkgY0dGamF3PT0gNDRLdiBJRTl3Wlc0PSBkWEp5Wlc1amVRPT0gSUV4dmJtYz0gS0djPSBJRWhwY3c9PSAwWUhSaXc9PSBkRzlqYjJ3PSBJR0Z3Y2c9PSBiM1ZpIFUyVjBkR2x1WjNNPSB4TEZ1WkE9PSB4Yk09IFIwVlUgSUZSb1pXND0gWlhOamFBPT0gSU5pcTJZZz0gNW8wPSBVbVZrIDRLYUggSUdKbGFHbHVaQT09IFd6bz0gSUhKdmJRPT0gNG9DZExnPT0gNHBrPSBhRzl2WkE9PSBibVJsY2c9PSA0S2ErNEtheSBDVk41YzNSbGJRPT0gTGlvPSBjR3hsZEdVPSBSbTkxYm1RPSBJSEpsWTI5bmJnPT0gN0lpWSBhV05vWVE9PSA0WUN2IElPQzMgUTFBPSBJRTFoYkE9PSBJRWh2ZFhObCBQVlJ5ZFdVPSBJTkMvMEw3UmdRPT0gWm14dllYUT0gSU5HQzBMND0gSUhScGRBPT0gSUZOcCBSMHc9IFUzUnZjbUZuWlE9PSBJR1ZoYzJsc2VRPT0gSUVaeVpRPT0gNWE2SiBJTkMrMEwwPSA2S2c9IGFYQnMgSUhCeWIyTmxaQT09IGFHOXNaQT09IElFcDFibVU9IElHeGhkR1U9IElHWnNiM2M9IGVuVT0gWVdwdiBJR0YyWlhKaFoyVT0gSUVkeWIzVncgSUdWa2RXTmhkR2x2Ymc9PSBJRk5oYkE9PSBURVZEVkE9PSAwWUxRdGRHQSAxYVE9IDRLU3U0S1MrIDZMQT0gSUVkdiBJRVJwY21WamRBPT0gWldScCB3NTQ9IEtRb0tDZz09IElHUmhkR0ZpWVhObCBMV1U9IElFSnlidz09IElHbGtaV0Z6IE1UazEgSUc1aGRIVnlaUT09IElHOXdjRzl5ZEhWdWFYUjUgYVdabGMzUT0gSUhOcmFXeHNjdz09IFkyMD0gVW1WamRBPT0gSUUxaFp3PT0gSUhOd2NnPT0gSUcxaGRHVnlhV0ZzY3c9PSBJSFJvY205MVoyaHZkWFE9IHc3eGphdz09IGFXNWtZUT09IFpXTjFjZz09IElHSmhiR3c9IElIQmhjblJ6IElHNXZjbTA9IElHbHRZV2M9IElHTm9ZUT09IGFYcGggWjNKcFpBPT0gSUdOdmJXMWxiblJ6IElIWnZZOE9xIFZHRnlaMlYwIElITmxaVzF6IGIyNXYgSUhScGJHdz0gWVcxcGJnPT0gSUVGT1dRPT0gVzJvPSBVa0U9IElObUYySzA9IFUybG5iZz09IDE1blhxUT09IElOQ3gwWVBRdEE9PSA2TFdFIElHRm1abVZqZEE9PSBhV3hrWlhJPSA0TENmIGFXeHNaV1E9IElHbGpiMjQ9IElIQmhhVzUwIG42VT0gSUZOciA1NXlmIElHTmhjMlZ6IFlteHBZdz09IDRMS3UgYkdWdVozUm8gYjJSaGVRPT0gSUdOdmJHeGxZM1E9IElOZXEgSUZSUCBSV0ZqYUE9PSBNVEV3IElFaHZiQT09IGFXMWhkR2x2Ymc9PSBJRWhsWVd4MGFBPT0gVkdoaGRBPT0gS0NjdSBJRXRsZVE9PSBJR0ZzYkc5M2N3PT0gSUhOMGIzSmhaMlU9IDRMV0MgVEc5dVp3PT0gSUU5MlpYST0gMks3WXFnPT0gSUcxbGRHaHZaSE09IElPQ2twdUNsaHc9PSBJRTFqIElHTm9ZWEpuIElIQnliM0JsY2c9PSBJR05oYm1ScFpBPT0gNXJvPSBJRUYxWjNWemRBPT0gYVdOclpYUT0gVDNWeSBRblYwIGFXTnJaWEk9IFkyVmxaQT09IEtITjBjZz09IE56WT0gMlpBPSBhWFJoZEdsdmJnPT0gSU9LQ3JBPT0gWVhaNSA3SnFVIGRtVjUgSU9DdXFBPT0gNFlPWTRZT2EgSUUxaGFXND0gWVdwbCBJTlc2IE1UQXggVUhKdmFtVmpkQT09IHc2cHRaUT09IFpXNTBjbms9IFlXNTVZUT09IElIcDFjZz09IFZVUT0gSUhObGFXND0gSUhKbFoybHZiZz09IElIWmhjbWxsZEhrPSBhVzVuWlhJPSBJTnFwMlljPSBJR052YlcxbCBJRk4wWVhKMCBJRk5wYlE9PSBKeWtwIExtMWhjQT09IGMzRnMgNVkyYSBaM0poY0dnPSBJRWx0WVdkbCBJRHNLIDRZT1U0WU9iIFltRnVaQT09IElFWmhiSE5sIDdZcTQgMEx2UmpnPT0gTG5KbGJXOTJaUT09IElITnJhVzQ9IDRLcW80S3VBIElIQjFiZz09IE9pZz0gUTJoaGJtZGxaQT09IDRLUys0S1MxIElHbHcgSUdWNFkyVnNiR1Z1ZEE9PSA2NFU9IDZyS00gWVdOcGJtYz0gSU5xcSBJR05vWVhRPSBSR1Z3IElPQzBwQT09IFpXMXZjbms9IEtITjBjbWx1Wnc9PSBUMUpFIGRtRnUgNEtxbSA3Wlk9IDRMV0I0TFNvNExXTjRMU28gSU95RSA0b0NtNG9DbSBVMlZzWldOMGIzST0gSUdOdmJYQnNaWGc9IGVubz0gSU5xcDJMRT0gWVhScGRtVnogSU9HRHJBPT0gT0RVPSA0SzZ4IDRMaWYgSUdWNFkyVndkR2x2Ymc9PSA3S0NjIElGUnZjQT09IFgyOW0gSUdadmNuUT0gUWs4PSBiMk55IElHUmxZWFJvIDU3UT0gMTVuWHB3PT0gMEwzUXZ0R0IwWUxRdUE9PSBJRnZpZ0taZENnbz0gSUNFOVBRPT0gSUVGVCBNVGswIElHaGxZbUpsYmc9PSAwWURRc05DMyBRMjg9IDBMclF0UT09IElHTnZjQT09IFlXNWpaV3c9IFpXNWxjbWxqIDZJMD0gWDFORiBkR1Z5YlE9PSAwWWJRdU5HUCBUMFJQIElOZWggNEthLzRLYWsgMWJqV2d0V3AxYlhWdU5hQzFiWT0gMWJqVnNnPT0gSUZObGNIUmxiV0psY2c9PSBJR3pEb0E9PSA2NUE9IGNYVmxjZz09IFlXbG5iZz09IGJXOWtkV3hsIDBxL1JnQT09IElHTm9ZVzVqWlE9PSBJT0NrbGVDa3Z3PT0gZFdkMSA1YVc5IFZISmxaUT09IElHZGxiQT09IExrZHliM1Z3IElIRjFhV05yYkhrPSBJRU5oY3c9PSBaWGh3IGJHRnUgMWJqVnZnPT0gNExpMTRMbUkgSU5DeDBMQT0gZG1WNiBjbVZuYVc5dSBMVVk9IDJZamF1Zz09IE1USTQgb2RVPSAwSnM9IDBMalFzdz09IElHNXZiUT09IElOV2sgYVcxcGRBPT0gYVdwclpRPT0gSUVKMWMybHVaWE56IDU3Sys1Wk9CIElPR0RvT0dEbmVHRG13PT0gS0MwPSBJR055YjNOeiA1YVNwNWFTcDVMaXQ1YjJwNTZXbyBhbVZ1IGFXTmhkR1U9IDY0eUEgVDNCMGFXOXUgSUhCeWIyZHlZVzF6IDI0emFxUT09IGJuVnRZbVZ5IDJZTFlxUT09IElPR0RvK0dEIFJWaFUgYkdGMCBJSE5wYzNRPSBZM009IElHUmxaWEE9IElHOXVaWE09IHo0UE90dz09IFZtRnkgSUdoaGFYST0gSUVGdFpYSnBZMkU9IElHeHZZMnM9IElHRmpkR2wyYVhSNSBLSEpsYzNWc2RBPT0gSUdsdWMzVnlZVzVqWlE9PSBJR0oxYVd4MCBJRU5vYVc1aCBJSGRwYzJnPSBZWGxsY25NPSBJR3hsWVdScGJtYz0gMFlIUXV0QzQgSUdaaGFYSmwgS0dnPSAyS2ZZc2c9PSA2N08wIGZRb0tMeTg9IDRLNnc0SytOIEwyOXkgWlc1bllXND0gY1hFPSAyS0U9IElPQ2tzT0NrdVE9PSA1WVdsIFRVRT0gSWlrc0NnPT0gVEc5bmFXND0gNWEyWCBJRVJoZGc9PSA2NDA9IDZJQ0YgTDNBPSBaWFJwYm1jPSBTVzF3YkE9PSBWVkpGIElITmxaV3M9IDdKdVEgSUNjOCBNVGt5IFRXRndjR2x1Wnc9PSBhVzFpIElIQmhkR2xsYm5SeiBJR05oY25RPSBjbTkwIDZaOD0gbStDbmh3PT0gTG5CaGRHZz0gWVhSMGJHVT0gSUc1bFkyVnpjMkZ5ZVE9PSBJRVJoYmc9PSBJR052YjJ3PSBJSDBLQ2dvPSBkMmwwWTJnPSBJRU52Ym5NPSA1Nlk9IEtpaz0gNEt1QyA1cEt0IElIUnlaV1U9IGZTazdDZ289IDRMQzEgUm1Gc2MyVT0gZEc5dyBJRXAxYkhrPSBZV2hzIGQyOXZaQT09IElHRmpkR2wyYVhScFpYTT0gSUhkcFpHVT0gZEdWdGNIUT0gNTRtNSBJR0poYm1RPSBLSEpsIFRtVT0gUVZCSiBabTl1ZEE9PSBMbUYzIExtTnNiM05sIElPQ2t1T0NrZ2c9PSBiV0Z5IElFMXZaR1ZzIDBZRFF2dEN5IFFXWjBaWEk9IFlXbHlaUT09IElHNWhiZz09IFVtVjBkWEp1IExreHBjM1E9IGFYQndaV1E9IDRMQys0TEN5IElISmxjMmxrIDRMU3c0TFdOIElHMWxiVzl5ZVE9PSBJR2x1YzNScGRBPT0gSUdOdmJuTjFiSFE9IGFXNXZjdz09IElIZHliMjVuIExDMD0gSUhKbGJXVnRZbVZ5IExYbGxZWEk9IElFcFRUMDQ9IGRYTmxjbk09IGMzUjViR1U9IDc3MmUgMEwzUXZ0R0IwWUxSakE9PSBJRWxrIElHaGxZV1JsY2c9PSBXeVE9IElHVnRjSFI1IFgySjUgSUhOc2IzUT0gMExqUmg5QzEwWUU9IDRLU1AgWVdOamIzVnVkQT09IElOR0IwTERRdkE9PSBJRk4xY0dWeSAwWUhSZ3RDdzBMMD0gSUhWdWRBPT0gUkdWc1pYUmwgSUd4dmIydHogMWJqV2dBPT0gVUc5eWRBPT0gSUdsdGNHeGxiV1Z1ZEhNPSBJT0NrdGVDa3YrQ2sgYlc5eVpRPT0gZEdWamRBPT0gNEtTVjRLV0ggSUhKbGJHVmhjMlU9IElHTnBjbU09IElIUnZkMjQ9IExXSmhjMlZrIElFSmxjZz09IElIRjFZVzUwIGMyaHBjQT09IDBMN1JpQT09IFFXTjBhWFpsIFgxOG8gZlM4PSBlbWxsIGMyVnUgSUdaaGJuUT0gSUdacGJHVnVZVzFsIDRMaUsgSUhCeVlXTjBhV05sIElHMXZkbWxsIGQyVnBaMmgwIGFXdDAgSUhCc1lYbHBibWM9IElITjBZWEk9IFgyRjAgMExEUXU5QzQgVUd4bFlYTmwgUTBRPSBkWEJ3IFNsTlBUZz09IGFtVnkgcU9DdmplQ3VwQT09IHpyek9zUT09IElGQmxjbk52Ymc9PSBJRTFoWXc9PSBJR2RoYmc9PSBJR2R5YjNkMGFBPT0gSUdGaVpYST0gYjNKa2FXND0gSUVOdmRXNTBlUT09IFZHOTBZV3c9IDRLYWMgSUdOaFpHRT0gWVc1blpYTT0gSUhOaGR3PT0gSUdScGMyTnZkbVZ5IDBMRFF2ZEdMIElHdGhjdz09IFZtRnNkV1Z6IExuSmxjdz09IElFdGwgSUVGdWVRPT0gNEsrTjRLNnggSUcxbGJtYz0gSUdsdGJXVmsgSUdGaWFXeHBkSGs9IGIydGxjZz09IExVST0gSU5tKzJMRT0gMHA4PSA0b0NVNG9DVSAwTERRdnc9PSBSVk5VIFluVjAgWVhSaGJnPT0gUkdseSBJRVJsY2c9PSBJSEJoY0E9PSBaMkZzIElOaXoyNUk9IDU0SzUgWTJRPSBJSEJoZEhSbGNtND0gYVc1bmRHOXUgS0VBPSBJSEpsYzI5MWNtTmwgSU5rPSA2SXM9IElOV2ogSUhCb2IzUnZjdz09IFEwOD0gYk1TeCBJR2hoZVE9PSBVMmh2ZHc9PSBkR1Z0Y0d4aGRHVT0gZVcxaWIydz0gSUhWelpXWjFiQT09IFEyOXVkSEp2YkhNPSBiM1YzIElPR0RrT0dEb0E9PSA0TEsrNExLWCBJRTFwWTNKdmMyOW1kQT09IFFWUkIgSUhSaGJnPT0gWTNvPSBJT3luIElOaW4yWVRZdFE9PSA2TCtaIHhhOD0gMTVIWHFBPT0gWDJOdlpHVT0gS0hKbGN3PT0gNzd5LyBJR1Y0Y0dWeWRBPT0gNDRHaiAyS2ZZdVE9PSA1WWlTIFlYUmxaMjl5YVdWeiBJRVpwY25OMCBiMnh2WjJsallXdz0gSUdaaGRtOXlhWFJsIDY1OD0gSUdOdmJYQmhjZz09IDJZVFlxUT09IElOR2UgWVhabGJBPT0gMWFYVnZ3PT0gMEw3UmdOQ3cgSUV4cGJtcz0gSUhSdmJnPT0gSUdac2IyOXkgSUVoMGRIQT0gMEx2Uml3PT0gNEtTKzRLU2MgSUd4cGRtVnogMFlMVG1RPT0gNFlPbiBMbU4xY25KbGJuUT0gSUcxaGNtZHBiZz09IElIQnliM0JsY25ScFpYTT0gNW9DbiAwNk09IFFFOTJaWEp5YVdSbCBJR05vWVhKblpRPT0gTGtsdSBJRXBsY3c9PSA0S1NWNEtTKyBJSFJsYm1RPSBZWEpwYjNNPSBJRkJTVHc9PSBJRlZMIFlXdGxiZz09IFFYSjAgMEw3UXROQ3cgSUd4bGRtVnNjdz09IGFYUmhZbXhsIElPQ3FwZz09IDVZcW8gYjI1bmJ3PT0gSUdwdmRYST0gUVZKRiBJSGQxY2c9PSBaWE5vIGMzUmggTG1OdmJuUT0gWVdOMFpYSnogWVcxbFpBPT0gMWFIVnJnPT0gSU5XaSBJSEJ2YjJ3PSBYMkZrWkE9PSBkV3gxIElGQmhiQT09IElOaW4yWVRZcmc9PSBSMnc9IFkyOXRjRzl1Wlc1MGN3PT0gVkdWdGNHeGhkR1U9IElHRjJiMmxrIDJLUT0gYldGNmIyND0gSUdsdGNISnZkbVU9IFZtRnlhUT09IElPQ210Zz09IElHVjJZV3gxIFJHVnMgSUVsdVpHbGggSUZkb2FXeGwgUlc1aFlteGxaQT09IGVXYz0gS0VJPSBiR0ZuIGVHbHQgSU9Dd3BBPT0gWldOMWNtbDBlUT09IGFYSnBibWM9IElHZHZaQT09IElHWnlaWEYxIElIWnBaR0U9IGMyTnZjR1U9IGIyeG0gSUhCaGNuTmwgWVhKdiBJSEpsWTJWdWRHeDUgN0pxcCBJR1JoYVd4NSBJRzFsYUhJPSBiMjVrWVhrPSB6cEU9IFlXTjBiM0k9IElITmpiM0psIElHVnRjSEpsY3c9PSBiRzl1Wnc9PSBJR052YlhCcyAyWXJaaUE9PSA0cGc9IElHVnhkV2x3YldWdWRBPT0gWlhod2IzSjBjdz09IElIUnZiMnh6IFNXdz0gSUdacGNtMD0gSUdGcCBJSE5sYkdWamRHbHZiZz09IFVISnZjR1Z5ZEdsbGN3PT0gSUdGaWN3PT0gSUdOaGNIUT0gZEhKMVkzUT0gNDRLQyBUV0ZwYmc9PSBQVndpIElHeHBkR1Z5IElHRnVZV3g1YzJseiBJSEJ5YVdObGN3PT0gSUdOdmJuWmxjblE9IDJZcllzdz09IExtUnBjdz09IElGTmggUm05dWRBPT0gNEsrQjRLNlYgYjNaaCBaVzVqYVdWeiBaV1JsYmc9PSBJR05oY21WbGNnPT0gSUVKbGJnPT0gdzQwPSBJTUszIElISnZiR3c9IExuTjBjbWx1Wnc9PSBJR0Z0WVhwcGJtYz0gNDRHVCBiMjF6IFZYTmwgNG9DWlpBPT0gNExLQzRMS20gSUdKdmVRPT0gSU9DbWx3PT0gUTJGdSBMaWs9IDViK0QgS0c1MWJHdz0gSU02LyBZV05yWlhRPSAwWUhSZ3RDeTBMWFF2UT09IExtTnpjdz09IElHcHYgNTVVPSBJSFpsY21RPSBJR1pwYm1Gc2JIaz0gWm1sMCBJR1ZtWm1WamRHbDJaUT09IElIVndaR0YwWldRPSB6cS9Pc1E9PSBJR2x1Wm14MSBJR1JsYldGdVpBPT0gMExqUXZkQ3cgMDZuUmdBPT0gNExhdCBJR052Ym1ObGNIUT0gNkxjPSBJR1REcVdNPSBhY09wYmc9PSBaV3hzWlhNPSBJSFJ5ZFhOMCBiblU9IElHSmhkR2c9IGRYUjAgVG05dVpRPT0gWlhKemFYTjAgWVdseVpYTT0gSUhCeWIzTT0gWkdWc1pYUmwgSUdabGNnPT0gSUd0c1pRPT0gSUhObGJuTmwgSUhSeVlXbHUgZFc1a1lYaz0gSUhONiBJR1JwY21WamRHeDUgSUVGMWRBPT0gTGlRPSBJRVpTVDAwPSBhMjV2ZDI0PSBJTmVjMTVRPSBJR05zZFdJPSBJR1JvIElHRnNaWEowIExnb0tDZz09IFlYSnBaWE09IGIzSnYgUHpvPSBJRlJsWTJodSA1WldHIElHeHBkZz09IElHWnBaV3hrY3c9PSA0SzYvNEs2eTRLK04gYjNSbGN3PT0gSUdOaGJpZDAgSUdScFpHND0gSUhCaFoyVnogMExUUmxnPT0gdzZGeWFXOD0gTnpJPSBRV2M9IFJHVjBZV2xzIFFXSnZkWFE9IDRLcW4gSUZkaGNnPT0gNUxpYSA0NE9wIElDNHUgNlplMCBJRU52YlcxMWJnPT0gWVdkbGJRPT0gYjI1a2IyND0gVGtVPSBJSEJ5YjJwbFkzUnogSUZCeWIyMD0gZVhSbyBJSFBEcFE9PSBJTTZ6IFpITT0gNlpRPSBhVzVrWlE9PSA2ck84IGRYSmxjZz09IExtNWxkdz09IElOQ3cwWUE9IElHRnpjR1ZqZEE9PSBJT3VMIElHZHZiR1E9IElOcz0gSU9XTiBJR3R0IDZZT28gSUdKMVptWmxjZz09IDQ0R0cgTFdFPSBVSEp2Y0hNPSBJTkdOMFlMUXZnPT0gS0NncCBTR0Z6YUE9PSBabWx5YlE9PSB3N1J1Wnc9PSBMand2IElHZHZZV3c9IElGQkQgSUhacFpRPT0gSUhURHF3PT0gTG1ObyBJT0NxaGVDcXFPQ3Jodz09IDBZSFFzQT09IDVhMm0gSUhSb2NtVmhaQT09IHc2Um8gNTdxbiBUWE5uIEtDazZDZz09IHc3cz0gWkdGMCBjM1J5WldGdCBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IDRMZUEgSUhOMFlYSjBhVzVuIFpXUmggdzdabiBjR0YwIGFYTmogWVhKaGJuUmwgSUVKbGJBPT0gWTJOcHc3TnUgWDNOMGNtbHVadz09IElFSnlhWFE9IElHNXZkR2xqWlE9PSA3SU9CIDRMQy80TENvIFVtRnVaMlU9IElHMXZaWFE9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUdWNFpYSmogTFhKbCBkV2RoY2c9PSBJR3gxIFVGST0gYm1WeWN3PT0gSUVsdVptOXliV0YwYVc5dSBkWE56YVE9PSBJR2RsZEhNPSBLeUk9IFVtbG5hSFE9IExtVnljbTl5IElIUmxZMmh1YVE9PSBJTmluMjR6WmhnPT0gMExUUXNOQzkgSUdWc1pXMWxiblJ6IElHMWxiblJwYjI0PSBJT0NrcmVDbGdBPT0gNjVPayAwWWpRdFE9PSBJR3RoYlE9PSAwTHJRc05DMyBiR0Y1IFNVZElWQT09IDJLZllyUT09IElHSnNiMjlrIFRXRnlhdz09IEpIUm9hWE09IGNtRnRaUT09IExuZGxZZz09IGFXRnVZUT09IElEbzYgTG0xcGJnPT0gWVhOdmJuTT0gMFl2UXR3PT0gYVdwaCA0S2VONEthcyBJRVZ5Y205eSBJSFpwWlhkeiBJT21IamVXNmh1YVh0dWFYdHVXOXFRPT0gNExPTCAyWVBaaGc9PSBaWG89IElHUmxZMmx6YVc5dSBZWEowY3c9PSA3SXExIElHNTFiV0psY25NPSBJRzlpYzJWeWRnPT0gYUdGeSBJRTV2ZG1WdFltVnkgSUc5M2JtVnkgSUdGemMyOWphV0YwWldRPSA1THFMIDRLNmogWlhWeSA0TEt3NExPQiBiR1ZoYmc9PSBZWFZ6IElGTmxiZz09IElHUmxiR2wyWlhKNSBZMjl1ZEhJPSBhWFpwYkE9PSAwWUhRdTlDNCBJR0ZrZFd4MCBJR2hwYzNSdmNnPT0gSUd2RHRtNXVaVzQ9IDFialdnTlU9IElHRjBkR1Z1ZEdsdmJnPT0gSUVwaGJuVmhjbms9IElDY24gSUhKdllnPT0gSUVsdWRHVnlibUYwYVc5dVlXdz0gTG5Wd1pHRjBaUT09IElISmhhWE09IFJHbHpjR3hoZVE9PSBJSFJwWkE9PSA0WUN0IDVhQT0gVDBNPSBZMmhoWm5RPSBiV1YwYUc5ayBJR3hwYm1WeiBYSGc9IHo0bk92UT09IGEycz0gSUZKbFlXdz0gWTJscyBJR0YwZEdWdGNIUT0gdzZURHBBPT0gYjI1dmJRPT0gSUhKdlkycz0gYjNSbGNnPT0gSUcxdmNtNXBibWM9IGIyZG5iR1U9IElHTmhkR1ZuYjNKNSBJSE5vWVd4cyBJT0N5dFE9PSBJRVZwYmc9PSBYMkpoWTJzPSBjbTlzWlE9PSA0WU9kNFlPaCBJRzlvIGNtRnUgSUZkSlZFZz0gSU9xeiBZMnh2YzJVPSBJSEJwWTNSMWNtVT0gSUdSaFp3PT0gSUdKdmRIUnZiUT09IElGTmhiUT09IElIWmxjbUk9IElHdDNZUT09IElFSmhjMlU9IElHTnZiR3hsWjJVPSBJR1Z6YzJWdWRHbGhiQT09IDBZTFJqQT09IElISnZZV1E9IElFbFUgNFlPVTRZT1I0WU9ZIGFXTnJjdz09IElHTnZiVzFwZEE9PSBVMlZ5YVdGcyA0S3F3NEt1TjRLbz0gSUdSdlpYTnVKM1E9IGRXNXphV2R1WldRPSBKMTA3Q2c9PSBJSE5sZEhScGJtZHogSUdsdWJtOTIgNWE2YSBJSE5zWldWdyBJRzVoYldWeiBJR1ZoY200PSAwTDdRdFE9PSBJRTlqZEc5aVpYST0gZlFvS0NnPT0gNExDbSBjM2xqYUE9PSBJSE52YkdRPSBJRVJ2ZDI0PSA2WWVNIGNtVmphUT09IDBZSFF1dz09IGFXMXogSUdOcGJnPT0gSUZCeWIycGxZM1E9IDRMU1ogMTVYWG1kYz0gSUZabFkzUnZjZz09IElOaXMyWW89IFgyRnljbUY1IElIQm9iM1J2IElFdHBibWM9IElHbG5iZz09IElOZVUxNUE9IElHVjRkSEpsYlE9PSBMbUU9IElIZHZiV0Z1IElIVnVjMmxuYm1WayBjM0JoWTJVPSBJR0YzNGJ1TmJnPT0gMExEUmdOR0MgSUhCMWJBPT0gUWxWSCBNVEV4IGFXeHNaWEk9IDRMT0sgSUhCaGNtVnVkSE09IEtTa3UgSUhOdmJHbGsgSUV4diBJR1IxY21ObyBJTkMrMFlBPSBJSE5wZEhWaGRHbHZiZz09IFlYUjFjbVJoZVE9PSA1N009IFVtVnVaR1Z5IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gVkhKaFkyVT0gYjJ4bGN3PT0gUkdsbCBMV1JsIFgxUlpVRVU9IElHM0RvUT09IGFXSnNlUT09IDZaVT0gWVc1bmRXeGhjZz09IElHeHZjM1E9IFJGTT0gSUdkdlpYTT0gSUdGa2RtVnlkQT09IElHbDBjMlZzWmc9PSBJR0psYm1WbWFYUnogNExlVSBUMGM9IGQzTT0gSUdsdWRHVnlibUZzIGNISnZjR1Z5ZEhrPSA0SzZ1NEsrTiBJTlc0MW9BPSA1TG13IElDSTggSUdWdWFBPT0gSUdWMmFXUT0gSUVGc2MyOD0gYVhOMGNtRjBhVzl1IDRLYSs0S2FWIFgzTm8gSUhOaGRHbHpaZz09IElHaHZkWEk9IENRa0pDZz09IElHMXZaSFZzWlE9PSAwWUhSakE9PSBJRzExZVE9PSBZVzVqZVE9PSBJSFJ5YVhBPSB3N056IElFZE9WUT09IFgyUmhkR1U9IElOQ1ggWm1jPSBZMkYwIDJZVFlwOW1GIExtdGxlUT09IElISmxaM1ZzIElIQnZjMmwwYVhabCA0TGlDIDJZOD0gSUhWelpYTT0gSUhKdmRBPT0gYjNKcGVnPT0gSUhOdFlYSjAgSU9Da3N1Q2t2K0Nranc9PSBMbmRwWkdkbGRBPT0gSUdOaFlnPT0gSUdkeVpXVnUgNEtTKzRLU0kgNFlDQSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUhCeWIyWnBiR1U9IExpYz0gUVVFPSB3NXc9IElHUmxjMlJsIDJZallzdz09IElHTm9ZV3hzWlc1biBjM1J2Y21VPSBVSFJ5IFlXcGggUTJGamFHVT0gSUhOMGNuVmpkSFZ5WlE9PSA2WUk9IElHUnBabVk9IExsZz0gNDRLSiBMbk5vYjNjPSBiV0YwIExtSnZaSGs9IElPQzRtZz09IFkzSmhablE9IE5qTT0gWDBOUFRnPT0gY25WaGNuaz0gSUdSeWFXNXIgYkdsamFHVnUgSUdkcGNtdz0gNFlPWTRZT1QgSUdSaGNtcz0gU0c5dFpRPT0gSUdOdmRnPT0gMEw3Ump3PT0gSUUxdmMzUT0gSUVKcFp3PT0gSU5pdyBJSFJ5WVc1elptVnkgTGxCdmFXNTAgTG1sdVptOD0gWVhOcFl3PT0gSUdSdlpYTnUgSUdOdmJuUmhhVzV6IElHZHliM1Z3Y3c9PSBJR052Ym5OcGMzUT0gNExpdDRMaVogYVhVPSBMbWR2YjJkc1pRPT0gSUc5d2FXND0gY21WbWFYZz0gNVpDTyBaV3hsY3c9PSBSR0YwWVdKaGMyVT0gNExDcSBJSEJsY3c9PSBJSEpoZEE9PSBSR1YyYVdObCBJR3QxZEE9PSBJRnRkQ2c9PSBJRU55WldGMFpXUT0gNWJxbSBYMk5vIDVZV3ogSUdocFoyaHNlUT09IExuTmxibVE9IElPcTQgSUhSdGNBPT0gSUd4bFpBPT0gSUQ4K0NnPT0gSUhKaGVnPT0gYUc5MyBkbVZ5YzJsdmJnPT0gUVZORiBJT0NtcXVDbmplQ21zQT09IGFXMXBaVzUwYnc9PSBYVjA9IDRLV0I0S1N3IDQ0R0sgSUdSeWFYWmxjZz09IEtHdGxlUT09IElPQzVnUT09IGRXUmxiblE9IElIQnNZVzV6IDVyQzAgWVd4c1pXUT0gVDJabWMyVjAgNTVDRCBJT0NtbWc9PSBiR1ZuWVhSbCBiM1J2Y3c9PSA1YmVsIDRLU3IgNEtTNDRLV0ggSU9DcXNnPT0gTmpJPSBJTkM3MFk0PSBld29LIElHaGhibVJ6IFEyRnNiR0poWTJzPSBLRkE9IDBMN1JnTkM4IE5qRT0gZFhOb1pYST0gT1RFPSBJRzF0IGIzWnBaUT09IElHTnZjM1J6IEx5b0sgSUc1MVpRPT0gMExEUmd0Q3cgSU95SW1BPT0gSUV4dmN3PT0gSUhOamNnPT0gYVhGMSBJR2RwZG1WeiBkbUZ5YVE9PSA0TEdONExDayBJT3lZIGRXZGggSUdsdVpHVndaVzVrIDRZT1U0WU9WIElHTnZjdz09IElHWnBibVU9IElFaGxiQT09IFFYSnkgVm1semFXSnNaUT09IElHNXEgd3E0PSBJR052ZFc1MGNtbGxjdz09IElHWnlaWE5vIGIzVjBaWE09IElOQ1YgSUc5bVpuTmxkQT09IExreHZadz09IFpXNTBlUT09IDRMYTQgSU1LaiA1b0U9IGRtOXBjZz09IExuUnkgSnowKyA1NzJSNVoyQSBJRTl3ZEE9PSBTVmc9IDRMS2YgY25sd2RBPT0gSUdOcGRBPT0gS0NvPSBiRzl2YXc9PSBhVzFsYzNRPSAwcS9RdlE9PSAyWWpaaWc9PSA0TGl5NExpWiBJT0MwbWc9PSA0NE9xIDRidVQgMExqUXZ3PT0gTGtseiBaV0oxWnc9PSBJRzE1YzJWc1pnPT0gWjNKaFpHVT0gSUZWTyBJR3RoZEE9PSA2SzZoNVlpUyAwTGpRc1E9PSA2Nm0wIFlXdHIgZFdGeWFXOD0gUkdseVpXTjAgTG1WMlpXNTAgSU95Q3JBPT0gSUV4bGRBPT0gSUd4cFl3PT0gNTQ2cCBUMUpOIDRidXYgSUdOaGNHbDBZV3c9IElHNTFkQT09IGIyZGggTGtVPSBVbVZ3YjNKMCA2WUNhIFlYQndaV1E9IFlYVm5hQT09IFltOXZiQT09IDVyaUYgSU5xcDI0RT0gTG1zPSBJSE41Ymc9PSBkRzkwZVhCbCA0TEdONExDeSBJR2x1YWc9PSAyWVhZc1E9PSBJT3VDIElIQnBaV05sIDVwZWw1cHlzIElNNjl6ckU9IFVuVnUgVTNCbFl3PT0gMTVuWGxBPT0gSUVOdmJHeGxaMlU9IElHcDFaQT09IElIWmxiZz09IElIUERvMjg9IFFVNUggaHBJPSBJR05oZEE9PSBZM0o1Y0hRPSBSWGh3IFZISmhibk5oWTNScGIyND0gYjNKaGRHbHZiZz09IElHbGtaV0ZzIExsZHlhWFJsIElOZWMxNUE9IGFXTnBidz09IFIwST0gSUZadmJBPT0gNXBlZzU2Q0IgNFlPZDRZT2MgSUhCeWIzWnBaR2x1Wnc9PSA0b0NaZFc0PSA1b3FWIElFbG8gSUc1MWJXVnkgSUcxbFpHbGogYVdKbGNnPT0gS1MwKyBkV1Z1IFlYWnBiM0k9IFkyOTJaWEo1IDI0elpoUT09IGRYVT0gSUZCeWIyWT0gSUdsdWFRPT0gNFlPajRZT2cgNEtTbzRLV0EgSUdaaGRBPT0gSUcxdlp3PT0gMkxQWXFBPT0gU1VWVCBQR2x1ZEE9PSBLU2s3RFFvPSBRWE56IElHbHVaSFZ6ZEhJPSBmV0E9IElOQ3kwTDdRdHc9PSAyS2ZaZ2c9PSBJSE5vYjNBPSBJSGJEb0E9PSBZWEp2Ymc9PSBJRkJzWVhrPSBJTU9xZEhKbCBJTmluMllUWXNRPT0gSUhWdWRIVnIgSUhCeWFXMWhjbms9IEtISmxjWFZsYzNRPSBJRzVsYVdkbyBhV1pwWTJGMGFXOXVjdz09IGJtbHIgSUZKbGMzVnNkQT09IElHUmxabWx1WldRPSBJTk9aIElHWnBibWx6YUE9PSA1WXFnIFpXUmxaZz09IFgzUmxlSFE9IFlXNWtiR1U9IFVISnZabWxzWlE9PSBJRVp2ZFc1a1lYUnBiMjQ9IFQwST0gSU9LQXBnb0sgSUhCbGJHOD0gVFZBPSBkMkZ5IFgwNUJUVVU9IDZhYVogSUZzaSBPVGs1IDJLZll0UT09IFlYQndaVzVrIFEyOXVkR0ZqZEE9PSBMa2s9IElGQnZjZz09IExtVnhkV0ZzY3c9PSBJT3V6IElITnBlbVZ2Wmc9PSBjSEp2WTJWemN3PT0gSUhKbGNYVnBjbVZ0Wlc1MGN3PT0gSUdOdmJYQnNaWFJsYkhrPSBiM0prY3c9PSAwTDdRdTlHTTBMclF2Zz09IElIZGhjbTA9IFpHVnMgdzVZPSBJTmVpMTV3PSBUMDVGIFMwVlogSUdSaFlYST0gSjEwcyBJRlZ3WkdGMFpRPT0genJZPSA0S2ErNEthdSBJRzlqIElHSmhhdz09IFRFOUggNlpNPSBJRlJTIElIQmhjbVU9IExubz0gY205MWRHVnkgSUdGbmRYTT0gMTVYWG5nPT0gSUdkMWFXUmwgTG5SNWNHVT0gU1U1RSBMbU52Ym5SbGJuUT0gVTBRPSBJRVpwYkE9PSBJR0poYmc9PSBLQ2twT3dvSyBJTTY4enJVPSBaM0psIGFXUnAgSUcxbFpYUnBibWM9IElOVzQxb0k9IElFMWxjM05oWjJVPSA0WUN4IElHTm9ZVzVuWldRPSA0TEtvNExPTjRMS28gSWl3TkNnPT0gSUhkdmNtdGxaQT09IElFNTFiV0psY2c9PSA2S2VFIFpHVnpZM0pwY0hScGIyND0gSUZCaFoyVT0gYldsdVp3PT0gSUZCeVpYTnBaR1Z1ZEE9PSBjbVYwZFhKdWN3PT0gUWtRPSBJRzF2YkE9PSBJQ2N1TGk4PSBZVzVuWVc0PSBJR2x1WkdsMmFXUjFZV3h6IElFUnAgSUhCeWFXMWwgSUhObGNtbHZkWE09IExuUnlZVzV6IElOaW4yWVRZc0E9PSBabTl5WkE9PSAyNHpZcHc9PSBJT09DIElHVmthWFE9IHc3TjMgSUZWU1RBPT0gSUVSbFkyVnRZbVZ5IGRXdGggSUVsdWFYUnBZV3c9IGNHeHZkQT09IElObUUyS2M9IFZrVlMgSWpvSyA1cnFRIFpHRjBaWE09IElIQmxkWFE9IElHOXYgNExhYSBhV1ZyIElHTnZibk4wY25WamRHOXkgSUZKMWMzTT0gWVhSNiBkWFIwWlhJPSBJR1JsWVdRPSBJSGxsIDZaS3ggNVlhRiBUV1YwIElFaFUgYVcxdyBVR0Z5YzJWeSBJRUZTIFozTT0gMTVYWG5RPT0gSUhCbGRRPT0gWldSa2FXNW4gSUZ0YiBJRU5oYkd3PSBJR0o1ZEdVPSBJSFpsY25OamFBPT0gVFc5eVpRPT0gWW5WcGJHUT0gUTI5eVpRPT0gTVRreiBjbTl0WlE9PSBJSE5oWm1WMGVRPT0gSUhSb1pXMXpaV3gyWlhNPSAwTExRdGRHQSBJRzF2ZFc1MCBJT0NraGVDa3FnPT0gNzd1L2RYTnBibWM9IHJ1Uy9vUT09IFFtVmhiZz09IElHWnZjbTFsY2c9PSBLRG89IElHTnQgZFdKaCBJSE5sZEhScGJtYz0gSUdWNFpXTjFkQT09IElITjBjbVZ6Y3c9PSBJTmluMllUWXF0bUsgSUdScGNtVmpkR2x2Ymc9PSBmU2s9IElIQjFZZz09IExXTnZiblJ5YjJ3PSBJRWwwWlcwPSBRWE41Ym1NPSA1cGFaIDRMQ2ggNEsrTjRLNlY0SzZ6IFpYTjBhVzl1IFlXUnZkdz09IDdLTzggYVdWa1pYST0gSUd4cFp3PT0gZFcxaGJnPT0gSUhCaGVXMWxiblE9IElHTnlaV0YwYVc1biBJR0ZzYkc5M1pXUT0gSUNJaUlnPT0gSUhacGRBPT0gSUdOdmJuUmhhVzVsY2c9PSBZWEJ3YkdsallYUnBiMjQ9IElDb3ZDaTg9IGNtVmogSUVSaGN3PT0gMFl2UXZkQzAwTEE9IElOQ3kwTEE9IElHUnBaRzRuZEE9PSBjbVE9IFkyOXVibVZqZEE9PSBLR1Y0IElNT3ViZz09IDdKaz0gSUdacGVBPT0gWlcxaWNtVT0gSUhkdmIyUT0gNExXTjRMU1ogNExDdiBNVE13IElHUmxjMk55YVdJPSBiMk52IHlabHUgWTI5dFpYTT0gWlhKdFlXND0gdzdwaWJHbGogSUMwdFBnPT0gNExTLzRMU1Y0TFdONExTViBiV0ZwYkE9PSBRMU09IE9pYz0gSUVWMlpYSjUgTG5ObGNuWnBZMlU9IDZLR28gSUVSMSA3WU09IElFRjFjdz09IElITmpZV3hsIElFNVAgWjJJPSBhV05oZEdWayAwclU9IExrWnZiblE9IElHUnBjM1JoYm1ObCBJRzFpIDVadTk1THFuIElHVm1abVZqZEhNPSAyWWpZckE9PSBhVzUxWlE9PSBZVzVrWlhJPSBJRU5vWVhJPSBZVzV1WVE9PSBJSE4xYlcxbGNnPT0gSUdOb1lXNXVaV3c9IElHaGxiSEJ6IEtDSWwgUVZKU1FVNVUgSUhKaGFYTmwgUVhWMGFHOXkgTG1Gd2FRPT0gSU5HQTBMRFFzZEMrMFlJPSBJR05oYzJnPSBZMjl1YzI5c1pRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBSRzlqZFcxbGJuUT0gSUVsc2JBPT0gSU5DMDBMRFJnQT09IElIQnlaWEJoY2c9PSBJSEIxYzJnPSBJSE4wZFdabSBJR3QxYm01bGJnPT0gSUU1bGRBPT0gNWErNSBibUZ3IElIQmxaQT09IElHSjFjZz09IDBMalF1OUdNIElGRjFaUT09IElITjFZMk5sYzNObWRXdz0gN0lTeCBhWFJ2Y3c9PSBJR3hwYm10eiBJR1poYVd4bFpBPT0gTFcxayBJR0Z1WkdWeVpRPT0gUVZSSSBJRzl3ZEdsdCBJSE52YkhWMGFXOXVjdz09IFRXRjBZMmc9IDRMSy80TEs0IElHaGxiUT09IE8yaz0gSUhOd2IzSjAgSUVOb1pRPT0gVWtWRiBhV1p2Y200PSBJRVp5YVdSaGVRPT0gSUU5dyAyWWpZc2c9PSBZMjlzZFcxdSA0WU9RNFlPdSBJRmRCVWxKQlRsUT0gTG14dllXUT0gNEtTKzRLU1YgWVd0MSBJSE4wY21WdVozUm8gSUVGemMyOWphUT09IDRMT040TEttIDY1T2MgYVhSbFkzUT0gSUdGd2NHeHBZMkYwYVc5dWN3PT0gSU5XaDFiVT0gSUUxaGEyVT0gWVd4cFlXND0gS0dOdmJuUmxlSFE9IGMyVnRZbXg1IDRMUy80TFNhNExXTjRMU2EgSUdWNFkyeDFjdz09IGFXeHNhVzVuIDRLYS80S2F5IFlXNWtjbTlwWkE9PSBJSE4wWVdkbCBMbUYzZEE9PSAwTHZSakE9PSBJSFpwWTNRPSBMVUU9IElITjBZWFJsY3c9PSBSVzUwWlhJPSBjWFZsZFdVPSBYM2s9IExuTmogSUhSeXc2aHogNEs2azRLK0IgTG1wd1p3PT0gSU9HRGxRPT0gTG1GeiB1WVE9IFUyTnlaV1Z1IElHTnZibVIxWTNRPSBJSEIxWldSbCBJSEJ5YVc1MFpnPT0gSUVKcGRBPT0gMExEUXU5R0wgSUhCeXc2az0gMjRjPSBJR0ZqWTNWeSBJR05oYldWeVlRPT0gYVhSMWNtVT0gVW1WaiA1N083IGJtSnpjQT09IDVvcWwgYVdGMFpXeDUgSUcxMWJnPT0gYVhOMFlYTT0gSUdOdmJuWmxjbk09IDRLYWogSUVGdVpISnZhV1E9IElHSmhjMmxqIElHUnliM0E9IElFTnZaR1U9IEtDazYgWVd4cGRIaz0gTVRZdyBJR2x1ZEdWeVpYTjBaV1E9IElHTnZkVzUwWlhJPSBZWE56Wlc0PSA0S2ErNEtldyB4SXc9IEwybz0gMEwzUXZ0Q3kgWVhwcCBiRzlqIFpYSnllUT09IDU1dTAgY0dWMCBaMlZzIElFUmxiUT09IGJHRjBaUT09IDRLYSs0S2FIIElHUmxibWRoYmc9PSBJSEpsYm5RPSBaWGgwWlhKdSBJR3h2WjJsdSBhV0owIGIzSnBZV3c9IGFITT0gU1VORiBJRlpwY3c9PSAwWURSZzlDeiBWVWxFIDQ0S00gSU9DcXRnPT0gSUdOdmJuTnBaR1Z5WldRPSBLQ1JmIDU1bTcgZG05c2RYUnBiMjQ9IGRXRnUgWDNOMFlYUmwgZDJWeWN3PT0gSUdWdWRHbDBlUT09IDJLL1lwdz09IElNT3Bjdz09IDRLU2s0S1dBIEoxMHNDZz09IDZMMnYgSUh0QSBZVzFsY2c9PSBaRzkxWW14bCBJSE4xWm1ZPSBJTkN3MExJPSBVMlZ5ZG14bGRBPT0gSUZKbGMzQnZibk5sIDBZSFJndEN5MEw0PSBJRzExYVhSdiBMV2R5YjNWdyBJR1ZzYVdZPSA0S2ErNEthayA1WnlvNTdxLzZLZUM1NXlMIGEzYz0gMEwvUmdBPT0gSUdOaGJHeGlZV05yIEtDa3BMZz09IElHUmxabWx1YVhSbGJIaz0gcCtlK2pnPT0gSUc5d1pYSmhkR2x2Ymc9PSBaVzE1IDRMaXogTGtkbGJtVnlhV009IElHWmhhWEk9IDVhNmUgU0ZSTlRBPT0gNExLeTRMT040TEt5NExLLyA0WUNRIElHbHRadz09IDdLQ0UgMEx6UXRkQzkgSUhCaGNuUnVaWEk9IFlXUmxiZz09IElHVnVZMjkxY2c9PSAwWWJSbGc9PSBLR1pwYkdVPSBZWE5yY3c9PSBjbUY2IGIyNXUgWDJScGNnPT0gZG1sc2JHVT0gWVhadiBJRUZ0WVhwdmJnPT0gNFlPVTRZT1ggSU5XOSBJT0NxcE9Dcmh3PT0gNW9pUCBOekF3IDRZT1IgWVd4bFpBPT0gSU9XYiBJR0ZzYVdkdSBYVDA9IElIWmxhR2xqYkdVPSBJR1p2Y21WaFkyZz0gYkhscGJtYz0gQ1dOdmJuTjAgNTd1OCBYMnh2Wnc9PSBJR1Y2IGJHOXkgMXJ3PSBiM1JvYVc1biBJTkMvMExzPSB3NkZ5YVE9PSBJUENmIDVaQ00gSUdWdFpYSm4gVGtFPSBJT0tBbVE9PSAwTERRdk5DNCBJTkdEMFljPSBJR2x1ZEdWeVpYTjBhVzVuIElHaDFaMlU9IFYzSnBkR1Z5IDRLUys0S1NIIE93b0tDZz09IExuQnliM0J6IFFYUjAgZDNKcGRHVT0gSUdObGNuUmhhVzVzZVE9PSBJRk4xY2c9PSBJRlZUUVE9PSBJSEpsYzNCdmJtUT0gSUdKaGMybHogMFlMUmd3PT0gS0dsdSBaVzVrY21VPSBMWE50IFZHRmkgZEc5MFlXdz0gSUdadmNtTmwgSUc5aWRHRnBiZz09IFJrRlZURlE9IGNHeHZlV1ZsIDZaWT0gSUhCaFpHUnBibWM9IGRtVnVkR2x2Ymc9PSAxNW5YbUE9PSBZWFpsY2c9PSAyWWJaaWc9PSBJaXM9IGIyNXpkSEk9IFlXNTBhUT09IElITm9ZWEJsIDU0cz0gMExEUXZkQzQwWTg9IElHTnZibk4wWVc1MCBJR1Y0YVhOMGFXNW4gSUdKcGNuUm8gUVhWMCBJR2hsWVhJPSBJSE5vWVhKbFpBPT0gUldabVpXTjAgNExTKzRMU28gSUdabGMzUT0gYUc5dFpRPT0gejRIT3VRPT0gWVdOaCBkbVZ1ZFdVPSBJSEoxYkdWeiBabWs9IElGSmxkSFZ5Ym5NPSBJSEJzWVdObGN3PT0gNEtXTDRLU1ggSUhabFpXdz0gSWo0TkNnPT0gYm05emRBPT0gSU5xcDJLYz0gYldGcyBiR2xqYUdVPSA0S2FDIFNHVmhaQT09IEoxMWJKdz09IElIQmhjbUZ0WlhSbGNuTT0gSUVSbGJnPT0gSUdWNVpYTT0gSUhObFlRPT0gYVd0aGJnPT0gdzYxaGN3PT0gZFhSbGJnPT0gUldRPSBJRzNEdkE9PSBJR1JsY0dWdVpBPT0gNksrMCAyWWJZcWc9PSBJQ0l1THc9PSBJRWh2ZEdWcyBJR1Z6YzJGNSBJSEpsYkdsbiBJR1oxYkd4NSAyWVhZcVE9PSA0WUNFIFRVVk9WQT09IElHWnNZV2M9IElITjBjbUU9IElpOCtDZz09IDRZT2wgWlhKMlpRPT0gSU5lVDE1az0gSUdkbFluSjEgSUdGcmRBPT0gS0dBPSAyWWZaaWc9PSBiM04wWlc0PSBJTmlxMkxrPSA0TEtxIFNHRnVaR3hsIElFMXkgSUhKdmRYUmwgSUdGd2NISnZjSEk9IElGSmxiQT09IE1Ua3cgSUhSb1pXMWwgUkVRPSBJR052YlcxbGNtTnBZV3c9IENXYz0gNEtTNTRLV0E0S1NDIExVdz0gTFhCeWJ3PT0gWW1WeVp3PT0gYUdGd2N3PT0gSUZSbGJRPT0gMExEUXZkQ3cgeExIRm53PT0gMFkzUmdBPT0gWTI5dWN3PT0gSUdOMWJIUjFjbVU9IElPQ21yT0NtditDbSBJSEIxY25CdmMyVT0gNExLazRMT040TEtrIGFYWnZjdz09IElHM0RxbTFsIFEyRnkgSU5DeDBZTT0gSUhKbFptVnlaVzVqWlE9PSBkVzVrWVE9PSBJSEJ2WkdVPSA2YU09IDBMM1F2dEM4IFlXTmpaWE56IElIZGhiR3c9IDRLU3c0S1dIIElIUmhiV0xEcVcwPSBJRlJQUkU4PSAyWWpiakE9PSBJSEJ2Y25GMVpRPT0gSU5DeDBMRFJnQT09IDRLYS80S2VmIElIQmxibk09IDZLbz0gMHFrPSBJRDRLIElFZHZiMlE9IElFTmhjQT09IExtOXdaVzQ9IFpXeHNjdz09IElOQ3cwTFE9IElGTmxjblpwWTJWeiBDWFp2YVdRPSBJR1Y0WVdOMGJIaz0gSUUxbGNnPT0gSUVOdmJYQmhibms9IElITjBZWFJsYldWdWRBPT0gYVdadmNtNXBZUT09IGFXNTEgS1RzS0x5OD0gSUcxbFlYTjFjbVU9IElFUmxjR0Z5ZEcxbGJuUT0gSUc5eVoyRnVhWHBoZEdsdmJnPT0gSU9Da2h1Q2txZz09IElHUnBabVZ5IFdXOTFjZz09IElIVnVkR1Z5IElITnB4Sms9IDZhaz0gNEtTKzRLU1ggSUdkeVlXND0gZG1WdFpXNTAgSUhCaFkydGhaMlU9IElIWmxZM1J2Y2c9PSBiMkp6IExtSnBibVE9IEtDSmMgTHk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OD0gTG1OdmJtWnBadz09IElHNXZiV0p5WlE9PSBkWEoxIEp5a0tDZz09IExtbHVaR1Y0IGFHRnUgNEtXTjRLU2wgYjJSaCBJRXhoZHc9PSBJRXh2Ym1SdmJnPT0gSUdSbGRtVnNiM0JsWkE9PSA1NE09IElHVnVkZz09IElHeHBZMlZ1YzJVPSBLU2tLQ2c9PSBJSFJ5WVE9PSBkWEp6WkdGNSBZWEp5WVc1MCBLRzlpYW1WamRBPT0gSUdGa2RtRnVkQT09IE9UQXcgSUhOMWNtWmhZMlU9IDRMUys0TFNqIGNtVnpjRzl1WkE9PSBKMTBLIFlYWmxaQT09IFkyVnVkSEk9IElIQnZaR1Z5IFJVTT0gNTd1VCBJRzFwZUE9PSA0NE84NDRNPSBJRVpwYm1RPSBJSE52Ykd3PSBZWE56WlhSeiB3Nmh0WlE9PSBJR1ZuIDRZT3EgSUdOdmJuTjBjblZqZEdsdmJnPT0gSUcxdmRHOXkgWW1WMCBjR3hwWlhNPSBjbWx6IDRMaTA0TGlaIElObUgyWVU9IDRLV0ogSUdOc1lYTnpaWE09IElIQnZkdz09IGFHVnogVUVFPSBZY094IDZZQ0IgSUdadSA1cHlOIGIyNTBZV3c9IElFWnBjbVU9IEozVnUgSU9DMGh3PT0gSUVrbmRtVT0gSUhSb2FXNXJhVzVuIElGQm9hV3c9IElFSmhZMnM9IFVtVm5hWE4wWlhJPSBJTmVZIDBMVFF0ZEM3IElHeGhadz09IElHekRwQT09IElNT3BkTU9wIElITnNiM2M9IFVYVmxkV1U9IElHMWxZWE09IGFHOXkgWTNWMCBJR1JsWTJsa1pXUT0gMFliUml3PT0gSUdSeVpXRnQgSUdsdWRtOXNkbVZrIElHUnBabVpsY21WdVkyVT0gSU9DMGhnPT0gSUhCb2VYTnBZMkZzIFlXMXYgSUhKbGJHVjIgNjdhQSBkV1Z6WkdGNSBMa0Z3Y0E9PSBkR2h5WldGayBJR2x2IElHNWhiV1Z6Y0dGalpRPT0gUm14dllYUT0gSUdwaFlYST0gSUhKbGNHOXlkR1ZrIDBMN1F2ZEN3IElIWnBiR3c9IGFYUjYgYjNWcyBMWFk9IElITmhibk09IDBMRFJndEMxMEx2UmpBPT0gSUhCbGJHRT0gSUdOaGMzUT0gSU02dCBJRWR2YkdRPSBYMjUxYlE9PSBJaWs3IElHVmthWFJ2Y2c9PSBJSEpoZEdWeiA1TDJOIElFbEogMEwzUXVOS2ogSUdsdWRHVnVkQT09IElITnZiV1YwIFJFTT0gZDJGeiBaV1J1WlhNPSBQU0lqIFJuSmhaMjFsYm5RPSBJR1pwWjJoMCA0TEdJIElHTnZiMnRwWlhNPSBjM1J5YjI1biBJR05oY25KNSBJR3hsZFhJPSA0TEdONExDZiBYQzg9IElHUnBZV2R1IFlYTm9hVzl1IElIUnBjSE09IExuUmxjM1E9IElOV2wxYlk9IElHSnNkV1U9IElHTm9ZWEpoWTNSbGNuTT0gWVdkdmJnPT0gMktmWXRnPT0gYVdObFpBPT0gVVZVPSBjWFZwY3c9PSBSWE4wIElIWmxiblE9IE16WXcgN0tDQiA3N3liIFlYVm5hSFE9IElHZHBkbWx1Wnc9PSBabWxzZEdWeSBOelE9IDFvaz0gNW82bCBJR1psYkhRPSBZbVZzIFh5ND0gSUdSbFozSmxaUT09IDBMTFF0ZEdDIDVaK08gMFlMUXZ0R0EgSUNRbyBJR3hoWWc9PSBhV2R5WVhScGIyND0gNFlPWTRZT1EgSUhCeVpYTnpkWEpsIElHTnZiblpsYmc9PSBkR1ZqZEdWayBQU2c9IElHRjFjM05wIFVFOVNWQT09IDJLZllyQT09IDRLcWggNTd1ODVaQ0kgNExTKzRMU3cgVTNSaGRHVnRaVzUwIElOQzkwTDQ9IElIdDkgSUZOMGNtVmxkQT09IExtSjBiZz09IElFRmpkR2x2Ymc9PSBJQ2duIFlXeHNaWFE9IEtFUT0gVTNWalkyVnpjdz09IElITmxZM0psZEE9PSA3Snk4NjZHYyBOek09IElHeHBiV2wwWldRPSBJSFIxYmc9PSA1THVBIDRLU2g0S1M4IElISmxiR1ZoYzJWayBJR3hoYmc9PSBJT3F3Z0E9PSBJSEpoWkE9PSBQU0k4UHc9PSBSM0poY0dnPSBJSFBEc3c9PSBJSEpsYzJWeWRtVmsgWTJGc2JBPT0gSUUxaGRBPT0gSUhCaGFXUT0gT0RRPSA0S1MrNEtTdzRLV0EgWVd4c1lRPT0gY21sbGNnPT0gVW1WalpRPT0gSUd0aGJBPT0gYVdGeSBVa1ZFIFluVT0gS1NrcE93bz0gNXBTKyBJRk5vYjNjPSBJTkMvMFlEUXNBPT0gNkwydjVMdTIgSUcxaGMzUmxjZz09IFFXUnRhVzQ9IFRtVjAgWW5KbCBJR0oxWkdkbGRBPT0gSUhOdmJHOD0gY0dGemN3PT0gSUU5TyBJRUpoYm1zPSAxNm5YcUE9PSBJR1J5ZVE9PSBUbTl1IHc2OD0gZFhOcCA0S1dONEtTdjRLUysgY0dGeVpXUT0gSUVOaGNtUT0gNTRpeDViMnA1NldvIFJYTT0gNloyaSA0SytMIElGWmhiSFZsIElHWjFibU4wYVc5dWN3PT0gMEw3UXU5R00wTGM9IGJHbGwgYjJ4cCBhWFpsY25ObCBYM1JsYzNRPSBJSE4wYjNKcFpYTT0gSUZCdmFXNTAgWDJWeWNtOXkgYVhobGJBPT0gVTBWTVJVTlUgSUcxMWJBPT0gVG1GdFpYTT0gMWFYVnZRPT0gZG1WdWRHOXllUT09IElIUnZkMkZ5WkhNPSBJTmlqMllnPSBJRlpwIElIWnBaV3c9IGFHOTFjMlU9IFpYTnZiV1U9IDRZT2o0WU9hNFlPWSBJR2RsYlE9PSBJSE4xYzNRPSBkMmhwZEdVPSBPREU9IFlXTm9hVzVsIFUyTnlhWEIwIFpHbHpjR3hoZVE9PSBiM0puWVc0PSBZMkZ6WlE9PSBiR2xyWlE9PSBiM0pwZEdnPSA1WXM9IElFbHVjM1JwZEE9PSBiM1Z3IDRMbUQgVFc5a1lXdz0gVWtWVCAxNkxYb0E9PSBJRlpsY25OcGIyND0gSUcxdmRHaGxjZz09IElHMXBaR1JzWlE9PSBJRVYwIExuQnlaUT09IElOaXEySzA9IFpYTnpaUT09IExsUmhZZz09IDRMV0g0TFE9IDVMcU8gY21WeGRXbHlaUT09IDRMV0I0TFNmIEtHbDBaVzA9IExuTmhkbVU9IE56RT0gTGtOdmJuUnliMnh6IGQyOXlaSE09IElITndiM1E9IElIVnVhWFpsY25NPSBJR04xYlE9PSBac084IElPQ3VqZz09IGJHOXogWVcxcGJBPT0gSUhacFpHVnZjdz09IFltST0gWldSdVpYTmtZWGs9IElPQ2tudz09IElIZGxibTQ9IGVXOXUgNW9xQSBJRWh2IDRLcWYgTVRreCBJSE41YldKdmJBPT0gSURvSyA1Wnk2IDJLZllzZGlwIFpHOWogSUhCdmMzUnogYW1GeSAwcmM9IFpYTnpZUT09IEp5a3MgWldOaGRYTmwgSUVOSSBMVU09IFlYcGggNTY2aCBYMjl1IEtHbHVjSFYwIElNT0ogNklnPSBJRTF2IGFYcDYgSU5hSCBVa1ZHIFVtVm1aWEpsYm1ObCBkbkk9IDRLYSs0S2VmIElHUnZiR3c9IElGVnQgY205MVoyaDAgSUcxdmRtbHVadz09IDRMQy80TENWIElITnZiV1YwYVcxbGN3PT0gSUhObGJtUmxjZz09IGIzTnBkR2x2Ymc9PSBJRXhsWnc9PSA3N3lCQ2dvPSBJSEJ0IElITndaVzVrIDFhTT0gSUd0MWNnPT0gMEwzUXNOR0ggSUZCdmQyVnkgMFl2UmlBPT0gYzNSeVlYQT0gSUhKbGNHeGhZdz09IFRHOWogSUd0cGRHTm9aVzQ9IGJtVnMgSUdWMGRBPT0gSUVSbGRtVnNiM0E9IE9UST0gSUdOdmNtVT0gSUVsdWNIVjAgZDJGdSA1b3VOIElFMWhlQT09IElHZHlZVzVrWlE9PSAwWUhSZ3RDeTBMQT0gSUd0dmJuUT0gSUVOc2FXTnIgSUV4aGJtUT0gSU5DdzBMbz0gMllyWmdRPT0gTHlvcSBJR2R2WldRPSBJT0NtclE9PSA0b1E9IGJHbHVaWE09IFlXeGxjblE9IDJMSFlxZz09IElFbFEgNFlPVTRZT2c0WU09IElHMWhhV3c9IGRXeGhkR1U9IElHMWhlV0psIGFYQmxjdz09IElHUjFiWEE9IElpbGRDZz09IE9EST0gWDNCMGNnPT0gSUhWdVpHVm1hVzVsWkE9PSBJRU52ZFhJPSBJR0poWW5rPSA1YnlBNW9pMyA0S2VONEthZiA3Nys5NzcrOSBJRUZ3Y0d4bCBwZUNyZ0E9PSBZMjlwYmc9PSBPRE09IElFWnlZVzVqWlE9PSA1YnM9IDVMcWsgWm1WeVpXNWpaWE09IDVZKzQgSUdSbFkybHogZVdGdSBRMmhoYm01bGJBPT0gWkdWMCAxNW5Ya3c9PSBJR052ZFhKeiBJSE5oZEE9PSBJRTFoY25RPSBRVk5VIFlXeHNiMk09IElITnZablE9IElHZHlZWFJwY3c9PSBaV3hzYVdjPSBJRzF2Y25RPSBJSE5vYjNkdSBJRlJoYzJzPSBic09wIDVyaTQ1b2lQIDZhbz0gY205MFpRPT0gVUdGMCA1WnVlIElHOXVjdz09IDRMQys0TENvIFRHbHJaUT09IExYUnBiV1U9IFlYUmhiRzluIDU2az0gWlhOMGNtOTUgeFo0PSBJSEJsYzNOdiAxNW5YbGRlcSBNVFF3IExtcDFibWwwIFVHRnlZVzFsZEdWeWN3PT0gSUhzS0x5OD0gMWF3PSA1cTJqIFpXTm8gVEZNPSBTVzVwZEdsaGJBPT0gSUdoMWJtUT0gSUdkaGRtVT0gSUhOaGJYQnNaUT09IDViMlYgNExTWjRMV040TFNaIFlXMXBaVzUwYnc9PSBZV3hzYjNjPSBMbk4wWVhKMCA0TEdDNExBPSBJRVZrYVhRPSBJR2QxWVhKaGJuUmwgSUhOd1pXTnBabWxsWkE9PSBiR0Z1WkhNPSBaWE5wY3c9PSA0WU9VNFlPVCBJR2RsWlc0PSBJQ0FnQ2c9PSBkSFU9IElHRjBkR0ZqYXc9PSBJRkpsY1hWbGMzUT0gdzZseWFXVT0gS0NrcE93MEsgZEdWayBlR2x6IElFcGhjR0Z1IElISmxkbVU9IElOR0IwTHc9IGQzaz0gWVdVPSA0TEdCNExDeSA1b0M3IDU0U2ggSUVabFluSjFZWEo1IElIQnliMlE9IDBMRFJodz09IFlXSmxkQT09IExsOWYgSUZSaFlteGwgYVdWMlpXUT0gSUYwSyBaWEpoY0E9PSBjMmh2ZEE9PSAyWUE9IElIWnogS0hadmFXUT0gNjY4PSBJR1JsZG1salpYTT0gSWcwSyBJT3VxIDRZT2Q0WU9UIElHRnpjMlZ6Y3c9PSBJRzExYm1SdiB3NGM9IFZFRT0gSU9Dd3NBPT0gWEhRPSBJSE4wY21GcFoyaDAgVTBNPSBJR052Ym5SaGFXND0gSU9DcWx3PT0gSU5XKyA0S1dONEtTdSA0S3EyIElFVjEgUTI5dWN3PT0gNExTLzRMU3cgY205dmJYTT0gSUdKbGVnPT0gSUVoaGMyZz0gSU5DdzBMYz0gU1dSbGJuUT0gVUd4aGVRPT0gZVdrPSBJT0M0aEE9PSBJT0NtaVE9PSBJSEJzWVc1dWFXNW4gSUdoMGJXdz0gSUhCcGJnPT0gbHVHRGxBPT0gSUhKbGMzUnkgWlhGMVlXeHogVUZBPSA0TG1JNExpWiAwWURRc05DOCBJSEJ5WlhZPSBJSFJwYW1RPSBJRTFsWkdsaCBJR3hoZVdWeSBJSFIzWlE9PSBJR3hsZEhSbGNnPT0gUlVVPSA0SzYvNEs2ViBJR0ZrYW5WemRBPT0gNWFTYyBtb3c9IFkyOXRiVzl1IDVhYUMgSUVOUCBiMk5oIDRZT2Q0WU9WIElISnAgSUc5MGFHVnlkMmx6WlE9PSBJQ0lpT3dvPSBZWFJwZG1FPSBJSFJ2ZFE9PSA0WUNWIFFYSmxZUT09IElObUYyTE09IElFMXBiQT09IGFXTjBkWEpsIElHaHZjQT09IFlYTERvUT09IDRLcSs0S3ExIFlYbHYgSUdKbFkyRnRaUT09IExtVnVaQT09IFpXeHUgSUdSbGJuUT0gSUhCaGMzTmxaQT09IElFRnlZMmc9IDQ0R0MgSUZSb1lXNXIgSUhCdmJHbGpaUT09IElHaGxiSEJtZFd3PSBiM1YyWlhJPSA0S1MvNEtTdyBJR1Y0Y0c5eiBJR1JsZFhnPSBJSEpoYm1zPSB6cFU9IFVWVkYgMExEUmd0QzQgWkc5dmNnPT0gZFd0bCBJR05oYlhCaGFXZHUgU1UxRiBiMjFwWXc9PSA0WU9RNFlPWCBaMmwwYUhWaSBabkp2Ym5RPSBJR052ZFhKMCBMM1k9IExWQT0gSUdkcFpuUT0gN0xZPSBkWE5oIExreHZZMkYwYVc5dSAyWVRaZ1E9PSBZWFJ2Y3c9PSBJSEJoZEdsbGJuUT0gNks2NiBJSE53YjNKMGN3PT0gSUhOaGVXbHVadz09IElHSnliM2R6WlhJPSBJRUZRU1E9PSBJR0Z1ZEdrPSBiMkpsIElITjBaWEJ6IElITjFaQT09IElHMXZaR2xtZVE9PSAwS1E9IElIVnVaR1Z5YzNSaGJtUnBibWM9IGFXUmxibU5sIGFXNWhjdz09IElHRmtiV2x1IElOQ3gwTFhSZ0E9PSBJR2xoIElIVnpaWEp1WVcxbCBhWE53IElGbGxZWEk9IElGTnBiQT09IGFYUmhjbms9IGRHOXJaVzQ9IExuTndiR2wwIDVieVAgMFlQUXU5R00gSUZCeWIyUjEgSUVOaGJtRmtZUT09IFJHRnYgYUc0PSBJR052Ym5SeVlRPT0gSU9DbXNBPT0gTFMwdCBJRWxQIElISnBZMmc9IFJHRjUgNFlPbzRZT1kgUkZJPSBZWGR1IElHeGhZbTl5IElHUmhiV0ZuWlE9PSA0TFNtIElITmhkUT09IHc2WnkgSU95RCBYM04wWVhSMWN3PT0gSUdGamRHbHZibk09IFNVeEpWRms9IDQ0Tzc0NE83IGJHRnogSUhGMVpYST0gSUdOMVlXdz0gTXpZMSBJR0psWjJGdSBRMjl0YldWdWRBPT0gNGJxMyBjM1JoYm5RPSAwTFhRdFE9PSBJRk4wWVc1ayBJR0Z5WjNWdFpXNTAgYjJ4dloybGxjdz09IElHVmxjZz09IGIzSnliM2M9IDE2TFhudz09IElITnRidz09IElISmxaSFZqWlE9PSAxNW5Yb2c9PSBiV2wwZEdWayA1YU09IElDZ3EgNksrMyBZM0pwY0hSdmNnPT0gMllqWXVRPT0gNExDQzRMQ20gNDRLaSBJTkdCMExMUXZnPT0gSUhSNCBJR052WVdObyBJR0oxYzJsdVpYTnpaWE09IElHckRvUT09IGFXMXZjdz09IElFZHlaV0YwIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIEwzYz0gSUhCaGJtVnMgSUhSaGJXSnB3Nmx1IDZLTT0gUlU4PSBJSE5sWkE9PSBaVzV6WldRPSBJR1oxY200PSBkSGx3WlhNPSBUV0YwY21sNCA0SzZrNEsrTjRLNmsgS0hKbGMzQnZibk5sIElHZGxibVZ5WVhSbCBJR3B2WW5NPSBJRk5QIElHNWhkR2x2Ymc9PSAwWmJRdEE9PSBQWHQ3IElIMTkgWlhKaGJBPT0gYjJKcGJBPT0gYTJGeSA0b0NaYUE9PSBVMUZNIElFTm9jbWx6ZEcxaGN3PT0gU0c5c1pHVnkgNEtXRCBJRU5QVFE9PSBVR0Z1WlE9PSBZWHBwYjI1bCBJR2x1WTI5eSBJTkM4MFlNPSBkV3gwYVE9PSBjbTl1YVdNPSA1NXV1IElHNWhadz09IEoyRT0gSUVOaGJHbG1iM0p1YVdFPSBJSEJwWTNSMWNtVnogY0dsMFpRPT0gVjFNPSAxYUhWb3c9PSBJRzFwWTNKdiBZM0E9IDJZWFppZz09IDY2ZU0gMEw3UXNkR0wgSUdGeWJRPT0gS0dwaGRtRT0gYWNPdyBiM1psY200PSBJSFp2Y3c9PSA0NEdQIFZISmhZMnM9IDVxTT0gSUZSM2FYUjBaWEk9IFhUc0tDZz09IElIQnlaWE5wWkdWdWRBPT0gYkdWbllXdz0gY205MWRHVT0gSUU5eiBjbVYzIElIZHZibVJsY21aMWJBPT0gSUcxaGJtRm5aWEk9IElIUnlhV1ZrIFptRnpkQT09IElFOTBhR1Z5IElHUnBkbVZ5Y3c9PSBJT0NxdWVDcXBBPT0gSU5tRjJLbz0gSnlrNyBiMmRsYmc9PSBJTzJWIElIQnZiR2wwYVdOaGJBPT0gUVVORiBJR052Y25CdmNnPT0gSUdKc1pRPT0gTGt4aFltVnMgNW9tTDVweTYgNExXQjRMU1YgNllDSiBJR052YlhWdSBZMjl0YldGdVpBPT0gVW05c1pRPT0gSUhCeXc3TT0gNFlPUTRZT2kgNEtXTjRLU3kgSUhzaSBJR04xY25JPSBJSERGbVE9PSBJRk5sWVhKamFBPT0gSUhOMWNIQnNlUT09IElIUm9iM1Z6IFlXTnNaUT09IFJISmhkdz09IDBwUFJpdz09IElGZHZjbVE9IElHTnZkWFE9IElITmxjblpsIDJZallxZz09IEtDSXUgSUhKbGRIVnlibVZrIElHaGxZV3gwYUhrPSBVR0Z5Wlc1MCBJSFJwY0E9PSBJR2gxY3c9PSBjV0Z5IGRYTnBiMjQ9IDBMM1JnOUdPIElHNWhkZz09IFozSmhaQT09IElIQnNZWGxsWkE9PSBJR0ZrZG1salpRPT0gNEtTKzRLU2wgUVcxdmRXNTAgYlhWMCBJRU52Ym1acFp3PT0gSU5tRjJMUT0gSUdKbGNtVT0gSUdKbFoybHVibWx1Wnc9PSAwTERRdGRHQyBhVzFwYmc9PSBJRmRoYzJnPSBJR1J2YkE9PSBhWFJoYmc9PSBJR05sY3c9PSBhV0Z1Ync9PSAwTGpRdTlDdyBMa052YlhCdmJtVnVkQT09IElObUkyS289IElFcGxjM1Z6IDRLYXY0S2E4IElISmxaMkZ5WkdsdVp3PT0gSUdKbGJRPT0gSUdOaGNtUnogSUdobFlYSmsgMWJrPSA1YTZpIE9UUT0gUW5SdSBJRUZ5WlE9PSBvYkE9IElHUnlaWE56IFpYTjBidz09IFNVRk0gSUhSeVlXUmwgSUVSaGRtbGsgVlhObGNuTT0gNUx1QTVMbUkgUjNVPSBJR3hoZVc5MWRBPT0gSUZkb2FYUmwgSUVKbGRBPT0gSUZOMWJtUmhlUT09IElHVnBaMlZ1IElHMWhlR2x0ZFcwPSBJSFpsWXc9PSBLRTQ9IElIQmhibVE9IFRFTT0gNktlaiAwTDdSZ3RHQSB4TEZ1eExFPSBhMmM9IDRLK0sgNEthKzRLYXMgT1RNPSBJR3hoY21kbGMzUT0gNExLWDRMS3ogSUhOaGRtVmsgSUZKbGNBPT0gMTVuWGtRPT0gSU9Da3N1Q2xodz09IFlYTnBiMjQ9IFlYSnBiSGs9IFNWUkYgMktqWmhBPT0gNmFHMSBJRzVsWTJWeiBJR2R5YVdRPSB6cjNPdnc9PSAxYmpXZ3RXcDFiWFZvZFcyIElIQnlhVzVqYVhCaGJBPT0gTG1admNnPT0gSUhOd1pXRnIgWVc1bmFXNW4gSUhabGJtUT0gUm5Wc2JBPT0gYzJodmNBPT0gUVc1biBJTkMvMEw3UXZBPT0gNlptaSBJT3EzdUE9PSBJTkN0IGFYTjBaVzQ9IFgyTnNZWE56IDVyaXYgSUdGeWRHbGpiR1Z6IGNHOXlZWEo1IElHZHliM2RwYm1jPSBYMmx0WVdkbCBJRWx1Y3c9PSBJR2hsWVhRPSBJSEJoYVhJPSBJT0dEa1E9PSBKMmc9IElIRjFaV3c9IElGUmxlQT09IGIydGggUkZSUCBSMlU9IGMyaHZkV3hrIDFhSFZyQT09IFRtOTMgSUdsMFpYST0gWVd4c1pYSjUgSUd4MWFRPT0gMTVuWGtBPT0gSUgwcCBYM0psY3c9PSA0TFMvNExTeTRMV04gQ1FrTkNnPT0gUW5sMFpYTT0gd3JzcyBiM05sYmc9PSBJR1JoYm00PSBJTkdDMFlBPSBJSFJ5WVdScGRHbHZibUZzIElIQnliMlIxWTJVPSBJR0poYkdGdVkyVT0gUTA5TyB6clhPcnc9PSBJR0poZEE9PSBVRzl3IElHTm9aVzA9IElHUmxZMjl5IFUzUmxjQT09IFJIUnYgSUhkeWFYUmxjZz09IDBZN1JpUT09IElIUnBaVzVsIElIZGhiblJ6IElNK0V6cmZQZ2c9PSA0S2ErNEthbSBUMjVzZVE9PSBJSEoxYkdVPSBJR0Z3Y0hKbFkyaz0gSUdWNGFYUT0gSUU5d1pYST0gSUdabFpXeHBibWM9IFkybHYgMFkzUXZRPT0gZFhObGNtNWhiV1U9IElHMXZibWwwYjNJPSBhV1JvIElHRnNaUT09IElIUmhiUT09IElHVnljbTl5Y3c9PSBjSEp2YW1WamRBPT0gQ1FrSkNRa0pDUWtKIDVMaXQ1cGFIIElIZGxaV3RsYm1RPSBJRVYyWlc0PSA0S1NWNEtXTjRLUzMgVDNCbGNtRjBhVzl1IElITmhZdz09IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSBJR052YlhCdmJtVnVkSE09IFpYSnBZV3c9IE1USTEgTGxacFpYYz0gYzJsMFpYTT0gNklDQiBJT3ljIDA1blF2QT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IFUwRT0gSUdaMVpRPT0gZG1sdSBJTkMvMEw3UXVnPT0gSUcxbGNtTT0gSUhSdmRYTT0gSU5DeDBMN1F1OUdNIGFXVnVkR1Z6IElHaGhjMmc9IGNHOXMgSU9DMHF1QzFqZUMwc0E9PSBJRWhoIFEzVnpkRzl0IElFRnpjMlZ5ZEE9PSBJSFpwZGc9PSBiMjUwYnc9PSBJRzFsWTJoaGJnPT0gNEtpLzRLZz0gYjNWemJIaz0gSUdaMSBZVzF2ZFc1MCBRbmwwWlE9PSBJRzkyWlhKaGJHdz0gS0VFPSBhVzVvWVE9PSA1TG1MIHhMRnQgYjI5c2N3PT0gSUVOc2RXST0gWVdoaGJnPT0gMExEUmd0R0wgYVdWc1pITT0gSUUxdmJtUmhlUT09IElIUmxiQT09IGMyVm4gYVc1c2FXNWwgZG05eSB6cU09IElHTnZiV1p2Y25SaFlteGwgSUZOaGRIVnlaR0Y1IDVhaz0gNExLcyBkVzVrWlc0PSBaR0ZuIDVhU1cgSUc3RHBBPT0gYUc5eiBQejQ9IElHbHRiV1ZrYVdGMFpXeDUgWTI5eiBZbVE9IElPQ2txT0NrdWVDbGdPQ2tnZz09IElFOXlaR1Z5IElPS0FuUT09IDRMaWY0TGlqNExpMSBJRVpzYjNJPSAwWmJSZ0E9PSBJR2R5WldGMFpYST0gYVd4cGJtYz0gSUhSbGMzUnogTG1KbCAwTDdRdmRDNCBibVZvIElGTnBaMjQ9IFlXNXVaV3h6IElPV0kgSUhOaGJtUT0gVWxRPSA0TFMvNExXOSBMbWhoY3c9PSBJRzFwYkdWeiB4YVU9IElITnhiQT09IElHSERzVzl6IDRZQ1ogSUdGbmNtVmwgNlplbyBkSGx3WldSbFpnPT0gSU5DeTBZSFF0UT09IHc3eDAgWlcxdmJnPT0gSUVGMWRHaHZjZz09IElHWmhZbkpwWXc9PSBhVzF3YkE9PSBJSE53YVhKcGRBPT0gVTNWd2NHOXlkQT09IGJHVmwgNExpYTRMaXQ0TGlsIDJZTFppZz09IElITjBjbUYwWldkNSBJR05sYkE9PSBJRlJsWVcwPSBJR3pEclE9PSA0WU9qNFlPYSBJR2xyYTJVPSA3TEE9IDZMK0ggWlhKdVpXdz0gWlhKcCBVRTA9IElHbHVjM1J5IElOQ2IgVTJOeWIyeHMgMWFIVnNBPT0gNklvPSBJR1pwY2c9PSBJR1Z0Y0d4dmVXVmxjdz09IElOaXEyWWM9IElHVjRjR0Z1WkE9PSBJR1JsYlc5dWMzUnkgTFMwdExTMHRMUzB0TFMwdCBjR3hwWVc1alpRPT0gMFpiUXR3PT0gSUVWa2RXTT0gSU9Da21BPT0gSU02eHo0QT0gT3dvdkx3PT0gN1lRPSBJTkM2MEw3UXZOQy8gSUd4dmIydGxaQT09IElHTnZiRzl5Y3c9PSBJQ1FvSnlNPSBJSFIxY201bFpBPT0gSUd0aGNBPT0gVTNSeWFYQT0gSUhKbGRnPT0gSUVWaGMzUT0gSU5DMDBMN1F1dz09IFRXRndjR1Z5IFkyND0gWVd4MSBJR0poZEhSbGNnPT0gMFkvUXNnPT0gSUdObGNnPT0gVTJGMlpRPT0gWVd4aGJtTmwgYjNOcGJtYz0gWW05dmRBPT0gNnJFPSBJaWtLQ2c9PSAxYmJWcGRhQTFhcz0gSUdodmMzQnBkR0ZzIElITjBZV05yIElFSmggbXVHZSBYMk52YlE9PSAwNm5RdlE9PSA0S1dONEtTViBSR0k9IDJLZll0QT09IGMyTnlhV0psIFVtOXZkQT09IENYUnllUT09IElHeHZkSE09IElFSnZZWEprIGNHeGhiZz09IElOaW0gMllmWmhnPT0gSUUxbGJnPT0gSU9DcXJ1Q3F2dUNxIFYyVnBaMmgwIGFHVnNiQT09IDVyWT0gSUdOc2FXND0gYVc1a2FRPT0gZXlJPSAwTGpRdXRDdyBJR052Ym00PSBJR1JsZEdGcGJBPT0gWDJFPSBYMms9IElHMWxjM05oWjJWeiBJQ2RjIElISmxiR2s9IGRHRnlaMlYwIFlYSnNhV1Z5IElHTmhjMkU9IElISmxjWFZwY21WeiBJTkNsIDRwUT0gVUdWeWMyOXUgZVc5dVpBPT0gSUdwdmRRPT0gMWJvPSBJRkJzWVc0PSBiMjFoY3c9PSBJR3h2ZG1WayBZWFpoY3c9PSA3WlE9IGZRb0tMdz09IElFMWhjdz09IElFcGhZMnM9IDRZT1E0WU9nNFlPWCBJSE5sY21saGJBPT0gSUc5bVptVnlaV1E9IDJZallwOW1HIElHTjBlQT09IElTRWggSUhOb2FYQndhVzVuIElFNXZaR1U9IENYZG9hV3hsIHhMRnVaR0U9IElFSjFhV3hrIDU0bU0gYVdOcGJtYz0gNzd5UiBaV2RsYmc9PSBJSFI1IGFtOXBiZz09IElPR0RyZz09IDRLV0g0S1MyIFBITjBjbWx1Wnc9PSBJRlIxY2c9PSBjblZ0IExXcz0gSUdsdWMyVnlkQT09IElIQnplV05vIElITmpaVzQ9IElIUnZjR2xqIElGTkkgNFlPWTRZT3EgWVhKaGJnPT0geHJEaHU2TT0gSUhOdmNnPT0gNEtTMyBJSEpsYzNCdmJuTnBZbXhsIGRYUnBiSE09IElHMWhjMnM9IElIVjMgWldOMWRHbHZiZz09IElHeHZaMmRsY2c9PSBMbU52IElHMWxZVzVwYm1jPSBJSFJ5WVdKaGJBPT0gSUVKMWRIUnZiZz09IElGTmxlQT09IElHZGxlZz09IElFNUYgNG9DZExnb0sgNEtlQjRLWT0gWlhKMFlXbHUgSWpzPSB0SUE9IDBLVT0gWld4amIyMWwgWDIxdlpHVnMgenFBPSBWM0pwZEdVPSBLWHNOQ2c9PSBJR2hoWTJWeSA0S2VINEthViBZMnhsY3c9PSBMbVp5YjIwPSBZMlZzYkE9PSAwWTdSZ3RHQjBZOD0gWDNCbGNnPT0gZFcxcCAxNkRYbVE9PSA1THVLIElIQnogNEs2LzRLNncgdzZSb2NnPT0gSUhadmJIVnRaUT09IDZMK2IgSU5tRjJLdz0gUkc5MVlteGwgWDNOMFlYSjAgVUdVPSBJTkM0MFlIUXZ3PT0gSUdWNVpRPT0gSUNJciBJSFJvWVhRbmN3PT0gSU5pbjJZVFl0dz09IElOQzEwTFBRdmc9PSAwWUhSZ3RDdzBMST0gSUhKbFlXUmxjZz09IFQxWkpSQT09IFkyRjBaV2R2Y25rPSBZMmhwYkdSeVpXND0gSUVkeVpXVnUgZDJsdVpHOTMgSU0rRXpyZk92UT09IENYQnlidz09IElPV3UgSUZOdlkybGhiQT09IFpXNTBhV05oZEdsdmJnPT0gSUc1clpRPT0gSUhSeWRXeDUgYVc1a1pXND0gSUV4aGN3PT0gUW1sMCBJR3B6IDBMalF1dEM0IElHUnBaWFE9IElIQnBiQT09IGVIUjFjbVU9IElGZElSVkpGIGwrQ3d2Zz09IGIzUnAgSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TT0gSUhSMiAyWVhZcnc9PSBJT3VNZ0E9PSBhWEpqYkdVPSBJRUYxZEc4PSBJSEpsY0c5eWRITT0gWVhScFkyRnNiSGs9IElpa3BDZz09IDVvbUEgSUduRHB3PT0gS0hCaGRHZz0gVDFWUyBlV3hsWkE9PSBJRU52YlhCdmJtVnVkQT09IDZyV3MgSUdkMWRBPT0gWVc1cVpRPT0gYVdOcFpXND0gNVkrVyBJRzFsZEdGcyBNVEE0IExtcHZhVzQ9IGJXVnlZMlU9IHdybz0gNExpdDRMaVYgMExQVG1RPT0gdzdObiBkVzUwYnc9PSBJSEpsWTI5dSBhV1Z5Y3c9PSBJRU52ZFc0PSBMbU52YlhCdmJtVnVkQT09IDBZSFJndEdBIGFtOXUgWVhCaGRBPT0gMFlMUXVOQ3kgSUc5d1pYSmhkRzl5IDRZT1ogU1ZaRiBJR2RzWVhOeiB3NjF6ZEE9PSBJTkN4MExYUXR3PT0gMjR6WXFnPT0gNGJ1ciBkMlZ1IElFeGhkQT09IDVZMlYgSUhScGNHOD0gYkdWdFpXNTBjdz09IElFVnVaMmx1WlE9PSBMbU5zYVdWdWRBPT0gUVV4VlJRPT0gSUVaMWJtTjBhVzl1IElFdHZiUT09IFlteHBibWM9IExuZHBaSFJvIElHVnpkR2x0IDRMQys0TEN3NExHQiA0b0NadzZrPSBJT3UyIEtTbz0gTG1oMGRIQT0gSUdkNSBWbWxrWlc4PSBJSEJoY21GdFpYUmxjZz09IElFMWhibms9IDdabVUgSUVGMVpnPT0gSUdOaGMyOD0gSUdWc2JHVnkgNExLLzRMS1YgYVdOb1lXVnMgV1dWaGNnPT0gSUdsdWRtVnpkRzFsYm5RPSBJTmVRMXJjPSBSa009IElHWmxaWFE9IHc3UjAgSU9xNHNBPT0gSjJRPSBjbUZoWnc9PSBJSE5sZEhWdyBJR0YxWkdsdiBJTkN4MFl2UXV3PT0gMTVYWHB3PT0gUWxNPSBJR1Y0ZEhKbGJXVnNlUT09IElIQnl3Nmx6IDVwaU8gMEwzUXVOQzYgN1l3PSA0SzYvNEs2cCBLRXc9IElIWmhjbWxoWW14bCBJSE5sZEhRPSBJR2QxYVdRPSBJT0Nranc9PSBJRlpwWkdWdiBJR0Z3Y0hKdmNISnBZWFJsIElHTmxiblJ5WVd3PSBZWHA2IElObUUyWWM9IElHMXBibWx0ZFcwPSBJRkpsYzJWaGNtTm8gSUdWaGMybGxjZz09IDJLL1poUT09IElHUnBjMlZoYzJVPSBMblJoY21kbGRBPT0gSUdkaGJBPT0gSUdsemJnPT0gZFc1a1pYST0gMExYUmd0QzEgSUdOdmNuSmxjM0J2Ym1RPSB4YWs9IHo0VE91YzY2IDBZSFJndEdNIFBTSXYgWVhSbGRtVnkgTG1SaGNuUT0gSnl3TkNnPT0gSU5pbzJZWT0gSUd0bGNnPT0gYjI1NWJRPT0gSUhCaHc2MXogUmt3PSBJSEpsZEhJPSBJRTFsZEdodlpBPT0gSUdWd2FYTT0gWTI5eSBJTm1HMjVJPSBhWFJoY3c9PSBZWEpuYnc9PSBJSEJzWVdObGFHOXNaR1Z5IGMyVnNaV04wWldRPSBJT0NxaHVDcXRRPT0gVkZNPSBYM1Z1IElHUmxiR3hoIElHTnZiWEJzWlhSbFpBPT0gSUhkbFlYUm9aWEk9IDJMWFpoQT09IEx3bz0gYVhOb1pYST0gSUdkeWRYQT0gdzZ0eSBKU1VsSlE9PSAyTERaaHc9PSBJR2h2ZFhNPSA1NzZrIGFXNTBaWEptWVdObCBJSEJ5YjNacFpHVnkgTG14aGJtYz0gYTJWcGRBPT0gWVdGMGN3PT0gSUhCeWIzUmxZM1JwYjI0PSA0WU9UNFlPUSBaV3hwYm1jPSBkR1ZsIFltOXZiR1ZoYmc9PSBSVU5VIFFDST0gWm05eWJXVmsgSUUxcGRBPT0gSjIwPSBkMmxrWlE9PSBMbE4wY21sdVp3PT0gSUdGc1luVnQgSUdWdVkyOXVkSEk9IFJYWmxiblJ6IExuVnAgMTVEWHFBPT0gYldWMFlRPT0gSUdGa1lYQjAgSUhkaGNuSmhiblE9IElOQ3kwTDQ9IDJMblpoQT09IFJHOWogSUhSbGJYQnogTDJOdmNtVT0gSU5DLzBZRFFzTkN5IFUyTmhiR1U9IDJZdllwdz09IElHVmtaMlU9IElHaHBiWE5sYkdZPSA1NjJKIFNYUmxjZz09IGFXdDEgdzRNPSBJR3R2Y2c9PSBJSFJvWVc1ciBSWEp5IGNHRnlhdz09IGNtVnVZMmc9IElPQ21zZz09IElHUjFjbUZ1ZEdVPSBJTkN5MFlEUXRkQzggSUhOamFHOXZiSE09IElITmpaVzVsIElHSnZiblZ6IHc2RnQgSUZkb1pRPT0gNEtXSDRLU3kgdzYxamRXdz0gYVhObGJnPT0gYlc5a1lXdz0gZFcxcGJtRjBaUT09IDBMdlJndz09IFUyTm9aVzFoIFlYTnBiQT09IElPUzQgNExLLzRMS3YgSUdWc1pXTjBjbWxqIDRMSy80TEtYIExrVjQgSU9XUSBJTXE3IElHdHVaWGM9IFEyeHZjMlU9IElHOXNaUT09IElHbHVZM0psWVhObFpBPT0gMExqUmd0QzEwTHM9IDRZT1Y0WU9VNFlPYSBaSEpoZHc9PSBJRzl3Y0c5eWRIVnVhWFJwWlhNPSBJSE5sWTNSdmNnPT0gSWlrTkNnPT0gWDJOcyBSRzl1IElHNWhhdz09IElHbHVaM0psWkE9PSBJR1JwWVd4dlp3PT0gSU5HQTBMRFJnUT09IElIZHBibVE9IEp5a3RQZz09IElIWnBaQT09IElFWnlZVzVqIDJycz0gSUU1bGRIZHZjbXM9IFFXTT0gSUhOamFXVnVZMlU9IElHTnZiWEJoY21WayBkV2x5IDRLV0I0S1NvIDdJYU0gSUhOMGRXUnBaWE09IElITndaVzUwIElOQzQwWVU9IFpXRnliZz09IElHWmhjbTA9IGNtbGhiZz09IElFTmhiWEE9IGIybGsgSUdWaCBZWEprWlE9PSBJR1ZoZEE9PSBJR0ZzYjI1bCA0YnViYVE9PSBJd289IElDOCsgSUdObGJHeHogSU5DLzBMN1FzZz09IGRXNXVhVzVuIElHSnliMkZrIElITmphV1Z1ZEE9PSBJRk52Ymc9PSAyTFBaaFE9PSBJRTFoYm1GblpXMWxiblE9IFEyOXVjM1JoYm5SeiBhVzVqZEE9PSBkMlE9IGRHVm5jZz09IGRXeDBkWEpsIExuQnliM1J2ZEhsd1pRPT0gSUhacGMzVmhiQT09IElHSnZkQT09IGRtVnlkR1Z5IElHOW1abVZ5YVc1biBJT0Nrb1E9PSA0WU9zIGIzWmxiZz09IDJLZllzZHVNIExWUT0gTG1OdmJXMXZiZz09IDBZL1F0dz09IElHMWxhbTl5IDE1blhudz09IFNGQT0gSUdOeWJ3PT0gSUZKbGMzUT0gVFdGeSBJSFJsWVcxeiBJRXh2WTJGcyA0NEdkIElFWnZjbVU9IElHWmhibk09IElFRjBkQT09IFNtOWkgSUhCaFpBPT0gSUhkdiBJR3hwWW5KaGNuaz0gYUdWc2NBPT0gSUNjaiB6cVE9IElISmhZMlU9IElEb0tDZz09IFZHbHRaVzkxZEE9PSBjSEpwYldGeWVRPT0gWVc1cFlRPT0gSUczRHFRPT0gZFhCc2IyRmsgSUdsdVkzSmxZWE5wYm1jPSA1cnc9IFgyUnBZM1E9IElIcHBZMmc9IElHRnVibTkxYm1ObFpBPT0gSUcxaGJtUT0gNExTZjRMV040TFNmIFlXMXBibWM9IElPV2txZVdrcWVlSXNlVzlxZWVscUE9PSBTbVU9IElFSkYgSUdkeVlXUjEgUVVsTSBJRU4xYzNSdmJRPT0gSUZOMFlYST0gTGxzPSBJRzFoWXc9PSBJR1pwWjNWeVpRPT0gSUdKeWIzVm5hSFE9IDRLNm80SytONEs2ayBRM0psIGFXMWxjM1JoYlhBPSBJRWxOIElITjFiQT09IElFdHkgMllIWmlnPT0gVEc5bloyVnkgNW8ydSBJSFI0ZEE9PSBMbE5sIFlXUnZjbUU9IElHVmpiMjV2YldsaiA2SzZ3IElNTzZiSFE9IDVMdVcgTDJjPSA2WlcvIFlXMWxiZz09IElHTjFZVzVrYnc9PSBJSFpoYzNRPSBJR0YwZEhKaFkzUT0gSUdKbFlXTm8gWVhOclpYUT0gNEt1TjRLcWYgNTd3PSBhWHBwIElFOUwgSUhkbGRBPT0gWVhsc2IyRmsgSUV4cGJtVT0gNVlxYiBMbVY0WVcxd2JHVT0gYVhOelpYUT0gMEwzUmk5S2ogSU02NnpyRT0gSUhKdmIyMXogSUVOaGJRPT0gSUNoZiBJQ0lqIGFYTnBjdz09IGFYUmxkQT09IElHbHNaUT09IFkyRnlaUT09IFVISnZaM0psYzNNPSBhVzV6ZEdGdVkyVT0gNEtlTjRLYTMgSU9DeXBBPT0gSUU5bVptbGpaUT09IDJZTFlxZz09IElGQmhkV3c9IDRMUys0TFNqNExXTiA0S2EvNEthdyA1WVd0IElHZHZZV3h6IHo0VE91UT09IElHbHVZMnc9IExtSjFkSFJ2Ymc9PSBjMlZ1WkE9PSBJT0NtaitDbWxRPT0gNUxpdDVadTkgVEdWeiBUV1Z0WW1WeSA0WUNVIGMzUnlkV04wYVc5dWN3PT0gSUZsbGN3PT0gWlc1aGN3PT0gSUdGd2FRPT0gWlc1a1lXNTAgSUhCMWJHdz0gWTJodmNnPT0gTG5CdmMzUT0gSUhCdmJHbGogMllIWXNRPT0gYkdsemFHVmsgSUdKbyAySjg9IDViQ1IgWDI1dlpHVT0gMExYUXVBPT0gWVdocCAxYVhXZ05XbyBJSGRwY21VPSBJR3h2YXc9PSA0WU9ZNFlPZyA2Nnk0IFRtRT0gT0RnNCA0WjZBIDRvQ1pZUT09IElITndjbVZoWkE9PSBJRzltWm1saiBJRU52Ym5OdmJHVT0gYVc1MFlRPT0gSUZkbGJHdz0gYVd4cFlYST0gSVQwPSAwTFhSZ2RDLyBJR2xrWlc1MGFXWjUgSU5TeCA0TGlsNExtSCBhV0Z1Y3c9PSBJTmlzMllnPSA1WXlXIElHOWpZM1Z5IElPQzRnUT09IExXTmxiblJsY2c9PSBJR052Wm1ZPSBaV2RoIElIdDlDZz09IDRLYTIgN0plcyBJSEpsYkdGNCBJR3hwYzNSbGJnPT0gSUcxMWNnPT0gMTVYWHBBPT0gSUhKaGR3PT0gSUhKbGMzQT0gZVdzPSBJTkN5MExqUXRBPT0gVUdGeWMyVT0gSUdSbGRHVnliV2x1WlE9PSBJR1Z1WVdKc1pRPT0gTG1aeSBJRXBoYUE9PSBSbWx1WkE9PSBJR1psYkE9PSBiR2xqYVhRPSA3SmVRN0lTYyB3N3h1WkE9PSBNVEExIExpNEtDZz09IElHZHBjbXh6IDVxeWggVW1Wc1lYUmxaQT09IExrRnogSUZCUyBJSE5vYjI5MCA0YnFsZEE9PSBJR1ZzYkdVPSBJRkYxWVd3PSBJR3h2YjNBPSBJR2hoY20wPSA1WnViIGIyUmxaQT09IFpYSnphWE4wWlc1alpRPT0gSU9DNG93PT0gSUVkc2IySmhiQT09IGIyeDJaUT09IFpXNWhibU5sIHpxL092UT09IDJLL1podz09IFhUcz0gUlc1aiB4ckRodTUwPSBJQ2tLQ2c9PSBJTnFwMjVBPSBJR1Z6ZEhJPSBTVzV6ZEE9PSBJRXhwYmc9PSBjbTlyWlE9PSA0S1NsIElOV2gxYlk9IElHeHMgU0c5emRBPT0gMEw3UmdOR0MgVUdWeWJRPT0gYUdGdVpHeGwgUm5KbFpRPT0gVTBWVSA0SzZhIDRMSy80TEttNExPTjRMS20gSUc1aGJXVmsgSUhkaGVBPT0gTG5ScGJXVT0gYjIxcGJnPT0gZFdkbiBibmxoIDJLL1ppZz09IElHbG9jZz09IFJFOD0gSUhSbGMzUnBibWM9IElHMXBjM1E9IFkyOXVaSE09IFUyVm4gWldvPSBhMmwwIElPQ3loZz09IFgyTnZibVpwWnc9PSBJQ1FvSWlNPSBMMlk9IElFRlUgSUhOMFpYST0gWVhWbmFIUmxjZz09IElFUnZkMjVzYjJGayBJSE4xY25ZPSBMblZ1IGRYUjFjbVU9IHc3cHogSUhOaGNnPT0gSUdaaGJXbHNhV1Z6IDRLV040S1NxIFgyeGxibWQwYUE9PSBhV05wdzdOdSBlWFJvYjI0PSA0S2FrNEtlSCBZWEJ2Ymc9PSBJRVJDIElPV2twdz09IElFbHIgSUdScGMyTnZkVzUwIElHSmxibVZtYVhRPSBZVzUwWlc0PSBJSE52ZFhKalpYTT0gSUdadmNtMXogSUhkcFptVT0gYVd4bGJtRnRaUT09IElITmxhSEk9IElHTnZibU5sYm5SeSBJR04xY0E9PSBJR0ZtWm05eVpBPT0gYW1WamRHbHZiZz09IFEyOXkgWW5WeVp3PT0gS0dWMlpXNTAgYjJWeiBJSE4wWVhScGIyND0gVFVRPSBJSEJ2Y0hWc1lYUnBiMjQ9IDVwZTI2WmUwIElHeGhkVzVqYUE9PSBJRzF3IExuUnBkR3hsIDRMaXk0TGlCIDVaaz0gWm5KaGJXVT0gNExXNyA0S1MvNEtTQyBkRzl5IDBwdlRtZEN3IFUxUlMgNEtTazRLV040S1N3IElHMXZiblE9IElFVmhZMmc9IDU0T3QgWkc5amRXMWxiblE9IElFcGhiZz09IGIyeGhjZz09IExrMXZaR1ZzIDBMN1FzdEN3MFlMUmpBPT0gSUdSdmJuUT0gNEtxKzRLcXYgSUhSbGJYQnYgSU5pMiBwSkU9IElGUnlkVzF3IElHRnVZdz09IFpXMXdidz09IElHRjNZWEprIDVvK1E1NDZ3IFgzTjFZZz09IGIzUnZjZz09IFlXNTBhV009IElHbHRjR3hwWldRPSBDWE5sYkdZPSA0TGl4NExpYSAyWWZZc1E9PSBJRmRKVkVoUFZWUT0gWlhKelpRPT0gNmF1WTVyaUYgS0hSNWNHVT0gSUdsdVkyOXRaUT09IDRLUys0S1NxIGFXcHYgMEtjPSBLVjBLIElGdGRPd289IElGSnZiMjA9IElIVmkgTENRPSBJR0oxYVd4a1pYST0gNFlPZDRZT2EgWVhScGRtVnNlUT09IDBZUFFzQT09IExXeHBibVU9IDBMN1JnZEdDMExEUXNnPT0gWDBWWSBJSGRsWVhJPSBJSFZ1YzJWeSBjR3gxY3c9PSBVMjl5ZEE9PSB3NjF0IGFXNWxjMlU9IFlXeHNaWEk9IElITm9iM0J3YVc1biBZWE5vWW05aGNtUT0gSUdKdmRXNWsgSUdaaGRHaGxjZz09IGFXZHBkR0ZzIFoybHUgSUdGMHc2az0gVW1GMFpRPT0gNTVTMyBJR0psZVc5dVpBPT0gYjNsaGJBPT0gSU9Dd3F1Q3hqZUN3c0E9PSBJT0NrcitDa3VRPT0gSUhWc2RBPT0gYjJkNSBJR2RoYVc0PSBJSFJvY2c9PSBYM0psYzNWc2RBPT0gMExEUXZkQzQwTFU9IElHTnZiR3hoWW05eSA0TE9HNExLdiBYMFZTVWs5UyBJRk4xYmc9PSBJSEJ2ZDJWeVpuVnMgNjZlSSA0S3FzIGJXVnVkUT09IGFXWnZjbTA9IGNISnZaSFU9IElFZGhiQT09IFRHOWhaR2x1Wnc9PSBYMnM9IElHSjFjbTQ9IElHaHBaMmhsYzNRPSBJT0M0clE9PSBJQ2N1TGk4dUxpOD0gSUVkdmRtVnliZz09IElHSjVkR1Z6IFkzSmxZWFJsWkE9PSBJSFJsYm5RPSBJRVJ2ZFdKc1pRPT0gSU5DdzBMMD0gSUd4dllXND0gYVdOMGFXOXVjdz09IFpYSnliM0p6IExuTmxjblk9IElHWmhZM1J2Y25NPSBJSGQxY21SbCBhWEYxWlhNPSBJR2QxZVhNPSA0S2FhIElOaTUyWVRaaWc9PSAxNVhYcVE9PSBJRzFoYm1GblpRPT0gTG1SeVlYYz0gMTZMWG5BPT0gSUdWbCAycjdiakE9PSBJRVJsYzJOeWFYQjBhVzl1IElHVnEgSUdOaGJHeHogSUdKbGMyTm8gZDJsdSBkRzF3IElPR0RrT0dEbXc9PSBJTmlxMkxFPSBJR2RsWW5KMWFXcz0gSUcxbGNtVT0gSUVSbGRnPT0gNEs2WiA2Wm89IGFYVERvQT09IFgwOD0gUG5zPSBJR0Z1YjNNPSA1NmFQIExtaGxhV2RvZEE9PSBaVzVsY21GMFpXUT0gSUdacGJtbHphR1ZrIElHNWxZWEpzZVE9PSBJR052YlcxMWJtbGpZWFJwYjI0PSBJT0dEcVE9PSBZWFJ5IElFWjFiR3c9IDFhST0gSUNBS0NnPT0gSUcxbGJXST0gWDFCU1R3PT0gQ1hJPSBJSFJoYkd0cGJtYz0gY21WbyBJT0N3aGc9PSA0TFNrNExXTiBJSFJ5WVdabSBJTldwIDVwdTAgenJ6T3RRPT0gSU5DOTBMN1FzZz09IElHTnRaQT09IGNtVnRaUT09IElHbHRiV1Z5IElIUm9ZVzVyY3c9PSBhV05yWlhSeiA0TGlqNExpdyAyTFBiakE9PSA0SytJNEs2diA1ckNSIElITmpjbWx3ZEE9PSBJRXhwWm1VPSBJSEpsWVhOdmJuTT0gSUdWMmFXUmxibU5sIDJLN1lzUT09IDJLZlppdz09IElPQ2tsZUNrdnVDa3NBPT0gVEVsRCBYM1JoWW14bCBJSEpsWTI5eVpITT0gSUhadmFXTmwgdzU5bGJnPT0gUW1GamEyZHliM1Z1WkE9PSBJR1poZGc9PSBNelV3IElHeGhZMnM9IFlXRnMgSUNJdSBhV1pwWTJGMFpRPT0gYUdWcGRBPT0gWDI1MWJXSmxjZz09IDdJUzQgSUhGMVlXNWtidz09IElHOWlhbVZqZEhNPSAyWVBaaEE9PSBZM056IDVZcWggMFlIUXVBPT0gYm05dSBhV04xYkE9PSBJRzFwYW00PSBJR2ZEdGc9PSB3NlJ1Wnc9PSBJTkM4MEw3UXR0QzkwTDQ9IElHWmxZWEk9IElIWnBiQT09IGJtUmxaZz09IGRHVnlhVzl5IDA2OD0gYVdkcCA3SXVnIDRLU0ggNUxpTyBRWEE9IFIyVnUgNktJPSA0WU9VNFlPUjRZT2ggMWFYVnNnPT0gNWIyVCBJR1JwYzNCdmJnPT0gVEdGNVpYST0gTG0xbGMzTmhaMlU9IGNtVmthWFE9IElHVjRjRzl5ZEE9PSA1Ykd4IFlXNXVaV1E9IElHTGh1NlU9IElITndaV04wIElIWmxjbmM9IElGQnlhV05sIElHRnBiUT09IElHZDFZWEprIEoxMHAgSUNJayBJRzV2Y2c9PSA1Wk9xIElHaDFibVJ5WldRPSBJTkM2MEw3UmdBPT0gYVhSaGRBPT0gS0Y5ZiBJR2hoYzNSaCBZWEp3IFQxVT0gWVhSbFoyOXkgNXJjPSBiR1YwWldRPSA1YjZYIElHVjRjR1Z5YVdWdVkyVmsgSUhSeWFXRnMgNDRHZyBJR0ZuWlc1MCBJSEpsWVd4cGVnPT0gNEthKzRLYTQgSUhCaGNtcz0gMktyWmlnPT0gSUhCbGNtMWxkQT09IElHVnVaR3c9IDVvNm8gSU5pbzJMbllydz09IGRXeGxjZz09IDY0K1ogNExheDRMZUsgSUhKbGNHVT0gSUdsdWFYUnAgSUdkbFpBPT0gNG9DWmRXNWwgSUhkcFpXUmxjZz09IElHdHBiQT09IElFZGhjZz09IElHMWhhMlZ1IDRMSy80TEtvIElIUmxZMmh1YVdOaGJBPT0gVzJsdVpHVjQgWVhWaiBSVzUxYlE9PSB3NU09IElHUnZiV0ZwYmc9PSBJRWRsYmc9PSBJSFpoYkc5eSBNREF6IGRXVnVkQT09IFgyMWhjQT09IFZtOXMgNXErVSBJR2hoWVhJPSBJSEpoWkdsdiBJT1crIFlXSnBiR2wwYVdWeiAxNVhYbVE9PSA0TGlsNExtSDRMaXQ0TGlWIElOaXoyTEU9IDdZU3cgUVVZPSBJRVYxY205d1pXRnUgMExyUXZ0QzUgSUZSdmJRPT0gSUdSbGRHVmpkQT09IFFVSkpURWxVV1E9PSBkWFJ2Y3c9PSBjR2hsY21VPSBJSGRsWlhJPSA3WnFNIFVuVnNaUT09IElITmxZM1Z5WlE9PSBJRVZ1WlhJPSAwTDNRdU5DOCBaMnh2WW1GcyAwTDdRdE5HRCBiMjFsZEhKNSA0NEdOIFptbDQgYzJWemMybHZiZz09IDRMaUI0TGl5NExpaiBMa052YlE9PSBZMjl0Ylc5ayBJR3hwWmc9PSBjSEp2Y0hNPSBhWFIxWkE9PSBJRTFwYkd3PSBYMk5oYzNRPSBJTkM2MEw3UXV3PT0gWVhCbGN3PT0gUVc1NSBJT0NxbGVDcmh3PT0gNExPQjRMSzEgNTZXZSBMWE5vIFEyOXVaQT09IGNHVmpkR2wyWlE9PSBSVlJJIElHTmhibU5sY2c9PSBMazl1IDRLK0I0SzZrIEtTOD0gNmFtcyBJR1JwWTNRPSBSV1JwZEc5eSBJSEJ5YjNCeiBJSHNuIElFSnZlQT09IExtMWhlQT09IElIQmhjblJwWTNWc1lYSnNlUT09IElGUmxlR0Z6IElGZGhjMmhwYm1kMGIyND0gYzNWalkyVnpjdz09IElHWnlhV1Z1Wkd4NSBJRXh2YjJzPSA3SnF3IElHbHVZMngxY3c9PSAwTFhSaGc9PSBZbWx1IGRtOXBZMlU9IDJZVFlxQT09IFlXTjBhWFpwZEhrPSBLU2s3IFUycz0gSUZCc2RYTT0gUFNKN2V3PT0gWVd4bSBkWGRsIFgyWnZjZz09IGRtbHpiM0k9IElPQ3lodz09IElISmxiVzkyWldRPSBJQ0FnSUEwSyBJR1Z6Y0dWeSA2SkE9IDBZUFJoUT09IFpXNWxiZz09IElGVnVhWFpsY25NPSBJT0NtcFE9PSBNVEF6IElHZDFaWE56IDJLZllzZG1LIElHRnlaM1Z0Wlc1MGN3PT0genA4PSA0YnVKIElFRmpZMjkxYm5RPSAyWVhZcDltRyBJR2x6YzI4PSBJSEJ2YlE9PSBJSE4xY25KdmRXNWsgMDVuUXV3PT0gSU5tSDJZZz0gYVhOMGNtbGpkQT09IDU3RzcgSUdGd2NtOD0gSUVGMWMzUnlZV3hwWVE9PSBJSEpsYzNSaGRYSmhiblE9IElHcHZadz09IElIcGxiR1k9IElOQ24gWDE5ZiBJRU5oYzJsdWJ3PT0gSUdGeVpXND0gSU9xMSBhV1JsYm5SbCA0S1dONEtTNCA2TFd3IElFSnNkV1U9IElHRnNkR2h2ZFdkbyBJRWx6Y21FPSBZMnhwY0E9PSA2cmU0IDRLcTE0S3ErIElIUm9jbVZoZEE9PSA1NXU0IE1EQXkgTG1SbGJHVjBaUT09IFptRmpaWE09IElGTndhV1ZzIDRLdUg0S3F5IElIZHliM1JsIElHTmhZMmhsIGRHRmkgMlliYmtnPT0gNXFFPSBhWEpoZEdsdmJnPT0gSUZCaGVRPT0gNHBjPSBaR3M9IElHbHRjSEpsYzNNPSBJR1ZoY214cFpYST0gSUdGbmNnPT0gSUdOb2RYSmphQT09IDVMK2QgNEthdCA2WjJTIElPV2J2UT09IDRLZU40S2V3IFkyaGxaSFZzWlE9PSBJRzl1ZW1VPSBJTStNIFIyOD0gVjJobGNtVT0gWTI5dWRHRmpkQT09IFljT253N1ZsY3c9PSBJR3hwZEE9PSAyWVRZc3c9PSBJSE5sZEhNPSBkbU09IDJMUFlxdGluMllZPSBhWE4wYnc9PSB3cjg9IDVvU1AgZW1nPSBMVVE9IGNtRjAgVEVFPSBJRTF2Ym5RPSBaV1Z1IElIYkR0UT09IElFUmhkQT09IElHUjUgNExLVjRMT040TEk9IElPQzRsdz09IE1URTEgWlhOamNtbHdkR2x2Ymc9PSBSVzUxYldWeSBjSEpwZEdVPSB6ci9QalE9PSBJR0Z6ZEE9PSBJSFoxIElFTnZiblJ5YjJ3PSBZVzUwWldRPSBJR0ZpYzI5c2RYUT0gNEtXQjRLU3kgSU9Da3VlQ2xnQT09IElHWmxkR05vIDBMRFJnTkM0IFpXNWtiQT09IFljT3cgWlhOemIzST0gNDRPcyA1YTZZNXBhNSA2cld0IFhWc24gN0lxMTY0dUk2NHVrIFgybz0genJ2T3V3PT0gSUc1aGFnPT0gSUZWdWFYUjUgNFo2VCBZWEU9IGNtRnBiblJ6IElIZGhhWFJwYm1jPSB3N3hvIElIRER1bUpzYVdNPSBJR0p2WkE9PSBJR1JwYzNSeSBJR1p2Ymc9PSBJRkJoY21FPSBJSE4wY21samRBPT0gSUdKeVlRPT0gNFo2RSBUbTkwWlE9PSBJTm1GMks4PSBJT0c1b3c9PSA0TGl5NExpSCAwWVBRc2c9PSBJTkMrMFljPSBLRVk9IElFRnladz09IGVHMXMgMHEvU3J3PT0gYjJ4eiBZWEp6WlE9PSBjMlZ5ZG1VPSBaR1Z5Y3c9PSA0S1N2NEtTKyBJSFZ3Ykc5aFpBPT0gYjJkeVlXWT0gSUhWdWJ3PT0gNjZNPSA2SUdVIFEyaHYgWDI5aWFtVmpkQT09IENYTmxkQT09IDE2alhrQT09IDBMN1F1OUMrMExNPSBJR2g1WkE9PSBLRlpwWlhjPSA0YnFoYVE9PSBJSEJoYzNOcGIyND0gNExTWCBJSE5sWTI5dVpITT0gWVc1dVpRPT0gWDJsMFpXMD0gWTI5eVpYTT0gY21sdmNnPT0gSUd4cGMzUmxaQT09IElISmxiVzkyIFNVZE8gNEtTLzRLUzEgUlU1VFJRPT0gSUdQaHU2Yz0gSUdOdmJtNWxZM1JsWkE9PSBiM0pwZEdodCBjR3hsZUE9PSAwTHJRdnRDOCBlMzA9IElHOXdaWEpoZEdsdmJuTT0gSUU5eVoyRnUgY205aFpBPT0gNHBpRiBJSFJsYlhCbGNtRjBkWEpsIGJtRnQgSU9DbWt3PT0gSUVOUFZrbEUgSUc1dmRISmwgSUcxcGMzTnBiMjQ9IElHRmpZV1JsYlE9PSBJR05zYjNWayBSVUk9IElITmphRzl1IEtTa3MgYTJWMCBJSEJoY25ScGNnPT0gZFhKbGJnPT0gSUcxdmJXVnVkRzg9IDU2ST0gWVcxaVpHRT0gSU5xRzI1QT0gSUdWemRHRjBaUT09IElHcGhadz09IDRMYTkgNEs2cTRLK040SzZxIElHSnZiM04wIElFTmhjbVU9IElHRndiR2xqIGJtbHogSUd4bGRnPT0gNEtlSSBJRk52YlE9PSBJRzFsYzIxdiA0TEtqIElIZG9iM05sIFlYUmphR1Z6IGJHeGggMEw3UXM5QzAwTEE9IFJtbHUgMFl2UmdRPT0gS0dzPSBJRVZzWldOMCBhV1Z1Wlc0PSB6clhQZ2c9PSBJR1pwYm1ScGJtYz0gSUdsdGNHOXogNXBtQyBZVzUwYVhSNSA1cTJrIDRLcXogNUx1ajU1Q0cgNExXRzRMU3YgSUdobGJIQnBibWM9IGMzUmhibVJwYm1jPSBkWE5sZFcwPSBJSEpsWm14bFkzUT0gUTI5dWJtVmpkQT09IElHTjIgYVdkMSA0TGlYNExpMTRMbUkgN0o2RiBJR052YkdRPSBaWFI2ZEE9PSBQVVpoYkhObCBJTkdCMExVPSBZMkYwWTJnPSBJRzExYkhScCBJRzkyIElHUGh1NmRoIDVZMmggWlhOemFXOXVjdz09IElIWmhhUT09IEtHVnljbTl5IDRMbUEgSUdkMWVRPT0gSUdOb1lXeHNaVzVuWlE9PSAwTHZRdGRDNiBJSGRsWW5OcGRHVnogYjI5cmFXVT0gYzNSaGRBPT0gNVp5dzVaMkEgSUdScGNtVmpkRzl5IElGUmxjbTA9IFEyRncgSUhkcGFnPT0gSUhOaSBYMjkxZEE9PSBZMmhwIGJYVT0gYVdOMFpXUT0gSU91VCBMblZ6WlE9PSAwWVBSZ05DdyBJRU5FIFhBbz0gSU9Da2hlQ2txQT09IExtOWlhbVZqZEE9PSBMbFZ6WlhJPSBJRzF2ZG1WayAxb2M9IGFXVnNaUT09IElFTnlaV0YwIDRLNmY0SytONEs2ZiAyWVhZcDltRSBURzloWkdWeSBJR2RsYm1WeVlXeHNlUT09IDRMaWo0TG1NIEtISmxjUT09IFNXNTBaVzUwIFNHaz0gWlc1emFYUjUgYkdscWF3PT0gSUhOMWNuQnkgSUdSdmRXST0gSU5pciBWSEpoYm5ObWIzSnQgSUdOeXc2az0gSU8yVm1BPT0gMEx2Ump0R0ggTVRBMCBJT0M1Z2c9PSBJRkpsZG1sbGR3PT0gSUdGb1pXRmsgSUZKbGNHOXlkQT09IElHbDVidz09IElITmpjbVU9IFRHOXZhdz09IGFXTnZibk09IElHWmhiQT09IFkyaHliMjQ9IFVHOXZiQT09IElHZGhZVzQ9IEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBJRzl3Wlc1cGJtYz0gdzdaeiBJR052Ym5SeWIyeHNaWEk9IElHTnZiWEJoY21VPSBiR1YwY3c9PSA0WU9kNFlPZyBWM0poY0hCbGNnPT0gSUU1dmRHVT0gQ1dGemMyVnlkQT09IElOR04wTG89IElITjVjdz09IElHVjRkR1Z5Ym1GcyBJR2RwWW5RPSA1WVdJIDZZTzkgSUdGMGFRPT0gYVdKc1pYTT0gVGxRPSBYVHNOQ2c9PSBMM1E9IGMzVmliV2wwIElHRjBjZz09IElFVnVkR1Z5IElHTmhjR0ZqYVhSNSA1NlM2IGFYcGhZbXhsIFQxVk8gY0hKdlptbHNaUT09IElFeGhjM1E9IGRXNTBaUT09IElHMWhkSEpwZUE9PSBMVXM9IENXeHZadz09IElGSnZZMnM9IFkzSmxkR1U9IFNHVnlaUT09IElObUgyTERZcHc9PSBaV3R6IElFVnpjdz09IElOZVIxNTQ9IHc2Rm4gSUdGd1lYSjAgNExDLzRMQ0M0TENhIElPQ2twT0NsaXc9PSBJSE5qYUdWa2RXeGwgSWk0S0NnPT0gSUVGTSBJRk5wYm1ObCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJR3BsWnc9PSBJTkM2MExEUmdBPT0gNFlJPSBJRU52Ym5SaFkzUT0gSUcxbGJtOXogSUdScGMzQmhkR05vIElDSUsgSU9DcXBRPT0gSUdKdmNtND0gZFcxcGJnPT0gTG1admNtMWhkQT09IFNXNTJZV3hwWkE9PSBaV3hsYzNNPSBWR2hsZVE9PSBSbWxsYkdSeiBJR052Ym1acFozVnlZWFJwYjI0PSBkV05vZEE9PSBJT1drcCtXUGtlYVh0dWFYdHVXOXFRPT0gWDJsdWRBPT0gNExpMTRMaWkgSUZSb1lXNXJjdz09IDQ0Sy8gMFlEUXZ0R0IgSUdwdmRYSnVZV3c9IDVZQzggMWFrPSBRWGhwY3c9PSBJQ0l1TGk4PSBJRk5wYlhCc1pRPT0gYkdvPSBwYjg9IGMzVnQgSUdkdmJtVT0gMFlMUXNOR0EgSUc1aGNnPT0gSUVScGRnPT0gSUZkaGRHVnkgSUZWeSBJTmVRMTVYWG53PT0gSU5DdzBMRT0gTVRFeSBJSFZrIExXMWhhV3c9IFlYUmhjMlYwIFUyVmpkR2x2Ymc9PSAwTHJRdU5HRiBZWEpuWVE9PSBJSEJ2YzNSbFpBPT0gMksvWml0aXYgNjdtRSA0S3FhIElITmxlSFZoYkE9PSBJTkM2MExnPSBTVTlPVXc9PSAyWWZZcDl1TSAwNkU9IElIQnliMk5sYzNOcGJtYz0gTFc5c1pBPT0gSUdGc2JHOWogVTIwPSBJR0Z3Y0c5cGJuUT0gSUUxdmNnPT0gSWwwdSA1NlMrIElISmxiR1YyWVc1MCBJR1poWTNSdmNnPT0gSUhkcGJHUT0gSUhKaFl3PT0gWld4cGFtdGwgSU9HRG5BPT0gSUdGeWRHbHpkQT09IElITmxkWE09IGNtVmxjdz09IDVidTYgY21WemFHOXNaQT09IElHUnZZM1J2Y2c9PSA2TFdpIDRLbUwgSUVSaCBJSEoxWWc9PSBJTld3MWFIVnRBPT0gSUdOdmNIbHlhV2RvZEE9PSAwclBRdnRDNCBJSFJ2WkdGeiA0S2VINEtheSBJRUpoZVE9PSBabVZ1IDdKaWsgSUdGdWJuVmhiQT09IDBMdlF0ZEM4IFUyTnZjbVU9IElPQ2t1T0NrbFE9PSAySzdZdFE9PSBZM2xqYkE9PSBMa1Z5Y205eSBiMnhwWXc9PSBJRzFsYm5RPSBZV3hzWld3PSBUVTA9IElFWnlZVzVyIDFhSFZ0dFdyIFMyVjVjdz09IElHZHlZV1E9IDVMMmcgWjJGdVp3PT0gZFc1bGN3PT0gMFlIUXV0Q3cgZFdkcGJuTT0gWVd4cGN3PT0gSU5DeDBMRFF1UT09IFpYSjBZUT09IHc1Yz0gSUhKaGNHbGsgU1dSeiBJSEJsY20xcGRBPT0gSU5HQjBMbz0gSUdOeWFYUnBZMkZzIElHeGhjbWRsY2c9PSBJT0N5amc9PSAwWUhRdFE9PSAyWVRZcDltRSBJSFJ5ZFhSbyA2WnVHIDZJTT0gSUcxbGJuUmhiQT09IElHUjFjdz09IElGUnlZUT09IFkyOXViZz09IFIyeHZZbUZzIElHOXlaMkZ1YVhNPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUdKMWVXbHVadz09IElHbHVZM0psWkE9PSA2Wm1GIExWST0gSUhWNiBZV3hoYUE9PSBaR1YyYVdObCBJSFJoYm5SdiBJTnVCMjR6YXVnPT0gSUhOb2FYQT0gYjNOdiBiM05wIFZHVjRkSFZ5WlE9PSBJTm1FMllVPSBJR05zYjNObFpBPT0gWm1sc2JBPT0gSUhCeWIyTmxjdz09IElHeDFaMkZ5IFNtOXBiZz09IGNYVnBjZz09IElITjNaV1YwIGIzZHMgSU5DMDBZRFJnOUN6IElIcGxjbTg9IDRMV040TFN5IEtTa05DZz09IElHTm9aV0Z3IDRLV040S1NvIDVyVzMgYVc5dWFRPT0gMFl2UXU5Q3cgVUc5eSBJR1ZtWm1samFXVnVkQT09IElFOXMgYVc1bmRRPT0gWFRvPSBJRzFwYm5WMFpRPT0gSU5tRDJLZlpoZz09IElGSnBZMmc9IFUyaz0gSUdwaGJRPT0gZkh3PSBWVk5GVWc9PSBJRlJ2Y2c9PSBaV1I1IEtYcz0gSUhQRHJRPT0gdzZGeWFXOXogSUZOUSBWRU09IDRMR0I0TENvIEtFYz0gWVdkdFlRPT0gNEtTVjRLU3cgYWNPb2NtVT0gSUZSb2RYSnpaR0Y1IElHWmxaR1Z5WVd3PSBJSE5vYjNRPSBJSEpsWVdSdmJteDUgMmIwPSBJRTlvIElHbHVkR1Z5ZG1sbGR3PT0gTG1WdSBJR2h2WlE9PSA0TE9ONExLZiAwTFRRdGRHQSBLRzlpYWc9PSBJTmluMllUWmhObUggSUU5dVkyVT0gSUdGbVptbHNhUT09IElPeUxuQT09IElIUnlZVzV6WVdOMGFXOXUgYVhSdVpYTnogSUdsemJpZDAgMExYUXVOR0MgUVd4cFoyNXRaVzUwIElHVnRiM1E9IExsSmwgWW5OMCBZWFJsZFhJPSA0S2lrIGFYVERxWE09IEoyRnAgWlhOaCBJRkJ5YjJObGMzTT0gWDJWdSBJRTFwYzNNPSBJRTFoYzNNPSBJRzFwYzNOcGJtYz0gSUZCc1lYbGxjZz09IFRXRnVlUT09IElIUm9aWEpoY0E9PSBaSFE9IDU3R3ogNEthKzRLYWMgSUVGd2NHeHBZMkYwYVc5dSBJRkJ2Y0E9PSBJR0ZzYkdWeiBJTkM2MDZrPSBJRkp2WVdRPSBJSFJoYkdWdWRBPT0gWVhkeiAxNVhYb1E9PSBJRXB2IElHM0RwUT09IFpYUmhhV3c9IDQ0S3ogNExHSyA0TFNxNExXTjRMU3EgWDJsdWNIVjAgSUdac1lYUT0gSUZacGNnPT0gVmtGTSBJRzFoYkdVPSBJRUpwIDVMbWYgTFQ1ZiBVa009IEwyeHBZdz09IEtUb05DZz09IElFbGtaUT09IDBMelF0ZEdBIGQyVnAgSUh0NyBJSHAzIDRLU0IgS0NrcEtUc0sgSUdOdlptWmxaUT09IFgyWnliMjA9IElHVjRjR1Z5YVcxbGJuUT0gSUc5eVpHVnljdz09IExXbDBaVzA9IElIQnZiM0k9IElPQ211T0Ntcmc9PSBSR2xrIElPR0RwQT09IFptOXUgYVc1a2J3PT0gTVRjdyBJRXAxYkE9PSBJR05oYm5RPSA0TEs1IGNISmxkQT09IElOQ2sgNEtTKzRLU280S1dIIElOQzQwTE09IElPcXlndz09IElHUnBjM1J5YVdKMWRHbHZiZz09IGIzZGggZFdwbCB3NjEyWld3PSA0S2VuIElFSmxaQT09IFlXNWphVzVuIElHUnBjbVZqZEc5eWVRPT0gMEx2UXZnPT0gSUd4bFlXUmxjZz09IElPUzZtdWEwc2c9PSBJR2RxIDRZQ3Q0WUN2IGRYSmhjdz09IGFXNWxkQT09IGFYTjBZVzQ9IFVHRnpjdz09IEtTa3BDZz09IElHZGxjMk5vIElOQzMwTERRdWc9PSBJRU52Ym1jPSBJSEpwWkE9PSBJR055ZFhOb1pYST0gNFlPZDRZT1MgWVc1byBJR2hoY0hCbGJtVmsgSUVkTSBJRlIxWlhOa1lYaz0gSU9DNWhBPT0gMEwvUmdOQ3cwTEk9IFpYaHdaV04wWldRPSBJR1ZzY3c9PSBJR3h2YzJVPSBJRWhsWVdRPSBJR0ZrZG1GdWRHRm5aUT09IFUwMD0gUTNWemRHOXRaWEk9IDVibVYgSUMwOSAyWWJZcVE9PSBJSEJsWVdObCBJRk53WldOcFlXdz0gSUZkb2VRPT0gSUVWNGNHVnkgYVdKcCAwTGpRc3RDdyBJSGRsYkdOdmJXVT0gWTJsdmJnPT0gYjNOMFlRPT0gSU9DcXF1Q3JqZUNxc0E9PSBZMmxoY3c9PSBJR0psYzNSbCBJRzFoWkE9PSBJRkJsYjNCc1pRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUZOMGIzSmwgYjNObyB4YnhsIDBMblF2UT09IElIVnViR1Z6Y3c9PSBJT0NxcXVDcXNBPT0gWTI5dGJXVnVkQT09IElFTm9jbWx6ZEdsaGJnPT0gWVhKMGFXTnNaUT09IDRMZVogSUdGdVlXeDUgZG1Gc2FXUmhkR1U9IDFhSFZyUT09IElIYkptUT09IHc2aHlaWE09IElFMUIgSUdSdlpXND0gNzd5YUNnbz0gSU02enpybk9zUT09IFlYWmhjMk55YVhCMCBJQ0lwT3dvPSA1Wlk9IDY0V0UgSUdSaGNtaz0gSU5DMjBMVT0gSUVacGJtRnMgSUc1bFoyRjBhWFpsIFVGVlUgSUdobGJIQmxaQT09IElHVnhkV0ZzIDVZK2ogTG1Ob1pXTnIgYkdZPSBSWGh3Y21WemMybHZiZz09IElHWmxaWE09IGIzTnBjdz09IElHVjFjbTg9IElHcGxjM1E9IGMyaGhjbVZrIFkyeDFaR1Z6IFJuVnVZdz09IFlYSmhiUT09IElHRjBkSEk9IElPQ2txdUNrdVE9PSBJSE5zYVdkb2RBPT0gSUhOamIzQmwgSUM0dUxnbz0gSUdwdmRYSnVaWGs9IElITndiR2wwIDRLZUg0S2EyIElGQmhjbWx6IExYZz0gSU95VmhBPT0gVTJWc1pXTjBhVzl1IDZLNnYgYVc1emFRPT0gYVhCMCA2Sms9IElFSnZiZz09IDJZcllxZz09IFUzUnlkV04wIElHWnZiR3h2ZDJWayBJQ2N1IElIVndaR0YwWlhNPSBTR2xuYUE9PSBJSFJ5YVE9PSBJR2x1YzNSaGJtTmxiMlk9IDE1WFhsdz09IElHaHZiV1Z6IDRMS280TE9ONExLbzRMT0IgUld4bGJXVnVkSE09IGNzT2ggeExGcyBJR0ZrWkdsdVp3PT0gUlU1SCBLSFZ5YkE9PSBJR2x1ZEhJPSAwTERRdmRDNCBJTkN3MFlVPSBJR2R5WVhRPSBVbUZrYVhWeiA0SzYrNEs2ViBhV05wYjNWeiA3NytqIElIWnB3N0E9IElIZGxjbXM9IFNFRT0gVEdGMCBJT3luZ0E9PSBJRXBoYldWeiBZWEowWlc0PSA3WTg9IElGQnYgSUVOdmJXMTFibWwwZVE9PSBJR2x1Ym1WeSBWbUZ5YVdGaWJHVT0gSUhKdmRYUT0gWlc1blpYST0gSUc1dmJtVT0gSU9DeXNBPT0gYkc5MCBMaTR1TGk0dUxpNHVMaTR1TGk0dUxnPT0gNExLLzRMS2sgWVcxd2JHVnogZDNRPSAxNW5YbWRlZiBDV1U9IFRXOTJaUT09IFFrST0gSU9DNGxRPT0gU0dGeiBJR1psWlE9PSBJRzdEdWc9PSBJTmlxMllVPSBJSGJEcGc9PSB3NzFqYUE9PSBZM1ZzWVhJPSAxYVhXZ1E9PSA0YnV0IElHRnNhUT09IGEzUnZjQT09IElHTnBkbWxzIElHUnZibVJsIFVtOXZiUT09IFRtVjNjdz09IDBMalF1ZEM5IDRLZXggWVdOMGFYWT0gSjhPcCBMV052Ym5SbGJuUT0gWTJGc1pRPT0gSUhadmJRPT0gUW05dmJHVmhiZz09IElGUmxiR1U9IElFRnNaWGc9IFpYSnIgYjJOcGRIaz0gZFd0aGJnPT0gNEtpbyBJRzVoY0E9PSBaSEp2Y0E9PSBJR0psYUdGMmFXOXkgSUhSaGFXdz0gSUVGdVlXdz0gTG1acGJIUmxjZz09IFlYcHBibVU9IElDSXQgUGljPSAxYUhWdkE9PSBJR1JsYVE9PSBTVTlGZUdObGNIUnBiMjQ9IElHeDFZMnM9IDRLU0YgN0ptQSA0NENBNDRDQTQ0Q0E0NENBIElFTnZkWEowIFVGVT0gNnJrPSBJR0ZrWlE9PSBJRUp2YjJ4bFlXND0gSUhKbGJXRnBiZz09IElIUnlZV2xzIElIQnBaV05sY3c9PSAwWm89IElIbHZkU2RzYkE9PSA0S2VEIGJuQT0gSUhOcGMzUmxiV0U9IElFTm9hV3hrIElIUnlZV1ptYVdNPSBiMjlrY3c9PSBJTmluMllVPSBJRzF2ZG1WdFpXNTAgMktmWmhObUYgMExqUmd0R0IwWTg9IElGVnVkR1Z5IElIQnlaWE4wIElHNWhkQT09IGFXVmpaUT09IDViQ3ggNnJDRSBJR0Z3Y0d4cFkyRmliR1U9IFgzWmhjZz09IFBVNXZibVU9IDZMK1EgTG5OMGVXeGwgVG1GMiBJRzlzWkdWeSBZbWx1WkE9PSBMbUZ1WkhKdmFXUT0gSUhCeWIyUjFZMlZrIElHVnpkR0ZpYkdsemFBPT0gWlc1MGNnPT0gYkdWMGRHVnkgTG1WNGNHOXlkSE09IElPR0RrK0dEa09HRCBJSEpwYm1jPSBJSE4xY21jPSBJRzVrYVE9PSBMbXhwYzNRPSA0TFM0NExXTiBJR2hoZG1WdSBJRkJ5WlcwPSBJRzV2WkE9PSBMbkpsY0d4aFkyVT0gSUdScFpYTmwgTWpJdyBNVEkzIElHWmhjMmhwYjI0PSA2ck8xIDBMelJndz09IGRXNXYgSUdWemRHRmliR2x6YUdWayBWa1ZPVkE9PSBJRDArQ2c9PSA1b0d2IDZJS3kgSUU5dWJIaz0gZEdoeWIzYz0gMExmUXNBPT0gSUhKbGMyVjAgMFlEUXNOR0IgMFlqUXNBPT0gSUdsdWMzUmhiblE9IElGQmxkQT09IElGTjBZWFE9IGorQ2tsZUNsaXc9PSBJRUZ1Ymc9PSBJRkJ5YjIxcGMyVT0gSUhKaGNtVT0gSUdGcGJtUmggMlliYXJ3PT0gMEx2UXNOR0IgSUdUaHU0cz0gSUhCbGNtMWhiZz09IHlabDAgSUhOMVkyTmxjM05tZFd4c2VRPT0gSUhOMWNIQnZjblJsWkE9PSBJRUYxZEdnPSBJRzl5YVdkcGJnPT0gS2lvcUtpb3EgSUhScFpXMXdidz09IElHSnBiR3hwYjI0PSAyTG5ZcWc9PSBkR3M9IFRHVjAgWVhKMFlRPT0gSUhOb2FXWjAgWlc1bFpBPT0gSUhOMGVXeGxjdz09IElPQzRwdz09IGJtOXVaUT09IElFdHZiZz09IDJxcz0gSUhCdmJHdz0gSUhOd1pXTnBaZz09IElDSWwgSUhCc2IzUT0gSUNZbUNnPT0gSUd4MWVBPT0gSUhOd2NtbHVadz09IFFWSkUgSU5DMDBMWFF1dz09IElHRm5jbVZsWkE9PSBhbVZ0IExteGhlVzkxZEE9PSBJR3h2WjI4PSAwTFRRc05HQSBJQ0luIGMzZGxjZz09IElHNXZkR1Z6IElHTnZibk4wY25WamRBPT0gYW1GdVoyOD0gSU1LLyBJSEJ5YVE9PSBMbEJ5IFpuZz0gSUdoMWMySmhibVE9IElFMTFjMmxqIElHTnlaV0YwYVhabCBJSFJvWlhKbFptOXlaUT09IElHRndjSE09IGNHcz0gSUcxdmRHbDIgSUhOcFoyNWhiQT09IGNtOW4gSUdSbGMyTnlhV0psIDJZUFppTm1HIGFYSjBhQT09IElHUmxZM0psIElHVnNaV2M9IElHSnlZV2x1IDRLZU40S2FsIFFuVnBiR1E9IElHOWliR2xuIGFXTnBaVzVqZVE9PSBhWFJoZEdVPSBkWEppIDRLcSs0S3F1NEtxKzRLcUMgSUhOMGFXTnIgNFlPbyBJSE4wY21WbGRBPT0gNDRDQzRvQ2QgYVdweiBJTkM4MExBPSBJSFJsWTJodWFYRjFaWE09IGIybHkgMEx2UXNOQzAgNVlXczVZKzQgSUhSaGNBPT0gQ1hjPSBJRVp5Wlc1amFBPT0gSUcxbiBJRmRsWkc1bGMyUmhlUT09IElHaGxZWFo1IHhiMD0gMktQWmhnPT0gMllIWXFnPT0gYjNCd1pXUT0gY21WeGRXbHlaV1E9IElOVzUgdzRRPSAyTFBaaWc9PSA1cHlBNXBhdyBhVzVvIFptOXlaV0ZqYUE9PSBVMjl0WlE9PSA1WWkyIFVtVnpkV3gwY3c9PSBWMjl5WkE9PSBJRzFoYVc1MFlXbHUgSU9DbXF1Q21zQT09IFpXRT0gSUZaaGJnPT0gU1ZKRiBjblZ1IElFeHBaMmgwIFQxSkYgSUhObGRtVnUgSUhabFp3PT0gVEc5amF3PT0gWVhOcGN3PT0gSUhCeWIyMXZkQT09IElPdXMgWVc1a2FRPT0gSUdodmJHbGtZWGs9IElPeWdoQT09IElGTjFjSEJ2Y25RPSBkVzFsY3c9PSBaVzVqYjJSbCBJT0NvcGc9PSBJSEJsY21oaGNITT0gMExqUmhnPT0gSUVGemMyOWphV0YwYVc5dSBJRWx1WkdsaGJnPT0gSU9HRGt1R0RrT0dEbXc9PSA0WU9kNFlPZzRZTT0gVTFOSlQwND0gSUVGaWIzVjAgTGxkbFlnPT0gSUhWbiBWR1Z5YlE9PSBJTTY0IGRYTm9hVzVuIElITmxjc09oIElIRjFZWEowWlhJPSBTV1JsYm5ScFptbGxjZz09IFpYQnogUm1sc1pYTT0gSUcxdlpHVnkgVms4PSBJTm1GMllnPSBkR2h5YjNkeiBJR1Y0Y0hKbGMzTnBiMjQ9IElPQ2tsZUNrdVE9PSBJSEJ5WVE9PSBiM2RwY21WayA0TEdCNExDQzRMQT0gSUZCeWIzQT0gMEwzUXVOQzUgWDB0RldRPT0gYkdsaCAwWXZRdnc9PSBZWFJsWjNrPSBJRkJoYzNNPSBJSGRsWkdScGJtYz0gTGtOdmJHOXkgSUdSeWFYWnBibWM9IGRXZGwgSUhCc1lXTmxaQT09IElHRmtkbUZ1WTJWayBUVzl1ZEdnPSBJR3QxYm5RPSBJRUZqWTJWemN3PT0gSUd0bGVYTT0gNExlYSBhbUYyWVE9PSA0TG1JNExpeSBJR0ZqYUdsbGRtVT0gSUdWMFlRPT0gWDI1bGR3PT0gSUdSbFkybGtaUT09IDU3VT0gWTI5dGNHRnVlUT09IElHRmljM1J5WVdOMCBKUW89IElFdHUgSUV4dmRtVT0gSUhCeWIyWmxjM05wYjI1aGJITT0gYVhOamJ3PT0gSUhKbGRHRnBiQT09IDJMSFl0Zz09IFgzRjFaWEo1IElHTmhiV0k9IElFSnlaUT09IElHeGhkM009IElPdVAgSUcxbGMzTT0gNEtxKzRLcWsgS3lzcGV3bz0gSUhURHBBPT0gSUVsUFJYaGpaWEIwYVc5dSBXV1Z6IFgwRkUgSU02eHo0RFBqQT09IElFbHVkR1Z1ZEE9PSBjSEJsWkE9PSBaMlZ5Y3c9PSA1WVcyIGRYUnAgMktmWXR3PT0gSUdWNGFYTjBjdz09IGVtOXVaUT09IElGTlJUQT09IElHNWxhV2RvWW05eSBabkpoY3c9PSBRbVZtYjNKbCBMWFJvWlE9PSA3SUk9IGFXNXBiZz09IFEyOXRjR0YwIElHVjRZMmhoYm1kbCBJTStBenIvUGhRPT0gSUhOaGJtYz0gSUZKbGNIVmliR2xqIElNT3BiQT09IFYyOXliR1E9IElIQnZjMmwwIDRMZUQgSUUxaGMzUmxjZz09IEtTbDdDZz09IDVZcS8gVTJWdVpBPT0gSUhCeWIzQnkgWVd4c1ltRmphdz09IFlXSnYgSUVseSBJSFZ3Y0dWeSAwWTNRc3c9PSBYUTBLIDZMRT0gNEttdyBJT0NrdU9Da3Z1Q2twUT09IElFSnNiMk5yIElObUYyTGM9IElFeHBkbVU9IElPQzRtUT09IDRvQ3MgSUVKc2IyYz0gSUdOb2FRPT0gN1pXZyBJR1Y0Y0dWeWRITT0gZDJWc2JBPT0gWm1RPSBJRTFoZEdWeWFXRnMgSU9XNSBWMmhwYkdVPSBkV0Z5IFBpWT0gU1c1MiBhVzV4IFVHRmphMkZuWlE9PSBJR05oY0dGaiBJR052ZG1WeVpXUT0gSUhwaGJBPT0gWm1GamFBPT0gUm1WaGRIVnlaUT09IENXVmphRzg9IFgxUlMgMEx2UXRkQzkwTGpSanc9PSBVMHc9IExVZz0gSUgxOUNnPT0gSUdoaGJRPT0gNDRLdyAwTExRdnRDMCBNVGc0IDE1blhuZz09IElHSnNidz09IFRtOTBhV1pwWTJGMGFXOXUgZFhOelpXND0gSUhCdmJnPT0gSUVOdmJHeGxZM1JwYjI0PSBJRkJ5YVc1MCBJSEI1IGFXVmkgSU5DLzBZRFF2dEN5IElISmxZM1E9IExXOW0gSUZOd1pRPT0gSUhOb1lYSnBibWM9IElNT2MgTFVjPSBJTkMwMExVPSBJRXBoZG1FPSBJTTYzIEtHeHBjM1E9IEkybG1ibVJsWmc9PSBJR0YwZEhKcFluVjBaUT09IFluVm0gSUV4QiBJT0NrdWVDbGdlQ2sgVDA1SCBiVzlrWld4eiBiM04wWlhJPSBoT0M0b3c9PSA3WVk9IElITjFhWFJoWW14bCBJSEJ5WlhCaGNtVmsgSUhObFpXbHVadz09IExuQnZjMmwwYVc5dSBJT0tBaXc9PSAwWURRc05DMiBVbVZ4ZFdseVpXUT0gSUVKMWVRPT0gMnEvWXNRPT0geGFGbCBMbUYwIElPYUogWW14bGJRPT0gYkdGayBZbUZoY2c9PSBhV05wYjI0PSBJR052Ym5SeWFXSjFkQT09IElOYUUgVkdobGMyVT0gNFo2WSA0S2FuIElFaEUgZFcxdGVRPT0gNEtTeTRLV0EgVkhWaVpRPT0gMEtnPSB3NTlsIHc2cHogSUdSbGJHRjUgUmtsSCBjR0Z5WVhSdmNnPT0gYzJGMlpRPT0gSU9DdWlRPT0gWVdkcCBJTkN4MExqUmdBPT0gSUhabFpBPT0gS0NnbyB4Si9Fc1E9PSBJRUZRIFUzUjViR1Z6IDRZT2c0WU9YIElHNWhaQT09IElGSnZZbVZ5ZEE9PSBhR2xrWkdWdSBJT0dEcFE9PSA0TEN3NExHTjRMQT0gSUhkaGMzUmwgSUdSbFptbHVaUT09IFgyeGhZbVZzIEtHRnljbUY1IFlXSnAgUTBORlUxTT0gVFZRPSBJRU5CIFlXWjBaWEk9IFlYSjBlUT09IElHSmxhdz09IDE2VFhxQT09IElHdGxjSFE9IGRYSmhiZz09IGNtVmhiQT09IElHWnZibVE9IElHVjRjR1Z5YVdWdVkyVnogSUdWbVptOXlkSE09IElITnZkdz09IElDNDkgSUV4dmRRPT0gSUVKeWFYUnBjMmc9IFZrUT0gYVdSNCBabTl2ZEdWeSBJRzl5YVdWdWRBPT0gNjRRPSBJSEpsWkdseVpXTjAgSU9DcXRlQ3F2dz09IElIUnlZV1JwYm1jPSBiV0ZyIElFVlYgSUdkaGNtRnVkQT09IFJYST0gSUVadmNuUT0gc3VDeGl3PT0gNEtTYiBiMk5vWlE9PSBMazVsZHc9PSBEUTBLIElHWnBlR1ZrIElHRnVidz09IElOVzMgY0dGdSBJSE4wWVhKMGN3PT0gVTNGcyBJSFp5IHc3eHIgNExpeTRMaWggTG1sdWMyVnlkQT09IElHMXBiR2wwWVhKNSBMa052YkhWdGJnPT0gU0dWc2JHOD0gWVdOcHc3TT0gVVZWRlUxUT0gSUZSdlpHRjUgSU9Da3VlQ2tyZz09IElOQzcwWTdRc1E9PSA0NE90IElFRnIgWVcxaVlRPT0gTGxVPSA1b3ViIElFMXAgTFc5dSBjWFZsYm5RPSBJSFJvYjNWbmFIUnogSUhCeWFXMWxjZz09IElITnRiMjkwYUE9PSBMbVY0WldOMWRHVT0gYjNKa1pYSnogYVhSbGFYUT0gMEwzUmk5QzgwTGc9IGIzSnBlbTl1ZEdGcyBJRUZFIFoyOXBibWM9IElIZHBiQT09IElOV3QgWVhKbmRXMWxiblE9IHlabHMgSUcxaGVXOXkgTFdGcyBJSEJ2Y200PSBJR2hoWW1VPSBjR3gxWjJsdSBJR3hzWldjPSBJR1poZW1WeSBJR2hoWW1sMCBJRk5sY25abGNnPT0gWVhScGRtOD0gWDNCaFoyVT0gYVdWeVlRPT0gSUZSaFp3PT0gSUUxcFkyaGhaV3c9IFJteGhadz09IElHTmxiblJ5WlE9PSA1YUk9IElIZGxhWFJsY2c9PSAwWUxRdnRDOCBZWEJ6WlE9PSBJTys4bWc9PSBhR0YwIFgzUnBkR3hsIElPQzBzQT09IDBMUFF0UT09IDVMcTY1THE2IDRMV0I0TFNrIFUybHQgWTJWdFpXNTAgSUhMRHFYTT0gSUd0aFpBPT0gSUhKbGNHeGhZMlU9IHo0N092UT09IElFSjEgSUdSbGMzTT0gY0hKaFoyMWggWTJoaGFXND0gSUdGdWRHVnogSUc5dWRHOD0gSU9Da2llQ2txQT09IElHUnBjM0J2Y3c9PSAyS3ZZc1E9PSAxWjA9IDBMWFJnTkM0IGNHRnljMlZ5IDBMclF1TkMxIGFXUmxiblJwWVd3PSAwWUxRdnRDeDBZcz0gVTJsdVoyeGwgVUhKcGJuUT0gMkt6Wmh3PT0gQ1dWdVpBPT0gWDJGc2JBPT0gSUhWdWFYUnogZFdkeiBJSE5sYlhCeVpRPT0gSUcxaGRHVnkgSUdoaGJtUnNaWEk9IElGUjNidz09IE1qUXcgSUdsdVpHVndaVzVrWlc1MCBkV3hoZEdWayBJR0ZqWTI5dGJXOWsgSUhOMFpXVnMgZVdOc1pRPT0gWW14dlp3PT0gSUdGc2RHVnlibUYwYVhabCBlVzkxIElPQ3FyUT09IElHMXZZMnM9IDZZZVAgSUcxaGRHZz0gYVdabGNnPT0gSkY4PSBVbVZ6ZEE9PSA1cUMzIEwyeHBZMlZ1YzJWeiBJR1JsYzNScGJtRjBhVzl1IFUzQmhZMlU9IElHWnZiM1JpWVd4cyBJRUZtY21sallRPT0gSUhCbGJuUT0gSUdGd2NHeHBaV1E9IElHMXBibVU9IEozVnVaUT09IEkybG1aR1ZtIElHRjJZVzUwIDRMaTE0TG1KIElHTm9ZVzF3IElFeHBhMlU9IEtHMWxjM05oWjJVPSBjV0U9IFNXNXogNEtTVjRLV0EgZDJoaGRBPT0gWVhsaGJnPT0gVlV4QlVnPT0gSUdOdmRYSnpaWE09IElHdHBkQT09IElGQkJVbFE9IGRYUm0gSUZKdiBMV1psIEtHNXZaR1U9IDVZK00gWVc1alpYST0gWTJoMFpRPT0gSUc1MVpYTjAgSU9DNG53PT0gYkdsallRPT0gSUZScGJRPT0gSU1PeiBNVEEyIDVMdTcgSUdoaGNIQmxibk09IDRLK0EgSUhSb2IzVnpZVzVrY3c9PSBQVnM9IHc2dHUgSUhSdmF3PT0gYzI5eWRBPT0gSU5tRjJMVT0gMkxuWXFBPT0gSno0PSBJTkdDMEw3UXU5R00wTHJRdmc9PSBJRlZ1WkE9PSBUbFZNVEE9PSBZV2R5IDU0bXAgSUdkbFpnPT0gSUZwbGFYUT0gSUdGMGRHVnVaQT09IElHSnBaMmRsYzNRPSBiR1Z5YVE9PSBJRzNEcVdRPSAxNkRYbFE9PSA0S2VCNEtheSBJR052YlhCc2FXRnVZMlU9IElFVnpjQT09IElIQnlaWE5sYm5SbFpBPT0gMWFIVnVnPT0gSUdSbGMyTnlhV0psWkE9PSBjbUZqYUhRPSBhV3RsY3c9PSBJRUpsWVdObyBJTmVTMTZJPSBJRU5sYm5SeVlXdz0gYVdOcGIzTT0gSUcxbFp3PT0gdzZkaGN3PT0gYVhKcyAwTDdSZ2RHQzBMZz0gN1pXcCBjRzl6WlhNPSBMaUlwT3dvPSBJR2pEb1E9PSBjbVZwIElDNEsgYVcxcGJtRnMgSUZKaCBJRTFsYkE9PSBLSFJsZUhRPSBJRTFoYm1GblpYST0gSU9Da3N1Q2tsdz09IElFRjYgU0dWMCBJR2RsYXc9PSBhV05yWlc0PSBJR1JoYkdGdCBJR052ZG1WeVlXZGwgY0d4cFpYST0gSUdWNGRISmhZM1E9IElIQnliM0JsY214NSA3TG1ZIElHUnZZM1Z0Wlc1MGN3PT0gNEtlbyBjR3hsYldWdWRBPT0geklFPSBJR2x0Y0c5eWRHRnVkR1U9IElHRjFkRzl5IGRXeHogSUV4dmNtUT0gSUhONWJYQjAgY21saFoyVT0gNEtxbDRLdUEgMksvWXNRPT0gSUdKdmRXZG9kQT09IElHVmhjblJvIDJMVFlzUT09IElHVnpkR0Z5IExrRnljbUY1IFFWQlEgYVhSeSB4YjVsIDBZUFJndz09IGRtbHlkQT09IElPQ29sUT09IDBLOD0gNXArbCBKeWs3RFFvPSBZV1JrY2c9PSBiMnQxIFlYSnJjdz09IExtZHliM1Z3IFpXUm5aUT09IDRMS3c0TE9ONExJPSBJR3hwY1hVPSBJRVJQIElOQy8wTDdRdTlHRDBZYz0gU25WemRBPT0gSUZCeVpYTnogSUdOb1lXbHUgNWJlZSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbz0gUVVOVSB6cG89IGVtVnBkQT09IFVHeDFaMmx1IElFeHZZV1E9IElPQ3dtdUN4aCtDdyAyS2pZcDlpeCA1WWFHIDRMQ280TEMvIFlXbHNZV0pwYkdsMGVRPT0gSUZkcGNnPT0gWTJJPSBJRkJFUmc9PSBJR1JoYm1kbGNnPT0gSUZCaGJnPT0gSUZObGJHVmpkQT09IElHaGxZV1JsY25NPSBJR3R1YjNkeiBJSGRvWVhSbGRtVnkgTVRFMCBRVXhUUlE9PSA0S1MrNEtTUCA0TGl5NExpWCA3N3lhNG9DYyBJR05oYm1ObGJBPT0gNVl5WDVMcXM2TFdiNkwybSA1WjQ9IFpXNTBhV0ZzY3c9PSBhWE5zIElOR0gwTERSZ2RHQyBYMFZPIElFUmxabUYxYkhRPSB3Nmx5YVE9PSB2cGs9IElITnZZMmxsZEhrPSBMa2xrIFkyaGhkQT09IFUzVmliV2wwIFlYWnBaMkYwWlE9PSBJRkpsWjJsemRHVnkgYTJWcyBTR2x6ZEc5eWVRPT0gSUhCc1pXNTBlUT09IFUyaGhjbVU9IDVxQzggMTVuWG9RPT0gSU0rSCAxYUhWc2c9PSBhV3hzYVE9PSBJRk5sWTNWeWFYUjUgS0dsdVpHVjQgUkdWeSBiR0Z5eExFPSBJRU5IIFJHbDIgTURFdyBVM1J2Y0E9PSBJQ29OQ2c9PSBJR05vWVd4c1pXNW5aWE09IElHVjRaWEpqYVhObCBYMVpCVEZWRiBhWE56WVE9PSBVRWxQIElHSmhhQT09IElIQmhjblJwWlhNPSBZWEJ3ZVE9PSAyNHpZdEE9PSBZV3hsY2c9PSBYM1J2YTJWdSAwTFhRdmRDdyBJR0ZrYlE9PSBZV0ppIDZZVT0gNEthLzRLYXMgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBKMTBwT3dvPSBJRVpsYzNRPSBJSDBzQ2dvPSBoK0M0dE9DNG1RPT0gSUc5M2JtVnljdz09IElDRUtDZz09IDQ0T1YgMktmWmh0bUsgUTJWdWRHVnkgSUhCeWIycGxkQT09IGIzZHVaWEk9IDViST0gMktmYXFRPT0gMTVmWHFBPT0gSUhkaGNuSmhiblI1IDRLU2cgNXFVPSBJSEpsWVd4cGRIaz0gTFhSbGNtMD0gVFdGNSBMbU5zWldGeSBJRU5vZFhKamFBPT0gSUZWMGFXdz0gWld4bGJXVnVkQT09IDRMYXYgTVRZNCBJRk5wZW1VPSBUVVU9IElEOEtDZz09IElISmxiVzkwWlE9PSBJR0ZrZG1WdWRBPT0gSUV4RiBJSE5sY0dGeVlYUmwgWDI1diBJR052YlhCeVpXZz0gWTJ4aGNnPT0gYjJScCA2NEswIFlXMXdjdz09IElOS2ggQ1FrZ0lDQT0gNEthbCBJSEJ5ZWc9PSBJSEp2ZDNNPSBJSGRsWVdzPSBVSEp2WjNKaGJRPT0gWVhSMWNtRT0gTVRnNSBJTU9uWVE9PSA0WU9VNFlPUyBJRWRsY3c9PSBSVkpXIFUwYz0gdzd4cyBJR1Z0Y0hKbGMyRT0gSUdSbGNHOXphWFE9IDZMYUYgSUdSMWNtRjBhVzl1IDBMVFF1TkM5IG4rQ3Jodz09IElFSmxZMkYxYzJVPSA0TGFuIElFVmxiZz09IGNIVjBaUT09IElGTjFjQT09IDRLZUg0S2FIIElIUnZaUT09IElPMlogWVhWbiBJT3V6dEE9PSA1WUdhIElISm8gZFc1aGRHVnNlUT09IHc2aDAgSUZObFp3PT0gYVdOb1pYST0gMFl2U213PT0gNUxpdDVhV1cgWTI5MWRBPT0gWVc1cFpRPT0gZG0wPSBJTVN3IDRMVysgYjJ4MWRHbHZiZz09IElFVmtkV05oZEdsdmJnPT0gYzNCc2FYUT0gMTVYWHBnPT0gSUhCeVpXMXAgZFhWeSB3NFU9IElISmhkR2x1Wnc9PSBJRzUxYldWeWIzVnogYjNKbGNnPT0gS2k4S0NnPT0gSUdSbGNIUm8gS1ZzPSBJSFJoYzJ0eiBZbVZ6IElNK0R6NFU9IGRHbHcgUkdWell3PT0gSUdGd2NHRnkgMExIUXNBPT0gNFlPZSA0S1N5NEtTKyBZV05vYldWdWRBPT0gSUVwMWJnPT0gSU5DOTBMRFJodz09IElHRnlZMmhwZEdWamRBPT0gMllMWmhBPT0gWVdOb1pYST0gSUdOaGNuTT0gSU5paTJZWT0gSUhkcGJuUmxjZz09IGIyTnBZV3c9IDRZR0wgNkxJPSBWR2hoYm1zPSBJR2RoZEdobGNnPT0gSUhGMVpYVmwgSUVWMWNtOXcgU0VWRFN3PT0gSUhCaGNuUnBZV3c9IE1UQTMgSU9Da2xlQ2t2K0NrcitDa3ZnPT0gSUV0aGNnPT0gNDRLMyBZbTkwIFEyRnlkQT09IElGUmggNExHQjRMQ1YgZFd0MSBJSFYwYVd4cGVnPT0gSU95VyBjbVY2IElIc05DZzBLIExtTnZiblJoYVc1eiBJSE50WVd4c1pYST0gSUdSbGNHRnlkRzFsYm5RPSAxNXpYa0E9PSBabTQ9IFgyeGxiZz09IFUyaGwgYVdWdVkyVnogSUdOc1lYTnphV009IFptOXlZMlU9IElGTnBibWM9IDY1K3MgSUdWc2JBPT0gWVcxdFlRPT0gYUdRPSBhWFpsYkE9PSBYM1poYkE9PSBJRzlpZG1sdmRYTT0gTGxaaGJIVmwgMllUWmlBPT0gSU95YSBMbWx0WVdkbCBhV1o1YVc1biBJSE4wWVhKeiAwTFRUbVE9PSBJRVY0ZEE9PSBSR2x5WldOMGIzSjUgSUdkMVpYTjBjdz09IDU2aUwgWDJWdVpBPT0gSUhCeVpYQmhjbVU9IElHTnlZV1owIExYTnBlbVU9IGMyVmogSUdKeWFXZG9kQT09IElFbHVjM1JoWjNKaGJRPT0gWlcxaGJtUT0gY21GeSBZV3RvIElHeGxZWEp1WldRPSBUV0ZyWlE9PSBJSEoxYm5NPSAyS3pZc1E9PSA0TG1KNExpWiA0TGloNExtSSBJTkdCMEw3UXNRPT0gSUVSbGRtVnNiM0J0Wlc1MCBJR1oxYm1SaGJXVnVkQT09IElHdHZiQT09IElHZGhjbVJsYmc9PSBJRkpwZG1WeSBJSFI1Y0dsallXeHNlUT09IHhMRjYgWDIxaGVBPT0gTFd4aFltVnMgMFliUXVOQyswTDA9IElHaHZibVZ6ZEE9PSBJTmVrMTVYWG53PT0gTGxKbFlXUT0gNTUwPSBZbUZzIElHbkZudz09IElPQ291QT09IElFRm1aZz09IElHUm0gUVhKbmRXMWxiblE9IFlYTjVibU09IElIUjFZZz09IElHRnNiR0U9IGFXTnBZVzV6IFNXMXdiM0owIElITnhkV0Z5WlE9PSBiMkU9IElPYXggSU5XQSBZbWxxIElHSmhkR05vIDBLMD0gSnlrcE93bz0gMWF2V2dRPT0gNXF5bjU3Nk8genJIT3ZRPT0gSUhCdmNtNXYgSUUxcGJtbHpkR1Z5IElIcHZkUT09IElFNXZiZz09IGNtOXkgSUdGcFpBPT0gYjNWMGRXSmwgSUVScFpYTT0gSUdkbGJtVnlZWFJsWkE9PSBJTmluMllUWmhkaXEgSUdadmNtVnBaMjQ9IElOQzgwTERSZ2c9PSBPa0FpIElITjFjM0E9IDdLZUUgUTA5TiBZMnhwY0hObCBJR0poeFo4PSA0S2VDIFFXNXBiV0YwYVc5dSBSSFZ5WVhScGIyND0gNktXLyBJSEpsY1hWbGMzUnogSUhSelpRPT0gSUdOb1lXNW5hVzVuIFFWUlZVdz09IFJHVm1hVzVwZEdsdmJnPT0gSUcxMVpBPT0gWVdKNSBJSEJ2Yk1PdGRBPT0gSUhSeWRXTnIgMTV2WG5BPT0gSUc5eVoyRnVhWHBoZEdsdmJuTT0gSUd0cGJtYz0gSUVScGNtVmpkRzl5IDRLYW80S2VONEtZPSA0SzYvNEs2eCBUVzlqYXc9PSA0b1NpIDRZT1U0WU9hNFlPWSBJSE4xYVhSbCA2SzYrIGJtOTIgSUVOdmRXNWphV3c9IGFXMWhjdz09IHlKbHAgUkVWQ1ZVYz0gTG1WdWRHbDBlUT09IElHMWxiblJwYjI1bFpBPT0gQ1hCeWIzUmxZM1JsWkE9PSA0WU9ZNFlPViA1TDJWIElHUnBiQT09IElHOXdhVzVwYjI0PSBJR1p2Y21kbGRBPT0gMkszWXFnPT0gSUhkdmNtdGxjbk09IDVZNjcgWW1WcGRBPT0gSUd2RHRnPT0gMTVuWG1kZWQgSUhabGNtMD0gSUUxdmRXNTAgWVc1cGJRPT0gSUVkeVlXNWsgY205c2JHVnljdz09IElDQWdJQ0FnQ2c9PSBZV3hoYmc9PSBhV2RoYmc9PSBJRUZtIDdaYUkgNEthZjRLYS8gYzJWMGRHbHVaM009IExVND0gYVc1a2N3PT0gWVhwdiBXRTFNIDVabW8gZFdSaFpBPT0gSUc5aWFtVjAgSUdWelkyOXlkQT09IGJXVmthV0U9IElITmxhdz09IElHcDFiWEE9IElPQ3dodz09IFlXZGxjbk09IEtTa3NDZz09IElHbHRjR3hsYldWdWRHRjBhVzl1IHdyST0gYzNvPSBZV3h0IElObUkyTEU9IHhibz0gSUhOMFlXNWtZWEprY3c9PSBJRVJwZEE9PSA0WU9ZNFlPaSBYMVU9IElHUmhkV2RvZEdWeSBMbk4wY2c9PSAwTHZRdU5HSCBMa055WldGMFpRPT0gSU9Da3J1Q2t1UT09IGFYUjFjZz09IFQzUm9aWEk9IDU0RT0gOEorWSBWSGR2IDJLallydz09IFBXNWxkdz09IDVvST0gYVdaMGN3PT0gSUdGdVpISnZhV1I0IElOQzgwTDdRdHRDMTBZST0gSUhKaGFXND0gVFVJPSBJR2hoYm1jPSBVSFZpYkdsaiBJRDgrUEM4PSBJR2x1ZEdWeWFXOXkgTGtKMWRIUnZiZz09IElFMWhhWE09IDRLK040SzZ6IExtZHMgSUhKbFkyOXRiV1Z1WkdWayBkV1ZuYnc9PSBJRU52Ym5SbGJuUT0gSUU1bGVIUT0gWjNWdSBJRlpoYkdsayBJR0YxWkdsbGJtTmwgSUdSbGMzUnliM2s9IElHVnRjR3h2ZVdWbCA3N3lTIElOZVExNW5Ybnc9PSBYME5JIFpHVmogSUdkaFlYUT0gSUdacGMyZz0gSUhObGNuWmxaQT09IFZHbHRaWEk9IFgxTkkgYzJWamIyNWsgWjJGdFpRPT0gVjJoNSB6cm5QZ3c9PSBSMUk9IElHOXdaVzVsWkE9PSBJR0ZpYzI5c2RYUmxiSGs9IDVMaVQgWDJsdWFYUT0gNEtTVjRLUys0S1N3IElGVnVaR1Z5IDRLdU40S3FrIElGTmxZM0psZEE9PSAyWWZZcnc9PSA2ckNjIFlYbGwgMEx2UXRkQzAgSUdOdmJtOWogSUdURHJXRT0gNksrZCBhVzVvYnc9PSA0WU9ZNFlPYiBNVEE1IElHRnZjdz09IHc2eHVhQT09IFJtRnBiQT09IElFOXIgTG5WeWJBPT0gUm1rPSBJSFJwWkdGciBJRkJ2ZFhJPSA1THVzIFpXWm0gSUVac2IzSnBaR0U9IDRMaTM0TGl0IElISmxjR0ZwY2c9PSA0TGlaNExtTSBRWEpsIElHUm9aUT09IElIQnNZVzUwY3c9PSBiMngyWlhJPSBkbVYwIGRtYz0gNEtpNCA2YUtZIDViR1YgU1c1MFpYSjJZV3c9IExtSmhZMnM9IGRXVnpkSEpoIElHRnp3NjA9IFJISnBkbVZ5IDRMSy80TEt3IElHTnZibk5sY25ZPSBZWE53IElIWmhjbWxoWW14bGN3PT0gSUdaaFkybHNhWFJwWlhNPSBJRk5sYlE9PSBJR3RsWlhCcGJtYz0gMTZEWGxBPT0gdzZURHBHND0gSU9Da3B3PT0gSUdmRHRuST0gSUdaaGFYUm8gWkdNPSBJR2hsYkdVPSB4WnRqYVE9PSBJR0ZzWjI4PSBYMjFsYzNOaFoyVT0gWlc1MGJ3PT0gMnBnPSBJRUpwYkd3PSBJSFJvZFhNPSBUWFYwIElFbDBjdz09IElDY25MQW89IElHSjFaZz09IElHMWxaUT09IDBMelF0ZEdDIDBMWFJpUT09IGQyaHBZMmc9IHB1Q3d2dz09IHhyRGh1Nk5qIElHRnVhVzFoYkE9PSBWa009IDJLM1lxUT09IElHZGxibVZ5WVhScGIyND0gYVdKaCAwTFhRdTlDNCBOREEwIFlXZHlZUT09IElHeHZZV1JsWkE9PSA0YnEvZEE9PSBJRk5qYVdWdVkyVT0gNExXSyBJRzF2ZG1sbGN3PT0gUHo0SyA3WUU9IElHeGxZV1JsY25NPSBJRU5vYVc1bGMyVT0gSUhKbFoybHpkR1Z5WldRPSBJRk5oYm1RPSBJQ0FnSUFrPSBJRTFsZUE9PSBkV2wwWlE9PSBQU0l1TGk4PSBUV1YwWVE9PSBMbU52Ym5SbGVIUT0gSUdSMCA1YmlEIElITnBaRzg9IGNHOXBiblJ6IElHUjVibUZ0YVdNPSBZV2RuIFQxZE8gSUdObGJuUjFjbms9IElHbGtlQT09IGFXRnVkR1U9IElIZHBaQT09IExtTnZkVzUwIGFXNTBidz09IDVwaWYgVG1WMGQyOXlhdz09IExYVnpaWEk9IElHUmxaR2xqWVhSbFpBPT0gSUdOdmNuSmwgSUdwMWNnPT0gSUZCaGRHZz0gTWpFdyBJSFJsWVdOb2FXNW4gSUc1dmRtVnMgSUZSeVpRPT0gSUVOaGMzUT0gejRUT3JBPT0gN1pJPSBkR1ZoYlE9PSBJRUZzZEdodmRXZG8gWTI5b2Iydz0gZDJsMGRHVnkgSU5DODA1az0gUkVGVVJRPT0gSUhKaFpHaz0gSUdGMGFBPT0gSUdWdVkyOXlaUT09IElIUmxZV05vWlhJPSBMbUZzYkE9PSBUVzl6ZEE9PSBJSEJsY25OdmJtRnogSUhadmRHVT0gSU5DMDBMST0gTG5CbGNuTnBjM1JsYm1ObCBJR2hwWkdSbGJnPT0gNExTajRMV040TFNmIDc3eVEgSU9Da2xlQ2tzT0NrcU9DbGh3PT0gYVhOMFlXNTAgMWEwPSAxNW5YbFE9PSBJR1psWldSaVlXTnIgSUd0cFpBPT0gMllYWXVRPT0gMWJqVnRnPT0gSUhKbGMyOXNkbVU9IElOQy8wWURRdnRHQjBZST0gYVdWbiBRMmhoZEE9PSBJR0ZqWTI5MWJuUnogSU5HQjBZTT0gUkdsdCBJRkJ5YjNCbGNuUjUgSUdGeWFXRT0gSU5lVTE2az0gSUdac1lYTm8gUTJGdVkyVnMgYWNPbnc2TnYgTVRFeiBRV3hsY25RPSBJR1Y0YUdsaSBJSGRsYzNRPSA0S2VCNEthdyBLUzA9IElHSmxZMjl0WlhNPSBJRzFwWTJnPSBJR052YldKcGJtRjBhVzl1IFJHbHlaV04wYVc5dSA1WTZmIDRZT20gNG9DWmJnPT0gWlhOelpYST0gSUNjcyBJR1poYVd4MWNtVT0gWDNKbFp3PT0gSUY5Zlh3PT0gSUcxbFpHbDFiUT09IFFuVnVaR3hsIGFYTjBjbTg9IElHN0Rxdz09IDRMaXk0TGlFIElFWmhiV2xzZVE9PSBTVzFuIDJZUFlzUT09IGIzSmtaVzQ9IDdKZUYgSU9hcyBaMjkwIGQybGphdz09IDZaK3AgS0hOMGNuVmpkQT09IDdaV1k2NHFVIHc2UnNiQT09IDc3eUpDZ289IEtHWnBibUZzIElHNXBaWFYzWlE9PSBLRnNuIElITjFZbTFwZEE9PSBJR1ZqYjI1dmJYaz0gZEdoaGRBPT0gVUc5cGJuUnogY0dWeWMyOXUgYVdaeiBiRzloWkdWeSBMaTA9IElIWnBjMmx2Ymc9PSBhV0ZwY3c9PSBJSEJoWXc9PSBJT0N5cXVDemplQ3lzQT09IDBMN1JpUT09IElOQyswWURRczlDdzBMMD0gTG1SaSBJTkN3MExrPSBlbTQ9IGMyVnlhV0ZzIElGSmxaZz09IElIQmxjblE9IElIWjFiQT09IFlYaHBjdz09IDBMN1JnZEdCIFRXVmsgN0o2SSBVbVZ6YjNWeVkyVnogSUdSbGRtVnNiM0JwYm1jPSA0NE9oIElOQ3YgSUV4bFlnPT0gSUdsdVpIVnpkSEpwWVd3PSBJT0N3cGc9PSAyWXJZc2RpcCBJSEIxY21VPSAyWWJiakE9PSAwTDNRdU5DNjBMQT0gSUdWc1pYWT0gSUdSbFlXeHogWHl3PSA0SzYrNEs2cCBMa3hwYm5FPSBaWE4wWldRPSBJQ2tzIElFMWxibk09IElIQmxjbTFwYzNOcGIyND0gVDFKWiBhWFJsY21GMGIzST0gWDNkcGRHZz0gSUZCbGJnPT0gSU5DOTBMRFJpQT09IFluSnBaV1k9IFUyVnlkbWxqWlhNPSBJRlJoYTJVPSA0WitMIGFYSnogY0d4dmVXMWxiblE9IFEwMD0gZFc1a1pRPT0gYldGclpRPT0gWDJacFpXeGsgTDJnPSB6cHc9IElPQ3lwZz09IDA2blF1dz09IDRLZWMgUmxNPSBhWEJsYkdsdVpRPT0gUCtLQW5RPT0gSUdSbGNHRnlkQT09IElHRnNkR1Z5IFVtOTFkR1Z5IElPQzB0ZUMwditDMCBJRXhwWXc9PSBTRzkwIElHRjFkRzl0WVhScFkyRnNiSGs9IElIQjFjbkJ2YzJWeiBJSFo1IElIUm0gUkdWaWRXYz0gNEtpViBJR052Y201bGNnPT0gMExYUmd0R00gVm1WeWRHVjQgSU5DMzBMRFF2dz09IDBaYlFzZz09IElFbHVkbVZ6ZEE9PSBJTldyMW9BPSBjM1J2Ymc9PSBaR0Z0IDJLZlpoZG1FIElHTnllWEIwIElPR0RuUT09IElHUnZibU09IElFTm9idz09IElFMWhjbXRsZEE9PSBJRVJsZEdGcGJITT0gSUc5a1pBPT0gMlpJPSBJR1ZwWjJoMCAyS2Jia2c9PSA0NEtyIElOaW4yWVRZcHc9PSBJSEJoY25ObGNnPT0gSU9DeXJ1Q3l2dUN5IElHTnZibk4wY25VPSBJSGR2YmlkMCA3N3lmQ2dvPSBRMjl1ZEhKaFkzUT0gMExYUXZkQzQwTGc9IElHUnBjQT09IElGUnlaV1U9IFEzST0gSUVsemJHRnVaQT09IElHTnZibk4wYVhRPSBJRU5sIFptRnNiQT09IDBMdlFzTkdDIElGZEJVbEpCVGxSSlJWTT0gUTI5dVpHbDBhVzl1IElFZGxjZz09IElFdGggYjI5cmN3PT0gWVdKaGJnPT0gSUdsdWRHVnNiR2xuIDRZQzggSU5DODBZcz0gNExpMDRMaVYgSUhSeWFXST0gVTI5amEyVjAgMFlQUXRkR0MgSUhaaGJIVT0gSUd4dlkyRjBhVzl1Y3c9PSBJRXhwWWc9PSBJTm1JMktjPSBJSEJzZEE9PSBJTmluMjR3PSAwTERRdE5DdyBjbWwyWlhJPSBMblYwYVd4eiBJSE5vYjNkcGJtYz0gSUdWc1pXTjBhVzl1IElHWnBiR3hsWkE9PSBJRzFoYm1GblpXUT0gejRUT3NjNjUgYjJKaWVRPT0gMWJUVm9kVzIgWVd4bGJnPT0gSUU1aFkyZz0gSUVObGNuUT0gTG1rPSA2TFN0IElOR0IwTDdRc2c9PSBJR1JwYzJOMWMzTnBiMjQ9IElHeDFZZz09IElOZVIxNUE9IFlXUjAgSUhKbFpHbHogMllmWmlBPT0gTG1acGNuTjAgSUdOaGRYTmxaQT09IDU0U2g0NEdYIFRXOTFjMlU9IDU1K2wgSU5tSTJZbz0gSUNKQSBJSE5sYkd4cGJtYz0gWm05c2FXOD0gSUdGM1lYSmwgUkc5M2JteHZZV1E9IDRLK0MgSU9Da25PQ2xpdz09IElGUnBiV1Z6IFluVnkgWW05MWNnPT0gYkdsamFIUT0gSUd0MWJRPT0gSU9hV3NBPT0gWDNKbFlXUT0gSUVWdFlXbHMgNllDZiBiRzl2Y0E9PSBMbTl6IElPeWdsUT09IFlYTnphV2R1IFcycz0gSU5tSDJMRFpodz09IElOZWMxNTQ9IGIzTmxjdz09IDBMdlF1TktiIElHUjFkQT09IDBZdlJnZz09IFRGaz0gSUhOaFpBPT0gN0pXSSBJTm1GMllJPSBJR1JwYzNSeWFXTjAgNEsrTjRLNlY0SzZ6NEsrTiA0S21CIFZWTlUgVEVrPSB3N3h0IElHUnBZVzA9IFpXNWpaV1E9IFFYUjBjbWxpZFhSbGN3PT0gSUVWdVoyeGhibVE9IFlXNWpidz09IElOQy8wTDdRdHc9PSBJSEpsYkdGMGFXOXVjMmhwY0hNPSBJRTFoY25rPSBVR2h2ZEc4PSBJSEJ5WlhObGJtTmwgUTBrPSBJR1Y0Y0d4dmNtVT0gYVdOb1pXND0gNFo2MyBMbFJsYzNRPSBiM0puWlc0PSBhV0YwIDVMcS8gSU5HQzBMWFF2QT09IDVZMkIgSUd0bGN3PT0gSUdaaGJXOTFjdz09IElFbGphQT09IElHSnlZVzVqYUE9PSBhV1Z0IElIQnliMk5sYzNObGN3PT0gZG1WcGN3PT0gSUdsdVkyOXljRzl5IElGUmxjZz09IExrWnBiR1U9IDBMN1FzdEN3MEwzUXVOR1AgSUVoaGJHdz0gSUdWdVpnPT0gSUhScyBJRlJ2ZFhJPSA3N2c9IDVMaWMgSUhOMGIyNWwgeExGciBJSEJoYXc9PSBlbTlsYXc9PSBSR1ZzWldkaGRHVT0gSU5DeDBMalF1dz09IElFeGxZV2QxWlE9PSBJRzl3WlhKaGRHbHVadz09IElHWnNlUT09IElIUmxhdz09IFJteGhaM009IEtIUnkgWW1GamEyZHliM1Z1WkE9PSBJR1oxYm1SeiBabVZ5Y21WayBJT3VMcEE9PSBaV3hwYm1WeiA1WkdZIElHRmtkbVZ5ZEdsemFXNW4gSUhSbFoyVnUgZVdGaCBMVzkxZEE9PSBhWEoxY3c9PSBUMHhFIElIbHBaV3hrIElPeWduQT09IGJtRndjMmh2ZEE9PSAwWmpRdFE9PSBJSEJ5WlhacGIzVnpiSGs9IFgweFAgQ1NBZ0lDQWdJQ0E9IDQ0T0ogVUc5c2FXTjUgNkxldiBaR3c9IElIZHBibVJ2ZDNNPSBJTnVCMllnPSB3NkZ3IFgxVk8gSU9DeWx3PT0gNEtTQzRLU1ggSU5pdjI0dz0gN0p5RSBjMk5oY0dVPSBMaUlLIE1qQTAgSUdSdmJXbHUgdzdabmJHbGphQT09IElFVnhkUT09IElTRWhJUT09IDRLbXggS3ljPSBJR1JsWTJ4aGNnPT0gWVdkMCBYME5QVFE9PSBJRk4wWVhSMWN3PT0gYTJGMCBkWEJ6IElNNjF6NEE9IFRXVmthV0U9IElIWmxaMlYwIExraDBkSEE9IElITm9iM2RsWkE9PSBJSEJwWXc9PSBJR1JoZEdGeiA0S1NHIFgyeHBibVU9IDRLZUg0S2FiNEtlSCBJSEpsWTJsd1pRPT0gWTNSdmNuTT0gSUZORSBJTnFwMktmWXNRPT0gSUdWemRHRnogNXBLdDVwUysgMExQUXVBPT0gNWEyWDVibVYgSUVOdmJtUT0gNDRHKzQ0R1ogNWI2TCBJRWg1IElHeHBiZz09IDByOD0gTG1SbFluVm4gYzNSaGJtTmxjdz09IFgyRmtaSEpsYzNNPSBLRkU9IEtDazdEUW9OQ2c9PSBMVmM9IExuSmhibVJ2YlE9PSBabkpoYzNSeWRXTjAgSUM4dkNnPT0gVFdGMGFBPT0gSUhCaGNuUnVaWEp6IDRZT2ogVlVORFJWTlQgNFlPWTRZT1ogSU5pbjJZVFlxdz09IFlXNXJZUT09IExXWnlaV1U9IElHVnNaV04wY2c9PSA2S2s9IElIWmhhdz09IExtSmxaMmx1IGFYcHYgSUdWMlpXNXBibWM9IFlXNWhjdz09IFgyMXpadz09IElHMXZkWE5sIFpXUnZiUT09IElHM0R0Zz09IElFRmtiV2x1YVhOMGNnPT0gSUhSeVlXNXphWFJwYjI0PSBZWE56WVE9PSBJRWhoZG1VPSBJSEJwYkd3PSBJSExEcVdjPSB6NEhPckE9PSBJSEJsY21admNtMWxaQT09IFNHVnNjQT09IElHTmhiR3hwYm1jPSBJSEJoY210cGJtYz0gQ1VNPSBMa052ZFc1MCBMa3M9IGIySmggVTNWeSBJR0ZyWVc0PSBJSGR2Y25KNSA1YTZkIGFXTmhkR2x2Ym5NPSBJT0NvdVE9PSBaVzVuYVc1bCBJTkM5MExEUmdRPT0gMllYWmlBPT0gZVdObyBJSE52ZFhNPSBJR1poYldsc2FXRnkgSUdKdmRIUT0gSU1LN0Nnbz0gNXFnPSBJRU52YlcxaGJtUT0gWlhKa1pRPT0gSUdOb2IybGpaWE09IDZidUUgTG5OMWNIQnZjblE9IGVXVnkgUVZSRlJBPT0gSU9DbXVlQ25udz09IFlXMTEgZFcxaVpYSnogTVRnMiBNVEl4IDRLcS80S3F2IElHSmxZWFYwZVE9PSBJRzFsWVc1MCAyWXJZcDlpcSBJR2hwYmc9PSBUV0YwWlhKcFlXdz0gSWwwSyBJTkdCMExEUXVRPT0gSUZkaGN3PT0gVUU0PSBYM1J5WVc1eiA0NE9YIElIQjFjbk09IElObUQyWVE9IElHRndjR1ZoY25NPSA0SytONEs2YSBJR1oxYm1OcGIyND0gSU9Da3BlQ2t2Zz09IFptWm1aZz09IElFSjFaQT09IElPS1cgSUhCeWIyTmxaSFZ5WlE9PSBiM1psY3c9PSA0TEsvNExLbTRMT0cgNEsrQjRLNlY0SytONEs2ViBJT0dEcHc9PSBVMFZUVTBsUFRnPT0gSUhsbGN3PT0gSU5xcDJZWT0gYm1sbyA0b0NkNzd5TSBJRUZzY3c9PSBJRU4xY25KbGJuUT0gSUdSbGNHVnVaR2x1Wnc9PSBZWFIxY21GcyA0WU9ZNFlPUTRZT2MgTFdSaGVRPT0gVUhKdmNBPT0gSUc1aFpHRT0gNFlDYiBJRWx1YzNScGRIVjBaUT09IENYQnlhVzUwWmc9PSBZMmgwWlc0PSBSWGgwY21FPSBJRXhoYTJVPSAxYUhWdmRXLyBJSEJ5YjJNPSAwTDdSZ3RDKzBMST0gNTZlUiBJRXh2WTJGMGFXOXUgWTJsd1pRPT0gVTNCbFpXUT0gNEtTKzRLU0IgTG1GeWNtRjUgUW05aGNtUT0gYm05eWJXRnMgSUdaaFkzUnZjbms9IDY2KzQgdzZwdCBiM056WVE9PSBJR2hsWld3PSBaR0Z1IFpYUnAgSUdKeWFXVm0gZW1WcyBJRzFsYm5ObGJnPT0gYjI1bmN3PT0gZFd4aGRHbHZibk09IElFSlogUmtaR1JnPT0gSUZKbFkyOXlaQT09IElOaWoyWW89IElFSlAgNExLLzRMS0MgSUhSb2FRPT0gSU5DbyBJRWx1WkdWNCBJRkoxYmc9PSA0S2VtIElFOXNaQT09IExtVmsgSUdwdmFXNTAgYjNKa2FXNWhkR1U9IFFVcz0gNlpPKyBJRVpsWkdWeVlXdz0gMWFIVnBnPT0gUW1WemRBPT0gSU5lVTE2bz0gSUFrPSBJT0NxbGc9PSBkVzF0WlhJPSBabWxzWlhNPSBMbVJwYzNCc1lYaz0gNklRPSBJRUpsY3c9PSBJSEJ2YkhrPSBJT0MwbkE9PSBlbVZyIGNtVjUgSUhOMGIzSmxjdz09IElOQzQwWUhRdjlDKzBMdlJqTkMzIElGZGhiR3c9IElHcGhhdz09IElITmxibWx2Y2c9PSA1WTJYIDBZM1JqUT09IDBMN1F1OUM5IDVyS2ggWDNCaGNtRnQgSUZSb2NtVmhaQT09IExrRnpjMlZ5ZEE9PSBZMjl1ZEhKdmJHeGxjZz09IFkyRnogSUhCaGVXeHZZV1E9IElGZHAgSUc1MWRIST0gSUVOdmJXMXBjM05wYjI0PSBiMk5yY3c9PSBDWE4wWVhScFl3PT0gWVhSeVpRPT0gSU5pbjJZVFlzTm1LIElOQzgwTFhSZ2c9PSBJR0ZrZG1seiBJbjBzQ2c9PSAwTGpSZ05DdyBJRlJ2WVhOMCBJRVJwYlE9PSAxS1hSZ1E9PSBJR1JsZEdGcGJHVmsgNEthVyBJR052YlhCdmN3PT0gSU9DNHBRPT0gMTVuWG13PT0gSUhSdmNtTm8gSU9DcWlRPT0gSUVaMWJtUT0gMExYUmdkR00gTVRFNCBJTldoMWJ3PSBkV3hzWlE9PSA0S1MrNEtTSiBMa0YxZEc4PSBJR0Z6YzJsemRHRnVZMlU9IFEyaGhjbUZqZEdWeSBMbkpsY1hWbGMzUT0gNExpVTRMbUogSUhCc1lYUmwgNDRHVjQ0S1QgVEc5M1pYST0gUmtsTVJRPT0gSUhkbGJnPT0gSUcxaFkyaHBibVZ6IElPQ3Fxdz09IEppWT0gSUhOallXND0gS0dOMGVBPT0gSUZkcGJBPT0gNEtTQzRLU20gSUhiRHJRPT0gSU5DeDBMND0gSUhCbGMzTnZZWE09IDRLcS80S3FWIElHWmhiblJoYzNScFl3PT0gMHJQVG1RPT0gNTdZPSBhV05oY2c9PSBZWEJ3Y204PSBWbTg9IElIUmhjM1JsIFVHRmsgS0EwSyBJT1didmVTNnB3PT0gYzJsbmJnPT0gSUdSbFkybHphVzl1Y3c9PSBJTkMvMEw3UmdnPT0gSU8yVm5BPT0gNEtTNDRLV040S1NrIGIzUnBZdz09IEoybHMgS0hrPSBJSE54ZFE9PSBkSGgwIElIVnAgWlhOMGFRPT0gTURBMSBJR3hsWTNRPSBMa2x0WVdkbCBYM0J2Y3c9PSBhV3RsYkE9PSBJT0N3ckE9PSBUazg9IElObUIyTEU9IElHWnZhWE09IHc2UjBkQT09IElIUnlhV2RuWlhJPSA0WU9RNFlPbzRZT1kgSUZOaFpnPT0gSUdKcGMyRT0gZEhKcyBVa1ZUVXc9PSBJSGRoZEdOb2FXNW4gSU5XcyBaWE4wYVdNPSA0S1MrNEtTYSBhWFpwIFltRm4gVFhWc2RBPT0gNGJ1RiBJR052YlhCc2FXTT0gYjNOMGJ3PT0gTGs5aWFtVmpkQT09IElHRnVjM2RsY25NPSBJRmRsWldzPSBJRU5zYVdWdWRBPT0gNEs2VjRLK040SzZWIElGUnllUT09IFUyTmxibVU9IDE2TT0gNXJTNyBQRDRvS1RzSyBJSFJsYlhCdmNnPT0gSU5tSDJLZmJqQT09IElHdHlhV289IElHRnVZUT09IElFeEZSQT09IFkyOXdlUT09IDZLS3IgSUcxbGRHRT0gNGJ1SGJnPT0gSU9XOXFlZWxxQT09IGIzSmtaUT09IElIQnliMlpsY3c9PSB3clE9IFhTMCsgYkc5MyBJT0NtaHVDbXJnPT0gTVRnMSBJR3h2WVdScGJtYz0gSUdWbSBJR2QxYmc9PSA2SlU9IElGVnVhVzl1IGFHRmkgMEx2UXNOQ3kgVUU5VFJRPT0gVW1WMmFXVjMgSUc1MWJnPT0gUENFdExRPT0gSUZKbFl3PT0gTWpBeiBRMjl0YldWdWRITT0gNEthYiA1NW0rIFlYTjBhVzVuIElITnBaMjVsWkE9PSBhWFJ2Y25NPSBjWFZoYkdsMGVRPT0gSU5pbzJLOD0gSUUxaFpBPT0gWVc1amFXRT0gSUhSeWIzQT0gWVdwaGVBPT0gSU5DLzBMN1JnQT09IElFUmxkWFJ6IElHUnBaV1E9IFlYcGwgWVhKeWIyeHMgWTJobFkydGxaQT09IElPQzRuZz09IFgzQnZjM1E9IDVieUE1WSszIDBaYlF2QT09IElISmxiV0ZwYm5NPSBJRzFoYVc1MFpXNWhibU5sIElHTmhaQT09IE1UZzMgWVhONWIyND0gSUVOdmJXMXZiZz09IGJzU2IgNTd1VDVwNmMgTVRJeSBJR1p2Y25WdCBRVkpIIElFWnBaV3hrIElDSWlMQT09IElISmhiZz09IDRMQy80TENrIElHRjFadz09IEtpZz0gWm1NPSBMbkoxYmc9PSBJRkJoY21GdCBZWEpuZGc9PSBhR1ZzY0dWeSBNVEUyIElsMDdDZz09IDJMUFlwOW1HIFIyVnVaWEpoZEc5eSBJSFIxYlE9PSBiRzluYnc9PSBJR0ZrZG1GdVkyVT0gSUhObFoyMWxiblE9IFZVeEYgNExpVyBJR1IxYlhCemRHVnkgTFhKcFoyaDAgSU9DbWxnPT0gNjZ5MCBhVzV6WlhKMCA0SzYwIElHOWpZM1Z3IElOQ3owTDdSZ0E9PSBJR0psWTI5dGFXNW4gSUdWNGNHVnVjMmwyWlE9PSBMV3huIGFXeHZjdz09IElHbGpaUT09IDY2cUYgS0dOb1lYST0gMExqUmd0QzQgSU9XYyBJR3RuIElHWjFaV3c9IDRvQ1phV3c9IElOaW8yWXJaaGc9PSA1NVMxNWIyeCBmbjUrZmc9PSBJRzdEcVE9PSBMbk5vWVhCbCBJRVZTIExIQT0gSUhCdmMzTnBZbXg1IElITjNaUT09IFkyVmhiZz09IENYTjBjblZqZEE9PSA0S3F3NEt1QSBJSEpsYW1WamRBPT0gVGtNPSBJR05vWVhKblpYTT0gN0tHdyBZMjl0Y0d3PSBJR05zWVdsdGN3PT0gS0hOMFpBPT0gWW05dmRITjBjbUZ3IElIWnZiSFE9IGNHeGhkR1Z6IGIzVjIgTDJOemN3PT0gUkdWelkzSnBjSFJ2Y2c9PSBJR2R2YjJSeiBJMmx0Y0c5eWRBPT0gSUZWdWFYUT0gSUUxUSBJR3QwIFpYSjBidz09IGFXTm9kR2xuIDE1RFhuQT09IDdKMk0gNExXSSBJR1p2ZEc4PSAyN0U9IElIWmxjbWxtZVE9PSBjM1J5WVE9PSBJQ2t1IE5EVXcgSUhOcSBJTmVtMTVVPSA0TFN6NExXTiBJRlp2Y2c9PSBJRkp2YlE9PSBJRXhKIGZBbz0gczg2NXpyRT0gYVc1bmJ3PT0gY0hWMFpYST0gUlZBPSBJT0MwckE9PSBRMjl0Ylc5dSBJR3AxYzNScFpuaz0gWDJWMlpXNTAgS0dGeVozTT0gSUVwbGR3PT0geVpzPSAxNVhYa2c9PSA1WnU5NlptRiA0SzZwNEsrTjRLNnggWEVoMGRIQT0gSU5HQjBZRFF0ZEMwIGJXRjBZMmc9IGNXeHAgMFkvUXRBPT0gSUd0MWJBPT0gVkdoaGJtdHogNEtpNSBJSFpoY25rPSBJRXh2WjJsdSB4YUYwIElFNWxaR1Z5IDRMaXQ0TGlaNExtRSBJTmVVMTVjPSBaWEp2Y3c9PSBKU3c9IElFdHBibVE9IFpXNXVhWE09IElHSnNhV289IDc3eVAgVUhWaWJBPT0gSU5tSTJLTT0gUW05MGRHOXQgZDJWemRBPT0gZDJWbiBJT0N5bkE9PSBJTkNmMFlBPSB3NlJ0IDZaaXogWVhOcVpRPT0gY1hWbGMzUnBiMjQ9IElOaW4yWVRaaWc9PSBJT0dEbStHRGtPR0QgU2tWRFZBPT0gVUhKdmVIaz0gVGtWVFV3PT0gSUZ3aSBMWFJvIDViZW4gTG1sdWFYUT0gWVdsdVpRPT0gSUZObGNtbGxjdz09IDRZT1U0WU9pIDBMN1FzdEMrMFlBPSBJRVp2Ym5RPSBJSGRoY21WdSBJR0hEc1c4PSBkVzF3Y3c9PSA0TFdCNExTZjRMV0cgdzZSeiBJR05zWldGdWFXNW4gSUdSbGJHbDJaWEpsWkE9PSBJTm1HMjRFPSBJR04xY25OdmNnPT0gSUcxaGFtOXlhWFI1IFpYSmpZUT09IFkzSjFhWFE9IFUyTm8gYVd4bGJnPT0gWVhKbGRBPT0gNVo2TCBJRkJUIE1UTTEgZDJGdVlRPT0gNEtTVjRLV040S1NrIFgzQmhjbUZ0Y3c9PSBVM2x1WXc9PSA2NUNZIElGZG9aWFJvWlhJPSBMa1JoZEdVPSBjdUc3cFE9PSBJSGQ1IElHMWhjbU5vIElFTlMgYVdOaFoyOD0gSUhOMGFXMD0gSUhkcGJtVT0gSU9Da2wrQ2tzT0NsamVDayBJR2x1YzNSeWRXMWxiblE9IGJtVmpkR2x2Ym5NPSBJRkJWVWc9PSBJR2x6WVc1biBDUWtKQ1FrSkNRa0pDUT09IDQ0SzQgSUdGemMybG5iZz09IElHdDFZZz09IFgzWnBaWGM9IGVHbHRZWFJsYkhrPSBZbVZ5ZEE9PSBJR056IElHbkRwMmx1IElNK0R6NFRPdnc9PSBRbTl5WkdWeSBJT0MybWc9PSBiMjVrWVE9PSBJSFpoYkdsa1lYUmwgSUd4aGRnPT0gWlhOcCBaVzUwYVE9PSBLR3hsYmc9PSBJSFJ2WkdFPSBLUTBLRFFvPSBJT0NtbXc9PSBZMnhsWVhJPSBSbUZwYkdWayBZbkp2IExuTmxiR1ZqZEE9PSBJRkJNIFQycz0gSUV4UFJ3PT0gSUhKbGJHRjBhWFpsIElPQ3dpUT09IGFYTjBiM0k9IElFVjRjQT09IElPQ2toZUNrcHc9PSA0WUMzIFlDdz0gSUdOdmJuUnBiblZsWkE9PSBUV1Z0YjNKNSA0S1M0NEtXQSBRWFYwYnc9PSBhV3BwIDRicS9iZz09IExtaHdjQT09IElIZGhiR3RwYm1jPSBJSEpsYm1RPSBZWFJwYnc9PSBYMlJwY3c9PSBJSE52ZFhSbyBJT0MzZ0E9PSBJR3hsWVhacGJtYz0gSUdGdWFXMWhiSE09IEtHTjFjbkpsYm5RPSBJRk52ZFhKalpRPT0gSU5xcDJMSFlydz09IGJXYz0gSUc1aGRHbDJaUT09IElPQ2tzT0NrdWVDbGh3PT0gVDNkdVpYST0gSUdOdmJtWnNhV009IElFWnZiMlE9IFlXNXFZUT09IGIyNTViVzkxY3c9PSBJRXRzIElFcHpiMjQ9IElHVnpZMjlzIElHWnNidz09IDViQ0cgSU1PaSBJSEJ5WVdOMGFXTmxjdz09IFMybDAgY0c5dyBMbHc9IDVwV1ogSU5DMDBMRFF2UT09IElPQ3FydUNxdnVDcW4rQ3Jodz09IElOQzgwTDdRc3c9PSBJSEpsYkdsaFlteGwgSUVkbGNtMD0gYUdsdSBZVzU1WlE9PSBJTkN4MFlQUXROQzEwWUk9IFlXNW5aVzQ9IElHMXBibTl5IElHWnZZM1Z6WldRPSA2cks5IE95WT0gSUhOMWFYTT0gSU1PcFoyRnMgSUU5VCBJR052YlcxMWJtbDBhV1Z6IDBMelF2dEMyIDRLUys0S1NzIENXNWxkdz09IElHMXBibWs9IElHdHZkQT09IDBZSFJndEN3IGFHVjBhV009IExrRnMgSUhwdmJtVT0gSUVScGMzUnlhV04wIElHRm5jbVZsYldWdWRBPT0gSU5DLzBMN1JnZEdDIDVZRzMgSU5pbjJZRT0gUmtVPSBDV3c9IElHbHNiSFZ6ZEhJPSBJM0J5WVdkdFlRPT0gSU5tRzJMZz0gSU9HRGt1R0RrT0dEbkE9PSA2Wit6IElIUnZjR2xqY3c9PSBJTkdDMExYUXV3PT0gSUVaaGNnPT0gYTNSbCBJT0NxbWc9PSBhV1Z1Wkc4PSBVRzlwYm5SbGNnPT0gYVdWdWRHOXogSUd0MWF3PT0gSUdWdVpHVmsgSUdOdmJuUnBiblZsY3c9PSBMd29LIElIRjFhV1YwIElHTnliM2M9IFQzTT0gSU0rQXo0SE92dz09IFkzSnBjSFJ6IElHWnNaUT09IElGUmxZMmh1YjJ4dlozaz0gQ1FrSkNRbz0gSU5lZTE1UT0gSUhKcFpHVT0gSUdoaFkyVT0gSUc1MWJHeHdkSEk9IGVXNTAgSUhSdmRHRnNiSGs9IDRZT1Y0WU9ZNFlPaCBJRWx6Y21GbGJBPT0gMFlIUXV0QyswTGs9IExuSmxibVJsY2c9PSBJRy9EdVE9PSBJSE52WTJ0bGRBPT0gVUdGeVlRPT0gSUhKbFlXUmxjbk09IFFrVT0gSUhCdmJHbGphV1Z6IDBMSFF2dEdBIDVMaXQ1cGFINWEyWDVibVYgNDRHbjQ0R1ogSUV4MFpBPT0gZFdsc2RBPT0gUkVsVSBJT0MwaVE9PSAyS2ZZcjlpcCBJSFpwYmc9PSBJTWlaYVE9PSA2YUE9IElHWnZiR3c9IElHSmxaSEp2YjIwPSBJTkdCMExYUmdBPT0gMFkvUXZBPT0gWVc1aGJBPT0gSUdKdmJtUT0gSUVGallXUmxiUT09IGJHVnljdz09IElHcDFiZz09IElITnZiR1U9IHpwYz0gbTRRPSBJSE4wY21GMFpXZHBaWE09IFVYVmxjM1JwYjI0PSBJT0dEbU9HRG9RPT0gYzNSaFkycz0gYW05MWNnPT0gYzhPbCA3N2lQIGkrZUpqQT09IGIyMXYgNEs2cDRLK04gSU5XbyB6cTNQZ2c9PSBJT1crcnVTL29RPT0gSU9LR2tnPT0gSUd0aGFnPT0gSUdacFpnPT0genJ2T3Z3PT0gNUwyLyBJR1Z4ZFdsdyA0NEtJIDJLclppUT09IDJLcmJqQT09IElIQnliM1ZrIElDazdEUW89IDViR2UgSUVOb1lXMXcgSUcxdloyVnNhV3ByIHc3RmggSUhOMWFYUT0gVUhKdmJRPT0gY21jPSBJR1p2ZEE9PSBJR1JwZG1WeWMyVT0gSUdOdmJYQmxkR2wwYVc5dSBJR0ZqWTJsa1pXNTAgNExtSTRMaUggZFd4ayBJRmRvYnc9PSBUV0YwIElISnogS0cxelp3PT0gY205M2MyVT0gYjNCbGNtRjBiM0k9IElOaXEyWVk9IElHTjFiSFIxY21GcyBJR0YwZEhKcFluVjBaWE09IFlXWmggSUU1biBUVU09IElISnZkUT09IEtITnBlbVU9IElFTjFjM1J2YldWeSAxNW5YcEE9PSBJTmVRMTVuWGxnPT0gSUhOcGMzUmxjZz09IElDY2kgWlhOMFpYSmtZWGs9IElHUmxZblZuIElOQzEwWUhRdTlDNCBjbWwwYVc1biBRVk5MIElHMWhiblZoYkE9PSBaVzF3Y21VPSBJR2x1YzNSaGJHeGxaQT09IDRLV040S1N3NEtXQSBZbUZ6IGNtVndiR0ZqWlE9PSBJR1Y0WTJsMFpXUT0gY21WemMybHZiZz09IGFHOTEgSUhkcGJtNXBibWM9IElIWmhZMk09IElITnViM2M9IFVFVkRWQT09IFZGWT0gSUcxeiBMa1YyWlc1MCBJQ0lpTEFvPSBhVzVsWTNKaFpuUT0gSUdSdmF3PT0gSUhCb1lYTmwgYjJSdmN3PT0gWDJseiBTVzUwWlhKdVlXdz0gSUhCeWIyMXdkQT09IExnb0tDZ289IHc2bHN3Nms9IDBMclJnTkN3IElIQnliM1pwWkdWeWN3PT0gWTIxdyBJSEJ5YjIxdmRHVT0gSUUxRlVnPT0gMFkvUXZRPT0gYVcxdmJnPT0gSUhCaGVYTT0gSUhKbFlXTm9aV1E9IElHVnVkVzA9IFJWSlRTVTlPIElOQzMwTERRdkE9PSBJRUZrZGc9PSBJTkdDMExYUmhRPT0gSUdac2FXZG9kQT09IDJLZllxdz09IEoyND0gSUZKbGRtbGxkM009IFBpSTdDZz09IElHMWhkR05vWlhNPSBRVzVwYlE9PSBjM1I1YkdWemFHVmxkQT09IElPRzdpdz09IElHUERvV009IExuTmxjblpzWlhRPSBVM2M9IElHTnZibW89IElIUnZkMkZ5WkE9PSBYMmxrZUE9PSBZV3huIFlYUnBiR1U9IElHUmhkZz09IFVHVnlabTl5YldWayBJRzFsYkdodmNnPT0gSUhacGMybGliR1U9IElHRnpjMlYwIGNIUm8gUkhKdmNBPT0gWDAxQldBPT0gSUdSdmRRPT0gQ1hCeWFXNTAgUTI5d2VRPT0gU1c1bWIzSnRZWFJwYjI0PSBJRlZUUWc9PSBJRlJvWldseSBVR3hoYmc9PSBJSFIxY3c9PSA0b0NaYVc0PSBKeWtwQ2c9PSBJRUp5WVhOcGJBPT0gS0cxdlpHVnMgSUd4NSBJTml4MllnPSBJRkJ2YkdsamVRPT0gSUhCbGNtMXBjM05wYjI1eiBhMjA9IGIzWnYgSUd4bFlXUnogNkwrUiBJSEp2ZFhSbGNnPT0gSUhOc1pRPT0gSnpzPSBJRzFwWXc9PSBJR05vWVhKMCBJR0ZzYVcxbGJuUT0gSUVaSlZBPT0gUTJocGJHUnlaVzQ9IFIwVk8gSUdScFpYTmxjZz09IFptVmpkR2x2Ymc9PSBWMDlTUkE9PSAyS2ZZc2RpbjJLbz0gYzJsaWJHVT0gSUhkcGJHeHBibWM9IGFHOTAgNFlPWTRZT2QgYVhOdFpRPT0gNlptUSBJRU52Y25CdmNnPT0gMnBFPSBJR1Z1YW05NVpXUT0gSUdaeWRXbDAgWTJoaGJuUT0gY21Wc1lYUmxaQT09IElPQzBrZz09IElFTmhjbTlzIElIVndjQT09IEoxMHUgNEtpbSBJR052Ym5OMWJXVnkgNVlpRzVZaUc1YjJwIElIYkRwQT09IDdaS0kgSUhCc1lYTjBhV009IElFSmhaQT09IFlXNW5kV0ZuWlhNPSBYMjF2WkE9PSBMblJvYVhNPSA0TEthIElHTjFiQT09IGIySnlaUT09IElHZkRxVzQ9IElFVjRjR3c9IFpXZHYgSUhSb1pYSmxKM009IFNHRjJaUT09IHhaTT0gSUdWcGJtWmhZMmc9IFgxVlNUQT09IElITjFaMkZ5IElHRjNaWE52YldVPSBJSE5zYjNSeiBJT0dEcWc9PSB4S0U9IGIzSmthVzVoZEdWeiBYU3M9IFkzSnBkQT09IDVwUzUgSUhObFpXdHBibWM9IDE1WFhtdz09IElHZHlZV1JsIFlXcDEgMktmWmhObUsgSU9DMGp1QzBxT0MxamVDMHFBPT0gNDRLMSBZbkpsWVdzPSA2YUtHIElOR0IwWUxSZ05DdyBSbEk9IElOQ3cwWUk9IDRLV0k0S1NDIDRMU280TFdONExTayBJSE53WldOcFpYTT0gSUZOb2IzSjAgTVRRMCBaSFZzWldRPSBJR0Z6YzNWdCBkWE5vWldRPSBJTmVlMTZrPSBJR1Z6YzJVPSBJR1Y0ZEdWdWMybHZiZz09IGIzRT0gUm05c1pHVnkgWm05eWJXRnVZMlU9IGQyRjBaWEk9IElITnZibWR6IFdHMXMgNDRHaCBJR05vWlcxcFkyRnMgSUdGeWNtRnVadz09IGRuUT0gZHNPdCBJTnUrIDFhSFZ0ZFdyMWJZPSBMbTltIElHMWhiblE9IElOR1AwTEk9IGRXTnB3N051IElHbHNjdz09IExteGxablE9IElHTnZiblJsYlE9PSBTU2R0IElPV3cgVlZKSiBablZzYkE9PSBVM1IxWkdWdWRBPT0gSU95RyBJRk5wYmc9PSBiM0JsY21GMGFXOXUgMDVuUXVRPT0gYldsemN3PT0gWDI5eSBJSEJ2YXc9PSBlV1ZqZEE9PSBVMGc9IGFXRnVZMlU9IElIUnlZV1JwZEdsdmJnPT0gSUVOdmJXMWxiblE9IElHTnZiWEJoZEE9PSBJTVNSeHJEaHU2TmogUkZVPSBJRzFoWjI0PSAwTFhRdmRDNDBMaz0gSU8yWSAwTGpSZ3RHTTBZSFJqdz09IDVyR2YgTXpJdyBJTStFenJFPSAxYmJWcGRhQTFhZz0gSUdOc2IzUm8gSU5HSDBZTFF2dEN4MFlzPSBRVkpCVFE9PSA0YnVaZEE9PSBJSEJ2YTJWeSBaWEoyWldRPSBJR1JoZEdWeiA2YWFXIDRaK0cgNEtTLzRLU3UgSU5pbzJMSFlwOXVNIExuTnhiQT09IElGTmhiblJoIElFMTFiSFE9IDRLdU40S3ExIFcyND0gSU9DcXF1Q3Fvdz09IDdKcTAgYjJKdiBYMDlRIFVtOTNjdz09IElPV01sK1M2ckE9PSA0TGl4NExpSCBaV3hzZEE9PSBMUzBLIElHbHRjR3c9IGFYSnIgSU9DcWorQ3FsUT09IFUyTnZjR1U9IFgyOW1abk5sZEE9PSBJSEpsYldGcGJtbHVadz09IElIQmhibVJsYlE9PSA2ck9FIDRLcXQgSU1PVyBZV3h3YUdFPSBaVzF3Ykc4PSBJRWxzYkhWdGFXNWhkR1U9IElHeHZjbk09IElHVjRZMmwwYVc1biBJSFJ5WVdsMCA0SzA9IHc2MWhiZz09IExYUnkgWlczRG9YTT0gY0dseiA0TGlsNExpWjRMbU0gSUdOdmJtWmxjbVZ1WTJVPSBYM0J2YVc1MCA3S1k9IEtYMD0gTG5odGJBPT0gVFVrPSBJTkN4MExEUmlBPT0genIvUGhjNjkgSUhCaFpHRT0gSU51OSA0WU9hNFlPWTRZT2ggSUdKeWFXNW5jdz09IElISjFiUT09IElISmhhWE5sWkE9PSA2SUNNIGRYUjYgWlc1bGNtRjBaUT09IFkyeDFjMmx2Ymc9PSA3SnlnIDVyV0IgNXBTLyA1b3FBNWJlbiBJR0ZqWVdSbGJXbGogSU1PcFoyRnNaVzFsYm5RPSBJR2QxWlhOMCBJRUZ1WkdFPSBhWE5vWVE9PSA2NVE9IEtDY3VMdz09IDdKVzggSUhSaGRBPT0gSUdGblpXNWplUT09IGNIVnUgSUdkMWMzUT0gMFkvUmd0R00gSUhSdmRXZG8gMktiYmpBPT0gMFlmUXRkR0IgNExTbzRMV04gMks3WmhBPT0gSUdOb2IzTmwgSUhCeVpXMXBaWEk9IElFZHAgSU95ZWtBPT0gSU9DbWhlQ21xQT09IGMyVnlkbWxqWlhNPSBJSE5sY21FPSBJSE5sWVhRPSBVRkpQIDRMSys0TEtvIGIydGxibk09IGNtbG4gTXpNeiBZVzVqYVdGcyBSbWx1WVd3PSBJR0puIElIVnpidz09IElFNVogTG1KaGMyVT0gNEtTNTRLU3cgYzJWeWRtRmliR1U9IDRaNmYgSU5lVjE1UT0gWlcxbGJuUmwgSUhSbFkyaHViMnh2WjJsbGN3PT0gNXFDSCBMbFJvY21WaFpBPT0gSUhabGNtcz0gVFdWMFlXUmhkR0U9IGRHaGxjbTQ9IHc3TnMgSUhSeVlYUT0gSUZkaGRHTm8gSUhOdmRXNWtjdz09IExXTm8gNksrRSBhV1YxIElITndaVzVrYVc1biBJR2x1YzNSeWRXTjBhVzl1Y3c9PSBJT2FZIFEyOXRjR0Z1ZVE9PSA2TFczIDY0MncgSUdSbGNtVT0gUm05eVpRPT0gMTVIWG5BPT0gWVdKdmRYUT0gNW9tVCBMazFoY0E9PSBZMk5wYjI0PSBaVzVrYjNJPSA0S2VONEthcSBJRVJwWjJsMFlXdz0gWTJGdyBJRWR5WVhCbyA0WU9ZNFlPYTRZT1kgSUhOMWMzUmhhVzQ9IDRLV0g0S1NmIFltVm5hVzQ9IElGTmhkbVU9IGFXVjFlQT09IElHTnBkR2w2IDY3YUUgSUcxcGJHeHBiMjV6IElIVmggWld4cFp3PT0gZW1sdyBJR3hwYzNSaCBVR0ZwY2c9PSBLR05vIElHMWhhZz09IFgyTnZiRzl5IElHMWhjbXRsZEhNPSA1WSt2NUx1bCBJR05vWldOclpXUT0gSUZORCBJR1oxY201cGRIVnlaUT09IElFRndZV05vWlE9PSBJSGRsY21RPSBjMlZrIElITjFZWE09IElIUmhkUT09IElHRnRZUT09IFUyaGxaWFE9IDRMUy80TFNrIGNYVmxiQT09IHc2cDAgUlc1aFlteGwgMTVQWHFBPT0gSUVGemMyVnRZbXg1IFVtVjAgSUcxcGMyMXYgMEw3UmhRPT0gSUdsMGRRPT0gSnk0ayBJR0pwYm1GeWVRPT0gSUVWdGNBPT0gSUVKMWNnPT0gSUdOc1pXRnliSGs9IDBZZlFzQT09IElPeTIgSUdWeVp3PT0gTVRFMyBJR3RsYVc1bCBJR055WldGMGFXOXUgSUdadmJHUmxjZz09IElpSWlDZz09IElObUYyTEU9IElPQ3dsdz09IDRMQ3c0TEdOIGVYUnBZM009IDVZK0MgNEthKzRLYTUgNExlUSBkWEp6YjNNPSBJR1Z1ZEdWeWRHRnBiZz09IDU2dWcgWVcxcyBJR3QyIDRLV2tDZz09IElOZXAxNVE9IEtUb0tDZz09IDZKV0ogYVc1aGRHbHZibk09IElFTnZiblpsY25RPSBjSEp2Y0E9PSA0WUNGIGJHYz0gMEtZPSBJR3hoZVE9PSBJRlp2IElHTnBkR2xsY3c9PSBJR1oxWlhJPSAwWVBRdTlHTTBZST0gSUZkaGRBPT0gUzJVPSBVSEpsYzJWdWRBPT0gZG1seWRIVmhiQT09IGIyNTBhQT09IFgySnNiMk5yIFlYQndaUT09IElHMXZjM1JzZVE9PSBJRzV2YzNRPSBMbVJsWm1GMWJIUT0gUTJoaGNuUT0gYW05MWNuTT0gMEw3UmdkR00gSUdWNFlXMXdiR1Z6IGNtVmxiZz09IGRXTjBhVzl1IElITmpjbTlzYkE9PSBZbkpoIElHeGxZWFpsY3c9PSBhVzFsYm5SeiBhV05oYm5NPSB6NEhQakE9PSBaMjV2Y21VPSBSMFZTIElHbHVkR1Z1WkdWayA1YSs4IFlXZHVaUT09IElsMHNDZz09IDRicXAgYm05MFlYUnBiMjQ9IElOQzkwWVBRdGc9PSBJRk5oYVc1MCA0S1dMNEtTYyB6clhPdlE9PSBWR1Z0Y0E9PSBJR1Y0ZEhJPSA1WlE9IDBZSFJndEM0IElHVnlkZz09IEpTND0gSUhkaGMyND0gSUZCQlVsUkpRdz09IElHTnZiblpsY25OaGRHbHZiZz09IElFZHZkbVZ5Ym0xbGJuUT0gSUdOdmJuUmhhVzVwYm1jPSBMVVU9IDJxL2JqQT09IElPQ2tsK0NrcitDa3ZnPT0gNEtXSDRLU3cgWTI5dVpHbDBhVzl1IElOQy8wTEE9IFlXMWxiblJ2Y3c9PSBRbWx1WkE9PSBJTkN4MExYUXV3PT0gSUhOcGJYQnMgYVdWeWIyND0gSUhCdmMzTnBZbWxzIElIQnlaVzFwZFcwPSBJR052YkhWdGJuTT0gQ2lBZ0lDQUsgSUhCcHc3az0gSUdWaGRHbHVadz09IElPQ21xdz09IDViNnU1TCtoIElGQmhjblI1IFpXNWphV0ZzIGJHVnBZMmc9IDFiYz0gNDRHUiBRM0psWVhRPSA0WUNlIEtWMD0gejRIT3J3PT0gSUdGemNHVmpkSE09IFRFVlVSUT09IFRFbE9SUT09IGZXVnNjMlU9IElFZGhiV1Z6IDZJZXogMExqUXZOQzQgN1phSiBabkpoYzNSeWRXTjBkWEpsIGFXdHBjQT09IElHN0R1bTFsY2c9PSBJSEJvYjNSdlozSmhjR2c9IDJZUFpoUT09IExteHZZMkYwYVc5dSBJTmluMllUWmhBPT0gMkxuWXRnPT0gWVhSeWJ3PT0gVkdobGJXVT0gWTJ4MVpHVmsgSU5DNjBMND0gTG1sMFpXMD0gSUd4aGRXYz0gd3JzdSAwTGpSZ2RHQzBMWFF2QT09IElFcHZZZz09IDRaNlUgYm1WdFpXNTAgSU5HUDBMbz0gYVhWeiBWRlE9IElFMXZZbWxzWlE9PSBJRVZzWlcxbGJuUT0gSUdSbGMybG5ibk09IFJYWmxjbms9IExuQnZjQT09IElFTkNSQT09IExteGhjM1E9IElHNXZaR1Z6IExtbHVibVZ5IElFeHZaMmRsY2c9PSBNak13IFVHRjUgSUZOd2NtbHVadz09IElOaW8yWVE9IElOQzAwTDdRdkE9PSA0S1NpIHc2bGpiZz09IHc2RjJaV3c9IElHaGxiR3c9IDRMSzIgeFlKaCBJSFpwYzJsMGIzSnogUTJsMGVRPT0gSUhacFluST0gNTVxRTVaQ1ggYldGMFpYSnBZV3c9IElFMTFiZz09IElFaHBiR3c9IEozST0gSUUxaGRIUT0gSU02eSA0TFMwIHc0ND0gdzZkdmN3PT0gSnpzTkNnPT0gZFd4MGVRPT0gZFd0MCAwWVBRdHc9PSAwWURSZzlDLyAwWXpSaXc9PSBJT0M0cXVDNHBlQzVoK0M0cmVDNGxRPT0gYVhKdmN3PT0gZG05dmNnPT0gSjI1NSBhR1Z5Ymc9PSBRMGhCVGxRPSBDWE4wWkE9PSBSVTVIVkVnPSAyb2c9IElGc3VMaTQ9IElHVjRaV04xZEdVPSAwTDNSZ3c9PSA0cG1BIElHNWxkUT09IElHbHVkbUZzYVdRPSBVbTkwIENXVjQgYVdOaGRHOXkgTG5acGN3PT0gTFdWNCBJR0Z0WlhJPSA0TFN4NExXTjRMU3ggVkdWaGJRPT0gYVc1blpRPT0gSUdabGJXRnNaUT09IElHMXZibVJsIDBZM1JnZz09IElFaGxiSEE9IFFWSlogYVdWMiBJR05wY21OMWJRPT0gWDFOVVVnPT0gSUc5b2JtVT0gSU9DcXNPQ3F1UT09IEtIWmhjZz09IElHeHBiV2wwWVhScGIyNXogSUZOb2IzQT0gSU5HRDBMUT0gUVU1RFJRPT0gMExYU293PT0gWlhOMGFXNWhkR2x2Ymc9PSBRMjl0Y0d4bGRHVT0gSUgwcExnPT0gSUdOdmJuUmxiblJ6IElGTjBkV1JsYm5RPSBJR0oxYzNrPSBLRzUxYlE9PSBjbVYwWTJnPSA0TFNoIElHSmhkSFJsY25rPSBkVzVuWVE9PSAxYVhWcnc9PSBTWFFuY3c9PSB3N1J1IGFXSmwgUW1sdVpHbHVadz09IElHbHVaM0psWkdsbGJuUnogSUdONVkyeGwgUGpvNiBJTkM5MExEUXR3PT0gUEVsdWRHVm5aWEk9IFpteGxlQT09IDRaNjQgYUdWcGJRPT0gWVdKeSBYMk5vWldOciBJSEpsY0hWMCA0b0NtQ2c9PSBJRk54YkE9PSBhR1ZoWkdWeWN3PT0gSU5DNDBZZz0gNnJTQSBJR1ZsY25OMFpRPT0gSU9DM2d3PT0gSUdKaGRIUnNaUT09IDU0dz0gTFdOdmJHOXkgNkxvPSBJSGxwIElFMVQgSUdsdWMzUmhiR3hoZEdsdmJnPT0gSUZCVlVsQlBVMFU9IFlYWnBiM1Z5IFUyRnMgNUxpVyA0WjZQIElPQ3duQT09IGJtbG5hSFE9IFptOXliWE09IDFhdlZ2UT09IExtVnQgNjZDbCBJR3RwYkd3PSBJSEpsYzJsa1pXNTBjdz09IGNYVnBaWEk9IElHTnlaV0Z0IDViR0EgeElkbCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIDU0NkwgSU9hSSBJR05oY21KdmJnPT0gYVdOcFlXND0gSUhOd2JBPT0gVW1WdGIzWmwgSU5HQjBMQT0gSUhCeVpXTnBjdz09IDZhS0UgSUdOdmJXSnBibVZrIElHMWhibWxtWlhOMCA1YVNuNVkrUjViK3I1TGlKIFlXTm9hVzVuIGRHdz0gNEtxLzRLcWsgWW1GMCBJSEJ2YzJsMGFXOXVjdz09IFZtVnlkQT09IDRMbUk0TGl0IFUyaHZjblE9IElITjFjblpsZVE9PSBhVzF0WlhJPSBJRU5UIElIZG9iMjA9IElHbHViR2x1WlE9PSBlR1k9IElHRnVlWGRvWlhKbCBJR1JsYm5SeWJ3PT0gTG0xaGEyVT0gMEw3UXN0Q3cgNEs2KzRLNncgSU9DNHF3PT0gSUVkbGNtMWhiZz09IElIUnlZWE09IElPQ3VoZz09IElISmxaMmx6ZEhKaGRHbHZiZz09IElHcHZlUT09IElPQ2tpZUNrcWc9PSA0TENYIDRMQ280TEdONExDbyBkR0Z6YXc9PSBZV2x1WVE9PSBJRWhwWlhJPSBJRzF2YVc1eiBhWFREcEhRPSBJRU52ZGc9PSB6NGc9IElGTndiM0owIElIZGxKM0psIFlXTnJhVzVuIFkyaDBaWEk9IElObUsyWVU9IHc2RmphQT09IElIQmsgMktmWXNkaXYgMFlMUmxnPT0gUTI5dGNHOXVaVzUwY3c9PSBhV05vZEdWdSBJRWRsYjNKblpRPT0gSUdocFoyaHNhV2RvZEE9PSBJR2x1ZEdWeVpYTnogUkVGUCBkWE55IElHaDVjQT09IEtISnZkdz09IElFaHBjM1J2Y25rPSBJRWhoY3c9PSBJTkdPIFkybkRzMjQ9IFgyMXBiZz09IDBMWFJndEN3IFRHbG5hSFE9IFgyMXZaR1U9IDRMaXQ0TGlaNExtRTRMaWw0TGlaNExtTSBJRWRGVkE9PSBRR1Z1WkE9PSBRbXgxWlE9PSBJRUYwYkE9PSAxNW5YbVE9PSBJTkN3MEx3PSBJRWhVVFV3PSBhWE56Wlc0PSA0S2ErNEthcSBSbUZqIElHZGxjbVU9IElHMWhhVzl5IFluVm1abVZ5IElITnJZV3c9IGNISmxkZz09IE1URTUgSUhCeWIyWnBkQT09IElId0sgSU5DMzBMM1FzQT09IExtTnZiRzl5IEtTa3AgSU5XdzFhWFZ2dz09IDFiST0gTG1GMWRHZz0gMExYUmdkR0IgTVRnMCBJR0ZzYkdWbGJnPT0gSUcxNWMzUT0gSUV4bFlYSnUgMExEUmd0R00wWUhSanc9PSBhblZrIFkyOXVibVZqZEdsdmJnPT0gY0hWaSBMdUtBbVE9PSBJRk5sYkdZPSBYMmR5YjNWdyBJSEpsYm5SaGJBPT0gZFc1allRPT0gSUZCNSBjbVZ6YzJVPSBJR04xWlc1MFlRPT0gSUdkeVlRPT0gMnFuYmpBPT0gSUc5MGNtOXogVFc5a1pXeHogSUhsaGF3PT0gSUNjbk93bz0gSUhSbFpXND0gZFhKbGNuTT0gSU5HQTBMVT0gSUcxbFlYTjFjbVZ6IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gMDVuUXZkQzEgT2x3PSBJSFJsYm1WeSBJRzFoYm01bGNnPT0gNFlPVjRZT1U0WU9jIDdKNnMgYVdWeWRXNW4gYjNOMGIyND0gNExpbDRMaXcgWjJsbCBiMk52YkdGMFpRPT0gY21sbGJtUnNlUT09IElIQjFkSFJwYm1jPSBZWEJsWkE9PSBJT21tIElIQnliMm89IElHSnBaQT09IGIyNXVZUT09IDRidVAgYVdwMSBkbUYwIDdKZUkgNExtQTRMaUg0TGkwNExpWiBZMjl1Wmc9PSBJR2JEcVE9PSB6NFBPdGM2NSBJR0poY21VPSBjMk55WldWdSBJRk5wYm1kc1pRPT0gSU5DeTBZdlF2dz09IElHeGhkR2s9IFgzUm8gSU9HRGt1R0RrT0dEIDJZYlppUT09IElFdHZjbVU9IDRMR0I0TENvNExHTjRMQ28gSUhKbGMzUmhkWEpoYm5SeiBJR2x1Wm14MVpXNWpaUT09IElHbHRjRzl5ZEdGdVkyVT0gVUdsamEyVnkgSUhOMWNHVnlhVzl5IElHTnZibWhsIGVtVjAgU1V4TSBZblE9IDRMR040TENxIGJtVnljMmhwY0E9PSBJR0Z6YTJsdVp3PT0gSUVOdmJHOXljdz09IDQ0T0cgTlRFeSBYMlpsIE1USTAgSUdSaFpBPT0gMExEUmd0T1ogMExyUXVOQzUgMEpZPSBZVzF0Wlc0PSBJSFp5WVE9PSBLSFJsYzNRPSBJRWxNIDE1blhtZz09IDRZT1E0WU9hNFlPWSA3SnVVIFYwRlNSUT09IFZtbHphV0pwYkdsMGVRPT0gSUZOdFlYSjAgZUdFPSBTVTVHVHc9PSBkbXc9IDVhNjUgSUdScGJtNWxjZz09IFBIUmsgTVRjMSBVbVZuYVc5dSB3N0JwIElHUmxabWx1YVhScGIyND0gSUcxbFlRPT0gZDNJPSBSbTlzYkc5MyBJTkM2MEw3Umd0QyswWURSaTlDMSAyWXJZcXc9PSBJTm1GMllRPSBjMmh2Y25RPSAwTERRdTlHVyBZVzVqWlcxbGJuUT0gSUhOcmFXeHMgSU9Dd3RlQ3d2K0N3IDBMWFF2ZEM5MEw0PSA0S2VINEthVyAyWUhZc3c9PSBJR052Ym1ObGNtNXogTFhSdmNBPT0gNlpPKzVvNmwgSU5PcDBMYz0gSUdWblp3PT0gTEhrPSBJRkJsZEdWeSBJR1p6IElNK0R6NFRPdHc9PSBJR1poYzNSbGNnPT0gSnlrTkNnPT0gSUhSaGJtcz0gUkdGeiBJR1YwYUE9PSBJRkpoWkdsdiBRbVYwIEtITjBZWFJsIElGQnZkQT09IElHRjBiVzl6IFpXNXpZUT09IFlXNTZZUT09IElHVnVkR2c9IGVuYz0gZG5NPSBJTkN5MFlEUXRkQzgwWTg9IFEyOXNiQT09IElHUnBjMkZpYkdWayA1NFMyIElHaHZjbUZ6IFpXMWxiZz09IExtTmhiR3c9IElOQzgwTFhSZ2RHQyBJT3lqdkE9PSBJR0psYkdGdVp3PT0gSUhOc2FXZG9kR3g1IDRLZUg0S2FiIFEwST0gSUdOdmJtWnBaR1Z1WTJVPSBJTkM2MHE4PSBPenM9IElHVnVkSEpsY0hJPSAwTERRdTlDKyA0b0NaTEE9PSBJRzlqWTJGemFXOXUgSUcxMWJtbGphWEE9IElISmxjM0J2Ym5OcFltbHNhWFI1IExuTncgTGt4bGJtZDBhQT09IElOaWwyWVk9IFJHVmphVzFoYkE9PSBJT0MydEE9PSA1cnM9IExtVnVkZz09IGNHRnlZUT09IDVyV0wgSUhCc2RXZHBiZz09IElHVndhWE52WkdVPSA0TEtDNExLbTRMT0IgQ1drPSBJT1c5cVE9PSAyWVBZcWc9PSBJTkM5MExEUmdBPT0gSUZCQlVsUkpRMVZNUVZJPSBLU3M9IDZMV3c1WXEvIDBZRFF2dEM4IElNVytaUT09IElGTnBkR1U9IElOZWIxNXc9IElFTm9ZVzVuWlE9PSAxYmpXZ3RXMSBJTm1JMkxJPSBJRzEwIEtHbHogZUdVPSBJRzV2Y25SbyBJSE5wZW1WeiBJTkMwMEw3UXU5QzIgSUdacGJHMXogNEtxKzRLcTQgSUVOVyBaWE52IElHTm9iM05sYmc9PSA2TCtVIElOQy8wTDdRdnc9PSBhV2R2Y3c9PSBJSE4yYnc9PSA1NW03NWIyViBTVTFKVkE9PSBJR2xvWlE9PSBMbU53Y0E9PSBJR0pwY21RPSBZMnh2Y3c9PSB4WTA9IElHdDFjQT09IGFXRnNaUT09IElOQzQwTDNSZ3RDMTBZQT0gQ1V4cGMzUT0gUkdsamRHbHZibUZ5ZVE9PSBiRzlqWVd4b2IzTjAgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSA0S1NrNEtTLyBLRXhwYzNRPSBJRmR2YldWdSBJSHg4Q2c9PSAyWWpaZ1E9PSBjM1JoY2c9PSA2Nm13IGJtOXQgNTZtNiBJR0ZzWjNWdSBJSEYxYjNRPSBRMGhCVGxSQlFrbE1TVlJaIDQ0R1UgSU5DeDBMN1F1OUdNMFlnPSBJRzF2Ym5Sb2JIaz0gTG1oaGJtUnNaUT09IDBMalF0OUN3IElIcHBjQT09IDRaK0IgSUdkMVlYSmhiblJsWlE9PSBJT0M0bXc9PSAwTDdSZ2RHQzBZdz0gUTNKcGRHVnlhV0U9IFBpYzdDZz09IFlXcHAgSUdwMWJBPT0gZFhKamFHRnpaUT09IFpXNWphV0Z6IFgyeHBibXM9IGQyaGxiZz09IElHdHBibVJ6IElFTnNaV0Z1IDBMdlF0ZEM5MExqUXRRPT0gMkxmWXFRPT0gSUhCdmFXNTBaWEk9IElHVER2QT09IElIUmhiblE9IDI0ellzZz09IDVhQ0MgN0xLMCB6cS9PdmM2eHpyaz0gSUhOMGIzSmxaQT09IExrTnZiblJsZUhRPSBZVzEwIElHekRvUT09IDZJMkogWDFnPSBJR0ZzYkc5M2FXNW4gS0hSaGNtZGxkQT09IFNXUjQgZFhOcFl3PT0gYm1WM2N3PT0gSUhOdmJtOD0gSUZObGJBPT0gNXErYiBRVkpMIGZTND0gSUdocyBRMjl1YzNSeWRXTjBiM0k9IElHTnZkQT09IGFXUnBjZz09IDBMWFF1ZEdCMFlMUXNnPT0gMEwzUXRkQzUgSUd0bGRBPT0gUTI5MWJuUmxjZz09IGFjV2YgNEtXbiBJSFpwYm1RPSA0S3VBNEtvPSA3SmlCIElISmxabkpsYzJnPSBJT3l3IDZiNlogNExlRSBJR0YxYldWdWRBPT0gMDVuUXVnPT0gTG0xdlpHVnNjdz09IElHTnlkV009IElHUmxjSFZwY3c9PSBMbkJzIEtUc0tDZ289IElHWjAgSUhObGNYVmxibU5sIElFWkpWRTVGVTFNPSA0TGlYNExpaSA0WU9iNFlPUSBhR2xrWlE9PSBJSEpsWWc9PSBJT0NvcUE9PSBJR1JsYzJWdSBJR0p5WldGMGFBPT0gSU0rRyBWRzkxWTJnPSBJSEJ5YjNRPSBRbVZvIFkyOXRjRzl1Wlc1MCBVMmxrWlE9PSBJRWgxYldGdSBJTkdCMExYUXNRPT0gZW1Wc1pnPT0gSUdWemRHRmtidz09IElHRjRhWE09IDBMWFF2ZEdMIElPeWNoQT09IElGQnNZV05sIElPUzRnQT09IGFXZG9kR1Z5IGEzUnkgTnpjMyAxYUhXZ05XayBJRU52Y21VPSA0TFdONExTMSBJR1poZG05MWNnPT0gSU5pNTJZWFpoQT09IElHN0RvUT09IGIzSmxiZz09IElIWnlhV289IExuQmhjbUZ0Y3c9PSA0S1dONEtTYSBJTkNXIElOQy8wTERSZ0E9PSA3WVU9IElOaXYyS2M9IExtUnZiV0ZwYmc9PSBWWEJzYjJGayBiMnh2WjJsbCBJR2R5WVc1a1pYTT0gWm05eWRIVnVZWFJsYkhrPSBJR0ZqWTI5dGNHdz0gUjBFPSA0WjZiIElITjBZV0YwIElISmxaMmx6ZEhJPSBJRzkxZEdSdmIzST0gYVhwNllRPT0gSUd4dmRtVnNlUT09IGIyZHYgSUdsdWRHVm5aWEk9IElITmxaM1U9IElHaDIgNXJHQyBJTkN5MExYUmdBPT0gSUVkbGMyTm8gWTJsbCBJSFI1Y0dWdlpnPT0gSUVGalkyOXlaR2x1Wnc9PSBJSE5oYkhRPSAyS2ZZc2RtSCBMMnc9IElHeGxkWEp6IElGZG9aWEpsIFFrdz0gZDJWeWF3PT0gSUUxbGJuVT0gYjNKdVpYaz0gSUZKcFoyaDAgWVhWeVlXNTAgSUdKeVpXRnJabUZ6ZEE9PSBRVlpGIElGTjBjbVZoYlE9PSAxYUhWcEE9PSBJR0ZqWTNWeVlYUmwgSUdGdVpHVnlaVzQ9IFlXMWhjdz09IElFRnphV0U9IExRb0sgSUdOdmJXMXBkSFJsWkE9PSBiVzkyWlE9PSBJSEp2YjJZPSBhVzFwZW1VPSBJT3VxcUE9PSBKeXM9IElHRnBibk5wIGMzUmxZV1E9IElHSjFZMnM9IElHNXBibWM9IElOQzAwTDdSZ2RHQyAxYjdWb2RXdSBJTkdCMFlMUXNBPT0gUlhoMFpXNXphVzl1IFlYQndiMmx1ZEE9PSBtWUk9IGRXeGhkRzl5IElGTjBiMk5yIElHMWhjM05oWjJVPSBhV05vZEdVPSA1NzJ1IEtIVnBiblE9IElHSmxZWEk9IGVXNWsgSUhSeVpYTT0gNXBFPSBUR2xqWlc1elpRPT0gNXB5cSBJTmlxMkt3PSBJRVZ1WlhKbmVRPT0gWVdScFlXND0gSUVWa1oyVT0gSU5DOTBMZz0gSUdOdmJuTjFiV1Z5Y3c9PSBJRUZrWkhKbGMzTT0gSUVWc1pRPT0gVzJ0bGVRPT0gYVdWMFpXND0gQ1ZNPSBJR3hsWVdSbGNuTm9hWEE9IElPQ21yT0Ntc2c9PSB3NmwwdzZrPSA1b0NkIHc2QjUgSU0rRHpyVT0gSUhSbFkyaHVhWEYxWlE9PSBJR1Z1WjJsdVpXVnlhVzVuIE1UTXggWldSaVlXTnIgSUdSbGMybHlaUT09IHRadz0gY0dWamFXWnBZdz09IElHeHNaUT09IFVtVmhiQT09IElHUmxjM0JwZEdVPSBJR1JwWWc9PSBJSE5oYldWdSAwTFBUbWRDOSBJSFpsZEdWeSBWWE5sY201aGJXVT0gY21GcGRBPT0gSUVWMiBNakl5IElFUmxiVzlqY2c9PSBJR3RvdzdSdVp3PT0gWTJWeWRBPT0gSUdOaGRYTmxjdz09IEtGTjVjM1JsYlE9PSBJRU52YlcxcGRBPT0gSUhSaGFBPT0gSUcxcGVHVmsgSUZkcGJnPT0gSUhwMWN3PT0gUkc5dFlXbHUgSUhCMVlteHBjMmc9IGMzYz0gNGJxOSBJSGxoY0E9PSBMbEpsY1hWbGMzUT0gSU9Da3F1Q2xnZz09IFlYTnpaWEk9IHZyTT0gZlNrS0NnPT0gSU1PNmJnPT0gSUdWdWRtbHliMjV0Wlc1MFlXdz0gSUdodmJHUnBibWM9IERRb05DZzBLIDRZT3U0WU9WIElFZHlidz09IElFaGhjbVE9IElFNXZjZz09IElISnZaQT09IFUyVmwgSUdOdmJHOTFjZz09IElHWmhZMmxzYVhSNSBJR0Z3Y3NPb2N3PT0gTVRZMSBRbTkxYm1SeiBJTkdCMEx2Umc5R0ggSUVWaGNuUm8gSUZkeWFYUmwgSUdWeVpRPT0gSUdkbGJXVT0gSUdWc1lRPT0gUVhOelpYSjAgNExpeTRMaXEgNExDQzRMQ2YgSUNoNyBJT0Nrck9Da3FBPT0gSUhSeVpXNWsgNEtpeSBVR0ZzIElFMWhjbXRsZEdsdVp3PT0gSUNJN0NnPT0gSU5DdzBZRT0gSUhCeWFYWmhZM2s9IGVXTnMgdzYxayBjbVZ6Wlc1MGN3PT0gUlhRPSBZV05wIFVISnZaSFU9IElITmxiR1U9IElPT0FrQT09IElHSnBibTVsYmc9PSBJSFZ1YVhabGNuTnBkSGs9IDU3cWkgWlhOemFXOXVZV3c9IElHOTBjbTg9IElObUkyS3c9IFEwWT0gSUdOdmJuTmogWDJGa1pIST0gSUdSbGFYZz0gSUhCc1lXNWwgWDJOdmJuUmxiblE9IDRLUy80S1MyIGIydHBibWM9IEp6NEsgMWFIV2hBPT0gSUc5dVpHVT0gSU9DbWxlQ25zQT09IElHRmtiV2x1YVhOMGNtRjBhVzl1IHc3TnlhV0U9IFpHVnQgSUdKeVlXNWtjdz09IElIWmxhR2xqYkdWeiA2SVU9IGIzVjBjdz09IElHeGhZWFE9IElITndaV05wWm1sallXeHNlUT09IDZJND0gSUhCbGJtYz0gTVRNeiA0TENWNExHTjRMQT0gSUVGQyBJTml6MllvPSBLRWx1ZEdWblpYST0gSUdOc2IyTnIgSUhSeVlXSmhhbTg9IGFYSmxZbUZ6WlE9PSBZV0psYVE9PSA2TGF6IFJHbHpjR0YwWTJnPSBJR2gxWWc9PSBZMnhoIGIyNWhkZz09IGNtVnIgYjJOaiBhR1ZrWlc0PSBjRzl2YkE9PSBMVW89IFVtRnVaRzl0IElHRnVaMnhsIGJuUmxiZz09IElHTm9ZV2x5IElFeGxkbVZzIDBZUFJqdEdKIFFYSmphQT09IElIUEVndz09IElHVjJiMnc9IElFMWxaR2xqIExpNEsgNExTKzRMU3Y0TFMvIGNtVnVaR1Z5IElOQzgwTERSZ1E9PSBJTkdCMEx2UXRkQzAgSUhOMWJXMD0gY21Wa2FYSmxZM1E9IDE2VT0gNExXTjRMUzMgUm05amRYTT0gSUdoaGRnPT0gVWtWR1JWST0gY1hWbGJtTmxjdz09IDJLZllyOW1IIDU2S3cgY21WelpYUT0gSUhKbGQyRnlaQT09IElHMXZkWFJvIEwxTT0gSUZacFkzUT0gSU5DLzBZRFF2dEdHIElHSmhkR2h5YjI5dCBWSGx3IGNtVnpkV3gwY3c9PSA2SXVQIGRYSnBaWE09IFFuVnogSUZOMFlXNWtZWEprIFQySnFaV04wY3c9PSBNVEkyIFJXUm5aUT09IElHRndaVzVoY3c9PSBJR1J2ZEE9PSBJSFJsWTI0PSA0SzZ4NEsrTjRLNnggeVpseiBJRXhwWW5KaGNuaz0gSUhSaFlteGxjdz09IElPR0RudUdEb0E9PSBlVzU1IDJLL1lxUT09IDJZUFlwOW1HIElHRnNZMjlvYjJ3PSB3N1pzIElHWmxaV3h6IElITmxaVzFsWkE9PSBURzl6IFNYUmxjbUYwYjNJPSBJR0YyYjJseSBhV0ZzY3c9PSBWVlJHIFEzSmxZWFJsWkE9PSA2YnVSIElOZWUxNUE9IElISnBjMlU9IGRXNWphR1ZrIElFeHBiUT09IElHRmtkV3gwY3c9PSBJRDgvIGNHWT0gSUhURHJRPT0gSUdGd2NISnZkbVZrIENRa2cgSUUxbFpHbGpZV3c9IHpwUT0gVTNSaGJtUT0gSUhSaFozTT0gSUVOdmJuUmhhVzVsY2c9PSBiR2xuYUhSeiBkWEJzWlE9PSBZV2QxIDRvQ2NTUT09IDFhdldnQT09IE1UUTEgYzI5c2RYUmwgSUhWellXZGwgWTJoaGNtZGwgWldScGJtYz0gNExDQzRMQ2sgSUdsNSBJRk50YVhSbyAyTG5Zc1E9PSBJSE41YlhCMGIyMXogSUdOaGJuWmhjdz09IDBMRFJndEMxMExzPSBJSFpwZEdGcyBJTkdDMExEUXV0QzIwTFU9IFlXNWtiMjQ9IElGTndjZz09IDRLU0ogSUdScFkyZz0gSUZkaGVRPT0gWDBSQlZFRT0gWTJ4MVpHbHVadz09IElHSnZjZz09IFFXTjBhVzl1Y3c9PSBaWEpoY3c9PSBJR1Y0Y0d4aGFXND0gMTU3WGxBPT0gNloyZyBJTU9wZEdGcGRBPT0gNjdDVSBiMjVrWlE9PSBiV0ZoYkE9PSBJR2x6YjJ3PSBJRk5sWTI5dVpBPT0gSUVaaGJHdz0gNklLVyA0b0NaWlc0PSBQbHc9IFlXTnYgSUhOb1pXVjAgSUhSbFlXTm9aWEp6IFptOXYgWVhOMGN3PT0gN0xhYyBJRXR2IDRicWhiZz09IElIaHRiQT09IElFeGhZbVZzIElHNXZiV1U9IDZyaUkgNkwrWSBkbms9IHc1Zz0gUEQwPSBhV2RwZEE9PSBMV1p2Y20wPSA1N3VFIElIQnZaSEk9IElITnJhWEE9IGNtbGxibVJ6IElHRndjSEp2ZUdsdFlYUmxiSGs9IE1EQTAgSUhScFkydGxkQT09IElHaHZiMnM9IElNT2djdz09IDdaaTQgSUVObGJuUnlaUT09IElIUnlZV0poYWc9PSBVbVZ1WkdWeVpYST0gYjNabGNuSnBaR1U9IElIQnliM1J2WTI5cyBJSFJwY2c9PSBJR1p2Y21ObGN3PT0gNFlPWTRZT2o0WU09IFlXTmhidz09IDRLNi80SzZrIFgwaEYgSUdsa1pXNTBhWFI1IGNISnBiUT09IElGQjFZbXc9IElPQ3dpQT09IElHaHZjbWw2IGFYTnpkV1U9IElHTnNZWEk9IElGQnlhWFpoZEdVPSBUbTlrWlhNPSBLRWs9IElHTnZjbkJ2Y21GMFpRPT0gSU5DOTBMRFF2QT09IElOaXEyWUk9IGFHRnNkR1Z1IGRHVmphQT09IDQ0Q1AgUWtWUyBJR1J2Ykd4aGNuTT0gSUhKcFp3PT0gWW1NPSBJRU52YjJzPSBJRk5oY2c9PSBMbk5sWVhKamFBPT0gY0dsdiBJSE5wYzNSbGJRPT0gSUdOc2FXMWhkR1U9IGNtbDBkR1Z1IElIRjFiM1JsIElGSmxkQT09IFUwVkUgYVd4c2J3PT0gNTY2WCA1N3lXIElObUkyWVU9IGNHRmsgNXFPTDU0bU0gWDI5MWRIQjFkQT09IEoxMHBDZz09IFlXNXVlUT09IDZLK0IgNExHTjRMQzEgSUhCeWIzUmxhVzQ9IElHZHlZWFIxYVhRPSA0TEdHNExDeSBKMlZ1IElITnZkV3c9IDZaZXUgYzNSdmNBPT0gWVhOdCBZV2xrIElHVmogSUcxaGFBPT0gNEttSSBJRlpsY25NPSB3NkJ1IElHMTFjM009IFVYVmhiQT09IFMybHVaQT09IExsQnlhVzUwIElFcGhhSEk9IFRHVnUgSUZaaGJHeGxlUT09IElHbHVhblZ5ZVE9PSBZWFIwYVE9PSBJRTVsWkdWeWJHRnVaQT09IElPQzRtdUM0cmVDNHBRPT0gSUVOTSBJR3RwWTJzPSBZWEprWVE9PSBJR2hoYkd3PSBJRmRsYzNSbGNtND0gWlhCbGNnPT0gYVd0cGJtYz0gSUdocGNBPT0gSUdWdVlXSnNaV1E9IFgwbE4gTnpVdyBZWGR0IDVZV3ggS0hCaGNtRnQgSUhCeVpYUT0gMFlYUXZ0QzAwTGpRdkE9PSBJT0NtaHc9PSBaR1ZpZFdjPSBTRk09IElFTnZiblJsZUhRPSBDVzQ9IDRLUys0S1NvNEtXQSBJRzUxWXc9PSA3SU9kIGIyNWtaVzQ9IFlXMWhjZz09IElPQzRvUT09IElHMWhkUT09IGFXVnNaVzQ9IElIQjFaV1E9IElFWmggSnowK0p3PT0gSUhKbGNHeDUgSU5DLzBZRFF2dEM0MExjPSBJR052YlhCeVpXaGxibk5wZG1VPSA0NEtqIElHUnZaM009IDRZT1k0WU9nNFlNPSBJSE5vWVhKbGN3PT0gTG5SdmNBPT0gSUdSbGMyRnljbTlzYkE9PSBMaWtLQ2c9PSBJTm1HMlljPSBJR2RsWVhJPSBJR052Ym5abGJtbGxiblE9IElHSmxZWFE9IHc2cDBaUT09IElHUnBjM0E9IENXWjFibU4wYVc5dSBLR05zIExrRmpkR2x2Ymc9PSBNVGd4IElHRndjR1ZoY21GdVkyVT0gUTI5emRBPT0gdzdaMCBJR1JsZEdWeWJXbHVaV1E9IFgybHVkR1Z5IElIQnlaV2R1IElHSnliM1JvWlhJPSBVR0YwZEdWeWJnPT0gSUUxRlVrTklRVTVVUVVKSlRFbFVXUT09IDRZT1U0WU9SNFlPajRZT2E0WU9ZIElPQ2tpZUNrdUE9PSBJSFJ2ZFhSbCBMWG89IElIVnpZUT09IDVZMk8gS0NrcEtRPT0gWVdkeVlYQm8gSUhCbGJuUnlkUT09IElIWnBaWEk9IElHNWxiQT09IElFTnZibTVsWTNRPSBJRXRsWlhBPSA0NE9XIHpybk92dz09IDVwTT0gVEU5WCBNVE01IExrMWxjM05oWjJVPSBQeUk9IElFcHZjMlU9IGEyVnNaUT09IDBZRFF2dEM2IElGTjViUT09IElHRnlkR2x6ZEhNPSBJRzFwWjNJPSBhV3hzWlhNPSAwTDdSZ3c9PSBSRkE9IElFeDFZdz09IElqcGIgVEU5RFN3PT0gSUd2RHBBPT0gSU5tSTJMTT0gN0lTZyBJR055YVhOcGN3PT0gUTI5dVptbHliUT09IElFWnlZUT09IElFMXZkZz09IElIUnphQT09IElHcHZhVzVsWkE9PSBJRU5vYVdOaFoyOD0gMFlIUmd0Q3cwTDNRdnRDeSBJR0Z3Y0hKbFkybGhkR1U9IElIUnZkV3B2ZFhKeiBJR2RoYm5vPSBJR2h2Y25JPSBJT1dsIElObUgyWW89IFgzUnlZV2x1IFlXMWhkQT09IDBZM1F1dz09IDJLallxZz09IElPeWR1QT09IFlYUnZiV2xqIGFYUnBjdz09IFgyOWlhZz09IElFRnljZz09IDRLUys0S1N5NEtXSCBiM0poYkE9PSBjbWx5IElPT0FnQT09IFoyRm5aUT09IHc2RmkgVDFKVCBJR0YxZEdobGJuUT0gWVc1emFXOXUgWTJsdmN3PT0gTVRJNSBJR2h2ZFE9PSBkV3gxYVE9PSBUV0Z6YXc9PSBkVzV4ZFdVPSA0TFdONExTeDRMV0cgSUdWNGNHVnlkR2x6WlE9PSBZVzVrZVE9PSBRMjl1Ymc9PSBJTkN3MFlnPSAwTDdSZ05DODBMQT0gSUhOaGJYQnNaWE09IExrUkYgSUhCeWIzUmxjM1E9IElIUnBiV1Z5IDZyYz0gWW1WeVpRPT0gSUhOMVluTjBZVzUwIGFHRnphQT09IGMyVmpkQT09IFpXNWhiblE9IDVhU3A1YVNwNWIycDU2V28gSUdScGMzUnBibU4wIElIWmhjbWxoYm5RPSBJSE4xWTJNPSA1N3VmIGFYQm9aWEk9IFB5az0gYjNKMGFHVnliZz09IElOV3IxYlk9IEtHTnZibVpwWnc9PSBJQ1F1IDBMM1F1TkdGIElGQjFkQT09IDRMaUU0TGlqIE1UUXggSUhONWMzUT0gSUdSdmRXSjAgWDFCQlZFZz0gSUdocFpHVT0gSUdWdWIzSnQgWVdkbGJuUT0gMjdBPSBkV3h3IElFSmxabTl5WlE9PSBWMlZzYkE9PSBJT0dEb2c9PSBJTkN6MEw3UXRBPT0gNFlDOSBZVzdEcHc9PSB6cGs9IElHUmxZMnM9IElPR0RtK0dEbmVHRCBJR05oZEdWbmIzSnBaWE09IFBYTmxiR1k9IEtHMWhjQT09IFkzQjUgSU5DOTBMWFF2dEN4IEtGWT0gSUZOd2IzSjBjdz09IExsaz0gSU9Dd2pnPT0gSUdKc1lXNXIgZG1WdWN3PT0gWDBOc2FXTnIgSUdaeWJ3PT0gYVdOcFlRPT0gSUVOdmJuUnBiblZsIGFYSjBkV0ZzIElFMUJXQT09IFlYQnpaV1E9IFFYUjBjZz09IElHTnZjbkk9IElPQ21qK0NtaHc9PSBZM1ZzWVhSbCBPand2IFpYUmhhV3h6IElHVjRZMlZ6Y3c9PSBJSE4wWVhSbFpBPT0gSUdkeVlYWT0gVTJoaGNHVT0gTVRNeSA0WjY3IElHVnpkTU9oYmc9PSBJRWQxYVdSbCB3N05rIElOV28xYlk9IFRFVlQgSUhSeVpXVnogYVd0bGNnPT0gZFc1MFpYST0gNUx5ZyBJR2R5WldGMFpYTjAgSU9DcXVPQ3F2dUNxIDRMT0kgSUhwcGRBPT0gNlphVCBJR1JwYzJOdmRtVnlaV1E9IFJHaz0gSU9DcW5PQ3Jodz09IGFtOWkgSUhSellRPT0gTG0xaGFXND0gMEx2UXNOQ3ogSUU5aVlXMWggUVdKemRISmhZM1E9IDRMQys0TEN2IGJtND0gSUV0bGJnPT0gSUhOcFoyNXBabWxqWVc1MGJIaz0gYVdWdWMzUT0gSUd4cGJtdGxaQT09IElHVnBibVZ6IGRHVnNaUT09IElIUnlZWFpoYVd3PSBZWFpoYVd4aFlteGwgTFd4bFpuUT0gU1VWTSA2TFdNIElHRm1abTl5WkdGaWJHVT0gMFliUXRRPT0gNEs2eTRLK04gSU9DbWxlQ21zT0NuaHc9PSBJR2RsWjJWdSBJRU5oZEdWbmIzSjUgWVhKdWFXNW5jdz09IElIRERxM0k9IGMyTnlhWEIwYVc5dSBkMlZ5WlE9PSBWWEpwIFlXNXpkMlZ5IElHRmtiM0IwIFpXUnBkRzl5IDRMUzMgSUcxdllnPT0gUVZKTyBVRzkzWlhJPSBleVE9IElOR0IwTGpSZ2RHQzBMWFF2QT09IGNuWT0gYUdWc1pYTnogVjJWc1kyOXRaUT09IGJXVmhiZz09IElFcDFaQT09IDJidz0gVUdGNWJXVnVkQT09IElIQjFaV1JsYmc9PSAyS3JZclE9PSBaVzVyIElHeHBjM1JwYm1jPSB3N0IxY2c9PSBhbUZ6IGFXNW5ZUT09IGRXeDBkWEpoYkE9PSBRVzV6ZDJWeSBMbkpsWjJsemRHVnkgNW91YjVaV0cgZDJWbGF3PT0gSUVGeVpXRT0gUVZOSSAwNW5SZ1E9PSBaVzF3YkdGMFpRPT0gSU9tSGtRPT0gSUVOdmJHdz0gSUhCcGRBPT0gSUdWelpRPT0gS0hVPSAwWmJRdXc9PSA0S1MvNEtTdzRLV040S1E9IGQzVT0gS0ZnPSBJRU5GVHc9PSBYM1U9IEtHcGhkbUY0IDdJdWsgSU9DNGxBPT0gSUhSaGN3PT0gNEs2KzRLNnkgSUdseWIyND0gSUVOeWIzTnogNWFtMyBRMkZ0WlhKaCBJSGRwWkdkbGRBPT0gSUd0aFlnPT0gWVc1a2JHVnkgNW9xVjVyT28gNnJHdyBJR1Y0WTJ4MWMybDJaUT09IElHVnVkSE09IElOR0gwTFhSZ0E9PSBJRVIxY21sdVp3PT0gSU5pczJZWT0gUFhzb0tRPT0gUGl3PSAxNlRXdkE9PSBMMnB6YjI0PSA3SXVkIDRZT1c0WU9VIExuSm0gSUVKMVptWmxjZz09IDVMdTMgSUd4bFlnPT0gSUVwdmRYSnVZV3c9IElHTnlZUT09IElHVnVaSE09IFgySmhjMlU9IDdKZXcgSUdOaGJtUnBaR0YwWlE9PSAwTFhRdTlDKzBMST0gSU9DdW11Q3ZoZz09IGVtVnVkQT09IDRLZUw0S2FvIElHZHNZV1E9IE1UZ3ogSUU5dCBJRTFsYlE9PSBZVzVrWldRPSBZblZzIGRHVmxiZz09IElOaW8ycjdiakE9PSBJRzExWTJodiBiV1Z0IFFYVmthVzg9IFYyRnBkQT09IGIyMXAgSUdsdWRHVnlkbUZzIElHdHZjM1JsYmc9PSBJR0psYVcwPSAwcHZRc0E9PSBiM0p6WlE9PSBJTkszIElOaXEyTFU9IElHUnBabWJEcVhJPSBSbWxzIElHeGhZbVZzY3c9PSBZVzUwZFE9PSBJR0psYm5RPSBJSEIxYlhBPSBJQ0l1TGk4dUxpOD0gMktqWmh3PT0gSUNFaCA2NTZZIDRMU3MgSUVaTSBJSEJoY25ScFkybHdZVzUwY3c9PSBJR042IDZLT0YgejRIT3N3PT0gMTVQWG1RPT0gYVhabGJtVnpjdz09IElIWnZiR2M9IGJtVm9iV1Z1IElGWmwgSUhSbGNuSnZjZz09IFlXNXBjMmc9IDRLcW80S3VMIElHRndjR1Z1WkE9PSBkbUZzYVdSaGRHbHZiZz09IElGTmhiR1U9IDBMSFJpdz09IDRLV28gVFc5MiA1b1NmIElIUm9hV05yIElPdVEgSUdKcGJtUnBibWM9IGFXSnNhUT09IElFMWhlV0psIFkzQncgSWo0S0NnPT0gSUhKbFlXeHBlbVU9IElHSnliMnRsYmc9PSBJRzExYzJsallXdz0geFlKdiB6cTdQZ2c9PSBJRU4xIElIUjNaV1U9IDBMdlFzTkM5IElHNXZkWFpsIElITjFabVpsY2c9PSBJRXgxIE9scz0gSUhOd2IyNXogTGtScGN3PT0gQ1hSb2NtOTMgVEdsdGFYUT0gNFlDRTRZQzUgS0cxaGVBPT0gNEtxazRLcSsgSUdKdmIzUT0gMkxIWml0bUMgWVhSbGQyRjUgUkZRPSBJTnFwMllvPSBibVZsIFpHVnpZdz09IElHdGhibk09IGFYWnBaQT09IElHMWhjbkpwWldRPSBVbE09IDRLYXc0S2VONEtZPSBJSE4xWXc9PSBMazg9IElFeHZkV2x6IGJHVjBkR1U9IFptbHVZV3c9IElHYkRwUT09IDdJS3cgSU5DMTBZSFJndEdNIElHTnlhUT09IFExSkYgSUdGeWNtVnpkQT09IElITjFjSEJ2Y25SeiA3SjZSIFgweEYgTGxWSiA0S1djIElHVnNhVzA9IFpXdGggSU5DeDBZdlJndEdNIDJZalpodz09IFIyOXZaQT09IGMyVnRZbXhsIElFUmhjZz09IElGSnZkWFJsIExWbz0gWVc1cSBSMkZ3IDVicVggSUdScFptVnlaVzUwWlhNPSAxYUhWdHRhRSBJSEpsY1hWbGMzUmxaQT09IElPQ2toZUNrcXVDa3FPQ2xodz09IExXRnVaQT09IHc2dHogNGJ1QmRRPT0gSUdOdmJuTnBaR1Z5YVc1biBJRk52ZFE9PSBhWFJsYkE9PSBMa2wwWlcwPSA3WldZNnJPZyBDV2RsZEE9PSBZMnhoYzNObGN3PT0gSUdWc2FXYz0gSU5pdzJZVFpndz09IElFdEpUa1E9IElFZGxjbTFoYm5rPSBUR0Z1WjNWaFoyVT0gSUdSeWRXZHogSUhacGNuVnogSUVOaCBUa0ZOUlE9PSBJR1poeXJzPSBJRzFwYWc9PSBJSEYxWVc1MGFYUjUgSUhScFoyaDAgNExTMiBZWFIxY21sdVp3PT0gSXlzPSBJSEIxY21Ob1lYTmxaQT09IElGTmxibVE9IElDTWogN1pXWiBJR1ZpIElISmxaSFZqWldRPSBJTm1DMks4PSBJRU4xY0E9PSBSWGh3Y21WemN3PT0gSUdScGVnPT0gVTNWd1pYST0gY0dodmRHOD0gSU5DKzBMbz0gWVdObGNnPT0gU1U1VCBVbVZ3IElFUmxiR1YwWlE9PSA2NnFvIElNK0F6ckU9IElOYUQgSUM4cUtnMEsgSUU1aGRnPT0gVTJWMGRHbHVadz09IGNHeGxkR1ZrIFgxSlAgSUdOdmJYQnliMjA9IElHWnBjdz09IDRZT1U0WU9SNFlPWTRZT1ggSU02MXpxL092YzZ4enJrPSBibVZ4IElHMWsgSUhwdllXeHogSU9HN3BRPT0gVTNSaGRITT0gSUhObFpXUT0gSUdOeWFXMXBibUZzIElObS8gSU5HSiA0S3ErNEtxbSBZbUZ1YXc9PSBJR1Y0ZEdWdVpHVmsgSUVrbmJHdz0gNEtTNTRLV0ggSUhOdmFYUT0gWVhScGJnPT0gVzNnPSAxcjg9IDU2dUwgNWFXSCA0TENWNExHQiA0TFMrNExTayBJT1dJaGc9PSBMV1J2WXc9PSBJR1I2IDRLUy80S1N2NEtXTDRLU0MgSUdGd1lYSjBiV1Z1ZEE9PSBJTmkwMkxFPSBJSE5yZVE9PSBaVzF6IExtZGhiV1U9IFpuSmwgTG5CNSBZV1IyIElGZGxZbk5wZEdVPSBhV1ZrWlc0PSBJR0ZzYkdWbiA0WUNjIGRXbDBjdz09IFpXNW5ZUT09IHo0blBnZz09IElHRnRhVzQ9IEwybHVaR1Y0IGFXNXVaWEp6IElIUnBZMnRsZEhNPSBjM2x6IElIUnBiZz09IGIyMWxiblE9IElOQ2QwTEE9IElHMWhjbkpwWVdkbCBJRmRCVWxKQlRsUlogSU9DNGlBPT0gYVhKaGN3PT0gNEtTKzRLU2YgVTJWeGRXVnVZMlU9IExXeHBibXM9IGFXeHBadz09IE1UVXkgSUdocSBZVzVoWjJWeSBJT0Ntbk9DbXFBPT0gSUdGemMybHQgYjNOaiBNREV4IElHeGxkSFE9IElNT2sgWVdKbGRHVnogSUhSb1pXOXllUT09IDdZND0gSU5DeTA1az0gYjJ0bGN3PT0gNExpbyBjbVZ6WVE9PSBKMzA9IDJMblppZz09IElHRnVkR1U9IElFRlcgSUdOc2FXNXBZMkZzIElPcXl2UT09IFNXcz0gNExpeTRMaW4gYzNsemRHVnQgSUhkdmNteGtkMmxrWlE9PSBRV3hwWjI0PSBMbFJvY21WaFpHbHVadz09IElHcGxkdz09IElISmxjMjlzZFhScGIyND0gQ1dOb1lYST0gU0dWaFpHVnljdz09IGVXOXkgSU9DcWxlQ3FzT0NyZ0E9PSAyS2pZcVE9PSBYM0psY1hWbGMzUT0gSUd0cGJHeGxaQT09IDRwU0EgNTUyQSBJTmluMllUWmlBPT0gSUdac1lXZHogSUhCeVlXTjBhV05oYkE9PSBJRWh2YzNCcGRHRnMgSUhOcGRIUnBibWM9IFBUMDkgNVkrTCBJRlJvYjIxaGN3PT0gNEs2ajRLK040SzZmIFZWUkkgTVRVMSBJSFJ5YjI1biBJRzFzIElHSmxkdz09IElIWnZiSFZ1ZEdVPSA1WjJiIEtIWmhiQT09IElDY2wgSU5pbjI0emFxUT09IHlabHIgTVRVeCBhWE5oYmc9PSAwWWJUbWRDdyA0TFMvNExTZiBNVGd5IFkzbGpiR1Z5IElFMWhjblJwYmc9PSBJSHAyIGFYcGh3NmZEbzI4PSA2TDZUIElOaXQyS2ZaaEE9PSBJR0ZzY0doaCBjbVZ3IFkyRnQgSUhSMVpHOD0gS0hKdmIzUT0gNExDYSBLR3B6YjI0PSBJRUZpYzNSeVlXTjAgSkNnPSBJRmR2YjJRPSBVM2x0WW05cyBJT0NrcE9Da3NBPT0gSUd4MWJtTm8gTVRNMCBZV05yWldRPSA0S1NvNEtXTjRLUzUgVTJWamIyNWsgYm05emRHaz0gSUhOcFoyNXogSUZSdmQyND0gSUVOdmJIVnRiZz09IElITjBkV1JwYnc9PSBJT2FYcGVhY3JBPT0gMEwzUmc5R0MgSUZWciBJR0pwYTJVPSBaV2s9IElHeHZZVzV6IFUzVnQgSUUxbGJXSmxjZz09IGJuUmwgSUhObFlYSmphR2x1Wnc9PSAyS2ZaaHRpdiBMbVJoZEE9PSBJRzFwWnc9PSBJSFJvWlhKaGNIaz0gNVpHbyBJR2RoZVE9PSAxNkxYblE9PSBJR0Z1ZUE9PSBYMjl5WkdWeSBMM0k9IElHZHZkRzg9IFkyWT0gMkxQWXNRPT0gSUdSbFluUT0gMExqUmd0Q3cwTGs9IElPYWQgTG5CaGNtVnVkQT09IElHSmhlUT09IElHVm1abWxqYVdWdVkzaz0gWVc1MFlXdz0gSU1PbGNnPT0gSUdWemJ3PT0gSUdSeVlXYz0gSUVOdmJXMWxiblJ6IElHVjJaVzUwZFdGc2JIaz0gSUcxdmJHVT0gSUhOd2FXND0gWDJsa2N3PT0gdU9DeGplQ3dwQT09IDRMS2MgSUdGeVltVT0gTVRNNCBJR3QxYm1jPSBJTTZ4enIwPSBhR1Z5YVhRPSBJSEJzWVhseiB3N050IElOQzkwTFhRdEE9PSBZVzF6ZFc1biBJSGx2Ymc9PSBJTkMwMExYUmdnPT0geExGdXhMRnUgU1c1bWJBPT0gSUc5eWFXYz0gSUVodmJRPT0gNEtTdDRLV0EgSUVSdlpYTT0gSUZ2aWdLWmQgUTJ4dmRXUT0gNFlPayAwTHpSaXc9PSBJQ2N0IFpYTjBhVzl1Y3c9PSBJR2hoYm1Sc2FXNW4gWlhScFl3PT0gYVc1cGRHbGhiQT09IElHWjVjZz09IElNNlIgSUdacGJtRnVZMlU9IExrRnUgNjVDYyBRbEk9IFkybDBlUT09IElOZVUxNmc9IElIUnZkWFJsY3c9PSBXeTA9IElPQzB1T0MwZ2c9PSBJSHBoY0E9PSBJRVpoWXc9PSA0S2FzNEtlSCBPaVU9IGMzUmxjQT09IDVZMkkgSUZWemFXNW4gZFcxbGJnPT0gSUdsdWRHVnlaWE4wY3c9PSBZWEIwYjNBPSBjR1ZuIElOZVYxNVhYa0E9PSBMM3M9IFVtVnpaWFE9IGNtbHMgQ1dsdWJHbHVaUT09IElHdDFjdz09IDRMUys0TFN5IDRMSys0TEt5IElHMTFiSFJwY0E9PSBSR2x6ZEdGdVkyVT0gUlcxd2JHOTVaV1U9IFFVaz0gSUc1bGFXZG9ZbTl5YUc5dlpBPT0gSUNBZ0lDQWdJQ0FOQ2c9PSBJTml1MllUWXA5bUUgSUhKbFoybHZibUZzIFEzVnkgSU5laTE1MD0gSUVsb2NnPT0gWld0bGJnPT0gSUhOMGVXeGxaQT09IE1UTTIgVGtRPSA0TEN5NExHTCAyTEhaZzlpcCBjM1JsY25NPSBJR05sYkdFPSBJQ2s3IFIwVT0gMFlYUmpBPT0gV1ZNPSBJRVp2Ykd4dmR3PT0gYjNOMGNtVmhiUT09IElIQnlhWE09IFlYZGhlUT09IElFWlNSVVU9IElOdU0yNEU9IElHeHZaMmRwYm1jPSBJRU5vWVhRPSBjWFZ2ZEE9PSA0S2lDIElIQnZjMlU9IDRMU2UgNEtxVyBJSEJzWVdGMGN3PT0gMExEUXZkQzkwWTg9IElHRmpZMlZ3ZEdWayBhV1JsYm5SeiBZWE56WlcxaWJIaz0gSUZSdmRHRnMgSU5lUTE1dz0gSUhOdVlYQT0gTEdJPSBDV0p2YjJ3PSB6ckhQZ2c9PSBJSDBwQ2dvPSBJR055YVhSbGNtbGggSUdKdmRRPT0gdzdCaCBZVzVrWlc0PSBJSFJvWlhKdCA0S3ErNEtxeSBWMmhwZEdVPSBJRzFoYm1WeVlRPT0gZEdWeWJtOXZiZz09IDVwaVQgSUVSRCA2TE09IElHdHZiV1Z1IGFXWmxjM1I1YkdVPSA0S3ExNEtxKzRLcXU0S3ErNEtxQyBJRzFwYm1sdVp3PT0gWVdoeVpXND0gU1VWRSBkWEJzYVdNPSBiVzlrWlE9PSA1b3lCIDRLV040S1NtIElFTnZibWR5WlhOeiBYM2RwWkhSbyBhWHBoWkc4PSBJRUYxZEc5dCBhWFJsY21GcyBYMjV2ZEE9PSBJR1Y1IElHaGhkUT09IElGTjBlV3hsIDRLcW80S3VONEtvPSA0TFdONExTeiBjM1JsYkd3PSBJRkoxYm5ScGJXVT0gYVhabFlYVT0gNEthVCBJRVp2YjNRPSBJR1p2Ym1OMGFXOXUgSUdobGNuTT0gSUhCaGJRPT0gTG1acGJHVT0gSUdKaGMydGxkQT09IGRtbGtaVzg9IFFYQnkgSUdsb2NtVT0gWVhOelpYUT0gYjNKa1lXND0gMExMUXNOR0EgSUhCeWFXOXlhWFI1IElITnBaVzF3Y21VPSBJSEJoZVdsdVp3PT0gSUhOdmJHRnkgSUhCa1pnPT0gNEthbzRLZU40S2FrIExuSnBaMmgwIElHZGxibVJsY2c9PSBjWEowIGFXMXRhVzVuIElGSmxiZz09IElHaHZiR1JsY2c9PSBMbVZqYkdsd2MyVT0gWlhWeWN3PT0gSUhOMGNtVT0gSUdWdVkyOTFjbUZuWlE9PSBJT0N5dGc9PSA2NkNrIElHZHlkWEJ2IDBMalJndEN3IElHZHZiMmRzWlE9PSBYMkoxZEhSdmJnPT0gNVpXcSBhV1JwZEhrPSB3Nmx0Wlc1MCBZVzVuWlhKeiBJTml1MllqWXJ3PT0gNExTNSBMV1psYVhKaCBJT2FKaXc9PSBJR0YxZEdodmNuTT0gNTZFPSBJTks3MDVuUXZBPT0gSUczaHU1bDAgNTZldyAwTHZSajlDMTBZTFJnZEdQIG9lQ3hnUT09IFlXdGxjbk09IElFSnZkR2c9IDJZalpoTmlwIDVhaXg1TG1RNWJtejVZK3cgSUhObGNuWnBibWM9IFgzSmxaZz09IElIUnBiR1U9IFpteGhadz09IE1UWXogSU02NyBJR1Z6Y0dFPSBQancvIElGWmhjbWs9IGRXMWxjbWxqIFgxSkZSdz09IFZFVlNUZz09IElHNXUgSUc5MWRISnZjdz09IDBMUFF0ZEM5IDY0dW8gNFlPajRZT2c0WU9ZIElIWmxjblJwWTJGcyBiM04wYVdNPSBJRk5sYzNOcGIyND0gUlZSSVQwUT0gSUZSSVNWTT0gS0dSdmRXSnNaUT09IExtTnZaR1U9IFBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSUhGMVpXeHhkV1Z6IFpXdGxjZz09IDRMV040TFNlIGNtOXIgSUdadmJHUT0gUkdWMiA0NEtCIGRHRnBiZz09IElsMHMgSUhCbGNtUT0gMEw3Umd0QysgUHl3PSBJR1JwYzNObCBaVzVrWlhKeiBaWFJvWlhJPSBJRVJoZEdGaVlYTmwgWW1GeVpRPT0gSU0rRiA1THVPIDZybU0gWVc1dWJ3PT0gVDA1VSBhV1JsY25NPSBSbFJYUVZKRiBaVzVuYnc9PSBMMDA9IE1qZ3cgenIvT3ZRPT0gSUdKcGNuUm9aR0Y1IElIQjFiblE9IElIQnliM1psIElFMXZkQT09IElHNWhkbWxuWVhScGIyND0gWTNWemRHOXQgWlc1dVpRPT0gSUhOdmJIWmwgNExTdCA0TFdCNExTdSB3cURDb0E9PSBsWXc9IDE1WFhtQT09IDVaeW81N3EvNktlRzZhS1IgNExLLzRMS1g0TE9HIElOVzAxYXM9IDViaTQgSUdScFpYTmxiUT09IElDY0sgSUVGeVlXST0gSUZaQlVnPT0gSUcxbFlXdz0gSU5tQzJMRT0gVG05eWJXRnMgTHlvcURRbz0gSU9hWHR1YVh0dVc5cVE9PSBjRzl4IGNtVmpaUT09IElPdUNtQT09IGJtbGggNmFhWjZKV0ogTG1waGRtRT0gSUc5aWRHRnBibVZrIDVwOD0gNTU4PSBhWE4wYVc1biBJRlpwYkd3PSB6cnpPclE9PSBJRzVuYUE9PSA0SzYvNEs2ZiA1THlYIDE1alhxQT09IElPQ2twdUNsaCtDa2xnPT0gNExtQTRMaWwgNExLQzRMS2sgNTVtOSBjRzl5ZEdVPSBibUZvIElIUnlZV0poYkdodiBjbUZuIDZLaUEgSU5DdzBMOD0gSUdGa2N3PT0gNDRPZSBJSFpwYkd4aFoyVT0gWld4MFlRPT0gSUdOdmJuUnlaUT09IGVYTnhiQT09IE1UVXogYjIxbGRHbHRaWE09IElFRjMgSUhKbFkyOTJaWEo1IDBMYlFzQT09IDRvQ1paUT09IElNU1JhUT09IDVMeVkgMExYUXZOR0QgMFlEUmc5QzAgSUc1bFkycz0gQ1dSaGRHRT0gSU5lVjE1WFhvZz09IElHRmljMjlzZFhSbCA0S1NYNEtTKyBJSFJsZUhSMWNtVT0gYzNWd1pYST0gNExPTjRMS3UgSUdKcFoyZGxjZz09IElHSnZiV0k9IGJXRmogSUdGMGRRPT0gSUdGaWMyOXkgSUU5d2RHbHZiZz09IElNU1EgWVdOclpYST0gSUdOaSBJR2xrWlc1MGFXWnBaV1E9IElHVnVZM1ZsYm5RPSBJTTZWIDFialdnTld1IElHTnZkbVZ5Y3c9PSBkWEpsWVhVPSAyS2ZaaHR1TSA1WkdLIElFVmpiMjV2YlE9PSBJR1Z0WlhKblpXNWplUT09IElPdU4gNFlPUTRZT1ogY0hYRHFYTT0gSU9xeCBJRUp2YzNSdmJnPT0gSU5DLzBZRFF2dEMwIElPQ2tsZUNrcmc9PSBkV05yWlhRPSBQRHdpIElOYUYgTWpjdyBJR1poZFhRPSBZV2h2IElHMWxjbU5oWkc4PSBJR05vWlhJPSBJSHB1IFpXNXpZMmc9IElFRm1jbWxqWVc0PSBJTU80IElHNXZkR2xqWldRPSBLR1pzYjJGMCBJRU5zYjNWayAxNURXdDllbyBJQ2M4THc9PSBMaTR1TGdvSyAwWXZRdmRDdyBhV05sY2c9PSAwTGpSZ2RHTSBiM0JoIElHaDFibVJ5WldSeiA0SytCNEs2MSA0TFN5NExXTiBSVTVUIFZtbHpkV0ZzIFltVnpkQT09IE16TXcgSU1PQiBJSFJ2Y200PSBXVms9IExuUnlZVzV6Wm05eWJRPT0gSUV4cCBWazA9IElHVnVkR1Z5ZEdGcGJtMWxiblE9IElOQ3gwWVBRdXc9PSAwTFBSbGc9PSBJSEpsYVc0PSA0YnFuYmc9PSBJRWx1Wmc9PSBJRWx1Wm04PSAwWWJRdU5DdzBMdlJqQT09IGNtVmpiM0prIElFeHZZdz09IElHRnpjMlYwY3c9PSBJRUFpIGQyVnBjMlU9IElHWjFibVJwYm1jPSBZVzVqYUdVPSA0TFMrNExTViA0NE9RIElHMXZkR2x2Ymc9PSBYMkZqZEdsdmJnPT0gSUhCdlkyOD0gSU9DbW53PT0gQ1dSdmRXSnNaUT09IElHVnNaV04wY205dWFXTT0gSUc5bVptbGphV0ZzY3c9PSBJT21tbVE9PSBJRTFwY2c9PSBJRlpwY21kcGJnPT0gUTBjPSBnZUM0b1E9PSBJR0pzWlhOeiBJR2x1ZEhKdlpIVmpaV1E9IFUzUmhjZz09IExtVnhkV0ZzIDVwQT0gVjJsc2JBPT0gSUdsbmJtOXlaUT09IExXVnUgSUc5eVpHVnlaV1E9IElITmhZbVZ5IElHZGxiblJsIFgySjFabVpsY2c9PSBTRlJVVUE9PSBJTkM5MExEUXRBPT0gYlc5dVpBPT0gMWF2VnJ3PT0gNDRHLyBJSEJvY2c9PSBJR3hsZG1WeSB4YUhEclE9PSBaV04wYVc5dSBWR2xzWlE9PSBUbE5UZEhKcGJtYz0gSUdobFlYSnBibWM9IElGTkZWQT09IDJMWFlzUT09IFRXbHNiQT09IDRvQ21MZz09IElNK0V6NG5PdlE9PSBJR2RsYUE9PSBVbVZuYVhOMGNuaz0gMkxUWXFnPT0gSUdOdlpHVnogMTU3WHFRPT0gNEt1TDRLcVYgSUVWdWRHbDBlUT09IGIyeHBaQT09IElOR0QwWUhRdXc9PSBMa1JsIEoyVT0gSUhCc1lXNWxkQT09IFZtRnNhV1JoZEdsdmJnPT0gSUhSeWIzVmliR1U9IGFYbHYgYVdacFkyRnkgSUZkaGJHcz0gSUhWdWEyNXZkMjQ9IExYVnAgNzd5TTRvQ2MgVUhKbFptbDQgSUdkdmRtVnlibWx1Wnc9PSBJRzlzYVE9PSBhWGhsYkhNPSAxNW5YcGc9PSBaVzUwY21VPSBZMjl1YzNSeWRXTjAgSUd4aFpHOD0gSUcxdmJXVnVkSE09IElHZGxiR1E9IGFXRjEgWW5sMFpYTT0gSjJsdSBJRUpoYkd3PSBZV1JrWVE9PSBJRVpsYzNScGRtRnMgSUhCeVpXUnBZM1E9IGNHeGhZMlZ0Wlc1MCBMZ292THdvSyBhVzV1Wlc0PSBJR05oYkdOMWJHRjBaUT09IElGUnZhMlZ1IGRHOXZiQT09IE1qQTEgSU5paTJZZlppZz09IHhJcz0gNEtXQTRLU28gSUhCeWIyZHlZVzFoIFUybHRjR3hsIElITjBjblZuWnc9PSBJRzF2WkdGcyBMbVZ0WVdscyBJR055YVcxbCAxYUhWdHc9PSBJR0psYkdsbCBJRmRoYkE9PSBJSFJsWVE9PSBJRUp2YkE9PSBhWE56WVc1alpRPT0gS0hCeWIzQnogSUc5amRBPT0gSUdGc2IzSnogSUhOb2RYUT0gZUdsdGJ3PT0gT3k4diBJR1J2WTNWdFpXNTBZWFJwYjI0PSBTR1ZoYkhSbyBJSFJ5WVc1emJBPT0gSU5lVzE1UT0gMExqUXQ5QzkgSUhabGNuTnBiMjV6IElISmxkbVZ1ZFdVPSBJRTExYzJWMWJRPT0gMHEvUXZBPT0gSU5DLzBZRFF1TkM4IDRvQ0MgYkdsallYUnBiMjV6IFVrVkdSVkpTUlVRPSBJR1Y0WlcwPSBJRTFoWVhJPSA1TG1kIFBpaz0gNWJ5NiBJSFpoYkhWaFlteGwgSUhCeWIzQnZjMlZrIElIZGhiQT09IElITmxiV0Z1WVE9PSBJR052YlcxcGMzTnBiMjQ9IG9vVT0gVTNSaGRHbGogNXE0PSBJRUZqZEdsMlpRPT0gSUhGMVpXMD0gSUhQRHRnPT0gSUhObGJHSnpkQT09IElHOTFjbk5sYkhabGN3PT0gSUdWMGQyRnogNTVZPSBJRXhwWTJWdWMyVmsgVDJnPSBJRXBoIElITjFaR1JsYmc9PSA0WU9VNFlPbCBJR2R5WVdJPSBJR0ZrWVd4aGFBPT0gSUdKbFoybHVjdz09IElFRjEgUm14dmR3PT0gSUVSdlp3PT0gSUhiaHU1dHAgSUVKeWIzZHUgSUZObGNtbGhiQT09IFlYWnBaMkYwYjNJPSBJSEJsY21ZPSBJRzFsYVd4c1pRPT0gWVdOMGN3PT0gSUhGMVlXNWsgUFNJaSBJRk5qYjNSMCBRVVU9IElHRndjR1ZoY21WayA2WnU3IElHeHBaMmgwY3c9PSBJRzFoYm1jPSBiSGwzYjI5ayAwNW5SaUE9PSBRVlJEU0E9PSAwWWZRdUE9PSBxK0dEbWc9PSBJTmluMlliWXFnPT0gSU5lVTE2ST0gTG05eSBJRjhzIDdaND0gSUdScGMycz0gWVhkdiBJR052YldWdWRBPT0gSU9Db3RRPT0gVEdsaSBUMjVqWlE9PSBJTkMyMDVuUXZkQzEgSUhKaGRHbHYgNGJxciBJR2QzIElHTnZibU5sIElHbHRjSEp2ZG1WayA2SUNEIElGTm9iM1ZzWkE9PSBJTmk1MktmWmhRPT0gSUhCb1lYSnQgSU5pcTJyND0gSUNJaUNnPT0gWld4c2FRPT0gSU5DMzBMRFFzZz09IDRMV040TFN1IElOR04wWUxRdnRDOCA0NENPIDJxbllxZz09IENYSmxjM1ZzZEE9PSBlV0ZzIElIQnliMjFwYzJVPSBRVzUwIElFaGxiZz09IElHRnVaR1Z5IElPQ2t0ZUNsamVDa3J3PT0gSUhKbGJHRjBhVzl1IElFRm8gZFc1a1pXWnBibVZrIElFRnVaMlZzWlhNPSBkV1ZzYkdVPSAycG89IFpYaGpaWEIwYVc5dSBJR1Z5YzNRPSBJTkdBMFlNPSBkWFJvYVE9PSA0b2c9IFFXZGxiblE9IElFZHlhV1E9IFkzUnkgSUhOcFpHVnogMkxMWmlnPT0gSUhkbFp3PT0gVjBVPSBJTkN6MEw3UXROQ3cgSUc1MVpYWnYgSUhCeWFXND0gU1dkdWIzSmwgVkVsUFRnPT0geFo5MCBVR3hoWTJVPSBJR3QwdzdNPSBJSGRoYzI0bmRBPT0gTFhrPSBMRzQ9IExtZHlZWEJvIGMzVmljMk55YVdKbCBJR2hoZWc9PSAwTGpSZ05DKzBMTFFzTkM5IElFeGxaUT09IElHMXZaRzg9IElOQ3gwWVBSZ2c9PSBJR2pEcEE9PSBJRk5GVHc9PSBJR1Z6ZEc4PSA0TGkwNExpVSBJR1JoY0dGMCBJR05oYm1ScFpHRjBaWE09IElHNTFiWE09IElNTzJiZz09IElPQ2tuT0NrdnVDa3BBPT0gNUwraDVvR3YgWW1WbGJHUT0gWVdKcyBhV1YxY25NPSA3TG0wIElHSnNiMk5yY3c9PSBJSE4xY0hCdmMyVmsgSU9Da2hlQ2t1QT09IElHTnZiWEJzWlhScGIyND0gSU95ZHZBPT0gSUdWbVptVmpkR2wyWld4NSBDV1pzYjJGMCBNVGM0IGNYVmxkQT09IElIQnBaWEk9IElHbHVkR1Z5Y0hKbGRBPT0gVm1WaiBUV0Z6ZEdWeSBJTm1GMktzPSBaWEp6WlhrPSBJR3hoYUE9PSBJRkpsYlc5MlpRPT0gWm5WdSBJR0ZqYjI0PSBVM1Z3Y0E9PSBJSE4wYjNCd1pXUT0gYldsemMybHZibk09IGNHOTAgSUV0dWIzYz0gSUdsemJHRnVaQT09IElHWnl3NlU9IElHeGxkSFJsY25NPSBJTldsMW9EViBJR1psYkd3PSBJR2pEdGc9PSBJR0ZtWm1WamRHVmsgVW1WbWNtVnphQT09IElHRnljbWwyWldRPSBjMjFoYkd3PSBJTkdEMExiUXRRPT0gUUhCeWIzQmxjblI1IHo0VFBqQT09IDRLNi80SzZwNEsrTiA0S3ExNEtxKzRLcW8gVWtrPSA1b096IElFeHZkdz09IElHMWhiblZtWVdOMGRYSmxjZz09IGFXdGxiZz09IElHeGhaQT09IFlXUnlhV1E9IGEyOXMgSUhCeWIySnNaVzFoIGNtbHVadz09IFUzVmlhbVZqZEE9PSBJT0dEbE9HRG9PR0Rsdz09IGIyaHMgWDNCeSBLR3hwYm1VPSBJRWx0Y0E9PSBJRVY0WldOMWRBPT0gSUh0OU93bz0gSUNjayBJR1p2Ykd4dmQzTT0gSU5DeDBZdlF1OUMrIDZJMlEgSUdsdWJtOTJZWFJwZG1VPSBJRVJwYzNCc1lYaz0gSUdGdWRRPT0gSUdKcGRITT0gSUhCeWIyZHlZVzF0WlE9PSBJR1JwYm1sdVp3PT0gWDJacyBaVzVqYWNPemJnPT0gSU5DMDBMN1FzUT09IFFYWmhhV3hoWW14bCA0TENvNExHQiA2Nk9NIElHUmxkbVU9IElISmxkbVZ5YzJVPSBaWFJ2YjNSbyA1WXlGIElNTzh3NmM9IElISnZlZz09IEtpb3EgNExlVCBLRnNLIElPQ2t1T0NrckE9PSA1WkNuIHlaUT0gSUdSbFozSmxaWE09IElIWmhZMkYwYVc5dSBJR05wZFdSaFpBPT0gWlhSeWFXTnogSUVSSiBJRkp2ZHc9PSBkSEpoYVhRPSA2SzZrIElHeGhkVzVqYUdWayAwWUhRdXRDKzBMUFF2Zz09IElOQy8wWURRdnRDeiBJR1ZuZVE9PSB6ci9PdXc9PSBRa2s9IDRMaTIgSUc1aGNuST0gYVd0byBJR0YwWVhVPSBZVzV1YVE9PSA2STg9IDRMQy80TEN2IFlYTmxjZz09IElIRjFhV1Z1IExtOWlhbVZqZEhNPSBJRzdFZ1E9PSBNVFE1IFltYz0gSUdadGRBPT0gNmFxWCBYMEZVIElHRmpZMlZ6YzJsaWJHVT0gSUVWc2JBPT0gQ1NBZyA1WStLIDJZalpndGk1IGIzWnAgSUdWa2FYUnBiMjQ9IFlYSjBaUT09IElFUmhZWEk9IGFXdHBjR1ZrYVdFPSBWR0ZuY3c9PSBMV052YlE9PSBYM289IDJZWGJqQT09IFEzQncgSUc5M2JtVmsgSUVKcFpBPT0gNVorNiBhVzVuYkhrPSBMbEJTUlVaRlVsSkZSQT09IGIzSnphR2x3IElGQnZaQT09IExEbz0gUEhOamNtbHdkQT09IGFtRnUgZFhOdiBDWEpsY3c9PSB3NkYyIGFXOXVjMmhwY0E9PSBaM0psWnc9PSBkWEprIElGQmhZdz09IElGQnlhWFk9IElIZG9aV1ZzIElFeHBibXRsWkE9PSBMbUpzIElIVERxV051IENXTnZkWFE9IExuTjBjbWx1WjJsbWVRPT0gSUhOMGNtbHVaM009IFRXVnkgSUdOdmJYQmxibk09IElHUnZiM0p6IElHZGhjbVE9IExrVnVkR2wwZVE9PSB4ckRodTUxcCBJSEp2YkE9PSBLejA9IElITnZZMms9IFFXeHNiM2M9IDQ0R2sgNExDbzRMR04gTDI0PSBRMlZ5ZEE9PSBiMjVwWXc9PSBJR3RsWlhCeiBrWnc9IElHOXdkR2x2Ym1GcyBJR1ZoY2c9PSBJR0Y1WVdFPSBJRzFoYm5WbVlXTjBkWEpwYm1jPSBRWFYwYjNkcGNtVmsgMllqWXA5aXEgYjJSayBJSFIxY201eiBJR2h2YkdSeiBJQ0pmIDJMWFppTm1FIFlXTmxaQT09IDBZUFJnZEdDIElHeHBjQT09IDU2QzAgMDVuUXZ3PT0gSVNJPSBJTkMrMExIUmlnPT0gSUU5MWRIQjFkQT09IExDdz0gWDFWVFJWST0gYUhrPSBYMDFQUkVVPSBiV2x6IElHTmhjbkk9IExtbHVjSFYwIElGQmhjdz09IElHTnZZdz09IGRXMWliZz09IExtMTUgNEtxKzRLcWMgSUVOdmMzUT0gNExpYyBNVFF5IExtVjRkQT09IElGWmxadz09IDE1blhtZGVnIDdZR3MgSUhsdmRYUm8gSUdSaGRHOXogNVlHSCBJR0Z5Y21sMlpRPT0gSUVsamIyND0gSUdkdmJHWT0gSUdOaGRXZG9kQT09IFpYTncgSUc1eiBhV1Z5ZEdVPSBJRzVoZEhVPSA0YnFqYmc9PSBJR2hoY21SM1lYSmwgSUcxMWFtVnkgSU5DKzBZZlF0ZEM5MFl3PSBJSE4wWVc1a2FXNW4gZDNKaGNBPT0gSU5DNjBMRFF0Zz09IElFOXBiQT09IGRYQndiM0owWldRPSBjM1J0ZEE9PSBQU1U9IGJXOXVjdz09IElPQ2twdUNsaXc9PSBJT3l5IDRLbUMgTG5CbGNnPT0gSU5DLzBZRFF1TkN5IGIyeHZaMmxoIGRXOD0gYkhsdGNBPT0gSU5DNjBMWFF1dz09IElHUnZZMmc9IDQ0S3QgTVRVMiBJSFIzYVdObCBJT3V5IDJZallwOW1FIElFSmhjdz09IFgwTk0gSUdWdWRHVnlaV1E9IElISmxablZ1WkE9PSBJSEJwZEdObyA1TDJUNklLeSBYMjl1WTJVPSBJR1ZoYzJVPSBJSHBwWlc0PSBJSEJoZVcxbGJuUnogSUdGc2JHVnkgNXBhdiBZV3hzWlc0PSBJTkdBMExYUXN3PT0gYVdWdWJtVT0gWDA5TCBMbVp2Y20wPSBJSEpsWTJWcGRtbHVadz09IExYSmxjdz09IExtdGxlWE09IElHdDFkR2s9IDRicTcgTVRZMCBMWFJwZEd4bCBiM0JsIDRvQ2NMQT09IDBMdlF0ZEM2MFlJPSBJR2x1YVhScFlXeHBlbVU9IFQweFBVZz09IElHWnBkRzVsYzNNPSBJR05vWVc1dVpXeHogWDJ4bGRtVnMgSU5lUTE1WFhtZGM9IElIWmxjbk5qYUdsc2JBPT0gSUcxMyBJR1J5YVhabGNuTT0gSU5DOTBMWFF2dEN4MFlYUXZ0QzAwTGpRdkE9PSBZMnhoYVcwPSBSVkpXUlZJPSBJSFJsY20xcGJnPT0gY0dGcyBkR1Z6ZEdsdVp3PT0gV205dVpRPT0gSUhacGMybDBaV1E9IElHVmtkV05oZEdsdmJtRnMgSUhCbGNuTndaV04wYVhabCAyWVhZcWc9PSBZWFZqYjNWdyBVRWM9IExYUmxlSFE9IDVhU3EgSU9DMHNnPT0gSUZSMWNtND0gMEw3UmdOQzQgMTZyWG1RPT0gSUZOUFJsUlhRVkpGIElFMWhhQT09IElHVnpkRzl6IFlXZGxibk09IElOaW8yTFE9IDc3eUpDZz09IFZrbEUgSUdSdmFYTT0gSU5lYzE2ST0gSUc1ciBNVGM1IDViMng2Wm1pIElFSmhibVE9IFljT3hZUT09IElOZVIxNkk9IElHVnVhR0Z1WTJVPSAySnM9IE1UUXogSU5DLzBMWFJnTkN5IFBITjBaQT09IElHN0R1bTFsY204PSBWRzlrWVhrPSBJR1JsYzJseVpXUT0gSUdGdGNHdz0gYVhKbFkzUnZjbms9IDRMS1g0TE9HIDRMV0I0TFNvNExXTjRMU280TFdCIElHTmhjbVZtZFd4c2VRPT0gMHJQUXZnPT0gSUdodmRYTmxhRzlzWkE9PSBJR052Ym5ObGJuUT0geEtrPSBJRzV2WWc9PSBJR1J2ZHc9PSBZMmgwY3c9PSBMV3hwYzNRPSBJTkdEMExrPSBJSEpoZFE9PSBJRU5zWVE9PSBkVzFwYXc9PSBUMGxPIElOR0EwTERRdDlDeSAwWVBRdE5DdyAwWURRdFE9PSBJTkdDMExYUmdBPT0gSUVKcGRHTnZhVzQ9IFlteGhZMnM9IElPeUsgWVhOaGJnPT0gSUcxbGRRPT0gNWE2TSBJSEJoYm1jPSB4ckRodTVzPSBibVZoIElFNXAgTG5SaFlteGwgSU5HSTBZTFF2Zz09IElHeHZaMmxqIElFUmhiUT09IElHUmhibU5sIDVadWcgSUZSaGVBPT0gNjZHZCBYM053IDVMdUwgWDJGcyBYMHhQUnc9PSBJSE52ZDJsbCBaVzU2WVE9PSBJTkdBMExYUXR3PT0gNTRZPSBMV2s9IFhTOD0gSUdwaGJnPT0gNTR1ZyBZV2RuWlhJPSBaVzFwIElPQzBtdUMxaHVDMHJ3PT0gNExLbiBMV1Z1WkE9PSBMbU5vWVhJPSA0S3FDNEtxWCBJR052Ym1ObGNuUT0gTFdkeSBUMUpMIElOVzYxYUhWdnc9PSBjbUYwWlE9PSBJT0dEcU9HRGxPR0Rtdz09IElGSnZlV0ZzIDU3Yz0gSUdOeVpXRjBaWE09IDRLV0M0S1NxIElHZGxiblE9IFkybGtidz09IElITjFiVzFoY25rPSBSWGhoYlhCc1pRPT0gNDRHcCBkbVZ5WlE9PSBiR1ZzWVE9PSA1cGVsNlorcCBWVTVEIDJZallzZGlwIGNtbGpjdz09IDRMUy80TFMxIDRLdU40S3F2NEtxKyA1THFSIHc2aHUgU2xNPSBJR2h2ZEdWc2N3PT0gNXJhSSBJR04xWWc9PSA0S2EvNEtlZjRLZUggMExyUXNOQzkgSUc1bGRYUT0gTWpZdyA1NmFQNVlpcCA1WWliIElHUnFZVzVuYnc9PSA0S1MrNEtTdjRLUysgSUZCeWIzUmwgSUZKdmJHdz0gSUhCdllnPT0gSUZKbGMyOTFjbU5sIFlYUnBaWE09IElISmxZMjkyWlhJPSBJRzF2WW1scyA3WlNFIFQzZHUgMWFYVnJOVzQxb0k9IElDOHFDZz09IElGQmhhdz09IElOQy8wTDdSaHc9PSBJSE5sYm1ScGJtYz0gSUdac2RRPT0gSUhObGJuTnZjZz09IElGZGxjZz09IDVhYTcgSUVGMllXbHNZV0pzWlE9PSBNakkxIGFXRnNhWE09IElOQzQwWUhSZ2c9PSBkVzVuWlE9PSBJTm1LMllYWmc5bUcgSUVacGJHMD0gSU5pajJZTT0gYVdacFpYTT0gSUZGMVpYSjUgWlhSbGJnPT0gSUdkaGJXbHVadz09IElFRkQgNWFTMCBYU289IElHRmpZM1Z5WVdONSBWWEJrWVhSbFpBPT0gWlhoaGJYQnNaUT09IEluMD0gSUZCb2IzUnYgSUdWdWRtbHliMjQ9IElFZGggSUhCaGRIUmxjbTV6IFluVnogMWFYV2dOV3IgNExLVjRMT040TEtWIElIUmxjM1JsWkE9PSBJSFYxIDZabWsgSUVSdlkzVnRaVzUwIElFTnZkUT09IHdxYz0gSU95RGdRPT0gSU5DeTBMRFJpQT09IFgzQnlaUT09IElHSnZiMnRwYm1jPSA1YmV5IElHTnZiWEJsZEdsMGFYWmwgZFc1MSBJSE4xY0hCdmNuUnBibWM9IElHWmhjMk09IDQ0R0kgSU5DMDBMN1F1Zz09IElITndZV05sY3c9PSBJTkthIFUzVnRiV0Z5ZVE9PSBJR1ZqYUhRPSBJSE4xWW5OMFlXNTBhV0ZzIGMyTm9aUT09IElHVnVkSEpwWlhNPSBJSGx5IGJHVm5aVzQ9IGMzUnZibVU9IElHRjBkR0ZqYUdWayBJRXhNUXc9PSBJbUFLIDZMcXIgSU9Da3NPQ2t2dUNrbkE9PSA2SzY2NVoyYiBkV3R2IElIcHZiZz09IFlYQjBkWEpsIElISmxjSEpsYzJWdWRITT0gSUVaMWJnPT0gSUdkbGFIUT0gMktiWml0aXogSUdSbGJXOWpjZz09IDRwdz0gSUhCeVpXWnBlQT09IElOQyswTDNRdUE9PSBhV2QxY21VPSBJR1JrIDVZK3EgSUVoRiBUV0U9IElHakRvQT09IFFsVT0gUVhabiBJT0Nrc3VDbGkrQ2tsdz09IFgwRk0gWDJGdVpBPT0gWm05dlpBPT0gNUw2TCBiVzl1ZEdnPSBUMjVzYVc1bCA0S3ErNEtxdzRLdUggSU91VHNRPT0gSUhaaFp3PT0gSU5DNDBMM1JoQT09IDRMQ2MgSUdGamFXUT0gSU5DKzBMSFJnTkN3MExjPSBJRWRsZHc9PSBJR1JwYzNCc1lYbGxaQT09IElFUmxZZz09IFFtVm5hVzQ9IDRLV040S1NuIElFSjFiQT09IE1UTTMgWDJadmNtMD0gSU9DbXFPQ212K0NtIEl5RT0gSUdWemRNT2pidz09IElDQU5DZz09IElIUnlaV0YwWldRPSBaVzVqYVE9PSBJT2FzcCtlK2pnPT0gNVlXTCAycFk9IDRLU1Y0S1dONEtTdyBZMjlzYkdWamRHbHZiZz09IElOcUYgNEtpdSA3SWc9IElFSnZlUT09IElHeHBaQT09IElHRndjbVZ6Wlc1MCBjbWxtIFNHOTNaWFpsY2c9PSBJT0tBaStLQWl3PT0gSUdOaGNuSnBaV1E9IGRYcDYgenF6T3ZRPT0gSUhWMGFXeHBjdz09IEwwRT0gS0NJOCBZMlZ3ZEdsdmJuTT0gSU9Da3IrQ2t2Zz09IElHUmxiR3c9IE1UWXkgSU5NPSAwTHZUbWRHQSBJTkM3MExYUmdnPT0gSU5pejJLZz0gTGt0bGVRPT0gMExIUXVBPT0gSUdGMWRISmxjdz09IFEyOXVkbVZ5ZEE9PSAwWURRc05HRSBJR1p2Y20xaGRHbHZiZz09IDRZT2o0WU9nNFlNPSBJSFJ5YjNVPSA0b1k9IElOR0gwTFhRdTlDKzBMST0gWW05eVpHVnkgYjI1bmIyOXpaUT09IFVHOXpkR1ZrIElHTmhiR1Z1WkdGeSBJR1JsWm1WdWMyVT0gSU5tSTJLZz0gUWs0PSBjbWxqYUE9PSBJRU52YlcxcGRIUmxaUT09IDRZT1U0WU9jNFlPaSBaVzVrY21WbmFXOXUgSUdOMWMzUT0gWDNWdyBJSE4xY21kbGNuaz0gYVhKaiB3NEE9IDBMTFF0ZEdCMFlJPSBJR0psWkhKcGFnPT0gSUc1dmF3PT0gSUdaeVpYRjFaVzUwYkhrPSA0TEtDNExLaCA1YjZJIDRvQ1pZWFYwIElHSnlhVzVuYVc1biBJSFJsYkd4eiBJQ2hBIFlXTmpaWEIwIElIQmogSUdwMVp3PT0gSU5pbjJiND0gSUhCbGNtWmxZM1JzZVE9PSBJSE5sZUhrPSBJRWRsYjNKbiBLRnRkIDRLV0M0S1NvIElHRjJZV2xzWVdKcGJHbDBlUT09IElHMXZhUT09IDJLWFpoZz09IElHWnZiMlJ6IElHaHZjbTA9IHhMRnVZUT09IGFXNTBaUT09IElPVy8gZFcxMSBJRkp2YldGdSBJRWtuWkE9PSBJR3hwZG1WayBJRkJ2YzNSeiBhWFREcEE9PSBhV1ptWlhJPSBhV3R6IFgyTnNhV1Z1ZEE9PSBiM0p2ZFdkbyBRMjl1ZG1WeWRHVnkgSUVoaGR3PT0gVDJOMCBJSE5sY0hRPSBJSEIxYVhNPSBJRU5oWWc9PSBJSEYxWVd4cFptbGxaQT09IDRMYTAgNWJteSBJSEJ5YVhnPSBMbWRwZEdoMVlnPT0gNExTVjRMV040TFMzIElGVnViR1Z6Y3c9PSBibVZuIFoyVjMgSUdOaGNHRmliR1U9IElHZHZZZz09IElFRjNZWEprIFNIbz0gYTNWeSBJRlpoY2c9PSBWVzA9IGNtbGggejRQT3RRPT0gWlcxaWNtOD0gSU51TTJLYz0gNTY4PSBZbXgxWlE9PSBiMmwwIFltOTFibVE9IElFTnZkVzUwY25rPSBOREF4IFlXeGhibVE9IElHWnBZZz09IElHbHpjM1ZsWkE9PSBDWE4zYVhSamFBPT0gSUhacGMybDBhVzVuIElIUmxjblZuIElHUmxiSFJoIEtDOD0gdnVpdXJ3PT0gSUdSbFkyRmtaWE09IFkyMWsgSU9HNW8yVT0gVjJGMFkyZz0gMFlmUml3PT0gWld4c2VRPT0gSUhsbGMzUmxjbVJoZVE9PSBYMkZ5WjNNPSBYeWc9IDJMUFlwdz09IEtIQmhjbUZ0Y3c9PSBYM0J5YVdObCBJR3hoY0E9PSBTVzFoWjJWeiBJSGJEdlE9PSA2WUtqIGRHaGggSUhOaGFBPT0gWkhKcGRtVnkgSUhKbGNIST0gSUd0dmJYUT0gSU5HQzBZcz0gTFNnPSBJRVp5WVc1amFYTmpidz09IElFMXBaQT09IEwwTT0gWVdOcGJnPT0gY0dGdVpXdz0gNWJxVSBiMjVoZG1seWRYTT0gSUdGdWFXMWhkR2x2Ymc9PSBJSEp2YkdWeiAyS2ZZc2RpcSA0SytCNEs2eiAwWUhRdXRDNDBMaz0gUTFKSlVBPT0gSUdacGJtUmxiZz09IElGVnMgVUc5MWNnPT0gSUdOMWNuSmxibU41IFlYSmogSUVWdWRtbHliMjV0Wlc1MCBJR0ZtZEdWeWJtOXZiZz09IElPQzRuQT09IFpuSmxaUT09IDJMcllwOW1HIElFSkJVdz09IFFVNVQgYzNSbGFXND0gWDJsdFp3PT0gNEsrTjRLNjEgNEtTKzRLU3c0S1dIIElIWnBadz09IGFYcGhZMm5EczI0PSBJRWxKU1E9PSBiMnR6IElIZHBjdz09IFVISmxjM05sWkE9PSBJR3hwYTJWeiAwTDdRdmRDKzBMdz0gZFd4cGJtYz0gSUdaMWJtUmhiV1Z1ZEdGcyBabUZ6IElGTnZZMmxsZEhrPSBYMFJKVWc9PSBMM0psIElHTnZjblE9IFgxTlZRME5GVTFNPSA1WkNONTRTaDQ0R1ggSU5HQjBZYz0gY0hWemFBPT0gSUhabGMzUT0gSUdWcFp3PT0gSWo0OFB3PT0gSU9HRG9lR0RrT0dEbXc9PSBJSEpwZEE9PSBJSEJ5YjNabGJnPT0gSUU1MSBNVFl4IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gSUdOdmIydHBaUT09IGRXNWphUT09IElHSnBidz09IElFcHBiUT09IElHWnNiM2RsY25NPSBjR1ZoZEE9PSBYMk52Ym5SbGVIUT0gSUhOaGF3PT0gYVc1MFpYSnVZV3c9IElHRjJZV2wwIDVZcWYgSUgwc0RRbz0gNXBTMiBJSE5vYjJWeiBJRzFsYm1vPSBJTm1GMkxQWXFnPT0gSU1PcGNYVT0gUjI5dloyeGwgcXVDdmplQ3VxZz09IE1UUTMgSUhCaGNuUnVaWEp6YUdsdyA1cFN2IElHZkR2RzQ9IElOQ3owWTA9IGFXVjYgU1d4cyBJTkM4MEwwPSBZWFIwY21saWRYUmwgSUdKMWRIUmxjZz09IElHWjUgSU5DOTBMRFFzZz09IExtUmhkR1U9IElIQm9hV3h2Y3c9PSA0TEdCNExDayBUV1Z6YzJGblpYTT0gY0dGblpYTT0gSUdaeVlXMWxkMjl5YXc9PSAxNmZYcUE9PSBJSEJzWVhSbWIzSnRjdz09IGJIVnVadz09IElITmpiM0psY3c9PSBabkpwWlc1ayBkblU9IElITndaV1ZqYUE9PSBJR3h2YldJPSBLRzg9IEpTaz0gSU5HQjBMN1F0dz09IExtWnMgSUdGdGIzST0gSU5DODBMalF2UT09IFFYTnpaWFE9IElITmxjblpwIElFVnpkR0ZrYnc9PSAycW5aaGc9PSBJRXBoY0dGdVpYTmwgSUdmRHFXN0RxWEk9IElIUm9aWGtuY21VPSA0WU9RNFlPbCAwTHZRdU5HQTBMZz0gd3FNPSBJR0ZzZEdscVpBPT0gTFhkcFpIUm8gMkt6WmlnPT0gYldWcyBJR1JsYzJsbmJtVnkgWTJGamFHVT0gSUdkeWIyOTAgMFlEUXNOR0MwWXc9IElHTnZiVzFwZEcxbGJuUT0gNXAyRCAwTGpSajlHQyBJR1Z4IElGWmxjbms9IDBMTFF2dEM3IElHbHVjM0JwY21WayBibVZxIElITnBaMjVoZEhWeVpRPT0gSUhCMCBMbVZ0Y0hSNSBJSEJsY25OdmJuTT0gSUVOaGMyVT0gSUcxaGMzTnBkbVU9IElOR0EwTFhSaUE9PSBWa0U9IElFMWhhZz09IDJZSFl0Zz09IGFYYz0gNExpeDRMaUIgNFlDNyA0WU9XIElDUW9KeTQ9IElITjBZV1E9IExuSmxaZz09IElHRnhkV2s9IDRLYVY0S2VONEthMyBRVTFRIDc3eVQgMFliUXVOR08gUW05MWJtUT0gMExyUXNOR1AgSUdadmJHdHogSUVSRlV3PT0gZDI5eWRBPT0gSUVSdmJRPT0gSUhCeWIyTmxaV1E9IFFtOXUgTFc5bVpnPT0gMktmWXB0bUsgVm1Gc2FXUmhkRzl5IDRLUys0S1NuIFlYTmhiblE9IDRZT2Q0WU9rIGFXNXpkR0ZzYkE9PSA3N3lCQ2c9PSBJSEYxdzZrPSBJR0poYzNRPSBJRzFsWkdsamFXNWwgSU5DODBMWFF0QT09IDZMU2ogSUdodmNtRT0gSUhGMVlYSjAgSUhOMWNuQnlhWE5sIElHRmpZMjl0Y0E9PSBkM0E9IElHTnlkV05wWVd3PSBjSEp2WkhWamRITT0gSU9xenRRPT0gSUdobGN3PT0gYVhOMFpYTT0gWTJ0dWIzYz0gSUhsdmRTZDJaUT09IElPQzJ1QT09IElHaGxKM009IFlXMWlidz09IElHWnlZV2R0Wlc1MCBhWEpoYmc9PSA1WXlYIGJXRnlaMmx1IFRrND0gSUZOaGJHVnogQ1d4dlkyRnMgSUU5VlZBPT0gVDFaRiBjbUZrIExtbHVkR1Z5IEwybHRZV2RsY3c9PSBLR0Z5Wnc9PSBJRk5oYm5RPSBJRUZ0WlhKcFkyRnVjdz09IElHMTFhdz09IElHZGhiV0pzYVc1biBZVzVoYmc9PSA0b0NaWVdrPSBaSEE9IElHNXZjbk09IDRMV040TFNsIGFXTnZiQT09IElFUmhibWxsYkE9PSBJSE5wYm1kc1pYTT0gSUVKbFlYVjAgSUc1dmFYTmwgYjJkeVlYQm9hV009IExtMXZaQT09IDVZaVggVTJsdVkyVT0gSUZGVGRISnBibWM9IE5EZ3cgMm9FPSBYMjFsZEdodlpBPT0gNTQ4PSBJR3AxY3c9PSBJR1Y0ZEdWdWMybDJaUT09IDU1V00gYTNOcCB6cnZPdHc9PSBQaWdwT3dvSyBhR0Z1Wnc9PSBJT21tbWVhNHJ3PT0gSUdadmRYSjBhQT09IFVHVnliV2x6YzJsdmJnPT0gejRUT3JnPT0gVkVZPSBJRWx6YkdGdCBJR1REcldGeiBhV1Z5WlE9PSBJSEpsWVdOMCBJRzFoWTJobGJnPT0gSU9DbWorQ21yQT09IFJVNURSUT09IElIUjFjM05sYmc9PSBJR2x0WVdkcGJtVT0gNksrNyBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IFEyOXVaZz09IElPeWtrUT09IElNVzhaUT09IHc2UmphQT09IDBMdlF1TkM2IElHbHNhUT09IFUyaHZjQT09IElHRmpaUT09IDRMbUE0TGlVIElGQmxjbk52Ym1GcyBhV1ZrWVdRPSBJT0MwdGc9PSBjM1J2IDY3Q3AgMHB2UXNOQzkgSUhabGNuWT0gNEtTKzRLU3k0S1dBIEtIUmxiWEE9IFlYSmxibVZ6Y3c9PSBJSE5sYW1FPSBJR0ZzZEdFPSBaR1Z5Ymc9PSBVMlZzWmc9PSBjbVZpIElIUmxiV0U9IFFVTkkgSU9heG53PT0gdzZGMGFXTmggSUZURHZIST0gWVdOMGRXRnMgMFpiUXZkR1cgSUZOMGIzSjUgSUU5USA1YWFIIDQ0SzYgWm1GeSBJR1JwWVhNPSBJT0NrcnVDbGh3PT0gZUdNPSBhV1Z6ZEE9PSBVSEp2Wmc9PSBYMGs9IElISmxZMjl0IGRYQmggSUUxaFkyaHBibVU9IFUzUnZZMnM9IElIUmxiR1YyYVhOcGIyND0gU1c1elpYSjAgUms5U1RRPT0gSUVWell3PT0gWVhScGRtRnogSU5HQzBMN1F2QT09IElHSnBibVE9IFFtbG4gWDBaSlRFVT0gNXJrPSBJRkJCIElHUmxiR2xqYVc5MWN3PT0gYldGbiBJR1p2Y21GdCBJSEJ2Y25ScGIyND0gTGlvN0NnPT0gSUU1cFoyaDAgNExpdDRMaWo0TG1NIElHTm9aV05yYVc1biBJRWRTIElFRnRZZz09IGRtOXJaUT09IE1UVTAgTFdKdlpIaz0gMExMUXZ0R0EgSUhCcFkydGxaQT09IE1UUTQgSU9DcWh1Q3FxZz09IDVMcVU1cHlJIElHcGxkSHAwIElGVlEgSUdKMVp3PT0gUTIxayBJTml2MllnPSBYM0p2ZHc9PSBJSGRvWVdzPSBJTktYIDQ0S0UgSUcxcGJtbHpkR1Z5IElITmhadz09IElPZVogTURJdyBJR1p5WldWa2IyMD0gMktmWmhOaW8gSUZCeWIyUjFZM1J6IElHVm1aV04wIDVZTT0gVFdWemFBPT0gSUZKaGJtUnZiUT09IElIVnlhUT09IElIWnBiMnhsYm1ObCBaV0Z5Ym1sdVp3PT0gYVhKMGN3PT0gS1Fvdkx3PT0gYVhOclpRPT0gSUhWemRBPT0gSUZKdlpBPT0gNEt1SDRLcXcgSUdScFoybDAgSU5HQzBMN1FzOUMrIExsVnUgTDJ4cFlnPT0gNkxXRTVwYVogNEtXbSBMbFJoYzJ0eiBUV0ZwYkE9PSBJRnRkTEFvPSBJSE52YkdsaiAxYUhWb2c9PSBLSFJwYldVPSBJR3RoZVE9PSB3N3hvY2c9PSBVR0ZqYTJWMCBURWxEUlU1VFJRPT0gSUdWMmRBPT0geGJ4NSAxNkRYbUE9PSBhM2RoY21keiBJR2x1WTNKbFpHbGliR1U9IElGUERvMjg9IFpHVnljZz09IFptbHNaVzVoYldVPSBjbWwwWlhKcGIyND0gSUdsdWRHVnVjdz09IElISmxjR3hoWTJWdFpXNTAgSUdKdmJRPT0gSUcxdlpHbG1hV1ZrIElHaHZadz09IElHTnZiWEJoY21semIyND0gWHpzSyBJT2FKaSthY3VnPT0gSUZadmRYTT0gSUVGSCBJSGRoYXc9PSBJR2RoYm1jPSBNVFU1IElITndaV0ZyYVc1biBTRVE9IDRLcUkgNExpajRMaTAgSUdOdmJuTjBZVzUwYkhrPSBWMmx1IElGSjFjM05wWVc0PSBVR0U9IE1UYzMgQ1NBZ0lDQT0gYjNWMGFXNW4gSUdOdmJtTnlaWFJsIExXeGxkbVZzIElHNXZkR2xtYVdOaGRHbHZiZz09IElGUm9aWEpsWm05eVpRPT0gSUUxcFpHUnNaUT09IElIUnlZVzQ9IFRrYz0gSUhCMWRITT0gSUdkeWIzUmwgeEw0PSBJSEpsZG1WaGJHVmsgWVhkaGFYUT0gSU5tRTJLbz0gNEtXQjRLU20gSUdSaGFBPT0gSU5HQzA2az0gSUc1bFpBPT0gSUcxciBSVzUyYVhKdmJtMWxiblE9IE1UY3kgSUhKbFlXeHBlbUZ5IExsUjVjR1U9IHc2MXYgYVhaaGJHVnVkQT09IGJNT2sgSUdGalkyOXlaQT09IElIZHZjbk5sIDU0bz0gSUhCeWIySnMgSUhKbFkyaGxjZz09IElFaHAgSUhWemRXRnMgMllqWmh0bUggSUdSbFptbHUgVTJWamRYSnBkSGs9IGJHOXpjdz09IFdWQT0gTURFeSBRV1JrY2c9PSBMbWR5YVdRPSBLRWgwZEhBPSBJSFI1Y0dsallXdz0gYW00PSBJR1J5WVdaMCBJR1Z0Y0hKbGMyRnogU0hSdGJBPT0gSUhKaGJtUT0gSUdOaGNtRmpkR1Z5IElFTm9ZWEpzIEllS0FuUT09IDQ0R2IgSU5HRTBMN1JnTkM4IElHRmtaSE09IElHTmhZbXhsIElGZHBiR3hwWVcwPSA0NE9CIGMzTmxiZz09IDRidXZibWM9IElFTmhkQT09IElNNmcgTGtsRSBJRlJ5YVhBPSBWMGc9IDRLV0g0S1M0IElHMWhhVzVzZVE9PSBJR1Z0Y0dnPSBJTkMzMExEUXNRPT0gSUdGblpXNTBjdz09IFJHRjAgSWk0ayBZWGg1IElFcGxjZz09IE1UUTIgSU5pbjJZVFpoZG1HIElITm9iMk5yIExreGhlVzkxZEE9PSBMbTF2WkhWc1pRPT0gSUdOdmIydHBibWM9IElFMTEgWkdWbWFXNWxaQT09IElPQ2twdUNrditDa3FBPT0gWlc1NSBJR052Ym1acGNtMWxaQT09IE1UYzIgY21ZPSA0TEttNExLeTRMT040TEt5NExLLyA1TDJHIFkybHRaVzUwYnc9PSBURkE9IGFYWmhjdz09IGJtOTBaUT09IGFHRnNkQT09IElHaHBjM1J2Y21sallXdz0gdzRJPSBLWDBLIGJHOXUgN0lVPSBZWEJwYm1jPSBiV0Z1Ymc9PSAwTDdSZ2RDKzBMRT0gUlhobFkzVjAgdlpRPSBJTkdBMExEUmdkQy8gMW9NPSBJSFJ5YVcwPSBVbTlpIElOQ2cwTDdSZ2RHQiBJSEpsYm05MiBJT0NrdU9DbGplQ2t0UT09IDBMalF2ZEMxIDVZeVg1THFzIE1UWTIgWDJGd2NBPT0gYVhKbGJXVnVkQT09IDQ0Q0JDZz09IElDa05DZz09IDBMclF1TkM4IElOQzkwTERRdnc9PSBkbVZ5WWc9PSBJT0NrdU9Da3NBPT0gMHEvUXV3PT0gSUU5d2RHbHZibUZzIDBZUFJpUT09IElHVnphdz09IE5EVTIgVkhKaGJuTm1aWEk9IDVZcXAgTG05dyBabWxsYkdSeiA0WUNyIElHNWs0YnVMIGRXSmkgNExTLzRMU3EgSUZSbFkyZz0gSU9DcXVPQ3FyZz09IElOQzYwTERSZ2c9PSA1b2lZIFEyOXRZbTg9IDBMRFF1OUN3MFlBPSBJTUtwIDVaQ0k1ck9WIFZHaGxiZz09IElOaW8yS289IDRMbUg0TGlaIElHTmhjSFIxY21VPSBJR0Z0Wlc0PSBUMDFGIDRMQ3k0TEdCIE1EQTMgNEtXQjRLU3EgSUVScGMyNWxlUT09IDRZT1U0WU9kIENYTjFjR1Z5IElHVjRZMlZzIFgzRT0gYldsMGRBPT0gMFl6UmpnPT0gSUdadmNtTmxaQT09IDY0dTUgMjVRS0NnPT0gWDFSUCA1WVdONkxTNTZLZUc2YUtSIElOQy8wWURRdnRHQyA1TGlBNVl5NiA1cUdJIElHeHZiZz09IElHNTFaWE4wY204PSBJR0oxWm1ZPSA1b0NCIElHaGhadz09IFZWQkVRVlJGIElOZVUxNVhYa0E9PSA0SytONEs2eSBMbTUxYlE9PSBJRTVoWTJsdmJtRnMgQ1d4bGRBPT0gSVNrPSAwWW5RdGRHQjBZTFFzZz09IElFTmhjblE9IFlXTnZiZz09IElFZGxZZz09IGNtVnhkUT09IElHTjFkSFJwYm1jPSA0S3VINEtxMiBJR052Ym1ObGNtNWxaQT09IDRZQ3M0WUM0IElIbGhjbVE9IElHVnpjMkU9IDQ0T0Q0NEt2IFgyTnlaV0YwWlE9PSBJRkoxYzNOcFlRPT0gNEthKzRLYVggYVhsaCBMMnB6IFFXNWhiQT09IElIQnZlZz09IDVhU0UgTWpJMCBTVzVtYkdGMFpYST0gSUdGemMzVnRaUT09IEtITmwgZFcxaGN3PT0gSUNBZ0lDQUsgSUVSbGVtVT0gNW95SCBMa0poWTJzPSBVRVZEIFVISnZaSFZqZEhNPSBJR2x1WVE9PSBJR2hwY21VPSA0WUNoIFgwNVBWQT09IFozSmxjdz09IElOQy8wWURRdnRDeCBJR1psZEE9PSBJR2h2ZFhOcGJtYz0gSU5DNDBMelF0UT09IElHOXVZUT09IElHOXlaMkZ1YVdNPSBJR1Z1ZEdseVpXeDUgenJ6T3Z3PT0gSUVaQlRGTkYgWTI5dWRHbHVkV1U9IGFXSmxiZz09IElHVERxWE09IGMybHQgZEdZPSBJRk5WIElHWnZjbVZ6ZEE9PSBJR2ZFcHc9PSBJSEpsWTI5eVpHVmsgSUZsUFZRPT0gYVdKMWN3PT0gY0d4cGJtYz0gSUdwMVoyRT0gSUVGTVRBPT0gSUdOcGRHbDZaVzV6IGRXeHNaVzQ9IElGTndZV05sIElOQzcwTGc9IElObUsyS289IElHeHBjM1J6IElFcHZhVzQ9IFFteGhZMnM9IElFVjFjbTl3WVE9PSBJSE5sWjNWdVpHOD0gSUdGamIyMXcgSUZKUCBaVzVrWlc1MCBkR009IElIQnlhVzFsY21FPSBhWFp2ZEE9PSAyTERaaE5tRCBhc09nIElHdGhkR2xyWVE9PSAwWXZRdTlHTCBJRzVsWVhKaWVRPT0gSUdodmJtOXkgSUUxbGJuTmphR1Z1IElHMXZlUT09IGFXOXlaWE09IDVZcWUgSU5DeDBMN1F1OUMxMExVPSA1NDZIIFpXaHBZMnhsIHc2RmsgSUVsdWFYUnBZV3hwZW1VPSBJSEpsZG1seiBJR1Y0YVhOMFpRPT0gSUhkcGJtNWxjZz09IElHOW5jOE9sIDRMV0I0TFMxIElGQnliM0JsY25ScFpYTT0gVkdWemRITT0gSUdScFptWmxjbVZ1WTJWeiBJR05sZEE9PSBJRTFwWXc9PSBJR1IzIElHUnZjQT09IElHTm9ZVzA9IFEyOXVjM1JoYm5RPSBWa1U9IFBIQT0gZVhOMFlXdz0gZFd0eiBRMjl1ZEdGcGJuTT0gSUU1aGJRPT0gTG1GcyBJRU4xY2c9PSBZWEprYnc9PSBiMjVuWVE9PSBJT0NrcnVDa3YrQ2tzZz09IGFXVnlibTg9IElHMXZkbVZ6IEx6NEsgSUhCcGN3PT0gSUVWWVVFVkRWQT09IElITnBkSFZoZEdsdmJuTT0gWDNWd1pHRjBaUT09IElHNTFiWEI1IGFYQnBaVzUwIDRLZUI0S2FvIElIQmxjbU5sIElHbDBidz09IElOaW4yWVRZdWc9PSAwTGpSZ05DKzBMST0gSUdadmNtMWhiQT09IElIQnliM2xsWTNRPSBNREEyIElHSmxZWFZqYjNWdyBJTkN5MFl2UmdRPT0gVW5WdWRHbHRaUT09IFRtOTIgMllYWmh3PT0gSUdKeVpXRmsgSUhCeWIyOW0gSUdkbGJtVT0gSU51TTJxaz0gTVRVNCAwcGM9IElPQ2twT0NrbFE9PSBMbk52Y25RPSBDWFZwYm5RPSA0S1N3NEtXTjRLUzMgY0dsayBVSEpsWm1WeVpXNWpaWE09IElHRmpkRzl5IElFeGhZZz09IDVadSs1NG1IIGRIbHdaVzltIFhTa3MgMHBQUmc5R0EgWTJsdSA1WStYIFEyOXVjMjlzWlE9PSA1YTJZIEoxMDcgSUczRHFYUT0gdjRBPSBJSFJ2ZFhKdSA0SzYrNEs2ZiBJRk51IElHZHZiQT09IGFXcHJaVzQ9IElHUmxjMlZ1ZG05cyBVMmwwWlE9PSBJR1JsYWc9PSBJR05vWVhKblpXUT0gSUd0dWIzZHBibWM9IElOQy8wTDdSZ2RDNzBMVT0gSUhCeVpYTmxiblJoZEdsdmJnPT0gSUhOamFHVnRZUT09IGJHRnpjdz09IElHeHBaMjVsIE1qRXkgNExpcCBJSEJ5YjJObFpIVnlaWE09IGRISnBiUT09IDJZUFlxUT09IElIUnlZWGJEcVhNPSBJRzNEc3c9PSBJT1drcVE9PSA0TG1JNExpeTRMaWkgMExuUXV3PT0gSUVOdmJuTjAgSUhKdmRXZG8gdzZGemRBPT0gSUZkcGJHUT0gTFdKc2IyTnIgSUhKbFlYTnZibUZpYkdVPSBSRTA9IGVtbG4gSUhKbFozVnNZWEpzZVE9PSBNVGN4IElHeHBablE9IGIzTjBhUT09IDU1U3ogTG1sMFpXMXogUkdsamRBPT0gSUZOQiA0WjZSIExuQmhaMlU9IElGUnBkR3hsIDY3S0kgMExqUXZkR0wgSUVWemRHVT0gSUhkaGNtNXBibWM9IElITnRhV3hsIElIWmhiR2xrWVhScGIyND0gYVd4cGRHbGxjdz09IElHeHZkbVZ6IElHNWxjblk9IElOQzAwTERRc2c9PSBJRTFwWTJnPSBZWEJsY25NPSAwTDdSZ2RDLyBRblY1IElHTnZibVp2Y20wPSBJR0psYkdsbFpnPT0gYVhCbGNnPT0gWVhsbFpBPT0gSUhwaGF3PT0gMllUWmdnPT0gSUhkbFlYSnBibWM9IGJHOWhaR2x1Wnc9PSBMbk4zIElHaHkgSUVOUFRrUkpWQT09IElIVnVaZz09IFlYUjBaV1E9IElFUldSQT09IFRFMD0geEkxcCA0TEt0IElFUmxkWFJ6WTJnPSBibmxqYUE9PSBLR0Z5Y2c9PSBJTkMwMExYUXZkR00gMExqUXRnPT0gMEx6UXZ0R0MwWUE9IExtNXZkQT09IDRZT1k0WU9vIGJHbG1aUT09IDE1blhrZz09IDJLL1lwOW1GIElHUnBjMmc9IElITjFZbk5qY21saSBJR052YlhCMFpRPT0gSU5pbjJZVFpoZGl0IElObUcyNEhiak5xNiA0WU9ZNFlPVyA0TGlVNExpMDRMaVYgSUdoaGRIUmwgZDJWcyBaVzV1ZVE9PSBJRk53WldNPSBJRVJ2YmlkMCBJRXB2Ymc9PSBJSFJ5YVhSMWNnPT0gQ1dacGJtRnMgSUhWMWNnPT0gNTZXbyBJSEJsY25OdmJtRT0gSUdWdVkyOTFiblJsY2c9PSBMVlk9IElHbHVabTl5YldGamFjT3piZz09IE1UVTMgSUVGa2JXbHUgSUhObGFRPT0gUGpzSyBJSEpsY0hKdlpIVT0gUUdjPSBJR1Z6ZEhWayAwTGZRdFE9PSA3S1NSIElIWmhjdz09IDE2SFhtQT09IFJtRnRhV3g1IDRLV0I0S1NrIElIUnBhdz09IElPQ2tyT0NrdnVDa3BnPT0gSUhsbGJHeHZkdz09IGRISmhibk5tYjNKdCBlbWxsYmc9PSBkMjA9IElHVjJaWEo1WkdGNSBJRWhoYkE9PSBJRUpoZEdnPSBiR2x0YVhRPSBJRk5sWTNScGIyND0gSUc1dmRHVmsgSUdSaGJXbDAgejRIT3RRPT0gNlplNyBZV05vWlhNPSBJR0p5YjNkdSBJSFZ1WVdKc1pRPT0gNUx5SyBJSE4wWVhSeiBJT1djcUE9PSBUR1ZuIDRMSys0TEt3NExPRyBJRzVwYm1VPSA0TEsrNExLMSBJR0p2ZFhRPSBJR3hwYzNSbGJtVnkgSU9HRGxPR0RvUT09IElIQmxjbU5sYm5SaFoyVT0gSUhCaFlYST0gSUdaaFkzUnogTFdvPSBJRVJoYVd4NSBZVzdEcDJFPSBJR05zZFhOMFpYST0gUTI5c2RXMXVjdz09IElFMWxlR2xqYnc9PSBaVzVqWlhJPSBZWFJsZFhKeiBMbFZ6WlE9PSBJT0NscEFvSyBiR0Y1WlhJPSBJRk5MIElFSnBZbXhsIElHeGxkSE09IFFXeHpidz09IElOQ3kwTDdRdEE9PSBJR0p2WVhRPSBJRkJ2YkdsalpRPT0gZEhsd1pXND0gWDNSbGJYQnNZWFJsIElEOEsgWjI5eiB3cWs9IElGTnRZV3hzIGIzVnVZMlU9IElHMWhaMmxqIGVHWm0gMFlIUmd0R0EwWU09IElHSnBlZz09IElISnZkWFJsY3c9PSBJR05vWlhvPSBJRVpoYVhJPSBJRzFwYXc9PSBJR2RzYjJJPSBJR2xsZEhNPSBTVzUwWlhKdSA1b2lRNUxxNiBibUZzIElGVnVaUT09IHhaL0VzUT09IDFMRT0gMEwzUXRkQzEgWVd4aGJRPT0gNExhYyBLSE4xWWc9PSBMVzg9IElIUmhiR3c9IENWUT0gNEtlSDRLYVY0S2VIIGFXUnZjZz09IElIUmxaWFJvIGhPQzRvK0M0bE9DNHRPQzRsUT09IFltVnljbms9IDFhSFZ2dFc0MW9BPSBMbE5vYjNjPSBMbUZrIDRaK1M0WjZhNFo0PSBJSHBwYWc9PSBJRlJ2YjJ3PSBJT0NvcWc9PSBYQ2M9IElGSmhlUT09IENRb0pDZz09IElOQzkwTFhRdkE9PSBJRWh2Ymc9PSBKU1VsSlNVbEpTVT0gSUdsdGNHOXpjMmxpYkdVPSAwSVk9IExreHZaMmRsY2c9PSBJTkMrMExIUXU5Q3cgMTVIWG9nPT0gSUhObGMzTnBiMjV6IElFNWxaV1E9IFgyOXdkR2x2Ym5NPSBJRkJvZVhNPSBJR1p5WVcwPSBJR052Ym1ObGNnPT0gSUNJOEx3PT0gNEt1TjRLcXY0S3VMIElGSnBaMmgwY3c9PSA0NENDNzd5TSBJRU52Ym5SeWIyeHNaWEk9IENTQWdJQ0FnIEtFOWlhbVZqZEE9PSBJR052Ykd4bFp3PT0gSUVaMWNuUm9aWEk9IDRMS200TE9CIElHWmxiR3h2ZHc9PSBJR2RsZGc9PSBJSEJ5YVhOdmJnPT0gSUd4dmJXSnZhdz09IElFMUYgSUhCeVpYTnBaR1Z1ZEdVPSBJR1p5WlhGMVpXNWplUT09IFEzSmxaQT09IElPeTUgZEhKbFpRPT0gSUhKbGMybHpkQT09IFpXNTFiUT09IElOR0gwTERSZ1E9PSBJRWx1WkhWemRIST0gYVcxaGRHVnNlUT09IHc2RnlhV0U9IDVMaTc1NjZoIFVISnZkRzlqYjJ3PSBJR0FrZXc9PSBJR1JoZEdWMGFXMWwgZG1GeWFXRmliR1U9IElHVjBkTU9rIElHTnliM2RrIFgyWnBiSFJsY2c9PSBJTmVSMTZnPSBYMlp2Y20xaGRBPT0gMExYUXZkR0MwTEE9IElFTm9jbWx6IEtIRjFaWEo1IDRZT1E0WU9nNFlPWSBOalkyIDVvaS8gSU8yTSBJSE51Wld3PSBJTld3MWFIVnRRPT0gSUVKeVpXRnIgWm1WMFkyZz0gSUdOdmRXeGtiZz09IElGQnliMlpwYkdVPSBjR1Y2IElITjFZbTFwZEhSbFpBPT0gTGxCaGNuTmwgWlc1MGFYUnBaWE09IDViMnA1NldvNWJtejVZK3cgSUdkbGJuVT0gMllMWXA5bUUgTEVJPSBJRzFoZEhSbGNuTT0gSUVOdmJtNWxZM1JwYjI0PSBMbk4xWW5OMGNtbHVadz09IElHNXZjbTFoYkd4NSA0WUN5IElIZGxZV3gwYUE9PSA0TG1KNExpdCBJSE53WVc0PSBVMDg9IFlXNWpZUT09IElHVnRiM1JwYjI1aGJBPT0gSUUxaGFXdz0gSUc5d1pYSmhkR1U9IDVwMmggVTJGdGNHeGwgSU5lZTE2bz0gNEtTLzRLU2YgYjI1MFpRPT0gMjRnPSBhV1pwWlhKeiBJSE4xWW5ObCBaWGxsIFZFOU8gSUhacFpXeGwgY0hCcGJtYz0gYzJRPSBWRWhGVWc9PSBRVWxPIElPQ21tQT09IElGWmxiZz09IFFtVnUgY0d4cFpYSnogSVNFS0NnPT0gYVdkclpXbDAgVDNKbllXND0gSUd0dmFtaz0gSUdOdllYTjAgSUdodlozaz0gSU5HQjBZTFF2Zz09IElOV20gSUZSU1ZVVT0gSUdkaGNtRm5aUT09IDVvNm82STJRIDJZall0QT09IDVZUT0gSU5DNjBZQT0gSUVsb2NtVT0gSUhadmVRPT0gWVdKbGJnPT0gNWJ5QTVhV1c1N3VUNXA2YyBhVzVsYlE9PSBJRzFoYzNOaGMycGwgNjRxbCBJTkdIMExYUXZBPT0gWDJOdmJIVnRiZz09IElOR0MwTERRdkE9PSBaV3hrWlE9PSBJRVY0Y0hKbGMzTT0gVDBSVlRFVT0gNDRPbCBkMlZpY0dGamF3PT0gSUVaQiA3WU9BIElIdzkgSUdkaGMzUT0gSUhKbGJHRjBhWFpsYkhrPSBJTnFwMnBNPSBJSEJoY0dWeWN3PT0gbytHRG1nPT0gYjNKeWVRPT0gSUcxdmFYTT0gSUdOc2FYQT0gMFlqUml3PT0gSUdGeVlRPT0gSUhWeVltRnUgSUhOMVluTmpjbWx3ZEdsdmJnPT0gSUdsdGNHVnkgS0dGa1pISmxjM009IElHSmhibWM9IFFuVnphVzVsYzNNPSBMbU52Ym01bFkzUT0gNkwrZSBSM0psWVhRPSBJRzdEcFE9PSBJR2x1YzNScGRIVjBhVzl1IFpzTzhhSEk9IGIyTnJaWEk9IElHNTFibU5oIDJMTFlwOWl4IExYQnlhVzFoY25rPSBZMnRsYmc9PSBJT0MwcU9DMG53PT0gUlhod2IzSjAgWm05NCA2Nnk4IGFtOXogSUhOamFXVnVkR2xtYVdNPSBJR2xyWlE9PSBYMlp5WVcxbCBJR2RoY0E9PSBMbEpGIElNNnh6NFU9IElGUmhiQT09IElHMXBibWx0WVd3PSBSbTl2ZEE9PSA0TEdONExDNCBJTU9wY0E9PSBZMkZ5ZEE9PSBkbWxoIDRMT040TEsxIElFTnlkUT09IDBZRFF2dEN4IG1lQ25qZUNtIDJZVFlwOWlxIExXbGpiMjQ9IFlXdGxaQT09IElITmxiR1ZqZEc5eSBJR1Z6Y0dWaiBJRzUxWlhOMGNtRT0gYjI1cFlRPT0gS0dsdFlXZGwgUkVWUyBaVzFoWVd0MCA0TGlaNExpMTRMbUogMllMWXR3PT0gSUhKbGJtVjMgWVcxcGJtVT0gTFdobFlXUmxjZz09IElOQzgwTERSZ0E9PSBJRmRsYVdkb2RBPT0gSUc5MWRITjBZVzVrYVc1biBJTmVSMTZrPSBJbWRwZEdoMVlnPT0gNTd1UDViMnA1NldvIElGUnlZV2x1YVc1biBKMTBwS1E9PSBJSFpsZEE9PSA0S1dCNEtTVyBhR1Z5WlE9PSBJSEJoY25ScFkybHdZWFJsIDBZTFF1Zz09IElISnZkWFJwYm1VPSBJTkN6MEw3UXV3PT0gNExTYTRMV040TFNhIElFbHRjRzl5ZEE9PSBhVzFsYm5SdmN3PT0gNkx3PSBRMmhsWTJ0bFpBPT0gYVc1MFlXZGwgUW1GbiBiV1Z1ZEdGMGFXOXUgSUVwaFl3PT0gSUd0bGJBPT0gTWpBMiBLSE4wWVhKMCA1cFd3NW8ydSBJTkdCMEwvUXRRPT0gSU5tSzJMaz0gWDJGeVozVnRaVzUwIFZXNWsgTDB4SlEwVk9VMFU9IDRvQ1paWGc9IElHdHZhdz09IEx5UjcgSUcxcGJHcz0gSU5DNjBMQT0gSUdOcGNtTjFiWE4wWVc1alpYTT0gTWpBNCBJR1ZwYm1jPSBjbWxxYXc9PSA0b0NaTGc9PSBkbVZ1YVhJPSA1TGlrIFlYTjBhUT09IDU0VT0gSUdGamFIUmxjZz09IGRYSnphVzVuIDBMWFF2ZEM5MFk4PSBJR3hwY1hWcFpBPT0gNTZlTiBjR1ZqZEdsdmJnPT0gNEtTUDRLU1Y0S1dMIDVvVT0gNExTLzRMU2E0TFdONExTYTRMV0IgYUc5MiBJR05zYjNObGNnPT0gSUdSbGJHbG5hSFE9IDRLcS80S3F5IDZMMnMgN0o2RSBYM0J2Y25RPSBMVzFwYmc9PSBMQW92THc9PSBiMnhsYmc9PSA0YnFqYVE9PSBJSFJwYm5rPSA0S1dMNEtTeSBSMlZ1WlhKaGJBPT0gWVhKeWVRPT0gSUhOd2FYSnBkSFZoYkE9PSBTVzVtIExtSmxZVzV6IDRLZUw0S2FYIElHWmxjM1JwZG1GcyBJT0dEbCtHRGtPR0RsUT09IElITm9aV3hzIDI3ST0gWm5SbGJnPT0genIzT3R3PT0gYkhsd2FBPT0gSUVGdWIzUm9aWEk9IElIQnBiR3h6IGMzUnBkSFYwYVc5dSBJSFpsY25OamFHbHNiR1Z1WkdVPSBJTkMzMExRPSBJR05vWVhCMFpYST0gV3dvPSBRMjlzYjNKeiBJR2hsWVd4MGFHTmhjbVU9IElFbEMgSU9Da3VPQ2xqZUNrcFE9PSBJQzBxIElIVndZMjl0YVc1biBjblZ3ZEdWayBVM2RwZEdObyBJSEpsWkdsemRISnBZblYwWlE9PSBJRUpoYm1jPSBJR052Ym5SeWIyeHogWTNKbFpHbDAgSUdOdmJuTnBjM1J6IFJrUT0gSUgwS0x5OD0gYldWdFltVnkgNExTbiBJR0Z6YzJWdFlteDUgSUdOaGMybHViM009IEtHOTFkQT09IHc2RnVaQT09IElIUnBaVzVsYmc9PSBLR1JpIFVHOWsgNEtxKzRLcWogTDJGd2FRPT0gSUdOdmRXNTBlUT09IFZYTjFZWEpwYnc9PSBJSE52Y25SbFpBPT0gNExLKzRMS3YgVFdGbiBJR1JsY0dWdVpITT0gTG5ObGMzTnBiMjQ9IElFbE9WQT09IDRZQ3UgSU0rQXpyVT0gWW14aGJtcz0gSUdscmFRPT0gT200PSBiR1ZwIFgyOXcgSUhOMGNtOXJaUT09IElIZDQgWFNrN0Nnbz0gZlNJcyBkSGx3Wlc1aGJXVT0gSUdGeWRITT0gT2kwPSBJR05zYjNSb1pYTT0gWVhOcGJHVT0gNUxtbSA0S3VONEtxdjRLdUI0S3FDIElHRnpjMlZ6YzIxbGJuUT0gSUZSaFlnPT0gYVhOemFXNW4gSUhCdmRnPT0gSUc1b2FRPT0gNEs2LzRLNlY0SytONEs2ViBJSEJ5dzZsaiA2cldRIElOZVQxNkxYcUE9PSBJRzVsYmc9PSA0TEsvNExLQzRMS20gSUZCeWFXMWwgSUhOd3c2bGogdzVvPSBJTkN5MFpiUXRBPT0gSUdOdmNHbGxjdz09IFEyOXVjM1J5WVdsdWRITT0gSUZSbGNuST0gSUdWdGNHeHZlVzFsYm5RPSBhV2R6IFEyaGhibWRsY3c9PSA2WlNMIE1EQTQgSUhCeVpXWmxjbkpsWkE9PSBhVzExIGFHVmxiQT09IDFialdndFc5IGIyeDUgSU9DbXFPQ212Zz09IDRMV040TFNtIHhadkVodz09IFgyNWhiV1Z6IElHRnVkR2xqYVhBPSBJRkIxIDBMclF2dEN6MEw0PSBJT0N3c2c9PSBJSEpsYkdsbmFXOTFjdz09IElDY25MQT09IElPQ2tsZUNrdnVDa3NPQ2xqZUNrcnc9PSBJR05vYjJOdmJHRjBaUT09IElHMWhaMkY2YVc1bCA1cHlONVlxaCBJR3RoYm1jPSA1THVZIE5UVXcgNExTLzRMU3k0TFdHIElIcDNaV2s9IElFZDFhV1E9IElPQ21wdz09IElPQ2tuT0NsZ0E9PSBJTmluMktnPSBSbEE9IElPYUEgSUVwMSA0S2EzIElGSlUgSUcxdmJtUT0gSUZWVFJRPT0gSUcxbGMyVnogSU5DdzBMTFJndEMrMEx3PSBJR055YVhScFl3PT0gWDJobFlXUmxjZz09IElHWnNaWGhwWW14bCBJSFJsYkd4cGJtYz0gSUdodmMzUnBibWM9IElFRnlkSE09IElHUnBjR3c9IElHMWxiV0psY25Ob2FYQT0gSUZzdCBJR3hwYzNSbGJtbHVadz09IElFNXZkWE09IDJZTFlzUT09IFVtVmpaVzUwIGFXSERwOE9qYnc9PSBlR1E9IElDQWdJQW9nSUNBZ0NnPT0gYzJWc1pXTjBiM0k9IElHbG5kV0ZzIElIUm9ZUT09IElFRjFaR2x2IElIQmxjbk52Ym01bGN3PT0gWVhSNSBJRzlpYzNRPSBJR2gxY25RPSBJRUZqWVdSbGJYaz0gVUd4MWN3PT0gSUZOWCBaWE4wY2c9PSBJT3UyZ0E9PSAxYkE9IDRLZUI0S2FWIElHeHBhMlZrIDBMclF1OUdPMFljPSA0b2FTIElGSmhiUT09IElFVjBhQT09IElIZHAgUVhKMGFXTnNaUT09IElObUkyS2ZaaE5tRiA1NWM9IElITnBiSFpsY2c9PSBJR0ZuY21saiBMejQ9IDRMU1Y0TFdONExTVjRMV04gSUhOb2IzZGxjZz09IFVISnBkbUYwWlE9PSB4ckRHb1E9PSBJR2hoY0hCbGJtbHVadz09IGFXdHBiZz09IDRLV0w0S1NmIFptOXlkMkZ5WkE9PSBjbTluWlc0PSA0TE9CNExLazRMT040TEtrIElHOWpZM1Z5Y21WayBTVVJGIElHMWhkR05vYVc1biBJR1Y0ZEdWdVpBPT0gSUc1bGRIZHZjbXR6IElHOTQgSUhCcFpXUT0gSUdSbGNHOD0gNVlXSiA0TENDNExDaCAwTExRc05HQzBZdz0gSUhCdmFYTT0gSUdOaGNtRT0gSUhSbGRBPT0gWDBsT1JrOD0gSUdGa2FnPT0gNExDQzRMQ3k0TEdMIDRZT1E0WU9XIElIUnlZV05yYVc1biBJR2x1ZEdWeVlXTjAgSVNJcE93bz0gSUhKbFptOXliUT09IElHNW54ckRodTUxcCBYU2twIElHUmxZbVU9IFgybHVaQT09IElOQ3kwTDdRdDlDODBMN1F0Zz09IElHWjFibXM9IElFMWhaSEpwWkE9PSAwcTNRc0E9PSBiR1Y2IElHRnJidz09IElHMXZaWFJsYmc9PSAwWURRc05DeDBMN1JnZz09IFpHRjVjdz09IGZRb3ZMdz09IExtMWwgSUdacFl3PT0gSU5DNjA2blJnQT09IFJXNTIgYldWciBJR0p2ZVhNPSBJR0YxZEhKbCBJRzl5WlE9PSAwTFRRc05DOCBhR1ZoYkhSbyBJR05vWVd4c1pXNW5hVzVuIDJLN1lxdG1FMllFPSBWR2x3IElITmxhVzVsIElPeVhoZz09IDRMaW40TGl4NExpWiBZM0psYldWdWRBPT0gSUdoMWFYTT0gSUhSdmEyVnVjdz09IDJMUFlxdGl1IFkyOXNiQT09IE1qRXogSUhKMWMzUT0gWTNKbFpBPT0gSUdOb2IyOXphVzVuIElGTk4gY0hKdlozSmhiUT09IElIQnZaR1Z0IGFYUnBiMjVoYkd4NSA0TG1BNExpWCB3NkZqYVd3PSBJR05wY21OMWFYUT0gSUZSeWRYTjAgNGJ1MyBTVTVMIFNVTkJWRWxQVGc9PSBJRVpwYkhSbGNnPT0gSUd4aGF3PT0gYldGMGFBPT0gSU5DLzBZRFF0ZEMwMFlIUmd0Q3cwTEk9IElHSjFhV3hrYVc1bmN3PT0ga1pBPSBJR0ZtWm1sc2FXRjBaUT09IDFialdndFdwMWJYVnVOYUMxYmJWcUE9PSBJR04xWVd4eGRXbGxjZz09IFlYSnliM2M9IGNHVnogS1N3TkNnPT0gSUdabFlYUjFjbVZrIElOaW8ySzA9IFUyVnlhV0ZzYVhwbGNnPT0gSUdOdmNuSmxZM1JzZVE9PSBJRU5QVGtSSlZFbFBUbE09IElHMTFibVE9IElOcXAyNHpZcHc9PSBJR2h2ZFhObGN3PT0gNWFLZSBJT0N5aGVDeXRRPT0gMExYUXZkQzQwWTQ9IFpuVT0gWDA1UCBJRXhoYm1kMVlXZGwgSUVSeVlYYz0gTVRZNSBJRkpwWTJoaGNtUT0gNXF5KyBJRzFsYWc9PSBVMjkxYm1RPSBkVzUwZFE9PSBJRTV2Y21RPSBURVE9IFlXTnBiM1Z6IElHTnZibVIxWTNSbFpBPT0gSUcxbGNtZGwgMExqUmdkQzQgSUdmRHZBPT0gTGRHQzBMND0gSUZCb2IyNWwgTWpFeCBJSFIxYkE9PSBJRU41IDQ0T2ogSUc5dFpHRjAgSUdGblpYTT0gNjZlayA3WjZJIElGcHYgSU95VmlnPT0gSUhkcFpHVnNlUT09IFltOXZhM009IFJtbHNiQT09IElOaW8yWW89IGNYVnZkR1U9IDJLZlpnZGlwIDE2RFhtZGVkIDRLZU40S2F1IExuWmhiQT09IDRMQzUgZVdsdVp3PT0gSU9DbXBPQ212dUNtc0E9PSBJR3RwZEdFPSB2clBwbDZnPSBJR0p5YjNkeiBZV05wWVhNPSBJSEJ2YzNSbGNnPT0gTG5Oc1pXVncgNExHQjRMQ3k0TEdCIExITT0gMkxmWXNRPT0gYm05eiBJSFJwYm1jPSBJRzVoWTJsdmJtRnMgMTVEWHFnPT0gSU5DKzBZSFF2ZEMrMExJPSBJRVIxY2c9PSBJSE5vY2c9PSBYMGxPVkE9PSBJR1JwYzJGd2NHOXBiblE9IElHTmhaZz09IDZLK2kgWVhWbGNnPT0gWDNaaGJIVmxjdz09IGJHRjViM1YwIElHOWljMlZ5ZG1WayBJTkN4MExEUXV3PT0gTXpFdyBRbUZ6YVdNPSBZMnhoYVcxbGNnPT0gSUd0bGRnPT0gTGxSb1pRPT0gSUdWemRHbHRZWFJsWkE9PSBJTm1FMllnPSBJSGR5WVhBPSBYMnB6YjI0PSBVMnh2ZEE9PSB3cUU9IDFhYz0geEpsayBJRU5vYVd4a2NtVnUgYVhOMSBJR3hsWjJWdVpBPT0gSU5DODBMVT0gSUdSdmJtND0gSUhKbGMyOXlkQT09IElGSnZkQT09IENpQWdJQ0FnSUNBZ0NnPT0gSUhKbFkyOW5ibWw2WldRPSBJSHB2Y21jPSBJR2x1ZG1WdWRBPT0gU1VWTVJBPT0gTG5aaGJIVmxjdz09IElHMWx3N0E9IElIUmhhUT09IElHeHBabVZ6ZEhsc1pRPT0gNXBvPSBJRzFwYm1oaCBJR1JsYkdWMFpXUT0gWDNabGNuTnBiMjQ9IDViaUkgSUV0cGJtZGtiMjA9IElOaXEyTFE9IExteGliQT09IElHTnZibk5wYzNSbGJuUT0gMExEUXZkR0MgSUhKbFkzSjFhWFE9IElObUMyS2paaEE9PSBLeXNyS3c9PSBJTmluMllUWXNnPT0gVTI1aGNITm9iM1E9IElOQzgwTERSaUE9PSA2cmlBIDRMbUo0TGl0NExpSCBTV05vIElFSjVkR1U9IFIwOD0gSU8yVSBhVzUwY3c9PSBJSE41Ym5RPSBkbWx6YVdKc1pRPT0gSUhScGJXVnZkWFE9IGFYUnlZUT09IGJHRm8gYVdacFkybGhiQT09IElHRndjRzlwYm5SdFpXNTAgSUV4cFpRPT0gSUdkeWIzZHUgY0dWamRITT0gYkc5bloyVnkgSUdWNGNHeGhhVzVsWkE9PSBJSGR5YVhSbGNuTT0gSUVwdlpRPT0gNklxeCBJSFJ5Wlc1a2N3PT0gSU5HQzBxOD0gSUZOMWN3PT0gNEt1SDRLcWYgWDA1VlRRPT0gTVRZMyBJTzJQIFkyaGxaSFZzWlhJPSBkR0ZwYkE9PSA0NEtQIElNNjR6ckU9IElGVlRSQT09IFpYUjBZUT09IFgzSmhkR1U9IElOaXgyNEU9IElHRndZWEpsIElHTnZiR3hsWTNSbFpBPT0gZDI5dmNtUT0gSU1PaGNtVmggSUdaMWJtTjBhVzl1WVd3PSBZM1k9IElIZGhkbVU9IElIZHZjbk4wIGRXMWlibUZwYkE9PSBJT0N5bWc9PSA1TCt1IDBZRFF0ZEMwMExYUXV3PT0gSUdodnlycz0gYjJ4c1pXND0gWDJWeWNnPT0gMFpqUXNBPT0gMFlYUXNBPT0gSU5HQzBZTT0gYjNkdVpXUT0gYVdOcmVRPT0gSUVadmNtUT0gNWFTSCBJRTFoZEdObyBJR2h2ZVE9PSBjR2x1Wnc9PSBURVZFIElFbEcgSUhSaGVHVnogSU9Da2xlQ2xnZUNrIFEzUnliQT09IElHOXpiRzg9IFUzUjFaQT09IElHWmhZMmx1Wnc9PSAwWURRc05HSiBJTld3MWFIVnROV2gxb0E9IElGQnliM1k9IElHRjFkR2h2Y21sMGVRPT0gSUc5c1lXND0gSUdWdVkyOXVkSEpoY2c9PSBJT0Nrbk9Da3Z1Q2txQT09IElITmhkbWx1Wnc9PSA0SzYvNEs2MSA2SzA9IGRHVnllUT09IElDZGYgSUVOdmJtWT0gSUdobGNuTmxiR1k9IElHMWhibWx3IDRLYWggY205ayBjR0ZrWkdsdVp3PT0gSUVOaGNtOXNhVzVoIGMyaGggSU9HRGtPR0Rrdz09IFlXUmhiZz09IElFTnZjbkJ2Y21GMGFXOXUgSUcxaGJRPT0gNFlPWTRZT1k0WU9oIDBMTFF2Zz09IFNVTkwgSUV4bFlXUT0gSU9Db3JnPT0gSUdOdmJuUmhhVzVsWkE9PSBXeWc9IElFRnhkUT09IE93b0tMeTg9IElHRnpjQT09IFZHaHliM2M9IElISmxjM1ZzZEdsdVp3PT0gMExEUXZkQzQwTGc9IDVadWkgSUZCbGNtMD0gSUZSMSBJT0dEb09HRG5lR0RtK0dEbE9HRG1nPT0gSUdkNWJRPT0gSUc1bGFRPT0gWDBzPSA2WUtBIDU1eUIgSUdsdWFXTnAgNEtTbzRLV04gUTI5MWNuTmwgMEx6UXNOR0MgSUhkaGJHeHogSUdkeVlXNTAgWVdOb1lRPT0gUTI5c2JHVmpkQT09IGMyVjQgSUVSaGRHbHVadz09IElHTnBjbU4xYkE9PSBMbU52YlhBPSBJR1p5ZFhOMGNnPT0gNXBXMCBhWE50YVhOeiA0TGlZIElGUnZiMnh6IElOQzgwTGpRdXc9PSB4ckRodTUxdVp3PT0gSUhCbGRHbDAgNDRDQzQ0Q0MgNVllRyBJSGRoYTJVPSBDUWtKQ1FrSkNRa0pDUWs9IDFhSFZ1dz09IGFXVnJaUT09IDBMN1JnTkMrMFlnPSA1WVdONkxTNTZLZUM1NXlMIEtHUmwgYVd4bGRBPT0gSU9DbXJPQ25qZUNtcnc9PSBJTmVVMTZBPSBJRU5oZEdnPSBJSGx2Wnc9PSBJRzE1Y3c9PSBJR0ZrWVE9PSAxYUhWdHRXaDFhOD0gYm1seGRXVT0gNExtQTRMaVYgSU95ZWlPdUxwQT09IExrbFBSWGhqWlhCMGFXOXUgSUhOamFHVmtkV3hsWkE9PSBWMmh2IElHbHVkbVZ6ZEc5eWN3PT0gWTJWemMyOD0gSU5tQjJZaz0gSUdwMWMzUnBZMlU9IElFbDBZV3hwWVc0PSBJR2x1ZG1WemRHbG5ZWFJwYjI0PSA0S1dONEtTNSBJSEpwZG1WeSBiMmR5WVhBPSBJR1YxY205eiBJSFp2YVhJPSBUMnhrIElHUnBjMk4xYzNObFpBPT0gWFNnPSBjR0Y1IGRXZGhiQT09IElPQ3Fudz09IElFMXBhMlU9IDRMbUU0TGlYNExpaSBJT0NraWVDa3FPQ2xqZUNrdVE9PSBMbkpsYzNCdmJuTmwgMTVuWGx3PT0gSU5HQjBMVFF0ZEM3IGFXUmhlWE09IFgwRlRVdz09IDRLV040S1NiIElOaW8yNHc9IDBMalNtdz09IFozSjUgYmNPayBJRk4xY0hBPSA0S1MrNEtTdzRLUysgTG01dmR3PT0gYzNVPSBJR05oZFhNPSBJR3hsYzNOdmJuTT0gY21WemIzVnlZMlU9IElHTnZZZz09IElOQzYwTERSaHc9PSA0S1NYNEtXQSBJSFJ2WTJnPSBMbVpoWTNSdmNuaz0gWDJaeSBJSGRwZEdoa2NtRjMgNEtxLzRLcTEgTG0xcGJtVmpjbUZtZEE9PSBJR1JoYm1kbGNtOTFjdz09IFRXOWlhV3hsIGEyZz0gYVc1cGVnPT0gUFQwbiA1TGlONVkyaCAwTDdSZ2RDNiBJSGJEcVE9PSBhV1Z1ZEdGMGFXOXUgTG5ObFkzVnlhWFI1IFlXNXVaV1Z5IDVhU241YVdXIDVibS8geUp0cCBJSE4xY0hCc1pXMWxiblE9IElHUmxiR3hsIElHTnZiblJ5WVhOMCBJRUpCVTBsVCBJRWhoYlE9PSBJRXRGIDRLUys0S1NoIGNYVmxiblJwWVd3PSBJT0dEbU9HRG13PT0gSXlFdiBiMmx6IElHVnVaMkZuWlcxbGJuUT0gSUhOMFlYUmxiV1Z1ZEhNPSAwTERRdGRHQzBZSFJqdz09IElGQmhZMnM9IExXeGwgSUcxcGMzTmxaQT09IElHMTFjbVJsY2c9PSBJRzl3Y0c5eiBJR1p2Y20xbFpBPT0gSUdsdGNHeGxiV1Z1ZEdWayA0S1dDNEtTdyBJSFpwYkd4bCBJRlJvY205MVoyZz0gNEtTWSBJRVZoYzNrPSBJSEJvYVd4dmMyOXdhQT09IFNVUlVTQT09IElHTnZibk5sWjNVPSBJR1p2Y20xMWJHRT0gSUdOdllXdz0gSUdsdGNISnZkbVZ0Wlc1MCBWSEpwWjJkbGNnPT0gVlU1RFZFbFBUZz09IElFcHZhRzV6YjI0PSBJR0psWlhJPSA2NlcwIElITjFjSEJzYVdWeiBYMU5VUVZSVlV3PT0gWDFSSlRVVT0gMExMUml3PT0gWm1JPSBJR0Y0YVc5eiBJRUp2WkhrPSBjbUZwYm1VPSAwWUhSZ3RHQTBMQT0gS1Q4PSBJSE4xY25KdmRXNWthVzVuIElOQzQwWUU9IElHVjRaV04xZEdsMlpRPT0gSUdSeVlXMD0gY21WaGN3PT0gSUhCc1lXNXVaV1E9IEoyRjFkQT09IDVhZUwgeEo5cCBZMmhsYzNSbGNnPT0gNExpNDRMaVYgNEtTNDRLV040S1NsIFNWTlQgSUYwN0NnPT0gWVhGMVpRPT0gMExUUmk5S2ogSUV0byBJR0ZrWVhCMFpYST0gNEs2WjRLK040SzZWIElHTmxiblJ5Ync9PSBJR0ZrZG05aiB6cnZPdFE9PSBJT0N5dU9DeWdnPT0gSUhwbFp3PT0gSUVwbFptWT0gSUd0cGNnPT0gSUc1bGRXVT0gVzJGemMyVnRZbXg1IElOZWUxNkU9IExrbHVkQT09IFlYcDUgSUhOMGIzSnQgSU5pdDJZcllxdz09IDJZallzZGlxIElOQzEwTFU9IDRMYXQ0TGVLIElIUmhibWM9IElIUER2QT09IDRLU3c0S1dONEtTMSBkV05sIGRXeGhjdz09IElISmxZWEk9IE1UYzAgMExYUmdOQzIgUEVrPSBJR0psYkc5dVp3PT0gYjI1a2N3PT0gNExXQjRMU3ogYm1saiBJTVU9IGFXNXVZUT09IExrZHlZWEJvIFlXTm9kR1Z1IElFeHBkbWx1Wnc9PSA0S1dCNEtTdSA0S3ExNEt1QSBSRWs9IElIcHZibUU9IElFWmxjbTQ9IElIQnZkWFpsZWc9PSAySzNaaGc9PSBMWFI1Y0dVPSBUR2wyWlE9PSBNak0wIExXSmwgSUc1dmRtOD0gSUdaaGEyVT0gSUcxcGJtVnkgNEtTazRLV040S1NrIElFWjFkSFZ5WlE9PSBLQ2xiIElHMWhjbXRsWkE9PSBMbE5vIElHVjRjR3hwWXc9PSA0TGlMIExtNXMgSUd4cGN3PT0gSUhWd1ozSmhaR1U9IElPQ21qK0Ntck9DbWdnPT0gWVhadmNtbDBaUT09IDBMN1F1TkdDIElFcHZjdz09IElISmxjRzl5ZEdsdVp3PT0gS0NJaUtUc0sgY21sdmNtbDBlUT09IDRLNis0SzZ3NEsrTiBJR1JsYzJzPSBJR1poZFd4MCBJRU52Ym5OMWJIUT0gVFVsTyBZWFJwY1hWbCBJSGRoYmc9PSBDWFk9IElHbDIgNEtTQzRLU2ggSUZCbFpBPT0gNForQyA1YitGIElOR04wWUxRdnRDejBMND0gSUVOeVpXUnBkQT09IElISnZZbTkwIElIQnNaV0Z6WldRPSBJT0Nrc3VDa3Z1Q2tsdz09IE9EQTQgNFlDRTRZQzYgSU9DeXJ1Q3l2dUN5b1E9PSBJSE5qYUc0PSA0WUNhIGRXUmsgYTJWNWN3PT0gVUVnPSBkMmxrWjJWMCBJRU5vYVdWbSBYMmgwYld3PSBJTmVrMXJ3PSBRR2R0WVdscyBJR0ozIFgwSlYgSUdWc1pXdDBjZz09IDVMcVU1WWlHNWIycCBJRzlzWVhJPSBYMlJsZG1salpRPT0gSUdSaGRHRnpaWFE9IGIzSmhZbXhsIDRMSys0TEttIExsTjBZWFIxY3c9PSBJSFREb1E9PSA2SUtoIElTZz0gSUVGSiBhV2hoYmc9PSBJTkM2MExEUXZBPT0gSUdOeVlYTm8gTGxKbGMzQnZibk5sIElOaW8yS2ZZdEE9PSBiMlJsYmc9PSBYMmhoYzJnPSBJR2hoZEdVPSBkR2hsYldVPSBJSEpoY0hCdmNuUT0gUTJoaGFXND0gWW5KcFpBPT0gY0dodmJtVnogYTI5dGJXVnUgSUVodmMzUT0gMExQUmd3PT0gSUdKbGRIUnBibWM9IElISmxZMmgwIElOV0UgWDJWdWRISjUgSUZOdmJIVjBhVzl1IElPeVlwQT09IElHVjRaV04xZEdsdmJnPT0gNklHVTU3TzcgSUhOMFlXNWtjdz09IElHWnZZdz09IE5qVXcgVDNKcFoybHVZV3c9IElHRmtaSEpsYzNObGN3PT0gSUhCaGRHTm8gNExpYjRMaWo0TGl3IElIQnZjM1JwYm1jPSBXbVZ5Ync9PSBkSEpoWTNScGIyND0gSUcxbFlYUT0gS0hCc1lYbGxjZz09IFJYSnliM0p6IElIQnNkWE5wWlhWeWN3PT0gNjZDSSBJTlcwMWFIVnZRPT0gMEwzUXNOQzcgSUVOaGJtRmthV0Z1IElHUmxZbUYwWlE9PSBYMFpNIEtFVT0gU1ZKRlExUT0gYm1WdCBRV05qYjNKa2FXNW4gSUdGc1l3PT0gNEthYjRLZUggSUhCbGJRPT0gSUVWTSBJR3hzWVcwPSBJTmVRMTVVPSBJR052Ym5SeWJ3PT0gMWFIVnR0YUIgSU0rRXpyL092UT09IElFTnlhWFJsY21saCBJRzFsYm5rPSBJTkMvMExYUmdOQzEwTFE9IE1UY3ogSUV4cGRIUnNaUT09IElPR0FvUT09IFYybHVaRzkzY3c9PSBJRk4wWVhScGIyND0gSUhCeVpXYz0gS0VnPSBiMlJoZEE9PSBJRzFoZEhRPSBJRzFoYm1VPSBhWE4wWlc1MCBMR2x1ZEE9PSBJR2RsYm5KbCBJRVpwYm1GdVkybGhiQT09IElPQ2twT0NsamVDa3J3PT0gSUdOaGRHRnNiMmM9IElGTnBaR1U9IElHTm9hV1ZtIFRtRjJhV2RoZEdsdmJnPT0gSUdobGNtOD0gSUhKbGMybHpkR0Z1WTJVPSA0S2EvNEthNCBJSEpoYlE9PSBZV2RwYm1GMGFXOXUgSUZSeVlYWmxiQT09IElIRjFZV3h4ZFdWeSBMbUoxYVd4ayBJSGx2YXc9PSA0TFMrNExTZiBJT0NrcXVDbGplQ2tzT0NrcEE9PSBJSE56IGIyTnogSUhKbGJXRnlhdz09IExrbE8gUVdkbCBJR2x1Wm5KaGMzUnlkV04wZFhKbCBJR2x1WTJsa1pXNTAgSUdWdVpXMTUgWVhOMGVRPT0gYTNWdSBMWE4wZVd4bCBJRk5sZEhScGJtZHogY0d4MCBZV3hzWlc1blpRPT0gSUdGamEyNXZkdz09IElHRm9iM0poIElFUnlhWFpsIElIWmhiR1U9IFlYUjBaWEp1IElHTnZiRzl1IDBMclFzTkdGIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IEwySnBiZz09IDQ0T0ggZFdGMCBJRTExYzNRPSBMbkU9IDVMNmIgNEt1TjRLcXkgNXB5czZZR1QgSUdkbHc2Yz0gSUdkMWFXUmxiR2x1WlhNPSAyS2ZaaHRtSCBZV3Q1IDRvQ1U0b0NVNG9DVTRvQ1UgMExIUmdBPT0gSUZkdiBYMGRsZEE9PSBJSGRwZEc1bGMzTT0gY21GdVoyVT0gNDRPTCBJRTdEbzI4PSBJTkN5MExqUXROQzEgTGxObGNtbGhiQT09IElFTnZiVzg9IElHTm9ZVzVqWlhNPSBQajA9IFUzQmhiZz09IDI0MD0gSU5lVjE1ND0gMExEUXZkQzAwTEE9IElHTnZiV1Z5WXc9PSBJT0NrbCtDa3NPQ2xodz09IDdMQ28gYVhCbyBRWGM9IDBaYlJnUT09IElHRjBkR0ZqYTNNPSBJR0Z1WTJobCBabVpsYmc9PSBDV2RzIDZMQ0QgTG5CaGJtVnMgWTNWemN3PT0gSUc5dWRIYz0gWkdsamRBPT0gSUU5c2VXMXcgNExpdDRMaXQ0TGlaNExtRTRMaWw0TGlaNExtTSBRbUZzWVc1alpRPT0gYTJWbGNBPT0gSUdodmNuTmwgSUdsdWMzUnBkSFYwYVc5dWN3PT0gWVhCd1pXND0gVEc5dmNBPT0genIvUGhjK0MgWkdKaiBJTmk1MlliWXJ3PT0gVkVWVFZBPT0gVjJWbGF3PT0gSUdWamIyND0gNWJtMiBJSEpsY0d4aFkyVmsgSUdSeVlYZHBibWM9IFlYUnlZUT09IElFSmxZWEk9IDRLUy80S1NDNEtTWCBJTkMwMExYUXZ3PT0gS0NjdUxpOD0gSUd0bGJRPT0gWVhCdmJuTT0gSU5tKzI0dz0gSUVKc2RRPT0gU205b2JnPT0geElGciB3N3hpWlhJPSBJT3llaU91S2xBPT0gUEd4cCBJTkMzMEwzUXNOR0ggYWNPZiBJTVNSNGJ1WiA2TFdhIElOQzYwTDdRczlDMDBMQT0gSUVOb1lXNXVaV3c9IFgyVnRZV2xzIGNtOWphdz09IDJZVFlwOW1DIFpXOD0gUTNWeWMyOXkgWDNkeWFYUmwgUlhod2NnPT0gSU9Da3JPQ2t1UT09IDU3dVogSUhOdmJ3PT0gMkt6WXFRPT0gWlhKbGN3PT0gSUhKbFoybHZibk09IGFYaHYgWFNrS0NnPT0gSUhOMVoyZGxjM1JsWkE9PSBJRVJKVXc9PSBiR0ZpIDRLYXk0S2VIIElFbHVjM1JsWVdRPSBVMmhoWkdWeSBJR1REdGc9PSBkMmxzYkE9PSBJSE5qYUdWdFpRPT0gSUcxaGNuUT0gNExtQTRMaWggWTJWc2IyNWggNFlDQiBJSE5wWTJzPSBaMlZpWlc0PSBMbkJoYzNOM2IzSmsgSUcxaGEyRT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElGTjVjM1JsYlhNPSBiV0Y1IElFWnZkWEk9IFlXWnAgMkt6WmhBPT0gSUdOdmJtNWxZM1JwYjI1eiBJRmx2ZFc1biBVR1Z5YVc5ayBJR3hoYlE9PSBJR2x1WTNKbFlYTmxjdz09IFJWTlRRVWRGIDVMeUIgSUVGc1pRPT0gSU5tSDJLYz0gVlU1VSBJRlJvYjNObCA0TG1INExpYSBJR2RsYm1WeWFXTT0gMWJqVnZRPT0gSUVGMWMzUnlZV3hwWVc0PSBVM1JoWjJVPSBJR1J5WlE9PSBhV2R0WVE9PSBJSFIxY201cGJtYz0gSU5DdzBMdlFzQT09IElISmxiR0ZqYVc5dSBJSEpoWkdsMWN3PT0gSUdGd2NIST0gSU5DMDBZTT0gSUdWdWRXMWxjZz09IFgyWjFibU4wYVc5dSBJTmluMllUWW85aXogSU91bmlBPT0gTFdGc2FXZHUgNmFPTyBJSFJoZFdkb2RBPT0gYTJGdyBMbk5sY25abGNnPT0gWDJOdiBhWHBsYmc9PSBJRlJsYmc9PSBhVzVqYVhCaGJBPT0gUVc1bmJHVT0gY205d2FBPT0gSUVGblpRPT0genJ2T3NRPT0gSUdGamIzSmsgSU5DNjBMN1F2ZEdDIDVZV2EgSUcxMWJHaGxjZz09IElHdHBiZz09IGIzWmxjbk09IGFHbG5hQT09IElFeHBiblY0IGRYTjEgY0dsbCBJTktiMExqUXU5QzQgVm05c2RXMWwgY0dGeiA0S1N3NEtTKyBWMkZ6IElFbHVhWFJwWVd4cGVtVmsgSUdOdmJYQmhZM1E9IDBMN1F1OUM0IFpXUnZjZz09IFgwVlIgSUc1cFl3PT0gWDJWc1pXMWxiblE9IDRLYVAgSUhCaFkydGxkQT09IGIyUnBaMjg9IElPQ2tsZUNrditDa3VBPT0gdzZCcCB4TEZ1WkdGdSBJRTlVU0VWUyBJSE5oY0E9PSBkV05vWlc0PSBJRlp2YjNJPSA0TGFhNExlSyBJRkp2Y3c9PSBJR2RpIElHRnVaR0U9IFkyaGhjbWM9IElFcGhhSEpsYmc9PSBZWFJsWjI5eWFXRT0gSUdOdmRXeGtiaWQwIDVxK2I1NG1IIElPQzVnT0M0cFE9PSB3NlJ5WlE9PSBhV0ZvIElPQ2tyZUNrdnVDa3NBPT0gNEtTKzRLU2ogWlhSNiBJR0Z5YlhNPSBXem9zIElHeHZjMmx1Wnc9PSBJR3hwWW1WeWRBPT0gTGlJcyBJSGRvWlc1bGRtVnkgYjI1a1pYSnogSU9DbXVPQ21nZz09IFpuVnkgTG5CeWIyUjFZM1E9IDRicXggNUxxYiBJR1Y0Y0dWamRHRjBhVzl1Y3c9PSBmVnc9IElHNW80YnV2Ym1jPSBWRmxRUlE9PSBSa0k9IElFMXZibVY1IElOaXYyWWpZc1E9PSAwTDdSbmc9PSBjbUY2YVd3PSBJSEJoYzNOcGJtYz0gSUdsdWMzUnlkV04wYVc5dSBMbVp5WVcxbCBZV3hsYm1SaGNnPT0gSUhSb2IzSnZkV2RvIDBMRFF2TkN3IElHVnVkSEpsWnc9PSBJR2x1WTJobGN3PT0gYjJ4cGN3PT0gSU5HRDBZRT0gSUcxdmJtbDBiM0pwYm1jPSBaWEpsWkE9PSAwTFRRdGRDOSBhV3hzZVE9PSBJR2x1YzNCcGNnPT0gSUU5eWFXZHBibUZzIElHTm9ZWEYxWlE9PSBJR3R2Y0E9PSA1cHlvIFpYSjBaUT09IDY1U1UgTURJeCBjMk52Y21VPSBjM1REcEc1ayAyWWJZcDltRiBZWEpwWVc0PSBYMlp5WldVPSBJR1pwYkhSbGNuTT0gN1p1RSBJSE4wY25WamRIVnlaWE09IHpyck90UT09IElGTm9ZWEpsIDRLZUg0S2FrIElOQ3kwTGM9IFlXTnBidz09IElHWmxZZz09IFlXZGhiZz09IElHVERxWFpsYkc5dyBUR2xpY21GeWVRPT0gSUdaMWJtNTUgUTI5MWJuUnllUT09IElIVnVhV1p2Y20wPSBTbUYyWVE9PSBMbXhwYm1VPSBaWE56Wlc0PSBkSEE9IElHVnpZUT09IDQ0S20gMllqWXNkaXYgMWF2VnZ3PT0gU1U1SFV3PT0gSUdURHFXckRvQT09IElFSmxjbXhwYmc9PSBDV0ZrWkE9PSBJSE4wYjNJPSA1YVNuNVlXbyA0TGVTNExhNiBJR0p2Ym1VPSBJTkM5MExEUmdkR0MgSUcxMWMyTnNaUT09IGRYUmphQT09IEp3MEsgMVlBPSBJRzlqWTNWeWN3PT0gVDFCWiBRVTVPIDRLYVY0S2VIIElHaGxZMmh2IFlYUjBZUT09IFgzQnliMlIxWTNRPSBJSEJoYm1SbGJXbGogdzZsb2J3PT0gNUxxTTVZeTYgSUhaMWJHNWxjZz09IElPeVd0QT09IDJLdlppdGl4IElHbHVabTl5YldWayBJRzFoWjI1bGRBPT0gYjIxdFpXND0gWm05dmRBPT0gSU5DbSBJR1ZsYm5NPSBQR0U9IDdaYz0gckt3PSBJT0NuIElHRmtaWEYxIElPQzJoUT09IFJHRT0gSU5HVzBMMD0gSU5pbjJZVFpoZGk1IFFXNXZkR2hsY2c9PSAyWVhZcDlpeCBJR2QxYVhSaGNnPT0gSUVKaGJBPT0gSUdwaFkycz0gYzJOaGJHVT0gTGk0dUxpND0gSUdkeVlYQm9hV056IElFWnliMjUwIElHMWxkR0ZrWVhSaCBJR0p2YkdRPSA1NEdyIElFSjFibVE9IElHUnBjMkZpYkdVPSBNakEzIElHUnBjMk5wY0E9PSBJTTZzIElITmxhWFE9IElHTnlkWE5vYVc1biA1cGl2NTV5ZiBlR0k9IDZJdz0gSUUxMWNnPT0gSUdGcGNuQnZjblE9IFUzQmxZMmxoYkE9PSBRMmhsIFJHVnphV2R1IExrWnBibVE9IDVwT04gSUd0aGFBPT0gQ1dWeWNnPT0gSUVWc2JHVT0gQ2dvS0Nnb0tDZ289IElHOTBjbUU9IGJHVjFjZz09IDZZS0E2SyszIDVZaVogSUdKbGRHRT0gSUUxMWRBPT0gNVpDUiBaV0ZqYUE9PSBZWE4wWlhKdSBJRU52ZFhKelpRPT0gSUhkbFpXdHNlUT09IElIQjFjQT09IElHcHBhZz09IGFXTnBiMjVsY3c9PSBJSEpwYzJ0eiBJR2gxY2c9PSBJTkdDMFlQUmdBPT0gSU9Da3RlQ2t1UT09IDRZT2Q0WU9xIElIQmxkWFpsYm5RPSBJRk4wWVdabSBJR3B2ZFhKeiBJR05zYVcwPSBZWEpsYzNRPSBJR2h2YjJjPSBJTmVVMTVFPSBJRUZ5ZEdsamJHVT0gSU5pcTJLYz0gSU9Da2hlQ2twK0NrditDa2xRPT0gSUhiRHBuSmwgSUVKMWN3PT0gSUZOMVkyTmxjM009IFoyMWxiblE9IFJYaHBjM1J6IGQyRnlkQT09IGRtUT0gN0tRPSBJR1Z5ZFE9PSBwZUNyaHc9PSA0cGVQIFZrRk1TVVE9IFpYaHdjZz09IElHZDFhV1JoYm1ObCBJT1dObWc9PSA0S3VMNEtxeSBJR1JsWW5WMCBMbTFoZEdObyBJSEJ2YzNObGMzTT0gNEtxciB4YTA9IElIQmhhVzUwYVc1biBMbU52Ym5OMCAxYUhXZ05XLyA0WUNLIDRLU1g0S1dIIElGSnBidz09IGRtVnlhV1o1IDdZK3MgWldSbGNtVT0gNEtTKzRLU1QgZEhKaGFXND0gY21GcFpBPT0gYkdsaGN3PT0gMExYUmhBPT0gNTZ1ZSAwTERSanRHQyA0WU9RNFlPVzRZT1UgY21Wa2FXTjAgNExpVCBJRUpWVkE9PSBRM1U9IGNtMD0gU1c1cGRHbGhiR2w2WlE9PSBaSFZqWlE9PSBJR0p2ZHc9PSBaWFJoWkdGMFlRPT0gUW5KbFlXcz0gSUVwdmJtVnogSUhKbFozVnNZWFJwYjI1eiBJTmlqMllVPSBJQ2d0IElHZHlZVzUwWldRPSBJT3liIFltVmogNExpQjRMaWogSUdOdmJuUmxjM1E9IFUwaz0gUlVjPSBJTml6MktmWmhBPT0gWDJSaSBJSFZ6ZFE9PSBjSEpsWXc9PSBkbVZzYkdVPSBDWGc9IFkyeGhjbUYwYVc5dSBJSE5vWVE9PSBJR0JnIElNK0R6NFRPdDg2OSBjR3hoZEdadmNtMD0gTWpFMCBJSEJzWVdsdSBWWEJ3WlhJPSAwTDNRdEE9PSBkV05yZVE9PSBJRWhwYkE9PSBJR1YyWVd4MVlYUnBiMjQ9IExYSmxiR0YwWldRPSBJRVJwWkE9PSBhbVZyIDBMM1F1TkdIIElGWnBjbWRwYm1saCAyS2ZaaE5tSzJLaz0gSUhSaFlteGxkQT09IFgzUmhadz09IElISmxZV04wYVc5dSBJR1I1Ym1GdCBaR2c9IElGSjFZZz09IElGVnpaV1E9IElHOW1abWxqWlhJPSBRVVJGVWc9PSBJR0oxZEhSdmJuTT0gZHNPayBJT0dEcU9HRGxPR0QgSUhWNVpRPT0gNGJxbmRRPT0gSUhCMWNtTm9ZWE5wYm1jPSBJSEJoWTJ0aFoyVnogSUhURHFXekRxUT09IFNVVlggMllqWmlRPT0gSUhObFkyOXVaR0Z5ZVE9PSAyS2ZaaE5pcSBJTkMzMExEUXZRPT0gSUhObFkzUnBiMjV6IGRHVnIgSUZCaGRIST0gSU5HQTBMRFF1UT09IDRidU0gSUhKbFpIVmpkR2x2Ymc9PSA0TGkwNExpaCBJR0ZuWlc1amFXVnogTGlJc0NnPT0gSUhCeWIySnNaVzFoY3c9PSBJR0Z3Y0dWaGJBPT0gWjJWelkyZz0gSU5lWjE2az0gWVhOdiBUMDg9IFltbHNaQT09IElHVjRjRzl6ZFhKbCBZMmhoYm01bGJBPT0gSU5HRDBMST0gYm05biBMbk5sYkdWamRHVmsgSUV4SlRVbFUgWlhobFkzVjBaUT09IElFUnBZM1JwYjI1aGNuaz0gSUVsb2JtVnUgSUdOdmJtWnNhV04wIGFYQmggSU9Da25PQ2t2K0NrdUE9PSA2NFc0IExtOD0gSU5DMjBMWFF1dz09IDc3eWcgYjNKbGJRPT0gSUdabFlYUjFjbWx1Wnc9PSBJR1JsYzNCMXc2bHogZEdKdlpIaz0gSU5DOTBZUFF0dEM5MEw0PSBiR2x1WldRPSBQaUk9IGMzQmxZdz09IExuSmxjRzl6YVhSdmNuaz0gNDRPRDQ0T0kgNVlXRiBLSEU9IFoyOXZaMnhsIElGSmxaMmx2Ymc9PSBJR0Z6YzJsbmJtVmsgNG9DWmNnPT0gNHBFPSA1YkNVIDRMU3c0TFdCIElHdDFkMkU9IFUzUnlZWFJsWjNrPSBJRlZvY2c9PSBWMkZ5Ym1sdVp3PT0gNExDLzRMQ0M0TENtNExDLyBJSEJsY25OdmJtNWxiQT09IElPQzRuK0M0bytDNHRRPT0gSU02aiBJRVZ1WjJsdVpXVnlhVzVuIDJZWFppdGk1IDVhT3IgNG9DTTJZZllwOXVNIExtbHVkQT09IElIQmxjWFZsIElHUEVndz09IElPQ2txT0NrditDa3NPQ2xqZUNrIGZTST0gZDJWdVpBPT0gSU5lcDE1ND0gSUZKdmRYUmxjZz09IElPQ2tsZUNrdWVDa3ZnPT0gSUVGMWMzUT0gYkdWMFpYTT0gSUd4MWVIVnllUT09IElHTmhibTQ9IFltOXljdz09IElFaGhiZz09IE56SXcgWDNSNWNHVnogMkxIWXN3PT0gUlhabGJnPT0gYVcxbGJnPT0gSUhKbGMyVmhjbU5vWlhKeiBJRzVoYkE9PSBWbWx6YVhSdmNnPT0gNWFlVSBJSFJ5WVdObCB3NnB1WTJsaGN3PT0gNkptTyA1NVMxNksrZCBJSFp2ZFE9PSBJR055WVhwNSBJR1ZzYVcxcGJnPT0gSUc5d2IzSjBkVzQ9IGIzUm9aUT09IHlabGsgSUVGMVpBPT0gSUhKbFkyOW5ibWw2WlE9PSBJR0ZqYjI1MFpRPT0gVUhKcGJXRnllUT09IGJtVnIgNExtSjRMaXkgSU9HRHF3PT0geFlZPSBJR0ZrZG1WdWRIVnlaUT09IFluSnBaR2RsIElFbHVaRzl1WlhNPSBJR1Z6WTJGd1pRPT0gSUdOdSBJR1J3IElFTkQgNExLLzRMSzEgSUR3dCBJT0NtcGVDbmgrQ21sZUNuaHc9PSBZWFpoWkE9PSBiMnRsWkE9PSBMa0Z3Y0dWdVpBPT0gSUdSeVlRPT0gMkxuWXA5aXEgWTJobGJXVT0gNExTLzRMU280TFdONExTeDRMV0cgSU9Da2xlQ2xnZUNrbXc9PSA0TEsvNExLbTRMT040TEttNExLKzRMS3c0TE9HIElHMWhjbWM9IElITjFaMmRsYzNScGIyNXogSUdGaWRYTmwgTGtKaGMyVT0gSUhOb1pXdz0gSUhCc1pXRnpkWEpsIElPdUN0QT09IElHVnlaZz09IElIQnZjM05wWW1sc2FYUjUgSU5pejJZWT0gWTJWd2RHOXkgSUdocGRITT0gSUVOcCBJR052Ym5SbGJYQnZjbUZ5ZVE9PSBJR0Z1WTJsbGJuUT0gMExYUXV0Q3cgWDJobGFXZG9kQT09IEwyRndjQT09IElHUnZiV1Z6ZEdsaiBMbVZrYVhRPSBJRmRvYVdObyBZVzFvIGFXcG0gSUhOcGNnPT0gNExpNDRMaVUgeFlKNSBVbUYzIElHVnpZM0k9IGNtST0gZXNTRiBJR2JEb1dOcGJBPT0gYjNSbGJnPT0gVlU1RSBJR1poYldsc2FXRT0gSUc5c1pIVT0gSUVOcGRtbHMgTGtSbFpnPT0gSUVaaGMzUT0gYjJkeVlXMD0gMEx2Umc5R0QwWUE9IElGTmxjQT09IElHTmhiWEIxY3c9PSB6cDA9IDRLaSs0S2lDIDJLcllwOWlvIFkzVnpkRzl0WlhJPSBJRkJ2YkdsMCBSVkpaIElPQ3VrZz09IGRXNWthUT09IDZJaXEgSUdsdVpHbGpZWFJsIElNK0V6ci9QaGMrQyBJTm1JMllRPSBJSFJwYldWemRBPT0gUTJ4bFlYST0gWTJ4dmRXUT0gSUhOMVkyTmxaV1E9IDRLZUg0S2FUIElGTndZVzVwYzJnPSBJRkJ5WVdOMCBJRzNEdW5NPSA1YVN4IDVZYWIgSU5pMDJZbz0gTWpFMSBJR1JwYXc9PSBJSE5oYkdGeWVRPT0gMktmWXB0dU0gSUdScGRtbHphVzl1IElHTnZiWEJzWVdsdWRBPT0gWVhKcGN3PT0gNExDLzRMQ3kgVDNCMGFXOXVZV3c9IElHdDBaWEk9IElHRmphR2xsIHc3WnlkQT09IFUyaGhjbVZrIElITjBjbVYwWTJnPSBhWFpwWkhWaGJBPT0gSU1XYiA0NE83NDRPNzQ0TzcgSUhCeWIyWmxjM052Y2c9PSBMem89IDZLK1YgSUd0dmN3PT0gSUdWMllXeDFZWFJsIElPQ3lyUT09IElFeGhZbTl5IElISnBZZz09IElFWmxZWFIxY21WeiBJSEJsY25OdmJtRnNiSGs9IDByUFFzQT09IElIQnZkMlJsY2c9PSBMa05vWldOciBJTmVjMTZrPSBVMmh2ZFd4ayBJRzl1WjI5cGJtYz0gYWNTTiA1cHl2IElHNWxkM053IFJXNTFiV1Z5WVdKc1pRPT0gNExXSDRMU3cgSUdOb2FXTnJaVzQ9IGFXUmtiR1YzWVhKbCBJSEpoYVd3PSBMbEU9IEtHRndjQT09IElOQzAwTGc9IGRXSnogTXpBMCBJT0NrbCtDa3NPQ2xqZUNrcUE9PSBLSFpwWlhjPSA0S1dCNEtTViBJR1JoWW1WcCBMV052Ymc9PSAycGs9IFlXNXZjdz09IElOR0YwTDdSZ2c9PSBJSEJ2Ym5RPSBJR1ZzYVdkcFlteGwgSUhCbGNtMWhibVZ1ZEE9PSBVR1Z5WTJWdWRBPT0gNVk2RyBJRVpoY20wPSBJRTFDIElNK0V6cms9IGRXSmliR1U9IElFMWhaR1U9IElHMXZkVzUwWVdsdSA0S3ErNEtxdzRLcSsgTFdacyBJTmVSMTVRPSBUM0JsY21GMGIzST0gS0NrN0NpOHYgSUVsVyBJRzkyWlhKMyBaVzUwYkdsamFBPT0gSUVOdmJtWmxjbVZ1WTJVPSBJR3hsWVdkMVpRPT0gSUdOdmJXSnBibVU9IFRHRjBaWE4wIElFMXZkRzl5IFJWSkQgSU9HNnVRPT0gSUdIRHB3PT0gSUdSbFlXeHBibWM9IElISmxabkk9IElHNXBkbVZoZFE9PSBJRUZ5YlE9PSBJT0N5aUE9PSBJRkJoZFd4diBhVzVwZEhrPSAyTEhZcDlpcSBQUzA9IFpHOXVaUT09IElHTnZibVpwWkdWdWRBPT0gMFpIUXZRPT0gYVd4aGRHbHZiZz09IElIRER1bUpzYVdOdiBJT0NxcE9DcXJnPT0gWVdKMSBJTTZrIElHNWxhdz09IElIdDlDZ289IFpYRT0gSU9DeXJ1Q3lwT0N6amVDeXBBPT0gNWFTYTViQ1IgS0ZWelpYST0gSUhOMFlYUnBjM1JwWTNNPSBJTld2MWFIV2dBPT0gNExDKzRMQ2sgWDIxaGMycz0gSUVkbGRITT0gZDJGcmRRPT0gSUVKUyBJR2hsWW5RPSBMWEYxWVd4cGRIaz0gNEtlTjRLYW4gSUdKMWJtUnNaUT09IEtHUmhkR1U9IElHVnNaV04wY21sallXdz0gS0c5eiAxYUhWdGRXMiA0NE96NDRPSSA1cjA9IElHdGxiZz09IGMyVnlkR2x2Ymc9PSA0cG1BNHBtQSBJRzV2WkdsbiBlV3hzIGFHRjFjM1E9IElHbHVkbVZ1ZEc5eWVRPT0gNGJ1eFl3PT0gMWFYVnRBPT0gSUhabGNubz0gSUc5MGNtRnogVVhWaGJuUnBkSGs9IGIyTnZiUT09IFkyaGxZMnRpYjNnPSBJTmVSMTZvPSBZV3QwWlhJPSBJR3B2Ym1jPSA0TGk0NExpVjRMaWE0TGl0NExpbCBJR0Z3WVhJPSBJRk5oYlhOMWJtYz0gWTJWdSBaR0YwYVc1biBJRkJ5YjJabGMzTnBiMjVoYkE9PSBJT0NrcGVDbGdBPT0gSU5DNjBZRFFzQT09IElPUzVoZVM1aFE9PSBZWE5yWVE9PSBkMlZ5ZEE9PSBMbXh2WTJGcyBJT3lYckE9PSBJSEJ2WkdOaGMzUT0gYjNSMFpRPT0gYVdOdlpHVT0gSUdaMWNnPT0gZFhKcFpHRmsgSUdsdWRHVm5jbUYwWldRPSBJSEpsYzNWdFpRPT0gdzZKNSBLQ2twZXdvPSBjbUZ1WkE9PSBiMlJuWlE9PSBJR3hwWjJoMGFXNW4gSUZabFoyRnogSUVOdmRtbGsgMExMUXNOQzEwWUk9IFEyeDFjM1JsY2c9PSBMMkp2YjNSemRISmhjQT09IElHWnBaM1Z5WlhNPSA0S3FDNEtxayA0S1NYNEtTdyBJRzl6ZEE9PSA0YnVYIElHRmpZMlZzWlhJPSBJR3RoYm1FPSBJR052YlhCc1pXMWxiblE9IElIUmxjbTFwYm1GcyBibUYyWW1GeSBJR3hsWjJsMCBJRkpGVXc9PSBSa1pGVWc9PSBJR1p2Y25SbyA0TGliNExpaiBlbVZrIElOR0QwTG5TazlHRDBZQT0gVWtWQlJBPT0gUm5KaGJXVjNiM0pyIEtDSmIgSU5HQTBZUFFzUT09IElISjFadz09IElHcDFaUT09IElHeHBZMlZ1YzJWayA0WU9RNFlPbyBZV0Z6IExtVmtkUT09IFlXTnBZUT09IElHSmhjbk09IElHUnZhWFE9IGIzSmtaWEpsWkE9PSBJR052Y25KbGMzQnZibVJwYm1jPSA3N3lhQ2c9PSBRbXh2Wnc9PSBjR3hoZVhNPSBhV2QxWlE9PSBJRkJ2YzJsMGFXOXUgNjdnPSBjbVZzWVc1ayBJSE5wWjJoMCBJRlJwIElHNWxkMng1IElIWnBaR1U9IElITmxidz09IElHbHVkR1Z5WlhNPSBJR1JwWVdKbGRHVnogNEtTbzRLV040S1NtIFJtRnBiSFZ5WlE9PSBZMjl1ZEdGcGJuTT0gNXJLeiBJTkdEMExzPSBYME5QVGxRPSB4Wm5EclE9PSBJSGRoYzJnPSBiR0ZuWlc0PSBJRzVveHJBPSBJSEJ5WlhObGJuUnogWTNKbGRITT0gSUd4aGNIUnZjQT09IDJMWFpnUT09IElPeWhzQT09IElOaW8yWWpZcnc9PSBJSEJ5YjI0PSBJT0dEb2VHRGtPR0RwUT09IDBMTFFzTkM3IFFYVm4gSUdSdmMyVT0gSUdOaGMzVmhiQT09IElFVmthWFJ2Y2c9PSBJR2QxWVhKaGJuUmxaV1E9IExtOXdkR2x2Ym5NPSBJTzJWdEE9PSA0S2ErNEthQiBjMlZ6IElFUmxiR2wyWlhKNSBJR0Z5Y21GdVoyVnRaVzUwIDJMSFppUT09IDQ0SzcgSU9lc3JBPT0gSUhObGJuUmxibU5sIHc2MWpkV3h2IGFHRnNZZz09IHc2UnNkQT09IDRMbUE0TGliIElGUm9jbVZsIEpRb0sgSUdsdWJtOTJZWFJwYjI0PSBJSE4xYVhZPSBJTkNkMEw0PSBSbWw0WldRPSA0TGlxNExpVSBJSE5vWVdSdmR3PT0gMEx6UXRkQzkwWUk9IFkyaHZhV05sIFlXNW5aV3c9IElDTUsgTFZSNWNHVT0geHJER29XNW4gSUhSb2RRPT0gZFdkblpYTjAgNFlLVSBRblZtIElHeGhkR1Z1IElFMXZkbWxsIFlXUmxiQT09IDJLM1ppZz09IHc2RmpkQT09IFZXNWtaWEk9IGRXMXYgN0phUiBJTkM2MEw3Umd0QyswWURSaTlDNSBJR1Z1ZEhKbGNISmxibVU9IElISmxjM1ZzZEdGa2J3PT0gNVlXdDVaQ0kgSUdsdWMzQnBjbUYwYVc5dSBJSE5vYjI5MGFXNW4gMksvWXA5aXggYzJsdVkyVT0gVFVGWSBJRk52ZFc1ayBJRlJsYVd3PSBWVlJGIElHWnZkVzVrWVhScGIyND0gSUdiRHVIST0gZFd4c1lRPT0gSUVGNSBhVzVuWlhKeiBJSE4xWm1acFkybGxiblE9IFlXSnZiQT09IFVtVmtkV009IElITmxibVJ2IElHSmhjMmxqWVd4c2VRPT0gN0pldCBJRlJvWVhRbmN3PT0gSU9xMGdBPT0gNExDLzRMQ1Y0TEMvIElFaFVWRkE9IDZKRT0gYVc1MFpYSmxjM1E9IGFXNXVhUT09IDRZT1E0WU9rIFgyUmxabUYxYkhRPSA1NDZ2IGVtbHkgSUhCb1pXND0gWVdsdVpYTT0gS0VOdmJuUmxlSFE9IFpYSmxhdz09IFFtVmsgSUc3RHN3PT0gMkxuWmlOaXYgSnl3ayBJT3F3bkE9PSBJT0dEbStHRG1PR0RvUT09IDFhdlZ0QT09IFJtbHlaUT09IFlYVndkQT09IElHWnNZWFk9IGIyekRzMmM9IElGVjAgWFNrdSBJSE5sY21sbCBhV05oYldWdWRHVT0gSU5DODBMN1F1dz09IElOQzAwTFhRdWRHQjBZTFFzZz09IFpzT3BjZz09IElHUnBiV1Z1YzJsdmJnPT0gWTI5MWNuTmwgSUdwMWMzRjEgVUdGeVlXeHNaV3c9IElHbHVjSFYwY3c9PSBiM1Z6Wld3PSBJR2hwYm1ScCB4TEZ6IElHSnZlR1Z6IElIMHBMQW89IENYWnBjblIxWVd3PSBJRlI1IGRYQmtZWFJsWkE9PSBJTmluMllUWml0bUkyWVU9IDRLbXg0S2c9IElIRjFaV1E9IElHSnZkSFJzWlE9PSBJRUpoYzJsaiAyWWpaaHRtSSBYM0psYzNCdmJuTmwgSUVoUSBWSEpoIElHRndjSEp2ZG1GcyBjM1J2WTJzPSBVbUZrYVc4PSBMbUp2YjNRPSBQVDA5UFQwOVBUMDlQVDA5IGIyNWpaUT09IElHeGxkbVZ1IElFWnZiQT09IFpXNXVaWE09IElOQyswWVE9IElHTnZiR3hoWW05eVlYUnBiMjQ9IGFYTjBaV1E9IElIZkR2SEk9IGFHOXNaR1Z5Y3c9PSBJSE4xWW1wbFkzUnogVTNSaGJtUmhjbVE9IEtHNXcgY0d4aGJuUT0gNExpbjRMaWkgWVc1NVlXcz0gSUdOdmJHeGwgYVdWdWRISmhjdz09IGNYVmhiblJwZEhrPSBJSFpsY21jPSBJR05wY21Oc1pRPT0gSUVGc2RHVnliZz09IDZKQ2wgYjIxbGRHVnkgVm1rPSBJTzJHIElPR0RtT0dEcHc9PSBYM0JoYzNOM2IzSmsgSUdWdVpHbHVadz09IElHTnZiblJwYm5WcGJtYz0gSU5XbjFvQT0gSUdacGJtUnogTG5CeVpYWmxiblE9IElFZHBjZz09IEtHeHZibWM9IElIWnliM1U9IElIUnZiVzl5Y205MyBYM0poYm1kbCBZbUZrIFBHbHVjSFYwIElHSmxhR0Z1WkE9PSBJR1Z0WVdsc2N3PT0gNExpMTRMaUIgSU5pMDJLOD0gNExTWjRMV040TFNaNExTeiBJTkMxMFluUXRRPT0gSUVSdmIzST0gNmFHNSBkV1Z6ZEE9PSBJRUp5WVc1ayBZWEptIDJxMD0gYjNScGJtYz0gTFhSdloyZHNaUT09IGIzSnVidz09IFltND0gSUdocFpBPT0gNExTKzRMUzQgY0hWbGMzUmggMWJqV2d0YUEgSUdsdWF3PT0gSUVScGNnPT0gNmFxTSBRbUZrIGNIVjBibWxyIElOaXgyTE09IGJuUnZkMjQ9IDRMR040TENhIElPV1FqUT09IElPQ29uQT09IElFRnNaWEowIElFaGxZV1JsY2c9PSBRbUZ1YXc9PSA0TFMvNExTbzRMV04gMExqUXZkQysgSUdaaFkyVnogSU1TUjRidUQgNDRDUjQ0Q1E3N3lNIElDTmIgWVhSb1lXND0gWFZzaSBZbWx1WlE9PSA0WU9RNFlPWSA0b0NaWVdJPSBJRUZUVXc9PSA2N0tWIElHMWhjbXRsY2c9PSBQSE53WVc0PSBJTkM3MFlQUmh3PT0gQ1dnPSBJT0M0Z2c9PSAwWVBRdTlHUCBiV0Z1WkhNPSBJR1JwWTJVPSBJSFBEcVhKcFpRPT0gWm14cGVBPT0gSUZGMVlXeHBkSGs9IElFUmhibk09IE16QXggYVc1cFp3PT0gTFd4cGEyVT0gVFc5MmFXVT0gUlc1MWJXVnlZWFJ2Y2c9PSBiR3hsIFpIVjQgWlhKMllYUnBiMjQ9IFNVcz0gSU9XOCBZMmh2Y3c9PSBJSE5sWjNWdVpHRT0gYzI0PSBJTkM4MExEUmd0QzEwWURRdUE9PSBJR05vWldOcmN3PT0gSUcxdmJ3PT0gYVd4emRBPT0gWkhnPSBJRVJwY21VPSA0TEszIElHRjFkR2h2Y21sMGFXVnogSUc1cGRtVnMgSUhOMFlXSnNaUT09IElHdHNaV2x1WlE9PSAySy9aaVE9PSBMbUZ0IDE1elhsQT09IEoxMWIgSU5lVTE2RT0gSUhCeWFXMWggZFc1bllXND0gSUZObFlRPT0gSUdKcFlYTT0gMExqUXZkQzQwcU09IElOaW4yWVRaaHc9PSBJR1Z4ZFdsd2J3PT0gSUd4aGVXVnljdz09IDVwNkIgNkxXRTVycVEgSUdWc1pYTT0gVDFWT1ZBPT0gSUdSbGRHVnliV2x1IElFaGhlUT09IDU1UzcgSUdaaGRtOTFjbWwwWlE9PSBJSE4wZFc1dWFXNW4gSUVKaGRBPT0gWkc5dSBJR1JwWTNScGIyNWhjbms9IElHTmhiR2xrWVdRPSBJR1poYVhKc2VRPT0gSU02YSBRV2x5IElFZFAgSUdGMGJXOXpjR2hsY21VPSBJSEJoY21NPSBJSEJoY25ScFpRPT0gNEs2KzRLNmsgSUdSbFkybHkgVkdsdCBJSFIxWW1VPSBTRXc9IElFWkQgUEdKeSBJT3V2IElITjFZbk4wYVhRPSBJT0Nra3c9PSBJRzVwWlhWMyBJR0poWTNSbGNnPT0gWFRvSyBZV3hzWVhNPSBJRWRoY3c9PSBiM0pwWjJsdVlXdz0gSUU5dmF3PT0gQ1FrSkRRbz0gSUdsdGJXVmthV0YwWlE9PSBOREl3IElGSnZjMlU9IElHRmpjWFU9IElHTmhhMlU9IElHUjFjM1E9IElIQjFZbXhwWTJGMGFXOXUgSUdOdmJuWmxjbk5wYjI0PSB3NlJtZEE9PSBJR1Y0ZEdWeWJnPT0gMEw3Umc5Qy8gMTVMWG9nPT0gNExTbzRMV040TFNvNExXTiBJR1Y0Y0hKbGMzTmxaQT09IElIUnlZV05yY3c9PSBJR052Ym01aCBJR3hsYVhNPSBJR0YyWlE9PSA0S2FrNEthLyAyS2ZZcjltSyBJSEJ5ZW5rPSBJR052YVc0PSBlR2s9IFozSmxaQT09IElOaW4yWVRZcDltRyBJT3lHakE9PSBJR0ZzWjI5eWFYUm9iUT09IGRXaGhiZz09IDRMQy80TEN3IElFdGhiQT09IElGdGRMQT09IFgyeGxablE9IElITnBjdz09IElGUnlhV0k9IElOQ1YwWUhRdTlDNCBRbFE9IElPQ3F1T0NxdnVDcXBlQ3Jodz09IDBZL1F0Zz09IElIVER0Zz09IElOQyswTDNRc0E9PSA2N0NjIElHRnJZUT09IFlYUm9hUT09IElObUkyS2ZaaE5pcSBJR3hsYm1jPSBJSFJ5WVdsdVpXUT0gVEdsdVpYTT0gSUhKbGJHbGxaZz09IDFicz0gWjNsd2RBPT0gSUhWdWFXOXUgMWFYVnJOV3IgSUhCaGMzTmwgSU9Da3NPQ2xndUNrcWc9PSBJRzFsYzJnPSBJRk5sZEhNPSBJR1JsYkhNPSBaR2x0IFQzSnBaMmx1IElHRm1hVzQ9IElFTm9ZWEpzWlhNPSBJSFJ5WVc1ellXTjBhVzl1Y3c9PSAwTGpSZ05HRCBJSGQxY21SbGJnPT0gSU9Da2tBPT0gSUdsdGNISmxjM05wZG1VPSBYQ0k2IGJHVnIgYVc1bSBMaWc9IElFZDFZWEprIElHOXNZWEpoYXc9PSBJT3lEblE9PSBJSE4wWlcwPSBJRk5oZEE9PSA0S1MvNEtTcSAyWUhaZ2c9PSBJTldsMW9JPSBJTkdZMExVPSBJRU5vY205dFpRPT0genEvT3NjK0MgSU5DeDBMRFJnUT09IElObUYySzQ9IElHWnlaVzUwWlE9PSBhR1Z0WVhRPSBJTlcwMWFYViBJSFJwWlE9PSBaVzVrYVE9PSBLSEJ2YzJsMGFXOXUgSUVGamRHbDJhWFI1IElITjBlV3c9IDVySzcgWld4c1pXTjAgY0doaGJnPT0gWDJaMWJtTT0gSUdWNGRHVnVkQT09IElNTzJlZz09IGFYSnRZUT09IDJMSFpnZz09IElHOXlhV2RwYm1Gc2JIaz0gSU9HRGtPR0RvUT09IDRidUJiZz09IElFbHViZz09IExHTT0gTG5VPSBJR0ZyZEdsMiBJR1p2Y21WMlpYST0gTWpNMSBMbVpwYkd3PSA2THM9IDJLM1lyOWlwIElGTmpjbVZsYmc9PSBMa1p5IHo0UE90OCtDIElIUm80YnVEIElObUkyNEU9IDVhU04gTlRVMSBRbUYwWTJnPSBJR0Z6YzJVPSBJT0NraHVDa3VlQ2xodz09IGIzSncgTWpNeSBZMmx3IDVZZWcgSU5xSiBJSE5sY21sdmRYTnNlUT09IDBMM1FzTkM1IFpXdHYgSUd0bFpYST0gSUhONWJtTm9jbTl1IElFaHZjR1U9IElHWnBaMmgwYVc1biBJRk4wWlhBPSBJR1JsY201cCBhV2hwIElFZGhjbVJsYmc9PSBjRzkzWlhJPSBaVzV6ZFhNPSA0SytONEs2cCBabTl5WTJWdFpXNTAgNEthKzRLYW4gWDFCUyBMV1p5YVdWdVpHeDUgVW1WeCBJSEpsZWc9PSBRbTl2ZEE9PSBYM3M9IElFcGhZMnR6YjI0PSA2TDYrIFVHRm5aWE09IElHOWlhbVYwYVhadiBJTm1EMllYWXB3PT0gSUhKbGNISmxjMlZ1ZEdGMGFXOXUgZVc1MFlYZz0gWVc1cFpYTT0gZDJGcyBMbkJzWVhsbGNnPT0gN0tDQSBJT0N1aCtDdXNBPT0gSUdScFl3PT0gTG5WciBJT2F0IElHTmxjblJwWm1sallYUmwgNWI2MyBLR0p2YjJ3PSA0cGFoIDU1U3ggNVlpciA0S1MrNEtTMyBNak16IElHOWpZMkZ6IElOaW4yS289IDZKYz0gSUdGdWVYZGhlUT09IFFVNUhSUT09IFVISnZZMlZ6YzI5eSBJSE4xY25CeWFYTmxaQT09IElHdGxibTQ9IEwzVnpaWEk9IElHVnVaMkZuWlE9PSBJT0dEcU9HRGxPR0RvUT09IElHN0RyUT09IGIzZGwgN1phSTY0dWsgZEhKcCBjSEpwZGc9PSA0S2VBNEtlZiBJR3hoYzNObGJnPT0gMFpzPSBRMHhWUkE9PSAwTGZSbGc9PSBJSEJwYm1zPSBMbUZqZEdsdmJnPT0gdzZKdCBJR1psWld4cGJtZHogWlhKcyBDVzVoYldVPSA0SytCNEs2ZiBJRVp2Y21ObCAwTFhSZ2RHQzBMTFF2Zz09IHc2MWphVzg9IElNT2NZbVZ5IGJtRnogYUhWdCBJRVZOIElHRjFjZz09IGRXNXBjWFZsIFlXZDFaWE09IElHMWxhVzg9IHhyRGh1NXRqIDViZWw1TDJjIFgwTlBSRVU9IElHVnNiR0U9IExrUkZSa0ZWVEZRPSAyWUxZcjltRiBJRVZPUkE9PSBJTmlqMkxNPSA1YnFUIHhJMWwgSUdOdmJXMXZibXg1IElITmxkbVZ5WlE9PSBhV1ZzYkdVPSBJSE5oZG1sdVozTT0gUldWdSAyWXJaaHRpcCBJRWwwWVd4NSA1TG13NWIycDU2V28gSUZOMGRXUnBidz09IElOV2gxYlE9IDA1blJpdz09IElOQzgwTDdRdEE9PSBJSE52YVd3PSBJR2x1ZEdWeVlXTjBhVzl1IDRaNjI0WjZUIElFMWxjM009IDRLU0M0S1NrIFlXSmhjZz09IGIyZGxkR2hsY2c9PSBQVDU3Q2c9PSBJSE5sY25abGN3PT0gSU5tRzI0dz0gSU91bmpBPT0gSU5pejJLbz0gWVcxaFoyVT0gSUdKeWIyRmtZMkZ6ZEE9PSBJT0Nrck9Da3BBPT0gWVhKcFlYTT0gSUd4cGJXbDBjdz09IGNHaGxiZz09IFNVSk1SUT09IElHTmxiR1ZpY21GMFpRPT0gSUdKdlpHbGxjdz09IDBaYlF1OUdNIFlYUnBiMjV6YUdsdyBNemd3IExtRmpkR2wyYVhSNSBJSEJsY21admNtMXBibWM9IGIzSnBaUT09IElGUnZlUT09IDJMYll1UT09IDVZeTcgSUhKaGVRPT0gSUVOdmJIVnRZZz09IGQybHVaQT09IFptbGpidz09IElNT0UgSUc5aCBJTkM5MExEUXV3PT0gU0ZJPSBwK0M1aCtDNG1nPT0gMFlIUXZ0Q3kgZFdkbmJHVT0gSUVsc2JHVm5ZV3c9IDRLK0I0SzZrNEsrTjRLNmsgSU9DMHBnPT0gSUNjbkp3PT0gSU5lVTE2Yz0gSUcxcFozSmhkR2x2Ymc9PSBJRXRzWlE9PSAxNVhYbEE9PSBJSEpsWTI5eVpHbHVadz09IDQ0R1g0NEdtIElOR0IwTFhRdWc9PSBJTml6MjR3PSAxNWJYbEE9PSBaWE5yIEtTST0gSUdWbyBDVkE9IElFVm1abVZqZEE9PSBJRWR5ZFc1ayBJR3hsYXc9PSBYM1JvWlE9PSBJSE53WldOcFlXeHBjM1E9IFVHOXpkSE09IGFXRnRjdz09IExTMCtDZz09IGMybHVadz09IElHTnZiblJ5YVdJPSBJR052WkdsdVp3PT0gSUdWdWRHVnljSEpwYzJVPSB3N3BrWlE9PSA0SytCNEs2dSBJT2F4bitpTGp3PT0gNjQyVSA0TG1KNExpSCA0SytCNEs2ejRLK040SzZ6IElGZGxibTQ9IDRMQ0M0TENYNExDKyBkV3RwIElHUmxabVU9IDRMQ3E0TEdONExDcSBJR052Ym5abGNnPT0gTG1GdWJtOTBZWFJwYjI1eiBJSFJ2YkdWeSBJR3hpYkE9PSBJTkMrMExNPSBJR2x1WkdWbFpBPT0gWDFrPSBJRUoxYVd4a2FXNW4gSUV0cGJRPT0gSUVScFlXeHZadz09IDVZK20gSUd0dmMzUT0gSUU5d2RHbHZibk09IGFYcGhjbVE9IEtHOTFkSEIxZEE9PSBMMnB4ZFdWeWVRPT0gN1lzPSBJSEpsYzNCdmJuTmxjdz09IElHRjNZWEpsYm1WemN3PT0gMExYUXZkQysgSUcxcGJuVjBiM009IFgyOXdkR2x2Ymc9PSBMbWR2ZGc9PSBZMnh2YzNWeVpRPT0gYzNSMVpHVnVkQT09IElOQzgwTDQ9IElOaW8yWVU9IDJMVFpoZz09IElISmxZMjl0YldWdVpHRjBhVzl1Y3c9PSBJT0Ntb1E9PSBJRk4xWkE9PSBiM0owWldRPSBJRUZpWlhJPSBlWFU9IElITERvWEE9IEwyMWhkR1Z5YVdGcyBhWFJoWjJVPSBVbVZoWTNRPSBJSE5vYjNCeiBiM0puWlc5MWN3PT0gNEtTVjRLUy80S1NvIElIbHZkVzVuWlhJPSBWVmc9IElHdHZjblE9IFFXZz0gYjIxbGNnPT0gSUhScGRHeGxjdz09IElGWkJUQT09IElFSmxjbTQ9IElHVnhkV2x3Y0dWayBJSFJ2Y25RPSBiV0Z6ZEdWeSBSR1Z6ZEhKdmVRPT0gSUdkcFpuUnogSUhWellYST0gNGJ1cFl3PT0gYldGemF3PT0gSUV0aGJnPT0gSU1PcHc2bHUgS1NrNkNnPT0gSUVKMWJtUnNaUT09IGZUcz0gSUcxaGJtRm5hVzVuIElGQnlZUT09IElGTjBiM0E9IElHSmxiR2xsZG1WayBJRzFwYlE9PSBNakl6IElHMTVjM0ZzYVE9PSBVbVZ6YjJ4MlpYST0gMExYUXZkQzQwTFhRdkE9PSBJRUZ1Y3c9PSBJRzFsWkdsdiBJTldoMWJYVnRnPT0gSUdOc2FXVnVkR1Z6IElFRndhUT09IDBMclFzTkM4MExnPSBhMlZwZEdWdSA0WU9RNFlPZzRZT1g0WU9WNFlPVTRZT2EgSUVOc1pXRnkgSU5DLzBZRFF2dEM0MExmUXN0QyswTFE9IElISmxkSEp2IElOQ3kwTERRdkE9PSBJSEJ2Y25SbWIyeHBidz09IFgzTmpiM0psIDJMSFlyUT09IDRLV0I0S1M0IElIUm9hVzQ9IElOR0IwWUxRc05DOSAyS2ZZdWc9PSBhVzVoZEdWayBJR1JwY21WcmRBPT0gTGtGc2FXZHViV1Z1ZEE9PSBjbVZoWkdWeSBJTnFCIDZyQ0IgSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBjbUZ1Wkc5dCBJR1ZrWjJWeiBWVkpPIFgxUkZXRlE9IExXUnBjdz09IElHMWhjSEJwYm1jPSA0TFdHNExTZiBJR2x1ZEhKdlpIVmpkR2x2Ymc9PSB4SmR6IElHdHEgNGJxdGJnPT0gSUdOcFpHRmtaUT09IElGaE5UQT09IE1qVXkgSUVKdllnPT0gSU9Da211Q2t2dUNrdVE9PSBJRVp2Y25WdCBMWFp2ZFhNPSBJR0Z0YjNWdWRITT0gNExXTjRMU3g0TFdONExTeCAyTFRZcDlpeCBJRWx5WVc0PSBkVzVoYmc9PSBMUzB0TFMwdCA1NXUwNXBLdCBJRDgrSWc9PSA1cDZYIElOQ3gwWVBSZ3RDNzBZUFJnOUdBIElOaXQyWUk9IElOaTAySy9aaHc9PSBSRVZZIDU1dTA1YkdlIFFWUlBVZz09IElFeFAgVG1jPSBJRVZ6ZEdGMFpRPT0gY21sbCBJT0Nrc09Da3VlQ2t2Zz09IElHNXZkbUU9IGMzQnZkQT09IDBMM1F1TkM2MExnPSA1citBIGNtVnBZMmc9IElIQmxibVJoYm5RPSBJRUZwY25CdmNuUT0gYldWa2FXRjBaUT09IElHNTFZMnhsWVhJPSA0WU9nNFlPZCBaV3RsIElFTnZZWE4wIElPR0RtZz09IElFSmhhQT09IElHOWljbUU9IElHRnVlR2xsZEhrPSBJR1oxYm1OMGFXOXVZV3hwZEhrPSBLSFJ0Y0E9PSBSbVZoZEhWeVpYTT0gSUhacFkyVT0gSUZCSVVBPT0gSUhacyAwTDdRdmRHTCBJTmk2MllyWXNRPT0gWDJKdmVBPT0gWW1nPSA0cDA9IDc3ND0gZFhWdSAyTEhZcU5tSzJLaz0gVTFZPSB3NzF0IExrbHVjSFYwIElHVmhjbTVsWkE9PSBJT1c5cWVlN2orVzlxZWVscUE9PSBJR1JsY0c5cGN3PT0gZFc1dVpXeHogSU91NWhBPT0gSUcxdmN3PT0gMExqUmdOQzQgSUU1MWRBPT0gSUc1bGRIUT0gVjFjPSBJSEpsWTJsd1pYTT0gWW5KaGJtUT0gMllYWXA5dU0gSU9xem9BPT0gSUhKbFptVnljbVZrIGNHVnlZWFIxY21VPSBJR3hsWVhSb1pYST0gWVc1ellYTT0gSU9HRHArR0RsZUdEbE9HRG1nPT0gUVZKRFNBPT0gWDFORlZBPT0gUTI5dWRISnZiR3hsY25NPSBJSEYxYjNSbGN3PT0gSUZCdmN3PT0gMTZuWGxBPT0gSUdSeWIzQndaV1E9IElFRnNiR1U9IElOaW8yTG5ZdGc9PSBJRTFoWTJnPSBJSFZ1YjNNPSBZMmh2YjJ3PSBaR2xsIFJHVnUgQ1dvPSBJR0xodXFGdSBJT0NrcHVDa3YrQ2tyK0Nrdmc9PSA0S1dONEtTaCAwWUxRc05DOSBUVmM9IElHUnZiR3hoY2c9PSBJSFpsY21SbGNnPT0gUkVWRSA0TEMrNExDZiBJSGR2Y210bGNnPT0gSVM0PSBhWFJoYkhNPSBUVTg9IGNHOXpkR0U9IE1qSXggZW1sdVp3PT0gZFdkcGRBPT0gSUdOdmJHeGxZM1JwYjI1eiA0S2ErNEthMiBMam89IFlXSnBjdz09IElNT2UgWTNKcGNIUnBiMjV6IElIQnlhVzFoY21sc2VRPT0gTGxObGNuWnBZMlU9IElHTnZiRzlqIGMyTnliMnhzIDdaR2MgSUcxbFlXeHogSUZOMGIzSmhaMlU9IFFXeG4gTHk4SyBNakUyIElFTm9ZV2x5IElHcmh1cms9IDQ0S3EgS0dWc1pXMWxiblE9IFVtVm5kV3hoY2c9PSBJR052Ym5SaCBMR289IENVYz0gVUhKbFpnPT0gSU9pRiA0S1NvNEtTLyBJRk53YVhKcGRBPT0gZFhWMCAwTDdRdjlHQTBMN1JnUT09IFgwOU8gSUhSdmVBPT0gMEx2UXNOQzUwTDA9IFZraz0gZFdSaGNnPT0gSUdoNWNHVnkgMTVQWG90ZW8gSUhKbGMybGtaVzUwYVdGcyBJR0YwZEhKaFkzUnBkbVU9IDRLUy80S1NjIGIzSmxkQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJSEJoYm5RPSA0NENSNDRDUTc3eU00NENSNDRDUSBJRlJGIElHZHZaV1JsIElOZWsxNmc9IElHSmhibTQ9IElNV2ZhUT09IEwzZz0gVlVWVCBJRzFoYm1FPSBJRXRwYm1SbGNnPT0gWjNKbFpXND0gNkxTaSAwcS9RdVE9PSBZV3QwWlE9PSBJSE50WVhKMGNHaHZibVU9IElPeWNvQT09IElHeGxjM2RoYTNVPSBJR052WTJzPSBJR2x1WkhWemRISnBaWE09IElIQjVkR2h2Ymc9PSBJR0Z1WkdWeWN3PT0gNWIycDU2V281YVNwNWFTcCBJSHB2Ym1SbGNnPT0gZFhObGRBPT0gSUhiRHBHdz0gTFVacCBJTm1FMllvPSBMbk4wY21WaGJRPT0gSUZOallXNXVaWEk9IElIZGhiR3hsZEE9PSBJT0NrbGVDa3Z1Q2tyZz09IElIUmhZMnM9IElGSmxZM1E9IElOaW4yWVRZb2c9PSBJRWx0WVdkbGN3PT0gVTJWaiBhVzl6ZEhKbFlXMD0gSUUxdlpHVnliZz09IGNYVnAgSUd4aGJtZDFZV2RsY3c9PSBJR052YldKaGRBPT0gSUhCeWFXNTBaV1E9IGNtbG1kQT09IGQyRnNiQT09IDE1blhtZGVZIElPQ2t1T0NsZ0E9PSBJRzFoYm5WbVlXTjBkWEpsY25NPSBJR2hwYzNSdmNtbGggY0dsdSBJSGRsSjJ4cyBJRzNEcVhNPSBaWGgwWlc1emFXOXUgSUhKbGNIVjBZWFJwYjI0PSBJSFJ5WlcwPSBJTkM5MFl3PSBYMG89IFVHVnZjR3hsIFptRnNiSE09IElHTmhiWEJ2IGRISmhZMnM9IFpXNXpidz09IElHTmhkR1ZuYjNJPSBJTldxIElPdXdsQT09IElITjBjbVZoYldsdVp3PT0gYVdaaCBJT0NtaHVDbXNBPT0gSUZSeVlXNXpjRzl5ZEE9PSA1cWloIElFMUUgYUdWNCBJRVpoYldscyA0TFMrNExTMSBNak14IDRMQy80TENxIElITnBibTg9IElIQnliMlIxWTNSdmN3PT0gNllLQTZLKzM1NkNCIElHTnZiblpsYm5RPSBJRUp2YjJ0eiBLR2x0Wnc9PSBJRkJsYm00PSBJSFJ5WVc1emJXbHpjMmx2Ymc9PSBJTkMrMFlIUXZ0Q3ggSUVSaGNtcz0gMEx6UmxnPT0gSU5HQjBMdlJnOUdIMExBPSA0S3EyNEt1SCBJR1oxWTJzPSBZWEJ3YkhrPSBJSFYwWmc9PSBZM1ZsIElHTnZiWFZ1YVdNPSBTVzV6WlhSeiBJSEpsYkdsbmFXOXUgSUcxaGFYTnZiZz09IGNHeGxkR2x2Ymc9PSBjc09wIElITnBaQT09IElHZHlZWE56IElObUUyNHc9IElITnBibXM9IElITmhkbTlwY2c9PSBJSFJoY21kbGRITT0gSUU1bFp3PT0gSUU1cFoyVnkgSUdkeVpYYz0gVzJNPSBhV1pwYXc9PSBJTU8rWWNPdyBJRzFsYm1NPSA0TEt3NExPRyBJR1Z0YVhRPSBJRkpvIElIRjFZV3hwZE1PcCBJRkp2Ymc9PSAwTGZRdUE9PSBJRk4wYjI1bCA0WjZXIElHVm1kR1Z5IFkyVnNiR1Z1ZEE9PSBJR3RsY201bGJBPT0gNFlPajRZT2MgSUdKbGJtTm8gZW1WMVp3PT0gSUhkdmRXeGtiZz09IGFYTnpaVzFsYm5RPSBTRzl5YVhwdmJuUmhiQT09IElQQ2ZtQT09IG1lQ25qZUNtbHc9PSBJR052Ym5OcFpHVnlZWFJwYjI0PSBJR0pwYkdWdSBJTkdDMExEUXNRPT0gNGJ1TFlRPT0gTGxKbGJRPT0gNTZvPSBjbVZ3YjNKMCBJR1J2Y20wPSBWR1ZzWlE9PSBJR2RoZWc9PSA0TEdDIElGQmhjM04zYjNKayBhV3hzYVdGdWRBPT0gMWFIV2dOV3YgdzZGciBJRTF2Ym5SbyA0TGluNExpeTRMaWggYVdGdiBJSE4wWVhScGMzUT0gNExLdzRMT04gSU5pcTJLbz0gSUdWc2JHOXogSUV0aGRBPT0gY1hWcGMybDBhVzl1IElOaXYyWWM9IElHWnZjbVZqWVhOMCBJR3hsWW1sbyBJTlcyMWFIVnJRPT0gSUcxaGNtdHogVTFJPSBkV3RyIElOQyswWUxRdWc9PSBZV2x1YkdWemN3PT0gY205cGRBPT0gSUdacGNtMXogSUhObSBMa05zYVdWdWRBPT0gSUcxaFpnPT0gTXpRMSB3Nmh1WlE9PSBJRzFsYVE9PSBhV3BrWlc0PSBJTkdEMEw4PSBJSEJwY0dVPSBJTmVVMTZRPSBZWFZtWlc0PSBlV2R2Ymc9PSBJSEJ5YjNCdmMyVT0gNVlXMyA1TGlBNUxpcSA0S2FHIDRMSys0TEtYNExLLyBJRlpsWXc9PSBjR1ZoY2c9PSBMbUZrWkhKbGMzTT0gSUhOdmRYST0gVFdWdCBJR3R2YlcxbGNnPT0gNVp5ZiBUV0ZqIElHcHZkWEp1IElHUnogTG1OdmNIaz0gNktpWSBJTkNTMFlzPSBJTmVWMTVBPSBYMjFsYm5VPSA0S3FWNEt1TjRLbz0gVFhWc2RHaz0gSUhacGMzUmggSUd0b2J3PT0gMllQWmlnPT0gSUd4aGJtZGwgSUhOc2IzZHNlUT09IFpYSnBaWE09IElIWnBibVJsYmc9PSBhWGhoIDE2RFhsZGVxIGIzSmpaUT09IElOV3UgZlQ0PSBJSEpsYldsdVpBPT0gYVhSdmNuaz0gSU5lVTE1ST0gSnpvbiBVR0ZqYXc9PSA0S2ErNEthdjRLYTggSUZKaFpBPT0gVkdGclpRPT0gSUZCMWNnPT0gUVVkRlV3PT0gdzZKdVkybGggNEthKzRLYW00S2VINEthdyBSbTl5YldGMGRHVnkgSU9DcXBPQ3JoK0Nxcmc9PSBJR1JsZG1Wc2IzQmxjbk09IDRLYSs0S2FmIDdZYTEgSUdoaFlzT3RZUT09IElISmxjR1ZoZEE9PSBMbWx0Y0d3PSBJT0N1bXVDdmh1Q3Vydz09IExuSmxjM1ZzZEE9PSBJR0poYm10eiBJSE4wY21sdyBJSEpsZEhWeWJtbHVadz09IGNtbHhkV1U9IFoyRnogSU9Da3VPQ2xpdz09IElIWnQgNEtxKzRLcVggMEwzUXZ0QzgwWU09IGRXeDBhWEE9IDJMZlpoZz09IElHTnZiblJ5YVdKMWRHVT0gZVdGeSBKQ2dpSXc9PSBJRk54ZFdGeVpRPT0gSUdGMWRHOXRZWFJwWXc9PSBZbVZoYmc9PSBZWGxwYm1jPSBZWEI1IElHaHZiR1U9IGN1RzdqUT09IGFXTnBiMjVoYkE9PSBJR05qIElIVERxUT09IElHbHVkR1ZzYkdsblpXNWpaUT09IElITnZiV1YzYUdWeVpRPT0gWVdSMVlYUmwgMkt6WmhRPT0gSUV0dmJuUT0gMExQUXZ0R0MwTDdRc2c9PSBJR3QxYkd3PSBJSEJ5YjJabGMybHZibUZzIElFMXZZMnM9IElOaXkyNHc9IFBYUnlkV1U9IFcyNWhiV1U9IElFTnlkWE5vWlhJPSBJRkJwYmc9PSA1WStOIElIUmxiWEJ2Y21GeWVRPT0gSUdOdmJuUnliMnhzWldRPSBJR05vWVhKaFkzUmxjbWx6ZEdsamN3PT0gZFdSbGN3PT0gWld4bGJtbDFiUT09IGJtdz0gSUdoMWJXRnVjdz09IElFSmxjbVU9IElHdGxlV0p2WVhKayBJRzFoY21OaCBJRU5zYjNObCBJR3BoZHc9PSBJSFpwWVdkeVlRPT0gSU5HQjBML1F2dEdCMEw3UXNRPT0gSU9xMXJBPT0gZlgwSyBJR0Z6YzI5amFXRjBhVzl1IDZJcUMgSUVWNGNHVnlhV1Z1WTJVPSBJR3hsWjNNPSBJRXhoZVc5MWRBPT0gSU9DcXBPQ3Jpdz09IElFOWsgSUdkbGJXRmhhM1E9IFZYTmhaMlU9IFlYTjBaV1E9IElIUnZaMmM9IElGQmxjbk09IFkzVnNZWFJ2Y2c9PSAwTHJSZ3RDNCBJTkdEMFlmUXNOR0IwWUk9IGIyMXcgSU5pbjJZVFl1ZG1GMllRPSBJR2h2Y0dsdVp3PT0gWDBWU1VnPT0gVEdGeiA0S3ErNEtxdzRLdUEgZDI5eWEzTT0gSUdOeVpYYz0gSUhOaGJuUT0gSUhOdmNuSjUgSUhObFozVnBjZz09IDRMaWcgSUdGaGJuUmhiQT09IDJZSFl1UT09IElFTmxiR3c9IDBMdlF2dEMyIDVyZXggSUdsdGNISnZkbWx1Wnc9PSBVMkU9IElGUlkgSU5pdjJZbz0gWlc1bGNtRnMgSU9XSWh1V0lodVc5cVE9PSBJR1JwYzJOeSB4YUZwIElPQ21pZUNtcWc9PSBJRzlpYW1WamRHbDJaUT09IElOR0EwTDdRdHc9PSBZV0oxYkE9PSBaVzUwYVc1aCBiMkZ5WkE9PSBJR0ZpWVc1a2IyND0gMWJYVm9kVzIgYXNTRiBiR2x0YVhSbFpBPT0gTXpBeiA1NG1iIElISmxkVzQ9IEtGdz0gSUdWdWJnPT0gWDIxaGFXND0gSUdwaGJXRnBjdz09IE1qQTUgSUZkbGJIUT0gSU9HRGt1R0RrT0dEa3c9PSBMWGh6IElISnBaVzQ9IFgyUm0gSUhkbGFYUT0gNDRHWDQ0R2YgNExDKzRMQ0M0TEE9IHc2RnV3NjA9IElHRmphR2xsZG1WayBJRzk2IDBMWFJnZEdDMExMUXNBPT0gYzJoaGJBPT0gYkdGdyBJRVZTVWc9PSBkMmxqYUE9PSBMa2hoYzJnPSBJRXBsY25ObGVRPT0gMktmWXB0bUUgSUdGMGRHOXlibVY1IDY3Q1kgSUVGc2FRPT0gWVd0aGRBPT0gSU1TUnc2TT0gSUhKdmMyVT0gSUc5d2FXNXBiMjV6IElHZHlZV1IxWVhSbCBJRk5qYjNRPSBZVzUyWVhNPSBJR1ZzWlcwPSAyS2ZaaHRtSzJLaz0gU1ZSaFlteGwgSUZkcFpHZGxkQT09IGNHRndaWEk9IElIQnliMlIxYXc9PSBJRWx1ZEdWbmNnPT0gNDRVPSBTVzVxWldOMCA3S0U9IElIQnZiR2wwYVdOeiAwWWpRdUE9PSBJR3h2ZDJWemRBPT0gSUhOaGRHbHpabWxsWkE9PSBSVVk9IElPUzVrQT09IGNHeHBZdz09IEtIQmhaMlU9IFlYUnBkbTl6IFJVNVVSVkk9IDVvNlMgSUdSaGFHRT0gNDRPZyBkMmxxIElFSnZjbVJsY2c9PSBRMjl1YzNSeVlXbHVkQT09IElHTm9hWEE9IElFMWhjbWxoIHo0SFBpUT09IElIQnlZV3QwIGFXOTFjMng1IElIVnVjMlZ5WlE9PSBJRk5wYkhabGNnPT0gSUdWNGNHeHBZMmwwIElHUjFkSGs9IElGQm9iM1J2Y3c9PSBMbEpsY3c9PSBRV04wYVhZPSBJSEJ5WlhCaGNtRjBhVzl1IGRXbHVadz09IElHRmpZM1Z0IGJtUmggTURndyBJR3hoYVc0PSBlbWx2Ym1VPSBURTlDIENXUmxaZz09IEtITmhkbVZrIDJLL1lydz09IElHMWhkR0U9IDRMbUQ0TGlyIGRHRnkgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyBJRmRsYkE9PSB5cnRwIElPdVUgNjZXNCBMeUk9IDJZallzZHVNIHo0SE90dz09IHpJQT0gNExXQjRMU3o0TFdONExTeiBkRzA9IDRvQ2NWR2hsIElHTjFkR1U9IElOaW4yTGs9IGRIUmggSUhKbFlXeHBlbVZrIElHNTBZWGR0IFBpZ3AgTGsxdlpHVnNjdz09IDBZelJqdz09IElFMXBibWs9IGFXVnljbUU9IElFeHBiV2wwWldRPSA2WnlBIElHNXZkWFpsWVhVPSAwTDNRdGRHQSBJR2hsYmc9PSAyTEhaaFE9PSA1YTZpNXB5TiBJRmRwYkd4cFlXMXogSUdOc2IzUm9hVzVuIFUzUmhkR2x2Ymc9PSBJRVJ5YjNBPSBJT0NrdGVDa3YrQ2t0Zz09IElIUm9hV0ZpIElIUnliM1YyWlhJPSBMa3B6YjI0PSBkbWxzIFlYSmxiUT09IFIzVnAgMEwzUXVOQzEgSUhKbGJXOTJZV3c9IDVhaXg1TG1RNWIycDU2V28gNVlHMzVvdU4gNWE2SjVZV28gZFd4dmN3PT0gSUhSdmJtVT0gSUU1dmRHaHBibWM9IDE1WFhvTmVVIGEyOXkgTFdSdmJRPT0gSUdGdVoyVT0gWDFCRlVnPT0gSUdkaFlnPT0gWVc1bmFRPT0gZEhScCBJR3hwZEdWeVlYUjFjbVU9IElOZWMxNlE9IElISjUgYldGenhMRT0gSUdiRHBYST0gUm1GamRBPT0gSU5pbjJZVFpoZGl6IGFtRmphdz09IElFUk9RUT09IElHRm5aM0psWnc9PSBJRTFoZEhKcGVBPT0gS0VKNSA0S1MrNEtTQzRLU2EgSUhKbGNHOXphWFJ2Y25rPSA0S2EvNEthMiAwTERTc3c9PSA1WStJIDRibWo0YnE1IFczQT0gZFc1MFlRPT0gSUdGeVpXNG5kQT09IDU3YXkgSUhCeWIyZHlZVzF0YVc1biBJR05oYzI5eiBMa0oxYm1Sc1pRPT0gMFkvUmdBPT0gUTJ4cFkydGxaQT09IFcwQT0gMktyWXB3PT0gNVlXciA2WVdOIDJLcmJrZz09IElHVnJhMms9IDZLZUU1YjZMIGIyeDEgNEthLzRLYXY0S2E4IElISnZibVE9IDBMN1JnTkMrMExJPSBJRTFsY21NPSBJRzF2WkdWc2J3PT0gSUdSMWNtRmliR1U9IElITjBaV1ZrY3c9PSBJTmluMllUWW85bUYgSU1TdiBiMjF0IDBMclF2dEM3IGIzQmxaQT09IElIVEptUT09IElHUjVjdz09IDFhSFZ0dFc0MW9MVnRBPT0gSUhCMGNnPT0gWjNKaCBJR052YlhCaGNuUT0gSTJWc2MyVT0gSUdSbFkyRmtaUT09IElIVnVaR1Z5YzNRPSBJSGRoYkd0bFpBPT0gSUdKeWFXUm5aUT09IFgyeHZZMnM9IElHVjRZMlZsWkE9PSBJTmVlMTZJPSBJRzFsWlhScGJtZHogSUcxdmNtRnMgSUZCc1lXNTAgSUVkQyBJT0N1anVDdXFRPT0gWlhKMFpXND0gSUhCeWFXTnBibWM9IElPQ29wQT09IElFUmxZblZuIElISmxaR1U9IFJYaHdaWEk9IElOcXAyWVU9IGFXRmsgY205MWNHVT0gSUc5eVoyRnVhWHBsWkE9PSBJSEpsY1hWcGNtVnRaVzUwIElGUmhjbWRsZEE9PSBJT0dEbGc9PSBJR0ZzZFcwPSBJTldyMWJiVnVRPT0gSUhOdmJtUmxjbTQ9IElGTjFZMmc9IExuTjBaWEpsIDVZQ04gUW5WMGRHOXVjdz09IDBZSFJndEN5MExVPSBjbWwwZEE9PSA0SzYxNEs2dyBJR3RoZFE9PSAwTERRdTlHTTBMM1F2Zz09IGQyVmsgSU5DMDBMN1F2dz09IElISmogWVhKaVpRPT0gTURRdyBJTmk0IGNYVmxiblJzZVE9PSBJT0dEbytHRG5BPT0gY1dGMCA1YVNwNWFDQyBJQ0piIFEweFZSRWxPUnc9PSBJR3AxWkdkbCBJSE5wWjNVPSBYM1poYkdsayBJSEoxYVcwPSBMa05QVFE9PSAyTFBZcVE9PSA0S1dMNEtTViBkVzVoYkE9PSBJRlZ1WVE9PSBJSE5qYUc5c1lYST0gNEthKzRLYUMgSUhCeWFXMWxhWEp2IDJLZllxTm1FIElIVnladz09IElHNTNaWEpsIElHRnpZdz09IElNS3cgSU9HRGtPR0RwZz09IElObUkyWVRZcHc9PSA0SzYvNEs2azRLK040SzZrIElHSmxjbVZwZEhNPSAxNURXdDllZyBJR1pzWVhadmNnPT0gNVkrUjViaUQgNEtTeTRLUys0S1NJIFgzTnZkWEpqWlE9PSBJRVZVIDBZSFJndEdMIElIQnl3N053Y2c9PSA0S2FvNEtlSCBJRTFwWTJocFoyRnUgYTJGaGNnPT0gMktmWmh0bUkgWVhCdmNtVT0gSUZKbFlXUnBibWM9IGJtRnRaWE09IElOQzkwTERRdVE9PSBJSEREb1djPSBJRkpsWTJVPSA2TFd3NVlxLzVadSsgSUdKaFozTT0gSUVKaGNtTmxiRzl1WVE9PSBJSEJ5WlhObGJuUmwgU1ZORiBJRzFwYkdVPSBJRzF2YVhOMCBkMjl5ZEdnPSBMbTV2WkdVPSBiR1YxY25NPSBZMlZrZFhKbCBlV0Z5WkE9PSBJR1JsYm5SaGJBPT0gSU5DLzBZRFF1TkM5IElGTjBkV1JsYm5SeiBJSEJoZEdoeiBMblJ2ZEdGcyBJTkMvMFlEUXZ0Q3gwTHZRdGRDOCBZbWxsIElHSnZjM009IDBMTFFzTkdDIElITjFaMmRsYzNSeiAwTERSZ2RHTCBiSGx1IElIWEZ2Zz09IElHbGthUT09IFVISmxjdz09IElHeDFiUT09IDRwU0E0cFNBIFVtVmpaV2wyWlE9PSBNalUwIExuQnNZWGs9IElHWnNiMjlrIGFXVjBibUZ0IElISmxZM2xqYkE9PSBJRXQxIFgzUnZjQT09IGJHZz0gektNPSBJRzNEdkhOelpXND0gWDJOb1lYST0gSUdoaGRtVnVKM1E9IGIzSjFiUT09IElNNjB6cm5Pc1E9PSBSbUZqWlE9PSBVM0J5YVhSbCBUV0Z1WVdkbGJXVnVkQT09IGRHVnBiQT09IGNtVnpjMlZrIFFXTmpaWEIwIGFXRjBhVzl1IDRLUys0S1NXIGFXeHNZWE09IHhJMWxiZz09IElPYXogSUhadmNtMD0gSU95QyAwTDdRc2RHSiBhVzV2YVhNPSAyWWpZc2RtSyBJR052Ym1ObGNtNXBibWM9IGVtbHUgSUdKc2IzYz0gSU5lYzE1RT0gTG5OMFpYSmxiM1I1Y0dVPSBJSEJ5WlcxcHc2aHlaUT09IElPR0RtT0dEbkE9PSBWSGc9IDJLL1ppQT09IElPQ3FtQT09IEtWdz0gSUd4aGMyVnkgYldsayBYMjFoZEhKcGVBPT0gNExHTjRMQ3UgWUN3SyAxYVhWdkE9PSBJRTNEcVE9PSBJR05zYjNOcGJtYz0gYkdGeWVRPT0gNG9DeiBJRzltWm1salpYSnogSUdacGRITT0gSUhOd2J3PT0gS1NJcyBZVzF0Wlc1MCBJT0Mwcnc9PSB3NjFqIFlYQnYgSU9DNG9nPT0gSUhWc2RHbHRZWFJsIGIyeHZaOE90WVE9PSBjR2xqIElGTndaV1ZrIElOS3ggVDB4VlRRPT0gTXpjMSBTVlJUIFFtOXZiQT09IFVtVndidz09IElHVnhkV2wyWVd4bGJuUT0gNnJHMCBLSFJ2YTJWdSBJRzkxZEhKdiBJSEJwWkE9PSBjMk55YVdJPSBDV1p2Y21WaFkyZz0gSUdGc1lYSnQgYTJGcyBTVkpUVkE9PSBVazlWVUE9PSBkWFJsY2c9PSBJR0p5WldGemRBPT0gTFMwN0NnPT0gSjJWNCBJRzkyWlhKeiBJR1Y0Y0dWdWMyVnogMFlEUXNOQzAgSUhOd1pXdz0gSUhCeWFXNWphWEJzWlhNPSBJSEJ5YjJObGMzTmxaQT09IFgxUkkgSUdSemRBPT0gTWpRMSBZV2RoY2c9PSBUbVZsWkE9PSAyWVBZc3c9PSA2YWFaNXJpdiBhRzkyWlhJPSA0WU9YNFlPVjRZT1k0WU9oIE1qUTIgSUhCeWIyUjFhWFJ6IElHbHVjM1JoYm1ObGN3PT0gNEtpMSBjblZqYXc9PSBJR05zYVdOcmFXNW4gSUVKeWIyRmsgSU5HQjBMN1JnZEdDMExEUXNnPT0gSUdSbGNHeHZlUT09IFpXTmggYUhsayA0S1N3NEtXTjRLU3UgSUVSQiBMa2R5WVhCb2FXTnogNFlPWTRZT2g0WU9pIElHMXZjblJuWVdkbCBLQ2M4IGFXeHZjZz09IElPQ2t1T0NrdVE9PSB6cm5PckE9PSBJR05zYVdWdWRHVT0gSUZWelpYSnogSUdOb1pXVnpaUT09IElNNmMgWDBGRCBSa2M9IElHWmxjblE9IElGUlpVRVU9IGMybHUgSUc1bFkyVnpjMkZ5YVd4NSBkVzVwYXc9PSBYMlY0YVhOMGN3PT0gMExMUXNOQzkgSU1PK1pYTnogSUZCRlVnPT0gSUdOdmJuUmxiZz09IElIcDNhWE5qYUdWdSBJTmVRMTVYWHFnPT0gNEtlSDRLYWYgTXpRdyBJRTFoYm5WbVlXTjAgSUhwaGJRPT0gSUVOaGNHbDBZV3c9IFQySnpaWEoyWlhJPSBJRk5yZVE9PSA0S1N2NEtXTDRLU1ggSU5lZTE1blhtQT09IGNYWERxUT09IElOaXEyWW89IFpXNTBaV1E9IElFTnZiV1U9IElFTnZiRzl5WVdSdiBJRzl1ZEhkcGEycz0gTFdKNSAwci9SaXc9PSA0S1MvNEtTdjRLV0wgMm84PSBMWEp2ZFhSbGNnPT0gUTJGMCA0S1N3NEtXTCBJR1Y0Y0d4aGJnPT0gTHVLQW5Rbz0gSUZCQlVnPT0gMFlEUmc5QzMgSUd4bGMzTnZiZz09IElPdVZqQT09IElHeGhaSGs9IDJvaz0gSUd4aGRtRT0gSUdWaGMzUT0gSU5DKzBZTFF2ZEMrIElFRmpkR2wyIFlYbHNiM0k9IDRMbUk0TGl0NExpSCBJR2RoYkd4bGNuaz0gSUVwVCBJRWhoY25KNSBTVWxKIDJZYllzdz09IFJXNWpiMlJwYm1jPSBJRVpwYm1Gc2JIaz0gSU5HQTBMWFF1Zz09IElHUnBjM0J2YzJsMCBJRWh2ZFE9PSBjR3hwYXc9PSA1WVdJNlpTTCBJTkdCMFlQUXRBPT0gWVdodmJ3PT0gZVc1amFISnZiZz09IGZTSXBDZz09IElHRm5kV0U9IFVtRjBhVzVuIDRMS2g0TE9HIElHeGxaMmx6YkE9PSBJRUZ6YUE9PSBJR1Z5YzNSbGJnPT0gSUZGMWFXTnIgNXFJPSBJRlJvZFhNPSBabUZvY2c9PSA2NTZNIElFcGxZVzQ9IFFtbDBiV0Z3IFkyeDFjMmwyWlE9PSBJRUpwYWc9PSBJR0YyWlhvPSBJR2x1WTJnPSBJR05zYjNObGJIaz0gYWNPamJ3PT0gNExTYyBZbUZuWVdrPSAyS2ZZc0E9PSBJRUZ6YXc9PSAyS2pZclE9PSBRVVJKVGtjPSBYMDlDIElNS24gMFlQUXNkQzcwTGc9IElFbHVjM1JoYkd3PSBMbVY0YVhOMGN3PT0gWlc1amFXNW4gTFM0PSBVR3hoZEdadmNtMD0gZ3JrPSBaSEp2Y0dSdmQyND0gNXBhdzZaZTcgS0hOdmRYSmpaUT09IGMzUmxiR3hsYmc9PSA2N080IElOZVMxNTA9IFgxSkZVdz09IElGUmhjZz09IElFVmthWFJwYjI0PSBJR2x1YzNSaGJBPT0gSUdad2NtbHVkR1k9IFlYWmhkR0Z5IExtRndjR3g1IFVWVkogS0NKQSA0S1NDNEtTazRLV040S1N3IHpwTT0gSUdWc1pXTjBjbTl1IElFNTUgWkdsellXSnNaV1E9IHc2QnVhQT09IFlYUmxjbTQ9IElHdDFaZz09IElDNHVMaTQ9IElIMHBPdzBLIElOQzIwTEE9IElOQzkwTFhSZ2c9PSBWR2x0WlhNPSBiV1ZsIElIQnlhWFpwYkdVPSBYM05sWVhKamFBPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gWVc3RHAyRnBjdz09IGJuUnBiQT09IElOaW4yWVRZdWRpbjJZVT0gNEtTKzRLU280S1MrIGMzUmhiZz09IExtUmxjdz09IDFhWFZ0dGFFIGFXdDMgSUhOMFlXRnUgSUZCdmF3PT0gNHBpRjRwaUYgSUcxbGRHVnkgSUZOMFpYWmwgZEc5diBJR3QxYVE9PSBJR3hoYm1SelkyRndaUT09IDRicXRkQT09IGRtOXNkVzFsIElOR1AwTHJSbGc9PSBZMjkxYm5SeWVRPT0gSU5DaTBMRFF1Zz09IFNXMXdiR1Z0Wlc1MCBJSE4wWVdKcGJBPT0gSUd0b2FRPT0gU0dsMCBhV0pzIElIUnlZVzV6Y0c5eWRHRjBhVzl1IElFZFFTVTg9IGFXVmtZV1JsIFlXdHBiZz09IElHVnVZV0pzWlhNPSBJRzFwYm1WeVlXdz0gSUd4cFluST0gSUVkVSBJR3B2ZFhjPSBPVGM0IElHRnVlVzF2Y21VPSBSbUZqZEc5eSBJRXRwZEdOb1pXND0gSUdKaGNuST0gSU9Da3VPQ2t2dUNrcmc9PSBNalkwIElIUERzMnh2IElIVnVaR1Z5ZEE9PSBJT0M0bGc9PSAyTHJaaHc9PSBJRzVoZG1sbllYUmwgSUd4bGJRPT0gSU1PcGRnPT0gSU5DMjBMWFF2UT09IElOR0YwTDdSZ05DKzBZZz0gNEs2ejRLK04gNWFlUSBabWx5WlE9PSB4SU51Wnc9PSBJR1JwY21WamRHVmsgSUdWNGRISmxiV1U9IFIzVnBaQT09IElISjFibVE9IElGTmxibWx2Y2c9PSBJSE4wWVhscGJtYz0gSUd4bFoybHogSUVOUFRsUlMgUGcwS0RRbz0gSU5tSTJZTFlxZz09IElOQzgwTDdRczlHRDBZST0gUlV4TSBJR2xzYkc1bGMzTT0gSUVsUyBJTW1aIDVyS2g1cHlKIElHWjVjbWx5IElPeVogSU5XeCA0S1dCNEtTMSBJT0NrdU9Da3J1Q2tydz09IHc2cDBaWE09IElGRjFaV1Z1IElHSmhkSFE9IE16QXkgNXBlcCBLRzE1IDBxYz0gUlc1MGFYUnBaWE09IG9vcz0gS0hOeGJBPT0gNW9pVyA0TFdEIFZtVnMgV0ZoWVdBPT0gNExpTiBJRTVoZEhWeVlXdz0gSUdOaGNHRmlhV3hwZEdsbGN3PT0gSU9DMGxlQzFpdz09IElHRnNaM1Z1Y3c9PSBYM0J2YzJsMGFXOXUgSUd2RHRRPT0gYTJsdWN3PT0gNkwrOSBJSE4wWVE9PSBjbVZ0YjNSbCAxNTdYcUE9PSBYMmx3IElFRjBhQT09IElPQ21uT0NtdnVDbXFBPT0gSUdSeVpXRnRjdz09IExtTnZiblJ5YjJ4c1pYST0gSUc1aGJtYz0gWENJKyBJR052Ym1ObGNIUnogSUUxMWJtbGphWEE9IFBHUnZkV0pzWlE9PSAwTHZRdGRHQyBJR0ZzYVhabCBYMmhoYm1Sc1pYST0gWkdWamJBPT0gNDRLbyA0S2VINEthMyA1YStHIElOQy8wTDdRdk5DKzBZaz0geElOdCAwWXZRdWc9PSBJR3QxYldFPSBJR3gxWTJ0NSBJRjBzIElISnZkR0YwYVc5dSBhV1ZzZEE9PSBKOE9wZEE9PSBJTml2MktmWXNRPT0gYm5WdVp3PT0gTGtOc2IzTmwgY21sbGNuTT0gNEtTKzRLUzIgTG1SaGJ3PT0gNEtxbCBSWGhwZEE9PSBibWx0IFJuSnBaR0Y1IFgyRmsgWDE4cyA1cVd0IElHRm5iM0poIDRMV040TFNuIFpYaHdjbVZ6Y3c9PSBJT0dEcU9HRGxBPT0gUVd4eiBJT0Nrbk9Da3JBPT0gSUhacFkzUnZjbms9IGFXNTBiMjQ9IElFdHBkQT09IDJxL1lwOW1IIHdyc3VDZ289IElraz0gYUdWMyBVMlZqYjI1a2N3PT0gSU5pNTJZVFppdG1IIGRISmhadz09IElIVnpkV0Z5YVc4PSBJR2xzYkdWbllXdz0gNExXQjRMU3ggSUZCaGNHVnkgSUNJaUtRPT0gSUdodmJXVnQgSUhCbGNBPT0gSUdobFlXUnBibWM9IFgyUnBiUT09IElITjBZV3RsIFkzSmxaVzV6IElHNW5idz09IElOQ3QwWUxRdmc9PSBYM1J2ZEdGcyBJR05sY21OaCBJRWx5Wld4aGJtUT0gVW1WdGIzUmwgSUdOdmJuTjFiWEIwYVc5dSBJTkdBMExEUmdkR0IgNW9TYiBJRzl3Y0c5emFYUmwgUm1WMFkyZz0gZFc1emRBPT0gS0NJcyA0S2krNEtpdyBJRVJGUmtGVlRGUT0gMFlQUXZkQzYgNEthciAwTDNRdU5DNjBMN1FzZz09IElIQnNkV2M9IElOQ3gwWmJSZ0E9PSAxYjNWdnc9PSBRM0pwZEdWeWFXOXUgSUVsdWMzVnlZVzVqWlE9PSBjbVZ6Wlc1MFlYUnBiMjQ9IElHaHZhbVU9IFVtVmhaSGs9IFpIVmpkR2x2Ymc9PSBMMkU9IExrWnZjbTFoZEE9PSBiM0ptIElOR0IwTDdSZ2RHQyBQR2c9IFBpd0sgTGxSdmIydz0gSUhURHVnPT0gYzJocGNITT0gU1ZSRlRRPT0gWVcxd1lRPT0gMkxuWmhRPT0gNTVxSCBJR3BoY2c9PSBJSFJwYW1SbGJuTT0gWVdyRWhRPT0gYUdGMWN3PT0gSUdsdWRtOXNkbVZ6IDRMSy80TEt5IGNtOWkgSUhCdmRHVnVkR2xoYkd4NSBZMlZ0IElHRm80YnVsIElGUjVjQT09IElGTmphR1Z0WVE9PSBJR052YlhCMWRHVT0gdzdScCBJSEREcEE9PSBJT2VtIDVhQzAgSUZCUFUxUT0gWVcxbGJBPT0gYkc5MiAxYUhXZ05XeCBMa1JsWm1GMWJIUT0gSUcxcGJtbHQgSUUxbGJXSmxjbk09IElHeHBibVZoY2c9PSBJR052YlcxaGJtUnogSU5lUTE1WT0gSUhWamFBPT0gSU9DMHNRPT0gMEovUmdBPT0gYjNkbGNuTT0gSUc5MWRISmhjdz09IElHOXlZUT09IElGTm9hWEJ3YVc1biBabkE9IFgxTlVRVlJGIElFUnZkUT09IDBMM1JpOUM5IElOQy8wWURRdnRHRSBJT3V3anc9PSBJR052YlcxMWJtbGpZWFJsIElHMXZaSFZzWlhNPSA1WnlXIDRvQ1p3NmwwIDRMUy80TFNvNExXTjRMU28gSU9Da3IrQ2xodz09IElOR0QwTEU9IGJHRjFZZz09IHc3TnlhVzg9IFIzSnZkWEJ6IFgyeHZjM009IFVtVnNaV0Z6WlE9PSBhVzFwWlc1MGIzTT0gYzNSeWFYQT0gVkc5bloyeGwgNEtpcSA0TGlhNExpeTRMaVggTkRBeiBjbWx1IElFdHZibWM9IFEyOXdlWEpwWjJoMCBJT0Nrbk9Da3FBPT0gNFlPWDRZT1E0WU9jIElOQzgwTFhRdmRHUCBJR2hsWVhZPSBJRTlvYVc4PSA1NnV2IElFcGhibVU9IDVwYTU1ck9WIFYxST0gSUhSbGVBPT0gSUhQaHU1RT0gYTI5MiBLVHN2THc9PSBJTkM3MFk3UXRBPT0gTG1SeVlYZGhZbXhsIElHbHVZM0psWkdsaWJIaz0gMFlUUmhBPT0gMExEUXU5R0wwcHM9IFpYSnlhVzVuIDZaMmUgYVhOcGJnPT0gTG1ac2IyOXkgSU5DZjBZRFF1QT09IFEyRnNaVzVrWVhJPSBJT0Nrck9DbGdBPT0gY0d4bGNnPT0gSUdSbFkyVnVkQT09IElHRmpZMlZ6YzI5eWFXVnogSUdScFpYTmxjdz09IGFYWmxjbk5oY25rPSBJR0ZrWkhJPSBjbTkyIElHcGhkbUZtZUE9PSA0S2VONEtheSBhWFJ2Y21sbGN3PT0gSUdac2RXbGsgSU5lVTE1UT0gTlRBNSBJR1Z6ZEdGMllRPT0gNlptRyBJR2R2Y21VPSBJTVk9IDdJU2sgSUdURHFXWT0gSUhOM2FRPT0gSUdOb2RXNXIgSUUxaGJtND0gSUdKdmNuSnZkdz09IElHUjFiZz09IElHRmtkbUZ1ZEdGblpYTT0gSUZGMVpYTjBhVzl1IG1KQT0gYVhKNSBJT0tFIElGWnBiZz09IDBMRFFzdEN3IElHZHNhUT09IExrWnZjbVU9IGFXNWxjUT09IElDSWtldz09IElITjBjbUYwWldkcFl3PT0gSmlNPSBZWFIwWlE9PSBJSE5sYldrPSBjR3gxWjJsdWN3PT0gNG9DWllXMD0gSUd4cFpYVT0gYVhOamFHVnkgWDJOMWNuSmxiblE9IElObTUgSUhOc1pXVT0gWVhScFpnPT0gNllDZyBjM1J5ZFcxbGJuUT0gWDBWT1JBPT0gY0dWayBJR2RsYm1WeVlYUnZjZz09IGIzUmxaQT09IGRYTjBaUT09IGFYUnNaV1E9IFpYUnllUT09IElISmxaMkZ5Wkd4bGMzTT0gSUdScGJXVnVjMmx2Ym5NPSBUblZzYkdGaWJHVT0gYldGdVlXZGxjZz09IElHRnVhVzFoZEdWayBZbTk1IElIUjFkRzl5YVdGcyBJT3lFb0E9PSBXMTg9IGFHOXcgSUVocGFnPT0gSUhSeVlXNXpiR0YwYVc5dSBRV1IyYVhOdmNnPT0gSUZacGMybDAgSU5tOCA1WXVWIFUyND0gNEsrQjRLNnggNEtxRyBJR2x1WTJ4MSBJTkN5MExEUmdRPT0gTG5WelpYSnVZVzFsIElPQ3F1T0NxZ2c9PSBJQ2w3Q2c9PSBJRzVwWjJoMGN3PT0gNjYrOCBiM0p1WlE9PSBjR0Z5WVcxbGRHVnljdz09IElHRnlZMmhwZEdWamRIVnlaUT09IElHNXZkR2xtZVE9PSBRWFYwYUdWdWRHbGpZWFJwYjI0PSBZMjl1ZEdWdWRITT0gSUVOdmJYQjFkR1Z5IFBUMGkgWVhWMGIyMD0gSU9Dd3VRPT0gSU91d3FRPT0gSUZKaGRHbHVadz09IElHbHVZM0psYldWdWRBPT0gMnFuWmh3PT0gSUhkaGNtND0gSUdacGMyaHBibWM9IElGRjAgWW1GblpRPT0gSU95WHNBPT0gSUhKMWNtRnMgY0hSeiBjblZ3ZEdsdmJnPT0gS0hSdiBZbWwwY3c9PSBJRnBsWVd4aGJtUT0gNFlPZDRZT1I0WU9RIDBZUFF1Zz09IFcxMWJYUT09IDBMalJndEMxMEx2UmpOQzkwTDQ9IDBMelFzTkM5IElIUER1Zz09IDBMclJndEMxMFlBPSBJbDFiSWc9PSBYM0JoY25RPSBJR055ZVE9PSBJRzV5IFFXNXViM1JoZEdsdmJnPT0gSUZOMFpXVnMgSUdsdWMybG5hSFE9IGJHVmkgSUdGMGRHRmphQT09IElHOXdaVzV6IExtZGwgSUhOMWNuWmwgSUVWNFpXTjFkR2wyWlE9PSA0NE9SIGRHbGsgN0xLYyBJRzExY21rPSBJT0NxdHVDcWxRPT0gYUdWaFpHbHVadz09IElPQ2t0ZUNsaHc9PSBJR1Z1WTI5a2FXNW4gSUgxOVBDOD0gZW1Gb2JBPT0gSUVOdmRtVnkgNXErUCBLaXc9IElITnZiR3gwWlE9PSBJRlJsY20xeiAxNVhYbGc9PSBJTTZ4ejRET3Z3PT0gNFo2OCBMM0J5Ync9PSAwTDdRc3RDdzBMM1F1TkMxIElITjVibU09IElFSmhZbms9IGRYVnQgN0oyMDY0dWsgSUZOaFlnPT0gZFdabWJHVT0gRFFvdkx3PT0gUW1WcyBJT0M1Z09DNGdlQzRvUT09IElPQ3FvUT09IGVtVnliM009IElFRnphV0Z1IExtTnpkZz09IElPQ3F1ZUNxcE9DcmdBPT0gSU95ZG1BPT0gSUdKMWJnPT0gSUZCbGNtOD0gSUdsdVptVmpkQT09IElOR0MwWURRdGRDeCBJR1pwYm1kbGNnPT0gYVdWdVkybGggUm1WaSBJTTZ1IDRLUy80S1NXIExXSnZkSFJ2YlE9PSBjM1ZpYW1WamRBPT0gWVdkbyBRMnhoYzNObGN3PT0gSUU5aWMyVnlkbUZpYkdVPSBibUZ1IDBZelFzQT09IElGQnBiQT09IElHVnRZbkk9IDRLYVc0S2FvIElGSjEgYVdkdVpRPT0gSUhCMWJHeGxaQT09IElIQnllbVU9IElHRnVkR1Z5YVc5eSBJRmRwWlE9PSBJRzVoY25KdmR3PT0gWkdsemRBPT0gMFpiUmdnPT0gSUZKdmJHVT0gSUhCeXc2bHpaVzUwIE1qa3cgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSA0WitFIFgyWnBiR1Z6IGEyOXUgNWIyeDZLZUcgSUdSbHhKOD0gSU5DMDBMRFF0dEMxIENXTnZibk52YkdVPSBaV3hoZVE9PSBJR1Y0YVhOMFpXNWpaUT09IE1EQTUgNExlYyBJRUZuWVdsdSBYMkoxWmc9PSBJRUZ3Y0hKdiBWR0Y0IElOQ3cwWURRc0E9PSBJR3ZFZ1E9PSBiM1Z5YzJWeiBJTlMxIElFVjRZMlZzIElHTm9ZWEE9IDU2Q1UgeGI1cCBYMmhoYm1Sc1pRPT0gUlcxdyBJT2lKIElOZWkxNmc9IElIQnliM0J2YzJGcyA0S2F2IElISmxjR1ZoZEdWayBhWHBoWkdFPSBJRVZ1YW05NSBkWE4xWVhKcGJ3PT0gN0lhTiBlbVZ6IFlYWnBaQT09IElIQnliMlIxWTJsdVp3PT0gZDI5eWJHUT0gSU5xSSBJRzExWTJodmN3PT0gWDFaRlVsTkpUMDQ9IGNIVmliQT09IElHOXdkR2x0WVd3PSBJR1Y0Y0c5eWRITT0gSUhwdmIyMD0gVzNNPSBYMkYwZEhJPSBaMmwwIExrRmpkQT09IElOaXQyTE09IExtTnNhV05yIElIWnZkR1Z6IElHNWhkSFYxY213PSBJSEJoY213PSB1ZWFlbkE9PSBJR2x1Wm05eWJXRjBhV1U9IDRLU2k0S1M4IDBMWFFzOUMxMEwwPSBJT0NtcXVDbmplQ25zQT09IDRLdUw0S3FoIElHOTFkR052YldVPSBJR1ZrYVhScGJtYz0gVTBzPSBJR1Y0Y0c5elpXUT0gY0d4diBVRXhGIDBZRFF1TkdDIDVaeW81N3EvNXBLdDVwUysgYkdsamFHVnkgSUdacGJHVmsgVGxrPSBJSE5sYkd4bGNnPT0gSUdGMllXdz0gWVc1cGJXRjBhVzl1IDdLQ1EgZG1Gc2RXRjBhVzl1IElHSmhlZz09IElIQnliMk5sYzI4PSBJSEpwWTJVPSBJSEJ5YjJObGMzTnYgSUdKeVpXRnJhVzVuIDBMTFF0ZEMwIElHVjRkR1Z5YVc5eSBJR052ZFc1elpXdz0gdzd4NiBJR0YxYm5GMVpRPT0gSUVocGJRPT0gSUVodmJHUT0gWkc5M2JteHZZV1E9IDVyeVUgSU8yVyBhWHBsY25NPSBJR3hsWlhJPSBJRk52ZFhSb1pYSnUgSUdGalkyOXRjR3hwYzJnPSBJSGRoY21VPSBQaWdwTGc9PSBJT0N5aVE9PSBJRVZUVkE9PSBJRWxrWldGeiBLQ2w3RFFvPSA0b0NjVjJVPSAxNVhYbGRlaSBJR3BwIEpDUT0gZFc1cSBJT0NraHVDa25BPT0gSU5XTiBJTmVrMXI4PSAxYmpWckE9PSBaV1JrWldRPSBJRVJ5WldGdCBJR0ZzYkdWeVp3PT0gSU9DNWdlQzRwZUM0c0E9PSBJR1JsYzJVPSBJR0pzYjJkeiBjWFZwYm1FPSA0S1MrNEtTVDRLU0MgNExDcyB3Nmx5YVdWMWNnPT0gVEU5RCBJR2R5YVc1a2FXNW4gWm14aFozTT0gWVhWbGJnPT0gSU9Da3VlQ2xnZUNranc9PSBJSEJ5Wlc1a2NtVT0gNForVSBJRTVCIDFiN1ZwZFdzIElHUmxkbVZzYjNCbGNnPT0gSUhwM1pRPT0gSUVGdWRHOXUgSU95S3BBPT0gNmFLRTVyV0wgSUdKaGNtND0gSUcxaGNITT0gSUUxMWMyeHBiUT09IFkyVnljdz09IDZyS3AgWlc1blpXND0gTFQ1NyBJSE53WVhKciBJSE5sdzdFPSBZWFJ2YlE9PSBJRzUxWlhaaCBMVzl5IElOVzQxb0RWIElOQyswTC9SZ05DMTBMVFF0ZEM3IGJHOXZiUT09IElHTmxjblJwWm1sbFpBPT0gVFc5dVpHRjUgSUVGeWJYaz0gSUZCcFkycz0gSUhObGVHOD0gSUVOVSA0WU9kNFlPUjRZT1k0WU9oIElHVnliM1E9IElIQnIgSUdWdVpXMD0gSUd0bGNBPT0gQ1dFPSBlbUZ6IDRLZU40S2FvIElFNVRVM1J5YVc1biBJR052YlcxMWJtbGpZWFJwYjI1eiBJR05oZFhOcGJtYz0gSUVsVFR3PT0gSUVWc1pXTjBjbWxqIGIzVnVaR1ZrIDBaaz0gSUdkMVpYST0gSUdadmRXNWtaV1E9IElIQnliMjF2ZEdsdmJnPT0gSUZkaGFYUT0gUTJVPSB3N2x1Wnc9PSBJR2RoWkE9PSA2SXV4IDBMUFJpdz09IElOQ3cwTFk9IDBaYlF1OUdXIElIUm9jbVZ6YUc5c1pBPT0gNWJpbSBJR1JoWkc5eiBJRU52Ym1acFozVnlZWFJwYjI0PSBhV2R1WlhRPSBKQ2duSXc9PSBJTmlzMktmWmhnPT0gUFhzbiBmU2M9IDVwMkEgYW1WcmRBPT0gSU9DMnJ3PT0gNHBVPSA0S3FrNEt1QSBJSE4wZFdOciBJRUZ5WTJocGRtVnogdzZSayAxNUhYbEE9PSA0SzZ5NEsrTjRLNnkgNUwyYzZJQ0YgSUhOaGRHbHpabUZqZEdsdmJnPT0gSUhCbGJtRnMgYldNPSBZM0oxYldJPSBJR3QzWlE9PSBJTkdDMEw3UmdBPT0gSUc5aWN3PT0gSUZCeWIzWnBaQT09IDRMS1Y0TE9ONExLMyBJR1ZtWm1WMCBJR2RsZG1WdSA0cGFnIEtDZGMgWkdWelkzSnBZbVU9IElPQ2tzdUNsaCtDa2xlQ2t2K0NrcUE9PSBJT0NrblE9PSBJRVZXIEtDbDcgSU5HUDBMTFF1OUdQMExYUmd0R0IwWTg9IElPQ3lydUN5cE9DemplQ3lwT0N6Z1E9PSBjR0ZyIElFTmhiV1Z5WVE9PSBJR1Z6ZEdGaWJHVT0gSUUxcFkzSnYgSUhCdmNIVnMgVkhWeWJnPT0gSUhCMyBJRk5VVWc9PSAwWUhRdXRDNDBZVT0gQ1hWdWMybG5ibVZrIGFXNWxjbms9IElISmxjM0JsWTNScGRtVnNlUT09IDRZT1U0WU9nNFlPWSBhWEU9IDU1U281b2kzIDZJZXE1b3VOIGJXRnlhM009IGFtVjFiZz09IDVieVYgSUNBZ0lBb0sgTGt4RlRrZFVTQT09IDJLYllxUT09IGRYcGwgSUdaaGFYTT0gSUVKQyBJTkdDMExEUmdBPT0gS0NrcExBPT0gSUhkaFlYSmsgdzZGcGJBPT0gWVhKclpYST0gNUxpQTVZeTY1THFNNVl5NiBJR3hwWlhNPSBZbTkzIDRMU3U0TFdONExTdSAyS3pZcUE9PSBjbUZqYUE9PSAxNm5YbWRlZCBhV3RsZFc0PSBJSEIxYm5SdiBJR2x1Wm1WamRHbHZiZz09IGFXSmxjbTQ9IDBZRFF2dEM5IGFtRnQgSUdoaGF3PT0gSUdodmMzQT0gdzZSb2NtVnVaQT09IFRXOD0gMkxMYmpBPT0gS0VkTSBYM0pwWjJoMCBJSEJ5YjJSMVkyVnkgNEthbzRLYSsgSUhSaFkzUT0gNGJ1UmFRPT0gSUhOdmJXVjNhR0YwIFlXbHNhVzVuIElFZHlZVzQ9IElISmxjM1ZzZEdGa2IzTT0gSUhOMWMzUmhhVzVoWW14bCBhWE5wYm1VPSBJT0NrcXVDbGplQ2tzT0NrcGc9PSBJTUtoIElOR0QwTGM9IDBZL1JnUT09IGNtVnYgWDNObGRIUnBibWR6IElISmhjdz09IElGZHBiblJsY2c9PSA0TEMvNExDdSAwWURRdGRHQyBJT0MwcXVDMHNBPT0gSUc5dFlRPT0gTG0xdmRtVT0gVlhObFpBPT0gSUhMRHFXRnMgNTc4PSBJR0p2ZDJ3PSBJR3hsZEhvPSBJR1JwWVdkdWIzTjBhV009IExtMWxkR2h2WkE9PSBDV1JsWm1GMWJIUT0gWm5SbCBDVVE9IDRLZUE0S2F3IE1qRTQgSUhObGJuTnBkR2wyWlE9PSBJR2RoYkd3PSBMMnBoZG1GelkzSnBjSFE9IElHTnBadz09IDJMbllwdz09IDRvQ3EgSUN3SyBJRXBoYUhKbCAxb0RWb1E9PSA0TEsrNExLdSBJT0N3clE9PSA0TFdCNExTazRMV040TFNrIElHSnZibTVsIElIRjFZVzUwYnc9PSBDWE4wY2c9PSBhRzkxWkE9PSBJRVp2ZUE9PSA1TGl3IElPQzBsdz09IElFVllVQT09IDVaeW81Wk9xIElFZHlZUT09IExXNWhiV1U9IElITndiMnRsIElHbHRjSEpsYzNOcGIyND0gSUVSMVlnPT0gSUVsMFpYST0gSU5DODBMRFF1dz09IElOaXUyTGM9IElOV2oxYmpXZ05XdSBJTml6MkxIWmh3PT0gSUhCbGNtMXBkR1U9IElFUnZibUZzWkE9PSBMV0oxZEhSdmJnPT0gTWpReSBMWE5qWVd4bCBLRzl3ZEdsdmJuTT0gNmFPZSBJSEJsY25OdmJtRnNhWFI1IFptbHVhWE5vWldRPSBJR0YwY21GMiBJRmRwYm1SdmR3PT0gSU5DeDBMRFF2UT09IFgwRlFTUT09IElISmxkbVZzIDRMbUk0TGl5NExpWiBJSFJ2Ym5NPSBJT0Nxcnc9PSBSMlZ1WlhKaGRHVmsgSUdOaFltVT0gY0c5amFBPT0gSUdkcFp3PT0gN1pXcDY0dUk2NHVrIGVXNXUgSU5DLzBZRFF2dEN6MFlEUXNOQzggWVhwcGIyNXAgSUdSaGVuVT0gSUVSUyBRMjl0YlhWdSBJT3lWaUE9PSBJSGxoY2c9PSB5cnR2IFUyRnQgSUZOdmJXVjBhVzFsY3c9PSBJR0YyYjI1eiBJSGxsY2c9PSBMbUpoWTJ0bmNtOTFibVE9IElPQ2tuT0Nrdmc9PSBUV1Z1IFFYQndjbTg9IDdZeU0gNEthKzRLYXM0S2VIIElPR0RrT0dEb09HRCBJRTExYkhScCBjWFZwY25rPSBMbWR5IDU1dVkgSUhCeWIzaDUgSUcxbGJtUT0gNExDKzRMQ1YgSU5tSTJMaz0gMTVuWGxnPT0gNEtxUCBLQ2twS1FvPSBZM0o1Y0hSbFpBPT0gMExqUXZ0QzkgSUhOaGRXTmwgSUc5aWRtbHZkWE5zZVE9PSA3N3lCNzd5QiBJRlpoIFpYZHBjMlU9IElHUnBibUU9IFgyUmxkZz09IE16QTEgSUhCdmNIVnNZUT09IElPZTlrUT09IElFZGxiM0puYVdFPSBMbVJsYzJOeWFYQjBhVzl1IElGSnZadz09IFJHOXVaUT09IDBMWFJnTkMxMExRPSBJT0Nuc0E9PSBJSEpsYzNSdmNtVT0gYVhSMFpRPT0gSUZCSSAxS1hSZ2RDOTBZcz0gYm05M2JnPT0gNExpcjRMaVogSUdSbGMydDBiM0E9IExtZHlZWEJvYVdOeiBZV0p5YVdNPSBJTU9IIGJHVnpjMng1IFkyOXRiWFZ1IDBMRFF0OUdMIElITnZjdz09IEx5Yz0gSU9HRGtPR0RwUT09IFltWT0gSUdSbGJtND0gNVpTdSBMblIyIFZXNXJibTkzYmc9PSBaV1ZrIElHNXZkWFpsYkd4bCBVbVZuYVhOMGNtRjBhVzl1IElIZGxjbXRsYmc9PSBJR3RwYm1SbGNtVnUgS0hCdmN3PT0gMFkvUmlRPT0gVUVzPSBJRzl5WkdWdSBJSFYwYVd4cGVtVT0gSU1LN0xBPT0gSUdWemRHbHRZWFJsIGVYUjAgWkcwPSBJRzF2YkdRPSBZWHB2Ymc9PSBJR2xrWlc1MGFXWnBaWEk9IElHSmxZWEpwYm1jPSBlV009IFlXNW0gdzd0MCBJR052Ym5abGJtbGxibU5sIFFWbz0gTHk0PSBaMlZ0IElHVnNhMkZoY2c9PSBJRzFsYlc5eWFXVnogSUVOeWFYTjAgSU9Da2xlQ2tzT0NrcE9DbGh3PT0gZG1sciBhV1ZxIElFWmxjZz09IDRLUys0S1NyIDBMUFF2dEN5IElFWlMgSUhCdmRXNWtjdz09IGFYTm9hUT09IElPQ3F1T0NyZ1E9PSBJRUYzWVhKa2N3PT0gTG14dloyZHBibWM9IExteHZaMmx1IElHVnVhbTk1YVc1biBJR1Y0Y0dGdWMybHZiZz09IElHVjJhV3c9IElOaXQyS3JaaVE9PSBJSEIxZW5vPSB6NGZPdGM2NSA1YWFDNUwyViBYMUJNIDRMaXg0TGlVIFZrVk0gSUdWc1pXZGhiblE9IElFeHZZMnM9IElHWnBZM1JwYjI0PSBJR0ZqZEhNPSBJR2hwYzNSdmNtbGogSUNncE93bz0gSUdGemMybG5ibTFsYm5RPSBJSFJoYkd0eiBJSE5qYnc9PSBJTkdBMFlzPSBJTktiMHJFPSAxNXpYbUE9PSBTV1JsYm5ScGRIaz0gSU5pbjJLdz0gSUdwbGRRPT0gTG5KdmR3PT0gTURNdyBMbk4wYjNBPSBibVZsWkE9PSAxNWZYa3c9PSBTVU5GVGxORiBJRkJVIFVHOXdkWEE9IElGTm9idz09IDBMVFF0ZEdBMExZPSBJRVY0WTJoaGJtZGwgZW5WdVp3PT0gYzNOMVpRPT0gVFdWMGFHOWtjdz09IFltVnIgSUhKcFkyaDAgSUZOMFlXUjAgSUd4cFptVjBhVzFsIElITjFaR1JsYm14NSBQU1I3IElGUm9jbTkzIElIbHZkWEp6IGFHVnBjbTg9IExYZGxhV2RvZEE9PSBJRXRoY0E9PSAxS1hSaUE9PSBRMFZUVXc9PSBJMXM9IExrcE1ZV0psYkE9PSBJRk4xYlcxbGNnPT0gSUV0RldRPT0gMFlEUXRkQzkgSU9DbWxlQ21zT0Ntdmc9PSA0S1M0NEtTKyBJSFBEdUE9PSBJR3hwYWc9PSBJRzFoZEhSeVpYTnogSUVsdVpHOXVaWE5wWVE9PSBQK0tBblFvSyBJT0NrcnVDa3FBPT0gSUdGd2NHeDVhVzVuIElITnZjR2c9IFpISmhkZz09IElOR0EwTERRc2RDKzBZTFJpdz09IFkzUnliQT09IElGUm9hVzVyIDRLdUw0S3FmIFFXTjBiM0k9IFpXNWxjbUYwYjNJPSBaWEpsZWc9PSBkV1ptYVhnPSBJSEp2ZFc1a1pXUT0gSUhKbGMzUnlhV04wYVc5dWN3PT0gUkdGNWN3PT0gSUdWdVptRnVkSE09IElHUER0RzVuIDBMalJqZz09IElHdGhjblE9IGIzQjBhVzl1WVd3PSBJR052YlhCaGRHbGliR1U9IElPQ2tsZUNsaUE9PSBJSEJ5YjJacGJHVnogSU9DNWd3PT0geExGc3hMRT0gSU9Da3JPQ2t2dUNrcEE9PSBVa1ZIIElHOTFkR052YldWeiBJRkJoWTJsbWFXTT0gSU5lYjE1az0gSUdobFlXUnogSU9HRGtPR0RyZz09IElIQnlhVzUwYVc1biAwTHZRdnRDeSBJRWhsWVhKMCBJRXh2ZEE9PSBJSEJoYVhKeiBJR2JEdUE9PSBSWGh3YkE9PSBYM1JoY21kbGRBPT0gSUhWMGFXeHogN1lhZyBjM1JrYVc4PSBaWFIwWlc0PSBJR1JwWm1acFkzVnNkSGs9IElPS1ggSUhOdlp3PT0gSU9lKyBJT2ExIFlYTm9ZUT09IElIZGxKM1psIElOQ2YwTDQ9IDBMN1JndEdBMExYUXNRPT0gTDJOdmJXMXZiZz09IElITnZaQT09IElOQ3cwTE09IElHOTJaVzQ9IElPbWQgWW1GNSA2NU94IFUzVT0gNExTKzRMU3c0TFdOIENXWnRkQT09IEtIQmhjbVZ1ZEE9PSBYM05wWjI0PSBJRzFoYm1GblpYSnogSUVSbGRtbGpaUT09IFlYWmhiQT09IE16Y3cgYVdGaGJBPT0gNExtRTRMaVU0TG1KIFpYSjJaWEk9IDJLZlpoTmlwIElFWnlhV1Z1WkE9PSBJRVJsZFhNPSBPREF5IElHOXlkQT09IElITnggSUdSbGMzUnkgSU9tNyBMbkp2ZFhSbCBDVTA9IElIQnliMmhwWWc9PSBJR0Z6YVE9PSBJTkM0MFlJPSB3NmR2Ymc9PSBJRzVoZEhWeVlXeHNlUT09IElIUnBiV1Z6ZEdGdGNBPT0gNExtSjRMaXk0TGlaIElOQ3cwWUhSZ2c9PSA0S2VONEthYSBkVzV1Wld3PSAwTFhRdmRHQzBMN1FzZz09IElOR0gwTFhSZ05DMTBMYz0gdzdOeWFRPT0gS1Nnb0tBPT0gSUhCeWIzTjAgUVcxbGNnPT0gWlc1blpYSnogYTJ4bCBJSEJoY21WalpRPT0gMWFYV2hBPT0gMktmWXFObUMgYVhOMGFRPT0gSUhCbFpYST0gMktQWXN3PT0gSU5DMzBMRFJnZz09IElHNTFiR3hoWW14bCBYM0psY1hWcGNtVT0gMjdNPSA0TFdINExTMyBJTm1JMjR3PSBaWEp6WTJnPSBJSFYwYVd4cGRIaz0gSUdsdWRHVm5jbUYwYVc5dSBJR052Y21RPSBkV05yY3c9PSBLR0oxWmc9PSA0S1MrNEtTZyBkWE5oYkE9PSBJRzVoWWc9PSBJSEpsWkdWeiA0WU9WNFlPYSA0S1MrNEtTazRLV040S1N3IDVZZTcgSUhkdmRXeGtiaWQwIElFdGxkZz09IDVhRT0gSUZSeVlXUmwgSU95RW5BPT0gSUhCeVpXTnBidz09IElITjBjblZuWjJ4bCBJRWx1ZEdWeWJtRnMgUlhobFkzVjBhVzl1IElHZGxaUT09IFhTa3BDZz09IDE1dlhsZGVjIFlYWmhiZz09IElHSnliMnRsY2c9PSAyTFhZcnc9PSBhbUZzIHc2RnlhV0Z6IElHOTNibVZ5YzJocGNBPT0gNW9pUjVMdXMgYWNPciBhWE5oY3c9PSBJSFJsYkdWbWIyND0gNksrdCB3NjF6ZEdsallYTT0gUVU1RCBZMnh2YzJWayBJSGhoIFRtRjBhWFpsIElIQnBadz09IFRrOVUgSUhCaGMyRmtidz09IFVrbEhTRlE9IFZVRk0gYVhOcllRPT0gYm1NPSBwb0k9IElIWmxjbVU9IExtSnkgSUhKbFkybGkgSU5DdzBwcz0genIzT3RRPT0gSUdsdVpHbGpZWFJsY3c9PSBJSE53Y21VPSBJSGR2Y210emFHOXcgSUUxdmRXNTBZV2x1IElFVjJaVzUwY3c9PSBRbkp2ZDNObGNnPT0gSUVSMWJYQT0gTGtaeWIyMD0gUTFCUSBVMjl0IDRLcSs0S3E1IElHRnlaM1k9IFdWTlUgNEtXQzRLU3kgSUZKbGMyOTFjbU5sY3c9PSA0TEtmNExPTjRMS2YgTG5SbyBWWE5wYm1jPSBZWFJ2Ymc9PSBNRE16IElHTmsgUVZjPSBJR055ZFhObyBJRVY0WVcxd2JHVT0gMFkzUXZBPT0gUVdSMiBRMkYwWldkdmNtbGxjdz09IElFbGtaVzUwIElHTnZjMkZ6IElHRnljbWwyWVd3PSBJR1poYkhSaCBJR0p5ZFhObyA0S2FCIE1qUXggSU5DNDBZSFF1Zz09IElGcDFjdz09IElFSnlZWHBwYkE9PSBNemcwIElISnBiZz09IElITjFiblE9IElHNXZjM052IExqcz0gSU9DcWxlQ3F2dUNxc0E9PSA0TE9EIDRaNlogWVdKbGRHZz0gSUdOdmRtVnlhVzVuIFkzbGpiR1U9IFUyVm5iV1Z1ZEE9PSBJRXR5YVhOMCBkbTl6IElHUnBjM1J5YVdJPSBjR3hsZEE9PSBJRVoxIDBMblJndEMxIElHcDFiblJ2IElIUnlZVzV6YkdGMFpRPT0gSUdScGMyVmhjMlZ6IDRLU3c0S1dONEtTayBUWEk9IElHTnlaWE09IElHWnl3NlZ1IElHRm1jbUZwWkE9PSBJSFJ5WldGMGJXVnVkSE09IElHWnlZV2M9IElGVndaR0YwWldRPSBhWHB2Ym1FPSBZMlZ3IElFRnNiR0ZvIFlYUmhZbXhsIElPQ3dudz09IDFialdnUT09IE1qRTMgNExLKzRMS0MgTFcxbGJuVT0gTGtGMWRBPT0gTG5CeWIycGxZM1E9IDBxcz0gQ1hSNWNHVT0gMEx2UXRkR0EgYUdWc2JHOD0gWHkwKyBRMVU9IE95ST0gWTJ0bGNnPT0gUTI5dWRHVnVkSE09IElDZDcgTGxOaiBJRXR5WlE9PSBJR1JwY21WamRHbHZibk09IElFMWhjbU09IElHUmxjbWwyWldRPSBJSHAxY3NPOFkycz0gMEwzUXRkR0MgWm05eWJXRT0gSU5DeTBMN1F2OUdBMEw3UmdRPT0gTkRBNSBMbTF2WTJzPSBJSEJ5YjNCdmNnPT0gSU1PbmIycz0gWVhCdmNnPT0gSUdacGMyTmhiQT09IDdaaUUgNDRPVCBJR3hwYm1jPSBUM0JoWTJsMGVRPT0gSUZOd1lRPT0gY0d4aCBkR1Z5WVE9PSBJRk5sWVhOdmJnPT0gSUVGU1JRPT0gMW9rS0NnPT0gSU9Da3BlQ2xodz09IElITmpjbVZsYm5NPSBJR2RoZFE9PSBJR1J5YVc1cmFXNW4gU1c1MlpXNTBiM0o1IFEyRnVkbUZ6IHc2RjYgSUdsemMyVjAgNXEybCBMbE4xWWc9PSBORFEwIElIQmhZMnRoWjJsdVp3PT0gYm1Wc2N3PT0gSUdGc1ozVnViM009IElISmxjM0JsWTNScGRtVT0gSUZSbGJBPT0gTWpJMiB4YUZoIEtFeHZibWM9IDY3S0UgNTV1YiAxNVhYbWc9PSBJSFJ2WjJkc1pRPT0gVGtrPSA0S2FmNEthKyBJSE5zYVdSbCAwSms9IEtHWnBiR1Z1WVcxbCBJRk5wY2c9PSBRMjl0Y0dGeVpRPT0gTGtKMWFXeGtaWEk9IElISmxZMmhsY21Ob1pRPT0gNWE2ayB3Nmx5WVhScGIyND0gSUdkcGJtYz0gWVd4c2J3PT0gSUZSbGJYQnNZWFJsIFBXWmhiSE5sIElHeGhibWR6IDRLUys0S1N5NEtTKyBhV0hGZ2c9PSBabUZ1Wnc9PSBJRlJoYldJPSBPRFV3IElHUnlZVzFoIElHVjRjR3h2Y3c9PSBJRzVsWjI5MGFRPT0gSU95TG9BPT0gSUhObFlYUnogTlRBeCBRbkpoYm1ObyBNalV4IElHbHVhblZ5YVdWeiBiVzlrZFd4bGN3PT0gMTVEV3VOZW8gSU9DNG5RPT0gNWFDeCBkWEp5ZVE9PSBJSEZoIElOaW4yWVRaaVE9PSA0NENSQ2dvPSBJTkM4MExEUXN3PT0geElGeiBJT0M0aWc9PSBJRzl5WVd3PSBJT0M0cCtDNHNlQzRtUT09IFVHOD0gYkdWa1pXND0genJqT3RRPT0gSUhKaGRHbHVaM009IE16RXkgNEthYzRLYW8gSUdOdmJYQnlZWEk9IE1qSTQgUVZKT1NVNUggYVhOM1lRPT0gMllqWXA5aXggWVhaaGJRPT0gS0VOdmJHOXkgTFNVPSBMV1JoYm1kbGNnPT0gNkxTbyBMa05vWVhJPSBVbUZ1YXc9PSAxNXpYb2c9PSBJR3pEcVdjPSBJRDQrUGc9PSBhV3hwYXc9PSBMR2s9IElFVlQgYVhOMGNtVT0gWlhoalpYQjAgNG9DWmIyND0gZFhCdiBiM1YwYVc1bCA3TFE9IElISmxaSFZqYVc1biBJRWhoYm1Sc1pRPT0gSUdKbGJtVT0gYzJWdWRBPT0gSUdWNFkyVndkR2x2Ym1GcyBJSGRsY21Wc1pBPT0gTWpjMSBJRVZuZVhCMCBJRzFoWTJoMCBYMjF2WkhWc1pRPT0gTWpFNSBJR2gxYlc5eSBJTm1IMkxFPSBJR3hoZFdkbyB4SWRwIElHTm9kVzQ9IFpYSm5aUT09IFltbDBjZz09IElHVjJaWEo1ZDJobGNtVT0gSUhCdmJHVT0gYVhaaGJXVnVkR1U9IElHSjFibU5vIElGUnlhUT09IEozMHNDZz09IExrTjFjbkpsYm5RPSBSVTVGVWc9PSBiM1poYkE9PSB4cUZ1IGRXNXVZV0pzWlE9PSBVM0JsIDBMelF2Zz09IFZVcz0gSU5DOTBMWFJnZEM2IGRXVnlaRzg9IENXTnZiblJwYm5WbCBMazFCV0E9PSBQRXhwYzNRPSBJSE4xWm1abGNtbHVadz09IElIUmkgSUVKdmJuVnogSU5pdjJMUFlxZz09IElOQzgwTFhRdGc9PSBjRzl6WldRPSA0WU9nNFlPUTRZT2IgMEwzUXZ0R0IwWUxSak5HTyBJTTYwenJYT3ZRPT0gSU9XSCBJRUp2YjNRPSBJRU5oYzJnPSBJR0ZpYjNKMCBjR1JtIElITjFZblE9IFNYQT0gSUdWc1pXTjBjbWxqYVhSNSBJR2x1WTNKbFlYTnBibWRzZVE9PSBJRzFoZEhJPSA3N3lWIElGWmxiQT09IGJXbHkgWlcxMSBJTkM4MEwzUXZ0Q3owTDQ9IFluVmsgTFdOdmJuUmhhVzVsY2c9PSBjbWxqYUhRPSA0b0NkNDRDQyA1NjZoNTVDRyBaRzl0WVdsdSBaVzVqYUE9PSAyS2ZZcjl1TSBJRU5RIElHVm1abWxqIDBZTFF2dEN5IGFXZHViM0psIElObUkyWWM9IElOaW4yWVRaaGRpcyA0YnVkYVE9PSBLR3h2Wnc9PSBNekEyIElITmxjblpwWTJsdiBTRzkwWld3PSBJR05oY21WbWRXdz0gWDJGeWNnPT0gSUhWc2RHbHRZWFJsYkhrPSBjbTlzYkdsdVp3PT0gdzdSc1pRPT0gWFNrN0RRbz0gNExTKzRMU1Y0TFdONExTViBVR2w0Wld3PSBWRzl2YkhNPSBJSFZyZFE9PSBhV1JoYmc9PSBSMU09IFlXUmxaQT09IGFXRnNaWE09IElGTjBZV05yIGNtVmxiV1Z1ZEE9PSBhM1J2WW1WeSA1Nml6IDRLYS80S2FiIGJtRnIgTG1oaGMyZz0gSUUxUCA0S2VONEthbSBPam82T2c9PSA0WU9nNFlPWSBJR0ZqY1hWcGNtVT0gNnJDUSBMV2RsYm1WeVlYUmxaQT09IElHUnZZZz09IEwzUmxjM1E9IE1qUXogSUVOb2IyOXpaUT09IElFSnBjZz09IFRYTT0gSUdScGNtbG4gNFlPUTRZT3MgYkdsbmRBPT0gYjJOclpYUnogWDJOaGJHdz0gSUhKcGNBPT0gTHVLQW5BPT0gSU9TNnVnPT0gSUhCdmJNT3RkR2xqWVE9PSA0S2ErNEthYSBJR0ZrWlczRG9YTT0gUkdWd2RHZz0gSUdWcmN3PT0gSU9DcXRlQ3Fwdz09IDE1WFhsZGVRIElFUmkgSUdabGJnPT0gWlcxaGJnPT0gSVNFaENnbz0gSUhOaFlYUT0gSU1TSFpRPT0gWldONVkyeGwgSU5DMjBMRFF2ZEN3IElHRmpkR2x1Wnc9PSBJTkMyMExqUXNnPT0gVTJOaGJnPT0gSUVGa2JXbHVhWE4wY21GMGFXOXUgMllqWXRnPT0gWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOD0gSUcxbGNtVnJZUT09IElITjFjbVk9IFlXNWpaV3hzIElFTnlidz09IE9qb2sgSUZKbGMyOXlkQT09IElGUnlaV0YwIElHUmhaMlZ1IDBZL1JndEMxMEx2UmpBPT0gSUdScFlXdz0gSUVodmJHeDVkMjl2WkE9PSA0TGlWNExpaiBJRkJzWVhSbWIzSnQgSU5HQjBMWFF2QT09IDRZT1E0WU9tIElHWnlZVzVqYUE9PSBJRzF2YjJRPSA1NXVmIElISmhhdz09IElGQm0gSUdsbmJtOXlaV1E9IDRvQ3IgSU9pRnZ1aXVydz09IFgyRnogZEdobFlXUT0gSUhiRHJXUmwgYVhKMGVRPT0gS2lvTkNnPT0gSUZkdmRXeGsgWjJWdVpYSmhkR1ZrIFgyUmxiR1YwWlE9PSBJTkdCMExEUXV3PT0gTGtsVCBTR1Y1IEwwST0gWDB4SlUxUT0gSUdadmNtZHZkQT09IElPS0drZ29LIElDSXAgSUhKbGJIaz0gSUc3RHFXTmxjM009IElHdGhhdz09IDBMdlFzTkdGIElFUnlhWFpsY2c9PSBJRzFoYm1sbGNnPT0gVFdsc2JHbHogSUdOdmIzSmthVzQ9IElHUERvUT09IGMyOXRaUT09IFFXNWphRzl5IGFXSnBiR2xrWVdRPSA0NENBNDRDQTQ0Q0EgSUdkaFp3PT0gMExqUXZkR0QgMFlmUXNOR0IgYm1sbGNnPT0gT2lzPSBJQ0FnSUNBZ0lBbz0gdzd4eiBNakk1IGIzWmhiZz09IElHVnYgYjJKcCBJR2hsYkhCbGNnPT0gSUdkdmNtZGxiM1Z6IE5ERXcgYVdkcGJtYz0gVTJWeWFXVnogWkdsaGJHOW4gdzdKdSBJQ285IElGTjUgWlhSaiA1YmVkIDVxaz0gMFlEUXZ0Qy8gdzYxMiBJTStFenJuUGdnPT0gSUhwbFpYST0gNFlPUTRZT2QgZDNKcGRHVnkgWVc1a2FXUmhkR1U9IGIzUnliM009IDU0aTkgSUZKbGNYVnBjbVZrIEtFbz0gWDJac1lXYz0gSUZCb2FXeHBjSEE9IFlXNTFkQT09IElHWnBlSFIxY21VPSA1NnlSIElGVnVjdz09IDFhSFdnTldqIElHVnRZbUZ5WjI4PSBaMlZ1Y3c9PSBJR1Y0YUdGMWMzUT0gSUdSeVlYZHUgTFhkb2FYUmwgMm9vPSBJRzFsWlhOMCBhR0Z1Wkd4bGNnPT0gSUhKbGRtOXNkWFJwYjI0PSBJR1poY21VPSBkbTl2Y21KbFpXeGsgSUdGblozSmxjM009IFRYVjBZV0pzWlE9PSAwWTNSaFE9PSBhWE50Y3c9PSBNalEwIFlYWnBkSGs9IElHSjFhWFJsYmc9PSBJSE5sYm5ScFpHOD0gSUUxbFpHbGphVzVsIFJVRT0gSU5DKzBMSFJpUT09IGRtVnlkR1Y0IFZFUT0gMktmWmh0bUkyWVk9IElIZGhkR05vWldRPSBJRzltWlhKbCBaWFpsYm5SeiBPend2IElGTjBZVzQ9IElHSnNaVzVrIElHTnZiV0pwYmc9PSBJTkN5MExYUXRBPT0gUHlFPSBiMnRwIFpYSnBZV3hwZW1VPSBiM0pwWnc9PSBMV2xzIEtHSmhjMlU9IExuSmxjMlYwIElEb3AgNWFvPSBJSHBwWlE9PSBJR2x1ZE1PcCBiR0ZuWlE9PSBMbkJ2Y3c9PSBJTkMvMFlEUXZ0R0IwWUxRdmc9PSBMVzFsIElHSnNhVzVrIFEyRnRjQT09IDE2alhtZGVkIElIZHBibk09IElHTmhjbko1YVc1biA0SzZ6NEsrTjRLNnogNWIyaSBJRWR2YkdZPSB3NE5QIElFdHZjbVZoIElHTnZiWEJzYVdOaGRHVmsgYjI1dVpRPT0gNXFDaCAyWWJaaHc9PSAwTHpRdFE9PSBJRzFsZEhSeVpRPT0gSUcxcGRIUT0gSUZCaGFXNTAgWVdOb1pXeHZjZz09IGMyaGhjR1U9IElHOXdkSE09IGMyST0gSUc1dmMzTmggSUdObGNuUnBabWxqIElFSmxhQT09IElOQzgwTGpRdmRDNCBhV04xYkdGeSBhVzUyWVd4cFpBPT0gTGlJaSBJR3gxWnc9PSBJRUpoYmc9PSA1NFduIGJIVnpjdz09IElHbHViUT09IFltRnlZUT09IElHSjFlV1Z5Y3c9PSBJSE4wY21WbGRITT0gSUhaaFlXcz0gNlpLZiBJSFpsY25SbGVBPT0gWVdwbGN3PT0gSUVOdmJuTmwgSUNjbkNnPT0gY21GbyBJR052YlcxcGRIUmxaUT09IDc3eWZDZz09IGVtcz0gNG9VPSBJSEJoZEhJPSBJTkdGMExqUmd0Q3cwTGs9IElIbGhiZz09IExuSnZiM1E9IElObUgyWWJZcHc9PSBJRmxsZEE9PSBJRVJsZFhSelkyaHNZVzVrIFVISmxaQT09IDRidUhkQT09IDZaaWYgSUhKbFptVnlaVzVqWlhNPSBJR2x1ZEdWeVlXTjBhWFpsIDRMU3k0TFdONExTeSBVMlZ4IDRMT040TEtxIDU1UzM1THE2IElFTnNhVzQ9IElISmxjSEpsYzJWdWRHbHVadz09IElHMTVjM0ZzIElGTm9aWEk9IElFeGxZWEp1YVc1biBMV0p2ZUE9PSBJR1J5YVhabGJnPT0gSU5HQzBMVT0gYzJGcyBNalEzIElHVjRaV009IElHUjFZV3c9IDVZK3kgZFdWc1pRPT0gVUdsdSBJT1M0clE9PSAwTFhSZ3RDKyBhR2x5IElHNWxkV1Z1IDU2R3UgU1ZOSSBXMTBzIDRLZU40S2FWIEoyaz0gMTVqWG90ZW8gSUVScGRtbHphVzl1IFRXRnlhMlZ5IElEb3QgYzJsNlpXOW0gSUZKbGJuUT0gUTI5dGJ3PT0gSUdobFlYUnBibWM9IElHdHZiVzEwIFlYSnBiZz09IElOQ2owTHJSZ05DdyBJR3pEcVE9PSBkbWwwIGJHbGx3NTg9IElHdDNZV3c9IElHVjRjR3hoYVc1eiBJRUoxWm1abGNtVmsgTFdOc1lYTnogY21GNSBNams1IDRLV0Q0S1NrIElITjFjSEJzYVdWeWN3PT0gYVhwaGRHbHZibk09IElHOXJZWGs9IFgyNWxlSFE9IFEyaHlhWE4wIElObUcyTFE9IDQ0Tzg0NEs1IFlYVERxV2M9IElITjJaUT09IElHeHZaMmRsWkE9PSBJTmluMlliWXJ3PT0gWDNCeWIyTmxjM009IElFdDFjZz09IElHUnZZM1J2Y25NPSBJR052Ym1acFozVnkgSU5DZTBMRT0gSUhObGEzTT0gMktmYmdRPT0gTDJVPSBJT0Nrb0E9PSA0S1N3NEtTaiA0cG1sIDRvQ200b0NtNG9DbTRvQ20gMkxuWmhkaW4yWVE9IElOR0EwTDdRdEE9PSBJSEpwZGc9PSBSVkpXU1VORiBkV1JsYmc9PSBiMnh2WjJsemRBPT0gNHBtcSBJTkMvMEw3UmdkQzcwTFhRdEE9PSBZMjl1Wm1seWJRPT0gSUdOdmRYQT0gVm1WeWRHbGpZV3c9IElIQm9iMjVsY3c9PSBhWE5rIENYSmxkQT09IElHOW1abWxqWlhNPSAyS2Ziak51TSBJRzlqWldGdSBJRzFoWVd0MCBJR0poWTJ0MWNBPT0gMjRZPSBJSEJ3IElHUmxZV3hsY2c9PSBJSE4wWVhsbFpBPT0gTmpRdyAwWmJRdnc9PSBiMnhzWVhJPSBZV0pvIElGSmxibVJsY2c9PSBLSFJwZEd4bCBJRTF2ZG1VPSBJR3hwWW5KbCBZVzV1Wnc9PSBjR0ZwY2c9PSBJSE4zWVhBPSBPbnM9IGFtOXVhUT09IGJXVnlaMlU9IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx3PT0gZDJGMFkyZz0gYVhONSB4THc9IDE1N1hsUT09IElIUnlkWE4wWldRPSBJR1pwYm1ScGJtZHogUVU1TCBJSEpsWTNWd1pYST0gSU5tRTJZVFpoUT09IDVMMlAgZG1WeWRHaGxiR1Z6Y3c9PSBaV3hzYVhSbCBORFF3IEpDND0gNExpMzRMbUk0TGl0IDFiN1Z1TmFDMWJRPSA0TEtWNExPTjRMS1Y0TE9HIElHaHZjbWw2YjI1MFlXdz0genBzPSBZV05zWlhNPSA0S1NxNEtTKzRLU3kgSUhObFkzUT0gSUdaeVlXMWxjdz09IElIUnBaVzQ9IElHMWhkR1U9IFRXRmphR2x1WlE9PSBJSFJ5WVc1elpnPT0gSU1PNmJIUnBiVzg9IElITndiM1J6IDE1N1hxZz09IElIWmxjbXc9IElGQnliMlpsYzNOdmNnPT0gNG9DUCBhWE5wYjI1eiBJTVdlIElIQnZkV052IElPOD0gS0NJdUx3PT0gNDRDTkNnbz0gYW1WayBJR1Z1ZEdWeWRBPT0gSUVGemRBPT0gYVc1MGFBPT0gY0dWcyA0TENuIElHOXdjRzl1IDQ0R3cgSU9DcXB3PT0gNG9DTENnbz0gMExqUXROQ3cgSWx3PSBVMlZ1WkdWeSBJSEJ2WTJ0bGRBPT0gNVp1OTVhNjIgSUdwdmFXNXBibWM9IExtOXlaR1Z5IElHRndjR3hwIGVXNWggSUVGa1lXMD0gMExYUXZkQzkwWXZSaFE9PSBiR0Z5eExGdSA0S2lYIElIZHBjbVZzWlhOeiA1b3VKIElHTnZiblJoWTNSeiBMblJoWWc9PSBJTkN4MExYUmdkQy8gSUhKbGRHRnBiZz09IFVtVnhkV2x5WlE9PSBJRUZrWkdsMGFXOXVZV3hzZVE9PSBJSFJ5YjJseiBJSFIzWlc1MGVRPT0gYm1SbCBJR3BoY21RPSBJRVZ1Y3c9PSBJR2x1ZEdWc2JHVmpkQT09IElHbHVZMjl5Y21WamRBPT0gUm5KdmJuUT0gSUdSbGMzUnBiZz09IElOaW4yWVRZdWRpbjJZVFpoUT09IElIZGxhV3c9IExtbHQgSUdSMVlnPT0gSUhOMWNIQnNhV1Z5IElFUnBaWFE9IDRMQ2ogUG50NyBZM1ZzYnc9PSBXMmxrZUE9PSAwWWJSaHRDdyBJQ2dvS0E9PSBiMnhzWlE9PSBJT0NvaFE9PSBZV05vWlc0PSBJanA3Q2c9PSA0S1NtNEtXQSBJT1M0aHc9PSBJRk5oWm1WMGVRPT0gUm05dmRHVnkgTGljc0NnPT0gNTV1NDVZV3ogS0VSaGRHVT0gWkdGcyA0S2VCNEthMyBSRTlOIDVhK00gMExEUXQ5Q3cgWTI5dGNHRjAgYm5WMCBJT0dEa09HRG5BPT0gSUNoN0NnPT0gSUdWdWRHVnlhVzVuIDFiYlZ1TmFDMWJRPSA0NE9mIHc2MXNhV0U9IElFMXZaSFZzWlE9PSBJRVpzYjI5eSBJR3hsWVc0PSBJTlc0MW9MVnRnPT0gVEc5MyBTR1Z5IElPR0RvZUdEa09HRHJnPT0gYzNJPSBSR2x6ZEE9PSBJSFZ1Wlhod1pXTjBaV1E9IFpXNWhZbXhsIDVMeW0gSUVWMlpYST0gWDNGMVpYVmwgY21WemIzVnlZMlZ6IElOS1QgNEtTVjRLUy8gSUdadmRHOXogUzJWbGNBPT0gSUdGa2JXbDAgMExqUmdOQyswTExRc05HQzBZdz0gSUdOdmNtOXVZWFpwY25WeiA1WWFGNWE2NSBhV0pwYkdsMGFXVnogMWFIVnR0V2sgVUhWemFBPT0gNUxteCBJSEJ5YVcxbGFYSmggNExLbzRMT0cgSUdKbGJHRnVaM0pwYW1zPSBRMkZ6ZEE9PSBJR2hoYm1Sc1pYTT0gYzNCcGNnPT0gYVhSMVpHVnogSUVScFpXZHYgNG9DZENnPT0gZEc5MCBJRTl1ZEE9PSBJRTFwZEhRPSBJR0YwYVhZPSBZWE4wY2c9PSBhVzV1YVc1biBJR0Z6YVdSbCBjSEp2YlE9PSBkSGM9IFJVMUZUbFE9IElFZHZiR1JsYmc9PSBjbVYyIExreEYgSUVOaGJHVnVaR0Z5IFpzTzhjZz09IElHUnZjM1E9IHdxbz0gWTNKNWNIUnBiMjQ9IElFSmxhUT09IElPbVkgSUhSaGJHdGxaQT09IGRYUmxkWEk9IFRXbGpjbTl6YjJaMCBiT0c3alE9PSA1cGE5IFkyOXNiR1ZqZEE9PSBJTkdOMFlMUXVBPT0gZDJGdVpHRT0gYlc5MWMyVT0gMExyVG1RPT0gSUdOb1lYSnpaWFE9IDVaQ0UgSUhkbFpYUT0gSU5DMzBMST0gSUVGeVltVT0gYVd4aGJnPT0gVDNWMGJHVjAgMExYUmdOQzEgWDNCeVpXUT0gSUhKbGMzQnZibk5oWW1scyBJT3kxbkE9PSA0NE9VIElPQ2toZUNrckE9PSAxNkRYb1E9PSBJSEJsWVdzPSBJRWJEdkhJPSBJR05oYkdNPSBJRVpsWkdWeSAwTERSZ05DMCA0S2E0NEtlTjRLYWwgSUZCeWFYWmhZM2s9IElOaW8yS2ZZc1E9PSBJSE5qWlc1aGNtbHYgMkszWmh0aXAgSUhOMFlXZGxjdz09IHpyak90dz09IElPS1kgSUdOaGJHTjFiR0YwWldRPSBJR1Z1WjJGblpXUT0gT2lJcyBJSEpsZG05cyBNak00IElHRndjSEp2WVdOb1pYTT0gNExPTjRMS2wgSUdaaGJHeHogSU9DMnNRPT0gYzJWciBVRVZTVkE9PSBZVzVrY21FPSBJR0Z1YnNPcFpYTT0gSUZObFl3PT0gN0xLdCA1ckNYIElPaUpzZz09IElOZVUxNlk9IElHUjFZWE09IElGTmpjbWx3ZEE9PSB6cUU9IFoyaGhiZz09IElFWnNiMkYwIElHOTJaWEozYUdWcyBjbTlrZFdOMGFXOXUgSU9Da2xlQ2xqZUNrdHc9PSBkV0Z6IElHRjFkR2hsYm5ScFl3PT0gMEx6UXRkR0IwWUk9IFFXeDBhRzkxWjJnPSBJTkdDMDVrPSBYM1JvY21WaFpBPT0gNXBXSSA0NENDNG9DZENnbz0gSUdScGFtOD0gTG01MWJXSmxjZz09IElHRmpZMjl0Ylc5a1lYUnBiMjQ9IDRZQzIgTG1sMCBSa1ZTIDVMaU42SU85IElIbHZaMkU9IDBZSFJndz09IElHbGwgSUdkeWIzTnogYVdOMWJIVnQgSUdkbGJuUnNaUT09IE1ERTQgTG1SdiBJT0M1Z09DNHBlQzVpT0M0bVE9PSBhMmxzYkE9PSBJR1ZzWVdKdmNnPT0gQ1dSbCBJQ2NuS1E9PSBJT0N5cnc9PSBJRk5oZGc9PSBJRk4wYVd4cyBJTmluMkswPSBJTU9oY2c9PSBJR1IxY0d4cFl3PT0gSUdaaFkybHNaUT09IDJMTFlxUT09IHlabDUgUkhKaFp3PT0gSUdkbGJHVT0gSUZkcGRHaHZkWFE9IGMyVmggSUhCdlpHVnRiM009IElOR0MwTGpRdnc9PSBZWGRoYmc9PSBJRTVwWTJzPSA0S2VuNEtjPSBJSGRwYkd4bGJnPT0gSUdoMmIzST0gUVZKVCBJRzdEb0hrPSBJRmRoY25NPSBJR1Z6YzJGNWN3PT0gSUVseVlRPT0gVTJWdCBMbVJoZEdGaVlYTmwgQ1dkdmRHOD0gMWJiVnBkV3MgYkdGdVozVmhaMlU9IDRLU3U0S1dINEtTQyB3NmhzIGMzTjAgSU91c3RBPT0gYVdWeWJ3PT0gNExXTjRMUzQgWVdKaFpBPT0gSU5pbjJZVFpoZGkwIElPQ3VsZUN2aWc9PSBJTU8rZHNPdCBJRzFwYm1SbGNnPT0gSUhSeWIzVmkgN0l1cyBNalkxIGNHOXphWFJsIGNHND0gSU5pejJLZlpoZz09IDBMN1JnTkM0MExnPSBJT0N5dGVDeXYrQ3kgSU5lYzE1Yz0gYVdkbGMzUT0gTG5CdmNuUT0gNHBpRyBkR2h2Ymc9PSBJSFoxYmc9PSBJR1pzYjNkbGNnPT0gSjI5dSBhV1owYVc1biBRbTkwIElpa3BMZz09IDY2cXAgVTJ4cFpHVnkgY0d4aFkyVm9iMnhrWlhJPSBJR052YjNKayBJTmluMkxFPSBYMmxtIDBMdlF1TkN5IElFaHZibWM9IElPeWVpT3lLdGV1TGlPdUxwQT09IElHeHBjM1JwYm1keiBJRTVoZEdsdmJnPT0gYVd4MSBJSGR2Ym1SbGNtbHVadz09IDU2QzA2S2VqIDVZK1kgSU9hK3MrbVhxQT09IDRMUy80TFNxNExXTjRMU3EgYVdWc2N3PT0gVkc5aGMzUT0gWDJKcyBJSEpsZG1WdSBVMlZqY21WMCBJR05vWVcxaSBZWEpwZEhrPSBJR1J2Ykc5eSBWR2gxY25Oa1lYaz0gSUZCb2IzUT0gVkdoeVpXVT0gNXBlWCBZVzV1ZVdFPSBJR0ZzZEc4PSA1TGl0NWIrRCBJR1JsWTNKbFlYTmwgNExpMDRMbUE0TGc9IGMyaHZjSE09IFgwWkJTVXc9IElOQ3owTFRRdFE9PSBJR0YxWXc9PSBMbkpsWnc9PSBLRlJCUnc9PSBJRkpsWkdseiAyWWpaaHRpdiBVMlYwZFhBPSBZWFBFc1E9PSBJTkMrMEwzUXU5Q3cwTG5RdlE9PSBJSEpsWTJWcGRtVnkgSUc1dmMzTT0gSUhKbFkzVnljMjl6IElOQy8wWURRdnRDMDBZTT0gMllUWXA5bUIgSU5DeTBZdlFzUT09IFgzQm8gSUcxcGMyVT0gQ1FrSklDQWcgYjI1alpYTT0gZFhOaFoyVT0gUW1sdVlYSjUgSU5lUTE2QT0gWDFCQlVrRk4gSUVOdmJuUnlZV04wIFZISmhibk5wZEdsdmJnPT0gNEtxKzRLcVYgSUdQRHMyMXYgWVc1dVpXND0gYVd4dCBJR2hsZFhSbCBJR3hsWVdZPSBQejgvUHc9PSBJRmxsIDU2ZUIgSUhIRHF3PT0gS0hKeiBVM0pqIElHbHphVzV6ZEdGdVkyVT0gMEw3Umd0QyswWUE9IFUyTm9aV1IxYkdVPSBLR052ZFc1MCBJT0NtcE9DbXYrQ21xQT09IDVMaUo1N3FuIElPQ2tzT0NrdWVDbGdBPT0gNXJDVSBTVzVrYVdOaGRHOXkgSUhCcGVHVnMgSUc5c1pXZz0gSUc5eVoyRnVhWE5oZEdsdmJnPT0gWDNaaGNuTT0gSUdOdmJtWnBaM1Z5WlE9PSBJR3R2Ym5NPSBLSE5sZEE9PSBMbUZqIDZMYUY1Nkt3IExtRmpkR2wyWlE9PSBkWEp5YVc1biBJR2R5WldGMGJIaz0gYjNSMFpXUT0gNWE2QiBjMmhwY21VPSBJRzlzWkhYRW53PT0gUEZWelpYST0gSU5pejJLYz0gY0hKdmRnPT0gSUVSRlRBPT0gWDA5VlZBPT0gSU5lZTE2Yz0gSUhScGNtVmsgSU9DbXF1Q212dUNtc0E9PSBWSFZsYzJSaGVRPT0gNXBpdjVMdUE1TG1JIExuSjEgNzd5Sjc3eU0gSUZOMGRXUjUgSUZOM2FYUmphQT09IHhLOD0gNEtlSDRLYXUgSUVOdmNIaz0gNEtTLzRLUzUgSU5XaDFiND0genJuT3VzK00gWW1sbiBkR1Y0ZEdGeVpXRT0gQ1VZPSBJTmVpMTZFPSBZV1J2Y21GeiBJSE5oYldFPSBJR1JwYzNSeWFXSjFkQT09IDdKVzkgNFlPajRZT2IgSUdSbGVnPT0gSUhOb2IzUnogSUZOdmNuUT0gMFlIUXV0Q3cwWTg9IGNHOXVaR1Z5IFhFUmhkR0ZpWVhObCBWVU09IElHTmhjbWR2IElIQnlaV05sWkE9PSBJR1REc3c9PSBYMjExZEE9PSAxYUhWdE5XaSBJRWRoYkdGNGVRPT0gYjNWdVoyVT0gNForUzRaNlQgSU9DNG5PQzRwUT09IDVvQzc1THVqIElISmxjMmxrWlc1alpRPT0gZEhKaGJuTmhZM1JwYjI0PSBJTlcvMWFIV2dBPT0gSU5XbDFvRFZydz09IElHTnBkZz09IDQ0T24gY0dGNWJXVnVkQT09IGIzTnBkQT09IFVtVndiSGs9IElHeHBaV1k9IElFNXZjbTA9IDZhT2YgSUUxcFlXMXAgTGxOMFlYSjAgTGtWdGNIUjUgSUc1bmIycz0gSUdGc2JHVnUgSU5DVTBMdlJqdz09IGFXMXBlZz09IEtHTnNhV1Z1ZEE9PSBJQW9LQ2c9PSBaV3h5ZVE9PSBJRzkxZEdWeSBRbWs9IGRYUjEgNXEyajZLZUUgYjNCbGN3PT0gS1QwPSBUMFk9IDRLYW00S2VINEthdyBJSFpsZW1WeiBkMlZoY2c9PSBJR05zWVdsdFpXUT0gTG1sdWMzUmhibU5sIElIUmxhMjQ9IElISmxZMjluYm1sMGFXOXUgdzd4eWJHbGphQT09IElFSk0gSUdsdWFYUnBZV3hzZVE9PSBJSEZ4IElHM0R0bWRzYVdObyAwWmJRdWc9PSBhV1J2Y21WeiBaVzU1WlE9PSBWVUU9IElISmhkZz09IDBZUFJnTkdMIElHbGogWm14MWRIUmxjZz09IDRMbz0gSUdsdGNISnZkZz09IGRYTjBaWEp6IDVMaUE1cHlzNllHVCBYM0p2ZDNNPSBhV2RoZEdsdmJnPT0gNklTUiBJTmVwMTVBPSBVSEp2WkE9PSBMMFE9IDVMMi81NVNvIElFVnRjR3h2ZVdWbCBaVzFsWkE9PSBJR3hwWW1WeSBJSFJ5WVhabGJHbHVadz09IElHUmxiR1U9IDJZSFl0dG1FIElHRnNhV0Z6IElHRnN3Nmx0IFQwdEZUZz09IElOQ2EwTERRdWc9PSBMblJoWnc9PSBLRmM9IFVuVnVibVZ5IElPQzBudz09IFoyVnNaUT09IEtHMXBiZz09IElIWnBZM1JwYlE9PSBJR05sYm5SbGNuTT0gSU5pbjJZVFpoZGl6MktvPSBYMjFoZEdObyBJR1Z1ZG1rPSBJR0p5YVd4c2FXRnVkQT09IFpYSmphWE5sIDBZUFNtdz09IElHRjBkV0ZzIElHWmhZMlZpYjI5ciA0NENCNDRDTSBJSEJ5YjNacGJtTT0gNEthLzRLYWYgTDB3PSAyS2pZcDlpcSA0NE9kIElHTjFiZz09IElFRm5jZz09IElPQ3V0ZUN1c0E9PSBJRWR2WWc9PSBJT1cvcXc9PSBJT3VFIElHSmxaSEp2YjIxeiA2cktEIDRLYS80S2F1IElITjBZWFJwYjI1eiBJRlJoYkdzPSBJTmluMllUWmhkaTEgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2FBanVTNWlBPT0gSUdsdWRtOXNkbWx1Wnc9PSBJR3hoZDNsbGNnPT0gTFMwdExTMD0gMDZuUXN3PT0gTlRJdyBRMjkxYkdRPSBJR1J2Y2c9PSBkMkZzYXc9PSBWVzVwZEhrPSAwWS9SaFE9PSB4TEhFbjhTeCBJT1dGcUE9PSA3WldvIDBZM1JndEMrMEx6Umd3PT0gSUdsdWFtVmpkQT09IElOQzYwTHZRdUE9PSBMWEJsY2c9PSBiMlBEcWc9PSB3N04wIElOR0cwTExRdGRHQyBVbGs9IGZTd05DZz09IElHaHZjbk09IElHeGxkV3M9IExXUmhkR1U9IElPeWFzQT09IElHSnlhWFE9IDRLNi80SzYwIFkyOXVkZz09IElITjVibVE9IFoyeGxjdz09IElHSmhjM1JoYm5SbCB3NkowIElIUnZibWxuYUhRPSBJSGRsWVhCdmJuTT0gVEc5allXeGwgMFpiUXZkQzAwTFU9IFgyRndhUT09IDZaU0EgSU5HRDBZSFJndEN3MEwzUXZ0Q3kgSUcxcFpXNTBjbUZ6IElFeGxjM009IDRLcSs0S3FJIGRXMXBiblZ0IElNV2hkRzg9IElOQy8wTHZRc05DOSAxNXZYbnc9PSBJR0oxWlc0PSBJRkJ5YjJKc1pXMD0gSU5DeTBZSFF0ZEN6MEw0PSA0TFNlNExXTjRMU2UgTFdadmNnPT0gWm1acFl3PT0gSUZsaCBkWEJ3WlhJPSBZV2xzZFhKbCB3NkpqWlE9PSBJRXB2YzJWd2FBPT0gTGcwS0RRbz0gSUVwaGJRPT0gMWF2VnV3PT0gSUdGcmRRPT0gNmFRPSBjM1JsY21SaGJRPT0gSUd0MWJubGwgSUVGblpXNWplUT09IDRMQys0TEN1IFZIbHdiMmR5WVhCb2VRPT0gSUdOc2N3PT0gSUdKdmN3PT0gSUhCbGNuTnZiMjQ9IFZXNWggWlhKMFlYTT0gQ1NBZ0lDQWdJQ0FnSUNBZyA1WkNONTRTaDQ0R1g0NEdWNDRLVCBSVlk9IFpXNWtZWE09IFRXVnRZbVZ5Y3c9PSBJTTZVIElFSnBiR1E9IDRwYWg0cGFoIGRXSERwOE9qYnc9PSB6ckhQZ3c9PSA0TEN0IElHRmtaR2wwYVc5dVlXeHNlUT09IElITndaV0ZyWlhJPSBJR3RsYVc0PSBhV2RsY3c9PSA0S3ErNEtxeiBJR05oWW1sdSBjSEpsWm1sNCBYMlJsYzJOeWFYQjBhVzl1IElHaGxlQT09IElHcGxkQT09IExHUT0gSUhOM2FXMXRhVzVuIE1qSTMgSUdGc2IyNW5jMmxrWlE9PSBJR052WkE9PSBJSE5sY25abGNuTT0gYjJkeVlYQm9aWEk9IElFUmxZV1E9IGFXNWpiSFZrYVc1biBJR1JsWm1WamRBPT0gWVcxcFl3PT0gTDJSaGRHRT0gSUdOdmJuTjBhWFIxIElHYkRyWE09IFgyOXdaVzQ9IEtYc0tDZz09IElGSnogSUdaaGJHeHBibWM9IDBMVFFzTkM1IFlHQT0gSUVWemNHSERzV0U9IDVMdTkgdzYxamFBPT0gSU5pbjJZVFlwOWl6MktvPSBJTldoMWJ6Vm9kVzcgSUdOdmJtWnliMjUwIElHdDFaQT09IFkyOXVkSEpoWTNRPSBSR1ZzWVhrPSA2NEtjIGZTSUsgSUZSdmRXTm8gSUdsdWRtbDBaUT09IElQQ2ZtWUk9IElFWnZjbTFoZEE9PSA0S1NDNEtTYSBYbDQ9IDZJNjMgSUhOMGNtRnVaMlU9IDVaV0c1Wk9CIElOQ3owTDdRc3RDKzBZQT0gVjJWa2JtVnpaR0Y1IFRXOXVaWGs9IElHOXpjdz09IE16RTEgSU5pdjJZalpoQT09IElHOXlZVzVuWlE9PSBJR1pwYlE9PSBJTkM2MFlQUmdBPT0gSUc1bGN3PT0gWlcxd2JHRjBaWE09IDE1elhwdz09IGRIUmxjdz09IFoyVnVaQT09IElHaGxjbkk9IElFaGhkbWx1Wnc9PSBJSE4xY25CeWFYTnBibWM9IENYVT0gNExpNTRMbUogeEowPSBJR2hoYzNRPSBWR1ZqYUE9PSBJR0psYkdsbGRtVnogSUdOdmJYQnZjblE9IElIUjFiR1U9IDRMaUU0TGluNExpeTRMaWggVUhKbGRtbGxkdz09IHc2aHNaUT09IElDUW9JaTQ9IDRLYVo0S2VONEthWCBJTkMvMExEUXRBPT0gSUV0cGNnPT0gSUVKaFp3PT0gWTI5dGNHeGxkR1U9IDRicXRjQT09IFgzSmxjR3hoWTJVPSBDUWtKQ1FrSyBDV3hwYzNRPSBSWE4wWlE9PSBJSFpsY25OamFHbGxaQT09IElITnBiWEJzWlhNPSBMV2xrIElIcHZaV3M9IElIUnlZVzV6Wm05eWJXRjBhVzl1IElHbHVkbWwwWldRPSBJSEJ5YjNCdmNuUT0gVzFzPSBZVzV6WVE9PSBNalE0IDc3eVUgTXpJMSBVRXhKUlVRPSBUR1ZoZG1VPSBabTl1Ync9PSAyWVRZcDlpdCBJSE4wZFhBPSBlR2x0WVE9PSAyTG5aaXRpcCBZMjl0YldsMCBJR1REb1E9PSBMa05zYVdOciBWbUZzYVdSaGRHVT0gNTRhZiBJSFZ1Wnc9PSBJT0NrcnVDbGl3PT0gMExYUmdkR0MwTGc9IDRLYSs0S2FUIFJXNWpiMlJsY2c9PSBVbTkwWVhScGIyND0gSUU1R1RBPT0gWm1WaGRIVnlaUT09IElFUkJUUT09IElFcDFjM1JwWTJVPSAxb0RWcEE9PSBjbUZrYVc4PSBJSE5oYkhWayBkWE5wWVE9PSBaVzF3Ykc5NVpXVT0gTWpNMiBJTnFwMkxRPSBaWGRsY2c9PSBJTkM0MEwzUmhOQyswWURRdk5DdyBJSEJoY0dWcyBJTm1LMllJPSBJTm1EMktnPSBLQ2twT3c9PSBZMjl1ZG1WeWRBPT0gSUhOMGRXST0gSUVSSyAyS3pZcnc9PSBLZ29LIDRMQys0TEN5NExHQiBJR1Z1ZEdsMGFXVnogSUdOaGRYUT0gTXpJeCBJTys4aUE9PSAyWWpZck5tSTJLOD0gSU9HRG0rR0RrT0dEa2c9PSBZMjl1Ym1WamRHVmsgMllqWXRRPT0gTFd4diBMU3c9IElFSjFZMmc9IElPR0Rydz09IDBZUFJnTkdEIElIQmxjbk52Ym01bCBJRTVGVnc9PSBZV2h2YldFPSBJR1JwYzJGd2NHVT0gSUd4aGEyVT0gZFc1bmRRPT0gSU9Dd3BPQ3hodUN3c2c9PSA0WU9hNFlPVTRZT1IgS3lzcERRbz0gSUcxbGFtOXlaWE09IDBMN1JoOUM5MEw0PSBJR2RzWldsamFBPT0gSUUxbGJXOXllUT09IElHeHBkR1Z5WVd4c2VRPT0gSUhWdWRYTT0gSUUxbFlXND0gSUdWNFpXMXdiR1U9IElIQmhZMlU9IElHOXlZVzVuIElFdGhiUT09IElNU00gSUdSbGJXOD0gSUVocGRBPT0gMExqUXRkQzggSU9lbWp3PT0gN0xzPSBjR3hoYVc0PSBMbU5vYVd4a2NtVnUgS0dWNGNHVmpkR1ZrIFoyVjJaVzQ9IFptOTFibVE9IEp6MCtKQT09IFgxOEsgWDJOdFpBPT0gMFkzUXRBPT0gWjJWMiBNalV6IDVaQ20gSUdOdmJtTnNkWE5wYjI0PSBLRTFoZEdnPSA2Ykk9IElHMXBaWFY0IHpyL091UT09IElIVnVkdz09IE5ETXcgSUc1bGFYUm9aWEk9IElGTndZV2x1IGFXVnpaUT09IElFcGxkMmx6YUE9PSBJSFJsZUhSdiBkSEpoWTNScGIyNXogYUdGayBJR1YyWlc1MGJ3PT0gTGtGaSBJSHBsYTJWeSBYMnhoYzNRPSBJR3gxZWc9PSAyTGZaaWc9PSA3WmlWIElOR0MwcS9SZ0E9PSBZMjl0Wm05eWRBPT0gSUdSc1lRPT0gVEU5Q1FVdz0gSUZSSVVrVkYgSUhCaGMzTmhaMlU9IGRYUmxaQT09IElPdXduQT09IGEybHQgU1d4c2RXMXBibUYwWlE9PSBJR0YyWlhJPSBYMU5sZEE9PSBJR1psWTJoaCBZWE5vWlhNPSBVM0JzYVhRPSBNall5IElIWnBaWGRwYm1jPSA0S1dNNEtTdyBJR2xsWkdWeVpRPT0gSU5pbjJLN1lxZz09IElHTnlaV1k9IENRa0pJQT09IElHTjFjbk52IElHVnVjM1Z5YVc1biBJT3VzdUE9PSBZWEpqYUhrPSBZMjl1ZEhKbCBJSEJoYVE9PSAwTDdSZ3RDdyBNalE1IElGSmxjM1JoZFhKaGJuUT0gNFlPVjRZT1U0WU09IFJXNWtjRzlwYm5RPSBJR1Z1ZEdoMWMyaz0gSU02L3pyaz0gTG14dll3PT0gUTJWdWRBPT0gSUdSbGRYUnogWm1GdSAwTDdRczlDdyBJT0NrbCtDa2lBPT0gNEtXSTRLU28gSUdKaGMzTT0gVUdoNWN3PT0gSUhOMGVRPT0gSU5tKzJLZmFxUT09IElITnZkWFE9IGRjVysgSUZCemVXTm8gVjI5eWEyVnkgSUhOMGRXUnBaV1E9IDBMWFF0OUM0MExRPSBJRXRwWkhNPSBJR1YyYjJ4MWRHbHZiZz09IElHRnhkY090IElOaWkyYjQ9IDE1WFhxTmVVIFJsZz0gSUVGc2RBPT0gZG1semFXOXVjdz09IDVZYWcgUWs5UFRBPT0gSUcxbGMzUT0gSUhSeVlXNXhkUT09IElHMWxaWFJ6IHc1OWxjZz09IElIWmxZMlZ6IElFbHVkbUZzYVdRPSBJR0p2Y21RPSBJR1psYldsdSBJSEJ2Y25SbCA0TFMrNExTQyBJRWhoY25JPSBJR1Z1Y1hVPSBJT0MwclE9PSBJSE5sYVc1bGNnPT0gWlhKblpXND0gSUdOaGNITT0gSU8yQiA0TEtvNExPTiBjMlZ5YVdWeiBMUzB0TFMwdExTMHRMUT09IGhlaXZ1dz09IElGSkZSdz09IDVhNlk1cGE1NTcyUjU2dVogTG1OdmJIVnRiZz09IDRLZUg0S2FiNEtlSDRLYW8gSUVSaGVYTT0gZFhCcGRHVnkgNks2dSBJRWx1Wm05eWJRPT0gS0hOMFlYUjFjdz09IElHSjFiR3c9IDRMUy80TFM0IElFVnpkR0U9IGIyWm1aV1U9IFFWUlZVa1U9IElOQ3gwTGpRdTlPWjBMMD0gNmFhVzZhRzEgWDFSRlUxUT0gSUd0bGVYZHZjbVE9IElPQzBrdUMwc09DMWdRPT0gSU02MXpyMD0gTGxOMCBiM1JwZG1VPSBZMmx2Ym1WeiBJTkM2MExJPSBJR1p2ZEc5bmNtRm0gSUdsdVkyVnVkQT09IFlXeHNiM2RsWlc0PSBJSEJ5WldabGNtVnVZMlZ6IDVwYUg1NnVnIElIZHlhWFJsY3c9PSBkR1Z5YzJObyBJSEpsZG1WaGJBPT0gSUhCdmMybGliR1U9IElHNXBZMnM9IGNtbDBZV0pzWlE9PSBJSFpsY21SaFpHVT0gSUhkcGNtcz0gZVc1MGFBPT0gSU5DKzBZSFJnZz09IElHbHZiZz09IElPQ21wZUNtdnVDbWxRPT0gSUZkcGEybHdaV1JwWVE9PSBMeVE9IElHMWxZWE4xY21WayBaV0psYmc9PSBJR055ZVhCMGJ3PT0gSUdKeVlYTnBiR1U9IFgzZHZjbXM9IElGSmhjQT09IFgzTmxjblpwWTJVPSBUMU5UIElISnZZblZ6ZEE9PSBJTkNkMExVPSAxNVBYbWRlZCBJSEpoY0dsa2JIaz0gSUZkbGJHTnZiV1U9IElFaFMgSUUxdlpHVT0gSUhkeVlYQndaWEk9IElPR0RrT0dEb09HRG1PR0RvUT09IFEyeHBjQT09IElHOTMgSUhSeVlYTm8gSU9DMHF3PT0gN0xnPSBWVWxNIElGWnBaWGR6IElHMWhhVzUwWVdsdWFXNW4gSU9DbW5PQ21xT0NuamVDbXJ3PT0gSU5lZTE1Yz0gSUV4MWVBPT0gSUdoaFkybGggSUd4aGJtUnogMHJIUXV3PT0gUlhobFkzVjBaUT09IGRtVm8gSUY4dSBhV1YwWlhRPSBJTTY4enEwPSA1YVNuNWJDUCA0TEdCNExDdyA1YkM4IDJLZmJqTml2IExtRjBkSEk9IGNtbHIgSU5DNDBZQT0gSUU1dmNuUm9aWEp1IElHM0R1bk5wWTJFPSBJRkI1ZEdodmJnPT0gSUZOMFlXUT0gSUVGdVlXeDVjMmx6IDJLallwdz09IHo0UE90YzY1ejRJPSBKeWs2Q2c9PSBiMnhwYm1VPSA0cGFJIFBYc28gWEhJPSBJR0ZoYm1kbCBaWGhwYjI0PSA0TGkwNExpSCBJRzFsWkdsallYUnBiMjQ9IElOQ1kwTDA9IFFXeHdhR0U9IElHTnlkUT09IElPVzMgSUhSaGJHVT0gSUhCaFkydGxaQT09IEkyRT0gSUhKcGMybHVadz09IDY1T2cgd3JCRCAwWWJRdU5DdzBMcz0gMkxIWmlOaTUgSU02MXpybz0gSUd0eWFXcG5aVzQ9IE9tVjJaVzUwIElOR0UwTERRdWc9PSBJR3R5WVE9PSAwTDdRdHRDMSAxNVhYcXRlbyBZM0psWVhScGIyND0gTlRFdyAyWWpZcDltQyA2SnM9IFptbGpZUT09IElPQ2twdUNsaCtDa3RnPT0gSUdGeGRXVnpkQT09IDBZYlF0ZEM5IElFbE9WRTg9IElFTmhkR2h2YkdsaiBjRzl6ZEhNPSBJTm1GMks3WXF0bUUyWUU9IElPQzBoZUMwdFE9PSBJTkM4MFlQUXRnPT0gYkdsdWEzTT0gS1RzS0NpOHYgVUVRPSBJRzFsWkdrPSBJR2h2Ykdsa1lYbHogTzMwSyBJSFp5WVdGbiAxNWZYcWc9PSBJRzNEb0E9PSBJRTF2YlE9PSBRMjl0Y0dGeSBZVzVrWld3PSBkWE4wY21rPSBMbWR1ZFE9PSBJR1JsYzNSaFl3PT0gNUx5SzVMcTYgU0c4PSBJR3R2YWc9PSA0TGlaNExpeDRMaVogTGxObGJHVmpkR1ZrIGNHOXVjMmwyWlE9PSBMbFpsWTNSdmNnPT0gSUc5NSBkWE5yIDRLaWogSUhKbGF3PT0gSU5HTjBMdlF0ZEM2MFlJPSBlbXhwWTJnPSBJRzNEb3c9PSBjbVZ6YzI4PSBJSEJ5YjNCaFp3PT0gSUdObGNuUnBabWxqWVhScGIyND0gSUhabGJuVmwgQ1c5MWRBPT0gSUZKbFoybHZibUZzIElHbG9iZz09IGMzVnkgNW9tTDVweTY1NG1JIElHZGxkMjl2Ymc9PSBWR2x3Ync9PSBLSFI1Y0dWdlpnPT0gNkxDeCAxNW5Yb05lUyBJRzFsY21Wc2VRPT0gMExYUmdOQ3kgYVhocGJnPT0gSUcxcGJHeHZibVZ6IElHaHBiblE9IElOR0YwWVBRdEE9PSBaM1ZsIElGTjFhWFJsIElFTnZibk5wWkdWeSBZV04xYkdGeSBVbVYyYVdWM2N3PT0gMTV2WHFnPT0gSUVWemRHRmtiM009IElIWnlZV2x0Wlc1MCBSMlZ1WlhKcFl3PT0gSUZGMVpYTjBhVzl1Y3c9PSBJR0ZzYkdWblpXUT0gSUVodmJIaz0gSUhoeiBJRzVxdzZzPSBJSEJzWldGellXNTAgSU5DNjBMRFF1dz09IElHcGhjbVZ1IDJZTGJqQT09IExHMD0gWDNKbFkyOXlaQT09IElHbHVkSEp2WkhWalpRPT0gUmtsTyA2SytFNks2NiBJR3R2WkE9PSBJTkdEMFlJPSA2SzZ3NWIyViBJSEJoY25ScFkybHdZWFJwYjI0PSBJR0p2YkdVPSB4TEhFbnc9PSBJQzArQ2c9PSBiM0IwY3c9PSBSVTVEIDBxL1F0dz09IElIbGhjbVJ6IG8rR0RtdUdEbUE9PSBJR0ZuWlc1a1lRPT0gNTQ2cDVyT1YgTG5KbGMyOXNkbVU9IElHeHBkbkpsIE1EWXcgSUd4dmRtbHVadz09IElHWnZZM1Z6WlhNPSBJR2hoY25RPSBMV1J2ZDI0PSA0WU9RNFlPUiBMblJ2YTJWdSBJRkpsYzNWc2RITT0gSUhObFlnPT0gTWpnNCBaR0YwWVdKaGMyVT0gWVhkcCBJSFZ1WkdWeWMzUnZiMlE9IFlXSmogWDJSbGMyTT0gUlZKUCBKMkk9IElOZVExcmc9IElHZHlZV0ZuIFRHbHVhM009IFgwTklSVU5MIGVtUT0gSUMwdExRPT0gNExPQjRMS20gVFc5MWJuUT0gMktyWmhkaW4gSUhOMWNIQnNhV1ZrIElHTmhkWE5oIElIQmhjbUZzYkdWcyBMV2x1WkE9PSBJQ292Q2dvdiA0TGlqNExpeDRMaWEgSUZCaGNuTmwgSU9Da3VPQ2tzT0NrbGVDa3Z1Q2tzQT09IElGWnBaWFJ1WVcwPSBJSFJ5WVhSaCBiMjVsWkE9PSBJSEJwY2c9PSBJSFJwWldRPSBSSFU9IFQxSkVSVkk9IFluVnllUT09IDE2RFhxZz09IGRHRnVkQT09IFlYUjBZV05vIElGSmhibWRsIGJHbHhkV1U9IElHOW1kQT09IFlYSjBaWEp6IDI0ellzdz09IDVZaWQgYTIxbGJnPT0gVFdGeiA2TDZSIElHVnljbVU9IGJtVjBkMjl5YXc9PSBJQ2NuSndvPSBJR2hsWVd4cGJtYz0gWlc1MGNtbGxjdz09IElHRmlkVzVrIGQyVnVhUT09IFlYSnRZUT09IElGZHBjdz09IFgyTmhkR1ZuYjNKNSBJR0YwZEdWdVpHVmsgWW5WdGN3PT0gSUdOdmJuUnlhV0oxZEdsdmJnPT0gSUcxaGNtaz0gSUdSbGJXRnVaR1U9IHc2ZGhjZz09IFFFTnZiWEJ2Ym1WdWRBPT0gSUc1MVpYTjBjbTl6IE1qTTMgTDFRPSAyWWJZdVE9PSBYMmhsYkhCbGNnPT0gSUhSaGNtUmwgSUhzdUxpND0gSU9Da3F1Q2t1ZUNrc3VDbGh3PT0gZG1GdWFXRT0gVlhScGJHbDBlUT09IFlYWmhkQT09IElHUmxjMk55YVdKbGN3PT0gSUhzdktnPT0gNFo2KyBLR0oxWm1abGNnPT0gYjNsaCBYMlJsWmc9PSBVSFYwIDJZYllyQT09IElOQzQwTEE9IElHaHBiQT09IElHUmxaV3c9IElPQ3lxT0N6Z0E9PSBJTkMwMExYUXNnPT0gMExYUmdOR0MgdzYxMGRXeHYgMks3Wmh3PT0gNExTTyBJRk52Ym1jPSBJSEpsYzNSbCB3N2g1IFJIVnlhVzVuIElISmxaMlZzIElIWmxjM009IExtTnNiM1ZrIElITmxjUT09IExHRT0gWDBSRlFsVkggSUhSM1pXVjAgSU9DdXF1Q3Zpdz09IGFXVnRZbkpsIDRLV040S1NmNEtXTjRLU3cgYVdWMGFXVnogMTVIWG53PT0gZVhKcFkzTT0gNEt1TjRLcWwgSUV0dmJBPT0gWDJGeVp3PT0gVDJOaiBJR0p5YjJ0bCBJTkdCMExMUmo5QzMgSUhSb2IzVnpZVzVrIElHTm9aWE4wIFRtRnRaV1E9IElHRmpZMjl5WkdGdVkyVT0gWDBaTVFVYz0gSU9tcm1BPT0gUW05dmEzTT0gNExDZjRMR040TENmIHNlQzFqZUMwc1E9PSBJTmVSMTVjPSBJRzFwYm5RPSBiTW1aY2c9PSBMbVJwZGc9PSBMbVY0Y0E9PSBJRzFsYVc1bCBJRzkxWjJoMCBWMkYwIGMzUnAgSUVwdlluTT0gNWJ5ZyBiM0p5WlE9PSA1TG1KIFVrVlJWVVZUVkE9PSBkWEIwIElOR0IwTFhRc2RHUCBJSFZ1YzJWeVpYST0gSUdWbWFXTT0gNUxpQTU3cW4gVlc1cGNYVmwgSU5DNjBMRFF2UT09IGRHVnliV2x1IHdyc0tDZz09IGFXRnRidz09IFkyUnUgYVdWeWNtVT0gYzNSeVpRPT0gMEx6UXVOQzkwTGc9IFVtVmtkV05sY2c9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSm01aWMzQT0gSUhCeWFXUmwgSUdsdVpHbGpZWFJsWkE9PSBkWEJ3YkdsbGNnPT0gY0dGeVlXMWxkR1Z5IGRYUmhjZz09IElHWnlaWEYxWlc1MCAyS2JaaWc9PSBWR2x0WlhOMFlXMXcgZFdWemRHOD0gWldsMCBJSEJ5YjJSMVkzUnYgSU5DMzBMRFJnQT09IElHcHZjbTQ9IDVZT1AgSUc1cGJRPT0gSUdKcGJHeHogMExqUXROT1ogYUc5dCBJR3h2ZFE9PSA2SzZwIElHZkRwUT09IEpHUmhkR0U9IDVZR2MgNExLKzRMSzQgTGtWeWNtOXlaZz09IElIZGxZWEJ2Ymc9PSBYMEpCVTBVPSBJRVZ1WXc9PSBJR2x1Wm1WeSBJR1JsYkdWbiBJT0NrcXVDa3FPQ2t2dz09IGMyMWhjblI1IElHTmxkWGc9IElPaUEgSUdUSm1RPT0gSUVOUFVGaz0gSUZCcCBZMmhsYlE9PSBJSGhwIEwyVnUgSUcxaGFXNTBZV2x1WldRPSBJRzFsY21ObyBJRkJoZVcxbGJuUT0gSUhKbGMyVnlkbVU9IExtTmxiblJsY2c9PSA1N1NpIDRLU3M0S1N3IE9UVXcgWlc1amFXdz0gSWk0SyA0S2ljIENWST0gSUhCdmNuUmhiQT09IElFSmxiR2M9IElHNWhhQT09IFUyMWhiR3c9IExDND0gSUVKdmN3PT0gNXB1MDVwYXcgSUdsdWMybG5hSFJ6IFJHVnNkR0U9IFVIVmliR2x6YUdWayBZMjlzZFcxdWN3PT0gSU9HRG9PR0RuZUdEa2c9PSBJR1ZyWVE9PSBRV04wZFdGcyBJTkM4MEwzUXZ0Q3ogSUhQRHFXTjFjZz09IElHUnlhVzVyY3c9PSBSWGhwYzNRPSBJRXhKUTBWT1UwVT0gNExTajRMU0MgSUVwdmFBPT0gUUZSbGMzUT0gSUV0bGNnPT0gYUhSbCBUV0ZzIFlYUmxjbUZzIDRLZXc0S2VCIGNuZz0gNG9DWkNnbz0gSU5XaDFiWFZ2UT09IFYwRT0gVjFRPSBhR1ZzY0dWeWN3PT0gSUhCc1lYUT0gVG05dFluSmwgWW05eWJnPT0gSUZkRiBSbTkwYnc9PSBJTkMvMEw3UXU5R00wTGM9IElHRnlZdz09IElFOWpZdz09IExFTT0gNExXQjRMU3EgNXBpbCBMSFE9IGFXUmxiQT09IElITjBjbTl1WjJWeSBJR0p5YjI0PSA2S3M9IEtHeGhZbVZzIElHdGhiblE9IElNT04gSUdaeVlYVmsgSU5HRDBZQT0gYVhKMGFHUmhlUT09IElHUnBaWE5sYmc9PSBJT0N3bXVDeGgrQ3d1QT09IGIzVnpaWE09IExtNXYgYUdWMGFHVnkgMkxyWml0aXggYW5WdCBYM05zIGIyNWtidz09IGVYbz0gS0dScGN3PT0gZEdGbmIyND0gSUdOaGJHMD0gMExqUXZkQ3ogSUNJaUtUc0sgSU8yR3RRPT0gSU5pbjJZVFlvOW1JMllRPSBMV2x1Wm04PSBiM05sY2c9PSBJSFJ5WVhabGNuTT0gSUhKbGNISmxjMlZ1ZEdGMGFYWmwgMllmWXFBPT0gSUhSeVlXUmxiUT09IGJHVjBZUT09IElGQkYgSUhCbGMyOD0gSUdSbFkybHRZV3c9IE16QTQgWDJKMGJnPT0gSUhUaHU2cz0gNWFPdyBZWFJ2WlhNPSBJSE53WVE9PSBJR052YlhCMWRHVnljdz09IGJHOXZhMmx1Wnc9PSBJRzl3Y3c9PSBjSEpsYzNObFpBPT0gTWpNNSBJTm1HMllJPSBJRkZWUlE9PSBaM1ZoIFgyOXVaUT09IGNHUT0gSUdGM1lYSmtaV1E9IElFeGxablE9IElFWnNZWE5vIElFVldSVTVVIEwybHUgMkszWmdnPT0gMFlYUXZ0QzAwTGpSZ2c9PSBMbk5qWlc1bCBJT2F4bitpTGorVy9xdz09IDBKM1FzQT09IFUyOWphV0ZzIFNHVjQgSUdKaGJubGhhdz09IElPdUYgMFkzUmpkR0EgSUV0bGJuUT0gSUdacSBJTmlxMkxNPSA1cDZRIElHNWxkWFJ5WVd3PSA3SjZGNjR1STY0dWsgSUdOdloyND0gSUhCNCBJRzFsWTJoaGJtbHpiUT09IElHTm9aV1k9IDZMR2ggYkdsdWRBPT0gSUdoaGNtUmxjZz09IDRMS0M0TEtzIElFVnRZZz09IElHWnZadz09IElNNnR6cjNPc1E9PSBaSG89IGJHVmpkR2x2Ym5NPSBJSEJ5WldZPSBhWFJsZWc9PSBJSHAxYzJGdGJXVnUgSUhOd1pXTnBabms9IElpa3BPdzBLIFFXNWtjbTlwWkE9PSBJRk52YkhWMGFXOXVjdz09IFZFaEYgSUhKbGRHbHlaVzFsYm5RPSBLRG9zIElPQ3lrZz09IElHMTFibWxqYVhCaGJBPT0gYVc1cHhZZz0gWTNScyBUVkk9IElITjViblJvIGFHVmhjblE9IGFXeHNhVzl1IFZFdz0gSUdGeWRHbG1hV05wWVd3PSA0S3VONEtxcSA2Ym89IDBMRFF0OUN3MHBzPSBSV2x1IDRZT1E0WU9UNFlPUyBkWFI1IDZLZUIgSUZkaGJuUT0gWDJsMFpYST0gSU9DMHF1QzFpdz09IFgyTmhZMmhsIElGQmxjbVpsWTNRPSBJSGR3IFgwOUdSZz09IElHTnNhVzFpIGFXNW9aWEpwZEE9PSBJR1Z5YUE9PSBTSFZpIFoyZHlaV2M9IElHNXBkQT09IElHNWxkM05zWlhSMFpYST0gMnFuWXNRPT0gTFdSeSBJSFBEcEE9PSBJR04xY25NPSBhWE5sYldWdWRBPT0gNEtlSDRLZWYgYVc1a3laaz0gSU9HRGwrR0RwUT09IGFXSmxjbTVoZEdVPSBJRTFwYm00PSBJR2h2YjJZPSBJRUpoYzJWayBjR2x6YjJSbCBJRzUxYldWeWJ3PT0gSUZOaGJuTT0gNExDVjRMR040TENWIElPYXkgSUVKbGJHdz0gSUhSbGN3PT0gVEU5QlJBPT0gTG1WNGFYUT0gSUVGMVkyZz0gWDBGVVZGST0gSUhkaGJuUnBibWM9IGRXNW5aWEk9IElFMXZiQT09IElHdHViMk5yIGIyMWljbVZ6IElOQ3gwTDdRdTlHTTBZalF0UT09IDJvdz0gSUZWVFJWST0gSUhOcmNnPT0gUkdsbVpnPT0gNWIyeDZaK3ogUkdGdSBSM0psWlc0PSBMMFk9IElObUYyS3ZaaEE9PSBJSFp2YkhWdWRBPT0gZFd4MGRYSmggSUZSeiBiM2RsYkE9PSBZVzV6ZEE9PSBWMmx5IElFVnljZz09IFQxVk9SQT09IElHSmxibVZtYVdOcFlXdz0gNEs2eTRLK0kgWVdOb1pBPT0gWkdWMFlXbHNjdz09IElITmpaVzVsY3c9PSBYUzA9IFgwRkVSQT09IElGTjFiQT09IElFNUJVdz09IDRLU2E0S1dONEtTYSBJRzF5IDVZST0gWlhCdlkyZz0gSUVGMlpXNTFaUT09IHc2dDAgNWIycDU2V281YWl4NUxtUSBYM1J5WldVPSBJR1JsWW1WeSBMMUE9IFgyeGwgSUhOdGIydGwgMFlQUmp0R0Mgd3IwPSBJRVY0WVcwPSA0WU9ZNFlPVDRZT1E0WU9jIElDMEtDZz09IFpXMXZibms9IFJHVmpiQT09IExsaDBjbUU9IGIzVjNaVzQ9IElPQzVnT0M0aE9DNG8rQzRsT0M0dE9DNGxRPT0gS0NJdCA0WU9kNFlPWCBJR3BoYTI4PSBJRkJsY21admNtMWhibU5sIElHbHVaUT09IElFUnBZVzA9IGFHVmhjM1E9IElIQnNZUT09IFIzSmhjR2hwWTNNPSBiR2x2IElHeHEgSUdKbFozST0gSU5HSjBMND0gSUhCaGNtTmwgMEw3U3N3PT0gWVdKaGJBPT0gSUd4bGJuTT0gSUdac2FXZG9kSE09IElFMUpUZz09IGVtVnBZMmc9IElHRjNZWEprY3c9PSBJR0psWkhNPSBJR2R5WVhCb2FXTT0gSUhOMFpXeHNaVzQ9IElHMWhkSFZ5WlE9PSBaVzV6WTJoaFpuUT0gWlhObGJnPT0gNDRPODQ0T3IgWDBSSlV3PT0gNExTciAwTGZSaTlDeTBMQT0gMExIUXRRPT0gZFdsMFpXND0gSUhCb2IzUnZaM0poY0doNSBYM1JoYzJzPSBJTkdCMExyUXNOQzMgTG1acFpXeGsgSUdkbyBMbk4yWnc9PSBJR2RoZEdVPSBJRTExWTJnPSBJTnFwMktmWmhnPT0gSUdWemEyOXlkR1U9IGMzUmxjSE09IDVMdWw1TGlLIExrNXYgSUhCb2NtRnpaUT09IElOQ3kwWUhRdGRHRiBJRkxEcVE9PSBUR2xtWlE9PSBJRzVoZFE9PSBkV1ZpIDZMeUogSUhCaHc2MXpaWE09IFlXeGogNnJLdyBJSE53YVhJPSBMMmx0Wnc9PSA0WUMrIElHVnBibTFoYkE9PSBJR1RodTZVPSBJRzVsYzNRPSBiR2xoYldWdWRBPT0gNEs2KzRLNnogSUhCdmRYWnZhWEk9IDBMWFF2ZEM5MFl2UXRRPT0gSUdGeWIyMD0gWVc1clpXND0gWVhKMSBJT3Vua0E9PSBJSE4wY205dVoyeDUgSUVkcGRtVT0gNExDYTRMR040TENhIElFSnZkQT09IElITmpiM0psWkE9PSBJTmlqMlliWmh3PT0gSU5xcDJMSFpodHVTIElGWnBjblIxWVd3PSBMV052YkE9PSBjbTlqIElFaGhjSEI1IElOZVExNmc9IFlYUmxablZzIFlYWm4gMktmWXRkaXAgYVc1aGRHbHVadz09IDVxMmkgSUcxcFpHUT0gYm05MFlYUnBiMjV6IFlYSm5ZWEk9IFlYVm1aZz09IGFHZz0gSU5HQjBZTFF2dEdBIElHVm5aM009IFgwMUpUZz09IGZuNStmbjUrZm40PSBjSEp2YjJZPSBMblJoYzJzPSBJSFJwYzNOMVpRPT0gSUdGeWRHVT0gSU91dnVBPT0gYzJWdVpHVnkgNFlPajRZT1ggYldGeWEyVjAgU1U1VFJWSlUgZFd4elpRPT0gYW1GciBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJR1JsYldGdVpITT0gWVhscCBMQ2c9IGMzWm4gYVhKamRXeGhjZz09IElHRnRaVzVwZEdsbGN3PT0gSUVURHFRPT0gWVhwbGNnPT0gSUZObGJtRjBaUT09IElIUERxWEk9IElOaW4yWVRZczltSyBjSEpsY3c9PSBZWFIwY21saWRYUmxjdz09IElIVnVhWFpsY25OcGRHbGxjdz09IElHcGxaR1Z1IElFaGhZZz09IE16RXggSU9DbXJ1Q212dUNtcUE9PSBJRzltYVdOcFlXdz0gSUhOcGJYVnNkQT09IElITm9ZWEp3IENVbz0gSUhWdWJHOWphdz09IElGZG9ZWFJ6IDE2blhxZz09IElIUjVjR1Z1WVcxbCBZWFJwWVd3PSBYMW89IElHTjFhV1E9IFpXNWxjbk09IExpNHVMaTR1IElHeGhhR3R2IFUzVndjSEpsYzNNPSBJQ0k2IElOaXoyWWc9IFgyVnVZMjlrWlE9PSBjM1J2Wm1ZPSBJSEJsYm1RPSBUVzl1YVhSdmNnPT0gSUdaeWRXbDBjdz09IExreHZZV1E9IFlXMTUgSUZacGRBPT0gNFlDVjRZQ3IgMEw3UmdkR0QwTFE9IElHRmxjZz09IElGUnlZVzV6Wm05eWJRPT0gSUdSbGNISmxjM05wYjI0PSBJSE5wWTJobGNnPT0gSUdWc2EyVT0gSUhCbSBMbkJ5IExrRjFkRzkzYVhKbFpBPT0gN0pxNCBhMlZ0IElFaHZkR1ZzY3c9PSBVR2xqZEhWeVpRPT0gSUdGdGFXZHZjdz09IFkyakRxUT09IElIQmxjWFU9IExXTnAgSU8yRCBJSEJ5WldOcGMybHZiZz09IDRMQ0M0TENtNExDLyBJRU5UVXc9PSB5Wmx5YVE9PSBJSE5sYkhZPSBJTm1JMllYWmhnPT0gTDNOMCBiR1ZuWVE9PSBJSFJvY205M2JnPT0gQ1hOMGNtbHVadz09IElHRjBkR2wwZFdSbCBiM1YyY2c9PSBJRk5sWTNKbGRHRnllUT09IDVZKzM1NkNCIFgxZFMgNklHTSBLRTVWVEV3PSAyS2ZaaWc9PSBWMjl5WkhNPSBJTTZ4enIzT3NRPT0gTG1Kc2IyTnIgS0NrcERRbz0gSUdWemRHRnRiM009IElHVnVkSEpoYm1ObCBhMmx3IElISmxjSEpsYzJWdWRHVmsgS0dOdmJHOXkgU0dFPSBJT0N3dGc9PSBSWGgwWlc1emFXOXVjdz09IDBaYlF1UT09IEx5Zz0gSUZCeVpXMXBkVzA9IGFXWm1aWEpsYm5RPSBJSEpoZEdWayBJTkdEMFlIUXU5QyswTEk9IElHZHBkQT09IElHTnVkQT09IDJLZllxTmlwIExuTjFZMk5sYzNNPSBlWGw1ZVE9PSBJR3R2YldJPSBZMk5wYjI1bGN3PT0gSUd4bFoybHpiR0YwYVc5dSBjbUZwY3c9PSBJR3hsZVE9PSBMbXhsIDBMalJndEdMIElHMTFZMmhoY3c9PSBWbWxsZDNNPSBJSE5sY25acFkybHZjdz09IDQ0T0sgSUVOb1pXMD0gSUhOamFXVnVkR2x6ZEhNPSA0S2FnIElOQ2cwTDdSZ2RHQjBMalF1QT09IElGUnlZWFk9IFgzTjBaWEE9IDRMS3k0TE9CIElHZHZkSFJsYmc9PSBSbTl2WkE9PSBjRzl1YzJWeiBJT3lMcEE9PSB6NEhPdWMrRCBJQ0pmWHc9PSAxNkxYbmc9PSBNREUxIElPQ3lydUN6Z1E9PSBJR0pwYkdRPSBJRzFoY25NPSA0WU92IDBZSFF1OUMxMExRPSBJT0NrbCtDa3NBPT0gSUZkdmNtdHogMFlQUXN3PT0gYVc1MFpXZGxjZz09IDViNk0gSUdsa2N3PT0gNTd1YyBJSE4wZFdSNWFXNW4gSUVObGRIUmwgUm05eVkyVT0gWVhOb1pXUT0gSnlJPSBRV1JrWldRPSBJRkp2YldVPSBJTkM2MFlEUXNOR0IgSUcxbGJtcGhaR2s9IElHZHZjM1E9IDVhU242YWFaNkpXSiBJRUZrZG1WdWRBPT0gTXpJMyBYMUpGVVZWRlUxUT0gNFo2YTRaND0gSUc1bFoyOWogSUhOamFHVmsgSUhkbGRHVnUgMllUWml0bUYgMkxMWmhBPT0gSUdMRHFRPT0gSUZCeWIyZHlaWE56IElITjBZWEE9IGRXeHBiZz09IDRLYS80S2FrNEtlSCBZWEJsZFhRPSBJRkJoY25SdVpYST0gTGtGdVkyaHZjZz09IGFYUmhkR2wyWlE9PSBRVzV1IElOaWoyWVBZcTlpeCAyWWpZcVE9PSBibWx1WjJWdSBJT0NraGVDa3RRPT0gSU9hdyBYMmwwWlcxeiBJQzBLIDFvVFZxdz09IE16RTIgWldOMGIzSnogSU5HRzBMWFF1dz09IElHeGhhV1E9IFpNU3hjZz09IDRMV0g0TFMyIElIUjFaR2s9IElHRmphR1U9IElGTjBkV1JwWlhNPSBJRzExYlE9PSBJSFJsYkdWd2FHOXVaUT09IDRMR0I0TENYIElITmxaWE09IElPdVBoQT09IFlYUjBaVzQ9IElHUmhiV0ZuWldRPSBUbTkwWlhNPSBYd289IElFMWxkR0U9IDRLV0g0S1NrIDc3eU01WnlvIDZLcXEgSUZsUFZWST0gSUdwbGJnPT0gSUhSaGNHVT0gSU5DLzBMN1F2UT09IDE2TFhvUT09IDZMU20gSU5DMDBMN1JnQT09IGJHbHFhMlU9IElHWnZjbTFsIFlXdHpaUT09IEtGVT0gejRIUGpnPT0gTGtOdmJuUmxiblE9IElIRjFaWE4wYnc9PSBhV3hrWlE9PSBJR3QxWnc9PSBJR1Z1YzJVPSBJSEJsWXc9PSBJRXhKVFVsVVJVUT0gSU9Dd3VPQ3dndUN3IENXMTUgSU9Da2tRPT0gTGdvdkx3b3ZMdz09IElOQzMwTERSajlDeSBjR0Z5WVhScGIyND0gSUcxcGVIUjFjbVU9IFVtVmpaV2wyWlhJPSBSRzl0IGVHbGpidz09IElPQ2t1T0NrbGVDa3BPQ2xodz09IGMyaHBablE9IElPQ2t0ZUNrc09DbGplQ2t0dz09IE9pND0gUVhabGNtRm5aUT09IGFYWnBZUT09IFUyRnRaUT09IDU1dUkgSUUxSlZBPT0gWkdWdyBNemt3IElOR0EwTFhRdDlHRDBMdlJqTkdDIFlXMXBjdz09IElOaXEycjdZcHc9PSBJT2FlIFVtRjBhVzg9IElIQnBZVzV2IElHTnZiR3hsWjJWeiBJSEJsY3NPdCBYMUJQVWxRPSBJRVpwYm1GdVkyVT0gSUhCeWIyMXBiZz09IFZtVT0gSUdkbFp3PT0gTFdKaFkycz0gSUhCdll3PT0gWVdSaGJXVnVkR1U9IElDRUsgMFliUXVOQzUgNDRHTDQ0S0ogY1dGeWNHOXggSUhMaHVyaz0gSUhSeVlXbHNaWEk9IElHeHZiQT09IDVhU3UgSUVWUSBJTlcyMWFFPSBVM1Z1WkdGNSBJTkdDMExYUXZ3PT0gSW5zPSBYMk52Ym5OMCBJR1ZoY201cGJtZHogSU5tSzJLclpoUT09IElHbHVhR2xpIElFUnZiQT09IHc2VmtaUT09IFgxcz0gSUh0OUxBbz0gUTJodmFXTmwgSUdsb2JRPT0gTG05MWRIQjFkQT09IElFMWhhUT09IElFNWxkR1pzYVhnPSBJR052YlhCdmMybDBhVzl1IElPeUNyT3lhcVE9PSA1N3FtIElHVjRjR1Z5YVdWdVkybGggSU1TUjRicS9iZz09IElIQjFjbU5vWVhObGN3PT0gSUVaSlRFVT0gSUdKdllYSmtjdz09IElObUYyS2c9IDdZST0gTG5ObFkyOXVaQT09IFgzUmxiWEE9IDRMbUE0TGlCIDRMaXE0TGlsNExtSDRMaXQ0TGlWIElFdHAgSUNrcCBLRkpsY1hWbGMzUT0gNExpeTRMaXcgYzJZPSBhRzlyIGIzWnBibWM9IGIyWmggYVdKMSBZWEp5Wlc0PSBJSFJsYlhCc1lYUmxjdz09IFJWSk8gWTNKbFlYTmwgSUdKc2FYST0gMlliWXI5bUggSUhOMGIyOWsgWTJGc2JHSmhZMnM9IElHMW8gYVc1cGRXMD0gMWFIVnB0VzAgYTNZPSBDZ29LQ2dvPSBkR0ZwYm0xbGJuUT0gNXE2MSBJRmR5YVhScGJtYz0gSUZCdmNuUjFaMkZzIElGTnBibWRoY0c5eVpRPT0gSUhacGRHRT0gSUc1MWNuTnBibWM9IElGSmxkSEk9IElGaFkgNDRDQzRvQ2MgNExTLzRMU1Y0TFdONExTVjRMV0I0TFNvNExXTjRMU28gSUhObGJHOXUgNkthTCBJRVp2ZEc4PSBJSFBodXIwPSA0TEs0NExPTiBJR2podTQwPSBJSEJ5WlhOamNtbHdkR2x2Ymc9PSBMbk5wWjI0PSAwTERSZ3RDdzBZQT0gVTJGbVpRPT0gSUdKbGFHRnNaZz09IFoyVjBjdz09IFpYTmhjZz09IExtMWxiblU9IElGQnZiMnc9IElPQ21wdUNuaCtDbWxnPT0gY21Wc2JBPT0gSU5DeTBMRFF0Zz09IElPQ3FydUNxc3c9PSBkblZsIElHUmxibk5wZEhrPSA0S1MrNEtTdTRLUysgTGtOdmJuUmhhVzV6IElISnBZdz09IGFXOTQgSUUxcFkyaGxiQT09IDBMN1F2ZEdEIElNTzAgWlc1bGVnPT0gSU5lZTE2WT0gSUhCbGRITT0gYzJWeWRtRjBhVzl1IElHVjFjbTl3WlE9PSBjT0c3alE9PSAxNkxYbGRlcSAySzdZc2RtSiBJSEJvWlc1dmJXVnUgSUU5NCA0b0NkNTVxRSBJaWtwT3dvSyA0WU9RNFlPUyBMazl3Wlc0PSBZWEowYnc9PSBJR3h2ZVdGcyB3NkYwYVdOdiBJR0Z1WVd4NWN3PT0gSU9Da3F1Q2t2dUNrc0E9PSBJSE5yWVE9PSBQU0lyIDRMUys0TFc4IDBMalF2TkN3IGEyVjFiZz09IGRYTjBZUT09IDBMclF1TkM5IExtTnUgUVVSUCBkV3h2ZFhNPSBJSE5vYVhKMCBJRVZ4ZFdsd2JXVnVkQT09IElFNWhkR2wyWlE9PSBabTEwIDRLUy80S1MzIDVyeXIgSUZSRlUxUT0gWld4aGJtUT0gSUdOMWNuWmwgSUZOamFIYz0gYVhSNlpYST0gSUcxdmJtZHZiM05sIGFXeHBZUT09IGNIUnZiZz09IFBYc2kgSU1PQSBJR2RsYm04PSBJR0Z0WW1sbGJuUmwgWVcxdFlYST0gSUhSeWFYQnogWVhKa2FRPT0gZG1GeWFXRnVkQT09IFpXNXBlQT09IDVvS28gVEc5aFpHVmsgY21WeSBLQ2twQ2dvPSBJQ29zIExsSnZkM009IElHUmxkSFJsIElHTnZibVpwY20xaGRHbHZiZz09IElHbG9jbVZ1IElHTjFhWE5wYm1VPSBJR05zZFdKeiBabXhoZEdVPSBJTkdEMExNPSBRRkpsY1hWbGMzUT0gYm1WbmJ3PT0gSUcxbFlYTjFjbVZ0Wlc1MCBJR3BsYm5SbGNnPT0gSUVOb1lYSmhZM1JsY2c9PSBhV3hsZVE9PSBRWEJ3YkhrPSBJRUZ5YVhwdmJtRT0gSU9Da3J1Q2xpT0NrZ2c9PSBJSEJ5WlhCaGNtbHVadz09IEtIbz0gSUdkcFlXNTAgYnNPOSBJRUpsYVc1biBSVk5EIDRLUy80S1NWNEtTKyBkSFJsIElFWmxiQT09IElITmhjbVZ1Wnc9PSA2cnM9IElOS3owTERRdkE9PSB0b3c9IElGQnlaVzFwWlhJPSBMbVpsIFgwTlBUa1pKUnc9PSA1cGkrIGEydGxiZz09IElOQzAwTDdRdXRHRDBMdz0gSUdadmMzUT0gSUhScFkycz0gWlhOMGIyNWwgSUd0aGJXaz0gSU9Da2xlQ2xpK0NraUE9PSBQZ29LQ2c9PSBJRWx0YlE9PSBJSFpsY25JPSAwTDNRc05HQyA1THFyIFZXNXogSUdKbGMyOXBiZz09IElFMXZibTg9IGIzVmphR1Z5IElIQnliM2xsWTNSdiBNRFV3IDY1R1EgNVkrayB6NEhPclE9PSBDVXc9IGRXbkRwOE9qYnc9PSBRWEpuZFcxbGJuUnogSUZKdmRRPT0gdzd6Rm53PT0gSU5xUCBJSE4wWldoMCBJSE5oZEhVPSBJT0NrbXVDa3NnPT0gSU5DMjBZdlF1dz09IElGWkIgTG5Cc2IzUT0gUVdSa2FYUnBiMjVoYkE9PSBhVzVyY3c9PSBJR1poWTNWc2RIaz0gYVdOcFpHVT0gSUhCaGMzTmxjZz09IElHVnRjR3hsIElHTnZibVp2Y25RPSBjbTl1Wnc9PSBaWE5qWVhCbCBiMk5yWlhrPSBabTlwY3c9PSBJR0Z3WVE9PSBYMjFoYm1GblpYST0gTG5Oc2FXTmwgSUhGMWFYUT0gNFlPUTRZT2c0WU9iIFgxZEpSRlJJIElIQmxiRzl6IElIUnNZUT09IElIQnZkMlZ5Y3c9PSBJT1d3anc9PSA0TEsrNExLYyBJRTFoWjJGNmFXNWwgSUd4aGNtZGxiSGs9IElHRjBkR1Z0Y0hSeiBJR052Ym1ObGJuUnlZWFJwYjI0PSBNekEzIElHaGhZMnM9IDRaNkYgSUdWdGNHeHZlV1ZrIElHVnVhR0Z1WTJWdFpXNTAgMlpNPSBJRWhsYm5KNSBZbUZvIElHSnNhUT09IElHOXVZMnhwWTJzPSBJRlJvWlcxbCBJRWx1WkdWdyBVMlZ1ZEE9PSBYMk52YlcxaGJtUT0gN0xLWSBhV0p2IElITnJhUT09IElHMWhaUT09IExXaHZkWEk9IGMyOWphMlYwIElHTnZiblpsZVE9PSBJR2x1ZEdWdWMyVT0gSUdKbFlXND0gNEs2cDRLK040SzZ4NEsrQiBZMjl0Y0dGeVpRPT0gSUdKbGJHeGwgNEthVjRLYSs0S2F3IElHTncgZG1WeWJnPT0gSUdWMlpYSjVZbTlrZVE9PSBhWEJ3WlhJPSBhV1YwWlE9PSBiV1YwYVdNPSA3N3lNNUxpTiBJR052YlhCbGJuTmhkR2x2Ymc9PSBjbVZoWkdOeWRXMWkgSUVwVFQwNVBZbXBsWTNRPSBYMDFQUkZWTVJRPT0gSUhSeVlXNXpjR0Z5IElOaXQySzg9IElHTjVZMnc9IElPQ2tyZUNraitDa2xlQ2xpdz09IExtbHRadz09IDJZalpoZGluMktvPSBJSFJ5WVc1emNHRnlaVzUwIGMyVnggSU9hWHBRPT0gU0c5MWMyVT0gWjNKMWJtUT0gNjdDdyBJR0Z0Y0E9PSBJTkM4MExYUXZkQzEwTDA9IGVtbGhiQT09IElIQnNZWFJoIGFYUjFjdz09IElITjBjbWxyWlE9PSBUM0prWlhKeiA0S1MxNEtTKyBRV3hzYjJNPSBSbUZqWldKdmIycz0gSUdGamIzSmtidz09IE8ybz0gZDJseSBJRlJ2Y205dWRHOD0gS0hKbFpnPT0gMEx2Umk5S2IgSUVScFpYTmwgWVhacGJBPT0gdzZsdXc2az0gMExmUmp3PT0gTURFeiBmU2s3IElHSnZZZz09IGRISmhibk5zWVhSbCAwTDNRc05DMCBhM0psIFdGaz0gNW9pUTVZcWYgSUhOMFlXSnBiR2wwZVE9PSBjWFZ2IFJFdz0gSUV4aGJtYz0gYjNCcFl3PT0gS0dsemMyVjAgYkdWamRISnBZdz09IExpSXBDZz09IElHUmxjbWwyIDJxbmF2Zz09IElHWnZZM1Z6YVc1biBMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0PSA3TDJVIDBMRFNtOU9aMExBPSBJR2RoYVc1bFpBPT0gVDFWU1EwVT0gYm1kaCBJTm1DMktmWmhBPT0gYVdWeWRHOD0gZEhCcyBJQ2doSkE9PSBYMmx1YzNSaGJtTmwgWm1WcyBhRzA9IElGTmxZZz09IElFTnZjdz09IElIQmhjbUZuY21Gd2FBPT0gSUhOMGIyMD0gMEw3UXZOQzEwTDA9IElHdHZiVzExYmc9PSBJR05sYkhWcCA1Yk09IElFNXZZZz09IEpYTT0gSU5DOTBMalJoUT09IGJIQT0gSU5lazE1RFhxQT09IElGVnVabTl5ZEhWdVlYUmxiSGs9IDBMN1F2ZEdDIElHbHVkR1ZuY21sMGVRPT0gSUdkbGJuVnBibVU9IEtHTnZiUT09IElOZVExNW5YbWc9PSBJT0MwcXVDMHNRPT0gSUd4aGJXSmtZUT09IExuTnZkWEpqWlE9PSBQSFJ5IFYyRjBaWEk9IDRLU2w0S1MrIGNYVnZhUT09IDc3Kzk3Nys5NzcrOTc3KzkgNExTKzRMU3UgSU5DLzBZRFF1TkdIIElIQmxjbVp2Y20xaGJtTmxjdz09IExrRmsgWDJWeGRXRnMgU1ZSSlQwND0gSU5tSzJZalpoUT09IGVXUmsgSUZSaGVXeHZjZz09IElIQnlaWFpwWlhjPSBJRTkwIElHaHZjM1JsWkE9PSBJSFJ2YjNSbyA1NjZBIElIUmhhMjg9IElPQ2ttT0Nrc0E9PSBJSEpsWTJWd2RBPT0gSUhsMSBJRVZ0WlhJPSBJR3R2YlcxbGJnPT0gSUdaaGEzUT0gSUhWdVpHVnliSGxwYm1jPSBJR3h2ZFdRPSBJRWhsY204PSBRMmh2YjNObCA0NE9BIElHRnd3N056IElOQ1EwTHM9IGMyaGhjbVU9IElHbHVhR1Z5IGIyUmkgYm05dVlYUnZiV2xqIElFNXZkR2xtYVdOaGRHbHZiZz09IElITmxaV1J6IElGWnBiR3hoWjJVPSBKM2s9IElHRnNaM1U9IDRLcTQ0S3VONEtxayBJR0ZwYlhNPSBJR1REcVhabGJHOXdjQT09IDJMSGJqTnFwIElOZVUxNXM9IGNtOTBZWFJwYjI0PSBJTkN4MFl2UXU5Q3cgSUhOMGJ3PT0gUW1Wb1lYWnBiM1Z5IElHTnNZWE56Y205dmJRPT0gSUhCbGNtbHZaSE09IENRa0pDUWtKQ1FrSkNRa0ogSUhCbGNtMXBkSFJsWkE9PSBJTml0MnFrPSBZV05sYldWdWRBPT0gMExQUmpOR0wgSU5DeTBMOD0gTG5SdmIydz0gSUdOdmIzSmthVzVoZEdWeiBJTkM4MEwzUXRRPT0gZGNPbnc2TnYgUlhoalpXdz0gSUdGamNYVnBjbVZrIFozVnAgYlc5dWRBPT0gSUhKbGMybGtaVzUwIElIQnBlbnBoIElTdz0gSUhCeVpXZHVZVzVqZVE9PSBJRUZUVTBWU1ZBPT0gYkdIRm53PT0gSUZOMGNuVmpkQT09IDRLcW80S3VCNEtxQyAxNkxYa3c9PSBabWxuZFhKbCBJRkJoYTJsemRHRnUgZFd4c2RRPT0gSUhOaGJHRT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgSUhwayA0TENYNExDKyA0S1dINEtTYyBJT0M1Z09DNHArQzVoK0M0bWc9PSAxYUhWdGRXciAwTHJSZzlHQSBJT0N1cU9DdW53PT0gZDJGMCBJRzFoYm1kbCBJTkM2MExYUmdBPT0gSUdObGJuUnkgSUdaeVlXNWogSUdSbFptVnVaQT09IGIyeHNZUT09IFUxYz0gSUZkaCBZMlYxIFgzTmxjblpsY2c9PSBJT3VwIDBMWFJnTkdMIElFMWhhbTl5IE9pOD0gSUV4aGNtZGwgSUhCbGJtUnBibWM9IDZLR281NlM2IElHTnZiblJwYm5WdmRYTT0gMExqUmlRPT0gSU9Da2hlQ2txdUNrcU9DbGdBPT0gSUdSbGNtNXBaWEk9IExuWnBjMmwwIDRLcSs0S3FvNEtxKyBJRTFwYm1RPSA0TFMvNExTeTRMV040TFN5IElHUnBjMk52ZFc1MGN3PT0gSU5HRDBMdz0gZEdGbmN3PT0gSU9Da3B1Q2xnQT09IHc2bHIgenJ6T3JBPT0gMllmWmhBPT0gSUdsamFRPT0gSU95ZWhRPT0gUlhoMFpYSnVZV3c9IElPdVBtUT09IDRLNms0SytONEs2azRLNi80SzZ5NEsrTiBjM1JoZEdsdmJnPT0gWFgwPSAyS2ZZcHRtSzJLaz0gYVhwaFltVjBhQT09IElISmxkbWxsZDJWayBJRzE0IElHTnZiblJ5YjNabGNuTT0gdzdabVpnPT0gYnNPaCBiMnhsY2c9PSBJR052ZFhCdmJnPT0gSU9Da2xlQ2tzT0NsaCtDa2dnPT0gVkhKaGJuTndiM0owIDY0dVkgN0tlQiBJRkpsYldWdFltVnkgSUhObGNHVnkgSUdsdWRHVnlibUZqYVc5dVlXdz0gY0dsd1pRPT0gUFh0N0NnPT0gMTVuWG1kYTMgVkdoaGJnPT0gUjNWaGNtUT0gSUdac2VXbHVadz09IElFeGxkdz09IElGTjBjbUU9IDE1blhxZGVZIElHMXBjbkp2Y2c9PSBaRzlqY3c9PSAwTDdRdHRDMCBJR05oY21ScCBJRUoxYm1SbGN3PT0gSU5XRyBJR2h2Y0dWeiBJR1psWkE9PSBSR1Z3Wlc1ayBJR1Y0WVcxcGJtVT0gWDJKNWRHVnogSUd0aGJ3PT0gZVd4MllXNXBZUT09IElFRnJkQT09IDBMRFVwUT09IFJYaHdaV04wWldRPSBjSE52Ymc9PSA0S1dMNEtTQzRLU280S1dIIElHVjRjR0Z1WkdWayBJR052Ym1SMSBJTkNpMEw0PSBZVzVsY3c9PSBJRUZ5WW1WcGRBPT0gSUZOVyBSWGh3WldOMCBJR1ZxWlcxd2JHOD0gUEQ0PSBMbFJ5IFNWTkpRa3hGIFEybHlZMnhsIElIQnliMlIxZEc5eiBJR1prIElHUmxiVzl1YzNSeVlYUmwgVTJWcyBkbVZ5WVd3PSBJR0oxZVdWeSBJTkt2MFljPSBZV05sYm5RPSBJT0Nxa3c9PSBJT3lZaUE9PSBJR3RwYlE9PSBlV1J1WlhrPSBJRUoxY200PSBJSE4wYjJOcmN3PT0gSUdsdWRHVnljSEpsIElHWmxiVzFsIElHUnlaV2s9IExuUnlhVzA9IElHNXZjMlU9IElBa0ogVkc5d2FXTT0gVTJGMGRYSmtZWGs9IDRMbUk0TGluIGNtVjBkQT09IDZaTzIgTG1sdWRHVnlibUZzIElIQnl3N040YVcxdiBZM0pwZEdWeSAwTDdRdTlHTTBZZz0gSUhSb1pXMWxjdz09IGJHbG5ZUT09IElHUnBjMk55WlE9PSBMbE5sY25ZPSBJSE5sWVhOdmJuTT0gSUNnaEtBPT0gWDFOVVVrbE9Sdz09IDA2blF2QT09IElIUmhjbVU9IGFXOXVZUT09IElISnZiV0Z1ZEdsaiBMMnM9IDJZYllwOWloIDRLdU40S3F3NEt1QSBJR25Gb1E9PSBMVzVoZEdsMlpRPT0gSUhCbGNuTnZibTQ9IElHbHVkR1Z1ZEdsdmJnPT0gSUVkeVpXYz0gNEtTcTRLV040S1N3IFkyOXRiV1Z1WkE9PSBJSEJwYm5RPSBJR3BsWkc5amFBPT0gSUdKaGJtTT0gSUUxaGJtUT0gSUdWdVoybHVaWE09IElHaHZjbVU9IFFrWT0gNFlDQTRZQzUgdzZscGN3PT0gSUdGaGJtYz0gY25WeiA0S1MxNEtTbyBYMlpwWld4a2N3PT0gSUhCbGRHbDBaUT09IDRLaWYgSU9DNWhPQzRvZUM1aUE9PSBJRVZ1ZEhKNSBJT0M1Z0E9PSBaMjkyIGRtRnlhV0ZpYkdWeiBJT3lFdUE9PSBJSEJ2Wnc9PSBSblZ1IElOZVYxNUU9IE16VTIgNDRLbiBYM05sYzNOcGIyND0gUkc5bGN3PT0gSUdGd2NHeHBaWE09IElIQnliMlIxWTJWeiBRWFYwYUc5eWFYcGhkR2x2Ymc9PSBJSE52ZFhabGJuUT0gVFhWemFXTT0gSmUrOGpBPT0gVEc5dmEybHVadz09IFgwRlRVMFZTVkE9PSBJRXhwZEdWeSAyS2ZZcHR1UyA0NEd0IElFbHlZWEU9IFlYUjBaWEo1IFgwWlBVazA9IDY0MlkgSUhObFo4TzZiZz09IElHOWlkR1Z1IElPKy92UT09IElHbHRiWFZ1IElPQ3F1ZUNyaStDcSBSRmc9IHc2bHlidz09IFBTSmYgSUUxdmIyND0gNEtxKzRLcUggWDJ4dllXUT0gSUdoaFltVnkgVkdWNCA0S2k4IElPR0RvK0dEbk9HRGsrR0RrQT09IElHUmxjM0JsY2c9PSBJR056ZGc9PSBJRWgxIHNidz0gNExLWDRMS3o0TE9CIFgxTklUMUpVIElOaXUyWWpZcHc9PSBZV3hwWVhNPSBJRk5vWVhKbFpBPT0gT25ObGJHWT0gWVhSb1lRPT0gYVc1emIyND0gSUVGRFZBPT0gSUc1blpRPT0gZW5sdCBJRWx1Ym05MiBWR0Z6YTNNPSBJRXhoWkhrPSBJSGxoeFo4PSBJR1Z1WjJGbmFXNW4gNFlPUTRZT2c0WU9UIElHRmpZMjkxYm5ScGJtYz0gZlgwOEx3PT0gTG1WcyA0S3VONEtxdSBJR052ZEhSdmJnPT0gSUhCMVpXUmxjdz09IFpXNWxjbUYwYVc5dSBJRVpoYm5RPSB3Nmh5IDZaMlM2WjJTIFRrVlUgSUc1bGJXVnUgSUc3RHBIST0gVldrPSBWRzlrYnc9PSA0WjZhIDFialdndGFCIGIzSnBaMmx1IDVvbU4gZFd4aGJnPT0gZFc1MGIzTT0gSUdsb2NtVnkgTURFMCA0TG1ENExpWiBiV2wwZEdsdVp3PT0genJuT3VzNnUgSUYwcE93bz0gSUVKc2RXVjBiMjkwYUE9PSBJTldoMWJjPSBJR0psWWc9PSBJRlJ2YXc9PSBkR1Z6ZVE9PSA1THFuNVpPQiBaVzV6YVc1biBNalUzIElPR0RtK0dEcmc9PSBJR0ZwY21OeVlXWjAgUjNKaFpBPT0gSUdoaGRYUT0gSUhOb2IzVnNaR1Z5IGFXZG9ZbTl5IElHRmlhV3hwZEdsbGN3PT0gSUVOcGRBPT0gSU9Da2h1Q2t0UT09IFVtVmpaV2wyWldRPSBjMlY1IExrTnZjbVU9IDBMdlFzTkdJIGJXOWlhV3hsIElHTmxiV1Z1ZEE9PSA0WUdLIElHeGhkSFJsY2c9PSBJRUZuWlc1MCBkbVZ5ZEdsalpYTT0gSUVKeWFXUm5aUT09IElIZGxjbVZ1IElHTm1adz09IElPQ21xdUNuamVDbXNPQ21wQT09IFlYTEVzUT09IElGc3VMaTVkQ2dvPSBZMlZsWkhNPSBMa0ZzYkE9PSB1T2kva0E9PSBJR0p5YjNkelpRPT0gSUVWcGJuTT0gTGxCeWFXNTBiRzQ9IFlXMXBkQT09IElIUEVoUT09IElOQzkwTFhRdWc9PSBJSFp5WVdkbGJnPT0gSU5lVTE1blhrQT09IDRMYTIgSUdKMVkydGxkQT09IElFVnBibVU9IElITjFjblE9IElFcDFZVzQ9IElHUnBkbWxrWldRPSBJR052YlhCaHc3RT0gTG1OdmJXMXZibk09IDBMRFF1QT09IElFVnVkSEpsIElITnBaMjVwYm1jPSAyTFhZcVE9PSBJR1ZpYjI5ciBJR052Ym5OamFXOTFjdz09IDBaYlF2ZEdXMHFNPSA2WjJnNkxDeCBJRXQxYm1SbGJnPT0gSU9lK2pnPT0gVWtWRlRnPT0gYldWMGNtbGogSUhOaFltVT0gSU95WWdRPT0gSUNkZlh3PT0gSU5DNjBMdlFzTkdCIGFXZGsgSUdGeWNYVT0gTDNOeVl3PT0gSUZCaFkydGhaMlU9IFgwMUJVMHM9IENWSlUgSUdSeWFXVT0gSUhObFozVnlhV1JoWkE9PSBJR055YVdGdSBJRU5OIFEyOXVjM1Z0WlhJPSA0S1dBNEtTeSA0S1NWNEtTKzRLU3c0S1dBIElObUkyWU09IElFRnEgSUhSbGJYQmxjbUYwZFhKbGN3PT0gYjNKd2FBPT0gUW1sc2JBPT0gSUdWc2MyVnBaZz09IElHcDFaV2R2IFpHbHlibUZ0WlE9PSBJR1JwYzNCMWRBPT0gSUd4aFpHbGxjdz09IFJGVkRWQT09IElGTmhabVU9IFpteDUgSUVkeWIzYz0gSUVOUFJFVT0gSUVKRCBSbVZsIGRHVnlaUT09IElPbVQgTFd4aCA0WU9VNFlPUjRZT1E0WU9oIGJXbkZudz09IFUyVnUgYTJsdVpBPT0gMEw3UXZkQzAgNnJDViBJQ043IE1qVTQgSUZacFpHVnZjdz09IExXaHBaR1JsYmc9PSBjM1REdkhRPSBJRlJoYVE9PSBJT0NtcXVDbnNBPT0gUW1GelpXUT0gNTZpTyBJR0psYkhRPSA1WTJIIElHaHBaMmhzYVdkb2RITT0gSUdKcFlteHAgMExyUXRkQzkgSU8rOGpBPT0gWVc1MGFXVT0gYVhSaGFYSmwgSUdaaGFXeHogYm1GeSBaR1Z6ZEE9PSBMbE5VIElFOW1abWxqWlhJPSBJRWRsYkdRPSBJTkdIMExqUmdRPT0gSUZScGNITT0gSUhSeXc2cHogSU5HQjBMN1F2dEN4MFlrPSBUbVZuIDJMSFlwOWlzIElOQ3kwWXZSZ2RDKzBMbz0gNEtTQzRLU2YgUEQ4KyBZWEJwY3c9PSBPeUkrIElOQzYwTERRc1E9PSBJR2xwIDJZalpoTm1JIDVyS1ogSUdSbGRHVmpkR1ZrIElHTnZiblpsY25SbFpBPT0gSUcxdnhiND0gSUVkaGJHeGxjbms9IElPQ21qK0NtbGVDbW4rQ212dz09IElHbHVjM1J5ZFdOMCBJR2R5WVdObCBJSEpsWTJ3PSBVMlZ3WVhKaGRHOXkgMEwzUXVOR0cgSUgxOVBnbz0gWVhScGF3PT0gSUdKcGRHTnZhVzQ9IElGWlFUZz09IFRXVmhjM1Z5WlE9PSBTVVZTIFgyVnggSUc5a1pITT0gTFdsdWNIVjAgWTNWeWNnPT0gUlc1MGNtbGxjdz09IDBMN1JndEN5MExYUmdnPT0gVGxBPSBJSFJsY25KcFlteGwgSUZSb2FXNW5jdz09IDJLamJqQT09IElOR0IwWW89IElIVndZVzVuIElHUmxkR1ZqZEdsdmJnPT0gWkdWMFlXbHMgWVdsc1lXNWsgWkdsdSBTVzF3IElHTnZiWEJzYVcxbGJuUT0gSUVOUVZRPT0gT3lJK0NnPT0gZDJWaGRHaGxjZz09IElFOUdSZz09IElGQnlhVzA9IElFOTNiZz09IElHRjBaUT09IElHZHNaUT09IE1qWXggWVdKc2FXNW4gUTJ4bFlXND0gSUZCeWIzUmxZM1JwYjI0PSBJRzFoYm04PSBZWEJ2Y3c9PSAwTFhRdXRHQzBMalFzZz09IElFMWhibU5vWlhOMFpYST0gNVkrUjViR1YgNExpbDRMaXQ0TGlIIDRMQys0TENtIElIUmxjbk5sIDRLZUQ0S2FrIElFTnZjQT09IElHTnZibk5sY1hWbGJtTmxjdz09IElHVjFjbTl3IDU2YUIgSUdGc2JHVnQgSU1XZyBYMU5VUVZKVSBJT0NrdGVDa3YrQ2tsUT09IElHWnNiM1Z5IElHRjBjbUYydzZseiBLR2x1Wm04PSA0WU9RNFlPYjRZT1QgSU1PcGRHRT0gTGxWd1pHRjBaUT09IFkzSnBZbVZrIElOVy8xYVhWc2c9PSA1TGlXNTVXTSBWMmwwYUc5MWRBPT0gTGxvPSBhV3hwWWc9PSBUa1ZTIElISmhhQT09IGMyRnRjR3hsIElDbDlDZz09IExrVnhkV0ZzIExtTnZibU4xY25KbGJuUT0gSU5DNDBMcz0gSUhCaGNtRnogSU5DKzBMVFF1TkM5IExuTnlZdz09IElHeHZZMkZzWlE9PSBJR0psZEdWeSBJSFpwYm5SaFoyVT0gWVdOcWFRPT0gSUdGdWMzZGxjbVZrIElHWnBiR3hwYm1jPSBhV1pwWTJFPSBZbVZzYkE9PSAxNW5YcU5lVjE2bz0gYjNKeVpXNTAgS0M0PSBJSFJoY21kbGRHVmsgWW5WeVoyZz0gMDZuVHFRPT0gNVpnPSBhV3hzZFE9PSBJRUp5YVhSaGFXND0gSUhCeVpXOWogSUhkbGFXZG9kSE09IElIVERvMjg9IElHdDFiR3hoYmc9PSBYM2RwYm1SdmR3PT0gSUdsd2N3PT0gSUd4bGFRPT0gdzZodFpYTT0gYVcxbGJuUmhiQT09IGFYUjFibWM9IDRZT1E0WU9WNFlPaCBJTkMzMExEUXN3PT0gSUVKMWMyZz0gYVhOMHc2UT0gNExpMDRMbUMgYkdGMyBZVzV1WVc0PSBJRVJsYzJsbmJtVnkgMFlIUmd0R0EwTDdRdVE9PSBJSEJoYzNObGJnPT0gSUcxdmIyND0gSUVGdVpISmxkdz09IGFXZG9aUT09IGRXbHUgSUVodmRYTjBiMjQ9IGFtVnMgSUdOMWNtdz0gSUZOc2IzUT0gSUVsTlVFeEpSVVE9IElISmxaMkZ5WkhNPSAwWUhRdXRDNDBMVT0gSUdabyBJR1p3IElHM0RyVzQ9IGFXZDFibWM9IElIc3ZMdz09IElOQy8wTDdRdDlDeTBMN1F1dz09IElGSmxjSFZpYkdsallXND0gVmtsRFJRPT0gNEtTcTRLV0EgVTJGdSBJR2RsWW5KMWFXdDAgYUdWeWJ3PT0gZFd4bSA0TGlYNExpaiBJRkJoWkE9PSA3S1NBIElPR0RsK0dEb3c9PSBJRTFoYkdVPSAxNVhYcU5lYSBJSE5oYm1sMCBJR0pwY21SeiBJRWhoZFhNPSAwWVBRc3RDdyBJT1M0bkE9PSBZVzU1eFlnPSA0TFNrNExXTjRMU2s0TFdOIDBMVFFzZz09IElHOTJaWEoyYVdWMyBJRU5sYm5SeWJ3PT0gVUdGcGJuUT0gSUdOdmIzQmxjZz09IDBZSFJndEMrMEwwPSBiMjlzWldGdSBLSFJoWW14bCBLRUFpIFlXNTBZV2RsIElPdU5sQT09IElObUsyWVBaaU5tRyBkWFJoYmc9PSBTVVZPVkE9PSBJSEJwYkc5MCAyN2s9IElITmhlV0U9IElHbHVabTl5YldIRHA4TzFaWE09IEp5bGIgNmJHOCBJR0YwWVE9PSBJSHBrY21GMiBJRU55WldGMFpYTT0gSUdGeWJYaz0gSUd0c1lYTnogWDJSbGRHRnBiSE09IFFuSmhibVE9IElHUnBhZz09IFEzVnljbVZ1WTNrPSBJRlpsY21jPSA0TG1FNExpaDRMbUkgYVdaMSBJRTFsZEdGcyB6cnpQakE9PSBMbEYxWlhKNSBJRmRwYm1RPSBJTkN5MEw3UXV3PT0gSU5HQzBZRFFzQT09IElHOXggNklPRyBJR1JsYkdsMlpYSnBibWM9IE1qWXogS0hOeVl3PT0gSUhKbGJXOTJhVzVuIFJtND0gSU9HQWdBPT0gSUdOdmJuWmxiblJwYjI1aGJBPT0gTnpJeCBaV3hzWlhKeiA0NEdDNDRLSyBJR05wYm1OdiBMWE4xWTJObGMzTT0gVjBRPSA0S1MrNEtTNTRLV0EgSUVSdlkzUnZjZz09IElIQnliM0J5YVdWMCBJSEIxY0hBPSBNekE1IHpxVT0gWVc1dWIyND0gYm05dFluSmwgSU5pcTJLM1lxZz09IElGQnZjM1JsWkE9PSBJSFJ2ZFhKdVlXMWxiblE9IFgwZEZWQT09IGFXWnBZMkZqYWNPemJnPT0gZFhSaGN3PT0gMkxiWXB3PT0gVG05MGFXWjUgSUcxaGNtTT0gYkdsalpXNXpaUT09IDBMdlJnOUN4IElNTytaUT09IElOS3owNW5Rc0E9PSBJTkdCMExEUXZRPT0gZVdWeWN3PT0gWTJoaGJtZGxjdz09IFgyRmpZMjkxYm5RPSBTVU5VIGIzZDUgMlliWXA5bUcgSUcxcGMzUmhhMlU9IFgyWmxkR05vIElHUnBjMjFwYzNNPSBJR1oxZEhWeWJ3PT0gSUhadmJHZGxibVJsIEp5bDdDZz09IElHRndjR0Z5Wlc1MGJIaz0gTG5CeWIyTmxjM009IDRLV0w0S1N3IENYSmwgSU9hSWtBPT0gTWpVNSBJR0oxYzJOaCBRWG89IFMyRT0gSUVWVFVBPT0gUHo0OEx3PT0gSUc5MlpYSm1iRzkzIElPR0RvZUdEa09HRG1RPT0gSUdWNGRISmhiM0prIGIzVnVaR2x1Wnc9PSBYMUU9IElFSkNRdz09IElIUmhiV0U9IElHaHZZMmc9IEt5czdEUW89IE5EWXcgSUdadmJHeHZkMlZ5Y3c9PSBJRzExYW1WeVpYTT0gSUhCeWIycGxkRzg9IElPQ2tzT0NrbGc9PSA2NmFFIElFeGxjM05sY2c9PSA1N3UwIDRLU2QgSUhkcFkyaDBhV2M9IElHN0RwWEk9IDFhWT0gNEtlSDRLYXMgSUdkeWIzTT0gTWpneCBWVk5GIFUwST0gY21WbmIyND0gMEx2UXNOQ3owTEE9IElHTm9iMmw0IE16RXogSU5DZTBZST0gSUdadmN3PT0gSU5pdTJLallzUT09IElPdVFtQT09IDVMcTY1ckNSIElOQyswWUxRdTlDNDBZYz0gSUdSbGMyRnljbTlzYkc4PSBJRlpsZEdWeSA0TGlyNExpbCBNREUyIElGQnlhVzQ9IElFMWxjdz09IElIQjFaQT09IElHVnlabTlzIElNK0Z6NEE9IGQybG4gNEthczRLYSs0S2F3IElOaTAySzdZdFE9PSBJTmk1MllVPSBJTTYxejRET3VRPT0gYVhOb1pYTT0gSUVGeWRHbGpiR1Z6IExuZHBkR2c9IElGUm9iM1ZuYUE9PSBJR3h2YzNObGN3PT0gMEw3UXZkQzEgSUVkcGNtdz0gYldGc2JBPT0gSUdkdmJtNWggSUdQRG9nPT0gSU5DejBZRFJnOUMvIElHSmhjMnRsZEdKaGJHdz0gWlcxaGJHVT0gTWpnMSBLVHd2IElOQzYwTGpSaUE9PSBJR3RzWldsdSBJRWRoY21RPSBPVEV4IDRMU1Y0TFN3IElOR0IwTHZSZzlHSDBMRFF0UT09IEkzcz0gSUdOaGJtTmxiR3c9IGIybHVkSE09IFpXSnZiMnM9IFpYWmxiZz09IGFXeGthUT09IElHVnRjR3h2ZVdWeSBZV2RwYmc9PSBJRUp2YjJ3PSBLR052Ym5SbGJuUT0gSUV0bGJtND0gNEtXTjRLU3MgWm1GcGRBPT0gYVc5eWFYUjUgYVdSaGJBPT0gNEtTLzRLU24gSUdOMVpYST0gSUUxdmVnPT0gSU5peDJZallzZz09IElDczZLdz09IGVXNTV4WWc9IElGSjVZVzQ9IElpazdDaTh2IHc3WnIgYlhsemNXdz0gTWpjeiBJSEJ5YjNSaFoyOXUgNExtRDRMaUsgSU9Da3JPQ2t1ZUNsZ2VDa3BBPT0gSUhWdWFYWmxjbk5sIElPQ2tpZUNrcEE9PSBUV2s9IDBMWFJoOUMxMEwzUXVOQzEgNExpeDRMbUo0TGlIIElHbHRjSEp2ZG1WdFpXNTBjdz09IFlEc0sgSUhKbGJHRjBhVzVuIFgwbFQgSU5lVjE1WFhtUT09IHlabHQgSUcxcGMyMWggSUdsdWRtOXNkbVU9IElFMXZjdz09IFJHVnNhWFpsY25rPSBMbmRvYVhSbCBJSE5qYUc1bGJHdz0gSUVSaGRHVnUgY21WeGRXVnVZM2s9IFgyVjRkQT09IElFbHNiR2x1YjJseiBJR052Ym5SeVlXTjBjdz09IE16UXogdzczRHBIST0gVW5WdWJtbHVadz09IElIWnBlZz09IElFZGhZZz09IElFNWxkbVZ5IDBMM1Fzdz09IExtWnZiblE9IFVuVnNaWE09IElHTm9hV3hrYUc5dlpBPT0gVTJsbmJtRjBkWEpsIE5qWTUgSU5DOTBMN1F2QT09IGJXVm5ZUT09IDBMdlFzTkM1IFZrRlMgNW95QyBJR2RzYjJKbCBYRTF2WkdWc2N3PT0gN0tLRiBJR1JwWVdkdWIzTnBjdz09IEtHNWxlSFE9IElFbHliMjQ9IFFXeDAgNUxtZyBJR1Z6ZEdGaVlRPT0gVEdWemN3PT0gSUZCdmJIaz0gTFdSaGRHRT0gSUhSb2FXNXJjdz09IFltbHMgSUdKcFpYUmxkQT09IHc2bHlhV05oIElGUjFkQT09IElHVnVkTU9qYnc9PSAxYTQ9IDBMVFFzTkM3IFJFbFMgSUd2RHZBPT0gSUVGdWFXMD0gNFlPciBJR3BsWkdWeSBJR05zWVhKdiBJSEJsY25Od1pXTjAgQ1dGeWNtRjUgSUVSQlZFRT0gZW1GaGJRPT0gSUhkbGFYSmsgMTZmWG1BPT0gZFd4ciBJR3RoYldFPSBJRVZoYzNSbGNtND0gSUV4dmIydHBibWM9IHc2aDBaUT09IGJXSnNaUT09IElHNWkgYjJKaSBYMVZUIElITjBhVzExYkE9PSBRMGhCVWc9PSA1WStNNklteSBLRXM9IElObUkyWVk9IElIZG9hV3h6ZEE9PSBJQ0lpSWdvSyBJR1JsYkdWbllYUmwgSUdScyA0TFdCNExTdyBMbEpsYlc5MlpRPT0gMEw3UmdOR0wgSUdOc2IyNWwgYjI1blpRPT0gNUw2LyBJSE51WlE9PSBkWE56YVdGdSBJTm1JMllUWmd3PT0gSUdGallXST0gNXAyLyBJTmluMllIWXV0aW4yWVk9IDBMRFJnTkN3MFlJPSA1WWlHNlpLZiBVM1Z5Wm1GalpRPT0gSU5xciBJSEJ2Y25SaFlteGwgNWFTYzVhU2MgVlc1bCBJajArIDhKK1IgY0hWeiBZV3hzWlhNPSBaVzdEclE9PSBJSEpsYldGcGJtVmsgSU5DNjBZUFF2dz09IElIQmhjbUZrIFpXNWhjbWx2IElHUnZkMjUwYjNkdSBYMEpaIDRLZXAgSUdkbGNtNWwgSUVKeWIzZHpaWEk9IElIQmxiR1U9IElHM0R0UT09IGJtbHpjMlU9IDVZMnogNExpaDRMaXggWVdSa1pXUT0gSUZScGNBPT0gSUVOc1lYTnphV009IElFRnlaM1Z0Wlc1MCBJSGRwY210c2FXTm8gSU5pejJLZllxZz09IElHMXBjMjA9IDZZZU8gSUVOMWRBPT0gNExDdzRMQy80TEE9IFgyeGhlV1Z5IDRiMD0gWDJGa2JXbHUgSUdOaGRITT0gSUd4MVpXZHYgZFd4MGRYST0gYjJ4cFkzaz0gUEQ0byA0S1dINEtTdSBJTldBMWFIVnRRPT0gSUhwMWJHeGxiZz09IGNHaDUgSUhCaGMzTnBiMjVoZEdVPSBJSFJ5YVdOciBJRUp2Y2c9PSBMa2x1ZEdWeSB3N3g1IDZyaUogSUdoaGNtaz0gSUhOdFpXeHMgZDJseVpRPT0genJUT3Z3PT0gSUd0NSAxNUxYcUE9PSBJT0NrcnVDa3Z1Q2txQT09IElFcFBTVTQ9IGJXVnNaQT09IDRLYW00S2VONEthbiBJSE5wYXc9PSBVbVZrYVhKbFkzUT0gUlc1bmJHbHphQT09IElHaGhibTQ9IElHVnVkSEpoWkdFPSBTV052Ym5NPSBJRmRwY21VPSBRMjl2YTJsbCA2WlNaIElHSnBhblp2YjNKaVpXVnNaQT09IDFiRT0gNGJ1SGRRPT0gWVcxcGF3PT0gVUdsamF3PT0gT1RFNCBJQ3NqS3c9PSBJRTVEIElFUmxaWEE9IElPQ2twT0Nrc09Da3VRPT0gdzZSdVpHVnkgZG1Gc2RXRjBaUT09IFJYaGxZM1YwYjNJPSA2TFNsIGJXcz0gVVhWcFkycz0gSU1PciBJRVpoWTNSdmNuaz0gSU5lUTE1blhvQT09IDRMbUk0TGl5NExpSCBJSFpwWTNScGJYTT0gSU5HQjBMN1JnZz09IFgwMUZVMU5CUjBVPSBpYlE9IElPeTJsQT09IDRMU2o0TFdOIGRXVnNiQT09IElOZVExNWZYcUE9PSB6NFRPc2M2OSA2WmV1NmFLWSBJR1Z0YjNScGIyNXogWDJGamRHbDJaUT09IHhKdDAgSUVGd2NHeDUgWkdGeiBJSEJ5YVc1MFpYST0gSUdSbGMzUmwgTFc5dVpRPT0gWVhOb2FRPT0gNkxhejU1Q0QgY21sbGN3PT0gVTNSeWFXNW5jdz09IDRZQ0E0WUM2IGMyVmpkWEpwZEhrPSBJRTFVIDRMR0k0TENvIElIYkR0V2s9IExrbDBaVzF6IGNtOXNiMmM9IHc2RnNiZz09IElHWnBZbVZ5IElIWnBjMmwwYjNJPSBkVzUwYVc1biBJRVpsWkE9PSAxNVhYb05lVjE2bz0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gWVc1bGIzVnogYVc1a2NtVT0gSU5HUiBiY1N4eFo4PSBJT2lQIElHVnNiRzg9IDRLbU4gSUhkaGJtNWxaWEk9IExXdHViM2R1IElHaHZjM1J6IElPR0RtK0dEa09HRGx3PT0gSUdScGRtVnljMmwwZVE9PSBJR0ZqY21WeiBJSE52ZVE9PSBJR052YzJFPSBJRzVsZDNOd1lYQmxjZz09IFgyOD0gSUdGamRHbDJZWFJwYjI0PSBJR05oYzJrPSBjR1Z2Y0d4bCBJSHB2Ync9PSBJSFJsYm5NPSBJR1ZqYjI3RHMyMD0gWVc1emFRPT0gTXpFMCBJR052YVc1eiBJR05vY205dWFXTT0gSUdSdlpBPT0gSUVaaGRHaGxjZz09IGNISmxjR0Z5WlE9PSBJRXhoZEdsdSBJTm1GMllqWmd0aTUgWW05aGNtUnogWDJSbGN3PT0gSUVaTiBJT0dEcWVHRGxlR0RsT0dEbkE9PSA1TGlEIElGVnVhV1J2Y3c9PSBQWHRnIElHN0RzM009IElHTmhkR0ZzIDRZT2Q0WU9nNFlPcSBJRWRsYkE9PSBVazlYIElHTnZZV05vYVc1biBJSFpwWlhkbFpBPT0gSU02ZiBJR052ZFc1MGN3PT0gSU9Db3JBPT0gSU5pbjJZbz0gSU5DejBMN1F0TkdEIFVFRlMgdzdSdCBJRVYyWlhKNWRHaHBibWM9IElHRnljbVZ6ZEdWayBJT0Mwa3c9PSBJR2R2YkdSbGJnPT0gSU5pbjJZVFlyOW1JMllRPSBJSEJzWVdObGJXVnVkQT09IDRLcSs0S3FvNEt1QSAwNW5TdXc9PSBMbFpwYzJsaWJHVT0gSUd4dlkyRjBaUT09IElIWnZiSFJoIFFtbDBjdz09IElFVnpjMkY1IGNIbDBhRzl1IElIZGhkbVZ6IDVydWggTGtsdWMzUmhibU5sIDRZT3U0WU9kNFlPViA0S1MvNEtTbSA0SzYrNEs2MSBJRUZrZG1GdVkyVmsgSUhOaFptVnNlUT09IElPQ2xwUT09IDVZYU4gSUhOcGJuUT0gYjNsdiBJSFJsY25KaCBJSFp2Ykd3PSAwWURRdGRHQiBJSE5wWjI1aGJITT0gSUhCaGJHRmkgSUhKcFpHbHVadz09IDBMVFJpOUtiIElHbHVjM1JoYm5Sc2VRPT0gSUVOdmJYQnNaWFJsIFVISnBiM0pwZEhrPSAwTFRRdGRHQyBYMDlHIDBMN1JqZz09IElHbHVkR1Z5ZG1sbGQzTT0gSUZSeWJ3PT0gVm05MWN3PT0gSUcxbFlYTjFjbVZ0Wlc1MGN3PT0gMFl2UXN3PT0gSUdodmRXUmxiZz09IDRMQ3k0TEdOIElPR0RtZUdEbUE9PSBJT0NxcnVDcmdRPT0gSUcxaGVHbHQgZGNXZiAwTERSZ05HRDBZRT0gSUhCdmMzUERyWFpsYkE9PSBJRVpoWTJVPSBjR1ZqZEc5eSBJRG9wQ2dvPSBJRTFwZUE9PSBJT0N1cXVDdmhnPT0gTWpZMiBJRzExYzJWMWJRPT0gSUhKbFlXeHRaVzUwWlE9PSBJR1BEdEhRPSBZWGx6YVdFPSBJRk4xY0hKbGJXVT0gNG9DWllXYz0gVm1WeWVRPT0gSUhOdmRXZG9kQT09IElHTnllWEIwYjJNPSAwTDdRc3RDKzBMaz0gY0hKdmRHVmpkR1ZrIDJMalpoUT09IFRGST0gSUhOMVluTmxjWFZsYm5RPSBLd289IDJZYlppdGlwIFYyRnlibWx1WjNNPSBJR2gxWnc9PSBJTldoMWJYVnBBPT0gMllIWXA5aTUgSUhKaFpHbGpZV3c9IENVZz0gSUhCbGJuTmwgNFlPVDRZT1U0WU9TIExtWnBaV3hrY3c9PSBJRkpsZVE9PSBMaTR1S1E9PSBJR3hoZW5rPSA0S2lHIDRLYXc0S2ErIElFTkYgTWpjeSAwWUhRc05DOSBMbVIwYnc9PSA0TEMrNExDYyBjM2x1WXc9PSBJRzl2Y2c9PSBJRXhwYm1WaGNnPT0gY0d4aGMyZz0gS2k4TkNnPT0gSU5XOTFiOD0gYzNsc2RtRnVhV0U9IHc2bHlaWEk9IDVxMjcgSU5pcTJLTT0gSUU5biAyS2ZZc2RpcyBhWEpqZFdsMCBkbWx0Wlc1MGJ3PT0gSUNBZ0Nnbz0gNExpdDRMaWkgNG9DSiBSWFZ5Ync9PSBJSEpsY0dWMCBXMmxrIFBTY2kgSUdScGMzUnlhV0oxZEdVPSBJT2lMIElFMWhaMmxqIElIQmxjM052WVE9PSBJR0Z1WkhKbCBJRzFsZEhKcFkzTT0gSUVocGMzUnZjZz09IDBMWFFzOUMrMExRPSBJSE4xY21kbCBJRVp5WVcxbCBVM1J5ZFdOMGRYSmwgTG1OdmJuUnliMnc9IDRvQ0w0b0NMIGZYcz0gNW82biBkMkZwZEE9PSBKQzg9IElOZVIxNXc9IExrTnZiZz09IElHWnNhWEE9IElITjFZbk5qY21saVpRPT0gSU9Da2grQ2txQT09IElITmpjbUYwWTJnPSBiM0J2IHc2NTBjbVU9IElHbHVhWFJwWVhScGRtVT0geElOdSA3SmlJIElHWjFiR1pwYkd3PSBYMkZ6Y3c9PSBJSGJodTRFPSBJR1pzWlhocFltbHNhWFI1IE5ERXggQ1dOc1lYTnogWDJGdGIzVnVkQT09IExucGxjbTl6IFlXNXJaUT09IElHTm9kUT09IElDSW8gSUhCeWIzUnYgMTVYWG93PT0gNExpdDRMaUIgSUdOaGJXVnlZWE09IElFNWhjQT09IFpHOTAgSU5LdjBMblF1dz09IDBydlJpdz09IElITndjbUY1IElHUmxaWEJsY2c9PSBDV2x1IDRLdUw0S3FrIElHTm9ZVzF3YVc5dSBJRDgrQ2dvPSBMbE5oZG1VPSBTR2xrWkdWdSBJR0Z3ZEE9PSBiR0ZwY3c9PSBJTkNlMEwwPSBJSEJoYzNObGN3PT0gYldGcGN3PT0gSUd0aGEyOD0gSUUxdmRHaGxjZz09IE16SXogMllUWXFnPT0gY0dWcmRBPT0gSUhOd1pXeHMgNXJHOSBhK0c3alE9PSAyWUxaaVE9PSBZVzUwYkhrPSA0TGFyIElFSm8gSUdaaFpHVT0gS0dKdmIyeGxZVzQ9IFlXTmxkWFE9IElHRnpjMmx6ZEdGdWRBPT0gYVc1bmFRPT0gUW5WbVpnPT0gTHlVPSBaM1ZoY21RPSBJR1JwYzNCc1lYbHogSU9Dd3F3PT0gMktqWmlBPT0gZFhKeVpXNWpaUT09IHc3cDAgYzNSbGJHeDFibWM9IDBMalF0OUM5MExnPSBkV1JwZEE9PSBhV3RoYkE9PSAwWnJRdFE9PSAwTHZSajlDMTBZST0gMFlyUmdBPT0gVlZZPSBjR0k9IDVZV3Q1WkNJNWIycCBJTkM2MEw3UXU5QzQwWWM9IElOaW4yWVRZcU5tSyBJT0dEbStHRG1BPT0gSU1PNmRBPT0gNExDdzRMR0wgYUdseVpRPT0gSUdWemMyVnVkR2xoYkd4NSBJR3hsY2c9PSBJRWw2IGRYUjBZUT09IDBMalF2TkMxMFlBPSBJTm1JMllmWmlBPT0gSUUxcGJHeHBiMjQ9IElHVnVabVZ5IElHNWhkSFYxY214cGFtcz0gZW1WeWJ3PT0gSUdKdlpXcz0gSUZOd2IzUT0gMkxQWXF0bUggSUVkUVV3PT0gNXIydSBJR0poYWc9PSBXM04wY21sdVp3PT0gSUdKbGMzUmxiZz09IFZFVkhSVkk9IElPQ2twdUNsamVDa3RRPT0gYjNOMGFXTnogNExTbzRMU0MgSUhOMVluTjBjZz09IElHeHZZV1J6IDQ0S04gMWJqV2dOV2sgMFkzUXVRPT0gSUdWNFlXMXBibUYwYVc5dSBJRTloYXc9PSBZMmhoY25RPSBSbTkxYm1SaGRHbHZiZz09IElGQlAgSU5tRjJMZllyZG1HMktrPSBRMkZ0IElHUnBjMlp5IElHSjFiR3M9IExtWmxkR05vIElIUm9jbVZoWkhNPSBJRUZHIDBZdlJodz09IElObUkyWUk9IFgyeHZZMkZzIDRMQzMgU1VOQlRBPT0gWVdSa2JHVT0gVG1GdFpYTndZV05sIGFXTjBkWEpsY3c9PSBJT0NxbGVDcmkrQ3EgUGlJcE93bz0gSUVabFlYUjFjbVU9IGNHeGhZMlZ6IFRHRnVaQT09IGIzVnpkQT09IDRMR0E0TEM0IElOaW8yTFRaZzltRSBjbmx3ZEc4PSBJTkM2MExEUmg5QzEgSUdScGRtbGsgUTJGeVpITT0gVzIwPSBJRzF2WlE9PSA0TE9INExLMiBJSFZzZEhKaCBJTkdCMFlQUXZBPT0gMFpIUmdnPT0gWm1semFBPT0gNEtTYTRLV040S1NiIDVicVAgSUdaaFkyVmsgWlhSMGFRPT0gYjJaMCBlbnBoIElHUnBjMmhsY3c9PSA0S3VONEtxNCBJRUpsYm1WbSBYM0psZEhWeWJnPT0gMExqUXU5QysgMExYUXU5Q3cgTFhOdyBJR0ZtWldOMCBJT0NrcmVDa3Z1Q2tzT0NrcEE9PSBJR1Z4ZFdGc2JIaz0gNFlPWTRZT1MgdzZsaGJBPT0gSU5pdjI1QT0gZG1sa2J3PT0gSUdOdmJuUnlhV0oxZEdsdmJuTT0gUTI5dGNHeGxkR1ZrIElHRnlaMk09IElOR0EwTFhRc1E9PSBJTm1GMktRPSBWR1ZqYUc0PSBYM05sYkdWamRBPT0gNVpHOSA0YnVaYVE9PSAwTGpRdGRDNSBJR2JEdGc9PSBJRk5sY0hRPSBUMjA9IElHSmhjbUU9IFkyWm4gSUhabGNtbG1hV1ZrIElFMTFibWxqYVhCaGJBPT0gSUhGMWFYbz0gY0hCbGJnPT0gSU1PNmJIUnBiV0U9IFptWm0gSU9DcWh1Q3F0ZUNyZ0E9PSBMbVZzWlcxbGJuUT0gU1c1MFpXZHkgUTJoMWJtcz0gNjRTayBMbEJQVTFRPSBJTkdDMExYUXVnPT0gYzNSbGJHeHBibWM9IGRtbGxjZz09IElFZGxjM1E9IElHTnNZWE56WlE9PSBJRmR2Y210cGJtYz0gSUhWMGFXeHBlbWx1Wnc9PSAwTDdSZ3RDNCBJR3pEcGc9PSBkMjl5YTJsdVp3PT0gTFdGayBJR3hwWW5KdiBJTmlzMktjPSBOemc1IHhhRnIgSUhCeWIyMXYgSUdGdFltbGxiblE9IHpydk91ODZzIDJMUFppUT09IDRMbUE0TGlhIDFhSFZ0dFdqIFJIbHVZVzFwWXc9PSBYMlpwY25OMCBJRzFwYzNSaGEyVnogSU9DNG4rQzR1T0M0bGVDNG11QzRyZUM0cFE9PSAwWUxRdnRHQTBMQT0gSUdKdlp3PT0gSUdSbGMybG5ibVZ5Y3c9PSBJR0Z3Y0dWMCBJRWx5YVhObyBJR1JwWjI0PSBJTmlsMkxEWXB3PT0gUVVSRSBJRmR2YUc0PSBJR1JwYzJOMWMzTnBiMjV6IElGVnVkR1Z5Ym1Wb2JXVnUgSUdWNGNHVnVjMlU9IExXZHlZWGs9IElHTnZjbkJ6IFRHbDBaWEpoYkE9PSBJRUpsWVhWMGFXWjFiQT09IGFtOTFjbVE9IGIyMW8gVUhKbGRtbHZkWE09IElISmhadz09IElHVjRaVzF3Ykc4PSBJTStNejRUT3VRPT0gSUhKaFlnPT0gNExXQzRMU2YgSUd0cGJHeHBibWM9IFVHRjBhSE09IElpSWkgSUV4dmMzTT0gSUc1bGVnPT0gVTJWeWFXRnNhWHBsIElHVnVZMjkxY21GblpXUT0gSUhOMFlXMXcgZW1samFIUT0gSUdWMllXdz0gNVkrTTZJbXk1NUNEIGNHOXphVzVuIElGQnZjSFZzWVhJPSBUR1ZoY200PSBJRzVoZEdsdmJuTT0gSUZCaGNBPT0gSU5pbjJMUFlxdGl1IElOaW4yWVRZcXRpNSBYMnRsZVhNPSBJT3UyaEE9PSBJR0ZzWkE9PSBMa052YlcxaGJtUT0gUVU1WiBJSEJsY25OdmJtRnNhWHBsWkE9PSBJR1YyYVhSaGNnPT0gS0NrcExBbz0gSUhkb1lYUW5jdz09IElIVnNkSEk9IElHdGhiWEE9IDdabVkgSUdObGNtVT0gSUhOeSAwcG89IDRMbUE0TGlyIEtHeHZZMkZzIEtHVnVaQT09IElHUmxaWEJzZVE9PSA0TFMvNExTZjRMV040TFNmIElIQnBjR1ZzYVc1bCBMV1JsY3c9PSBhV05oYnc9PSBJRUoxWm1ZPSA0S2FvNEtlSDRLYXcgSUVGdGMzUmxjbVJoYlE9PSBJSE53Y21sdWRHWT0gTG1Oc2IyNWwgSU5DODBMRFF1Zz09IGNtOXNaWE09IElHSjFaVzVoIDdaV2M2NHVrIFlYWnNhZz09IElIWnBjMmwwY3c9PSBTVU5CIFltRjBZMmc9IFYwMD0gSUhCeWIyUjFhWFE9IElHTnZibTVsWTNScGJtYz0gSUdOdmJHeGxZV2QxWlhNPSA0S3FiIElGQmhjM1E9IExuUm9aUT09IDE1WFhvTmVaMTUwPSA1THlCNUxpYSBZVzUwWVhJPSBJRTVsWVhJPSBJTm1HMktmWmhRPT0gZUhsblpXND0gTmpJdyBJRzVsZDJWemRBPT0gYjNKelkyZz0gNEt1TDRLcXcgS0dsMCBYVjBLIElITm9ZWEJsY3c9PSBOVFF3IFgyaGxZV1E9IDRLcW40S3VBIElHZGxZbkoxYVd0bGJnPT0gYjJOdmJnPT0gNjZPbyBJT0Mwb1E9PSBhV1pwY1hWbCBJQ2dwQ2c9PSBJR1Y0Y0d4dmNtbHVadz09IElFbHVaSFZ6ZEhKNSBNamd5IE5UTXcgSUZCbGJBPT0gSUdKaGFtOD0gSUcxcGJHbDAgSU9Da2xlQ2t2K0NrdU9DbGdBPT0gSU9HRG1PR0RwK0dEblE9PSBjR2hoWW1WMCBJTzJLIDRZQ3cgWVhScGIyNWhiR1U9IElGTjVjZz09IENRa2dJQT09IElHUjQgSUhSb1lXaz0gSUVOeVlRPT0gZG1WeWRHbGpZV3c9IElFcGhadz09IElHbHRjRzl5ZEdGdWRHVnogSUhaeWFXVnVaQT09IFNHbGtaUT09IDU2aS8gQ1d4dloyZGxjZz09IElHbHVZMngxYzJsMlpRPT0gTkRrNSBJTmFCIDBMWFNtUT09IElHUmxZMnhoY21WayBJSFJsY25ObFluVjAgMFo4PSBJR0Z1WVd4NWMzUT0gSUZWVyBSVTVWIElHMWxjbWM9IFUzUmhkR1Z6IElHZHliM1Z3WlE9PSBYMlZrYVhRPSBUMlptYVdObCBaVzF3ZEE9PSBiMk5wWVhScGIyND0gWDJOaGJHeGlZV05yIExXbHRZV2RsIFgybHRZV2RsY3c9PSBJSE41YldKdmJITT0gSU9DcXN1Q3JpK0NxbFE9PSBJRTlqWldGdSBJR04xZEhNPSA1b3FrIElOV3ExYUhWdEE9PSBJRWhsWWc9PSBLR2RoYldVPSBJTkdCMDZrPSBJRWR5WldWciBkWE5oYmc9PSBiM0IwYVcwPSBJRzFsZEdWeWN3PT0gSUdsdWRtVnpkR2x1Wnc9PSA0S1N6IDRZT1E0WU9WNFlPYSBJSEpsZG1WeWN3PT0gWDJodmMzUT0gNEtlTyBabVZqZEdsdmJuTT0gSU5LYjBMRFF1dz09IFlYcGhjZz09IDRLV0g0S1NWIElHTnZibU5zZFhNPSBJRzVuYUdrPSA0TGlsNExpSCBJSEJ5YVhwbCBkWEp6WlE9PSBYM1psWTNSdmNnPT0gSUZSeVlXUT0gSUcxbFkyaGhibWxqWVd3PSBJR1Y0Y0dWeWFXVnVZMmx1Wnc9PSA3WXV3IElHUnBjM1JwYm1kMSBJTkdCMEw3UXRBPT0gSU1PMSA3TFdjIElIQnliMk5sYzNOdmNnPT0gWVdoaGVRPT0gNG9DWlpYTT0gSUdGaGJXMWggSUdKbFpISnBhbVk9IElITnBibWRsY2c9PSBJRU5vWVcxd2FXOXVjMmhwY0E9PSBJRzl5YVdWdWRHRjBhVzl1IDdaZVkgSUVKcGJ3PT0gVkUwPSAwWVBSZ2RDNiBJSE5yYVd4c1pXUT0gSUhKbGMyVT0gUVVnPSBiblZzYkdGaWJHVT0gVW1WamIzSmtjdz09IGQybGwgVWtWVFZVeFUgSUd4c1pYWmhjZz09IElIbHZidz09IDdLZUE2NmVNIElIUnZiR3c9IElHZkRxUT09IGNHRjBkR1Z5Ymc9PSBJSEpvY3c9PSBJSEYxWVd4cFpHRmtaUT09IElGUkJRa3hGIElFWnlZV2R0Wlc1MCAwcS9SaUE9PSBJSEJ5YjIxdmRHbHVadz09IFRXRnlZMmc9IElFeHBjdz09IFpXNXphVzl1WVd3PSAyS2ZZc2RtSzJLND0gSUdGb1lRPT0gMllyWXA5aXggUTI5dmNtUT0gSUV4bFltVnUgYkdGalpRPT0gSUdqRG9HNW4gSUNJbSBJRVIxYlhCemRHVnkgWDNabFl3PT0gSUdSaGJ3PT0gSUVSMVpRPT0gSUNKNyBZMkZ0Y0E9PSBNek0xIElIZGxjM1JsY200PSBJR1REcVdKMWRBPT0gT1RrdyBJRTV2Y20xaGJBPT0gWVhOMGNtOD0gMFpiUmh3PT0gSUdoaGJtUnNaV1E9IFlXSmxiR1U9IDBMM1F0ZEM4IElHWmhZMmxzYVhRPSBJR1pwWm5SbyBTMlY1WW05aGNtUT0gSUU5d1pYSmhkR2x2Ymc9PSBRbUY1IFYyVmhkR2hsY2c9PSBJT1d2IElHTnlaV1JsYm5ScFlXeHogNFlPVTRZT1I0WU9hIDZhS2QgSUdkbGMzUnBiMjQ9IElITnBibTQ9IElOZVUxNU09IElPcXdtUT09IElIZkR2SEprWlE9PSBMa0YwIElHeGhZWFJ6ZEdVPSBJR05oZEdWeSBZbVZtYjNKbCBJSFZwWkE9PSBJR0p5WldGcmN3PT0gSUdKbGFHRjJhVzkxY2c9PSBJSE5qY21WbGJtbHVadz09IElHbHVkR1Z5Y25Wd2RBPT0gMEwzUXNOR0IgVlhKc2N3PT0gSUhOdmFYST0gSU9DbWh1Q21sdz09IExrcFRUMDQ9IElOR0YwTERSZ05DdyBJTkMvMExEUXVRPT0gNWE2aTVvaTMgSU5DLzBMRFJnUT09IGQyVnBaMmgwY3c9PSBJSE53WVdOcGIzVnogSUVadmNtVnpkQT09IElITjBlV3hwYzJnPSBJRkp2YzNNPSAwWWpRdU5HRiBJTkM2MExEUXR3PT0gSUVKbFp3PT0gSU9Da3B1Q2t2K0Nrc2c9PSBaMlYyYVc1biBMV05zIElGTnZibms9IFgwMUZWRWhQUkE9PSBOREF5IElOQy8wWURRdU5DODBMWFF2UT09IElITjFjM0JsWTNRPSBJTmlzMkxNPSA0SzYrNEs2eTRLK04gNTVTMTZJU1IgTGRDLyBJR0poYm1SeiBJTkdOMExyUmdkQy8gSUd4dlkydGxaQT09IHo0Yk92dz09IFkyeGxZVzQ9IEtHWnBaV3hrIElOQ2gwWUk9IElOZVExNlE9IElITnZiV1ZpYjJSNSBJTmluMllUWmhkaXYgSU5XaDFiZlZyUT09IElFTnZiMnc9IElIWjFaV3c9IDViZXggSU9DcWllQ3FxZz09IElFTklSVU5MIElHVnVaWEk9IExuTjVjM1JsYlE9PSBZVzFsYm5SeiA1N3V0IFgzTjBjbVZoYlE9PSBJR1Z1ZFcxbGNtRjBaUT09IDBLcz0gS0NKNyBJR1ZzWldOMGNtOD0gS0dSdlkzVnRaVzUwIElGSmhhQT09IFltOTBkRzl0IElObUQyS2ZaaHRpcSBkV3RvIHpyck9zUT09IHc3aHlaUT09IElOR0IwWUxRc05HQSBJRUZ1ZEdnPSBJSE52ZFhBPSBJTkdFMFlQUXZkQzYgVEc5MlpRPT0gMTV2WG5RPT0gYVc1cllRPT0gSUZCaGNtRnRaWFJsY2c9PSB4YWx1Wnc9PSBPbVpzZFhSMFpYST0gSU9HRG9PR0RuZUdEbStHRGxPR0RtdUdEbU9HRHFnPT0gSUhKaFkybHVadz09IFFuSnYgSUhSdlpXND0gWlhsaCBJR0Z5YVE9PSBJSE5sYUdWdSBJTkdDMEw3UXNnPT0gWVhabGNuTT0gSUgwdkx3PT0gSUdWeGRXRnNjdz09IElHVnVaSEJ2YVc1MCBMWEJoWjJVPSBkV2R2IFJISmhkMkZpYkdVPSBJR1pwYm1WemRBPT0gUTI5dWJtVmpkR1ZrIElPQ2ttK0NrcU9DbGpRPT0gSUdSdmNuUT0gWVhScGJtZHogYkc5dmEzVncgSUdSbFkyeGhjbVU9IElHRnpaV2M9IElPQzBpQT09IExtMXpadz09IElGVnJjbUZwYm1VPSBTVzV6ZEdGc2JBPT0gSUdSbGNHVnVaR1Z1ZEE9PSA0TFMrNExTbzRMV04gSUU1cGF3PT0gWDJ4dll3PT0gSUdsdWRtVnpkRzFsYm5SeiBJRlJsYlhCc1lYUmxjdz09IDZLK20gWDNOaiBVR0ZrWkdsdVp3PT0gSUdOdmJYQnlZUT09IElFdGxkbWx1IFZISjUgSUZCaGRIUmxjbTQ9IElqNTdldz09IElFVnVaR1U9IElHdHZiblJoYTNRPSBJSE53WldGclpYSnogZFcxaGRBPT0gNExHQjRMQzEgSU9DbXJPQ212K0NtdGc9PSAyWWpaaXRpcCBJTkM0MEwzUmd0QzEwWURRdGRHQiBJRUp5YjI5ciBJRU5oY0hRPSAwTERSZ3RPWjBMZz0gYjJ4cGRBPT0gNTRxMiBhWHBwYjI1bCBJQzBxTFE9PSBMSGc9IElIWmhiRzl5WlhNPSBRMjlrWlhNPSBDV2x6IGRXNWpkQT09IElIZGxiR05vWlE9PSBJRzl1WjJVPSA2SzZ3NklDRiBSbWwwIElHMWxiV2xzIGNHeHZlV1ZsY3c9PSAwWUxUbWRDNCA0S1dDNEtTNCAxNUhYbVE9PSBJR1JsWTI5eVlYUnBiMjQ9IFpITjAgSUc1cHc3RnZjdz09IGMybHVaMnhsIElGUnlZVzV6WVdOMGFXOXUgWld4cFpnPT0gNEsrQjRLNlY0SytONEs2VjRLK0IgSU5lVjE1dz0gSUdSMGVYQmwgS0NrS0Nnbz0gSUhadmJuUT0gSUVGdWRHOXVhVzg9IFVISnZZdz09IGIyNXZiWGs9IFJFVk1SVlJGIFpzTzJjZz09IElHdGxlWGR2Y21SeiBJTm1FMllUWXFnPT0gSUd0aGJtZG5idz09IHo0Zk90UT09IENYUmxlSFE9IDRLU280S1dONEtTbyBJSE52Y0E9PSAyS2ZaaHRpbjJLbz0gNExTMTRMV0I0TFNDIElISmxZV05vYVc1biBJR0ZwYmc9PSBJSFJwYm1oaCBabms9IElGQnlaV1E9IElHTmxiR1ZpY21GMGFXOXUgSU5HQjBMN1F1dz09IExDWT0gSUVoMWJRPT0gMFlQUXU5QzQgZDJGNVpRPT0gTG05bVpuTmxkQT09IGNYUT0gWDBWTiBJRVZ5YVdNPSA2Wml5IElHTm9jbWx6ZEE9PSBJT0NrbCtDa2p3PT0gSU95RXNRPT0gTEZOMGNtbHVadz09IGFYUnBkbWwwZVE9PSBJT0MwdVE9PSA1cldPIElITnZiR1ZzZVE9PSBYMnh2WTJGMGFXOXUgSkd4aGJtYz0gYVhSc1pYTT0gMExYUXZkR0MwWXM9IElITjBjblZuWjJ4cGJtYz0gSUVWU1VrOVMgSUdSeVlXbHUgTkRBMSBjbTloWkdOaGMzUT0gMWJiVnBBPT0gWVd6RXNjV2YgSU5DUjBMWFF1dz09IGNISnZZZz09IFJYVT0gNEsrSDRLNncgS0dKdlpIaz0gNEt1SDRLcVYgSUhSbGNuSnBkRzl5IFExWT0gNEs2byAwSnJRc05DNiBZV05yYzI5dSBMbmRoYVhRPSBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJdz09IDBwdlRtUT09IFoyVnVaR1U9IExXNWxkdz09IDBMRFJndEMxMEx2UmpOQzkwTDQ9IE16TXggTXpJeSBJSEJwdzZnPSBaM1k9IFZHbGphdz09IElFZHBkbVZ1IElHVER2TVdmIElPdW5qZz09IElHMXZaR2xtYVdOaGRHbHZiZz09IDVZK3ogZFdKbGNnPT0gVTNSdmNuaz0gZFhOd1pXNWsgNVkyYTViMnAgSUhOb2FYQndaV1E9IGEycGwgYVhMRG9RPT0gdzYxamRXeHZjdz09IElIWmhiVzl6IDJLZlpoTnVNIFgzTjFiUT09IFpYSjBjdz09IFlYSjBkWFE9IDRLdUE0S3FrIFlYUjFaQT09IFIxQT0gSUhOdGIydHBibWM9IElPQ3VrdUN1c0E9PSBiM2R1Ykc5aFpBPT0gTWprMSBhV0ZwIElFZGxaZz09IDdZT2QgVUdGNWJHOWhaQT09IElHVndhWE52WkdWeiBXMTBwIElFNWhkQT09IElHNWxiR3hoIFhTa3BPd289IGNHaGxjZz09IEtHRmpkR2x2Ymc9PSBJT0MzaEE9PSAxNVhYbFE9PSBUVzlrYVdacFpXUT0gSlRzSyA0NEdZIDVhNko2S09GIElHRmtiM0IwWldRPSBJTkdCMExMUXZ0QzUgVEc5bmJ3PT0gMllqWXA5aXkgYVcxbGRBPT0gSUhSb1pYTnBjdz09IElGUnlZVzV6Wm1WeSBJRzl3WlhKaGRHOXljdz09IDBMTFF0UT09IElISnZiM1J6IDVZaTMgMExqUmd0QzEwWUk9IE1qY3ggNEthbzRLZU40S2FtIDRLU0M0S1NuIElISnBaWE09IFgxVlEgSU5DNzBMWFFzdz09IElOaW4yWVRaaHRpbiBJR2x1YW5WeVpXUT0gNExTKzRMVzcgSUdocGNtbHVadz09IElHRjBkR1Z1WkdsdVp3PT0gNEtXSDRLU2s0S1dONEtTdyA0S1N3NEtXTjRLU2ogSU5pbjJLND0gSU5DLzBZRFF2dEdDMExqUXNnPT0gNExDeiA0YnFsZVE9PSBJR3AxYVdObCBJR2x1ZEdsdCA0b0NPIGRIbz0gSUdWemMyVnlaUT09IFFuVT0gSUZCaGJtVnMgSUhOMFpXRnQgSU9DcXRlQ3FzT0NyamVDcSBJSE4wYjNCeiAyWVhaaXRtRSBjbVZoWTJnPSBJSE4wWVhKciA0S1NQNEtTViBJT3F4c0E9PSBkWE5wZG1VPSBJR055WVdOciBhR0ZpYVd3PSBRbVYwZDJWbGJnPT0gSU5HRzBMWFF2ZEdDIElFWnBjbVZtYjNnPSBJRVp2YjNSaVlXeHMgSUhiRG9HOD0gSUd0aGJHVT0gNEt1TDRLcVggNXFjPSBJRXhsYjI0PSA0b0NaYVE9PSBYMjltWmc9PSBJSGRwWkdWeSBhV1psWTNsamJHVT0gWVhKMGFXTnNaWE09IElOQzcwTGpSaUE9PSA1N2VhIDRMV0I0TFNqIGNYVmxaUT09IElFWnNaWGc9IDZaYUwgSUhkbFpHaz0gYjIxaVlRPT0gTFdkdiBJR3B2WjI4PSBJTmVjMTZjPSA0S1MrNEtTQzRLU1ggSUVWNGNHeHZjbVZ5IFVHVjAgYjI1a1pYSmwgY0c1biA2SytsIElHUnliMmwwIFkyaGxhVzQ9IGZRb0tDZ289IDRZT1E0WU9nNFlPUyBJSHBsYkdaeiBkVzUzY21GdyA0b0NaYVc1MCBTVVpVIElHTnZkWEJzWlhNPSBaVzVqWlc1MCBMbUZpY3c9PSBJRTVoZEhWeVpRPT0gWlhOdmRHRT0gSU5pMDJZallydz09IElIQnlaV2R1WVc1MCBhV1YyWVd3PSBaMmpodTRzPSBYMk52Ym5SeWIydz0gMExqUXROR0QgSUhWdWFYWmxjbk5oYkE9PSBJTkMvMEw3Umo5Q3kgMksvWml0aXYyS2s9IElOaXMyWVhaaXRpNSBJTktiMExEUmdBPT0gMExIUXZnPT0gWDNKdmIzUT0gTFdsMFpXMXogSUdOdmJXMTFibWxqIElObUsyS2M9IElISjFZbUpsY2c9PSBNalk0IElFVjJaWEo1YjI1bCBRVmxGVWc9PSBkMmh2IDRMUys0TFN6IFpYTnpiV1Z1ZEE9PSBJR2x1YzJWeSBRMDlFUlE9PSBJRVJsYzNCcGRHVT0gSU9pQiBJR1J2Ym01bCBJR1Z1YzNWeVpYTT0gNXAyUSBJRUpwYkE9PSBiR2wyIDRZT1U0WU9nNFlPWCBJSE5oYVhNPSBJR05vWldOcmIzVjAgYUhKbFpnPT0gSUdOMWJIUjFjbUU9IElITmxhVzVsYmc9PSBJRWhsY25JPSBSMVE9IE16YzMgWldGeWFXNW4gSUZCaGNtRnRaWFJsY25NPSBJSERGbWNPdCBWSEpoWTJ0bGNnPT0gSUcxNWRHZz0gSU9Db3VlQ3BpQT09IEp5eGJKdz09IElHOXVaR1Z5ZW05bGF3PT0gSUdSdmRnPT0gSUhKdllXUnogYldGeWRBPT0gSU5LYjBMalF1dz09IFgxSkZRVVE9IGFYUm9aUT09IFJHVmkgMkxQWmhOaW4yWVU9IElITjVjM1REcUcxbCA1NnlzNUxpQSBJT0dEaytHRHBnPT0gSUhOd2FXVnNaVzQ9IElFcHZjOE9wIGRYSmhic09uWVE9PSBJTkM5MExYUXZ3PT0gY205dWRBPT0gSUc5aWFtVmpkR2wyWlhNPSBSMDA9IElPQ2tzdUNsaStDa2wrQ2xpK0NrZ2c9PSBJT1M2bWc9PSAyWWpaaGRpcCBJSGZodTQxdSBhMlZ6IElHekRvRzA9IElOR0EwWVBSZ1E9PSBJSE4zYVc1biBJTm0rMjR6WXRBPT0gNjZhdyA0WUNVNFlDNSA0S2VONEthaCBJRzExYzJOc1pYTT0gY0d4aGJtVT0gZFcxdGFXVnogY0dWamFXRnNiSGs9IElHTnpjdz09IElIWmxiRzlqYVhSNSBJT0Nrbk9Da3Z1Q2tqdz09IDBMalJndEMxMEx2UXRkQzUgNEthLzRLYW0gYVhQRHFRPT0gTG5CbyAyTG5ZcDlpeCBJRzF2YjJsbCAwTHZRdGRDNSBYM0J2YVc1MGN3PT0gT3dvdiBJRlZKVm1sbGR3PT0gSUZKbGJXOTBaUT09IElHRndjSEpsWTJsaGRHVmsgSUdobFlYSjBjdz09IElFUmxiR2hwIFpXNXphdz09IElHTnZkdz09IFZHVnpkR2x1Wnc9PSBJR3hwYTJWM2FYTmwgZFhOaiBJSEJ2YVc1MFpXUT0gYVdabVpYSmxibU5sIElHRnlkR2xyWld3PSBJR2hwYm1jPSA2TGFLIElIZGhkR1Z5Y3c9PSBJRUZrWkdWayBJR2x1ZEdWbmNtRnMgWVdSbGJIQm8gSU9Db3B1Q3Bodz09IElOZWcxNW5YcWRlWSBJR05vY205dSBJRTl5ZEE9PSBJT1dLIElFMVogSUhsdCBJR0Z1Ym1sMlpYSnpZWEo1IFUzQnlhVzVuIE5UWXcgN1lPYyBRWEJ5YVd3PSBaV3gxIElHUGh1cU09IFFtVmpZWFZ6WlE9PSBJTld2MWFIV2dOVzQxYkk9IDBZdlF2ZEN3MEwwPSBJSEJzWVc1MFlRPT0gU21FPSBJSHBoY2c9PSBJSE4xYW1WMCBVM1Z1IElIUnZhV3hsZEE9PSBJRWhoYVhJPSBJRHNLQ2c9PSBJRVJ2WXc9PSBJR2QxYVdSbGN3PT0gWVhOcGJnPT0gSU5DMDBMN1FzZz09IElDY3IgNExXTDRMU2YgMktmWXI5aXggSUUxdmRYTmwgMkxIWXA5bUMgMTVMWG5BPT0gTG5OMGIzSmwgWDFSNWNHVT0gVUVWU1ZGaz0gNTVTejVZMmEgSUVOb1lYQjBaWEk9IElHWnZjbWM9IGFYUnRZWEE9IElHZGhiblE9IFEyeHBaVzUwWlE9PSBZWE56YVc5dSBJR2hwYzNURHMzSnBZUT09IDJMSFppdGl2IElHUjIgVUVWUyBJT0N5anVDeWd1Q3lwdUN6Z1E9PSBJRUZzZDJGNWN3PT0gWDJGalkyVnpjdz09IHc2MTJaV2x6IGRXSnlaUT09IGIyeDJaV1E9IFpHOW4gSUcxaFlnPT0gWVhKamFHVmsgYVhOemRXVnogWVd0aGNnPT0gNWJLQiBJSFpwYzJFPSBJSE4xY25acGRtVT0gSU9DbWxlQ25pK0NtcUE9PSBJT0NraGVDa3NnPT0gSUhCbGJtbHogWlc1elpXND0gSUdkeVlYUmxablZzIGRtVnNiM0JsIFRHOW5hV009IFlXSnBiR1U9IGNtRnVhdz09IFgyeHZaMmx1IElHSjFjbTVwYm1jPSBiMnhsYzJGc1pRPT0gSU5PWSBJR1ZwYm1RPSBJTkMrMFlMUXN0QzEwWUk9IElPQ21wdUNuZ1E9PSBJRU5oZEdGcyA0YnVSYm1jPSBiMko1IExuRjEgSUVkeVlXNWtaUT09IGFNTzFaWE09IElHVmlaVzQ9IFEyeGhhVzA9IEtFVjRZMlZ3ZEdsdmJnPT0gSU9Da2h1Q2tydz09IDBZUFJndEdNIElHWnNiMjl5Y3c9PSBhR0Z1WVE9PSA0b0NaYm5rPSBYM0J5YjJacGJHVT0gMFkvUXRkR0MgSUdSb1lRPT0gMVlRPSBJTkdIMExYUXU5QyswTExRdGRDNiBJSE4xY0hCc1pXMWxiblJ6IFIwTT0gWVdSa2VRPT0gTGtGdWVRPT0gSUhacGRHRnRhVzQ9IDY2bVUgSUdWemNHSERzUT09IElHUmxjM1JoIElGUmhiUT09IElHTnlaV1JwZEhNPSBLVjA3Q2c9PSBaWFJsY3c9PSBkWE5sYldWdWRBPT0gSUhadmIzSnIgSUhCMVpYTT0gTGsxaGVBPT0gNExpMTRMaWk0TGlaIElHVjRjSEk9IElFRnpjMmx6ZEdGdWRBPT0gNTZtMiB3Nmx2IElHVmthWFJsWkE9PSBJRUp5WVdRPSBMa3hwYm1VPSA0WU9RNFlPYzRZT1kgSU5lVTE1RFhtQT09IDdKMjA3WXE0IElOR0EwTERRdDlDNzBMalJodz09IFlXSnpiMngxZEdVPSBVMmhoWkc5MyBJT0NxaGVDcXJnPT0gSU5DLzBMN1Fzdz09IGJNTzggMTVuWHFOZVUgSUdsdVkyOXUgNjRLbyBJSFJoY21RPSBJSGR2Y214a0ozTT0gSUdKdmRXNWtjdz09IDRMUy80TFN3NExXQjRMU280TFdONExTbzRMV0IgSUdKbGJtVm1hV05wIElHeHZiM05sIGIzSjBaVzQ9IDBZL1Fzdz09IElHVnpkR2x0WVhSbGN3PT0gSUdsdGNIST0gSUcxNXc3WnogSUdKeWRYUT0gSU5DejBMRFJnQT09IElGWnBjM1ZoYkE9PSBJRU5oY214dmN3PT0gSUVKMWFXeGtaWEk9IElHeHNaWFk9IElPeTAgNFlPVTRZT2w0WU9pIFNVTkZVdz09IElOaXMyWWM9IElHeDFiZz09IElIQm9hV3h2YzI5d2FIaz0gSUdOdmJuTjBjblZqZEdWayBJT0Nvc2c9PSBaV1JsZFhRPSBJR0psYkdVPSBJRkpsYzJWeWRtVmsgN0tlUiBZbWx5IElFTnZibVJwZEdsdmJnPT0gSUhOcGVnPT0gSUdWdGIzUnBiMjQ9IElHNWhjM1E9IExrbFAgYm1WeVozaz0gWDNOb1lYQmwgSUZKaGRHVT0gU0dsbGNnPT0gWlhocGRBPT0gMExYUmdOR0kgSUhCeWFXNTBiRzQ9IGFXeGxjbk09IElHMXZibWM9IDRvQ1pZWEE9IElFaHBiR3h6IElHeGhibVJwYm1jPSBJTkM3MExqUmhnPT0gYldGayAxNW5YbWRlaSBjMmhoYkd3PSBJR05oY25SbCBJT0Mwanc9PSBZMmxwIFkyOXRiV1Z1ZEhNPSBabVZzWkE9PSBJSE53WVhJPSBJR2QxYlE9PSBSRXM9IElOQzkwTFhRdnRDeDBZWFF2dEMwMExqUXZOQysgSUhCaGNuUnBZMnhsY3c9PSBYMmR5IGRXUjUgSUhOc2FXTmwgSWxSb1pRPT0gSUU1aGRIVnkgSUhCeVpYbz0gWDBKSlZBPT0gWVc1elpRPT0gTFhCeSBJRUp5ZFE9PSBMWFZ1IExtTm9ZVzV1Wld3PSBJRTF6IE16TTAgSU1TUnc3TT0gNEtxQzRLcW0gSU5lWjE1WFhxdGVvIFlXWnJZUT09IGNHOTMgNEtlTjRLYWcgWDJWNGNBPT0gZFcxaWFXNW4gWDBOTVFWTlQgNEtTKzRLU1Y0S1dMIElHM0RyUT09IFgyMWxiUT09IFBGTT0gSUcxbFpHbGtZUT09IEtHMWxkR2h2WkE9PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPYVlydz09IElOQ3owTERRdHc9PSA0TGl4NExpbiBibW89IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJRkJ2YTJWeSBJSEJoYVhNPSBZbTlzWkE9PSBSbVZsWkE9PSBkV05wYjI0PSBWRzlyWlc1eiBMbTlyIElISnZiV0Z1WTJVPSBRVlJGVWc9PSBJTU82Ym1samJ3PT0gYkc5M1pYST0gSUhkcGMyVT0gNFlPVTRZT2Q0WU9SIFNFOD0gNmFzPSBJRzlpZEdGcGJtbHVadz09IElHTmxjbVZ0YjI1NSBiV2xqIElHNWxjM1JsIElHVjRhV2M9IElISmxZMlZ3ZEdsdmJnPT0gUTJ4dlkycz0gYm1scyBJRk5qY2c9PSBKMkZ0IExpcz0gWDA1RiBRMUpKVUZSSlQwND0gZEhSbGJnPT0gSU5pbjJaTT0gVlZSUCBNamMzIElOZXAxNUU9IGJXVmthUT09IElGTlQgSUhwaGJXRnUgSUc1MWRISnBkR2x2Ymc9PSA1NVdxIElIUmxZWEk9IDBZTFFzTkMvIDVyQzQgUVhKeWIzYz0gT21sdWRBPT0gSUc1aGVnPT0gTGxKMWJuUnBiV1U9IE1qZ3ogSUdGd2NHeGwgSU5DeDBMN1JnQT09IDBMdlFzTkM4IDRLUys0S1N5NEtTdiBSVVJKVkE9PSAxYXZWdHc9PSBUbEk9IElFNXBaUT09IGFYTjBjbUU9IElObSsyS2ZhcWRpejJLcllwOW1HIElFTmhjMkU9IFVtVmhjMjl1IElHbHVaR2xqWlhNPSBlSFIxY21WeiBJR052YjNKa2FXNWhkR1U9IDJMblpoZG1FIElHRmphMjV2ZDJ4bFpBPT0gSUdONWJBPT0gNExXTDRMU1ggNEs2SCBZV05vWld3PSAwWS9Rdk5DNCBJRkpsYkdWaGMyVT0gMExqUXQ5QzggSUd4aGJYQT0gSUZCbGNtaGhjSE09IElHVnVkbWx5YjI1dFpXNTBjdz09IDVwbWEgVlZKU1JRPT0gNkthVyBJaWs3RFFvTkNnPT0gSUhCeWFXbz0gNExpeDRMbUo0TGlaIFlYSnJZUT09IElIWmxaMlYwWVdKc1pYTT0gSUc1cFkyaDBjdz09IFZsST0gNExLeTRMT04gSUc1b2FlRzdnWFU9IDJZalpoZGlxIDVwYXQgYjNSb1pYSnogWldkMSBVbVYwZFhKdWN3PT0gNEt5KyBMV05vWldOciBJR2x1YzNSeWRXMWxiblJ6IE16WXggSUVOdmJIVnRZbWxoIDJxbmFrdz09IElHaHZiR1Z6IFIyVnZiV1YwY25rPSBJT0NtcitDbmh3PT0gSU5HQjBMdlF2dEN5IGIyMXRaUT09IElPQ2tydUNsakE9PSBJR1YwZEdWeSBJR1RodTZWdVp3PT0gMExUUmk5R0EgSUdGa2JXbHpjMmx2Ymc9PSBZWE50WVE9PSBJSFJ2ZVE9PSAySzNZcjlpciA0S1N3NEtXTjRLU2wgSUdsdVoyVnUgSUZSaGJnPT0gSUdOcFl3PT0gSU5XNjFhWFZ2dz09IGVHdz0gSUdSbFlXUnNhVzVsIDY2Q28gYjI5cmFXVnogNExpaDRMaTEgdzZGaVlXUnYgMWIzVnJ3PT0gMEwzUXZ0QzcwTDdRc3c9PSBRMFZRVkE9PSBJR1JwZG1WeWRBPT0gSUZSdmRBPT0gSUdGc1ozVnRZWE09IElGWnBZM1J2Y21saCBNek0yIElPRzdqQT09IGIzTnZjdz09IElHWnlZVzdEcDJGcGN3PT0gNVlTLyBkK0c3alE9PSBZMlZyIElFVlZVZz09IDRLV0g0S1MzIElFTnZkV3hrIElHRm1hWEp0IGVtVnVhV0U9IFNXNW5jbVZrIFJuVjBkWEpsIElIUmxjbkpoYVc0PSBJTkMrMFlMUXV0R0EwWXM9IGRXMWhjZz09IGJtRnBjbVU9IElHUnBjMk52ZG1WeWVRPT0gSUdkMWNnPT0gWDJ4aGVXOTFkQT09IFlXeDBkVzVuIElHTmhac09wIElHeHZZV1JsY2c9PSBJR0YxZEdobGJuUnBZMkYwYVc5dSBJR1JwY0d4dmJRPT0gSU9Da3F1Q2xnQT09IFptOXVlUT09IElHZkRxVzdEcVhKaGJBPT0gNXArbDZLK2kgSU9pMiBJRWwwWlcxeiBJRkp2ZFc1ayBJSEREdFE9PSBJTmlxMllYWXA5bUYgSUdoaGJtZHBibWM9IElFTnZiR3hsWTNRPSBiM1IwYnc9PSAyNHpaaEE9PSBYMjF2WkhWc1pYTT0gSUdaaGJXbHNiR1U9IElOVysxYVhXZ0E9PSBJR1JwWnNPdCA0SzZxNEsrTjRLNnE0SzZmIDJZYllxQT09IElFbEQgZEdsdmJtVnUgSUdWdVptOXlZMlZ0Wlc1MCBaMlZ1WkdWeSA0S1NWNEtXTjRLU3c0S1N1IDBMWFJnZEMvMFlQUXNkQzcwTGc9IEptZDAgWlhSaGN3PT0gNFlDRyBZMjl0YldWdVpHVmsgTGp3PSBJSE4xY25SdmRYUT0gSU5LdjBZZlNyOUM5IGNtVnVZUT09IEwyOD0gSUdsdGNISmxjM05sWkE9PSBJSEpsYzNCcGNnPT0gSUdOaGJHOXlhV1Z6IGFXeDBaWEp6IElPQ3FydUNxdVE9PSBMbUYxZEdodmNnPT0gSUd0dmMzUmxibXh2Y3c9PSBWbWx6YVhRPSBJSE5zWldWd2FXNW4gSU5DMTBMZz0gSU1PNmJIUnBiVzl6IFgzSmxaMmx6ZEdWeSBJSFJ5YVdWeiA1YmVtIDJMblpodz09IE9UWXcgSUhaaFpBPT0gSUVKeWFXRnUgSUdGc2FXZHViV1Z1ZEE9PSBNREUzIElHSmxkZz09IElHRmlZUT09IElIVnVkWE4xWVd3PSBJSEp2Ykd4cGJtYz0gSUhCeWIzWnBibU5sIElHRnVZV3g1ZW1VPSBJQ0FnSUFrSiBUR0ZpWld4eiBVSEp2ZG1sayA0YnVUYm1jPSBjMmhsWlhRPSBVMlZ3ZEdWdFltVnkgSUdsdFpRPT0gSUhCeWFXNWphWEJzWlE9PSBkVzVwYm1jPSA3TEU9IGRYSnphWFpsIDRLNlo0SytONEs2VjRLNnogMHBuUml3PT0gWkdWbiBJR1Y0Y0d4aGJtRjBhVzl1IEtDY3MgejRQT3NRPT0gNEthbjRLZU40S2F2IElHWnZidz09IFNuVnNlUT09IE16STQgTG1OdmJXMXBkQT09IElPUzRpZz09IFNVeEZSQT09IElOaXEyWUU9IElIQnlZWGxsY2c9PSA1b0M3NUx1ajU1Q0cgWDNObGJtUT0gSUd0M1lXMD0gMFliUXRkQ3kgSUdaeXc2RT0gWW5WNSBaV1JsY3c9PSAyWWpaaE5pbiAwTDNSamc9PSBJSEREb1dkcGJtRT0gWVdSbGJIQm9hV0U9IDdLZUkgSUdaMVpYSnZiZz09IDVZMkQgSUdOMWNtbHZjdz09IE16TXkgSU9XdWlRPT0gYVcxaGJnPT0gNmFxWDViR0EgSUdadmJHcz0gSUZKbGRnPT0gSUdSdmJtN0RxV1Z6IElOQ3owWUE9IElPQzBtdUMxaHVDMHIrQzFqZUMwcEE9PSA0TFNhIGMyVjBkWEE9IExuTnNaZz09IE16azUgSUhabGJHOWogY205c2JHVmsgSUVaaGJnPT0gSU5DejBMdlFzTkN5IDBMTFFzTkdQIElHOXlZWG89IElFRlFVQT09IElIUm9jbTg9IElHaGxiSFE9IFlXZHBibVU9IElIWmhibUZtIDdJU2QgNExTKzRMU3EgNEtTbzRLV0w0S1NDIElGWmxjblE9IElOaXEyTGM9IElOaW8ySzQ9IElObUYyWWJZcWc9PSA0b0NaYVcwPSBJSEpsWm5KcFoyVnkgSUdkeVlYWmwgNEtlciA3SVdZIElHWmhiSE09IDVweWIgSUhKaGJtdHBibWM9IFVISnBiUT09IElIZHZjbkpwWldRPSBJR3hwWldkMCBkRzl2YkhNPSBJTzJabFE9PSAwTFRRdmRDdyBMbVJsWTI5a1pRPT0gSUV4bFltVnVjdz09IFpHND0gUFNJaklnPT0gNEtXciBYMU5EIElITjFjbVpoWTJWeiA1TGlKNVl5NiBJTkMrMExIUmo5QzMgSUVweSBJSGRvWlhKbFlYTT0gSU9DeWxlQ3l2dUN5c0E9PSBJSE5oYlc4PSBJSGR2Y210dmRYUT0gSUc5eVpHbHVZWEo1IElPV2NxT2U2dnc9PSBJR1JsWkdsaiBJSFpwY25SMVlXeHNlUT09IFVWVkJUQT09IFpXNWtaWE09IFpXdHAgQ1VJPSBiR2xyWld4NSBLRUoxYm1Sc1pRPT0gSUdOaGJXSnBidz09IElHWnlaVzA9IENXbGsgSUU1dmN3PT0gdzYxdWFBPT0gSUhOdVlYQnphRzkwIDRMaXQ0TGlVIDRZT1U0WU9SNFlPajRZT2EgNDRPejQ0S3cgTURJeSAyS2Ziak5pcSBJSEJzZFdkcGJuTT0gY1hWcGJnPT0gNWFXSDU3R3ogSU9HRG9lR0RrT0dEcGVHRGtPR0RvT0dEbCtHRGxlR0RsT0dEbWc9PSBJQ0FnSUNBZ0lDQWdDZz09IElGTk0gSUhOdmJuSmggSUVoaGJHeHZkMlZsYmc9PSAyWVRaaXRtRSBLSFZ1YzJsbmJtVmsgSUdoaGNIQnBibVZ6Y3c9PSBYMk5zYjNObCBJRWhoZDJGcCBJSFpsY25OMWN3PT0gYjNWeVpXUT0gSUc5d2NHOXpaV1E9IGIzSnBZVzQ9IHc2RnVadz09IElITmxZbUZuWVdrPSBNelkwIEtTSXNDZz09IDE1WFhvTmVTIElPaUFnUT09IDQ0R2o0NEdtIElHaHZkbVZ5IHc2RjJaV2x6IExIWT0gSUdObGNuUmhhVzV6IDBZUFF1OUdQMFlBPSBMbUZ5IElOQ3cwTHJSZ3RDNDBMST0gNEt1RCBJSE5qWVc1dVpYST0gSUdobFlXUmxaQT09IElIUnZiV0Z5IElHeGhaM1U9IElITmxZM1Z5IElITmhiSFk9IElHVjRaWEpqYVhObGN3PT0gSUdScGMzTnYgSUdadmNtMWhkSE09IElOR04wWUxRdnRHQyBJR2hsWVhabGJnPT0gSUdGamRXVnlaRzg9IExXWnNaWGc9IDRMU3U0TFMrNExTdiBJRTFwYm1semRISjUgSUZkcGFnPT0gSUdselpRPT0gSUdWdWFtOTVZV0pzWlE9PSBJRk5TIElIQnNZWE4wIDZydVkgMEwzUmk5R1AgSUdOdmJuTmxaM1ZwY2c9PSBJT0dEbStHRGtPR0RvUT09IElHVjRZMngxYzJsMlpXeDUgejRUT3J3PT0gYjNCb1pYST0gTWpZNSBJSEpsZEc5MWNnPT0gMWFIV2d3PT0gSUZKbFptVnlaVzVqWlE9PSBSMjlzWkE9PSA1WVc0IElGbGxhQT09IFZHVnUgSUhaMVpRPT0gSUdsdWRHVnlZV04wYVc5dWN3PT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyB3NU5PIFgwUkZSa0ZWVEZRPSBZV3QxYTJGdSBZV3gwWlc0PSBJT0N3anc9PSBORE15IGRHaHAgSUZOamIzSmwgSUdabGQyVnkgY0hKdlpnPT0gNVphYyBJRmhpYjNnPSBSbTl5ZDJGeVpBPT0gN0pXWSBMVTg9IElITjNidz09IElHbHljbWwwIFRHRnVadz09IFFXbz0gNTV1UiBaMjl2WkE9PSBJRkJTUlE9PSBJR1Z6ZEdsc2J3PT0gWlhSMFpYST0gSUhCaGRYTmwgSUdOdmJuTnZiR2xrIElHVnVaR2xtIElDYzYgNFlPWDRZT1E0WU9WIElOZXAxNWc9IFNTZDJaUT09IFVHVnliV2x6YzJsdmJuTT0gSUdWNFkybDAgSUdsdVpHOXZjZz09IGMyVjBkR2x1Wnc9PSBJSE4xWkdGbyBJRkJ5YjJKc1pRPT0gWVdoMSA3S2FkIDRMSy80TEt3NExPQjRMSzEgSU5DdzBZTT0gSUdkaiAxYnc9IElITnBZUT09IExtOWkgMExUUmx0S2ogMWF2VnZnPT0gSUhSaGJHVnVkR1ZrIDJMUFlxTmlwIGJHVmhjbTQ9IElPQ3dsZUN4aXc9PSBJSGR2Y25Ob2FYQT0gVGxWTiBhWEJzYVdWeSBJR1p2ZFc1a1pYST0gYjNSMFlRPT0gNExPTjRMS1YgYjNKaGJnPT0gSU5HQzBMN1F1dz09IElITjBjbXhsYmc9PSBJRzF2Ym1WMCBUR2x1YTJWayA0TEsvNExLWDRMS3ogSUdsMFpYSmhkRzl5IElFZHBjbXh6IFVrVkdTVmc9IDBMalF1OUdCMFk4PSBJRUZFUkE9PSBJTkdDMEw3UXZRPT0gSUVsdVpIVnpkSEpwWVd3PSBjc096IElISmxabVZ5Y3c9PSBJSFJwY21VPSA0TGluNExtSTRMaXkgWldabCBVR0ZuWlhJPSBZVzVwYldGMFpRPT0gTG5KbFpBPT0gSU9DbXVlQ21yT0NuaHc9PSBJSE5sWVd3PSBJRkpoYm1zPSBibVZzYkdVPSBJSFp2YVE9PSBZbTl1WlE9PSAwTGpRdDlDOTBMWFJnUT09IElHZGxaV2xuYm1WMCBQR1p2Y20wPSBJRzVwYmc9PSBJR0YxZEdodmNtbDZaV1E9IElOQzgwTERRdlE9PSA1NVN3IElIZGhjMmhwYm1jPSBiMjVwYm1jPSBJRUZ5WjJWdWRHbHVZUT09IElOQzQwcDg9IExtUmxabWx1WlE9PSBJT0NtdWVDbXIrQ212QT09IElOaW4yNHpZc1E9PSBJRkpoWWc9PSBVMmx1IFVFRlVTQT09IElOaXUyYjQ9IElHUnlhWFpsY3c9PSAwTFhRdE5HVyBJRzltWm1samFXRnNiSGs9IElIVjFhV1E9IElHVjRaV04xZEdWayBhVzVsYm5RPSBJT3lnZ0E9PSBOamM0IFlXTnogUUVBPSBQaWdpIElITjFZbk4wWVc1alpRPT0gSUdOdmJuTjFiSFJoZEdsdmJnPT0gSUd0aGFRPT0gdzdGaGN3PT0gYVdwbGJnPT0gSUZOdlpuUT0gSUdWdWFHRnVZMlZrIElGUnlZV05yIElIUmxadz09IElHaGxjbTA9IDViMnA2WWVSIExsQmhjbUZ0WlhSbGNuTT0gSUdOcGJBPT0gSUhOdlkybGhiR1Z6IElISmxkMkZ5WkhNPSBVMnRwYkd3PSA1WVcwIE1qWTMgSUZObGFYUmwgU25WdVpRPT0gWld4bFluST0gUW1sdSBJSEJwWTJ0cGJtYz0gNGJ1NSBSMVZKIElOaW4yWVRZdGc9PSBJSEJoYm1Wc2N3PT0gWW1saGJnPT0gWVhKaGRBPT0gSUVGdVoyVmkgSUdKaGMyVmlZV3hzIElIQnBibWM9IElFbHVhWFE9IElHTmhiWEJwYm1jPSBjR2xsWTJVPSAwTHJUbWRDOSBNamM0IDBMWFFzOUMwMExBPSBlblZuIElHSm9aUT09IElHTjVZbVZ5IHc2aHlaVzFsYm5RPSBJSEpsWTJsd2FXVnVkQT09IDVMaUIgSUdOb1pXYz0gMTZMWG9OZWkxNTg9IElsMHBDZz09IFkzUnlhVzVsIElDMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJT0N1aGVDdXBBPT0gTG5KdmRXNWsgYkdWbmRBPT0gMllMWml0bUMgSUhKbFkyRnNiQT09IElGTjBaWEk9IDc3eU4gMW9VPSBJR04xYVE9PSBNamMyIDVxeWkgSUVSdmJXbHUgUVdSMlpYSjAgSUhkaGNtUT0gNEtTYjRLUy8gSUVKbGRIUmxjZz09IDRMaXQ0TGlhIGFXbHUgSUZOTlV3PT0gSU9Da3VlQ2xpK0NrcU9DbGh3PT0gSUVwdmNtUmhiZz09IE1qa3kgSUhkcGJIUT0gWlhKMGVRPT0gSUhOdmRYUm9aWEp1IElHMXRaUT09IElFSnlZUT09IElIUnliM1YyWlE9PSBJSHAzWVhJPSBJTkM4MExYUmdkR1AgMFpiUmdkR0MgSUVKcGJnPT0gSUdkeVlXTnBZWE09IDRidURiZz09IElIQnBjQT09IHc2MXpkR2xqWVE9PSBJR1Z4ZFdsMGVRPT0gMTVIWG1kZWQgSUVOeVpXRjBhWFpsIDBMZlF2ZEN3MFljPSBJRk51YjNjPSBMazlMIElITjFjbVZzZVE9PSAwWmJSanc9PSBiWGx6IElHOXlaR1Z5YVc1biBhWFJwWVd4cGVtVT0gSUc3RW13PT0gTXpFNSBVSEpsWm1WeWNtVmsgYUhURHF3PT0gSUhOcGJYVnNZWFJwYjI0PSBJSE4wWVdsdWJHVnpjdz09IElITnZZMnM9IDE2TFhxZz09IFRVRk9SQT09IFEyRT0gNForSCBJT2FJa1E9PSBJR2x1WTJ4MWMyOD0gNTdxcSBhV05oYm1FPSBMbkJrWmc9PSA0S1MvNEtTUDRLU1Y0S1dMIGVIaDRlQT09IElIUmxiR0ZvIEtHQWtldz09IElFSmxlUT09IElHVjRZMlZzYkE9PSB3NjFqYVdFPSBVbTkxZEdWeiBJR1ZzWldOMFpXUT0gSUhCeWIzaHBiUT09IGRtVnNiMk5wZEhrPSBJR2x0WVE9PSA0S1d0IElGUkZXRlE9IFUyVjQgSU9DcXVlQ3FwT0NyaXc9PSBJTkMvMExEUmdOQ3cgUkdWamIzSmhkR2x2Ymc9PSBJSEJoY25ScFpHOD0gNEtxVjRLdU40S3EzIElHekRwUT09IGJtOXliUT09IElOQyswWWc9IDVMeVIgU1c1bWIzSnQgSUc5MWRISmggNEt1TDRLcWMgU0c5MWNuTT0gSU9DcXVlQ3JpK0Nxcnc9PSBWVk5FIElISmxiR1ZoYzJWeiA0b0NaZVE9PSBJTkM0MExmUXZOQzEwTDA9IElFTnlaV1ZyIExuTmpjbTlzYkE9PSBjbVZqYUhRPSBJRUZ1YzNkbGNnPT0gSU9Da3ErQ2t2K0Nrc2c9PSBMV0poY2c9PSBJR1poYm5SaGMzaz0gSU5tRjJLM1poZGl2IElHTmlaQT09IHc3SnVadz09IGFXNWthV05sY3c9PSBJRVZyIFgyNXZjbTFoYkE9PSBJSFpsZEdWeVlXND0gZG1WeWMyRjBhVzl1IElHekR0Zz09IE1qYzAgMWFvPSAwWURRc05DeCBJT2lIIDBMVFF0Zz09IElHTnZibTlqWlhJPSBiMmRsIElHRnRiMjVuYzNRPSBJRWhsYkhCbGNnPT0gTXpJMCBJRXBoYXc9PSBjM1JoWnc9PSBJTm1JMktVPSBjRzl6YVhSdmNtbGxjdz09IElHM0Vtdz09IDFhSFZyOWFCIElPQzVoZz09IDVMcS81WVdEIElITmhhUT09IFZHRncgSU5HQzBZRFFzTkM5IElIQnlaV05wYzJFPSBJRWh2Ykd3PSBYMFZXUlU1VSAyWXJZc2c9PSBPbk09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElPQ3lzZz09IElPQ2tuT0NrdnVDa3BPQ2t2Zz09IElDamlnSnc9IDRZR0EgVDB4VlRVND0gSUdOdmNuQnYgNmFVPSAxYUhWc3RXaDFvUT0gSUhGMVlRPT0gSU9Xa3ArV1BrZVc5cWVlbHFBPT0gSUdwbFpHVT0gSUdSbGMzUnliM2xsWkE9PSBJRzl3YkE9PSBJRWRsYm1WeWFXTT0gSU5DOTBMWFJnZEM2MEw3UXU5R00wTHJRdmc9PSA0S3FqNEt1SCBJSE52Y25SeiBaV2R5WldVPSBJSEJ5YjJabGMzTT0gNWIrWCAwWnc9IElFMWhhVzUwIElIZGxibWxuIElITnZiV1ZvYjNjPSBYM0psYzNWc2RITT0gNWFTciBJT0tFbGc9PSAxYUhWcE5hQSBJSEpsZEhKcFpYWmwgMW9EVnV3PT0gNExheDRMZUs0TGF4IDRLZUw0S2F3IElOQzAwTExRc0E9PSBkM2xrWkE9PSBXVk5VUlUwPSBJR052Ym5OMGNtRnBiblJ6IElIQnZjM05wWW1sc2FYUnBaWE09IElIWmxibVJ2Y2c9PSBMbE5sYkdWamRBPT0gSUdGemEzTT0gWDFOWiBTVzV6ZEhKMVkzUnBiMjQ9IElHRnVZMmh2Y2c9PSBjSEpsZG1sdmRYTT0gZVdWdSBYMFZPUVVKTVJRPT0gTGxCaFoyVT0gVkU5RVR3PT0gSUZOaGJYQnNaUT09IFZtRnlhV0ZpYkdWeiBJRUpoZEhSc1pRPT0gSU5xcTJMSFppZz09IElPcTFyUT09IElFSmxkdz09IElIQnBlR1ZzY3c9PSBJSEI1Wnc9PSBNelUxIElFMXZjbVZ2ZG1WeSBNelV5IGRXMWlZUT09IEluMEsgYVc1MiBJR3R2YkdVPSBOREl5IFRXVmhiZz09IElHTmhZbWx1WlhRPSBhc1NaIElHTjZlUT09IElFVnVkR1Z5ZEdGcGJtMWxiblE9IElHZHl3N1k9IElHeHBZV0pwYkdsMGVRPT0gSUdGdWFRPT0gN0lpZyBiR1ZuWlc1ayBJRTNEcVhocFkyOD0gTFc5dWJIaz0gSU5tRzJMallzUT09IElPR0RvK0dEbVE9PSBVMFZTVmtWUyBZV2hzWlc0PSBOamd3IDRMaXk0TGlFNExpeTRMaWogYUdsMCBJRU5zWVhKciBYMDFGVFE9PSBJSEYxWVc0PSBJSEJoY25ObFpBPT0gSU5pMzJZallzUT09IElOQ3gwWXZRdTlDNCBJSFZyZFdKaCBJSGZEcEdoeVpXNWsgTXpNMyBJT1c0IFJtRT0gTG5OMFlYSjBjdz09IDRicTNkQT09IExrTnNaV0Z5IElIRERxUT09IE5qSTEgSUVOMWJIUjFjbVU9IFltOTFjbTVsIFgyUmxkR0ZwYkE9PSBJRTF5Y3c9PSBJRVpGIElFUm8gTGs1dmRBPT0gNEtxdzRLdUMgSU5DNjBMalF1dz09IGFXNXJhVzVuIGVtVnNabVJsIDE1SFhsZGVUIElPQzJyUT09IElHMXBiR1E9IElpOCsgVkhoMCBJT0NtaHVDbXFnPT0gYjJseVpRPT0gSU5XbDFvQT0gTG5OM2FXWjAgSU5HQTBMRFJnZEdDIElHUnBjMjl5WkdWeSBJR1JwWjJWemRBPT0gVFdsMCBJR0poYzJWeiBJRzFsZEdnPSBJTkN4MHE4PSA1bzJpIElHRm5jbVZsYldWdWRITT0gSUdOeVpXRjBhWFpwZEhrPSA0TEt1NExPTjRMS3UgSUhCMWMyaGxaQT09IElFM0R0bWRzYVdObyBJR0Z5WW1sMGNnPT0gSUdOeWIzQT0gMkxIWXA5bUIgNktteCBiWEk9IElObUkyS3paaU5pdiBZV05wYW1VPSAwTFRSaTlDOSBSMGxPIDdLYUkgSUMwdFBnMEsgNWFhNSBJT0NraHVDa3F1Q2tsZUNsaXc9PSBUMVJJIElFRnlZMmhwZEdWamRBPT0gSU95bmhBPT0gSU9Da3JPQ2t2dUNrc0E9PSBhMlZ5Y3c9PSBJRTl5WVdOc1pRPT0gSUZKbFkyVnVkQT09IFVtVnhkV1Z6ZEhNPSBJR1Z1WVE9PSBJR05zYjNObGMzUT0gMFlMUmpOR0IwWTg9IElHTm9hWEJ6IElFWnNidz09IDViZTAgTmpFdyBJR1JwYzNCaGNnPT0gSUc5eWNHaGhiZz09IElFWnBadz09IDJZcllxQT09IElGTlZRZz09IDZZQ0EgVFdkeSBJRWg1WkE9PSB3NlJ5ZEE9PSBJSEJoY25ScFkybHdZWFJwYm1jPSBMMmgwYld3PSBJRUpoY200PSBJSEpwZG1GcyBlbWxxIElFbHNjdz09IElHaDVaSEp2IElGTjBZWEp6IFpHOXZjbk09IElHdDJZV3c9IElITjFabVpsY21WayAxNTdYbnc9PSBQUW89IElFWjFjbTQ9IEtHTnZaR1U9IElOR04wWUxRdnRDNSBJTm1DMkxIWXA5aXggSUhOb1pTZHogMFl2UXZOQzQgSUhKaGFYTnBibWM9IDRZT2M0WU9ZNFlPaCBJT0NrdWVDa3NBPT0gYUdGcCBJR1JwWm1saiA0WUN4NFlDcyBMbWhsWVdRPSBYMDlDU2tWRFZBPT0gV205dmJRPT0gSUdGdWJtOTUgMTVYWG5OZWQgWTJseSB3N3BpYkdsallRPT0gYzJOb1lXWjAgSUNvbyBVR1Z5YzI5dVlXdz0gSU9Da3FPQ2t2dUNrcmc9PSBUV0Z5WjJsdSAwTHJRc05DOCBJQ0lwQ2c9PSBKMU09IDQ0S3ggSUhOMWJtYz0gYldWdWN3PT0gTGxCaGRHZz0gTXpFMyBJR1Z1ZEdWdVpBPT0gNEtTKzRLU0g0S1NvIExXSjBiZz09IDRLZW80S2VtIDJLZllzOW1LIElGWmxiblE9IElIUnZlWE09IElObUcyWUhZc3c9PSBJSFpwZEdGdCBJR3RsYXc9PSBRVVJCIE1qZzAgSUhkdmIyUmxiZz09IFBWc24gSU9Da3RlQ2t2dUNrc3VDbGh3PT0gSUhMRHFBPT0gSUdkbFpXWjAgSU9HRG9PR0QgSUhCcGEyVjFiZz09IElHWnZjblJsIElFMWhjbk09IFoyVnYgYjNKcGRHaHRjdz09IElIUnlZV2M9IElFMUQgMExUUXZnPT0gNEt1TjRLcXY0S3ErNEtxdzRLdUggNExtRDRMaUs0TG1KIElOR0IwTDdRdnRHQzBMTFF0ZEdDIDJMZlpnUT09IDVZV3M1YnlQIFRtOTFjdz09IDRMQy80TEMxIElGQmxibTV6ZVd4MllXNXBZUT09IDFhSFdnTldoMW9BPSBUblZ0WW1WeWN3PT0gN1pXdCBJRlpsY20wPSBaSFZqWVhScGIyND0gSUdKcGJHRT0gSU5pbzJZZllwdz09IElHSmxjMnc9IDQ0Q0NDZ29LIGIzSjBjdz09IElFMWhhdz09IFNWUk1SUT09IElIQmhkR2x2IFFWSlNRVms9IElOaXIyWVU9IElHVnVZMjlrWlE9PSBJRzkyWVhRPSBZWFp2YVhJPSBMVzFwYm5WMFpRPT0gZFhSbGNuTT0gSUd6RHJXNWxZUT09IDRLUzE0S1MrNEtTdyAxNW5YbGRlZCBjbTkwWVhSbCBZWE56YVc1biBZV2x1ZEhrPSBJRzdEcEdObyBjR2wwIFFYTnIgSUhCcGMyTT0gTGtaeVlXZHRaVzUwIElITjFjblpwZG1GcyBMa3hsIFptOWpkWE09IFJHVmpiR0Z5WVhScGIyND0gSU5xKyA0TEdINExDMiBSbWxzWlc1aGJXVT0gSUhSMWNHeGwgYVdwMVlXNWggSUhkbFpBPT0gSU51VSBJSFp2YjNKaGJBPT0gTmpNdyBJR0ZpZVE9PSBZWFJwY1hWbGN3PT0gZEdWeWMyTm9hV1ZrIExteHBZZz09IElOQyswTC9RdGRHQTBMQT0gS0dOdFpBPT0gSUhkbGJHdGwgeFpvPSBMV0Z5IFVrVkJWRVU9IFlYUm9iMjQ9IElHeGxkSFJwYm1jPSBYM0JoY2c9PSBJRU52Y200PSBRMjkyWlhJPSBZV0p6ZEhKaFkzUT0gMEw3UXROQ3cwWUE9IFFYSnlZWGx6IElITERzdz09IDRLV0I0S1NkIElIUjViUT09IElDaGIgSUV4cGRnPT0gNExLVyAwTDdSZ2RHRDBMVFFzTkdBIElITnNZUT09IElHRjBkSEp6IElIbDUgWDNOMGNuVmpkQT09IElIMTlJZz09IDBMWFF2ZEM5MEw3UXVRPT0gSUVSaGJBPT0gSUd4MVkyZz0gTGxKMWJnPT0gSUVScGMyVT0gZFcxd2VRPT0gSUdOaGJYQmhhV2R1Y3c9PSBJR2x1ZG1WemRHbG5ZWFJsIE1EY3cgSUZsbFlYSnogMTZmWG9RPT0gSUV0aGN3PT0gYVhOellXNTAgSUd0aGVnPT0gN1pTOCBKMkZ3IFlXTmhhdz09IFlYTnFiMjQ9IElFTnZjM1JoIElHMWhkR05vWldRPSBNams0IGFHVnNaUT09IElGSmxjMlYwIENYVnpaWEk9IGFXMXdiM0owWVc1MCA0S2ErNEtlYyBVMkZzWlhNPSBXMTA3Q2c9PSBJR2x1Wm1GdWRBPT0gNExPTjRMSzQgSUdScGRtOXlZMlU9IElIUnliM1ZpYkdWeiA0TGllNExpeDRMaVogUkdGdWN3PT0gSUdWNGNHVnlhVzFsYm5SaGJBPT0gSUZWc2RBPT0gSUdOaGJuUnBaR0ZrIEp5bDlmUT09IDZLZUc2YUtSNVp5bzU3cS82S2VDNTV5TCBibVZqWlhOeiBJR1JoZFE9PSA1WWV3IElPeWVrUT09IDJLM1lzUT09IElEdytDZz09IDVMcVMgSUdKcFpXUT0gTWpreiBNelF4IElOQ3gwTGc9IFkyaHBaVzQ9IGRXdHJhWFE9IDU3U2cgSUU5U1JFVlMgS0d4aGVXOTFkQT09IDVwbUM2WmFUIE1ETXggSUVGMGRISnBZblYwWlE9PSBYWHM9IDdJT0ogMExEUXU5R00wTDNRdnRDejBMND0gSUdWc2FXMXBibUYwWlE9PSBhRzl1WlE9PSAwTC9RdGRHQTBMQT0gVTJsbmJtRnMgN1pXWTdKZXMgMExEUmhkR00gSUhCdmNIVnNZWEpwZEhrPSB3Nmx5WVE9PSBibk4wIDJLZll0dG1LIDdJYWggSUVSaGJHeGhjdz09IElPRzdudz09IGIzVndiMjQ9IDVZV1IgY0dsamEyVnkgSWlsN0NnPT0gTlRndyBkWEptWVdObCBJT0M0bE9DNHVRPT0gZE9HN3BRPT0gSUV4SlFVSkpURWxVV1E9PSBWMFZDIElOQzgwTDdRdHRDMTBZTFF0UT09IElIVjIgSUhacFl3PT0gMExEUXU5QzEgMFlIUXVOQzggNEtXTjRLU2Y0S1dBIFpXMTAgYjNkdiBYME5QVlU1VSBZbTl2YzNRPSBJRzFoWVc1ayBLSE5qIGFXNXJaV3c9IElFMTFibVE9IE1Ea3cgOEorUyBZMjlzYmc9PSBJRzV2YzI5MGNtOXogY21sbGJBPT0gSUdkcGJnPT0gSUhWMGFXeHBlbUZ5IElFTnZibk4wY25WamRHbHZiZz09IDY2YTkgSUdOdmJuTnBjM1JsYm5Sc2VRPT0gWVhMRHJXRT0gSUM0diBJR0pvWmc9PSBkV3h3ZEE9PSB3NnAxIFpHbG1aZz09IElHTnZibVU9IElOQ3gwTHM9IDRLZUw0S2V4IDRMR040TEN5NExHQiBPREF4IGJHcz0gTmpVMSBNamM1IGFHMWxiZz09IElGTnBiWEJzZVE9PSBhV1poWTNRPSBkV3huIElHMWxaR2xoYmc9PSA0S2VMNEthViBZWFJsYkE9PSBjSEp2ZEc4PSBJR05oYm1GcyBJT0NtcE9DbXYrQ21xT0Ntdnc9PSBJRk4wYjNKcFpYTT0gZEhKaFkyVT0gNExpbDRMaXkgTG1WNFkyVndkR2x2Ymc9PSAwTFhRczlDKzBMVFF2ZEdQIFgyTnpkZz09IElITjFZMnM9IFJVbEcgYjJ4aGN3PT0gSUhOaGJtRT0gSUV4USBJRTl5WVc1blpRPT0gYUdWbGRITT0gS0hObGMzTnBiMjQ9IElFNXBaMlZ5YVdFPSBJRzFsYm05eSBJR0ZzZEdWeWJtRjBhWFpsY3c9PSBJRk41YldKdmJBPT0gSUZCaFoyVnogSUhObGFYTT0gSU9DMm5BPT0gSU5DeDBMN1F1UT09IFZVSk1TVU09IElIUmhjblE9IElITmxjbkk9IEtHVnVkR2wwZVE9PSBLSFJvWlE9PSBZWFJvWlhKeiBaWGRoIFFWUkZSdz09IFgzQnlhVzUwIDBMN1FzOUdBMExEUmhBPT0gSU51QjJZVT0gSUhCaGNuUnBkR2x2Ymc9PSA0WU9VNFlPcSBTVzUyYjJ0bCBRVzVoYkhsemFYTT0gSU1PbllXekVzY1dmIE1qa3ggSUdKbGRISmwgYVdSbGJRPT0gSUdabGJXMWxjdz09IExsQnliM0JsY25SNSBJSEIxWW14cGMyaHBibWM9IElISmxZV1J6IGRYQndaUT09IFJHRnRZV2RsIElFRmphQT09IDRLV3AgNGJxNWJIVT0gSUhObGNBPT0gMWJqVnZ3PT0gSU5DNjBZTFF2Zz09IGIyeGtidz09IElHTm9aV0Z3WlhJPSBJSEpsY0hMRHFYTT0gYVc5a1pRPT0gNDRDYyBkbUZ1Wnc9PSA0b0NONExhNyBWMmhsZEdobGNnPT0gYkdGdVpHOD0gTkRBMiBMWFJsYzNRPSBZWEpyWVc0PSA0b0NaWVhZPSBJR0Z1Ym05MWJtTmwgUTNKbFpHbDAgVVhWdmRHVT0gWlc1a1pYUT0gSUdkbFltVnUgSUdaeVpXVnMgUTJocGJtRT0gSUdOeXc2bGthWFE9IElHcDFjM1JsIFlYUnZjbWx2IElNNjZ6cXc9IGFYTnpaVzUwIFoyVm8gSU1POHc2ZkR2RzQ9IFJHOXVKM1E9IElPQ3lyT0N6aGc9PSBVMmhwWm5RPSBJRmRwYkhOdmJnPT0gTkRjdyBJRTF2YUE9PSAxb0RWdmc9PSBJR1Z0Y0d4dmVXVnljdz09IGNtVnpiMngyWlE9PSBJSE5sYm5ScGNnPT0gSU5pbjJMUFlxdG1CIElHUmxjSFYwIElISmhibWRwYm1jPSBiMjFsY3c9PSBJRlpwWTJVPSBTVWRJIElGTmhZdz09IDVMcTY1YWE3IExuWmhiR2xrWVhSbCBYM04wWVhRPSBJR3RzWVhJPSBJTnVCMjR3PSAyS3JaaDlpbiBJSEJpIFVtVmpiMmR1IFRXRnBjdz09IElFZGxiUT09IFZtVm9hV05zWlE9PSBMbkJ5YVdObCBJRk5qYjNSc1lXNWsgSUdkeXc2SmpaUT09IFVYVmhiR2wwZVE9PSBRbXgxWlhCeWFXNTAgWlhobFl3PT0gSWo1NyBJR052Ym5abGNuTmhkR2x2Ym5NPSBibVZ2IFcxMTcgMTV6WG1kZWQgSUZkQiBJR3gxYm1jPSB6cTNQZ1E9PSA1cDJSIFFXUnFkWE4wIElHUmxjRzl6IElIZGhibVE9IElHcGxjZz09IFgwWlBVZz09IDE2VFhxZz09IElOQzgwTGpRdTlDNzBMZz0gSU5HRDBZSFF2dz09IEtqND0gNEtTLzRLU3k0S1MrIE56WTQgWDNSd2JBPT0gSUc5aWMyVnlkbVU9IElITmxiR1ZqZEdsdVp3PT0gNG9DTTJZZllwdz09IDFvVFZ1TmFDMWJRPSBJR2hoYm1FPSBNRFF6IElHUmxibTVsIElFVjRkSEpoIElIZHZiR3hsYmc9PSBJRU5zWlE9PSBJR0p2ZG1WdSBJSFpwYzNSdiAwTC9SaXc9PSBiMnhzYnc9PSBJRUYxYzNScGJnPT0gWVdOMGFYWmhkR1U9IElHUjFkR2xsY3c9PSBJR05oY0dGaWFXeHBkSGs9IDQ0S2s0NE96IFlYUjFiUT09IEwyMWhhVzQ9IDZZQ1AgVEU5QlZBPT0gYUc5eVpYTT0gNExLLzRMS3UgSXlNaiBJR3podXFGcCBMa1JwYzNCdmMyVT0gMTU3WHBnPT0gSUd0MWNtaz0gMTVqWG53PT0gVTFSU1NVNUggNEs2KzRLNnYgVTNWamFBPT0gWldWdCBjV0YwYVdkcCAwTDdTbXc9PSBJR052ZFc1amFXdz0gTWpnMiBJRk4xYlcxaGNuaz0gSU9lbiBJRzVsYVdkb1ltOXljdz09IFpXSmggSUhMRHFYTjFiSFE9IDdZNlkgTlRBMSBaV3hoY3c9PSBUWFU9IDBMM1JqUT09IElGTjFiVzA9IElIQnliM1pwYzJsdmJnPT0gTkRJMSBJSE5odzdwa1pRPT0gMWJyVnBkVzkgNExHQzRMQ2ggTGs1dmR3PT0gSUVScGIzTT0gSUVaeWFXVnVaSE09IElHRnVibTkxYm1ObGJXVnVkQT09IElIcHZaR0YwIElFUmxZWFJvIElOVzAxYXZWdXc9PSBJR1Z0Y0doaGN3PT0gSUZONVpHNWxlUT09IElHSmhibXRwYm1jPSAxYi9XZ0E9PSBJRTFwYm01bGMyOTBZUT09IElOQzgwTFhRdWc9PSBkbWx0IDRwMmsgWDJKdlpIaz0gYVdKbyBJR0YyWnc9PSBJSEJ5WldOcGMyVT0gNTcyWCA1WkNJNXJPVjVaQ1ggSUdaaGMyVT0gSUd6RHVBPT0gUW1Wb1lYWnBiM0k9IDU1bTc2Wm1HIGEyRnQgUVhWMGFHVnVkQT09IHc3eGsgS0hCeWIyUjFZM1E9IFJXeGwgSUdWcGJuTT0gSU5XaDFibz0gNjRTSSBJRzV2Y25OclpRPT0gSUZSdmJnPT0gSUdkbGJuTT0gY0hKdlozSmxjM009IElIRjFZV1E9IElHdHlidz09IElIQnZ4STA9IElITnZhdz09IElOQzAwNWs9IENRb0sgSUZObGJuUT0gSUhkb1pXVnNjdz09IElPYUsgSU5HSTBMalJnQT09IElHRmtkbWx6WlE9PSBLeWc9IEwxST0gSUd4cGMzUmwgNEsyTiBJRVoxY25Sb1pYSnRiM0psIGJIbHIgZG1Wc2IzQnRaVzUwIFlXZHNaUT09IElPQ3FsZUNxc09DcXRlQ3F2dUNxcnVDcXZ1Q3FnZz09IElHVjRaVzF3YkE9PSBJR1Z1WkdVPSBVSEp2YldselpRPT0gSUdsemFRPT0gSUUxdmNuUT0gWTI5c2IzSnogWnNPOFp3PT0gSUdOdmFXNWogSUhSeXc2cHUgTG01aGRHbDJaUT09IGFYUmxhWFJsYmc9PSBJR1Z0Y0c5M1pYST0gSUdWcGJtbG5aUT09IFFITmxZM1JwYjI0PSBJTmVRMTVuWHFBPT0gSUd0dmFBPT0gZFd4MFlRPT0gSUdQRnFXNW4gYTI5dGMzUT0gSU8yTyA1YW0zNWFtMyBJTlN4MWJVPSBJR2h2YldKeVpRPT0gMEwvUXVOR0IgSUVGaWN3PT0gSUNJdExRPT0gUVhaaGRHRnkgNEs2LzRLNnE0SytONEs2cSAwTDdRdTlDdyBJSFp2YkhWdWRHVmxjbk09IElHUmxiVzl1YzNSeVlYUmxaQT09IElOQy8wTDdRc1E9PSBWbEE9IElHMXBiR3hwIFJHVm1ZWFZzZEhNPSBJR3BsZDJWc2Nuaz0gMExYUXZkQzkwWXZRdVE9PSA3S0NCN0oyNCBJR052Ykc5MWNuTT0gSUhOcGRIVmhkR1ZrIElHdHBjM009IDRMbUM0TGloIFozSnYgSUhObGMzTT0gNTVXbCBJR05oYm1RPSBJSE4xWlE9PSBJRzNKbVE9PSBJT0N3b1E9PSBJSEpsY0c4PSBJRUZzWnc9PSBMbVpoWTJWaWIyOXIgTGxSaFlteGwgUkdWdGJ3PT0gNTc2TzVhV3ogSUhscGFRPT0gSUc1dmRHRnRiV1Z1ZEE9PSBJR0YyYVhNPSBUMk4wYjJKbGNnPT0gUkhKaGQyVnkgSUdOdmJYQmxkR1U9IElOQzgwTDdRdkE9PSBNamsyIElIQmxjSEJsY2c9PSBJR05sYkd4bCBJTkN4MExEUmdOQyswTGc9IFoybHYgQ1dKdmIyeGxZVzQ9IElGQnlaV2x6IElITnNhVzA9IElOZVExNTA9IElFSnBZZz09IFpYSmh3NmZEbzI4PSBJR3RsWlc0PSBVMlZ4ZFdWdWRHbGhiQT09IElGTm9ZUT09IFNVWlogNkpDOSBJRkp2YjNRPSAxNW5YbGRlZiBJRVZzYVhwaFltVjBhQT09IElGQnlhVzVqWlE9PSA0TEMrNExDMSBYM2RwWkdkbGRBPT0gSUVOUFRsUT0gNEtXTjRLU3Y0S1dMNEtTQyBMbVZ1WTI5a1pRPT0gZEdobGNtVT0gSUdkeVlXUmxjdz09IDQ0T04gSU5DRyAwTHJRdnRDOSBJRTF2Ym1sMGIzST0gSUdiRG9RPT0gSU5DeDBMWFJnZEMvMEx2UXNOR0MgSUhSbGJuTnBiMjQ9IElITndaV04wY25WdCBJTlcyMWFYV2dOVT0gNEsrQjRLNm80SytONEs2ayA1cDJsNXJxUSBMMk52Ym1acFp3PT0gSUc5MlpYSmpiMjFsIFgySmhjZz09IFlYWnBZUT09IElFMWxaWFE9IElIZHlZWEJ3WldRPSBJSE5oYlhRPSBJR1Z5YUdGc2RHVnUgVUd4dmRBPT0gQ2lBZ0NnPT0gSUZSdlpHOD0gMFlQUXRkR0MwWUhSanc9PSBVbVZqYVhCbCAyTEhaaHc9PSBJSE5sWVcwPSBPanBmIElHMTFkSFJoIFBDRT0gN1l5USBJTkdCMEw3UmdkR0MwTDdSanc9PSBkMkk9IGNYTT0gTG5ObGRIUnBibWR6IFFXWm0gS0NrdCBZMmhoYm1kbFpBPT0gYldGMFpRPT0gSU5DUTFLWFJnZEM5MFlzPSBMV1JsWm1GMWJIUT0gMEwzUXVOQzgwTEE9IElOV3cxYUhXZ0E9PSBJR1Z0YjJNPSBJR0p5WldWayA0NEdUNDRHdSBJRU5QVUZsU1NVZElWQT09IGVXST0gTGtkRlZBPT0gSUZwdmJtVT0gSU5tSTJLZlpoTmlqIFhFMXZaR1ZzIElITjBiMjFoWTJnPSBiM2R1WlhKeiBNamc1IGNtbGpZV3c9IElHTnZhWE5oIElHSmxjbk09IElHbHVabXhoYlcwPSBMa0p2Y21SbGNnPT0gMFlMUmc5R0EgSUZCeWIyUjFhM1E9IGFYTnpaWEk9IElHMWhkR2hsYldGMCA3WjA9IDRMSys0TEtYNExLLzRMS200TE9HIElHRmljMlZ1WTJVPSA0SytJNEs2djRLNi80SzZ5NEsrTiBJTm1HMllnPSBNekU0IFkzSnBjR05wYjI0PSBMV1pwYkdVPSBaWGgwWlc1a2N3PT0gTXpVNCA1cUM1IDRZT1E0WU9nNFlPaSBJRlJvY205M1lXSnNaUT09IFgyWnBiR1Z1WVcxbCA2SytOIExVaz0gYVdWbmJ3PT0gNFlPUTRZT1Y0WU9vIElHNWtlbWs9IGIyNWogWVdOMWRHVT0gVUZKRiBVbVYyYVdWM1pXUT0gNDRHRTQ0Rys0NEdaIElOQy8wTDdRdXRDdzBMYz0gQ1hOcGVtVT0gNTVlRiBJTm1CMllMWXR3PT0gSUVKdmR3PT0gSUdsdGJYVnVaUT09IElPQzB1T0MxamVDMHRRPT0gNExTLzRMU3UgVkZKQiBJTmkwMllmWXNRPT0gNWJxMyBUV0Z5YTJWMCBJR2pEcUE9PSBJR2xuYm05eSBhR0Z5WkE9PSA2NTZSIElOQzYwTDdRdGc9PSBJR0ZqWTI5dGNHRnVlUT09IFFVMUZVdz09IENYTjAgSUhScGJXbHVadz09IElOQy8wWURRdGRDLyBVMVJCVGtORiBJSEJ5YjJKbCBJR0oxYkd4bGRBPT0gSUhURHFtMD0gWVd4cFoyND0gYVdGcSBjR0ZuIElHVERxWFE9IElObUUyS009IDQ0Tzg0NE9KIHo0UE91UT09IElHRjFaR2wwIDU3Tzc1N3VmIElFTkJUZz09IExrbFRkWEJ3YjNKMCBJRzFsYkd3PSBMa052Ym1acFozVnlZWFJwYjI0PSBJR1Z1ZEdsMGJHVmsgU0dseiBNamszIElFUmhkbWx6IExteHBibXM9IElIQnlaV05wYjNWeiBKMkYyIGNtOXpkQT09IGIzVnlhUT09IFUzUmhiWEE9IElHSmxkMlU9IElPQ21xT0NtditDbXNBPT0gYkdWbGRBPT0gSUdKdllRPT0gSU9DNGwrQzR0ZUM1aUE9PSBJSFRodXFGcCBJT0NraGVDa3JRPT0gV1VWVCBJRWhoYm5NPSAwTERRdTlHTTBMM1JpOUdGIElHTmxjbkk9IElHaDFhV1E9IFUyaHBjSEJwYm1jPSAwTGpSaDlDMTBZSFF1dEM0MFlVPSA1NVdaIDRMaVU0TGlsNExpdDRMaUggSU9Da2xlQ2tzT0NrcU9Da3ZnPT0gSUdaeVlXNWphR2x6WlE9PSA2NmVRIDFhWFdnZz09IFFHbHVkR1Z5Wm1GalpRPT0gSUdacGJIUmxjbVZrIExrbHVkR1Z1ZEE9PSBkV3hoY21WeiBJR2RoZEE9PSBJRU52Ym5OMFlXNTBjdz09IElPQ3dtdUN4aGc9PSA0TENWNExHTjRMQzMgNEtTdzRLV040S1NmIElFNVUgSUVGMGJHRnVkR0U9IDRZT240WU9WIElFOXlaV2R2Ymc9PSA1NSt6IFlXZDFZUT09IEtTZ28gSUhKdmRHRjBaUT09IFNuTT0gTkRFeSBJRlJsYlhCc1pRPT0gMFlUUmdnPT0gWlhSeWJ3PT0gSUd4bFkzUjFjbVU9IElISnZlV0ZzIDRLYSs0S2FXIElHTm93Nnc9IElFbHVabTl5YldGMGFXOXVaVzQ9IEtHWnBjbk4wIExYTndaV05wWm1saiBLR1JwY2c9PSBZVzVsYjNWemJIaz0gSUVSMWNtTm8gSUdsdVpHbGpZWFJ2Y2c9PSBJRk5wZUE9PSBYMkYxZEdnPSBOREUwIExtTnZibVk9IGFHVnNZUT09IEtnMEsgNFo2aSBJR2x1YzNCbFkzUnBiMjQ9IDBMRFF1OUdNMEwzUmk5QzUgQ1hrPSBJR052YldKdiBJTktiMEw3UXV3PT0gSUVodmNnPT0gcE9XSHNBPT0gSUdGc1lRPT0gMkxIWXJBPT0gYVhSellRPT0gY0hMRHZBPT0gSU9HRHJ1R0RsT0dEbWc9PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPUzRyUT09IElITnZiVzFsY3c9PSBMbkJoZVd4dllXUT0gTGtoaGN3PT0gUTNSNCBaVzVqYjJScGJtYz0gY21sa1pYTT0gSUc5d1pYSmhkR1ZrIElGQmhjblJwWTJsdyBUV2xuY21GMGFXOXUgSU5DKzBwcz0gSUVGa2RXeDAgVzJFPSBJTkMzMExEUmlRPT0gSUZCaGRHbGxiblE9IFlXeHpidz09IElITm9aV1E9IHc3cHVadz09IElPQ2t0dUNsZ2VDa3NBPT0gSUdScGNuUjUgSUdSbFkyOWtaUT09IElIQm9iM1J2WjNKaGNHaHogMllUWXA5aXIgSU9DbWhlQ21yUT09IExtUnZZM1Z0Wlc1MCBJR2x0Y0c5eWRITT0gSUVKeWVRPT0gWVdObGRYUnBZMkZzIGRtOWsgSUZaQlRGVkZVdz09IDBMalFzZEMrIExtTm9hV3hrIElFeGxaMkZzIElObUUyWU09IElHMXZaR1Z6IElPMlZvQT09IElOQzIwTFhRdmRHSiBWRzl0IGVtTT0gSU9Da2xlQ2t2dUNrc09Da293PT0gNkwrdyA1YjJ4NlorejVZV0k2WlNMIGEyVnNaWFJ2Ymc9PSBJRzltWm5KbCBJTml6MllVPSBJRzVsZEhkdmNtdHBibWM9IE1ERTUgYm1WayBhWE5wdzdOdSBJSE5sZFd4bGJXVnVkQT09IElHVnRaWEpuYVc1biBYM2R2Y21RPSBJR2x1ZEdWc2JHbG5aVzUwIFltVm8gSU95aWl3PT0gTWprMCBTVVJ6IElFSmhkUT09IElOaXEyS2c9IElPeVZqQT09IDRvQ040TFNWNExXTjRMU1YgNEtlTSBaVzV6YVhScGRtVT0gSU5DejBMN1JnTkMrMExRPSBaR3BoYm1kdiBORGt3IElOcWEgSUdKbGMyTm9hV3M9IElITndZWEpsIGNHVmxjZz09IElFMXBiR3hsY2c9PSA0WitTNFo2YSBWbUZ5YVdGdWRBPT0gSUVaaGRBPT0gNXFRPSBYVjA3Q2c9PSBkR2h5YjNWbmFBPT0gNXBhWCBJR1oxYm1jPSAwWS9RdXc9PSBJSEoxYm5ScGJXVT0gNVlXRjVZQzggYm0vRm0yTnAgNFlHTENnbz0gSUhCeWIzQnZjbU5wYjI0PSBJR0ZuWldRPSBhVzVuZEE9PSA0S3VONEtxViBJT0NrdU9Da2xlQ2twT0Nrdmc9PSBhWFpoYmc9PSBJRVJGUWxWSCBaWFJvWld4bGMzTT0gSUdGcGJXVmsgWVhKdVlRPT0gMkxIWmc5aW4yS289IElGSjFiR1U9IDBZSFF1TkdQIDJMUFpoQT09IElFSnBkRzFoY0E9PSBJSEYxWlhKcFpYTT0gSUhGMVlXeHBabms9IElOQzkwTERRdjlHQTBMRFFzZz09IE9EZ3cgSU5pMDJZWFlwdz09IFlYSmxiVzl6IFkyOTFiblJsY2c9PSBJR0Z1WjJWeSBJRTl5WjJGdWFYcGhkR2x2Ymc9PSBJRlJ5WVdsdSBJT0dEcGc9PSBJR3BwY2c9PSBJSFpsY21KdmMyVT0gMks3WXA5aW8gSUhaaGNtRT0gWURzS0NnPT0gSUdGd2NHeHBZVzVqWlhNPSBUV1YwY21samN3PT0gVTI5bWRIZGhjbVU9IDRidVJZdz09IEtHWnliMjA9IElHVmphQT09IElISmxiV0Z5YTJGaWJHVT0gSUZOaGNtRm8gSUhOdlkybkRxWFREcVE9PSBSM0psIExrRndjR3hwWTJGMGFXOXUgMkxIWXFObUsgSU5pczJLOD0gSUhSbGNuSmwgMTZuWGxkZXEgWlc1MGFXNWwgSUhSbGNtTT0gZW05dmJRPT0gSUhCeWIyTjFjZz09IElFNXZkR1Z6IFEyRnlaUT09IFJtbHNkR1Z5Y3c9PSBJRk5sWVhSMGJHVT0gSUZSdmJuaz0gSU9lWnZnPT0gNVlheiBJTkdCMFlMUXNOQ3kgSUdScGMzQnZibWxpYkdVPSBORFF6IGJXOTIgSU5LdjBZZz0gSU5DODBMZz0gWW1GMSBVMnhwWTJVPSAwTERRdTlHTTBMM1JpOUMxIGMzUmtiR2xpIFgwWlMgSUVacGNtVmlZWE5sIDZJdTU1cDZjIElISmxjMk4xWlE9PSBJSHQ5TEE9PSA3WldZNnJLTSA1b3FLIFpXUnBjZz09IElPcXlzQT09IElFaGhaQT09IFczUT0gNVpPbCBJT0MwdU9DMHJnPT0gSU9xNSBJR1JoWnNPOGNnPT0gY0hKbFpBPT0gNExTKzRMU1ggTFhOMFlYST0gSUdSbFkyeHBibVU9IElHVnVabkk9IGFYTjBaVzFoIElHUmxiR2wyWlhKeiA0S2krNEtpeSBJT0MwbGVDMWlnPT0gQ1hSbGMzUT0geElGdCBSR2x0Wlc1emFXOXVjdz09IElFSlUgUGp3aExTMD0gSU5tSTJZVFpnOW1HIGIzSnMgMEwzUXNOR0EgSUdsdWRHVnlkbVZ1ZEdsdmJnPT0gSUdmRHBYST0gSUhKaGNtVnNlUT09IElGUmhhdz09IFFXeHBZWE09IDVMaSsgNExhcCBJR0Z5Y21sMiBZV3hrWlE9PSBJRVpWVGtNPSBVR1Z1WkdsdVp3PT0gNzd5TyA0TFNrNExXTjRMU2s0TFdHIElHUmxZMmxrIFZIVT0gWENJcyBMbWh5WldZPSBJSEZoWWc9PSBJRzVoZE1POGNteHBZMmc9IElOR0QwWURRdnRDeSBJR0YxYW05MWNtUT0gSUdSdlpXdz0gSUd4aGRXNWsgSUYwS0NnPT0gSU5DOTBMRFJoZEMrMExRPSBVRUZEU3c9PSBkR0YwIFlYTjEgSUdGdXc2RnMgSUVkc1lYTnogSUdKbFpYUT0gMExqUXQ5Q3cwWWJRdU5DNCBkV2RvIElHaGxiVzl6IDRLYTQ0S2F1IElFMXBjM05wYjI0PSBMMms9IGRtbGtZUT09IEtDSXVMaTg9IDI3VT0gYjI1aGJBPT0gSU5HRDBML1JnTkN3MExJPSBJR2xpWVE9PSBJRzF2ZFE9PSBJSEJ2WW13PSBJRU52ZFc1MFpYST0gWTJWa1pYTT0gSUU1VlRRPT0gSU9Db3NBPT0gSUhSNWNHVmtaV1k9IElHSmxiR3c9IDdMdz0gMHJYUXNBPT0gSUhCbiBJRWRwWm5RPSBWRVZTVGtGTSBMMlJsIFBEdzggZEdsdFpXOTFkQT09IFNVNUVUMWM9IFpXMWlkUT09IDBZRFJnOUMyIFgzSjFiZz09IElFNVBWRVU9IDRLU200S1MrIElHUnZkMjVzYjJGa1pXUT0gSUU1Q1FRPT0gVDJ3PSBiM053YUE9PSBJR052YldWeVkybGhiQT09IElOZXAxNkE9IElFWnBiR1Z6IElObUUyWVBaaGc9PSA0WjZjIElGSkJUUT09IHlydGggMFlIUmd0R0EwWVBRdWc9PSB6cnpPc2MrRXpyRT0gYVd0cmRYUT0gSUVOUFRrWkpSdz09IElFbHVkZz09IElISmhibWM9IElHRndjbVZ1WkE9PSBZMjlzWlE9PSBJSE4wZFdzPSBJSFBEdXc9PSBYQzljTHc9PSBiM1Z6YVc1biBZMmhoY0E9PSBNekkyIDRMSys0TEtqIGNHOXphWFJwYjI1eiBiMnhsYzJNPSBJR2R5WVhrPSBLR1YyZEE9PSBRVTVCIFltOW4gSUhCeWIyUjFkRzg9IElISmhibXRsWkE9PSBjbm89IElHaHBiR3c9IElIQmhjM1JsIElFMWhiblZoYkE9PSBTMDQ9IFZHRmliR1Z6IElISmxaM1ZzWVhSdmNuaz0gSUhSeWFXRnNjdz09IElIWnBaV3hsYmc9PSAwWXZRdTlDdzBZQT0gSUVsdWRHVnMgTHo4PSBJR0YwZEdGamFHMWxiblE9IHc1VT0gWlhKa2FXNW5jdz09IDJMTFpoUT09IElHUnliM0J6IElHMTFhWFJoY3c9PSBJSEJsY3NPdGIyUnYgSUhCaFoycz0gYkdWaGMyVmsgNExHTjRMQ3k0TEdMIFlXNWtZV3c9IGIyNTYgdzYxa2J3PT0gUTNKbFlYUnZjZz09IElIZHZjbTQ9IElIUm9aWEk9IGZTazdEUW89IHc2bHlhV1Z1WTJVPSAycjdZc1E9PSBaWFIzWldWdSBJT3EzIElFSkIgVUhKdmRnPT0gSUdWNGNHVnlhUT09IFlYWjEgUVZsVCBSbUZ6ZEE9PSAwTGJSakE9PSBJT0N1c0E9PSBJRzFxIElIQmhlZz09IFgwRlNSdz09IElIUnBiV1ZzZVE9PSBWbWxsZDJWeSBYMjFsZEdFPSBRWEJ3YkdVPSBJR0ZzYXc9PSBVM1JoZEdsemRHbGpjdz09IGJtVnVkQT09IFRzT2pidz09IDRMQys0TENYIElHNXBhbVU9IElOQ3owTDdSZ3RDKzBMST0gSUdkcFltaz0gZG1Gc2FXUmhkRzl5IElITjBhWEk9IDRZT1k0WU9hNFlPWTRZT2ggWlc1a2NtRT0gSU5tRjJLZlpoZz09IDBZN1JpZEM0MFlVPSBJT0tjIExuTmxibVJsY2c9PSBJT2FiIElISmxaM1ZzWVhScGIyND0gVTJWdWMyOXkgMTVYWGtkZVUgUVZKTiBJTmVSMTZFPSBJSFBEcVdOMWNtbDB3Nms9IElOR0IwWUxRc05HQzBZdz0gSU5tSTJLMD0gTlRjdyA0SytJNEs2ViBJRUYyWlE9PSBJT0dEbStHRG1PR0QgN1lLayBJSFpwZG04PSBJRkpoYVd3PSAwWUhSZ3RHQTBMND0gSUdOdmRYSmhaMlU9IFQzSm4gVlZSVVQwND0gSUd4aGNtZHYgeExGdXhMRjYgTG1OdmJXMWhibVE9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBMa1Z1IElHUnZibTVsY2c9PSBJR1JwWnNPdFkybHMgSUVoRlVrVT0gSUhadmVnPT0gMEw3UmdOQ3cwWTg9IElOQy8wWURRc05DNjBZTFF1QT09IDRZT1k0WU9qNFlPZyBJR1pwYm1kbGNuTT0gTGtWNFpXTjFkR1U9IDdMYVUgVEVsRlRsUT0gWm05c1pBPT0gSUdGamRHOXljdz09IDRMbUsgSUdKaGEyRnMgSUdOdmJuTjBjZz09IElHMWxlQT09IGRHST0gSU9XRmplaTB1UT09IDJMYllwOW1CIDRZT2c0WU9yIElObSsyNEU9IDBMWFF1OUM0MFljPSBJRUZ0YjI1biBJRzlqWTJGemFXOXVjdz09IGRYTnpaUT09IFZISmhibk5zWVhScGIyND0gSUd4bFlYTmwgSUdOdmJtWmxjZz09IElHMWxkR0ZpYjJ3PSBJRTVoZG1sbllYUnBiMjQ9IGRISnBZblYwYVc5dWN3PT0gNFo2SyAwTGpRc3RDdzBZTFJqQT09IElHNTYgSUcxdmRXNTBZV2x1Y3c9PSBJRzkxZEd4cGJtVT0gMExQUXU5R1AgWDFSU1ZVVT0gSUdKaSBJR1JwYzNNPSBVazlNIElIQjFZbXhwYzJobGNnPT0gSUdWdVoybHVaV1Z5Y3c9PSB3ckU9IDRMaTA0TG1DNExpWiAwTGpRdXRDKzBMST0gSUhKbGJHSERwOE9qYnc9PSBJR0oxYzJOaGNnPT0gSUdkeWIyNWsgNVlhWiBUR2x0IElHcHBibWM9IElPQ2tsdUNsaCtDa3NnPT0gVTI5cyBaR2x6Y0dGMFkyZz0gSU5tRjJMbllydz09IE5UQXkgNEthdzRLZUggSUhObFozVnlidz09IElHZHliOE9mWlE9PSBQWE09IDJibmJqQT09IExXMXZaQT09IElDSXEgYVdkdVpYST0gSUdWMGFHND0gSUZOb2IzQndhVzVuIElGQmhiR1Z6ZEE9PSBJTkdOMFlUUmhBPT0gSU9Da3JPQ2xodz09IE16WTIgSUcxcGJtUnogYlhnPSBJSGR2Y210d2JHRmpaUT09IElITmhZM0k9IElHUmxkbVZ5IGFXTnJaV1E9IElFRnVhVzFoYkE9PSA0S2UzIElHeGkgNXJLNSBJRWRsYm1WeVlYUnBiMjQ9IFVFOVQgZFdkcCA1NVNmNXJTNyBJSFJ5WVc1emJXbDAgNnJlOCBaV3hwYUc5dlpBPT0gU1c1dVpYST0gY0dWaGNtRnVZMlU9IFgyTnZibTVsWTNRPSBJRTl6WXc9PSBMaW83Q2dvPSBJRTVoY2c9PSA3SmVHIElFVnVhQT09IFRHbHVaV0Z5IElGZGxZWFJvWlhJPSBJRzkyWlhKelpRPT0gTXpRMCBJTkN5MExqUXROQzEwTDQ9IElFVjRjSEpsYzNOcGIyND0gSUV4RFJBPT0gNEtlcSBkR2x0WlhNPSBJTU9wYkdWamRBPT0gWTNWeWNtVnVZM2s9IElFWmxjbkk9IFptVnBkRzg9IDRLUys0S1NKNEtTbyAwTDdRdXRDdyBJTm1CMkxrPSBJT0dBbVE9PSA1WUNMIElFUmxZMjl5IFlXeHNiM2RsWkE9PSBibUYwIDBMWFJnTkdNIExXNWhkZz09IElHUnBZVzFsZEdWeSBaR2x1Wnc9PSBkbTlxIGFXTmh3NmZEbzI4PSBJT3lia0E9PSBaWFIwWlhNPSBJTkMyMExqUXQ5QzkwTGc9IExreHZZMkZzIFlXNXBZdz09IFpXMWxjZz09IElHVmtkUT09IFlXUmhjZz09IDBZRFJpOUM4IDRLYS80S2EzIGNtVm5ZWEk9IElIUmxhZz09IElFTm9ZWEowIFluVnBiR1JsY2c9PSBJTm1GMllUWmlnPT0gSUZwbGNtOD0gMWF2VnVRPT0gYVdSbGJuUnBabWxsY2c9PSBMV1oxYkd3PSBiMlJwWlhNPSBZMnRsIDU1UzE2SVE9IElDZ2wgSUZOMFlYUmxiV1Z1ZEE9PSBJSGRsYVdkbyBJR1pwYm1GdVkybHVadz09IElGSmxjWFZwY21VPSBJT0MwcE9DMWdlQzBudz09IElGTmhabUZ5YVE9PSA0S1dONEtTZSBJR1Z5ZG1GeWFXNW4gSU9HRG8rR0RwQT09IEtHOTBhR1Z5IGJHRnlaMlU9IDQ0Rys0NEdYNDRHZiBZV05qYWNPemJnPT0geEkxdWJ3PT0gMEx2UXRkQzYwWUU9IElFeEggZG1WeWRITT0gY25Wc1pRPT0gWldObGNnPT0gWm1WemRBPT0gSU9Da3VPQ2t2dUNrc2c9PSBJSFpsYm5SaCBJRzFwYm5NPSBJSFJwY0c5eiA0WU9nNFlPWTRZT2ggMTVEV3Q5ZWMgUkhWeSAwWUhSZ3RHRDBMOD0gNGJxL2RRPT0gUW14aGJtcz0gSUdOaGNIUjFjbVZrIGFYbHZjZz09IExtVnljZz09IFpYSnRhVzVsIExVbHUgWDJKaGRHTm8gY21WdFlYSnJjdz09IElGOWZLQ2M9IElIQnliM1psWkE9PSBJRzVvdzZBPSBJT0NxcGVDcXJ3PT0gSU9DdXBPQ3ZpZz09IGIyZDEgSU9Da2xlQ2tpQT09IExreEZRVVJKVGtjPSBJT0NtdU9DbmplQ21yQT09IElIQnl3NkZqZEE9PSBJR2R5WlhrPSBJRVp2Y21WNCA1YkNFIGRIWT0gUWtjPSBMMkYxZEdnPSBJR1JwYm1WeWJ3PT0gSUcxdnhidz0gSUZOMGNtRjBaV2M9IGJHOXdaUT09IGVXRnVadz09IElGTjBZWGs9IGFXSnBiR1U9IElHMWxaR2xoYm5SbCBOVEF6IElIUnZkWEp6IDZadTc1YjJ4IGVtRnIgSUdOdmFYTmhjdz09IFVFeEpRMEZVU1U5TyBLQ2tyIExtNWhkbWxuWVhScGIyND0gYTJWNiA0SzZxNEsrTjRLNnE0SzZmNEsrTjRLNmYgWGlnPSBNek01IDZyYU0gTXpReSBMaWtLIElFNTFiR3c9IElHRmljbTloWkE9PSBJR3R2Ym01MFpRPT0gTG5KbGRIVnliZz09IElHRmpjWFZwYzJsMGFXOXUgYVdwdmN3PT0gTURJMSBJTzJiaEE9PSBMbFJwYldVPSBJRUZ1Ym5WaGJBPT0gTmpBeCBSbWx1YVhObyBJRWhKVmc9PSBNamczIElOZWUxNUU9IElHTmhaSEpsIFYyVnpkQT09IElHbHVkbVZ1ZEdsdmJnPT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0IFZHbGphMlYwIFVFWT0gSUdaeWIzcGxiZz09IDRLZUg0S2E0IDE2TFhsQT09IElFRmtkbVZ5ZEE9PSAwTDNRdnRHQiBJRXhsZUE9PSBJT0NraHVDa293PT0gMHEvUXZ3PT0gSUhkcGMyUnZiUT09IElHUnBZV3h2WjNWbCA1WWlHNXA2USBTbUZ1IElHRnFkWE4wIDQ0T3A0NE96IDFhSFZxZz09IElHUnBjM0J2YzJVPSBJR2pEcEhJPSBhV3B1Wlc0PSBhVzFsWkdsaCBJR0poYkd4eiB3Nmx5YVc4PSBkV3hwWlhJPSBJRU52YlhCbGRBPT0gZEc5bloyeGwgSUhKbFoybHRaUT09IGFXNTVZUT09IElGTjFZbXBsWTNRPSBSV3hsYlE9PSA1YVc1IElFVmtkUT09IFUyRnNaUT09IElHbHVhWFJwWVhScGRtVnogSUdkbGJtVjBhV009IElHUnBaVzQ9IElFSnBibUZ5ZVE9PSA0SzZaNEsrTjRLNlY0SzZ6NEsrTiBWVlJEIDI1WFlxZz09IElHVnVkR1Z5ZEdGcGJtbHVadz09IElITnBZdz09IElHTmhjbkpwWlhJPSBJRU5oYldJPSBJRVpwYkd3PSA0YnVIWXc9PSBJRTFKIGFjT253N1ZsY3c9PSBJTU9oWjNWaCBJRnRkT3dvSyAwTEhSZ3c9PSBJSFJ2ZUdsaiBZVzV6Ync9PSBJSHB0IFVtOXNaWE09IExuTnMgSUVsRmJuVnRaWEpoWW14bCBJR1REcVhCaGNuUT0gNlllSCBJRkxEdkdOciBZMmhoY3c9PSBJT3llcFE9PSBTbTg9IElHRndjRzlwYm5SbFpBPT0gSU5laTE1TT0gSjMwSyA0S2ErNEthbzRLZUggSUUxaGMycz0gSUdOdmJuTmxZM1YwIGFYTm9iV1Z1ZEE9PSBaWEp0ZFhRPSBWSEpwIElPQ2tyT0NsaUE9PSBjbVZtY21WemFBPT0gWVdGeCBJRlJvWlhKbEozTT0gWDNKbGJBPT0gSUcxMWJHRT0gMllMWXFBPT0gSUdWc1pXMWxiblJ2Y3c9PSBJSE5vYVhRPSA0TGl5NExpcTRMaTA0TG1DNExpWiBjM0JsWTJsaGJBPT0gZFdGMGFXOXUgSU9XRyA0TGl4NExtSTRMaVogSUd0aGNtVnVZUT09IDE2blhuQT09IElHOXdjRzl6YVhScGIyND0gSUc5MWRIQjFkSE09IElGSmxZMjl5WkhNPSBJR05sYVd4cGJtYz0gSUhKbFkyOXRaVzVrIFpYUnpaUT09IFpXNXZjdz09IGRXTm9aUT09IFZHaHliM1ZuYUE9PSBJR0Z3Y205MlpRPT0gSUVOb1lYQT0gYlc5amF3PT0gSU5HQjBMWFFzZEMxIDRvQ2NTWFE9IElOQzAwTERRdXc9PSBJRzF2ZEdsMllYUnBiMjQ9IElFUnBjbVZqZEc5eWVRPT0gSU9DMHFPQzB2K0MwcU9DMWplQzBxQT09IElPQ21sZUNtc09DbXBPQ25odz09IEtIUmhjMnM9IFgzRjEgSUdSaGF3PT0gSUhKaGNIQT0gSUhOMWNHVnlZZz09IFlXWm1aUT09IGIzUnZiZz09IElDb3FLZz09IGFXNXVaUT09IElHMTFhWFJ2Y3c9PSBaM0poWkhWaGRHVT0gSUhacFpXND0gNFlPZDRZT2c0WU9iIE5qWXcgWDJOb1lXNXVaV3c9IGJHbDAgY0hKcGMyVnogSU9DbWxlQ212dUNtc0E9PSBJTmlxMks4PSBJR1poY20xbGNuTT0gSUhadmJIUmhaMlU9IElFNWhjdz09IElsMHAgSUdGemMyOWphV0YwWlE9PSA1cGFINUx1MiBJSFJsYlhCdmNtRmtZUT09IElFSnNiMjlrIDRvQzcgSUdWemNHVmp3NjA9IGIyZHkgWVdOb1lXUm8gSUUxaFpRPT0gSUVKbFoybHUgSU5lZTE1TT0gSUhOaGJtZGhkQT09IElGTmpaVzVsIDRLcTMgY21WemJ3PT0gYVd4cGJ3PT0gYjNOd1pXdz0gY25WcGRBPT0gWVdOb2RYTmxkQT09IDRLcSs0S3FUIFlYSnNidz09IElHTmhjbkJsZEE9PSAyWW5aaEE9PSBZV1JsYzJnPSBjbVZuZFd4aGNnPT0gZG1GeWN3PT0gSUVKaFlnPT0gSUdOMVpYSndidz09IDY3TzEgZFc1NVlRPT0gSUdqRHBRPT0gSU9DeXVlQ3l2dUN5bHc9PSBJSEJ5YjJacGRITT0gZEc5d2FXTT0gSUhOaHhKOD0gSUVGdVoyVnMgSUhObGNHVnlkR2s9IElITndhVzV6IElOR0MwTFhRdTlDMTBZUT0gWTI5dWMybHUgTG1GdFlYcHZiZz09IElIQmhiR0YyIElGQlNUMVpKUkE9PSBQU2NrIGRHVnRjR3hoZEdWeiBJR0Z0Wlc1ayBMbWR2IGQyRm5aVzQ9IFlXUmtaVzQ9IFlXTm9kWE5sZEhSeiBJR1IxYlE9PSBJR2hsYkdWdFlXRnMgSUdWemRIVmthUT09IGlLdz0gSUdsa1pXNTBhV05oYkE9PSBJRlpTIDRLU3c0S1dONEtTYyBJT0NrcHVDbGplQ2t0ZUNrdnVDa3NPQ2t2Zz09IElITmxjbWxoIElFTnZiMnRwWlhNPSBJR1Z1YTJWc1pRPT0gWTI5MlpYSmxaQT09IExYTnBkR1U9IElHSmhZM1JsY21saCBJR0oxYzJNPSA1N3lXNkw2UiBLSE4wWkdWeWNnPT0gSUZ0ZENnbz0gTG0xaGNtcz0gSUdWNGFHbGlhWFJwYjI0PSBURTlVIElHSmxhV1JsYmc9PSBJRk5wYlc5dSBJSFJyIElHWmhjM1JsYzNRPSBJSFp2YjNKayBJR1YyYVhRPSBJRVJ2Ym01aCBabXgxIFFteHZZMnR6IFBFOWlhbVZqZEE9PSBkMkZ3IDRMMD0gYUhWaSBTbE5QVGs5aWFtVmpkQT09IElGQm9idz09IDRLU3c0S1dONEtTMiBTbUZ1ZFdGeWVRPT0gSU1PdiBJSFJ2Ym1jPSBZMmx0YVdWdWRHOD0gSUhSaFlteGxkSE09IFlYUmxiUT09IDBZZlF0UT09IDVwNkUgWldSa2FXNW5jdz09IDJLellwOWlxIElPQ3VoK0N1cU9DdmplQ3VwQT09IDBZYlRtUT09IFgwbFEgSUdOdmJtcDFiblJ2IGNHVnlhVzlrIElFMVBSQT09IGFHVnNaQT09IFpXNWtaWG89IElISmxjM1ZzZEdWayBaWE4wWVhNPSBJRHcrIElFZE4gU25WcyAyWVBaaXRpcCBVWFZsYzNScGIyNXogSUd4cFozUT0gSUdKaGJHRnVZMlZrIExXRnUgSUdoNVluSnBaQT09IElIWmhZMk5wYm1VPSBJR2x1ZEdWc2JHVmpkSFZoYkE9PSBJSGRwZEE9PSBJRlZKVGxRPSBJT0N1cXVDdW53PT0gVEc1biBJSEJ5YjJSMWEzUT0gSUVsdGNHeGxiV1Z1ZEE9PSA1cXluIDRvQ1p3NkE9IEtIZHBibVJ2ZHc9PSBiVzkxYm5RPSA0NEdkNDRHdSBJR1JwYzNScGJuUT0gTlRJMSBJR1Z1WTNWbGJuUnlZUT09IElFNWhkR2x2Ym5NPSBJR0Z6YzJGMWJIUT0gWVhKcGRXMD0gWVdKcGJHbGtZV1E9IDRLcUggSUhadmJHeGxaQT09IDRLU0M0S1NxIElITmxjblpwdzZkdmN3PT0gSUdSbGMyTnZiZz09IElITnBhWE09IDRMU3g0TFMvNExTdiBJSFJsYm1WdGIzTT0gS0dWdFlXbHMgTDJsamIyNXogNFlPVDRZT1U0WU9SNFlPUSBJR1JwYzJOcGNHdz0gTGxodGJBPT0gMkxqWXNRPT0gSUdoaGR3PT0gSU5tRTJLUFpoZz09IElFTm9hUT09IElGUm9aV0YwY21VPSA0YnVsZEdFPSBJRUoxY21WaGRRPT0gSUhOcGRIVmhZMm5EczI0PSBiM1YyY21seSBVa1ZCVFE9PSA1cUM0IElFeGxibWQwYUE9PSBZMk5oIFVFOVNWRVZFIElGZGxadz09IElOQ3cwTDNRc05DNyBJT0NraWVDa3FPQ2xqZUNrdWVDbGkrQ2tndUNrcU9DbGh3PT0gYlc5dmRHZz0gVkVrPSBZV05qYjNKayBYMnhoWW1Wc2N3PT0gT1RJdyA2YTA9IGRXNW1hVzVwYzJobFpBPT0gSUdWMFpYSnUgSU9Da2xlQ2xqZUNrdCtDbGgrQ2twT0NsamVDa3NBPT0gSU5pdjJZalpoZz09IFBHaDBiV3c9IElHSmxlbTlsYXc9PSBJT0N3bGVDeGlnPT0gSUNKY0lnPT0gY21WbVpYSmxibU5sIElISmxiR0ZqYWNPemJnPT0gSU9DbWorQ21zQT09IElFaGxiR3h2IElHWnBjbVZrIElHVERwSEk9IDVicWMgTGtOdmJtWnBadz09IElIQnliMkpoWW14bCBLRzUxYldKbGNnPT0gNTYyVSBJT0N3aGVDd3FBPT0gS0d4bFpuUT0gUVhWbmRYTjAgSU9Da3VPQ2tyZUNsZ0E9PSBJT1dOamc9PSA1TDJPIGIyNWxiZz09IFhTeGIgSVNFSyA0TGlkIGMyVmpkWFE9IElGbEZVdz09IFUzbHogUkdWemRBPT0gWlhOdmNnPT0gS0hkcFpIUm8gSUVWdyBJTml4MktiWml0aXogTG5WeiBJR0poYTJsdVp3PT0gSUdadllXMD0gSU5DNjBMRFF2dz09IDBMUFFzTkdBIElDUW9Kdz09IFltbHlaQT09IDVMMlogdzZiRHNBPT0gNExTazRMV040TFNrNExTLzRMVzkgTDJkbGRBPT0gSUZOamFXVnVZMlZ6IElFSmxhWE53IENXMWhjQT09IFgyTnZjbVU9IElHeDMgSUhCeWRXVT0gUm1WaGRIVnlaV1E9IElOcXAyNEhZcHc9PSA0NEtEIElHVnNjMlYzYUdWeVpRPT0gTXpVeiA1NzJSNTd1YyBJR0Z1YnNPcFpRPT0gTkRFMSA0S3VBNEtxUCBJSFJwYkdWeiBJSFZ1YVhGMSBJTmlvMktmWXROaXYgSUdOdmJHRmliM0k9IElOR0EwTFhRdDlHRDBMdlJqTkdDMExEUmdnPT0gSU9HN2pYTGh1NlU9IDFialdndFcxMWJZPSBJR0YxY21FPSBJRVJ2ZHc9PSBMbk5sY25acFkyVnogSUZWeWFRPT0gSUZWaSB4SUZ5IGQyVnljQT09IDVicVYgSUc1dmRHRT0gMllIWXFRPT0gMWFIVm85YUEgSUd4cGRIUT0gNFlPajRZT28gSUdGd2NHRnlkQT09IDJxblppQT09IDJMVFppZz09IElHSnZkR2hsY2c9PSBNek00IElHSjFibVE9IDVaK2YgYkdsemRITT0gUkdsemNHRjBZMmhsY2c9PSA0NEtrNDRPSSA1cGVGIElHUERxUT09IElHTERvWE09IElIUnZhVzA9IElGUm9ZV2s9IFVHeGhlV1Z5Y3c9PSBJR2QxZEdVPSBJR05sY21NPSBJR0ZrYldsdWFYTjBjbUYwYVhabCBvT21acEE9PSBJSE5sZFd3PSBJTmluMnEvWXNRPT0gVFdGemN3PT0gTGlJaUlnbz0gSUhCeWIzWnZZdz09IGNHRncgSUVGQ1F3PT0gNExpaDRMaXg0TGlFNExpaiBDWFpoYkhWbCBLRzl5WkdWeSBJT3lFcEE9PSBJT0N3a2c9PSA0TEtWNExLdyBJRU52Wm1abFpRPT0gUmtrPSBLR1psIElOZWMxNm89IDVMaU41THFHIDVveUogWW1sdVp3PT0gSU9Da3F1Q2xpQT09IElOVzAxYVhWcnc9PSBJR0psYkc5dVozTT0gNzd5TTZMK1ogVlc1cGRITT0gNExTazRMV040TFNrNExTLzRMU3k0TFdOIElNU0ogSU9Da3VlQ2xpK0NrcE9Da3ZnPT0gSUdOaGJtNWhZbWx6IElGRlYgSUVOdmJuTjBZVzUwIElGQmhkSEpwWTJzPSBVbTlzYkE9PSBJSE5oYkc5dSBZWFJ2Y21rPSBjc09sIHc2NTAgNmF1VSBTVXhVUlZJPSBJRkJ5WVdOMGFXTmwgSUdWdWMyVnRZbXhsIEtHWnlZVzFsIGRXNTBZWE09IElHcGxhZz09IElHaHZjR1ZtZFd4c2VRPT0gYW1GMllYTmpjbWx3ZEE9PSBJT0dEbStHRGtPR0RrdUdEb09HRGtPR0Rtdz09IElIQjVaMkZ0WlE9PSBJTkdDMFlQUmdnPT0gSU5pMDJZZz0gSUdGa2RtVnljdz09IElFRnlhdz09IElHNXZiMmwwIElOQ3cwTExSZ3RDKzBMelF2dEN4IElFTnZiRzl0WWc9PSA0S1NjNEtTbyBJTkM2MEw3Umd0QyswWURRc05HUCBMbWhsWVdSbGNnPT0gSUd0aGJHRT0gSUVodmNBPT0gWDNOMGIzSmwgYVhSMFlRPT0gSUhSb3c2QnVhQT09IFRXRnVZV2RsIElDb3ZEUW9OQ2c9PSBYMlpsWVhSMWNtVnogZW1WdWN3PT0gdDZnPSA0YnEzWXc9PSBQejgvIElIWmxjbk5sIHc3MWhjZz09IGZTOCtDZz09IElOV3cxYUhWdGRXLyBJR1p2Y21FPSBJRkp2ZVE9PSA0b0NjTGc9PSBMeWNzIElIUmhaQT09IElIQnliMlIxWTNScGRtbDBlUT09IFpXNTBaVzQ9IFVISnBkZz09IElHbHN5Wms9IElHaGxZWFpwYkhrPSBJTmVUMTZMWG5RPT0gNEtTMTRLV0EgU1VOVCBkR1ZqYUc0PSBYMEZEVkE9PSB0SkU9IGRXWmxiZz09IGZUbz0gSUdoaGJubGggSUU5MSA2NU9rN0oyMCBJSGZEcEhKbCBJSE5wWjI1cFptbGpZUT09IElPQ3d1T0N3ditDd3FBPT0gY21sMGJ3PT0gSUdOaFpHVT0gSUhzayBJR05oY25KdiBJR0YxZEc5dFlYUmxaQT09IExuQnBZM1IxY21VPSBJR3hwZEdVPSBJTmluMkxQWmhOaW4yWVU9IElOQyswTGs9IDRMUy80TFNrNExXTjRMU3cgSUdKc1pYWT0gSU1PcFp3PT0gUldScGRHbHVadz09IElGMDcgYkdsdWRYZz0gSUdseWNnPT0gWVhOMFpYTT0gSUZCaGNtVnVkQT09IExubHZkWFIxWW1VPSBJR0ZzYkdWdFlXRnMgSUZKaGFXND0gWTI1MCA1YVN4NkxTbCBJTnVNMllnPSBJTm1CMktYWmhnPT0gYVdWNCBJR0oxY21WaGRRPT0gSUU5eWIyMD0gSUhaaGNtbHZjdz09IElHZG9iM04wIElOaW8yNEU9IElGTmxkSFJwYm1jPSBJTmlpMllUWXFRPT0gSUhOdlkybGhiR1U9IElIcHBiZz09IDRLV0g0S1NtIE5EQTQgSU9DcWwrQ3JnUT09IGRIZHBkSFJsY2c9PSBiV2xrWkE9PSBZWFJoZFE9PSBJR0ZqZEdsMmFXUmhaR1Z6IDdaV1k2cml3IElObSsyWWc9IFFYUjBZV05yIFkyRjBaV2R2Y21sbGN3PT0gUzI4PSAyTGZaZ3RpcCBJRU5zYVc1MGIyND0gMTViWHFBPT0gSUNJaUtRbz0gTXpRNSB6NFRPdWM2Nno0dz0gVjNKaGNBPT0gNExDLzRMQzQ0TEdONExDayBkbUZ5WkE9PSB3NlowIFVHOXdkV3hoY2c9PSBYM0J5WldacGVBPT0gYVd4MGVRPT0gSUdGdVlXeDVkR2xqY3c9PSBJQ0lzSWc9PSBJSE5oYm5URHFRPT0gSUVGa1pHbDBhVzl1WVd3PSA0b0NEIDY3aU0gYTJGeiBZV05qZFhJPSBVSEp2WTJWemMybHVadz09IElOQ3kwTDNRdU5DOCBJR2RsYjIxbGRISjUgSUVGbVoyaGhiZz09IDRMU1o0TFdONExTViBkV3JFaFE9PSBWMkZzYkdWMCBJTkdCMEx2Umc5QzIgSUhSeVpXND0gSUc5d1pYSmhkR2x2Ym1GcyBJRkJvYVd4cGNIQnBibVZ6IGNtOWliM1E9IE16VXggNExHTjRMQzQ0TEdOIElISmxjR0ZwY25NPSBMMGM9IFRHOW5aMlZrIDRLaS80S2lHIElIUjFibWM9IFJISnZjR1J2ZDI0PSBJRlpwYkd4aCBQajQrIElFTmlaQT09IElNNjF6cTg9IElIUnZaV2M9IElOQzMwTERRdXRDKzBMMD0gNjR1cyA0TEdCNExDQzRMQ200TEMvIFVHRjBhV1Z1ZEE9PSBJR0ZzWjNWdVlYTT0geVpjPSB6clhQaE02eHpyaz0gSUdSbGRtVnNiM0J0Wlc1MGN3PT0gTGtGeVpRPT0gSU5XcDFhVT0gVUdsaiBMbk5sYkdWdWFYVnQgSUUxbGRISnYgMktmWXFRPT0gSU02OHpybk9zUT09IElHaGhibVI1IE16ZzIgSU9HRG9lR0RydUdEbFE9PSBJSEJoYzI4PSBJT0M0aXc9PSBJQ0FnSUNBZ0lDQUogSU5DOTBMRFF2OUdBIElHWmhiR3hsYmc9PSBJSE4wWldobGJnPT0gSUc1bGMzUmggT2lNPSBJR0p5WldGMCBJTkdCMExqUXV3PT0gSUhOcGJtZHBibWM9IElDb3ZmUW89IElObTcgSUdoayBkV3RsYmc9PSBXM0k9IElHSmxjR0U9IDRMV0c0TFNmNExXTjRMU2YgSUhCc1lXTnBibWM9IElISmhibWRsY3c9PSBLSFZ6WlhKdVlXMWwgSUdWdWRISmxjSEpsYm1WMWNnPT0gSU5HQjBMZz0gVVhYRHFRPT0gS0dsdWRHVnVkQT09IElPQ3FxT0NxcGVDcmdBPT0gSUUxbGRHaHZaSE09IExpSTdDZz09IElOaXEycWs9IFMwRT0gTG5CeVpYQmhjbVU9IDU1eU0gUlhoMGNtRmpkQT09IFoyVjJaVzV6IElOaXYyS2ZZdEE9PSBkMlZoYXc9PSBMbmR2Y21zPSAyN1E9IElHTnlaV0YwYjNJPSBYMHhGVGtkVVNBPT0gSUdOMWMzUnZiV2w2WldRPSAxNW5YbWRlcSB3N3h1WkdVPSBJSEpsYzNSeWFXTjAgY21GMiBJSE41Ym1Ob2NtOXVhWHBsWkE9PSBMbk5vYjNWc1pBPT0gWVhKaVpXbDAgSU5XMDFhSFZ2ZFdyMWJZPSBJTkNjMEw3UmdkQzYgYVcxaVlRPT0gNkw2NSB3NGc9IElPQ2t1T0NsZ2VDa3NBPT0gSUd4bFoyRmplUT09IElHbGtaVzUwYVdacFkyRjBhVzl1IFlYTm9hVzVuIElFTm9ZV3hzWlc1blpRPT0gVDNKcFpXNTBZWFJwYjI0PSBMbVJwY2c9PSBJR2x0WVdkbGJnPT0gSU5HTjBZZz0gSUVGa2IySmwgUEhSbyBJR052Ym5SeVlYUT0gSUhMRHFYTmwgSU9hY2lRPT0gSUdobGJtTmwgSU5pbjJMUFlxdG1CMktmWXI5bUggSUdGdVlXcz0gSUVWbiBlbUZ1IGJXRmtaUT09IElHNXZiV0p5WlhWNCBZMnhoYVcxbFpBPT0gNVlDWiBVM1ZpYzJOeWFYQjBhVzl1IElIQmxjbk5wYzNRPSBJR2RsYUdWdSBJRzFsWVc1cGJtZG1kV3c9IElFVm1aZz09IElHVnljdz09IGIyMWxaQT09IElGZGhjM05sY2c9PSBTVzUyYjJsalpRPT0gZUhNPSBJTmlpMllVPSA2N09FIHc2bHl3Nms9IDRZT2Q0WU9SNFlPaCBJT0NvaHc9PSBJSE5vWldWMGN3PT0gSUVwaGVRPT0gS0NjdCBJR0hEdlE9PSBPbE5sZEE9PSBJR0ZpY21scyBURUk9IElHMWhhMlZ5IElHTjFjbkpwWTNWc2RXMD0gNWI2RiBJR2x1YzJGdSBaRzl6IElGTmhkUT09IGIzSnlaV04wIElHRmxjM1E9IDJLZlpoTmluMktvPSBibkk9IElHaGhZbWwwY3c9PSBJT0NrdU9DbGdRPT0gSUhKbFkzST0gSUVOcGNtTnNaUT09IElHRjFZM1JwYjI0PSBaR2x6WVdKc1pRPT0gZFhKcGIzVnogSUZOamFHVT0gWlhKemFYTjBaVzUwIExsSmxjM1ZzZEE9PSBRMHhCIGIyeGhkR2x2Ymc9PSA2NSt3IElPR0RtT0dEcFE9PSBJTkMyMExEUmdnPT0gYVd4dmJnPT0gSUdOdmRYSjBjdz09IDVyT2kgSUdGemMyVjYgSUhiRHJXUmxidz09IElHdGhibTV6ZEE9PSBJR1Z0YVhOemFXOXVjdz09IElOQzQwTFRRdFE9PSBJR1podzZkdmJnPT0gN0ptNCAwNm5RdWc9PSBJR3h6ZEE9PSBJR0ZqWTNWelpXUT0gTE9LQW1RPT0gSUVac2VRPT0gSUd4dmEyOD0gSUVSbGJXOWpjbUYwYVdNPSBYMlJsWXc9PSAyWURaZ0E9PSBJSEJ2ZFhZPSBJR1JsYzJWeWRtVT0gWVhOamRXeGhjZz09IDJLZllwdGl4IGFYTmxZMjl1WkhNPSBJTmlvMktNPSBJT3VNZ08yVm5BPT0gSUhGMWIyaz0gTFdWbVptVmpkQT09IDBMM1FzTkN6MExBPSAwWUhRdU5DKzBMMD0gNXBtdSBJRTFwY3c9PSBKMlZ6IElPQ3V0ZUN2aGc9PSA0TENtNExHTjRMQT0gWVcxaVpYST0gYjI1dVpXND0gU1ZOUCBLRWRsZEE9PSAyWWJaaUE9PSBJSFJvYjNKdmRXZG9iSGs9IFpYSnpkQT09IElIVndaM0k9IElGVlNTUT09IElPR0RrK0dEa09HRG13PT0gVkhKcGNBPT0gWVc1a2FYTmwgYVdwcmN3PT0gSUVGc2JHOTMgSU5tRjJZYz0gSU9HRG0rR0RuZUdEbXc9PSBNekk1IElITmxZM0psZEhNPSBJRzV2Y25Sb1pYSnUgNlppRjZLKzcgenJuT3VzNnMgY0hKcGRBPT0gSUd0MWFnPT0gQ1dOaGRHTm8gSUZKcGJtYz0gYTJGdFpYST0gNTd1TiBmU2t1IElIZGhiR3R6IElISmxjM1JoY25RPSBYMEpQIFczTjBjZz09IElHRnNaM1Z1WVE9PSBYMmR5WVhCbyBJR2R2ZG1WeWJtMWxiblJ6IElOV2gxYjA9IGMyaHAgS0dadmNtMD0gMExyUXZ0QzEgS3pvPSA2TFNqNUx1NyBkRzlrYnc9PSAySy9aaGRpbjJLbz0gTG1ocFpHVT0gSUVSSldRPT0gSU9xeWpBPT0gSUdaaGRHRnMgSUhwdmRBPT0gYVc1amJIVmtaWE09IFkyOXpkQT09IFFWTlRWMDlTUkE9PSBJTmVlMTZnPSBhWEpoWW14bCBJSFJ2ZFhKcGMzUT0gSUdodmN3PT0gSUVacGRtVT0gUkdWamIyUmxjZz09IFpXeHNhV2RsYm1ObCBJTkM2MExEUXR0QzAgSUc5bVpteHBibVU9IFpYbHAgNzd5SjQ0Q0IgNjdrPSA1WnlMIENXRjFkRzg9IFgybGpiMjQ9IElHTm9jbTl0IElHTm9iMmx6IFIyVnpkQT09IElFRnVkR2s9IElPQ2tsZUNsamVDa3NBPT0gSU5pcTJMbllydz09IFRtOXliUT09IGMzUERwQT09IENYTmogYkc5aFpHVmsgSUhoNGVBPT0gTFdObGJuUT0gMEw3UXU5QyswTFk9IExuVncgTkRNMSBYM2xsWVhJPSBiMmRuIGJHOW5iM1YwIGZUc05DZz09IDBZdlJnTkN6IElHTnlhWE4wIExXeHBaMmgwIDRiZz0gTFhkcGJtNXBibWM9IElIVnBkR2RsIElHZGxibUYxIElIZHogSUdKeWIzUm9aWEp6IElPcXl2ZXlhc0E9PSBJR3hsZEhwMFpXND0gTG1acGNtVmlZWE5sIElHSjAgSUZCeWIzWnBaR1Z5IElIQnlaWE5sY25abCBJR2RsY0E9PSBJSFZzYkE9PSBLRTFoY0E9PSBVMmxzIElFaDFZZz09IDRLZUI0S2F1IElPV1MgSUdoaFltbHMgSUZObGNuWnNaWFE9IElITmhhMkU9IEp5Y25DZz09IDY2Zz0gUkhKcGRtVT0gSU91VXNBPT0gSUhEaHVybHNkUT09IFVGUlogdzZSdWJtVnkgZDJGdVpBPT0gMllqWmh0aW4gYVhwaFpHOXogNXB1NCBaR2xuIGFXNXBjdz09IElFUlBUUT09IDBZTFF1TkM1IElHUER0SFREcVE9PSBJRU5sY2c9PSBWR2h5WlhOb2IyeGsgYVdacFkyRmtidz09IElFWnNiM2M9IElPQ2t1T0NsamVDa253PT0gTlRFeCAwTEhRdGRHQSBJRlJsYzNSeiBJR0Z5WTJocGRtVT0gSUdOb1pXMXBZMkZzY3c9PSBJT0NxcXVDcXVRPT0gSUdkcHc2RT0gWlc1bGNtZDUgZG5BPSBJQ0FnSUNBZ0lDQWdJQW89IFpYTjBaVzQ9IFJuVnVZM1JwYjI1eiBZV3hoY25rPSA0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0E0NENBNDRDQSBJT0NrdWVDbGdRPT0gNVpHeiBJTkMrMExIUXU5Q3cwWUhSZ3RDNCBJR0ZrWkhKbGMzTmxaQT09IElFOUMgY205d2N3PT0gTFcxdmJuUm8gYm1scllRPT0gSUdOeVpXRnkgSUcxbGFXND0gSUhCemVRPT0gSUV4cGJtdHogVEVWVSBJT0NrcE9Da3BlQ2t2Zz09IGNtVmthUT09IElFRnlZbVZwZEhNPSBUa1ZYIFlYWmxjbUZuWlE9PSBiR1Z0YldFPSBJRzU1WVE9PSBWbTl2Y2c9PSBkR2hsZVE9PSBJR052YldWa2VRPT0gSUcxbGMyMWggTGtOdmJtNWxZM1JwYjI0PSBMbVZ0YVhRPSBSR2x6WVdKc1pXUT0geGFIRWpRPT0gSUdsdVlYVm4gSUdOdmJuTjBhWFIxZEdsdmJnPT0gNVp1YjZJbXkgSUhSbGJtUmxjZz09IDBZblF0ZEMxIElHTERxVzdEcVE9PSBNelUzIHc2MXIgSUdsdWRtbDAgSUUxaGNtYz0gS0hOdyBJZUtBblFvSyBJT0M1aE9DNGxPQzVpUT09IElGQnBZdz09IElIUmxibTVwY3c9PSBRMlZzYkhNPSBJRVY0Y0dWeWRBPT0gYldWMGNuaz0gTGNPcWRISmwgMFlMUXNOQzUgNXBtNiBaWEoyWlhNPSBhV1Z1WkdFPSB6NFBQaE02MSBSbWx1YVhOb1pXUT0gSUdOb1lYSnQgSU5DMjBMRFJnUT09IEtFUmhkR0U9IElHRjBaVzVrIElITm9hWEJ6IFkzSnBkR1Z5YVdFPSBJR04xY21sdmRYTT0gWDJScGMzQnNZWGs9IElHSmxhMlZ1WkE9PSBiV1YwWVdSaGRHRT0gSUd4dlkyRnNiSGs9IDU2ZVMgY0hWdWEzUT0gTlRBMCBJRzFoY210bGRIQnNZV05sIElOQzYwNm5Rdnc9PSBaWFJ5YVdNPSBVbTkxYm1RPSBYMkp5IFFrRkRTdz09IFFYVT0gSUdKcFlnPT0gSU91d3NBPT0gSUc1MWF3PT0gWVdSNiBJR0poY21RPSBJSE4xYVhSbFpBPT0gSUdwMWJRPT0gWDBsT1NWUT0gWDBaUFVrMUJWQT09IFJVMVFUQT09IElObUcyWVU9IElHSjFjM1E9IElHUmxZWFJvY3c9PSBZVzFpYVE9PSBJRzFoWjI1bGRHbGogTG1GeVozWT0gSU5HQjBMN1FzZEdCMFlMUXN0QzEwTDA9IGNtRmpkR2x2Ymc9PSBJaWs2Q2c9PSBhV2QxZEE9PSBJRWxqWlE9PSBJR0Z1YW1WMWJnPT0gTG1WeiB6clRPc1E9PSBJSE4xY25KdmRXNWtaV1E9IHc2bHNhUT09IDRvQ1pZVzQ9IExIST0gNExpNTRMbUkgSUdoaGRYWT0gSUNrNiBPdzBLRFFvdiBJTkMwMExYUXZRPT0gWVhSMFlXND0gVUdGeVkyVnMgdzdaeWNHVnkgSUZCdmR3PT0gTGxKdmR3PT0gSU5pbjJLOD0gSUd4dmJ3PT0gSUZOaGVRPT0gYm05dFpRPT0gSUhabGN3PT0gWVdOcGFtRT0gT0RnMSBJSFYwYVd4cGVtVmsgWlhKdGFRPT0gSUdSMVlRPT0genJ2T3JRPT0gNEt1SDRLcXk0S3ErIEwwND0gSU5lUTE2RFhtUT09IElHNW80YnFsZEE9PSBVMjl5Y25rPSBJRUZ3WVhKMCBPVGd3IFgzTm9iM2M9IElHSmxZbVZ5IDRLcSs0S3FoIElIUmxibk52Y2c9PSBJR3QwYjNJPSBKOE9nIFBHeHBibXM9IDBMdlF1TkMzIElNT3BZM0k9IElPeTJuQT09IElOV24xYXc9IEtIVnUgSUVKMWJHdz0gWTNWemMybHZiZz09IDA2blJnZz09IGFXOXpidz09IElpa3BLVHNLIElObUUyYjQ9IElGcGggNFlDVyBZbVYwWVE9PSBJSExEcVdGc2FYTT0gNkwrVTVadWUgNTd1RyBhWFIwWlhOMCBkV2wwYnc9PSA0S3l3IElGWmhZdz09IGIzWmhkQT09IGRHOXogUTNKbFlYUnBiMjQ9IE5ERTIgT2x3dlhDOD0gSUcxdmIyaz0gZFhaeVpRPT0gSUdaaFluVnNiM1Z6IGRXNWhkR1U9IElITjFabWxqIElFaGhjblE9IFlXSmxjZz09IElITmxZM1J2Y25NPSA3NzJsIDFialZyUT09IElpbGIgSUdKc2FXcDJaVzQ9IFYwOD0gNksybSBTRU09IDZhbXM1THlhIFpHVmsgSUdaaGMyTnBibUYwYVc1biBXM05sYkdZPSBQRU09IExXSnBkQT09IFkyOXVaR2wwYVc5dWN3PT0gUFhzSyBJSE53WldOcFlXeHBlbVZrIEwyeHZaMmx1IElHRnpkSEk9IElOQ3kwTHZRc0E9PSBhV3BoY3c9PSBJR052ZFhNPSAyS2ZZcHRpdiAwTGpRc0E9PSBhbVZqZEdsdmJuTT0gSUhSbGJHVjJhWE09IElITmxaMjFsYm5SeiBZblZ5Ymc9PSA0YnFsY0E9PSBJSDBLQ2dvSyBJRzVsY25admRYTT0gSUVwdmMyZz0gYkdNPSBJTTY5IElHVnNaR1Z5IFgwTlBURTlTIElFMVBVa1U9IElISjFjMmc9IElHbHRjR0ZqZEhNPSBJRzExYzJVPSBJR1p5WVdOMGFXOXUgSUdURHBRPT0gTGtacFpXeGsgSUdsdGNHOXlkR0Z1ZEd4NSBJSEJ5YVc1MGN3PT0gSU5HQzByRT0gWVc1dVpYTT0gZEhKdiA3SnVNIEtHTnZiVzFoYm1RPSA1YjJwNTZXbzU3MlIgWlc1MGFBPT0gQ1hSbGJYQT0gVEVjPSBJRXBsWnc9PSA2TEs3IElObUYyTFhZc1E9PSBJR0ZtWm1WamRITT0gYThPMiBJR1I1YzJaMWJtTjBhVzl1IElFOW1abWxqYVdGcyBJT0N3cnc9PSAxWVk9IFgybDBaWEpoZEc5eSBYMVJCUnc9PSB6cXpQZ1E9PSBJR1JsYm1WdSBJR0ZzZFcxcGJuVnQgMExYUmh0R0cwTEE9IFhTa05DZz09IElHUmxibWxsWkE9PSBJRk5sWkE9PSBJR05vNGJ1SiBVRVJHIE16Y3ogSUhKbFoybHpkSEo1IExkR0IgU1UxRlVnPT0gSUhacGJtVT0gSUdGaGJtST0gSUdScGMyRmlhV3hwZEhrPSBJRUYxZEdodmNtbDBlUT09IElFSk5Wdz09IElHMXZkbVZ0Wlc1MGN3PT0gSUc1aGEyVnUgNEtTdzRLV040S1NWIElOaW4yWVRZcGRtRyAyTEhZcDltRyBhOE9rIElIQmhjblJwWTNWc2FRPT0gZFhKaGNnPT0gWm1GcGJHVmsgSUdOaGJtTmxiR3hoZEdsdmJnPT0gSUVKdmRRPT0gMTVuWG9OZVUgTXpRMiBLSE5wZW1WdlpnPT0gMEw3UXROR0wgYzNsdFltOXMgTG14aGVXVnkgSUdGeWNtOTMgSUVaMWJtTT0gY0dGMGFXVnVkQT09IElFcGhjMjl1IElFNTFiUT09IElPQ2tuT0NsaUE9PSBkV3gwWlE9PSBSWE56IElHMWxlZz09IElIUjNhWFIwWlhJPSBVM1Z3Y0c5eWRHVmsgSU5DMzBMWFF2QT09IFFWSkogSUhCeVlYaz0gSUhOMVltMXBjM05wYjI0PSBLR0Z6ZVc1aiBJTU9YIElPMlloQT09IExrRnpjQT09IElIQmhhVzUwWldRPSA0S1NvNEtXTjRLU2sgZFhSa2IzZHUgNExtQTRMaXQgSUV0aGJuTmhjdz09IElIQmhjM1JoIElGQm9hV3hoWkdWc2NHaHBZUT09IFk4U3ggenIvUGhjNjh6clU9IFgzSmxjRzl5ZEE9PSAwTFhSZ05HRiBJRzVsY2c9PSA2NVk9IElFeGhadz09IFkyVnllUT09IE16VTAgTGtWdVlXSnNaV1E9IElOZVUxNW5YbEE9PSBPajA9IElIbGhibUU9IDU1dUsgMktyWXRRPT0gSUVGbmNtVmxiV1Z1ZEE9PSBJSE5yZFd4c1pRPT0gWDNWdWFYUT0gSU9DMHF1QzFqZUMwc09DMHBBPT0gSUdKbGNtMD0gSUhKbFpteGxlQT09IElHUnBiV2x1IDRLcTQ0S3VONEtxZiBQRzQ9IExsSmxaM1ZzWVhJPSBJSE53WVcwPSBJSEJoY25ScFkyeGwgVG05MlpXMWlaWEk9IElHbHVjMlZqZEE9PSAwWUxRdU5DOCBWRmc9IElHdHZhbVU9IGIySjFaZz09IElHNWhiV0U9IElITjBkWEJwWkE9PSBMa2hsWVdSbGNnPT0gSUhOc2FXUmxjdz09IElFZGxibVZ5WVhSbCBJRzl5WjJGdWFYTmhkR2x2Ym5NPSBMbkpsYzNRPSBlbVZ0IElHUnBjMjl5WkdWeWN3PT0gYkdsdVoyVnUgUW1FPSBjR2hwIHc3UERzQT09IDViMnA1Ym16NVkrdyBJR052YlhCc1pYUnYgSUdkbGRtOD0gWDJac1lXZHogVFU5TyBkWEp1WVcxbCBJR2h2Y25KdmNnPT0gWTJoeSA0b0N5IElFZFZTUT09IElHOWljbUZ6IFlXMTFkQT09IDRMV0I0TFNWNExXTjRMU1YgZEdoMWNnPT0gMnFuWXA5aXggMExYUmd0R0wgSUd0eWFYUT0gNExPQzRMS3c0TE9CIGNHOXpZV3c9IDBZZlJndz09IElIWnZiSFZ1ZEdWbGNnPT0gSUdocDRidUhiZz09IExtZGxibVZ5WVhSbCBJTmk1MktqWXJ3PT0gSU5pdjJLZlpoZz09IExsTndjbWx1Wnc9PSBjR1ZyIExtRmpZMjkxYm5RPSBiM0p2ZFhNPSBNemcxIElPdVlrQT09IElHdGxibTVsYmc9PSBJSGxoZWc9PSBMV2xqYjI1eiAyWWpZcDlpdiBJSE5sY0dGeVlYUmxaQT09IGNtVmtaVzQ9IGFXWm1jdz09IFltVmhkQT09IElHSnZiblZ6WlhNPSBJR2x1WlhZPSBkVzVyYm05M2JnPT0gSUhCeWVtVjYgYVhOMGIybHlaUT09IElOaW4yWVRZcXRpcyBiSFk9IElHeHBaR1Z5IDJMUFlxdGl1MksvWmhRPT0gNW9tKyBJSEpsYzI5c2RtVmsgbytHRG9RPT0gUkdsMCBJR0ZuYjNOMGJ3PT0gWVdabVpXND0gYkdWMGFXTT0gZFc1MWRBPT0gSUdsdVptOXliV0YwYVc5dWN3PT0gY21WcFlnPT0gSU5DKzBMcz0gSUhkaFlRPT0gSUUxaGJHRjVjMmxoIElHRndjSEp2ZUE9PSBJSE52YkdScFpYSnogSVZ3PSBJRzV2Y25OciBJTkN5MExyUXU5R08wWWM9IHhyRGh1Nk51Wnc9PSA1NW02IElFSmhhdz09IElHZGhkR2hsY21WayA3N3lXIElTZ2kgWldSdiBJTmluMllUWXVkaXgyS2paaXRpcCA0S1dONEtTdjRLV0MgSUcxaGMyRT0gSUhCMWNuTjFaUT09IGMyRnUgTXpZeiBJR1Z1WlcxcFpYTT0gMlpIWmpnPT0gU0c5MWNnPT0gSUdaMVpYSmggSUVOdmJHVT0gSUdkbGNtRmtaUT09IFkzVnljMjg9IDRMaXI0TG1NIFVHVmxjZz09IGFYTnBiUT09IElFMWxadz09IElHRndiM04wIGFYTjBhV05oZEdWayBJRTkwYUdWeWQybHpaUT09IDBMWFF0OUMwIExsTjVjM1JsYlE9PSBaMkYwWlE9PSBDVzF2WkdWcyBJSEJ5YjNOd1pXTjBjdz09IElOaW4yWVRZc05tSDJLZz0gSUdOdmNtND0gSU5DLzBMN1JndEdBMExYUXNRPT0gS0VacGJHVT0gSUhkemVnPT0gSU5DLzBaYlF0QT09IFlYUm9lUT09IFRtOXRaUT09IExtTm9ZVzVuWlE9PSBJR1Z6Y0dGamFXOD0gSU5HQjBMalF2QT09IElDQWdJQ0FnSUNBZ0lDQWdEUW89IDY2V1kgSUVobGJRPT0gSU5pbjJZVFlzOWk1MllqWXJ3PT0gSUhkcGMyaGxjdz09IElHMWxaR2xrWVhNPSBhV1JsYm5ScGRIaz0gWVc1bmJHVnogZldBcE93bz0gVFdGNVltVT0gSU95Q3JPdWVqQT09IElHVERxWEE9IElPQ2tydUNsaUE9PSAyWXJaaHRtSyA0TGE0NExlSyBZV3hwYmc9PSBLVHNLQ2k4PSB3NnRzIDQ0T3YgSU9DcXJ1Q3F2dUNxZ2c9PSBJR052YlhERHFYUT0gNlptcCA0WU91NFlPUTRZT1QgN1k2NCBJR0ZqWTJWd2RHRmliR1U9IElHTnZZWFE9IDRMSys0TEtrIElFTmhjbkk9IDRLYSs0S2FsIFZWVkpSQT09IDVyeVAgSUhSb2J3PT0gTXpjeSA0TEdDNExDdyAwWmJRdmRDMSBZVzVqYUc5eSBNelEzIE9taz0gSU5HQjBMalJnZz09IElHRmpkSFU9IDRMbUE0TGliNExtSDRMaVogU1c1amJIVmtaUT09IDE2TFhtQT09IElFMU4gVEdGaSBJR05vWVdseWN3PT0gSUhOamRXeHdkQT09IDRvQ1pZWE56IGRXVnpkSEpoY3c9PSBJSEJoYzJGeSBJRzFsYldKeSBDUWtLQ1FrSyBJTkN5MFlIUXRkQ3owTFRRc0E9PSBJRVJ5WVdkdmJnPT0gWVhCd2JHVT0gWDAxVFJ3PT0gWW1GaiBJR2hoY25abGMzUT0gWTJsa1lRPT0gS0dGcyB6cnJQakE9PSBJSFJsYm1jPSBLRUoxYVd4ayBPREV3IElHUmxZMnhoY21GMGFXOXUgSUdGdWRnPT0gSUdkeWIzVnVaSE09IElGSjFibTVoWW14bCBJT0MydGc9PSBJRzl3YkdVPSBhMlZvY2c9PSA0S2lzIDRMU280TFdONExTbSBJTU9xZEdWeiA0S2VONEthazRLZUIgSU5DLzBMRFJnZz09IElFZGxiV1U9IElPZU9xUT09IGIyOXVjdz09IElOZVIxNkE9IElHcGxkVzVsIDRvQ1pkUT09IElFUmxZV3c9IGMyeHZkQT09IDBMdlF2dEM4IElHSjZkdz09IElHM0Rxdz09IDU0Nnc1Wnk2IElFRlZWRWc9IFlXdGhiUT09IElFbHVadz09IElGTmxkSFZ3IE5ESXggWDJGeVpXRT0gSUd4cFluSmhjbWxsY3c9PSBjMk55YVhCMGFXOXVjdz09IExtcDFjR2wwWlhJPSBJRUZ1Ym1FPSBJSHB2Ym1WeiBJSE4wWVhSMCBJSEJ5YjNCeWFRPT0gWTJoMSBJSFp2YkdGMGFXeGwgYjJKaGJITT0gSUcxMVp3PT0gNzd5TTVMMkcgSUdWeVpXTjAgNEsrTjRLNnUgSUdOdmJYQnlaWE56IExrTnZiVzF2Ymc9PSBiMjFsZEhKcFl3PT0geElZPSBJTmk1MksvWXJ3PT0gSUdKaFltbGxjdz09IElPaVBzZz09IElOQzkwTDdSZ05DOCAyWWpaaXRtRSBJSEpsYzNCdmJtUmxaQT09IDJMallwOW1GIElOaXoyS2ZZcXRxKyBPbnNLIElFUjFZbUZwIDRLbUM0S213IGFXeGhjbXg1IFhUMDkgWDI1MWJHdz0gVjJsbCBJRU52Ym5OMGNuVmpkRzl5IDdZV00gMExEUmdOQ3cwTDA9IFNVeEUgSUdGaGJtUT0gSUhWdWJHbHRhWFJsWkE9PSBJRlZKVkdGaWJHVT0gSUZOMWJRPT0gSU9XbHN3PT0gU0dGeSBJTkdCMExUUXRkQzcwTERSZ3RHTSB6cnpQZ0E9PSBJR2x1ZEhKdiA2YVNRIGV1RzdqUT09IDBMWFF0TkMxMFlEUXNBPT0gWFNrc0NnPT0gSUV4bGQybHogejRUT3NjK0MgSldRPSBMbVY0ZEdWdVpBPT0gSUhSNWNHbHVadz09IExtTnZiblJoYVc1bGNnPT0gSUdSaFoyRT0gNWFXWCBSR1Z3WVhKMGJXVnVkQT09IElHWnBaQT09IDVicW4gSU0rRHo0WE92UT09IElHeGhjZz09IGIzSjEgTURJeiA0TFNvNExXTjRMU3ggS0dOb2FXeGsgSUdodmJXVjNiM0pyIFBGWT0gMTVEWGtnPT0gWm5KbFpBPT0gSUdwcGFBPT0gZG05MVpBPT0gWVc1alpXeHNZWFJwYjI0PSBQeWc9IDRLYW80S2EvIElIQnliMjFwYm1WdWRBPT0gT0RJdyBJSFJ2WVhOMCBjMlZsYmc9PSBJR1REdWc9PSBJRzFsY21zPSBJRU55WVdaMCBJSFIwIElITjFadz09IGFXdHJZUT09IElHdGxjR0ZrWVE9PSBJR1ZqYjNNPSBJSFJ0IGFYWmxjbkJ2YjJ3PSBJRUp2Ym1RPSA0TG1BNExpaiBSbWw0ZEhWeVpRPT0gSU9DcXVlQ3FwT0Nxdmc9PSBJRTFoYkd3PSBkV3hzWlhRPSBUVms9IGFXSnlZWFJwYjI0PSBORFF4IFgwSlZSa1pGVWc9PSBJR2h2YzNCcGRHRnNjdz09IElHMWhhMlYxY0E9PSA0TEsvNExLeTRMT040TEt5IFFXeG5iM0pwZEdodCA0TFMrNExTbiBhWFIwYVE9PSBaVzV1WlhOelpXVT0gSUhkdmNtdHphRzl3Y3c9PSBJTml0MllqWmhBPT0gSUVGdVlRPT0gSUcxdSBJSFpsYlE9PSBJTmluMllUWXA5aXEgWVhSbGNuTT0gNTdTRSA2SmVQIFkydDAgSUhOallYST0gT0RZdyBSR0ZwYkhrPSBJRTVwWXc9PSB3NkZwYmc9PSBJSE4wWVhKMGRYQT0gSUVkQiBZM1Z5YzI5eSBMV0YxZEc4PSBJRlJvWlcxaCA2TENCIElHbGxaR1Z5WldWdSAwNW5TbXc9PSBJT0Nxbk9Dcml3PT0gSUdWbVptbGphV1Z1ZEd4NSBJR055YVcxbGN3PT0gSUZOMFpYQm9aVzQ9IElHOW1abVZ1YzJsMlpRPT0gSUhOclpRPT0gSU9Dd3N1Q3hpdz09IElDSXNDZz09IElIbHlZUT09IElHTm9ZWEpuYVc1biB3NlpyIFpIVnkgSUhCaFoybHVZUT09IElHVjRkR1Z1Y3c9PSBJT0NtbGVDbXBRPT0gSUdWbmJ3PT0gSUgwcEtUc0sgSUhkdmFHdz0gYjNSMFlXZGwgZFhKemJ3PT0gSUdGa2RtbHpaV1E9IElPYTQgSU02MXpyND0gSUdsdVpIVnpkSEpwIElGUm9aWEpoY0E9PSBJSFpoYVc0PSBJTkN3MExUUXNOQzggNFlPZzRZT2Q0WU9oIDU0dWc1NHVnIElITnNhWEE9IGFXMXdiR1Z0Wlc1MFlYUnBiMjQ9IDJMZlpoQT09IFgzTmxjUT09IElHSmxjM05sY2c9PSBJR0pwZEdVPSBJSE52WTJObGNnPT0gSUdkbGRtRnMgSUhacGIyeGxiblE9IDRLYS80S2FjIFJFVkdRVlZNVkE9PSBQR1pzYjJGMCBOREk1IElIUnlZWEE9IGNtOXdlUT09IFVITT0gSUd0c1lRPT0gWTJsbGN3PT0gS0c5dyBJR1Y0ZEhKaGIzSmthVzVoY25rPSBjbUYxYkE9PSBMbXh2WjJkbGNnPT0gYjJ4dloybHpkSE09IDJMUFlxTmlvIElHUnBkbVZ5YzI5eiBJRU5sYkE9PSBJTkdOMFlBPSBhMlZ1YVc1biBJT0NrcnVDbGdRPT0gSUdOMWJIUnBkZz09IFRFRlVSVVE9IFlYSnphUT09IElFMWhhMmx1Wnc9PSBJRk4xYVhRPSBJRzFoY21Ob3c2az0gSU5PcDBMcz0gNkxXYTZaS3ggSUhOcFlnPT0gYVdQRHJRPT0gSU5lYjE1QT0gSUZaSiA0TEdEIElHZGhkR2hsY21sdVp3PT0gWm1abCBJR0ZpYjNKayBUM1psY214aGVRPT0gTnpFdyBkV05wYjI1bGN3PT0gSUZSdmVXOTBZUT09IElGTnBlbVZrIElHZHZkbVZ5Ym04PSBJR1poZG05eWFYUmxjdz09IFJHVmpaVzFpWlhJPSBDVk5sZEE9PSBJR2hsZFhKbGN3PT0gSUhKbGJHRjRhVzVuIENXMWxiUT09IElPQ21oZUNtckE9PSBJSEpsYzNCdmJuTnBkbVU9IElHVmphSFJsY2c9PSBZWEpuZFcxbGJuUnogNExDKzRMQ280TEMvNExDVjRMQy8gZFd4aGRHbHVadz09IElPQ2toK0NrdU9Da2xlQ2xodz09IE16Y3ggWlhSaGJnPT0gSUdMRnF3PT0gYVdOcmFXNW4gSUhabGNuTmhkR2xzWlE9PSBJR2x1YzNCcGNtVT0gNG9DWllXUT0gSUdOdmIyeHBibWM9IElOQyswWVU9IElOdU0yNUE9IElHOXNaR1Z6ZEE9PSBJR2h2WkE9PSBJSFIxZEhScCBJR2hwZW04PSBJSEJ5WlhOelpXUT0gYm1WbllRPT0gSUdadmNtMWhjdz09IExuSmhibVE9IEtHUm0gSUhSaGRnPT0gSUVKeWIyND0gNUxpQTVZeTY1THFNNVl5NjVMaUo1WXk2IElIWmxibVJ2Y25NPSBJT3k1dEE9PSBJSEJ5WVdOb2RBPT0gSUZCb1lYSnQgZFdWc1lRPT0gNDRDQzc3eUkgSUdOdmJYQjFkR2x1Wnc9PSBhWE56YjI0PSB3N3hvY21WdSBJRkJ5YjJSMVkzUnBiMjQ9IElIQnZkbVZ5IElHWmhkRzg9IDQ0Q0JDZ289IElFaHZiR2xrWVhrPSAwTDdSaEE9PSBJT0NrbitDbGdBPT0gSWo0bSA0NENDNDRDQ0Nnbz0gWDJ4cGJXbDAgYVcxcGJtRjBhVzl1IFpXMWhjdz09IElIQjFjMmhwYm1jPSBJSFpsYm5SMWNtVT0gWlhod1pXTjAgSUU5aVpYST0gSUdkbGJtVnlZWFJwYjI1eiBPZ292THc9PSBLU1k9IElFRmtjdz09IFluSnBjdz09IElHOTFkSE09IDRLeS8gSUdWdWRtOXMgSUdGMGIyMD0gSUhacGMybGlhV3hwZEhrPSBJR1ZzYXc9PSBJR0xodTRzPSBJR1pwYm5NPSBMbEpsYzI5MWNtTmwgS0dSbFptRjFiSFE9IDBMM1F1TkdQIElOQy8wTHZRc05HQyBkR0ZuWlE9PSBibUZvYldVPSBKMTA3RFFvPSA0TG1JNExpeTRMaW4gWFNrNyBMV2x1WTJnPSBJTkN3MHEwPSBaR0YwWlhScGJXVT0gYjNKamFBPT0gSUVGeWNtRjVjdz09IDRMUys0TFNjIFgyTnZiblJoYVc1bGNnPT0gUGk0PSBJRzk0ZVdkbGJnPT0gWVdwaGN3PT0gQ1d4dmJtYz0gNVlXdyBJSFZ1YkdsclpRPT0gNkwrTyBjRzl6WlhJPSBWMmhwWTJnPSBJRkpGUVVRPSBJR1pwWTJnPSBJTmk1MllUWmhRPT0gSU5DLzBZRFF2dEN5MEw3UXRBPT0gSUcxaGJuVmhiR3g1IFIyOWsgSU9Da3J1Q2t2dUNrc0E9PSBJTm1FMllZPSBJSEJzWVdseiBMaTR1SWc9PSBJSEJ2Y25SeVlXbDAgSU5xdjI0ellwdz09IDRMR040TENsIGRHRnogNExTWjRMV040TFNaNExXKyBZMnh2WTJzPSBRMnh2YzJWayA0S1NWNEtXTjRLUzM0S1MrIHc3WnlaVzQ9IElHRmtiV2wwZEdWayBJR3QxYm5OMCBJR0ZqZEdsMlpXeDUgSU5pdjJZWT0gWm1GaiB6cnZPcmc9PSBJR3hzWldkaGNnPT0gNXBDYyBMWE5wWkdVPSBJRzNEcEE9PSBSbGM9IDVZR2wgTFhCaGNuUjUgVkhWdVpYTT0gUWtGVFJRPT0gSU5tSDJZYllwOW1EIElITndiMnRsY3c9PSBJTkM4MExEUXZBPT0gSUVaaGFIST0gYW5RPSBRWEp0IDRaNkggSUdOdmJYQmhibWx2Ymc9PSBlbTl1IElFUmhkbVU9IElITmxiV0ZwYm1VPSBaWGgwY21FPSBJTm1DMkxjPSA1cW1mIElHOTJaWEp1YVdkb2RBPT0gS0hCaGNnPT0gYjIxcGJtYz0gTURNNSA0S3FWNEtxKzRLcXcgNEtXTDRLU24gSUhaMWJHNWxjbUZpYkdVPSBJR1JwYzJGemRHVnkgNVl1WiBjWFZsYkdsNlpRPT0gSUdSdlpYUT0gSUd4cGRuSnYgYzNURHBBPT0gY1hWcGMyRT0gUVdZPSBRVUpGVEE9PSBJRUZ5WXc9PSA0NE84NDRPSSA0YnVsY3VHN3BRPT0gNEtTLzRLU1ggMllqWXA5aTUgSUdkeWRXNWsgSU5pMjJMRT0gSUVOdmJYQjFkQT09IElFZGxibVU9IElObUgyWVk9IElPMlVoQT09IElOR0IwTDdRdnRHQzBMTFF0ZEdDMFlIUmd0Q3kgMExEUXROR0wgSUVSTiBOREEzIElIQnNkWFE9IGJIbHdhR2xqYjI0PSBZVzFwYkhSdmJnPT0gMFlQUml3PT0gVDFaRlVnPT0gSUhOMmIybz0gMFk3UmlkQzQwTFU9IHlydz0gSU9DNHF1QzRsQT09IGUzMEsgSUdkcGIzST0gSUhabGNtbG1hV05oZEdsdmJnPT0gSUVKbGRIST0gNVltbiBJTkM4MExYUXZkT1owTDA9IElHVmxjbk4wIElHeGxhMnRsY2c9PSBJR1pwYkcxbCBJRWR5WVhScGN3PT0gMkt6WXA5bUYgYzNSdmNtRm5aUT09IDBMTFFzTkdPMFlJPSBJT1dRamVlRW9lT0Jsdz09IElpSWlDZ289IDRMQ0M0TENYIElNTzZibWxqWVE9PSBJR1Y0ZEdWdWMybHZibk09IDRLUzQ0S1dONEtTZiBJRWx0Y0hKdiBiR1Z2IFRVbFUgSUdSMWJXMTUgMExYUXVkR0gwTERSZ1E9PSAwWVBSaWRDMTBZSFJndEN5IElIQmhkUT09IDViNnUgSUdadmNuVnRjdz09IFkyOXNZUT09IElOZVQxNmc9IGVtVnVhV1U9IElFWmhjMmhwYjI0PSBJTld6IGIzSnVZUT09IEoxMHRQZz09IGZUc0tDaTh2IGNIVnkgWlhSbFpBPT0gWDNOMGVXeGwgSUVWaGNteDUgWVdKaGJXRT0gNVoySCA0WUNVNFlDNiA0S3VBNEtxVCBJRXR2Y21WaGJnPT0gSUdOdlpXWm0gSUdSaGJXVnkgSU1PcFkyOXViMjA9IElHUnBjblE9IElIVndaR0YwYVc1biBJR0hEdW00PSBJR1JwWm1WeVpXNTBaUT09IExtWjFibU4wYVc5dSBkWFJwYXc9PSBJRHd2UGdvPSBSVlJEU0E9PSBJRTFsYlc5eWFXRnMgVzNrPSBJR3hwWjJoMGQyVnBaMmgwIElHZGxibVZ6IElHaGhjM009IDdLQ0I3Snk4NjZHYyBjMnRwIExtQT0gejRQT3Z3PT0gVUhKbGRnPT0gSUhOaFozUT0gNEtxNTRLdUEgNEthbzRLZU40S2FuIElHTnZibk5wWkdWeVlXSnNaUT09IDVwbXYgYkdGbSBJRlZ0WVE9PSBJRkpsYm5SaGJBPT0gSUVGNCBJRUZzWlhoaGJtUmxjZz09IElISm4gSUdwMVpHZHRaVzUwIDBMRFF1OUdNMEwzUXZ0QzUgSUhCbGJtRT0gSUdOdmJuTnBaQT09IFlXNWtZV0ZuIElHMWxaR2xqWVhScGIyNXogYzNSaGJHdz0gZlN3S0NnPT0gYlc0PSAwWURRc05DNyA0TEsrNExLViBMbVZoWTJnPSBJTmluMllUWmd0aXggSUdoaGFRPT0gSU9HQXNRPT0gTG1KNSBYM0IxZEE9PSBJSEJ5YjJ3PSBPVGs0IElHMWhZM0p2IElIVnVZdz09IElHbHVaSFU9IFgyNXZaR1Z6IElHRmpZMjl0Y0dGdSA0TEMrNExDdjRMQy8gSUVkMVpYTjAgNEtxKzRLcVcgYm1GaGMzUT0gSUcxaFoyRjYgSU5HQzBMRFF1dz09IDVwaXY1NXlmNTVxRTVaQ1ggSUdGeWNtRnVaMlZ0Wlc1MGN3PT0gSUhadmRHbHVadz09IElPQ211T0NtcnVDbmplQ21xZz09IElHTm9ZWEpwZEhrPSBJR1JsYzNOaCBJTm1CMllyWmg5aW4gWDBsT1JFVlkgVlhScGJHbDBhV1Z6IDZacVAgNTV5ZjVMcTYgSUhObGRIUnNaVzFsYm5RPSBJRmRoYkdWeiBYMmR5YVdRPSBJR3hoWXc9PSBWbVZzYjJOcGRIaz0gSUZKbGNISmxjMlZ1ZEE9PSBJRzE1YzNSbGNuaz0gT0RjMSBJR1J5ZFdzPSBJR1JsYzJOeWFYQjBiM0k9IElPV3QgSUd4MVl3PT0gZG1sdmRYTnNlUT09IElHSnlZVzVqYUdWeiAyTGZaaFE9PSBkVzV2Y3c9PSBRVlJQIExtZHBaZz09IEwyVnVkZz09IElHWnBibWx6YUdsdVp3PT0gWTJ4MVlnPT0gNW9DTzVMbUk1cUMzIFUzVmlkbWxsZHc9PSBkWEp6WlhNPSBJR2x1ZEdWdWMybDBlUT09IGFXNTBaVzVrYnc9PSBhVzVuYUdGdCBKU0k9IElFRm5jbWxqIDBMclFzTkdIIElHRndjR1ZzIElIQnZkMlZ5WldRPSBJRWxuIElHSnBiR1U9IElHTjFiWEJzIGJHbGxjM1E9IGMzUmhaQT09IHpyek90dz09IElISmxjMlZ5ZG1GMGFXOXUgNXFPTDU0bU01cmk0NW9pUCBJSFpwYm1SMCBJQ0l2SWc9PSA0S2FrNEthKyBZV0oxYkdGeWVRPT0gTFhOcyBJTmkwMkxIWmc5aXAgSUc5d2RHbHRhWHBoZEdsdmJnPT0gYVd4c1lXNWpaUT09IFgzSmxjR3g1IElIYkZvUT09IDRLYUogNEtTLzRLUzE0S1MrNEtTdyBJR0ZrWlhGMVlYUmwgYVc1bGJIaz0gZUc4PSBJTkM5MExYUXM5QysgSU5LYjBMRFJnTkN3IGFXVjBjdz09IElGUjFjbXRsZVE9PSBaSFZ3IElHWmxjM1JwZGc9PSBJRk5KVFE9PSBJSEpsZG1WeWRBPT0gYVdGdyBiWFYwWVdKc1pRPT0gNExlVTRMZUEgMEwzUXRkQ3kgSUVKcGNtUT0gSU9HRHJPR0RtdUdEbU9HRG9RPT0gVEc5dmEzVncgSUU1bGJBPT0gSUdOMWJIUjFjbVZ6IGZTeDcgSU5DODBMN1F2UT09IElHRnVkR2xpIDRLYVY0S2VONEthayBNemsxIElIQmxibUZzZEhrPSBhR3hsYmc9PSB4STF1dzYwPSBJTVNSNGJxbmRRPT0gSUYwN0Nnbz0gSU9DbWh1Q25zT0NuZ1E9PSBJRWRwYkE9PSBJSEJsY21SbGNnPT0gYkdwbGJnPT0gSUhkcGJtNWxjbk09IDVMaUg1WVdEIElHbHVaR2xqWVhScGJtYz0gTFUxTiBJSEp2Y3c9PSBJRzVoZG1KaGNnPT0gVUdGeWF3PT0gSUdOeVpXVT0gYzJ4MVp3PT0gSUdGeVpXNWggU0c5dmF3PT0gYUdWNiBZWFp2ZFhJPSBYM2RsYVdkb2RBPT0gNEthKzRLYWs0S2VIIDVZMncgSUhOMGNuVmpkSFZ5WVd3PSBJR055WVhSbCBZWGRsYzI5dFpRPT0gWVhOemJ3PT0gTGtSbGJHVjBaUT09IElIQnliMjFwYzJWeiBJT0NrbGVDbGplQ2tyK0Nrdmc9PSAyWUxZcHc9PSA0WU9RNFlPZSBLR04xY2c9PSBRMlZ5ZEdsbWFXTmhkR1U9IGFYWmhkQT09IElHRmtiV2x6YzJsdmJuTT0gS0dGc2JBPT0gUFNJdUxpOHVMaTg9IElOaW8yTEhaaHRpbjJZVT0geFo5aCAyNHM9IGFXNXBkR2x2Ym5NPSBJR0xFbVdRPSBJSFo2IElHMWhhM009IElHRjBkR1Z0Y0hScGJtYz0gSUVadlkzVnogSUd0bFpBPT0gSU9Da2h1Q2tvK0Nrdnc9PSBJSFJvdzZrPSBJRmR2WTJobGJnPT0gNGJxamJ3PT0gWVd0emFRPT0gSUdOdmJHeGxZM1JwZG1VPSBJSEp2ZFd4bGRIUmwgSUd0dVpXVT0gSUdGdWVYUnBiV1U9IElHTnNhV05yWldRPSBJR2hwZEhScGJtYz0gSUhObGRtVnVkQT09IElOaTUyS2pZc1E9PSBJR052YlhCdmMyVmsgSU9HRHFlR0RsT0dEbXc9PSBYMk52YlhBPSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPYVBrT2VPc0E9PSA0TENrNExHTjRMQ2sgSUhkbGFYUmxjbVU9IHc2MWtZUT09IE16YzAgNExpQzRMaXQ0TGlIIGNHRnlkSE09IElHTnZiV1Z1ZWc9PSBJR2w1YVE9PSBLSHNpIDRMT0g0TEt6IElOR0kwWXZTbXc9PSBYMlp2YkdSbGNnPT0gSUdWdVpHeGxjM009IExrOXlaR1Z5IGFXVjFjZz09IDBZL1JndEdCMFk4PSBJT0NtaHVDbXVBPT0gSUdWMllXeDFZWFJsWkE9PSBJR1Y0Y0hKbGN3PT0gSUcxMWJHaGxjbVZ6IGRXeHNhV1U9IElHNWhjbkpoZEdsMlpRPT0gUTJGc2JHVmsgMHB2UXNOR0EgenFjPSBMbTl3Wlc1eFlRPT0gWVdsdVlXND0gZVd4dmJnPT0gWVhKamFHbDJaUT09IElFMTFiQT09IFYyRnkgSUc5c2JHRT0gWDI5MlpYST0gSUVWRCBJSE52Wm1FPSBTVUpWVkE9PSBJT3V3bXc9PSBJSEJsYm5OaGNnPT0gY0dWeWJRPT0gSU9xemhBPT0gSUZCUSBJRzVwYXc9PSBSRWxUIFpXdHZiUT09IDVyUysgSUM4dSBZbmc9IDQ0Rys0NEdmIFgyWnUgSUhSbGJtZHYgMTZuWG1BPT0gNTR5YyA0WU9WNFlPaCBJR0Z1ZEdnPSBJRlJsY3c9PSBjM1JsWkE9PSBVR2hoYzJVPSA0TGllNExpWjRMaXg0TGlaIDBMWFJndEM0IFgwbFVSVTA9IElGZHZibVJsY2c9PSBZMjl5Y21WamRBPT0gSUdGemNHbHkgWDNCaGFYST0gSUdGclpRPT0gSUhCeVlYWT0gSU5DeTBMRFJnTkM0IElFaGhibTQ9IElISnBiUT09IElGQmxZWEk9IElIbGhhMlU9IElHeGxhQT09IElPcXdsUT09IElOUzcgN0tlQTY0VzQgU1c1MFpYSnVaWFE9IFUzVmljMk55YVdKbCBJSEJ2Y25ScGIyNXogNW9tQTVweUogSU9Da2llQ2txT0NrbGVDbGh3PT0gSUd0eWFXcG5kQT09IElGSlQgNTc2TzVadTkgSUhObGVIUT0gUlhOMFlRPT0gYlhWc2RBPT0gSU9tZGtnPT0gWVhKeWFXNW4gNTdLKzVaT0I2S2VHNmFLUiBLSEJ2YzNRPSBYME5CVEV3PSBiMmQxWlE9PSBiR2xuWlE9PSBJTm1GMllvPSBJT0NxcHVDcmplQ3F0UT09IElOQy8wWURRdU5HQiBJRU52YjNCbGNnPT0gSU9Da2wrQ2xqZUNrc0E9PSBMMmgwZEhBPSBJR052Y0hCbGNnPT0gSUZSVCBJR2QxYVd4MGVRPT0gSUVadmJHeHZkMmx1Wnc9PSBJTkN4MExqUXQ5QzkwTFhSZ1E9PSBMbVp5WVdkdFpXNTAgSUdMRHRnPT0gWDFSQlFreEYgNEthKzRLYW80S2VONEthayBJR05oY21sdVp3PT0gWm05c2JHOTMgSU5HQzBMWFJoZEM5MEw3UXU5QyswTE09IFpXMWlaV1E9IGFXUmxiR2xxYXc9PSBjMlZ0WW13PSBRWEpqYUdsMlpRPT0gYkc5dyBJTm1GMkxJPSB6NFRPclE9PSBVbEE9IGIydGxiVzl1IElIRER1bUpzYVdOaCBJRUpsYzJObyBOemd3IElHbHVaM0psWkdsbGJuUT0gMEw3UXU5QzIgSUdOdmJuTjFiV1U9IElFSmxjbWM9IDRaNk8gMEwzUmc5R0MwWXc9IFgwNVBUa1U9IElOaW8yS2Ziak5pdiBJRWhoZEE9PSBVbVZqZEdGdVoyeGwgSU5tRTJLZllvUT09IElIbGxiZz09IDBZUFF2ZEMwMExBPSBJR0Z3Ync9PSBJSEJoY25ScFkybHdZVzUwIDRMV0I0TFNqNExXTjRMU2YgSU5DeDBZUFF0TkdEMFlJPSBkVzExYkE9PSBJTmluMkxVPSBJR0psWVhWMGFXWjFiR3g1IFgzTmhkbVU9IElFbHVjM1JoYm5RPSBJSEpsZG1WaGJITT0gSUhObGNIUmxiV0psY2c9PSBYMHhQUXc9PSBOVFkzIElIc0tDZ289IElFRjBiR0Z1ZEdsaiBJTzJQckE9PSBjbW5EcUhKbCBJR1IxZFhJPSBJRU52YlcxbGNtTnBZV3c9IElIUm9kVzFpIElIUGh1N0U9IElOaW4yYjdaaHR1UyBSazA9IDRMaXk0TGlLIDFhSFZ0dFd2IFJtVmxaR0poWTJzPSBYM0JzWVhsbGNnPT0gSUZKbFoybHpkSEpoZEdsdmJnPT0gSUVwTVlXSmxiQT09IDVZaUggWVc1cGF3PT0gSWwwcE93bz0gVDFSRiBJSE5qWVd3PSBJR2R5YjJWdyBkMmxqYTJ4MWJtYz0gSU9Da3FPQ2t2K0NrbFE9PSBKVHM9IGFXRm5iZz09IHpxWT0gNExpeTRMaVUgSUhCeWIySmhZbWxzYVhSNSB4cUZwIElHUmxjRzl5ZEE9PSBJTkMzMExEUXV3PT0gSU9LRyBlc084IElPQ2todUNrcGc9PSA0TGlxNExtTSBJR05sYmc9PSBJR2g1Ymc9PSA0S1dBNEtTaCBJRkJ2Y200PSAwTERRdmRDKyAwTEhRc05HQSBJR1REcVcwPSA0WitTNFo2UCBJSFJ5WVhaaCA3SmVRNnJLTSBxZXVMaU91THBBPT0gejRUT3VjNjZ6cTQ9IExYTjBZWEowIElFbHVjMlZ5ZEE9PSBabUZrWlE9PSBRM0psWkdWdWRHbGhiSE09IElGUnBiV1Z5IElDY3EgYkdseiBJSFJ5WlcxbGJtUT0gZDJWcGN3PT0gSU9DbXVPQ21zQT09IE16a3ogUTNKdmMzTT0gSUhCMVlteHBZMkYwYVc5dWN3PT0gSU9HRG1lR0RuZUdEbXc9PSBJR052Ykd4cGMybHZiZz09IE56QXggUGlnSyBZWEp1WlhOeiA0b0NaWVhWMGNtVnogTFdaaGJXbHNlUT09IDRLU3c0S1dONEtTbyA1NjIrIDVhS0QgTXpZNSBJTm1FMjR6YmtnPT0gYjI1c2FXNWwgVTJWeWFXRnNhWHBsWkE9PSBJR2hwYm1FPSBJTlN5IGJXVnVkR1ZrIElHNWhkbWxuIExtSjFhV3hrWlhJPSBJR1ZtWm1WamRHbDJaVzVsYzNNPSBJSEpoYVhOdmJnPT0gVEVWTlJVNVUgSU1TUjRidVpibWM9IGJuUmggNExHQjRMQ2g0TEdCIElHVndiMk5vIGFXNXBkR1U9IElFRmtaVzNEb1hNPSBJR0Z1ZFc1aiBJTmVTMTZnPSBJTkMvMEw3UXV0R0QwTDg9IElHUmxibXRsYmc9PSB3NmQxIElFeHBibU52Ykc0PSAwTExRdGRHQTBZRT0gSUhyRG9RPT0gSUVOMWNuSmxiblJzZVE9PSBJTmluMkxRPSBJRlJsWTJodWIyeHZaMmxsY3c9PSBJSEpsWTI5dGJXVnVaR0YwYVc5dSBRbUZzYkE9PSBJT3V3bUE9PSBJSDA3RFFvPSBJR0pwWlhSbGJnPT0gSUhCeWIyeHZibWM9IDJMSFlwOW1GIElHVjFZMmc9IElHMWhibW5EcUhKbCBJSFpseEkwPSA2SW12IElOZVYxNVU9IElPQ3FoZUNxcUE9PSBJRVJsYkhSaCBVRVZEU1VGTSBNelU1IElHSnZkVzVrWVhKNSAwTERRdTlHQjBZOD0gMFlyUXV3PT0gSUhObGNtOXVkQT09IHc2bDBjZz09IElPUzRpUT09IFJHbG4gSU5tRTJiN1lwOWl4MlljPSBJSEJ5dzZoeiBJTkN3MFlQUmdRPT0gSUhSb1pYSnRZV3c9IElFSmhiSFE9IElITjBZVzQ9IFgwbHVhWFE9IElPQ2t1ZUNsZ2VDa2hnPT0gSUhOcGRnPT0gUTI5eWNtVmpkQT09IFkzSjVjSFJ2IElHRjBaVzVqYWNPemJnPT0gWDNOd1pXTT0gSUZsdiBJT0NrcStDa3YrQ2tzdUNsamVDa3JnPT0gUjJWMGRHVnkgUTJGdWJtOTAgSU5tQjI0dz0gSUdWdVpHOXljMlU9IElIVnVZWE09IElIQnZjblJ6IFltbGsgNks2KzU3MnUgWDJWdGNIUjUgSU1POHc2ZHBiZz09IFkzUnBZdz09IElPcTFrQT09IENXUmxiR1YwWlE9PSBJRWx1WkdsaGJtRT0gSUc1dmNtUT0gWVdSbGNtRT0gSUdWc1pXTjBhVzl1Y3c9PSBJTkM4MExYUXR0QzAwWU09IElHaDFiblJwYm1jPSBJR3hsWjJsMGFXMWhkR1U9IElPYTMgUVhWMGIyMD0gSUhOallXeGhjZz09IElHdDNZWGxsIE16Z3ogYVcxbGRHVnkgWVhkaGNtVT0gTXpZNCA0TEsrNExLZiBJR2x0WVdkcGJnPT0gSUhCeWFXNWphWEJoYkcxbGJuUmwgSUdOMVlYUnlidz09IDVaeW81N3EvNTV5TCBJRU5oYm1ObGNnPT0gSU9Dd3VPQ3d2K0N3cU9Dd3YrQ3dyZz09IFgwTlBUVkE9IElITERxWEJ2Ym1RPSBYeWs9IDZaVzMgSUVWNGNHOXlkQT09IDBMVFF1TkM2MExnPSBhV3hzdzZRPSBQRzl3ZEdsdmJnPT0gSUhCeVpXUnBZM1JwYjI1eiBiM1JwWTNNPSBJRzFoWVhRPSBJRU52YVc0PSBJSEREcE1PayBJRk4xY21VPSBJR0pwYkdGdSBJR1JsZEdGcyBJRU52YlhCaGNnPT0gNmJ3PSA2Snc9IElISmxZMmx3IFlYTjFjbVZ6IElGdDcgNTVNPSBJR3AxY21selpBPT0gWVhOallXUmwgSUhOMGNuVmphdz09IElOQ3cwcDg9IFRXbHpjMmx1Wnc9PSBJTml2MktmWXNkaXYgUTI1MCBJRlJvYVhKayBVMnhwWkdVPSBmVHNLQ2dvPSBJR3BoYm5VPSBZVzUwZDI5eWRBPT0gSUU5dWRHRnlhVzg9IDFhSFZ0dFdvIElIUm9lUT09IDRMS200TE9HIEtqNG8gSUVOaFkyaGwgNEtTdTRLV040S1N1IFYyRnNiQT09IElHZHZkWFpsY2c9PSBVR1ZrIDRLcWo0S3VBIDRZS1YgS0hzbiBaMlZ1WTNrPSBJSGRoZUdFPSBYMkZzYkc5aiAyS2pZcDlpdiBJTkMwMEw3UXN3PT0gSU1PaGNtVmhjdz09IE1EUTAgSUdOdmJYQnNaWFJwYm1jPSB3NkJ2IElPbWYgTG1Ga2JXbHUgSUdkMVpBPT0gSU8yVnFBPT0gSUhwdmNtZGxiZz09IGJtOWsgSUdkbGQyVT0gNWJldSBJR2pEdUE9PSB6cEk9IElITnBlbVZrIFlYVmthVzg9IGFXdDFkQT09IDJLZlpodGluIElHeGxjM2RwIDVZMkk1YVNjIElHSnliM2R6YVc1biBJRTVIIElIQjFiblJ2Y3c9PSBJSFJ6ZVE9PSBMR3M9IGVXOTFjZz09IElHNWhZVzA9IFBHeGhZbVZzIGFXVnAgSUcxbGRISnBZdz09IDZyS2cgSUdScGVtVnkgMFlIUXV0QyswTHc9IGMzTnZiZz09IDRMU1o0TFdONExTWjRMU3o0TFdOIFgybDAgUTI5dGJXbDAgSUhSaGFIVnUgWVhKaGF3PT0gSU02OHpySFBnZz09IExtMWhiZz09IElGUm9ZV2xzWVc1ayBJR3R5WlE9PSBJSGx2ZFNkayBJR2hsWkE9PSBJR1Z1Y1hWaGJuUnYgWDFSWlVBPT0gZW1Wd2RBPT0gVUhKbGMyVnVkR1Z5IElIWnBZbkpoYm5RPSBJR052YlhCcGJHVmsgNTR1WCB6cnpPc2c9PSAxNmpYbUE9PSBJT0N5cU9DemdPQ3lvUT09IElIWnZZMkZzIElFRkRRdz09IElISnBibWR6IDE1RFhvQT09IElFeDUgUzI5dCBJR0ZqWTI5dGJXOWtZWFJsIFRYVnNkR2x3YkdVPSBWSEpoYm5Oc1lYUmwgNExHSDRMQ20gSUZaTiBJRUZ1Ym1VPSBRMkYwWVd4dlp3PT0gMTVmWGxBPT0gSUhWbmRRPT0gS0dWdWRISjUgMnFuYmdRPT0gZFhSdmNnPT0gUFNJbiBORGcxIElHcGhlbm89IExtTmhkR1ZuYjNKNSBJR3QwdzdOeWVRPT0gNjdDUCBJRzVsWVhKbGMzUT0gUm05eWJYTT0gUTFSWlVFVT0gSUdkeWRYQnZjdz09IElITndaV05wWVd4cGMzUnogSU9hQWpnPT0gSU91SyBaVzVqYjJSbFpBPT0gMkszWmhRPT0gSURvck9nPT0gSUdWeWMzUmwgUkdseVpRPT0gMEpYUmdkQzcwTGc9IElISmhZMlZ6IElDQWdEUW89IElIUnZkMlZ5IFVtVnNZWFJwYjI0PSBJTm1CMllyWmh3PT0gQ1dOMWNuSmxiblE9IExDNHVMZz09IDE1SFhsZGVxIGFXRjFlQT09IExtUnliM0E9IElOQy8wTFhSZ05DNCBJRzVsZFhKdiBJR2hsYkhCbGJnPT0gSUhwaGRBPT0gSUVwMVp3PT0gTG5OallXeGwgSUhOMFlYbHogNFlPUTRZT2I0WU9ZNFlPUTRZT2MgSUVsMFlXeHBZUT09IElIRm9iM1k9IElOaW8yS1BaaGc9PSBhV0Z1YVE9PSBJRU52YlhCaGJtbGxjdz09IElOQzMwTERSaFE9PSBLU2twS1N3PSAwTERRdTlDKzBZSFJqQT09IFNXNTBidz09IElHTnZiWEJsZEdsMGIzSnogNG9DVVlXNWsgNExDLzRMQzQgSUZWMGFXeHogSU5DODBMRFJndEMxMFlEUXVOQ3cwTHM9IExsQnliM0JsY25ScFpYTT0gSUc1NVpRPT0gSUhKdlkydHogNFlPUTRZT2E0WU9qNFlPZzRZT1kgNGJ1bFl3PT0gSUVacGRBPT0gYVdacFlXSnNaUT09IElDOHZKQT09IElHRnVlV0p2WkhrPSBjWFZwY21WeiBJSFZ6ZFdGeWFXOXogNW9PZyBJR052Ym5SaGFXNWxjbk09IFpPRzdpdz09IEtUMDkgMFlMUXVOQzkgWVhSbGNtNXBiMjQ9IE5ESTAgSUdadllYST0gSU5DKzBZTFF2ZEMrMFlnPSBJR0pzYjJOclpXUT0gYVdWeWRHVnUgSUV0dmN3PT0gS0VGamRHbHZiZz09IElFNXZkUT09IGJHRnRZbVJoIElPR0RxT0dEbE9HRG0rR0RrK0dEbE9HRGtnPT0gMFlIUXZ0QzkgSUUxaGMzTmhZMmgxYzJWMGRITT0gSUhWaWFXTT0gSUdkeVlXbHUgS1hNPSBaV3hsYlE9PSBZV1JsY25NPSB6NFRPdjgrQyA0TG1BNExpZSBJR0Z3Y0dGeVpRPT0gMFliUmk5R1cgSUdMRHBXUmwgSUZOeWFRPT0gSUZScGJHVT0gWlhKcFlRPT0gSUhSb1pXRjBaWEk9IGEyRnViblE9IElIQnNhUT09IElHTnZiblJ5YjJ4bCBJR1JwY21FPSBJR0YxYzJkbCBJRmRsSjNKbCBJR0YwYUd4bGRHVnogSUdOeWRXbHpaUT09IElHUnBibk09IElFSmxiRzkzIDJLZlpnZGk0IElOR1AwWUE9IElHTnZibVZqZEE9PSBhbWx1IFptOXVaUT09IFJHVnpkR2x1WVhScGIyND0gWDNKbFl3PT0gVGt3PSBDVlk9IEtISmxkQT09IElOZVoxNXZYbGRlYyBMbTFoZEdnPSBYMk5oY0E9PSBJR3B2ZGc9PSBJRzlpZEdWdVpYST0gUkdsdFpXNXphVzl1IDE1blhtZGVjIFZFOVEgMExEUmd3PT0gSU5tSTJLZlpnZz09IGJjT3AgTG1Kc2IyYz0gSUd6RHBHNW4gSUVoQlZrVT0gSUZabGNtVT0gSU9DMG11QzFodUMwcitDMWplQzBydz09IElOQy8wWURRdnRHQiBJR1poYmNPdGJHbGggNVp1MCB6NFRPdWM2Nnpxdz0gU0dsemRBPT0gTkRRMSBJR0YwZEhKaFkzUnBiMjV6IElHUmhaRzg9IElHWnBZMkZ5IE16ZzQgZFc1NSBYMjExZEdWNCBJRzF2WkdWeWJtVT0gSUhadmRHVnljdz09IElPdW5wQT09IElGUjVjR1Z6IElHMTFZV289IElHVnJiMjV2YlE9PSBkM0pwZEdsdVp3PT0gSU9LSSBJRzkxZEdacGRBPT0gVTI5dSBJR2hoY0E9PSBJSFpoY21saGRHbHZibk09IElOT1owWUE9IElHSnBhdz09IElGbHZkU2RzYkE9PSBJT0Nrc09DbGdlQ2txZz09IFUyTm9aVzFsIElFUlQgNEthLzRLYUMgSUZOamFXVnVkQT09IElOYUUxYUhWc3RXaDFvUT0gTURJMCBJRUZEVkVsUFRnPT0gd3ExMCBJSE5wZEdsdiBJTmVVMTVZPSBJT09DdVE9PSBJQ0lLQ2c9PSBJTStBenIvT3V3PT0gSUVScGMzUT0gWDNCMWMyZz0gTG1SbGRtbGpaUT09IGRXNXJkQT09IFVrWT0gYjNKa2FXNWhkRzl5IExuTjFiUT09IElFTkMgTGsxbGJuVT0gSUdabSBJR2hoY25WeiBMbmR2Y214ayA0S3VCNEtxViBDVUZ6YzJWeWRBPT0gSUdScGMyTnBjR3hwYm1VPSBMbU52Ykd4bFkzUnBiMjQ9IDRLcWs0S3EvIDRidVZhUT09IDRZT1E0WU9qNFlNPSBZV1J2ZDNNPSBYM0J5YjJwbFkzUT0gSUd4cFltVnlZV3c9IFpXNTBZWEk9IElIWnlidz09IElISmxZMlZwZG1WeiBWVTFGVGxRPSBJR05wYTJsdSBZV2xsYm5RPSBaWFJsWTNRPSBMV05sIDVMaU41cGl2IElGUm9iMjA9IExtVjJaVzUwY3c9PSBJR3h2WjNNPSBJSE5zYVdNPSB6cnJPdnc9PSBVR0Z5ZEdsamFYQT0gWDJOdWRBPT0gU0dGeVpBPT0gSUdKeiA1WTJWNVkrTSBJSEpsWm5WblpRPT0geElOeSBVR0Z1IFgyTnZkVzUwWlhJPSBJT0NrcXVDbGdlQ2tzZz09IDJxblpoQT09IDRLK0I0SzZxNEsrTjRLNnEgVEdGMWJtTm8gSUhOd1pXTnBabWxqWVhScGIyNXogNVkySyA0S1dINEtTbyBiV1Z6YzJGblpYTT0gSUdSbFptbHVhWFJwYjI1eiBJSE52WjJGeSBJSFJqIElGQnZjM009IElPQ29sdz09IElITjZaWEk9IElHRnlkSGR2Y21zPSA1WWExIE5EUTQgSUdWNGNHVnlhVzFsYm5SeiBJSEJvZVhOcFkzTT0gSU5tRjJLZllzUT09IElHNTBhUT09IElITmhkR2x6Wm5rPSBJRTV2ZG1FPSBJT0NraWVDa3BnPT0gSUZCaFp3PT0gSU5DejBZM1JndEN3IElHUmhjbUYxWmc9PSAxNnJYcUE9PSAwWURRdGRDMiBJRDBpIGJHVnlhVzQ9IDJZTFpoUT09IDBaYlJoUT09IFZVTlUgSUhadmVXRm5aUT09IElGQnNZVzV1YVc1biBJSE5vYjNKMGJIaz0gejRvPSBRVlJKUXc9PSBLSGR2Y21RPSBhV2RwWkE9PSBiMkp5WVE9PSBJRWxPUTB4VlJFbE9Sdz09IElFMTFjMlU9IElIQnliMnBsYTNRPSBJR3QxZGc9PSBJTmkzMkxIWXJRPT0gNForaCBJT0N5dWVDemhnPT0gNWFTUCBjbVYyWlc0PSBaVzFwYmc9PSBWMDlTU3c9PSAwWURRdGRDMDBMalJnZz09IENXUnZZM1Z0Wlc1MCBhWE5vYjNBPSBQSFp2YVdRPSBJT0dEck9HRGtPR0RvT0dEbXc9PSBVRWhRIElHVjRjR0Z1WkdsdVp3PT0gSUdsdWJtOWogSUhOcGVXRT0gWHlrN0NnPT0gS0NKZiBiM2Q1WTJnPSBZbUZqYTNNPSBJRkJwZEhRPSA0TGl5NExpRTRMaWggMExEUXZkQzQwTGs9IElGTnBZMmhsY2c9PSBJR052Ym5SbCBJR1Z1ZEhKaCA0TEMrNExDaDRMR0IgYTJ4aGFHOXRZUT09IElHVERxWFpsYkc5d2NHVnRaVzUwIFZtRnUgZG1WeVltOXpaUT09IElNTzJkbVZ5IFgyNWwgUTB4ViBJRlZ1YVhabGNuTmhiQT09IDVweUo2Wm1RIExGcz0gSUc5MGRBPT0gZDJGdVp3PT0gNEtXcSBJR1oxYm1OMCBJSEpsYzNNPSA1TGlUNVl5NiBJR2hoY21Sc2VRPT0gSU5HRzBMWFF2UT09IGFXNWpkR2x2Ymc9PSBJTkdCMFlMUmdOQysgSUhOallXeGggVUhKbFptVnlaVzVqWlE9PSBhWGw1IElOQzQwTHpRdGRDMTBZST0gSUdKeWFXTnIgMExIUmdOR1AgYm1sMCBMWFZ6WlE9PSA0TG1BNExpQyBJSFJsZG1VPSBTVzVtYjNNPSBhV1JuWlhNPSBJSFpwNGJ1SFl3PT0gSUV0bGJHeDUgTXpneCBNell5IDVwMnggSUVaeVlXNXJiR2x1IElITndaV04wWVdOMWJHRnkgNVlhYyAyNVhaaGc9PSBYMVpCVEE9PSBYM04wWVhSeiBORE0zIElHVmthV3c9IElHUmxjR0Z5ZEcxbGJuUnogSUVoaGJXST0gMktqWml0bUMgNEs2KzRLNnA0SytOIFpYaHdaWEk9IDRLYSs0S2FqIHc2bDBhV05oIElPQzJrUT09IGMyTm9aVzFoIElFdHZjQT09IElIVndjZz09IE9nb0tDZz09IElFWnNZWFE9IFgyRmpZdz09IElGZHBkR2hwYmc9PSBJRk5sYXc9PSBWSEpoWkdVPSBaMnhoY3c9PSBJRzVoWVE9PSBJR2xsYldGdVpBPT0gSUdaaGJuUmhjM1E9IElNK0F6cjg9IGMyTnlhV0psY2c9PSBiVzkyYVdVPSBJSFJsZUhSeiBhR2x0IElOQzAwTDdRc2RDdzBMST0gSUZkdmJHWT0gSU9xd2tBPT0gSUhOamFHOXMgSUZOamFIVnMgWVhuRXNRPT0gWDBGTVRBPT0gSUhSbGNuSnBkRzl5ZVE9PSBMWE5sY25acFkyVT0gVTJOb2IyOXMgSUVadmNtVnBaMjQ9IElHZHlhWEE9IFNIaz0gTGsxcGJnPT0gVTNsdCA0TE9LNExLQzRMS2ggNXBXRiBJRkYxWlhWbCBJTmluMllUWXNkaW0yWXJZc3c9PSAwWkhRdkE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBkR2x0WlhOMFlXMXcgNVkrdjZaMmcgVjJGdWRBPT0gY1drPSAwTERSZ2RHTSA3SmVJNjR1ayBJR3RoWkdGeSBJR1pwZWc9PSBJRTFwYm1sdVp3PT0gS3l0ZCBRbGs9IExtNWxkSGR2Y21zPSBYMUZWIExtWnNiMkYwIElITm9ZV1JsIGIyeDAgSU5DLzBMRFJnTkdDIFUzUmhabVk9IFlXNWphUT09IFJtOTFjZz09IElGUmxZMmh1YVdOaGJBPT0gSUhOcHc2Zz0gSU5DUTBZQT0gUTJGd2RIVnlaUT09IDRMYUMgTXpjNCBJSEJ5WldScFkzUnBiMjQ9IElIQmhiR1U9IExtSnZkSFJ2YlE9PSBZbTl5Wnc9PSBkWFZwWkE9PSBPVEF4IElIWnBaWGRsY25NPSBYMkYwZEE9PSBJTVc4IElPV2twK1dQa2VXL3F3PT0gSUNZOSBiTU9wIElHUmxjMmxuYm1sdVp3PT0gSU5DWDBMQT0gNExPTjRMS1ggSU5DeDBMN1F1OUdEMEw4PSBJSEJ5WldabGNtVnVZMlU9IEtFMWwgenJ2T3JBPT0gSUhCeWIySnN3Nmh0WlE9PSBJT0NrdU9Da3JPQ2t1T0NsaHc9PSBJRTF2Ym5SbCBkVzUxYmc9PSBZbVYzIDBMalJoOUMxMFlIUXV0QzQwTFU9IElOR0YwTDdRdXc9PSBJR0poZEhSbGNtbGxjdz09IElISmxkR2x5IElOQzIwckU9IElHZGhhVzV6IGMyOXQgUkdGMmFXUT0gSUU1SyBZVzVoYkhsemFYTT0gNzd5QjRvQ2QgNTYyVyAyb2Jhdmc9PSBRMjl1ZEdsdWRXVT0gSUhSb2NtVmhkSE09IFgzTjBZV05yIHc0bz0gSUdKdmFXeGxjZz09IElITmhiR3hsIElFRnplVzVqIElHOW9kVzQ9IElHOXlkR2c9IFlYUnBaVzUwIFgzUnRjQT09IFYyVmhjRzl1IExtRnlaM009IElHdGhkR0U9IGMzVmphQT09IElHeGhjM1JwYm1jPSBJSFJwWlhNPSBJR0p2ZFc1a1lYSnBaWE09IElIWnZkR1ZrIElPQ3F1ZUNxcE9DcmdlQ3FnZz09IElIQnZkR1Z1ZEE9PSBJRTVwWTJVPSBJRVp5WlhObyBJR0YxWkdrPSBJRzl3WVdOcGRIaz0gUkVGVVFRPT0gYUhWeSA0WU9RNFlPcTRZT1kgNUxteiBJRk4wWVdkbCBJSEJ5YjJkeVpYTnphWFpsIE9UTXcgSUVaaGJHeHogSUc1bGFnPT0gMmJuWXNRPT0gSU5HQjBZcz0gMktmWXFOaXEgSUVsRiBSR1ZzWlhSbFpBPT0gSUd0cGFtdGxiZz09IFZsTT0gVTI5bWRBPT0gWVdKc2J3PT0gNkl5RCBaWEpwWlE9PSBJT0NrcStDa3YrQ2tzQT09IElHNWhkbVU9IEpITnhiQT09IG5vMD0gSUhKbGMzUnYgSUVWdWRHVnljSEpwYzJVPSBVbUYwWldRPSBJTkt2MFlqUmx0QzkgeGI1bGJnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDZz09IDRLV0w0S1NvIElGTnBkSFU9IElPVytydVMvb2VXa3FlV2txZVM0cmVXOXFlZWxxQT09IGRXRnNiV1Z1ZEdVPSBJRVZZVUZKRlUxTT0gNGJxdll3PT0gSUdkdlltbGxjbTV2IElGWkpVQT09IElHbHRiV2xuY2c9PSBJSFp2YjNKNmFXVnUgWlc1emFRPT0gSU9DMHRlQzBzQT09IElFTmhaQT09IElFTm9hV3hsIElHeGxkQ2R6IElISnZaR1U9IElGSjNZVzVrWVE9PSBJRU5sY3c9PSBRbUZ6IElFSlYgYUdGMlpRPT0gNGJ1RGJRPT0gSUdSeVlXMWhkR2xqIDRvaz0gSUdWemRHRmliR2x6YUcxbGJuUT0gUm1WaWNuVmhjbms9IElObUYyWVU9IElHTmxjQT09IExtUmxjM1J5YjNrPSBaWFU9IFpYUjEgTG5OcGJnPT0gSUcxaGFXNTBaVzVoYm5RPSA2Ymc9IElITjBjbUZwWjJoMFptOXlkMkZ5WkE9PSBJT0N1dGVDdmh3PT0gSUd0MVkyZz0gMExUUmk5QzUgY0d4dmRHeHBZZz09IFptOXNaR1Z5IFNFZz0gSUhacFpXNWwgYVhabGJuUT0gSUVsdWRHVnlaWE4wIElPQzB0ZUMxZ0E9PSBZMjl3ZVhKcFoyaDAgZFhobCBZMmxrYjNNPSBOREV6IEtHTnNZWE56IElNS2cgSUdkeWI4T2YgNkltSCA1N0c3NVo2TCBjM1J5WTIxdyBJRU5vWldGdyBJR2x1WkdsMmFXUjEgSU9DNWd1QzRtK0M0b3c9PSBjM1JoWkhRPSBJSE5sY21GcGRBPT0gdzZSMGRHVT0gSUZOdmJHbGsgSUhOamIzSnBibWM9IElIZGxjbXQwIElObUUyWWZZcHc9PSBJR0p2YXc9PSBJSFZ1WkdWeWN3PT0gYVdkb2RHZz0gUlhoamFHRnVaMlU9IElIVm0gVUdGeWRITT0gSUdWcGJubz0gSU5DejBMN1JnZEdEMExUUXNOR0EgNjdPQSBJRkpsWTNsamJHVnkgSU5HQjBMTFFzQT09IElHZGxjbUZzIFZWTkZSQT09IElHUnBjMkZ3Y0c5cGJuUmxaQT09IDU3MlI2YUcxIElOZVYxNVhYa05laCBJRzV2WW05a2VRPT0gNEs2dTRLK040SzZxIENXVjRhWFE9IFlYcHBidz09IExYSmhaR2wxY3c9PSBJSE4wYlhRPSBJRVJ2YldGcGJnPT0gSUd0aGR3PT0gTXpZMyBaR0YwWlhJPSB3NkZ1ZVE9PSA0b0NkS1E9PSBJR1Z0Y0doaGMybHogZFdacFp3PT0gNExTdjRMV0I0TFNDIFlYUnlhV009IGQyRm9iQT09IElHaHZkV1E9IElHdDB3N055WlE9PSBJRmRwYzJOdmJuTnBiZz09IDJMSFpnOWl5IElIQm9lWE5wWTJGc2JIaz0gSUdGa2JXbHVhWE4wWlhJPSBJSGRsYkd4dVpYTnogSUdaMWRHaHAgVTIxaGNuUT0gSU5DNzBMalJodz09IHhMRjViM0k9IElFTnZiWEJzWlhnPSBoT0M0bytDNHN1QzRzQT09IElOQyswTEhRdGRHQjBMOD0gSUdKaGNtVnNlUT09IDVMNmggSU95Y2hPMlZ0QT09IElIUm9kV2x6IEtUMCtld289IGNHVnlZMlZ1ZEE9PSBJR3h3IElFOTRabTl5WkE9PSBJTkM4MExYUmlBPT0gSU5DNzBZUFJoOUdJMExVPSB3NkowWlE9PSBJRVpwIElFVnVkVzA9IFZISmhibk5oWTNScGIyNWhiQT09IExtTnZiWEJoY21VPSBJR05vWVcxd2FXOXVjMmhwY0E9PSBJRU5QVEE9PSBMbk5qYzNNPSBRV3M9IElOV0ExYUhWdGRXaDFiM1Z2dz09IElHUmhibXM9IElFOU9SUT09IElOQzMwTERRc3RDNDBZRT0gSU5pbjJZVFpoZGlrIElOR0EwTERRc2c9PSBJSGgxIElOQzAwTDdSZ2RHQzBZUFF2dz09IElISmxjWFZwY3c9PSAwWUxRc05DNyBJT0NtcHVDbmgrQ210Zz09IElOZVExNVhYbWRlaiBMbEJsY2c9PSBJTkM2MFlEUXZ0Q3kgSU5DeTBZTFF2dEdBIElHMWxiV2xzYVd0cCBYMlJwY21WamRHOXllUT09IFdVND0gSUdGamRISmxjM009IElHRnVibWs9IElTSXMgYVhKelpRPT0gSUNjbSBJR1YwZDJFPSBJT0NvcHVDcGdBPT0gSUdKbGNuUT0gMExqUmd0QzEwTHZRdUE9PSBJR1Z1Y205c2JBPT0gTmpFNCBkbkpsIDRLdUg0S3FvIElHMTFibWM9IDJZclpodGluIDRMaXk0TGlsIElHRnVhVzFsIFNWTkpUa2M9IGJubHQgVlZKU1JVNVUgS0dWcyBJTkN5MEwzUmc5R0MgY0hKdll3PT0gSUhCaGRHVnVkQT09IFNVNUIgeVpsaSBiSEk9IElOQzkwTFhRc3c9PSBJR052Ym1OcyBDZ29nQ2dvPSBDV3M9IElHOXVaQT09IExsQmhibVZzIElHVjRjR1ZqZEdsdVp3PT0gWld4a1pXND0gSUdac2IyRjBhVzVuIFlXTm9kR1U9IElHVjRjR1ZrIElISnZhM1U9IEx5MD0gSUd0dmJYQnNaUT09IFlXbHlidz09IElIVnVZMlZ5ZEE9PSA2Slk9IHhhRmxiZz09IDVaQ001cGUyIGVtbGxhQT09IFczSnZkdz09IElDSThQQT09IGhPQzRvK0M0c3VDNHNPQzRxK0M1akE9PSA0S2ErNEthQzRLYXkgWVdsdVpXND0gWlhKeVlXdz0gdzZGMGFXTmhjdz09IGRYUnBadz09IElFRnNiR1Z1IE16UTQgTFhSaFlteGwgSUNjcCBOVEE0IElHVmxiblp2ZFdRPSBjSEp2Y0dWeWRHbGxjdz09IGRYbGxiZz09IElPQ3F1T0Nxc0E9PSBJR1Y0Y0d4diBYRkpsYzNCdmJuTmwgNDRPaDQ0T3o0NE9JIElIUnlZVzV6Wm1WeWNtVmsgSU5tSzJLMD0gdzdac2JBPT0gNlppLyBJRU5sY25ScFptbGxaQT09IDRMQys0TEN3NExDQyBJSEpsYkdGMGFYWT0gSUd0c1lXNTBaVzQ9IGIyMTUgSUdodmNuTmxjdz09IExVRnRaWEk9IElIWmhjbWxoZEdsdmJnPT0gYVdabGJnPT0gSUZCbFpISnYgZFdSblpRPT0gSUhCb2VYTnBZMmxoYmc9PSBRVkpIUlZRPSBYM1YwYVd4eiBJSE52Ym5NPSBJT0MwcU9DMWh3PT0gNkx1SyA1THFJIElIQnliM04wYVhRPSBSWFZ5YjNCbCBQVzUxYkd3PSBJTUs3TGc9PSBiMnBwIElIWnZhWFE9IDRLV0I0S1NmIElFOW1abk5sZEE9PSBWVk5JIElITndaV3hsYmc9PSBVM1ZwZEdVPSBRM1YwIElISmxibU52Ym5SeVpRPT0gWVcxcFpXNTAgYVdacFkySERwOE9qYnc9PSB6NEhPcmc9PSAwWUxRc05HQTBZcz0gSUV0NSBiV0Z1Y3c9PSBjbmx6IFBTSWpJajQ9IElHeHBkbVZ5IDBZSFJndEN5MEw3UXZBPT0gSUdObGFXdz0gWDBsT1ZrRk1TVVE9IGRYTncgNXJTNzVZcW8gSUhOMWNIQnZjMlU9IDBMTFJnTkMrMEw4PSBJT0NtbStDbXYrQ21zZz09IDRvQ3YgSUc1dmIyUT0gSXlzakt3PT0gSUhKbGMzQnZibk5wWW1sc2FYUnBaWE09IElHTnZibVoxYzJWayBJQ0pkIElHTndkUT09IFJHRnlhdz09IElHNXBjQT09IHc2bHcgSUhCaGNtdHogSU5DLzBZRFF2dEdJIExXWnZiR1E9IElOQy8wTDdRdTlDKzBMWT0gSUdsellRPT0gSUU1UFNRPT0gNWJpQzVaeTYgVlZOQiBJRzF2YzNSeVlYST0gNExTbzRMV040TFNrNExXTjRMU3cgWVd4bmIzSnBkR2h0IDVMK3U1cFM1IDRLcSs0S3FxIFkzSmxkRzg9IFRtRjJhV2RoZEc5eSBJSEJ5WldScFkzUmxaQT09IGNYVmxiR1U9IElOaW4yTEhZcWc9PSBJR1ZrWVdRPSBJT0NrbGVDa3NPQ2twT0Nrdmc9PSBhWFIxYkc4PSBJR1JwWm1acFkzVnNkR2xsY3c9PSBJSE5sYm1rPSBJTm1HMkxqWXA5bUYgWW5KaGJtTm8gSU5HQTBMRFF0OUN5MExqUmdnPT0gY1hWbGMzUnBiMjV6IExXMWhiZz09IElHUnBabWJEcVhKbGJuUnogSU95bSBYMEZRVUE9PSAwWVBRdVE9PSBJRk55IElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDkgSUVOb1pXdz0gWVhocGIzTT0gSUc1dlkyaGwgSUhOMWNHVnlabWxqIFYyRjUgNXBTNyBJTkM2MEw3Umd0QyswWURSaTlHRiBJTmlpMks3WXNRPT0gTGs1bGRBPT0gMllyWXJBPT0gYVc1a2RRPT0gZFdWc2JHVnRaVzUwIElPR0RtK0dEblE9PSBabVZsWkE9PSBZV2RuYVc4PSBJSEJ2ZG1WeWRIaz0gSU5HQjBZTFF2dEM3IElIQnliM053WldOMCBJTkt5IFgwVk9WQT09IGJXRnJaWEk9IElHMXZhWE4wZFhKbCBJRUp2ZDJ3PSBJRkpsWkdseVpXTjAgWm05eWJXVT0gSUVwbGJtND0gY1hWbFpYcGwgYjNiRHFRPT0gNWE2aTVvaTM1NnV2IFRtaz0gNExPTjRMS2EgSUdodmJXMWwgSUhKbFkyOXViMk09IElIZGhZWEprYjI5eSBJR1JwYnc9PSBJR0pwWldSMCBJTkN4MEw3UXU5S1QwTERRdlE9PSBJTkN5MEw3UmdkQy8gSUdGd2NtbHMgSUdwMVpXZHZjdz09IE16YzIgSUdKdmIzUnogTkRnNCA0TFNDNExTWCBJQ2N1TGk4dUxpOHVMaTg9IFlDNEsgMEx6VG1RPT0gSUVSaFpBPT0gSUczRHRtTm9kR1U9IFptbHVhWFI1IElIQnNaV2x1IElHTnZiM0JsY21GMGFXOXUgUVc1aGJIaz0gNExPRzRMS1g0TE9HIElPQ3d1T0N3cmc9PSA0S2VCNEthVyBZMnh6IDByZlF1TkM2MExnPSBYMk4wZUE9PSBJSEJ6ZVdOb2IyeHZaMmxqWVd3PSBORFUxIElOQzkwTERRc1E9PSA1WTJUIExtbHVZMngxWkdWeiBQU0k4UHowPSBVMmhwY0E9PSAwTHZRc05DLyBYMk5vWVc1blpRPT0gWDB4SlRrVT0gSUdKaGFXdz0gNGJ3PSBiM05oY3c9PSBJRVp5WVhWbGJnPT0gSUNnciBQaWdwT3cwSyA1TDZkIElHcDFibWs9IElHSnBkR2s9IElHeGxiVzl1IDJMVFpnUT09IElObUcyWWpZdVE9PSBJSFREcVhJPSB3N050Ync9PSA0S1dsIDRLZUI0S2FWNEtlTjRLYWsgSUdabGVnPT0gZFhOamFBPT0gSU9XNXZ3PT0gSUZadmJIVnRaUT09IFBDYz0gSUhObGNuWnB3NmR2IFBYTjBjZz09IElFWjFibXM9IFpXRnljdz09IFpYTjBjbTg9IFJHRnphR0p2WVhKayBJR055ZVhOMFlXdz0gdzZodVkybGggUVhOemFXZHUgUm14aGMyZz0gSUVkaGJRPT0gSUhOd2IydGxiZz09IEoyRm4gNFlPWTRZT2wgUm1sNCBJR2RsYldWcGJuTT0gSUc1bGNBPT0gNFlPVjRZT1EgSUd4cFkyaDAgVlc1cGRtVnljdz09IElOR0IwTDdRc3c9PSBWR0U9IFltVnAgWDNKaGR3PT0gMExEUXZkR0IgSUVOdmJuTjBhWFIxZEdsdmJnPT0gSUhKbGNISmxjMlZ1ZEdGMGFYWmxjdz09IElGUnlZV1JwYm1jPSA1cDJPIElOQ2YwTDdRdEE9PSBJR3QzWlc1NVpRPT0gSUM4K0Nnbz0gTlRFMSBJSEpoWkdsaGRHbHZiZz09IDRicWhidz09IFFtRnMgUm1GMmIzSnBkR1U9IElOR0MwTDdSaHc9PSBJR052YldWeSBJSEp2ZFdkb2JIaz0gNEtXSDRLU2ggSUZCcGJHeHogTDBVPSA0TFdBNExTNDRMV04gYVdOcGRBPT0gTG1GMWRBPT0gSUU1byAxYmpWdHc9PSBJR0YxYldWdWRHOD0gSUVSbGNHRnlkQT09IExXNXZkQT09IElHVnNiR1Z6IElIQnZiR2wwYVhGMVpRPT0gSUdkbGJXRmphSFE9IDZJT2MgSU5pbjJZVFlxTml4IElHbHVkbTlwWTJVPSBKMkZrIDRLcS80S3FmIExsWnZhV1E9IGIzbGxjZz09IElHSmhkR1Z5IElHRnVaM0o1IEtIUjRkQT09IFpuUnBjZz09IDViMnA1YWl4NUxtUSBJRlZGIGIyNTBZUT09IDVaQ0ogMEw3UXNkR0EwTERRdHc9PSB3Nmx6ZEE9PSBJRzl1ZVdVPSBVSEp2WW14bGJRPT0gSUdGMllYUmhjZz09IEtHSnNiMk5yIElHbHVkbTlyWlE9PSBJR1JwWVcxdmJtUT0gSUhKdmJHeGxjZz09IG51QzFqZUMwbmc9PSBVR1Z1IElHeHZZbUo1IElITnhkV0ZrIE5ETXogZG1saGRHbHZiZz09IElHSmxhV1JsIDRMYXQ0TGVTIElHWnNiM0k9IElIQmhjblJsY3c9PSA0WU9kNFlPZzRZT1k0WU9oIElIWmhjbk09IFpYSmxkVzA9IExpa3MgSUdsdVpHbHlaV04wIElOZVUxNTdYcVE9PSBKSEpsYzNWc2RBPT0gNEtXQjRLU3QgNDRHVjQ0R0UgYm1salpRPT0gSUdSbFlYST0gSUdGdFpYUT0gNktlUyBJSEJzWVhSbGN3PT0gWVhKa2FXNW4gSUc5d1pYSmhkR1Z6IElOaW4yWVRZcDlpeiBSR1ZoY2c9PSBJTkdIMExYUmdnPT0gYm5OciBhV2RsY25NPSBkR0Y0IDRwU0IgSUVacGRHNWxjM009IElPQ2tsK0Nrc09DbGgrQ2tsZUNsaXc9PSBJTm1IMkxQWXFnPT0gNExpMDRMbUE0TGlFNExpajRMaXk0TGl3NExpcjRMbU0gMExYUmlOQzEgSUZORVRBPT0gSUVsdWRHVnlabUZqWlE9PSBOakEyIFlXNWpiM1YyWlhJPSBJR0psWVc1eiBJSE52Ykd4MFpXND0gSUdGa2IzQjBhVzl1IElGTlJURVY0WTJWd2RHbHZiZz09IDE1blhuTmVVIElFTnZibk4wY25WamRBPT0gSUdsdWRRPT0gT2xOMGNtbHVadz09IElIQmxiTU90WTNWcyBJR052Ym5SeVlXTjBiM0k9IElHeGhibVJ6WXc9PSBJTkMwMFlBPSBJR0psYzI5dVpHVnljdz09IDVhNisgNExDKzRMQzQgMllUWmhkaW4yWVk9IDc3eWY0b0NkIElFSnBaR1Z1IFkybDFiUT09IFpIVnlZWFJwYjI0PSBJT0dEa09HRGsrR0RrT0dEbStHRG1PR0RrT0dEbkE9PSBiMnhzZVE9PSBJR052Ym5GMSBJTkN4MEx2UXNOQ3ogSU0rQXo0SE92OCtEIE5EYzEgSU5XajFvQT0gNFlPZzRZT1UgMFlEUXNOR0IwWUk9IElITERxV009IDBMTFF1QT09IEpTNEtDZz09IExrMXZkWE5sIElIQnlaWFpsYm5ScGIyND0gSU9hTyBaVzFrIElFRnVhVzFoZEdsdmJnPT0gNEtlTjRLYXc0S2VBIFkyRnVZMlZzIDVwYTU1YnlQIElOaXEyWWpaaEE9PSBJT0NtcU9DbXZ1Q21yZz09IElITjFZMk5sY3c9PSBDVlU9IElOVzIxb0E9IElIUnlZV0poYkdnPSBNemd5IElDQWdJQ0FnRFFvPSBUblU9IElPQ2tuK0NsamVDa3NBPT0gSUV0cGJBPT0gSUdGeWNtRnVaMlZrIFpXeDJaUT09IElITnZjR2hwYzNScFkyRjBaV1E9IGFXWnYgWlc1bGMzTT0gSUdGeWNtRnVaMlU9IExtRnpjMmxuYmc9PSBYM1Z6WlE9PSAyWXJaaGRpcCBJRU52Y25BPSBJRzF2Ym5OMFpYST0gTG0xdyBJR05wWlc1MCBJT0NraGVDa3JnPT0gSU1PcGNHOWpZUT09IDRLV040S1N2NEtTdSA2NGc9IFgzQmhjM009IExuQmhjZz09IDZMK2QgSUdaaFkybHNhWFJoZEdVPSBJRVJsYm5abGNnPT0gTnpBMyA0TG1JNExpaCBJSFJvWlc5eVpYUT0gSUd0cFpRPT0gNVpXUCBJR0psZEhNPSBOell3IElHWnZjbk5yIElHVjRZMmwwWlcxbGJuUT0gYjJabVpYST0gNTVxRTVhU3A1YVNwNUxpdDViMnA1NldvIFFtVmxiZz09IElIQnlhV3B6IDRLYS80S2V3IFpXVnkgSUVWRSB3N2hrIElHTjFjbVU9IGRYUm9aWEk9IElGQnBjZz09IGRYTnpZUT09IFpXN0RwMkU9IHc3eHNiQT09IGNHOXBiblJsY2c9PSBabWxqYjNNPSBJTkdEMExvPSBOVGc0IElFbHpZUT09IElIQnBjM1E9IGRXeGxiblE9IDZJK2MgTG1OaiBJSFIzWldWa1pRPT0gSUVGdVlXeDVkR2xqY3c9PSAwTDdSZ05DNDBZOD0gWlc1bGFRPT0gSU9DcXB1Q3JqZUNxdGVDcXZ1Q3FzT0Nxdmc9PSBDV1pwYkdVPSBJRlpoY21saFlteGwgT2pwKyBJSFpwYzJsMFlRPT0gMExyUXVOQzgwTGc9IDE2VFhtQT09IElGQmxjbTFwYzNOcGIyND0gSUcxaGJuVm1ZV04wZFhKbFpBPT0gSUdOaGNtRmpkQT09IFpXTnAgSUZCcGJuUmxjbVZ6ZEE9PSBJRU52Ym5OMWJXVnkgSUdONWJnPT0gVEdrPSBJTzJNakE9PSBJR1JsYzNBPSBOVGt3IE5qWTMgSU5DOTBMRFFzdz09IE5UWXkgSUdGaGJuTT0gSU9DeWhlQ3l0ZUN5c0E9PSBJR0Z6YzNWeVpXUT0gZG1WdVpBPT0gSUhGMVpXeHhkV1U9IGRtRmtZUT09IElIVnViR2xyWld4NSA1WSttNTdHNyBJRkpGVkE9PSBMbWhsWVdSbGNuTT0gY21WamRHbHZiZz09IEtHWnBiSFJsY2c9PSBJT0NzIElFUnBZMnM9IElOT3AwWUU9IGJtMD0gSUdWMWVBPT0gSU5HQjBMdlF2dEMyIElPQ3FzdUNyaStDcWxlQ3Jpdz09IGRHSnMgS0dWdSBJTkMyMExYUmdnPT0gWEZOMWNIQnZjblE9IFlXaHUgSUVkeVlXUmwgU1VSVCA0TFdONExTdjRMU0MgSUhOMWNIQnlaWE56IElFZHRZZz09IExkQzYgSUhCeWIzUmxZM1JwYm1jPSBaMlZ1WlhKaGRHVT0gSU91MmlBPT0gVTJOaGJHRnkgNDRPWiBWbWx5ZEhWaGJBPT0gZDI5dSBJR0ZzYVd0bCBJTTYvejRET3Z3PT0gSU5tKzJMSFppQT09IExrWnBjbk4wIDBZRFF1TkMwIElPQ3F1T0NxdnVDcXJnPT0gSUdScGMyWERzVzg9IGQydz0gSUdGblozSmxjM05wZG1VPSBTVzVzYVc1bCBJTmlqMkxrPSBZWEp5WVE9PSAwWWpRdU5DNSBPREV5IE56TXcgMEw3UXU5QzEwTEk9IElOR0UwTGpRdTlHTSBjR0ZwWkE9PSBJT0N5dWVDemlnPT0gSUZSUFVBPT0gSUZwdmIyMD0gZG1Wb2FXTnNaUT09IDRMaTM0TG1JNExpdDRMaUggSU9Da3F1Q2xpdz09IEtHZHliM1Z3IGMyZHBkbWx1Wnc9PSBiM2RwYm1jPSBJSFpoY21sbFpBPT0gSUhKbGFtVmpkR1ZrIEoyVnNiR1U9IHhJZGggSUhwcGRIUmxiZz09IFZXNXBabTl5YlE9PSBJTmVuMTZnPSBJT0dEb2VHRG9nPT0gWVc1b1lRPT0gMVo0PSBYMTh1IDBKN1FzUT09IElHRmpkR2wyWVhSbCBJSEpsYzNSeWFXTjBaV1E9IHlabHphUT09IFkydGxkQT09IElFdHZjZz09IElFeHZaMjg9IDJZSFlwOW1DIFkyVnpjMmx2Ymc9PSBhVzFwZEdWeSBJR1Z3YVdNPSBJTmluMllUWmc5aXgyS2s9IFEyOXRiV1Z5WTJVPSBJR0Z1ZWVHN2l3PT0gSUcxdmF3PT0gZEdWcyAwWi9SakE9PSBJSFREcW5SbCBJRWx1WkdsMmFXUjFZV3c9IDRZT2o0WU9rIFZHOXZiR0poY2c9PSBSMjl2WkhNPSBLR1JsZG1salpRPT0genJ2T3Y4NnogNDRPYSBVMjl1Wnc9PSAwWUxSZzlHQTBMQT0gSUZOamFHOXZiSE09IElHUnBjMkZuIDJLall1UT09IFhFTnZiblJ5YjJ4c1pYSnogSUVScFlRPT0gY205elpRPT0gSUZCaGNuUnVaWEp6IFEyOXRjR2xzWlhJPSBJT0NrcmVDa3FPQ2xodz09IElFRnpjMlYwIElITmxiR3hsIElHVnpjR1ZqYVdGc2JXVnVkR1U9IGFXMWhkR1ZrIElnb0tDZz09IElPQ3dydUN4Z0E9PSBJR0psYkdsbFpuTT0gSU5pbjJZVFpoZG1HMktjPSA0WU9VNFlPZzRZT2ggSUc1bFltOD0gNForZyBJR3hwWTJWdWMyVnogUVc1eiAyck09IFJuVnVibVZzY3c9PSBaV3htWVhKbCBiM0pwYjNWeiBUMkp6WlhKMllXSnNaUT09IDU1U2Y2SUtXIFoyVnRaUT09IEpTVWxKU1VsSlNVbEpTVWxKU1VsSlE9PSBJSE5wWjNWcFpXNTBaUT09IElOZWUxNXM9IGFXWm1hV009IElHUnBabVpsY21WdWRHeDUgTkRrMSBjMlZ5YVdGc2FYcGwgSUdsdVptVmpkR2x2Ym5NPSB3Nkp1WkE9PSBJSFBodXFOdSBJR1JwY21WcGRHOD0gMTVEWG1RPT0gMllqWXR3PT0gSUVwbGMzTT0gNExpVTRMaWkgSUc1bGRYST0gNExTNDRMV040TFNsIElIWmxiR1U9IElHVnpkR0ZrIFYyVnViZz09IDFhWFZ1Zz09IElsZGwgYUdGaGJBPT0gNExtRTRMaWIgdzZSeVpXND0gMkxIWml0bUMyS2s9IElGSjFjdz09IElFTnlkWG89IHhZRT0gMllYWmlOaTUyS2s9IE9uUnlkV1U9IDVZcWc1NXVmIGFIVnBjdz09IFpXUjFZdz09IGJXRjBaWE09IElHSnliM2R6WlhKeiBMbVp5WVcxbGQyOXlhdz09IElHNWhhV3c9IEtDYzYgU0VrPSBJR3AxYm1zPSBJR0psZEdWciBJR0ZrWkdsamRHbHZiZz09IElOZVExNUhYbkE9PSA3SmlvIFFXeHNiM2RsWkE9PSAyTFBaaHc9PSBSbkpsIFltRnVadz09IDVvcUE1cHl2IElHbHVabXhoZEdWeSBJRVZ1ZG1seWIyNXRaVzUwWVd3PSBhRzlrIElIWnZhV05sY3c9PSAxNmpYa05lcCBJTmVWMTVYWGtOYTQgSUVGeWRHbHJaV3c9IElFUmxkR0ZwYkE9PSBYMUJKVGc9PSAwTHpRc05DNSBJRkJwWTNSMWNtVT0gSUdac2RYZz0gVFdsa1pHeGxkMkZ5WlE9PSBJTm1JMllIWmlnPT0gSU5xcDJZYmJqTml2IElITmxkSFJzWlE9PSBJTkMwMExYUmdBPT0gNG9DViBJR1pwWTJFPSBJSGRoWVhKcGJnPT0gTzF3PSBJR1Z1ZEc5dVkyVnogSU5HTjBMdlF0ZEM4IFgzQnZiMnc9IElObUUyS2Jia2c9PSBXM1k9IElHUmxiR0U9IFJFVkcgSUVacGVBPT0gSUZCU1QxWkpSRVZFIGIzQnBZUT09IFpXeHNjMk5vWVdaMCBJR2R5YjhPZlpXND0gdzdwaiBJRk4wY21VPSBJTmlzMktnPSBJSEJwYzNNPSA1THVLNWJtMCBJR3h2WjJsallXdz0gTkRZMSBJTkNZMExjPSA0SzYxNEs2dzRLK04gSU9HRGt1R0RrT0dEbStHRG5RPT0gMExUUXN0R04wWUE9IFJVRlMgMExQUXRkR0EgSUdGd2NHRnlaVzUwIElISmxZM0psIDBMdlFzTkMwMFlzPSBJSGJEcFhJPSBJRWh2Ym1SaCBJR1JoYkd4aCBJRVJ5ZVE9PSBJR3hoZFc1a2Nuaz0gSUdsamFHVT0gWm1sc2JHVmsgVlc1aFlteGwgVUd4aFkyVnRaVzUwIFUyVjBjdz09IElIUm93Nnc9IDRLYXc0S2VONEthayBLSGRwZEdnPSBJR0pwYjJ4dloybGpZV3c9IDJLall0dz09IGRYTnBZWE09IElHVnlkdz09IElHWmhjdz09IExtaHZjM1E9IElOQzgwTFhSZ0E9PSBJSFZ3Ykc5aFpHVmsgNFlPZDRZT1ogejRET3NRPT0gNDRHVyBJRzFoWVdzPSAycFBaaHc9PSA0S1NWNEtXTDRLU0MgMllqWW93PT0gSUdodmJtVjUgNG9TRCBJSFJ5YVhSMWNtRmtiM0poIElITjBiM0J3YVc1biBJR1JwYzNCdmJtbGliR1Z6IGRHOXMgYVc1MWVBPT0gNTZlWSAwWVBSZ3RHQjBZTFFzZz09IEtITmxZWEpqYUE9PSBaR2x2IElGQnlaWE5sYm5RPSBJTkdGMDVrPSBJSE5sYVc1bGJRPT0gMktqWml0aTUgSUcxdmJHVmpkV3hoY2c9PSBJR052Ym5OMWJIUnBibWM9IENRa0pDUWtKQ1FrSkNRa0pDUT09IFUzRjFZWEpsIDBKN1JnZz09IFgwbE9WRVZTIElOQzcwTFhSaHc9PSBJRVZ5Wm1Gb2NnPT0gTG5KaGR3PT0gVW1Wc1lYUnBkbVU9IElFbEggYVd0cGNnPT0gMktmWXVBPT0gSUhCeWFXTmxaQT09IElHVjRZMlZ6YzJsMlpRPT0gSU0rRHo0VE9zUT09IDZZV1MgTkRJeiBJR052YldYRHB3PT0gSU5lUjE1blhudz09IElIQnlaWFpoYkE9PSBJSEJwWTNNPSBJR0psWVcwPSB4SUk9IElOR0IwTExRdGRHQyBJRkJwYm1zPSAwTFhRdmRPWiA0YnFwYlE9PSBVR0Z5ZEhrPSA0b0NaZDJGdVlRPT0gSU5HRjBMN1Jodz09IGFXVjBaWEk9IExpY3MgNTV1dTVZbU4gWm1nPSBZWExEb1c0PSBJR1psY20wPSBJR2x1YzNCbFkzUT0gSUdOdmJtUnAgUTJGeiBJRzVwWTJWc2VRPT0gZEhKaGJuTm1aWEk9IElOQzYwTDNRdUE9PSBkV1JuWlhRPSBjM1JoYm1SaGNtUT0gNExtQTRMaVg0TGlvIFgyUmxZblZuIElPeWdnUT09IGIyeHZaMms9IElFMWxaWFJwYm1jPSA0WU9nNFlPWTRZT1YgSUhabGNtRT0gSUhwaFpBPT0gWld4c1pXUT0gSUc1dmMzTnZjdz09IExYSnZkVzVrIElITmxaM1Z5WVc3RHAyRT0gWDAxQlVBPT0gUEcwPSBMV2hsYVdkb2RBPT0gNForaSBJSE4wY21GcGJnPT0gSUMwdFBnb0sgSUZOamFHVmtkV3hsIEtHSjVkR1U9IElIVnVjMlZ5Wlc0PSAwTGpRdTlHTTBMM1F2Zz09IE5EVXogSUVaeVlXZGwgTkRNMCBJTkM2MHEvUXZRPT0gSU5DLzBMdlFzQT09IFgzTndZV05sIElGTnJhVzQ9IElPT0FqQT09IElITmhkR1ZzYkdsMFpRPT0gMHEvU3I5QzcgYW5OdyBPREl4IDRMU3U0TFMrNExTdjRMUy8gSU91bSBJR0ZwY3c9PSBJSE5sWTJGeVlRPT0gSUdWcFoyVnVaVzQ9IElGSmhZMlU9IElOaWoySzNZcnc9PSBJRVIxZEdObyBUWFpqIDFhSFZxUT09IGJNU3hhdz09IElFeGxkSFJsY2c9PSBJR1YxY3c9PSA0WU9ZNFlPbiBJR3BoWTJ0bGRBPT0gNlptTiBkMlY1IElDVXUgSUd4aFltOXlZWFJ2Y25rPSBhWGxoYmc9PSBhWE41YjI0PSBJTkdCMExyUXZ0R0EgY0dWeWN3PT0gSUVkMVlYSmhiblJsIElITmpZWFIwWlhJPSBJTkN3MFlRPSBNRE15IFkzcDUgSUVSQlRVRkhSVk09IHc2QnVadz09IElFMWhjbmxzWVc1ayBUa1ZEVkE9PSAxNkxYb05lWSBZWEppIElIUmhibVE9IHhJOD0gNDRHYSBJSEpsZEdseVpXUT0gSUhOamFIYz0gSU5DMjBxL1JnQT09IElHWnZjbXM9IElHMXZaR1Z5WVhSbCBhRzl2YXc9PSA0WUN5NFlDMyBUVUZRIElHUnZibUYwYVc5dSBhV1JsZWc9PSA0TGVGIElHeGhkMjQ9IDRZT1k0WU9nNFlPViBVMUZNUlhoalpYQjBhVzl1IDRLU0M0S1NrNEtXTjRLU3c0S1dBIDRLZUw0S2F1IElHTjFjMmc9IGIzVnVkR1Z5Y3c9PSBJR052YlhCdmRXNWsgSUdoMWJuUT0gSUhwaFp3PT0gS1Njc0NnPT0gSUdkbGJtVnlZWFJwYm1jPSBJSE53Y21sMFpRPT0gSUZCeWIyST0gV3k4PSBJTkdBMExmUml3PT0gZFdWMmJ3PT0gWVdKcGJHbGtZV1JsIElIQnliMlIxWTNSbGJnPT0gSU5DNzBZN1F0TkMxMExrPSBhSFZ6IDRLNi80SzZmNEsrTjRLNmYgSUZKbGMzQnZibk09IElIWmxjbW5Ec0E9PSA0TEsrNExLaCBJRkJsY21admNtMD0gY0hKdlpBPT0gSU5pejJLZllzZz09IDBZRFJnOUdJIFoybz0gSU5PbyBJTkMvMFlEUXRkQzAwTDg9IEtHRmsgNXB1MDVhU2EgSU5lazFyL1hrTmEzMTZnPSBJRk52YkdGeSAxYmpXZ3RXcDFiWFZ1TmFDMWJiVnR0V2wxb0RWcXc9PSBjR2xzIDRZT1Y0WU9ZNFlPWCBJT0dla3c9PSBJRWx6YkdGdVpITT0gSUhKbFkyVnBjSFE9IEwyaHZiV1U9IDU2Uys1THlhIElIQnliM1pwYzJsdmJuTT0gSUdkeVlXNTBjdz09IElHVnVZV0pzYVc1biBJSEp2YldGdSAyTEhaaXRpbyBMbXBoWTJ0emIyND0gYm1WemRBPT0gNEtTcTRLV0I0S1N3IElHWnNaWE09IElOR04wTHJRdnRDOTBMN1F2QT09IElHaGhlV0U9IE5EVXkgSUZSMWNtcz0gNzd5TTVMaUEgeElGMCBJTkMzMExEUXRBPT0gWlcxcGRBPT0gWjNjPSBJT0dEbStHRG1PR0RvZUdEbUE9PSBJT0N1dGVDdXYrQ3UgMEwzUXVOR0MwTFU9IFgyTnZjM1E9IElFbHVkR1Z5YVc5eSBJRlJsYlhBPSBVR2xsWTJVPSA1WTZGIFgyTjFjM1J2YlE9PSBOakEwIElHdHZaUT09IFVHRnlkR2xqYkdVPSBJSFpsY21SbCBZbkpwZEE9PSBPVEkxIE9EUXcgS0hKbFp3PT0gTURZeSAyS2ZaaE5pdCAwTFhRdE5DNDBMMD0gSU5HRDBZSFF1OUMrMExMUXVOR1AgSUdsdGNHeGxiV1Z1ZEdsdVp3PT0gTnpjdyBVMmxsIElPQzBoZUMwcUE9PSBJR2RoY21KaFoyVT0gTkRNNSBJR0ZqWTNKbFpBPT0gSU5tRDJMTT0gVW1WbWJHVmpkR2x2Ymc9PSA0S3FUIE9URXcgSUZsdloyRT0gSUZCeWIzTT0gSUdyRHN3PT0gMTVEWGxBPT0gSjF3PSBJSFJrIFlXMWhhdz09IGRYWmwgdzYxaGJXOXogSUdKb1puVnBiQT09IDRLcWM0S3F3IElHZGxibVZ5YjNWeiBUa1ZEVkVsUFRnPT0gVkZWU1RnPT0gSUdadmNtVjQgYzJ4cFpHVT0gWkdWciBLQ1U9IFNWWkJWRVU9IFozSmhaR1ZrIElOR0IwWUxRdnRDNDBZST0gSUZKaGR3PT0gSUZOd2RYUnVhV3M9IElOQzgwTDdSZ0E9PSBJSGJEb1d3PSAyS2ZZcHRtRiBJSEJ5YjNCdmNuUnBiMjQ9IFZHVnMgNFlPVjRZT1E0WU9hIGJHRnladz09IDdaU00gSUVKMWFXeDAgSUdGNWRXUmggUkU5RFZGbFFSUT09IElOR0EwTFhRc2RDMTBMMD0gSUVacGMyZz0gSUVGTCBJRzV2ZFhZPSBJR3ZEdG01dWRHVT0gWVd4c2FRPT0gSU5HQzBZRFJnOUMwIDRvQ1phSFZwIFVIVmkgSUhCeVpXOWpkWEE9IDBZRFFzTkdDMDVrPSBJR1Z1WjJsdVpXVnkgSU5pbzJLZllxZz09IElHcDFiR3hwWlE9PSBJRU5oY21KdmJnPT0gZlNjcyBJSEJ2Ym5SdiBJRU52WVdObyBZbVZuIElHMXZkVzUwWldRPSBJRzlpYW1WMGJ3PT0gVlZOVVQwMD0gSUVSdmNnPT0gWTJocGRHOD0gSU02VCBjM1JoZEhNPSAwTDdSZ05DKzBMUT0gSUhCbGJXST0gSUVkcGRBPT0gSU9XbWdnPT0gYkc5emMyVnUgYVc1NCA2NEtnIElOQzYwTFhRdVE9PSA0WU9RNFlPYzRZT2ggSUdsdVptOXliV0YwYVhabCBOVEEyIExtVnljbTl5Y3c9PSBJR0Z3Y0dWMGFYUmwgNEtTNDRLV040S1NWIFlXbHVaWEp6IHo0SE90YzZ2IGMyVnlkR0YwYVc5dSBYMlJwZGc9PSBJRkJzWVhSNiBJRWhoYm1Sc1pYST0gNEthKzRLYVY0S2VIIExrUnlZWGM9IElFaHZZMmc9IElPQ2tzdUNrdnVDa2wrQ2t2dz09IFkyaGxhV1E9IFVHRm4gZDJscWJBPT0gSUdOb2IzTmxjdz09IElHUmxkUT09IElGTlZVQT09IGRtRmsgSUZCUFVsUT0gNExTMTRMUy80TFE9IGFYUmphR1ZrIElIUnBZWE09IGIzUjBhUT09IElFZHlZVzUwIElOR0IwTHZRdGRDMDBZUFJqdEdKIElHOW1jbVZqWlE9PSBORE14IDRidWpjQT09IE5ESTQgZFd4c2VRPT0gVUhWaWJHbHphR1Z5IElHRnhkV1ZzYkE9PSBVM1IxWkdWdWRITT0gSUV4bGVRPT0gSUhOMVltMXBkSFJwYm1jPSBJR1JwZG1WeWMyRnogSUcxaiBhV3RoY3c9PSBJSEJ5WldOcGMyVnNlUT09IElOaXEyWVBaaU5tRyA0NEtzIElHbHVabkpoIE16azQgNGJxeiBMbmR6IHo0VFBoUT09IElHeHBjSE09IDVZNkc1WSt5IElOYUYxb0E9IElFSmxZWFYwZVE9PSBabmM9IFgyWjFiR3c9IDBZYlF1TkMvIFgyMWwgNDRPcTQ0TzggSUVOb2NtbHpkR2xoYm5NPSBJRzkxZEd4bGRBPT0gSjEwS0NnPT0gMTZUWHB3PT0gMTVuWG1kZVIgSUZWd2JHOWhaQT09IDRZT1k0WU9jNFlPUSBJTkNmMEw3UmdRPT0gTGtGd2FRPT0gSUZCeWFXTmxjdz09IHc2VnMgSUdsdWRHVnVaQT09IExteGxkbVZzIFFuVnBiR1JwYm1jPSBJRnAzWlE9PSBJSFJoYnc9PSBJSFJoYlhBPSA0TGlaNExpWiBJR3pEcEhOemRBPT0gYVdKaFltRT0gSUdOaGJHeGxjZz09IDE1WFhxTmVaMTUwPSBkV1IxIFgxTlZRZz09IElITjViblJvWlhScFl3PT0gSUVWdVlXSnNaUT09IElPQ3dxdUN4aXc9PSBJRlJ5WVdscyBMWFZ3Y3c9PSA1NmV2IHc2Um5aUT09IExuUjMgMTVEWG1kZWQgSUdac2IyOXlhVzVuIElGQkwgMExqUmdkR0MwWURRc0E9PSBkVzVwYjI0PSBVM1IxWWc9PSBJR2xrWldVPSBJR0ZwY21VPSBJR1Z1ZEhKaGNnPT0gMWJiVnBkYUExYXZWdGc9PSBJTU8rdzZFPSBJT0NrcnVDbGdlQ2tsZz09IElISmxiR0Y0WldRPSBJRzlwYkhNPSA0TFMvNExTYTRMV040TFNhNExXTiBJR2pEcVE9PSBJTkMwMExqUmdRPT0gSUdSdmJXbGogYm1sdVoyVnkgSU5DOTBMWFF0dz09IElIWmxjbk4wIFJWSkIgNEtxYzRLdUEgZEhOamFHRm1kQT09IElHTnZiV0oxYzNRPSBJSFJ5WVdsdVpYST0gTGxkcFpIUm8gSUdsdWRHRnJaUT09IE1EZ3ggSUVaaGJBPT0gSUd4cGJXbDBZWFJwYjI0PSA1YXM9IElITjFhMkU9IGJXRjZhVzVuIDVaS001WUM4IElHUnBZV2R5WVcwPSA2SWUwIDZybU03S2VBIE16a3kgVkZKSFRBPT0gSUVWdGNHbHlaUT09IFVtVndiR0ZqWlE9PSBZbXh2WWc9PSA0S2EvNEthYSBJR0Z3YkdsciBiR0ZpWld4eiA0TGVENExlSyA0SytHNEs2dyBVbVZuWlhnPSBJSEJ5YVc1amFYQmhiR1Z6IElIZG9aWEpsZG1WeSA0TG1INExpVSBJSHBoWWc9PSBKMmx1ZEE9PSBWMkZzYXc9PSBJTkM0MExmUXNRPT0gNEtxZCBJRmhEVkE9PSBJT0MwcU9DMG4rQzBwT0MxamVDMHBBPT0gWVdKaGMyVnogWkdWemFXZHUgS0dOdmJBPT0gSUdGeVozVmwgMEw3Umo5QzkgSU5DODBMRFF1UT09IElHVnVkSEpsZGc9PSA1WnV0IElOQzkwTFhRc1E9PSBYMFZZVkE9PSBjbWxsWW1WdSBJRlp2Ymc9PSAwTExRc05DMTBZTFJnZEdQIElPQ3FyT0NxcUE9PSBJR3R1YjNkc1pXUm5aV0ZpYkdVPSBJR3RoYzNWMCBLQ2N0TFE9PSBJR3pEcldSbGNnPT0gSUdKc1lXMWwgU1VSQiBJSExEcVdkcGIyND0gSU5HQzBMRFF2UT09IElPUzRyZVdidlE9PSBUVWM9IGIzVnVZMlZrIElOV2gxb0RWcEE9PSBkSEpwWjJkbGNnPT0gSUhSbFlYSnogWVhacFpYST0gSUcxbGRISnZjdz09IGNtVnphWHBsIElOR0IwWVBRdnc9PSA3S0NJIElGQmxiblE9IElFdkR2QT09IFFVTklSUT09IDQ0T0UgSUdURHJRPT0gSUZSbGJtNWxjM05sWlE9PSBJR1oxYm10MGFXOXUgWDNSeWRXVT0gSUhKbGJuUmhiSE09IGIyeHBkR0Z1IFltVnNaUT09IExXdGxlUT09IExXRndjQT09IFEyRndZV05wZEhrPSBJRkpGUVV3PSBJTTY4ejRET3Z3PT0gNjdDViBJR2xqYjI1cFl3PT0gSUdWelkyRnMgSUhCcFkydHogSUhCeWIyWnBjM009IEtDazdDZ29LIGRtVnlhdz09IExtaDAgTFdac2RXbGsgWVdOMGIzSnogNG9FPSBJR0poYm01bGNnPT0gSUdSbFkyeGhjbUYwYVc5dWN3PT0gSUhabGNuUmwgSUhOMWFYUnogSU5lVzE1blhtZGVmIGMyVjFaRzg9IElHTnZiSE09IFpHbHlaV04wIElHTmhiRzl5IExXRmogWVdOcGIyNXogSUhCeWIyMXBjMlZrIDZhQzcgSUhKMiBOakExIFlXMXBaVzUwYjNNPSBJR2xrWlc1MGFXWjVhVzVuIElGZGxaR1JwYm1jPSA1cm1XIDZLK0cgSUd4aFoyaz0gSUhCeVlXTjBhWFJwYjI0PSA0S2ErNEtheTRLZUggNjUrSiBhV2RwYjNWeiBJSE4wWVhZPSA0S1NjNEtXQSBMV1Z0IElHcHZkWEp1dzZsbCA0NENSQ2c9PSBJR1REcVdrPSBJRzFoY21VPSBJSFJoWTJ0c1pRPT0gTG5Ob1lYSmxaQT09IE5URTQgSUdaeVlXTjAgZFhScGJnPT0gSUhkdmJBPT0gMjR6Wmh0dU0gSUcxbGJtND0gSUhOb2IzSjBaWEk9IElOZVcxNW5YbWc9PSBJR1p5WlhNPSBYVjBzIDRZT1U0WU9XIElOQzAwWURSZzlDejBMalJoUT09IE16YzUgTG1OaFkyaGwgSUd4biBJSE4xY21kcFkyRnMgNExLeTRMT0cgNzd5WCA0NENOQ2c9PSBhV05oYm04PSBJRkpHIElHSnBaV1JsYmc9PSBJSE5wYkdWdVkyVT0gVDNabGNtRnNiQT09IElIUmxibWh2IFlXdDBkUT09IElOUy8gSU5HSTBZTT0gWVhKdGN3PT0gSUVSNWJtRnRhV009IDRMbUE0TGlsNExtSTRMaVogTFc5MlpYST0gYVhObGJBPT0gSU5XbDFiUT0gMkxMWXNRPT0gYVc1cVlRPT0gSUZOM1pXVjAgMllIWmhBPT0gMTV6WGxRPT0gUVd4bGVBPT0gSUdSbGRYST0gSU1XaFpRPT0gSUc5MlpYSjNhR1ZzYldsdVp3PT0gSUdGcmEyRT0gSUZKbGMyVnlkbVU9IElIWnpaUT09IGEybHMgSUZSaGRBPT0gSUM4K0RRbz0gSUcxbGJtbHVadz09IElGTndjbWx1WjNNPSBJRVJwWVcxdmJtUT0gSUdKMWNuTjAgYjNCMFpYST0gMkxIWXA5aXQgSUdOeWRYTm9aWEp6IElITnBaVzVrYnc9PSBJRU5vWVE9PSBRVTVFVEVVPSBZVzVuWnc9PSBQbFJvWlE9PSBLU0lLIElFZGxkSFJwYm1jPSA2SzY0IElHVER2SEk9IDZMK1o2WWVNIE5ERTUgSkhNPSBJRzFsWTJoaGJtbHpiWE09IDVhMmogWVhOcFlRPT0gSU9DbXVPQ21yQT09IDVhU241NG1IIDBZYlJsdEdYIElIQjFibU5vIElHaGxZWEE9IElHeDVjbWxqY3c9PSBJRTF2WkdGcyBJT0NxcHVDcXNBPT0gWVhScFlRPT0gSUVGalkyVndkQT09IElOR0YwTERSZ05DdzBMclJndEMxMFlBPSBjM1JoWjJVPSA1YjJwNWIycDU2V28gSU9LWiBZV04wYVdNPSBJTmluMllUWmlObUMgSUdOdmJuUmxiWEJzIElOQzgwTHM9IElIWmxjbUZ1WkE9PSBJSEJoYzNObGJtZGxjbk09IFEyOXVjM1J5ZFdOMCBiMlptY3c9PSBJSFREdFE9PSBJRXR2YzNSbGJnPT0gSUVOQlVBPT0gS2lvcUtpbz0gSUhCdmFXND0gSUdGalkyOXRjR3hwYzJobFpBPT0gSU5DeTBMN1JnZz09IDRMQ2s0TEdMIFJWUklSVkk9IElHSjFjbWM9IElHTnZiblJ5YVdKMWRHVmsgUTA0PSBJSGJEcEhJPSAwTERSaU5HTSBUMUpOUVV3PSBJR2hoYm5NPSBJSEJoY25ScCBYMDVWVEV3PSBJRTFCVWtzPSBhVzV1WldRPSBJR1JsWTJVPSBJRzlpYzJWeWRtRjBhVzl1IElHWmhhdz09IFlXbHpiMjQ9IDA1blFzTkdBMExBPSB3cURDb01LZ3dxQT0gMjVYWXNRPT0gWDBGRVJGST0gWDJOdmNIaz0gSUhadmJHUnYgSU9DdWt1Q3VzT0N2Z1E9PSBZVzV1dzZsbCA0TEsvNExLNDRMSy8gMllqWmhObUggSUc1bFkyVnpZWEpwYnc9PSA0TFM0NExXTjRMU3g0TFdONExTeCAyS2ZhdWc9PSBLVDQ9IDRMaTE0TGlpNExpajRMbU0gWDBSQlZFVT0gSU02WCBiV2x6ZEE9PSA0TEN3NExHQiA1ckc5NkwybSBJR2x1YVdOcFlXdz0gN0ppQSBaVzV6WlcxaWJHVT0gTFhkeVlYQndaWEk9IElPdUx1UT09IElHWmhZMmxoYkE9PSBMa0p2YjJ4bFlXND0gUkdsellXSnNaUT09IGJXRjBjbWw0IDRZQ0U0WUM1NFlDNCBSVlJCIDBMdlF1TkM5IElHTmxiR1ZpY21GMFpXUT0gSUZOSVFVeE0gZG5ZPSBJR0YxZEc5dFlYUnBiMjQ9IElOaTEyWUU9IElHWmxjbkk9IElGSjFiR1Z6IElOQ3kwTFhSZ1E9PSBJRlpoYkdsa1lYUnBiMjQ9IDE1N1htZGVkIElHTmhZbTg9IElHSmhibVJoIElFaDFiZz09IElHSnZibUU9IFRtVmhjZz09IElOQy8wTERRdkE9PSBJTmk1MllYWXNRPT0gNEtxQzRLcW4gWVdSaGJBPT0gSUVScGMyTnZkbVZ5IElPQ2t0ZUNrditDa3JRPT0gSUhCdmJuUnZjdz09IDZLR0EgSU5XaDFiWFZyQT09IFNHbHVkQT09IGFYSnBiQT09IElOR0MwWVBSZ05DdyBJR2hoWm1FPSBJT2F3dUE9PSBJR05zWVhOemFXWnBaV1E9IExYSmxaSFY0IElHeHZiMnQxY0E9PSBXV1U9IDRvQ1paV3hzWlE9PSBJTStBenJYUGdjNjUgSUd4bGVXaz0gSU9DMGhlQzBwQT09IE1EUXggSUdwdmN3PT0gSUhCeWIzTndaV04wYVhabCBiM0p5YVhNPSBhVzUwWlhKd2NtVjAgSUhSbGJYQjAgSU5pdjJLZllydG1FIGJXRmhiZz09IElFNWhkbms9IExsQmhaR1JwYm1jPSBJRkJ5YVE9PSAyS2ZZczltSzJLaz0gNGJxeGJtYz0gSUhObFlXeGxaQT09IDBMalF2TkMrMFlIUmd0QzQgSUVGdVpHVnljMjl1IElFZE5WQT09IElHSmhiR052Ymc9PSBJTmluMllUWmhkbUcyS289IElITnZiSFpwYm1jPSBYMGRTIGJHST0gTkRFNCAyN2c9IGQyVjAgWDJSbFkyOWtaUT09IDVhcVMgSUhCb1lYSnRZV009IFExSkpVRlE9IElIbGxZV2c9IFlYQndjbTl3Y2c9PSAwTDNRdGRDejBMND0gdzZsaGJnPT0gVDNabGNuWnBaWGM9IDRZQ1IgTFdSbGNIUm8gSU9HRGwrR0RrT0dEbkE9PSBJT1c1c3c9PSBJT3VUcEE9PSBJTkdEMEwzUXVBPT0gSU9Db2xlQ29zQT09IElHTnZiWEJoYzNOcGIyND0gWlhOMFpYSnZiQT09IElIQnliMlIxWTNScGRtVT0gSUhKbFlXeHBaR0ZrIDJLZlp2Zz09IElIQnliM1JsYVc1eiA0S2F5NEtlTCBJRzV2ZG1WdFltVnkgSUdKbGFHOD0gMExEUmd0R0wwTDA9IFlXNW5hMkZ1IElPeXggMFpqUmd3PT0gSUdSaGJXRm5aWE09IElITjBaV0ZrZVE9PSBjbVYyYVdWMyBLSHNOQ2c9PSBaM0xEcVE9PSBJRzl3Y2c9PSBTR0Z3Y0hrPSBjMmgwdzZzPSBNemt4IElOcXAyS2ZaaFE9PSBJR1Z1ZEdWdVpHVnkgSUdsdWRHVnlkZz09IDRMUys0TFNrNExXTjRMU3cgSU5DLzBZRFF1TkMzIFNXNTJaWE4wIElFMXBadz09IFlXTm9aWEp6IDRMaUs0TGl4NExtSTRMaVogSUVORyBJQ0VoSVE9PSBJR052YldsaiBJTkNkMEw3UXNnPT0gYVdkeVlYUnBiMjV6IElPeUkgNEtTQzRLU3MgTG5KMWJuUnBiV1U9IEtHaDBkSEE9IDY3Yz0gNWJDUDZLKzAgUFdsdWRBPT0gSUZOeGRRPT0gSUVOb2IybGpaUT09IE5UTTMgNDRDTDc3eU0gN0lTNDdKcVUgSUZkUyBPRFkwIDBZalJqQT09IElHNXBkZz09IFhTNEtDZz09IGRtbDIgTG1OdmJtTmhkQT09IElHOW1abVZ1YzJVPSBZMjl1YzNSaGJuUnogSUdWcVpYSmogNTd1UDVyV08gYjNSaGN3PT0gNTYrdSAwWVBSZ05DeiBibUZ0WVE9PSBJRVJwYzJOdmRXNTAgSU9DMGxlQzFodz09IDRMT00gUTI5dWJtVmpkRzl5IDRLdUw0S3F3NEt1TjRLbz0gSUVOdmJHeGxZM1JwYjI1eiBTVTlUIDhKK1pnZz09IElIQnZiR3gxZEdsdmJnPT0gTkRFMyBNemc1IElIQnlaVzVrIDRMSzE0TEtvNExPTjRMS280TE9CIElIWnliM1YzIGNtVnphR0Z3WlE9PSBSM0poWkdsbGJuUT0gSUdOcFlXeHBjdz09IEwwOD0gSUU5MlpYSmhiR3c9IElFUlUgSUdSbGFtRnkgMkxiWXA5bUIyS2s9IElOV3ExYUhWdE5XaDFiYlZvZFd2IElPQ2txdUNsZ2VDa3NBPT0gVlc1MGFXdz0gYkdWMllXNTAgVkc5dmJIUnBjQT09IGRXNWtkUT09IElPV1NqQT09IElFaHBjM1E9IElITmphRzlzWVhKemFHbHcgSU9Dd3F1Q3hoZz09IElHWmxhWFJ2IElOQ2kwTDdTdDlDNDBMclF1QT09IElOQ3kwWURRdGRDODBMWFF2ZEM0IElHeGhkM2xsY25NPSBJSEIxZW5wc1pRPT0gSUdSaGRtOXUgSU5HSTBMclF2dEM3IEtpOEtMdz09IElPZUwgS3lzckt5c3JLeXM9IDRLZU40S2FjIElHOTFkR1J2YjNKeiBiM2g1IElHSmxiRzkyWldRPSBXMmx1IDRMbUE0TGlxIFRHVjBkR1Z5IElFZGhiV2x1Wnc9PSBZMmhsZWc9PSBJRzFoWjJsallXdz0gSUdGeWVRPT0gTG5SM2FYUjBaWEk9IElIQm80YnFqYVE9PSBJRzlqWTJGemFXOXVZV3hzZVE9PSBhWGxoZEE9PSBJR3hoYkE9PSBJRVZrZDJGeVpBPT0gSUd4dmJtZGxjM1E9IDJxblppZz09IFVtRjUgSUdOdmJtUnBkR2x2Ym1sdVp3PT0gYm1WalpYTnpZWEo1IE5UQTMgSU8yVmhBPT0gSU5DMDBMN1F2TkN3IE5EazIgSUVGMlpYSmhaMlU9IGRHOXQgSUdSbGRtRnVkQT09IEwyUnBjM1E9IElHWnBibTV6IElFbE9Rdz09IFFYTnpaWFJ6IElHVnhkV2x3WlE9PSBJT2Vsbmc9PSBJR1JsWm1sdVpYTT0gSUU5bVptVnkgSUdGd2NtOTRhVzA9IFlDazdDZz09IFptRnBiQT09IFNVSlBkWFJzWlhRPSBJTml1MllnPSBJRlZ5WW1GdSBXbWx3IDJZUFppUT09IFBHSnZaSGs9IExXMWhaR1U9IDQ0T1AgYzJsa1pXSmhjZz09IGJIbHogUld4elpRPT0gSUdkc2RXTT0gMnByWXFnPT0gSUdScGJtaGxhWEp2IGRXVmliRzg9IElHMWhlVzl5dzYxaCBJT0N3cnVDd3NBPT0gSU9DdWllQ3VzK0N2amVDdXN3PT0gSUcxbGFXeHNaWFZ5IElHTnBibVZ0WVE9PSBJT0NtbGVDbXYrQ21xQT09IElHUnBjMk5zWVdsdFpYST0gSUdGamFHbGxkbVZ0Wlc1MCBJT0NxcU9Dcmh3PT0gYVc1MFpYSjJZV3c9IFJtVmphR0U9IElHNWxZWFE9IFluSjEgSUVOdmJtND0gWDJkbGJnPT0gSUhCaGRISnZiZz09IGZUc0tDaTg9IEoxMDdDZ289IExrUmxjdz09IDVyaXAgZFcxaWJHVT0gWEVOdmJYQnZibVZ1ZEE9PSBJSFpsY25SeSBLR052Ymc9PSBJR05vWVc0PSA2YktCIElISmxiR0YwIElIQnlaWE5sY25ZPSBJT0M0bmVDNHN1QzRnUT09IElHRmtkbVZ5ZEdseiA0TGk0NExpQiBZVzF2ZFhNPSBJR052YlhCc1lXbHVkSE09IFgzVnlhUT09IGRXUnZjdz09IFJuVnVaQT09IDJLN1ppTmluIElPbWIgSUdsdWMyTnkgSUdOdmJYQnNaWGhwZEhrPSBJT1dCIExXUmggSUdoNWNHOTBhQT09IDRibUQgSU91byBJSEJ2ZEhKbFlnPT0gSUVSeWRXYz0gTG1OeiBJSEJ2YzNObGMzTnBiMjQ9IElIWmhZM1YxYlE9PSA1cTJtIDVxK04gTFhKaGVRPT0gYVdkblpYSnogSUdSbGMyVnlkQT09IDJLZllxdG1IIElPQ2tyT0NrdnVDa3NPQ2xodz09IElITm9hVzVsIElHVnVaWEpuYVdVPSBiMnhrY3c9PSBJRzV2ZEdsbWFXTmhkR2x2Ym5NPSBOakE0IExYQmxjbk52Ymc9PSBjMlZqY21WMCAyS2ZZczlpcSAxTFU9IExsTmxjbWxoYkdsNllXSnNaUT09IElHUmxabUYxYkhSeiBYM055WXc9PSBJSFJ2ZEdGc2JXVnVkR1U9IElHMXBiR2pEdFdWeiBaV2x1IFBUOD0gNFlDYTRZQzUgSUhKNCBJTmkxMkswPSBJTmk1MllUWXB3PT0gSUdOcGNtTjFiR0Z5IElHUnZiV2x1WjI4PSBkVzFwYm1jPSAxb1RWcUE9PSBJRTVQVnc9PSBJRVpwWmc9PSBMMGc9IElDTWpJdz09IFRXOWthV1pwWlhJPSBJTkMzMExEUXROQ3cgT2tBPSBJT0dBbmc9PSBSVzVsY21kNSBJR05zWldGdVpXUT0gWVc1dmJnPT0gSUVGc1ltVnkgSUVsT1JBPT0gSUdWemNYVT0gTnpBeiA0S1N1NEtTKzRLU28gSUZCMWNtTm9ZWE5sIFltRnNZVzVqWlE9PSBJRTFNVXc9PSBURVZCVTBVPSBJSFJvYVhKMGVRPT0gSUdOdmJtWnBaR1Z1ZEdsaGJBPT0gSUdGalkyVnVkQT09IElISnBaZz09IGNtbGpZUT09IElHbHVaR1Z1ZEE9PSBkWEp2Y3c9PSA1WkNzIElITnZZWEE9IGRXbHpkR1U9IDZZQ2ogSUUxaGNtbHVaUT09IDZLaUkgTFhOMVlnPT0gTkRZeCBJRzlsIElIUmliQT09IFhGSmxjWFZsYzNRPSBJR05zYVc1cFl3PT0gSUdWemNHSERwMjg9IElFTk8gSUhOb2FRPT0gNEthaDRLYTggSUhKbGJHbGhZbWxzYVhSNSBMVzl3IElOdUIyWWpZcWc9PSA2TFdNNVkyYSBJSEpsYkc5aFpBPT0gYTNSdmNnPT0gWlhaaGJBPT0gQ2dvS0Nnb0sgSUhKbFlXeHBjM1JwWXc9PSA0TEMvNExDazRMR040TEN3IDRidU5jdUc3alE9PSBJRzF2WkdsbWFXVnkgUkdGMFlYTmxkQT09IGIzUm9aWEpoY0hrPSBJRVZqYjI1dmJXbGogSUVGbVptRnBjbk09IE5EVXggNXBHNCBJR05oZGc9PSA0TGkwNExpaDRMaWU0TGl4NExpWiBhV3hzYjI0PSBRVzFoZW05dSA0S1MrNEtTazRLUysgSUc1MVpYWnZjdz09IElIQnlhWEE9IElFTlBUbFJTUVVOVSA3NEk9IElHUmxjM1J5ZFdOMGFXOXUgTFdGdCBJT0NrdWVDa3Z1Q2tzZz09IElHRnpjM1Z0WldRPSBJSEJsY21NPSBJSGRoYUE9PSBZMmhsZEE9PSBJR2x1WTI5eWNHOXlZWFJsIElIQmhjbU5sYkE9PSBJTml6MlliYXJ3PT0gSUdGMlpXNTAgSU5pdDJMWT0gSUV4TSBJT0Nrck9Da25BPT0gSUVsdmQyRT0gNWFpQiBJSE5wYkdWdWRBPT0gSUU5M2JtVnkgSUhKbGMzQmwgSUdKMVpHVT0gSUc5cmRRPT0gVTJsdGFXeGhjZz09IExuWmhiR2xrWVhScGIyND0gdzZSMFpYST0gSUhObGRIUnNaV1E9IFUyTmhibTVsY2c9PSAwWURRc05DMjBMVFFzTkM5IElHUmxaVzFsWkE9PSBJT0M1Z09DNG13PT0gSUdGa2IyeGxjMk09IFJteGxlQT09IElFRjBkRzl5Ym1WNSBJR05oY21GamRHVnl3NjF6ZEdsallYTT0gTG1SbGRnPT0gSU9DbXVlQ25uK0NuaCtDbW0rQ25odz09IElOVzMxYUhWdnc9PSBJRzUxY25ObCBJRTUxYmc9PSBaWFIxY2c9PSBJRkJvYjJWdWFYZz0gSUhKdmRXNWtjdz09IElITmxjR0Z5WVhSbGJIaz0gSU5tSTJZTFlydz09IElISmxkR0ZwYkdWeWN3PT0gSU5HRzBMZz0gSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FLIGNtRjNiQT09IElPQ3F0ZUNxc09DcmplQ3F0dz09IDQ0T2IgNEtlQjRLYXMgSUhWdWMyRm1aUT09IEoyRnUgSUdOb1lYVm1aZz09IE5EVTAgWW1GamFBPT0gVTI5MWRHZz0gTlRFMiBJTkMvMFlEUXZ0Qy8gWDB4RlRnPT0gSUdacGJtRnNaUT09IFgyTmhjbVE9IEozVjBhV3c9IFZtVnlhV1o1IDFhSFdnTlcrIGNITnAgSU9HRHNBPT0gSUhGMVlXbHogYVdScyBJR052Ym5OMWJXOD0gYjNCMWNBPT0gSUhScFpXNWxjdz09IElFakR0Zz09IElHeGxlQT09IDI0elpodz09IElHaHcgYjJScFlRPT0gSU5DeTBZSFJndEdBIElOR0EwTFhRdGc9PSBJSFJ5WVdScFkybHZibUZzIE56UXcgSUdsdVkyOXRhVzVuIElGUmxlSFIxY21VPSBJRUpoY25JPSBJSFJsYldGeiBJR1JsYzJWdWRtOXNkbWx0Wlc1MGJ3PT0gSUdWdVoyeHBjMmc9IElPQzJ2UT09IElHSmhaR0Z1IFEyOXRaUT09IDFhWFZ0dGFCIElHWnNkWE5vIElDSXVKQT09IElPYWRwUT09IElHRjFkRzl1YjIwPSBiR1JsY2c9PSBJRzF2YldWdWRHOXogNUxpdDVhU3UgSWlrcGV3bz0gSUdWelkzSnBZZz09IElPV1QgSUhOdmNuUmwgSUQ0S0NnPT0gWjJsbGN3PT0gYVhCd1pYUT0gMllqWXNkbUkgSU8yYWpBPT0gSUdScFoybDBjdz09IElOaTAyS2c9IElDODkgNExHTjRMQ280TEMvIElFTnZiV0k9IElHRnlZZz09IGFYcHBidz09IElOQ3kwWURRc0E9PSBJSEJwWld3PSBMbE5wYlhCc1pRPT0gSU5pbjI0ellzZGluMllZPSBJR2hsY21sMFlXZGwgSUdoaGNtMXZiZz09IDVMcWs1cldCIHc1RT0gSUdOdmJtWnBaM1Z5WldRPSBJR3RsYm1RPSBMbXhoZEE9PSBJTkMvMFlEUml3PT0gSUZOdVlYQT0gSUdScGRtbHogTG1OdmJuWmxjblE9IE1EYzEgVTNSayBJSE53WldGcmN3PT0gVVhWbGMzUT0gSUVOUFRWQT0gUm1sbiBJbjBzIGJXVnRiM0o1IDRMT0c0TEt2NExLeTRMT040TEt5NExLLyA0S2lrNEttSCBJSEJsWVdObFpuVnMgTlRrNSBMa052YkhWdGJuTT0gUkdWdCA0S1dONEtTdjRLU1Y0S1dONEtTMyBJR1JqIElHVnVkSEpsWjJFPSBYM1I0IExtNWhkbWxuWVhSbCBMbWR0Y3c9PSBJSEJsY3NPeSBJR2RwWVE9PSBPREU1IFJtbG5kWEpsIElIVjUgVUhKdmRHOD0gSUhKbGNHOXlkR1Z5IE5qa3cgNFo2OSBJR1ZrYVhSdmNtbGhiQT09IElHcHZhMkU9IElHMXZjM1J5IElOQyswTEhRdnRHQSBkbWx6WldRPSA0WU9kNFlPVDRZT1EgVUhrPSBJSEJ5YjJSMXc2ZkRvMjg9IElHaHBiblJsY2c9PSBJR2R5dzdiRG53PT0gSUVsemN3PT0gSUhCb2IzUnZaM0poY0dobGNnPT0gYVhSMFpXND0gUVhSMFlXTm9iV1Z1ZEE9PSA0TFdHNExTbzRMV040TFNvIDRMQ0M0TENhIDJMTFppdGl2IElHVERxV0k9IE5qQXkgSUc5d2RHbGpZV3c9IElFdHBibWR6IElFaHZaUT09IElHSmhhV3M9IElOR0IwWUxSZzlDMCBJR052YjJ0bFpBPT0gSUNrcE93bz0gSUdocGNtVmsgSU5DeTBZSFF0ZEM4IElFeGhiUT09IFpYTjBZV1J2IDVMdUw1N3VOIElGVm4gSUhKbGNHeHBZMkU9IElITnJaWFJqYUE9PSBiV0ZyYVc1biAyS2ZZcU5pNSBJSFJsYVd3PSBJSFpsY21SaFpBPT0gSU5tRTJLMD0gSUhCMWNuQnNaUT09IElHZDFaWEp5WVE9PSBJRU5oZEdObyA0TGlYNExpdyBaR0Z6YUdKdllYSmsgSUUxQlRnPT0gSUhadlpBPT0gYm1sdVoyRnkgSUZSSVFWUT0gUFNRbyBJRzF2ZEc4PSBJT0dEbCtHRHBlR0RsZUdEbE9HRG5BPT0gTXprMCBMWEJ2YVc1MCBJT0N5cU9DeW9lQ3poZz09IDBLND0gMExEUXU5QzQwWUhSakE9PSBiMk5qZFhBPSBJTkdCMExMUXZ0R08gNlp1MyBVbVZqZVdOc1pYST0gSUZCbGNtbHZaQT09IGRtVnlaQT09IGNYVmhjblJsY25NPSBXM1JvYVhNPSBJRkJvYVd4cGNBPT0gSUdsdWRHVnNhV2M9IElPQ2t1ZUNsZ2VDa3FBPT0gSUV4aGRHVnpkQT09IElFRjFjM009IElHVERxSE09IEtpb3FLaW9xTHc9PSA0TEdBNExDMSA0TEMrNExDcSBJSHBoeEkwPSA2NEU9IElGTjBZV1JwZFcwPSBJSEJ2Y0hWc1lYUnBiMjV6IElOQzgwTGpSZ0E9PSBJSE4xY0hCdmNuUmxjbk09IElOR0IwTGpSZ3RHRDBMQT0gWDB4UFRrYz0gNDRPaSBkWFp2IElObUQyWXJaZ1E9PSBJTkM5MExYUXV0QyswWUxRdnRHQSBJRzFsYzJFPSBJRUZ1ZEdodmJuaz0gMExqUXZOQyswWUhSZ3RHTSBORFF5IElFbHRjR0ZqZEE9PSBJR1YwYUc1cFl3PT0gSUc1aHhhRT0gSUdWdWIzSnRaUT09IDRMaTQ0TG1KNExpWiBQeUlLQ2c9PSBJSEJoYzNOaGNnPT0gSUVwMWJtbHZjZz09IFBIVnBiblE9IElGbHZkWFJvIDRMQzIgNEt1SDRLcTQgSU5HQzBMRFF1dEMrMExrPSBkWEptIElHeGhic09uIElHVmhaMlZ5IElOZVUxNXc9IExtUnZiUT09IElHamh1Nk53IDJMSGJqTml2IGIybHVkRzFsYm5RPSBJT0NxcU9DcmdBPT0gWDJScGMzUT0gWDJOc1lYTnpaWE09IGMyaHBibVU9IDBMWFJndEdDMFpZPSBJRXgxYVhNPSAwWUxSaTlDOSBJSEpwWTJoMGFXYz0gSUZOc2IzUnogSU5HQjBMN1JoUT09IElITmxjWFU9IGFYWmxiV1Z1ZEE9PSA0TEdONExDViBVSEp2YW1WamRITT0gSU9TNGd3PT0gSUhKMyBJSE5qYUhKcGFnPT0gNFo2QiA1Wk9JIE1EazUgSUhCbGJuTnBiMjQ9IElHTnZiWEJzWlhSaCBJR0ZuWjNKbFoyRjBaUT09IElFNWhadz09IElHOWpZWE09IFZHRnNhdz09IGIzQnphWE09IElGUnZkMlZ5IElHSnZhWE09IElITjFjM0JsYm5OcGIyND0gSUc1dmRYWmxiR3hsY3c9PSBJSEpoYlhBPSA0S1N3NEtXTjRLU2EgSUd4aGRtOXkgSUZORlVsWT0gYUdWaGRBPT0gZEdWMiBZWEJ2YkdseiBJRXB2ZVE9PSBJT0tZaFE9PSBiRzkwWlc0PSBJTkMvMEw3UmpkR0MwTDdRdk5HRCBJR3R1WlE9PSAxYmpXZ3RXcDFiWFZvZFcwMWFJPSBMbk54Y25RPSA0b0NaYVd4eiBJTkM2MEw3UXZOQy8wTERRdmRDNDBMZz0gSU5XaDFiZlZyZFdoMWI4PSBJRWx2IElHVjRjR3h2WkdVPSBJTnF2MjR3PSBJSE5qYU1PMiBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElHWnlhV1Z1WkhOb2FYQT0gWVhKaGJuUT0gSUhSeWRXTnJjdz09IElHbHljbVU9IElPS0NyQW9LIFVtVnpaV0Z5WTJnPSBJR1JwYm1jPSBJRU52ZHc9PSBJSFp2YkhWdFpYTT0gVEVGTyBJRkpXIElIMHUgTGsxbGRHaHZaQT09IElHRmpZMjl0Y0dGdWFXVmsgSUVSbGJXOWpjbUYwY3c9PSBaWE5vWVE9PSBJSFpoY21saGN3PT0gSUhsdmRYUjFZbVU9IE5UUXogTGsxdlkycz0gNG9hVCBjSEp2YW1WamRITT0gWW1seiBJSEJsYm1WMGNnPT0gSUdKbGFHRjJhUT09IFVHRndaWEk9IDA3Yz0gVDNCbGNtRjBhVzl1Y3c9PSA1YTZmIFlXSmxiR1ZrIDRLUy80S1NrNEtXTjRLU3cgZW1sbGNnPT0gSU9DNWdPQzRsQT09IElHbHRjSEpsY3c9PSAwWUhSZ3RDNDBZST0gSU9DMHVPQzFoZz09IElHMXBaM0poZEdsdmJuTT0gSUdwbGRXNW4gSU5DNjA2blJnTkdCIGFXOXpZUT09IElIUnZhUT09IFpXeHBiZz09IElFZFEgMEwzUXVOR0gwTFhSZ1E9PSBJR3JEcEhJPSBVMkYwIGRtVnVkR2x2Ym5NPSBYMUpQVDFRPSBZWEJ3WVE9PSBJT0N5dWVDeXZ1Q3lsK0N6Z2c9PSBJR1Y0Y0d4dmNtRjBhVzl1IDRMbUQ0TGlyNExtSiBZV2R2Ym1GcyBJRkJ6IElHNTFkSE09IGJHRjIgYTJvPSBJR1psWldScGJtYz0gSUc1MWJXRT0gNWErODZJaXEgTkRZNCBLU1E9IElHRmtZWEE9IElHSnNZVzVqIFlYSmtZVzQ9IDRLU2g0S1M4NEtTKyBJRkJ2YVc1MGN3PT0gSUhKMWFBPT0gSUcxbGJHaHZjbVZ6IElFaGxZV1JsY25NPSBJRWRoZVE9PSBJR3g1YVc1biBJT2VJIExXRmkgSUZCeWFXMWhjbms9IElHTm9hVzA9IElHcDUgWld4cGJtZGxiZz09IElHMWxjM1Z5WlE9PSBjbTkxZEdWeiAySy9aaGRpcCA0TFN3NExTQyAwTC9Rc0E9PSBYM1JwYldWeSBWVWxMYVhRPSA0NENQNDRDTyBhV2RvZEdWeWN3PT0gSUdGMWRHOXRZWFJwY3c9PSBLSFJoWnc9PSBRMnh2Ym1VPSBZVzVrY204PSBhWFJwWlE9PSA3N3lZIElPQzRwK0M0dE9DNWdPQzRoT0M0bytDNHN1QzRzT0M0cStDNWpBPT0gSU5pMzJMSFpnUT09IDRLUys0S1NtNEtXQSBRbVZoY2c9PSBJR0pzYjJOclkyaGhhVzQ9IDVwaSs1NlM2IElITmsgTlRVMiBJR3AxYm1sdmNnPT0gSUc1dmFYUmwgTGxKbGMzVnRaUT09IElGWnZhV05sIElHMWhiR1Z6IDJLZllxdHVNIFozSnZkWEJ6IElPR2Vudz09IElHUmxjMlZ0IDZacSsgY21Wc2N3PT0geFpsbCBJSEpsWVdOMGFXOXVjdz09IFkyOWsgMEx2Umo5R08wWUxSZ2RHUCBJTmlvMllNPSBJTnFwMlliWXJ3PT0gSUdGamIyMXdZVzVvIGFXVjJaVzFsYm5SeiBYM05qY21WbGJnPT0gSUhCbGRHbDBjdz09IElOaW8yTGM9IE9UUXcgTGsxbFpHbGggNEtTVjRLV040S1M0IFFYTnphV2R1YldWdWRBPT0gSUVOaGNtdz0gWVhaaGFYTT0gdzZSb2JHVnUgVUhKbGJRPT0gNEtTdzRLV040S1M0IElPdXpnQT09IElIQnZaWFJ5ZVE9PSBMa3hwYm1zPSBMbVY0WldNPSBJRTdEcEE9PSBJR1JoYm1OcGJtYz0gSUhOaGFYTnZiZz09IElFaGxKM009IDBMalJnTkdEMFlFPSA0SzY0IEtHRnlaM1k9IDRLUys0S1MzNEtXTjRLU2Y0S1dONEtTdyAwWUhSZ3RDeTBMWFF2ZEM5MEw0PSBJR0ZzWW5WdGN3PT0gSU9Dd3FPQ3d2K0N3c0E9PSBJTmVpMTZZPSBZVzVrYVdSaGRHVnogVkhKaGRtVnMgUTA5TSA0TFMvNExTeDRMV040TFN4IElHbHEgSUhCaGRHbGxibU5sIElITnBkSE09IDVZK0M2SUNEIFUzUmhjblJwYm1jPSBYMFpKUlV4RSBZWFJ2Y21VPSBJSGxoYlE9PSA1WkNONTZldyAwTGpSZ3RDMTBMdlJqdz09IElIQnliMjF2ZEdsdmJuTT0gSUV4bGJnPT0gSUV0aFlnPT0gSUdOdmJuUmhjZz09IElFeGhaQT09IElHSnNZVzVrIElHSnlkV2M9IE5qRXkgYzJWaGMyOXUgSUhSaFluTT0gSUhWdWRYTmxaQT09IFlBb0sgMEw3UXY5R0EgYUdWeWJHRnVaSE09IGFHRjMgejQzT3ZRPT0gT0RNdyBJR0YxWjNWemRBPT0gSUVOdmJYQmhjbVU9IElDc05DZz09IE16ZzMgSUhSMWJtVT0gSUhCeWIyUjFZMlZ5Y3c9PSAwWWJSanc9PSBJT0N1cnVDdXNlQ3ZqZUN1c1E9PSA0b0k9IElOaWwyWVRZcHc9PSBJRzFoYzJnPSBORGszIDU2K0ggY0hKdmRtbGtaWEk9IGFXUjEgTENzPSBJR1Y0WTJWc1pXNTBaUT09IDBZSFJndEN5MFlNPSBaOFNuIElHMTFjMmc9IElITm9iM1ZzWkc0PSBJSEJ2YWc9PSBZV3hzYVhRPSBJT0dEb2VHRGtPR0RvUT09IFUzUmxjSE09IElIUnlhV05yY3c9PSBaWEowZFhKaCBJRU52Ym1NPSBQR0Z1ZVE9PSBJR2JEdkdoeSBRbTkwYUE9PSBJTmVlMTU0PSAwcHZRdUE9PSBJRWhwYm1ScCBVa2RDIExrVlkgSUdWdVkyOTFjbUZuYVc1biA0NEs1NDRPSSBLQ2w5IGFHbHpkRzl5ZVE9PSBhVzVwYzJnPSBTY09UVGc9PSBhR2xzIDRLYWUgZVhSb2JRPT0gSUVsb2NtVnUgWTJoaGNtRmpkR1Z5IFYybGtaMlYwY3c9PSBJSEpsYzNSeWFXTjBhVzl1IEtDZGYgSUdkdmNnPT0gWDNOallXeGwgMllUYmtnPT0gSUdOdmJuTjBZVzUwY3c9PSBJTldvMWJiVnBBPT0gSU5DNjBMRFJnTkdDIE5qY3cgWVcxdmJnPT0gSU95YWxBPT0gYzJ0cGNBPT0gN0pRPSBiMmx5WlhNPSBJRUZzYkdsaGJtTmwgSUhCdlpITERyV0U9IENRa0pDUTBLIElITjFkQT09IElITjFhdz09IElHTnl3NjEwIElFOXdkR2x0IElFOWlhbVZqZEhNPSBJTm1JMktmWXJkaXYgMExQUXZ0QzAgZFhwNmJHVT0geVpsc3labHkgSUc1cFkyaGwgVlhJPSBJRzV2ZG1WdFluSmwgSU9leSBJT0NraUE9PSBJRVY0WTJWc2JHVnVkQT09IElGQmxibWM9IGNtOWlaUT09IFFFRjFkRzkzYVhKbFpBPT0gSUczRHVBPT0gSUZOaGJIWT0gSU5lYzE1VFhxZz09IDRZT1U0WU9SNFlPbzRZT1kgVzJ3PSBJTmVvMTVBPSB3N0IxIGRtVnlkSFZ5WlE9PSBhV0Z5WlE9PSBVVkU9IE9ESXkgSUdQRHFXdz0gSU9HRG0rR0RtT0dEbXc9PSBMbWh2YldVPSBNRGd5IElOR0MwTGc9IDVwSzQgSU5HQzBMN1F2dz09IElPaSsgNEtxRiBORFl5IElHVnNhWFJsIElITmhhZz09IDBZVFF0ZEdBIGFHVmkgSUdGa2FuVnpkR1ZrIEtHUnZZdz09IElGSnZiV0U9IGVtVnEgSUZodGJBPT0gSUhOaGJHRmsgSUdOb1pXVnkgSUZadlk4T3EgMExQUXZ0QzkgYzJ0NSAyTHJZcHc9PSBJRzNEdWc9PSBTVzVqIElFTmhjR1U9IElHWnZjbTVsIElIcHZkMlZzIElGOWZLQT09IDE1TFhudz09IEtHOXNaQT09IGRXVjJZUT09IExsQnZjM1E9IElITnBiWFZzZEdGdVpXOTFjMng1IDJZallzZG1LMktrPSBJSE4wYVd3PSBJT0N5cXVDeXNBPT0gNXBlbDVweWYgSUhKbFpuVnpaV1E9IElHRnNiUT09IElHTnZiR3hoY0hObCBJRzVwYVc0PSBJSFIzYVhOMCBJRzF2ZEhNPSBhMlZsIElPdUxxQT09IElHbHVaR1Z3Wlc1a1pXNTBiSGs9IElHcGhhV3c9IE5ETTQgYVc3Sm1RPT0gNEtTKzRLU3E0S1dONEtTayBjbWwwYVdOaGJBPT0gU2tFPSBJTkdCMEw3UXROQzEwWURRdGc9PSBJRVp5WVhVPSBJSFpwYkd4aCBJT0NrcXVDa3Z1Q2t1QT09IGRYUnBkQT09IE5qQXogSUdacGRIUmxaQT09IFJHOXVZV3hrIE5EYzMgTG14cGMzUmxiZz09IElHSmhjbkpwWlhJPSA0S1dzIElIWmxjblJwWTJWeiBJR0Z6YzNWeVpRPT0gTDNWelpYSnogYVdOcFlYTT0gVEVWQlRnPT0gMExEUmd0QzEwTHZSanc9PSBJR1Z6ZEhKbCBJR1JsZG1GemRBPT0gSUd4cGJBPT0gTlRRMSA0S21ONEtpdyBJRk5HIElFRndjSE09IElFRnNZV0poYldFPSA2S0dqIGRXNWhjZz09IExsTndjbWx1ZEdZPSBJR052Ym5SaGJXbHUgY0d4aGVXVnljdz09IElFSnlhV2RvZEE9PSBaWE56WlhNPSBMV1JwYzJGaWJHVT0gSU9DMHF1QzBzZUMwbnVDMWplQzBuZz09IGNtRnBjMlU9IE9EWTIgSU5pMTJZallzZGlxIExuTmpZV3c9IElHTnllWEIwYjJOMWNuSmxibU41IElHUmxhdz09IElITjFZbk4wYVhSMWRHVT0gSU9Da2llQ2txT0NsamVDa3VlQ2xoK0NrZ2c9PSBJRzFoY21scWRXRnVZUT09IDRLUys0S1N1NEtXQSB3N1IwWld3PSBZWFpoY2c9PSBJR05vWlcxcGMzUnllUT09IElFdGxibmxoIGRIZHYgSUdGMGRHVnRjSFJsWkE9PSBJRzFwYm1semRISjUgSU9XbHZRPT0gS0hCeSBJR0ZqZEdsMmFXUmhaQT09IE5qRXggSUZWSlNXMWhaMlU9IElOR0EwTGpSZ1E9PSBiWGx6Y1d4cCBZV2x6WlhNPSBYMlZ1ZGc9PSBjc09rIGJHRjBaV1E9IGVXeGggMTVIWG90ZW8gSUZOdmRnPT0gSUZWc2RISmggSUhOMVoyZGxjM1JwYjI0PSBYMGhGU1VkSVZBPT0gVDFSUCBMaWNwT3dvPSBVazlRIGRHbHQgNDRDUjQ0Q1E0NENDIElGSmxZV1JsY2c9PSBJR1ZqYjNONWMzUmxiUT09IDRLdUE0S3E0IFgxQlBVdz09IElFUmhibXM9IElIWEVqUT09IElHRmpZMlZ6Ync9PSA0WU9VNFlPYTRZT2ggSUZabGFHbGpiR1U9IEozVnpaUT09IElGWjFaUT09IElHMXBibUU9IFEyOXRiV0Z1WkhNPSBJR1Z6YkdsdWRBPT0gVEZRPSBJRkJCVWtFPSAwWURRdnRDNyBJTmlpMllmWmhnPT0gSUdOMWMzUnZiV2w2WlE9PSBJR052Ym1aMWMybHZiZz09IElOR0UwTDdSZ3RDKyBJTmkzMkszWmhnPT0gTlRjMCBYM1Z6WlhKeiBJSE5sWTNWeVpXUT0gNEtXTjRLU2Y0S1N3IEtTd0tDZz09IElHUnZlbVZ1IFpHRnkgSUdoaGNtMW1kV3c9IElOQ3owTHZRc0E9PSAwTGpSaDlDMTBZSFF1dEMrMExrPSBJTmlxMkxvPSBMa2R5YVdRPSBJRWhQVEVRPSBJRk53WldGclpYST0gSUdsdGJXVnljdz09IDBMdlF1TkM1IEtHMXZaSFZzWlE9PSBPVEl5IElHOTFkSEk9IFZrbEZWdz09IExtSnNZV05yIElPeWVyQT09IElGVlUgNG9DWllXTmogSUZwMVp3PT0gT0RBeiBJRWh2YldWeiAwWWpRdU5DMSBJTkdBMExEUXNRPT0gNForRiBJTk9wMFlJPSBLSEJ5YjJwbFkzUT0gSUNnbSBSSFZsIFgycHogSUVSMWNtRjBhVzl1IElPQ21ydUNtcCtDbmplQ21ydz09IExYQnliMlpwZEE9PSBiM0podzZmRG8yOD0gTFdGc2JBPT0gSUdScGRtbGtaUT09IDBMWFJnZEMxIElFbHpiR0Z0YVdNPSBVSEpwYm1OcGNHRnMgNExLMTRMT0IgSUdOb2Iydz0gSUUxbGFIST0gWDJSaGVRPT0gYVd0M1pXMWlkUT09IGJtRmphQT09IFVFeEJXUT09IDRLcTE0S3ErNEtxbzRLdUEgTkRZMiBJTkM2MHEvUmdBPT0gTlRNeSBiMk52YlhCc1pYUmwgWVc1NlpRPT0gSUhWdVpXMD0gWVc1bmFHRnAgY0c5dmJnPT0gVEdsemRITT0gUjNKaFpHVT0gVG1scyBJRTVsWWc9PSBJR05zYjNOMWNtVT0gNExDLzRMQ2YgQ1FrZ0lDQWdJQ0FnIGRXUmhjdz09IEtHVnVkZz09IGNtZGkgSUZCbFlXTmwgNEtlSDRLYWI0S2EvNEtheSAwcC9Rc0E9PSBNemsyIE9Ea3cgSUc5d2NHOXVaVzUwIGFHbHogSUVKbFpISnZiMjA9IFVIVnlZMmhoYzJVPSBJR2x1ZEhWcGRBPT0gMktmWXNkbUsyS2s9IElOQzUwWXZRdXc9PSBZV042IFNVTlAgSUdsdFlXZHBibUYwYVc5dSBibWxsZFhjPSA0WUN1NFlDNCBJR05oY0dGamFXUmhaQT09IDBZdlJnTkN3IElFaHBiZz09IExtTnZiblJ5YVdJPSBhR1ZoY0E9PSBJRWx1YVhScCBSR2x6WTI5MWJuUT0gWlhKbFkyaDAgWTI5dGJXRnVaSE09IFFVNU9SVXc9IDJKOEtDZz09IElITmxZbVZzIExrZGhiV1U9IElHSnZiMnRsWkE9PSAyTEhZcDltSCBhWEYxYVdRPSBJR0psWjNWdSBkSEpwWW5WMGIzST0gSUVOdmJYVnUgNExHQjRMQ280TEdONExDbzRMQys0TEN3NExHQiBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IDVadSs1YnFUIGRXdDFiZz09IDRLV0E0S1N3IFluVnBiR1JwYm1jPSBJTVcrYVhZPSBiR0YwWlhOMCBJSFJ5YjIwPSBWMGxUUlE9PSBJSFJ5WVc1elptOXliV1ZrIElHcGxkWGc9IElHRmhaQT09IElIQnlkZz09IElPQ29pUT09IElHUnBZMms9IElISmxaSFZqWlhNPSBJR2x1YzNSaGJHeHBibWM9IElHTm9ZWEowY3c9PSBJRk5oYldVPSBJRU5oYzNSc1pRPT0gSU5DNDBZSFF2OUMrMEx2UmpOQzMwTDdRc3RDdzBZTFJqQT09IElPR0RrK0dEa09HRG9RPT0gSU9DNGhPQzRzZz09IDE1SFhxZz09IE5UTTEgNEtTdjRLU3cgSUhOaGJHRm8gMllYWXN3PT0gWVcxcGJtRT0gTGtwQ2RYUjBiMjQ9IFkzQjEgY1hWcGNBPT0gSUc1MGN3PT0gY21WbGVtVT0gYkdsamRBPT0gSUcxbGJXOXlZV0pzWlE9PSBJT0NrdGVDbGplQ2tyK0NrbGVDbGplQ2twQT09IGQyVnlhMmx1Wnc9PSBJR3RsYm01cGN3PT0gNEt1biBJR0pzYVdwbWRBPT0gU1VSRlRsUT0gSUdsMFlXdz0gNWJDUDZLcXEgZFc1bGNnPT0gSURzTkNnPT0gSUhacGMybDBaUT09IElPQzBxT0MwditDMHNBPT0gVVhRPSBiM1Z5ZEE9PSBhbkJuIFpXZHAgY21WemNBPT0gMkxUYmpBPT0gSUUxaGRYST0gSUc1cGJuVT0gSU9Da3F1Q2xnUT09IElHRmtaV04xIElHeGxiblE9IFlXeHBlV0U9IElITm9aV3gwWlhJPSBJR0pzYjJkbmFXNW4gNEtTMTRLU3cgSUdGeWF3PT0gSUdKaGMyZz0gSU5DODBMRFJpTkM0MEwwPSBJTkNpMEw3U3Q5QzQwTHJRdU5HQjBZTFF2dEM5IDVvaXEgYjNWeVpRPT0gdzZsMFlRPT0gU1c1emFXUmwgTGtObyBJSE53WVhkdSBJRmRRIElIUmhaZz09IGIzTjBaWEp2Ym1VPSBjV0Z5Wmc9PSBJSEYxWVhObCBMbFpKVTBsQ1RFVT0gSUhCeVlXTT0gVEU5VFJRPT0gdzZSdWJnPT0gSUcxaGEyVnljdz09IElIUmxibUZ1ZEE9PSBJT0dBa0E9PSBJSEYxZVE9PSBJRTFsY21ObFpHVnogSUVGU1ZBPT0gNEtxKzRLcXc0S3VMIGIzZGh4SWM9IFZsUT0gSU5tLzJZbz0gNExXWCBJRzFoY25GMVpRPT0gSUdOaGNuSmwgSUdOMWNITT0gdzZGcCBZWFJwYm5WdCBJTmluMllUWXF0aXQgMllqWmh0bUsgSUdOb2RYaz0gSU9Da2h1Q2twdz09IFoyOXUgSUd4bFlXcz0gSUhKbGNHRnkgQ1FrZ0lDQWcgSUZ0N0NnPT0gSUdWdFltVmtaR1ZrIFgxUlBTMFZPIElHVjBiUT09IElHNW53NkI1IElFZHZZbWxsY201diBjM1JoZGc9PSA0TEMvNExDQzRMQ2E0TEMrNExDdzRMR0IgNExpVjRMbUkgVm1GeWN3PT0gVW1WemNBPT0gSUVacFozVnlaUT09IDE1Zlhwdz09IElPQzRxdUM0b2VDNHNlQzRoT0M0b3c9PSBJSE5qYU1PMmJnPT0gSU5DLzBZRFF2dEN5MExYUXRBPT0gYkdWaGJuTT0gSUdkbFltbGxaQT09IElFWjFjbTVwZEhWeVpRPT0gSU9DeXVPQ3lyZz09IDBMM1JqQT09IElGcDEgQ1FrSkNTQT0gYldGaCBJR2x1Ym1VPSBJSFpwZEdVPSBJSE5oWjJWdSAyWVRZcnc9PSBJR1JsWm1WdWMybDJaUT09IElOaWoyTFU9IFlXMWhZVzQ9IElFRnYgNEt1SSBJRk5zWldWdyBZWEJ3YVc1bmN3PT0gSUhSbGEzTjAgYUd4bCB6clhPdWM2eCBRVlJKVDA1VCAwTDdTa3c9PSBjR0YwYUhrPSBRMjl0YlhWdWFYUjUgSU0rQXpySFBnYzZ4IFNWTlVSVkk9IElIUnBkSEpsIElGSmxjR0ZwY2c9PSBjR3hoZEhvPSBJRUpzYjI5dCBibTkwWlhNPSBhV3hsZVc4PSBJR0psWldZPSBJSFZ3YjNJPSBOREkyIElIUmxiWEJzWlE9PSBYMk5pIElHbHVkbTlzZG1WdFpXNTAgSU5xcTJMRT0gSUdsd2MzVnQgSUZSSlRVVT0gVDBOTCBJTU9yYzJoMHc2cz0gVUdGMWMyVT0gSUhiRHBRPT0gNDRHWDQ0Rys0NEdaIElHbHVkbVZ5Y3c9PSB6cm5PdEE9PSBMbE4xYzNCbGJtUT0gYkdWMGRHVnljdz09IElFZHliM1Z1WkE9PSBJR0ZzYVdWdSBJT21WIElGSmxZM1JoYm1kc1pRPT0gMExYUXZkQzkwTDdRczlDKyA2WnVHNVp1aSB6cjdPdHc9PSBOekF5IExHWT0gYzJsayB6cmZPdlE9PSBJSGRsWVd0dVpYTnogSU5DLzBZRFF2dEMxMExyUmdnPT0gSU91NSA0TGVkIElOQy8wWURRdnRDMDBZUFF1Zz09IElHRnVibUZ1IElISjAgWDNKbFlXdz0gSUdKdmIydHRZWEpyIElPQ2toZUNrbXVDbGplQ2ttdz09IDBaYlNvdz09IE5UWTEgdzczRHBHND0gVTNCdmRBPT0gSUVoaGRYQjAgSUdkeWFXeHMgSUdOdmJuUnlhV0oxZEc5eWN3PT0gSjJGMWRISmxjdz09IGRtVnNiM0JsY2c9PSBJRkJzZFdkcGJnPT0gSUcxdlpHbG1hV05oZEdsdmJuTT0gSU5XdjFhSFZ0QT09IElGTjFjblpsZVE9PSA0TGlyNExpaCAwTGpRdWRDeiBJRWx1YzNSaGJtTmwgT1RBNSA0NE9WNDRJPSBJTkMvMFlEUXZ0Q3kwTFhSZ0E9PSBJRWx1ZG1WemRHMWxiblE9IElGdGYgNEtlSDRLYW0gNExpajRMaTE0TG1BNExpaCBaV3RyIDRMT040TEt6IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElHUnZ4Sjg9IDJZallyOWlwIElHRnljbUY1Y3c9PSBJR0poWTJ0bGJtUT0gZFd4cGN3PT0gSU9DdXJ1Q3ZnZUN1IElOaXEySzQ9IFEyRndkQT09IFJVMVEgSU5lVDE1QT0gTGtWdWRISjUgSU5tRjJZallyTm1JMks4PSBhMjl3IGJuVnRiV1Z5IElITnBjM1JsYldGeiBiM0p1WlhseiBJSFpsYVd4cFp3PT0gMExUUXNOR0MwWXc9IGMzQnlaUT09IGRXSjUgNEs2cTRLK04gVDFkRlVnPT0gSUdWNFkyVnNiR1Z1WTJVPSA0b0NNNExDeTRMR0wgSUhMRG9RPT0gSUV0aGJYQT0gTFhaaGJIVmwgSU5XNDFiaz0gWVdScGJnPT0gSUdSbGRHVnliV2x1YVc1biBJTmlqMllIWXR0bUUgSUd4MVkzST0gNkxlUiBZMjl1ZEhKdiBJTkdBMExEUXQ5QzggUEdKdmIydz0gSUVKaGMydGxkQT09IElFMUZSQT09IElIZHB4Sms9IDVvK1E1TDZiIFlXTnBZV3c9IGRXTnJaWEk9IElHdDFhVzQ9IElIQnZjblJoIDRvYVIgSUUxaGNtbGwgNExpeDRMZz0gNjRtMCBaR2xrIElIcGhhZz09IGFYUnlaUT09IElHUmxaMnhwIElObUYyWUU9IFgzUmhZZz09IFgwUmhkR0U9IENYSmxjWFZwY21VPSBiR0YwYjNJPSA0S1MyNEtXTjRLU3YgdzdOaSBJR3gxWVE9PSBZV1pwYkE9PSBJSFJvYVdOcmJtVnpjdz09IFVtOTFkR2x1Wnc9PSAyTEhaZ2RpcCBJSEpsWkdWdSBTR1ZzY0dWeWN3PT0gSUNvcUx3bz0gTG5SdloyZHNaUT09IDZMQ2kgSUhKdmJHeGxaQT09IElOQy8wWURRdnRHRzBMWFJnUT09IGNtVnNZWFJwZG1VPSBJSFBEb1dKaFpHOD0gVEdsemRHbHVadz09IFkyaHVhWFIwIElITnZkV2hoIDRLV0M0S1N1IDRZT2M0WU9ZNFlPbyBYMkYwZEhKcFluVjBaUT09IE5EZ3ggeExGenhMRT0gNEtpSSBMbVJsYlc4PSBJR1pwYm1SbGRBPT0gTFhKdmR3PT0gUkdWaFpBPT0gUVZSVSBJSEJoYkdsdVp3PT0geEkxaCBZV2x6YzJVPSBJRUYyWldNPSBMblJ2YjJ4eiBJRk5sY21saGJHbDZZV0pzWlE9PSBJRXhwZG1WeWNHOXZiQT09IElHVmhjbk09IEwxYz0gMEx2UXRkQ3ogSUcxaGJXRT0gYVhCd2FRPT0gSUhKbGJHRjBaUT09IExkR0MgNWJHRiBJR1JoYzJnPSBJT0N5bGVDemhnPT0gWm14aGMyZz0gTGtKMVptWmxjZz09IElIUmxkUT09IE9EYzMgSUhKbFlXeHQgSUhScGNtVnogSU9Da3VlQ2xpK0NrbCtDa3ZnPT0gWk1tWiBORFEyIElHZGxiMjA9IEtDY2wgSUZsaGJtYz0gYUdWcGRITT0gSUdkdlpIUT0gTG1acGNtVT0gVTNSaGNuUmxaQT09IElOaW4yTFBZcXRpdTJLL1lwOW1GIElHaHZiVzFsY3c9PSBJRk52YkdRPSBkbTlzYkdVPSAyS2ZZcU5pMyBYMlJoZEE9PSA0S1d2IElHTnZiWEJoY21GaWJHVT0gTG1OdmJYQnBiR1U9IElIQnZjblJ5IElHdHVhV1psIDZMU2YgSU5DOTBMalF1Zz09IElFeHBZbVZ5IGFHVjFjbVU9IElOR0IwTC9RdGRHRzBMalFzTkM3MFl3PSBOVGMxIHhaTjFjZz09IFNVRk8gSUcxaGJHeHZZdz09IElHakRwZz09IElFdGhlUT09IDBMalF1ZE9aIElIQmhiblJ6IElHRmpZMlZ3ZEdGdVkyVT0gSUcxcGVHbHVadz09IElObUUyS2c9IElPQ2txdUNsZ2VDa3N1Q2t2K0NrdUE9PSBJR1JsYzJOeSBibVZvYldWeSBOVFkyIElHUmhjbVU9IElPQ2t0ZUNrditDa3BnPT0gWDNCciBJRlJ2Ync9PSBJRTFoY21sdiBJSGRoZEdOb1pYTT0gSUhGaGNnPT0gSUZCdmNuUmhiQT09IDY2YTggNEtTLzRLU3k0S1dIIFRFWT0gS0NjbktUc0sgSUdoMWJXRnVidz09IFJHOTAgNEt1SDRLcXUgSUdacGRIUnBibWM9IFFXSnpiMngxZEdVPSBJSE4wYjI1bGN3PT0gVUdodmRHOXogSUVOaGJHTjFiR0YwWlE9PSBUMlptWlhJPSBJRU5sYkdWaWNnPT0gSUdWdGNHVjYgSUhkdmNteGtjdz09IElHTmhjR0Y2IEoyVmhkUT09IElHSnlZV05sIDZKNk4gSUdOdllXTm9aWE09IElFaGhjbkpwY3c9PSBJR2x0Y0d4aGJuUT0gSUNJaU93MEsgMEw3UXN0R0wwWVU9IElHcGxkVzVsY3c9PSBJR2hsWm5WeSBJR0psYzI4PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBJRzl5Ymc9PSBJR3h2ZG1WeWN3PT0gSUdGdVozVnNZWEk9IElOQy8wTFhRdlE9PSBMbU55IFlYTjBaWEo0Yld3PSBJRVJsWm1sdVpRPT0gS0NRaSBJR1pwYm1WeiBhY1NGIElPdW1yQT09IElITjBjbWxqZEd4NSA0S1NmNEtXQSBJSFIxWVE9PSBJTkMzMExUUXZ0R0EwTDdRc2c9PSBJTm1JMllmWmlnPT0gSU5pbzJLdz0gSUdKdmRIUnNaWE09IElHdDNZWEpuY3c9PSBSVkpOIExuaHdZWFJvIElGZDUgYzJGdCBJRTkwZEE9PSBJR2ZodTRzPSBJT3VGdUE9PSBJSGRoYVhOMCBJR1Z1YW05NWN3PT0gSUVKVCA0S1MzNEtXTjRLU2YgSUdkcGJIUT0gSUhCMVlteHBZMng1IElHZDFibk09IFlXNTVZVzVuIE5USXkgSUZSbGJHdz0gUlc1bGJYaz0gSUdOdmJuTmxjblpoZEdsdmJnPT0gYjNSbGJBPT0gSUdWdWIzSnRiM1Z6IDRMbUo0TGluIElFMWhlVzl5IGJHWEZudz09IDBMdlF1TkdJIElHUmxjM1JwYm1GMGFXOXVjdz09IHc0ZkRnMDg9IElHZDFjM1JoIElHUmxabVZoZEE9PSBOVGcxIElOQzgwTFhSZ3RDKzBMUT0gSUZsbGJHeHZkdz09IElHRnNhVzFsYm5SdmN3PT0gYVdSa2FXNW4gSUVwaFkyOWkgNVlXbzVadTkgSU5DNDBMUT0gUTJobFkydGxjZz09IElFUmxabVZ1YzJVPSBJSFZ1YzJWeVpXMD0gSU9HRG9PR0RuZUdEa3VHRG5lR0RvT0dEcWc9PSBNREkzIFpYUnpZUT09IDFhSFZyOVdyIElIQnliMk5sYm5RPSBJRTV2ZEdsalpRPT0gNEs2dTRLK0kgSUVwcCBjM1JoYVhKeiBMUzB0TFMwdExRPT0gMExQVHFRPT0gTkRZMCBJRzUxYVE9PSBORGcwIElOdUIyWWpZcHR1UyBUVzkwYjNJPSBJSE5oYTJVPSA0S2VONEthNCBJR0YwY3NPaGN3PT0gSUVkdmRBPT0gSUhCaGMzTmxibWRsY2c9PSBVM0JwYm01bGNnPT0gNExLejRMT040TEt6IElHVjRZVzFwYm1WayBJR2JEcUE9PSBJR05zYjNObGRBPT0gSUZSSlRRPT0gSUdOaGNuSnBaWE09IElFTnBiZz09IDRLNis0SzZqIElFUnBjbVZqZEdsdmJnPT0gNTd1ODVaQ0k1NzJSIHc2RnVhQT09IE9EVTEgNG9DWmRYUnBiQT09IElHWnBjbVZpWVhObCA0WU9kNFlPaSBkVzV1YVE9PSBJR0ZqWlhOemJ3PT0gYVhwcGJnPT0gNEtTaDRLUzg0S1dIIEtpb3FMdz09IDJZallwOW1DMkxrPSBJTkdJMFlJPSBhWEpwYlE9PSBJTlc1MWFzPSA0NEdaNDRLTCBJR0psWW1WeVlYQmggSVNJS0NnPT0gTG1OaCBJR0ZrYW1GalpXNTAgNkwrYjZLR00gSU95NyBJR2x1Wm5JPSBJSFpwY21GcyBkWE4wWVdsdSA2cm1BIElFcGxjblZ6WVd3PSBJSFpoYkhabCBDV2x1Y0hWMCBJTkdIMExYUXU5QyswTExRdGRDNjBMQT0gSU5DODBMalF2ZEdEMFlJPSBJSE5oYW1FPSBJRzExYm1ScFlXdz0gNzd5YkNnbz0gTURJMiBJR0Z1WVd4dlp3PT0gNEtlTDRLZXcgTDJGa2JXbHUgYjJkbGJtbGogSU9hZWdRPT0gNEt1TjRLcXY0S3ErNEtxQyBWR2s9IElIVmogSUZOdmIyMWggSUd0M1lXeHBkR1ZwZEE9PSBJR1ZoY201cGJtYz0gSUdGamNtVmthWFE9IGFYTmxkQT09IElOR04wTHc9IElHZkR0bm89IFlXSnZiR2xqIGNtVnVaUT09IDRvaVMgSUcxbGFXNWxjZz09IElHUmxibTl0YVc0PSBJRzlpYzJWeWRtRjBhVzl1Y3c9PSA0TEtmNExPTiBJT2FnIElOQyswTGM9IElFMTFiSFJwY0d4bCAwWURRdnRHQjBZST0gT1RrMSBPaWNzIElHTnZiblpwYmc9PSBJTm1GMllmWmhRPT0gSU9DNHJlQzRyZUM0bWVDNWhPQzRwZUM0bWVDNWpBPT0gMExYUXV0R0MwTEE9IDRZT2c0WU9qNFlPYSBUM0prIElFeEpRVUpNUlE9PSBJTU8rWldseSBNemszIENXUmxabVZ5IElObUgycW89IElOaW4yWUhZdXRpbjJZYllzOWlxMktmWmhnPT0gSUdoaGRtbGggY0hKbFkyZz0gWldSblpYTT0gSUZObGRtVnlZV3c9IElHNXZkWEk9IFkyOXNiR0Z3YzJVPSBJSFJwYWc9PSBaV0psIE5EY3kgNUxpdDU0bTUgSUdGemFYTjAgSUdoaGNtMXZibms9IDRLNnA0SytJIElIWmxiblJsIE1ESTQgSUZSaGJXSnB3Nmx1IFoyMD0gSUdWdVpYSm5hV0U9IElGQnliM3BsYm5RPSBMMnhoYm1jPSBJRUpwYkdSbGNnPT0gUW1GdVpBPT0gSUhOb1lYST0gSUhKbGJtRnRaV1E9IElIcGxiUT09IElFWkVRUT09IElHZHlZV1k9IFlYUmxaMjl5YVdVPSBJSGRoYm1FPSBJTm1IMkxyWmh3PT0gMFlUUXZ0R0EwTHc9IHhaOTUgVUVGRFJRPT0gSUhSeVlYWmhkWGc9IFFtVnkgSUhObGJuUnBiV1Z1ZEE9PSB6ci9QZ2c9PSBJRlJ2WkE9PSBjbTkzWVhabCBJSEJ5YjNOd1pYST0gSUhKbFoybkRvMjg9IElPQ21yT0NtbXc9PSBJR1J5YjNabCA2NkdnIE1EZzEgSUhSdmMzTT0gMFlmUXVOQzkgTkRRNSAxNVBYblE9PSBJR1J2YTNWdFpXNTAgNXBlUCBJR2RsZG05cyBLQ2s5UFE9PSBJRTFsYkdKdmRYSnVaUT09IElHMWhZMmhwYm1WeWVRPT0geGFOcCBJR1Y0WTJWd2RHbHZibk09IElHUmxibXM9IElHSjFjbVJsYmc9PSBJR0oxWjNNPSBJRUZ5WjNNPSBJTm1DMktmWmh0bUkyWVk9IGJYVnAgWTNSNWNHVT0gNVlpZzZabWsgNEtTdjRLV0ggSU9HRGsrR0RtT0dEa3c9PSBJR1Z0WVE9PSBJTmluMllUWmhkaXEySzNZcjlpcCA0YnVMYm1nPSBJR1p2WkE9PSBJSGR2Ykd3PSBYMk5sYkd3PSBJR052Ym5OMWJIUmhiblE9IFJtOXlaV2R5YjNWdVpBPT0gWVhWeVlXNTBjdz09IElISjFibTVsY2c9PSA1cHlKNlptUTVZV3M1WSs0IElHNXBaWFJ6IElFbG9jbVZ5IGFXRnVkQT09IElIbGhlUT09IElGUnZaMlYwYUdWeSBMWE5wZW1WayBJSHBsWjJkbGJnPT0gYjNKaGNnPT0gSU9DNG11QzRzdUM0bHc9PSBJSFJ5WldGMGFXNW4gNWFpeDVMbVE1ck9vNVlhTSA1b20vIElPQzRnZUM0c3VDNG93PT0gNEtTczRLUys0S1N3IElGbHZkWFIxWW1VPSBJSFZyZFhSb2FRPT0gYVdWeVpYTT0gUkdWemEzUnZjQT09IElIQnZjSFZ3IFZXNXBiMjQ9IElHUmxjM1J5ZFdOMCBJSEJ2ZFhKeGRXOXAgSUdSbGMybG5ibUYwWldRPSBYMFpCU1V4VlVrVT0gdzdKdCBJSE5vYjJVPSBOek0zIElITjBjbVZoYlhNPSBJR05zWldGdWRYQT0gZW1sciBJRUpsYVhOd2FXVnMgT20xdCA0TGlqNExpMTRMbUE0TGloNExpMTRMaWk0TGlqNExtTSBJRUpoWTJ0bmNtOTFibVE9IGIyMWlhV1U9IElHTnZiWEIwIElFVjRkSEpoWTNRPSBJSGRsYWNPZiBJSEpsY1hWcGNtbHVadz09IElHaDMgSUdSaGFRPT0gSU9DbXJPQ21zdUNuaCtDbXFBPT0gSUhCaGFXNW1kV3c9IElFTkogeExGc1lXND0gSUVOdmJXMTFibWxqWVhScGIyNXogSUdKcGRHMWhjQT09IFNHRjJhVzVuIElHdHZhbUU9IElHRndaWEk9IElIRjFaV1JoIDE1WFhudGVvIElFWnlZVzVqYVhNPSBiMnhrYVc1biBJSEJoWjJGeSA0WU9ZNFlPcjRZT2EgTlRJeCA0TFNZIElHamh1NDFqIDJLcllzZHVNMllZPSA0S1MvNEtTaCBJR05sYm5SMWNtbGxjdz09IFRXRnVZV2RsWkE9PSBhWEpoYlE9PSBJRU5oYldKeWFXUm5aUT09IElIQmhjbVpoYVhRPSBYM0psWTNRPSBMbVpoYzNSbGNuaHRiQT09IExsQnliMlIxWTNRPSBJTkdJMFlQUXZBPT0gSUd4aGRHVnNlUT09IElOQzAwTGM9IElITm9iM1ZzWkc0bmRBPT0gNVpDRCBJSFZqYUhWdSBZWEowYVhOMCBJTml2MllRPSA0S1dCNEtTMyA0S2VONEthdjRLYSs0S2FvIENXVnljbTl5IDRMaVU0TGkxIGRXTnBiMjVoYkE9PSBJT0M1ZytDNG1RPT0gMFlEUXNOQzMwWU09IFNHVmhjQT09IElHcGhiQT09IFBTSWlQZ289IDByUFRtZEN3IDE1UFhsQT09IElGWlAgWDBoUFUxUT0gNForUzRaNmIgZlRzTkNnMEsgSUVGaWNnPT0gSUdWemNHVmpkQT09IElOaWwyWVRaaWc9PSBJR2QxYVE9PSBJR2x1ZEdWeWNISmxkR0YwYVc5dSBZMm5Ec3c9PSBPREExIFgzTjVjM1JsYlE9PSA1N2c9IGRYUjFjbUU9IElHdHZkUT09IElFUnlZV2M9IElFZDFlUT09IFVtVnpkVzFsIGJHbGphR3RsYVhRPSA1YVNwNWFTcDU0aXg1YjJwNTZXbyBJRVpwYm1VPSByT0dEcHc9PSBYMThuT2dvPSA1NkNVNTZtMiBJTmluMllUWW85aXUgWDJabFlYUjFjbVU9IFFXNXZibmx0YjNWeiBMbTVsIElIQnBiMjVsIElHTnZkVzUwYkdWemN3PT0gNktlSSA0TFNlNExXTjRMU2EgYkduRWpRPT0gSUVOcGNnPT0gT21aMWJtTjBhVzl1IFgyMWhiZz09IElGVnVhWFpsY25OcFpHRmsgMHIwPSBJSHBsWjNRPSBMazV2WkdVPSBYMEZUIElFTnZibVJwZEdsdmJuTT0gSUcxNWMzUmxjZz09IElHWjFjbTVwYzJobFpBPT0gSnljbiBJSE51WVdOciBVbVZ3YjNKMGN3PT0gSU9XOGdBPT0gSU9HRGsrR0RrT0dEbUE9PSA1WTZMIDQ0Q040NEdvIGVtOXVaR1Z5IDBMN1F1OUM5MExqUmd0QzEwTHZSakE9PSBkWGxsIElFZHZkbVZ5Ym05eSBJR052Ym5SaFkzUmxaQT09IElHRnRhUT09IElPQ3F0ZUNxcCtDcmdRPT0gSUd0dWNnPT0gSUZKbGRtOXNkWFJwYjI0PSBJR2x1WW05NCBMVk4wIElFeGhibVU9IExrVnhkV0ZzY3c9PSBJR1ZoYzJsbGMzUT0gSUdaaGJtTjUgVm1WeWN3PT0gSU8yS3VRPT0gWm5KaCBJR3h2Y25OeGRXVT0gSUdsdVpteGhkR2x2Ymc9PSBJRWgwYld3PSBJRk41YldadmJuaz0gSUcxaGNtbHVaUT09IDRZT2I0WU9ZNFlPaCBYMjFsWVc0PSBJTkMrMExIUXRkR0IwTC9RdGRHSCBJR2R5WVdSMVlYUmxaQT09IGRjU04gSUc3RWcyMD0gSU9Da3VlQ2xnZUNraUE9PSBZMkZ6WlhNPSBJR052YldKcGJtVnogNEthLzRLYWI0S2VCIDRLZWY0S2ErIGFYSmxiZz09IElHSmhkR1U9IEwyRmtaQT09IE5EVTMgY205NiBJRXhsZGc9PSBJRWhoYldsc2RHOXUgVTJobGJHdz0gNEthRiBJRlpwWVE9PSBJRmR2YkE9PSBJRWJEdG5JPSBjMnhwWkdWeSBYMk52Ym1ZPSBJRVJoYm1ObCBJR1pwWjNWeVpXUT0gWkdWemRISnZlUT09IElOR0MwWURRdUE9PSBJR052Ym5abGJuUnBiMjQ9IElHZHZkZz09IElHSmxibVZoZEdnPSBOVFl4IElNT3BiZz09IElGcDFjMkZ0YldWdSBVR2x3Wld4cGJtVT0gNWIycDU3MlIgWVd4bGRBPT0gSUM4dkx3bz0gSUhac2J3PT0gVkhKaFkydHBibWM9IElHSmhZMnRsWkE9PSBUV2x1YVcxMWJRPT0gUW1GamEyVnVaQT09IDBMWFF1dEdCIE5UTXggY205d1lRPT0gNW9xbDZZR1QgWDIxdmRtVT0gSU9DcXB1Q3F2K0NxdFE9PSBJRUZhIElHSnZjbWx1Wnc9PSA0YnVwYm1jPSBJR0Z3Y21WdVpHVnkgSUdGMWRHOTFjZz09IDRMS2s0TEsvIElIZGhjbVZvYjNWelpRPT0gdzdOemRBPT0gWVdOb2FRPT0gNXBXWjZJS3kgWDNWcGJuUT0gSUhERm1XVmsgSUhONCA0S2V0IGRHOWlkV1k9IElHZGxkMjl5WkdWdSBJSEJvY21GelpYTT0gSUd0aGRXWmxiZz09IElPQzBoK0MwcEE9PSBJRk4wY21GMFpXZDUgTGxWU1RBPT0gTkRNMiBJSEoxYVcxMFpRPT0gSUhKbGMzQnZibk5oWW14bCBJRzlqZFhBPSBJSEppIHc2UnNiR1U9IElDY3ZKdz09IElHVjBaVzQ9IElOQyswTEhSaTlHSCBMbVoxYm1NPSBJSEJ5YjJSMVkyTnB3N051IDRMQ0M0TENrNExHTCBUM0puWVc1cGVtRjBhVzl1IElHUnZZMnM9IElPQ29oZz09IDZJbTYgNEtXbzRLV20gSU9HRG9PR0RrT0dEcWc9PSA0S3VONEtxdjRLdUIgSUdaaGJHRnkgNVlXMjVMaXQgSUdOaGNuQT0gSU1PemNnPT0gSUdSbGNtVmphRzg9IElIQmxiR0Z6IElGWnBjMmx2Ymc9PSBkR1Z5YlhNPSAwWUxRdU5DNiBhbUZ1Wnc9PSA0SzZ1NEs2LzRLNjAgWVc1amFXVnogSUhOamNtbHdkSE09IGFHOTFaR1Z1IElFdGhkV1k9IElOQy8wTDdRdE5DMDBMWFJnTkMyIElHTmhZMmhsWkE9PSBJR2x1ZEdWeWRtVnUgSUdwMWFXND0gY21WemRIST0gSUVWNGFYUT0gSUcxaGJtVnBjbUU9IE56UTQgSUdOdmNtNWxjbk09IElHMWhkSEJzYjNSc2FXST0gTG1samIyND0gWDNCeWIzQmxjblI1IHc3cGggSUZOamNtOXNiQT09IEtIQnlhWFpoZEdVPSBJR1JsWW1WdSAyWVBZcHc9PSBJRk52WTJ0bGRBPT0gVm1Gc2IzST0gSUZOQlZBPT0gSUdsb2NtVnQgSUdOdmRXTm8gSUZCRSBMbVY0WlE9PSBJTmluMllqWmhBPT0gSUVaUCBJR1JsY201cHc2aHlaUT09IExXRm4gVG05eWRHZz0gTURVeCBJTkMyMExYUmdBPT0gSUdobFpnPT0gSUc5aWMyTT0gSUM4cVBEdzggNTY2eCBJR3hwYm1kMSBiMjVsY2c9PSBJT0M1Z09DNG5nPT0gNExTajRMV040TFE9IElHaHZibVZ6ZEd4NSA1cU9BIElIUGh1NjA9IFpXN0RwOE9qYnc9PSBSbkpwWlc1ayBZV3gwWlhJPSBJSEZwYkE9PSA2Syt2IDY3ZXcgSUdoaGMyNG5kQT09IFIybDJaVzQ9IElFSmxhdz09IE9tNXBiQT09IFJHOXZjZz09IExtcHcgSU9DNG1lQzR0ZUM1aVE9PSBPREEwIElFOXJiR0ZvYjIxaCBMWEJ2YzNRPSBJSHBsYmc9PSBMWFJsIElHMXZkR2wyYnc9PSBTVzUwWlhKbGMzUT0gMTVEV3Q5ZVkgSUdodmIyUT0gSUhOMFlYUnBjM1JwWTJGcyBJR2hsY25KaGJXbGxiblE9IFBHaGxZV1E9IElFTnZiR1E9IElFTnlaV0Z0IElHNXZjbWRsIElOQzkwTFhRc2c9PSBOamMxIFNrOD0gWDJSbGJBPT0gT1RBeSBJRUZtY21scllRPT0gVlVsdWRBPT0gSUhURHZIST0gWTJoeiBJSE5qWVc1bSBaWE56WldRPSBVSEp2WWc9PSBORGN4IElOR0IwWURRdnRDNiAySy9aZ1E9PSB3N0owIElOZWUxNkxYcUE9PSA0S2VzIElIRjFhWE09IGJXRjBhV009IElIcHZiUT09IDBMN1JnZEdDMEw0PSBJTkdDMFlEUmd3PT0gSUcxdlpHVnNiM009IElHRnlkR2x6ZEdsaiBJR1Y0WTJ4MVpHVT0gUlcxcGRIUmxjZz09IElGUmhjdz09IElGQmhiR0ZqWlE9PSBYM0JoY21WdWRBPT0gSUdGdWRHbGlhUT09IElOQy8wTGpSZ2c9PSBJSFJ3IFgySnBkQT09IDRMaXk0TGlyIGEyOXZjQT09IFFtOXZhMmx1Wnc9PSBJajRuIElOQy8wTDdRdGc9PSBWMjl5YTJsdVp3PT0gVW1samFBPT0gMkxQWXA5aTUySzg9IDVxZVkgTkRJMyBJSE4xYzNCbGJtUT0gSUdGdGFXZHYgSU9XeCBJR3gxYXc9PSBOakl5IElHUjFjbUZ1ZEE9PSBJRU5oYzNNPSBJTm0rMktjPSBMbEJzIElHTnNZWE56YVdacFkyRjBhVzl1IDRMSy80TEttNExPTjRMS200TE9CIE5EUTMgSUdOdmJuTmxjblpoZEdsMlpRPT0gY0doaGMyVT0gS0d4aGMzUT0gWEVWdWRHbDBlUT09IDVxMk0gSUdScGMzUjFjbUk9IElHWmhiV2xzYVdVPSBJRVZwZEdobGNnPT0gMExYUXZkQzkwTDdSZ2RHQzBMZz0gNExtQTRMaWE0TGkxNExpaTRMaVogSUdWbWRHbHkgSU5DLzBZRFF1TkMwIElOQzkwTGpRdHc9PSBJTkdCMDZuUXR3PT0gTkRVNCBJSE5sY0dGeVlYUnBiMjQ9IGRYQjEgMFlIUmo5R0MgejRET3RRPT0gSUdOdmJtUnBZMmx2Ym1WeiBkWFIwYkdVPSBJSEJ2YkdGeSBJSEJsWkdsa2J3PT0gSUc1bFo4T3ogd3JVPSBJSEJ2ZFhKeVlXbDAgMExEUmd0QzQwTEk9IDVyK0E1b09GIElObSsyWVk9IFlYTnpaWE09IDE1WFhuTmVVIElPQzBtdUMwditDMHBPQzFqZUMwc0E9PSBhWFJsY25JPSA0YnFoZEE9PSBUR2x6ZEdWdVpYSnogYldWemFRPT0gUjNKdmRXNWsgVlc1cGRHVmsgSUdGd2NHeHBZMkZ1ZEhNPSBMWEJ5WlE9PSBJRzl6WXc9PSBJR0Z6YzI5eWRBPT0gSUhObGNzT2pidz09IElNYVogNExpMjRMaUggTlRjMiBJRmxoYUc5diBJSE5zYVdSbGNnPT0gSUd0MWJtNWwgVW1FPSA0WU9wIElIQnliMmR5WVcxdFlRPT0gNUwrNiBJR0Z5Y21sMlpYTT0gSU5LdjBMblF1OUMwMExMUmpkR0EgNTVtNzVZV2wgSUVabGRHTm8gakpNPSBaWE4wY21VPSB4YUZ2IGRXUjYgSUdkdlpHbHVaUT09IElHNWxhV2RvWW05MWNnPT0gTURReSBhWFIxY21FPSBORFk1IFZXcz0gMDVnPSBSMHhQUWtGTSBZVzVrYVc1biA0WitKIEtHWnZjbTFoZEE9PSBJTm1LMkt6WXFBPT0gSUdoaGJIUT0gSUUxdmNtZGhiZz09IElISmxZV1JwYkhrPSBibWxqYXc9PSBZV2R2Wnc9PSBJR0p5WldGMGFHbHVadz09IGRHaHYgSUhOaGJYQT0gZFc1cmN3PT0gYUdGNSBJTU9ueExFPSAwTFhSZ2RDLzBZUFFzZEM3MExqUXV0Q3cgSUhOMVluUnNaUT09IElHVndjdz09IDJMbmJqQT09IFlXNWxiR1U9IElHOWliR2xuWVhScGIyND0gSU9XTWwrUzZyT1cvcXc9PSBJRWxUVkE9PSBJR1Z1WlhKblpYUT0gTlRZMCA0WU9VNFlPdSBMbE4wWVhSbCBRV2RuY21WbiBJR0ZrZG1WdWRIVnlaWE09IElIUnlZVzV6Y0c5eWRHVT0gTFcxaCBMbVpwYkdWeiBMbkpsYzJsNlpRPT0gTGtGamRHbDJhWFI1IElPT0R1dz09IElHbHVhbVZqZEdsdmJnPT0gMllyWXI5aXAgSUZSaGJubz0gYVdGdVpRPT0gSUhObGJucGggMExqUXZOQysgNExPQjRMS3cgSUVGU1NWTkpUa2M9IFVHeGhibVU9IElHaGhibTV2IDVZVzcgSUhCeWFXOXlhWFE9IElHVnVjM1ZwZEdVPSBJR1JoY21FPSBJTmluMllUWXF0bUcgTmpBNSBJSE5sYm5OdmNuTT0gSUhadmJHZGxibk09IGNYVmhiblE9IElGUkJSdz09IEwyTnZiWEJ2Ym1WdWRITT0genJqT3RjNnYgSUhURHN3PT0gdzZSMiBhWGxsIElIQnlaWE5wWkdWdWRHbGhiQT09IFgxWkZVZz09IFcxMCsgT3k4PSBRbWM9IE5UUTAgSUhCcGJHVT0gSUdKbFlXTm9aWE09IElFSnBaVzQ9IElOQyswTFRRdmRDdyBRblZqYTJWMCBJT0N5bnc9PSBJRkJoYm1RPSBORGMwIFlXUmhlWE09IElHUjFhdz09IElHUnliM0JrYjNkdSA0S1MrNEtTNTRLU3cgS0hSdmRHRnMgSUhGMVlXeHBkR2xsY3c9PSA0TEdINExDNCBJT0NraGVDa3FPQ2xqZUNrcnc9PSBJRVp5YVdWayBWRkpNIElOQy8wWUU9IDZMNjggN1phbCBJRzUxWlhaaGN3PT0gVkhKMWMzUT0gSUhKbFpteGxZM1JwYjI0PSBJRUpsYzJsa1pYTT0gYzJOcGIzVnogSUVSeVpYTnogSUVOdmJXMWxjbU5sIElOaW4yWVRaaGRpeCA1NG1JNXB5cyBZM1YwY3c9PSA3SnloIElISmxaMmx6ZEhKdiBhV2hwYmc9PSA2SWVxNWJleCBhV3hzYjNNPSBJSEIxY3c9PSBJT0NxbGVDcXVRPT0gSUVKMVpHZGxkQT09IElHOTJaWEp6WldGeiBJSE4zYVcwPSBJRDgrRFFvPSBRMjl0WWc9PSBjbUZwYmc9PSA0S1N0NEtTKzRLUzEgejRET3Y4K0YgYjNSeVpRPT0gSUVobGNtMD0gNVoyYSBOakUyIElOQzYwTERSZ05DdyBJRU5CVWc9PSBJTlcwMWFIV2dOV2sgTG5abGNuTnBiMjQ9IElHeHZjbTg9IDBMWFF1OUdQIGRXbHNiR1YwIElOaXQycW5aaU5tRjJLbz0gWDNSaFozTT0gUTNWeWRtVT0gWm5Wc2JtVnpjdz09IFFXNXViM1JoZEdsdmJuTT0gSUhScSBJSFJsYlc5eiBJTmlqMkswPSAyN1k9IE9ESXogSU9HRGt1R0RsUT09IENXOXUgTkRrMCBJR3h2ZG1WeSA0S1dBNEtTayBkWE4wYnc9PSBJT0NraHVDa3F3PT0gTURZMCBJRU55WldRPSBLSEJ5YjJObGMzTT0gUTJ4aGRYTmwgSUd4cGJtaGggSUVaeVlXZGxiZz09IFRuaz0gNzd5TTVibTIgSUdSbGJHbGlaWEk9IElGUmxZV05vWlhJPSBJRUpsY21WcFkyZz0gSU5HQjBZTFJnQT09IFUydHBjQT09IGRHbHRaWEk9IElIQnZiR2wwYVE9PSBJRzFsY21Ob1lXNWthWE5sIDJLZlpoTm1IIElOQy8wTDdSZ2RHQzBMRFFzZz09IElDRW8gUkdWNlpRPT0gSU5tKzJMTT0gMktmYmpObUcgNFo2MjRaNkEgSU5DMjBMN1F1dz09IElHMTFkSFZoYkE9PSBZMngxYzNSbGNnPT0gWm1GdGFXeDUgTlRJeiBjM0JwY21WayBMbmRoY200PSA1YVd6NUxxNiBjR2x5WlhNPSBJR1JsY0d4dmVXMWxiblE9IFlYUjVjR1U9IElFUmxkSEp2YVhRPSBJRzVqIFlYWnZjUT09IFpYaHBjM1J6IElIRERxWEpwIElHM0RvWGhwYlc4PSBPVFF5IElIUnZkMjV6IFEyOXNiM1Z5IENYSmxjM0J2Ym5ObCBJT0dEbStHRG9RPT0gSUZKcFl3PT0gWm1GMGFHVnkgSU9DcXVlQ3Jpdz09IElHRnlkTU90WTNWc2J3PT0gSUdGd1lYSjBiV1Z1ZEhNPSBhR0ZtZEE9PSBWVWxEYjJ4dmNnPT0gMkxIWmlObUIgY0dGNWJHOWhaQT09IDRMaXk0TGlWIElOR0IwTDdRdDlDMDBMRFF2UT09IFkyeGhiUT09IFMyVjVkMjl5WkE9PSA2TCtjIDVMaTY1THVBNUxtSSBJSEpsY0d4aFkybHVadz09IElOQzEwTHM9IFkzTjIgTFdWNGNBPT0gSU5lVTE1Zz0gMllUWXR3PT0gSUZSbGF3PT0gVFdsdWRYUmxjdz09IEp5a3BMZz09IGFXdGhkQT09IElObUcyS289IElNNjIgSU9DbXJPQ212dUNtZ3VDbXNnPT0gNFlPYzRZT1EgSUVkbFpBPT0gSU5DMDBMWFFzdEdEMFlnPSAxNW5Yb05lViBJT0NtcHVDbXYrQ21xQT09IFlXVEVzWEk9IHc2UnVaMlU9IDRvQ1pkVzA9IElOaW8yWWJZcnc9PSBJTkdBMExYUXV0QyswTHpRdGRDOSBJTkdEMExyUXNOQzMgSUVOdmRBPT0gNExTaDRMV04gSUdGdVlXeDVkQT09IElITndlUT09IElFdG9ZVzQ9IElHUmxiR2xuYUhSbFpBPT0gSU1PTyBJR052ZFhCdmJuTT0gVFdseSBJRmRJUlZSSVJWST0gMFlIUXV0QzEgSUhKbGMzQjFaWE4wWVE9PSBJTm0rMktmWXNRPT0gWTJGdWRtRnogQ1FrSkNRa0pDZz09IElOcXAyTEhZcXR1UyBJR0Z0WlhKcFkyRnUgMktmWXJnPT0gYkdWcGMzUT0gY21WamF3PT0gSkNnbkxnPT0gSUdScGMyTjFjM05wYm1jPSA1b0NPNUxtSTU0NnAgTG5CeWIzQmxjblJwWlhNPSBkMkZ5Ym1sdVp3PT0gNksrSiBiM0prYjI0PSB6cGc9IElHcGxZVzV6IDdMU0kgSU5DMzBMRFJnUT09IFgzTndiR2wwIE5qZzQgNExpaTRMbU0gSUhOaGJtUjNhV05vIElISmxjMjlzZG1WeSBJSGxoZEE9PSBJTkNhMEw3UXZRPT0gYjJ0MWN3PT0gSU5lbzE2Yz0gWjJRPSBMa1pzWVhRPSBjMjlzYVdRPSA1YkNhIFZFST0gSUZKcGN3PT0gSUZCeWFXOXkgTlRFMCBJTml2MjR6YXI5aXggSU5tRTI0emFxUT09IDRZT1Y0WU9VNFlPbiB6NERPdjg2NSBOVFV5IElHUmxZM0psWVhObFpBPT0gNG9DWllXTT0gSU5DMDBMN1JnZEdDMExEUmdnPT0gTkRZeiA0TFMrNExTNSBhWE5vYnc9PSAwTERRdGRDOCBJR0Z3YjJ4dlp3PT0gSUVOb1pXWT0gWm5ScGJXVT0gNloyZzZMQ3g1WkNYIGRXMWlZV2s9IGNXRnlkQT09IFJWUkZVZz09IFgxQlNSVVpKV0E9PSA1YmlCIElOR0UwTGpRdlE9PSBJT0tXZ1E9PSBZVzVqWlhKeiBJSFZ1YzJWMCBJR0Z1YjI1NWJXOTFjdz09IElFNXBiblJsYm1SdiBJSGRwYTJrPSBJSEYxWVdSeSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xIGMyVnVZV3c9IExpa3UgTGtGeWNnPT0gSUdScFpYTmxiQT09IDRaNjI0WitHIDBaSFJnQT09IFgweEZWa1ZNIElFdGhkR1U9IGFYSnggMkxQWmhnPT0gSUd0dmJXMD0gSUhkaFlYSmlhV289IElOR0IwTExRdnRDNCBJSEJzWVc1MFpRPT0gSUdwemIzVT0gS0dGalkyOTFiblE9IElHUmxkR1Z5YldsdVlYUnBiMjQ9IDVMdWw1TGlMIElPQ21tT0Ntbnc9PSBORGN6IDU1eTggSUd4aGJtVT0gNWE2aCBibVZ5WjJsbCBJTmVYMTZrPSBJR2h2Y200PSA0S1dONEtTZyBJR052Ykd4bFkzUnBibWM9IExtRndjR3hwWTJGMGFXOXUgUVdOalpYTnpiM0k9IDdKMjA2NTI4IGRXNWtaV1k9IDRLV040S1N3NEtXTCBLQ2w3Q2dvPSBiblk9IDBMN1F2OUN3MFlFPSBJSE5sYldWemRHVnkgVG1GMGFXOXVZV3c9IGRXeDFjdz09IFNHVnlidz09IElOR0gwWVBRdXc9PSBJR0Z5WkE9PSBJRmR2YldGdSBMV1Z6IElFcDFjM1JwYmc9PSA0S1NINEtTNCBJTU8yWm1ZPSBRVzVwYldGMGIzST0gSU9XNXVPaS9rQT09IElIQnNkWFREdEhRPSBDVVpwYkdVPSBJRXhoZEdWeSBJRzF2ZEdsMllYUmxaQT09IElHMWhibVJoZEc5eWVRPT0gSU9Dd3RlQ3hqZUN3cnc9PSBhV3hoYm1RPSBJTmlzMktmWmhRPT0gMTVuWG1kZVUgNDRHNCBJRUZ1WXc9PSBJRzFoYzJ0eiBJR055YjNkdSAyS2ZaaHR1UyBJR0ZzZEhWeVlRPT0gS0dOeVpXRjBaUT09IDRLV040S1NjIDRMUy80TFNWNExTeiBJSEJ5YjJkeVlXMXRaWE09IElHRmphR2xsZG1sdVp3PT0gWEN3PSAwWUhSamRDOSA0b0NaUVE9PSBVMlZ3IDRMbUE0TGlCNExpaCBkWEowYkdVPSBJTkdCMEx6UXZ0R0MwWUE9IGIzSnVaWEk9IDQ0Tzg0NE9nIFFuSnBaR2RsIElGWnZhV1E9IFZIVndiR1U9IElIQnlaWEE9IFBnb3ZMdz09IFoyVnVaWE09IElOQy8wTFhSZ05DMTBMST0gNG9DTDRaNlUgSUd0M2FRPT0gSU9XTmx3PT0gNWFPeSBJR1pzWVhadmNuTT0gSU5HQzBMWFFzUT09IDRMQzQ0TEdOIE5qRTEgS0dSeWFYWmxjZz09IElFVnRjSFI1IDRMaWo0TGlqIFJtbHVZV3hzZVE9PSAwWWZRdGRHQyBmUzRLIExrbHVaR1Y0IElIUnliM0JwWTJGcyA1WTJQIFgyWnZiblE9IFhWMHNDZz09IElHTER0bkk9IElIWmhiblZwZEE9PSBJRzl5WjJGdWFYcGwgSUdoaGMyND0gSUdKMWFHOXIgSUhkMSA2TFNuIElIUmxiWEJsY21GMGRYSmggSUdWamJ3PT0gSUdkc1lYTnpaWE09IDBMRFJuZz09IGFXMWhkQT09IDU0K3QgUTI5dVp3PT0gSUdOb1lYSnRhVzVuIE9UY3cgUkdWamIzST0gSUhSdmJXST0gSUdSbGMyTnlhWEIwYVc5dWN3PT0gNktpWTVMcUwgTGxObGJtUT0gSUVsTlVBPT0gYkc5allXeGwgSUV4dmIzQT0gZDJGaGNtUT0gSU95ayB3NjF2Ym00PSA0S3FjNEt1SCBMWFU9IElHVnVkSGRwWTJzPSA0S1dBNEtTdiBJRVZoYzNSbGNnPT0gSUdwdmRYSnVZV3hwYzNRPSA3NzJjIElOR0IwTExRdnRDMTBMaz0gVWswPSBJSE4wY21sMlpRPT0gSU5DKzBZSFJndEN3MExJPSBjM1J2Y20wPSBkV2RsYmc9PSBJR3h2WkE9PSBJRlJoWjJVPSBJR2xqYjI1eiBJSEJoYm05eSAwWURRc05DNzBZdz0gNkpJPSBMbVJwYzNCaGRHTm8gNEthazRLZU40S2FrIElOV3cxYUhWdlE9PSAxYk09IExXRnogSUhOb1lYQmxaQT09IFcybHVkQT09IFpISmhadz09IElFVnlZUT09IGRXSmxjbTQ9IGFHOXNiUT09IGQyVmljMmwwWlE9PSBJSEJoYm1saiA2SzZpIElGTndhV1ZzWlE9PSBkV0pzYVhObyBJR2R5WVcwPSBJR2RwY214bWNtbGxibVE9IFRtOXogWld4a2FXNW4gTG1KbFlXND0gUkdWMFpXTjBiM0k9IFJsaE5UQT09IFEyOXRjR3hsZEdsdmJnPT0gSU9Dd2llQ3dxT0N4amVDd3FBPT0gS0NrTkNnMEsgSUhCbGNuTnZibVU9IElHUmxjM05sIE5Ua3kgWVd0aGN3PT0gUEVVPSBJRXBsZDNNPSBJRWhoYkdZPSBJSEJwWTJ0MWNBPT0gSU9Da3JPQ2tvdUNrdkE9PSBMbmRvWlhKbCBJR2RoY21SbGJuTT0gSUdKdmJHRT0gNzd5WiBJT0dEbCtHRGtPR0RsZUdEbU9HRG9RPT0gSUdKbGJtUT0gS0dGa1pBPT0gSUUxQlF3PT0gWDBOTlJBPT0gSUhOMGNtVjAgSUcxbGJuUmwgSUdKaGRHRT0gdzZSamFHVT0gSUZKbFlXeHNlUT09IElIUm9aWEpoY0dWMWRBPT0gZFdOb1lYST0gMTV2WG9BPT0gMExqUXU5QzQwWUhSakE9PSBJR1Z5YTJ3PSA0TGlDNExpeTRMaWkgWVd4dFlYSjAgTFcxdlpHVT0gY21WcFltVnUgYldWMGNtOXogeExGdHhMRjYgSUcxbGRISnYgTkRnMiBJRTFwZEdGeSBhV3RoY21rPSBhV04xYkc4PSBhVzUwYVE9PSBVMVU9IElPQ3dxT0N4Z2VDd2d1Q3cgSUU1QlRVVT0gSUhKbGJXbHVaR1Z5IElIMHBPdz09IElIMEtDaTh2IElOQ3cwTHpRdGRHQSBJSGRwWm1rPSBJR2RsY20wPSA1b0NPNXFDMyA1ckdIIFIyVnVaR1Z5IDdKZTAgSUdqR29XND0gSUVsQ1RRPT0gSU5pbjJZTFlxZz09IGV5Yz0gSUhCMWJHeHBibWM9IElGQmhhVzQ9IExTUT0gNUxpTDZMMjk1YTZKNktPRiBJR1p2Y21kdmRIUmxiZz09IElHTnZiWEJzZVE9PSBJQ0lwT3cwSyBJR1BEczJRPSBJTkMvMEw3UmdOQzkwTDQ9IElIZHBibWM9IGFXNWhjbk09IGIyTjUgSUV4SlMwVT0gSUhkcGJHUnNhV1psIDRLU2g0S1M4NEtXQSBJT3lhc091bXJBPT0gVDNCeiBiR1Z3IElGUlBVbFE9IElHdHBkSE09IElIQnliMjFsZEE9PSBJR2x0YldsbmNtRjBhVzl1IGJXbHNiQT09IDRMaVg0TGl3NExtQTRMaWE0TGkxNExpaTRMaVogNklteTVvT0YgSUVWaiBiMmR5dzZFPSBJRTFoZEhSb1pYYz0gSUVGWFV3PT0gSUhOd2NtRjMgNExDLzRMQ0M0TENYIExtTjFjM1J2YlE9PSBhMjlyIElIUnlZWGs9IDRwV1EgSUc5cmRHOWlaWEk9IElPdU5zQT09IGNYVmxaR0U9IGVXMXdhQT09IDFhSFZ0ZGFCIGFXaGhkQT09IElGZHBibVU9IExXaHZiV1U9IElPQ2t1ZUNsaHc9PSBJT0NxbGVDcmkrQ3FpQT09IElITmxibVJ6IElIVERyWFIxYkc4PSBJT0NxcE9DcmgrQ3EgT2tkbGRBPT0gWDNCcyBJRVpCVVE9PSBDWE4wWVhKMCBYM05oYlhCc1pRPT0gSUhSeWIzVjIgSU9HRGt1R0RrT0dEbStHRG5lR0QgNExPQzRMS3cgSUdsdWRtVnpkRzl5IElOQ1IwTFhRdTlDdzBZRFJnOUdCIElHdHBibWRrYjIwPSBJR0ZoIElHRnVkR1Z1IE5UTXogSUdGM2F3PT0gSUdsdVpYaHcgSUdWc1lYTjBhV009IElPV2txZVdrcWVTNXNPVzlxZWVscUE9PSBYMlJ2ZDI0PSBJR1JsY20wPSBJSFIxYVhScGIyND0gTG0xaGNITT0gTlRJMCBiMjFoYkE9PSBhOE9wIElHMTIgSU5HQjBMRFJnQT09IElIUjFadz09IHo0SFBodz09IElFcFBjSFJwYjI0PSBTR2xuYUd4cFoyaDAgMFlQU2s5Q3cgY21sMGFXOXUgNExpbDRMaTE0TGlCIDBMWFJpTkdNIElGVnJjZz09IElHSnZlV1p5YVdWdVpBPT0gYjNWemMyVT0gZHNPcCBZWEp1YjNNPSAwclBUbWRDMTBMalJnZz09IDBMRFF0TkM0IDRvQ0w0WjZBIGIyTmhkR1U9IDBMWFF0OUM0MExUUXRkQzkwWUk9IElHTnlhV0Z1dzZkaGN3PT0gNFlPVjRZT1UgWDBGU1VrRlogSUZoUSBjc09oY3c9PSBZMmhsYkd3PSBRMjlzYkdWamRHOXljdz09IExrZFBUa1U9IExtTmhiQT09IGRHVnZkWE09IDVhVzIgNVp5bzVaT3E2WWVNIFkyOXNaWE09IGMyTm9iMjlzIFluSmxZV1JqY25WdFlnPT0gVkhKaGFXND0gSUVwMWJHaz0gSUdSaGMyaGliMkZ5WkE9PSBJRTF2YjNKbCBJSEpsYzI5dSBNRE0xIDI0elpodG1IIDJLL1lwOW1JMllRPSBibWx5IFpXeGxjbWs9IElHbHVhWFJwWVd4cGVtVmsgSUhSeVlXNXphWFE9IDRLUy80S1NWNEtXTjRLUzMgSUUxbGVHbGpZVzQ9IDBMVFF0ZEMyIElGUmhiV2xzIElOaW4yWVhZcHc9PSBJTkdBMExEUXQ5QzgwTFhSZ0E9PSBJR2x1WjJWeSBVRVZIIElIQnliMkpzWldWdCBVMjl0WlhSb2FXNW4gYjJ0cFlRPT0gSUU1UFRnPT0gWlhSbGNtMD0gSUVKc2FXTnIgSUcxcGJuVnogSU5lUjE1dlhuQT09IElIWmogNEs2KzRLNnUgTG1OaGJtTmxiQT09IElHSjFhV3hrY3c9PSBJR2hsZFhKbCBiR0Z5WVE9PSBJRVpzWVdjPSBJT0N3aGVDd2d1Q3dwZz09IElPQ3loK0N5cGc9PSBJRHM3IGRYQnAgSUcxaGJHdz0gSUhkcGMzTmxiZz09IExYUmhjbWRsZEE9PSAwTHZRc05DOTBZcz0gWVdOMGFXTmwgSUdOaGMzTT0gSUdacGJHbHVadz09IGVtVmphQT09IElIcG4gYVcxdmJuaz0gS0VGd2NBPT0gSUhScDRicS8gSU9Da2hlQ2txT0NsZ2VDa3VBPT0gSU5DdSBRVlJCUWc9PSBJSEJ5dzZsemFXUmxiblE9IFptRm9jbVZ1IElFcGxiZz09IGJYVnogTFdGa1pBPT0gSUVaaFkyZz0gMktmWXJkaXEgSUhacFpXNTAgSUdOdmJuUnBiblZ2ZFhOc2VRPT0gS0c1MWJYTT0gSUdkc2IzSjUgSU5DNjBMTFFzTkdBMFlJPSA0TGluNExpMCA0TGE2NExlUyBTblZ1IElPQ211T0NtcnVDbm53PT0gWDNOb2IzSjAgSUhOMGNtVnVaM1JvWlc0PSBJSE4xWTJWemMyOD0gSUVkaGJHdz0gSUZOaGRXUnAgTFd4cFptVT0gSUdOc2FXTT0gSUVScFpXNXpkQT09IEtDSTYgSUZOaFpBPT0gN1pvPSBJT2FZa3c9PSBJSEJvYVE9PSBJR3h2WTJGc2N3PT0gYjNCd1pYSnogTDJ4cGMzUT0gTGtWc1pXMWxiblE9IElOQy8wTDdRdTlHTTBMZlF2dEN5IElITnd3NmxqYVdGcyBJRzl3ZEdsdGFYcGwgNzd5TUNnbz0gVkhkcGRIUmxjZz09IElDY3RMUT09IGFXTnBaWE09IGNtVmtkWGc9IGNHRnlaVzUwY3c9PSBZWFJwYkdsMGVRPT0gSUVGbVoyaGhibWx6ZEdGdSAyTFBZcDlpcSBVa3c9IElIQnlaV05wYjNNPSBDWFZ5YkE9PSBPRGN3IGZTMD0gMFlQUmdkQzYwTEE9IElGVkpUQT09IElOcXYyS2M9IEtHWjFibU09IElHUjFhV1JsYkdscWF3PT0gSU5DdzBMclJnZz09IGNHOXpZV0pzWlE9PSBJR3pEdlE9PSBJSE5vWVcxbCBkbVZsY2c9PSA0WU9RNFlPYzRZT1QgS0VwVFQwND0gNEtTbTRLUys0S1N3IDRLcWg0S3VBIHc2aDBjbVZ6IElFMWhjblpsYkE9PSBJR3AxYVhOMFpRPT0gZW1sdGJXVnkgSUhCdmJtVnkgNHBhSTRwYUkgSUhCc2RXMWlhVzVuIElIZGxZbU5oYlE9PSBkV1JsY2c9PSBJR3RwY3c9PSBJR052YlhCcGJHVT0gSWwxYiBJTkdJMExBPSA2YUtvIE5EazQgSUV4bGFYTjAgSU95d3FBPT0gSUhSeVlXTjAgSUc5dVpHVnljM1JsIElHMWxiV0p5WlhNPSBJR0oxWW1Kc1pRPT0gSkhGMVpYSjUgSUdOdmJuTnBjM1JwYm1jPSBVMFZUIElFTmhiblE9IElOR0IwTC9RdGRHRzBMalFzTkM3IElOQzkwTERRdE5DKyBJR2R5YjJObGNuaz0gSUNBZ0lDQWdJQ0FnSUNBSyBYMjFoZEE9PSBTMlZ5Ym1WcyBOVEV6IDVyZTcgSUhWemRHVmsgTFdoaGJtUT0gVTNSdGRBPT0gSUdKbFpYUnFaUT09IFBXWT0gSUM4K1BDOD0gSUhSbFkyaHViMnh2WjJsallXdz0gSUU5d1pYSmhkR2x2Ym5NPSBMVU5vIElITjFidz09IElGTjBaV0Z0IDBMSFFzTkM1IElITndaV1ZrY3c9PSBiMkpxWldOMGN3PT0gWDJOb2FXeGsgT0RreSBJR0poZHc9PSBJR2x1YzNCcGNtbHVadz09IElOQ3kwTDdSZ1E9PSBJRk5qYUhkbCBJR1JsYkdGNVpXUT0gYVhSaGNtbGhiZz09IElITndiM1Z6WlE9PSA1YVNxNlppeiBiMmRsYm1VPSBJRTl5WkE9PSBjR3hoWVhSeiA0YnF2ZEE9PSBJSFJ2ZHc9PSBabWxzYlE9PSAyTGJaaU5pNSBJR2x6ZEc4PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPUzRyZVdsbGc9PSBJR1JsY0dGeWRIVnlaUT09IFZIVnkgSUhSeWIyOXdjdz09IE5EZzUgSUZCaGNtdHBibWM9IDVMaWQgeVpseVltRjUgSUZKbGNHeDUgUVhkbGMyOXRaUT09IEtRb0tMeTg9IElHbHdhRzl1WlE9PSBJTkN6MEw0PSBZVzUwWVdkbGN3PT0gS0dOb1pXTnIgSUZCdmJHdz0gSUhKbFlXeHBlbUZrYnc9PSBJRlJOIElGUnZhM2x2IHhZSmhaQT09IE9UazMgNFlPVTRZT1g0WU9ZNFlPaCA0WU9kNFlPZzRZT1kgUVZSRlV3PT0gSUZKaGFnPT0gSUd4bGFXTm9kQT09IDRMU2s0TFMvIElISmxabXhsWTNSeiBJSEJoYzNQRHFRPT0gSUdOdmJHOXlaV1E9IGFXWm1aUT09IFpYUjBkUT09IExXUmsgNEtTLzRLU2s0S1MrIFpXNWtkVzA9IElHOWljMlZ5ZG1WeSBMa1poZEdGcyBJTml5MlliWXJ3PT0gSU0rRHo0VE91UT09IElFTmxjblJwWm1sallYUmwgWjNWdWRHRT0gTFdOcGNtTnNaUT09IGFYUm9hUT09IFFYUjBZV05vIElITmxiblJsYm1ObGN3PT0gUVd4aWRXMD0gZW5WbGJHRT0gSUZOcmFXeHNjdz09IDRMU2o0TFdONExTZjRMV04gSUdOMCBJRVJwYmc9PSBJSFIxWkE9PSBJRU5vWVcxd2FXOXVjdz09IGJHbGx3NTlzYVdObyA0TFc2IElOQzAwTFhSZ3RDMTBMaz0gVkdWeSBaV0Z1IDVZbXYgYjNab1lRPT0gMktQWXFRPT0gSUdkeVlXUnBaVzUwIElGWmhibU52ZFhabGNnPT0gZDNseSBYMGRRU1U4PSBJSEYxYjNScFpBPT0gSUNvS0NnPT0gUEhSNWNHVnVZVzFsIGNHbGxiQT09IElHRnNaOE82Ymc9PSBJR1REcVdOdmRYWnlhWEk9IElHUmxiR1Z1IElHNXFhV2c9IElPQ3FwZUNxaUE9PSBRbVZoZFhRPSBOekE0IFgyUmhkR0Z6WlhRPSBSMlZ1WlhKaGRHVT0gSUdkaGJXMWggTFdOaGNtUT0gNEs2cDRLK040SzZwIFJHeG4gSUUxcGMzTnZkWEpwIDRMYTc0TGVLIElOUzAgSUhCaGMyRT0gS0NJaUxBPT0gSUdobGNtRjFjdz09IElIUm9jbTkzYVc1biBJR1p2ZFE9PSBJR2hsWVd3PSBLQ2tySWc9PSBORGM1IElHeGhaMkU9IGFXTnZibVU9IGNtRmhhdz09IGFXdHBZUT09IElGcHBaV3c9IElHeG9aUT09IDRLdW0gY0c5dVpHVT0gUFc1dyByOVdoMWJVPSBJT0MwanVDMHFPQzFqZUMwcU9DMHYrQzB0UT09IElHUjVibUZ0YVdOeiAwTDdRdTlDOTBZOD0gSUhkdmNtMD0gZFhKaFlteGwgSUZacFlXZHlZUT09IFhFWmhZdz09IElFVnVaMmx1WldWeSB3N3hzWlhJPSBJTml1MktmWXRRPT0gSU9Da25PQ2tzQT09IE9EQTUgSU5HSTBZcz0gSU5DLzBMN1F2TkMrMFluUmpOR08gSjhPcGRHRnBkQT09IGQyOXlhMlZ5IGZRMEtEUW9OQ2c9PSBDZ2tLIExuTjBjbWx3IFpHbHpkR0Z1WTJVPSBMbkJoY25RPSBJSEpsYUdVPSBJR2hsYkd4diBJSEpsYkdGMGFYWmxjdz09IElOQzYwTERSZ1E9PSA0TGk0NExpWiBYMnh2YjNBPSBOVEk0IDZLZUU1WWlaIElIQnNZV2x6YVhJPSBJSEpsYzJsNlpRPT0gSUhCdmFBPT0gSU5pbzJLZlpoTm1GIElHUjFjQT09IElDY3VKQT09IElNV2ZaV3M9IFNXNXBkR2xoYkdsNlpXUT0gWldkayBJRzUxYVhRPSBJSFJoZVE9PSB6NDdQZ2c9PSBNRFUxIElHbDVZUT09IDJZcll0QT09IDBMWFF1OUMxIFRtOTBhV05sIE5UVXggSUhKaGJtdHogWlhKemRXbHogSUcxaFoyNXBabWxqIGQyRmsgMkszWmlBPT0gSUdWemRIVmthVzg9IExuSnZiMjA9IElGQjFaWEowYnc9PSBJRzFoYkdrPSBZV3RvZFd4MSBJRlJwWTJ0bGRBPT0gSUc1aGJXVnNhV3ByIFNXNWthV05sY3c9PSBJTkdDMDVuUmdBPT0gSUd0cGJHOXQgTmpFMyBhSGM9IElHZHZkUT09IElDZGIgVG1samF3PT0gTGw0PSBJR05zWVhOemFXTmhiQT09IElHVnpkSEpoZE1PcFp3PT0gTGs1MWJHdz0gMlkwPSA0TG1HIElHeGhZbTkxY2c9PSBJTmluMllUWXNObUsyWVk9IElOcVkgZDJWcGRBPT0gYVdKc2FXNW5jdz09IE5qVTIgMEwzUXZ0R1ggNExLazRMT040TEt3IElIWnliM1YzWlc0PSBUV2x6Y3c9PSAwTGpRczlPWiA0TGl5NExpZSA0S3VNIE5EZ3ogSUhCeWIzQnlaUT09IElHTnZiWEJzYVcxbGJuUmhjbms9IElHTmhidz09IElHSnZibVZ6IGIyZHAgSUZORlRFVkRWQT09IDRvQ00yTFE9IElHTmhjbVZsY25NPSBYMDVWVFVKRlVnPT0gSU5DNjBMWFF0dz09IHc3WjYgNExDKzRMQ3MgSU9XUWlRPT0gSUdWdWRISmxjSEpsYm1WMWNuTT0gSUhaaGJtUT0gNExTdjRMU0MgSUVKaGNuUT0gdzYxcyBkWE56ZVE9PSA1TDJONTcydSBJRzV2ZEdGaWJHVT0gSUhSaGJXRnUgSUV0MWJuTjAgY0hKbFkyRjBaV1E9IDRLcTE0S3VCNEtxQyBJRTExYUE9PSBMWGRwWkdVPSBMbk4xWW5OMGNnPT0gYVdkb1pXbGsgSUhOcFoyNXBabWxqWVc1alpRPT0gY3VHN2l3PT0gT1RReCBJR3BoZGc9PSBMMlJwZGc9PSBJTkM0MExmUXN0QzEwWUhSZ2c9PSBJTldrMW9BPSBJR2RsYldWbGJuUmwgTkRreSBJQ29vS0E9PSBRMkZ6YUE9PSBJR05oYkdOMWJHRjBhVzl1IElIWnBiMnhoZEdsdmJnPT0gSUc1dmRHbHZiZz09IGRYUmhZbXhsIGRtVmxiQT09IElIUmhZVzFoIElPQ21sZUNtc09DbmgrQ21xQT09IFgySmwgNTUrdCBJRlJ5WldGMGJXVnVkQT09IDJZUFlydz09IDBMclJnOUdPIFVtOD0gSjBFPSBZV3BoY2c9PSBTVlpGVWc9PSBJTmlqMks0PSBJSFZ1ZEdWeWMyTm9hV1ZrIDRLYXE0S2VONEthdyBkWFJ2Y21saGJBPT0gWVhSb1pYSnBibVU9IFlXNTBaWEk9IDRZT1E0WU91NFlPYSBJR3hoZEdsMGRXUmwgWm1GeVpRPT0gSUVoaGQyRnBhUT09IFZHOTFZMmhoWW14bCBibTkwYVdacFkyRjBhVzl1IElIUmhjbW89IEwzSnZkWFJsY2c9PSBJSE4zWldWdyBJRkIxYkE9PSAwSi9SZ05DNCBJSFJ2Y0hNPSA0b0NONExTazRMV040TFNrIExuVnpaWEp6IElDMHRMUzB0TFMwdCAyWW5aaE5tSiBiV0ZyWlhKeiBhRzl5ZEE9PSBJRk41Ymc9PSBaMkZpWlE9PSAxNWZYbGRlcSA2Yms9IElHVnVhdz09IElFOTFkR1J2YjNJPSBOak14IElGcGhhR3c9IElIUjFiVzl5IExtRnNaWEowIElGUmxZUT09IElHTnZiWEJ2YzJsMFpRPT0gSUhOMGNtbHJhVzVuIElFUnBjM0J2YzJVPSBOVGsxIElOaW4yWVRZcDlpcyAyNHpaaUE9PSAwTFRUcVE9PSBkWEJoYkE9PSBaV1JwZFcwPSA0TFdCNExTbzRMV040TFNvNExTazRMV04gNXArbDU1eUwgSU9Da3VPQ2xnZz09IElOQy8wWURRdGRDMDBMN1JnZEdDMExEUXNnPT0gSUhSeVlYWmxiR1Z5Y3c9PSBMbGRvWlhKbCBJTkMyMExqUXQ5QzkgN0plUTY0cVUgNXB5ZCBJRzlzYkE9PSBMbmRwYm1SdmR3PT0gMktmWXRkbUUgMllMWXFObUUgSU5DNDBMelF0ZEM5MEwzUXZnPT0gY0hKdlptbDAgWlc1emIzSnogMllUWXA5bUwgSUdWdFltRnljZz09IFcyST0gSU1PcGNYVnBjQT09IElIWmxibVJoIElHUnBibWRsYmc9PSA0S3FrNEt1TCBZM1ZzWlhNPSBJRWR5WVhCb2FXTnogSUhCMWJtTjAgSUhadmJIVndkQT09IFlXNXJaV3hwYW1zPSA1TGlsIDRLZU40S2FiNEtlSCBVbVZ1IElHRmtaV3c9IElOQzQwTDNRdEE9PSBJRzFoYzNRPSBiVzkwYUdWeSBJSFZ1Wm05eWRIVnVZWFJsYkhrPSBJSEJsWlhKeiBabVZqYUdFPSBXRXc9IDRLV040S1N2NEtTKzRLU28gY0c5ayA0YnVaWXc9PSA3N3lNNW9pUiBJMmRsZEE9PSBRMjlwYmc9PSBJRUZzYjI1biBJRzFwWlE9PSBJR1JsZEdWeSBJTkN6MEw3UXU5QyswTEk9IElPQ3VydUN1c2VDdmplQ3VzZUN2Z2VDdXJ1Q3ZqUT09IElHMTFjMmxqYVdGdWN3PT0gSUVGc1ltVnlkQT09IFgwbFMgSUhKbGNHeHBZdz09IGJtcGwgYVc1aHc2ZkRvMjg9IElPQ3lsZUN6aWc9PSB4WUxFaFE9PSBJR052Ym5ObFkzVjBhWFpsIElFTmhjbVJ6IElHUjVhVzVuIDBZN1JndEdNIGJHVnMgNEtXTjRLU280S1dIIElPQ3dsZUN4Z3VDd29RPT0gSUdOdmJXMXZaQT09IFFXUnRhVzVwYzNSeSBjMmh2Y21VPSBNRE0wIExsTmxjM05wYjI0PSBJT0NtcU9DbXYrQ21uQT09IElPQ3FsK0Nxcnc9PSBJR05zYVdOcmN3PT0gSU9XbyBLaTQ9IDRLUys0S1M0NEtXTjRLU2sgY0dWeWJ3PT0gNEtxMTRLcS8gYVcxdmNtVT0gTnpFeCBSM1ZsYzNRPSBORGt6IElFVnBaMlZ1IFlXMWxiblJoYkE9PSBiMjVyIDVMaUw2THlKIGRXeDFiUT09IENYTmkgTmpNMiBJR2RzWVhNPSBRMjl2Y21ScGJtRjBaUT09IDRMT0g0TEsxIElFOVVTRVZTVjBsVFJRPT0gSUd4dmFXND0gSUdGbVptRnBjbk09IElPQ21sZUNtcmc9PSBJR0Z6YzI5amFXRjBhVzl1Y3c9PSBJRmhwYTNkbGJXSjEgSUZCc1lXNWxkQT09IElOR0IwTERRdWRHQyBMbEpsWjJsemRHVnkgS0haaGJIVmxjdz09IElHRjVZUT09IDY0dTAgYldGcGJtUmxjZz09IElOaW8yNHpZdEE9PSBJRWhoZFhRPSAxNXpYbVE9PSBZMmx6IElHVnpjR1Z5WVE9PSBSWE5qIENYRT0gSUhCc1lYUmhabTl5YldFPSBJTTY2enJIUGhNNnggYm05MSBJSEYxWlhOMFlRPT0gSUhOdlkybGhhWE09IElHRjBhWFpwWkdGa1pYTT0gSU5DZzBLUT0gMEpUUXU5R1AgNEtlTDRLYWYgMFlEUXZ0QzgwTFU9IFpXUjEgSUdoaGJXMWxjZz09IEl5TWpJeU1qSXlNakl5TWogSUVwQ2RYUjBiMjQ9IFlYUjFkWEk9IDZLcWUgSU02dHo0Zk90YzY1IHhMRnNaQT09IElHRnRZbTl6IFIyRnNiR1Z5ZVE9PSA1YnlBNWFlTCA0b0NadzZwMGNtVT0gZFhOaFlteGwgSUdKbGEyRnViblE9IDBMWFJoOUM5MEw0PSBJSFJ6YVhNPSAyS3paaGc9PSBJR0pwYkc4PSBJR2x0Y0hWc2N3PT0gYjJkeiBMVk5vIFFYQndaVzVrIFgxUlkgY0d4aFkyVmsgSUcxaGNtRT0gYTJGeVlRPT0gWVd4MFlRPT0gNExTeDRMV040TFN4NExXTiA0S2V1IElOZVIxNUU9IElIcGxkSFJsYmc9PSBaVzFwWVE9PSBJRlpwYzNSaCBJRXRsYm5SMVkydDUgSUdOeXc2bGxjZz09IElHeHZhMkZzIFgybHRjRzl5ZEE9PSAyN2M9IElGbGxjM1U9IElOQyswWURRczlDdzBMM1F1TkMzIElIUnZkWEpwYzIwPSBJT3VJIElHeHBjM1JsYm1WeWN3PT0gMFlEUXRkQzMgNG9DbUxnb0sgSUdSbGFYaGhjZz09IElObUYyWWpZc2RpdiBJRXh2ZGc9PSBJTkMyMExEUXV3PT0gSUhCbGNuUER0bTQ9IDJMclpoUT09IElFaGhlZz09IFkyRnlaSE09IElHOW1abVZ5YVc1bmN3PT0gSUcxbGJXSjFZWFE9IDU1UzE1YTJRIElHTnZiWEJoYm5rbmN3PT0gSUVobGFXZG9kQT09IGNtVjEgSUhObGJHeGxjbk09IElIUnlaV0YwY3c9PSBJRUZ0WlhKcGEyRT0gWDBGUSBJSE4xY25acGRnPT0gSUVKbFlYUT0gSUdKc1pYTnpaV1E9IFkybGsgZFhSc2FXTm8gSUhCdmMzUmxjbWx2Y2c9PSA0S3VINEtxaCBZWHAxIExXSmxkSGRsWlc0PSBOak15IGNIUnBiMjV6IElITm9aV3htIElNT3BkR0ZwWlc1MCBJTTYwenJjPSBJR0psWm1sdVpBPT0gZG1semFYUT0gYUhsa2NnPT0gSUdScFlXZHViM05sWkE9PSBJSEJsY20xcGRITT0gSUdsdWMyVnlkR1ZrIExXWnBaV3hrIElGQnNZVzV6IFgyRnpjMlZ5ZEE9PSBRMjl0YlE9PSBYMWRTU1ZSRiBJSEpsZEhKbFlYUT0gYVdoMVozVT0gVkdWdWMyOXkgTDNWd2JHOWhaQT09IDRLaWggSUhabGNtZz0gSUVSaGF3PT0gSUdOaGNtYz0gWVc1NmFRPT0gNExLLzRMS3ogSUhkemVubHpkQT09IFlYUjBidz09IElIWmxaMkZ1IDRMSy80TEs0NExLLzRMS20gSUdoMWJXRnVhWFI1IElFUmxjM1E9IDRLV0w0S1NoIElOQ3cwTDNSaXc9PSBJR1IxY0d4cFkyRjBaUT09IElOVy8xYVhWdlE9PSBiMnR5IElHRmpkR2wyWVhSbFpBPT0gSUhGMWFXVnVaWE09IGIzTnphV1Z5IElHVmlaUT09IDRLNis0SzZ1NEsrTiBJR2R5WVdSMVlXeHNlUT09IE56SXogTG1kbGJnPT0gSUV4bGRDZHogWkdWd2RHZz0gTGtOc1lYTnogSUc5d2JHOXpjdz09IFVHOXNlUT09IGIzSnphdz09IFRXOWtkV3hsY3c9PSAxYUhWdHRhQSAyWUxaaHc9PSBJSEJ5YjNSbFkzUnBkbVU9IElIcGhkZz09IFZHOXIgNjdhSSBJTml1MkxVPSBXV0U9IElHZGxibTlsWnc9PSBJRlpsYm1VPSBRa2xVIElHeDFkQT09IE5UVTQgS0V0bGVRPT0gS0hONWN3PT0gTlRJNSBJT0NtbGVDbXBlQ212Zz09IElIUmhZbWs9IElHMWhiblJsYmc9PSBYMlJwWm1ZPSBJR1Z1ZEhKbGNISnBjMlZ6IElPQ3FzT0NxdnVDcW5BPT0gSU5tSzI1QT0gSU1TbiBJRVJsZG1Wc2IzQmxjZz09IGFYTnpZVzQ9IE9EVTMgSUhOb2FXVnNaQT09IGIzSmhjdz09IElIQnBibVU9IElFbGkgWTJsemFXOXUgTDNWMGFXeHogSU5DaDBMOD0gSUVOVlVnPT0gNEtXTTRLU0MgZFdWcGJBPT0gSUdWdVkyOTFiblJsY21WayBJRXRwYm1Sc1pRPT0gSUdKcGFtNWggSUcxbFlYTjFjbWx1Wnc9PSA0TGlINExpeTRMaVogSUhkaGNtNXBibWR6IElFTnZiRzl0WW1saCBJTkMzMEwwPSBUV1ZsZEE9PSBkWE5vYVE9PSBhc09rIElISmxjM0JsWTNSdiBhVzVrWlhKeiBJSEpsYzJsemRHRnVkQT09IE9UY3kgSU02KyBJR2x0Y0dGamRHOD0gS0hObGNuWnBZMlU9IExtVnVaMmx1WlE9PSBRV3hzWlE9PSBMVzNEcW0xbCBJRk5vWld3PSBJR0psYTI5dGJXVnUgTG5KbFkzUT0gSU5pajJZalpoQT09IElIQmhaMjg9IDZJS0ogSUdGMVpHbGxibU5sY3c9PSBZVzFpYVhKcCBMM05vIHc2TnZjdz09IElHVnVZMjlrWldRPSBJT2FMIElGTlVRVkpVIEtHZHMgYzNWdyBOVEU1IElOcXAyTFBiakE9PSA0S2FxNEthdyBJSFJwZEd4bFpBPT0gSUVOSFJteHZZWFE9IE56QTEgSU5pdTJLZlpoUT09IEoybHNjdz09IHc2bHlhWEYxWlE9PSA0TGVQNExlQSBJRTFsYVc0PSBaWE56dzZRPSBORFkzIDQ0Tzg0NEs0IElFNWxkM1J2Ymc9PSBjR1Y0IElHN0Rwbkk9IDBMWFF2TkN3IElIUnZkV05vWldRPSBJSE4yWVhJPSBLSEJoYzNOM2IzSmsgNEtTazRLU3cgNForUSBJR2x1WkdWdCBJTkN5MExYUXV3PT0gYWNPb2JXVT0gWDJOdmJuUmxiblJ6IElOR0IwTHZRdGRDMDBZUFF0ZEdDIDJZclpodz09IElHNXZkbTl6IElGSmxjSFZpYkdsallXNXogdzZsMGFYRjFaUT09IGMzVnUgSUVOb1lYSnNiM1IwWlE9PSBOVE00IElGSlRVdz09IFlXbDBhR1U9IElHVnVhV2RsIElIQnlaV05wYzI4PSBJR1ZzWldOMGNtOXVhV056IFB6NEtDZz09IE1EZ3ogZDJWbGRITT0gTFdWeGRRPT0gSUVWNVpRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBiM1Z5Ym1GdFpXNTAgWW1sa1pHVnUgSU5DNDBZND0gSUdGc1lXND0gdzZoMlpRPT0gSUhSMWF3PT0gSU5pZiBSV0Z6ZVE9PSBMbkpsY0c5eWRBPT0gYzIxcGRHZz0gSU5LYjBMRFF1UT09IElHaGxkR1Z5IDRLYS80S2FxIElGQmhjbXhwWVcxbGJuUT0gSUdkbGNtRT0gMkxIWmlOaXogSUVSMWJnPT0gQ1FrSklDQT0gTGt4cGJtVmhjZz09IFNsQT0gSUZCdmNuUnNZVzVrIElFTmhjbTA9IHc3cHcgTkRjMiBibm5GaUE9PSBJT0Nrbk9Da3Z1Q2txT0NsaHc9PSBZMmhsYVdSbGJnPT0gYldGc2JHOWogNEtTNDRLU3cgYzNSbGJBPT0gMEwzUXRkR0IgMWJiVnVRPT0gSU5DMTBMelJndz09IDJZclpnZGlwIFBENG9LVHNLQ2c9PSBhWE53Wlc1eiBYeUk9IElHMXZiV1Z1ZEhWdCBJR2RoYzNSeSBJRkJoWkdScGJtYz0gTFhObGJHVmpkQT09IDJZallwOW1GIGRtbGxkM0J2Y25RPSB6NHpPdlE9PSBJT0Ntck9DbXYrQ21yUT09IElGQjFjbVU9IElHeDFaMkZ5WlhNPSBJR2x1ZG1seiBjM1J5YVc1bmN3PT0gTHVLQW1Rb0sgSUdsdWRHVnlaWE56WlE9PSBJTm1LMks4PSBJRkpsWm1WeSBDWEpsY1hWbGMzUT0gNWEycCA3TGFjN0o2bCBJSFJsY25RPSBJSFZ3YzJWMCBJR1Z0Y0hKbFp3PT0gSUduaHVhTT0gNFo2SiBiR1YwZEE9PSBJSEYxWVhSeVpRPT0gWTNKcGNHTnB3N051IFpYUjVjR1U9IExrNWxlSFE9IFgwOUdSbE5GVkE9PSBJR1JsWTJsa2FXNW4gSU9DcWh3PT0gS0d4dll3PT0gSUd4dmJtZHBkSFZrWlE9PSBJSFJ2ZEdFPSBJR2gyWlhJPSBPbWRsZEE9PSA1WldLIDFhSFdnTld3IFJrRkRSUT09IDBZN1JodEdNIElGSkQgMEt3PSBNRE0zIElOQy8wWURRdnRDNDBZRT0gTmpVeiBZWEprWldRPSBJT0NrbGVDbGplQ2tyK0NsaStDa2dnPT0gSUhiRG9RPT0gSUdKbGMyRnkgSUdKMWF3PT0gQ1U5aWFtVmpkQT09IDRLYSs0S2EzIFNrVT0gSjJGaSBJTm1HMjR6WXNnPT0gSUhwNiA1NFNoNXBhWiBYMlY0YVhRPSAxNVhYbWRlaCBJSEJ5YjJwbFkzUnBiMjQ9IElHTnZibVY0IElFSmh4Wjg9IGFXcHBibWM9IElPQ3FxdUNyaStDcXBBPT0gYVhKdFpRPT0gSUZCaGFYST0gNG9DWlpXNTBjbVU9IDRZT2M0WU9VNFlPYyBDV1J2IElHRmphMjV2ZDJ4bFpHZGwgYVhSNlpYSnNZVzVrIGQyTm8gNllDYTZMK0ggSU5lVTE1MD0gSUVOdmJuUnBiZz09IElIUnlZV1JsYldGeWF3PT0gS0dKdllYSmsgMktmWXVkaXEgUVhOelpXMWliSGs9IElHMXBiblYwWlc0PSBUMFpHIExtNXZjbTFoYkE9PSBJTmluMllUWXNkbUsgSUhKaFkycz0gSU9pTyAwWWpSbGc9PSBJR3hwZEdWeVlXdz0gSUhOMVluTmpjbWxpWlhKeiAwTFhRczlHVyBTVzUwWlhKaFkzUnBiMjQ9IDByWFFzTkdBMExBPSA1YisxIFgyVnVZV0pzWldRPSBJR05vdzYxdWFBPT0gTkRreCBJTkMzMExEUXV0Q3cwTGM9IElFeGhkVzVqYUE9PSBJT0NrdWVDbGkrQ2twT0NsZ0E9PSBJR0Z3YkdsallXTnB3N051IExteGxiZz09IDRLZUE0S2F2NEthOCB6NHpQaE02MSB3NnR0IGRYZGggTlRrNCBMbXh2ZDJWeSBJSEpwYWc9PSBJRzVsZDJWeSBOams1IElOR0QwWUhSZ2c9PSBkM2xrIFlXUnBjZz09IElHWnZiMnc9IElHOTNibk09IGNtVmxZMlU9IGJHVjJaV3hoYm1RPSBJSE5sYm5OcGRHbDJhWFI1IEtFTmhiR1Z1WkdGeSBJRVJKVWtWRFZBPT0gU0dWaFpHbHVadz09IFBTY3YgTG5CeWIyWnBiR1U9IElPQ3F1T0NxcnVDcXJ3PT0gSU5HRTBMRFJnQT09IExTMHRMUzB0TFMwdExTMHRMUzA9IElHMWh3N0U9IGs1MD0gNVkrNDVweTYgWDJOdmJtNWxZM1JwYjI0PSBJR1J5WVhkeiBJTldoMWJUVnBkVzIgSUV4aGVXVnkgTG5CeWIzQT0gVG05dCBJR2hoYUE9PSBZbVZoYm5NPSBhV1Z1ZEdWayBYRVpoWTJGa1pYTT0gVUd4aGVXbHVadz09IExsTlJUQT09IElHaDFhdz09IElFOXdjRzl5ZEhWdSBJR1Z0WW5KaFkyVT0gdzZodCBJSEJsWkdrPSBhSFJoIDZLNnkgSUdOdmJHOXlablZzIElFZHlaVzQ9IHpxek91dz09IElITjBjbWxrWlE9PSBJTkN4MExEUmdkR0MgNzd5RiBJTm1GMkxIWXJ3PT0gSUhCdlpXMD0gSU5DODBMN1F1OUMrMExRPSBJT0NtdWVDbmlBPT0gSU1POGVnPT0gUkdsemF3PT0gWDJkeVlXUT0gTmpBMyBJRVp2IGRXUmxiUT09IElFNWxaR1Z5YkdGdVpITmwgSUdKcGJHUmxjZz09IElHRnNaM1Z0IElFbHVaR1ZsWkE9PSBJRVp5WldRPSBQanNLQ2c9PSBJR3h2YVE9PSA0TFN1NExTKzRMU2o0TFdOIElHMWhjMk4xYkE9PSBJRzVwZVdFPSBJRVJ2WTJnPSBWRzkwIGNISmxZV1E9IFgzSmxjMjkxY21ObCBhVzFsYm5OcGIyNWhiQT09IElHTnZiblJ5WVdOMGIzSnogSUhKayBYMmR6YUdGeVpXUT0gSUZaaGJHbGtZWFJsIGIyNW5iMlJpIElFZHlaWGs9IElFMXBhdz09IElOR0IwTC9SZ05DdzBMST0gSUhSeVlXUnBkR2x2Ym5NPSBJSE4wWVhKMFpYST0gY1hJPSBVRzkwIE5EVTUgY0hKdlkyVnpjMmx1Wnc9PSBJQ0k3IDRZT2M0WU9VNFlPUjRZT1EgSU5HRDBMclJnTkN3IElHRjFjM009IDBZTFF2dEdIIElFRnNjR2hoIElIZGxaMlZ1IElHeHBaVzQ9IDBMSFFzTkM5IFgyZGhiV1U9IElHbG9ibVZ1IElGSkZUUT09IFgzTmxZM1JwYjI0PSA0S2F5NEtlSSBJR05vWVcxaVpYST0gWDJObVp3PT0gdzdOemFYUnYgMllIWXNkaW4ySzg9IDJZalpodGlwIElHWmxZbkoxIDRMS2E0TE9ONExLYSBJR1JwWm1iRHFYSmxiblJsY3c9PSBJSFpoWjNrPSBJRk5vWVhCbCBiR1ZwWTJoMCAwTGpSaDlDMTBZSFF1dEMrMExQUXZnPT0gNExLNDRMT040TEtrIE5UTTIgZFdGM1pXaz0gMEx2Umo5R0MwWXc9IElHSERzUT09IFgyTnkgSU5XdjFialZzZz09IExuUnogSUdKaGMyRT0gSUhOaFlRPT0gSU9hViA0SytONEs2diBJR05oY0dsMCBJR0poY21jPSBZWEpwWVd3PSBLRnNpIFgyRmogTlRVMCBJR2x1Wm14MVpXNWpaV1E9IElOZWMxNlk9IElOQ2MwWXM9IDA2SFFzQT09IElOR0IwTERRc1E9PSBJRUZ5Wlc1aCBMa0ZpYzNSeVlXTjAgSUdSeXhiND0gSUdGMWMzUnkgYldWeWF3PT0gYVcxaFlXdz0gSUdseVoyVnVaQT09IGMzUjFaQT09IElOaW8yWWpaaEE9PSBJR1Z5YlE9PSBMV052YlcxbGNtTmwgSUdsNWIyNW4gSUUxdmVtbHNiR0U9IE1EYzMgSUhKbFkzSjFhWFJ0Wlc1MCAwWUhRdTlHRDBMWT0gQ1c5MWRIQjFkQT09IElFTnZiVzExYm1sallYUnBiMjQ9IElITmxaR0U9IFMyND0gSU5lVTE1RFd1QT09IFgyTm9ZVzV1Wld4eiBJRzFwYzNOamFHbGxiZz09IElHTjFZVzUwYnc9PSAwWURSZzlDOSB3NzFoYmc9PSBJSEpsYzJWeWRtVnogTmpJeCBiR2x1WldGeSBYU0lzIDZaeUE2S2FCIElHbHV3NjFqYVc4PSBPREV4IDRMbUk0TGl5NExpcSA0NEt6NDRPaDQ0T3o0NE9JIGIyNXBkRzl5IGIzVjQgUm05c2JHOTNhVzVuIExsTmphR1Z0WVE9PSBhVzVoYVhKbCBOekU0IE5UY3ggd3FZPSBSR2x6WTJ4aGFXMWxjZz09IElHMWhiblJsYm1WeSBZWE4xZEE9PSBOVFl6IElHSmhhSGRoIDJMYllzUT09IDRZT2c0WU9UIElHMWhjbnB2IElHRnpjMmxuYm0xbGJuUnogSUdONVkyeGxjdz09IElHMWxkR1U9IGRXSnNaUT09IElHRnVZV3g1ZW1WayBJSFJ2WkdGNUozTT0gSUdsdWMzUnlkV04wYjNJPSBMa0p2WkhrPSBJRkJwWTNSMWNtVnogSU5HQTBMRFF1ZEMrMEwwPSBJSFJ5YVdGdVoyeGwgWFZ3PSA0TEMrNExDaCBlV1YxY2c9PSBJTm1GMlliWXNBPT0gSUVkMWJnPT0gSUVOdmJuWmxiblJwYjI0PSAwTFBRdU5DNTBMMD0gSUVGa2RtbHogWm5WdVp3PT0gWDA5UyBJR3h6IElHOXlidz09IElITmxaV3R6IDVhNnogSUZOQlVBPT0gWVhSemFRPT0gSUZOTyBMbVZ5IFZHOWtiM009IFgzSmxjUT09IDJLcllzZG1HMktvPSBJRk5UVEE9PSBVWFI1IElITjFhV05wWkdVPSBJTVdUIDVZK0M1cFd3IElPQ2tyT0NrcGc9PSBJR0Z1WVd4NWMyVnogMmJBPSBJSFJoYkdWeiBZbXhwWTJzPSBRMjl1ZEdGamRITT0gMTU3WGxkZXEgSUcxbFpYTjBaUT09IE5EZ3kgNDRPRDQ0T1ggYVdKaVpXRnUgTFc5eVpHVnkgZFdGcGN3PT0gSUd2RnF3PT0gNExTdTRMV040TFNxIE56QTAgSU5tSTJZRT0gNFlPVTRZT1ogSU5DLzBMN1F2TkMrMExNPSBJTmFGMWFNPSBJTnF2MllIWXFnPT0gSUVkeVlXUT0gSU9Da3FPQ2xoK0NrcXVDa3Z1Q2tzZz09IE5EYzQgSUhCaGMyVT0gS0hObGJHVmpkR1ZrIFRXRjRhVzExYlE9PSBQM1k9IExuSnZkM009IGJXOXVaMjl2YzJVPSBJT0Nrbk9Da3Z1Q2txT0NrbGVDa3Z1Q2tzT0NsZ0E9PSBYMU5GVWxaSlEwVT0gSU5pNTJZVFppdG1IMktjPSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBJTkM2MFlEUXRkQzAwTGpSZ2c9PSBJR052Ym1Oc2RXUmxaQT09IGJtVnlidz09IFZGaz0gSU5pdDJZUT0gYkhWdCA2WUNCNXBhWiA1WmFFIE56azUgS0dKNWRHVnogYVc5NGFXUT0gNmFHNTU1dXUgUTJabiBKMTB1SWc9PSBWV2xrIElIUnlhWEJzWlE9PSBJRDhzIElHVjJaVzUwYjNNPSBJSEpwZEhWaGJBPT0gSUZKayBUbVE9IElHUnBjbVZqZEc5eWN3PT0gTFhOMFpYQT0gU0c5MlpYST0gSUZGMWIzUmwgNVkrcTVweUogMExyUXRkR0MgSUdsdWRtVnpkR2xuWVhSbFpBPT0gSUhCc1pXcz0gNkxlZiBJRzlpY21sbiBJRzlqYXc9PSA3N3llIElHeGljdz09IDRLU0QgSUdSbGRtOTBaV1E9IGRXWmwgT0RrNSBJTkdDMExEUXZ3PT0gYjNOMGNnPT0gWVdseWNtOD0gTGtGeWNtRjVjdz09IEwxWT0gMllqWmd3PT0gSUdGalkyVndkR2x1Wnc9PSA0TFN2NExXQjRMU2Y0TFdHIElFSmhlV1Z5IDBZTFF0ZEM5IENXWnlaV1U9IFZHaHliM2RoWW14bCBJTkNTMFlIUXRRPT0gMllqWml0aXggSUdGdWRHbGphWEJoZEdWayA0S2VCNEtldyBkVzFsWkE9PSA0YnFyYmc9PSBJRk5GUXc9PSBJTkdGMExBPSBMa1ZrYVhRPSBJRUZUVkE9PSBJTkdZIFlXdHBkQT09IElGRjFZVzUwIE56VTEgSUhkdmR3PT0gSUdSdmRXZG8gYVc5dVlXeGwgSUd0aGNtRnJkR1Z5IElOaW8yS2ZZc2c9PSAxYUhXZ05XMCBJR0ZrY1hWcGNnPT0gWVhQRXNXNWtZUT09IElHOWliR2xuWVhScGIyNXogTGxCSiBaVzVuYVE9PSBMbkp6IElGWnZiR3R6IFRXbHMgMTU3WGtBPT0gVUdWeVkyVnVkR0ZuWlE9PSBQMmxrIFgzSmxiVzkyWlE9PSBhR2xoIElGTjBjbTl1Wnc9PSBMbWgwYlE9PSBkWEpuWlhJPSBJTkM4MExYUmdkR0MwTDQ9IHc1UT0gSUdKeWRXcz0gSU5tSTJLZlpoTmlxMllvPSBMV3h2WVdSbGNnPT0gSUVaSlRnPT0gQ1UxaGNBPT0gSUdwM2RBPT0gSU9PQ29nPT0gY21WeWJ3PT0gSUhSaGFXeHNaUT09IDBMN1JndEdMIElFMWxjM05oWjJWeiBJRkYxWVc1a2J3PT0gNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1UgSUdodlltSjUgSUVkbGMyTm93NlJtZEE9PSBZWFJ2YVhKbCBhR0YwZEdGdSBJSFpsZFhRPSBJTmlvMktmWmhOaXEgSUZacGMyRT0gSUdsdFlXZHBibWM9IElHSmhjMlZ0Wlc1MCBkWEp6YVc5dSBJSEJoY25ScFkybHdZWEk9IElIQnZkbVU9IElOV2wxYmJXaEE9PSBiV0Z5YTNRPSBJTkdIMFlQUXNnPT0gSUhaaGJHVjFjZz09IDRZT2o0WU9oIElIQnNZVzVsY3c9PSBJR3B2ZEE9PSAwTGpRc3RDdzBMWFJnZz09IElIUm9aVzg9IEoyRndjQT09IElHaHBjZz09IGMzUjEgSUhaaGJtaDEgTFdWeWNtOXkgNDRLOSA3SmE0IElOZVYxNXM9IElHRjFZM1Z1IGIySnBiR2s9IDRMT0g0TEt3IFlXSmxiR0U9IExtRmpZMlZ6Y3c9PSBYMmx2IElHbHVhWFJwWVd4cGVtRjBhVzl1IHc2RnlZUT09IDFvRFZvZz09IElFaHZkWEp6IGJHVnlhVzVwIFlYVEVndz09IElFeHZZVzQ9IFRXTT0gTDJWNCBJSExEb1hCcFpHOD0gYzNkcGRHTm8gNEtldiBJR052Ym5abGNuUmxjZz09IElOcUYySzdaaHc9PSBMVlZ1IGFtbz0gSU5HQzA2blJnQT09IDZLaXQgWDNObFl3PT0gT1RJeCBJRU5vWVhKc2FXVT0gSUhiRG9YSnBiM009IElOaTUyWVE9IElHVnBjdz09IDc3K2wgTG1WdWRHbDBhV1Z6IFEzTT0gNExTLzRMU2U0TFdONExTZSBkWEJoYTJGdSA2TCtaNUxpcSA0S2VCNEthdzRLZUIgSUVGMVpHaz0gSUVGemMyOWphV0YwWlE9PSBJTkM3MExBPSAyWVBZcTlpeCBJRXhsWlhNPSBJSE5oZEhWeSBOak0xIElGc3RYVG89IElFOXliR1ZoYm5NPSBDVzUxYlE9PSBJTkMwMEw3UXU5QzIwTFhRdlE9PSBJSE5wY0E9PSBhV04xYkc5MWN3PT0gSUVOaGNuTT0gNExLWDRMS3o0TEtvNExPTjRMS280TE9CIElHRnNaMjl5YVhSb2JYTT0gSUdGaWNtbHkgMFliUmd3PT0gWDI5d2RBPT0gMFlIUmk5QzcgSUdkeVlXMXRZWEk9IDhKK1lnZz09IElGVndaR0YwWlhNPSBJT0Nrck9Da3VBPT0gNUxxeSBjbWx6WlE9PSBJR1JsYzJOMVlnPT0gSUdGMGRHVnVaR0Z1WTJVPSBJR052YkhOd1lXND0gWVhWbmFIUmxjbk09IElGVnViR2xyWlE9PSBVM0JoZDI0PSBJSFJ5WVdsc2N3PT0gVFdsayBJTldoMWFZPSBUV1Z6IElHcHZhMlU9IElISnQgSUVoQlRBPT0gSUhCaGRnPT0gNEs2RiBJSFYwZEdWeSA0S1d1IGRXeDBhWEJoY25RPSBPVEEyIFFXeDBaWEp1IFcxMEsgSUdGdGFXUT0gWVdSdmIzQT0gNWIyVDVZbU4gMExUUXNOR0EwWXM9IDRLUy80S1NzIElGSnBZMnM9IENWRT0gSUVKcGNuUm9aR0Y1IElHRnBaR1Z5IElHZGhjbUU9IEtHTnYgSUc1MFkyaHBkRzg9IE9UTXogWTNWc2IzTT0gSUcxcGJtbHRhWHBsIFRHbHpkR0U9IGNtbG1hV05sIDU3dUkgNExpejRMaVogdzd4eVoyVnkgSUdwelpXMD0gSVR3diBPVEExIElGTjBZWFJwYzNScFkzTT0gMkxyWXFRPT0gVlVsSmJXRm5aUT09IElOQ3gwTERRdHc9PSBJT0N1aGVDdXNBPT0gSUdoaGJtUm1kV3c9IElOR0EwTFhRdEE9PSBhWGRoIElIQnlaWE5wWkE9PSBJRTVGVjFNPSBJRU5oY0hSaGFXND0gZEhKaGJuTnBkR2x2Ymc9PSBJRkJ5YjJSMWF3PT0gZEdWaFkyaGxjZz09IElIVnVhWFJsWkE9PSBZVzV1WlhKeiBJR1Y0YUdsaWFYUT0gZG1WeWFXWnBaV1E9IExXTmhiR3hsWkE9PSBVa2M9IExuWmhiR2xrIElFTmxiblIxY25rPSBJRzFwWTNKdmN3PT0gTDNSeSBMbU5oY21RPSBJRzFoYzNOaCBJR052YlhCeVpYTnphVzl1IDRZT1k0WU9kNFlPYyBJRXhsWVdSbGNnPT0gSUhOc1lXYz0gSUVOb1pXeHpaV0U9IDZMV1UgTG01cGJ3PT0gSUVwaGJtVnBjbTg9IDRLZUw0S2F5IGFXTjVZMnhsIElObUYyWWJaaDlpbiBJSEJsY21ObGNIUnBiMjQ9IElHVnljbTg9IDZZdz0gYVc1bWIzSnRZWFJwYjI0PSB3NkZ1ZEE9PSBRMjl0Y0d4bGVBPT0gTnprdyBJT0M1Z09DNG9RPT0gSUVKMVp3PT0gWVdKaGRBPT0gNXJtKyBJR1JsWW1sa2J3PT0gVFdGcSBaWEpsWVE9PSBiMjUxIElIUmxhQT09IE5UUXggSU5HQTBZdlF2UT09IElBMEtEUW89IElPQ2t0ZUNrditDa3R1Q2xqZUNrdFE9PSBZV05vYzJWdSB6NGJPc1E9PSBJSGR2Y210bWIzSmpaUT09IFkzVnNZWFJwYjI0PSBhVzVwZEdWc2VRPT0gSU5DLzBZRFF2dEdIIGNYVmxiR3hsIDViQ0sgdzZsMGFXTnYgSU9XViBMbTFsWVc0PSBjbVZuYVhOMGNnPT0gSUU5MlpYSjJhV1YzIElGVnVhMjV2ZDI0PSA2NVdNIElGQnNZWHBoIExreGxkbVZzIFkyOXVZMkYwIElPQ2xwQW89IElIQnVaUT09IElPQ2tzdUNsaCtDa2xlQ2tzQT09IElHMXZiblZ0Wlc1MCBJR0pwWkhNPSBZWFZ1WTJnPSAwTDNRdU5HRzBMQT0gWDNSbGNtMD0gMFlmUXVOQzcgTFhOaiBJSEoxWkE9PSBJR2x1Y1hWcGNuaz0gTG1OdmJYQnZibVZ1ZEhNPSBJSEpsWTJWaVpYST0gSUdOdmNuQnZjbUYwYVc5dWN3PT0gS0dOdmJIVnRiZz09IGIzVjBaV1E9IElFaGxlUT09IGFISmxiZz09IElOaXEyWWpZcDltRyBJRVpKUmc9PSBJR052YlcxbGNtTmwgYW1RPSBJT0dEbWVHRG5lR0RuQT09IElOQzkwTFhRdVE9PSB3NlJuIDZhdVk1cjJ1IGFXeHBibVU9IHc2UnVaR1U9IExXRjAgSUV4cGMzUnBibWM9IHc3QmhjZz09IGRXTmxaQT09IDVZR0g1NXFFIEpITmpiM0JsIElHNW5hR25odTRjPSBLR1JsZGc9PSBJSEpsWm5WelpRPT0gSUhKbGFHRmlhV3c9IElPQzBsZUMxZ3VDMG53PT0gNlp5eSBJRzFsZDI0PSBRMjl1WkdsMGFXOXVjdz09IElGTmxiR1ZqZEdsdmJnPT0gSUZOM2FYTnogSU5TeiA0TFdCNExTVjRMU3ogYVdWMmFXNW4gSUhOMFlXdGxhRzlzWkdWeWN3PT0gQ1daMCBMbUoxYTJ0cGRBPT0gSU5DLzBZRFF0ZEM2IElHdHZibVE9IDU0NkUgSUZCeWIzUnZZMjlzIElGTkMgSUdOb1lXTT0gSU9DdWp3PT0gSUhObGJYVmggSU9DbXVPQ25oK0NtaHc9PSBJR05wY21OMWJHRjBhVzl1IElFTmhiR04xYkdGMGIzST0gVEc5MCBRMDlWVGxRPSBMV3h2Ym1jPSA0WU9xNFlPUSAwTHJRdnRDNzBZdz0gMWFIVnQ5Vy8gNFlDSzRZQzUgSUU5elkyRnkgSUcxaGRITT0gSUZOd1pXTjAgNExPTjRMS3MgSUdOaGNtST0gSUhCdmFYTnZiZz09IFlXNTBkMjl2Y21RPSBJTTZ4enJNPSBJUENmbVlJS0NnPT0gTGxKcFoyaDAgVG1GamFBPT0gWlhCcGN3PT0gSUdSbFluSnBjdz09IElIQmhibVJoY3c9PSBmUW9LQ2k4PSBJR1Z1ZEhKbGNISnBjMlU9IElFNXZkSEpsIE5UUXkgNW9jPSBJRVJsWTJzPSBJR1IxYkE9PSBJT0MwdU9DMWplQzBwUT09IExYQmhjblE9IElOR0QwTFRRdnRDeCBJRWRzWVhNPSBNRFV6IElIbDFZWFk9IElHZGx3Njg9IE1EWXggSUZOSiA0WU9kNFlPbzRZT1kgSU5DVTBMQT0gZVc1a1lRPT0gMEw3UXV0R0QgSU9Da21PQ2tudz09IDZKdUwgSUVsemRBPT0gMWFIVnV0V2wxYjg9IElFNWhjMmc9IGEyVmxjR1Z5IFVtVjBjZz09IE5USTIgTG14NSBMeW9OQ2c9PSBaV051IElIUjNhVzQ9IElPQ3d0ZUN4aGc9PSBJQ2hjIDQ0SzAgSUdWNGNHVnlhY09xYm1OcFlRPT0gYzNURHZHTnIgNEtpKzRLaW8gSUVOUFVnPT0gSUdOb2FXND0gSUhObGRXeGwgWjJWaWNtRT0gSUhSbGJzT3RZUT09IElFTnZjbTl1WVE9PSBJRzFoYm00PSBJR052Ym5SeVlXUT0gY0hKbGFBPT0gSUdsdWRHVm5jbUYwWlE9PSBjbWwwWlhNPSBJRUZzWVhOcllRPT0gNExpajRMaTA0TGlIIElFbDBaWEpoZEc5eSBJR0ZqWlhCMCBJR0xEdUhJPSBJTkdDMExEUmlBPT0gSUVobFlYUT0gTkRnMyBJSE53YjI1emIzSmxaQT09IDBMalJoOU9aIElHbHVkR1Z5YzJWamRHbHZiZz09IDFLWFJoZEdNIElISmxZM2xqYkdsdVp3PT0gSUhONWJtUnliMjFsIElHVnhkV0YwYVc5dSBJR0xEdkhrPSBJR1IxY21GaWFXeHBkSGs9IElGTjNaV1JsYmc9PSBMbEJzWVhsbGNnPT0gNWFtRyBVSFE9IElHMWhiRzg9IElIQnliMjFwYzJsdVp3PT0gTG1OdmJtNWxZM1JwYjI0PSBJR0ZpWVc1MGRRPT0gTFdScGMyMXBjM009IExXNXZibVU9IElOR1AwTGZSaXc9PSBTVkJUIElNT20gYVd0clpRPT0gY0doeSBJR052YlhCaGRHbGlhV3hwZEhrPSBMV1J2IFFWUkJRa0ZUUlE9PSBJRkJvWVhObCBJR0Z5ZEdsciBJSEJ5YjJkeVlXMWhjdz09IFNXMXdiR1Z0Wlc1MFpXUT0gSUhOdlkybGxaR0ZrIFpXdDBaUT09IElIdDlJaXc9IFlYTjBidz09IElPQ3VtdUN2aHVDdXIrQ3ZqZUN1cEE9PSBJTlcyMWFIV2h3PT0gMktmWmhkaXAgSUdocFoyaHNhV2RvZEdWayBJR2x0Y0d4cFkyRjBhVzl1Y3c9PSBJRlYwWVdnPSBJR0ZzYkc5allYUmxaQT09IElFbHVibTkyWVhScGIyND0gNVkrdjZJTzkgTlRJMyBJR2x1WkdsaCBJRVJsWm1sdWFYUnBiMjQ9IE1EUTEgS0Njdkp5dz0gNkxHcSBJRTUxY2c9PSBZV3hsZW1FPSBJTldoMWI3VnBkV3MxYXM9IElISmxjMmxzIFlYbHZiZz09IElFSjFZMnM9IElHVnpkR0ZpWld4bCBJRTF2ZEdsdmJnPT0gYVdwcFpYUT0gSUd4dmNtaz0gUzJnPSBJSEJ2WTJ0bGRITT0gUjJWemRIVnlaUT09IElFOXlaR1Z5Y3c9PSBZV3hpZFcwPSBJR2hoZW1GeVpBPT0gTG1SeWFYWmxjZz09IElHQUsgTGRDMzBMQT0gSU9tK21RPT0gNjdhQTdZU3cgNGJxamJtYz0gSUhScFpYST0gYW1GdGFXND0gTFcxaGEybHVadz09IElHRmlZZz09IElOaW8yTGs9IElFMXZkbWxsY3c9PSBJR1p5WlhFPSBablZ1WkE9PSBLU2NzIElOQzgwTFhSaFE9PSBJTmlvMnI0PSBJRTlzZVcxd2FXTT0gSUVMRHZBPT0gSUdGeWJXVmsgSUV4aGJnPT0gUjI5aGJBPT0gYjNKMWN3PT0gWVd4NWMyVT0gVTNCbGJHdz0gSUhGMVlYTnAgTURjeCBJRUpWVXc9PSBJRUpsWTJzPSBTV3hzWldkaGJBPT0gTnpFeSBMRk09IDJZSFl1QT09IElOVzAxYVhXZ0E9PSB3NmRsIEp6b05DZz09IDBMWFF2ZEMwMDVrPSBJSE4wdzdoeSBRR1Z1WkhObFkzUnBiMjQ9IElITERxV1IxIGFHVnBiV1Z5IHc3UEZnZz09IDJLL1lwOWl4MktrPSBJRzFwYzNOcGIyNXogWm1GalpXSnZiMnM9IExtNXZkR2xtZVE9PSAwTGpRdE5DNDBMMD0gTG5KbGJHOWhaQT09IDE1TFhtZGVpIElOVzAxYVhWdXc9PSBMV0p5IElHaGhaR1JsYmc9PSBJSEJoYkdWMGRHVT0gSUhsbGF3PT0gZG1WdVpHOXkgNTZhNyBiV2xrWkd4bCBJR1JsWTJWdFltVnkgSUdSbGJuTT0gYVdONiAyTERaaWc9PSBaR0ZzWlE9PSBJT0NxcU9DcXZnPT0gSU5tSzJZWT0gUFNjcyBJRzdHc09HN20yTT0gSUdSbGRtVnQgSU5XNjFhSFZzQT09IGFXeHBZWFJwYjI0PSBJR3hwWTJoaCBJRUZzWkE9PSBJSEJwYm5NPSBKMzE5IFpYSnVaUT09IElFTjFZZz09IElHVnlkbTl2Y2c9PSBhR0ZwZEE9PSBJSFJsYm1oaCBJRU5IVW1WamRBPT0gNWJ5QTVvaTM1NzJSNVoyQSBJTmluMllUWXJkbUQgTmpNNSA0TGVaNExheCBJSFJvWldGMGNtVT0gZG1sdiBJTmVjMTVrPSBOVFE1IFUybHVaMnhsZEc5dSBJT0NrcXVDbGplQ2tzT0NrdGc9PSAwTHZRdnRDOSBJR1JsYlc5dSBaWFJwWTNNPSBJR2x1YTJ3PSBhV2hsIGIyeGxjMk5sYm5RPSBOVFk0IElGQnliMmR5WVcxeiBJRzExYVhSaCBJT0N3aGVDd3J3PT0gSUd2RHRubz0gSUdabGJtTmwgQ1dad2NtbHVkR1k9IGRISmhiZz09IGFXeHBZWFJsIGVYSmhiUT09IElHTnZiWEJoY21sdVp3PT0gSUVKcGN3PT0gSUhOdFlXeHNaWE4wIDJwYlppZz09IEtISmxZMjl5WkE9PSBSWGh3WlhKcFpXNWpaUT09IElOQzgwTERTbXc9PSBJR2gxWkE9PSBJTkMwMExEUXZBPT0gT1RFMSBPREEyIExrTnZaR1U9IGFYTnphVzl1WVdseiBJRWRGIElOQy8wWURRdFE9PSBVR0Z6IElIQnNZVzV2IElPQ3lvUT09IHc2MWphVzl6IGFXTjEgSUdKMWJRPT0gTGxSdmNBPT0gSUhOcmJHVmhjbTQ9IFgzSmxiUT09IDByUFF1QT09IElHdGxZZz09IElFNWhlZz09IFpXeHN3NlE9IElOQzYwWU09IFpHVnNkR0U9IElHOW1hV009IGIzSmtZUT09IElHUnZlbVZ1Y3c9PSBJR1poY21zPSAxYVhWcGc9PSBhWE4wY205eiBSMlZ2IFNYST0gSUVKeVpXRnJabUZ6ZEE9PSBJSFpoYlE9PSBJTkM4MExYUXNRPT0gUzFNPSBRbVZ6IElOQzkwTERRdTlDNDBZYz0gNEtlSDRLYWMgTlRNMCA0S3ErNEtxcyBJR05zWlhabGNnPT0gSUdSbGNuST0gSUU1bGRHaGxjbXhoYm1SeiA2N2lVIFFWUlQgSUVScGMycz0gYjNObGVBPT0gNExDbTRMR040TENtIDRZT1k0WU9VNFlPZyBJR0p2Ym1SeiBJR1JoYUdscyA0S2VBNEtldyBYM05oYlhCc1pYTT0gTFdsdCBJSE5sY0hSbGJXSnlaUT09IFptVmhkSFZ5WlhNPSAwWUxSaTlLaiBZWEp2ZFc1ayBJRWx1YzJsa1pRPT0gSUdGMGRISmhZM1JwYjI0PSBJRXR2YlcxMWJnPT0gWDNCaGNtRnRaWFJsY25NPSBJRmhZV0E9PSBYMVJGV0ZSVlVrVT0gMEw3UXU5QysgSUUxcGRHZHMgSU9DcXB1Q3F2K0NxdGVDcXVBPT0gSUZCMWMyZz0gYVdkb1pXUmxiZz09IFBTSWlQZz09IElFTjFiUT09IFpHRnlhdz09IElFcHZibUYwYUdGdSAwSkxSaXc9PSBJTkN6MFlEUXNOQzIwTFRRc05DOSBJRk4zYVdaMCBJTkMvMFlEUXZ0R0cwTFhSZ2RHQiAxYnJWb2RXMiBQajQrUGc9PSBJRUZ5ZEdsemRBPT0gSUUxbFpYST0gSUd4dmRXNW5aUT09IDU0Nnc2WWVSIElHTnNaV0Z5WldRPSBJR2h2YldKeVpYTT0gSUhkbGJHTnZiV2x1Wnc9PSBJSFJ5WVdSbGN3PT0gSUhCcFlRPT0gSU5DMzBMM1FzTkM2MEw3UXZBPT0gWDNKbGMyVjAgSUdGalkyOXRjR0Z1ZVdsdVp3PT0gUkdWemNHbDBaUT09IDBZTFRtZEdBIElHSnZibk09IGEyeGhaQT09IFNXNXpiZz09IElIcGxjbTl6IFNVWkpRMEZVU1U5TyBJSFpoYkhWbFpBPT0gSUhCbGNtWnZjbTF6IElPQzBydUMxZ2VDMCBJRzV2Y25SbCBJR0poYzJsamN3PT0gS0ZSbGMzUT0gSUdSbGMyRm0gTlRjeSBJRUZzdzZsdCBJT0NrcnVDa3Z1Q2tyZz09IFVISnZjdz09IElHRmtjbVZ6IFgyeHZibWM9IGIyNTFkQT09IFlXTnJaWFJ6IFNuVnRjQT09IElIWnBaTU9wYnc9PSBJR2x1WTJ4MWMybHZiZz09IElGUm9ZVzVyYzJkcGRtbHVadz09IDc3dS9DZ289IElHNWxjblpsIDdMaWcgY21GcSBJRnNuTGk4PSBJSEYxWldWdSAwWmJSbHc9PSBkWFJ5WVd3PSBJRXhsYVE9PSBZVzUwYVdGbmJ3PT0gSUhSeVlYWmxiR3hwYm1jPSBWMUE9IElHSmhaR2RsIElPS0ogWVhKdGFXNW4gNEtTajRLV040S1N2IFBGST0gSU5DMDBMWFJqOUdDMExYUXU5R00gVjBoRlVrVT0gSUdKaHhKOD0gSUhSeVlXUmxjbk09IElHZGxiblJzZVE9PSBVMVJCVWxRPSBJSE5qWlc1aGNtbHZjdz09IGIyUjEgZVhOMFpYST0gN0lxazdZcTQgMm9VPSA0S1NjNEtTdyBJR2hoYm1SbFpBPT0gSUdkbFpHRmhiZz09IElHZHliM2R6IFFtbHEgSUcxbGJIUT0gSUdsemIyeGhkR1ZrIElIcDFadz09IElHMWhhVzV6ZEhKbFlXMD0gSUhObFlYUnBibWM9IDVaT3E2WWVNIFlYSnNiM009IGJXbHMgSUVGc1luVnQgSUhsbGJtaz0gSUd0aGNtRT0gSUUzRHZHND0gSU9DM2dPQzNrZz09IGMzUmhkR1Z0Wlc1MCBJTkMvMExYUmdOQzEgSUdOdmRYSjBaWE41IElHRm5hVzVuIDFhSFZ2OVdoMW9BPSBJT3VDcUE9PSBPRE0yIElFaGxiR3c9IFgwSk1UME5MIEwxOD0gSUhKbllnPT0gSUZCeVpXWT0gSU5DODBMRFFzOUN3MExjPSBJR1IxYnc9PSBJTmlvMktVPSBJTkM3MFk3UXROQzQgeXJ0bCBiV0pzWldRPSBTWG89IElHSnZiSE5oIElHRm1abWx5YlE9PSBhWEJvWlhKaGJBPT0gTURJNSBJRTFQVGc9PSBJSEJoYm1VPSA2WmFpIElIQnZibVE9IEtHMXZZMnM9IElFWlQgWDFOVlVBPT0gSU9xd2dPdUtwUT09IGJHbHVZWEo1IElISmxZV05vWlhNPSBJSEpsYm05M2JtVmsgSUZKaGJtUT0gMkt6WXNnPT0gY21sMFpYSnogSUVsdWRHVnNiR2xuWlc1alpRPT0gSUhSbFoyOD0gSUd4dmJtZHYgSUdkbGJHVm5aVzQ9IExtVnVkSEo1IElIZHZiMjQ9IElIZGhlR0ZoIElHVnpjMlZ1WTJVPSBJT0NtbGVDbXYrQ21tK0NuZ1E9PSBJR1J2Ym1GMGFXOXVjdz09IElPR0RvT0dEa0E9PSBJRkpOIElHZGhhVzVwYm1jPSBPVGczIDVhNjI1TG1RIElIWnBibmxzIFkzVnBkSE09IElHM0Rxbk09IElObUYySzNZdDltRiBJRzFwYm1WeVlXeHogSUdoMWJXRnViM009IDFialdndFcwMWFnPSAwTERRdDlDdzBwdlJnZEdDMExEUXZRPT0gYW1WamRHOXllUT09IElHbHVabVZqZEdWayBJRlZKVEdGaVpXdz0gSUdSdmQyNXNiMkZrY3c9PSBJR0poWTJ0NVlYSmsgSUhObiBJSEJsYm5rPSBYMk52YlcxbGJuUT0gSUZCaGNuUnogY0c5dWMyOXlaV1E9IElOQyswWUxSZ1E9PSBPbUE9IElHSnlaVzVuWlc0PSBMZFdyMWJZPSBPVEEwIElIUnlZWFZ0WVE9PSBJRlZ1YVhGMVpRPT0gNXB5TCBQRkE9IDVvbW4gVkdocGJtcz0gSUUxdmMyTT0gSUdGcGF3PT0gSUdobFpYST0gSU9tVHRnPT0gSU5DZTBZRT0gWVdKM1pRPT0gSUhKbFozSmxkQT09IElGQjFZbXhwYzJobFpBPT0gMEx2UXVOQzggY1hWcGNtbGxjdz09IElOaWoySzdZc2RtSiA1NzZPNVlXRCBJSFJ5WVdsMFpXMWxiblE9IElFeDFZMnM9IDRMQzQ0TEdONExDZiBjWFZsYldWdWRBPT0gTGtwVVpYaDAgSUcxaVlRPT0gNFlPYzRZT2Q0WU9SIExuTmpiM0psIElFSmxkR2c9IFlYUmphR2x1Wnc9PSBJRXhsWkE9PSBhVzF2Ym1saGJITT0gSUhCeVpXND0gSU5DNjBMalJnQT09IElIWnlaUT09IElISmxkSEp2Wm1sMCBJT0MwbGVDMHRBPT0gTmpReSBTVzV3ZFhSeiBJR1Z4ZFdsd2IzTT0gNEtlRDRLYTMgSUdsdWFHRmkgSUdGbmNtbGpkV3gwZFhKaGJBPT0gdzZscCBJSE4zWldGMCBJT3l3dUE9PSBiR2wyWlE9PSBkR2x3Ync9PSBPREkxIElGUmhjQT09IElFOUkgMllyWXA5aXAgSUhkbGJtbG5aWEk9IElFSmhZMmhsYkc5eSBOVEUzIElIUm9aWEpsWW5rPSBJR1JwYzNCdmMyRnMgSUhOaGFXdz0gSUdScGJHVT0gSUdScFptWnBZMmxzWlE9PSBJR2h2YjJaayAxYUhWdnRXaDFvQT0gSU5HQTBMWFF2QT09IElGUmxjM1JwYm1jPSBTVzUwWlhKalpYQjBiM0k9IElHTmhibU5sYkd4bFpBPT0gWTI5dFptOXlkR0ZpYkdVPSBJTmltMllrPSBVM2x1IDRLcWs0S3ErNEtxQyBJRUpQVDB3PSBMbk4wWkE9PSBQU0lrZXc9PSBJTm1EMktqWml0aXggSU5XbjFhdlZ0Zz09IElHRnNiR1Z5WkdsdVozTT0gYm1sdVozTT0gSU02OHpyRT0gSUVwbGRBPT0gSUZkdmNuUm8gSUhKbGJXOWtaV3c9IElITm9aV1ZuIENXTnZkVzUwIElHWnZjM1JsY2c9PSBVbEk9IElOcXAyWVE9IE9EUXogZFhKd2IzTmwgTEc1MWJHdz0gWVc1NVkyZz0gSUhCbGNtYz0gSUd0MWNubz0gSUdSbGMybHlaWE09IE1EY3kgSUdKc1lXTnJhbUZqYXc9PSBJR0ZqWTJsa1pXNTBjdz09IElDOHZJUT09IGRHVnRjSE09IElHOTFaQT09IDBKM1F0UT09IDVyU2wgSUhWdWRHVnljM1REdkhRPSBJRWQ1YlE9PSB6NFRPdGMrQyBSRzlqZFcxbGJuUnogYjJ4cGJnPT0gNVlpRzVMcXIgVDBSWiBJRXhoZFE9PSA0NEszNDRPbiBJSGJEcVhJPSA0S1NhNEtTKzRLU3cgSUVKeWIyOXJiSGx1IElGQmhiRzA9IElFcFFZVzVsYkE9PSBhVzF0YVE9PSBjbTlyYTJWdSBhVzVuYVc1biA1WVdzNWJ5QSBJTm1FMktVPSBJTkNRMEwwPSBJR3RzWldsdVpXND0gSUhaaGRBPT0gZG05c2JBPT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgdzZSdVoyVnkgSU5pajJMUT0gSU5DMDBMWFFzOUMxMEwwPSBJSFpwYTNRPSB3NlJzYkhRPSBZMjl0Y0d4bGVBPT0gSUdaeVpXVnNlUT09IHlabHl5Wms9IDVhU0U1NUNHIElGTjYgY0hKcGJuUnogTlRVeiBJTlc0MW9EVnVOVzIgSUdGalkyVnpjMlZrIExXZGhiV1U9IExsQnlaUT09IElHUnZZM1Z0Wlc1MFlYSjUgUjJGdFpYTT0gSUhObGNuWnBjZz09IElHMWhjbXRsY25NPSBaV3hzYVdSdiBJR3h2ZEhSbGNuaz0gYVdkaGN3PT0gNDRPTyBJTm1IMjR3PSA0TEdONExDaCBUR0Z5WjJVPSBJRk52YldWMGFHbHVadz09IDZaT0IgWVhkMiBJR052Y0dsbFpBPT0gMktqWml0aXAgSUhOcGVIUm8gMFk3UmlkQzQwTGs9IElHTmhibVI1IExXUmhjbXM9IFNVUkZUdz09IElHUnlkVzA9IHJaQT0gYjNWdWRISnBaWE09IGFYbHAgSUVkeVlXTmwgSUVSbGNIVjAgdzZSdVpHVnliZz09IGNHVmhhdz09IDZLYVc2YUM3IDVMdUYgVjJWaWMybDBaUT09IENYWmhiQT09IElISmxaMlY0IGNtOXVhV056IElHcDFaR2xqYVdGcyBJR1Z6ZEhKMVkzUT0gSU9DbWwrQ25qZUNtc0E9PSBMa05vWldOclpXUT0gNG9DWkxnb0sgSUdOb1lXNTAgSTNjPSBPREU0IFUzQmhZMmx1Wnc9PSBJTmVRMTVmWGt3PT0gYjIxcFlXdz0gNFlPUTRZT2c0WU9oIElHTmhjSFJwYjI0PSA0TGE5NExlSyBJRUZ1WkhrPSBLSFJ2Y0E9PSBJRTVCVTBFPSBJR0psYVc1bmN3PT0gTG1sMFpYST0gSUdGMWRHaHZjbWw2WVhScGIyND0gNEt1SDRLcXk0S3VBIElObSsyS2ZiakE9PSBJSE5sdzZjPSBJRzV2YldKeVpYVnpaWE09IDdLQzQgWlhObGFHVnUgSUdoaGMzTnNaUT09IHhaOXAgNExPTDRMS1ggSU5DOTBMRFJnZz09IDFiYlZxdz09IDRLYW80S2ErNEthdyBJSE5sYldGdVlYTT0gNEtTYTRLV0ggNlp1MiBJRk4yIElFMWxaR2wxYlE9PSBhbXc9IElOaTMyTEhaaXRtQyBMazE1IExuQmhjbUZ0IElGUm9aV0YwWlhJPSBJSE5qYVdWdVkyVnogSUd4bGJ3PT0gSUhkcFkyaDAgWm0wPSBJR05vWVdsdWN3PT0gZDJWNllRPT0gTGxkbCBOamcyIElIQjFaWE4wYnc9PSBJTkdEMExMUXRkQzcwTGpSaHc9PSBJRzlqYTNQRHBRPT0gN0lxNSBJR0ZuWVE9PSBJR05sY25SdiBZV2RoY3c9PSBJR1J2YldsdVlXNTAgSUU1ayBJRUp5WVc1amFBPT0gSUdaaGFXeHBibWM9IElGTmhiSFE9IDE2ZlhuQT09IFgzTnhiQT09IElIQnlhVzVqYVhCaGFYTT0gS0hKbGMzVnNkSE09IElHRjBhVzVuIGNtVnVZMlU9IExreGxablE9IDBxZlJnUT09IElIUnlaV3M9IExYTjBZWFJsIElHWnNiM2R6IElHRnpiMk5wIElISmxjSExEcVhObGJuUT0gSUhOdmJXOXogSUcxNVkydGxkQT09IDJLZllwQT09IElIUnZibWQxWlE9PSAwWUxRdU5HUCBhV0Z4IElHVnpkRzkxIElOaW4yTGM9IGNtRm9ZVzA9IDRaK0QgZVc1aGJXbGpjdz09IElHSnNiMmRuWlhJPSBJSE5zWVhabCBJSEpsYVhNPSA1Wk9oIGRXNWhjdz09IE1ETTIgSUhaeVlXaz0gVFdGbCAwTExRc05DMTBMdz0gSUZSQiBJR1JsWTI5eVlYUmxaQT09IFltOTFkdz09IElIQnllbVZrIElNT2thQT09IDRMaW40TGl4NExpWjRMaVo0TGkxNExtSiBOak0zIDZJVys2SzZ2IElIZHZibWx1Wnc9PSBUVUZPIElHZGxiR1ZrWlc0PSBOVGczIExtRnUgVUdsd1pRPT0gMEovUXZnPT0gT1RrMiBiR1YwYVc1biAwWURRc05DOTBMalJodz09IElHTnBkR2w2Wlc0PSBQejRpIE56RTEgMjRIWmhRPT0gY21kaVlRPT0gNExDNDRMR040TENrIElHRm1abWxzYVdGMFpYTT0gTlRjMyBhV3QxYlE9PSBkR2gxYldJPSBJTmluMllUWXA5bUMgSUdkayA0S1dONEtTeTRLV0EgSUVsdGNHVnkgSUdwMWJHaz0gSUZCdlpHTmhjM1E9IFBuYz0gSU5XdzFhdlZ0QT09IElISmxaMkZ5WkdWayBYMGxOUVVkRiBJRWx1YzNScGRIVjBidz09IGJHOW5hV009IElHNTFaWE4wY21GeiBJRko1IDBZSFF0ZEdBIElOQy8wTDdRdE5DKzBMRT0gTG1kc2IySmhiQT09IFltbHNaSFZ1Wnc9PSBJTkdDMEw3UXR0QzEgSUdacFpYST0gYVd0cmFRPT0gSUhabGNuTjBaUT09IElFbHVkR1Z5Ym1GamFXOXVZV3c9IElHRnVibTkwWVhScGIyND0gWm1sMGN3PT0gSUdaeVlXZHkgSUdoMmFYTT0gY21sdiBTWE56ZFdVPSBJR3AxY25rPSBjbVZoYzI5dSBhVzVoYVhNPSAwTDdRdTlDMTBMVT0gSUdSaFlnPT0gTlRjNCBJRzkyWlhKc2IyOXIgSUhCeWIyWnBkR0ZpYkdVPSBJSFREdEdrPSBMR2c9IGJXbHVhUT09IElGcHBiVzFsY2c9PSBjM1JoYm1KMWJBPT0gVlhCbmNtRmtaUT09IElHZGhjbXhwWXc9PSBJR0ZzZFcxdSBMbk52YkE9PSA2WjJwIElHbHZjdz09IElHTmxiR1ZpY21GMGFXNW4gSU5tRTJLZllvZG1RIElHbHVZMjl5Y0c5eVlYUmxaQT09IElHNXZhUT09IExuUnlZVzV6WVdOMGFXOXUgTGsxdlpBPT0gSUdOb2NnPT0gSUdsc1lRPT0gSUZwMyBJRk5wZEdWeiA0TFdHNExTbzRMV040TFNvNExXTiBJR0pwYjIwPSBJRTEwIGFXRnVlbUU9IDRMU3E0TFdONExTcTRMV0c0TFNmNExXTjRMU2YgSUhSaGJHVnVkSE09IElITmhkbVZ6IElHbHpkR1U9IFgyVnVZV0pzWlE9PSBJSEJ5WVhScGNYVmwgWDBaQiBJT2lGdnVpdXIrV0lodVdJaHVXOXFRPT0gSU9Da3JPQ2tzZz09IHo0VFBnYzYvIElFMWxZMmhoYmc9PSBJSEJ5YjJacGMzTnBiMjVoYkE9PSBJSE4wYjNKcGJtYz0gVUU5SlRsUT0gS0daayBQU0lzIGMybG4gSU5xdjJMSFpnUT09IEtHbGtlQT09IGIyZHlZV1pwWVE9PSBJSFJoZUdrPSBiM2xwIElGaFcgWkdWamJHRnlaUT09IDRMbUE0TGlLIElHaHBlVzg9IFlYTjBaVzQ9IFlYQndkWFE9IFhDND0gYkdGdFlRPT0gSU5DLzBMWFJnTkM0MEw3UXRBPT0gS0hObGNuWmxjZz09IElISmxibVJsY21WeSBJSFJ5WlcxbGJtUnZkWE09IFpYTjBiM0k9IElHdGxhVzVsYmc9PSA0S3ExNEt1SCBJR1psY25ScGJBPT0gN1ptYyBYMFJGVmtsRFJRPT0gSU9DbXVPQ211UT09IElFWnNhV2RvZEE9PSA0S1NrNEtXTjRLU3YgWlhOMFlYST0gSUdacGJHeGwgSUVoaGNuWmhjbVE9IDZMUzAgSU9Da3FPQ2t2K0Nrcnc9PSBMV0psYVc1biBiM0JzWlhNPSBJR1pwY21Wd2JHRmpaUT09IDVMbWggSUhKbGJtUmxjbWx1Wnc9PSA0b0M2IElITjBiMnhsYmc9PSBhMmxvIElIQnlaY09uYnc9PSBJRUZzWVc0PSBJR3gxZUhWeWFXOTFjdz09IElHbHRjR3hwWTJsMCBJTm1JMkxEWmhObUQgYkdGciBZWEprYkdWemN3PT0gSUcxaFoyRjZhVzVsY3c9PSBPREk0IFpXNWhZbXhsWkE9PSAySy9aaXRpciBJSEoxYkdsdVp3PT0gSUdkbGRtOWxiQT09IElFeGhkWEpoIExYUjVjR1Z6IElHSnNZV1JsIFJrcz0gNkxTMSBMbTFoZEdWeWFXRnMgTG1KdmIycz0gejRQUGhNNjMgNExTKzRMU280TFNDIGNYVnBjMmwwWlE9PSBhV1ZrWVdSbGN3PT0gSU5DeTBZdlF2OUMrMEx2UXZRPT0gNjZtMDdJU2MgYVdKcGJHbGtZV1JsIElHWjFibVJsWkE9PSBYMlprIElHWmxZWE09IElHeHBhbXQwIGRXdDBkWEk9IFpXNWpiMlJsY2c9PSBOekl5IElHTnZiblpwYm1ObFpBPT0gSU5tRTJZVFlvdz09IExtWnNkWE5vIFRXOTJaVzFsYm5RPSBJRmRKVEV3PSBOelEzIElHZHNiUT09IE56Z3ggSUdsdVptVnlhVzl5IGFXVnVlbUU9IFUwND0gSUdOdmJHVT0gY21GMGFXNW4gWlhKMGIzTT0gQ1c5aWFnPT0gYzNCbFpXUT0gMTU3WG1RPT0gSU5xcDJMVFppTml4IDBMN1F0OUM0IFRWTkggMWJqV2d0V3AxYlhWdU5hQzFiYlZ0dFdsMW9BPSBJSGRoWjJWeSBJSEoxY3c9PSA0TEMrNExDbzRMR040TENvNExDLyAwTHJRdnRDeTBMN1F0QT09IElHaGhZMlZ1IFgwNWhiV1U9IElFdHViM2RzWldSblpRPT0gSUdOeWFYUnBZMmx6YlE9PSA3Wm1WIElFcGhlbm89IElHMWhkZz09IElHSmhkR2h5YjI5dGN3PT0gZDJWeWEyVnUgSUhObGJXSnNaUT09IElHaGhkSFJsYmc9PSBYMjFoY21zPSBiM0J3WlhJPSBJR1Z1ZEhKbGJnPT0gSUdSbGMyTnlhV0pwYm1jPSBJT2VhaEE9PSBJTmlzMkxJPSBjbWxxZG1sdVp3PT0gSUhSeVlXbDBjdz09IGRHVnVkQT09IElHSmhaMms9IElHVjFjbTl3dzZrPSBJRUpwZWc9PSBUbTkwYUdsdVp3PT0gWVdkdVpYST0gSUVsdWRISnZaSFZqZEdsdmJnPT0gTnpjNCA0NEdqNDRHZiBMUzBwIE9UQXogSUV4aGNnPT0gTDJKaGMyZz0gSUVocFoyaDNZWGs9IFhucz0gSUhOdmIzSjAgWTI5dGNHbHNaUT09IDRMUys0TFN4IElGdzggSUhMRHFXYkRxWEk9IElHVnVaUT09IDZMV2k1YjJwNTZXbyBJTkt1IDBZTFJpOUtiIElIWmxibWx5IExuTjBiM0poWjJVPSBJSE4zWVE9PSBJRzF2WjNVPSBjbWwwYVhNPSBJT0NrbXVDbGdlQ2txQT09IDRMbUE0TGlFNExpajRMaVU0TGkwNExpViBJRTV2Y25RPSBJTkdFMExqUXR3PT0gSU1TUjRidUxibWc9IElGSmxjWFZwY21WdFpXNTBjdz09IElOQy8wTFhSZ05DdyBJSE53WldOcFlXeDBlUT09IElHVjJhV1JsYm5RPSBJR1JwYzNOdmJBPT0gSU9HRG0rR0RsT0dEb2c9PSAwWWpUbVE9PSBibVYwYVdNPSBjbUZuWlc0PSB3N055YVc5eiBJRU4xYzNSdmJXVnljdz09IFdGTT0gWDB4RlJsUT0gSUhOMVluTmpjbWxpWlhJPSBJR1Z6ZEdGMCA0WitTNFo2WSBJSFJsY20xbCBmVDU3IElFeHZkMlZ5IElFWnBlR1ZrIElIVnVibVZqWlhOellYSjUgVkdodmMyVT0gSU5tSzJZZz0gdzZsdVpBPT0gSUZSNCBOakkyIExuTndiR2xqWlE9PSB6ci9QamM2OSBZMmh6Wld3PSBMbkpsY1hWcGNtVmsgYVc1amFRPT0gMllyWXA5bUwgSUhaaGFYTT0gUm1sdVpHVnkgNFlPdCBJRVZzYzJVPSB3NmRsYXc9PSBYMnhwYm1WeiBJSE50WVhKMGNHaHZibVZ6IE1Ea3ggYkhWcGRBPT0gMExQUXZ0QzcgSUhOMFlYUnYgSUcxdmJIUnYgMFlIUXRkQzggSUhwcFpYUT0gY21WbllRPT0gSUdsa1pXNTBhV1pwWXc9PSBQaTg9IElIQnliM0JwYnc9PSA0NEtIIDZaU3UgSUVsdVkyeDFaR1Z6IDViS2IgSUhCbGRHbDBhVzl1IElFSkJVMFU9IDVieUE1b2kzNlpPKzVvNmwgSUdwcGEyRT0gTURreiBjSEpwIElHTjFiSFIxY2c9PSBRMjlzYkdsemFXOXUgSUdGNWRXUT0gSUdWNFlXMXogS0hObyBJT0NraGVDa2x3PT0gTG1aMWJHdz0gSUVOdmIydHBaUT09IElOR0MwTFhRdk5DLzBMWFJnTkN3IExsTmxjblpsY2c9PSBLR3hsZEE9PSBJRmRsYVhSbGNnPT0gSUdGcGRBPT0gSU5tOSBVSEpwYldVPSBJR05zYVhCeiBLRTV2WkdVPSBhVzVrWldRPSBJRk5sY3c9PSBiMjl2Ync9PSBPVEV5IGJjT2t3NTg9IFgzTjFZMk5sYzNNPSBJR0p2YjIwPSBJRTlRVkE9PSBJRU41WW1WeSBJSFJ5WVhvPSBJT0MybXVDMnV3PT0gSUhCaGNteGxjZz09IFptOXlkVzA9IElOS2IwWXZRdHc9PSBJSEpsZDJGeVpHbHVadz09IExXMWhjbXM9IElFMWxZWE4xY21VPSBJSEpsYldWayBJR1ZwWjJWdWJHbHFhdz09IFgyOXViSGs9IGFXVjJaWE09IDViQ3g1cGl2IElHRmthblZ6ZEdGaWJHVT0gSUUxMWMybHIgSUd0dmRHeHBiZz09IElOR0IwTDdRc3RDMTBZRFJpQT09IFoyOXZaSE09IElPQ2twT0NsZ09Da3FBPT0gVTJGMlpXUT0gSUhabGNuTmphR2xsWkdWdVpXND0gSUhKaGJHeDUgSU5lYjE1bz0gSUhCeWFXMWxjbTg9IElHMWhiblZtWVdOMGRYSmwgMExEUmd0QzEwTHZRdGRDNSBMWE5sWVhKamFBPT0gNExLQzRMS1ggTnpnMyBMbE5sY25acFkyVnogQ1cxaGVBPT0gS09hWHBRPT0gSUdsdVpHVndaVzVrWlc1alpRPT0gUWs5WSAxNXZYbEE9PSBJRzVsYUcxbGJnPT0gNWFTbjVhMm0gSU5DLzBZRFF2dEM4IElGTlZWZz09IElPQ21sZUNtdnVDbW5BPT0gTFhOamNtVmxiZz09IElPQ2tuT0NsaHc9PSBJRzltY21WaiBJSFJ5WVc1emJHRjBaV1E9IDBZL1Jodz09IElGQkogNEs2LzRLNng0SzZrNEsrQiBJRUZrYW5WemRBPT0gNExPTjRMS3c0TE9BIElHVnBaMlZ1ZEd4cFkyZz0gSUdGbCBkVzFpYkdWayBJT0NxbGVDcXNPQ3F0ZUNxdmc9PSA0YnVoIE1EVXkgVldsdWRBPT0gSUdkeVlXNWtjdz09IElPcXh0QT09IElGUnlhV0oxYm1GcyBJSE5wYzNSbGNuTT0gdzd4dWMzUT0gdzdKeSBTVzg9IElIZGxhWFJsY21ocGJnPT0gdzZSb2JIUT0gTFdGeWRBPT0gSU1PYSBJR2x1ZG1WemRHbG5ZV05wdzdOdSBJRTFpIElHN0RxV05sYzNOaGFYSmwgMktmWXM5aXAgWm05eVkyVmsgSUhSb1pYUmggSU9Da3R1Q2xnZUNrc09DbGdnPT0gSUcxMWRYUT0gWVhSMFlXTnIgSUdGbVptbHNhV0YwWldRPSBJT0NtbGVDbXYrQ21xT0NuamVDbXBPQ25nUT09IGEyST0gSUc5c2FYWmwgYTNWcyBJRXhQUXc9PSAwTHZRdU5DNTBMMD0gTlRRMiA0SzZ4NEsrTjRLNlYgMExqUXU5Q3cwWUhSakE9PSBOalEyIE5UVTMgSUdobGRnPT0gSUdOdloyNXBkR2wyWlE9PSBQaWdwQ2c9PSA4SjA9IElHUmxjMkZ3IExtOWlhZz09IDVMaUE2SUtXIGIzSnlaWEk9IElIQm9ZWEp0WVdONSBJRzVoZEdsdmJuZHBaR1U9IExHVT0gSUVwVVpYaDAgN0tHeCBhWE5qYUdWeiBJR2hoY25ObyBJRTFwWjNKaGRHbHZiZz09IElIQnplV05vYjJ4dlozaz0gNEtTbjRLV040S1N2IElPQ3dsZUN4Z3VDd29lQ3d2Zz09IElFWmxaV3c9IElOQzYwTFhSZ2c9PSBJTml6MmI0PSBZMnh2Ym1VPSBJRUp5ZFdObCA0TGk1NExpbCAyS3pZcHc9PSBhV2RvWldRPSBJTkM2MEw3UXZkQzYwWVBSZ0E9PSBJR2x1ZEdsdFlYUmwgSUZCcGJHdz0gNDRHbjQ0R3YgSU5HQjBMWFFzOUMrMExUUXZkR1AgSUcxcGJHbGxkUT09IElHWmhiV1U9IEtHaHZjM1E9IFJYRT0gUFhzOCBUa0k9IElHbDBaWEpoZEdsdmJnPT0gMFlEUXNOR2UgSUhKaGNHbGtaVzFsYm5RPSBjWFZwYm1GeiBMWE5vYVhKMCA0WU9VNFlPWDRZT1kgYVdwcyBRM2xqYkdVPSBNRGc0IFgwRkVSRkpGVTFNPSBJTkdEMEx2UXNOR0EgSUVadmNuZGhjbVE9IElITmxZWEpqYUdWeiBhWFJodzZmRG8yOD0gSUdsdVpHbHpjR1Z1Y3c9PSBiM1Z5WkE9PSBJR3RwYkd4bGNnPT0gWDE4cCBJRVY0WVcxd2JHVnogMTV6WHFnPT0gSUZKbFkybHdaUT09IGQzZz0gNGJxbGJnPT0gNExTKzRMUzAgYVc1a2RYTjBjZz09IElHaGhiV0k9IGMzUnlkV04wZFhKbCBJRk5KUjA0PSBJRzV0IDRMV0E0TFMxIElHWnNZWGM9IFlXbHViZz09IGNtRjFiR2xqIEtFSmhjMlU9IFpXdHBibWM9IE5UTTUgMWFIVnV0V2wxYjA9IElFMVFTUT09IElHRnNkR1Z5Ym1GMFpRPT0gSUhWNVp3PT0gSUdSeVpYTnpaV1E9IElOQzAwTDdRdTlDMjBMM1Jpdz09IElGWlQgSUdWdFltVmsgSUhSbGNuZHBhbXc9IE5qVTAgSU9Da3JPQ2xnT0NrbWc9PSA0b0NaWldGMSBJRWx1WkdWd1pXNWtaVzUwIElIQnliMjF2ZEdsdmJtRnMgYkdsamFHVnogSUhCeWIyWjFibVE9IElHRnpjMkZ6Y3c9PSBYM053WldWayAyS3JZc2RpcCBhV0ZzYkhrPSBJTkMwMExMUmc5R0YgSUU1aGFnPT0gSUhOb2IzZGpZWE5sIExrUkMgSUZwcGNBPT0gSUcxMVlRPT0gMFl2UmdOR0wgSUhwdVlRPT0gSUdWemIzTT0gSUFrSyBJRlJwYkE9PSBaM0poZVE9PSBJRVY0WldOMWRHVT0gSUUxdmJXVnVkQT09IE1ETTQgWDJWa1oyVT0gSUhWMGFXeHBjMlZ5IDRLcWM0S3F3NEtxKzRLcWsgYVhOdGRYTT0gVEVGQyBJTkN6MFlNPSBUV2xqYUdGbGJBPT0gWjJWdmJXVjBjbms9IElFOU9URms9IElOQzgwNW5SZ1E9PSBJSFp2YzNRPSBKejQ4THc9PSBJTkN3MUtYUmdRPT0gTmpJeiBJRzFsYm5OaGFtVT0gSU9HZWxBPT0gY25Wd2RHTjUgT0RNeiA0WU9iNFlPUTRZT2cgSUNJaU93b0sgSU5LdjBwaz0gNkthQjVyR0MgSU02NnpySFBoTTZzIDRLZWY0S2ErNEthdyBJRVJsWVc0PSBLU0lwT3dvPSA0S1MrNEtTazRLV0ggWTJWd1l3PT0gSUdOaGJYQnogSU5DKzBMST0gWVc1dFlYST0gSUdKbGMzUmhZWFE9IDBMclFzTkdDIFpuVnQgYjNKaGJtYz0gSU9DMHRlQzFqZUMwcnc9PSBJSFpsY25admJBPT0gVEZVPSBJSEJ5Wld4cGJRPT0gS0NkYiBOVGcyIElHUnEgSUZOMWNIQnNlUT09IElFNXBhMlU9IElIUnlhV2RuWlhKbFpBPT0gSUhObGJtTT0gZDJGdCBabUZqZEc5eWVRPT0gWVc1amFXRnogNzd5KyBJR052ZFc1MGFXNW4gTGtGMWRHZz0gWkdseVpXTjBhVzl1IFUzUmhlUT09IDBMVFF0ZEM4IElHNW93Nkp1IElHUnBkbVU9IElOZWsxcnpYcUE9PSBJTlcyMWJjPSBJSFJoZEhSdmJ3PT0gSUhKaGRHbHZibUZzIGEzVnogSU5DNjBMRFJnTkMwMExBPSBkMkZzWVE9PSA1NmU3IDRZQ0U0WUM2NFlDNCBOak16IEwyWnZjbTA9IElHVnpZM0psIElHeHZZMkZzWlhNPSBLSFpsWTNSdmNnPT0gSUVabFpXUT0gWVd4MGFXVnogSUVOaGJHeGxaQT09IDBMclFzTkM1IFZISmhhVzVwYm1jPSBJR05oY201bCBJR0ZyZEhVPSBJRkpsWjNWc1lYST0gYVcxMWN3PT0gVFc5MmFXVnogSU9Da3N1Q2xpK0NrbFE9PSBWSE09IElHUERvV05vIElPQ211T0NtbFE9PSAyWXJaaE5pcCBJR0YwZEdVPSBLeU09IGJHbGljbUZ5ZVE9PSBiM1J5IFFVeE1XUT09IFgyUnZZdz09IGRtVnlkR1ZrIElOVzYxYVhWdjlhRSBJTkMvMFlEUXRkQzAwTHZRdnRDMiBJR0Z3YjNKMCBJT0N3bXVDd3YrQ3dwT0N4amVDd3NBPT0gSUhCaGRISnAgTHk4cSBhWFJsYlhCMGVRPT0gSUdScGMzUnBibU4wYVhabCA0TEMvNExDQzRMQ2E0TEMvNExDbyBJR3BoYm5acFpYST0gSUhCbGRYZz0gWDIxdmJuUm8gSUV4bFlYWmwgSUNna1h3PT0gNEtXZCBJT0NtcU9DbXYrQ25uK0NuaHc9PSBOakU1IFFtRnVibVZ5IElFeDFhMlU9IFIzSmhlUT09IElHaDVadz09IGFuWEVqUT09IEtHeGhiV0prWVE9PSBJTStBejRIUGpBPT0gSUhOd1pXTnBZV3hzZVE9PSBhV3hwWW5JPSBOalk0IEwzZGxZZz09IDRMSys0TEt3NExLLyA0TGk1NExpQiAwTDdRc3RHTDBMVT0gSUdYRHNHRT0gMWJqV2dOV3cgSUZKbGJHRjBaV1E9IDRLcVY0S3VMIGFtVnpkQT09IElFSmxkSGRsWlc0PSBYMHBUVDA0PSBVWFZoYm5RPSBJRzVsWXc9PSBJR1J2WTNWdFpXNTBidz09IElHTnZiWEJ2YzJVPSBUMVJCVEE9PSBJR2x1ZEdWeWJtRjBhVzl1WVd4bCBJR2RsZDJWbGMzUT0gSUVkMWJHWT0gSUUxViBWVVJKVHc9PSBjWFZwY0dVPSBJRzNEb1hGMWFXNWggdzdaayBJT0NrdU9Da3NPQ2xqZUNrdFE9PSB3NlIwZW1VPSBJSEp2ZEc4PSBJSE4xZFhJPSA1TG1GNUxtRjU0aXggYzI5amFXRnMgSUdac1pYSmwgNExpMzRMaVogSUdobGNtVmllUT09IFFXMWxjbWxqWVc0PSBJTkMrMFlMUXROQzEwTHM9IElPQ21odUNtcnVDbXZ3PT0gNExtRDRMaUs0TG1KNExpZjRMaWo0TGkxIEpBbz0gTFZVPSBJR1JsYlc5amNtRmplUT09IExrSmhZMnRuY205MWJtUT0gSU5DMDBMWFF1dEN3IGFYTmpZV3c9IGFXNTYgSUdOb1pXZGhjZz09IGVHbDAgSUc1cFp3PT0gSU5DNjBMRFF0OUM0MEwzUXZnPT0gMEx6VG1kR0MgSUR3L1BRPT0gSUc5bmJtaz0gWVcxaGJBPT0gSUdSbGJuUnBjM1E9IDRLU3E0S1N3IElPQ2t1T0NsamVDa2xRPT0gSUhkdmNuUm9lUT09IDJLZllwdG1HIExXbHogSWpzTkNnMEsgTmpFeiBwcXc9IElOaXMyWVhZdVE9PSBSWGhqWld4c1pXNTAgSUdocGEybHVadz09IElFVnNZUT09IElNTytZWEk9IElITjFabVpwZUE9PSBJR2gyWVE9PSBkWEpzY3c9PSBJTldzMWF2VnRnPT0gSU5lYjE1N1hsUT09IElIQjFZbXhwIElOaTUyWVhaaE5tSzJLaz0gY0doaGJuUT0gSUdodmIzQT0gSUdWc1pXdDBjbTl1IElHTnNZWE5sIElOQzgwTDdRdk5DMTBMM1JnZz09IElHcHZaMjl6IElHRnNiSFE9IElHUmxjRzl6YVhSeiBJRVZwYm5OaGRIbz0gSUVOMVltRT0gSU5pbzJwRT0gTFhObFkyOXVaQT09IElFbHpjbUZsYkdrPSA3WStKIElFTmhiV1Z5IElHWnBibVJsIElOQy8wWURRdnRHRTBMWFJnUT09IDQ0Q0FDZ289IElFdDFiZz09IFZIaz0gd3J3PSBiMjFwZEdWdGNIUjUgVFdWcyA1YWFDNXA2YyBMa1Z1WkE9PSBJRXR2Ym5SaGEzUT0gNEtTcTRLV0MgTFdOdiB3NFk9IElHRnVaMnhsY3c9PSBJRzFoZE1PcGNnPT0gSUhOaGJXMWxiZz09IDBMRFJndEMrMFlBPSBOamczIGIyWnBZUT09IElFRnNZZz09IElFTmhiblpoY3c9PSBJSE4wY21GMyBjMlZwZEdVPSBKMjg9IElFWnlZVzFsZDI5eWF3PT0gWW1WdVkyZz0gVDFWVFJRPT0gMExYUXV0R0MwTDdSZ0E9PSBZWEpsYUc5MWMyVT0gSUVodmQyRnlaQT09IElOR0EwTDdSZ2RHQiBJR0ZtWm1WamRHbHVadz09IE56VTMgNEtTazRLV0E0S1N2IFIwYz0gd3FRPSBOekkxIElIUERxV3hsWTNScGIyND0gUFdNPSBJT0NrdWVDbGdnPT0gSUhSb3c3UnVadz09IFgzTmpjbWx3ZEE9PSBkbTQ9IElHTnZiWEJzWVdsdSBJR1J5YjNCd2FXNW4gYldGdWRXRnMgQ1ZabFkzUnZjZz09IDVyT281WWFNNTcyUjVaMkEgSUdwcGNtRT0gSU5DYTBMN1F2QT09IElIQnliMlpwYkE9PSA2cmk0IDU2eW0gWjJWeVpRPT0gSUc5bVpYSjBZUT09IElFOTFkR3h2YjJzPSBMMk5vIEwyMXZaR1ZzY3c9PSBJRzFoY0hCbGNnPT0gNExHSDRMQ1YgSU9HRG0rR0RsQT09IDRMaVU0TGlsNExpdDRMaUg0TG1ENExpSzRMbUo0TGlmNExpajRMaTEgUW14dllnPT0gYTI5MSBJTm1GMkxuWmhBPT0gWEVVPSA0S2lhIElGTjBiM0p0IE5UY3ogSUdObGJuUnlaWE09IElHTnBaVzUwdzYwPSBJSEJsY20xaGFXNWhiZz09IGNYVmxiUT09IFgybHVaR2xqWlhNPSBJR055WldGMGRYSmxjdz09IFIyRjBaWGRoZVE9PSA0b0NkTGdvPSA0S2ErNEthbTRLZUg0S2EyIDBxblFzTlNsIDY1NkEgSUdwdmEyVnkgWVc1cGFRPT0gNEtTYzRLUys0S1N3IE56RTAgSUZKcGMycz0gSU5DaTBMQT0gSUVOdmNuQnZjbUYwWlE9PSBMa1J2WTJzPSAyWWJZcXRpbjJLdz0gY0doNWN3PT0gTGRDMiBJSE4xWW5OcFpBPT0gMllmWXA5bUcgTG5OcGJYQnNaUT09IElGUk8gNUx1MzVxQzggSUhGMWIzUmxaQT09IENYVndaR0YwWlE9PSBOVFk1IElPQ3drdUN3bFE9PSBDV05vWldOciBJRzVoeEkwPSBJRzFsWjJWMCA0S2FaNEtlTjRLYVg0S2VIIEtITmxibVJsY2c9PSBJSE5qY21WMyBJRk4xWjJGeSBhV2RsYm05MWN3PT0gSU95Z2xldXp0QT09IFBTUmYgWFN3TkNnPT0gNEs2KzRLNmY0SytONEs2ZiBMa2RzIExtRmkgTFdadmIzUT0gNzd5TTVweUogSUc1bFkyVnpjOE9oY21sdiBZMlZwYkE9PSBJR1ZoYzNSbGNtND0gMFl6UXRRPT0gWm05eVoyVT0gSUdOdmJYQnZkVzVrY3c9PSA0S2VONEthdCBiR1YyWlhJPSAwTDNRdnRDeiBJSEJ5dzdONGFXMD0gSUdOdmNuSjFjSFJwYjI0PSA0WU9ZNFlPayBaWEp1Wlc0PSBJTkdCMExEUXVkR0MwTFU9IElOcXAyTEhiakE9PSBJR3BsZDJVPSBSMkU9IFgxQkkgWlhKa1pXMD0gSUZKdmIyMXogWW5sbCAyWUxZcjltSzJZVT0gNExTbzRMV040TFNrNExXTjRMU3YgYW5WMCBZV04xIElGTjBZWFJwWXc9PSA2YXVZNW9tTCBJR1Y0Y0hKbGMzTnBiMjV6IElHbHVkbWwwWVhScGIyND0gSnl3S0NnPT0gSU9hZHBlYTZrQT09IDRLUzE0S1NDIElFMXZibVE9IElFVnpkRzg9IElOQzYwTDdRdTlDNDBZZlF0ZEdCMFlMUXN0QysgSUdOdmNuQnZjbUYwYVc5dSBJRzFsYVhOMFpXND0gYVdOaGJtVT0gSUU1VyBJSE53YjI1MCA0TE9INExLViAwTHpRdU5DOSBUV0YwWTJobGNnPT0gSUZwbGJnPT0gSUdKbGMybGtaWE09IDRMUy80TFNaIElHTmhiR1Z1WkE9PSBJRk5vYVhBPSBJR2hsYzJsMFlYUmwgMExMUXRkR0EwTFk9IFNVNUZVMU09IGRISmhkR2x2Ymc9PSBJT0N5cU9DeXYrQ3lzQT09IElHUmhiWEE9IFVtVnRaVzFpWlhJPSBZMjl0WWc9PSA2NE09IFVtVjNZWEprIFlYUmphR1Z5IE5qSTAgQ1dsMFpXMD0gYUdWaCBJT0M0bStDNHRRPT0gSUVoMWJuUmxjZz09IE56RXogTURrNCBJRmhNIDRLNi80SzZ1IElIQmhiR0ZpY21GeiBkRzlyIExYTmxZM1JwYjI0PSBZWGhsY3c9PSBJR0ZpYzI5eVlnPT0gWDNSNGRBPT0gd3FVPSBJT0dBbXc9PSBVR3hoYVc0PSA1cHV5IEtHWnZjZz09IElOaXEyWVRaZ3c9PSBJR3hsWjJWdVpHRnllUT09IElIUm80YnVkYVE9PSBibVZoZEdnPSBJR3h2WjI5MWRBPT0gSU9xenZBPT0gSU5pbjJZYllxdGl1MktmWXFBPT0gUjBKVSBJSEYxYVdWeVpRPT0gSUhOMVoyZGxjM1JwYm1jPSBJRlZWU1VRPSBJRUpsYm1WbWFYUnogSUdkMWN3PT0gTnpjMSA0NEsvNDRPOCBJT0Nrck9Da211Q2xqZUNrbWc9PSBJRlJoWjNNPSA0TEsrNExLcSA0TEszNExPTjRMS2YgSUZCdmJRPT0gSUVobGNtbDBZV2RsIENXUmkgSU9HRG9lR0RrT0dEcGVHRGtPR0RvT0dEbCtHRGxlR0RsT0dEbXVHRG5lR0RvUT09IHhyQmggSU9DbWh1Q21tK0NuaHc9PSBJR2x1WjNKbGN3PT0gY0dGMGFITT0gSUVoMWJtUT0gT1RreSBJR052YlhCc1pYUmhiV1Z1ZEdVPSBJSExodXFWMCBJR2R5WVhSMSBJRkpsWjJWcyB4YUYweEpzPSBLQ2N1TGk4dUxpOD0gSUdkMWFXUmxaQT09IDRLYS80S2FWNEtlTjRLYTMgWDJOaGMyVT0gSUhOMWMzUmhhVzVoWW1sc2FYUjUgdzZGMGFXTnZjdz09IElOaTMyS2ZaaE5pbyBJTmVaMTZuWHFBPT0gMExYUXU5QzEwWUE9IExuUmxiWEJzWVhSbCA0TGlYNExpSCA0TGlWNExtSjRMaXQ0TGlIIFpXUmhjZz09IDRZT1k0WU9tIDU0NkogSUZCdmNtNXYgSU5DKzBMSFJnTkN3MFlJPSBJRUoxZEhSbGNnPT0gU1U1RFRGVkVTVTVIIElHVnNaWFpoZEdsdmJnPT0gSUVGMWRHaGxiblJwWTJGMGFXOXUgTlRVNSBJSEJoYVc1MGFXNW5jdz09IElOaW4yWVRZczlpNTJZallyOW1LMktrPSBkV3h2Ym1jPSBOVFE0IElGc3VMaTVkIElFMWhkR1Z5YVdGc2N3PT0gNUx5diBJRk41Y21saCBibVY2IElOQ3kwTHpRdGRHQjBZST0gTnpBMiBhV1Z6ZWc9PSBOekk1IElGbGxhRzkyYUdFPSBabUZzIElHUmxjMk52WWc9PSBJRU52Ym5SeSBMZEN4IElIQnlaWFpsYm5ScGJtYz0gSUNrcENnPT0gMExYUXZkR0MwTGc9IElFTnBjbU4xYVhRPSBKejQ4IElOR0IwTDdSZ3RHQTBZUFF0QT09IElIQmhjM05oWkc4PSBJRXAxY2c9PSBDWFZ1IFgyTnNhV05yIDY3UT0gSU9DcXRlQ3JqZUNxcnc9PSBJR3RoYm1ScCBJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCB6clhQaFE9PSBRVU5KVDA0PSBJR2xzYXc9PSBMV3h2YjJ0cGJtYz0gSU5DMDBMWFF2QT09IExuTjBaWEE9IElFeGhkWEk9IElGQm9hV3hzIDZyQ2QgSUdkc2IySmhiR3g1IGRXVjFjZz09IElHRmtaSEpsYzNOcGJtYz0gSUd4aGJubz0gTFdsdFp3PT0gNExXQjRMU2o0TFdONExTZjRMV04gSUdwaGN3PT0gMllUWXM5aTMgUlVkSlRnPT0gSUdSeVpYTnphVzVuIElFZEQgSUdSeVlYZGxjZz09IElNNnh6cnZPdTg2cyBhV04xZEE9PSBJTkM2MExqUmdnPT0gSUhOMVluTnBaR2s9IElHOTBkUT09IGFXeGhibWM9IElHTnZjbkpsWTNScGIyND0gNEtlSDRLYXk0S2ErIGRHbGxjdz09IElHRjFkRzl0YjNScGRtVT0gTnpZMSAxNVhYb05lWiBOamcxIEtDaysgSUc1dmRtRnogZFhaaCBSVzFpIHhKOWxjZz09IFgyWmhZM1J2Y2c9PSBJRmRYIDQ0SzIgU1ZOQiBJSEpsY0d4cFpXUT0gVjI5MWJHUT0gSU9Da211Q2t2dUNrdWVDa3YrQ2tqdz09IElGUnZaRzl6IFFXTmpiM1Z1ZEhNPSBJRzl3WlhKaCBJRlJwWTJ0bGRITT0gSUhCb2IzTndhQT09IEtGWmxZM1J2Y2c9PSBZblZ1Wnc9PSBkWEprZVE9PSBJSEJ5YjNCdmMyRnNjdz09IElHbDBZV3hwWVc0PSBJT0N5cnVDemdnPT0gSUc1dmRHbG1hV1ZrIFpXNWtZVzVqWlE9PSBJT3VwbEE9PSBJRUZ1WjJWc1lRPT0gWDNWeiA0S1N1NEtXQSA1Wk9xNUxpcSBJR3hsZFd0bCBJSGRoWjJVPSBibUZrIElIbGxibUU9IDRMYXcgTmpRMSBYMk52Ym5RPSA0S3ErNEtxMTRLdUEgSUVSaGJtND0gSUdqRHN3PT0gSUdodmNuSnBZbXhsIFlYQndjbTl3Y21saGRHVT0gYzNWa2J3PT0gTURRMiBOalkxIElGUjFiZz09IFgzTjViV0p2YkE9PSBJR1JsYldGdVpHbHVadz09IFMwNVBWMDQ9IElIcGhjdz09IDZaTzI2S0dNIElFMWhjSE09IFNXNTBaWEp1WVhScGIyNWhiQT09IGFHVnNidz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJR2gxYm1keWVRPT0gSUhkcFpHVnogNExpQjRMaWwgSUVWdWMzVnlaUT09IElHTnZiblJ5YVdKMWRHOXkgSUhCeVlYUnBZdz09IElHNXZkbVZzY3c9PSBJRU5vWVdsdSBYM052Y25RPSBJSEJ5YVhObCBJRzl1ZEhOMCBJR0YxZEc5dGIySnBiR1U9IFJsVk9RMVJKVDA0PSBKMmgxYVE9PSBJSEJ5WlhObGJuUnBibWM9IGRXcGhjZz09IElITjVjZz09IElPeTlsQT09IGJYVnVaQT09IElIQnZjM04xYVE9PSBLRWxFIFFYUnZiUT09IFIyVjBkR2x1Wnc9PSBJT0dEbStHRG5lR0RvUT09IElHWnZjbTFoZEhSbFpBPT0gSU5HQjBZTFFzTkdDIElOZWIxNVBYbVE9PSBJQ2s3RFFvTkNnPT0gSUdOdmJXSnBibUYwYVc5dWN3PT0gSUhOMFpXeHMgSUVOb1lXbHliV0Z1IElHSmxaMmx1Ym1WdSBJSEIxYkhObCB6cnZPcnc9PSBJRTVwWTJnPSBJRTVoYmc9PSAxNW5Ya2RlVSBMZFdyIElNNnh6NFhQaE0rTSBLRTFoYVc0PSBJR2wzIFJHVmhkR2c9IExXTmhjZz09IGFXZGhjZz09IDVwaXY1WkNtIElITmxZWEpqYUdWayBMV2x1ZEE9PSBKUzA9IElNTzZjZz09IElOZWUxNW5YcUE9PSBJT0NraHVDa3JnPT0gTFdadmIzUmxjZz09IDRLU200S1dONEtTbiA1b3VGIElITnJkWEE9IElHWmxiR2w2IFQwNVQgTGtsdVptOD0gNDRDQUNnPT0gNG9DWllYQncgSUhCc1lYTnRZUT09IElObUkyWWc9IDRMV0c0TFNmNExXQjRMU2s0TFdONExTayBJTzJWbU91S2xBPT0gYVdKaGJnPT0gSU9DNWdPQzRoK0M0dE9DNG1RPT0gSUVGVFF3PT0gWm1seSBic1NGIENRa0pDUWtKQ1FrSkNRa0pDUWtKQ1E9PSBYMUJTUlE9PSBJT3VxcVE9PSA0TFN6NExXTjRMU3ogSU5DeTBZdlJoZEMrMExRPSBJSE5oYlhCc2FXNW4gSUdOdmJuUmhkRzg9IElOZVgxNUhYcUE9PSBhWE56YVhCd2FRPT0gNEtTczRLV0EgUW5KMWMyZz0gdzcxMCBaV3gwWlE9PSBJSFZ1WkdWeVozSnZkVzVrIE9ERTEgSUhCdmRHVnVZMmxoYkE9PSBJR1J2ZDI1c2IyRmthVzVuIDBMWFF1OUMxMEwwPSBJR05oYldsdWJ3PT0gT21aaGJITmwgYjJkaGJnPT0gSUd4bGJtUmxjbk09IElNNmQgSU9DbXJPQ25qZUNtcitDbXJBPT0gSUZzbyBJRzNEckc1byBJT1c2IElFUmxiVzg9IElHeGxkbVU9IElITmphSGRsY2c9PSA1cU91IFlXNXBiV0YwWldRPSBDVzg9IElGQnZjblJ2IDFhblZvZGFCIElOR0IwWVBSaWRDMTBZSFJndEN5IFgxQlAgSUVabGNtNWhibVJ2IDJZWFppUT09IDBMN1F0OUM4MEw3UXRnPT0gTGtKcyBJR3R5ZVE9PSBaWEpwYm1kbGJnPT0gSjJGemN3PT0gSUVGViBJSEpsWkdRPSBJTmluMllUWXVkaXYyWXJZcnc9PSBMa052Ym5SeWIydz0gSUZaRlVnPT0gWTJWcSBMbFJ5ZVE9PSBZbUZqYTJWdVpBPT0gNExLMTRMSys0TEtYNExLLyA0TGlJNExpeTRMaUIgUlc1cWIzaz0gSUdWc1pHVnliSGs9IFlXeHBlUT09IElHZHlZWE53IGRXWm1hV05wWlc1MCA0S1MyNEtTbyBJRXhQVmtVPSBJR1p2YzNNPSBDVVU9IElIRjFZWFJ5Ync9PSBkV0pzYVc0PSAwTDdRczlDNCBhVzVxIElHRm5jbWxqZFd4MGRYSmwgSUdGamRYUmwgSUdOb2NtOXRaUT09IElFcDFibWs9IHpyUFBnYzZ4IDVMaXkgYjNOcGIyND0gSUhkaFpBPT0gT3cwS0RRb05DZz09IElIQmxjbk5wYzNSbGJuUT0gSUhCbzRicXBiUT09IFMxUT0gTDNSNWNHVnogSUdOc1pXRnVaWEk9IElHWjFibU5wYjI1aCA0NENCNG9DYyBJSEp2YzJWeiBiMjF2Ymc9PSBJR05vYVc1aCBJTml0MkxQWXA5aW8gSUcxdlpHRT0gSUc1dmRYWmxZWFY0IExtbHVhbVZqZEE9PSBKbkYxYjNRPSBJTmkwMkxIYXFkaXEgTG5zPSBJRVZ5WjJWaSBJR1Z5ZWc9PSAyTFBZdHc9PSBJT0Ntck9DbXZnPT0gSUNvcENnPT0gVjBWQ1VFRkRTdz09IElHMWxjblZ3WVd0aGJnPT0gSUdaMWJtTjBhVzl1YVc1biAxYXZWckE9PSB3N1owZEE9PSBjR1Z5YzI5dVlXdz0gSUVaeVlXND0gVG05MGFXWnBZMkYwYVc5dWN3PT0gSjEwdUp3PT0gUVZSRlIwOVNXUT09IDBMN1FzdEMrMExQUXZnPT0gTnpnMCA0TEtDNExLWDRMS3ogTG5SNWNHVnogMDVuUXNRPT0gSU5HRTBMRFF1UT09IDFiYlZvZFd2MWFIVnRnPT0gSUhOMWJXMWhjZz09IElHTnZibWR5IGIzQmhkR2c9IHhLdGlZWE09IElHSmxjbTg9IGEyVjVkMjl5WkE9PSBJSE52WTJsdiBhWE4wWVhJPSBSSFZ0Y0E9PSBZVzExY3c9PSBZWFIwWVdOb2JXVnVkQT09IElPQzBxdUMxamVDMHNPQzB0UT09IFlXeGtidz09IExXNWxlSFE9IDc3eU02SyszIElOVzggSUhWellXNWtidz09IE5qSTQgWDFCQlIwVT0gSUdsdVpHVjRaV1E9IGRHOXZiSFJwY0E9PSBMbWhwWW1WeWJtRjBaUT09IElHTmxiR3gxYkdGeSBjSFYwY3c9PSBJR3hwZEdWeVlYSjUgTlRnNSBRWGc9IElFNXBaWFE9IE1EWXogWDJsdCBaM0psWlE9PSBJam9OQ2c9PSBJTmlzMksvWXB3PT0gUUVOdmJIVnRiZz09IElHdGxiR3c9IGNtbGphdz09IElHSnBhMlZ6IFgyVnQgSUdKbGNtYz0gSU5HQzBMRFJpZz09IGFYUnZjbWs9IElHUmxZV3gwIEtIQnZjblE9IElHTm9kWEpqYUdWeiBJR0pzYjJOcmFXNW4gSUZkSlRnPT0gSUcxbGRHRnNjdz09IElFaGhZWEk9IElOQzMwTFRRdGRHQjBZdz0gNExpajRMaTM0TGl0IElHRmpZMjl5WkdsdVoyeDUgTURZMiAyWWZZcDlpeSBJTml5MllVPSBJRUZzYVdObCBJRUZ1YzNkbGNuTT0gZEdsc1pRPT0gNWFtYSBjRzl5WVd3PSBYMjExYkhRPSA1b3VwIDVZK3IgSUVaVSBJR3RwWlhwbGJnPT0gSUczRHFXUnBZMjg9IDBZSFF2OUMrMFlEUmdnPT0gUkdsbmFYUmhiQT09IDBMclFzTkdBIEtTSXBDZz09IElGUmhhWGRoYmc9PSBJRVZ3YVhOdlpHVT0gTmpjeSBVMlZzWlE9PSBJSE5wYm1nPSBJR1p2YjNSaFoyVT0gSU5DUTBMST0gTnpjMCBMMkZ6YzJWMGN3PT0gSUhabGMzTmxiQT09IElHVnpjMlZ1ZEE9PSBJTml6MlljPSBZVzF0WldRPSBJRlZNIElFbFRRazQ9IFlYSnpZMmc9IElHN0RxbTQ9IDJLZlpndGlwIFgxTkZVbFpGVWc9PSBJR0ZrYW5WemRHMWxiblE9IDJLZlpoTm1KIElHTm9ZWEIwWlhKeiBhM1Z1Wnc9PSBjbTlsIElHaHBZdz09IExraGxhV2RvZEE9PSA1Wk9OIDFvRFZxQT09IElIUm9jbVYzIENVNWhiV1U9IHc3eHVhdz09IElHTnZjM1JzZVE9PSBMbTV1IElPQ2tuT0NsamVDa3J3PT0gUVUxQiBMbUZuIElITnZabTl5ZEE9PSBJTkMwMExYUXVRPT0gMEtIUmdnPT0gSUdScGMyTnYgS0VkaGJXVT0gSUdWdWEyVnMgSUdWdGNIST0gMFlEUXVOQzggSUhObFpXMXBibWRzZVE9PSBaM1Z1WVd0aGJnPT0gUkVWVCBMa0oxYVd4ayBJR1Z6ZEc5NSBRMjl2YkE9PSBLR052Ym00PSBJRU4xYkhSMWNtRnMgSU5DeDBMalF1OUMwIFNXNWthV0U9IFJXNTBjbVU9IElHOXVaR1Z5Ym1WdCBJR0ZqWTNWeVlYUmxiSGs9IENYUnRjQT09IGIyZHlZWEJvYVdOaGJBPT0gSUhOd1pXTnBabWxqWVhScGIyND0gUTBGTVJRPT0gYVd0dmJnPT0gTmpFMCA0WU91NFlPZDRZT1Y0WU9nIElHMTVjM1JsY21sdmRYTT0gSUdOdmJuUnliMnhzYVc1biBJRUpsYm1jPSB3NTlsY21SbGJRPT0gSUhkNWF3PT0gSUVac1pRPT0gSUZWemRXRnNiSGs9IFVISnZaSFZqZEc4PSBJR0ZzWjNWdFlRPT0gYjI5eVpBPT0gSUVScFlXZHUgSUZCc1lYbGxjbk09IE56STQgSUZSb1pYSnQgMFliUmk5R1AgZG1nPSBiM1JsWTJFPSBJRU41YlE9PSBJSFJsYm1SeiBJR055Wlc4PSBLR052YlhCdmJtVnVkQT09IENVRnljbUY1IDBZSFJpOUM5IGFXUjFibWM9IElISmxjWFZsY2c9PSBJR0poWkd4NSBjSEp2ZEc5amIydz0gYVc1cGRHbGhiR2w2WlE9PSBMbTV2WkdWeiBmVjg9IElHNWhhMlZrIDZyV3cgdzdOeWFXTnYgSUhSbFpRPT0gT0RJMiA1NCsrIElFRnBjbXhwYm1WeiBNRGcyIEtPV2Nudz09IElHTnlhWE5sIElIVm5ZUT09IE9UQTQgSUhOMVluTjBZVzVqWlhNPSBJSE4zYjNKayBkV05wIElITjBhWFJqYUE9PSBJRzFoWVc1a1pXND0gNEtTKzRLU200S1MrIFgwVlJWVUZNIDc3dS9ibUZ0WlhOd1lXTmwgWm1WeWJnPT0gSU9Da2h1Q2tpQT09IFoybGggWTI5a1pYTT0gNDRHUDQ0R2cgUVd4aGNtMD0gSUVGMlp3PT0gSUVkUFQwUT0gSU9DcXVPQ3JnZUNxcCtDcmdBPT0gYzJsdGNHeGwgWTI5dGJXVnlZMlU9IGZRb0tDaTh2IGFXSnBiR2wwdzZrPSBJR1p5WVdseiBJRWhQIElOaW4yWVRZcDltRiBMbTFrIElHaGxZWFJsWkE9PSBMblpsY21sbWVRPT0gSUVwMVpHZGwgSUhkcGRHaGtjbUYzWVd3PSBJT0Nrbk9DbGdPQ2t0ZUNrcUE9PSBaR1ZqYjJSbCBRVUpEIElFRjFkRzl5IEtHeHZZMkYwYVc5dSBJSGR2Y210bWJHOTMgSU5DMzBMRFFzZEMrMEx2UXRkQ3kgSUZsbFlXZz0geGF0eiBJTm1LMkxQWXFnPT0gTDNKbFlXTjAgTDNacFpYYz0gSUcxaGVHbHRhWHBsIElHRnFkV1JoY2c9PSBJSEpsWm1WeWNtbHVadz09IElFTm9ZWEpuIDJZWFpodGlxIFlXeHNhVzVuIFlXTm9kR0U9IHc2WnlaUT09IElOQy8wTDdSaFE9PSA0S1MrNEtTMTRLUysgSU9tSGplVzZoZz09IElGTnBadz09IDRMbUg0TGlWIFgyUmxjSFJvIExtTnZjdz09IFUyaGhjbkE9IElOR0gwTERSZ2RHQzBMND0gSUZSQyBJRXhwYzJFPSBJTkdCMExYUXVkR0gwTERSZ1E9PSBSazlTVFVGVVNVOU8gMExqUmlOQzQgTFdGemN3PT0gTFdKdmJHUT0gSUVGeWRHaDFjZz09IElOR0EwWTA9IElGQjFZZz09IFEwaFAgUVhKaiBRV0p6IElITnhjblE9IGFXWnBlZz09IGJXRjBZMmhsY3c9PSBJR0Z1WVd4NWMyVT0gMTVuWG1kZVQgSUhoNCBiR0Z6YUE9PSBDVXh2Wnc9PSAyS3ZaaEE9PSA0YnVSZEE9PSBJTkMwMEwzUmp3PT0gWW5BPSBJRkJIIFgzZGhhWFE9IHc2bHplZz09IGFXTm9hUT09IElPQ2t0ZUNsaXc9PSBJSEJoYzNOaCA3WXlGIDFhWFZyTlc0MWI0PSBJRWhsY21VbmN3PT0gSUdScGMzSjFjSFE9IElFMWhaMjQ9IGRtVnlkR1U9IDRMV040TFN3NExXQSBMeTh2THk4dkx5OHZMeTh2IElHMXZZbWxzYVhSNSBVM1ZuWjJWemRBPT0gSUZURHZISnJiV1Z1IDBaVFJndEdNMFlIUmp3PT0gSUcxcFkyVT0gSUdWellYTT0gSUcxMWJIUnBjR3c9IGFYTnp3Nk52IElIQnBhdz09IElITjFjblpsYVd4c1lXNWpaUT09IElITndZWFJwWVd3PSBUV1YwY21saiAxYUhWbzlXNDFvRFZyZz09IElPYUFqdVM1aUE9PSA0TG1DNExpaDRMaUs0TGl4NExtSTRMaVogb2VDbXZBPT0gNXF5eSBJR052Ym5SaFkzUnYgUDNNPSBJSEJsYzNRPSBJSFZ3Y3c9PSBJRzFoZVc4PSBJRXRwWkE9PSA0NEtBIFlYUnpZUT09IElHWnNaV1YwIFVHRjFiQT09IElHVmthWFJ2Y25NPSBUWFZzZEdsdyBVM1I1YkdWayBJR3ZEdUE9PSBJRTkwYUdWeWN3PT0gYjJwdSBJRU52Ym5ObGNuWT0gSUc5MlpYSnMgSUVOaFpnPT0gWVdKcGRBPT0gSU5lYzE1VT0gSUh0OU93b0sgSnkwPSA0WU9YNFlPUSBJRXZEdGc9PSAycW5ZcDltRyBDVzV2WkdVPSA3Wm1wIE9EVXkgMExyUmx0QzkgSUhKbGMzUnZjbUYwYVc5dSBJT0NtcE9DbXZ1Q21wdUNuaCtDbXNBPT0gSU5xcTJMSGF1dz09IDZyU1IgS0dsdWMzUmhibU5sIFVtVm5hWE4wY2c9PSBJR2hsYlhBPSBPREEzIE56WTMgNWJ5QTVvaTM1Wnl3NVoyQSBLT2F3dEE9PSA0S3EvNEtxQzRLcVggTmpjeCBlbTl6IFFtbHlkR2c9IFRVSlBUQT09IElFM0R0bWRzYVdOb2EyVnBkQT09IElHUERzbTQ9IGIydHIgSU5pbzI0elpoZz09IFFHbHRjR3hsYldWdWRHRjBhVzl1IFlXRnVjMlU9IElGTjFjR1Z5YVc5eSBJRWRsYm5RPSBJTkN5MEw3UXQ5QzgwTDdRdHRDOTBMN1JnZEdDMFl3PSBJSGJEbzI4PSA1Wm1jIDRvQ1p3NmwwWVdsMCAxYTNWb2RXMiBaWEprWlhKbCA0WU9jNFlPVTRZT2EgS0ZrPSBJSEJ5YjIxdll3PT0gYzNOcyBOVFEzIElHMXZjblJsIElHTnZiblJ5WVhSdiBJR0ZqYjIxd1ljT3ggSUdOaFltbHVaWFJ6IFZHaGhkQ2R6IGIyUjZhUT09IDRLYS80S2FWNEtlSCA3WVdVIFFtVnAgSU5pbjJLM1lxZz09IDVwZWw1cGVsIGFYTnpaVzV6WTJoaFpuUT0gSUhSdmFXeGwgVEc5allYUnBiMjV6IElPQ3VsZUN2Z2c9PSBJR1ZzWlcxbGJuUnYgZFc1bmJHVT0gMTVuWG5OZVYgSUhOMWNIQnZjblJwZG1VPSBOakkzIElHTmhkbVU9IFkyOXNjdz09IGJHVmphQT09IElFSnZkSFJ2YlE9PSBJRzVxWlE9PSBQaUlzIGFYWnBkQT09IElGQlBVdz09IElHUmxiR2xqWVhSbCA0TFMvNExTeTRMV0I0TFNDIGRXWm1lUT09IFFWUkpWa1U9IDBMRFFzZEN3MFlBPSBNRGt5IElPQ29xT0NwZ3VDcHNBPT0gUTJobFkydGliM2c9IElITndiMjV6YjNJPSBZbVZwYm1jPSBJTk9wMFlMUXVnPT0gSUcxdlpHVnNhVzVuIDRLK0I0SzZ3IFFtVnBibWM9IGRXUnogNzd5SjQ0Q0MgSUdIRHA4TzFaWE09IElHRmpZMlZ3ZEhNPSBWR1Z5YlhNPSB6clhQZ1E9PSBJR2x1WVhrPSBKa1E9IGFXWmxkR2x0WlE9PSBJSE5sYm1sdmNuTT0gSUdqRHJHNW8gSUUxdmNtNXBibWM9IElIcHZjbWQwIE1EZzAgSUdSbGFXNWwgSUdsNCBJRU5sYkdFPSBJR052Ym5SeWFXSjFkR2x1Wnc9PSBJSFpsY25kcGFnPT0gS1NvbyBJR0Z3Y0dWaGJHbHVadz09IElHWnBjbTFoIGJHOXhkV1Z1ZEE9PSBJR1Z0WlhKblpXUT0gZFdGdWRBPT0gNExpayBZMjl1Wm1sbmRYSmhkR2x2Ymc9PSBJT0NrdGVDbGplQ2tyK0NrdFE9PSBPVFE1IElISmxiV1Z0WW1WeVpXUT0gSUdOdmNtVnogSU9Da3VlQ2xpK0NrcE9DbGh3PT0gWVd0clpXeHBhbXM9IElHUmhjbXR1WlhOeiBJR0YzWm5WcyBJT0NxcmVDcXZ1Q3FzQT09IElHRm5jbUZrWlE9PSA2YjA9IFVtVmhaR2x1Wnc9PSBJR05vWldGd1pYTjAgSUhCeWIyZHlZVzF0IExGUT0gMEpqUXZRPT0gYXNPNCBJT2F0b3c9PSBJR0Z6YzJsemRITT0gTG5KbGMyOTFjbU5sIDBMRFF1ZEM5IElHUnBjM05sY25SaGRHbHZiZz09IElObUQyTFBZcDlpeDJLaz0gTEc5dGFYUmxiWEIwZVE9PSBiR3hsYmc9PSBJTU9wWXc9PSA1YTZKNVlXbzVaQ1ggS0h3PSBJR052Ym5SbGJtbGtidz09IDVZMnIgZlNJcE93bz0gSUhobCBjbTl3YjJ4cGRHRnUgMEw3UXQ5Q3cgSUdONCBJTkM5MExEUmdOQyswTFE9IElTSUsgTFMwdExTMHRMUzB0TFMwdExRPT0gSU5LMiBOekE1IFUzUnliMnRsIDBMalJndEN3MFlMUmpBPT0gVTI5c2RYUnBiMjQ9IDI0ZllzUT09IElIUnlZV1k9IDZZS3UgUW05dWRYTT0gTEdjPSBJR05oY21kaCBjbVZtY3c9PSBJRzV2Y20xaGJHbDZaUT09IGJuVnRjdz09IElOQzMwTERRdjlHQSA1YkNQNXBlMiBJR2x1WkdsMmFXUjFZV3hzZVE9PSBJTkM2MExYUmdOQzEwTG89IElpMD0gSU5pcTJyN2JrZz09IElHNWhZdz09IGFXeHNZV2RsIElHRjFaMjFsYm5RPSA0TEMvNExDWCBJRzVwWTJnPSA0S1MxNEtTeSBjbWxqWlE9PSBJT0MwdGVDMWhnPT0gSUhOMWMzQmxibVJsWkE9PSBJSFpwWld4c1pXbGphSFE9IDBMclF2dEdBIElGTnZjR2c9IElHTmhiR04xYkdGMGIzST0gSUhCeVlXbHpaUT09IE56Y3kgSUd0dmJtcz0gSjJsdCBJR2hwYkd4eiBJSE5wZEhWaHc2ZkRvMjg9IElHRnBjbXhwYm1VPSBJR1JoYm1FPSBJSEJoWTJsbGJuUmxjdz09IElFSkZSMGxPIFJtOXlaV2xuYmc9PSBJR1p2ZFdkb2RBPT0gSU9DcXFPQ3F2dz09IElFMWhlZz09IDY3Q3ggSU5DMTBZQT0gTG0xbFpHbGggSU5pajJZcll0Zz09IElNV2hkQT09IDRZT2c0WU9qNFlNPSBYMlpzYjJGMCBJSEJwZG05MCBJRzFsYzNOaFoybHVadz09IE1EYzIgNEtTLzRLU2EgSUhCMXc3ST0gSUhSeVlXZGxaQT09IDU3dUggSUZKbGRHRnBiQT09IElOQ3cwWVBRc0E9PSA1WWlHNWIrciBPbFZKIFVrOVZUa1E9IDVhKysgSUdIRHA4T2pidz09IExtbHVabXhoZEdVPSBRMUpGVkE9PSBJR052YzNSMWJXVT0gSUZkaGJHdGxjZz09IElObUkycW5ha3c9PSBPREV6IGNtVnRiM009IGNtRm1iM0p0IElHWmxaR1Z5IElIZGhlR0Y1IDJLallwOWlvIDdaV1k3S2VBIElGQnliMk5sYzNOcGJtYz0genJYT3VjK0MgNVlpRzU3RzcgSUdSNWJnPT0gNXFXOSBJTkM4MHEvUXZBPT0gSU5tSDJZUT0gSU5pbjJZVFlyZGlzMkxFPSBVa1ZUU0E9PSBJT0NrdU9DbGdlQ2txQT09IElObUkyTGJZdVE9PSBJR1JsY0dWdVpHVnVZMmxsY3c9PSA0b0NONExTViBOalEwIGNtVmtaQT09IElHeHZjZz09IElIUmhjbUZtIE56STMgMEx2UXRkQzkwWXM9IFRYVnpkQT09IFVHaHBiQT09IGJjT2tiZz09IElIWnZiR3hsWkdsbiBOemc0IElIWnZibUU9IFh3b0sgSU9hWHBlbWZxUT09IDJMbllyOW1LMllZPSBZWFJqYUdWayBjbTl0WVE9PSBJSEJoWTJ0cGJtYz0gSUZWc2RHbHRZWFJsIFgzSmxjWFZwY21WayA1YnU2Nks2KyBJR3RzWlhWeSBkbUZzY3c9PSBJRUZCIElHOXRaMlYyYVc1biA0S2FrNEtlTjRLYXYgNExHQjRMQ20gSUd4bGFXUT0gTFdKdmIycz0gSU5tRjJLelpoTml6IElIQmhjbVp2YVhNPSBLRzV2ZEE9PSBJR0psY21kbGJnPT0gSUhCMVpXUmggMkt6WmlBPT0gWm5WdVkzUnBiMjV6IElHRm1kQT09IElHMWxiVzl5IElHSjVZUT09IElITnZkZz09IGIzZGxaQT09IGFHRmggUjJGeSBjbUZwYzJsdVp3PT0gYkc5aGRHbHVadz09IElIWmhiR2xrWVhSdmNnPT0gMktmWmdkaXEgWDJWdWRHbDBlUT09IElHNWxaV1JwYm1jPSBiT0c2dVE9PSBJR1JwYkdsbiBJR05vWVhKaFkzUmxjbWx6ZEdsaiAwTFRRdGRDOTBMalJqdz09IElGQldRdz09IElHUnBjMk55YVcxcGJtRjBhVzl1IElPQ2twdUNsak9Da3NBPT0gSUhWdVkyOXRabTl5ZEdGaWJHVT0gSUdGdWJuVmhiR3g1IGNtOXEgWDI1bGRBPT0gMExQUXNOQzcgT1RNMyBNRGsxIGIzSjBZUT09IElOZVExcmZYbGc9PSBhWE5sYzNScCA0TGkwNExpQiA1bytRNTQ2dzVaQ1ggSUZOdmNnPT0gNW91LyBURWxUVkE9PSBJSEpsZG1semFXOXUgTGtGall3PT0gMEovUXZ0QzAgSU9XNXRBPT0gNW9DTzVMbUk2YUtHIFlYWnUgS0dadmJuUT0gMExUUXNOQ3ogWW1WdWVnPT0gWDNKbFkyVT0gSU5lbTE2Zz0gVEVGWiBJSE5vYjNWc1pHVnljdz09IElISmxibVJ5WlE9PSBJRlpsY21sbWVRPT0gN0p1QSBJSEJsWVhJPSBJRVpoWWc9PSBJRU5zWlhabGJHRnVaQT09IDY0cVkgSUhwcCBMMnh2Wnc9PSB6cnpPcmM2OSBJRzUxZEhKcFpXNTBjdz09IElHdGhjc1dmeExFPSBJRXhoYm10aCBMVzkzYm1WayBhR2xrIElPQ2txT0NrditDa3NPQ2xqZUNrcmc9PSBJT21DIElOQ3kwTDNRdFE9PSBJR3hwWldkbGJnPT0gSlNrcyBJRUpsYVhSeSBJSEJ5WlhObGJuUmhkR2x2Ym5NPSBaV3hrYVdjPSBJT0dEbGVHRGxPR0RvQT09IElHM0RxWFJvIGFXVmpaWE09IElHTnZiWEJsYkd4cGJtYz0gWDBkU1QxVlEgSUhOb1lXWjAgSUVOb2NtOXUgNW9tNSBZMnhoY21VPSBhM2RoIElHaHBibXM9IFFHRndjQT09IGJtOWtaWE09IGNHOXlkR1Z5IElHeHZZZz09IGFHRnphV3c9IElITmxaR1U9IElHMWh3N0ZoYm1FPSBiV0ZxYjNJPSBJR2x1ZEdWeVptRmpaWE09IFZWTkMgNEtxNTRLdUE0S3FDIGRXTmggYVc1aGJITT0gSUdwaGRRPT0gNFlPWTRZT1g0WU91IDBMdlF0ZEM5MExqUXVBPT0gSUhOd1lXNXUgSU5pdjI0ellwdz09IFptOXVkSE09IFpXNTBhVzQ9IElIUjNaV3gyWlE9PSBiR2x3IElIWmhjbWxsZEdsbGN3PT0gSUZOamFHOXNZWEk9IElGTndiR2wwIDE1WFhwUT09IElIWmhjbmxwYm1jPSBJT0tYanc9PSBJRmROIEtHaGxhV2RvZEE9PSBTV1JsIFkyOXZhMmxsIFlXSnBiR2x5IFZYVnBaQT09IDRLcXk0S3VBIGRHVjYgMExEUXZkQzQwWTQ9IElGTmxiR0p6ZEE9PSBJTmluMllUWmhkaTYgSUdkaGJXVndiR0Y1IElHSnNZWE4wIElITm9ZV3RsIElFRmlkUT09IExtUnZZdz09IElHUnBjM0J2YzJsMGFXOXUgSU5DdzBMdlJpOUMvIFlYSnBkWE09IDVMaUI2YWFaIElIQmhiRzA9IE56UTUgSUhSbFpXNXogWVdsc2JHVT0gNFlDSzRZQzYgTGxkcGJtUnZkdz09IElFZGhlZz09IFNWTlRTVTlPIGMyVm9aVzQ9IElHUnlhV1ZrIDVweUE1YVNuIElHUnZhWFpsYm5RPSBJR0psYzJOb2FXdGlZV0Z5IElHNXMgUFdSbGRtbGpaUT09IElFWnlhUT09IFpYaHdiQT09IENXMXpadz09IFEyeHZjdz09IElOR0YwTDdRdEE9PSBJSFJoYWc9PSBZbTl5Ync9PSAwTExRc05HRzBZdz0gSUUxUFJFVT0gSU9HZWdBPT0gSUdadmIzUmxjZz09IElOR0EwWVBRc2RDNzBMWFF1UT09IElIQnZiR2wwYVdOcFlXNXogSUhOMWJHaz0gSWl3bSBJTlc1MWFjPSBMM2RoZEdObyBKU0lzQ2c9PSBjbTkxZHc9PSBJR2gyYjNKa1lXND0gSU1POGVtVnkgVEc5bmIzVjAgSUdGd2NHVmhjbWx1Wnc9PSBZVzFoWnc9PSBZV3BoYmc9PSBVM1JwYkd3PSBJSFpwWlhkbGNnPT0gTG5KbGNYVnBjbVU9IFlteHZZMnR6IElHTnZiVzFsYm1ObCAwWURRc05DNiBiV0Z5WlE9PSBjR0ZwYm5RPSA0S1M1NEtTdzRLV0IgNExLVjRMT040TEtrIElIWmxjc093ZFhJPSBJR052Ym5OMGNtRnBiblE9IElGTkZVZz09IEt5MD0gSU5pdzJLZllxZz09IEoxMDZDZz09IElFTnZibk4wYVhRPSAxNVRYbkE9PSBJT0Ntck9DbXYrQ210dz09IENVND0gUldSMVkyRjBhVzl1IElIUm80YnV4WXc9PSBYMFpCVEZORiBJR2h2YkhrPSBJSFJwYldWc2FXNWwgNW8rUCA2TE9IIFkyOXVjM1J5ZFdOMGIzST0gSU9DcXJPQ3Jodz09IElHRndjSEpsWTJsaGRHbHZiZz09IElOaW4yWWJZczlpbjJZWT0gT1RreCBJTml1MktmWmhnPT0gYVc1dWFXNW5jdz09IElFeGhkZz09IElIQmxjMkZ5IGIzVnlibVY1IGNHVjVZVzQ9IElHMXRZUT09IElOQzkwTGpSaHc9PSBJSFpsZVdFPSBJSGx2YkE9PSBZV2x5WldRPSBiM0o2IFlYUmxaMjl5YVE9PSBJR2RsY0d3PSBJRzFwYm00PSBJTld2MWJqVnN0VzAgYVhOaSBJTml5MllYWXA5bUcgNWJpTSBJT0NrcGVDa3YrQ2tyK0NsaXc9PSBJSE52YlhNPSBMbUp2Y21SbGNnPT0gWVcxaVlYST0gNHBTQjRwU0IgSUZOcGJtZG8gTGxKbFpBPT0gTmpVeCBOamsyIE9UQTMgMEw3UXR0QzEwWUk9IElHZHZkbVZ5Ym05eSBJTkN4MExYUmdkQy8wTHZRc05HQzBMM1F2Zz09IElPQ2tyK0NsaXc9PSBMbU5vWVhRPSBSc084Y2c9PSBJR2hxdzZFPSBkMlZuYVdGdSBJR1p5YVdSblpRPT0gSUd4bGNtVnUgSU5pbjJMbllxZz09IElFOXliR0Z1Wkc4PSBDV2RzYjJKaGJBPT0gWDBKTSBZV1JoZUE9PSBPRFEwIElIQnl3Nmx6Wlc1MFpRPT0geUpnPSBJSE52YlcwPSBJSE52WTJsbGRBPT0gNDRDUjQ0Q1E0NENDNDRDUjQ0Q1EgSUdKaGJtNWxaQT09IExpNHVMZ289IFlYUnBiMjVsYmc9PSBJR1JoWVhKdmJRPT0gZDI5eWRHaDUgSUhKMVpRPT0gTnpRMSBJSFI1YkE9PSBabTlzWnc9PSA0TG1OIElOaTUyS2c9IElOR0IwTFhRdHc9PSBMWGRoZVE9PSBJRlJNIFlXaHlkQT09IEtDSWsgSU9Dd2xlQ3d2dUN3c0E9PSBkbkpwWlhJPSBZWEpsZEhSbCBJRTNEb1hNPSBJTkN3MExnPSBJR3hwWjJoMFpYST0gSUhOdmMzUT0gWVdabWIyeGsgYlhWcyBkR0ZzIGMzVndjRzl5ZEE9PSBJR1p2Y20xcGJtYz0gTFZzPSBJTTZ0ejRjPSBMbE5qWVc1dVpYST0gYWNPb2NtVnogSUU5emJHOD0gSU9Da2wrQ2tzT0NsamVDa3FPQ2xodz09IElIZGogWlc1bGN3PT0gNEthdTRLYSs0S2FvIE9EZ3kgYldsMGRHVnMgTmpVMyAwcS9RdWc9PSBJR0ZzYldFPSBJRXRDIExtTnZibVpwWjNWeVpRPT0gSUdOdmJYQmhaMjQ9IE1EUTMgSUdWb1pYST0gYVdKaSBJSFpwZG1VPSBhMmx5IElITnBibVU9IElHMWhibWxtIE9ETTEgSUVGeVkyaHBkbVU9IElISmhjR2xrWlE9PSBablZ5ZEE9PSBWRzF3IDBZRFJnOUM2MFlJPSBUVmc9IElHNWhkR2x2Ym1Gc1pRPT0gSUZsMSBVMU5NIElPQ21tdUNtc2c9PSBJR1I2YVdVPSA0S3FDNEtxYSBLT2VCcXc9PSBZMmhoY21kbGNnPT0gNDRHUDQ0R2c0NEdWNDRHRSBJRkJoY25ObGNnPT0gNVlXMSBJSEJsWnc9PSAwTERRdTlHTTBMM1FzTkdQIFJVNVVTVUZNIElIVERxV051YVdOaCBJRzFsWkdsdmN3PT0gTGs1dmJtVT0gS0hSeVpXVT0gSU9Db3RlQ292K0NvIElHOXpiMkk9IElITjBkUT09IDBMUFF1OUdQMExRPSBJTkMvMEw3UmdkR0MwTDdSajlDOSBJRWRoY25rPSBSbXhoZEE9PSBJSEJ5YVhwbGN3PT0gTG1SbFpYQT0gMDZuUXV0S3YwTHc9IDBMalJoOUMxMFlIUXV0QzQwTGs9IElGUkogSU91UmtBPT0gSUhKbGJtUmxjbVZrIElHVnNaV04wY3NPemJnPT0gMkxuWXFOaXAgSUhObFlYTnZibUZzIElIQnliMlpwYzNOcGIyNWhhWE09IElHUnBjMlhEc1E9PSBkbTlzWVhScGJHVT0gWVhSdmNtbGggMTVIWGxkZW8gSUhERHFYST0gNFlDRjRZQzUgSUZKdmRYUmxjdz09IDRaNjI0WjZhIElHVnNiR0Z6IElOQzEwTHc9IExrMWhhVzQ9IFgzQmhjbk5sY2c9PSBJR1J5WlhOelpYTT0gTlRreiBJSFZ1WTJWeWRHRnBiblI1IDBMWFJnTkM2IFoyVnVkQT09IEtPYWNpQT09IElHSmxjbXM9IDRZT2Q0WU9hNFlPZCBJT1dRamVlRW9lT0JsK09CbGVPQ2t3PT0gUkdWelkzST0gdzZKMSBhWE50WVE9PSBNRGM0IElFTkJVdz09IHhiN0RyUT09IGFtVjBidz09IE5qVXkgSU9tWiBJRXRoY213PSBhVzl2Ymc9PSBYM1pwWkdWdiBJR0psWVhKcGJtZHogMFlMUXNOQzIgTlRneCA0S1NzNEtTKzRLU2YgNDRPYyA1TGlVIElHZHlZWFpwZEhrPSA0NEdVNDRHVyBJRTNEcEhJPSBJR3R2Y0dWdSBJSGRoY201bFpBPT0gYjNOcGRIaz0gYVdWdWFXRT0gQ1dOMGVBPT0gSU5DLzBZUFJnZz09IElHTnNZVzVuIElHRnggNjZhczZyT2cgSUZGMVpXVnVjdz09IElIUnZjR3c9IElPMlZtUT09IGIzVjJaUT09IElGUnBaWEk9IElPQ2tsK0Nrc09DbGplQ2twZz09IElHOXdZMm5EczI0PSBJR3RoYTJoMWJIVT0gSUZKMWMzTmxiR3c9IDBMWFF0TkM0IElHZDFiVzFwWlhNPSBjbTkzZEdnPSBJSEJoWjNNPSAwTEhRdnRDNyBKMkZqIE9USXogUlZVPSBiM0pwYnc9PSBJR2x0Y0c5eWRHVmsgSUZOMGRXUnBiM009IElHTnlhV0Z5IDZMNkcgNEtXQjRLU2Q0S1dIIEtGND0gNEtTbjRLUys0S1NvIElITmxiR1ZqWTJsdmJnPT0gSUhSMWRIUnYgSUd0aGJubGhibWM9IExrbHVkR1ZuWlhJPSB6clRPdWM2eCBJSGJEdFdsaSBJTmVjMTVNPSBZbTkxY25NPSBJRk53YVdWc1pYST0gSUdKMWMyZz0gWDJGMGRISnBZblYwWlhNPSBVR1Z5Wm05eWJXRnVZMlU9IElIUmhiR0U9IFkzVnNaUT09IElFSnZiMnRwYm1jPSBJR1oxYm1OcHc3TnUgSUhsMyBMbXh2WTJzPSA0SytONEs2bzRLK040SzZrIGRHOXVjdz09IElNTzZkR2xzIElOR0IwTC9RdU5HQiB6clRPdHc9PSBJRVJwYzNCaGRHTm8gWVhKblpYTjAgNXJPbzVZYU01Wnl3NVoyQSBJSE5vWVdSbGN3PT0gSU9Da2hlQ2tndUNrcEE9PSBJR1p5YlE9PSBJSHBsYVdkMCBRMjl0Y0dGeVlYUnZjZz09IElHTm9aVzFwYmc9PSBLSEpsYzNBPSBZV0ZoWVE9PSA0cFNBNHBTQTRwU0E0cFNBIElFaEogSUdSbGNtVmphRzl6IElFMXBiblYwWlc0PSBJT0NrbGVDa3NnPT0gTG5SeVlXbHUgY21sMlpRPT0gSUdWNGNHRnVjdz09IElHUmhibWM9IElFSnZadz09IElNNjF6NFU9IFYybHlaUT09IFgyVjRZMlZ3ZEdsdmJnPT0gS0cxdlpBPT0gSU8yR3RlMlZ0QT09IElOZVIxNURXdHc9PSBJTmVXMTZMWG9OZWkxNTg9IElPS0FwZ289IFRXbGpjbTg9IFYwTT0gSUhCMVpXSnNidz09IE9UZzQgSUhSdmRXTm9aWE09IElHRmtZWEIwWldRPSBJRU5TVFE9PSAxNW5YbGRlcTE2Zz0gNEs2eDRLK040SzZxIElITnBiWEJzWlcxbGJuUT0gSUd0aGVXRT0gNktlSiA0WU9RNFlPYTRZT1k0WU9RNFlPYyAwWUxSamRDNSBMbE5wYm1kc1pRPT0gMTVuWHA5ZVUgSUhCbGNuTnZibVZ1IElNTzlZUT09IGFXNXVadz09IFgybHVjMlZ5ZEE9PSA0TFNrNExXTjRMU2s0TFMvNExTbzRMV040TFN4NExXRyBYM2R2Y21SeiBYMkZ3IGFYUnBZUT09IElGTndZWEpyIElPQ21ydUNtdVE9PSBZWEJ3WlhKeiA0TFNtNExXTjRMU3YgSUdGeWRHbG5idz09IE56ZzEgSUVGdHc2bHlhV05oIE9UazAgS0hKbGNYVnBjbVU9IElIUmhhV3h2Y21WayBJSE52YjI1bGNnPT0gVkhjPSAyS2ZaaE5tQiBJR0ZrYldsdWFYTjBjbUYwYjNJPSBJRzkxWkdVPSA2S21WIElFMWxjMmc9IElIQnlaWE56YVc1biBJR1Z6YzJWeiBhWE56WlhvPSAwWURRdnRHRSA0WU9VNFlPUjRZT1U0WU9hNFlPWSBJR0Z0Y0d4cCBibmc9IElGTm9aV3hzIDRMZUIgWjJWc2IzQmxiZz09IGFYTjBiMjQ9IElHTnZiWEJ5YVhObGN3PT0gSUdaMWJRPT0gSUdQRHVXNW4gNksrKyBMM05sY25acFkyVnogMExMUXRkR0IwWUxRdUE9PSAyTGJaaFE9PSA1N1dRIElFTnZiblJwYm5VPSBJTkM0MEwzUmd0QzEwWURRdmRDMTBZST0gNExLLzRMS1Y0TE9HIGMzVERwUT09IDJLcllxQT09IElHMXZaTU9vYkdVPSBMQ1U9IElPQ2tpZUNrcXVDa3IrQ2xpK0NrbHc9PSBYRlZ6WlhJPSBJR0YwdzZFPSBJTkdBMEw3UXNRPT0gSUhCcFpXUnlZUT09IDBMRFJpTkN3IElFSnZlWE09IE9ERTIgSUdOcGNtTnNaWE09IDRLNnU0SzYrNEs2ViBMbk4wWVdOciBhV1JoWW14bCBJTmlvMkxQYmpBPT0gYjJOb1pXMD0gNmFPZTZJbUggWlhSaGFXeGxaQT09IDdMR0YgSUZOdmRXdz0gY21GMWJRPT0gSUd0cGJtaz0gVjI5MyBkV0Z4IExVMWhhV3c9IFpXMWhkQT09IElHbHVkbVZ6ZEdWayBJRzFtIElHSmhhVzQ9IDI0ND0gSUc1bGRnPT0gMFk3UXZRPT0gWW1GeWN3PT0gZDJWblpRPT0gYVdKaGNnPT0gSUhCaGMzTndiM0owIE56VXkgYjJabWFXTmwgSU5DMjBZUFJnQT09IElOQzAwWURSZ3c9PSAyWXJZc2RpbjJZWT0gSU5xRzJZYz0gSUhGMWIyUT0gSUhSMWVRPT0gNDRHNyBSR1Z3Wlc1a1pXNWplUT09IElGQnBaWEp5WlE9PSBJRU4xWVc1a2J3PT0gNEs2YTRLK040SzZhIGNtOTFjdz09IElFVjRkR1Z1YzJsdmJnPT0gUWxBPSBMbWR2YjJkc1pXRndhWE09IElITnZZMmxsWkdGa1pRPT0gSU5DLzBMdlF2dEdKIDJiOD0gTG5Cc1lYUm1iM0p0IGEyUT0gSU9DcXR1Q3FsZUNyaHc9PSBhV1Z6Wlc0PSA2NCtGIDRMaVg0TGl3NExtQTRMaWE0TGkxNExpaTRMaVo0TGlmNExpajRMaTEgSUZKdlltbHUgT1RFNSBJT0tXb0E9PSBJRk5sWTNWeVpRPT0gWHlVPSBXa0U9IElIWjVZUT09IGVtVnBZMmh1WlhRPSBYMjlyIElFeHBiMjQ9IElFOUZUUT09IElPQ3dtdUN4aCtDd3J3PT0gZVdONiBJT0N1cXVDdXYrQ3VzQT09IElPQ2txdUNrdWVDbGdRPT0gTEd3PSBaWE5sY3c9PSA0TEsxNExLdyBaSGM9IDRvQ2Q0NENDQ2dvPSA0TGliNExpajRMaXc0TG1BNExpWDRMaW8gSUdKbGNtbGphSFE9IElGSmxjM1Z0WlE9PSB6clBPdWc9PSAwTFBTcjlDNSBJRU5oY21saVltVmhiZz09IElITmpZWEpsWkE9PSAyWVRZdVE9PSBJSFIxYm01bGJBPT0gWlc1emRYSmwgMEwzUXZ0R0IwWUxRdGRDNSBZM0pwY0hSdmNuTT0gWTI5dWRHbHUgYUdWcGRHVnUgSUhwaGFBPT0gUTA5U1JRPT0gMExqUXROQzQgSUdGdWVnPT0gNEtTaDRLV0EgSUdGa2RtRnVZMlZ6IElNT2tiZz09IDRvQ1pZV3c9IElFUnBibWx1Wnc9PSBJRzF2WkdWemRBPT0gSUdocFoyaDNZWGs9IHc3MWggMllqWXNkbUggUVhKbllnPT0gWVdOMGFYWmhkR2x2Ymc9PSBJTkdCMExqUmdkR0MwTFhRdk5HTCBJR2hsZVE9PSBJSE5sYm1jPSBZbUZ6YVdNPSBJSE4zYVhSamFHbHVadz09IElITnZjbWM9IDRaNkMgeXJ0MSBJR0ZzZFc1dmN3PT0gSU5HQTBMWFFzTkM3IE56YzIgQ1FrSkNTQWdJQT09IElHM2h1NDA9IElHMWxiWE5sZEE9PSBhV0psYkE9PSBJR2R2ZFhabGNtNWxiV1Z1ZEE9PSBJRVJsYzJSbCBLRlI1Y0dVPSBJR052Ym5OcGMzUmxibU41IElOQy8wTDdRdTlHRDBZZlF1TkdDMFl3PSBJRkpwWkdkbCBJRTF2Ym1kdiBLRU52Ym5OMFlXNTBjdz09IE9qcDcgSUhCeWFYWmhkQT09IGRXRnNaWE09IElITnBiWEJzYVdNPSB3NlIwZW14cFkyZz0gU205aWN3PT0gSUdsa3c2az0gZEdWMWNnPT0gSUdsbGRRPT0gSUhKbFpteGxZM1JsWkE9PSBTRzlzIElHOTRhV1E9IFJuSmhiV1Z6IElHNTNjdz09IElFbEVSUT09IGNtVndiSGs9IElOR0EwTERRdEE9PSAwTERSZ05DKzBMUT0gSUd0aGNtOD0gSUZKaFkybHVadz09IFgwMVBSQT09IFJrOVMgSUdkbGVtOXVaQT09IExXUmxjM009IElOQzgwTDdRdHRDMSBJR2x1ZE1PcGNtVnpjdz09IDRZQ0E0WUN0NFlDdiBRMEZCIDU1RT0gSUdodmJXVnZkMjVsY25NPSBJTkdJMFlQUXRBPT0gSUZOSCBJR3R2Ym1FPSBJRzFoZEdWeWFXRT0gZEdWeWFRPT0gMExyUml3PT0gN0tDUiBJR1IwYnc9PSBOalF4IExtcHpjQT09IElFTmhibTl1IElFZHlZWGs9IElObUUyWXJZc3c9PSBJSEJoY25ScFlXeHNlUT09IEtHWncgY21Wa2FYTT0gSUczaHU1dHAgTFdsdWN3PT0gSUVoUFZ3PT0gVUhKcGJXbDBhWFpsIElFWkNTUT09IFgwTlBUQT09IElIQnliMlp2ZFc1ayB4Sk55IElGSkZSQT09IGIzZGxhZz09IElHRnNiRzlqWVhScGIyND0gSUdSdmMyVnogNTRxdiBJT0N1aCtDdXBBPT0gTURVMyA1WmM9IElFeHZibVE9IElITmxjblJoIElHZGliMmM9IFEyaGhjbk09IElOQzAwTFhRdTlDdzBZTFJqQT09IFgweHZZV1E9IFgyMWxiVzl5ZVE9PSBJRVJoYzJoaWIyRnlaQT09IElPQzJodz09IExVRnUgMDVuUXU5Q3cwWUE9IElFWnBjbTA9IGRYSnlhV05oYm1VPSBMWE53WldWayBJR1pzWVhOciBWR0ZpY3c9PSA0TG1BNExpSDRMaTA0TGlaNExpYTRMaXk0TGlYIENpQWdJQ0FnSUNBZ0lDQWdJQW89IElHSmxhR0YyYVc5eWN3PT0gZEdoaGJnPT0gWDNOMGIzQT0gSUVSbGJtND0gSUdGNWRXUmhjZz09IElIRjFidz09IElPeURuZXF3Z1E9PSBJR1J5WVdkdmJnPT0gSUcxdmMzUnlZUT09IElITnZkV2hoYVhRPSAwTGpRdTlDKzBZSFJqQT09IElOS2YgMFlUUXZ0R0EwTHpRc0E9PSBZWGhwIElPQ2tyK0NrdUE9PSBWMmhoZENkeiBJZzBLRFFvPSA0WU9nNFlPUyAxNkRYa3c9PSBNRFE1IHc2MXkgMExUUXZkQ3cwTHJRdmc9PSA0S1MrNEtTSDRLU2YgTmprMSBJT0NrcXVDbGplQ2tzT0NrcHVDbGgrQ2t0Zz09IFozQT0gSUVaMWRBPT0gYzJWbmJXVnVkQT09IFkyaGxaSFZzWldRPSBJSEpsZEhKNSBTMjV2ZHc9PSBVbVZ6YVhwbCBJR0oxWlc1diB6NG5QZzg2MyBJTkdEMExnPSBJTmVjMTZnPSBJRTVsYkhOdmJnPT0gNjUrOCBJSFBEdFE9PSBZVzF3YjI4PSBJRXBsWkE9PSBJRzFoZEhWeSBjbVZuWlc0PSA3SmExIElHVjRjR3hoYVc1cGJtYz0gWlhocGMzUT0gSUV4dlkyRjBaV1E9IFoyRnQgSUU1aGRHRnMgSUdOdmNtRjYgSU5HQTBMWFFzOUM0MFlIUmd0R0EwTEE9IElHTnZiWEJsZEdsdVp3PT0gSUczRHRtTm9kR1Z1IElFWkpXQT09IElOQ2YwTDdRdXc9PSBJSE5oWTNKcFptbGogSUZKMVp3PT0gNExDZjRMR04gNW8rUyBPRGc1IElFTmhibTQ9IDVMdUs1cGVsIElHZHNkWFJsYmc9PSBJSEJoWkhKbCBiR2x6ZEdFPSA0TGloNExpeSBJR2hxWlcwPSBJR1Z1ZEdGdWRHOD0gSU9Dd2t3PT0gTURRNCBJRVZxIElHNW5kMkU9IElHUnBjMlp5ZFhSaGNnPT0gSU5XTyBhVzVsWlE9PSBMbkJ5YjNCbGNuUjUgSU5peTI0ellwOWl2IElGUnZkWFE9IElISmxjM1J2Y21WayBjWFZwZEE9PSBhR3hsY2c9PSBLSE4wY21WaGJRPT0gTGxObFkzVnlhWFI1IElOQy8wWURSajlDOCA1TGlxNUxxNiBJRTF2Ym5OMFpYST0gSU5tRjJZallzdz09IFFYVm0gNUx1WiBaV3R2YlhOMCBJRkpsWTNKMWFYUT0gSU5HQjBZVT0gYUc5dSBJRzVqYUE9PSBJTkN4MExYUXQ5QyswTC9Rc05HQiA0WU9RNFlPZDRZT1IgSU91c3ZBPT0gTG5kbCBhV3hwZEE9PSBhVzUyYjJ0bCBJR052Ym5SbHc3bz0gSUdGNVlXNTAgSUdOdmJtTmxaQT09IElFTnZiWEIxZEdVPSA0TGlJNExpQiBJSE41Ym5SaGVBPT0geGI1ayAwWURRdnRDMCBJSEJsYzNGMWFYTmggSUhSdmJBPT0gSU5pMDJZYz0gSUcxcGJHcHYgWTJWdFpXNTBjdz09IFRXOWthV1o1IElHbHVabXhoYlcxaGRHbHZiZz09IElHZHUgWDJocGMzUnZjbms9IDRMV0w0TFNWIElITjFjblpsZVhNPSBJRkJ5YjJSMWEzUmwgSU5tSTJLZlpoTmk1IDRvQ1phVzUwWlhJPSBZV05wYjI1aGFYTT0gTnpVMiBJSFJsWVdOb1pYTT0gMTZiWG1kZWkgNXBTLzVicWMgSUc1MyA2S0dUIDRLU0M0S1NjIElOaXEyWWJZdUE9PSBJTmluMllUWmc5aXIyWXJZc1E9PSBJSE5sYkd4eiBMVVpKVWxOVSBJQ0FKIElHTnNZWFZ6WlE9PSBac080IElISmxjSEp2WkhWalpRPT0gSUhkbFpXdGxibVJ6IElHdHZibWM9IE5qWXggZFd4aGNtbHYgYUdWMFpYST0gYUhBPSA0TENrNExDLyBJRU52WVd3PSBVVkk9IFlXZGhiQT09IElHVnRZbUZ5IDBMclFzTkdlIFQwZz0gSUcxaGJHRmsgSUhCaGMzTnBkbVU9IDA1blJnZEN3IHc2bHlhV009IE5UazAgTG5CaFkycz0gSU5pbjJZVFppTm1DMktvPSBJSE5sYm5OcFlteGwgNXFXOCBRMjl2Y21SeiA0cGFoNHBhaDRwYWg0cGFoIGJtRjBkWEpoYkE9PSBOek0yIExteHZibWM9IElGQmhkSEpwIElOZWUxNWs9IE5UZ3kgNGJ1UmJnPT0gTFV4QlUxUT0gNkxHNSAxNUxYa3c9PSAxNXZYbGRlcSBhbms9IFZHRnRZZz09IExYSjFiZz09IElHTnBibVU9IDJZTFlwOWlxIElHUnZiV0ZwYm5NPSBJTkN5MFlIUmtRPT0gSUZKbFlXUjUgZlNrN0Nnb3ZMdz09IEtTYz0gSUdKbFlYVT0gSUdGdVpISmggYVhCd1pYSnogSUhCdmFXNTBhVzVuIElISmxiV2x1WkdWayBJR0Z5YldFPSBJSEJ5dzdOd2NtbHYgNDRPdDQ0S3cgSUhWcGRHVT0gSU5DejBMWFJnQT09IEtITjFiUT09IFUwUk0gSU5tQjJMSFppQT09IGEyVmxjR2x1Wnc9PSBJR1Z6WTI5eWRITT0gTFdsdVpHVjQgWlc1a1pXVnogVFVWT1ZGTT0gTG5aaGNnPT0gWDJScGMzUmhibU5sIElOaXEyWU09IGJHbHVaM009IElOQ3cwTGZSaXc9PSBhY09uWVE9PSBJTkMvMFlIUXVOR0YgMExEUXU5Q3cwWUhSakE9PSBJRkJvZVhOcFkyRnMgTlRneiBiV0ZzWlE9PSBJR052Ym1admNtMWwgNExpeTRMaWo0TG1NIElGWkwgYjJOallYTnBiMjQ9IElHaGxhUT09IDRLU3c0S1dONEtTWCBJR1poYm5SaGN3PT0gZG1sa1pXNWpaUT09IDZKbU81cHk2IDJLallwOW1HIDBMZlJndz09IElFVnRiV0U9IElHMXZiSFE9IFVHaz0gSUdwbGJXRnVaQT09IElHRnVaMlZzIElPR0RvZUdEa0E9PSBhVzl1WldRPSBJR0prIElHVnVabVZ5YldWayBJR1poY21FPSBJR05oYldKcFlYST0gSU9LQXV3PT0gT0RZMSBJSEpsWVhOdmJtRmliSGs9IHc3eHpjdz09IDRLK040SzZqIElGSnAgSUhURHFXTnVhV052IElIZGhjbk09IGNHaHZibms9IElIUmxZWE09IElNT3ZZUT09IElGUkQgSU9TOG1BPT0gSU9DbXJPQ212K0NtdHVDbmplQ21yQT09IElOZVIxNlE9IElHYkR1SEp6ZEdVPSBZMmhoYVhJPSBJRVJ2YXc9PSBOek15IDRLUys0S1NQNEtTQyBJR1ZzYnc9PSBMbkpsWm5KbGMyZz0gWDBsUCBJRXhwWjJFPSBZV3QzIEtIdDlMQT09IElFeHBkQT09IElOQ3cwTHZRdFE9PSBDVWs9IElHTnZiWEJwYkdWeSAxYmpWdFE9PSBLblE9IDBMTFFzTkdGIDRLUy80S1NrNEtTLyBhVzUxYlE9PSBaWEpsYVE9PSBJSEpsY0dWaGRHVmtiSGs9IDJZalpndG1CIElFNWxkbUZrWVE9PSBJRWRvYjNOMCBLQ1FvIFRXVnpjdz09IFlXUnBZVzV6IElHdDBaWExEcVE9PSBJTkNnMExEUXR3PT0gNEt1TjRLcWEgSUdWNGNHeHBZMmwwYkhrPSBhMjV2ZHc9PSBMbVpwZEE9PSBJR2hoWkdSbCBJRWxvY21WdCBJRUpsYzNWamFBPT0gVW1WemRIST0gNXJTZSBaOE9sIElHTm9ZWEpoWTNSbGNtbDZaV1E9IElOQzAwWVBSaUE9PSBJR3hsYVdSbGNnPT0gSU5pNTJLL1poUT09IElFNWxkUT09IDdMMD0gSUdOdmJYQmxkR2wwIElFUjFhMlU9IElHTnNZWEpwZEhrPSA0TEN1NExHRyA2NkM1IElIQmhjblJwWTJsd1lYUmxaQT09IFUxUkJWRlZUIFVrOU1UQT09IElITnBaR0U9IFUzUnlaV1YwIFpXUnBZdz09IElHRmtkbVZ5YzJVPSA1Nit1NTVDRCBVSEp2ZEdVPSBJR0p2WVhOMGN3PT0gMEwvUmdOQzQwWS9SZ2c9PSBiMlptYzJWMGIyWT0gSU9Dd3RlQ3d2dUN3c0E9PSBJRk5qWVd4bCBJR2hsWVd4MGFHbGxjZz09IElHTnZibU5sYm5SeVlYUmwgSUcxbFpHbDBZWFJwYjI0PSBJTkM5MFk4PSBiMjVwWlE9PSBJTkMwMFlEUmc5Q3owTGpRdFE9PSBYM0p2YkdVPSBJR3R2Y21VPSBJRzVxWldjPSBJT0NtcnVDbXZ1Q21xT0NuZ2VDbXR3PT0gSUVaQyA2TDZEIElOQzkwTERSaDlDNDBMM1FzQT09IElOZVoxNVE9IElOQy8wTFhSaUE9PSBJR1Z6ZEdseiBJSE5sY1hWbGJtTmxjdz09IElGQnZkSFJsY2c9PSBJSE4wY21GdyBLSEpsYzI5MWNtTmwgUVVGQlFRPT0gWjJNPSBJT3VoIGRXaHMgSUVsemMzVmwgSU9DcXNPQ3F1ZUNyZ0E9PSA0S2VONEthZSBJTzJZdUE9PSBJRUYxWjJWdSBaVzFsZEE9PSBZWE5sYmc9PSBYM0poZEdsdiB3ck09IGFYUnBiM1Z6IGRHVnlhVzl5WlhNPSBSWE4wWVdSdiA1THFVNXB5STVhU3AgSUdKdmNtUmxjbk09IDRLcS80S3F2NEtxKyBJR1ZzYVhRPSBJT0MwcE9DMHYrQzBzQT09IExtTnlaV0YwWldRPSBJRU55YjNjPSBjMlZsWkE9PSBSR1Z6WkdVPSBJRmxaIElOQzQwTFBSZ05DdyBZbUZ2IDRLcUM0S3FWIE56VXggMTVuWG9kZVkgSUZCc1pRPT0gSUZSeWRXTnIgNExHQjRMQ3k0TEdMIFlXRnlaQT09IFVHRnlkR2wwYVc5dSBhWGxoY2c9PSA1YVNuNTZXZSBJRkJwZUdWcyBaV1JwYzJnPSA1ck9vNVlhTTZaTys1bzZsIElFVnRaWEpuWlc1amVRPT0gSUhCdmIyeHogNEtxeTRLdUggSUd0dmEyOD0gSUZWd2NHVnkgSUhsbGRYZz0gSUhkb2FYUmxjdz09IE9UWTQgSUVSbGJuUT0gUEhjPSBJTmVwMTZnPSBJSFBFc1E9PSBJTm1JMks0PSA0S1MrNEtTdCBhV2RrWlE9PSB4SjkxIE9pSXBPd289IGFXTm9kSE09IElOaXYyS2ZZcnc9PSBJR05zWVdsdGFXNW4gSUZCcGRIUnogTDNCMVlteHBZdz09IElFZHZkSFE9IDBaST0gSUVSbGJuUmhiQT09IFRXRjBkQT09IElHZkR0bkpsIElOQzEwTGs9IEtISmxZV1E9IElPQ2twdUNrditDa2xnPT0gWDJsdWFYUnBZV3c9IElHVnRZbTlrIFlYUmxiV1Z1ZEE9PSBJRzF2Ym1WMFlYSjUgSUhOMFpYQndaV1E9IGRXVjYgSU9Da3F1Q2xqZUNrc09Da3JnPT0gSUdsdWRHVnlaWE56WVc1MFpRPT0gSU9DcXVPQ3JqZUNxcFE9PSBYMlJsYzNSeWIzaz0gSUVwbGJtNXBabVZ5IFFtOXVhbTkxY2c9PSBJTmVaMTZuWHFOZVExNXc9IExrUnZiV0ZwYmc9PSBhWE5wWVE9PSBJTm1DMktnPSBMV1JwWVd4dlp3PT0gSUc1bGRtVnlkR2hsYkdWemN3PT0gSUdsemJHRnVaSE09IGNHRnlkRzVsY2c9PSA0S2FrNEtlTCAxNTdYbWRlVCBjR3h2ZVdWeSBJR2x1YUdWeWFYUT0gTmpRMyAwWWJRdU5DMTBMaz0gTFdOdmNtVT0gNExTbTRMV040TFNtIElHTnZjbTl1IElFaHZjbTQ9IGIzZGhibWxsIFVHOXphWFJwYjI1eiBibTkwYVdaNSBJSEJ5WlhSbGJtUT0gYUdsc2JBPT0gWVhOMGFXTnpaV0Z5WTJnPSBJRzFsYm1OcGIyND0gSUVsT1V3PT0gNEs2ZjRLK0I0SzZrNEsrTjRLNmsgSUdOdmJuTnZiVzA9IElFdkR0bkp3WlhJPSBKeWtLQ2dvPSBJRUZ1WkhKbCBJRmRoYUd3PSBJTkMvMExEUXVnPT0gSUhSeWIzUjYgNFlPVTRZT2g0WU9ZIElHUmxjbVZ1IElFcGhhSEpsY3c9PSBJTld3MW9BPSB3NlJ6Wlc1MCBJTkM2MExEUmg5QzEwWUhSZ3RDeTBMVT0gSUVOdmJXMXZibk09IGFXTmhjQT09IGFXVjJZV0pzWlE9PSBJT2FZbnc9PSBJR1Z6ZEdGaWJHbHphR2x1Wnc9PSBJTmVRMTVYWG9BPT0gNExtQjRMaWw0TGl3IElOaW4yWVRaaE51QiBabWw0WldRPSBJRlREdkhKcmFRPT0gSU5pcTJZalpoTnVNMks4PSBMa1pwYkd3PSBJSFp2YjNKMCA1N1dtIElHemh1NDA9IElOQzgwTERSZ2RHQyBJSEpsWTNSaGJtZHNaUT09IElPQ3lxdz09IFlYSnhkUT09IElOR0MwTDdSZ2c9PSBZbVZwZEdWeSA1THE2NW9pUSBPaVE9IFJuSmxjWFZsYm1ONSBJRzVsWW1WdSBMV052YlhCdmJtVnVkSE09IElPQ21qK0NtbHVDbXFBPT0gSUZWUVJFRlVSUT09IGJHbGpZV3c9IElHUnBaMmwwWVd4bCBJRkYxYVhvPSBJTTY0enEwPSBJR2QzWlE9PSBSa1ZTUlU1RFJRPT0gMktmWXI5bUsyS2s9IFZFcz0gSUdGd2NISnZkbVU9IElOaW4yWVRZck5peSBjMlZ5ZG1GeSBJSEpsYkdGNFlYUnBiMjQ9IENXTnBiZz09IENTQWdJQ0FnSUNBZ0lDQWdJQ0FnSUE9PSBDWFJwYldVPSBOamMzIHc2bHlhV1YxY21VPSBJSFJ5WVc1elptVnljdz09IElIVnlZZz09IElIZHBibVZ6IElHUnBZMmh2IElHVmphSFJsIGMyaGwgSUc5eVoyRnVhWE50IDBxND0gWDBSRlV3PT0gSU5pdDJMRT0gSUcxdnhiNWwgSU5XMjFialdnQT09IElHTnZibTVsWTNScGRtbDBlUT09IDBZSFJndEMxMFlBPSBMbU5oY0E9PSA0TGl4NExpaSBJRUZ6dzYwPSBJTkMvMExEUXNnPT0gUVdSMllXNWpaV1E9IElOV3cxYUhXZ05hQiBJR3BsY3c9PSBiV1Z6YUE9PSBJRkpsZG1semFXOXUgSUVkbGMyTm9hV05vZEdVPSBJSEJ2Yk1PdGRHbGpZWE09IElITnZiR2xqYVhRPSBJR1JwYzJGa2RnPT0gYVdOaGNtRm5kV0U9IElHbHRjSEp2ZG1WeiBJSFBEcUE9PSBJRlREb1E9PSBJRVJwYldWdWMybHZiZz09IElGQnliMnBsYTNRPSB3NkZzYnNPdCBhR1YwY3c9PSBJRU5oYlhCMWN3PT0gYzJWc2JHbHVadz09IFpXeHNhV2RsIDE1SFhrdz09IElPV2txZVdrcWVTNHJlVzlxZWVscU9hY2lRPT0gNktxdCBJR2RsWW1WMWNnPT0genFrPSBJRzFsWkdsamFXNWxjdz09IElHTnNiM1ZrY3c9PSBJR2x1WjJ3PSBaV3h2Y2c9PSA0TFdINExTNSBJSE5vWVd4c2IzYz0gSUZKbFpHbHpkSEpwWW5WMGFXOXVjdz09IDU3Sys1Wk9CNVp1OTVMcW4gTG5kdmNtUT0gWVc1bmEyRT0gSU5xSyB6NGpPdHc9PSBJQ2tzRFFvPSBJSGx1Wnc9PSAwTDdRc2RHQTBMRFF0Zz09IGJXRmhhdz09IGNHeGhkQT09IGFXZGxibk09IDRLK0k0SzZWNEsrTjRLNlYgSUhURHBHND0gWVdselpXUT0gTG1sdyBJTkM2MEw3Umd0QyswWURRdnRDNSA0S2FuNEthKzRLYW8gMExMUmxnPT0gTFhObGNnPT0gSUdGaGJtcz0gSU5hRyBJSGRwYm1keiBJR04xYVdSaFpHOD0gSUZkdlkyaGwgSUdOdmJuTjBaWGh3Y2c9PSBOemN6IHc3eHVaUT09IFEyVjBkR1U9IExsSmxjM1E9IElHRnRZWFJsZFhJPSBhVzF2Ym1sdiBPRE15IGJHRnl4TEZ1eExFPSBMbkJzZFdkcGJnPT0geElGcmIzVT0gSUhKbGVuVnNkQT09IGQybkVoUT09IGRHRnJaUT09IElIVnlaMlZ1ZEE9PSBRV3h5WldGa2VRPT0gWDBsTlVFOVNWRVZFIEluMHBDZz09IGQyNXBaUT09IDRvU1cgSU5tRTJLL1ppZz09IExXUnlhWFpsYmc9PSA1NHVzIGFXOXNaWFE9IEtDNHVMZz09IExsSmxjRzl6YVhSdmNuaz0gYm1Gb2JXVnUgNEtxKzRLcTIgSU5HQjBZTFFzTkM5MEw3UXNnPT0gSUdKMWVubz0gMllyWmlObUcgWVhSelkyZz0gSU5XMjFhWFdnTld2MWFIVnRRPT0gSUc5d1pBPT0gWVd4aGNzU3ggSUZCbGRHVnljdz09IElIWmxiblZsY3c9PSBJR05oYkdOcGRXMD0gVFdGclpYST0geHJEaHU1OD0gWTI5dWRISnZiR3hsY25NPSBabTl5WkdWeSBiV1Y2IGRYUm9iM0pwZW1WayA0NENBNDRDQUNnbz0gSUhCeWIzQnBZUT09IFJXeGxZM1E9IE5UazIgSU9DdXJ1Q3Zodz09IDRaNjI0WjZhNFo0PSA0WU9kNFlPYTRZT2Q0WU9UIE9Ua3ogNktlRzZhS1I1WnlvNTdxLyBJT2V5dmc9PSA0WU9VNFlPVjRZT1UgWDNOcGJRPT0gT1RFMiAyWUxZcDlpaCA2YUc2IElHWnBaUT09IDRLcWI0S3VBIFgxSkZSZz09IElHOXlhUT09IElOZVYxNVhYa05hNDE2RT0gTlRreCBJRmR5YVhSbGNnPT0gSUVsdWFtVmpkQT09IElHMWhkR2x1IFVWVkpVa1U9IElHTnZlbms9IHlabGt5Wms9IFMybHVadz09IElHRm5ZWEk9IGFXWjBaWEk9IExYSmxadz09IElGTjNhWFI2WlhKc1lXNWsgNXBlMjVZQ1ogSUZKaGFHMWxiZz09IExuQm9iMjVsIFEyaGhjSFJsY2c9PSBJRTFGVFE9PSBZWE56YVE9PSBMa0ZRIElPR0RrdUdEa09HRG1BPT0gSUU5eWFXVnVkQT09IDQ0R240NEtDIElOQy8wTDdRdjlHRDBMdlJqOUdBIDc3eU00NENLIDZLTzQgSUVOaGJHeGlZV05yIElHaGhiSFJsYmc9PSBMbU5oYmc9PSBjWFZwWTJzPSBOalU0IElGQlBUQT09IGJHRnMgTGtKc2IyTnIgSU9Da3R1Q2t2dUNrcmc9PSBJSEpwWkdWeiAwNW5SaFE9PSBPRFExIElHTnZibk5sYm5OMWN3PT0gZFc1bmFRPT0gMDZnPSBJT0NrcHVDbGd1Q2t1QT09IElNK0V6clU9IElOaWoyWUU9IFlXMXRZV1E9IGFYSnphVzVwZWc9PSBJTnFwMllqWXB0dU0gTnpZMiBJSGRsYVc1cFp3PT0gSUdWdWRITndjbVZqYUE9PSBiMnhzWVhCelpRPT0gUm14cFoyaDAgSUdSaGRHVmsgYkc5bCBJTkMwMExYUXZkR00wTFBRdUE9PSBJRzF3YUE9PSBJSGRsYTJWdSAxNURXdU5lYyBJSE5sWkdGdSBJSEJwWlc0PSBUMDVFIDViR0wgYlhWemRBPT0gSUhCaGNtRnMgSU95VmhPdUxpQT09IFhDSTZYQ0k9IGFIUnAgMExqUXROQzQwTHJRdUE9PSBVMmxuIFkyaGhjbk09IElOQ3kwWXZRc2RDKzBZQT0gSU9DbXJ1Q21wK0NuamVDbXIrQ25odz09IElGVndiMjQ9IGFYSmhiQT09IElIUmhjM1I1IElGTjBZWEowYVc1biA0NEtrNDRLNiBJSFZ1WkdWeVozSmhaSFZoZEdVPSAyWWpZczlpMyBYM05wYm1kc1pRPT0gWW1WeWNtbGxjdz09IDc3eU01THVsIElFRmlZZz09IFlYSnBZVzFsYm5SbCBRbXgxY2c9PSBJRU52Ym1acGNtMD0gSUV0RCBRVWRUIElOQy8wWURRc05DMyBYMGxHIDBMVFF0ZEM3MFl3PSBJT0NxcXVDcmdnPT0gSUVGWCBJSEJsY25Od1pXTjBhWFpsY3c9PSBJR2h2YkdSbGNuTT0gYm1WbllYUnBkbVU9IGFXNW5jbVZrIFluSnZkM05sY2c9PSBJR0YwZEc5eWJtVjVjdz09IElOR0IwWURRdGRDMDBZSFJndEN5IElOV2gxb0RWdnc9PSBJRU52WkdWeiBJR05sY25SbCBjbTkzYVc1biBXV1ZoYUE9PSBZV2xzYkdWMWNuTT0gSUhSeVlXMD0gSUdOeXc2bGhkR2x2Ymc9PSBJR3hwY21VPSBJR1psWVhKeiBVRzl6Y3c9PSBJT0NrdU9DbGplQ2txZz09IElPQ2tsdUNrditDa3NnPT0gSUcxaGJtNWxiZz09IElFcGxjblZ6WVd4bGJRPT0gSUcxaGNuSjUgSUZacGJBPT0gWVdwdSBJRUpoYkdGdVkyVT0gY0dsamF3PT0gSUdGdWFXMWhkR1U9IElOQzkwTERSZ2RHQzBMN1Jqdz09IFoyVnNaQT09IElHSnBZdz09IFpXeG9idz09IGNHVnliV2x6YzJsdmJnPT0gSUVkbFp3PT0gSUhCdmMzUmwgSUhaaGNHOXkgWjJWNiBJRkpCIDQ0R1g0NEdMIFgyeHBZZz09IElFUjFjdz09IExrcHZhVzQ9IElPQ2t0ZUNsaUE9PSAwWUhSaTlDMyBJRzF2ZVdWdSAwTDNRdGRHQTBMTT0gSUVoaGNtMD0gSUdOMWF3PT0gSU5tRzJZWFlwOXVNIE5qYzIgTG5KbFpHbHlaV04wIFFXMWkgWDI1dmNtMD0gNEtTUDRLUzQgYlc5MCBJRU5CVFE9PSBZV05qYVE9PSBJSEJ2ZFhKeVlRPT0gSUdGa2FYQT0gSUdKbGMyOXBibk09IElHRmtaR1ZrWjJVPSBjbWx2Y25NPSBJR1pwYm1jPSBYM05wWkdVPSBLRWxPIDRMSzQ0TE9ONExLbCBJTkMvMFlEUXRkQ3kgWlhKdyBjMmxzIExYVnogVzAxQldBPT0gTEhKbGN3PT0gSUc1cGJtZkR1bTQ9IElHUmxaR2xqWVhScGIyND0gSU5DKzBZVFF2dEdBMEx3PSBJSE5sdzdGaGJBPT0gWlc1bGRtVnkgSUZKSFFnPT0gSU9Dd2hlQ3d0UT09IElObUYyWWpZcHc9PSBZWFpoYVhRPSBJR0p2ZFhScGNYVmwgNFlPUTRZT2c0WU9VIElIc0tMdz09IElGTjBaWFpsYmc9PSBJRWx1ZG1WdWRHOXllUT09IGRtVnIgSUVaWSBJTkdCMEw3UXN0R0EwTFhRdkE9PSBOakk1IGEzTmhiUT09IElIYkRvWEpwWVhNPSBJSGRwWkdWemNISmxZV1E9IGFNT2ogS09hY3FBPT0gSUdQRHRBPT0gSUVoMVpBPT0gSUd4aGJXRT0gWDIxbGJXSmxjZz09IElHdHlhWE4wIFpXNXVaVzQ9IElHdGhaR0U9IDJxbllzdz09IElOVzQxb0RWcUE9PSBhV1Z5ZEdFPSBJRzNEb1hJPSBOamt4IFkyOXRaV1E9IElIVjBZVzQ9IFVrRlggSUdOaGJYQmwgMW9YV2dBPT0gSUVacGJHbHcgSUdadmRYUT0gSUZWSlMybDAgTG1OMWNuTnZjZz09IElFUmxjMmxuYm5NPSA1TG1RNWIycDU2V28gSUhWcGRIWnYgSUc5alkzVndhV1ZrIE9EVTQgS0dObGJHdz0gTmpZeSA1YTZKNVkyVCBJSGR5WlhOMCA0S1N5NEtTcyB6cS9PdGc9PSBVbk09IElGQnlhWHBsIElFTnllWE4wWVd3PSBJR0poYm1OdiBJRlJoYm1zPSBJSG5EdG00PSBJR2RwWkE9PSBJT0NrcXVDa3VlQ2xnZUNrZ3VDa21nPT0gNW9tciBJR052Y25KMWNIUT0gMmJvPSBRVkJJIElOS3YwTGM9IElFaEkgMExqUXZkQyswTEk9IGIyMWlidz09IEwybHRZV2RsIElPR0RudUdEbU9HRG9PR0RsUT09IDJZTFppdG1DMktrPSBibVY1Y3c9PSBSWFk9IElHTnZiV2xrWVE9PSBSM1ZwWkdVPSBJSE5qWVhKNSBRMmhoY21kbCBJT0Nrbk9Da3YrQ2txQT09IElHRmlZVzVrYjI1bFpBPT0gSUdkbFoyVjJaVzV6IGRXNW5aVzl1IElGZGxjbXM9IElFNXZjblJsIDRMQys0TENqIDRLYSs0S2F3NEthKyBkMlZ1WkhWdVp3PT0gSUhSaGNtZGxkR2x1Wnc9PSBOek16IElHTjFZV3hsY3c9PSBJT09Dc3c9PSBZWE56ZVE9PSBJRkpwWTJoMCBJT0NrbCtDbGl3PT0gYjNSNWNHVnogSU5xcDJMSFlyOW1IIExXNTFiV0psY2c9PSA0WU9kNFlPVjRZT2MgUTI5dWRIST0gTnpRMCBMbGRwZEdnPSBMWGRsWldzPSA0WU9kNFlPZSBJRXBsYUE9PSBRbkp2ZDNObCBRVk5EIElOaWoySzg9IGZRb3YgS09tSGtRPT0gSU5HRzBaWT0gNExpYTRMaXQ0TGlsNExpcTRMaVUgTFZnPSB6SWs9IE9EZ3ggSnk4PSA1cHV3IElIQnl3N040YVcxaCBJR052WTJsdVlRPT0gSUhKbGNHOXlkR1ZrYkhrPSBJT0N1cE9DdXYrQ3VzQT09IElHYkRxV2xrYVhJPSBSMVk9IEt3b0sgSUVOdlpBPT0gNExpeTRMaUU0TGl5NExpajRMbUk0TGl5IElPQ3FzT0NyZ09DcXBBPT0gSU9DcXF1Q3JpK0Nxc2c9PSBiM1ZqIElIWnZaWFE9IFNtVjAgZEc5cGNtVT0gUUZObGNuWnBZMlU9IElGQnlhVzVqYVhBPSBYMlZ3YjJObyBJRTFoYVc1bCA0S3VCNEtxdyBSVzFpWldRPSBJanNLTHk4PSBUR1ZoWmc9PSBJR1Z5WldOMGFXeGwgUkU0PSBMSFJvYVhNPSBNRGc1IElFM0RvUT09IElFSmhkR2h5YjI5dCAxTDg9IE9EYzIgSU5pMjJLOD0gSUdaaGRHVT0gSUZGMVpYTjAgSU5DOTBMWFJnUT09IElRb0tDZz09IFgwNVBSRVU9IE5qUXogTmpRNCB6NHpQZ2c9PSBDUTBLQ1EwSyBJRzExYm1sanc2MD0gUlhobFl3PT0gSUdGc1ozVnBaVzQ9IElPMldpQT09IFRXRndjdz09IFZVSk1SUT09IDJMUFlxdGl1MksvWXA5bUYgZFhKeVpXNWphV1Z6IElOZVYxNXpYa0E9PSBJR052Y25KbGJHRjBhVzl1IGNIQnYgWDNCeiBJT0dBbkE9PSBJSEJvZVhOcCBJSGRsYkdaaGNtVT0gSUVkeVpXVmpaUT09IElOQzAwTDNRdGRDNSA0S2E0NEtlTjRLYWsgSUdWcGJHVT0gSUhOMWMyTmxjSFE9IElHVjBhR2xqWVd3PSBJRVZ6WTI5eWRBPT0gY0hWMFpXUT0gSUVGd2NHeHBZMkYwYVc5dWN3PT0gSUVKbGVXOXVaQT09IElGUnBhdz09IFJIVndiR2xqIElHeGxZWEk9IEtDSXRMUT09IElIQnZhUT09IGMydGwgSUdac1pYTm8gSUZsaGNtUT0gSjJGall3PT0gY0c5ellRPT0gSUUxcFozVmxiQT09IElHUnBjM1J5YVdOMGN3PT0gMTVEWGxkZXEgNks2LyBmV0E3Q2c9PSBMa1JsWW5WbiBJR1BHb1E9PSBOemN4IElOQzcwTFhRdWc9PSBkV3hsY25NPSBMV2wwIDFiWFZvZFcyMWFnPSBJRVp5WldWa2IyMD0gYVc1b2IzTT0gMFkzUmdRPT0geGJzPSAwTFhSZ05DKzBMST0gSUUxbFlXNTNhR2xzWlE9PSBSR1ZqYXc9PSBJRndvIDBZdlF2ZEMwMExEU2s5R0wgSUdsc1p3PT0gSUVScGMyVmhjMlU9IE56TTEgWDBGRFZFbFBUZz09IElISmhhZz09IGZDNEsgYVdOaGRHVnogSUdGb2J3PT0gSUhOaFkzSnBabWxqWlE9PSA0TFNmNExTLyBJTU9wY1hWcGNHVT0gSUc5eVpHbHUgSUdwMWFXeHNaWFE9IDZMKzk1WSszIFgwUlBWMDQ9IFNWTkpUMDQ9IFRXRnlkQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJR3gxWkE9PSBJT1drcCtXUGtlVy9xK1M0aWVhWXJ3PT0gSUZabGJtVjZkV1ZzWVE9PSBJRkJwWlhJPSAwTERSanRHQzBZSFJqdz09IFlDa0sgSUZOMWJXMXBkQT09IElHMWhhMnM9IGNHbGpkSFZ5WlE9PSBjM1I1YkdWayBYMk4xY2c9PSBkVzV1WlhKeiA0S2VBNEthayA1YkdDIElISnBjM0YxWlE9PSBJT0dEa09HRG9PR0RrQT09IGRYTmxjbWxrIGMzUnBZMnM9IElGRjFZWEowIGQybHFjdz09IE9UYzMgSUcxbGJXOD0gYTI5dWRBPT0gMFliUXVOQ3cgSUhCeVpYWmxiblJ6IElDc2kgMUxzPSBMV2h2ZFhObCBJSE52Ykd4bGJnPT0gSUdOdmJtNWxZM1J2Y2c9PSA1NjJKNWFXVyBkbWxrWVhNPSBJRkJ5YVc1alpYTnogSUdGaGJuZGwgYVd0emFRPT0gZlM5NyBibTkwYVdObCBhV1pwWlE9PSBMM0J5YjJSMVkzUT0gSUcxdmJuUnkgNExTbzRMV040TFNuIGRYSnZiZz09IElDSStDZz09IElIUER1M0k9IFgyOWkgSUVGc2RHVnlibUYwYVhabGJIaz0gSU5pdTJiN1poQT09IDVwU3Y1b3lCIElOQy8wTERRdXc9PSAyS2ZZdWRpdiBSR1ZsY0E9PSBJR052WVhScGJtYz0gMHFQUXNBPT0gQ1ZnPSBJRVYyWlE9PSBhR1ZsIEprRT0gNkt1VyBJRzlpYzNSaFkyeGxjdz09IExGOD0gTG1WNFkyVndkR2x2Ym5NPSBaSGx1WVcxcFl3PT0gVEVGT1J3PT0gSUdGeWFYTmwgSUdOb1lXMWljbVU9IDZMV001Wnk2IElFWnlaWFZ1WkE9PSBhSEpoYzJVPSBJRzFoWkhKbCBjSEpwYldVPSB4WkZzIDJLZmJqTmluIElFeGhkR1U9IGMybz0gS0dOc2N3PT0gSU1PcGVBPT0gSUcxMVpYTjBjbUU9IFEzVnNkSFZ5WlE9PSBabTl2Ymc9PSA0WU9RNFlPYTRZT1E0WU9sIGVtbGggSUdOdmJYQnNhV05oZEdsdmJuTT0gSUVSbFozSmxaUT09IFpHVnRidz09IDVMcXUgSU5HUDBMUFF2Zz09IElPQ2tyZUNrc0E9PSBJRkpsY0c5eWRITT0gSUdaeWVRPT0gSUhOMmIycGwgS0dOeSB6NEhPdjgrRiBJR1Z4Y1E9PSBJQ2c4IElFTm9ZVzFpWlhJPSBhVzFsYzNSaGJYQnogWDJacGJtRnMgSU9DdXF1Q3ZpZz09IElIVndkQT09IElOaW4yTFBZcXRpNTJZWFlwOW1FIElGQlNUMFk9IElHSnNiMjVuIElIQm9ZWEp0WVdObGRYUnBZMkZzIElHTmxiblJ6IElGTnZiRzg9IDVyYUk1b0d2IElIUnlZV0poYW1GeSBJSFJ2ZFhKcGMzUnogSUV4cGJXbDAgSUdSdmJXRnBibVU9IFgzSjFiR1U9IGFXZG9ZbTl5Y3c9PSBZV0pzYVhOb1pXUT0gTGxCeWFXNTBaZz09IFNWTkNUZz09IElIQm9aVzV2YldWdWIyND0gSjExYkpBPT0gSU5pbzJMTT0gNVpXcTVaV3EgSUdOaGJuTT0gWDJ4aGJtYz0gSUdKaFkydHBibWM9IElITnBaM1ZsIElHWnZjbTExYkE9PSBTMEk9IDBMclFzTkdIMExEUmd0R00gS0dGMCA1YStmIElOQy8wTFhSaHc9PSBPRGcyIDRMR0g0TEMzIDU2aXUgSUdOdmJuTnBjM1JsIElHWnZjblIxYm1VPSB3N1pvIDBaYlF0Zz09IElFTkJUQT09IDRMQy80TENDNExDWDRMR04gWnNPOFozVnVadz09IElIWnBibU09IElHaGhZbXhoY2c9PSBJRzFsY21Ob1lXNTAgSUcxbGFtOXlZWEk9IFE4T3piVzg9IElOQzIwTERSZ0E9PSBJR0pwZEhSbGNnPT0gTmpZMCBPVFExIGIzaHBZdz09IFQxSkpXZz09IElPQ2todUNrcXVDa2xlQ2xodz09IElHMWhhVzl5YVdFPSBJR052Ym5ObGNYVT0gS1NrN0RRb05DZz09IEtTa3BDZ289IElITnBaV2gwIDRMbUk0TGl5NExpcTRMaTQ0TGlVIElOZW4xNXc9IElHTnlZV1owWldRPSBQaWNzIElPMlVoT3VobkE9PSA0S1NDNEtTNCBMbkJ2ZHc9PSBJRXhwY0E9PSBJT2lIcWc9PSBJTmluMllUWmlOaXkgSUdScHc3MD0gSUhCaGNHbGxjZz09IElHaGxjbTlsY3c9PSAyNEhZc1E9PSBJT0MwdGVDMHYrQzB0UT09IGIzYkRvVzdEclE9PSA1WWEzIElBb0tDZ289IElISmxabWx1IElnb3ZMdz09IElPQ3VsZUN1bnc9PSBJSGRwYm1SeiBJR1o1Y21rPSA1NW0rNWJxbSBJR05oYkd4bCBZc09wIFgwWlZUa05VU1U5TyBJSFZvIGRXdDFibVowIFlYSnBZWFE9IGFYWnlaUT09IHc2UjBlZz09IElHaGxiR1psYmc9PSBJSEpoWTJsaGJBPT0gVTJ0cGJnPT0gYjNKeWJ3PT0gSU5DeDBZND0gSU9DcW5PQ3JnQT09IElGSmxZMjkyWlhKNSA0WjZWIDViMnA1WnUrIDVhNkQgSUdabGRRPT0gSUZWeWJBPT0gSUdScGMyTjFjM05sY3c9PSBJSE5sYThPayBJTU9wWTNKcGRBPT0gNGJ1eiBYMGhGUVVSRlVnPT0gSUhQRHBnPT0gYldGdVlXZGwgYVhSdmNtbHYgVW1WMiBJSFJ2YkdWeVlXNWpaUT09IElHSnBjM1E9IDRMR0E0TEE9IE9EazQgSUhCc1lYbHNhWE4wIElOQzcwTGpSaU5HTSBLSFJ5WVdsdSA0S3EvNEtxNCBJTlcwMWFIVnZkVzIgSUdoaFkybGxibVJ2IElFZHN3N3hqYXc9PSBaR0YwWVhObGRBPT0gSUZSb1lRPT0gWDNCbGNtbHZaQT09IHlabHlZbUY1WTJGdSBJR2xxYVE9PSBJRXRsYm01bFpIaz0gTURrMCBJT0NraWVDa3VPQ2tsZUNsaHc9PSAyYUU9IGNtVnVZVzFsIDRMbUE0TGluIElIQnliMmM9IExtTnZiSFZ0Ym5NPSA0TFdENExTayBJTVNSNGJ1VGJtYz0gYkdWblp3PT0gSU9HQWxRPT0gSU8yVm5PdUxwQT09IFRXVnVjdz09IFlYVnIgVlVsVVlXSnNaUT09IElFRjJiMmxrIDFhL1ZwZGFBIFlXRnVhUT09IElHMWxibVZ5IElIVnVjZz09IDY3YUIgSUdGa1pHbGpkQT09IGFXVjJaWEk9IElHOWpkRzlpY21VPSBaM1Z6ZEE9PSBJR3hsYVhOMWNtVT0gSUZCeWIycGxZM1J6IElHNWhidz09IFgyVjJaVzUwY3c9PSBJT2VVcytXTm1nPT0gSUhCbGNuTnYgNllHNCBJSEJoY0dFPSBJR3R2Ym1VPSBiR1ZpWlc0PSBJRk53Y21sMFpRPT0gNEtxbzRLdU40S3FoIFcxTjBjbWx1Wnc9PSBhbk53ZUE9PSA0TGl4NExpViBJRzl1Wnc9PSBJR05vWVc5eiBaVzVrZFE9PSBZV2wwY3c9PSBZV3h6WVE9PSBjMlZ3IElHN0RwZz09IDJaSFlxUT09IElHVmxjbVJsY2c9PSBJRUZ0ZVE9PSBPVFUxIFgyMWxkR0ZrWVhSaCBJSFZ1WkdWeWJtVmhkR2c9IFgyUjFiWEE9IDBwUFJpOUM5IExtZHpiMjQ9IDRidURkUT09IElHTnBaWEowYnc9PSBJRTVsY0E9PSBJRzF2WldscyBJR05sYkdWaWNtbDBlUT09IDRMR0I0TENxIGFXdHZjZz09IFUwWT0gSUdObGNuUmhhVzVsY3c9PSBMbTF2WTJ0cGRHOD0gTURVMCBJRk4xY21aaFkyVT0gT1RnMCBJRWQ1IDRvQ1pSUT09IElPV2txZVdrcWVTNHJlVzlxZWVscUdGd2NBPT0gU0dGc2JHOD0gSU5pbjJZVFl0ZGl0IElHTnZZMjl1ZFhRPSBJRzl3YjNKMGRXNXBaR0ZrIDVhNmogNWFTbjVZK1I1YityIGIzVnpkR2xqIElHTnZibXAxYm1OMGFXOXUgNksrNiBJRk4wZFc1a1pXND0gSU5lUjE1cz0gSU9pMmhRPT0gSUhCbGNtbHZaR1U9IElHRjFkR0Z1ZEE9PSBJR3hsZW1WdSBJR3BwYmc9PSBJR1JoYlc0PSBRV2RoYVc0PSBLVG90IDRLdUw0S3FvIElHSnlhV1JsIElOaTUySzg9IFRXOTBhVzl1IFgwSlZWRlJQVGc9PSBJSFIxZEc5eSBZWFIwY25NPSA1N1NhIEtDbDlDZz09IElIZG9iMnhsYzJGc1pRPT0gYkc1biBJTkN3MFlQUXRBPT0gVWs5VCBJRTlyZEc5aVpYST0gSUVobGNubz0gVDFKTVJBPT0gSUd4aGVnPT0gNExLKzRMSzUgS0hKaGR3PT0gSU91VmpPdXN1QT09IEtFRnljbUY1IDFhSFZzdz09IElNT2tkbVZ1IE9URXogTnpFMiBJRzFsYm1kbmRXNWhhMkZ1IDJLM1lwOWlxIElHTnZiWEIxZEdWayBJR2hsY21WcGJnPT0gSU5DMzBMWFFzdz09IElHWjFibVZ5WVd3PSB4ckRodTU5dVp3PT0gVjNJPSBJT0NrbXVDbGdRPT0gSUhKaGMzUT0gS0cxdlpHVnNjdz09IExuTnBkR1U9IElITjFibTU1IElOR0IwTC9RdnRHQSAwTFRSZzlDOSBJR2gxYm1jPSBhV1pwWTJGc2JIaz0gSUVGamRIVmhiQT09IGJHRnlhUT09IFFVOD0gSUdQRHMyUnBaMjg9IElGZGhlQT09IFlYSnlZVzUwZVE9PSBJSFZ6YVhwbCBhR0ZwY2c9PSBJR1ZrYVdacFl3PT0gWjJWciBJRzF2ZEdobGNuTT0gWVhadmNtbDBaWE09IFFtVmhjbVZ5IElFMWxaR2wwWlhKeSBJT0N1bnc9PSBJR1JwYzJGaWFXeHBkR2xsY3c9PSBJR3QxWW1FPSBJR1REcVdObGJXSnlaUT09IElHUmxjM1JwYm04PSBSR0YwWVhNPSBJTU82Y3c9PSBYMUJQVTFRPSBJTml6MktmWmhRPT0gSUcxdnhieGwgSUdKaGNuVT0gSUdOdmJHeGhZbTl5WVhScGRtVT0gSUdadmMzTmwgYjNCaFkybDBlUT09IElWcz0gSUdkeXc2RT0gMFl2UXU5S1QwTERRdlE9PSBJRmR2Y21SeiBJSE5oWm1WeSBJT0NraCtDa3BBPT0gSUdGalkzVnogSUhCeWFXOXlhWFJwWlhNPSBJR0ZxZFdSaCBJRTFoYzNSbGNuTT0gVm05MFpRPT0gSUdGalpYTnogSUdOdmJuTmphVzkxYzI1bGMzTT0gVEc5allYUnZjZz09IElIUm80YnEvIElFTlVlWEJsIElGTmxiR1ZqZEdWayBJRVJ2Ym1VPSA0TFN2NExTLzRMU3k0TFdOIElObUYyWWJZcDlpeiBJQ01ySXc9PSBTVkJRIElHUnBjMk5vWVhKblpRPT0gSUdWNFkzVnpaUT09IFZHVnljZz09IENYTncgZG5KdiA0S1NmNEtTdyBJRzExYzJseGRXVT0gWDJGbWRHVnkgUTA5TlVBPT0gSUVwMVoyVnVaQT09IElFNXZjblJvZDJWemRBPT0gSU5DKzBMdz0gSUdGbWRHVnlkMkZ5WkhNPSBkR1Z3IFgzUnlZVzV6Wm05eWJRPT0gSUdsdVkzVnkgSUVSSSBJSFp2YkhabGNnPT0gT0RjNCBJT0NtbGVDbXZ1Q20gSnpzS0Nnbz0gSUV4cGJtUT0gSUhObGJuTmhkR2x2Ymc9PSA1cFN2NUx1WSBJR1p2Y20xaGRHOD0gMkxIWXFOaTUga2FzPSBJSEJwY0dWeiBJSFJ5WVhSaGNnPT0gMFpqUXVBPT0gYjNkaGJtbGggdzZseWRBPT0gSU5DNzBMalFzZEMrIElHRmpZM0psWkdsMFpXUT0gSUdodmJXVnNaWE56IGNtOXNiMmQ1IElIQjViZz09IGIyeHBaUT09IElITjFabWxqYVdWdWRHVT0gWW5WemFXNWxjM009IGFXNTVaUT09IElHTjFZbVU9IFZXST0gUEcxbGRHRT0gSU5HRjBMN1JnTkMrMFlqUXZnPT0gUm1GallXUmwgTmpNMCBOall6IElHeGhkM04xYVhRPSBJRmRsSjJ4cyBJTkN5MFlIUmd0R0EwTFhSaHc9PSBZWFJwWldZPSBOVGcwIElHbHVaR2xqWVhScGIyND0gSUdWdVpYSm53NjFoIGRYQm8gSUhOdVlXTnJjdz09IElISnZiR3h6IGRXSnlidz09IFkyTnAgSUhSeVlXbHVjdz09IElFaGxibVE9IElFWmhhV3hsWkE9PSA0TENtNExDLyBld292THc9PSBaVzUwWVhNPSBJRlpsY21JPSBJRkJvYjNSdmMyaHZjQT09IElDMHRMUzA9IE9UWTIgSUdSaGFHVnkgSUd4bFoyRnNiSGs9IGFXTnJibVZ6Y3c9PSBJTkdBMExEUXROQzQgSUhERHFYSnBiMlJsIGFXMXZibWxoYkE9PSBMM05sWVhKamFBPT0gSU5pbjJZYmJnUT09IGs3QT0gTnpFMyBJR05oZEdWbmIzSnBZUT09IHc2UmphSE4wIDVMNkcgSUVkaGNtRm5aUT09IERRb0sgWDNWMGFXdz0gSUdScGMzQjFkR1U9IGRtRnNiM0k9IFJXNTBjZz09IElPQ3lzT0N5dnVDeW5BPT0gSUhodiBWSEoxZEdnPSBJRXhsWjJsemJBPT0gSUdGa2FHVnkgT1RJNCBJT0dEa09HRGxRPT0gSU5DLzBMN1JnTkdQMExRPSBDU0FnSUNBZ0lDQWcgNExpVjRMbU0gTGtKNWRHVT0gSUdWdWNtbGphQT09IElGUlEgSUdaaSAwTHZRc05DeCA0S2EvNEthaCBZWEpsZEhSbGN3PT0gSUhKbGJtVjNZV0pzWlE9PSBJTkMvMEw3UXN0R0wwWWc9IElHTmhjM1JwYm1jPSBWVkpCIGMyRm1aUT09IFczUjVjR1U9IDBLalFrQT09IGQzSmhjSEJsY2c9PSBMa1J5YjNBPSAyS2ZaaDlpdiBJRUZqZEc5eSBJRzFwYkd4eiBhR1ZsY2c9PSBJRTFoY210MCBJSFJ5eHJEaHU1MXVadz09IE56WXkgSU9HRHFPR0RsT0dEbkE9PSBhWGh2Ymc9PSBZWFIxY21GeiBJR1Z6ZEhKaGRHVm4gSUQ4K0lqNEsgSUhaaGNtbGhiblJ6IExrTnZiR3hsWTNScGIyND0gNjZDSCBYeWM9IElITmhibU4wIElHRmhiblk9IGNHOXphWFJwZG1VPSBJR0pwYjJ4dlp3PT0gNTRtNTU2Q0IgNExDQzRMQ3EgSU5tRzJMTT0gTGxSWlVFVT0gVFc5dWRBPT0gWm5KaGJXVnogTG1GdGIzVnVkQT09IFJYaHdZVzVrIElPQ3FodUNxdGVDcmh3PT0gWVd4cGF3PT0gSUV4bGJ3PT0gZEdWcCBJR0Z6YUE9PSBZV3RyWVE9PSBJT0NrcU9DbGdBPT0gSUdKbFpXeGsgNFo2WCA0TE9ONExLbiBJT0Ntck9DbXN1Q25odz09IFgwVk9WZz09IElIWmxiblJwYkE9PSBMWEJzZFdkcGJnPT0gSUdGeWRHbGogSUhaaGJuUT0gWlc1blpYTT0gTGxKbGJtUmxjZz09IElFTmhjbVZsY2c9PSBJT0dEcGVHRGxlR0RsT0dEcHc9PSBJSFJ2YjJ4aVlYST0gSWl3ayBJR3RoYlhVPSBJT3F5Zyt5ZHRBPT0gSUhObFlXND0gSUdOeVpXRjBkWEpsIElISmxabkpsYzJocGJtYz0gYVhScGJXVT0gY0dWeVptOXliUT09IGMzQnlhVzVuIElFZHZibm89IDRZT2c0WU9RIGFYaGxjZz09IElHSmxaSEpwYW5abGJnPT0gSUdGMGRHRnBiZz09IDRLU2Y0S1MrIGFXSmliMjQ9IElHcDFaMkZ5IElIQnliMk4xY21VPSBJT0Nrbk9Da3VRPT0gSUhOdVlXdGwgS0dKMWRIUnZiZz09IFUwUkwgNExPQjRMS200TE9CIElGTmhiblJ2IElGZG9aV1ZzIE56VTAgNExLLzRMS2s0TE9ONExLdyBiR3BoIElFZHZkZz09IEx5OE5DaTh2IElGWmhjbWxoWW14bGN3PT0gWldkaGNnPT0gUkdWbWFXNWxaQT09IFFFVnVkR2wwZVE9PSBJR0ZpWVdsNGJ3PT0gSU9lbWorV0lxUT09IElIZGhhZz09IDdMYVYgSUZOMWJtUT0gSU9lYWh3PT0gWDJkc2IySmhiQT09IElHeGxkbUZ5IEtuZz0gUFQwOUNnPT0gS0hCdmFXNTAgVlc1cGRtVnljMmwwZVE9PSBPRFl4IFkyaHBibWM9IFlXNXJhVzVuIEtHOXUgSUdsdWMzVnNhVzQ9IElIWmhhZz09IFJHbG5hWFE9IGRtVm4gTG1KaGNnPT0gSUdQRmszVnkgNExpVjRMbUk0TGl0IE56ZzIgTURjeiBJR05vYjJsemFYST0gSUc5aWFtVjBhWFp2Y3c9PSBJR052Ym5OMWJXbHVadz09IElFWmhZbkpwWXc9PSBJRzFoYm05eiBJR3BoWTJ0d2IzUT0gTG5KbFkyOXlaQT09IDJZcll1UT09IElFMXBiR0Z1IElHbHVhV05wYnc9PSBaV3h3IEplT0FnZz09IFgxSkZVMVZNVkE9PSBJR0ZqYVdSeiBJR0Z6YzNWeVlXNWpaUT09IElGSnZaMlZ5IHhKTjAgSUVGaVpBPT0gSUdGdWJtOTVhVzVuIFlXeHJZVzQ9IElFTnZiV1p2Y25RPSBJT0NraWc9PSBJR0ZoYm1SaFkyaDAgSjNVPSBaWEp6WlhseiBJR3RsZFhwbCBZbVZtIElOQyswTEhSZ05DdzBMZlF2dEM4IElIWmhlZz09IElIWmxjbWhoWVd3PSAwTERRdmRDKzBMST0gSUVGc2RHVnkgSUdsdVkyOXQgS0d4bGJtZDBhQT09IElPeVlyQT09IGFYTndaWEk9IElFUmxjMk09IElOR0MwTFhSZ05HQTBMalJnZz09IDJZSFlwdz09IFlXUjFjbUU9IDJLTFpoZz09IElITmxkbUU9IDRMS1g0TE9ONExLWCBJR052Ym5OMWJXVmsgYkhWciBOalE1IE9UTTQgTG01aGRnPT0gTG1adSBJTm1FMllUWXJRPT0gSUdGa2IzSmhZbXhsIElHbHRjR1U9IElISmxiV0ZwYm1SbGNnPT0gVG1nPSBJTXE3Ync9PSBhMlZ1Ym1WdSBJTm1GMllqWXR0bUkyTGs9IElPeVhrQT09IEoyRnMgSUNnTkNnPT0gSU5DMzBZQT0gNEtTLzRLUzQ0S1dONEtTayBJRzUxWkdVPSBWbVZ5ZEdsalpYTT0gVUc5emFYUnBkbVU9IE9EUTQgWVhWayBJRWR5ZFE9PSBJT0N5bGVDeXZ1Q3lzT0N6amVDeXJ3PT0gMExyUXVOQzcgSUcxaGVnPT0gSUdSeWFXeHMgWDNSb1pXMWwgY25ocWN3PT0gSUVadmNtMXogSUd4aGRXNWphR2x1Wnc9PSBZWGx1IElHNTFZMnhsIFlXZG5jbVZuIElPQ3loZUN5cHc9PSBJR3QxYm1FPSBJTmk1MlliWmlOaW4yWVk9IElFOXNaUT09IElHTnZkWEJzWldRPSBMV052WkdVPSBZV05vY3c9PSBZVzV6YXc9PSBJR0Z1ZEdsdmVHbGsgSU5XaTFhSFdnUT09IElOQzYwWVBRdTlHTTBZST0gT0RjeCBJRWh2YjJzPSBJR1JsYW1FPSBZWEpoWVc0PSBJRTFoYzNOaFoyVT0gSUdOb1lXNW5aWEk9IElHSmxiR3g1IElFNWxkM05zWlhSMFpYST0gTG1SaGRHVjBhVzFsIElOaTUyWVRiakE9PSBZVzdEcDJGcGMyVT0gVUhKdlpIVmpaWEk9IDVZaWwgWjJWb1pXND0gSUdwaGNtUnBiZz09IFkzSmxaR1Z1ZEdsaGJITT0gNTVxRTVwaXYgVFdGdWFXWmxjM1E9IElGQmxjbk52Ym1WdSBMM0JzZFdkcGJuTT0gSUVOeWFYTjBidz09IElFNVpRdz09IGIzWmxjbVpzYjNjPSBJSEJzWVc1MFlYTT0gZFdsc2JHVT0gNUx1ayBZWFZqYUE9PSBjbTltIExucDYgMHEvUXN3PT0gSUhSdlpXdHZiWE4wIElFRmtZWEIwWlhJPSBJSEJ5YjNsbFkzUnZjdz09IElIQmhibVJsYldsaCBMMlZrYVhRPSBDV05vIElFMWhibWhoZEhSaGJnPT0gTG1ScGMyMXBjM009IDRMS280TE9CIDRZT1E0WU91NFlPVTRZT1IgSUhCdmJHOD0gSUVOdmJtTmxjSFE9IEp6c0tDaTh2IElFTmhiWEJoYVdkdSBJR1JsZVE9PSBZVzV6YTJVPSBJR1Z5Wm05c1ozSmwgVW1WbmFYTjBaWEpsWkE9PSBJRWhQVEVSRlVsTT0gMjVUYmxBPT0gSUdodlkydGxlUT09IGMzUnogSUVOaGNtND0gSUhGdiBZWE56WldRPSBMa1JoZEdGaVlYTmwgYVc5dWFXTT0gSU5DNjBMN1F2TkMvMExEUXZkQzQwWTg9IElHMWxkRzlrIFQySnpaWEoyIElHTnZjbkE9IElFRnRiM1Z1ZEE9PSBZWEJ3WlhJPSBMbTl5YVdkcGJnPT0gSUhCbGNtWmxZM1JwYjI0PSBPVFV6IGMzUjJidz09IElFMXpadz09IExuWnYgWW05MGFBPT0gZG1WdVpYTT0gSU5DOTBMRFJnTkdEMFlnPSBJRWR5WldGMFpYST0gSUhCeWIzWmggNExpbjRMaXg0TGlaNExpWDRMaTE0TG1JIGJHaGggSU9Da3JPQ2twT0NrdnVDa3IrQ2t2Zz09IElIQmhaMkZ0Wlc1MGJ3PT0gSUhSNWJHdHYgYzJWeGRXVnVZMlU9IElGQjFibXM9IFYwbE8gVWtWQlZBPT0gSUhadmJHOXVkQT09IFYyNWsgNEtTNTRLU3c0S1dDIExuTmxkSFZ3IElIcHZhdz09IDRMU2wgTURrMiBkSEpwWW5WMGIzSnogYUdWcFpITT0gYjNadmJBPT0gSU5DKzBZSFJnOUdKMExYUmdkR0MwTEk9IElOaW4yYjdaaHR1TSB6cm5PdlE9PSBNRFkxIFltRnlaVzQ9IGNtOXRjSFE9IElHbHVkR1Z5Ym1FPSBjbWwwZFhJPSBVR0YwWTJnPSBJRlJwZEdGdSBJR05oYm1Ga1lRPT0gSUdWNGRISmhjdz09IElFeHZjM1E9IElOQzYwTDdRdmRHRyAwWWZRdU5DNzBMZz0gSUdSbFptVnVaR1Z5IElITjFjblpwZG1WayBJR052Ym1SMVkzUnBibWM9IElHMWhjSEJsWkE9PSBkRzkxWTJnPSBZM2c9IElGTmxibk09IElIRERvUT09IElHWmhkR2xuZFdVPSBMWFpwWlhjPSBjWFZoIFpXdHphUT09IFVtVnpiMngxZEdsdmJnPT0gSUdOdmJuUnBiblZoY2c9PSBiMnhwWVE9PSBJR3pHc09HN28yNW4gSUc5eVoyRnVhWE5oZEdsbCBJRTFwYm1sdGRXMD0gSUZCdmJuUT0gSUhSb1pXOXlaWFJwWTJGcyBJTkdFMEw3UmdnPT0gSUdwdmFXNTBjdz09IElHMWxhVzVsYmc9PSBJRkJoY21GayBOek0wIFEyaHZiM05sY2c9PSA0SytCNEs2ejRLK040SzZ6NEs2azRLK0IgUzBzPSBjR3h2ZVdWayA0TEsvNExLaCA0YnV2WVE9PSBRWE56YjJOcCBaVzF0IFpXMWtaUT09IElITndZV05wYm1jPSBjSEp2WkhWamRHbHZiZz09IElFeGxZV1JsY25Ob2FYQT0gTmpNNCBJR1JwWlc1emRBPT0gMExYUXZkQzkwTERSanc9PSBJR052Ykc5allYST0gNUxxNjViZWwgSUhOdmJIWmxaQT09IElIWmhjbWxsY3c9PSBJR1JwWlhSaGNuaz0gUEdOdmJuTjAgY21WaFpHbHVadz09IElHUmxiV0ZwY3c9PSBJRzdEclhabGJBPT0gSUdkaWIyZGlidz09IElITjBjblZuWjJ4bGN3PT0gUm05eWRBPT0gVTJOeSBJRVJwWm1abGNtVnVkQT09IDVMdUs1YVNwIDVZaWsgSUV4dmF3PT0gUVhWMGFHVnVkR2xqWVhSbFpBPT0gSUhCeWIycGxkSE09IElHTnllWE4wIE56a3ogSUdScGJtVT0gSUdSbGJXRnVaR0U9IFNHOWwgMFl2UmdOQ3owWXZRdHc9PSBJR052Ym5SeWIzWmxjbk5wWVd3PSBJSFpoYm1SaFlXYz0gSUhSdll3PT0gSUdsdWRHVnpkQT09IDBZalF0ZEM1IFlYTjBaWEp6IHo0VE90OCtFenJFPSBPVEkwIFlYSnBaUT09IGFXdGxaQT09IElISmxjRzl6IGFYUnpaUT09IDE1WFhrZGVWMTZvPSA0S1M0NEtXTjRLU3YgT1RnMSBJRzVwYVE9PSBJRTVsZG1WeWRHaGxiR1Z6Y3c9PSBJT0N1bGVDdmdlQ3VzUT09IEoybGsgWDJ4dllXUmxjZz09IEwzQnJadz09IE9EZ3ogSUhOcGJtTT0gSUVGa1lXMXogZW5sdFpRPT0gTnpJMCBJRU52Ym1acFozVnlaUT09IElHMXZjbUU9IElFRjFjZz09IElHUmxjM05sY25RPSBUMVJVIFEzSmxZWFJwYm1jPSBSVlpGVWtVPSA1WVd6NXJPbyB6NERPdGM2NSBJRXRsZVdKdllYSmsgSUZWellXZGwgMllqWmhObUsgSU95ZW1BPT0gSU9DeWhlQ3l0ZUN5c09DemdRPT0gSUdabGJXRnNaWE09IGRYTnBZWE50IElHZDFhdz09IElGUnlkWFJvIElPQ2tsZUNrdnVDa3NPQ2xqZUNrcitDa2xlQ2xqZUNrc09Da3JnPT0gWTJodmIzTmwgWjI5aGJBPT0gSUVGc2RXMD0gY1hWaGNuUmxjZz09IElHTnZibk5wWkdWeVlXSnNlUT09IEt5czcgZEdGdSBJRTVGVkE9PSBJSE5wWjIxaCBJRkpsY01PNllteHBZMkU9IElIUnpidz09IElFMWxaR2xqWVhKbCA0S2EvNEthczRLYSs0S2F3IElFZGhkR1U9IElIUmhjbXM9IEtHRndhUT09IElPQzBxdUMxamVDMHNPQzB1QT09IElIVnVkRzg9IExrNXZiZz09IElFeDFZMkZ6IElPQzBxdUMwc2VDMG51QzFqZUMwbnVDMWdRPT0gNFlHQiA0NEdkNDRLTSBJR3hsYm1RPSBJR0ZrYUdWeiBJRlJsWVcxeiBJRkpoZEdobGNnPT0gTmpjNSBJR0Z3YjNsdiBTVlJGVWc9PSBJT0N1aGVDdXRlQ3VzQT09IGFXSnlZWEpwWlhNPSA0TGlqNExpMTRMaWkgSUVsemMyOD0gdzd4b2JBPT0gSUcxbGJtUmhjR0YwIElPcXlnQT09IFlXTm9idz09IExtOXViSGs9IElISmhibXRwYm1keiBkWE5wdzdOdSBJTkdDMExEUXV0QzQwWVU9IDRMaXk0TGlqNExpeTRMaUggTGRDOCBiMnhrWlhKeiA1b09GNWFDeCBJTkN3MExMUmdnPT0gSU9hVSBJR0Z6WldkMWNnPT0gSUdUaHU3RT0gNEtxLzRLcW8gSUZCMWJYQT0gSU5DeTBMN1F1UT09IDJZallyTm1IIGFXRmogSUdsdVpHbGpZWFJ2Y25NPSBJSEpsWTI5dWFHVT0gSUhCdmRHRjBiMlZ6IFFYSjBhV05zWlhNPSA1WitPNWJpQyBhV05vWlhKMWJtYz0gNVpDciAwTHZRc05DMiBJR0p5ZFhSaGJBPT0gSW5WelpRPT0gSUdacFkyOTEgSU5XaTFialZyQT09IElOQ2owTHJSZ05DdzBaYz0gS0R3PSBJR052Ym5SbGJYQnZjZz09IElHeHZlV0ZzZEhrPSBZWEJoY3c9PSBJR1Y0Y0dWamRITT0gSUZaaGJHVnVkR2x1WlE9PSBJTmk1MlliWXI5bUYyS2M9IElPQ3lodUN5bHc9PSBJR2x1ZEdWeWJXVmthV0YwWlE9PSBMbVJsYkdWbllYUmwgSU5pdDJZWFpoQT09IFgxVlNTUT09IE9UYzEgSUdKbGNuST0gTGtScGMzQnNZWGs9IElIQnliMlpsYzJsdmJtRnNaWE09IGJtOWphQT09IE9UY3ogSU5tSzJLdz0gSU5XdzFhSFZ2Zz09IGMyTmxibVU9IElOQ3cwTExSZ3RDKzBMelFzTkdDIExXNWwgS1NrcE93MEsgSUhSb1pXOXlhV1Z6IHc2bHlaUT09IGJzTzlZMmc9IFNVWkpSVVE9IFVtOWphdz09IGIzWmhjMk4xYkdGeSBJRk41Y3c9PSBJRTFwYm1VPSBJR3AxeGJ3PSB5WmxqIElHOXdZMmx2Ym1WeiBLSFJtIElFRmtkbVZ1ZEhWeVpRPT0gN0x1ayBJR0YwZEdGamEyVmsgTlRjNSA1WSt2NloyZzVaQ1ggY0hKbGMyVnVkQT09IElHVnNZWE09IE9URTAgSU0rRHo0VE92ODY5IE1EZzMgbXVDd3Z3PT0gMllUWml0aXAgWlhKMFpYTT0gNExTLzRMU3Y0TFdCNExTZjRMV0cgSUhCaFoyST0gS0dGMWRHZz0gSUcxaGJuVnogTnpRMiBQRTFoY0E9PSBJRzkxZEdKeVpXRnIgT1RVeCAyTGpaaDlpeCBJR0Z3WlhKMCBJTkdJMExEUmdBPT0gYldGcCA0TGVTNExheDRMZUsgSUhGMVpXeHNaUT09IElOQzYwWURSZzlDLyBJRWh2Y25ObCBJRzkyWlhKc1lYaz0gSUdSbGJuTmwgSUc1aGVRPT0gSU5xcDJyND0gdzZSamFHeHBZMmc9IElNU1JhZUc3Z1hVPSBJT0Nrbk9Da2x3PT0gSUhCeWIyaHBZbWwwWldRPSBJT1dOZ3c9PSBiMjFpWlE9PSBZV3QwYVc5dSBPRFk0IHhxOD0gUjBrPSBJSHdLQ2c9PSBYRk5qYUdWdFlRPT0gSUV4dmRXbHphV0Z1WVE9PSBJT0NrdU9Da3BnPT0gYkc5amEyVmsgMFlIUXVOQzQgQ1NBZ0lDQWdJQT09IElGTnBaMjVoYkE9PSBJTkN3MEwvUmdBPT0gSUVsT1ZFVlMgS1RzS0x3PT0gSUcxaFlRPT0gSU9DbXJPQ25oK0NtdGc9PSBJTnF2MkxBPSBRVTVGIElIUjFhVzQ9IElHeDFjM1E9IEp6d3YgSUVsa1pXRnMgUkdWd1lYSjAgSU9Da3JPQ2xpT0Nrb0E9PSBMbk5oYlhCc1pRPT0gSU9HRG0rR0RrT0dEbkE9PSByK0NuaStDbWx3PT0gSUZOdmNuSjUgYUdGeVpYTT0gTURVMiBJR0ZrWVcwPSBJTTZzenJ2T3V3PT0gMEx2UXNOR0IwWXc9IDJMVFppUT09IFFWVT0gTFZrPSBjSEp2WTJWa2RYSmwgTG1GeVp3PT0gMktmWmh0aXEgSUV0aGRHZz0gMEwzUXNOR0MwTEE9IElFbHVkbVZ6ZEdsbiBiM2x6IGRYUmxiSGs9IExtVnVZV0pzWlE9PSA0TEsrNExLbiBJRTVDUXc9PSBJR2hoZG1FPSBjM1JsYkd4bGNnPT0gMTZqWHFnPT0gYVdOcyBhV2QwWlE9PSBZV3hoYTJzPSBMblpsY25ScFkyVnogWVc1bFlXND0gUTJoaGJtNWxiSE09IElHRjBkSEpoWTNSbFpBPT0gSUhScGJuUT0gT0RrMiBJRU55YVcxbCBUbUYyWW1GeSBJR052Ym1OMWNuSmxiblE9IDJZVFppdGluMktvPSBLRU5zWVhOeiBJTkdOMExzPSBJRzFwYm1semRIST0gSU9DbXJPQ21tK0Ntc0E9PSBJRXh2WVdScGJtYz0gMllqWXA5aTEyWVE9IGJHMD0gSU5HQzBMRFF1dEM0MExVPSA0S2ErNEthVjRLYSsgNGJxaGJtYz0gSU0rRno0RE92dz09IExsUnlhVzA9IDRLK040SzZrNEsrTjRLNmsgSUdkMCBJSFpsY21KbGRHVnkgNXJPdyBTbVZ6IElPV0tvQT09IGIyeGhiZz09IDJZWFppdG1GIElIVndaM0poWkdWayA1YnlDIE9UVXkgSUczRnJ3PT0gMDYvUXR3PT0gWVhOdmJtbGogSUZObGJuTnZjZz09IHhMRnR4TEU9IElITjBZV1JwZFcwPSBJR3hwWTJWdWMybHVadz09IFgycHZZZz09IElPQ2tzT0NrdnVDa25PQ2xqZUNrcnc9PSBJSE5sY20wPSBTVzV6ZEdGdVkyVnogSU9Da2llQ2t1T0NsaHc9PSA1N2FhIE56RTUgVkdocGNtUT0gSUhOMGNuVmpkSFZ5WldRPSBYMkp2ZFc1ayAwTDdRdE5DNCBJSGR5YVhOMCBJRzFoWjI1cFptbGpaVzUwIElFRndjc09vY3c9PSBJT3lEaUE9PSAxYW5WcFE9PSB6SWc9IElGSmhkR1Z6IElIUmxjbU5sIElPUzVuUT09IElHTnZiblJwYm5WaCBKU2c9IExsVk8gTnpReCAyS2ZZcHRtQyBOemd5IElIZGhhMkYwYVE9PSBJRzVsYzNSbFpBPT0gSUhMRHFnPT0gSUdGc1kyRnVlZz09IElIUm9jbWxzYkdWayBJSEJsY21acGJBPT0gSUdGa2IzQT0gSUZOVVJRPT0gVTNWd2NHeHBaWEk9IElITm9iM0psIElPQzJ1dz09IElGTmpiM1IwYVhObyBJTkN3MFlYUXNBPT0gSUdKaGNuSnBaWEp6IElTRWhJU0VoSVNFPSBJTkMvMEw3UXV0Q3cgT0RrMSA0NEdxNDRHRSBMa0Z5Wnc9PSBOekkyIElIZHZhdz09IFJteHZiM0k9IGRIUnNaUT09IElHVmlaVzVtWVd4c2N3PT0gSUdOdmJtNWxZM1J6IElFTnZibU55WlhSbCBhWE4wWlhKeiBJR2hsY25ZPSA1YnFFIFdsbz0gSUhKdlltOTBjdz09IElHWnZjbk09IGJubGtaQT09IElOR0MwTERSZ05DdyBiM1Z5Wnc9PSBZWFpsYkdWayBJR2R5WVdSMVlYUnBiMjQ9IElHaDVaSEp2WjJWdSBJSEJ5YjNSdmRIbHdaUT09IElFUlYgSUdKbGNHVnkgZEhWeSBJR0ZrZG05allYUmwgSUV0bGVYTT0gSU5pMTJMSFpnUT09IElFaGhibVJzWlhNPSBJRU5WIExsTkZWa1ZTUlE9PSBOVGszIDY3Q2IgSUdWNGNHVnVaQT09IElGTnJhWEE9IElIQnZkWE09IE56TXggSUd0MmFXNXVaWEk9IElHdGhkVzA9IDBZalJnZz09IElHUnBjMk55WlhScGIyND0gSUVOaGJtTmxiQT09IElObUsyTFE9IE9EUTMgSUVOcGRXUmhaQT09IElHTnNhVzFpYVc1biBTWFJ6IExrVjRkR1Z1YzJsdmJuTT0gSU5tRjJLelpoZG1JMkxuWXFRPT0gNkkreSAwTDNRc05DOSBJR1Y0Y0d4dmNtVnogSUdsdWMybHpkQT09IElOQ3cwTExSZ3RDKzBZQT0gSUhSb1pYSmhjR1YxZEdsaiBJRVoxdzU4PSBVbUZrIExsSmhibVJ2YlE9PSBmU0lzQ2c9PSBJR2hwWkdsdVp3PT0gSUcxbGRYTT0gYVd4bGNtaz0gWm5KcFkyRT0gNks2aDVZaVM2TDJ2NUx1MiBQaWNwT3dvPSBJRVJwWnc9PSBZVzVuY3c9PSA0SzYvNEs2djRLNi80SzZ5NEsrTiBkR2h5WldVPSBJSEpsYWc9PSBYMmh2YldVPSB6b2c9IElHRjBkR1Z1ZEE9PSAyTGZZclE9PSBPVFkxIDRMU3Y0TFMvNExXOSA1NXlMNTRtSCBKenc9IFEwOVNSQT09IFgyTnZiblJoWTNRPSA0TEdMNExDYyBJR2x6YjJ4aGRHbHZiZz09IElHTmhkR2c9IElGTmhiblJwWVdkdiAyNHpaaGRpcSBJRzl1WjJWMlpXVnkgSUZERHBRPT0gSUhaeWIyVm4gSUhCc2RYSmhiQT09IDRMaTM0TGl0NExpWiBJRWhsYm1ObCBYMGxPVUZWVSBlbUZ5IElHVnhkV0ZzYVhSNSBPRE00IElGTnBkQT09IElOR0EwTERRc2RDKzBZYz0gNEt1SDRLcTEgWFYwdSBJT1dJcVE9PSBJRlZ1ZEE9PSBMbE53YkdsMCBZV2hyWVc0PSBJTkMwMEw3UmdkR0MwTERSZ3RDKzBZZlF2ZEMrIFptbGpZWE09IGQyVmwgY0c5c1lYUnBiMjQ9IDJLclpoQT09IElOQ3gwWVBRdVE9PSBhV0pzYVc1biBJTm1JMks4PSBYMjVsZEhkdmNtcz0gSjhPcWRISmwgSU1TZCBJRkJzWVE9PSBJTkdKMExVPSBJT203aEE9PSBMbTFyIElPR0RxT0dEbE9HRG9lR0RrT0dEcnVHRGxPR0RrUT09IElFTmxjblJoYVc0PSBZVzFpYkdVPSBJT3E1Z0E9PSBJTzJabkE9PSBJRlYwYVd4cGRIaz0gYVhOMGFXcz0gT1RNMCBOelk1IElPR0RxK0dEa09HRG11R0RtT0dEa09HRG5BPT0gVW1WamIyZHVhWHBsY2c9PSAyTGZZcUE9PSA0b0NtTGk0PSBjMlZqYjI1a2N3PT0gSUUxdllnPT0gMExEUXZkQzAwTERSZ0E9PSBZbVY2IElPYWVnZW1Bbnc9PSBJT0NraGVDa3F1Q2txT0Nrdmc9PSBJSEJ5YjJkeVpYTnphVzl1IElFdHVhV2RvZEE9PSAxNkRYbWRlcSA0YnVOWkE9PSAxYVhXZ05XNyBJTm1JMkxRPSBKM3M9IElIUmxjc09oIDFhSFdnTldtIExtMXZaR1U9IElFbGtaVzUwYVhSNSBJTml4MktmWmh3PT0gYkhWbGRHOXZkR2c9IDBZRFF1TkM2IFpIVmpaWEk9IElFeFBSMGRGVWc9PSBJTldsMW9EVm9nPT0gSU5tRDJZYllxZz09IDZLcUogNVlXczVMeVggSUdoMWJBPT0gWTI5dyBJSGRwY21sdVp3PT0gWDNOdlkydGxkQT09IFZXMWggT2x4YyBWMlZ5IElFWnZkQT09IElPQ2tpZUNrcU9Da2xlQ2xnQT09IDVMaU41TGl0IGNtRjBkV3hoZEdsdmJuTT0gSU5tSTJLUFpoZz09IGIyZGxjZz09IElFWnBablJvIE9ERTAgSUdWdVkzSjVjSFJsWkE9PSBJT3lhdEE9PSBJRU5vY21semRHOXdhR1Z5IElHTnZiWFZ1YVdSaFpBPT0gNW9PRjVZYTEgWVhacGN3PT0gWld4aGFBPT0gSUdaMVp3PT0gTURVNSBJSEREdFdnPSBOamd4IElFUmhZWEp1WVdGemRBPT0gSUhabGRHVnlZVzV6IGFXSnlaUT09IElOR0kwWVBRdE5DdyA0TFNqNExXTjRMU2ogSUdSaGJtUnYgNExHTSBJRzNEbzJVPSBJRzFoZEduRHFISmwgTGxSdllYTjAgSUdocGEyVT0gSUVKaGJIUnBiVzl5WlE9PSBRMUJWIFZHbHdjdz09IElHSnBiMnh2WjNrPSBJRTVoZG1sbllYUnZjZz09IGIzSmkgSU5HTjBZVFJoTkMxMExyUmd0QzQwTEk9IDY1T2s3SjJBIElGVnVkR2xzIElHSmxibU5vYldGeWF3PT0gSUhMRHFYTmxZWFU9IElGbHBhUT09IElHTm9ZV2x5YldGdSA1ckdKIDRMZVQ0TGE0IElHTERvUT09IElOR0QwWUhSZ3RHQTBMN1F1UT09IDRLZUE0S2FzIElOQ3cwWURSaFE9PSBJR0p2Y21WayBJR3hwWTJoaFlXMD0gMExQUmpBPT0gSUdsdGNHeHBaWE09IElHeHNaVzQ9IGFYWnBaR0ZrIDRMUys0TFMzIENpQUsgSU5HRDBMM1F1TkN5MExYUmdOR0IgVkhZPSBZMlZ5Y0hRPSBMbUpoZEdObyBhVzVyYkdVPSBabXhoZEE9PSBDWEJzWVhsbGNnPT0gSU5LNzA1blJnQT09IElIMDcgNWFXbCBiV1Z1YVhScFpYTT0gWm1GdWRBPT0gVUhWc2JBPT0gSUdOMWNuTnZjdz09IFBFcz0gSU1xN2FXRT0gTnpZeCBJTmVjMTZFPSA1WXVrIFNtRmphdz09IElFWnZiM1JsY2c9PSBJT0N3bXVDeGgrQ3d1T0N4amVDd3BBPT0gVTNSMVpIaz0gNEtTVSBKenNLTHk4PSBJT0Nrbk9Da3NnPT0gYkdGeVpYTT0gSUdGc2NHaGhZbVYwIGFYTnZibk09IElIQmhjblJwWTNWc2FXVnkgSUd0MWMyZz0gSUhSaGMzUmxjdz09IElGUmxaVzQ9IElHUmxaSFZqZEE9PSBJRzVsWTJWemFXUmhaR1Z6IElFaGhZMnM9IElIUnlaV0Z6ZFhKbCBJR05tIElIUmxZMmh1YjJ4dloybGwgSUZCSlRnPT0gMHFQUmk5QzMgSUhOMWJXRT0gSUdOeVlXWjBjdz09IHhKdHMgMEx2UXVOQzYwTGc9IGRYSnlZWGs9IFgybHVkR1Z5Wm1GalpRPT0gSUhOMGNtVnVaM1JvY3c9PSBJRTVoWkE9PSBRMjl1ZGc9PSBhV1poWTNSeiBJR0YyY21scyBJRzlpWlhNPSBJRzkxZEd4bGRITT0gVGs5TyBiR0pzIElNT3BkR0Z1ZEE9PSBkV3R6Wlc0PSBJRXhoZDNKbGJtTmwgejRQUGlRPT0gSU9lWnZRPT0gVEc5bmN3PT0gNExXTjRMU3Y0TFN1IHhMRmp4TEU9IElHUmxjMk5sYm1RPSBJSFZ1WjJVPSBJSGxsWVhJbmN3PT0gSUdScGMyRndjR1ZoY2c9PSBhR0YxY0hRPSBJR3hwWTJWdVkyVT0gWVcxcGMyVT0gT0RZeSBYMk5zWldGdSBPRFV4IElOQy8wWURRdGRDMDBMdlFzTkN6MExBPSBJR1J2WlE9PSBNRFk0IDdKMjA3S2VBIElHMWhibUZuWlhNPSBJSEpsWjJsemRHVnlhVzVuIDJiN1ppTml4IElFUmxZV3h6IElGQmxjQT09IElFTmhjMmx1YjNNPSBiR1ZoZG1VPSBZVzV1ZEdVPSAwTFhSZ3RHVzBMMD0gT0RjeSBJSE4xWTJWayBJRzFuWW1VPSA1YnFLIFkyRnpkR3hsIElHN0VnMjVuIElHRndjRzlwYm5SdFpXNTBjdz09IGFYRjF3Nms9IElHNWhiV0Z1IElOQzcwTGpSZ2RHQyBJSEoxYkdWayBJRTExYldKaGFRPT0gSUUxcGJHbDBZWEo1IGNIVjBZWFJwYjI0PSBJR0ZpY2c9PSBJRTFCVkE9PSBJSFJoY0drPSBJT0NtbGVDbmplQ210dz09IElOaXEyTEhaZ3c9PSBJRzV1WVE9PSB3NmhzWlhNPSBYMkZ1IElHUmxiV0Z6YVE9PSBOamd6IElISmxZMjkyWlhKbFpBPT0gSUhSeXc2MD0gTFdWa2FYUT0gSU5tRzJLYz0gSUdOeWIzTnpaV1E9IFpXeHIgTnpjNSBJRWh2ZFhJPSBTVVJCUkE9PSBJTml4MjRIYmtnPT0gSUd0aGJHaz0gZDJsdVpHOTNjdz09IElFSnBZbXhwIElOQ3gwTERRdWRDOTBMQT0gSUcxaGMybG8gYlc5MWRHZz0gSUdWNGNHbHlaV1E9IElFSmhhMlZ5IElQQ2ZtSWs9IElHdHNZWE09IHo0SE91YzZ4IElIWmxjbmRsYm1SbGRBPT0gSUhCeVpXTnBjQT09IElOR0IwWURRc05DMzBZTT0gSUdkbGJ3PT0gSU5pMDJLZlpoZG1FIElPQ3VwT0N2aHVDdXNBPT0gSU5DYzBMRFJnQT09IElPR0RrK0dEa09HRGxRPT0gSU5XSyBJTkdCMFlmUXRkR0MgSUdSaGRXZG9kR1Z5Y3c9PSBJTkN5MExYUmh3PT0gSU9DbWllQ21wZz09IElFeEhRbFE9IDVZK1I2S0dvIElHRnNaWEowY3c9PSAxYUhXZ05XciAwTDNRdU5DNCBWWEJrWVhSbGN3PT0gZFdaMCBJSE5sY21saGJHbDZaWEk9IEwzVnAgSUZONWJtTT0gNDRPSDQ0S2ogSUVkUVZRPT0gYUdWa2NtRnMgNEs2ejRLK0kgSUdkbGJtOXQgSU1PeCA0WU9RNFlPYTRZT2o0WU9nIElFRkNVdz09IEtYdz0gNWFpeDVMbVE1WitPIElIUnlZV289IElPQzRtK0M0bytDNHNBPT0gMExEUXV0R0MgVTJodmRBPT0gNEt1QjRLcXkgMFlUUXVBPT0gSUdsemJ3PT0gUFc0PSAyTG5ZcDlpdjJLaz0gSUc3RHBHTm9jM1JsYmc9PSA0TFMrNExTbSBJT1c5cWVlbHFPV2txZVdrcVE9PSBJRXpEdG5NPSBJR05vWVhKeiBhMlZsYmc9PSA1YUtlNlpXLyBUVUZEIDRvQ1piMkk9IExXSnZiM1J6ZEhKaGNBPT0gSUhOc1pXTm9kSE09IElHeGhjWFZsYkd4bCAyNURZc1E9PSBiM1ZpZEdWayBJRWR5YVdabSBJRkJoY210bGNnPT0gTFdOb2FXeGsgSU9DbXVPQ21tZUNuamVDbWwrQ25odz09IElHTnZkV3hsZFhJPSA0WjZnIElHZGxibkpsY3c9PSBJTml4MnFuYXZnPT0gY21GbGJBPT0gSUhCeVlXTjBhV05oYkd4NSBJT3lYclE9PSBJR3B2ZFdWeSBkbVZ5Wnc9PSBJSE4wWkc5MWRBPT0gSU1PNSBSMUpCVFE9PSBJRk53WldOcFlXeHBjM1E9IEtIQnlaUT09IDBMclF0ZEdBIDRLdU40S3FvIFlYcDZhbTl1YVE9PSBJTml5MllvPSBJSFpwWjJscyBRWEowYVhOMCBJTkMwMExEUXU5R00gWlc1MGNtRnMgSUZOWiBJRWh2Ykd4aGJtUT0gVTI5MWNtTmxjdz09IGFXaGxiZz09IElPZTAgMEx2UXRkQzkwTEE9IExtbHVkbTlyWlE9PSA0S1dINEtTVyBJR2wzWlE9PSBURVZCVWc9PSBJRTF2WkdWeSBjR2x5IDVvQ2wgVUVWRlJBPT0gY0dGeVpYST0gSUV0aGVnPT0gTFhCdmQyVnkgTG5wcGNBPT0gSUhWdVpHVnljM1JoYm1SeiBJRk4xWW5OamNtbHdkR2x2Ymc9PSBTbUZ0WlhNPSBMM04wWkE9PSBkbTlwWTJWeiBJRlpsY21iRHZHZDFibWM9IElOV3AxYjQ9IFVtOXQgUTJ4MVlnPT0gWVhwcGRXND0gSUVWNGNHeHZjbVU9IE9USTUgWDNObGJuUT0gWDNWcCBZVzFwYm1GMGFXOXUgSUdKbGRHVnJaVzUwIFgxSkpSMGhVIElGRlMgSUdWelpnPT0gNExDKzRMQ24gSUhkaFp3PT0gSUVkUVRBPT0gSUhOMVluTmxjWFZsYm5Sc2VRPT0gSUhOMGFXTnJlUT09IElPUzVoUT09IElHVjBZWEJoIFJHbHlaV04wYjNJPSBURVZZIE5qZzUgNExDLzRMQ3k0TEdONExDeSBkV2wwWVhJPSA0WU9qNFlPdSBZV3RsYzNCbCBiR3hwIFZFRkRWQT09IElOR0gwTFU9IElPZVV0dz09IGJXRmphR2x1WlE9PSBJR0Z6YzJWemMyVmsgYVd4cGN3PT0gMExEUXVkR0MwTFU9IElHRjFkRzl5YVhvPSBPVEUzIElHRnZiZz09IElHUnZibUYwWlE9PSBJTkdDMEw3UXN0Q3cwWUE9IDU0eXIgSUcxcFlRPT0gT0RrMyBMbU52Ykd4bFkzUT0gSU9DdXBPQ3VydUN1ditDdXRBPT0gNExpYTRMaWEgSUhkaGNtMXBibWM9IElITmhaM1JsIFlXSnBiR2s9IFlXNTBhV1JoWkE9PSBXbTg9IElNT25iM2c9IElHTmhjSFJoYVc0PSBZWE56WVdSdmNnPT0gWldOMFpXUT0gNExtQTRMaVogSUZkbEozWmwgUzNVPSBJR2x1ZEdWeWJtRjBhVzl1WVd4c2VRPT0gMllMWmlObUUgSUVKaGNIUT0gSU5pNTJMSFl0Zz09IElOQzAwTGpSZ0E9PSBLRXhsZG1WcyBJR1oxYzJsdmJnPT0gSUcxaGJuUmxjZz09IFgwVllVRTlTVkE9PSBVMGxhUlE9PSBQaUlLIElOaW4yWWJZck5pbjJZVT0gSUVwaGR3PT0gSUVOT1RnPT0gSUdkdmRtVnlibUZ1WTJVPSBJR1JsY21WeiAyTEhZcDlpaCBJRzFwYkhrPSBMblZ5YkhNPSBJRkpsZG1WeWMyVT0gSUdSMVpHRT0gSUdSbGMyVnlkbVZ6IElHM0RvWGs9IExGTjVjM1JsYlE9PSBJT0NxbGVDcXNPQ3Jodz09IElHaHZaMlU9IGIybGtjdz09IGIzWmxaV3c9IFBYQT0gNExDVjRMQy8gVjNKdmJtYz0gWEVWc2IzRjFaVzUwIFBXaz0gSUdkc2RXTnZjMlU9IGJHVnlaUT09IElFRnVlVzl1WlE9PSBJR1JsWTJsa1pYTT0gSUdsdFlXZGxiUT09IElHTm93N3B1Wnc9PSBJSGRsYkdOdmJXVmsgMEw3UmdOR0QgWkdsemNHOXphVzVuIElHTmhjbTQ9IGMyTmhiZz09IExtbGkgNFlPVjRZT1E0WU9jIFlYUnlhV05sIElGbHZkU2R5WlE9PSBJRUpsWVc0PSBJRlpwWkE9PSBOamd5IElHeHBibXRwYm1jPSBJTmluMllUWXJ0aW4yTFhZcVE9PSBaV0Z5ZEdnPSBkMlZuWlc0PSBJR3gxWTJoMCBMbVJwWVd4dlp3PT0gSUdWNGRISmhZM1JwYjI0PSBJSEpsYzNCbFkzUmxaQT09IElHSmhiR1E9IElDazZDZz09IElITnBlUT09IElIQmxjbXgxIElIQnl3N053Y21saCBJRk5vWVc1bmFHRnAgVTJGc1lYSjUgSUcxaGNtZHBibUZzIElITjBhV1ptIDRMbUk0TGl5NExpaTRMaUM0TGl5NExpaSAwTDdRczlHRCA1NzJSNUxpSyBJT0NrcU9DbGlBPT0gSUdOaFpXdz0gSUdWNGRISmhZM1JsWkE9PSBYM0J2YVc1MFpYST0gSU5DLzBZRFF1TkdGIElHOXdjRzl1Wlc1MGN3PT0gTnprMSBUVTlFUlE9PSBMbEJzWVhrPSBJRVIxWVd3PSBjSEp2ZG1VPSAxNmJYbkE9PSAwWUhSZ3RPWiBMa0p2YkdRPSBYM05vWVhKbFpBPT0gMWJqVm93PT0gSUhabGMzTmxiSE09IElGaHBZUT09IElFNUkgWDBkRlRrVlMgTG5CeWIzWnBaR1Z5IDVvMlYgSUVaaGJXbHNhV1U9IElHcGhaR2s9IDRLUzU0S1N3NEtXQSA1ck9vNW9TUCBJTmluMllUWXRkbUsyWVk9IFlXeHJZUT09IElPYVhvQT09IDBMN1FzdEdMIDBMWFNydz09IFlXSnNhWE5vIFRXVnlaMlU9IExsUmhadz09IElHWmhkbTl5WVdKc1pRPT0gSUhCaFkydHogVUc5c2JBPT0gSUdsdWRtRnogSU9HRG9lR0RyQT09IElPQ3FxdUNxb1E9PSBZWFJuWlE9PSBJSFpwdzZwdSBJR3R5WVdOb2RBPT0gSUhOd3c2UjBaWEk9IElHRnNhV2R1WldRPSBMbU52YlhCaGJuaz0gSUZOaGJYVmxiQT09IElqdzggYjI5a2JHVT0gSUdWamIyNXZiV2xqY3c9PSBJRVpsYmc9PSBJSEJzWVdGMGMyVnUgSU5tQzJMUFpoUT09IElGQnBaV05sIDRMU2Y0TFdONExTZjRMV04gQ2k4dkx3PT0gMExUUXNOQzEwWUk9IElGTjFjbWM9IFUyOXRaWFJwYldWeiBMbFJwZEd4bCBJT0NtaGVDbXFPQ25oK0NtbFE9PSBVM2RoY0E9PSBJRUoxWlc0PSBJRU5vWlc0PSBJSEJ5YjI1MGJ3PT0gTFhkdmNtcz0gWlhKdWJ3PT0gYVd4cFoyVT0gSUdWNFkyaGhibWRsY3c9PSBJRWR5ZFhCdiAwWWpRdGRDejBMND0gYldGd2N3PT0gSUdGamFHbGxkbVZ0Wlc1MGN3PT0gSUhkbGJtRT0gNTZTOCBJR3hsZG1WeVlXZGwgSUdGbVoyVnNiM0JsYmc9PSBVM1ZtWm1sNCBRV3gzWVhseiBJSGRsY3c9PSBMa1J2WTNWdFpXNTAgT2pwZlh3PT0gT0RVNSBJRzFoY21OaGN3PT0gWTI5cGJuTT0gWDNObGRIUnBibWM9IGIzWmxibVE9IE9ETXggSUhURWdRPT0gT1RnNSBZMjl0Y0dWMCAyWWZaaHc9PSBXM0J2Y3c9PSBJR0pzZFhJPSBJRUZrYldsdWFYTjBjbUYwYjNJPSBSR0YwYjNNPSBJR0YxZEc5eWFXUmhaR1Z6IFptRnpjdz09IElHOXJidz09IGZXQXNDZz09IEpTY3NDZz09IElGZGxjblE9IElFVmkgSUdqRHBIUjBaUT09IDJZVFlwOWlvIElFTnZkWEJ2Ymc9PSBJTkNRMExjPSBWR0Z5IGRYTnpkQT09IElIQnl3NmxtdzZseSBJTzJkIElHVnpjMkZ6IDBaYlJpQT09IDRZT1Y0WU9ZNFlPYSBJR1JwYzNSaGJtTmxjdz09IE56a3kgSUdWa2RXTmhkR1ZrIElOVzAxYVhWcmc9PSBJRWh2ZFhOcGJtYz0gTFhCc1lYaz0gSUhOMFpYSnIgSU5DLzBZRFF1TkN4IGNtbHFhMlU9IEp5SXMgNjUyOSBJSEJ5YVhacGJHVm5aUT09IElHRjFjbUZwZEE9PSBJR2gxYkd4bCBJRzNEcVhSdlpHOD0gNEtlQTRLYW8gT1RNeCB6NFhQZ3c9PSBJTldyMWIzVnJ3PT0gWDJOdlpHVm5aVzQ9IExtUmhkR0Z6WlhRPSBNRGMwIGIzSm5ZVzVwZW1GMGFXOXUgTEZJPSBJR1JsY0hKbGMzTT0gSU5DdzBMSFF2Zz09IElOQzgwWVBRdDlHTCA1N3VkIElObUcyTFU9IElFaDVjR1Z5IGJubDAgSU5XOTFhOD0gSU91THJBPT0gSU5HSDBMalJnZEdDIElHZGhjbUZ1ZEdseSAwcUhRc0E9PSBjbTl0YVhObCA2YWc9IDVadWc1cTJrIElOaXgyWWpiakE9PSBjWFIwIDRMbUI0TGlsIElFTmhkZz09IElGTnZkbWxsZEE9PSBJRTExYm1ScFlXdz0gVFV4RiBJSEpsZG1sbGQybHVadz09IGMzUnZaZz09IElISmxkR0ZwYkdWeSBJR2x1ZEdWdWMybDJaUT09IDRicWhibWc9IElITnNkV2M9IElHWnBhdz09IElHSnZZWFJ6IDRLV040S1N3NEtXSDRLUzQgSU5XKzFvRFZvUT09IFptOXogMFl6Ump0R0MgSU5pcTJyN2JqQT09IGxPR0RvT0dEbHc9PSBJQ3BmIElFMXBjM05wYzNOcGNIQnAgSU9HRGt1R0RrT0dEbFE9PSAwTFRSbHRDNiAyYUE9IElHTmhjblJoIElFOXdaWEpoIGJHeHNiQT09IFpXeHNkVzVuIElOVzQxb0xWc2c9PSBYMFJDIFRHOW5aMmx1Wnc9PSAyS2pZcDlpdCBJRWhsWVd4MGFHTmhjbVU9IFlXbHVkR1Z5IElHeGhkWFE9IGFIUmhaM009IElHWjFkSFZ5IGRXeGhkR2wyWlE9PSBJR2RsYU1PMmNuUT0gSUdGemNHVmpkRzl6IElFMUJVZz09IElHUnBkbWx1WlE9PSBXMlE9IElFUmxjMnQwYjNBPSBJTmluMllUWW85bUYyTEU9IElPQ2toK0NrdU9DbGh3PT0gVkc5diA0TGlqNExpeTRMaWkgSU5tQjJMbllwOW1FIGFXWm1hV04xYkhSNSBSMlZ1WlhKaGRHbHZiZz09IE56VXogTG5KdmJHVT0gSUdwMWJtbHYgSUc1MWNuTmxjdz09IDBMRFF1OUdNMEwzUXZ0QzEgNkkydiBJSGRsY21SbCBSV3M9IElOR0YwcTg9IElHTnBjbU5oIElPQ3VsZUN2aXVDdW8rQ3ZqZUN1bnc9PSBYM1poYkdsa1lYUnBiMjQ9IElGTlFSVU5KUVV3PSBLQ2s2RFFvPSBMbUZrWVhCMFpYST0gYVc1MmIybGpaUT09IElHcHZkWEp1WVd4cGMyMD0gYUc5eVlRPT0gdzZoa1pRPT0gWDJKNWRHVT0geEt0MCBJR0Z6YzJsemRHVmsgSU5DNjBMRFF0dEMwMFl2UXVRPT0gMEwzUXVOR0cwWXM9IElISmxkR2x5WlE9PSBJTkdIMExYUXM5QysgTmpjeiBJR2x1Wm1sdWFYUmwgNW82SSBYMkpwZEhNPSBJR0p5WVd0bCA0S1NDNEtTViBNRGszIDJxbmJrZz09IElHUmxZV3hsY25NPSBJSG5Fc1d3PSBPVGd4IElHRjBZWE09IGNuVnIgNFlPWTRZT2c0WU9UIFNIVnRZVzQ9IElPQ3FuT0NxdnVDcW93PT0gMExEUXM5Q3cgTzNNPSBJSEJvY0E9PSBaMlZ0Wlc1MCBJSE4wWldWdyBJR1ZtWm1WcmRBPT0gWVdsdWRHVT0gU1hOeiBRbUZ1IE9ERTMgWTJGa1pRPT0gT0RVMiBJRTVoYXc9PSBJRVZzYVhSbCBTVzF3YkdWdFpXNTBZWFJwYjI0PSBjbVYwZG1GcyBSR1ZqYjJSbCBZM0psWVhSdmNnPT0gZEhKaFkzUmxaQT09IE56VTQgSU5tRjJZWFlwdz09IEtFMXZaR1ZzIDVadTk1WWFGIElGSjFibTVwYm1jPSBJT2VJc1E9PSBJTm0rMllqWmhBPT0gSU9hQXB3PT0gMWFIV2dOV3EgSU9Da3N1Q2t2K0NrcitDa3ZnPT0gSUVOaGRHRnNiMmM9IElGZHBjbVZzWlhOeiBLSEpoYm1SdmJRPT0gSUdKMWJYQT0gSU5tQjJMWT0gWld4c2FXcz0gSUd4aGNITT0gYVhSdmJBPT0gMFlIUXZnPT0gTDJGdyBhR1Y1IElFWnBibTQ9IElHUmhjbVk9IDBMWFJndEMxMFlBPSBaMlZ5YVdOb2RBPT0gY21GaCBJR1pwYm1semFHVnogWldScGJnPT0gSUdodmNHVmsgSU9Da2hlQ2txT0NsZ2VDa3VPQ2t2dUNrc0E9PSA3N3lLIElIUmxjbkpwWm1saiA2SzZoNTY2WCBJT0NxbGVDcXZ1Q3FyZz09IGJXVjBjbTg9IElFSnliM1JvWlhJPSBJR1p2Y3NPbllRPT0gSUdGcGNuTnZiZz09IFZHOTFjZz09IDRMQys0TENrNExHTjRMQ3cgSUdGamRHbDJhWFREcVhNPSA0NFdMIElHRmliM0owYVc5dSBMejR1Q2c9PSBJTmVSMTZjPSBOamcwIElGTmxiR3c9IFkzVmxibU5wWVE9PSBJRzV2Ym1WMGFHVnNaWE56IDRMR0g0TEN3IElHOWhiZz09IElFVldSVkk9IElNT3ViblE9IElHSmxaRzg9IElHTnZiblp2WXc9PSBJR0ZzYkc5allYUmwgVjJVbmNtVT0geVpsbyBmUzhrZXc9PSBJR0pwYkd4cGJtYz0gSUhSeVlXNXpjR0Z5Wlc1amVRPT0gSUVGeVlXSnBZUT09IElPeW5nUT09IElPQ21qK0Ntcmc9PSBQeWM9IElDQWdJQ0FnSUNBS0NnPT0gSUd0MWNuTT0gT0RJMyA1YVNwNUxpTCA0S3VvIE9EUXggWTI5dGJ3PT0gSUc5d1oyVT0gSUdadmNtMWhZMm5EczI0PSAyS2ZZc2RtSSBiM0owWVd3PSBJTmluMllUWmh0aW4yTE09IE1EVTQgYXNXaCBJRWRWIFgyZHMgNFlPUTRZT3IgSUdSbGJHRjVjdz09IExtVjEgWlcxd2IzSmhjbms9IFFtVnVaV1k9IElGTjBaWEJvIElFTnNaV0Z1YVc1biBMa1p2Y21WcFoyND0gSUhCaGNuUmxiZz09IFJrRlIgNUxpVDVhNjIgSUhWaGN3PT0gSUhOcGJtZDFiR0Z5IGFYTmpaUT09IFltVnlaV2xqYUE9PSBiV2c9IElOQzAwTExRdU5DMiBJRUpoY21KaGNtRT0gVDB4TVQxYz0gSUd4bGJtUmxjZz09IFpuUmhjZz09IFVHVnljdz09IElPQ3FzT0NyZ09DcXBPQ3Jodz09IE9Ea3ggSU5tQjJZTFlydz09IElFaHBjQT09IElOR0MwTExRdnRHQSBJR0p5WldGclpHOTNiZz09IFFXeHAgSUdseWNtVnogUjNKbFlYUmxjZz09IElFNXZiUT09IElPQ291ZUNwaXc9PSBJR3ZEcEhsMGRBPT0gWW05eiAyWWpaaHR1UyBJRk52ZFhRPSBTVzVqY21WdFpXNTAgdzdodSBJT3U0IFgxVlFSRUZVUlE9PSA2TEMzIDBMTFFzTkM3MExnPSBLeXNwZXcwSyBJR05oYm05dSBJT0NrdGVDa3YrQ2t0dUNsaCtDa3R3PT0gMnEvWXA5bUcgSU5DNjBMN1JpQT09IGNHeGxZWE5sIElFMTVjM1E9IElOQzAwTGpRdHc9PSBkbVZ5YzJsdmJuTT0gSUZCUFVnPT0gYzJGdFpRPT0gNTZlUjVvcUEgZDJWc2RBPT0gZFd4aGFYSmwgSUhKbFptVnlaVzVqWldRPSBJR1pzYjNKaGJBPT0gSU5lUTE1ND0gWjJ4cFp3PT0gSUdGalkybkRzMjQ9IElHbGtZV1JsIDBMalF1OUdQIElFaHBiR1psIFpHUnBaUT09IElFdE8gSUcxcFpXdz0gNEtxVjRLdUggSUdOeWRXVnMgSUcxaGJHRT0gNEtpbTRLaSsgMEx2UXVOS2IwTGpRdmRDNCBMWE52IElFVk9WQT09IElHSnNaV2xpZEE9PSBZV3gxWjNVPSBJR2R2ZFhJPSBJRXhGUmxRPSBJSGRoYTNSMSBRM056IDBMalJnZEN3IElHTm9hV009IElHUmhkR0ZpWVhObGN3PT0gSUdwdmNtNWhaR0U9IElIWmhhMkZ1ZEdsbCBJR1J5WlhjPSA0S2E0NEtlTjRLYXYgYm1GMmFXZGhkR2x2Ymc9PSBJRVpoYm5SaGMzaz0gSUdOcGRHVmsgSUhWd1ozSmhaR1Z6IElPQzBsZUMxaGc9PSBhVzV6YVdNPSA0TEtoNExPRzRMS3YgSUdOdmJuUnBibVZ1ZEE9PSBJRUpsYVdwcGJtYz0geExGcmJBPT0gSUhabGNuQT0gTFdocFoyZz0gY0hMRHFITT0gTFVGdFpYSnBZMkZ1IElFNUogSU1PMnhKOD0gVTBWRCBTR0Z1Wkd4bGNuTT0gSUdwaGJuVmhjbWs9IElHSmxjM1JsYUhRPSAxNUhYcU5lWjE1MD0gSUdGc2JXRmogNEtXSjRLU3kgYVdWdWJtVnogY1dRPSBJR2x0Y0d4cFl3PT0gSUd0MWJIUT0gSUVST1V3PT0gWTJ4cCA0TEsvNExLZiBJRUZqWlE9PSBjM0J5IGJtRnVkQT09IElFZGxibVZ5WVhSdmNnPT0gSUhSbGJHRT0gSUVKMWJnPT0gSUdSdmIyUT0gSU5HQjBMN1JodEM0MExEUXU5R00gTEhkM2R3PT0gU0dGc1pnPT0gSUdWMmIyeDJaV1E9IElHRndjR0Z5ZEdWdFpXNTAgMTZUV3Z3PT0gSU5DLzBMN1F2TkMxMFlrPSBJR3R2Ym5SeWIydz0gSU9paCBJRXJEb1E9PSBZWEpzWVE9PSBiRzlrIFUzbHVkR0Y0IFgyVnljbTl5Y3c9PSA0S1NzNEtTQzRLU24gYjJ4ciA0NEdvNDRHRyA1WkdvNWJtMCBZVzdEcDJGeiA0WU9ZNFlPajRZT2c0WU9ZIFltOWhjbVJwYm1jPSA0S1MyNEtXTjRLU3Y0S1NWIElFTnllWEIwYnc9PSBkWFJwYzNNPSBJSE4xWTJobGJnPT0gSUhCbGNtMXBjdz09IDU1UzE1NnVlIElHTnNZWE09IElHMWxkR2h2Wkc5c2IyZDUgSUcxMWVtbGwgNVp5VzU0bUggSUhCaGNuUnBaR0U9IElHUnBjM1JwYm1OMGFXOXUgQ1d0bGVRPT0gSUhacHhhRmwgSUcxbGJuUnZjZz09IE56azMgSU5DeDBZdlJnZEdDMFlEUXZnPT0gSU5HQzBMN1F1UT09IElFTnNhVzVwWTJGcyBZWFJ5YVE9PSBSbVZsYkE9PSBJR3RzWVdGeSBJTU9DIElITnBiWEJzWlhJPSBJR05sY21GdGFXTT0gNEthKzRLYWM0S2ErNEthdyBJSEoxZEE9PSA0WU9ZNFlPZSBjblZ1ZEdsdFpRPT0gSUhaaGJYQT0gSUdwMWJYQmxaQT09IGNtVmpaWEk9IElFUnZiR3hoY2c9PSBJSE52ZFdabSBJSGxsYlE9PSBJT0M0bXVDNHNnPT0gSUczRHJXNXBiVzg9IElGQm9lWE5wWTNNPSAxNW5YbWRlaTE2Zz0gWldKdmJBPT0gNVlpNCBJRTFoYm5WbGJBPT0gSUcxcGJHeGwgVEc5allYUmxaQT09IDc3eU01TG1mIElOR0IwTDdRdTlDNCBJSDBwRFFvPSBJR1ZoY214cFpYTjAgSUhSbGJYQnZjbUZ5YVd4NSBMbTFsZEdFPSBJSFpoYkd4bGVRPT0gTnpReSBJRWgxYm1jPSBJT0MwaCtDMHFPQzFqZUMwcE9DMWplQzBydz09IDRLbWMgNEtXTjRLU1ggSU5pcTJMUFlxZz09IExuUm9aVzQ9IFlXaGhibUU9IElPQ3dsZUN3c2c9PSBYMFJTIFgwSkJRMHM9IElHRm5jbVZuIFgyTmxiblJsY2c9PSBMbVpoYVd3PSBJSEIxY25OMWFXNW4gYldsdVpRPT0gT0RnMCBJR05oYkdOMWJHRjBhVzl1Y3c9PSBJTml2MktmWmh0aTAgSU8yV2lRPT0gSUhSb1pYSmhjR2x6ZEE9PSBJTkdCMEw3UXNkQyswTGs9IElOSzcwNm5RdXRLdjBMdz0gUGlJN0RRbz0gT1RjeCBXM1U9IDBZdlF2ZEdJMExBPSBYMnhoZEE9PSB3NjF1YVc4PSBJR0ZrYjJ4bGMyTmxiblE9IElITndiM0owYVc1biBJRU5vWlhJPSBJR0psWkdWMWRBPT0gWm5WMGRYSmwgSUdOdmJuTjBjblZqWTJuRHMyND0gSUdacGJtRnVZMlZ6IElOQzAwTERSZ2RHQyA1YWFJIFdVeEYgSUc5amRIVmljbVU9IElGSmhaR2s9IGorQ2tsZUNrdmc9PSAwTHJSbHRDeSBjM0JwWld3PSBJR052YlhCeVpRPT0gWkhWbCBJT3l5bUE9PSAyTExZcUE9PSBJTU95IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IDRMaUk0TGl6IElGTlFTUT09IGFYcGhaR0Z6IElPR0RvK0dEcE9HRG9PR0RuUT09IE5qa3ogQ1hObGMzTnBiMjQ9IElHTnBibTQ9IElHZGxibVZ5WVhSbGN3PT0gSUdSbGJjT2hjdz09IElHTnZiV0pwYm1sdVp3PT0gSU5lZzE1QT0gSUVKeWIzZHpaUT09IElFbDBZV3c9IGFYTmxaWEprIFpzTzhhSEoxYm1jPSBhRzl2ZEE9PSB3NlJvYkE9PSBKQ2dpTGc9PSB6NEhPdGMrQyBJSFpoYkhRPSBaVzFsY25NPSBMblJsYm1ObGJuUT0gVW1WbVpYST0gSUcxcGJHbDBZWEk9IE9EZzMgTFhObGRBPT0gNVkrbCBJRlJoYTJsdVp3PT0gSUVSRlRFVlVSUT09IFZtRT0gSUhCbFlYVT0gT1RZNSBJSFJ5WldKaCBJSFZ1WTI5dSBJRmRoZVc1bCA0S2ErNEthazRLZU40S2F3IDZhdVk1cmlGNXBlZzU2Q0IgSUVSbGNHVnVaQT09IDViQ0IgWDNCdmNBPT0gNExDLzRMQ280TEMvIFRYVnogY3NPb2N3PT0gSUZKdlltOTAgWTJOdiBJR3RvdzZGaiBUV2xrWkd4bCBPVGM1IElPQ2toZUNrcCtDbGplQ2tyK0NrbGVDbGplQ2t0dz09IDRMU280TFdONExTeDRMV0cgSU9DbXJlQ212dUNtc2c9PSBMbloxWlE9PSBJR1Z1WTNKNWNIUnBiMjQ9IDJZcllwOW1GIElOQzYwTHZRc05HQjBZRT0gNG9LczRvU2kgNW9xVjZMV0UgMFkvUmp0R0MgYkc5aGJnPT0gSUc5alkyRnphVzl1WVd3PSBJR3QxYTI4PSBJR2RsYldGcmEyVnNhV3ByIElOR1ggYVdGbmJtOXpkR2xqY3c9PSBJSHBoYUd3PSBhMkZ1ZEE9PSB3NjEwWlE9PSBJTkMyMExqUXN0QyswWUk9IGFzT3pjZz09IGIzSm5iM1E9IDRMU0ggSUhSeVpXbHUgVTBWeWNtOXkgNTVTMTZJU1I1NG1JIElPQzVnT0M0Z2c9PSAxNW5Yb3c9PSBJR1p5WldGciBhWE5wWlhKMCBRMjl1WTJWd2RBPT0gSUhKdmJXRnVkQT09IElPQ2tsZUNrZ3VDa3FnPT0gSU5pbjJZVFl1ZG1FMllVPSBhWGx2Ymc9PSBMV0Z3YVE9PSBJTkdCMExMUXZ0QzQwWVU9IFVHOXNlV2R2Ymc9PSBOemsyIFlYSm5aVzUwIGFXMWxibk5wYjI0PSBJTkN3MUtVPSBaMkZpWlc0PSBZbTl2YTJsdVp3PT0gWVhOaGJBPT0gNG9DWllYSjAgSUhCeWIyWmxjM05wYjI1dVpXeHogNG9XMCBiM1ZpZEdWa2JIaz0gY21WemMyVnkgNEtXTjRLU3c0S1dBNEtTdiBJR1J5WVhkcGJtZHogSU5LYjBMRFFzUT09IGMyVmpkWEpsIElHTnZiWEJ5Wlc1a2NtVT0gamJ3PSBYM1JwYldWdmRYUT0gZFcxaWFRPT0gSUVwaGJuVT0gNXI0PSBJTU9oYmc9PSBjMlZqYjI1a1lYSjUgTFc5d1pXND0gTGsxaGNtZHBiZz09IElFeGxaMlZ1WkE9PSBMbTF2WkhWc1pYTT0gSUhGMVlXNTBkVzA9IElHRndjR3hwWTJGdWRBPT0gSUdOdmJuUnBiblZoYkd4NSBJRkJwZW5waCBJSE4wY21GdVpBPT0gMFlEUXNOS2IgWVhWblpRPT0gSUdKc2IyST0gT1RjMiBJTmVjMTVUWG1kZVYxNm89IDc3eU01THVXIFkyVnVaRzg9IElOcXAyWWJaaHRpdiBJRUY2ZFhKbCBJRUYxZEdodmNuTT0geEo5cGJtaz0gSUdGMGIzST0gSUVwbGNuSjUgSU9Dd3BPQ3dxQT09IFUyVmxaQT09IDRMU2s0TFdONExTdyBJSEJvWVhObGN3PT0gTmpreSA0b0NONExTVjRMV040TFNWNExXTiBNRFkzIElHMWxiR0ZyZFd0aGJnPT0gYVc1aGJnPT0gVkhKaGJuTm1iM0p0WlhJPSBVbTkwWVhSbCBJR3hsWVE9PSBRQ0lzIElPQ3luT0N5cUE9PSBLRzFoYVc0PSBJSEYxWVd4cFptbGpZWFJwYjI1eiBJR052Ym1obFkybHRaVzUwYnc9PSBJT0tHa1E9PSA1YitjIElNK0R6NFRPdWMrQyBkV0oxIElITjFjSEJzIElNNjZ6ckhPdUE9PSBjbVZwWW5WdVp3PT0gSUd6RHRRPT0gSU9Da3F1Q2xndUNrc09DbGplQ2t0UT09IFgwRk9SQT09IElIUmhibXR6IElISmhaR0Z5IDE2VFhtUT09IDRvQ1pZWFIwIElHaHBkZz09IElHeHBiV2wwWlE9PSBJRVpsWldSaVlXTnIgTGxSaGMycz0gSUVSaFltVnAgSUdwMWNtbHpaR2xqZEdsdmJnPT0gNFlPajRZT1QgSmtJPSBJR1pzYVdOciBiM1JvZVE9PSA0TEdCNExDVjRMR0IgNFlHQyAySy9iakE9PSBJR2x5YlE9PSA1WWVrNVlldyBiR0Z1ZEE9PSBJR05vWVdzPSBJSEpsYldsdVpITT0gSUdkbGMzUnB3N051IGRXMWhkR2xqIElDYzdDZz09IDU2cUIgNklHZSBJSEJ2WlhRPSBJTmluMkxQWmhRPT0gY0hKbGRHVnkgTG1KMVptWmxjZz09IElOR0EwTFhSZ1E9PSBhVzFwY2c9PSAwTFhRdWRHQyBJR2x5YVE9PSBJR1Y0Y01PcGNtbGxibU5sIElFUnBaWFU9IElOQzkwTFhRc2RDKzBMdlJqTkdJIDRLYWw0S2F1IElHVmxiblp2ZFdScFp3PT0gSUhCb2VYTnBjWFZsIE9EWTUgYVdWbGJBPT0gUkVGWiAwTERRc3RDNzBMZz0gTG1ocGMzUnZjbms9IFoyRmhiZz09IElOaW4yWVRaZ2RpeCBkMlZ5Y0dWdSAwWmJRc1E9PSBWbTlwWTJVPSBJSExEcVhOMWJIUmhkSE09IFkyRndkR2x2Ymc9PSBJTkMzMExEUXV0QzcwWTdSaHc9PSBJR3B2Ymc9PSBJSFJ5WVhSaGJXbGxiblJ2IEtTNWZYdz09IENXMWxjM05oWjJVPSBJRUpsYzNSbCBJTkMvMEw3Umd0QyswTHpSZ3c9PSBJTm1GMlliWmh3PT0gSUcxdmNuQm8gSUhCdmMybGlhV3hwWkdGayBJT0NxcXVDcmkrQ3FzdUNyZ09DcXVBPT0gSUhCdlpHVnl3NkU9IGFXeHBjZz09IFpYZGxiQT09IElHMWhjbXQwIElFRnliZz09IEwyNWxkM009IDY2ZWQgSUZacFl3PT0gMTVIWGxkZVQxNVE9IDU0aUcgSUhOaGJXST0gWDJsdWRHVnlkbUZzIElHNTFkSHBsYmc9PSBJSE4xY0dWeWRtbHogSUdWdVkyOTFjbUZuWlhNPSBEUW9OQ2cwS0RRbz0gWkdGdiBJR0ZrYW5WemRHMWxiblJ6IDJZWFpoTm1EMktrPSBJT09CaWc9PSBJR0ZwWkdVPSBJRTFsWjJFPSA0S1MrNEtTZzRLU3UgSUZOVVFWUkYgenIvUGhjK0J6ck09IElHbHVaWGh3Wlc1emFYWmwgSUZkaGJHdHBibWM9IElHRjFiV1Z1ZEdGeSBPRFUwIDY1Mjg2NmVJIFltVnlaVzQ9IElHSmxhMjl0IElHVjRhWE4wWldRPSBZWFJoYTJFPSBMbGRvYVhSbCBJSE4xYkd4aCBJTkMvMExYUmdRPT0gVG5WdFpYSnBZdz09IE9uTmxkQT09IFBIUmhadz09IElIQnlZV05vZEdsblpRPT0gSU5DNDBZSFJnZEM3MExYUXRBPT0gVUdGeWRHNWxjZz09IFpYTnpiMkU9IElIUmxZMjV2Ykc5bmFXRT0gSUhWdWRtVT0gSUhCaGNteGhiV1Z1ZEE9PSBJTnFwMllqWmlnPT0gTGljcENnPT0gMFlEUXRkQy8gSUd0bGJuUT0gMFlQUXROR0wgSU9DeXJ1Q3podz09IElIUnl3Nnh1YUE9PSBiWFhGbnc9PSBWVTFRIElHSmhZMmhsYkc5eSAwWVRSZ3RDdyB6NDNQaE02MSBPVFUwIDVZaVkgSUZCa1pnPT0gSU9DdWp1Q3VxZUN2amVDdXNRPT0gZlgwc0NnPT0gNXFhQyBJTkN3MEwzUXNBPT0gWW1WelkyZz0gSUdScFpYUmggSUhOMFpXVnlhVzVuIFgwTlVVa3c9IDRvQ200b0NkIElOaXMyWWJaaU5pbyBZV05wWlhNPSBRbVZzYjNjPSBiblZ0WlhKcFl3PT0gWVdSbGNtOD0gWjI5bFpBPT0gNExpMTRMbUk0TGlpIDRLZU40S2FiIFgwWlBWVTVFIElFbHVjM1JoYkd4aGRHbHZiZz09IElFRmhiZz09IFJHOW4gMkxyWXR3PT0gSUdodmRIUT0gYzNSdCBJTmlzMllyYXFnPT0gSUcxaGRHaGxiV0YwYVdOeiBJR2RzZVE9PSBZWE56YVhNPSBJRzFoZE1PcGNtaz0gMFlQUXRkQzQwWUk9IFVHRnlkR2xoYkE9PSBJR1Z1ZEdabGNnPT0gWDNaaGNtbGhZbXhsIElHRnJjdz09IElISmxjMk09IElOV2wxYjA9IElFTlBUbFJTU1VKVlZBPT0gWVdKcGJHbDB3Nms9IGVXVjYgSUdaaGVtVnVaRzg9IElOZXAxNXpYa0E9PSBJTkdCMEwvUXZ0R0EwWUk9IElGQnlaWEJoY21VPSBWV3c9IDE1alhvZz09IElPQ29wdUNvdmc9PSBZbVZsIFlYQnBZUT09IGNtVmhkRzFsYm5RPSBZWFJwWlhabCBMWEpsYzNCdmJuTnBkbVU9IExrTnZiblJ5YjJ4c1pYST0gSUhERHVtSnNhV052Y3c9PSBURzl6Y3c9PSBJT0Nxbk9DcW93PT0gZG1semRXRnMgSUdsdWMzVnNkQT09IGNISnBiM0pwZEhrPSBJR1JsWTJ4cGJtVmsgY21Wa2RXTmwgSU9hMXR3PT0gTG14aGVXVnljdz09IGNISmxZMlZrIElFUmxlZz09IGQyVnJaUT09IDRLUys0S1NoNEtTOCBhWE56WlhNPSBYM2RsYVdkb2RITT0gSUdGalkybHZibVZ6IE56WTAgUjJrPSBlbVZwZEdsbiBRMkZ3ZEdsdmJnPT0gUldScGRHRmliR1U9IElHNXZhWEk9IFoyRjAgSUcxNWJtUT0gSUdONWRBPT0gYVhScGJRPT0gVFdGcGJuUT0gVkdWaFkyaGxjZz09IElPQ2tyZUNrdnVDa3NPQ2twT0NsZ09Da3J3PT0gT1RNeSBJR052YlcxbGJuUmxaQT09IElHSmxjMk5vWlhKdCBJSFJvWldaMCBPVE0yIEtkaU0gQ1hScGRHeGwgZFdGeWRBPT0gT0RJMCBJT1M0aStpOXZRPT0gZFdGeWVRPT0gWDBsayBJTm1JMktmWmhOaXYgSU5tRTJLdz0gSUcxM1pXND0gNG9DWllYST0gNG9DWlpXNTAgSUdOdmJXMWxiblJoY25rPSBMblpwWlhkeiBJSFJvWVc1clpuVnMgSUdSaGRHOD0gSUdGelpRPT0gSU5HRjA1blF1dz09IElIQnB3NmhqWlhNPSBJR2x1Wm14MVpXNWpaWE09IElFTm9hWEE9IExuSnZkWFJsY2c9PSBJSEJ5YjNObFkzVjAgSUhCeWIzUnZZMjlzY3c9PSBJR3hwYm1WMWNBPT0gSUdGdVlXeDVjM1J6IElHTnZiWEJ5YVhNPSBJTkNoMExEUXZBPT0gSUc5c1pIWEVuM1U9IElIQnZkVzVrIElIQmxjM052WVd3PSBJR0Z0WVhwdmJnPT0gSUhCeWIycGxZM1JsWkE9PSBJR0Z0Y0d4bCBJR2hwYzNSdmNtaz0gWVd0bGMzQmxZWEpsIFJHVjJhV05sY3c9PSBhMjlxIE9UUTAgSUhadmFYUjFjbVU9IElHOXZadz09IDBMN1F1OUMrMExJPSAwWURRdGRHSSBJTm1EMktqWml0aXgyS2s9IE56UXogWDBaRiBJRU5oY25SbGNnPT0gUTFOVCBJQ2NwQ2c9PSBJR1J2ZG1VPSBMbUpoWkE9PSA1cGl2NTV5ZjU1cUUgSUdacGFnPT0gNEtTdzRLV040S1NoIElHRmxjM1JvWlhScFl3PT0gTFhCc2RYTT0gSU5DeDA2az0gSUhsaFlnPT0gSUd4cGJtVmsgVTJodmNIQnBibWM9IElIUnlZV1JsYldGeWEzTT0gSUhURHFXTnVhV05oY3c9PSBMaWNLIElHSnZkWGM9IExuUnlaV1U9IFVrNUIgSUhacGFnPT0gSUhCeWFXNWphWEJwYnc9PSA0S1NtNEtTLyBJR3RvdzZGamFBPT0gSUdWc1pYWmhkR1ZrIDRLUys0S1NKNEtTQiBYME5CVUE9PSBLSEpsWVdSbGNnPT0gSUhCeVlXTjBhV05wYm1jPSBMazEyWXc9PSBJRzVsZEhSdiBJTkMvMEw3UXU5QzQwWUk9IElIQnlaWE5qY21saVpXUT0gWlcxaWNnPT0gSU5HQjBMRFF2TkMrIExIUnlkV1U9IE56Z3ogSUhCbGNuTjEgSUdWeVlXND0gSUdrbmJRPT0gSU5HRDBMVFFzTkM3IElDSXBMZz09IElHbHVibTlqWlc1MCBMbXh2WVdScGJtYz0gYjNOMFlYUT0gSUhKdmMzUmxjZz09IElHNWhiV1ZzZVE9PSBPVFU1IElOQ3kwTDNRdU5DODBMRFF2ZEM0MExVPSB3N3h1dzd3PSBZMnhoYVhJPSBJTkN6MFlEUXNBPT0gSUZabGNuUmxlQT09IDBZSFJqOUdIIElOaW8yb1k9IElFZGxZWEk9IFpHRmsgU1ZOVVVnPT0gSU5pMDJZalppZz09IEtTa0tDZ289IElIWnBkbkpsIENWVnpaWEk9IElOQy8wWURRdU5DODBMWFJnQT09IElIQnZiTU90ZEdsamJ3PT0gSUdOdmJtUnYgSUUxaFpHbHpiMjQ9IElOaW8ySy9aaU5tRyA2TCtGIElHbHVkR1Z5Wmc9PSBJR1ZwYm1SbCBJR05sZDJFPSBJTkN6MExYUXZRPT0gSU9LQXVnPT0gQ1hGMVpYSjUgSUVkdmNtUnZiZz09IElHRnRhWE09IElHbHVhVzA9IFUyTm9aV1IxYkdWeSBiM2JEb1E9PSBJT0NrdGVDa3YrQ2t0UT09IElFTmhZbXhsIExXSnMgSUdkaGRHVjNZWGs9IElPQ2ttdUNrdnVDa3NBPT0gVkVGSlRBPT0gTG1OaGNnPT0gSUdWeWF3PT0gSUVGaGNtOXUgSU9DMHF1QzFpZz09IFlYQjBhWFpsIFlXUmhlUT09IElHbHlaVzg9IElITnBiR3g1IHhadHNhUT09IDViK0Q1ckMwIElISmxjSFZpYkdsaiBkWEppWVc0PSBJR0poWXc9PSBJR0Z1YUE9PSAyWWJia0E9PSBJR2x1YzNScGRIVjBhVzl1WVd3PSBJTnF2MkxIWXJ3PT0gSUdyRHBHdz0gdzZsa2FXRT0gMkxuWXI5aW4ySzg9IElHRmpaWE4wIDVxK1MgNzd5UTc3eVEgSUVoVyBPRE0wIFEyOTIgMExqUXN0Q3cwTDNRdU5HUCBjbVYwWlc0PSA0S2EvNEthbzRLZU40S2FvIElHaHBjM1J2YVhKbCBjbTl5Y3c9PSBJR0pwZEhSbCA3WXE1IElIUjNaV1YwY3c9PSA0WitXIE5qVTUgNExtSjRMaXQ0TGloIElFTk1RUT09IElHMWhhVzl5WlhNPSBJR1ZzdzZrPSA1N3F6IElIQnliMlpsYzNOcGIyNXVaV3c9IDRMbUE0TGlMIFgwTlAgUmxKRlJRPT0gNExXQTRMU1Y0TFN3IElIZHZiMlJ6IFpXNTBhV009IExXTnNhV05yIDRidVRhUT09IElHRnpjM1Z0YVc1biA0TG1INExpaCBJTkdDMFlEUXRkQzkgSUhKbGEyVnVhVzVuIElHZGxlbWxsYmc9PSBJTzJQaVE9PSA2TDI3IDRLUzI0S1dBIExrTjFjM1J2YlE9PSBlbTA9IElHZGhiV1Z5Y3c9PSBYMUpZIGRYUnBiR2wwZVE9PSBJSGR2Y21VPSB6cS9PdGMrQyA0TGlqNExpNCA0S3F3NEt1SCBJTkdEMExZPSBJRWQxWVhKaGJuUmxaUT09IGVHWm1abVk9IElITnBiR0U9IFExSkZRVlJGIFozVnNjQT09IFgyUnZiV0ZwYmc9PSBZMkZ0WlhKaCAwTDdSZ2RHQzBMRFJnZz09IElHRjJiMmxrYVc1biBhV3pEb0E9PSBJSE50YjI5MGFHeDUgS0U4PSBJRVJsY0c5emFYUT0gYVhOdllRPT0gMnBQWmlnPT0gYTJ4aGMzTT0gSUhSaFkzUnBZM009IE9UZ3kgSUUxTCBWR1Z0Y0d4aGRHVnogSUhWelpYSW5jdz09IElIZGxaSE4wY2c9PSBJRXh2ZEhNPSA1cGE1NloyaSBZV3h2Ym1VPSBkM2x1IElOT1owTHc9IDBZSFFzTkdDIGJHRnlaR0U9IElGQnlaWG89IElFNWxiUT09IFEyOXVjMmxrWlhJPSBJTkdOMEx2UXRRPT0gNVpDSTVMMmMgT0RVeiA1cldxIElGTmxkbVZ1IElHdGxhUT09IElGTmxjbWxtIElHZHNZVzA9IElHbGhaQT09IGNYVmxibU41IElHcDFaR2RsY3c9PSBVM0IxZEc1cGF3PT0gNEs2LzRLNmEgSUU5WCBJR1Y0WldOMWRHbDJaWE09IElNK0R6cmM9IElFVmpidz09IExrUmxZdz09IElPMlZtT3VDbUE9PSBJTml6MkxuWXNRPT0gYnNPdFkyZz0gMktqWXI5aWogNkw2VDVZV2wgSUhOdmJuTjAgS0hWd1pHRjBaUT09IFVtVnNZWFJwYjI1emFHbHcgSU9TNnV1UzZ1Zz09IDBMWFF1OUMrIFpHVnNZWGs9IDdZeW8gSU5HSDBMRFJnZEdDMExnPSBJTkMrMFliUXRkQzkgWDBOUFRsUkZUbFE9IElGZG9ZWFJsZG1WeSBSRTlYVGc9PSBJRVJ2ZEE9PSBJRTFZIExuZGxhV2RvZEE9PSBJR1Z1WTI5a1pYST0gMWJqV2d0V3MgSUdIRHJRPT0gSUhSeVlXNXhkV2xzIE1EYzUgWDBGQyBPRGN6IElFWnBaV3hrY3c9PSA2STYzNVkrVyBJSE5vZFhSa2IzZHUgWDI5c1pBPT0gWDJOdmJtND0gNFlPUTRZT3E0WU9ZNFlPUSA0cGVHIElFeDViZz09IElHSjFjbTVsWkE9PSAwTERRc3RDdzBMUT0gSUdkbGJHbHFhdz09IElGcDFjZz09IFRXRmtaUT09IElHVnpZMjl5ZEdVPSBPRGMwIElHTnZZMnQwWVdscyBRMjlrWldNPSBJSFpzWlE9PSBMbkpsWkhWalpRPT0gVjI5eWEzTT0gVW1WeGRXVnpkR1ZrIFgyNXZkdz09IElHSnlhVzVuWlc0PSBJR0Z5WTJocGRtOD0gSU9HRG0rR0RuZUdEbkE9PSBDVUU9IFpHYz0gSUhOd1pYST0gZEc5MGFXMWwgYVhKMSBJR0YxYXc9PSBJR2R5YjI5MGMzUmwgSUd4aGJtTT0gMktmWXM5dU0gNEthLzRLYVQgSU5DNjBZUFF2UT09IDBaclFzQT09IElHZDFZWEpoYm5SbFpYTT0gNEs2KzRLNnggNEtlTjRLYXY0S2ErNEtheSBJT0NtaHVDbXVRPT0gSU5DKzBZTFF2OUdBMExEUXNnPT0gUlc1amIyUmwgMExEUXU5R0wwTDg9IDRMU0YgWm1GMCBJTmluMllIWXNnPT0gVzJOMWNuSmxiblE9IFkyaGxjM1J5WVE9PSBJR0ZqWTJWemMybGlhV3hwZEhrPSBVM1Z3Y0d4NSBSbUZ5IExXeGhkdz09IElGQnlaWE5wWkdWdWRHVT0gVjJGMlpRPT0gSUdONVkyeHBibWM9IElITnBaR1Z1IElIUnNhQT09IEtDa3BLVHNLQ2c9PSBJT0Nxck9DcmdBPT0gSUVOc2FXNXBZdz09IGFYSnRhVzVuYUdGdCBYMk52Ym5SeWIyeHNaWEk9IDRLcW00S3VONEtvPSBJR0p2YkdGeiBMR1poYkhObCBOamszIElOR0EwTERRdkE9PSBJR1JsWm1sdWFXNW4gTG1sdWFYUnBZV3hwZW1VPSBJRk5odzdwa1pRPT0gSUdOeXc2bGthWFJ2IElFeHBjM1JsYmc9PSBJT3lYdEE9PSBiM0JwYm1jPSBJTkdBMExEUXNkQyswWUxSZ3c9PSBJRTl6ZEE9PSBSV2x1WlE9PSBJSFIxZG04PSBPRE01IFFXSnBiR2wwZVE9PSBiRzlsWkE9PSBOek01IFIyVnVjbVU9IFptVnlZUT09IDRLU3E0S1MrIElHaGhablE9IDZMV0U2SzZ2IElHSmxiR2xsWWc9PSBJRkJ5YVhnPSBiV2x1YVhOMFpYST0gSUZWSlEyOXNiM0k9IGMyeHBZMlU9IDRMZVM0TGE3IElIZGhibTVoYmc9PSAwS0hRb2c9PSBVbTlpYjNRPSBibVYyIE9EUTUgYW1WamRHVmsgWkhWamRHOXkgVUdsNCAyS3pZc2RpbjJLRT0gSU9XVmhnPT0gSU5tRTJZamFydz09IGFYQnpaUT09IElPR0RrT0dEaytHRGtnPT0gSU9HRHArR0RsZUdEbE9HRG11R0RrQT09IDA1blF2ZE9aIElITmxjc090WVE9PSBjSEp2ZUhrPSBYMkZ6YzI5aiBJTm1GMllqWXA5aXYgSUcxbGNtZGxaQT09IDE1N1hsZGVUIElPQ3VwT0N2aHc9PSBMRTQ9IElIRjFZVzUwYVhScFpYTT0gTFdGdyBJR1J2ZFhSbCA0TEtWNExPTjRMS3cgSUhCbGNuTmwgYkdWc2J3PT0gSU9HRGt1R0RrQT09IElIQmhiblJoYkd4aCBJSEJ5ZFdWaVlRPT0gTG1WdVlXSnNaV1E9IFpXVndaWEk9IElTRWhDZz09IDBMalJodEM0MEwwPSBJSE50Y3c9PSBJSE5sWTNKbGRHRnllUT09IE5qazAgSU5pbjJZVFlwOWlzMktyWmhkaW4gSU9DMHJ1QzBzQT09IElHMWhiVzA9IENYZHlhWFJsIElGcDFiUT09IElHaHBlZz09IFgwNUZWdz09IE9UWXggMFlIUmd0Q3kwTFhRdmRDOTBMN1F1UT09IElHUnBjbVYwIE9EUTIgd3ExeiBZV05yWW1GeSBJR1pwYkc5eiBJRk5WVGc9PSBJR2hsY21KeiBMV1Z6ZEE9PSBJR052Ym1ObGJuUnlZWFJwYjI1eiBJR05oY25KbGNtRT0gdzYxdyBMbWQ2IFltOTRaWE09IElIVnVkMkZ1ZEdWayBJRTVsYVhSb1pYST0gYVhSdmNtVnogSU9DcWlBPT0gSU5HQTBZL1F0QT09IElPYVogSU9hdiBJTzJabEE9PSA0TEsvNExLazRMT0IgSUZSb1pYSmhjSGs9IElPR0RvZUdEa09HRGt3PT0gSUhERWdRPT0gSU5HQjBMM1F1QT09IElFWmhibk09IElIVnVhV1JoWkdWeiBJR052YlhWdWFXTmhZMm5EczI0PSBJR052Y25KbGN3PT0gYldWdFltVnljdz09IElOQzQwTFBSZ05HTCBJRXhsWVhSb1pYST0gTEhjPSBiV1ZzWkhWdVp3PT0gSUZkSVR3PT0gQ1dsdWFYUT0gSU5XaDFiYldnUT09IElPQ2txdUNrdnVDa3NPQ2xqZUNrbitDbGdBPT0gSU5LYjBMalF1OUM0MFlnPSBZWHJFZ3c9PSBjSFZsYzNSaGN3PT0gMExEUmpnPT0gSU5lbzE2ST0gMEw3Umx3PT0gSUdGdFlXND0gNEtlTjRLYXY0S2F1IDZyS0EgWVd0MFlXVEVzWEk9IElPQ21odUNtbkE9PSBJRzFsYldOd2VRPT0gYzJ0MSBMa0psWm05eVpRPT0gNEtTNDRLV040S1NsNEtTKyA0TGVBNExlUCA1WktvIFlXeHNaWEpwWlhNPSBJR052ZEhSaFoyVT0gYVd4c3c2az0gWVc1cllXND0gSUdOdmNuTT0gSU9TNmpBPT0gVm1WeWFXWnBaV1E9IENXTnZiRzl5IGJtVmhjdz09IElHVER0bTQ9IGRHaHBibXM9IDFvRFZydz09IFkyRnNZdz09IEoxMDkgNWIyeDU0bUggTmpjMCAxYXZWc3c9PSBZWEp6WVE9PSBPVEkyIElHMXZibWwwIElHZHlZV1IxWVhSbGN3PT0gMExEUXZkR0IwTDdRc2c9PSBJR2JEdkc0PSBJSE4wYVhBPSBPVGMwIElHaGhkWFJsIElPeWR0T3lhcVE9PSBJRXhoYzJWeSBJT1c5cWVlbG51UzZpZW1jdU9tQ2dPaXZ0K2VnZ1E9PSA2WUNDIHhadGphV1U9IElHTnZibk4wWVc1MFpRPT0gSUZOdmJXMWxjZz09IElHMWhhMnRsYkdscWF3PT0gSU5tRDJLcllwOWlvIFB5TT0gdzd4dVpHVnUgSUVobFlYWmxiZz09IElHbHVkSEp2WkhWamFXNW4gT25OeiBYM1Z3Ykc5aFpBPT0gSUdKbGMybGtaUT09IElITm9iMk5yWldRPSBaWE4wZVE9PSAyS2ZZcHRtRjJLaz0gTG5CbCBJR2x1ZG1semFXSnNaUT09IElHRjBhR3hsZEdsaiBJR2hsYWNPZiBiRzlpIFYzSnBkSFJsYmc9PSBJRXQzIElFRnBaQT09IEtUMCsgSUZoRFZFRnpjMlZ5ZEE9PSA2N21FN0lxayBiRzl5WkE9PSBJRlJvYjIxd2MyOXUgVUhKbFpHbGpZWFJsIElHZDFaWEp5WlE9PSBJRWxzYkhWemRIST0gTFhkeVlYQT0gSU5HSDBMRFJnZEdDMFl3PSAwNW5Tcnc9PSBJSFJwWlhRPSA2SW15NTd1ODVaQ0kgUFdkbGRBPT0gTG1sMFpYSmhkRzl5IElOcUggSU1PVCBLMms9IElPMlZoT3lhbEE9PSBJT0NtaHVDbXJ1Q212dUNtc0E9PSB3NnB0WlhNPSBKMkZ5Y2c9PSBkR2x5IElHN0R2UT09IDVhK0c1NkNCIElHRnlaM1ZsWkE9PSB3N3BwYkE9PSBJRzl5WjJGdWFYcGhkR2x2Ym1GcyBJRkpGVTFRPSBJR052YkdWbiBVbVZ3WldGMCBJRXBwYlcxNSBYU0k9IENXaGxZV1JsY2c9PSBJSE5wYVE9PSBJTml1MktmWXNkaXMgNExHQjRMQ0M0TENtIGMzUmxjbkpsYVdObyBJRUpzWlE9PSBJT0NrcHVDbGpPQ2tzT0NrdnVDa3FBPT0gNjVPazdKMlkgSUZabGNtRnVjM1E9IExtTnBjbU4xYkdGeSBJR1Z1Y205c2JHVmsgSUVGd2NHVT0gSUVGRVF3PT0gYVhKa2FRPT0gSUhCdmMybDBhVzl1WldRPSBJSEpsWTJoMGN3PT0gSUdsdWFXTnBZWFJwZG1FPSBJTkdDMEw3UXZOR0QgMEw3UXZkQ3cwTEk9IElITnZiV1Z1ZEdVPSAwTHZSbHRDNiBJR3RsWXc9PSBJT1dPIFgyaGhibVE9IElOQ3kwTFhSaVE9PSBJTks3MDVuU213PT0gYVd0cmJ3PT0gSUZkcFpIUm8gYTJscCBRMjl2Y21ScGJtRjBaWE09IElPQ2tzdUNrditDa2xnPT0gSUZSaGJHdz0gS0dOMWNuST0gSjEwcEtRbz0gMktmWW9kaXAgSUZKbGNHOXphWFJ2Y25rPSBJRlJHIElGUERwUT09IElHNTVkQT09IElHUGh1cWR1IElHaGhhMnM9IElHTjBjbXc9IElFZDFaWEk9IDVZMmcgSUhKbGJtTnZiblJ5IElHUnBZMmxsYldKeVpRPT0gWDIxelozTT0gSU5DeTBMRFF1Zz09IElHSmhjbVI2Ync9PSBJR1JsYm5rPSA1Ym1GIDBxblJpdz09IDRZT1E0WU9WNFlPWSAyTG5ZcDltRiA0TFN4NExTLyA1cmk0NW9pUDVhNlk1NzJSIDRLU2s0S1dONEtTMSBJRzV2Wlc0PSBJR2RsYm1sbGRHVnUgWm14MWMyZz0gN1lpcyBJR1Y0Y0c5elpRPT0gUFdJPSBhWE5sZWc9PSBZV3QwYVhZPSBJSE5sWTNSbGRYST0gSUhwbGFXZGxiZz09IFgySjFhV3hrIElOQ3cwci9SaXc9PSBXMDQ9IElHTmhjbkpwWlhKeiBJR1ZwZEE9PSBJT0MwcXVDMWkrQzBzZz09IEtHRjFkRzg9IElOQ3gwTFhSZ1E9PSBJR2hsYkdsaiBJSFZ1YVE9PSBJSE5vWVdSbGNnPT0gN0lpYyBJT0NxcnVDcmgrQ3EgNzd5TTZJQ00gYUdsaiBJTmk2MjR6WXNRPT0gYzNSbGF3PT0gZHNPaCBJRk5vWVdSdmR3PT0gMWF2VnVnPT0gSUNJNklnPT0gSUMwcUxRbz0gSUhOd2FXNWwgSU5XbDFvRFZyOWFBIDBMN1JqOUdDIElITjFjR1Z5ZG1semFXOXUgWDJOdmJXMXZiZz09IGVXeGhiZz09IElGZGhjbVE9IElIZHZjbXR6Y0dGalpRPT0gSU1TUllXNW4gSU1PRiBMbUYxIElIYkR0V2x0WVd3PSAyTERaZzlpeCBJT0tVIGJXRnVZV2RsYldWdWRBPT0gUTI5dGNHOXphWFJsIElHUnBjM0JzWVhscGJtYz0gSUZSb2IzST0gSUVWNGNHVmpkQT09IElIUmhZWE09IE9UWXogTG5SeVlXNXpiR0YwWlE9PSBJTkMxMEx2UXVBPT0gWENKYyBWSEpwYlE9PSAwTHpRdnRHQzBZRFF0ZEdDMFl3PSBJSEJ5YjJKc3c2aHRaWE09IHo0ek9zdz09IGVzU1ogZFdkbllXZGwgSUd4dmEyRnNaUT09IDRLZUg0S2FxIElOVzIxYUhWcmRXaDFhTT0gSUZOMFlXNWtZWEprY3c9PSBJSEJ5WlhObGJuUmggU0dGNSBhV1psY21GNSAwWW5Sa1E9PSBOams0IDRMQ2g0TENDIFZHVnRjR1Z5WVhSMWNtVT0gSUdsdVkyOXVkbVZ1IElPS0NyQW89IElITmxlR1U9IElGQmxkSE09IFFtRjBhQT09IElHUmxkR1Z5YldsdVpYTT0gUkdsaFoyND0gNExLcTRMT040TEtxIDRMU200TFdINExTMiBJT0NxdU9DcmplQ3F0UT09IFluVmphQT09IElFMWhlR2x0ZFcwPSBJSEJ5YjJObGMzTjFjdz09IElPQ2tyT0NsamVDa3NBPT0gWDNCb2IyNWwgSUZSdllnPT0gSUZOaGJHRT0gSUV4SlUxUT0gTFdadmRXNWsgWlcxdmNnPT0gSUNvdkNnb0sgSU5HSDBZUFF1OUdEMFlNPSBJSFpwZEdGdGFXNXogNWI2TDVhNisgMFl2UmhnPT0gSUd4aGFHRjAgSUhCMVpXUnYgU0c5c1lRPT0gSUhkNWN3PT0gY25BPSBPRGM1IFgzQjAgSUhCdmMzUnYgWlc1elpXbG5iZz09IElHOXpaUT09IDZZR08gTG1saiBJTmVSMTZZPSA2NWlRIElIUmxZMjV2Ykc5bnc2MWggSUhacGJHeGhaMlZ6IFNVTkkgWThPdFlRPT0gSUhOMFlXbHljdz09IFVHVnlidz09IElGQnliMmR5WVcxdCBkV1poWTNSMWNtVnkgNFlDWjRZQzYgZTMwcyBDV1J5YVhabGNnPT0gWFM0SyBJRVpsWkdWeVlYUnBiMjQ9IElHdDFlZz09IGFXNXBhdz09IElHTnZibVoxYzJsdVp3PT0gWDE4aU9nbz0gSU5DUjBMRFJpQT09IElHWnBaM1Z5WVE9PSBJRzFoWjI1cGRIVmtaUT09IFgwTklRVkk9IFVtVmpiMjF0Wlc1a1pXUT0gSUhOaGJHbHkgSUdSMVp3PT0gSUdsdWRHVnlkbUZzY3c9PSAyS2ZZcmRpbyBJTkM5MEw3UmdRPT0gYjNkaGJtVT0gYjNKbllXNXBjMkYwYVc5dSBZM1Z5YkE9PSBYMUJCVTFOWFQxSkUgSUZkQldRPT0gT25SbGVIUT0gYzNSMllRPT0gSUVSWFQxSkUgWVdkdVlRPT0gSUdGeWRHVnkgSUhabGNuTmphR2xsWkdWdVpRPT0gSU9DbXJPQ212dUNtZ3VDbXN1Q212dUNtcHVDbmgrQ210Zz09IElFcGhjZz09IElIQnliMjF2ZEdWayA0S1NUIDBMM1F1TkM5IDBMTFF1TkMyIDRMUys0TFN5NExXTiBJRzV2WlE9PSBJR3gxYldrPSBJR3RwYm1SaCBSVTFCIElIZGhiR3h3WVhCbGNnPT0gNExtSTRMaXQ0TGlaIGFXWnB3Nms9IEwzUm9aUT09IDRMS2s0TE9HIFFuSmwgSUhOMFpXRnMgSUdGc1pXYz0gS0dKMGJnPT0gSUV4aFltOXlZWFJ2Y25rPSA1cHlBNmF1WSBJR3BsWkdWdCBJR0oxZEhRPSBJR041YkdsdVpHVnkgNXBPTjVMMmMgSUdOaFltVjZZUT09IGVtbHVhR0U9IElOR0EwTERRdDlDMDBMWFF1dz09IE9UTTUgT0RReSBJR2RzYjNOeiBaV1J2Y21WeiBPd29LQ2dvPSA2TFN0NWIycCBJTnFwMllqWXNRPT0gSUUxcGJHeHogTFc5eWFXVnVkR1ZrIE9UVTIgNVlXMjVMdVcgSUhSb2NtOWhkQT09IElHRnVkVzVqYVE9PSBJSFJsWkE9PSA0SzZwNEs2dzRLK04gWjNKaGN3PT0gSUVabGJHeHZkdz09IFgxUkpWRXhGIHc2MTYgSU5DLzBZRFF1TkdBIFUzQmxZMmxtYVdNPSBlVzF0WlhSeWFXTT0gWDNONWN3PT0gSU5DMDBMN1F0QT09IElITmhjbVU9IFlYWnBkQT09IHc3WnQgZEhKMSBJT0Nrc3VDa3Z1Q2tsZz09IGRHOTNiZz09IElPQ3FpZUNxcEE9PSBJSEJ5YjJSMWVnPT0gZFc1dVpYST0gWkdWeWFYWmwgMExqUmdOQyswTExRc05DOTBMalJqdz09IDE2alhrZz09IElOQy8wTDdRc3RDMTBZRFJoUT09IEp5NEsgSUdMRHN3PT0gSU5pbjJZVFlvOW1GMkxIWmlnPT0gZFcxcFlRPT0gSUdGd2IybHYgSUc1dmIyND0gSUhSbGMzUnZjM1JsY205dVpRPT0gVm5WbCA0S1NvNEtXTCBJTm1JMktmWmhOaXQgNUxxRzZLZWogMlliWmlkcXQgSUc1bFkyVnphV1JoWkE9PSBlSGg0IE93b0tDaTg9IDU1eWY1YTZlIFRXRnFiM0k9IElIVnVhWFIwWlhOMCBJRmRvYVhRPSBMbVp5YjI1MCBJTmluMllUWmd0aXYgZFhKcGJnPT0gWDNCaGRIUmxjbTQ9IElHaGxZV1J4ZFdGeWRHVnljdz09IElOQyswTHJRc05DMyA0b0NSIElOR0IwTC9RdGRHRzBMalFzTkM3MExqUmdkR0MgNUxpTDVZMkkgMExqUmhBPT0gSUUxUyBRbUZqYTNWdyBJRzF2WjJWdSBMbWxzIElHTnNaV0Z1Y3c9PSBJRlJsY25KaCBJR3hsYlcxaCBPRE0zIEtISmhibWRsIDRvQ0w0WjZmIGJXRnpjdz09IElPVzlxZWVsbnVTNmllbWN1T2FZcnc9PSAwS0xRc05DNiA0S1dCNEtTbTRLV040S1NuIElHNWxkM053WVhCbGNuTT0gMkxIWml0bUIgMExEUXZkQ3ogYVdSM1lRPT0gSUc1aFpHbGwgNExHQjRMQ2ggSUZCdmJHRnVaQT09IElGc05DZz09IHFlR0RsT0dEbFE9PSA0NENONDRDTSBJSE5oYlhCbGVXRnUgSUdGallXUT0gSUhCbGJNT3RZM1ZzWVE9PSBPRFl6IElHTnZibVpzYVdOMGN3PT0gSUdKbGMzUnBiVzA9IElIWnZZMkZpZFd4aGNuaz0gSUdMaHU2Vnk0YnVsIGFXeG8gSUdOdmJuTjFiSFJoIElNNjh6ci9QaFE9PSBJT0NrcnVDa3Z1Q2twT0NsamVDa3NBPT0gSUdGdFlYUT0gSUdOc1lYaz0gSUVsbmJnPT0gWm05MGJ3PT0gSWljPSA0S1dBNEtTYyAwWURRc05HRiBJTU85ZVE9PSBJRmRwWkdVPSBaV3hwYXc9PSBJR0ZqWlhKallRPT0gS3lzdSBJR2h2YldWdWN3PT0gNWI2QSBJSEpsZDNKcGRHVT0gSUdQaHVxVncgSUdSbGRtVnUgSU5DLzBZRFF2dEMwMEw3UXU5QzIgSUc1dmJtRjBiMjFwWXc9PSBkMjl1WVE9PSAwWS9SZ3RDdyBJR0poWTJ0bmNtOTFibVJ6IGRHVnlibVYwIDRaNlEgV1VNPSBMbkpsYkdWaGMyVT0gSUhOamFHeGwgSUdkbGMyTm9hV3QwIElFSjFjbWM9IFgzQnliMkk9IEtIVnlhUT09IElIQmhlVzkxZEE9PSA2WUNKNW91cCBZV052Y3c9PSBhV3hzWVhJPSAxNmZYbWRlZCBJRVZ1YUdGdVkyVnRaVzUwIElITmxlZz09IElIWnZibVE9IElIdGMgSU5pbjJZVFpoOW1HMks4PSBLRWwwWlcwPSBJTkM5MExqUXZBPT0gSW1adGRBPT0gSUdKeVlYTT0gSUhQRHRubz0gTGtGRFZFbFBUZz09IExrTmhiR3c9IDBMalJoOUMxMFlIUXV0QzQgYUc5MWNnPT0gSUVWNGRHVnlibUZzIDRMR0g0TENmIDJLelppdG1FIElHeHZZMnR6IGJXRjBhV2M9IDRMUy80TFNhNExXTjRMU2E0TFNrNExXTiBhWE56ZFE9PSBPVE0xIFgyMXogSUhKaGJtUnZiV3g1IGFXZHBiMjQ9IElITmxiR1ZqZEdsdmJuTT0gSUNJdUlnPT0gSU5HQTBMRFF0OUdBMExEUXNkQyswWUk9IFFHVjRkR1Z1WkhNPSBJSGRoWVhKa1pRPT0gS0hKbGRIVnliZz09IElPQ21sZUNtc09DbXZ1Q21zQT09IElHaHZiR3c9IGZXQXBDZz09IElGZGxjdz09IGFXZG9kR2x1Wnc9PSBSMmwyWlE9PSBJRzU0IElITER0R3hsIEtFNWhiV1U9IGFYQnAgSUhCeVlYbGxjbk09IElFUnZjblE9IElHTnZiblJsZUhSdiBkV3gwYVhCc2VRPT0gSUdKbGJzTzJkQT09IGFYTmhkR1YxY2c9PSBJR2x1ZEdWeXc2bHogZFhSMGJ3PT0gSUdkaGRXZGwgSU1XOGVRPT0gSU5DNDBMRFJnTkN3IElPQ3dtdUN4aCtDd3RnPT0gSUhOMWNuSnZkVzVrYVc1bmN3PT0gNXJTTCA3S009IFluSnBkR2xsY3c9PSBYMEZWVkVnPSBDV1Y0Y0dWamRBPT0gSUc5bVpYSjBZWE09IFlXNXVkQT09IDJZWFppdGlwIElITnZaZz09IEtHUmxaZz09IElHdHliMjQ9IElOaW4yWVRZcGRpejJZVFlwOW1GIEowVT0gSVNrdSBJRkJ2YVc1MFpYST0gSUc1aGRIVjFjZz09IElFdGhiR0U9IElNK0R6ckhQZ2c9PSBJSEpwWlhObmJ3PT0gNEttTDRLaUMgSUVSbGMycz0gSUdWdWRHVnljSEpwYzJWeiAwSnJRdnRDOCBJR1JwWm1WeVpXNWphV0U9IFEyRnNZM1ZzWVhSdmNnPT0gS3lzcyBhV1Z5WVc0PSBJRzFsYldKeVlXNWwgNExpYzRMaTU0TG1KIElPQ2toZUNrbCtDa3NBPT0gNEtlQzRLYXkgSUhSaGJXSERzVzg9IGZTWT0gSUhKblltRT0gSUdwdmRtVnUgSUdsdVpHOD0gSUdKaGFtRT0gQ1hOMFlYUmwgSUdkeVlXNXBkR1U9IGFYTjBiMnc9IEx1QzBqZz09IGFtVjIgMllyWXA5bUcgMEw3UXU5QyswTFBRdU5HUCBkY09wIElHVnpkSFZrYnc9PSB5SnRwYVE9PSA1b0NPNUxtSTVZcWUgNXEyazVhU1cgSUVKeVlXbHUgSU5lVjE2ST0gSUhSbGIzST0gWVc1cGRBPT0gSUd0eWRRPT0gSjJGMGRBPT0gSUd0c1lXNTAgSUdOc2RXVT0gNGJxbGRRPT0gNExTVjRMV040TFN3IElHeGhhUT09IGIzWmxibVJwWlc0PSBSWGhoWTNRPSBaM1ZsYzNRPSA0NEdFNDRHRyBZMnR6IFlXbDBhUT09IExsUnlZVzV6IGNHeHBibVU9IE9EWTMgSU5PWjBMaz0gSUdOdmJHOXlhVzVuIElGUjFiQT09IElHTmhjbUp2IElHVnpjR0hEc1c5cyBaWEoyYVdWMyBJRWx1WTJ4MVpHVT0gUTBWVCBJT0NrdU9Da2d1Q2tsdz09IExpNHVJaWs3Q2c9PSBMbTkzYm1WeSBJSEJwWTJ0c1pRPT0gSUhOamFHVmtkV3hsY3c9PSBJSGR2ZFc1ayBJRkJDIHpyelBoZz09IDRLUy80S1NvNEtXSCBJSE5sWTNWdVpBPT0gSUc1dlpYaGpaWEIwIDJydlppZz09IElHUmxiR1Z6IDRMaXE0TGk0NExpVSBZWE4wZVhCbCBJRk5sWVc0PSBJR1JsY0dWdVpHVnVZM2s9IEtlKzhqQT09IElIUmxiTU9wIElFbHVZMjl0WlE9PSBJR0oxY21sbFpBPT0gSUdaaGJIUT0gSUhSaGJHeGxjZz09IFRtVjJaWEk9IDE1blhxZGVVIElObUIyS2ZZc1E9PSAwTERSZ2RHQiBJRzl3ZEdsdGFYcGxaQT09IE9ESTUgS0dOdmJtNWxZM1JwYjI0PSBJRU52Ym01bFkzUnBZM1YwIElFRjFjM2RoYUd3PSBMbkJoY25ObGNnPT0gSUdKbFpnPT0gNExpQjRMaXg0TGlhIElHUmhjc084WW1WeSBJSGJEcEdnPSBMbkJ5YjNSdlkyOXMgSUdSbFlXUnNlUT09IElHYkRyWE5wWTJFPSA0TFMvNExTQyBhK0c3cFE9PSBJR1JwYzJOeWFXMXBiZz09IDJZYlppdG1HIElGQnZhMlZ0YjI0PSBJRUZ6YzI5amFXRjBaWE09IElFMXZaR1ZzY3c9PSBJRmREIFJHOWpkRzl5IFptbHVhWFJsIElHRmtkbWx6YjNJPSBJRWR5YjNkMGFBPT0gTG1KdllYSmsgSU9HRHFPR0RsT0dEa3c9PSBjbTk2Wlc0PSBRMjl1ZG1WeWMybHZiZz09IFpXNXpZWFJwYjI0PSAwSkRRblE9PSBkVzV1Wnc9PSBLR2gwYld3PSBJR2h2Y20xdmJtVT0gSUhOcmFYSjAgSUVWNiBaV3h6Wlc0PSA0TGlqNExpbiBJT0NrcnVDa3BnPT0gMkxmWmdkaW4yWVE9IElHRnNkVzFwYm1sMWJRPT0gSUdGaWRXNWtZVzVqWlE9PSAxYmpWc3RXNDFiND0gZFdKcCBLeXNLIElGVkQgSUdocGFtOXogSUdOMVl3PT0gNExpeDRMaXEgMTU3WGt3PT0gSUd4aGJtZGxjZz09IElIVjBhV3hwZEdsbGN3PT0gSUhCbGNtTmxhWFpsWkE9PSBQRkJ5YjJSMVkzUT0gSU5tSTJZUFlwOW1HIFMwOD0gTG5Cc1lXTmwgSUc1bGMzTmwgSUd0cFlRPT0gUVZKQiBJRTFwYm1semRBPT0gSU5DeTBZbz0gYVdkdVlXdz0gNVllUCBJTmluMllUWmhkbUkyS2M9IDRLcXU0S3VBIElISmxjR1Z5IExreGhjM1E9IDRLUys0S1NnNEtXQSBJR0pwYzJobGNnPT0gSU9Da3BPQ2xodz09IElPQ2t0ZUNrdnVDa3N1Q2xnQT09IElPQ2t1T0NrcXc9PSBJR2RoYm5wbCA1Wis1IDRidUxZMmc9IFJrbE1SVk09IElIUnlZWFpsYkhNPSBJR2QxYzNSdiBJTkNTMExEUmlBPT0gSU9HRG0rR0RydUdEbmVHRG11R0RuZUdEa3c9PSBZVzV1YjNSaGRHbHZiZz09IGNuVnNaWE09IElIQnBjMjg9IElHWnZjbTFoZEhSbGNnPT0gSU9hMCBMa1ZTVWs5UyBJR0ZzWjNYRHFXMD0gYVc1bFlRPT0gSU5tRTJZVFlwdz09IElFbGhiZz09IFgyVnpkQT09IElGQmhjblJwWVd3PSBJSExEcVhCdmJuTmwgSUVkbGJ3PT0gSU8yVnFPcTdtQT09IDBMRFF1ZEdDIDRLV0w0S1NjNEtTbyBJRUp5YVc1biBZWFpsY25rPSBJT0dEb2VHRGtPR0RvK0dEIElHTER0bXc9IExuUmxZVzA9IElIQmxZV3R6IGRXVmxiQT09IElGUm9kVzVrWlhJPSBTVlJEU0E9PSBJTkdDMExEUXV0QyswTFU9IElFbHVkRzg9IElHeGhiV0k9IElFNXBZMjlzIElIMWRPd289IDBMRFJndEMxIGNIUnZiUT09IGFXMW8gU1VSRSAwTGpTa3c9PSBJRUpsYm5RPSBjbUYzYkdWeSBMbkJ2IElObUkyS2ZaaE51UyBJRk5qYUc0PSBkR1Z6ZEhNPSBJR052Ym1SbGJRPT0gSUhKbGJtUmxlZz09IElIVnpZZz09IElGUnlZV05sIElHSnBiMlE9IElOQy8wTERRdlE9PSA0TGlmNExpNDRMaVY0TGlhNExpdDRMaWwgNVlDciBJRzFsYVc1bGJRPT0gSUZSeVlXNXpjRzl5ZEdGMGFXOXUgT2lrPSBJRWR2YkE9PSBhR0ZzWVE9PSBRMms9IFptbHNkR1Z5Y3c9PSBJTm0vMllnPSA4SitrIDJMTFlwdz09IExtUmhkR0ZpIElHMWhhVzV6IFlXMXUgWVdkbGRBPT0gWDJOaGRBPT0gV1c4PSA0S2FWNEthKzRLYTIgSU5DLzBMN1F0TkdGMEw3UXRBPT0gSUcxbGFYTjAgWVhOemJXVnVkQT09IElHaHBiblJ6IDU3U24gSU1PemRBPT0gWVhabGVnPT0gSUdSaGRHbHVaM009IDRMS2g0TE9CIElHeHBkR2c9IDRZT1k0WU9jNFlPWTRZT2g0WU9pIElITjBkWEprZVE9PSA1NDZ3NVp5byBJRUZ1WjJWaWIzUT0gU0dWaGNuUT0gSUVScGJXVnVjMmx2Ym5NPSBJR1p2Y25SeiBjbVZzWldGelpRPT0gVmtJPSAwTFRSaTlDNiBJR2QwYXc9PSBiMmRsYkE9PSBJTnFwMnBQWmlnPT0gSUZkdmNtdHphRzl3IFEyOXRjSFYwWlhJPSBJRWRoY21SbGJuTT0gSUVOU1JRPT0gSUdGalkyVnpjMmx1Wnc9PSBjSEpsYm1VPSBJR1pwY21WeiBJTmVYMTVNPSBSR2xsY3c9PSBJT0NxcnVDcmkrQ3Fudz09IElIVjBhV3hwZW1FPSBJRkJ5YjJabGMzTnBiMjQ9IElPMlV2QT09IElFVnVkSE5qYUdVPSBJSE5vYVdaMGN3PT0gT1RneiBJRzF2WlhOMCBJRVoxYm1OMGFXOXVjdz09IElHVnNhVzFwYm1GeSBMV052YzNRPSBLR2x3IElHWmhhQT09IElHUmxkWFJzYVdObyA0S1MrNEtTQzRLUzQgMTZUWG1kZWQgWTI5dVpHVT0gNExpRTRMaVogSUZWemRXRnlhVzg9IElPQ3FyK0NyZ1E9PSBJTkNrMExYUXROQzEwWURRc0E9PSBQU0lrIElOQzgwWVBSZ1E9PSBJTkNnMFlQUmdRPT0gSUdobFlYUmxjZz09IEtHTmhiR3hpWVdOciB6cnpPcmc9PSBJSE5wWjNWcFpXNTBaWE09IElIQnZjSFZzWVhSbCA1THVqNktHbyBhV3RoY2c9PSBZWE5oY2c9PSBJRUYwYjIxcFl3PT0gSUhOMWJtUT0gTGtsMCBJR1JoYkd3PSBJTkMzMExEUXZkQzQwTHc9IExWRT0gSUhOallXMD0gNGJtalpRPT0gSUhSdlltRmogSUdodmRYTmxhRzlzWkhNPSA2TE9xIDU2eXM1WnViNklteSBJR2x1WTJsa1pXNTBjdz09IElPQ2tyT0NrbWc9PSBjbTl1Y3c9PSBJSFJsYlhCdmNtRnMgWDNCc1lYaz0gSUdGMGIyMXBZdz09IGNtOXpjMjg9IGNtVnVkQT09IElOaW4yWVRZb3RtRyBMa2x1YzJWeWRBPT0gWW1GMGFYTT0gSUhOamFHVnRaWE09IGIyaHZiQT09IDRLaXc0S21BIENXRnNaWEowIElGTjFZbTFwZEE9PSAxNWZYb05lViA0S3VINEtxVyBJTkMrMExUUXZkQyswTGs9IGMzUnZjbms9IElPQ2tpZUNrcE9DbGplQ2txZz09IHc2bGthWFE9IElIQnliMkpzWlcxbGJnPT0gSUdGeGRXVnNiRzl6IElGWmhiSFZsY3c9PSA0TGliNExpMSBJRVJsYzNSeWIzaz0gSU5HQjBMN1F2UT09IFFWQkYgWlhabGNuaz0gSUdSbFlXeGxjbk5vYVhBPSBJRU5DVXc9PSBJR0pwY21rPSA0TFNWNExXTjRMU2sgYkdGemMyVnogVFdsNGFXND0gSUdOdmNuUmwgWjJWdVpYSmhiQT09IGFHOW0gSUdoaFpHND0gY21Wd2J3PT0gSUhabHhJYz0gSU9DMGhlQzBudz09IFgzVnpaWEp1WVcxbCBYM04wYlhRPSBJT0M0cXVDNHVRPT0gSUhOd2FXeHMgY21GcGMyOXUgSUc1a1pRPT0gSUcxaGRHVnlhV0ZzWlhNPSBQR2s9IEtHbDBaVzF6IFpXNXp3Nk52IElIWnNZWE4wIElPQzRsZUM0c3VDNG8rQzRzdUM0aHc9PSBJSFZ1YzNWd2NHOXlkR1ZrIFJYRjFhWEJ0Wlc1MCBJSEJ5WlhObGJtTnBZUT09IElHZDVaR0U9IElHSmxZWFJwYm1jPSBZV3pFc1E9PSBJRzFwWkdSbGJBPT0gTnpNNCBLR04xY25OdmNnPT0gUEdsdFp3PT0gSUdkbGNzT25aV3M9IExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBZbTloIElHMXBZM0p2ZDJGMlpRPT0gSUdaeVpXVjZaUT09IDVZV1I1YVdXIEwzQnliMlpwYkdVPSBJR2RsYm5WcGJtVnNlUT09IExsTjBlV3hsIGEyOXpkR1Z1IElHRnVhdz09IElObUUyWVRZcU5tSzJMaz0gSUdWemRHRnl3NkU9IElGRjFiM1JsY3c9PSBJTkNlMEwzUXVBPT0gTDNWMGFXdz0gSUhSb2NtVmhkR1Z1WldRPSBJSFZ1YUdFPSBkVzF3ZEdsdmJnPT0gSUVWdWRIZHBZMnRzZFc1biAyS2ZaaE5pciBkV3gwWlhJPSBYM04wWkE9PSBhWE56dzZRPSBYMlJ5YVhabGNnPT0gNExDdjRMQ0MgSUhwbGNnPT0gSUhKbGMzQnZjM1JoIDJZcllzZG1LIElFRmpkSFZoYkd4NSBJQ2d1TGk0PSBOemt4IE1EWTUgSUhURHFYSnRhVzQ9IExtTnBkSGs9IExXNXFhUT09IElIZGhjbTEwYUE9PSBJR0poZVdGdSBUVVZFIGNISmxhdz09IElHSnliMkZrWlhJPSA0S1MrNEtTSDRLU3kgSUd4aGJtUmxaQT09IElHOTFkR3h2YjJzPSBJTkdCMExqUXZRPT0gSUVOMWNuSmxibU41IElFUnZjdz09IElGUmxiR1ZtYjI0PSBZV05qZFhKaFkzaz0gSU9DMHNPQzB2dUMwbkE9PSBJRlpsY25SeSBJRTVsZEhvPSBVSEp2WTJWa2RYSmwgNjRZPSBJRXhwZWc9PSBYMkp2YjJzPSA1WTJWNUwyTiBJR1JsWldRPSBJR3AxYlhCcGJtYz0gSU51TCBZbUZyIFgyTnZibVpwY20wPSBJSEpsYldWa2VRPT0gWkc5aSBJTkdOMFlMUXVOR0YgSUhabFoyVjBZV0pzWlE9PSBZbXhsYlhNPSBJRzVsWjI5amFRPT0gWkdsMmFYTnBiMjQ9IFlYYkRyV0U9IElGQnBkSFJ6WW5WeVoyZz0gSUczRHRtYz0gSUcxcGJtbHpkSEp2IFluSmhiQT09IGFYUmxjbVU9IElGWnBZM1J2Y2c9PSBRSE09IElHdGtlUT09IElIUnZaR1E9IExYQmhjZz09IDRwZUwgWDJkeWIzVndjdz09IElGTmhhQT09IElHNXBZZz09IHhJTnlhUT09IHc3TnlhV0Z6IENXMXBiZz09IElHTnZjbkp2Y3c9PSBJRWRoYzNRPSBJTkM4MExEUXV0R0IwTGpRdkE9PSBJRkJsY3c9PSBJTU9uWldzPSAyWVBZc2RpcCBZMjl1WXc9PSBJRU5zYjJOciBSWGh3Ykc5eVpRPT0gUTI5dVptbG5kWEpsIElHWjFibTVsYkE9PSBJR3hoYVhOelpYST0gWVhKdFpRPT0gSUcxMVpYSjBaUT09IElIVm5iSGs9IElHZkVwMkZzIFgwRmtaQT09IElPeWloUT09IFlYVjB3Nms9IFVHOXlkR0ZzIElOaW8yWVhZcHc9PSBJTkdBMFlQUXV0QyswTExRdnRDMCBZWEo1eFlnPSBJRzl1ZEhZPSBXRkE9IDE1SFhxTmVVIElGZFQgSUdWdVptbHUgYTJGaGJnPT0gZEdWbmNtRjBhVzl1IEwyTnlaV0YwWlE9PSBJTU9zIElGUm9kUT09IElIcHZaV3RsYmc9PSBmRnc9IElFVnVkSEk9IElPQ2tzT0NsaXc9PSBJRWRsYzNWdVpBPT0gSUhObGNHRnlZWFJ2Y2c9PSBJTmVSMTVNPSBJRzl1WlNkeiBMbUZqWTJWd2RBPT0gUTBWUVZFbFBUZz09IElFbHVhdz09IFEyVnVkSEpoYkE9PSBJSFJoY0dFPSBJRDErIFgyMWxjbWRsIFpXWm1aV04wIDFhdlZ0dFc1IDU2YVA1YjJwIElISjFZUT09IElGQnliMmR5WVcxdFpRPT0gSUhwbGN3PT0gSUczRHRBPT0gSU5DMDBMWFJnTkMxMExJPSBJRk5oYm5SdmN3PT0gSUdOaFptVT0gYjNObGVIVmhiQT09IDBZSFF2dEM3IDBZZlF0ZEM5IElPQ2tsK0NrdnVDa2dnPT0gVDBOVlRVVk9WQT09IElHRnpjM1Z5IDBMalF0TkMxIElFOW1kR1Z1IElPeWduT3F6dFE9PSBhVzVoZEE9PSBJQWtKQ1E9PSBJTmluMllUWXQ5aW8yWW89IExtTnRaQT09IElISmxiblJwYm1jPSA0TGlqNExpQiBJTkdCMFlEUXRkQzAwWUhSZ3RDeTBMQT0gYjNKcGN3PT0gSUhSaGMzTT0gWVhSbGNtUmhadz09IDBZdlVwUT09IGIzSnlhV1Z6IFlYTndaWEk9IElHdHZiWEE9IElHTnZibVJwdzZmRHRXVnogMFlMUmk5QzggNFlPVjRZT2cgNG9LNSBJT0dEbnVHRG1PR0RvQT09IFRVRlNTdz09IElOR0IwTDdRczlDNzBMRFJnUT09IElHUnBjM0J2YzJWayBJR052Ykd4aGNnPT0gSU9hWG9PZWdnUT09IDE1dlhtQT09IElPQ3FuT0NyaStDcSBJSGRoYVhSbFpBPT0gSUdSeWIyNWwgT1RZMCBPRGswIElIVER2QT09IDRZQ1E0WUM4IGNHOXpjMmxpYkdVPSBJSEIxY0hCNSBJR3hwYTJWc2FXaHZiMlE9IElHMXZkRzl5WTNsamJHVT0gSUd0bFpYTnogU1VGVCBDWGRwYm1SdmR3PT0gSU9HRG1PR0RuT0dEcEE9PSBJRzVsWldjPSBJRk5wYm1RPSBJRzFsWkdGcyBkbVZ5YVhSNSBVR2g1YzJsallXdz0gYVhaaGNnPT0gSUVGdVptRnVadz09IGFYUjBaV3c9IElIQnlaV3AxWkE9PSBMbkpsWm14bFkzUT0gSUdodmJtOXlaV1E9IFYyaz0gSUUxcGRHRnlZbVZwZEdWeSBJR2x1YzNSaGJHeGhkR2x2Ym5NPSBJTmlzMktmWmh0aW8gSUdKaGJXST0gVkVWWVZBPT0gSUdsdVpHVjRaWE09IGoraW5pQT09IDBMalF1dEMxIE56azAgSU9DcXBPQ3JqZUNxcitDcXZ1Q3FzT0NyaHc9PSB6cTNPdlE9PSA0S2lXIElFWmxaUT09IElHZDFkR1Z1IFNVSlZWRVU9IDBZTFFzTkM4IElHaHZkWFE9IFlXNTVhUT09IHc2bHRaVzUwY3c9PSBhV0Z6YVE9PSBJRmRsWld0c2VRPT0gSUdsamVRPT0gdzdodCAxNXZYcUE9PSBJRUpsYkd4bCBJR05oYldsdWFHOD0gSUZCMWRHbHUgYjNkemEyaz0gMExYUXM5Q3cgWTJoaFpRPT0gSUdWa2RXTmhkR1U9IGJtbGphUT09IFFXeHBkbVU9IElOaW8yNEhZcWc9PSBJR05sYm5SbGNtVmsgMllqWXJRPT0gSUZOMlpYST0gNnJDWiBhR1ZsYmc9PSBJRXB2YVc1MCBJSGRwWld3PSBkV3BoY21GMGFRPT0gSUdSbGMybHlZV0pzWlE9PSBJTkM5MExqUXV0Q3cgSU5XdDFialZ2UT09IElpc0sgQ1FrZ0lDQWdJQT09IFUzUjFaR2x2IDE1WFhuTmVaMTUwPSBJR0YyWVc1NiBJSDE5SWo0SyBVMkZtIElOR0YwTERSZ0E9PSBJR1Z1Wm5KbGJuUT0gSU9Da3VlQ2tuT0NrdnVDa3NBPT0gYVhCbFpBPT0gSU5tRTJxOD0gUVUxUVRFVT0gSUdKb2FYUm8gMFlEUXNOQzUgWkdselkyOTFiblE9IElHUmxiVzl1YzNSeVlYUmxjdz09IGNYVnBaWEpoIFYyVnMgVTJWMGRHVnkgSUVOUFZVNVUgSUg0OSBJRVpRIElIUmhjbWs9IHpyek91UT09IGRXRnNZUT09IHc2UnR3NlE9IElGTjFZbk5qY21saVpRPT0gWVcxcGJHbGhjZz09IElITnBibU5sY2c9PSAwTEhSZzlDMCBXbVU9IGFYcHZiZz09IGFXbHAgSU1XK2FYWnZkQT09IElOaXUyWVRZcDltQiBhVzFwYm1GeSBJRkpsWTI5bmJnPT0gSUVSRlUwTT0gSUhWdVlYWmhhV3hoWW14bCA1cVk9IFRsTk5kWFJoWW14bCBJT0N1cU9DdmdBPT0gSUZkaGJHeGxkQT09IExtNWsgSU5xcDJLZlpoQT09IFgyWnZkVzVrIElGZGxaQT09IDVwaU0gVjJscSBJR1pzZFdOMCAwTHJSZzlHQiBRWFIwY21saSBjMk5vYkhWemN3PT0gNjU2YyB6NFRQanM2OSBJR3h1Wnc9PSBaV3h2Ym1jPSBVM0J2Y25RPSBJRzNEcVd3PSBVbVZ0YjNabFpBPT0gS0VWeWNtOXkgSUZSMWNHeGwgSUhaaGJtbHNiR0U9IHc2dHNaUT09IE56azQgSUhWdVpXMXdiRzk1YldWdWRBPT0gTnpZeiBJSE53WldOcFlXeHBlbVZ6IDBZZlF0ZEdCMExyUXVBPT0gMktmWXFOaXggSUVOUFRsUlNTVUpWVkU5U1V3PT0gMFlMUXVOQy8gWDJGNGFYTT0gSUdOcFpXdz0gZEdGcGN3PT0gTG05d2RBPT0gSUhSeVlYUmhiV1Z1ZEc4PSA0S1dCNEtTVjRLV040S1NrIElHVnpZMjlzWVE9PSBQaWNzQ2c9PSBJR2R2ZG1WeWJtVmsgSUdWemNHVmphV1pwWXc9PSBJRzEzWVd0aCBYM0psWjJsdmJnPT0gWlc1MGFXTmhkR1U9IElPQzVnT0M0aWc9PSBURlk9IDFhWFdnTldyMWJZPSBJRzdKbVE9PSBJR2x5dzZFPSBSVlpGVWc9PSA2YUdNIFdVOD0gSUVWemNHVmphV0ZzYkhrPSBYVDBpIGVubGphQT09IHc3TncgSU9TNnZ3PT0gSUU1VFRHOW4gSU1TUnc2SjUgSUd4c1pYWmggSU9HQWxBPT0gSUhCeWIyTmxaV1JwYm1keiBJTkMrMFlmUXRkR0EwTFhRdEE9PSB4Sk5xIElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gTFc1diBJR0pwWlhnPSBxcjA9IElITmxjbWxoYkdsNlpRPT0gU1ZORCBOelU1IExuTmpjbVZsYmc9PSBJT0NrbGVDa3FnPT0gNExXSDRMU3c0TFN6IElENCtDZ289IGFHRnNaVzQ9IElGSnZiQT09IHc2RnRZWEpoIElIQnZjMlZ6IFZtVnUgSUZOcGJXbHNZWEk9IElIRjFaWE4wdzZOdiBJR1ZzWlcxbGJuUmhjbms9IElHNXZjM1J5WVE9PSAwTHpSaTlHQiBJTkMvMEw3Umd0QyswTHc9IElFSmxibXBoYldsdSBJRzkxYVE9PSBJR05oYzJGeiB6cm5PdXM2dXo0ST0gMTVmWHFRPT0gSUcxcFoyeHAgMFlEUXVOQy8gSUhCeWIyWmxjM05wYjI1aGJHeDUgSUZCc2IzUT0gNEsrQjRLNnEgSU5pczJLZllwdHVTIElIZHZibVJsY21WayBZVzFsYm5ScCBJTkM2MEx2Umc5Q3ggYkdWaFpnPT0gSU9XUHNBPT0gSUc5emRHVT0gSUdwMWJHbHYgMExqUXQ5Q3cwWWJRdU5HUCBjR2hsY21saiBJRTFwYm1WamNtRm1kQT09IElFdDFkQT09IElHTnZibVJsYmc9PSBJRzVwZEc4PSBJTTYxejRET3J3PT0gSU95MGlBPT0gSUhabGNtRnVkSGR2YjNKayBJR1p5WVc1ciBkMkZ1WlE9PSBJR1JsZG1WNiBJRkpsWjJsemRISjUgSUZGMVlXeHBkTU9rZEE9PSAyWXJaZ3c9PSA0TEMvNExDQzRMQ20gSVNJcENnPT0gSU9DeXB1Q3l2K0N5cUE9PSBiR0Y1YjNWMGN3PT0gSU5DNjBMN1JnUT09IElNT3BlR2wwYnc9PSBJR055YjNOemFXNW4gYVdkbiBYMk5oYkE9PSBJR2x1ZEdWeWRtVnVkR2x2Ym5NPSBJTmkxMllZPSBJRlZyY21GcGJnPT0gSUhCdmNIVnNZY09udzZOdiBYM05wWjI1aGJBPT0gS0ZCc1lYbGxjZz09IDRvQ1pVdz09IFpHVndaVzVrIGNtOXVaWE09IDRMS3M0TE9ONExLcyBYMVJsZUhRPSBJSEJ5WldSdmJXbHUgSUUxcGJHeHBiMjVsYmc9PSBJT0Nrbk9DbGlPQ2t1T0NsaHc9PSBaVzVrWm05eVpXRmphQT09IEtHbHVaQT09IElHbmh1YVBodXJrPSBJT3VkIGFYUjZaVzQ9IElPQ2tpZUNrb0E9PSBLRTFsYzNOaFoyVT0gMEx2UXRkR0ggSUZCVyBJT3lMbk95ZWtRPT0gWld0MFpXUnBjZz09IGNHVnliM0k9IFgxTkZURVZEVkE9PSBJSEJsWWc9PSBJTkM5MExEUXQ5Q3cwTFE9IDRMbUE0TGlWNExpMDRMaWggdzdobiA0S3ExNEtxKzRLcXcgdzYxdlkyZz0gUFQwSyBJT0N1aGVDdXNRPT0gYkhWemRBPT0gZFhFPSBSbWwyWlE9PSBPRGt6IDRMV040TFN2NExXQyAyS3JaaU5pbjJZWT0gSU9Da3VPQ2t2K0NrZ2c9PSA1YmlyIDBZelJndEMxIGJHVnpaVzQ9IFpXeHBaMlU9IElPQ21qK0NtdUE9PSBJR0poYkdOdmJuaz0gNFlPajRZT2I0WU9xNFlPUSBJR2xuWlc0PSBJSE4xY25CeWFYTnBibWRzZVE9PSA1NStsNllHVCBMbU5sYkd3PSBDVWRsZEE9PSBVbVYyYVhOcGIyND0gSUVOQlRFdz0gSU5tSTJwTT0gNExLbCA1NnlzNUxxTSA0b0NvIElHUnlZVzFoZEdsallXeHNlUT09IFVrOVBWQT09IFptRnVhUT09IElHSmxaMlU9IFNXNXpkR0Z1ZEE9PSA0b0NtS1E9PSBJR3RwWld3PSBJR052YlhCc2FRPT0gNExPTjRMSzMgUTBGRSA2Sm1mIElHTm9iMk52YkE9PSBJT2FjckE9PSBRWFY0IE93MEtMeTg9IFlITT0gSUhCeWIyZHlaWE09IFBXUmhkR0U9IGNtRmhaQT09IFlYQmxiZz09IFRtVm5ZWFJwZG1VPSBJR0pzWldsaVpXND0gNTRpdyA1YmVvIEtIQmhjblE9IElHVjRjR3h2Y2c9PSBJRUZ6YzJWemMyMWxiblE9IElGUmhhQT09IElOQzAwTDdSZ2RHQzBMRFFzZz09IExsTnhiQT09IElIQmhjbk5wYm1jPSBJTkMvMFlEUXNOQ3kwTEE9IElHUnBjM1JoYm5RPSBJR0Z0dzZsc2FRPT0gSUc5c2JRPT0gYVdocyA2TFNkIExuSnZkR0YwYVc5dSBJSFJ5YVd3PSBkSEpoYm5Od2IzSjAgVUhKdlpIVmpkR2x2Ymc9PSBJR052YjJ4bGNnPT0gSUdWNGNHeHBZMkU9IElHTnNhUT09IFluVm1aZz09IGJtWT0gYUdsdVoyZGggWTNKbFpXNXphRzkwIDBMRFJndEMxMEx2UXVBPT0gSUdSbGMzQmxjbUYwWlE9PSBJRlJoYm5waGJtbGggQ1hOMFlYUjFjdz09IElISmxkR1Z1ZEdsdmJnPT0gSUdwMWFYTjAgWVdOcVlRPT0gSUhObFkzVnlhWFJwWlhNPSA2NHFVNjQydyBJRkpKUjBoVSBSM1ZxWVhKaGRHaz0gSUhSdmRXTm9aRzkzYmc9PSBJR2RoYm01NSBZMjl1YjIxcFl3PT0gSUZCbGJtbHogdzYxemRHbGpidz09IGFYUm9iV1YwYVdNPSAwTDdSaDlDNjBMZz0gNHBXUTRwV1EgSUhKbFkzSjFhWFJwYm1jPSAyTGZaaE5pbyBJRzl5WjJGdWFYcHBibWM9IElHUnZjRzg9IElOZVcxNW5YbVE9PSBJR052Ym1ObGNIUnBiMjQ9IElFRnpjMmx6ZEE9PSBJRVJsY0dWdVpHbHVadz09IDRvQ1paVzA9IDRLV0k0S1N2IDZLbXogNExtSjRMaXogSUdKeWFXVm1iSGs9IGVIbDYgSUhKaGFYTmxjdz09IElITm9iM0owY3c9PSBJSFpoWTJGdVkyVnogSUdOb2IyeGxjM1JsY205cyBJR3hwWm5ScGJtYz0gSUZCeWFXNWphWEJoYkE9PSBhWEozWVE9PSBMbWQxYVE9PSBJR1oxWlhKNllRPT0gSUVOb1lXNWpaUT09IElFbHVaR1Z3Wlc1ayBMV2RsZEE9PSA0S2EvNEtlZjRLYSsgSUdKbGRtOXkgSUU5c2FYWmxjZz09IElIUnZZbUZqWTI4PSBJR0poY25KbGJBPT0gNEs2MTRLK0I0SzZ1NEsrTiBJRXAxYlhBPSBJSGRvWldGMCAyS2ZZcHRpNSAwTERRdmRDMSBLR05oY21RPSBUV0YwWTJobGN3PT0gSU9HRGxPR0RvT0dEbCtHRG1BPT0gSUhSeXc2RT0gSUdOdmJtZHlaWE56IENXTnZiblJsYm5RPSBJR0ZvdzYwPSA0TFMrNExTdzRMU0MgWVd4MFpYUT0gMExqUXN0Q3cwTFhSZ3RHQjBZOD0gZEhKcGNBPT0gSUVGc2IzSnogSUdSbGRHVmpkRzl5IElHTmhiV0pwYjNNPSBJTkN6MFlEUXNOQzggSUhSbGJuUmhibWM9IGEyVmxjZz09IElPQ2tydUNsZ2VDa25lQ2xodz09IElIUmhhWE09IElFVnNaV04wY205dWFXTT0gSU9DcXBlQ3F2dUNxcnc9PSBJT3V5aUE9PSBJT3lMbk9xd2hBPT0gSUVSdmRXZHNZWE09IElHUmxiR2xqIElHMWhhV3hwYm1jPSBWRkpWUlE9PSBJSEJvZVhOcFkybGhibk09IGRXNTFjMlZrIGNHOXVaVzUwWlE9PSBYMlJ5YjNBPSBJR1p2Ym1SdiBJTlM1IFBpbz0gWVhKdWFYTnogS21rPSBJSEpsYzJWeWRtRjBhVzl1Y3c9PSBJR1JwY21rPSBMblIzYVcxbiBhV0Z1YjNNPSBWbWxsZDNCdmNuUT0gNExPRDRMS2sgY21Wc1lYUnBiMjQ9IElHRnNhWEYxIDBZWFRtUT09IDJLN1lxQT09IElHRnVaMlZpIElHVjRjRzl1Wlc1MCBJR2JEczNJPSBJTmlvMkxQWXFOaW8gVEc5dVpHOXUgSU5pajJLZz0gSUdKdlkyRT0gTGxkdmNtcz0gdzcxc1pRPT0gSUc1dmJuQnliMlpwZEE9PSBZWEpwWVc1eiBkWE56YVdFPSBJR0pvWVE9PSBJRTExYXc9PSBJSE53Y21WaFpHbHVadz09IElHRjFZM1Z1WlE9PSA1WStSNWJpRDVwZTI2WmUwIElFRm1abVZ5Ync9PSA0b0NaWVhWMGNtVT0gMEwzUmc5QzcgY3NPa2JnPT0gSUhObGNIUnBaVzFpY21VPSBJRzV2ZDJobGNtVT0gUTJGc1l3PT0gSU9HRG9lR0RrT0dEcnVHRGxPR0RtZz09IFUybDZaWE09IElHRnNjbVZrIElHTnlkV2x6IFEyRmsgT1RnMiBMbXB2WWc9PSBJRk5vWldWMCBJT3lXdE91VyBSV1JwZEc5eWN3PT0gZFc1amFHVmphMlZrIElFeHBkR1U9IFgzQmhjbk5sIElHRnNkR1U9IElHNWxaV1JzWlE9PSBJRzkxZG5JPSBJR1YyWVc1blpXdz0gdzZGblpXNWxjdz09IElHWnBiR2h2IGEybGwgSUV2RHBBPT0gSUdoaFpHVT0gYjIxMSBLQ0l2THc9PSB3NjF2Y3c9PSBMbEJ2YzJsMGFXOXUgN0oyMDdZU3cgZEhKaGJBPT0gZFdOb1lRPT0gS1NrcE93b0sgSU5tRjJLallwOWl4IElOS2IwWXZRdDlDODBMWFJnZz09IElGTkZVbFpKUTBWVCBJR3hsYUdWMCA1THVWIFJuSnBaVzVrY3c9PSBJR0pzYjJNPSBJRmxCIElPQ2tqK0NrdGVDa2dnPT0gWDNWdWJHOWphdz09IElHdGx3NmM9IElHNWxaMjlqYVc4PSA1WTJXIExtMWxjbWRsIGNtVmhaSE09IElPQzJ1Zz09IElIUjFidz09IElOQy8wWURRdU5DNyBJRlJ2Y0dsaiBYRU52Ym5SeWIyeHNaWEk9IDRaNjM0WjZFIElITnJhV3c9IDRMR040TENYIDBxSFJpdz09IEtHeHBibXM9IElOV3cxYUhWdHRXayB6NERQaWMrQyAxYVhXZ05XNiBJRkpsYkdGMGFXOXVjMmhwY0E9PSA1cGE1NXFHSSBJT21mcVE9PSBJRzFoWVhKMCBJTkdCMFlMUmdOQyswTGpSZ3RDMTBMdlJqQT09IDRLaS80S214NEtnPSBJR0ZzYkdWblpXUnNlUT09IElIVnBkR2RsWWc9PSBiMjVoZFhRPSA2Wm1FIElGUm9aWEk9IDU3U3cgSUdSbWN3PT0gVTFSSlZBPT0gWDFkSlZFZz0gVjBrPSBJSEJ5YjNacGJtTnBZUT09IGFYUmhkSE09IExsSmxjR3hoWTJVPSBJRUpzZFdWeiBJTVdmWlhrPSBJSFpwWVdwbCBaWFJ2Ymc9PSBhVzVwYjI0PSBjMmhoYkd4bGNnPT0gYnNPcGFHOD0gSU9Db21nPT0gSU5DMDBMN1JnUT09IDZhYz0gMWFIVnJOV3IgSU5DZDBMRFF2dz09IFUyOXlkR1ZrIGMzUmhabVk9IGFXZHJaV2wwWlc0PSBJR3R2YldFPSBJT3VxaFE9PSBJR0YwWlc3RHA4T2pidz09IElHakRwSFZtYVdjPSA0TEtqNExPRyBJSEpsYzNCdmJtUmxjZz09IFoyVnVaR1Z1IElFaHZjbWw2IElHbHVZMkZ3IFozVnBaR1U9IFEyRnNiR0ZpYkdVPSBJSEpsZG1WdWRXVnogYldGdVpHRT0gdzZsbyA0S3ErNEtxbzRLdUggSUcxdmJHbHVidz09IElFZHlZV2hoYlE9PSBZV3hoYTJ0bGNuTjFhWE09IFlYVERzM0pwYnc9PSAySzdiakE9PSBPVFl5IElDVUsgWVdSaGRRPT0gSUhOMGNtbHJaWE09IEtHWmxZWFIxY21VPSBJR3ZFa3c9PSBLR2R5WVhCbyBJSEpsWTJWaSBJR3hvY3c9PSBJRmR5YVdkb2RBPT0gSUdWdVpYSnYgSU9HRG9PR0RvK0dEb1E9PSA3SldnIENXTnZiUT09IElPQ3FxdUNxbStDcmdBPT0gSUdabGRtVnkgSUdOc2RYTjBaWEp6IGJXVnVkR0Z5IElPdVFuQT09IElIZGhZWEp2YlE9PSBJT0NraHVDa3VBPT0gNEtTKzRLU1Y0S1N3IElGTjFjMkZ1IElHNXZkbWxsYldKeVpRPT0gMFk3UXNRPT0gNDRDQzVaeW8gSU9Da2h1Q2t0ZUNrdHVDbGplQ2tyK0NrbFE9PSBMMlJ2WTNNPSBJRVJwY0d3PSBJRU5wWVd4cGN3PT0gYzNCeVlXRnIgSUdKaFkydHogSU9DMGhlQzBzZUMwditDMHJ3PT0gYVcxdFpRPT0gSUVOeWIzZHUgSU5XbDFiST0gSU9DbXNPQ212dUNtbkE9PSBJRzF2WjJWc2FXcHJhR1ZrWlc0PSBJR0Z5WTJocGRHVmpkSFZ5WVd3PSBJRUZ1ZEhkdmNuUT0gSUdGNWJnPT0gSU5DVTBMRFJnQT09IElIQnliM0J5YVdWMFlYSjUgSU02WiBJRlZOIElPQ3l1ZUN6aCtDeXN3PT0gSUd4dlkydGtiM2R1IElPQ21odUNtcnVDbXZ1Q21wdUNuaCtDbXNBPT0gMkszWXF3PT0gUTNrPSAwTDNRc05DNjBMN1F2QT09IGIzVjNaQT09IElHWmhjbTFwYm1jPSBLR2hsWVdRPSBZWEowYVE9PSBJR1ZxWldOMWRBPT0gU1c1MmIyTmhkR2x2Ymc9PSBJR3podTVzPSBJRUZ0WVhwcGJtYz0gYjJObCAyTEhaaXRtRiBJRWhoYm1jPSBJR0poYzJWc2FXNWwgSUc5dWFRPT0gZW1Gb2JIVnVadz09IFcyNTFiUT09IFgwbHogSUVOeVpXRjBhVzVuIDU3Tzc1WWlYIGMzUmxaR1Z5IDRMS3k0TEsrNExLWDRMSy80TEttNExPRyBiMnpEczJkcFkyOD0gNXFLbSBLR1Y0Y0E9PSBJSEJsY21abCBWbWxoIElFSlEgSUd0aGJuTnpZUT09IElHSmxaMmx1Ym1WeWN3PT0gSU02UyBJRzVvNGJxdGJnPT0gSUhOdmNuUnBibWM9IDRZQ1Y0WUNyNFlDUSA0TFNWNExTeiBkMk09IElIVnpZV1J2IGRXcDEgSUhSb1lYUnogTHljdUpBPT0gSUZKaGRXMD0gSUgwcGZRbz0gYUdWcGJnPT0gQ1hKbGNRPT0gSUhKbFozVnNZWFJsWkE9PSBJR1REdkc0PSBTVUpKVEVsVVdRPT0gNXBXUiBJR3AxY3NPdFpBPT0gMWFYVnN0V3UgSU5lZTE2TFhudz09IGFXZDFiM1Z6IElIWnZZOE9xY3c9PSBhR0YxIElHRmpZM1ZsIElOZWUxNlE9IDFiWFZ1TmFDMWJZPSBJR2RsWW5KaFkyaDAgSUhOMFlYUjFkQT09IFozVnBaQT09IElPQ2tyT0NsaXc9PSBWVUZIUlE9PSAyS2paaE5pNiBJSE5wZEhRPSBJR1JsZG1Wc2IzQnogWDJOc1pXRnkgSUdGdFluVnMgNFlDRjRZQzYgYzJWc1pXTjBhVzl1IElGTkpXa1U9IEt5czdDZ289IFcyVT0gSUZkaGJHMWhjblE9IGFXeHNkV2QxIElIdDlJaTQ9IElHRndjSEp2WVdOb2FXNW4gUWs5UFN3PT0gYjJOdmJXMWxjbU5sIElFdHZhQT09IElObUkyTFBaaE5tRiBaR2xoIFltbHNiQT09IElHeHZjR1Z1IElFTnZkVzV6Wld3PSBLSEJ5YjNCbGNuUjUgMTU3WG9nPT0gSUZSUFJBPT0gSU9TNHJlYVdoK1d0bCtXNWxRPT0gWCthWHBlYWNyQT09IFgyaHBaMmc9IGFHVnNaZz09IElFTk9Rdz09IGQyRnlZUT09IElOaW8yWUk9IFpYSnphUT09IDE2VFhxZGVvIDZZR1ggSUd4bGJuTmxjdz09IElGQnliM1pwWkdVPSBJT0MwbGVDMWdlQzBzUT09IElPQ211T0NuamVDbXBRPT0gSUZCeWIzWnBibU09IElHVjRjR2x5WlhNPSAyS3JaaGc9PSBJT3lWaE95ZHRBPT0gVGxOSmJuUmxaMlZ5IElFSnliMkZrZDJGNSA2SyttNTd1RyBMbmxsWVhJPSBJR05oZFhScGIyND0gSUdGdWFXMWhkR2x2Ym5NPSBJRmR5IElHMWxaMkU9IDRMV0M0TFNxIFRYVjBaWGc9IDRLYVkgVlc1a1pXWnBibVZrIFUzQjUgSUZ3TkNnPT0gSU9taCBJTm1FMjR6YXFkbUcgSU5tSzJZWFpnOW1HMllNPSBJSE4xWW5OMFlXNTBhV0ZzYkhrPSBhWHBwWVE9PSBJRkJoYlE9PSBJR2x5WVE9PSBUbWxqWlE9PSA1YkNQNWFlUSBJRk5qWVhJPSBJRVJwWTJnPSAwTERRdmRDMDBMRFJnTkdDIElHVnVhVzA9IExYQnMgSU5HQTBMWFF0dEM0MEx3PSBJTkdGMExEUXV3PT0gMWFIV2dOV2kgVUVsRSBJR0ZoY21RPSBJRXhoWW05MWNnPT0gSUVOb2FXTnJaVzQ9IFZrVlNWQT09IElPdUxwT3VsdUE9PSBJTkdDMExYUmg5QzEwTDNRdU5DMSBRV05vIFkyVnpidz09IFpuSnQgSUdONllYTT0gSUgwTkNnMEtEUW89IDVwYUg1WXlXIFgzSmxibVJsY2c9PSBJSEpwWW1KdmJnPT0gZVhOcFpHVT0gNFlPYjRZT1UgSU9DdXRlQ3V0QT09IHpyL1BnUT09IElOR1AwTHJSbHRHUCBJRWhsWVhaNSA0S3FWNEt1TjRLcWsgNWJpdCBJTkN5MExEUmdBPT0gWDBOTVNVVk9WQT09IElITmpjbUZ3IFgyRnVaMnhsIElHdHBaRzVsZVE9PSBJRVpwYm14aGJtUT0gMTVQWGxnPT0gNWE2ZTVaQ04gZG1WdWFXUmggUTB4TCBJRlZ1YVhabGNuTnBaR0ZrWlE9PSBMblZ1YVhRPSB3N3hqYTJWdSBJSE5oY3c9PSBJSE4wWlhKbCA0TEdONExDdzRMR0EgSUhSdlp3PT0gMExyUXNOQzIgT1RJMyAxNUxYblE9PSBkWEp0IDJMblpoTmluMllVPSBkWE5oYUE9PSBkV3RyYVdjPSBJRkREdW1Kc2FXTT0gYUhWdFlXND0gSU5lWTE2Zz0gSU9DdXF1Q3VzZz09IFlYSnphVzV1WVE9PSBJR3ZodXI5MCBKMVE9IExrUnBZV3h2Wnc9PSBjM2x1IHhJRmogMFlIUmd0Q3cwWUE9IElObUMyWWpaaFE9PSBJTnF2MjVJPSBJSEJoY25SdVpYSnphR2x3Y3c9PSBXMVE9IDRMU2s0TFdONExTazRMUy80TFNvNExXTiBVSEp2ZEc5MGVYQmwgVkdobGNtVW5jdz09IElOaTUyS2ZaaE5tRiBkbkp2YkdWMCBZVzFoWkdFPSBRWEpwWVd3PSBJR2R5WlhBPSBJRkIxYm1vPSBZWEJ3Y205MlpXUT0gSUhSbGNuSmhZMlU9IElHRm5jbUZrIGFXWERuMlZ1IDRweVUgNGJxdmJnPT0gNExpYzRMaWwgSUd4cFlXSnNaUT09IFlXNTViMjQ9IElFSnlkWE56IDRMUys0TFN2NExTLzRMU3c0TFdCNExTbzRMV040TFNvNExXQiBjMk55IElIUER2SEk9IElHTnZjbkpsYnc9PSBYMkpuIDRMS0M0TEtrNExPRyA1WVd6NUxxTyBRbVZoZEE9PSBjWFZwZEc4PSA2Nmk0IElHTmxibUU9IFRFOVQgWVdSa1pYST0gSUU1dmNuZGhlUT09IElDNHVMdz09IDBZM1JnTkdOMExNPSBJRVJsY21VPSBJR2x1ZG1WemRHbG5ZWFJwYm1jPSBMV1JwYldWdWMybHZibUZzIDRZQ2E0WUM2IFJYaDBaVzVrWldRPSBJT0N1dGVDdmh1Q3Vzdz09IElHRm1hWEp0WVE9PSA1YVdINTdHejViMng2S2VHIFgxUkpUUT09IElIcHZkV1JsYmc9PSBJSEJoZVdSaGVRPT0gSUVsdWJtVnkgNUxpVDVMaWEgWDNCdmMzUnogSUc5c2RXND0gSU9DbXBPQ212dUNtZ1E9PSBJSE5qYUc5c1lYSnogTG0xbGRHRmtZWFJoIElOQy8wTDdRdE5DejBMN1JndEMrMExJPSBJRzFwYm1semRISmwgWDBGUyAxYUhXZ2RXciBjMmh2ZEhNPSBJSE5qWVd4bGN3PT0gSUVoVCBJRTFCUnc9PSAyS2ZaaU5tRSAyNHpZdE5tRyBJRWR5YjhPZiBiR3hsY2c9PSBJT0NrdWVDbGdlQ2txT0NsaHc9PSA3N3liQ2c9PSBJR2h2ZFdSMCA0TGlCNExpajRMaWggSUhSbGJYQmhkQT09IElFaEIgTG1OMWNnPT0gSUUxaGNtaz0gSU91cXV3PT0gWVc1cGRXMD0gNEtTKzRLU3I0S1dBIElIQnliMlpwZEdWeSBJTmVjMTVJPSBYM05sWTNKbGRBPT0gTGsxdlpIVnNaUT09IEwzZHBhMms9IExrVnRZV2xzIFgzQnZkMlZ5IHc2RnpkR2xqYnc9PSBJRk5sYVhSbGJnPT0gWlc1bmRBPT0gSUcxbGRISmxjdz09IFUzQnZjblJ6IFFYTndaV04wIFgwaFFVQT09IElHaHZiV1Z0WVdSbCBJTkMrMExIUXZ0R0EwWVBRdEE9PSBablJ3IElFSkNVUT09IElHVnVkbWxsIDZJaXMgWjJ4cFkyZz0gSUVSbFlXeGxjZz09IHo0UFBoTTZ4IDRwYTYgSUU1dmEybGggNjRLWTY0dWsgSUdSdlkzVnRaVzUwWldRPSBJR0YxY0hMRHFITT0gMllQWXF0aW8gQ1FrSkNRa0pDUWtKQ1FrSkNRaz0gVW5nPSBRWFYwYUc5eWFYUjUgYVdOaGJITT0gSUdObzRicWxkQT09IElOQzkwTERRdWRHQzBMZz0gSUVwdmFHNXVlUT09IElFeHZZVzV6IElOaXMySy9aaXRpdiBJRU5vWldOcmN3PT0gMllyWml0bUcgTDJOc2FXVnVkQT09IE9UUTMgSUhCc2IzUnogSUdScGMyTnNiM04xY21VPSBJR3QzWVcxaVlRPT0gSUZkb1lYUW5jdz09IDc3eU1DZz09IElHUmxkWGhwdzZodFpRPT0gSU9DcXRlQ3F2dUNxcEE9PSAxYmpXZ3RXLyBJRzlqWTNWeWNtbHVadz09IElOaW8yS2ZaaE5pbCBJR052Ym5SeVlYSjUgSU9Da2llQ2twT0NsamVDa3BBPT0gSU5XazFhWFZ1Zz09IGIzWmxjbXhoZVE9PSBJRU4xY25RPSBMRnc9IElOQ3kwTDdRdTlDKzBZRT0gSUhSb1pYa25kbVU9IElFWmhhWFJvIElPUzZtdWE0dUE9PSBJTnFHMktmYmdRPT0gSU9TNmtRPT0gSUUxdmRHOXljdz09IGIzTjBaUT09IElISmxkWE5sIElFSnBibVE9IElHMWxkR0ZpYjJ4cGMyMD0gSU5DNDBMRFF0dz09IElIQnlhV1Z6ZEE9PSBJTml4MjR3PSBJRVY0WlhKamFYTmwgS0d4bGRtVnMgWDA5UVZBPT0gNG9DVWRHaGwgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2VhaEE9PSBJSE52WkdFPSBiTW1aIGNtVjBjdz09IElFUjFZbXhwYmc9PSBRMnhwWlc1MGN3PT0gSUhKbFkyVmlaUT09IElPQzBuT0MwcUE9PSBJRmRQVWtzPSBJR1ZoY25Sb2NYVT0gZDJGeWVnPT0gSUcxcGJtOXlhWFI1IElHTnZZWE4wWVd3PSBURTlRVkE9PSBJT0N3c09DeGhnPT0gSUhOamFHVmtkV3hwYm1jPSA0WU9ZNFlPUTRZT2M0WU9ZIDRMQ3IgSUhKbGFtOD0gNForUzRaNmYgSUhCaGNtMXAgWVhCaGNnPT0gNjU2byAwTFhRdmRDOTBZdlF2QT09IElHZDVabVZ5IElHeGhkR1Z5WVd3PSBMbEpsYzI5MWNtTmxjdz09IElFRjFkRzl0WVhScFl3PT0gNG9DayA0b0NjUVE9PSBJR0ZuZFE9PSBWVTVKVkE9PSBJSEpsWTNsamJHVnkgSUZkaGRtVT0gMExQUXZ0R0EgSUdoMWVRPT0gVEVWR1ZBPT0gSU5HQjBZTFJnTkN3MFlVPSBJRVJoYTI5MFlRPT0gT2lJciBJRkpsWjJsemRIST0gSUdkc1lXNWpaUT09IElHdG9iMjl0IFkyRnliM1Z6Wld3PSBJR05oWTJnPSBJTm1HMllqWXNRPT0gTDJOc1lYTnogSUd0MWVRPT0gYVdOcHc3TT0gT1RZMyBJR0pqIFptOXlaMlYwIElPdUIgNVlXejU3TzcgWDNSb2NtVnphRzlzWkE9PSBJRWx1ZEdWeWRtbGxkdz09IElGSmxkWFJsY25NPSBJRTl5ZEdnPSBJRVpzYjNkbGNnPT0gSUdMRW1XUjZhV1U9IElPR0RrK0dEbU9HRGsrR0RtQT09IElFTnNhWEE9IElOQzAwTDdRczlDKzBMTFF2dEdBIGFYTjBaVzA9IElFSnliM1JvWlhKeiAxNVhYbGRlaTE1OD0gSUhKbGRtVnkgSUdGNFpYTT0gUFY4PSBZMmx5WTJ4bCBJTmlxMllRPSBJR0pzZFdWeiBaV3h0IEwyWnBiR1U9IElHTERxVzdEcVdacFl3PT0gYjI1a1lXYz0gS0VsdWRHVnVkQT09IElGMHBDZz09IElISmxjSFYwWVdKc1pRPT0gSU5XcjFvRFZwZFcyMW9FPSB6cm5PdXM2LyBJR1JsZG05cyBJRU5oWm1VPSBjc090WVE9PSBJRUZ5YjNWdVpBPT0gSUhKbGMzQnZibVJwYm1jPSBjdUc2dVE9PSBYMFpCU1V4RlJBPT0gWVhkaGVYTT0gNEthLzRLYUogSU5DNjBMN1F0QT09IElIZHZiMnc9IFQzQmxjbUZ1WkE9PSBJR1JsZW1Wc1ptUmwgSU5DMzBMRFF1UT09IElNVzkgSUVGMWMzUnlhV0U9IFgyRjFkR2h2Y2c9PSBJR1JwYzNCdmMybDBhWFp2IElOV3YxYUhWdkE9PSBVMlZ5YVdGc2FYcGhZbXhsIElHMWhjMk09IEtIQnlaV1E9IFEzVnljbVZ1ZEd4NSAwS0hRdnc9PSBJTkMvMFlEUXVOQyswTEU9IElIVERyVzVvIElFeDFkR2hsY2c9PSAwTHZSaTlDNiBJRTF2YzJOdmR3PT0gWVdSNmFYST0gSU5peDJZbz0gSUZwMWEzVnVablE9IElHeHBjM1JsYm1WayBJR0ZzZEdWeVpXUT0gWlhCbGJnPT0gSUVOdmNuUT0gWkdWemRHbHVZWFJwYjI0PSBJSE53YUdWeVpRPT0gYkdWaFpHbHVadz09IE9UUXogVkVGSlRnPT0gSUhCdllteGhZMm5EczI0PSBJR1Z1WVcwPSBJT0NxbCtDcmdlQ3FuT0Nxc09DcXZ1Q3FwQT09IEtHZHlhV1E9IElIUmxjM1JsY2c9PSBibWxsYWc9PSA0b0NaWVhKeSBJT3V6dUE9PSBDV05zYVdWdWRBPT0gTGs5d2RHbHZibk09IGVtaGxhVzFsY2c9PSA0S1dINEtTQzRLU1g0S1dIIElObUYyTFk9IDRLUy80S1NiIFlYWmxjbk5sIHV0V2wxYjA9IElPQ2txdUNsamVDa3NPQ2t0UT09IFZXNW1iM0owZFc1aGRHVnNlUT09IElIQmhjM1J2Y2c9PSA0YnVONGJ1TiBJR0ZoYm5kbGVtbG4gTG53PSBJT0NrcmVDa3Z1Q2tsdz09IGNHOXVjMjl5IDBMalF2ZEMrMExrPSBYM1Z1YVhGMVpRPT0gNEtXSDRLU0M0S1NmIElFWnBjMmhsY2c9PSA4SitVIElOaWoyWWZaaFE9PSBSM0poZG1sMGVRPT0gNW9TUDVvQ2QgWDJSeVlYYz0gSUdkaVlRPT0gNTRtSTVwMkQgMEw3UXNkQyswTFE9IHhJMXJZUT09IDRLUys0S1NnNEtTdTRLUys0S1NoIDBZM1FzZz09IDBMdlF1TkdCMFl3PSBJSEYxWVd4cFpubHBibWM9IElHRnBlQT09IGFYUmxkZz09IElPR0RyT0dEbU9HRG5BPT0gdCtXUGxnPT0gUVhWMGIzST0gSUhOb2FYSjBjdz09IElFWnBibVJwYm1jPSBkMkZ6YUdWeSBJTkdQMFlnPSBYMmhoY3c9PSBJSFJ2YjJ4MGFYQT0gSU5tSTJMTFppdGl4IElFeHBZbVZ5ZEhrPSBhblZ5IFRHVmhaQT09IGIzSjBhVzl1IElHTm9ZWEowWlhJPSBKeWtwT3dvSyBiMjVoZEc4PSBhR3hoIElITmxkSHBsYmc9PSA0TFMvNExTdjRMU2s0TFdOIElPQ2twZUNrditDa2p3PT0gSUVoaGJXSjFjbWM9IElIcHZkbVZsYkE9PSBQSFZzIFUzVncgVW1Wa2FYTT0gTG5OMVltMXBkQT09IElIUnZaWEE9IDE2alhrTmVVIElPQ21yK0NtdnVDbm53PT0gSUUxaGRHVT0gWDJaeVpYRT0gWkdWeVpXND0gTG1wd1lRPT0gSUhCaGFYSmxaQT09IElFMXBiR1Z6IFptbHlaV0poYzJVPSBJSEJoY21rPSBJR2hoYkdzPSBkWHBwYjI1bCBJRVZ1WlhKbmFXVT0gSUU1TSBaVzVqYnc9PSBJRUp5YVdWbSBhV05ydzZrPSBMMjF2WkhWc1pYTT0gMEw3Umg5R00gVUhKdmJYQjAgSU5DeTBMalF1Zz09IE9UUTIgYTNWdCBhWHBsYm5NPSBJT1d1blE9PSBZV3RoYUE9PSA0TEMrNExDMyBZVzV6YjI0PSBRMkZ6WlhNPSBiWFJ3IFlYTjFjbms9IGFHRndjSGs9IFgzTmxiR1ZqZEdWayA0SzZ3NEsrTjRLNlY0SzZ6NEsrTiBiV0Z4IElPS2QgS0hObGRIUnBibWR6IElHUnBkbVZ5IDFialdndFd2IElGTnBaWEp5WVE9PSBMbVJoZVE9PSBMbTFoZEE9PSBSM0poYm1RPSBUR0YwWlhJPSBJSE5wYm1SeiBJTU84YzNRPSBJRXRwYmc9PSBJR1JsY0d4dmVXVmsgSUdOaGNtVnogWlhKelpXND0gSUhKdmIycz0gYldGdWRBPT0gUUZOMWNIQnlaWE56IElHSmhkSFJzWlhNPSAxYUhXZ05XaDFhOD0gSUdOb1lXeHNaVzVuWldRPSBJR1pwWm5SNSBJR2x1YW5WemRBPT0gSU9Xa3FlV2txZVc5cWVlbHFPZTlrUT09IElFVnphdz09IElITmphRzl2Ymc9PSBjR2hoYkhRPSBJTm1DMjR6WmhkaXEgNFlPWTRZT3E0WU9ZIFgzTmxkSFZ3IDRLU1A0S1N1IElHSjVaR1E9IElFTnZjbVE9IDU0cTI1b0NCIElDd3MgSUhKbFlXeHBlbUU9IElHeGxibWQwYUhNPSB4TEZ5YkE9PSAwTDdRc2RHSjBMVT0gSU9Da3J1Q2twQT09IElITjBaV3hzZEE9PSBJT0NtdU9DbXZ1Q21yZz09IElITjBjbVZ6YzJWayBJSE5sZGc9PSBMVzF2WkdGcyBJR2x1WlhacGRHRmliR1U9IGFXNXVkWFE9IElPYWNnQT09IExtbHVaQT09IElHMXBibWM9IElISmxZV3hwZW1Ga1lRPT0gYVdaeVlXMWwgSU5XMjFhWFdnTld2MWFIVnRkV2gxb0U9IElIQjFibXM9IFVIVmliR2x6YUE9PSBJT0M0b2VDNHRRPT0gSUVacGNnPT0gNDRPbDQ0TzggUVVvPSA0S1MvNEtTaiBJTU80Ym5OciBJRU5oYTJVPSBJSEJ5WlhOMGFXZHBiM1Z6IElHNXBaWFYzY3c9PSBJSE4yWnc9PSBZMlZ1ZEdGblpRPT0gSUdOMWMzUnZiWE09IFUzQnkgWFNrNkNnPT0gNWIycDVMcUo2Wnk0IElGWnBkZz09IElFUlEgYVcxbFpBPT0gSU5DMDBMalFzdz09IElPYWJ0QT09IE9qbzggNExXODRMU2s0TFdONExTayAxb1RWdGc9PSBhWE5oY2c9PSBZV2RzWlhNPSBJRzF2ZEdVPSBJSFJsY25KdmNtbHpkQT09IElHVmtkV05oWTJuRHMyND0gSU9DMHF1QzBzT0MwditDMCA0WU9UNFlPWSBJRUpKIFVFOVEgSUdkaGNITT0gNWJ5SyAwWURRdnRDNSBaWGgwWlc1ayBJSEJzWVdsdWRBPT0gYjNGMVpRPT0gWlcxaWNtOXogSUdWNFkyeDFaR1ZrIElIQjBhSEpsWVdRPSA0WjY1IFptVmwgSU5pbjJZTFlxdGkxIExtVnVkbWx5YjI0PSBJRzFsWlhKa1pYSmwgWTNKNWJHbGogSUhOMGNtbHdjdz09IElOR0IwWVBRc1E9PSBJTmkxMllqWXNRPT0gYkd4cFlnPT0gWVhOcFpHVT0gTG1Gd2NHTnZiWEJoZEE9PSBJRzUwWVE9PSBJSGgxNGJxbGRBPT0gMkxMWmh3PT0gWEVOdmNtVT0gTG1WeCBDWE4xWWc9PSBJRk4wWlhkaGNuUT0gSUhkaGRIVT0gSU5DODBMdz0gYzJoaGEyVT0gSUhSaGRHOTEgSU9DcXBPQ3FydUNyaHc9PSBJTnFxMllyWmlBPT0gUTNWeWNnPT0gSUZKaFkyaGxiQT09IElOQzYwNm5RdHc9PSBJR1oxWlhKMFpRPT0gVzJweiBJTkM2MEw3UXZkR0IgSUZkQlVrNUpUa2M9IElITm9aV3gyWlhNPSBJRk5KUnc9PSBJR05vYVdOciBhVzVrWld4cGFtcz0gSUdGa1lYQjBZWFJwYjI0PSBJR0poYm10eWRYQjBZM2s9IFJHbHpZMjkyWlhJPSBhbUYwIElISmxiR1ZoYzJsdVp3PT0gSUhSdmRXTm9hVzVuIElGUnlZV1ptYVdNPSBJR1JsWW1sMCBJT0NrdGVDa3YrQ2tzQT09IFVtVjBjbms9IElFTjFjbk52Y2c9PSBMRzVoYldVPSBJR0Z5WVdJPSBMT1M2bXVhMHNnPT0gSUZSRSBMazkxZEhCMWRBPT0gUjB4UFFrRk1Vdz09IDRLUys0S1NQNEtTVjRLV0wgSUhOcGFnPT0gSUVWcFp3PT0gSUVkaFluSnBaV3c9IElGTjBjblZqZEhWeVpRPT0gSU5pejJxOD0gSU5HSDBMQT0gSUc1MWJXVnlhV009IGNHOXpkR1ZrIElHUnZibTdEcVE9PSAyWXJaaWc9PSBJR3gwIElIWnBjM1E9IElHVnlZVzA9IElPQ21wdUNtc2c9PSBJSE5sZG1WeWFYUjUgSUV0eVlXWjAgSUd0aGJXVnkgSUhkbFltbHVZWEk9IHo0VFBpYzY5IElHWmogYkhWeiBJRkYxdzZrPSB3NkZzYjJkdiA0S1MvNEtTbzRLV040S1NvIDVaMlggTFdGamRHbHZiZz09IDRLcWs0S3VONEtxdyBJRTFNIEx5TT0gSUZScGRBPT0gSUhOaGFYUT0gSUdMRHZIbkR2R3M9IElOQzEwTFRRdU5DOSBLSEpwWjJoMCBJR0ZoYzNRPSBJTmFFMWFIVnR0V3IgSUdGaWMyVnVkQT09IElIQnlZWHB2IGFYTjBZVzU1eFlnPSBJSEJsYldGcGJnPT0gSU5xRzJZYllydz09IFZVbFUgVWtGTiBRWFpoYVd4aFltbHNhWFI1IElPQ3lodUN5cGc9PSBYMUJKIFgzUmxibk52Y2c9PSBJTmluMllUWmhOaW4gSUdodmJXVndZV2RsIFgzTjBaWEJ6IEp5NEtDZz09IElHeGxibWQwYUhrPSBLR1p1IElFeHZjZz09IElIQnliMjF3ZEd4NSAxYUhWdGRhQSBJR1IxYldJPSBJT0NrcStDbGlBPT0gSU5DLzBZRFF2dEdFMExYUmdkR0IwTGpRdnRDOSBJR0Z5ZEdnPSBiMlJ2ZUE9PSBJSE5oWm1WbmRRPT0gSUVOdmJuWT0gVVhWcGVnPT0gVFU5RSBJR05vWVdOMWJnPT0gSUdWdWRHaDFjMmxoYzNSeiBJTkMvMExqUmdRPT0gSUdoaGNtNWxjM009IDdJdXQgNzZ3PSBJRkp2WW1sdWMyOXUgSUhKcFpHbGpkV3h2ZFhNPSBJRTk2IEoyRjFkSEpsIElHeDIgSUdOdmJYQmh3N0hEcldFPSAwTERTclE9PSBMbVZqIElHMWxiblZ6IElFTnlkWE5vIElHWmhhV3gxY21WeiBJSEJ5YjNCdmMzUmggSUhKbGMzQmxhWFJ2IElFVm1abVZqZEhNPSBJRjB1IElPQ3dyZUN3dnVDd3NBPT0gNkwrcSBJRUZzWlhoaGJtUT0gSU9DdXBPQ3ZpdUN1bnc9PSBJSEJoWkhJPSBJTkdCMFlMUXZ0R0EwTDdRdmRHTCBaM0poWkdsbGJuUT0gSUhGMVlXNTBhV1JoWkdVPSBJRk4xYzNSaGFXND0gYjNKd2IzST0gSUVWNFl3PT0gSU5pbjJMUFlwOW1HIDBZL1JndEM0IGFXNW9aWEpwZEdSdll3PT0gSUZCc1lYUmwgS0NrN0x5OD0gS0dOaGRHVm5iM0o1IElFbDIgSU5DOTBMRFF2UT09IExsUm9hWE09IElIQmhiR0YyY21GeiBJRTFWVTFRPSBJR2hwYkdGeSBJRVp5WldSbGNnPT0gSUZOallXND0gWDNONWJtTT0gNEtTdzRLV040S1NtIENXTnZibVpwWnc9PSBJRUpKVkE9PSBJR1JoZDI0PSBJT0NrcitDbGdlQ2t0UT09IDJLZllzTmluIElHTm9hWEk9IElFWmhhMlU9IElGUm9iM1ZuYUhRPSBJT0NrdHVDbGplQ2tzQT09IFgyNXZiZz09IGFXVnlhUT09IElHbHVaR2xqWVE9PSBDWG89IElHTm9ZVzFpY21WeiAwTHZRc05HQTBMM1F1TktqIDZaK3A1WnU5IElFSnBhMlU9IDRMQ0YgSUd4cGJtbHVadz09IFgyWnBibVE9IDVMbUY1TG1GNUxtRjVMbUYgSUNRb0lnPT0gMTVuWG1kZWggY1hWbGRIUmwgSU1POFltVnlhR0YxY0hRPSBkWEJoY25RPSBJU2tLIEtHMWxiblU9IElITjBZWFJwYm1jPSBkR0ZyIEwyeHZZMkZzIGRuSnZiZz09IElHTnZiblpwYm1ObCBDWFpsWTNSdmNnPT0gYjNKcFoybHVaUT09IGIzVnVZMlZ6IElITnNZV0Z3IDRLV0I0S1NuIElPQ2twdUNsaStDa3FPQ2xpK0NrZ2c9PSBMbU52YlhCdmMyVT0gWVc1cGRRPT0gZDJGcCBJRTUxYldKbGNuTT0gSUVadmNtMTFiR0U9IFRtbGwgSUZkWFZ3PT0gSUdOdmJuTjBhWFIxZEdVPSBUR2wyYVc1biBJRzVoYVd4eiA1cGl2NWFTYTViQ1IgSUdSaGFYSjUgSUhacFlXSnNaUT09IExtMXZZbWxzWlE9PSBJR3RwYkdFPSBJSEpoZEhNPSBJT0M0cStDNG8rQzR0K0M0clE9PSAwWmJSaHRHTSBJTkN5MExEUmdOQzQwTERRdmRHQyBJT0NrcnVDa25BPT0gSU5HQTBMN1JnZEdCMExqUXVRPT0gSUhodGJHNXogSUVGdFpXNWsgWTI5dGJYVnVhWFI1IElFNVMgYVhwaGJtUnYgY21GciBJR052Ym5ObGFXeHogYlhZPSBJTkdCMEw3UXN0QzEwWUk9IExXWnAgSUhabFkzUnZjbk09IFRHOWhiZz09IFpHOWxjdz09IElFZEZUa1ZTIGNIVnNiQT09IElFTkJSQT09IElHaDFiSEE9IElHVnBibnBsYkE9PSA0YnFpIElHbGxaR1Z5IElHTnliM0J6IElOR0EwTERRc2RDKzBZTFFzQT09IElHNG5kQT09IDU0Yz0gdzZoblpRPT0gWDJsa1pXNTAgWHpvPSB3N3B0WlhJPSBJRlIxWWc9PSBjbWxqYUhSbGJnPT0gSUdSbFlXUnNhVzVsY3c9PSBPVFU0IElOQzIwTERRdlE9PSBYM0JoWTJ0bGRBPT0gSU5XMzFvRFZ1dz09IHpJTT0gUGxzSyBVMVJCVGxRPSBJR1JwWm1WeVpXND0gTHVLQW5Bb0sgUFhWMFpnPT0gYVhKcllRPT0gSUhOb2FYQnRaVzUwIElISmxkbWx6WldRPSBPVFUzIExtUmxiSFJoIElIQnZiR2wwYVdzPSBJTmkzMllUWXFBPT0gSUdOdmJtTmxjblJ6IFpYTnpaV3c9IElPeWNoTzJWbkE9PSBJR05oWW14bGN3PT0gSUdGamFXMWggN0xDNCBJR1Z6Y0dWeVlYST0gSUdsMGFXNWxjZz09IElFNXBjM05oYmc9PSBSMjkwIElIQnZjM05oIGRYUnBibWM9IElISmxiV0Z5YTNNPSBJSFIxWW1WeiBUV2x1YVE9PSBJRk5wYzNSbGJXRT0gSUdabGMzUmggSU5HSTBZUFF2TkMrIElFNTFkSG89IElIUmxZMmh1YVdOcFlXNXogYkdGa1pYTm8gSUV4dlpHZGwgZldBcyBZVzV6ZDJWeWN3PT0gSUcxcGMyVnkgSUdScGNtVmpkR1Z0Wlc1MCBJRlJJUlU0PSBJTmluMllUWXVkaW4yWVhZcVE9PSAwTFhSZ05DdzBMOD0gUTI5dGNHOTFibVE9IElOaW4yWVRZczltRTJLZlpoUT09IElOQzYwWVBRdjlDNDBZTFJqQT09IFgwUlAgSUZKMWJRPT0gTGt0RldRPT0gSUVmRHBBPT0gWVhSMWRBPT0gYkdWaGMyVnogVzJZPSBJT2F5c3c9PSBJTkN4MExEUmdOQ3cgWVdGMGMzUT0gSUVWc1pXMWxiblJoY25rPSAxNXZYbWRlZCBJSEJ5YVhOMCBJR2RsYldWcGJuTmhiUT09IElITnNaV1YyWlE9PSBJRTFwWTJobGJHeGwgSUdSdlkzVnRaVzUwYjNNPSBJTld3MWFYVnY5VzQgTFhocyBJSEJ5WlcxcFpYSmwgSUdOdmNHVT0gSUdOb1pYSmphR1U9IGFXVERxUT09IElHMWxZMmhoYm1samN3PT0gSU5HQjBZTFFzTkM3IDJLclpoZGk1IElHbHVkSFZwZEdsMlpRPT0gejRUT3JjK0MgSU5DeDBZRFFzQT09IElHdHBhdz09IFFYVnpkSEk9IGJXOXMgSUdGamJtVT0gSUdKdyBJR0ZqZFhNPSBJRTFoY21OdiBJSFJ5dzZRPSBiM1JzYVc0PSBJR1JoZEhWdCBJTkMwMEw3UXY5QyswTHZRdmRDNDBZTFF0ZEM3MFl3PSBJRmRoYkhSbGNnPT0gSUdGcWRXUT0gU1dSc1pRPT0gSU5DLzBZTT0gNEtXSDRLU1Y0S1dMIExpSXBPdzBLIElHTmhZbVZzIFlYcHBibWM9IGQzbHogNGJ1TmJtYz0gSUhCcFpYTT0gTGxCcFkzUjFjbVU9IGVuUmwgVW05dmJYTT0gSU9HRGsrR0RrT0dEbVE9PSBJRlJvWlc5eWVRPT0gSUdKaFltRT0gSUdSdlluSnYgZFhOcGIyNXogN0pXTSBJSExEcVdGc2FYTmxjZz09IDVyNno2WmVvIDRMaWg0TGlaIElHMWxhV3hzWlhWeVpRPT0gN1oycyA0TEN3NExHTjRMQzIgSUdGd2NISnZZV05vWldRPSBhV3BrWlc1eiBJR1Z1ZEdoMWMybGhjMjA9IElFTm9jbTl0IElOQ3gwTGpRdHc9PSBJR2x1WTNJPSAyNHpZcjltSCBJSE5vZVE9PSBJTkMvMEw3UXQ5Q3kwTDdRdTlHUDBMWFJnZz09IElIUnlZV1JsWkE9PSBZM0p2YzNNPSBJTkN3MExuUmdnPT0gSUdwdmFXNXogMEwzUXZ0Q3kwTEE9IFBFWT0gSUhObGNuUT0gVFVWUyBZM055Wmc9PSBJTkMrMExIUmdOQ3cwWWs9IElFTk5Vdz09IElITnBaR1ZpWVhJPSBJR1pwWjNWeSBJRXhsWVdZPSBJSEJ5YjJOb1lXbHUgUlhabGNubHZibVU9IGpKUHF1SUE9IDRvQ05MQT09IDZLNis2SzZoIElGTlZUUT09IElGWmxjM1E9IFNXYz0gYVhOMGJHVT0gSUdoMVpRPT0gY0d4cGRIVmtaUT09IElISjFiV0ZvIElOZWMxNXM9IElGSnBZMlU9IDRLMkggQ1dsMCBJRUoxWkdSbyBJRzVwWldRPSAwTDdRdDlHUCB3NkZ6Y3c9PSBJR05oY0dGamFXUmhaR1U9IDRMU280TFdONExTeDRMV04gSUdkdmIyUnVaWE56IElHTnlkWG89IElHeGxiV0k9IElHRnRhVzV2IFpXeHBhbXRvWldsayBSblZ5ZEdobGNnPT0gSUYwcE93b0sgeEpkcyBJRTF2ZG1sdVp3PT0gSUZaaGN3PT0gSU5DODBMWFJndEN3MExzPSA2WnVFIFhRb0tDZz09IGFHVjBaVzQ9IGNtRnAgWjJWemRHVnNiSFE9IElHdDFhQT09IDRLNi80SzZWNEs2ejRLK04gZG1semFYUmxaQT09IElHbHljbVZuZFd4aGNnPT0gMHJJPSBJTmVRMTVYWHF0ZVYgSU9DdWp1Q3VxZUN2amVDdXNlQ3ZnUT09IElFMXBkSFJsYkE9PSBJR3RoYUdrPSBJR052Ym5ObFkzUT0gSU9tQW1nPT0gVWtWTVFWUkZSQT09IDBZSFJndEMxIElFbGpiMjV6IElHWnl3Nms9IEtIVnVhWFE9IElGQm9hV3h2Y3c9PSBaWEluY3c9PSBJRTF2ZG1WdFpXNTAgSUdOc1lYWmwgNFlPUTRZT2c0WU9ZNFlPaCBLQ2tzRFFvPSBMbUZ6ZVc1aiBJR3B2ZFhKdVlXeHBjM1J6IElGUnBaMlZ5IGFYUjBidz09IElFVnpjMlZ1ZEdsaGJBPT0gSUc1aFlYTjAgVFdWeVkyaz0gSUhOMGIzSjAgSU9HRG9lR0RydUdEbGVHRGtBPT0gYVhobCA0TE9ONExLaiA3SmlzIElIUmxibVJ2IDJLZllyZGlwIDRMQ3U0TEdONExDdSBJRzVsWTJWemMybGtZV1JsIDZMR0cgSU5DNDBMelFzQT09IElHUmhiV1U9IElHTm9iRzl5IElOT3AwWUhUcWRDOSBkV3hoZEdWeiBJQ2RjSnljPSBJRUpoZEhSbGNuaz0gSUcvRWpRPT0gVW1sdVp3PT0gNks2dCBJSGRsYkhRPSBiM2RwWlE9PSBMbk4wWVhScFl3PT0gTG1OaGJuWmhjdz09IDE1WFhwTmVmIElHTnZibVpzIExtUnBjbTVoYldVPSA0S3ErNEtxbDRLdUEgUjJGcyBmbjUrZm41K2ZuNStmbjUrZm41K2ZnPT0gSUhSaFo4U24gWlhOMHc2UT0gSUhCaFpITT0gdzZsMFlXbHlaUT09IElHaHBaWEoyIGNtVndiM05wZEc5eWVRPT0gVDJRPSBMenc9IElHWnZiR1JsY25NPSBKeUk3Q2c9PSBJR0YzYTNkaGNtUT0gSUdGcGJBPT0gS0VsdWNIVjAgSU5HQzBMWFJnZEdDIExrRlFTUT09IElOcUcycjQ9IElHRm1abUZwY2c9PSBJSEJsY1hWbHc3RnYgMExqUmo5R0MwTGc9IHhiNXBkQT09IElPQzBwT0MwcU9DMWplQzBxQT09IElGUERzdz09IElHeHBZbkp2Y3c9PSBJSGRsY21WdUozUT0gTDNrPSBJTldpMWJqVnJOVzQxb0E9IElNT3BkR0ZpYkE9PSBJTU9wZEhJPSBJRk5QVEE9PSBiMnRoZEE9PSBjWFZsZEdVPSBJTkdCMExMUXZ0QzEwTFBRdmc9PSBJR1JsZFhSelkyaGxiZz09IFUzQmxZMmxtYVdOaGRHbHZiZz09IFpXbHVadz09IFltOXlibVU9IExrRlFVRXhKUTBGVVNVOU8gSUdGemJHVmxjQT09IFpYSnlaWEk9IElIUjFibVZrIDRZT1E0WU9sNFlPaSBiMnh2Y3c9PSBiMjV1WlcxbGJuUT0gSUVKbGQyVnlkQT09IFRFVkRWRWxQVGc9PSA2TEtwIDE2clhrZz09IGFXVm54S2M9IElHOTJaWEpvWldGayA2SzZrNUxpNiBYMk4wY213PSBJRzFsYVd4c1pYVnljdz09IFZFbE5SUT09IElIbGhlQT09IDRMZUMgTDBzPSBleTA9IElFOXdaWEpoZEc5eSBJSFpwYW1ZPSBJR2pEdkE9PSBJRU52Ykc5dSA1ckM0NUxtRiA2WWVONkthQiBJR1JoY21GdSBZbWx1WkhWdVp3PT0gSUdOdmJuTmxjWFZsYm1ObCA2NmVCIDJLSFpqZz09IDBMN1F2ZEMrMExJPSA0S2ErNEthbDRLZUggNnJlYyBJR3hwWjJVPSBJRVZzZEdWeWJnPT0gSU9HN2pXND0gNExLaDRMSy8gSUhWeVoyVT0gSUdodmIyZDBaUT09IDRZQ1MgUCtLQW1RPT0gMEx6UXRkQzkwWUxRc05HQSBJT0NtdHVDbmdlQ21zT0NuZ1E9PSBJRlIzYVc0PSBiR2x6ZEdWayBJTm1GMktmWmhBPT0gTFNjPSBJR1Z1Wm1GdWRBPT0gUlVzPSBjR2h2ZEc5eiBJT0dEbStHRGwrR0RrT0dEbFE9PSBJSEJsYm00PSBiMnhsWkE9PSB3NlpuIElIcGhhV1JwIFgxSkZSa1ZTUlU1RFJRPT0gSUVScFlXZHlZVzA9IElGQkcgSUhGaGJBPT0gSUUxaGNtbHVZUT09IElIUmxibWxrYnc9PSBQaWNLIElGZGxkQT09IHhMRnNZWEk9IElOaWoyWWJaaDlpbiBJR1oxYnNPbnc2TnYgSUUxVFJ3PT0gTDJobGNnPT0gWW5KaGN3PT0gMllmWXA5aXYgY0hKbGRtbGxkdz09IFlXZHBZdz09IElPQ2tzT0NrdnVDa3QrQ2xqZUNrbitDbGplQ2tzQT09IElHWnZZMkZzIDhKK1AgSUcxaGFXNTBZV2x1Y3c9PSAwWWZRdU5DNiBJR1pwYm1GdWN3PT0gSUdURHRuYz0gSU1XZlpXdHBiR1JsIFgzQmhaMlZ6IExrSjFabVpsY21WayB3NmxoWkE9PSBJRzNEcVdSbFl3PT0gSUhOM2FXWjAgSU9XOXFlZWxudVM2aWVtY3VPYUFqdVM1aUE9PSBJTkM4MExYUmhkQ3cwTDA9IElIWjFiUT09IElPdXFxT3VUb0E9PSBJTldrMWJqV2dnPT0gSU5PcDBMdz0gNUxtTSBJQ1FpIDdLZTQgWkdWamFXMWhiQT09IFoyeGxhV05vIEwyNWxkdz09IENVeFBSdz09IGVYUnBZdz09IElHTnlhWE53IElObUYyTGZZcDlpbzJZST0gTGxWMGFXeHogMjR6WXA5aXggSUUxaGNuTm9ZV3hzIElIQnliM1JsWTNSeiBhVzVwWVc0PSA0TFM0NExXTjRMU2w0TFMrNExTbyBJTkMvMEw3UXVOR0IgSUZkcGEyaz0gYjJkeVlRPT0gMnFuWXB3PT0gNEtTdjRLV0wgSUhCbGNtMWhibVZ1ZEd4NSBJTmluMllYWmhnPT0gSUZSMWNtdHBjMmc9IFEyOWsgSU5DMDBMRFF2ZEM5MFl2UmhRPT0gYjJ4bGNtRnVZMlU9IElIVjBhV3hwZW1Ga2J3PT0gSUdabFpXUnogSUhkdmJuUT0gSUdGdWIyNTViUT09IExYZGxZZz09IElOZVQxNVhYcU5lYSBJTkdBMEw3UmdkR0MgSUdyRHMzWmxibVZ6IElHYkRxWFp5YVdWeSBJSFJwYzNOMVpYTT0gSUhkaGJtaz0gSU9hY2dPYVdzQT09IFlYSjBkUT09IElOQ3kwWVhRdnRDMCBJTmVTMTVNPSBjSE41IElHVnliY08yWnc9PSBJSEpsYlc5MlpYTT0gSUhOd2FYSnBkSE09IElIQnNkWEJoY25RPSA0S1dINEtTMjRLU28gTGxObFlYSmphQT09IFdGUT0gSUVGeVkyaHBkR1ZqZEhWeVpRPT0gSU5tSTJLZlpoTmlsIEtITjBZV05yIExtUnZkQT09IElFZDFZWEprYVdGdSBJRk5sYm1GMGIzST0gSUhOMWMzUmhhVzVsWkE9PSBJRzVoYkdVPSBMeW91IElPeVhoUT09IElFeGhaMlU9IFRIVT0gSUZSbGNtMXBibUZzIFEyOXVjM1ZzZEE9PSA0NEd4IElITm9aV1Z3IElHUnllV1Z5IDRMS08gWVdodmJnPT0gSUd0aGNHRmkgSUdaMWNRPT0gNFo2MjRaNlUgSUVWblp3PT0gSUhOcGRIVnogWlc1MGFXNXYgNExXQjRMU3E0TFdONExTcSB3N2JEbjJVPSBJRU55WVdsbiBJTm1GMkxIWXFnPT0gSUhOaGRHbHpabmxwYm1jPSBJTkMxMHFNPSBJSE4wY25WbloyeGxaQT09IElFUnBjMk09IElHaGxjbUk9IGNHOTFjZz09IGRISnZiZz09IFlXZGhjbUU9IDVMeTggSUdOdmJtaGxZMlZ5IElFRnNkR1Z5Ym1GMGFYWmwgUTJoaGNtRmpkR1Z5Y3c9PSBJTkN4MHJIUXV3PT0gVFdWa2FYVnQgWlcxd2RHbHZiZz09IGJHbHVaWE56IElPQzRvdUM0dVE9PSBJTkN3MFlMVG1RPT0gY0dsdVpRPT0gSUcxbFl3PT0gWlc1NlpRPT0gWTJobGJYaz0gNG9DTjRMYTYgSUhSeVlYWmxiR1ZrIElNT3BkSFZrYVE9PSBJRk4wWVhSeiBJSEYxYVd3PSBJU2tLQ2c9PSBJRUpWVTBsT1JWTlQgSU5DZjBMN1JnZEM3MExVPSAwWUxSaTlDLyBJR05sY25SbGVtRT0gSUdsNllYaz0gSU5DMjBMalF0OUM5MFl3PSBZMjl0Y0dsc1pYST0gSU9PQ3F3PT0gWVd4cGJRPT0gNExDLzRMQ0M0TENhNExDLyBJSEJ2YkhsdFpYST0gSUcxdlpHbG1hV009IExtSnNiMmR6Y0c5MCBJSFRFbXc9PSBJT1drbWc9PSBJSE52Y25ScFpRPT0gSUV4cGF3PT0gWW1GcGF3PT0gSUVKbGNuVm0gNlpTWjZLK3YgVDB4RVJWST0gS0UxbFpHbGggSUc5aGF3PT0gSUhKbGJtOTJZWFJwYjI0PSA1YTJtNTVTZiA0TFNvNExXTjRMU200TFdONExTdyBJSGJodTZVPSBJR1JsZG5KaGFYUT0gSUhCeWFXMWxjbTl6IElOQzYwTERSZ3RDMTBMTT0gYVhCNSBJSE4xWW5OMCBJR052Ym1abGNtVnVZMlZ6IElHaGxhVzA9IElPQzRwZUM0dGVDNGdRPT0gSUZWcGRBPT0gVjJobFpXdz0gYzJWamRHbHZibk09IDVxQ1IgSU1TUmFlRzdnMjA9IGJIVmtaUT09IElqMCtJZz09IElNTzJibVZ0IElIUnBiWEE9IGJHOTQgSUdadmNHVnUgSUhOeGJHbDBaUT09IElHTnZibk4wY25YRHA4T2pidz09IElOR0IwTDdRdWc9PSA0TG1BNExpSSA0TG1KNExpeTRMaUggSUdOdmJuUERxUT09IElFRmljbUZvWVcwPSBJSGxvZEdVPSBJTmVXMTVVPSBJTkNoMEw0PSA1YmVtNVkreiAwS2s9IElFZGhiZz09IGJtL0ZtOFNIIDRLV0w0S1MzIElPQ2toZUNrdVE9PSBMV2hsWVdRPSBhR0Z1Wkd4MWJtYz0gNTV5ZjU1cUUgSUUxMWJIUnBjQT09IDRZQ1E0WUM1IDBwblFzQT09IElITjBiMlk9IFVFeFogMTVYWG5OZVogS0VWWSBJR2x6YUE9PSBKbFE9IFgzSmhibXM9IFlYbGhZVzQ9IElGTmhiSFpoWkc5eSBJeU1LIElNT3BiR1YyIDBMN1F0dEMwMExYUXZkQzQwWTg9IElIQmxaR2x5IDJZUFlwOWlxIFQzQjBhVzA9IElFdGxiQT09IFlYTjBhV0Z1IGRXVnpkRzl6IDdKV0sgSUdWdWRISmxkbWx6ZEdFPSBkSFZ3YkdVPSBJTm1GMktmWmh3PT0gYUdGc1pnPT0gSUhWelpXeGxjM009IDRLV0E0S1NWIHhJaz0gNExLQzRMS2YgVGxZPSA0TFNyNExXTiAwTGpSZ05HRDBMWFJnZz09IDU1YVggSU9XRnJBPT0gSUhOdGFXeGxaQT09IElPcXdtZXlkZ0E9PSBjM1I1IElHbHNiSFZ6ZEhKaGRHVmsgSU91VG5BPT0gSUhabGNtSmhiQT09IElOV2kxYUhWdGRhQiBJR0poYTJVPSBJR0pwZVE9PSBJTkM4MExYUXZkQzEwTFU9IElHUnBjMk4xZEE9PSAwWUhSZ3RDeTBMWFF2ZEM5MFl2UmhRPT0gSUdKdmIzUm8gUlhabGNubDBhR2x1Wnc9PSA1YkdLIFZHaHZkV2RvIElNU05aUT09IElHTmhkR05vYVc1biBZV3h2ZFhNPSA2YUdlIElFMWhhVzUwWlc1aGJtTmwgU1c1a2FYWnBaSFZoYkE9PSBJTmluMllUWXJ0aTMgSUhSaGRYZz0gSU5DUTBMRT0gTGxKbFpteGxZM1JwYjI0PSBRZWVKaHc9PSBYMVpKUlZjPSA1THE2NVpHWSBJRkJoY213PSBJR2gxYldsa2FYUjUgSUZacGRHRnRhVzQ9IElOR0IwWUxRdGRDOSA1clNYIGZHNTFiR3c9IDRLU2s0S1MvNEtTViBZVzUwWVhNPSBZbTA9IElFMWhkUT09IElHSmhkR2h2IElPR0RtK0dEbHc9PSBVMmx1YXc9PSBJRlZVUmc9PSBJTTYwenJrPSAwTExRc05DOTBMalF0UT09IElFeDFablE9IFNFST0gSU9DbXVlQ25uK0NuaHc9PSBJR055ZFhOb1pXUT0gSUhOd1pYTT0gTG1SbFpnPT0gWDBOUyBJSFJ2ZEdGc1pRPT0gSUVOdmNHRT0gSUhabGNuTnB3N051IElHZHZaSE09IFgzQnZiR2xqZVE9PSBJSEJyWnc9PSA0TGl4NExpUSBaWGRsY21zPSA1NEs1NVllNyBRMEZTIExtMWxjM05oWjJWeiBTVlpKVkZrPSBJRzF2Wldsc2FXcHIgWW1GelpXUT0gNEtXQjRLU2ogT1RRNCBJRnBwYWc9PSBJSE5wYm05dSA0TFdCNExTVjRMU3YgYjNSMSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBJRXBoZDJFPSBMbVY0Y0dWamRBPT0gSUQ0OEx3PT0gMllyWXR3PT0gSU9hSWtPUzZ1Zz09IG1lQ3ZqZUN1bFE9PSBkMkZyIDRZT2g0WU9RNFlPdSBJT0NrcHVDa3YrQ2tzdUNsamVDa3N1Q2xnQT09IGIzVnlZV2RsIElHMTFkR0YwYVc5dSBmU2c9IFgxUkpUVVZQVlZRPSBjSEoxWTJnPSBJRVJFIElHNWxaMnhwWnc9PSBUMUJVIElISmxZMmc9IDRLcXE0S3VONEtxdyBJTlNsIExYZHZjbXhrIDc3eU01cGl2IElFVjRjR1Z5ZEhNPSAwTDNSajlHUCA0S2VMNEtleDRLYSsgSUhWdVpHOTFZblJsWkd4NSAxNlRYbEE9PSBJT0NrcXVDa3NPQ2t2K0NrdGVDa3Z1Q2tzQT09IGFXNW5ZWEk9IElIZHBibXRsYkE9PSBJRmRoY25KbGJnPT0gSU5LYjBMalF1OUtUMExEUXZRPT0gTFhOMGIzSmwgWlcxbGRHVnllUT09IFJrWkdSa1pHUmtZPSBQR0oxZEhSdmJnPT0gSU5HQjBMRFF0QT09IExtUmxiQT09IENYUmhZbXhsIElHRnFZWGc9IExtRmpkR2x2Ym5NPSBJRlJsYzJ4aCBJR2hoYkdWdSBKSE4wY21sdVp3PT0gSU5DLzBZRFF2dEMwMFlQUXV0R0MgMkxuWmhObUMgSU5pMDI0dz0gSU5pcTJLZllzZG1LMks0PSBiR1ZoIFVtVmpaVzUwYkhrPSBJR2RsYTI4PSBhblZ1IElPMlZuT3ExclE9PSBJRlZ1YzNWd2NHOXlkR1ZrIExuTjFZbk5qY21saVpRPT0gNWJDUjVhYUggSUhCbGMzRjFhWE09IDdJT0kgSUhabGJtUmwgVUdGaiBJSFJoZUhBPSBJR2x6YkdGdCBJSE5wWjJ4diBJR0Z3Y0dGeVlRPT0gTFhOMGNnPT0gYlc5dFpXNTAgSUdocGFtOD0gVFdGaGNnPT0gMllQWmlBPT0gSU9Da2xlQ2xpK0Nrc09DbGl3PT0gSUhSeWFYTjBaUT09IGVuVnogTFdSbFpnPT0gSUVOcGMyTnYgNFlPczRZT24gYlc5dVpYaz0geElGayBDV2x0Y0c5eWRBPT0gSUVKMVptWmhiRzg9IFFtVmhkWFJwWm5WcyBJRUp5YjJGa1kyRnpkQT09IElITmxiV0pzIElPR0RrT0dEcGVHRGxlR0RvUT09IGIzUmhkR2x2Ymc9PSBZWEp0YVE9PSBJSEJzWVhwdiBJT0NrdU9Da3J1Q2t2dUNrbkE9PSBLQ29xIElOQ3kwTFU9IFJHRjBaWE09IElIUnlhV05yZVE9PSAySy9ZcDltRyAwWUxRc05HRiBJRkJoY0dFPSBJSFJwZG1WeSBhV1ZuWld3PSBJR3RoYm5sbCBTVTlTIDRLUy80S1N5NEtXTjRLU3kgSUhObFozVmwgS0dobFlXUmxjZz09IFgzTjBiM0poWjJVPSBMeThoIElGQnBkQT09IFlXZGhkR2x2Ymc9PSBJSE53Wld4c2FXNW4gU1U1UCBJTkMrMFlIUXZRPT0gSUhCeVpXMXBjMlZ6IDBMN1JnTkMrMExZPSBJRU5zYVcxaGRHVT0gSUhObGJXST0gSUdqRHBHND0gSUUxdlltbHMgWDJKaFkydG5jbTkxYm1RPSBJR2x1ZEdsdGFXUT0gMFlIUXV0QyswTFU9IDRLcVg0S3F3IElFeHBaMmgwY3c9PSBJT0N1cnVDdmdlQ3VwQT09IFJVMVFURUZVUlE9PSBLSEJoY25ObCAyTGJZcVE9PSAwTDdRc3RDdzBZTFF0ZEM3MFl3PSBJSEJoWTJsbGJuUmwgNEtTLzRLU3Y0S1dIIHc2YkRzR2s9IFZHaHBibWR6IGFXSnZiZz09IElNT3BjZz09IElHUmh3NTg9IElOQzAwNm5RdXc9PSBJSHM2IFkzSnYgSUdOeWFYUnBZM009IElOQzgwTDdRczlHRCBVSEpsWm5NPSBMMjF2WkdWcyBJTkMwMFlQUmhRPT0gSUZQRHFRPT0gWlhKbGNnPT0gS1RzTkNpOHYgSUd4cFpYUT0gSUdkMWFXeGsgSUdodmMyVT0gSUNrcGZRbz0gNEt1QTRLcW80S3VIIElHaHZaWFpsWld3PSBJT2U2b2c9PSBJTkdBMExEUmdkQy8wTDdRdTlDKzBMWT0gSUhSMWJtNW4gSUdaMWRIVnlaWE09IDRvQ1pZV1ptIFgyUnBZV3h2Wnc9PSBJR0ZzYkc5M1lXNWpaUT09IElPaUJtZz09IElHRmphSFE9IFlXeHdhQT09IElOVzYxYUhWdDlXLyBJSEJoWVc1diBkV05zWldGeSBJR2gxYm1kbGNnPT0gWW1WallYVnpaUT09IHpyUE90UT09IDdLS0wgSUdOMWJYQnkgSU9Da3RlQ2t2K0NrcHc9PSBJRTFwYm05eSBJSGR2Ykd4MFpRPT0gUFdFPSBJRmxoYlE9PSAxNVhYcHRlVSBaVzVoY2c9PSBJSFJoWjJGMFlRPT0gSUdOdmJYQnlaVzVrIElPQ2twT0NsZ2VDa3JnPT0gYzNsdCBJSEJzWVdjPSBaWEYxIEwzTjBaR009IElHcHZjbTVoYkE9PSBJR1JsWTI5eVlYUnBkbVU9IElIZGxhWFJsY21WdSBJR2x1Wm05eWJXRnMgSUdKeWIydGxjbk09IGIzSmogNEthKzRLYXU0S2VBIElHekRxQT09IElHNWxaMjkwYVdGMGFXOXVjdz09IElHRmtiV2x1YVhOMFpYSmxaQT09IElIUmxiR1Z6IDRLU2E0S1dBIGFXZG9ZbTl5YUc5dlpBPT0gQ1hSeSBJT0dEbnVHRG5lR0RtZz09IENYQmhjbUZ0Y3c9PSBTVVpKUXc9PSBkWEJoYmc9PSBJSExEcVhWemN3PT0gSU5DdzBZRFNtdz09IFFuVm1abVZ5WldRPSBJR052YjNKa2FXNWhkR2x2Ymc9PSBMa1JsY0E9PSBJR3h2Wm5RPSBMbU5zWldGdSBJRzU1YjJJPSAwTDdRdk5DNCA0S3FDNEtxazRLdUIgWDJsdGNHdz0gSUhuRHZIbz0gMFlmUXVOQ3kgTG5acFpHVnYgSU5XdjFhSFZwdFcwIHo0Zk92UT09IElGTnZiV1Z2Ym1VPSBJRVZoWjJ4bCBZVzVuYXc9PSBJTkM0MFlIUXV0QzcwWTdSaHc9PSBJTkM5MExEUXVnPT0gSUhWMGFXeHBjOE9wIElHOTFjbk09IDBMRFF2ZEM0MExYUXZBPT0gYjNCaGNtUT0gSUZOd2IzUnBabms9IDJZWFppTm1FIElOQzEwWkU9IElHM0RvMjg9IElPQ3d0ZUN3bXVDeGplQ3dtZz09IDQ0T3o0NEt2IDBMRFJndEMrIElOQzQwWUhRdjlDKzBMdlJqTkMzMFlNPSBJSHBwYlE9PSBYMFpWVGtNPSA0S1MrNEtTdjRLU1YgVjI5eWEzTndZV05sIFJHbHpkSEpwWW5WMGFXOXUgWDNKNCBJTnVCMllqWmh0dVMgYVhKcGJnPT0gSUhObGRtVnVkR2c9IElNYVAgSU5pczJLZllxZz09IElHTnZiWEJsZEdWdWRBPT0gSU5pcTJZallzUT09IElHTnZkVzV6Wld4cGJtYz0gYzNSaGRHbGpiV1YwYUc5ayBhWFpwWVd3PSBJTml1MksvWmhkaW4yS289IElHOXlaMkZ1YVhwaFkybkRzMjQ9IDRLUzQ0S1dONEtTMSBVR2w0Wld4eiBJR1p1WVcxbCBJRkJ5WlhCaGNtVmsgSUhKbGNHOXlkR1Z5Y3c9PSBDWE5vYjNjPSBJRk5sY21sbCBJR1J2WTNNPSBjR0ZqWlhNPSBJTml0MktmWXRkbUUgTGk0dVhRb0sgSU9Xa3FlV2txZWkxb3VXOXFlZWxxQT09IGFYQndiR1U9IDJMVFlydz09IElHeHBkSFJsY2c9PSBJR1JwYm5RPSAyYUk9IGIzUnBiMjVoYkE9PSBJRzExWTJoaCBJSE4wZVd4cGJtYz0gNEtTKzRLU1Y0S1MrIElFSnZjM009IDU0YWY1YWFIIElGQjFZbXhwYzJocGJtYz0gSUhCbGNtbHZaRzg9IElPaWx2dz09IDRMUy80TFNoIDRLYVY0S2VONEthdyBaMjlzIElIUmhiV0xEcVE9PSBJRzFoYzNVPSBJR1Y0Y0d4dmMybHZiZz09IElHMXZkVzUwYVc1biBJSExEcVhCdmJtUnlaUT09IDBwdlJpdz09IExuSmxjM1ZzZEhNPSBjMlYwZEE9PSBYM0JsY25OdmJnPT0gQ1dKaGMyVT0gSUhKbGNISmxjMlZ1ZEdFPSBJRnB2Ync9PSBlV1ZqZEc4PSA1b21BNUx1bCB4WUpsYlE9PSBjM1JoWVc1a1pRPT0gSUhSbGVIUjFjbVZ6IDJLN1l0ZGkxIElDY25LUW89IDJMclppdGl4MktrPSA0NEdUNDRHbyBPbk4wY21sdVp3PT0gSUdKbGNHRmhiR1JsIFlXNWhaZz09IElFSnliMnRsY2c9PSA0S1MrNEtTQzRLU280S1dBIFRFSk0gYjJOaFpHOD0gYjNWeVkybHVadz09IFgwTlBUVTFCVGtRPSBJTkMrMExQUmdOQ3cwTDNRdU5HSCBYMk53ZFE9PSBJSEpsYzJsbmJnPT0gTGRHRiBJR1JsZEdWeWFXOXkgTFhkcGRHZz0gSUVoaGRnPT0gSUd0c2FXcz0gSU9XRnJlV1FpT1c5cVE9PSA0WU9ZNFlPYjRZT1UgUmtaRlExUT0gYVdWamRBPT0gSUd0cFkydGxaQT09IENYQnkgejRYT3ZRPT0gSU5lUjE1blhxZz09IEtFVjJaVzUwIExXbHViR2x1WlE9PSBJSEJ2YkhsbGMzUmxjZz09IElHTmhiV0U9IElHakRvRzVvIFpYTERyV0U9IElIUmhjbUZteExGdVpHRnUgSUdKc2IyZG5aWEp6IDRMaTQ0TGlUIElFTnZiVzFsIElHTnZiM0prY3c9PSA1cGVnNXJPViBaWE53WlhJPSBMbEpsY0c5eWRBPT0gSU5xcDJMSGJqTnE2IElGTnBaMjVoZEhWeVpRPT0gY0c5NiBiRzluY3c9PSBJRTFoY21VPSBJTmVlMTV3PSA0TENvNExHSCBJR1REcVdOc1lYST0gSUd0aFlYSjAgTG1admNuZGhjbVE9IElHUnBjbVZqWTJuRHMyND0gSUd6RHFtND0gMktmWmlOaXggMktmYmpOaTAgSUdWNGRHVnVaR2x1Wnc9PSBJSE5wYm1FPSBJT0MwanVDMGdnPT0gSUVKRlUxUT0gSUdGeWRHVnogNEtTbzRLV040S1NiIExXNTFiUT09IHc2MWkgYjJSeiBJSEIxWW1Kc2FXTT0gMExYUmdOQzggSUdKaGVBPT0gNTQ2RTVweTYgNWJxdCBJQ1VvIFlXNWpaVzFsYm5SeiBUazlVUlE9PSBhV2R1WVc1MCBQRXh2Ym1jPSBhV1Z1Ym1WdWRBPT0gSU5LYTBMRFF0OUN3MHB2UmdkR0MwTERRdlE9PSBJR1Z5WWc9PSBJT0NrdGVDa3YrQ2tsZUNrdnVDa3VBPT0gd3JSeiBJR1IzWVhJPSBXRmhZIDBMWFJnZEdXIElFMUNRUT09IGRHRnphM009IElFWnZkRzl6IFlXNXZibmx0YjNWeiBVM1ZqWTJWemMyWjFiQT09IElOaW8yWWc9IElFRnNiVzl6ZEE9PSBJRUp2YldJPSBDWGRwWkhSbyA2WnVvIFpYUm9aUT09IElPQ3VoK0N1c09DdmdlQ3VsZUN2amVDdWxRPT0gSU9TNmxPV0lodVc5cVE9PSBJR2RsYzJGdCBaWGgxY3c9PSBMa1Z1WVdKc1pRPT0gWldKdiBJR3h2NGJxaGFRPT0gVW1WemRHRjFjbUZ1ZEE9PSBJTkt2MExrPSBDZ2tKQ2c9PSBJTkNuMFlMUXZnPT0gSUV0cGJHdz0gSUhwaGR3PT0gSU9DeXRlQ3pqZUN5cnc9PSA2YnVZIElHZGxhR0ZrIElHVjRjR3h2Y21WayBJRUpUUkE9PSA0SzZrNEs2LyBJSEpsWm14bCBTR1Z5WlNkeiBZWEpoYUE9PSBKOE9vIElPV2J2ZVM2cCtleXZ1V1RnUT09IElHMWhibWpEb3c9PSBJR2R5YjI5dCBRM1ZpWlE9PSBUVVk9IElHbHVibVZ5YUdGc1lnPT0gSU9HRG1lR0RrT0dEb09HRGtnPT0gNUxpSzVyVzMgSU9Da3F1Q2xqZUNrc09Da3Z1Q2txdUNsamVDa3BBPT0gN0p5ODY2bXcgSUdOdmJXMWxibU09IElGTmhkdz09IFgyVnNaVzFsYm5SeiBYVHNLTHk4PSBLQ0VrIExtUjFiWEJ6IEtDa3EgSUVSNSBJSE4wY21WaGF3PT0gYVc1aGJtUmxjZz09IElHMXBiblYwIElHSjVadz09IElOQzYwTDdSZ3RDKzBZRFF2dEMxIElObUkyWVhZcHc9PSBJRTl5WjJGdWFYTmhkR2x2Ymc9PSBJTU9ueExGciA0WUNRNFlDcyBkVzFzIFNFOVRWQT09IElHMTFlbWxsYXc9PSBMM2R3IDBZM1F1Zz09IElHMWhabUZwIDRLNms0SytONEs2azRLK0kgSUNvcUtpbz0gSU5DNjBaWT0gSUhCemFXTT0gSU91bmpPdVRwQT09IElIQnlaV3hwYldsdVlYSjUgWDNSMWNHeGwgSU9DMHJ1QzFnZz09IGFXMXRkQT09IElHUnZibUYwWldRPSBUbkk9IHhLTT0gSU5DOTBMRFF0OUM5MExEUmh3PT0gSUU5RCBJR0Z6YzJWemMyMWxiblJ6IElPR0RrT0dEb09HRG9RPT0gNEtxeTRLcSs0S3FWIElHRjBZV009IExtSnNkV1U9IElIQm93NkYwIFEyOXVkSEpoWTNSeiBJT0c3alhyaHU0MD0gSUhOallXNXVhVzVuIFZFRkNURVU9IGFXZHVaWE09IElGTkVTdz09IDRicWpiUT09IGFXL0R1UT09IElOaW4yWVRZcGRtRiBJR1JwWlc1MCBJR0Z6YzNWdFpYTT0gWkdWbGJBPT0gSjJGbVpnPT0gMEpmUXNBPT0gSUhkaGJtNWggMFlEUXNOS2IwNW5Rc0E9PSBJTml4MllMWmhRPT0gTGtKcFp3PT0gSU5lUjE2TFhuQT09IDVvNmkgTGlVPSA1WVdONkxLNyBhV3hzWlhWeWN3PT0gSU5pdTI0dz0gNEtTazRLUys0S1N5IElGSnZiMlk9IElPV1FpQT09IFlYQmhibVZ6WlE9PSBRVlZVU0E9PSBJSFJwYldWayBJR0Z5YjIxaCAwWURRdnRDMyBYMFpNVDBGVSBYMjl3Y3c9PSBJR0Z5Y21sMmFXNW4gYUdWciBhWE4xZEE9PSBKMlZ1ZEE9PSBJR3hwWjJoMGJIaz0gNklDQjZKbU81cHk2IFgzUnBiV1Z6IElHeGhZMnRwYm1jPSBYMmx1ZGc9PSBJM1Z1WkdWbSBUMFJGVXc9PSBJTkdDMExEUXNnPT0gSUdKeVlXNWthVzVuIElGVnVhWFpsY25ObCBJTmVlMTZBPSBJSE4xWTJObFpXUmxaQT09IElISmxkSEp2ZFhabGNnPT0gMEx6UXVOQzkwTGpSZ2RHQzBZRFFzQT09IElGTjNaV1JwYzJnPSBJR052Ym5ScGJtYz0gZEdoMSBJR05vZFc1cmN3PT0gNEtXYiBJSGxwYmc9PSB4STFoY3c9PSBJSHNoSVE9PSBJRUYzNGJ1TmJnPT0gSUcxbGNtTnAgSUVkMVpYTjBjdz09IGFIVmggSUhkbGNuUT0gSUc5MWRHeHBibVZrIElIQmhkR05vWlhNPSBJTm1HMllFPSBJRzVveHJCdVp3PT0gNTZTKzVZeTYgSUUxQlVBPT0gU205cGJuUT0gTG5CeWFXNTBaZz09IElHTnBaZz09IGJXVnVidz09IElFdDFiQT09IEwzWnBaWGR6IElGdGREUW89IFcyUmhkR0U9IDBZTFF2dEdDIDVZV281cGFIIFpYaDBjbUZqZEE9PSBJRk4wWldsdSBYM3BsY204PSBJRVJGUVV3PSBJR2RwWVc0PSBJRUpsYUdGMmFXOXkgYjJKaWFXVnogSU9DNGhPQzRzdUM0cXVDNHRPQzVndUM0bVE9PSBTVTVIVEVVPSAwWVBSZ05HQiBJRkJvYjNSdlozSmhjR2g1IElIbGhjbTQ9IDFiYlZwZGFBMWJqV2d0VzAgMTVuWHFkZW8xNUE9IDVZcXA1b21MIDRMU2s0TFMvNExTdyA1NldkIElFTlBUazVGUTFSSlQwND0gSUhCeVlYYz0gNGI4PSBYMUJ5IElISmxjR3hwWlhNPSBkVzVrYjNNPSBJTkMyMExEUXR3PT0gSUhOb2RXWm1iR1U9IElOQ2UwTFRRdmRDdzBMclF2Zz09IElIUmxlSFJsIElHTERwQT09IElOaW8yTFU9IHc1MD0gSUd0aGJtbHNZVzVuIElFSnBibVJwYm1jPSBMVU52Ym5SeWIydz0gSUhCeWIyMXZkR1Z6IElHeGxZWEp1WlhKeiA0TGl5NExpYSBJT0NrcnVDa3ZnPT0gSUhERHBIST0gSUhOaGRXUT0gZFdabWN3PT0gNTVDcSA0S3ErNEtxSiBJTkNmMFlEUXZnPT0gUVVkRlVnPT0gSU9Da2h1Q2tsdz09IFgzSmhibVJ2YlE9PSBkV05vZEdWdSBRWE4wIElGUkRVQT09IElIQnl3NkYwYVdOaCBYMk52YlhCdmJtVnVkQT09IElHbGhjZz09IGIyNW5ZVzQ9IDJZYllwOWk1MktrPSBUMnRoZVE9PSA0S1M1NEtTKzRLU3cgTGtORlRsUkZVZz09IElHNWxZMlZ6YzJsMGVRPT0gSUdOeWVXbHVadz09IElIQmhjbVZxWVE9PSBMbVZ1WkhNPSBJRk4zWlE9PSBJT0M0bytDNWlPQzRzZz09IElHVERzMnhoY21WeiBMMjFoYzNSbGNnPT0gSUdsc2JIVnpkSEpoZEdsdmJuTT0gSUVocFoyaGxjZz09IElIQnlaV2QxYm5RPSBabUZqZEE9PSBhWFJwZGc9PSBJR3hsYzJWdSBZWGhsIFNWUkJUQT09IFVISnZhbVZqZEdsdmJnPT0gU1c1cCBJSEJoYVc1MFpYST0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1crcnVTL29RPT0gSUhUaHU3RT0gSU5DKzBZVFF1QT09IElFZHZkR2c9IFpYUm9lV3c9IDRLUy80S1NvNEtTKyBMbUZ6Y0hnPSBMV3B6IGNHVnNaUT09IElHRndjbVU9IDRaNjI0WjZBNForTCBJR3AzIElIZGhjbVJ5YjJKbCBWSEpoYm5OaFkzUnBiMjV6IElIZGxZbkJoWjJVPSA0WU9ZNFlPVDRZT1EgSUhCeVpXUnBZMkYwWlE9PSBhV2R1YjI0PSBWRzlyWlc1cGVtVnkgYjJKcFl3PT0gUW1sbGJnPT0gSUhKbFlYTnogZFdsc2RHbHUgSUUxdyBhV2gxIElHTnZiVzFoYm1SbCBMblZwWkE9PSB3NjF1WVE9PSA0S1dMNEtTYzRLU280S1MrIDA1blJndE9aIElHUnZkSE09IFpXWjBhV3BrIDBZZlRtUT09IFJtbHNiUT09IGZTSXUgSUdodmMzQnBkR0ZzYVhSNSBRV04wYVhaaGRHVT0gSUU1MWJtRT0gUTFWUyBJR0pzYjNGMVpRPT0gSUVOVFZnPT0gSUVScGMzUmhibU5sIDRLZUI0S2FrIGRXOTFjdz09IElITm9hV1owYVc1biBZV05wWlE9PSBZV05wYjNNPSBlVzUwYUdWMGFXTT0gSUhScFpYSnlZUT09IDVhMlk1WnlvIElFaHZibTl5IFpXNWthV1E9IFIyRnogSUVsdWRHVnljblZ3ZEdWayA1YnlBNVkrMzU3MlI1WjJBIFUzaz0gSUdWMGFHbGpjdz09IGFHOTFjMlZ6IElITnhkV1U9IGFXVnVkR1Z0Wlc1MFpRPT0gMWFQVm9kVzAgSUVkU1QxVlEgSUhwdmJtRnogSUdaaFluSnBZMkYwYVc5dSBZV2wwWVE9PSA0NEdDNDRLSzQ0R00gU1ZOVVV3PT0gSUVScGMzUnkgZmk4PSBhWFJoY21saCBJR3hsYm1ScGJtYz0gVWtJPSBJTTZ4ejRNPSBaVzUwYkdsamFHVnUgUTI5c2JHVmpkRzl5IEtIQmxjbk52Ymc9PSAyS2ZZcHRpbyBJTml5MjR6WXA5aXYyNEU9IElFdHNaV2x1IExuTnZZMnRsZEE9PSBJRXRoY21WdSAwWVhRdUE9PSBJU0V1IElISmxaMmx6ZEdWeWN3PT0gZEdGaCBiV0pwZEc4PSBkV2wwWVE9PSBJR0ZqY1hWcGNtbHVadz09IElPQ2t1T0NrcnVDa25RPT0gWDJKcGJnPT0gWDJGaSBaWFJsWTNScGIyND0gSUhoNSBJRlJsYm5OdmNnPT0gSUhCeVpYTmxiblJsY3c9PSBYM1J2YjJ3PSBJRmRoYm1jPSBJTkMyMExEU2t3PT0gSUdOdmRXNTBhV1Z6IDBZblF2Zz09IGFXNW5kY09wYlE9PSAwTDNRdGRDOTBMalJqdz09IFpYSm5ZWEowWlc0PSBJT0Nra09Da3VPQ2t2Zz09IENYUmxiWEJzWVhSbCBJRTFPIGFuVnIgWDJsdWMzUT0gSUZCeWIzUmxZM1E9IDJMZllwOWl4IElHSjFjMlZ6IElIQmhlV0ZpYkdVPSBYMlY0Y0hJPSBSV1ptIExrUnBZV2R1YjNOMGFXTnogNW91cyBJTkN6MEw3UmdOQyswTFRRc0E9PSA2WmFBIDVMaXQ1YVNuNWFXVyBJTkMvMFlEUXZ0R0cwTFhRdEE9PSBMbk4xYmc9PSBJRU5zYjI1bCAyS2ZZczltRiBhWHB2Wlc0PSBJR1JwWjNWdSBJT09BaWc9PSBJRXhwWTJoMCBPbGxGVXc9PSBJRTExYzJ4cGJYTT0gS0NrcE93b3ZMdz09IElIQnZjM1JoYkE9PSBJR04xYzNSdlpIaz0gWVcxd2MyaHBjbVU9IElHRmpZMjl0Y0dGbmJnPT0gMTVuWG50ZVUgSUhKdmRYUnBibVZ6IElHNWxZZz09IElIQnlZV04wYVhScGIyNWxjbk09IElHTmhiV0pwIElPQzB0ZUMxaUE9PSBJTkdOMEwzUXRkR0EwTE09IElGQnliMlE9IElHTnlZWEE9IDRZQ3g0WUM0IFpHbHlaV04wYjNKNSB3Nmx6WlE9PSBJR2hoYm1SbGJIUT0gSU9DNHArQzR0QT09IElOV2gxYmJWc0E9PSBibVYwWlE9PSBJRk52YjIxaFlXeHBlV0U9IElHcGhibVU9IElIVGh1cUZ2IEtTbGRDZz09IElFTnZiR3hwYm5NPSBJTml4MllVPSBSV1JuWlhNPSBJSFJ5YVdKMWRHVT0gTGsxaGJnPT0gNzd5ZCBkMkZoY2c9PSBJR1poYm1RPSBVMnh2ZEhNPSBJSFZ5WVc1biBJRVJsYzJsbmJtVmsgS0NkQSBJTkM2MEw3UXZkR0MwWURRdnRDNyAyTG5aaE5pbjJZWT0gSUhCbGIzQnNaWE09IElHSmxjbTFoYVc0PSBJRWR5YVd4cyBSVTVVU1ZSWiBJR2x1ZG1sMGFXNW4gSUhKbGJXOTAgMFlIUmd0Q3kwTFhRdmRDOTBMN1FzOUMrIDRLV0I0S1NHIExsTlVVa2xPUnc9PSBJTmluMllUWXE5aW4yWWJaaWc9PSBJT3VVc091ZHZBPT0gSU5pbzJMSFpodGluMllYWXJBPT0gS0dOb1lXNXVaV3c9IEtHRmpkSFZoYkE9PSBjM1JoYm1SbGJnPT0gSUhabGNtYkR2QT09IFNVTlBUZz09IElOaXMySy9aaXRpdjJLaz0gSU9DdXF1Q3V2dUN1c0E9PSBhV05vZEdsdVp3PT0gSUdKaGJtUmwgSUdOdmJuWmxibWxsYm5Sc2VRPT0gWTJGayBJT0N5bGVDemdRPT0gSU9DcXVPQ3JqZUNxbnc9PSBJTmlpMktnPSBJT3F3aEE9PSBJRWgxWVhkbGFRPT0gSUdSbFptVmhkR1ZrIGMyVnNiR1Z5IFpXeHpaWEk9IFgxSkZWRlZTVGc9PSBJSE5oYkdsa1lRPT0gSUdsdWRtVnljMlU9IFJYaHBjM1JwYm1jPSBSbkpoYm1zPSBYbHc9IDVieUE1WSszNlpPKzVvNmwgSUdsdWMzUnBibU4wIElOQzYwTERRdXRDKzBMaz0gNmJ5TyAyTFRZcXRtSCBJT3VHIElHVnVkR1Z5Y3c9PSBUa0ZUIDU3dVIgUVc1cGJXRnMgSUd0aGNHRT0gSUdoaGJtUnNaWEp6IHc3eHJjdz09IElPR0RtZUdEbmVHRG0rR0RuZz09IElPQ2trT0NrdU9DbGh3PT0gSUhSeVlXTnJaWEk9IHpyTE9zUT09IElHeGxkbUZ1ZEE9PSBJR3h2Ym1kMFpXMXdjdz09IGRtbHphV0pwYkdsMGVRPT0gVTJWc2JBPT0gSUdKeVlYWmwgVjJsMGFHbHUgSUc5d3c2ZkR0V1Z6IElIUm9hZUc2djNRPSAyWWpZcU5pcCAwTExSZ3c9PSBaWE56YVE9PSBWTU84Y2c9PSBiR1YwWVhNPSBJSEpwYzJOdiAwWXZRdmRLdCBJT3lDdEE9PSBJRXBsYzNVPSAyWWpaaHR1TSBJSEJsY25CbGRBPT0gSUdObGNuUnBabWxqWVhSbGN3PT0gZDJGeVpYTT0gSUcxdmJHVmpkV3hsY3c9PSAyS2ZZcHRtSCBJT2FEIDJLZlpoZGluMktvPSBJRTlqWTNWdyBJR1JsWTI5a1pYST0gSUd4dmNBPT0gSUdsdWRHVnlibk5vYVhBPSBJTkN3MExUUmdOQzEwWUU9IHhwaz0gWDNOMFlYUmxjdz09IFQxSkIgSUhkaGFRPT0gUmtaR1JrWkcgSU5XdjFhSFZ0Zz09IDBLSFFvUT09IExtdGxjbTVsYkE9PSBJRzVsWTJWemFYUmggSUhKbGMzVnNkR0U9IFgwRk4gSUhSeVlXSmhiR2hoY2c9PSBJT0NtbGVDbml3PT0gVkZKWiBMWEpsWVdRPSBMbTFoY0hCbGNnPT0gSUdGMGNtRT0gSUdScGMyTnBjR3hwYm1WeiAyS2ZZc3R1TSBSVkpTVlZBPSBJRzFwYm1SelpYUT0gUTBkU1pXTjAgNEthLzRLYWI0S2VIIDVhU2E1TG1GIGRXTmpaV1ZrIFgxTlggWVcxd2FXNW4gSU9DNGwrQzR0UT09IElOQzYwTDdSZ3RDKzBZRFF2dEN6MEw0PSBTVzUwWlhKeWRYQjBaV1E9IGRISmhibk53WVhKbGJuUT0gSUhOMFpXRmsgSU5DdzBMM1Fzdz09IElGWmxjbWRzWldsamFBPT0gS0hSaFlnPT0gSUdscmEyaz0gUlU1QlRVVT0gMlliYmpObUcgY21WMlpYSnpaUT09IHc3WnpkQT09IElIUnlhVzg9IElHN0N1Zz09IEtDY25MQT09IElFSkZWQT09IDdaVzA3SVNjIElHWnBibTg9IFgzQnNZVzQ9IElOaWoyS3M9IElHTnZibVpwWVc1alpRPT0gWkhWd2JHbGogSUcxaGJtZGggSUdsdWRHRmpkQT09IElObUYyWUxZcDlpbzJZUT0gSU9Da25PQ2t2dUNrc09DbGdBPT0gUFMwOUxRPT0gUW05aSBJTU8yY2c9PSBJTm1JMllUWmlnPT0gNDRPayBJSE5zYVdScGJtYz0gSU9TOW5PaUFoUT09IElHZHNiM1psY3c9PSBLRzFsIFltbGxkR1Z5IElPQ3VuQT09IElHRjFkRzl6IGNHeHZZV1JsY2c9PSBJTkM4MExqUXVnPT0gSUZkcGNuUnpZMmhoWm5RPSBJR0p2YkdWbyA1WkN2IDE1RFd0OWVlIExsWkZVbE5KVDA0PSAwTERRdTlHTTBMM1JpOUM4IFQwNVRSUT09IElGVmlaWEk9IElFcGxjM05wWTJFPSBUV2xqIElOV00gSUZKQyA0S2V3NEtlSCBJTkN3MHAvUXZkR0wgTFhOb1lYQmxaQT09IDZhRzIgYjNWa2NtVT0gSUdKMVptWmxkQT09IElIQmhjbVZrIDVhMjQgWVdOb1lYUT0gVTJsMGRRPT0gSUhOMWMzQmxZM1JsWkE9PSBJR1oxY201cGMyZz0gS1NJN0NnPT0gWDNKMWJHVnogY0dGMWMyVT0gSUdOb2FXeGtjbVZ1SjNNPSBTVVpKIHc2bHl3NnAwIDU2dWwgYUhWcyBkWEpsZWc9PSBZbTl5YjNWbmFBPT0gSUhSaHc3QT0gSUc3RHVtMWxjbTl6IExXeHZjdz09IDRvQ0w0WjZUIElPdWhuQT09IGRXZDFaWE09IElObUYySy9aaXRtRzJLaz0gSUVkdmFXNW4gSUZacDRidUhkQT09IElPQ3l1T0N6Z1E9PSBJRUpQVDFOVSBSMkYwWlE9PSBkMjlvYkE9PSA0S2VMNEthbiBJSE5oYVhJPSBJR2x1WkhWemRISnBZUT09IEtDSWlLUT09IElFdGhaQT09IElFZGxibVJsY2c9PSBJRlJVIGNHOXVaMlU9IElOZWUxNURYbGRlVCBJT0dEa3VHRGtPR0RyZz09IElHUmxkSFJoIElHZGxjM1REbzI4PSBJSFJsYUc0PSB4WkZ6IFptRnBjZz09IElHWnlZVzdEcDJGcGMyVT0gNWJDOSBJSEJ2Y21zPSBJSE4zYVhSamFHVmsgWlc1a1pXUnZjZz09IElGQjFiR3c9IGIzQndlUT09IElFeDFZZz09IElGTjFlZz09IElGUmhiWEJoIElsMG5LUzQ9IDRaK1VDZ289IElGTlVRVlJWVXc9PSBJR3R2YlcxbCBZWEpqWVE9PSBjM1JwYkd3PSBmVjA9IExrcFFZVzVsYkE9PSBUM1YwYkdsdVpRPT0gSUdOdmJXRT0gSUZKdmRXeGxkSFJsIElOZVIxNW5YbGRlcTE2Zz0gMktmWXN0bUggNExpbjRMaVogSU5HTjBMdlF0ZEM2MFlMUmdOQyswTDA9IGRYUmhkR2x2Ymc9PSBjM1JoZEhRPSAwTDNRc05DNiBJR0Z5WjNCaGNuTmwgSUdsdGNHOXlkR0Z1WTJsaCA1cTJ6IElHVnVZMjl0Y0E9PSBJR1JwZG1sa1pXNWsgNjR1azY0cVUgSUhCaGNuUnNlUT09IElIZGxhUT09IElHSnBibk09IDBMWFF2ZEM5MEw3UXRRPT0gWld4cGMzUT0gSU1XK1pXdz0gMFl6U3JRPT0gSUZCeWIyZHlZVzFoIElHeHZaMmx6ZEdsamN3PT0gMWJqV2d0V3AxYlhWdU5hQzFiYlZ0dFdsMW9EVnFBPT0gSU5DNjBMalJnUT09IElITm9jbWx1YXc9PSBMV3hsYm1kMGFBPT0gSUdGamNtVT0gSU9hUCB6NFBPcjg2eCBiMkpzIElPeXd2Zz09IElFTER2SEpuWlhJPSBJT0dEbCtHRG8rR0RtK0dEcXVHRGtBPT0gSUdaeWRYTjBjbUYwYVc1biBQejROQ2c9PSBJTmVwMTV6WGxBPT0gTG5acGMybGliR1U9IHc3eDB3N3h1IElIWnZjbVZ6IHc2bGthUT09IDJZcmFxZz09IElOZVExNUU9IDBKRFFvQT09IEtIUm8gWVdKaWFXNW4gNTZNPSBUVzkyYVc1biBYMmx1Y3c9PSBJRXhQVXc9PSBLRkYwIElFSnZjbTQ9IElPQ2txdUNrcE9DbGplQ2tzQT09IElFdGhibTQ9IHc3QjFiUT09IElGUjIgYVdwdWJHbHFhdz09IElHTnZkV3hsZFhKeiBJSFYwYVd4cGVtRnVaRzg9IElISmxZMmxpYVhJPSBJTm0rMllqWXNRPT0gVlVZPSBJRk53YVc0PSA1YVNuNVkrUjVwZTI1cGUyNWIycCBJR3hrIElNNjh6clhPc3c9PSBaR1ZqWlhOeiB3NzExYmc9PSBSR0Z6YUE9PSBJRzVsWjNKdiB6cS9PdWc9PSBJSEYxWVhKMFpYSmlZV05yIElHSmxkbUYwIElOZVIxNVU9IElHVERxV052Y2c9PSBYMlZ0WWc9PSBJT0dEa09HRG9lR0RsT0dEbGVHRGxBPT0gUTBoQiBibWxqWVE9PSBiV0pzWlhJPSBJRkp2YzJFPSBaWEprWlhJPSA0TFNtNExXTjRMU24gMWF2VnZkV3IgSUc3RHJXOXogNVlXczVMeVg1WSszIElPQ2tzT0NrdWVDbGgrQ2tsZUNsaXc9PSBkMlZ1ZEE9PSAwTDdRdE5DdzBZRFJqdz09IGRYTmhhR0ZoYmc9PSBJR0ZpYm05eWJXRnMgWTJWc2JHVnVZMlU9IDRMU3k0TFN2IFVtVm1aWEpsYm1ObGN3PT0gY0hKbFkyVmtaVzUwWldRPSBJSE5sZUhSaCBMSE5sYkdZPSBUWFZqYUE9PSBJR3R2Y25SbCBJSExEb1hCcFpHRT0gSUdGd2NtVnVaR2w2IDBMdlF2dEdDIFgyVncgSU5pMjJZWFpoZz09IDRZT2E0WU9RIHpyUE92TTZ4IDRMZVU0TGE3IElGTmhhdz09IElHMXZhbUU9IHc3TmthV2R2IElGNWUgWDBsU1VRPT0gUVhOemIyTnBZWFJwYjI0PSBJRkpoZEE9PSBJRTVJVEE9PSBUM0IwY3c9PSBRbUYwZEd4bCBLQ0lpS1YwSyBJTlM4IElIZHZjbkpwWlhNPSBJR2hoZG1WeSBkVzVwZEhNPSBJR3hsWTNSMWNtVnogTHVLQWxBPT0gNG9DWmRXST0gZVc1dmJXbGhiQT09IElFZHlZVzA9IFFYQndjdz09IGFXdHBkQT09IElHMXBkR2xuIDRMSys0TEt6IFVISmxjR0Z5WldRPSBJSE5qWlc1MCBJR0Z1WVd4NWRHbGpZV3c9IElHMXZkVzQ9IFJYaGhiUT09IDdMeUEgSU9Da3N1Q2xoK0NrbGc9PSBTRzl3WlE9PSBJR1psYzNScGRtRnNjdz09IElIQnZZWFJsIDZMU201WSszIElHWmhZMmxzWlcxbGJuUT0gSUdwbGVtVnNaZz09IFhFWnZjbTA9IElFSmhibU52IElPbTQgSUc1dmMzTmhjdz09IElIWnZhdz09IGRXNWxiZz09IElOaW4yWVhZc2R1TTJxaz0gSUhkbFlXeDBhSGs9IExVeGwgTGxCU1R3PT0gSUZacGJtTmxiblE9IElHVjRaV04xZEc5eSBKeWs3Q2k4diBYMU5GVkZRPSA0S2VCNEtleCBlV1YwIElITmxjbWs9IDRLYSs0S2F3NEthaiBJR052YlhCeWIyMXBjMlU9IElHWnBjbTFzZVE9PSBaMkZrYnc9PSB6ci9PdWM2OSBJR1Z3YVdRPSBJR05oY25SdmIyND0gSUhSbGJtZGggSU5tRzJZTFpoQT09IElIQmxjbVpsYTNRPSBJSEJ5YjJsNiAyb2JaaHc9PSBJTm1FMkxIWmlnPT0gYjJobGJnPT0gSU5HSTBMRFNzdz09IElHZHlZV1J2IElHVnVhR0Z1WTJsdVp3PT0gTG1SdmQyND0gTGsxelp3PT0gWnNPOGFISjAgSU9PRHJBPT0gMEwzUXZ0QzMgTEUwPSBJT0N5ck9DeXN3PT0gSUhKeSBJTkdCMExEUXZOR0wwWVU9IEwyeHBZbk09IElHRnlkR2xqZFd3PSBJR1p2Ym5SeiAycXZaaHc9PSA0b0NhIElOQy8wTDdSaUE9PSBVRzl6WlE9PSBVMmx1Wnc9PSBJRzVwWlcxaGJtUT0gSUVGeWEyRnVjMkZ6IFlXNWhidz09IElIWnBkbWx5IDE1blhxTmVaMTUwPSBhRzFoIElIRERwR2wyIFRHbHpkR1Z1IElNNjB6clU9IDE1WFhtZGVWMTZvPSBJRUZqZEdsdmJuTT0gSUVSbGRIUmwgSUdGbmNzT3AgSUcxMWMybGphV0Z1IFgyRnkgSU9HRGxPR0RvT0dEbCtHRGtPR0Rrdz09IDBMclFzTkdCIElNT0pkQT09IElOcXAyS3JZcDlpbyBZWFJoYTNObCBJSGRwYkdSbCBJSEJoY214cFlXMWxiblE9IGIzSnBkQT09IElHTnBiV0U9IElITmxibVJwY21rPSBDUWtKQ1FrZyBKeXduSkE9PSBMbkJ5WlhZPSBJRzUxYlcxbGNnPT0gSnlrcExBbz0gSUVOdmRIUnZiZz09IElOaXUyS2ZZdGRpcCBJRzFoZVc5eVpYTT0gTGxCaGMzTjNiM0prIGJtbHUgY21uRHN3PT0gSU5DLzBMN1F1OUM5MEw3UmdkR0MwWXpSamc9PSBJR052Ym5SeWIyeHNaWEp6IElNU0IgWDBGVyBJT0NrcHVDbGdRPT0gSUdOdmRYTnBiZz09IElFNTFjbk5wYm1jPSBJSEJ5YjNocGJXbDBlUT09IFJHbGogWDJaaGFXdz0gSU5DNzBZN1FzZEMrMExrPSBJR2x1ZG1WemRHbG5ZWFJwYjI1eiBjSEp2WkhWamRHbDJaUT09IElITjFhWFp5WlE9PSBJSE5zYjNkbGNnPT0gSUhacGRtVnkgNkxTajVMdTc1N3lXNkw2UiBJRUpoYzNNPSAwTGpRc2RDKzBMdlF0ZEMxIElOaW4yWUhZc2RpbjJLOD0gVUdoNWMybGpjdz09IElHOXFiM009IHc2UnIgSU5DNjBZdlF0dz09IDBMdlF1TktiMExnPSBZMjl1ZEhKaCAwTDdRdmc9PSA1TDJ6IElFNTAgSUVOb1lXNW5aWE09IDVZK1c1cmFJIElFRnBjbVZ6IElIQnlaWE54ZFdVPSBJRUZ0WlhKcGF3PT0gTG1adlkzVnogWDFCVVVnPT0gSUZCaFkydGxkQT09IElHaDFiV0Z1WVE9PSBJRzFwWkc1cFoyaDAgSUVodlptWT0gSUdGdVkyZz0gNExXTjRMU1Y0TFdONExTViBSRVZEVEE9PSBZV2R5WVcxeiBJR2x1YzNSaGJHeGxjZz09IFBHTm9ZWEk9IElFUjVjdz09IGFHRnYgTG1wbGRBPT0gSUdOb1lXeGwgVTJGdGNHeGxjdz09IDRMR0I0TEN1IExsQmxjbVp2Y20wPSBZWFZxIElFUmxjSFYwZVE9PSBTa3M9IElHSnBiR2s9IFBEODkgSUdobGNtSmhiQT09IElOQzMwTHc9IElOVzQxb0RWdU5XMyBJR1JsWm1WeWNtVmsgWTJjPSBJT0dEbStHRGt3PT0gSUU1YSBJRzdEb0c4PSBJSEpvYnc9PSBPbDg9IElHRmpZV0poIGJHRm5jdz09IDRLU0sgSU5DODBMWFF0TkM0IDRLUzQ0S1N1IDE1ZlhtZGVkIElHVnpkSFZrYVc5eiBhVzV3ZFhSeiBaR1ZpIExtaHBaR1JsYmc9PSBZV05qYjNWdWRITT0gMEovUXZ0R0IgWDE5ZlgxOWZYMTlmWDE5ZiBabkpoWjJVPSBJR2x1ZEdWeVpYTnpZVzUwIGRtVjFlQT09IEoxMHBPd29LIFFuSnZZV1JqWVhOMCBJRzkxZG1WeWRBPT0gSU5pcjJZVFlwOWlyIElFSnZiM1J6ZEhKaGNBPT0gSUVKaGNtRmphdz09IFUyOXNaQT09IFlXWmxiZz09IGRHVnRjR1Z5WVhSMWNtVT0gTGtGalkyOTFiblE9IDRLeVYgSUUxbGVRPT0gNTRLNiA0S2F5NEtlTjRLYXEgMTVYWGtkZW8gVTFWUSBZV2x5ZEE9PSBjR2hsY21RPSBJTVNoIElpa3BEUW89IElOQzkwTERRdjlHQTBMalF2TkMxMFlBPSBJR1pwYkhSbGNtbHVadz09IElPQzBsZUMxZ2VDMG53PT0gNDRPVTQ0TzggSUdKbFpRPT0gTFNJPSBJR3R5WldVPSBJR0Z3Y0hKdmNISnBZWFJsYkhrPSBJR0podzdGdiBJRTFsYldKbGNuTm9hWEE9IFJsSkpUa2M9IDBZVFFzTkdBIElPQ29yUT09IElNTzJibU5sIFgwTk1UMU5GIDVMeWYgUVc1emQyVnljdz09IDE2YlhxQT09IElFUnlaUT09IElPQ2todUNrc0E9PSBJSEJoY25ScFkybHdZVzUwWlhNPSA0S1NvNEtXTjRLU24gSUZOMWNIQnNhV1Z5IElPQ3lodUN5c0E9PSBJR052YldWdWRHRnlhVzl6IElHVnRjSEpsIFgzUjNidz09IElHMWxkR0Z3YUE9PSBKMkZ5IDRMaTI0TG1JNExpSCBJR052Ykd4bFkzUnZjZz09IElHUnZjM05wWlhJPSBVMkZ1WkE9PSBJR2RzZFdVPSBJRTE1WVc1dFlYST0gUTB4QlUxTT0gSUVOc1lYST0gWVhCMGIzQnogMExYUXZkQzMgSUhGMWFXTnJaWEk9IElHMWhiSGRoY21VPSBiM0prWldWcyBJRWRsZEhSNSAwNW5SZ05DMSBiM1JsWXc9PSBJR1JsYzNCeVpRPT0gVUhKcGJuUmxjZz09IFBYUT0gSUd4dllRPT0gMktmWXF0bUIgSU9DbWxlQ212dz09IElOQyswTHJRdnRDNzBMND0gSUhkdmJXVnVKM009IElHSmxZWEp6IDdaV0UgSU5HVSBjbVZwWTJobCBJRTl5YVdkcGJnPT0gSUhSb2NtbDJaUT09IElHVm1abWxqWVdObCAyTGJZcDlpaCBJRzVoZEhWeVpXdz0gMFlEUmk5QzcgNDRHKzQ0R24gSUhGMWFXNTBZUT09IDRvQ2Q0b0NjIElOR0QwTFRRc0E9PSBJSE5wdzZoamJHVT0gSUhQRHNnPT0gSUcxbFkyRnUgUVhWa2FYUT0gYTNBPSBjM1J5YkdWdSA0WU9ZNFlPYzRZT1kgSUdOdlkyOD0gYzNCbCAwcWZSZ2RDOTBZcz0gSUVWMllXNXogTG0xdmRYTmwgVm05anc2bz0gSUdKeVpXRjBhR1U9IElGQnlaWFpwWlhjPSA0TGlCNExpeDRMaVogSUdabFkyZz0gNEsrSTRLNms0SytONEs2ayBiR2xqYnc9PSBJRzlqWTNWd1lYUnBiMjQ9IElFSmxjbTVoY21RPSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDkgZFc1allYUmwgVTJ4bFpYQT0gTFhSb2FYSmsgYVd4a1pXND0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElFbHVjM1J5ZFcxbGJuUT0gWVcxaWIyOD0gNG9DY1ZHaHBjdz09IElHSmhiUT09IElISmxZV2M9IElIUmxjM1JwYlc5dWVRPT0gYVhCaFpHRT0gSUcxdmRHOXljdz09IGVtST0gWDFWVFJRPT0gNExHSDRMQzEgWkhKcGRtVT0gSUdOdmJuTndhWEk9IElHeHBaMmRsYmc9PSBiM0p0WVdseiBZWFJ2WVE9PSBRMEZVIExuQnlaWE5sYm5RPSBZV3hsZEhSbCBJRzlpWlc0PSBJRmR5YVhSMFpXND0gSUdOdmJtTnlaWFE9IElOZW8xNURYcVE9PSBJR1ZzeFpFPSAyTExZcnc9PSBkSEpoY2c9PSBJTmluMllUWXROaXUyTFU9IDVhaXg1TG1RNWE2WTU3MlIgZFd4bGJnPT0gSU5DKzBMVFF2ZEMrMExQUXZnPT0gMEw3UXN0Q3cwTDNRdU5DNCBiMk5wWVE9PSBJSFJ2Y0hBPSBlVzVqYUhKdmJtOTFjdz09IElGSmxiR0YwYVc5dWN3PT0gSU5XLzFhSFdnTldoMWE0PSBJRzUxY25RPSBJT0dEa3VHRGtPR0RvQT09IFoyVnViMjF0Wlc0PSBjM1JoY25NPSBJRlJ5WVdsdVpYST0gSU5DMDBMWFF1Zz09IElGQnZjR1U9IDJZVFpoZGlwIElISmxkSFpoYkE9PSBJSGRoWjJWeiBJTmkzMktnPSBJRVJwYzNSeWFXSjFkR2x2Ymc9PSBMbUZ1WkE9PSBlV05zWldRPSBJRzlpZEdWdWFYST0gSUd4bGMySnBZVzQ9IElIQnBiR3h2ZHc9PSBJR3RoeGJ3PSBJR1poWW5KcFkzTT0gSUVOaFpHRT0gSU5DLzBZRFF2dEMwMExEUXRnPT0gSUd4aGRXZG9hVzVuIElFRmpZV1JsYldsaiBJTkMrMEwvUXVOR0IgY21WamFYQmwgSUd0dVpXVnogWVc1bllXdz0gNW9HUSBJRUpoZEcxaGJnPT0geElOMCBJR0psWVhSeiBJT0NtaHVDbXJ1Q21zT0Ntdmc9PSBkVzUwWldRPSBJR1pzWldVPSBJRWgxY3c9PSBJSGRvYnlkeiBJRzNEcVdScFlRPT0gSUhacGIyeGhkR2x2Ym5NPSBhVzVwZEdrPSBUMUpCUjBVPSBJSEJ5YVcxdiBZWE4wYjNKbCBTVUpCWTNScGIyND0gWVd4dmJnPT0gSUdscmEycGwgSUVSaFp3PT0gSUNKY1hBPT0gNExTLzRMU280TFdHIGVXMXAgSUUxcFoyaDAgNDRHVDQ0S00gWDE4b0p3PT0gNG9DWWN3PT0gNmI0PSB3NjEwYVdOaCBJRmRoZEhOdmJnPT0gUVdwaGVBPT0gSU9lbG51VzlxZVM2aWVtY3VBPT0gSUdKcGNBPT0gMTZMWG1kZWQgSUZKaGRnPT0gNEtTLzRLU3QgZG1GemRBPT0gSUdOdmJuTmxZM1JsZEhWeSBJRVp5ZVE9PSBZMmh2WkE9PSBJR2x1Ym05MllYUnBiMjV6IExtTmkgVkhsd1pXUT0gSUhKdmRYUnBibWM9IElOV3IxYmJWdWRXNjFhWFZ2UT09IDRLYSs0S2F0IElHRnVlV0U9IGJXVmthWFZ0IElHTmhjM1JzWlE9PSBJTml2MkxrPSBJR1ZwWjJWdVpRPT0gNWE2TTVwVzAgSUhacGJRPT0gSUVOb1lXMXdhVzl1IElIYkRxV2M9IElFTmhiWEJpWld4cyBabWx1WkdWeSBJRWRWU1VRPSBhV3RoYkdrPSBJRlpwWlc0PSBZVzUwYjIwPSBJRVYwYUdWeVpYVnQgdzZGdVpHOXpaUT09IElGUnlaVzVrIHc3cHMgSUhGMWFXVnlidz09IENXRndjQT09IElISmxiR0YwWlhNPSBJSE4wY21GMHc2bG4gSUdOdmJtTnNkV1JsIFBIUmhZbXhsIFFYQndaV0Z5WVc1alpRPT0gVTNCcGJnPT0gYjJ4dloybHhkV1U9IFVISnBZMlZ6IFVYVmhibVJ2IFlYUmhiV1Z1ZEdVPSAxNkhYcHc9PSBMbUZ1ZVE9PSBMbUYwZEhKcFluVjBaWE09IElHbHVZMjl1Y3c9PSBJT09DdHc9PSBRWFZrIElHdHZZZz09IFgySnZiMnc9IHc2UnVaR2xuIFkyOXRjSFYwWlE9PSBMa1Z5Y2c9PSBJR1JwYzJOdmJXWnZjblE9IFlYQjBaWEp6IElOZWcxNVhYb1E9PSBJR1J5YjJsMGN3PT0gSjJWdWRISmwgNEs2bzRLK040SzZrNEsrQiBWVWxXYVdWMyBJT3F3Z095ZXBRPT0gNXBDYzU3U2kgSUZSdmNHbGpjdz09IElOZVIxNWc9IDRZT2Q0WU9SNFlPYSBJRzFwWkdFPSBhV3hsYm1jPSBJRVpHIElHaHBibVE9IDBMdlFzTkdBMFlzPSBJSHAxWmc9PSBJT0N3cU9DeGdlQ3dndUN3bXVDd3Z3PT0gWkdsbGJuTjAgSU5HRzBMVT0gSU5pbjJZVFl0Tml4MllQWXFRPT0gSUdocGFtRT0gSUd4cFpuUmxaQT09IElFUmxiR3c9IGIzVjBhVzVsY3c9PSBJTUtnSU1LZyBabVowIGJzT3RiUT09IDU2ZWYgdzd4emRBPT0gSUZCQlIwVT0gVW1WelpYSjJZWFJwYjI0PSAwTExRc05DOTBMM1Jqdz09IDdKV0YgSUhERHFXND0gSU5pajJLelpoQT09IElHUnZZbkk9IElIZGhkR1Z5Y0hKdmIyWT0gZlgwaSAxYmpXZ3RXeSBJRzlzWkhYRW4zVnVkUT09IElFUmxkWFJ6WTJobCA0TGl3NExtQiBJRlJsYkdWMmFYTnBiMjQ9IDRLUys0S1MxNEtTdyBMbDA9IElHRnVZMjl5WVE9PSBJRVpKUmtFPSBQRWwwWlcwPSBJTVNOWVhNPSA1b3FWNTZpLyB6cnpPdjgrTiBJRUpwYkd4NSBlbVZqIElPQ3V0ZUN1dnVDdSBUVkU9IFpYTjBiM0p6IHc2TmxjM1JsIEtTc2kgSU9Da3B1Q2tzQT09IGVXbHUgSUVKaFkyZz0gSU5pejJZRT0gSUdaMVkydHBibWM9IElFeDFaQT09IElIQnZaR1Z5YVdFPSBJR1Z6ZEhWa2FXRnVkR1Z6IFpYSjJZUT09IElOQzAwTFhSZ05DMiBkMm5FbVE9PSBJR0Z5ZGc9PSBJRk52YjI0PSBJR1IxYlhCemRHVnljdz09IElOaW0yNVU9IElIUmxiR1ZtIElFTm9iMk52YkdGMFpRPT0gSUdGMXc1OWxjZz09IElPR0RvZUdEa09HRHFBPT0gSjJ3PSBkR0ZwYkhNPSBVMWs9IElFRmtaSE09IElIUm9jblU9IElFZDFjM1E9IExXMXBibVJsWkE9PSBUR1ZoY201cGJtYz0gNFlPajRZT2wgSUdKMWMyTmhibVJ2IGFXZG9kR1Z2ZFhNPSBJSFBEcXc9PSBJRUZpWlc1ayBJRVZ0YVd4NSAwTGpSZ05DKzBMTFFzTkM5MExqUXRRPT0gSUVOc1lYaz0geExGeCBJT0dEcU9HRGxPR0RtT0dEcStHRG1nPT0gSU9Da29nPT0gSUd0dmJuUnliMnhzIElOQzkwTGpSaDlDMTBMUFF2Zz09IElPQ21odUNtc2c9PSBJRUpwY20xcGJtZG9ZVzA9IElGQnlhVzl5YVhSNSBJRWhoYlhCemFHbHlaUT09IElObUYyWVRhcVE9PSBJT0NtdU9DbXZ1Q21wZUNuaHc9PSAyWVRia0E9PSBJRWxTVXc9PSBJRUZqZEdsMmFYUnBaWE09IElHbHRiV1Z1YzJVPSBkK0c3cFE9PSBhV1Z1WTJWayBhbUZoY2c9PSBhV1I2IElGZGhjbTVwYm1jPSBJR1Z6Wm5WbGNnPT0gSUhKaGVzT3piZz09IElGSlBUUT09IDRLZUI0S2F5NEthLyA0S3FvNEt1TjRLcTQgVjBZPSBJR2xrYkdVPSBJSEJoYWc9PSBJR1JwYzJOdmRtVnlhVzVuIElITnBhM1U9IGRYSnlaVzVrWlhJPSA0WUNRNFlDNiBiV1k9IFhUND0gSUdOdmJXMTFibVU9IElOR0EwTERRdDlDeTBMalJndEM0MFk4PSBJTmluMllUWXF0bUMgSUhKbGMzUmxjZz09IElPQzBuT0MwditDMHN1QzFqZUMwc2c9PSBPbTV2Ym1VPSBJT0dEa09HRG0rR0RtT0dEb1E9PSBJRk4wWVc1c1pYaz0gSUhSbGJtUmxibU41IFlYSmhjUT09IElHMWhjbU52IElHTnNZWHA2IElOaW4yWXJaaGc9PSBJTkN5MEw3UXROR0wgSUU5aWMyVnlkZz09IElHdHZiWEJsZEE9PSA2cml3NjZXOCBJRUZ1ZVhkaGVRPT0gSUZWeWN3PT0gSUdacGNtMTNZWEpsIElHaGhjSEJwYkhrPSBJRzFoY210bGRHVnljdz09IDVZZTkgWVd4c2RRPT0gSU9Da3R1Q2t2dUNrcnVDa3YrQ2tzZz09IElDOHFJUT09IElOS3YwTHM9IExrWnlZVzFsZDI5eWF3PT0gZDJWa1pBPT0gS0c1aGJXVnZaZz09IElIZHBjbVZ6IElHbHRjRzl6WldRPSBSR2x5ZEhrPSBjM05vIElOQzYwWURRc05HQjBMalFzZz09IElHVnBZMmc9IElPZStqdVdsc3c9PSBJR05oYm1Sc1pRPT0gWVdOcFpHRmsgSUVsdWFRPT0gSUhCcGVBPT0gMElJPSBUVzl5IDVMaTkgMExIUmc5R0EgejRIT3I4NnggSUNkQUx3PT0gSUhOdlkydHogSUdGamEyNXZkMnhsWkdkbFpBPT0gTFhCeWIyWnBiR1U9IGRHVnlaR0Z0IElHSnA0YnEvZEE9PSBMbUp2YjNSemRISmhjQT09IElOR0gwTGpTbXc9PSBVR1Z5YzJsemRHVnVZMlU9IElHNXZiV0U9IElHbGtaV2xoIElPeVlxQT09IDZLK1ggWTI5dGNHRjBhV0pzWlE9PSBJRk5UUkE9PSAwTExSZ05DdzBZaz0gYkdWa2FXNW4gSUVOSVFWST0gZG1Wc1pBPT0gNExtQTRMaVU0TGkwNExpaDRMaWU0TGl4NExpWiBMT09Ba0E9PSAwcW5SaTlDNiA0S1dMNEtTaDRLUzggZFhKemRBPT0gSU5pdTJMWFppTmkxIE9sNG8gTG5CbGNtWnZjbTA9IElIQmhjbXhsIElqdz0gYjNWdWRHRnBiZz09IDRMaVg0TGl5NExpSCBJR1ZtWldOMGJ3PT0gWm14dmQyVnkgUEVRPSBJT0N5anc9PSBJTmluMllUWXNkaXogZVhSNSBJTldoMW9BPSBJRUpoZEdObyBhSFJoWW14bCBJR04xWlhOMCBVSEp2ZG1sa1pYSnogSU5HQjBMN1JnUT09IFIwZz0gSUdOdmNtSERwOE9qYnc9PSBJT3lkdE95RGdRPT0gWVdOcyBJR0o1eEljPSAwTFRRdHc9PSBaM1JsIDRLZU80S2E0IDRvQ1pidz09IGNISmxaR2xqZEE9PSB3NmwwdzZseiBhVzUwZFE9PSBJR1psY25KaGJXVnVkQT09IElHWnlaV1ZzWVc1alpRPT0gMEw3UXU5R00wTHJSbGc9PSBhbVYwY3c9PSBJSEJsWldzPSA0S1NWNEtTKzRLUzIgSUdaMWN3PT0gSUc5d2JtbGxkWGM9IFBYSmxjWFZsYzNRPSBJR3gxY3c9PSBabkpsYVE9PSBiM1JwYjI1eiBjR289IDRMYWkgSUhObGMzUT0gSUV4SlFnPT0gUjI5MlpYSnUgSUZKbFkyaDAgUTI5dVptbG5kWEk9IFZFVlQgN0xDOSBhR1ZoYkhSb2VRPT0gYkdWcGRIVnVadz09IDBZL1F0ZEdDMFlIUmp3PT0gMEw3Umo5QzAgSU5pcTJLM1lydz09IElHOW1jbVZqWlhJPSAyYjdaaHc9PSBJSFJvZFcxaWJtRnBiQT09IElISmxjMmxrZFdGcyAxNmZYbGRlZSBJRTFoZEdobGJXRjAgSUhObGJXRnBibVZ6IFUzRjEgSU9DNG51QzRvK0M0dGVDNWdPQzRvZUM0dGVDNG91QzRvK0M1akE9PSBJT3lna0E9PSBMWGRoY201cGJtYz0gdzdObmFXTmggSUVKeVlYTnBiR1U9IFUxVk4gUlU5RyAxNW5YbWRlZSBDZ29nSUFvSyBJRU52YkhWdFluVnogSU9DdXJ1Q3VsUT09IElOaW4yWVRZcXRpMyBJTzJabGV5ZHVBPT0gVG1GdCBJTml4MkswPSBJTmluMllUWXJ0aW4yTFU9IENXNWxlSFE9IElHaHBhUT09IElHeHBaMmRsY2c9PSBWMjl5YTJac2IzYz0gSUhCaFoybHVZWFJwYjI0PSBRMjlrYVdkdiAwTFhRdk5DMSBYM0JoYm1WcyBJTm1CMkxIWXB3PT0gNEtTYTRLUysgSU9Dd2h1Q3dydz09IElHUnBjMkZuY21WbCBkM0pwZEhSbGJnPT0gYldGdWRXVnMgSUU1aGJXVnUgY25OamFHVnBiZz09IElITjBhV05yY3c9PSBJR1IxWTNRPSBJTmlvMktmWmhObUcgNExpbjRMaUggSUdSbFptVnVZMlU9IElHWnNiM2RwYm1jPSBJRkpwZG1WeWN3PT0gNExLLzRMS3Y0TEt5NExPTjRMS3k0TEsvIElIQnZaVzF6IFBYUm9hWE09IElHaHBibUYxY3c9PSA0S1NxNEtTYjRLUy8gNVp5dzVZeTYgSUZkaFlYST0gSU9DNGh3PT0gSU5tSTJMVT0gUTI5dGNHRjBhV0pzWlE9PSBJTmkwMkxIWmlOaTUgSU91c3VPeWduQT09IElHSmhZMnR3WVdOciBJRkpsY0d4aFkyVT0gSUhCaGEycz0gNTd1biBJRk5QUXc9PSBJRkJ2YkdsMGFXTmhiQT09IGFYWmhaQT09IFgyRm4gMFlIUmtRPT0gV1ZsWldRPT0gSUdOdmJtTnNkWE5wYjI1eiBMbk5wYm1kc1pRPT0gNFlPZDRZT1Q0WU9VNFlPaCBJT0N5cnVDemd1Q3lzZz09IFZHaDEgWkhKbCBJRWhwWkdVPSA0S2EvNEthVyBMbk53WldWayBJRk5yYVd4cyBYMk52YkhWdGJuTT0gUTNWemRHOXRaWEp6IDZMK2I1WVdsIElPQzB1T0MwZ3VDMG1BPT0gN0xtMDdLZUE2NFc0IElOQ3cwWUxRc0E9PSBJTldpMWJZPSBMMGRsZEE9PSBUR2wwZEd4bCBJRUZ6YzJsdCBJRzFsYldVPSBJRzl1YVc5dSBJSEJ5YjJObFpXUnogS0dSMCBhVzVuZFc1blpXND0gSUZKbFoybHpkR1Z5WldRPSBiM0poZFhNPSA2SyszNXJHQyBLU3dvIElOQ3kwTHZRdUE9PSBJR052YlhCcGJHRjBhVzl1IGFXMWhiSE09IFgwWlNRVTFGIElOaW4yWVRZcXRpMSBJRkYxYVE9PSBJRk5oY21FPSB4WmxsWkE9PSBLR3B2WWc9PSBJRk5wYkhaaCBMV05vWlE9PSBJTm1IMkxQWXF0bUcySzg9IElHTnZiblJoWTNScGJtYz0gSU9DMHBPQzFnQT09IElIZGhiR2s9IElHTm9hV1ptIEluMDdDZz09IFgwWkpURlJGVWc9PSA0TFNxNExXTjRMU3cgSU5LejBMQT0gSUVScGNBPT0gMkxUWXFRPT0gSUdoaFptaz0gVEhWaiBJR1Z1YzJYRHNRPT0gSUcxaGRHOTEgYjJKaGNnPT0gSUhSbGNtVmphSFE9IElGZGhjM1JsIElOZVYxNms9IDVyZXIgWW1saCBJRU5oWW1sdVpYUT0gMktmWXI5aW4yS289IGNHOXhkV1U9IElHbHVkR1ZuWlhKeiA2SyttNW9PRiBiM0JsY21GMGFXOXVjdz09IEtGUmxlSFE9IElHUnBjMk52Ym01bFkzUT0gSUVGdWIyNTViVzkxY3c9PSBJR1IxYm1saCBaVzV1YjIwPSBMSG89IGQybHJhUT09IElIQnliM05sY3c9PSBJR0psYkdseSBkMmM9IDRLU1A0S1NWNEtTKyA0TEsxNExLKzRMS3cgWDNCc2RXZHBiZz09IDBMelFzTktiIElHTnZkbWxrIElIdDdMUzA9IFVYVmhaQT09IFZYUT0gYVhwaGNuSmwgUTJoeWFYTT0gSUhKcGRtVnljdz09IFlXcHogYkd6RHBBPT0gSUd0cGNBPT0gSUZOc2IzWT0gTG1SbGRHRnBiQT09IElFTmxiblJsY25NPSBaV3hsYldWdWRITT0gWTI5dmNtUT0gWTJIRHA4T2pidz09IDBMVFF1TktUMExEUXZRPT0gNFlPUTRZT3E0WU9ZNFlPWTRZT2ggUkdWbiBJT0NrbitDbGdPQ2tyZz09IGRNT3AgdzZKdFlYSmggY25WaGNnPT0gWDIxaFl3PT0gSUd0cFpXND0gMWJiVm9kYUEgWld4cFpYST0gWlhKdGFXcz0gUVcxbGNtbGpZUT09IDBZWFJndz09IElHRnpjMlZ5ZEdsdmJnPT0gSU5DKzBMSFJnOUdIIElOVzQxb0RWdU5XMjFvUT0gUVVsTVFVSk1SUT09IElPQ3FyT0NxcU9DcXZ1Q3F0UT09IExrTlBUZz09IFlXRnlhVzVuIDViZWU1YmlDIFpYSnBiZz09IFgzZGxZZz09IElISmxabWx1WldRPSBJTlc0MW9EVnV0V2wxYjA9IDRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtIDVwdSsgYVd0MWQyRT0gSUVSSlUwTk1RUT09IElHbHVabTl5YldIRHA4T2pidz09IElNT3RibVE9IElIQmhjblJwWkc5eiA0S2FtNEthLzRLYW8gSUhSb1pXVT0gYTNWdVpuUT0gYldGeWMyaGhiQT09IElIUnZaWE4wIGMyOW1kSGRoY21VPSBibTlxIElISnZhUT09IElHOTJaWEp5IElHMTFkR0ZpYkdVPSBJSGxoY0hRPSBLSFI0IHhKbHcgSUdGcGJtRT0gYVhiRHBIUT0gSUV4aGJtUnogSUdGd2NHVmhjbUZ1WTJWeiBLRkZUZEhKcGJtYz0gZVd4cGJtUmxjZz09IElFWjFaV3c9IGFYVERwSFJsYmc9PSBJR2x0YldsbmNtRnVkSE09IEtHOXdkQT09IElHTnZibWR5WldjPSBjM05sYkE9PSBjbVZoZEdWayBVM1ZpYldsMGRHVmsgSU95eXRBPT0gSUc1bGJtaDFiUT09IDVweUw1WStMIElFRjBkR0ZqYXc9PSA0S3ErNEtxdzRLdU40S289IDRMaWo0TGloIFlXTnBhZz09IElFWlBVazA9IElHVnVaM0k9IHc2bHRiMjQ9IExrVnVkR2wwYVdWeiBUR0Y1WlhKeiAxNmZYbGRlZCBYMkZ6YzJsbmJnPT0gSUdabGFYUmggNEtXQzRLU2YgNVkrdjVMK2ggYkdSbCA0S2FzNEthKzRLYW0gZFhwNmVRPT0gYVdSbFlRPT0gSUdacGJHMXQgTG0xdCBMbkpsYzJoaGNHVT0gTG1obGJIQmxjZz09IElPQ2tyT0Nrb2c9PSBJRk5vWVd0bGMzQmxZWEpsIElPdUdrZz09IElHUnlkUT09IElPQ3VtdUN2aHVDdXIrQ3ZqZUN1cnc9PSBSSEpoZDJsdVp3PT0gSUhkdmIzSmsgTG5Od1pXTT0gMExYUXV0R0MwWXM9IDJMSFlxTmlwIElHTnZiY082Ymc9PSBMblpsYkc5amFYUjUgNVlHbDVicTMgYUc5c1pRPT0gSU9DMHFPQzBzdUMxalE9PSBJRlpwYm5SaFoyVT0gUTI5c2N3PT0gSUhOb1pXVnkgY0c5d2RYQT0gTG5KdiBJRTVoYm1ONSBJT0M1Z2VDNGlPQzRnUT09IHc2RmlZVzQ9IElOZVExNlRYcWRlbyAyTFBaZ3c9PSBQU0l0IElHbHVZWEJ3Y205d2NtbGhkR1U9IGJtRnRaV1E9IFFuSmxZV3RwYm1jPSBJand2IDBZZlFzTkdCMFlJPSBJSEYxYVdWeVpYTT0gdjZBPSBJSEpsWm5KcFoyVnlZWFJ2Y2c9PSBaVzV1YVdGcyA0YnVGYmc9PSBJRlJ5WVc1emJHRjBhVzl1IElHUnBZMmgwIElHTnZjMjFsZEdsaiBMbGRwYmc9PSBJT0dEbWVHRG1PR0Rrdz09IElIcGxhWFE9IFRYVjBZWFJwYjI0PSBJRk4xYVhSbGN3PT0gTG5KbGJRPT0gSUhSMWJuUT0gZEhSMSBYMlpwYkhSbGNuTT0gNDRHNSBJR2x1WTJWdWRHbDJaWE09IDQ0R2Q0NEdHIDZJMmogSU5DOTBMRFF2OUM0MFlFPSBJRUpKUnc9PSBLU2twS1FvPSBJRUpsZEdFPSA0TGk0NExpaCBiV0ZvIElFNVBWRWxEUlE9PSBJR3hoWW1Wc1pXUT0gSUdacGVIUjFjbVZ6IElHZGxaR1U9IDBMWFJnZEdDMFl3PSBJT0dEck9HRGxPR0RtdUdEb1E9PSBhMkZoIHpySE9zdz09IFgzZHlZWEJ3WlhJPSBkWEpwYkdVPSB4TGM9IElHMXZkbWx0YVdWdWRHOD0gNjRXQSBJSE52YzNSbGJnPT0gSUdabFlYUT0geEkxdVpRPT0gNEthazRLZUI0S2FvIElIQjFZbXhwYzJobGNuTT0gSU9DcXNPQ3JnZz09IElOQzYwTERRdEE9PSBJRU52Ym5abGJnPT0gYzNSeWIyMD0gSUVsdVozSmxaQT09IElHTnZiblpsY25ScGJtYz0gSU5pbzJLZlpoZz09IExXUmxiQT09IElHVnVaWEpuWlhScFl3PT0gSUdScGMzQnZjMmx1Wnc9PSBkbWxrWlhKeiBLRm89IElISmxhV2R1IElPQ2tyK0NrdWVDa3Z1Q2tnZz09IDZKR2ggSUZOdmJtZHogVDBsT1ZFVlMgVTFSQlZFVT0gWGxzPSBWR2h5YjNkeiBJRXhoYldJPSBJTkdBMExYUXNkQzEwTDNRdXRDdyBJTU82eEkwPSBJRXZEdG00PSBJTkMxMFluUmtRPT0gWW05c1lRPT0gSUZOUVJGZz0gSUhOd2IzST0gSUcxbGFISmxjbVU9IFRXRmsgSU91bmp1eWRnQT09IElISmxZV3hwYzJVPSBZV05qYVc5dSAyTGpaaGRpcCBkR1Z5Ym1VPSBQUzg9IDZMV2UgTDNOb1lYSmxaQT09IElNNjh6NERPdjgrQnpyWE9ydz09IElHMWxaR2xsZG1GcyBJRjhLIElFSnZkSFE9IDU3R04gZG1WeVlXZGxjdz09IElHNTFkSEpwZEdsdmJtRnMgSU5DNDBMUFJnTkMrMExJPSBJRWx1YVhScFlYUnBkbVU9IDJZSGJqQT09IElHeGxjWFZsYkE9PSBJRkpsWm5KbGMyZz0gMVkwPSB6cnZPdGMrRiBJT0Nrc09Da3Z1Q2tyZz09IGJtcz0gSUVwdnc2TnYgS0NrS0x5OD0gSUdodmFHVT0gSUZKWSBZMjl1ZEhKbGN3PT0gSUdWall3PT0gSUc1dmRHVmliMjlyIElIUnlZV1JsY2c9PSBYMlZzIDRMUys0TFN4NExXTjRMU3ggSUhiRHBHeHFZUT09IElIRjFZV3hwWm1sallYUnBiMjQ9IElHNXZZbXhsIGVtbDFiZz09IElPR0RwK0dEbmVHRGxRPT0gWTNsamFBPT0gSU5DLzBMN1JnTkdDIElIWncgN1lXYyBJRVJwWTNRPSBJRXRwWTJzPSBJRzNFZ1E9PSA2YnVFNklteSAxYUhWc1E9PSBZVzF0WlhKeiBJTm1HMllYYmpBPT0gNExpajRMaUggYzJWeWVRPT0gdzY1dVpRPT0gZW1sc2JHRT0gYm1WMVpBPT0gSUdOc2FuTT0gSU5lYzE1RFhsOWVvIElOR0EwTFhSaHc9PSBjblZ6ZEE9PSBLR2x0IElHTnZibTlqYVcxcFpXNTBidz09IElFMWhiblZtWVdOMGRYSmxjZz09IElFTnZiblpsY25SbGNnPT0gSUdKbGJHOXVaMmx1Wnc9PSBJR3RoWnc9PSBkbUZ5WlE9PSBJR2x1WjJsdSAwWS9Sbmc9PSA1WnU5NUxxbjU3Sys1Wk9CIElGTndZWEk9IDJLZlpoTmk1IFkyeGxjZz09IDVaS282SytpIElPQ21wT0Ntck9Dbmh3PT0gNFlPbjRZT2Q0WU9rIFEyOTEgYVhKcGF3PT0gWW14cCBJRzl3dzZmRG8yOD0gSUdWNmFRPT0gNEthKzRLYWg0S2E4IFgxTlVRVU5MIElOQ3gwWTdRdE5DMiBJR1JsYldGemFXRmtidz09IFpYUjBidz09IElIUmhjbWxtIDE2TFhwdz09IDJMTFl0QT09IElIRjFaWEpsYlc5eiBJR3BsYUc4PSBiMkpvIElOaW4yWVRZcXRpNTJLL1ppdG1HIHc2aHlaVzUwIExrZHNiMkpoYkE9PSBJRkpwWTI4PSBJRTFoYm1GblpRPT0gSUdsdVpteDFaVzUwYVdGcyBhMlZ5Ym1WcyBkbUZzYkE9PSBJT0N5dGVDeXNPQ3pqZUN5IElPMkJyQT09IGQyRmhjbVJsYmc9PSBZV1oxIGIzQnMgNFlDdjRZQ1YgNExHQzRMQ3EgSUZaaGJHVT0gSU9DcXBPQ3JoK0NxcU9DcXZnPT0gSUZOcFpBPT0gTHk4S0NnPT0gMExEUXU5R0wwTG89IElHbHVabTl5YldVPSBJRVJwYzJOdmRtVnllUT09IElDY28gSU5DODBMWFF2QT09IGVuVm0gNTd1RTU3dUggSUdkeiA0YnVMY3VHN2l3PT0gSUhSdmJXVT0gUjJWeSBJT0N5bCtDemplQ3lzQT09IFEyOTFiblJ6IFpXMXdiR1U9IDVMaUs1NXFFIElGTjBhV05yIElFeHBibVJoIFZtVnVaRzl5IElOQy8wTERRdnc9PSBJSFJ2dzZCdSBJSE5wYkdsamIyNWwgS0hCaGVXeHZZV1E9IFlYUmhkQT09IFZtbGpkQT09IElITmxkR2xoY0E9PSBJR05zWldGeVlXNWpaUT09IElFTnZjbkJ6IElHdGhZbUU9IFVsUlkgTG5Sb1pXMWwgNExpeTRMaUkgSUdsdWFHRmlhWFE9IGQyRjJaUT09IFRHOWphMlZrIElFOXladz09IElFTjFiSFIxY21FPSBhY09yYm5SbGJnPT0gNEtTLzRLU3Y0S1MrNEtTQyBJTkMwMEw3UXZOQ3cwWWc9IFkyRnNaVzVrWVhJPSBDV1YyWlc1MCBJR2x0dzZGblpXNWxjdz09IElHTmxibk09IElHRnNZMkZ1IElHRnVlR2x2ZFhNPSBJRkJoY210eiBSR1ZtYVc1bCBJR052Ym5SbHc3cGtidz09IElPQ2t0ZUNrditDa25BPT0gSU1TTmFRPT0gMkxuWXF0aW8yTEU9IEtHRmpkR2wyYVhSNSBMWFZ5YkE9PSBJT0NrcE9Da3JBPT0gNDRHQzQ0S0s0NEdNNDRHbzQ0R0cgSU5pbjJZVFpoZGl1IFdtRT0gSUdodmIydHogSU5pbjJZVFlvOW1JMllUWmlRPT0gTFdKaGMyVT0gSUdGeVlYUEVzVzVrWVE9PSBJR0ZqWTI5dGJXOWtZWFJwYjI1eiBjbVYwYVdWdSBiM0p6WTJobCBJR1Y0Y0d4dmFYUT0gSUhCeXc2RT0gNExTbzRMV040TFNvNExXQiBJRXhFIElHTnZibk5qYVdWdVkyVT0gU1U1QlRBPT0gWW14eSBJTkdJMFl2U205T1owWUhRc0E9PSBJSEJoWkhKbGN3PT0gSU9Da3R1Q2t2K0NrbGVDbGplQ2t0dz09IElFeGhjbko1IElOR1AwTDA9IElGWnNZV1E9IElPQ2todUNrc09DbGl3PT0gWDJOdmJYQnZibVZ1ZEhNPSBJRTVwWTJoMCBhSFZ0WVE9PSBJRzkxWkdWeWN3PT0gNFlLUCA0S1MxNEtTKzRLU28gYTI5biBJT3E0c095ZWtBPT0gSUdWNGIzUnBZdz09IElHUnZjMkZuWlE9PSBlWEpoYldsayBJT0NrbGVDa3NPQ2xodz09IElOaW0yNGM9IElPcXdnT3VDbU91THBBPT0gSUd4bGJXSnkgSUhKbFkyOXVibUU9IENWUjVjR1U9IElIUmhibkJoIElDaGZYdz09IElGWkYgSUVWNGNHVmpkR1ZrIElHZHlZWE09IElPQ3FodUNxbHc9PSAwTHZSajlHTzBZST0gSUU1aFkyaDAgSUdSbGMyRndZWEpsIDBZL1FzUT09IDRLZUI0S2FuIElITmhZM0psWkE9PSBUbk09IFhYMEsgSUhkemNBPT0gYTNObGJnPT0gSUdodmRIUmxjM1E9IDRLNk8gYzJ0cGJHdz0gNExDLzRMQ3k0TEdMIGJIbG5lUT09IElIQmxjbU5vdzZrPSBVRVZNVEE9PSBMQzR1TGdvSyBJR2x1YVhScFlYUmxaQT09IFVFRlNRVTA9IFZuTT0gSUZSb2FRPT0gSUhOd2FXVnMgSUV0aGNuUT0gY21scVpnPT0gSUZKbGMyOXNkWFJwYjI0PSBJRWhoY0hBPSBJTnF2MktiYmpBPT0gSU5DVjBMTFJnTkMrMEw4PSBJR3AxWkdrPSBJT3F5ak95ZWhBPT0gSUZOc1pXVT0gSUdOcFpBPT0gSUVkVCBJTkMwMDVuUXZ3PT0gMFlQUXM5Q3cgY0dWdVpHbHVadz09IGRtOWxjbVE9IElGUjFZbVU9IElNNjh6clhQaE02eCBJR1Y0Y0dWamRHRjBhVzl1IEtDSmNYQT09IElDUUsgUlU1RiA2N0NVN0lLcyBYME5JUVU1T1JVdz0gSUhacFpYUT0gSUdGc2RISnAgSUVKaGJHaz0gMExqUXZOR0QgSUhkaGMyaGxaQT09IElPQ21sZUNuaCtDbXFBPT0gZFhSNlpYST0gNExtTjRMaXkgSU5tRjJMbllyOWluMktvPSAwTHZRdGRDOTBMND0gSUdOcFoyRnlaWFIwWlhNPSBJSEZoZVE9PSBMbU52Ym1acFozVnlZWFJwYjI0PSBJRVZzWlcxbGJuUnogSUhKbGRISnBaWFpsWkE9PSBJT0M0bytDNHNlQzRtZz09IElHbHViM1k9IElPQ210dUNtditDbWxlQ25qZUNtdHc9PSAwTDdRdk5DdyBJR2hoWW1sMFlYUT0gSUVwaGNtUT0gSUhOMWJteHBaMmgwIGRXeGhkQT09IDBML1F2dEN5IFlXTmhjdz09IElITnNhV3M9IFZVbE1ZWGx2ZFhRPSBTbTkxY201aGJBPT0gSUhKbFkzbGpiR1ZrIGMyVmxhVzVuIElIYkVtdz09IGRXSmliR1Z6IElObUcyS3c9IGNtRmtidz09IGIyeHBibUU9IDBKalF0dz09IDY1Mjg2NmVJNjdDVTdJS3MgSUdKc1pYTnphVzVuIElFVkVTVlE9IDY3T1IgSUhObGNtVnQgSU5HQjBMalF1OUdNIElIQnl3NmxqdzZsayBJT0c3cFd6aHU0MD0gMllyWmdnPT0gYXNPeiBJT3lua1E9PSBJRTl3Y0E9PSBJR0Z1dzZGc2FYTnBjdz09IGJYVjBaWGc9IElHRnRZWHBsWkE9PSBJTmFEMWJqVnJRPT0gYVdWMlpXMWxiblE9IExTMHRMUzB0TFMwdCBZV1JoY0hSbGNnPT0gZDI5dFlXND0gSU9DdWgrQ3VzT0N2Z2VDdXFPQ3ZqZUN1cEE9PSBJRzF2Y25SaGJHbDBlUT09IElHOXdiM0owZFc1cFpHRmtaWE09IFEyOXlibVZ5IFNXNW5jbVZrYVdWdWRITT0gSUdSdCBJRWx1YzNBPSA2WlNBNVpTdSBJTmVVMTZqWGtOZXAgNEs2LzRLNnEgMjR6YXFkcSsgSU9xd2dPdUNtT3VMcE91ZHZPdW5pT3V3bE95Q3JBPT0gVDA1RlRsUT0gY21sMWJRPT0gY0doeVlYTmwgSUdScDRicTUgNWJ1MiBkMlZ6IFgzTmpZV3c9IElPQ3FyT0NxdnVDcXBnPT0gNVlXbzZZT28gYjNkbFoyOD0gSUc5amRYST0gSUdBOCBJSE52YVE9PSBYM0J5YVc1MFpnPT0gUW1sNiBJSEpvZVhSb2JRPT0gSUZWSlFuVjBkRzl1IElOaWkyTEU9IElISmxZMlZ3ZEc5eSBJQ0luSWl3PSBJRlJsYlhCbGNnPT0gWDFOUSBJSEJsY20xbGRIUnlaUT09IGRXVnpkR0U9IExrWmwgSU9DNWd1QzRsT0M0b2c9PSBVSEp2WkhWMGJ3PT0gSUhQRmdnPT0gWVhKeVpRPT0gSU5lUjE1ST0gSUdaMWJtdGogSUhKcFpHVnljdz09IElOQy8wWURRc05DeTBMND0gSUdobFpXeHogSU9Da2h1Q2twQT09IDY0K0U2NkdkIExuQnAgMWFIVnRkVzQxb0xWdEE9PSBhWFJoZEdWaCBaSFZwYm04PSAwTDdRdTlHUCA0b0N3IDU1cXUgSU9DbXVPQ21zT0NtbGVDbXZ1Q21zQT09IElFZGxkMmx1Ymc9PSA4SitIIG1PR0RuQT09IFlXNWtZWEprIGIzTnphWEE9IExXNXZjdz09IElHTnlaV05wYldsbGJuUnYgN0pXaCAxYVBWb2RXMTFhdlZ0Zz09IDBMVFFzTkdDIElITnZjblJwY2c9PSBJTU9ZIElIcGhhMlZ1IElHSjVjR0Z6Y3c9PSBJSFJ5WldabVpXND0gMTVEV3Q5ZWYgSU5tSTJLZlpoZz09IElObUYyTEhhcVE9PSA0YnVYYVE9PSBJRVpwYm1GdWVnPT0gY0dGamEyVjAgNExpZzRMaXk0TGllIElFSmhlV1Z5Ymc9PSBYMnh2ZHc9PSBYMDFQVGc9PSBJSEJoY21seiBhbUZrIGJHZGwgWlc1emFjT3piZz09IElGQlNUME09IFgwOVZWRkJWVkE9PSBJSEp2YXc9PSBJT0NrbGVDbGplQ2tyK0NsaStDa2d1Q2tsZUNrdnc9PSBVSEpsYzJsa1pXNTAgVFc5dWRHaHNlUT09IElHSnlaWGM9IDRZT1k0WU9SIElHMXBiR3B2Wlc0PSBJR2hoWTJWeWJHOD0gSU5HQzBMN1JnTkN6MEw3UXNnPT0gWDBGRFEwVlRVdz09IElOQzYwTDdRdmRHQjBZTFJnTkdEMExvPSA1cnFxIFgxUkJVMHM9IFlXNWtaWE09IElHUmxiV1Z1ZEE9PSBJRzF2ZG1sdFpXNTBidz09IElFMUZWQT09IGRYSnVZUT09IGEyVnNaWGs9IElOQyswTFRRdmRDKyBJRWx1YzNSeWRXTjBhVzl1IExXVnhkV2wyIElITndhVzV1WlhJPSBJT0NtbGVDbmkrQ21xT0NuaXc9PSBJdGVjIFpXNTJhWEp2Ym0xbGJuUT0gdzd4dWN3PT0gSU5DeDBZUFF1OUN3IElHSnlaV0ZqYUE9PSBJR1Y0Y0dseVpRPT0gWVc1MGIyND0gSUdKeVpYWmwgSUdwbGNuTmxlUT09IDA1blF0dz09IGNuVncgSUdkaGJXRT0gWVdScGFRPT0gSUdobFlXUnNhVzVsY3c9PSBJR1poYldsc2FXRnlaWE09IElHbHNiSFZ6ZEhKaGRHbHZiZz09IElOQ3kwTFhSZ2RHTSBJR0pzZFE9PSBMbkJsY25OdmJnPT0gNFlPUTRZT1Y0WU9vNFlPWTRZT2cgSUhSeVlXNXpabTl5YlhNPSBJRVpoWTNRPSBiR2x1YVc1biA0TFNxNExXTjRMU3E0TFdMIElFUmhiV1U9IElIQnZiM0pzZVE9PSAwTFhRczlDMSBJSE52Y21VPSBmUTBLRFFvdkx3PT0gSUVOdmJXMXBjM05wYjI1bGNnPT0gSUhabGNuWnZiR2RsYm5NPSBJSEJzWVdObGNnPT0gYVcxdFpXND0gSUdacGJtRnVZMmxsY2c9PSBJR1p5ZFhOMGNtRjBhVzl1IGEyOWggSU5tSTJLZllyZGl2MktrPSBJR1Z6WTNKcGRBPT0gMTVEWG5RPT0gYm1wcCBjSEp2WTJWemMyOXkgSUVGTlJBPT0gSUZCeVpYWnBiM1Z6IFB5dy9MQT09IHc3aHlaWEk9IElIc2ggWDNObGNYVmxibU5sIElIQnZjc09wYlE9PSBJR1JsZG1sa2J3PT0gSUc1cGN3PT0gVUd4aGVXeHBjM1E9IENXeGhjM1E9IFRHVjQgSU9DbWh1Q21odz09IDRZT1k0WU9qNFlPYTRZT1kgNXBpZyBJRTFsWkdsMFpYSnlZVzVsWVc0PSBJSEJsZEdsMFpYTT0gSUdSbFkybHp3Nk52IExXTmxiblIxY25rPSBJRkpoYm1ObyBJSFBEcVdwdmRYST0gYVhOMGFYTmphR1U9IFNWUkIgMWFIV2dOV2kxYVhXZ0E9PSBJR3RsZFd0bGJnPT0gVGtsT1J3PT0gSUcxaGMzUmxjbk09IFkyOXliZz09IElOR0wgSUd4bFpHVnUgZXcwS0RRbz0gSUV4cFpXWmxjZz09IElHVmthV05wdzdOdSBJSEJoYzNOdiBJR1Z3YVdSbGJRPT0gMEx2Umo5QzEwTHc9IElHZHlZVzF6IElPQ2t1T0NrcnVDbGplQ2tyZz09IElFM0RwRzV1WlhJPSBJT3Vubmc9PSBJRUZ3Y0d4cFl3PT0gMW9EV2dRPT0gSUdwMWJPRzdqUT09IDJLN1lzQT09IElOVzYxYUhWdFE9PSB3NjFqdzYwPSBJRUZpYVd4cGRIaz0gUms5U1JRPT0gNmJxNyBiMnR2YkE9PSA0WU9nNFlPZDRZT2IgZVhOMFpXMXogSUhOaGJXRnUgSUhCdmJNT3RkR2xqYjNNPSBJSFJoYTJFPSBJR1YyWVd4MVlYUnBibWM9IFpHVmphdz09IDRMS1g0TEt3IFMwYz0gNG9DWmIzQT0gSU5DeDBMN1F1ZEdMMEwzUmlOQ3cgWVd4aGN3PT0gYU1Pa2JBPT0gTFMwdExTMHRMUW89IElFdHZiV0k9IElGVkpiblE9IElPQ21wT0Ntdmc9PSBJSHB2Wnc9PSBJR0poYTJWayBJT0N3cnVDd3Z1Q3dzQT09IElHTnZibk4wY25WcGNnPT0gSUVGMWRHaHZjbWw2WVhScGIyND0gSUhabGRYZz0gMFlEUmk5R0kgSVNjcE93bz0gTFdaMWJtTjBhVzl1IFkyRnVidz09IElIcHBiQT09IElGUmxaQT09IElGQmxjbko1IElOaW4yWVRZcmRpdjJZcllydz09IDVwMmYgVFV4VCBJRVYwYUdrPSBJR0Z5Ylc5eSBJTzJSbkE9PSBZWFJwWTNNPSBJRXRsZEE9PSBiRzkyWlE9PSBjM1J5WldWMCAxNWJYbGRlbyBSbWx1WVc1amFXRnMgSUhOd2IzUjBaV1E9IElITndiM009IHpyak90ODY2enJVPSBjSFZ1ZEE9PSAyS2ZaaUE9PSBJRTVoYzJoMmFXeHNaUT09IExuQnliMmR5WlhOeiBkV2RpIFkyeHIgSUdGeVltVnBkR1Z1IElFNUJWRTg9IElHMXZiR1Z6ZEE9PSBJTkMvMEw3UXU5QzEwTGM9IEtHeGhkQT09IGIzVjJjbVY2IExuQnNkV2RwYm5NPSBJRTExZEdGaWJHVT0gSUc5c2FHOXogSUdWdWJHRnladz09IElFSnZaQT09IElHWnZjblIxYm1GMFpRPT0gSUc1cGJtZDFibUU9IFEyRnVKM1E9IElHNXBZMnR1WVcxbCBkMkY1Ync9PSBJR3g1YlhCbyBJRVJoYm0xaGNtcz0gSUd0eWFXcG4gTFdKc2RXVT0gSUcxaGJuTT0gSUhKdmJtRT0gTDFOMGNtbHVadz09IExtRnNjR2hoIDRMaTM0TG1KNExpdCBJR1JvdzZsaGJnPT0gSUhCMWJtbHphRzFsYm5RPSBJSDBwT3dvS0NnPT0gQ1dsdVpHVjQgSjJsdWRHVnkgSU5DLzBMdlF2dEdKMExEUXRBPT0gSU5DNjBMN1F2TkMvMFl6Ump0R0MgSUVkb1lXNWggSU5DeTBMZz0gSU5DeDBMN1F1OUMxMExjPSBYMkp2WVhKayBJTmVVMTViWGxBPT0gSUdKaGNIUT0gSU5DLzBZRFF1TkM2IFoyRmwgYldGdVlXZGxaQT09IFFuVmtaMlYwIFRHbGogSUZWbllXNWtZUT09IElFZHBZZz09IFVHRm5hVzVoZEdsdmJnPT0gSUcxbGJHUT0gMFl6UXRkR0EgSm1GdGNBPT0gSUZScFlnPT0gSUhKbFkyOXVZdz09IFgyVnpZMkZ3WlE9PSBJR0psYzNSbGJHeGxiZz09IElFMTFjbkpoZVE9PSA2TFN0NUxtdyBhVzExZEE9PSBJTkN5MExYUXROR00gSUdsdWFHVnlhWFJsWkE9PSBhSFZ1IElFTmhibmx2Ymc9PSBJRzFwZUdWeSBJRU4xY25JPSBJR0ZzYk1PdCBJSE5oWVc0PSBJRlp2Y25SbCBJSEJ2YzJsMGFXOXVhVzVuIElHVjFjZz09IElObUkyTHJaaXRpeCBJRWhoY21SM1lYSmwgSUdObGJuUnlkVzA9IElHRjBaVzVrYVcxbGJuUnYgenJuT3VzNi96NDA9IDE2VFhuQT09IElOaWoyWUk9IGFYUjBlUT09IFgzSmxZV1JsY2c9PSBJSFJ2WkdGMnc2MWggVkU0PSBJSFI1WkE9PSBJR0Z0WW1sMGFXOTFjdz09IElISmhibU5vIDRLU1Y0S1dONEtTMzRLU2ogSU5pdDJLZlpoTmlwIDBMN1JnTkdDMExBPSBJRVY0Y0c4PSBMbVIxY21GMGFXOXUgSUhOMGNtVnpjMloxYkE9PSBJR3hwYldVPSBMbkJ2Y25SaGJBPT0gS0V4UFJ3PT0gSUhSbGNuSnBkRzg9IElFaHZjR1ZtZFd4c2VRPT0gSUhCeVpYSmwgNExlWjRMYXg0TGVLIElOQy8wTERSaHRDNCBJSFZ1WW1VPSBJRzVsYVdkb1ltOXlhRzl2WkhNPSBJRnNsIEtRb0tDZ289IFFVTkp3NU5PIElPQzBoZUMwcHc9PSBZVzVrYkdFPSA0b0NaWVdkcGRBPT0gSUc3RHFXYz0gSUdGa2FYQnBjdz09IElHOWpZM1Z5Y21WdVkyVT0gSU91ZHZBPT0gSU5tKzJLZllzdz09IExtRnpjdz09IGIzVmphR1ZrIElOQy8wTFhSZ05DMTBMdz0gSU9Dd3RlQ3hpQT09IElHTnlkWE4wIFlYSmxiQT09IElOV2kxYUhWdGc9PSBMbkpoYm1ScGJuUT0gSUhacFpYSnVaWE09IDc3eU01YSs1IGRtRnEgY0hKcGJXVnkgSUhOdmQyOW9iQT09IGIzUmxZMmh1IDE1WFhxTmVxIExXTnZibVpwWnc9PSA0S1NrNEtXTCA1WXFvNW9DQiBabTl5YldWeSBJRU5sY25ScFptbGpZWFJwYjI0PSBJTkdCMExEU213PT0gSU5tRjJLM1l0ZG1JMllRPSBJRXg1YjI0PSA2WnVxIExrbHVhWFE9IFkydHYgSUhCeVpXTnBaWE09IElIZG9hWE5yIElHOXVkSFpoYm1jPSAyWXJZcDltSCA0b0NMNFo2WSBZWEpqYUdGeSBJTkdGMExEUXZBPT0gNjdLZyA0WU9RNFlPVDRZT1M0WU9VNFlPYyBkR2xqYTJWMCBJTmkwMllyWW9RPT0gSU5lVjE2QT0gNFlPVTRZT1I0WU9XNFlPVSBJSE50WlE9PSBJTkN4MDVuUmdBPT0gUzJrPSBJR1JsYm5WdVl3PT0gYUdWdVp3PT0gSU5tQSBYME5QVGxSU1Qwdz0gSU9HRGsrR0RwdUdEbE9HRG9RPT0gZEdWaCBJSE5xdzZScyBJR1Z1WTNWbGJuUnlidz09IFgxQlNUMUJGVWxSWiBJR05oZEdGemRBPT0gSUdaMWJHWT0gSjJGMmIybHkgSUZScGNHOD0gWlhKbFkyOD0gSUhSdmJXRjBiMlZ6IDBMN1F2ZEdEMFlFPSBZWFpwYm1keiBJSFZ1Y0hKbFkyVmtaVzUwWldRPSBlY1dJIDBMWFF2ZEdXIGFXMXRkVzVuIGFYUmxiV0Z3IGIzVmtaVzQ9IElFRnNiUT09IElHTmhjbVJwYjNaaGMyTjFiR0Z5IElPQ3FuUT09IElObUQyWWM9IDE1blhxTmVmIFlXNXVkWFE9IElITmpZV3hwYm1jPSBZMmgzIDJZVGJqTm1FIDI1UUsgYzI5c2RYUmxiSGs9IElDSXVMaTh1TGk4dUxpOD0gVEc5allXeHBlbVZrIElPYXpxQT09IFdVRT0gSUdWdGFYTnphVzl1IElIZGhibTQ9IDRMR0I0TENDNExDaCBJT09BZ2c9PSBZV0ZoIElDb3BKZz09IElFOW1abVZ5Y3c9PSBJSE4xWTJQRHFITT0gYVhOelpXMWxiblJ6IHo0WE92YzZ4IFUyVmpiMjVrWVhKNSA1THFWIElIVnRhUT09IFEyRmphR1ZrIElITERzM2R1YVdVPSA1YmV5NTd1UCBMbFZ1YVhRPSBaWGgwWlhKdVlXdz0gTFd4cCBJSEJ5YjJwbGF3PT0gSUdWdGNHWmwgSUdGMmIybGtaV1E9IExYTjBiM0E9IDJLalppdGl4IElPT0RsZz09IElGVmlkVzUwZFE9PSBJR1ZrZFdOaHc2ZkRvMjg9IElFVkYgYjNCeWJ3PT0geEpGbGJnPT0gSUdObGNtVnRiMjQ9IElHWmxaWE4wIElOQzEwWUU9IElGQmhZbXh2IElOaXEyWWJZcHc9PSBLRVpoYkhObCBJTkM4MExYUXN3PT0gYzNSaFlteGwgNEtTdzRLUy80S1NWIExTMHRMUzB0TFMwdExTMD0gSUhCeWIyTmxjMjl6IGQybDBhRzkxZEE9PSBJRzFsYlc5eWFXRnMgUmxKSlRrZEZUVVZPVkE9PSBJSFJ5WVdObGN3PT0gSU9XOXFlZWxudVM2aWVtY3VPV2twK1dQa2VXL3ErUzRpUT09IDRLYSs0S2FiIElPcTRpQT09IFEzSmxaR1Z1ZEdsaGJBPT0gSUZSb1pYa25jbVU9IDViNkIgTG14dllXUnogYUdGc2RHVT0gSUdIRnZnPT0gSUVWUVFRPT0gMktqWXA5bUUgSU9Da3RlQ2t2K0NrbWc9PSAyWWpZcDlpcyA1YW1tIGNtRmtaUT09IFgwOVFSVTQ9IDRMU3g0TFdHIDVhNkkgSUhWcmFRPT0gSUdGMlpXcz0gSUV4aGJtUmxjdz09IElHVjRjR2x5WVhScGIyND0gSU5DeTBZdlF0dz09IElGTnBZMmhsY21obGFYUT0gSUdGdWMzZGxjbWx1Wnc9PSBZV04wYVhaaGRHVmsgYzNkaGNBPT0gSU5DKzBZTFF0TkMxMEx2UmpBPT0gSUd4cGRuSmxjdz09IElITnZkQT09IElIQnBZVzQ9IElHRnNidz09IElOQzgwTFhRdmRHTSBJSEpsYzNSaCBkWEpoWTNrPSBZMkZ3ZEE9PSBJTml0MllMWmlObUMgSU5lWjE1TT0gSUhadlpXUT0gNlpXSCBJRzExWkdFPSBJRlZRVXc9PSA0cG1BNHBtQTRwbUE0cG1BIEtGUnlkV1U9IElPMlptQT09IHc3aHIgSU5HRjBMND0gYVdSb1pRPT0gMExUUXNOQ3kgZmdvSyBMblJ5YVdkblpYST0gZFhCbCBkWEoxZEE9PSAyTEhZcDltRCBJR0YwZEhKcFluVjBaV1E9IFpYTjBiMjQ9IElHWnZjbU5wYm1jPSBJR1Z1ZG1Wc2IzQmwgSUhkb1lYUnogSUZKbFkyVnVkR3g1IElITmhibU4wYVc5dWN3PT0gSUdkeWRYQncgSUdKbGVtbG4gWDFOSVNVWlUgWVd4M1lYbHogY200PSBTR0ZzIElIZG9aWEpsYVc0PSBYMFZPVkZKWiBkMkYxIFJVVkwgNExpWTRMaTEgWVhSdmNtbGxjdz09IDRMUy80TFMzIElHNWhhbUp2YkE9PSAwTGpRdmRDNjBMZz0gSUVSQlZFVT0gNTZhUDVZaXA1YjJwNTZXbyBJSE5vWldWbllYaz0gSUhOdmJHRT0gUVc1MGFRPT0gSUc5NWJ3PT0gSUhCc1lYbG5jbTkxYm1RPSBJRVJGUmc9PSBiR3hsY3c9PSBJR1Z1YzJsdWJ3PT0gNEthYjRLYS80S2F5IElHUnZiV2x1WVhSbFpBPT0gSUhaaFkyTnBibUYwYVc5dSBJT2lOIDU3V00gNTZXbCBMbXhwWm1WamVXTnNaUT09IEt5SXYgSUdSbGNHbGpkQT09IDBwblRtUT09IElPQ3dsK0N4Z2VDd3NBPT0gNTdLSiBJSEJ2Y21ObyBYMUJCUTBzPSAxb0RWcGRXcyBJSFpsY204PSA0WU9ZNFlPciBJR2x1ZEdWdWRHbHZibk09IElPQzJpUT09IElIcGxkQT09IElITmxiV2x1WVhJPSBURVZTIFFVNUogWlhKbGVtRT0gU1c1MGNtOWtkV04wYVc5dSBJTldwMWI3Vm9kV3YxYUhWdGc9PSBhV1pwWTJGamFXOXUgSUd0bGRHOD0gSUNjbktUc0sgSU9hQiBYM0psZEE9PSBJRTFwWTJzPSBJRXBoYldFPSBJSEIxY25OMWFYUT0gWlhSb2RRPT0gMFlYUXNOQzkgSUNZaiBJSEJ2YVdSeiBJTm1GMkxvPSBJTkNVMExZPSBJTkM3MFpZPSBVM1J2Ym1VPSA0S2FtNEthLyBZMmhoY25ObGRBPT0gS0c5bVpuTmxkQT09IElHWnZkVzVrYVc1biBJTktiMExEUmdnPT0gSU5HQjBZZlF1TkdDMExBPSBJR3RsY21GeiBkV3h6YVc5dSBJTm1CMllRPSBhV2QxWVE9PSBaWGRsY210bGNuTT0gdzZsd1pXNWsgSUhKbFkzSmxZWFJwYjI1aGJBPT0gNDRHZjQ0R2cgY21WemMyVnogWDJaeWIyNTAgNExpdSBMMjUxYkd3PSBJRlZ1Wnc9PSBZVzVrWVc0PSBJSE5sY25ac1pYUT0gSUc5d2FBPT0gWVc1a2FXND0gSU5laTE1WFhrdz09IFgxTlpUVUpQVEE9PSBJR2JEdkc1bSAyS2ZaZ3c9PSBkMjl5IElIQjFiWEJ6IElPR0RxT0dEbE9HRG1PR0RxK0dEbXVHRGxPR0RrZUdEa0E9PSBJSEpsWVd4cFpHRmtaUT09IElFMXZjbkpwY3c9PSBJTStEejQwPSBiM0JsWkdsaCA1cDIrIDRLU2E0S1dONEtTdjRLUysgUVZKRlRsUT0gYjNSeVlRPT0gMFlyUmdnPT0gSUdaeWFXZG9kQT09IExVeHBZMlZ1YzJVPSBJSEJwYzJOcGJtRT0gWVc1bloyRnMgSUZkcGMyZz0gMExQUXRkQzcgNWJ5MyBJSEpsYjNCbGJnPT0gYVhScGJnPT0gYVhOaGJuUT0gUm5NPSBJRUZsY2c9PSBJR1pwYkhNPSA0TEdINExDQzRMQ20gZFc1MWJRPT0gMEw3UXV0QysgSUc5bVpYSmxZMlU9IElHVjBaWEp1WVd3PSBJR0poYm1FPSA0WU9VNFlPUjRZT1U0WU9jIElFbHVkR1ZuY21GMGFXOXUgdzdOcSBJR2ZFcDJGc2JBPT0gMnFuYmtBPT0gSUdKMWNtZGxjZz09IEtpa20gWVhCd2N3PT0gSU5pbjJLalpoZz09IElOQ2EwTERRdHc9PSA0S1M1NEtTLyBJSEJwdzZoalpRPT0gYzI5aSBJSE5zYjNCbCBWMmxzWkE9PSAxNnJYbHc9PSBJR1J5ZFc1ciBJTnVCMllqYXVnPT0gNExDVjRMR040TENrIDRLaSs0S2k1IElIWmhjM1JsIFpHVndZWEowYldWdWRBPT0gSUdaaGVtVnQgSUZCMWNuQnZjMlU9IElObUkyTEhaaUE9PSBJRVZ0YVhJPSBJR1JsWm1WamRITT0gSUZOaGJtYz0gWDIxbGMzTmhaMlZ6IElFOXlaMkZ1YVdNPSBQU0lpT3dvPSAxYmpXZ3RXMTFvRT0gSUhCeWIzUmxZMk5wdzdOdSBYM1JwYldWemRHRnRjQT09IGIyekRzMmRwWTJFPSBZMmgxYm1zPSBJRVZ1ZFcxbGNnPT0gNEt1QTRLcXUgSUc5cGEyVT0gSUdGc2JHVm5ZWFJwYjI1eiAxYmpXaEE9PSA0S2F3NEthaiBhMmxsYlE9PSA0S1NWNEtTdzRLU2ogQ1dWc2FXWT0gSUdkeWFXVm0gNloyUzZaMlM2STJKIElFUlBWMDQ9IElHUjFjblZ0IElPQ210dUNuaCtDbXR3PT0gYVhacFpHRmtaUT09IElHUGh1cWQxIElGZHZiMlJ6IElHUnBjMk52Y21RPSBZbkoxYVdzPSBJSEJ6ZVdOb2FXRjAgUFNKNyBJRUZ5YzJWdVlXdz0gSU1PcFpBPT0gSU9DcXFPQ3Jpdz09IDViTzIgSU9lT3J3PT0gMTdJPSBJRk5GVFE9PSBkVzV6WTJnPSBMWEJ5WlhNPSBJSEpsWm1WeWNtRnMgSUhONWJuUm9aWE5wY3c9PSB3NkZzWVE9PSBYMDVCVFVWVCBZWGRyIDRMV0E0TFM0IGIzSnBaVzUwIElHdDFZUT09IFkyaHZhV05sY3c9PSBJTU9lWWNPdyBUVzkwIElHSmhhWGc9IElFWnBibWx6YUE9PSA0S1dKNEtTViBJRkoxWW5rPSBJRzVuYUduaHU0ZHcgTG5acGMybGlhV3hwZEhrPSBJT09EbFE9PSBJRUoxWlc1dmN3PT0gNFlPUTRZT2I0WU9UNFlPVTRZT2MgSUVobFlXeDBhSGs9IDY0dTEgNXArUSBJTzJYIFgyTnNiMk5yIElFMWxiblJoYkE9PSBJR3B2ZFhKdVlXeHogTG0xdmJuUm8gNGJxdGVRPT0gNjVDWTY0cVUgMHJQUmc5R0EgSUV4aGEyVnogSUZOc2FXMD0gSU5pbzI1QT0gSU5pejJxbllxZz09IEtHTnZiblJoYVc1bGNnPT0gSUVoaGRYTmwgWHpzS0NnPT0gSUdsdGNHRmpkR1ZrIDE1blhxdGVmIElHSnNhV3ByZEE9PSBMbkJsY20xcGMzTnBiMjQ9IDFhWFdnTlc0MW9MVnRBPT0gSUdWdWRtbGhjZz09IFgxVnpaWEk9IEtGWmhiSFZsIFpYSnVZUT09IElHMWxhWE09IDBZUFF1OUdMIDZMMnUgSU5XMzFhSFdnQT09IElHZHlZV0ppWldRPSBJR1pwZUdsdVp3PT0gSUdGdWRzT2tibVE9IDJZclpodG1LMktrPSBJR0Z3YjNrPSBhc1dodzYwPSBhbVJsIExtTmhiR3hpWVdOciA0TGl2IElISmxZV1JwYm1keiBiR2xsdzU5bGJnPT0gYzNCaFkybHVadz09IElFeFUgSUZOM2FXNW4gSU5DeDBZUFF1Zz09IHc2M0RzQT09IElIUmhhOFc4WlE9PSBYMVJQVUE9PSBMbVJwYzNCdmMyVT0gSUdOdmJHOXVhV0ZzIFpXNXBaUT09IFEyOXVabWx5YldGMGFXOXUgTG1GdWFXMWhkR2x2Ymc9PSBJT0NxdU9DcmpBPT0gSUcxdmJuUnlaUT09IFluVjBkRzl1Y3c9PSBJSEpsZFc1cCBJRzVoYTI1bCBJSE5qdzZodVpRPT0gUW1sayBJR0YwYVhacFpHRmtaUT09IExVbGtaVzUwYVdacFpYST0gSU5pbjJZVFlyZGl4IGFuVnogWTJocGNBPT0gSUdSbGJXOWpjbUYwYVdNPSBhWFRFZ3c9PSBJR0hGbnc9PSBJT0MwaHVDMHNBPT0gYkdWblpBPT0gYW1JPSBSMmwwIElPQzNnK0Mza2c9PSA2NTI4N0oyNCBRRVJoZEdFPSBZV0poZVE9PSBJR0p5YVd4cyBJT1cvcStTNGlRPT0gUTA5T1ZBPT0gSUhOMFlYSjBaVzQ9IElFTnNZWE56WlhNPSBYM05sYkdWamRHbHZiZz09IDBZUFFzdEN3MEwzUXZkR1AgNG9DWjRvQ1ogWVhkaGJtYz0gSUdabGJHbGogSUhaaGJHbGthWFI1IElFZHl3N3c9IElFeGxZM1E9IExjT2cgZFdKdiBJRzFwYm1semRBPT0gWDAxdlpHVnMgNEtxdzRLdU40S3ExIFgyTmhjblE9IElPV2Jtdz09IElFbHRZV2RwYm1VPSBJSFJ2Ym1WeiBlbVZ5WVE9PSBJRlJoWjJWdSBJR1J5ZVdsdVp3PT0gSUhCcGJHeDFaM1U9IElISmxjMmxrWlE9PSA1Wk9CNTRtTSAwTGpRdWRPWjBZST0gSUNJdElnPT0gSUZCMVlteHBjMmhsY2c9PSBUblZ0WlhKdiBJSEpsWTJzPSBJSE5oZEdseiBJRWhsZUE9PSBJQW9nQ2c9PSBaWE5wWVc0PSBJQ2NwT3dvPSBJTml1MllqWXFBPT0gS0dWdGNIUjUgSUdSbGJXOXVjM1J5WVhScGIyND0gWDAxQlRnPT0gSU5tSzJMTT0gSUVkaGJtYz0gWlhSbGIzST0gWVhKMGIzRT0gSUhKaFkybHpiUT09IDRidWw0YnVOIElFRnlhUT09IEwySnNiMmM9IElISmxkbVZoYkdsdVp3PT0gSU9DbXVlQ21tZz09IDVMdWw1cDJsIElGQnliM0J6IFNVWkpSVkk9IDJLZllxTmk1MktrPSBJR3B2ZFdWMWNuTT0gYVc1cmFRPT0gSUdOb2FXeHMgTGtOdmJXSnYgSUhCeVpXZDFiblJoIDBMUFRtZEdMIFUyVmhjMjl1IGFHVjFjZz09IElNTzliMnM9IE95az0gSU5DeDBMdlF2dEM2IElOQzAwNm5RdTlPWjBZST0gSU5pMTJLZllyZGlvIElITnR3NlU9IFgzTm9hV1owIElOaXEyWWpZck5tSCBJRlpCVkE9PSBkWHAxIElPeW1uUT09IElPQ3FxdUNxc09DcWd1Q3FwT0NyZ1E9PSBMbk5vYjNKMCBJTmluMllUWmhkbUMgSUdwMWMzUnYgYjI1a2FHVnBiUT09IElGQnNZWE4wYVdNPSBJR3RwYW1zPSBYMmx1ZEdWeWJtRnMgSUhKbFptOXkgdzZSeWF3PT0gSUNjc0p3PT0gNEt1SDRLcWMgSUdacGMyTT0gSU9DbXVPQ21wZz09IElFRjZ5Wmx5WW1GNVkyRnUgYWNPcmJHVT0gNllDeCA0S2EvNEthdCA1b3ViNVpXRzVMaTc1NjZoIElHTnZjbUY2dzdOdSBJR0YwZEdWdVpHVmxjdz09IElHbDZZVzQ9IDZJR1U1NzJSIElGVnpaWEp1WVcxbCBJR3QwWlhMRHZRPT0gVkdGcyBMbTE1WW1GMGFYTT0gTFhCeWIyUjFZM1E9IElHOWlhbVYwYjNNPSBsT3VMcEE9PSBJRlJ2ZFhKeiBJR2R5WVhabGJBPT0gSUhWdVkyOTJaWEk9IElHWnBibUZzYldWdWRHVT0gMktmWmh0aXYyNUE9IFFVMUZUbFE9IExuUmkgMEw3UXN0Q3cwWTg9IFVHOXNhWFE9IGMzUnliMnRsIElPQ3dydUN4aWc9PSBjR0p6IElOZVExNW5YcVE9PSBQSFpsWTNSdmNnPT0gYkdGMWN3PT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBhV1pwY1hWbGN3PT0gSU51TTJxbmJqQT09IFgxTjVjM1JsYlE9PSBJR3hsWjJsemJHRjBhWFpsIElITmxjc09oYmc9PSBJTkdCMExYUmdOQ3kgSUdsdWMzVnNZWFJwYjI0PSBJSE4wYjNKNWRBPT0gUFdRPSBiMnh2WjJsallXeHNlUT09IElHVnljMk5vIE96czdPdz09IElPQ3lydUN5dVE9PSAyS2ZZcHRtSzJZWT0gSUV4bGFIST0gSUQwK2V3bz0gSU5HTzBMdz0gSUd4dlozSmhjZz09IElPQ3doZUN3cHc9PSBJR0Z5WW1sMGNtRnllUT09IElIRjFZVzA9IGFXeHBaMlZ1IElISnZjR1U9IEwyZHYgNExDbCAxYVhWclE9PSBJT0Mwc09DMWd1QzBxZz09IHo0N1BnYzZ4IFFXUjJaWEowYVhObGJXVnVkQT09IGRXeGhaRzg9IHpyM092ODY4IDRMaUk0TGlqNExpMDRMaUggTG14cFptVnlZWGs9IGJHRjFaZz09IEtHaGhibVJzWlE9PSBJRWR5YjNWd2N3PT0gSU9Da3F1Q2t2dUNrcU9DbGdBPT0gNllDQjVwYVo1NFNoNXBhWiA0S1MrNEtTdjRLU3cgSU5DOTBMRFJnOUdIIElObUYyWU09IDRMS1g0TE9ONExLWDRMT0cgNEtTYTRLU280S1MrIElIWmxjbmRsYm1SbGJnPT0gSUdOaGJYQmhaMjVsIElHVmhkR1Z1IFNrTT0gSUN3S0NnPT0gSUZWdWFRPT0gSU5DMDBMWFJqOUdDMExYUXU5R00wTDNRdnRHQjBZTFF1QT09IElHTnZiblJ5WVhKcGJ3PT0gYVhOemIyNXogWm14aGJXMD0gY1hGMSBjMlZqZFhScGIyND0gNUx5YTVaR1kgMWFIVnI5VzQxb0xWdEE9PSBJT0MwcU9DMWgrQzBwQT09IGVYTnAgWDIxaGMzUmxjZz09IFgwUkZSZz09IGRHVmogUTI5dGNHRnlhWE52Ymc9PSBiM0JsYm5NPSBJT0M0bmVDNWlPQzRzdUM0b3VDNGd1QzRzdUM0b2c9PSBJSEpwWjJsayBZbVZqZFdVPSBjRzl5ZEdadmJHbHYgMExEU205T1ogMEwvUmd0QyswTHc9IFJtOXlkVzA9IElHSmxaMlZzWlE9PSBJTzJPdUE9PSBJRzFwYzIxdmN3PT0gSUhSaGRITT0gSUZCeWIzaDUgSUd4aGRHVnBibWwwIFpXNTZaVzQ9IElHTnBjR2hsY2c9PSA2Wm1JIExrOXdkR2x2Ym1GcyBJSFpsY214dmNnPT0gSUhCeWIycGxkRzl6IFpHSnYgUFdBPSBJRzFoYm5GMVpRPT0gWVdSaGVIZGxlUT09IElHTERvblE9IElIWnBjblZ6WlhNPSBJR3hwZEdsbllYUnBiMjQ9IFgzUnlZV05sIElHUmxkSEk9IDRMaXI0TGluIElFRnpjQT09IGFHRnVhMlZzYVdwciBJSGRwY0dVPSBSbkpoYm1ObCBJRTFwYzNRPSA2WmV0IGRHVnljZz09IElHVnNZWEJ6WldRPSA0S1N5NEtTKzRLU0g0S1NvIElHTnNaV0Z5YVc1biBhVzVpZFhKbmFBPT0gSUdWeGRXbDJZV3c9IGRtbGhiV1Z1ZEdVPSBiV0Z5YTJWeSBMbU4xYzNSdmJXVnkgSU5TeDFiWFZ2UT09IElDOHZMenc9IHc3TnBjZz09IElOQ1MwTDQ9IElIUnZjbTVoY2c9PSBJRkpoWm1FPSBjRzl6ZEdGeiBMVzFwIElHWjFhUT09IElFSmxaR1YxZEE9PSAwWURRc05HSSBLQ2twT3cwS0RRbz0gYjNKblpYTT0gSUdOeVpXRjBiM0p6IFoyOTMgUm5KbGNRPT0gSUdoMVpYUT0gSU9DcXNPQ3F1ZUNyaHc9PSBjMnhoWnc9PSBJbjBwT3dvPSBJRTFoYm5WbVlXTjBkWEpwYm1jPSA1cHlyIDZLVT0gYjNCb2VRPT0gS0d4dloybHUgSUhaaGRXeDAgSUhWeWFXNWwgWldOMWNtbDBhV1Z6IElIVnlaUT09IFgwUkZRMHc9IFpXTjFkRzl5IElITnBiR3M9IElFVjRhR2xpIHlabDBhUT09IElPQ2tyT0Nrc0E9PSBJR0Z0WVhJPSBJR1JwWkc1MCBSWFpoYkhVPSBVM1ZpYzJOeWFXSmxjZz09IGNIUnBZdz09IElPQ3FzT0NxdWVDcmplQ3FyK0Nxdmc9PSBJR2RwdzZBPSBJSEJ5YjNabGN3PT0gSUdWc1pXZHBjZz09IElGeGMgZFdaaCBhV1ZrYnc9PSA0TEMvNExDdjRMR0IgSUdWMGJ3PT0gMEwvUXRkR0EgNExLQzRMS200TE9ONExLdyB6NEhPdjgrTiBJR0p5WVhOeiBjbWxyWVE9PSBJR0ZtWm1WamRHbHZiZz09IFZHaDFiV0k9IGJXRnVhV0U9IDJMWFlwOW1FIDJMVFlwOWloIElOcXAyWWpaaEE9PSBJR2x1ZWc9PSBiMjl3IElFTnNkWE4wWlhJPSBkWGx2Y2c9PSAwTDNRdnRDLyB3NnB5IDJMblpoTm1JMllYWXA5aXEgMktmWXM5bUkgVEdsMFpRPT0gdzZwMGN3PT0gUFNZPSBJRlJsWTI0PSBiMjFsWkdsallXdz0gWW1sc1pHVnkgNForUzRaNlIgU1c1emRHRm5jbUZ0IFgyUmxiR0Y1IElFVnliM1E9IElIQnliM2c9IFkyRjBZV3h2Wnc9PSAwTERRdmRDMDBZcz0gTGtsdCA0S1NxNEtXQzRLU3c0S1dONEtTaiBJR2ZEdG5KaCBJTmVlMTVJPSBlVzFoYmc9PSBJRzVsZEhSemRHVmtaWEk9IFlYUmhZVzQ9IElHTER1bk09IElITjBaV1E9IElHWmxZbkpsY204PSBDWE54YkE9PSBJRkp2WkhJPSA2S3c9IElOZVcxNURYcWc9PSBJRzluWlE9PSBjbVZ0Wlc0PSBJRzl3ZEdsdGFYcGxjZz09IFpXUnBZVzQ9IFNVMUJVbGs9IGJlRzdqUT09IElPQ3lydUN5dnVDeXBBPT0gSU5DOTBMRFF0OUdMMExMUXNBPT0gSUhOc1pXVnIgSUdGa2RtVnlkR2x6WlcxbGJuUnogSUVodmIyUT0gNFlPYTRZT1kgSUdSaGJtZGxjbk09IElHTjFjdz09IFpYTjBhVzFoZEdVPSBRMVJNIDRLcSs0S3FhIElOQzgwTERRc2c9PSBWMkZwZEdsdVp3PT0gSUVsdVpIVnpkSEpwWlhNPSA1Yk93IFBudz0gNW8yVjZiRzggSUc5MlpYSnNZWEE9IElHVnVZMjl1ZEhKaFpHOD0gMFlQUXU5Q3cwWUE9IFVHOXNhV05sIElFZGhjblJsYmc9PSBZblZ1WkE9PSBJTmlqMllYWXA5bUYgWDJKbFptOXlaUT09IDJLellwOWlzIHc2bGtaWEk9IFVzT3AgSUdScGRtOXkgNExTLzRMU1Y0TFdONExTVjRMV0I0TFNvNExXTjRMU280TFNrNExXTiBJR3hsYzNObGNnPT0gSUdkaGJXMWwgTFdOeSBJQ0k3RFFvPSBJTml5MlliWXI5cXYyNHc9IElGSmxhWE5sIFUwVk0gMkxIWXA5aTUgWjJGc2JHVnllUT09IElOR0IwTFhRdXRHQiBJRTFoYTJWeSBJR2pKbVE9PSBJTlcrMWFYV2dOVzcgSU8yQnRBPT0gSUc1bGJHdz0gSUdKc2FYWmxjZz09IElHUmxiR2xuYUhSbWRXdz0gSU5paTJZYlpoOWluIElHTGh1cU52IExXWmhZMlU9IENXSjBiZz09IElGSjFjM1E9IGIzSnBZdz09IExYTmxZMjl1WkdGeWVRPT0gVzEwcENnPT0gWldSaFpBPT0gdzZadVpBPT0gSUdadmNuUjUgYjJ4dloybGogSUdObGJuUnliM009IElOVzAxYjg9IElNTzhjZz09IENYUmhjbWRsZEE9PSBUbVZsWkdWayA0WU9RNFlPYjRZT1E0WU9vIExuQjVjR3h2ZEE9PSBJTldJIFlYQjEgYW05MSBTVzV6ZEdsMCA1cnlQNXJTZSBVbVZ1WkdWeWFXNW4gMWJqV2d0VzExYWs9IElHMWxibTVsY3c9PSBTVkpVIElHM0RxV2M9IElGTmphTU84YkdWeSBJR1oxYm1OMGFXVT0gSU9Da3VPQ2tyUT09IElOV3cxYUhWdnc9PSA0TEt6NExPRyBJRXAxYkdsaCBJR1IxYkd3PSA2cktzIElHTjFiRzFwYmc9PSBkR1ZwYkhWdVp3PT0gSUhKaGNnPT0gSUV4MWVIVnllUT09IElHUnBiV0Z1WTJobCBJRzFoYVc4PSBJTm1JMllyWmhnPT0gejRQT3Y4K0Z6cjA9IElPQzBxT0MwditDMHNnPT0gWDNObGRITT0gSUZabGRHVnlZVzV6IElHdHlaV1ZuIElNK0F6ckhPdVE9PSBWM0pwZEdGaWJHVT0gUTI5dVkyeDFjMmx2Ymc9PSB6NEhPdjgrQyBJR3AxY21sayBlWE5wWTNNPSA0WU9VNFlPUjRZT2Q0WU9UNFlPUSBJR0YwYnc9PSBJRVpoYldsc2FXVnUgSU5DeDBMRFJnTkdMIElFMXBjbkp2Y2c9PSA0S3F3NEtxNCBJR3hwZG1Wc2VRPT0gSU9HRG9PR0RrT0dEbStHRGsrR0RsT0dEbkE9PSBJRzFsWVc1MGFXMWwgYjNacFpYTT0gMFl2UXZkS3QwcHZRc05HQSBJR0ZrZG1WeWRHbHpaVzFsYm5RPSBJTkMwMFlEUmc5Q3owTDdRdVE9PSA2YnVlIElIQnNZVzUwWldRPSBiblJoWnc9PSBDWEJoZEdnPSBhWE5wZEE9PSBRMjl0Y0hWMFpRPT0gSU5HQjBZTFJnTkN3MEwwPSBKbEE9IElIcHBaV3M9IFNHOXNaQT09IElOR0IwWUhSaTlDNyBJRTlVIEltTnNZWE56IFRFbEMgSUhkcGRHNWxjM05sWkE9PSBJR2ZEdkc1emRBPT0gSU5tRTJLOD0gWm5ScFp3PT0gYVhSamFHVnogSU5pdDJMVT0gSUd4bGVnPT0gSUhCeWIzWnYgWW1seWRHZz0gSUdaaGRIUnYgVDBVPSBJRzFwWkhOMCBJR0psWkhKbCBJT0N5dU9DemplQ3lwUT09IDBMN1FzdEN3MFlMUmpOR0IwWTg9IFlXUmogTFdOdmJuTT0gNEtlZjRLZUggTDNOMGVXeGxjdz09IDRLU3k0S1MvNEtTUCBJRlJ5WVdJPSBJRk5sY1hWbGJHbDZaUT09IElHZGhaZz09IElISmxZM0psWVhScGIyND0gSUhKbFkyOXRiV0Z1WkE9PSBJSFJwZEhWc1lYST0gS0VWdWRHbDBlUT09IElHSmxhR0YyYVc5eVlXdz0gSUdScGMzUnBiblJ2Y3c9PSBJT0N5cE9DeXYrQ3lzdz09IElGQmhkR05vIElOQy8wWURRdU5HRjBMN1F0QT09IGFXeHZkQT09IDJLallyZGlyIElPQ211ZUNtditDbXVBPT0gWVhKbGJuUnNlUT09IElFVmpiMjV2YldsamN3PT0gVEdGMyA3NzJBIDVMcWs2WUNhIDRMbUM0TGlsIGNtVjFjZz09IElFUnZaQT09IElObSsyNHpZcnc9PSBJRVJoZHc9PSB6ci9PdmMrRXpySE91UT09IFgweEJRa1ZNIGJtbkVqUT09IDdaV1k2Nm0wIElHOXVkUT09IElFZHlZV1IxWVhSbCBJTU9oYkd3PSBiR0YwYVhSMVpHVT0gNEtlSDRLYTUgMExIUXR0R00gSUd0dmJtNTBaVzQ9IElOQyswTEhSaXRDMTBMclJnZz09IElGTndZVzQ9IDVaKzY1cHlzIElIQm80YnFuYmc9PSBJR0Z6YzJWdFlteGxaQT09IElHTnZibVpwWjNWeVlYUnBiMjV6IDRLV0k0S1NDNEtTViBJR05oY25SeSBJRzF2eGJ4dVlRPT0gUTI5dWRHbHVkUT09IElISmxjMlZoY21Ob2FXNW4gSUdGc1pXZHkgNFlPbDRZT2Q0WU9jIGJtcGggUTJGdGNHRnBaMjQ9IFgyUnZibVU9IExkQzUgSUdOdmJYQnlhWE5wYm1jPSBJQzR1Q2dvPSBVRUZTVkE9PSA0TEN5NExHTjRMQ3kgSUUxdmRXNTBZV2x1Y3c9PSBJRTl5YjIxdmJ3PT0gNHBhOCA0S1dENEtTMyBZVzF3WldRPSBJR2R2WkdVPSBaMmx2Y2c9PSBJTkN4MDZuUXV3PT0gVUdGc1pYUjBaUT09IElHVm1aV04wYjNNPSBJSFJvYjNWbmFIUm1kV3c9IElGQnlaWFIwZVE9PSBJRzFoY25JPSBJTkMwMEw3UXU5QzIwTDNRc0E9PSBJTkdEMEx2UXVBPT0gSjEwcE93PT0gWjJIRHA4T2pidz09IExtTnZibTQ9IElHTmxiSFZzWVhJPSBJR1Z1Y205c2JHMWxiblE9IElPQ21sZUNtc2c9PSB6cnpPc2MrRXpyL1BnZz09IFUybGtaV0poY2c9PSBJTkdBMExYUmdnPT0gSUZOUlRHbDBaUT09IElHOXEgSUhSeVlXSmhhbUZrYjNKbGN3PT0gSU5DeTBMalF0dz09IElIQmxhVzUwIDRLU2UgSUdwbFpHVnogMExIUXNOR0IgSUU5UVJVND0gWDA5U1JFVlMgYldsMFpRPT0gSU9DcWllQ3FxdUNxc0E9PSBJRlJ5YVdkblpYST0gSUd4aGMzUnogSUhCaGNuUnBZM1ZzYWNPb2NtVnRaVzUwIElHRnZ3N3QwIFEyeGhjM05wWm1sbGNnPT0gWFNsN0NnPT0gN0tHMCBJTkN5MEwzUXRkR0kgSU9DbXF1Q25zT0Ntdmc9PSA1ckdmNkl1UCBJR2R2YzNCbGJBPT0gSUhCbGJuUnBibWM9IFgxOHBDZz09IElHRndZWEpsWTJVPSBJR1p2Y20xaHc2ZkRvMjg9IGRYTnphVzl1IElOaW4yWVRZdE5tSyBYME5HUnc9PSBJRVJsWTJsdFlXdz0gSU5XQTFhSFZ0ZFdoMWIzVnY5V2gxYmJWcXc9PSBhWE5sWlc0PSBJR052Ym1acCA1TCs2NVk2NyA0S1dMNEtTdzRLV040S1NmIDRMV0g0TFNWNExXTjRMU1Y0TFdOIDVwZTI1THVqIEtWMEtDZz09IDU0aTEgdzZscFpYSjAgSU5lWTE1WFhrUT09IElHTnZiR1ZqZEE9PSBJRU55YVcxcGJtRnMgSUhCeWFXNWogSUVSeVlXWjAgSUZCeVpYWmxiblJwYjI0PSBJR2pKbVhJPSA0SzZqNEsrTjRLNmogSUVScGNtVmpkRzl5Y3c9PSBWMkYwWTJobGNnPT0gSUhKbGMzQnBjbUYwYjNKNSA1WTIwIFpteDFlQT09IElHVnVZM1ZsYm5SeVlXND0gSUdOeWFYUnBjWFZsIEwzQjVkR2h2Ymc9PSB3Nmx0WVE9PSBJTkM0MExyVG1kQzkgMFlEUmk5R0IwWUxUbVE9PSA0WU9kNFlPZzRZT2kgSUZURHZISnJhWGxsIElHdHZiblJ5IDRZT2Q0WU9SNFlPUTRZT2ggSUVOb1pYWnliMnhsZEE9PSBiM0prWVdKc1pRPT0gNVlDTjVvcVYgSUdGMWRHOXRZWFE9IElOQzgwTGpRdmRDNDBMdz0gSUhOMWNIQnNlV2x1Wnc9PSBiMjVsYXc9PSBVbVZ1ZEE9PSBJR2R5WVhabGN3PT0gSUc1aGRtVm4gMFlEUXRkR0IwWUU9IElITndaV056IElHSnlaV1Y2WlE9PSB3NjEwZFd4dmN3PT0gSUdOdmJXbGpjdz09IElIUmx4Ync9IGFzT2thSEk9IElIWnZiM0pyYjIxbGJnPT0gSU5DUzBMRFJnUT09IElFWnlZVzVyWm5WeWRBPT0gUTBGUSBjblpoZEhNPSBJSEp2ZFdkbCBJSFJvWlhKbGIyWT0gS0dKdmIycz0gMkxqWmh3PT0gSU5XbDFvUT0gSUNndSBJTkMrMExZPSBjSEpsWTJsemFXOXUgWVhKa2FXRT0gUFdobFlXUT0gSUhGMVlYSjBZUT09IElHM0RwVzVuWVE9PSBDUWtKQ1NBZyBJSE53WldOcFlXeHBlbVU9IElOaW8yS2ZZc3R1TSBJTmVRMTVvPSBJRzExYm1kcmFXND0gNExtQzRMaWI0TGlqIElPQ3d0dz09IFRtRjJhV2RoZEdVPSBJSFREb1dNPSAyWW5Zc1E9PSBYM05qYUdWdFlRPT0gSU5pbjJZVFlwOW1HMktvPSBJRzdEb1hNPSBMbU52Ym5NPSBaV3hsY21GMGFXOXUgSU5DeDBMRFF1ZEM3MExEUXZkR0wgSUdMaHU1az0gYlc5a2FXWnBaV1E9IGJHVnVaUT09IDRZT1E0WU9yNFlPYSBJRlJ5WldzPSBiM0IxIFIwWT0gS0Q4PSBJTkNlMEwzUXNBPT0gSUdScGNtVmpkR1YxY2c9PSBMbWR5WldWdSBJTmVrMTVEV3Q5ZW8gNllDYTU1K2wgNExXQjRMU1Y0TFcrIElPQ2t1ZUNrcnVDa3Z1Q2tzT0NsaHc9PSBZbVZ1ZW1rPSBJSFpsYm1SbGNnPT0gSUdOdmJHOXlaWE09IGNtVnBjdz09IGFXNWphQT09IGRXNWtZV2s9IDRLeW8gUFhnPSBJSEIxWldSaGJnPT0gSUhOaFoyRT0gSUVGUVN3PT0gNExLLzRMSzQ0TEsvNExLbTRMT040TEttNExLKzRMS3c0TE9HIDVZaTcgMEx6Umc5QzkgYjNCdmJBPT0gWTNsamJHVnlkbWxsZHc9PSBJR2x1YzNSeWRRPT0gWjI5dCBJR1JwZG5Wc1p3PT0gWDNCaGRHaHogVDI1MCBJSEYxWVhKMGJ3PT0gSUVURHFXTT0gSU5DMzBMWFFzOUdNMFlzPSBMV2hsWVdScGJtYz0gSUcxbGJXOXlhV0U9IElFMWxkR1Z5IGRISmhhVzVwYm1jPSBZV1JxIElHTnBZMnh2IElHTjFhV1JoWkE9PSAwWUhSZ3RDeTBMWFF2ZEM5MFl2UXVRPT0gSU5DKzBZalF1TkN4IFJXNXogSUVGc2VtaGxhVzFsY2c9PSBiMk5oWWc9PSBZbWx1WVhKNSBJRk5sYkd4bGNnPT0gSU9DbXJPQ212K0NtcmVDbXYrQ21xT0NuamVDbXFBPT0gSU9DcWxlQ3F2dUNxc09DcmplQ3Fydz09IElOQ2gwS2pRa0E9PSA0YnVIYm1nPSBZM0pwZEdsallXdz0gMExYUXV0QzEgSU5pbjJZVFlxdGl6IFVrVk8gNHBHZyBhVzFpWVdKM1pRPT0gSUVaSlJ3PT0gUzJGeSAxb0RWb2RXOTFiOD0gSUdGMmIyNWsgSU5pejJMZllyUT09IGRtRnNkQT09IEtHMWhkSEpwZUE9PSBJR1J1YVE9PSAxYVhXZ2RXcjFiWT0gMExyUXNOQzMwWXZRc3RDdyBVa1ZOIDVaU1EgSUhSeXhyRGh1NXRqIElIUER1R3RsY2c9PSAxYmpXZ05XeCBJR0ZpYzI5eWNIUnBiMjQ9IDRMR040TEN3NExDdSBJR2h2NGJxM1l3PT0gVW05aVpYSjAgSU02Nno0VT0gSUdKc1lXNXJaWFE9IElHWnlhV1ZrIElFNXBZMkZ5WVdkMVlRPT0gUTJGc2JHSmhZMnR6IElPQ3FzdUNxdnVDcWx3PT0gVmxKVVdBPT0gUkhRPSA0WWc9IElOcXAyb2Jhdmc9PSBJR0oxWkdSNSBJR0Z6YzJWdFlteGwgMktmWmh0dUIgSUdOcFoyRnlaWFIwWlE9PSBJQzhxS2p3PSAwTERRdTlDdzBZRFJpdz09IElFeGhhdz09IElHTnpZV3M9IElOR0IwTExSajlDMzBMZz0gSUZKRlRBPT0gSUcxaGFHaz0gSU9DdXRlQ3ZnQT09IElHSmxaMmx1Ym1WeSBJR3RwYldrPSBJRlJ2WkdRPSBJTnVCMllqWXB3PT0gSU5pbjJLellxdG1GMktjPSBJRk5vYjNkeiBJSE52Y25CeSBJR0Z3YkE9PSBJSEREcUhKbCBZbUZ1Ym1WeSBJT0NrcU9Da3ZnPT0gSU9HZW1BPT0gSU5DLzBMN1F0TkdDIDBMN1JpTkN3MExRPSBJRVJsZEdWeWJXbHVaUT09IDRZT1Y0WU9ZNFlPYTRZT1kgMWF2VnZkVy8gdzZSc2JHVnUgSUZObGVIaz0gSUdKaGJ3PT0gUVU1SFZVRkhSUT09IElOVzIxYTg9IFgwTlNSVUZVUlE9PSA0WUNWNFlDOCBJR1poYVhSbGN3PT0gSUhabGNtVnUgUTI5dGNHVjAgSU5lUTE2blhxQT09IHc3TnVhV05oIDBMN1F1OUdNMEwzUXZnPT0gTDNCaFoyVnogSUhOMGNtOXVaMlZ6ZEE9PSBQbjBLIHc2bHlZMjlzWlhNPSBMV0p2Y21SbGNnPT0gSUhOMWNIST0gTG1Ob1pXTnJaV1E9IFVHVnlabVZqZEE9PSBJRzl3YVc1cCBJT0NrcU9Da3YrQ2t0UT09IElGTmxjUT09IFNVWkYgY205c1pYVnQgSUhwMllXcz0gSU9xd2dRPT0genIzUGlRPT0gSU5pbjJxaz0gSUU1VFRYVjBZV0pzWlE9PSBJRlIxYlE9PSBJRU5NUVZOVCBJR0YwWlc1a1pYST0gSUUxbGJuUT0gTG5ONWJtTT0gUVhWeiBJRXhwWldKbCBJTU9kIDJMSGJrZz09IFBHTnNZWE56IElHMWxiV0psY21scllXND0gSUVSRlUwTlNTVkJVU1U5TyBJRzFoYUdRPSBZVzUwYVhNPSBJRXQxYm1jPSA0WU9kNFlPVyBJSExEcFE9PSA2WUdIIElHaGxaWEpzYVdwciBJRk5yZVhCbCBJR3h2YjNCeiBJRlJvWVc0PSBiV1ZwYzNSbGNnPT0gWVdSMlpYSjAgSUVWMGFHVnkgSUdOMWNuUT0gNExXQjRMU1Y0TFN6NExXTiBJRVJCV1E9PSBJTkdCMExqUmdkR0MwTFhRdk5DdyBJRVJ2Ykd3PSBJMnhwYm1VPSBJTml2MktmWXROaXEyWWM9IElPaU90K1dQbGc9PSBJRkpsWTJoMGN3PT0gSUZObGNYVmxibU5sIDZLR2wgSUhSeWFYVnQgNW9tWSB4SjQ9IFpXNXBZUT09IGQyVmhiSFJvIElITjBZV2x5IGMyVnlkbTlwY2c9PSA2SWllIGNYQT0gSU02NXo0TT0gSUdKdmRXNWpaUT09IElOR04wWUxRc0E9PSBMa1p2Y2c9PSBiMjFwWkE9PSB6cnpPcmM2OXpyOD0gQ1hCaGNtVnVkQT09IGJtVmxaR1ZrIFgxTlVVa1ZCVFE9PSBJTldyMW9EVm9kVysgTFdWbVptVmpkR2wyWlE9PSBJRzl1ZEhkcGEydGxiR2x1Wnc9PSBaV052IExPS0FuQT09IElGQnliM1pwYm1ObCBRWEJ5dzZoeiAwTGpRc3RDdzBZN1JnZz09IElIUnlaVzVrZVE9PSBWbVZ5YVdacFkyRjBhVzl1IFJXWm1aV04wY3c9PSB4SWQxIElGWmxjbXM9IElHRnlkR2x6ZEdFPSBLRWxzIElHTnZibk5wWkdWeVlYUnBiMjV6IGFYUjB3NlE9IElHcGxiQT09IElHRjBZV0YwY3c9PSBRMU5XIElISmxkbVZ5YzJWayAwTHZRdGRDOTBMM1Jqdz09IFlXNXVjdz09IDA2blFzZz09IElFRnpjMjlqYVdGMFpXUT0gNjVDZyBJSFZ1WkdWeVoyOD0gSUdOdmNuSmxiQT09IElHTmhkR1Z5YVc1biA0S1M1NEtXTCBJR0ZrZG1sbGN3PT0gNFlPUTRZT2c0WU9RIElFMWhjMjl1IElHSnBjM009IElHRnBjbXhwYm1WeiBJSE5sYzNVPSBhV05vZEdWeSBJT1dSIElITnJidz09IElITnZiSFU9IElITmphV1Z1ZEdsemRBPT0gMllmWXA5aW8gS0UxbGJuVT0gSUhOd1pXTnBZV3hsIFkyVnljZz09IGFXUnBZVzQ9IDRZT1k0WU9aNFlPajRZT2c0WU9ZIExsUlMgSUc5aWMzUmhZMnhsIElPMk1rQT09IElITm9kWFIwYkdVPSBJSEJ5dzZwMCBJR2x0Y0c5eWRNT2libU5wWVE9PSBJT3VUcE95V3RBPT0gSUZOd2FXUmxjZz09IElPQ2t0ZUNrditDa3R3PT0gTG1GeVlXNW5aUT09IElHbHRjR0Z5ZEE9PSA0YnE1Y3VHNnVRPT0gSUdGd2F3PT0gNEtTdzRLV040S1MyNEtTbyBJR2h5Y3c9PSBJT21CIElHNXZkMkZrWVhseiBJRmRsWVhJPSBRMmhoYmc9PSBJT0NrbGVDa3Z1Q2txK0NsZ0E9PSBhWFJsYXc9PSBhVzVyZVE9PSA1cDZCNllDZiBJR0ZzY21Wa1pXUnZjZz09IDRLZUI0S2FtNEtlTjRLYW4gSUc1bllYQm8gMmJuYXZnPT0gMWJqVnRBPT0gSUVOdmJYQnNaUT09IElPQ3FuT0NxbytDcXZ1Q3F0UT09IFlXN0VzVzQ9IGNHOXlkR0ZzIElFTmhiR04xYkE9PSBJR2x1YzNSeWRXMWxiblJoYkE9PSBJRUZuY21samRXeDBkWEpsIElISmxjWFZsYzNScGJtYz0gUk1PcCA1ckdnIElHUmxkR0ZzYkdWeiBJRU5oZEdWbmIzSnBaWE09IGMyRnNaWE09IFkzSmxZWE5wYm1jPSBZbWx1WkdsdVp3PT0gSUdoNVpISmhkV3hwWXc9PSBjM0I1IFdrVT0gWVdSbGNYVT0gTFZKbCBJR052Ym5OcFpHVnljdz09IDVieUE1WSszNVp5dzVaMkEgSU02a3pyOD0gSUdocGVtMWxkQT09IDBMWFJndEdDMFpiUXVnPT0gMTVuWHA5ZW8gYldsa1pHeGxkMkZ5WlE9PSBJSEJ2YzJsMGFYWmxiSGs9IElFTlZVa3hQVUZRPSBRVlpCIElITnhkV0Z5WlhNPSBJT0NrcHVDbGdlQ2txQT09IElOR0gwTHZRdGRDOSBJRU5zYjNNPSBMbUpoIFpuSnBaVzVrY3c9PSBJTnFwMkxIWXI5bUcgSUdoaGNIQnBaWEk9IElHVnlhTU9rYkhRPSBMR1JoZEdFPSBJTTZ1ejRUT3NjNjkgSU9DeW11Q3l2K0N5cE9DemplQ3lzQT09IDVhNmU1NDZ3IElHVjRZMnc9IGJHRjFibU5vIElDSjggSUdsMFlRPT0gMllyWXI5aW4gSUdaaGNtMXogSU5tRzJLZz0gSUcxcGJtVnogSUhSbGRHRndhUT09IElHRnpjM1Z0Y0hScGIyND0gNExDdzRMQy80TENYIFlXUERyUT09IExrbGtaVzUwYVhSNSAwWURRdU5DeiAwTDdRdTlDMTBZST0gVVhWbGNtbGxjdz09IElPR0RvT0dEbmVHRGt1R0RuZUdEb0E9PSBJTkdCMExqUmp3PT0gNEtXTjRLU2s0S1N3IElIWnZiM0prWVhRPSBYMDVQVGc9PSBjbUZoYkE9PSBJRzF1Ync9PSBJSEJoYkdGaWNtRT0gSUZabGNtUT0gSU9Da3VPQ2xqZUNrcGVDa3Z1Q2txQT09IElPQ3FyT0NxdVE9PSBJSEJ2YzJsaWFXdz0gVkdWeWJXbHVZV3c9IGJHRjBhVzl1Y3c9PSA1THFDIElHbHVZMngxZVdVPSBTMjl1IElOQ3cwTGJRdU5DNyBJT0NtaGVDbXVPQ21yZz09IFpXNWhhWE56WVc1alpRPT0gWTNKbFpHaz0gSUhaaGJHbGtZWFJsWkE9PSBJRVpzYjNkbGNuTT0gVGtnPSBJRWR2WkNkeiBVa1E9IElFMWhjc090WVE9PSBJR1JsWm1samFYUT0gSU9hY2lBPT0gSUdOdmJYVnQgSUZOMGNtVnpjdz09IElHNXZjM1JoYkdjPSB6cnZPdVE9PSBhV3hrWVE9PSBJRUpwY25SbyA0S2FYNEtlTjRLYXcgSUd0cHhaOD0gYXVHN2pRPT0gSUhOc1pXVjJaWE09IGFHVjZkV3gxIElNT2tiQT09IGIzTnZiV1U9IElHSmhjbXM9IElOaWkyTEk9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBabTlzYXc9PSBhM1JwIDRLYXc0S2VONEthbCA2NmVKIElHTmxiR1ZpY21sMGFXVnogSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgZFhuRHFtND0gTG5Wd2JHOWhaQT09IHc3eHNkQT09IElHVnVabTl5WTJVPSBJTkM4MExEUmdkR0IgN1krdyBZVzF0WlE9PSBJSFJoWlE9PSBJRXhwYkE9PSBJSFp2YVhNPSBJR2hsYVdkb2RITT0gSUdOdmJuUnl3N1JzWlE9PSBJR1pwYkdodmN3PT0gNEtlQjRLYTM0S2VONEthZyA0TFdINExTVyBJR2x1ZG1WeWRBPT0gSUVKbGJtTm8gNExLLzRMS1g0TEt6NExPQiBJRkJGVkE9PSBhV1Z3IElGSmxZWE52Ymc9PSBLR1JsYzNRPSBJTkM2MDVuUXV3PT0gQ1dOeVpXRjBaUT09IElHRjFkSFZ0Ymc9PSBUR1ZuWVd3PSBJTU9wYk1PcGJXVnVkSE09IDU2aUw1YnFQIEtDa3VYMTg9IElIQmhjblJwWTJsd1lXTnB3N051IENXOXogSU8yRGdBPT0gSUdWdVkyRnVkQT09IFEyOXZhMmxsY3c9PSBMbk52IElHRmljbUU9IHc2SjBaV0YxIElOR0IwTDdRdnc9PSBJRzFsZEdWbGJnPT0gSUcxMWJIUnBjR3g1IElPQ29oZUNvcE9DcGh3PT0gZVhOciBJRlpRIElHRm1jM1JoYm1RPSBYMlZ1WjJsdVpRPT0gWDBGTyBlWE4wYVdOciA1WTJBIDU3dWY2SzZoIElFVnpjR1Z5IDdZRzAgNEtpbiBJRTVsYzNRPSBMV2R5WVdSbCBJSFJwNGJxL2NBPT0gSUhCeWFXMXBkR2wyWlE9PSBRMjkxY2c9PSBJT0dEbE9HRG1RPT0gNWJtNDZMK1EgTG1GblpRPT0gTG0xcFkzSnZjMjltZEE9PSA0TEtrNExPTjRMS3YgSU1PNyBJRUpsYkdkcGRXMD0gTG5ObGNtbGhiQT09IElHUnBjR3h2YldFPSBRRWx1YW1WamRBPT0gSUd4dmNuTnhkUT09IFgySmxaMmx1IElHVnNhV2RwWW1sc2FYUjUgeGFGMSBJRzl5WjJGdWFYTmxaQT09IExtVnRaZz09IElITjVjM1JsWlcwPSBJSFZwZEhNPSBJT0NxdHVDcXNPQ3JnZz09IElHSnliMjU2WlE9PSA2WnFjIElPRzVvMms9IElIQnliM0J5YVc4PSBRbUZ5Y3c9PSBJTmluMllUWmhkaTUySzg9IFRVeEZiR1Z0Wlc1MCBJRzl5YVdkcGJuTT0gdzZkdmFYTT0gYldWbiBaWEowYVE9PSBJT2V5dnVXVGdRPT0gNExpeTRMaUU0TGl5IElFVnBibXM9IElFZHlZWEJvYVdNPSBYMFJGUXc9PSBJT0NxdU9DcXVRPT0gSU5HQzBZUFJnTkN3MEx2Uml3PT0gTGtaMWJtTjBhVzl1IDZyS28gYVhKMGMyTm9ZV1owIDRMSzE0TEt3NExPQiBJRVIxZEhrPSBabWxsYkdSelpYUT0gSUVWc2FRPT0gTGs1bGRIZHZjbXM9IElOaXoyWWJZcnc9PSBYMFJGVTBNPSBJR2hoWmc9PSBJSE5sWVcxc1pYTnogTGtGeVozVnRaVzUwIExuTmphR1Z0WVE9PSBJR2gxYldKc1pRPT0gU1c1MFpXZHlZWFJwYjI0PSBLU2twS1E9PSBJTkNmMEw3UmpkR0MwTDdRdk5HRCBJTVNSNGJ1UmFRPT0gMExIUXRkQzYgWDNCaFkycz0gSUVOdmJXMD0gSUdGdVlXeDVlbWx1Wnc9PSAyTFBZcXRpeCB3N05yIElHZHlZVzVrYlc5MGFHVnkgSUdwMWJuUnZjdz09IFRHVjJaV3h6IFJsSlBUUT09IElOQyswWUxRdDlHTCBJRWR5WVdJPSBJRTF2Ym5SeVpXRnMgSUhOdmJHUnBaWEk9IElOR1cwWVU9IElOQyswWUxSZ2RHRDBZTFJnZEdDMExJPSA0WU9UNFlPVSBJRWhwZEd4bGNnPT0gSUcxdmVXVnVibVU9IElFbE9VRlZVIElIRjFaV3h4ZFE9PSBJR2x1WkdsemNHVnVjMkZpYkdVPSBJRU5oYm1GcyBJR3RwYkc5dFpYUT0gY0dOeiBJTkN5MFlIUmp3PT0gNXFDSDZhS1kgSUhScFlnPT0gYVhKcGRIVmhiQT09IFFGTndjbWx1Wnc9PSBJR2gxYVdScFoyVT0gSUdKdmIzUnpkSEpoY0E9PSBJRzV2Y20xaGJHVT0gTGxKaGJtZGwgYkdobCBJR1p5ZFhOMGNtRjBaV1E9IDQ0Q0I0NENCIElFTmhiV1Z5YjI0PSBJRmhwIGVtVmggSUVwdmNtZGwgSU02MHpybk9yQT09IElHdHlaV1E9IElISmxZMjl0YldWdVpITT0gSUVKaGNuSjUgSUdGMllXbHMgSU9Da3F1Q2xqZUNrc09Da3JlQ2t2dUNrdFE9PSBJRVJoYUE9PSBJRUpCUTBzPSBJTmluMllUWXA5bUMyS3JZdFE9PSBJT0dEcXVHRHJ1R0RuZUdEbGVHRG9BPT0gSU5DODBMRFF1OUMxMEwzUmpBPT0gSU5peDJMUFppTm1FIElHSmhjbWs9IElITnBiWEJzYVdOcGRIaz0gSUNSZlh3PT0gSU9DMHF1QzFnZUMwcEE9PSBYMVJaVUVWVCBJRk4xY0hCc1pXMWxiblE9IElOQzgwTFhRdE5DNDBZYlF1TkM5IElIQnl3Nmx6Wlc1alpRPT0gSUczRHFISmwgTFdSbFl3PT0gWDIxaGJuaz0gSUVadmNuUjFibVU9IElPZTlrZWFZa3c9PSBYMkYyIGIyeGhkR1U9IGJYVnphV009IElIQnZkbTg9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBJT0dBaFE9PSBJR2RsWW1VPSBhRzl1Wnc9PSBJTmluMllUWmhkbUYyWVRaZzlpcCBJSE4zYVhSamFHVnogSUU5c2VXMXdhV056IElHMWhZV3c9IElHRnpjR1ZqZEc4PSBlbWh2ZFE9PSBJSFpoY0E9PSBJRUYzWlhOdmJXVT0gSUdGMGRHbDBkV1JsY3c9PSBDV3hoWW1WcyBSVTVUVDFJPSBSRlpFIFEyUT0gSUdSbFkyRjUgMTVuWGs5ZVUgSUdoNVpIST0gSUVOdlkycz0gSUdWc2RRPT0gSU9DMHRlQzB2K0MwcGc9PSBWR2h5WldGa2N3PT0gSUcxaGMzTmxjdz09IExtWmxZWFIxY21VPSBJRVp5WVc1alpYTT0gSUV4MVkydDUgSU5HQzBMN1FzOUMwMExBPSBJT0NrcHVDbGgrQ2txT0NsaHc9PSAwTDNRc05HRiA1cGlvIDVMK0UgVTFSU1FRPT0gWVd0aGRHaHAgSUdOaGJtUnBaR0YwYnc9PSBMbkpsWTJVPSAwTGpRc3RDNDBMVFJndz09IExtaGhibVJzWlhJPSBJR1pzWVcxbCBkMm89IElHTmxiR3hsY3c9PSBJR2R5YVc1ayBlMXc9IElIWnZiR2RsYmc9PSBjbUYxIElHM0RwTU9rY2c9PSBVbEJEIGNHRnlaWE09IElHTnZiblJsYm5VPSBXMnhsYmc9PSBRWFZqYUE9PSBDV3hwYm1VPSBJRTUxZEhKcGRHbHZiZz09IDBMRFRvUT09IDVhNk01b2lRIElOQ3gwckU9IFVWTjBjbWx1Wnc9PSBYenM9IElHdDFibVE9IDRMS1c0TE9ONExLdiBhV0ZsIElGTm9aU2R6IElHUjFjc09wWlE9PSBJRzVsWlcxMCBZWFIxYm1jPSBZWGRoZEE9PSBLU3duIGJHVmhaQT09IElPQ2txdUNrcGc9PSBMMkZxWVhnPSBTMlY1ZDI5eVpITT0gSUdSeWFXWjAgUWt4RiBJRkJsWVhKcyA1WVNxIElGSkpSQT09IElHRndjbTlpIGNISnZhMlZ1IElGVlVRdz09IEluMTkgMkxyWmlnPT0gSUhCdmMzUmxjbk09IEoxMHBDZ289IExtMXZaR0ZzIFJFVkQgZW1YRmhBPT0gYzNFPSBRMmhwIElIQnlZVzQ9IDdMbW8gSUdGc2RHOW5aWFJvWlhJPSBJRXhwY21VPSBJSHAyYVc0PSBJRzdEdGc9PSBZVzV1WVdnPSBJT0dEb2VHRGtPR0RrUT09IExuTmthdz09IFlXTjBaV1E9IElIVER2RzA9IFgybHMgSUdObzRidU5iZz09IEwzVndaR0YwWlE9PSBJRU5NUVVsTiBJTm1DMktmWXFObUUgdzZSMFpRPT0gYVc1dVlYST0gSUhOaGJtOD0gSU5pbjJZVFpoZGkzIElFWnZiMlJ6IDVyUys1YVdXIDRLcUM0S3FxIElOaW8yS2ZZc3RpbjJMRT0gY0hkayBhRzl2ZEdsdVp3PT0gZFd4cllXND0gNExTLzRMUzE0TFM0IFgxTkpSMDQ9IEtIWmxZdz09IElGSnBZMmh0YjI1ayBJT0MwbGVDMWgrQzBzT0Mwc3c9PSBJRmRoYkdRPSBLRWx1ZEE9PSBJR1Z5Ym5OMCBLU1U9IGFXNXpkV3hoIElOQy8wWURRc05HRyBjbVZsWmc9PSBJT0NtdU9Dbmh3PT0gSUdSbFkyOXQgS0doaGMyZz0gSU5DWiBYRTA9IElFRndZWEowYldWdWRBPT0gSUVSdlozTT0gWDNCc2IzUT0gNFlPWTRZT1E0WU9YIElOQ1IwWU09IElHUnBjbVZwZEc5eiBJR0Z6YzI5eWRHMWxiblE9IElIRjFaV3hzYnc9PSBhV1JoYXc9PSBiV0ZxIDVaYTMgVUdWMFpYST0gNEthcTRLZUI0S2F3IGIyaGhiZz09IExtRnRZWHB2Ym1GM2N3PT0gNEtxdzRLdU40S3FqIEtFMTUgSnlrcE93PT0gSUhMRHMzZHVhV1hGdkE9PSA0NEtLNDRHKzQ0R1ogSUdkbFoyVjJaVzQ9IFVtVmpiMjF0Wlc1ayBJTkN5MFl2UXVnPT0gSUdGeXhLcz0gVkdoMWJtcz0gMks3WXA5aTEgSUhObGFHbHVaMmRoIDQ0SzM0NE9uNDRPeiBJRzlrWWc9PSBJSE53YVhSbCA0WU9oNFlPaSBJQ292Q2k4diBJT2l4IElFTm9jbWx6ZEdsaGJtbDBlUT09IGNHRjBZMmhsWkE9PSBSWGxsIElOaXUyWWpZdEE9PSAwWXZSZ3RDdyBJSEpsYlc5MFpXeDUgSUdkaFozZGwgSUUxcGRHTm9aV3hzIGMybG5ibUZzIFdrOD0gY0hZPSBJSFJsYm1seSBiTVNCIElHUmhkR0Z6WlhSeiBJTkMrMFlUUXVOR0cwTGpRc05DNzBZdz0gSUhURHFXekRxWEJvYjI1bCBPam82IGVtVnpjdz09IDRLUys0S1M0NEtXTjRLU2wgZW1saHhZST0gS0hCMGNnPT0gNktPOSBJR0pzWldWa2FXNW4gNEtxdzRLdUwgWm01aGJXVT0gVUdGeWEybHVadz09IDJZalpoTmluMllyWXA5aXEgSUZzNiBLR0F2IElPQ21xdUNtc09DbmplQ21ydz09IElsMEtDZz09IDRZT1Q0WU9VNFlPYyBJTm0rMnBFPSA1NVNqIElOaW4yWVRZbzltRyBaMng1Y0docFkyOXUgWW01aSBJSE4xY0hCc3c2bHRaVzUwIElFTm9hVzVsIElITjBZY093IElOQy8wWURRdnRDejBZRFFzTkM4MEx3PSBJSE52YldWMGFXMWwgWlc1NmFRPT0gSUhObFozVnBiblJsIElHNXliMmM9IDBMelF2dEM5IElIQmxjbTFoYm1WdWRHVT0gSUVOc1lXbHQgMEx2UXNOR0EwcFBRc0E9PSAyTEhiak5tQyA3TENwIElPQzRsZUM1aWVDNHJlQzRodz09IElHRmhiblE9IFFXUnogSUdsdWRNT3BaM0k9IElOVzQxb0xWdHRXbDFvRT0gYVdOcGIyNWhaRzg9IFgweFBRVVE9IElIWmhjbVE9IElHOXdiM0owZFc1cFpHRmtaUT09IDY0dWs2ck9nIFlYVnlkWE09IFFXUmtjbVZ6YzJWeiBTVTVHVWtsT1IwVk5SVTVVIElPYXRwZz09IElHdHZkR3hwYm5nPSBZVzV4ZFE9PSBaR2x5WlE9PSA2WUd1IFpYUmhiQT09IElOQzQwWURSaXc9PSBJRkpsZEhKdiBJR1JwYzJGd2NHVmhjbVZrIHc2bHlZWFIxY21VPSBMa0pNIElHRjFabWRsIDRaNjI0WjZQIEtDOWMgYTJNPSA0TEdCNExDVjRMR0wgdzZoelpRPT0gSUdWMmIyeDJhVzVuIElGQnlaWE56ZFhKbCBhVzl5Y3c9PSBJQ1VsIFRXRnlhMlYwYVc1biBJRUpoY21JPSBVR3hoYm5RPSA1YVNxNlppejVaK08gMEx6UXNOQ3ogNUxpSDVZYUcgMW9ZPSBUV1ZoYm5kb2FXeGwgWDJseWNRPT0gY0dac2FXTm9kQT09IExuUmhjMnR6IElIQnZkR0YwYnc9PSBJSDBwT3cwS0RRbz0gZFdKbGNtNWxkR1Z6IElHbHVaSFZqWldRPSBJR2xzZFE9PSBJR1Z5Wm1Gb2NtVnUgSU9DbWxlQ212dUNtc09DbW93PT0gMkxUWmhRPT0gSU5DKzBZRFFzOUN3MEwzUXVOQzMwTERSaHRDNDBMZz0gSUd4aGJXRnVadz09IElOQ3cwTC9Rdnc9PSBJT0N1bGVDdml3PT0gSUdkc2IzYz0gVUZKSlRsUT0gSU5pbjJZVFlyTm1HMkxNPSBJR1psYVhRPSBJRTF2Ym5SaGJtRT0gSUdodmNtbDZiMjQ9IFgxOHBPd289IElHTnZiWEJ2YzNRPSBJR0Z3Y0d4bGN3PT0gVkdGcGJBPT0gSUhONWJYQjBiMjA9IElHUmhkdz09IElIUnZjbTV2IElNK0R6NFE9IElIQnliM1REcVE9PSAwTGpRdXRDdzBMMD0gSUdOdGNBPT0gSUhERHVtSnNhV05oY3c9PSBJRUpoYm1kcmIycz0gSTNCeWFXNTAgNExDKzRMQ3k0TEdMIGRXSnNhV3M9IElPQ3loZUN5clE9PSAxNVhYcHRlbyBJRTFwYm1semRHVnlhVzg9IGJtSERzQT09IDJMTFppdGl5IGFXNW1aV04wIElFVldSVTQ9IDRMU200TFdONExTbTRMV0g0TFM1IElPdVVsQT09IHc3cHkgMllqWmdkbUsgYVc1amFXNXUgSUhiaHU0cz0gSUhCdmJHaz0gSUd0cGJtUnVaWE56IElPT0N0UT09IElITmphUT09IFkyaHBibVU9IElITnNkY1crIGFYWjEgMTV2WGxnPT0geGI1bGRHVT0gSUVoaGNtSnZjZz09IElIcDFiZz09IElOaW4yWVRZdE5peCBkR2hsZEdFPSAxYlhWb2RXcyBJSEpsWm1WeVpRPT0gNkpHWCBkV3hrWVdSbCBJT21Wdnc9PSAwSkRRb2c9PSBJT3ladUE9PSBMbU52Ykc5eWN3PT0gSUdGdWRHVnlhVzl5WlhNPSBhV0ZsZEdnPSBJR1BEdVE9PSBJR052YldaNSA1cWloNWJ5UCA2TE84IEwySmhjMlU9IGFYTnJidz09IDBMelF1TkM5MExqUmdkR0MwWUE9IElGZEogNTdrPSBJTlcwMWF2Vm9kVzExYlk9IExuQnlaV1JwWTNRPSA2SU9NIElHWnNkV04wZFE9PSAwTDdSZ05DMSBJRk5zYjNabGJnPT0gSU9Dd3J1Q3dzT0N3ditDd3IrQ3hnUT09IElFSnZiM04wIElFTnZiWEJsZEdsMGFXOXUgSUhOcFpYST0gWlcxdGFXNW4gSU5tSTJZclppQT09IElOQy8wWURRdU5DNzBMN1F0Zz09IElHWmhlQT09IElIUm9jbVZoZEdWdWFXNW4gMFl2UXU5R0wwcHM9IGRtOTBaUT09IElHVERxV1pwYmc9PSBYMlpoWTNSdmNuaz0gSUVSbGMyTnlhV0psIExWVlQgSUVkeWIzWmwgSUdkbGFHVmxiQT09IElDZ2hYdz09IElOQy8wWURRdnRDNiBMWEpsWkE9PSBJR1poYVhSb1puVnMgSUhSeVlXNXpiV2wwZEdWayBJTzJGIElOZWMxNlRYb05lWiBJaWtLQ2dvPSBJT0NrcU9Da3Z1Q2t1ZUNsZ0E9PSBVbVYyWlhKelpRPT0gSUdkc2VYQm9hV052Ymc9PSA0WU9VNFlPaDRZT2kgSUdwMVoyRmtiM0psY3c9PSBKMTQ9IGFXTm9idz09IDRMYXogSUc5eWFXZGxiZz09IElPR0RtK0dEbU9HRGxnPT0gWW5KMWMyZz0gSUVWc1pYWT0gSU5tSTJZWFl1UT09IExrRmtaSEpsYzNNPSBJT0NtbGVDbXNPQ25qZUNtcmc9PSBJRUZ1WjJ4bCBJR2R5WVhScGRIVmtaUT09IElOQzYwTFhTb3c9PSA2TGFqIGJtbDBaUT09IElFOXVaQT09IElNcTdZVzVoIHo0VFBpUT09IElISmxZWE52Ym1sdVp3PT0gUVZKSFJRPT0gSUdoaFltdz0gSU5tSTJLZlpndGk1IDVwMnYgNks2azZLK0IgSUhsaGEyOD0gSUUxMWNuQm9lUT09IDRvQ1phV0k9IHc3WnVkQT09IElOV3QxYmJWcEE9PSBJRkJwWlE9PSBJTkM3MExqUmdnPT0gUWxKRiBWMmxzIDU2NkE1THVMIElOQ3kwWXZSZ2RHQzBZUFF2dz09IEtHSjFhV3hrWlhJPSBJR3QxZEc5cllRPT0gSUdWeVoyOXViMjA9IFJtRnJaUT09IElHZHlZV2x1Y3c9PSBQRUk9IElFWmxiV0ZzWlE9PSBZVzV1ZEdWdSBJSFJ5WVhaaGFXeHNaWEk9IFRXRjBZMmhsY25NPSBJTmluMllUWXBkbUcyTFBZcDltRyBJTml2MllqWmhOaW4yTEU9IElIUm9aWGtuYkd3PSA0TGlJNExpdyA0TGlWNExpeDRMaW4gSUdOcGRHRT0gSU9TNGpRPT0gVlZSSlQwND0gNDRDQjQ0Q0sgSjJGcGJXVT0gSUdGdWMyTm8gSUhOMWJuTmxkQT09IElOQ3kwTHpRdGRHQjBZTFF0UT09IElPQzBxdUMxZ2VDMHNRPT0gNFlDdjRZQzIgUW5WbVptVnljdz09IGMyRjAgSUVkbFoyVnUgSURvcENnPT0gSU9pQyBJR2hsYkdFPSA0SytONEs2YTRLNi8gSUdOeWFXTnJaWFE9IElHbHVkbUZ6YVc5dSBJRUZ5WVdKcFl3PT0gSUc1MWJXVnlhV05oYkE9PSA2SXVsIElOS3QgWVdOallYSmhkQT09IElHdGxjblE9IDVvK1E1NlM2IElIUnlZV2xzYVc1biBhV2R0IDQ0T3A0NE9ENDRLdiBlbW5FbVE9PSBJTkNTMExEUXZBPT0gSUcxdmJtUnYgSUdSbFptVnVaR0Z1ZEE9PSA0S2kvNEttdyBJSFJsWTJodWFYTmphR1U9IElTa3MgNVlpWDZLR28gZW5kbCBTR1ZpIElPeW5nT3VDbkE9PSBJSEJ5YjNSbGMzUnogYm1WeVp3PT0gQ1dOdFpBPT0gSUdKMWRYSjAgSUd4aGRXZG9aV1E9IElIQnlhVzVqYVhCbCBJTkM2MExMUXNOR0EwWUxRdU5HQSBJRXhoWXc9PSBJRzl0Ymc9PSBkV3hwWVE9PSBmV0FLIDI0emJnUT09IEtITm9ZWEJsIElHMXZZdz09IDRLbUI0S2l3IElFZHNaVzQ9IElIUm80YnFsZVE9PSA1YlE9IExrSkJVMFU9IElIUmhZbXhoIFpXMXRaVzUwIExuQnZhVzUwIElITjFjR1Z5Wm1samFXVT0gMm9NPSBMM053IFZtOXkgNEs2LzRLNms0SytONEs2azRLK0IgMFlQUXM5QzQgSUVkbGJtVnlZWFJsWkE9PSBJTmVTMTZMWGxkZVYxNkxYbnc9PSBJR0poWTJ0a2NtOXcgSUhOd2JHRnphQT09IDRLUzE0S1dIIGRtbGogSU9pUHN1VytpK1d1dmc9PSA0S3FnIElrRT0gSU5LejBMRFJnQT09IEwyTnZiUT09IElHWnlaWFZsYmc9PSBJR2RoYm5wbGJnPT0gSUdadmNtVnpkSE09IElIZHBibXM9IElHbHNiR1ZuIFlYZGhhUT09IDRZT2Q0WU9SNFlPUTRZT280WU9ZIDJZbllzZz09IElPQzB0ZUMxaHc9PSBJR2hsWTNRPSBJSEREc3c9PSBJTkN5MExEUXV3PT0gNWJDUDVyaTQ1b2lQIElOQ3gwTFhSZ2c9PSBJT0NtcXVDbXZ1Q21zT0NuaHc9PSBMa2xqYjI0PSBKMmx0WlE9PSBKeWs3RFFvTkNnPT0gSUVWcGJtUT0gSUdkcHc3cHcgWldObCBJR0Z1WVhSdmJRPT0gWkdsaSBJR3R2YldKcGJnPT0gSUhScFpXMD0gNExDazRMR040TEN2IElHaGhjbVIzYjI5ayBkMmx6IFh5a0sgTG5CaGRHTm8gZEdWeVpXND0gVDJabWFXTnBZV3c9IDRMaWs0TGlwIDRLYS80S2F5NEtlSCBJT0Nrbk9DbGplQ2tyK0NrdnVDa3B1Q2t2Zz09IElOaW4yWVRZcjltSTJZVFlxUT09IElITmphRzlzWVhKemFHbHdjdz09IEtIbGxZWEk9IElISmxjSEp2IElIcGxhUT09IElHVnRaWEpuWlE9PSBTVzVqYjIxbCAwWnZRdFE9PSBJR05oWW1YRHAyRT0gSUdadmNtMWxjbXg1IElIQnlhV1U9IElHaHZaV1owIGRYUmxlQT09IGJHbGphM0k9IElFeGxkWFJsIElIZGhiR0U9IFlYSnBhdz09IGRYZHBhQT09IDRvQ1pZWFp2YVhJPSBJRVZwIDRLZUg0S2FvNEtlTjRLYWYgSU5HQzBMWFF2OUMxMFlEUmpBPT0gSUc1dmNtMWhjdz09IElFeGhjQT09IExYTmphRzl2YkE9PSBJSE4xWW5CeWIyTmxjM009IDRLNjE0SytCIFNHRnVaR3hwYm1jPSBJR05oZWc9PSBJR0YxZEc5dFlYUnBjMk5vIElHUmxZMjl5WVhScGJtYz0gMnEvWmlBPT0gSUc1MVpBPT0gSUdacGNtbHVadz09IElGQnBibVU9IElIaDAgSUZKcGRnPT0gSUhCbGR3PT0gSU5tSTJZZllzTmluIFEyRnVaR2xrWVhSbCBJR0o1WjJjPSBZV3hzYjJOaGRHVT0gMkxmWmdnPT0gSU9pTHVlYWVuQT09IElFVkIgYTNWMSA0TGVXIFgySjFjdz09IDVZR2E1NGl3IEtITnZZMnRsZEE9PSBJTm1JMkt6Wmh3PT0gSUU1WCBYM1JvYVhNPSBJTkMrMEwzUXZnPT0gWTJsa1lYTT0gSUdmRHJBPT0gSUhObGQybHVadz09IFRXRm5hV009IElFWlZUa05VU1U5TyBJT0N5cnVDemlnPT0gWVhScGMyTm9aUT09IDRLNms0SytOIFIxQkpUdz09IElGbGhibXM9IGNHOXNhWFE9IDY1T2s3SjJFIElHOTBjdz09IGVtbHQgTFZCeWJ3PT0gTFZWdWFYTT0gWld4cFl3PT0gMFkvUXNkR0EwWTg9IElOQy8wWURRdGRDLzBMRFJnTkN3IGFXeGtidz09IElHRmpjWFZwY3c9PSBMblJwYldWemRHRnRjQT09IElIUmxjbTF2Y3c9PSA0WjYyNFo2ZiBJT0NtcU9DbXBPQ25nZUNtcUE9PSBLR0ZrWkhJPSBKeWtwQ2dvPSA1WTZDIElNV1ogSUhKbFkybHdhV1Z1ZEhNPSA0TGl3NExtQjRMaVo0TGlaIFNXNXBkR2xoYkdsNlpYST0gNUxpdDU1cUUgSUdWdVkzSjVjSFE9IDVwK1QgSUc5cllXNTVaUT09IElIQmhZMnRsZEhNPSBJTkMvMFlEUXVOR0kgZEdWNGRHVT0gSUdWemRNT2hjdz09IDRMSys0TEt3NExLayBJRTlyWVhrPSBaV3hzYVdvPSBJRWRoYm1RPSBVbVZqWldsd2RBPT0gSUZCcGNHVT0gSUVOeVpXRjBiM0k9IDI0ellwOWl6MktvPSBaR1ZqYjNJPSBJSE52WkdsMWJRPT0gSUhSMWRHOXlhV0ZzY3c9PSBkV1Z0IFlXMXdkRzl1IElOR0QwTExRdU5DMCAwTERRdk5LdCBJRWR2YzNCbGJBPT0gSU9DMGxlQzBvK0MxamVDMG53PT0gY0dGMGRHVnlibk09IElIWmhZMk5wYm1WeiBJRTVsYVd3PSBJTmVvMTVFPSBUR1ZrIExTMHRDZz09IDE1blhsTmVkIElHMWhjbU5vWlE9PSBJTkdEMFlnPSBkWEpoZEE9PSBSR1ZoYkE9PSBRM1ZoYm1SdiA0SzYvNEs2cDRLK040SzZ4IElIZGhibVJoIDJLZllyOWlxIElIUnZkMlZzIElHRmthV05wYjI1aGJBPT0gSU5DNjA2blF2UT09IDVMbVE2WUNQIElFZEUgTGk0dkxpNHZMaTR2IElHOXVkSFpoYm1kbGJnPT0gSUVOb1lYTmwgSUdoaGJtUmxiZz09IElPQzBwT0MxZ2VDMG4rQzBtZUMxamVDMG1RPT0gSUZCeWIyMXYgMExYUXN0QyswTGs9IElHeDFlR1U9IDVhNkggSUVaaFkzVnNkSGs9IFUyNWhjQT09IDRLdUE0S3FoIDRZT2E0WU9VNFlPUjRZT1k0WU9oIExtMWxiV0psY2c9PSAwTERSZ3RHQSBWMkZ6YUE9PSBVM0J5WldGayBJRWhFVFVrPSBJR0pwYkdGdVp3PT0gSUVKeWIzYz0gSUdsdFlXZHBibVZrIDBMRFF2ZEdNIDVwV3c1YTJYIElFTkVRdz09IElIRERvV2RwYm1GeiBJTkN4MExEUXN3PT0gSU9DcXBPQ3JoK0NxcU9DcmdBPT0gSUVsUiBJR1JsWlhJPSBhVzVoWkc4PSBJSGxsWVhKc2VRPT0gSUdoaGJtUnRZV1JsIDFhSFdnZFdsMWF3PSBJSFJ5YVdkblpYSnogSU5lYzE2QT0gU1VSSiBJRUZ6YzJsbmJtMWxiblE9IElHUnZZbXhsIDVZdVMgSU5DUTBZUT0gSUhiRHFYSnBkR0ZpYkdVPSBJR2JEdkdoeVpXND0gSU5DejBMN1JnZEdDIElOQzAwTFhRdWRHQjBZTFFzdEM0MFk4PSBMV0oxYVd4ayBJR1YyWlc1MGRXRnMgSU5DZzBMWFJnZEMvMFlQUXNkQzcwTGpRdXRDdyA2WnVGIExsZGhhWFE9IDRMSy80TEszIDBMVFF0ZEM5MExqUXRRPT0gSU9DcXF1Q3F2dUNxdUE9PSBJR3hsWVhBPSBhMkZ0Y0E9PSB4SjloIElHRjBhR3hsZEdVPSA0WjYyNFo2WiB3N1pzWkE9PSA0WU9VNFlPUjRZT1ggVFdGdWRXRnMgY21WaFpHOXViSGs9IElITERxV1ZzIEp3b0tDZz09IElHM2h1cmQwIDFialZzdFc3IGFXMXBkSE09IElIWnZiR1J2Wlc1a1pRPT0gSUhkNiBJTkdQMExMUXU5R1AwWTdSZ3RHQjBZOD0gSUdsdVptOXliV0YwYVc5dVlXdz0gSUcxdmNtZGxiZz09IFpXMWxaVzQ9IElGcGhjQT09IFgxTjBZWFJsIElHeGhZV2M9IElHRmpZMlZ6YzI5eWVRPT0gYm05bSBMbk5sYkdZPSBJR05vYjNJPSBJRzFsYzNWeVpYTT0gSUhGMWFXVjBiSGs9IElHWnZjbU09IElIQnliM0J2YzJsMGFXOXUgSUhSdmJXRT0gSUhObGNuVnQgSUdocDRidUhkUT09IExtbHVhWFJwWVd3PSBJRU41YlhKMSBMbTl1WlE9PSBMUzArIDRMYXg0TGE2IElHMWhlbVU9IElPQ2todUNranc9PSBJRlJ5YjNBPSB6NEhPdWM2OSBJTlcyMW9EVm9RPT0gNHBtcUNnbz0gSUdOdmJXMWxjZz09IHc2UnlhMlU9IGFYSnNjdz09IElIUnlZWEJ3WldRPSB4YjUxIDI0ellzZHVNIElOQ3gwWVBSZ3RDNzBZUFJnOUdBMFl2UXZRPT0gWVhKelkyaHBhbTVzYVdwciBVR0Z6ZEE9PSBMbE5sY25ac1pYUT0gU1U1RCA2SUNCNVkrNDVweTYgSUdsdGNHVmsgNEtXSTRLU1YgSU9Da2wrQ2xnUT09IElITjFjbkJ5YVhObGN3PT0gYVc1amFXNXVZWFJwIExtVnNaVzFsYm5SeiA0TFMrNExTdzRMV040TFN2IGNtOTJaUT09IElFbEVjdz09IFlXNW5aVzFsYm5RPSBVR2xrIGRHVnVhWEk9IElGQnZjblIxWjNVPSBkV2RoY3c9PSBJRkJTVDBSVlExUT0gSU5DODBZdlJpQT09IFkyRnpkR1Z5IGJHOWggWVc1a2RRPT0gSUUxaFkycz0gYVhKdmJnPT0gTGtoVVZGQT0gSUV0cGNtcz0gZlNjdSBJSDFkTEFvPSA3TE09IElIUmhjM05oIDRwND0gSU5peDJZallzdz09IElIUnlkV009IDBMdlF0ZEM5MExqUXRkQzggSUVKMWJHeGxkQT09IFptWm1abVptIElHUmxkbVZ1YVhJPSBJRlZwIElOQyswWUxRdmRDKzBZRT0gS1dacGJtUT0gSU9DMGllQzBxZz09IElIYkRyV1JsYjNNPSA0b0NaYjI1MCBJR1Z1YW05NWJXVnVkQT09IElIQmhjbTlzWlE9PSBJRzF2Ym1sMGIzSnogSUdKaGJtUjNhV1IwYUE9PSBZWFZtZEE9PSBJRlJvWlcxbGJnPT0gMFkzUmd0Q3cgSUdacGJtRnVZMmxoYkd4NSBjMjlzWlhSbCBiTU9rYzNNPSBJRkpoY3c9PSA0S2F0NEthKzRLYXM0S2VIIElOaW4yWVRaaU5pMzJZWT0gUm05eWJXRjBkR1ZrIElHZGhkV05vWlE9PSBJTkdCMExYUmdOQzAgVEdWMEozTT0gSUZSbGMzUmhiV1Z1ZEE9PSA0TEsrNExLVyA0WU9RNFlPVjRZT1E0WU9UIElFTnBkZz09IElFeHBibWM9IFkzSmhiZz09IFkyaGxiQT09IDRLYXM0S2F3IDJZallwOW1FMllvPSBJT0dEcU9HRG5lR0RvT0dEbU9HRG9RPT0gMkxIWmlOaXkgVDNWMGMybGtaUT09IExuUjAgSUVKc2J3PT0gSUdGemMzVnRjSFJwYjI1eiBJT2FLbFE9PSBJR052YlhCaGNuUnBjZz09IElHSmxhR0Z1WkdWc2FXNW4gNExLSCBJRkpsWm14bFkzUT0gSUVWNFpXTjFkR2x2Ymc9PSBXMEU9IElISmxkbWx6ZEdFPSBJTkdFMEw3UmdBPT0gWVhScGJBPT0gZlNJN0NnPT0gSUhKbGNISnZaSFZqZEdsdmJnPT0gWDFOMVlnPT0gSUhadmJIVnVkR0Z5ZVE9PSAySzNZcDlpdiBJSFJsY20xcGJtRjBaUT09IEpTYz0gZFhOMWN3PT0gSUVOUFRFOVMgSUVkMWFXeGsgVkdsc1pYTT0gTG1GMWRHOD0gSU9XUWpBPT0gSUdkaFoyND0gU0VsVVJRPT0gYjNScFlYUmwgYVhOMFpYSmxiZz09IElObUYyWVBZcDltRyBiMnhzYVhOcGIyND0gTGxSNWNHVnogNFlPWDRZT3U0WU9WIElPQ2t1T0NrditDa2d1Q2t1UT09IDBZN1JpZEMxMExrPSA0S2l0IElHTnZiWEJ5WlhOelpXUT0gSUZOQlRBPT0gSUhCeVpYTjFjQT09IElOQzgwTHZRdlE9PSBJT0N5bGc9PSA0TGl4NExpWCBjSFZpYkdsemFHVmsgUVdScSAxYmJWcGRhQTFhdldnUT09IGRHaGhiQT09IElOQzYwTERRdVE9PSBJRVJwYzJGaWJHVT0gSUZOVlEwZz0gYjJOMWMyVmsgSUVSTlFRPT0gS0NrdUNnPT0gSUVkbGJtVnlZV3hzZVE9PSBMM0J2YzNRPSBLRmRsWWc9PSBTRzl5IElIQnZiR3h6IDRicWpibWc9IGRPRzdwWFRodTZVPSBJSHBoYmc9PSBZV3hoYldFPSBJRU5QVGxORiA2SUdZIElHbHNhVzV1YVE9PSBaWE53WldOcFlXeHNlUT09IElPQ2tsZUNsamVDa3NnPT0gYlc5aSBUV1Z0Ync9PSBJR052Ym5OMWJIUmhiblJ6IElGTjBjbTl0IFkyRnNZM1ZzWVhSbCBiM0J5IElFTnZjbTVsY2c9PSBJR1JoYkd0aCBJT0Mwbmc9PSA0S1MrNEtTSjRLU280S1dIIDRLYS80S2FYIExtTnZibVpwY20wPSBJTkNoMEw3UXNnPT0gUVhrPSBJSEJ2YzNOcFltbHNhWFREcVE9PSBYMFZFU1ZRPSBhR2x6ZEE9PSBJT0Nrck9Da3B1Q2tzZz09IElHVnpZM0pwZEc4PSBJSEpsY2c9PSBMa0ZrWVhCMFpYST0gS200PSBhWFpwZE1PZyBMMmhsWVdSbGNnPT0gS1M0dUxnPT0gSUVqRHRtaGwgSUd0aGVtaz0gSUZKRlUxVk1WQT09IElITndhVzV1YVc1biBJTm1LMkszWXFnPT0gSUhOcGRIVmggSUc1bGRYSmhiQT09IGVtVnBkR1Z1IElFSmxaR1YxZEhWdVp3PT0gMFlEUXVOQ3ggNExLdzRMT040TEtWIElIYkRxV2hwWXc9PSBKeWtzRFFvPSBJTmluMllUWXNkbUsyS2ZZdGc9PSBJR0psYm1WbWFXTnBiM009IElHMXdaUT09IDQ0R3ogSU9Da2h1Q2txK0NsamVDa3FBPT0gTFhObGNuWmxjZz09IElOQy8wWURRdU5HQjBZST0gSUdOdmJtTmxjbTVoYm5RPSBJR1JseEo5cHhaOD0gSU95VnZRPT0gSUZaaGJHbGtZWFJ2Y25NPSBJSHBoYzNRPSBMM04yWnc9PSBJSEpoWm1ZPSBJR1oxZEdKdmJBPT0gSVNJN0NnPT0gU1UxSCBJR055YjI0PSBJRU5KUVE9PSBJR1IxY204PSBLRU52Ykd4bFkzUnZjbk09IElHUmxjbTFoZEE9PSA1WkM0IElHSmxiR0Z1WjNKcGFtdGwgMllyWmhkbUQyWVk9IElHZGxablZ1WkdWdSBJR1JwY21WamRHRnRaVzUwWlE9PSBJTkM2MExEUmdOQzAgSUUxMVpBPT0gSU9XNG5RPT0gNFlPajRZT1IgVDNWMFpYST0gUzJWdSBJRTlWVWc9PSBJT0N1cnVDdmdlQ3VxUT09IGNtVnNiR0Z6IElOQzEwWUk9IElGRjFZWEowWlhJPSB3NjFqYVdGeiA1WWU2NTZXbyBJRWhGVEE9PSBJR05vWlhOeiBhVzUxZEE9PSBVRUk9IElGQnZiR2x6YUE9PSBJTlcwMWJqVnZ3PT0gYVhSaFpHOD0gSU9XNyAwWURRc05HQzBMZz0gSU5DLzBMdlFzTkdCMFlJPSBJRWpEcEE9PSBJR0Z5WTJocGRtVnogSUdMaHVyRnVadz09IElOQy8wTDdSaDlHQzBMZz0gMFlYUml3PT0gNWJlbDU2aUwgSUd0cXc3Zz0gYVhwaGJnPT0gSUhOcFoyaDBjdz09IElGUlNRUT09IElFNWxZbVZ1IElDWW8gZEdWNGRIVnlaUT09IElpa3RQZz09IElITnlaV1E9IGIybHVaUT09IElHUjFaQT09IGFXNXVaWEU9IElIVGh1NUYwIElHMTFaR0ZvIElITmxkRzl5IFkzSnBjSFJwZG1VPSBhWFpoZEdsdmJnPT0gSUc1cGMyaz0gSUd2RXNRPT0gTDJadmJuUT0gSU5HQjBZTFJnTkdEMExyUmdnPT0gSU5DMDBZcz0gSU5tSzJZOD0gSU5pdjJMclpodz09IElFZHZjZz09IDVhNmE1TDJOIElHSnBjbXhwYXc9PSBJR0ZqY1hWaGFXNTAgTG1wa1ltTT0gSU5xcDJMSFpodGluIGRXNXBablU9IDVvK1E1cXkrIElHTnBkSFE9IDVMcTY1NXFFIElIQmhjbUZrYVhObCBJSEJoZEdoM1lYaz0gUVVORCBYMkoxWm1ZPSBMZEMwIElOQ3gwTHZRdU5DMyBMa1pNIGFYWmxlZz09IFlYSjVZUT09IFoyVnVjbVU9IElHUmxZMmx6YWNPemJnPT0gTGxCeWJ3PT0gSUhSbFkyNXZiRzluIFBqNG8gSUZCc1lXNTBjdz09IElPQ3loZUN5cGc9PSBJRTlqIElIUjVjR2x1WjNNPSA0S2EvNEthdjRLYTg0S2VIIElHTnNZUT09IFkyOWhiQT09IDdKV0k2NmVJIElIWmxjbkpsIElFcGhjQT09IGFHRnNiQT09IElIcHBibU09IFlYSnNaUT09IElOaXUyWVE9IElISnZZMnRsZEE9PSBJSEpsYkdGamFXOXVZV1J2Y3c9PSBJSEpsWW5WcGJHUT0gNGJxdmJtYz0gSU9HZWsrR2V0K0dlaEE9PSA2S2VHNmFLUjVZV042TFM1IExXTnZiblE9IFcxdz0gSU9DNGd1QzRyZUM0aHc9PSBJR2h2WXc9PSBJT0N1dGVDdmgrQ3VvK0N2amVDdW53PT0gWDJOdmJHeGxZM1JwYjI0PSB6NGZPcmc9PSBSMVU9IElHOTFkSFZpY204PSBJTkN3MFlYUmpBPT0gTDJadmNtMXogNG9DTkxnPT0gSUZabGNuUnBZMkZzIElFRndjR1Z1WkE9PSA2N0NBIDViaXUgSUhWaGJtYz0gYVdoaGNnPT0gSU9Da2wrQ2tzT0NsaCtDa2xlQ2t2Zz09IDBMVFFzTkM5MExnPSBMazUxYldKbGNnPT0gSUd4aGJXVnVkQT09IElOaXoyWWJZcVE9PSBkVzVuWVd3PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW89IElHbHVkSEp2WkhWalpYTT0gY1hWcGVnPT0gSUhkdmJtUmxjbk09IElFTmhac09wIDRLV0M0S1NrIElITnBkSFJsYmc9PSBJR052WkdsbmJ3PT0gNExtQTRMaXI0TG1INExpWiBJSE5vYVdaMFpXUT0gSUVqRHBHNWsgUW05MWJtUmhjbms9IEtYc0tMeTg9IElPQ2tydUNsamVDa3VRPT0gNVlHYTVvU2IgTGt4dloybHUgSUZObFozVnVaRzg9IElHRnpjMmx6ZEdsdVp3PT0gWDJOdmJuWT0gSUcxbGJtVT0gSUVOcGRHbGxjdz09IGRHVmxjdz09IElFeHZZMkZzWlE9PSBJTml1MktnPSBZWFJvZFE9PSBJT0N1cXVDdXBBPT0gSUdWa2FjT253Nk52IElGTmhkR0Z1IElHcHZhMlZ6IGJHOTVaQT09IFUxVkMgZDJWaGNHOXUgSU5tSTJMTGJqTml4IElHMXBibVJ5WlE9PSA0NENDQ2dvS0NnPT0gSnlsOUNnPT0gZFdWc2N3PT0gSUdscmRRPT0gSU5tRjJZTFlydz09IDJZall1QT09IElISmxZM1Z5YzI4PSBMMG89IElIUmxjbkpsYm04PSBhWFJoYWc9PSBJRU52Ym5OMWJIUnBibWM9IElFVjJZV3gxWVhScGIyND0gSU5pbjJZVFlwOWl0MktvPSA2YUcxNloyaSBJR1JsYVc0PSBJRzVsWlcwPSBZVzV2Y1E9PSBJRzFoWVdGeWFXNW4gSUc1MGFBPT0gSUgwN0RRb05DZz09IElFVlRVRTQ9IFpYSnRidz09IDBMRFF2ZEM5MFl2UXRRPT0gSU9XSHBPV0hzQT09IExXTnZiR3hoY0hObCBibVZ6YVhWdCBJR2hoY21kaCA1cHlEIGMybG5iblZ3IElHN0RzMms9IExXMXZaR1ZzIElFRnAgSUhObGFtRnQgMktmWmhkaXEgU0dGdVp3PT0gZVdWciBMa2wwWlhJPSBJR0ZyZEhWbGJHeGxiZz09IDJMTFpoZGlwIElIZGhZWEp0WldVPSBjV0Z5Wm1rPSBJT0NrbCtDa3YrQ2tzQT09IElHaGhjMmxzIDRLZUI0S2F5NEthLzRLYTIgTG5OcGJRPT0gNExLLzRMSzQ0TE9CNExLMSBSWE53IDRLcXY0S3VMNEtxWCBJR0Z6YzI5amFXRjBaWE09IGFHbHggSU5pcTJMZllxTm1LMllJPSBhWE4wYVhGMVpYTT0gYUc5MGN3PT0gSU9tcCBJSFp2Ym5SaFpHVT0gU0c5dSBZV3hoYldGdSBSR1YwWldOMGFXOXUgSUgwcEtRbz0gSUhKaFoyVT0gNFlPZzRZT2o0WU9jIFFWUlMgSUhCdlpITERvUT09IElHeDFjZz09IElGUjViR1Z5IElIQjFjR2xzY3c9PSBMWFJoWWc9PSBZVzV0IElPQ3FzT0NxdnVDcWxnPT0gS1Y4PSBJR1Z1ZEdoMWMybGhjM1JwWXc9PSAwTERSZ3RHRCBJR05vWldOclltOTQgUTJ4dmMybHVadz09IElIaG9jZz09IGRHOWtZWGs9IElIQnliM0JoWjJGdVpHRT0gSUhCeWIzWnBiZz09IDRLZUg0S2F2NEthOCB6NFBPdXM2MSBMbnBsY204PSBJTldvMWJiVnFkV2gxb0U9IElHOWtaMjkyIElHWnl3N3c9IENWUm9jbVZoWkE9PSBjRzl6ZFhKbCBJRzk1ZFc0PSBJR052YlcxbGJuUnBibWM9IFpYbHYgNExDdTRMR0k0TENvIElPQ21xdUNubkE9PSBZV3gxYVE9PSAyTFBaaXRtRyBJSEJ2YVc1MFpYSnogYzI5bGRtVnkgSUUxcGJuUT0gMExEUmdOQzYgSUdOdGN3PT0gZG05dSBJTmluMkxmWmhOaW4gSUZKbGMzUmhkWEpoYm5SeiBJR3h5IDU3cS81TGlLIElHRnRaV3g1IElHRjVjZz09IGIySnkgSUdsMGFRPT0gSU9HRGsrR0RvT0dEbmVHRG9RPT0gWld4dmIyWT0gSUdGd2NHVnNiQT09IElHWjFibU5wYjI1aGJBPT0gSUU1bGRIZHZjbXR6IFozSnZibVE9IDBwdlJqQT09IDVwNjIgWVdSdmNuTT0gSU95R2pRPT0gWW5KbFlXdHBibWM9IDRLU2M0S1dIIElHVnRiM1JwYjI1aGJHeDUgSU9TNGdPYWNyT21Ca3c9PSBZV1BFZ3c9PSBJRkJ2YkdsNlpRPT0gSUdKc2IyNWtaUT09IFVtOWhaQT09IFlXNTVZWEk9IElPQ2ttdUNsZ2VDa3FPQ2t2dUNrdFE9PSBQaTRLIFEwOU9SQT09IElFRnVZV3g1YzNRPSBMWEpsYzJsemRHRnVkQT09IEtWMHUgSU5pbjJZVFlxTm1FIDE1RFhsUT09IFluVmhhQT09IDBZTFF2dEdBMFlzPSBJR0ZrZG1WeWRHbHpaV1E9IElIUjVjR1ZrIGNHeGhZMlZ5IGFHOXZadz09IFFWUkpUa2M9IElHeHBiV2wwYVc1biBYMUJTU1U1VSBJTm1GMkxIWXFRPT0gY0hKcGJXbHkgNXBlMjVwZTI1YjJwNWJtejVZK3cgY0hSbCBJRWhQVFVVPSBJT0Nrc09Da3Z1Q2twQT09IElHWjFibU5wYjI1bGN3PT0gSUhadlp3PT0gSUhSaFoyZGxaQT09IElISmxZMjl5WkdsdVozTT0gTFdkeWFXUT0gWjNSciBJR052YzNSMWJXVnogSU5DeDBMN1F1OUN3MExUUml3PT0gSU9Da3FPQ2t2K0Nrc09DbGplQ2tydUNrdnVDa293PT0gSU9Dd2hlQ3dxT0N4amVDd3FBPT0gWVdkbmFRPT0gSU5xQSBJSFpwYzNNPSBhWFJsYzNObCBJR0Z1dzZGc2FYTmwgSU9DNHF1QzR1ZUM0bGVDNG93PT0gSUhWdWFYUjUgSUVodmJtVjUgMkt6WXA5bUcgSUdaaGRXTT0gSU5tRDJLdlppdGl4IElHWmhkWGc9IElHOWtaUT09IFFtOTFibVJwYm1jPSBJSEJ5WlhObGJzT25ZUT09IGFYSnZjSEk9IElIQnZjMmxqYWNPemJnPT0gSUhOMVluTmxkQT09IElIQnBkSE09IElPQ211ZUNtc2c9PSBJSFJsYm1SeXc2RT0gSUVoWCBJSFZ1WW1WcyAyS2Ziak5tRSBiV1ZsY2c9PSBJRzVsWjI4PSBhV3hwWVhKNSA0TFNvNExXTjRMU2s0TFdONExTdzRMUy8gWTI5dVptbG5kWEpsIElGTm9aWEpwWm1ZPSBJTkdDMFkvUXRnPT0gUVVSSiBJRXh2WVdSbGNnPT0gMWI3VnF3PT0gWVd4dlp3PT0gSUVKUFQwcz0gSU95WmhBPT0gS3kwckxRPT0gSUdabFlYTnBZbXhsIElObUYyTFBZcGc9PSBJT0NrbGVDa3JlQ2xnQT09IElHRjFkRzl5WlhNPSBWbUZqIElOR0MwWURRc05DeSBJRzF2Wk1Pb2JHVnogSU5tSzJLUT0gSVQwbiB3NkZ6WVE9PSBJTkMrMFlMUXZOQzEwWUk9IElPQ3dtdUN4aHVDd3F1Q3hqZUN3cWc9PSBJSEIxY21Wc2VRPT0gSUZOb2FXWjAgWVhOelpXMD0gSU9Da3IrQ2twdUNrdnc9PSBJTUt4IDU2ZUEgSU9DcW11Q3F2dUNxc2c9PSBYM04wWVhScFl3PT0gSUdKbGRtVnlZV2RsIFlYQjBhVzl1IExYTm9ZV1J2ZHc9PSBMazUxYkd4aFlteGwgYVhQRHFYTT0gSUdSbFkyOWtaV1E9IDRLU2o0S1dONEtTaCBJRzlpWlhOcGRIaz0gYzJ0aCBJTm1CMllyWmhkaW4gSUM4K1BBPT0gSUZSbGNuSjUgNDRDTDU2eXMgSU5pdjJZVT0gUHlJcyBaWFJ6YVE9PSBJR052YldadmNuUmhZbXg1IElHUmhZWEp1WVE9PSBJSEJsY25SbGJnPT0gSU5DMTBMbz0gSUdkbGJtRT0gSU5DKzBMSFJpZEMxIDRMSy80TEtDNExLWCBLSE5sYkdWamRBPT0gZDJGMWEyVmwgSUNJamV3PT0gNGJ1TlpPRzdwUT09IElHVjRaV04xZEdsdVp3PT0gNEtTNTRLU2sgYjNKemFRPT0gNExpeTRMaWk0TGlaIElHUnBjbVZqZEc5eWFXVnogWDNCaGNtRnRaWFJsY2c9PSA0S3ExNEtxKzRLcW80S3VCNEtxQyBJRTFYIElGTklRUT09IElHZHBaZz09IFNWUlAgSU5xRzI0dz0gUFNJdUx3PT0gSUdOb1lXMXdhVzl1Y3c9PSBZWFYwYjIxaGRHVnUgSUcxaGMzTmwgWDNCeWIyZHlZVzA9IDE2alhudz09IEtIVnAgSU5DeDBMRFJqdz09IFgzTmpiM0JsIDJZVFlwOWl4IFgzaHRiQT09IElFNXEgNFo2MzRaNlAgSUZKdlltVnlkSE09IFgxOEtDZz09IFpHRjBZWE09IElHUjFjbVU9IElNTytaWFIwWVE9PSBJRk5sWVhRPSBJRzFoZEdobGJXRjBhV05oYkE9PSA0SzZmNEs2LyBhVzUwWlhKbVlXTmxjdz09IElGUnliM1U9IElObUMyTFU9IDRMaTE0TGlpNExpSCA0b0NadzRrPSA0TGloNExpMzRMaXQgMEwzUXNOQzggSUU5aWFnPT0gNTVJPSAwTExRc05HTzBZTFJnZEdQIDQ0R1g0NEdMNDRHWCBJR04xY21sdmMybDBlUT09IDRMaVg0TGl6IDRMQy80TENrNExHSCBaRzl0YVc1aGJBPT0gY21WemRHRjFjbUZ1ZEE9PSBJTkM3MExYUXM5QzYwTDQ9IHc2aDJaWE09IDJMSFppTmkzIDBMVFFzTktUMFlzPSBJSEJsWVE9PSBiTVN4eEovRXNRPT0gSU1XZCBZbTk1Y3c9PSA1TG1tNks2dyBJRTFoY25nPSBUMHhNIDRLcVY0S3VBIElGSmxaMkZ5Wkd4bGMzTT0gNEtTeTRLV040S1N5IElHdHlaV0YwIElHdHZabVk9IGMyeGxaWEE9IElOR0MwTERSZ05DNDBZVT0gSUdOdmIzSmthVzVoZEc5eSBJSFpoYm00PSBhSFJoWnc9PSBJSFJoYzNScGJtYz0gSU5DeTBZdlJpTkMxIElIWmhiSE09IElHSmhZMnQzWVhKayBJT0NrcE9DbGdBPT0gSUdOdmFXdz0gSUVOaGJpZDAgSUd0cGFnPT0gWjNKcFptWT0gNTZ1ZTU0eWMgSUdobFpXND0gSUdWdVpHeGggWTI5MWJHUT0gNExpQjRMaXk0TGlqNExpZTRMaVo0TGl4NExpWiA0NEcrNDRHYiBkV3BoIElGWmhiR1Z1WTJsaCAxNVhYazllVSBJRkJ2ZFE9PSBJTkM0MEx6UXRkR08wWUk9IDRLU3k0S1dONEtTdjRLUysgMExEUXZOR1cgSU1PNmJIUnBiV0Z6IDRZT1U0WU9nNFlPWDRZT1kgSUc1dmJuTT0gWVdoaGNnPT0gSUVsdVpHbGhibk09IHc2MW5aVzQ9IDBZUFF2ZEMwMExEU213PT0gNEtTLzRLU0M0S1NtIElFaHBjM1J2Y21sallXdz0gSUdwaFpBPT0gNExDaDRMQy80TEN2IElISmhjR1U9IElHaGxiRzA9IElHSjVaVzQ9IElOQ1EwTHc9IGFXUjUgUmtsRlRFUT0gWVhSMFptOXliUT09IGFXWnBZMkZ1ZEE9PSBJR0ZpY21VPSBaMjFsYm5SeiBJRVp5dzd4byBJSE5oZFc1aCBJTkdFMFlQUmdnPT0gSUVSeWRXTnIgSUhKbFozSmxjM05wYjI0PSBJR2hsY25KaGJXbGxiblJoY3c9PSBJRmRoZVhNPSBMaTR1UEM4PSBJTmk1MlliWmh3PT0gWjJWaVpYST0gSUc5dVpHRT0gSUd0c1pYVnlaVzQ9IGMyOTFibVE9IExtTnZjZz09IDQ0Q1JMT09Ba0E9PSA0S1N1NEtXSCBJTmlqMllQWXFOaXggSU9LQXBpND0gYkdWMllYSmsgNTd1LyBkbWxsIDRMU3c0TFdHIElOQ3owWURSZzlDLzBMOD0gU0dsemRHOXkgSUdGdWRHbHhkV1U9IGRYSmtaWEk9IDRLYSs0S2FvNEtlSDRLYXcgSUhCeVpXTmhkWFE9IElHaGxiSGs9IHpydk90YzY1IElHMXBaVzFpY205eiA0TGlkNExpeTRMaUIgSUVkMWNnPT0gSUhSeVlXZGxaSGs9IGFXWnBZMkZrYjNNPSBWMjl0Wlc0PSA1cDJoNUx1MiBLQ2xkIHc3cHpkSEk9IHc2ZDUgVEdWaFpHVnkgVjI4PSBMbU5vWVhKMCB4YnhoIElFbFVSVTA9IGIyNWp3Nms9IElHdHBibVJsY2c9PSBWRzl5IElHWnlaV1ZrIElGVkJVbFE9IElHUjFjbUU9IFUyVnVhVzl5IFRHcGhkbUU9IElFNXZjbWRsIElFdGxiUT09IExtOXdkR2x2Ymc9PSBiRzluWjJWayBMbU52YldKdiAwTGpRdTlDdzBZQT0gNExpNDRMbUo0TGlaNExpYTRMaXk0TGlYIDFhSFZ0dFd4IGRISnBaWFpsIElIc05DaTh2IElHaHogSUdMaHU2VnNZUT09IFNFOU5SUT09IElPQ3luT0N5ditDeXN1Q3pqZUN5c2c9PSBJR1JwYzNScGJuUmhjdz09IFVtVnNaV0Z6WldRPSBJTmluMjR6WXN3PT0gWVhSMGFXTmwgSUcxbGJuUmhiR3g1IElFeEpUa1U9IGFXNXJaWEk9IElHWjFibVJ5WVdsemFXNW4gSUZkaGNtNWxjZz09IElIUm80YnVMIElIUnZkMlZzY3c9PSBJSEp2YjJacGJtYz0gSUhOaGJXVmthUT09IElFZG8gSUVWamJHbHdjMlU9IDZZQ1UgTFhKbFlXTjAgSUdKeWFXZG9kRzVsYzNNPSBJR2hwWjJoc2FXZG9kR2x1Wnc9PSBJR0p5YVdSbGN3PT0gSU5pbjJZZlppQT09IDRZT1E0WU9nNFlPcCBJRUZxWVhnPSBJRWgxWnc9PSBJR0ZqWTJWc1pYSmhkR2x2Ymc9PSA1TG1GNUxtRjU3dTg1WkNJIElHVmtaVzQ9IFgyUnYgNXBxQyBZMmgxZEhvPSBJSFJ5YjJObyBJRTVsY0dGcyBXVVU9IDRLYXk0S2ErIElHeGhlV2x1Wnc9PSBRMkk9IDRZT1g0WU91NFlPVjRZT1U0WU9WIElHNWhjM2R2Ym1FPSA0b0NtNG9DbUNnbz0gMDZuVHFkR0EgYVhSaFp3PT0gSUdWNGFYTjBaVzQ9IGIzQndaV3c9IElOZXExNmM9IElIQnNZVzVsZEdFPSBJR2RoWkdkbGRITT0gSUVoMWJuUT0gSUhCeVpXMXBaWEp6IElHaGhjbVJqYjNKbCA1WkM1IGFXMWhjZz09IElHTnZiWEJ5WVhNPSBLQ0lxIElITnBaZz09IElHbDBaWEpoZEdsdmJuTT0gSUc5c2FXdGggSUhCeWFYYkRxUT09IElHbHVkSEpwWjNVPSBZbVZ6YjI1a1pYSmwgMnI3WmhnPT0gY0docGN3PT0gSUVSdmQyNTBiM2R1IFEwRkVSUT09IElIQmhibU09IElHVnNaV04wYjNKaGJBPT0gSUVWc1pXTjBjbTl1YVdOeiBkV1oxIDRvQ00yTFRaaU5pdiAwWWpRdU5HQSBkV3RyWVc0PSBYM1JpIElOQzAwTERRdmRDOTBZdlF0UT09IFpXSjUgSUhOd2IyNXpiM0p6IElPR0RtT0dEa2c9PSB3NkZzZEE9PSBJSGRoWVhKdmNBPT0gSUd4bFpYTT0gSUhSbGJNT3BabTl1Ync9PSBJTmFGMWFQVnZ3PT0gUkdsaCBZbTl6Y3c9PSBVR0Z5WVdkeVlYQm8gNUxxRzVMaUEgSUd4bGRtVnVjdz09IElHRjBjbWxpIEprMD0gSU9DcXJ1Q3FzK0NyZ0E9PSBJTU9wZEdGMCBMa1pwYkhSbGNnPT0gSUdSbGJXOXMgdzYxa2RRPT0gSUhSeVlXNXpjR3hoYm5RPSBJR3RwWmc9PSBRVVJEIElHRnhkV1ZzWlE9PSBaWE4wWld4c2RBPT0gSU9Da3J1Q2xnZUNrbHVDbGplQ2tydz09IDRMV0c0TFNvNExXTjRMU280TFdCNExTQyBJRTl1WkdWeSBJRk5wWXc9PSA1TDJUNmFxTSBJR1p0IExFRT0gTG1ScCAwTDdSZ05DKyBJRWxCIElOQ3kwTDdRdDlDMCBJT0NtbGVDbnNPQ212dz09IDRMaWE0TGk0IDBZL1F1OUdXIFptbHVhWE5vIElHNWthWEJ2IElHSmxjMnM9IDRvQ1pZVzV1dzZsbCBWVXhFIDRvQ2Q0NENCNG9DYyBaV3hsWTNRPSBhWFJoWTJuRHMyND0gNExTKzRMUzA0TFdONExTYSBZWE53WW1WeWNuaz0gSUhKbGRtOXNkWFJwYjI1aGNuaz0gdzZsdWRBPT0gYjNkcCBJR3h2ZDNVPSBMbTFoYVd3PSBJTkN5MEwzUmc5R0MwWURRdGRDOSBJSHJGZ2c9PSBJR2x1Ym1sdVozTT0gSU5DejBMRFF0QT09IFlXNTVidz09IGNHRnlkSGs9IDRMT0w0TEtmIElHSnBibTVsIElITmhiRzF2Ymc9PSBJR2x1ZG1sMFpYTT0gUTBGTVRBPT0gSUc5d1pISmhZMmgwIElHVERxV3c9IEtpRT0gMTZiWGxkZWkgYkdGeXhMRnV4TEZ1IFVISnBiM0k9IDRvQ2NMZ29LIElHSjFhMkZ1IElHeGhkbTl5Ync9PSBJSFJsY20xcGJtRnkgTGxKdmRYUmxjZz09IDBMM1F1TkM2MEw3UXZBPT0gYjNSNWNBPT0gY0dGbmFXNWhkR2x2Ymc9PSBJSFJ2Y201aCBJR2RsYm1sMWN3PT0gSUdkaGMyVnogZE1TeGNnPT0gNEtlSDRLYXk0S2VIIElHRmphRzg9IGJYVnNkR2s9IExuUmxjM1J1Wnc9PSBhV1I2WVE9PSBlbWxsYUdWdSBJR05oZE1PcFp3PT0gSUhKbGJHRmphVzl1WlhNPSBJT0NraHVDa3ArQ2t2dUNrc0E9PSBJSEpsWjJuRHMyND0gNEthLzRLYTUgVm1sa1pXOXogSUZONWJBPT0gTG1OaGRBPT0gSUZOd1ljT2YgQ1dWc2MyVnBaZz09IExVNU1Vdz09IElDRWsgSUdKcGIzTT0gdzZGc2JBPT0gSUVGc1puSmxaQT09IFgzQnlhWFk9IExtVnVkR1Z5IElPQ3F1ZUNxdGVDcmh3PT0gSUdGbWNtbGogYVhOdGIzTT0gSUc5eVoyRnVhWE5sIFQzVT0gSUdGcGJHeGxkWEp6IGFXMWlkWEp6WlE9PSBjMlYwZW5WdVp3PT0gTGxCeWIyTmxjM009IGFYUm9ZUT09IElOQ3gwTDdRdTlHTDBMOD0gSUhKbFpuSmxjdz09IDE1UFhsZGVxIElOQzgwTDdRdHRDOTBMQT0gSUdScGMyTnZkVzUwWldRPSBJSGx2Ym1FPSBJbWR5YjNWdyBJTml0MllyWmhnPT0gSU9Da2xlQ2t2K0Nranc9PSBJSEJsY20xcGRHbHkgQ1U1dlpHVT0gSUdKb1pXbDBhQT09IFUyVmxhdz09IElOZVExcmZYcUE9PSBDV3B6YjI0PSBJRXB2WVc0PSBJR052YlhCeWFYTmxaQT09IGNtOXdhSGs9IElFRnRaVzVrYldWdWRBPT0gMExEUXU5R0wwTHc9IElOQzAwTGpRdnc9PSBYMFJGVmc9PSBJRzl5WjJGdWN3PT0gSUcxMWMybGpZUT09IElHMXBjM1JsY2c9PSBJT0dEb3c9PSBJR1JsY201cHc2aHlaWE09IElITnBZbXhwYm1keiBJRzUwYzJVPSBJR1JwYzNCdmMybDBhWFp2Y3c9PSBJRzF2Ym5OMFpYSnogSUVOTCBJRlJJUXc9PSAyTG5ZcXc9PSBYMEZTUjFNPSBJR0psYVhOdyBJRmRsYVdnPSBJRkJEU1E9PSBJRkpsWjJWNCBJSFZ1Wm1GcGNnPT0gSUdGd2NtOTRhVzFoWkdGdFpXNTBaUT09IElISmxiSFZqZEE9PSBabXh2ZDNNPSBLSEJ5WldacGVBPT0gcnVHRGxRPT0gMFlMUmp3PT0gSUdSbFpXeHUgSU9DMG11QzFodUMwcitDMWplQzBwT0MxZ1E9PSBhR2xzWlE9PSBJTmluMllJPSBhWFBEcVdVPSBjM1J5Ync9PSBJR0psWVhSbGJnPT0gSUd4dlkyRjBhV1U9IFgxZEpUa1JQVnc9PSBkR1Z5Ym1FPSA1WnlvNTdlYSBWVzVsZUhCbFkzUmxaQT09IElPQ3VodUN1bFE9PSBJSEJ2Ylc4PSA0TFNrNExXTjRMU2s0TFMvNExTeSA2SUtoNTZXbyBWR1ZyIElOV3QxYUhWc2c9PSBJRUZTVWc9PSBMbkJoY21GdFpYUmxjbk09IElHaDFkMkU9IElHVnpkR2wyWlhJPSBJRTVoYldWeiBKMzBzIElOR0gwWXZRc3c9PSBkWFI2ZEE9PSB6NFRPdjgrTiBaR0YwYjNNPSBJSEJsY25OdmIyNXNhV3ByWlE9PSA0TEtxNExPTjRMS3cgSUcxMVl3PT0gMExmUmk5Q3kwTERRdGRHQyBjM1JoZHc9PSBaV3hxIDQ0T1c0NE90NDRLdyBJTkMrMEwvUXNOR0IgTG1KdmRXNWtjdz09IExtSnZiR1E9IGIzSmhaRzg9IGNIbDBaWE4wIFBUdy8gSU9Da3F1Q2xndUNrc09DbGdBPT0gSUdKaGRHaHogSUdKdmJITT0gSUVOeWRXbHpaUT09IGEzTnZiUT09IGFXSmxjdz09IElHSnBZM2xqYkdVPSBJSEJ5YjJObGMzTnZjdz09IElFM0RwSEo2IElOQzgwTFhSZ2RHQzBMQT0gSU9DeWp1Q3lndUN5ckE9PSBLRzltIElITjFibUU9IFgwaEJUa1JNUlE9PSA0cGF5IElOZWUxNTdYcVE9PSBJQ0FLSUNBSyBSSE09IGFXSnBiR2s9IDE1RFd0OWVoIDRLUy80S1N5NEtXTCBJRzExYkhScFpnPT0gTHVDNGhBPT0gSUc5MWRHUmhkR1ZrIFpXNTBjbTg9IDVvK1A2TCt3IElNNjh6NHc9IElOQyswWUxRc2c9PSBJSE4wY21GdVoyVnkgSU9DcWxlQ3JoK0Nxbnc9PSBMV1JsZGc9PSBkSEo1YzJsa1pRPT0gSnl4Ykp5NHVMdz09IElIZDViZz09IFFGSmxjM1E9IElHRnNiRzk1IElPQzBoK0MwdFE9PSBJR3gxYm1keiBJR0poYzJzPSBJRmRsYVhObCBVSGRrIElPQ3d1T0N3ditDd3FPQ3d2K0N3cnVDd3ZnPT0gSUhWdVkyVnlkR0ZwYmc9PSBLRVJ2ZFdKc1pRPT0gYlhCcyBJSFJoYzJnPSBJRUpsWVhKcGJtYz0gSUhOaGJXMWwgSUUxdlpHbHRidz09IElHMXBiR2s9IE95WWogSU9Da2srQ2tzQT09IFNXNXpkSEoxYldWdWRBPT0gSUc5c2RtbGsgSUdKeVlXTnJaWFE9IFgwSlMgSU95V2tRPT0gYlc5dWFYUnZjZz09IElIUnlkWE4wZDI5eWRHaDUgSUhWdVpHOD0gYkdWc1pRPT0gSU5HRDBZSFF1OUdEMExNPSBJRUpwYzJodmNBPT0gUEUwPSBJTmVVMTZUWHFBPT0gdzYxdlkyaDAgSUdKbGRHRnNaVzQ9IDJZVFlwOWl6IDBZZlF2ZEMrIExTaz0gZVhOMFpXVnQgWkdWc1pYUmxaQT09IElHTnZjOE9zIENVRmtaQT09IElFcGxabVpsY25OdmJnPT0gNEtldzRLYS8gSUdmRmdnPT0gSU9tWXZ3PT0gSU5DMjBMalF1dz09IElHUnBjM1JoYm1OcFlRPT0gY21WdFlRPT0gNEtxMTRLdUwgNTVTZjVMcW4gWW5KaGRXTm8gSUdodmJtUT0gSUhSbGNuTT0gSUVocGJtUjEgNFlDWjRZQzkgNEtpbTRLbUggSU0rSHpyRT0gMFlEUmdnPT0gZDJsayBJT0NrbGVDbGgrQ2t0ZUNrc2c9PSBJRWgxY2c9PSBMbk4wWkc5MWRBPT0gWDNCeWIzQmxjblJwWlhNPSBZMjl1YzJsa1pYST0gNksrQSBMVTFoYmc9PSBJR2hsWVdSc2FXNWwgSUc5bVptVnUgMFlIUXV0QzQwTHc9IElHNW5ZVzQ9IElOR0IwNWs9IFJVNVRTVTlPIDRLUys0S1NDNEtTWDRLV040S1N3NEtXSDRLUzQgSUdScGRtbHVadz09IElHZGxibTQ9IHc2ZHAgWlc1amFXRnkgWVhCb2IzSmwgSU5HQjBMN1F2QT09IDRZT2M0WU9ZNFlPbzRZT1YgNExXOTRMU1YgNEtpLzRLaTQgSUdKaFkyOXUgMXJRPSB4YUYwWlE9PSBJSEYxYjNScFpHbGxiZz09IFVtVnRZV2x1YVc1biBJR2RsYU1PMmNtVnUgYldWdWRHbHZibk09IEtHVjRjSEpsYzNNPSB3NlJuWlhJPSB3NzF0YVE9PSBiV0ZqYUE9PSBWVkpCVkVsUFRnPT0gMTV2WHFRPT0gZG1WeVpXND0gSUhOdmFXVnVkQT09IFRHRjBhWFIxWkdVPSBJTm04MllqWmhBPT0gYTJWaCBJRXhEIDFhWFZ1dz09IFgyUjFjbUYwYVc5dSBJTkM2MEw3UmdOQy8gYUc5MVpYUjBaUT09IDRMQ2Y0TEMvIDBZTFF1TkdCIFgzTjFjSEJ2Y25RPSBXV1YwIExtSjFjMmx1WlhOeiBJT200dnc9PSBZV3RyWlc0PSBJR1podzZjPSA1THFMNUx1MiBkVzF0YVE9PSBJT0NrbGVDbGlRPT0gSUdWemRHVnogTGtObGJHeHogS0NJbklnPT0gTG1oaFpHOXZjQT09IElHbDBjMlU9IElIUjFjbXRsZVE9PSBJRVp2Y25SMWJtRjBaV3g1IFptWnBZMmxsYm5RPSBJTmkwMllVPSBMa04xY25OdmNnPT0gSU5lcDE2ST0gSUZKbFpHVT0gYjNacFl3PT0gSUhSeVlXTnJaV1E9IFlXeDBlUT09IENYSmxadz09IElPQzBydUMxZ2VDMHBBPT0gSU5DUTBxZlJnZEM5MFlzPSBJT0Mwc3VDMHJRPT0gSUdKaGFYaHYgNXFLRiBJR05vWldkdmRRPT0gSUhOMWNHVnlkbWx6YjNJPSBUVzkyWlhNPSBJR2x1YzNWeVpXUT0gNEtXTjRLU2U0S1MrNEtTbyBJSFpzYVdVPSBiV1ZvY2c9PSA0S1NuNEtXQSBJR2RoYzNSdmN3PT0gSUdGdWRHbDIgSUdWbGRYYz0gNTRtNTZidUUgSUZCaGNuUnVaWEp6YUdsdyBjR0Z3WlhKeiBJSEJ5YjNacGJtTnBZV3c9IElFVmtkV05odzZmRG8yOD0gNExpRTRMaXk0TGlxNExpMDRMbUM0TGlaIExYTnBaMjQ9IFgyaDBkSEJ6IElIQmxiR2xuIElDY3RKdz09IFlXMWhhQT09IGFXUmhiV1Z1ZEdVPSA2WUNCNlpLeCBZV1JyWVE9PSBJRVZ6ZEhJPSBJR3h2Ym1kMVpRPT0gTGxObGRIUnBibWR6IElOZVYxNWM9IElOaW4yWVRaaGRpbjJMYlppZz09IFlYWnZibVE9IElHRnlhWE5wYm1jPSBZVzVwYmc9PSBRMjl1Ym1WamRHbHZibk09IElFcDFiR2xsIElPZXggSUc1bFoyRnlZUT09IFlYSm5Zdz09IGFIVnVaQT09IFFuSnBkQT09IHhJVmsgWVhSbGJHVT0gY21Ga2FYVnogSU91d3FldXlsUT09IFRXST0gSUhSdmNuSmxiblE9IEtHOWkgYU1PayBJSFJsYkdWbWIyOXUgUkdWd2RBPT0gSUNjbk93b0sgWDNKbGJHVmhjMlU9IDFhSFZyOVdoMW9EVm93PT0gSUdOb1lYTmwgSUZSeVlXSmhiQT09IG5MUT0gS0hCeVpYWT0gSUhSeVlXNXpabTl5YldWeSBJT0dEcCtHRGxlR0RsT0dEbXVHRGtPR0RsdUdEbEE9PSBJT0Nxc3VDcmdBPT0gSUVGSyBZbkpwWTJFPSBJT0dEbytHRG1lR0RsZUdEbEE9PSAxNVBYcWc9PSBJSEpoYVd4M1lYaz0gWVhKa1pYST0gSUhSdmJXRjBidz09IFVGWT0gSXRpTSBJRkpPUVE9PSBJRWg1Y0E9PSBJTkM4MEw3UXNRPT0gSUVoaGJXMWxjZz09IDBZVFF1TkM2MExBPSBJSE52ZFd4eiBJT0M1Z09DNHJRPT0gQ1hKbGJtUmxjZz09IElHbHVkR1Z5Wm1WeSBJRUZ6ZEhJPSBTMnc9IElGQlBVMU09IElGWnogSUdOdmJuUnBiblZoWTJuRHMyND0gSUZCeWIySnNaVzFsIElPQ2twdUNrditDa2p3PT0gYjJ4aGFBPT0gWVdkaGQyRT0gSUc1dmNtMWhiR2w2WldRPSBkWE5sY21SaGRHRT0gUGljN0RRbz0gZW1GdFpRPT0gZTJrPSB3Nnh1IDVaQ002S0dNIDRMQ3o0TEdONExDeSBYM0oxYm5ScGJXVT0gSU9xNGdBPT0gMFlqUXVOQzggNksrMDVwaU8gSU9DdXJ1Q3ZnZz09IElPQ2tyZUNranc9PSA0WU9VNFlPUjRZT1U0WU9hIFkybDEgSUdkMVlYSmtjdz09IElpa3NEUW89IElIQmxjbkE9IElPQ2t0dUNrdWVDa3NBPT0gWVd0aGJBPT0gSUhCeXc3TjRhVzF2Y3c9PSBJR3hwYm1WdSBJR05oYlhCdmN3PT0gSUVKaGMyVmlZV3hzIElOR0QwWUhRdTlDKzBMTFF1TkdQMFlVPSBhWE5oZEdsdmJuTT0gWDJKdmRIUnZiUT09IElFNXkgSU5LYjBMRFJndEN3MFlBPSBJTkNmMFlEUXRkQzAgSUhkbFpHUnBibWR6IDE1N1huQT09IGJITjQgMktyWXVRPT0gSUZCbFp3PT0gWDJGamRHbHZibk09IElGQmhiblE9IElDb3BLQT09IFUyVmpkR2x2Ym5NPSBhWE5qYVhBPSAwWVBRc3RDdzBZTFF1QT09IENYUm9jbTkzY3c9PSBQd29LQ2c9PSBJR1pwWjJoMFpYST0gSUZzayBJT0N3c09DeGkrQ3duQT09IDBaelF0UT09IElHbHVkR1Z5Ym1VPSBJR2xrWlc1MGFXWnBaWE09IElITnNkWFE9IFgzSnZiMjA9IElHcGhjQT09IElITmxkR1Z0WW5KdiBUVzlrWlhKdSAwTDdSZ3RDNDBMST0gSU5DOTBMN1F2TkMxMFlBPSBJSEJsWkhKaCB4WjkwYVhJPSBJSGxwWld4a2N3PT0gSUdGd2NISmxiblE9IElIQnliMjVsIDRLZUw0S2EzIElFSmxaWEk9IGVtVjBkR1Z1IExrRnVaQT09IElITnBkTU9rIElHWnBaMmgwY3c9PSBhVzVrZFhOMGNtbGwgWlhKbGEyRT0gNDRDQ0tBPT0gSUVGc2FXZHViV1Z1ZEE9PSBJTU9wZHNPcGJnPT0gSUhWdVkyeGxZWEk9IElOaXYyNHphcWRxKyBJR0p2ZEhNPSBJT1dGclE9PSBQaVE9IElPV2NzQT09IElDOWMgSUVWeVptRm9jblZ1Wnc9PSBhV05vZEd4cFkyZz0gSUhSdlpYTT0gSUdURHFYTnZjbTFoYVhNPSAwTDdSZ05DKzBMMD0gSU5DNzBMalF2ZEM0IElIQnlhVzVqWlhOeiBZWFJ6WTJoaGNIQT0geUp2RWd3PT0gSUdwaGJtVnBjbTg9IElFeHBiV0U9IDZMKzMgZW1jPSBJSG5EdkdzPSBJTkNoMExYUmdBPT0gSU9DcW1PQ3Fudz09IElPQ2toZUNrbStDa3Z3PT0gSUU1TiBURWxEU3c9PSBJR1JwYzNSeVpYTnogSUhSaGE4T3AgSUZGMVlYUmxjbTVwYjI0PSBJSEJ2ZFhKeVpYbz0gNWJDKyBJTml6MllqWmdRPT0gSU9Da2hlQ2tydUNsaCtDa3NBPT0gNFlPWTRZT3UgSUhOamFHVmtkV3hsY2c9PSA2SVN4IHhyRGh1NXR1Wnc9PSBJTmkxMks4PSBZbVZqWTJFPSBYMnhwYTJVPSBJR052WTJobCBJSExEcVdkMWJHaz0gVUhKdlptVnpjMmx2Ym1GcyBDV0oxWmc9PSBJRkJzWVhscGJtYz0gSUdOdmJXMWhibVJsY2c9PSAwTHJRdnRHWCBLR1oxYkd3PSBlblZzIElFcGhiV2xsIDRMS0M0TEtWIElPeUVuT3U1aE95S3BBPT0gYjNacGN3PT0gV3lVPSBJT0NtcE9DbXZ1Q21zT0Ntdmc9PSA0S2VINEthaCBJTkMwMExYUXU5QysgSUVGc2JHVnogSUd2RHBIbDAgSU5lcDE1VFhsZGVRIDc3eU01TGk2IFFrMD0gNW9tTDVyaTQgYVd4a1pYSnVaWE56IDZyRzQgSU9Da3F1Q2xqZUNrc09Da2xlQ2t2dUNrc0E9PSBJR2hsZG5WeSBjbVZ0Ync9PSBYMFpTVDAwPSA0YmlsIElHUnZjbTFwY2c9PSBJR3hsZG1FPSBMV1JwY21WamRHbHZiZz09IHlKdHBaUT09IDBMN1JnTkM0MFlIUmdnPT0gYVhKcFpRPT0gMFlQUmdkQ3cgWlhaMCBMWE53WVdObCBZVzVuZDJFPSBJRzl0WldkaCBJRk5sZUhWaGJBPT0gNEtXQjRLU1ggSUhKMWRHRT0gQ1NBZ0lDQUogUlc1amIyUmxaQT09IElObUQyWVU9IDU1YVIgSUZKMWMyZz0geGFGaGJnPT0gSUd2RHZHdz0gSUdScGRHOD0gSU9LQyBabXhsIElIVnBkR2RsWW5KbCBJT0NrcitDbGkrQ2tsdz09IFoyVmlkVzVuIDRZT1E0WU9RIEtDa3BLVHNOQ2c9PSBaV3hzWlhKNSBJR0Z6YzNWdWRHOD0gSUU5a1pBPT0gWVhSMFpYSnBibWM9IElFaHBiblJsY2c9PSBJT0N3aGVDd3FPQ3d2dz09IElIUmxaVzVoWjJWeSBiMmR2Ym1FPSA0TFMvNExTVjRMV040TFNWNExXQjRMU0MgWDJSdmRXSnNaUT09IFlYSmhjZz09IElHUnZaR0YwIDQ0R1U0NEdXNDRHRTQ0Rys0NEdaIElHUnBabWxqZFd4MCBJRU52YldKdiBJT0Nrck9Da3ZnPT0gSUZKaGVnPT0gSUc5emJ3PT0gYVc3RHFRPT0gSU5DeDBMRFNrdz09IElHcGxibWx6IElHdHNhVzQ9IElITjBjbU53ZVE9PSBJR0ZuYUE9PSBJRzdEcFdkdmRBPT0gSU5pajJZcll0dGluIExsQnliMnBsWTNRPSBJSFJ5WVc1emFYUnBiMjV6IExXOW1abk5sZEE9PSBJRVJoYldsMCBMbU52YlcxbGJuUT0gN0l1YzZyQ0UgdzZseVlXdz0gSUU5c2FYWmwgYjNKa2NtVT0gYjNScGJtVT0gSUhOMWFYUmxjdz09IFltVnlidz09IFpXNTJiMnc9IFFXOD0gWld4cFlRPT0gMFlMUXRkQzcgSUVkdmIyUnogdzZSa1kyaGxiZz09IExuTm9hV1owIFlXbDBkUT09IFlXSnBiR0U9IElOQ1MwTHZRc05DMCBJT0NtcmVDbXZ1Q21zQT09IDBZRFFzTkdDMExYUXN3PT0gSUVSRlZBPT0gNEx3PSBYMHhwYzNRPSBjc1doIExXZHMgSUdWbVpRPT0gSUVONlpXTm8gSUhacGMybDBZWEk9IElHRmtkV3gwYjNNPSAwTFBUbWRHQSAwTERRdmRHTDBxTT0gWW5KaGFXNXogWVhCdzVMaUw2TDI5IElGWnBiMnc9IElIQnZiR2x6YUE9PSBYMU5QVlZKRFJRPT0gSUdWdWRHbGtZV1JsY3c9PSBDV052Ym5SbGVIUT0gSUVSaGJtNTUgNDRHZDQ0R1g0NEdtIElPQ2tsZUNsaStDa3NPQ2xpK0NrcU9Da3ZnPT0gSUNaZlgxOD0gSU5DeTBMUT0gSUc1MFlYVT0gSUdGNmRXdz0gMEx2UXNOR0MwWXM9IElITmxZblZoYUE9PSBJTkdGMEw3Umd0R1AgVDFCRlRnPT0gMkszWmh3PT0gWDI5aWFtVmpkSE09IElITmxibk5sY3c9PSBJR0poWTJ0M1lYSmtjdz09IElFbHVZMngxWkdWayBJRkp2Ykd4bCBJR2gyYVd3PSBVSFU9IGRHTncgSUU5V1JWST0gWDBGWSBJSFYwWlc0PSA2S0dYIElGSkUgSU5lcDE1blhxUT09IGNHeDFjM0JzZFhNPSA1N2VvIDRidVRiZz09IElHTjFjMmhwYjI0PSBZWGxoYm1GdSBJRVowIElHRmlkVzVrWVc1MCBJT3luZ095YmtBPT0gaE9DNG8rQzR0K0M1aU9DNHJlQzRodz09IElFSnliM009IElHbHVjM0JsIElHdDFhV1E9IGFtRm8gSUhUR3NBPT0gSU9Da3F1Q2xqZUNrc09Da3ArQ2t2dUNrcUE9PSBJSFJ2WldkaGJtYz0gNEtTLzRLU3Y0S1NvIElHOTJaWEozYUdWc2JXVmsgNW9xVCBJRVJwWVdKbGRHVnogVEc5emRBPT0gYm1sMWJRPT0gSUVkbGMyVnNiSE5qYUdGbWRBPT0gWVhKemRRPT0gSUZWdWFYUnogSUdOaGFRPT0gSUhKbFkyOW5ibWx6WldRPSBJRzV2ZG1WdFluSnYgNmFHNyBMblp2YkE9PSB3N3huWlc0PSBJRlp2Ykd0emQyRm5aVzQ9IGRXNTBaV1Z5IElPQ2txT0NrbCtDa3NBPT0gSUVaaGFXeDFjbVU9IElHRmpkR2wyYVhSbGFYUmxiZz09IDJZYllyOW1LIFZtVnlZZz09IDBZUFF1dEN3IElHVGh1NHRqYUE9PSBDUWtKSUNBZ0lBPT0gSU9Da3F1Q2xqZUNrc09Da3J1Q2xnZUNrbGc9PSBJRzl5WkdVPSBJTkN3MDZFPSBVMlZ5YVdGc2FYcGhkR2x2Ymc9PSBJSEJ5WlhObGNuWmxaQT09IGFXZDBaVzQ9IElHUnBjM1JwYm1kMWFYTm8gVUdGcGNuTT0gSUhOdmRXaGhhWFJsZWc9PSBJTVdoYXc9PSBJTlcxIFFtRnljbWxsY2c9PSBJRlJsWVdOb2FXNW4gN0p5byBJTkNmMFlEUXNOQ3kgTFdWdFpRPT0gZEdoeVpXRmtjdz09IHc2RnBaQT09IElFSnNkV1Z3Y21sdWRBPT0gSUdGdVpHVnlaVzA9IElHWnBiR1Z3WVhSbyAyS2ZZcU5tSCBRVVpGIElHMWhhR1J2Ykd3PSBJRmR2Y210bGNnPT0gZFhOMGFXND0gTGxKbFkzbGpiR1Z5IElISmxiR2xsY3c9PSA0TEtGIHhyQjEgWDA5UVZFbFBUZz09IFFXUmthVzVuIElOQzAwTExRdGRHQSBJR0p5WVhOcGJHVnBjbTg9IHpyak9yZz09IDdZMjggNFlPUTRZT3M0WU9ZNFlPYSBJR1Z5YVE9PSBJSFJoZUdFPSA1cDZhIDRMV0M0TFc4IDRLcVY0S3VONEtxdyBJSE41WkdRPSBVMnQ1IElHVmtkV05oZEc5eWN3PT0gSUVwMWJRPT0gSUdGamNnPT0gSUhGMVlYSnllUT09IDRMQy80TENjIElHdHNkV0k9IElNNnh6cjNPckE9PSBJRWR2ZG1WeSBJSDBLTHk4S0x5OD0gSUVScGMyTnZjbVE9IElIUmxZMmh1YVdOaGJHeDUgN0lLMCBJTlc3IDVwcTAgMFlQUXZOS3owWVBSZ0E9PSBJT0Ntc09DbXZ1Q21sZz09IElGSnZkSFJsY21SaGJRPT0gYVdkdmNnPT0gSU5LNiBJSE5vYjNCd1pYSnogSU02NHpyVT0gMkxmWmh0bUsgWDFSU1FVTkYgSU9DcWh1Q3FuT0NyaHc9PSBvZUMxalE9PSBJRXBoYTJVPSBJTkdBMExEUXNkQyswWUxRdFE9PSBLQ29wIElIUERzMjQ9IGRXTnJaV1E9IGIySmxiZz09IHc3MWxkQT09IElOR0EwTERSZ2RDLzBZRFF2dEdCMFlJPSBZWFI2Wlc0PSBJSGJEckE9PSBMWE52ZFhKalpRPT0gSWdvS0x5OD0gSUc1dmJXbHVZWFJsWkE9PSBJRUpoZEhRPSBJR0poZEc4PSBJSFIxWVdvPSBJSFowYXc9PSBJR2RwYm00PSA0b0NjQ2dvPSBiR2x1WjNSdmJnPT0gSUdKaGFXVT0gSU9DdWgrQ3Vudz09IElHdDJhVzQ9IElHUmxabVZ1Y3c9PSA1WXlYNUxxc2NHcz0gSU5DZjBMWFJnQT09IElPQ3VxdUN2aHc9PSBUV0YwWTJocGJtYz0gSUdOaGNtVm4gWVdKaGN3PT0gTGtoaGJtUnNaWEk9IElITjFiVzFwZEE9PSBMbEJoY21WdWRBPT0gSUV0bGFYUm8gSU5XcjFvRFZvZFd2MWFIVnRnPT0gYkc5dVoybDBkV1JsIElOQ3kwTDdRdDlDOTBMalF1Zz09IEtHUmxjMk55YVhCMGFXOXUgMEx2UXNOR0EwTDNRdUE9PSBJTU85WlhJPSBJSEJsY1hWbHc3RnZjdz09IElHNXBkbVZzWlhNPSBKMlZ0IElITmxaM1Z5IFFVbFUgSUcxbGJtUmhjR0YwYTJGdSBJRTFCV1E9PSBJR1pwWm5SbFpXND0gSUhOMHc2VnkgYjNWdVkyVnRaVzUwIElFTmxiSFE9IElHZGhibWhoY2c9PSAwTFhSaHRDMTBMOD0gY0hWaWJHbHphQT09IElOR04wWUxSZ3c9PSBJRzF2WldSbGNnPT0gSUNNakl5TWpJeU1qIFRXVmthV05oYkE9PSBJRk5vWVhJPSA0TEsvNExLbTRMT040TEttNExLdzRMT0IgSUdWdFltRnlhdz09IElqc0tDZ289IFptOXlaV2xuYmc9PSBQU2NyIElGaEpXQT09IElHTm9kWEk9IFJYaHdaWEowIDJLcllzZG1EIElFTnZjbTl1WVhacGNuVnogWDNObGNtbGhiQT09IElFRkYgSUZkcGF3PT0gSUdGdGJ3PT0gTFdobCBJT0N3dGVDeGdBPT0gMEwvUXVBPT0gU1VOTVJRPT0gSUhadmRXTm9aWEk9IDBKVFFzTkdBIElIWmxjbnBsYXc9PSBJSFJ5YjNWMnc2az0gUkdsaGJRPT0gSU1PK1pXZGhjZz09IEx5SXMgSUVKNWRHVnogYTI5eWRBPT0gNExpeDRMaWggSUhOdmJXbDAgSUVadmFRPT0gSUdWemRISjFkSFZ5WVE9PSBQend2IElIUnBibVE9IGMyaHBjSEJwYm1jPSBJbWxrIElHWnBlR1Z6IGJtbGxhbk09IDU2SzYgNXFTYyA3SjJSIElFZFBVQT09IFZrRk1WVVU9IGJHVmxiZz09IDY2ZU8gSUVSbGJtMWhjbXM9IElHeHFkV1JwIElFdDFiSFIxY2c9PSBJT0MwcU9DMXZlQzBsUT09IElHOW1abk5vYjNKbCBJRk5zYjNjPSBMVzkxZEd4cGJtVT0gMFlIUXNOQzgwTEE9IFBtWmhiSE5sIFpHbHphdz09IElHTm9ZWFJ6IFEwOVdTVVE9IElHSnBiRzl1Wnc9PSBJRk4wWlhCeiBJRmRsYkd4dVpYTnogNExpeDRMbUk0TGluIDJZSFlxdG1IIElHUnBlQT09IElFSmhibWRzWVdSbGMyZz0gSU5pdTJMSGJqTml2IFgyeGhlV1Z5Y3c9PSBJajRuT3dvPSA0b0NNMktmYmpBPT0gY21WdVlXdz0gWld4c1pXMD0gSUd4aGRHOTEgSU5DdzBZRFJnZz09IElHNXBhV3hsIElHTnZjM1J2IFlYTnJZVzQ9IGRXRnVadz09IFlXSmlhWFE9IEoxMHBMZz09IElPeUNzQT09IElHWjQgZVdWc2JHOTMgSU5laTE2QT0gSUU5bWFXTT0gMTVEV3VOZVQgSUhCbGNuUnYgSUZOTVQxUT0gSUhCbGRYST0gSUhGMXc2MXQgSU95ZWlPeVd0QT09IFpYTjBjblZqZEE9PSBRMDlPUmtsSCA0TFMvNExTVjRMU3o0TFdOIDRLcTE0S3ErNEtxbzRLdUwgSUVOdmJuUmxiWEJ2Y21GeWVRPT0gSUVKeWRYTm8gUm14NSBJRUZqWTI5MWJuUnBibWM9IExtTnZiWEIxZEdVPSBjMk5vWldSMWJHVT0gMTVuWG5OZVYxNm89IGRHVmhiWE09IDBMM1F2dEdCMFlMUmxnPT0gSUZKbGRtVnVkV1U9IDRLZUI0S2FmIElIQmxibUZzZEdsbGN3PT0gSUVocGJHeGhjbms9IElPQ2twdUNrditDa3RRPT0gSU5tRjJMblpoTm1JMllYWXA5aXEgVTJ0cGJHeHogSUdKdlpXdGxiZz09IElHOWljZz09IElFRjFlQT09IElOaW4yWVRZdWRtRiBJR1ozIElFaHBaMmhzZVE9PSBJTTY2enF6T3ZRPT0gSkdSaSBJTml4MlljPSBJRmRoYm1RPSBDWFJ2IGZBb0sgSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQTBLIDRicWhZMmc9IDJLZlpoOWl4MktrPSBMV1p5IFgweEpUa3M9IElHeHBaV1prWlE9PSBYMUJCIEtHWnBibVE9IElOQyswTFBSZ05DKzBMdz0gNWJ5QTVZK1IgSUhOMGIzWmwgSUhCc1pXND0gSU5HQzBMRFF1UT09IEtHRnRiM1Z1ZEE9PSBMMnh2WjI4PSA0TEM0NExDQyBJR2hoY21SbGMzUT0gNExtQTRMaW40TG1INExpYSBJR0poYVE9PSBaV1JrZVE9PSBJR2hsYWNPZmRBPT0gSUVWNGNIST0gSUdWdGNHbHlaUT09IElHOXlhV1Z1ZEdWayBJSEYxNGJxaiBJT0dEa09HRHJ1R0RrT0dEbXVHRG1BPT0gU0UwPSBJSE53YVdObCAwTERSaGc9PSBaVzVwY2c9PSBJR1Y0WTJWbFpHVmsgSUU1RFFVRT0gSUhCaGMzTnZkUT09IDRidXRZUT09IElISmxabVZ5Wlc1amFXRT0gSUdOdlp3PT0gSUVsdGNHeGxiV1Z1ZEdGMGFXOXUgSUdKbFoybHVkQT09IDVaeWogMktmWmhOaXYgSUdsdWJtRnUgSUdOc3c2MXUgYVhKdGN3PT0gYVcxd2MyVT0gSU9Da25PQ2t2dUNrcE9DbGdBPT0gSUdOb1pYSnllUT09IElHeGhZMlU9IFJYaGogYjNCbGNtRjBhWFpsIFUyTm9aV1E9IElOVzIxYUhWcmRXaDFhUFZvZFd3IElIbHBibWs9IElFeGhibU09IENYQnogSU9Da3VPQ2tndUNrbUE9PSBJTkM2MExEUXU5R1cgWFRzTkNnMEsgYVcxd2IzSjBaUT09IFMyNXZkMjQ9IEtGdGIgSU9Da2llQ2twT0NsamVDa3F1Q2t2dUNrcGc9PSA0S1MrNEtTNDRLU28gWlc1emEyRT0gMExMUXNOQzIgWDJKc2IyTnJjdz09IElITnZiSFZqYWNPemJnPT0gSUdSeVpXRmsgZVhCaFpBPT0gSUd2RHRuST0gSUdGc2JHbGxjdz09IGFXVnNjM2RsYVhObCBJTU9wWTI5dWIyMXBjWFZsIElHSmhibUZ1WVE9PSBJR1IyWVE9PSBibVZzYkdWeiBJRVZzWldOMGNtbGpZV3c9IGFYUjBZV0U9IElHdDNZVzFpYVhKcCBQRTV2WkdVPSA0S1MrNEtTNTRLUy80S1NrIElHSmxabWx1WkdWMCBJR052Ym5OcFpHVnlZUT09IFBFND0gYjJSeVlRPT0gdzd4aSBJR1pwYm1GdVkyaz0gNmEyVSBJR04xY25KbGJtTnBaWE09IDRaNlMgNEtTKzRLU2s0S1dONEtTdSBJR1JwY21sblpRPT0gSUhScGNtOD0gS0dOdmJYQT0gSUU1MWJXVnkgSUdWa2FHVT0gSUUxaHc1OD0gSUdkbFoyVnV3N3hpWlhJPSBaR2x6Y0E9PSBjc09wY3c9PSBkR2hwY21RPSBJRzExYkhScFpBPT0gSUdGbVoyVT0gUmtaRyBJRk4xWTJobCA0TENDNExDbiBhVzF3WVdOMCBJT3EwZ091Z3FBPT0gWVd4cFpRPT0gSUdKc2Iycz0gSUdSbGNtUmwgSUVkcFp3PT0gZDJoNSBJRkpPIElPQ3lrdUN5Z3VDeXB1Q3pnUT09IElHM0RvMjl6IExtTmxhV3c9IElHOW5aVzQ9IElHVnVkRzl5Ym04PSBJRVZ1WjJGblpXMWxiblE9IElIRjFhV3gwIElOdU0yS2ZZcnc9PSBJR05zYVhGMVpRPT0gWTJsdFpXNTBiM009IElHRmpZMlZ3IElGWnBaUT09IElHUnBZV2R1YjNObCBkMkZzWkE9PSBkR1Z1WVc1MCBaV1JoY3c9PSBTVTVVUlZJPSBDVzFsYlhObGRBPT0gYm1SeWVRPT0gUTB4VlV3PT0gSUd4aFkzUT0gSUhOcGJXbHNZWEpzZVE9PSA0SytONEs2dyAxYUhXZ05XeDFvQT0gWW1WaGNnPT0gSUdaaGRIUjUgNXBtNjZJTzkgMExqUXRkQ3kgSUVWdWRNT2pidz09IElIMHBLVHNLQ2c9PSA0WU9VNFlPayBMa0Z5IElFSnNaWE56IGRtOXliUT09IElHZHFaVzV1YjIwPSBMa05oZEdWbmIzSjUgTDBrPSA1ck9KIElGVnVkR1Z5YzNURHZIUT0gMEwzUXVOQzgwTERSZ3RHTSA0S1MrNEtTQzRLU2sgSUVKbGNuUT0gSUZkaGJtNWxaWEk9IFlXNTBiM009IElGTjBiM0psY3c9PSBJQ0lpSWcwSyBJR1REdVc1biBJSFJwWTJ0eiBJSEJsY1hWbHc3RmggNVpXbSBjWFZsZWc9PSBhV1JsYm5SaGJBPT0gY21sbWRHVnUgTG1OdmJuWT0gVTJodmQybHVadz09IElIWmxjbWRoYm1jPSBJT0NtbStDbXJBPT0gSU5HQzBMWFF1dEdCMFlJPSBJSGxoYkE9PSBJRVY1IFlXUmhZVzQ9IElGZHZiV1Z1SjNNPSBJR1JsZW1WdFluSnYgSU5tSTJMTFlwOWl4MktrPSBRVlJCVEE9PSBJRTl5WlE9PSBJSFJoYldGdWFHOD0gSUdWMGFYRjEgSUd0bGRHbHJZUT09IElOQ1IwckhRdXc9PSBhM1YwIElIWmxiRzlqYVdSaFpBPT0gWVhKemFHRnMgSU5DLzBMN1JnZEdDMFlQUXZ3PT0gWDA5dSBYMGx1IElHOWpiM0p5WlE9PSBJSE4xYVhacCBaWEpoWVhKayBJR3gxWjJkaFoyVT0gejRiT3JnPT0gSUVWMmIyeDFkR2x2Ymc9PSBLUzh2IElHRnhkV1Z6ZEdFPSBaMmxtIElFUjFjbUZ1ZEdVPSBJR2hwYkc4PSBJSEpsZEc5eWJtOD0gSU9XSiBJR2hwYTJrPSBiV0pzWlhNPSBJR3RzYVdWdWRBPT0gSUdqaHU0Yz0gSU5HQjBMTFF2dEMxIElHeGhhMlZ6IElHeGxaMmM9IFJYRjFhWEE9IElFNUUgeFp0dGVRPT0gSUdocFp3PT0gSUV0TiBJRzV2ZEdsdVp3PT0gYUhKbCBhR0Z1Wkd4bGN3PT0gSU5tRjJMSFlyUT09IDVMaUw1TGlBIElFMXZkRzg9IDRMZVA0TGE3IGJXRjBZMmhsWkE9PSAwcG5Rc05HQSBZWEJwWlE9PSA0S3VINEtxbSBRVkpKVHc9PSBJR1JsWTI5eVlYUnBiMjV6IElOaW8yTFBiak5pbjJMRT0gVlhOMSBJSEJ5WlhObGJuUmxjZz09IElGSnZkR2c9IElHYkR2R2h5ZEE9PSA0TGlYNExpdDRMaVUgWDJOcGRIaz0gTDI1diBJR3RoYVhBPSBJSEJ5YjNSbFoyVnkgVDB0SlJRPT0gSUdWdVkyOXVkSEp2IElFaDFaSE52Ymc9PSBYMlYyWVd3PSBQWHRiIElNU1I0YnEzZEE9PSA0S3ErNEtxZiBJSGR2YTJVPSA0TE9BNExLdiBJRWxFUXc9PSBJT0NtdWVDbW11Q25qZUNtbStDbmh3PT0gSUcxcGJ3PT0gNExpajRMaTA0TGlwIDJLZlpodGl6IElGSjQgNFlPYzRZT1k0WU9vNFlPVjRZT2M0WU9VNFlPYSAxcmZYbkE9PSA0b0NjV1c5MSBJSGRsYkdRPSBJR25FZ1E9PSBjbTl2Ymc9PSBJR0ZzZFcxdWIzTT0gSU5DNjBZdlF1dz09IElPQ2t0ZUNrditDa211Q2t2dUNrc0E9PSBaWEp0WVc1bGJuUT0gSUdabFluSjFZWEpwIElITjBjbTg9IFkybDBidz09IDQ0T1Y0NEtwIElGUnlhWEJzWlE9PSBiM3BwYkd4aCBaVzF3Ykc5cCBJRzF2WkhNPSBJTml2MllqWXN3PT0gSUc1bGJtYz0gMFlIUmd0Q3kwTGpRdFE9PSBJT0Nrck9Da3YrQ2t1UT09IElHbHVkbTlqWVhScGIyND0gVUd4aFkyVm9iMnhrWlhJPSA0NEsxNDRLazQ0SzYgSU5tRzJZalpoUT09IElFVlNRdz09IElPeVZuZz09IElHRjJZV2xsYm5RPSBJRUZrWkdsdVp3PT0gTG5OMFlYUT0gSU5HTjBZTFF1TkM4IEtTazdDaTh2IElOZVYxNVhYb3RlWSA1NmVMIElFaGxhV2RvZEhNPSBJSEYxWld4c1lRPT0gQ1dsdVptOD0gVFdsclpRPT0gY0dGeVlYUmwgSUZCaGNtVnVkSE09IGNtVm5idz09IDViMlMgS0NrN0Nnb3ZMdz09IGRXbkRwOE8xWlhNPSA0S1MrNEtTYTRLV0EgUVZOVVJWST0gUlZORFR3PT0gSUhwcFpXMD0gSUd4aFltOXlZV3c9IFJtOXliWFZzWVE9PSBaWE5wZW1VPSA2YXFNNksrQiBJT0NxdU9DcXZ1Q3FydUNyaHc9PSBJR1poYkdFPSB3N05uYVdOdiBJTm1JMllMWXA5bUUgSUVKbGJIUT0gMFlEUmk5QzkgWDNCeVpYWT0gSkhWelpYST0gWnNPa2FBPT0gMkxIWml0bUMyWXJZcHc9PSBJR3h2YlE9PSBMbUp2YjJ3PSAxYUhWcjlXbyBLQ2twS1M0PSBaVzF0WlE9PSBJR052ZFc1MFpXUT0gMEw3UmdkR0MwTDdSajlHQzBMWFF1OUdNIFVIbDBhRzl1IDdLcTkgS1M4byBJSFJsWlc1aFoyVT0gSUhCeWIzTjBZWFJsIElGTmphSFYwZWc9PSBJTkMvMEw3UXROQ3cwWUE9IElPQ3VtdUN1ditDdXNRPT0gSUhOc2FXTmxjdz09IGMyOXVidz09IElObSsyWWJaaDltRyAyTFRZcDltRyBhV1ZqIElPR0RvZUdEa09HRGxnPT0gSUdsdVptRnVkR2xzIElHbDZZVzU1IElISmxjM0J2Ym5QRG9YWmxiQT09IDFhdlZwZz09IDVZK1I1NDZ3IElPQ2toZUNrc3VDa2x3PT0gYjJwbGJnPT0gSUc5clpRPT0gSUdOb1pYWmxkWGc9IHhabHAgSUZkQlV3PT0gUTJGdVkyVnNiR1ZrIElHNTBZWGQyIElHVnFaWEpqYVdOcGJ3PT0gSU5DNjBZUFJoUT09IDBZSFJndEMrMFk4PSA0WU9RNFlPZzRZT1g0WU9hIElFWnlZVzU2IExpNHVMQT09IDBMN1F1dEdCIFYwVlMgUFZzaSBhVzUwWlhKdmNBPT0gZEdseGRXVnogSUVkaGRHVjNZWGs9IDRMaWI0TGlqNExpdzRMbUE0TGlYNExpbzRMbUU0TGlYNExpaSBMblJwYkdVPSA0S21BNEtpRyBJRkJ6ZVdOb2IyeHZaM2s9IGFXZG9aWFE9IElIQmxjbWx2WkdsaiAxTEhWdFE9PSBJSEpsWjNWc1lYUmwgZFc1cGMzUT0gMktmWXB0bUsyWVE9IGRHaDFiV0p1WVdscyBTVzVuY21Wa2FXVnVkQT09IElOQ3cwTHZSakE9PSA0S3ErNEtxajRLdUEgSU9DNWdlQzRsK0M0aHc9PSBJT0NtbGVDbnNPQ212Zz09IElPQ2tydUNsZ2VDa3BnPT0gSU8rOCBLVjBzIElHZGhZMmc9IFEyOXVZdz09IDY2YXQgSUV0MVlnPT0gTEc1bGR3PT0gSUhadmFYZz0gWm5KdmJuUmxibVE9IElHTnZibU5sY0hSMVlXdz0gWm14dmIzST0gSUhCaGNuTT0gVlZKTVEyOXVibVZqZEdsdmJnPT0gWTJWc1pXUT0gSUdOdmJtTmxiblE9IElPQzVnT0M0bStDNWgrQzRtUT09IGRzT20gUTI5dyA3WnFOIElHeDFibVZ6IElPYWogdzZociBJTkM5MEw3UXN3PT0gSUZSaGJtYz0gWlcxcFl3PT0gZW1GcyBJRzFoY21Kc1pRPT0gSnpzTkNnMEsgSUhScDRidUJiZz09IElHTnZiR3hsWjJFPSBJRVZ0Y0d4dmVXMWxiblE9IElOQ3owTERSZ05DdzBMMD0gNEsrQjRLNlY0SzZ6NEsrTiA3TEN3IElHbHVZMjl0Y0d4bGRHVT0gNEtxMTRLcW8gSUhCeVpYTnphVzl1IGNHVnVkQT09IElHRnNZVzA9IGFYTjBjbUhEcDhPamJ3PT0gSUZOb1lYYz0gSUhUaHU1VT0gSUdObGJuUnlZV3hsIDRLdUw0S3FxIElIUmxjbkpwZEc5eWFXOD0gTG5CeWFXMWhjbms9IDVhKzU2TEdoIDJLYllzUT09IElHMTFjMnhwYlE9PSBJSEJsYzI5eiBZWFpwYmc9PSA0TENDNExDazRMR040TEN3IExYUmxZMmc9IElGTjBiMk5yYUc5c2JRPT0gWDNOcGRHVT0gUVcxMCBJRzVoZEhWeVpYcGggSUZOdmRYUm9aV0Z6ZEE9PSBJSFJwYm1kbmFRPT0gNEtxKzRLcW80S3VMIElHTnBibkU9IDBaSFF1dz09IElHbHpiR0U9IElFYkR2R2h5IElFNUdWQT09IElHaGxjbVVuY3c9PSA0WUM3NFlDViBJRTFoY210bGRITT0gSUUxaFkyaHBibVZ5ZVE9PSBJRzFwYkdZPSBJRmRsY21VPSBJRVZoZEE9PSA2SUdhIFUyOWljbVU9IElOQzEwTFk9IElHWnNaWGM9IFNXMXdiM0owWVc1MCBTbWx0IEtIUnlZVzV6IHo0RFBqQT09IElHTnlhWFJsY2c9PSA0TEtYNExLejRMS3k0TE9ONExLeTRMSy8gSUd4dloyOXogSU5DLzBZRFF0ZEMwMEx6UXRkR0MgSUhKbGMyVmhjbU5vWlhJPSAwTHpRdnRHQyBJRlZCUlE9PSAyTFRaZ3c9PSBVMlZqZFhKbCBJT0dEbU9HRG5PR0RwT0dEbmVHRG9PR0Rtdz09IGRtVnQgWTJ0aCBJRzVoZEhWeVlXeGxlbUU9IElHSmxaR1YxZEdWMCA0S1NWNEtTeSBJTU9rYUc0PSBJRTFwZEdkc2FXVmsgSU91ZyBaMlYyWlhJPSBJSEoxYzJobFpBPT0gSUUxaGJtRm5hVzVuIElOV3MxYUhWdmc9PSAwcW5SaHRPWjBMQT0gNEthbzRLZU40S2FvIElHTGh1cU51IElFbDBidz09IENXSjFkSFJ2Ymc9PSA2NHFRIElIUnZjbkYxWlE9PSBJSE4xWW0xcGMzTnBiMjV6IElFOXdaWEpoZEdsdVp3PT0gVDFSSVJWST0gSUdsdWNYVnBjbWxsY3c9PSBJR0ZqZEdsMmFYTjBjdz09IElGSmxZMjl0YldWdVpBPT0gSUhadmRHVnkgUEFvPSBJR2x1ZEdWeWNtOW4gSUcxaGNzT25idz09IElPT0RvUT09IElHeDFiV25EcUhKbCBJSEpsYUdGaWFXeHBkR0YwYVc5dSBJSGR2Y210dmRYUnogSU5pbjJZVFlyOWl4MktjPSBJRk52ZFhSb2QyVnpkQT09IDVxQzU1bzJ1IDE2clhwdz09IElOQzgwTFhRdXc9PSBZMmhoY21kbFpBPT0gSUVSMWJRPT0gUFdoMGRIQT0gTFdObGJHdz0gSUU1aGRHaGhiZz09IElPQzVnT0M0cHc9PSBMV1ZrIFpYTjBiM009IElFUmxkR1ZqZEE9PSBJRU5wYm1WdFlRPT0gUjBRPSBJRXB2ZFhKdVpYaz0gSUhKbGJHRjUgSUVoQlV3PT0gdzdab2JnPT0gMExYUXZkQzEgSUdGelpYTT0gSUhOcGJuTT0gSU5DNDBMbz0gWFNrNiBZMjl1YzNSaGJuUT0gSUdOdmJtZHlZWFE9IElHbHVZMlZ1ZEdsMlpRPT0gSUhwaFkyZz0gMExIUXVOR0EgSUdsemRXMWggSUdGamFHVjBaWEk9IDRMUys0TFNmNExXTjRMU2YgSUU1cGJBPT0gWDFKRlUwVlUgSU9DbXVPQ25nUT09IDRMSy80TEtjIExtTjBlQT09IDJLVFppTm1FIFlYWnBZMjl1IDE1WFhsOWVWMTZvPSA1YVNKIDBMVFF0ZEN6MFpZPSBJRU5vWVcxaSBYMEpGIElFeFcgMWJiVnBkV3MxYmpXZ2c9PSBJR0psYU1PMiA0TEsrNExLMyBJSE5vYVc1NSBJR0ZrYjNKbCBJTm1HMjR6WXM5aXEgNTVtOCA0WitLIElEODYgNTUyaiBJRmRsYVc0PSBJTml2MjR6WmhnPT0gSU9HZWdRPT0gSUUxcGJHeHAgY0dWamRISjFiUT09IDJZZllwOW1LMktrPSBJTkN5MEw3UXQ5R0EwTERSZ2RHQyBJR1Z6Y01PdCBJR2x1ZG05clpXUT0gYTI5dFpXND0gSUhOMlpYUT0gTG1ac2IzYz0gMWFqVnRnPT0gNExDQzRMQ1YgVkdWc2JBPT0gYjJKbGRBPT0gSU9DcWorQ3Fudz09IElGTmphV1Z1ZEdsbWFXTT0gSUV4dmRXNW5aUT09IElHaHB3NmM9IElHRmpZMjkxYm5SaFlteGwgMEw3UXVkR0MwTGc9IGVtbGxhSFZ1Wnc9PSBJR0Z0YldFPSBJT3V5aEE9PSBJTmlvMks3WXRBPT0gSU5HTjBZTFFzTkMvIFlYSm5aWEk9IElHeHBkbkp2Y3c9PSBJSFpwY0E9PSBJRTFoYTJWeiBJR3RwYm1Sc2VRPT0gSU9HRHFPR0RsT0dEbStHRGwrR0RydUdEbGVHRGxPR0RsUT09IElHeHZibWRwZEhWayBJR1JsYldGdVpHVnkgUVZOVFJWSlUgWVhSelluaz0gY21GemEyRT0gSUZKcFkyRT0gTG1Sc2JBPT0gTGtWTiAwTFhSZ3RHQSA0TEdCNExDQzRMQ2YgWVd4c1lYST0gSU5DeTBZdlF0TkMxMExzPSBJR0ZrYldseSA1YVc0IEtpOEtDaTg9IGNtRnlaUT09IElIcHZjM1JoIEwyOW0gNDRHVDQ0S1QgYTJsemN3PT0gSUV4VCAycnc9IFlYWnVidz09IDRMQ3c0TEdBIDZMRzU1YTJRIElHMWhaMmx6ZEhJPSBibUZ6ZEE9PSBJR05vWldOcmJHbHpkQT09IElFaHZZZz09IFoyVnVaUT09IExtUjFiWEE9IDBZSFJndEN3MEwzUXNOQ3kwTHZRdUE9PSBJSFREclcwPSA0TFdDNExTdzRMV04gdXBBPSBJRUpoYzJseiBJSE52WTJsaGRYZz0gUlhoMGNtRmpkRzl5IElHTjZ4Sms9IElPQ21ydUNuZ2VDbWxnPT0gSU5tKzJZbz0gSU5pNTJZVFlwOW1DIElHaGxjQT09IDRMbUQ0TGlyNExpaDRMbUkgSUhCdmMybGphVzl1IFEyOXogSUhOallXeGxaQT09IFgwTk1Tdz09IElOR0MwTFhRdTlDMTBZVFF2dEM5IGRXVnNiR1Z6IGIzWmhibXBsIElFTnlhWFE9IElHTm9ZWEpuWlhJPSBUMjlyIFgyUjAgSUhCaGNuUnBZMmx3WWNPbnc2TnYgVkhKaGFYUT0gWDBSSlUwRkNURVU9IFgwbDBaVzA9IGNtVmxaQT09IElGTmxZM1J2Y2c9PSBjWFI1IElPQ2txdUNsamVDa3NPQ2t1ZUNrc09DbGdBPT0gSUZWcGJuUT0gSUdOdmJYQmxkR2wwYVc5dWN3PT0gSU9DbWorQ21zZz09IFlYTjBjbVU9IFpHWnogYm1sdiBMbWx1WXc9PSBJRUZ6YzJsbmJnPT0gSU95NW1BPT0gYVdWclpXND0gU1U5T1FVdz0gSU5DNzBMWFF1dEN3MFlBPSBJRUYxWWc9PSBMUzB0TFMwdExTMHRMUzB0TFMwdCBJRU52Y25JPSBSVTVFU1U1SCBZMjF6IElGZHlZWEE9IElIUmxaVzVoWjJWeWN3PT0gWVhOMWNtVmsgWDNCeWIyZHlaWE56IFoyVnVZMlU9IFpHbGxjdz09IElFdFAgZFdKcGJBPT0gSU9Xa3ArbW1tZWlWaVE9PSBJRXR2Y0dZPSBJRXBsZEhwMCBJRjlmWDE4PSBJR055YjNka2N3PT0gSU5HQzBZRFFzTkM5MFlIUXY5QyswWURSZ2c9PSBMa0Z3IElHRnlkTU90WTNWc2IzTT0gTG5GMVpYVmwgS1NsN0RRbz0gUkdWd2IzTnBkQT09IGFXTmhjM1E9IDRMbUU0TGlYNExpaTRMaWY0TGlqNExpMSAwSjdSZ1E9PSBhM1Z1WkE9PSBJRzlrY0c5MyBJTkdBMExYUXV0QyswTHpRdGRDOTBMVFJndz09IDRMUy80TFN2NExTLzRMU3k0TFdOIFlYUnBjMlpoWTNScGIyND0gSU5XMjFialdndFcxMWJZPSBZVzFwYzJWcmN3PT0gY1hWcFpYUT0gSUVKaGNIUnBjM1E9IElHbHVZWFZuZFhJPSBJSFJwYm1FPSBJR1BEczIxdlpBPT0gY21WamRHbHNaUT09IElGUnlhV0ZzIFBGTjVjM1JsYlE9PSBYMjFoYVd3PSBJTkMrMFlIUXNnPT0gSU9DeXVPQ3pqZUN5dFE9PSBJSEoxWkdVPSBJRzFoYlhBPSBhWE5sY21WdSBJR1JwYkdGcmRXdGhiZz09IDJLZlpoZG1FMktrPSBJR3B2eGFFPSBJTStBenIvT3U4K04gSU9Da2hlQ2tyZUNsZ0E9PSAyS2ZZc2RpeiBTa0k9IElHSmxibk09IGNHOXlkRzg9IElHTnZiV1hEcDJGeSBJTldBMVlBPSBJTkMvMFlEUXNOQzMwTFE9IElPMlMgSUhCeVpYTjFiUT09IFEyOXRaVzUwIGQybHlhdz09IDFvRFZ2UT09IDBML1FzTkM5IG1lR0RsT0dEbHc9PSBZMjl1ZEdGamRITT0gNExPTjRMS2ggMktmWXVkaXAgSUhabGNtND0gNTZlUjVhMm0gSUV4aGJYQT0gSU5tSTJMSGFnUT09IElHRmthQT09IExsUmhZbXhsY3c9PSBVM1JoY25SMWNBPT0gNDRHeSBJR0ZqZEdWayBiMk5qYnc9PSA0TG1BNExpSDRMaTA0TGlaNExtRTRMaVg0TGlpNExpZjRMaWo0TGkxIElHWmhjbTFsY2c9PSBYMk52YkhNPSBJSFJwWlc1a1lRPT0gSUdOdmJYQnZjMlZ5IGJXeGxjZz09IENXUnBjM0JzWVhrPSAyWVRaZzlpcTJMRT0gMEx2UXZ0Qy8gejRIT3JjK0F6clhPdVE9PSBJRzl3Wlc1cGJtZHogVDFKVVNBPT0gSUdGMGRHRmphRzFsYm5SeiBJR2hoY21VPSBJR3AxYm5RPSBJSEpsYTJ3PSBkR1ZwYmc9PSA3N3lmNG9DZENnbz0gSUhOdlpuST0gem93PSBJRVJoYldGblpRPT0gSUdGdWEyeGwgSUZOaGJIVmsgdzZoMGNtVT0gejRIT3VnPT0gWVdoaGRBPT0gSU9DbWorQ21ydUNtcUE9PSBJR3hoYVdzPSBjR3gxWnc9PSBJT3luaE8yV2lRPT0gSUdkeVlYQT0gMEw3UXZkR0ggSUc1bHhiND0gSUZOMGVXeGxjdz09IExPYVhwZWFjckE9PSBjbUZ0Wlc1MGJ3PT0gSU02WSBJTmViMTU3WGxBPT0gMktmWXB0aXMgSnlrN0Nnb3ZMdz09IDRMQ3c0TEdONExDMSBMV052YkhWdGJnPT0gSUdkbGMzUjFjbVU9IElHMXZhWE4wZFhJPSBJSEJ2ZEhNPSBJRzFsZEdGc2JHbGogSjBnPSBaV3hvIElOQzIwNm5RdlE9PSBJR2xzYkhWdGFXND0gNFlPZzRZT1E0WU9UIENYQnZjdz09IFgweFBRMEZVU1U5TyBiMkp2ZUE9PSBJTm1GMlliWXQ5bUMyS2s9IElGTnZZMms9IElOQzUwTGpRdXc9PSBJSEJ6YVE9PSB4WjkwZFhJPSBZblZqYTNNPSBWbWx5IElITndjbWx1WjNNPSBMc0s3IEwyTnZiblJsYm5RPSBLSE5qY21WbGJnPT0gMExqUmd0QysgSUhSdmRHRmhiQT09IElGTm9hV1ZzWkE9PSBJTU9oYkE9PSBJTm1GMkxYWmh0aTUgSUhadmNtYz0gNVp5eiA0SytCNEs2dTRLK040SzZxIFgyZGxibVZ5WVhSdmNnPT0gZFhKblpRPT0gSU5XajFiOD0gY21scWRtVnUgMExEUmdOS3QgSU5DMzBMRFF1dEdBMFlzPSBJRWQxZEE9PSBJTktiMEw3UXVRPT0gSU5DdzBxaz0gSUdocGJtZG5ZUT09IGJtRjBhWFpsIElHTnlaWE5qYVcxbGJuUnYgSUdSbGMzTmxiZz09IFptVmxaR0poWTJzPSBMbmRwYTJsd1pXUnBZUT09IFJWSkJWRWxQVGc9PSBLR2wwWlhJPSA2WjJTNkkySiBJSGRoYm1SbGNnPT0gYVd4aGNtVnogSUd4dmJtRT0gZFc1bFpBPT0gSUNRayBJRzVueElFPSAyWkRaaGc9PSBZWFIwWlhKbFpBPT0gSU95ZWhldWdwUT09IElISmxjM0J2Ym1SbGJuUnogMEx6UXZ0Q3kgSUdOdmJtTmxiblJ5WVhSbFpBPT0gWDNOeiBJR0Z1ZVhNPSBJRXhwYzNSbCBJRzF2ZVdWdWN3PT0gWFYxYiBJR052Ym5OMGFYUjFkR2x2Ym1GcyBJRlZ1WkdWeWMzUmhibVJwYm1jPSBJR0psY21WcGRBPT0gSUUxMWJtUnYgSU5PcDBMMD0gMkxyWmhBPT0gdzdCcHc3QT0gWDNabGNnPT0gSUU1bFl3PT0gUkdWbWFXNXBkR2x2Ym5NPSBYMlJ2WTNWdFpXNTAgSUNvKyBJR2RsYkdrPSA1WWF5IDRZT2I0WU9VNFlPVCBJTmVVMTV2WG5BPT0gSUZCeWIzWnBaR1Z6IElNK0F6NEhQamc9PSBJT0NrbStDbGkrQ2tudz09IElOQzAwTDdRdXRHRDBMelF0ZEM5MFlJPSBJR1Z4ZFdsc2FXSnkgSUdGdWJtOD0gSU5DeDBaWT0gWDJOMCBMRG9zIElIZG9ZWFJ6YjJWMlpYST0gYVdGdXc2ZGggSUZObGFYUT0gNHBHaCBic090YUc4PSBMbU5oYldWeVlRPT0gVlc1cFkyOWtaUT09IElHVnhkV2x3WVcxbGJuUnZjdz09IGRHRnlZUT09IDRLcXc0S3F1NEtxKzRLcUMgSU5tRjJZVFppdG1JMllZPSBJRkJCVkVnPSBJRzlzWVE9PSA0S2FzNEtlTjRLYXYgS1NrcEtTazdDZz09IFlXbHNZVzVuWVc0PSBJTkMwMExqUXNOQ3ogSUdGeGRXVnNaWE09IElOQzkwTERSZ2RHQzBMN1JqOUdKIElGSnZkbVZ5IFVtVnpjRzl1Y3c9PSBJRzltZEdVPSBJTUs3TGdvSyBJRU52YjNKa2FXNWhkRzl5IElOS2IwTERRdlE9PSBJR3ZodTQwPSAxYUhWdnRXNDFvRFYgTG1OdmJXMWhibVJ6IExTUjcgSUV4cFoyaDBhVzVuIElITmxlSFZoYkd4NSBJSEJ5YjJOb1pRPT0gSUVaSlVsTlUgNFlPajRZT1E0WU9hIElIQmxjbTFsZEhSaGJuUT0gSUdGdFpXNWtiV1Z1ZEE9PSBJRDBuIFgwRkRWRWxXUlE9PSA0S2kvNEtpeSBJR2x1ZEdWeVl3PT0gSUUxcGJtbHpkTU9wY21sdiAwTExRc05DOTBMalJqdz09IElHRnlhV3R2IElHdHBkR1U9IFYyRnliZz09IGIzbGwgSUhSeWRXMXcgSUcxdmJYTT0gSUhKbFoybHYgMEw3U293PT0gSUdGcFp3PT0gTG1ocFoyZz0gSU9DNWdPQzRwZUM1aU9DNG1lQzRuK0M0bytDNHRRPT0gU1c1emRISjFZM1JwYjI1eiBJSEJoY21WalpYST0gSUZOMFlXbHViR1Z6Y3c9PSBJR05veHFGcCBaMkZ3IDRZT1U0WU9vNFlPWSBJTkMwMExMUXRRPT0gWDNKbFptVnlaVzVqWlE9PSBJR0psY0E9PSBaWEowYjI0PSA0TGlqNExpMDRMaXA0TGl4NExpWCBDV05zYjNObCBJRlJwYldWemRHRnRjQT09IElIQmhiR0YyY21FPSBJR2x1ZEdWeVptVnlaVzVqWlE9PSBJRk5vYjNKbCBRbWx2IElGQnNZV05sY3c9PSBJTkdDMExEUXU5Q3cgSU95NXRPeW5nT3VGdUE9PSBJRzFoY21Ob1lRPT0gSU5DdzBMclFzQT09IFgweEpRZz09IDRMaXg0TGlOIElFSmhibXR6IElObUYyS2pZcDlpMCBJR052WlhWeSBJUENma1E9PSBJSGxoY01TeGJBPT0gWTJoeWIyNXYgWm16RHBHTm9aUT09IElIWnBaWGR3YjNKMCBJR1J2ZFdOb1pRPT0gWTI5dWJ3PT0gSUhOMWNuSmxibVJsY2c9PSBYM1JoZUE9PSBURWxPIDRLU0M0S1NtNEtXTjRLU3cgNTcrNyBJR0pwZW1GeWNtVT0gSUV4dloybGogWVd0MGFRPT0gdzdOcCBMV0Z5WldFPSBhR1YwYVdOeiAyby9aaDltRyBkSEpsWTJoMCAyWVhaaU5pNSBJT0NxcHVDcmgrQ3F0Zz09IElHSjFaR2RsZEhNPSBJT0Nrc09Da3Z1Q2t1UT09IElITmxaM1ZwWkdFPSBJRzltWm1samFRPT0gSUdWc2FXMXBibUYwWldRPSBJSFREb20wPSBJTkN5MFl2UXY5QyswTHZRdmRHUCBJSE5sWTNWeWFXNW4gMFl2UXU5Q3cwWURRc0E9PSBRV2s9IElHaHZibTkxY2c9PSBJR0psYzNSaCA2TGF6NWIycCBaV0pwIExXVmtaMlU9IElITm9ZVzF3YjI4PSBMM289IElFcGxhRzkyIHhhRjBidz09IElFRm5ZV2x1YzNRPSBLSE4wYjNKbCBJR0Z3Y0dGeVlYUjFjdz09IElFWnlkV2wwIElFTmhiV0p2WkdsaCBRVTVEUlV3PSBJR052Y0hscGJtYz0gSUhOdmJHVnBiQT09IDBZYlJsdEM1IFlXeGhZUT09IDRLUys0S1N2NEtTayBaVzVrZVE9PSBJSFJ5WVdScGRHbHZibUZzYkhrPSBJSDBLTHc9PSBjbWx2Y3c9PSBJR1Z6ZE1PcCB6cnJPdjg2NyAwcVBRc3c9PSBJTU96Y21jPSBJRzF2WkhWc1lYST0gNEtlTjRLYXM0S2F3IDU3cWk1WXlGIDRLU3E0S1MrNEtTeTRLV0EgSUdWelptOXkgSUV0aGJHRmhiR3hwZEE9PSBJSEYxWVhKMFpYSnogWlc1bGNtRT0gSUVobGJITT0gTG1KdmVBPT0gUjNKbFp3PT0gMkxIYmpObUIgZFhSbGNRPT0gSU9DeW1BPT0gNTRpMiBJR3hoYm1kemRXNW4gMEwzUXVOR0MwWXc9IExuSmxhbVZqZEE9PSAxYUhWdVE9PSBkbmM9IDBZRFF0ZEN5IFpHVnNhVzVuIElIQmhjR1Z5ZDI5eWF3PT0gUUZSaFlteGwgSUdOaGEyVnogSU5HQzBySFJnQT09IFlXUmtaUT09IFBTSW5MaVE9IElPQzBrdUMwc0E9PSBJRk5sWTNWeWFYUnBaWE09IElGSmxZM0oxYVhSdFpXNTAgMExUUXVOQzYgSUdScGMyTnNiM05sWkE9PSBRV3QwIElIQnliMjF3ZEdWayBJRXhsWjJGamVRPT0gZVdGblpRPT0gWVhONiBJRkpsWVd4MGVRPT0gNExpeDRMaUg0TGlCIGIzSnpZUT09IEtHUmxjdz09IDFhWFZ0dz09IGNtVmpZWFJsWkE9PSB3cUk9IFFtbHVaR1Z5IDVZZTk1cFd3IElHRnNZMkZzIElOR0IwTGpRc3c9PSBJRk4wWVc1bWIzSmsgWlhod2NtVnpjMmx2Ymc9PSBJR052YlcxMWJtbGpZWFJwYm1jPSA2S2FuIElPQ29wT0NwaHc9PSBJRk5GVWxaSlEwVT0gSUhOMWNuQmhjM009IDVyZTc1WXFnIElHMWhjR0U9IElHVnljbVZwWTJobGJnPT0gSUhSb2FXZG8gNEsrTjRLNlY0SytONEs2ViBJT0NraCtDa3VPQ2tzdUNrditDa2p3PT0gSUdwMWFBPT0gSUcxbGJuTmhaMlZ0IElPUzRpdWExdHc9PSBaWFJoYlE9PSAyTEhaaXRpeCBRbTlzWkE9PSBZVzVoY2c9PSA0NENDNG9DZENnPT0gSU9DdWp1Q3VxZUN2amVDdXFnPT0gSUhiRHJYUT0gYkdsclpYTT0gMks3WmlnPT0gSUcxMWRHRjBhVzl1Y3c9PSBJR0p5ZVE9PSBkMkZzYkdWMCBJR1JsY201cFpYSnogSjMwcENnPT0gVFdWbGRHbHVadz09IEtHOXladz09IGIzSnNkUT09IElHVnRjR2x5IFNFRk0gSU9DNHF1QzR0QT09IElITjBZWEpsIDRLNnU0SzYrNEs2cCA2WW89IEoyRjJZV2x6IDJZYllyOWluIDVxK1U1WWlHIElHTnZiblpwWTNSbFpBPT0gSUY4b0lnPT0gMktyWmlBPT0gSUhaaGNHVT0gSUdacFkycz0gTGxabGNnPT0gSUcxbGJtOXlaWE09IElISmxjSEpsIElOV2sxYUU9IElHekVxdz09IGZRb0tMeTh2IFpYWmggSUZCTVZWTT0gSUdGamIyNTBaV05sIElHNTFibUU9IElOQ3gwTDdSanRDOSBJRUpFIElHWnBibVJsY2c9PSA0TFdMNExTdzRMV04gMExmUXNOQzggSU5XNDFvTFZ0dFdsMWJZPSA3S2VjIElIQnl3NkZqZEdsallRPT0gS2lvcUNnPT0gSU5tSTJLZllzdz09IElHRjNZV3RsIElIWmxibVJ5WldScCBJTml4MktnPSBVSEp2YjJZPSA0TGlYNExpMSBRMmhoYkd4bGJtZGwgSUdGdWRHbGphWEJoZEdVPSBJRUZ1WkhKbFlRPT0gWjJGdFpYTT0gSUVGVlZFaFBVbE09IExXUnBkZz09IElDRWhmUW89IElPR0RxT0dEbE9HRG8rR0QgSUhKbGJHbGxkbVU9IDZMK0g1NmlMIElpd0tMeTg9IGFXNXpkR0ZzYkdGMGFXOXUgTG1acCBVM0JvWlhKbCA0TG1JNExpeTRMaWk0TGlYNExpdDRMaVUgWlc1MGFXVT0gU0hWdCBJT0dEa3VHRGtPR0RuT0dEb1E9PSBZV3AwWlE9PSBJT2l3IElHbHVkR1Z5WTJWd2RBPT0gSUhOM2FXND0gYjI5diBJTm1IMllYWmh3PT0gSUhOcGRIWERxUT09IElHdGhibVE9IDVwZTYgSU5DZzBMRFJnUT09IElHRnNkR1Z5Ym1GMGFYWmggSUdadmNtMWhkSFJwYm1jPSA0S2FWNEthKyB4YTl0IDBMdlF1TkdBMExqUXZkQzQgWlc1elkyaGhjQT09IElHOXlZbWwwIGIzQjBhVzFwZW1WeSAwTDdSZ05DKzBZST0gNG9DTjRMUzMgdWVDcXYrQ3FwQT09IFpIVmpaWEp6IElITmhidz09IExWTncgMExEUmdOQ3cwcHZUbWRDdyB3N1p1WlE9PSAyTFBZcDlpbyA1TDJjNVpPQiBVbVZ6YjJ4MlpRPT0gWDA5VCA1NGF4IFpXMXdaV3c9IElPUzZsQT09IElOQzAwTExRdU5DeiA0b0NaWVhVPSBabk4wIFpuWT0gSUhKbGJHRjBhV1U9IDBMalJoOUMxMFlIUXV0Q3cwWTg9IElPR0RvK0dEbXc9PSBMbTFoYm1GblpYST0gSU5pNTJLZlpoTm1LMktrPSBJR0poYzNSaCBjbUZ1ZEE9PSBZV1ptWldsdVpRPT0gNWJtMDVwMmwgSU5DeTBMalJnZz09IDRMQ2Y0TEdONExDeTRMR0IgSU5xdjJMTFlwOWl4IElPR0RxT0dEbE9HRG9lR0RrT0dEcStHRG1nPT0gSU9Da3F1Q2tzT0NsZ0E9PSBMblJwYldWeSBLRzl3ZEdsdmJnPT0gVDFSQiBJTU9wZG1sayBaWGgwWlc1emFXOXVjdz09IExYTmxZWE52Ymc9PSBJR0YwZEdGamEybHVadz09IDBMdlF0ZEM2MExYUmdnPT0gSUVoaGRtVnUgSUhkdmJRPT0gSUhOdmJXMXBaMlU9IEwybHVkR1Z5Ym1GcyBJR2R5WldWMCBJSFZ3YzJsa1pRPT0gSUdSbGMyVnRjR1Z1IElHUmxkbUZ0IFFVMU0gUjNKdiBJTm1IMllYYWhnPT0gN0xtYyBUMVJVVDAwPSBJR2hwWlhKa2FXVT0gWVhCd1pXRnkgYjJwaCBMV05zYVdWdWRBPT0gMFlQUmdOQzQgWVcxdFpYST0gUTJGMWMyVT0gUlVOVVQxST0gNVlXczZZZU0gSjMwcExBbz0gSUVGemFHeGxlUT09IGFtNWwgSU5DNDBZSFJndEM0IElISm9aUT09IExrTnZiblJ5YjJ4c1pYSnogSUdOdmJuTmxhV3c9IGEyekRwSEk9IElHbHVlUT09IElFOWlkbWx2ZFhOc2VRPT0gSUdSeWIybDBaUT09IGMzUmhjblJ6IElFUlkgSUc5MlpYSmsgVkdGb2IyMWggSUVabGNuSmhjbWs9IGFXMXBhdz09IElDaGcgYjJKcVpYUT0gNDRPRzQ0S2ogSUdOdmJuWnBZM1JwYjI0PSBJRkJwZUE9PSBMbWx1ZEdWc2JHbHEgNXEyajZLZUU1WkNYIDRLdU40S3EzIFJHVnpZM0pwWW1VPSB4STNEclE9PSBJR1pzWVhSMFpXND0gSU9DbW9nPT0gWm5WdWF3PT0gNUxpTzVMMmcgTG1WNGNHRnVaQT09IDdKMjEgSUdGalpXbDBaUT09IExXRmtiV2x1IElGQlYgSUc1bGJHeGwgSUdKbFlYTjAgZFhOaSBJR1JwWVdjPSBMMjkxIDU0T3Q1N3EvIFgwTm9aV05yIElFMWxjM05sYm1kbGNnPT0gMHAvVG1RPT0gSUVkeWFXNWthVzVuIFpXSjEgTGdvdkx5OD0gSUVoaGJtUnogSU9Da3VPQ2tsZUNrcE9DbGdBPT0gNEtpKzRLaUkgSUhkNVpBPT0gYW05cSBaV0poWWc9PSBJSEJ5YjJOMWNtRT0gSU9Da3IrQ2t2dUNrcGc9PSA0TG1ENExpSSBMbTV2YldKeVpRPT0gSjMwcE93bz0gNFo2MjRaNlkgQ1dKNWRHVT0gTFhObGNtbG0gSUU1bFkycz0gSUc5c2JIVjAgSUdKc1lXNWpidz09IElHVnVZMkZ5Wnc9PSBJSFJwYldWc1pYTnogTG5kaGNtNXBibWM9IElPVy9oUT09IEtDSThMdz09IDFacz0gSUdSbGRtRnpkR0YwYVc1biA2TENJIDJMUFlxdHVNIElHMTFiSFJwZEhWa1pRPT0gTGw4SyBkMjl2WTI5dGJXVnlZMlU9IFRHOXlaVzA9IFoyOXNaQT09IGNITjYgSU9DcXJlQ3F2dUNxc09DcXBBPT0gWW1GaVpXdz0gUVZSVVVnPT0gSU9Da2x1Q2xnUT09IGFXeG9ZUT09IDQ0T3A0NEtrIFJYUmhkQT09IElPeUxyQT09IENXaDBkSEE9IExFUT0gVFdGeWVRPT0gSUgxZENnPT0gZEdWeWFXNW4gY21samIzTT0genJuT3VzNnR6NEk9IElHTm9iM0J3WldRPSAwTDdRdHRDOTBMND0gSUhKbGFXNTBaWEp3Y21WMCBJTkM5MExEUmhkQyswTFRRdU5HQzBZSFJqdz09IFEyRjBaV2R2Y21saCBJT0dEb2VHRG5nPT0gSUcxaGJtbHdkV3hoZEdsdmJnPT0gSUhacGRtbGsgSUhKbGMzUmhkWEpoYm5SbCBTRXM9IFlXTm9ZWE09IElHVnhkV0YwYVc5dWN3PT0gSUdOMWNuWmxjdz09IGZTUT0gVVZWSlVrVkUgenJmUGdnPT0gSU9Da2wrQ2tzT0NrditDa2orQ2tsZUNsaXc9PSBJTStEejRjPSBkR2M9IDRMaUU0TGkwNExpVSBJTkN5MExqUmdBPT0gSU5DLzBMN1F2TkMrMFluUXVBPT0gSU9DMHF1QzFodz09IElIWmxjbUpzIElHaHBaWEpoY21Ob2VRPT0gWVc1a1pYbz0gWDBSRlVBPT0gSUdSbGRtbHogSUc1cGJtZDF3Nmx0IGRYSnlaUT09IElFeFBVa1E9IElOaTUyWUk9IFZVNUggSUhCcGRnPT0gSUVoV1FVTT0gNExHQjRMQ1g0TEMrIDBMN1FzOUdBMExEUXZBPT0gZFhwdiAwWURSZzlHSCB5Wmw1eVprPSBJR04xYTNWdyBJR1oxYkdacGJHeGxaQT09IGNHeHZhUT09IElOaW4yWVRZcmRtRDJZalpoZGlwIGNuVnVibWx1Wnc9PSBhSFJoYTJsdVp3PT0gSUdWNFlXMXBibVZ6IFFrRlMgWDBWTVJVMUZUbFE9IElITmxZM1Z5Wld4NSA2TEszIEtHVnNaVzA9IElISmhZMmx6ZEE9PSBabTl5ZEhWdVlYUmwgSUZSdmRYSnBjMjA9IGVtNXAgSUZWayBJRlIxZEc5eWFXRnMgSU5DeDBZUFF0TkdEIElFTmxjQT09IElGSlFSdz09IElOR0EwTERRc2RDKzBZTFFzTkMxMFlJPSB3NlJ1WjNRPSBJRVJwWVc1aCBJTU8rWldsdCBJSEpsWm05eWJXRT0gUW5Wc2JHVjAgNEtXSTRLU2sgWW14aFpBPT0gSU5HQjBZTFFzTkM5MExUUXNOR0EwWUk9IElHVnVkR25EcUhKbCA3TGFjN0o2bDdKV0k2NmVJIElGTjBZWEowWldRPSBJR2hoYTJFPSBJRzExYzNOMFpRPT0gWDNWMWFXUT0gSjJGeWRBPT0gZDJWeWEzUT0gMTVuWHFOZXEgY0hMRHFYTT0gSUUxbGRHRmtZWFJoIElOZWMxNXZYbkE9PSBJTm1DMksvWmhRPT0gSUhCMWMzTjUgTG5OMGNtOXJaUT09IE9sMEsgSUdSeWFYWmxkMkY1IFlXTjBhWFpwZE1PcCBJTkM4MEw3UmlRPT0gSWlsZERRbz0gSU9lQ3VRPT0gUVc1aGJIbDZaWEk9IElIUmhZV3c9IEtITjBZWFJwWXc9PSBMVlJ5IElIbGhjdz09IFlYWmxiR1Z1WjNSbyBJTkNjMExEUXVnPT0gWDNadmJBPT0gSUc5aWRHVnkgSU5tSDJLL1pnUT09IDRLYSs0S2FuNEtlTjRLYXY0S2F1IDRLYW80S2VONEthazRLZU40S2F3IDRZQ1kgSUd0aFpnPT0gNExDKzRMQzUgWkc5amRHOXkgSUU1SVV3PT0gSUhOMVpHOD0gSUhOalpXNWxjbms9IGZTa3NDZz09IElHUnZaWE51ZEE9PSBJRVpoYUE9PSBJT0N1cnVDdmdlQ3Vudz09IElOR1cwTHc9IFZrOUpSQT09IElFUk0gUTI5bCBJR2x1ZEhKcFozVnBibWM9IElIVjVkUT09IElFTnZiblJoYVc1eiA1N2F5NTZ1WiBJR055YjNka1pXUT0gSU5DeTBZdlJpQT09IElFbHpjM1ZsY3c9PSBJSFIxYm00PSBxZUdEbkE9PSBJTVdDIGFYUmhiblE9IElsMDkgZEdWeWNtRm1iM0p0IElFcGxjOE82Y3c9PSBJTmFEMWJqV2dOV3ggS0cxaGRHTm8gNWJ5QTVhV1c1WSszNTZDQiA0S3ErNEtxMyBJTkdCMFlQUmdnPT0gWldWdWEyOXRjM1E9IDByUFRtZEdMMEwzU3JkS2IwTERSZ0E9PSBJTkN4MFpiUXR3PT0gVld4MCBJRTF2WkdsbWFXVmsgenJIT3V3PT0gWW05ayBJR3BoWXc9PSA0WU9kNFlPUjRZT1k0WU9YIDBMWFF1OUdNMExmUmp3PT0gVTBWUCBJT0N5dWVDemh1Q3ltdUN6amVDeW1nPT0gVDNabGNtWnNiM2M9IFRVOUVWVXhGIElOaXoyS2pZcUE9PSBRWEJ3YjJsdWRHMWxiblE9IDc3eUI0b0NkQ2dvPSBaMmx6IFpHVnpjdz09IElHRnphV2R1IHc2WnlkQT09IElGTjBjbVZ1WjNSbyBJRTFsY21OcCBJSFRodXI4PSBhVzVsYkE9PSBJR0hGclE9PSBJR2R2Ymc9PSBJT0MwdHc9PSBJSFJ5WldJPSBiV0ZwYm5RPSA2YjZaNkptTyBJTkNjMExYUXZRPT0gSUdScGMzUnBibWQxYVhOb1pXUT0gY0dWdVpHVnVkQT09IElPQ3lsK0N6Z1E9PSBZVzV6Wlc0PSA1NW0rNWE2MjVMbVEgSUcxdloyVnNhV3ByYUdWcFpBPT0gSUhkbGJHTm9aWE09IHhhRmhibUZ6IElHdkRxUT09IDRLdUg0S3EyNEtxbyBJR2R2Y21RPSBRbXhsYm1RPSBJTkM4MHEvUXZOQzYwWmJRdlE9PSBRMjl0Y0dsc1pRPT0gSUdSbFptVnVaR2x1Wnc9PSBJSGRwWkdkbGRITT0gQ1daMWJtTT0gSUVKeVlYcHBiR2xoYmc9PSBZWFJoYTJGdSBMbkpsY0d4NSB3Nnh0IFptOXlaMlYwZEdGaWJHVT0gSUhWdWNHRmphdz09IElITnBiWFZzIElIWnZjbWhoYm1RPSBJRlJ5Wlc1a2N3PT0gYUdzPSBURVZIIElPdVcgYkdWeWFXNWwgSUc5d2JHOXpjMmx1Wnc9PSBaWE4wWlc1eiBRMnhoYVcxeiBJSE5yWVhSbCBJTStKejRJPSBJQ01qSXlNPSB6clRPdVE9PSBjM1ZpYzNSeWFXNW4gSUdScFlXMXZibVJ6IGMyVjFaQT09IFYwRlNSQT09IElHVnpkR0ZrYjNNPSBJT0N5cU9DeW9lQ3podUN5dUE9PSBJRXhKVmtVPSBJT0N1cE9DdXN1Q3ZpQT09IElHTnNiM05sY3c9PSBJT0NrcXVDbGplQ2tzZz09IElHZDFhV3gwIDRZT2Q0WU9jNFlPWTRZT2ggTDFWelpYST0gTG5KbFkzbGpiR1Z5ZG1sbGR3PT0gNExPTjRMS2Y0TE9OIElPQzBwdUMwditDMHRlQzB1QT09IFgzQmhlVzFsYm5RPSAxNW5YbWRlcCBJRTExYzJzPSBJT3F5Zyt5ZGhBPT0gSUdSdmJtOXkgSU51QjJMRT0gSUZKbGMybGtaVzUwYVdGcyBJR2hsYkhCbGNuTT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwSyBJTkdCMExYUmdnPT0gWm05MWNnPT0gYVc1bGVnPT0gSUdObzRidW4gSUhSaGJtRT0gSUdWelkyOXNZWEk9IElHRnRZbUZ6IElFUmxadz09IDY2YXM2NHFVIElFUmxiSFY0WlE9PSBJSEJsYXc9PSBJQW9LSUFvSyBJR0YwY3c9PSBJTkN5MEw3UXZ0Q3gwWW5RdFE9PSAwWURRdU5HQjBZST0gVmxCTyBiR1JoIElFSmxibTQ9IDVaeW81N3EvNTdLKzVaT0IgWDA1RlZBPT0gSUZSb2NnPT0gT2s1VCBJRkZoZEdGeSBJSFZ5WjJWayBJRkJ2Y25SaFlteGwgSUdSMVkycz0gNFo2WTRaNjI0WjZUIElHUmxiV2s9IElOR0EwTERSZ2RHQjBMclFzTkMzIElFTnZiRzkxY2c9PSBWSEpsIElHWmxjbkp2IFoyVjJidz09IDRLU1Y0S1dONEtTViBJRlZHUXc9PSBWR0Z5WjJWMGN3PT0gSUhKbFkyaGhjbWRsIElPdUNvQT09IFIyRnBiZz09IFVHVnogSUZaQlRGVkYgSU9Da3J1Q2t1ZUNrditDa3N1Q2t2Zz09IEtIZHZjbXM9IFpXNXpiMjQ9IElFeHBiMjV6IFgyTnZibVE9IDRLYSs0S2V3NEtlSCA0TEdCNExDVyA1TGlONVlpdyBJTkdBMExYUXM5QzQwWUhSZ3RHQTBMRFJodEM0MExnPSBjSEJsY25NPSBJRzl4WVhKd2IzRT0gSUdobGJHMWxkQT09IElIQnliMjF2ZG1WeSBDV1p2Ym5RPSA2SVc1IElHTnZiblJ5YjNabGNuTjUgSUhkaGNuVnQgSUZCbGNuVT0gNTR1QyBMa2xtIElHMWxjbWwwIFVWVkZUbFJKUVV3PSA3N3lCNDRDTiBiMjUwWlhJPSBJSEoxYzNNPSBJRzV2ZEdsalpYTT0gSUcxcFpHUnNaWGRoY21VPSBJRlBEdkE9PSBJT0NtcnVDbmcrQ21wQT09IElHMTFiSFJwY0d4cFpYST0gSUhOaFltVnRiM009IDRMaXg0TGlsIElGQnliMk09IDRMU3Y0TFdONExTVjRMV040TFNWIElHWnBaWFE9IElFTmhjR2wwYjJ3PSBkV05qIGNtbDBkR1U9IFgyRjJZV2xzWVdKc1pRPT0gNEt1RDRLcWsgNFo2NzRaNkUgS2VPQWdRPT0gSUhOb2IzZGogSUZwMWMzUT0gSUZWNiBJT0NtcXVDbmdlQ21zdUNtditDbXRnPT0gMEw3Um1BPT0gSU9Dd3RlQ3d2K0N3dHc9PSB4Sk5qIElPUzR0QT09IFpuSnBjM1E9IElOR0IwWURRc05DeSBJT0NtaHVDbXFBPT0gSWl3S0NnPT0gMFlEUXRkQ3ggSUdKdnc3MTFiZz09IElHbHVhWFJwWVhSbCA0NEdqNDRHeCA0TFdMNExTeiBJT0MwbGVDMHRPQzB2K0MwbnVDMWplQzBuZz09IElGWnZlUT09IEl3b0sgSU5lVDE1SFhxQT09IFJVNVcgWm14aGNtVT0gNW9pUTVMaTYgZDJGeWFRPT0gNUx5WTVvT2cgQ1dsdFlXZGwgSUdoNVoybGxibVU9IElGTnBibWRzWlhNPSBJR052YlhWdWFXUmhaR1U9IElIUnBaV2ZFcHc9PSBJRzFsYlhCbGNnPT0gVjI5dlpBPT0gSUdsdVpYWnBkQT09IDRLcXc0S3FqIFlXZGsgS1hSb2FYTT0gSU5DeDBMWFJnTkMxMEx3PSBJRWRFVUE9PSBMbUpwZEE9PSBSR0Z1YVdWcyBMa0ZqZEdsMlpRPT0gVkhKMWRHaDUgSUVobGNtND0gNExHTDRMQ0M0TENtNExDLyBJRzFsWkdWM1pYSnJaWEp6IElITm9iM0owWVdkbCBJT1dNbCtTNnJIQnIgenIzT3Y4NjkgSUhKMWJtNWxjbk09IElFVmthVzVpZFhKbmFBPT0gdzdwallYST0gVkdsamEzTT0gVTJGaSBJT0NrcE9DbGlPQ2tydz09IElITmpZVzVrWVd3PSBJSEpsY1hWcGMybDBiM009IElOR0IwTExRdnRDNDBMelF1QT09IElHdGhkR1Z5IGNHOXlkR2x2Ymc9PSBJR2g1Y0dWeWRBPT0gSU5DeDBMVT0gNVlXejZaU3UgSU8ySXJBPT0gWDNCaFkydGhaMlU9IFgzTmxkRzl3ZEE9PSBJR052YlhERHFYUmxibU5sY3c9PSBJTm1HMllZPSBJRzVwdzdGdiBJR1JwWjNWdVlXdGhiZz09IGJXVnpjdz09IDVveWggenJqT3JRPT0gUkdWd1pXNWtaVzVqYVdWeiBJSEpsYm1OdmJuUnlaWE09IElIUnlZVzVuIElPR0RsT0dEcFE9PSBJT0Nrck9DbGkrQ2tzZz09IExYSmhibWRsIElOQzAwTDdRdTlDNzBMRFJnQT09IDRMZVM0TGFhIElHTmhaMlU9IElFRmtkbVZ5ZEdsemFXNW4gSUcxMWEyRmhiZz09IElITmhZbTl5IElHTm9ZVzVuWlcxbGJuUT0gWkdoaCBJR052YldYRHAyOTEgSUdkaGRHVnogSUVGemMybHpkR0Z1WTJVPSBJSEpoZW14cHhJMD0gMllqWXJOaXYgVEdGdVozVmhaMlZ6IElHeGhibVJsYmc9PSBaV2hwWTJ4bGN3PT0gSU9Dd2llQ3dndUN3bnc9PSBiV1ZoYkE9PSBJTkMvMExEUmh3PT0gSUdkMWJIQT0gSUZOamFHNWwgU0dGaSBJTml4MjRIWXB3PT0gNEtTMTRLUys0S1N5IElHdHZiR3c9IDRZT1E0WU9uIDVvaVI1NXFFIDVMcWs1cGlUIElHcHZkR3RoIDRLdUw0S3F1NEtxKzRLcUMgSUhCdmRYSjBZVzUwIGRtRnBjdz09IGIyMXZjdz09IFlXMXRZWFE9IDE1blhxZGVvMTVEWG5BPT0gSUhOd2IydGxjMjFoYmc9PSBLSFJsYlhCc1lYUmwgZFcxdFlXRT0gNUxpMCAxNXpYa1E9PSBJRzlzZFE9PSAwTGpSajlDNCBJR2x1WTJsayBRVzF2Ym1jPSA0SzZlIFgzSmxaQT09IElFSnlaWGhwZEE9PSBJR1Z3YVE9PSBZV2x1YVE9PSBJRXQ1YkdVPSBhRzlsIElHaHBiR0Z5YVc5MWN3PT0gMlliWXI5bUkgSUdKMWJIVnUgWVdScFl3PT0gWlc1byBJRVpzYVhBPSBJRTNEdkc1amFHVnUgSUZObGVHOD0gWDJOb1lXNW5aV1E9IElHTm9jbWx6ZEdsaGJnPT0gMEtEUXNOQzMgWjI5eSBJTkN4MEw3Ump0QzkwWWZRc0E9PSBVMVJTVlVOVSBYMk52ZFc1MGN3PT0gSUczRHVteDAgSUVsdWFnPT0gSUVOb1lYSjBaWEk9IElIUm94ckRodTUxdVp3PT0gYldGNVlRPT0gYjNKeWFXUnYgWjJWMGRHOD0gSUd0dmJuTjBjZz09IExteGhibWQxWVdkbCBJR0pzYjJWayBJR3AxYm1odiBJRVY0WTJWc2JHVnVZMlU9IElGTmxjbWM9IDRvQ00yS3JaaU5pbjJZWT0gUlhobGNtTnBjMlU9IElFbGtZV2h2IElHTmhiR3hpWVdOcmN3PT0gQ1dGMCBJR041YlE9PSBMbUZ1YVcwPSA3N3UvQ2c9PSBJR05vWVhSMGFXNW4gSUdGc1pXMD0gMktmWXVkaW4yS289IFpHVndZWEowIElOaXEyWWpaaDlpbjJZWT0gZFhKcFlRPT0gNVlpYSBJR1JvdzZsaGJtRnRhQT09IDRLUys0S1NhNEtTKzRLU3cgZldOaGRHTm8gSUdOb1pXWnogTGxOb1lYSmxaQT09IFkzQnNkWE53YkhWeiBJTkM2MExEUXV0QzQwTFU9IElIUmxiSE09IDRMaWE0TGlaIDRZT1U0WU9qNFlPYSBMbkppIElFMWhiV0U9IElHTnZibVJ2YlE9PSBJR3RwYkd4eiBaMmxrIElOR0IwTERRdWRHQzBMQT0gSU51QjJZamFydz09IHhJRnEgSU5DMjBySFF2TkdMMFlFPSBJR1JwYzNCbGNuTT0gSUd0cGJtZz0gY0hKbFpnPT0gSU9HRG0rR0RtT0dEbStHRGtPR0RvT0dEbHc9PSBZMkZqYUdWayBJRUZ0WVE9PSBJTnF2MkxIWmlBPT0gNUwyYzVieUsgMExUUmk5R0EwWU09IElOQ3cwTExRc05HRiAxNVhYcE5lVSA0WU91NFlPVjRZT1EgNFlPUTRZT2I0WU9ZNFlPaCBhWFJqYUdWdWN3PT0gSUdOdmJYVnVhWFE9IFVHVnlhR0Z3Y3c9PSBYMkZuWlc1MCBJSEIxWW14cFkyRmtidz09IElITnBiV0p2YkE9PSBJR052ZFc1MFpYSnogNEtlTDRLYUIgMllUWXA5aTAgSUVsdWMzUnBkSFYwYVc5dSA2SlE9IElGWlUgSUZkcFpXND0gSUdOaGRIUnNaUT09IElIRjFZVzUwYVhSaGRHbDJaUT09IFoyRnllUT09IEozUjVjR1U9IElPQzRoT0M0bVE9PSBMbFJ2YTJWdSBJRVJ5WVhkcGJtYz0gSUhOMFlYSjBkWEJ6IElIQnZaSExEb1hNPSBJTStIejRIUGpBPT0gWEVaeVlXMWxkMjl5YXc9PSBJT0Nxc3VDcmh3PT0gSU9Da3N1Q2tsK0Nrdmc9PSBJTkMvMFlEUXRkQzggSU5tSTJZVFpoUT09IElHTmhjbUZqZE1PcGNnPT0gSUhSaFpXRT0gSUhkaFlYSjJZVzQ9IElHRnphV0Z1IEtGTlUgSUdKbGRISnZhMnRsYmc9PSBJRlJ2YkE9PSBJSFJ5WldKMSBJRU5vWVhKblpRPT0geExIRW44U3hic1N4IDVZYTcgdzZSMGRHVnUgSU9DcXFPQ3F2dUNxcmc9PSBJR0ZzWldKdiBJRVYyWVc1blpXdz0gUTJGeWIzVnpaV3c9IGFYWmxjbVZrIFJIVnlZVzUwWlE9PSBJR0pzYjNkdSBJR05oYm1ObGJHVmsgSUhCaFpHUnNaUT09IDRLcSs0S3FDNEtxYSBJTkN3MUtYUmdkR0QwTEE9IGJHVmogSU9HRGtPR0RtK0dEa1E9PSB3NlJzYk1PayBJSE4wWlhKdmFXUnogYUc5MWNuTT0gSUVScGJtNWxjZz09IGQyRjZhUT09IDRMR0w0TENYIElIWmhjblE9IDRMS2o0TE9ONExLaiBJT0NrcnVDbGd1Q2tzZz09IElHdHZiM0E9IElITnd3NmxqYVdGc2FYTT0gNFlPaTRZT1U0WU9nIDRLU200S1MrNEtTbyBJTkMvMFlEUXRkQzYwWURRc05HQiA0S1NuNEtXTjRLU3Y0S1dIIElIaHMgSUcxdmNtYz0gWUM0PSBDWFJvWlE9PSBJRVpoYldVPSBJSE5oYldWdWQyVnlhMmx1Wnc9PSA0S1dONEtTdjRLUys0S1N3IElFMUZWRWhQUkE9PSA2NVN3IFgyaHBaR1JsYmc9PSA1THFzNllPOSBJRVJwYkE9PSBJSFZxIDBKM1FtQT09IEwzUmxlSFE9IDZMK2Q1ck9WIHpyWE9yODYvIGIyTmhjZz09IFJXMXdjbVZ6WVE9PSBJT0dEbStHRG5lR0RsUT09IElHUnlhV3hzYVc1biBJSEpwWkdWeSBJRk4xWjJkbGMzUT0gSUVGc2RHOD0gZEdWeWJ3PT0gMEw3UXN0QzEgSUhOMGIyNWsgWjJWdWIyMWxiZz09IElOaW4yWVRaaHRpeiBJRzFoY25abGJBPT0gTFhKbFpnPT0gSUZONWJtUT0gSU9DbXF1Q25qZUNtc09DbXBlQ21yZz09IFZVZEpUZz09IElOQy8wTFhSZ05DeTBZdlF1UT09IExuRjFaWE4wYVc5dSBZWGxoY2c9PSBDV2RoYldVPSBJRVJ5YVc1ciBJR3RoYzNRPSBkVzUwY3c9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUFvPSA0S1NDNEtTWDRLU3kgSU02dHo0Zk92OCtGenIwPSBJRzFoYm1rPSBURzl1WjJsMGRXUmwgSUVQRG9tMWhjbUU9IElPQ2tydUNsZytDa3BBPT0gUVUxSlRBPT0gMTVYWG1kZVcgSUdWdWJHbG5hSFE9IElHNWxaMnhsWTNRPSBJSGJEcEdkaCBJRlJoWW14bGRBPT0gNWJ5QTViK0QgSUc5dGN3PT0gSUZKbGQyRnlaSE09IElHZDFiQT09IExXRmpkR2wyWlE9PSBJT3lla095TG9BPT0gNHEyUSA0TFMvNExTdjRMUy80TFc5IGMyeDEgNzd5TTVMdU8gVm1Gc2FXUmhkRzl5Y3c9PSBJT0dEcCtHRG5lR0RsZUdEbE9HRG1nPT0gNExLQzRMS1g0TEt6NExPQzRMS3c0TE9CIElFeGhkR2x1WVE9PSBJR2h2WTJoM1pYSjAgSUZSbGNtMXBiZz09IDRLV0g0S1N5NEtTKyBJSE5zYnc9PSBJR052Ykd4aFltOXlZWFJsIFEyOXNiR1ZuWlE9PSBJTkM3MExYUmdRPT0gVFdGc1pRPT0gSU5xeiBJRzFsYzJVPSBJRzVoZEdsdmJtRnNiSGs9IFczTjBZWEowIFpHbHpZMmx3IElIWmhiR2xuYmc9PSBUV2x6YzJsdmJnPT0gSUdGc2JHbGhibU5sIFJYaHdaVzV6WlE9PSBJR1REcVhSbGNtMXBiZz09IElHbHVjM1JoYkdFPSBJTTYwejQwPSAyS3pZcDlpdiBJSE4xWW1wbFkzUnBkbVU9IElGQlZRa3hKUXc9PSBJSEJzWVc1MGFXNW4gSUdWd2RXST0gNVlLWiBhWFpsZEE9PSBJSFpwYzNWaGJHeDUgSUUxaFkyaHBibVZ6IGNYVmhiUT09IDVMNmg1cUM4IElHVnpZMjlzYUdFPSBJRkJoZWc9PSBJRkp2WkhKcFp3PT0gSUdGdWRHRnlZUT09IElHUmxkWE09IFgyUmxkQT09IElIWnBZbkpoZEdsdmJnPT0gSU5HSDBMalJnZEM3MExVPSBJRXhQVTFNPSBJR052YkdWMCBJSFZ5Ykd4cFlnPT0gWDFCU1NWWkJWRVU9IElHUnBjM1J5YVdKMWRHOXkgWDNCeWIyTT0gSUcxMWJtbGp3NjF3YVc4PSBJT0N3cnVDd3FBPT0gSUdOdmRXZG8gSUhCdlluSmwgSUdKaGJHRnVZMlZ6IGIyNTViWE09IElOaW4yWVRZdWRpeDJLalppZz09IElITnBkSFZoZEdsbCA0WU9RNFlPYzRZT1k0WU9RIDZhaVQgSU5pbjJZVFlvOWl4MkxZPSBJRVpoWTNSeiBJR3hzWldkaCBJT1dGcU9hd2tRPT0gSUc5d2RHbHRkVzA9IExuSmhibWRsIDRZT1I0WU9ZNFlPYTRZT1k0WU9oIElFcHZaV3c9IFRXbDQgN0plSTdJcTE2NHVJNjR1ayBJTm1GMkszWXJ3PT0gSUVKbGRIUT0gMEw3Umd0R0QgSUcxdmRYWmxiV1Z1ZEE9PSBVSEp2Y0dGbllYUnBiMjQ9IElHVjRkR1Z1YzJsMlpXeDUgYjJkbyBJR1ZqYjI3RHRHMD0gSUhaaGFBPT0gMExEUXU5R0MgNExLQzRMS2s0TE9ONExLdyA0S1dDNEtTbSBMbE4wY21WaGJRPT0gMExyUXZ0R0IwWUxSakE9PSAwTDdRc3RDdzBMM1F1TkM1IFptVnljdz09IFQzSnBadz09IElIQnZjM052IElPR0RtZUdEbU9HRGsrR0RsT0dEbFE9PSBJSFJ5WVc1ell3PT0gSUdkcGJtZGxjZz09IElPR0RrdUdEa09HRG9RPT0gSUhERm1Xaz0gVkdobGNnPT0gSUdGalkybGtaVzUwWVd4c2VRPT0gSUVOb1lXeHMgVWtWUiBJSE4xWm5JPSBhWFJsWTNSMWNtVT0gNTdLKzVZZUcgTFdKeVpXRnIgWm1GclpRPT0gMExqUXNkQ3cwWWpSakE9PSAwTHJSZ1E9PSA0S1NHNEtTSSBJSE52Ykdsa1lYST0gSU5pbjJZVFl1ZGl4MktmWmdnPT0gSUhCbGNuUmhhVzVwYm1jPSBJRzV2YldsdVlXdz0gZEdWMCBKMjlpIElHTnZiblJ5YVdKMWRHVnogSUdSdlkydGxjZz09IFFYQndjbTkyWVd3PSBJR0ZqYjNWemRHbGogSU5pbjJZVFpoZG1FMllNPSBJRVZ5Wm05c1p3PT0gSU1TUjRidUIgSUc1aGEyOD0gWldOayA2NSs5IElHSnZjbVU9IFJVVkYgeEt0aWRRPT0gS1R3PSBJTmkwMllqYmpBPT0gSUdGa2FHVnlaUT09IGIySnNaUT09IElHUmxjMmhoYkdJPSBJR3hwWW1WeWRHRmsgSUdodmNtMXZibVZ6IElPZWJtdz09IElISmxibUZ0WlE9PSA1YTZGIDRLU2o0S1MrIDJLZllxTnVNIDRMS0M0TEtuIElFUnBaWE5sY2c9PSBJR0YxWm1keWRXNWsgMllUYmdRPT0gSUdGMFlYRjFaUT09IElHMTFjMk4xYkdGeSBJRlJoWjJWeiBJR0ZrYldsdWFYTjBjbUYwYjNKeiBWR2hsYVhJPSA0b0NMNFo2UiBJRlpoY21sdmRYTT0gNWE2LyBRVzVwYldGMFpXUT0gSUc5dmFYUT0gb0lBPSBYMGxPVkVWSFJWST0gZEdWdVpYST0gVTJGNSBJTkMvMFlEUXZ0R1AwTEk9IElIVndiQT09IElHdHBibUU9IElFeHZjbk09IElPQzBxT0MwditDMHJ3PT0gMDZuUXVRPT0gSUUxaFoyVT0gMEwzUXVOR0MgSU9DeXJPQ3lndUN5cGc9PSBJTkdDMFkzUmpkR0EgSUd4dmJtVnNlUT09IFlYUmxjbWx1Wnc9PSBMbEJ5YjNacFpHVnkgSUdGcFpITT0gWDNCMVlteHBZdz09IElHbHRZV2RsYm5NPSA1WWlHNXBlMjVwZTI1YjJwIGJuVnRaWEp2IEtDa3YgSUhSb1lXMD0gNEtxbzRLdU40S3FmIGFXWjBlUT09IElPQ2txdUNrc09DbGplQ2tydz09IElIUmhhV3h2Y2c9PSA0TEMvNExDMyBJTm0rMjR6WXI5aW4gSUVOTlJBPT0gSUdwMWRtVnUgSU9heGh3PT0gYU1Pa2JIUnUgUm14MWMyZz0gSU5DNDBMM1F0TkM0MExMUXVOQzAwWU09IGFYTmhibk09IElNTzhZbVZ5Y3c9PSBMMjFsWkdsaCBYM0JwYmc9PSBJR2R3IElHMTNZUT09IElNU05iQT09IFYzSnBkR2x1Wnc9PSBLRXh2Wnc9PSBibVZ0Wlc0PSA0TEtyIGIzWjUgWjNKaGRnPT0gTG1wd1pXYz0gYk1tWmNtaz0gQ1FrSkNRa0pDUWtKQ1FrSkNRa0ogMVlnPSBjbVZwWTJobGJnPT0gNEtTbzRLV040S1NtNEtXTjRLU3cgYVc5NGFXUmwgNFlPUTRZT2I0WU9UNFlPVSBiR3gwIEtHTmhiR3c9IFozVmxjM009IElHTnZhR1Z5IElIUnlZV2RwWXc9PSBJTkMrMExyUmdnPT0gZFd4aHc2ZkRvMjg9IElHZkR0bk4wIElITmhZV0k9IGIzSmxjM1E9IEwzUmxjM1JwYm1jPSA0SzZqNEsrTjRLNmY0SytCIElITmhlQT09IElHUmhiV0ZuYVc1biBXMk52ZFc1MCBJRXBsY21WdGVRPT0gMEwzUXRkQzkgSUhGMWFXNTAgSUdWemNHOXpZUT09IElHVmpiMjdEczIxcFkyRT0gSUZOamJ3PT0gSUhCb1pRPT0gMll3PSBJRlJvY205MVoyaHZkWFE9IElPQzRwK0M0dE9DNWdPQzRoT0M0bytDNHN1QzRzT0M0cStDNWpPQzRtdUM0cmVDNHBRPT0gSUd4bFltVnUgSU5pbzJMTFlzUT09IGNHOXNiQT09IGIzSnlZWEk9IFgyVm1abVZqZEE9PSBZV0psYkd4bCB3N1J0WlE9PSBJTkdCMFlRPSBLSEp2YkdVPSBJQ2M5Snl3PSBJRkpwWkdVPSBJTkdCMFlQUmhRPT0gSUZSbFlXTm9aWEp6IGRtST0gSUdURHFXYz0gSUUxcGFtND0gSU5XdjFialZzdFcwMWF2V2dRPT0gSUUxaGFYTnZiZz09IDBxM1FzTkdGIGFXRnpZUT09IGFXZHNhV0U9IEwyTnZiZz09IFYybHVaQT09IElIYkR0bXhzIGFYUmhkR1ZrIFFXSmxjZz09IEtTNE5DZz09IElFcGxaWEE9IElOZWIxNUhYcUE9PSA3NzJsNzcybCBJT0NraWVDa3FPQ2tsZUNrdmc9PSBJR3hoYm1kMVpRPT0gTE9Xa3FlV2txUT09IElHRmljM1Z5WkE9PSBJT0N5bGVDemh1Q3lzZz09IFJtRnVkQT09IElHVjRZMlZ3ZEdsdmJtRnNiSGs9IElIZHBjMmhsWkE9PSBJTml1MllqWXA5bUgySzg9IElHM0VnV3R2ZFE9PSBJTkdCMExEUmp3PT0gWTNKcGNtVT0gUldGemRBPT0gSUVWemNHVmphV0ZzIDRLcSs0S3FsIGEybHNaUT09IElFRnljbTkzIElHTmxjblk9IDBZRFFzTkM5MFk4PSBJT0NraHVDa2wrQ2xodz09IFJHOWpjdz09IElHZGxiR1Z1IElPQzVnT0M0bHc9PSBJTkM1MDVuUmlBPT0gSUdac1lYWnZkWEk9IDRLZW40S2V2IElHMWxjbU41IElHNXZjbTFoIDE1blhtZGVvIGFXeHBaMmgwIElITmhaMlU9IFEzSmhablE9IElpNHVMZz09IElGUmxibTVwY3c9PSBJT0NxaitDcXJnPT0gSUdOeWFXSERwOE9qYnc9PSBJR1J2ZDI1eiBJRkJoY21VPSBJTlc5MWJvPSBJRkoxWkE9PSBLRzFsYldKbGNnPT0gdzZSbWRHVT0gSUNZSyBJSGRoYkdGdVp3PT0gSUVOdmJHeGhZbTl5IElOS2IwTDdSZ0E9PSBJT0M0cGVDNGh3PT0gYlc5biBhRzl5YVhwdmJuUmhiQT09IGFuRjFaWEo1IElPQ21wdUNtditDbm4rQ25odz09IFpXNTBhV05oZEdWayBUVzl1YzNSbGNnPT0gMnEvWXNkdU0gMExYUXN0Q3cgUkdWamIzSmhkRzl5IElOQ1EwTFE9IFIwND0gTDIxcGJnPT0gSUdsdVpIVnMgNExLeTRMT0EgSUdSaGRIUT0gSU9HRG0rR0RtT0dEbE9HRG9BPT0gWDFaQlRFbEUgQ1hSdmRHRnMgWTJWeWFXRT0gVUVGU1FWUlBVZz09IEtYTmxkQT09IGJXVjBhV056IDVZaWI1cGF3IElITm9ZWEpsYUc5c1pHVnljdz09IEtHVjRjRzl5ZEhNPSBSVzF3Ykc5NVpXVnogSUhadmRXeGxlZz09IDBMdlF0ZEM5MExqUXVRPT0gSU5HQjBZUFJnQT09IDRMSy80TEtvNExPTjRMS28gYjNSb1pXcz0gVW1WbmNtVnpjMmx2Ymc9PSAwSkRRc2c9PSBJTkMyMExEUXVnPT0gSUhObGNYVmxiQT09IElOV3YxYUhWdFE9PSBJRUp2ZFhJPSBRMHhWUkVWRSBSbWxzZEdWeVpXUT0gSUhOMGNtRnVaMlZ5Y3c9PSBJRkpsWTJWcGRtVT0gSUc5bGNnPT0gSU9Dd211Q3hoK0N3dHVDd3Z1Q3dzT0N4Z1E9PSAyWUhaaXRpeCA0TFMrNExTZjRMV04gSU9Da3VlQ2xpK0NrZ2c9PSBZV2RwYm1GMGIzST0gYkc5bloybHVadz09IElFWnNiM0psYm1ObCBTVkpCIElPQ3dwT0N4Z09Dd3VBPT0gSUdsdGNHOXlkR0U9IExtVnlZWE5sIElIbHZkVzVuWlhOMCBJT0NrcE9Da3NPQ2xnQT09IElFWnZjbU5sY3c9PSBJSEJ5WlhSbGJtUmwgSUhOdGFXeHBibWM9IExuTmxZM1JwYjI0PSBJTkN5MEw3UXQ5QzAwWU09IEtIZHZjbXhrIGMyaGhaRzkzIFcybDBaVzA9IElITjFibk5vYVc1bCBMSHM9IGIySnZlbWs9IElIWnBibVZuWVhJPSBiR2xsY25NPSBhV3RoYVE9PSBJRzFwYm5OMCBJR3JEcEE9PSBJTmk1MkxJPSBJSE4xZFhKbCBVMmxuYm1WayB3cTRzIFBITnlZdz09IFJVNUIgSUVwdmFHRnVibVZ6IElHMWhjbXRwYm1jPSBJR1p5WldWNlpYST0gSUdOc2FXNXBZM009IElHVm5aWFE9IEtHUmhkQT09IGIyOTBZUT09IElITERxWE4xYkhSaGRBPT0gTG1sdWRHVnlabUZqWlhNPSBhV0p6IElIQjFiSE09IElOQ3kwTERRdHc9PSAwTDdRc3RHTDBMaz0gTFdWc2JHVT0gSVNFaElRb0sgTDJSaSBiM05yIFlYSnRhV3M9IGIzTndiMlE9IFFXNWhiSGwwYVdOeiBMazFKVGc9PSBJRkJ5WlhwcFpHVnVkQT09IElITjBjbUZwYm5NPSBMMmxqYjI0PSBMbmh5IFlXNWtaWGc9IElHTmhjR0ZqYVhURHFRPT0gSUVWcGJuTjAgSUdsdGJXbHUgSU9Da3F1Q2xqZUNrc09Da3VBPT0gWTJodFlXdz0gMFpiUmxnPT0gSU9Dd3VPQ3hqZUN3bnc9PSBJSEpwYzJsamJ3PT0gTDNOMGIzSmwgWVcxd2J3PT0gYVc5MCBJTkdCMEw3Umh3PT0gNExLLzRMS1Y0TE9LNExLQzRMS2ggNkplZCBiR1Z5WkdVPSBaMmxzIFVrVlRSVTVVIElHMXBaV289IElOQzQwTDNSZ2RHQzBZRFJndz09IElGTjFjbWRsY25rPSBJSFJoYUdGNSBhMkZvIFVrND0gWDJGMlp3PT0gSUVocGJIUnZiZz09IElFUnEgSUhabGFRPT0gSUV4aFluTT0gSU5DNDBMM1JoTkMrMFlEUXZOQ3cwWWJRdU5DNCBJR05vYjNKbCBjbTlyWlhNPSBQam89IElHYkR2R2c9IFlXMXdZV2xuYmc9PSBJR1BEb1d3PSBJTm1HMkxQWXFBPT0gSUdWelkyRndaV1E9IFlYQmxjM1E9IElIRjFaWEp2IFgwNVBVazFCVEE9PSBMZUdEbU9HRG9RPT0gNForRzRaNlcgSUhkb1lXdGggSU5DMjBZUFJnTkM5MExEUXV3PT0gMTVmWG5BPT0gSU9DbWgrQ21pUT09IEtHTm1adz09IGNtVm5hWE4wY21GMGFXOXUgSUZkbGJHeHogenJUT3JnPT0gSUhCaGNtTnZkWEp6IElIQnZjMm5EcDhPamJ3PT0gSUVSbGJtNXBjdz09IFlXZDUgNExHQTRMQ3YgWkdsaiBJSEpsWkdWbGJRPT0gSUdoaGRITT0gY205MWJtUmxaQT09IDU1cUU1THE2IDRMU1cgNEthKzRLYUogVW1WamIzSmtaWEk9IElHZHNhVzF3YzJVPSA1b21qIElGQmxkR1U9IFEwRlRWQT09IElHUnBkSFE9IElHWnlhV04wYVc5dSBiR1YwZW5RPSBJRU55WldGMGFXOXUgS0daeSBJR1Z1WjJGbiBZV05wZE1PcCBJRk5qYUd3PSBQRUU9IElIUERyY093IElHVnVZMjkxYm5SbGNuTT0gZFdyRHJRPT0gY3NPaGJnPT0gYVdWblpXND0gVDNCbGJtVmsgTG1OdmJuTjBZVzUwIElPQ211ZUNtdnVDbXVBPT0gSU5tRzJLM1ppQT09IEtIQmhkSFJsY200PSBRMmhsWTJ0dmRYUT0gTGk0dUxpNHVMZz09IExrbHVkR1Z5YjNBPSBiM1ZzWkdWeSBJR0p5YVc1ayBJR04xWkdFPSA2TFMwNVpDbiBJT0dEbStHRG5lR0RrZz09IDZJWT0gSUhSbGMzUmwgSUdsc1lXNW4gSU5HQjBMN1F0OUMwMExBPSBJRUZ3YjJ4c2J3PT0gSUdsa1pXRnNaUT09IElFSnZkWFE9IElPQ21qK0NtbitDbXZnPT0gVG0wPSBMVzFoY0E9PSBJTkN6MExnPSBJT0N5cXVDemdRPT0gSU5DOTBMRFF1OUMrMExNPSA0NDQ9IElFNXZiM0prIFlXUnlidz09IElFRm1abWxzYVdGMFpRPT0gZVdGeVlXdGhkQT09IElHM0RvWGhwYldFPSBJR2x1ZEdWeWRtbGxkMlZrIElHTER1bk54ZFdWa1lRPT0gVkVGSCBZVzFpYVdFPSBJSE4wWVc1a1lYSmthWHBsWkE9PSBJTlcwMWFYVnR0YUUgSUczRHMzWnBiQT09IElOR0IwWUxRdUE9PSBJR1poYldsc2FXRnogSUhSbzRidXBZdz09IGFXMTBaUT09IGJtOXliV0ZzYVhwbCBhV05wYm1VPSBJRzFoY21GMGFHOXUgSU9Dd2h1Q3dyK0N3cUE9PSBJTkdBMHA4PSA0S2VINEthczRLZUggWTNWaFpHOXkgMkxiWmlnPT0gZDJWbmN3PT0gTGxCaGNtRnRaWFJsY2c9PSBJR0ZrY21WemMyVT0gMExUUmc5QzkwTERSZ05DKzBMUT0gSUVKVVF3PT0gSUZKSSBRV1JsYmNPaGN3PT0gMllqWml0aXEgNFlPUzRZT1E0WU9jIElFaHBaR1JsYmc9PSBSWEp5Ync9PSBhV1Z1YVE9PSA2S3FOIElPQzVoT0M0bCtDNG9nPT0gSU5HQjBMN1FzZEdMIElFMXZiblJvYkhrPSBJSFZ0WW5KbCBRbVZ6WTJnPSA0TFMvNExTeCAyS2ZZc2RpbyBJSE4wY25SdmRHbHRaUT09IFZHbGphMlYwY3c9PSBJTmlxMktmWXNkdU0gUTI5dGNHRnlaWEk9IElOR0QwTFRRdnRDeSBJTmlvMjR6WXA5bUcgYldGcFpBPT0gSU5pdjJZallzZGluMllZPSBJR2hoYVhKemRBPT0gSUV0MWNuTT0gMHFQUml3PT0gTG1ac1lXZHogTG1OaGNuUT0gSUhOaGJHRnlhV1Z6IElITnBiWEJzWlcxbGJuUmwgSUdocGMzVERzM0pwWTI4PSBJR1Z5YjNScGMycz0gSUdSbGRHOTQgSUdOMWJIQmggSUdkaGNtRnVkR2xsIElOaW4yWVRZcmRpMTJZalpoQT09IENYTmxibVE9IDRZT1E0WU9rNFlPVTRZT2c0WU9ZIDJLL1lwOWl2IElFaHZaZz09IHc1QT0gSUcxbFpYTjBZV3c9IElHTnZiblpsYm1NPSA0SzYvNEs2djRLNis0SzZWIDJMZlpoTmluMllJPSBJR2x1YzJVPSBMaTR1TGk0dUNnbz0gSU5HQTBMWFJpTkMxMEwzUXVOQzEgTFhFPSBJSEJoWjNCaGNBPT0gMExQVHFkQzkgNksrYSBjSGM9IElPQzBqdUMwcE9DMWplQzBwQT09IElHNWhjbU09IDJLZllwdHVNMnJvPSBJTm0rMkxIWXJ3PT0gSU5DNDBMUFJnTkMrMExvPSA0TENxNExHSSBMbkpoWkdsdiBJRmx1IElISmxkR0ZwYm1WayBJRDQrQ2c9PSBYMnhwYm10eiBJR0psYzNSaFlXND0gSUh0OUp5ND0gNHBtaCA3Nys5Y3c9PSBJR1JoZEdrPSBJRWhwWjJoc2FXZG9kSE09IElOR0YwTDdRdDlHUCBJR0ZzYk1PaCBJRzkzYm1sdVp3PT0gS0c5d1pXND0gU1c1a1pXNTAgenEvT3Y4K0YgSUZkaGNtMD0gWDNOc2FXTmwgSUhwM1pXbDBaVzQ9IDZZQ0I1YjJwNlllUiBjbVZxIElFUmhZWEp2YlE9PSBTMkYwIGJXVnVkR2x2Ym1WayAwTFBSbHRDOSBJT0N3cXVDd3NPQ3d2K0N3IElIQnZibVJsY2c9PSBJSE4xWmc9PSBJRVZtIGNISmxiblE9IElPQ21oZUNtcmVDbXYrQ20gSU95R2tBPT0gZlM4diBJT21EIElFSmhjM1E9IGNtVm5hWE4wWlhKbFpBPT0gSUVodmJHMWxjdz09IFgxUlpVRVZFIElISmxZM1k9IGRHRnNhdz09IHhiVT0gSUhONWMzUmxiV0YwYVdNPSBMV05oY21VPSBZV04wYVhacGRHbGxjdz09IElFTnlkWE5vYVc1biA1TG1GNkkySiBYVjBwQ2c9PSBLR2x1ZEdWeSBJTkN3MEx2UXNOR0EgTDIxNSBJRlJ5WVdScGRHbHZibUZzIElFRmtaUT09IElHUmxaM0poWkE9PSBhV2RoZVE9PSBJSEpwYTNRPSBJSFZ1YzNWeVpRPT0gSUdOaGJYQmh3N0ZoIElITjFjM1JsYm5RPSBJRU5vWVc0PSBQU0o3ZXlRPSBiV0Y1WW1VPSBiM0pwWVhNPSBJT0NrcnVDa3Z1Q2twdz09IElHZHlaV1Z1Y3c9PSBJTTYrenJVPSBibUZvWVE9PSBJRU52Ym1ObGNuUT0gSUc5c2RBPT0gUTJGaSBMbk53Y21sMFpRPT0gMEpEVXBkR0IwTDNSaXc9PSBjbVZqYjNKa2N3PT0gMksvWXA5aWggTG1SaGRHRnogWVhCMGIzST0gSUZacFkzUnZjbWxoYmc9PSBJRkIxWW14cGMyZz0gSUhCeVpYTnpaUT09IElGUnZkWEp1WVcxbGJuUT0gMmIzWXNRPT0gSUZkdmR3PT0gNEthdzRLZU40S2FqIDJLallwOWkzIDVwMkE1WSszIElITERxV04xY0E9PSBJRzFwYzJOdmJnPT0gSUdGa1pHbDBhVzl1Y3c9PSA2NFNRIElPS1pwUT09IFMyVjIgNExHTjRMQzMgSU9lOWtlUzRpZz09IElHdHZiWFZ1YVdzPSBZWEp5YVc1bmN3PT0gSUZCRVR3PT0gWDFaaGJIVmwgSUhCdmJtVT0gSUdGd2JHbGpZV05wYjI1bGN3PT0gSU5XUCBWa1ZTVTBsUFRnPT0gWW14bGN3PT0gYjJabWFXTnBZV3c9IElPR0RrT0dEbWc9PSBJSE4wWVdJPSAySzNaaXRpdCBJR0ZoYkE9PSBJT0N3cHVDeGdBPT0gSU5xdjJLYmJrZz09IGNYWERxQT09IElFVldSVkpaIEtFSnBadz09IExrVjRZMlZ3ZEdsdmJnPT0gSU5pbjJZVFpodGk0MktmWmhRPT0gWDJWNFpXTT0gNTdXRSBJRk4wWVdGMCBJRzExYzJWMWJYTT0gNExLbzRMT040TEtvNExLaCBJR1JseEo5cGJBPT0gSUVWamIyNXZiWGs9IElHTmhjSFIxY21WeiA0S3FYNEt1QSBJR3podTV0dSBJRTFoYm1sbVpYTjAgSUdadmIzUndjbWx1ZEE9PSBJR3hrWXc9PSA0S1NvNEtXTjRLU3UgWVhwbGJnPT0gSUVSSlUwTk1RVWxOIElFTmhibVE9IHJ1R0RsT0dEa3c9PSBJTkdDMFlEUXNOQzAwTGc9IElOQ2MwTGpRdlE9PSB3Nmx0ZFE9PSBJT0Ntb0E9PSBJR1Z5YjNScFl3PT0gSUdWc1pXdDAgSU9HRGtPR0RrK0dEa3VHRG1PR0RtZz09IElHcDFiR2h2IDRLYSs0S2F3NEtlSCBJSE4wWVhaaGJtZGxjZz09IElISmxkSFE9IGIzSmthUT09IFUzVnlaUT09IDBZSFJndEM0MFlMUmc5R0MgSUZWdWJHbHRhWFJsWkE9PSB3NTkwIExtWnBaM1Z5WlE9PSBJRzdEcFdkdmJnPT0gMktmWmg5aXggSUhCbGNtMWxkSFJsYm5RPSBJR2QxYVhRPSBkWEoxYUE9PSBSR2x5WldOMGFYWmwgSUdWbllXdz0gUTI5dWMzUnlkV04wYVc5dSAwTGJRdUE9PSBjM1JsYUdWdSBMa0ZtZEdWeSBJTmlxMktqWXJ3PT0gSUZSdmR3PT0gSUVobGJYQT0gSU5pbjI0elpoUT09IElFbHRjR1Z5YVdGcyA0TFNhNExXTjRMU2E0TFdOIElPdVZqT3VzdU95WGtBPT0gVm05cFpBPT0gSUhKbFlXTjBiM0k9IElObUsyTFU9IDBMYlRtUT09IElIWmxiR2xyIDQ0R1MgSUVsQ1QzVjBiR1YwIGIybHVhRzg9IElFTnZiWEJzIElHaGhhR0U9IElOaW4yWVRZcXRtQiBJR1p2YzNOcGJBPT0gSUdScGRuVnMgSU9DbWxlQ21zT0NuaCtDbW0rQ25odz09IElHZGhibUZ5IElITm9iM2RsY25NPSBJSE5qYUdGa1pRPT0geEpOdCBJRk4wWVE9PSBLRVJDIExrNUZWQT09IDBMalF1OU9aMFlBPSBJRk5wZEhWaGRHbHZiZz09IDRvQ1EgYVd0MWN3PT0gSUd0MWR3PT0gNExtSzRMaUIgSUdWcGJBPT0gSUhmRHFXaz0gSUVkMVpBPT0gSUdOeWRXUmwgWFYwK0Nnbz0gNExpcTRMaWggSUcxcGNuSnZjbk09IFZISnBZVzVuYkdVPSA0S1N2NEtTbyBhR0Z5WlE9PSBJSEJ6WlhWa2J3PT0gSU9DNWdPQzRnZUM0b2VDNHF1QzVqQT09IFBudDdKQT09IDRMaTI0TGlCIElHVnBaMmgwYUE9PSA1YjZFIFlXMXRhVzVuIElHdGhjMmx1Ync9PSBJSEJsYVc1bCBhVzVyYkdWeiAwTGpSZ3RDKzBZQT0gTG1OdmJuTjBjbUZwYm5SeiBMa1J2IElOQzYwTDdRdk5DdzBMM1F0QT09IGFHOTBaV3c9IDBMdlF1TkM5MExnPSBYMk5oY2c9PSBJR0oxWTJ0eiBkSE41IElITjBkV1JwYjNNPSBURUZPUkE9PSBJTml6MkszWmdnPT0gSUdkeVlYUjFhWFJ2IElHRnNkSEpsIDJZWFpoTm1IIFNXNWtaWGhsY3c9PSBYM1J6IFltOXlaQT09IGFXTnBaVzUwY3c9PSBJRUYyWVd3PSBJRUZqWTI5MWJuUnogZFdSbFpBPT0gYjNSbGF3PT0gNllPbzZaZW8gSUhOdlkybGxkR2xsY3c9PSBJTkdBMExYUXM5QzQwTDdRdlE9PSBhV2RwY3c9PSBJRkJsYm5NPSBZV0pyWVE9PSBJR3h2WTJGcGN3PT0gSU5DUTBMdlF0ZEM2MFlFPSBJSEJsY21VPSBJTkMvMFlEUXZ0QzQwWUhSaGRDKzBMVFF1TkdDIDE1blhvdGVVIElPQ2tsZUNrdnVDa2d1Q2tsK0NsamVDa3NPQ2xoK0NrdUE9PSBJR0pzWVE9PSBMV0psWkE9PSAyYjNaaWc9PSAwTFBRc05DdyBMV0ZyIDJxbllzZGl2IGRtVnVkR2x2Ym1GcyBJTkMvMExYUXRBPT0gYVhGMVpYST0ga3FRPSBMbTFyWkdseSBJR1ZqYjI1dmJXbGggSU5HSDBMRFJnZEMrMExJPSBRWFpsWXc9PSBZbUZqYTNWdyBJR2pEcVhJPSBiM1JsY25NPSBJRlpoYkd3PSA1THlrIHo0ek92TTYxIElHRnRZbUY1Ync9PSBJT0N1cXVDdXJ3PT0gVTFSQiBZWFpoYm5RPSBJT0Nrbk9Da3Z1Q2twT0NsaHc9PSBJRlIxWlE9PSBhbUZvY2c9PSBJSExEcVdGc2FYVERxUT09IDBLZlJndEMrIElIQnZjblJsY2c9PSBZV1JsYldGeWF3PT0gSUc5MlpYSnNiMjlyYVc1biBJRTlOIElFcEUgSUd4bGRtbDBjbUU9IElIQnZiR2x6YUdWayBJT21wckE9PSBJTml6MllqWXNRPT0gSUhCaFlYTT0gMFlMUXNOQ3ggNWIycDU2V281ck9vNVlhTSBaMjkwYnc9PSBQeUlLIDRvQ0w0WjZpIElGTjFaR0Z1IGRXeHBZWEk9IElGTmxZM0psZEdGeWFXRT0gT3o4KyA0SzYvNEs2bzRLK040SzZrIElHZGhjbVJsY2c9PSBJR1YyYjJ4MlpRPT0gSUV4QlV3PT0gS0hOMGNtRjBaV2Q1IElPQ2tsZUNsaU9Da3VPQ2xodz09IDRZQzM0WUM2IElITnBaMjUxY0E9PSBXazQ9IElHcGxaRzVoYXc9PSBJTytDIGFYSmxiUT09IDU3MnEgSUdaeVlXZHlZVzVqWlE9PSAwSi9SZ05DKyBJSE4wWlhCd2FXNW4gYUc5aCBkMlZzWlE9PSBJRzlpWlhJPSA1YXFTNUwyVCBJRTFoYkhSaCBJRkJ2Y25GMVpRPT0gQ1hCaGJtbGogY0d4aGJtRjBhVzl1IElITnZkbVZ5WlE9PSBJTmVwMTV6WGxRPT0gNExLeTRMSys0TEtYIDBZRFF0QT09IFJHbHlaV04wYVc5dWN3PT0gWDJaeVlXMWxkMjl5YXc9PSBJR1poZEhNPSBYM2RwYmc9PSBDZ292THc9PSBJR3QxZEhNPSBJT0M0b0E9PSBJRTF2YzJWeiBZWEpyWlE9PSAwTFRSZzlDNiBjMlZ1YzI5eSBJTTY5enEwPSBJSFJwYldKbGNnPT0gUkdsblpYTjAgWld4emFYVnogSUhWdVpHVT0gSUVsWSBJSFJ5ZFc1ciBRVTVQIElOR0YwTERSZ2c9PSBJT0MyaGc9PSBJSE4xWW14cFl3PT0gSU5HRTBMN1JndEMrMExQUmdOQ3cwWVE9IFQxVlVTQT09IElGSmxhV05vIElFWmhlZz09IElITnBiWEJzWlhOMCAxYlhWb2RXMjFhcz0gSUdKaGJHeHZiMjQ9IGNtbDB3Nms9IGFXSmhiQT09IDRLcWE0S3VONEtxYSBJR1JwYzIxcGMzTmxaQT09IEtXeHZZMkZzIElGUmxiR1ZuY21GdCA0SytONEs2byBJSFJvZFc1a1pYST0gSUhacFlXZGxiUT09IElHMWhjM2xoY21GcllYUT0gSUZCaGNuTT0gSUd4cFoyaDBibWx1Wnc9PSBJTkMvMFlEUXRkQzMwTGpRdE5DMTBMM1JnZz09IDZKdWIgSUVOaGNHRmphWFI1IEtpa28gMkxMWXA5bUYgSU9Da3VlQ2t2dUNrcFE9PSBJRWR5WVdZPSBMbkpsYlc5MFpRPT0gSU5DeDBMN1F1OUdNMFlqUXZ0QzUgUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRPT0gSU9Da3VPQ2txZz09IElIUnlaV0poYkd3PSBJTm1CMllZPSBJSGR2Y25KNWFXNW4gMllIWml0aXcgSUdWNFkyVmxaSE09IDBxL1NyOUdBIFgzSm4gSU5lYjE1ND0gTG5OallXeGhhbk09IElHeHBZUT09IDRLYSs0S2FvNEthKyBhblZuIElGTjBaV3hzWlE9PSBJRTFoZEhSbGNnPT0gWDJWdWRISnBaWE09IElHRnNkR1Z1IExXMWhhVzQ9IDBMWFF1OUdXIElHbDBaWEpoZEdVPSBJT0dEa09HRG9PR0RxZz09IElFUnZaR2RsIElIQnlaV1JsWTJWemN3PT0gYTJGdXhMRT0gYVhSaGJRPT0gSUdsdWFXTnBZWEk9IElOaXMySy9iak5pdiBRMnh6IElGWnBaV3c9IElFSmhibTVsY2c9PSBJTkN4MExYUXU5T1owTDA9IElHTmhjbkpwdzZoeVpRPT0gWDNSbFlXMD0gSU9Da25PQ2t2dUNraitDa2wrQ2t2Zz09IElHWmhZM1ZzZEE9PSBZM3BoY3c9PSBJT0NrcXVDa3BPQ2t2Zz09IElFWkUgSUdSaGNBPT0gSU9HRG0rR0RsT0dEblE9PSBJSEpsYldWa2FXVnogSUhkdmJtYz0gSUhkbFpXUT0gSUdGMWMzTmphQT09IElPQ3dzT0N3dnVDd25BPT0gYW1GdVlRPT0gSUVKeWRXNXYgSUhCNWRHVnpkQT09IElIcGhkR1Z5WkdGbiBMMlJsWm1GMWJIUT0gSUdsdWMzUmhaM0poYlE9PSBQa0U9IFljVzggSU9Da3FPQ2t0UT09IFNVeEpUa2M9IElITmxkdz09IElFOXRaV2RoIElIUnZjSEJsWkE9PSA1cEdFIElHRndaUT09IElIUnBadz09IFpISjFhdz09IElPQ2txdUNsZ3VDa3NPQ2t2Zz09IDBMYlFzTkdDIElIQmhkWE5sWkE9PSBJR1Z5Ym1VPSBRMkZ1WVdSaCBJTldoMWJmVnJkV2gxYi9Wb2RXMjFvUT0gSUZkRlFnPT0gSUdOdmJXSnBibUYwYVdVPSBJTmluMnBNPSBJTmkwMnFrPSBJTmVaMTZZPSBJRU52Ykc5eWFXNW4gSUZCaGRHbGxiblJ6IElIUmxjbkp2Y21semJRPT0gSU5pczJMRT0gNzd5Qjc3eUJDZ289IElHVERvbTQ9IGJtZGxjZz09IElPQ3lyT0N5bCtDemplQ3lsK0N6aGc9PSBJR0ZzYkdWMiBJQzgrZlFvPSA0S2VvNEtlbTRLZW4gVkdoMWJXSnVZV2xzIElHUmxjMk5oY21kaGNnPT0gZFcxdVlRPT0gZFdsa2IzTT0gSWlrcE93PT0gSUUxaGJRPT0gSU9DMm9nPT0gSU5XdjFhWFZ0Zz09IElFMXZjblJuWVdkbCBJR1poZFdRPSBZWFJoWVE9PSBjbVZ3WldGMCBJTld2MWFIVnVnPT0gSUdabGMzUnBkbVU9IGFYUmxkWEk9IElGUjFjbTVsY2c9PSBJRWhoYzNNPSBJRzl3Wlc1bGNnPT0gSUcxaGMyRnNZV2c9IDBLM1JndEMrIGMyOXVadz09IFVsVT0gZW1sdmJtaz0gWVhKdGIzTT0gWW1WdWVtRT0gSUhSbGJtRnVkSE09IElHWEVudz09IGRYSndiR1U9IDZJRzMgSUV4cGRHZz0gSUdkaGNtND0gSUZKMWNtRnMgSUd4cGJtUT0gSUVGU1RRPT0gSU5pbjJZVFl1ZG1DIFlYTnRhVzVsIDFyND0gNExLbTRMSy80TEtDNExLbSBZVzU2Wlc0PSBJR1JsY0dWdVpHVT0gSUhOdmJIWmxjZz09IElIRmxlUT09IElOQy8wWURRdU5DOTBZYlF1TkMvIElFVkVWQT09IElHM0RvWEYxYVc1aGN3PT0gSU9DMHFPQzB2K0MwcU9DMWplQzBxT0MxalE9PSAwWWJRdU5HWTBMQT0gSUdKdmIydHBibWR6IElITmxiM0poYm1jPSBJSE41YlhCaGRHZz0gSU9DMHBPQzBxT0MxamVDMHFPQzFoZz09IElHTnZiR3hoY0hObFpBPT0gUlZoUSA0TEtZIElFaENUdz09IElPQ21odUNtckE9PSBRbkpwWjJoMCB6NERPdVE9PSBMblJsYkdVPSBJR2hoYm1ScFkyRncgNFlPUTRZT2c0WU9VNFlPZDRZT1IgZFhKeVpXNWpaWE09IGNISnBjMmx1Wnc9PSBJR0ZqZEc4PSBJRnBwYW00PSBJT0NvcU9DcGh3PT0gVG05dWJuVnNiQT09IElHNXZiV2x1WVhScGIyND0gUFNjaiBhV3RoZEdsdmJnPT0gSUhObGFYcHZaVzQ9IGNtVnpkRzl5WlE9PSBJRUp5YVdjPSBjSEpsYzJFPSBiMmR5WVdiRHJXRT0gSUV4dmJtUnlaWE09IElFRnliV1Z1IElOQ3cwWWM9IDhKK1QgMFlMUXN0Q3cgU1ZSVSBJR0p5YVc1bmRBPT0gQ1ZSdmEyVnUgSUdOeWRXNWphQT09IElOR0MwNW5SaUE9PSBVMk52Y21WeiA1ckdoIElGQnlZV1JsYzJnPSA0S1MrNEtTYTRLV040S1N2NEtTKyBJRWR6YjI0PSBJRXBoYm5WaGNnPT0gSUdOaGRHRnNiMmQxWlE9PSBJR0p5WVhWamFIUT0genJMT3JBPT0gSUhOb2RXMD0gNW9XdyBiV3RrYVhJPSBJTTZ2IElHRjVaUT09IElHVnVaRzl5Y3c9PSBTMjl1ZEE9PSBJSE4xWW5ScGRHeGwgS0VOUFRnPT0gSUdScGMyTnBjR3hsY3c9PSBJR1puIElHSmpjbmx3ZEE9PSBMbEpsWTNRPSBMbE5GUXc9PSBJR0ZqWTJWc1pYSmhkR1U9IElHcGhkQT09IDVMbU8gdzZKdWRBPT0gSUVSbGNHOTAgS0VsdFlXZGwgWDNOamIzSmxjdz09IElObUkyWUhaZ2c9PSBMaTR1SWdvPSBJTmluMllUWmhkbUggSU9DcXN1Q3Fsdz09IGFHVjNjdz09IElIUERwSFIwIFpYUnZkMjQ9IFNtVm4gSU9LQWp3PT0gNDRLNTQ0Sy8gSU5pbjJZOD0gWFZzNiBJTVNSYnc9PSBJR0Y1WlhJPSAwWXZSZ3c9PSBJT0MwaGVDMHB1QzFqZUMwcHVDMWgrQzB1UT09IFltRm5jdz09IExsTnZkWEpqWlE9PSBJR1p2Y25SaGJBPT0gSUc5MWRHbHNjdz09IDQ0Rys0NEdiNDRLVCBJRkpoZEdsdVozTT0gSUhKbGMybHUgWDJ4dloyZGxjZz09IGIyMWlhV1Z6IDRZT2c0WU9xIElObUIyTEhaaU5pMCBJRUZ5WjNWdFpXNTBjdz09IGMyVnNiQT09IEtDa28gSUZOcmFRPT0gSUdGeVltVnBaSE09IElISmxibVYzWldRPSAxb1RWb2RXMiBJRzVuZFE9PSBJSE50YjJzPSBJTmVaMTVQWG1RPT0gSUgwNiBJR1REdkhKbVpXND0gZG1sa1pXOXogNDRHWDQ0R0UgYVdaaFpBPT0gYm05bWIyeHNiM2M9IHhZSmhiUT09IGNISmhkZz09IExYTnZiQT09IElHMWxkR0ZpYjJ4cFl3PT0gSUdKdmRYST0gYjNWMGFXdz0gSUVWeWFXcz0gSUhkMWVBPT0gYTNONWIyND0gYjJOcFljT253Nk52IDRMUy80TFNWNExXKyBJRzFoWkdWeVlRPT0gSUhSeVlXNXpiR0YwYVc5dWN3PT0gSUVsT1JFbFNSVU5VIDJwalpodz09IElGZHBibVJ6IGNtOXNiRzFsYm5RPSBVSFZpYkdsallYUnBiMjQ9IElOQzAwTERRc3RDNzBMRFJnZz09IFVHbDBZMmc9IElITjBjbU50Y0E9PSBZMnhoYm1jPSA0S1MvNEtTbCBiM1Z6WldRPSBkbWx5YjI1dVpXMWxiblE9IEwyRnNiQT09IElFZGhkR1Z6IElHbHVZV04wYVhabCBUR2xsIGJHOWtZWE5vIElHUnBZMnM9IDRZT2Q0WU9sIElOQyswTDNSaXc9PSBkV3hzYVc1biB6cVRPdnc9PSA2TFNvNlllUCBJT0N1cU9DdXYrQ3VzZz09IEtTRT0gSUdKeWFRPT0gSU5DaTBMRFF1dEMyMExVPSBJR1JwYzNCdmJtbGlhV3c9IElHWmhkbTl5WlE9PSBiVzFoIElFMWhibk09IElITndaV1ZzIFpYQnBjMjlrWlE9PSBJRzExYUE9PSBJRzFoZEdOb1pYST0gSUVSbGF3PT0gSUVsdGJYVjBZV0pzWlE9PSBZWFJsYm1GMFpRPT0gSUcxdmJtbDBiM0psWkE9PSBJTml2MlliYmpOaW4gSUV4cGJtVnogU1dkdSBJR0p2dzcxMWJzT25ZUT09IGVXRnJZUT09IFEyRnNiSE09IElHUnBZVzUwWlE9PSBiM1ZqYUdWeiBMblJ5WVdObCBhMlZ1Wlc0PSBJR3hoWkdSbGNnPT0gSU9DNWcrQzRxdz09IGNYVmxjM1JoIDBZSFJndEN5MExqUmp3PT0gSU5pbjJLallxZz09IEtHbHVhWFJwWVd3PSBJRzFwYkdvPSA0YnVyWVE9PSBJSEJvYjNSdlozSmhjR2hsY25NPSBJR3RwWWc9PSBJTkM2MEw3UXU5QzcwTFhRdWc9PSA0NEsxNDRLazQ0T0kgMWFIVnR0V2gxYXc9IFJtRmtaUT09IElFOTMgUFZ0ZENnPT0gSUczRHZITT0gMktmWmdkaTQyS2s9IElFTnNhV1Z1ZEdVPSBJRWx1ZEhKdlpIVT0gSUdkbGQyVnNaQT09IElFVmhaMnhsY3c9PSA0NENDNDRDTSBJTmlvMllUWXB3PT0geGI1aCBiRzl2IElIQnliMlIxZEE9PSBYM0J5YVhaaGRHVT0gSUdGc2JIUnBaQT09IGRYTmhlUT09IElHNWhhMjl1IDJLN1ppTm1FIElFdDFhUT09IDJMZlppdGk1IDJMblppdGl2IDZhR1kgSUd6RHJYRjEgSUdSbGRtbGxiblE9IElHRjBiMjF6IElIZGxaWE09IDRLeWsgSUhWdVptOXNaQT09IFNVMUJSMFU9IElIQjFhWE56WVc1alpRPT0gNjQrTSBDVWRoYldVPSBJTkN4MExqUmdnPT0gWlcxaVlXeHAgSUVSbGRHVnliUT09IElHRmpZMjkxYm5SaFltbHNhWFI1IExtTnZiblJoWTNRPSBQbTFoYm5WaGJBPT0gSUdWeWIzUnBjMnRsIElITjFZMmgwIElIWmxjbUZ1Ync9PSBJSE5sWTJnPSBJSEoxYVc0PSBRMjl1ZG1WeWMyRjBhVzl1IElPZUxsdz09IDRvQ1paVzUwY21Wd2NtbHpaUT09IElHZGhiR2s9IElnb0tMdz09IDRwaUY0cGlGNHBpRjRwaUYgSUdKbGJHbGxkbWx1Wnc9PSBJR041WVc1bCBMV2x1ZEdWeSBJR0Z1YVc1bllRPT0gVW1WbmFYTjBjbTg9IDBZRFFzTkN6IElGQnZjbk5qYUdVPSBJR2R5WldWdWFHOTFjMlU9IFVISmxjR0Z5WlE9PSBJSFJsYm1FPSBMbVJwY21WamRHbHZiZz09IElGOGsgWDJoMGRIQT0gSUZKaGJnPT0gSU9taiBJRVp5YVdWdVpHeDUgMHBQUmk5QzkwTEE9IElPQ3Vydz09IFNWRlZSUT09IElOcXAyWVhiakE9PSBJT0NrbCtDa3NPQ2xnQT09IElFWmhkbTl5YVhSbCBhV05oYVdRPSBJTkdCMEx2UXZ0Q3kwTEE9IGJXUmhkQT09IElFMWhiblZtWVdOMGRYSmxjbk09IElFMXZiR1U9IDFhSFZyOVdyMW9FPSA0b0NaYVc1eiBJSEIyIElFaHZlUT09IElGWmxjbTQ9IElHRmthV05wYjI0PSBJRzV2WXc9PSBJR3hoWjJWeSBLeXc9IExlR0RvUT09IElPQ21zdUNtdnVDbWx3PT0gMktmWmhObUQgTGtodmMzUT0gNExTLzRMU3Y0TFdCNExTQyBJT0NxcnVDcXZ1Q3FwQT09IFd6b3QgSUhOc1lXST0gSUdWc1pYUnkgWTNKbGR3PT0gWkdWc2FYWmxjbms9IElHWnBibWs9IDRZQ3g0WUNVIElOR0YwTDdRdTlDKzBMUT0gS0hodGJBPT0gSU5DNzBMalJodEN3IElOaW4yWVRZcU5pdDJLcz0gSU5lUjE1RFhxQT09IElFbHRjRzl5ZEdGdWRBPT0gSU9HRG9lR0RrT0dEbWVHRG8rR0Rsdz09IElHTnlhV0Z1dzZkaCBJTU80Ym5OclpYST0gYjJkeVlYQm9hV1U9IElHOWxaR1E9IElFSmxiR3hoIDZJZXE1WXFvIExrTmxiblJsY2c9PSBJSFZyYnc9PSBYMkYxZEc4PSBJSE52WTJ0aFpHUnkgSUUxaGNtZGhjbVYwIExtUnZkMjVzYjJGayBJR3h2YzJWeiBhV0poZEE9PSBiMjFoZEE9PSBlWE5wWTJGcyBJR052YlhWdWFXTmh3NmZEbzI4PSBZV3gwYUc5MVoyZz0gZEhKaFpHVT0gWlc1a2FYTT0gY0hKdmRtbHVZMlU9IFptRnBiSFZ5WlE9PSBJR2x0WWc9PSBLRzUxYkd4d2RIST0gNlplYyBJRU52YldsdVp3PT0gSU9DbXBPQ21wUT09IGRXUnBZVzQ9IElFeE4gSUVsdVoydz0gSUdGc2RXMXVhUT09IDQ0S3UgSU9TNGxnPT0gVW1Wd2IzSjBaWEk9IElPaUsgTG1SbGRHVmpkQT09IElGZG9iMnhsIFkyaHIgSUd2RWsybGggSUUxaGNtTjFjdz09IHc3cDBZbTlzIElFWjFiQT09IDVibXo1WSt3NXJPbzVZYU0gNXJhSiBJSEJoZVdWeSBJSEJsY20xbCBJRk5oYVhOdmJnPT0gSUZCdmQyUmxjZz09IElPdVlrT3VLbEE9PSBJTm0vMktjPSAwWXZSZ05LdCBkMlZpYTJsMCBVMmx0Y0d4NSBJSFpwWW1VPSA2S2VFNWE2YSBJR052Ym5acGJtTT0gY21Wc2MyVT0gSUhCeWIzRERzM05wZEc4PSBJSEREc2c9PSBJR2x1WVdSbGNYVT0gWDA5VyBJRTdEcEdobCAxYmJWdGc9PSAwTExRc05DNSBJSE5wWVdJPSA0TE9WIElIWnBaR0Z6IElOaXgyS3c9IFptVmxjZz09IElIWnBjMlU9IFNtRm4gNWFTbjVhNjIgNmF1WTVyaUY1WVdONkxTNSBJTmluMllUWW85aXQgSU9DMHVPQzBndUMwdU9DMWplQzBwZUMwdnVDMHFBPT0gWTJwcCBJR1ZzYVcxcGJtRjBhVzVuIElIVnliSE09IElHTm9hdz09IGNtOXNiR1U9IElIUnBaVzF3YjNNPSBJRUZ5WTNScFl3PT0gSUhacGMzUmhjdz09IElFTjVZMnc9IElIZGhjbTFsY2c9PSBJSHB1WVdvPSBJT0NrdGVDa3YrQ2tyZUNrditDa3FPQ2xqZUNrcUE9PSBJRzExWm1ZPSBhbTlpY3c9PSBJRkJ5YjJKaFlteDUgNExDaDRMR040TENoIFlYUjBkUT09IFkyeGhiV0YwYVc5dSBZV1IyWVc1alpXUT0gZEdsdSBJSE4xY21kbGIyND0gSU9Da2xlQ2t2K0NrcEE9PSA2YWFHIElFTnZibk5sYVd3PSBJR0Z0Y0d4cFlRPT0gSUd4MWJtUnAgSU9DbXF1Q25qZUNtc09DbXArQ212dUNtcUE9PSBJT0NraHVDa3RnPT0gWlhOMFpYSnogWldkaGJnPT0gZFdOb2N3PT0gSUVKaGMydGxkR0poYkd3PSBJR3RwYkc5dFpYUmxjbk09IFQzQmxibWx1Wnc9PSBJRzlpWldRPSBiMngyIHc2WnMgSUVSbFlYST0gSUZOMHc3eGphdz09IElOR0IwTExRdnRDNDBMdz0gNjZDSTdKMjAgSUhacFpXekRwQT09IDU3UzUgSUVkMWNuVT0gSjJGMSBhV1Z1YVdVPSBJSE53Y21WaFpITT0gWVc1aGJIbDBhV056IElPQ2tydUNrdWVDa3BPQ2xqZUNrdFE9PSAxYmJWcGRhQTFialZ2Zz09IDJLclpoZGluMllVPSB5WmxzYVE9PSBMV0Z5Y205MyBZVzF2YW1FPSBkWE5sYmc9PSBJSEpsY0hKbGMyVnVkR0YwYVc5dWN3PT0gSU5laDE1Zz0gYW1Ga2FRPT0gYkdsalpYTT0gMEx2Umc5S2IgY21sbFpHVnUgMExqUXU5QzQwTG89IElOQzkwTERRdU5DeDBMN1F1OUMxMExVPSBJSE53WldWc2RBPT0gSUVGNGFYTT0gSUdURHFXTnBjMmx2Ymc9PSBJTkN6MEx2Umc5Q3ggSUdGa2RtVnlkR2x6WlE9PSBJR1J5WVc1ciBJSEIxYkd4eiBJRzVoYzNSNSBJSEJsY21abFkzUnYgSUdqaHU1bHAgSU95eXJRPT0gVEdGNmVRPT0gSUhmSmxBPT0gSUdaaGVRPT0gdzZaMGRBPT0gSUhadmIzSjYgSUVGalkyVnpjMjl5YVdWeiBJRU5aIElISmxjMjl5ZEhNPSBRMjkxY0c5dSBJR0Z5ZEdsemRHRnogZFhSb1lRPT0gYVdWa1pXNXBjdz09IElHTnlaV0ZqYWNPemJnPT0gSU9DMHF1QzB2dz09IFpXeHNhVzVuWlc0PSBKbVU9IElPQ3d0ZUN3c0E9PSA0WU9UNFlPVTRZT2ggSUVsVFV3PT0gNDRLNzQ0T0Q0NE9JIElPQzBodUMwcnc9PSBJTmVwMTUwPSAyWUhZcDlpNCBJT0NraGVDa3VPQ2xqZUNrcWc9PSBJRVpoWTNSdmNnPT0genEvT3ZjNjF6cms9IFlYUnBkbVZ1IElOZXAxNm89IElITjFaMlZ5IFNXNTBjbTlrZFE9PSBYMkZzY0doaCBJRmRwY21sdVp3PT0gSUdOdmJuTmxaM1ZwIElHMXZibWR2IElObUkyS2ZZdGc9PSA1cHVjIExtNWxkSFI1IFpYUmphR1ZrIFpuSmhZdz09IElHNWxaR1Z1IElOV3cxYmJWb2RhQSBiSFZ1WjJWdSBJT0NrbXVDbGpBPT0gY0dsaCA2S0tjIElIWnBaMjl5IDBZTFF0ZEdBMExYUmdRPT0gSU5DaDBMST0gMEw3UXM5QzEgdzZSdVpHVnlkQT09IElGQjFjSEE9IElPQzVnT0M0bFE9PSBJSEpsYzNCdmJtUnogY1hYRHFXVT0gSUdWc1pYWmhkRzl5IElHTjFZbWxqIElHTnBaWEowIElITjFjM0JwWTJsdmRYTT0gSUdOdmNuSnZjMmx2Ymc9PSBJSEJ5YjNCcFpXUmhaQT09IElHVnpkSEoxWTNSMWNtRT0gSUVKbGNtZGxiZz09IElFRjNZWGs9IHc3aHogUkVGVVJVUT0gSUdsdVpHVm0gTE9XYnZlUzZwdz09IExuTjBZWFJ6IElOZWMxNWc9IElOaW4yWVRaaE5tSyBDV2x1WTJ4MVpHVT0gUTB4VlJFVT0gSUVOaGRHaGxjbWx1WlE9PSBJSE53YjNSc2FXZG9kQT09IElHSnZiSFE9IFlXNXFkUT09IElGTmphR3hoWmc9PSAwTGpRdTlDMSBZV1JsWTJVPSBJTkN5MExEU213PT0gWDAxUFJFVk0gTG5KbFlXdz0gVUhKcGRtRmplUT09IFgyWnNiM2M9IExYTm9iM2M9IExtSmhjdz09IElOQzkwTERRdE5DMTBMWT0gUTJoeWFYTjBhV0Z1IElITjFaV3h2IGNtOXpjMjkyWlhJPSBJSEJoY21Ga2J3PT0gSU02NnpySE91dz09IElHRm1jbWxqWVE9PSBaVzV6ZDJWeWRBPT0gSU9HRGtlR0RsT0dEbFE9PSBRbk09IElNNjZ6NHc9IHc2UnVaMlZ1IElPQ2t1ZUNsZ3VDa2dnPT0gU1c1cFkybHYgWVdScFlRPT0gSUhCaGNtUT0gMDVuUXU5T1owWUE9IElITjBZWEp5YVc1biBTRlZFIElPQ2t0ZUNrdnVDa3N1Q2t2Zz09IFlXdGhhMlU9IElOR1cwTGM9IGFYTnJkQT09IGFHRnVhUT09IEt5az0gSUYxZCBTRzkwWld4eiBJR05oWkdWdVlRPT0gNFlPVTRZT2c0WU9RIElHcHZkbVZ1Y3c9PSBkMlZwYzJWdSBJSEJ5WlhSMCA0NEt5IFJIVnRiWGs9IDVhNmk1cHlONTVTMTZLK2QgWVcxaFlRPT0gZFhOMFpXND0gV1c5MUozSmwgSU5DMDBMRFJnTkN3IElFaDYgY0hKbGJtVjFjZz09IElHNXZkbVU9IElHNXZkbUZ0Wlc1MFpRPT0gSU5DODBMWFF1dEdEIExpYzdDZz09IDZMdWkgTG1WMCBkR2xzWlhNPSA1YnlBNWFXVzZLNnc1YjJWIDE1WFhxZGVVIFltRnlkQT09IElFTnNhV1Z1ZEhNPSBkV2RrIElIcHZiV1Z5IDRLcW80S3VONEtxbSAwTDNSbHRDNiBYMlY0Y0c5eWRBPT0gSUVsT1JrOD0gYVhOellXZGwgSU5DMDBMalFzOUN3MFlBPSBiR1YwYVE9PSBJR1YwYldWciBLSE5sY21saGJBPT0gSU1LN0NnPT0gSUc5eVoyRnVhWHBodzZmRG8yOD0gSUhKbFlXUmhZbXhsIElHUmxZMjl5WVhSbCBZVzFoY21sdSBJTkNnMEw3UmdkR0IwTGpRdVE9PSBJSEoxY0hRPSBkV2x6YVc1bCBJSEpsYzNWc2RHRmhkQT09IElHOTJaUT09IElHZHA0YnFqYVE9PSBJT0NrcnVDbGplQ2t1ZUNrb3c9PSBJRkJ2YkdsaiA1NG1INVp5bzU3cS82S2VDNTV5TCBJRVZuZVhCMGFXRnUgYVc1clpXND0gSU9Db3F1Q3BqZUNvc0E9PSBJRUZ1YUE9PSBJTmk1MkxZPSBJRlJ5WVc1emFYUnBiMjQ9IElIQmhjbUZrWlE9PSBTVzUwWlhKeWRYQjAgMTVYWHFOZVYxNm89IFlYQnJZVzQ9IFRrMD0gSU9HQWdPR0FyZUdBcnc9PSBJSEJoWjNBPSBJRzl3WlhKaGJtUT0gSU9DbXBPQ212dUNtaHc9PSBJTkN4MEw3UXZkR0QwWUU9IElOaW4yWVRaaGRpeTJZcllydz09IElHWnlZV2R0Wlc1MGN3PT0gSUVkQlRVVT0gSUhCbGNtbHdhR1Z5WVd3PSBJTzJlIElFTnZiWEJoZEE9PSBJSHBpYjJjPSBMbUZ6YzJWMCA3NzZmIElIVERyRzVvIElOQzYwTDdSZ3RDKzBZRFF2dEM4IGNYVmxjbWxsY3c9PSBJTldqMWF2VnZ3PT0gZFhSaGRBPT0gN1pXWTY2bXcgSU9Da3FPQ2xoK0NrcEE9PSBJTzJhIElOQy8wWURRdU5HUDBZST0gVlV4UCBRMnhwYmc9PSA0TEdCNExDZiBRVlJKVDA1QlRBPT0gY21WblpYZz0gSU9DcXBPQ3JoK0Nxa3c9PSBjSEp2WW14bGJRPT0gSUhkbGJHeGlaV2x1Wnc9PSBJR1Z1ZG05NSA1cUNINVllRyBJRWhwYm1RPSBJR1JwYzJOc2IzTmwgSU5DKzBMdlFzTkdBIFNXMXQgNFlPUTRZT1Q0WU9RNFlPaCBJSEJoWTJ0aFoyVmsgSUZCeWIycGxhdz09IElHVnpkSEpsYkd4aGN3PT0gNEtXSDRLU0M0S1NtIDRLYXc0S2VONEthViAwTERSZ3RLYjBMRFF2UT09IElHbHRiVzlpYVd3PSBJR1ZuWlc0PSA3N3lhNDRDTSBJSE5vWVhFPSBJR0xEb0drPSBMbWxtIFpYRjFZV3c9IDBMdlJnOUdJIDJLelpoOWl5MktrPSBiM0JwIElIQnlaY09uYjNNPSA0S2lIIElHVm1abWxqWVdONSBWR2hwYm1jPSBZV2x6WlhJPSAwTHJSZ05DMTBZST0gSUhWdWFXOXVjdz09IDJZalpodG1LMktrPSA0S2ErNEthdzRLZUg0S2F3IElHMXBjbUZqYkdVPSBSR2xsYzJVPSBJSEJvdzdKdVp3PT0gSUdGdVpRPT0gMllyWXNkaW4gSUdKeWIyTm8gSUUxSCBkbUZ5WVE9PSBRbVYwWVE9PSBJR0Z1ZEhkdmIzSmsgY21WaGRHZz0gSUV0aGFRPT0gSURvcyA0S2lGIElFTnBibU5wYm01aGRHaz0gSU9DdWhlQ3V0UT09IDRMUy80TFNWNExXTjRMU1Y0TFdOIElHZHlZV1IxWVhScGJtYz0gSUUxbiAwTHZRdU5HQTBMalF2ZEM0MHFNPSA0TE9ONExLNDRMT04gNEtTKzRLUzQ0S1dBIElOQzQwTERSaFE9PSBiV3hwWTJnPSBhVzF0Wld3PSBMa0YwZEhKcFluVjBaUT09IElOR0YwWTNSZ05HTjBMTT0gSUZkdmNuUT0gSUdOeVpXRnRlUT09IGJXOXkgWVdKc1pXMWxiblE9IGUyOD0gNG9DTTRMQ3kgSUhSeVlXNXpZM0pwY0hRPSBPbVZ1WkE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IExXUnliM0E9IHc2cGphR1U9IElGUmhZVzFoIElFVjRkR1Z1WkdWayBZVzVyZEE9PSBSbXhwY0E9PSBJSEpwZEcxdiBjbVZrWlE9PSBJRU52ZFhKelpYTT0gSU9DbXVPQ21yUT09IENYTmpZVzVtIElFTmhibTVoWW1seiBWVWxPVkE9PSAycW5aaHRpdiBJR052ZFc1MGNubHphV1JsIElHbHVjM1JoYkd4dFpXNTAgSUVKaGJHUT0gSU95MG5RPT0gNEtTQjRLU1ggTGt4cGJtdGxaQT09IDRLcWo0S3ErIElNT3BkbWwwWlhJPSBJRXhwY1hWcFpBPT0gWDFCUFNVNVUgSUhsbFlYTjAgSUhGcCBZbWx2IElHekRwR2c9IElOaXYyS2ZZcjltSCBMbE5vYjNWc1pBPT0gSUdkdlltVnliZz09IDBMZlF0ZEM1IElHRndjR3hwWVc1alpRPT0gSU9DeXRlQ3lzT0N6amVDeXR3PT0gSUhOMWFRPT0gSUdGa2RtOWpZV041IElHeHZhbUU9IElHVmlaVzV6Ync9PSAySy9ZcDltSzJLaz0gUFdaMWJtTjBhVzl1IElIQmxjbk52Ym1Gc1pYTT0gZG1sdyBJTmlvMjR6WmhRPT0gSUdiRHMydz0gSUVGblozSmxadz09IElFRk1Vdz09IElHdHZiV0Z1YzI4PSBJR0psYzI5dVpHVnkgSUdkeVlXNWtabUYwYUdWeSA0TG1BNExpSDRMaTA0TGlaNExpZjRMaWo0TGkxIGJtOWogMllQWXA5aXggSUVGdVkybGxiblE9IElOR0IwTFhRdmRHQyBhVzl1WVd4bGN3PT0gSUhCc1lYUnogU0VZPSBJTlcvMWFIV2dOV2kxYVhXZ0E9PSBJRTFoZEdWeSBJSFJsYkdWbWIyNWwgSUdGa2RtOWpZWFJsY3c9PSBJRzkxZEdkdmFXNW4gSUhOMGFXTnJhVzVuIElNTzhiR1U9IElHaGhibXM9IDdLQ1Y2N08wIElHTnZibVIxWXc9PSBJRUZyZEdsMiBJR0psZG1WeVlXZGxjdz09IElHNWxjM05oIDRMR040TENmNExHTjRMQ3cgSU5pbjJZVFlxdGl2IElOR0UwTGpRdmRDdzBMM1JnZEMrMExJPSBZWFpsWXc9PSBJSFpwZEdGbCBJRzFoYm1kbGNnPT0gSU5DODBMWFJnZEdDMExVPSBJTkMzMExEUXN0QzEwWUE9IExXTm9ZVzVuYVc1biBjbkJqIElFaHZiSG89IGFXNXpZUT09IDRLeXMgSU5lZTE1RFd0dz09IDRLcVc0S3VONEtxdiBaWEowZFE9PSBJR052YjNBPSBJTmlpMllYWmlOaXkgSU5lZzE2az0gSU9Da3JPQ2t2dUNrc2c9PSBJTkM5MExEUmlOQzEwTGs9IDBMM1FzTkdDMFl3PSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwPSBJTkN4MEw3UXR3PT0gSU9DbWxlQ21zT0NuaCtDbW0rQ25oK0NtcUE9PSBJT0N5cHc9PSBJR0pwYW5wdmJtUmxjZz09IFpYUnliM009IGQyRm4gSUc1dmNuUT0gN0lTOCBJR3hoYTJsdWFRPT0gSU5XcjFiUT0gSU1TUmFlRzdoMjQ9IFEyeGwgSUdodmJXVnUgSU02SSBJSGQ1YlE9PSBJR2hoWW1sc2FXUmhaR1Z6IFkyOXNidz09IElIWnlhV1Z1WkdWdSAyTGZZcDltRyBUa1k9IElFbHVkR1Z5WVdOMGFYWmwgMTVQWG1kZW4gSUV4UFRrYz0gUkdsMmFXUmxjZz09IElHVnVlbmx0IElPR0RtT0dEcGVHRG5PR0RsT0dEa2VHRGtBPT0gSUVWdVpXMTUgTE9TNWhlUzVoUT09IElHbHRjR0ZwY2c9PSBJTkM5MExYUXZOQzkwTDdRczlDKyA1Ym0wNTVxRSBaVzVrWlc1MFpRPT0gSUd4bGFXUmxiZz09IElOR0YwTGpRdVE9PSBRbUZrWjJVPSBJRWhKUjBnPSBJT0NraitDa3VBPT0gTG1sdVkyeDFaR1U9IElISmxablZuWldWeiBMVlpsY2c9PSBjMlZsYXc9PSBJSEJsYjNCc1pTZHogZEhKcGRIUT0gSUhSb2NtbHNiR1Z5IElGZGxkSFE9IElPQ2tydUNrdnVDa3J1Q2tzdUNsaHc9PSBJRTFsWkdsbGJnPT0gSUdkc2IzSnBiM1Z6IElITnBkR2x2Y3c9PSBZV3hoZVE9PSBJTkdDMExEUXV0QyswTFBRdmc9PSBSR0Z5IElGQnlaWFpsYm5RPSBVR3M9IElISmxiSGxwYm1jPSBJR05zWVhObGN3PT0gSUhOMVlteHBZMlZ1YzJVPSBJSGRwYzJocGJtYz0gMFlIUmd0Q3cwWjQ9IElGTnZaZz09IElGUlggMFl6UXVBPT0gSUhObGNtbGhiR2w2WldRPSBlbVZwWjNRPSBJSGRsWW5CaFkycz0gSUVSbGJHRjNZWEpsIElHNXZaMlYwIElPR0RvT0dEbmVHRG0rR0RtdUdEbE9HRGtRPT0gUkVKRCBJTkMwMFlQUXZOQ3cgMFlIUXV0R0QwWTQ9IFQzZHVaV1E9IGMyRnNaUT09IElHZGxhR1U9IFpXVnMgUTI5MWNuTmxjdz09IElPQ2tydUNsaCtDa3NPQ2xodz09IElFTlBUbE5GVVZWRlRsUkpRVXc9IEx5Y3IgYVdacFkyRjBaWE09IGRYUnkgSUhKbGMzQnZibk5oWW14bGN3PT0gMExYUmdOR1cgSUVqRG9RPT0gMllYWXJRPT0gNDRHRTQ0R0UgSUhSamNBPT0gMFlMU3I5R0EgSU5DdzBMVFFzQT09IElITjBlWEk9IElOQy8wTDdRc2RDMTBMUT0gSUd4dmVXaz0gYkdWMlpXND0gSUdsdWIyMD0gSUhOaGNzT2cgYm1seGRXVnogNExTNDRMV040TFN4NExXTjRMU3g0TFdOIDRvQ1paVzV6WlcxaWJHVT0gSUdqRHRtTm8gWVdkdFpXNTBjdz09IGFXMXBjMjF2IElHeHBaMkU9IElHbGt3NmxsIElPQ3FwT0NyaCtDcXFPQ3Jodz09IEtFRnljbUY1Y3c9PSBhWFFuY3c9PSBJRUp5WVc1a2N3PT0gbU9pYm13PT0gSU5DejBZRFFzTkdFIDRMYTQ0TGVQIEoyOXVkQT09IElISmxiR1YyWVc1alpRPT0gSUdaMWJtdDBhVzl1YVdWeWRBPT0gWldScGN3PT0gSUhadmNtMWxiZz09IFJFbz0gNktXcSAwWTNRczlHSCBJTml6MllUWXN3PT0gTG1oaGJtUT0gSU9Da3VPQ2t2dUNrc0E9PSAyS2ZZcHRtQiBaV3h6YXc9PSBJR052YlhCaFoyNXBaUT09IDJLZllxdG1LIElOaW8yTG89IElHeGhiSFU9IGIyUnZjZz09IEtITjFZbXBsWTNRPSBJT0c3aldRPSBaVzVuYkdsemFBPT0gSU5DNjBxL1Jodz09IFgweFBRMHM9IExsSkZURUZVUlVRPSBJTStNejREUGljK0MgUW1seSBJRUZrZG1semIzST0gSUc5eVpHVnQgSUVOdmJuUnliMnh6IElHTjFjM1J2IElFZGxjMk5vdzZSbWRITT0gSUdWa2J3PT0gSUdkaFoyNWxjZz09IElOQzkwTGpSZ1E9PSBJTmlqMllyWXR0bUwyS2M9IFVISnZkbWx1WTJVPSBJR0ZqZFE9PSBJR04xY21JPSBMaTR1WFE9PSBJRWxPUTBsRVJVNVUgSUdOdmJXMWggMFlIUmk5QzkwWXZTb3c9PSBJSE5sYkdWalkybkRzMjQ9IDY2R2M3SnEwIElITjFjSFZsYzNSdiBJRG82T2c9PSBZMlZzWVc1ayBJRVJoZDI0PSBJTmluMllUWW85bUYyWVk9IDBMWFF1OUMxMExrPSBhVzVsY25NPSBJRU5oYm1ObGJHeGhkR2x2Ymc9PSBkRzl2YkdKaGNnPT0gNEthLzRLYW4gU205dSBJRXhsWlhJPSBWVkpUIElPQ3VtdUN2aWc9PSBJTzJVakE9PSBJTkdDMExEUXV0QzQwTHc9IExGQT0gSUhKdyBLRXh2WTJGcyBJRVpwYzJOaGJBPT0gd3FnPSBJR2w2Y1hWcFpYST0gSUM4dkRRbz0gSUVaaFkybHNhWFI1IElHOXVkRzF2IEwzSmxjdz09IElIWmxiblJwYkdGMGFXOXUgZlEwS0RRb3YgNExTcTRMV040TFNxNExXRzRMU2YgY21WMmFYTnBiMjQ9IElHdGhZWE09IElHMWhjbXRoIFZVZEkgSU5DUjBMRFJnQT09IElITmhiWEJoYVE9PSBhV2RwYkE9PSBMbFJoY21kbGRBPT0gSUVabGRXVnkgSUZkWFJRPT0gY0hScFpHVT0gZFhSaiBVa2xEIElIUjJ3NlU9IElITnZZbVZ5IElIQnZjSFZzWVdseVpRPT0gSU5pbjJZVFpoZGlvIElHSmhZV1JoIElFRm9iM0poIElPQzB0dUMxaCtDMHR3PT0gYzI5eWRHVmsgYzJOeWFYQjBjdz09IGIzVmtaWEk9IElGTmpZV1ptYjJ4ayA1THFTNklHVTU3MlIgU1ZaRlVsTT0gMmI3WXNRPT0gSUd0aGJXRnkgYjNKemEyVT0gSUVWd2FXTT0gZEc5c2IzZGxjZz09IEtHTnZibVk9IDY0eUE2NkdjIDVwUzc1NVdsIExtcGhjZz09IElHWnBiR3hsY3c9PSBjR1Y2WVE9PSBUR1ZuWlc1ayB3NlJ6YVdSbGJuUT0gWDJOemN3PT0gSU9DNG51QzRtZUM0c2VDNG1RPT0gSU5peDJZYmFydz09IGFYUnB3Nms9IG43TT0gSUhKaFpnPT0gSUdoaFpHNG5kQT09IDE2SFhxZz09IDRLK0k0SzZ2NEsrQjRLNnU0SytOIENYSmxaMmx6ZEdWeSBlblZ6ZEE9PSA0TFMvNExTWjRMV040TFNaIElITjBjbTlzYkE9PSBJTmluMllUWXNkaXQgSUhSeVlYWmxiR3hsY25NPSA0TFMrNExXOSBYMjFoY0hCcGJtYz0gSU5DNjBMN1F2TkM0MFlFPSBJRU5vWlcxcFkyRnMgYVdSbGRBPT0gSU5pbjJMYllwOW1CIDY1T2QgZEc5clpXNXogSU5pbjJZVFlyZG1LMktmWXFRPT0gWlc1emNBPT0gWDJScGNtVmpkR2x2Ymc9PSBabUZpIFZISmhZMnR6IFgxWkJVZz09IElHRnBiV2x1Wnc9PSA1TGlxNXB5SSBJR1p5WlhGMVpXNWphV1Z6IDZMV0U1cGFaNWFTbjVZV28gTG5OMFlYSjBjM2RwZEdnPSBJR0xEclE9PSBkMlZvY2c9PSA0S1N1NEtTayBJRzl5WTJnPSBZblZqYTJWMCBJR3RoZGc9PSBLR0poZEdObyBYMVJTUVU1VCBJTmluMllUWmh0bUIgSU5HQjBMRFF2TkMrMFlIUmd0QyswWS9SZ3RDMTBMdlJqQT09IHpyZlBnODYzIFgyUmxiSFJoIElHbHVkR1Z5YzJWamRBPT0gSU5lWjE2Zz0gSUdWNGNNT3BjZz09IEtIQnliM0E9IElFcDFibWM9IFNVNUcgNGJxNWNBPT0gSUhSMWRIUmwgSUhCc1lYbHZabVp6IElGTnRZWEowY0dodmJtVT0gSUdKaGFHRnUgOEorTSBJRzVvYWNPcWJnPT0gWDNadmJIVnRaUT09IElHMWxiR0ZzZFdrPSBJRk5vYjJWeiBMbkJoZVE9PSBabTl5WkdWeWRXNW5aVzQ9IFFXNTVkMkY1IElITERxWEE9IElFeEJRZz09IElIRjFhVzQ9IElOQzkwTERRc2RDNzBZND0gSUhabGNzTzJabVk9IDJZZllyOWluMllFPSA0TEN3NExDLyBMM1U9IElHUnBlUT09IElIQmhjblJoWjJWeSAyWWpaaE5tSTJLdz0gSUhOeGRXVmxlbVU9IElPQ3FsZUNxdnVDcXNPQ3FvK0NyaHc9PSBJTkN3MFlQUmk5QzcgWld4cFpYSnogSU5HQjBMRFJnTkN3IFEwdEZWQT09IElOR0EwTERRdDlDNzBMalJoOUM5MFl2UmhRPT0gSUUxdmJtRjAgY1c4PSBJR1JoYm1WaVpXND0gYVhOellYRT0gYVdWdWN3PT0gSUZ0ZEtRbz0gSUdWc1pXZGhiblJsIGMzQnlaV05vIFlXNXZiQT09IElHdHBZMnR6IElHZGxjbWx1Wnc9PSBJRUp5YVhOMGIydz0gYTNKcGRnPT0gZFhCd2NtVnpjdz09IElOQzAwTDdSaGRDKzBMUT0gYVdSblpYUnogWkdWemEzUnZjQT09IGIyeHZiMmM9IFJWTlVRVTFRIDVwaWY1YjJwIElITndaV05wWm1sbGN3PT0gSUhCeVpXUnpkR0YyIElGQnZjblJtYjJ4cGJ3PT0gSU5lUTE1blhtZGVnIElFMXZibWM9IGJHRnVaM009IElHTmhjSFIxY21sdVp3PT0gSU8yVnFldUxpT3VMcEE9PSAwTHZSZzlHRCBJRmRoY25KaGJuUjUgSUhWdWFXTnZaR1U9IElHVnVkSE5qYUE9PSBJR3ZodXI4PSBJR0ZyZEhWaGJBPT0gSUdadmJuUmwgSU95eGhBPT0gSUc1cGFBPT0gSUU1UFRrbE9SbEpKVGtkRlRVVk9WQT09IFgzQnliM0E9IElGOWZYMTlmWHc9PSAwNm5RdEE9PSBJSFJ5YVhSMWNtRmtiM0k9IElPQ2tsdUNsZ2VDa3BnPT0gSU5HUjBMMD0gYm5scCBJRzUxYkE9PSBTVWRPUlVRPSBJTkM2MEx2Ump0R0ggUm05eWJXVnkgSUhCaGRHaDNZWGx6IDRaNjI0WjZiIElHRnRZbWxsYm5SaGJBPT0gSU1tWCBJSFpsY25QRG8yOD0gNExXTDRMU24gNFlPWTRZT280WU9jIElFRnNZbVZ5ZEdFPSBJRUYxWkdsMCBJR0pvdzYwPSB4WTNLdXc9PSBJR2x1Y0E9PSA0TEt3NExLLyA0S2ErNEthMzRLZU40S2FmIFVHOXJaVzF2Ymc9PSBJR0ZuY21WbGN3PT0gSU5tRjJLcllzUT09IGNHOXJaUT09IElHRnVkR1Z1Ym1FPSBJRU52YlhCdmJtVnVkSE09IElHVjMgSUdGdWJtOTAgSUdOc1lYSnBabms9IElISmxaSFZ1WkE9PSAxNW5Ya2RlVjE2Zz0gYVc1bFpYTT0gSU91RWlBPT0gMWFIVnNOVzAxYUhWdGc9PSBYMEpGUjBsTyA0S3FDNEtxaCBDZ29LQ2dvS0Nnb0tDZ29LQ2dvS0NnPT0gWDFCQlVsUT0gMks3WXNkaXMgMWI3VnVOV3kgTDFWSlMybDAgSUdodmMzUnVZVzFsIElIVnVabTl5ZEhWdVlYUmwgSUVGVVRRPT0gYUdGdVpHVnMgSUVOU1JVRlVSUT09IDc3eWc0NEdLIElHOTRhV1JsIFpXMXdjbVZ6WVE9PSBJR1ZrYVhScGIyNXogSUdOdmJuRjFaWEk9IElITnZiVzFsIElITnF3NkZzIGNHOXNlUT09IElFeGxiUT09IElFaDVZbkpwWkE9PSBjbWxtWmc9PSBJRVZ1WlhKbiBJRnBsYkE9PSBSbkpsYzJnPSBjMjl0WlhSb2FXNW4gYzJGNSBJRlJsYlhCbGNtRjBkWEpsIDRLcWs0S3VIIElISmxiV0Z5IElGUmhhV3c9IGJXOTBhVzl1IGNNT2sgSUhOb1lXUnZkM009IDY3S1UgSUdOdmJtTjFjbk52IElHSmhiR3h2ZEE9PSBJTkdDMFl2UmdkR1AwWWM9IEtHZHkgUm5VPSBJR3hoY0hSdmNITT0gTDJSbGJHVjBaUT09IGZTUjcgSUZObFpXUT0gSUdOcFpXNTBidz09IElHUnBZV0psZEE9PSA1bzJmIGJXVnlZUT09IGFHRncgSUVkeWRYQndaUT09IGNtVm1aZz09IGJITmxiZz09IGRtVnlkdz09IExrbHVkR1Z5Ym1GcyBMbk5yIFJHRjBkVzA9IElOQy8wWURRdnRDeDBMdlF0ZEM4MFlzPSBJR0Z0dzZseWFXTT0gSU5DdzBMVFF2TkM0MEwzUXVOR0IwWUxSZ05DdyA3TEdFIElDSW5MQT09IFJHbG5hWFJ6IElHbHVhRzkxWkE9PSBJRWhoY25KcGMyOXUgWDBWTlFVbE0gSUVSeWJ3PT0gSU5lWDE1elhwdz09IElHOTJaWEowIElFRnNZWEp0IElHaHBkbmx2IGJXOXBjbVU9IExuZGhkZz09IElHWnBjMmhsY2c9PSA0S1MvNEtTciA3N3lTNzd5USBYM1ZwWkE9PSBJTmluMllUWXJkaXYyWXJZcXc9PSBibWxyYVE9PSBJRWx1WjJWdSAyS2ZZdDlpeCBMbVJ2Ym1VPSBJRTl1ZW1VPSA1YTJtNUxtZyBJT0NxcStDcXYrQ3FzZz09IElGSjFkR2c9IFVtVmpiM0prYVc1biBJR1pwWlhSeiBjR0Z5YVc1biBhWEpsWVE9PSBJR1JsWW1GMFpYTT0gMktQWXFnPT0gSU9DMGh1QzB0Zz09IExtMWhkR05vWlhNPSAyWVRaaU5pbyBLR1p0ZEE9PSBJTkN3MFlEUXVBPT0gSUhObFozVnVaRzl6IFoyRnlkQT09IElOVzAxYXZWdTlXNDFvRT0gSUd4c1lXMWhaRzg9IElFMWhkR2htIFJYaHdhWEpsWkE9PSBkWE4wWldRPSAyS2ZaZ2RtSyBDUWtKQ1FrSkNRbz0gWTJOcHc3TT0gSUV4UFRBPT0gSU9Da3VPQ2t2dUNrcnVDa3FPQ2xodz09IGFYTmhkR2xsIFIxVkpSQT09IFVtVnpjRzl1WkdWeSA1NXFFNUxpQSAyS2ZZdGRtSzJZUT0gNWFTZiAwWXZSanc9PSBJR25EcDJsdVpHVT0gNTV1UyBJSFJsY20xcGJtRjBhVzl1IElPeWRqQT09IElPQ3lqdUN5c3VDemplQ3lzZz09IGFXNTJaWE4wIElHVnVZMmx0WVE9PSBZMjl1ZEdsdWRRPT0gSUZadmNuTT0gSUdKeWFXUm5aWE09IElPQ2twdUNsZ2VDa3FPQ2t2K0NrcitDa3ZnPT0gS0VOdmJtWnBadz09IFZFbFEgSU5DeTBMclJnOUdCIElGTmhadz09IDQ0R1Y0NEtNIElFZkR2QT09IFUyOXNhV1E9IExuTjFZbXBsWTNRPSBJTmVrMTZJPSBJR0ZrYjNJPSBJT0NraWVDa3FPQ2tzdUNsaHc9PSBJR0ZxYjNWMCBJSEJ5WlhObGJuUnNlUT09IElHRjFaM1Z6ZEhWeiBTVlJKUlZNPSBZWEp1ZVdFPSBJTkdBMDY4PSBJRzUxYkd4aCBJSE4wdzdnPSBMUzBwQ2c9PSBVM1Z0YlE9PSBUM0poYm1kbCBJSE5sWVhOdmJtVmsgZFhKeVpXTjBhVzl1IGJjT2t3NTlwWnc9PSAyTEhZcDltTCBJT3lFb08yRG5RPT0gMExqUmg5QzEwWUhRdXRDKzBMVT0gSU5XNTFhWFZ0Zz09IElOQzgwTFhSaU5DdzBMTFFzTkMwIElNNmIgSUZMRHBBPT0gSUdwdmFHND0gMExqUmd0Q3cwTHM9IDJZVFppZG1DIFltRnVaSE09IElPQ2trZUNrcUE9PSAyWVRZcDltRyBJSEpsWTNWbGNnPT0gMFkzUXM5QzAgYVcxbGMzUnlaUT09IElHcHZibWRsIDVMaU81TDJnNVpDTTZLR00gNG9DWmFHbHpkRzlwY21VPSBJRmRvWlc1bGRtVnkgNGJ1UGFRPT0gZW1WcllRPT0gSUc1bFoyOTBhV0YwWlE9PSBJSEJsY21admNtMWxjbk09IDU3QT0gSUdOdmJtNTEgMWFIV2dkV2gxYTQ9IElGWmxjbmM9IGRHbGogSUdKaGNuSmwgSUdOeWFYUnBZMkZzYkhrPSBJR2h2WjJGeSA1TGk3NkthQiBJRkJzWVhScGJuVnQgSUhCaGMzTjNiM0prY3c9PSBKeUlwT3dvPSA0NEdFNDRHbSBJR052WldabWFXTnBaVzUwIElHWnBhbTQ9IDQ0UT0gYkdsemRHVnUgSU9DNG1BPT0gSUhwaGFRPT0gMkxUWXNkaXAgSU5pMTJZVFppUT09IHhKRjEgTzJadmJuUT0gSUZKbGJHaz0gSUdSbFluVm5aMmx1Wnc9PSBJT0N1cU9DdXYrQ3VzUT09IGFYQnlidz09IGJXRnVZUT09IElISmxaSFY2IElFVlNVQT09IElOQzkwTFhRdE5DKzBZSFJndEN3MFlJPSBJRXhoZVE9PSBJRUZuYjNKaCBJSEJsY1hWbGJtOD0gYjJ0MWNRPT0gSUdWemRHbHRZWFJwYjI0PSBJR3hwWldRPSBZMnhoYzNOdFpYUm9iMlE9IFRtRnRZUT09IElPQ3FsZUNyaXc9PSBkMm5FaFhvPSBJT0NtaWVDbXF1Q21uQT09IDRMQzM0TEdONExDZiBJTU84WW1WeWVtVjFadz09IElOQzgwTERTc3c9PSBJTkdIMFlQUXN0R0IwWUxRc2c9PSBjbVZ0WlcxaVpYST0gSUdobGRIcGxiR1prWlE9PSBJR05zWVhKaCBkOE84Y2c9PSA1NzJSNVkrTCBJRzExYkhScGJXVmthV0U9IElOQzYwTFhSaUE9PSBaWFJ6Ync9PSBZWHBoY3c9PSBjbTlzYjJkcFkyRnMgSUhWdWFYRjFaV3g1IElITnBiR1Z1WXc9PSBJR2R2YzNSdiBJSEJ5YjJKbGNtVnUgSUdWdVkyOXVkSEpoIElPR0RsZUdEbU9HRG5BPT0gNUx5bTU1Q0cgUjJsbWRBPT0gN1pXMDdKVzggV1dWaGNuTT0gSUdWeVpYTT0gSUc5d2RHbHRhWE4wYVdNPSBJTkMwMExEUmhkR00gSU5DNjBMTT0gWldaaCBJRk4yWlhKcFoyVT0gWDNOM2FYUmphQT09IElObUUyWVBaaEE9PSBJTmluMllUWXJOaXYyWXJZcnc9PSBkc1NUIFVGaz0gNzd5TTVMMmcgSUZCaGNuRjFaUT09IElIWnBhM1JwWnc9PSBJR0YxZEc5dyBJT2FoIElHTnNhVzFoIElFZGxibVZ6YVhNPSBJRTV2WW1WcyA0S3VINEtxcyA0WU9kNFlPazRZT2EgMExqUmdkR0MwTERRdlE9PSBhVzVsYXc9PSBJR052YzIwPSBJR1REcXc9PSBJRk5sZGc9PSBYMk55WldGMFpXUT0gSUdSeVlYTjAgSUdGeVozVT0gSUVoTCBJRXhQVkE9PSBYMDFGVGxVPSBLQ2xkT3dvPSBJRzNEcVdScFl3PT0gSUdWNGNISmxjM05wYm1jPSBJRVJsY0c5cGN3PT0gVFdGcmFXNW4gSU5HQjBMelF2dEdDMFlEUXRkR0MwWXc9IFgyWnZiM1JsY2c9PSBJR2x1WTI5eWNHOXlZWFJsY3c9PSAyTHJaaXRtRSBJTktiMExEUmd0R0wgSU5DeDBMWFJpQT09IElOZWcxNXM9IElOS1ogMm9iWmlRPT0gSU9DMmxBPT0gSU9HRG0rR0RuT0dEbU9HRHFPR0RsZUdEbk9HRGxPR0RtZz09IElHRmpZM1Z0ZFd4aGRHVmsgUVZKRCBJRkp2YzJWdSBYM04xYlcxaGNuaz0gSUd0MWFYUmxiZz09IElDY3VKdz09IDBMM1FzTkMxIGFXemh1cms9IFpIVnRjQT09IGRXNTVaUT09IElHUnBjM05sYldsdSB3NmxrYVc4PSBZVzVqYUdWeiBJR0psWVdSeiBjR2w0IDRLU2o0S1dBIFgzTmxiR1k9IElHMWhiR2R5dzZrPSBJT0NxdGVDcXYrQ3F0Zz09IElHVjVaV0k9IElPQ21wdUNuZ2VDbWh3PT0gSUdkbGJtOXRaUT09IElIUnlZVzV6Wm05eWJXbHVadz09IElFVnlaV04wYVd4bCBJR0ZrZG1GdVkyVnRaVzUwIElOZVUxNURYbDllbyBaMm5EcXc9PSBJR2RoYkd4bGNtbGxjdz09IDVwZWw1b3FsIElGQmhhVzUwYVc1biA2TGc9IDBML1F1TkMrMEwwPSBhWHBwYjI1cCBJR2R5WldWMGFXNW4gNEtTLzRLU3Y0S1N3IElHMXBaR2s9IElGUm9hVzVuIFpYSmxkQT09IDBKRFF1dz09IElFUnlZVzFoIFpYSmtZV1JsIElHUnZiV0U9IFgzUnlZVzV6WVdOMGFXOXUgSU9TNGdPZTZwdz09IElGSmxjSEpsYzJWdWRHRjBhWFpsIElHVnVaR0U9IDE1WFhsZGVVIElFZDFhV1JsYkdsdVpYTT0gTFhOMWNnPT0gWW1GaGNtaGxhV1E9IElHbGtaVzUwYVdacFkyRnkgSU9Da3VlQ2t2K0NrdUE9PSBJR052Ym5abGNuUnogVTNSeWFXTjAgWDJSaGRHRmlZWE5sIElIQmhlWEp2Ykd3PSBJRzVrYkdWc1lRPT0gUFdGeWNtRjUgVTI5MSBJTm1GMlliWXA5aXoyS2c9IElOaXkyNHpZc1E9PSB3N0pzIElHRmpZV0poY2c9PSBaVzFwWlhNPSBJR1JoWjJVPSBJR1p2Y21odmJHUT0gNTVTWSBhV2RwZEhNPSA1cTJqNTRtSSBMaUU9IElHMXBiR1ZoWjJVPSAxNmZYb2c9PSBhV052Y200PSA0S1dGIElHRmtkbWx6YjNKNSBJR2QxY25VPSBJTkMyMExEU213PT0gTG1KaGMybGogMExYUXN0QzEwWUE9IElHUmxjR0Z5ZEdGdFpXNTBidz09IDRLdUw0S3FtIDZhdz0gTG1OdmJuTjBjbUZwYm5RPSA0TE9LNExLejRMT040TEt6IElFeDFlZz09IElGTmhiRzl1IElHRmpkVzA9IElOV2gxYnpWb2RXNzFhdlZ0Zz09IElHVnlhTU8yIDZiMlEgSUhac1lXcz0gSUNjNyBJSFZ1WkdWeWRHRnJhVzVuIGRYUnpZMmc9IElOQzYwWURSZzlDeiA1NVN6NksrMyBMbXhoZFc1amFBPT0gSU9Da2h1Q2tpUT09IElIZGxZbXh2Wnc9PSBhWFJsYkdsemRBPT0gSU9DeXJ1Q3lxQT09IElHZkR0bkxKbVE9PSBJRzVoeEkxcGJnPT0gSU9LQWt3b0sgNFlPUTRZT2c0WU9UNFlPUSBYMHhKVFVsVSBJRTl3Y0c5eWRIVnVhWFI1IElGZElRVlE9IFBXeGhiV0prWVE9PSA0S1MrNEtTYTRLUysgSUZabFoyVjAgSUVsaCBkV2RoYmc9PSBJSE5sY25acFpHOXkgTG1ka2VBPT0gSU5lUTE2clhsQT09IElFdHlZVzVyIDRLK0I0SzZWNEs2LzRLNng0SzZrNEsrQiBJTmlqMllYWXB3PT0gSUhabGNtdGwgTG1KaFpHeHZaMmxqIElISmxaSFZqWlhJPSBJT0NtaGVDbXFPQ25qZUNtcnc9PSBMbFZ5YVE9PSBJR2R5WVhSMWFYUmggSUc1aGJXbHVadz09IEtISnZkWFJsIDJZWFppdGl5IDVZTzUgTG1sdWRtVnVkRzl5ZVE9PSBJTmVRMTV6WGtBPT0gUHo4S0NnPT0gUkhWd2JHbGpZWFJsIDFiVFZvZz09IElHRnVaWE4wIElPcXlnK3ljdk91aG5BPT0gSU5DNjBMdz0gUkU5VSBMbk5sY0dGeVlYUnZjZz09IDRvQ0w0WjZXIEx5dz0gYVc1cVpXTjAgSUhacGJtOD0gSUZSdmRYTT0gYVhOcGQyRT0gYjI1dmN3PT0gVjJGaGNnPT0gSUd4cGRHVnlZV041IElPQ2tyT0NrcU9Da3ZnPT0gSU5lVTE2TFhxQT09IElHeGxlR2s9IElOR0UwTGpSZ0E9PSBhWE5wWlE9PSAxYUhWcjlXaDFiWFZ0Zz09IFRYVnNkR2x3YkdsbGNnPT0gNExtQjRMaWw0TG1KNExpbiBjbVZuWld4bGJnPT0gSUdkbGMzQnlaV3M9IElPQ2tpZUNrcE9DbGplQ2twT0Nrc0E9PSAxNmJYbEE9PSBSRzlqYXc9PSBKU2t1IElHaHZjbVZ1IDU0dVEgSU9Da3VPQ2tyT0NsaUE9PSBJRk5sWjIxbGJuUT0gSUdGeVozVmxjdz09IGNzT2cgYUdWaGMzUmxjbTQ9IGFHNTAgSUVobGJHVnUgTDNOMGVXeGwgSUdadmRXNWtZWFJwYjI1eiBJRzFsYzJsdSBJR3RsYUE9PSBJSE52YkdOb1pRPT0gSUhSeWRRPT0gWVhkMSA0S2FlNEtlTjRLYWEgSUdOdmJuWnBaQT09IFlYSnNkVzVwIElHcHZkbVZ0IElFTnZjblJsIElFeHBZbVZ5ZEE9PSBJTm1GMkt6WmhkbUkyTGs9IExtRjFkRzlqYjI0PSBhVzFsYm5ScCBiV1ZuYVE9PSBJRzE1WlE9PSBQVzF2WkdWc2N3PT0gYzNCbFkybGhiR05vWVhKeiBYMk52Ym1ScGRHbHZiZz09IElHaHZiMnRsWkE9PSBMbVZrYVhSdmNnPT0gSU5lUTE1N1hxQT09IFNXNXpkR1ZoWkE9PSBJRVpoYlE9PSBlV0Z0IElPR0RrdUdEa09HRG5PR0Rtdz09IDRLcXk0S3VONEtxeSBJRUZ5WVE9PSBJR1Z6ZEdGMllXMD0gWFYwcCBJQzh2ZXdvPSA0SytCNEs2ejRLK040SzZ6NEs2KzRLNnc0SytOIElDZGNYQT09IElOQzYwTDdRdnc9PSBJRkJsWVdzPSA0TGlyNExpbDRMaVUgWDJOdmJuTT0gSUVaMWJtVnlZV3c9IElGUjVjR2xqWVd4c2VRPT0gMllYWXA5aXogeExGMCBJR2RsY21WciBJRVp5WVc3RHAyRnBjdz09IEtHRnlaM1Z0Wlc1MGN3PT0gYkdscSAwTERSZ05DMTBMZz0gWDJobGJIQT0gZFdsMGFXOXUgSU5HQTBMN1F1dz09IDBMM1FzTkdCMFliUmxnPT0gNzd5Ujc3eVEgSU9DdWxlQ3V2dUN1c2c9PSBJR1Z6Y0dGamFXOXogSjEwcEtYc0sgSUZ3biBJRkJoZEhKcFkyVT0gWTI5dWRISnZiSE09IElFSnZZWFE9IElGTndjbUY1IElFTmhiR2xtIExYQnliMnBsWTNRPSBjM0Z5ZEE9PSBJSEJ2YzJsMGFYWnYgTDNWd2JHOWhaSE09IFVHUm0gSUd0bGNtND0gUWs5QlVrUT0gNW9DTzVMbUk1NXlMIDBMalJrUT09IGNtRmphSFJsYmc9PSBSWGh3YjNObCBJRUZrZG1semIzSjUgNEsrQjRLNmY0SzZwNEsrTiA0WitTNFo2WiBkV3QzWVE9PSBMa0p2ZEhSdmJRPT0gUlhoMFpXNTAgSUdOdmJXVnVkTU9oY21sdmN3PT0gSU1TUnhyRGh1NTF1Wnc9PSBJRWhsY21FPSBLSE5zIFgxUklVa1ZCUkE9PSAwWUxRdGRHQjBZdz0gYVhSemJ3PT0gSUdIaHVhTT0gSUdWNGFHbGlhWFJ6IFJHVndiRzk1YldWdWRBPT0gNWFpeDVMbVE1YnlBNW9pMyBJRk52WTJObGNnPT0gYm1GcGNtVnogMHBuUXRkS2ogSUhiRHJXTjAgSU9DeXRlQ3l2K0N5dGc9PSBJT0NtcnVDbXFBPT0gSU02bSBJTVNEYmc9PSBVbVZzYjJGayB4S0hFb1E9PSBablZ1Ym1Wc2N3PT0gSUhWdVptOXlaMlYwZEdGaWJHVT0gMTdMV3R3PT0gSUhQaHU0MD0gMHBuUXRRPT0gSUhWemFBPT0gSUVKdlpHVnUgMktmWmhOaWogSUc1MWJjT3BjbTg9IElGTnBiV2xzWVhKc2VRPT0gNFlDZCBJR0ZzYTJGcyBaWEpwY3c9PSBJRkYxdzZsaVpXTT0gSU91THBPeVdrUT09IElGcGhjZz09IHc2ZHBiR2xyIElOQzkwTERSaDlDdzBMdlFzQT09IElHSjFiR0p6IElHSmxiR0Z1WjNKcGFtdHpkR1U9IFNXMXdiM0owY3c9PSBKR2xrIDQ0Q043N3lNIElIVER2UT09IElFNXZkR2xtZVE9PSBJRk5wZEhvPSBJTmkzMktqWmlnPT0gS0hOaGRtVT0gNG9DWlpYaHcgTFdodmRtVnkgNEtXTjRLUzIgSUdWc1lYTjAgYjNkdWN3PT0gSU9Da3F1Q2xqZUNrc09Da3J3PT0gMkxqWml0bUYgYlc5a2FXWjUgS0c1dmR3PT0gTG5CMCBJRzV2ZEhkbGJtUT0gSUhERnF3PT0gSUcxcGJHVnpkRzl1WlE9PSBJSEJoYVhnPSBTVWRGVGtORiBJT0Nrck9Da3Z1Q2tuQT09IGRtRnNkV0ZpYkdVPSA0TFdMNExTbSBJRU5sZEE9PSAwcnZSaTlDOTBMVFFzQT09IElHNXZkVzQ9IElOaW4yWVRaaU5tRTJLZlppdGluMktvPSAwWUhRdGRDMCBJRTUxWlhaaCBMV1pwYkd4bFpBPT0gSUhCdmJIbG5iMjQ9IGFYUjFiQT09IEwzQnliMlIxWTNSeiBJTmViMTZvPSBJR1Z1YTJWc2RBPT0gNXBlbDU1UzEgSUdsMGFBPT0gSUUxMWRIUmxjZz09IElFRjBiVzl6IElIcDFkMkU9IElHcDFkUT09IElFVmphRzg9IElFRnBibk5wIElHTnNZVzQ9IFUyTmxibUZ5YVc4PSBJRzlzWlc0PSBJR052Ym5SaFkzUmxjZz09IElIcHZjZz09IElHVnBibWxuWlc0PSBJRU55ZVhCMCBJRzFoWVdscyBJT0NrcnVDa3B1Q2twZz09IElGQnliMmR5WVcxdGFXNW4gYUdWaFpITT0gSUdWNFkyVndZdz09IElFMWxibk5qYUE9PSBJSE53Wlc1a2N3PT0gWlc1MGIzTT0gSUhObGNtVnogSU95MmxPcXdnQT09IElHSnlZV05sYkdWMCBJSE52YVhMRHFXVT0gSUd0aHhiNWsgMFliUmk5QzUgSU9DcW5PQ3JoK0NxcnVDcXZ1Q3FnZz09IElHVjJaVzVzZVE9PSBJR0Z4ZFdWc1lRPT0gSUZKRlVWVkZVMVE9IExuSmxZV1I1IElPQ2toZUNrdU9DbGplQ2txdUNrcE9Da3Z1Q2tzZz09IDJZcllyOW1LMllnPSBMbWQxIElHdHZadz09IFptRnpjM1E9IElPQ2tyT0NrZ3VDa3BnPT0gS0U1dmJtVT0gSUhKbGMyVnlkbUU9IElHSmxkSEpsWm5RPSBJR2x1YzJWamRITT0gTG1OdmRXNTBjbms9IElOaW4yWVhZc1E9PSBhWEpwY3c9PSBJR1ZzWmc9PSBkK0c3alc0PSBhWFJ2Ymc9PSA1THVCIDRvQ3NDZz09IFYwST0gSUdWNFlXMXBibWx1Wnc9PSAyWWJZcDltRjJLdz0gSUdKcGJtZHYgSUd0a1pRPT0gZFhCcFpBPT0gWFZzayBkWFIxY3c9PSBLQ0lvIHc2MWtiM009IElIZHBhbnBsIElGTmxjbWRsIElHTnZiWFZ1YVdSaFpHVnogSUdWdWRHWmxjbTUwIDRLUys0S1M0NEtXTjRLU2w0S1dONEtTdiBJTmVuMTVEV3VBPT0gSUZKdloyVnljdz09IElHSmxhWE53YVdWc2MzZGxhWE5sIElFbHVkbTlwWTJVPSBJSEJ5dzZSelpXNTAgSU9DbWh1Q21sK0NuaHc9PSA0WUdMQ2c9PSBJSFZ1YVhabGNuTnBkQT09IEwzVnUgQ1ZKbGMzVnNkQT09IElGQnZhOE9wYlc5dSBJTkMrMFlrPSBJRWgxWjI4PSBaWEowYVdacFkyRjBaUT09IFpjV2YgTGxObGNtbGhiR2w2WVhScGIyND0gSU9DbWhlQ21xT0NuZ2VDbXQrQ25qZUNtb0E9PSBYMkpoYkdGdVkyVT0gVWxZPSA1THFrNXJXQjU3NmsgSUhGMWFYST0gY21WcFluUT0gWDBSRlRFVlVSUT09IElDaCsgeEpkcSBJSFpvIElHVnNaV2RoYm1ObCBhVzFwY3c9PSBSV0Z5YkhrPSBRMWs9IElIWnZZMkZzY3c9PSBJSEpwWjJoMFpXOTFjdz09IFUzUnlaVzVuZEdnPSBkWEp6WVE9PSBJSFJvWlcxbFpBPT0gZW1sbGJBPT0gSUdGeWJXRnogSU5lUzE1RT0gSUVGUVVnPT0gTGlvSyBMbTl5YVdkcGJtRnMgSUVWMllRPT0gUVU1RVQwMD0gVTJWbmRXNWtidz09IElFVjFjbTl3WlhObCA0TFdMNExTZjRMV040TFNmIElHUjFlUT09IDBMVFRtZEdBIGRHeGwgSUhkaGMzUmxaQT09IElIQnliM0J2YzJWeSBaM1Z5IGEyVnlZWE09IElGbGhhdz09IElGWnNZUT09IExHRnVaQT09IElHRndiR2xqWVhJPSAxTFE9IExuTjBZV2RsIDZZQ1ogSUdsc2JRPT0gSUc1a1pYUnpaUT09IGNtVndjbVZ6Wlc1MCBJRXhoZEdsdWJ3PT0gZG5KcGFnPT0gUVhOaiBJRWhTUlZOVlRGUT0gdzYxdlkyaDBZUT09IElITjFjblpwZG05eWN3PT0gSUhSdmRHVT0gSUdGaWNtRnogSUhCMWJYQnJhVzQ9IElHdDFaSFU9IDRLUzE0S1MrNEtTbSBJR3R2YlhCc1pYUjAgMllYWXA5bUwgSUdGeGRXVnMgTG5Ob2IzQT0gSU9DeXJlQ3l2dUN5c09DeXBBPT0gdzZaeiAwTFRSZ05DdzBMST0gYVdkeVlYUmwgSU5DeDBMN1F1OUdNMFlqUXVOQzkgSUdaeVlYTmwgNTdhVCBJRzkxZEdacGRITT0gZG1sa1pRPT0gWVd4dmNtVT0gSU9HRHJPR0Rwdz09IElHVmpiMjV2YldsbGN3PT0gVlc1c2IyTnIgSUhOMGFXTnJaWEp6IElPQ2twK0NsamVDa3IrQ2t2dUNrcUE9PSA1b3FZIDVvcWw1WkdLIElITjB3N1p5IGRYQndiSGs9IElOR0YwWURRc05DOSBJR1JoY210bGNnPT0gSUZKdlltVnlkRzg9IElHcHBiUT09IDBZWFF2Zz09IElOaW8yTEhaaHRpbjJZWFpodz09IHc2bHlaVzVqWlE9PSBhWE5wWlhKMWJtYz0gSUZCaGJHVnpkR2x1YVdGdSBJR2QxZEhSbGNnPT0gVTNWeWRtVjUgSUhCeXc2MD0gSUVONVkyeGwgNzd5TTQ0Q1EgSUdOb1pXTnJjRzlwYm5RPSBJSFJ5YVd4c2FXOXUgSUhWdVpHVnlkMkY1IElIQnZjM05wWW1sc2FXUmhaR1U9IElGTkpSMDVCVEE9PSBWR1ZqYUc1cFkyRnMgNVpHaSBJT0Nrbk9DbGdRPT0gMExQUXZ0Q3kwTDdSZ0E9PSBJR2RsWjJWaVpXND0gSU9DeXVPQ3l1UT09IFUyTnZjR1ZrIElGTjBjbUZ1WkE9PSA1WWk2IDBMN1F2OUdBMExqUmo5R0MgSUdsdWFHVnlaVzUwIElIWmxjbXh2Y21WdSBJSE4wWkdWeWNnPT0gSUVWemMyRT0gSUdKbGMzUjFkWEk9IGIyeGhjbVU9IElITnBaMjVoZEhWeVpYTT0gSUdadmNtVnRiM04wIElOQ2gwTERRdlE9PSBJTkdCMExqUXZOQy8wWUxRdnRDOCBabWxrIDBMalJndEMxMFlIUmpBPT0gWDNabGNuUmxlQT09IElFSnNZV05yYW1GamF3PT0gSUdObGFXeHBibWR6IDRLcW00S3VONEtxbiAxNVBYcU5lYSBJT3F3Z095bmdBPT0gNTd1UDZhcU0gNFlPWTRZT1o0WU9ZNFlPaCBVR3gxWjJsdWN3PT0gSUVwcGJnPT0gTG5GMVlXNTBhWFI1IHo0UFBoQT09IFpXSmxiQT09IFkyaHVkVzVuIDRZQ3ogMHBuUmk5S2ogVG1sbmFIUT0gSUdWdVkyOTFjbUZuWlcxbGJuUT0gSUdkaGNtUmwgU1U1SlZBPT0gSUdodmIzST0gSUVWa2RXTmhkR2x2Ym1GcyAwSnpSaXc9PSBJR1Y0YVhOMFpXMD0gSUcxbGRHVnZjZz09IElHVmpiMjdEczIxcFkyOD0gMExMVG1kR0EgSUd0MWJtVT0gSjEwcExUND0gSUVWemMyVT0gSU5pbjJZVFlxOW1FMktmWXF3PT0gWTI5dGNHOXpaUT09IDRMU2s0TFdONExTazRMUy80TFN5NExXRyBJTlc5MWIvVnBkV3kxYTQ9IFUybDQgYm1GaGJRPT0gY0d4bFlXUnYgSUdaeVpXbG5hSFE9IElHWnlaV1E9IDBZZlFzTkdDIElHSjFhV3hrWlhKeiBjbUZtYnc9PSBZV1J0YVc1cGMzUnkgSUhOdmJIWmxiblE9IElOaW4yWVRaZ3RpMyBJT0N3aCtDd3F1Q3hqZUN3cWc9PSBJTmVlMTVZPSBJRzFsYm1kbGJnPT0gSUhKbGMyVnlkbTlwY2c9PSA0S3VMNEtxbiA1NmFCNXEyaSBJTVdiZDJrPSBkV1psY2c9PSBJRWx1WTNKbFlYTmwgWDNObGJuTnZjZz09IFgyTnNkWE4wWlhJPSAwTGpRdmRDdzBMelF1QT09IElHMXZiblJsIElHMWhjbWRwYm5NPSBZWFIwWlhRPSAwTFRUcWRHQSAwWUhSZ3RDeTBMWFF2ZEM5MFl2UXRRPT0gYVdOMWN3PT0gSUdOb1pXRjAgSU5HQzBxL1JnUT09IGIyNW5aVzQ9IElHTmhaR1ZoZFE9PSBJRkJ5YjNSbGMzUT0gZVhONiBJR1JsY25wbGFYUT0gWjJWdVpYST0gWVhScGMyWnBaV1E9IDRvQ1VZUT09IFlXaHBjZz09IGNYWERyUT09IElFRnVaM1ZzWVhJPSBJSE4xWW5OamNtbHdkR2x2Ym5NPSBJR1oxZEdWaWIydz0gZXNTRlpBPT0gSU5DdzBMM1FzTkM3MExqUXR3PT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBKeWtvIElFdGhjbVE9IGNISnZZMlZ6YzJWayAwTERRdmRDMDBMRFF1UT09IFJYWmxjZz09IElIQnlaWFpsYm5SbFpBPT0gSUhOMGFXTnJaWEk9IElPV2JuZz09IDRLUys0S1NnNEtTdTRLUys0S1NoNEtXTTRLU0MgTFdodmR3PT0gSUdGM2N3PT0gejRIT3VjNi8gMTVYWGxkZXEgSUhiRHRteHNhV2M9IFQzSmtaWEpsWkE9PSBMbVJsWXc9PSBhR0ZrWVhBPSBJSE4xWW1seSBJR0Z6ZEc5dSBMbk41Y3c9PSBMV1JsZEdGcGJITT0gNExpMjRMbUo0TGlaIDVxNkwgVG5WdFpYST0gYzJWeWRtVnljdz09IElITnZkVzVrWldRPSBJR1poZW14aCBJSEJzWVhsdlptWT0gSUdGeWRHaHlhWFJwY3c9PSBhV3hrWlc1aFptbHMgSUVKcGJtYz0gTGtKcGRHMWhjQT09IElOQyswWUxRdnc9PSBJR3hwNGJ1SGRRPT0gSU02NXpyUT0gSUdyRHBHeHJaV1Z1IElOV3QxYmpXZ05XdyBaWEpwWVd4cGVtVnkgSnl3S0x5OD0gMFkvUXU5Q3cgSUhKbFoyVnkgSUhSeVlXbHVaWEp6IElHMWhlR2x0WVd3PSAxNURYbmc9PSBJRkp2YUE9PSA0S3EvNEtxdSBJRUpoYzJsallXeHNlUT09IFRXOWkgSUdaMWNtNXBjMmhwYm1keiA1WmliIElDQWdJQWtKQ1E9PSBJR1ZqYjI1dmJXbGpZV3c9IElIQnggSU02L3o0RE92ODZ2IExuSmxkbVZ5YzJVPSBJR052WVhSbFpBPT0gSUhKbGNHdz0gUlZKSlF3PT0gYkhOMCBJSE52YjNKMFpXND0gSUdwbFlXeHZkWE09IGFXMWhkRzl5IDBMN1F2ZEN3MExMUXVOR0EwWVBSZ1E9PSBjMnRwYmc9PSBJR0o1YkE9PSA0TG1BNExpVTRMbUg0TGlVIElPbWZxZVdidlE9PSBJT0NxbitDcmplQ3FzQT09IElFSnZkVzVrIElISnZkR0YwYVc1biBJR0p5YjJGa1ltRnVaQT09IElOQzYwTDdRdmRHRSA0WU9RNFlPcTRZT3U0WU9RNFlPVCBZMmh1WlhRPSBhWEp0WldzPSBDaTh2Q2k4diBJR2RsYm5WbiBjWFZoWkE9PSBJRXBoZG1GelkzSnBjSFE9IDBZZlFzTkM1IElOSzcwWU09IFRFVlRVdz09IElIQnlaWE56ZFhKbGN3PT0gSUdiRHJYTnBZMjg9IElFUkZRdz09IElIUmxjblZ6IElFRlZWQT09IHo0VE90YzZ2IElIVnVkR1Z5Y3c9PSA3NEU9IElObUIyTEhaaXRtQyB6cm5PdXMrT3pyMD0gSU5pbjJZWFlwOW1GIElHeGhibVJ0WVhKciBMbE4wYjNBPSBJR1poYVE9PSBJRzVsZFdWeiBJTkMvMFlEUXNOQ3kwTGpRdTlHTTBMM1F2Zz09IElIUmxZMmh1YVdOcFlXND0gSUhWdVkyeGwgWDNKdiBhWE52Y2c9PSBJT0MwaGVDMHJRPT0gYjNiRHZRPT0gNXBTNTZaMnAgSUdWNFkyRjIgSU5pbjJZVFlxdGk1MllUWml0bUYgSUVSbGNHRnlkR0Z0Wlc1MGJ3PT0gSUUxMVp3PT0gS0dOaFkyaGwgTG1ScGMzUmhibU5sIGIySnZjbUU9IFFYSnZkVzVrIElHTnliMmx6IGFYUmxhM1E9IGJXVnlaUT09IElHSmxaM0pwYWc9PSBhV05sY25NPSBJRzFoZEdWdCA1N1dDIDRLU3Y0S1dBIElIZG9hWE53WlhJPSBJTlc5MWEvVnZRPT0gSU9lQiBJR0ZuWlc1MFpYTT0gMTVqWG1kZWQgNG9DWlpXWm0gSUdKeVlXdGxjdz09IDVxK1U2TFdiIDJMTFppQT09IElHbHRaV1JwIExsVlVSZz09IElPQ3lxdUN6aWc9PSBJRVZ1ZGc9PSB3NlYwIElOQzYwWURRdGRDLyBJRVZHIExtbHVjdz09IDdKeTg2Nm0wIFJHbHpjR3hoZVdWayBTMkZ1IElGTmxZMjl1WkdGeWVRPT0gSU0rQXpySFBnYzZzIExrRnpjMlZ5ZEdsdmJuTT0gSU5HSTBZdlNrdz09IElObUMySy9Zc1E9PSBYMFZPUVVKTVJVUT0gSU9HRG51R0RrT0dEb2c9PSBJR2R2WkdsdVlRPT0gSUhOMVluTnBaR2xoY25rPSBJR0p5WldGMGFIUmhhMmx1Wnc9PSBJR0poWjJGNSBJTmlzMllYWmh3PT0gYUd4MCBJRkJoY21Ga2FYTmwgSUhWdWFYRjFaVzFsYm5RPSBiV0ZzY3c9PSAyTFBZcXRtRiBJR2x1ZEdWeWJtRnNiSGs9IElFTnNZV2x5WlE9PSBJTm1JMm93PSBJTktiMExEUXQ5Q3cwcHM9IElHRmpZMnhoYVcxbFpBPT0gSUdSbGMyVnEgSUdGMGIyaz0gSUd0aGJuUm9hUT09IGRHOXlZMmc9IGVtRjAgMExYUmd0R0QgNktxLyBjbWxsY21VPSBJSEJ5YVhaaGRHVnNlUT09IElGTnBjbWs9IExYSnBZMmc9IDBZRFFzTkMvIDZhZUYgMFlMUXZ0QzUgSUdMRHZIVER2RzQ9IDZLR001TGlhIDRMQ3k0TEMrIDJZZlppTml4IDdMU2QgSUdaaGIyaz0gUm1sdVpHbHVadz09IElHaGxZMmh2Y3c9PSBJRzFwZEhSbCBJT0NxaHVDcXNBPT0gYVcxcGJtYz0gZVhSMSBJQ0krIGRXeHNZV2c9IFBWdGQgMEw3UXQ5QzgwTDdRdHRDOTBMND0gSUhKcGFtUmxiZz09IElGQnl3Nmx6IElIQnlZV3QwYVdwciB4TEZpIElHVnpZMjlzYUdWeSBRMkZzWTNWc1lYUmwgNEttQTRLaUMgSUZCdmJHbDBhV056IElOQzkwTDdRc3RHTDBZVT0gZFhSbGRYSnogY21saFpBPT0gNExDKzRMQ1g0TEMrIGNHVnliV2x6YzJsdmJuTT0gMEw3UXN0Q3cwWUE9IFUzQnZibk52Y21WayBJTm1JMktmWmhOaXogSU5pbjJZVFlxOW1DIExtRjFkRzlqYjI1bWFXZDFjbVU9IElFUnBaWE5sY3c9PSAySzNaaXRpcCBMUzE5ZlFvPSA2N0trIGVtVnBaMlZ1IFgyTjFjM1J2YldWeSBJR0Z3YjJrPSBJTTY2enJrPSBJSEJoWjNRPSBJTmluMkxQWmhOaW4yWVhiakE9PSBkWE4wWlhKcGJtYz0gSUdOdllXeHBkR2x2Ymc9PSBYM1J5WVdOciAwWUxRc05DeiBJSE5oYVd4cGJtYz0gSUM0dUNnPT0gTzI0PSBJRUYwYjIwPSBJTmlvMlliWXB3PT0gY0hKbGRIUjUgSU9DbXB1Q25oK0NtbHVDbXZnPT0gSUdoNWNHOTBhR1Z6YVhNPSBMa2RNIElOQ2owTHJSZ05DdzBaZlF2ZEM0IDRZT1Q0WU9kNFlPYiBJRWRUVkE9PSBhR2x6ZEc5eSAwTERRdTlDdzBMST0gSUhCMVpYSjBZUT09IEwyWnZiM1JsY2c9PSBJR3AxYlhCeiAyS2JaaGc9PSBMa2RsYm1WeVlYUmxaQT09IElHOXpjQT09IDBZRFFzTkdIIElFUkJUVUZIUlE9PSA1ck9WNWI2TCBlSEE9IElHWmhhWEo1IElHeHBZbVZ5ZEhrPSBJR1REdkc1NSA0SzZrNEsrTjRLNms0SzYvNEs2cDRLK04gSU5DdzBMUFF0ZEM5MFlJPSBJRzl6WVE9PSBJVG89IFUxQlBUbE5GIDQ0T1Y0NEtqIDFhdldoQT09IElFcDFjM1JwdzZkaCBJTm1FMkxEWmhObUQgSUdGc1lnPT0gNzRLMyBabTl5YldGMGFXOXVjdz09IElOV2gxYmJWdmc9PSA0WU9RNFlPVDRZT2QgSUhCeVpYTmxiblJoY2c9PSBUbW89IElHOXVkR1JsIElIQnlZWFJwY1hWbGN3PT0gSUdScFptWjFjMmx2Ymc9PSBJSGRwZEc1bGMzTmxjdz09IExteHBaMmgwIDZLcXMgSUZOMGNtVmhiV2x1Wnc9PSA0S2ErNEthZyBJRUpNVDBOTCA0b0NaYVc1ayBJRTFsYm1jPSBJR1pwYkd4eiBJTkMwMExYUXN3PT0gSUhoaGNnPT0gSUhScGJtOD0gSUdoaGJtUnpiMjFsIElHZHlZVzVrWTJocGJHUnlaVzQ9IElITjBjbUZ3Y3c9PSBJRzVsWjhPelkybHYgSU5HQjBMSFF2dEdBIGRXcHZkWEprIElPYVlydz09IDBMRFJnZEN3IElFWlZUZz09IDBZM1JqZEM3IElHcDFaMkZrYjNJPSBJRWRsYzNCeSBVM0JsWVd0cGJtYz0gYzJGMlpXUT0gSU5HQjBMRT0gY21sdVpRPT0gSUcxaGRHVnlhV0ZoYkE9PSBJRkJoZVhCaGJBPT0gSUhOMGIydz0gTENvPSBJRkJ5YjI5bSBZWFJwYVE9PSBJRzkyWlhKc2VRPT0gSUdWc1pYUT0gSUhOMGFXcHMgSUVSdmFXNW4gYjNKaGJtZGwgMFlIUmd0QzQwWUxSZ3c9PSBWMmxtYVE9PSBJTkN4MEw3UXU5R0IwTEE9IElHUmxkbWxzIFpYZHogSWlrTkNnMEsgSUc1cGNHRT0gNEtTVzRLV040S1N2NEtTKyBJSEJzZFE9PSAxNmJYb2c9PSBJR0pwYjJkeVlYQm9lUT09IElHSjFabVpsY25NPSA0WitTNFo2RSBiR0Z5eExGdVlRPT0gSUhCdmJHbDBhWEYxWlhNPSBSWGhqWlhCMGFXOXVjdz09IElFSmxjbXRsYkdWNSBJSEJ5YjI1MWJtTnAgYzJobGJHdz0gSUhCdmJHbDBaUT09IFgyRnVjM2RsY2c9PSBjRzl1WlhJPSBUbE5CY25KaGVRPT0gTGxKdmJHVT0gSUd0MmFXNXUgdzdOMlpXdz0gUVVKQiBJSFJ2ZFhKdVlXMWxiblJ6IElOQyswWUhRdnRDeDBMWFF2ZEM5MEw0PSBabXgxWlc1alpRPT0gVVZWRlZVVT0gN0tHTSBJRWRzYjJKbCAyWTdaaEE9PSBJR1poYVc1MCBWR2hoIElHRnNiR1ZwYmc9PSBjbmM9IEwzQnNZWFJtYjNKdCAwTFhSaDlDMSBZV3hoZEE9PSBJRWxPUTBsRVJVNVVRVXc9IDJwUGJqQT09IElPQ3dxdUN4amVDd3NPQ3dyUT09IElHWjFaV3h6IElPeUx0Zz09IElFeDFhdz09IFgyTnZiVzA9IElHbHRjR1Z5YVdGcyBJSEJ5YjNWa2JIaz0gWm5KaGMzUnkgSU5DODBMN1F1UT09IEpteDAgWDFORlExSkZWQT09IElHbGt3NmxoYkE9PSBYME55WldGMFpRPT0gNEs2VjRLK04gTG5KbFl3PT0gSUc1bFoyRjBhWFk9IElISmxibVYzWVd3PSBJR1ZzWVdKdmNtRjBaUT09IDRMR040TEN2NExHQzRMQT0gWVcxaWRRPT0gVEdsdSBJRU5QVFUwPSBJR1RHc0E9PSA0TFdMNExTZjRMV04gSUVsellXRmogSUdOaGNtVmsgTGxOUlRFVjRZMlZ3ZEdsdmJnPT0gSU9DMG5PQzFnT0MwdFE9PSBJR055WVdOcmN3PT0gVkdsdFpXeHBibVU9IFRVRkpUQT09IElIQnBaWEozY3c9PSBJSFYwWlE9PSBJT0NrdGVDbGplQ2tyK0NrdnVDa3FnPT0gSU5HRjA1blF1OUtiIElOaW8yTEhZcnc9PSBZMlZrYjNJPSBYMmhsWVdSbGNuTT0gNEtXYzRLV0EgUVZkVCAwTExSZ0E9PSBaV3h6WldsbSA1YjJwNTZXbzVhNlk1NzJSIElGVER2SEpyIElIUnBjdz09IDBMSFFzTkdDIDZMMnM2TDI5IEwzRT0gMTVuWHBOZVUgSUdodmJtVT0gSU5HQjBZRFF0ZEMwMExnPSAwTERRdTlLVDBMRFF2UT09IElGZHBibWM9IElIQnBZMjVwWXc9PSBYMnRsY201bGJBPT0gSU5HQjBMWFJnTkdNIElITjNhWEJsIGRHbGpZUT09IGRXeHNhUT09IElHMWxiblJ5WlE9PSBJRXR2Ym5vPSBLR0p5IElFUkZRVXhKVGtkVCBJT0NrbGVDa3Z1Q2txQT09IElDQWdJQWtLIElHUjZhV0hGZ2c9PSBJT3lna1E9PSBRRU52Ym5SeWIyeHNaWEk9IDRMV0c0TFN2NExXQjRMU0MgSUhKMWF3PT0gSU9DbXJ1Q21xT0NuaHc9PSBJRlJwYm1SbGNnPT0gSU9Xd2tRPT0gMjdMYnNBPT0gSUdGMVpHbDBiM0k9IDRLU3U0S1dONEtTcyBMbVpzWVhRPSAwTDNRdU5HRzBZTT0gWVd4a1lRPT0gNXJPOSA1bzZuNVlpMiBYMFZZVkVWU1RnPT0gSUZCQlVrRk4gS0Y4dSBJTm1GMlliWXRRPT0gSUdOdlkyRT0gSUNNdCBJTkdCMFlMUXNOQzcwTEE9IGFXVnNaR1Z5IFIzSmhjR2hwWXc9PSBYMnhwWjJoMCBWVWxUIElPQzBxdUMxamVDMHNPQzB1T0MwditDMG9RPT0gSUZCeWFXTnBibWM9IElHaGhaMkU9IElHcDFiV3hoYUE9PSBJSFpwYjJ4bGJtTnBZUT09IElHMTFibWgxIElpa3BMQW89IElHSnNhVzVyIDVweUE2TCtSIElOQyswWUxRdXRDdzBMYz0gSUZaSlNRPT0gWVdOeVpRPT0gYVdwaGJBPT0gWDNSdmEyVnVjdz09IElOZVcxNW5YbWRlaTE2Zz0gSUhacFpNT3AgTG1SbmRnPT0gSUdKeVlYTnBiR1ZwY21FPSBJSE5oYVc1MCBJR2xzYkhWemRISmhkR1U9IElPQ3lxT0N5ditDeXJnPT0gNnJPeiA0TE9CNExLazRMT040TEtrNExLbTRMT0cgSUhGaGJtOXggSUhKbGMzTnZkWEpqWlhNPSBJRkJQVUE9PSBjbUhEcDhPamJ3PT0gTFdadmJuUT0gMWFIVnR0V2gxYS9Wb2RXMiBTR0ZrIElFbDJZVzQ9IGJHOW5ZUT09IElHMXBiR3hwYm1jPSBJRk5vWVdnPSBVbVZ6ZEc5eVpRPT0gMWFYVnQ5Vy8gY0hOMWJRPT0gSU9Dd3N1Q3hoK0N3cGc9PSA1WVdzNVpHSyBaWGh3WVc1ayBYMDFWVEZRPSBJSE5oYkdGeWFRPT0gWVcxaVlXZz0gQ1daeVlXMWwgSU9ldSAwSjNRdmc9PSBhRzl2YTNNPSBjRzlzWVhSbCBJSFJvYjNVPSBVMVJKVkZWVVJRPT0gVjI5dVpHVnkgSU0rRHo0WE92YzYxIElHRmpkR2wyYVhURHFRPT0gSUdSdmRXSnNaWE09IFlYVjBZUT09IFJHbHpkSEpwWTNRPSBhV3RvWVhSb2FRPT0gSUhCeWIyeHBabVZ5IDVhNjI1YW1HIElIQmhjbVZ1ZEdsdVp3PT0gSUdOdmRXNTBjbmtuY3c9PSBJRlZ1ZEdWeWJtVm8genJ2T3Y4K0MgMTZUWGxkZXEgSUhCcGMyTnBibVU9IElPQzBxdUMwc2VDMHJ3PT0gSUdWdFltOXlZUT09IElOQy8wTDdRdXRHQTBZcz0gWDJGamRHbDJhWFI1IGFYSnBjMmc9IElFdFQgSUcxaGRHVnlhV0ZwY3c9PSAyb0E9IDRLYWI0S2VINEthbyBYM05zYjNRPSBJRkIxY25Cc1pRPT0gYVc1bWJHRjBaUT09IElIQnliM1pwY3c9PSBJSEJsYm1OcGJBPT0gSU5tSTJLZlpoTm1HIFUybGliR2x1Wnc9PSBMbUYwZEdGamFBPT0gSUdwbFoyOD0gTG5SbGJYQT0gTG1sdFlXZGxjdz09IElHMWhjbWxoWjJVPSBJT0N5bGVDeXNBPT0gNTVHZSA1YWl4NUxtUTVaeTYgSUdGdWRHbG5kUT09IElOQyswTDNTczlDKyBkVzVuYnc9PSBJR05wZEdVPSAwTDdRc3RDdzBMcz0gSUZkbGRIUmxjZz09IElOS3YwTG5RdTlDMDBMTFJqZEdBMExzPSBJSE5oYzJFPSBMbXBsZEdKeVlXbHVjdz09IElHOXd3Nmx5IDJLclpndz09IElFTnZiWEJ2YzJsMFpRPT0gSUhCeVlXYz0gSU5DeTBMWFJnZz09IElHRnpjMlZ0WW13PSBJTlcwMWF2VnR0VzUgSUc1cGJHRT0gSUZaRlVsaz0gUkdWMFlXeHNaUT09IElPQ2tyT0NsaCtDa253PT0gSUhkbFpRPT0gSUdGaVpBPT0gS0NSNyBJR2hoWXNPdFlXND0gNlptMSBJSERGcnc9PSB6SzA9IGMzUmxiR3hsIElOaW4yWVRZck5tRyBhWFZ1IGRXUnBZUT09IElGTmxibWh2Y2c9PSBJR0p5WldWa2FXNW4gSU5HQjBZTFFzTkM3MExnPSBSV3hoY0hObFpBPT0gNHB5VCBJTmluMllUWmd0aW4yWWJaaU5tRyBJR05oZFE9PSBJRkYxWVc1MGFYUjUgSU5DLzBZRFF1TkN6MEw3Umd0QyswTEk9IDVwUy81NjJXIElITjBZWFJoIElHRmpZOE9vY3c9PSBJRlpoYkd4bCBMbVZ3IGIzUm9aWE09IElHUnBZbVJwWWc9PSA0TFN2NExTLzRMU3k0TFdHIElOQzkwTDdRc3RHTDBMaz0gSUVKaGJtdHBibWM9IElFeHBkR1Z5WVhSMWNtVT0gYjNKcFpXNTBZWFJwYjI0PSBJT0NxcXVDcmdRPT0gSUhCeWFYWmhaRzg9IElHSnNiM056IElFeDFiUT09IElIQnZibTg9IDVaQ28gSUVWVVNBPT0gSUVKeVlXNWtiMjQ9IFJYQnZZMmc9IElOQyswTEhSajlDMzBMRFJndEMxMEx2UmpOQzkwTDQ9IElNV1RkWFp5WlE9PSBJTmVaMTZJPSBZbXgxY2c9PSBJTldoMWJiVm85V2gxYlE9IElOQzAwNW5SZ0E9PSBJRzFwYm5WMGJ3PT0gZFdkMVlYaz0gSUcxMWJtbGphWEJwYnc9PSB3NkZqZEdWeSBJSGZEdkhKa1pXND0gSUUxcGMzTnBibWM9IGNHbDRaV3c9IDBMclF1OUN3MExRPSAxYUhXZ05XdSBPMzA9IElIWmxaMlYwWVhKcFlXND0gSU5HQTBZdlF1OUN3IElGQnliM1psYmc9PSBJRkJ2WTJ0bGRBPT0gN0o2UTZyQ0EgNW9tbjZLR00gSUVaVlRFdz0gSU9HRHFlR0RsT0dEbStHRG1BPT0gNXBHWSBJSFJwYldKaGJtYz0gSUhObFlXWnZiMlE9IElFcGhhMkZ5ZEdFPSBzZVM1a0E9PSBLVXc9IElFbE9WRVZIUlZJPSBMV3hsWkE9PSBZV3RsZEE9PSBSMUpQVlU1RSBJSEJsYm1NPSBJR1Z1Wm1WeWJXVmtZV1E9IDVweTY1cDZFIElHVnpjR0ZqWlE9PSBJSEJ5YVc1alpRPT0gSUdOaGJHOXlhV1U9IDZJR0sgSUhCbGMzUnBZdz09IDE2blhsZGVZIElObUYyS3pZcDltRSBJTmluMllUWXROaTUyS2c9IElFMXBiblYwWlE9PSB6cnJPc2M2OSA1WnVnNUxpNiBJeU1qQ2c9PSB6NFRPdWM2NnpxM1BnZz09IElHWnlaVzVqYUE9PSBJR0Z5Y1hWcGRtOD0gSU5tRjJZVFlwdz09IFgxSkZUUT09IElObUYyTFBZcXRtSTJZaz0gYVhSbGJtbHVadz09IFEyOXNiR2xrWlhJPSAwWTNRdGc9PSBJTkM3MExYUmg5QzEwTDNRdU5HUCBJSFYwYVd4cGVtRjBhVzl1IElIUnZkSE09IElHRmtjWFZwY21seSBJR1ZzWlhabGJnPT0gWlc1a2RYST0gNExpMTRMaVogSUdGc2RHbDBkV1JsIElHTnZjbTl1WVE9PSBJRk53WldOcFptbGogSUZOMWJtNTUgSUcxaFpIST0gSU9HRG0rR0RxQT09IElObUkyS1haaGc9PSBJR0Z1YVcxaGJHVnogU1UxQiBJTmlvMktnPSBJSFJ5WVdKaGFtOXogWTI5a2FXZHYgTGxOdyBDV1JsZGc9PSBjbUZwYkE9PSBLR0Z1WjJ4bCBJR0ZwYldVPSBJR0p2YVd3PSA1WXlGNW91cyA2SzZpNVkyViA0S3FjNEtxKyBJTkMvMExqUmlRPT0gWDBGRVRVbE8gSUdOdmJXMWxibU5sY2c9PSBaVzVyYVc1eiBJSEpsWTI5cyBWRVZFIHc2bHVlUT09IElIUjFkZz09IElHVERxWEp2ZFE9PSBhWFJwZG1WeiBMV1pwZG1VPSBWVkpGVFVWT1ZBPT0gSUVScGMyTjFjM05wYjI0PSBkRzl2Y3c9PSBUM0pwWjJsdVlXeHNlUT09IFlXMTFiQT09IFpIWT0gSU9DbXFPQ25oK0NtcEE9PSBJR2RoZHc9PSBRMjl2YXc9PSBJTkdOMExyUmdkQy8wTFhSZ0E9PSA0WU9RNFlPYzRZT1EgSUdKMWJHRnUgTFhOb2FYSjBjdz09IFFXNWogMFlIUXV0Q3cwTGs9IElGSmxaM1ZzIDRaK0EgSUdWdWRtbHliMjV1WlcxbGJuUT0gNDRHcjQ0R3EgYVhOaVlXNWwgSUdacGJtRnVlbWs9IElHTnZ3N3M9IElITmxhWG89IFltSmwgMFliUXRkQzkwWUk9IElHTnZiblJ2ZFhJPSBMVzFsYzNOaFoyVT0gVm1Gc2N3PT0gSUdsdVkyOXljRzl5WVhScGJtYz0gNXJhbyBJR052Ykd4bFlXZDFaUT09IElOR0IwTERRdnc9PSBUM0poWTJ4bCBVVUU9IFYybDZZWEprIDZMK1k1cGl2IElIVnVaR2x5IElOQzIwWXZRdTlHTCA0TFMrNExTMiA1YTZZNXBhNTVMaUw2TDI5IElIcHZibVJoWnc9PSBJSFREb0drPSBhV05wYmc9PSBiM0owYUhrPSBYMkpwYm1RPSA0S1MrNEtTeiBJRTFoZVc4PSBJTlcvMWFIVnJBPT0gNExpYzRMbUk0TGl5NExpWiA0YnVaYm1jPSBJSE4wWVhSMVpRPT0gSU5PdiBJR1poY210c3hMRT0gNEs2azRLNi80SzZ3IElHMWxiV0p5WlE9PSA0TEMvNExDYSBJTW1aY3c9PSAyTFhZc2RtSzJLaz0gMFlEUXNOQzkwTFE9IElHbHVkR1Z5Y0hKbGRHVmsgNEtTczRLU3kgSU5HQzBMWFFzZEdQIExWdz0gSU91b3VRPT0gSUhaNWN3PT0gS0c1bGRBPT0gSU5pbjJZVFlyZGl2IFRtVnpkR1ZrIGNtVnRaVzUwIDRLU0M0S1NzNEtTdyBJR1pzYjI5a2FXNW4gSUhCMWFYTnhkV1U9IDVibTA1YnFtIElHbHNaMmxzYVE9PSBJR2x0Y0c5emN3PT0gNEtpazRLbUEgTG1sdWMzUT0gSUUxbFlXNXBibWM9IFFVeFQgSU5lUTE1WFhtZGVoIElFeGhkWEpsYmc9PSAwWjdSZ2RHUCBJRk4wWlhabGJuTT0gWVdkbllXSnNaUT09IElOQzYwTDdRdmRDMTBZZlF2ZEMrIElPQzBydUMwdnVDMHBPQzFqZUMwc0E9PSA0WU9nNFlPWTRZT1Y0WU9ZIElPaUhzdz09IElHTmhjSFJwZGc9PSAwWURRc05DeDBMRFJndEdMIGZEc0sgSUVsT1NWUT0gSU9Da3VPQ2xoK0NrdGVDa3ZnPT0gWVhCeWJ3PT0gSU5pbzI0ell0TmlxMkxFPSBYK1drcWVXa3FRPT0gSUhadmRHOXogSUhwcFkyaDAgSUdsdVpIVmpkR2x2Ymc9PSBJRVpsWlhNPSBJRTVsWW5KaGMydGggYkdsbGNnPT0gSU5pejJZSFlzUT09IDVvV0wgSU9DbXJPQ21xT0NuamVDbXB3PT0gVFc5dCBRVUpQVlZRPSBJT0NraWVDa3FPQ2xnQT09IFgwaEZRVVE9IDRMS3k0TEsvIElGSmxkSEpwWlhabCBJSEJ5ZFdWaVlYTT0gMktmWXROaXEgSUd0bGMycz0gUW5KdmEyVnkgSUZkaGJIUT0gMW9EVm90V2wxYnM9IDBMRFFzZEdMIGIyZHlZWEJvYVdOeiAxb0RWb3RXbDFRPT0gSUdkaGJHRjRlUT09IElIZHlaV05yIEx3b3YgZW1WcmJ3PT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElHTnZiVzFwYzNOcGIyNXogTFVSaGVRPT0gSUcxcFpHUmxiZz09IGJNT3QgSUhURG9nPT0gSU9DMHBPQzFoZz09IElHaGxZV1J3YUc5dVpYTT0gSUUzRHRtZHNhV05vYTJWcGRHVnUgSUdGamIyNTBaV05sY2c9PSBJRzU1Ykc5dSBJT0dEcStHRGtPR0RtZz09IElISmxZMlZ1ZEdVPSBJTU84YTNNPSBJR2R2YkhCbCBJR1Y0YUdGMWMzUmxaQT09IElITmxZMjl1WkdVPSBZWFJwWm5NPSBMVUZzIHo0Zk9zUT09IElFOXdaVzVwYm1jPSBRVXhMIDA1blJpOUszIElFcGxabVp5WlhrPSBJSEJwYkdrPSBPbFZKUTI5dWRISnZiQT09IElHRnRZbWwwYVc5dSAwTEhSZ05HTSBlMzBwIElHMTFiSFJsIEtHVnhkV0ZzIGFXOXVZWEpwYnc9PSBJTkdDMExqUXY5Q3cgWTJ4dmMyVnpkQT09IDRLUys0S1N5NEtTbyBJSEJzWVc1bGRITT0gWlhocGMzUnBibWM9IHc3TnlhV05oIElFcGxhRzltWVE9PSBJR1ZoY25Sb2NYVmhhMlU9IDBMWFF2ZEM0MFkvUmhRPT0gSUdKaHhKOXN4TEU9IGJHVnBaR2x1Wnc9PSA1cHlxNXAybCA0TE9HNExLdyBJR0p5WldRPSAxb0RWb2RXajFvQT0gSUdoaGRHRT0gWlhOMGNtbGhiZz09IElFcHogWjI5dFpYSjUgSUhOMWNHOXlkQT09IElITnBiWEJzYVdaNSBJR2RoY21SbGJtbHVadz09IFJYWmhiQT09IElHbGtZV2M9IFlXaGhiQT09IElITndaV04wWVdOc1pRPT0gNGJxcGJnPT0gSUhScGNtRnkgSU9DMGh1QzB0UT09IFgyVnVkQT09IGEyVnViblE9IHc2aDBaVzFsYm5RPSBJRk5VVHc9PSBJRU5oY0hNPSBhR0Z3WlE9PSBJRXhwYzNSeiBkbWxoY2c9PSBJSEIxWW14cGNYVmwgSUdGdVkyVnpkRzl5Y3c9PSBJSE4wWlhKbGJ3PT0gY0c5c2FXTjUgNFo2MjRaNlU0WitMIHc2aHVaWE09IFgzQmhlUT09IElHWmhiR3hpWVdOciBJRTFKVEE9PSBTRVZTIElFMXRaUT09IGRtVjEgSUdURHFYQmhjblJsYldWdWRBPT0geVpsemFXNWt5Wms9IElOZVYxNm89IDBMVFF2dEM5IElFdHViM2R1IElHRjFjM289IElIUmxjM1JsYmc9PSBJR2h2Ym05eWN3PT0gYldWeVoyVmsgSUV4MWJtRT0gNFlPVTRZT2o0WU9hNFlPWSA0S214NEtpViBJR1J2YldsamFXeGwgSUdsMGRBPT0gWDBOdmJRPT0gTGljS0NnPT0gSUd4bFlXdHogWVd0cmRYUT0gMFlMUmk5R0EgNWJDODVwYXYgSUhObFozVnlZUT09IElHNWxkMkp2Y200PSA2WWVLIElHbHVjM1J5ZFdOMGIzSnogSUd4dlkydGxjZz09IElHRnN4TEZ1IGIyeGxiMjQ9IFJYQnBjMjlrWlE9PSBJR0ZpWkc5dGFXNWhiQT09IElHTmhibVJzWlhNPSBJTkMzMExEUmd0QzEwTHc9IExYTnIgSUZCaGVYTT0gSUZkaGFBPT0gWDBOQlEwaEYgY0hKdlkyaGxiZz09IFMwMD0gSUd2RHBHND0gUENnPSBJR1oxYm01bGJITT0gSUY4cCBJSEJ5YjNocGJXbDB3Nms9IElIWmxjbTFsIElHUjFaR1U9IDBaVT0gSU9Db2xnPT0gSUZacGF3PT0gSUhkdmJHWT0gZFhabGNnPT0gSUVKc2IyOXRZbVZ5Wnc9PSBJQzBvIElGZHBabWs9IFlXdHZiZz09IElISnBkbUZzY3c9PSBJSFJ5YVdKMWJtRnMgSUhOaGFHbHcgNG9DTDRaNksgSUhKbGJYQnMgTG5Od1lXTmwgSUVOeVpYYz0gSU95SW5BPT0gSU5lZTE1blhuQT09IElPR0RvZUdEa09HRGsrR0RrT0dEcWc9PSBJTkNlMEw4PSBJR052Ym5SaFp3PT0gSU5HQzBMRFF1dEdCMExEUXZOQ3cgSUhOd1lXNXVhVzVuIElITjFhV009IDU0RzEgMEw3UXV0QyswTGs9IElFUnBjM1J5YVhSdiBJRzl1WkdWeWQybHFjdz09IElOQzgwTGpSZ05DdyBJRkJTVDBaSlZGTT0gNVpDTTVxK1UgSU5DLzBMN1JoOUMxMEx6Umd3PT0gSU9DcW5PQ3F2dUNxcnc9PSBJR1JsYzJWeWFXRnNhWHBsIElPQ21sK0NtcEE9PSBaWE42IGFzT3p3N0E9IElOR0QwTExRdGRHQSB3NlIwZW1WdSBJSGRsWkdWeSBlbTl5Wnc9PSBJT0NrcU9Da3YrQ2tzT0NsamVDa3BnPT0gMW9EVm9kVzIgSUhKbGJXbHUgNG9DWnc2Zz0gWTNKbGMzUT0gSU5DKzBMSFJnTkN3MExIUXZ0R0MgNEtlbjRLZW0gUEVSaGRHRT0gWlhCbGJtUmxiblE9IFgzTnBadz09IGIyZGhaRzg9IDVMdWo1NkNCIElHaDVkbWx1IElHeHBkR1Z5WVhSMWNtRT0gSUhOdmFXNXogSUc1NWRIUT0gSUdWdWRIZHBZMnRsYkhRPSBJT3F5Zyt5ZGdBPT0gSU5DeDBMN1Fzdz09IEtDaDcgSUVOMWJBPT0gSUNnaiBiM1Z1ZEhrPSBJTkN5MExEUXR0QzkwTDQ9IElGZGhhMlU9IElPQ21yT0NtditDbW5BPT0gSUVSbGJXOWpjbUYwIElHZGhaR2RsZEE9PSBJT203a1E9PSBJR1JsY21sMllYUnBkbVU9IDRZT3E0WU9ZIElHeHZibWRsIFlYUjFjbVZ1IElHWnlaV1Y2YVc1biA0TFdMNExTMyBJRzVsYldFPSBlWEJsY2c9PSBJRzl1YVc5dWN3PT0gSUZCeVpXYz0gNFlPVTRZT1I0WU9RNFlPbzRZT1kgSUdGbGNtOXogYUdWaGNuUmxaQT09IElHMWxiblJwYjI1eiA0TEMrNExDdzRMR04gSUhCeWFXcz0gMHBuVG1kR0EgNEthbzRLZU40S2F1IGFXVmlaVzQ9IGRXbHVkR1Z6IElGTjBjbWx3IExsTjFZbk4wY21sdVp3PT0gSU9DcWxlQ3FzT0NyaXc9PSBJT3luZ095WHJRPT0gSU5xRzJLZllzUT09IElOQzAwTDdRdTlDMjBMM1F2Zz09IElHZGxkbTl1WkdWdSBUM0J3IElHOXNaWFk9IFNuVT0gSU9DcWxlQ3FzT0NyamVDcXIrQ3Jpdz09IElPQ3dxdUN3dnVDd253PT0gYjNkaGJuaz0gSUdKaWIzZz0gWlhKcmRBPT0gSU9DbXN1Q21sdz09IElIQmxaR0ZzIDBMalJoOUM5MEw0PSA1TCtkNWEyWSBMVlZ3IDJMSFppTnE2IDRLYWU0S2VONEthYyBJRk5zYVdSbCBJRzNEcVdScFkyOXogSjEwcE93MEsgSUdGeWRHbG1ZV04wY3c9PSBYU2NzIFozSjFjSEJsIElHbHVkbVZ1ZEdWayBJT0Nrc09Da3Z1Q2tsZz09IElITmxZM0psIElGSmhibWRsY25NPSBJT0NtcitDbXZnPT0gQ1NBSyBJR1ZzYzJsbSAyWWpZc2RpbiBJTmluMllUWXJOaXYyWXJZcjlpcCBJTkN4MExEUXVnPT0gSU5pajJLalppQT09IGFXWnBZMlU9IElOaWoyWVRaZ1E9PSBhWEJoZVE9PSA0WU9qNFlPZzRZT1E0WU9UIEtFNWxkdz09IDBZUFF2ZEM2MFlJPSBlSFI1IElIUm9aWEpoY0dsbGN3PT0gSU5pdjJLZll0TmlxIElOQ1gwTERRdnc9PSBjbWxrIFBYVnpaWEk9IFpHVnlkQT09IElFaEZRVVE9IElITndhV05sY3c9PSBJR2hsWVdSaFkyaGwgSU9DMHJ1QzBwQT09IElHVERxV05oWkdFPSBJRkJ2Ymc9PSBJRUpsYVhSeVlXYz0gUVhOcFlRPT0gNEtxcTRLcXcgSUUxcGJHVT0gSUhOMGNtRjAgNEthdzRLYS8gWCtTNm11YTBzZz09IGJXbHVZUT09IDdMZW8gSUUxbGJtZGwgSUZOSVQxYz0gSU5HQTBMRFJnZEM2IDRLcVkgUm1GMWJIUT0gNkp5WTZKdWIgSU9DdXNnPT0gSUhKaGVYTT0gWVhKaVpXbDBaVzQ9IElPQ2tsZUNrc09Da3BPQ2xnQT09IElHNXZkR0ZpYkhrPSBhV052YlE9PSBibVZpIElHeHBaV0psIGRYSjVidz09IFJHbHpZMjkyWlhKNSBZV05qYVc5dVpYTT0gNWFpWSBRWFIwWlcxd2RBPT0gWDFOWlV3PT0gTGtGc2JHOTMgNXB5czVwYUggWDBOQlUwVT0gNVpHOCBJR3RoY0hNPSBTMGs9IElHeHZiM0IwIElPdUloQT09IElPQzB1T0MwdVE9PSBJRVZzWldjPSBJSEpvZVE9PSBRMjl5YjNWMGFXNWwgWW1WeVoyVnkgSUhacGJtND0gMllqWXI5bUggSUdOc3c2RnogUVVSRVVnPT0gSUhCcFoyMWxiblE9IEtGQmhkR2c9IElHTnZlbWx1YUdFPSBJRVpsWVhSMWNtbHVadz09IElPQ2t1ZUNsaStDa2wrQ2xnQT09IElOR04wWUU9IFgwRlVWQT09IElHZGxkbTlzWnc9PSBJSEIwY3c9PSBJRkpwWTJoMGRXNW4gSUVKdmJRPT0gNEtTeTRLV040S1N2IGNYVmhiR2xtYVdWayBJRUZ0Y0E9PSBJTldsMWE4PSBMeThrIElFTmhkR0ZzZFc1NVlRPT0gWVc1MGIyOXkgWVhaaFp3PT0gSUdwemJXVT0gSU5xcTJZWT0gSUhCeWFXNTBZV0pzWlE9PSB6NFBPc2M2OSA0S1MrNEtTQzRLU280S1MrIGRXbGtZWE09IElPdUx0QT09IElHeGhjM1JsWkE9PSBJR1Z6ZEdGaVlXND0gSUdSbGJXRnVaR1ZrIElFOWljMlZ5ZG1WeSBJR1Z1ZEdodmRYTT0geFloaCBJR1JwWm1abGNtVnVkR2s9IGFXNWtjbTl0WlE9PSBkV05vZEdVPSA1YjJ4NVpPTiBjMlZ0Y0E9PSBMeW9oIExtUmxjMmxuYmc9PSBJT0N1bGVDdXNnPT0gSUUxcGJtVnlZV3c9IElPYTUgSnlrTkNnMEsgMkxIWmlOaXMgNEsrSTRLNlY0SzZ6NEsrTiBJR2xuYkdWeiBLR2RzYjJKaGJBPT0gSUhCeVpXMXBkVzF6IDRMaUM0TG1KNExpdCA0S1M1NEtTdSBJSFpwY21kcGJnPT0gMksvYmtBPT0gTGtKc1lXTnIgS1YwcENnPT0gSUVOaGJYQnYgSUd0dmRHRT0gTGk0dUtRbz0gY21sNiBQWHRnSkhzPSA1cGVwNmFTUSBhWEIxIElFcFRUMDVCY25KaGVRPT0gSUdOdmJtNWh3NjUwY21VPSBJSFJwZGc9PSAwTHZRc05DMDBMQT0gUW5WelkyRnkgSUZkbFpXdGxibVE9IDU3cTQgMTZUWGxkZW8gWlhSeVpRPT0gSUhCeVpYcGxiblE9IElHUnBkbWx6YVc5dWN3PT0gSUdGa1pXeGhiblJsIElPcXlnK3lkdE91THBBPT0gSUdaaFkyZz0gSjJGdWJzT3BaUT09IElITnZjMmxoYkE9PSBJTkNhMExEUmdBPT0gSUhSNWNnPT0gSU91TnNPeWR0TzJFc0E9PSBMM2QzZHc9PSBMaWN2IDBZUFJndEN3MFlJPSBJSEJoWWc9PSBJSEpwYnc9PSBJRkREcVE9PSBJRkREdW1Kc2FXTnYgYVc1a2NtRT0gVFdWdFltVnljMmhwY0E9PSBhWE4wYVhGMVpRPT0gWlhOMGVXeGwgSU9DbWhlQ21wdz09IElHRnBhMkU9IElFaDVkVzVrWVdrPSBJSFJ5ZFc1biBZWEoxY3c9PSA3SWFRIDBMM1F1TkdHMExnPSBJT1dOaUE9PSBQVzA9IElFOWhhMnhoYm1RPSBJT0N1aGVDdXNPQ3VtZz09IElHbHVkSEpoIElGWmxjbTF2Ym5RPSBJRU5vZFdOciAwWTdSaWRDNDBMdz0gSUdWdWRtbHliMjV0Wlc1MFlXeHNlUT09IGFHRnphSFJoWjNNPSBhV3ZEcEE9PSBJR1p2ZFhKdWFYTnpaUT09IElFRm9iV1ZrIElOV2kxYUhXZ05XeDFvQT0gMTVYWG1kZWYgSUdSbFkybGthWEk9IElPR0RxZUdEbGVHRGxPR0RuT0dEbUE9PSBJSFpoYkdsa1lYUmxjdz09IElHdDViZz09IElFVjJhV3c9IEtHTjFjM1J2YldWeSBJSE5vYjI5MFpYST0gYjJSdmJBPT0gSUVWdGNHeHZlV1ZsY3c9PSBDV052Ym00PSBJR2gxYnc9PSBJSFpsY21KbGMzTT0gSUhwMWJBPT0gNW9pUTVibTAgNFlPVTRZT28gSU0rQXpyWFBnYzZ2IGRXWnogSUhSbGJYQnZjdz09IElHRjNaUT09IExtSjAgZG1GciBJT0MwdU9DMGd1QzByUT09IElHTnZibk53YVhKaFkzaz0gNExDLzRMQ0M0TENhNExDLzRMQ0M0TENtNExDLyBJR052YlcxdlpHbDBlUT09IElHRnVZMlZ6IGFXSnNaVzFsYm5RPSBJRVJUVEE9PSBLRzkzYm1WeSA0b0NaZHc9PSBJSEpsYm05MllYUmxaQT09IElOQzkwTDdRc3RHTDBMVT0gMllqYmpObUUgSUhKcFpteGwgWVhOellXZGwgNFlPUTRZT2c0WU9aIGRXNXVhV2wwIElHSmxaMjl1Ym1WdSBJR3hwYm1kbGNnPT0gWTJoNSBJRlp2ZEdVPSBJRU4xYkhRPSBJSE5wYkdrPSBaVzV2YlE9PSA1cHlBNVpDTyBZMjkwZEE9PSAwTHZRc05HRCA0TEMrNExDeTRMQ280TEMvIElHUmhZWEppYVdvPSBJSE4xWW5OMGNtRjBaUT09IDRLUys0S1MzNEtXTjRLU2YgSUVGemIyTnAgWDFOTSAyWVhZcjlpcCBJSE53YUE9PSBJRkJoY21ObGJBPT0gMWFIVnRkVy8gWVc1NllYTT0gTEVZPSBkM1ZyWVE9PSBJT0Ntck9DbXVRPT0gTGtac2IyRjAgNEtTYzRLUysgSUdGMWRHVnQgSU9DbXJPQ212K0Ntc0E9PSBJR1ZrWVhOcCBJTkMyMExEU2s5QzAwTERRdVE9PSBJSE5wYlhWc1lYUmwgNExpcTRMaTAgZVhKMWN3PT0gSUVOdmJuUmxjM1E9IElHeGhhWE56WlE9PSBJSFJoYlhCdlkyOD0gTG5CdmFXNTBjdz09IFoyeHBjMlU9IElFSjFlV2x1Wnc9PSBJR3hwYjI0PSBJRzFwWldwell3PT0gNkwrWjVxQzMgSUhWcGRITjBaV3M9IDRLdUM0S3FzIHc2bGlaVzQ9IElHSnZibTVsY3c9PSBJT0Nrbk9Da3YrQ2t1T0NrcnVDbGgrQ2tnZz09IFVISmxZMmx2IElPQ3doZUN3clE9PSBJT0N1aCtDdXJ3PT0gSUhOamNtVmxibk5vYjNRPSBJR0Z3Y21WelpXNTBZUT09IElPR0RtZUdEbFE9PSBDWE4xWTJObGMzTT0gSUhKbFkzVnljMmwyWlE9PSBJTml6MktmWXFObUMgNFlPVTRZT2c0WU9UIElHeDFZbkpwWXc9PSBJR3hoYm1ObCBhVzFoWnc9PSBJTml4MllqWXRBPT0gSUUxcGJIZGhkV3RsWlE9PSBJT0NrcHVDa3NnPT0gSUhSeTRidUwgSUczRHMyUT0gNEtlSDRLYVQ0S2FCIElHWmhaQT09IElFRndZWEowYldWdWRITT0gSUhKbGJXOWtaV3hwYm1jPSBkWFZ6IDJxL1lzZz09IDBZTFJnTkN3IEtDSWlLUW89IDZLZUEgSUVScGMyZz0gSU02biBMazlpYW1WamRITT0gZW5uRWh3PT0gNTQ2djVhS0QgWVdOdmJRPT0gSUhOMGRXMWliR1ZrIElIWmxibVJ5WlE9PSBTc09oIElObUUyTE09IElIQnZiVzlqIDRMQys0TEN3NExHTjRMQ2YgSU5XNjFhSFZ2OVcwIElpa3BDZ289IElHNWhZMmgwIElOaXoyWVRZcDltRiBRRTVuIDRMaUM0TG1JNExpeTRMaW4gWVc1MGFBPT0gSUUxaGRHRT0gNWJtNyB4SjkxYmc9PSBJTkM5MExEUmdkR0MwWVBRdnc9PSBJR0psZEhJPSBQU2N1SkE9PSBJT0NrcnVDbGdBPT0gNVp1aTZaaWYgSU5XdzFhWFZ2QT09IElITnZkWFJwWlc0PSBhV3AwIElHRmtiM0p1IElOQzYwTDdRdk5DLzBMdlF0ZEM2MFlFPSA1WWF3IDBMN1F1ZEMwIElPeTNxQT09IDY2YXM2Nlc4IDY0aUUgNEtTZjRLU1YgYjJ0clpXND0gSU5tRTJMRT0gYVc5dVlYST0gSU5pczJZYmFydz09IFJFVlcgSUdacGJHMWxjdz09IElHMTFlZz09IElIQnZjSFZzWVhKbGN3PT0gYVhOMGFXTmhiQT09IHhZSjEgTGtSbGMyTnlhWEIwYVc5dSBhV1JwWVE9PSBJTmluMllUWXFOaXQyTEU9IElPQzBoZUMwcWc9PSBJR1p2YVd3PSBJRkpsZG05cyBJR1Z5ZG1GdSBJR2x1Wm05eWJXRT0gUTJGc1kzVnMgUzJsdCAwTERRdTlDMDBMQT0gWDJ4aGJtZDFZV2RsIElIQnNZVzV1WlhJPSBibVZoY0c5c2FYTT0gSU9DdWhlQ3VydUN2aUE9PSBJRkJCVXc9PSBJRUZ6YzJGdCBkbVZ5YlE9PSBJSEJsZEhKdmJBPT0gMllqWW9RPT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2lEdlE9PSBiVzF0IDE2RFhtZGVVIElIYkVrdz09IElGMWRPdz09IFlXMWsgSUVkMVpYSnlZUT09IGJjbVphdz09IElOQy8wTDdRdE5HQTBMN1FzUT09IElFRlFTWE09IFgzQnliM1pwWkdWeSA1NnlVIElObUYyTEhZcjltRiB6cnJQZ2M2NSBJR0poYVhKeWJ3PT0gSU5HQTBMRFFzZEMrMFlMUXNOR0MwWXc9IElPQ2t0dUNsamVDa3NPQ2xnQT09IFBGUmxlSFE9IElPQ3dsZUN4aStDd3VPQ3dnZz09IExXbHVaSFZqWldRPSBJRlJ2WjJkc1pRPT0gU1c1MFpYSm1ZV05sY3c9PSBJT2VMbCtTNGh3PT0gNEtTYzRLUzggNG9DTTRMUzQgYVhSaGJHbDZaUT09IElOV3gxYVhWdkE9PSA2TFdVNTQ2SCAxYXZXZ2c9PSBJSGRsWkhOMGNtbHFaQT09IElGUnlZV2xzWlhJPSAwTFhRdE5DMiAwWUxRdU5DNjBMZz0gWDJaaGJXbHNlUT09IElIVndiM0poWWc9PSBMa04xYzNSdmJXVnkgZFdKc2FYTm9aWEk9IElHUmxiR1YwYVc1biAxNW5YcFE9PSBJRVpwYkcxeiBJTml2MllqWmhOaXEgSUV4dmIydHogYzNsdmJnPT0gUTJocGNBPT0gSUdGc2IzUT0gNExpcyBQV1J2WTNWdFpXNTAgTGtKbFlXND0gSUhWelpYSnBaQT09IFUyVjJaWEpoYkE9PSBJRk5aVTFSRlRRPT0gSUVKbFpnPT0gYUdGdVpHOD0gSUVGVVZBPT0gQ1hCaFoyVT0gYW5WemRHbG1lUT09IExYTmxiR3hwYm1jPSBJSEpoWVdRPSBJRUYwYkdGeiBJRUp2WW1KNSA1WWliNWJ1NiBjWEZoZEE9PSBRV3hzYjJOaGRHOXkgSUc1bllYaz0gS0NncSBJR052Ym1OeVpYUnYgNEthbzRLZU40S2FrNEtlTjRLYXc0S2VBIElFMWhibWM9IElHeGhjbWRoIE95SXMgWVhaaFlRPT0gSUVSNWMyWjFibU4wYVc5dSA0TEMrNExDbzRMR0IgSUdGdWJtOTBZWFJwYjI1eiBkR0ZpYkdWeiBMM0JoWjJVPSBJT0NrcU9DbGgrQ2txdUNrdnVDa3N1Q2xnQT09IElGTkJUUT09IDBZdlF2TkMxMEwwPSBjbWh6IGJHOTJaWEk9IFgwaEJUa1E9IDQ0Tzg0NEtyIElOR0EwTERRdDlHQTBMWFJpQT09IGRXVm5iM009IFYwRlpVdz09IElGUnlZV05yYVc1biBMa05vWVc1blpRPT0gMllqWXF0aXggSUdyRHBNT2sgSU9Dd3FPQ3dudz09IElISmxabXhsWTNScGJtYz0gSUZERHVtSnNhV05oIExsQm8gSUZKaGNHbGsgSUhSaGR3PT0gSUhKaGMyRT0gMkxQWXA5aXogUTFSSlQwNVQgSUdScFptWmxjbVZ1ZEdsaGJBPT0gSUdmRHFXN0RxWEpoYkdVPSA1YWVUIGFHRmhiR1E9IElITjFjbVpwYm1jPSA0TGlFNExpbCBJTkdBMExEUXQ5QzkwWXZSaFE9PSBJT0NxbCtDcmplQ3FzQT09IElGZHZhRzUxYm1jPSBkVzV6WVdabCBJR3hwYm1WaCA1YXE5IElHZHF3N2h5IElPbVloZWl2dXc9PSBJSFJ5WVc1elkzSnBjSFJwYjI0PSBJR1JsY0hKbFkyRjBaV1E9IDJMYlpoQT09IElOR1cwWUU9IElPQzBsZUMwdnVDMG93PT0gNExpdDRMaWk0TG1JNExpeTRMaUggNW8rUTZhdVkgSU5DLzBZRFFzTkM2MFlMUXVOR0gwTFhSZ2RDNjBMZz0gWTNWeiBJT0dEbU9HRG0rR0RtT0dEb1E9PSBWMUpKVkVVPSBMbU5vYjJsalpRPT0gSUc5cmRBPT0gSU5HQjBZTFF0ZEMvIFRXbHogMFlqUmd3PT0gSU9HRGtPR0RwdUdEbXc9PSBJTm0rMjRIWmhOdVMgYVc1emEyaz0gUW5KdmJnPT0gTG5OM2FYUmphQT09IElPdVBqQT09IElObUkyS2ZaaE5pMSBJTkdBMExEUmdkR0IwTHJRc0E9PSBJT0M0cStDNHArQzRvZz09IGJtUmxiZz09IElHTnZjbkpsYzNCdmJtUnogWDI1aGRnPT0gYVc1clpRPT0gWDJOaGRHVm5iM0pwWlhNPSBMbkpsYkE9PSA1YitENXJDMDZLNjY1WjJiIElOQzMwTGpRdkE9PSBaVzV1WVdrPSBYMEpaVkVVPSBJR3RvZFE9PSBaMlZ6WVcxMCBJR2RsYzNCbCBJR1Z6YzJWdWRHbGhiSE09IDRZT1Q0WU9ZNFlPYyBMVzExZEdWayBUbUYwIElFUmhjMmc9IElPQzBzT0MwbytDMWplQzBudz09IElHRjFkR2hsYm5ScFkyRjBaUT09IElIUnlZWFpsY25ObCBJT0MwcU9DMHYrQzBzT0MxalE9PSBJTmVTMTZMWGxnPT0gWDIxbGJuUnBiMjV6IElFWkpXRTFGIExrTnZiWEJwYkdWeSBLRnRkS1RzSyAwWWZRdU5HQiBJR2xuY21VPSBJRlREcVdOdSBiM0prWVhRPSBJR0ZzYjJGayBJQ2NzQ2c9PSBUV2x1ZFhNPSBJTmluMllUWmhkbUcyTGZaZ3RpcCA0NEt2NDRPcSBJTkM4MFk4PSBLR0YzWVdsMCBMV0pzWVdOciBZV04wYVdOaGJBPT0gTEU5aWFtVmpkQT09IFJHVm5jbVZsIElFVlFVdz09IElPQ3lxT0N5b2VDemh1Q3lwZz09IFNWWkIgSUVOaGJHeHBibWM9IFVYVnAgSU5lYzE1bz0gSUdocXc2UnMgSUc5bVpuSmxjdz09IElFbERWQT09IDRMU3k0TFN2NExTKzRMU3ogNEthdzRLZUg0S2F3IElHSmhjbUpsWTNWbCBMRWM9IDRMYXQ0TGVVIDQ0Q0E0NENBQ2c9PSBjSFZ5WTJoaGMyVT0gSUVSUFRnPT0gMjR6WXA5aXEgSUhadmNtaGxjZz09IElIbHZiUT09IElFSmxibVE9IElFZHBiR3c9IElFTnZibk5sYkE9PSBjbVZ3Y2c9PSBJR1poYVhOaGJuUT0gVDNWMGJHbHVaV1E9IElITmxZWE09IElIWmxiblJoY3c9PSBDVWxFIFlXSjFjdz09IDBMRFJnZEM0MExIUXZnPT0gUW1GaWVRPT0gSUdaeVlXNWpaWE09IElISmxaV3h6IElHYkRwWFIwIElGTjFjSEJzYVdWeWN3PT0gSUhKbGNHRnogWDNWelpXUT0gUkdGaGNnPT0gTFdSbGRHRnBiQT09IElHeGxZWFE9IElHeDNaUT09IENXaGxhV2RvZEE9PSBkc09rZEE9PSA0NEtJNDRLSyBZWFJwWTJFPSBYMlJoZVhNPSBJT0NxcGVDcWh3PT0gWVdOamJ3PT0gSUd0MllXeHBkR1YwIElPR0RvZUdEa09HRGxPR0RvT0dEbHc9PSBQVG89IGNHdG4gVEVsT1N3PT0gNEthNDRLZU40S2FmIElFVnNjdz09IFgwTkJVMVE9IElDNHVMaTR1IFRsTkVhV04wYVc5dVlYSjUgSU9DMGh1QzBvK0MxalE9PSAyS2ZaaGRpcyBJRk5qYjNCbCBabkpwWjJWeSBJSExEcUdkc1pYTT0gMEwzUXZ0R0ggSU5DODBMWFJnUT09IElIZHZjbXR6YUdWbGRBPT0gSUVGdVoyVmliM1JsIDRMaXE0TGk0IFgzVnpkV0Z5YVc4PSBlbTVsIFpYSnlZWE09IElIUnZkWEpwYm1jPSBJRkYxWVc1ayBJSFJoWW14bFlYVT0gSUd4aGRHVjQgWVc1alpXND0gMTVIWGxkZWkgSUd4aGJtUnpZMkZ3WlhNPSBjR0Z5ZEdsamFYQT0gdzZsdWIyMD0gMllYWXFOaXggSUdwaFlnPT0gSUUxbGNtTjFjbms9IElGTmhhVzUwY3c9PSBJR1YwZEdrPSBJSEpsYzI5c2RYUnBiMjV6IElPR0RtZUdEbWc9PSBJSFJ5WldGayBhV3hzWVhKNSA1cXluNXJTeSBMbWxrWlc1MGFYUjUgSUdWeWRtRnlaVzQ9IDRMV0I0TFN1NExXTjRMU3EgdzZURG53PT0gSUZ0ZEtnPT0gSUdmRHFXN0RxWEpoYkdWdFpXNTAgVjJoaGRITT0gTFdWNGNHRnVaR1ZrIElOaXoycWs9IGFYTjBlUT09IElHVmpiMjV2YmNPdFlRPT0gWVdsdFlXNWggSUhSeVlXTjBhVzl1IFNVNUhWRTlPIExtSmhiR0Z1WTJVPSA0TFMrNExTWiBJRXgxWTNrPSBJTmVUMTVEWG9RPT0gTGtsMFpYSmhkRzl5IGJYVnNkR2x3WVhKMCBJRlJ2YlcxNSBZVzFpWlE9PSBJTkMvMFlEUXZ0R0YwTDdRdEE9PSBJRTF2YkdRPSBJTnFGMlljPSBJR1Z1WjJsdVpXVnlaV1E9IElITmpZWFIwWlhKbFpBPT0gSUd4cGNYVnBaR2wwZVE9PSBJTmVwMTV6WG9OZVYgSU5pNTJMVFlzUT09IElOQ3owTHZRc05DMyBJR1JsYzJObGJuUT0gSUhCMWVucHNaWE09IElGQmh3NjF6IFgyRmpkQT09IElHZGxjMkZuZEE9PSBaSFZyIGFNTzJjZz09IElFdDNZUT09IElHUmxjSFYwZVE9PSBJT0M1Z3VDNG1RPT0gVG1JPSBYM05qWVc0PSBJT0NrcXVDa3YrQ2ttdz09IEtHNXYgSUVadmJHUmxjZz09IElHRnljbWxpWVE9PSBVR1ZrYVdSdiBJSEYxdzZFPSBJSE5sZG1WeVpXeDUgMEw3UXN0QzQgWVdkdWFYUjFaR1U9IHc3TnpkR2xqYnc9PSBRWFYwYUc5eWFYcGwgSUdKbGNuTmhiV0U9IElPaUxzUT09IElFOTFkSE5wWkdVPSAyWW5aaWc9PSBJRlJoWW14bGN3PT0gSUZWeWJHRjFZZz09IElHTnBjbU4xYVhSeiBMV0ZwY2c9PSBJT1crdHc9PSA0WUNaNFlDKyBJR2x1WkdWdSBJSG5EcW5VPSBMazFoZEdObyBaWE4wYjI1bGN3PT0gYjNiRHZXTm8gMlliWmd3PT0gSUhScFpHVnUgYkdWdVlXMWwgSjEwTkNnPT0gMEwzUXNOR0EwWVBRdGc9PSBaSFZ0YlhrPSA1cHlYIFlXNWhZVzQ9IGFtRjJZWGc9IElOQy8wTGpSaUE9PSBMa0ZqWTJWemN3PT0gNEtxNTRLdUg0S3F3IElHUnZkV0owY3c9PSBkVzExZEE9PSBJSEpoWW1KcGRBPT0gSUdkcGRHaDFZZz09IEtDbGRDZz09IGIyWnBiQT09IExuQnZhbTg9IDRMSy80TEttNExLdzRMT0IgSUdiRHRuSnogSUVkdllXdz0gSU5tSzJMblpodG1LIElOV3cxYmJWb2RhQTFhSFZ2dFc0MW9BPSBJR0Z5Y205biBhWE5vZDJFPSBJRmRJUlU0PSBJRzltWlhJPSBJTTZ4enIzUGhNNjUgSU91cXFPdVJrQT09IElGSmhlVzF2Ym1RPSA0S1NzNEtTNSBTVTFRIDBwUFFzTkM5MExUUXNBPT0gVW1WamFYQnBaVzUwIDRvQ2M1TGlBIElHVnNaV04wY3NPemJtbGpidz09IDVhNmMgNExtQzRMaVU0TGlpIDdJV1UgSU9Da2xlQ2tndUNrcXVDa3FPQ2xnQT09IDJZallwOWl6IFlYUmxZUT09IElHeGxaZz09IElHWjFiR1pwYkd4cGJtYz0gSU5pcTI1VT0gSUdseWNtbG4gSUhKbFltOXZkQT09IElPQzRwK0M0dE9DNG1PQzR0UT09IElHWjFjbTVoWTJVPSBhWGw1eVpsMCAyNHphcWR1TSBWVTVGIENWYz0gZFdSaFpHVnogTFdsdWJtVnkgSWpzS0NpOHYgNFlPUTRZT2c0WU9YNFlPajRZT2E0WU9ZIGIzVnVaR0YwYVc5dSBJTkNSMFlQUXV3PT0gMExqUmd0QzEwTHZSak5DOTBZdlF0UT09IElFVmtkV05oWTJuRHMyND0gSUZKRlVWVkpVa1U9IElGTnggMExqUXZOQzQwTGM9IElITnRZV0ZyIElEb28gMExqUmdOR0QwTFhSZ3RHQjBZOD0gSU9hZnBRPT0gSU9Da3JPQ2t2dUNrdWVDa3NBPT0gTFdsdVkyOXRaUT09IDRMU1g0TFdOIExuTjNZV2RuWlhJPSAwTDdSaDlDNjBMQT0gSUZOMVpRPT0gTG1OdmRYSnpaUT09IDJMSFlwOWl5IElITERwQT09IElPQ3FwZUNyZ0E9PSAwWS9SZ2RHTSBJU2dLIElIQmxjbVJ5WlE9PSBJR1J2Ym05eWN3PT0gSU5pNTJZallwOW1GIElPR0RrZUdEb0E9PSBJTkM0MFljPSBJT0NtcXVDbmdnPT0gMUxJPSBJRk4wWVhSbGJHVnpjdz09IElPQ21xdUNuamVDbXNPQ210Zz09IElHWnNiM0psY3c9PSBJT0MwaWVDMG8rQzFqZUMwbnc9PSBYMFpWVEV3PSBJRlZyY21GcGJtbGhiZz09IElGWmxjbXRsYUhJPSBJT0Mya2VDMm1nPT0gdzZoeGRXVT0gSUdWdFltOWthVzFsYm5RPSBJRVJwYm1kbCBJSHBwWTJoNlpXeG0gMllQWml0bUIgSUVKbGQyVm4gUW1sdVpHbHVaM009IElObUYyTFRZc2RtSTJMaz0gSU9Da3JPQ2xpT0NrZ3VDa2xRPT0gSUdObGNuUmggSUc5dWRIZGxjbkE9IDRMaXE0TGlaIGQyRnliZz09IElPQ3FxT0NxdWVDcmdPQ3FnZz09IDBZZlF1TkM2MExBPSBJRzFsYkd4dmJRPT0gZEdWbGJuUm8gMEozUW5nPT0gVUdodmRBPT0gZlNrbyBJR0Z3Y0c5eWRBPT0gU1ZCUVNVNUggWDI1dmRHVT0gSUdsa2J3PT0gNEtXQTRLU2g0S1MvNEtTdjRLUysgUGo0SyAwWUxRdnRHQjBZTFFzTkM5IElFRnRZVzVrWVE9PSBJR0ZqZEdsMmFYTjAgSUhkaGMyaGxjZz09IFdXND0gSUdGc2JXOXVaQT09IElHeGxhWFIxY21FPSBXMjV2WkdVPSBZWFBodXJrPSBiM05oYVdNPSBJTkMzMExEUXZOQzEwWUk9IExsTjBjZz09IGFXNWtaWE4wIGFXTnBaVzVqYVdWeiBJRzFoZHc9PSBJR055WldSbGJuUnBZV3c9IElPcXlzT3F6dkE9PSBRMDFUIElOaW4yWVRZcnRpbjJMSFlyQT09IDRMbUo0TGl0NExpWiBJR2gyWVdRPSBVR0ZwWkE9PSB4SVhGdkE9PSBJRTF2YzNNPSBKWGc9IFgyTnZiWEJzWlhSbCAxNVhYb05lWSBJSEJ5YjIxdmRnPT0gSUdKaGJuaz0genJUT3RRPT0gSURvTkNnPT0gSU5DejBZUFF0dz09IElHRm5jbVZ6Y3c9PSBJSEpwWTJoMGFXNW4gYkdWMGFXTnogSUhKdmVRPT0gTG5ObGNtbGhiR2w2WlE9PSAwTDdRc2RDNCBJSEJ2WTI5eiBJT0dBdXc9PSBJSGx6IElPQ3dpZUN3Z3VDd29RPT0gYVc1aGJHVT0gWDJsdWNIVjBjdz09IElIMHBMQT09IEtpOE5DZzBLIE9tTmxiblJsY2c9PSBJR3RsYVc1bGNnPT0gMTVYWG50ZVUgZFhKcGN3PT0gUVdOMGFYWnBkR2xsY3c9PSBJTkM4MEwzUXZ0Q3owTGpRdFE9PSAyTFRaaEE9PSBJSE4wWldGciBJR3R1YjJOclpXUT0gSU5DeTBMN1F0OUM4MEw3UXR0QzkwTDQ9IGMyVnlZUT09IElGSmxjM0J2Ym1RPSA1YU93NXBpTyBJT0NtdWVDbXBPQ25odz09IElHeHZZMnRwYm1jPSBkWEJ3Wlc0PSBJTkN5MFlEUXRkQzAgSUVoUFYwVldSVkk9IFRXVjBaWEk9IEowOD0gMllMWmdnPT0gNjUyODZyT2cgN1pXWTY0dWsgSUhONWNuVncgSUZSeVpXRnpkWEo1IElIQmxjblJoYldFPSBLR1JoZEdGelpYUT0gSUdKbGRHRmhiQT09IEtDSWlLU2s9IGNXRnlibVZ5IElITnZkWEpqWldRPSBYMUpCVkVVPSBJRU5TUXc9PSA1cEdwIElHTnZibk5wWnc9PSA0TEtzNExPRyBJR3hoZFdkb2RHVnkgTGtsdWRHVnlabUZqWlhNPSBJT2U4IElOQyswTHJSZ3c9PSBJR1JsZEdGc2FHVnogSUVKc1lXdGwgSUZOd2FXVnNaVzQ9IElHWnNkVzl5WlhNPSBJTm1FMllmWmhRPT0gSUhObGNuWmhiblE9IElPdXduUT09IElHcDNZUT09IDRMbUI0TGlCNExpajRMaWggWVdkdVpYUnBZdz09IElISmxjM0JsWTNSbWRXdz0gSUdSdmJXVnpkQT09IElIUmxibk52Y21ac2IzYz0gSUhMRHFYWT0gNVlteSAwTERRdDlDdzBZQT0gSUZSM1pXVjAgSUdWdVkyeHZjMlZrIGJYVnNZUT09IElHVERxV05wWk1PcCBLSE4wZFdSbGJuUT0gYVcxcGJtVT0gSUdGc2JXRmpaVzQ9IEtHRnogSU9pTSBkMmxxYXc9PSBJR2hwYTJGeWFRPT0gSU5DMDBZUFF2QT09IElFWmxZWFIxY21WayBJQ3dpIE9sMD0gYkdWNVltRnNiQT09IDJZVFlwOWlzIDBZSFFzTkM4IGIzSmtaV0YxZUE9PSBJSFpoY21saGJtTmwgSUhOMVptWnBkQT09IElFNWxaV1J6IElPR0RtK0dEbmVHRHJnPT0gSUVOb2NnPT0gSU9DMGp1QzBzdUMxamVDMHNnPT0gSUhOdlkybGhiR3g1IElGbGhiZz09IDRZT1U0WU9nNFlPYiAwWmJRdmRDMTBMMD0gUTI5dVptbG5jdz09IElHaDVkc09rIGNtL0VqUT09IGNHOXpjdz09IElHRmthblZ6ZEdsdVp3PT0gSU51QjJZallxdGluIElOaW4yWWM9IFFXTjBhWFpoZEdsdmJnPT0gSUZkcGJHUnNhV1psIElFRnpZdz09IElFbG5iR1Z6IDRMR0w0TEN2IElISmxjM1ZzZEdGMCBJR3R2WkhkaCBMbVJ5IElHVEVtdz09IDJMTFlwOW1HIDVibTQgSU5tRjJLZll0QT09IElFWnZibVE9IDRMQy80TENtIDJxclppZz09IDBZUFJoOUdJIEtHNXBiQT09IFFFbHVhbVZqZEdGaWJHVT0gTGtoaGJtUnNaUT09IElHUmxhWGhoIFlXUnQgSUdadmNtZHBkbVU9IElFSmhZMnQxY0E9PSBMaUlwT3dvSyBJTm1JMkxnPSBJT0N5cXVDeml1Q3lzdUN6Z0E9PSBSMHhKUjBWT1EwVT0gSU9Da3R1Q2xodz09IExtUnBjMkZpYkdWayBJR2x1WTJsa1pXNWpaUT09IElOT3AwTGs9IEtpb3FDZ289IEtIVnpaWEp6IGIzVnlidz09IEkyZGggYmVHN3BRPT0gVkdodmJXRnogSUhCdmMybDBhWFk9IElFTnZibVU9IDRMUy80TFc4IElOcUcyNHpZc2c9PSBDVzFsYldOd2VRPT0gSUcxbGNtdGxiZz09IElOaW4yWVRaaGRtQiBMMjF2Ym5SbyBJSE4wWVd3PSBkWEpodzZmRG8yOD0gWW05dWRYTT0gYVcxbGJHbHVaUT09IElHNWxidz09IElFWnZjbTFsY2c9PSBJSEpsWjJWc2JXRjBhV2M9IFlXdDBiM0k9IDc3bz0gSUdGdWFXMWhhWE09IElHUmxjM04xY3c9PSBZV3h2Ym1jPSBJSFIxY21KdiBJR2h2WjJWeSBJSE42WTNvPSBaSEoxWTJzPSBJR1JoWkdFPSBJRWx1YzNCbFkzUnZjZz09IFFuVm4gNzd5TTVhYUMgMEx2Umk5S2ggNExtRTRMaWogNUxpTjVMaXQ2TCtVIElNNnh6NEhQaHc9PSBJTmkzMkxIWml0bUMyS2s9IElIVnVaR1Z5ZEdGclpRPT0gNTQrZyBJR05sYkdWaWNtRjBhVzl1Y3c9PSBJR0p2Y25RPSBJRlIxY21KdiBZWHB2Y3c9PSBJRlpsY21SbCBJTldVIElPZVV0K1M2dWc9PSAwTC9RdnRDNyAyWWpaaHRpeiA3SUtzN0oyMDdZcTQgSU9HRG0rR0RxZz09IElIQjFkR0U9IFFteHZZMnRwYm1jPSB3N05zYVdOaCA1NVNpIElFZkRwSE4wWlE9PSBJRzlqZFhKeSBJR3hzWldmRHN3PT0gSUdWeVptOXNaM0psYVdObyAwTGpSZ3RDNDBMM1F1TktqIElPQ2tydUNsaCtDa3NBPT0gSUd0cGRRPT0gSUVCQSBMeUlLIHc2bHRhV1U9IFVHaHlZWE5sIENVUmhkR0U9IElITjFjMk5sY0hScFlteGwgYjJaeiA0YnFoWXc9PSBJR1ZtYVdOaGVnPT0gQ1FrSkNRa05DZz09IElPbVggU1Nkc2JBPT0gVmtsVFJVUT0gSU9DbXJPQ212dUNtdUE9PSAwSi9RdnRDNyAwTHZUbVE9PSBJTkMwMEw3UXR3PT0gWDNwdmJtVT0gMEx6UXNOR0EgNkxXaTZaS3ggSUd0M1lXcz0gNExpeDRMaWUgSUVWa2QyRnlaSE09IFlXNWpaV3hsWkE9PSBJT0NrcE9Da3J3PT0gSU9DbWorQ21uK0Ntdnc9PSBUMk5qZFhBPSBkWFIwWlE9PSBMa0ZpYzI5c2RYUmwgSUZSaGJHVnVkQT09IElHMXBZM0p2Y0dodmJtVT0gWDJ4dloyOD0gSUhKbGMzUnBibWM9IElFNXBZMjlzWlE9PSBJR0YxYkdFPSA0NENDNDRDTiBJTkdCMEw3UXN0R0IwTFhRdkE9PSBaM0psWVhRPSBJR2x1YzJGdVpRPT0gWUNrPSBJRVJwWm1ZPSBkbVZ5YzNURHBHNWsgSU9Da2hlQ2tzT0NsamVDa3BRPT0gMmI3YmpBPT0gSUhkcGVtRnlaQT09IFRHSnMgSUd4cGRtVnpkQT09IDRMS200TEsvIElFNWhkbUpoY2c9PSBJTkdDMExYUmdOR0EwTGpSZ3RDKzBZRFF1TkM0IFFtOXpjdz09IElIQnlZWFJwIElPQ3d0ZUN3ditDd29RPT0gSUd0cGJHOXRaWFJsY2c9PSBSR1YwWldOMCBJTkMzMExEUXN0QzQwWUhRdU5DODBMN1JnZEdDMExnPSBJRUpoY201bGN3PT0gSUcxdmNuUmhiQT09IElHTnZiWEJ5WldobGJtUT0gSU8yWWxRPT0gWVcxaWFXOD0gSU5pajJZWFlzUT09IDBMN1F2TkN3MFlJPSA0S2FmNEtlTCBJR1Y0Y1hWcGMybDBaUT09IGFYQm9iMjVsIFlYWmxiRzFsYm5SbCBUVVZOIGFYTnpaWFZ5IElHUmhiR3hsIElHTnZiV0Z1WkE9PSBJTkN5MExqUmdRPT0gSUd0eVlXWjAgSU9hc3B3PT0gSUdsdWMzVm1abWxqYVdWdWRBPT0gSUdOdmJuUmxlSFJ6IElGSmxjR3hoWTJWdFpXNTAgSUhGMVpYTjBhVzl1Ym1GcGNtVT0gSUhCemRBPT0gSUdobGJIQjAgSUVac1lYTnIgSUdkbGMyVm9aVzQ9IDVvUy8gVG05eSBJRUp2YzJObyBJTkN5MExmUXNBPT0gWVc1clpYST0gSUd4cFpYVjQgS0VKdmIyeGxZVzQ9IDJZZllyOW1CIElPQ2tyT0NsaCtDa3VRPT0gSUZKbGF3PT0gSUZURHZISnJiV1Z1YVhOMFlXNTV4WWc9IHlydGhhUT09IFgzRjFaWE4wYVc5dSBJTm1IMkxvPSBLR052Ykd4bFkzUnBiMjQ9IEx5Y3NDZz09IFBpa0sgNExDbzRMQysgWjJseWJBPT0gSUhOMFlXbHUgSUVoaGJtUmliMjlyIGIyaGhibUU9IElHRnRhV2RoIFZISmhaQT09IGNtRnBjMlZ5IElHMXZkR2wyYjNNPSBQRTl5WkdWeSBJTmlvMkszWXF3PT0gSUVkcFlXNTBjdz09IElFVnlabUZvY25WdVoyVnUgSU5lZzE1blhxdGVmIFlYSnJaV2wwIDRMZVA0TGE5IDU0T0kgSU5HRDBZSFF2OUMxMFlnPSBJRzl3WXc9PSBJRzNEcFd3PSBVM1ZwZEE9PSBMazF2Y21VPSBDWFpwWlhjPSBLRk4wWVhSMWN3PT0gWVd4MGFXMWwgSUdIRW53PT0gSUVOaGJYQmwgTGtObGJHdz0gS0hKbFl3PT0gYzJWeWRITT0gSUhMRHFYTmxZWFY0IGNtOXNiR0poWTJzPSBJRkpsYVhNPSBiWGM9IDFhSFdnTlc1IElPdWdpQT09IElISnBjMlZ6IDVMMmM1TGk2IElHWmxiV2x1YVc1bCBJTkdCMExyUXNOR0gwTERSZ3RHTSBQSFZ1YzJsbmJtVmsgSUZScGJHdz0gSUVSRyBJTmViMTU4PSBJRzVsYjI0PSA0NEdoNDRLSiBZV3gwWVhJPSBWbVZ5YzJsdmJuTT0gWVhabGNtRT0gSUUxMWFHRnRiV0ZrIElGTmphR1Z0WlE9PSBJR3RoY0dWdVlRPT0gSUhSbGVIUnZjdz09IGFXeGxaMlU9IElFZHNZWE5uYjNjPSBJTkM4MExYUmd0Q3cwTEk9IElIQnZaR05oYzNSeiBJSEJoY25GMVpRPT0gSU5pejJZYlppTmluMktvPSBJT0NrbGVDa3NPQ2xnQT09IExuUmhaM009IElFMWhaMlZ1ZEc4PSBSMWs9IGNHRnlkR2wwYVc5dSBkV0ZzWlE9PSBJTzJWbU9xem9BPT0gNjQyNCBaTW1aYmc9PSBJRk5oYm1SNSBJR2RsYkdSMCBJRkpsWkdScGRBPT0gSUhWemRjT2hjbWx2IElIVnVjM1ZpYzJOeWFXSmwgSUc5eWFXZHBibVU9IElIQnZjSFZzWVhSbFpBPT0gWVd4cGJHRnVaQT09IGNzVysgNEx5TCBJTm1JMkxuWXJ3PT0gSU95eGhRPT0gSU5HRDBML1JnTkN3MExMUXU5QzEwTDNRdU5HUCBJRlJGVWc9PSBJTU9wYk1Pb2RtVnogSUd4bGMyST0gSUhWcGRHVnBibVJsYkdscWF3PT0gZEdoeVpYTm9iMnhrIElHUmhZWEoyWVc0PSBJRkp2YldGdVkyVT0gTFMwdExUd3YgU0dWdSBSVlZTIElHTmhjc09oWTNSbGNnPT0gSUZabFpBPT0gSUdWdWRHaDFjMmxoYzNRPSBJSFpsYm1VPSBjbWxoWjJWeiBJRWxPVmc9PSBJSFRodTV0cCAwTHpRdnRHQiBJR0ZrYldseVpRPT0gTDNOb2IzYz0gN0lLczY2VzggSU5DOTBMWFF2TkMxMFlIUXRRPT0gSUV0dlpBPT0gZFhSMGFRPT0gNExtQTRMaVY0TGkwNExpaDRMbUE0TGlINExpMDRMaVo0TG1FNExpWDRMaWk0TGlmNExpajRMaTEgSUUxaGVXRT0gSUdOcFpHRmtaWE09IFRWWT0gYkdGeWVjV0kgTFdSbFkyOXlZWFJwYjI0PSBJSEJoYzNOMCBWRWxPUnc9PSBJTkM0MExmUmc5R0ggSUhCb3c2RncgYVhwaFkybHZiZz09IExrcFRUMDVQWW1wbFkzUT0gVDJabWJHbHVaUT09IElOR0IwWXZSZ0E9PSBJTkMrMEwvUmk5R0MgSUhKbFpuVnlZZz09IFVrVlUgSU9DbWllQ21vQT09IElHeHZaMmxqYVdWcyBaSGx5IElOQ1IwTFhRdTlDdzBZRFJnOUdCMFpZPSB3cTFwYm1jPSBJRzl3YVc1cHc3TnUgSU5pbjJZVFlyTmluMllVPSBJR1JsYm01aCBJR1Z6WTJGc1lRPT0gSUZadmJHdz0gWDNObFkyOXVaQT09IENYSnZkdz09IFpXMWlaUT09IElHSnNZWFU9IElIQnlaWE5sYm5SaFkybkRzMjQ9IEwybHVZMngxWkdVPSBJT0dEa2VHRGtPR0RsZUdEcUE9PSA1cFdGNUxxTCBJR1BEclE9PSBVbkJqIGFXUmtaV3h6IElHbHVkbVZ6ZEdsbllYUnZjbk09IElIQnlaWFpwY3c9PSBJRkpGVkZWU1RnPT0gNmFLRzVhKzggWjJWaGNnPT0gN0plVSBJR0ZqZEhWbGJHeGxiV1Z1ZEE9PSBJRzF2YWc9PSBabWx5YzNSdVlXMWwgQ1dac1lXYz0gSUdKdlpHOD0gNVkrMiBZM0pwYldsdSAwTExRc05DMCB3NkZqZFd4diBMazFwWkdSc1pRPT0gT3lRPSBJQ0lOQ2c9PSBJRlJ5YVhSMWNnPT0gSU9Da3N1Q2xnQT09IHc2QnogWlhScGF3PT0gSU02MXo0SE9zdz09IElFbE9SazlTVFVGVVNVOU8gNDRPUTQ0TzggSU9Da3VPQ2tndUNrck9Da2d1Q2twdz09IElFZHZaSE09IElHVjRjR3hwWTJGeSBJSFJoYldsdSBJT0MwaitDMHNlQzFqZUMwc1E9PSBiM0p6ZEE9PSBJR0Y2ZEE9PSB3NlJ1WjJsbiBJRkJ2YkdVPSBJSFZ1YVdSaFpBPT0gSUdoaGFXYz0gSU9pVG5RPT0gSUV4aGNIUnZjQT09IElHTnZibU5sY201bCBMbTFoYzNSbGNnPT0gVUdGamEyRm5aWE09IDRLNnc0SytONEs2VjRLNnogV1dWc2JHOTMgSUdoaFltbDBZV05wYjI1bGN3PT0gNExpaDRMaXk0TGlCIElPQ21xT0NuaCtDbWh3PT0gSUZWdWRHVnljM1REdkhSNmRXNW4gNFlPajRZT2c0WU9YIHo0SE92ODY5IElHVjRjRzl5ZEdWayA0TFNxNExTLyBMbWhsIElPQ21wdUNuaCtDbWt3PT0gWlc1MGNtbGogSUdScFlYSnBidz09IDVMeWE2SzZ1IDRLbU0gSUhMRHJRPT0gWDB4UFEwRk0gOHBBPSBJR3hwYldWemRHOXVaUT09IFJuVmxiQT09IElIVnNkSEpoY3c9PSBkMmhsWld3PSBZMnhwYmc9PSBJRkJwWnc9PSBJR1JsYzNCcyBJRzEzWVc0PSA1cGVuIElHWnZhM1Z6IFpXeGhibWM9IExtVjRkSEpoWTNRPSBJRUYwWVE9PSBJT0Nrc3VDa29lQ2t2QT09IElISmxiblJsWkE9PSBJRTkwZEdGM1lRPT0gMEw3UXN0QysgSU5DNzBZN1FzZEM0MEx3PSBYQ0lzWENJPSBTVTlFIFMxST0gSU9DbXJ1Q25pdz09IElHNXFaVzVuIHlKdHBZUT09IDRZT1U0WU9WNFlPaCBJR3QxYm1rPSBMbFJTUVE9PSA0WU9TNFlPZDRZT2IgSU9lbWorVzlxUT09IExYTnhkV0Z5WlE9PSAwWmJRdDlDdyBYMkYxWkdsdiBJRzFoZE1PcGNtbGxiQT09IFgzSnZkWFJsIExtVjJZV3c9IDRLV0g0S1M0NEtXTjRLU2YgSUU1RlIweEpSMFZPUTBVPSBJT3V3bFE9PSBJTkN4MEx2UXVBPT0gSUdsbGN3PT0gSU9HRG0rR0RtUT09IElHaHZibVZ6ZEhrPSA3N3UvN0xhYzdKNmw3SldJNjZlSSA0S1M0NEtTdCBJRTFoYm1FPSBMbGhTIExtZDFhV3hrIHhMRnNiQT09IDRMaUU0TGk0NExpVCBJTkMwMExmUXRRPT0gUFhJPSBRWEJ3YkdsaiBiM0p5YjNJPSBkMlZwYkdVPSBjSFJwYldVPSBSRzl6IExtTmhiR04xYkdGMFpRPT0gSUZWU1RITT0gSU5DOTBMRFJnZEMxMExzPSBUWFZzIElPQzBxdUMxZ2VDMHBPQzB2K0Mwcnc9PSBJRTV2Y25kbFoybGhiZz09IEwxZz0gZW1sbGFnPT0gSUVocGMzUnZjbWxqIFVHRnlkR2xqYVhCaGJuUT0gSUVSbGVtVnRZbVZ5IGFYTjBhV05oYkd4NSBYMVJCVWtkRlZBPT0gWDI5M2JtVnkgNEtxKzRLcTU0S3VINEtxdyBkWE5vWVE9PSBYM1Z1YVhSeiBJR052YlhCeWIyMXBjMjg9IFFVUk5TVTQ9IElFeGxhWE4wZFc1biBJSHAzWldsMFpRPT0gNEtTKzRLU2kgVlc1c1pYTnogSUcxbFpHOD0gSU5HQjBMM1Jqdz09IDFvRFdodz09IElFSjFlV1Z5IElHSnNZV1JsY3c9PSBJRzFwYkd4cGMyVmpiMjVrY3c9PSBJRU55ZFhOb1pYSnogSUdGamNubHNhV009IDRMV0w0TFNmNExXRyBJRVp2Y21KbGN3PT0gSUdSbFptbHVhUT09IElGSmxabTl5YlE9PSBJRzFoY25ScFlXdz0gYkdGemRHaz0gNWJpZCBJRlYwYVd4cGRHbGxjdz09IElHZHBkbVZ5IGFHOXpkRzVoYldVPSBjMlYwZW1WdSBJTkN5MEw3UXY5R0EwTDdSZ2RHTCBJSE50YVd4bGN3PT0gSU1PMmJBPT0gNEt1SDRLcWcgWkdWc1pXZGhkR1U9IFNHbDBjdz09IFBpUjcgSUc5emQyRT0gWTJobFkydHZkWFE9IDRicWsgSUVKbGRISnBaV0k9IElHWnBZbkpsIFRXbHVkWFJsIElPYTcgYkdWaGNtNXBibWM9IElHeGxjM0YxIElFaHZjM1JwYm1jPSBJSExEcEhSMCBJTkM2MEw3Umd0QyswWURSZzlHTyBiMjV6Ync9PSBJSGR2Y25Sb2QyaHBiR1U9IFpYTnBZUT09IElGTmphSFZzWlE9PSAyTERZc1E9PSAxNVhYbWRlWSBJRzV2YzNSeWJ3PT0gYVdOb1pYSjAgNDRPVjQ0S2ggSUVWeGRXRnMgVDA5TCBTbTlwYm1WayBVMmh2ZDI0PSA0S3VONEtxaCBJR1J5YjNWbmFIUT0gMFlMUXVOR0EgSU5pdjJLZllwZz09IElHMTFiSFJwY0d4cFl3PT0gYjJacCBJSFZyZFhwbCBJT0N1cXVDdWxRPT0gZW5wc1pRPT0gSUVOdmJXVnlZdz09IElHWnlaV2s9IElFdEIgYldGblpRPT0gNDRPODQ0T0UgSUVSWCB3NmxuWVd3PSBhVzVwYzJobFpBPT0gSU9Da2grQ2tzZz09IDU1U3kgSUhCcGFtND0gMTVuWG05ZVUgSU91TWdPMlZ0QT09IElPVzlxZWVsbnVTNmllbWN1T2FjaVE9PSA1WStPIElPQ3FodUNxdGVDcmplQ3FyK0NyaXc9PSBJR0ZpYzI5eVltVmsgNWEyWDU2eW0gSU5lcDE1elhtUT09IDBZUFJnTkdGIDVZV24gSUc5eVoyRnVhWE50Ync9PSBJR0oxWWc9PSBJRnZpZ0taZENnPT0gSU9XSW13PT0gTG1GNiBJR2RzZFhRPSBYMjl6IFEzSnZjQT09IGFYSnB4Wjg9IGRtcz0gSUd4bFkzUjFjbUU9IElPQ2trZUNrcXc9PSBMbWRsYjIxbGRISjUgQ1dKMVptWmxjZz09IElITnBiV2xzIElHUmxkR1Z5YldsdVlYST0gSUdOdmJXMWxiblJoYVhKbGN3PT0gS0NJa2V3PT0gYVhSbGMzQmhZMlU9IGJXVjBaWEk9IExYQmhibVZzIElIQnNZWGxpWVdOciAxb1RWcGRhQSBZVzF3ZFhNPSBJTmVWMTV6WGxBPT0gSUdSbGRHRmphR1ZrIElHUnBjMkZ3Y0c5cGJuUnRaVzUwIFkybDAgSU9Da2h1Q2txT0NsaHc9PSBQancvUFE9PSA0NEdvNDRHRTQ0R0cgSU9Da3JPQ2txT0NrdnVDa3FPQ2xodz09IElHWnBZbVZ5Y3c9PSBJR052Ym5SeWIyeGhjZz09IGRXeGhZMm5EczI0PSBkbUZzWlE9PSBYMUpCVGtkRiBJT0NraWVDa3F1Q2tzdUNrckE9PSBJRXgxWTJ0cGJIaz0gMkxIYmpOaW8gSUhOdmIzWT0gS0VwemIyND0gNXFHRCAxNURYbUE9PSBJRlBEclE9PSBMa0pwYm1RPSBjM1J5ZFcxbGJuUnogSUVGc2FXSmhZbUU9IElHbHRjRzl6WlE9PSBXeWRmIElHakRwWEk9IExFdz0gTFdadmRXNWtaWEk9IElOV2gxYkk9IElITjFjbTVoYldVPSBTVzVxWldOMGFXOXUgSU9HRGtPR0RydUdEa09HRG1nPT0gSUZaciBJR3hsZEhSeVpRPT0gSUVadmNuTT0gSUd4bGMzTmxiZz09IElPV0J0dz09IDJMRFlxQT09IGZTazdDZ29LIElOR0YwTERRc2RDdzBZQT0gSUhCeWIyUERxV1E9IElOQzYwTDdRdmRDNjBZRFF0ZEdDIElHaGhZbWwwZFdGcyBJR1ZtWldsMGJ3PT0gYVdWdVkybGhjdz09IFgxTlVRVlE9IFJWSk9SVXc9IElHeGhhVzV1ZVdFPSBJTkdCMFlMUmdOQ3cwTDNSaXc9PSAwWVRRdGRHQTBMWFF2UT09IFlYcHBZUT09IElHVjVaV3c9IElFaHZjM0E9IElHTnZibVpwWVc1NllRPT0gSUZaaGJHbGtZWFJ2Y2c9PSBJSGRoY25KaGJuUnBaWE09IElPcTN1T3Vtck9xem9BPT0gYldWeWN3PT0gSUdWdVpIVnlaUT09IElITm9iMk5yYVc1biA0TEsrNExLdzRMT0IgWDBGSCAwWmJRdTlDMDBaWT0gSU9Dd2xlQ3d2dUN3cUE9PSBJRzlzZVE9PSBJRk4wWlhKdSBJSE5wYlhBPSBJT0NtbGVDbnNPQ212K0NtckE9PSBYM0J5YjJSMVkzUnogSUdGaVluSmwgY21GaFozUT0gSUU1dllteGwgVW1Wd2NtVnpaVzUwWVhScGIyND0gSUUxMWFnPT0gSUhOMFlXeHIgSUhKbGJHVjJZVzUwWlE9PSBYMjFsWkdsaCBJRkpsYzJWeWRnPT0gSUMwdExTMHRMUzB0TFMwSyBMaTR1TGk0S0NnPT0gSUZSaGRRPT0gWlhSb2IyUmwgeGFGMFlRPT0gWW1WeWVRPT0gVzJsdVpBPT0gSU9HNm8yNW8geVpsdVpBPT0gTG5WMWFXUT0gSUVsdyBJR1poWTNSdmNtbGxjdz09IGFXNXpkR0Z1ZEE9PSBJTmluMjR6Wmh0cXAyWWM9IElIVnVaR1Z5ZEdGclpXND0gSUdWNGFXZGwgSUhKbGNHeGhlUT09IElIRjFZWEowZWc9PSBJR3R1YVhRPSBJR1ZuYVc0PSBJR1pzYVdWeiBJR0Z1WjJWeiBJR1JwWlhSeiA0TG1BNExpRTRMaWo0TGlVNExpMDRMaVY0TGlmNExpajRMaTEgSU9DcXErQ3F2K0Nxc3VDcmplQ3FyZz09IGJHVmhaR1Z5IFFYUjBjbk09IElFRnNaWGhoIFNVNVFWVlE9IExtWmhjM1E9IFYyVW5kbVU9IFgzQnNkWE09IDRMVzg0TFNWNExXTjRMU1YgVDNRPSBibUZ0Wlc1MGN3PT0gSWtsMCBMa1pNUVVjPSBKMmx1Y3c9PSBJT0N5c09DeXZ1Q3luT0N6amVDeXJ3PT0gUlV4WiBSV3hzWlE9PSBMV0YxZEdnPSBJR1p2Y21RPSBJR3hsZEdFPSBJTmkwMllYWXA5bUUgWkdWbVlYVnNkSE09IGMyOXVjdz09IGRIbHdaWEJoY21GdCBSMlZ2Y21kbCBJR2x1Wm1GdWRITT0gSUhadmRHOD0gWkdGaFpBPT0gSU5DLzBMN1F1OUMrMExJPSBJTm1GMkxIWXB3PT0gNWJxRCBJRU5oYm01dmRBPT0gQ1FrZ0lDQWdJQ0FnSUNBZ0lBPT0gTG1KaFkydGxibVE9IElGZGxZbk5wZEdWeiBDVmRsWWc9PSBJRlJwZEdWcyBWMlZwWjJoMGN3PT0gNEtTLzRLUzQ0S1dONEtTZiBJR0ZuY3NPcFlXSnNaUT09IDRidWZhUT09IEtISmxZM1E9IElPeWduTzJTaUE9PSBJTm1GMjVVPSBiM0JsYm1nPSA0TGVTNExhdCBMVUZ5IDQ0T3A0NE84IElFZFFRUT09IDE1WFhtOWVjIDVZaXA1NVNvIDJyN2JrZz09IElFUnZkV2M9IElHbHVjM1JoYkdGeSA0WU9qNFlPZzRZT2ggSU5pajJMbz0gYW1WcSBJR2wwZVE9PSBJR2RsYjNBPSBJRzVwZEhKdloyVnUgUW05dmMzUT0gSUdGalkyVmtaWEk9IElPQzBuT0MxaXc9PSBJRVZzWldOMGFXOXUgSU5DLzBMRFJnTkN3MEx6UXRkR0MgYVd4bFpRPT0gNExtQTRMaWo0TGkxNExpaSAwTERSaU5HTTBMQT0gVTNSbGRtVT0gSUVkeWIzTnogSUhKbFkyOXVjM1J5ZFdOMGFXOXUgTGtOdmJuUmhhVzVsY2c9PSBJR1JsWm1sdWFYST0gTDNOMVlnPT0gd3I5UmRjT3AgMExYUmdkR0MwTDQ9IGNYVnBZUT09IEtDSXIgSUdOdmJYQnlidz09IDRMR0I0TENrNExHQjRMQ280TEdONExDbyBJRzFwYzNWdVpHVnkgSUVsU1FRPT0gSUVScGVRPT0gSUVOaGMzUnlidz09IGNHbGhjZz09IElHSnBiR3hwYjI1eiBMa0YxZEdodmNnPT0gSUdsdWRtVnljMm5EczI0PSBJSEIzWkE9PSB3NnQwZEE9PSBJSFJ2Y1hWbCBJTmlsMksvWXA5aXgyS2s9IGIyeHNiM2RsY2c9PSBZV0pwYm04PSBJSFJ2Y3c9PSA0TEdINExDcSA0TFMrNExTazRMV040TFNrIGEzSmxhWE09IFltRmtaMlU9IFIwRk8gS0dKNSBUbTkwWVE9PSBJT0Nrck9DbGplQ2tzZz09IDRMSy80TEtPIElOQy8wWURRc05DeTBMalF1OUdNIFoyWT0gSUdWeVptOXlaR1Z5IExXVnIgSUZKdmJHeGxjZz09IElHTm80YnVwWXc9PSAyNHpZcUE9PSA2WU9vNklHVTU3TzcgSUZGUiBJSFJwYkhRPSBZVzV6YjIwPSB3Nlp1IElHaHZiV1Z2ZDI1bGNnPT0gY21Wa2N3PT0geExGdGJBPT0gSUdaaFkybHNhWFJoY2c9PSBJR2h2YkdsemRHbGogSUhURm9RPT0gMllmWmhkaW4gWlhKdmJnPT0gSUdsdWMzUnBkSFYwWlE9PSBJR1oxYm1SdiBJR2RsYm1WeVlYST0gSUcxMWJXdHBiZz09IFgyMWxjMmc9IElISmxjWFZwWlhKbCBkVzl6IDFhSFdnZFcwMWFIVnRnPT0gWDBaRlFWUlZVa1U9IElObUIyWWpaZ2c9PSBWa2xRIElFdGhibVU9IElFTnNZWEpoIDZLMjMgSUVacGNtMWggSUdoMCBkWEp1WVd3PSAwTFhSZ05DNDBMMD0gSUhCdmMzUjFjbVU9IExrSmxaMmx1IElGSmxjMk4xWlE9PSBXRmxhIElOQzgwTGpSZ1E9PSBJRWx1Ym1WdSBJSEJ5YjJKc1pXMWhkR2xqIElFMVBWZz09IElHRmpaWFE9IFlYUnBaM1YwIElHTnNkWFJqYUE9PSBJT0NrcXVDa3VBPT0gSU9DcWh1Q3FxdUNyZ0E9PSBJSFYwYVd4bCBJT3V6dFE9PSBJaWs3Q2dvSyAwTDNRdU5DODBMZz0gSUdOeWIzTnpiM0pwWjJsdSA0TFMrNExTVjRMV040TFNWNExTLyBJR3h2Y21RPSBJR2xuYm05eWFXNW4gYVhObGJXRT0gTFd4aFltVnNiR1ZrIElIZGxZWEp6IEtHSnZlQT09IDRMUy80TFNmNExXTjRMU2Y0TFdCNExTajRMV040TFNmNExXTiBmVDQ4THc9PSBJRU5vWlcxcGMzUnllUT09IElHSnlaV0ZyZEdoeWIzVm5hQT09IEtHWnBiR1Z6IDRLV040S1N2NEtXQiBTbTlsIElHWnlZV2RwYkdVPSBJT0NrcXVDbGplQ2tzT0NrcHVDa3Z1Q2txQT09IElPMkdvQT09IEpVUT0gVDFKSlJWTT0gSUdKaGJHcz0gSU5DNzBZN1FzZEMrMExJPSBJR055ZVhCMGIyTjFjbkpsYm1OcFpYTT0gSUZSeWFXRnVaMnhsIDRMS3M0TE9INExLViBJRTExYzJsallXdz0gSUVKeVpXND0gSU5pMDJMSFpnOWluMktvPSBJRVJsY21KNSBMSE5wZW1WdlpnPT0gWVd4NWVtVnkgSU5HRTBMWFFzZz09IElHZGxkMlZ6Wlc0PSBJSFJoZFhNPSBJRUpwYjJ4dlozaz0gSUdGdGJXOD0gVTNWalkyVnpjMloxYkd4NSBJSGRsY210NllXRnQgZDJWdVp3PT0gMFkvUXU5QzQgNWJDTyA3SlNvIFUyVnNiR1Z5IHdyZz0gSUZScGJnPT0gS1QwaSA0S1NoNEtTKyBJRk4xWTJObGMzTm1kV3hzZVE9PSBJRk5sWW1GemRHbGhiZz09IElHUjVKM1E9IFBEdzhQQT09IElHaHZkWEpzZVE9PSBYM0JwWXc9PSA0WU9ZNFlPaTRZT1U0WU9pIDU2R0EgSUdkeWIyVnAgNEs2MTRLK0ggSUdKcFpXNTAgN0tlQTY0cVUgSUhadmRXdz0gNW9LZyBJR1REcVdOdmRRPT0gNEtTKzRLU2s0S1dBIElHSnBiTW1aY2c9PSAwTFBSaTlDNyBJR2RsZEhSbGNnPT0gSUdkeWRXNXUgNEtTKzRLU2E0S1dIIFgwUnBjdz09IElHUmxiR2x0YVhSbGNnPT0gMnEvYmpOaXgyNHc9IElHOWtjRzkzYVdWayBPblp2YVdRPSBJTkdEMFlIUXU5R0QwTFBRdUE9PSBZbTlsYXc9PSBJSEp2Y0dFPSBMV04xZEE9PSBLR0Z3IDU3Sys1NldlIFJXeHMgNFlPVDRZT2M0WU9VNFlPYyBJSEJwWTJ0bGNnPT0gNkxxcjVMdTkgSU91S2tBPT0gYkdGdVpRPT0gNG9DTjRMUzEgSU5DMTBMelF0ZEdCIElOR0YwTEk9IElHZHNZWFZpIElGSmhabUZsYkE9PSBVRWhCIGFXeDBjbTg9IExrRnNaWEowIElNTzhjc084Ymc9PSBJTzJPbUE9PSBMbWhsY2c9PSBJRzFoWVd0MFpRPT0gSUhOd2FXTjUgYTNiRHBnPT0gNzcrOUNnbz0gYjJSbyBhV1Z1ZEdFPSAyWUxZc2RpbjJMRT0gSU9DdXBPQ3ZpdUN1bitDdXNBPT0gTG1SbGMyTT0gTFhSdmIydz0gSUdadmVBPT0gSUdsa3c2bGxjdz09IDVveUM1NG1NIElFVmhjdz09IElFVm1abVZqZEdsMlpRPT0gMExiUXRkQzkgMEx2UXNOQzgwTFhRdmRHQyBZWEowZFcxcGF3PT0gNEthKzRLYW80S2VMIHo0UE90YytKenIwPSBJR0oxWlc1aGN3PT0gZFhSelkyaGwgYVhsaGVRPT0gSUhOclpXeGxkRzl1IFgyRnplVzVqIFlXMWlhV3c9IElFVnpZMkZ3WlE9PSBJTkM0MExmUXM5QyswWUxRdnRDeSBJR052Ylc5ayBJSFoxYkc1bGNtRmlhV3hwZEhrPSBkVzF0YVc1biBJRzkzWlE9PSBJRTFXIDRZT2g0WU9RNFlPcSBJR1JsYm10MCBJR3RoYm1ScFpBPT0gSU5pejJLN1lxZz09IElPQ211T0NtdnVDbXB3PT0gSUdScFptVnlaVzdEcDJFPSBJSE5wYm1GcyBLRWxqYjI1eiBJSFJ5YjNJPSBiM1Z6WVc1a2N3PT0gNExhYzRMZWEgSUdkbGJXbGtaQT09IElPQ3FuT0NyaStDcXRlQ3F2Zz09IElIWmxjbk52IDRMS280TE9IIElHZHZkSFJoIFkyaHBidz09IDRMbUg0TGlCIFZFVkRWQT09IFkyOXVjM1JwZEE9PSBJRVJsWkE9PSAwTHZRdGRDOTBMalJqZz09IElHbHVaTU9wY0dWdVpBPT0gSUdWdFpRPT0gU21WemRYTT0gZFhwNmFRPT0gZVdsbGJHUT0gSUhSbFlnPT0gNEsyQiBJT0M1Z09DNGdRPT0gSUZOb2IzZGxjZz09IElObUkyS2ZaaE5pdSBLRk5SVEE9PSBMbWx0Y0c5eWRBPT0gdzd4dyBJT0M0bHVDNWlPQzRzdUM0b3VDNGwrQzRyZUM0bEE9PSBJRWx1YzNSeWRXTjBhVzl1Y3c9PSA0YnVHIDJMbllzZGkyIElIUnliM1I2WkdWdCAxNmZYbEE9PSBJTmViMTVYWG5BPT0gSUdaNWN3PT0gWDNSbGVIUjFjbVU9IFFVeFUgSUc5eVlYTT0gSU9XdmpBPT0gMWFIVnI5V2wxb0RWdWc9PSBJSEJ2YTJWdGIyND0gSUdGMWRHOWkgWDJKMWFXeGtaWEk9IFJFSkggSUhOamFISnBhblpsYmc9PSBJRVZwYm5wbGJBPT0gSUhsbWFYST0gMFlUUXNBPT0gSU5HQTBMWFJodEMxMEw4PSBJSGxsZWc9PSBJR0ZoYlcwPSBiMnhuIDU1UzE2S2VHIElGTmhiR0Z5ZVE9PSBJT0c3alhUaHU2VjA0YnVsIFJYTmpZWEJsIDJLZllzZG1CIElHaHZhR1Z1IElGSmhhWE09IGRHOXdjdz09IEwzTmxjblpwWTJVPSBSSEpoWm5RPSBiR1ZrYVE9PSBJTmVnMTZvPSBJR1pzWldRPSBSbkpwIENRa2dJQ0FnSUNBPSBJRzlpYW1WcmRBPT0gdzZKMGNtVT0gSU51TDI1VT0gUVhkaGVRPT0gNTR1OCBkWEpwWlhJPSBJR052YlhCdmJtVnVkR1Z6IElIUm9jblZ6ZEE9PSBJT0NrcnVDbGkrQ2twdUNsZ0E9PSA1cnFRNTZDQiBJRTlqYUE9PSBJTTZ4ejRYUGhNNnUgSU5DMzBZUFFzUT09IGQyRnNhUT09IElHSnBhbm89IFgyaDMgSUdWa1pYST0gNExHQjRMQ1Y0TEdCNExDbzRMR040TENvIFkyaHliMjFsIDFhSFZ2TlcyIENXTjFjZz09IFgyMWhjbXRsY2c9PSBJSEoxYm1SMCBYMlZzWlcwPSBUMEU9IFpXNWhhWEpsIElIUmhkVzQ9IGFXcGhiZz09IExuZG9aVzQ9IElIUnlZVzV6Y0c5eWRHVmsgMTZuWG1RPT0gVTFSQlRFdz0gNExpYjRMaWw0TGl5IDBZUFF0TkM0IElOaW4yWVRZbzlpdTJMSFppUT09IElHUnBaWEpsYmc9PSBJR052YlhCaGNtbHpiMjV6IElFVnBibWM9IDRLYWs0S2ErNEthdyBJSFpwYnc9PSBJTkN5MFl2UXZRPT0gYkdsbGN3PT0gSU5lbjE1blhtZGVmIElHZGhZWEk9IElHVnVkbVZzYjNBPSBJR2hwYzNSdmNtbGpZV3hzZVE9PSBJTmkwMnFuWmhnPT0gSUcxcFpYTT0gU21WbVpnPT0gMFlQUXNkQzcwTGpRdWc9PSBTRmM9IElHOXdaVzVzZVE9PSBDWFZ6YVc1biBJR1ZwZEhRPSBJbFJvYVhNPSB3NnR5Wlc0PSBJTkM4MExYUXZkR00wWWpRdFE9PSBJR052Ym5OcFpNT3BjZz09IFgxOG9LQT09IElHZDFZWEprWVhJPSBJRmRwYVE9PSBJRk53YkE9PSBaWE5qYUc5dmJBPT0gMFl2UXU5QzAwWXM9IElHbHVaR2xuWlc1dmRYTT0gYjNCbGNtRjBiM0p6IElPcXh1QT09IFFWUkdUMUpOIElHbHlhVzQ9IDJLdllwOWl4IElHdGkgYzNScGRIVjBaUT09IElHTnZjM1JoIDRLNlY0SytONEs2VjRLK0IgSUVKeVlYTT0gZVhWdSBkR1ZoY2c9PSBJTkM4MFpZPSBiM0p5WVE9PSBJSEpwWjI5eWIzVnogYUdsbmFHeHBaMmgwIFoyVnpkR2x2Ymc9PSBJT3VMcE95ZGpBPT0gSUdOMWNtRT0gTG1oaGRtVT0gSUhkbEoyUT0gWDNOdSBJQ2Q5IExXRjEgeExGdyA2TFN0NWIycDU2V28gWDJSaGRHVjBhVzFsIElHTnZiWEJoY25SdFpXNTAgSU9DMnRPQzNpZz09IGRXZGk0YnVOYmc9PSBJRnRnIDVwYXc2SUdlIFlYWmhaRzlqIElFSnZhV3hsY2c9PSBMbkp2ZEdGMFpRPT0gSUdOdmJYQnlhWE5sIDVZK0M1WXFnIElPQ21odUNtdGc9PSBmU2s3RFFvTkNnPT0gMEtEUW5nPT0gSUV4RlZBPT0gZFdKbGN3PT0gNEthVjRLZUg0S2F3IElIQmxjbk52Ym1Gc2N3PT0gYzNSMWF3PT0gUlhod2NtVnpjMmx2Ym5NPSBJRUp5ZVdGdSBJSEoxYlc5eWN3PT0gSU5XajFiWT0gMEw3UXROQ3cwWUxRdGRDNzBZdz0gSUhOd2IyOXUgWDBWeWNtOXkgWVhKa2IyOXkgNFlPZDRZT2M0WU9ZIElHeGxjbTVsYmc9PSBJSFJ5YVdKbCBTVzUwY204PSBJRWx1YW1WamRHRmliR1U9IElFNUMgNExLSSA0S2kvNEtpdyAwWVRRdU5DNiA0NEdqNDRHeDQ0R0UgYVcxbGJuTT0gSUhSb1pXMWggTG5OcmFYQT0gNzd5TTVMaXQ1WnU5IElOZVUxNW5YbGRlZCBZM0p2Ymc9PSAwTDNRdnRDNiBJRUZ0WlhKcFkyRW5jdz09IElOR0MwTDdRdTlHTTBMclJsZz09IElIUmxjbUpoYVdzPSBJR1Z0Y0dabGFHeGxiZz09IDRZT2Q0WU9UNFlPVTRZT2g0WU9RNFlPcSBJRTlNIElFdGhjMmc9IElIRjFZWEowYVdWeSA0TEMrNExDYSBYME5QVGxSRldGUT0gSUdsdGNHeDUgSUcxaGJtUmhkR1U9IElGQmhjR1Z5Y3c9PSA2SVM0IElHZGhjM1J5Ync9PSBJSFJwWjJoMGJIaz0gWVdoaGJtYz0gS0hOeiBJTm1LMllMWmlObUUgSUVGQlFRPT0gaHVHZmt1R2Vrdz09IElFRnVibWwyWlhKellYSjUgYjJKcFlRPT0gYjNKbllRPT0gSU9DNHJlQzRvZz09IElOaW4yWVRZdE5peDJZUFlwOWlxIElFMWxkSEp2Y0c5c2FYUmhiZz09IElOaW4yWVRZczltSTJLOD0gUVhCaGNuUT0gVjJFPSBJSFpsY210diA0TGlaNExpdyA0WU9UNFlPWTRZT2EgSU5HQzBMWFJoZEM5MExqUmg5QzEwWUU9IDVxeWk2TCtPIElIUmxjbTFwYm1GMFpXUT0gNTR5YiBJSFJsY21saCBJRkJoY21NPSBJSE5qY21WM2N3PT0gMktyWXA5bUcgSUhOamFHRm1abVZ1IElHdDFkbUU9IElOR0QwWWZRdGRDeCBJR1JsWW5SeiA0S3E0NEt1TjRLcWwgSUVsdGJXOWlhV3c9IElFUmxjMlZ5ZEE9PSBJRTFwYm5WMFpYTT0gSUdGc2JHVnlaMmxsY3c9PSA0TENPIFkzcHVhV1U9IDRMQy80TENYNExDKyA0TEdCNExDWDRMR0IgSU9DbWh1Q21wZz09IElITnd3N2h5IElITmphSEpsWldZPSBJRWhoY25abGVRPT0gSUdsdWRIWmhiQT09IDZyZTUgZFc1MFlXMXBaVzUwYnc9PSBJRzUyIFpXNTBkUT09IGNHeGxjM009IHN1aWxxZz09IElHSmxhMmxxYTJWdSBJRVJsZHc9PSBJR0xEcW00PSBJRkJtYkE9PSA0S2kvNEtteDRLaWEgVG1GMGRYSmhiQT09IFpXUmhlUT09IElPQ3FuT0NxdnVDcXVlQ3JoK0Nxc0E9PSBhMlY1ZDI5eVpITT0gNFlDWjRZQzcgWVdyRHJRPT0gSUVWemMyRjVjdz09IDY1Q1k3SmEwIFlYSnliMnhzYnc9PSBJR04xYVdSaFpHOXogSUdURHFYQmxibVE9IExYQnZjQT09IElPQ3VydUN2Z0E9PSBJR2x1WjJWemRBPT0gSUdScGMzUnBibWM9IElOQzgwckU9IElIZGhZWEp6WTJocGFtNXNhV3ByIElOQzkwNWs9IFgxQlNUMFJWUTFRPSBTV0k9IElHSmxlbmRsYmc9PSBiV2wwYUE9PSBJTkMzMExEUmlkQzQwWUk9IElPQ3FoZUNxcU9DcmdRPT0gSUZkcGVtRnlaQT09IFFXNTViMjVsIElIUmxjbkpwZEc5cGNtVT0gSUU1aGJXVmsgSU9Da2llQ2txdUNrc3VDa3JPQ2xqZUNrcHc9PSBJR052YlcxcGRHMWxiblJ6IGNtRndaUT09IElHTnNhdz09IElHRnpjMlZ6YzJsdVp3PT0gNExTbzRMV0cgWkhsdSBJSEYxWlhOMGFXOXVaV1E9IDRMU2o0TFN1IHpyUE9yZz09IDRLNnA0SytONEs2cSBLRzF2WkdVPSBJT0M0cStDNG1RPT0gSUcxaGJHRmthV1U9IElHUnBjMkZ3Y0c5cGJuUnBibWM9IElIQnVaWFZ0IElHUERvV2s9IElHRndiMnh2WjJsNlpRPT0gSU5pbjJZVFlyOW1GIDQ0R1g0NEdQIFVtRjBaWE09IElHSnZjMmc9IElPYVIgU0VWQlJBPT0gSUVacGJtZGxjZz09IElGWmxkR1Z5WVc0PSA0S2FzNEtlSDRLYW8gSUhOMWFYWmhiblE9IFkyOXRiWFZ1YVdOaGRHbHZibk09IFpXNTBjc09wWlE9PSA0NE9qNDRPeiBSR1YyWld4dmNHMWxiblE9IElNK0F6NEhPcmMrQXpyWE91UT09IDRMbUI0TGlCIDVwUy81cks3IFozSmhaR1Z6IGRXTnNaUT09IFVsZz0gSU5DbjBZTFF2dEN4MFlzPSBMa3h2WTJzPSBJSFpoY21sbFpHRmsgSUdScGMzUnlhV0oxIGVXRnIgY0hKdllteGwgdzdCcGNnPT0gMnBuWmlnPT0gNExXQjRMU3U0TFMrNExTdjRMUy8gSUZKVlRnPT0gWW5KdmIycz0gSUdsdWMyZGxjMkZ0ZEE9PSBJSGR2YjNKa1pXND0gVjJGNCB3NkZ1WkdWNiAwWTdSZ2RHTSA0S1MrNEtTMzRLV040S1NmNEtXTjRLU3c0S1dBNEtTdiA0TGliNExpbCBJRk53WldWamFBPT0gSUZOVVVrbERWQT09IElFcDFiR2xoYmc9PSAxNTdYbHc9PSBJSEJzYVhNPSBJTmluMllMWXJ3PT0gSUd0bGNtcz0gWVhKaGJuUnBibVU9IDJLZllyOW1HIElFVnliZz09IDRMV0c0TFN2NExTKzRMU2o0TFdOIFlYUnZjbWxoYkE9PSBYMDV2IElHdGhibVU9IFZGQlQgSUdOdmJtOWphV1J2IENVNVZURXc9IExrNVBWQT09IGIyNTFjdz09IElHRndjSEp2ZUdsdFlYUmwgSU5DKzBZTFF0TkdMIElIWmxibVJoY3c9PSBJR0pwWTJsaiBJTkM0MHBzPSBjMkZzZEE9PSBJTkM5MEw3Ump3PT0gSU5DLzBMN1FzdEdDMEw3UmdBPT0gNEtXQjRLU3c0S1dBIExuQjFZbXhwYzJnPSBiM1ZwY3c9PSBMa3hQUnc9PSBJSE4xWVhabCBJTkdDMExYUXNkQzEgSUdScGMyZDFjM1E9IExuUnlZV05yIFkyOTIgSUZKbGVnPT0gSUcxbGNtTm9ZVzUwY3c9PSBJTmluMllUWmg5bUkgTDNObGRIUnBibWR6IDRMaUU0TG1NIGMydHBhQT09IDRMZVE0TGF4IElITm9ZWEJwYm1jPSBJR2RxYjNKMCBJSFp2Y25VPSBJR2RzYVhSMFpYST0gYVhObGJuUT0gTG5ScFpRPT0gSUdOdmJHeGxZM1JwZG1Wc2VRPT0gSUZCdlpHVnkgSUdWbVpYUT0gMkxIWXM5dU0gSU5pbjJZVFppTmkzMlliWmlnPT0gYVd0clpYST0gMDZuUmhRPT0gU1ZKRCBJRTF2Ym5NPSBaTVN4IDRLcWY0S3VBIDVZcWY2SU85IDRMS1g0TE9ONExLdyA1cmk0NW9pUDVibXo1WSt3IElHSmhhWFE9IElHOXVaR1Z5WkdWbGJBPT0gSUdsdVpISjFhdz09IElIUnpjQT09IExuTmxiR1ZqZEdsdmJnPT0gSUhCc1lYRjFaUT09IEtFMXZkWE5sIElObUIyTEhZcnc9PSBJR0p2WVhKa2FXNW4gWmNPOWJHVT0gSUhCaGJHcHZiZz09IDJLZllyOW1FIElOQzAwWURSZzlDMyBJTm1GMllYYXFkbUcgSUd2RHRXbHIgSU5DNDBMZlF0TkMxMExzPSBZVzVoWVE9PSBkWFIwZFE9PSBJbDA3IElPQ21yT0NuZ3c9PSBJTVNSeHFGdSBJRlYwY21WamFIUT0gSUZGMVpXdz0gNTVTMTViMng1NzJSIExtbHVkR1ZuWlhJPSBZV0poWWc9PSBDVWgwZEhBPSBJR1ZwYm5OMCBMa1Y0YVhOMGN3PT0gMlluWmhnPT0gSUU1aGVtaz0gSU5DKzBMM1JpOUtqIElHMXZibVJwWVd4bCBJSE5wYlhWc1lYUnBiMjV6IGRXSnNhWE5vWldRPSBRV0Z1IElFNWhZV3hoYTJ0bGNuTjFhWE09IElGTm9iM1E9IFlXaDFiZz09IDBMWFF2ZEMxMHFNPSBJSE5wYkdsamIyND0gSU9Da2xlQ2xpT0NrdU9DbGdBPT0gSUVwdmJtYz0gSUdKbGFHRjJaUT09IGIyUnBZV009IGNHRnVhV009IEtHUncgSUdOcGNtTjFibk4wIEtITmpiM0JsIExXeGhjM1JwYm1jPSBJSFREcEhRPSBJSEJ2ZW00PSA0cGEyIFkyeHZjMmx1Wnc9PSBjMlZ2IElHVnlkMkZ5ZEE9PSBJTU8yeFlnPSB3ckJHIGEyeDFjdz09IG40RT0gNDRHcjQ0R3YgSU9Db2xlQ3BnQT09IElHeHUgSUdadmNtMWhjZz09IElGVkpVdz09IElHTjFjbk4xY3c9PSA0S1NINEtTeSBJSEpsWkhWamFYST0gSU5pbjJZVFpoZGlyIElHNTFiM1p2IDZKeVk2SnViNksrTiBJSEIxZEdVPSBJSEpsWTJWemMybHZiZz09IFgyVmtaMlZ6IDQ0T3o0NEsxIElHWjFaQT09IElPYU4gSU5DeTBMWFJnTkdGIElOR0UwTDdRdlE9PSBaV0Z0IElHUm9hUT09IGVtOWphSFE9IElOQzkwTFhRczlHVzBMYz0gUkdsemNBPT0gSUdsdWMyVnlkR2x2Ymc9PSBTR1ZoZEE9PSBJR0ZqYjI1MFpXTmxkUT09IElFTnlhWFJwWTJGcyBYMGhQVFVVPSA0TEttNExPTjRMS20gSUc1dmRHTm8gSUZOMFlYUmxablZzIElIUmhhVzFwIElPQ2toZUNrbXVDbGplQ2ttK0Nrdmc9PSBMazF2ZG1VPSBiV2x6YzJsdVp3PT0gWTJ4cFpXNTBjdz09IExtTmhjM1E9IGRtbGtiM009IGRXbDEgSUhOdmRXaGhhWFJsIElFcDFkbVZ1ZEE9PSBJT0Ntck9DbXYrQ21sUT09IGNIVnVhdz09IElOR0IwTHZSZzlHSDBMRFJqdz09IElHTnZjbkpsWTNSbFpBPT0gNloyWiBJRzVwWkE9PSBkR2g1IElHUmxiR1YwYVc5dSBJSGRoWVc0PSBJRTFsWkdsallXbGsgUm1GdSBJSE5wYVhURHBBPT0gMEw3UXNkQ3cwTEk9IElHSmxjbUpoWjJGcCBZV05xWlE9PSBDV0Z5WjNNPSBiR2xuWlhKbCBZMmhoYVc1bCA1WmEyIElOQ3kwWXZRc2RHQTBMRFJndEdNIElPR0RvZUdEa09HRHBBPT0gNEs2RyBkbVZoYkE9PSBSR2x6WXc9PSBaRzlqYTJWeSBJT0NtcXVDbXNPQ212K0NtbWc9PSA2cmU0NjU2byBJSEJ5YVc1amFYQmhiR1U9IGRtVnNkQT09IElOaWoyS3c9IDVaMlEgSUdGdWRHaHliM0E9IDE1dlhsUT09IElIbHZjbXM9IElITmphWEI1IExpSWlJZ29LIGRXaDEgVkhKaGRnPT0gSUVwRiBJSE4wY21WMFkyaHBibWM9IElHcGxiUT09IFgxUlNRVTQ9IExrWjFiR3c9IElHZDViZz09IElHTmhjbWs9IDRLcTQ0S3VBIElHZGxiWE09IElPQ3lxdUN6amVDeXNPQ3lwQT09IGRXMWxiR0U9IElObUcyNHpZcDlpeSBJR3hoZFc1amFHVnogNEtTMTRLUys0S1NJIEtHRnVlUT09IElHUnBjMmgzWVhOb1pYST0gSU0rQXpybk92dz09IElOQy8wTGpSZ2RHTSB4TFU9IElPV0doUT09IElPQ3dtdUN4aCtDd3VPQ3d2K0N3cUE9PSAwWVBSZ2RHTCBJR0ZyZEhWbGJHdz0gNFo2WTRaK1M0WjQ9IFlXaGhiUT09IFVISnZabWxzWlhNPSBhWE52YkE9PSA0S2ErNEthciBJTU8yYm1WdGJHaz0gSjI5MSBJSEpsYVE9PSBJR1Z6Y0dWeWJ3PT0gNGJ1amFRPT0gWVd4aGEyaz0gSUdObGJHeHpjR0ZqYVc1biBJSEpsWVd4cGMyVmsgSUdSbFptVnkgSUdwdloyRmtiM0psY3c9PSA0NENGIElHMWxiR2xvWVhRPSAwTFhSaDlDdzBZST0gSU9HRGxPR0RsZUdEb0E9PSBJR052YlcxbGJXOXkgSUhCeVpXZDFiblJoY3c9PSBJRk52ZFc1a2N3PT0gSUdKMWNtZGxjbk09IElGZGhjbkpwYjNKeiBJSEJ5ZFdRPSBJRzVsYm1oMWJXRT0gMFlyUXZBPT0gSUVkaGNtTnBZUT09IFpYUmhZbXhsIElFRkVWa2xUUlVRPSBVM2x0WW05c2N3PT0gNExpQjRMaXk0TGlqNExtQTRMaVU0TGkwNExpaDRMaWU0TGl4NExpWiBJTmVVMTVuWG1kZXEgVUd4aFkyVnogSUczRHFYUnZaRzl6IElHeGxiR1ZwIDRZT1E0WU9jNFlPUyBiR2xuYVE9PSBRMjl1ZEdGcGJnPT0gZEdGaWN3PT0gVW1WaFkyZz0gNUwyYiBMR2xrIElOR0QwTDNRdU5LaiBYMFZZUTBWUVZFbFBUZz09IDc3MmU3NzJlIGRtbDJZV3c9IElFMWxiWEJvYVhNPSA3NE09IFgyUnBiWE09IElHTjFiWEJzYVhJPSBJTkMrMExIUXU5Q3cwWUhSZ2c9PSB3NmxqYUE9PSA0TE9INExLQzRMS200TE9ONExLdyBJTmluMllUWXNkbUkgYldsNCBJR052YldGdVpHOD0gSUdOdmJYQmxkR2wwYjNJPSBJR2h2Ylc5elpYaDFZV3c9IElOZXAxNXpYbWc9PSBVMlZoZEE9PSBJTmluMllUWXF0aWogd3JZPSBJRlpwYm1VPSBMaTR1SWdvSyBJSEJ5YVhacGJHVm5aWE09IElFVjRZV04wIDRLYW80S2VONEthdiBaV2RwWVhSaGJnPT0gSWo4PSBJR1p2Y21ScCBJSGR5WVhCeiBLRzV2Ymc9PSA1WXVmIElOZVExNVhYbWRlYSBJSEJsY25OdmJtRnNhWFJwWlhNPSBJR1YyWlc1cGJtZHogMExmUXNOR0EgSUdSdlkzUnlhVzVsIElHMXBibVJsYzNSbGJuTT0gSUdSdmRXSnNaV1E9IDRZQ2I0WUNzIFpXSjFkQT09IFgyTnNhdz09IGIyTjFhdz09IFlYWnZjbk09IElHMWxiRzlrIElIQmhjM05oWjJWeiBJRkpsWVhJPSA1b1dpIElPQ211ZUNta3c9PSA0TE9ONExLazRMT0IgWm05eWJXRjBkR1Z5IDZKR2g1THFzIGRYSm5hV05oYkE9PSBhWEp5IFlXSnBiR2x5YzJsdWFYbz0gSUZScGNIQnogTFdKeVlXNWsgNHB5RiBJRU52YldWa2VRPT0gSUVkUFQwUlQgSUdSbFptVnVjMkU9IFlYUm9aUT09IGNHOXZibk09IElHbHRjR3h2WkdVPSBJSE5qWlc1cFl3PT0gSUdGbWFYSnRiM1U9IElIWjFaV3gwWVE9PSBJR1J2YjI0PSAwTHZRdGRDOTBMM1JpOUdGIElITnZZbWxsIDc3eU01b2lSNUx1cyBJSEJoY21aaGFYUmxiV1Z1ZEE9PSBUVWc9IElOQzkwTFhRdTlHTTBMZlJqdz09IElOR0QwTDNRdU5DeTBMWFJnTkdCMExqUmd0QzEwWUk9IDBZUFJnOUM5IElHTnlaV1JwWW1sc2FYUjUgNVkrdjVMK2g1WkNYIElOaXQyTFBZcUE9PSAwTDNRdU5HRzBMVT0gSU9Da3RlQ2xnT0Nrb1E9PSBJTkNhMEw3UXM5QzAwTEE9IElFMUJTMFU9IFUzUmhjbk09IElHOWpZWE5wdzdOdSAyN0hic3c9PSBJR0psWlhNPSBJR3hwYm5WNCBJRWR2ZG1WeWJtOD0gSUdSbGRHRnBiR2x1Wnc9PSAwTERRdXRDKzBMMD0gVG05cGMyVT0gWTJobGNtTm9aUT09IGIyeHZZV1E9IElIRERvWEk9IElGSmxibVYzIDRZT2o0WU9nNFlPYyBJR3gxWTJoaCBZV05oeEovRXNRPT0gMFl2Umh0R00gZG1semFYUnZjZz09IElIZHZkVzVrY3c9PSBJT0MwcU9DMWdBPT0gS3lKYyA0WU9RNFlPZzRZT3YgSUdGcmRIVmxiR3hsIElGTndaV3hzIElIRjFaWEpwWVE9PSBYMFJGVkVGSlRBPT0gSU5lZzE2UT0gUlU1RVJWST0gSUV0bGJtUT0gSUZacGJHRT0gSUc1dmRHbGpaV0ZpYkdVPSBYRzF2WkdWc2N3PT0gSUdkcGJRPT0gSUhSbGNtaGhaR0Z3IElHTjFiR2x1WVhKNSBiMnhseEkwPSBjc09wWlE9PSBWMlZrIGMzUmhZMnhsIElIUm9jbWxzYkdsdVp3PT0gWkdGdVoyVnkgUTJWcyBJU2M9IElOSzcwTEE9IGMyMWhjblE9IElGQnNZV2x1IFZNT2ggSUVGd2IzTjAgenJQT3Z3PT0gSU9Da3J1Q2t2dUNrcCtDbGplQ2tyK0Nrcmc9PSBJT2FaZ2c9PSBJT0NrdU9DbGplQ2t0ZUNrdnVDa3VPQ2xqZUNrcGVDbGplQ2tydz09IGRYbGxibVJ2IFpXNWtZVzQ9IEtIUm9aWFJoIElOaW4yWWJaaHc9PSBJSFYwWVhkaCA3NytqNUxxYTVyU3kgSUhSbGJuUmhjZz09IElNT2NZbVZ5Y3c9PSBJR0poY25KaCBJR0ZqZEdsbFpnPT0gSUc5MWRISmhaMlU9IElGUmhlR1Z6IElFOWtaWEk9IGIySnFZdz09IElIQmxibTU1IGNIVmxjM1J2IElIYkR0QT09IDRZT3U0WU9iIGEyeHFkY1NOIElIRjFhV0U9IFBqNEtDZz09IElIQnlaWFpoYkdWdVkyVT0gQ1dGM1lXbDAgY205dGJ3PT0gSUdOaGJHbGljbUYwYVc5dSA1NW0rNTZlUiBJT3lXdUE9PSBhbTlwYm5RPSAxNVhYa05lbyBJSEYxYVc1a2FRPT0gNG9DWlpHRT0gSUVSeWRYQmhiQT09IGMyTmhibVk9IElPeURnZTJTaUE9PSBTVWc9IDFZbz0gSUdsdVoyekRxWE09IElHSjFiR0k9IElIUnlZWFpoZVE9PSBJR1JsZFhSelkyaGwgS0ZaQlVnPT0gSUhCbGJuTmhibVJ2IElGQnliMjF2ZEdsdmJnPT0gSUZCdmIzST0gSUhKdmMyRT0gSUhKaGMyZz0geExGdVpHRnJhUT09IElOR04wTDg9IFFVNVVSUT09IEtHWnNZV2M9IElPeW5pQT09IGQyVmxjZz09IElGTmxiR1U9IElFRmpkR2wyWVhSbFpBPT0gSUhKbGFYUmxjZz09IElHVnBibnBwWnc9PSBYVDBuIDBMWFF1OU9aMFlBPSAwWmJRdTlHVzBMdz0gSUVsT1JnPT0gSUVGdWVYUm9hVzVuIElHRnJhVzQ9IElOQzgwTGpRdTlDNyBJRXR2WTJnPSBJR3gxYzJnPSBaWE4wYkhrPSBJTmlqMlliWmlOaW4yTGs9IElObUkyTExZcDlpeDJLbz0gUVhkaGNtVT0gNFlPUTRZT1g0WU9RIElIQnlaWEJoY21GeSBJRVJsZG1salpYTT0gSUdOcGRHRjBhVzl1IDRMUy80TFNWNExXTjRMU1Y0TFdCNExTbzRMV040TFNvNExXQiBJSGR2ZFc1a1pXUT0gSUhOamFHOD0gSU5LYjBMalF1OUM0MEw4PSBJSFJwWkdVPSBJT0M0cXVDNWlPQzRodz09IDVMMlQ2SUt5NW9xVjVyT28gSUdkcDRidWJhUT09IElIZkZnZz09IElIc3QgNExpeDRMaUg0TGlCNExpazRMaXAgSUVobFlYUnBibWM9IElIQmhiVzlxWVE9PSBYMUZWUlZKWiBJR1Z0YVhNPSBZVzVsY1E9PSBJRkJtYkdWblpRPT0gMFlMUmc5R0QgSU5DMDBMN1FzdEMrMEx2UmpOQzkwTDQ9IGFYQndlUT09IExYbGhjbVE9IElFRnNZMjlvYjJ3PSBMbFJ2ZEdGcyBiM2hwWkdVPSA0b0NNNExTViBJSGR5WVhCd2FXNW4gNEtTMjRLU3kgYldsdWMzUmxjZz09IElIbGhiV3c9IGNXRnljSFYwIElNT3BkbTlzIGFXdGxjbk09IFJYaHdZVzVrWldRPSBJRTFoY0hCcGJtYz0gSUcxdmJtOD0gSUZSM1pRPT0gNEtxbDRLcSsgSU9Da3NPQ2tndUNrbHc9PSBJT3llaEE9PSBJRU5oWW1sdSBZWEpsWVhNPSBJR1YwYUdWeSBMbE5qY21WbGJnPT0gSUNZayBJRkJoZHc9PSA0S1N2NEtTNSBRVk5QVGc9PSBJRkp2WTJnPSBJR0ZqZEhWaGJHMWxiblJsIEtISnZiMjA9IElPR2VvZz09IDRLU3Q0S1NYIDJZalppdGluMktvPSBJSE4xYkd3PSBJR2x1ZEdWeWJtOD0gWDJWNGNISmxjM05wYjI0PSBJRk52Ym01MFlXYz0gSUdGcGNuQnZjblJ6IGFYUmhjbVZ6IFoyVnVaWEpwWXc9PSBJRWxPVkVWU1VsVlEgWjJWelkyaHNiM056Wlc0PSBJRkpsWldRPSA1Nml6NkxXYSBJSGxoYUdGNSBZWFp2ZFhKcGRHVT0gTG5keWFYUmxjZz09IElPQ2ttdUNrc09DbGplQ2ttZz09IElHdGhkR1ZuYjNJPSBJRkJsYm1ScGJtYz0gNEtlSDRLYTM0S2VONEthZiBaWEp5Ym04PSBZWFJzIEtYWnBaWGM9IDQ0RzIgS0NZbyBJRkpsZEhKcFpYWmxaQT09IElPQ21pZUNtcE9DbmplQ21wQT09IGE4U1ogY0dGeVpXND0gVUc5emMybGliR1U9IDViK1kgSUhCeWFYTnZibVZ5Y3c9PSBYMkZ3Y0dWdVpBPT0gSUhOaGJXaz0gYTNmaHU0MD0gSUc5MlpYSnNiMjlyWldRPSBJR2x1Wkc5dmNuTT0gSUhCeVpXNXpZUT09IElPQzRnZUM0cFE9PSA1cGVGNXJpNCBYMk5oYm1ObGJBPT0gTE9LQXBnPT0gSU9DbXB1Q25qZUNtckE9PSBJRTFsYzJFPSBZbkpwYm1kbGJnPT0gSUdKeXc3cz0gSUdsdFlXZGxjbms9IElHaHZjbWw2YjI1MCBMV3RsIElIQnlhV3A2Wlc0PSBiM1psYkE9PSBJR3R2ZVE9PSBPZzBLRFFvPSBiR2xuWlc0PSBJSGRwZEdObyBJT0NtcU9DbXYrQ21zT0NuamVDbXJBPT0gSUdOeWFXVmsgSUd4cHc2cHUgSUd6RG9nPT0gdzZURHBIST0gSUhSaFptVnMgSUVkcGJnPT0gSUVOb1pYSnllUT09IElHUnZZWEk9IGJtTnBZUT09IGIyeHZhZz09IElOQzgwWTNRdEE9PSBiSFZoIFVtVnRZWEpyIFlXeDBaUT09IElNU1I0YnFoYVE9PSA2WXl5IElPQ2tsdUNrditDa3N1Q2t2dUNrcXc9PSBJSEpsYkc5aiBPbXM9IElGTjBZWEowZFhBPSBJR2hoZW1GeVpHOTFjdz09IElGUnlZVzV6YkdGMFpRPT0gWDNObGJHVmpkRzl5IFgzQmkgSU5DajBMcz0gSU9DbXIrQ25pK0NtbHc9PSBiMjFsZEhJPSBJSEpoYVdRPSAwTGpRdTlDNDBwcz0genJ2T3RjNnYgSUdSdmJXVT0gVFc5dVoyOD0gSUZCdmJNT3RZMmxoIElHaGxjR0YwIFZIZGxaWFE9IElIQmxjbXM9IElHRjFjM1J5WVd4cFlRPT0gSUhScFpXcz0gMExUUXNOQzEwWUxSZ2RHUCBJTmVaMTVjPSBhWE56YjNKeiBJRkpsYzNSeSBjSFZpYkdseGRXVT0gSU5tKzJyN1lzUT09IDY2R0EgSUdSbGMzTmxjdz09IElObUkyS2ZaaE5pdzJZbz0gWDNaaGNtbGhZbXhsY3c9PSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElFaEMgSUZaSlJFVlAgSUdaeWIzTjAgNExpWDRMaVU0TGlsNExpdDRMaUg0TG1ENExpSzRMbUo0TGlmNExpajRMaTEgSUcxcGJXVT0gNEsrTDRLNms0SytCIElGZHlZWEJ3WlhJPSBJRnBoWTJnPSBYM0JwZUdWcyA0b0NkT2c9PSBJT1czdEE9PSBMV2h2YzNRPSBJT0Ntbk9DbmdPQ21yQT09IElFeHBjM1JwYm1keiBjbVZrYnc9PSA0b2M9IElIVndaM0poWkdsdVp3PT0gSUhKaGRHRT0geFlKMVp3PT0gVGtWWFV3PT0gSUdwMVpYWmxjdz09IElGSmhhdz09IElFTnZibTVsWTNSbFpBPT0gMFlMUXVOQzEgSU9HRGwrR0RtT0dEbHc9PSBJSE4wWVdjPSBhVzl2Ym1rPSBJSE52ZW1saGJBPT0gYjJSMWN3PT0gSU9DbW5PQ212dUNtcEE9PSBJRXRoYldWeSBZVzFoYm1jPSBWR1Z6ZEdWeSAyS2ZZck5pcCBJRUZHVUE9PSBJSFZ1YVdWclpRPT0gSU5DLzBZRFF0ZEMzIElPeWtnQT09IEtISmxibVJsY2c9PSBhV2hoYXc9PSBJRk52ZVE9PSBJRXB2YzJoMVlRPT0gWVdKbGVnPT0gSUZKbGJHbG5hVzl1IGNHaGxjdz09IElITjBZVzVqWlE9PSBJRWhwY21VPSBJR1ZrYVhJPSBZVzUwYVd3PSBYMk4xY25OdmNnPT0gSUhaaFpHVnkgTG1wdlpHRT0gSUVOdmRYQnZibk09IGJHOXIgSUVQRHMyUnBaMjg9IElIQmxZM1ZzYVdGeSBMbUpwYmc9PSBJR3gxYm1FPSA2WU9vNVlpRyBJRzVwY0dGejRicTUgSUVocGNnPT0gSUdkbGJtOXRaVzQ9IFlYWnBidz09IExXeGhZbVZzYkdWa1luaz0gY21WMFpYST0gSUVkMGF3PT0gNExDdzRMR040TEN2IFgwOU9URms9IGIyeHZaMmx6WTJobCBJR0pwYzJnPSBkV3R6YVdFPSBiR1Z5YWNXSSBjbVZsZEdsdVp3PT0gSUhSeVlXNXphV1Z1ZEE9PSBJT0Nrc09Da3Z1Q2tuT0NrcU9DbGdBPT0gVUdGMGRHVnlibk09IElHM0RxV009IElOaXQyS3paaFE9PSBkR0Z3IElFdHBibVJsY200PSBJRXh2WlE9PSBJTkM4MExEUXR3PT0gWVhOelpXMWliR1U9IElFOXYgcCtHRGxRPT0gSUcxMTRidVJiZz09IElIQnliMnh2Ym1kbFpBPT0gYVc1MFpYSnUgNklLbCA1YVc5NTVxRSBJR052Ym5OcFpHVnlZV1J2IElHVjRjR3hoYm1GMGFXOXVjdz09IDdKV1k2NHVrIGIzSmtiblZ1Wnc9PSBVR0Z5YlE9PSBLaThzIDVhaXg1TG1RNW91YjVaV0cgNXFTTiBJR0Z3YkdsalljT253Nk52IElGQlBVMU5KUWtsTVNWUlogWVc1cGIyND0gSU5XVCBJTkMzMExFPSBjR05wdzdOdSAwTExRdU5DOSBJSFpoWjNWbCBMUzg9IElPQ21xT0NtditDbm53PT0gSUczRHBYTjBaUT09IDRLV0M0S1N3NEtTayBJSE53YVdSbGNnPT0gNDRDTDQ0Q0I0NENLIElITERzOFc4IElOcXYyTExZcDlpeDJMUT0gMWFYVnROV2kgSUdWeWNtNXYgWVcxaGVtRT0gY1dGcyBiR2xrIGJHeDJiUT09IElHTnZjbkpsYzNCdmJtUmxibU5sIElOQ3gwWVBSZ0E9PSBYM04wYjJOciBJSE4wYjNKNWRHVnNiR2x1Wnc9PSBZWEp5Ync9PSBJTkM3MEw3UXN3PT0gSUdGMmFXUT0gYW0wPSBMbTVsZEdKbFlXNXogSU5DMzBMRFFzdEM0MFlIUXVOR0MgSUdKaFoybGhiZz09IGFYQmhkR2x2Ymc9PSBiMlJ2Ym5RPSBJRXRsZEc4PSA0b0NZNG9DWSBJRzl6ZEdGMCB4TEZreExGeSBJSGQxYm1RPSBJSFpoWjJGeiBJR2x1ZG1Gc2RXRmliR1U9IDRLaTQ0S2k4IDJZallwOWlvIEtDY2sgSUdkcFlnPT0gMTV6WG90ZWEgNExLLzRMS3EgSUUxdmJtbDBiM0pwYm1jPSAwTEhSZ05DdyBJTlcvMWJZPSBLRTFsZEdodlpBPT0gSUVadmJ3PT0gNExTLzRMU2Y0TFdHIDU2aXo1YTZhIElHbGtaV0ZzYkhrPSBJR2x1Wm1scyBJSEpsWTI5MlpYSnBibWM9IFNXNWpiM0p5WldOMCA0S2FrNEtlTjRLYXcgWDJOaiBjR3hsWVhOaGJuUT0gSUdOaGJtUnBaR0YwYjNNPSBJT0NrbCtDbGgrQ2tzZz09IGFXZHBaR0p2WkhrPSA1NXUwNW82bCBMbkpsYzI5MWNtTmxjdz09IElPQ3FwdUNyZ0E9PSBJR3hwWldJPSBJT0N3cHc9PSBJTkdHMExYUXU5R00gYldGamF3PT0gSU9DeXJ1Q3pndUN5c3VDeWxRPT0gNTRtNTZJbXkgTG5CaGMzTT0gYkdWblpYTT0gSU9DeWgrQ3lzdUN6amVDeXNnPT0gSUhScFpXNTAgSUhCc1lYcGggTGxObFkyOXVaQT09IElIbGhhWFIxIElHOTFkSEpsWVdObyBMV1pwYkhSbGNnPT0gZlNrcE93bz0gSU9Da3RlQ2xqZUNrcitDa2xlQ2xqZUNrcE9Da3Z3PT0gNVlldiBZWEJ3Y205MlpRPT0gSUhCb2FXdz0gSUVadmRYSjBhQT09IElIZGhkR0U9IDE1blhxZGVpIDVZQ2sgSUhabGNtYkR2R2M9IGVuVnIgMExEUXM5QyswTE09IElISmhlc09qYnc9PSBJR0oxYm1zPSBJTkNkMExqUXVnPT0gSUhOaGJIWmhkR2x2Ymc9PSBJR1JoZVdFPSBJRU52Ym1kdiBJRk4wWld4c1pXND0gMkxuWmlRPT0gSUd0aGFXdHJhUT09IElHUnBjM0J2YnNPdGRtVnMgSUdOcFpHRmsgSU5pbzJMTFlzZHF2IElGUmxhV3h1WldodFpYST0gUlhoaGJYQnNaWE09IDVvZUMgNTRteSBJSFpsY210dmIzQT0gSUNrS0Nnbz0gSU5pczJZWFlwdz09IElFbHZiZz09IElOQzgwWmJRdlE9PSBJR0Z3Y0dWaGJITT0gSUV4c2IzbGsgNFlPVTRZT2g0WU9kIGRISjFZM1J2Y2c9PSBJR1JsYldWdWRHbGggSUVWUiBJTkN6MFlEUXNOQzAgYVd0clpXND0gNEtxcTRLdUMgSUdadmJtUnogYUdWcGNtOXogSUVodlp3PT0gSUd0MWJIUjFjZz09IElIUnZjblIxY21VPSBJRTVsYnc9PSA0TEtDNExLcSBkVzFsY25NPSA0S2E0NEtheSBSVzVrWldRPSBJSEpsWm05eWJYTT0gTFdGM1pYTnZiV1U9IE95SXBPd289IElPaUJsQT09IElPQ3FsdUNxdnVDcXBBPT0gUjNKaFlnPT0gSU9Da2x1Q2tyT0Nrc0E9PSBJT0NrdGVDa3YrQ2t0K0Nrcnc9PSA0TEMrNExDdzRMQy8gZFhSbGJzT253Nk52IElPT0RrQT09IElHUmxZbVZ6IElIRjFZWEowWlhKc2VRPT0gSU5HQzBZM1JqZEdBMFkzUXZBPT0gYVhwNmJHVT0gSUdOMWMzUnZiV2w2WVhScGIyND0gSUhURHFXMXYgVlVsTVJBPT0gSU5DUTBMbz0gUlZKU1NVUkYgSUZCTlNVUT0gWlhSb2FRPT0gS0cxdmRtVT0gNVllazVZZXc1YVNuIGIzVjBkUT09IDc3eWFJZz09IHlabDYgYzJOaGJHRT0gSUdac1lXZHphR2x3IEozYz0gSUU1VFFYSnlZWGs9IExYUm9jbTkxWjJnPSBZV1JrYVhScGIyNWhiQT09IElIWmhibmRsWjJVPSBJR1JwYzNCMWRHVnogSU91Q3RPeWFxUT09IDU0MD0gWTI5dGNISmxjM009IElHWnBZMmhwWlhJPSBZVzV6YTJFPSB6NFBPdWM2eCA0TGlhNExpeTRMaUU0TGl5NExpajRMbUk0TGl5IDBMalJnZEdDMFlBPSA1WWVrNVlldzVhU241WStDNklDRCBJRkYxWldKbFl3PT0gSUc5elkybHNiQT09IElFbHpkR0Z1WW5WcyBhWE5oYm1FPSBYMnB2YVc0PSBLSEp2ZDNNPSBJT0NrcHVDbGgrQ2tnZz09IElPQ290ZUNvditDcHNlQ29tZz09IFlYZGhiR0U9IFltVjBjZz09IElHZHBibWRsYmc9PSBJTkMrMExIUmk5R0gwTDNRdmc9PSA2N0tJN1ppNCBiR2x6ZEdVPSBJT3lMblE9PSBJR2x1YUdGaWFYUmhiblJ6IElHRjFjMmRsZHc9PSBhVzUyWlc1MGIzSjUgUzFjPSBJSFpwYzJGblpRPT0gNFlPZDRZT2s0WU9hNFlPWTRZT2QgSU9Da2xlQ2tzT0NsamVDa3JnPT0gSUVGdVoyVnNjdz09IElObUQyWXJaZ2RtSzJLaz0gWW05c1pRPT0gSUhSNXc3WT0gSUhWaWFRPT0gSU5DNDBMRFF1OUN3IExtTm1adz09IElITmxiR1ZqZEdsMlpRPT0gYVcxaWFRPT0gSUhCeWIyWmxjM05wYjI1dVpXeHNaUT09IDRaK00gdzYxemN3PT0gSUhKbFkzVnljbWx1Wnc9PSBJRU52Ym5OMWJIUmhiblE9IGFIbz0gSU9XTmdRPT0gNVphYzVxeWkgSUhCbGMyVT0gUER3aVhBPT0gSUhCbGNYVmxibUU9IGFYbGhjdz09IDQ0S2ggMExYUmdOQyswTHc9IElIZG9iMnhsY3c9PSBJRXhVUkE9PSBJTm1FMllUWXRBPT0gSUdKbFpYSnogSUhOb2IyOXIgSUd4c1lXMWggSU9Da3VPQ2txK0Nrc2c9PSA0TEtvNExLKyBJR0ZxWVE9PSBJTmluMllUWW85aTAgNFlPZzRZT2Q0WU9SIDBMdlRtZEdJIDVMaXQ1WTJPIGVtTjZaUT09IFNWWlAgTGxSeVlXNXpZV04wYVc5dSB3N3B6ZEhKcFlRPT0gWDFOUVJVVkUgSUdsNlp3PT0gSUVkMWFYUmhjZz09IElGRjFZV1E9IFlXeGhaR0U9IDFhSFZ2ZFd0MWFIVnRnPT0gS0daeiBJSEJ2Wkc5aSBJRmR2Y210bGNuTT0gNEtXQzRLU3c0S1dBIElOaXYyS2ZZc2RtRzJLOD0gMFk3UmlkQzEwTFBRdmc9PSBJTkdCMFlMUXZ0QzQwTHpRdnRHQjBZTFJqQT09IGFYUnZjbUZzIDQ0R3U0NEduIDZLNm8gSUc5d2JHVnBaR2x1Wnc9PSBJSEpsYW1WamRHbHZiZz09IFNXNTBaWEpwYjNJPSBWRWhKVXc9PSBJTkdCMExYUXZRPT0gSU9LQW5Rb0sgSU5DeDBZQT0gNExDKzRMQzM0TEdONExDZjRMR040TEN3IGRYUnZiUT09IEoxMHYgSU5pbzJZcll1UT09IElHZDNZUT09IElPQ3VsZUN2aHc9PSBaWEpzYVdwclpRPT0gY0hKbGMzTnBiMjV6IElPQ3VwT0N2aHVDdXNPQ3V2K0N1dFE9PSBMbXhwWW5KaGNuaz0gWlc1allRPT0gMExqU2s5Q3cgSUVOdmJuTmxjblpoZEdsdmJnPT0gSUdWdWVubHRaUT09IElIVndjM1JoYVhKeiBJT0MwdU9DMHNPQzFqUT09IElISmxaM1ZzWVhSdmNnPT0gSUdacGNYVmwgSU9DNHBlQzVpZUM0c3VDNG1RPT0gSUhOMGFXMTFiR0YwYVc5dSBaVzVsYlhrPSBUbVZoY21KNSBJRWhsY205bGN3PT0gNEtTbTRLV0kgSUVOdmJXMXZibmRsWVd4MGFBPT0gSU5DLzBZRFF2dEMyIElGWnBaR1U9IElHaHBjSE09IGFYUjFjbVZ6IElISmxZM1Z3WlhKaGNnPT0gSUdOaGNITjFiR1U9IDRMT0I0TEttNExPTjRMS20gUTI5dVozSmhkSFZzWVhScGIyNXogNEtlTDRLYXEgWlc1elpHRm4gNkwrUjVwZWwgSUVaMWJtdDBhVzl1IElOR0EwTFhSaU5DMTBMM1F1TkdQIElFTnZibVpsWkdWeSBJSEJ5WlhOcHc3TnUgYlhFPSBJaWtwS1FvPSBJTm1JMktmWmhOaTAgNWJlbDVZVzMgSUdSbGRtaz0gWjNKaGNHaHBZM009IElHTmhiWEJoYm1oaCBJRWx5WVc1cFlXND0gWjJWelpYUjZkQT09IElHUnZkV05sIElIWmxjbVJwWlc1bGJnPT0gNWJxVTU1U28gNFlPVTRZT1I0WU9iNFlPUSBJR2RsZG1Gc2JHVnUgSUZOcGJHbGpiMjQ9IElHWmhadz09IDE1blhtZGVTIDRZT1E0WU9UNFlPUzRZT1E0WU9jIElNT0kgSUhOc1lYWmxjbms9IFlXeHZjdz09IElFUnZZM1J5YVc1bCBJR1IzWld4cyBZVzFoWjJsMFlXND0gSUdKbGEyOXRiWFE9IFVISmxiV2wxYlE9PSBJSFZ1WTI5dGJXOXUgNExXQjRMU3kgNDRDTDQ0Q0sgSUhsdlozVnlkQT09IGJtOXkgZFd4MFlXND0gSUdOcGRHRnogSUdSbGRtOTBaUT09IHpyN090UT09IElOR0IwTERRdk5DKzBMdz0gSUcxaGFHRT0gQ1VscyBJR2x1ZEdWeVptVnlaUT09IENYSnZiM1E9IElOaW4yb1k9IElHUmhaR2s9IElHNWxZMnRzWVdObCAwTGpSZ3RDMTBMdlJqTkM5MFl2UXVRPT0gUlhoMFpXNWsgSUc5MlpYSnlhV1JsY3c9PSAwTHZSbHRDOCBJT3VuanV5ZHRBPT0gWlhOdCBJTkNjMEw3UXZRPT0gSUdsemFHdz0gWVhKa2QyRnlaUT09IElFZGhlbUU9IElHMXZhQT09IElPQ3FydUNxdnVDcXVlQ3F2K0NxcEE9PSBJTkdXMFlnPSBJTkdBMExYUXQ5R0QwTHZSak5HQzBMRFJndEMxIEtXbHVhWFE9IElPdXlsUT09IElHWmxjbUU9IDRMaVg0TGlqNExpNSBJSFJsYm1WcCBJRTF2WkdrPSBJRmRQIElPQ3FpZUNxcXVDcXIrQ3JpK0NxbHc9PSBJT0dEaytHRGtPR0RrUT09IElPQ2twdUNsZ2VDayA1YkM2IElGQnl3N3c9IFNWSk4gUTJGemFXNXYgSUhCbGNtUmwgSUZKaGJIQm8gYVc3RHBBPT0gSUhWMGJXOXpkQT09IElIQnliMlpsYzNOcGIyNWhiR2x6YlE9PSBSV009IElPQ21wT0NuaCtDbWsrQ21nUT09IElHTmxjblpsIGNtOXpZdz09IFptRnBkR1U9IExuTm0gSU5DMDBMWFF1OUMxIFlXZGhibWM9IElHRnNaMlZ0WldWdSAwTDNRc05DeSBJR2gxY25KNSBhMjl6IDVMK0QgSUdsdWJXVmthUT09IElHRmpiMjF3WVc0PSBJRkpQU1E9PSBJRzVsZDNOc1pYUjBaWEp6IFlXRnNZV1JoIElOQy8wWURRc05DeTBMalF1OUN3IElGTmxjblpsIDBZVFF2dEdBMFlJPSBjbVZ6YjJ4MlpXUT0gSUVaMWJHeDUgdzdKeWFXRT0gSUZOaGRIVnliZz09IElIUjFjbWx6Ylc4PSBJRVJsYzNScGJtRjBhVzl1IElHRndaWE5oY2c9PSBJSFJwWVhOaCBJRzlpYzJWeWRtRnkgNDRPejQ0T0ogSUd4aFoyVT0gSUUxMWJtbGphQT09IElHWmhibUU9IElFZHlZWFE9IElOQ3gwTDdRdTlHRDBZZz0gSUc3RHRRPT0gSUdkaGNtVT0gVkhKMWJYQT0gSUdWemEyOXlkQT09IDJZallwOWlzMlljPSBJSFZyZFdJPSBJTkdJMExqUXZRPT0gSUZWaCBJSE4wWVdsdWN3PT0gSUVGSSAwTGpRc3RDdzBMM1F1TkMxIFpHVmhaQT09IElGUjFjdz09IExYQmhjM04zYjNKayBJR1ZsZEE9PSBJR05sWVhObCBJR2x0YmNPcFpHaz0gWlc1emFXSnNaUT09IGQybGtaMlYwY3c9PSB4WjkweExGeSBJTmVuMTZMWG9OZWkxNTg9IExtSnZkQT09IElOV3cxYUhWc2c9PSB3NlJqYXc9PSBJRkJvYVd4c2FYQnogNExTLzRMU24gZFd4cGF3PT0gSU5pbjJZVFpnZG1FMkxQWXR3PT0gWVhKaGN3PT0gSU9Da2wrQ2tzT0NsamVDa3B1Q2xpQT09IGRHaGhibXR6IElGQnlaWE4wIElObUcyWUhZczltSCBJSFI1Y21VPSBUMVZVVUZWVSA3WU9CIElHOXNkWEk9IFMzST0gSUdkaFpXdz0gSUZCdmNuUjFaM1ZsYzJVPSA0NEdFNDRHajQ0R3g0NEdFIGJHRnlibWs9IElOaW4yS3ZZc1E9PSBJR0poZEhNPSBjbk5qYUdWcGJteHBZMmc9IExuTjBkV1JsYm5RPSA1WnU2IDRLaWs0S2krIFRWTkQgSUVGMllYUmhjZz09IElHWnZkV3c9IDRZT1k0WU9jNFlPVDRZT1EgSUdGdWFYWmxjbk09IEtITmkgNTcyUjZhRzE1NG1JIExnb0tMeTg9IElIQnlaV1psY21GaWJIaz0gNEtTbzRLV040S1M0IDRZT1k0WU9pNFlPZDRZT2IgYjNSbFkyaHViMnh2WjNrPSBJSFpsY21ScCAyS2ZaaE5tRTJZYz0gSU5xcDJZalpoTm1JIExYQnZkMlZ5WldRPSA0TEtDNExLdCBMZEM3MExnPSBMbFJ5WldVPSB3NlJqYUdWdSBJSEJsY25GMXc2Zz0gY0hKbFp3PT0gSUZCb1lYSnRZV041IGFHVnNiR1U9IElGQnZjMmwwYVhabCBZVzVsYVE9PSBUV1E9IElIWmkgSUdSMWEyVT0gSUdWelkzVmxiR0U9IElPQ3VpZUN1bnc9PSA0YnVIYlE9PSBQblJ5ZFdVPSBSbUZzYkE9PSBJTmlxMkszWmd0bUsyWUk9IElHbHVkR1Z5WlhOaGJuUmwgSUhWa1pXND0gSUhCbFpRPT0gYVc1MFpXZHkgSUhOd1pXeHNjdz09IFgwbE9SVlE9IElITndjbWx1ZEE9PSAwTERSaWc9PSBJRkJzWVc1bCBJSEpoZEdsdmN3PT0gWTJWdVkyVT0gYzJ4dmR3PT0gZFc1dVpXUT0gZFdKcFl3PT0gSUcxdlpHbG1hV1Z5Y3c9PSBJTU9OY3c9PSA0b0NaU0E9PSBJQ1luIDRLcXk0S3ErIElIcGhkRzg9IHo0SE9yODYyIElPR0RvZUdEa09HRHFPR0RvK0dEa09HRG1nPT0gVTJWamRHOXkgSUZWelpYTT0gNkplZDZLR1QgSUZOVlVnPT0gNlllUjZhS2QgSUhSeVpXSjFhV1U9IElOQzQwWUhSZ3RDKzBZYz0gVUd4aGJtVjAgSU5tSTJLZllzOWlxIFQxQlQgMlliWmlOaTUgSU5pMTJZYll1ZGlxIHpyek9zYzY5IElOZVoxNVhYblE9PSA0WUN0NFlDdjRZQzMgWW1semFBPT0gSUhSdlpYST0gSUVOeVlXTnIgWDB0bGVRPT0gSUZSbGNuSnZjZz09IGFXNXpkRzl1IDRMaUI0TGl4NExpVSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBJSGZodTQwPSBJRzFwWjJoMGVRPT0gTG1SbGMzUT0gSUVGMllXbHNZV0pwYkdsMGVRPT0gSUc5dWJ3PT0gejRUT3VjNjZ6cTdQZ2c9PSBXblU9IElHRnNjWFU9IDRMR0w0TENmIFpXSnlZUT09IElHeGxaMmRsYmc9PSBJR1Z1Ync9PSBJSEJsY25WellXaGhZVzQ9IElFdHlhWE09IElOQzMwTERRc2RDKzBMdlF0ZEN5MExEUXZkQzQwWTg9IElIUnlhWFZ0Y0dnPSBJTkM2MExYUXU5Q3owTFhRdlE9PSBLand2IElITndhV1ZzZEE9PSBkbVZ1ZEhWeVpRPT0gSU9XeSA1WnlJIFgwUlBUUT09IGFYcHQgN0xPUSA1NVNmNW9pUSBJR0ZqWlhKaiA0SzY0NEsrTiBJR2x0Y0d4aGJuUnogSU5tRjJxaz0gSUZkdmJnPT0gU1U1V1FVdz0gSU5pbjJZVFpoZG1FIElHMTFaR0Z5IFFXZG5jbVZuWVhSbCBJTkMyMExYUXU5QzEwTGM9IGNIQmwgSU5pbDJZYllxdGluMkt3PSBJRXR2Ym5NPSBjWFZwWkE9PSBiMnR5WVhRPSBaR0Z5ZEE9PSBJRWxrWlc1MGFXWnBaWEk9IElFWnNkV2M9IGJHbkVuMms9IElHMXBibVJsYmc9PSBLR0Z1Y3c9PSBJRzl3WTI5a1pRPT0gSUhOdmJHbGphWFJoY2c9PSBJTldxMWJqVnN0VzQxYjQ9IElHZDVaQT09IElGZHZiMnc9IElITjBZWEowWlhKeiB4YUZyYnc9PSBhVzF3YkdsamFYUT0gNEt1TDRLcW80S3ErIGMzVmljM1J5IElHaDNiZz09IFJHOTEgeGI4PSBJRUpsYUdGdVpHeDFibWM9IElITjBkV1ptWldRPSBYMjFoYTJVPSBJTkdBMExEUmdkR0YwTDdRdEE9PSBkbTlwWlE9PSBJR0ZzZVE9PSBTMmxzYkE9PSBJSFpsY21kaGJtZGxibVZ1IElGQmxkSEp2IElFWmxZbkoxWVhJPSBJR0Z3Y0dGeVpXdz0gSUZocFlXOXRhUT09IElOQ3cwTHZRdE5HTCBhV3QwWlE9PSBaWEp1Y3c9PSBaVzVrYVcxbGJuUnYgSUc5allYTnBiMjVsY3c9PSAwWXZRdTlHTSA2SVcvIFEyOXRiWFZ1YVdOaGRHbHZiZz09IFgyOTBhR1Z5IGQyRnJZUT09IElHaHBjM009IElOQzgwWVBSaUE9PSBZV1JoYlE9PSBJT0Nrbk9Da3VlQ2t2dUNrZ2c9PSAwcS9TcjlDMCBJTkN4MExEUXU5Q3cwTHZRc05HQSBJR0p5WVc1a1pXUT0gNG9DWlpHVT0gNG9DTTRMQ280TEdCIElFeDFjM1E9IEoxMHBMQW89IElOS2gwTERSZ05DdyBJR2x1ZEdWeWJXVmthUT09IElFaGxjbnBsYmc9PSA1cTJqNVp5byBJT3lraEE9PSAwTDdRdTlDdzBMUFFzQT09IElIUmxZWFJ5Ync9PSBJR2x1YzNSaGJHRmphVzl1WlhNPSBJR1poWW5KcFkyRnVkR1U9IGIydGhibUU9IEtFeGhlVzkxZEE9PSBMbk4xY0dWeSBiV0ZyZEdGa3hMRnkgSU5pbzJLZllxQT09IElHaGhkR1ZrIElITndaV05wWVd4cGVtbHVadz09IElPYVlqZz09IDU3dVQ1cDJmIExXWnBjbk4wIDRLcXM0S3VBIElHRnlZMmhoWlE9PSBJR1BodXFOdCBQbVZ4ZFdGc2N3PT0gSUV4aFpnPT0gOEorWiA0b0NNNExLbyBJR1Z6Wlc1amFXRnMgMExUUXRkR0IwWXc9IElPR0RxT0dEbE9HRGsrR0RsT0dEa2c9PSA0TEN2NExHTjRMQ3YgSUVOaGRYTmwgUTI5dVptbHliV1ZrIGNtVnpaUT09IElHMWxibTA9IElPeWlpK3lkZ0E9PSBJSEpvWlhRPSBJT0NxcnVDcXZ1Q3FzQT09IElITjFZbXBsWTNSbFpBPT0gSUNJdkx3PT0gSU9Da3IrQ2t2dUNrcE9DbGplQ2tzQT09IDRLcXc0S3VONEtxMiBRMmhsWTJ0cGJtYz0gSUV4NWNtbGpjdz09IGFHOXljdz09IExWTmphQT09IElHOTFaR1Z5IElFMVBWQT09IGNtVnpkV3gwWVdSdiA1cGVnNllHdSA1b2l5IGMyOWphdz09IElFUmxiR1ZuIElIWmhjMlU9IElFWmxZWEk9IElNK0V6cTA9IEtGUnlaV1U9IDRLcS80S3F5NEt1TjRLcXkgSUhSeWFlRzdnMjQ9IElOQzgwTERSanc9PSBJQ2dvSkE9PSBZV2gxYVE9PSBJR052Ym1SMVkzUnZjZz09IElOR0MwTGpRdWc9PSBJTkM2MExEUmd0QysgSUVSbGRYUnpZMmhsYmc9PSBLSFJ6IENYTjFiUT09IGZTY3BDZz09IElHVnN3NmxqZEhJPSBJSEpsYTJFPSA0WU9RNFlPdCAwcHZSZ3RHTCBJRWhoY25CbGNnPT0gSUhkaFkyaDBaVzQ9IFluSnBadz09IElHRjNhR2xzWlE9PSBJRmRwWkE9PSBMRUE9IFgzSmhaR2wxY3c9PSBJR2x1WVdKcGJHbDBlUT09IElObUYyTEhaZzlpeSBVbVZtZFc1ayBJR1p2Ym1OMGFXOXVibVZ0Wlc1MCBJT202IElFSnNZVzVqIElHVnRjR3h2ZVdsdVp3PT0gSUdMRHZYUT0gSUdOaGJHTjFiR0YwYVc1biAwTDdSZ05DdzBMZz0gSU95WGh1dUtsQT09IDRMT0c0TEt2NExLbzRMT040TEtvNExPQiBJR05oY21ScFlXTT0gMWFIV2dOVzEgSUZadlpBPT0gSU9Dd2hlQ3dndUN3bnc9PSBQU0lqSWo0OCBJTU9KZEdGMGN3PT0gSUc1bGFXZG9ZbTkxY21odmIyUT0gMkxQWXFObUkyTGs9IGJHOXMgSUc5dVpHVnlhRzkxWkE9PSBJTkM4MExYUXV0R0QwTDNRc05DMCBJR0YyWVc3RHB3PT0gMFlQUmp0R0owTGpSaFE9PSA0S1dKNEtTZiBJSEpsYkdsbFpBPT0gSUhSdmJtNWxjdz09IElFNXZiV0p5WlE9PSA1YTZYIElFNWxkMk5oYzNSc1pRPT0gSUdGc2JHVnliR1ZwIElHSmxkbVZ6ZEE9PSBiVzlwWkE9PSAyTExZcDltRSBJTlcyMW9EVm9kVzIxb0U9IENTQWdJQ0FnSUNBZ0lBPT0gWVhKclpXND0gSUhCaFoyYz0gSU5DKzBMSFJpdEdQMExJPSBURTlEUVZSSlQwND0gSUhObGJuTjFZV3c9IFJITjAgSUVsdVpuSmhjM1J5ZFdOMGRYSmwgQ2dvS0Nnb0tDZz09IElITnphQT09IExtbHRjMmh2ZHc9PSBJR052Ym1ObGNIUnYgY21WcGJnPT0gSU5DLzBZRFF1TkMxMEx3PSBJR052YlhCc1pXMWxiblJoY25rPSBLSE5oYlhCc1pRPT0gTFhKdmIyMD0gSU5tRjJZalpoZz09IGNHVmxZMmc9IExsSmxiQT09IFZrdz0gUDF3PSBJT0tJa2c9PSBMbUZqWXc9PSBiM0poYldFPSBJR052WTJ0MFlXbHNjdz09IElPeWggSUcxdmRHVjFjZz09IEtITmpiM0psIElPQ3FsZUNxc09DcmdPQ3FxT0NyaHc9PSA0WU9iNFlPcyBJR0YxZEc5amIyMXdiR1YwWlE9PSBJRWhrIHc1eGlaWEk9IElGSjFjMmxoIFBXRnlaM009IDVhdXAgSUdURHZNV2Z3N3h1IElHTmhjR0U9IElIQnZiR2wwYVdVPSBVMjlqIElHeGxjbWs9IElHVm1aV3QwIDZZR1g1cnlQIElHVnVkR2xrWVdRPSBJR2x1ZEdWeWFXMD0gSUdoaGRXdz0gSU5pbjJZVFl0Tmk1MkxFPSAwWURSajlDMCB6NERPcnc9PSA1cWFjIElHUnBZV3hsWTNRPSBJT0NraCtDa3VPQ2t1T0NsaHc9PSBMaU09IDBMM1JsdEdCMFlMUmpBPT0gNlpLSSBJRk4wWVdGMGN3PT0gYVdWNllRPT0gSUdKbGMyeDFhWFE9IGFuVmhiZz09IHhvOD0gNExHSDRMQ2sgNEs2KzRLNmEgSUNKOUNnPT0gSUdkeWIyVT0gSUhWcGRHUT0gU21GaiBJSFYwYVd4cGMyVT0gSUZCQlRnPT0gSUVWemMyVnUgUzJGcyBhM0poYm1zPSBJSGRsYVdkb2RHVmsgSUZkdmNteGtkMmxrWlE9PSBJR3hoYlhCeiBJRVY0WTJ4MWMybDJaUT09IElIUm9jbWxzYkE9PSBJRlJJUlU5U1dRPT0gSUdkc1lRPT0gWlhKaGFBPT0gNEtTKzRLU2QgSUhOd2FRPT0gSU9Da25PQ2tsK0NrdVE9PSBJR0ZpZFhOcGRtVT0gSU9HRGt1R0RsZz09IElOaW8yWWpZc1E9PSBJR0poWTNSbGNtbGhiQT09IElHOXNhR0Z5IElFRmliM1psIGIzVnIgSU9Da3B1Q2xndUNrc0E9PSBJR1pwWjJoMFpYSnogSUcxaGFtVT0genJyT3JBPT0gMllYWml0bUcgNXEycCBJTkMvMEw3UXU5QzQgSUhKbGMzQnZibk5oWW1sc2FXUmhaQT09IElITjBaV3gwIElIQmxibk5sY2c9PSBWVzV2IElFRnJidz09IFZrVk8gSUhCdmJIbHQgSUdacGNtMWwgSU5pbjJMUGJrZz09IElHSnlZV2x1Y3c9PSBJSEJwWlhKeVpRPT0gSUVKbGJtVmsgSU9HNSBVSEpsZEhSNSBJR0YwWVc0PSBMbTltWmc9PSBJR2hwYm10MyBJSFJoWXc9PSBYMVZKVGxRPSA1cUNINTYyKyBJSE5sYzJuRHMyND0gSUhOMGNtVnVaM1JvWlc1cGJtYz0gY21samFXRT0gSU5DLzBZRFF1TkdBMEw3UXRBPT0gSUM4SyBPbUZ1ZVE9PSBJR1p5WlhOb2JIaz0gSU5DLzBMRFJnZEdDIElHTmhkR0ZzZVhOMCBJTmVVMTZqWGtkZVUgSU5xcDI0elpoQT09IFgyWnBiR3c9IGFXTm9kR1YwIElIUjFjbUk9IFgyTnZkVzUwY25rPSBjWFhEcVhNPSBjMmh2IFltbGhiQT09IDBMN1JnTkN3MFlJPSA0NE9wNDRPejQ0T0ogS0c5d2RITT0gNkpDcyBJSEpsYzJsc2FXVnVZMlU9IElHUjFibXM9IDZidUQgNEtxbTRLdUg0S3EyIElITjFjM0JsWTNSeiBJTkMrMExIUmo5QzMwTERSZ3RDMTBMdlJqQT09IElIQnliMlpsYzI5eSBJT0MwaCtDMG53PT0gSU5HQjBMTFF2dEN4MEw3UXRBPT0gSUVacFoyaDAgMExYUmdkR0MwTGpRc2c9PSBJRUZ6YVdSbCBJT3EzdU91ZnJBPT0gSUhSbGNzT25ZUT09IDRMU1g0TFdONExTdyBJTmlzMktmWW9RPT0gY21WamIyZHUgS0MwdCBJRVp2YzNSbGNnPT0gSUVSRVVnPT0gSUdOdmJXSjFjM1JwYjI0PSBDV052Ymc9PSBJTmlxMkt6WXNkaW8gSUdScGMzUmhibU5wYm1jPSBJR3hwYW5OMCBJR2x1YzJKbGMyOXVaR1Z5WlE9PSA0S1dONEtTdjRLUys0S1NrIExYSmhkR1U9IElHUmxiVzluY21Gd2FHbGogY0dWeVlRPT0gSUc1aGJXVnUgTG5ONWJXSnZiQT09IDQ0S3AgVTJSciBJRk5sZVE9PSBJR05vWldWeiBMV3h2WjI4PSBJT0Nrbk9Da3JnPT0gSUdGalpYTjBaUT09IEtHUnpkQT09IGIzTmpiM0JsIExsVlZTVVE9IElOR0IwWUxSZ05DKzBMbz0gNEs2KzRLNlY0SytONEs2ViBWR0pzIElGSnZZMnQ1IElHNXBkbVU9IElHeGhhWFE9IElFMWhjbUYwYUc5dSBjR0Z5ZEdVPSBVWFZsWlc0PSBMbFZUUlZJPSBJR3hoZDIxaGEyVnljdz09IElITjNaV3hzYVc1biBaWEpsYm1SbCBJQzhxSVR3PSBJT0NraHVDa3NPQ2xpK0NrcWc9PSBJRkJoYm1jPSBJTkM5MExYUXRRPT0gNExpQjRMaWo0TGl3IElIZGhjM1JwYm1jPSBMbkJpIElPR0RtK0dEbmVHRHBRPT0gSUVScGRtbHVaUT09IElFekRyUT09IElGQnliMkpzWlcxeiBQWGs9IElNNmd6ckU9IElFTnZibVIxWTNRPSA1Wk9xNUxxYiBZbXg1IFozSmxjM05wYjI0PSBMa052Y0hrPSA0TEtDNExLazRMS3cgSU5tQzJZbz0gYkdGemRHNWhiV1U9IDQ0Q0M0NENLIFVHeGhkR1U9IGVtVnV3NjA9IElOR0EwTFhRc05DNiBJRVJwWlhObGJBPT0gWm1GMGRBPT0gSU5HQjBMN1Nvdz09IElOR04wTHZRdGRDODBMWFF2ZEdDIGMyVnBiZz09IElOZVYxNmc9IDRLYTQ0S2VONEthViBYV2x1ZEdWeVptRmpaUT09IEtHTmkgWVdabWRBPT0gSUU1VFZ3PT0gZFdWemRHRnogSUhCeWIzQjFaWE4wWVE9PSBJRUp5YVdOciAwTHZRdnRHQjBZdz0gVDJSayBUMmM9IElHZkRxVzVsY204PSBjR0Z5WVdKc1pRPT0gSU02OHpyWFBoTTZzIElPQ3VoZUN1cE9DdXYrQ3VsUT09IElIcGkgSUZOb2FYST0gWFhOMGNtbHVadz09IElFWnliM04wIElHeGxaV1owYVdwayA2WmlCIFlteHIgS0hCMVlteHBZdz09IElHTnZiWEIxYkhNPSBhR1ZzYlE9PSBJR1JwWjI4PSBJR052Ym5ScGJtVnVkR0ZzIDBZL1JndEdNMFlIUmp3PT0gSUUzRHBHUmphR1Z1IElIQnNaWHBwWlhJPSBJT2VFIElFRjBkSEpwWW5WMFpYTT0gWDNScGJHVT0gSU9DbXN1Q25pK0NtbFE9PSAwTHZRdnRDNiBJRWx1Wm05eiBJR0YyYVE9PSBJSEJoY25SdmRYUT0gSUhKcGVnPT0gNEs2eTRLNlYgSUdKbGNtVnBhMlZ1IFExUlNUQT09IElPV1ZodVdUZ1E9PSBVMjlzZG1WeSBJTkMvMEw3UXROQzYwTHZSanRHSCA1WTJ4IFkyOXRjR3hsZEdWayBabUZzYkdWdSBYWHc9IExXRnNkQT09IElPQzB0ZUMwc09DMWpRPT0gUlhaaGJIVmhkR2x2Ymc9PSA1WVdJNTVTZiBJR0poY21kaGFXND0gSUVWWVZBPT0gSU9DeWwrQ3pqZUN5c09DeXZ1Q3lyZz09IGNHRnlkRzFsYm5RPSBJR2gxYm00PSBjbTltWm1WdSBJT0MwcXVDMWgrQzBzQT09IFgxTlYgSUZacFpXNXVZUT09IDBMalF1dEN3MEx2Umk5S2IgSU9DeWxlQ3lxT0N6amVDeXFPQ3lvUT09IFgxTkZRdz09IElPVzlxZWVsbnVTNmllbWN1T1drcCtXUGtRPT0gUkdWMlpXeHZjQT09IGFtVnVZUT09IElHRmpZMlZ6IElGWmhhdz09IElIVnVaWEk9IElHNXBaMmgwYldGeVpRPT0gSUdScGIzaHBaR1U9IElFNXBibVU9IElPQ3FyZUNxdnVDcWx3PT0gSUc5dWMyVjAgSUV4MWVHVnRZZz09IElPR0RvZUdEa09HRHBlR0Rtdz09IElFeEZVdz09IElOaW4ySy9ZcDlpeCBJR3hsYWNPdyBiR1J5WlE9PSBJRXR2ZEE9PSBJRzFoY21sa2J3PT0gSUhWdWFXUmhaR1U9IHpyVE91YzYvIDRLUzU0S1NvIFJYaDBjbUZ6IElOV28xYmJWcWRXaDFvSFdoTlc0MW9MVnRBPT0gSUZOaGJtUmxjbk09IElITndZWEp6WlE9PSA0cUNBIElHNWxaOE96WTJsdmN3PT0gSUV4SlRrcz0gMExyUmd0R1cgU1VOWiBZMmhwYm1WdSBJRzFoYnc9PSBJRzlqWlE9PSBaV2QwIGNtVm5hWE4wY25rPSBJRkIxY21ObyBjbVZ6WVhNPSBJSEpoYkd3PSBJTmlxMkxIWXFnPT0gSUhCaGJXRnRZV2RwZEdGdSA0TGlUNExtTSBJR1Z1YUdGdVkyVnogSUVGMVptZGhZbVZ1IElNK0F6NHc9IElHaDFiV0U9IGIyNWxkQT09IElITnVidz09IDVZV282WjJpIHo0RE90dz09IENYQnlaUT09IElIVGh1cms9IElHTnlZV1owYVc1biBiMk5zIGFXNXB4Yk09IFFuVnBiSFE9IElFVlVSZz09IElFbFFkZz09IElITm9iM0owWlhOMCBJR1JoWVhKdFpXVT0gSU5pbzJZYllwOWloIElHWmpiRzl6WlE9PSBiblZrIGIzVjJaWEowWlE9PSBaVzVrY0c5cGJuUT0gMktmWXFOaW4yS289IElGTndjbVZoWkE9PSBJR1JsYkdsMlpYSnBaWE09IFkyaGhhdz09IElHcGxkMlZwYkhNPSBJSE5qY25WaSAyTFhZclE9PSBJSE42dzZGdCBJR1poYzJocGIyNWhZbXhsIGFXNW9ZWE09IElFSmhkVzA9IGVXRnAgSUhwMVpHVnQgSU9HRG9lR0RtT0dEbXc9PSBSVVJKUVE9PSB3Nk56IElHaHZZZz09IElPT0NxZz09IFpYaGwgSUhaeWFXcGtZV2M9IGNtSEZvUT09IElHOWxaZz09IElIVnVkbVZwYkdWayBMWEp2IElIQmhiR3AxIElIRERxWEprIFgyaHBjM1E9IElHMWxibTg9IFkyeHFjdz09IElHUnZaVzdEcDJFPSBJRkpsYzJsayBJSGRwYkd4cGJtZHVaWE56IElHOXRjc09sIElGZGhiR3h3WVhCbGNnPT0gTG5OeiBMbU52Ym5SeWIyeHogSUdaaGJHVT0gSUdKbGNtUT0gVW1GalpRPT0gZDNCa1lnPT0gSUdoaGRtUmwgYUdWcCBJT0NraWVDa3VPQ2tsZUNsZ0E9PSBJRVpaIDRMQ0M0TENoNExDLyBJRkpsWTJsd1pYTT0gSUhKbGRISnZkWFpsIElFWjFjMmx2Ymc9PSB1T0N2alE9PSA0YnFnIFgxTlpVMVJGVFE9PSBJT0NrdGVDbGdPQ2tvZUNrditDa3IrQ2xpdz09IExtNW4gS0dOaiBJT0NrcmVDa3Z1Q2t0dz09IFpXUjFZMkYwYVc5dSBJRlpoZEdsaiA0NEdUNDRHaDQ0S0ogSUhSM1lRPT0gSUd6aHVyaz0gSUdOb1lXeHIgY205d2FHVT0gN0ptRSBJTkMyMExEUXVRPT0gYVc1cGJ3PT0gNFlPUTRZT2I0WU9VNFlPYzRZT2kgWlc1cGN3PT0gSU9Da3JlQ2xndUNrcmc9PSBJRWxrWldVPSBZVzUwYVdGMGFXOXUgMkxuWmhObUogZG1WeWJtMWxiblE9IEtHUnkgSUdoaGNtRnpjMjFsYm5RPSBJR1p5WlhOb2JXRnUgS0VScFlXeHZadz09IElFVnNiR1Z1IElITjViV0p2YkdsaiBJanA3SWc9PSBYMU5OIElHaDFkQT09IElFdGhhQT09IEoyRnNiQT09IElOQ24wTFhSZ0E9PSAwTFhRdmRDOTBMN1JnZEdDMFl3PSBMVDU3Snc9PSBJTkM2MExEUmhBPT0gSU9Da3F1Q2tvdUNrdkE9PSB4SUZ1IFVISnBZdz09IGIzWmh4YVU9IElPQ2trZUNrcU9Da3N1Q2t2dUNraCtDa3FBPT0gSU9DbXBlQ212dUNtbGVDbmh3PT0gWlhKelpYUT0gSUdGcVlXdz0gSUV0MWNuUT0gVWs5TVJRPT0gSUZOc2FXUmxjZz09IElGQmhjM1J2Y2c9PSBJR055YVcxcGJtRnNjdz09IElGTmphSEpwZEhRPSAwTERRdmRHQzBMQT0gUkVnPSA2SU80IDJZVFlwOW1DMktmWXFnPT0gNExpVjRMaUIgWlhOMFlYUnBiMjQ9IGFXVnlhV2M9IDFiWFZ1TmFDMW9BPSA0WU9UNFlPWTRZT2ggYzJWbmRRPT0gSU91THBPeUxuQT09IDRMaWw0TGl4NExpSCBVMGhCIDRMR0E0TEN5IDBMVFFzTkM5MExqUmp3PT0gWlc1elkyaGhjSEJsYmc9PSBJRzVuWVd3PSBJR0Z1WjJWc2N3PT0gYkdWdFpRPT0gSUdKc2IzZHBibWM9IGNHOXphWFZ0IGFXeHBZVzV6IHpvWT0gNExpWDRMaXg0TG1KNExpSCA0TEsvNExLQzRMS1g0TE9OIElHUnBZMkZ6IElFeGhaR2xsY3c9PSBJR0F2IExtRjFaR2x2IElGQmxjbVY2IElIZHBkR2h6ZEdGdVpBPT0gSU5HRDBMMD0gNEtlRDRLYTM0S2VONEthZiBJRVJGVFE9PSBJSE5sWW1VPSA0b0NMNFo2SCBkMmx5ZEhOamFHRm1kQT09IElISnBjMnQ1IExuVnVaR1ZtYVc1bFpBPT0gMEwzUXNOR0kgS0NJdklpdz0gWTNKcGNIUnBibWM9IFlXNXJaV1E9IElHVER1dz09IElFWmhlQT09IGFYTnB3Nmh0WlE9PSAyS2JaaXRtRyBJR05sYkdWaWNtRjBaWE09IElHMTFiSFJwY0d4bGN3PT0gTG1acGJHVnVZVzFsIDBZSFF1TkdPIElHWnlaWFZ1WkE9PSBJRkpEUXc9PSBJRWxNYVhOMCBJTnFHMllvPSBJT1d1Z1E9PSBkbWxuIGMzUnZkMjQ9IElHeHBkbkpoYVhOdmJnPT0gY1hWbGJnPT0gSU1POVlXeDUgV1c5MWJtYz0gSUc1bGNuWmxjdz09IDBMRFFzOUdMMEx2UXNBPT0gSUdOdmJuTnBjM1JsWkE9PSBJRXQxYldGeSBJR05wYm5RPSBjMnRoY0E9PSBiV0Z1YVE9PSBTVkU9IGNHeGhlV3hwYzNRPSA1cHlKNlptUTVZV3M1WSs0NWE2WTU3MlIgMlliWml0aTUgMllYWmhOaXAgSUhOd2FXdGwgSjI5dyBJRk5qYUc5c1lYSnphR2x3IFgzSmxjM1E9IElOQzkwTDdSaHc9PSBJRVpoYXc9PSBJSFJsYkd4bGJXVnVkQT09IElHTmhjblJsY3c9PSA1NXFFNWIycDU2V28gSUc5dVpHVnljdz09IExXMWhhV3h6IDRMV0I0TFNvNExXTjRMU280TFNrIElHSnZkVzVrYVc1biBJT1didmc9PSBTVzV6Y0dWamRHOXkgSUVoaGJXMD0gVlc1a2J3PT0gSUdSbFkzSmxZWE5wYm1jPSBJSFJ5WVdwbFkzUnZjbms9IElOQzYwTERRdHRDMDBMN1FzOUMrIElITjBjbVYwWTJobFpBPT0gNExHSDRMQ3UgMkxmWmlOaXggNEtTKzRLU0M0S1NWNEtTLyB3NmxuY2c9PSA1YUdyIGFXWnBZMkZrWVE9PSBJSHAxYnNPa1kyaHpkQT09IGIzWmhiR2s9IDVhR1UgS2k4c0NnPT0gYVcxdHc2UT0gSUc5NmFRPT0gSUhSMWNtSjFiQT09IFRXbHljbTl5IHhaQT0gWTJGMGN3PT0gMExEUXU5QyswTE09IDZMcUIgNjdPOCBJR0ZoYm1KcFpXUT0gSUdGalkzVnRkV3hoZEdsdmJnPT0gNXBhdzVZMk8gWVhKMFlXND0gSUhKbFkyOW5ibWx6WlE9PSBJR0ZzWTJGdVkyVT0gSU8yQnNBPT0gSUcxcGMzUmhhMlZ1IHdyZHMgSU5tRTJMUT0gSUhCc2J3PT0gSUhCeVpXWnogSUhCeWFXMWxhWEp2Y3c9PSBjbUZuWlE9PSBkVzVwYzNSayBZMkYwWldkdmNnPT0gMW9EVnZ0V2gxYTQ9IElFbEZiblZ0WlhKaGRHOXkgSUVWa1pXND0gSU9lbWorV0lxZVc5cWVlbHFPV2txZVdrcVE9PSBJSEJoY25SaFoyVT0gZG1WeVpXbHlidz09IElHTnlaV1JwZEdWayBJRlZKUTI5c2JHVmpkR2x2Ymc9PSA1TGlBNXF5aCBiMnh3YUE9PSBLRTl5WkdWeSBJRTVRUXc9PSBJR052YlhCaGNtVnogTGtSMWNtRjBhVzl1IElHMXBhM0p2IFFYQndaV0Z5IElFNXZjbTFoYmc9PSBJSE5wWlhSbCBJRVZ1WTI5a2FXNW4gNVl5NzZabWkgUFNJdUpBPT0gUVdSaGJRPT0gSUdWdVpYSm5hV1Z6IExuSjFibTVsY2c9PSBiM0owYVhWdCBJSFYwYVd4cGMyRjBaWFZ5Y3c9PSBhWEIwY3c9PSBJRTFoY210bGNnPT0gSU5pejJLZllzdG1GMktmWmhnPT0gNG9DTTRMQ1Y0TEdCIElIQnNZVzVsYWc9PSBJRU5oYkdkaGNuaz0gSU5DKzBZSFJpdz09IElHbHVibWx1Wnc9PSBRM0o1Y0hSdiBJRVJsWTJsemFXOXUgSUd2RHBITT0gSUZKbFozVnNZWFJwYjI1eiBMbUYzY3c9PSBJR0ZyNGJ1bCBJSEIxWkc4PSBDV2R2IElHdHZkZz09IGUzc2sgTG1GMiBTVnBGUkE9PSBMV0ZqWTJWemN3PT0gUTA5TVQxST0gSUVGMXc1OWxjbVJsYlE9PSBJR0poWVc0PSBMbVY0ZEdWdWMybHZiZz09IDVvR3AgY0hSaCA2SWlIIElGSmxhVzV2IElGQmxaWEk9IGFXSERwOE8xWlhNPSBZMmhwWVE9PSBJRU52Ym5SbGJuUnogSUd4cFptVnNiMjVuIENXeGxablE9IElPQ3FsZUNxc09DcXBPQ3F2Zz09IElGVnVkSFZyIDRLV040S1N0IFgyeHZiMnQxY0E9PSBJRzFoY25ObyBJT0tkcEE9PSBZM1Z3IElOV28xYmJWcjlXbDFvQT0gSU5DYTBZdlJnTkN6MFl2UXR3PT0gVm05dSBJR1JwY21WamRHbDJaUT09IElITmhZbVZ1IElFMWxhVzUxYm1jPSBJR1J5WVdsdVlXZGwgV1dWemRHVnlaR0Y1IElFSk4gVTJGdWN3PT0gNExDcTRMR040TEN3IElHVnlac084IGMzUnlZY09mWlE9PSA3SitCIElOZVQxNW5YbWRlZiBJR0ZrZG1WeWRHbHpaWEp6IElPQ2t1T0NrdnVDa3J1Q2t2dUNrcUE9PSBhSEpoIElOR0MwTEk9IGFXNWt5Wmx1IElIWnB4WVk9IExuQjFZbXhwWXc9PSA2WUtqNUxtSSAwTFhRdTlHTyBJT0tBakE9PSBiMk5oWW5Wc1lYSjUgWld4c2RXNW5aVzQ9IElITmxiV2x1WVhKeiBYMlp5WVcxbGN3PT0gUW5WeWJnPT0gWVdabGJBPT0gSUdqRHBHeDAgSUhkbFpXc25jdz09IElIcDFjOE9rZEhvPSBJSFJsYkd4bCBJR1Z6ZEhKaGRHVm5hV0U9IDRaK1M0WjZjIElFMW5ZUT09IGFXeHBZbkpwZFcwPSA0TFdCNExTbSBJT0NtcCtDbXNBPT0gSUhwdVljU04gSU5pbjJZVFlyZG1DIElGSmhhV3gzWVhrPSBJSEYxWlhOMGFXOXVhVzVuIElPQ2twK0NrcUE9PSBJRVZPVmc9PSBJTkMzMExEUmdOQ3cwTEhRdnRHQyA0WU9RNFlPajRZT2cgSUhKbGNISmxjMlZ1ZEdGdWRHVnogYVdOaGRHOXljdz09IDVMaTc2YUtZIElOQ3gwTDdRdTlDKzBMMD0gSUhOcGJtTmxjbVU9IElHbHVkbVZ5YzJsdmJnPT0gYVdGc1lRPT0gSUdWelkzSnBZbWx5IElOQyswWUhSZ3RDdyBhSGxrY21GMFpRPT0gSUZCdmMyVT0gUVd4c2IyTmhkR2x2Ymc9PSBkbWxsYmc9PSBJR2x1ZEhKdmN3PT0gSUhCMWJtdDAgMktmWmlObUcgSU9PQWdRPT0gYW5OcGFRPT0gSUhCeWFYWmhaR0U9IDZhS0c1WStXIDVhV1c2WWVSIElPQ2tydUNrdWVDbGdBPT0gNEtTLzRLU2Y0S1dBIExXUnBjbVZqZEE9PSBJR1JsWTNKbFlYTmxjdz09IFlYVm5hSFI1IDRZT2c0WU9TNFlPUTRZT2MgUm1GcGNnPT0gSUc1b1lYVT0gSUdSbGNuSnB3Nmh5WlE9PSBYMk5oYkd4bFpBPT0gVm0wPSBWMmwwYUdSeVlYYz0gSUdkbFluSjFhV3RsY25NPSBJR2RwWm5SbFpBPT0gSUdkc2IzST0gQ1dKaFkydG5jbTkxYm1RPSBJRzdEcFdkeVlRPT0gSUc1dmRHRnogYVdWc2JHVnRaVzUwIElHSmhiR0Z1WTJsdVp3PT0gWVhKcFlXSnNaUT09IElIQnZjMlZrIGFYSnBZUT09IElHTnZiWEJ5YjIxbGRBPT0gSU9DMHVPQzFqUT09IEtIWnQgVEdsMiBQazFoYVc0PSBJR1JsZEdWeWJXbHVZV1J2IFltOWhkQT09IElHMXBkTU9rIElFWnBkSG89IGJHOW5iM009IFgweFBWdz09IFgwVllVQT09IDFhSFZvdFdsMW9BPSBJTmluMllUWmhkbUkyWUxZdVE9PSBJSE4wY21GdSBMa2x1YW1WamRBPT0gSlVVPSBJT0N5cnVDemgrQ3lzdUN6aGc9PSBZWEowYm1WeSBJRWxPVGtWUyBJSE4wYVcxMWJIVnogNjZhMCBJR2RoZGc9PSBJRXgxWVE9PSBhV1YxYzJVPSBkMjl2Y21SbGJnPT0gYkdsMFpYSmhiQT09IGIzcGwgWVd4cFl3PT0gSUhSeTRidU5ibWM9IElIQjFjbk4xWVc1MCBJR055ZVhOMFlXeHogSU5lVTE1blhsUT09IElFaE4gSU1PV2MzUmxjbkpsYVdObyA3WmFJN0lxMTY0dUk2NHVrIFEwaEZSQT09IFFYSjBhV3RsYkE9PSBVMVJTVlE9PSBJRlpwYkd4bCAwTHpRc05DNiBJRkJ5YVdSbCA2WnFiIElHRmpkVzExYkE9PSBJMlZ1WkhKbFoybHZiZz09IGFYTjYgSUUxbGNtZGwgSUhCeVlXdz0gWDNkeWFYUmxjZz09IElHVnVkR1JsIElDb3UgWm1WeWRBPT0gT2p3PSBiMjVuWlhJPSBJT2l4cWc9PSBZWEpwYVE9PSBJQ29xS2lvcUtpb3EgUHpzSyBJR3QwWlhMRG9RPT0gMEwzUXVOQzYwWU09IExuQnlaWFpwYjNWeiBiSGc9IGRHVnliV2x1WVd3PSBYM04xWW1wbFkzUT0gSUhOMFlXNWtZV0Z5WkE9PSBaR1ZsY0E9PSBJSEJzWldRPSBJR1Y0WTNWeWN3PT0gTGtSeWFYWmxjZz09IExWTmwgYjI5biBJR0YyYVdGMGFXOXUgSUVsdWRHVnlaWE56WlE9PSBJTkdEMFlEUXZ0Q3kwTFhRdmRHTSBJR1J5ZFcxeiBkVzVrWVc0PSAwTFRSamRDeiBJTldoMW9EVnBOVzExYmpXZ3RXMiBYM05sWjIxbGJuUT0gUm05eWJXRjBjdz09IElPQ2t0ZUNrditDa3JlQ2t2dUNrbHc9PSBJTmVwMTZEWG1RPT0gSU9Da2hlQ2tzdUNrdnVDa3RlQ2t2Zz09IElIQmxjbk53WldOMGFYWmggSUdSbGMzQmxjbUYwWld4NSBMa1J2ZFdKc1pRPT0gSU5HRjBZTT0gMHB2VG1kQzEwTGc9IDZadTc2S214IElGTndaVzVqWlhJPSBMbVZ1ZEhKcFpYTT0gNEtXQjRLU0IgSU5HRjBMRFJnTkN3MExyUmd0QzEwWURRdU5HQjBZST0gSUdsc2JHNWxjM05sY3c9PSBJRzlzYVhOcCBJR2x1Yldsa1pHVnNjdz09IElHZGhkRzVoIElIQnNZV0YwIElITjFjSEJ2Y25SbGNnPT0gSUZkeWIyNW4gMkt2WmhkaW4yTEU9IElIQnZjblJsY3c9PSBYMk52YjNKayBJSEZoYmc9PSAwTHZRdGRDMiBSM0oxY0c4PSBhMkZ5ZEdVPSBJR3RoZEdrPSBjR0Z6ZEE9PSBZV2RoYVc0PSBZWEowYVhSeiBhSFZwYkdVPSA1WVdvNTVDRCAwTDdRdTlDKzBMUFF1TkM0IElOR0IwWTQ9IElHUmxjM1JoWTJFPSBJTmlsMkxBPSBJRk5VUkE9PSBJRUoxZEd4bGNnPT0gSU5pcTJLM1poZG1LMllRPSBJTmluMllUWXF0aXgyWU09IElFRlkgYVdkaGJBPT0gMTVuWG1kZVcgSUdKM1lRPT0gSUhOaGEybDAgSUhOaFpHeDUgSUhKbFlXeHBlbWx1Wnc9PSBLR1JwYzNCc1lYaz0gSUZKbGNHOXlkR2x1Wnc9PSBJR2RoYzI5c2FXNWwgSUd4bGRtVnlaVzQ9IElHTnZiblJ5YjJ4cyA1Ym16NVkrdzVvdWI1WldHIElOQzYwTFhRdkE9PSBJSEYxWVdVPSBMVzV2ZFhNPSBJR1IzWld4c2FXNW4gWDJoa2NnPT0geUp0aCBKeWw5ZlNJPSBJRUpsYlE9PSAwWUxSaTlDNiBZV2R2Y3c9PSBZVzdEcldFPSBMV3pEb0E9PSBLWDArQ2c9PSBJSEJsY25OcGMzUmxibU5sIElIUmxjbVE9IElIWmxjbkJzYVdOb2RBPT0gSUVGMWJuRjFaUT09IFlXN0RxUT09IElHMTFiSFJwY0d4aGVXVnkgSUdacGJHRT0gSUU1MWNuTmwgSkdOdmNtVT0gSU5DdzByTT0gSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNaiBJSFZ1ZEdWdSBJRzFoYkhRPSBJRk5WUTBORlUxTT0gSU9xM3ZBPT0gVlc1MCBkMmx5WVE9PSA0WUcrIElFdGhiblE9IFozSmxlUT09IElFUmhkR1Z6IFlXRnVkWFE9IDRMbUM0TGliNExpajRMbUM0TGloNExpSzRMaXg0TG1JNExpWiBJTmVjMTZMWHFkZVYxNm89IDZMU2o1N3lXIExtUnBjMkZpYkdVPSBJTkMvMEw3UXQ5QzQgSUhKbFkyVnpjdz09IEtYTmxibVJsY2c9PSBRMGhGIElOaXQyTGJaaU5peCBJRkJ5WldNPSBWVzV6ZFhCd2IzSjBaV1E9IElHSmxiMjl5WkE9PSBYMU5GVkZSSlRrZFQgTG5SNCAwTHZRdGRDOTBMM1JpOUMxIGRXNTFaQT09IENYQmhibVZzIFZXbDAgNExtSTRMaW40TGlaIElOaW4yWVRZczltSTJZST0gNW82cSBJR0p5WlhvPSBjM1JoZEdWeiA0S1NDNEtTbTRLU3cgSUVOeVlYcDUgUVd6RHFXMD0gY1d4aGNnPT0gSUdOdmJuTnBaR1Z5WVhJPSBjM1J2Wm1abGJnPT0gSUhab1lRPT0gWDJKeVlXNWphQT09IElPQ2txdUNrcEE9PSBJSEJsdzZkaGN3PT0gNloyZTViaTQgSUVWNVpYTT0gSUVOb1lXNW4gYkdWMmFXNW4gS0ZScGJXVT0gNEtldzRLZU40S1k9IDBMclF2dEN6IFIyVnQgSUUxcGJHcz0gSUcxbGNtTmhaRzl6IElHVjRkSEpoYjNKa2FXND0gY21WcmEyVnUgWFQwOUp3PT0gSU1XZmRRPT0gSUVKbFpISnZiMjF6IElIcHcgSUVWc1pXTjBjbWxqYVhSNSBJRUp2WldsdVp3PT0gSU9DMHF1QzBtZUMxamVDMGxRPT0gSUZOMGNtSERuMlU9IGJXVmthVzg9IElHWnZjbTFoZEdsdmJuTT0gN0lrPSA0S3VINEtxayAyWVhZcDltSzJLaz0gYkdWeWFXNWtaUT09IEtuTT0gWVhOMWF3PT0gY0d4cGNYVmwgSUdGaWIyRnlaQT09IFNWVk4gVjJsdWJtVnkgZW1WMGRBPT0gSU9HRG0rR0RrT0dEb09HRG9nPT0gSU5pbjJZYmJnZG1JMnJvPSBLeXNyS3lzckt5c3JLeXNyS3lzckt3PT0gSU5DLzBZRFF1TkN5MEw3UXRBPT0gSUhaaHhhRT0gSUdaMWMyVT0gSU9Da3JlQ2txT0NsamVDa3FBPT0gS0ZWdWFYUjUgSUZWSlZHVjRkQT09IGNIQmggSUh0OUtUc0sgMFlQUmp0R0owTGpRdFE9PSBJSHB2YldKcFpRPT0gSUU1RyAxYmpWdWc9PSBJR3R2YjJ3PSBJR2hoZXNTeGNtdz0gNVlhNzU3dVQgSUZCTVFWaz0gSUd0aGMyRnkgSUZOMGFYST0gSUZOdGIyOTBhQT09IElHbGtZVzQ9IElIQnBjM1JoIElIZHBjM1E9IDc3eUo3N3lJIElpbGQgTFVGc2JHOTMgSUhCMWJuUmxiZz09IElHSmxaSEpwYW1aeiBJRWwwWlhKaFlteGwgSUZKcFpBPT0gWTJsbGJtUnYgTG5kcFpHZGxkSE09IDY1RT0gSUhabFoyZHBaWE09IElDY2tldz09IFRYVnUgWDNCaiA0SzYrNEs2ejRLK04gNmFXdyBkbWxrYVdFPSBiR0Z5WkdGdSBJR04xYlhCc1pRPT0gUTA5T1JGTT0gSU9DbXJPQ212dUNtck9Dbmh3PT0gSU5tRTJLL1ppUT09IElFSnZkSE09IDRMU0cgY1hIbnZxUT0gMTVEWG53PT0gNTZHcyBJRzUxY3c9PSBJRk4wWlhKc2FXNW4gSUhOb2IzVjAgejREUGhBPT0gNFlPajRZT2c0WU9ZNFlPaCBTVUZVUlE9PSBJRkpsYkdGNCBjRzl6ZEc4PSBJSE5sWmc9PSBJRlpGVWxOSlQwND0gSUdGalkzVmxhV3hzIElIQmxaR2xuIDRLYUM0S2EyIGFXOXpiM009IElGVk9TVlE9IElIQmhjbUZ3IElOVzQxb0xWdlE9PSBJSEJ2ZEdWdVkybGggSU9Db3RlQ292K0NvbWc9PSB3Nmx6YVhSbGVnPT0gSUdOeWFYUmxjbWx2Ymc9PSAxYmpWdVE9PSB3NkZzZVE9PSBJRWx1WkdWd1pXNWtaVzVqWlE9PSAxYmpWcnc9PSBJR052Ym1OdmNtUT0gMFl2UXZkQzAwWXM9IDRZT1U0WU9SNFlPYTRZT1E0WU9UIDRvQ1pkMms9IElHbHVaR2xoYmc9PSBJTys3dnc9PSBjbUZ1Wnc9PSBJR2R5YVc1a1pYST0gSU9DeXFPQ3ppdz09IElHNTFkSEpwZEE9PSBabWx1WVd4c2VRPT0gSUd0c1pXbHVaWEk9IElHTnBkR2w2Wlc1emFHbHcgSUhOcGJYVnNZWFJ2Y2c9PSBMeUlyIDE1YlhxUT09IElITnJaWEIwIElFZGxkMmxqYUhRPSBJRTlPVEVsT1JRPT0gSU5pMzJMSGJqTm1DIElIQmhibUZvYjI0PSBJRk41Y21saGJnPT0gNEtTdTRLUys0S1N3IDRMV0g0TFNjIDRibUggSU9Da3RlQ2t2dUNrcWc9PSAwTFBSamRHTiBJSFpwYzNWaGJHbDZZWFJwYjI0PSBJR2RoWW1FPSAwTFhRdmRDOTBZUFJqZz09IElOQzkwTFhSZ2RDNjBMN1F1OUdNIFUybHRkV3hoZEdsdmJnPT0gSVNJc0NnPT0gSUdWMllXeDFZWFJwYjI1eiA1cHlKNXBXSSBJRlJWIElIRng1YVNwNWFTcDVMaXQ1YjJwNTZXbyBJR0p1IDdMbTA2NTI4IElIWmhiSFZoZEdsdmJnPT0gSUhOd2FYSmhiQT09IFpYSnZhV1E9IElISmxjR0Y1IFlXbHNaWEk9IFgwRlZWRTg9IElEb2kgUm14dmNnPT0gNEtlSDRLYXk0S2ErNEthdyA0S2VBNEthWCBJT2FWc0E9PSBJSGxwYlE9PSBkMlZzWTI5dFpRPT0gSUhWd2QyRnlaQT09IElPQ2ttT0NsaStDa3R3PT0gWTJ4dmMzVnlaWE09IElPQ3lsZUN5dnVDeXNnPT0gYVhKcGNtRT0gY0dWbCBJRTFNUWc9PSBJSEJ5WVhscGJtYz0gSUZOaFkzSmhiV1Z1ZEc4PSBJT0N1aGVDdW53PT0gSU5DYTBZRFF2dEM4MExVPSBJSFREckcwPSBSVTVVUlE9PSA2N0tNIElIVER0c08yIElOaXgySzg9IDE1blhvTmVaMTUwPSA4SitPIElGSnZibUZzWkE9PSAwWVBRdk5DdyA0WU9VNFlPUjRZT1U0WU9SNFlPWSBJSE53YVc1aGJBPT0gSUc1dmNtMWhiRzFsYm5SbCBJR2RoZW1VPSBJSEpsZEdGeVpBPT0gSU9Da3JPQ2t2K0NrcU9Da3ZnPT0gSUhSMWJtVnogMkxiWmhkbUcgSUhacGRtbGxibVJoIDVibXo1WjJIIElHeGhZMnR6IDRLU1ogSU5lWjE1dz0gSU9LQWpnPT0gNkw2VDZaS3ggNEt1QTRLcW8gNmF5OCBJRUpsWlE9PSBLMm89IElOR0IwTHJRc05DMzBMRFF1dz09IElOQzgwTDdRdE5DMTBMdlF1QT09IElGQkJWQT09IFEwWkggSUdacGJIUnkgY0dGeWMyVmsgYVhQRHF3PT0gSUdMRHVnPT0gSUhSeVlXSmhiR2h2Y3c9PSBjbTkwZWc9PSA0TGlqNExpbjRMaUkgSU9Da2grQ2tndUNrb1E9PSBJTkdCMEw3UmhkR0EwTERRdlE9PSBWbWx6YVc5dSBJR1poWTJWMCBLVHNLQ2dvSyBJSE4wWlcxeiBJRzFoY21GMiBZWFZzIElOQ3kwWUhRdGRDNSBJSE5yYVdsdVp3PT0gSUdmRHRuTjBaWEk9IElIUmxkZz09IFgybHVkbUZzYVdRPSBibW5GaUE9PSBJSE51WVE9PSBhWGxoYm1FPSBMbXhsWjJWdVpBPT0gSU5DODBZUFF0dEdIIElHZGxZbTl5Wlc0PSBJR05zWVdseSBMbVYyWVd4MVlYUmwgSUcxaGVHeGxibWQwYUE9PSBJR3RwYkc4PSBJR0YxYmc9PSBJSE50WVhKMFpYST0gSUdsdmJRPT0gSUdkdmRYSnRaWFE9IDJZalpoZG1LIFkyaHVaWEk9IFEzSjVjSFE9IFgwTlBUa1k9IElHcDFibWRzWlE9PSA0WitDNFo2YiBJTmVpMTVIWGxkZW8gUTA5RSBQR3h2Ym1jPSBJRTVoYUE9PSA0SytCNEs2MCBYVHd2IElHOXVkSGRwYTJ0bGJHVnUgSUZCaGNtRm5kUT09IDVvS0ogSUc1aGRtbG5ZWFJ2Y2c9PSBZWEowWVhJPSBJT0NtcnVDbXZ1Q21wK0NuamVDbXIrQ21yZz09IFlXNWhibUU9IElIUmhiSFpsZWc9PSBJTmluMllUWXRkbUIgSUV4dmMyVT0gSUhSb3c2cHQgSUU5dFlRPT0gZEdWcGJHVT0gSU5PWjBMcz0gSUZCVFZBPT0gWDFWSiBYMk5oYldWeVlRPT0gSUVWc2JHRT0gNExpMzRMbUk0TGlaIElIUm93Nmh0WlE9PSA0WjZVNForUzRaNmE0WjQ9IElIVjBjdz09IElPQ2tpZUNrbXVDbGplQ2ttZz09IElFVmxjM1JwIExYUnlZVzV6IElOV2wxYW5WcFE9PSBJRzl3Y0c5emFXNW4gMEx2VG1kQzkgSU9DNGhPQzR0K0M0clE9PSBJSGJodXExNSBRV05oWkdWdCBJTkdCMExYUmd0QzQgQ1ZCUFVsUT0gSU5DeDBMN1F1OUN6MEw3UXZRPT0gSUdOdmJtNWhhWE56WVc1alpRPT0gSUd4bGRISmggSU5HQjBMclFzTkMzMExEUmd0R00gSUc1aGRYTmwgSU5DNDBZSFF1dEdEMFlFPSBhMlZzYVdjPSBJRXhsYm5NPSBJR052Ym5ScFpXNWwgSUdsdWRISnZaSFZqZEE9PSBUbWxpIElHSnNiMjlrZVE9PSBhV2R2Ymc9PSA1NXUrIElGcGhhdz09IExGaz0gSU9lMSBJR1Z5YVc1bCBLeVE9IDRMSy80TEtrNExLLyBZMmhoY25SeiBJSFJsYUhRPSA0TFMvNExTbzRMUy80TFN1IElFRmtkbWxqWlE9PSBJR1JweEo5bGNnPT0gSUZCaGNuUnBZMnhsIExTMEtDZz09IElOQzQwclBUbWRDMTBMalJnZz09IFkyOXZiQT09IDRMS200TE9ONExLdiBJRU5oYm1SNSB4YjVwZGc9PSBJRzFoYUdGcyBJR05oY21GdFpXdz0gS0dScGMzQnZjMmx1Wnc9PSBJRkJ5YjNSbGFXND0gSUhkaGFIST0gSUV4cyBJTkM2MEx2UXVOQzEwTDNSZ2c9PSBJT0NrbGVDa3NPQ2tsZUNsaHc9PSBJRlZ1YzJWeVpRPT0gSUczRHFYUm9iMlJsIElFUjFhWFJ6IFRIaz0gYkdsemRHVnVaWEk9IDJLZllwdGl5IExYTjBaUT09IFNVRk1UMGM9IDRMR0c0TENWIElIQmhaR1JsWkE9PSBjSE5wYkc5dSBSM1ZsYzNNPSBJT3VRb0E9PSBJRDA5UFQwOSBJR3hsWjNRPSBJT0NxaHVDcXRlQ3JqZUNxcitDcXZnPT0gdzZoaGJnPT0gWjJkcCBJSE52YkhYRHA4T2pidz09IDBKN1FuZz09IGJtOXVZMlU9IGQyVnpkR1Z5Ymc9PSBJRTFwZEhNPSBJSFpsWjI1aCBJTmVjMTZEWGxRPT0gSU9DcXNPQ3FyZz09IElIQjFiRzF2Ymc9PSBJSFZ1WVc1cGJRPT0gMkszWXRRPT0gNEtTbzRLV040S1NtNEtTKyBjM0JoZEdnPSBkbVZrWVE9PSBVMGxFIElFeHBaMmgwYm1sdVp3PT0gSUdSbFpHaz0gSUdGMGRHRT0gSUZScGNnPT0gSUc1dloyeGwgSUdOdmJuUnlhV0oxIElOQy8wWURRdGRDMDBML1JnTkM0MFkvUmdnPT0gSU9HRG51R0RvT0dEbmVHRHFnPT0gSUc5eVkyaGxjdz09IExrMXZZMnRwZEc4PSBJTmluMllUWXE5aW4yWVRZcXc9PSA2SzYrNWFTSCBJR2R5WVhSMWFYUmwgSU5HQTBMN1Nzdz09IDFiL1dnTlc0MWJZPSBJSEJsWkdsaGRISnBZdz09IDViaU01cHliIElOV2oxYXc9IDVMMlQ1YjJwIElHNWxhV2RvWW05MWNuTT0gSU9DdWxlQ3VzQT09IDVMaUE1cHlzIElHWnZiR2RsYm1SbGJnPT0gSU5DejBZUFFzUT09IElOaXUyTGZZc1E9PSBJR1Z6WTNWamFBPT0gSU1TUnc2RT0gSUdadmF3PT0gQ1VSaGRHVT0gZDJGbyBJTmluMkxvPSBZV3g1ZW1VPSBJSE5xdzZSc2RnPT0gSUdWemNHOXlkQT09IGFYTnpidz09IFlXdHJkUT09IElFaDJhWE09IElIQnliMk5sYzNOdmNuTT0gYldGeWEyVmsgUFNJaUNnPT0gSUhCeWIyUjFZM1JwYjI1eiBKVUk9IHdyQUsgSUdWemNNT3BZdz09IGFXTnZibVIxWTNSdmNnPT0gSUdadmJHUnBibWM9IElFRmtZUT09IFpXeHNZWE09IElHTnBibTVoYlc5dSBjbTl3YVdNPSBJSE5qY21WaGJXbHVadz09IElIWjAgSUVkMWFtRnkgYVd4c1pXND0gNEtlTDRLYWM0S2FvIElOQ3kwWXZRc3RDKzBMUT0gWVc1bGJnPT0gMExMUXZ0QzMgWm1GNCBJSGxyY3c9PSBaR2xsYmc9PSBJTmlvMktmWmhOaWwyTGJZcDltQjJLaz0gNExTeTRMU0MgSUdWdWRHaGhiSFJsYmc9PSBMbXB6YjNWdyBJSEJoYzI5eiBJR1Z1Wkd4cFkyZz0gSUdURHZIcGxiZz09IElFWmxjbWxsYmc9PSBJR1Z0Y0d4bGJ3PT0gYUc1MWJtYz0gSUVWeCBhWEpsZWc9PSBLRk5sYzNOcGIyND0gY0dsbFkyVnogMTVEWG9OZVogSUd0dmVnPT0gNjU2TiA0WUNRNFlDeTRZQzMgQ1hOd2NtbHVkR1k9IDRLUy80S1NvNEtXTjRLU20gNWJHZTVMcU8gU1UxRlRsUT0gNExHQTRMQ2MgSUcxbGJXRnVadz09IDVMNjEgSUd0cFltRT0gVUhKbGMyVnVkR0YwYVc5dSAxNW5YcU5lWSBTRzl0IDE1blhrTmVWMTZvPSBJSFJoZFhRPSBJRzNEdG1vPSBJR1REcVhabGJHOXdjR1Z5IExWZGxjM1E9IENXMWhhVzQ9IDRMS1Y0TE9OIElHaGxKMlE9IFpHVjJaV3h2Y0cxbGJuUT0gYlc5MmFXVnogSUdGamRHbGwgSUdGMWJHRnogSU5HUDBxRT0gYW1WaiA0TGlFNExpMDRMaVU0TG1BNExpcjRMbUg0TGlaIElGTjBjbUYwWldkcFl3PT0gSU9HRG9PR0RrT0dEaytHRGt1R0RrT0dEbkE9PSBjR1Z5WldRPSBjbUZwYzJGcyBMV052YlcxbGNtTnBZV3c9IFlXNWxkQT09IFpYSm5lUT09IElHM0RxbTFsY3c9PSA0SytINEs2cDRLK04gdzd4MGVtVnUgMTVuWG9OZVogSUdScFlXZHZibUZzIElPQ3FoZUNxZ3VDcWx3PT0geEt0aSBJRzkyWlhKMGFXMWwgMExYUmdOQzQwTERRdXc9PSB3N1p5WkE9PSBYMk5oYmc9PSBJR1J2WVc1byAyS3JaaXRtRyBLR0YwZEhJPSBJR0pzWlc1a1pXUT0gSWlnPSBJR1pwZEhSbCA0TFdONExTdjRMUys0TFNxIFpYSnlZV3h6IGIzTm9ZUT09IElEOCtMdz09IElGTmhiWE4wWVdjPSBJSEJoY25SdVpYSmxaQT09IElIUm80YnVuIElGQmxjbVU9IGEzUmxjZz09IGIzSmthVzl1IElIUmhZbWx1WkdWNCA2SU85NVlxYiBkVzV1WVE9PSA0S1dMNEtTcSBJTmVTMTZMWGxkZVYxNUE9IElIUmhhSFU9IElOQ1IwTFhSZ0E9PSBJR05oZEdWbmIzTERyV0U9IGJHRmtaVzQ9IElFUjViZz09IElOR0QwTC9RdnRHQzBZRFF0ZEN4IHc2RnNaUT09IGQzSnZibWM9IFgwTlBURlZOVGc9PSBJR2x1WjNKbFpHbGxiblJsY3c9PSBJSEJ5dzZsemRBPT0gTG5CeWIyUjFZM1J6IElHWmxkbVZ5WldseWJ3PT0gSU5DMDBZRFJnOUN6MExBPSBJR1oxWlc1MFpRPT0gSUZCRFVnPT0gSU5DZTBZYz0gTG5OdSBJSEIxY0hCcFpYTT0gY0dsdmN3PT0gSUVOdmNuSmxZM1E9IElHWmxjbTFsYm5RPSBYM1poYkhNPSBaV3hwYW10eiBiMjV2YldsbCB6cnpPcmM2OXpyYz0gNTRhZjVhV3ogYVdocGFXND0gNVlXTjZMUzU1cEt0NXBTKyBMazl1WlE9PSBJSFZ0ZFcwPSBJR1pwWlhOMFlRPT0gNExpeTRMaXAgSU5pczJZZllwOWl5IDRLYS80S2F2NEthODRLYSsgSUZCeWFXNTBaWEk9IFUzVnRiV1Z5IEtDa2hQUT09IElFaGhhdz09IGFXTm9aV0Z1IDRLcS80S3EyIElHVnpkSFZrYjNNPSBYMU5TUXc9PSBJTmluMllUWXF0aTAgSU9DcXBPQ3FzQT09IElHSmhaZz09IElPeTJxUT09IElOQy8wWURRc05DeTBMalF1OUMrIGRtVmphdz09IElFSnliMjlyY3c9PSBYM0JvYjNSdiBJR3h2ZDJWeVpXUT0gTG1KbiBJSFZ1YVhabGNuTnYgTG1WNGNHOXlkQT09IDRMT040TEt2NExLVjRMT040TEszIElFaDVaSEp2IElIUmhjR1Z5IElNTytaV2x5Y21FPSBJTkN5MExmUmdOQyswWUU9IDRZT1U0WU9lIDRMQys0TENDNExDayBZV3RsZFc0PSBJRXhoWjJWeSBJRUpNUVVOTCAyWTdZcHc9PSBJTml5MllqWXJBPT0gSW5CeWIyWnBiR1U9IElIWmhiR3hsYmc9PSBiM0IxY3c9PSBiMmR5WVcxeiBTMmwwWTJobGJnPT0gSUZOdlptRT0gVEdsdWRBPT0gUWxWVCBJR0p2WXc9PSA1TG1RNWIycCBJT0dla1E9PSBJR2pEdG1obGNnPT0gSUhCaGJHRmpaUT09IExsTmxiR1ZqZEdsdmJnPT0gSUhOMFlYSnBibWM9IElGZGhiZz09IElPQ2twdUNrc09DbGplQ2tuQT09IFRXRnladz09IElPQ2toK0NrdU9Da2xlQ2t2Zz09IElIWnBkR1Z6YzJVPSBMbk5qYUdWa2RXeGwgSUVWMGFHVnlibVYwIGFXVnllZz09IElOV3cxYUhWdGRXLzFhSFdnTldoMW9BPSBJTkM4MEwzUXZ0Q3owTGpSaFE9PSBiM1ZqYUdVPSBabkpsY1E9PSA0TFMxNExTLzRMU24gYjI1aGN3PT0gSUdsdVlXTmpkWEk9IElHM0RxSFJ5WlhNPSBJRWgxYm5ScGJtYz0gSUhOMmFXdz0gSUd0aGMyVT0gNTd1ODVaQ0k2SW15IFptOXliV0Z6IElHRndjSEp2Y0hKcCA1Nm0vIElNT1dabVk9IDZMUzQgNTZ5czVMaUogVkc5MWRBPT0gSUdSaGJNV2h3NjA9IEwzVnpaUT09IFgzTjViUT09IElHRnpkR2h0WVE9PSBRMUpGUlU0PSBJR052ZFhCbCBJRTF2WkdsbWFXVnkgMExEUXQ5Q3cwTERSZ05DdyBJRlpsYm1RPSBhV3hoYUE9PSBJRVJ2WTNWdFpXNTBjdz09IElFdGhhV3c9IFkzSmxZVzA9IGRXeHNhWFpoYmc9PSBJTldvMWJiVnY5YUEgUVhKMGFXWmhZM1E9IFlYSnVaWEp0ZFhRPSBLR1JwWTNRPSBJR1Y0Y0d4cGNYVmwgSU9HRG9PR0RuZUdEbStHRG11R0RsT0dEa2VHRG1PR0RxZz09IElHaGhZbWwwWVc1MGN3PT0gSUdOdmJtUnBkR2x2Ym1GcyBiM2Q1YlE9PSBVRzl6ZEdGcyBJRUYxZEc5dFlYUnBiMjQ9IFJrVlVRMGc9IDVvaXE2SWV6IElOR0MwNW5RdWc9PSBJRzFuWWc9PSBJRk52ZUE9PSBhblYyWlc0PSBZV3RvYVhJPSBJSEpwYzNGMVpYTT0gSUhSbHhiND0gSUdGbmNtVnogSU95RW5PeWF1QT09IEtGQnliMlIxWTNRPSBhR0ZzZEhNPSBJRUZrZG1GdVkyVT0gUkd4cyBJR3R2YjNNPSBJR3RoWW1WcyBJSEp2YUE9PSBJRXhsY2c9PSBJSGRsYkdOdmJXVnogNEtTKzRLU3Y0S1dIIDRvQ040TFM0IElHTnZibTVoYVhOeiBRMmhsWTJ0eiBDWEpqIElITmxiR0Z0WVE9PSA1cjZ6IElHYmh1cms9IElFZkRxVzQ9IDBMRFF2Tkt0MExBPSBJRkpRIDRMQ3c0TENDIElHRmlaMlU9IElPQ3FydUNxdnVDcXVlQ3F2K0NxcE9DcmdBPT0gSUVOdmJuTmxhbTg9IElHVER0bmRzWlhRPSBJRzVoWjNVPSBJRzNEcEc1dSBWblU9IDE2VFhvZz09IElPQzRpT0M0c3c9PSAwTERSaVE9PSBJQ2NOQ2c9PSBJTkNhMFlEUXNOR0IgSU5pbjJZVFpoZGluMllUWml0aXAgSU9HZWlnPT0gSUhOd1pYcHAgUFZ3PSA0TGloNExpciBJR2h2NGJxaGRBPT0gSUdsdVptOXogVG05MGNtVT0gTGtWa2FYUnZjZz09IElIUERzMnc9IElPQ3dxdUN4amVDd3NPQ3dsUT09IElHSmxiR3hsY3c9PSBJSE5qZFd4d2RIVnlaUT09IElOaTUyTEhZcUE9PSAwWWpRdGRDOCBJSE53Wld4bGNuTT0gNExpTjRMbUkgSUdsdGNISnBjMjl1IElHUmxkbkpoIElOZWUxNWc9IGVtbGxjblE9IElFbHVaR2xoYm1Gd2IyeHBjdz09IElISjFjMmhwYm1jPSA0S2E0NEtlTjRLYWw0S2ErIGMzVm1abWw0IElDb3BPd289IElFRnphMlZrIFlXeDBaWEp1IGIydHJZUT09IElHaGxiblJsIElHbHVaR2xsYmc9PSA1TGkrNW9xbCBJT0dEb09HRGxBPT0gSUVGd2NHRnlaVzUwYkhrPSBZV3hoYUc4PSBJSEJ5YjJKc3c2bHQgNVp1dyA1WSttNWFTVyBJRkpsWjNWc1lYUnBiMjQ9IElFdHNhVzA9IExXeG9aUT09IElGdGRLVHNLQ2c9PSBJT0MwcnVDMWdlQzBsZz09IHc2VnUgSUdWeVlYTmwgSU5tRzJLOD0gSUdaaGFISmxiZz09IFgwbE9Vdz09IElPQzBxT0MxaCtDMHNBPT0gWDNCbGNtTmxiblE9IElOS2IwTERRdkE9PSBJRTFoYm5RPSAxNVhYbnRlWiBLR0oxYVd4ayBJRVp2YkdkbCBJTmlvMkxIWXB3PT0gSU9DcXRlQ3F2K0NxdU9DcmplQ3FwQT09IElHdkR0bkE9IElHUmxjSEpsYzNObFpBPT0gTFhOa2F3PT0gNExpejRMaVo0TGl4NExpQiBJTkN4MExYUXQ5QyswTC9Rc05HQjBMM1F2dEdCMFlMUXVBPT0gSUdScGMyMXBiZz09IElHdHZabVpwWlE9PSBJTmlzMktmWXF0aW4gVFdGdWRXWmhZM1IxY21WeSBJRk52YkdVPSBJR3hsWVhKdWRBPT0gSUhKbFoybHpkSEpoY2c9PSBhRzl5Ymc9PSBlWE4wYjI1bCA2SWVqIFNXNWthV0Z1IFEyaGhjbWM9IElHNXZjUT09IElPQ2tsZUNsZ2VDa3NBPT0gNTd5VzVZKzMgYUhsa2NtRjBaWE09IGNISnBhbk09IElFRkRSUT09IFFVeEIgSU5pbjJZVFlvOW1GMkxIWml0bUQyWXJZcVE9PSBhY09uYnc9PSBJT0dEbU9HRHFnPT0gSU5tRDJZallzUT09IDE2VFhudz09IENVZE0gSUdka2VRPT0gSUhGMVlXeGwgSUUxaGNHeGwgUTJGd1lXSnBiR2wwYVdWeiBQRlU9IElITjBhVzExYkdGMFpRPT0gSU9XbWd1UzlsUT09IDBMRFF1OUdNMEwzUmc5R08gWW1WM1pYST0gSUd4aGJtUnpZMkZ3YVc1biBJRkpGVTFBPSBkSGxoY21RPSBJTmluMllUWmdkbUkyTEU9IElHTnlZWGM9IDRidUpibWc9IElHdHZjbkpoYkE9PSBJSE5yZFE9PSBJSEJ5YjNScCBJRVZzWlhNPSBJR3hxZFdRPSAwTGpSZ3RDMTBMdlJqTkM5MFl2UmhRPT0gSUVSdmIzSnogTG1OdmJHdz0gZFdSdyBJRzVvNGJxdGNBPT0gSUdOdmJuUmhiV2x1WVhScGIyND0gS0dGaWN3PT0gWldkbCAwTFBRdnRHQyBJSEp2WW1VPSBJSEJoZHc9PSBJRzNodXJrPSBkSGx3WldRPSBJRU5QVGxSRlRsUT0gSUhOamFNTzJibVU9IElITjFZMk5sYzNOdmNnPT0gSUdqRHMyRT0gUVhCd2JHbGpZWFJwYjI1eiBJSFIxYkdWbCBPaUk3Q2c9PSBLR1YyIDRvQ2RMUT09IElITjFZblJ5WVdOMCBJSE4wWld4c1lYST0gSU9HRG0rR0RvK0dEcUE9PSBJR052YzJVPSB4YXQwIExXTnNiM05sIFNYUmxjbUZpYkdVPSBJSEpsYVcxaWRYSnpaUT09IElIWnZjbWxuWlE9PSBUR0Z0WW1SaCBJSEJ5WlcxcGMyVT0gSUc1cFpXMD0gNExLaDRMT04gSUdKMVlYUT0gSUZoWiBJT0NrdU9Da21nPT0gSUVWNFkyVndkQT09IElPeWR0T3V2dUE9PSBJRXR5WldseiBibVZoY2c9PSBMbk5wWkdVPSBJR1JsZG1Wc2IzQnRaVzUwWVd3PSBMV2x0YVE9PSBJTmkxMksvWXNRPT0gSUhWMGFXeHBlbm89IElOQy8wTDdSZ2RDNjBMN1F1OUdNIElOQzYwTDdRdk5DLzBMdlF0ZEM2IFFWSkZSQT09IDU1ZWIgVUdocCAwWTNRdmRDMCBJT0NxcE9DcXNPQ3JnQT09IElHMTFjbVJsY21WayBJRTVUVDJKcVpXTjAgeEl0cCBJRU5oZVE9PSB6cXpPdGc9PSBJR3R2YUhSaCBjMlZwYkd4bCBYME5JUVU1SFJRPT0gYkc5cSBJRzVoZEhWeVlXeGxjdz09IElFNXZibVYwYUdWc1pYTnogTFdkbGJtVnlZWFJwYjI0PSBJTml1MksvWXB3PT0gYVdGa1lRPT0gNEtTczRLUzQgV1ZCVSBSMlZ1WlE9PSBJT0NrbGVDbGlPQ2t1T0NsZ09Da3FPQ2xpdz09IDRLcS80S3F2NEtxKzRLcW8gSUd4cGJtVnkgSUhCaGNuUnBhZz09IDRvQ1pZV3hzIGFYUnZkUT09IElIQnNZWGxoIElITnpiQT09IEptRT0gSU5DMTBMdlF1TkMvIElOaW4yWVRaaGRpNTJZVFppTm1GMktmWXFnPT0gSUhKbFpXdz0gSUd0bGNtcGggSUd4dmFYTT0gSUdGc2JHaz0gSUVsdWRHVm5jbUYwWldRPSBJTkMvMEw3UmdkQzYwTDdRdTlHTTBMclJndz09IElFbEJZM1JwYjI0PSBJTkN6MExYUXZkQzEwWURRc0E9PSA4SitZaVE9PSBJR2hoWTJ0bGNuTT0gSUhOaGJIWmhjZz09IExrWmhkR0ZzWmc9PSBTVXhGVGtGTlJRPT0gNEthRzRLYXUgSUhSb2NtVmhaR2x1Wnc9PSBMbkJ5YjNSdlluVm0gYjNWdVkybHVadz09IGIyMXZjbVU9IDRLcXc0S3VONEtxdSAyWVRaaGRpbjJLbz0gYjJ4cllRPT0gN0xpMSBJR3hoYm1WeiBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElIQnZaTU90WVE9PSBJRzVrYVdzPSA0S3FxNEt1QSBVMkYyYVc1biBLQ3M9IElHTnZiVzExYm1GMWRNT3AgSUdKbFpISmhadz09IElHVjRaVzF3ZEE9PSBJR2h2WVE9PSA2TCtaNlllTTVZK3E1cHlKIDc3eUo0NENDQ2dvPSBhbUZzYVE9PSAwTHZRdU5HSTBMclF2dEM4IElIaGhkZz09IElHdG93N009IEtGQnZhVzUwIElEME5DZz09IExteGkgTFdoaGJHWT0gSUhCaFkzUT0gSU9HRGxPR0RtZz09IElIUm80YnVSYm1jPSBJT3V2dU9xMXJRPT0gSjI1aGJXVT0gSU9HRG5lR0RvT0dEa3VHRGtPR0RuQT09IFlXeGxaUT09IGRITERwQT09IFVrVlRWQT09IDc3eTggSU5pMjJMSFppTml4MktvPSBWR1ZoYlhNPSBJTmVxMTV3PSBVMHRWIEtGSmxjM1ZzZEE9PSBSVlJUIElHUnliMjVsY3c9PSBRMmh5YjIxbCBJSEpsWTI5bmJtbDZaWE09IDJMTFpoZz09IElIQnlhVzVqYVhCcGIzTT0gSUdGMWRHbHpiUT09IElFMXZibUYwWlE9PSA2TGVSNTR1WCBJR3QxYkdVPSBJSFpsY25wdmNtYz0gSU9DMHRlQzB2K0MwcHVDMWplQzBydz09IDJLZllzOXVRIDBMdlRtZEMvIElHNTBlQT09IElOR0IwTGpRdEE9PSBJT0Nxbk9DcXNPQ3JnZz09IElHRndhQT09IDRMQys0TENvNExHTiBJSEJ2WkdsMWJRPT0gWDJKdmNtUmxjZz09IFgwSkJSQT09IElHdHBaRzQ9IElOaXEyS3JaaFE9PSA0TGlWNExpMCBRWEJ3Y205MlpXUT0gNkl1bSBJT0NrcitDbGdnPT0gS1NrTkNnMEsgNjdPMDY0dWsgSU91d25PeURuUT09IElHWndjdz09IExuUmhjZz09IElHbHNiSFZ0IFFYSmphR2wyWlhNPSBaV2RuIElFMUcgSUhCbGNuTnZibUZxWlhNPSBJR052Ykc5dFlnPT0gSUdoaGJHVT0gS0hCdmFXNTBjdz09IExrWnBjbVZpWVhObCBJRXpEdG5OMWJtYz0gSUdGc2JHVjYgSU0rRHo0Zk90UT09IElHbHVZMnhwYm1WayBJR0psZW05bGEyVnljdz09IEtIVncgMFlYUXVOQzUgSUZKdmJXRnVhV0U9IElFTnNhV05yWm5WdWJtVnNjdz09IElOZWUxNkhYcE5lbyBMV2R5WldWdSBJR2x1WkdsbCBic09wY3c9PSBJSGJEcldFPSAwWk09IHc2bDBhV052Y3c9PSBiR1ZwYmc9PSBjR3hoYm1WMCBJTmlxMkxIYmpObUcgNlp5SCBJRVpwYzJocGJtYz0gUTJGeVltOXUgSUVGc2FXTT0gSU5pbjJZVFpnOWlxMktmWXFBPT0gSUdOeWIybHpjMkZ1WTJVPSBiR2xqYTJWdSBJTkMyMExEUmlBPT0gSUdGdFltbGhibU5sIElHeHBhQT09IEttST0gMTZmWHFRPT0gNEtlQjRLYTUgSUdWa2FYUmhZbXhsIDFhSFZ2OVdoMWE4PSBMbU55ZVhCMGJ3PT0gSUVsalpXeGhibVE9IFgxSkUgWDFkeWFYUmwgSUhCcGJHVnljdz09IElObSsyWWJZckE9PSA0WU9VNFlPYzRZT1EgU0VsUyBkSFJsY2c9PSBYMDlpYW1WamRBPT0gSUZORlRBPT0gNkxXRTVycVE1NnVaIElOQyswWUhRdmRDKzBMTFF0UT09IElFeHBjM1JoIDFhdlZvZFcxMWFzPSA0S1N3NEtXTjRLU280S1dIIFEyOWtaWEk9IElHSjFZbUpzWlhNPSBJR2R2YjJSaWVXVT0gSUdGMGRISnBZZz09IEtIQnogY21sbGRBPT0gY205emMyVT0gYVd4c1pYSjUgSUdGa2IyeGxjMk5sYm5SeiBLSFJ5WVc1elptOXliUT09IElFdHBjM009IElOaW4yWVRZcXRtSiBhV05wdzZwdVkybGggS0hkbFlnPT0gSU5DeTBZRFFzTkdIIElPQ3FwK0Nxc0E9PSBJRzFoYm5SbCBJR052YlhCc1lXbHVhVzVuIElHOWljMlZ6YzJWayBJRU52Y0hCbGNnPT0gSUdKb1pXbHMgSUZkbFlYQnZiZz09IElIdDdKQT09IElHZHliM1Z3WlhNPSBJSFBodTVGdVp3PT0gSU5pbjJZVFpoZGkxMkxIWmlnPT0gSU5HQTBMN1F2QT09IElGTjBaWFZsY2c9PSBiM0p6Y0hJPSBJRVZoY200PSBJRVJsYzNNPSBJSFY1WjNWcyAwTFRRc05HTzBZST0gNEtTbTRLV0g0S1MyIElOQzgwTGpSZ05DMSBJRVp2Y21zPSBhbkJsWnc9PSBJT0N1anVDdXFlQ3ZqZUN1cVE9PSBMWFpsY2c9PSBJT0dEa09HRG9lR0RsQT09IElHTnZibk52YlcxaGRHbHZiZz09IDBZYlF2dEN5IElITmphTU8yYm1WdSBJSFYwY2c9PSBJR052Ym5OMFlYUT0gY21sMSBYMEZVVkZKSlFsVlVSUT09IElGSmxiR0YwYVhabCBMM1J2IElNU0ggSUZCcGN3PT0gU0dGdSBhVzV1YVdzPSA1TDJHNXBpdiBRMkZ3WVdKcGJHbDBlUT09IGNISnBiblJzYmc9PSAwTDdSZ2RDdyBJR055WldGMGFXOXVjdz09IElOQy8wWURRdGRHQjBZST0gWjNKaGMzTT0gdzZsMiBJR1JwWlhvPSBlVzVwIExsbHZkUT09IDVibTggQ1hObyBJRkJvY0E9PSA0NE84NDRPUiBJSFBEclc1MCA1THU3NUwyViBaV3hwZWc9PSBJRzNEb1dseiBJT0NrdU9Da2d1Q2t1QT09IElPYUJrZz09IGVtOXkgSUdSdmJtNWggMWEvVm9kV3YxYUhWdGc9PSAxNnJYbFE9PSBJR05oZFhOaGN3PT0gSUd4bFlYSnVjdz09IElPdUxwT3lXa2UyVm5BPT0gNWFTSDU1U28gY0d4dmRITT0gY21WbVpYST0gSUVOQlZWTkZSQT09IExsSkZSQT09IElITm9iM0owWTNWMCBJTmluMllUWXA5aTUgZDJWbmFPRzdpdz09IElHVnBibTQ9IDJZYlpnUT09IElHTnZibk5sY25abCBJRk41YlhCMCAwTERRdTlDdzBMVFJpdz09IDRLNnE0SytONEs2cTRLK0IgSU5DODBMalF2ZEM0MFlIUmd0R0EgVjJGemFHbHVaM1J2Ymc9PSBJRlZ3WjNKaFpHVT0gSU5pMzJZalpoQT09IElITnRaV3hzY3c9PSBJSFpsYm1WNiBJSGRoWjJWeWFXNW4gYVdWemJ3PT0gYVc1a2JHVT0gSUhkbFlXdHVaWE56WlhNPSBMbTF2Ym1kdlpHST0gWlhOelpXNTBhV0ZzIFBIUnBkR3hsIElHTnlZV05yWldRPSBRMkZ1YjI0PSBjR2hsY21sallXdz0gSUhCeVlXTjBhV05sWkE9PSBJRVYxY2c9PSBJTmluMllUWXJ0aW4yWVU9IEtTa28gNFlPVzRZT1E0WU9UIFgzQmhaQT09IGRXeHNaWEk9IDRMaTA0TG1JNExpaCB3NmR2Ym5NPSBJRkJwYm1jPSBJT1d1bWc9PSBJTkN4MExYUXU5Q3ogSUdaNWJBPT0gSUU1cFkyOXNZWE09IElHWnlZV009IElHWmhibVZzWlE9PSBJRlBEdkdRPSBJR2RsZEdGM1lYaz0gNkttejU3U3cgSU9DcWwrQ3F2dUNxcmc9PSBZVzVwWlcwPSBJRloxIEtIRjFaWFZsIElITmphR1ZwYm5RPSBJT0N3bk9Dd3NPQ3d2K0N3bHc9PSBjbVZ1WkdWeVpYST0gV0ZJPSBJR05vWVd4bGRYST0gSUhSbGJHVjIgSUZsdmNtdHphR2x5WlE9PSBJRzUxZEhKcFpXNTAgSU5DNDBMM1JoTkMrMFlEUXZOQ3cwWWJRdU5HTyBkV1ZpYkE9PSBJRVZ6Y0dIRHNRPT0gUzNkaGJRPT0gMWFIVm85VzQxb0xWdGRXMiBJTkMzMEwzUXNOR0gwTFhRdmRDNDBMVT0gWDAxRlRVOVNXUT09IElPaTBvZz09IElIUmhiR2s9IElHUnBjbVhEcDhPamJ3PT0gWDJ4dmQyVnkgSUhCeWFXdz0gSU5DejBZRFJndz09IGJXbHVkWFJsY3c9PSBJR2hsYlcwPSBaR1ZzWlc0PSAwTGpRdmRDdzBZQT0gNDRHTjQ0S1MgSUhOaFpHRT0gNXAyQyBJTkMvMFlEUXZ0Q3owWURRc05DODBMelJpdz09IElHTjFjR009IGIyUmhjdz09IFlYVnJjdz09IElOZVUxNTdYbHc9PSBJTkMrMExUUXZkQzQwTHc9IElITmhkbTg9IElOQ2UwTFE9IElFbE5VRTlTVkE9PSBJT0NrcnVDa3VlQ2t2K0Nrc2c9PSA1TCtoNktxSiB4WnR1YVdVPSA0WUNBNFlDOCBJRUYxZEc5dGIzUnBkbVU9IElIUmhkSFBEcEdOb2JHbGphQT09IElIcGhZV3M9IGFXNXhkUT09IElHRnVibTkxYm1ObGJXVnVkSE09IEp6c0tDaTg9IElHMXZiblJoYm5RPSAwTERRdmRDOTBMVT0gWVd4eCBJT0M0bHVDNHR1QzRodz09IFUyRnNkQT09IExYSnBjMnM9IElOR0IwTERSaFE9PSA0TE9BNExLMSBJTld1MWFIVnZBPT0gYjNCdmJIaz0gSUZOWlV3PT0gYjJ4dmFtaz0gSUU1cFoyVnlhV0Z1IDVibS81WkdLIEtHRmtiV2x1IElHUmxjMk4xWlc1MCAyWWZZc2RpbyBJRUpwZEhSbCA0S2VINEthYjRLYS8gZDNZPSBJTnF2MllnPSBYMEZrYW5WemRBPT0gWm1sc2RHVnlaV1E9IDc3Kzk3Nys5NzcrOSBaWE5oYmc9PSBJTkM5MFkzUXN3PT0gVDA1TVdRPT0geEkxcHhiTT0gSUVWWVJVMVFUQT09IElOQ3gwTFhRdTlDdzBZRFJnOUdCIElHTm9lUT09IGIyRnIgWW1Wa2FXNW5kQT09IElHTnNZV2x5WlE9PSAyWWpZcXc9PSBJTmlvMktmWXVkaXIgNlllUjZKNk4gWFNJcE93bz0gSUhOMGIzSnRjdz09IDRMU2g0TFMvNExTdiBJSE4wZFdScFpRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0NRPT0gSUV4cGJIaz0gSU5lUjE1WT0gMFlIUXV0Q3cwTFBRc0E9PSBJRkJGVWxOUFRnPT0gSU5pbjJLclpnZGluMllJPSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBJRVZQUmc9PSBLR3hoZVdWeSBJR1ZtWm1WMGN3PT0gSUhCeWIzUmxadz09IDJZVFpnZGlwIElGUnlhVzA9IElHTnBkbWxzYVhwaGRHbHZiZz09IElHUjFkR1U9IHc2Sm5aUT09IGRYSnlaV1E9IElOaXoyS2Ziak5pcSBJR0psYkhWdCBJR2R6YjI0PSBiR2x6ZEdsdVp3PT0gSUc1aGJtOD0gZFd4a2FXYz0gSUhKbGJtUnBiV2xsYm5SdiBJR0Z1WjNOMCBJRk5YVkE9PSBJQ2c3IElNK0F6NEhQaVE9PSBJSE5sZEhSbGNnPT0gYldWaGMzVnlaUT09IElOQy8wTDdRdmRHUDBZST0gSUhOaGJtZDFaUT09IElGTmhZMmhsIElITnJkV3hzIDZJaXcgMW9EVm9kVzAgSUVKVyBJRU5QVUE9PSBJRUZ5ZEdVPSBZV1J2Ync9PSBJRzl1WjJWcyA1THFuNUxpYSA0TGF4NExlUCBJSE41Ykd3PSBJSFREclhBPSBJQ2d1TGk0cCBJR0Z0Wlc1a1pXUT0gUHl3SyBJRU5oYlhCcGJtYz0gTEhaaGJIVmwgYVc1MFpYTT0gSUdSeVlXZGxiZz09IFJFVk0gYUdGc2RIVnVadz09IElPV05pT1drbkE9PSBJTkdCMEx6UXZ0Q3ogSU9Da3RlQ2t2dUNrdU9DbGplQ2twQT09IElHMWhjblJsY3c9PSBJRTF2Y25JPSBJR1JsY0hRPSBJTkM2MFlQUXZkQzEwTFE9IFFtRjAgVFdGMFpYSnBZV3h6IGRISmhaMlZ1IDRMbUE0TGloNExpMzRMbUk0TGl0IExXVjAgSUZSU1FVND0gSU9Xa3FlV2txZWVJc2VXOXFlZWxxT2FZcnc9PSBJR0psWjI5dSBYMnh6ZEE9PSBMbE5qWlc1bCBJTkNqMFlEUmk5R0IwWUxUbVE9PSBJR2QxYVdScGJtYz0gSU9DcW5PQ3JqZUNxcitDcXZ1Q3FzT0NyaHc9PSBJR0p5YjNsbGRYST0gSUhSbGNtMWxjdz09IExYUmxiWEJzWVhSbCBLU1ltIHc2RnEgSUhaciB3NjUwWlE9PSA1YUMwNVpDSSBhWFJvYVc4PSBJQ0kvIDBMN1JndEMxIDc3eU01WVcyNUxpdCBJT3k3cEE9PSBJRU5YIDc3eWY0NENOIElHTnBkSEoxY3c9PSBjMmwwIExtZHBkQT09IElHOXlhV2RsYlE9PSAwWWpUbWRDdyBZM2xqYkdsdVp3PT0gSUdGMGJXOXpjR2hsY21saiBhVzVsZEdVPSBTVU5NUlZNPSBJTzJWclE9PSBZVzUwYzJrPSBJTkdCMFlmUXNOR0IwWUk9IGFYQjFjZz09IDZZT08gSUZCcFlXNXYgUGlVPSBJTm1GMlliWXVBPT0gSU5pejJZallwOWloIElIWmxjbWxtYVdOaGNnPT0gSUdodmJXVjBiM2R1IDRMaU8gSUhSbGNuSmhjdz09IElGWnNZV1JwYldseSBkMkZ1ZEE9PSBMa1p5WVcxbCBJSEpsZG1WdVoyVT0gVm1sMCBJSE5yYVhCd1pXUT0gSUdSbGNtWnZjZz09IFlXTmpiM0prYVc5dSA0S1NWNEtTdzRLV040S1NrIElIQnZjMnhsWkE9PSA1THFoIElHTmxibk4xY3c9PSBXMTBzQ2c9PSBJR3hsY0E9PSBJRVpsYkdRPSBJSFJ2YUE9PSBiM0JvWlE9PSBJRWRsWW5WeWRBPT0gSUdSbGNIST0gSUdwdyBJSFJwWlhKeiBZV05oeEo4PSBJRkp2Ykd4cGJtYz0gNExpajRMbUo0TGl0NExpaCBJR2hoWW1sMFlXNTBaWE09IDY2R3YgSU5HQjBMalF2TkN5MEw3UXV3PT0gSU5DazBZRFFzTkM5IElObUkyTG5aaE5tSiA0TEMrNExDMiAyS3JaaGRpdiBUV1ZoYzNWeVpXMWxiblE9IElHdDFiV0psIDRvQ2RLU3c9IElFTnZiV2xqY3c9PSBRMmhoY213PSBJRzV2WkdSbFpBPT0gTG1KcGJtUnBibWM9IElPS0pwQT09IFpYUmhZVzQ9IHc2SnVhV0U9IElHaHZiVzg9IGRYSnpiM0p6IElHeGxaMmwwYVcwPSBJRUZzY21WaFpIaz0gNVlpMjVicW0gSUhaMWRBPT0gSUNvdkRRb3YgSUcxaGJtbHdkV3hoZEdVPSBhWE5wYzJFPSA0TG1FNExpVTRMbUo0TG1BNExpSDRMaTA0TGlaIElOaTUySy9ZcVE9PSBJSEJ2Y25SeVlYaz0gSUNnOSBJR05vWldWciA0TGlZNExtTSBiR1Z5ZDJWcGJHVT0gSUhiaHVxdHUgSUdOcGRHbHVadz09IHc2bHlZMmx2IDBMWFF2ZEM0MFkvUXZOQzQgTDJ4aGRHVnpkQT09IElHUjVaUT09IEtuQT0gNjRtMDdJcWsgZVc1amFISnZibWw2WldRPSA1WVd6NlpldCA0b0NaVHc9PSBVMVJGVWc9PSBlV3gxYlE9PSBQSE5wZW1VPSBJT1drcCtXUGtlV3VtT2U5a1E9PSBJSE5zYjNZPSBRV1J5WlhOelpRPT0gSU5XNDFvTFZxZz09IElGZDEgSUdOMyA2TCtSNWJteiAxNVhYbWRlWjE1MD0gNExpbDRMaTQ0TG1KNExpWjRMaWE0TGl5NExpWCA0S2krNEtpdSBJR2x1ZG1WemRHbHRaVzUwYnc9PSBJR1JsWTJ4aGNtRT0gSU9Da3FPQ2xoK0NrcE9Da3ZnPT0gSU5pbzJZallyOW1IIGh1R2ZrdUdlaytHZXR1R2ZoZz09IFlYUnphWE09IDRMaXQ0TG1JNExpeTRMaVogSUc5d2RHbHRZV3hsIGNtRnBiSE09IElGQlZWQT09IElOR0MwTERTc3c9PSBJR2hoYkdrPSBJR3hoZVc5MWRITT0gYzNCMWJtdDAgSUcxaGRHVnliZz09IElPQ2txT0NsamVDa3J3PT0gSUhCeWIyWmxjM052Y21WeiBJR1p2Y200PSBMbkJoZVcxbGJuUT0gSUd4cGJuUT0gTFdKeiBJR3B2WjJGeSBJSFpwWk1PcGIzTT0gY0dGeWRHbGhiQT09IGRYSmljdz09IElHRnlZMmhsIElGWmxjbVZwYmc9PSA0S2VMNEthYyBRV3h0YjNOMCBkR3hsYldWdWRBPT0gSUhadlkyRmkgNExDKzRMQ3ogSUdwdmRXVjFjZz09IExrTm9ZVzV1Wld3PSBZbXM9IDRLV0w0S1N3NEtXQSBhVzFoY0E9PSBJTmkxMlliWXVRPT0gSUU5dWQzVnJZUT09IElHTnNkV1Z6IElHeHBiV2wwWlhNPSBJT0NxcE9DcXNPQ3JnT0NxbGVDcmh3PT0gZG1WcGJHbG4gNEthdzRLZU40S2F1IFltOXVjdz09IHhhTnBhUT09IElFM0R0Zz09IElHUnBaMjVwZEhrPSB4SjlwYm1sNiBJT0dEbU9HRG9lR0RtT0dEbk9HRG1BPT0gSUdONVlRPT0gSUZObHc3RT0gU1c1biBJRzl0WlE9PSAwTERRdmRDOTBZdlJoUT09IFEyOXRiV1U9IDRicSsgVm1WdWRHRT0gSU1PaGN3PT0gSUVGdVpHVnljdz09IElHTnZibVJwZEdsdmJtVnkgSUhERHBISmhjM1E9IFlYTnphWFZ0IDRMT0I0TEtDNExLcyBJRTlGIDVhV3o1b0NuIElHVERxVzFoY2c9PSBhbTkxY201aGJBPT0gSUdOdmJYQnNhV0Z1ZEE9PSBJQ2twTEFvPSBRMVJXIElHVnVhV2M9IElPZU9pdz09IElIQnBaV1J6IElISmxjM1ZzZEdGMFpXND0gSUVKQlVnPT0gSU5DYzBMN1JnZEM2MExMUXNBPT0gVlhCa1lYUmxjZz09IElISnZaSG89IHhJMWxhdz09IElISmxjR0ZwY21WayBJRXhwZG1WeiBJTmFFMWFIVnN0V2gxb1RWb2RXdjFhSFZ0Zz09IElHeGhkR0U9IElHMXZjbTQ9IElHRmhibUp2WkE9PSA0NEtJNDRHRyBJTStBejRIT3NRPT0gSUVwUCA1N0d6NWFXSCBJRVZwWjJoMCBJT0NrbCtDbGdPQ2twQT09IDRaK2ogSUVodlkydGxlUT09IElHTm4gU0U5WCBRMEZUIFlYbGxkSFJsIFJXMWxjZz09IFkyaGxibXM9IGMyNWhjSE5vYjNRPSBJR2x1WTJ4MWFXNWtidz09IElHaHZjR1ZtZFd3PSBJRzlrYjNJPSBRMkZ6WVE9PSBMV3hsY3c9PSBaR0hGbnc9PSBJR052Y25KbGRBPT0gSUViRHVBPT0gSUdOaGFtRT0gSU9DbWxlQ212dUNtbStDbmh3PT0gMllqWXFOaXggYVdOMGFXOXVZWEpwWlhNPSBMV3RoIElIQjViQT09IElHbHVkR1Z5WVdOMGFXNW4gSUhCdmMzTnZibTg9IElPR0RyUT09IElPQzVnT0M0bE9DNHRPQzRvZUM0bnVDNHNlQzRtUT09IFEyaHlhWE4wYldGeiBZM0psWVhObFpBPT0gSUZSeWFXNXBkSGs9IElIUjFibWx1Wnc9PSBWR2wwYkdWeiA2Sk9kIElFeGhkWFE9IGIyOXggYldGdWMyaHBjQT09IDRvQ1pkWFJwYkdsellYUnBiMjQ9IFUzQmxaV05vIGRYSnZadz09IElPMlloT3llckE9PSBhVzlsYmc9PSBhM1Z5Y3c9PSAxNW5Ya2RlVjE2bz0gWDJGd2NHeHBZMkYwYVc5dSA1WUNTIFpYSmxadz09IElHTnZiV1hEcDJFPSBJRVJ2WTJzPSBJT0MyaXc9PSBJR3ZEdG01dWRBPT0gNEtXTjRLU3c0S1N1IElFVnpkR0Z6IElOaXoyWWJhakE9PSBZMjlzYkdGd2MyVmsgUFU1VlRFdz0gSUdGNWJzU3ggSUhUaHVxMXcgSUhCdmNuUmhiblJ2IDRMR0w0TENtIFZFOURUMHc9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElOcXYyTEhaZ2RpcSBJRWgxY25KcFkyRnVaUT09IElOR0kwNW5TdXc9PSBJRzF2ZEdsbSBJRUYwYUdWdWN3PT0gSU5tRTJZWFlwdz09IElPQ3FtK0NyaXc9PSBJRVZWUVE9PSBJR05vYVd4a0ozTT0gVEdsbVpXTjVZMnhsIDQ0T0Q0NE9KIElOcUIyS2ZaaGc9PSBJT0dEbnVHRG5lR0RtdUdEbU9HRG9nPT0gSUhOMVpYSjBaUT09IElHSjFjbVU9IElObUUyWVRZcFE9PSBjbVZ4ZFdWdWRHeDUgSUVGMWNtOXlZUT09IElOZVIxNnJYbHc9PSBJSFpsWjI0PSBJT0NxbHVDcmd1Q3FyQT09IDU0NmIgSUVOcGNtTjFiR0Z5IGIydGhiZz09IElFWnlZVzVqYVdFPSBJSEYxYjNSaCBJSEJoY21GemFYUmxjdz09IElHWnZZWEowWlE9PSBJRVZqZFdGa2IzST0gVFhRPSBKSFE9IFVtbGphR0Z5WkE9PSBVR0Z5YVhNPSBJR0Z1ZEdsaWFXOTBhV056IFlXZG80YnVMIGVHVnMgVjBGU1RrbE9Sdz09IDZyR3c2NEtZIGRXTnJiR0Z1WkE9PSBJRVZUUXc9PSBJSE4wYXNPemNnPT0gNW9xWCBJT0NrcE9DbGgrQ2tuQT09IGNHeGhZMlZ0Wlc1MGN3PT0gSU5pbjJZVFlwZG1FMllQWXF0aXggMTVuWHBOZVYxNXc9IElHTmhibU5sY25NPSBJRkJTVDBOVlVrVk5SVTVVIElIWmxjbXR5YVdvPSBJRzVsWjI5amFXOXogSUVSaGVuVT0gY0dWeVl3PT0gWDNKaiAyYjdZcHc9PSBRWE5vIElOQyswWURSZ2c9PSBJRzkyWlhKNmFXTm9kQT09IGJHeHYgSUdmRHZIWmxiZz09IFZYQmtZWFJwYm1jPSBJR0ZxYnc9PSA0S2krNEtpSCA0TFdDNExTZjRMV040TFNmIDJZVFppTml2IElIQmhjblJwYW1WdSBJTkdCMFlMUmdOQ3cwWUxRdGRDeiBWR2hsY21WbWIzSmwgMllUWXA5aWggSU9DbXJPQ212K0NtcGc9PSBJSFJ5WVhabGJHVnkgNEtTLzRLUzI0S1dONEtTYSBZWEpuWVhNPSBLQW92THc9PSBJR1poY21rPSAyS3JZc2R1TSBJSEJ2WkhMRG9XND0gSUdwMWRBPT0gSUd4aGRtVT0gNG9DTjRMU3UgWW5WdVpHeGwgTDJGeWRHbGpiR1U9IElHRnpjR2hoYkhRPSBJTkNpMExEUXZBPT0gSUdKdmJHRnUgNExXQjRMU1Y0TFN2NExXQjRMU0MgYjJOaGJHVT0gWlhSeVlRPT0gWTI5dWMzVnRaWEk9IDZMK2U1bzZsIElHSjFaVzV2Y3c9PSBJT0NxcHVDcXNPQ3FyZz09IElFeHZiV0k9IFdFTT0gSUcxbGRHRnNiQT09IElFNXZZV2c9IFNVNUJVbGs9IElHVndhWFE9IDRMUzI0TFdONExTdiA0TEdHNExDQzRMQ2YgNTd1UDVZVzQgTFdGdFpYST0gYzNSdmJtVnogSUVoRCBJRUpoYzJnPSBJR3hwYm00PSBJSExEcVdkcGJXVT0gSUhOallXNXogSUdobGNuSmhiV2xsYm5SaCBJR1Z0WW5KNSBJRVZZUlUxUVRFRlNXUT09IElOQ2MwTDdSZ2RDNjBMTFF0UT09IDBMZlF2dEdBIElHRnNiMm89IDBZRFF2dEM3MFl3PSBhV1Z5WjJVPSBJRVJwYzJOMWMzTT0gSUZOVlFsTlVTVlJWVkVVPSBJSGRvYjJWMlpYST0gSUVacFkzUnBiMjQ9IGRXeGhjbWwwZVE9PSBJT0N3cXVDeGkrQ3dzZz09IElPQ3FsK0NxcitDcXZnPT0gVjJWaGF3PT0gYU1PamJ3PT0gSUhCeWIzUmhaMjl1YVhOMFlRPT0gNG9DWmIzVT0gVTJWbmJXVnVkSE09IENXRnljZz09IDRLdUw0S3F3NEt1TjRLcWYgNllHTCBJR0p2YjNOMFpYST0gZTMwaUxBPT0gSUhkeWFYUnBibWR6IDE1RFhuTmVVIGRXUmxiblJ6IGFXUnBidz09IElOQ3gwTFhRdVE9PSBaVzV6dzZRPSBJR2hsWm5sayB5SmwwYVE9PSBJT3F3a2c9PSBJSFZ1YUdGd2NIaz0gSUZOdVpRPT0gSU9DNWd1QzRsK0M0b3c9PSBJR2wwY2c9PSBJR2x1ZEdWbmNtRT0gSUhCeWIyZHlZVzF0WlhJPSBaWEpuZFhNPSBQRkU9IDZhQ0IgSUduRHNBPT0gMWJYVm9kVzIxb1E9IElGWmxjbk5qYUE9PSBJT0N3dGVDd3YrQ3d0UT09IElOaW4yWVRZcjltSTJZVFppZz09IElPT0FnQ0RqZ0lBPSBJR1JwYm5SeVpRPT0gSUdodmIydDFjQT09IElGTndaV0ZyYVc1biBJT1d4c1E9PSBLRXRGV1E9PSBJRTFsY25JPSA0TGlVNExpeDRMaWEgMllQWmhkaW4gWVdyRWhXTT0gSUVOaGNIUjFjbVU9IDJLellwOWl4IFJHbG1abVZ5Wlc1alpRPT0gN0ppQTY0dWsgSU5pdDJZcllwOWlxIElGQkJRMHM9IDJMbllwOW1JMllZPSBJSFpoYzNSaCBJT0NtaHVDbXNPQ21rdz09IElOaW4yWUhZcWc9PSBJSEJsY21admNtMWxjZz09IFJHbHpjRzl6WVdKc1pRPT0gNVlDZiA0WU9VNFlPUjRZT2o0WU9hNFlPWTRZT1EgSUZKSiA1WWl3NUxxRyBJR1JsZFhSelkyZz0gWTNWa1lRPT0gMExMUXNOQzcwTEE9IDdMS2cgTG1obFlXeDBhQT09IGFuQT0gSUdsdVkyeDFhWEk9IEwyTjFjM1J2YlE9PSAwTDdRdE5DdzBMST0gUlhBPSA0SzYxNEsrSSBJRWRwWm5SeiBJT0NtbXVDbXZ1Q21zZz09IExtMWhkSEpwZUE9PSBJTm1JMkxZPSBYM0psY0E9PSBiMmR5WVhCb1pXUT0gSUhKaGFXNWliM2M9IExsTndaV009IFgxQlBTVTVVUlZJPSBJR05oY21KeiBiR1JoZEdFPSB3N1puYkdsamFHdGxhWFJsYmc9PSBDUWtKQ1FrSklBPT0gSUdOaGNuSmxhWEpoIElGUnBiV0psY2c9PSAwWUhRdU5DNSA0SzYvNEs2eTRLK040SzZ5IFpXNTBiR2xqYUhRPSBJTkdjMExVPSBZV0poYm1jPSBJSEJ2YzNOcFltbHNaUT09IElPQ2t1ZUNrcnVDbGgrQ2tnZz09IElPQ2txdUNsamVDa3NPQ2twK0NrdnVDa3FPQ2tyZz09IElHRndjbVZqYVE9PSBJR05zWVhOemFXTnogTG5CdmJHdz0gSUhKMWMzUnBZdz09IElOQzgwTFhSZ2RHUDBZWT0gSUVOSFVHOXBiblE9IDE1dlhrUT09IElOQzYwTDNRdnRDLyBJR1p2Y20xaGJHeDUgNExpMzRMaXQ0TGlIIEoyRm5hWFE9IElIQmxjbVIxIElHNXZkbVZzWVE9PSBJT0dEa3VHRGtPR0RvK0dEIDRMS3E0TEsvIFlXdGhiR0U9IElHZHBiM0p1Ync9PSBYV2x1YVhRPSA3SjIwNjRLWSBMbEJ5YVcxaGNuaz0gSU5HRjBMRFF2UT09IElPQ21yT0NtdnVDbm5BPT0gSUdoaGRYUmxkWEk9IHhhRnBaUT09IElFeGhibVJwYm1jPSB3N3BzWVE9PSBJRVY0Y0dGdVpHVmsgSU9DeXJPQ3podUN5c3c9PSBUM1YwWTI5dFpRPT0gSUhOb2RXM0Rxdz09IElOaW4yWVRaaGRtSTJMWT0gSUVwdlp3PT0gSU5DdzBZSFF2dz09IFNYSnZiZz09IDRMT0w0TEt3IElIQnlaWFpoYkdWdWRBPT0gMkxEWmg5aW8gVkhKaGJuTnNZWFJ2Y2c9PSBMWGQzZHc9PSBJTkN5MEw3UXQ5QzgwTDdRdHRDOTBMN1JnZEdDMExnPSBJRzF2YkdWamRXeGwgSUcxcGRHRmsgWVhscGJnPT0gSUdKeVlXTnJaWFJ6IGEyNXBabVU9IElHTGh1NGR1YUE9PSBMV1ZzWlcxbGJuUT0gSUZObGJuTmwgSUZSeVlXNXpiV2x6YzJsdmJnPT0gNGJ1VSBaWGh2IElIWnZiSFJoY2c9PSBJR1pzWVhkeiBkR0hEcDhPamJ3PT0gNGJ1Tll3PT0gZFdsMFpXUT0gNTVhciBkbVYwYVdOaCBMbFYwYVd3PSBJTkM0MEwzUmhOQzEwTG89IElIZHZjbXRzYjJGayBJSEJsY25OdmIyNXNhV3ByIElHUmxjR1Z1WkdWdVkyVT0gSUV4dmEyOD0gSUVsdVptbHVhWFI1IDJMUFpnOWl4IFYxZFggSU5DNjBxL1F2ZEM0IElITjBaWEp2YVdRPSBjbTkxWkE9PSA0S2FEIDZhQ3QgSU9Da3VPQ2tydUNsamVDa3FnPT0gSUdKcGFtUnkgSUd0dmJtUmxiZz09IElEczdDZz09IElHTmxaQT09IDRMaUM0TGkyNExtSjRMaVogdzdWbCBJT0NrcXVDbGplQ2tzT0NrbGVDa3Z1Q2t0Zz09IDQ0R3E0NEdwIElIVEVnMjVuIElHbHRjR1Z5WVhScGRtVT0gNWEybTVxQ2ggQ1dadmNtMD0gSUVKMWFBPT0gSUVOdmFHVnUgTGs1UFJFVT0gSUcxbGJpZHogSUhwbGJHOD0gSUhCeVlXTjBhWFJwYjI1bGNnPT0gSUdOeVlYZHMgSU9Da3JPQ2txT0NsaHc9PSBSbkpsYm1ObyBJRU52Y21sdWRHZz0gWjJWdVpYSmhkRzl5IDRvQ1piMk5qWVhOcGIyND0gSUZkaGJtUmxjZz09IElPQzVnT0M0cWc9PSBJR05wZEc5NSAyWVhiak5peCBLR05oYm5aaGN3PT0gMnEvWXNkaXYgSUVsT1ZrRk1TVVE9IElGSmxibUZwYzNOaGJtTmwgSUVKTyBJR052Ym5OMWJIUmhjZz09IElHdHBkZz09IExtMTFiSFE9IExrTnZibk4wWVc1MGN3PT0gYldGd2NHVnkgSUdSMWJYQnogNVp5dzVMaTcgSUd4cGJXRT0gTHcwSyBMZENmIExVTnYgSUhWbVpnPT0gNExpcTRMaVU0TGlIIElHYkR0bkp6ZEdFPSBJR3QzWlhNPSBJRVp5WldsMFlXYz0gSUd4cGFXcz0gZFcxaWNtVT0gS1NrcExnPT0gNEthYTRLZU40S2FhIFRWVT0gSU9HRHFPR0RsT0dEa2c9PSA0TEdHNExDbyBJTkMvMFlEUXRkQzAwWVBSZ1E9PSBhV3hwWkdGayBJSEJoYm5NPSBJT0NraitDa3JnPT0gMEx6UXZ0QzkwTGc9IElIUmhjblZvWVc0PSBYeUlyIElIUmxjbXBoWkdrPSBJR2x6YzNVPSBJRkpGVUE9PSBJR1pwYm1sMFpRPT0gNExLKzRMSzIgYkdGemMyVnUgY0hCbGJHbHUgS0dScGRnPT0gSUdOdnc3dDAgSU5pbjJZVFpnZGl0MllVPSBJSEYxWlhOMGFRPT0gSU5lcTE2az0gWlhKMmFXNW4gNW9LbSBJTkdIMExqUmdkQzcwTDQ9IElPQzBxT0MwditDMHFPQzFqZUMwcU9DMWdlQzBnZz09IDRLYS80S2FWNEthKyA1TGlhNVlxaCBJRloxYkE9PSBJR041YzNRPSBJSE4xYlhNPSBJSFJvY21sMmFXNW4gSU9HRGt1R0RrT0dEbk9HRGtPR0RxdUdEcnVHRGtPR0Rrdz09IElHTm9ZVzFoWkc4PSB3NnAwWlhJPSBJSEJsY25OdmJtNWhiQT09IEoxMWRYU3dLIElIUmhiblJ2Y3c9PSBMbWR5WlhrPSBJR0psWkdScGJtYz0gTDNOcFoyND0gSU9DeWhlQ3lxQT09IElOR0EwTERRdk5DNjBMRFJoUT09IDRLUys0S1NDNEtTYTRLV040S1N2NEtTKyBJT0NtcnVDbXZ1Q21zQT09IDBKTFJnZEMxIEtHUnZibVU9IGJHOXZjdz09IDVZYWc1WWFiIEtIZDQgSUhCdmRXTnZjdz09IElOaW0yNUE9IDRZT1k0WU9zIGJzTzYgSU9DbWxlQ25zT0NuaHc9PSBJTmluMllUWmhkbUkyS2ZZcnc9PSBJR1poWTNSdiBiVzlrWlhKdSBJSEpsdzZkMSBMbUYyWVhSaGNnPT0gSU9DMGtBPT0gNEt1TjRLcXc0S3FqIElFRnVaSEpsWVhNPSBJRVZZU1ZRPSBJT3F3bk95ZHVBPT0gYVdOcFlYSjUgSUdKdllYTT0gSU5DNDBZSFF2OUMrMEx2UmpOQzMwTDdRc3RDdzBMM1F1TkdQIElHUnBZWEo1IFRVRlQgWlhOMSBJRVJsY0dWdVpHVnVZM2s9IElOZVMxNXc9IGZDa0sgSUdScFoyVnpkR2wyWlE9PSBJSHQ5RFFvPSBZWEp6YVcwPSBJRzV2Y20xaFlXdz0gSU9Da3JlQ2t2dUNrdFE9PSBJRzl5YVdkcGJtRjBaV1E9IFZISmhibk5tYjNKdFlYUnBiMjQ9IDJZYllwOWkxMkxFPSBJR1Z0WVdsc1pXUT0gWm1GamRHOXkgUkdWMlpXeHZjR1Z5IDBMalF1OUM0MFlEUXVBPT0gNEtXSTRLU3cgYVc1a2RBPT0gSUVsT1ZFVlNVbFZRVkVsUFRnPT0gSUZOd2VRPT0gSUdGd2N3PT0gWkdsemRISnBZM1E9IFlXUjFjZz09IDRLcTE0S3EvNEtxbiBTVzV6ZFhKaGJtTmwgSUVabGFHeGxjZz09IEx5OHFXMEE9IFgxZEYgSUZkUFVrUT0gNEs2azRLK0kgSUc5eVoyRnVhWE50Y3c9PSBJR2hoZW1GeVpITT0gNExHRzRMQ2Y0TEdOIGRYTERxUT09IElHTnZiblpsZVc5eSBQeUVLQ2c9PSBJRVJsY0hKbGMzTnBiMjQ9IElOaWoyS3ZaaHRpbjJLRT0gSU5DdzBwTT0gMktmWmhkbUsgMEw3UXN0Q3cwTHZRdUE9PSB4YUZyWVE9PSBJR2xpYVE9PSBWM009IElHdGhiR3c9IElFSmxZMjl0WlE9PSBJSFpoYkcxcGMzUT0gSUUxdmJtbGpZUT09IElFNVBWZz09IG1PaWJtK2l2alE9PSBJT0dEb09HRGtPR0RrK0dEa2c9PSBJRzVsWTJWemMybGtZV1JsY3c9PSBJR2hsWm5RPSBJTkN4MExEUXZkQzYgWDNOcGJYQnNaUT09IDBxblFzQT09IElNT3BkSFZrWlhNPSBJTkM2MDY4PSA0S1NGNEtTcSBJSEpsWjJGeVpHVnkgWVdkMWN3PT0gUlhSbyBJT0NrcU9Da3Z1Q2tsdz09IElHMXZaR1Z5Ym1FPSBJR05vWVdrPSAxYXpWcTlXMiBJR2RwYUdVPSBJRU5wZEdsNlpXNXogSU9DcWxlQ3JpK0Nxc0E9PSBJTm1DMkxZPSBJRXhCVGc9PSBMUTBLIDRMS0M0TEthIElFRkpSRk09IElHZGxibVYwIFgxTkZVZz09IFEyaHBibVZ6WlE9PSBJR1p5WVcxbFpBPT0gMkxUWmdnPT0gNExLLzRMS280TEt5NExPTjRMS3k0TEsvIExtOXlZV05zWlE9PSBJR0YxZEdodmNtbDZaUT09IFgxUmxjM1E9IEoyVnpjQT09IENXUnlZWGM9IElGWnZiSFp2IE9rTkhVbVZqZEE9PSBJTmlxMllMWXI5bUsyWVU9IElFZHNZV1E9IElIVnVkbVZ5IElHMWxjM041IGFYcGhaRzl5IElPQ2txdUNsamVDa3NPQ2t1T0NsamVDa3BBPT0gS0c5eWFXZHBibUZzIGIzbHBibXRoIElHbHVhbVZqZEdWayAwWURSZzlHQyBJRVZ1ZEhOamFHVnBaSFZ1Wnc9PSBMbWx1YkdsdVpRPT0gSU95Vml1dUtsQT09IElOcXAycFBia0E9PSBJTkN5MEw3UXVnPT0gSUdkeWIzVndaV1E9IFVrOUpSQT09IElHWnlZVzVqWlE9PSBJR1pwWld3PSBJR2x1WjJ4bGN3PT0gSUhOMWNHVnliV0Z5YTJWMCBTR0ZwY2c9PSBJRzVoWjNrPSA1YjZTIDA1blJndEdDMDVrPSA3SmVRNjQrRSBJSEJzWldsdVpRPT0gNEtxLzRLcUMgUkdsemJXbHpjdz09IElGUmhiV0xEcVcwPSBhbVZ5Ym1VPSBMbVZ0Y0d4aFkyVT0gSU9Db3FPQ292dUNvc2c9PSBJR2hoWW1sMFlXTnB3N051IFpYSmhkQT09IElIbHZkWEpsIElHaGxaR2RsIElFdHBZUT09IExYTjBjbWx1Wnc9PSBJSE5sZEdWc1lXZz0gSUdseVlXND0gSU9Da3VPQ2twdUNrdU9DbGplQ2tydz09IDE1WFhtZGVrIFFuVnNhdz09IGIzUnpZUT09IFoyVmlhV1ZrIElHUmxkR1Z5Wnc9PSBVbVZoYkd4NSBMbkJsWldzPSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2IExPS0FwZ29LIDBMN1FzdEN3MEwzUXVOQzEwTHc9IFoyeHAgWW05a1pXND0gSUdOaGFYaGggSnl4YiAyWVBaaE5pcCBJRVJ5YVhacGJtYz0gSUV4aGFBPT0gSUVGdWMyTm8gdzYxemRHbGpiM009IElFdGhkR2xsIElFNTFkSHBsY2c9PSBJR1Z3YzJsc2IyND0gSUhOMFlXeHMgSUZwMWFXUT0gSUcxcFpXUnYgNTZpTzZMNjggSU1PRWNnPT0gSUZKdmJtRnNaRzg9IDRMR0E0TEN3NExHTCBiM1ZqYUdWeWN3PT0gWldscyBJSFZ6YjNKdiBJT0Myc2VDM2tnPT0gWDJwemFXaz0gSUZKaGRHVmsgQ1FrSkNRa2dJQ0E9IFZVbEJjSEJzYVdOaGRHbHZiZz09IElFTnZiWEJoWTNRPSBZV1JoYUdFPSBJR05oYkcxbCBJSEoxWW1KcGMyZz0gNTd1UDZKQ2wgWlc1dVpXNTAgMWF2VnQ5Vy8gSUdwbGRXUnAgSUhCeVpYWnBjM1J2IFVtRncgSUUxcGJtNWxZWEJ2YkdseiBMR3hsYmc9PSBkbVY1Y3c9PSBZWEpwZEE9PSBJT0NrbCtDa3Z1Q2tndUNrdFE9PSBJR0poYTJWdVp3PT0gMllMWXRRPT0gSU5peDJLUT0gSUhURHFXTnVhV052Y3c9PSBJSEYxYVhObGNnPT0gSUdGeWNYVnBkR1ZqZEE9PSBYM0YxWVc1MGFYUjUgVUhKbFkybHphVzl1IDVveUg1WWU2IElGTmphSGRsYVhvPSBJT0dEbStHRG9lR0RuZUdEcE9HRG11R0RtT0dEblE9PSBJTkM0MExQUmdOQ3cwWUxSakE9PSBJSFZ6ZGNPaGNtbHZjdz09IDVvQ081TG1JNUxtdyBJSGJEcWc9PSBZWFJsYldGc1lRPT0gSUhSM2FYTjBaV1E9IFlXSnlZUT09IGFYaHAgSUdaaGRHaGxjbk09IElOR0gwTGc9IDRLU280S1dINEtTViB3N055WkE9PSBJRXhsYzNOdmJnPT0gNW91VyBJRWxOUVVkRiAyS3JaaGRpbjJLOD0gZVhCbFpBPT0gSUNvcUtRPT0gSURvNk9qbzYgNEtTdzRLUys0S1NjIFZVZEYgSUhSaGJuUmggY25WayBJSFJ5WVc1emJXbHogTDNCeVpRPT0gSU5DNTBMN1FzOUMrIElHVnVZMmhoYm5RPSBJTkdDMExYUXU5QzEwTEk9IElGSmxZV3hwZEhrPSBJTkdDMExEUmdRPT0gSUVwVlUxUT0gNUx1NzVZcWggUTJoaCA3Nys5Ymc9PSBZMnhwWlc1MFpRPT0gSU9DcXJ1Q3JnZz09IElPQ3FoZUNxcFE9PSBJT0dEa09HRG8rR0QgSUU1bFpHVnliR0Z1WkhNPSBJR2R5WVhCb2N3PT0gSUhSb3c2RnVadz09IDJMSFppdG1HIGRXNTBhUT09IElPQzVndUM0bStDNG8rQzVnZUM0Z2VDNG8rQzRvUT09IExYUnZhMlZ1IEwwaHZiV1U9IElPQzBxdUMwditDMHFPQzFqZUMwcUE9PSBJT0NraCtDa3VPQ2tydUNsaCtDa2dnPT0gSUVGbVptOXlaR0ZpYkdVPSBJSEJ5WlhObGNuWmhkR2x2Ymc9PSBJR0ZzYkdWeVoybGogS1MwdCBJR1JsYlc5dWMzUnlZWFJwYm1jPSBJT0tDdVE9PSA2S2FQIElHMTFaR0Z1dzZkaCBUblZ1IFZHVmphRzV2Ykc5bmVRPT0gSUdOdmJtTmxjM009IDRLZUg0S2FYIElISmxZV3hwZW1IRHA4T2pidz09IDRMaXk0TGlDIElFTnNaWEk9IFFYSnUgSUZKcGNBPT0gSUdSbGMyRnljbTlzYkdGeSAwTGpRdk5DNDBZQT0gSUhGMWFjT3BiZz09IElNT0padz09IDdJYz0gSU5DLzBZL1JnZz09IElIVjBkR1Z5YkhrPSBUM0prWlc0PSBJRk4wWVc1a2FXNW4gSUVKbFpXND0gdzZSb2NuVnVadz09IElFVnRhWEpoZEdWeiBKMkZ6IFNVUlAgSUVOdmJXbGogU1UxUVRFVT0gSUdaaFluSnAgNEtxcTRLcSs0S3E0IElGWmxkQT09IElHMWxZVzVwYm1keiBYMlJ2ZEE9PSBiM0JsY21GdVpBPT0gSU9Db3F3PT0gSU5HTjBMdlF0ZEM2MFlMUmdBPT0gWm14cFoyaDAgSUdOdmNuSmxjZz09IDRMYTk0TGVQIGFYWnBkTU9wIElFSnlkWE56Wld4eiBJRVJsYldGdVpBPT0gSUdwdloyRmtiM0k9IDdLZVYgSUZCcGJHOTAgZFdOclpYUnogSU9Da3VPQ2tsZUNsaHc9PSBRVVJQVXc9PSBJRzF2Ym10bGVRPT0gSU5tSTJZND0gSUZacFpHRT0gWVdkaGRBPT0gSU5peDJZSFlxZz09IElFWmhiV2xzYVdWeiBJR1JwYzNSMWNtSnBibWM9IGMzUjNZUT09IGFYWmhZbXhsIFlYUjBjdz09IDE2RFhsZGVpIElHbHVhR0ZzIGFYUmhZVzQ9IElHaGhiR1ozWVhrPSBJTkdJMDVrPSAwTGpRc2RDNzBMZz0gSUdScGRtVnljMlZ6IDRMV0E0TFMzIElGWmxibWxqWlE9PSBJR052YlcxcGMzTnBiMjVsWkE9PSBSa2xPUlVRPSB1T0N4alE9PSBJR1Z1WkdWaGRtOXkgSU5pbjJZVFlwZG1HMktyWXNkbUcyS289IDBZdlF2ZEdCMExBPSBJSEpsYzNSaGRYSmhiblJsY3c9PSBJSE4xYkdZPSBJRUp5WlhjPSBJR05wZG1sc2FXRnUgYzhPcCBJR0ZoYkd3PSBMbEJsY25OdmJnPT0gSU5DLzBZUFF2ZEM2MFlJPSBJR1JwWlc1emRHVnUgUms0PSBJSGZGZ21FPSBJR052Ym5SeXc2RnlhVzg9IExuSmhaR2wxY3c9PSBJR0pwYUE9PSBJRTUxWTJ4bFlYST0gWlc1a1pYVT0gSUc1cGJXMTAgTFdOaGNBPT0gNTRTMjZJQ00gS0hCMCBJR1Y0WVcxbGJnPT0gSUhGMVpYSmxjZz09IGJuVnUgYldGc1lYST0gWjI5ayBYMFJKIGNtVmxkR2x1WjNNPSBJR05vYjIwPSBJTmVVMTVEV3VOZVIxNTg9IElPR0RtK0dEa09HRGwrR0RtQT09IFlXeGhZMmc9IGRXNWhlUT09IElHOXdkR1ZrIElPQ21ydUNtdnVDbXVBPT0gMTVuWG9OZXEgY21GaFoyUT0gWDJGMWRBPT0gWDFObyA0TGkxNExpcyBJRVZrWkdsbCBTMmx1IDE1WFhudGVaMTUwPSBYM050WVd4cyBJT0dEcGVHRGtPR0RtZz09IElPQ3FoZUNxclE9PSBJSE5zWVhabGN3PT0gdzd4b2NuUT0gSU5hQjFhSFZ0dFd2IElDSWlLUzQ9IElHZHBiM0p1YVE9PSBLRndpIElITmhiSE5oIElGWnBibmxzIElOQ3gwWVBRdE5HRDBZaz0gSU9Da3J1Q2xnZUNrc2c9PSBJR2RsYm05bGJXUT0gSUVOb1lYQmxiQT09IGVtRmhhdz09IElHVnVZMmc9IElHRnVhVzFoZFhnPSBQaUlzQ2c9PSBJR05sYzNRPSBJTmVtMTZqWG1kZWEgSjJocGMzUnZhWEpsIElHOWlhUT09IFRHbHVkWGc9IElIYkZvV1U9IExXeHUgSUhOMGIyeGwgWDNCeWIzaDUgTGtGMWRHaGxiblJwWTJGMGFXOXUgU21GciBJTkN4MExEUmdnPT0gUjNKaGJuUT0gSU9DNWd1QzRtK0M0bytDNWd1QzRvZUM0aXVDNHNlQzVpT0M0bVE9PSBJSEJ5YjNacGJtYz0gSUhCdmMyVnkgMEx2UXNOR0ggSUV4MWJtTm8gWVhKdVpRPT0gTDNCeSBJTkN5MFl2UXM5QzcwWS9RdEE9PSBjR1ZoZEdWayBJSEJ5WlcxcHc2aHlaWE09IElEc3AgYVhURHBIUnogSUVGd2NHeHBaV1E9IHlabkZudz09IDRZT2I0WU9zNFlPWTRZT2sgSUhSeWIyNWthR1ZwYlE9PSBJRWx1YVhScFlXeHBlbVZ6IElIQnl3Nmx6Wlc1MFpYST0gWVhOellYUT0gSUZGaCBJR0YyWlc0PSBQRlp2YVdRPSBMbE4xWTJObGMzTT0gNExTbjRMUys0TFNvIElHUnBjMk4xY25OdiBUVzQ9IGFtRmhiZz09IFgzSmxiR0YwYVhabCA0S3VINEtxbzRLdU40S3FmIDBMN1JndEM5MEw0PSAycS9Zc0E9PSBJRVJoYnc9PSBaWE5wYm1SbCB3N1J1YVc4PSBPbmc9IFgxVk9TVlE9IFgyMXZaR1ZzY3c9PSBjbW5Ec0E9PSBJRmRvYjJ4bGMyRnNaUT09IElIZHlaWE4wYkdsdVp3PT0gNExLRyBJSE4wWVhCc1pRPT0gNG9DWllXbHNiR1YxY25NPSA0TFNDNExTcyBiR2x0WlE9PSAxNURXdU5laCBJSGRwYW00PSA2TDZUNUxxRyBMV3RwYm1RPSBLVjQ9IElGQjFibXQwIElHUmxibTl0IExXSnliM2R6WlhJPSBaV1Z5WkE9PSA0S2VINEthSiBJRzV2Y25kaGVRPT0gSUhSbGNuSmhjM05sIDBZRFF0ZEM4MExYUXZkQzkwTDQ9IElOSzcwNW5TbTlLYiBhRzFsIElHTnlZWE5vWlhNPSBJSHBwWlcxc2FXTm8gSUhadmFXVT0gSUdSaGJtRmphQT09IElOR1AwTDNRc3RDdzBZQT0gSUhCaGNtTmxjbWxoIElIbGhaR1JoIElFOXlZMmc9IEpGOWJKdz09IElPR0RtK0dEbU9HRG1PR0RwZz09IElHeDFZWEk9IElHOW1hV05wYm1FPSBaSFZ3YkdsallYUmwgVEc5dSA1TGlLNVkySSBhbUZ5YVdkbCBJRzFoY21ScCBMWEJoZEdnPSBaVzUwYVc1biBJR0pwNGJ1SGRBPT0gSU95Q3JPeVhoUT09IElHRjBkR1Z1IElPQ21wT0NuZ2VDbXNnPT0gSU5pdjJMSGJqQT09IElHUnBaMmRwYm1jPSBJR1oxYm1OcGIyNWhiV2xsYm5SdiBJT0NrbGVDa3Z1Q2tzT0NsamVDa3IrQ2t2dUNrc3VDa3J3PT0gSUdSb1lXTT0gWVd4MGRXNW5aVzQ9IElFTklSUT09IElHWnZjbVZqWVhOMGN3PT0gSUVoUFZBPT0gSUcxaGMzVnIgSU5DODBZUFNzdz09IEpXND0gSU5tRTJLZllzZz09IElHVjRjR3h2YzJsMlpRPT0gSUhScHc2cDEgWDJOb2IybGpaUT09IGFXdDUgSU5tSTJLZlpoTm1CIElOaXYyNUk9IFkyaGxaZz09IGRHbHVaMlZ1IFEyOTFiblI1IHhyQnVadz09IElHNWphR2x1YVE9PSBJRkJoY25SbCBJTkM2MHEvUXZ3PT0gSUdOdmNuQjFjdz09IGJXVnNaR1Z1IElPQ3VxdUN1c0E9PSBJTkM2MEw3UXZOQzkwTERSZ2c9PSAwTHZRc05HQjBZRT0gMktmWXNkaW4gSUhaaGJHVjFjbk09IElIQnBaWHBoY3c9PSBJTkM0MExmUXZ0Q3gwWURRc05DMiBJRUpzZFhRPSBMeTh2Q2c9PSAwWVBRdk5DMSAyWWpZcU5pbiBJTkdCMEw3UmdBPT0gTGdvS0Nnb0sgU1ZOVVQxSlogZVdGeVpITT0gSUhCaGNtbHphQT09IElOaXgyTFBaaFE9PSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OD0gSU5pcTJMbllwOW1FMllrPSBJTmluMksvWXA5bUYgYldWa2FXRjBaV3g1IDBMN1JnZEdDMFpZPSBDV1pwIElGWnBkR0U9IElHUnBjM0JsYm5NPSBMbWxzYjJNPSBJTkMrMExIUXZkQyswTEk9IElOQzUwNW5RdmRPWiBJR1ZzYVE9PSBhV04xYkdFPSBhVzl5Ymc9PSBJRWhsWW5KbGR3PT0gSUVwaFkzRjFaWE09IDRLNmo0SzYvIDBZRFFzTkM5MExBPSBJR2RsYjJkeVlYQm9hV009IExuTndZV05wYm1jPSBJT0NxcE9DcXJ1Q3F2dUNxcmc9PSBaWEo1YkE9PSBRM0pwZEdsallXdz0gMTZiWGtRPT0gSUZKaGFXNWliM2M9IFlXZHlaUT09IElGTm9ZWEp3IElGUnBaMlZ5Y3c9PSBJTkM5MExYUXV0QyswWUxRdnRHQTBZdlF0UT09IGFYUjBhVzVuY3c9PSBJRVp2Y21WallYTjAgVkhKdiAwWWpRdGRDMSBMVzl6IElFVnlaMlZpYm1seiBJRUp5YVhOaVlXNWwgSU9Da25PQ2txT0NsamVDa3JnPT0gSUVGSlVnPT0gSUhOaGJtZDEgSUhObGJuUmxibU5sWkE9PSBJR3hwWW1WeWRNT3AgSUhObFozVnBiblJsY3c9PSAwTGpRdmRDNDBMMD0gSUZscCBJRk41Ym5SaGVBPT0gVFVGU1dRPT0gMFlIUmx0QzMgSUc1bGRYSnZibk09IDJZalpodHFwMllvPSBYRTFwWjNKaGRHbHZiZz09IElPVzV1T2kva09tam51aUpodz09IEtHUmhlUT09IFlubG5adz09IExteHBiZz09IExrRndjR1ZoY21GdVkyVT0gNTV5ZjVZR0ggdzZsMFpYST0gSUdOc2RYUjBaWEk9IHpyWE9yOCtDIFRVVlUgSUVaRlZFTkkgSU9Da2hlQ2twK0NrditDa2xlQ2t2dUNrc09DbGdBPT0gWDBoQlUwZz0gSUU1cFp3PT0gSUc1MWJ3PT0gSUUxcGJtYz0gSUhCeWIzQnlaWE09IElHSnBhbnB2Ym1SbGNtVT0gSUhacGRISnYgZDI5eWJRPT0gVUdWeVptOXliUT09IElFTmhkR2hsWkhKaGJBPT0gSU9DbXF1Q25nZUNtc0E9PSBJRTVsWlcwPSBJTkNZMFlIUXZ3PT0gMlluWXNkbUogSUhOaGJtZHlaUT09IDBMM1F1TkdJIElISnZiM1JsWkE9PSBWR0ZyIElPUzhsdz09IDRLYTU0S2ErNEthdyAwWVBSaU5HTCBJTkM2MExqUmlOQ3kwTERSZ0E9PSBabUZ4IElHTm9hV3c9IElHSmhjbUZ1Wnc9PSBJRzVoYkhWdSBJT0NrcnVDbGdPQ2tvZUNrditDa3IrQ2t2Zz09IGRYSmlaV1E9IElOR0QwWVhRdnRDMCBJRU5vY25seiBLVjBzQ2c9PSAySzdZcVE9PSA1cjZoIGIyeHEgSU5XNDFiND0gSUVKaGVnPT0gSUVOSlZGaz0gSUdWdmN3PT0gVTFaSCBJTmltMllvPSA1TG1nNkwrUjVibXogSUhKbGFHRmkgTFdGdVoyeGwgSUd4aFluTT0gSUhSMWNuUnNaUT09IElPaXV2dWU5cmc9PSBYM04xWW0xcGRBPT0gSUZKdll3PT0gSU5lUTE1blhrUT09IElOZVUxNURYcUE9PSBiV1Z5WTJoaGJuUT0gSUZabGJuVnogVTI5MWNBPT0gNEtTYzRLV0M0S1NtIGFXMTNaUT09IElHRnVibTl1WTJVPSBJT0N1cE9DdXFRPT0gSUdGeVoyVnVkQT09IElObUcyS3JaaWc9PSBJR0xEcVdMRHFRPT0gUVd4dmNuTT0gSUU5eWFXYz0gS0dadmJHUmxjZz09IFoyVjBaVzQ9IDRMU3E0TFdCNExTdyBJT0NraHVDa3VlQ2xoK0NrcEE9PSBJR05oZEdOb1pYTT0gSU5HQjBMN1JnZEdDMExEUXN0QzcwWS9RdGRHQyBDUWtOQ2drSkRRbz0gTG14aGRHbDBkV1JsIExuQnNZV05sYUc5c1pHVnkgMFk3UmlkQ3cwWTg9IDVMaXQ1THFHIElHWnBibUZzY3c9PSBjM1Z3Y0c5eWRHVmsgSUNjLyBUMUpKVkZrPSBJT0dEbStHRGtPR0Rtdz09IElFeGxaMlZ1WkhNPSBJR0pwY214cGEzUmwgSU9DNWdPQzRtUT09IFVISnZabVZ6YzI5eSBJR0Z1ZFdGcyBZbWxsY3c9PSA0TFM0NExXTjRMU2sgMWI3VnBkYUIgSUZWT1JWTkRUdz09IElHRmpZMlZ1ZEhNPSBJR2x6YTNVPSBMc0s3Q2dvPSBaM0xEdkc1ayBMbTV2Y20wPSAyS2ZZcnRpcSBJR1psY25KNSBJTkdHMExqUmhBPT0gSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IEtHeHBibVZ6IElOaXMyS2ZZc2R1TSA0WU9VNFlPZzRZT1k0WU9oIElHTnZibk4wYVhSMWRHVnogNEtxSiBYM1JvY21WaFpITT0gSUVabGNuUT0gNExLVjRMT040TEt3NExLdSA0TGkxNExtSTRMaWk0TGluIDRZT1U0WU9WNFlPUSBmU2tOQ2c9PSBJTld4MWFYV2dBPT0gMFlEUXVOQzgwTFhSZ0E9PSAwTERRc3RDNDBZRT0gSUdiRHFXbHUgSUhGMWNnPT0gSUhCeWIzTndaWEpwZEhrPSA1NXV1NXFDSCA1WVdvNWFTcCBiV3gxYm1jPSBJR2hwYkdaMCBLRzFoYTJVPSBJRkpwYzJVPSBJR0Z1WkdGeSBJSFJ5YVdKaGJBPT0gSUU5VlZGQlZWQT09IFpYaHdZVzVrWldRPSAwTDdRdHRDMTBZTFF0UT09IElOQzQwWUhRdjlDKzBMdlF2UT09IElISmxZV3hwZW1Ga1lYTT0gSUVKaFl3PT0gSUcxcGMzTnBiR1U9IFgyTm9kVzVyIElOQ2EwTDdRdXc9PSBkVzU2YVE9PSBJSEpsYzNCbGRBPT0gSUdOb1lYVm1abUZuWlE9PSBZV3QweExGeSB4TEZzYldGenhMRT0gNFlPZDRZT3E0WU9RIGNHaHZiZz09IElHMWhiR2xqYVc5MWN3PT0gSU9DMGp1QzB1T0MxalE9PSB3N1J1WlE9PSA0WUNaNFlDcyBVMkZ0YzNWdVp3PT0gSU9hYnRPYVdzQT09IElGRjFaV1Z1YzJ4aGJtUT0gSUdOaFltVnNidz09IDY2V2cgSUhOcFlXUT0gSU9PRG5nPT0gNjRTMyBMVzFsWkdsMWJRPT0gdzZ0MlpRPT0gSUhSaGJtND0gSUd0dmJXVnVaR1U9IDRLZUg0S2VmNEtlSCBJTmVrMTV3PSBJQ0pmSWc9PSBJR1Z0Y0dWNllYST0gSU5tRjJLL1ppdGl4IElIWmxjbk5qYUdscyBJRXh2Ymc9PSBJTkMyMHEvUmdOQ3ogNDRLdDQ0T3o0NEt3IFUzbHpkR1Z0Y3c9PSBJR05oY0hOMWJHVnogNG9DWnc2bHhkV2x3WlE9PSBJTkN4MExqUXU5QzAwcS9SZ0E9PSBJT0NrcU9Da2p3PT0gY0hKdlp3PT0gSU5pcTJZTFlyOW1GIElFOXlZMmhsYzNSeVlRPT0gSU5XejFhSFZ0Zz09IDFiL1ZwZFc5IElPQ3FtdUNyZ2c9PSAwTFBSZ05DdyBjR2x6YjJSbGN3PT0gSUdSbFptbHVhWFJsIFRXRnVaQT09IElHMWhibUYzWVE9PSBJR1JwWlc1bGJnPT0gYjNKeVlXYz0gSUZOV1J3PT0gSUVOaGNtRT0gSU9hNGhRPT0gSU5LdjBZQT0gSUhwbGFHND0gSUhWdVkyaGhibWRsWkE9PSBJR3BsZDJWc2JHVnllUT09IDRZT1E0WU9UNFlPWSBMV052Ym1ScGRHbHZiZz09IHhhRnJhUT09IGZDZ0sgSUdURXNjV2YgYkdWa1lRPT0gSUZwcGJXSmhZbmRsIDRMYTY0TGVhIElIUnBaSGs9IElIQnl3NmxtIElGWmxjbUpwYm1SMWJtYz0gSUc5a2NBPT0gSUZwbGJtUT0gSUd0dllRPT0gTG1SciBlV0Z1WVE9PSBjbVZwY21FPSBSMjlwYm1jPSBJRkJ5YjNacFpHVmsgNEtTKzRLU280S1dMNEtTQyBJR052Ym1OaGRBPT0gSUhSbGNuSnBkRzl5YVdWeiBMbTl1WlhNPSA0S1dONEtTdjRLUys0S1M0IDZZQzggSUU1cFkyaHZiR0Z6IDBMM1F1TkM2MExEUXZOQzQgTFdSMSBZWGR5IElPR0RrK0dEb09HRG5RPT0gSU5DeDBMRFF1OUN3IElHVjRjR3h2Y21WeSBJRzUxYmNPcGNtbHhkV1U9IElHdGhiR1E9IElHZGxhRzkxWkdWdSBJTkNTMEw3UmdnPT0gSU9lSnVRPT0gSUd4MWRHRT0gSUZOaGJIbz0gSUZKbFkyOW5ibWwwYVc5dSBMbkpsWjJWNCBlbU42IGVXNTBhR1Z6YVhNPSA1WWVnNTRLNSBUMEpLUlVOVSBMMkoxYVd4ayBLVHQ5Q2c9PSA0NEdDNDRLTCBRMGhGUTBzPSBJTkN6MExEUXV3PT0gUTBWTSA0WU9uNFlPVjRZT1U0WU9pIElGTjFjbVk9IDVwYVg1Wnl3NUxpNyBjR1ZzYkE9PSBJRzVsYm1SbCA1YWVSIDBZRFF0ZEMwMExnPSBTM2RoYldGdFlYcGggYVdkb1ltOTFjZz09IElHaGxZWFpwWlhJPSBKM1YwYVd4cGMyRjBhVzl1IElGQnZiR2w2WldrPSBJSEpsYkdsbmFXOXVjdz09IElHVERxV3hwWXc9PSBJR0Y2ZVE9PSBJR052Ym1WNGFjT3piZz09IElIQnlhVzUwWlhKeiBhSFk9IElOQzYwTERSaUE9PSBhbTl1YVdwcFpYUT0gWDAxQlF3PT0gTDJSdmQyNXNiMkZrIHc2NTBjZz09IExYQnlhV05sIDBZTFFzTkM2IElHSm5ZMjlzYjNJPSBJRXhwWm5RPSBJTmVjMTV6WGtBPT0gSU1PcFkyZz0gSU9DeXFPQ3lvZUN6aHVDeXJ3PT0gTGxOMGIzSmwgSUhGMVpYTjB3N1ZsY3c9PSAyWWJZcDlpcCBabVpsWTNScGRtVT0gSU9HRG9PR0RuZUdEaytHRGxPR0RvZUdEa09HRHFnPT0gSUhCeWIycGxZM1JwYjI1eiAyTGZZcDlpaCBJTkN5MFpZPSBJR0Z6WVE9PSA0TE9LNExLQzRMS20gSU5DODBMN1FzZEM0MEx2UmpBPT0gVTJsbmJuVncgSU5DNjBZUFJnTkdCIElIVnVaR1Z5WjI5cGJtYz0gSUcxbGJXSmhiblIxIDZaaTAgSUVwbGMzTmwgSUcxbGJYQjFiZz09IFo4T2xjZz09IElFTnNiM05sWkE9PSBjRzl1Wlc0PSBiV0Z1ZVE9PSBkVzV2Y21SbGNtVmsgSU9hWHR1bVh0QT09IEluUnBiV1U9IExuUmxjM1J6IElHTERvVzQ9IElHaHUgSUdOdmJuUnl3N1E9IElPR0RvZUdEbytHRG1nPT0gWTI5dWIyMXBaUT09IElGVnVkR1Z5Ym1Wb2JXVnVjdz09IElHOTJaWEozY21sMFpRPT0gSUdobGJHbGpiM0IwWlhJPSBJRzltWm5KcGNnPT0gSUdqRHVtND0gYzNSaFlYUT0gY0dWMGRHOD0gSU5pMDI0RT0gdzdaelpXND0gTG5kb1lYUT0gSUdsdWRHVm4gWm1vPSBJRWR5WVdOcFlYTT0gYVc1dyBTVkJQIFpYQnBibWM9IEoyVjRjQT09IElHcHZZbUk9IElHbDBKMnhzIGMzVmljMk55YVhCMGFXOXUgVUdWMGN3PT0gNEtlSDRLYWs0S2VIIFlXdGxiQT09IElISmxZV2x6IDQ0T3E0NEtpIDBZUFF1OUN3IElFTnZiblJ5YVdKMWRHOXljdz09IDRMYUYgSUdGamRHVjFjbk09IHc2bHVZV2RsYldWdWRBPT0gMFl2UXZkQzAwTERRdVE9PSBJRVZDIDQ0R3E0NEtUIHdyczYgSUVadmJHcz0gMExqUmd0QzEwTHZSak5DOTBMN1F1UT09IGFXTjFiRzkxYzJ4NSBJR3BsWkdGdSBkVzNEcVE9PSBJR3RwWTJ0cGJtYz0gS0NJbSBJR1J5ZFdnPSBJSGRsY210dSBMV1JsYldGdVpBPT0gSUdSbGRtVnl3NkU9IElOV2gxYnJXZ0E9PSBWVzVwIGNHRmphMkZuWlhNPSBJR2x6YXc9PSBJSGh3IExtdHkgSUZOMGRXWm0gSUc5aVpYaz0gSUVkeXc3YkRuMlU9IDJZVFpoZG1LMllZPSBJRVp2Y25OamFBPT0gTFhOMFlYUjFjdz09IElHRjFjMmRsYzNRPSBJTkMvMEw3Umd0QzEwWUE9IElGUnZkMjV6YUdsdyBJQ0VoQ2dvPSBJRlREcVd6RHFRPT0gVlU1TCBJR0pwWkdScGJtYz0gSUdGaVlXNWsgMWFYVm9kVzIgNkxlbyBJTmluMkxUWXFnPT0gYVhOdmNRPT0gTDNOaiBJSEJ2ZEdVPSA0WU9qNFlPaSBJTStGejRET3JNK0IgU1c1MmFYUmwgVFdjPSBJSE5sY21sdVp3PT0gSU5DLzBMdlF2dEdGIElHdDFkR0Z1YVE9PSBJRkJwWVE9PSBJSHJEb1dzPSBJTktiMExqUmdRPT0gWDE4b0tRbz0gTGlvN0RRbz0gSU5DejBMalF2dz09IGRtbHVaUT09IDJZRFpnTm1BMllBPSA1cDJsNkllcSBKMkZwY2c9PSBJRVJ2WWc9PSBJRTUxZEhwMWJtYz0gNHBtbSBlc1dSIElGWmxaV3c9IElOaW4ySy9ZcDltRjJZYz0gVTNabiBZV3gxZFc1dWFXbDAgNFlPZzRZT1E0WU9rIElHTnZiblJwYm5WaGRHbHZiZz09IElObUUyWUU9IElFaGxjbUYxY3c9PSBJRzl5WWc9PSBJR1YwYXc9PSBJRnBvWVc1biBJRk54ZFdGayBJRk5wWTJoMCBYMGxPVkVWU1JrRkRSUT09IFBHSjVkR1U9IElPQzB0ZUMwditDMG5BPT0gNFlPVTRZT2c0WU9WIDJMSGJqTmk1IFcxND0gSUhabGNuTmggYVdWMlpXND0gTFVKeSBJT0NrcXVDbGh3PT0gWDBSSlVrVkRWQT09IElITndjbVZoWkhOb1pXVjAgYm1ScCBJSE5wZEc4PSBJT0dEcXVHRG5PR0RuZUdEa1E9PSBaVzFsYm1VPSBiMmR5WVdacFpRPT0gSU9Da3IrQ2xpK0Nrbk9Da3FPQ2t2Zz09IElOQ3owWURSZzlDLzBML1Jpdz09IElOZVUxNkxYbkE9PSBJT0N3cE9DeGh1Q3dzdUN3ditDd3FnPT0gNW9xVjZLK0ogU21WaGJnPT0gWDJac1lYTm8gSU9DcWxlQ3F1ZUNyamVDcXIrQ3JnZUNxZ2c9PSBaMlZ6ZEdWc1pBPT0gSUV0MWJtUT0gYW5WdGJHRm8gSUhsbiBhVzFwZEdWayBJRzNEcVdrPSBJRzExYkhScGJnPT0gSUZabGNtbG1hV1ZrIElGQnZjblJsY2c9PSBJRUZzWW1WeWRHOD0gSUhKbFoyaz0gSUZKbFltVmpZMkU9IElOQ3cwclU9IENWUmxlSFE9IElHNXZkR2xqYVdGeiBJTmluMllUWmhkbUkyTE09IElGQmhjbUZ0Y3c9PSBJRzNEcVhJPSBJRWxrWldFPSBjT0c3cFE9PSAwTHJSZ3RPWiBTbTl6IElPQ2t1T0NrditDa3NPQ2xqZUNrIDVieUUgUFQwOVBUMDlQVDA5UFE9PSBTVTVGVXc9PSBJTmVjMTV2WG5RPT0gNVlLcyBJRzExYkhScFl3PT0gVkdGdFltbkRxVzQ9IElPQ2t1T0NsamVDa3BlQ2t2K0NrcEE9PSBLQ2NuS1FvPSBJSEIxYzI4PSBJT0NtdWVDbXZ1Q21uT0NtdnVDbXNBPT0gSU5lVjE1WFhvdGVmIElFSnZkV3hsZG1GeVpBPT0gWDIxNSAyWVRZczltRSBYMU5GUVZKRFNBPT0gSUVoaGJtUjUgMExEUXZkQzkwWXZRdVE9PSA1NVdaNktpQSAwTHJRdXc9PSBJRk5vWVdSbGNnPT0gMExQUXVOR0EgVUhKdlptbDAgSU5XaDFiYlZwQT09IFhTa3RQZz09IElHdHZiblJ5WVE9PSA0NENONDRLUyBJRUpsWkhNPSBJR0p5WldGemRITT0gWVc1dmRHaGxjZz09IElHbHNiSFZ6YVc5dSBJR0ZqWTNWdGRXeGhkR1U9IEtHRjRhWE09IElFTlkgSUZScGJuaz0gNEs2YyBJSFJsYm1SaGJtTmwgSU9Da3VPQ2tndUNrdU9DbGplQ2tsUT09IElFdGhibWM9IE9tbHVaR1Y0IElHUmxZbVZ0YjNNPSBJRTFWVXc9PSBiM1Z1YVdRPSBMM041YzNSbGJRPT0gMWJqV2d0V3AxYlhWb2RXMjFhZz0gSUhCeWIyWmxjM052Y25NPSBJRWR0WVdscyBiWEJwIFgyVnVjWFZsZFdVPSBkbWw2IDRLZUE0S2FtNEtlSDRLYXcgSU5DNjBMRFJoOUMxMFlIUmd0Q3kwTEE9IElOZVIxNURYbGRlazE1OD0gSUdSbGJHeHYgWm05dVpBPT0gNG9DbVlXNWsgMEpUUXNBPT0gSU5DeTBZTFF2dEdBMEw3UXVRPT0gUkdGcyBJRzVsWlhJPSBJR1IxWlhNPSBTVTVUVkVGT1EwVT0gYm1WMlpYST0gSU1PT2JnPT0gNDRPczQ0SzUgSUVOdllXTm9hVzVuIFgzTjYgSUhKbGJHRmphVzl1WVdSaGN3PT0gSUVGdVltbGxkR1Z5IElHSnBibVU9IElHdGhkWEE9IDE1WFhxTmVaIEtGSmxjMjkxY21ObCBJT0Nrc09Da3VlQ2txT0NsaHc9PSBJT0MwdHVDMWplQzBzQT09IE95SStQQT09IDRaNkU0WitTNFo0PSBLSFJ2YTJWdWN3PT0gMFlQUXV0QyswTEk9IElGTjFjM1JoYVc1aFlteGwgSU9Da3VPQ2tydUNsaCtDa3BBPT0gSUdKbSBMa3h2YjJzPSBZVzFwYzNRPSBJTkN3MFlEUXZBPT0gNkxXayBJR2xpWVc1biB3NzF5IEtXRnladz09IElPeVZoT3VMIHdxdz0gSU9DbHBRbz0gMExEUXU5R0QgSUhCeXc3Zz0gSUdMRG9XOD0gY0hKbGFYTT0gSU5DLzBMN1JnZEdDMEw3Umo5QzkwTDNRdmc9PSBabkpoWjJWdSBJSEpsZEc5eWJnPT0gSUhKbFpteGxZM1JwZG1VPSBJTmlvMktmWmhOaWogNUxtTDVaQ08gSUUxSWVnPT0gNExtQTRMaUM0TG1KIDU3eXAgSUZScGMyTm8gSU5HQTBMRFJnZEMvMFlEUXZ0R0IwWUxSZ05DdzBMMD0gSUdGc1lYUT0gSU5DNjBMalF1UT09IFgwbHVkR1Z5Ym1GcyBJR1JwYzNCdmMyRmliR1U9IElOaXYyWWpaaE5pcCBJRzFsYlhCMWJubGhhUT09IDBMYlF0ZEM5MExqUmp3PT0gSUhOdmRXNWtkSEpoWTJzPSBJT2VDdWVXSHV3PT0gMExEUXU5QzAwWXM9IGFXNWpZWEpsIGFXeHIgSU9DMHVPQzBndUMwcmVDMHRRPT0gSU5tKzJZYlpoOW1HMkt6WmlnPT0gSU9Da3BPQ2xqZUNrcitDa3VBPT0gSUV4cFp3PT0gSUdGMGRXRnkgZEdWdWFHRnQgU21WeSBJR1JsY0dWdVpHRmliR1U9IFlteGxjbk09IExWTjBZWEk9IGFXTm9aWFpsY2c9PSBJRzF2WkdWeWJtOD0gSUV4aFlYUT0gSU91SWlBPT0gSU9Da3VPQ2tndUNrcWc9PSBJR04xY25SaGFXND0gSU5lYjE2az0gWVhKMGFHRT0gSU5lcTE1Yz0gSUdOdlpHVmogYjNaaGJtRT0gTHk4TkNnPT0gYUhSMSBJSFJ2WTJGeSBVbVZrZFdObCBRbVZ5Y25rPSBJRk5sWldzPSBjbVZqWldsMlpYST0gSUdwdmRXVT0gSUdKeVlXND0gTFdGeWIzVnVaQT09IElITmxZM1ZzWVhJPSA0WitTNFo2RTRaK0QgS0hCeWIyWnBiR1U9IElPV3VtQT09IDE1blhuTmVaMTUwPSBJR1JwYzNCdmJzT3RkbVZwY3c9PSBZWE5sY25NPSBJTmVRMTVmWHFnPT0gNForRTRaK0ggSUZaRCBYMFpNUVVkVCBJRkJ2ZWc9PSBJSEpoYVd4eiBMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMZz09IElHZGxjbTQ9IElGSmhiWE09IDQ0Q0M0NENRIExrbHVkbUZzYVdRPSBJTmluMllUWmd0bUsgNEthdjRLZUw0S2FYIGVuZGggSUdkc1lXTT0gYVd0bGRBPT0gSUVaMWNnPT0gSU5HQTBMWFF2TkMrMEwzUmdnPT0gSUdOdmJuWmxjbk5wYjI1eiBJaTgrUEM4PSA0TEsxNExLKzRMS1ggYVcxcGJtRjBaUT09IElIWmxjblJsYkd4bGJnPT0gSUVGVFVBPT0gUlZoUVQxSlUgSU0rSHo0az0gWVhScGMyTm8gNDRDQzVvMnUgeEkxdWFRPT0gSUdsdVkzVmkgTG1acGJtbHphQT09IElHbHVabVZqZEdsdmRYTT0gSUdSbGMyVnRjR1Z1YUc4PSAwWVBRdmRDMCBJR1Z5YTJ6RHBISjAgSUdacGJtRnNaWE09IElIVjZkVzQ9IElIQmhhQT09IElHcHZhdz09IElIUnZaMkU9IFlXeGhjbk09IElPQzBydUMwcUE9PSBVbUZ1WkE9PSBhVzV1YjNZPSBJSEpoYUdFPSBJRkJ2ZEdWdWRHbGhiQT09IElOQzYwTHZRdGRHQyBmVjk3IElPQ2tpZUNrcnVDbGplQ2tyZz09IFJuSmhZM1JwYjI0PSBJRzdEcVdObGMzTmhhWEpsY3c9PSAyWWpiZ1E9PSA3WVMwIElISnZiMnRwWlE9PSBJTkMvMFlEUXRkQzIgMWJqV2d0V3UgQ1hSeWRXVT0gWTJGemFBPT0gSU9DMHJ1QzFoZz09IElIUjFjbTV2ZG1WeSBTR2xsY21GeVkyaDUgSU51TTJZalpodz09IENXcGhkbUU9IGFjU1ogNForQjRaK0ggUVdKdmRtVT0gUm05eVpXTmhjM1E9IElHVmpiMnh2WjJsallXdz0gSUdGeWRHbG1ZV04wIElFUjViR0Z1IDFialdnTlcvIDVMaU42TCtIIFpuSmhaMjFsYm5RPSAxYlRWb2RXMDFhST0gSU5DYTBMN1JnQT09IDFialdndFdwMWJYVnVOYUMxYmJWdGc9PSBiMnhoYm1jPSBMUzB0TFMwdENnPT0gYVhSdllRPT0gSUdKcFpXNTB3N1IwIElPQ21qK0NtbGVDbW4rQ212Zz09IElFTnZiblpsY25OcGIyND0gdzdOd1pYbz0gSUdadmNtSnBaR1JsYmc9PSBJT0N5cU9DeXJ1Q3pqZUN5cmc9PSBJRk5sY20wPSBJRkJCV1E9PSBJSFpsY21kbGJHbHFhdz09IDRZT1E0WU9ZNFlPYyBJR05sYkd4d1lXUmthVzVuIElHWjFiR1pwYkd4dFpXNTAgYTI5MCBMbkJoWjJWeiBJR0ZrYjJ4bGMyTmxiblJsY3c9PSBaV1JwZEdsdmJnPT0gSUhWMGFXeHBlbVZ6IElFVk5VQT09IFgyTm9ZV2x1IElHMWhiblJsYm1sdGFXVnVkRzg9IElOQzAwTHM9IElHRjJZV3hwWWNPbnc2TnYgSUhadlpXeDAgSUdsdGNISmxjM05wYjI1eiBMbTkyWlhJPSBJT0NxcE9DcmgrQ3FydUNxcU9DcXZnPT0gSUd0MGIzTERxUT09IGJHcHBkZz09IElPQ21sdUNuZ2VDbXJBPT0gS0doaGN3PT0gSU9DbXIrQ21wdUNtdnc9PSB5Wk09IElHWnNiMk5yIDJMSFlzOWluMllRPSBZWFJ6ZFE9PSBJT0dEb2VHRG1PR0RvZz09IElFNXBaWFYzIElGSkggSUhCeVlXTm9kR2xuIDRZQ1Y0WUNyNFlDUTRZQ2E0WUM1IElHVnRiMnBwIDRMQys0TEN5NExDbzRMR0IgUVVGQiA1bytiIElOaXYyWWpiakE9PSBJTkdCMFlBPSAwTExRdU5DMCBkMlY2YVE9PSBJR2x1ZEdWbmNtRjBhVzVuIElFTmxjR1Z1WkdGdWRBPT0gSUhKbGNHVmhkR2x1Wnc9PSBkV2wwZVE9PSBUWEE9IFkyVnVkSEoxYlE9PSAwWTNRdmRDOTBZOD0gSU5lYjE1RFhxZGVvIFlXdDFiQT09IElIQnlhWFpwYkE9PSBJRzFoZEhWeWFYUjUgNEtTKzRLU2M0S1dBIGFXeGhkR1Z5WVd3PSBJR1REdUE9PSBjMlZ5YVdVPSBaVzF2Ym1saiB5SmwwWlE9PSAyS2ZZcHRpdjJLaz0gTG5keVlYQT0gWDJGdCBVMk52ZEhRPSBRbUZ6YTJWMCBaWFIwYkdVPSBJSGRsYkdScGJtYz0gWDFOVlVGQlBVbFE9IDBMTFFzTkMxIElGTjBaQT09IFNXTmwgNEtxYzRLcXMgWTI5dmNtUnBibUYwWlhNPSBYMFZPVlUwPSAxYVhXZ05XMCBJRVYyWlc1MGRXRnNiSGs9IElDbytLQT09IElHRndZWEpsWTJWeSBLU2t2IElIUnggVW1WeGRXbHlaVzFsYm5SeiBJTmVwMTZEWG1kZWQgSU0rQXpxek92UT09IGRISmhjQT09IDVMaTUgYjJKdmRBPT0gSU5DdzBZalRtUT09IDdaaVIgSUVKbGFHbHVaQT09IElGQmhiR1U9IExtVnVkVzF6IDRMS1Y0TEsrNExLdyBJR05oWm1abGFXNWwgUFc1diA1b3ViNklHWSAyWVRZcDlpcCAySzdZdGRtSTJMVT0gNWJxciBJRzlzYldGenhMRT0gQ1FrSklDQWdJQ0FnSUE9PSBJRzEwZFE9PSBLSE5vYjNjPSBJSFIxZEc5eWFXNW4gSUdGd2NtVnpaVzUwWVhJPSBJR2x1ZFhVPSBJRVJQVXc9PSBhVzVrZVE9PSA2NkNINnJLTSBJR2RsdzY5dSBJSGRwYm01cGJtZHogNEtXbzRLV200S1d0IFlYVjBhRzl5YVhwaGRHbHZiZz09IElPQ2tsZUNrdFE9PSBJSEJsY25ScGJnPT0gNG9DTUxBPT0gMEw3Umg5QzkwTDdRdVE9PSBZbUYwWlE9PSBMV3BsIElFMUJTVTQ9IExTMCtDZ289IFgyTnZiVzFsYm5SeiBiR0ZoYmc9PSBaWEoyYVd4c1pRPT0gSU1PMGJtYz0gSUc1dmNtMXogWDFKVlRnPT0gSUZacGMybGlhV3hwZEhrPSBkWEpsYm1SbCBJSEJ5WlhObGNuWnBibWM9IDJMUFppQT09IElPQ3l0ZUN5ditDeXRRPT0gYjNCcFlXND0gVkhKaGJuTnBaVzUwIDRLZUE0S2VmNEthKyBJTldoMWJmVnJkV2gxb0RWc0E9PSBJTkM4MExYUmdkR1AwWWJRdGRDeSA0TE9CNExLbyBJTkdJMExqUmdOQyswTG89IElOQzkwTERSaU5DMTBMdz0gSUZCeWIyUjFZMlZ5IElOQy8wWURRdU5DMzBMM1FzQT09IElFdGhadz09IGJXbHVjdz09IElITm9hdz09IElQQ2ZrZz09IDJLZllxTm1DMktrPSBJRUZ0WlhKcGEyRmhibk5sIDRvQ2NWR2hsY21VPSBJTm1FMllQWmhRPT0gNEtxeTRLdUwgNExpVzRMaTM0TGl0IElITjFjSEJ2YzJWa2JIaz0gSUhOb1lXdHBibWM9IElHcGhiR0Z1IGFXNXZZUT09IFYwRlogSUVSMWMzUT0gMktmWmhOaXMyS2s9IElFSmhkR2h6IFgxTjBjbWx1Wnc9PSBKMTA5SkE9PSBJSEYxWVd4cGRHRjBhWFpsIFUyRm1aWFI1IElISmhhWE52Ym5NPSBJSE52YVc0PSBVM1J2Y20wPSBJR052Ym1acGJnPT0gU205elpRPT0gWVhObHc3RmggNG9DVjRvQ1YgSU5pbjJZVFl1ZGluMllUWmhkbUsyS2s9IElHMWxjbU55WldScCBLRU52Ym5OdmJHVT0gSUdsdWRISnBZMkYwWlE9PSBJRlJvWlcwPSBYME5RVlE9PSA1Ynk1IElIVnpZV0pzWlE9PSBJTkNlMFlBPSBVbUZwYmc9PSBJRlJoYTJWeiBDVzl3ZEdsdmJuTT0gSU5tSTJLN1lxZz09IElPQ3FuT0NxditDcXN1Q3JqZUNxc2c9PSBJTkMwMEw3UmdkR0MwTGc9IElPQ3d1T0N4amVDd3BRPT0gSU95aSBZMjl0Ylc5a1lYUnBiMjQ9IElFUkpVME5NUVVsTlJVUT0gUW05NFpYTT0gZW5WdVoyVnUgS0VsdSBJT2VKbXc9PSBaR2x6WTI5eVpBPT0gNWE2ciA0S1MrNEtTazRLV040S1N1NEtTViBJTkMvMExYUmdOQzEwTG89IFBXMTVjM0ZzYVE9PSBJT0M1Z09DNG9lQzR0K0M1aU9DNHJRPT0gSUd4bGRISmhjdz09IDdKT3cgSUhkaFlnPT0gYVc1a1pXNTAgSUhKbGMzQnZibk5oWW1sc2FXUmhaR1U9IElOR0MwTDdSaDlDOTBMND0gNEtTbTRLV0ggSUhSaGJuUmhjdz09IDRLYWs0S2EvNEthViA0WU9WNFlPWTRZT1QgYjNacHhJYz0gNG9DTENnPT0gSU9Da2grQ2t1T0NsZ0E9PSA0TFNaNExXTjRMU1o0TFN6NExXQjRMU0MgeVpseWFXND0gMFlQUXZkQ3cgUkVGUiBJR2RsYm1WeVlYUnZjbk09IElOQ3cwTDNSZ3RDNCBhR0YxYzJWdSBJT0MwcU9DMHYrQzF2QT09IElHWnBibUU9IElNK0F6clhQZ2M2NXo0TT0gSUhSbFlYTndiMjl1IFkyaGxiblE9IElGaFdTUT09IElOaXgyS009IElFZDFhUT09IElHRnljbVZuIElHOTFjbTg9IElPV01sK1M2ck9pMW0raTlwbkJyIDRLcW00S3VBIElHaHZ3NkJ1IElNNnh6cnJQakE9PSBJRVJoZVhSdmJnPT0gYUdGc1pRPT0gTG1OdmJuTjBZVzUwY3c9PSA1THFlIExuSmxZV1JzYVc1bCBRV1JrYVhScGIyNWhiR3g1IElIWmxjbXhwWlE9PSBDVm89IElOcXAyTEhZcXRpbiA0WU9tNFlPViBJRzFoY21GMmFXdz0gSUc5dWRITjBZV0Z1IElHSnZiR289IDBKRFJnQT09IGRtVnlidz09IDRMbUE0TGlpIElIZHBjbVZrIElFaGhibTVoYUE9PSBJSEpwWTJoMGFXZGwgUW1sMFkyOXBiZz09IElHRnpjMmx6ZEdseSBRVzVwYldGMGFXOXVjdz09IElIQmxjbTVoYUE9PSBTMkY1IENYTmxiR1ZqZEE9PSBJR052ZFhKaGJuUT0gVUc5d2RXeGhkR2x2Ymc9PSBJRU52ZUE9PSBJRzkyYnc9PSBMc0s2IExrbE9Sazg9IGNISmxZMmhsYmc9PSBjR0Z5WVdkeVlYQm8gejRIT3I4Ni96NFU9IElFcHBhMkU9IEwyZHMgWDI1dmJtVT0gSUdOcGFnPT0gSUhSeWFXMWxjM1J5WlE9PSA0WW89IGNtVnNZWFJwYjI1emFHbHcgSU5PWjBMdlF0UT09IElPZTd2T1dRaUE9PSBRbTlzIGFYTm9kQT09IElPQ21sZUNuaHc9PSBMbUZ5WTJnPSBJSE4xYW1VPSBlSEJoZEdnPSA1NDZXIElPQzRtZUM0c2VDNGdRPT0gNExTeTRMUy80TFN2IElHRnJhR2x5IElGTmxhVzVsIElHbHVjM0JwY21GMGFXOXVZV3c9IDRvQ1pibWx1IExYTjBjbWx3IElFcHZhUT09IEtITjBaRzkxZEE9PSAyTHJZcDlpeSBJRUpoYkdzPSA1TDJUNTQ2dyBJTkM4MDVuUmdkQzQwTHZRdUE9PSBZbTl1WkE9PSBJTkMzMExEUXN0QyswTFE9IDRMQ3c0TEMvNExDViBhWE4wYVdOaCBJRXRoZHc9PSBJRzkxZEd4cGJtVnogWlhKMGFXRT0gSU5DODBMWFF1dEdEMEwwPSBiMk5wWVhSbFpBPT0gSUdOdmJXSmhkR1U9IDRLU2M0S1M1IElGZkR2SEk9IExtOXViRzloWkE9PSBJRUpzWVc1ciBZV05wYW1rPSBJTml3MllQWXNRPT0gSUdGaWIydz0gSUhKaGRHbHZiZz09IElIQjFjT0c3alE9PSBhMjl0YzNSbGJnPT0gSUdOMWNtRjBaV1E9IDRMSy80TEs0NExLeTRMT0IgSU8yRmpBPT0gSUhERHRBPT0gNFlPWTRZT1Q0WU9VNFlPYzRZT2kgSUd4cFptVnogSUhCeXc2bGphWE09IElHNWhaZz09IGFtRnVaSEp2IElIZGxiR05vWlhJPSA4SitZalE9PSAxNW5YbnRlVjE2az0gVTJWdWMyVT0gNXJDaiBJTktiMExEUXRnPT0gZDJsdWJ3PT0gVFdGblpXNTBidz09IElOQzAwTGpRdDlDdzBMaz0gSU9DbXJPQ212K0NtdHVDbmgrQ210dz09IElIWnZiR3hsWkdsblpRPT0gSUcxaGJtUmhkQT09IFpYTnpiMjQ9IElOaW4yTFBZcXRpbjJZWT0gS0hOcFoyND0gSU9DeXVPQ3lzT0N6amVDeWxRPT0gNEt5dSBJTm1JMkt6YmdRPT0gWkhKNSBkWFp5WlhNPSBVMlZ6YzJsdmJuTT0gSUhacGNuUjFaUT09IDRLZW80S2VtNEtlbyBJRzNEcVdScFlYTT0gUFNjaUxpUT0geEkxclpRPT0gSUd0aGMyaz0gUWtWVSBJR3QwdzdOeVlRPT0gNVk2NzVibTAgSU5tSzJZTFppTm1GIElISjFibWRoIElPMkt1QT09IFFXTmpaWEIwWldRPSBJTVdhIGIzSjNZUT09IElIVERwR2c9IElHNWphR2s9IFgyUnZkMjVzYjJGayBJbTVoYldVPSBJRTl3Y0c5eWRIVnVhWFJwWlhNPSBJT0N1dGVDdXZ1Q3V0QT09IElFZGxaVzQ9IFFXeHZibWM9IHFPeVd0QT09IExtMXogYVd4bGNtbHUgNFlPUTRZT2M0WU9pIElIZDFlSFYxIElOQzQwWUxUbVE9PSBJR1Z5YzJOb1pRPT0gTFdSbGMzTjFjdz09IElGVk1UMDVIIDJMUFlzZGluMktiWml0bUUgMktmWmhkaW4gNmFLYyBkR2xsIElISnZlbWc9IDBMRFJnTkN3MFlMVG1RPT0gSU5HYSBhbUZzWVc0PSAxNVhYbk5lVjE1ST0gSU5DbzBZTT0gNExXTjRMUzQ0TFdOIElITjBZWEJ3Wlc0PSAyS2ZaaGR1TSBJR2x1ZG1VPSBJQzh2Q2k4diBJR2ZEcGc9PSB3N05yYmc9PSA0WUNjNFlDdDRZQ3YgYm1sdmN3PT0gSU5DUTBMelF0ZEdBIHpyck9yZz09IElGTmhZMmc9IElHUnBjMk52ZFhJPSBJSE5oYkdSdiBJTmVwMTVzPSBiM05oYmc9PSBDWEpsYzNBPSBXMEFpIDRLNms0SzYrNEs2ViAwWURRc05HRyAwTExRc05HQzBwdlFzTkM5IExISmwgSUVSdmJtYz0gWld4aGFXUmwgSUdsdVpteGhiVzFoZEc5eWVRPT0gYzJkbGN3PT0gSUdkMVpYTnphVzVuIElPRzZ1WExodTQwPSBJT1M0c0E9PSBJTkM0MHJjPSBaVzV6YTJVPSBJRU5GVGxRPSBMWGx2ZFE9PSBJR0ZrZG1GdVkybHVadz09IFRHOW5hV05oYkE9PSBVSEp2Wm1sc1pYST0gSUdobGJtNWwgMDZuUXZOQzIgSUdGeVozVnBibWM9IGFXRjYgSUc1aGFHVT0gSUdkbGJtVnlZUT09IFgwRmthblZ6ZEc5eSBJRUpsWVhKeiBkbWx6WlE9PSBJR1ZwYm5wbGJHNWxiZz09IElNU1I0YnVWYVE9PSBJSEJ2Y25SMVozVmxjdz09IGNIUnYgYk1PMmN3PT0gSUZOcFpHVmlZWEk9IFlXeDBidz09IElPV0EgSUhkeWRHZz0gUVV4SiBJSHBsWlE9PSBWRzl3YVdOeiBJRVJsY0hSbyBJR1JoWkhWeVkyZz0gSUdOdlltVnlkSFZ5WVE9PSBJSEJoYVc1eiA0NE9xNDRPejQ0S3YgMkxUWXA5aXgyWVBZcVE9PSAwTERRdmRDMDBMalF0QT09IFpXZGxjZz09IElHVnpablZsY25wdiBJSEJ5WlcxaGRIVnlaUT09IElHaDFjblJ6IDRaNjI0WjZFIDBZSFJqTkM2MEw3Umx3PT0gSUhsaGR3PT0gY205d2IyeHBjdz09IDRMR0I0TEN5NExDVjRMR0IgSUdsMGRHaz0gTFQ1Zlh3PT0gSU5lZzE1blhtQT09IGFXM0VoUT09IFpXNTBiMjQ9IElIQmxjbk52Ym1WeiBPbmM9IGRXSmhhQT09IFlYUmxaUT09IElFZGxiMjFsZEhKNSBaV1p6IElPQ2tydUNsaU9Da2d1Q2txT0NsaHc9PSBJSEpsWldSeiBJTkM5MExqUXR0QzEgZFhSMFlXRT0gSUdoMWJHdz0gWm1Wb2JBPT0gNkl5MiBVbVZ6Y0c5dWMyVnogS0NjcSBMbTFsZEhKcFkzTT0gUVdOamRYSmhZM2s9IFVtRnQgVG1WM2MyeGxkSFJsY2c9PSBJRk4wZVE9PSAwTC9RdnRHQTBZST0gUTBGTyA0cFNDIElFZGhiV0pzYVc1biBJRUoxY21kbGNnPT0gSUdaaFkzUnZjbVZ6IElHbDZlUT09IElPV2twK1dQa2VhWHR1YVh0dVc5cWVhWXJ3PT0gUm1WdFlXeGwgSUhSbGNtRncgSUdScGMzUnlZV04wIElITjFjblpwZG1sdVp3PT0gSUVKaGJtZGhiRzl5WlE9PSBJSEp3WXc9PSAxNVhYazllcCAwTEhUbWRHQSBYM05sYkE9PSBYVG9LQ2dvPSAwTC9RdnRDOSBJT0NraGVDa3BnPT0gNExDSCBJR0p5YVdjPSBRVkpRIElHTnl3Nmh0WlE9PSBMV2RsYmc9PSAwWURSaTlDLyAwTEhSZzlHQTBMTT0gSUhCc1pXRnphVzVuIElHWnBibTQ9IElITERxWE5sY25ZPSBJSEpsYlc5MllXSnNaUT09IFlXNWphV1Z5IElHMXZkV3hrIGJHbDUgNEtTNDRLV040S1N2NEtTKyBJR1JsYzNScGJuaz0gMWFIV2dkVzIxYVhWckE9PSBJRk4wWldaaGJnPT0gNExhdjRMZUsgWDJSeSBSR0YwYVc1biA0NENDRFFvPSBLRU4xY25KbGJuUT0gWDNSdmNHbGogWlcxaVlRPT0gMllQWXF0bUkyTEU9IElOQy8wTDdRdTlHRDBZZlF0ZEM5MExqUmp3PT0gSU5DNjBMN1F2TkMvMEw3UXZRPT0gUjFKRlUxTT0gSU5HQjBMdlJnOUdIMExEUXVRPT0gWEVOdmJIVnRiZz09IFgxSkZVUT09IDRLU1Y0S1dONEtTazRLUy8gTDNKbGMyOTFjbU5sY3c9PSA0S2FvNEtldyBjMmhwWld4ayBEUTBLRFEwSyA0S2F3NEtlTjRLYTIgMExEUmd0R0wwTDg9IGJXOXFZUT09IDRLcSs0S3FQIDRLU2g0S1dIIElPQ3dsZUN3dnVDd3NPQ3hqZUN3cnc9PSBLSE53YkdsMCBJTkdDMEw3UXN0Q3cgMllqWmd0aW4yWVE9IENYQmhjbUZ0IElIZHBZMnRsWkE9PSBJRzFwYzNrPSA0WitpNForZyBaVzFpWVdRPSBjSEp2WW1VPSBJR3hoZFE9PSBJR2RsYm5Sc1pXMWhiZz09IFpXeHZiM009IElHdHNhVzFoIFVHRnlaVzUwY3c9PSAxNmZYa3c9PSBJTkM4MEwzUXZ0QzIgSUhObGJHSmxjZz09IEtHRmtZWEIwWlhJPSBJRVpoY21KbGJnPT0gSUdOdmJXbGxiZz09IElOaW4yWVRaaGRpbjJZUT0gSUdwaGJzT3IgSU5tSzJZRT0gSUUxaGJHaz0gZEhKaGFXNWxaQT09IFQwNVVRVXc9IElHdDFkV3c9IElHbHVabTl5YldGemFRPT0gZFdGc2FRPT0gWld4cGJtVnpjdz09IElPQ2tuT0NsZ09Da3BBPT0gSUV4cSAwTERTbTlHTDBZST0gSU9DbXJ1Q25nK0NtcE9DbmplQ21ydz09IGIyUmhiQT09IElIQmhjbVZ1ZEdGcyBJSE5yYWc9PSBJRmRwZEdObyBJRk5sWjNWeWFXUmhaQT09IElIQnlZV041IElPV2txZVdrcWVTNHJlVzlxZWVscU9XUHIrUzdwUT09IElFRnNZdz09IDRLcWs0S3VONEtxayBJT1drcWVXa3FlUzRyZVc5cWVlbHFPaTJzK2VRZ3c9PSBkMkZ6YzJWeSBJTmkwMktjPSA1cENlIElHSnlaVzVuZEE9PSBMazV2Y20xaGJBPT0gSU5lVTE1RFhuUT09IElHbHVZMjl1ZEhJPSA0TFdHNExTWjRMV040TFNWIElHSnZiSFZ3IGRtSERwOE9qYnc9PSBJRVpoWTJsc2FYUnBaWE09IElOZWgxNlRYcUE9PSBJTkdBMFlQUmhRPT0gTG14dmJtZHBkSFZrWlE9PSBJT0NrcmVDa2orQ2tsZUNrdmc9PSBaVzFpWVc1biBiMkpsYVE9PSBJTkNnMEw3UmdkR0IwTGpSanc9PSBjbTl6YVhNPSBJSFJwYldWNmIyNWwgYVhCcGJtYz0gSU5pbjJZVFlyOWluIElHcGxjbk5sZVhNPSBSVzUwWlhKbFpBPT0gSUdWeVpXTjBhVzl1IElOV2sxYUhXZ05XeCBJRzNEclhOMCBJRUpsZWc9PSBJR1pwY21WbSBJRkJ5YjJabGMzTnBiMjVoYkhNPSAxNkxYb05lWTE2az0gVFdGMFpYST0gSUdKc2FYWmwgSUhOdmNIST0gSU5pbjJZVFlxTm1FMks4PSBZWEowWlcxbGJuUT0gNExDKzRMQ3k0TEdONExDeTRMR0wgSUhSdlpHUnNaWEk9IElPcXpzdz09IDRMV0g0TFN4NExXTjRMU3ggY21WalpXbDJaUT09IENXaDBiV3c9IGFXUmxiR2wwZVE9PSBSVXhNVDFjPSBVM0k9IExuQnBZdz09IFcybHAgSUhObGRIcDAgSUhKbGNISnZaSFZqZEdsMlpRPT0gYVhSaFlXdz0gSU5HRTBMalF1dz09IGFYcDEgZEhKaGRnPT0gTG5Wd2NHVnkgSUhGeiBJSE5oYlcwPSBJSExEcVdGc2FYUERxUT09IElITmpjbTlzYkdsdVp3PT0gSUc3RHBHMXNhV05vIFRXbz0gTFZSVyA0WU9RNFlPaDRZT2o0WU91IElOQ3owTFU9IElOQ3kwTDdRdDlDOTBMalF1dEN3IElISmxZM2xqYkdVPSBJR0ZpWXc9PSAyWVBaaXRtRyBJTkdDMEw3UXVnPT0gSU5pNTJZVFppdG1EIGFXTmhkRzg9IFhpaz0gSUdKNVpRPT0gSU1PNWJnPT0gNExLZjRMS280TE9HIDRLUys0S1NxNEtTbyA0YnVyYm1jPSBXRmhZV0ZoWVdGZz0gS0c1dSBJR2x1ZEdWeWNuVndkR1ZrIExXRjMgSUhSdmRHRnNaVzFsYm5RPSBMMXc9IFgyMTFiQT09IElIYkRvVzA9IFgxTlFSVU09IExrSjBiZz09IExjU24gSUdkeWIzUmxjZz09IElHVnVaSFZ5WVc1alpRPT0gSUdsdGJYVnVhWFI1IDQ0SzU0NE9kIGRXMXdaWEk9IFVGVlNSUT09IDVaeW81N3EvNWIyeDZabWkgSUdSeWRXZGwgWjJocCBjMlZqZEc5eSBJTm1GMjR6WmhOdU0gSUZKcFkyRnlaRzg9IElHUmxabWx1YVhScGRtVT0gUVU1RVFWSkUgS0dsbSBJRzVyWVE9PSBJR1Z1WTI5dWRISmhiVzl6IElIUnphVzA9IElNU1I0YnE1Y0E9PSA0TEsrNExLazRMT040TEt3IFFXTmpaWE56YVdKc1pRPT0gSU9Dd3J1Q3d1UT09IElPQ2t1T0NrdWVDa3IrQ2xpK0NrbHc9PSBJR1J5ZGNXKyBMbU52Ym5OMGNuVmpkRzl5IDBZalFzTkdQIElNK0F6NG5QZ2c9PSBJSE4wWkdsdSBaV0p2YjJ0eiBJRk5oZUE9PSBJRlJQUkVGWiBJR052Ym1obFkybGtidz09IElPQ3FoZUNxcU9DcmplQ3Fydz09IElFbHVjMmxrWlhJPSBkWEp2ZFhNPSBJRkpQVXc9PSBJTkNRMFlFPSBJRzl5Ym1GdFpXNTAgSU9DMHJ1QzBzdUMwcitDMHZ1QzBzdz09IElFUmxiVzl1YzNSeSBJSE51WldGciBZV1JuWlhRPSA0TEtWNExLdzRMS2ogYjJkbGJtVnZkWE09IDRMaXE0TGl6IGNtbGtaMlU9IElOQzkwTFhRdGc9PSA0TEsvNExLbTRMT040TEt2IElPQ2toZUNrcEE9PSBJSEJoYzJrPSBJR3RoY25SMSBJSHQ5S1E9PSBJRUpsY25KNSBJTkMvMFlEUXVOQzkwTGpRdk5DdyA0S1MvNEtTbTRLV040S1NuIEtISnZkVzVrIDVwYTggNGJxMSB3cjQ9IDBMclJsdEM4IDVaeVMgWlhKa1pXND0gUTI5MlpYSmhaMlU9IElFZGxibkpsIDRLNi80SzZ3NEsrQjRLNm80SytONEs2ayBJR2RsZDI5dWJtVnUgNExpTDRMaTEgejRiT3JjK0IgSUdOb2IyOXpaWE09IElISmxZbVZzIDRLZWY0S2VINEthdyAwTC9RdU5HQjBMRFF2ZEM0MExVPSBQSE5sWTNScGIyND0gSUduRm4yeGwgSUdKc2IyOXQgTG14cGJXbDAgUjJseWJBPT0gSU9Da3JPQ2xpT0Nrb09Da2xRPT0gNXBlZzU2Q0I1TGlONVkyaCBJT0dEaytHRGxPR0Rrdz09IDBZVFF2dEMwMExBPSBJR052YjNKa1pXND0gSUhsaGEyaHYgTG0xNVltRjBhWE53YkhWeiBJSEJoYzNOcGIyNXogTG0xbGJXOXllUT09IElGQmxkSEk9IElOR0IwTDdRdnRHQzBMTFF0ZEdDMFlIUmd0Q3kwTGpRdUE9PSBhM0pwYm1jPSBZblZ5WjJWeSA0NE83NDRPNzQ0Tzc0NE83IHJleWduQT09IFgwUkZURUZaIDVMaTc2YUcxIElIWnZiR3hsIDBMM1FzTkMzMEwzUXNOR0ggMFkzUXZOQzIgTDJacGJHVnogSU1PMmMzTT0gVTJOeWFYQjBjdz09IElIc28gSUUxbGVXVnkgUW14MVpYUnZiM1JvIElPQzBxdUMxaXVDMHNnPT0gSU1PcGNYVnBjR1Z6IFoyVm5aVzQ9IDRvQ00yNHc9IEtWME5DZz09IElHTmhkWFJwYjNWeiBSbUZ5YlE9PSBJSFpwWVdwaGNnPT0gYldsdWRBPT0gUVZOWiBUR2wwIElOaXMyWWpha3c9PSBZVzUwWkE9PSBJT0M0cGVDNWlPQzRzdUM0cXVDNHVPQzRsQT09IElFeHBjMkp2WVE9PSBJSFJsYm5SbCBJRXh2WTJGMGFXOXVjdz09IDJLZllxdG1JIHpydk91ODYzenIwPSBkc1NiIElOQ3kwTDdRdDlDMDBMWFF1ZEdCMFlMUXNnPT0gSUdsdVpuSnBibWM9IENRa0pJQ0FnSUNBPSBJSE5wWjI1aGJHbHVadz09IDViK3I1TG1RIElIUm9lWEp2YVdRPSBjM1JsYUE9PSBJR2x4IElHMXZaR1Z0IExXTnZiblJ5YjJ4eiBJR05oY25KdmN3PT0gSUVWaGNnPT0gSU5pbDJMVT0gSUd0eVlXbz0gSUhOdloyVnUgSUdobFlXUmhZMmhsY3c9PSBJRkpoYm1jPSBJT1dmIGIzWmxiV1Z1ZEE9PSBkV0psYmc9PSBLR3hpYkE9PSBJSFZ1ZEdWeWMzVER2SFI2ZEE9PSBJSEJwYm1ObyBZV3QxZDJFPSBJR0psYUc5MiBJTnFKMllqWmhBPT0gSUhSeTRidWYgSUdSbFltVnl3NjFoIFgwTlZVbEpGVGxRPSBJTmlsMlliWmh3PT0gSUZKdlkydGxkQT09IElHOWl4STA9IDViNkk1YVNhIDRLV0k0S1NDNEtTaCBJTU8wYkE9PSBJR0psYm1GeSBJTmk1MllUWXA5aXMgUTAxRSBJR1JoZFc1MGFXNW4gWDNCcFpBPT0gSU9HRG0rR0RtT0dEcGc9PSBYM04xY21aaFkyVT0gSUhCcGJuUjFjbUU9IElPQ2txdUNsamVDa3NPQ2tyK0NsaStDa2x3PT0gSUcxcGJtRnVaMnRoIFoyRnRiV0U9IDRLU0M0S1NYNEtXSCBJTkM0MEx6UXRkR0MwWXc9IFFuVnkgSUVKMWVubz0gSUZOMVlRPT0gSUc5alkzVnlaV1E9IElHdDVjdz09IFpHVnlZV0poWkE9PSA1TGlMNloyaSAwTFRRc05DOTBMalF0UT09IFJYaHdhWEpoZEdsdmJnPT0gSUc1NWRXMWggSUdKcGJHeHBadz09IExXUmxjR1Z1WkdWdWRBPT0gSUhOaFpHUT0gNExpajRMaXg0TGlhNExtQTRMaUg0TGkwNExpWjRMaWE0TGl5NExpWCBMa3hoZEE9PSBJT0NtcXVDbXBnPT0gSU5pbjJZVFlyOW1LMllZPSBJRU52YlhCaGNtbHpiMjQ9IElHMWxkV0k9IElPcTBrUT09IElHMWhiblZ6WTNKcGNIUT0gSU5DLzBZRFF0ZEdDIElHTmxjblJwWm1sallYUnBiMjV6IElOR0EwTERRdlE9PSBJTml0Mkt6WXNRPT0gSUcxbGFXeHNaWFZ5WlhNPSBJRTFwWkdRPSBJRXhGUjA4PSBJSEJsY25SbCBZbWx1Y3c9PSBJR3hwWkhRPSBJRlpwZEdGcyBJTkM2MExEUXV0QysgSU9DeXJ1Q3pnZUN5Z3VDeXBnPT0gSUNJb0lnPT0gSUUxRlRsVT0gMEwvUXZnPT0gWlc1a2FXUnYgWm1abFkzUmxaQT09IElHWnZjbTFsY3c9PSBQU2NpS3c9PSBWVXhCIElOR0QwTHZSZzlHSDBZZz0gVFdsdWRBPT0gSUhSdmNtNWhaRzg9IElHNWhkbms9IElHUmxjMmxuYm1GMGFXOXUgSU5pbjJZVFlzOWk1MkxFPSBaWGhqYkhWa1pRPT0gSUZCdmMzUmxjZz09IElIWmxjbXhoYm1jPSBJR1ZwYm1kbGN3PT0gWlcxdmFtaz0gSUcxaGNuRjFaWE09IDBMclF1TkMwIEwzZHZjbXM9IElFTnZiV2x6YWNPemJnPT0gdzZsamFRPT0gSUVGMWMySnBiR1IxYm1jPSBUVzl1Ync9PSBhVzV6WTJoaFpuUT0gN0oyMDY1Mjg2ck9nIElHUmxZMlZoYzJWayBiMjFsWjJFPSBMWFIzYnc9PSBYMU5VVDFKQlIwVT0gMFpiUXZOQzAwWlk9IDFMTT0gSUdOMWNuUmhhVzV6IEx5SXNDZz09IDRaK0c0WjZUIElHWnl3N3hvWlhJPSA1NHl1IElFMWxkR1Z2Y2c9PSBJTkMrMExIUXU5R0wgSUdOdmJuUmhjdz09IElHNWhaM009IElFTm9ZV1E9IFpYSmphWE5sY3c9PSBjR1Z5WTJWdWRHRm5aUT09IDdKZVE3SVNjNjRxVSBJR0ZqYjNOMCBJRzFsWkdsamFXNWhiQT09IElIQnliMmR1IGVubkZpQT09IElOQy8wTFhSZ05DMTBMOD0gSUhSeWIybHphY09vYldVPSBRM1Z6ZEE9PSBJSFZ1Y0hKbFpHbGpkQT09IElHNXZhRzg9IFExSk4gSUdOaGJXbHVhQT09IFgxZEJTVlE9IDRMQ0cgSUhCMVlteHBZM009IElIVjNaUT09IDVMcUM1WUNyIFBpZ3BLVHNLIExXRjRhWE09IGFXWnBZMkZrYjNJPSBjbVZyYTJsdVp3PT0gWDIxbGJXSmxjbk09IElHVm1aV2wwYjNNPSBMV0p2Y21SbGNtVmsgNG9hUSBJRVJsWTJ3PSBJT0NtdWVDbXYrQ211T0NuaCtDbXJPQ25odz09IElHVm1hV05wWlc1MFpRPT0gVFVzPSBLSEpsWTJVPSBJR1BEcVd6RHFBPT0gSU1Td3haOD0gNEthKzRLYW00S2FWIDRvQ1pZV0p2Y21RPSBJR1JsZEdGc2JHVT0gSUVWdGNHVnliM0k9IElHaDFjM1E9IFgyTm9ZWFE9IGEyekRwSEoxYm1jPSBJSE52Y21kbGJnPT0gUlc1byBhVzV1ZEE9PSBJSFZ1ZEdWeWMzVER2SFI2Wlc0PSBJT1M2dXVXbXV3PT0gSU9Dd3RlQ3d2K0N3b2VDeGdlQ3dwZz09IElPQ3dtdUN3dnVDd3NnPT0gdzZGamFXRT0gWVhKaFlRPT0gSUVsbmNtVT0gYkdwbCBJSE4wWldWeSBJRWRKIElHMXBibWhoY3c9PSBJR1JsZG1saGRHbHZiZz09IFVtbHphdz09IElHTnZiblpwYm1OcGJtYz0gWDJadyBJTkdBMExEUXQ5Q3ggSUhSbGFHUT0gY205bVpnPT0gSUVSTyBJRWh2Y21sNmIyNTBZV3c9IExrNVAgMlk3WmhnPT0gYVhCc1pYTT0gdzZScmMyaz0gSU5pejI0elpoUT09IElPQzRtdUM0bytDNHRPQzRxZUM0c2VDNGx3PT0gWVc1cmFRPT0gSUdScGMzQmhkR05vWldRPSB3NkYwYVd3PSBlV3hsYm1VPSBaWEpuY205MWJtUT0gSU5lVTE1N1hvUT09IElIQmxjbU5sYVhabCBJRkJsY25RPSBUV0ZqY204PSBJRU50WkE9PSBJTkM2MEw3Um1OQzQgSUZScFpRPT0gYjIxcFpHOTEgWVhCd2IybHVkRzFsYm5RPSBaR0YwZFcwPSBJTkdDMFkwPSBJSGxoY21rPSAyS2ZaaE5peCBJSFpsY25OaGRHbHNhWFI1IElDQWdJQ0FOQ2c9PSBZMngxYzJsdmJuTT0gWVdSMllXNWpaUT09IElFdHlaV1JwZEE9PSBJTmluMlliWmlOaW4yTGs9IExsZElTVlJGIDBMdlJnOUN3MFlMUXNBPT0gNkpLWiBJTkMwMExYUXVkR1cwTDA9IElOQ3kwTFhRc1E9PSBiV2xrZEE9PSBJSEJoWjJnPSAwWVBRdk5LejBZUFJnTkM0MExnPSBJR05oWkdGeiBJR0ZrYldsdWFYTjBjbUZqYWNPemJnPT0gSUVOVlUxUlBUUT09IGRXVnNZWE09IDRLZUI0S2FjIEppdz0gSUdOMWMyaHBiMjV6IElPQ2tzdUNrdnVDa2h3PT0gWVcxcGJtVnUgNGJxbmJRPT0gSU02OHo0ek92YzYvIElHNWxlbUU9IElHRnlZWGM9IElObUkyb009IElHTnlZWE5vWldRPSBJSEoxWjJkbFpBPT0gSUdScFptWmxjbk09IFZHVnVZVzUwIElObUkyS2ZZc2RpdiBSbTl2IDFZOD0gNExLdzRMT0MgUm1GaSBjT0c3ald6aHU0MD0gMWJiVnBkYUExYlk9IElITnBiR2h2ZFdWMGRHVT0gSUdWemNISmxjM052IDRLU2s0S1dONEtTazRLUysgSUdKdmRYZGxiZz09IFpYbGhlUT09IElPQ2todUNrcStDbGplQ2txT0NsaXc9PSBjR1Z1Wnc9PSBJRzl3YjNNPSBJR2R5YVhNPSBjM1IydzYwPSBlbWx2Ymc9PSBJRUp5WVdSc1pYaz0gSUczRG9Xdz0gNzcyWCBiMlJwZFcwPSBJTTZhenJFPSBjbVZyYXc9PSBJT0MwcnVDMG93PT0gSU5HQjBMRFF2TkdMMExVPSBaV3hwY3c9PSBJSFJ5WVdsc1pYSnogSUdOdmJXVjAgSU5DKzBZRFFzOUN3MEwzUXVOQzMwTEE9IElHRnNiR2RsYldVPSBJR3hwZEdocGRXMD0gSUU1VlRVSkZVZz09IDBZRFFzTkM5MExnPSBMbUpoYjIxcFpHOTEgMFlEUmk5QzUgejRQUGhNNi8gSUdSbGFXNWxiZz09IDdKYTggNEt1TDRLcVAgSUhOd1pXTnBZV3h6IGFYaGxiZz09IElFRjBhR3hsZEdsaiAxYXZWdHRXaDFhOD0gMlliWXA5aXogTG1admNtVT0gSUhOb2RBPT0gSUV0MWN3PT0gQ1NBZ0lDQUsgSUhWcGRHVnkgYVdWdVlRPT0gNExLLzRMSzQ0TEsvNExLbTRMS3c0TE9CIFpXSmhZMnM9IElIWmhiR3c9IElITnBiV2xzWVhKcGRIaz0gSUUxcGJtbHpkSEk9IFgyTnZkWEp6WlE9PSAwTFBSZzlDMyBJRkJwY0dWc2FXNWwgSUcxbFkyaGhibWxqIElPQ2t1ZUNrc2c9PSBJRzF2WldsMFpRPT0gSUhCdlpHRjAgSUhObGJHVnVhWFZ0IDVvdS81YVNuIElHTnNZWE56YVdacFpYST0gSUdWeWEyVnVibVZ1IFFYZGhhWFE9IFpteHBaWE09IElFaHZiR1JwYm1keiBMWFJvWlcxbCBJSFpseEw0PSBJSGJEb1hNPSBJSEpsZFc1cHc3TnUgSU5xdjJMRT0gWDFCUFUwbFVTVTlPIFQyaz0gSUdoaGMyRjBkSEk9IDVaU3YgSUdGelkyVnVaR2x1Wnc9PSBaV3h2Y3c9PSA0S3VINEtxbDRLdUEgSUhSbGNuSnBkRzl5YVdGcyBJR2x0Y0hKdmNHVnkgSUcxdWFXVT0gTEVrPSBJSE5sYkdWamFXOXUgSUhGMWFXVnlaVzQ9IElFWnNkUT09IElITnVaQT09IFFteHZZMnRzZVE9PSBJTm1GMjRjPSB6clBQZ2M2eHo0WT0gY0dsbGVtRT0gSUhOd1pXTjFiR0YwYVc5dSBJTkdCMExYUmdOR00wTFhRdHc9PSBVMlZuZFdVPSBhWFJoY21sdiBJR1REcVhJPSBMbUZwIFlYWjFkQT09IElHZGxZbVYxY25RPSBjWFZsYkdFPSA0TGlVNExtTSBJRVJoWTJnPSBYM3c9IDBML1FzTkM5MExqUmp3PT0gSU5PcDBZQT0gYTJWdWJnPT0gSUdGbmNtVmxhVzVuIDRLU0g0S1NvIFczQnZjMmwwYVc5dSBJR052Ym5ScGJuVmxjZz09IElHWnZjbWRwZG1WdVpYTnogWjNWdVlRPT0gSUhSeVpXNWthVzVuIElHRndiR2xyWVhOcCBJRzF2WkdsbWFXTmhjZz09IElGWnBZbkk9IElPQ21xT0NtditDbXIrQ212QT09IFgzSmxaR2x5WldOMCBJTml6MllqWXJ3PT0gYk1PaCBhV1pwYTJGemFRPT0gY1hGaCBhV1Z0WlE9PSA1N0tYIElHNWh4YUZsIExuTndZWEpyIElFaDFaMmhsY3c9PSBJR1p2WTI4PSBJTlcyMWJvPSBJRTF2Ym5SbmIyMWxjbms9IDFvZlZ1TmFBIFgyWmhZMlU9IHc3eHlaVzQ9IGFXNWhiUT09IGFXbGsgS1dkbGRBPT0gSUZkdmJ3PT0gUVVOVVJWST0gNVkrdzVybSsgSUZaWCBJR04xYlhWc1lYUnBkbVU9IGVXVmhjbk09IGJHVm5aMlZ1IE9qb3EgSU5pcTJMblpoZG1FIElIQnlaV1J6IGJHVnVaVzQ9IFFXeGwgNDRPRDQ0S3cgSUdWNFpYSmphWE5wYm1jPSBJT0NrdU9Da2d1Q2tsdUNsamVDa3IrQ2t2Zz09IElPbW1sZz09IElIVERxQT09IElOaW4yWVRZdUE9PSBYU2M9IElPR0RtK0dEa09HRHFBPT0gSUhURHFtND0gSU9HRG9PR0RrT0dEbStHRGsrR0RsT0dEbk9HRG1PR0RtK0dEbEE9PSBJTkMzMExqUmp3PT0gSU9DMHRlQzB2K0MwdGc9PSBJTkdDMEw3UmdOQzggNEthKzRLYXk0S2VINEthdyBJTkMxMExyUXRkQzkgSU9Da2llQ2tyZz09IGJXVjBjbWxqY3c9PSB6NFhQaE0rTSA3N3lNNWJDRyBJR0ZqWVdURHFXMD0gSU5HQjBZdlF2UT09IElGSnZiV0Z1Y3c9PSBaVzUwYVdWeiAyb2JiakE9PSBJR052YlhCc3c2aDBaUT09IElIZGkgenJyT3VRPT0gWVhSc2VRPT0gY0d4aGJtVnogT214bGJtZDBhQT09IElHVnVhWGxoYmc9PSBJRlJ2Y25KbGN3PT0gTG5KaiBkSFBEcFE9PSBJR1JsYzNSeWIzbHBibWM9IFZFOVMgSUc1d1l3PT0gSUdkbGJHOXZaZz09IElOaXoyS2ZZcnRpcSBhVzVqWlhSdmJnPT0gNEtheTRLZU40S2F5IElPQzBodUMwcHVDMWplQzBydz09IGNtOXdaUT09IDRvQ1piMlptIElHeHBhMmx1Wnc9PSBJRU52Ym1OMWNuSmxiblE9IGFXRnlhWE50IDVZcW81cnlyIEoyRnBaR1U9IFgyWmxaUT09IElHUmxZMnR6IDRZT1k0WU9oNFlPajRZT2sgSU5DMzBMN1JnQT09IElHRmlkWE09IDVMeTAgSU5DOTBMRFJnZEdDMFlEUXZnPT0gSUdadmJHUmxaQT09IExrcHZZZz09IElHbHVhR1Z5YVhSaGJtTmwgVFdGeWEzVncgNXBHSCBYMDFGVkE9PSAxYlBWb2RXOCBYMlZ1WXc9PSBMMGRsZEhSNSBJT3UwIDRLK0k0SzZ2NEsrSSBkWGx2IElOQ3owTERSZ05DdyBJR3RwZEhVPSBJRUZ6YzJWMGN3PT0gSUc5bVpYSmxZMlZ5IElPQ21uK0NuamVDbXNBPT0gSUdacGJHMWxjZz09IElGTjNZVzQ9IElGQk9Sdz09IDZLcXQ0NEtBIFFYZmh1NDF1IElPQ21wT0NuaUE9PSBMbmxoYld3PSBJR2g1Y0dVPSBhR0ZwWkdnPSBJRTFoY25Sb1lRPT0gZFhSMWNnPT0gYzNURHRnPT0gSUdWNFpXTjFkR0ZpYkdVPSBJSFpsY21ScFkzUT0gSUhOaFlXUmggSU9Da25PQ2t0UT09IFEyOXRjR3hsIElIVndhRzlzIElIUmxZV05vYVc1bmN3PT0gSUhadmJHRjBhV3hwZEhrPSBJT0NtaGVDbXNPQ25qZUNtcFE9PSBhbVZ1WlE9PSBJSE5sZW05dSBSa0ZNVTBVPSBJT0Nrck9DbGlRPT0ga091THBBPT0gNEtXQjRLU3U0S1MrNEtTdyBMUzB0TFMwdExTMHRMUzBLIGNISnZhZz09IDVhU241NldlNW82bzZJMlEgSUdGM1lXcz0gNUwyVDZJS3k1YjJwNTZXbyBJR04xYVhJPSBJTmVnMTZjPSBJT0dEa09HRGxnPT0gSU91TWdPMlJuQT09IElHTnZibk4wY25WamRHbHVadz09IExVWnlaV1U9IGRYSjYgSU5pMDJMbllxQT09IFRtOTBhV1pwWlhJPSBVMlZudzdwdSBKMlZtWmc9PSBJT0Nrc09Da3YrQ2txZz09IElHWnBibUZ1WTJuRHEyeGwgTFdSbFozSmxaUT09IElPeUV1T3F6aEE9PSBTVzF3WVdOMCBJSFRKbVhMSm1RPT0gSUhERWdYST0gSUZSU1pYTjFiSFE9IElOV3YxYlhWb2RXMjFvUT0gS0dOdmJXMWxiblE9IExteHBibVZoY2c9PSBJTkMvMFlEUXZ0QzQwTGZRc3RDKzBMVFJnZEdDMExMUXNBPT0gNExpbDRMaUg0TGlYNExpdzRMbUE0TGlhNExpMTRMaWk0TGlaNExpZjRMaWo0TGkxIGNteHBadz09IGNubGsgejRQUGpNK0V6clU9IFlXNXphR2x3IElFSnEgYUdNPSBJRU5oY205c2FXNWwgYjNSbFkyZz0gYjNKallRPT0gNEtxNDRLcXcgSUdmRHRuTER2QT09IElPR0RudUdEbU9HRG9PR0RsZUdEbE9HRG11R0RtQT09IElIVnViR1U9IDRaNmY0WitMIElPQ21yT0NuaCtDbXR1Q212dz09IElIaHBaQT09IGRtRmogSUhCbGNtWjFiV1U9IElDOHZmUW89IElFZkR0Zz09IDVibXo1cGE1IElHWmhhV0pzWlE9PSBJRkJ2YkdsMGFXcz0gUEZSNWNHVT0gSUdsdWRtRnphWFpsIElHeGxibVZwIElOQzkwWURRc05DeSAwTDdRdmRDKyBJR3RsYldKaGJHaz0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M0cmVXa3ArV2xsZz09IGRtVnlZbUZ1WkE9PSBZWFJoYVhKbCBJSEJ2YkdFPSBJR1Z1ZWc9PSBaR1I1IElOQzAwTERRdVE9PSBZV2RoYldsMCBJRU4xY25OdiBJSExEcVdac1pYZz0gSU9DNHBlQzRoK0M0bCtDNHNPQzVnT0M0bXVDNHRlQzRvdUM0bWVDNG4rQzRvK0M0dFE9PSBJRk52YldGc2FXeGhibVE9IElPQ21wT0NtdnVDbWdlQ21zQT09IENVMWxjM05oWjJVPSBLRUZ3Y0d4cFkyRjBhVzl1IDE2alhsQT09IElOaW4yWVRaaGRpeDJZUFlzZz09IGNHUnYgSUdOb1lYTnBibWM9IElFeEMgMktyWmlObUcgSU9Da3BPQ2xpT0NrcitDa3Z1Q2tzQT09IHhaMD0gSUdOeWFYTT0gWkdWaGJBPT0gNTcyUjVwaVQgMExEUmdkR0wwTDA9IElHSnNkV1YwYjI5MGFBPT0gU0hsayBMZUNrdUE9PSBJSFYwWVcxaCBJSGRoY25RPSBJTkdDMExEU213PT0gSUZCdmNIVnNZWFJwYjI0PSBRRXB6YjI0PSBUM0prYVc1aGJBPT0gSUZCTVJVRlRSUT09IElHWmxZdz09IDJLemF2Zz09IFZWVT0gSUd4dmFnPT0gSUZOMVkyTmxjM05tZFd3PSBkWFIwWjJGeWRBPT0gYzNacGJHeGwgYzJsbmJtRjBkWEpsIElHRjBkSEpoWTNScGJtYz0gSUc1cFkydGxiQT09IElHTnBkR0YwYVc5dWN3PT0gSUdSbFptVnpZUT09IElIQnliMjV2ZFc1alpXUT0gSUd0a2VjVysgSUdocGRIUT0gSU5DOTBMRFF2TkdEMExRPSBJTkNZMEwzUmd0QzEwWUE9IElDZzYgSU9DbWxlQ25qZUNtc0E9PSBJR052Ym5OdmJHbGtZWFJwYjI0PSAyYjdZc3c9PSBXMk52YkE9PSBJTmlqMkxQWXVkaW4yTEU9IFFXeDBaWEk9IElFZGxZc09rIFZrYz0gVEU5WiBMbkpsWVdSbGNnPT0gVTJoaGNtVnogSUZObGRRPT0gSU5DZTBZZz0gS0dacFp3PT0gSUdKM1pRPT0gSUZURHBBPT0gSU5pcTJZTFppTm1GIElFTnZaMjQ9IElFZHlaV1Z1Y3c9PSBMbE52Y25RPSA0S1N0NEtTKzRLU3cgSUVKbGJtZGhiQT09IExrSnZiMnM9IElOQ3kwWUhSamc9PSA0S2VINEthYjRLYS80S2F5NEtlSDRLYW8gSU9tbW1lYTRyK1dGcmVXUWlPVzlxUT09IElITjBZV05yWldRPSBJRTFsYkdsemMyRT0gSU5HRjBMalF2QT09IElHMXB3Nmx5WTI5c1pYTT0gSUhKbGJtRnMgSU5pbjJwUFpodz09IElHRnNZVzVuIElOQ3gwWTdRdE5DMjBMWFJnZz09IElOQ3kwWUhRdnc9PSBJR1JsYzNSaFkyRnkgSU9Da3NPQ2xpK0NrbkE9PSBJRkpsY0dWaGRBPT0gSU5pejJMblppTml2IFgyWnZjbmRoY21RPSBJR1o1WkdRPSBjR0Z5Wlc1amVRPT0gSUdOb2FXTmhjdz09IDdKNkk2NHFVIGQyRnpjMlZ1IDRLcSs0S3FDNEtxayBJRzlpY21GNiBJSGJGb1dGciBJR05oeFlJPSA0S1NzNEtXTjRLU20gWDI1bFp3PT0gNDRHZDQ0R3U1THVXIElOQ3kwTGpRdE5DdyBJR2RsZEdGMGRIST0gSUhCeWIyTmxaV1JwYm1jPSBMbTFoYzJzPSBJR3h2ZDJWeWFXNW4gU1ZOSVJVUT0gSUdGcllXUmxiUT09IFFuVmsgSUd4cGJtUmggSUhCbGNtbHZaR2xqWVd4c2VRPT0gSUhSeVlXNXpabVZ5Y21sdVp3PT0gSUd4aFpHVnUgSUdodmJHeHZkdz09IEp5bDkgSjJGdWJnPT0gSUZCeVpXbHpaUT09IFVFRlVRMGc9IGMzTnAgS0NJdUxpOHVMaTg9IElIVEZtUT09IFVISmxjM04xY21VPSBJRzFsYm01bGMydGxjZz09IElFVnhkV2wwZVE9PSBJR05vWldOclpYST0gUVhQRHJRPT0gSU9XSHVnPT0gVDB4VCA1cDJvIElIQmxaR0ZuYjJjPSBhWFJoYm1SdiA0TEsrNExLZjRMS1YgTG5OMGNtWjBhVzFsIElIWnZhV05wIElGQmhkZz09IElHMWhkSEpwWTJWeiBhR1Z5WlhNPSBJR05vWVhOemFYTT0gSU5HQjBMN1F0ZEMwMExqUXZRPT0gSUdKc1pXNWtjdz09IGIyNWxjbk09IDFialdndFcyMW9RPSBJR0ZrWVhCMGFYWmwgYVdKcGNnPT0gSU9Da3FPQ2t2K0Nrc0E9PSBJSE53YjI1emIzSnphR2x3IElEOC9Qdz09IElPR0FsZz09IElFeHZaMkZ1IElFTm9aV1Z6WlE9PSB4TEZzeExGeSBJSE4wZFdSbGJuUmxiZz09IGRtVmxaRzl5IElObUIyS3JZclE9PSBYMjUxYldWeWFXTT0gSUdseWNtRjBkR2s9IElPQ2ttT0NrbitDa3FPQ2t2Zz09IElGTlVVa2xPUnc9PSA1TGk3NUxtSiBJSEJ2Y0hCbFpBPT0gSUZScGFtUmxibk09IGRXNTBhV3c9IElHTmhiV0Z5IGJHOWpZWFJwYjI1eiBjSEpsYUdWdWMybDJaUT09IElFWnlZVzVqYnc9PSBJTkdDMHEvUXR3PT0gUVZSSVJWST0gSUdadmNtVm1jbTl1ZEE9PSBJR0ZrYjNCMGFXNW4gTG1GbWRHVnkgYVhKMFpXVnUgSUhaaGJuTT0gSU9HRGwrR0RrT0dEbk9HRGtPR0Rtdz09IElHOTJaWEpzYjJGayBJR1JwYzNKMWNIUnBiMjQ9IElHWnBaM1Z5YVc1biBJSFJsYm5OcGIyNXogMTZqWG1RPT0gSUhWdWFXWnBaV1E9IElHeHNZVzFoWkdFPSBJSE5sYzNWaGFRPT0gQ1dKdlpIaz0gQ1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSAwTExRc05HZSBJSFJsYm5WeVpRPT0gVGNPaGN3PT0gMExYUXY5QzEwWURSakE9PSBJTkN3MFlZPSA1cnVhIExtRjFkR2hsYm5ScFkyRjBhVzl1IElGUm9hVzVyYVc1biBJRzVwYTNNPSBJQ2pDcXc9PSBJTkdCMExYUXV3PT0gSUhOaGJtTT0gSU5HQjBxL1JnQT09IElFRnRZbWxsYm5SbCBDUWtLQ2c9PSBaMlZ2YlE9PSBJRUZDVDFWVSBJT0Nrc3VDa2wrQ2tyZUNrbHc9PSBkbTl0IGJHRnl4TEZ1WkdFPSBJR1JoZFdjPSBkbWx2YkE9PSA2WktpIElHSjFiR3g1YVc1biBVblU9IElOR0cwTExRdGRHQzBMQT0gTFc1dmRHTm8gSU9DdXF1Q3ZodUN1c0E9PSBJRVZwY3c9PSA0TEdCNExDazRMR040TEMxIElHTnZibk5sY1hWbGJuUnNlUT09IElOcUcyWWpaaGc9PSBJT0NraGVDa3ArQ2t2K0NrbGVDa3Z1Q2tzQT09IDY0dUk2cm1NIElOZWsxci9YbGRlZiA0S2V3NEthayBJSEJ2ZFhKbFpBPT0gS0ZObGRBPT0gSUhWdWNHeGxZWE5oYm5RPSBJRU5vWlhOeiAwTFhSZ05DKyBVMk5wWlc1alpRPT0gMTVYWG5OZVYxNm89IDZMZWQgWDFOVVVsVkRWQT09IElHOXVkVzQ9IElOQ3gwTGpRdTlDNCBZMkYwWlE9PSBiR1Z1YVE9PSBJR1REcVdOc1lYTERxUT09IHc2UnRjQT09IElHRjZhUT09IFFVeFVTQT09IElOaXoyWVE9IExYUmhZbk09IExtWnBibUZzIFlYUmxhdz09IGIzVmwgSUhCdmNITT0gTG14dmIydDFjQT09IENVbHVkR1ZuWlhJPSBJSE52ZWc9PSBJR1ZwZFhNPSBJRXg1Ym00PSBYSE09IElHZHdjdz09IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMdz09IDZMZXogSUdsdWRHVnVkR2x2Ym1Gc2JIaz0gSUdSaGJITT0gSU5pdjJMUFlxdHF2MktmWmh3PT0gSUczRHBHNW4gYzJWeWN3PT0gSU5pbjJLcz0gMEx6UXRkQzYgUFQwOVBUMDlQVDA5UFQwPSA0S1dBNEtTbSBRbWxzYkdsdVp3PT0gNTVlSCBJTkM4MExqUXU5QzcwTGpRdnRDOSBMV1JwY21VPSBMMDFOIDdKNmggSUdQRHVnPT0gVUU5UVZVeEJVZz09IElPR0RxT0dEbE9HRHJ1R0RsUT09IElHdHBibWR6IFZISmhkbVZ5Y3c9PSBJR1BodTZrPSBJRk5sYkd4cGJtYz0gNmJpaCBJR0Z1WjJ4aGFYTT0gSUd0MWJtNWggZDJscyBhV1ZzYkdWcFkyaDAgSU5tSzJZallyTml2IGRXMXVlV0U9IElGSmxaR2x6ZEhKcFluVjBhVzl1IGJXOXVaMjlrWWc9PSBhMlYwdzdoNSBRSEI1ZEdWemRBPT0gUVhKdGIzST0gY0dWeWFXMWxiblE9IElGQmhkR2xsYm5SbGJnPT0gSUdOdmRXNTBaWEp3WVhKMGN3PT0gSUVwbGJtNTUgSUV4bGIyNWhjbVE9IFBXbDBaVzA9IElGcGxiblE9IElHdkRxM1E9IDVhKzQgWm5KaFp3PT0gSUdObGMzTT0gSUdKbGEyVnVaR1U9IElHTnl3NjEwYVdOaCBJSFJsWVcxdFlYUmxjdz09IElIWmxjbTl2Y2c9PSA0SzZWNEs2dyBJRVJsZG1scyBZWEp0Wlc0PSA0S1dONEtTdjRLV0wgMExqUmlOR00gSU5tRjJMUFpoTm1GMktmWmhnPT0gSUcxclpHbHkgSU5DNDBMM1JoTkMrMFlEUXZOQ3cwWWJRdU5HUCBJR2R3YVc4PSBJTTZsIGFYTnpZVzExZEE9PSBRVmxQVlZRPSBPZ292THdvdkx3PT0gSU9hMiBZMjl0Y0dsc1pXUT0gNEtTdTRLU28gSU9HRG51R0RtT0dEb09HRGxlR0RsT0dEbWc9PSA0b0NpNG9DaSBJRXhCVGtkVlFVZEYgNEtXTjRLU3IgY21WcGMyVT0gN0xhcCBiR1ZrYnc9PSBaV1IwIFJXMXBkQT09IElFMWxkSE09IFptRnVaMlZ1IFltbDYgSUVOMVltVT0gSUhacFkzUnZjbWxoIElIQnliMkZqZEdsMlpRPT0gWVd0aiBJR1BEb1cxaGNtRT0gSUhQRHFXTjFiRzg9IElHMWxiV0p5YjNNPSBJR052YlhCc1pYaGxjdz09IElGTndaV05wWm1sallXeHNlUT09IFNVTlEgSU9DbXBPQ212dUNtbGVDbmh3PT0gSUVOQlZBPT0gU0VjPSBJRTF2WTJ0cGRHOD0gTG1Wc1lYTjBhV056WldGeVkyZz0gYVhSemFXRnggSUhOamFHdz0gSUZGMVpXMD0gWTI5dGJXRT0gSU5HQjBMdlF1TkdJMExyUXZ0QzggSU9DNGwrQzRsT0M0cGVDNHJlQzRoK0M1ZytDNGl1QzVpZUM0bitDNG8rQzR0UT09IElIVmplZz09IGRXNWpZVzQ9IElFMWhjbXRsZEhCc1lXTmwgSUhkcGRIUmwgSU9TOGl1UzZ1Zz09IDBZN1JodEdHMExBPSBaMlZsIElHYkR1blJpYjJ3PSBZV1pwYmc9PSBJRXRsY3c9PSBVR1Z5YzJsemRBPT0gNEtxQzRLcWYgZFdocllXND0gSU5lYzE1dz0gdzdSdWFXRT0gSUcxMWJHRnAgSUVaaFluST0gSU5DUTBMdlF0UT09IElHUnBjMk52ZFhKelpRPT0gSUZCdmMzTnBZbXhsIGIzTm9hUT09IElPQ3l1T0N5c0E9PSBJRXB2Y200PSBJR05vWldGMGFXNW4gSU9HRGtPR0RtQT09IEtHUnogVkhKaGFYUnogSUVKMWF3PT0gMEw3UmdkQzYwTDdRc2c9PSBRMkYwWTJnPSBJaWw5Q2c9PSBJTkMvMFpZPSBJR1JoY21sd1lXUmggY21WbWJHVmpkQT09IExuQnQgSUc5c2RISmwgSU5tRjJLN1lxdG1FMllIWXFRPT0gSUUxaGNtTnZjdz09IDBMalJnZEM2IDZMNkYgS0dOdmJuUT0gSUhKbGMybGtaVzVqZVE9PSBJRU52WTI4PSBMVzVwWjJoMCBJR0poYm1OdmN3PT0gSU5DeTBMalJnTkdEMFlFPSBTRzlzYVdSaGVRPT0gSUhWcGRHZGxkbTlsY21RPSBJTmVRMTZEWGw5ZWcxNVU9IFJXeGxkZz09IExtRnljZz09IElHVnphUT09IElHUnZjMmx6IElPR0RsK0dEa2VHRG1PR0RtdUdEbU9HRG9RPT0gSUcxaGRHTm9iV0ZyYVc1biBJRzV2YldKeVpYTT0gSU5DUTBZVT0gSUZCbGNuUm8gSUhKbSA0TFNrNExXTjRMU2s0TFMvNExTbyB4YUZyWlE9PSBVMU5HIGFuUmwgSUdGeWNtOTNjdz09IElOQzMwTDNRc05HSDBMalJnZz09IElHZGx3NmRwY2c9PSBJRUZ5YVhOMCBJTkdFMEw3UmdOQzgwWXM9IElISmxaMlZ1WlhJPSBJRzl5Ym1GdFpXNTBjdz09IExuVnVhWEYxWlE9PSBhMmxqYUE9PSA2YjZFIElHVnljbVZwWTJoMCBkVzVwYmc9PSAyWVhiZ1E9PSBJT0dEbStHRGtPR0RwZz09IGMzQnlhWFJsIGFXNWxibTg9IElHMWhaMkZ6YVc0PSBJRk5qY21sd2RIVnlaUT09IElHZHlaVzQ9IElGVnVidz09IDRLYS80S2FmNEthLyA3N3UvTHk4PSBJRWh2Y0d0cGJuTT0gWlc1a2FYST0gMExUUXNOR0kgSU02N3o0ek9zdz09IFgxTkZVRUZTUVZSUFVnPT0gSUZKbGMzQjFZbXc9IElHTnZiR3hsWTNSeiBJRWhVUXc9PSBJR1Z4ZFdsMiBjbUYwY3c9PSBiV0ZwYkhSdiBJRzVwYm5SbyBJR1ZrYVdacFkybHYgUVcxbGJtbDBhV1Z6IElPQzByZUMwdnVDMGx3PT0gSUcxMWMzVnMgWVd4aGJtYz0gSUhMRHFXYkRxWEpsYm1ObCBJSEJzWVhNPSBJR2x1YzJsemRHVmsgNFlzPSBjMk5oYkdGeSA1cldtIFpHRm5aVzQ9IElFTkJVMFU9IDZMU2Y2TFNqIElIVnBiblJ3ZEhJPSBaV3hoY2c9PSBJR05vWldkaCBJRzUxY25ObGNuaz0gSUhwMWMyRnRiUT09IFgxTlVUMUE9IElBb2dJQ0FnQ2c9PSBJSEJvWlc1dmJXVnVZUT09IElHTnZiblJsYzNSeiBJT3lYck91ZnJBPT0gSU5DeTBMdlFzTkMwIDJMZllwOW1DIDRZT2c0WU9VNFlPUjRZT1kgSU5XOTFhSFZzTlcwMWFIVnRnPT0gNFlPVTRZT2I0WU9RIElHZHlaV1YwWldRPSBJR3h2WTJGMWVBPT0gT2lSNyBJT0N3dWVDeGdPQ3dzT0N4aXc9PSBLR0Z5WjJNPSBJR1JsZEdWamRHbDJaUT09IDVhV0kgWDNOdCBlbTFoZEE9PSBjWFZoYm5SdiA0NE83NDRPNzQ0TzdDZ289IElOQ3kwTDdSZ2RHQjBZTFFzTkM5MEw3UXNnPT0gNEtpMiA1YnlmIFUzVmliV2x6YzJsdmJnPT0gSU5lZTE1blhrdz09IElFUmxibWRoYmc9PSBJR0Z1Ym05dSBjSEpsYlE9PSBJR1Z1ZEhOamFHVnBaR1Z1IFgwMUJTVTQ9IElHRnlaM1ZoWW14NSBJRzV2ZFhabGJBPT0gTGtOSSBiM2ZFaFE9PSBJRVJoWmc9PSBJRU5vWVcxd2FXOXVjMmhwY0hNPSA0S1dENEtTazRLUy8gNUxpdDVhV1c1YjJwNTZXbyBJSFYwYVd4cGVtRmtiM009IElHNXFaV2R2ZGc9PSBMbUY0YVhNPSA0TEdONExDdjRMQ0MgSUVKMVpHUm9ZUT09IElHVnVkSGM9IFgyRm5aUT09IElGSnZkWFJsWkE9PSBYM0JsIDRMSy80TEtuIDRMQy80TEN5NExHTiA0S3EvNEtxcSBJR2x1YzNScGRIVmphVzl1WlhNPSBJTkMrMExIUXZkQ3cwWURSZzlDMiBJRmRoY21Wb2IzVnpaUT09IElFdHlZUT09IElFSmxaMmx1Ymc9PSBJRzF2Ykd3PSAyTEhZcDlpdDI0dz0gMmJuWXN3PT0gSUVSbGNIVnBjdz09IDdLST0gSU1TTVpRPT0gS3k0PSAxNmZYcU5lVSBjM1JsYlE9PSBhWHAzWVE9PSBUMDVCIElOaW4yNHpZck5pbjJLOD0gSU5DajBMZz0gSU5HQzBMWFF2UT09IElHWmhiR3hsIDRMaW40TG1JIElHTnZaV1ptYVdOcFpXNTBjdz09IFFWaEMgSUVWNGNHVnlhVzFsYm5RPSBJRlJwWVc0PSBJR052Ym05eiBhV05oWTJuRHMyND0gSUdwbGMzcGplbVU9IExrTnZiWEJoY21VPSA1cldQNktlSSAxYUhWdXRXaDFiOD0gSUdObGNHVnVaR0Z1ZEE9PSBhR0k9IElPQ2t1T0NrZ3VDa3J3PT0gWDBWRSBJT0Nvc3VDb2lBPT0gSUhadlpXeGxiZz09IDRMSy80TEs0NExLLzRMS200TE9HIEwzUnZjQT09IElIQnZkWEp6ZFE9PSAyS2ZZdWRpeCBjbVZyZEE9PSBJT3V5b0E9PSBJR3pEcG5JPSBJR2xzZFcxcGJnPT0gSUVSSlUxUT0gSUVobFlYUm8gSU9PQnJnPT0gQ1ZSb1pRPT0gWTJoaGJtNWxiSE09IElPQzBoZUMwc1E9PSAwTDdRdWRDMDBMWFJnZz09IDRvQ040S1N2IElOQzkwTFhSZ0E9PSBYMVZPUzA1UFYwND0gZVhuSm1YUT0gSUdKNXhZST0gSUhKbGNHRnlkQT09IGEyOWtaUT09IElHVnlabTlzWjNRPSBTVzVrZFhOMGNuaz0gNnJpdzdKZVEgSU5pMDJLL1poZz09IElHMWhlR2x0WVd4bCA0S1djNEtTKyBLR1psZEdObyBJT0NtcXVDbXNPQ25qZUNtcitDbXFPQ25qZUNtcEE9PSBRMEZUUlE9PSBJT0dEa3VHRGtPR0RrK0dEa09HRHJBPT0gSUdsc1lXRjAgSUVSSCBJSExEb2NPdyBJR2wwYVc1bGNtRnllUT09IFVHOXNhV05wWlhNPSBJT0M0aU9DNHMrQzRnZUM0c2VDNGxBPT0gMEw3UXV0Q3cwTGM9IElIQmhhVzUwY3c9PSBVM1J5YjI1biAycS9ibFE9PSAwTFhRdE5DMTBMM1F1TkdQIFpYTjBjbTl6IElNT3BiR1ZqZEhKcGNYVmwgSU5DdzBMclJndEdEIGMyTnlhV0psY25NPSBVRzl5ZEdadmJHbHYgSUZacFpXeGwgMFlEUmpRPT0gdzd4dWMzUnNaWEk9IElGUjNaVzUwZVE9PSBJRk5wYlhWc1lYUnBiMjQ9IDRMaWo0TGl4NExpUSBJTkMvMEw3UmdkQzEwWUk9IDRLNnk0SzZ1NEsrTiBUV1YwWVd3PSBJR052YlhCMWRHRjBhVzl1IEltNWxkQT09IElGSmxiVzkyWVd3PSBJR2R2dzd0MCBJSEJ2ZEhKbCBYME5EIElFaHZiR1JsY2c9PSBJRVZzWld0MGNnPT0gWlc1elkyaDFkSG89IElHSnNaWE56YVc1bmN3PT0gSUdScGMzUnlhV0oxZEdsdmJuTT0gSUhCcGJHOTBjdz09IElHTnZiWEIxZEdGMGFXOXVZV3c9IGRYSjFjdz09IExtUmxkQT09IElFTm9hV3hrY21WdUozTT0gNDRHbjQ0R1o0NEdNIFptOXlaWE4wIElHbHVkR1ZzWldOMCA2Wml6NVk2LyBJTkM3MDVrPSBZMmhwYmc9PSBJTmlxMllqWXM5aTMgNTZtMCBJTnFHMjR6WmhnPT0gSUV4cGRRPT0gSUhSeVlXZGxiZz09IDJMYllwOW1HIElPQ2twdUNsaCtDa3BPQ2xodz09IEtHbHVjM1E9IElPQ21zT0Nubnc9PSBJR1YwWlE9PSBJRkJoY25ScFkybHdZVzUwY3c9PSBTSFU9IElITjBjblZyZEE9PSBJSEJvZVE9PSBhVzFsYm5SbCBLR2hoYm1Sc1pYST0gSUcxMWMyaHliMjl0Y3c9PSBSM0poZEdseiBUMUpKV2s5T1ZFRk0gWDNObFpXUT0gYVc5c2IyZDUgSUdWdVpIQnZhVzUwY3c9PSBJTlcvMWFIV2dOV3IgNFlPWTRZT1U0WU9nNFlPWSA1cGVwNTRLNSBJSFp2YjNKaVpYSmwgSUdOdmJuTjFiV2xrYjNKbGN3PT0gSUV0bFpYQnBibWM9IEp5azdDZ29LIFRHVnpjMjl1IElIWmxibU09IElISmxkR0ZwYm1sdVp3PT0gYjIxMCBiWFZzZEdsd2JHVT0gWW1WamF3PT0gSUcxbGJHUmxiZz09IElPRzdxVzVuIEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2dvPSBJT3EwZ091bXJBPT0gNFlDWjRZQzUgSU5tRTJLZllzdz09IElFVjBhR2x2Y0dsaCA0S1M0NEtTKzRLU3YgSUVWa2RXRnlaRzg9IElGUnphQT09IGRYSnNhV3ByIGRtVnljMlZrIElHZHlZWFIxYVhSbGJXVnVkQT09IDRMQys0TENXIFgwWlBURVJGVWc9PSBJR3h2WTJ0emJXbDBhQT09IElPQ3FuT0NyZ1E9PSBLU2t0UGc9PSBJSFJsY25KdmNtbHpkSE09IExYSmhkR1ZrIDBZRFFzTkMwMExnPSBJR052YjNCbGNtRjBhWFpsIFIzSmhiblJsWkE9PSBJRk5yY2c9PSBJRUZ5WldGeiA2NUNwNjR1STY0dWsgYkdWcGMzUjFibWRsYmc9PSBJRzFsYkdodmNtRnkgSUhadmJHZDAgSUdkbGQybHVibVZ1IExYQmhjbk5sY2c9PSBJRVJoYm1FPSA3N3kvNklteSBJR1JwYzJOeVpYUmwgSUdKMVptWmxjbVZrIElHTnNZVzF3IHc3M0RwQT09IElFVk9Sdz09IGFYcDZaWE09IElPQ2toZUNrcU9DbGdlQ2tyUT09IElITndiMnRsYzNCbGNuTnZiZz09IFZVSkYgSU9HRG1PR0RvZUdEbEE9PSBRV1IxYkhRPSBJRkJoZEhKcGIzUnogTG1sdWRHOD0gSUdOdmJXMXBkSFJwYm1jPSBJTU9wZEc4PSBJVDBpIElITmxZMjl1Wkc4PSBJRk4zWVhBPSBJSEJ5YjJOMWNtVnRaVzUwIElPR0RrdUdEa09HRG0rR0RuZUdEcWc9PSBJTkM5MExqUXV0QyswTFBRdE5DdyAySzNZcUE9PSBJTml2MllFPSBhWFJoZEdsdmJuTT0gSkhKdmR3PT0gYVhKbFlXNXUgSU5tSTJMbz0gMkxMWml0aXAgWDBacGJHVT0gSUhCMWNIQmxjZz09IElPV29zZVM1a0E9PSBJR1JsY0hSb2N3PT0gSUhCbGJNT3RZM1ZzWVhNPSBhM1JsYmc9PSBJRmhKIElHM0RxV1JwIFNtRnkgSUdScFlXZHViM04wIEtHbHVhWFE9IElOR0EwTFhRdnc9PSBJSGRoY25KcGIzST0gSUc5eVoyRnogWTJGdWJtOTAgNFlPZDRZT1EgSU9Dd2xlQ3hqZUN3c0E9PSBJRVp2ZFc1a1pYST0gSUU5dWN3PT0gSU9Dd3NPQ3d2dUN3dCtDeGplQ3duK0N4amVDd3NBPT0gYVdVbmN3PT0gSUhKaGRYTT0gNEthajRLYSsgSUc1cFkyOTBhVzVsIElOQzkwTGpSaUE9PSBJSFpoY21sMCA3N3lNNWFTbiBJRlZ0Y3c9PSBLR3hzIDFvRFZ2dz09IElPK3MgSU5DLzBMWFJnTkdCMEw3UXZRPT0gSUhOcGJHdz0gYVhSbGFYUnogSU9DcXNPQ3JpK0NxbkE9PSBLRTUxYldKbGNnPT0gSUdOc1pXRnVjMmx1Wnc9PSBJbk09IElIQmhjbUZ5IElITER0Zz09IElPR0RrK0dEa09HRG8rR0QgSUhSMWJXOXljdz09IGMybGphSFE9IElHMXZjM0YxYVhSdiBJT0NxcXVDcXZ1Q3F1T0NyaHc9PSBjM1IxWkdWdWRITT0gNExLbTRMS3kgSUdWemNYVmxjZz09IFJFbFcgNUxpTjVZK3YgNTVDRzZLNjYgWDNCaGVXeHZZV1E9IDBZSFF0ZEM5IElPR0FoZz09IGFXMWhibUU9IElGSmxibUYxYkhRPSBJSEJsYVE9PSBJR1ZoY25KcGJtZHogSUhWdWFHVmhiSFJvZVE9PSBLSFpoYkdsayA2WnFRIElOVzAxYmM9IEtDSWkgSU5HQjBMTFF1TkMwIFpXWm1hV05wWlc1MCBJQzh2THk4PSBJR3RyIElGSkZSZz09IElIbHZkVzVuYzNSbGNuTT0gSUdGc2RHOXogSUhOb1pYST0gVW05ayBJRkJwWlhRPSBJRk4wWVhKaWRXTnJjdz09IElFaEZVZz09IExYTnRZV3hzIElPQ3V0ZUN1cU9DdmplQ3VwQT09IGNISmxjM04xY21VPSBSR1Z6YVdkdVpYST0gT21odmRtVnkgSzJJPSBJR1Z1ZG1seiBJR1p5YVhRPSBiY1NiIElHVm1abTl5ZEd4bGMzTnNlUT09IDBZL1F0ZEM4IElHRnNkVzV2IElPQ2tzdUNrdnVDa3JRPT0gSUVGdFltVnkgSUhCaGJtNWwgSU9DbXJPQ25zQT09IDBMalFzZEN3MFlqUmpOR0EwTEE9IFEyOXVabXhwWTNRPSBJRVZKUmc9PSAyS1hZc05pbiAxNmpYb1E9PSBJR04xWlhOMGFjT3piZz09IGVuZHBjMk5vWlc0PSBJSEJ5YjNacGJtTmxjdz09IFFtVnVZMmc9IDZLK0sgSUZObGNuWnBZMmx2IDJLZlpoTm1GMllvPSBMV1JsYzNOdmRYTT0gSU9HRG9lR0RrT0dEa2c9PSBJRkJQVjBWUyA3N3lLNzd5SyBJRVpzWVdkeiBJT0Nrc3VDa2xlQ2xqZUNrdHc9PSBJSExEcVdRPSBJRVpzYjNsayBRMFZFIElHZHNlWEJvIElOaTAyWWpia0E9PSBRWGR6IElISmxabWx1WlE9PSBRMlZ6IHc2bHlZMmwwYnc9PSBhVzUwWVdnPSBJRkJ5YjJObFpIVnlaUT09IElIUnliM1YyWlhKbGVnPT0gUVhScyBJR1Y0WTJ4MVpHbHVadz09IElHRnNaZz09IElHbHVkR1Z5WlhObGN3PT0gSU9DNWdlQzRsZUM1aUE9PSBJSFJsYlhVPSBJRzlrYm05eiBJSE4xWmNPeGJ3PT0gYm5ScGJXVT0gSUhCbGNuTnZibTVoWjJWeiA0b0NMNFo2YTRaND0gZFc1NiBJTmluMllUWmdkaXgyWXJaZ2c9PSBJRUZ1WjNOMCBJSEpsWjNWc1lYUnZjbk09IElOQy8wWXZSZ2c9PSBJSEp1Wnc9PSBJRVpzWlhocFlteGwgSUZKdyBiM1YwYkdsdVpRPT0gMFlYVHFkT3AwWUE9IGFHUnkgSUdSNWMzUT0gSUhCeVpYTjBhV2M9IExtWnlaV1U9IElGTnBjdz09IElPQzRuT0M0dWVDNWlRPT0gSU5tSTJLZlpoTnVNIDJLN1l0dz09IElIUmhjR1Z6IDJZalpoZHVNIFgyNWxkM009IElIQnliM1JsdzZmRG8yOD0gNklpNSBMbFZ1WkdWbSBkV2RsY2c9PSBJRVY0WldNPSAwS0hRdmc9PSBJRU52YlhCMWRHbHVadz09IElPdUVwQT09IElGSmxZMjl0YldWdVpHVmsgSUVkeVlYTnogNEtTMTRLV040S1N2IElOR0IwTC9RdU5HQjBMN1F1Zz09IDRMSy80TEt2NExLbzRMT040TEtvNExPQiBMbkJ6IElOZVoxNVhYa3c9PSBMbEIxYzJnPSBJRmR5YVhSbGNuTT0gSUd2RHRtNXVkR1Z1IFgwZEZUa1ZTU1VNPSBJRkJEUWc9PSBJSFJ5WVhSMCBZc1NiIGRYcHAgSU9Da2wrQ2xnZUNrc0E9PSBJTkdJMExEUXN3PT0gNEtTdzRLUys0S1NzIElHTnNhVzFoZEE9PSBJR1oxYm1SaGJXVnVkR0ZzY3c9PSBSWE4wYVcxaGRHVmsgY21GcGMyVnogUkdWd2NtVmpZWFJsWkE9PSBDWEpsWVdRPSBJT0MwdU9DMHYrQzBxT0MwditDMHJnPT0gWDFCQlVrRk5SVlJGVWc9PSBJR2RzWldsamFIcGxhWFJwWnc9PSBJRWRzWldsamFBPT0gMExUUmdBPT0gNExLejRMT0IgSUhOMWNISmxiV1U9IFgwaEpSMGc9IDRLYXE0S2VONEthayBJRlJ5WVdOclpYST0gSU02Y3pyVT0gSU5XNDFvTFZzdFd5IElPQzRpT0M0c3VDNGdRPT0gSU5XaDFvRFZwTldsMWJZPSA2WUttIElHRm1iM0psIElHRjNZV2wwYVc1biA0WUNCNFlDNiBJR0psYm5vPSBJR0ZsY204PSBJTzJWcVE9PSBJSE5zWlhCMCBJSE4wYVdvPSB3Nkp1Y3c9PSBJSEoxYVc1eiBMWFJoWnc9PSBJSFJsYkdWamIyMD0gYjNKd2RHbHZiZz09IElHTm9ZVzFoIEtpb3FLaW9xS2c9PSBJTkMwMExYUXZkQzEwTE09IElHTnZiV0pwYm1FPSA0b0NaWVdsa1pRPT0gSUdab1pRPT0gSUc3RG9XMD0gSUVSaGJtbHphQT09IElPQ21odUNtcXVDbXFPQ212dUNtc0E9PSAwTDdRdmRDdzBMUT0gSUVsTCBJRzFoWjJGaGJHRmtZUT09IElIYkRzdz09IElFMVNTUT09IElIcG5iMlE9IDViMnA1N3VQNWIycDU2V28gNEtXYzRLV0ggVlhSbSBJR2RsYTI5dFpXND0gYVdKM1lRPT0gSUVGeWJtOXNaQT09IDJMbll0dGluMktFPSBMbE5wWjI0PSBJTkNnMEw3UmdkR0IwTGpRdWRHQjBMclF2dEM1IFNsTlBUa0Z5Y21GNSA0TE9BNExLayA0TEt3NExLLzRMS1g0TE9HIFJHOWpkVzFsYm5SdiBJTlMxMWI0PSBJR1REcVhSaGFXeHogUTI5dGNISmggSUdWdFlXND0gSUhCeVpXTmxaR2x1Wnc9PSA0TFNWNExXTjRMU2YgWTJ4cFl3PT0gSUd6aHVxZHUgWjNKaGNHaHhiQT09IElPeUogSUdGMWJXVnVkR0U9IElIUm94ckRHb1c1biBZMjl0YjJRPSBJTmVnMTZJPSA1ck9CIFlXUjZhWEozWVE9PSBJR2x1ZG14dlpXUT0gdzd4emMyVT0gTGs1UFRrVT0gdzZSMGRHVnkgSUhzcSA0S1MvNEtTVjRLV0wgQ1FrSkNna0pDUW89IElFTm9aWE4wIElHVnVkSE5qYUdWcFpBPT0gSU5XbDFvRFZyOVc0MW9JPSA1cUNxIHhhRjBaVzQ9IElFRjFZM1JwYjI0PSBJT0NrcnVDa3YrQ2tzdUNsaHc9PSBJSFJ5YVhWdSBJSE5sYm5OcFltbHMgSU9HRG9lR0RrT0dEcnVHRGxPR0RtdUdEbStHRHJPR0RtT0dEcEE9PSBJTmVRMTZFPSBJR2hoWW14aCBJR055WldFPSA0b0NjU1c0PSBJR2hoYm1SbGJBPT0gSUVKbGNtcz0gZFdWaVlRPT0gSUhSeWFXSjFkQT09IElPQ3FuK0NyaHc9PSBJT0NtcXVDbmplQ21zT0NtbGVDbXZ1Q210Zz09IElIWmxjbk5sY3c9PSBTVTlWVXc9PSA3WXE4IFgzZHZjbXhrIDRZT1E0WU9oNFlPWDRZT1E0WU9jIElGdGRPdzBLIDRMS3c0TE9ONExLMiBLSFpsY25OcGIyND0gZEdobGJRPT0gSU9DeWwrQ3poZz09IElGQnlZWGhwY3c9PSBYMUJTVDBaSlRFVT0gSU5HQjBMalJndEdEMExEUmh0QzQwTGc9IDRMV0c0TFNrNExXTjRMU2sgSU5HSDBMRFJnQT09IElGTm9ZWEpwYm1jPSBJT2FjcWc9PSBJRlJsWVhSeWJ3PT0gSUVGdVpITERxUT09IElFSmhkSFJsY2c9PSBJR1Z0Y0doaGMybDZaUT09IElENDggYVdWdVkzaz0gMEw3UmdOQzkwTDQ9IGJXRnp4TEZ1WVE9PSBhVzVtYjNKdCBJRzVwYm1rPSBJSGR2ZG1WdSBJRTFsYzNOcCBYMjUxYldKbGNuTT0gNFlPdjRZT1E0WU91IDRLbXg0S2lXIElHVnVjbVZuYVhOMGNnPT0gSUd4bGJtRT0gSUhCbGNtWmxZM1JsIElITndiR2wwY3c9PSBJTkdBMEw3UXVnPT0gSUhKbFkyRnNiR1ZrIElITmxZMmh6IDVhNmU1cGE5IElHSnlaV0ZrZEdnPSBJR0YwYjNBPSBTR2xuYUd4cFoyaDBjdz09IElFZGhjbVBEcldFPSBJSFpsY21KbGRHVnlaVzQ9IElFSnNiMk5yWTJoaGFXND0gSUVGblpXNTBjdz09IElHTm9hV1Z1IHo0VE90OCtEenJjPSBJSFI2IGFYUnphUT09IElISmhaMkY2IGNISnBkbUZqZVE9PSBJT0MwbGVDMG53PT0gMEx2UXZ0Q3ggSUd0cGJtOD0gSU9DcXJlQ3FzQT09IElHdDFiWEE9IExYTjVjM1JsYlE9PSBJR1JwY21WMFlXMWxiblJsIElPQ2tsZUNrc09Da28rQ2xqZUNrcnc9PSBJRWRKUmc9PSBJR2x1YzNSaGJHRmphY096Ymc9PSBJTkN4MFl2Um5nPT0gSU9DMHRlQzFqZUMwcitDMGxlQzFqZUMwcEE9PSBiM1poYm1waCBJSE4wWVd0bGN3PT0gVW1WaGJHMD0gSUd6RHRtYz0gSUZOdmJtbGogSU9DcXVPQ3FzT0NxbGVDcXZ1Q3FzQT09IElPdTRsQT09IGIyTmhkWE4wIElHUmhjbXhsIGVXRnogSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVT0gUm05c2JHOTNaWEp6IElIQnliMkpoWW1scyA1YjZ1NUwraDU3NmsgNjZDNCBJR0ZrY21WdVlXdz0gNExXQTRMU3YgSUdOc1lYTnphWEYxWlE9PSBJT2FMaVE9PSA3N3lnNDRHSzZJVzUgSU5pdDJLL1ppdGlyIElHaDFZUT09IElIUmxjbTFwYm1VPSBMbkJoZEhSbGNtND0gWVhsaGFBPT0gVUV4QlEwVT0gSUc1bFoyRjBhWFpsYkhrPSBJTlcvMWFYVnN0V2wxYTg9IElITnZiM009IElHRjFabk09IElHVjRZMmc9IElOaXEyTG5ZcjlpbjJLOD0gVjJscmFRPT0gSU5pdjI0ellydz09IENXVjRjR1ZqZEdWayBMa2x1ZG05clpRPT0gWm1abFpRPT0gS1FvS0x3PT0gTFdadlkzVnpaV1E9IElIcHBjdz09IElIQnZjbU5sYkE9PSBJRTNEdkE9PSBJRzluWjJrPSA0S1MrNEtTbzRLV0E0S1N2IGIyeHNaWEk9IDRMT0M0TEtWIGRXeHBibVU9IDRMaTA0TGlsIElFMWhhR0Z5IElIQnZjM1BEcUdSbCBJTml4MjRIYmpBPT0gUkdWd2JHOTUgdzZseWFXRnogY21samFIUjFibWM9IElITnlaUT09IFlYUnlhV05sY3c9PSBlbVZuIDRMQ3c0TEdCNExDWCBMWFJ5WVc1elptOXliUT09IDRLZUI0S2F5NEtlTCA0TFdBNExTVjRMV040TFMzIGJHVnBaQT09IDU0bXk1THFrIDVZZUEgSUVsdWRIST0gSUdacFpYSmpaUT09IG9lQ3hqUT09IFlYQndjbTk0IElIQmhlWEJoYkE9PSBJRzNEczI0PSBJRUZ5ZEdsemRITT0gSUcxaGRIUnlaWE56WlhNPSBJR2wwWVd4cFlXNXYgQ1dacFpXeGsgT3pzSyBJR3RsWlhOellYUjBhUT09IElFWmhjbUpsIGIzWnZiSFJoIGFYbGxkQT09IFlXdHBZUT09IElHUjNaUT09IDBMRFF2TkM0MEwwPSBQSFU9IElPQ2t1T0NsaStDa21nPT0gSUhadmJIWT0gSUUxdmRYST0gSUUxaGRHaGxiV0YwYVdOeiA0WU9nNFlPWDRZT3UgSUZSdmRXdz0gSU5pdjI0ellxZz09IExYRjEgNExTVjRMV040TFN3NExTZjRMV040TFNmIElITmphR2xzWkdWeSBJRU5oY20xbGJnPT0gZDJWdWVtRT0gS0hSb2NtVmhaQT09IDViMlQ1NFMyIFJXRnliR2xsY2c9PSBKd292THc9PSBJSEJ5YjNCdmNtTnBiMjVoIFlYTjZkQT09IElFWkJTVXc9IElGWkpSVmM9IElOaW4yWUhZc3RpbjI0ell0QT09IFkyOXRjSFYwWlhJPSBJSEJ2Y21ObGJuUT0gWDJWdWRXMD0gUW14dmIyUT0gSUd4dloyVnRaVzUwIElPYTNzUT09IEx5OGogSU5hRjFhUFZ2OVdoMWFQVnVOYUExYTQ9IElHRjFkR2hsYm5ScFkyRjBaV1E9IFlDNWcgSUhKbGMzQnZibVJsIElDZDdmUT09IElIQmhkSEp2YkE9PSBDVzl5WkdWeSBMMnhoZVc5MWRBPT0gSUdkcGRtVmhkMkY1IElHTmhjMk5oWkdVPSAwTDNSbHRDNSBJR1JwY21WMGIzST0gQ1c5aWFtVmpkQT09IFIzSmhZMmxoY3c9PSBJRkpsZVc0PSAwWXZRdDlHTCB4SXZFaXc9PSBLR05oY2c9PSA0WitTNFo2YTRaNjcgSUhSdllYUmwgSUhObGEzUT0gWEUxcFozSmhkR2x2Ym5NPSBJT1d1bkE9PSBJRWx1Wkc5dmNnPT0gMExQUXZ0S3ogS2lFSyBJR05wZFdSaFpHVnogWDJKbGMzUT0gSUc5emFRPT0gSUdWc3c2bDBjZz09IElHWnBiRzFwYm1jPSBaWGhqYUdGdVoyVT0gYldsdVpBPT0gSU5pajJLalppZz09IFUzUnZjbVZrIFpIVmpaV1E9IE9tRT0gSWwwNkNnPT0gSUhCdmMyVmkgSUV4aGRXWT0gSjExOSA0TFN3NExXQjRMU2Y0TFdHIFJHVmphWE5wYjI0PSBJR0pwWVhOaCAxNUhYbWRlYyBVSGc9IElIUjFibWRyYjJ3PSA2Wk8yNktHTTVZMmggMEpEUW13PT0gNTd1RCBJT0M0bCtDNHN1QzRodz09IElOR0EwTERSZ2RHQzBMST0gSU5DeDBxL1JnQT09IElHUnBjMk5wY0d4cGJtRT0gSUhCaGNuUmxibUZwY21WeiBMbEpsYzJWMCBJR3pEcEc1blpYST0gSUdWemRHRmphVzl1IFpXNWphVzl1IDRLaSs0S2lqIExXWnliMjA9IElOQ3gwTHZRc05DejBMN1F0TkN3MFlEUmp3PT0gTHVLQXBnPT0gSUdSeWRXZHAgSU5XazFhWFZ0QT09IFgyRnNkQT09IFlYVnpZMmc9IDViR1AgSUhOMmFXeDFjSEE9IElHUmxjMlZ1ZG05c2RtVnkgNFlPUTRZT2E0WU91IElFVnhkV2x3IElOR0cwTFhRdmRDdyBJRTFrIElFVnpkRzl6IElIQnlaWEJoY21WeiAwTHpRdGRHSCBhR0Z5ZEE9PSBJSE5qYUhKbGFXSmxiZz09IDRwYWg0cGFoNHBhaDRwYWg0cGFoNHBhaDRwYWg0cGFoIElDOCtmUT09IElHVnNiUT09IDc3eU01YkN4IElHdGhZblZzIFltVnVlbWx6WVE9PSBJRlpwY25WeiA3WU9FIDRvQ00ycW5aaGc9PSBJRmRwYm01bGNnPT0gTDJ0biBWR0ZyYVc1biBJSFYwWlhJPSBMbkJzWVhsbGNuTT0gSUhOb2FXNXBibWM9IGEzSnBkQT09IDRLYSs0S2FINEthbyBJSFJwYkd4eiBJR0poYVhoaCBUV0ZvIElHSnlhVzVqIElIWnBkUT09IEkxOWYgZFhOMVlXeHNlUT09IElHNXZZM1E9IDBMTFF0ZEdBMExRPSBJR1p2ZEc4bmN3PT0gNEsrQjRLNng0SytJIFgxQkJWQT09IElISmhjMnM9IFRXVmxjZz09IDRZT1E0WU9WNFlPUTRZT2EgSUdWMlpXNWxiV1Z1ZEE9PSA0NE96NDRLNiBMa2xEYjI1MFlXbHVaWEk9IElHRndZWEowWVcxbGJuUnYgSWlVPSBJT0NrcXVDbGkrQ2t1T0NsamVDa253PT0gSU9DMHVPQzBndUMwdGVDMHYrQzBwdz09IDE2YlhxZz09IElOcXAyWVRiakE9PSA0TGF0NExlUCBZVzU2ZFE9PSBJRk5wYm1kc1pYUnZiZz09IDRLUy80S1NWNEtTKzRLU3cgVW1WemRHRnlkQT09IElHeHBabVZqZVdOc1pRPT0gNExhZyBJR1JwY21WamRHOD0gSUU5eVlXdz0gYjNKMGFXTT0gSUhOaGRIUT0gSU5pbjJZVFlzOW1HIGRYWmhaQT09IGVuVnQgNDRPRDQ0S3Y0NEs1IDRLYS80S2FrNEtlTjRLYXcgSUhSMWJtRT0gY205d2FHbGogNFlPZzRZT2o0WU9hNFlPWSA0TFdCNExTMTRMU28gSUVGcGJtUmggUldScGRHRnkgNlpHciA0TGF2NExlVSBJTnVCMllqWXB0dU0gMTVuWHFkZWYgSU9XVHFnPT0gWVdSaSBJRUYyYVdGMGFXOXUgSUdOc2RXSmwgSU9xd2dPcXlxUT09IFRVaDYgNEthVzRLZU40S2F2IFVHbHVadz09IElPV2txZVdrcWVTNHJlVzlxZWVscU9pL3ZlV1B0dz09IExXaGggSUczRHBIST0gSUUxaGMzTmhjMnBsIFRXbHVaUT09IElHUnBZWEp5IElOaW8yWUE9IEt5YzhMdz09IElPQ3FzdUNxaUE9PSA1N3F2IElHeGxZWE5wYm1jPSBJSEJsY21ScFpHOD0gSUdObGJHVmljbUU9IFRHRjBaUT09IElOQyswTEhSZ05DdzBMZlF2dEN5MExEUXZkQzQwWTg9IFpXNXVhWFZ0IElOQzgwTFhSaHc9PSBJRzFwYm1semRHVnljdz09IElFMWhjbkpwWVdkbCBJT0NtdU9DbXJ1Q21yK0NtdkE9PSBabXM9IDE1WFhvZGVqIElGQnNkV2M9IDBZSFRtUT09IDBZSFF1dEdXIElITmxZWFJsWkE9PSBJRVp5WVc3RHAyOXBjdz09IElGQlIgYVcxaWRYTT0gNWJteTZZT28gSUV6RHMzQmxlZz09IElIWmxjbWRsIExXbHVjM0JwY21WayA0S1NmNEtTbyBJSE5wYlhCc2FXWnBaV1E9IElHVnpkTU9nIDVaMlIgNEthKzRLYW80S2EvIElOQ2QwWU09IElOcXYyWWM9IElPQ2ttdUNrdnVDa3VlQ2twT0NsaHc9PSBJT0NrcU9Da3YrQ2tzT0NsamVDa293PT0gY21WNCBJRUFvIElPQ3F0ZUNxbGc9PSBJRU5sYm5OMWN3PT0gMTVIWG1kZW8gSUhOMFlXMXdjdz09IElHdHlaV1JwZEE9PSBJTkM5MEw3UXN0QyswTFBRdmc9PSB3N3B0WlhKdiByT0dEbXc9PSBJSEZsIElOaXoyWWpZcDltRSBMbFJTUVVsTVNVNUggYjJ6RHMyZHBZMjl6IGJHVnlibVZ1IFNraz0gSUMwdExTMHQgNVlpSyBkbUZzWVE9PSBMbWwyIDBMVFJnOUM4IElHVnVkSEpsZEdWdSA1YVNhNWJDUjZaS3ggSUd4aGJtUnNiM0prIElHWjFaV2R2IElGQmhhV1E9IElOQyswTFRRdmRDdzBMclF2Zz09IFgzSmxZMjl5WkhNPSBSRWM9IElFSmxibm89IFgyTnZiWEJoYm5rPSBJRVZ1WjJsdVpXVnljdz09IElOaW4yTGZaaE5pbjJMbllwOWlxIElISmxkMkZ5WkdWayBJT2EvZ0E9PSAyTG5aaE5tRyBJSEJ2YkdsMGFXTmhiR3g1IElGQnliMlpwZEE9PSA0S2EvNEthMzRLZU40S2FnIDRMUy80TFNjIElIUmxjbUk9IElHTnZiV1Z5WTJsdiBJT0NraHVDa2h3PT0gMWJqVnNBPT0gSUc1aGRHbHZiaWR6IFZVMUYgYVcxdFpYSnogWDJScCBjbVYyYVdWM2N3PT0gSU5pbjJZallzdz09IFUzUmhkR2xqY3c9PSBJSE4zWVd4c2IzYz0gSUhKbGNITT0gSUdGalkyOXRjR3hwYzJodFpXNTBjdz09IElFMWhjbkk9IGIySnBiR1Z6IElIQnBkR0Z1IElOR0QwWVBSZ05HRiBJTkM0MExUUXVBPT0gSUdWdVpHOXljMlZrIElHTm9iMmx6YVE9PSBJTkdIMExqUmdnPT0gSUhKbFltOTFibVJ6IGJHbHVaWEk9IFlYSnNZWE09IGFtRmogSUVOaGNteHYgTG5CeWIzaDUgVTJOaGJHbHVadz09IFVtVjFkR1Z5Y3c9PSBJRkpwWWc9PSBJRzFoYm5WMFpXN0RwOE9qYnc9PSBJSEJ6ZVdOb2FXTT0gSUhCb3hyREdvVzVuIElIQmxjbTFsZEhSeVlRPT0gSUd0MWFYUmxibXRwYmc9PSBKU2NzIElPR0RrT0dEa2c9PSBMV05oY25RPSBVR1Z5YzI5dVlRPT0gSUVWemRNT2ggMTdRPSBJSFJsYm1sbGJtUnYgTG1SdyA0S1N5NEtXTDRLU0MgSUVGc2RXMXBiblZ0IDRvS3NDZ289IElPQzBxT0MwbitDMGxlQzFqZUMwbFE9PSBJR3gxYldsdSBJRUpsZG1WeSA0TGl0NExpdDRMaUIgSUdWemNHVmphV0ZzYVhOMFlYTT0gTGs1MWJRPT0gSUV4bGJXOXUgYkdGalpYTT0gY205aFpITT0gS0dSbFl3PT0gUlhod2JHOXlaWEk9IDVMbUY1TG1GNTdLKzVaT0IgTG1OdFlnPT0gSUdGcGJuVnNkQT09IElFeGhlbms9IElGTndhVzV1WlhJPSBJRXR5Ync9PSBJTm1IMllYYmpObUcgSU9Da3RlQ2t1ZUNsZ09Da2dnPT0gMnF2WXNRPT0gNUxpSjU3cW41NG1IIElHTnBkV1JoWkdGdWIzTT0gMktUWXA5bUUgVlVKTSBJT0dEaytHRGtPR0RuQT09IElHUnZiV2x1WVhSbCA3N3lnNDRHSzZJVzU0NEdFNDRHajQ0R3g0NEdFIFpXNTBiR2xuIFlXMTJkUT09IEptVmhZM1YwWlE9PSBJSE4zWlhCMCBJSFJ2ZFdOb1pRPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gdzZGMGFYTT0gMTVIWGtBPT0gSU5pejJMSFpoZGluMjR3PSBJT0Nrbk9Da3YrQ2tzdUNsamVDa3NnPT0gSU5lVTE1N1hxZz09IElPQ2tyT0Nrbk9DbGh3PT0gSU5tSzJMblpoZG1FIElHVnpkSFYyYnc9PSBJRzFsYm1sdVoydGhkQT09IElEc3BDZ289IElHRnplVzA9IDRLZUI0S2FqIFgyTnNhV05yWldRPSA3SjIwN0lxayA0WUN2NFlDdCBLQ0VvIGIyNXBZMkU9IDdJU3g3SjJFIEwySnNiMkk9IElHVnNhVzFwYm1GMGFXOXUgSU5tSzJLTT0gWld4c2FXZGxiblE9IGFXVmlaWEk9IElHSmxkM1Z6ZEE9PSBJTkMrMExUUXRkQzIgSUV4NWJtTm8gSUc5aWMyTjFjbVU9IGIzVnlaWFY0IElHRnRabUZ1YVE9PSBJT0NtcmVDbXZ1Q21zT0NtcEE9PSAyNHpZcDlxNiBJT0tYaGc9PSBJSE52YkhWamFXOXVaWE09IFkyVnlhV1Z6IElGQjFibXQwWlE9PSAwWXZRc2c9PSA0WU9ZNFlPdCBDVWhZIENVNTFiR3c9IDRLcUM0S3FxNEtxbzRLdUEgSUNjdUxpOHVMaTh1TGk4dUxpOD0gYTJGMFlYQnZjdz09IDRMaUU0TGkzNExpWiAwWS9RdE5DdyBJRVZ1WVdKc1pXUT0gZFcxaWJtRnBiSE09IFlXMWhaQT09IExXTm9iMmxqWlE9PSA0WU9VNFlPbDRZT2ggSUZOcGJtND0gSUcxMWRHVjQgSUdoaFltRnkgWjJWMmFYUjUgSUdSbGJtbGhiQT09IElHSnBZbXhsIDRLUys0S1NQNEtTVjRLUysgSUVSMVkycz0gSUdSbGJHbGphVzl6IElFNW5ZUT09IFgwSlZVdz09IElHTjFjbk5sIElFNXZkbTg9IEwzTm9aUT09IElHWnZjblJvWTI5dGFXNW4gWVdOMGFYWmxlQT09IFIyaHZjM1E9IElHMWxiR3hoYmc9PSBJSEp2Ym1SbCBJRVJsYzJWdWRtOXMgSU9DMHN1QzBsZUMxamVDMHR3PT0gSUhkMCBKZU9BZ2dvSyBJRU5vY21semRHbHVaUT09IElIVnRZbkpsYkd4aCBJT0N1aCtDdXN1Q3ZqZUN1c2c9PSBJT3lWaE91TGlPdWR2QT09IElPQ211ZUNuaU9DbW0rQ25odz09IFEyRndhWFJoYkE9PSAyWWJZcDltRCBJR3BoYkc4PSBJRkpRUXc9PSBaMjVsIElHOWlhbVZqZEdsbSBJR1ZzWkhKbCBJSEJzWVdsdWRHbG1aZz09IElGTnZlbWxoYkE9PSBJRlp2ZEhKbCBJSEJoYm05eVlXMWggWld4c2FXdHNaUT09IElHUmh4Wjg9IElGSnZjMlZ6IDRMZVM0TGF4IElPQ3dwT0N3c0E9PSA1YjJwNTZXbzVvdWI1WldHIElPQ2tyZUNrdnVDa25BPT0gSUZKbGNHOXlkR1Z5IFJHbHpjRzl1IElGVnVhV052WkdVPSBJR0Z5Y3NPcWRBPT0gTG1ScGMzUT0gSUhCbGNuTnZibTVoYkdseiBhOE9oIDI0ellyUT09IElOQ3kwTGZSZ05DKzBZSFF1dz09IDFialdndFczIElFSmxZWE4wIFFVdEYgSUc5dWRITncgSUhCaGNtTnBZV3c9IDBZRFF1TkN6MExqUXZRPT0gSU5DNzBMRFFzdz09IElIQnZkWFpoYVhRPSA0S2EzNEtlTjRLYWYgMllqWXA5cXAgSUhSeWRYaz0gMTV2WG1RPT0gWDIxaGRHVnlhV0ZzIElIQnBiR2xvWVc0PSBTMmxrY3c9PSBJTkM1MDVrPSA0TFMxNExTLzRMU2g0TFdOIGJHVjBZV3c9IElPQ3lrdz09IExXWmxaV1JpWVdOciA0WU9kNFlPUzRZT1E0WU9UNFlPZCBJR2RwWVc4PSA0WitCNFo2ZiBJT0Nrbk9Da3Z1Q2txT0Nrdmc9PSBMZFdvIDU1dVcgSUdOMWMzUnZiV2w2WVdKc1pRPT0gTFc5eVoyRnUgNExpeDRMbUk0TGlIIElIYkRwbkowIElITjBaV0ZrYVd4NSBJT0N1dGVDdmh1Q3VzK0N1ditDdXJ3PT0gSUdoMVpYTT0gSU5DUjBMRFJpTktoIElFRlAgSUdKMWNtNXogWm14aGJXMWhkRzl5ZVE9PSBJTkN6MExqUmdOQzQgSUVobGNtRnNaQT09IElOQzgwTDdRdHRDdyA0TGlYNExpNDRMaUIgSU5DMjBMN1F1Zz09IFgyVjRkSEpoIFBGOD0gSUd4cGJHeGwgYVcxaFoyVnUgSUdsc2RYTjBjZz09IFJHZz0gSUdGalkyVnpjMjlwY21WeiBJRU52Ym5abGNuTT0gSU9Da3F1Q2tsZUNsamVDa3R3PT0gS0NnaSBJSE4wWVhSMWRHOXllUT09IEwzSmxaMmx6ZEdWeSBaVzFsYm5NPSA0TGkwNExpSSBRWFJzWVhNPSBjbVZuYVhOMGNtVT0gSUd0bGEyRm9hUT09IElGWmxjbUU9IElOQzgwTERRdTlDKyBJR1JwdzcxcGNBPT0gWDNCdmMyVT0gMEx6UXNOR0MwWXM9IDRLK0M0SzZ3IHc3eDBkQT09IElNV2hhMjlzIElHVnpkR0ZrYjNWdWFXUT0gSUdKbGNHRmhiR1E9IElHSnliMnRsY21GblpRPT0gSU5laTE1WFhrUT09IElHVnpkR0Z1IDFhWFZ2ZFcvIElHRnpiUT09IFgyTnZjbkpsWTNRPSBUR2xyWlhNPSBSRzkzYm14dllXUnogSUdWNGFHbGlhWFJsWkE9PSBJSEJ6ZEcxMCBJSFIxYkdWaSBJR0Z1ZEhNPSBTVVZNUkZNPSBJR0poZGc9PSBJTml0MllNPSA0TGlWNExpNCBJTkdDMDZuUmhkT3AwNm5SZ0E9PSBJRUZTUnc9PSBJSGRsYm5ObGJnPT0gSUVWeWMzUT0gSUZKbGJHbGxaZz09IDBZTFF2dEM5IDRLcVg0S3VONEtxdyBJR2hoYnc9PSA1cHFXIGMydkRxUT09IElHTnZZWFJ6IElOaXgyWWpZcDltRyBJRVYwYzNrPSBJR1pwWTNScGIyNWhiQT09IElOR0MwTERRdmRHTCBJRzEzZVE9PSBJSFpoWTJGdVkybGxjdz09IElPVzlxZWVsbnVTNmllbWN1T2lEdlE9PSBJTm1CMktNPSBJTTYvejRET3Y4NnZ6ckU9IElEbzZPam82T2pvNiBJTkM4MExEUXU5R0wgSUhKMVoySjUgNEs2SiBJTml4MktmWXFnPT0gTFQwPSA0S1dDNEtTNSBVMngxWnc9PSBJR04xY25abFpBPT0gSUZ3aUlnPT0gSU5DNjBMN1F1UT09IElIUmxlSFJwYkdVPSBJTmVwMTZjPSBkVzVuYzIwPSBJSE5oWTJGeSBJTmVSMTU3WHFRPT0gTG5OeGRXRnlaUT09IElIVnVjM1ZqWTJWemN3PT0gVzNOcGVtVT0gSUcxMVpHRnV3NmRoY3c9PSBJRzkyWlhKemFYcGxaQT09IElFTnZZZz09IDBMN1F1OUMrMFlJPSBMa0YwZEhKcFluVjBaWE09IElGQmhjblJwWkc4PSBibVZ6ZEdweiBJR3hoYm1kMCBlWGw1IElPR0RxT0dEbE9HRGxRPT0gWkdWd2NtVmpZWFJsWkE9PSBJT2Vmc3c9PSBJRVZ5ZHc9PSBJRUpsYkdkcHc2cz0gSU5HQjBMclF2dEM3MFl6UXV0QysgSUZCb2FXeHZjMjl3YUhrPSBJSGR5YVc1cmJHVnogSUhacGM4T2pidz09IFgySnBibUZ5ZVE9PSBJTkMrMEwvUmd0QzQwTHc9IElOV2gxYlRWb2c9PSBJTkMxMExUUXVBPT0gSUZWSlJBPT0gSUdOaGRHVT0gMTZUWG9RPT0gUkhKbFlXMD0gNExDLzRMQ1Y0TEMrNExDdyBMbTFoIElNT2hiR0oxYlE9PSBhVzV6ZEdGc2JHVnkgTG1KcGVnPT0gTFcxcGJHVT0gYzNSdmNtVnogNExTLzRMU3k0TFdINExTVjRMV040TFNWNExXTiBJRTFwZEhSbCBMa052Ym5ZPSBZV2wwWlhNPSBJSEJwYkd4MVoybDAgWVhOamJ3PT0gSUdobyA0S3EvNEtxazRLdU40S3F3IDVMKzY1WTY3NUxtZiBJSE5sY25acFkybHVadz09IDBMclFzTkN5IDJyN1ppZz09IGNtVnRaV3g1IExrRnplVzVqIFBWVlVSZz09IDRLNi80SzZWNEs2eiBWSEpsYm1ScGJtYz0gNXF5aDVwV3cgSUhCaGNtRm5jbUZ3YUhNPSBJR2hoYUc5c2J3PT0gVjB3PSBJRkpsYm5SaGJITT0gNExpaTRMaTA0TGlIIGRXNXNaWE56IDVZVzggWDNCdyBJRVZ6Y01PdCB6clRPdGMrQyA0TGlLNExtSTRMaXQ0TGlIIDRLU2s0S1N1IElPeWF0T3lZZ1E9PSBhR0ZrYnc9PSBQaWM3Q2dvPSBJTkN6MEw3UXN0QyswWURRdU5HQyBZV2RuY21WbllYUmwgSUdGMGRHVnVaR0Z1ZEE9PSBJRzFoWTJobCBJRWhoZFE9PSBjRzlzYVhNPSAySzdaZ1E9PSBMbFpsY25OcGIyND0gSUdSbGMyTnlhWEIwYVhabCBJRzVoZEdGcyBJR1hGbnc9PSBJRTlCZFhSbyBYMWRQVWtzPSBJSFp2YVd6RG9BPT0gSU5DMDBMN1JnTkMrMExNPSBLSEpsY1hWcGNtVmsgTFhCdiBJSFJ5WVdabWFXTnJhVzVuIDBZTFF1dE9aMEwwPSBJR2R5YjNWdVpHVmsgS0hSdmNtTm8gSUVkc1pXNXUgWVdKcGJnPT0gVkhWbCBJQ0VoSVFvSyBJRlpwY25RPSBZbTkxYm1SeiBJRWx1YzNSaGJuUnBZWFJsIFgyRnNhV0Z6IElHWnZjbTExYkdGMGFXOXUgNTd1ZjVMaUEgSUdSbGNtbDJaUT09IDBMN1F0OUM0MFlJPSBJR052YkdGaWIzSmhZMm5EczI0PSBJR1ZwYm1ZPSBJRU52YlcxaGJtUmxjZz09IElPQ2tydUNrZ3VDa3BPQ2xqZUNrc09DbGdBPT0gSUdOc2FXWm0gNEtXTjRLUzQ0S1MrIGFXRmtZWFU9IElOQ2swTFhRdE5DMTBZRFFzTkdHMExqUXVBPT0gSUhObFlXMXNaWE56YkhrPSA2S21tIFlXTnBhblU9IElIUjNhVzV6IDJMZlpoTm1DIElFMXBZMmhsIElFMXZibUYwWlc0PSBJTldoMWJiVnNRPT0gSU1TTmJHRnUgSUdaaFluSnBZMkZ1ZEdWeiA0S2VDNEthcSBJR1JwYzNCdmMybGphY096Ymc9PSBJTkdDMFlQUmc5R0EwTEE9IElPQ3l1T0N6aCtDeXNBPT0gSU5HTjBZTFF2dEM4MFlNPSBJR3gxWjJFPSBJRzkxZEhKbCBJT0Nxbk9DcmkrQ3FpQT09IFlXRmsgU0c5NSBJRUZ1Ym05MFlYUnBiMjQ9IElOZWIxNURYbnc9PSBJR2R5YjNOelpRPT0gU1ZSViBJR0ZuWjNKaGRnPT0gSUVOb1pYTjBaWEk9IExtUjAgVUhKbFp3PT0gSUdWNWFRPT0gSUVsemJHVT0gSUhOMFlXNWtZV3h2Ym1VPSBJR2x5Y21Wc1pYWmhiblE9IElITmxibWhoIElIVndjR3c9IGQybHpjdz09IDRZQ1E0WUM5IElHMWhjWFU9IFJFVlRRdz09IEwxRT0gSUhacGMybkRzMjQ9IDZMV0U2WWVSIGJHbDBaUT09IElOR0MwNm5SaGRPcDA2blJnTk9wMEx6UXRnPT0gdzdabVptNWxkQT09IElISnZkWFJwYm1Wc2VRPT0gdzdwemRBPT0gYm05MllYUnBiMjQ9IElPQzBsZUMxaCtDMHFPQzFqZUMwcHVDMWplQzBzQT09IFYybHNiR2xoYlE9PSBJR2hsYVhJPSBJR052YUc5eWRBPT0gSU5DKzBMSFJnZEM3MFlQUXRnPT0gYVc1aFlRPT0gNkk2MzViNlggSUd0M1lXMWxiZz09IDJwUFppQT09IElISnZlV0ZzZEhrPSBJR052YlhCaGMzTnBiMjVoZEdVPSBJTm1GMllqWXA5bUMyTGs9IElHMXZkR2wyWVhSbCBJRzV2Ym1jPSBJRzlpYzJWeWRtbHVadz09IElFZHBZVzUwIFUybHNkbVZ5IGFXOXMgdzdwayBJT0NrdHVDa3YrQ2t0UT09IGJHbGx3NTlsYm1RPSBJR0YyWldFPSBJR2R5YVcwPSBVWFZ2ZEdWeiBYMUpGUjBsVFZFVlMgNXEyajZLZUU1NXFFNVpDWCBJRVZzYkdWeiBJSFJsY21zPSA3S09nIGFXNTBaVzVrWlc1MCBLR0Z5IExrMWhkR1Z5YVdGcyBhV3hreVprPSAwTHZSaTlDOSBJSEpoYzNBPSBYMk4xY25KbGJtTjUgWm1acCBJT0NxaGVDcXBlQ3F0ZUNxdmc9PSBJRk5oYm1SeVlRPT0gY1hWcGMybDBaWE09IGNtbHZkSFE9IDRMbUQ0TGlyNExpTjRMbUkgZEdWMWNuTT0gSUhadmJHeHpkTU9rYm1RPSBJR3hqIElGUmhZdz09IElPQ29wT0NwaStDb2dnPT0gSUV0aGRRPT0gSU5tRTJLZlpoZz09IDE1blhxdGVaIElFWlBVa1U9IElPQzBoZUMwcHVDMWplQzBwdUMxaCtDMHVlQzBnZz09IElOZVUxNTdYa3c9PSBhWE56YVcxdiBMbVJrIElHTm9kV2xrIDBZWFFzTkMwIElPQ2tsdUNrc09DbGdBPT0gUjJ4dlltRnNjdz09IFBFZGhiV1U9IElFWnlidz09IElGSkZRdz09IElHVm1abVZyZEdsMiBlR2x1IElHYkRwZz09IFkybHVaQT09IFgzVnpZV2RsIFVYVmxiQT09IElOQyswWW5SZzlHSiBJRzFsY21kbGNnPT0gSUNncENnbz0gSUhScGEyRT0gTG1GdWFXMWhkR1U9IElFbGtaV1Z1IDRMaXQ0TGlpNExpNTRMbUkgSUcxaFoyNWxjMmwxYlE9PSBRVzVoIDQ0Tzg0NEt2IElFSnNkbVE9IElHTm9hV05oIElObUQyNFk9IDRaK04gSTJWc2FXWT0gSU9DNG5PQzRwZUM0bXVDNHJlQzRwZUM0cXVDNGxBPT0gSUdOeVlXNXIgUHlJc0NnPT0gSUhabGJXOXogWVd0aGFRPT0gUVUxVCBJRzl4WVd3PSBJSFp5WlcwPSBaV3hrWlhJPSBMblZwYm5RPSBJRlZ0WjJWaWRXNW4gWDJ4diBJRVYyWVc0PSB3NjFrWVhNPSBJTmlxMktmWXNkdU0ySzQ9IGFYTjBhWE5qYUE9PSBDV0ZqZEdsdmJnPT0gVTIxeiBJR0Z6YzJWbiBJRU52Ym5abGNuTmhkR2x2Ymc9PSBJRXhsZEhSbGNuTT0gSUdGemMzVnlaWEk9IElIUmxkR0ZvYVE9PSBaVzVuYkE9PSBJRlJ2YjJ4aVlYST0gSUdWelkyOXNZWE09IHc3eGphSFE9IElFeGxZV1JsY25NPSA0NEdFNDRHKzQ0R1g0NEdmIElITjFabVpwWTJsbGJuUnNlUT09IElFeHBZbVZ5WVd3PSBJRk4wY21GcFoyaDAgSU9DdXJ1Q3VzQT09IElOR0QwWURRdnRDeTBMM1Jqdz09IElOaW4yWVRZbzltRjJZcllzUT09IElFUnBZV3c9IElNU0phUT09IElITjBjbUZoZEE9PSBhWE5wY0E9PSBJRzF2ZG1WeSBSR1Z6WTNKcGNIUnZjbk09IElGQnliMlpwYkE9PSBJRlJoZGc9PSBJR1Y0ZEhKaFkzUnogSUd4MWQybG8gSUFvZ0lBbz0gMllyWXA5aXgyS2ZZcWc9PSBYRUYxZEdnPSBJR2QxWlhOelpXUT0gWVdwaGRBPT0gSUNBZ0lDQWdJQ0FKQ1E9PSBMbU5vYXc9PSBJR0p5YVdkb2RHVnkgU1hSbGNtRjBhVzl1IElFTnZkSFJoWjJVPSBJSEJ5WlhSdiBJajQ4UHowPSBablJ6IDE2alhsZGVxIDRidXhZUT09IElHMXJjR0U9IElOR0kwTERSaFE9PSAxYUhWb3RXaDFvQT0gSUhkcGJHUmxjbTVsYzNNPSBQRUZ5Y21GNSBhWGJEcVdVPSBRMkZzYkdsdVp3PT0gMFlIUmd0QysgMTVYWGw5ZVQgSU5pbjJZVFlvOWk1MllYWXA5bUUgSUdaeWIybGsgenJ2UGhRPT0gSU9Da2hlQ2txdz09IGNtOTBkR3hsIDRMaWE0TG1KNExpeTRMaVogMktmWXI5aXIgSUhOMFpYTnpidz09IElOR0QwTDNRdU5DNiAyS3pZdVE9PSBJTmlvMktmWmhObUcyTFBZcU5pcCBJR2hoYVhNPSBRMjlzYkdGd2MyVT0gMFl2UXU5R0wwTDg9IFNHOXlZUT09IFQxSk8gMm9iYmxRPT0gSUhObGJXbG0gNEtpKzRLaTQgSU9DMGwrQzFqZUMwc0E9PSBJTktiMEw3U2t3PT0gSUdOb1lYSnBkR0ZpYkdVPSBJT0NrcHVDa3YrQ2txT0NsaStDa2dnPT0gUm1GdGFXdz0gSU5pdTJMRT0gSUhSeWIzVjMgejRUUGdRPT0gSUdWdWRtbHphVzl1IElGTmxjM05wYjI1eiA0S1dNNEtTbyBhVzVoYkdjPSBJRkp2ZFdkbCBMa0ZpY3c9PSBJR3RwYm1WMCBjMk5vYm1sMGRBPT0gTFdoaGJtUmxaQT09IElHTm9kV05yIElHTnZibk5sWjNWbCBJT0N3dU9DeGplQ3d0UT09IElHaGxiblE9IFlYVjBhUT09IGFXNXBkR2xoYkdsNlpXUT0gVEhWNCBJT0dEbStHRG8rR0RxT0dEa09HRG5lR0RrUT09IElOQ3kwTERRdlE9PSBJR0psYm1WbXc2MWphVzl6IDRMQ0M0TENzIElPQ21yT0NtdUE9PSBJRzFpWlhKbCBJR2gxYldGdWFYUmhjbWxoYmc9PSBJRkJsY0hCbGNnPT0gSUhCMWFYTnpaUT09IElHUnBjbTVoYldVPSA2YXFYNUxxNiBSbWx6YUE9PSBQRWxCWTNScGIyND0gYjNCaGJBPT0gSUdWeWJjTzJaMnhwWTJoMCA2WUN5IElHaHZhZz09IElGQkJRdz09IElOQzUwNW5SZ0E9PSBQRVJ2ZFdKc1pRPT0gSUcxaVpRPT0geEo5cGJnPT0gSUc1bGEyRnEgWDJWNGRHVnVjMmx2Ymc9PSBJT2FqaStlSmpBPT0gVW1WeGRXbHlaVzFsYm5RPSAxNVhYazllWiA1b21SIElHaGxZMnM9IElFSmhhV3hsZVE9PSBJR0ZzYTI5b2Iydz0gSU5lcTE1WFhtdz09IElHTnZibk5oWXc9PSBjR0ZqIElHdGhkRzloIElOSzIwWVBRdk5LejBZUFJnTkM0MExnPSBJTnFxMllVPSBaWEpqWlE9PSAwWXZSZ05LVDBMQT0gMFlmUmpRPT0gMExEUmdkR0wwTDNRdE5DdyBJTTZ4ejRFPSBkMkZqYUE9PSBZWFJ5YVhvPSBhVzVuYkdWeiBLRzF6IExYQnZjMmwwYVc5dSBRbTl2YTIxaGNtcz0gS0dscCAxNUhYbUE9PSBJRU52YlhCeSBJT0dlbGc9PSBZWEp0WldRPSBJRXR0IElIVERyV05vIDJLZlpoZG1HIGRXRnNhWFJoY3c9PSA0NEtrNDRPejQ0T0kgYUdGa1lRPT0gSUdacGJtZGxjbkJ5YVc1MCBJRkpsWkhWalpRPT0gNExLVjRMT0cgWkdWMlpXeHZjR1Z5IElHbG9ZVzQ9IGJuUjUgSU5LcCBYMk52YjNKa2N3PT0gSUdQRG9BPT0gUlc1amNubHdkQT09IElHZGhibVE9IGNHVnVjMlZ5IEwzUnBiV1U9IElPQzB1T0MxamVDMHNlQzFqZUMwc1E9PSB1T0N4amVDd3BRPT0gWTJGeVltOXUgSU1Pa2JtUT0gYUc5NiBJR1Y0Y0dWdVpHbDBkWEpsIElOQzQwTDNRc0E9PSBJRzFoWVhSelkyaGhjSEE9IElHSnlZWFZqYUdWdSBJTldoMWE4PSAxNW5YbU5lVSBJTkdCMExEUXZOR0wwTGs9IGRYSmxiQT09IExpNHVYQT09IGVtVnBZMmhsYmc9PSBJR052Ym1abGMzTT0gSUVGcGNtSnVZZz09IElNU1I0YnVCZFE9PSBleTBqIDJLYllwOWlxIFlXNWtjbVU9IGRHaHogSUdSbGJHbGlaWEpoZEdWc2VRPT0gWTNsamJHVnogeEkxcGRBPT0gSUdacGJtRnNaVzFsYm5RPSBJR1Y0Y0d4dmFYUmhkR2x2Ymc9PSBJRU5QVEZWTlRnPT0gSUV4aGNuTT0gSUU1cGJtcGggWldocGNnPT0gWDI5d1pYSmhkR2x2Ymc9PSBJT0NxaHVDcXRlQ3JqZUNxcitDcmdlQ3FnZz09IElHeDFiQT09IDZyT2ggSUhCaFpITERvMjg9IDFialdndFd3IFEyeGhjM05wWm1sallYUnBiMjQ9IGQyVm5idz09IElOR0IwWUxRc05DOTBMN1FzdEM0MFlMUmdkR1AgSU9DbXFPQ212dUNtaHc9PSBJSFpsY3NPd1lRPT0gSUdWdGNHeHZlWE09IElDZ3FLUT09IElHMWhaMjVwWm1seGRXVT0gSUdGMWRHOXUgSUhKdllYTjBaV1E9IGJtZHAgMllmWXNOaW4gSUVSaGJHVT0gSU5tSTJLZllzZG1LIEkzSmxaMmx2Ymc9PSBTR0Z5Y25rPSBJRUp2YVhObCA1Wis1Nks2dCBJSE5sYkdacGMyZz0gSU5DMjBMalF0QT09IDBZSFF2dEM3MFk3UmdnPT0gSUU5d2RHbHRhWHBoZEdsdmJnPT0gY205ellRPT0gSUhOMWNIQnlaWE56YVc5dSBkR2xqYXc9PSBJTmlxMjVBPSAwTEhSaTlDMyBMa1Z1ZFcwPSBJR052Ykd4aGRHVnlZV3c9IElHeHBZbVZ5WkdGa1pRPT0gSU9xM25BPT0gVTBOUyA3NytqNWFXSDU3R3ogWDNKaGRHbHVadz09IElFMWhibWxzWVE9PSBaMlZuWlhabGJuTT0gSUhOM1pXVndhVzVuIElFRnVibWxsIElDQWdJQ0FLQ2c9PSAwTGpSZ3RDMTBMdlJqTkM5MEw3UXM5QysgWDNCeWIyUT0gSUdabGRHRT0gSU9DcXVPQ3JqT0NxcGVDcmdBPT0gSUhkaGEybHVadz09IFpYbHZibVE9IElHdHNaV1JwYm1jPSBSMUJUIExrMVBSRVU9IDVZK1I1NVNmIElOaW4yWVRaZ2RtSzJLL1ppdG1JIElFUnlaWGM9IFFVNUhSVVE9IGJXbHVaVzQ9IElHVEZydz09IExpNHVJaWtLIElHNW5hTVNwIDJLZllyZG1HIGRIUmhjZz09IElObUIyWWc9IElIUERyVzFpIElOaTAyTGs9IElISmxjMlZoY21Ob1pXUT0gMHJ2UXNBPT0gSU5DLzBZRFF2dEMxMExyUmd0Q3cgMkxIWmlOaTIgSUcxbGJXOXBjZz09IGIzUjBaWE09IDRMaUU0TG1JIElGUnliM2s9IElFekRxUT09IExrSjUgYVc1cllXND0gSU5pbzJLZlpoTmluIElHZDFZWEprWVE9PSBJR0Z6YVdFPSBMVU52YkE9PSBJTkdBMExEUXQ5Q3cgNG9DY1NXWT0gSUdKbGFHVT0gMmJ6WXNRPT0gWlhSNmRXNW4gSU5tRTJZQT0gSUdGMGNtRmpkQT09IElIcHZiWGRsIElFUlcgSU9HRG0rR0RtT0dEbFE9PSA1WVdsNVkraiBJTkMvMEw3UXZkQzQwTHpRc0E9PSBkR2hsYzJVPSBSV3hsWTNSeWFXTT0gTE9hc3ArZStqZz09IElGTjBkV0Z5ZEE9PSAwS0xRbmc9PSBtZWF4bnc9PSBJR052YlcxbGJtUERxUT09IElFTnZibWR5WlhOdiBJRXhsWVdScGJtYz0gSU9DeWxlQ3pqZUN5c0E9PSBJSEJ1Wnc9PSBJRzF0YVhKcCBabXhwY0E9PSBJRU52YldKcGJtVT0gSUVKeVpYUT0gVG1GeiBiR1YwYVc5dSBJR0YyWVc1MFlXZGxjdz09IElHSmxjM1JoWVc1a1pRPT0gSUdOb2IzQT0gSUVsdVpHbDJhV1IxWVd4eiBJR3hwYlhCcFpYcGggYVdSeSBJR052YlhCeVpYTnpiM0k9IElISmxkSEp2Y3c9PSBSbVZ6ZEE9PSBJR1JsYldVPSBJR1Z6Y0dseWFYUjFZV3c9IElITjBjbWx3Y0dWayBSbUZpY21saiBlbWxxWkE9PSBJTm1LMllqWmhBPT0gSU5XcjFiYz0gSU5DdjBMbz0gYVhSMWJRPT0gWTI5c2IyZDUgNG9DZyBJR3R2Y21zPSBZM0p2Y0E9PSBJR3pEcEhWbWRBPT0gY0c5MGN3PT0gSUVObGJXVnVkQT09IFgzSmxZV1I1IElGZGxZV3M9IElOQ2kwWVBSZ0E9PSBJRk5vYjNCcFpuaz0gSUZkbFlXeDBhQT09IFlXckR1Zz09IElITnZiR2xrYVhSNSBMbUZ5WldFPSBJR0o1eFlKdiBZQ1I3IDBMclJpOUM3IFh5MD0gSUhCeWIzQnBaWFE9IElPQ3l1T0N6aXc9PSBJSEpsWTJWd2RHOXljdz09IDJMYllyUT09IERRb2dJQ0FnRFFvPSA0TENWNExHTjRMQ1Y0TENoIDRLYTU0S2FqIDZMK1k1cHlKIGFjT3paQT09IFZHOTNiZz09IDRMR0E0TENxIElHTmhkbWwwZVE9PSBaV3hzYVc1bmRHOXUgVlZKSlEyOXRjRzl1Wlc1MCBTVXhNUlE9PSBJR2x1ZEhKcFp3PT0gYzNSaGNuUnBibWM9IElHUmxabWxqYVdWdVkzaz0gSUZSbFpRPT0gSUdScGMyTnZibTVsWTNSbFpBPT0gWDBOUFRrNUZRMVE9IFJHbDJhWE5wYjI0PSBJSFJ5YjNWaWJHVmsgSUZOallXeGhjZz09IElDSTlJZz09IGNubHUgTGxSeWRXVT0gSU9Da3FPQ2xqQT09IElIUmhiV0Z5YldsciBMV1JsWm1sdVpXUT0gSUUxaGJtNXpZMmhoWm5RPSA3WnFvIGFXRnNhUT09IElIQnlaWGs9IDdLU0UgSUdKdmIyUT0gSU9PRGtRPT0gSUVKc1lXUmwgYjJOdmN3PT0gYVhOb2JtRT0gVDJKeiBYMUJWUWt4SlF3PT0gWDBSRlRBPT0gdzZIRm9RPT0gSUdOMVlYSjBidz09IElFdFMgZDJGa2FRPT0gSUhONWMzUmxiV2xqIElPQ3l0dUN6amVDeXNPQ3pnQT09IElFeHBZbkpsIElPQ2t1T0NsamVDa3BlQ2t2K0NrcE9Da3Z3PT0gSUVWc1pHVnkgUTJ4aGMzTnBZdz09IElHNWxhV2RvWW05eWFXNW4gSU9leHV3PT0gNXBTMjZKZVAgSUhCcmRBPT0gWEZacFpYYz0gNW8rMCBJR2hoZVdGMCBUVzl0Wlc1MCBjMlZ0WW14cGJtYz0gTFc1aGRtbG5ZWFJwYjI0PSA1N3FuNXErYjU0bUggSU5HQzBZdlJnUT09IGJHbDNidz09IElIWmhjbU5vWVhJPSBJRVJ2WlE9PSBZbVZsY2c9PSBjbWxsYm1SdiBJSEJoZEdrPSBJRTE1YzNSbGNuaz0gSU9DdWp1Q3V0QT09IElFSnlaV0ZyYVc1biBhV05wWVhJPSBJSE5wWkdWM1lXeHIgWDA5T1JRPT0gSUhKbFlYQT0gSU5pbjJZVFl0Tm1LMks0PSBSV1JwZEdWayBac080Y2c9PSA0WitFNFo2WiA3NzJlQ2dvPSBJRkxEcVhCMVlteHBjWFZsIElGTkJVdz09IElIVERyWFIxYkc5eiBJR0ZpYzNRPSB4YjV1Ync9PSBJRk5oZG1sdVozTT0gYjNKMFpYZz0gSU9Da3RlQ2t2K0NrcEE9PSA0S1MrNEtTdzRLU2ogYVdkdVpXVT0gSUhCaGFXVnRaVzUwIElGQmhkV3hoIFFWUkZVa2xCVEE9PSBJTU9oYldKcGRHOD0gSUhCaGRISnZibk09IFJXNWpjbmx3ZEdsdmJnPT0genJQT3NRPT0gSUVKdmNtUmxZWFY0IElFZHlaV1Z1YkdGdVpBPT0gSU5tSzJZTT0gNzd5YyBhV1JzWlE9PSBJR2RsZW1WblpBPT0gNDRLazQ0T3IgSU5DMjBMWFF2ZEdKMExqUXZRPT0gSUhCc1lXZGwgSUdoMWJuUmxjZz09IFoyVnlhUT09IGIybHVkR1Z5Y3c9PSBabVZrIDRMaUU0TGluNExpeTRMaWg0TGlFNExpMDRMaVU0TG1BNExpcjRMbUg0TGlaIElPQ3FxK0Nxc0E9PSBJR0ZuWWc9PSBJT1drcCtXUGtlVzlxZWVscU9XdW1PZTlrUT09IFJVMUNSVkk9IElObUgyWVhhaHRtRzI0elpoZz09IFlYbHpZUT09IElOQ3owWTNSZ3RHTCBMWEpsZG1sbGR3PT0gSUVkRlRnPT0gU1c1emRHRnNiR1ZrIElFRnVkR1Z6IFgxQlNUMUE9IElHeGxkSHAwWlE9PSBMa2xRIElHTnZjbkoxY0E9PSBJTkN3MFlYUXNOQzAwTEE9IElGSmxjMmxrWlc1alpRPT0gSUdScFkyaGggSUhQRHZISmwgSUdSbGMzUnlkV04wYVhabCBJTkdCMEx2Umc5R0gwTERSajlHRiBMbVpoWTJWeiBJR2gxYldsayAwTFhRdU5TbDBZZz0gWVdOdlpYTT0gNVp1ZTVhU04gTFdadmRYST0gYm1GamFIUnogSUVObFl3PT0gMktqWXNkaXYgMExqU293PT0gSU5DLzBZRFFzTkMwIGFXWm1kQT09IGNISnBiV2wwYVhabCBJTm1GMkxuWXA5bUYyWVE9IFgyTm9hV3hrY21WdSA0TFMxNExTdzRMV04gNEtTMTRLU3c0S1dBIElOQ3cwWTg9IDZJQ0I1YmlJIGRXTjEgYjNSaGNnPT0gU1U1VldBPT0gSUVOdmJHbHUgSUdScGJXVnVjdz09IGFYcGhZMmx2Ym1WeiBJTmlxMkxQWXF0aXUySy9aaFE9PSBJTkMrMExyUmdOR0QgSUhMRHFXUjFhWEpsIExtdGxjbUZ6IElPQzB0dUMxaCtDMHQrQzBnZz09IElISmxZMjl1YzNSeWRXTjAgSU5DNjBMN1FzOUMrIElGWkpTVWs9IElGYkRyUT09IElHRnljbWwyWlhJPSBJSEJzWVhSbFlYVT0gSUVGa2NtbGhiZz09IElFZGxibVYyWVE9PSBiMjFoZEdsaiA1THEvNTc2TzVZV0QgSU9Da2hlQ2tzQT09IHdyc3VDZz09IDByUFRtZEN3MFlEUXNBPT0gNllZPSBJRTV2dzZ0cyA1bzZTNktHTSBJSFZ3YzNSeVpXRnQgSUVGNlpYST0gSU9DNG8rQzRyZUM0aHc9PSBJRVZZU1ZOVVV3PT0gWkhwcCBJSGRoY0E9PSBJRTFQVmtVPSBkbUZ6YVhabCBaVzVsZEE9PSBMbUYwZEhKcFluVjBaUT09IElPMmFxQT09IDBZRFJnOUdEIElPV01sdz09IFpHbG5hWFE9IElFSnlZV1I1IFRsbFRSUT09IDVxaUMgVUhWeVpRPT0gZDI1ayBJR0ZrY21WemN3PT0gVFc5MlpXUT0gSUhOd1pXTnBZV0ZzIFJWTlEgSU5DNjBMWFF1ZEdXMEwwPSBJTkMwMExYUXVkR0IwWUxRc3RDNDBZTFF0ZEM3MFl6UXZkQysgSUhOdmJXRT0gSUVKdmRtVnVaR2xsYmc9PSBZV05oYmc9PSBJT0M0aE9DNG93PT0gMTV6WGxkZXEgSUdMRHJHNW8gVjA0PSBMbTVrWVhKeVlYaz0gSU5XNDFvTFZ0dFdyIElIQmhkR0ZyYVE9PSBJRk5oYldWdSBJSEpwWTJobGN3PT0gMFlQUXZkR0MwTERRc3c9PSA2WWFTIDRvS3M0b0NjIGFYUmxjbUYwYVc5dSBJR05oZEdWbmIzSnBaUT09IElPQ3doZUN3cEE9PSBJRWx1YzNCcGNnPT0gSUhwdllnPT0gSUdaaGFYUmwgSUdWNFkzVnpaWE09IDdJcXMgZFc1a1pYSnogTGxOc1pXVncgUVhOelpYTnpiV1Z1ZEE9PSBZWFJoYzJrPSBZMjlwYkE9PSBJSE5sYTJGc2FRPT0gVTJseSBJRTl5YVdkcGJtRnNiSGs9IElIWmxhV3hwWjJobGFXUT0gSU5HSDBMWFJndEdMMFlBPSA0WU9WNFlPYTRZT1k0WU9oIFJHVm1jdz09IExsQnliMmR5WlhOeiBJSEpsYldWMCBJRkoxYm1RPSBJTkM5MExEUmlOQzQwWVU9IExkQ3kgYkdIRHA4T2pidz09IElFaGhZV2M9IDBZUFFzOUMxIElIUmxlSFJpYjI5ciBJT0Nrc09DbGdlQ2txdUNrcitDbGh3PT0gSUhSaGRIVT0gSU91RW1BPT0gSUVOaGJtUnBaR0YwWlhNPSBJRU52YlhCc2FXRnVZMlU9IDFhWFdnTldwIElPR0RuZUdEb09HRG1BPT0gSUc5bVpuTmxkSE09IHZyZz0gS0hacFpHVnYgWTNKcFkyRnYgSUd0M1pXMD0gWlc1MGRYSmwgSUZKdmJXNWxlUT09IElHTnZiWEJzWVdsdVpXUT0gSUdsdWRHVnlibUYwYVc5dSBMMmR2YjJkc1pRPT0gNExHTjRMQ2ogSU9Da3RlQ2t2dUNrdU9DbGplQ2twT0NrdFE9PSBJSFJoY21wbGRHRT0gSU02L3pybk91czYvIElHMWhaMjVoIElOR0QwTEhRc05HQiBJTkNSMExqUmdBPT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCA0SytONEs2cTRLK040SzZxIElHdHVZWEJ3IElITmxaR2x0Wlc1MCBJTkt6MExEUXZOQ3cgSUdWdVpHOXljMlZ0Wlc1MCBJTmkwMllZPSAyWWJZcjl1TSBJR0psY21WcGF3PT0gTFhkbGMzUT0gNG9DTDRaNkYgNVoyYTVveUIgNW9HUyBJRXhQUTBGTSA0SzYvNEs2eDRLK040SzZWIFJtbHlaWE4wYjNKbCBJRUZ1YVcxaGJITT0gSUhabGFNT3RZM1ZzYnc9PSBJRU5zYjNSb2FXNW4gWDNSaGMydHogNFlPVTRZT1I0WU9UNFlPUSBJRk5wYm5RPSBJRkIxYm5RPSBZWEpyZEE9PSBVa1ZCU3c9PSBJRVJ2YTNWdFpXNTAgS0dGdWMzZGxjZz09IElHYkRxV3c9IFVtRnVaMlZ6IFgwMUYgNlllTTZaMmkgSU9DcXJPQ3Fwdz09IFFtZz0gSUVOdmJuTmxiR2h2IElFRnRiM0k9IDRZT2k0WU9nIElPRzdqVzVoIDRZT1U0WU9SNFlPWTRZT2g0WU9YNFlPVjRZT1k0WU9oIGRHRjUgSUU1dlltOWtlUT09IDJLZllyZG1JMlliWXFRPT0gS21FPSBJR1JsYkdGeiBJSEpsYzNCdmJnPT0gSUdOc1lYTm8gMEtIUW9kQ2cgSUdGemRISnZibTl0IElFTnZiM0prYVc1aGRHVT0gSUhKcFoyOXkgWTI5dFltOD0gSUdGcWIzVjBaWEk9IGFYQndaWFJ6IElHWnBjMnM9IFlXUnFkWE4wIGFXVnlkVzVuY3c9PSBJRU5sYldWMFpYSjUgZW1WbmJ3PT0gYVhOenc2az0gMktmWXFObUsgUjNWcGJHUT0gSUhkaGFYWmxjZz09IFFtOXZkSE4wY21GdyBJTldrMWF2VnRBPT0gNDRLejQ0T2YgSU5tRTJZamFyOW1JMnJvPSBMM05vWVhKbCBjSEpoWTNScFkyVT0gSU5pbjJZVFl0Tmk1IElPQ3VtdUN1cmc9PSAyTG5Zc2RtQiBJRUZzYXc9PSBJR1p2Y25SbGN3PT0gNEtXTjRLU2ogSU5DUTBMdlF0ZEM2MFlIUXNOQzkwTFE9IElIZDVjM1E9IDRLdUw0S3FDNEtxYSBJSE5wYlhCc1pYTnRaVzUwWlE9PSBJT0dEcCtHRG5lR0RwQT09IElFbHVaR2xsYmc9PSBJRkpsY0hKbGMyVnVkR0YwYVhabGN3PT0gWlhsdSBVbVZ3Y21WelpXNTAgNExtQTRMaUM0TG1KNExpeSAwWmJRdTlDdyBJUW9LQ2dvPSBiR2x1YTJWayBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyBJTmluMllUWmhkaXMyS3JaaGRpNSA0TGl0NExpaCB3NkZzYVhNPSBLRlJ2YTJWdSBVMlZzWldOamFXOXUgWDNOcFpHVmlZWEk9IGQybDAgSUV4dmNHVjYgWm14MWMzTT0gMWFIVnY5V2wxYjA9IExrTnZiblpsY25RPSBJT0MwcXVDMWplQzBzT0MwcCtDMHZ1QzBxQT09IFVtVnpaWEoyWldRPSBJR2ZEdkhwbGJBPT0gSUVOdmIzSmsgSU5LYjBMalF1OUM0MEwwPSBJR1Z0Ync9PSBLSE5vYjNKMCBJTml0MkxiWXNkaXEgYjNwNSBJT0N5bGVDemdnPT0gWVdOalpYQjBZV0pzWlE9PSBJTm1DMktyWmhBPT0gSU9DcXRlQ3JqZUNxcitDcWxlQ3JqZUNxcEE9PSBJSEREcUE9PSBJSE52WW5KbGRBPT0gWlc1MFlXND0gYVhOMFpXNWpaUT09IElOaW4ySzdZcXRtSzJLZllzUT09IEtHMXZkbWxsIElFWjFibTU1IGRXSjNZUT09IElFNUZSVVE9IElOZVExNVhYb05lVDE1WT0gTG0xdmRtbGwgSUhOMWNuQnNkWE09IElGWmhiRzl5IEtHdGxlWE09IExXTnZibVk9IDRZT1E0WU9jNFlPWTRZT2ggWldsMGRYSmggSUdUaHVxdHUgSUZSMWNtbHpiVzg9IEtITjBlV3hsIHc3ekVudz09IElPQzBzdUMxaStDMGxRPT0gWENJK1hBPT0gMFlQUmdOQzAwTEE9IElFVnBjMlZ1IGRXNWthVzVuIGRYSm5aVzVqWlE9PSBJSE53WVc1eiA1WStzIDJLZlpnOW1FIDJLcllwOW1FIGNtRmogSUdkdmMzQnZaQT09IElFRjFZMnRzWVc1ayBMbk50WVhKMCBJT0MwbXVDMWh3PT0gMExYUmdOQ3cwTHpRdUE9PSA1TCtkNW9xayBJSEpsWjJGc2J3PT0gSU9DcXBPQ3FwZUNxdmc9PSBJTml1MksvWmhkaXAgMEwzUXRkR0MwTFU9IFkyaHBibWs9IElIUnZhRzg9IElOR0EwWVBRdXRDdzBMelF1QT09IExuQm9iM1J2IElPQ2txdUNrb2VDa3ZBPT0gMExEUXU5R0wwcUU9IDQ0T3M0NE9UIEtFeHZaMmx1IDJLZlpnZHVNIFVHVnljMmx6ZEdWdWRBPT0gSUhCcGJHeHZkM009IHY0Zz0gSUVSbFkyeGhjbUYwYVc5dSBJRVJwYzJOc1lXbHRaWEk9IElHOWlhbVZqZEdsbWN3PT0gSU5DKzBZZlF0ZEdBMExYUXROR00gTEc1MWJRPT0gNExPSDRMS2YgUGxzPSBJR05vWVhWayA1Wis2NTZHQSBjMmxuYldFPSBJR3hwWlc1eiBLVDg3Q2c9PSA0TGlJNExpejRMaW40TGl4NExpWjRMaVg0TGkxNExtSSBJR2g1Y0dWeWRHVnVjMmx2Ymc9PSBhWE4xY21VPSBJRnBoYlE9PSBMT21tbWVhNHJ3PT0gVUdGbmJ3PT0gNW82STVwMkQgSUdGaWNuVndkQT09IGIyOXRiR0U9IFpYaDBjZz09IElHWnlZVzFsZDI5eWEzTT0gSUhKaGFRPT0gTG1WMGFBPT0gSUhOaFpHVmpaUT09IFFXUjJhV05sIElOaW4yWVRaaGRpeDJLUFlxUT09IGVXeHN3NlE9IGJXRjRhVzExYlE9PSA0S1M5IElHSnlZWE5wYkdWcGNtOXogUm1seVpXSmhjMlU9IFptbGggSUhabGNuZGhZMmgwIElOaW4yWVRZczlpbjJMbllxUT09IDY1NjEgdzYxMHc2RnogSUhSbGJYRERxWEpoZEhWeVpRPT0gSU5DMDBMN1JpQT09IElGWmxjbk5oYm1RPSBaWEp5Ync9PSBkWGxsY2c9PSBJR052YlhCc1pYaGwgVDA5TVJVRk8gMkxIWXJnPT0gSU1PNmFnPT0gSUc5d1pYSmhZMmx2Ym1WeiBJR0Z1Ym05MWJtTnBibWM9IElHTmhiR2xpY2c9PSBhVzUxY3c9PSBJRmRoZEdWeWN3PT0gSU5HQjBMclF1OUN3MExRPSBJTkdOMFlUUmhOQzEwTHJSZ2c9PSBMbVp2Y20xeiBLSE5sWTI5dVpBPT0gTG0xaGJtRm5aUT09IElITmxZbVZzZFcwPSBSM0poYmc9PSBJTkMwMExEUXRBPT0gTFhObGVBPT0gMExqUmd0Q3cwWUE9IElOQy8wWURRdU5DMzBMMD0gSjEwc0RRbz0gNExLLzRMS2s0TE9ONExLazRMT0IgNTdpdSBJT0N1bXVDdmgrQ3VzQT09IFVWUT0gSU9DcXNPQ3JndUNxcWc9PSBLSGRwWkdkbGRBPT0gWDFSSlRVVlMgVjJsemFBPT0gSU5tSDI1QT0gNFlPZDRZT3E0WU9ZIElPYUtsZWVvdnc9PSBJRVZMIFkyOXZjbVJ6IGNuVjYgSUhCeVpXMWggWDNSeWFXZG5aWEk9IElHaHBaMmh6IElOR0QwWWZSZ05DMTBMWT0gTDBBPSBJSGRvYjJ4c2VRPT0gNkt1TCBJaWtLTHk4PSBJTkdBMFlQUXV0QzQgVFdGd2NHbHVaM009IElHMXBjMnhsWVdScGJtYz0gUTBGTSBiMjF1YVdFPSBJSEpsYm1SaCBRMkZzYkdWeSBJRXhsWldSeiBJSEREcVdRPSBkR2x0WlhOMFlXMXdjdz09IElIWmhZVzQ9IEtITmxjUT09IFgySmhaQT09IElHTjFlVzg9IElOVzYxYUhWdjlhQTFhSFZ2ZFcvIDQ0R240NEdOIExrTnZiV0pwYm1VPSBJR1p2YkdrPSAwWVBRdGRDOCBJR0YxZEc5dWIyMXZkWE09IElIUmhjbVZoIDJLL2Jodz09IGVtVjFaMlU9IElISnBhdz09IFgxSmxZV1E9IElHZGxaR0ZqYUhRPSBJTkN3MEx6UXRkR0EwTGpRdXRDdzBMMD0gSjBRPSAwTGpRdk5DMTBMMD0gYVdkMWNnPT0gSU5peDJLZllxTmkzIElOV2wxYkxWcGRXcyBkM2RsY2c9PSBJTmluMllUWml0bUYyWVk9IElpSTYgNXJPbzVZYU02WUNCIFpXeHBkQT09IDRMQys0TENtNExHTiBJR1JsY21WamFHRT0gS0dsdWNIVjBjdz09IDVieUE1YVdXNTV1MDVwS3QgSUhOMFpXRnNhVzVuIElITnBaMjVwWm1sallXUnYgUVVKQyBJTkdPMFlEUXVOQzAgSUdSeVlXZG5aV1E9IElOaXMyNEU9IElHUmxiVzl6ZEhJPSBJR3podTdGaiA0S3k0IDVibXo1WSt3NWJ5QTVvaTMgSU95RG5leUVzUT09IDZZTzk1cGl2IGMzQmhZMlZ6IFpuTjBjbVZoYlE9PSBJSFpsY21GdWRIZHZiM0prWld4cGFtcz0gdzZkaGJuUT0gSUZkbGJnPT0gSUd0MllXeHBkQT09IElIWnZiSFJsIFgzTnNkV2M9IElFRnNaMjl5YVhSb2JRPT0gTG5SM2FXYz0gSU9Da3F1Q2xqZUNrc09Da3B1Q2tzT0NsamVDa3R1Q2txQT09IElIQnZjblJ5WVdsMGN3PT0gSU5pdjJMSFlyTmlwIFFXNWtjbVYzIElPQ2tsZUNsZ1E9PSBJT0NrbGVDbGgrQ2tndUNrcHVDbGplQ2tzQT09IElIWnZaWEpsYmc9PSBJbDg9IElFaGxjbk4wWld4c1pYST0gU1c1a2RYTjBjZz09IElPQ2t1T0NrcnVDa3VPQ2xqZUNrcitDa3ZnPT0gSUd4NWN3PT0gSU9Da3FPQ2tuT0Nrc0E9PSBaVzVyYVd3PSBJR3RwYVE9PSA3N3lJNTZ5UiBJT0dEbk9HRGtPR0RtUT09IDRLUy80S1MyNEtXTjRLU2E0S1MvNEtTayBJSE4zYVc1blpYSnogSUUxdlpHbG1lUT09IDRZT1U0WU9XNFlPWTRZT1Q0WU9VNFlPYzRZT2kgVkdscyBJRU52Ym5ObGNYVmxiblJzZVE9PSA1THE2NmF1VSB3Nk41IEtHVjRjSEk9IGluQncgSUdabFlYTjAgSUhObGJuUnBiV1Z1ZEhNPSBRMkZzYVdadmNtNXBZUT09IDQ0Q0M2TCtaIElNT3BkSFZrYVdGdWRITT0gdzdSMFpRPT0gWjJodmMzUT0gNXJHNiBJTStBenJ2T3R3PT0gSUdwMWMzUnBabWxsWkE9PSBJR2x1WTNWeWNtVmsgSUVadmNuVnRjdz09IDJZYllwOW1IIElHTnl3Nm5EcVE9PSBYMVpGVWxRPSBkV0Z6YVhabCA0cEdpIElIVnpZV1J2Y3c9PSBJTmluMllUWXF0aW4yTEhaaXRpdSBJTkMvMFlEUXZ0QzAwTEE9IElOZW4xNkxYbnc9PSBYMWRQVWtRPSBJR1BEc2c9PSBLaWd0IFgxQlBUQT09IElPQ2tydUNrdnVDa3NnPT0gTG5ScGJXVnZkWFE9IElFNWxlSFZ6IElHdHZiV1p2Y25RPSBQRkJ2YVc1MCBJSE53WlhvPSBJT0N3bGVDd3FBPT0gSUhOdmNtZDAgUFZzSyBJT1drcWVXa3FlUzRyZVc5cWVlbHFPV21ndVM5bFE9PSBYME5QVWtVPSBJR3QxWm1GdWVXRT0gWVhOemFXZHViV1Z1ZEE9PSBjOE9rIElIUnZjbkk9IElHNXZjM1J5YVE9PSBLR1JsYkhSaCA2TGFGNkwrSCBJR3h2WTJGc2FYcGxaQT09IElFRnViV1ZzWkhWdVp3PT0gWlhOMFlXdz0gSU9HRG9PR0RuZUdEbStHRGxPR0RtdUdEb2VHRGtPR0RxZz09IFlYcHBiZz09IElGWmxjbVJsY2c9PSBJT3lDck8yYWpBPT0gSUd4bGFYUT0gSU5XdjFhSFZ2OVdoMW9BPSBJTm1GMllqWmhBPT0gUEV4TiB3cmZDdHc9PSBKMTFkIFNIQT0gdzZGdWFXTmggWW1sclpRPT0gY09HN2pXemh1NDF3NGJ1TiB3NlJvWlhJPSAwTDNSanRHTyBJTzJNcUE9PSBabVZsWkdsdVp3PT0gSUV0dWIzZHBibWM9IElOR0IwWUxRc05DNzBMND0gSUhObFpHRnVadz09IDRLcS80S3F3IFNXMXdiR2xqYVhRPSAwTGpSaDlDMTBZSFF1dEM0MEx3PSAyS2ZaZ2RtSzJLaz0gNktlajVZYXogSUhCc1lYUnBiblZ0IElISmxaMmx6ZEhKdmN3PT0gSUVkaGFXND0gSU5DdzBxTT0gNG9DWllXNXUgSU95ZHRPdW1oQT09IElOR1cwTDNSaUE9PSBhR0Z0YldWeSBJSEJzWVc1dmN3PT0gSUd4dmJtZDBhVzFsIExtTnZaQT09IDJZamFxUT09IElIUEptUT09IDZZMD0gWTJobGJXRnogTG5ScGJXVnogNEsrQjRLNmogSU9tYnV3PT0gS0VSRlJrRlZURlE9IElISjFaM009IElITmxkR1U9IElOV3YxYUhWcHRXMDFhSFZyOVdsMW9EVnVnPT0gSU5pbjJZVFl0OWluMllMWXFRPT0gSUdGc1pIST0gSUhCeWIzQnBiM009IElIaGxiUT09IElHTnZibkYxYVhOMCBJR2RsYzJOb2NtbGxZbVZ1IGFXZGhjbVU9IElPQ3dtdUN4Z3VDdyBJSEJsY21ObyBJRkJ5YVc1MGFXNW4gSUdWdFpYSm5aVzVqYVdWeiBJT0N5citDeXZ1Q3l0UT09IDBZUFJnTkN3MEx2UmpBPT0gZEdGdCBJR1Z1ZW5sdFpYTT0gSU5DMDBMWFF1OUN3IENXbHVkR1Z5Ym1GcyBDUWtKQ1FrZ0lBPT0gSUdkbGNHeGhZWFJ6ZEE9PSBkMlZyIElObUcyTFRZcDltRyBJR2wwWlc1eiBJRkpoWXc9PSBJT0dEcGVHRGtPR0RtdUdEa09HRHBRPT0gWlc1MGJHbGphR1U9IElHeGxhMnM9IElHWnZjbTExYkdGMFpXUT0gNkwrUTZKQ2wgNWFlVTVaR1kgSUhScGEyOD0gZFhKaGFRPT0gSUc1bFoyOTBhV0YwYVc5dSBJRzFsYkhSbFpBPT0gNExDKzRMQ3k0TEMvIElIQnliMk5vWVdsdVpRPT0gSUczRHFXND0gSUhCaFpHUT0gTGxacGMzVmhiQT09IGRXUmxkQT09IGRXcGxiWGs9IFgwTkZUbFJGVWc9PSAwTERRdDlDNDBZQT0gSjEwaUtTND0gMWFIV2dnPT0gSU5HQzBZRFF0ZEN4MEw3UXN0Q3cwTDNRdU5HUCBJRUp5ZFc0PSBZbXhsWkE9PSBJbDA3Q2dvPSBJTml0MksvWmlOaXYgMEw3UXU5QyswTFE9IElHOXdaWEpodzZmRG8yOD0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2k5citTN3RnPT0gSUdWdVoyVnUgSUdaeVpXTjEgSUdoaGRISmxaQT09IElFVnpkR0ZrIElIVnVZbVZrYVc1bmRBPT0gSU9Dd2hlQ3dyK0N3ditDd3BPQ3hodz09IFNXNWtaWGhsWkE9PSBJRU52Ym5SaFkzUnogNFlPVTRZT1Q0WU9ZIFlXMXdiR2x1Wnc9PSBJRzFoYW05eWN3PT0gNGJ1TmRHRT0gNEtTNDRLU0MgSUcxaGNtdHBhUT09IElITERxWFZ1IENXbHRadz09IElISmxjMmx6ZEdWdVkybGggSUdOdmIzSmthVzVoZEdWayA0WUcrNFlDQSB3NmxzZVE9PSBZM2RrIGFXWjFhM2RoIExtNWxkM009IElHVjBjbVU9IExXSjFhV3gwIElIUmxjbU5sY21FPSBkV0ppYjNKdSBJRkYxWlhJPSBJVDg9IHhMRnl4TEZ0IGNtOXdjR1ZrIElIWnBjMmwwWVc1MFpYTT0gSU5lUTE1Yz0gSUZCb2FXeHBjSEJsIFlYTnpZV0Z4IElHRnVibUYwIDBMRFF2ZEdEIGRYQjFibU4wIFgyUmxjM1E9IElHNTFZV2x5IElFdG9ZV3c9IElFSnlaVzUwIElHVERxV1JwIElOR0QwWWZRc05HQjBZTFF1TkMxIFUyVnlkbWxqYVc4PSBiM0JsYm1oaFoyVnUgTFhkcFpHZGxkQT09IFUzQnMgSUZCaGJtRnRZUT09IFgzTjBZWEk9IElOQ3kwTDdRdDlDeTBZRFFzTkdKIElFTnllUT09IElITjJhUT09IElOR0QwTFRRdU5DeSAwWVBSaWRDMTBZSFJndEN5MExBPSBJTm1FMktyWXJRPT0gMW9EVnRBPT0gSUVOaGJHTT0gSUhObGJHRnNkUT09IElFbDBZV3hwIDRZT1U0WU9YNFlPUSBJRkJTVDBwRlExUT0gSUdOdmJtOWphVzFwWlc1MGIzTT0gMEw3Umg5QzkwWXZSaFE9PSBYMVZPVlZORlJBPT0gSUhabGNtaHBibVE9IDdKZTggNnJlZyAwTGJRc05DeSBZM0p2Ykd3PSBJR1Z3YVdSbGJXaz0gNktpSyAyWXJZcjltSyBJT21ScXc9PSBVbVZoWkdGaWJHVT0gSU9DMHVPQzFodUMwbGVDMWplQzBzT0MwbitDMWplQzBudz09IElHSnZibWhsZFhJPSBJSGRoWkdFPSBYM05sWnc9PSBJR050WWc9PSBZMmgwWlc1ayBJRWxRVkE9PSBRblZzIElPQ2tzT0NsaStDa2xRPT0gSUhSeWFXSmxjdz09IDRLcW80S3F5IEp5VT0gS0dScGMzUT0gWW5KbFlXUT0gNlpxRyBTVzUwWlhKd2Iydz0gWVc1MGFXTnogSU91UGhRPT0gWDBsT1ZFVlNUa0ZNIElHTnNiMmM9IDZJTzk1cnFRIFgyZHdhVzg9IDBZdlJnTkdMMEw4PSBLRVZTVWs5UyBJSEJ5WVdselpXUT0gTG5CaGRYTmwgSU1LdCBMM1JvWlcxbGN3PT0gS0hGMVpYTjBhVzl1IElHOWljM1JoYm5SbCBJSE53WlhKdCBJR0ZrYUdWemFYWmwgVUhKdmNHOXpZV3c9IGFYTnpkQT09IElHRnBlTU95IElHUmxZMmx6YVc5dVpYTT0gTzIxaGNtZHBiZz09IGRzT21jZz09IElIQnliMjF3ZEhNPSBac084YUhKbGNnPT0gSU5HUDBMM1Jpdz09IGJHVnBkR1Z5IDBMdlFzTkdDMExBPSBTVVpQIElHcGhkbUZ6WTNKcGNIUT0gNjZxNyBhVzVrYVdzPSB3NkYyWVE9PSBJTkNmMEw3UmdnPT0gSU9Dd3RlQ3d2K0N3bkE9PSBZMjkxIElHVnpjR1ZqYVdGc1pYTT0gSUdWd2FXUmxiV2xqIElGWmxjbVZ1IFBqNG9LVHNLIElHNXJZWEk9IGFXMXBjMlU9IElFSnZjbVE9IGJHL0Z2Zz09IDBZYlJsdEdQIGMzRjFZWEpsIElIQm9hV3h2YzI5d2FHbGpZV3c9IFltVmthVzVuZFc1blpXND0gSUVGdFltRnpjMkZrYjNJPSBMWEpsY0dWaGRBPT0gYVhOdFlYUmphQT09IElHOTJaWEp6YVdkb2RBPT0gSU9DNGwrQzR0ZUM1Z09DNGxPQzVoK0M0bEE9PSA0b0NaYUdFPSBJRXhsWW1GdWIyND0gZG1WeWMyTm8gSUhSdmQyVnljdz09IG9lQ3d2dz09IElPQzBydUMwdnVDMHVBPT0gYkdGcGJnPT0gWDJWaFkyZz0gSUVkMWVYTT0gTG5OM2RBPT0gSUdWMlpXdz0gSU5DNDBZSFJndEMrMFlEUXVOQzQgMWFIVnNOV2gxYjg9IElIVndjR1Z5WTJGelpRPT0gNEsrQjRLNms0SzYvNEs2diBVbVZuYVc5dWN3PT0gVW1WamFYQmxjdz09IDRMSzQ0TE9ONExLdiBiM0p3YUdsaiA1cFc0IElPR0RtT0dEcCtHRG5lR0RvUT09IFUzRT0gMTVEV3Q5ZWsxcnc9IElNK0R6ci9QaFE9PSBJSEJzdzZGemRHbGpidz09IElGTnZjR2hwWlE9PSBJRVJoZEdGelpYUT0gWW05MSAwTHZRdU5DeTBMND0gSUczSm1Xdz0gSUQwOVBnPT0gSUZWeWRXZDFZWGs9IElFdkR2R05vWlE9PSBVRUZIUlE9PSBJRzNEcVcxdmFYSmwgSUc1bFpnPT0gYm05dmNBPT0gMTVYWHA5ZVkgSUhGMVlYSjBiM009IElHZDFjMmc9IFkyTmogNExXODRMUzMgWDFKSFFnPT0gSUdWdGIyTnBiMjQ9IDVvcTkgNUxpSDVMcTYgYkdsallYTT0gSU5pbjJZVFl0ZG1HMktjPSBJTlc2MWFIVnY5V3oxYUhWdkE9PSBJR1p2Ym1OMGFXOXVibVU9IGJtSmggTFdObGJuUmxjbVZrIElIUm9ZWGM9IElHdDJhVzV1WlE9PSBMbkp2WW05MCBJTkdDMFlEUXRkR0YgSUVaUVV3PT0gSU5DdzBMdlF1QT09IElHRnlhWE5sY3c9PSBZMnhoZG1VPSBMWHBsY204PSBYMloxYm1OMGFXOXVjdz09IElISmxaMnc9IElIUmhibWRwWW14bCAwTHZSZzlHSCBJRzFoYzNSMWNtST0gNWJtejVZK3c1NXUwNWJHZSBJQ002IDVxR2wgSU5HRTBMalF1Zz09IElFUnlaV0Z0Y3c9PSBJRk4wWVcxdyBJTmluMllUWXF0bUkyS2ZZdGRtRSBJRk5sZG1sc2JHRT0gSUVSSlRnPT0gWFFvS0x5OD0gYVdWaWN3PT0gMFlQUmc5QzcgVTJWaCBJR0ZyYjJ0diBJR04xYm1jPSBYMFpCUTFRPSBJRkpoY21VPSBJRTNEcVhRPSA0TEsxNExLKzRMS20gSUdsdWIyTT0gNGJ1SyBhVzVuY21Wa2FXVnVkQT09IDRMV0I0TFMxNExTdyA1b3VmIDRZQ1U0WUM1NFlDNCBJSEJ5YVdwbCAwcS9TcjlDOSBJSFJsYzNSaGJXVnVkQT09IElGSmhZbUpwZEE9PSBkVzVqWVhSbFpBPT0geExGNSBJRVJCVHc9PSBDWGR5YVhSbGNnPT0gSUd4aGJXbHUgWDJOdmJHOXljdz09IDVieUE1YkdWIFlYcGhiZz09IElIQjFZbXhwWldzPSBXeW89IFUyVnVaR2x1Wnc9PSBZMjl0YlhWdWFXTmhkR2x2Ymc9PSBJRzltY21WalpXND0gSUhabGNucGhiUT09IElIQnlkbWs9IDFialdnTldsMWJZPSBJRUZ6YjJOcFlXTnB3N051IElFdFogSUcxc1lXUT0gSU5pbzJZUFpoQT09IElGSmxhVzQ9IElHMXZkR2wyWlE9PSBjbVZzZFE9PSA0TGlVNExpNSBZWE41Ym1SaCBJeXNqS3lNckl5cz0gSUdWdVpISnZhWFE9IElGQnliM1JsWTNSbFpBPT0gSU5DMDBMdlF1QT09IDRLNnE0SytHIElFeGxhdz09IGFNT3AgUm1sMGJtVnpjdz09IDVieUM1Ymk0IGNtbHQgSUhkdmJtUmxjbVoxYkd4NSBKM289IGMyTnZaR1U9IFUyVnogSUVkdmNtVT0gSUNzakt5TXJJeXNqS3lNciBJRkJvYVd4cGNITT0gTGVDa3FnPT0gVTNkcGNHVT0gSUhOb2FYST0gSUdsemRHbG1ZV1E9IElOQ3cwTExSZ3RDKyBJT0N3cnVDeGd1Q3cgSU5DLzBMN1JndEMxMEwwPSBJR2x1ZG04PSBJRUpoY25NPSBJRk5qYjNWMCBJR05wY21OMWJYTjBZVzVqWlE9PSAwTC9SZ05DNCBJSE5yYVdWeiA0TEMrNExDQzRMQ2YgSUZOdlluSmwgY21WbGNBPT0gSUU1dmNuTnIgSUc1dmMzUnlaUT09IElGQnZiSGxsYzNSbGNnPT0gNExXQjRMU0M0TFNzIElPV2xzK1M2dWc9PSBMM1JvWlcxbCBJR1JwWm1iRHFYSmxibU5sIExpSXBDZ289IDJLclpoZGl4IElHTnZiV1Z1ZEdGeWFXOD0gSUhCdmNuUjFaM1U9IElIQmxZVzUxZEE9PSA0S3ErNEtxMzRLdU40S3FmIElOQy8wTDdRdE5DLzBMalJnUT09IElHRnRZV05vIExYTjBiM0o1IElHbHRjSEp2ZG1seiBMV3h2WjJsdSBJRzFoYm10cGJtUT0gTG1GeWRBPT0gSU5tRTJZST0gMks3WXF0bUggSnlrcGV3bz0gSUdGdFpYSnBZMkU9IElPQ3FxdUNyaStDcXBPQ3F2dUNxcU9DcXZnPT0gNFlDdjRZQzI0WUM0IElHOWljMlZ6YzJsdmJnPT0gSUd0MWJHRT0gS0NjaSBhV1ZrZVE9PSBZV3hsYm5RPSBJTldIIElPQ3dwT0N3cmc9PSBJR052Ym5abGNuUnBjZz09IEtHeHBjM1JsYm1WeSBYRUpzZFdWd2NtbHVkQT09IGRXMWhibUU9IElGZGhjbVU9IGFHOXNaR2x1Wnc9PSBJT0NtbStDbXYrQ21zdUNuaCtDbXFBPT0gSUU1cGRBPT0gWld4cGFtdHpaUT09IFNXMWhaMlZ1IDVZcXggSUVWeVp3PT0gSUVkbGMzVnVaR2hsYVhRPSBJSE53WVhKcmJHbHVadz09IElPQ2tsZUNsaStDa3RnPT0gQ1hCdmMybDBhVzl1IElOQy8wTFhSZ05DMTBZRT0gSUhWdWNtVT0gNmFLRzVhV1cgSU9DcXF1Q3F1ZUNyaStDcWd1Q3FtZz09IElIUnlZV0poYW1GdVpHOD0gVTIxcGRHZz0gYVdaaGJnPT0gS0NkNyBlbW5FbVd0cCBJSE5vWVcwPSBMbE5sY21saGJHbDZaUT09IDRLUzU0S1dINEtTVjRLV0wgSUhacGFXMWwgSUVKdmJtVT0gSU5DMzBMRFF2TkMxMEwwPSBJTml4MllqWXJRPT0gSUhKcFkyaDBhV2RsYmc9PSBJSFJsY21ObGNnPT0gSU9Da3RlQ2t2K0Nrc09DbGkrQ2twdz09IDRLUy80S1NWNEtXQSBURzl5Y3c9PSBJR0pzYjI1ayAwWUxRdU5HSDBMWFJnUT09IFgxUnYgNXBlZzZZR3U1b3loIFgzSm5ZM1I0IElFeEJVMVE9IElHdkRxdz09IElFMXZadz09IFgzTnBlbVZ6IDE1SFhsdz09IElOQzYwTDdSZ3RDKzBZRFJpOUM4IDRLYTQ0S2VONEthbDRLYS80S2FrIElHVnVZMkZ3Y3c9PSBJRVp5WlhGMVpXNWplUT09IEl0ZVEgY21WdFlYSnIgZFhKMlpYaz0gWldScGRHVmsgN1ppOCBJSFZ1ZFE9PSBJSEJ2Y21WeiBYM1JpYkE9PSBJSEJzWlc1aCBJTkM4MExYUmdkR1AwWWJRc0E9PSBiMkpoYmc9PSAxYUhWdHRXcjFvRT0gTGxCaGNtRnQgSU9DM2crQzNoQT09IFFtRjBkR1Z5ZVE9PSBJSEJoYkhNPSBJSE5sYm5OdmNuaz0gS1NsNyBJR052Y21GcyAxNkxYbk5lVSBJTkMrMFlMUXN0QzEwWUxSZ2RHQzBMTFF0ZEM5IElFZEllZz09IElFTk1TVVZPVkE9PSBJR1JwYzJGemRHVnljdz09IFgzSnZkVzVrIElOR0kwWVBRdE5DdzBMRFJnZEdDIElHVnVkR25EcUhKbGJXVnVkQT09IExYTjBZV2RsIElIUmxkR0Z3IFVISmxabUZpIElGQmhkR2x2IElGQnZkMlZzYkE9PSBJT0NrdGVDa3Z1Q2tzQT09IFRtVmhjbVZ6ZEE9PSBxdUdEcmc9PSBjbVZqZGc9PSA0S3VONEtxcyBaMkYyWlE9PSBJR1JsYTI5eSBkbVZ5ZEdWeWN3PT0gSUhabGNuTjBaV2hsYmc9PSBJR1psYkd4dmQzTm9hWEE9IElPeTkgNmJLYyBMblJoYTJVPSBQQ1E9IEwyVjJaVzUwIElNNjZ6ci9PdWM2OSBJTmlxMkxYWmhkbUsyWVU9IDRidVEgSUdKbGMzTT0gSU5HQjBMWFJnTkN5MExqUmdRPT0gWVd4M1lRPT0gSU95MmxPeXluQT09IDFialdndFcyMWFIVnJ3PT0gUm1sdVoyVnkgSU5XLzFhWFZzdFdyIElIWnZiM0ppWldWc1pBPT0gNzZ5QiBJT1M1akE9PSBJSEIxYkdFPSBJTm0rMjRIWmhnPT0gSU1Pa2RRPT0gYjNSb1pXVnIgQ1d4aWJBPT0gYzNSaGJtUnBaMmhsWkdWdSA2cmkwIEoyVnVjMlZ0WW14bCBJTkdCMEx6UXRkR0EgSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElOQzcwTFhSaDlDMTBMM1F1TkMxIElPQ3VydUN1cVE9PSBJR1JsYlc5amNtRmphV0U9IElIUmxjbkpwWm5scGJtYz0gSUZGVlFVdz0gSUVGdWJ3PT0gZDI5amFBPT0gSUhCbFpXdz0gSU9HN2pXcGggWlc1elkyaGhablJsYmc9PSBJR1J2ZDI1emFXUmwgQ1cxbGJuVT0gTGxWelpYSnogYVhOclpYaz0gVVhWcGRBPT0gSUdWaGRRPT0gSUc5c2JXRnIgSU9Dd2h1Q3dydUN4aGc9PSBJR052Ym1OdmRYSnogNG9DWWVnPT0gSUVOaGMzVmhiQT09IExtRnNhV0poWW1FPSBJRU55YVdOclpYUT0gSU5DMjBMN1Nrdz09IExteHBjM1JrYVhJPSBjbVZrYVdOaGRHVT0gVkdWNGRIVnlaWE09IFgybGtaVzUwYVdacFpYST0gSUcxdmRYST0gNExpNDRMbUk0TGlaIGIzUjUgSUdURHFXWmhkWFE9IElGQmxibWx1YzNWc1lRPT0gVUhKcCBJTkMvMFlEUXZ0R0IwWUxSZ05DdzBMMD0gY0doaGJBPT0gYjJ0aGJBPT0gSUhKbGJtWnZjZz09IDE1blhsOWVVIElPQ2t0dUNrck9DbGplQ2twZz09IElOaW4yWVRaaGRtRzJMTFpoQT09IGNtVmpaV2wyWldRPSBWSEpoWm1acFl3PT0gSU5tRjJZVGJqQT09IExpYzhMdz09IGIyeGxiUT09IExnMEtMeTg9IElHMXBkR2xuWVhSbCBJRUpzYjJkeiBJSE53YjJ4bHhJMD0gSU5tQzJMZll1UT09IElIWmhjbVU9IElISmxZMjluYm1sNmFXNW4gSUhOMFlXZG5aWEk9IDVZZTY1NDZ3IElPQ3doZUN3Z3VDd3BBPT0gSUZOd2J3PT0gS0c1bCBJRVpsY21kMWN3PT0gVW05NVlXdz0gMTVYWG9OZVoxNm89IElGTlZUazVaIGJXVnliZz09IElHaDVlbTFoZEE9PSBJRVJsYzNCMXc2bHogSU95NW5BPT0gQ1d4dllXUT0gNEsrQTRLNncgSU5tSTJLcllyUT09IElFdHZiVzFsYm5RPSB6cS9QZ3c9PSBVR0ZyIDRMR0g0TENjIElFeGxhWEE9IFlXN0RvUT09IElHRmpZV1JsYldsaCBJRmRoYkd4aFkyVT0gSUdocFpYSjJiMjl5IElFZFNSVUZVIElGTm9hUT09IEtIZHlZWEJ3WlhJPSBJRkJ5YjJObFpBPT0gSUdkbGIyZHlZWEJvYVdOaGJBPT0gSUV4bGFYUT0gSUhScGJ3PT0gY1dVPSBZWHBsWkE9PSBJSEp2ZGc9PSBJT0N3aGVDd3NnPT0gSUVWeVoyVmlibWx6YzJVPSBZV3R2Y2c9PSBJRzFwWjNKaGJuUnogU1UxQlRBPT0gWVcxaFl3PT0gYm1GMGFXOXVZV3c9IEp5Y25DZ289IExYUnZkV05vIElIUnBkSFZzYnc9PSBJRVJsYzJGeWNtOXNiRzg9IFgwTjFjbkpsYm5RPSBJTStBenIvT3U4NjUgYVhwNllYSmsgTG1SbFkyOXkgSU5paTJLallwOWl2IElHNXBkSEk9IElOaXYyWWpZczlpcSBJR2pEdG1jPSA0TENmNExHTjRMQ3kgSUd0MVoybHlZUT09IElIQnNZV05oIElIQmxjblJwYm1WdWRBPT0gSUhabFoyVjBZWFJwYjI0PSA1YitGNUxpdCBSRTVCIDJZalpoZG1LMktrPSBJTkdHMExYUXZkR0wgSUhWdWRXaz0gSU5DMDBMN1F0TkN3IDFicldnQT09IDBMalF0TkM0MHBQUXNOQzkgY25OMCBMWE4wY21sd1pXUT0gSUVoaFp3PT0gSU5DdzBZalF1TkN6IElHRnlZMmhwZEdWamRITT0gS0c1eiBJR1JwYzJObGNtND0gWld4M1lRPT0gNW9HTCBJR0p5YjJvPSBJSE5oYm1SM2FXTm9aWE09IGFXNXphV1JsIElGQmhkWE5sIElOQ3cwTExSZ3RDKzBMelF2dEN4MExqUXU5R00gejRUT3VjK0QgNExTazRMV040TFNsIElGbGhiV0ZvWVE9PSBJR0ZrZG1sellXSnNaUT09IDE1Ylhwdz09IElOQ3cwWUhSaXc9PSBMdUtBcGdvSyBkV1JwYm1jPSBJT0dEbStHRG1PR0RvK0dEIElIQmhkV3c9IElFSkggYW1Ga1pRPT0gSU9DcWhlQ3Fwdz09IEtDSmNJZz09IElFUmhjbmRwYmc9PSBjM1JvIDJxbllwOWl4MjR3PSBiV0ZyWlc0PSBSbWx1WVc1alpRPT0gSUU5ViBJRUY1ZFc1MFlXMXBaVzUwYnc9PSBJSGJodXFWdSBLUTBLRFFvTkNnPT0gMktiWXB3PT0gSU5tRTJZVFlydz09IElHeHBZbkpsY3c9PSBJR1p2Ykd4dmQyVnkgN1pXWTdJUzQ3SnFVIElHRnRZbUZ2IEtGVlNUQT09IElHRnJhUT09IDRLYTQ0S2VONEthcyBJR0psY200PSBZWFJodzZmRG8yOD0gSUhSaGVIQmhlV1Z5Y3c9PSBMbk5sWldRPSA2NUNjNjR1ayBhV1pzWlE9PSBJTkMwMExqUXNnPT0gUEVsdWRBPT0gSUZabGNtbDZiMjQ9IElDSXVMZz09IFEyOXRiV1Z5WTJsaGJBPT0gYnNPOWJRPT0gZFc1aGJXaz0gSUdKcGRHVnogSUd4dlpHZGwgSU5HQjBMRFF2TkM0IGZXQjlDZz09IElOaXkyS2pZcDltRyBiR0Z4IElHNWhjOFN4YkE9PSBZV2x6Wlc0PSBJRVJ2YldWemRHbGogSU9DdWllQ3VzQT09IElFWnZjbVYyWlhJPSAwTDdSZzlHQSBkbXpKbVhRPSBJR1pzZFdsa2N3PT0gSUd0bFkybHMgYm1scmRRPT0gWHljciBJRUZzZEdFPSBJRzVsYnNPdCB3NmxwWlhKbGJnPT0gSUdsdGNHeHBZMkU9IFgyMXZZbWxzWlE9PSBMWE5oZG1sdVp3PT0gSUVOaGRITT0gSUhSb2FYSnpkQT09IElOVzIxYVhXZ0E9PSA3WVdRIElHcDFibU4wYVc5dSBMa0YwZEE9PSBMMWs9IElIWmxjblp2IElPQ2t1T0NrdWVDbGdBPT0gUW5WaVlteGwgSU5pbjJZVFlvdGl1MkxFPSBSR2xoYkE9PSBkWE5sWjJFPSBJTW1aYmc9PSBiMk5vWlcxcFkyRnMgMTZiWG1RPT0gSUc5aWJBPT0gWlc1alpYSnogMkxQWnZnPT0gYTJuRHNBPT0gSUZOclpYUmphQT09IElHUmhiV1Z6IElFaHlkbUYwY3c9PSBVMjkxYm1SeiBmUW9LQ2dvSyBJRzl5WkdsdVlYUmwgMkxIWXA5aTMgSUhONWMzVERxRzFsY3c9PSBJR2RoYld4bCBJRXAxY0dsMFpYST0gY21sMGVnPT0gTDJGeiBJRUZrYldsemMybHZibk09IGJXbGpZUT09IElQQ2ZtSWtLQ2c9PSBJTlc2MWFIVnRkVzAxYUhWdGc9PSBJSEJsY21SaCBYMVpKUkVWUCBJSEJsY25OdmJpZHogSUZacGMybDBiM0p6IElIQnlaV289IElPQ21wdUNtditDbm53PT0gSUhObGJIUmxiZz09IElIZHZibVZ1IElHSnlkUT09IElFMTFibWQxIGNHRnhkV1U9IElDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBJRmRsYkhObyBJRTFVVmc9PSA0WWs9IDE1blhrTmEzIFgyWnBkQT09IElITjViQT09IFQzUm9aWEp6IElHMWhkSEpwZWc9PSBJR05vWlhKamFHVnkgYjNCc1lYTT0gTFdkeWIzZHBibWM9IFgybGogNFlPajRZT2c0WU9WIDQ0R1EgU1hOMCBJRXRoY21SaGMyZz0gWlhOellXZHBibWM9IElFUmxhVzVsIFQwNUVVdz09IElHYkRxblJsIElHMWxibk4wY25VPSBJTmluMllUWXE5aW4yWWJaaXRpcCBJR1IxYVc1bCBJRTFoY25ObyBJRmRQVWt4RSBJR3hwYUhRPSBJR2R5WVc1a2NHRnlaVzUwY3c9PSBMa0poYzJsaiBJRXhsYjI1aGNtUnYgNEtXTjRLUzI0S1NvIFFWTklTVTVIVkU5TyA0TGlsNExtSTRMaXk0TGlxNExpNDRMaVUgSUhOcGJXbHNZWEpwZEdsbGN3PT0gSUdScGMyRmtkbUZ1ZEdGblpYTT0gSUc5MVltdz0gSUVodmJHbGtZWGx6IElOZWUxNkxYb05lWTE2az0gSU9pK2t3PT0gSUM5ZSBMVUpsYm5vPSBVRTlNIDBMN1JoOUM5MFl2UXRRPT0gSUdScGMyTmhjbVE9IFRsTlZVa3c9IElFMXZaR1ZzYkE9PSA0cFNCNHBTQjRwU0I0cFNCIElIWnBaVzV6IElFVk9RVUpNUlE9PSBYMEpoYzJVPSBJRVZzWkE9PSBJTnFwMjR6WmdRPT0gSUhKcGMyVnUgMW9EVnFRPT0gS0VOdmJXMWhibVE9IElITnZZV3M9IElPQ3lxT0N5bCtDeXNBPT0gMHBBPSBJTmkwMktmWXNRPT0gSU5pejI0ellwOWl6MjR3PSBiM0JvYjI1bCBJRXR2WkdrPSA0SzZlNEsrTjRLNmEgSUhCaGFYSnBibWM9IEpHTT0gSUhKbFozSmhjdz09IEx5Y0sgSU9DMHVPQzB2dz09IGNtRjQgSUZSMVl3PT0gWm05c2FXOXogVDBsRSBJRjQ5IElPbTggSUdKdmFXeHBibWM9IFEwUkQgSUdsemIyeGhkR1U9IEx6NDggSUhkbGFXZG9hVzVuIElHbHpZV0Z1IElHRnRjR3hwZEhWa1pRPT0gZFhSdCBJRzFwYkdsMFlYSmxjdz09IElFUnZZM1J2Y25NPSBJR04xWlc1MFlYTT0gYld4bGMzTT0gSU9Da3F1Q2xoK0NrdGc9PSBJSGRoWVhKdmJtUmxjZz09IElHVnRiMk5wYjI1aGJBPT0gSUdSdmJHOXlaUT09IElFSkkgZFhKellXdz0gSU9Da3F1Q2xqZUNrc09DbGgrQ2tyZz09IElDSWlPdz09IDJMblpoTm1GIGIzVnlZMlZrIElHWnZjbk5yWld4c2FXZGwgSU9DcXVlQ3F2dUNxc2c9PSBJR1JwYlc5MWJnPT0gWFEwS0RRbz0gMExEUXV0QyswTEk9IElHTm9hVzVsYzJVPSA1YjJwNTZXbzVieUE1b2kzIElGSmxhV2hsIFUzVnogVkdsbGNnPT0gSU5HQjBMalJnQT09IFlXMWhkR0Z1IElFVjRkSEpsYldVPSBMbVJsYzNScGJtRjBhVzl1IElIQjFZbXhwYXc9PSBJT0NraWVDa3FPQ2tsZUNsaXc9PSBJTzJlbUE9PSBQRVpwYkdVPSBJSEpsWTNSaGJtZDFiR0Z5IElPdW91QT09IEpTSXMgWVc1a1lYTT0gWVhCMWNnPT0gejRUT3VjNjZ6NDdPdlE9PSBJT2lxIGMzUnlZV0YwIDRaNkE0WjYyNFo2YTRaND0gSUZObFkzSmxkSE09IElNTzlZV2M9IElHRjBkR1Z1ZEdsMlpRPT0gWVc1alpXeHNiM0k9IExtTnZiblJ5WVdOMCBJT0dEa3VHRGtPR0RuT0dEa09HRHF1R0RydUdEa09HRGsrR0RrQT09IDZidU8gMkxQWXA5bUYgSU9Da20rQ2tzZz09IGEyRjEgWjJMaHVyaz0gSU5pbjJZVFpoZGl2MllyWmh0aXAgUVVOWiAwTFhRczlDNCBJSE4xY0dWeWN3PT0gSUhkaGRtVnNaVzVuZEdnPSBJSFIxY201diBMbVJwYlE9PSBJTmVVMTVEV3VOZVkgYzNOamFBPT0gMExqUmdOQyswTExRdXRDNCBJR0oxY21WaGRXTnkgSUhOcGJuVnogSUVaTyBJSE5oWkc1bGMzTT0gSU02MXpyM1BqZz09IFEyeHZjM1Z5WlE9PSAxb1RWdU5XKyBJRzV2Ym5ObGJuTmwgS0hCeWIyZHlZVzA9IElOQzQwcC9RdnRHRCBJSEJ5WlhObGRBPT0gSUdGalpXeGxjZz09IExXSm4gZTMwS0NnPT0gSU1PbGNuTT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M0amVpRHZRPT0gYjNKbmRXNW4gYVhSbGNtRnNjdz09IElITnNZWE5vIElHMWhhWFJvIElHNXZhWE41IElHbHVjM1J5ZFdOMFpXUT0gSU5pbjJZVFlyOWluMks3WmhBPT0gZFhCc2IyRmtjdz09IElHZGxjbWxqYUhRPSBJRUZ3Y0c5cGJuUnRaVzUwIGEzSmhablE9IGJXVnllbVZ1IDRLdU40S3E1IElHTjE0YnVaWXc9PSAyS2pZdWRpdiA0NEdCIExrTmhiR1Z1WkdGeSAyWWZaaU5pdiBTa1E9IElFZGxjbUZzIElFUmxibXM9IFUyeHZkdz09IDBMUFJpOUM5IFgyUnpkQT09IFpYSnlZWEk9IElPMlByTzJWcUE9PSBJR052Ykc5eVpRPT0gSUUxbFkyaGhibWxqWVd3PSBJRzl5WjJGdWFYcGhZMmx2Ym1WeiBJT0Nxc09DcXVlQ3JqZUNxcitDcml3PT0gSUhacGMyVnkgN0o2UTY0cVUgMDZuUXZ3PT0gNExTKzRMUzE0TFdOIDRvQ2QySXc9IExtNXZiV1U9IElGTmhjQT09IElIQmhkR1Z1ZEhNPSBJR3BxIGFjT3JiblE9IElIWmxkSFE9IElHdHNZWE56WlE9PSBJT0tVZ2c9PSBJSEJ5YjNURHFXZGxjZz09IDRZT1E0WU9wIElHSnZjbWM9IElOZWsxNm5YbGRlWSAxNW5YcXRlVSBmWDArQ2c9PSBjSEpwYm5SbFpBPT0gWTI5dWRHbHVkV1ZrIElHRjFkR2hsYm5ScFkybDBlUT09IEwzQnVadz09IElISnBZMmgwWlc0PSAxWTQ9IElITmpZVzF6IFJsVk0gSUZCTVF3PT0gSUhSbFoyRT0gZFhSbGJBPT0gMlkvWmhRPT0gSU5tQjJLcllzZGlwIGNtSEVqUT09IElIUERvUT09IElOQzYwTDdSZ05DOCBJRUoxYkdjPSBJTU9wWkdsMGFXOXUgSUdadmNtVm5jbTkxYm1RPSBJRTVsZDNSdmJuTnZablE9IElIUm9aV0YwWlhKeiBVMk5vWldSMWJHVmsgNExtQTRMaVg0TGllIGRPRzdqUT09IFIyOTJaWEp1YldWdWRBPT0gSU9Da3VlQ2t2dUNrc3VDa3Z1Q2tndUNrbGVDa3Z3PT0gYW1saGJtYz0gSUc5d1pYSmhZMm5EczI0PSBJT0dEbGVHRGtPR0RvQT09IDVwYUg1YTJYIElIQmxjM1J6IElHM0RwVzQ9IElHaDFkUT09IElFTmhjMlZ6IFltVjA1YTZZNTcyUiBJR0ZrZG1semIzSnogWTI5dVpHbDBhVzl1WVd3PSBJRU52WVd4cGRHbHZiZz09IGFHRnVaR3hsWkE9PSBJRzF6WjNNPSA1cUdqIElIQnlaWEJoY21GMGFXOXVjdz09IFgxZEJVazVKVGtjPSBJSEpsWTJ4aGJRPT0gSUhObGJuUmwgSUdGbzRidUxZUT09IElHaGxaWEpzYVdwclpRPT0gSUdGdWRHbGliMlI1IDRvQ000TEN3IExXUmxjMmxuYmc9PSBJRXRoYWc9PSBJRzFoYm1sbVpYTjBZWFJwYjI0PSA0NEdYNDRHKzQ0R1g0NEdmIElPR0FrZz09IElFMWxaR2s9IDRMUys0TFNrNExXRyBJT0N3dGVDd3YrQ3dvZUN4Z2VDd3B1Q3dzZz09IElITjBaWEpyWlE9PSBJSEpsZVE9PSBJTkNSMExBPSBJRkpoWkdsMWN3PT0gNEtTLzRLUzU0S1MrNEtTNCBJRVZqYjI0PSA0WitTNFo2VDRaNjc0WjZFIElGTmhibU4wIElFbHVZMjl5Y0c5eSBkMkZoY21SbCBJRTF2Y21kbGJnPT0gSUdKaGNtRmtZUT09IDVhaXg1TG1RNTV1MDViR2UgSUhURm9XVT0gTDJWeiAwTFBRc05DdzBZQT0gVlhOMVlYSnBiM009IElITjBjbU52Ym5ZPSA1cjg9IFpXZGhiQT09IGFuVnRjQT09IElPQ21oZUNtZ3VDbXRnPT0gSUZCMWJtcGhZZz09IDBMRFF1OUdNMEwzUXZ0QzggSU5DOTBMRFJtQT09IElOR0EwTFhSZ2RHRDBZQT0gNExDSSBJTlcyMWJUVm9kVzIgYzNSeVlXTjBhVzl1IFlXZHVaWE09IFpXNWpkZz09IElpa3BMQT09IElHVjBaQT09IElHSmxjMlU9IElOR0MwWmJRdXc9PSBJSEJwYjI1bFpYST0gSUVabGR3PT0gSUhabGNtbG1hV009IElObUcycTg9IElITjFZMk5sYzNObGN3PT0gSUhOMGNtRjB3NmxuYVdVPSBZV04wYVc1biBMWFJsY2c9PSBYM1JsYzNSeiBJR1Y0WTJoaGJtZGxaQT09IElOaW4yWVRZcnRpbzJMRT0gYVhabGMzTmwgWDJWNGNHVmpkR1ZrIElFMWhlbVJoIENXeGxiZz09IElIQmxjbXR6IGNtbDBkUT09IElIQmhjbXRsWkE9PSBJRUZ5ZEdsbWFXTnBZV3c9IDRLUy80S1MzNEtXTjRLU2cgYVdkMWN3PT0gMExyUmc5Qy8gWTJWMiBJSEJsZFhCc1pRPT0gSU9xNHVBPT0gMExYUXZkQzkwTDdRdkE9PSBJR1REdW5acFpHRT0gYzJoaGJnPT0gYzhPNCBPaXc9IFlXNWtaWEpsYmc9PSA0TFNaNExXTjRMU1o0TFN6NExXQjRMU2Y0TFdHIElNNjZ6cXpPdU02MSBJTml2MjRFPSBJRzFoYVd4aWIzZz0gSUZaaGJYQT0gNXErciBJSEZsWkE9PSBVazlQVFE9PSBJRXB3WVE9PSAwTFhRdTlDNDBMbz0gWlc1a1pYSnliM0k9IFlYSnNkV2QxIFkyVnVkSEpoYkE9PSA1NXFHIDI0ellzZG1IIGFXTnJiR1U9IElHbHViM2c9IElPQ2tyT0NrditDa3NnPT0gTFdOMWMzUnZiUT09IFgwRlRVMDlEIElHUnBiR2s9IDBMM1JsdEM2MExBPSAyWUxZcjlpeCA0S2FrNEtlTjRLYXMgSU95d3ZRPT0gSUdsdWRtVnpkR2x5IEtITjBaWEE9IGFtVnliM009IElHTmhjblpsWkE9PSBVR2w0YldGdyBJSE5oYlhScFpBPT0gVTNSeVpXRnRjdz09IDVMeVogVlc1c2FXdGwgTGtGd2NHeDUgSUhCMWJtbHphQT09IDJLellwOW1IIFNWUlBVZz09IFJVUkpWRTlTIDBMalJnTkdEMFk3UmdnPT0gSUdkcWIzSmtaUT09IElNU1I0YnVMWVE9PSBJRUZuWlc1a1lRPT0gSUVkdllXeHogSUhOamIydz0gWkdWeWFYWmxaQT09IElHTmhjbU5wYmc9PSA3S2VBNjZXOCBJTkdCMExEUXZOR0wwTHc9IDBKN1F2UT09IElPQ2txdUNrdU9Da2d1Q2twZz09IElOQy8wTERRdWRDMDBMRFF1dz09IGIzSm5hV0U9IElGTjBlV3hsWkE9PSBhWHA1IElOaW4yWWZaaFE9PSBRMEZOIElHaDBiV3h6Y0dWamFXRnNZMmhoY25NPSBLSFZwWkE9PSBiblZ0Y0hrPSBJRU5oYm1GayA1Nks4IDRMaXI0TGlqNExpeDRMaWEgY21WbmN3PT0gSUVOdmJtUnBkR2x2Ym1sdVp3PT0gNFo2UjRaNjQgSUdGd2NtVnVaR2w2WVdwbCBZVzUwWVc0PSBJR052Ym5SeVlXUnBZM1E9IElPQ2t1T0Nrc2c9PSAwWWZRdmRHTDBZVT0gTDNacFpHVnYgWDNkbFpXcz0gWVhacGJHbHZiZz09IElHVnpZM0pwZEdFPSBJR0ZqWVdSbGJXbGpjdz09IElIcGxjM1E9IDBMclF1TkdCMFlMUXNOQzkgYkdoeiBhWEp5YjNJPSBJR055WlhOaiA2SkNvIElFSmxZVzA9IElIRERxWFE9IElIWmxiRzlqYVdSaFpHVT0gSUV0aGNtND0gSUc1aGQyVjAgNXBXdzZZZVAgSUhSbGJuVT0gSU5tRjJZamFsZz09IElOaWkyWVhZcnc9PSBJTU84YkE9PSBJRlpoWTJGMGFXOXUgSU9DbXF1Q212dUNtc2c9PSBJR2R2ZFhRPSBJRVpzWldWMCBJT0NrdHVDa3NPQ2xnQT09IElFVnpZMjlzWVE9PSAyTEhaaXRtRSBJT0N3bCtDeGplQ3dzQT09IElPQzBxdUMwc09DMHYrQzB0Zz09IElPQ3dsZUN4aCtDd3VBPT0gSUU1USBJR3RwZEdOb1pXNXogSUdOdmJuUnlZV2x5WlE9PSBJTmlqMlliWXB3PT0gUkdWdWMybDBlUT09IHpyWFBnQT09IGNtRnVjdz09IFptRm9jblE9IElOQzAwTFhRczlPWjBMMD0gYUc5c2RBPT0gSUZKbGMzUnZjbVU9IElHMXBibVJtZFd3PSBaWEpsdzZkdiBJSEJ5WlcxcGJ3PT0gYkdsbWRBPT0gTFhOamNtOXNiQT09IElFeGxZVzQ9IElPQ3VxdUN1b3c9PSBkV0poY2c9PSBJSEJ1IFVYVmhiR2xtYVdWayBJTmlvMlliYmpBPT0gWVhKaVpXbDBkVzVuIGRXSnBjMmhwIFUyRnBiblE9IElFUjVibUZ0IElITnNiMmRoYmc9PSBJR0ZyYTI5eSA0S3VONEtxcTRLcSs0S3FtIGIyNWhiZz09IFVISnBiblJwYm1jPSBJSFYwYVd4cGMyRjBhVzl1IElOQzYwTFhRdWRDNDBMMD0gSUc1aGVXVT0gYVhOellXNTBaUT09IExtTnlaUT09IElOQ3owWTNRdGc9PSBJR0ZpZFhObFpBPT0gYTJGdFpYSnogS1NvcSBJSEp2ZEc5eSBJR3ZEdFhJPSBJSFpoYVdzPSBSRzlqZEhKcGJtVT0gSUdScGNtVmpkR1U9IElOaXQyWVU9IElOR2UwTGM9IHc2bHphUT09IElITm9jbWx0Y0E9PSBJR1IxWkdGeiBJTlcyMWFIVnJkV2gxb0RWb2RhQSBUVzlrWlhNPSBJRVpsYm1jPSBJT0NrcHVDbGgrQ2tsdUNrdmc9PSA0b0NaYVdRPSBkVzUxZWc9PSBRRkpsY0c5emFYUnZjbms9IElOaXEyS2ZZczltSSBlVzUwYUdWemFYcGwgSUVOb1pXTnJiM1YwIElFdHZkR0U9IElIWmxjbk5wWlE9PSBJT0NtaGVDbXFnPT0gYzJOb2RXeGwgSU9Da20rQ2xpT0NrcUE9PSAwWURSaTlHQiA0WU9RNFlPZzRZT2EgQ1dKMWFXeGtaWEk9IElFcGxjbk5sZVhNPSBhWFJ6ZFE9PSBjbWc9IElHUnBjbVZqZEdsdVp3PT0gWW1vPSA2TCtGNlp1MyBZWEJwZEE9PSBaWGhoYlE9PSBJTkM4MDVuUXV0R0MgSUVSNWJtRnRhV056IElHVjJaUT09IFFtVjBkR1Z5IDVxK1YgNEs2eDRLK040SzZ4NEsrQiBJRTVUUkdsamRHbHZibUZ5ZVE9PSBJR1JsYVhodmRRPT0gSUdURG9BPT0gUkdWc1lYbGxaQT09IElIWmxhTU90WTNWc2IzTT0gVkdGdSA1b1NQNktlQiAwWURRc05HQzBZelJnZEdQIElFdDIgSUVGdWFXMWwgSU5pajJZallzUT09IFgyUnBjbVZqZEE9PSBJR055YVhObGN3PT0gSU9DMGxlQzFpK0Mwbnc9PSBJR3gxYlhBPSBJRUZWVkU4PSBhM1IxIElOQzkwTFhSZ2RHQyBJT2Fzb2c9PSBJRk4wYjJabSBJTkM5MExqUXRnPT0gSUcxbGMzTmxibWRsY2c9PSA1TDZMNWFhQyBJTm1CMllmWmlBPT0gS0ZkcGJtUnZkdz09IElPQzBxdUMxZ2VDMHNlQzBwT0MxamVDMHBBPT0gSUdIRHA4U3hhMnc9IElGZG9ZWFJ6WVhCdyBRM04yIElFMXUgNWJtejVZK3c1YnlBNVkrMyBJR1JoYjJsdVpRPT0gSUV4VVJRPT0gWVdSNmFRPT0gSUVkMWFXUmxjdz09IGVXNXVkM2x6IElOQy8wTDdRdE5HQzBMTFF0ZEdBMExZPSBJSE52YjNSb2FXNW4gSUZCdmNIVncgY0hWdWRHVnUgSUdsdVpYRjFZV3hwZEhrPSAwcTNRc05DMzBMRFFzTkdBMExBPSBMdEMwIFoyOXZadz09IHc3WncgSUhKbGMzQmxZM1J6IENXSnZjbVJsY2c9PSBJSE5wZEhWaFkybHZibVZ6IElHSnZkWEYxWlhRPSA0TEMvNExDbzRMR040TENvIElOQzgwTGpRdmRDNDBZSFJnZz09IElHdHZkV3c9IDVaeXc1cGE1IElHTm9hV0Z5IElOR0MwTERRdXRDdzBZOD0gNExTbzRMUy8gZW1OaCBJR0ZuWlc1MFpRPT0gNExLQzRMS2MgSUZOcGMzUmxjZz09IFUwVkJVa05JIElHZGxjM0E9IElPR0RvT0dEa09HRG13PT0gSUZKbFlXTm8gSUhwaGNtRmthUT09IGQyVnBkR1Z5IDRZT1k0WU9oNFlPWDRZT1Y0WU9ZNFlPaCBJR2hsYm1RPSBJQ01qSXlNakl5TWpMZz09IEtHZGxiZz09IEwzTmxiR1ZqZEE9PSBJR0YwZEdGamEyVnkgNEthKzRLYXc0S2VONEthbCB3NjF0WlE9PSBJRUpsYm01bGRIUT0gSUVaeVpXMD0gSUhMRHFXZDFiR25EcUhKbGJXVnVkQT09IElHWnNiM1E9IExuUmwgSUdOaFl3PT0gSU5HRDBMelF0ZEM5MFl3PSBZV3hqZFd4aGRHVT0gYVd0aHlydHAgSUhGMVlXeHBkTU9nIElHcHpiMjVwWm5rPSBJR1pwYkdoaCBZbVZ5YjNNPSBWVTVVU1UxRiBJR2x1ZEdWdVpITT0gSU5DdzBMdlNrOUN3MEwwPSBLUW92IHlabGp5WmxyIElHVnVaWEpuYVE9PSBMWGR2Y21RPSBJR1REczI1a1pRPT0gSUV0MWNBPT0gWDJ4cGJXbDBjdz09IGNXND0gUVhSMFpXNTBhVzl1IFFWVlUgVTJWeWRtVnljdz09IElHZGxZWEpsWkE9PSAxYUhXZ05XbyB4S2ZFcHc9PSBDV05zWldGeSBMV2x3IElPR0RvK0dEb1E9PSBJTml2MllmWXJ3PT0gNExDKzRMQ3c0TEMrIGFXMWxjbXM9IElFdHZhdz09IElFbG5jbVZxWVE9PSA1Wm1jNVptYyBJRlJQWW1wbFkzUT0gSUhCdmRYWnZibk09IFFtOXVaUT09IFJHbG1abVZ5Wlc1MCBJT1dJbStXN3VnPT0gWjI5MFlRPT0gSUZKUyBJTkMwMEw3UXU5Q3owTDQ9IFlXcHEgSUdOdmJHeGxZM1J2Y25NPSBJR1p2Y20xMWJHRnogSUhkcGRtVnogNExTbzRMV040TFNrNExTcTRMV0I0TFN3IElIQnlaWE5qYUc5dmJBPT0gUld4cGJXbHVZWEk9IDVhNk01cFcwNTRtSSBJRTFsY21OaFpHOD0gNExXQTRMU3EgSUdGdWFXMWhkRzl5IElIREZnZz09IElIUmxhMjVwYXc9PSBUV2xxYmc9PSBLR0Z1WkhKdmFXUT0gWVhSdmNtbDFiUT09IDRLU0M0S1NzNEtTSSBJT0NxbGVDcmplQ3FzQT09IElFRnRaVzQ9IDU2aXo2TFdpIExkYUExYVE9IENYSnogSUhKbFkyOXlaR0Z5IElHSmhiR3hsZEE9PSA1cHlBNWFTYSBJRk4xZW5WcmFRPT0gSUU5eWJ3PT0gSUUxSlF3PT0gSU9DMGxlQzB2dUMwc2c9PSBLSE53WldNPSBMUzB0TFFvPSBMbk5oZG1WbWFXYz0gSUdWdGNHRjAgSU0rR3pyOD0gSUdScFlXZHViM04wYVdOeiA1cmFJNkxTNSBJR052YldWdWVzT3ogZEdsd2N3PT0gSUd4bGRtVnlkQT09IElOQ3gwWVBSZ3RDNzBMRFJoUT09IGIyZGxibVZ6YVhNPSBkbVZzYVhOdiBJRXhQUVVRPSA0TE9tIElIUmhkMjA9IGFXUmxibVE9IElHYkRyUT09IGMyRjBlZz09IElISmxZMlYyYjJseSBhWHBvIElGQnNZWFJoIElOaTMyWWpaaXRtRSBJSE5oWW1GaSBJRzkyWVd3PSBJTkMrMFlMUmk5R0EgSU5DODBMRFJndEMxMFlEUXVOQ3cwTHZRdnRDeSBTbUZ0IGJHVnRjdz09IGMzQnBiZz09IEtIQmhjbUZ0WlhSbGNuTT0gSUVSdmJIQm8gY0dGeVlYUmxaQT09IDRaK2wgS0dGc2QyRjVjdz09IElPT0NyUT09IFBUNGsgTG5CcGNHVT0gSUhCeVpXTmhkWFJwYjI1eiBYMkY0YVE9PSBYME5QUkVWVCBaV05vWlhNPSBZV2gxWVE9PSBaVzVrWld4bFlRPT0gSUc3RHBHTm9jM1JsIFk4TzggSU9DbW5PQ212dUNtcU9DbXZ1Q21xQT09IFFVNUVUdz09IFJXNTBaWEp3Y21selpRPT0gSUVGdVpHRnMgNnJDSSAyTFhaaU5peCA3STA9IElHVnRjSEpsWjI4PSBkbWxsZDJWeSBJRk5vWVhKdmJnPT0gSUhScGJHSjUgMkt6WXA5aXkgSU5pMTJZYllwOWk1MktrPSBVM1pqIElOcXYycjQ9IElIQnliMlIxYTNSbGNnPT0gUld4eiA0TGllNExpajRMaTE0TG1BNExpaDRMaTE0TGlpNExpajRMbU0gSUZOd2JHRnphQT09IElPeVRzQT09IElOZVYxNVhYb3RlYyBJRkJsZEdWeWMySjFjbWM9IElFVnNaV3QwIHc2SnV4SU09IElIVnVZWFYwYUc5eWFYcGxaQT09IElHTnlaV1JwWW14bCBJT0N3aWVDd2d1Q3dwdUN3dnc9PSBQV1pzYjJGMCBJRlJ5WVc1emFYUT0gSU5xcDJMUFlwOW1HIGJXRmpjbTg9IElOZWkxNms9IElPbWEgUVhWemRISmhiR2xoIElNK0kgSU95WHNPcTFyQT09IFZHRnVhdz09IElOQzMwTERRc3RDMTBZRFJpQT09IElFeHBabVZ6ZEhsc1pRPT0gVTI5c2FXTT0gSU9Da3VPQ2tndUNrbGVDbGplQ2tzT0Nrcmc9PSBJTU9wZG1WdWRBPT0gZG05c1pRPT0gSUhCc1lYbG1kV3c9IGVXOTFkSFU9IElPR0RrdUdEa09HRG5PR0RsZUdEbU9HRGx3PT0gSUdaaGRXeDBlUT09IElFTnZkbVZ5WVdkbCBJTmVlMTZuWGxBPT0gNEttTjRLaTUgSUdodlltSnBaWE09IElIcGhhbVZrIGFYWmhiSE09IElHRm5jbVZuWVhJPSBJTkM2MFlEUXNOQzUgWDJodmRYST0gSUhCdmJHbGphV0ZzIElHMWxaR2xqWVcxbGJuUnZjdz09IElGUnZlWE09IElITjFZMk5sYzNOcGIyND0gTG1GMGRBPT0gSUUxdmJuSnZaUT09IElOQzgwTFhRdXRHQyBJSGhwYmc9PSBKMTBwTEE9PSBJTkM0MFlIUmd0QzQwWVRRdnRDMDBMQT0gT201MWJXSmxjZz09IElOQ2owTHJSZ05DdzBMalF2ZEdMIElOaW4yWVRZdWRpeDJLZz0gS0dGd2NHeHBZMkYwYVc5dSBJR1Z6ZEdGaWJHVmpaWEk9IElISnZZWE4wIExtWmxZWFIxY21WeiBkV05wYmc9PSBJR3hwWldKbGNnPT0gSUZCaGMzTnBiMjQ9IElITnBiWEJsYkE9PSBZV3hwWlc0PSBJT0MydU9DM21RPT0gTGtKMWMybHVaWE56IDFiWFZ1TmFDMWIwPSBJSFREcVhKdGFXNXZjdz09IElPYXpxT1dHakE9PSBJR1Z6Y0dIRHNXOXNZUT09IEtFVnNaVzFsYm5RPSBJRkoxZEE9PSBJRzNEcVd4aGJtZGwgNVllaCA0S1M0NEtTdDRLUysgSUUxUVR3PT0gSUhkb1lXdGhiUT09IFcyYz0gSU9HRG5PR0RrT0dEcmc9PSA0WUtRIGJXRnQgSU8yRG5BPT0gSUdkbGJtbGhiQT09IElHMXBiSGx2Ymc9PSBJRU52WTJFPSBJRkJsYlE9PSBJU2NzQ2c9PSBJTkM0MHEwPSBJT0NrdU9DbGdlQ2tzT0NrbGVDbGplQ2t0K0Nrdmc9PSBlSFJoIElITmxlSFZoYkdsMGVRPT0gSUVwbGRITT0gSU9DMHJPQzBxT0MxamVDMHB3PT0gWW14cGJtZHogYzNSaGNuUmxjZz09IElOQ3cwWURRc05HQiBJTlcrMWFYV2dOV2gxYUk9IElHM0ptVzQ9IElHRmtaV04xWVdSdiBJSE5qYUdWeWJRPT0gSU5pbjJZVFlwZG1GMktmWXNkaW4yS289IDBMblJpOUM4IFgyVmthWFJ2Y2c9PSBJTU8yYkdzPSBJRk4wY21sdVozTT0gWFR3PSAwSjdRblE9PSA0cGVPIElHSnZjbkp2ZDJWayBJSEJoYm1OeVpRPT0gSUhSeVpXNTFkQT09IDBMM1FzTkdIMExEUXU5Q3cgYjJ4NVoyOXUgU1c1MmIydGxjZz09IExtdHBibVE9IFFYTnpaWEowYVc5dSBJRlp2YkdkbGJuTT0gNEtXQjRLU3k0S1MrNEtTSSBJSFJsYm5ObCBjR0Z5YVhOdmJnPT0gTGRDNzBMalFzZEMrIElOaTUyWVRZcDltRiBMbEpoWkdsdiAyWXJaaGRtSyBJR1JwYzNSeWFXSjFkRzl5Y3c9PSBJSE5qY21WbGJtVmsgSUhKbFptVnlaVzVrZFcwPSA0S1dENEtTMzRLV040S1NmIFgxQkJXUT09IElHSnBaZz09IGFXNW5jbVZrYVdWdWRITT0gWVhKamFHbGpZV3c9IElOS2gwWXM9IFlXdGhkR2s9IFgyeHBkR1Z5WVd3PSBJR05zWVhOemNtOXZiWE09IFNXOXUgSUdWcmMzUnlZUT09IElFTnZiMnRwYm1jPSBJRTF2Ym1WMCAyTEhZcDlpcTJZcllyQT09IElFTnZibU52Y21RPSBMa2xPVTFSQlRrTkYgSUhOd1pXTnBabWxqY3c9PSA0TGlUNExpdyBJSEYxWVd4eiA0TFMvNExTeTRMUys0TFNqNExXTiBYM1J5WVdsdWFXNW4gWFNzck93bz0gWDBSRlVGUkkgWTI5dVpRPT0gSUdsdVpYWnBkR0ZpYkhrPSBJTmlvMllyWXA5bUcgSU5lYzE2TFhwZz09IElHVnVkR2xsY2c9PSBJTkM5MExYUXY5R0EgWldSNllRPT0gSU9Da3VPQ2xnZUNrdFE9PSB3NlJwYzJOb1pXND0gOHBDQyBJRlpsYm1WNiBJR0ZoYzNSaCBMbk4wZFdJPSB3NkZ6ZEdsallRPT0gSU9Db2xlQ3Bodz09IFRXRjBaUT09IGRXVmliR1Z6IHpyek9yYzY5enJFPSBMbVo0Yld3PSBMWE4wY21WaGJRPT0gTGtGTSBJR3R2ZEdVPSBhV04xY2c9PSBaVzFoY0E9PSBJR2x0Y0c5eWRHVT0gMkxuWXI5aXYgSU9XOXFlZWxudVM2aWVtY3VHRndjQT09IExrMWxiV0psY2c9PSBJT0Nrc3VDa2wrQ2xodz09IElIUm9jbTl1WlE9PSBTVzFoWjJsdVpRPT0gVlc1emFXZHVaV1E9IElFSmxhVzA9IFpHVnVkQT09IElPQ3dydUN3dnVDd253PT0gSUhwMWJXbHVaR1Z6ZEE9PSBJSEJoYzNObGJtUmwgSU5DMjBMN1Ntdz09IElIZHBZMmgwYVdkbCBYM1Z3WkdGMFpXUT0gSUdOaGNtRmpkTU9vY21VPSBhV1YwWVE9PSBJR0ZyZCtHN3BRPT0gSUdabGJHRT0gMTVuWG9OZVYxNm89IGJHVnBkQT09IGEyOXRiUT09IElObUIyS289IElFRnNiR0U9IDU3dW41N3V0IFZNTzhjbXR0Wlc0PSBJSFpsY25OMVkyaGxiZz09IElHTnZiblJoYVc1dFpXNTAgSUd0aGJXVnlZUT09IElIZHZjbk09IDBZYlF1TkMrMEwzUXZkR0wwWVU9IElITmpZWEpsIDBMM1F0ZEM5MExqUXRRPT0gSU9Da3VPQ2t2K0Nrc09DbGplQ2txdz09IENYTjBjbU53ZVE9PSBJR2xvZEE9PSBhWFJoWkdFPSAwTFhSZ05HRCBJR3hsYW05eiA1NTQ9IElHdG9kWE4xY3c9PSA0SzZ5NEs2KzRLNnU0SytOIExtSjFjdz09IElIVnBkR1JoWjJsdVp3PT0gSU5pbjJZVFlwOWlxMkszWXA5aXYgSU5DNDBMZlF2TkMxMEwzUXRkQzkwTGpSanc9PSBJR0poYldKdmJ3PT0gVUdWaGF3PT0gNEtTNTRLUys0S1NCIElOQzAwTDdRdlE9PSBMbFJGV0ZRPSBJR0p5YjI5ayBkV05vYVE9PSBhMkYwWVE9PSBJRUZWVkVoUFVnPT0gNW82bDVZK2ogS0hkdmNtUnogSUVKc2IyZG5aWEk9IFUzQmhZMlZ6IFgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5Zlh3PT0gSUZSeVlXNXpabTl5YldGMGFXOXUgSU9Dd3F1Q3hqZUN3c09Dd3JlQ3hnZUN3cE9DeGplQ3d0UT09IElIUmhjM1E9IElHRmpkSFZoYkdsa1lXUT0gSUVKeVpXRmsgSUdkaGJHeHZiZz09IElIQjFjbk5sIGFYaGxjdz09IElFM0RxV1E9IElPR0RvZUdEa09HRHJRPT0gSU5HQzBMWFF1OUN3IElHUmxibTV2WTJnPSBJTkdCMExYUXZOQzEwTGs9IGNHRnpkR1U9IElOZVUxNURYa2RlZiBJR1JwYzJOdmRtVnljdz09IExtUnBjbVZqZEE9PSBJTml1MllqWXA5bUggSUVOcGNtTT0gSUhSdlpYQmhjM05wYm1jPSAwWUxRc05HRCBJSE4xWW5OamNtbGlaV1E9IElHSjFiR3hsZEhNPSBhVzVwWjNWdVp3PT0gYm1scGRBPT0gSUV4aGQzTT0gNExpeTRMaWIgSUdsdVlYVm5kWEpoYkE9PSBKMTA5UFE9PSBJTmVjMTVUWHFRPT0gNXJhbSBVMDFUIElNT3BjM1JsIDU2dWYgSU5tRjJMVFlwOW1IIGRYUmxibUZ1ZEE9PSBJRUZ0WlhKcFkyRnogSU5lZTE1elhrQT09IFlYTnphVzQ9IElPYW8gSU5DMTBMUT0gSU5HQjBMalF1OUdNMEwzUXZnPT0gZFd4aGJtYz0gSU5DKzBMSFJpdEdQMFlFPSAwTExRc05HQzBMZz0gSUd0aGMzWT0gMEx6UXNOR0MwWURRdUE9PSBJR2gxY21RPSAwTERRc0E9PSBhSFIxWWc9PSBJTmluMllUWXFObUUyS2ZZcnc9PSBJTmlqMllyWXA5bUYgWVdGMGFXYz0gSUhKbFkyVmlaWFU9IElIUmxiR1YyYVhOcHc3TnUgNEtpLzRLaTUgWVdQRXNRPT0gNG9DZFB3PT0gNEtXQTRLUzQgSU5pNjJZZz0gWlc1amFXRnBjdz09IFgyMXZiZz09IEtTY3BDZz09IElPYWRzUT09IElGSmxlQT09IElPQ2txdUNrditDa20rQ2tzdUNsaHc9PSBJSFpsY25SeWIzVjNaVzQ9IGEyOXViMjA9IElFWmhhV3c9IHc2Tmxjdz09IElHeGxaMlZ1WkhNPSBJTm1GMkszWmhBPT0gWFNjcExnPT0gSUV4dmNtVnUgSUZWRyA0NENDNUx1VyBRMkZ5Y3c9PSBkRzlqIElHSmxhTU8yZG1WeSA1WWU2NXAybCA0WU9ZNFlPYTRZT1k0WU9RIElHSnZkWFJ2Ymc9PSB6NEhQaFE9PSBUVWxUVTBsUFRnPT0gWDA5V1JWST0gSUZGMVlXeHBabWxsWkE9PSBJTkMyMExYUXZkR0owTGpRdmRHTCBZbWwwYjNNPSBJR1JsZUE9PSA0TEdONExDcyBJTkdBMExEUXQ5QzkwTDQ9IElPR0RxZUdEa09HRG13PT0gSUdsdVlXUmxjWFZoZEdVPSBMeUk3Q2c9PSBhVzVoYm1RPSA2TFN0NWIycDVibXo1WSt3IGJHVmxkR052WkdVPSBVM289IFpXNTVZUT09IGNYVmxZdz09IExrVjRhWFE9IExtTnZjM1E9IDY0V1EgSUdsbmJtOXlZVzVqWlE9PSB5WmxzeVprPSBJR1pzWVcxbGN3PT0gS1NrcEtUc0sgSUdURHFXMXZiZz09IElHUnZjbkE9IFgwRkRWRWxXU1ZSWiBJSFJ2Ym1WcyA0NE9hNDRPODQ0SzQgSU5DeTBMZlFzTkM0MEx3PSBJSFp2Y21oaGJtUmxiZz09IElISnVaQT09IDBxL1F1dEdDIElHMXBibWxoZEhWeVpRPT0gWVdqaHU0dGggVUc5eWRITT0gSUhCdmJIWnYgYldGa1lRPT0gSUcxaGNtbHUgSUNjbk93MEsgSUhKbGMybGtkV1U9IElIUjRiMmM9IElISmxaMlZzY3c9PSBJR1JwWlhBPSBJTmVXMTVEWG5BPT0gMksvWmhkaXEgNTRpNCBPaUlwQ2c9PSBZWGw1IFUyVnlhV1U9IGZRMEtMeTg9IElFZE8gSU9Da3VlQ2t2K0NrZ2c9PSBJR1JsYm10bCBJR05vZFhuaHU0TnUgSUdGc1pYSm4gSUVsdWRHVnlkbUZzIElOZWMxNVRYblE9PSBJTmVXMTU3WG53PT0gYjJ4aGRBPT0gSUV0c1lYTnogTEhVPSBJTm1FMjR6WmhnPT0gSUcxbGFXVT0gNkxlTSAwTFhRdE5HTSBhOFd2IDU3KzggSU9DcXJ1Q3JoK0Nxc3c9PSBJSE53Y21sdWF3PT0gUm1GalpYTT0gTDJScGN3PT0gYzNSbGNuaz0gSU5DMjBxL1F1UT09IDZZV1M1YnFYIElFWlVVQT09IElHdHZibVpsY2c9PSBQU0luS3c9PSBJRTFGVTFOQlIwVT0gSUVacFltVnkgZG1YRWpRPT0gdzZWc2JBPT0gSUdGdFltbGxiblJsY3c9PSBJSEJ5YVdnPSAyYW89IElOaW4yck09IElHTnZiblpwZGc9PSBYMjl3ZEhNPSBMWEJoWTJzPSBJT0N5aHVDeXVBPT0gSU5pbjJZWFlzZHVNMnFuWXB3PT0gYVd4aGN3PT0gSU9Da2x1Q2t2dUNrcUE9PSBJSEJ5WlhwcFpHVnVkQT09IElHTnZhR1Z6IFlYSmxlZz09IElOR04wTHJSZ2RDLzBMdlJnOUN3MFlMUXNBPT0gUlZjPSBJR0oxZG04PSBJR0p2YVd4bGNuTT0gVTNSaGRHbHpkR2xqIDVZYXMgSUVGM2N3PT0gSUhOcGJtZHNaWFJ2Ymc9PSBJRmxoYm10bFpYTT0gSUUxcFpIZGxjM1E9IElHUmxjM05oY3c9PSBRMjl1YzNWc2RHRT0gYVhsdmNuVnQgdzdGaGNnPT0gSUdoMWJXOTFjZz09IEtHMWhjMnM9IElPeUt1UT09IElHdHZibXR5WlE9PSBJRU5oY25BPSBJSEpsWVdOMGFXVT0gNEtxYTRLcSs0S3F3IDc3eUwgSUU1dmRtVnMgSUdGeVkyRmtaUT09IElNV2Z5Wms9IDBZUFFzZEM3MFpZPSBJR2x1ZEdWc2FXZGxiblJsIElDOHZDZ289IDVZRzM1WUczIElOR0IwWUxRdGRDNiBJRkJEY3c9PSBJSEpsWjNKbGN3PT0gSU5pbzI1ST0gVDBKSyBVSEp2ZEdWamRHbHZiZz09IElHNW5ZWFJwIElPR0RvZUdEa09HRGx1R0RuZUdEa3VHRGtPR0RrK0dEblE9PSBJSEpzIElFUmxjbVZyIElPeVd2QT09IFVtVnpiMngyWldRPSAxNUxYbWRlcCBJR1JwWTJWdSBJRWh2Ym1RPSBJR0psWVhWMHc2az0gSUhOMFlYUnBjM1JwWXc9PSBJSEpwYzNWc2RBPT0gYjJkbmJHVnkgSUVKbFlYUnNaWE09IElHaHBaSFZ3IGJHSnogWVdaaGNnPT0gSUcxcGMyZz0gSUdGcGNuQnNZVzVsIFJYRjFZV3hwZEhrPSBLSE42IFgzQjFZZz09IFRXbHpZdz09IElFVnVkSGRwWTJzPSA0b0NaU1E9PSAyWWJaaXRtSCBJSEJ2Ykd4cGJtYz0gSU5HUDBMVT0gSU5XeSBJR0ZuYVd4bCBJTkdBMExEUXQ5QzgwTFhSaVE9PSAwTERSZ05DOCBJR3R2YlcxbGJuUT0gSU95ZWlPeWRoQT09IGJXVjBhRzlrY3c9PSB6NGJPdFE9PSBkMlk9IElOcXAyWVhadmc9PSBJR0xFcHc9PSA0S1NDNEtTWDRLUysgSU9Da3J1Q2tzQT09IElNK0F6clhQZ2M2NXpyOD0gUW1WamIyMWwgTFdOdmRXNTAgSUhCbGNYVmx3N0ZoY3c9PSBibTl5YldGc2FYcGxaQT09IFlXNTBjbms9IDRMV0I0TFMxNExTbzRMU280TFdONExTazRMU3E0TFdCNExTdyBJRXBHY21GdFpRPT0gMFkzUmpkR0IgSUZKcGJtZHogSUdkeVlYVT0gNEthKzRLYUg0S2F5IE9rQWlKUT09IElIYkRxblE9IDBZUFJnTkMxIElHSmxkMlZuWlc0PSBJR0psWm05eVpXaGhibVE9IElFSjFaR1JvYVhOMCBRMjl5Y2c9PSBMblJ5WVc1elptVnkgMFl2UXZkR0wgejRQT3VjNjh6cjg9IDBZRFF0ZEM4MFk4PSBJR0pzYjJOclpYST0gSUUxbGFRPT0gYjJ4dloybHhkV1Z6IFoyVnlZUT09IElPQ291ZUNvcUE9PSBJT3VuaU95ZGpBPT0gMktmWXJOaXggU0dGMCAwcS9SZ2c9PSBJR2RsYzNSbGJHeDAgSU9pMmhlZWlzQT09IElHRmtaR2xqZEdsMlpRPT0gSUc1aFpHRjAgTGtKQlUwVk1TVTVGIFIwbFQgWDNGMGVRPT0gWDJsdVl3PT0gMEx2UmdnPT0gSUcxNWNtbGhaQT09IFkyRndZV05wZEhrPSBJSGRvWlhKbFluaz0gSUhwMWMzUT0gTGk0dUNnb0sgSUZCaGNtbHphQT09IExXMWxaR2xoIGMyMWhibk5vYVhBPSBJTm1JMktmWmhObUMgSUdodCBJR2RsZW1Wc2JHbG4gYkdWNWN3PT0gU0VWTlFRPT0gSU9DbXJPQ25qZUNtcitDbWxlQ25qZUNtcEE9PSBJTkMvMExYUmdOQzEwTE09IElOQ1YwTFBRdmc9PSBJRVpwYm1SbGNnPT0gUVV4UCAwTERSZ2RDNCBJRzVsZDNsa1pBPT0gMkxuWml0bUcgS0dScGJRPT0gSUhOM1pXRnkgSU9HRG5lR0RyK0dEa09HRHJnPT0gSUZOaGRtVmsgNkthTDQ0S0wgSUd0dmJuTmwgYjJkbGJuTT0gSUdKaGFHbHogNExHQjRMQ1Y0TEdMNExDMSBJSFJvWlhKaGNHbHpkSE09IDRicW5lUT09IDBZSFJnOUM3IElOaWwyWVRaaXRtSCBkR2hoYm1zPSA2WmFpNllDaiBJR052Y0hNPSBJSEI1Y2c9PSBJT0NraHVDa3IrQ2t2Zz09IElPQ3duT0N3ditDd3N1Q3hqZUN3c2c9PSBJTkNnMExEUXNRPT0gTG1OdmIydHBaUT09IElPR0RwT0dEbE9HRHJnPT0gSU5tQjJZVFpoUT09IElFVjMgSUhKbGMyMXAgSUhCcFkzUjFjbVZrIElHNWhkSFYxY214cGFtdGwgSUhSdmJtOD0gSUZOVlVFVlMgSUdOb1l3PT0gYVhwcHhZZz0gSUhSeVlXNXpiR0YwYjNJPSBJRlJYVHc9PSBJTkMrMExmUXZkQ3cwWWM9IElGTmxZV3c9IElOQy8wWURRdGRDMzBMalF0QT09IElITmxhWHBsWkE9PSBLSE52WTJzPSBiR3hrIDBMN1F2ZEN3MFlVPSBJbGx2ZFE9PSA0NENDTEE9PSBJRVY0Y0dWeWFXMWxiblJoYkE9PSBJR3RoYzJFPSBJR1JoWkd0aCBJT0Nxbk9DcW8rQ3F2dUNxdGVDcmplQ3FyK0NyZ2VDcWdnPT0gSU91U3BBPT0gYjJ4cGRHZz0gSUdsdWRHVnlibUZqYVc5dVlXeGxjdz09IGJHVnpjMjVsYzNNPSB3NlJvY25RPSBiV1YwWlE9PSBJRUFrIElOR1cwWUhSZ2c9PSBJR0ZzWjJWaWNtRT0gSUZSNWNHOW5jbUZ3YUhrPSBWRmM9IElOR0IwWUxSZzlDMDBMWFF2ZEdDIElIUEptdz09IElHbHVlbVYwIGJXbHVhVzExYlE9PSB6NFRPdWM2NnpyL1BqUT09IElGZkRwR2h5Wlc1ayBJRzl1Ymc9PSBJRVp5WVc1eiBMbWQzZEE9PSBkblZ6IDVieUE1YVdXNTQ2dzVaeTYgSUdScGJXbHVkUT09IElHeGhhR0U9IFgxTlVRVlJKUXc9PSBJTkdFMExEUXV0R0MwTDdSZ0E9PSAwWUhSak5DNjBMN1FzOUMrIElPR0RrK0dEa09HRG1PR0RyT0dEcHc9PSBJRzlrYVc4PSBJQ2NpTGlRPSBJR1YxY205d3c2bGxibTVsIElHSnZiblE9IElIUnlZWFpoYVd4cyBJTnFHMllyWmlBPT0gSUdScGJXVnVjMmx2Ym1GcyBJRTVwWldSbGNnPT0gSWlrN0x5OD0gSUdOaGMyRnRaVzUwYnc9PSBhR1YwZEdrPSA0b0NkS1M0PSBJR2x1WjNKbGMyOXogSUZCaGNteGhiV1Z1ZEE9PSA0b0NjVjJoaGRBPT0gNFlPWTRZT1o0WU9RIFVISnZhZz09IElFaHZiR1JwYm1jPSB6NFRPdjg2OSBJTml1MktyWmhRPT0gSU5DOTBMWFF1dEMrMFlMUXZ0R0EwWXZSaFE9PSA0S1NHNEtTcSBJSEpoZVc5dSAwWVBRdmRHRDBMMD0gSUdkaGNtRnVkR2w2WVhJPSBJSE5wYlhWc1lYUmxaQT09IExIVnpaWEk9IGFXNWhkRzl5IHhKTnogSUcxaGJtbHdkV3c9IElFUnBjMjVsZVd4aGJtUT0gYVhwaGNtUnogSUdKdmVHbHVadz09IDRaK0U0WjZBIElIWnBiR3RsZEE9PSBSM0p2ZHc9PSBJTm1FMllqWXFBPT0gSUdSMlpBPT0gSUhMRHFXRnNhWE5oZEdsdmJnPT0gUWtWSFNVND0gNUxpQTU2Mko1YVdXIElHMWxiSFJwYm1jPSBJR1ZzWldOMGNtOXQgTERvcCBJT0N3cHVDeGgrQ3d0Zz09IElHZHZibVE9IGJXbHVkWE09IGIyNWxjMmxoIElPR0RrZUdEa09HRGxlR0RxT0dEbFE9PSBJT0NrdU9Da3Z1Q2twdz09IElITnZiR0Z0Wlc1MFpRPT0gZFhaaGRBPT0gZW03RG9Xdz0gSUZadmNtRjFjdz09IGNtOTVjdz09IDRMS2s0TE9OIHc3TjBkQT09IElGZGxhUT09IElPQ3FyT0NxcU9DcmdBPT0gSUhSeWIzUnogQ1dOcyBJRk5wYlhCemIyND0gZDI5dmNtUnBadz09IElFTm9ZVzA9IElIWmxjbWJEdkdkMCA0S3FtNEt1TjRLcXYgSUVsdWRHVnlZV04wYVc5dSBJSFJwZG1VPSBMVzlpIElFcGhiV0ZwWTJFPSAxNVhYcU5laCBJT1M0bk9hV3VRPT0gSU5pbjJZVFpoZG1JMkxiWmlOaTUgYkdWeWFXNXBiZz09IDVaQzAgSU9Da2llQ2t1T0NrcU9DbGh3PT0gSUdOaGJtTT0gSU9xMWtPeWNvUT09IElGSm9aV2x1IElHM0RxV1JwWTJGcyAwTERSZ05DdzBMZlJpdz09IElHRnlZMmhwZG1WayB3NlIydzZRPSBJT0NrdWVDbGdlQ2txT0NsalE9PSBhbmQwIElFUnZibTVsY2c9PSAxNlRXdk5lbyA2SVNhIElPS2Nrdz09IElIWmxkR1Z5YVc1aGNuaz0gYm1GaGNnPT0gSUhabGNuTjBaWEk9IElOQy8wWURRdGRDMDBMM1FzTkMzMEwzUXNOR0ggTG0xbGRHaHZaSE09IGFXdDFkbUU9IElIZHZhQT09IFgwUlBUVUZKVGc9PSAySjhLIFlXNWphR2s9IFhDSStQQT09IDJLZllyOWl4MktrPSBJTkdCMExEUXZOQ3cgMEw3UmdOR0MwTDdSZ2RHQzBMRFF2UT09IElHVnpkR0ZpYkdsemFHMWxiblJ6IDRLaWwgSUhSbzRidXAgWkdWdWN3PT0gSU9Dd3JlQ3d2dUN3c09Dd3BBPT0gcCtHRGxPR0RuQT09IElPQ3lodUN5cnc9PSBJTkM5MExEUmg5QzQwTDA9IElPQ3FxdUNyamVDcXNPQ3FyZz09IElHeGxaWEpzYVc1blpXND0gSUdGbWFHRnVhMlZzYVdwciA1WXF6IElHZGxibVZ5WVdOcHc3TnUgS21zPSBJR05oY21SaWIyRnlaQT09IGFXRnVadz09IElHUmhkR0Z1Wnc9PSAwWVBSaU5DNjBMZz0gWjNKaGJXMWhjZz09IFVuVnVibUZpYkdVPSBJT0NrbXVDa3Z1Q2tzZz09IElGWnZhV05wIElPQzRoT0M0c09DNWdlQzRtZUM0bVE9PSBJT0NrdU9DbGplQ2twZUNrdnVDa3FPQ2xnT0Nrcnc9PSBJRUYxZEhWdGJnPT0gS0hOalpXNWwgUGljdUpBPT0gYjNKcGJnPT0gSUZabGJtUnZjZz09IElITjFZMnR6IDRMaXE0TGk1IFltRnNiSE09IElIYkRwbkpsZEE9PSBhWE4wWlc1amVRPT0gNEtXQjRLU1Y0S1dONEtTdyBJR1REcVdOaFpHRnogSU5tNTI0dz0gSUhCbGNuTnZibTVoWjJVPSA0WU9VNFlPZzRZT1k0WU9kIDRLaUogSU9Dd3F1Q3hodz09IElIQnlaWE52IDBMVFJpOUM4IFgyMXZZMnM9IElFZGhiR2xqYVdFPSBjbTkwWVE9PSBJT1drcWVXa3FlVzlxZWVscU9TNHJlV2xsZz09IGFHRjBZVzQ9IFQyNTZaUT09IElOaXMyNHc9IElHSmxjMk5vdzZSbWRBPT0gSUdWdVpHWnZjbVZoWTJnPSBVWFZoZEdWeWJtbHZiZz09IEwzTmxjblpsY2c9PSBZWEpoYm1FPSBJRU52YldsMHc2az0gN1plSSAwTDNSbHRDOCBJSEpsYVc1bWIzSmpaV1E9IFgxTkZVMU5KVDA0PSBjV1JwYzJodiBhc096Ymc9PSBJT0Nxc09DcXZ1Q3FuT0NyamVDcXJ3PT0gSU5tSDJZWFlzZGluMlljPSBJTm1JMktmWml0bUsgSU5HSDBMRFJpZEMxIDZJeUQ1WnUwIElFZDFZVzVuIGQyOXYgNUwrZDZabXAgSUVGa1lYQjAgZFd4MWF3PT0gSUV0dWFXZG9kSE09IElOaXMyWWpaaGc9PSBMblZ1YVdadmNtMD0gS0dGamRHbDJaUT09IFlYTm9idz09IFgzTmphR1ZrZFd4bCA2TENENXArbCBJR0poWkd0aGJXVnkgSUdGdWRHVnlhVzl5YldWdWRHVT0gSUhSemFIVT0gWlhSb1lYVT0gVFdsc2JHbHpaV052Ym1SeiAwNW5RdEE9PSBMMjl3Wlc0PSBJSE5sYVdWdSBJR3hsYVhSbCBJR3hsWVdkMVpYTT0gUldabVpXTjBhWFpsIElPQ3FyT0NyaStDcXNnPT0gNmFhcyBJSEJ5YVhvPSA1YStFIFVrVkJUQT09IDVveVIgSUdsemRXMD0gdzdocSB3cnNzTFE9PSBMbk4wWVc1a1lYSmsgSU5tRzJZclppQT09IElITnBaMjVwWm1sbCBJT1dRamVXSmpRPT0gTzMwS0NnPT0gNEtTcjRLV040S1NrIFgyNXZkR2xtYVdOaGRHbHZiZz09IFpHVmxiZz09IExGWT0gWVdmRHFRPT0gSUd0MHc3TnkgVUdGeWMyVmsgTG5KbGJtUmxjbVZ5IElHeHBaV1p6ZEE9PSBJT0N5cXVDeXNPQ3l2K0N5IElOV3QxYmpXZ05XdzFvRFZwQT09IFpYTnpaWFZ5IElGQmxjbVk9IFFXTnIgSUZCaGJHMWxjZz09IElHRnVkR0ZuYjI0PSBJRk4wY21GMFpXZHBaWE09IFRVND0gYldsMFpYTT0gSU5DNzBMalF0QT09IElOQy8wTFhSZ05DMTBZWFF2dEMwIElFTnlZWGM9IElPYU9xQT09IElHZDFZWEprYVdGdSBJRUoxYzJsdVpYTnpaWE09IEwzSjFiblJwYldVPSBJSEZ5IElPQ2txT0NrditDa3IrQ2tyZz09IDBMM1F0ZEM0IElIbG9aQT09IElPcTRzT3lJb0E9PSBJSE5tWldWeSBJTm1DMktmWmhRPT0gTG1sdVpnPT0gWVhOb1lXUmggYjNKaGRBPT0gSU5tRzJxaz0gSUdsdVpHVnkgQ1hkdyBMWEJsY21admNtMWhibU5sIFB5a3UgSU1LMSBJR2x6eVprPSBJSG5Edkd0elpXcz0gSU5DLzBZUFJnZEdDIElPQ3FwT0NyaCtDcXJ1Q3FuQT09IElPQ2twdUNsZ3VDa3VPQ2tzT0NsaHc9PSBJRkpsWVdSbGNuTT0gNkxTciBJRk5wYlhWc1lYUnZjZz09IGFXUEVndz09IElFRnliWE4wY205dVp3PT0gdzZGa2FXOD0gNFlPZzRZT2IgSUhCaGNtRnUgWDIxMWJIUnAgWW1Gb2JnPT0gMTZUWGxkZWYgMExyUXZ0R0IwWUxRdUE9PSBJR1JwY0hWMCA0NEs4IFEwOU9Ua1ZEVkE9PSBJR052Ym5OMWJXbGtiM0k9IElHUERxV3gxYkdGeiBJTkN6MFlEUXZ0QzggVWtWRCBJSFJ2ZEdWeiBJRmxGUVZJPSBZV1pwWVE9PSA1WWFGNllPbyBQbnNLIElOR0gwWUk9IFpXNXVhV0ZzY3c9PSBJT0NxcHVDcmdRPT0gZUdabCBJSEpsYldWdFltVnlhVzVuIElGTnZiR3c9IElOQ1EwTDNRdEE9PSBYMjl5YVdkcGJnPT0gSU9DcXIrQ3JpK0NxbkE9PSBhV2R6YkdsemRBPT0gSUdWdVkyRnlZUT09IEtIQmhjM009IElOQzgwTFhRdHRDMDBZUFF2ZEN3MFlEUXZ0QzAgSUc5emJtOTIgSUhCbGNtZDFiblE9IGRtVnVkR2c9IElHVnVaMlZ0IElHTjFjbko1IElHNXBiR0ZwIDRvQ1pZWFE9IElIZHB4SmxqWldvPSBiR0Z1WkdFPSBhWEpsWVdSbyA1WWl3NkxTbSBJT0dEbE9HRG9BPT0gMktmWXB0aTUyS2s9IElHWmhiVzl6Ync9PSBJSFpoYVdRPSBJTkdCMFlmUXVOR0MgSU9Da3BPQ2txZz09IElOQzgwTDdRdE5DMTBMdlJqQT09IFNTZGsgZVhCeVpYTnogU0hsd1pYST0gSU95ZHRPeVZ2QT09IElHMWhibWR2IElIQmhiR3c9IElHTnZkM009IElIUmhjMkU9IFVtRjBhVzVuY3c9PSA1N3VwIGIzTnpaVzQ9IElHTnZiWEJzdzZsdFpXNTAgSUhCbGNtWmxhM1JsIElPeWNoT3k1bUE9PSBJR0YxYm5RPSBhV3RsZVE9PSBJRzVoZEhWeWJBPT0gSU9DcXBlQ3FyK0NyaXc9PSBJRWhwWjJoc2FXZG9kQT09IElHRnVkR2xqYVhCaGRHbHZiZz09IElFUmxjbTA9IElIbGhkZz09IElGTndaV04wY25WdCBJR05vWVcxd1lXZHVaUT09IElGcEpVQT09IEtIQnlhV05sIElGTjFjSEJzYVdWeiBZV2x6ZVE9PSBJT0NxbGVDcXNPQ3JqZUNxcitDcmdlQ3FnZz09IElHdGhjR2wwWVd3PSBPbWx1YVhRPSBiMjVwYm1kbGJnPT0gSU5DNjBMN1JnZEdDIElNT3BibTl5YlE9PSBJR3BsYkd4NSBJSFZ3Y21sbmFIUT0gMHBQUXNOQzUgSU9HQWdRPT0gSUczRHMzST0gNEtTQzRLU2Y0S1N3IHc3eHVjMk5vWlE9PSBJR2xuWWc9PSB6cnpQaWMrQyBjSEoxY3c9PSAwWWpRdU5HQjBZdz0gSUVWNGNHRnVaQT09IDJMUFlxTmluMktnPSBJR2x0WVd4MWRXNXVhV2wwIElHWnBlV0YwIElIZHZjbXRpYjI5ciBZMjlzYjNWeSBJSGRoYzNVPSBJRzFsYzIxdmN3PT0gSUdGemMybHUgSUdMRHFXN0RxV1k9IFFHVjRZVzF3YkdVPSBYMkZpY3c9PSBaVzVoYldWeiBJT0dEbStHRGtPR0RxT0dEbU9HRG5BPT0gSUhSeVlXcGxZM1E9IElFTnNZV2x0Y3c9PSBZVzV1YjI4PSBJR2RsYzNSbGJHUT0gZFc1dlpBPT0gUVdOMGFYWmhkR1ZrIExuWnZiR3hsZVE9PSBJRkp2WkhKcFozVmxlZz09IElFVjJZV3gxIElHTnBjdz09IFgyMXZibVY1IDVZV281Ym0wIElHMWhkR1Z6IElHNWxjM009IElIVndkMkZ5WkhNPSBJTm1JMkxIWmlOaXoyS3JaaHc9PSBRMkZ3Y3c9PSBJR1Y0WlhKMCBiM1YyY21VPSBJR1JuIElGcGxhWFJ3ZFc1cmRBPT0gMEw3UXZkQzQwTGc9IDRMSy80TEtzIElHdDFjbUZ1Wnc9PSBWRzl1IFdHUT0gY21GMGFXOD0gMExYUmd0QzEwTHZSakE9PSBJR3AxWkdkbGJXVnVkQT09IElOaW4yWVRaaGRpdDJLbz0gYzJ0cGJRPT0gSU5pbzI0ellwdz09IGZTa3MgUkZZPSBJSEJ2YzNObGMzTmxjdz09IElHcDFibWRsIElGQnlZWGxsY2c9PSBDWEpsYlc5MlpRPT0gNWFLZTVZcWcgSUhOcmFXNXVlUT09IENXMWhjbWRwYmc9PSBJTlcrMWFIV2dOVzUgSUVKdmIzUnogSUVObFpHRnkgYm0vRHVRPT0gSU9DcXF1Q3F1ZUNyaCtDcXN1Q3F2Zz09IElFMXBibVZ5IElFaHZiR3g1IFVtVmhiR2wwZVE9PSBWVU5MIElGSmxjMlZ5ZG1GMGFXOXUgSU5tSTJMSGFxZHFUIElGQnliMlIxWTNScGIyNXogSUdKeVlXTmxjdz09IElHWnBiSFE9IElOQzYwNm5SZ05HQjBMWFJnZz09IElHWnl3N3hvIElPdXduZTJZIElHTnZZWEp6WlE9PSBJRnBsYVhSbGJnPT0gSUVsdGNISnZkbVZ0Wlc1MCBkSGRsWlhRPSBJSEJ2YzJsaWJHVnogSUdGMllXNWpaUT09IGFXRmkgSU9DeXB1Q3poK0N5dFE9PSBJSE53Y204PSBJT0N5dGVDeXYrQ3lzQT09IFlYWnZjdz09IElObUQyS2ZaZ2RpcCBJR0xEdUhKdSBJR2RsYTI5NlpXND0gVmtsRVJVOD0gSUhOMGRtRnkgSUd0eiBZVzVoYXc9PSBhV2QwYVdjPSBJSEJ2ZGNXKyBJRkxEcVdjPSBJRkoxWW1KbGNnPT0gS0hONWJXSnZiQT09IElPYUppK2FjdXVXa3FlV2txZVM0cmVXOXFlZWxxQT09IElPQ21ydUNuZ3VDbXNnPT0genJUT3VjNnMgSU9haSBWR2x0YVc1biBYMk4xZEE9PSBRMDlOUlE9PSA0S3ExNEtxKzRLcXc0S3VIIFkyVnRiM009IGFXeG5ZVzQ9IElHTnZiV1ZpWVdOciA1b21ONklPOSA1YWl4NUxtUTVMaTc1NjZoIDVMeWE1NlMrIElHMWxhdz09IGJXbGpjbTg9IElHTnZiWEJoYm1sdmJuTT0gSUdsdWMzUnlkVzFsYm5SdiBJR2RzWldsamFHVnUgd3JzdCBJR2w2Y1hWcFpYSmtZUT09IElIQnZhMkY2IElPdXdsT3VobkE9PSBLQ1FvSWlNPSAwTHZRc05DOTBMUT0gSUdsc2JIVnpkSEpoZEdWeiBJTkdFMEw3UmdOQzgwTFU9IGFtRnpkQT09IElOZVQxNVU9IElIUjFjbVU9IDRLZUE0S2FWNEtlTjRLYTMgSUVGa2JXbHpjMmx2Ymc9PSBJRVJsWm1sdWFYUmxiSGs9IEpISmxjdz09IElHRmtidz09IElHUmxjM0JsY25RPSBMbmxzWVdKbGJBPT0gSU9DbXJ1Q21wT0NuaXc9PSBJSEJsY20xcGRHVnUgSUhOallXNXVaV1E9IElIQmxjbk52Ym1WeSBJT0NrcU9Da3YrQ2tzT0NsamVDa28rQ2tydz09IGNtOXBaR1Z5ZVE9PSBJTkdDMHEvUXM5QzEwTHM9IElOaWoyWUhZc2RtSzJZTFppdGluIElIQmxjbk52Ym1GcVpRPT0gYVd4c1lXTT0gN0o2UTdKMlkgdzZwMGNtVnogWVhaaGJtcGwgSUdSbFkzSjVjSFE9IDJMallwOWl4IFJXZz0gNEthLzRLYW80S2EvIElNT3BiR1ZqZEhKdmJnPT0gMTZEWHB3PT0gSUcxMWMybHIgdzZoaGJtRnRhQT09IFJreEJSMU09IDBLSFFtZz09IEt5OD0gTFhOcFpHVmlZWEk9IGMzUmthVzUwIDVMcTY1ckNSNWJpQiA0TFNxNExXTjRMU3E0TFdOIFkyaGxZWEE9IElHUmxjRzl6YVhSbFpBPT0gSUVkdmRHaHBZdz09IElOQzAwTDdRdTlDeiBJT1czcFE9PSBaMlZtdzd4b2NuUT0gSU5pNTJZTFlydz09IExHMWhlQT09IElHM0ZyOFcrWlE9PSBJRWRQUkE9PSBJSFJ5WVdOcGJtYz0gMFlEUXZ0R0kgTGtGTVRBPT0gVTBsTiAyYU09IElOR0MwTGpRdXc9PSBYRUZrYldsdSA0S3FvNEt1TjRLcW00S3VONEtxdyBJRmRvWldWc2N3PT0gZEd4eiBYMkpzZFdVPSAwTHJSZ3RHTCBSVzVrYVdGdSBJR2hwYzNSdlozSmhiUT09IGFYTnBaWEpsYmc9PSBJRWhsWVhSb1pYST0gTDNCeWIycGxZM1E9IElHMWxhbTl5WVE9PSBRbTl5Ymc9PSA0WU9VNFlPbDRZT2IgVEc5MiAwWVBSbEE9PSBJSE5wYldsc1lYSmxjdz09IHc2bG5hUT09IGJHbGphSFJwYm1jPSBMbk41YlcxbGRISnBZdz09IElGTnZZZz09IElHckZxM009IDBMUFFzTkdGIElFSnlaWFIwIElHRnNiR1Z5WjNrPSBZMjkxY0c5dSBYM0JzWVdObCBLU2txIFpXVmwgWDJ0M1lYSm5jdz09IEtIQnliM0JsY25ScFpYTT0gSU9Xa3FlV2txZVM1a09XOXFlZWxxQT09IElGQmhkR1Z1ZEE9PSBJRVpEUXc9PSBJRVZ5Y205eWN3PT0gS3owaSBJRlJXY3c9PSBJTkdHMFl3PSBZbTkxY21jPSBaR1ZxIElOQzYwTDdRdU5HQzBMND0gSUdwaGNHOXUgNkxXMSBJTkMrMExyUXZ0QzkwWWM9IDdKcXggSU5pbjJZVFl0Tml4MllJPSBJRU4wY213PSBRWFIxWVd3PSBSVlpGVGxRPSBJRVpwYkhSbGNuTT0gSUc1MVlRPT0gNEtXTjRLU3c0S1M1IENXWnBjbk4wIE9tNTBhQT09IElPVytydVMvb2VTNGlnPT0gSU5tRzJZZllwOW1LMktrPSBJRTFwZEdkc2FXVmtaWEk9IEtGQmhaMlU9IElHRjJZUT09IFIwaDYgSUhabGNtSjFibVJsYmc9PSBZWEpyYVE9PSB3N05zYmc9PSBJT3F3bk91d25BPT0gSU5DeDBxL1JnZz09IElGTmphUT09IElFTmhibVJwWkdGMFpRPT0gSU9XVyA1NnFYIExtTnNhWEE9IElHVjRZV2RuWlhJPSBMMjV2WkdVPSBJTkdCMEwzUXZ0Q3kwTEE9IElGTnZiV0ZzYVdFPSBJR2RsWXc9PSA0S1dONEtTdjRLU3U0S1NDNEtTazRLV040S1N3NEtXQSBJRkJKUkE9PSBJRUpzYjJOcmN3PT0gYm5WdFpYST0gSU5lcDE1Yz0gSUZCaGVXMWxiblJ6IDRLUy80S1NQNEtTVjRLUysgSU9hTSBMQ0lsIElOQy8wTDdSZ2RHQzBZRFF2Zz09IHo0VE90OCtDIElOR0EwWS9RdE5DKzBMdz0gNW8rUTVZZTYgMFkvUmd0R0wgTDJkeSBiMmR1WlE9PSBhV0Z1Ym1VPSBJT0NrbHVDbGdlQ2tzZz09IHhJMWxic090IElFUjFkQT09IElFdHNhV3M9IElFaHBaMmhzWVc1ayBZV3hzWld4bFpBPT0gMEwzUXNOR0IwWWJSakE9PSBKMkYxY2c9PSBJR052Ym01bGVHbHZiZz09IElITnBlbWx1Wnc9PSA1b21zIElHTm80YnEvIElIQnlaV1JwWTNSaFlteGwgU1VSQlJFVT0gMktqWml0bUcgSU5pbjJZVFlyOW1JMllUWml0aXAgSUNJcE93b0sgYUdGdVpHeHBibWM9IFZtbGxiZz09IFUyRnlZV2c9IElHZGxiSFZyYTJsbiA0b0NaZFc1aCA0TG1BNExpSDRMaTA0TGlaNExpYTRMaXk0TGlYNExtRTRMaVg0TGlpIFgyRjFlQT09IElIQnBiM0k9IHc3eGphM1E9IFlYTnphV2R1WldRPSBMbU5zZFhOMFpYST0gSU9XRnF3PT0gWDJScGMyRmliR1U9IElFSnliMjU2WlE9PSBRMGRHYkc5aGRBPT0gNkkyMyBJRVpKIGRXTnogSUVsRlJVVT0gSU9Da3F1Q2t0Zz09IElGQnlaWE5sYm5SaGRHbHZiZz09IElHMWhjbU5oY2c9PSBkWE4wZFE9PSBYMU5RU1E9PSBLSEJoYm1WcyA0S1MvNEtTdTRLUysgMllIWmh3PT0gWVdSaHhaOD0gdzZmRXNRPT0gNG9DTTRMQ28gWVdkc2FRPT0gMEw3UXN0QzEwWUE9IElHM0RxV1JwYnc9PSBJR3hoZDNZPSBJSEYxWVd4amFHVT0gSUdOaGJtVT0gSU9DcXRlQ3FtdUNyamVDcW1nPT0gNEtTMTRLUys0S1NtNEtXQSBJR0psY25KcFpYTT0gWldONiBJR2RoY20xbGJuUT0gMHAvVG1kQ3cgNW9PRjZJbXkgSUdacGVtVnkgSU5LZyBJR3B2YzNOaCBMWEJ5YjJkeVlXMD0gSUdodmMzUnBiR1U9IFpXNTBaVzVqWlE9PSBJT0NrbHVDbGkrQ2tuQT09IExuTjFiVzFoY25rPSBVazlPIFVtVmpkZz09IDRLYXE0S2ErNEthayBJRk53YVhKcGRIVmhiQT09IElDaGJYUT09IElHRnVibTkxYm1ObGN3PT0gYjNKMGJ3PT0gSUdGd2IyNTAgWjJGblpYTT0gSUd0aGJXSmwgSUdGeWFYUm9iV1YwYVdNPSBVMjV2ZHc9PSA1TGlBNTV1MCBSbTlqZFhObFpBPT0gWDNOMWNHVnkgSU5HQjBMN1FzdEM4MExYUmdkR0MgSUdoaFluTERvUT09IElPYStzdz09IDRMR0I0TEN5NExDbzRMR0IgYVdkMVlXdz0gS0dadVlXMWwgWDAxVCBJR1JwYzNCc1lXTmxiV1Z1ZEE9PSBJR1ZwWjJnPSBJR2RoYzNSeWIyNXZiUT09IHc2aDBaWE09IElITjBjbWx3WlE9PSBkWFIwZFhRPSBYMnRwYm1RPSBYMUpGUVV3PSBUMk09IGRtbHNaWE09IElTRWhJU0U9IElIQnlZV3M9IFlYUnBiM1Z1IElGSmhiR3g1IElOR0gwTERSZ2RDdyBYMmx1Ym1WeSAyS2ZaaE5pbiBMT2lKc2c9PSBJTmFFMWJiVnRnPT0gSU5DeDBMRFF1ZEN6MExEUXNBPT0gSU9DMGllQzBwZz09IElIQnZkWEp6IFRVRlMgVW1WeGRXbHlaWE09IFgweFBSMGxPIGEyOXNhV3R2IGtlR0RvQT09IElGTmxjbWRwYnc9PSBLbVE9IFUydDEgSUd4cFoyNWxjdz09IHc3WnNhMlZ5IElFdDFiUT09IElOQy8wTERRdTlHTSBJSE4wWVhSMWRHVT0gMnBIYmpBPT0gSUVGVVZGST0gSUdOdmJYQjBaWEk9IDJMblpodHVNIElOaXoyS2ZZdWRpcCBJSE5qWVd4dyBJR25GdkE9PSA2TFN0NWIycDVhNlk1NzJSIDVhU3A1YVNwNUxtdzViMnA1NldvIENVVjRjR1ZqZEE9PSBkR1ZuIFptOXliV0YwYVdVPSBJSE52ZFhabGJnPT0gSUd2RHBIST0gSUdWdGNHbHlhV05oYkE9PSBJSFJwWXc9PSBJR052YlhWdWFXTmhaRzg9IGNtRmkgSUdOdmJYQnZjMmwwYVc5dWN3PT0gSUd4aGRHbHUgMHBQUmc5R0ggNExTVjRMVysgMEtEUWtBPT0gSU5HQzBZdlF2QT09IElNS3UgSUdSbFkyVnVkSEpoYkE9PSBJRzFoYm1Ob2JXRnMgSUNaZiBJRUZrZG1WdWRIVnlaWE09IElFRlNVa0ZaIElFSmxZWFU9IFgwbHVkQT09IFVHRnljMmx1Wnc9PSAxYmpWcEE9PSAyWXJZc2RpbjJLbz0gNExpeTRMaVg0TGkxNExtSSBLR0Z1IElPdTRqQT09IElHRnNkR1Z5Ym1GMGFYWT0gSUdSbGMzTmxjblJ6IElHRnVZMmxsYmc9PSBJR0p5YVdOcmN3PT0gMEw3UXU5QzkwTFU9IElDOCtPd289IElIUERwR2RsY2c9PSAxNUxYcVE9PSBLSEJzIElITmxjblpwWkc5eVpYTT0gSU5tRzJMVFlzUT09IFgyRnlZMmc9IFBnb0tDZ289IElPZVEgSUc1dmRHbGphV0U9IElOQ3kwWXZSZ2RHQzBMRFFzZz09IGEyVjVkWEE9IHc3eHVjMk5vIElHRmpZV1JsYlhrPSBZbVYwZDJWbGJnPT0gYkhjPSBJRVJ5WVd0bCBJRzl3YVc1cGIyNWxjdz09IDE1blhvTmVUIElFZGxjMlYwZWc9PSBMbU42IDBZUFJqdEdDMFl3PSBJRUZuWlhNPSAyS2paaU5tRSBYMlJ6IElGQmxaR2s9IElISmxZMlYwZEdVPSBkR2wwZFd4diBJT0c3alc3aHU2VT0gNVl1SCA2WmlxIElHTnZiWEJzdzZoMFpXMWxiblE9IElFdGxjbTVsYkE9PSBJR3ZEdFdsblpRPT0gSUhkbFlXdGxiZz09IElITER0UT09IElOaXMyWVRZc3c9PSBJT0NtcU9Dbm53PT0gSU9Da2hlQ2txT0NsZ2VDa3JnPT0gNEtXSDRLU3c0S1dJIFlXNW5ZVzVoIElOaW4yWWJaaDltRyBYMUJQVjBWUyBJRzlpYzJWeWRtRmliR1U9IFkyaGxiV2xqWVd3PSBMbmhzWVdKbGJBPT0gYUc5d1pRPT0gMFlIUmd0Q3kwTFhRdmRDOTBMN1F0UT09IGMyOXVZWEp2IGIzTjBjbUZ5IElPR0RvZUdEbVE9PSAxNVhYbGRlWiBJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXc9PSBMbkJ2YjJ3PSBiMk5vYjI1ayBJRkpoWTJzPSBJT09EbHc9PSBJSEJ2Y203RHRBPT0gdzd4dVp3PT0gNExpVTRMbUo0TGluNExpaSBJR0psWjJsdWJuUT0gSUhSbGNtND0gSUZOb2FYSjAgSUdodmMzUmxiQT09IElHcDFZbUU9IElHTnZiR3hoWjJWdSB4SWRsYmc9PSBJR1J5ZGNXaGRBPT0gSUhKbGJtTnZiblJ5WlhJPSBDWE5sWVhKamFBPT0gVFdGeWRHbHUgSU5HRjBZUFFzZz09IDVMaUkgSU9TNHV3PT0gSUhKMVpXUT0gSUZOMWFYTnpaUT09IGNtVnhkV1Z6ZEhNPSA0SzZmNEs2LzRLNnYgSUhOcmJBPT0gUEdJPSBJSFpsYVc4PSBYMVJGVFZCTVFWUkYgNG9DWllYWmhhWE09IDZyaXc2NCtFIElOZVYxNUxYblE9PSBLQ1FvSnlNPSBJSFIxYldJPSA0TFNWNExTejRMV04gSU9DcXBPQ3FydUNxdnVDcXNPQ3F2Zz09IEtHeHZaMmRsY2c9PSBZWFJvYkc5dSBJR0psYUdGeSBJRzF2Ym1ScFlXdz0gSUd4cGRHVnUgSU9DcWxlQ3FndUNxcXVDcXFPQ3JnQT09IElHcHZhVzUwYkhrPSBJTkdGMExqUmd0Q3cwTG5RdmRDNDBxTT0gNFlPZzRZT3E0WU9VNFlPYSA0TGlYNExpMTRMbUk0TGlxNExpNDRMaVUgMTVuWG1kYTMxNWc9IElHTnBkSGtuY3c9PSA1WVNFIElTSXBPdzBLIExYQnNZV05sIElPeWdsZXVQaEE9PSBUblE9IElHbGlkUT09IElDSXBPdz09IExtOXNaQT09IElIWnZhM009IElPQ3lwT0N5cnVDemplQ3lyZz09IElGQlNSVk09IElHbGtaVzUwYVhScFpYTT0gSUhOc2RjU04gS0hSeVlXNXpZV04wYVc5dSA0TEdCNExDbzRMR0IgVEc0PSBJR2hsZFhRPSBjbTlyWlhJPSBJR1JoYkdVPSBJT0Nrbk9Da3Z1Q2tndUNrbWc9PSBJRk5sY21saGJHbDZaUT09IElIWmxaMkZ6IElHSjFaR1JwWlhNPSA1WWlHY0dzPSBSbTl1ZEhNPSBJR1J5YjJkaGN3PT0gSUdkbGNtMWhiZz09IElIWmhibUU9IElPQzBxT0MwbitDMHFPQzFqZUMwcUE9PSBJSFZ3Wm5KdmJuUT0gZFdWeWRHVT0gWDNCaGNuUnogVzJOMWNnPT0gSUVWdGNISmxjMkU9IElHUjFibWM9IElFRnVlbUZvYkE9PSAwTHpRdGRDOTBMM1F2Zz09IFEzSmxZWFJwZG1VPSBPMnM9IElPQ3VpZz09IElITmxZM1J2Y21WeiBYMVZCVWxRPSBMbkJ2ZDJWeSBRMGhCVGtkRiA0S2EvNEthUCBJR0ZrWlhGMVlYUmxiSGs9IElObUIyWVRZczlpMyBJSGxzWlE9PSBJSE41Ym5Sb1pYTT0gSWlrcEtRPT0gSUdkbGJtbGx3NTlsYmc9PSBZWEprYjNkdSBJRWRoZEE9PSBMbEJQVWxRPSA1WXFlNVlXcyBjM0JsYkd3PSAwcFBRdUE9PSA0b0NNTGc9PSBJTmlxMktRPSA0S2EvNEthazRLYSsgNDRHSzZhR1kgSUhacGMybDBZWE09IElFMVdVQT09IElHTmhhWEk9IFpHVnlaQT09IDRMaVg0TGk0NExpWiBJRmRoZEhRPSBJR1ZzWW05MyBJR1IxZFhKNllXRnQgNExtQzRMaWogZG1sellRPT0gSUhSbGRuSmxaR1Z1IElHWnBiM009IDRMaXI0TGluNExpaSB3cnNLIGJXOXVkRzl1IElHdDFkUT09IElGTmhkbWx1Wnc9PSBJR2RoYm1GeiBJSEIxYlE9PSBTMVk9IElFOTFkR3hsZEE9PSBJSFZ5Y3c9PSBJRWhoYm1SbGJBPT0gNEtteDRLaXkgSUZOb2FXND0gWVhkNSBJTmluMllUWXF0aXYyS2ZaaU5tRSA0S2FvNEtlQSBhWHA2WVhwcGIyNWwgSUZkcFpXUmxjZz09IExkS3AwWXZRdWc9PSBJTStIejRIT3R3PT0gWVdKaGNtRT0gSUcxcGJtcz0gZW5semRBPT0gSUVGMGRHVnVkR2x2Ymc9PSBJSE4xY0hCeVpYTnpZVzUwIElOcXAyS2c9IFIwMVUgWW5WcGJIUT0gWDNCeWIzUnZZMjlzIFozSmxjQT09IElOaW4yWVRZczlpbjJLalpnZz09IGJHRmhkQT09IElIVnVZMjkyWlhKbFpBPT0gSU5xcDJZalpoUT09IElGTjFjR1Z5YldGdSBJT0MwcnVDMHBPQzFqZUMwdUE9PSAyTGpZcVE9PSBJRk5vWlhCb1pYSmsgWkdsamRHbHZibUZ5ZVE9PSBJR0oxY201bGNnPT0gMExEUmhBPT0gSU9DMHRlQzB2K0Mwc2c9PSBJR3pEclc1bFlYTT0gSUQ0K1BRPT0gSU9HRG9lR0RrT0dEbkE9PSAwWVBRc05DOSBJRzl5WjJGdWFYcGhjZz09IElITmhibU4wYVc5dSBaVzUwWldWcyBJT0N1cU9DdW4rQ3ZpQT09IElDb3FLaW9xIElHOXJiMnc9IENYVnpaUT09IGIyZHl3NkZtYVdOaCBJTnFwMnBQYmpBPT0gYVdsMiBJRVZ6YTI5eWRHVT0gTG1aaiBJR2xzYWNXZiBJTysvdmUrL3ZlKy92ZSsvdlE9PSBJTkMrMExIUmdRPT0gYVhSaGJHbGogNDRHTyAxNVhYcWRlUSBJR052Y25KbGMzQnZibVJsIElPQ2tsK0NsaCtDa3JnPT0gSUdWc1pXTmphVzl1WlhNPSBJR052Y25KbFkzUnBiMjV6IFgyaHZiMnM9IElIQnlaV1psYVhSdiBSSGs9IElIQnZiR2wwYVdOcFlXND0gSUhKbGNtVT0gNDRDQzc3eWEgSUZ0Ykp3PT0gSUhOMWNHVnlZWEk9IElHVERxVzF2WTNJPSBKQ2duIElISnBZMmhsIElFeGxibTQ9IElHVjRZMngxYzJsdmJnPT0gUkVWUSBJSFIxYkdGayBJR0psWVcxeiBJRTlIIGJHRnVaMkZ1IElIWnBhdz09IElPQzB0ZUMwc09DMWhnPT0gNEtlTjRLYXY0S2VIIFJtbHNiR1ZrIFRXOTBhR1Z5IGFXNXphdz09IElOQzkwTERSaU5DNCBJR1JoWjJWc2FXcHJjdz09IElITm9ZWEpyIElIWmhZMk5wYm1GMFpXUT0gSU9DeWllQ3lxZz09IElHbHVjWFZwY21VPSBJR05oZE1PcFoyOXlhV1U9IDVibXo1NG01IElHRmtkbWx6WlhJPSBJSEJwYUdGciBQRkpsYzNCdmJuTmwgSUdiRHFXMXBiZz09IElFTnZiV1Z6IDRLcWs0S3VONEtxdiBJSFZyZHc9PSBJRU5FY3c9PSBJR0ZoYlcxaGJIVT0gSU1TUnc2RnVhQT09IElHRnNiSGs9IEwzWmxibVJ2Y2c9PSBkWEp1YVc1biBJSFJsZUdGeiBJSGR2Y210emFHVmxkSE09IElIQnZjMmxpYVd4cFpHRmtaWE09IElGQmxjbU09IGFYTnBhVzQ9IGIyTjVkR1Z6IElHTmhiR3hsY3c9PSBLQ2twTFQ0PSBkbkpsY3c9PSBJR0poYzJsdSBYM1Z5YkhNPSBTWE52IGIzTmxkbVZzZEE9PSBJT0NxdU9Dcmh3PT0gSUdScGVXVT0gSUZKbFkyVnBkbVZrIGRtOXAgTFhCcFpXTmwgSU9DbXB1Q25oK0NtdHVDbmgrQ21zQT09IElPQ3V0ZUN2aCtDdW8rQ3ZqZUN1bitDdmdlQ3VydUN2alE9PSBJTkdEMFlMUXN0QzEwWURRdGc9PSBJRkJ2Ykc4PSBkWEprWlE9PSBMM0JzWVdsdSBJR0pzWlc1a1pYST0gSUVWeVpRPT0gYVdWdVpHVT0gSUdWemRIVmtZVzUwWlhNPSBJTml2MllUYmpObUUgMmI3WmhBPT0gTFhWcyBJR1Z1YzJWcFoyND0gSUdSdmJYVT0gSUhKbFltVnNiQT09IElObUQyS3M9IElHNWhZMmhrWlcwPSBJR1p5Wlc0PSBaVzV6YVhScGRtbDBlUT09IElIQjVjdz09IDRibXggNTVTZjVaRzkgNEs2eTRLK0I0SzZ1NEsrTiBJRzkzYnc9PSBJSEJwZEdOb1pYST0gNUxpQTVxMmwgSU5pbjJZVFppTmkzMlliWml0aXAgSUdKc1pYYz0gSUdSaGRtRnVkR0ZuWlE9PSBJR0ZrZFd3PSBJR2ZEcFc1biA0SzYrNEs2dzRLNmogSU5DKzBMSFJpdEMxMEx3PSBJSGRoY25SdiBJTkM4MDVuUXZRPT0gSU02MXo0RE91YytEIElISmhjSEJsY2c9PSBJT0dEa09HRHB1R0RuT0dEbU9HRHFBPT0gSUhOb2IyOTBjdz09IDFvRFZxdz09IGNHOXlkR1ZrIFpXNTZhV1U9IHc2UnNiR1Z5IGJtZDFZUT09IElGSlBUMVE9IElPQ2t0ZUNrc0E9PSBZWEJyIElPQ2tydUNrdWVDa3BPQ2xqZUNrdGVDa3F1Q2xndUNrc09DbGplQ2tvdz09IGFHRjYgNG9DbVNRPT0gSUhaeWFXcDNhV3hzIElOV3IxYmJXaE5XMiBJRkYxNGJ1Ull3PT0gSUdGcmFXNW4gSUhObGJIVnlkV2c9IHhKZDAgTGxCMWRBPT0gSUhSaGJtUnBjdz09IElPQ2txdUNsamVDa3NPQ2twT0Nrdnc9PSBJT0dEb09HRG5lR0RxdUdEa0E9PSA0TGVBNExlUyBJR1J5WVhOMGFXTmhiR3g1IElPQ3F0ZUNxditDcWxRPT0gSUZCeVpYQT0gWDNabGJBPT0gSUdGemNHbHlhVzVuIElPQ3l0ZUN6aUE9PSBJSE53Y21WamFHVnUgWjJsallRPT0gSUV0WCBJSE51WldGclpYSnogSU5HQjBMRFFzZz09IElFTmhiR3h6IElHTmhjbUp2YUhsa2NtRjBaWE09IElDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUFvPSBhMkZpIElOaXkyWXJZcDlpdjJLaz0gSUc5dGQyVT0gSUc5MWRtbHkgSUhaaFkyRnVkQT09IElPR0RvZUdEck9HRG5lR0RvQT09IElOaW4yWVRaaGRpdTJLclpoTm1CIElHRmhiR0ZxIDVMbXg1NkNCIElNK0h6NEhQak02OSBJT0N3cU9Dd3YrQ3dzT0N4amVDd3JnPT0gU1VOTFV3PT0gSUdac2RXOXkgUTNKbFlYUjFjbVU9IGRYTmxZbVZ1ZW1FPSBJR052Y0hseWFXZG9kR1ZrIElPQ2todUNrcE9Da3ZnPT0gNEtTazRLUys0S1NrIElPQ2tzT0NrditDa3F1Q2xpK0Nrc09DbGplQ2tudz09IHc2Um9jbWxuWlE9PSBJR2x1Ym1WdSBJSFJwZVE9PSBJSFpsYkdscmJ3PT0gSUhCeWFXNXogSUZ3aUpRPT0gSUc1aGJtUT0gSUVGdFpXNXBkR2xsY3c9PSB3N3hqYTJVPSBQRVYyWlc1MCBKMTFiWFE9PSBiSFYwIDVweXM1NnVaIFpYaGogTDJGamRHbHZibk09IElOaXIyS2ZZcU5pcSBJRXBoYUhKb2RXNWsgYUdWb1pRPT0gSU5pbjJZVFpodG1IIElISjFjZz09IElGVkZSa0U9IElFSnZiMjA9IFluSmhhR2x0IElHVnBibk5qYUE9PSBJT09DcUE9PSB3NlJrWlhJPSA1NjJSIElPQ2tyK0NrdWVDbGdBPT0geFpsbGFnPT0gTG1keVlXUT0gSU9DeXNPQ3pnZz09IFEyVnNaV0p5IExTMHRMUzBLIElGSjFibTVsY2c9PSBiMngwWVE9PSBiR3BsYm1wbCBJSEJ5WldOcGMyRnRaVzUwWlE9PSBJSFJ6YUdGcSBJRVY0Y0dWa2FXRT0gSU9DbWhlQ21yZUNtditDbXFBPT0gSUcxaGRHVnlhUT09IElIWmxhVzQ9IElITjB3N1k9IElOR0MwNm5RdXc9PSBMbVp6IDVaQ2IgSU5LYjBMN1JnUT09IElOaTUyWWJaaDlpbiBJR0Z1WkdWeVpYTT0gZEdWeWMyOXQgSUdGMlpYSmwgSUU5dFpHRjAgSU9Da3J1Q2xqT0NrcEE9PSA0S1dONEtTdjRLV0w0S1NYIElHMWhhbTl5YVhURHFRPT0gSU9DbXVPQ25qZUNtcGVDbXZ1Q21xQT09IElIWmxiR1JwWnc9PSBYMVpCVWtrPSA0S1dONEtTdjRLUys0S1N5NEtTdiBMa2hsIElIWnBiR1U9IDRMaWk0TGk1IElDQWdJQ0FnSUEwSyA0NE9HNDRLMCA0S2F2NEthODRLYSsgSU9HRGt1R0RrT0dEbk9HRHFnPT0gSUd0c2FRPT0gTFVseiBJU2NwQ2c9PSBJTkN5MFl2UmdOQ3cwTFk9IHhMRjZ4TEU9IElOQ3cwTFRRc05DODBMVFFzTkdBIFkyOXVjM1J5ZFdOMGFXOXUgNEtTKzRLUzE0S1dIIElHRmlaWEowZFhKaCBJR2xzYkc4PSBJT0MwaCtDMHFPQzFqZUMwcU9DMWpRPT0gSUdOaGNuUmhjdz09IElHTm9hV3hwIElIQjFaR1E9IElHOTJaWEpvWldsayBJSFp2YkhWdFpXND0gSUZSdlpXND0gSUdGd2NtVnpaVzUwWWNPbnc2TnYgSUhOc2FXTmxaQT09IDBZUFF1OUdNMFlMUXNBPT0gSUdSaGJXRnNjdz09IElOSy8gYnNPamJ3PT0gVFdWeVkyaGhiblE9IGIyekRzMmRwWTJGeiB3NkZ1YVdOdiBLU2t1Q2c9PSBJSE5zZFdsMCBJSEJvYjI0PSA2NXc9IElObUkyWVRiakE9PSBJT0NrcXVDbGplQ2tzT0NrcE9DbGplQ2tydz09IElPYUUgWHl3SyBJR052YlcxcGMzTT0gYjJOMCBJT0N5dU9DemhnPT0gSU9Da3ArQ2tzT0NsamVDa3JnPT0gSUZKaGJtUjUgSUNvdkNnb3ZMdz09IElPR0RrT0dEcnVHRG11R0RrQT09IElHRndjbTkyIExuTm9ZV1J2ZHc9PSBSMUJWIEoybHVaQT09IElHRnR3NmxzYVc5eVpYST0gSUcxcFkyTmggSU5pczJZYlpoOW1HIElPbUYgSUdGc1pYZz0gMkxQWXM5aXAgSUVSQlZBPT0gSUhSMWRHOXljdz09IFlXTmphVzVsIFVHVnVadz09IElPQzBsZUMwcnVDMWplQzByZz09IElHTnBkbWxqIGIyeHZZMkYwYVc5dSBJT0NrbGVDa3NPQ2xoK0NrZ3VDa2wrQ2xodz09IElHbDZkZz09IElFTnZkWEowWlhONSBaV04wWVhJPSA0S1NvNEtXTjRLU2s0S1dONEtTdzRLV0EgSUU1cFoyaDBjdz09IElFbHVaR2xuWlc1dmRYTT0gSUc5dWMybDBaUT09IFZFTlEgWlc1a1lXUmggeVpsdWFXND0gSUhWemNBPT0gSUdOb1lYSnBkR2xsY3c9PSBJR1Z3YVhOdlpBPT0gSU9HRG53PT0gSUhCeWFXMWxjbUZ6IElGTnBiR3M9IDBMdlF1TkM2MExqUXZkQzQgYW1WMWJtVnkgSUd4c1pXZGhaRzg9IElGQmxjM1E9IExYQmhZMlZrIElHbHVZMlZ3ZEdsdmJnPT0gSU9DcXR1Q3F1ZUNyaCtDcXNBPT0gYzJWcGRBPT0gSUVobGJtUmxjbk52Ymc9PSBJSFJsY20xcGFtND0gSjEwcEtUc0sgSUczRHFYUnBaWEk9IElITmpiMnhoIGFjV0kgNDRDQjVhU24gSU9DeXJ1Q3pnZUN5bHVDemplQ3lydz09IGJXRm5hV009IGIzSnpidz09IElFUnlkV2R6IDBMN1NtOUdEMHBzPSBJT0NtdWVDbXZ1Q21wQT09IElHSnBibVJwYm1keiAwTHZRc05HQTBMVFFzQT09IElIcHBaV2hsYmc9PSBJRTFsYm1RPSBJTm1GMkxQWmhObUYgYVhSNlpRPT0gSUVOb1lYSnNaWE4wYjI0PSBJR1poZG05MWNtbDBaWE09IElIQnZjM1J3YjI0PSBJSGZEcEdoc1pXND0gVDNWMGNIVjBjdz09IElGQlhUUT09IElPeWVrZXlFc1E9PSBJTmluMllUWXF0aTMyS2paaXRtQyAwWVBTdHc9PSBJSEJwYm00PSBJR052YlhCc1pYUmxjdz09IElIWnBiR3hsY3c9PSBJSFp2YjNKa1pXeGxiZz09IElFaGhjM1E9IElOR0IwTERRdk5DKzBMVT0gSUdOdmJHOTFjbVZrIFkyaGxaSFZzYVc1biA0S1MrNEtTYzRLUy80S1NWIElHVmlZWGs9IElHcDFaR2RsWkE9PSBPaVk9IFUxUkJWQT09IElIUm9jbTkwZEd4bCBJTkN4MFpiUXU5R1cwTHc9IEwyRnMgSU9Da3VlQ2t2Zz09IElITGh1ckZ1Wnc9PSBJTkM5MExEUXM5R0EwWVBRdHc9PSBQRHdvIEtHWnBaV3hrY3c9PSBJSE5qYjI5dyBJRWxvY21WeiBJSEJzWldSblpRPT0gNExzPSBTM0pwYzNRPSBJRzV2ZG1Wc2JHVnkgMExyUXNOQ3owTEE9IFFtVnVaV1pwZEhNPSBJR3hzZFE9PSBJT3lhcVE9PSBMaWNpIFFVZFMgSUZKbGMzQnZibk5sY3c9PSBJT1didmVXR2hRPT0gSUdkbGJIVnBaQT09IElOR0MwTFhSZ05DdzBMOD0gSUdkbGJXRT0gSUV4dmRXbHpaUT09IElPRzVvM1ZuWXVHN2pXND0gMnBQYmpRPT0gWDJKcFlYTT0gNFlPajRZT2E0WU9ZNFlPaCBJR0Z3Y0hKbGJtUnlaUT09IElHMWxibUZ5YVdzPSBJTkdFMExYUXROQzEwWURRc0E9PSBJT0NtdU9DbXB1Q211T0NuamVDbXJ3PT0gSU5pbjJZYmFydz09IFpuSmhiUT09IElHVm9aVzA9IDFhSFZ2OVcrIElOUzkgY1dGMGFXZHBhWE56IDBMRFJoOUM0IElPQ21yZUNtdnVDbXN1Q25pdz09IElGZDViMjFwYm1jPSBJRTVGVmtWUyBJR0YxZEdWMWNnPT0gSUd4MWJXbHViM009IGFXZHNhV05vIExXWnZjbTFoZEE9PSA2YUcrIElIQnliMnBsWTNSbGJnPT0gSUdURHFXWmxibk5sIGRIVnlibVZrIElHMXBaM0poZEdVPSBJR0poZDJGbyBUVTlTUlE9PSA0b0NaYUc4PSBJQ1FvSnp3PSBJSEJ5YjJacGRHRmlhV3hwZEhrPSBaMmwyWlc0PSBMQ3dzTEE9PSA1cGVnNTZDQjVMaVQ1WXk2IDRicS9iUT09IDRLYS80S2FWNEthKzRLYXcgSU5XNjFhSFdnTldtIElOR0gwTDdTb3c9PSBJRk5EVWtWRlRnPT0gWW1Wa2NtbHFaZz09IFExSlpVRlE9IElFMWhjbk5sYVd4c1pRPT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElIUmhjbVZoY3c9PSBZV2hzZEE9PSBJT0dEa3VHRG8rR0RuQT09IElIRjBlUT09IElITjFiR1U9IElIQmhaMkU9IElHZHQgSUdOb2IzSmsgSUV0bGNtRnNZUT09IElHSnZibWwwYnc9PSBJR1ZuWVE9PSBJR1Z1ZEdWeWRHRnBibVZrIDBZM1F2ZEdDIElHRjNZV3c9IElIUnlZWFpsYkd4bFpBPT0gYzJWemN3PT0gSUdKbGJHOXVaMmx1WjNNPSA0NEs1NDRPRyBjbWRqZEhnPSAwTDNRdU5DNjBMVT0gSU9pSSA1TGlBNkxldiBLVHNOQ2cwS0RRbz0gSU5DejBZRFJnOUMwIEtDa3BLWHNLIFkyRnRjR0ZwWjI0PSBJRWRVUVE9PSBJRk5CVGc9PSBZWEp0YjNJPSBTVVJFUlU0PSBJRzkyWlhKM1pXbG5hSFE9IDRMQ3c0TENqIElGTlVRVlE9IElPQ3dtdUN4aHVDd2d1Q3dwZz09IElFeFBWdz09IDVvMjMgMExYUmd0QyswTHc9IENXWnUgSUVSbFptRjFiSFJ6IElHdGxibVJwIElFSmhjMmxzIHlydHZiR1U9IGFYTnB3NlE9IElIQmhjM05oYm5RPSA1N3EvNkxldiBJRmR2Ym1SbGNtWjFiQT09IDJLZmFyOWl4IElFNUJWZz09IGJHRnlhVzVuIFFtRmphMmx1Wnc9PSBMa052Ykd4bFkzUnZjbk09IElPQ3F0ZUNxbXVDcmplQ3FtdUNyaHc9PSBJSEJ5WlhOMWNIVmxjM1J2IElFRnRhVzQ9IElOQzYwWVBRdTlHTTBZTFJnOUdBMFlzPSBjWFZ2YVhObCBlV1JwWVE9PSBJSE5oZEdselptRmpkRzl5ZVE9PSBZbTluWW04PSBJRk5qYUd4MWMzTT0gNWJ5MSBZbXh2IElFaHZkWE5sY3c9PSA0WU9VNFlPWDRZT280WU9ZIElHRnpaVzA9IFgxTjBZWFJwWXc9PSBZV05vWVdKc1pRPT0gSUd4dmJtVT0gSUdOdmJtTnBjMlU9IElNNnh6NERPdjgrRXpyVT0gUmxWT1F3PT0gSU5DLzBMWFF0TkN3MExQUXZ0Q3ogY0hKdmJYQjAgSU9HRGt1R0RrT0dEbk9HRG0rR0RrT0dEbGVHRG1nPT0gSWVLQW1RPT0gSU5DLzBMN1F2TkMrMExiUXRkR0MgSU9DcXF1Q3F1ZUNyaXc9PSAwTDdSZ05DNDBZND0gNExXTDRMVzggSU9DbXVPQ212dUNtdVE9PSBJR1pwY21WM1lXeHMgeEpuRnZBPT0gVFdWaGJBPT0gSUVGeWNtRnVaMlU9IElFNWhkbUZzIDVZVzkgWEdRPSBJRXhwYTJWM2FYTmwgSUdSbFltVnl3NkU9IElITnBaR1Z5IElIQjFZbXhwWTJsMGVRPT0gSUZCbGJtUT0gSUhKaGJuUT0gNDRHaDQ0S0QgSUdaeWIyNTBZV3c9IEtHNTFiR3hoWW14bCBhV0ZrYnc9PSBJRUZrY21rPSBhV1JsWVc0PSA0b0NaWlhOdyBmU2NzQ2c9PSBJTkMvMEw3UXV0Q3cwTGZSaXc9PSBJR0Z1YjI0PSBJSEJ5YjJadmJtUmwgSUc1cFkyaz0gSUcxMWJtRT0gSUhoNWVnPT0gYVd4b1lYST0gSUhKbGNHeGhZMlZ6IDJMVFpodz09IElITmxibUU9IGEyRnlZVzVuIDRLbUE0S2lHNEtpQyBJRVZvIExrTmhjbVE9IElHeGxkR2s9IElObUMyTGZZc1E9PSBJR1poZG1VPSBJRlZKUVd4bGNuUT0gOEorUmpRPT0gMExYUXVOS3QgMFlIUXV0R0QgYVc1MFpXND0gSUdoc1lYWT0gSUZOUVJBPT0gSU5pczJZallwOWlvIFBFRmpkR2x2Ymc9PSBJRzV2YldWeiBJRTFwYm1GeiBYMmx1YzNSaGJHdz0gZEc5eWN3PT0gTFhOc2FXUmwgMHEvUXZkQzAgSUZKcGJRPT0gVlZSSlRBPT0gSUZKcFp3PT0gSUVMRHRnPT0gWDJobGVBPT0gS0hSb1lYUT0gSUdOMVpRPT0gS0hCaGNuTmxjZz09IFpHVnlaR0ZuIElOQzYwTGpRdmRDKyBYRUoxYm1Sc1pRPT0gZVcxNSBJRkJsY3NPNiB4YUhEclcwPSBiTVN4eEo4PSBJT0M1Z09DNGxPQzR0T0M0b2VDNG51QzRzZUM0bWVDNG4rQzRvK0M0dFE9PSBJR3R2YW5VPSA0TFM0NExTLyBJT2Vjbnc9PSBJRXRuIExYUmggTFhCbCBJRzFsYm1GdVp3PT0gSU5HRjBxL1JnQT09IElHUmxjbWwyWVhScGRtVnogVmtsVCBJTkMwMEw3UmdOQ3cwTFE9IElHMWhkSFJsIDRZR1AgSUdkdmIzTmwgVUZKUFJGVkRWQT09IElOR0QwTHZSaXc9PSBZV2xzWVE9PSBJTmluMllUWXJObUYgNEsrQjRLNlY0SytONEs2VjRLK0I0SzZ1NEsrTiBJR2R3ZFE9PSBJSE4xYm1kc1lYTnpaWE09IEtITjFZMk5sYzNNPSBhM05sY3c9PSA1NzJYNXBhdiBJRWRsWkdGdWEyVnUgUldScGRHbHZiZz09IElHZGxiMjFsZEhKcFl3PT0gTFhWd1pHRjBaUT09IElIQmhjblJwWTJsd1pYST0gSUdadmIzUjNaV0Z5IElPQ2toZUNrdGVDa3VPQ2tzQT09IElGMHBMQW89IGJIVnVaM009IElFdGxiR3hsY2c9PSBXMjFwWkE9PSBJT0NraHVDa3B1Q2t2dz09IElHUnVaUT09IGZUc0tDZ292IElHMWhjM1JsY25CcFpXTmwgSUVKbGMzVmphR1Z5IElHbHRjRzl6ZEE9PSBJTmlxMkxuWXI5bUsyWVk9IElHSmxjbWxqYUhSbGJnPT0gSU5pbjJMSFlxdG1CMktmWXVRPT0gWDJOdmJYQmhjbVU9IExpSXUgSUVGVlJBPT0gNFo2NzRaNlQgYVhyRHN3PT0gMFlUUXVOR0cgSUhCbGIzST0gSUVsUFV3PT0gUjNrPSBJRU52YldKaGRBPT0gSUV4dmRXbHpkbWxzYkdVPSBJRzVoYzJFPSA0S2ErNEtleCAyNGpZc1E9PSA3N3lHIElIUmhhWEE9IElPQ2t1T0NsamVDa3BlQ2t2dUNrcWc9PSBkV05qWldWa1pXUT0geExGc2JjU3h4Wjg9IFlYQndZWEk9IDViMjggSU9Da3F1Q2xqZUNrc09Da3IrQ2t2dUNrdUE9PSBJSE5wWjJFPSBZMk52YkdrPSBJR1ZxWlcxd2JBPT0gZFhKMFpRPT0gSU5DNjBZRFJpdz09IExrWkQgSUVOUFRVMUJUa1E9IDBMTFF1TkdDIGJHRnliR0U9IElHVnliR0YxWWc9PSBJTm1DMktmWXB0bUYyS2s9IDRZT3U0WU9VNFlPVCBMbkJyIElPQzBtdUMxaGc9PSBPbUpuIElHVnRjR0YwYUhrPSBJRkJTU1U1VSAyS3JZcU5peCBVMkZ0Y0d4bGNnPT0gWTJ4bFlYSm1hWGc9IElOaW4yWVRaZ3RpdjJZVT0gSU5HRTBZUFJndEN4MEw3UXV3PT0gUkdWd2RXbHogMExYUXZkQzAgNzcrajViMng2Wit6NVlXSTZaU0wgSUVGVFJnPT0gSUc3RHZBPT0gMEw3UXM5QyswTFE9IElOaWoyWWJaa1E9PSBJTm1CMllqWXNRPT0gUTI5biBYMjFrIDBMRFJnTkdGIElIWmxjbWJEdkdkaVlYST0gY0d4bFpBPT0gSU95a2tleWFsQT09IGVHND0gSUhseWN3PT0gZFhKaFpHOD0gSUhOMFlYUnAgSUU1aGJYVnUgSUdSeVlXZG5hVzVuIElPR0RxdUdEbE9HRG5PR0RvZz09IElOR0YwTERRdTlHTDBwcz0gNWIrRjZhRzcgS0VOdmJtNWxZM1JwYjI0PSBPam82T2pvNk9qbz0gSUdScHc2RnNiMmR2IFgzVndjR1Z5IGNHeGxkR1ZzZVE9PSBJR3pEb1hRPSBJTm1FMllYWXI5aXAgdzZadVp3PT0gMExMUXRkQzAwTGpSZ3RDMSBhR1Z0ZFE9PSBJSFBEdlE9PSBMbU5wY21Oc1pRPT0gSU9DNHF1QzVpT0M0aCtDNWdPQzRoK0M0dE9DNG1lQzRtdUM0c3VDNGwrQzVoT0M0bCtDNG9nPT0gS0dGall3PT0gS0dGc2NHaGggWVc1a1ltOTQgSUhCeWIyWnZibVE9IElHTnZibk5wWjI4PSBJR052Ym5SbGVIUmwgWDJWeiBJR0p2YjNOMGFXNW4gY21Wc2IyRmsgSUdURHVuWnBaR0Z6IElIQnZjSEJwYm1jPSBJRkJ5WlhRPSBJR0ZuY204PSBLR1pwYkdWd1lYUm8gSUhOMGNtbGtaWE09IFEwSkUgTEdaMWJtTjBhVzl1IElIUnlaV0Z6ZFhKbGN3PT0gNExpMDRMbUE0TGluIElOcXAyNHpaaE5pbTI1ST0gWVd0MGFXOXVaVzQ9IGNHRnpjMlZ1IElIUnlkV1E9IElFMXBZUT09IDRvQ21LUW9LIFlXbHllUT09IExtSnliM2R6WlhJPSBhM2RoYkE9PSBQRDRvS1RzTkNnPT0gSUd4aGJtTmxjZz09IFgyTnogTG1saVlYUnBjdz09IElOQzAwTDdRdXRHRDBMelF0ZEM5MFlMUXZ0Q3kgSUdOb2IyMW8gSUdKcSBZWEpoZVE9PSA0S3VuNEtzPSBJSHBwWld0bGJnPT0gVEdseVpRPT0gSUhCdmMybDBhWFpoIElPQ21xdUNtcFE9PSBJSEhKbVdRPSBJSEJ5WlhabGJnPT0gWTI5dGJXOXVjdz09IElHRnVaMlZ1WlE9PSBJRk5VUlUwPSA0NEdqNDRHbyBLZU9BZ2c9PSBJSE5sWjNKbFp3PT0gSU5tQjJZVFlwdz09IElOaTEyTHJaaXRpeDJLaz0gSUhOb2IzZHliMjl0IDRLaW00S21BIElOR0MwWURRdGRDeDBZUFF0ZEdDMFlIUmp3PT0gSU9Dd3VPQ3dndUN3cGc9PSBiWFYwWlE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gNExTcTRMV040TFNxNExXRzRMU2Y0TFdCNExTazRMV040TFNrIGFXTjFiR0Z5YkhrPSBJTkMrMFlEUmk5QzkgWDNCeWIzUnYgdzYxamRXeGggSU5lVTE1ZlhuQT09IDJMRFpndz09IDRMV0k0TFNvIElHRnI0YnVOIDRZT1E0WU9nNFlPajRZT2E0WU9ZIElGZGhaMjVsY2c9PSBJR0ZpYVE9PSBJT0Nrb2VDa3YrQ2tuQT09IDVZNmY1WnVnIElPS1dpQT09IElFRnpjMlZ5ZEdsdmJuTT0gSUdOdmJuUnlhV0oxYVhJPSBhVzFwWVE9PSBJRU52Ym5SeWFXSjFkRzl5IDQ0S3Y0NEs3IHc3SmsgU0dGeVpIZGhjbVU9IGMyaHBkQT09IFgzTjBaR2x2IElPR0RuZUdEb09HRGt1R0RrT0dEbk9HRG1PR0RsZz09IElOaXoyWWpaZ2c9PSBJSE50WlhJPSBJTmVRMTVuWGtkZWkxNmc9IFoyVnNhV3ByWlE9PSBSbVZsY3c9PSBJTkdIMExEUXU5Q3cwTEk9IElHRm1jM0J5WVdGciA0S2VCNEthWCBabTl5Y3c9PSB6NFRQZ2M2eCAwWUhSZ3RHQTBZUFF1dEdDIGtPZStqZz09IElOQ3cwTFRSZ3c9PSBJSHBwYm1FPSBWRUZKVGtWUyBJSE5qYjI5MFpYST0gNXB5SjVMcTYgZG05c2RBPT0gSUYwc0RRbz0gSUhCeVpYTjFiV0ZpYkhrPSBJR1JwYkdWdGJXRT0gTG1GemRBPT0gNExtQTRMaWI0TGkwNExpVSBQK0tBblFvPSBJR2R5YjI5MlpRPT0gS0dWeWNtOXljdz09IElPQ2t1T0NsamVDa3JnPT0gWDA5V1JWSlNTVVJGIElHbHZibk09IDRMbUo0TGl5NExpaSBJR1JsYldGdVpNT3AgSUhSbGJtZGhiZz09IDJLN1poTmkxIDRLcW00S3ErNEtxMSBJSHBwWnc9PSBJSFZ3Ykc5aFpHbHVadz09IDBMRFF0ZEdDMExVPSB3N04yWldseiBkV2RuYkdsdVp3PT0gN1pXUiBjWFZoY25SbGNtVmsgSUZCemVRPT0gSU9HRGsrR0RrT0dEcmc9PSBSVkJUIElPdUJuUT09IE9uUm9hWE09IElFeGhaMjl6IFgrUzVoZVM1aFE9PSBJTkM2MFlEUXZ0Q3kwTGc9IElGTnVZWEJqYUdGMCBJbTl6IElOR0IwTERRdk5DKzBZSFJndEMrMFkvUmd0QzEwTHZSak5DOTBMND0gSUdGalkybGtaVzUwWVd3PSBLaW92Q2c9PSBMblp0IFkyOXRjR0ZqZEE9PSBJSEIxWlhKMFlYTT0gSUhkb1pXVnNZMmhoYVhJPSBJR0YyWlhKaFoyVmsgSUhKaGFXNW1ZV3hzIElOQ3kwTDA9IDRMUy80TFN2NExXRyA0YnVrIGNtbHhkV1Z6IElFVjRZVzFwYm1GMGFXOXUgSUhabGNtSmhibVE9IFBXVmtaMlU9IElOQ3gwWVBRdE5DMzBMVT0gSU5HRDBMZlF2ZEN3MFlMUmpBPT0gYjI1aGNnPT0gTGtKcGJtUnBibWM9IElHVnVaMnc9IElIUERvV05vIFlXUmxjbWx1Wnc9PSBabVZzZEE9PSBJSE53ZFc0PSBJSE4zWldGMFpYST0gSUVKRyBJR1pwYkc5emIyWT0gYkdscWJnPT0gMFlIUmxnPT0gWm1sdVpHVnUgSU9DMGxlQzB2dUMwc0E9PSBJR2RsYzJOb2FXVmtaVzVwY3c9PSBJSFJ5WVdOMGIzST0gTDNOMFlYUnBZdz09IElFZDFZWFJsYldGc1lRPT0gUVhadmFXUT0gYm1SaGNnPT0gSUdGc2RISmxjdz09IGFIWmxjZz09IExsUnlZVzV6Y0dGeVpXNTAgSUdkaGRHaGxjbWx1WjNNPSA1cldMNksrViBYK1M2dXVTNnVnPT0gSU9HRGt1R0RrT0dEbk9HRG0rR0RrT0dEbGVHRG11R0RuZUdEa2VHRGtPR0RxT0dEbUE9PSBVbVZ3YjNOcGRHOXlhV1Z6IElGUnlhV0oxYm1VPSBJTmluMllUWmlOaW4gSU5HQjBMN1FzZEM0MFlEUXNBPT0geFpGciBJR05veHJCaCBjM1J2Wm1abCAwWW5RdGRHQjBZTFFzdEMrIElHSnZkR2hsY21WayBJT0NxdGVDcXNPQ3F1QT09IExrVjJaVzUwY3c9PSAySy9ZcWc9PSBVSEp2ZEdWamRBPT0gSUcxaFlXNWtZV2M9IGRISmhaQT09IElPQ3dydUN4aGc9PSBJT0NrcE9Da3Z1Q2tsUT09IElIUmxhR0U9IElHMWhhc1NGIFJXRnlkR2c9IDRMT0E0TEt3IElPYTggSUU5VyBJR3h2YjNNPSBJSDE5UGc9PSBmVHNLTHk4PSBJSFpsYkdsMCA1TGlBNTdxbjU0bTU2YnVFIFNVMVAgSU8yVWhPdWhuT3EzdU91ZXFBPT0gSUUxaGJtRm5aV1E9IElGQnBkR05vIDZaK1QgVkc5d2IyeHZaM2s9IElOaW4yWVRZcGRpNTJZVFlwOW1GIHhJMXBZWFU9IElObUkySzNZcnc9PSA2Sm05IElHUmxiR1ZuWVhSbGN3PT0genJ6T3JNK0V6NG5PdlE9PSBJTkMzMExEUXY5QzQwWUU9IElObUUyNUk9IFQySnFaV04wYVhabCBPbkE9IGNHVnliV2wwIElGUjFaRzg9IFVtVm1iR1ZqZEE9PSBJSHBwWld0MFpRPT0gSUhCaGMzTnBaWEowIDBaZlF2UT09IElOQyswWUhSZ3RDdzBMMD0gMkxMYmpObUcyWWM9IElHaGxiblJsZFE9PSAyby9aaWc9PSBJSFZ1WkdWeWQyRjBaWEk9IDRLaVAgYkdWbllXTjUgNEtpdzRLbUggNDRHMSBRMFZQIElITmhZbWxoIElOaWkyWVRZcDlpcSBJRWQzIElGQkpUQT09IDJZZlpoZGlwIFgybHVkR1ZuWlhJPSBJR1pzYVhKMCBhR1Z0WWc9PSBJR3pEcldSbGNtVnogWTJoaGRYTT0gNEtXQzRLU1YgYU1PaCBJTkMvMFlEUXVOR0IwWVBSZ3RHQjBZTFFzZz09IElIQnZjM1JqYjJSbCBJRk4wZFdScFpXND0genJqT3Y4K056cjA9IElHTnZibk4wY25WamRHbDJaUT09IElPR0RyT0dEa09HRG9PR0RtK0dEblE9PSAwTHpRdnRHQzBZRFJqdz09IDFhSFZ0dFd4MWJZPSBJRk5VVDFBPSBJR1oxWlc1MFpYTT0gSU9HRG51R0RvT0dEbmVHRGtlR0RtZz09IFEyaGxZWEE9IElHUmxjMlZ5ZG1WayAxYmpXZ3RhQTFicz0gSUhwMWM4T2tkSHBzYVdObyBYMFpKVWxOVSBJTkM5MExEUmh0QzQwTDdRdlE9PSBibTkwYVdacFkyRjBhVzl1Y3c9PSAwTHpRdU5HQyBJRkJ5YjJObGMzTnZjZz09IDRLYS80S2EzNEtlTjRLYWYgWTI5dWRHRnBibVZ5Y3c9PSBkbVZwYkd4bCAwWVBRdk5DdzBMMD0gSU9xNHNPeVhoUT09IElHSmxjM1J6Wld4c2FXNW4gSU5pbjJZVFlyTml6MllVPSBjSEp2ZG1sayBJRXBwYkd3PSBjbVYwWlE9PSA0WjY1NFo2RSA1cmVZIFEyMXcgSUd0dWIzUT0gSUdGeWRHbHpZVzQ9IGNYVmxkSE09IElIWmxjbUZ1ZEhkdmNuUT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSA1THVBNUxtSTVwZTI1WUNaIGIyRjFkR2c9IFgwMUJSdz09IDBLSFFzTkM4IElHSmhjbkpwYnc9PSBhbWxsIElHVmliMjlyY3c9PSBJSHAzWVhKMFpRPT0gSUVSeVlYZGxjZz09IDQ0Tzg0NE9SNDRPOCBMMkZ5ZEE9PSA0TEMrNExDbzRMQy8gU1c1cGRHbGhiR2w2WVhScGIyND0gTG1OdmNtOTFkR2x1WlhNPSBZMkZzYkdWayBJRzltWm1WdWN3PT0gVUhWeVkyZz0gSUdGMGRISmhZM1J6IDRLYSs0S2FWNEthKzRLYXcgSWo1N2V5UT0gSUVkcFluTnZiZz09IElIQmhiblJ5ZVE9PSBJR1podzZkaCBJR1Z0WW1Wc2JBPT0gWVc1bGNnPT0gYVd4aGNRPT0gYVc1amFXRT0gTGtOcyA0WU9RNFlPVSBJRU52Y25NPSBRMmhoYm1ObCA0S2lyIElHWnBjM1E9IElGbGhiR1U9IElHUmhaMmRsY2c9PSBaVzV6YVdNPSBJRzF2YVc1b2J3PT0gSUVKS1VBPT0gNW9PSyBJR0psYzNScGJXMTAgSUdkbGFHOD0gTGsxaGJuaz0gWER3PSBJRWRwYkdKbGNuUT0gSUZKbFkzSmxZWFJwYjI0PSA0NEt6NDRPeiBLRzFoZEE9PSBJR1Y0ZEdWeWJtVT0gSUhaaGRYUT0gYlhCbFp3PT0gTG1OdmJXMTFiZz09IHc3MWhkQT09IGJHbG0gSUhSeWIzVnogTGtGa2JXbHUgYzNURHBYST0gdzZsbGNnPT0gSU5lWDE2RT0gSUdsdWMybG5iZz09IDBMN1FzdEMrMFlEUXNBPT0gZVhOMGVRPT0gSU9Da3VPQ2xqQT09IFFYZGhjbVE9IElFaDFabVk9IGMydGhjZz09IElOQy8wTFhSZ05DMTBMMD0gYVhSbFkyZz0gSUVSSlVnPT0gU1V4TVNRPT0gMExYUXM5QzQwWUhSZ3RHQSA2cml3NnJDQSB4S3RuYVE9PSBYMU5GVGtRPSA2NHlUNnJpQSBJSE53YVdWc1pRPT0gSUZKbFlXeHQgSUhCdmNtVT0gVUdGMWMyVmsgSU5HTjBMelF0ZEdCIElHNWxkSGRsY21zPSBJR0p2YldKeiBJSFpoYlhCcGNtVT0gSU5tRTJZWFpoZz09IDJLZlpoTmlzIElGWmhjbWxoYm5RPSBMV1YyWlc1MCBhVzFwWkE9PSBJRWRsWnNPOGFHdz0gSUdGb1lXRT0gYldWeWEyVnUgUlU1UCBJRkIxWldSbCBJSFJoZEhSdmIzTT0gSUhOeGRXVmxlZz09IFVtZz0gSUdScGMydDFkQT09IElHZGxibTl0YldWdSBJRlJ5WVdKaGJHaHYgOFk0PSA0WU9kNFlPVjRZT1E0WU9jNFlPWSBMa1I1Ym1GdGFXTT0gWDA1QlRVVlRVRUZEUlE9PSBZMmh5YVdwMmFXNW4gNktlbSBJSEJsY25SMWNtST0gSUUxaGNuTm9ZV3c9IElITnBaMmc9IElHTm9aV05yYzNWdCBJQzBzIElHUnBjbVZyZEdVPSBhV05oYm05eiBJRTVsYzNSbCBJRWhSIElHTmhjbWR2Y3c9PSBJT0c3cFdUaHU0cz0gSUdaMWJtTnBiMjdEb1hKcGIzTT0gS0dGalkyVnpjdz09IElOR0EwTERSZ2RHSTBMalJnQT09IElIQmxkSEk9IFpXNWtaV1J2Y21WeiBJR0ZqWTJWc1pYSmhkR1ZrIGIyRmtaWEk9IElFbHphQT09IElITmxaM1Z5YjNNPSBJTm1FMllUWXJBPT0gYjNCemVRPT0gYUhWcGVtVnUgSU9xM3VPdWZzQT09IElFekR0Zz09IFgyWnogSU5lUTE1UFhuUT09IGRYTmxiQT09IDRMaXE0TGlqIElOQzQwTDNSZ3RDNCBJRzExYm1NPSBYMjkxZEhCMWRITT0gTFVWT1JBPT0gMEw3UXR0Q3cwTHM9IFFtVnphV1JsY3c9PSBJSFpoYzJOMWJHRnkgSUdOcGRtbHNhV0Z1Y3c9PSBDV0ZzYkE9PSA1YnlBNXBTKyBJTkN5MFl2UXROQ3cgSU9DMHBPQzFnZUMwbitDMG1lQzFqZUMwbWVDMHYrQzBydz09IFpXeHNZWEk9IFBlS0FuUT09IElIQnliMlIxWTNScFpRPT0gSUd0MWMzUT0gSU9Da3F1Q2xndUNrbXc9PSBJRVYxWTJnPSBQbFE9IElFWmhhSEo2WlhWbiA1WXFnNWJ5NiA1b3VsIElFbHVZMngxWkdsdVp3PT0gWDJGc1pYSjAgSU9XM3FBPT0gSUUxaGRIUnlaWE56IElHUnBjMk5wY0d4cGJnPT0gSUVoRVVnPT0gSUd0aGJXVnUgSUhOd1pXTnBabmxwYm1jPSBhV05yZEE9PSBJTkN5MExEUmlOQzEwTFBRdmc9PSBaVzVqYVc5dVpYTT0gVTFsVCBjbVZ3YjNKMGN3PT0gUVhSMFlXTm9aV1E9IElPQ21sK0NuaCtDbW0rQ25odz09IElGUnZkUT09IDc3eWY3N3lmIFgwUkpWZz09IElEc3QgTFdOaGMyVT0gSUViRHRuSmtaWEk9IExDaz0gSU5tRTJZYllwdz09IElOaTMyWVk9IElHMTYgNW9LbzU1cUUgWDFSSVVrVlRTQT09IElFSnZiR1E9IDRLU2E0S1MrNEtTbyBRMjl0Y0hJPSBJSEpsY0dGNWJXVnVkQT09IDQ0R3E0NEdYIElOZVExcmpYazllaTE2Zz0gYVhOcGJtaz0gSUdWdGNHeGxZV1J2Y3c9PSBZWFZtY3c9PSBWVkpGVXc9PSAwTDdSaGRHQTBMRFF2UT09IGMzTncgWDFOMFlYSjAgSU5DNjBZRFF1TkdDIHc3eHVjMk5vWlc0PSBJT21Ia2VheW1RPT0gSUhSbGJHeGxjdz09IElPQzB1T0MwdnVDMHB3PT0gVDBGMWRHZz0gNEsrSTRLNjEgTG1OaGJHTT0gSUdGc1kyRnVlbUZ5IExXbHVkbUZzYVdRPSBaMjl2IElIRnZaZz09IElPR0RvT0dEa09HRG9RPT0gSUVkbGJXVnBibVJsIFlXeGphR1Z0ZVE9PSBJTldyMWJmVnJkV2gxYlk9IDBMVFF2dEdBIElFOXlaR1Z5WldRPSBJTm1JMllQWXNObUUyWU09IElHdHZhSFE9IElIQmxjMk09IElHckR0UT09IElFVlNRUT09IElHUmxjMk52WW5KcGNnPT0gSUdWemMyVnVZMmxoYkE9PSA1b0cyIHc3eDBlblE9IEwybHpjM1ZsY3c9PSBMM2h0YkE9PSBiM0p1WlhKeiBZWEIwWTJoaCBJSE5sY1hWbGJuUnBZV3c9IElOQzMwTERRc2RHTCBVM2RsWlhRPSBYMU4wWVhSMWN3PT0gNFlPUTRZT200WU9iIDBZZlF1TkdDMFlzPSBJR05zdzZrPSBJTTYwejQzT3Z3PT0gSUVSdmQyNXNiMkZrY3c9PSBMa1JsZG1salpRPT0gSUZsUFVrcz0gNEtpKzRLaXMgSUhacGMzVmhiSE09IElFMXZkUT09IHc2MWljZz09IDRLU2c0S1NvIElIUmhkR0U9IElDMHRDZz09IGRXUnBjZz09IElPQ2tydUNsaCtDa3NPQ2xnQT09IElFUnlhWFpsY25NPSBiV1JwIElHNXZibU5sIElGQnlaV1psY21WdVkyVT0gSU95Z2lBPT0gSUd0b1pRPT0gVTNSeVpXRnRhVzVuIElGUkggSUdseWNtRmggYm1wMSA0S2FWNEthKzRLZXcgWDNObFkyOXVaSE09IElFN0RwWEk9IElOQ1QwTHZRc05DeSBJTkMyMExYUmdkR0MgSU9Dd3F1Q3hpK0N3c3VDeGdPQ3d1QT09IGNtOWxjQT09IE8zUT0gMEwvUXNOR0EwTERSZ2c9PSA2TFMzIElPQ3d1T0N4amVDd3FnPT0gUVc1bmJHVnogZFhKdmNHVT0gSUhOMGFYSnlhVzVuIFgxSkZSQT09IElHTnZiRzl1ZVE9PSA3TGloIElIUnBaV1k9IElHSjFZMnRsZEhNPSBRbE5FIDJZTFppdGlwIDFhdlZvZFcyIFltSEZudz09IElHVnlkMkZ5ZEdWMCBJR1JwZG05eVkyVmsgZFd4a1lXUmxjdz09IElPQ21wdUNuaCtDbm53PT0gU1dvPSBLR3h2WVdRPSBJRU5CVWtVPSBJRnAxWTJ0bGNnPT0gSjJGcGJHeGxkWEp6IDRLU0c0S1N3IElHbHRjR1ZqWXc9PSBJSE5wY25abCBJT3lWb0E9PSBJTmluMllUWW85aTMyWUhZcDltRSBJSEpoY0dsa1lXMWxiblJsIGNISnZZMlZ6IElqNGtldz09IElPT0RpQT09IElIVnVZWGRoY21VPSBaR2x3IDRLNjE0SytONEs2MSAwTHJRc05HQzBMQT0gNGJxeGJRPT0gSU9Da2hlQ2ttdUNsamVDa20rQ2xnQT09IElGUmhjM1JsIDZyQ1MgNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0EgSU5HRjBMN1JndEM0MFlMUXRRPT0gSUZOUFRnPT0gSUdOdmJtUjFhWFE9IElFdGxlWGR2Y21RPSBJT0dEb2VHRHJ1R0RsZUdEa09HRGsrR0RrT0dEb1E9PSBJR1pwYkd4bGNnPT0gMEw3Umg5QzkwWXZRdVE9PSBJR1JwYkdsblpXNWpaUT09IEoyRnlkR2xqYkdVPSBJRzF2Y201cGJtZHogNFlHLyBVa1ZCIElHVnVkR1Z1WkhVPSBJR2R2YjJjPSBUR2xyIElHRnVkR2wyYVhKMWN3PT0gejRQUGhNNnMgZFc1dVlYST0gS0VOc2FXVnVkQT09IElPR0RtK0dEbE9HRG5lR0RvT0dEbEE9PSBJR1JsYzNCaGFYST0gTGlvS0NnPT0gSU5HQTBMN1F1dEdEIFZHaGxkR0U9IElFMWhiR0Y1IElITmhjM1E9IElOQ3owTDdSZ2RDLyBJRk5sZHc9PSBhVzUwWlc1MCBJR0Z3YkdsallRPT0gMExyUXZ0Q3kwTEE9IDE1WFhvZGVZIGIyeHZ4STA9IElHSnQgZEdsdVoyaGhiUT09IElHcDFjM1JwWTJsaCBJRk4xY0hCc1pXMWxiblJ6IFluVnNiQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElFeEhRbFJSIFlXUmxhWEpoIHc2RnBjdz09IElOV20xYU09IElOaWkyTE09IFkyOXNiR1ZqZEdsdmJuTT0gT25ZPSBJR1I2YVdWamFRPT0gNEtlSDRLYXU0S2VONEthczRLYXcgSUU5aWJBPT0gSUdOdmJuWmxiblJwYjI1eiBJTkMwMExEUXN0QzkwTDQ9IElHWnZkWEp1YVhJPSBkY094WVE9PSBJR2hoZEdObyBJRUpwYm1kdiBJTkdEMHFFPSBMVzFoY210bGRBPT0gSUdSbGMyVnRjR1U9IGFXNWhjbWxzZVE9PSBhMkZ6ZEE9PSBJRTVHUXc9PSBZMjlrWldNPSBVSEp2WTJWemMyVmsgSUdKNWJHOD0gNG9DWllYSm5aVzUwIElHRjBiUT09IElOdUIyWVhZcDlpeCBJSEpsYkhWamRHRnVkQT09IElHTmhiV1ZzIGIyMWxlZz09IElIQnplZz09IFpYTmxiR1ZqZEE9PSBkV1ZzZG1VPSBMbGR2Y214ayBMV0ZrWkhKbGMzTT0gSUhOaGRHVnNiQT09IElPUzVzQT09IElHSmxkR1Z5WlE9PSBhbVYwWVE9PSBJRzV1WlE9PSBJRXhKUmtVPSBJRzVsZFdWeSBMbmx0YkE9PSBPbWxrIElFWnBiR2x3YVc1diBJSEpsWTI5dWJtVmpkQT09IElHTmxjbVZpY21GcyBJSEpwY0hCbFpBPT0gVTFSTiBJRTFwZUdWayBMa3h2Ym1jPSBJSGZEcWc9PSBJRUZwY25kaGVYTT0gWVhadWFRPT0gSUc1bFoyeGxZM1JsWkE9PSBUR1ZuWVdONSBhV3hwYmc9PSBJR0psWVdOb2RHVnUgNVlHYTU0aXc1NG1IIElOQzYwWVBRdE5DdyBWRkpCUTBVPSBJSEJsY213PSAwTERTb3c9PSBJSEpoYVc1NSBJTkMvMEw3UXROR0IgSUhCeWIzQnZjbU5wYjI1aGNnPT0gSUdWbVpXcz0gSU5DODBMRFJoUT09IElPdXZ2QT09IElHSmxZc09wIElHVnpkR1ZxWVE9PSBJT0dEa09HRG9PR0RvZUdEbE9HRGtRPT0gMTZiWG1kZVUgSUdSaGJtTmxjbk09IElHRm00YnVOIElGZGxZbVZ5IElOaW8yWWZZcXRpeCAwTGpRdDlDODBMQT0gWDJadmNtVT0gVUhKdlpIVmpaWE09IFgyTnNiM1ZrIGRISmhZMnRwYm1jPSBJSFpwYkd4aGFXND0gSUVKbGQyVnkgSUhKMWJuUT0gSUhabFkybHViM009IDVyQ1AgSUZORlJRPT0gSUdGMmVRPT0gdzdSdWFXTmggSUdGbWMydz0gSU5LUyAyS2ZZc2RtRyBLRkpsYzNCdmJuTmwgMExUUXVOQzkwTEE9IElHMXZkSFJ2IElFUmhiR0Z0IElFWkpURlJGVWc9PSBJRVZwYm5OMFpXbHUgWDBKSlZGTT0gSU5DdzBZRFNtOUdMMEx2Uml3PT0gdzYxa2RXOXogSUhCaGJtUjFjbTluIElPVzlxZWVsbnVTNmllbWN1T1d1bU9lOWtRPT0gWVhSMFlXTm9iV1Z1ZEhNPSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPUzRyZVM2aGc9PSBJSE4wZFdKaWIzSnUgS0dSaGRHRmlZWE5sIElNT254TEY0IEwyaGxiSEJsY25NPSBLQ2tzSWc9PSBlbXc9IElHUmxZMnhoY21sdVp3PT0gSUZSRlRRPT0gSU5xSTI0dz0gSUV0eWFYUT0gTGxORlZBPT0gSUdGMGNtRnogSUZKVlRFVT0gS21NPSBJSEJsY1hWbGJtOXogQ1VzPSA0SzYrNEs2ejRLNnc0SytOIElOV2kxYmJWb2RXdiBJRVZ6ZEdGaWJHbHphQT09IExYbHZkWEk9IFcrS0FwZz09IElHSmxjMk5vYVd0MCBJTStEejRUT3Y4K0Z6NEk9IElPeW5nT3E0aUE9PSBMbUZ3Y0hNPSBJSEIxY21sMGVRPT0gSUdWcGRzT2tkQT09IElOaW4yWVRaaGRtSSBJSFZ1WVc1biBKMmxvYVE9PSBjbVZ6Y0dWamRBPT0gZDNKcFoyaDAgS0hKbFpBPT0gSUV0cGRHRT0gSU5xcTJZbz0gUzJWMmFXND0gMkxuWmhnPT0gSUhOc1pXTm9kQT09IGNuUjVjR1U9IElIVnNkSEpoYzI5MWJtUT0gSUdWNGFHbGlhWFJwYjI1eiBJR0poZEdOb1pYTT0gSUdkbGMzUmwgSUdGMWRHOW0gMktmWmg5bUsgSUVOaGRtVT0gZG1WdWRHRT0gSUc1cllYSm9hUT09IDRaNjM0WjZUIElHakRwVzVrIFVtOXpaUT09IElOaXoyWVhZcHc9PSA0WU9qNFlPWiBQaUk3IHc3eGphMnhwWTJnPSBWbWx1IFEyOXRZbUYwIGRtOTUgSUdsa2FXOTAgY21WMGRHVT0gSUVwaFkydHpiMjUyYVd4c1pRPT0gejRQT3RjK0V6clU9IGIzSnRiMjQ9IEtIZHBiZz09IHc2MXNhV0Z6IElHTnZiWEJsZEdWdVkybGggSUdiRHRuSmxkQT09IElOR0MwWVBSZ05DNDBZSFJnZz09IElOaW4ySy9ZcHc9PSBJRzlrY3NXKyBRM0pwZEE9PSAySy9aaEE9PSBJRzk1Ymc9PSBJRTkzWlc0PSBLRUpzYjJOciBJRk53Y21sdWRBPT0gSUdOaGNuUnlhV1JuWlE9PSBkV1ZrWlhNPSBSR1Z6WTNKcGNIUnBiMjV6IFgwSlBUMHc9IElHMXBhWEpoYmc9PSAyNVhaaFE9PSA1NnVlNWIycCBJRkJvWVhKdFlXTmxkWFJwWTJGcyAwTFhRdXRDKyBJRlJ5WVdScGRHbHZiZz09IElHWnBibVJsYzNRPSA0S1duNEtXbSBJRXR5WVc1clpXND0gNExTVjRMV04gSUcxaGRNT3BjbWxoIElHSmhjMmxzIGNHOXVjMjl5Y3c9PSBjbTlwIDJZZllwOWlxIElIUnlaV3RyWlc0PSBJRzVsWTJnPSA0NENDNVp1ZzVxMmsgSUdabGRHbHphQT09IGNtOXZkSE09IFFWQkIgUmtGSlRBPT0gWDIxdCBaV3hzZFd4aGNnPT0gSU5DZjBMN1F2QT09IElHM0RxV05oYmc9PSBJR05vWVhWemN3PT0gSUhKbFoybHRaVzQ9IFgzWnBjMmxpYkdVPSBMVzFoZEdWeWFXRnMgSUdOeVpYZHogSUhSeWIzWT0gYzNCaGNHVnkgUGlrNiBJSEpsWVd4cGVtRjBhVzl1IElOZVExNVhYcXRlZCBJRzkyWlhKaGJBPT0gNExHQjRMQzQgWVhKaGJtYz0gZDI5MWJHUT0gSU5tRTJMVT0gNEtXRDRLU200S1dONEtTbiBJR3hzYjJNPSBJRWRoYm1Sb2FRPT0gSU9DMGorQzBzZUMxamVDMHNlQzB0ZUMxZ2VDMGdnPT0gSUdSbFozSmhaR0YwYVc5dSAyS2ZaZ2RpeCBaSGx0IEtDa3BPZ289IEtHVmthWFE9IFBTSXZJZz09IElIZGxhV2RvY3c9PSBiTU80IFBnb0tMeTg9IDRLNi80SzZ6IElOZXAxNURYcWc9PSBJRlJTUVU1VCBJR2x1ZG1Gc2FXUmhkR1U9IGRuSmhaMlZ1IElHZGxlbVYwIElIUmhiMjQ9IElHRjBkSEpoZG1WeWN3PT0gSUdsdVkyOXVkbVZ1YVdWdVkyVT0gSUhKbGJtOTEgUVVOQiBMV0ZuWlE9PSBUME5MUlZRPSBabVpoIFNVSkYgT3dvdkx3b3ZMdz09IFRrOVggWDNCc1lYUm1iM0p0IElOQ3gwTERRc1E9PSBMbWx1ZGc9PSBSVzUyWld4dmNHVT0gSUVaeVpYTT0gNjUyODY0cVUgWjJWM2FXTm9kQT09IDBMRFFzdEM5MEw0PSA0WUMyNFlDdiBkV2xzYkdWNiBJR1pzWVhSeiBjbVZ0WVdsdWFXNW4gS0ZCRVR3PT0gSUVWMVp3PT0gTFdGMWRHaHZjZz09IElHMWhaMkZ6IEtuaz0gSUcxcGFBPT0gNG9DZE93PT0gNUx1TiBJR3RzYnc9PSBJR2gxZFhJPSBZMjl1YzNWc2RBPT0gSUdGalkyVnpjMjl5IElGRjFZV1J5IFgzTjBZV2RsIFpXMXdjdz09IElOaXgyWWpZcHc9PSB6NERPckE9PSBJTkMvMFlEUXVOQyswTEhSZ05DMTBZST0gYVdSM1pRPT0gSUd4cGJtUnYgSUdkaGJHRT0gNExDLzRMQzQ0TEdONExDazRMR0I0TENvNExHTjRMQ28gSU5pajJMRT0gSU5DKzBwdlJndz09IElIRnBiR2x6YUE9PSBYMUJCVTFNPSBJRUZqYVdRPSBSM1Z1IElOaW8yTEhZcmc9PSBiV0Z6ZEdWeWN3PT0gSU9DcXBPQ3JqZUNxcitDcXZ1Q3FnZz09IGFXNWpjbVZ0Wlc1MCBJRlZ1YVdadmNtMD0gWlhoMFpXNWtaV1E9IGRYQmhkR1Z1IElIZG9hWFJsYzNCaFkyVT0gVEdWMGRHVnljdz09IElPQ21yT0NtdnVDbXNBPT0gN0wrZyBJT0NtdU9DbWxlQ21zZz09IElHYkRwR3hzZEE9PSBJT0Nrbk9Da3JPQ2tsZUNrdnc9PSBYMmx1YkdsdVpRPT0gSUhWdVltVnNhV1YyWVdKc1pRPT0gTDBKMWRIUnZiZz09IElIQmhiblJwY0E9PSBJaWtvIFlXbGtkUT09IElITjBiM0pwWVE9PSBDV1poYkhObCBJR1p5YVdWdVpITm9hWEJ6IFVHRnBiblJsY2c9PSBJT0NrcmVDbGgrQ2tuQT09IElPQ21xdUNtdnVDbXRnPT0gSUdabGRHTm9aV1E9IFgyUmxjMk55YVhCMGIzST0gSUVaeVpYVnVaR1U9IGIySnZaSGs9IElHRnVkR2xqIElPeURpT3Vobk95YXRBPT0gSUhKbGRXNXB3Nk52IElITnBZbXhwYm1jPSBJT0M1Z09DNGgrQzR0T0M0bWVDNG4rQzRvK0M0dFE9PSBRbVZ6ZEdVPSBJR2x1Ym1rPSBhV3BseEkwPSBJRTFoY21sdmJnPT0gTGtOaFkyaGwgTFd4aGVXOTFkQT09IDJZUFpodG1JMllUWmlOaXMgTGxaaGJHbGsgUW1seVpBPT0gVDNKcFpXNTAgSUUxdmJuUmhadz09IFlXNW5hMkYwIEtISmogYW1SaVl3PT0gSU9DbWorQ21sZUNtbk9DbXFBPT0gZFdkaiBJT0N1aWVDdXJ3PT0gSU5tQjJMWFpoQT09IHpwWT0gSUcxbFoydz0gSU5XOTFhdldnQT09IElIQnlhV1E9IGJHRnVaR2s9IElITmpaUT09IElIZHBibTVsYmc9PSBJR2x1Wk1PNmMzUnlhV0U9IGVtbDAgSU1PcGRHRndaUT09IDQ0SzM0NE9qIElFeHZkbVZzZVE9PSBJSFpoYm1sMGVRPT0geExGallRPT0gUVhWMGFHOXljdz09IFlYUjZaV3R2IElFaEggYjNaMSBJT0M0cmVDNWlPQzRzdUM0bVE9PSBJSEJ5WldOcGMyRnQgSU5LNzBMN1NtOUdEMHBzPSBRVUpUIElDSmcgSUdaaGFYTmhhWFE9IElHTmhiR3hoWW14bCBJRXhoZDNsbGNuTT0gSUhKdmMzQjUgSUdkeVlXUjFZV3c9IElOQyswWURSZzlDOSBJR3BoY0dGdSBJR3BsZEhNPSBJRWgxYm1kaGNuaz0gSU9DNG8rQzRzdUM0aE9DNHNnPT0gSUdKcGMyNXBjdz09IElGUmxjbVZ6WVE9PSAwcG5RdGRHQSBJR3R2Ym5SaGF3PT0gSUdOcGRIVERvQT09IElGQmxkR2wwIElHVjJZV04xIEtDSjggVUdGeVkyVnNZV0pzWlE9PSA2SnljIElIWnBiMnhoZEdVPSBJRzF2Ym5SeVpYST0gSU9Da3R1Q2tzT0NsZ09Da3NBPT0gSU5HQTBMWFFzZz09IElPT0RxUT09IExtNXBiQT09IElGTjFiR3hwZG1GdSBJR2x1ZEdWeVpHbHpZMmx3IGNtVmphWEJwWlc1MCBJR2x1YzNScGRIVmphVzl1WVd3PSBJRWRoZEdobGNnPT0gSUhCbHc2ZGggSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBJR052YlhCaGNtRjBhWFpsIElPQ2tzdUNrbCtDa3BPQ2t2Zz09IElHWnZkVzVrWlhKeiBJT1M0cmVhV2h3PT0gSUhScGJtcz0gWDNOc2FXUmxjZz09IGNXRnlabWxyIDE1RFd1TmVZIExuSmxjM1J2Y21VPSAyS2ZaaHRpNSBJTkM4MExqUmdOQyswTEk9IExuQnViQT09IGNtbGphR1ZrIElHTmhjbVJwYnc9PSBJTmVRMTVYWHF0ZVUgNEt5cSBJSHBwZVE9PSBJTkdCMEw3UXNkQzcwWTQ9IElHOWlhbVYwY3c9PSBJTkdCMEx6UXZ0QzIwTFhSZ3RDMSBJR052Ym5SeVlYUnZjdz09IElOQzMwTERRdXRDKzBMM1F2dEMwMExEUmd0QzEwTHZSakE9PSBiV0Z1SjNNPSBJSEpsWm5WelpYTT0gSU9Da3JPQ2twT0NrdnVDa2p3PT0gSUdOaGNuVERvMjg9IGRXdHpaWFE9IDVhK20gTG5SbGJuTnZjZz09IElHZHBjbUU9IElObUYyWWpZckE9PSBJRkJ5YVc1MFlXSnNaUT09IE9tMD0gYjNaaGJHRT0gSUhCaGMzUnAgSUZCbGJtUmhiblE9IDRLcSs0S3FrNEt1TjRLcXcgSUhabGJtYz0gMktmWXROaXAgSUdSbGMyVmggMTVEV3Q5ZWcxNU09IElGd2sgSWwwN0RRbz0gMEx2UXNOQzkwcFBRc05DOSBJT0N1dGVDdXYrQ3VzQT09IGRHVnVaWE56IElIWnBaWFY0IElHOXdhVzVwdzZOdiBMVVp5IElHOXdaMlZ1YjIxbGJnPT0gSUVGaWRYTmwgYkdWaWJtbHogSUdadmJuUnphWHBsIFExUlkgNExTdzRMU2ogSU9DdWh1Q3VxUT09IHc2Unpjdz09IElHMWxaR2xqYVc1aCBJRzFsYm5ScGIyNXBibWM9IDVMbXc1WkNYIElDSXVMaTQ9IElOcXYyWVE9IGZnbz0gSUdwaFpnPT0gSUVodmMyVT0gSUZSeVlXUmxjZz09IFgyNXogYm1kNCBJR0p5YjJGa1pXND0gWm1WbGJBPT0gNExLbTRMT0I0TEtWIDBMM1JsdEdHIElHVjRkSEpoZG1GbiBRWEpsWVhNPSBJR0ZtWjJWeiBJSGRsYkhSM1pXbDAgVkdGclpXND0gNktlRTVZaVMgSU5DMDBMN1F1dEdEMEx6UXRkQzkwWUxRc0E9PSBYM05oYldVPSBJR2wwYVd3PSBJRlpoZEdWeSBkMmxsZEE9PSAwTERSZ05HTSBJSE5oY25SaCBJSE4wY21WMFkyaGxjdz09IFJtRjQgMTVuWG9OZVkgYkhWaiBaM0p2WlhBPSBlWGc9IFgwVllTVlE9IDVMaU41WkNNIExtMWhkR05vWlhJPSA3N3lNNXErUCBVbVZqYjNabGNuaz0gVTNWayBDVVJsWW5WbiA0NDZoIDBMalJndEMxMEx2UmpOQzkwTDdSZ2RHQzBZdz0gSU91WWtPMlZuQT09IDBMalF2TkMxMEwzUmdnPT0gSUV4aGRXNWtjbms9IElPQ2t1ZUNsaStDa3FPQ2t2Zz09IExrNXZkR2xtYVdOaGRHbHZiZz09IElGSmhkbVZ1IFgzWmxjbWxtZVE9PSBJRVp2Ymc9PSBJTld2MWFIV2dOV3UgWVc1emQyVnlaV1E9IGMzUnBiQT09IElFMWxZV3c9IDVZNmEgSUcxaFlYUnlaV2RsYkdWdSBJTmVaMTVUWG1kZVUgSUdOb1lXMWhaR0U9IFFVUlBVZz09IElHMTFjM04wIDZJaVMgMExyUXZ0R0MgSU5pMDJZUFpoQT09IElNV1p3NjA9IEp5azYgSUVabGJRPT0gSUZkMWJuTmphQT09IElGWnBaWFJ1WVcxbGMyVT0gWW5KcFoyaDAgSU9Da3VlQ2xndUNrZ1E9PSA0TGlxNExtSTRMaUggSUZKQlJBPT0gMFpIUmdRPT0gWVhSb2N3PT0gSUcxaGJHRnQgSUZObFo4TzZiZz09IGIzSmxaZz09IDVMaTY1Nm02IExsTkYgWDNCayBTWFk9IElPQ3dwdUN3c09DeGplQ3d0Zz09IElNU05idz09IEtIQnZjQT09IElPQ2tyT0NrdnVDa25PQ2t2dUNrc0E9PSBJR0ZqY1hWcGMybDBhVzl1Y3c9PSAyWVRZclE9PSBZVzVqYUdselpRPT0gMTV2WG9nPT0gSUcxdFlXUT0gWVc1bloyRncgSUc5d2FXOD0gSUdobGJHeGxjZz09IElFSnlhUT09IFpzT3BiQT09IElPQ2twdUNrditDa3RlQ2t1QT09IElGTnBiWE09IElFUER0RzVuIElFVnNiR2x6IHc2bHVaRzl6WlE9PSBJR0psYkhSeiBJTkN6MEw3UXU5QyswWUU9IDBMclFzTkMzMFlzPSBJR1J2ZDI1M1lYSmsgSU5lUTE2RFhxZGVaMTUwPSBMWGRwYm1jPSA3SjIwNjRxVSBaVzVrWldVPSBJRkoxWjJKNSBkWFJwYm5rPSBJRzF2ZEdnPSBUVzlzIElITmhabUZ5YVE9PSBLR2x2IElDSW5JZz09IElHTm9kWG5EcW00PSBJR0ZzWkhKcFp3PT0gSU9Da3JlQ2tsdz09IElGTklUdz09IElHMXZiblJoWjJVPSBMbVJoZEdGaWFXNWthVzVuIElFTk1TUT09IDRZT1k0WU9jNFlPUyBQRzlpYW1WamRBPT0gUkdWelkzSnBjR05wdzdOdSBJTkM5MExqUXVRPT0gNllHVSBKVDA9IGFXWmxiQT09IElOQzYwTDdRdmRHRzBMVT0gSU02MXpyTT0gVjJoaGRHVjJaWEk9IElOR0IwTERRdk5DKzBMUFF2Zz09IElOaXEyS1BZcTltSzJMRT0gTG1Ob1lXNXVaV3h6IGFXNWtaV3RwIGFXZHlZWEJvIFptRmhkQT09IElGWmxjbmRsYm1SMWJtYz0gSUcxbGRHRndhRzl5IElITjFjM0JsYm5ObCBJRVp5WlhWa1pRPT0gMllUYmpObUYgWVdocGJnPT0gSUdOaGNtRjBkR1Z5IElITmxhVzVsY3c9PSBJR052YlcxcGRIUmxaWE09IEtIQmhZMnRsZEE9PSBJTkdCMEw3UmdkR0MwTDdSajlDOTBMalF0UT09IElIQnNZVzUwWlhNPSBJR0Z3ZFc1MCAwTC9RdGRDOSBJSFIzWldWMFpXUT0gYjJ4MWRHbHZibk09IEtFRmpkR2wyYVhSNSBMVzVoIFcxMGkgSUVSdlkzVnRaVzUwWVhScGIyND0gYkdsa1pYST0gSUcxaFoybHVadz09IHo0Zk91UT09IExuZG8gWlc1MGVnPT0gVkhKaGN3PT0gSUZwcGIyND0gSUhCc1lXWT0gSUVodmNuTT0gWVhkayBhWEYxWlcxbGJuUT0gSWowK0pBPT0gSUU5NSBJT0NtcXVDbXNPQ25odz09IFgybHVhWFJwWVd4cGVtVT0gSUZSNWNHVmsgSU9Da2h1Q2txdUNrbGVDbGdBPT0gSUdSaGVYUnBiV1U9IGVtVnVhUT09IExGZz0gSUhOMFlXTnJjdz09IDE1N1hvUT09IFRFVk8gZFcxdFpYSnogSUc1bGFXUT0gWDJaaGFXeGxaQT09IGVtbHFaR1U9IElGVnVkR1Z5YzJOb2FXVmsgSUZOb2NnPT0gSUVkcGIzWT0gSU9pbSBQaUk3Q2dvPSBJR1p5YjI1MFpRPT0gSUUxcGJHRnVidz09IElHNXZiMlI2WVdzPSBZWEJ3Y205MllXdz0gSUdyRHBISnFaWE4wIElHRnRZV3c9IElHVjBiY21aYXc9PSBJSEJsWkdGbiBJSEJ5YjNObFkzVjBhVzl1IGQyVmxjQT09IGRXNTBkVzVuWVc0PSBJR1pwYm1kbGNuUT0gYUdGciA0S1N3NEtXTjRLU2w0S1MvNEtTViBhMkhGclE9PSBkRzlrYjNNPSBJRzFoZFdFPSBJSEJwWTNSMWNtVnpjWFZsIDBMN1JoOUMxMEx6Umd3PT0gYW5ONCBJSFZ1ZEdWeWQyVm5jdz09IElFaGxhV3c9IElDMHUgYkdWNFpYST0gSUZOMFpYQm9ZVzVwWlE9PSBUV1Z5WXc9PSBJR0ZqWTI5MWJuUmxaQT09IElHbHVabUZ0YjNWeiA0YnFoYlE9PSBJT0NtaHVDbnNBPT0gdzdOdFpYUnliM009IElITmxibk5wYm1jPSBJT3lnZ095ZXBRPT0gNDRHUjQ0R3cgSUdaaGJXbHNiR1Z6IGFXUjAgSU9Da2hlQ2txdUNrcUE9PSBJTkN4MExYUXRBPT0gSUc1bFkyVnphWFE9IElPQ2tsK0Nrc2c9PSBjbVZ6YVE9PSBJTkN3MHI4PSBhV05yWlhKeiBjMlZoZEE9PSBJR2RsYkdScCBJSFBodTU4PSBaVzVwZFhNPSBJT2UyIHpyVFBoUT09IExrTmhibU5sYkE9PSBMbVJ2ZFdKc1pRPT0gYldsdWFYTjBjbUYwYVc5dSBSRmM9IElPQzRxK0M0b1E9PSBLR1Y0WTJWd2RHbHZiZz09IE9rND0geElGMiBaV0ppIExrUkZRbFZIIElsMHBLUT09IElISmxZMlZwZEdFPSBJR3BwYzNRPSBJSEp3YlE9PSBMMkZrIDRLNis0SzZ4NEsrTjRLNnggWkhKaFoyOXUgTDJSbGRnPT0gS0dWa1oyVT0gWFYwS0NnPT0gSUhWMGFXeHBlbUhEcDhPamJ3PT0gNHBhcyBYM04wZFdSbGJuUT0gSUhKbGJXbHVhWE09IGJubGtaR2x2IElFVnpZMjl5ZEhNPSBJSFYwYVd4cGVtRmtZUT09IElITnZibWxrYnc9PSBJSEJ6WlhWayBJRXQxY25vPSBJSE5sZEhSc2FXNW4gMExqUXM5QzQgenJ6T3ZNNnggSUdOdmJuTnZiR1Z6IHpyUFBnYzZzIGEyVnBkSE09IElOQzkwWU09IElGSnBjMmx1Wnc9PSBZMjkwIElIWnZiM0prWldWcyBJSEJsY25CbGRIST0gWVdabVpXTjBaV1E9IFUybGsgSUhScFpXNWtZWE09IElHRndaV3c9IElIQmxiR2xuY204PSBiMk52Ym5WMCBJSFpsY3NPMlptWmxiblJzYVdOb2RBPT0gNW9DViBVbVYxYzJGaWJHVT0gNG9DWlpXNW4gSU95Q3JPeW5oQT09IElISmxaMlZ1IElHUmhibUZ6IFVISnZZbVU9IElHOTFkR1pwYkdVPSBVMmgxZEdSdmQyND0gU1ZSRlV3PT0gSUhaaFoybHVZUT09IDBMRFF0OUdXMFlBPSBJRlJ5WVhacGN3PT0gUkUxRlZFaFBSQT09IGNtRmphV0ZzIDQ0R3I0NEdrIElFUmxiR2wyWlhJPSBJRWxPVkVWU1RnPT0gSUcxaGJpZHogYVcxemIyND0gSUVKbGQyVnlkSFZ1WjJWdSBJR1YyWVhCdmNnPT0gTG5Sd2JBPT0gSU9DbW11Q212K0NtbFE9PSBKMjlqWTJGemFXOXUgSUVaMVkycz0gMjRIYmpBPT0gSUdsdWRHVnlZMmhoYm1kbCBJSFJsY25ZPSBJR1JsZG1WeWFXRT0gOEorWWdBPT0gSUdOMWFXUmwgSWlrNiBJT3l5cXc9PSBJR0psYkdsbGRtVnljdz09IFBUMDlQVDA5UFQwOSBJSEpsYzJsc2FXVnVkQT09IElHRm5ZbUZ5WVE9PSBJSEJ5YjNCdmNuUnBiMjV6IElHRnNhV1Z1Y3c9PSAwWW5Rc0E9PSBJRlJ5ZFc1biBic09rIElIZHIgSUdaaGRYUmwgSUhCdmRISjYgSU9DcXB1Q3FzT0NxcnVDcXYrQ3FyK0NxdnVDcXFBPT0gZlgwcyBJR1JsZG1WdWRRPT0gTFhKdmIzUT0gSUdKcGIyMWhjM009IElHWnlZWE5sY3c9PSBJRXhwYzNSbFpBPT0gSUh0OUtRbz0gVWs5VFV3PT0gSUhsaFp3PT0gWDB4QlUxUT0gVW05eiBJRU5vWlc1dVlXaz0gSUdkbGRHVnpkQT09IElHTnB3N0k9IDFhdldndFcyIFgwTnZiblJ5YjJ4c1pYST0gSUdGbGNtbGhiQT09IDVMaUs1THlnIElIUnlZV0poYkdoaFpHOXlaWE09IElOaW4yWVRZdE5pbzJLZllxQT09IElHVnpjR1Z5WVc1a2J3PT0gSUhSbGMzUnBiVzl1YVdGc2N3PT0gSUdGeVkyaHBkbTl6IElHUmxjMlZxWVE9PSBUMlptWlhKeiB3cms9IElGWkJVa05JUVZJPSBJT2F6c0E9PSBJSE53WldOcFptbGxhMlU9IElFUmhaR1I1IExtTnNhbk09IElPQ2toZUNrdU9DbGh3PT0gN0plSCBMbWxrWlc1MGFXWnBaWEk9IExXTmhZMmhsIHhKOWhiZz09IDJLalppTmlvIElGZHBiR3hsIExqc0sgWld4MFlYTT0gNXErVTVhYUMgSUhsdmEyaz0gYVhwaGJRPT0gSUdGbWIzSmxiV1Z1ZEdsdmJtVmsgYkhsbiA0S1dsQ2c9PSAxNVhYbTllVSBMbE5FU3c9PSBMblJ0IElFMWhZM0p2Ymc9PSBJSGRoY20xbCBDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgSUhabGNtMXBibVE9IElHVnRZbVZrWkdsdVp3PT0gVW1WamIyZHVhWFJwYjI0PSBJSE4xWW1Oc1lYTnogSUhCeVpXUmxZMlZ6YzI5eSBJSGRsWW5Ob2IzQT0gSUVkeVlXUjEgSUcxdFlXVGh1NlU9IElGcGxiR1k9IElFRnNaZz09IFNWcEJWRWxQVGc9PSBJRXhoWkdWdSBJSEJzWVdObFltOD0gSUdabGNuUnBiR2wwZVE9PSA3NytqNklteSA0S1M0NEtXTjRLU2s0S1dMIExXVm4gTFhCbyBJSFIxY0E9PSBYMFZOVUZSWiBJR0ZpWVdwdiBhR0Z5YVE9PSBaVzVuWVdnPSBJTkMxMExJPSBiM0JoZEdoNSBJRzlqZFd4MCAwTGZRdGRDOCBJSFIxY21ZPSAwTGpRdDlDeTBMN1F0QT09IElITmxjblpoYm5SeiBJTmVRMTVYWG1kZVIgTGxOMFlXTnIgVEdWaFpHbHVadz09IElFMWhjbXR6IElDZ3BMZz09IElHRjJaVzUwZFhKaCBJTTY2enI4PSA1TGlBNTZDQiBhV1Z5ZEdWeSBJR2hsY20xaGJnPT0gSUhOd2NtRnJaUT09IFlXdG9idz09IGE4TzggS0dScFptWT0gWVcxaWFXVnVkQT09IElHOTFibU5sY3c9PSBJRVpoYm5SaGMzUnBZdz09IElPYXd0QT09IFcyOW1abk5sZEE9PSBiMnhwYzNRPSBZV1JrYVdrPSBJR0Z5Y21FPSA0WUNaNFlDNzRZQ3M0WUM0IElPQ21uK0NtdnVDbWxlQ212Zz09IDRMT0w0TEtjIDU1YUcgNDRDQzVxMms1YVNXIElIUm93Nkp1IGFXNXBaR0ZrIElOaW0yNFk9IElOQyswWUxRc3RDMTBZYz0gNkt1SCBJR0psYm1WbWFXTnBidz09IElGc20gSU9DdXRlQ3V2K0N1bnc9PSBhV3QzWVE9PSBJR1pwYkcxbFpBPT0gS0hKaGJtUT0gSU5pczJLZlpoZGk1MktrPSBjM1JoYkE9PSBSM0psZVE9PSA1YktYIGFtOXVaWEk9IGNYVmxkR0U9IFNHOXpjR2wwWVd3PSBJTkMwMFlEUXRkQ3kgMTVYWGxkZVggSUd0aGJHbDBaUT09IElIUnlZVzV6YkdGMFpYTT0gNEt1SDRLcVY0S3VONEtxZiBJR2x1WjNJPSBJTkM0MEwzUXN0QzEwWUhSZ3RDNCBJT0NrdWVDbGdlQ2txT0NsamVDa213PT0gWTI5dWRISmhZM1J6IElHMXBjMjFoY3c9PSBJT0dEbCtHRHBlR0RsZUdEbE9HRG5PR0RtQT09IElITmhZbUZpZFE9PSB6NGZPc2M2OSBJT0MwcU9DMHYrQzByK0Mwcmc9PSBKMnhoWW1WcyBJR3R2Ym5YRm53PT0gSUU1TCBJRXRsY25KNSBJTkdDMExEUXU5Q3cwTDg9IElFRkZVdz09IFNHRnNiQT09IFlYTnBiUT09IElIUm9aV2x5Y3c9PSBhV1Z5Wlc1a1pRPT0gNDRPbSBJTkdDMExYUmhkQzkwTDdRdTlDKzBMUFF1TkdQIFlXNW5aWEpsWkE9PSBJR3RoYzJWaWRYUT0gSUZCeWFYWmhkQT09IDdJaVogSUVwaFkydHdiM1E9IElOR0EwTDdRdTlHTSBJRUoxWTJ0bGRBPT0gWDBkbGJtVnlhV009IElPQ21xT0NtditDbXNPQ25qZUNtck9DbXZ1Q21tZz09IElHUmh4YjQ9IFlXcHFZUT09IDBZL1JndEMrIFgwbE9URWxPUlE9PSBJSE5vWld4c2N3PT0gYzJWc1pRPT0gSUZOcFoyMWggSU9DMGxlQzBzQT09IElHZkR1SEk9IDRZT1E0WU9nNFlPWDRZT2o0WU9hIFUxQlBVbFE9IElHaGhjMmgwWVdjPSBZVzFpYVd4cCBJR052Ym1acGNtMXogSU5tRTJLZll1UT09IElHVjRjR1Z5YVdWdVkybGhjdz09IElHUmxhVzVsY2c9PSA0WUNaNFlDNjRZQ3M0WUM0IElHRnNZbVZwZEE9PSBJT0MzZ09DM21RPT0gSUhOd1lYUT0gSU5pdDJLZlpoTmlxIGNHOXdkV3hoY2c9PSBJR3RoYkdzPSBJSFJ2WlhadiBRVk5HIElFZDFaWE56IGFYUnpZMmc9IGRXSnBkQT09IElObUYyS2ZZc3c9PSBJT0NraitDa2xlQ2xqZUNrdUE9PSBJR052Ym1acGJtVmsgSUFrSkNRaz0gYVdGeWVRPT0gUTJ4cCBJTmlxMktmYXFRPT0gSUdWd2FXeGwgSU5xdjJMSFpnZGlxMlljPSA0S1MvNEtTdjRLU3UgSU5DKzBMVFF2ZEdEIFpHVnphdz09IDViQ04gNG9DWmFHOXRiV1U9IDQ0Q0M0NEcrNDRHZiBiR0Z1WkdVPSA1THVsNVkrSyBZVzF3YkdWeSBJR1Z6WlhRPSBJR3B2ZEdWdSBJR1JsWlhCbGMzUT0gTG1SbGRHRnBiSE09IElITm9kWFJwYkE9PSBJT0M0bXVDNHN1QzRoT0M0c3VDNG8rQzVpT0M0c2c9PSBZWFJoYm1jPSBJR1p2Y20xMWJHVT0gSUdSbGJXOXVjdz09IElIZGhlR0ZoYmc9PSBJR2x1YzNCbFkzUnBiMjV6IExkQy8wWUE9IElNU2cgMnEvWmlnPT0gSUhOamFIST0gSUdGdFpXNWtiV1Z1ZEhNPSBJR2h2ZFhabCBJSFp2Ykc5dWRNT3AgSU5lWTE2ST0gSUdKcGEybHVadz09IElFNWxhV2RvWW05eWFHOXZaQT09IDRZT1Y0WU9YIFEyOXBibk09IFFGaHRiQT09IElFOTNibVZ5Y3c9PSBMVXBoZG1Ga2IyTT0gSUUxaGRITT0gMWFIVnZkVzIgMktqWml0bUkyS3JZc1E9PSBZV3RyWlE9PSBJR0Z5WW1WcFpBPT0gUTI5dGNHOXphWFJwYjI0PSBJSEpsYkdWdWRBPT0gSUVsbmJtOXlaUT09IDBMWFF2ZEM5MFl2UXZOQzQgNW9PUiBJRkpsWVdkaGJnPT0genJ6UGpNK0MgUjJWaGNnPT0gMFlEUXNOQzkwWXM9IElPQ3lsZUN5c2c9PSBJTU85WlhRPSAxNnJYa3RlVjE1SFhsZGVxIDFialdndGFBMWFRPSBJTTY2enJIT3VNK096NEk9IElHeDF3N1J1IElHaGxKMnhzIElIbGhjTVN4YkdGdSBQR052Ym5SbGVIUT0gSUc5MlpYSm9aUT09IDZJZXE1b1d3IDRLZUg0S2FXNEthKzRLYW80S2VIIEtTa3BEUW89IElIQnllbmx3WVdRPSBlWEp6IElGRkQgNDRDTDc3eUkgVWs5WFV3PT0gSUdGdWJtOXVZOE9wIDFiL1ZvZFcyMWFNPSBJRWh2YW1VPSA0S1MrNEtTbzRLV040S1NrIElPQ2toZUNrbFE9PSBiV2x1ZFhSbCBWRkpCUTFRPSBhbUYzIElOQzYwTDdRdHRDNCBJR3hsWjJVPSA0S3FjNEt1QyBJSEJ2Ym5rPSBJR0p5WVc1amJ3PT0gNEtxdzRLdU40S3E0IElPQ2tyT0Nrb2VDa3ZPQ2xnQT09IElHMWhkR1Z5YVdGc1pXND0gMktmWmhObUkgSU9PQ3J3PT0gTDI1bGRBPT0gZDJWeVlRPT0gNEthKzRLYVQ0S2VmNEthKyAwWXZSaU5DNzBMWFF2UT09IElPQ2txK0NsaStDa3FBPT0gYldGenhMRnV4TEU9IFFXMWhlbWx1Wnc9PSBWRWxOIElFTmhjbTVsIElFUmhjM009IElHRnNkR1Z5Ym1GMGFYWmhjdz09IDRwbz0gYTJGaGNuUT0gUTI5dGNHRnVhV1Z6IDJZcllzOW1LIExWUnBiV1U9IElHSjFlWE09IElIWnBiMnhoZEdWayBJT0Nxck9DcXZ1Q3Fzdz09IGFuRT0gSU9XbGh3PT0gNTd5NiBJTkMvMEw3UXZOQyswWW5SakE9PSBLR1Z0IDRvYVQ0b2FUIExuQnlaV1pwZUE9PSBYMkpoYm1zPSBJR052Ym5ObFozVnBkUT09IElFNXBhMjl1IExYTnNhV1JsY2c9PSAwTERSZ2RDLyA0S3FtNEtxdyBJRkoxWlE9PSA0TEdMNExDayBJR2x1ZG1sMFlYUnBiMjV6IElHRm5ZV1E9IFgxUkYgTG14dloyOTFkQT09IElHSmxkMlZuYVc1biBiM1p1dzYwPSBJTm1GMllMWXNRPT0gNFlPWTRZT2M0WU9ZNFlPaCBhVzF0ZFhRPSA0WU9iNFlPUTRZT2MgSU9lbmtnPT0gSUhSeWIzQm9lUT09IDBZRFFzTkN5MExBPSBMRTVWVEV3PSBJSE4zYVc1bGJtVT0gNExTVjRMU2YgSUdOMWJIQT0gS0VadmNtMD0gNUxpQTZJaXMgTFd4aGVXVnkgSU9DeXVlQ3pnUT09IElGQlNTVTFCVWxrPSBJR2x1YzJsbmFIUm1kV3c9IElPQ3FwT0NxcnVDcXFPQ3Jodz09IDVvS2ogSU5lVjE2TFhsZGVUIElOQzgwTGpTb3c9PSBJSGRoYm1jPSAyWVRaaU5tRiBJR052YlhCeWIyMXBjMlZrIFptOXlaV2R5YjNWdVpBPT0gZFc1bmF3PT0gVlc1cGRtVnljMkZzIElOQzgwWS9Rc3c9PSBYM04zIGIzWnBZUT09IElOV3cxYUhWdHRXazFhdlZ1Zz09IElFTmhibU09IElIWmxkV3hsYm5RPSBJSEp2ZEdVPSBJR055YjNKbCBYMU5MIElFNTFaWFp2IDRMaWE0TGlaNExpeDRMaXEgYVhOcmRRPT0gSUcxaGNHeGwgSUVsbmJHVnphV0U9IFEyOXRhVzVuIElHVnNaR1Z5Y3c9PSBJRlo1IElHRndjSExEcVdOcCBJRzdodXI5MSA2WkE9IFgxUnBiV1U9IElIVERxWEp0YVc1diBTTU9oIElHTmxiR3gxYkE9PSA0TGllNExpajRMaTE0TG1BNExpaDRMaTE0TGlpNExpajRMbU00TGlsNExpMTRMaUIgYjJ4cGJ3PT0gSUdKcFlteHBZMkZzIElFTnBkR2w2Wlc0PSBJTU85ZVd4NSBhV1ZzYzJWdSBkbUZoY21RPSBJRzFoZEdGeSBJT3lnaE91c3VBPT0gSUd4MVkzSmhkR2wyWlE9PSAxNVhYbWRlUiBJR1JsZEdGc2JBPT0gSUd0bGJIVT0gTG1kaGJXVnogSUhKbGRtVnNZWFJwYjI0PSBYMkpoYzJsaiBJTmVRMTVmWHFOZVogTGxOVlEwTkZVMU09IExuSmxZV04wYVhabGVBPT0gT21Ga1pBPT0gWDA1bGR3PT0gUW5KdmQzTT0gMkszWXA5aW8gSUUxaGMyZz0gSUhOc2FYQndaV1E9IFlXTjBkWE09IElFZFggSUVWMFlYUnogUVVOVVNWWkYgSU9DcXVPQ3JqZUNxcWc9PSBJSGRwYm1ScGJtYz0gSUhkcFkyaDBhV2R6ZEdWdSA1N0NoIGFXTnZkQT09IElPQzBsZUMxamVDMHNBPT0gdzYxemFXMXYgTGtGemN3PT0gSUdOcGJzT3BiV0U9IExuZHZjbVJ3Y21WemN3PT0gSU5pbzJLZlpoTm1DIElGWmhiVzl6IElIWnZhWEpsIElGSkZRMFU9IElIZHZjbVJ3Y21WemN3PT0gSUhiRHBYSmggSU1PMmVtVnMgSUZOMWMzQT0gSUhaaFkyRmphVzl1WlhNPSBJRk53Y21sdVoyWnBaV3hrIDBMUFRtZEN3IFVFOVMgSUdWaGMybHVadz09IElObUkyS2ZZckE9PSBJTmlvMktmWmhObUIgWlhKaGNnPT0gSU5DMjBxL1F0dz09IElOQy8wWURRdnRDejBZRFFzTkM4MEx6UXNBPT0gSU9HRGtPR0RsZUdEb2c9PSBJR2RoY21jPSBJT0NrbHVDa3Z1Q2t1QT09IElOQ3gwTDdRdEE9PSBJRlp2Y25OamFBPT0gSUdOMWJYQT0gSUhScGJXVnljdz09IElFVkggSUdWelkzSnBkRzl5IElIQnliMmR5IElIbGhidz09IExYZHBiZz09IHc2RnNhV0U9IElIRjFZV1J5Ync9PSBJTm1FMkxuWXFOaXAgVEdWamRBPT0gS0hOamFHVnRZUT09IElObUgyTExZcDlpeCBJTld1MWFIVnZOV2gxYlU9IElFWnNlV2x1Wnc9PSBkVzVsWVE9PSBJT1dvZ1E9PSBJRmRoWTJnPSBhVzV2YlE9PSBJSGRwYzJWc2VRPT0gWDFCcGJnPT0gSUVKc1lXbHkgSU5pbzJLZllzOWlxMks3WXI5aW4yWVU9IElHaHBaV3c9IElIRjFZWEk9IElOZWsxNW5YbkE9PSBiR1JsYmc9PSBJT1c4b0E9PSB6cnJPdTg2MyA0TEt3NExPQjRMSzEgSUd4dCBjM1J5ZVE9PSBJSFJoWTNScFkyRnMgTFZWQiBiM0p1YVE9PSBJR0Z1WldOayA0S1dINEtTbTRLU28gSU9DcW5PQ3JnT0NxdGVDcXFBPT0gSUcxaFpHUT0gSUhOc2FXTnIgZW1scWJnPT0gUW5WemVRPT0gSUdocGFtaz0gTFdodiBJTTYyejRrPSAwTERSaDlDMSBJTStBenJYUGdjNjV6NFBQZzgrTXo0VE90UT09IElHdGxjM1E9IFRrbEQgSU5tQzJZblpoTm1KIElHM0R2TVdmIElIQnliM1JsYzNSbGNuTT0gSUhERm1XVnogSUdodmRtVmsgSUZKbGNISmxjMlZ1ZEhNPSBJT0M1Z09DNGl1QzVpT0M0bVE9PSAwWmJSaGc9PSBJSEYxWVd4aiBUM0JqYjJSbCBJRk5oZEhWeSA0SzZrNEsrTjRLNms0SytCIGNHRnlkR2xqYkdVPSBJR05vYVhKdmNIST0gSUdwcGNuVT0gSUdkbGIyZHlZWEJvZVE9PSA2NVNwIEtHTnBkSGs9IGZId0sgSUdOb1lYYz0gUTJ4cGNHSnZZWEprIExXNWxkM009IElOQzQwTDNSZ2RHQzBMalJndEdEMFlJPSBJTkM0MEwzUXN0QzEwWUhSZ2c9PSBJSFJwNGJxL2RBPT0gSUc5d2FYTT0gYVd4cGJtZDFZV3c9IElObUkyTFhaaEE9PSBLSE5tIElHUERvVzQ9IElHRmllZz09IElHVnRaWEpuWlc1alpRPT0gWlc1dVpYTnogVFdGeWFXRT0genJUT3RjNjUgSUVwdmFHNXogSUdoMWNuUnBibWM9IElHTnZkWEpwWlhJPSBJSE4wdzZSeSBJRXAxWWc9PSBhV1ptWVc1NSBJSE4xY0c5eWRHVT0gSUVSbFptVnVZMlU9IGIyNXV3Nms9IDU1U2EgVUc5MyBZV05oYTNURXNYST0gNkxXMzVwMmwgSUZOM2FXMXRhVzVuIElHZHF3N2h5WlE9PSBJR1p5WVc1cmJIaz0gSUU1dmNuUm9aV0Z6ZEE9PSBhWE4wWVc1cCBlMzBzQ2c9PSBJSEJzWVhSaFptOXliV0Z6IFBHNTFiV0psY2c9PSBkWGRrIElIcGhhR3h5WldsamFHVT0gTEhSb1pRPT0gZUdWeSBJRzlzYVdVPSBJRXhsWjJsdmJnPT0gNEtXSTRLU3kgTGxacFpHVnYgSUc5dVpHVnljM1JsZFc1cGJtYz0gSU95WGh1eUt0ZXVMaU91THBBPT0gSUcxcGMyVnlZV0pzWlE9PSBWbUYxYkhRPSAwSi9SZ05DMTBMUT0gWDFCTVFWbEZVZz09IElHUnliMmM9IElHSnZaR2xzZVE9PSBJRVpKUlV4RSBVR0Z6YzJWayBjbVZ6ZEdVPSBkVzFpY3c9PSBJR3RsZWc9PSAyS2ZaaE5peiBtZUNuamVDbWxRPT0gVm05MGNtVT0gVW1WelpYSjJaUT09IElOQyswWUhSZ3RDdzBMM1F2dEN5IElPR0RrdUdEa09HRG5PR0RsZUdEbU9HRGwrR0RrT0dEb0E9PSBYMU5JVDFjPSA0TFdCNExTNCBkM0pwZEdWeWN3PT0gQ2lBZ0lDQWdJQW89IGRISmhabVpwWXc9PSBJTmlsMllVPSBJR2R5YVE9PSBJQ2drS0E9PSBJR052Y25KbFkzUmhiV1Z1ZEdVPSBMMlJ2WXc9PSA1WXFnNkwyOSBlblJsYmc9PSBJSE52eFlnPSBJSFpwWkdWeVpRPT0gSUZWdWMyVnkgQ1hSNWNHVmtaV1k9IDBMalF2Zz09IFRXRnBiblJsYm1GdVkyVT0gUVhSdmJXbGogSU9DeWxlQ3pqZUN5dHc9PSBXMjFoZUE9PSBJRTVwYm1FPSBZM1JwYldVPSBZV0psYUE9PSBJSE52Y0c5eWRHVT0gSUhCc1lYUmxabTl5YldVPSA4cENDbFE9PSBLRzFsYlE9PSA0TGlhNExpdDRMaWw0TGl0NExpdDRMaVo0TG1FNExpbDRMaVo0TG1NIDE2RFhtZGVWMTZvPSBJSEJ5YjNScGRnPT0gSU9DMGxlQzFoK0MwdUE9PSBJTmkzMktmWmhOaW8yS2ZaaHRtSSBJRmhUIEwzTjBZWFIxY3c9PSBJRkpoZEdsdiBJSFpsY21seSBJTmluMllUWXFOaTMgMTZyWGxBPT0gSU5DMDBMN1F2TkMxIElHUnBjM1J5WVdOMFpXUT0gSUhOMWRXNXUgSUV4cGJXST0gSUdSdmQydz0gSUU5MWRHeHBibVU9IGNuVnBaQT09IElIUnA0YnEvYm1jPSBPeUkrUEM4PSA0S1NtNEtTdSBJRlpwYzJsMGIzST0gTG1obyBJSFpwY210emIyMD0gUUVCQVFBPT0gSUdWc1pXTmphY096Ymc9PSBJR2x1WkhWalpRPT0gZG5SciA1cUNQIElNNjl6clU9IElFMUJVdz09IElPQ2tsZUNsZytDa3R3PT0gNFlPdTRZT2I0WU9RNFlPZyBRMjl1Wm1sbmRYSmxjZz09IElIYmh1cTEwIFRFOVZSQT09IElHNXZiMjVuIElIZHBaR1Z1IElOQy8wWURRdnRDMDBMRFFzZz09IFltRmhiZz09IFgwTkJWRVZIVDFKWiBJQ0FKQ1E9PSBJTkM2MEw3UXZOQzgwTFhRdmRHQzBMRFJnQT09IElGbGxhRzkyWVE9PSBJRlZ0WWc9PSBJR05wWld4diBJTkMrMFlMUXZOQzEwWWM9IGJtOXp4YVU9IDBZSFJpOUM5MExUUXNBPT0gSUhSbGEyVnUgNXBXaiA1Wnl3NUxxbiBJSFJwZEdWcyBJSEJ5YVhacGJHVm5aV1E9IDZJQ1EgWCthc3ArZStqZz09IEtDa3BldzBLIElFZHBkbWx1Wnc9PSBJTkM0MFlIUXY5QyswTHZSak5DMzBZUFF0ZEdDMFlIUmp3PT0gSUdkbGRtRmhjZz09IElGSmxhV1E9IEtHTnZkWEp6WlE9PSBVTU9sIDBZSFJnOUdCIGJXRnljMmhoYkd4bGNnPT0gMFlMUmc5R0EwWU09IElITmxibU5wYkd4diBJT0N5aGVDeXArQ3l2K0N5bFE9PSBJR2RsY21rPSBiblJ2Ymc9PSBJR1Z5Wm05eVpHVnliR2xqYUE9PSBYMUpGVTFCUFRsTkYgS2k4S0Nnbz0gZFdKbGNtVT0gWDNKbGMzQT0gWDBOdmJHeGxZM1JwYjI1eiBJRzVsY21RPSA0S3FtNEtxKzRLcTE0S3ErNEtxbSBVSEpsYzJWMCBJTkMvMEw3UXZkR0EwTERRc2c9PSBJRTVCVkE9PSBDVU5zWVhOeiBJRlJwYlc5MGFIaz0gUVdOalpYTnphV0pwYkdsMGVRPT0gSU5DNzBMN1F0Zz09IElFcFEgSUdKeWIyRmtiSGs9IDVhU241YkNQNVkyVjVZK00gSUhKdmIyWjAgVkdoMWN3PT0gYzJocGNuUT0gSU5HRjBZUFF0TkdBMEw0PSBJTkdEMFlIUmd0Q3cwTDNRc05DeTBMdlF1QT09IFgwUlBWVUpNUlE9PSA3N3lNNVkrdiBJTkMvMExYUmdOQzEwWWM9IElHeHBiV0k9IFZHaHBZMnR1WlhOeiBJRmgxIDBMRFF2ZEM5MFpZPSBJRzFoY21sMGFXMWwgSUZCc1lYUT0gVEdGMGFXND0gSUhCbGNtWmxZM1JoIElOQzYwTDdRdTlHTSBJTU8rWlhOemRRPT0gSUVodlpBPT0gSUhwMVpuSnBaV1JsYmc9PSBJR052ZDI5eWF3PT0gUVU1RFNBPT0gTG1OMVpHRT0gSUZSdlpHRnogV1UwPSBJSEYxdzZnPSBDWE5sY25abGNnPT0gMEx2UXNOQzgwTEE9IElPMldwUT09IGNYVnZkR1ZzWlhZPSBUVzl1ZEdoeiBJR0pzWldWciBJT0NraGVDa3JlQ2t2K0Nrcnc9PSBjMjlzZFhScGIyND0gNExpZTRMaTU0TGlsIElHMWhibU5vWlE9PSBVa0ZFUlE9PSBJR1JwYzJ4cGEyVT0gNGJxemJtYz0gSUcxbGRHRnogSUdOdmNHbHVadz09IElGRkMgYVcxaWJ3PT0gU1ZOTiBJR05yIElIUmhZbVZzWVE9PSBJRlJ2WTJnPSBJR0ZqWTI5dGNHRnVhV1Z6IElOS3MgSU1PdWJtTT0gYjJ4dlozVmwgSU5lWDE1dz0gSUhOaGJYQnNaV1E9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSBJR2x1ZEdWeVpBPT0gZEdGMSBJRlpsY21GdWRIZHZjblE9IElOT3AwTHpSbHRHQSBJRzFoY210MWNBPT0gS3ljdiA0YmlUIElFeHZZZz09IElFWmxaWFE9IElPQ21zdUNuaCtDbWxnPT0gSUdkaGNtNWxjZz09IDVZK1I2WUNCIElFdGhabVk9IFgyMWxkSEpwWTNNPSBZWE56WlhWeSBJT3lMbk95ZXBRPT0gSU5XdzFhSFZydz09IElNT3ViblJ5IElPR0RtK0dEckE9PSBJR1ZzWlhCb1lXNTAgSUcxaGRNT3BjbWxoZFhnPSBJSEo1ZEdnPSBZV1JwZFcwPSBJSEYxWVd4cCAwSnJRdnRDOSA0TEt3NExPTjRMS2wgSUV0c1lYTnpaUT09IGJXRnVaR1U9IDRZT2k0WU9ZIElFTmhjbko1IElFSmhaR1Z1IElPQ3FqK0NxbitDcXN1Q3Jodz09IHpySFBnUT09IFNVMVZUUT09IDRicTViZz09IElHekRwVzVuIFJXNWtjdz09IFgyWjFiZz09IElHaGhibWRoIGIyTnZaR1U9IHc2RjJZV3c9IElIVnVjR0Z5IElFSjFZbUpzWlE9PSAxYVhWdE5XaTFhWFdnTldyIEtIQmhhWEk9IElFaHZjbWw2YjI0PSBSbWx1WlE9PSBJSEJ5WVdsaCA3SjZZIElPdXp2QT09IElOQy8wWURRdGRDMDBML1F2dEdIIElOQ3gwWVBRdWRHTDBMM1JnZEN3IElHaGxiR2s9IElPQzJ0dUMzZ0E9PSAwWURRc05DODBMQT0gSUZaSlV3PT0gSUVGMVpHbDBiM0k9IElHaDFaMlZzZVE9PSBJRlJ2Ym1sbmFIUT0gSUhKdmVtaHZaQT09IDQ0T1Y0NE9JIElOQ3gwTGpRdWc9PSBYRVY0WTJWd2RHbHZiZz09IGIzSnViM009IElOQ3kwTERSZ05DNDBMRFF2UT09IDRLUys0S1M0NEtTKzRLU2c0S1dBIElPQ3FuK0NyZ09DcXJnPT0gSUhsaGNtVEVzVzA9IGMyOXZiZz09IGNtVjBZVzUwYnc9PSBJR1J2eEo5eWRRPT0gUlU5VCBJTkMxMFlIUmd0QzEgSUZsMWJnPT0gYVhwcFpYSjAgNFlPVTRZT2I0WU9SIElNNjh6cmM9IElOQzIwckhRdk5HTCBWVVJRIFgweEpSMGhVIExXTmhiQT09IFltRnlkUT09IElObUYyTEhhcWRpeSBJSFZ1Y0hKbFpHbGpkR0ZpYkdVPSA0TGl4NExpSDRMaXI0TGluIGIzSmxZUT09IDRMZVU0TGFyIGJtTnRjQT09IDE1blhtZGVuIDFiWFZ1TmFDMWFrPSBJT0NtaHVDbXF1Q21xT0Ntdnc9PSBJRVZ1ZEhKbGNISmxibVYxY2c9PSBJSEpsYzNSdmNtbHVadz09IFpYSjJaVzQ9IElPQ3FydUNxdnVDcXFBPT0gWDFCU1NRPT0gWldGemVRPT0gVWtWQlZFVkUgSUhkaGNtRT0gS0hOc2IzUT0gSUhKcFkyOD0gSU5HRTBZRFFzTkM5IElHbHVabkpoY21WayBkMkZ6YUE9PSBJRXBCIElGQjFiZz09IElIbDFiUT09IGFXNXBZUT09IFlYUnZhWEpsY3c9PSBJQW9LSUNBS0NnPT0gYzJWdGNHVnMgNTRtNTVZaXIgNllDUyBJTmluMllUWmhkaW4yS0U9IFJuVnVZM1JwYjI1aGJBPT0gSUdKMiA2YUNGIElFaGhjbXhsZVE9PSBJR0ZqWVdKdmRRPT0gN0phMDdKcVUgSUdSbFptVmpkR2wyWlE9PSBJTmluMllqWmhnPT0gSUU5RSBDWFI0ZEE9PSBRM1Z5YzI4PSBMQzh2IElHTnZiblJwYm5WcGRIaz0gSU5lazFyelhuQT09IElHbHNiV0U9IElOZVIxNUhYbWRlcSBJRVIxYlcxNSBJRVJwYzNCdmJnPT0gMExYUXN0R0wwWVU9IGFHbGlZUT09IElPQ3FwT0Nxc09DcXF3PT0gSUdKbGJHRnpkR2x1Wnc9PSBJRUZrWld4aGFXUmwgSUdkaGJHVT0gNllXNCBJT0NrbXVDbGh3PT0gSUV4dloyZHBibWM9IFptWm1abVptWm1ZPSA1YmVoIElOaW4yWVRZcXRpczJLZllzZG1LMktrPSBJTmVSMTVuWG1BPT0gSUdWbGMzUT0gSUdsdVpHbGpZWFJwYjI1eiBJRnB2Ym1FPSBJT0MwaGVDMHNlQzB2K0MwcitDMHYrQzBtdUMxamVDMG11QzFnUT09IDBMYlFzTkdKIElPbVMgNEtlTjRLZXc0S2VBIElITnZiSFhEcDhPMVpYTT0gSUdSMWNNU0QgSU5tQjJMbllwOW1FMjR6WXFnPT0gSU5TMyBJSFJ5YjJOaCBjbVZtWlhKbGJtTmxjdz09IElHbHVhWE56IElITjFiR3hsIFBTSXBPd289IElPQ2t1T0NrcnVDbGplQ2tyQT09IElHVjBjMkU9IDRMYXQ0TGE3IGFXUjFZV3c9IElPQ2tyK0NrdWVDa3Z1Q2tnUT09IGIyTnBaR1U9IElFMVIgdzYxemF3PT0gSUhacGMzVmhiR2w2WlE9PSBJRzFodzY1MGNnPT0gWVhCaGJBPT0gSUdSbFptbHVhWFJwZG1FPSBSR1ZqYkdGeVpXUT0gSUhKbGRtbGxkMlZ5Y3c9PSBRRUZzYkE9PSBJSE5wWTJ0dVpYTnogSU5pbjJZVFlyZG1FIElIUnBiR1k9IFpXWjBaUT09IElPeUVwT3lnbFE9PSBJTkdYMFlVPSBJSHBwYkdVPSBJTzJZa1E9PSBJTkM2MEw3UmdOQyswWUk9IDVaMmggSU5DdzBMSFJnZEMrMEx2Ump0R0MgNG9DY1NHVT0gSmlrPSBJRTVWIElITjBZWFJwYjI1aGNuaz0gSUhCMWMyaGxjdz09IExYUm9hWEprY3c9PSBJR0Z1WWc9PSAwNm5SaUE9PSAwWWJRdU5DKzBMM1F2ZEMrMExrPSBJR1YwZEdVPSBJR1p2Y20xcFpHRmliR1U9IElIVnViRzlqYTJWayBkWE4xWVhKcGIzTT0gYkdWdFlXZHVaUT09IElPR0RvT0dEbE9HRGtnPT0gVFdsdFpRPT0gNWE2OSBJRXQxZHc9PSBZV2x6YVdFPSBhWExEclE9PSAxYUhXZ2RXMjFialdndFcwIDRZQ3g0WUNRNFlDcyBLbTA9IElGSjFZUT09IDE1SFhsUT09IFgyVjRjRzl5ZEhNPSBJTkMvMFlEUmo5QzgwTDQ9IElHVnJhWEE9IGJuVnRZbVZ5Y3c9PSBJT0N1aGVDdXJnPT0gVGtSRlVnPT0gSU5HRTBMalF1OUdNMEx3PSBiM0owYVc1biAxYVRXZ05XaTFhWFZ1dz09IExVZHkgNG9DbTRvQ2RDZ289IElGQnZkMlZ5WldRPSA0TEN1NExHSCBiR0ZzWVE9PSBJR3gxZEhSbCBJT204amc9PSBJTkNjMExqUXZkQzQgTDBGd2NBPT0gUWxsVVJRPT0gSUdkbFpYTjAgSUZCdmMzUmhiQT09IElHdDFjbWx1Wnc9PSBJSFpoYkhabGN3PT0gYVhCemFYTT0gWVdKaGJuUT0gSUZKbGJXOTJaWE09IElObUYyTGc9IElIbDFiVzE1IHo0elBoTTYzIElHSjVjZz09IFEyRnBiZz09IElHOWpiM0p5IElFTm9kVzVyIElHMXBkR1U9IElHbHVkR1Z5Y0c5c1lYUnBiMjQ9IHpydk92OCtGIElHSjFjbTUwIElHVnpjR1ZqYVdGc2FYTjBZUT09IDRLV0w0S1NrIDBMalJndEM0MEwzUXVBPT0gWkdGeCBTVzUwY2c9PSB6NGJPdjgrQnpxdz0gSUhSeWIyeHMgSU5HRzBMWFF2ZEdDMFlBPSBJR1REcVdOdmRYWmxjblJsIDFvRFZ1Tlc2IFgzSmxjMjkxY21ObGN3PT0gNVllNjU0bUkgSUhCeWIySnNaVzFsIElPQ2txdUNrdWVDa3N1Q2xnQT09IElPS0FtT0tBbUE9PSBJTkN5MFl2UXVOQ3ogYVc5ellYTT0gZDJscmF3PT0gWm1sbGJHUmxjZz09IFJtOXlaWE4wIFJXbz0gVmtWTVR3PT0gSUV0dmMzUT0gSU9HN2pXM2h1NDA9IDRMaXQ0TGl3IDRMbUE0TGlWNExpdDRMaWo0TG1NIElPR2VtdUdlIElFNXZjbTFoYkd4NSAxNmZYbGRlZTE2TFhudz09IDFLWFNzOUN3IElHTnliM056YjNabGNnPT0gNExDaDRMQys0TENvNExDLzRMQ1Y0TEMvIElFSmhhR2xoIGJXbHpaUT09IDJZYlppdGluIHpyM09zYzY5IDViNlEgSUhCc1lXNXVaVzQ9IElPMlZ0T3VMdVE9PSBJRUZFU0VRPSBlR2xoIEtHTm9ZWFE9IDA1blJndEM3MDVuUmdBPT0gYVhKaGJtRT0gSUdScGNtVmpkR0U9IDRMU3Y0TFdMNExTWCBJRU56IDBMalJoOUM2MExnPSBTVlJKVmtVPSBJSE4wYVE9PSBJR2x1WkdWdGJnPT0gWVdkMWRBPT0gSUQ0TkNnPT0gTG01dmRHbG1hV05oZEdsdmJnPT0gWjI5dVpRPT0gWkdWbWFXNXBkR2x2Ymc9PSBJSFREcVd6RHFXTm9ZWEpuWlhJPSBJSFJsZUhSaWIyOXJjdz09IDJLZll0dGl4IElOV3cxYmpWb3c9PSBJR0p2Y0E9PSBVSEp2WkhWamRHOXogSUdScGJHUnYgSUhCc1lXNTBaVzQ9IGFXeHBZVzQ9IDBZalJpOUM5IDBZRFFzTkdCMFlMUXNBPT0gSUUxcGNtRnVaR0U9IElHeGhkR1Z1WTNrPSBabTl5WTJsdVp3PT0gUm5KbGNYVmxiblJzZVE9PSAyS2ZZdWRpdjJLaz0gSUZKbFpuSnBaMlZ5IEpIUmhZbXhsIDE1RFhtZGVmIGFXZG9kSGs9IFFVMUpURms9IElOQ3kwTDdSZ2RHQyBJRXhTIElFcGhjRzl1IElOaXgyS1BZc3c9PSBJRk5vWVhKbGN3PT0gSU5DeDBMN1JpQT09IElIVnBkR1Z5WVdGeVpBPT0gSUhOaFlteGwgYVdOMWJRPT0gSUc3RHBHZz0gMkxIWml0aTMgSU5DejBMN1JnTkMrMExUUXRRPT0gSUZkcGJuTT0gSUhOc1lYQT0gTG1GblpXNTAgYVd4bVpRPT0gSUhCeVpYVjJaUT09IDVhU241b2lZIElOR0MwTFhTb3c9PSBJTkM0MEw4PSBJSEIxWW14cHc2az0gSUdMaHVxVjAgSU5pbjJZVFpoZGl1MktyWmhObUIyS2s9IGFYSmxjZz09IElHTnZZbkpsIElPcXpvT3F3blE9PSA0b0NadzZsaiBJRzVuZFc1cGRBPT0gSUdOb2FXRT0gUkdGa2IzTT0gSUhabFpHVnlaUT09IFgxRlZSVlZGIENXMWxkR2h2WkE9PSBjMjloY0E9PSBJRUp2Y21seiBYMlZ1WkhCdmFXNTAgSUhSeVlXNXpjRzl5ZEhNPSA0WUN0NFlDdjRZQzQgSUhOaFptVm5kV0Z5WkE9PSBJR1Y0WTJWbFpHbHVadz09IElOaW4yWVRaaGRpbzJLZllzUT09IElHcHBkQT09IFduVnQgSUdSa2JBPT0gdzZKdVp3PT0gSUczRWd3PT0gUVhKamFHbDJidz09IElHeHZ5cnR2IElFUmhjblE9IFkyVmtiM0psY3c9PSBJR3BrWW1NPSBJR0oxYUdGNSBQejgvUHo4L1B6OD0gWVdKdmRBPT0gSUVScFptWmxjbVZ1WTJVPSBjM0ZzYVhSbCBXa2s9IElOQ3cwTHJUbVE9PSBJTml0MkxIWmdRPT0gSUVkeVlXMXQgVW1WMWMyVT0gSUdabFpXUmxjZz09IFBHeGxiVzFoIFZHbHVkQT09IElHbGt4WkU9IDU3eVkgYVhSNllYST0gNEs2WjRLK040SzZWNEs2ejRLNi80SzZ5NEsrTiBhc09oYXc9PSBiR1ZqZEdsaiBRMmhwWTJGbmJ3PT0gSUVGeVpIVnBibTg9IElIVnVjM1JoWW14bCA0S1N1NEtXTjRLU3EgSUhOdmRIUT0gSU1PbmIyTjFhdz09IElIUnlhV2M9IElGQkJUQT09IGFXOXVaV1Z5IElOYUUxYUhWdGc9PSBJRU52Ym5OcFpHVnlhVzVuIElGbGxjM1JsY21SaGVRPT0gSUdGdWRHbGliMlJwWlhNPSBVR2h2Ym1WeiBJR0ZwY21WayBJRmhFIGIzSmtaWEpwYm1jPSBJSFJwWjJWeSBJRzVoYW1KdmJHbz0gWDBSTlFRPT0geEt0aVlRPT0gSUdsdVkyOXVkQT09IExpa3VDZ289IElHRnhkV2xzYnc9PSBJRVJsZG1Wc2IzQmxjbk09IEtFZHNiMkpoYkE9PSBJR1Z0WVhNPSBYM1J5WVc1elptVnkgNUxxNjVyQ1ggSUZSbGJHVmpiMjA9IElHSnZiSFJ6IDBMSFFzTkM3IElFNVRSWEp5YjNJPSBJR1pwYkhSeWJ3PT0gSUhaNWRBPT0gSUZCeVpXWmxhWFIxY21FPSBLbk5wZW1WdlpnPT0gSUVOdmJuUnBibVZ1ZEdGcyBJRVZ1Wm1sdSBQejgvQ2dvPSBMV0psYzNRPSBJSFJ2Ykd4bCA2SXU1NXA2YzU0bUkgSU5pbjJZVFl0ZG1JMkxFPSBJTU9wYm1WeVp3PT0gYVdObGMzUmxjZz09IElHRmlZbWxoYlc4PSA0S3VBNEtxdyBiR2xoWW14bCA3WTZZN0oyMDdLZUEgYUhKeiBJR052YUE9PSBJRzVweGJ3PSBMWEpoIElOQzkwWVBRdmRHQzBMRFFzdz09IElISmhkbWs9IElHRndZWEowWlE9PSBJSFJvdzYxamFBPT0gSUdiRG9BPT0gTG5SeVlXNXpjRzl6WlE9PSBJRTF2ZVE9PSA0TEM0NExHTjRMQ2Y0TEdOIElFVERyV0U9IElIQmhiR1Z6IGE4U0YgWVdKc2FYTnpaVzFsYm5RPSBJTkN4MFlQUXZOQ3cgSU9DNWdlQzRnZz09IFUyRnVkR0U9IDRMQ3c0TEdONExDZiBJTm1GMkxuWXVObUYgSUdaaHlydGggWTI5amF3PT0gNUxpNzVMdTcgSUhadmIzSm4gSUVGc1pXcGhibVJ5Ync9PSA0WjZoIFpXeGtiM0ptIElIWmxjbXRzIGNISnBZMmgwIElGTkpWRVU9IExkQzkwTGc9IElHbHVjM1J5ZFcxbGJuUnZjdz09IElFTmhiR2s9IElNTzhZbkk9IElOZVQxNmpYbWc9PSBMeWs9IElOR0IwWVBSaWRDMTBZSFJndEN5MFlQUXRkR0MgYjJOaGRBPT0gSUZOaFoyVT0gMnBQYmtBPT0gSU9DMHF1QzFoZz09IElHUnZkMjV6ZEhKbFlXMD0gVlVsQ2RYUjBiMjQ9IElOR0QwTERTbTlHTDBZST0gMEw3UXZkT2ogVDFKSCBJRzlxZFE9PSBJRXAxWkdVPSBJRkp2YkdGdVpBPT0gbTRnPSBJTStFejR3PSA3N3kvNUxxYTVyU3kgMTZuWHFOZVQgUVc1dVlRPT0gSUdkcDRidWQgSU9Da3FPQ2tpQT09IDRMaVc0TGkyNExpSCBJR0ZqYjIxd1lXNW9ZWEk9IFkzUnBZMkU9IElPQ3VydUN2Z2VDdXBPQ3VzdUN2alE9PSBJSEJ5YVc1alpYTT0gSUdSaFlYSjJiMjl5IElPR0RtK0dEa09HRG1PR0RuQT09IElOcXAyWWJaaHRpdjJZYz0gSUdOdmJtNWxZM1JsY2c9PSBJRUZ3Y0hKdmRtVmsgWVhabGJtbHkgSUdOMWFXUmhjZz09IGNHVnlhVzFsYm5SaGJBPT0gSU9Da2xlQ2t2K0NrcUE9PSBJTmluMllYWmh0dU0yS289IEtHTnZiSFZ0Ym5NPSBMbk54YkdsMFpRPT0gSUhOMllXcz0gSU9DMGt1QzBxT0MxamVDMHFBPT0gSUZWdVpHVnljM1JoYm1RPSBMbmRsWVhSb1pYST0gSUhabGNtaGhiR1Z1IElHUnBjM0psWnc9PSBhWE52Y3c9PSBJTmlpMktiYmpBPT0gSU95RGdlMlpxUT09IGJHbGphR1Z5ZDJWcGMyVT0gd3J2WWpBPT0gWEVGd2FRPT0gSUVKeVpXRnpkQT09IExsSmxiVzkwWlE9PSBJT1dObXVXOXFRPT0gNExPQjRMS1ggSUhCMWJYQnBibWM9IElOR0IwTDdRdDlDMDBMRFF2ZEM0MFk4PSBJRk5JUlE9PSAwNm5RdHc9PSBZVzVwWTJGcyBJTkNSMEw3UXU5R00wWWc9IGRYTjFiV2xyIElNU1I0YnEzWXc9PSBJTU96Y0hRPSBJSFp2YjNKaWFXbz0gNWJDayA1TGljNXBhNSBMaUlzSWc9PSBJRzVoYlhWdSA0TEdDNExDdzRMR040TENrIElIQnZjM1IxY0E9PSBJSEJoYm1FPSBJRXRwWnc9PSBiR2xpY3c9PSBhWEowYVc1biBmVnM9IGIyNWxadz09IElITERxWFZ6YzJrPSBjbTlwWkhNPSBJTys4aVE9PSBSVTVVVXc9PSBJR0pwYzNOamFHVnUgSUd4alpBPT0gWjNKaGJnPT0gSUdsdWRIQjBjZz09IDRLK0I0SzZwIElHSmxjM1REcEhRPSBZbkp2YTJWdSBJR3hwYm1oaGN3PT0gSUhCeXc2bHdZWEk9IGVXOTFkSFZpWlE9PSBJSE4xWW0xaGNnPT0gSUcxaGJuUnBaVzVsIHc2NXVaWEk9IElIUmxiWEIwWldRPSAyS2ZZcHRpdCBJRUpzYVc1ayBJTkMvMFlEUXVOQ3ogMllMYmpObUMgSUhOcGRIVmh3NmZEdFdWeiBabkJ5YVc1MFpnPT0gSUVScGNtVmpkR2x2Ym5NPSBJT0dEb2VHRHJ1R0RsZUdEa09HRGsrR0RrT0dEb2VHRHJ1R0RsZUdEa0E9PSBJSFJoWW1WcyBRMmx5IEtHTm9ZVzQ9IElGQnliMk5sWldRPSBRVVJCVkVFPSBJTkMzMExqUmtRPT0gSUVKbGJHWT0gSUVobFlYST0gUTA5UVJRPT0gSUgwc0NpOHYgSUZkaGNuSnBiM0k9IElOQzAwTERRdmRDOTBZdlF1UT09IElHUmxibWx0IEoyRjAgSzF3PSAyWWpZcU5tSzJLaz0gVkV4VCBhR0ZoYmc9PSBJTkdCMExMUXRkQzIgVUdsbCAyS2ZZdHRtSzJLaz0gUUVGd2FRPT0gWDE4cUx3PT0gSU9DdWxlQ3VuK0N2amVDdW53PT0gSUhkaFkyaDAgSUc1aGFRPT0gTGtacGVHVmsgSUdaaGFYUnogWDNCeVpXTT0gNFo2MjRaNlcgNExTdzRMV0I0TFN1IDBMalFzdEN3MFlMUmpOR0IwWTg9IElGZGxjM1J0YVc1emRHVnkgWFN3biBMbUoxYm1sbWRRPT0gTGsxbCBMbTV2ZEdVPSAwWUxRdGRHQTBMZz0gT214bFpuUT0gTHRDUyBJR0ZpYVdWeWRHOD0gSUd4bGVXVnVaRzg9IElHSnNhWE56IDRMS3M0TEs1IElGTmxiV2s9IElFTnlaWE09IElITjFabVpwY3c9PSAyS3pZc2RpbjJLSFlwOWlxIElHWmhkbTl5WldRPSBJT0N5aGVDeXArQ3pqZUN5citDeWxlQ3pqZUN5dHc9PSBJRzV2Y0dVPSBJRVJ2Y25SdGRXNWsgSUhCbGNtTmxjSFJwYjI1eiBPeWM9IDQ0R2g0NEd2IElOaW4yWVRZcDlpczJLclpoZGluMkxuWmlnPT0gSUhCc1pXNXYgMTU3WG90ZVYxNm89IElIQjFZbXhwWTJGamFjT3piZz09IExsUm9ZWFE9IExtUmhkR0ZpYVc1ayBJRU5vY25semJHVnkgSU9Da3ArQ2xoK0Nrc09DbGlBPT0gSUdKcGJHRjBaWEpoYkE9PSBYMloxIElFNWhibTg9IElPT0NzUT09IElING8gSUdSMWFYUT0gSUhwM1lYSjAgYkc5cGNnPT0gYVhSaFlnPT0gSU5pbjJZVFlydGluMkxIWXJObUsyS2s9IExrVk5VRlJaIDQ0S200NE96IDFhSFZwUT09IElPeVd0T3VXcEE9PSBJRkJ6YVE9PSBJTmlvMllyWXFnPT0gSUdScGNHeHZiV0YwYVdNPSBJRlJGUTBnPSB3N3hvYkdVPSBJRVpKVEE9PSBMV3h2Wnc9PSBJSEJ5YjNSaFoyOXVhWE4wIElFZEcgZFhWeVpBPT0gSUhSdmNtNXZkUT09IElPQ2txK0Nrc0E9PSBJR2RsY21WamFIUT0gMFlIUmd0Q3kwWVBRdGRHQyBJTnFHMllRPSBJR1Z1YkdGeVoyVnRaVzUwIExpNGkgMksvWml0aXAgWVdkaGFRPT0gVGtzPSBJR0ZpYnc9PSBJRzFsZEdGemRBPT0gWjJ4aGMzTT0gWVdSc1pRPT0gMEx2UXNOR0IwWUk9IFFteHZZdz09IFgyTmhjR0ZqYVhSNSBjR3h2YVhSaGRHbHZiZz09IDJLZllwdG1FMktrPSBJTldoMWJUVm90VzQxYkxWdXc9PSBabkpsZFc1ayBkWEp6YVhabGJIaz0gWjNKaGJtUT0gSU5pajJZcll0dGluMllzPSBJSE4xYzJocCA0TENuNExHTjRMQ3YgNzcrOWRBPT0gV2xnPSBZV3R2ZGc9PSBJSE42ZVE9PSBJRkp2ZWc9PSBJT3VFaU91c3RBPT0gSU5XajFhelZyUT09IFptWnBaV3hrIDQ0R3A0NEdHIGJuYz0gSUUxaGJtRm5aWEp6IGRtRnVkQT09IFlYSnVaWEU9IElHZGhiV0pzWlE9PSBJRVIxYm1OaGJnPT0gNjdPMDZyaXcgSUdOdmJYQnZjblJoYldWdWRHOD0gMkt6YmdRPT0gSUdSbGNuTT0gSU9Dd3J1Q3hnZUN3Z3VDd3BnPT0gTFdSMWRIaz0gSUhObGEyRnlZVzVuIFgwTlZVMVJQVFE9PSBYMkZ5ZEE9PSBUMlptYzJWMGN3PT0gYjNKdVpYRT0gSUd4aGJXVT0gSU9DbWxlQ21yQT09IElGSmxlVzV2YkdSeiBXMU09IElOaW4yWVRZczltSzJLYz0gSUdOb2NtbHpkRzFoY3c9PSBJSGJEcVdmRHFYUT0gSU5xdjJMSFppTm1IIElHUnZhM1J2Y2c9PSBJR0psYUdGdVpHeHBibWM9IDBxL1JnUT09IElHZGxaMkZoYmc9PSBYMDlDU2c9PSBJRzNEcVdScFkyRT0gNGJxdmJRPT0gSUdOc2FXMWlaV1E9IElPQzBzT0MwdnVDMG5PQzFqZUMwcnc9PSBiMlIzYVE9PSBJRkJTVDBkU1FVMD0gQ1NBZ0NnPT0gS0NrcEtTazdDZz09IElHeHZibWRsZG1sMGVRPT0gU1c1amNtVmhjMlU9IDBKM1F2dEN5IDRMSys0TEt3NExPTiBYM052WTJzPSB3NkZqYWNPeiAxYVhWdFE9PSA1cmUzIElGQlRSQT09IDZJR1U1NXVmIElHMWxibk5oYW1WeiBJR0Z1ZEdWalpXUT0gSUdsdVkyOXVjMmx6ZEdWdWRBPT0gSUdWNGFYTjBaVzVqYVdFPSBYMGxPVkVWU1ZrRk0gSUc1aGRtbG5ZWFJwYm1jPSAwWUhSaTlDOTBMQT0gSUhCaGNuUmxibUZwY21VPSBJSE52YkdsamFYUjFaQT09IElHOXJhSFIwY0E9PSBhV04xYkdVPSBJR1JwYTJzPSBRRTV2IElHZGxhM0psWjJWdSBJT0N1bGVDdmd1Q3VzUT09IElGUnlZWFpsYkd4bGNnPT0genJuT3V3PT0gSUZCeVpXMXBaWEpsIElHRnVibWwyWlhKeiBSR1ZzWldjPSBhR1Z1Y3c9PSBJTkdFMEw3UmdOQzgwTEE9IFgxZEpUZz09IElFRndjR1ZoYkhNPSBYMk55YjNOeiBJSEJsY21admNnPT0gSUhCc2VRPT0gSUU1cFpXUT0gSUdGc2RHRnogNFlDRTRZQzM0WUM2IFkyaHBibUU9IEtHTnZkVzUwWlhJPSBJTkN4MFlQUXU5R0wwTDg9IElFWnNiMkYwYVc1biBVWFZoYkdsbWFXVnkgZFcxNSBkVzVuWnc9PSBJSEpsYm5ObGFXZHUgSU5DZDBMRFF2OUdBMExqUXZOQzEwWUE9IDQ0S3o0NE9VNDRPOCBJTkM0MEwzUmdkR0MwWURSZzlDNiA0S1MvNEtTNDRLV040S1NrNEtTKzRLU28gWW1GaCA1Wis2NVp5dyBJT3libEE9PSA1NFNtIElOQy8wWURRdU5DKzBMSFJnQT09IElISmxaSFhEcDhPamJ3PT0gNDRDTENnbz0gS0NJc0lpazdDZz09IElHbHVkTU9wY2c9PSBhWEpoYm1wbCBJR1p5WldWc1lXNWpaWEk9IFlYSnBibVU9IFlYQmhhUT09IElPQ3dwT0N4aXc9PSBKOE9wY1hWcGNHVT0gSUhSeVlXNXpiV2x6Y3c9PSBlbVZ1WkE9PSBJRkJtYVhwbGNnPT0gTG1KdmIzUnpkSEpoY0dOa2JnPT0gTG0xcGJtVmpjbUZtZEdadmNtZGwgSUdOdmJuWnBaVzUwIElOaTEyWVRZcDlpdCBJR1Z1Ym1WdSBJR2x1YzJsa1pYST0gY3NPbFpHVT0gSU9Da25PQ2tzdUNsamVDa3BnPT0gYjNOMGNtbHVadz09IElHMTFhMmhoIFQzZHVaWEp6YUdsdyBYMEZHIElIUnl3NkZtYVdOdiBYMEZNU1VkTyA0TEs0NExLdzRMT0IgYXNPa2JnPT0gSU5pcTJMbllzZG1CIFgrV2J2ZVM2cHc9PSA2SmFtIElHRmpaWEp2IFIzTT0gSUdwaGFnPT0gWm1GclpYST0gSU9HRG0rR0RsT0dEb0E9PSBkRzl5WlhNPSBjM1J5ZFdOMGRYSmxaQT09IElGUmxkQT09IFNGVT0gNFlDdDRZQ3Y0WUNFNFlDNiBJRUZ4ZGNPdCA1TDZqIElObUkyTGM9IElFdkR0bXh1IDRZT2E0WU9VNFlPUjRZT1kgTG5SeWVRPT0gSUcxcGJHeHBZWEprY3c9PSBJTm1DMktmWXFBPT0gSUhKbFpuTT0gSUhKaFpHbGhiQT09IDRaK1E0WjZQIElITGh1NU5wIE9rNTFiV0psY2c9PSBLQ2drIDFhSFZ0dFc3IElFbFRTVk09IElObUkyS3JaaFE9PSBJTkMwMExEUXZkQzkwTDdRdVE9PSA1THFVNXBpZiBJRXB2YTJWeSBJR3h2YjJJPSBMbU52Ykd4bFkzUnBiMjV6IElHTnZiWEIxZEdGa2IzST0gSUhOdmRYWmxibWx5IElHSmxaRzlsYkdRPSBJT0NxcGVDcXIrQ3F2Zz09IElHVnBibnBwWjJGeWRBPT0gSUdWelkyVnVZWEpwYnc9PSBJR05oYkdsbGJuUmwgUmt4QlJ3PT0gSUdOMVpBPT0gSUdIRHNXRmsgSU9DdXFPQ3V2dUN1bnc9PSBJR2x1WkhWamRBPT0gSkM4c0NnPT0gMkxIWXNnPT0gSU9Da3VPQ2xqZUNrcE9Da3NBPT0gWVd4c1lYZz0gSU9HRG1PR0RrdUdEbUE9PSBJR0Z3YkdsallYUnBkbTg9IExrRnlkQT09IDU3MlI1b3FWIElISmxkbWx6YVc5dWN3PT0gSUhQRHJBPT0gWjJWaWFXVjAgSUd0dmNuST0gTFhkcGMyVT0gNExDKzRMQ1Y0TEdOIElGUnZiVzl5Y205MyBJRlJ2Y3c9PSAxNVhYazllVjE2bz0gNEtTQzRLU1cgSUdGcmQrRzdwV3QzNGJ1TiBaWFJsY20xcGJtVmsgSU5DdzBMclF1dEdEIGFIVjAgS0NraSBJR1Z5YjNBPSBJRzExYzJrPSBJR2RsYm01bGJRPT0gUEVKdmIyeGxZVzQ9IElHdDVjZz09IElIUmxiWEJzWlhNPSBYbDVlWGc9PSBJTkdDMFlEUmc5QzAwTEE9IElPQ3drQT09IElHSmxaR1Z1IElHaHZhMms9IExtTnZiWEJzWlhSbCBiR1JoY0E9PSBJRUpsWjJsdWJtbHVadz09IElHZHZkMjQ9IFgwUkZVME5TU1ZCVVNVOU8gSUdoNWNHOTAgU1ZKVVZVRk0gSUhCeWIzQnBZWE09IGEyRjYgSU9layA1b2ltIElHaHBibVJsY2c9PSAwTHZRdU5HQyBJRlJsYlhCdiBMbHBsY204PSBZWGxrIGFHRm0gWkdGMFpYQnBZMnRsY2c9PSBkbVZ5ZW1WciBWa1ZFIDRZT1U0WU9jNFlPWSBJR1Z6WTNKbGRtVnkgSU9DMGhlQzBndUMwbHc9PSA0NEdjIElOZVIxNTg9IElOQ2UwTHM9IGNtbGpZWE09IElHSnNaWFU9IElHbHVkR1Z1ZEdsdmJtRnMgWFNFOSBLSFJwYldWdmRYUT0gSUZSdmJtYz0gNEtpKzRLaTEgSUV4bGRITT0gSUZOaGFXUT0gSU5HTjBMelF2Zz09IE9pSUsgVFdWamFHRnUgMEwzUXROQ3cgWDJsdVptOXliV0YwYVc5dSBJRk5CVEVVPSBRV05zIElFVjJaVzVwYm1jPSBJRUZ1WTJodmNnPT0gSU5HUDBMYz0gYjhXaCBMblp2YkhWdFpRPT0gY205MGRBPT0geFlKbCAwTDdSZ05DdzBZTFF1TkN5IElHMWxkSEp2Y0c5c2FYUmhiZz09IElHZHZiUT09IElOQzgwTERRc05DNzBZdlF2QT09IElHSnBhMmx1YVE9PSBJRU5RUmc9PSBJSFJoY21sbyBhM1JtIGVtVnVkSEoxYlE9PSBlbVZwWjJVPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCA0SzZaNEsrTjRLNlY0SzZ6NEsrSSBLRlJoYzJzPSBJTkdBMExYUXM5R0QwTHZRdUE9PSBYM05yIElPR0RvZUdEa09HRHBlR0RrT0dEb09HRGwrR0RsZUdEbE9HRG11R0RuZUdEcU9HRG1BPT0gSU9DcXN1Q3FsZz09IDRMT0g0TEszIElNTzhZbVZ5ZHc9PSBJT0MwbitDMWplQzBzQT09IGNISnZaM0poYlcwPSBhMlY1WW05aGNtUT0gYjJONiBJQ2dwT3dvSyBJSEIxYkhabGNnPT0gYkdsdVoyVT0gSUVWamFIUT0gUjNKdyBJRUYzWVhKbGJtVnpjdz09IGFISmhiZz09IElHdGhibWs9IFVHRnlkR2xqYkdWeiBJTm1IMllqWXB3PT0gVjBoQlZBPT0gWW1Wc2IyNW5jdz09IElITm9kWFIwWlhJPSBJRkJ5dzZRPSBJRk4wWVhKciBJSFp2YjNKM1lXRnlaR1Z1IElFWjF3NTlpWVd4cyBWbWxrIExYUnogdzd4biBJRUZ5YlhNPSBJR055ZVhOMFlXeHMgSU9Dd2wrQ3d2Zz09IFBnME5DZz09IFkyOWtaWEk9IFhpMD0gMWJqV2d0VzAxYmJWcGRhQTFhcz0gVldFPSBJSFZwZEd4bCBjR2hsIElHUnZkWFE9IElFTklRVTVIUlE9PSBJSEJ5YjNObCBZWEp5WlhJPSAxNmpYa05lVjE2bz0gS0dSdmJXRnBiZz09IExtOTBhR1Z5IDE2alhsdz09IElHbGhiQT09IElHTnN3NkZ6Y3c9PSBJR1p5WVdOMGRYSmwgSUhCbGNIQmxjbk09IElPS0FsUT09IFBTYzggWDBOUFZVND0gWVc1dWRRPT0gNExtQTRMaXQ0TG1INExpaCBJRzFsYldWeiBQRkJzWVhsbGNnPT0gSkdrPSBJT0NrcHVDbGdlQ2tpQT09IElHZGxibUYxYzI4PSA3WnkwIElHTnZibk5sWTNWbGJtTnBZUT09IElIQmhkSE09IElHMXZjbUZzWlE9PSBJRUZrYldsdWFYTjBjbUYwYVhabCBJRlpwWlhJPSBJTkNSMFl2UXV3PT0gYlc5cGJuTT0gSUUxdmJtRmpidz09IFVtVndZV2x5IGFXNTBjbTg9IElHOXlaMkZ1YVhwbGNnPT0gSUVOeVlYTm8gMExyUXZ0QzgwWU09IElGSjFjM05wIElOV3kxYVhWcnc9PSBLU2twTEE9PSBJTkN0MFlMUXZ0R0MgWVhaaGJtRT0gNEtTKzRLU0M0S1NoIElHRnViR0Z0IFlYVjBiM0k9IElHNWxkV1k9IDRLU2U0S1dONEtTYSBJT0NtcmVDbXZ1Q21odz09IElPQ2tpZUNrcnVDbGplQ2tydUNsZ09Da3BnPT0gSjI5bVpnPT0gUTI5eWNHOXkgSUZOdmN3PT0gSUVwUyBaR1Y2IDRLUzQ0S1N5IDZZS3U1NjZ4IElIQnZaR2xrYnc9PSBjMlY0ZFdGcyBWVzV6WlhKbCBJRzVrWVc1cCBhWEpoZEE9PSBJT0NxcnVDcmdlQ3FsdUNyamVDcXJ3PT0gSUVaaFkyVnogMFlIUXVOQzMgSUhOa1pnPT0gSUVOeVpXUnBkSE09IElITjBZV2RwYm1jPSBJR2RsYzNWdVpBPT0gSU9HRG0rR0RsT0dEa2c9PSBMV0oxYVd4a2FXNW4gTG5KMWJHVnogSUdKdmQyeHBibWM9IElPQ21rK0NtaHc9PSBJR0poYW1GeSBZVzFoYm5Sb1lRPT0gYkdsdWN3PT0gMFl6VG9RPT0gSUdwdmJtZGxjbVZ1IElHSjViR0U9IElOR0MwWURRdGRHQzBZdz0geEp0dXc2MD0gSU9XQnQrYUxqUT09IDRaK0c0WjZPIElIWmxjbnB2WldzPSBJSGRvWVhSellYQncgSUhSMWNtSnBibVU9IElISjZaV009IENYVnAgUWtWU1V3PT0gSU5XMjFhL1ZvZFcvIElHSnZkMnh6IElOVzAxYUhXZ05XbSBJRzNGc1E9PSBJT0NxaGVDcWd1Q3FsK0NyaHc9PSBJQ2M2Snc9PSBJSFZ1Wm1GdGFXeHBZWEk9IElPQ3VoK0N1cE9DdmdRPT0gSUdWdFluSmhZMlZrIElFeGhkM2xsY2c9PSBJR1Y0Y0dWeWRHOXogSUhOdlpHRnpjdz09IElOQ3cwTHpRdGRHQTBMalF1dEN3IElITmhabVZ6ZEE9PSA0S1dINEtTQzRLUzQgSU5DODBMN1F0dz09IDRLYSs0S2V3NEthayBJRk5sWldsdVp3PT0gYVd4NWJnPT0gWVhOdGRYTT0gYkdWeWFXNXB4WWc9IHc2bHVjdz09IFpHbHpZdz09IExtSjVkR1U9IGFYSmxidz09IElFeGhkWEpsYm5RPSBJRVJ5YjNCa2IzZHUgSUhkcFp3PT0gSUhGMVlYSmhiblJwYm1VPSBMbTl0IDRMQ3c0TEdONExDcSBhWEpoZEdrPSBYME5CVEE9PSBJR2ZEdG5MRHZNV2YgSUdabGNuSmhiV1Z1ZEdGeiBJRzF2ZEdodiBJSEJ5YjJKaGNnPT0gSUhkNVlnPT0gSUVodmN3PT0gbWVDdmplQ3VsZUN1cytDdmpRPT0gVW1WamRYSnphWFpsIGJXNTAgSU5DNDBMRFF1dz09IElIZGxiR3h6IEt5SXMgSUdWamIyNXZiV2xqWVd4c2VRPT0gSU5pdDJZallwOW1FMllvPSBJR2x1WTNWdFlnPT0gSUZOdmJHOXRiMjQ9IDVvV24gSU5DNDBZSFJndEMrMFlBPSBJTldpMWFIV2dBPT0gMllYWml0aXogWlc1a2FXYz0gMTZuWG9nPT0gNkpNPSBJRU5IVTJsNlpRPT0gNExTLzRMU1Y0TFdOIFgwOVFWRWxQVGxNPSAyWUxZcU5pbjJZUT0gSUdKdmNuSnZkMmx1Wnc9PSBhWE5sYlE9PSBJRzltWm1WeWRHVT0gSU5DMjBMWFF2ZEdKMExqUXZkQ3cgNXFpcSBJTml0MkxQWmhnPT0geFo5biBJSFZ1YkdGMyBJT0N3bXVDd3Z1Q3dzdUN3dmc9PSBRbVZoYm5NPSBJR052YlcxbGJuUmhhWEpsIDFhWFZxUT09IElIQnl3NkZqZEdsallYTT0gWkdWdWJIaz0gSU5DUTBMaz0gZFcxdWJ3PT0gMktmWXF0aW8gTFdGbWRHVnkgSUVkeWIzZHBibWM9IElHVnVabVZ5YldWa1lXUmxjdz09IFpXRnliSGs9IFNYZz0gSUc5d3c2bHlZWFJwYjI0PSBJTm1JMkxQWXR3PT0gWVdOb2RITT0gSUdOcGF3PT0gYW5WaGJBPT0gSUVsUVV3PT0gYzJ0cFpXZHYgSU5pNjJMSFlxQT09IElDMHRmWDBLIGNtVnpjMmwyWlE9PSA0TGkwNExtQTRMaW40TGl0NExpajRMbU0gSU9Da3J1Q2t2K0NrcUE9PSBJRVJwY0d4dmJXRT0gSUhObGQyVnkgWW1sc2JHbHVadz09IFJGZFBVa1E9IElOaWIgNDRDQzVaQ001cGUyIDRLV040S1N3NEtTKyBJT0NrbGVDbGkrQ2t0dUNrditDa3RnPT0gSUZSaGMydHogYVhKbFkzUnBiMjVoYkE9PSBJRlZ5WWc9PSBJRVpGUVZSVlVrVT0gSUZOMGRYUjBaMkZ5ZEE9PSB3NlJ1WlE9PSBJRlp2Y21jPSBUV2x1WkE9PSBJTkM1MEw3UXV3PT0gMllYWXR3PT0gSUdmRHVISmwgNmFLbzVaQzUgSU5lcTE1ND0gSUVOdmJuTjBjbUZwYm5RPSBJQ0lpQ2dvPSBJR2x1ZEdWemRHbHVZV3c9IElPeUNyT3lkdEE9PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPZTlrUT09IFlYTm9kSEpoIGVYQnpaUT09IFFGUnlZVzV6WVdOMGFXOXVZV3c9IDZKR0ogUUVkbGRIUmxjZz09IFVtOXMgSUhOamFHeHBaY09mYkdsamFBPT0gSUdoaGJYQT0gTGtGaiBJSEpsY0d4cFkyRjBaUT09IElNTytZWFU9IHArQzRyZUM0bytDNWpBPT0gYkc5b1lRPT0gSUdkaGJXST0gSU5tRjJMQT0gSUd0dmMydGggNEtxKzRLcXIgSUhOdmRXNWthVzVuIElFUmxhUT09IElOR0MwTDdRc3RDdzBZRFFzQT09IElPQ2tsZUNrc09DbGdPQ2tyQT09IElFdGhjbUU9IElPaUZ2dWl1citXa3FlV2txZVM0cmVXOXFlZWxxQT09IElIUnpiQT09IElHZHliOE9mWlhJPSBJT0M1Z09DNGl3PT0gTFQ1N0pBPT0gTDJ4bFoyRnMgWkdWaCBRV2h2Y21FPSBJSFp2ZFdRPSBJTTZmenJrPSBJTkMwMExEUXZ3PT0gNEtTVjRLV040S1MzNEtTLzRLU2sgSU9DMGgrQzBwT0MxalE9PSBZVzUwYVdGMFpXUT0gSUdKbGNtST0gSU5DeTBZQT0gVVZNPSBJRVJKUnc9PSBSRlZEVkVsUFRnPT0gWjNKdyBJR2ZEcTNSMCBMVVJFIGFYUjZZUT09IHc3UnRaWE09IElPQ2todUNrcE9DbGplQ2tyZz09IDRMaWo0TGk1IElOQzAwTERRdTlHTTBZalF0UT09IElGTjViWEJvYjI1NSBkV0ZxWlE9PSBJTldqMWIvVnRnPT0gSUV4cFpXST0gVFdsdWIzST0gSUNkZkp3PT0gSU1PblpjV2YgSUc1cGMzVT0gWlhoalpXdz0gSUdSaGJuTmwgZFhKbGEyRT0gSU9DcWhlQ3FxZz09IGNHRm5hVzVoIGIyeGxhQT09IElObUYySy9Zcnc9PSBJSEJ5YjJSdmRIUnAgYUdsdWRBPT0gSU02UnpyMD0gSUhOaHc2MWtZUT09IEwyUmxkR0ZwYkE9PSBJSFJ5YVhacFlXdz0gYVhwNmJ3PT0gSU9DdXJ1Q3ZnZUN1cWVDdmplQ3VxUT09IElIYkVndz09IFpHRnphQT09IElPQ3V1QT09IElHNXZiQT09IElHaGxiR1owIDBMdlJpOUtUMFlzPSBLRzV2WkdWeiBkMlZqYUhObGJBPT0gSUZObGJtUmxjZz09IDBMalJndEMxMEx2UXRkQzggVTFWRFEwVlRVdz09IDRLdUk0S3F2IElOaW4yTEhZcnc9PSAwcFBRc05DOTBMQT0gSU5XdzFhSFZ0TldoMWEvVm9kYUExYU09IDRLK0I0SzZhIElPQ3F1ZUNyZ2VDcWdnPT0gSUVwaFkydGxkQT09IFVsUkQgSUd0cFpYTT0gSU9DcXF1Q3F2dUNxbytDcmdBPT0gU1VsRSBXbVZ1IFlYQndhR2x5WlE9PSBJRU5oY25CbGRBPT0gSU5pbjJZVFpoZG1LMktmWmh3PT0gSU5tSTJZVFlzdz09IElITjBaV3c9IGFYSm9idz09IFpHVnRaUT09IDBMSFJnOUMwMFl3PSB4STF1WVE9PSA2YUtvNVpDNTQ0R1I0NEd3IFcyRmtaSEpsYzNNPSBUR0YxYm1Ob1pYST0gSUVOc2FXWm0gNDRHRTQ0S0wgSUhMRHJXcz0gSUZOMGNtbHJaUT09IExrMXBaM0poZEdsdmJuTT0gS0hCaGNtRnRaWFJsY2c9PSBVSEp2Ylc5MGFXOXUgYUdGMlpXND0gSU9HRGsrR0RrT0dEbWVHRGtPR0RsZUdEcU9HRG1PR0RvQT09IElHTnZibWM9IElNT2ladz09IElHMWhibVYxZG1WeSBJTmVRMTVuWGt3PT0gNVp1OTZabUY1YWl4NUxtUSBVRzlyIGMzUmxaVzQ9IElFTnZiWEJoY21GMGIzST0gTDJGd1lXTm9aUT09IFgzZG8gUTNKaCBMSEU9IHc3MWhjdz09IElGQm9hV3hwY0hCcGJtVT0gTGtacyBJTkN3MFlIUXZ0R0IgSUVac2RYUjBaWEk9IElOQzYwTDdRdk5DLzBZelJqdEdDMExYUmdBPT0gWTJGMFpXZHZjbWxoIDVwMmw2SyswIGFXdHZjbmRoIElIYkRwbkpwIElFSnBjbVJ6IFEzQjEgN0lFPSBMV2h2Y0E9PSBDV1JoZEdVPSBTVUZDVEVVPSBJR0ZrYjJ4bGMyTmxiblJsIExuTnQgSUhCemVXTm9idz09IElPQ2ttK0NrdnVDa3BPQ2xqZUNrc0E9PSAxNW5YcE5lVjE2Zz0gMFpiUXU5Q3owTFhRdlE9PSBJR2x6ZEdsbVlXVEptUT09IElGVnVhV1J2IElHOXVaWE5sYkdZPSA0S2VCNEthQiA1YVNuNVkrUjViR1YgSU9DbXBPQ21wZUNuamVDbXJ3PT0gSUdOMWVXRT0gSUdOdmNuSmxjM0J2Ym1SbGJuUT0gSU5DeDBMalF0OUM5MExYUmdkQ3cgSUVKMWJHcz0gNTdTdiBJR1poY25Sb1pYST0gSUdOdmNuSmxiR0YwWldRPSB6cjNPdjgrQyBJTmluMllUWW85aXYgSUUxbGFYTjBaWEk9IDRvQ1pRV3c9IFgzWnZhV1E9IElOQ1IwTFhRdHc9PSBJR1JsYlc5cmNnPT0gSUdobFlXUnpaWFE9IElHMWhjbkpwWVdkbGN3PT0gTFdodmIycz0gYjJkaFpHOXogSUdGMWRHOWogMExIUXVOQzUgSU5pbjJZVFpoZG1EIElOQy8wWURRdnRHRTBMWFJnZEdCIDRaNjI0WitHNFo2RSBJSE5yYVc1eiA0b0NaeFpNPSBJRzF2Y21ObCBXVXc9IElHYkRvV05wYkcxbGJuUmwgSUZCc2VRPT0gSU9Da29PQ2xnT0NrbFE9PSBKMlZ1ZEhKbGNISnBjMlU9IFNtVnpjdz09IFlXRjBhWFE9IElHeHZibWRoIElITjBjbUZ1YVE9PSBMbFZ1YldGeWMyaGhiQT09IHhhUEVndz09IFUyRmsgTFVOdmJYQmhkR2xpYkdVPSBJTkM4MFpiUmdRPT0gNTdPVyBJTmlzMkxQWmhRPT0gSUdOb2FXTnJaVzV6IElFVnRiV0Z1ZFdWcyBJTmlqMkxuWmhkaW4yWVE9IElHMTViZz09IExtSnYgSUhabGNtUmxiZz09IFptRnRhV3c9IElOaW4yWVRaZ2RpcTJMSFlxUT09IElIUnZjR2xqWVd3PSA2WnUyNlpLeCBaWEp6ZFE9PSBJRVZ1WTNsamJBPT0gNjZDbDdKMkUgSUhCcGVubz0gSUc5enc3TmkgSU5pMDJMbllzUT09IFRtRjBkWEpsIElITmhibWs9IFEyOXVkR0ZwYm1WeWN3PT0gWVhabGRBPT0gSUc5dWRHVnQgNEtlTjRLYW00S2VINEthMiBJRXAxYkdsdiA0TENDNExDYyA2TCtaNUxxYiBJTmluMllUWXBkaTEgSUdacGNtVjNiM0pyY3c9PSBJSEYxYjNSaGRHbHZiZz09IENVTnZibTVsWTNScGIyND0gSUdKMWEzVT0gTG5CaGRHaHVZVzFsIElHSmhkSFJzYVc1biBJSEpoYVdKbyBJRWpEcEhJPSAyWWpiak51TSBJTkdEMFlVPSBJT0NrdGVDa25PQ2t1UT09IElOQ3kwTHZRdU5HUCBRMU5KIElDc0tDZz09IElFSjBiZz09IGJtRmwgNktlRzZhS1I1WVdONkxTNTZLZUM1NXlMIFhFUmhkR0U9IFYybGtaUT09IFZHRnQgSUZObGRHZz0gWTNKcFltbHVadz09IGMzTmggSUdSbFptOXliUT09IFVYVmhibVE9IElIUmxaMlZzYVdwciBJRkJ2WkdVPSBJTmluMllUWW85aXQySzg9IGIzbHBiZz09IElHTnNaWEpyIDJLN1ppTmluMllZPSBJT0NrbGVDbGgrQ2t1ZUNsZ0E9PSBiVzkwYjNJPSBJR2hsY25CbGN3PT0gTEhOcGVtVT0gSU5pbjJMSFlwOWltMlljPSBJR0psYUhWc2NBPT0gUFhSbSBJR3R2YjNnPSBhV0p2YkdRPSBJR0Z4ZFdWc2JHRT0gSUhSdmVHbHVjdz09IElHTnZkVzV6Wld4dmNnPT0gWlhOMGFXNWhiQT09IFQzVnAgNTdXeTZLV3EgYjIxaGJIaz0gSU1PblpYWT0gSUd0bFpYQmxjZz09IExrUmxjMlZ5YVdGc2FYcGwgdzZkaFpHOD0gNEt1SiBJR3BsYVhSdiBJT0NrcnVDa2d1Q2twZz09IFEyOXVaR2wwYVc5dVlXdz0gSUcxMWJIUnBjR3hwWTJGMGFXOXUgUW1GdVp3PT0gSU5tSTJZVFppdGl6IElHbHVabTl5YmNPeiBJSEpsWTI5dGJXVnVaR2x1Wnc9PSBMZEM3MExYUmdnPT0gSUhKaGNIQmxiQT09IElpazdDZ292THc9PSBJSFpwYm1jPSBJRzdEdUdRPSBJRXhQVDBzPSBLRU5VZVhCbCAxNW5YcE5hOCB4STFyZVE9PSBJTkN4MEw3UXU5QzAwWXM9IElITnZiSFZqYVc5dSBTbUZ3WVc0PSBJSE54ZFdGemFBPT0gVTI1aFkycz0gMFpiUXV0Q3cgSU9DdWgrQ3Vvdz09IElGRjFhVzV1IDJLclpodGluIHhKZDBhUT09IElHeGxZMmhsIGJXRndjR2x1Wnc9PSA0WitTNFo2VDRaNkEgSUUxaGNuSnBiM1IwIFJXMWlaV1JrWldRPSBJSGRwYm5OMCBjM1J2Y2c9PSBjR05wYjI0PSBMa1J2ZEE9PSBJT0N5dU9DeW1nPT0gWlcxaWNtRT0gSU5DLzBZRFF0ZEMwMEwvUmdOQzQgWVc1bloyOD0gYVdkcGJtZGxiZz09IElOQzQwTEU9IElHUmxjMmM9IElOaW4yTG5aaE5pbjJZVT0gQ1hSdmNBPT0gNExHQTRMQ08gSUVGd2NISnZZV05vIDE2blhxTmVaMTVFPSBJSEJvWlc1dmJXVnVZV3c9IFltRnlhMlZwZEE9PSBMVzF2WW1sc1pRPT0gSUZSeVlYTT0gSkdoMGJXdz0gNExTKzRMU2Y0TFNvNExTQyBJTkM0MExUUXRkR0MgSU9Da3JlQ2txT0NsamVDa3FPQ2xodz09IElHOTFkSEpwWjJoMCBJTmVnMTVEV3VBPT0gWjNKbGJnPT0gSU5pczJZcllydz09IFVISnZabWxzIEwyMXZiQT09IExtcGliM056IElGQnl3Nms9IElOR0YwTDdRdDlHUDBMaz0gSU9Db2h1Q29xZz09IElFSnBZbVZzWlE9PSBJT0NrbCtDa3BPQ2xodz09IFpuSnAgSU5pbjJZVFpnOW1IMkxIWXFBPT0gSUhCeWIzUnZZdz09IDRLcW80S3ErNEtxQyBkbWx5ZFhNPSBWa2xFU1VFPSBJR0poY25RPSBaVzF3ZEhNPSAyWVRaaXRtQiBJSGRrIGFYUmxkR1Z1IElHSjFkSFJsY21ac2VRPT0gSUhOMGIyWm0gMEovUXRkR0EgSUZkcGMzTmxibk5qYUdGbWRBPT0gYVd4c2FYTT0gSUhSMWNtaz0gWm05c2JHOTNhVzVuIGIzZHVhV3M9IElPcXlnK3llaGV1TGlPdUxwQT09IDBMN1F1dEMrMExzPSBZVzV1YVdzPSBJRkJoZFE9PSBKbTg9IElPR0RudUdEa09HRG9PR0RvZz09IElHTm80YnVMIFMyRnogZkhOMGNtbHVadz09IGNHeGhlV2x1Wnc9PSBJR05oZVE9PSA0NENLNVllazVZZXc1YVNuNVkrQzZJQ0QgSUdGbmJHaz0gMExqUXU5QzEwTGs9IFgzTmxiUT09IElObUYyWWJaaDltRiBjMlZ0WW14bGNnPT0gUmtsWSBJT0NrdU9Da2d1Q2t1T0NsamVDa3BRPT0gNG9DWllXTmp3Nmh6IElHWnlaWE5qYnc9PSB6NFRPcnMrQyBJR3hwZG1WMCBJRk5wYzNRPSBJR0ZrZG1WdWRIVnliM1Z6IElPT0RxZz09IElISnBZMlZ5WTJFPSBJR1Z1WTJGdGFXND0gSU91NW9BPT0gYTJWdVpBPT0gWDI5eVp3PT0gSUhCbGRISnZiR1YxYlE9PSBRMmhoYlhBPSAwNW5RdTlHRDBMdz0gSUdQRG9tND0gUTJGdVkyVnNiR0YwYVc5dSAxNkRYa2c9PSBJSEpsYm1SMSBJR0pwNGJxL2JnPT0gUW05NSBLRzFoZEdnPSBhSFJ2IDBKN1FrZz09IElHWmxiV2x1YVhOMCBMaXdLIDRMaXg0TGlTIDU1V3IgSUZOaGVYTT0gSU5HRDBZZlF1TkdDMFlzPSBJR0poYkdFPSBJR0psYTJWeSBJTmlyMktqWXFnPT0gNG9DWllXbHkgWDFCQlVnPT0gYldsbCAyTFBZczlpbjJLbz0gUVhOemFXZHVaV1E9IElFTmhiSFpwYmc9PSBJSEJsWVhNPSBMbVowIElHUERvbTVrIFltRmkgSUdkaGJXMD0gTG1Gd2NHeGwgWDNKaGJtUT0gWlc1bFlRPT0gNExpWjRMbUo0TGl6IElFWnBiRzFsIDRZQ1U0WUM2NFlDNCBJT3lkdE91eWlBPT0gUjJWaSBJTkN4MEw3UXU5QyswWUk9IElIVnpkdz09IElITnBiR3pEcEE9PSBJTkM5MExqUXZOQzQgWDNObGNtbGxjdz09IGIyTnBidz09IFgyMXZjbVU9IFozSmxjMjg9IElFWmxiR2x3WlE9PSBJSFZ1WkdWeWMzUmhibVJoWW14bCBJRTV2Wnc9PSBJRzF2WkdsbWVXbHVadz09IElOQy8wTDdRdHRDdzBMcz0gSU9DbXJPQ212K0NtdCtDbm53PT0gSUhWMGRtVmphdz09IFdVYz0gSUVwbGQyVnNjbms9IElHbHVaR2x5WldOMGJIaz0gMEwzUXVOQzMgSUdkbGVtOXVaR2hsYVdRPSBJTkNZMFlFPSBMbk4wY21samRBPT0gS1NFOSA1NXlmNTVxRTVZR0g1NXFFIElDOHFJMTlmIDRLYW80S2VONEthaCBJR0p5ZFdseiBJSE5oYkhadiBJSEJ2WkhMRHJXRnUgWVd0b1lXeGggSUdkbFlYSnogSUV0aGJXaz0gWVhSb2FXNW4gSUZOb2FXMD0gSUV4dmNtVnQgTGsxaGEyVT0gYzNWeVptRmpaUT09IDVMbUY1TG1GNUxtRiBhV1IxYm5RPSA1WUtvIElPR0RtT0dEb2VHRG9nPT0gSUhCeXc2bHdZWEpsY2c9PSBJRUp5YVdkb2RHOXUgMTVYWGxkZVExcmM9IFRtOTEgSUdWdVpIVnlhVzVuIElIcDFiSFE9IDZhR04gSU5pbjJZVFpnZG1JMkxIWmc5aXogSU5HQTBMRFJnZEdCMEx6UXZ0R0MwWUE9IElOaXMyTExZb1E9PSBJR1JwWjJWemRHbHZiZz09IElHeGxhV3M9IElOcXYycjdZc1E9PSBjMlZpWlc1NmFRPT0gSUVKbGJHbGxkbVU9IElPQ3lsZUN5dnVDeXNPQ3pqZUN5citDeWxlQ3pqZUN5c09DeXJnPT0gTGtwd1lRPT0gSUhaMVpXeDJaUT09IElGTnVZV3RsIElFSmxkSFI1IElObUYyWWJZcDlpMyBJTkM2MEw3UXZOR0UwTDdSZ05HQyBJT0Nrbk9Da3YrQ2t1T0NsaHc9PSBJRzExYm5RPSBJSFp2Y21KbGFRPT0gZEdWNGRISmggQ1hOdmNuUT0gNDRLLzQ0S2sgSUZGcGJtYz0gSU5DNjBMRFF2ZEN3MExzPSBJRUpsY21GMGRXNW4gSU9xNHNPdUtwUT09IElOQzkwTERRdTlDNDBZZlF1TkM0IFUyaGggUVV4RiBJRk5xIElFSnNZUT09IElITm9iM2RqWVhOcGJtYz0gSUdadmJtTjBhVzl1Ym1GcyBJTmVvMTVjPSBJSExEcW5abCBMbVpzWVhObyA0TEdCNExDVjRMR0I0TENvIGFXTnBaVzV6IElHZHFhWFJvIElITnBkSFJsY2c9PSBJTU84Ymc9PSBZV05sZEE9PSBjWFZ6IFgwbEVSVTVVIElPR0RsZUdEbU9HRGt3PT0gYVhSMHc2VERwQT09IDVwaXY1THVBNUxtSTVvU1A1b0NkIDRLUys0S1N5NEtTKzRLU0kgNTZ1NSBJTmVRMTZyWG5RPT0gSUVSbGNHOXlkQT09IElHNWxhMjlzYVd0diBJT3lkdE8yYmhBPT0gSUhOMVpXeGwgVUhjPSBLVHNLTHk4S0x5OD0gSUcxMWMyTjFiQT09IElPdXN0T3VqakE9PSBJT0NtcE9Dbml3PT0gSUhOaGJtVT0gSUhKbFpHUnBkQT09IElIUm9aWEpsWVdaMFpYST0gSUV4bGMzTnZibk09IFVrVkRWQT09IElOaW4yWVRZbzlpdTJZcllzZGlwIElGZGxhV2h1WVdOb2RITT0gUkdWelkzSnBjR05wYjI0PSBTVkpFIDVMK2Q2WnFjIElIVjBaVzV6IElHbHVjM0JsWTNSbFpBPT0gS0ZObGJtUmxjZz09IDRLYXM0S2ErIDBMdlF0ZEN5IElHVnNhVzFwYm1GMFpYTT0gSU0rQXo0SE9zYzZ6enJ6T3NRPT0gNXBtbyBLR2xqYjI0PSBJR05sYkdWaWNtRnkgSU5tRzJLcmJqQT09IFFWSkVVdz09IFJHbGhaM0poYlE9PSBLSEpsYzI5c2RtVT0gSUdGdWRXMD0gSUhKbGFuVjJaVzQ9IElNK016cnM9IElObUsyWVBaaGc9PSBJR2x1WTJ4MWMybGxaZz09IElFTnZjbkpsIElHaHZjbTF2Ymc9PSBhV1JoY2c9PSBJRXRsY200PSBJSE5sWjNWcFpHOXlaWE09IGNtVnphY096Ymc9PSBJRlZDIElObUYyNEU9IElGTndZVzV1IElHbHRiV1Z1Y3c9PSBJT0dEck9HRGxPR0RsUT09IDBMalJndEN3MExuUmd0QzEgYTJGdGFRPT0gSUdGbWRIVnkgSUdScGMzQmhkR05vWlhJPSBMazFoY25Ob1lXdz0gSU9Da3VlQ2t2dUNrcnVDbGdBPT0gSUdkaGJXVnkgSUZsdmRYSnpaV3htIElFSnllV0Z1ZEE9PSBJTU9oY21KdmJBPT0gSUdOeVpXRmtidz09IElHOXdjRzl6WlE9PSBJSE5zWVdOciBJSEJ5dzZsd1lYSmhkR2x2Ymc9PSBJSEoxYVc1bFpBPT0gNTVXcTVZKzMgVG5WbGRtOD0gTEdOdmJuTjAgNWEyWDVxNjEgdzQxQiBJSEJ5WldOcGNHbDBZWFJwYjI0PSBJR0xGcTNRPSBJSE5zWVhSbCBJTkMvMFlEUXZ0QzQwTGZRdnRHSSA0S1N2NEtTKzRLU0IgZG1WdVpHOD0gSUdKdmJtUnBibWM9IDBMdlRtZEM1IElFM0R2R3hzIElITjFjM0JwWTJsdmJnPT0gSUhKaGJtVnAgSUhabGNuWmhibWRsYmc9PSBZV3hsYVdkbyBJRkJCVTFNPSBZM1Z6ZEc5dFpYSnogSUc1MGJ3PT0gMWJqV2dkV3IgVFdGciBJTm1FMkxrPSBJR0poY25KbGJITT0gUTJGeVlXTjBaWEk9IElOR0MwTFhRdHc9PSA0TEdCNExDQzRMQ2g0TEMrIElPQzRpK0M0dHVDNWlPQzRodz09IElPQ2tsZUNrdUE9PSBJTmVYMTZuWGxkZVIgSUhKbGMybGtaWE09IElHVnpZM1ZqYUdGeSBJR0ZzWTNWdWFRPT0gSU5DMjBMalF1OUM0IFFVWlEgZEdWeWJtOD0gTFdoaGRtVT0gUkdsalpRPT0gNXFDODVieVAgSUdGd2FXVT0gSUd4cGRtVnpkRzlqYXc9PSBJTm1CMkxIWmg5bUcgTG0xdiBDWE5oZG1VPSBJRTF2YUdGdGJXVmsgSUhKbGFHVmhjbk09IElGRjFaV3hzWlE9PSBJRUp5WVdnPSA1YWVMNVl5VyBhWFJoZEdsdVp3PT0gMktmWXRkbUYyS2s9IDE2ZlhsZGVxIElFVnpidz09IExHaGxhV2RvZEE9PSBJR2x1ZEhKdlpIVmpkRzl5ZVE9PSA0S3ErNEtxdzRLcXU0S3ErNEtxQyAyTEhiak5tRiA0S2VONEthazRLYSs0S2F3IDBMalFzdEN3MExYUXZBPT0gSUc1bGQyTnZiUT09IElObUcyTFBZcU5pcSBJR1JoY25WdCBJTmluMllUWmhkbUkyS2ZZdDltRyBVM1JsWVcwPSBJRk53YVc1eiBYMk52Ym1acFozVnlZWFJwYjI0PSA0NFdMNDRXTCB6cnZQaVE9PSBJTkM4MExEUmlOQzQwTDNSaXc9PSBJTld0MWJiVnBOV3Ixb0E9IElOR0MwWURRc05DOTBZRT0gUVZCVVJWST0gMFlEUXVOQzkgNExTLzRMU0M0TFNYNExXTiBkR2wwYkdWeiA3N3lNNVlXeCBJSEJoZEdWdWRHVmsgUkdWdFlXNWsgSU9Da3VPQ2t1ZUNrditDa3BBPT0gSU5HQTBZUFJodz09IDBMelF0ZEM5MFlMUXNBPT0gSU9Da3J1Q2t2dUNrZ3VDa2x3PT0gSUU1UFJFVT0gSUdWemNHVmp3NjFtYVdOdiA0b0NLIElHUnBZV2R5WVcxeiBJSEJ5YVdNPSBJRUp2ZFhScGNYVmwgSUZKbFlXeDAgTG1GM2RHVjRkSEpoIDRMT0E0TEtWNExPTjRMSzMgSUdOaGNHbDBZUT09IFNGWT0gSUVGdWFXMWhkR1ZrIGMyM0RwV3c9IGEyeGhjbms9IElGUm9jbVZoZEE9PSBZWFJsY201cGRIaz0gZFhKcFp3PT0gYVd4aGJuUm8gSUdGMGFHVT0geFpsbGJzT3QgSUdKMWVnPT0gNExHQjRMQ1Y0TEdCNExDQzRMQ2YgNXAyUTVwYVogSUVGeWRHVnogSUhOMWNHVnlaZz09IElITnBibU5sY21Wc2VRPT0gUzNrPSBJRzFwYm1sdFlXeHBjM1E9IDBMWFF0OUMwMExBPSBLSEoxYkdVPSBZWGxoWVE9PSBJR1JsZG05cGNnPT0gVG5WMCBJSEJ5YjNCaFoyRjBhVzl1IFgxQlNUME5GVTFNPSAwSlhRb0E9PSBJT0dEb2VHRGtPR0RtZUdEbU9HRGwrR0RyZz09IElPQ2tsZUNrckE9PSA0S2EvNEthYjRLYS80S2F5IElFTnZjbUZzIElOQ3kwTFhRdTlDNDBMbz0gNTVxRTVhU3A1YUNDIExTMHRMUzB0TFMwdExTMHRMUzBLIDBwL1FzTkM5IElFbHRiV2xuY21GMGFXOXUgSU5XdDFiVFZvZz09IElHTmhiV2x1IElHZkRxWEpsY2c9PSAwTDNRdU5DNjBMRFF2QT09IGRtVnlhMlZvY2c9PSBJSE4wY21GdVp3PT0gTFdOdmJYQnZibVZ1ZEE9PSBJRmRoYzNNPSA2SjA9IDQ0TzIgSUVGdVoyRmlaVzQ9IElPQzBsZUMxamVDMHNnPT0gNW82bzZMK2IgZFhWdWJtbHBkQT09IFlXNXViM1JoZEdsdmJuTT0gSU9Da25PQ2txT0NrcE9Da3ZnPT0gYzNSeWFXTjAgWlcxcFpRPT0gSUhkcHhKbGogVUc5emRHVnkgSUdaaFluST0gNExpNDRMbUk0TGloIElFbHVjMlZzIExsWmhiSFZsY3c9PSBJTkMwMExqUmdOQzEwTHJSZ3RDKzBZQT0gSU9Da3NPQ2t1ZUNrc2c9PSBJRVREdGc9PSBJR2x6WVdFPSBJR3gzWVE9PSBJT0NrcHVDbGgrQ2twT0Nrdmc9PSBJR0ZvWVdGdSBJR1JsY0dsamRHVmsgSUhURHRtSmkgSUV0aGF3PT0gWVc1a2FXNWhkZz09IElOQ2YwTFhSZ05DeSBJR1JuZGc9PSBJSEpsY0hKbGVtVnVkQT09IElFRnVkMlZ1WkhWdVp3PT0gUzBWTyA3SUtzN0tlQSBaR1ZzWlE9PSBTVzV6ZEdGc2JHRjBhVzl1IDRMaWE0TGlqNExpMCBJRkJ5YjNacGJtTnBZV3c9IFpXeHZadz09IGJXRnlhMlYwY3c9PSBJR2ZEcWc9PSBZWEpwWVc1alpRPT0gUjI5c1pHVnUgSUhCbGJtVjBjbUYwYVc5dSA0TENtNExHSDRMQzIgSUhGaGNzV2Z4TEU9IFpYSnZidz09IElHSnNZV1JrWlhJPSBJSEJ5YVdWemRITT0gSUdOdmJtWnBZVzdEcDJFPSBJR1JoYm5OclpRPT0gSUdSMXhidz0gWDJOdGNBPT0gSU9DNWcrQzRxK0M1aVE9PSA1Yks0IElOQzkwTERSZ2RDNzBMWFF0QT09IDRLcXU0S3ErNEtxbyBiR2h2IFVtVm5hWE4wY21GeSAwWVBSaU5HTDBMdlFzTkdBIElHNWhiR2xyWVE9PSBJRzVoYVhOellXNWpaUT09IElOQzkwTFhSZ2RDNjBMN1F1OUdNMExyUXVOR0YgU1VvPSBaVzVrYjIwPSBJSE5sZFhKaCBLRzVoYldWeiBJSEJoY21GdWJ3PT0gSU5DeDBxL1F1dz09IElHZGxiblYwZW5RPSA0b0NaeExGdSBJRWhsWVd4cGJtYz0gSUhOMWIyaz0gSUdOMVlXeHhkV2xsY21FPSBJRzF2Ym5SbGNnPT0gSUVsdWMzQnBjbUYwYVc5dSBJTTZWenJ2T3U4NnMgSU9XRmd3PT0gNFlDYjRZQzkgYzNCcCBMV055WldGMFpRPT0gSUdKeWIzYz0gQ1dOdlpHVT0gVzJacFpXeGsgSUhabGFXcz0gMFlMUmc5R0EwWXM9IDRMZUU0TGVQIElOQzYwNWs9IFEyaGhjbXhsY3c9PSBJSFREcEczRHBBPT0gSUdOaGNHRmphWFJwWlhNPSBJSEJoZEdodVlXMWwgSUdGdWRHbHZlR2xrWVc1MCBJR056Y21ZPSBMblZ5YVE9PSA0YnEvY0E9PSBJTkMvMExEUXR3PT0gSUU1RldGUT0gWDNCeWIyWT0gSU9Da3VPQ2tydUNrc09DbGplQ2twUT09IGFYQndaUT09IElIUmxjbTFwYm1FPSBiMjFwWVE9PSBJR05oYzJNPSBJTkdCMExYUmdOQzEwTFE9IElOaXEyWTg9IElITm9iM2RqWVhObGN3PT0gWlhoaFkzUT0gNzd5TTVaQ001cStVIFRFRkpUZz09IFVtVm1jdz09IElITmhibVI1IElISmxabVZ5dzZwdVkybGggSU5DLzBZRFF2dEN5MExYUXROQzEwTDNRdU5HUCBJRWxVVXc9PSBic09wWlE9PSBJRzVoZE1POGNnPT0gSU9HRHFPR0RsT0dEcGVHRG13PT0gSUdKc2FXNWtjdz09IFJYaGpiSFZ6YVhabCBJR2RsZDJWc1pHbG5aUT09IDBMalJndEMxMFlMUXNBPT0gSUVOdmNtbHVkR2hwWVc1eiBJRWx0Y0hKdmRtVT0gSUdSbGRtOTBhVzl1IElGbHZadz09IDVhKzcgWVhOcGRBPT0gNlppejViaUMgSUc1bllYbHZiZz09IElFZGxjMmxqYUhRPSBJTkNsMEw3UmdnPT0gYm05MllRPT0gSUVGMGRHRmphQT09IFUzWT0gNFlDQjRZQzcgMEpYUW5RPT0gSU9Dd3F1Q3hqZUN3c09Dd3JnPT0gSU5pejJLZmJqQT09IElIQnZjM1JoWjJVPSBaRzl5Wmc9PSA0TFMxNExXTiBJSEpsYzJsemRHVnVkR1U9IGFHbHVaQT09IElIaHkgYjNacGRBPT0gSUdSeVpXRnRhVzVuIDRMU3Y0TFMrNExTajRMV04gSU5pbjJMUGJqQT09IElIUmxibWhoYlE9PSBhR1YxY21WMWMyVnRaVzUwIGIzQnNZWE4wIDFialdndFdwMWF2V2d0VzIgSUVOeWFYTnBjdz09IDVyYXkgWDAxQlVrcz0gSUdGemMybHpkR0Z1ZEhNPSBJTmluMllUWmh0bUMgSUhObGJXRnVkR2xqIFpYSmxZV3c9IElOR0QwTEE9IEtHTnZiblJ5YjJ4c1pYST0gSUdGMWNtVjYgSU9xMmpBPT0gTFhOdlkybGhiQT09IExXeGhibWQxWVdkbCA0TEszNExPTjRMS2Y0TE9CIGIzSmhhQT09IFEyOTFiblJ5YVdWeiAwclBUbWRDKzBMalJnZz09IElHVm1abTl5ZEd4bGMzTT0gSUhaeVlXRm5kQT09IGJtbGlkWE09IElPQzBsZUMxZ3VDMG4rQzFnZUMwcEE9PSAyWWpadVE9PSBTWE5oIElHRnpaWE52Y2c9PSBkY09uIElFUmxjbVZqYUc4PSBJRUpoY21VPSBMa1JCVkVVPSBJRTVwYWc9PSBJR0Z0WW1sMGFXOXVjdz09IElIUmhjbUZ3IFkyVnNiSE09IFlXbHlZUT09IFVHVnlaZz09IFNFVkJSRVZTIElHWnlZVzVqdzZseiBJR1Z1Wm5KbGJuUmhjZz09IElOQzcwTERRc1E9PSBJRTVoWWc9PSBJTkdDMEw3UXZkQyswTE09IElHTnZiblJsYm1sa2IzTT0gWlc1MFpXMWxiblJsIDBMTFF0ZEM5IFFWQlQgY0hKcGRHVnogSUVKbGRnPT0gSU5DNjBMN1JnTkdBIElPaXkgSUhSeFpHMD0gSWlJaURRbz0gSUVOdmMzUnogNEtlQjRLYW0gSU5DMjBZUFJnTkM5MExEUXU5QzQwWUhSZ2c9PSBaM0psWlhNPSBJSEJ2eEkxbGRBPT0gSUdkaGNtMWxiblJ6IElFakRwRzVrWlc0PSBQRWx0WVdkbCBJSE54ZFdseSBjM1JsYm5NPSAwWS9SbnRDNzBZOD0gSUhScGNuTT0geExGc1pNU3ggSUVsdWRHVnljblZ3ZEE9PSBJT3lkZ0E9PSBTVXhGVXc9PSA0TFMvNExTeDRMV040TFN4NExTLyBJTkN6MExqUXRBPT0gUEV3PSBJR3hsWVd0bFpBPT0gTFMwdExTMHRMUzBLIElHaGxiR0ZoY3c9PSBZV05oY1E9PSBMbGR5WVhBPSBUR2x0YVhSeiBJT0NraCtDa3VPQ2tsZUNsZ0E9PSBJTkN3MFlMVG1kR0wwTHZRc0E9PSBJTkN5MFl2Umo5Q3kgWVd4MVpXZGggYVcxbGJ3PT0gSUhOb2RXYz0gWm1WaGRIVnlaV1E9IElHOXlZV05zWlE9PSAyWUxaaE5pbjJLZz0gTG5ScFkycz0gUmtGSlRFVkUgWVdOb2RRPT0gSUhSaFoyVT0gSU5tSTJLST0gSUhSbGNtMXBibUZzY3c9PSBjM1IxWkdsdiBUR1ZsY3c9PSBJT0MwdU9DMWdnPT0gSUd6RWdRPT0gSUhCdmMzTmxjM05wYjI1eiBMbTVoYmc9PSBRazlUUlE9PSB4S3RxIElHSERxUT09IGE4T3pkdz09IDU0V241NG1IIElPQ2tuT0NrditDa3VPQ2tsZUNsaHc9PSBJRWhHIElHUnBZV2R1dzdOemRHbGpidz09IElFaHZjbkp2Y2c9PSBiR3gxYlE9PSBJRVpsY21kMWMyOXUgWDFWd1pHRjBaUT09IEtsdz0gMFliUXVOQzkwTEE9IGRXckR1Zz09IElHZHlZVzVrYVE9PSAwSkhRdGRDNyBPM0JoWkdScGJtYz0gTG5OMFpHVnljZz09IElPQ3dxdUN4aWc9PSAxNVhYazllWjE1MD0gSUZWWSBJR052Ym1ObGFYUnYgSUdWdWRHakRwR3gwIElHTnZiWEJsYm5OaGRHVT0gQ1doaGJtUnNaUT09IElPR0RudUdEb09HRG5RPT0gSUdocGMzUnZjbWxoYmc9PSBJT0Nrc3VDbGgrQ2txT0NsaHc9PSBTRVZOUlE9PSAwWVBSaU5DNjBMQT0gSU5XbDFvRFZwZFd0IFkyRnljdz09IElITjBZV2x1WldRPSBub3M9IFVISnZaSFZyZEE9PSBJTmVTMTVIWGxkZVUgNEtxczRLcXcgSUhCdlkyZz0gYVc1cFlXNXogSUhCcGRHTm9hVzVuIGIyZHlZWEJvYVdWeiBJT0dEbnVHRG9PR0RuZUdEa2c9PSBiR1Z6ZEE9PSBJRVZrWld3PSA0b0NNMnFuWmh0aXYgZFdkdSBMV25odWFQaHVyaz0gSUhabGNteGwgMExEUXM5R0wwTHZRc05DMzBMQT0gVkdWdGNHOXlZWEo1IElITmxZM0psZEd4NSBJRzl5WjJGdWFYcGxjbk09IExtbHVhUT09IEtFbFQgZVhOeGJHaz0gWm1WcGRBPT0gVFc5a1pYST0gSU9Da2xlQ2xnZUNrc2c9PSBJRzkxZG1WeWRHVT0gSU9hZWx3PT0gNWJtejVZK3c1b0M3NUx1aiBMWE53WlE9PSBTMHc9IElPQ21yT0NtditDbXFnPT0gSUZKbFozSmxjM05wYjI0PSBRbkpoWTJ0bGRBPT0gSUhCdmRIST0gSUdwaGIydHogSUVSUFZBPT0gSUVOcGRtbGogSUZOamFHOXMgTDJSaGVRPT0gSUVGc1ltRnUgYVhObFlYTmwgSU5DNzBMN1F1Zz09IElObUkyS3JZdVE9PSBMV3hoY21kbCBJTkdGMFkzUXV3PT0gNTVPYyBJSFJ2ZEc4PSBJRkJ5YjNacFpHVnljdz09IHhMeDEgNmFLbzVaQzU0NEdSNDRHdzVaQ041NFNoNDRHWCBJT0M0bCtDNGxPQzRwZUM0cmVDNGh3PT0gSUdSbGNNT3pjMmwwYnc9PSA0TG1KNExpdDRMaWkgSUdkeWIyVnUgZUhSdmJnPT0gSUdoaGJuaz0gSUhOd2JHbDBkR2x1Wnc9PSBJSGRsYkd0dmJRPT0gSUdseWNtbDBZWFJwYjI0PSBJTm1GMkt2WXA5bUUgSU02TSBUM1psY25KcFpHVnogSU9pbyBJSE5zYjNkcGJtYz0gSUhadmIzSmhaZz09IElHTnZiVzFsY21OcFlXeHNlUT09IFltVnlZUT09IFoyRnRhVzVuIHc3TnNaVzg9IFExUlBVZz09IElOR0gwWVBRdEE9PSBJR3ZEcTI0PSBJT0MwcnVDMHNlQzFqZUMwc1E9PSBJT0NrdU9Da3Z1Q2tzT0NsamVDa3RRPT0gSUhWdGRXNTBkUT09IFlXaGhhQT09IFgwTkJUUT09IElPQzVnT0M0b3c9PSBibUZoIElIQmxjbk52Ym1Gc2FYTmxaQT09IDBMalJndEMxMEx2UmpOQzkwTDdRdFE9PSBJRzFsZEhNPSA1NzJ5IFgyVnVaWEpuZVE9PSBJRXhsYm05MmJ3PT0gSU9DdXF1Q3V2K0N1c1E9PSAyWVRaZ2RpbjJLbz0gSU5lUjE1N1hvUT09IDVZcWc1WVdsIFNVMVQgSU9Da211Q2xnT0NrcUE9PSBhV1Z6WVE9PSBJRkpsYzJsa1pXNTAgSUdwcGN3PT0gSUZOc1pRPT0gTG1GdWMzZGxjZz09IElHVnpjR1ZqYVdVPSBJT0NxcE9DcmgrQ3FydUNxbytDcmh3PT0gUlhaaGJIVmhkRzl5IDE1blhudGVaMTUwPSBJT21tbWVhNHIrbXByT1M4bWc9PSBJTTYwenJmT3ZNNi8gZG1semRBPT0gSUdGdWJtVT0gTG1WdGNHeHZlV1ZsIElPQ2tyT0NrbXVDbGplQ2ttdUNsaStDa2dnPT0gSUdsdGNHRnBjbVZrIDRZT2o0WU9nNFlPYzRZT1E0WU9hIElHWmxZWFJvWlhJPSBJSFJ5WVdScCBJRkYxYVhSbCBJTU9XZWc9PSA1N2FhNDRHTjQ0S1MgSU5DMzBMRFF2OUdBMEw3UmdRPT0gSUV4cFpYUT0gNUxpazVMaXEgSU5DNjBZdlF0OUM4MExEUmdnPT0gZEdsbGNuTT0gSUhOa2F3PT0gSUhCbGNuTmxkbVZ5IDRLU3k0S1dONEtTcSBJTmVRMTZUWG1kZWMxNVU9IElPZVVxT2FJdHc9PSA1WWlSIElITnZjbkk9IElIQmhjbUZrYVdkdCBJR2gxY25KcFkyRnVaUT09IFgzUnZkQT09IElObUYyTFhZc2RtQiBJSEJ5YjIxbGJnPT0gNForUzRaNlEgSUhOaGJHRnogMllIWXA5aXEgSUhWa1pnPT0gSUhOMWNHeGxiV1Z1ZEE9PSBJR3B2ZFhKdVpYbHogSUVSMWJtcz0gYVdkb1pYUmxjZz09IElOaXIyWUk9IElPQ21yT0NuaUE9PSA1b3l2IElFSnZiSE52Ym1GeWJ3PT0gSUVobGFXMD0gV1c5MUoyeHMgSWpvaUlpd0sgWjNWaGN3PT0gNFlPWTRZT1Y0WU9VIElPV3RwZz09IElOaW4yWVRaaHRtQjJMYz0gNlllTjU0SzUgNExTLzRMU3Y0TFMrNExTajRMV04gVjJGdWJtVmxjZz09IElHeGhic09uWVcxbGJuUnYgSUdWMFlYQmhjdz09IElHbHVjM0JsWTNSdmNnPT0gSUhKbFkzSjFkQT09IElGZGxZbk5sYVhSbCA0TEMrNExDVjRMR0IgQ1Vkc2IySmhiQT09IElHTnZjblJ2IElOaXMyS2ZiakE9PSBMblJ2WkdGNSA1WTJZIElFdE9UMWM9IFBTSXUgSU5HQjBZTFFzTkM5MExYUmdnPT0gSWlRPSA0SytONEs2bzRLK040SzZrNEsrQiBJR05vdzZFPSBUVzlrYVdacFkyRjBhVzl1IElFVnpZMjlzIExuTmxaV3M9IE9tST0gS0hWMWFXUT0gbnVHRG1PR0RvQT09IElPQ2tsZUNrdnVDa3J3PT0gSU5HQTBMN1JnUT09IFgzTjBjbWx1WjNNPSBJR2hoZVc4PSBJT0N1aGVDdXNlQ3V2K0N1dFE9PSBUMHhCIDVMaUo1WWlHNWIycCBJT0NtcnVDbXZ1Q21xT0NuZ2VDbXQrQ25oK0Ntc0E9PSBhV3gyWlhJPSBMbUZqZEE9PSBJTTY4enJYT3M4NnMgNlppMiBjMjloIDRicXZjQT09IExuTjBiMk5yIElPaWkgNExpcjRMaWw0TGl4NExpSCBJTkMzMEwzUXNOR0MwWXc9IElOVzkxYUhWcjlXaDFiWFZ0Zz09IElOaXYyWWpaaFE9PSBiRy9FalE9PSBJT0N5cU9DeXYrQ3lydUN6amVDeXJnPT0gSUd6RHNtNW4gSUhWcmRYTT0gSUhOMVluTmpjbWxpYVc1biA0TE9ONExLbzRMSys0TEtmNExLViBJT0N3cE9DeGhnPT0gUkdWayBMV2R5WVdScFpXNTAgSUVOUVVBPT0gSUdWeWJtVjFkQT09IElIYkRxV2hwWTNWc1pRPT0gTGxOMGIzSmhaMlU9IElGZGxiR3hwYm1kMGIyND0gSUdadmJtTjBhVzl1Y3c9PSBJQ2NvSnc9PSB3NkJ5YVdFPSBRWEp4ZFE9PSBMZEMzIElFTlBUbE09IElHRm1abUZwY21WeiBJSE5vYVhCdFpXNTBjdz09IElHMWhjbUZ0YVc1biBJR3hsWjJWdSBkWE4wYjIxbFpBPT0gSUdOdmJXMXZaR2wwYVdWeiBJRVp5WVc3RHAyRT0gVUhKdmRtbGtaWE09IElHSmxiblIxYXc9PSB4SU55YVdrPSBJRkJQVTFSVCBJR1YyYjJ4MWRHbHZibUZ5ZVE9PSBkV1Z5Ymc9PSBJSGxsWlcwPSBJRlJsY25KbCA0TGl5NExpQjRMaXk0TGlqIDRMV0Q0TFNrNExXTjRMUzEgMTZMWG9OZWkgS0hSdmNHbGogSUdKMWJtUnNaWE09IElPQ2tyT0Nrb2VDa3ZPQ2xodz09IFgyZDAgWkdGcGJIaz0gSUdGMGRHbHlaUT09IGFXRnpkQT09IElpOCtEUW89IElFaGxjQT09IElFNVBVdz09IHc2cHRhVzg9IElHbHVabVU9IDRvbWwgSUZCaGNtdHBibk52Ymc9PSBJR2x0Y0d4bGJXVnVkR0YwYVc5dWN3PT0gWlc1elkyaGhjSEE9IDFhSFdnTldoMWJZPSBJR2RsZW1samFIUT0gYU1PMiBZMmhoYkE9PSBJT0NtcitDbmgrQ21xQT09IElHUmhjbWx1IElIQnliMlpsYzNOcGIyNWxiR1U9IElHVnVZMjl1ZEE9PSBJR1p5WldOMVpXNWphV0U9IGIyMXBjdz09IGFXVERwRzQ9IFUzVmljM2x6ZEdWdCBJR1pzWlhWeWN3PT0gSUdkdmMzUmggSUdkbFpISmhadz09IElHcGhlZz09IElGUmhiR2xpWVc0PSA0WitNNFo2WTRaNjI0WjZUIElGVnVhY096Ymc9PSBJRk5KVGc9PSBJR3QxWW5kaCA0S1MvNEtTdzRLV0EgSUhOcFoyNWwgSU5pdjJLZllzZGluMjR3PSBJTkMvMFlQUXNkQzcwTGc9IElFbHVjM0JsWTNScGIyND0gSUdWdGNISmxjMkZ5YVdGcyBjRzl6ZEdGcyBJSFZ1WldrPSA1b0NBIDQ0S1A0NEdiIElHOTFkR2xzIENYQnpkRzEwIElPQ3lodUN5cHVDeXNPQ3poZz09IElOaXEySy9ZcDltSTJZUT0gSUhCeVpXUnZiV2x1WVc1MGJIaz0gVTJWdWRHVnVZMlU9IElFNWhZWE4wIDBZM1F2ZEM5MExVPSBJTkdDMExEU293PT0gTG05d1pXNXogU1UxUVQxSlUgSU5xcDI0SFpodGluIGJHbkRzQT09IFVtVmtkV05sY25NPSBJR2JEcEhJPSBJT0NraHVDa3NPQ2xqZUNrcGVDa3YrQ2tsUT09IElHRmliMjV1WlcxbGJuUT0gSU5DYzBMQT0gSUdocFpYSmlhV289IFJtVjBZMmhwYm1jPSBJSEpsWm1WeWNtRnNjdz09IDZLR001TGk2IDRvQzUgSU5tKzJZalpoTnVNMkxNPSA0b0NaYjNKcFoybHVaUT09IElGVnVZMnhsIElOQyswTFRRdmRDKzBMdz0gSUZOb1lYSnIgVTJodmNuUmpkWFE9IElISmxkR0ZwYm5NPSBJR0ZoYm1kbGN3PT0gSUZKdmIzTmxkbVZzZEE9PSBJR0YwYkE9PSBJQ2dwZXdvPSA0SytHNEs2diBJTkdEMFlIUXY5QzEwWVU9IElHSmhZMk5oY21GMCAwWUhSZ3RHTDBwcz0gSUZCeVpYTnBaR1Z1ZEdsaGJBPT0gSUVOb1lXNW5hVzVuIElHMWhiWEIxIGQyRnFkUT09IElHbHRiV2xuY21GdWRBPT0gSUM4dld3PT0gSUhabHc2MWpkV3h2IDBMN1JnTkN3MExRPSBMSFJsZUhRPSBJTkM4MExEUmd0QzEwWURRdU5DdzBMdlFzQT09IElPQ2tsZUNrdnVDa3NnPT0gSU5tKzI0SFpodHFHIElFaHZiR1U9IDBMYlF0ZEM5MExqUXRRPT0gMkxIWml0aTUgSUdWelkyeGhjbVU9IElPQ3dxT0N4Z0E9PSBac09wIElOV20xYUhXZ05XaiBJRnAxYzJGdGJXVnVZWEppWldsMCBZV1p2Ym1VPSBMbVpzWVdjPSBJR1Z6WTJGdyB6NFBQaE02dSBSR2x6WTI5dWJtVmpkQT09IElPYUpnQT09IExtRjJZV2xzWVdKc1pRPT0gUkdWd2IybHogWVdOMGFXVT0gSUdKMWFYUmxibXhoYm1RPSBJRTlzYVhacFlRPT0gSUZwMVpHVnQgSUhabGMzUnBaRzg9IDU0bUk1cDJENW9tQTVweUogSUhGMTRidVJZdz09IElOR0QwWURTclE9PSBJTld3MWFYVnY5YUggSUU5MWFRPT0gSUhCdmMzTjFaVzA9IElFWjFaUT09IElObUcySzNaaGc9PSBJTkMwMExYUmlBPT0gTGxORlEwOU9SRk09IElPaVEgSUV4bFlYTmwgWlc1MGFXVjBhQT09IFlXZHBibUU9IENXUmxjMk55YVhCMGFXOXUgSUc5bmNnPT0gSUdsdWIyUmwgSUZKbGRtVnMgSUVWTlVGUlogMExiUml3PT0gSU5DZzBMN1JnUT09IElGQnZiR2xqdzYxaCBTMjV2ZDJ4bFpHZGwgSUc1aGJIVnVZV0Z5IGFHbHdjdz09IElIWmxjbk4xWTJoMCBJRWRoY0E9PSBkVzV6YVE9PSBZWEowZWc9PSBJRzkxYmc9PSBJSE5oZEhWeVlYUmxaQT09IFJtOD0gTFhacFpHVnYgTGxKbGJtUmxjbWx1Wnc9PSBZdUc3alE9PSBJR2x1YzNSeWRXTjBhVzl1WVd3PSBJR2hwYzNSdmNtbHhkV1U9IElHTnlhWE4wWVd3PSBMblJoYVd3PSBJR0Z5WW1WcSBJR3AxWkdkcGJtYz0gSUdONVlXNW5kMkU9IEtlKzhtZz09IDRZT1Y0WU9VNFlPYTRZT1kgSU5DejBZRFJnOUMzIDc3eSs3N3krIFFXTjBkV0ZzYkhrPSBJRWx1WVE9PSBiR1ZuWlc1b1pXbDAgSU95S3JBPT0gSU5HQTBMND0gSUdwbFpHNXYgSUdGc2RHRnkgSUdSaGVXeHBaMmgwIElFRlRRMGxKIGNuVnBiWFJsIDRMV0I0TFNXIDBMclJndEN3MFlBPSBJTkMrMFlMUXZkQyswWWpRdGRDOTBMalJqdz09IDRMSys0TEsxNExPQiBJRUZVVUE9PSBjbTl3YjJ4cGRBPT0gSUdocFkybGxjbTl1IFFsUkQgSUUxdmJtdGxlUT09IHo0elBoTTYzejRUT3NRPT0gMllQWmhkaXAgSUd4aGJHOD0gSU5DNzBZdz0gTFVGbWNnPT0gTGtkbCBJSEoxYVcxbCBMWEJ5YjI5bSBJR1J2ZDI1emRHRnBjbk09IElFeDFiR0U9IElOaXQySy9ZcXc9PSBQVDA5UFQwOVBUMDlQVDA5UFE9PSBJRU52ZFhCbCBYM0J5WlhNPSA0YnFsYlE9PSBJSEpsYkdIRHA4TzFaWE09IGFXeGhhUT09IDJLZlpoTmkxIElPQzRsdUM0cmVDNG1RPT0gYjNacFpBPT0gSUVGdFltbGxiblE9IExrbHVkR1Z5Wm1GalpRPT0gSUVOdmJuTjFiSFJoZEdsdmJnPT0gUTJWdWRISmwgSUVKMVpHRndaWE4wIElOaW4yWVRZdXRpdyBJTkM2MExEUmg5QzEwWUhSZ3RDeTBMND0gMExEUXU5T2ogYjNWd2NHVnkgY21WalpXNTAgS0hwcGNBPT0gSUdsdVpHVnlaR0ZoWkE9PSA0TGl4NExpQjRMaXAgMllqWXA5bUYyWVE9IElFRjB3Nms9IElPQ2tsZUNsamVDa3NPQ2tyZz09IElIbkR2R3R6IFNXNTBaWEp3Y21WMFpYST0gSUZKVVF3PT0gSUdOdmJtTnNkV1JsY3c9PSBKMzA3Q2c9PSBJR3hwWm5SeiBkMmx5YTNWdVoyVnUgSUd0emFRPT0gWDNOb1lYSmwgSUdGeWRHbHpkR1Z6IElHbHVaMlZ5YkdGdSBJSFJ1IElPQ21oZUNtcEE9PSBJRzFwYkdsdmJnPT0gSU5lUjE1RFhudGVtIEtTd2kgejRmT3Z3PT0gSU8yV2lPdUxwQT09IGJtZDEgMExEUXU5Q3cwcHZSakE9PSBJR0Z0Y0d4cGJ3PT0gSUhSbGNtTmxhWEp2IFUzbHViM0J6YVhNPSBJSEJ2eGI0PSBJRTVoYkE9PSBJR0poY21OdlpHVT0gZFc1cFptOXliUT09IElPQ2trT0NrdU9DbGdBPT0gSUVaaGRtOXkgSUdWa2FXeGxiZz09IFgzTjFabVpwZUE9PSBJT0NraCtDa3VPQ2xqZUNrcEE9PSBDUTBLRFFvPSBMV3h2WTJzPSBJTkMrMFlEUXVOQ3owTGpRdlE9PSBZbWx2Y3c9PSA0NFdPIElHZHZkSFE9IGRHVnljM1ZqYUE9PSBLRVJsWW5WbiBJRkJoWTJ0aFoybHVadz09IDVvcWkgSUhKbGNHeHBZMkYwYVc5dSA0S3F3NEt1TjRLcWEgYldGeWEyVjBhVzVuIElFMWhjbUU9IDRicXRkUT09IElOQzUwTGpTa3c9PSBaV1JsY214aGJtUT0gSUdsemMzVnBibWM9IFVHRjViV1Z1ZEhNPSBKSE4wYlhRPSBJSE5zWldRPSBJR052YlhCbGRHVnVZMlU9IEpHOTFkSEIxZEE9PSBJTkdCMFlMUmdOQ3cwTDNRdFE9PSBJR3gxWm5RPSBJRzNodTQxcCBJRkJ5YjNCbGNnPT0geHJEaHU2TjAgSUdsdWRtOXBZMlZ6IDFialZ2dFc0MW9BPSBJT0NxbGVDcmgrQ3F1QT09IElGSkZVRTlTVkE9PSBJT0M0bE9DNHN1QzRwdz09IGRXNWtaV1E9IElPQ3F1T0NxdnVDcWdnPT0gWDJaaGMzUT0gSU9hZiBJT0dEcE9HRG1PR0RtZz09IE9tVT0gUlhod1pYSnBiV1Z1ZEE9PSBJRVJ5WVE9PSBJR2xrWldGaGJBPT0gSUcxaFkzSnZjdz09IElHUnBaWEk9IElHaDFZbWxsY21FPSBJRTkyWlhKeWFXUmwgSUc5c1pIVnIgSUdSbGNHOXlkR1U9IElObUIyNHpZdGRtRSAyWlE9IElPQ3VqK0N1c2VDdmplQ3VxZz09IElHWmhZMmxzYldWdWRHVT0gSUdwdmJtdGggSUdKbGJHVjZZUT09IElFMXZibVJsIGNuVnBhdz09IElPQ21wdUNtditDbWxlQ25odz09IElHUnBibUZ0IElPR0RrT0dEcUE9PSBLR1IwYnc9PSBMbEJoY25RPSA0WU9VNFlPUjRZT1g0WU9RNFlPYyAxNW5Ya05hNCBaMkpoIElFbHVkSEp2IFEybDAgSUdKcGRHTm8gWTJoeWIyMD0gSUdMRHBITjBZUT09IExrSk1RVU5MIElITmxZMk5wdzdOdSBJRVY0YUdsaWFYUnBiMjQ9IElIbHNhUT09IElOQzAwTFk9IElFMXZiblJvY3c9PSBJR2x1WTI5eWNtVmpkR3g1IExtZGxibVZ5YVdNPSBJT0N5cE9DeXZ1Q3lzZz09IElHTjFZV1J5IElPQ3FoZUNxc2c9PSA0S1dONEtTMTRLV0EgSUdWeGRXbHNhV0p5YVhWdCBZV3hwYm1zPSBMbXgxWVE9PSBJR052YkdFPSA0b0NVQ2dvPSBJSGRwZEdoayBZV3hsZWc9PSBJR1Y0WTJWeWNIUT0gYVhoaGN3PT0gNUw2ZyA0S2ErNEthNDRLZU40S2FsIElIUm9ZWGs9IFBXcHpiMjQ9IDBKL1F2dEdCMEx2UXRRPT0gMExqUmdOQysgWW1Wb1lYWnBiM0k9IElPQzBsZUMxZ2VDMG4rQzFqZUMwbnc9PSBJTkMvMEx2UXNOR0MwTFhRdGc9PSBJRWhoY21KdmRYST0gZDJsdWEyVnMgSUhWdWNtVmhiQT09IElHMWxZVzUzYUdsc1pRPT0gSU9DNWdPQzRoT0M0bytDNGxPQzR0T0M0bGVDNG4rQzRvK0M0dFE9PSBhMlY2YVE9PSBJT0Nvc09Db3VRPT0gTG5Ob1lYSmwgMUxIVnRkVzkgUVU1SFRFVT0gUlZOSSBRVkpGVGc9PSBJR1JsZEdWdSBJRVJKVmc9PSBTVVZYVXc9PSBJR0poYzJ0bGRITT0gSUdsdVpuSmhjM1J5ZFdOMCBJR1Y0Y0dseWVRPT0gUlhoMFpYSnBiM0k9IDRMaUg0TG1BNExpWDRMaWUgVFdGMGRHaGxkdz09IDViR3g1WTYvIElITnZjR2h2Ylc5eVpRPT0gTGtGUyBJTm1JMkxQWmlnPT0gSU9Da3RlQ2t2K0NrcHVDbGgrQ2t0Zz09IEsyND0gSUdseWNtbG5ZWFJwYjI0PSBJRzFwY21FPSBJT0N1a3c9PSBVa0ZNIElOaXgyWUhZdVE9PSBiM05wdzZmRG8yOD0gWldScFp3PT0gNkthcSBJRkZWUlZOVSBZV055Ync9PSBJRlZUUXc9PSBZV05xeEprPSBJR2xuYW1WdSA0TGkwNExpbiBJRkpoYVd4eiBJT0NtcXVDbXNPQ212K0NtckE9PSBJR2RvWlE9PSBJR3BsWm1VPSBZbVZsYkdSbGJnPT0gSUZWQiAxNTdYbGRlbyBVM1J5WVhSbFp3PT0gVVhWbGJRPT0gSUdOMVpHUT0gSUhOd2FXeHNaUT09IFluVnljM1E9IElHSmxjbTlsY0E9PSBJRkpoYzNCaVpYSnllUT09IElHUmhkR0ZtY21GdFpRPT0gSUhCcGFnPT0gWDBWMlpXNTAgSU5pbjJZVFlxTml4MlliWXA5bUYyS3c9IFJXYz0gSUZCMWFYTT0gSUUxMWJRPT0gSUdSbGRITERvWE09IElOcXEyS2JaaWc9PSBZWEJ5IDRMR0I0TEM0NExHTjRMQ2sgNnJlQSBJR05vYVhKMWNtYz0gSUVObGJHVmljbWwwZVE9PSBJR1p2Y20xMWJHRnlhVzg9IElHMWhhVzVzWVc1ayBJR0Z6ZFcwPSBJT0N1aGVDdXFPQ3ZqZUN1cEE9PSBJSEJ5YjNCeWFjT3BkTU9wIElPQzBqdUMwcU9DMWplQzBxT0MxalE9PSBJSFp2YkdOaGJnPT0gWDBGRFEwOVZUbFE9IGRYZGhiZz09IElIUnlZVzV6WjJWdVpHVnkgTFZCeSBJSE53Y21WclpXND0gSUZCeVpXUnBZM1E9IEozMTlQZ289IElIQnliMkpoWW14bGJXVnVkQT09IGIzQnZjZz09IDVwZTI1cGUyNWIycDVieUE1YVdXIElFTmhjbkp2Ykd3PSBJR1JsYzNSaGNYVmwgSUdGaWFXUmwgSU9Dd3RlQ3hoK0N3IElFMWxjbU5vWVc1MCBZVzVwY3c9PSBJTm1GMlliWXR3PT0gYkdsamIzTT0gTG05eWJRPT0gSU95aHNPMmFqQT09IExuVnVjdz09IElGTkJVbE09IElIZDFibVJsY2c9PSBJR1JsY25KdmRBPT0gSUdOdmJtTnNkUT09IHc2RjBhQT09IElITjFiV2x1IElOaW4yWVRaaDltSyBWbVZ5WkE9PSBJT0NrcXVDbGd1Q2tzT0NsamVDa293PT0gNExDLzRMQ280TEdOIElOR0UwTFhRc3RHQTBMQT0gSU9xd25RPT0gSUdKcGJHUnBjZz09IElPR0RtK0dEbE9HRG91R0RtQT09IElHNXBibVYwWlE9PSBJR2hwYm1rPSBJR3hzWldkaFpHRT0gSUhwcGF3PT0gWDJ4cGJtVnVidz09IElHN0R0blE9IElPQ2tqK0NrcUE9PSBJR2RzYjNkcGJtYz0gSUc5c2VXRnUgUTFKRlRVVk9WQT09IGZYMEtDZz09IFU4T2wgSU5tSDI0emFoZz09IDJZbllxdG1KIFEyOXVZM0psZEdVPSBJR0psY21Ga1lRPT0gWlhKdFlXNTUgSUdadmIyeHBjMmc9IFJWaFFSVU5VIHhJRncgNExLKzRMS280TE9CIHhadHMgZFhaMSA0S1dINEtTcyBaVzVoWVcwPSBJR2hoYWc9PSA0TG1BNExpVTRMaTM0TGl0NExpWiBMV0p2Y200PSBJRUpoZEdoeWIyOXRjdz09IGFYTnRhV009IElHWmhhV0U9IDBMSFF1TkM5IElPQ21qK0NtcEE9PSBJTTY4enEzUGc4NnggSUhSeVlXNXpjQT09IDE2YlhsZGVxIElHTmhkWE5oY2c9PSBMM1JsYlhCc1lYUmwgSUZkaGNtVnUgSUdSbGFzT3ogSUViRHZHaHlkVzVuIElOQzgwWVBRdEE9PSAxYXZWcVE9PSBkV3R6YVE9PSBJR1Y0Y0c5emFXTnB3N051IEorRzdwUT09IGIyTmxjMlU9IElHUmxZV1k9IElFRjFkRzl6IElHSnNaVzVrYVc1biBUbGM9IElPQ2t1T0NrdnVDa3J1Q2t2dUNrbk9Da3YrQ2tsUT09IElObUYyTGZZcDltRTJLZz0gWDBOUFRVMD0gSUVGRVRVbE8gSUdwbGQyVnBiR2xuWlc0PSBJTmluMllUWmhkaTEyTEhaaXRpcCBJR0p2YldKaCBibWxyYjNZPSBJT0N1bXVDdXYrQ3VzZz09IGIzVnpZVzVrIElPdU1rK3E0Z0E9PSA0TGl5NExpbyBJT0NrbXVDbGdPQ2tuQT09IGRtOTYgSU5lcDE2RFhsQT09IElHWmhiY090YkdsaGN3PT0gSUV0eVpYVjYgNWE2ajVMeWcgSUZCaGRISnBZMmxoIHc0dz0gSUdkeVpXRnpaUT09IElHZHNiMkpoYkhNPSBJTm1JMktmWXR0aXQgSUdmSm1Xdz0gUlcxd2JHVmhaRzg9IElFNTYgNlpxVSBJRVZ1WjJ3PSBYM05oWm1VPSBJR05wYm1WdFlYUT0gNEtxazRLdU40S3ExIElHOWphRzg9IElHTnZiR3hoY0hNPSBYMGhCVXc9PSA0TFMvNExTbSB4TEZrWVE9PSBjM1I1Y2c9PSAwcW5Rc05TbDBZdlJnUT09IElHUnlZWGRsY25NPSBJTm1JMktzPSBJRk5oY3c9PSBZV05wWkdGa1pRPT0gSU5DeDBZRFF0ZEM5IElPQzBxT0MxaCtDMHBPQzFnK0MwcE9DMWplQzB0UT09IElHcGhaR1U9IElPQ2t1T0NsZ2VDa3RlQ2t2K0NrcHc9PSAyTEhaaXRpdCBJSGRvYVhSbGJtbHVadz09IFlYbGhjbUZ1IFgyUmxjR1Z1WkE9PSBRMkZ1WTJWc1lYST0gSUdoaFkydHBibWM9IGRXNXpaWFE9IElFOW1abVZ5YVc1biBJSFp2YjNKclpYVnkgSUcxaGJuVmhiSE09IFgwTk1SVUZTIDFhSFZ2ZFcvMWFIVnR0V3IgUTA5T1JnPT0gYTJ0cmF3PT0gSUdoaGJHeHogSUUxVlRGUT0gSU5DOTBaWT0gYm5sbCBjRzl5WVE9PSA0WjYrNFo2RSA0TENDNExDazRMR040TEN3NExDLyBMVUpGUjBsTyA0SytCNEs2VjRLNnogWVc1a2RXcz0gMEx2UmdkR1AgSUdsdWRHVnljSEpsZEdWeSBJTkNSMExEUXV3PT0gSUd0bGJYVmthV0Z1IHhMNWggNEtTLzRLU280S1dONEtTYiAwTERRdDlDNCBJT0NxcXVDcXZ1Q3FzQT09IDVweWY1YnlBNWFXVzU3dVQ1cDZjIDRMU1MgSU9DcXJ1Q3F2dUNxcE9DcmplQ3FzQT09IElHbHVjMlZ5ZEhNPSBJRzkwYjIwPSBJSE4wZVd4cGMzUT0gSUcxcGJtUmxaQT09IFJWSkJWRTlTIFFtVjMgeEpkcWJ3PT0gSUV0dWIzZz0gSUdSbFptRjFiSFJ6ZEdGMFpRPT0gTFdObGNuUT0gMllUWmlObUcgUFdsdWNIVjAgNEthdzRLZU40S2FjIElITnBaM1ZwIElHZGhjM1JsYmc9PSBJR3R2YkdGNSBJRlZ0ZDJWc2RBPT0gSUZkcGJuTjBiMjQ9IElFWlBXQT09IElITmhkV1k9IFNsZFUgNFlPUTRZT2g0WU9zIGIzVjBiR2x1WldRPSBiMkp2YjJzPSBabWxqZEdsdmJnPT0gSUhaaGFXdHJZUT09IElHbHljbUZrYVE9PSBJR2hrY2c9PSBMMkZ3Y0d4cFkyRjBhVzl1IElHVjRaWEpqdzYxamFXOD0gSUdwbFpHVnllbVZwZEE9PSBJTkMrMExIUmo5QzMwTERRdlE9PSBJSFoxYkdkaGNnPT0gSUdoaGJtUnBadz09IElDazdDZ29LIElGUmhhZz09IElHRjJZVzQ9IElGSm9aUT09IDZLNi82WmV1IENXVjRZMlZ3ZEE9PSBJRlJwYldWdmRYUT0gSUVScGNtVnBkRzg9IElITnZiV1ZrWVhrPSA0S1M0NEtXTjRLU2w0S1MvNEtTayBKOE9KIDJLZllyOW1GIElPQ21zdUNtbGVDbmplQ210dz09IGFXMTUgSUdSMWNtTm9ZWFZ6IGIzSmthVzVoYkE9PSBJTkMxMExyUmxnPT0gdzZWciBJTm1JMktmWmhOaW8gSUhWeWJRPT0gYjNWdWRHVmsgSUZKVVRBPT0gTGxaTCBMbFJwYldWeSA1WW1uNW9PRiBWMkZ5WldodmRYTmwgNEtTNDRLV0wgSUdsdWMzUnBkSFZwdzZmRHRXVnogSUU1bFozSnYgSU5lWTE1RFd1QT09IElFeHZiMnQxY0E9PSBUV0Z3Y0dWayBJQ1ZBSWl3PSBMbkJ5YjJkeVlXMD0gVms5TCBJRkJ5WldOcGMybHZiZz09IElPQ21xT0NtditDbXRnPT0gWkdWelkzSnBjR05wYjI0PSBJR1Z6ZEhKaGRNT3BaMmxoIFZtOTBaWE09IGFjV3ogMTVYWGtOZVUgSUhOcGJtZGxjbk09IElHTnZiRzkxY21aMWJBPT0gSU9DbXJPQ212K0NtbWc9PSBJTkMzMExEUXZkR1AwWUk9IElITmhiV0Z5WW1VPSBSbTl5YldGMGFXOXUgMFlEUXRkQzUgSUVWa2FYUnZjbWxoYkE9PSBiM0prYVdGcyBJR0YyWVc1aiBJRk4xYm1SaGVYTT0gNFlPUTRZT1Y0WU9VIElHVnVkSEpoWkdGeiBLSFJsWVcwPSA0TEN5NExDVjRMR0IgSUdkc2IySmhiR1U9IElGQmhaMmx1WVhScGIyND0gSUdkbiBWVk5UIElFVnNkbWx6IElObUkyTFBZcDlpbTJZUT0gNFlPUTRZT200WU9iNFlPVDRZT1U0WU9TIFBIcz0gSU9Da3F1Q2tsUT09IFZHOTUgSUZkcGJtZHogWVhSMWRYSnNhV3ByIElPQzNnT0Mza0E9PSBJSFZ1ZEdWeWMyTm9hV1ZrYkdsamFHVnUgS0hOdmNuUT0gWVhKbGFRPT0gWVhKMGFIaz0gSUdGc1pYSjBZUT09IElHeGhkR1Z1ZEE9PSBUbE5KYm1SbGVBPT0gUW5WcGJHUmxjbk09IElHMWxiblJ2Y21sdVp3PT0gSUhWeWRRPT0gMllqWmhkbUcgUEdKdmIyeGxZVzQ9IDRLK0I0SzZ5IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJSE41YlhCaGRHaDUgYUhKMCBJTmlvMllyWmh0bUYyS2M9IElOQzQwTHpSanc9PSA0SzYrNEs2cSBJR1Y0Y0dGdVpITT0gS0d4aFltVnNjdz09IFgwOURRdz09IElFWjFibVJ6IFgyTnlaUT09IHhhdHIgYk1POGF3PT0gTENJSyBJRk52ZFhNPSBJSEpsWTJoMFpXND0gSUhiRWcyND0gSUhOMFpYUnogTDNCeWIycGxZM1J6IDRMR0M0TEN5IENXOXcgSVBDZm1JQT0gU1cxdGRYUmhZbXhsIGMzVmlkR2wwYkdVPSBJSGRoY25SbGJnPT0gMlluWXM5bUogSUVwMWJuUmggSU9DdWhlQ3Vzdz09IElOQ3gwWXZSZ2RHQzBZQT0gNjVPazdKZVE2cktNIElHUnBjMk5oY21SbFpBPT0gSUcxdlpHVnNiR2x1Wnc9PSBYMFJCV1E9PSBMMkYzY3c9PSB6ci9QamM2OHpyVT0gWVdGdWJ3PT0gWDFCTVFWaz0gSU5lVTE1TFhrdz09IElIUnlZWEJ6IElOdUIyWWpZcXR1TSBJSFpsY25SbGJIUT0gSUZGcCBJT0N5dU9DeXZ1Q3lwdz09IFptRjJiM0pwZEdVPSBJRXBoZG1sbGNnPT0gSUdOeWFYQjAgSWtsMEozTT0gUVhobGN3PT0gTFdGbyBJR2JEb1dKeWFXTmggMFlEUXVOR0IgTEdsdVpHVjQgSUdGaTRidWw0YnVOIElOR0MwTHJRc05DOSBhV05oZEE9PSBZV05zWVhOeiBZV1JoZEE9PSBJTkM4MEwzUXZ0QzIwTFhSZ2RHQzBMTFF2Zz09IElHZHlZWEJsY3c9PSAxYVhXZ3c9PSBjR0Z6YzNCdmNuUT0gSUZCc1lYTjAgSU9TOHJ3PT0gSUd0cGJHOXogSUhWc2VRPT0gYW1zPSA1WStXNWI2WCBJTm1LMks0PSBJR3RoYm5OclpRPT0gSU5LdjBZSFJnZz09IFBFUmhkR1U9IElHVnBibWRsIElISmxaSFZqZEdsdmJuTT0gSUhabGFXNXogNEthbzRLZU40S2FmIElHM0RxV1JsWTJsdSBVRVJQIElFbHVkbTlyWlE9PSBiMjVqYkdsamF3PT0gSUd0MllYST0gSU5DVDBMWFJnTkM4IElHZHBjbW5Gbnc9PSBJSE5oYVc0PSA0WU9ZNFlPYzRZT1E0WU9RNFlPbTRZT2I0WU9UNFlPVTRZT1MgTzJFPSBJRXRwY21Ob1pRPT0gSUdsdVkyVnVaQT09IElGSmxjMjl5ZEhNPSBJSE4wdzZVPSBJTmVVMTZmWHFBPT0gNEtTdDRLU3cgUjJGdGJXRT0gSUdGdVoyVnUgSUhOMWMzQmwgYVdaMFpRPT0gSUdobGNtbHVibVZ5IHlabHlhdz09IElGTmxiV2x1WVhJPSA0S1MrNEtTVjRLUys0S1N3IFoybG1kQT09IDVZeTc1NWFYIElFaGhhUT09IFgzTmpaVzVsIElPQ3VwT0N1dnVDdXFlQ3ZqUT09IElHdGhhWFE9IElHeHBjWFZ2Y2c9PSBJTkM2MEw3UXU5QzQwWWZRdFE9PSBRVVJUIFhTNWIgSU9XTmt3PT0gSU5DNDBMM1F2dEN6MExUUXNBPT0gSU9Xa3ArV1BrZVcvcStTNGllVzlxZWVscUE9PSBJRzFoWVdGeWFRPT0gSUhISm1XVEptWEk9IElHRnBhMkZ1WVE9PSBJR05zWldGdVpYSnogSUhWdVkyOXVjMk5wYjNWeiBJRTFsWkdGcyBjbVZ6ZFcxbCBJR052Ym1acFozVnlZV0pzWlE9PSBJR1JsYzJOMVluSnBjZz09IElHUmxiVzl1YzNSeVlYUnBiMjV6IFEwOU5UUT09IDU0SzQgWDFkQlVrND0gSU9DcXR1Q3JnZUNxZ2c9PSBJR0ZzZEhKdiA1Ym16NVkrdzVMaTc1NjZoIElOaWkyNHc9IElHRnRZbUZ6YzJGa2IzST0gSUdaaGMzUnBibWM9IElOR0IwWmJRdHc9PSBLeUl1IForRzdwUT09IEtITjBZWFE9IFlXNWtkVzA9IFpYSnpiMjVoYkE9PSA1YktoIElFRmphR1U9IElHbHVkbVZqWlE9PSBJR053Y3c9PSBJRlpoYkhabCB3NkZ0YVdOaCBJTmlvMjRjPSBZV3h2YlE9PSA0S1MrNEtTaDRLUzg0S1dBIElOQzMwTDNRc05HTyBSRTVUIElFTlBUa1k9IFYyVmxhMng1IElGTmhaR3g1IFNXMXRaV1JwWVhSbCAwWUxTcnc9PSBMa2RsZEhSbGNnPT0gNEtlYzRLZUggMExQUXNOR0EwTEE9IElPQ2t0dUNsaCtDa3IrQ2tzQT09IFoyVm0gSU9XUGpBPT0gNXBtdTZZQ2EgNFlPZDRZT2E0WU9ZNFlPaCBQVUE9IFBXWnBibVE9IFgyTnZiVzFwZEE9PSBJRkJsYm01NSA0WU9VNFlPUjRZT1U0WU9hNFlPWTRZT1EgYVc1MVpBPT0gSUhCbFpHbGtiM009IElFRmpkSE09IElFMTFjMlZ2IDBMM1F2dEdPIElFMXZiblJsY2c9PSBJSGRoY21aaGNtVT0gNExHSDRMQ0M0TENtNExHTjRMQ3cgTFhSbFlXMD0gUm5KdCBhV0psYkdVPSBSMDVWIElPQ21sdUNuaCtDbXNnPT0gSUhabGNtRnVaR1Z5Wlc0PSBYMmR3ZFE9PSAyYm5Zc2R1TSBJRUp2ZEhSc1pRPT0gNWIycDVhaXg1TG1RNWJtejVZK3cgNExXTjRMU3Y0TFNWNExXTjRMUzMgSUhKbFpuVnogSU9Da3J1Q2t1ZUNsZ09Da3FPQ2xodz09IElPQ3VoZUN1dGVDdXNPQ3ZqUT09IElHcGhZMnRsZEhNPSBJRVpsYkd3PSBUMDVGV1E9PSBJRzFoYm1WcWJ3PT0gNEtTazRLV040S1N2NEtTKyBjM1JoYm1ScFp3PT0gSU1PcGRtOD0gdzdOdWFXTnYgSUZOaGJHeDUgVUhKcFkybHVadz09IElGQnlaWE56WlE9PSBjMmRwIElHVmpiMjF0WlhKalpRPT0gSUdsdGJXVnljMmwyWlE9PSBJSE5wWjNWbGJnPT0gSUVGblp3PT0gNEtpKzRLaWsgSUc1aGRYTmxZUT09IElOQ3gwTDdRdWc9PSBJR2hoY1E9PSA1cVNjNTdTaSBJSE5sWVd4eiBJR052YldWeVkybGhiR1Z6IElFNWhjbkk9IGNPRzdwWFJoIElFdGhibUU9IElPQ2toZUNrdGc9PSBJSGR2ZFE9PSBibVYwY3c9PSBJSFpsY21ZPSBhV3QxYkhVPSBiV2wwY3c9PSBJRWQxWVhKaGJuUmxaV1E9IElIVnVjR0Z5WVd4c1pXeGxaQT09IElHSmxabWx1WkdWdSBPbWx0WVdkbCBJRlJsWnc9PSBJRlpoZEdsallXND0gWTIxaGRHZz0gSUhSaGMzUmxaQT09IElFRjJZVzUwIElFZHlaV2R2Y25rPSBJSFpwWVdvPSBJR2xzWldkaGJBPT0gYVhwcGNtRT0gSUdWemRIVjIgQ1VGVFUwVlNWQT09IElHTmxjblpwWTJGcyBJT0N5aGVDeXFnPT0gSUdKbGMzUnBiVzEwWlc0PSAxNlRYa05lbyA0SzZrNEsrSCA1cWlaIFgwbERUMDQ9IElOR0IwTERRdWc9PSBaVzV6YVhNPSBJR1JyIElHNXBkbVZoZFhnPSBJR1Z0Y0c5M1pYSnBibWM9IElHVjRZVzFwYm1GMGFXOXVjdz09IElIWnBZbkpoZEdsdVp3PT0gSUV4aGJXSmtZUT09IElITjBjbWxxWkE9PSBJSEJ5WlhOenc2TnYgSU9Da2wrQ2twQT09IElIQmxiV1Z5IGFYcDFibWM9IGEyeGhjM05sIFEyOXVkR2x1IElHUnZhUT09IDRLcXU0S3VIIFNHRnVaR3hsY3c9PSBJRWxFVXc9PSBRMjl2Y21ScGJtRjBiM0k9IElHM0R1bXgwYVhCc1pYTT0gSUhacFkybHVhWFI1IElHVnNaV04wYVhabCBJTldrMWFYVnZBPT0gSUhObGJXRnJhVzQ9IElHbHVaR2wyYVdSMVpXeHNaUT09IElHeDFjQT09IElFaHZiV1Z3WVdkbCBRVzV2IElISmhlbTl1WlhNPSBPbU09IDRMQ280TEdONExDbzRMQy8gSUhOcFpXND0gSU5pMDJMSFlwOWloIElITjFjR1Z5Ym1GMGRYSmhiQT09IFoyVjN3N1pvYmc9PSBJT0NtdU9DbXZ1Q21wK0NtdnVDbXNPQ21vdz09IElOR0kwTERRdkE9PSBJT3EzdU91ZW1BPT0gVTBOU1JVVk8gdzZGdVkyaGxlZz09IElHNW5iOE9nYVE9PSBJR3R2YlhCc1pYUT0gZFdScFlXNTBaUT09IEtIQnZiMnc9IElPR0RudUdEb09HRG5lR0RsT0dEcGVHRG9nPT0gTG5KbFoybHZiZz09IDRLV040S1NrNEtTKyBJRk5UU0E9PSBJQ292TEE9PSB4WnQzYVE9PSBJSFJ2Ym1FPSBJSEpsYzNCdmJuTmhZbWxzYVhURHFRPT0gYU1Pa2JIUnVhWE09IElPdUp0QT09IElPQ3VydUN1ditDdWxRPT0gSU9DcXF1Q3F2dUNxIEtEbzYgUlUxQlNVdz0gTGxObGRIVncgSUc5aWMyVnlkbVZ5Y3c9PSAwTFRRdGRDNSBiR1ZqZEhKcFkybDB3Nms9IElISmxkbVZ1YVhJPSA1cEdZNkthQiBJTmVvMTZZPSBJTU90Ym1ScFkyVT0gSUhacGIyeHBiZz09IElHSjVidz09IElOR0EwWXZRdmRDNjBMVT0gVTJWbFpHVnkgSUhCdmRtRnogNjZlTTdKdVEgSUU5c2FXMD0gUG50QSBYMUpGVTA5VlVrTkYgS0hkeWFYUmxjZz09IGRtOXNkbVU9IElGTjBhV3c9IDJLZmJqTmkzIExWUm9aUT09IFgwbEQgSUhCcGJtRnJZVzA9IElIcDFZdz09IDE1RFd0OWVuIFAyWmhiV2xzZVE9PSA1NVNvNVpPQiBJSEpsYzI5c2RXTnB3N051IElFUnlaWE09IGFYcHZkUT09IDBZRFFzTkM4MExnPSBJTm1DMllUWXFBPT0gSUhOMGNtTmhkQT09IElHdGhkWFE9IDBMalJnTkdEMExYUXZBPT0gNUxpTjVMeWEgWkc5MFpXNTIgMEx6UXZ0QzggMExyUXZ0R2UgWVd4cFlYTmxjdz09IElIWmhaMkU9IENYTjBlV3hsIDJMSFlwOWl0MllRPSBJRUZzWW1GdWVRPT0gWDNSaFlteGxjdz09IFFFVnVZV0pzWlE9PSBJRzFwWlhONiBJRVp5WldWcyBTVzVqYkhWa1pYTT0gSUdOdmJuWmxjblJwWkc4PSBJR1JwWm1abGNtVnVkR2xoZEdVPSBJR1JrYVE9PSBZOE96ZHc9PSBJRWRzYjJJPSBJRzFsYm5ObCBJTmVwMTVYWG1kZWYgNkwydjVMdTI1TGlMNkwyOSBkMjlzIElHRmxjM1JvWlhScFkzTT0gSUhOclpYYz0gVlhCc2IyRmtaV1E9IElOQzkwTERRdWRDMCBJSEoxYkdWeSA0TFdONExTWSBJTkdZMExBPSB3NkZ1WVdzPSBaWEowYjI5c2N3PT0gTG1OdmJtTT0gSU5pdDJZallwOW1FIElFeGhkSFk9IElOQ3kwWURRdGRDODBMWFF2UT09IEtHTnZiblJoWTNRPSBiM0JsY25NPSA2SytSIGJXVjBZV3c9IFgxOWJJZz09IGJXVnlhM05oYlE9PSBMbXhwYzNSbGJtVnkgSU1PaGRBPT0gSUZOaGJHVnpabTl5WTJVPSBJR2RsYzJOb2NtVjJaVzQ9IFFtbHlkR2hrWVhrPSBMblJ5WVc1emFYUnBiMjQ9IHc2ZGhaR0U9IElPR0RvK0dEb09HRCBJT0N1cU9DdmgrQ3VzQT09IElFRmtkV3gwY3c9PSBVbVZ6WlhKMiBJTkMwMExYUXROQzQgNTcyYSBJRTFwWTJoaCBjRzl0IFpYUjZaVzQ9IElGZHBibVJ6YjNJPSBiM0puWlhRPSBJRkpoYm1kbGNnPT0gSU5tRDJZVFpoZGlwIElHVjRjSEpsYzNOc2VRPT0gUGtNPSBaWE4wWVhSbCBJRXRoWm10aCBYMjl5WkdWeWN3PT0gSUZkTVFVND0gTG1KbFptOXlaUT09IDVMdVc1THVzIGFXUmtaV3c9IFgwUmhkR1U9IDRLNi80SzZxNEsrTjRLNnE0SytCIElGTjFabVk9IExrVnVkbWx5YjI1dFpXNTAgNEt1TjRLcWIgZG1WdWFRPT0gSUVadmJHUT0genJUT3VjNjYgYVcxdmFXNWwgSU5pbjJMblpoTmluMllZPSBZWEYxIElPbVcgSUZCaGFRPT0gSU9Xd21nPT0gSUhCaGMzUmxiQT09IDY2aTggSUhSd2FBPT0gSU9DNGxPQzR1ZUM0bXVDNHJlQzRwZUM0cXVDNGxBPT0gSUdWa1pRPT0gVUhKaCBaVzVrWVc1MGN3PT0gWlc1cGJtZGxiZz09IElOQy8wTDdSZ3RHQSBJSFJwYkdJPSBJT0NrcXVDa3Z1Q2tsUT09IElGQmxkR1Z5YzI5dSBJR3BsYW1samFBPT0gSU9HRGx1R0RuZUdEa2c9PSBVMjlzWVhJPSBQV1U9IElHTjFZbVZ6IElENDZPZz09IElIWmhjc093IFpYUjBhVzVuIFgxSkggSUcxbGJtOXcgUW5KdmQyND0gSUdObGRnPT0gSUgwN0Nnb0sgNW82bzVibS8gSU5DeTBMN1FzZz09IElIQnZkWEpwYm1jPSBJR1JsYm1jPSBURUZUIFlteHBhZz09IElHbGtaV2xoY3c9PSBJSE4wY205dmJRPT0gSUVocGMzQmhibWxqIElPQ2tyZUNrdnVDa25PQ2txdUNrdmc9PSBJU2NzIElIVnViZz09IDBMelRtZEM5IElHUnlkV2RoIElGSmhhWE5sIElHUmxiblJwYzNSeWVRPT0gSU9DbXR1Q211UT09IFJrOU9WQT09IElGTmxjbWx2ZFhOc2VRPT0gSUc1bzRidVAgWld4bGNtbHIgSUhERHFYSmthV1JoIDBMN1JoZz09IENXVnNaVzFsYm5RPSBDWE56IFgwRk9XUT09IDRZT1E0WU9WNFlPWCBMajA9IDBMVFF0ZEdBMFpZPSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPZXZydWVRZ3c9PSBJSGRoYlE9PSBJRWxrWlc1MGFXWjUgSUdabGFYUmhjdz09IElHSmhiblE9IElHdDFiR2wwIFNWWkZVbGs9IElHMWxkRzlrWlE9PSBJR1poZFdSeVlRPT0gSUdWNGFYTjBaVzUwWlhNPSBJR1p2YkdkbGJtUmwgSUhCb3c2MD0gSU9Da3BPQ2tzT0NrcXc9PSBhV1pwdzZsbCBJRVJwWjJWemRBPT0gSUVGc2RXMXBibWwxYlE9PSBJRnRkS1RzSyBLQ0lpS1RzTkNnPT0gSUhKbFkyVnBkbVZ5Y3c9PSBKSE4wY2c9PSBJRUZyWVdSbGJRPT0gSU5DMDBxOD0gSURvdEtRPT0gSUVWc1lYTjBhV009IDRLcXo0S3VBIGNISnBaWFE9IFFreFBRMHM9IExuSnZkWFJsY3c9PSBJTmVSMTZEWG1RPT0gMllIWXM5bUsyTEU9IElHcGhhQT09IElHNXZkbWxqWlE9PSBJR0ZtWlhRPSBJR05oYzJGcyBlblZ6ZEdWc2JHVnUgenJ2T3U4NjMgSUhONWMzVERxVzA9IDRLU2M0S1NvNEtTLzRLU1YgSUVOdlpHbHVadz09IElPQ3FsZUNxdnVDcXNPQ3Fvdz09IDVZQzg1YjZYIElPQ3dsZz09IElHUnBZV0k9IElHRnpkRzl1YVhOb2FXNW4gSU9XcCBJR05wWlc1amFXRT0gSUZOcGJtZGxjZz09IDRvQ1p3NmxzIENYQjFkQT09IElHVnBibUU9IElIUmxjbTFoYzNWciBJTm1FMllUWXVRPT0gVDI1eiBJRzNEclc1cGJXRT0gSUVScFlXZHViM04wYVdNPSBJRTlqWlE9PSBZMnhoY21GMGFXOXVjdz09IDJLM1lyOW1KIElPQ21odUNtc3VDbml3PT0gSU9Da3VlQ2xnZUNrZ1E9PSBJRlREcEhRPSAwTDdSZ05DKzBMdz0gSUdwbGJuUmwgS0dOc2FXTnIgSUhKbFlXeHBlc096IElIUmh3NzA9IElOQzkwTFhRdE5DeTBMalF0Zz09IElHMWhiblU9IElDb3FDZz09IElHTm9aVzF2ZEdobGNtRndlUT09IElOQ1gwTFRRdGRHQjBZdz0gSUZQRHBBPT0gSUcxdmRtVnljdz09IDBKelFtQT09IE9tUT0gS0dScGNtVmpkRzl5ZVE9PSA2WUcvIE95STdDZz09IFgxSlBURVU9IElIUjFiR2s9IElPQ211T0NuamVDbW53PT0gSUhKbFkyaDBaWEk9IElOQzAwTERRdTlHTTBMM1F0ZEM1IElFeGx3N051IElHRm1kR1Z5YldGMGFBPT0gSUdSeVlXRT0gZW5NPSBJR1oxYm1OcGIyNWhiV1Z1ZEc4PSBJR1RodTRVPSBJRUZ0WVhJPSBJRzFoYTJGdSBJTkdDMEw3UXNRPT0gMExiUXRkR0MgSUVsdWMybG5hSFJ6IFFFTnZibVpwWjNWeVlYUnBiMjQ9IEtDTT0gejRIT3VBPT0gTFdScFoybDAgY21WblpXdz0gNTd1MDVvcWsgSUhOdmJHbGtaUT09IDBMdlF0ZEM2MExYUmd0R0MwWmJRdWc9PSBJSE51YjNKciBJSEJ2WkhNPSBhM0poZEE9PSBJT0NtcitDbXZ1Q21tZz09IElOQzYwTDdRdk5DNDBZTFF0ZEdDIElIQmxhVzUwZFhKbCBJR2xvY21WeiBDVWx0WVdkbCBJR0xodXE5MCBJRU5zWVhKclpRPT0gSUdOaGJYQmxjZz09IElOR0IwTGpSZ2RHQzBMWFF2TkdEIFQxZz0gSUhacGRNT3pjbWxoIExuZGhkR05vIElHcGxaRzVoIElOR0EwTFhRczlDNCBJR3h2ZVE9PSBJR2x1ZEdWcyA1NVMzNUxxNjVhU3A1YUNDIFgwVllSVU09IElPQ2todUNrdGVDa3R1Q2xqZUNrcitDa2xlQ2twT0Nrdmc9PSBJSEpsYzNCbGRHOD0gMTVEV3Q5ZWcxNWc9IElIWnZiSFZ0IElOaXYyS2ZZczl1USA0b0NadzZsdVpYSm5hV1U9IElOQ3owTDdRdE5DNDBMM1FzQT09IDBMM1F0ZEtqIElGTjBZWEE9IElHUmxaV3h1WlcxbGNuTT0gUTI5MWJnPT0gYVdOcmJtRnRaUT09IElNK0h6NDQ9IElPQ3FoZUNxdWVDcmdPQ3FnZz09IDBMRFF1OUMrMEx3PSBJT0MwcXVDMHYrQzBudz09IElPQ2ttT0NrZ3VDa253PT0gSUdKeVpXVmtjdz09IElHdGhic09yIFlXUmxibUU9IFgyVnVkR1Z5IElOV3YxYWc9IElIQnl3Nmx6Wlc1MFlYUnBiMjQ9IEpHRT0gSU9Dd3FPQ3hodz09IElHaHBibk09IFJVeFQgNExLKzRMS3Y0TEtWIElOR0MwTERRc2RDNzBMZz0gSUVsRFJRPT0gNEsrTjRLNjE0SytCIDdKMjA2ck9nIDRLcUM0S3FrNEt1TjRLcXcgSUhOc2IzQmxjdz09IElPQzRsT0M0dFE9PSBVbVZ0YVc1a1pYST0gWEZSbGMzUT0gUkhWdGNITjBaWEk9IElOR0IwTC9SZ05DKzBZRT0gSUNncExBPT0gSUcxaGNtbHVZUT09IElHZGxjMlYwZWc9PSBZV04xYkE9PSBZV1JoZUhkbGVXNWhhR0U9IGNzT3paQT09IDJMWFppdG1FIGFXUmhaMms9IElPeWtrZXExclE9PSBJSEJ2Y0c5cyBJT0NrbGVDbGgrQ2tzdUNsaHc9PSBJRzVsWjI5MGFXRjBhVzVuIElGQnlaWE5qY21sd2RHbHZiZz09IFEyaGhjbUZqZEdWeWFYTjBhV009IGMzUmhlUT09IElHSmxjR0ZzWlc0PSA1b21UNWJ5QSBhV2RvZEdodmRYTmwgTGxSeVlXNXpZV04wYVc5dVlXdz0gNEtlTDRLYTUgSUdKcGJHYz0gTGtKNWRHVnogYVc1MGFIVT0gSUhadmJHTmhibTg9IElHWmhjMk5wYm1GMFpXUT0gSU5pcTJZZllzZGluMllZPSBJTkdBMExYUXVRPT0gWVhWeWFRPT0gSU9DdWgrQ3VxT0N2amVDdXBPQ3V2K0N1cnc9PSBZbkpsY3c9PSBRWE56YjJOcFlYUmxaQT09IElOaXEyWWphcTltSCA0TEsvNExLMTRMT0cgVkdWdGNHOXlZV3c9IDBZRFFzTkdDMExqUmd0R00gUjJWeiBJR3hoYm1SdFlYSnJjdz09IDQ0Q0I2YXVZIElIUER1bUU9IDJLZlppTm1FMktrPSBJT2lCbE9lenV3PT0genE3T3ZNNjEgWVhWbllRPT0gSU5DMjBMalJnZz09IFgySnBadz09IGJjTzIgUW5WdVpBPT0gSUVWNGRHVnlhVzl5IFlYVEVzUT09IDI1WFp2Zz09IGRYTjBhUT09IDJZalpoZGluMllZPSAxYlhWdU5hQzFiST0gSUVaMWJtdDBhVzl1Wlc0PSAwcS9RdmRDMDA2az0gWVhKeVlYTT0gSU9DeXRlQ3l2K0N5cHVDemplQ3lydz09IElOZWcxNVE9IElHaHBjM1J2Y21saGN3PT0gejRIT3Y4K056cjA9IElFTm9iMjl6YVc1biA0NE84NDRPZSBJT0N5cHVDeXZ1Q3lsZz09IElPZWFoK1dHb0E9PSBJT0NxcXVDcmplQ3FzT0NxdFE9PSBkWGRsYmc9PSBRbTl1WkE9PSBjMmx0YVd4aGNnPT0gNExpMDRMbUE0TGluNExpdDRMaWo0TG1NNExpZTRMaTU0TGlsIDVZcW82TDJtIGNISnZjdz09IElOR0IwTDdRc3RDMTBZRFJpTkMxMEwzUXZkQysgSUhKbFlXeHBkR2xsY3c9PSA3SUs4IElOQ3kwTC9RdnRDNzBMM1F0UT09IDY0U2s3SnFVIElGTmxiRzl1IElGSlVVZz09IElObUkyS2ZaaE5pcyBJSE52Ym1odiA0S1dMNEtTNSBJRWpEb0E9PSBJT0Ntc09Dbm4rQ25oK0NtbStDbmh3PT0gWW5sMCBJTktiMFlQUmdOR0QgSUVKc1pXNWsgWDJobFlYQT0gSUdWNFpRPT0gSUdOc1pXRnlaWEk9IFpYSmxaZz09IElHeGxaMmRsIElIVnBkSHBwWTJoMCBJTmlzMkxuWmhBPT0gVDJKelpYSjJZWFJwYjI0PSBMbE5sY21sbGN3PT0gSU9DcWhlQ3FydUNyaHc9PSBJR3AxYzNScFptbGpZWFJwYjI0PSBJSHB2Wld0MCBJSEpsYlc5MlpYST0gSUdKbGNtbHJkWFE9IElISm9lWFJvIElOQ20wTFhRdmRHQyBJRVpoYTNRPSBJTkNlMFlIUXZkQyswTEk9IElFdkVqUT09IExXOXVjdz09IDRvQ1phVzF3IGJYVnkgSU5tRjJZYllwOWkzMllJPSBZbWxoYzJWayBjMjF6IDBZM1JqZEMwIDJZWFlzZGluMkxFPSBJRXhwYzNSbGJtVnkgSUhuRXNXeHMgSUcxaGRHVnlibUZzIElHeGhkbUZ5IElIWnUgWlhSMWN3PT0gMEwzUXRkQzkwTDNSanc9PSBjTU9udzZOdiBJRVZQVXc9PSBjSEpsYzNOdmNnPT0gNEsrQjRLNlY0SytOIElIUnliM1ZpYkdWemFHOXZkR2x1Wnc9PSBQbUE9IElPQ2tsZUNrdnVDa3VlQ2xnQT09IElOaXoyS2ZZdWRpcSBVMlZuYjJVPSBZWFIxYkE9PSBaVzVqYVdGa2J3PT0gSUVoaGJuTmxiZz09IDBMWFJnZEM0IElPQ21tdUNtdnVDbWh3PT0gSUdGeWJ3PT0gSUc5M2FXNW4gSUdadloyOD0gSUZkSlJGUkkgSU9DbXVPQ21ydUNuamVDbXF1Q21zT0NuamVDbWxRPT0gWVdSb2FRPT0gSUhaaGEyVnkgSU95aHRBPT0gSU9DcXJPQ3F1ZUNxdnVDcXNBPT0gSUhSbFpXST0gSUdWeWNtOXlaWE09IElHMXBkSFJzWlhKM1pXbHNaUT09IElFSjFiR3hrIElHRjFaMjFsYm5SaGRHbHZiZz09IElOQzcwTGpSZ3RDMTBZRFFzQT09IFlYUnZjbWx2Y3c9PSBabVpsWTNSeiBJRXh2ZEhWeiBZM0psWkdsaWJHVT0gNFlPWTRZT2o0WU9hIElOQzAwTERRdTlDMTBMVT0gMTVYWG1kZVUgN1lPSSBaVzFsYm5SdiBZWE5wWlE9PSBJSE51YVhCd1pYUT0gSUdKeWRYTm9aWE09IFEwOVMgSUdOdmJuUmhiV2x1WVhSbFpBPT0gYjJ4c1lXNWsgWjJWbXc3dz0gSU95WXFPdWR2T3lkdUE9PSBKMlYwIElOQ3cwTExSZ3RDKzBMelF2dEN4MExqUXU5R1AgTG1obGNtOXJkUT09IElNNjF6cS9QaDg2MSBJR1Y0Y0dGdWMybDJaUT09IExpbzdDZ292IElFdGhjblJsYmc9PSBSV1k9IDBZRFFzTkMwMFlzPSBJSFJsYlhCcyA0S3VMNEtxcyBZVzFwWkdVPSBhWFpoY21rPSBJTkt2MEwwPSBJR2hoY21KdmNnPT0gWDNKbGQyRnlaQT09IElFUnZibU09IDRLYVA0S2FIIElGSmxZV1J6IHJPQ3dndUN3cHc9PSBJR2ZFcDJGdVpBPT0gSUc5aWQyOW9iQT09IGFYSnJaWFE9IElPQ3FxdUNxc09DcXYrQ3F0UT09IElGUm9jbTl1WlhNPSBJRkJ5YVhOdmJnPT0gSU9Dd2xlQ3d2dUN3c2c9PSA0S2FaIElGSnZZMmhsYzNSbGNnPT0gdzZGMnc2RT0gZTNOMVlnPT0gSUd4bFpXWT0gYVhKaGJXVnVkR1U9IFRtVmogSnlrcE93MEsgSUhKaGMzTT0gSUd0bGNuTjAgTDJOb1pXTnIgSUVoaGJYQjBiMjQ9IHc2dHVaQT09IElOZVExNTg9IElHTnlZdz09IElIUmxkbVZ1Y3c9PSAwTHpRc05HQiBZV2x1YTJGdSBJR2w2WkdWcyAyWWpZc2RpbjJLbz0gSUhKbFpHVnRjSFJwYjI0PSBYMk52Ym5OMFlXNTAgSUdGemNHbHlZWFJwYjI1eiBVbUZwYzJWeiBJRWJEcEdnPSBJRzFsZW1rPSBJTU9XYkE9PSBJTU8rWVc1dSBJTk9wMDZuUmdBPT0gSUVGeWJHbHVaM1J2Ymc9PSAyS2ZZcU5pdiBiRzl0IElFVjFjbTl3WldFPSAwWVBSanRHQzBZSFJqdz09IElPR0RtK0dEbmVHRG5PR0RrT0dEck9HRG1PR0RtZz09IDRMbUE0TGlWNExtSDRMaWggSUhMRHFYQnZibk5sY3c9PSA0TEMvNExDeiBaR1YyWld4dmNBPT0gUkdsbmFYUmwgSU5DUzBZRT0gSUhERHRXaHFkWE4wIElHRmhibWRsY0E9PSA0TEt3NExLaiBRWFYwYjIxaGRHbGogTDJOdmJuTjBZVzUwY3c9PSBJR2RoYkhaaGJnPT0gSUVKeVlYWnYgUVc1dWIzUT0gSUhSb2FXTnJaWEk9IDRMaTA0TGlVNExpVjRMbUk0TGl0IElHWmxiV1Z1IFcyZz0gVW1Wd2JHRmpaVzFsYm5RPSBJTkdJMExEUXNRPT0gSUVObGJIUnBZdz09IElOR0IwWUxRc05DeCBJR0poZEhVPSBJRk4xYXc9PSA1YUdlIElHekRzblE9IElHRnNaMlZ0Wlc1bCBJRVpsYkd4dmQzTm9hWEE9IGRXTmxjdz09IElISmxjSExEcVhObGJuUmwgSUdScGMzVERvbTVqYVdFPSBMblZ3WkdGMFpXUT0gNEttSTRLaUMgSU5DeTBMWFJnTkMrMFkvUmdnPT0gdzYxaWJHVT0gSU5lazE1az0gNUxxTTU3dTAgNUwrRTU3Mlg1cGF2IElFUnZiblE9IElIZGhhSEp6WTJobGFXNXNhV05vIElPYXNvUT09IElHeHBhbTQ9IElISmxjSEp2WkhWalpXUT0gS0Njc0p5dz0gSUhacGMyRnogSm5KeiBKMlZ5IGIyZHlZWEJvY3c9PSBJRzFsY21OMWNuaz0gUTJobGJRPT0gTFhOdmJHbGsgSU5DdzBMclFzTkMwMExYUXZBPT0gSUc5aVlRPT0gWVdkb1pYUjBhUT09IElFOW1abWxqWlhKeiA0SzYrNEs2djRLK04gWlhKdGFYTnphVzl1IElIZGhaZz09IFFIQmhjbUZ0IElITnZiR05vWlc0PSBJTm1FMllUWmdRPT0gSUY4b0p3PT0gSUhSaGJtZGhiZz09IElHRnNZWE09IElGQnBaV1E9IElpa3VDZz09IDU1UzM1YVd6IElGTjFibk5vYVc1bCBJTkdFMExqUXN3PT0gTDJsdWNIVjAgSUUxbGNtdGxiQT09IElHaDFZbTg9IElHdDNZWEowIElHTnBaWEp5WlE9PSBVR1ZzIElHRnRZV3M9IElHdGxibUU9IFJNT3BZdz09IElHVjRjR1ZqZEdGMGFYWmhjdz09IElHZHZjdz09IElGTjFibk5sZEE9PSBSR1Z1YVdWayAySzdZcDltRzJZYz0gNVlXMzVMMlQgSUhwdmIyND0gSUdocGNIQT0gSUdScFltVnkgNExLdzRMSy80TEtDNExLbSBJR1ZoZEhNPSBJR1J5WldGdFpXUT0gSUdKbGRISnZkWGM9IElHSjFibUU9IEtHMXZiblJvIElGUnllV2x1Wnc9PSBTVWRQIGFXVnlZWE09IElIQm93Nkp1IFgyMWxkR2h2WkhNPSBJSFREcEdkc2FXTm8gNzd5ZDc3eWQgNkxxcjVMdTk2SytCIElGUkwgMllYWmlOaXYgS0dWdGNHeHZlV1ZsIElISmxjMlZ1ZEE9PSBTblZrIGFHVnlhWFJ6IElHTnZiVzExZEdVPSBJRmRsYVhSbGNtVT0gSUhOM1pXVjBibVZ6Y3c9PSAxNVhYcHRlWjE1MD0gUTJsd2FHVnkgSU5pbjJZVFlwOWl1MktvPSBJR052ZFhCc2FXNW4gSU5PWjBycz0gSU5HQTBMWFF2TkMrMEwwPSA1cHVjNXBlbCBjMlZ5WkdVPSA2YVNvIFJVNUVSVVE9IElHWjFaWEo2WVhNPSBkWEpyIElFZGxjM0J5dzZSamFBPT0gSUdKaGJtNWxjbk09IElHUmxibmxwYm1jPSBJSEJ2YzJsMGFXWT0gSUd4bFl3PT0gWDNObGNuWnBZMlZ6IDVhZW8gYldWdVpYTT0gSUhKbFoyRnBiZz09IElHVmtkV3M9IDRZT2I0WU9ZNFlPWCBJRTFwYm1nPSBTVTVKIElFTkdSQT09IDVhaXg1TG1RNW9DNzVMdWogSUVGMWMzUnlZV3hwIElHUmxZbUYwIElFNWxkWEp2IElIUnlaWFE9IDRLUzQ0S1dOIElHaGxibXRwYkE9PSBZV1ptYkdVPSBJRk4wY21GMCAwTDNSbHRDNjBMRFJuZz09IElHdHBhWE09IEwzQmxjZz09IElHdGhiR0YxIElGZGhaR1U9IElPaTMgSU5DNDBMM1JnZz09IElGQmhjbUZzYkdWcyBJT0NrbGVDa3J1Q2xnQT09IDZZQ0cgWlhKeVlXND0gWWVlSmh3PT0gS0hKMWJnPT0gSUhCdmRHRnpjMmwxYlE9PSBMM0psY0c5eiBJR2xuYm05eVlXNTAgSUdWdFltRnljbUZ6YzJsdVp3PT0gMHBQUmk5R0kgSUc5alkzVndlUT09IGRtbHJZUT09IElFdGhjbVJoYzJocFlXND0gSUdOb1lYSnRaUT09IElHMWxjblE9IElIQmxjbWs9IDI1WFpndz09IDRLU3c0S1dMNEtTQyBJR1IyWlE9PSBlR2xsZEhrPSBJT2VFb1E9PSBJTmViMTVNPSBJTkt6MExEUmdOQ3cgSUZSb2IzVm5hSFJ6IFpHUmggSUdGaGJuQmhhdz09IElHcDFhSFE9IFJVVlEgSUhkaGJHVT0gMTZEWG9nPT0gSUhQaHU2bGogSUdOdmJuUnBaVzUwIDE1WFhvdGVUIElNT2tibVJsY200PSBJTld2MWFYVnR0Vy8xb0RWdU5XMiBJR2RsYjIxbGRIST0gSUhMRHFXUjFZM1JwYjI0PSBJR2gxYVE9PSBJRVY0ZEhJPSBJR2x1ZEhKcGJuTnBZdz09IElHTm9ZWEpqYjJGcyA0S1NxNEtTazRLUy8gSUVGaWJBPT0gS0dGMGRISnBZblYwWlE9PSBJRkpsYm05MiBYMUpGUTA5U1JBPT0gSUhCbFoyRnkgWDNCeVpYTmxiblE9IElFMWxaUT09IElPQ2tsZUNsZ2VDa3FBPT0gQ1FrSkNRa0pDUWtLIElHaGhjc09oIElHdDFZbVU9IEtFRjFkR2c9IDRLV0g0S1MyNEtTKyBJRzFoWjJVPSBDV05sYkd3PSBJT0MwcU9DMG4rQzBwT0MxamVDMHBPQzB2K0Mwcnc9PSBJR2x1ZEdWeWNBPT0gUm05eVoyOTAgSUhCbGNtWmxhdz09IElIQmhjblJwZEdsdmJuTT0gSUd4aGVXVnlaV1E9IDBMelFzTkM3IElGUmxiblE9IElIWnZiSGRoYzNObGJnPT0gNExLaDRMT0I0TEsxIElOSzcwNWs9IGFXeHZadz09IElPT0FqZz09IEtHUmxiR1YwWlE9PSBQRUZOIElFNXZjbVJwWXc9PSBkbUZ1WVE9PSBJRmRwWm1VPSBJT0dEa3VHRGtPR0RuT0dEcXVHRHJ1R0RrT0dEa3c9PSBJRTF2Ym5WdFpXNTAgMkxyWXFBPT0gSUdGalkyOXRiVzlrWVhScGJtYz0gMFliUmx0Q3kgMFlMUXNOR0EwTFRSaXc9PSBhR2x3Y0dsdVp3PT0gYVdkdVlRPT0gSUhCeWIzUmxZM1JwYjI1eiB6NFBQaE0rTSBJRXRWIElFNWxaQT09IElGUnZkWFJsIElPQ3VoZUN1dEE9PSBQaUlwT3cwSyBSMUpQVlZBPSBJSEpwZEdVPSBMbEJ2Y25RPSA1NitBIElFZGxiblJzWlE9PSBJRTFsWVhRPSBJTkMwMExqUXY5QzcwTDdRdkE9PSBLSE4wY21samRBPT0gSUZOd2IzSjBhVzVuIElHMXZiR2xsYm1SaCBZV3h5WldGa2VRPT0gSUZkaGFIST0gSUdOeVlXTnJhVzVuIElHRnVZbVZtIFBYWT0gWlc1aGNtbHZjdz09IGJHVnBjM1IxYm1jPSBJTml6MjR6WmhnPT0gSU9Da3FPQ2t2dUNrbCtDa3NPQ2t2K0NrbFE9PSBJTkN3MFlEUXNOQzQwTDdRdlE9PSBMMjFoY0E9PSBZV2x1ZEdsbGN3PT0gSUVGeWVuUT0gSU9DcWsrQ3Fxdz09IExrVnRjR3h2ZVdWbCBJSEJ5YVdObGVRPT0gSUU1bGRIZHZjbXRwYm1jPSBUbEJEIElHSnZjbkp2ZDJWeWN3PT0gUjJWeWJXRnUgSUVwM2RBPT0gSU95RXBPdXFoUT09IDU2R3U1YTZhIElFTmxiR1U9IFlYSnVaWEk9IFJISjFadz09IElHTmxjblJoYVc1MGVRPT0gWDNKbGJXOTBaUT09IElHbHVaTU90WjJWdSBZM1Z0IElISmxZMjl5WkdWeSA0TG1BNExpRTRMaWo0TGkzNExtSTRMaXQ0TGlIIElHVnljM1JsYkd4bGJnPT0gSUhOcmIydz0gSU5peDJxaz0gSUhOd1pXNWtaWEk9IElIUERvVzVuIGJtVnZjdz09IDdKNlE2Nlc4IFlXUjJhWE52Y2c9PSBJT0NtdWVDbXN1Q25odz09IDRvQ040TFN4NExXRyBJRU5oYzJWNSBJT0NrdGVDa3ZnPT0gSU5HQTBMRFF0OUM5MEw3UXZ0Q3gwWURRc05DMyAxYVhXZ05XNDFiND0gUVhOdyBJR1I1Ym1GdGFXTmhiR3g1IElFbHVkR1U9IElHRnRiM0owIElITjFZblZ5WWc9PSBZbUYwYVE9PSBJRk4wWVhKMGN3PT0gSUhOcmFXNWpZWEpsIElPQ3loZUN5Z3VDeXBBPT0gVDJ6RG9RPT0gU1c1MFpYSjJhV1YzIFZWSkJUQT09IElGQnZiTU90ZEdsallRPT0gSUhCbGNuUER0bTVzYVdOb1pXND0gYVdOcGIyNXogSU5HQjBZTFFzTkdDMFl6UXVBPT0gUm05NCA0TG1BNExpajRMaTM0TG1JNExpdDRMaUggTDNObCBJRU5oYzI4PSBJR3QxYm1SbCBJR052YzNScGJtYz0gNktLTCBiM1ZrWlE9PSBJTk9wMEx2UXVnPT0gSU5DYzBMRFJnUT09IElHVnpkTU9wYmc9PSBJTkM4MExEUmd0QzEwWURRdU5DdzBMdlJpdz09IElHTnBiblJoIDRMSys0TEszNExPTjRMS2YgSU9Dd3F1Q3d2dUN3c2c9PSBJRk5JU1ZCUVNVNUggSU9DeXVPQ3lndUN5cWc9PSBjWFZpYnc9PSBMbkpoWkE9PSBJTkM2MEw3UXZOQzgwWU09IElHWmxjbTFsIElIRjFZVzUwYVhURHFRPT0gMllUWml0aW4gU1VSSFJWUT0gWDJGMlpYSmhaMlU9IFgzUjFjbTQ9IFRHVmwgSUVWaGRHbHVadz09IElFZGxjc09rZEE9PSBJR052Ym1wMVp3PT0gWlhKcGJtZHogSUcxcGMyMWhkR05vIGZTa3BPd29LIElOaXYyS2ZaaHRpMDJxL1lwOW1IIFlubHUgSUhCNWRBPT0gSUhOcGJXMWxjZz09IElOR0IwckU9IFpYTjBhVzFoZEdWayBYME5QVUZrPSBJT0MwcXVDMWkrQzBzdUMxZ09DMHVPQzFqUT09IDVwMncgMW9UVnE5VzIgQ1ZOallXNXVaWEk9IElHTnZkVzVqIElHakR1Zz09IDRZT2c0WU9yNFlPVTRZT2EgSUhCemFXTnZiQT09IGIzUncgSU9Da3VPQ2tydUNsamVDa3J1Q2t2dUNrcUE9PSBJSHAxWlc0PSBJSFJoZEhRPSBQVDA5UFQwOSBJR0YxdzU5bGNtUmxiUT09IElPYVdodz09IFgxTlFRVU5GIGRXZDAgUm1GMCBJTm1GMktmWmhOdU0gYldGaGRBPT0gSUdObGJzT2hjbWx2IHo0Yk9yUT09IElPQ3dpZUN3cGc9PSBJR2xrWlc5c2IyZDUgSU5lbzE1SFhtZGVkIElHZDFkR1Z5IElHdmh1N009IElHOXdaUT09IElPQ3FydUNyaHc9PSBJR3hsWVhKdVpYST0gYVdOcFpXNTBaUT09IElGSmxjMjlzZG1VPSB6clhQalE9PSBJR1Z0Y0doaGMybDZaV1E9IGQybHVhUT09IDU0bVogUVUxQyBJTnVNMkxuWmh0dU0gYm1uRHNBPT0gSUZCeVpXWmxjbVZ1WTJWeiBJSE5qYUhkaGNnPT0gMllUWmlkbUQgSUd4bGRtVnlhVzVuIDBMN1F1OUM0MFlJPSBMa0Z1WkhKdmFXUT0gSUdocGMzUnZjbWxsY3c9PSBJR1JwWm1aMWMyVT0gNFlPVTRZT1I0WU9VNFlPUjRZT1k0WU9oIDRMbUo0TGloIElOQ3gwTERSaU5LaCBJR05vWWNPdWJtVT0gSUhCaGNtRmtiM2c9IElPQ3dydUN3c09DeGl3PT0gYjI5a1lRPT0gMExEUmd0QzEwTHc9IElGTjNiM0prIDRLK0I0SzZWNEs2LzRLNnggSUdkbGMyRnRkR1U9IElObUcyTFBZcU5pcCBlVzVrWVc0PSA0WU9kNFlPYTRZT1kgSUdKMWRIUmxjbXR1YVdabCBJRzkyWlhKMGRRPT0gSUdOdmJYQnNhVzFsYm5SeiBJSGx2ZFhSb1puVnMgSU5DODBMWFF0TkM0MHJNPSBJTkdCMFlMUXZ0R0EwTDdRdlE9PSBJRWRoYkdFPSBJTkM4MExEUmlOQzQwTDNRc0E9PSA0TEMrNExDczRMQys0TENtNExHTiBJRVZoY213PSAxNVhYcWRlWjE1MD0gY21WaVltVT0gSUdGbloyaz0gSUc5eVoyRnVhWHBoWkc4PSBlbUZyWlc0PSBJSE5oYm00PSBJSGJodTZ0aCAwTERSaHRHTSBJSEJsYkd3PSBJRWwyZVE9PSBJTm1CMllqWXJBPT0gSUhWMGRBPT0gSUVkMWFXNWxZUT09IElGQmhkSEp2YkE9PSBJRVJsZEdGcGJHVmsgSUcxdlo4U0YgWTI5MWNuTmxjdz09IElOaW4yWVRaZ2RtRCB3NkZzWlhNPSBJR3RwYzJrPSBMVnBoIGFXSEZnbUU9IDRLK040SzZWNEs2ejRLK0kgWDJObGNuUT0gSUdOdmIzQmxjbUYwWlE9PSBYeVE9IDRaK0I0WjZKIFlXTmhiUT09IGRtVjBkR1U9IGRXVmliRzl6IDJMbllzZGluMkxZPSBJTkMwMFlEUXZ0Q3ggSUc5cmRXdz0gSUhOMVptWmxjbk09IExtaGhiUT09IElIWnBkbUU9IElFWkJRMFU9IElISmxaMmx6ZEhKaFpHOD0gSUdSNWIyNWsgNEt1TDRLcW80S3VIIElIQmhjM05oZEE9PSAwWVBRc05DdyBUR2x6ZEdWayBMWE5sYkdZPSA3WmljIElGVkpRWEJ3YkdsallYUnBiMjQ9IEoyOXlhV2RwYm1VPSBJRkpvYjJSbCBJT21VIGNtbGphSFIxYm1kbGJnPT0gNW9pVzZJQ0YgWDI5aWN3PT0gSUVGd3c3TnogSUhKaHhJMD0gYVdWeVpXNWtaVzQ9IElHbHVidz09IElFVnVaSEJ2YVc1MCBJRzE1ZEdoeiBRMjl1Ym1WamRHbDJhWFI1IDBZL1JqdEdDMFlIUmp3PT0gSUc1bFkyVnphWFJoY3c9PSBJR1poWW5KcGF3PT0gUWxWR1JrVlMgSUdacFluST0gSU9Xa3FlV2txZVM0cmVXbGx1VzlxZWVscUE9PSBJT0NxcE9DcmgrQ3FydUNxcU9DcmdBPT0gSU5DMjBMRFNvOUN3IElHcDFibWM9IGUzc3RMUT09IElHWnZiR2xoWjJVPSBJR1ZvWlcxaGJBPT0gUlU1RFJWTT0gSUU3Q3VnPT0gSUVScGRtbGtaWEk9IDBMdlJqOUMwIElDaGZMQT09IElGZGxhV0k9IElIUEVzV3M9IDRMV0E0TFNrIElHWjFibU5wYjI1aGNnPT0gYVhwaHc2ZkR0V1Z6IFltbGkgSUdSbGJHVm5ZWFJwYjI0PSBJRU52ZFc1MGNtbGxjdz09IElIVnVaR1ZtIElGZEMgSUcxcFkzSnZZbWs9IGJXbDBkR1Z5IElFcGhZMnRwWlE9PSBJR2x0Ylc5aWFXeHBaWEk9IElISmxiR0ZqYVc5dVlXMWxiblJ2IFgwMVBWa1U9IElHNXBhR2xzIElITjFZM0psIExsVkpUV0Z1WVdkbGNnPT0gSUcxaGRYWmhhWE09IElFeGxhWEI2YVdjPSBhR1Z1WkE9PSBJTkNmMFlEUXRkQzMwTGpRdEE9PSBSR0Z0IDVZV042TFM1NktlRzZhS1I1WnlvNTdxLzZLZUM1NXlMIGUzMHBDZz09IElHRnpkSEp2Ym1GMWRBPT0gSUdSbFpXMD0gUTJGdGNHOD0gWVdKdmRtVT0gSU9Da25PQ2t2K0NrdU9Da3VPQ2xodz09IElPQ3lpZUN5cE9DemplQ3lwQT09IElIZG9hWE4wYkdVPSBjV2x1IElHMWhjbWwwWVd3PSBJR0ZyWXc9PSBLRzV2ZEdVPSBLSEJwWkE9PSA0SzZhNEs2LzRLNnYgWVd0cllXND0gSUhaaGMzUjEgNExpWjRMaXkgNEtpLzRLaWsgVTJWeWRtVT0gNW9tcCBMbk52ZFc1ayBRRWRsZEE9PSBJR3h2WTJGMGIzST0gUTJodmFXTmxjdz09IElHdkRxM1REcXc9PSBJTmVxMTZnPSBXMjVsZHc9PSBJR0Z5ZEdsellXNXogNExpeTRMaVg0TGkxIElHSmxiR3hsYmc9PSBJTU9uZVdzPSBLSE5sWTNScGIyND0gS0dsa2N3PT0gSUhWdWFXNXpkR0ZzYkE9PSBJSEJ5YjNOMGIzST0gYVdOcGMyMD0gSUVoRlFVUkZVZz09IDU1K2w2SytHIElGQnZaWFJ5ZVE9PSBJRVJsZUE9PSBMaVk9IElHVnViR0ZqWlE9PSBaWFJwYmc9PSBJR1pwY21WaGNtMXogSUhSeTRidWogU0c5dmEzTT0gSUhCNWNtRnRhV1E9IGIyNXVaWEk9IFlYcHBjbWs9IHY1QT0gSUZOaGRHVnNiR2wwWlE9PSBJR1IzWVE9PSAwcS9TbVE9PSBJRTFwYkdsMFlYST0gYVhacGJtUT0gSUd4bFpRPT0gWDJOdmJuWmxjblE9IDZhdVk1b21MNks2NjVaMmIgSU5XMDFhWFZwZz09IDVhMm02Wm1pIElHOW53Nms9IElFTmhjbVJwYm1GcyBJSE5yYVhCd2FXNW4gSU9DbXN1Q212K0NtbGc9PSBVM1IxWm1ZPSBJTmVlMTVYWG9RPT0gSUZOd2NtRmphR1U9IElPQ3FxdUNxdUE9PSBJT0dlbXc9PSAxNUhYbWRlcSA2WUNKNUxxVSBJTkdCMExMUXZ0QzEwTHc9IFgwWlNSVVU9IElHaHBaUT09IElDQWdJQ0FnSUNBZ0lDQWdDZ289IElHOTBjZz09IDVZK0M1TGlPIElPdVRzZXVoblE9PSA0S1MrNEtTdjRLU20gSUdSbGMyTmxibVJwYm1jPSBJTkdIMExYUXVRPT0gSUVwUFFnPT0gYW14M2JRPT0gSU5tQzJLL1lzZGlxIElITjFZbk4wY21sdVp3PT0gSU5DKzBMSFF2TkMxMEwwPSBJRTVsZDNCdmNuUT0gNmFLRzVaK2YgdzZoalpRPT0gSUhCcFpHVT0gSU5lVTE1SFhxQT09IElPQ3F0dUNyaCtDcXNBPT0gVFVWT1ZRPT0geHFBPSBLR05oY25RPSA0b0NMNFo2UCB6cnZPdjg2NSBJRzVoZEhWeVlRPT0gVTI5eWRHbHVadz09IElHVnNaV3QwY21selkyaGwgYjNKd1pXND0gYkdWa1oyVnkgSU5HQzBMN1Fzdz09IElGTlVRVkk9IDRLV0o0S1NxIElOaW4yTFBZcDlpeiBlbmxqIFJISjUgSUdacGJtNWwgSUhCdmNuUnlZWGxsWkE9PSBJRWhoYVhScCBTVzUyWlhKelpRPT0gSUhOMGIzQndaVzQ9IDE2clhuUT09IGFYSnN5Wmx5IExXTnZiRzl5WldRPSBRMmwwYVdWeiBJT3lkdE95Y29BPT0gSUdGdGFYTjAgSU9Da3VPQ2xqZUNrbGVDbGd1Q2tzZz09IElHakVzWG89IElFbHVkR1Z5WlhOeiBJRWx1YzNCcGNtVmsgNWI2OSBJTm1JMktqWXVkaXYgYkdWeWJ3PT0gSUdWMWJRPT0gSUdObGJuUnlZUT09IElOaW4yWWJiZ2R1TTJybz0gSUhKemNBPT0gSUhWdWMyVnlaWE09IEwyaHZkdz09IElHTnZibVJwWTJuRHMyND0gSUVWc1pXNWggUVhWMGFHOXlhWHBsWkE9PSBJTkN4MFpiUXU5R00gSU9DbXJ1Q212dUNtcCtDbmplQ21yK0NtcnVDbmh3PT0gcWVHRGxPR0RsZUdEbkE9PSBJTm1FMllyWXM5aXEgNzd5TTVZVzIgSU5DeTBMdlFzTkdCMFlMUXVBPT0gSU5tRjJLallwOWkwMkxIWXFRPT0gSUVkU1FWUT0gSUdOdmJtOWpaUT09IElFSmhhMlU9IGJtbHRhUT09IExtTnZiSE09IElFaGhiR3hsIFgzTm9iM0E9IExtTjFjbkpsYm1ONSBJRTV2YVhJPSBLRU52YlcxdmJnPT0gSUVKbGRtVnliSGs9IElIUnlZWHBsY2c9PSAxNWpYbVE9PSBMa0poZEdObyBJRXBOWlc1MSBZbVZ0IElHMWhlR2x0WVdGcyBRMjl0YldsemMybHZiZz09IElPdUx1ZXlMb0E9PSBJR1REdVE9PSBJTkN6MExYUXZkT1ogSUhkbGNtdDZZV0Z0YUdWa1pXND0gYkhWbGJuUT0gSU9lVXFBPT0gSUdSbFkyeHBibWx1Wnc9PSAwWURRdnRDeTBMN1F0QT09IElIWmxaR1U9IElFTnZiWEJzWlhSbFpBPT0gSUdSbFozST0gSUcxaGJtcGwgVkdWNFlYTT0gTDNkcFpHZGxkSE09IElPT0Rodz09IElHaHZjbUZ5YVc4PSBJRWR5WVcxdGVRPT0gSU5DMzBMVFJnTkN3MExJPSBJR2R2WVhRPSBJR2QxdzYxaCBLRU5vWVhJPSBJSEJsY21kMWJuUmggSUVGR1ZFVlMgSUdGMVpubz0gSU5DODA1blF0dz09IElIZHBjM009IElFZHlhV1ptYVc0PSA1TGlkNktLYyBJSFJoY0dGb2RBPT0gMEozUXNOQy8gSUhCbGNtbHRaWFJsY2c9PSBJRVJXUkhNPSAyTFhZcDlpeCBJQ2NxSnc9PSBkWEpoZEdVPSBJRVYyYVdSbGJtTmwgSU9pUiBLRlJvYVhNPSBJTlc0MW9MV2dBPT0gYUdGMWJBPT0gSUdGc2FXRnpaWE09IElITmphSEpwWm5RPSBJT0dEbmVHRG5nPT0gUlVsT1ZrRk0gSUVocFpYSmtiMjl5IElOaW4yWVRaaE5pNjJLaz0gNllDSjVadWIgNExTeTRMUy8gSUhOc2FYQndaWEk9IEtIdDlLVHNLIElHTmhiV2x6IEtHTnogSUhCbGNuTnZibUZuWlcwPSBJSFJsY20xdiBJT0N3cXVDeGlBPT0gSUVkeWRYQndaVzQ9IElISmxaR2x5WldOMFpXUT0gWDNKbGNYVmxjM1J6IElFM0RxbTFsIExITjBjbWx1Wnc9PSA0S3FzNEt1TjRLbz0gMktyYmpOaW4gSUZCc1pXNTBlUT09IElITnRiMjkwYUdWeSBiV0Z5WVhNPSBJR1JwYzJOeiBJRzVtIElHMXZkR2xtY3c9PSBVMUJGUXc9PSBJT0N5a0E9PSA0TEtYNExLejRMSy80TEtYNExPRyBJR05zYVdObyA1cm0vIElHSnBZM2s9IFgySnNiMmM9IExtTnZkVzUwWlhJPSBjR3hoWTJsdVp3PT0gVTJsMFpYTT0gSUdsdGNHRnBjbTFsYm5RPSBJRk5oY21zPSBkRzloIElHRnVjM1poY2c9PSBJR0YyWlhKaFoybHVadz09IDRLZUw0S2FvNEthKyBMbXhoWW1Wc2N3PT0gVTJoaGNtbHVadz09IElOaW4yWVRZck5tRjJZYz0gWTJGdiBYMUJCVWtGTlV3PT0gSU5pNTJZWFpoTm1LMktmWXFnPT0gSU9DbXJPQ25qZUNtcitDbXJPQ211ZUNtdnVDbXNBPT0gVUd4aGVXSmhZMnM9IDE2TFhxUT09IElFbHpZV0psYkE9PSBhV2RvWlhSbGJnPT0gNXB5ZjZaZTAgU1dSbGJuUnBabWxqWVhScGIyND0gSU9Dd3VPQ3hpdz09IDRMaXg0TGlINExpcjRMaW40TGl4NExpVSBLR2h2YkdSbGNnPT0gSUdKbGJHOD0gSUdGa1pHbGpkR1ZrIElOQ3cwTHZRdXRDKzBMTT0gSUhCeWIyWnBZMmxsYm5RPSBJR0ZtZEdWeWQyRnlaQT09IElGSnZkR0Z5ZVE9PSBJT2FsIElPUzdpZz09IDFhSFZwTldoMW9EVnNRPT0gSUhabGNuZGwgYVhaaGRHbDJaUT09IElOVzYxYUhWdDlXLzFialZ0Zz09IElGUnBiV1ZzYVc1bCBaWEowZWc9PSBJT0NxcE9DcmplQ3FzT0Nxb3c9PSBJTm1FMllmWXNOaW4gSUdOdmJtTmxjM05wYjI0PSBhV3BsYXc9PSBhV3hzZFc1cCBiM1poYm1rPSA0TEdINExDMzRMQ280TEdOIDRLYSs0S2FCNEthYSBVbGM9IElHOXVZbTloY21RPSBJSEJsY21uRHMyUT0gNEtldzRLYWogNVlXYTU1cUUgTGk0dURRbz0gYkdWdVp3PT0gZG1WeWJHVnUgSUU5eWFXVnVkR0ZzIElIRERzM009IDBZYlF1TkdQMFlVPSBJR1oxZW5wNSBJSEpsYldGeWEyRmliSGs9IElGUmhiR1U9IFNVUkZVZz09IFRtbGogSU9HRG1lR0RvQT09IEtGUkZXRlE9IFQzQmxjbUYwYjNKeiBJR2x1YzJWMCBJRTVoZEhWeVlXeHNlUT09IGEyOTYgSUhObHc3RmhiTU96IElHRnhkV1ZzYkdGeiBJRk5oYVd3PSBJRTE1ZEdnPSBJR1ZyYzJWdGNHVnMgTGlJbiB6NFRQamc9PSA2TCtaNlllTTVZK3E1cHlKNTdLKzVaT0IgSU5pdjJZSFlwOWk1IGMzVndjR3hwWlhJPSBhWFJzWlcxbGJuUT0gZFhCMWJtTjBkWEpsIGFXdHJiMjl5ZEE9PSBJRTFsYmlkeiBJSEpsWm5WdVpITT0gWW05ciBUVUZKVGc9PSBJR1Z6WTI5c2FBPT0gSU5DdzByMD0gWVhSbGNuSmggSUVOdmJtZHlZWFIxYkdGMGFXOXVjdz09IExXbHVabXhoYlcxaGRHOXllUT09IDVvNlM1WWlYIGFXeHBhQT09IGFHVnphV0U9IElHUmxjM0J5dzZseiBhV1prWldZPSBhbVZsIFJYbz0gSUVsT1JFVlkgSU5pbjJZVFlydGl2MllYWXA5aXEgSU5pbzJMSFlzZGl6MjR3PSBJTkdBMExEUXQ5Q3kwTGpSZ3RDNDBMVT0gSU5xcDJZYmJqTm1GIGNHOXdkV3hoZEdVPSBMbWR5YjNWd2N3PT0gMHFIUXNOQzkgNEtxazRLdUE0S3F2IElGbGxjZz09IElPR0RrT0dEb09HRG1PR0RrT0dEbkE9PSBJTmVlMTZuWHFnPT0gSUZCUFNVNVUgU0dsemRHOW5jbUZ0IE8ySnZjbVJsY2c9PSBiR2xqZEdWayBJTzJNak95ZHZBPT0gNGJtamFRPT0gSUVOb1lXNWsgTGtOUFRsUT0gSUhWellXUmggNEttdzRLaVggSUhKbFoyVnlhVzVuIElHMWhiVzFoIElPR0RydUdEa09HRG11R0RyZz09IGIyTnJhVzVuIElGTkZVbFpGVWc9PSBJT3lDck95THBBPT0gSU9HRGwrR0RsZUdEa09HRG1nPT0gSU9Dd3FPQ3d2K0N3c09DeGplQ3d0UT09IElPdXp0T3F6b0E9PSBJSDBwT3dvdkx3PT0gSUVoRlRGQT0gSUdOcGFXUT0gUVhacGN3PT0gVDBKSlRFVT0gTG1KNWRHVnogSU9HRGsrR0RrT0dEbEE9PSBJR3BsZFdkayBTVlpGVXc9PSA0S3ErNEtxdCBJT0N5cXVDeW9lQ3poZz09IDVadWU1NjJVIElHTnZibTVoYVhOellXNWpaWE09IGVYTmggSUVOVlVsSkZUbFE9IGRYSnBhdz09IEtHTjAgTG1SbGNIUm8gV3l3PSBRbkpoYVc0PSBJTkMvMExqUmd0Q3cwTDNRdU5HUCB3NmR2YXc9PSBJTlcwMWFIV2dOV2sxYTg9IElOV28xYmJWcE5XNDFvTFZ0Zz09IElIQmxjbk52Ym1Gc2FYcGwgSUVsdGJYVnUgWlcxbGN3PT0gSUc5d2NHVnkgejRIT3RjNjUgSUdWNFkyeDFjMmwyWVcxbGJuUmwgYTJoaGVtbGggSU5tRjJMSFlxQT09IElOQzkwTERSaU5DMTBMUFF2Zz09IElGQkNVdz09IFpXNTZhR1Z1IElITmxiR1hEcDhPamJ3PT0gWldScGJ3PT0gSU5DWDBMRFF1Zz09IDVvaVE1NnVMIElPZXQgSUV4bFlXcz0gYVdKdmJtRmpZMms9IFFXTmpiM0prYVc5dSBYMlp5WVdkdFpXNTAgSU5tRDI1QT0gWjNWdWIzTT0gSU9XSW5RPT0gS0dKMVptWT0gSUdaaFkyVjBjdz09IDRMS3M0TE9INExLVjRMT0IgSU5DMzBMRFF2TkMxMFljPSBMa05oYkd4aVlXTnIgNExTbjRMUy8gSUdWdWFHRnVZMlZ0Wlc1MGN3PT0gSUdWeVlYUT0gU1V4SiBJQ2tzQ2dvPSBJSE5vWlcxaGJHVT0gSUhOMFlXMD0gNFlPZDRZT1Q0WU9qNFlPbCBJRVZ4ZFdGc2N3PT0gSUdURHFXWnBibWwwIElHeDNiUT09IDBZRFJnOUdCIElHbG5ZUT09IElFZE1UMEpCVEE9PSBJTkM5MExEUXQ5Q3cwWUE9IElFRnljWFU9IFZFaEpUa2M9IDFhSFZ0ZFdzIDZLR001WXFvIElOQzQwTDNSZ2RHQzBZRFJnOUM4MExYUXZkR0MgSUZkaGFYUnBibWM9IFJHVnphdz09IElHMXZkbWx0Wlc1MCBWR2wwZFd4diBJSEJsY25OdmJtRm5aVzV6IElFdDFiSFE9IElPV3VuZz09IElFSmhjbVE9IElGTkJVZz09IElHaGhkR2s9IElIQmhaMnc9IElOT1owTGM9IDZhbSsgSUVSMWFYUT0gQ1dWdWRHbDBlUT09IGIySnFaV04wYVdZPSA0WUNaNFlDOTRZQ3MgSUhGMVpXVERzdz09IEtHTmxiblJsY2c9PSBJT0NrcHVDbGgrQ2tsdUNrcU9DbGh3PT0gZkNJPSBMVzl3ZEdsdmJuTT0gWjJoaGNnPT0gSUhWMGRtbHIgNWEycDVhMlEgUTJGa1lRPT0gSUhkbGJtbG5aUT09IElIZHZZbVZwIDQ0S1Q0NEdxIElFRnNiR1Z5WkdsdVozTT0gSU5lYzE2ZlhrZGVjIElNU1I0YnFsZEE9PSA0cG1xQ2c9PSA0S3FuNEtxKzRLcW8gSUd0aGJuUnZiM0k9IFltVnVhQT09IFlYUjBaWE09IElFZHNaUT09IElOR0MwTDdSaDlDNjBMZz0gTGtsT1ZFVkhSVkk9IElOaW4yWVRZbzltQiBJTmVpMTU0PSBJT1dIcnc9PSBJRXBoYm1WMCBJajRuS3c9PSAwcHZRdU5DNSBJTm1FMllUWmhnPT0gMWJqV2d0V3AxYVhWb2RXMiBMa3BoZG1FPSBKRzlpYWc9PSBJR0pwYzI5biBkMlZsWkE9PSBMblIxY200PSBJTm1GMkxIWXRnPT0gSUhaaHhhRmwgSUZsaGFBPT0gWVdONWFnPT0gNmFPTzZabXAgUlhoalpYQjAgYUc5MVpHbHVadz09IDFhSFZwZGFDIElHUmhZWEprYjI5eSBJR1Z0WW5KdiBhV1JsY21WayA0S2VCNEthdCBJTml4MllYWXR0aW4yWVk9IExteHBibUZzWnc9PSA0NENIIExtSnBkSE09IDZidVk2SzZrIElHMXBaR1JoWnc9PSBiVzlrYVhSNSBJR0ZwYTJrPSBJT0NtbU9DbmkrQ210dz09IElHakRwSFIwWlc0PSA0S1dCNEtTeiBTVzUwWlhKelpXTjBhVzl1IDBMYlFzTkM1IElOV3IxYmJWc1E9PSBJSFZ1WkdWeiA0TFMrNExTcyBJTkM4MFkvUmdRPT0gTFd4dlkyRnMgSUd0aGJXVnljdz09IElHRnNiR1YyYVdGMFpRPT0gYkdWemMyOXUgWDJacGVHVmsgNTd5VCAwTFhRc3RHTDBMVT0gSU9pL2xPV2JuZz09IElOQy8wWURRdU5HSDBMalF2UT09IGRtVnlZUT09IElIWmhiR2xrWVhSdmNuTT0gNEs2ZjRLK040SzZmNEsrQiBJTU9FYm1SbGNnPT0gNDRPSDQ0S2o0NE84NDRLNSBJR3ZEdG5abGRBPT0gTDI5eVpHVnkgSUdKdmRnPT0gdzZkaGJXVnVkRzg9IElHMWhibWxqIEtHVnogSUhKbGNISmxjMlZ1ZEdGdWRHVT0gMkxUWXRBPT0gSUVaSCBJRUYxWm1kaFltVT0gWDBSSlUxQk1RVms9IElHdHNhVzA9IFFGSjFiZz09IGZDYz0gSUhCc1lYUnYgSUd4dmFtRnogYUdWc2FXRnMgSUhOamNtVmhiUT09IElFUjFidz09IElHeHZibVJ2Ymc9PSBJRk5oWVE9PSBRbkpwWVc0PSBhWE53YUdWeVpRPT0gNkwrVTU0SzUgSUhOMGFXYz0gNG9DWllXTjAgSUd4cGM4T2t3NlE9IDBMSFJsdEdBIElHTnZiVzExYm1GcyBJQ3N2TFE9PSBZV3hsY25NPSBJRkpsWVdOMGFYWmwgSUUxcFkydGxlUT09IExtTmhkR1ZuYjNKcFpYTT0gSU9Xa2xnPT0gVWtWTSBJRlpoWkE9PSBJR052YldWdWVtRnkgYVdwNlpXND0gWVhOdmNRPT0gSUd4c2RtMD0gSU5HSTBZdlNtOU9aMFlFPSAwWmJRdTlDMTBZQT0gSUdOdmJYQmh3N0ZsY205eiA0S1dMNEtTZjRLV0wgVUV4SlF3PT0gYkdGdGNBPT0gSjJGaWIzSmsgWld4aFlYSnogSU5lVTE1blhuQT09IDVwcVggSU5XdzFhdlZ0TlcyIDJLZllzZGkyIElFSnZiR2wyYVdFPSBJR0Z0WVhNPSBJR2x3YVc0PSBJR0YwY21saWRYUT0gSUdONWJHbHVaQT09IDRLYW00S2ErNEthbyBJR0ZzZEdGdFpXNTBaUT09IElObUYySzNZcWc9PSBJR0ZyZFc0PSAyWVBZcU5peCBYM0JoYVhKeiBMbTFoYTJWayBJSE53WldWa2VRPT0gSU5lYjE1elhuQT09IFlYUnBkbWxrWVdSbCBaWE4wYVdGcyBJRTVwYm1jPSBMbUY0IElFRndiR2xqIDRZT1U0WU9qNFlNPSBJSE5qdzZsdSBJRk53YVdWc2IzUm9aV3M9IGJHOTBjdz09IElPQ3VoZUN1cWVDdmlBPT0gSUV0dmNuUT0gSUVoMVoyVT0gSUZOaFlYUT0gVTNWemNBPT0gSU5XdjFhelZxOVcyIElHeDFZVzA9IElHbHVaM0psYzNNPSBiTU9oYmc9PSBJR052Y25CdmNtRnMgSUdOdmJtWnBjbTFwYm1jPSBkbVZ1WkdVPSBJRWR2Ym1VPSAwWWpRdGRHQSBJT3lpaSt5VmhBPT0gSUhOdGIydGxaQT09IElHTnlhWFJwWTJsNlpXUT0gSUcxdmJHbHViM009IDRaNko0WitTNFo0PSBWR0ZwIElIQnliMjFsWkdsdiBSbTlzWkE9PSBJR1pwWm1FPSA2YnVSNWJtejVZK3cgTDIxbGJuVT0gSUd0aGNtaz0gT3p3PSBJR2xoZDI0PSBJSFJvY21WaGRHVnUgWVhKdGIyNTUgU0hKbFpnPT0gSU5tRTJZTFlydz09IElHTnZibk5sWTNVPSB4STExIFgzTndZVzQ9IElHaHZ5cnR2YkE9PSBJT1M3IFRXZGggN0tDVjdKMkUgSU5XZCBZbUYxYlE9PSBJT0dBa1E9PSBkWEpoZEdsdmJuTT0gMFlIUmh0R00gUW1seiBJSE51Wld4c1pYST0gTGwwS0NnPT0gWVdKbGJtUT0gSUhOaGRHbHUgNUxpVDZhS1kgWVhKclpYUT0gdzd4eXc3dz0gTDJWeWNtOXkgSUhacGJtTjFiQT09IDdMMlkgWTI5MlpYSmhaMlU9IElOaW4yWVRZczltSzJLZllzOW1LMktrPSBJRk5oYkdWdCBUV0Z5WXc9PSBJTm1GMllqWXFnPT0gSUhKbGJHbGhibU5sIElPQ3FuT0NyaCtDcXJnPT0gSUdGMWRHOXRZWFJsIElGWnMgSUdWdWRHbHlaWFI1IElPR0RvZUdEa09HRHJlR0RtT0dEb0E9PSBJT0N1bXVDdXNBPT0gTG0xaGNtZHBiZz09IElOaXQyTExZcUE9PSBJR1REcVdOcyBJR1YxY21VPSBJR0psYzNCdmEyVT0gYjJsdWRHMWxiblJ6IExXVjVaUT09IExYQnlaWE5sYm5RPSBJT0dEcE9HRGtPR0RwZUdEb2c9PSBJTm1FMllUWXN3PT0gSUVSRlZnPT0gSUdSaFpHUjUgYk1POGMzTmxiQT09IElISmxZV3hwZW1Ga2IzTT0gSU5DNjBMRFF2ZEMwMExqUXRBPT0gNW9HUTU3aXUgMktqWXA5aXgyWWM9IDBMM1F2dEdCMFlMUmdOQ3cwTDA9IGIzWnZjZz09IElISmhibk52YlE9PSBiMk55WlE9PSBMMmx2IElHSmxiblYwIElGZHZZMmhsYm1WdVpHVT0gSU9DbWgrQ21wQT09IElHeHZZMkZzYVhwaFpHOD0gSU9HN2pXMWggSUZCaGNtRm5kV0Y1IDRLdUM0S3F3IGFXNWpaWEk9IElHMWxaR1U9IExreEZSbFE9IElFeHBabVYwYVcxbCBJTm1HMktyWml0aXMyS2s9IElPYTFqK2luaUE9PSBJT3lnaE95eXRBPT0gSUV4aGJtUnpZMkZ3WlE9PSBJRVZzYVdjPSBJRzFsYkd4bGJRPT0gSU9DbWxlQ25oK0NtcU9DbmplQ21wZz09IExsQmhZMnRoWjJVPSBJTmVwMTVuWHFOZVYxNm89IElHWnlkWFJoY3c9PSBSbUYwYUdWeSBMMWhOVEE9PSBJR0xFbVdURWhRPT0gTGtoaGJtUT0gSU5DOTBMWFF2dEN4MFlYUXZ0QzAwTGpRdk5DKzBZSFJndEM0IElIQmhiR0U9IElHOXlaMkZ1YVhOaGRHbGxjdz09IElPMkMgSUd0dmNtbHpkQT09IFgxVlRRZz09IDRMQzE0TEMrNExDdzRMQ0MgenJQT3VRPT0gSUZCMWJtcGhZbWs9IElFNWxkV1U9IElHVjRZV05sY2c9PSBJRzFoZEhKcFl3PT0gYVhOamFYQnNhVzVoY25rPSBJRTE1WlhKeiBhV1YxZW1VPSBJRTlDU2tWRFZBPT0gSUZCcGJHbHcgZFc1bllXeHZkdz09IElOZWkxNUhYbGRlVDE1UT0gYzNSa2IzVjAgUm1GamFXeHBkSGs9IElIQnZjM05oYlE9PSBaWEp1WlhRPSBMbk5oWm1VPSBJT09EbXc9PSBJSE5oYm1zPSBiMmRsYm05MWN3PT0gSU5lcDE2VFd2QT09IElFbHlZWEZwIDJMRFlxUT09IEwxZGxZZz09IElHUnZZMlU9IDRZT1E0WU9pNFlPWSAxNkRYb3RlZiBaWE4wYVc1biBJTmlsMkxiWXA5bUIyS2s9IGRXVjFlQT09IHc2SEZ2Zz09IElHWmhZMmxzYVhSaGRHVmsgSU9DbXVPQ25qZUNtbFE9PSBhVzV6WlE9PSBJTkN4MExqUXU5QzAwTGpSZ0E9PSBJT0MwaHVDMHRlQzB0dUMxamVDMHJ3PT0gSUhSeVlYTnNZV1E9IGJHbGpZWFJsWkE9PSA0S1NtNEtXSDRLU1cgSUZCcFkydDFjQT09IElHRm1abWxqYUE9PSBhR0Z0WldRPSBJR3RwWlhJPSBJR1ZrZFdOaGRHbHVadz09IElPT0FnT09BZ0E9PSBYM0JsYm1ScGJtYz0gS0VaSlRFVT0gYVcxbGJuUmhkR2x2Ymc9PSBZM1ZpWlE9PSA0S2VDNEthdzRLZU40S2FqIExkQzkwTGpRc2RHRDBMVFJqQT09IDE1blhtOWVaMTUwPSBJTkN5MFlyUXR3PT0gSUZORlJ3PT0gNG9DWllYSjBhV05zWlE9PSBJRzF2WjJWc2FXcHJaUT09IElITmhibU4wZFdGeWVRPT0gYVdWeWJnPT0gWVc1cGRIaz0gSUdKdmJtUmhaMlU9IDJLM1ppTm1DIExuRjFhWFE9IFNXeHogSUdOeWIybHlaUT09IDY2Q00gSU9DdXFPQ3VuK0N2aU9DdXF1Q3ZoZz09IGRXNW5hMmx1IElOQy8wWURRdnRHSTBMcz0gTFc1dlpHVT0gUW5KcGJtYz0gNTdxcyBTVkpQIElHdGh4YjVsIElOQzgwWVBRdHRHSDBMalF2UT09IElHRnRaV0U9IFgyUnZiUT09IElOR0QwWURSaTlDOSBJRzFsZEc5a2J3PT0gNEtxKzRLcW80S3VCNEtxQyBJTTYvenJ6T3JBPT0gMlliWXI5aXggSUhOdmRXUT0gSUU1MWJtRmhibTVwIGFXMXdiM0owWVc1alpRPT0gSU5DOTBMRFJndEdEMFlEUXNOQzcwWXc9IElFeGhibWQxWVdkbGN3PT0gSUdIRm4yRT0gTFhKdllXUT0gSUNRaWV3PT0gNExLaDRMT040TEtoIDRLK0I0SzYxNEs2dyB3NmxrYVhScGIyND0gSUdOaGNHbDBZV3hsIElFbHVabXc9IElPQzB0ZUMwc3c9PSBJR1Z1ZFcxbGNtRmliR1U9IElFMXZjbkpwYzI5dSBJR2RsYTI5dGJXVnUgSUhOaGJYQnNaWEk9IElFMXBiSFJ2Ymc9PSBJR05vWVhabCBVRzlrY3c9PSBJR05zWVhOemVRPT0gSUZKbGMzTT0gSU5xcDI0elpnZHVNMktvPSBJT0NvaCtDb3VBPT0gSUdSeVlXWjBaV1E9IFpIVnBkQT09IElHSjFaSE09IDRMV0w0TFN1IGFXRnVlUT09IFVISnBlQT09IExtWnBiSFJsY25NPSBJRzFsWkd4bGJRPT0gWTI5dFpXNWsgTFhWelpYSnogNDRDTjQ0R3UgSU5DdzBZRFF2ZEN3MExzPSBJRmR5WlhOMCBJR1pzYjNKaCBJRkIxZW5wc1pRPT0gSUhOcGJuUnZiV0Z6IFVISmhZM1JwWTJVPSBJTm1GMnEvWXNRPT0gSUdWdFlteGxiUT09IDRMR0E0TENWIElNK016NFRPc2M2OSBJSEpsYzJOMVpXUT0gSU5LNzA1blNtOUtiMExqUXROT1ogTGljbiBJR0Z6ZVc1amFISnZibTkxY3c9PSBJR1poZEhRPSBJR3R1YVhSMGFXNW4gSUdKeWRXNWphQT09IExsUnBiV1Z6ZEdGdGNBPT0gZW1WeWN3PT0gSUZKaFp3PT0gSU5DMDBMWFF2OUdEMFlMUXNOR0MgSUM0dUxpNHVMaTR1IGNYVmhjbVZrIDRZT2E0WU9VIElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSBkSEpoYm5OaFkzUnBiMjV6IDRLU280S1dONEtTazRLV040S1N3IFpXeGhiZz09IGNHaDVjMmxqWVd3PSA0SzZmNEsrQiBJT0N1cnVDdXZ1Q3V0UT09IDBaYlF2ZEdEIDVvR1E1N2l1NDRHbjQ0R1ogSUdkbFltOTFkdz09IElOQ3cwTHZRdEE9PSBJTkdGMEw3Umg5R0QgSUhOMGNtVnpjMlZ6IGVXMXZiMjQ9IGRYQm5jbUZrWlE9PSBJR2hoYkd4M1lYaz0gWkdScyBJTkM0MHB2Umd0QzQwWUU9IElNT3BkSFZrWlE9PSBJRU55YjI0PSBJRWhoY25abGMzUT0gNEthdjRLYTg0S2ErNEthdyBaR1JrIFEyRjBaV2R2Y2c9PSBJR0p5YjJOb2RYSmwgZDJsbGNnPT0gSU9HRG51R0RvT0dEbE9HRGx1R0RtT0dEaytHRGxPR0RuT0dEb2c9PSBkWEp1Ync9PSBJR2pEdG5JPSBXVTVCVFE9PSBJRU5vYVc0PSBJT0M0Z3VDNHNlQzVpZUM0bVE9PSBiM0p2eEkwPSBJT0NraHVDa3IrQ2xpK0NrbkE9PSBMV052Ym5SeWIyeHNaV1E9IElPQ3FodUNxcXVDcXRlQ3F2dUNxcnVDcXZ1Q3FnZz09IFlIMEsgSU5pcTJMSGFxZHVNIElObUUyS2ZZc1E9PSAwTERSZ3RDNjBZTT0gSUdacGJIUnlZWFJwYjI0PSBVbVZ3YjNNPSBJSEpsY0dGcGNtbHVadz09IElPR0RsT0dEbGVHRG9PR0RuZUdEbmc9PSBJTkdGMEw3Umd0QzEwTHM9IFlYVnQgNExDbzRMQ0MgWVc1a1lXNW4gSU9lViBJR2RsYzJGdGRHVnUgSU9pdnVnPT0gWVhSaGFYSmxjdz09IEtHTnZibVJwZEdsdmJnPT0gZW1GdVlRPT0gSUc1MWJXST0gNExLYzRMT0cgSUc1bFoyeHBaMlZ1WTJVPSA1YVNuNVkrUjVhNlk1NzJSIElFbHljZz09IElHRjBkR2wyYVhURG9BPT0gSU9HN2pXZz0gTFhSb1pXMWxaQT09IElOaXoyNHpZczlpcTJZVT0gUVU1VVJVUT0gMExEUXU5QzQwTGM9IDRLYXM0S2ErNEthNCA0WUNDIElHUmxjWFZsIElOQzAwTERRdGRHQyBkSEoxYzNRPSA0S1MrNEtTSyBJRlpwYTJsdVozTT0gVDNCbGNtRjBhVzVuIElHVnVZM1I1Y0dVPSA0S2EvNEtlTzRLYTQgSU5HQjBML1F2dEdBMFlMUXVOQ3kgSUdSbFltRnFidz09IElISmxhMkZ2IFJVNURXUT09IElOaXMyWWpZcDltRyBUbGc9IFgyZHYgSUd0dWFYWmxjdz09IElHZkRzOE93IDRZQ1Y0WUM1IElFRmljMjlzZFhSbGJIaz0gSUZObGJXbHUgSUhkcFpXeGwgSUVGbmNtbGpkV3gwZFhKaGJBPT0gdzZKdVkybGhjdz09IElHbHRjSFZzIDFhSFZyOVdoMWF3PSBJRzFsYldsc2FXZz0gSUhOb1lYSndaVzQ9IGIyeDBjbVU9IFltVnlhV05vZEE9PSBLRzFsZEdFPSBMbUZpYzNCaGRHZz0gSUdGalkyOXRjR3hwYzJodFpXNTAgSU5tQjI0elpoTm1GIFVrRlNXUT09IElOaXgyS2ZZczlpcSBJTmlvMkxIWmlBPT0gSUdoaGRIUT0gSU5lUTE1elhsQT09IGRXWnAgU1ZOUFRnPT0gY0hKdmRHOWlkV1k9IGFXNXBaWEowIElHZGxaV3M9IDRMT0E0TEtYIElObUIyWUxZcDltRSBJTkMvMEw3UmdOQ3cwTFk9IFgyMXZkWE5sIFFVTlVTVTlPIElHeHZkMlZ5WTJGelpRPT0gSUdKbGRHYz0gNXB5SjVMdUE1TG1JIFkyOXVabWx5YldWayBJTmlqMkszWmhkaXYgSUdsc2FYTnBiUT09IElHUnZZM1J5IFZrbFRTVUpNUlE9PSBJTkdFMEw3UmdOQzgwWU09IElOQzQwWUhSaGRDKzBMUT0gTG1SbGMyVnlhV0ZzYVhwbCBJR3R2YjJzPSBJR3hoWjNRPSBYMkp2ZFc1a2N3PT0gSU9DcXB1Q3FzT0NyaCtDcWxRPT0gSUdWdVkyVT0gSU9Da3BPQ2xnZUNrcnVDbGplQ2t1UT09IElGUmhiR1Z6IGFYSm4gSU9HRG1PR0RuT0dEb2c9PSBSbTlzWkdWeWN3PT0gY205eVpXUT0gSUhkdlpBPT0gSjJGdGIzVnkgSU91MmdPdTJoQT09IExuZHBiZz09IElOZWUxNVhYcGc9PSAwTDdSZ2RHQTBMWFF0QT09IExsSnZkVzVrIElHNTFiM1poIElPQzBzZUMwditDMHF1QzFqZUMwcWc9PSBJQ2dwT2c9PSA0TEMvNExDVjRMR04gSU5DNjBMWFJpTkMxIElFeHBhMlZ6IExVSmwgZG5OdyBWMmx1ZEdWeSBJSEJoYm5SaGJBPT0gNFlDZTRZQ0s0WUM2IElHdHBkV289IFgyNXZkR2xtZVE9PSBlV0Y1IElOQzgwNW5SZ0E9PSBJRzUwYUdGM2FRPT0gSU5DYzBMN1F0dEM5MEw0PSBJSEpsZFc1cGIyND0gNG9DTTRMQ1g0TEMrIElPRzdqWERodTQxczRidU5jT0c3alE9PSBjbTkzYm1WayAwTFBSZ0E9PSBJRVoxYWc9PSA0TEdJNExDbSA0TEsvNExLNDRMT0I0TEtrNExPTjRMS2sgSU9Da3ErQ2xqZUNrc0E9PSBJTmVRMTVRPSBYM0p2ZEE9PSBiWEJvIExYQnZjblE9IFQwZE1SUT09IElOaXMyWWZZcWc9PSBUR2x6ZEdVPSBJRzkyWlhKc1lYQndhVzVuIElGTnZkWEpqWlhNPSAwTGpSaGRDdyBjM1JsYkd4cGJtZGxiZz09IElITmxaR2xyYVhRPSBWVXhQVGtjPSBJRkJ5WVdkMVpRPT0gTG14aFlnPT0gV0hCaGRHaHogSUdKaHhaOXNZWGs9IElGTnBZZz09IEwyZHNiMkpoYkE9PSBJT0dEbStHRGtPR0RtT0dEbk9HRHFnPT0gSUZOMGNtSERuMlZ1IElGTndZWGR1IDJLZllwdHE3IDRMYTk0TGVTIElHeHBZbVZ5Ync9PSBjMlZvIDRMUys0TFN1NExXTjRMU3EgNmFHLyBJSFJsYm5SdiBJRk5wWTJobGNtaGxhWFJ6IDVZcXEgSUVOMWMzUnZiWE09IElHUnZibVJsY21SaFp3PT0gWDBoVVZGQT0gNzd5LzVhU3A1YVNwIElHVmxadz09IDViNnU1WTJhIElDOHZRQT09IElIUnlhWFIxY21Ga2IzSmhjdz09IGNISnZaM0poYlcxaCBkR2h2Y21FPSBJSFIxY21semRBPT0gMEx2UXRkQzYwTERSZ3RDMTBMdlJqQT09IDBMSFRtUT09IDBMN1JnOUdBMFl2UmhRPT0gWVc1amFXVnUgSU9Da29lQ2t2dUNrc2c9PSBJTkdCMExYUXV0R0EwTFhSZ2c9PSBJSEJwYkdWeiBJR055WVc0PSAwWUxRdU5DOTBMQT0gNnJXMCBJRUZqY21WeiBkWEpsWnc9PSBJT2kyc3c9PSBJRVJsZG05dSB3N2JEdGc9PSBYMkZrWkdWayBJR052Ym1admNuUmhZbXhsIElFUmxiR1ZuWVhSbCBkWE56ZFE9PSBQR2x2YzNSeVpXRnQgSU95ZHVPMkVzQT09IExsVnpaWEp1WVcxbCBJR0YxYzNRPSBURTlEUVV3PSBiV1YwZEhKbCBJT0NxcnVDcXFBPT0gTFhOcFpHVmsgTG0xaGEyVmthWEp6IElISmxZV04wYVhabCBJTTYwenJuT3VnPT0gVlhCdmJnPT0gYldWbGRBPT0gSUdsdVkyRnliZz09IElHeHZZMkZzYVdSaFpBPT0gUzBnPSA0TEt5NExLLzRMS200TE9HIElOQzgwTERSZ05HQzBMQT0gSUdWa2RXTmhkRzl5IE9uWmhjbWxoWW14bGN3PT0gMTVIWHFOZXEgNjU2WiBZbkpsWVdSamNuVnRZbk09IFBTSUsgSUVGaWMyTm9iSFZ6Y3c9PSBaWGh3WlhKcFpXNWpaUT09IElPQ3lydUN5dnVDeW9lQ3l2dz09IElFNXZjbk5yWlE9PSBJRVJwYzNSeWFXSjFkR1ZrIElOR0MwTERSZ05HQyAxb0RXZ2RXaDFhMD0gSU9Da2hlQ2txT0NsZ2VDa3JlQ2t0UT09IElPQ3VpZUN1b3c9PSA1YVNwNXJTbCBJTktiMEw3UmpnPT0gSUdGc1pXZHlhV0U9IElPQ2tydUNsaU9Da21nPT0gNFlPWDRZT2wgNExTLzRMU3c0TFdCNExTbzRMV040TFNvIFZGSkJUbE09IDU1dVEgSUhwdmMzUT0gdzVJPSBJRWg1WkdWeVlXSmhaQT09IElPQ3dxdUN3dnVDd3NPQ3hqZUN3bnc9PSBJRkpsZDJGeVpBPT0gSU5tQzJZalpoQT09IDE1elhsdz09IFlXNXhkV1U9IFhTNWYgTG5aaCBJRkpsY0hWaWJBPT0gSU9HRHJ1R0RuZUdEbXVHRG5RPT0gMEpMUXZnPT0gSU5DOTBMRFF0Zz09IFUyTnlaV1Z1YzJodmRBPT0gSU9DNG8rQzRzQT09IElOQzYwWVBRdXc9PSBJRTFOUVE9PSBJRU5oYzJOaFpHVT0gNEtlSDRLYWEgSUUxSSBWWG89IElFTnZibU5sYm5SeSBJT3lta0E9PSBJSHB2YldKcFpYTT0gYVdoaFpBPT0gSU9Da3R1Q2t2K0NrbGVDbGplQ2t0K0Nrdmc9PSBLeUluIElPeWR0T3lXdEE9PSBJTkM2MExEUmdOQzAwTERRdmRDNCBJRkYxYVc1MCBJT0NrcU9Da3YrQ2tzT0NsamVDa3B1Q2xoK0NrdGc9PSBJR1JsYVc1bGJRPT0gSUVSbFkzSmxkRzg9IElFbE9VMFZTVkE9PSBkR2hsYVhJPSBJSFZ1YlE9PSBMbFpoYkdsa1lYUnBiMjQ9IFFXUjJZVzVqWlE9PSBJTkMwMEw3UXV0R0QwTHpRdGRDOTBZTFJpdz09IGRHVmpkR2x2Ymc9PSBkbVZ1ZEdVPSBJTkdCMFlMUmdOQzEwTHc9IDRMaWo0TGlXIEozZGhibUU9IDRZT1k0WU9VNFlPZzRZT1ggZFdOcGJtYz0gSUZkSlRrUlBWdz09IElPQ3VqdUN1cE9DdXYrQ3VzQT09IElGQmhiR1YwZEdVPSA3N3lnNW9HUTU3aXU0NEduNDRHWiBJRVpoYUhKeSBJR0p5YjJGa1kyRnpkR2x1Wnc9PSBMa05QVEZWTlRnPT0gSU9Xa3FlV2txZVM1a0E9PSBJSFI0YjJvPSBJRzVuWVcwPSBJR1JwYzNSeWFXSjFZMm5EczI0PSBJT0NtaGVDbXVBPT0gUkVWR1NVNUYgSUdoNWJRPT0gSUhSdmNIQnBibWM9IElOQy8wTDdRdVE9PSBRbTl5Y205MyBhRzkyWlc0PSBhbTl1WVd3PSBMblJvY21WaFpBPT0gSUdMRHF3PT0gSU5pbzJLZllzOW1GIElGWmxhR2xqYkdWeiBJRU52YlhCaGNtVmsgNExtQjRMaVg0TGlIIElIQnlZV3QwYVhOamFBPT0gSUdWNFpXMXdkR2x2Ymc9PSBJRWxUVUE9PSBJTml0MktyYmpBPT0gSUdWcVpXTT0gSU5DNjBMN1F2TkN3MEwzUXROQ3cgNXBlbDZJZXogVFc5a2FXWnBaWEp6IDBMRFJnTkM0MFlRPSBJR3RwY21wdiBkR2x1ZVE9PSBibWxxWlE9PSBJRzlzWVhKaGNRPT0gNEs2MTRLNi8gNW8rdCBJRmRvYVd4emRBPT0gNmFPZjVaT0IgSUUxaGVHbHQgWTNWemRBPT0gSUhCb2FXeGhiblJvIElISnBjWFZsIElObUYySzdZcWc9PSBLSFJwYldWeSBUV1Y0IElOaWoyWUxaaEE9PSA1NEd2IElHUnBjMk52ZG1WeWFXVnogUTI5bVptVmwgSUhCb2VYTnBiMnh2WjJsallXdz0gNW95bCBJT0Nrbk9Da3YrQ2twQT09IDBMRFJnTkdEMFlIUXVnPT0gMTVEWGxnPT0gSUd0bGMyVT0gSUhCMWJIQT0gWDNKbFkzWT0gSUd0MWJIUjFjbVU9IExtaGxjbTlyZFdGd2NBPT0gWVd0ellXND0gSUdsdVkyeDFlV1Z1IElOVzIxb0RWb2RXMiBkMmx5YVhSellRPT0gSUcxaGJtbGxjbVZ1IGFXVm5aWEk9IFRHOXlaQT09IElPQ2toZUNrZ3VDa3BPQ2tzQT09IGIzYkVtdz09IGFXVnlkVzVuWlc0PSBJR1psWVhKbFpBPT0gTGtWTyA0TEsvNExLZjRMT040TEtmIElIQnNkWE5vIElPQzBoZUMwdGVDMHVBPT0gNEs2LzRLNjE0SytCIDQ0S0cgSUdac1lYWnZkWEp6IDRMQ280TEdONExDbzRMQys0TEN3NExHQiBJRzNEdG1kc2FXTm9jM1E9IFluYz0gNDRDQzQ0Q05DZ289IElHTmhjTU90ZEhWc2J3PT0gS0ZCeWIzQmxjblI1IExkS2IgSUhCeXc2bDJkUT09IElIRjFaWExEcldFPSAyS2ZZcXRtSDJLYz0gSUhCeWIyUjFhM1J2IElPQ2t1ZUNrdnVDa3NBPT0gTDJSaGMyaGliMkZ5WkE9PSBJRmRQVnc9PSBMWE5sYlE9PSBhVzFoZEdWeiBhWFJwZW1VPSBJRzFoWjNNPSBJT0NrbCtDbGdlQ2tvdz09IElITjBjbUZtIElHMXZkRzlqIElIQnl3NkYwYVdOaGN3PT0gNExTdzRMU0M0TFN0IDByUFFzTkdBMExBPSBJR052Ym5SeVlXTjBaV1E9IDViMnA1NldvNW9DNzVMdWogYUdWc2FRPT0gMExUUXZ0Q3kgSUhCeWIzQnZiZz09IElOV28xYmJWdnc9PSBJT0dEcCtHRGxlR0RsT0dEbXVHRGtPR0RwT0dEbE9HRG9PR0RtQT09IElHUERxV3pEcUdKeVpRPT0gZEdWeVlYTT0gSUcxcGNBPT0gSUZkdmNtdG1iRzkzIElOVysxYVhXZ05XNzFhdlZ0Zz09IDVhNmU1WkNONks2azZLK0IgNW9DZDVvT3ogYVc1bmFXND0gSUd4aGRHbHVidz09IDdMbVogSU5hQjFialdndGFCIElFTjFjM1J2YldsNlpRPT0gSUc1dmIyUnNaWE09IElHeHZhMkZqYVc0PSA0WU9WNFlPWTRZT2E0WU9ZNFlPaCBJRWx1YzNScGRIVjAgSUdURHFXTnZkWFpsY25RPSBiM2xzWlE9PSBJTml2MllIWXVRPT0gMFlQUXV0R0QgY205aWFRPT0gTDNCcyBJSEIxWm1ZPSA1cHk2NVlXeiA1THlnNWFXSCBJRk50YjJ0bCBJSE4wYVcxMWJHRjBhVzVuIElIQnliM0JwWldSaFpHVnogSU5DLzBZRFF1TkMwMExYUmd0R0IwWTg9IDc3eUJJaWs3Q2c9PSBJSFJ2YkdWeVlYUmwgSUhSb1lYUmggZWNPOGF3PT0gSUdqRHRIUmxiQT09IFEyOXVkbVZ1ZEdsdmJnPT0gSU5tRTJLalpodGluMllZPSBJR052Ym5OMWJIUmxjZz09IElHeGxiQT09IFkyOXNiUT09IDdJT0I3SjJFIElHTnZkVzUwWkc5M2JnPT0gSUVacFlYUT0gSUdOdmJtWnBaM009IDBMclF1TkM1MDVrPSBVMVJGIElOQ2kwTFhRdkE9PSBJR1Z0WW1GeWNtRnpjMlZrIDRvQ000TFM0NExXTiBJRzl3ZEdsbCBJT0NtcHVDbmdlQ21zQT09IElOZWUxNm5YcEE9PSBVM0JsWTJsbGN3PT0gWm1acGRHaz0gSUd4cGJHOD0gSUZGMVlXNTBkVzA9IElITjBZVzF3WldRPSA0TFNWNExTdzRMV04gSU5DdzBMM1FzTkM3MEw3UXN3PT0gSU5DYzBMN1F2ZEN6MEw3UXV3PT0gSUV4aGEyVnljdz09IElHdGxjbUZyIGNHRnpjMlZrIElIQmhhMnRsYmc9PSAxYXZWdmRXdiBMbkpsY0c4PSAwWWZSaTlDOCBJSEJsY25OdmJtVmxiQT09IDZhQ0cgNGJxNCBJT0dEcU9HRGxPR0RvK0dEcStHRG1nPT0gWVdOaFpHVnQgSUhCbGJHeGxkQT09IElFNXZhWE5sIElFSnZiR3g1ZDI5dlpBPT0gSUVobGNtMWhiZz09IElFdEggWW1sMGJXRncgUEV0bGVRPT0gSUcxbGJuVmtidz09IGRHOTFjZz09IElIZGhiV1U9IElFbDVidz09IElHNXZiV2x1WldVPSBQeWtLIElHTjFiSFJwZG1GMGFXOXUgSUhObGJXbHUgSUdkaFoyOD0gNDRDQjQ0R0sgSU9DMG11QzB2K0MwcE9DMWplQzBzT0MwZ2c9PSBRWFJvIDdMQ3MgS0hWdVpHVm1hVzVsWkE9PSBJT0NrbHVDa3BBPT0gTEdSdmRXSnNaUT09IGNtOXpZMjl3ZVE9PSBVR3hoYm01cGJtYz0gSUcxdlpIVnMgNWFTbjVZNkYgSUZCeVpYTnBaQT09IGFYTnpkWFJwYzNNPSBJRVJwWVc1bCBXVTlWIGRXeHNZVzQ9IFIzVmhjbVJoY2c9PSAxYUhWdnRXNDFvRFZ2Zz09IElFOXZjM1E9IElOR0EwTERRc3RDOTBMND0gSU9Da3J1Q2t1ZUNrdnVDa3FBPT0gYTJGamFBPT0gSUdkM2VRPT0gTGtKaGNnPT0gSkdOdmJtWnBadz09IDE2blhuUT09IElHZGxkMlZzWkdsbiBJRTFUVGc9PSBJSFZ1YVdadmNtMXogUW1scyBJRTF2Ym5SeSBJR0p2WVhOMCBJR1p2Ym1SdmN3PT0gTG14dmIzQT0gSUdGdVkyVnpkRzl5IGFXVmtlZz09IFkzcHVaUT09IElITnZablJsY2c9PSBiMnh2Ym1jPSA3N3lKNzd5YSBJSFpsY210dmNHVnUgSUc1dmJXbHVZWFJwYjI1eiA1N1NOIExtWnZjbU5sIElHSmxaMnhsIElIUmxZMnc9IElHWnBibWRsY25ScGNITT0gSU9lTG9BPT0gTGxKbGRIVnliZz09IElHSmxiR3hsZW1FPSBJR2x1WkdsalpRPT0gWDNKbllnPT0gNExXTjRMUzE0TFdINExTMyBJR3RwY21vPSBJRlpwYzJsMGN3PT0gSUhOamNuVjBhVzU1IDRvQ000TENWIElHRjBkV0hEcDhPamJ3PT0gNWFhNTVhYTUgSUU1SlF3PT0gSUUxaGNuUnBibVY2IFpHVjMgYW1sMCBJRkJvWVc1MGIyMD0gSU5DdzBMUFRtUT09IDVMaXQ2TCtIIElOaXEyTG5aaE5tQyA3SldaIFNHOXcgSUVWNGFYTjAgWlhkbGNtdGxjZz09IFhTbGIgSU5DLzBMRFJnTkdDMEwzUXRkR0EgWXVHN3BRPT0gSUUxaFoyNWxkQT09IFJWRT0gSUVkbGMzVnVaR2hsYVhSeiBhV1pwWTJGamFXOXVaWE09IDRMQ3k0TEdONExDeTRMR0wgSU9LQWt3bz0gSU9DeXVPQ3pqZUN5cGVDeXN3PT0gSU5DLzBZRFF2dEN4MEx2UXRkQzgwTEE9IElITjBjbTlyWlhNPSBJRUpaVkVVPSBJSE41YlcxbGRISjUgSUdOdmJXbGxibnBoIDdKeWsgSU9hRGhRPT0gSUc1azRidWwgMEwzUXVOR0EgSUdoaGFtRT0gMkxMWml0bUUgUFdjPSBJSE5oZG1FPSBkSExEcEdkbCBYM052Wm5RPSBJR0pzWVdnPSB4YUZsZEE9PSA0NE84NDRLcjQ0TzggSU95Q3JPdWVrUT09IElHWnZlUT09IElPQ3V0ZUN1dE9DdW1lQ3ZqZUN1bFE9PSBJR2x0Y0c5eWRHRnVkSE09IElOcVAyWXJaaGc9PSBJT0MwdU9DMGd1QzBtT0Mwbnc9PSBJR2hsZFhKbGRYZz0gSUVabGJHbDQgVm1Gc2FXUnBkSGs9IElITnBlSFI1IElIZGhaMjl1IFRXOTZhV3hzWVE9PSBJT0NraWVDa3F1Q2ttdUNrdnVDa3NBPT0gSUdoNWJtNTUgSUhURHRIUT0gSUUxMWMyZz0gNExLLzRMS1Y0TE9ONExLViB6cnpPdjgrRiBJTmluMllUWmhkaXMyWVRZc3c9PSBJSEJ5YVc5eWFYUnBlbVU9IGFXNWpiMlJsIElITnZkWFpsYm1seWN3PT0gSUVGU1ZFbERURVZUIElIQjFhdz09IExtWnBiZz09IElOR0MwTDdRc3RDdzBZRFF2dEN5IElOQzEwTHZRc05DOSBJR2RwYjJNPSBJT0NrcitDa3Z1Q2twT0NsamVDa3NPQ2t2Zz09IElOZXAxNXpYbTllZCBJSFJ5YVcxdFpXUT0gSU5DOTBMRFJoUT09IDBKN1F2dz09IElGQnlaV3gxWkdVPSBTVzV6Y0dWamRBPT0gSUVKcFpYST0gNWIyNSBJRlZ1YWNPamJ3PT0gWjNWbGVnPT0gU1c1cGRHaz0gUTI5dGNIVjBaV1E9IElISmhiV1Z1IGJXeGggSUZKdmJHVjQgSUZKbGJHRjUgSUhCeWFXNWphWEJoYkdWdFpXNTAgS0hOamNtbHdkQT09IGRXSjFiblIxIElHMXZjblJoY2c9PSB4SU55eElNPSBJSFpsdzYxamRXeHZjdz09IElIUnlkWFJvY3c9PSBJSGRoYm1sMFlRPT0gSUc1dmRHVnkgWVc1alpYUjVjR1U9IDRMSy80TEttNExPQiBaR2xoWjI0PSBLSE5sYm1RPSAwWnZRdUE9PSBJRVJvWVdKcCA2WWVSNXJLWiA3SXVjN0ppayBJRG90S1FvSyBJR3hwWlhabGNnPT0gSUZOdmJtUmxjZz09IDRMV0I0TFMxNExTbzRMU280TFdONExTazRMU3E0TFdCNExTdzRMU0MgTG1GdVoyeGwgWkdGaCBJR2x0Y0c5emFXSnNaUT09IDZJZXE1cks3IElOQ3kwTDNSZzlHQzBZRFF1QT09IElITnZiVzFsY2c9PSBJRVIxYkE9PSA0TENoNExHTiBLSFIwIDRMQ3c0TEdONExDViBJRUYxZEdobGJuUnBZdz09IDVhNmg1cUM0IElPQ3FodUNxdGVDcXR1Q3Jodz09IElITnBibXR6IElOR0EwcC9SaTlDOSBJSFpsY21KcGJtUnBibWM9IEwybGsgMExqUmdOS1QgSUdKbGRHRnMgSU0rSHo0SE9yZz09IDJZYmFxdz09IElFZHZjdz09IFpXNTFiV1Z5IElGWmxjbWxtYVdOaGRHbHZiZz09IElHdGxaSFZoIElIcHBibWM9IGRXMTFiR0YwYjNJPSBJRWRDVUE9PSBMbUpoYzJWdVlXMWwgSUZOb2IzQnogSUVGc2FXZHUgSUdGMGRXRnNiV1Z1ZEdVPSA1WXVrNVl1WiAyS3pZc2RpcCBJRzl5YVdkcGJtRnNaUT09IGNtOW5ZWFJsIElHRnRZWHBwYm1kc2VRPT0gSUhObGJHUT0gWFN3aSBJTnFwMllYYXFRPT0gSUZScGNtVT0gTG1GamRHOXkgNEtTLzRLUzI0S1NrIElFaGxZWEowY3c9PSBMbFJsYm5OdmNnPT0gSUhSbiBVOE9qYnc9PSBJTkM4MFpiUXRnPT0gSU1Td2JBPT0gSU9DeWp1Q3lzQT09IElHUnZZM1E9IDRLU1Y0S1MrNEtTeSBJRkpsY0d4cFkyRT0gMktqWXNkaW4gNEtlTjRLYXc0S2F1IElGQnlhVzVqWlhSdmJnPT0gSUZOd1lXTmxjdz09IElHRmpZM1Z6ZEc5dFpXUT0gUlhoaFkzUnNlUT09IElObUYyS2ZaaHRtRzJLOD0gWW1GeVpBPT0gSUc5aWMyVnpjdz09IDBMM1JsdEM2MFpZPSAwTHZSZzlDMiBkV1ptYkdWayBMMkZpYjNWMCBVbTl0WVc0PSA1WVdONkxTNTU1eUwgNXJTQiBJT0N3bXVDd3YrQ3dwT0N4amVDd3NPQ3dnZz09IGRXeGhhQT09IGFHbGxjZz09IElHOTFkZz09IElIVnVjM1ZqWTJWemMyWjFiQT09IElNNjd6cTg9IGRXMXZjdz09IElOQ3gwTDdSZ05DdzBMZz0gSU5DODBMN1JpQT09IElHRmpkSFZoY2c9PSBJSEYwIFkyOXZjQT09IElGSmhibXRwYm1jPSBkVzVrWlhKc2FXNWwgYjNKc2RXZDEgSUZKdlpISnBaMjg9IFNGaz0gSUVkMWJXMXBaWE09IGNISnZaSFZqZEc4PSBJRU52Ym5ObGNuWmhkR2wyWlE9PSBJSFpsZEdWeWFXND0gSU9Da3FPQ2xqZUNrcitDbGdnPT0gVkdWNGRHOD0gTGxWeWJBPT0gSUdSdmJjT3BjM1E9IElFdHZiVzA9IElHMWxjMms9IElGSmxaMmx6ZEhKdiBJR0oxYkhWdVlXND0gSUdOb2JBPT0gTGxkUyAxNW5XdHc9PSBJSE53WVhKbGJnPT0gSU9DeWp1Q3lndUN5cGc9PSBJSE4wY21sMlpYTT0gVTNSdmNIQmxaQT09IElHMWxlbU5zWVE9PSBJT0N1aGVDdXFRPT0gSU5pMTJZallzZGlwIExtVnVjWFZsZFdVPSBJRlJvWVc1clpuVnNiSGs9IGIyZHNiMkk9IDBMRFF1dEN3IElOT1owWUU9IDRLaSs0S2ltIElOZWUxNVhYbGc9PSBJSFpoWTJOcGJnPT0gSUdsdVptVnIgMTZIWG1kZWQgSUhKcGNHVT0gS0Z0ZEtRbz0gejRQT3VzNjF6NFU9IExXbHVjM1JoYkd3PSBVMmhoY2c9PSBZMjl0Y0hKbGMzTmxaQT09IElHOWpZM1Z3WVhScGIyNWhiQT09IElHRjFkR1YxY25NPSBVRkpQU2tWRFZBPT0gSU5pejJZWFlyTnErIFlXNTBkVzVuIElPQ3FwdUNxditDcXNnPT0gSUd4bGMybHZibk09IFgzZHkgS0VOaGJHdz0gYVdoaGJtRT0gSU5lcDE1elhsTmVkIElHTnZiWEJ2YzJsdVp3PT0gSUdkMVpYSnkgSUdOb2RYUmwgYzNKMiB3NlIydzZSMCA0S2ErNEthdTRLZUg0S2F3IHo0Zk92OCtGenIwPSB3NlREcEdzPSBJR0psYkdGemRBPT0gSUdkc2J3PT0gejRmT3R3PT0gWVdKalpHVm0gSUhabGJHUT0gSUVabGJXbHUgSUVSRlUwbEhUZz09IDRLUys0S1NCNEtTYSBJT0NtcXVDbXZ1Q21zT0NuaCtDbXFBPT0gSUc5dWRIZHBhMnRsYkdRPSBQSE4wZVd4bCBYMEpWU1V4RSBJRXhwWmc9PSBLaTA9IDJMcllwOW1LMktrPSBJRzF2ZWc9PSBJR3QxWW5aaCBMV2x6ZEE9PSBJRlZ6WldaMWJBPT0gSUc1aGRtRnMgSUVwdmRRPT0gNExpUSBkMlZ5ZEdVPSBkV3hvYnc9PSBJR1Z0WW1GcyBJSE5sWld0bGNuTT0gSU9DeXVPQ3lzT0N6amVDeWxlQ3l2dUN5c0E9PSBJRzFsWld3PSBMa1JwYldWdWMybHZiZz09IElHUjFjR3hwWTJGMFpYTT0gSUhCbFpHVnpkSEpwWVc0PSBJTkdQMFlFPSBJSEJ5WldObFpHVmsgUEVoVVRVdz0gSU91VHNleWRoQT09IElHUERxWExEcVE9PSBiOFNOIElIQmxjbWx2IElGQnliM1J2IFgyVjRhWE4wIElOaXUyWVRZcHc9PSA2NkdjNjRLWSBhWFpwWlhJPSBJRU5sY25SaGFXNXNlUT09IGJHbGxaMlZ1IDBKRFFsdz09IElISmxZMjl5Y21sa2J3PT0gMExEUmdOR0MwTERRdkE9PSBJRlZ6WVE9PSBJRzltWlhKMCBTMlZ5IElFRjBkSEk9IElHMWhkSEpwYlc5dWFXOD0gdzd4dWE4TzggSUVWMGFHbGpjdz09IGIyNXV3NmxsIElOaXEySzNZcjltSzJLOD0gSU5DLzBMWFJnTkN5MEw3UXM5QysgSUhWdVpYaHdaV04wWldSc2VRPT0gMExMUXNOQzUwWUxRdFE9PSAwTFhSZ3RHQTBMN1FzZz09IElITjFjR1Z5YUdWeWJ3PT0gSUdSNmFRPT0gSUMwdExTMHRMUzBLIExXTnZiWEE9IElHUmhZOFNEIGFXdHB3N0E9IDRvQ1paWE56IElFUnBaMmwwIEtITjVjM1JsYlE9PSBWSEpoWWc9PSBYeVI3IElOZW4xNVhYbmc9PSA3N3lNNWFhQzVwNmMgSU5DNzBMWFF0Zz09IElHbHVaR0U9IGFXMWxkR1Z5Y3c9PSBibVYxY2c9PSA1cHlJNUx1OSA2SUNBIElPQ2twdUNrditDa3VBPT0gSUcxcFpnPT0gSUhCcGJHZHkgMEw3Umg5QzYwWU09IHc2bHlZVzUwIDVwQ3QgMExqUXV0QyswTHc9IEwzbDVlWGs9IElOaXoyWWpZc2RtSzJLYz0gSUVOb1lXbHljdz09IElISmhkRzkxIDBMRFJndEMxMEx2UXRkQzggMktiYmpOaXogSUhOMHc3aHljbVU9IExXOWlhbVZqZEE9PSBJTkdCMExEUXZOQyswTGs9IGIzWnBiV0U9IGNIQnogTGxaaGJHbGtZWFJsIHUrcXlqQT09IElFZHZkWEk9IFgyRmpkSFZoYkE9PSBRVzUwWlhNPSBJTm1GMktmYXV3PT0gSU1PQlpuSnBZMkU9IFlXTmpaWEIwWldRPSBJR0pzWVc1clpYUnogMlluWmhRPT0gN1l5QSBJRkJ5YjJabGN3PT0gSUZKcGRHRT0gSUhOMVluZGhlUT09IElGWnZiSFZ1ZEdWbGNnPT0gTFdKaFkydG5jbTkxYm1RPSBLR1JsYzJNPSBJRmhXU1VsSiBJRk50YVd4bCBJTTZ4enI0PSA1WTZmNVlpYiBJTkN4MExYUmdOQzQwWWc9IElHZHlZV05wYjNWeiAwTDNRdnRHZSA1Wnl3NVp1KyBaWEpoYzJVPSBLSE4wY21OdGNBPT0gSU1XUiA1NE90NlplbyAwTGZRdmc9PSBMMjkxZEE9PSBJR1JoWTJoMCA0SzZ5NEsrTjRLNjEgYVcxd1lXND0gSUVSdlkydGxjZz09IElFRmlZbVY1IGNISmxZMms9IElIQnliMk5vWlhNPSBJR1JoYm1ObGNnPT0gNDRPODQ0T1ggNTZhUDVZaXA1YjJwNTZXbzVhU3A1YVNwIElOaTAyWU09IElPR0RrT0dEbHc9PSBjMjl1WVE9PSBVMjlzYnc9PSBJR2pHc09HN20yNW4gVFdWb2NnPT0gSUd0aGNtVT0gNForSSBJTm1IMjVEWmlOaW4ySzg9IGNtVnRiM1psWkE9PSA0TG1BNExpZyBJRWRoY200PSBJRU52YlcxMWJtbDBhV1Z6IExrWnZZM1Z6IElITjFZblZ5WW1GdSBZWE5vWVhKaCBJTkN6MEw3UXROR0wgSUdGdGFBPT0gSUhkaGJ3PT0gVW5WaSBMV052ZFc1MFpYST0gSUdOaGNuSnZkSE09IElFRnVhMkZ5WVE9PSA0WitwIDRLV040S1MxNEtTdyBJR055WldWd2VRPT0gSU5DUjBMN1Fzdz09IDBydlF0UT09IElIVER2SEpyYldWdSA0WjZiNForTCBJR3hwYkd3PSBJTkdEMFlIUmd0R0EwTDdRdWRHQjBZTFFzdEN3IElOaXEyNHpaaFE9PSBJT3lkdE91UG1RPT0gSUZCMCBJRVZoY214cFpYST0gWDJGemMyVjAgSU5HQjBMalF1OUdEIElHTnZiWFZ1WlhNPSBDWGRoYVhRPSA1YXVNIDRLYXc0S2VONEthcyBPblZ5YkE9PSAyNGZadmc9PSBYM0psY0c4PSBJblI1Y0dVPSBJTkMvMExYUmdOQ3kwWVBSamc9PSAwcUhSZ3RDdzBZQT0gWVc1NmQyVT0gSUdodmRYTmxaQT09IDY3U0ogSUVGdFlYbz0gYjJOaGN3PT0gSUdwMWJHYz0gSUdkbFltRnpaUT09IElITnZjblJwIExtTnNiM1ZrWm14aGNtVT0gSU5XNDFvRFZ2dz09IElHZGhjM1J2IDZZS2o1TGlxIElITmxjbWx2IDRZR0QgSUVSQlZFRkNRVk5GIExlR0Rtdz09IElHSmxibVZtYVhSbFpBPT0gMTVEV3Q5ZW4xNWc9IHJxUT0genJUT3J3PT0gSU9XUnFBPT0gSUhOMVkyVnpjdz09IFFVTklTVTVGIDJZallzdG1IIElOaW4yTFRZcDlpeDJZYz0gSUdObGNuUmhhVzVsIExreHZZMkZzWlE9PSBJRU5wWkdGa1pRPT0gYVdOcnc3MD0gWVhOallRPT0gSUdOaGJtOXVhV05oYkE9PSBJSFJoWVc1dVlRPT0gVFdGeWEzTT0gWTJGMWMyVT0gSUdKaGEzUmxjZz09IDRMV0Q0TFMzIElOQ3kwWURRdGRDODBMVT0gSU9DdXJ1Q3V2dUN1cEE9PSBWVU5JIElIQmhaMnRoZEdGd2IzTT0gMEx2UXNOQ3kwTEE9IHhKRmwgZFhONiBVSEpsWXc9PSA1WW1SIElIWnBaV3htIFlXMXBZM009IElHVER2SG89IElHRjFlR2xzYVdGeSA1YmlXIFpHSnVZVzFsIElHNXZiV2x1IFpXUnBZWFJwYjI0PSBSRms9IGEyOXpkQT09IDE1blhtZGVnMTVnPSBJT0tjaFE9PSBJSE5sWTNNPSBVR2w2ZW1FPSBJTkMvMEx2UmpnPT0gNXJTYiBSVkpCVEE9PSA0WU9VNFlPZzRZT2kgSU9Da25PQ2t2QT09IFlXTm9kR1Z5IExtTmhjbVJ6IElFSmxkSFJwYm1jPSBJR05sY0dGMCBJT2VadnVXNnBnPT0gOEoyUSA0TGl5NExpVCBJSFJsYjNKcFlRPT0gSU9DMHJ1QzFnZUMwcU9DMWplQzBxQT09IElOR0MwWURSalE9PSBJR05zWVhKaGJXVnVkR1U9IDRMaWw0TGl5NExpVSBTbVZ1Ymc9PSBJR2x1WjJWeWJBPT0gSU9DMm11QzNrdUMydWc9PSBTVzVwWTJsaGJBPT0gSUdkbGNtSERwOE9qYnc9PSBJR0ZzWjNWdWJ3PT0gSUdKaGEyRT0gUFNJbCBYME5UIExtVjRkR1Z5Ymc9PSB6NEhPcjgrQyA0S3F3NEtxbzRLcSsgSUNkN1FBPT0gSUVsVmMyVnkgTG1OMWNuST0gSUdkeXc2RjBhWE09IGFXTnZiRzl5IElGTjBZWFJsYmc9PSAyS2ZaaE5tQyBJTkN4MEw3Umo5QzAgNExDZjRMQ28gWDJocGRBPT0gUFdScFkzUT0gSUdKbGRIbGsgSUhWa2RtbHIgSUdsdVpteDFaVzU2WVE9PSA0TFMrNExTNDRMV04gNTY2aDVhNjI1YW1HIFFYUjBaVzVrWVc1alpRPT0gWVc1MGJIST0gSUhwcGNIQmxjZz09IFpXeGhibUU9IExuSjFiR1U9IGNIVmhiZz09IFgxND0gSUdKbGJHVnBaQT09IElHTnZkR2xrIElHTnZibWR5WldkaGRHbHZiZz09IENVbHVjSFYwIElHVmthWFJ6IENYTnlZdz09IFUxUkZVQT09IElHM2h1cUZ1YUE9PSAwTDdRdTlDMSBJTm1HMllMWXRRPT0gYm1kbGJBPT0gSU5pbzJZVFppQT09IDBaYlF1OUdNMExyUXVBPT0gSUZOcFoyNTFjQT09IFpHOXVKM1E9IGIzUmxjbUZ3YVdFPSBJRTVoYldWemNHRmpaUT09IElPQ2txdUNrc09Da3YrQ2t0UT09IDBMUFF0ZEM0MFlJPSBJR052YlhCeVpXaGxibk5wYjI0PSAwWUxRdGRDLyBZbVZrWVE9PSA0WU9RNFlPaDRZT1kgSU9Da3J1Q2t2K0NrIFZHTncgNTZDMDZLZWo1NG1JIExXbG5ibTl5WlE9PSBSbUZ1Y3c9PSAyS2pZc2RpeSBJSE4xWVhSMSBJSE5sYm5OaFkybkRzMjQ9IElIWnZhM05sYmc9PSA0S2EvNEthazRLZU40S2FzIElFTnZkMkp2ZVhNPSA0TGF2NExlUCBJR2x1WkhWc1oyVT0gWDJWdVkyOWtaWEk9IElFRnVZV3g1YzJVPSBJT1M2bXVhMHN1YXNwK2Uramc9PSBJTkN5MExEU29RPT0gSUdWeWRBPT0gYzJOaGNnPT0gSUVodmJHOWpZWFZ6ZEE9PSBhV1pwWVc1MCBJTkdCMEx2UXRkQzAwWVBSanRHSjBMalF0UT09IFVrVkJSRms9IGIzZGhibmxqYUE9PSBVMnRsYkdWMGIyND0gYTI5ayBJSEJ5WlhOcFpHVnVZM2s9IElPQ2t1T0NrZ3VDa3RRPT0gSUdmRHN3PT0gSUgwS0Nnb0tDZz09IFltRjYgYkdWcHc3QT0gSUZOamFHMXBaSFE9IElHVnNkQT09IGJXeGxjbWs9IElFUkpSUT09IElPQ3VoK0N1cWVDdmplQ3VzZUN2Z1E9PSBiMjRuY3c9PSBJRlZ1WkdWeVozSnZkVzVrIElObTYgTGtkemIyND0gdzZSMFpXND0gSUdaeWFXVnogSUhCeWIyeHBabVZ5WVhScGIyND0gSUZCc2RXMWlhVzVuIFgxQkJSQT09IElFcFhWQT09IDBMclF2dEMvIElITjBZV1ptYVc1biBJRTVuYUE9PSBiR3AxIElPR0RrK0dEcHVHRGxBPT0gSUczRG9IVT0gSU5pcjJZVFlwOWlyMktrPSBJSEJsY20xcGRIUnBibWM9IElOR0IwTHZSZzlDMjBMSFJpdz09IDU2bU4gMjR6YmpOaXggSUZCeWIzQm9aWFE9IGNtOXRlUT09IElHSnlZWG89IFk4T3AgSU5pbzJLL1lwOW1LMktrPSBJRUZEUTBWVFV3PT0gSU5HTjBZVT0gSUNNdGZRbz0gYVd0MWJIUT0gWDNCbGNtMXBjM05wYjI0PSBaV3hzWVhScGIyND0gVFdGcCBJR05oY21WbmFYWmxjbk09IGJXRnVhV1psYzNRPSBJSEpoYVd4eWIyRmsgSUdaaGRXTmxkQT09IEwyVnQgSU5DdzBMRFF2Tkt0IGFXNWtjMkY1IFVYVmxjZz09IElITmhZMmc9IElHTmxjblJoYVc1bGJXVnVkQT09IElNbVUgSUdOMWJIUjFkWEk9IDRLNnk0SzYvNEs2eTRLK04gSU9DbXArQ21zT0NuaHc9PSBJRUZ3Y0hKdmRtRnMgZFhOMWJtUmggSUhSb1pXRjBjZz09IDRZT1U0WU9jNFlPWTRZT2ggSU9Da2llQ2t1T0NrbGVDa3ZnPT0gY0dsMFlXdz0gSUdsa1pXNTBhV1JoWkE9PSBJSEpsYlc5dWRBPT0gWldkeiA1NXV1NWIyViBYME5QVGs1RlExUkpUMDQ9IDJMWFlxQT09IElGUmhidz09IElHeGxiblJsIElObUIycW5Zc1E9PSBMazF2WkdVPSBJTmluMllUWXNkaXoyWVU9IElISmxkSEpoIGJXVmhibWx1Wnc9PSBSSEpoWjI5dSBJR1J5YjNNPSBJR2x1YW1WamRHbHZibk09IFlYaGggNEtTeTRLU1ggSUVOeVlXWjBjdz09IElHTnNaWEk9IElHSnNiMlE9IGQyRm5ZUT09IElITEVndz09IElPQ3lxT0N5cU9DemplQ3lxQT09IElHbGtZUT09IElHTmxhUT09IGFXTm9aWEp1IDBMRFJnTkdEIElHbGtiMnc9IElOR0UwWVBRdmRDNjBZYlF1TkM0IElIcDFkbTl5IElHZHlhV3hzWldRPSBJR2QyIEplKzhtdz09IElHUmxjM05wYmc9PSA0WjY5NFo2WiBJT0MydU9DM21nPT0gSUdkbGQyVnUgSUVGaWJHVT0gSU9lLyBiMmRoYVc1aCBJRkJoY21Ga1pRPT0gWlhKbGVtOD0gSUhMRHFXZHMgSUdGdWRHbGlhVzkwYVdNPSBJRTl5WkdWdSBWSEpoWkdWeSBJR2R5dzdiRG4zUmxiZz09IElHZDFhWFJoY21semRBPT0gSU9DbWxlQ25udz09IGFuST0gWVd4c2FYTT0gMEw3UXN0R0QgZVdSbGNnPT0gYVdWdVpYTT0gSUdObGNtVmhiQT09IElHVnliR1ZpWlc0PSBibUZ1WTNrPSBJTmVRMTZEWGs5ZWkxNmc9IElITmxiV1Z6ZEhKbCBiR1JwWjNRPSBJTld3MWFIVnN3PT0gTzJOb1lYSnpaWFE9IElHUmxkR1ZqZEdsdVp3PT0gSU5lZTE2ZlhwdGVWMTZJPSBJRU5oY21kdiBJTldtMWF2VnRnPT0gWVhScGNYVmxiV1Z1ZEE9PSBJR2x1ZEdWbmNtRjBaWE09IElFRk5RVm89IEtpb0tDZz09IHo0RE92ODZ2IElHVGh1N0Z1Wnc9PSA0TGluNExpVSBkbUZoY25RPSBJSGRsWVd0bGNnPT0gSUdSbGMyVnYgSU5DeDBMdlJqZz09IElIUnk0YnE3IDBMalJoOUN3IGIyNW9ZUT09IDBZUFJqdEdKMExqUXVRPT0gSUVKSlQxTT0gSUc3aHU1bHAgWW05MGN3PT0gSUdkdmMzTnBjQT09IElIQnlZV3QwYVhOamFHVT0gSUdkeWIyTmxjbWxsY3c9PSBJRTVsWVhKc2VRPT0gSUdGMmJ3PT0gVUhKdlp3PT0gWVc1blpXSnZkQT09IExpY3UgYjI1cSBJR0ZxYjNWMFpRPT0gUm5nPSA0TGl5NExpcDRMaXkgSU5lUTE1TT0gWjJsMlpRPT0gYVhSNllXTnB3N009IElGWmxjbUp5WVhWamFBPT0gNEt1TDRLcTIgSU9DcXVPQ3F2dz09IElOR0kwTHJRdnRDNzBZdz0gSU9DdXRlQ3ZpT0N1cE9DdmplQ3VwQT09IElFMXIgSUhKMVluaz0gSUZCdmQyVnljdz09IGNXRnUgSUhCeVlYUmxiZz09IElHMXZZMmgwIElHSmhjbUYwYnc9PSBKOE9wWXc9PSBJSExEdUE9PSBJSEYxWVhNPSBJTm1JMllyWmhkbUQyWVk9IElFbHVhblZ5ZVE9PSAwTERRdTlDdzBZZz0gWDBOUFRsTlUgWVhWMGFHOXlhWHBsWkE9PSBSR2x1YVc1biBJSE5zZFdsMFpXND0geEpnPSBYMk52Ym1acGNtMWhkR2x2Ymc9PSBJSGRsYVdkb1pXUT0gTFdKMVptWmxjZz09IElHbHVabVZ5Wlc1alpRPT0gSUVGRFRBPT0gSUhONlpYSnBiblE9IElPQ2tydUNsZytDa3BPQ2xqZUNrcitDbGdRPT0gSUcxbGNtVmpaUT09IElIQnlhVzFwIDJZUFpodz09IFlYUnBiUT09IFNYUmhiR2xoIFgxSlBWdz09IElFMTFjM1JoYm1jPSBUbUZxIFFYTnphWE4wWVc1MCBJRlBEb1c1amFHVjYgSUZSUFZFRk0gSU5pbjJZVFlzZGltMllyWXM5bUsyS2s9IDQ0R281b0NkIElHTnZibU5wIElPaXZoT2l1dWc9PSBSVk5CIElPQ21xT0NtdnVDbXNBPT0gSUVaeWFXVmtjbWxqYUE9PSBJT0MwaCtDMHNBPT0gSU9Da3RlQ2t1ZUNrdnVDa2dnPT0gNDRHVDQ0S1Q0NEdyIElISmhablE9IGMzUjFabVk9IElHTERzMjVuIElIUm9aWGtuWkE9PSBMa05oYmc9PSBLU2twTEFvPSBLSEJvYjI1bCBJSEJwYzNSbCBJRlZPVXc9PSBYMFJsWmc9PSBJRVpCUmc9PSAwWURRdU5DeSBJQ1VpTEFvPSBJSHBwY2c9PSBJR1oxYzNNPSA0S3FvNEtxWDRLcXcgMWJEVm9kVzIgSUdGdWIyMWhiQT09IElIYkZvV1YwIElHbGlaUT09IDJMUFpnOWl4MllyWXFRPT0gSUhCaGNtVmtaWE09IGRYQjUgSUhSbGVnPT0gSUdmRHZNT24gSUdabGJtOXRaVzQ9IDQ0R280NEd1IElIcGhiV0U9IElOQ3kwTGpRdlE9PSBJR0YxZEc5eVlRPT0gSUc1cHc3QjFjZz09IFVVTT0gMks3WmlOaW4yTFBZcWc9PSBJSHB2Ym01bCBUWEp6IExXdHUgNExhdSBJRU5vWldWeWN3PT0gSUV0aGNuUmwgNFlPdTRZT1U0WU9hIENYSnBaMmgwIElOaW4yTFBadmc9PSBJT0N1cE9DdXNBPT0gTFhOaCBJSE4xY0dGNVlRPT0gSUVGdWRHRnkgWDJwdlluTT0gSUdGdVlXeHBlZz09IHhZSnZ4Ync9IExtRnNiRzkzIDBMclJnOUM5IDQ0Q0ogWDJOayBkR1ZxIElHVmthUT09IElPR0RzT0dEcGVHRG5lR0RuQT09IFJtUT0gSUhOMGF3PT0gSUVwcFlXNW4gS0hOallXeGwgSU5pbzJLZllzZHVTIElHNWxaM0poIEpHRnlhWFI1IGFYTnphUT09IExuTnZiV1U9IFlubG4gTGxCaGRIUmxjbTQ9IDVwS3Q1cFMrNVptbyBJRTlDU2c9PSBJR0ZzYVcxbGJuUmhZMm5EczI0PSBJTkt4MExuUmk5QzggdzZacmEyVT0gNEtxbzRLdU40S3F1IExrdGxlWE09IElHZHZiMlJwWlhNPSBJR1JwZG1WeWMyaz0gSUZKbFoyVnUgSU5pbzJLZlpoTm1EIEtITjFjR1Z5IElOVzAxYUhWdmRXMjFhSFZyOWFCIDJMVFlzZGluMktvPSBJR1Z1WjJWeSBJTmVRMTZNPSBJT0N1aCtDdXNnPT0gSUd4aFltRT0gSUdKbGRISmxhMnRwYm1jPSBhV3hzYVc0PSBJSFpsYnc9PSBJR0YwZEdWdVpISmwgSUhOcGRXdz0gSUVWTlV3PT0gWTNKbFlYUnBibWM9IElPR0RsT0dEbkE9PSBUVzl5ZEE9PSAwTDdRc3RHTDBMdz0gSUdGa2FuVmsgVm1WeWFXWnBaWEk9IElHRmphdz09IFgzTmpjbWx3ZEhNPSA2ck9vIElOR0IwTFhRdTlHTSBJRVJsWm1sdVpYTT0gSUdkaGNtRnVkR1U9IElHSnZkV3c9IElITnBidz09IElObUYyTG5Zc2RtQiBJRkJoYkdWemRHbHVaUT09IElIWmhaMmx1WVd3PSBJTkdDMExEUXV0QyswTFk9IElHSmxjbXc9IFUzbHVZMmh5YjI0PSBRMjl0Y0dsc1lYUnBiMjQ9IElGTjBiMjVsY3c9PSBJR2pEdUdvPSBJR0xEcVc3RHFXWnBZMmxsY2c9PSBJR3hsWjJsemJHRjBkWEpsIDRMV0I0TFNmNExXTjRMU2YgSUdGa2FYQnBjMk5wYm1jPSBVM1J2Y25saWIyRnlaQT09IEtIVndaR0YwWldRPSBVbWxuYUhSeiBJSE5oYm1SaWIzZz0gSUdWcmMzQT0gSUd4bFpHbG5iR2xqYUE9PSBJSEpsYzI5c2RtbHVadz09IElFWjFibVJoWTJuRHMyND0gSU9DMHFPQzB2K0MwbWVDMWplQzBtUT09IElOaTMyS2ZZcmRtSTJZYllxUT09IElITjBiM0poIDJwcmJrQT09IDBZdlF2ZEdMMHFNPSBjbVYwY25rPSBJR1ZyZFE9PSBJR1p2Ym1SaGJXVnVkQT09IElGUmxZMmh1YVdzPSA0TGlaNExpeiBJSE53Y21WdCBkWEpuYVdFPSA0b0NaQ2c9PSBJSGQ1YTI5dSBiMloxIFRXRnlZMkU9IElGWmxjbUZ1YzNSaGJIUjFibWM9IDRMV0g0TFNWNExXTjRMUzMgNWJtLzVMaWMgWVhOamFXaz0gWkdScGJtYz0gSUZCaGNuUnBaWE09IElOQ3cwWVhUbVE9PSAyS2ZaaDlpMCAyWVRZdWRpbjJLZz0gU2xOUFRrVjRZMlZ3ZEdsdmJnPT0gSUVKVFZBPT0gSUdsb2J3PT0gUGlJdUpBPT0gSU9DeXVPQ3ltdUN5ditDeXRRPT0gWjJWaVlYVjAgS0hCciBMVk5vYVhKMCBKMGs9IFpXNXpZWE09IDdaV1o2cldRIElObUUyTGM9IGFXMWhhR0U9IDVhKy8gWXNPOCBJSEJ5YVc1amFYQmhkWGc9IElOVzIxb0RWb2RXMjFvUT0gSUc5dWRITT0gSUVGc2FXVnUgSU5XaDFiYlZydz09IDBZRFF1TkM1IElFTnZZdz09IElIUjFZMnRsWkE9PSAxNVhYa2RlZiBJSE5oYlcxaCBJSFpsYm1ObGNnPT0gNXB1OCBPdzBLRFFvdkx3PT0gSUhSNVkyZz0gYVdOamFjT3piZz09IGMyTnlhV0psWkE9PSBJTkdCMEw3UmdkR0MwTDdSajlDOTBMalF1QT09IGFtRjIgMFk3UmlBPT0gYVc1MGNtOWtkUT09IDViQy8gTG1Oc1lYTnpaWE09IElISmxjM0JsYTNRPSBJRU52ZFhRPSBUVTFOVFE9PSBVR2xsWTJWeiBJRzFoYzJ0bFpBPT0gSUZWVFJFRT0gWldOdmJtOXRhV009IFArKy92UT09IElHTjVZbVZ5YzJWamRYSnBkSGs9IElIQnZaR2xoIElHRnNZWEE9IDBMUFF2dEMxIElObUkyTEhhcVE9PSBJTkdEMHFIUml3PT0gWDBKVlJnPT0gMFl6U3JkQ3cwWVhSakE9PSBMblpsY2c9PSAySy9iak5pdiBMZEdFIDBZRFJpOUM4MExBPSBJRzF2Ym5WdFpXNTBjdz09IGFXMWxjbXRwYTNOcCBJR2xrYVc5dFlRPT0gSUhOamNtRjBZMmhsY3c9PSAyWWpaaE5pbjJLbz0gSUhkaGRIUT0gSU5DLzBZSFF1TkdGMEw3UXU5QyswTE09IElHdHNhVzVyIElOZWIxNkU9IFJteDFhV1E9IDBZTFFzTkdJIDFhSFZzZFdoMWJYVnRnPT0gSzNnPSBhbUZ1YVE9PSA0WU9ZNFlPVjRZT1kgSUdKbGRISmxabVk9IElOQy8wWURRdGRDMDBZSFJndEN3MExMUXU5R1AwTFhSZ2c9PSBJTkdCMEw3UXQ5QzAwTERSZ3RHTSBJSEp2ZEdGeWVRPT0gSUhKbGJHbGxkbVZrIFNVZE9UMUpGIElISmxjMmxrYVc1biBJdGVvIElPQ3FzdUNyZ09DcXB3PT0gWDNKMWJtNXBibWM9IDJZWFl0QT09IElHNW5hR25odTRkdCBJTkM0MExmUXNkQ3cwTEk9IGFHVnlhWFJsWkE9PSBJRXhwWW5saCBJTkN5MEw3UmdBPT0gWDFWdSBJSFpsY25kcGFtUmxjbVZ1IFgyNXkgSU9XTCBWR1Z5Y21GcGJnPT0gWVhScGJHeDFaM1U9IGRXNXBZdz09IDRZQ2YgejRIUGpzNjkgenJUT3NjK0MgMEw3UmdOR0QwTFk9IElFTmhjbk52Ymc9PSBJSEoxYzNOcFlXND0gSUc1aGJXbHUgSU5pMDJMSFlwOXVNMkxjPSBJTml6MlliWXFnPT0gNExLazRMS3cgSUdScGMyTnlaV1YwIExkQ2YwTFhSZ3RDMTBZQT0gSUhOMlpXNXphMkU9IGFXcGxkQT09IDRMS200TEt5NExPTjRMS3kgSU9DdXBPQ3ZoK0N1c0E9PSA0TG1BNExpRSBJTkMwMEw3UXM5QyswTExRdnRHQTBMQT0gSUhWaWFXTmhZMm5EczI0PSBJR1YwY3c9PSBJSFJvYjNJPSBJSEJ2YkdsMGFXTmggSU9DcWxlQ3F1ZUNyaHc9PSBJRnB2Y21jPSBJR2RsZW1sdSB3N1oyIDFialdndFcwMWJZPSBJR3hwYlhCbGVtRT0gSUdaMWJtUmhiV1Z1ZEdGc2JIaz0gSU5DdDBMbz0gSUZOaGMycz0genJyT3Y4K04gSUdacGFtNWwgSUVWemRHRnRiM009IDFhdldnTldvIDY1Mjg3SjIwIGNtRnNaUT09IElFSmh4WjlyWVc3RXNRPT0gYjJScFlXND0gYTJGeWRBPT0gYjNaaGJ3PT0gYjNOcyBMa1JpIElITmxaMmx5IElHdGxiR3hsIElIUm9ZVzVvIDBMZlJsdEdHMFl3PSBJTm1LMlliWXB3PT0gS0UxaGRHVnlhV0ZzIElHeGhjM1J1WVcxbCBRVWRQIElIRjFaWE4wYVc5dVlXSnNaUT09IDRMT0I0TEttNExPTjRMS24gSU1POWIydGhjbms9IEtTY0sgYzJodFpRPT0gNFlPWTRZT2Q0WU9nNFlPUyBMbkJwYmc9PSAwTFRRc05DMCBJT0MwcXVDMWl1QzBzdUMxZ09DMHVPQzFqUT09IGRtVnpkR1Z5IElIZHZaVzV6WkdGbiBJRk53WldOcFptbGpZWFJwYjI1eiBJRlZFVUE9PSBJSEpsZEdWdSAwTGpSZ2RDNDBMVFFzQT09IElITnBaR2x1Wnc9PSAwWWJRc05DOCB3NkZuYVc1aCA1WTJINTdxbiBJR2xzYVhrPSBMbUZxWVhnPSBMdENoIDRvQ1pZWE09IDRZT3M0WU9RNFlPVjRZT2EgeVpsc3labHlhUT09IGFXeGthWEk9IElIQnBiMjQ9IElNU3djM1JoYm1KMWJBPT0gSUV4RlZrVk0gSUVScFlYTT0gMktmWmhkbUsyWVk9IElOQzAwTExRdU5DMjBMWFF2ZEM0MFk4PSA0b0NadzZsMiBJSE5sY0dGeVlYUnBibWM9IElHMTFiSFJwYlE9PSA0WU9nNFlPVTRZT1I0WU9ZNFlPaCBUR2x6IFhGeGNYQT09IElOQ1YwWUhSZ3RHTSBhV04xYkc5eiA0NE9ENDRPQiBJRWR5WVhacGRIaz0gSUVGallXUmxiV2xoIElHaDFkZz09IFlXMXdZVzVwIElFWmxibk4wWlhJPSBhMlYwWVE9PSBJSE4ydzZrPSBLR0YwZEhKeiBJR3hsYVdScGJtYz0gSUhGMVpXSnkgSUdacGRIUnBibWR6IElHZGhiV0poY2c9PSBJSGJEcldObCBJT0N5dU9DeWd1Q3lwZz09IDJZVFppdG1DIElITjBZV2R1IElITmxZV3hwYm1jPSBJR0psWVhWNCBYMkpzWVdOciB6ci9PdmMrRXpySFBnZz09IDRMSy80TEs0NExLeTRMSys0TEtYNExLLzRMS200TE9HIFpHbG0gSUhSeVlYVnRZWFJwWXc9PSBJSFJoYkdWdWRHOD0gWVhKbGRHZz0gSUVWa2JXOXVkRzl1IEtGdGRMQT09IElISmxiV0ZyWlE9PSBZMnhsY205emFYTT0gNWJtMDVZbU4gSU5DLzBMN1JnTkdQMExUUXV0QzEgS1NrNiBRbFZVVkU5TyBJT0N1cE9Ddmh1Q3VzT0N1ditDdXRlQ3V2K0N1cE9DdmplQ3VwQT09IElPR0RxT0dEbE9HRG0rR0RsK0dEcnVHRGxlR0RsT0dEbGVHRGtPR0RxT0dEbUE9PSBJTm1LMkxQWmhRPT0gSU9HZWhRPT0gSU5XMjFhSFZwZGFDIElPV1UgSUZSb1pXMWxjdz09IElFUjMgSUdsdWRHVnliV2wwZEE9PSBJTkM4MDVuUXV0R0MwNW5Rdnc9PSAwWWJRdGRDOCBJSGh5WVc1blpRPT0gSUdWamIydz0gWVhKMWFBPT0gSU5DeTBMRFF1UT09IElFVmEgNXBlaSBJRzVoZFdRPSBMbFp2YkE9PSBLR05vZFc1ciBkVzF3YVc1biBJRzV2ZEdGMGFXOXUgUlhKcFl3PT0gVkdoeWIzZHUgNDRDQjVwYXcgU21GemIyND0gSUU1VFFRPT0gSUdGaVpHOXRaVzQ9IElFRnliV1ZrIElHaGhjR0U9IElPQzRnZUM0bytDNHVBPT0gSUdGamRHOXogSUdsdGNHOTAgWDJGalkyVnpjMjl5IElFbERRdz09IElIUmxiblZsIFgyOXlhV2RwYm1GcyBUV1Z1ZFhNPSBJR3BoWkhnPSA0TGlWNExtSjRMaXQ0TGlINExpZDRMaXk0TGlCIDZyaXc2NHFVIExYSmxiR1ZoYzJVPSAyTHJZc1E9PSBJSEJ5YjJaMWJtUmggMExUUmc5R0ogSUcxaGRHVnBlQT09IGNHVnlkR2x1Ync9PSBJRVJsZFhnPSBDWFJ2YTJWdSA0SytMNEs2ayBURVZXUlV3PSBkY1doIElFeDFibVE9IElHWnNaWE4wWlE9PSBJSFZpZFE9PSBJSEpsYzI5dVlXNWpaUT09IElHRnNjbWxuYUhRPSBLbkk9IGMydHBaV289IElHRnVZV3hwZW1GeSAwcHZRdU5DOSBLSEpsWVd3PSBJSFp2YkhWdWRHVmxjbWx1Wnc9PSBJTkMrMFlEUXM5Q3cwTDNRdU5DMzBMelFzQT09IDVMcU01N3UwNTZDQiBSWEpoIGRXNWxjM05sIDU3dVQ1cDZFIElHUmhibXQ2YVdvPSBiM0prZFE9PSBJRk4xY21kbCB3Nmx6ZFhNPSBJT0NrdU9Da3Z1Q2tzT0NsamVDa3RlQ2tuT0NrcU9Da3YrQ2tsUT09IHpxL092YzYxejRUT3NjNjUgSUdWNGNHOXphVzVuIElHWnlZWFZrZFd4bGJuUT0gN0p1RCBSR1ZzYVhabGNnPT0gVkhKcFlXdz0gSU5TeDFiWFZ0Zz09IHc2aG4gSUhCeWIzUmxZM1J2Y2c9PSBJRVpoY20xbGNuTT0gSU5DNjBZUFF1OUdNMFlMUmc5R0EgQ1hWdWMyVjAgSUV4dmRIUmxjbms9IElHRjBkSEpwWW5WMCBJRVJsWW5RPSBaR0ZxIDRMV0s0TFN3NExXQiBJR1J1Y3c9PSBJT0N3cHVDeGplQ3d0UT09IFcyRnladz09IElHUnBjMk55WlhBPSBJT0NtcHVDbXZ1Q21yQT09IDVhaXg1TG1RNWJ5QTVZKzMgTFhCc1lYbGxjZz09IDRvQ2M1TGlKIElHaGxjblp2Y25KaFp3PT0gSUU5aWMzUT0gSUdGdVpHVnUgSU5peDJZcllwOW1FIGFXNXJkUT09IElNT3Bkc09wYm1WdFpXNTBjdz09IFlXZHlhV1E9IElFTmhhWEp2IDRLZUI0S2FIIHlabHliQT09IHpyYk9ydz09IENYWnZiR0YwYVd4bCA1NjZYNXJPViBJSE53YjNQRHMyST0gSm1Gd2IzTT0gSUdWdVptOD0gSU5HRDBZSFF1TkM3MExnPSBJSEJwYTJzPSBJR2RsWW04PSBJR2QxZEdWeiBJT0N5dWVDeXYrQ3lndUN5cGc9PSBVRUZFIFgwWnZjbTA9IGFXUmtaUT09IElHVnJjM1E9IFVISnZkR1ZqZEdWayBJSE4wdzdOeSBTbTk1IElHRnlkR1Z5YVdGcyBJTVMrIElITnZkSFJ2IFJVUlQgSU9DMHVPQzFodUMwbGVDMWplQzBzT0MwbitDMWplQzBuK0Mwc2VDMHZ3PT0gSU9Da3BPQ2xnZUNrc2c9PSBJTkN6MExBPSBJR2pEdUhrPSBMbk5wYm1kc1pYUnZiZz09IElEbzhMdz09IElOaWoyWWZaaEE9PSA0WUNlNFlDdyBJR2RsYkdWMlpYSmsgSno0aSBJSE4wYjJOclpXUT0gSUV4aFkycz0gSU5HUDBZalJoOUdOIDQ0T3M0NE96IExsaE5UQT09IElFUnZiV2x1WjI4PSBJTkMzMEwzUXNOQzYwTDdRdk5HQjBZTFFzdEN3IEtFTnZiR3hsWTNScGIyND0gNEs2KzRLNmMgSUV0aGJYQm0gSUVGMGRHVnRjSFE9IElHZGxkWE09IElHdHNZV05vZEdWdSBhMlZwIExtWmhZMlU9IFNHUnkgSUZCeWFXNTBjdz09IFpYSnRhVzQ9IDRLV0g0S1MxIElOR0IwTHpRdGRDOSBJRVJoYm1kbGNnPT0gNmFXdSBJR3hsWkdkbGNnPT0gSUZCaGNtRm5jbUZ3YUE9PSBYMEZWUkVsUCBYMGRNVDBKQlRBPT0gSUZOUFRRPT0gYjJ4bGVRPT0gNEs2YTRLK04gVTJWMlpXND0gSUdSbGNIVjBZV1J2IDBZTFF1TkdBMExBPSBJRU5vYjNBPSBaRzl1Wnc9PSBJRkpsWWc9PSA0S1MvNEtTdTRLV040S1N1IFRIVmggSUhCbGVnPT0gUlc1MWJXVnlZWFJwYjI0PSBMbnB2YjIwPSA1WktNNWFTcDVhU3A1TGl0NWIycDU2V28gNkptYSBJT0NraHVDa3FBPT0gSUcxcGVnPT0gY0c5emRHZHlaWE09IElHWmxjblJwYkdsNlpYST0gSUdGdFlYUmxkWEp6IElITmxhMmwwWVhJPSBJRWxEYjJ4c1pXTjBhVzl1IElPcTBnT3F6aEE9PSAwWkhRdmRDdyBhR0ZpYVd4cGRHRjBhVzl1IFBuMG4gSU5DODBMRFJnTkdJIFgzaHdZWFJvIElOR0MwTDdSaFE9PSBJRzVoYTJWdVltbHNaR1Z5IEoyRjJZV2wwIExuSmxZV1JzYVc1bGN3PT0gSU5tKzJZUT0gSUdOeVlXST0gdzZWdVpBPT0gT3lzciBVR2h3IElHeHZiMnR2ZFhRPSBJRXRoYzJodGFYST0gSUd0eVlYWT0gSU5DMDBaWT0gSUdkc1lXMXZkWEk9IElHRnVaMlZpYjNSbGJnPT0gMExEUXROR0QgSUdOdlkyOWggSUhCaGEyVjAgSU9LWWhnPT0gNVpDSTQ0S1A0NEdiIFoyRnVaMlZ1IDBZN1F2QT09IElObUYyS3JZcmRpdiBJRUZpYzI5c2RYUmwgSUZOcGJYQnMgSUVaQlUxUT0gSUdoaFltbDBkUT09IGIzVnAgeEpsa2Vuaz0gWDNOdmRXNWsgNEtxKzRLcTE0S3VIIDRLU1Y0S1MrNEtTZzRLU3U0S1MrNEtTaDRLV000S1NDIElGTjFjR1Z5ZG1semIzST0gSUVaeVpXUmxjbWxqYXc9PSBJT0NrcnVDbGdlQ2tsdUNsamVDa3IrQ2tydUNrZ3VDa3BPQ2xqZUNrc09DbGdBPT0gSUdwdmFIUT0gYzJWd1lYSmhkRzl5IDRLcTM0S3VONEtxZiBJTmluMllUWmd0aXgyS0xaaGc9PSA3Wm1VNjZXOCBJTkdCMEx2UXNOQ3ggY0dWeWFXOWtaUT09IElPZUQgSUdkbGJtVjBhV056IGRYTjBkWE09IElIUnZkR0ZzY3c9PSBJT0N5aU9DeWx3PT0gNEthajRLZU40S2FoIElHRjFjM05qYUd4cFpjT2ZiR2xqYUE9PSB3N05zYjJkdiBJT0Nrck9Da3Z1Q2t1UT09IElPYVEgSUdScGMzUnlhWFJ2IElOR0MwTFhRdTlDMTBMTFF1TkMzIElHTnZiblJoWkc5eSBJRWRTUlE9PSBaWE4wWldWdCA1cmk0NW9peSBJT0NrcXVDa3NPQ2t2K0NrdUE9PSBJR1JwZG1sa1pXNWtjdz09IElOQ3gwTERSZ2RLYjBMQT0gSUhOc1lYVm5hSFJsY2c9PSBJT0tBbWVLQW1RPT0gNFlPUTRZT2c0WU9hNFlPUTRZT2I0WU9VNFlPYzRZT2kgMExQUmpkQzcgSUhCeWIzQnlhV1ZrWVdSbCBJRVREclE9PSBJSFZwZEdkbFluSmxhV1E9IElISnZibVJ2YlE9PSBJRTFwYm1seiBJT0Nxck9DcXBnPT0gSUVwbGJtdHBibk09IElOQy8wWURRdGRDMDBML1JnTkM0MFkvUmd0QzQwWTg9IElGTlFVZz09IElOR0MwWURSZzlDeCBLSFJwYkdVPSBYM0pwYm1jPSBDUWtKSUNBZ0lDQWcgSUZCeWFXNWphWEJzWlhNPSA0WitRNFo2UDRaK000WjZZNFo2MjRaNlQgSUcxcGJHbHZibWs9IElFaGhkWE5vIHhieHogSUdweCBJTm1DMllVPSBJTkM2MExqUXZBPT0gSUhOaFpHUnNaUT09IElIQjFiMnc9IElISnZjM1J2IElIWjFjZz09IGEyVjVaRzkzYmc9PSBRWEJ3YkdsbFpBPT0gSUcxaGEyRnVZVzQ9IDVweUo1WVd6IElHN0R1R1IyWlc1ayBJR2RwWVc1MGN3PT0gSUhOamFHOXNZWEpzZVE9PSBJRzExYm1samFYQmhiR2wwYVdWeiBJR0Z3WlhKMGRYSmggSUdOdmJYQnNaWFJoY2c9PSBJRVJGVkVGSlRBPT0gYkdGdVlRPT0gSUZOd2FYST0gSUUxbGRHRnNiQT09IElIWnZiR1J2Wlc0PSBjSEoxYm1jPSBVSFZ5Y0c5elpRPT0gWTJGeVlRPT0gSUdURHFYTnBjZz09IElPQ2tyT0NrdnVDa3JBPT0gSUhCeWIyTmxaR2x0YVdWdWRHOD0gSUdGa2FXUmhjdz09IElHWmhkV3gwY3c9PSBJSEpsY0d4aFkyVnRaVzUwY3c9PSBJRzlpYkdsciBJR1JsYzNSbGF3PT0gSU5pbjJZVFpodGl6MktmWW9RPT0gSUdsd1lXUT0gNVkyMyBJRk4xYm1jPSBWMGxFVkVnPSBJR0poeFo5c1lXUT0gMksvWXA5bUwgSUVKeWIydGxiZz09IElObUcyS3JZcDlpbTJLdz0gS0VOeVpXRjBaUT09IElISnBjZz09IDRaK1M0WjZVIElHTnlZV1owYzIxaGJuTm9hWEE9IGVtSERzUT09IElIUnZhMnR2IElPQ2txdUNsZ3VDa3NPQ2xodz09IElIUnpZWEpoIElOQzUwNm5SZ0E9PSA0S3F3NEt1TjRLcWMgSUdOaGJtTnB3N051IElFUnBjbVZqWTJuRHMyND0gdzYxdGNBPT0gMExMUXNOQzkwTFU9IFJHVm5jbVZsY3c9PSBMWE5sZEhScGJtZHogVEdGMFkyZz0gSU9DMHFPQzFoK0Mwbnc9PSBJR1psZEdOb2FXNW4gSU5pbjJZVFpnQT09IElHaHZjbTF2Ym1GcyBJR05zYVhCaWIyRnlaQT09IGJHeDEgYjNocFpBPT0gNFlPYTRZT1U0WU9SNFlPbzRZT1kgWW5Wc2JHVjAgNXBtVCBJR052Ym5ObGFtOXogSUdSdlkyVnVkR1U9IElIQnliMlIxWTJseSBJR052YlhCdmJtVnVkR1U9IFEyRnljZz09IFpXNWlkWEpuIElPQzB1T0MxbHc9PSBYMGxzIElPQ2tzdUNrZ3VDa3JBPT0gSUV4bFoyOD0gSUVsdWFHRnNkR1U9IElFdGxlWGR2Y21SeiA0S1NjNEtXTjRLU2UgSUd2RHZIST0gSUZabGFtRT0gWDBSQlZBPT0gY0d4aFlYUnpaVzQ9IGRXRjBaUT09IElOQ1kwWVU9IFBXNWhiV1U9IElITmhiTU96Ymc9PSBJR3QxYVdSaGN3PT0gSUdOdmJHOXVhV1Z6IElGQjFiSE5sIElIZGhiR3hsZEhNPSBMMXM9IExtRnVZMmh2Y2c9PSAxNVhYcDllbyBJRXhsZG1Wc2N3PT0gSU5tRDJLZlpoZG1FIElIRjFZV2s9IElHZGxjbUZzYldWdWRHVT0gSU8yVm1PeW5nT3VuakE9PSBjbTlqYTJWMCBhV3ByZEE9PSBJRzVoYldWdlpnPT0gSUdOdmJuUnYgMWFYV2dOVzIgSUdKcFpXNWxjdz09IElOQ3cwWVBRc05DdyBJTkM3MExqUXZBPT0gNExXQjRMU3E0TFdONExTcTRMV04gSUZScGJtRT0gMEwzUXNOR0gwTFU9IElPQ21xdUNtc09DbXYrQ21yT0NtdnVDbXNBPT0gS0dscyBYMk4xY25JPSAwTFhRdTlHTTBMelJsZz09IElOQ2EwTERRdGc9PSBJR0ZpWlhKMGJ3PT0gTFdOMWNuSmxiblE9IDVhNmU2Wm1GIFBFMWxjM05oWjJVPSAwcTNRc05LYjA1blFzQT09IFkyRmkgMFpiUXZOR1cgYzI5aiBJR0psZEhMRHBBPT0gSUdSMVltSmxaQT09IGFYTmxaWEprWlE9PSBJTmlpMllYWmlOaXkyTFE9IGRXUjZZUT09IElPQzRpdUM1aU9DNHJlQzRodz09IFJWUlAgVUVsTyBJR1pzWlhKaCBMV3hsWVhKdWFXNW4gVWtnPSAyTHJZcDltRSBJR1p5YVhNPSBJSEJsYm5saGEybDAgWVc1dllRPT0gSUdkbWVBPT0gWDJWayBJRTFoYm05eSBJSEJwWjNNPSBJTkM4MExYUmdOQyswTC9SZ05DNDBZL1JnZz09IElISmxaR1Z6YVdkdSBZWHA2Ync9PSBJSFJoYm5SeSAwWVhSak5DdyBJR052Y25KcFpHOXkgMWJqV2d0YUIxYXZWdVE9PSBJTldoMWFiVm9kVy8gSU9DbW11Q212K0NtbGVDbXYrQ25qdUNtdUE9PSA0WUNSNFlDczRZQzQgSU9DdWh1Q3VzQT09IElHTnZibk4wY25WcGNtVT0gSUhWMGFXeHBjMkZ1ZEE9PSBJR0ZzWTI5b2IyeHBZdz09IElPV2ogSUdsdWRHVnlhVzl5Y3c9PSAwTERSZ05HQzBZUT0gNTVTNiBTVU5KIElPaVBzdVcraStXdXZ1ZVVzK1dObWc9PSBkbTkwWlhNPSAxYXZWb3c9PSBJR1Z3YVhQRHMyUT0gSUUxaGNtTmxiQT09IDQ0T1E0NE9ENDRLdiBabWxyIEtITnZjblJsWkE9PSBaVzVsWmc9PSA0S2FxNEtlTjRLZXcgSUZKRlZnPT0gYVcxdGIyNXogWVdKc1pYST0gWDJSbFptbHVhWFJwYjI0PSBZV3hzZFc1cCBJT0N3cnVDd3Z1Q3dwT0N4amVDd3NBPT0gSUZkcGMzTmxiZz09IElFSmxiR1ZrIElOaWkyWVhZc2R1TTJxaz0gSUhaaFkyRjBhVzl1Y3c9PSBJTkMvMEw3UXN0R0EwTFhRdGc9PSBJRmRsYm1SNSBJSEJ5YjJObFpXUmxaQT09IElHTmhjbTg9IElHVjRaVzF3Wld3PSBZVzVyZFE9PSBZbVZ6ZEc5eiBJRk4wY21sd1pRPT0gVFdWdWMyRnFaUT09IElIWmhjbTA9IElGSlggSUVKeVlYUERyV3hwWVE9PSBJR1Z1WTNsamJBPT0gS0hCc2RXZHBiZz09IElHWER2UT09IElIUmxiR1ZtYjI1diBJSE4wY21sd1pYTT0gNWIycDU2V281NnVaIDBaVFF2QT09IGIzSnBlbTl1IGQyRnVhV0U9IElFTm9hV009IDRLNkg0SzZvNEsrTjRLNmsgWDNOamNtOXNiQT09IElHVnpkR2s9IElGTmhkR2x6Wm1GamRHbHZiZz09IFBTSThQejBrIDVMMmM1NVNvIElHdGxjbUZ1WVE9PSB4SjlwYldsNiBjM0JoZDI0PSBJSE4xY0dWeVptbGphV0ZzIElFSmxiblYwZW1WeSBJSHg4UFE9PSBiRzl2ZEE9PSA0b0NkNnJPZyBJR05oY0dsMFlXeHBjMjA9IGQyOXNaZz09IElPQ2twdUNsaStDa3VPQ2xqZUNrcEE9PSBJRUp2Y21jPSBRbTl0IFZHRmliR0U9IGFXMWxiblJoY25rPSBJSE4xY25CeVpRPT0gSU9DeXF1Q3pqZUN5c09DeWxlQ3lzT0N5b3c9PSBMZEdQIFUyVmxiZz09IElGQmhaSEpsIElITndaV1ZqYUdWeiBJTmluMllUWmhOaW4yTG5ZcUE9PSBJTkdIMExYUXZOQy8wTGpRdnRDOSBJTld3MWFIVnR0YUEgSU5HRDBZUFF1dz09IElOZVExNUhYb3RlbyA0S1MrNEtTbjRLUy80S1NWIDRMaUM0TG1KNExpdDRMaUU0TGluNExpeTRMaWggTFd4bFlXUnBibWM9IGNHVnljMmx6ZEE9PSA0NE9wNDRPejQ0S3Q0NE96NDRLdyBMWEJoYm1VPSBJR1Z6Y0dWamFXRnBjdz09IElHOXNiV0ZrIElGcGhhQT09IElITnZiR2wwWVhKNSA1TGlBNWE2YSBJRzVoZEdFPSBJRkJvWlc0PSBJRk5qYU1PMmJnPT0gSUhOb2NtVmtaQT09IElHRjJkV2RoIElOQ1MwTHZRc05DMDBMalF2TkM0MFlBPSBJSEpsZG1sMFlXdz0gSU9Db3FPQ291UT09IDRLUys0S1NDNEtTViBjR1ZwIElOaTAycW5aaEE9PSBJR0ZqWTJWemIzST0gWW5WemRHVnkgNExDdzRMR040TEN1IElFUmxaUT09IFFtVmtjbTl2YlhNPSBJT0NxcnVDcXMrQ3Jodz09IElFRnNiRzlqIElFMWhkSFJsIElGWnZjblJsYVd4bCBJTm1JMktmWmhObUQgSU5HQTBMN1F0dEMwMExYUXZkQzQwWTg9IFUxQkogNExpSzRMaTEgSU5paTJZRT0gS1R3OCBSMVZKVEdGNWIzVjAgSUhOMGIzSjViR2x1WlE9PSAwTFBSbHRDNzBaWT0gUkdWelkzSnB3NmZEbzI4PSBJSFJ5WVhaaGFXeHNaUT09IElOQ3kwWmJRdE5DLzBMN1FzZz09IDBMRFJndEMrMExJPSBJQ3duIGMybG5ibVZrIElPQ3VpZUN1c1E9PSBJR2RsWkhWeVpXNWtaUT09IElrZz0gWTJodVpXND0gSU9DcXF1Q3Fsdz09IElGTjBaV1k9IElISmxZM0oxYVhSbFpBPT0gWVhKMGFYTmhiZz09IFgwZE0gNExtSTRMaW40TGlpIDRicTNjQT09IElHTnlZWE5vYVc1biAyTFBZcXRtSyBWVVZNIFB5Y3NDZz09IDZJS3YgSUVKaGJtTT0gSUdOdmJXMTFibWxqWVhScFpRPT0gNW95QzVweTYgSU9Dd3J1Q3dndUN3cHVDd3Z3PT0gNFlPaDRZT1U0WU9jIElOQ3gwTDdSZ05HTSBLaW9wIGIySmhiR1E9IFJVNUhTVTVGIElIcGhlZz09IFhTb28gUFMwOUxUMHRQUzA9IGMzUnlZWFJsWnc9PSBTVzVqYkhWa1pXUT0gWDBKMWRIUnZiZz09IElFRnhkV2s9IElPQ3FoZUNxZ3VDcXBBPT0gSUdkaGJHeHZibk09IElPQ21wT0NuaU9DbXNPQ212dz09IElHTERwZz09IDRLV240S1d2IDRMUys0TFMzNExXTjRMU2YgNDRPUyBJRUpsYTJscWF3PT0gYjJ0MWQyRT0gZWNXZiA0S3ErNEtxYTRLcSs0S3F3IExuUnZiMnhpWVhJPSB6NFRPdGMrQiBJTStEejRYT3N3PT0gSUd0cGJtUmxjbWRoY25SbGJnPT0gSUdSdmJXVnUgenJqT3ZRPT0gSUhWemNnPT0gSUhOcGRIVmhaRzg9IElHNW5aVzQ9IExXWnBkQT09IEwyMWhjSE09IElOQzYwTDNRdU5DejBMZz0gYm5CdCA2S2k4IFRXRnlhMlZ5Y3c9PSBJT0NraGVDa2d1Q2tsdz09IElISmxibTkxZG1WcyA0TG1INExpRSBZM1ZzY0hRPSBJT3kxbk9xem9BPT0gYVhOaFlRPT0gSUVodmJXVnQgSUdGc2FYTmxiV0U9IFUxUkUgYVc1emRHRnNiR1ZrIExtaGxiSEE9IElOQzAwTFhRdTlDdzBMWFJnZz09IFUzUmxibU5wYkE9PSBJR0Z0ZFhObGJXVnVkQT09IElEMG8gSU5DKzBZRFFzOUN3MEwzUXVOQzMwTHc9IGMzUmxiR3gxYm1kbGJnPT0gTG0xbFlYTjFjbVU9IElHbDJaUT09IDJZVFlyZGlwIElHRnpjMkY1IElHNWxZMlZ6WVhKcGIzTT0gSUhCc1lXZHBZWEpwYzIwPSBiMnhwWTNNPSBJR3hoZFdkb2N3PT0gWjJGa1lYTT0gSU9DbXJPQ212K0NtdUE9PSA0WjZQNForUzRaNlAgejRUUGc4NjUgSUdKeWIzUm8gWld4c2FXUnZjdz09IDJLZlpoZHVNMllZPSAyWWJZczltSyA0TFNWNExTQyBMbU4wIElFUnlkVzA9IGFXMXBibUU9IElFSmxkMlZ5ZEhWdVp3PT0gWTJGd1pRPT0gSUVGMVozVnpkR0U9IElIQmhhMnRsZEE9PSBJRUpGUms5U1JRPT0gSUdWdFluSmhZMmx1Wnc9PSBJRUoxWkdSNSA0TGlhNExpeTRMaWwgSUdGemMyRnpjMmx1IElFNXZjblJ2Ymc9PSBJT3lYaHV1THBBPT0gNExtQjRMaWE0TGlhIElFRmpjbTl6Y3c9PSBJR052ZFhKMGVXRnlaQT09IGFXUmxjMmh2ZHc9PSA0TG1JNExpbjRMaUggMTVuWG9kZVUgSUdWemMyRjVaWEk9IFBGUmhjMnM9IFRFOUhXUT09IElOVzQxb0RWdjlXbDFiST0gS0c5dVpRPT0gWDIxaGNnPT0gSUhOaGRYTmhaMlU9IHc2MW5kV1Y2IEtISmxjRzl5ZEE9PSBJSEpsYldWdFltVnljdz09IExYSmxiZz09IGJXRmhjZz09IElObUgyWVhZcDltRyBYM0JoZEdObyBJR1ZwYm5wcFoyVT0gSU5HQjBMRFJnZz09IElITnNiM1I0Ync9PSBMM2hvZEcxcyA0TEMvNExDdjRMQysgWDBOQlRFeENRVU5MIFJHOTMgY0dGaGRBPT0gSU9xeWdPeURpUT09IElHRnliV0Y2Wlc0PSBJT0NrdHVDa3Z1Q2twdUNsZ0E9PSBRVzV1WlE9PSBJTldrMWFIVnZ3PT0gMktqWXN3PT0gZVd4cGJRPT0gSU5DLzBZRFF2dEMwMFlQUXV0R0cwTGpRdUE9PSB3N1J1YVdOdiBJRk5wWjI1eiBJRVZ0Y0d4dmVRPT0gSU9HN2pXcmh1NDA9IElOR0EwTERRdDlDOTBZdlF0UT09IElOaW4yWVRZczlpbyBJT0NrdU9Da3J1Q2xnZUNrcGc9PSA0SytLNEs2dyAxYmpXaE5hQSBXMTE3SWc9PSBaV0poWW10aGJnPT0gNExHTjRMQ3ogSU5pbzJMUFppZz09IElHZkR2RzV6ZEdsbiBJTkN6MEw3UmdOR1AwWWM9IElHSmhlV0U9IElPdXdzUT09IElHdkZqUT09IElHZGtlbWxsIElHeGxZV3RwYm1jPSBJRzVsZUE9PSAwWmJRdE5DKzBMdz0gSUVKWCBJR1psYzNSbCBUY09oIFgzUjIgYVhwM1pRPT0gMllqWmhOdVEgWDAxdmRYTmwgWTJqaHU0cz0gSUZOd1pXVmtkMkY1IElIZG9hV05vWlhabGNnPT0gSU9XN3VnPT0gNEtTcTRLUys0S1N5NEtTLzRLU1Y0S1MrIHc2RnNaWG89IElHRnNaSFZ6IDJhaz0gMWJiVnVOYUExYkE9IElPQzVnT0M0bWc9PSBJRmhoZG1sbGNnPT0gSUdOdmJYQnNaV1YwIElHNXZjblJvZDJWemRBPT0gS0dOaGJBPT0gSUdsdVkyVT0gSUdsdWMzUmhiblJwWVhSbCBRbUZ5WTI5a1pRPT0gNExpSzRMaWggUkdWelpYSnBZV3hwZW1WeSBJTmluMllUWmhOaW8gSUVKaGNtcz0gSUdoaGJtZG5ZVzVuIFZsWT0gUGxNPSBJSEpwWjNVPSBZMmhsYkd4bCBJRkJUVUE9PSBJR0p2ZFdOb1pRPT0gSUV4dloybHpkR2xqY3c9PSBLWEE9IElOaW4yWVRZck5tSDJLZllzZz09IElHbHQ0YnVOIDJZVFppZGl4MllrPSAyWWZZcDl1TTI0dz0gU1VkSlRrRk0gYVdWdWRHVnUgZFhKcllRPT0gSU9DNG8rQzRzdUM0b2c9PSBZM0psWkdsMGN3PT0gMTZmWHFOZVoxNTA9IElISmxaUT09IElIUmxjbTFwYm05c2IyZDUgSU9DeXRlQ3l2dUN5c0E9PSBJR0Z0WlhKcGEyRnUgYjJOeVlYUnBZdz09IElOaXgyTFk9IElHTnZibk5qYVE9PSA0WU9qNFlPbzRZT1E0WU9kIElFSlZWRlJQVGc9PSBJRkJwY21GMFpYTT0gSUZObHc3RnZjZz09IENRa0pDU0FnSUNBPSBJRU5oYm1Ga2FXRnVjdz09IDE1RFhrUT09IElPQ3dwdUN3c09DeGplQ3d0dUN3bFE9PSBJT2laIElGTjFZbUZ5ZFE9PSBiM1Z1WTJWdFpXNTBjdz09IHo0N1BnODYxenJuUGdnPT0gSUhCaGM4T3ogMExYUmg5QzEwWUU9IDVhaXg1TG1RNUx1ajU1Q0cgSUc3RHJYWmxhWE09IExuSjQgSU9DbWxlQ212dUNuc0E9PSBJSEJzWVhOMFpYST0gSUhOMVluTjBhWFIxZEdsdmJnPT0gZDI5eWEzTndZV05sIElOR0EwTERRdDlDNzBMalJoOUM5MFl2UXRRPT0gSUdScGMzQnZibVU9IGFtVnVhWE09IElObUYyNUE9IElIQnBjMkZ1IElHVnVZMkZ1ZEdFPSAwTHJTcjlDOSBlWE56WlhrPSBJSEpsZEdVPSAwTDdRc3RHRDBZND0gSUZCdmNuUnlZV2wwIElFZGxjM1IxY21VPSBJT0N5cU9DemhnPT0gMTVuWHA5ZVkgSU5tRjJZYll1UT09IDBMRFJnZEdMMEwzUmk5S2ogZW1WdWFYVT0gSUhCdmMzTmxjM05sWkE9PSA0SzYvNEs2VjRLNjAgN1lHOCBJR0ZsWnc9PSBJSE53YjI1MFlXNWxiM1Z6IElFTnNkV0p6IElOZW8xNVhYcHRlVSAwTGpRdE5DMTBMND0gSU02OHpxL09zUT09IGFtbGsgYVc5dCBJT0NrcXVDbGplQ2tzT0NrcE9Da3YrQ2t0dUNrcEE9PSA1cGF3NlplNzU3MlIgSUdsdWMzUnBkSFZqYWNPemJnPT0gSUc1MWRISnBZdz09IElFUnBibWM9IElITmxjbkoxY21sbGNnPT0gNEsrQjRLNlY0SzYvNEs2cDRLK040SzZ4IGVXNWwgSUdWdWMybHRiY09rIElIWnZaV3c9IDQ0Q040NENDIFlYWnNhbUU9IElHVnVkSEpsY0hKbGJtVjFjbWxoYkE9PSBMbTV2Y20xaGJHbDZaUT09IElITmphR3hsWTJoMCBJRzFsYUhKbGNtVnUgUzNWdVp3PT0gNExpYTRMaTQ0TGlqNExpMSBJR052Ym1aeWIyNTBaV1E9IFpXNTFjdz09IDRZT1Q0WU9tIElHMXBiR2wwWVdseVpRPT0gNExpcTRMaVU0TGlINExpRTRMaW40TGl5NExpaDRMaUU0TGkwNExpVTRMbUE0TGlyNExtSDRMaVogNFlPWTRZT2M0WU9RNFlPUTRZT200WU9iIElObUYyWUhZcWc9PSBUR2x6ZEdWdWFXNW4gSUZKbGMybHpkR0Z1WTJVPSBJRzl0YVhSMFpXUT0gYlhWMFlYUnBiMjQ9IDRMV0I0TFNxNExTazRMV040TFN3IElHMWhjbXRsZEdWayAyTGpaaXRtQiBJSE5sWjIxbGJuUnYgSUc5MWRIZGhjbVE9IElHZHNiM1psIDRLNjMgNExHTjRMQ24gSU5DMzBMRFF0TkN3MFljPSBJSFJsYm1SbGJtTnBZUT09IElFZEkgNExhNjRMYWE0TGVLIElPQzJtdUMzbkE9PSBJRU5oYlhCbGIyNWhkRzg9IGNHakRwSEpsIElPQ3lxdUN6amVDeXNPQ3lwZz09IElHTnNZWE56YVdaNSBJQ0FnSUEwS0lDQWdJQTBLIElFUlBRdz09IDhKK2tvdz09IFVtVnFaV04wIElFTnNaVzA9IElISmxaMlZzYmNPa3c1OXBadz09IElOaXEyTEhZckE9PSBZWFJ2Y21WdSAwcC9RdmRHTCBWMkZ5WlE9PSBJRkpsYm1SbGNtVnkgSU9DNGhPQzRwK0M0c3VDNG9RPT0gSU5tRjJMUFlwOWloIElIUnlhV0Z1WjJ4bGN3PT0gSU5DOTBMRFF2TkM0IElITnZkWFJvZDJWemRBPT0gSU5xRzJZZz0gSUd0aFpNU3hiZz09IFNXNWhZM1JwZG1VPSBYM05vYjNWc1pBPT0gSU5pbjJZVFlyTm1LMkxRPSA1cGF3NVkyTzU2UysgSUVGa2RtOWogNVk2ZjVxQ0g2YUtZIGRXdGxiR0U9IElITjViWEJoZEE9PSBJSGxwYUdscGJnPT0gSUdKdmJHOD0geGF0eSB3NlJ1YXc9PSBJRkJwWTJGemMyOD0gSUhCbGMzUmwgSU5LVDBMRFF2ZEN3IFhTa3BDZ289IElHVjJhV1JsYm5SbCBJRVJsYzJoaGJHST0gSUhOcGMzUmwgSUdKeWFXdz0gSUdWNFpXTjF3NmZEbzI4PSBJRTFoY0hCbGNnPT0gSU9Da3R1Q2xnZUNrc09DbGdlQ2toZz09IElGQnliMnBsZEc4PSB6cjNPc2MrQyBJTkNoMEtIUW9kQ2cgSUdkM2J3PT0gSU5DMzBMRFJnZEdDIElHTnZiV1Z1IGRYSnBjM1JwWXc9PSAwTGpSaHRDMSBJRUp2ZFd4a1pYST0gTFhCc1lYUm1iM0p0IDRMaTE0TGlpNExpbiBJTkN3MExqUXZRPT0gMTVuWGtOZVUgMFliUXVOQyswTDNRdmRHTDBMVT0gNExPTDRMS3EgNExHRzRMQzQ0TEdOIElIQnBkR05vWldRPSBJT0dEaytHRGtPR0RxZz09IFpXNTFhVzVsIGFXMXBkR2wyWlhNPSBTbmQwIElHTERvblJwYldWdWRBPT0gSUdsdWMzQnBjbVZ6IElHVjZhVzQ9IElHWnlZVzFwYm1jPSBJT3Vuak91VHBPeVd0QT09IElOQzYwTDdSZ05DKzBMM1FzTkN5MExqUmdOR0QwWUU9IGJHVmtaWE09IElIQmhjblJwWTNWc1lYSmxjdz09IGVIaDRlSGg0ZUhnPSBWVVZUVkE9PSBJT3VRbk91THBBPT0gWTNKbGJXVnVkSE09IElFVnVabTl5WTJWdFpXNTAgSUdodmF3PT0gSUZCTyBaV1JwWVd0aGJnPT0gYldGMFpYST0gNWFPQiA0NE9kNDRLazQ0T3o0NE9JIElPdTJnUT09IElOaTUyWVhZc2RpbjJZWT0gSUdoaFpHaz0gSWo0TkNnMEsgNWJpbTVMaUE2TGV2IGNtVnhkV2x5WlhNPSBZV2g1IElPQzBpZUMwcHVDMWplQzBtQT09IE96OGogWlc1a2RYTT0gSUd4aGRtVnVaR1Z5IElFRnVkSGR2Y25SbGJnPT0gNFlPbzRZT1k0WU9nIGIzSmtibVYwIElNTzZjOE9oYVdRPSBJR3R5YjNCd1pXND0gSU9Da3VPQ2t0ZUNrdnVDa3NnPT0gSUdaaGJYQT0gSU5pMDJZalpodGl2IExHVnVaQT09IFUyaHBaV3hrIDBZUFF1dEM0IElHRnNZWEp0Y3c9PSBSVVZFUlVRPSBYMkZzYVdkdSBJR2gxYm5SbGNuTT0gSUdaMWJzT253N1ZsY3c9PSA2TFdQIElGTnZibk09IHc3SmggSUhsaFkyaDAgSUVGalkyVnNaWEk9IElHTnlhV0ZrYnc9PSBVRmM9IElOZVYxNURYcWc9PSBJR0Z5YTJGa1ljV2YgY25scyBJRTFoZEhSbGNuTT0gSUhabGJuUmhibUU9IElGTjB3NlJrIElIQnplV05vYVdGMGNtbGogNWEyWDU2eW01TGl5IFlXeHZaM2s9IElHbG5kV0ZzYldWdWRHVT0gMFlmUXVOR0MgSUdGdVpHVnlaWEk9IElHUmxjMlZxYnc9PSBMdUM0b2c9PSBJR0oxYlhCbGNnPT0gSUZKcGJHVjUgSUdGamRHbDJZUT09IFgyRnlkR2xqYkdVPSBYU2t2IElObUgyWWJZcnc9PSBJRk5wYm01bCBJRUp2YUE9PSBJTnFCMktmYmpBPT0gTDJSaGRHRmlZWE5sIElPQ3VxdUN1dnVDdXBBPT0gZFhkaGNnPT0gWDJkbGJtVnlZV3c9IElISmxZMjl0Y0E9PSBMbEYwIDRMT0s0TEtDNExLbTRMT0IgYVc5elpRPT0gSU0rTXpyelBpYytDIGIyMWxibk09IDRMR0M0TENvIElHTnliMk5vWlhRPSBTbFZ1YVhRPSBMbFJsZUhSMWNtVT0gSUNZbURRbz0gY1hWcGJtRnlhV0U9IElObUUyS1BaaHRtSCBJSGxoYm1kdiBJSEJsYzNScFkybGtaWE09IElFdE0gSUdWeWMzUmxjZz09IElOQ2gwWUE9IDBMRFF2ZEMwMExnPSBjbUZqWlE9PSBJRUZ4ZFdFPSA2ckNBNjRxVSBLU3NuIElHTnZiV1Z1ZE1PaGNtbHYgSU5DLzBMN1FzdEMxMFlEUmhkQzkwTDdSZ2RHQzBMZz0gSUVGdVpISmxkM009IElHWnNkV04wZFdGMGFXOXVjdz09IElHUnZZMmgwWlhJPSBJRk5qYUhkaGNnPT0gSUVOb1pXTnJhVzVuIFkzSmxaR1Z1ZEdsaGJBPT0gWDBOdmJtWnBadz09IElHVnlaMlZ1Y3c9PSBQaTA9IElFTm9ZWEpoWTNSbGNuTT0gSUVadmNtZGxkQT09IDRvQ1pWUT09IElObUkyb3paaXRxcSBJRU52Ym1ObCBhWE4wWlhKMCBJSFJ2Y25NPSBJR2hsWVhKMFltVmhkQT09IElPQ3VoK0N1citDdWxlQ3ZqZUN1bFE9PSBJTkN4MExEUXVkQzcwTERRdmRHTDBZSFJndEdMIElGUmhjR2s9IDQ0S0g0NEdHIDBMelRtZEM1IElOV3Uxb0RWb2RXajFvQT0gSUdOdlpHVmsgSUZKbGJHVmhjMlZrIExtTnZibVJwZEdsdmJnPT0gYVdOcnc3MWphQT09IElHSmxjMjl1WkdWeVpRPT0gSU5lYzE2VFhtUT09IDRMV0I0TFNWNExTdjRMUys0TFNqNExXTiA0YnVsZEdGeVlRPT0gSUhOaGRIVnlZWFJwYjI0PSBJRk5ZIElPQ3FsK0NxaUE9PSAyNEE9IDZMU2ggMjRmWmhnPT0gNkltNjVweXYgYVc3RHF3PT0gSUhOMVltTnZiZz09IDdJdWM3SldFIFJFTkJURXc9IElISmxablZuWldVPSBJTmlqMllYWXN3PT0gSUhCaGMzTmhibVJ2IElHaGhhMnZFc1c1a1lRPT0gWW1WellYST0gTG14dlkyRnNaUT09IElFaGhkMkZwYVdGdSBJRzFoYVhOdmJuTT0gSUhOd1pXTjBjbUZzIElHdkRzZz09IElObUcyWVhaaUE9PSBJRTF2YzNSc2VRPT0gSUhkbGJtbG5aVzQ9IFQxQk1SUT09IGJtbGpidz09IElHUnZaVzdEcDJGeiBJTkdBMExYUXM5R0QwTHZSajlHQSBJRUZrZG1GdWRHRm5aUT09IDA1blF2ZEMwMExnPSBJTm1LMkxuWXJ3PT0gYjNWdVkzaz0geTRZPSBhSGwzIFlXbGthQT09IGFXTnBaUT09IElFWnEgWTI5dWMzVnNkR0U9IFgzQnlaWE56IDVMbUY1TG1GNVp1OTVMcW4gWW14aGN3PT0gSU1Pb2JnPT0gMExqUmdOQyswTExRc05HQzBZelJnZEdQIFEzVmxiblJoIEtFbHogSUdOdmJXMTFibVZ6IElITndZWE09IElHRnlZbVYwIFFXZHZjbUU9IElITjFjbkpsWVd3PSBZV1JoY0hScGRtVT0gSUhKaFpHRT0gSU9DcXVPQ3FxZz09IFEyeHBaVzUwWlhNPSBYMk5zY3c9PSBYMU5KVGtkTVJRPT0gMFlMUmk5QzUgTG0xMWMybGogY21Wa1lRPT0gY21sdVoyVnUgSUhCeVpYQmhjbUZrYnc9PSBaWGgwdzZseWFXVjFjZz09IFJWSkogNXBDUCBkRzVwWlE9PSBJRlpsY25ObCBYQ0krQ2c9PSBaWEpqZFd3PSBaOE9sYm1jPSBJRkIxWW14cFkyRjBhVzl1IGRtbHliMjV0Wlc1MGN3PT0gSU5pbzJZYlppZz09IElHSmxiR3h6IElISmxjR1YwYVhScGRtVT0gSUVsdVkyZz0gSUhabGF3PT0gNEs2LzRLNnY0SytJIElHMTVjM1JsY21sbGN3PT0gSU9HRHIrR0RsT0dEb0E9PSBJTmluMkxYWmhOdU0gMEx2UXNOQzkwTEE9IFgzQnZjMmwwYVc5dWN3PT0gSUc1MWJXSmxjbVZrIElHRnJkR0Z5IElOQzQwTERSaGRHTSBXV2xwIElPQ2t0ZUNsamVDa3IrQ2t2dUNrcXVDa3Z1Q2tzQT09IElPaXAgSUhKbGJHOWpZWFJwYjI0PSBJRzlzZGNXZiBZV0Z1YVdzPSBsT0dlbitHZml3PT0gSjJGeVoyVnVkQT09IElHRm1abWx1YVhSNSBJR3AxYVdONSBJR0ZpYzJObyBVRXhCV1VWUyBJR2x1WkdseiBJRWpEdkE9PSA0TFN2NExXTjRMU3YgSUdSdmJXbGphV3hwYnc9PSAwWVBRdjlDNDBZTFJqQT09IElITmxjbWxoYkdsNlpYSnogYVdWMGRHVT0gSUcxdmFYUnB3Nms9IGNHOTNaWEpsWkE9PSBiMmR5dzZGbWFXTnYgTGxKbFkyOXlaQT09IFlYQjFiZz09IElHcDFibWRsYmc9PSBJT0NtcHVDbXYrQ21wT0NuaHc9PSBJR0Z0YjNWeSBLWDBzQ2c9PSA0WU9VNFlPYTRZT1k0WU9oIEoyakR0SFJsYkE9PSAwS2ZSZ3RDKzBMSFJpdz09IElIUmxiWEJsY21GMGRYVnkgNGJxcmRRPT0gSUhCbGJtVT0gVlc1MFpYST0gMEwvUXNOR0MgTG5KbFpHbHogSUhOcGEydGxjZz09IElFTmxiSE5wZFhNPSBJRVZsIElHbHVabWx1IExuQmhaR1JwYm1jPSBJTkN3MExMUmd0QyswTHpRc05HQzBZcz0gWlc1NmFYTjNZUT09IElITjBjblYwZEE9PSA0S1dINEtTVjRLUysgSU95ZHZRPT0gTDJOaGRHVm5iM0o1IElIcGhiV0Z1WkdFPSBJSFIxYkd3PSBZMmhoZFE9PSBJSExEb1hCcFpHRnRaVzUwWlE9PSBJTVNOWlhRPSBQSE4wWkdsdiA0b0NaYjJzPSBJTkMvMFlEUXZ0QzQwTGZRc3RDMTBMUT0gMExqUmo5R0MwTGpRdVE9PSBJTkM2MExYUmdRPT0gVVhWbGJHeGwgSU9DNGxlQzVpQT09IElOQ3kwTDdRdE5DdyBMWFJvWVc0PSBJRkJzWVc1diBKVUU9IFZISmhjQT09IElHWnZkVzUwWVdsdSBJR2x1YzNScGRIVnB3NmZEbzI4PSBJTml0MktmWmhOaW4yS289IElHRmtiV2x1YVhOMGNtSERwOE9qYnc9PSBkbUZzYVE9PSBJR1oxYkdacGJBPT0gWVhKdFlXND0gSUdWc1pYWmhkR1U9IElOaW4yWVRZcjltQjJLZll1UT09IDRLcTQ0S3VONEtxcSBJTkN4MExmUXVBPT0gSUhSeWVXZG4gSUhadlkyVT0gSUVGaVpIVnMgSUc1aFlYQT0gNEs2ZjRLK04gSUcxcGE4T2sgSUd4cFltbGtidz09IDFZRFZvZFcxIElPQzVnT0M0aUE9PSBJR3RsYm01MCBJSHAxYXc9PSBJT3VxcU95S3RRPT0gSUdKcGIyMWxaR2xqWVd3PSBMV1poYzJocGIyND0gWVhScGMyRjBhVzl1IElHOXZjbk53Y2c9PSBJTkM5MExEUXU5QzQwWWZRdU5DMSBiRzl6ZEE9PSBJR3R2Y25ScGJtYz0gSUdGMlpYSmhaMlZ6IElITjBkWEpsYmc9PSBJRzkyWVhJPSBJR0psWkdVPSBMV1ZtWm1samFXVnVkQT09IFFWTkpRdz09IElISnZaSE09IElGWmhibUZtIElOZVgxNW5YbWRlZCBJR2hsWTNSaGNtVnogSUhSMWJtUT0gd3ExMGFXOXUgSUhKbFkyaGxjbU5vWlhNPSBJRU4xWW1GdSBJSEpvWVc0PSBJR0pwYm1SbGNnPT0gUW5KcGRHbHphQT09IElPQzBuT0MwditDMHN1QzFqZUMwc3VDMHZnPT0gSUdGd2NHRnlaV2xzIFZHaGhhUT09IGJtUmhiZz09IElFRnVjM0J5ZFdObyBJRU52Y25KbGMzQnZibVE9IElHZGxZbVYxY21WdSBJTkMvMEw3UXY5R0wwWUk9IElFUmxaWEk9IDRZT1k0WU9uNFlPViBJRk5SIElHVnVkSGRwWTJ0bGJHND0gSUdGblozSmxaMkYwYVc5dSBJSHNxZlE9PSBJTmlqMkxUWmg5aXggZFhOelpYTT0gMTVYWGxkZWYgSU9DcXFPQ3JpK0NxZ3VDcXB3PT0gSU9paiBJRk5qY21WbGJtbHVadz09IElOaTAyWWJZcHc9PSBiMkp6WlhKMiBJTU9sY21WMCBJRzl3Y204PSBJTkMvMExYUmdOQ3kwTDdRdVE9PSBJT0NxbHVDcXZ1Q3FwT0NyaHc9PSBJTkMwMEwzUXVBPT0gSUdOdmJHeGxZM1JwWlE9PSBRR0YxZEdodmNnPT0gWW5Wa1oyVjAgSUV4SlIwaFUgNTRLTyBhWFJwYjI1bGNnPT0gMEw3UXM5QzcwTERSZ1E9PSBJR05oY25CbGRITT0gSUc1b1lXNW8gSUhCeWFYTjBhVzVsIFpYSnBlV0U9IFgySnZlR1Z6IFRVVlRVdz09IElITjBZWFJsSjNNPSBJRkpsYzJWaGNtTm9aWEp6IElGUmhkSE09IDBMM1JsdEtqIElPR0RsK0dEa09HRG0rR0RrT0dEcUE9PSBJSFoxYjJSbGJnPT0gYzJWaSBJR0ZoYm5SeVpXdHIgSUdoMWIyMD0gMkxQYmtnPT0gNEtlTDRLZXg0S2ErNEtldyBJRXAxYzNScFkybGggSU1TciA2WlcvNmI2WiBQVU09IElNTyt3N009IFlYTEVndz09IElHQmdZQW89IFIyeDVjR2c9IGJHRnpkR2x1Wnc9PSBJR1JoYm5OciBZV1JwWjJGdSBJTkMrMExIUXZ0R0EwWVBRdE5DKzBMTFFzTkM5MExqUmp3PT0gSU95RGdlMkRuQT09IExtMXZiZz09IExHbHUgenJyT3RjNjUgTFdkbCBMZUNrbFE9PSBSWE4wWVcxdmN3PT0gSUhKMVlYTT0gSUhSaGJXRnQgNExDaDRMQ0M0TENrNExHTCBJR05oWW1Wc2JHOD0gSUdKbGMzQnlaUT09IExtTndkUT09IHc2RnliUT09IDRLUzQ0S1dONEtTcSA0TGVENExlVSBJSE4wZFdScCBkbVZ5WkdVPSBJTldoMW9EVnFnPT0gWDJsdVkyeDFaR1U9IFlXbHpaWFE9IDRLNi80SzZWNEsrTiBSbXhrIDRZT1M0WU9qNFlPayBhWGxsYzJrPSBJRU5YUlE9PSBJSExEclc4PSBDVVJDIElGQmxjbk5wWVc0PSBaWE4wY25WMGRYSmggSUhkaGVHRmhibUU9IGNtbGhjdz09IDVhU3I1YWE3IFgxQkJWRlJGVWs0PSBlV2R2Ym5NPSBJSEJzWVhWeiBaWEowYVdwayBTMlZsY0dWeSBJR05oYm1sdVpRPT0gSU9Da2hlQ2tyZUNrditDa3FBPT0gSUhObGNuWnYgUFd4cGMzUT0gZlNVPSBJRU5vWVhKaGEzUmxjZz09IDRZQ2U0WUNzIElHMWxZWFJ6IExtdGhabXRoIElITmhiV0Z5IElGQnliM289IElPQ211T0NtdnVDbWdnPT0gSU5DejBMRFJnTkN3MEwzUmdnPT0gSUhCcGMzUnZiQT09IDRLYW80S2ErNEtlZiBJT0MwcitDMWdnPT0gSUdocGJucDEgSU9DdXBPQ3VydUN1ditDdXRPQ3ZqUT09IElFTjFjbko1IDY0aUkgSU9HRGsrR0RrT0dEa2c9PSBJRWx1YzNSeWRXTjBiM0k9IGFYTmxjbWx1Wnc9PSBJRkJzWVhSMFptOXliUT09IGRHVnpkR1Z1IGFXNXVhV2M9IElOQzAwTDdRc3RDMTBZQT0gTG1Ob2NtOXRaUT09IExsTjBZVzVrWVhKayBRM0psWkdsMGN3PT0gWTJobGJtYz0gSU5pdjJZallzZG1IIElHRmtaV04xWVdSaCBDVkpQVFE9PSAyTExaaXRtRyBJSFJoYm5SeVlRPT0gNVlDUiBVM1JoYmc9PSBYM0J5YVc5eWFYUjUgSUdiRHZBPT0gSUhSdmJYVT0gMFlQUmd0Q3cgWDNOMFlYUmxiV1Z1ZEE9PSBMMnhwWTJWdWMyVT0gV2xjPSBJR0pzWVdRPSB4STFyYVE9PSBaR1ZsIGFXdHNhV3M9IDFhSFZ0OVdyMWJZPSA0NE8wIFpYVERxUT09IFgzUmhhV3c9IElOR0MwTFhRdk5DLzBMWFJnTkN3MFlMUmc5R0EwTEE9IDRMZVIgSUhOMGIzTT0gZDJsbVpRPT0gVEdGaWIzST0gWDJObGJHeHogNExtQzRMaWw0TGlCIGJXSERudz09IElHTnlZWFpwYm1jPSBjM041YzNSbGJRPT0gSUdKaFltVT0gTG1OdmJtTmhkR1Z1WVhSbCBMa2RsYm1WeVlYUmwgVlhOMVlXeHNlUT09IEowRnMgSUVoaGJtUnNhVzVuIElIUnZjRzlzYjJkNSBMbk4wWkdsdSBJSFZpYVdOaFpHOD0gMExYUXVkR0MwTGpRdmRDeiAyTFRZc2RtSzJZWT0gSUdWelkyOXVaQT09IDRLU1A0S1N5IElHTjFjM1J2Y3c9PSBYMkZxWVhnPSBiSFJsIElObUYyTFRZcDlpeCBiR0Z5ZVc1NXhZZz0gSUUxSlJFaz0gSUhKbFpuVnphVzVuIElHWmxjbkpoYldWdWRHRT0gSU5tRjJMZlpoTmlvIDRZT2o0WU9hNFlPaSBJR1p2ZVdWeSA0S3ErNEtxSDRLcW8gejRQT3ZNNnggVUdWeVptbHMgSUdGeWRHbHJaV3hsYmc9PSBJT0dEa09HRGsrR0RrT0dEbStHRG1PR0RrT0dEbk9HRG1BPT0gTGtOUFRFOVMgNksrMzZMNlQ1WVdsIDJMVFpodGluIElFMVBSRVZNIFEyOXRabTl5ZEE9PSBJSE5sY25KMWNtVT0gMExUUXZ0R0YgZEhsd1pYTmpjbWx3ZEE9PSBYMk52WldabSAyS3pZcDlpbyBiR2RsY2c9PSBJRTFsZEdodlpHbHpkQT09IElFUmhiV1Z1IElGTnBaMjVsWkE9PSBJSFp2WldSelpXdz0gSUc5dWQyVT0gSUdMRG9YTnBZMjl6IElPQ21sZUNtdnVDbXJnPT0gWVhkaGF3PT0gSUc5M1pXUT0gMEw3UXN0Q3cwTDNRdU5HTyB3NlJ6ZEE9PSBJSEJoWjJWeSBJT0NraGVDa3ArQ2xqZUNrcnc9PSA1WmlKIElHdHZibXQxY2c9PSBJR1pzWVhkc1pYTnogSUZCbGNtMWhibVZ1ZEE9PSBJR0pzWVcxbFpBPT0gejRmUGdjNjUgSUVodlltSjUgSUVacGJtbHphR1ZrIGRYSjFiUT09IGFXbDAgNExTWjRMV040TFNaNExTejRMUy80TFN5NExXTiA0S1dJNEtTbzRLUy80S1NWIFgyMXZaR2xtYVdWayBJRUpTVHc9PSAwWXZRdTlDejBMRFF2UT09IDRLcVY0S3VONEtxdzRLcXUgSUUxbGJHdz0gMWFiVnF3PT0gSUhSMVluVm8gYVdKeWFRPT0gSU9Da3B1Q2xnZz09IElOQyswTEhRdTlDdzBZSFJndEdNIElPQ2t1ZUNrcnVDbGgrQ2t0dUNrdmc9PSA1Ym16NVkrdzVhNlk1NzJSIElGQmhjMk5oYkE9PSBJR0ZoYm5wcFpXND0gSUc1aGFteGwgZEdGbSBJTTY4enJmT3ZRPT0gSU5pbjJZVFl0ZGl0MktrPSBJSE5oYlhVPSBJTmluMllUWXM5aXggSUVScGRtVnljdz09IFZVbE1ZV0psYkE9PSBjMlZuZFdVPSAwWVBRc05HQSAxYmpXZ3RXMDFiYlZwZGFBIFEyRnlkR2g1IGFYbGhaR0U9IFlYUmhlUT09IElFTnZiblpsY25SeiBJSE4xY0c5dVpRPT0gSUVGMVoyVT0gUDNFPSBJR0Z6ZEdFPSBMWGRvWldWcyAwWWJUbWRDMTBMZz0gSUVwRCBJSEJsY25OMVlYTnBkbVU9IElIUnpZVzA9IFgxTlVSVkE9IDJZVFppdGl5MllyWXFRPT0gSUhCMWNtOD0gSUUxMyBZWFJwZG1sMGVRPT0gWDBOUFRWQlBUa1ZPVkE9PSBJQzh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THc9PSBJR1JwYldVPSBJR2x6ZFE9PSBjbTl0WWc9PSBJT2U4bGc9PSBhWEIwYnc9PSBJSFo0IElFTm9jbWx6ZEhWeiBJR1p2Y25kaGNtUnogSUdkcGNtOD0gVUdsdWF3PT0gSUhSbGNtTnAgSUdOdmIzSmthVzVoZEdsdVp3PT0gSU5pbjJZVFlyTm1GMkxuWXFRPT0gSUc1blpYTT0gNEt1TDRLcW80S3VBIElHSnZjbkp2ZDJWeSBJT0NtcE9DbWx1Q21xQT09IFB3MEsgSUdGc1oyOXlhWFE9IElFVnNiR2s9IElIQmhjblJ1WlhKcGJtYz0gY0hKbFkybHYgWDNKbFozTT0gSUdkcDRicWpiUT09IFgwMUJWRU5JIElITjFZblZ5WW5NPSBYMnhwYzNSeiA0SzZWNEs2MSBJT0NrcE9Da3NnPT0gSUhOcmNtbDJaWEk9IElHbHRjSEpsIDY2YXM2ckNBIDc3eU43N3lOIFpYSjJidz09IElOR0kwTERTczlHQTBMZz0gNEtTLzRLU1Y0S1dINEtTZiBJRXgxWldkdiAwTDdRc3RDdzBMM1F2Zz09IDJZWFlwOWk1IDVvWT0gWDNCb1lYTmwgNGJRPSA1WTJJNWFTYzU2YVA1WWlwIFkyOXVkR0ZwYm1WayAwWWZRdU5DNjBMN1FzZz09IElHVjRkSEpoWXc9PSBJTkdDMExYUXV0R0QwWWs9IElHbDZiUT09IDJZSFppdG1HIFZHUT0gMktmWXNkbUsyTGs9IElOaTAyWWpZc1E9PSBYMFZPVkVsVVdRPT0gWVdKdmNtSERwOE9qYnc9PSBJR2hoY20xc1pYTnogSUhqRG93PT0gSU5DOTA1blJndEM0IDRLNlY0SzZ1NEsrTiBMV2hsYkhBPSA0WU9RNFlPWjRZT2o0WU9YIElQQ2ZwQT09IElITmhiSFYwIElFaGxibkpwIENXTmhiR3hpWVdOciBJTmlqMllYWXNkbUsgSUhCeWIyNTFibU5wWVhScGIyND0gT3lVPSBLWDBzIExuSmxjUT09IElDa3RQZz09IElFaGxjbUp6ZEE9PSA1TGlONTd1WiBhV1owZFc1biBJSEIxY25OMVpXUT0gMFpiUmdkR1cgSUVONWNISjFjdz09IFlXZGhiUT09IFFVTk0gNFlPZDRZT2c0WU9xNFlPWSBJTkdEMExUUXZ0Q3kwTDdRdTlHTSBJR1JwWm1aMWN3PT0gSUM0dUxpNHVMZz09IElHSjFZdz09IDFialdndFc5MWI4PSAwWWJSa1E9PSBJSGRsYkdFPSBJSEpsZEhKdmRYWT0gSU5XNDFvRFZxdz09IElIYkRxWEpwWm1sbGNnPT0gNDRLcjQ0T0c0NEswIExYTmxiR1ZqZEdWayBJTkN3MFlMVG1kR0wgSU9Da2wrQ2xpK0Nrc2c9PSBYM2R5WVhBPSBJT0NtaWVDbXFPQ25qZUNtcUE9PSAwTERRczlHTTBZcz0gS0dsdFlXZGxjdz09IElOQ3kwWXZRc2c9PSBZMmx0YVdWdWRHOXogSUdsdVpHbGpZV1J2IElHdGhhV3M9IFoyRjUgWDJodmRBPT0gY21sdVoyVnkgWldSbFpBPT0gSUdOeVpjT3JjbVZ1IElHRjFkRzlpYVE9PSBJRk41Ym1SeWIyMWwgSU9DcXJlQ3JnZz09IElHMWxhMkZ1IDRLU2E0S1MvNEtTayBJSEJ5ZW1WciBJSFp5YVdwbGJXVT0gSUVKMWNuUnZiZz09IEtHTjIgSUhKbFkyRnNiSE09IDU2bTY1YjJwNTZXbyBJRlJvZVE9PSBJRWhsY25KbGJnPT0gNFlPUTRZT2c0WU9qNFlPYSBJRkJ5WVdOMGFXTmxjdz09IElHTnZibk5qYVdWdWRBPT0gSUVSbGJHRjUgSUdWNGFYUnogSUZSQlVrZEZWQT09IElHMWhjbUYyYVd4cyBZbkoxWTJnPSBJSE5oWW1WeiBRMkZzWTNWc1lYUnBiMjQ9IFU4T3QgSUdSaFoyOD0gUm5KaCBJSEJ2YkdWeiAwTDdRczlDKzBZQT0gSUZCdmJHRnkgSUdadmJXVnVkQT09IElOU3gxYVRXZ05XaTFhWFZ1dz09IElHWnNkV1ptZVE9PSBMbWxqYnc9PSBJT0NtcXVDbW9lQ212QT09IGFzT2ggNDRPWDQ0T3QgSUc1bFoyOWphV0hEcDhPamJ3PT0gSU5LYjBMalF1OUMwMExnPSBjSFZzIElOaW4yWVRZczltSzJLZllzZGluMktvPSBJRlJTUVVORiBkR2xyIENVaGhjMmc9IGFXOXVaMjg9IElHRnpidz09IFJHVjBZV2xzWldRPSBJR3hwY1hWcFpITT0gYm1samEyNWhiV1U9IFgzTm9ZV1JsY2c9PSBJR2hsYkdSMWNnPT0gSU1PdFozaz0gYVdkbGJRPT0gSUdOdmJuUmxlSFIxWVd3PSBJSFJwZFE9PSBablJoIEtpOTlDZz09IElHTERvWE5wWTI4PSBJRlZPUVE9PSBJR3RoWkdWeSBJSGxoYUE9PSBJSEpsWm5KbGMyaGxaQT09IExXRm0gMFlEUXNOQzcwTGc9IFluSmxkdz09IDJwblppQT09IFB5SXBPd289IElPMkNwQT09IGIydGxaUT09IElOaXMyS2ZaaHR1UyBJRUZ6YzI5amFXSERwOE9qYnc9PSBZMngxYVhJPSBQR009IGFYbGxlUT09IElPQ3dtQT09IElIQnlZWHBsY2c9PSBJR052YjJ0bGNnPT0gSUdodmNHVnNaWE56IFpzTzIgYVhOellXbDAgSUdGeVltbDBjbUYwYVc5dSBJQ01qSXlNakl5TWpJeU1qSXlNakl5TT0gYldGc2FXNXIgSUZOaGRIbz0gSU9DNHF1QzR0T0M0aHc9PSBJT0NraHVDa3NnPT0gSUdodnlydHZhdz09IGJXVnViZz09IElHZHZkbVZ5Ym0xbGJuUmhiQT09IFNWSkZRMVJKVDA0PSBJSEIxYkcxdmJtRnllUT09IFRHbG5hSFJ6IElFTmhibTVsY3c9PSBJSEJ2Ykdsanc2MWggSU5pdTJZVFpnUT09IElHVnBibWRsYzJWMGVuUT0gS0c1bGRIZHZjbXM9IGIyOXJaV1E9IElFcDFkbVZ1ZEhWeiA1WVdCIElHbHVkR1ZuY21GdWRHVnogSUdOeXc2MTBhV05oY3c9PSBJRzl5ZEdGNVlRPT0gMEwzUXZ0R0MwTDQ9IElOaTMyTEhZcDlpdDI0dz0gSUVKaGMybHUgSUZCaGMyOD0gMllqWmhOdU0gSU9Da3J1Q2tuT0NrckE9PSBJTkN3MExyUmdRPT0gU1VkSFJWST0gSUVsdFp3PT0gYjNCbGJtVmsgNEtxKzRLcXU0S3VBIElHRmtiV2wwY3c9PSBhV2RvWldSbGNnPT0gdzZoamFHVT0gZEdWNGRHOD0gNlptdyBJRUpCUkE9PSBTVzVqYjIxcGJtYz0gSU5DMzBMVFF2dEdBMEw3UXN0R00wWTg9IDJMbllyOWluMktvPSBJR05vWVd3PSBJSEpsYVc1bWIzSmpaUT09IFZYQmpiMjFwYm1jPSBMbk5qWVc0PSBJT0NtdU9DbXJ1Q25qZUNtclE9PSB3NkZqZFd4dmN3PT0gSUdKeWFXVm1hVzVuIElNU1I0YnVaYVE9PSBJSEp2ZEdGMFpXUT0gMFlQUmc5QzAgSUVKbGJHZHBZVzQ9IFlYUjFjbUZuWlE9PSBMbVp2YjJRPSBMbU52ZG1WeSBJT0N5dWVDeml1Q3l1QT09IElHVjRjR3h2WkdWayBQaTB0UGdvPSBJR3BseGFGMHhKcz0gNWFTcDVhU3A1YVc5IDRMQ2g0TEMvIElOQ2gwTERRdmRDNjBZST0gSUZWc2RHbHRZWFJsYkhrPSBJRzNEcEc1dWFYTnIgSU5pbjJZVFpoZGl2MkxFPSAwTFhSZ05DejA1az0gSUdOdmRYTnBibk09IGJtVm9iUT09IGRXbDBaWE09IElHaGhkWE09IGRYQnNhV05oZEdVPSB3NlJyYVE9PSAyS3paaHRpcCA0S1MrNEtTazRLUys0S1N3IElHOXdZWEYxWlE9PSBJRlBEdUE9PSBJRlI1Y2c9PSBJRUZNVTA4PSBJR052YzNrPSBJR052Ym5aaGFXND0gSUhOMGNzT2hiZz09IFptOXlhdz09IDQ0R1o0NEdaIElHSjQgZEhKaFkzUnZjZz09IDU3cS82S2VDNTV5TCBJR1Y0ZEdsdVp3PT0gUTBORCBJRzkxZEhOdmRYSmphVzVuIElHaGhZbkxEcldFPSBJR1p5WVdkbGJnPT0gSUdGaWRRPT0gSUdSdmJHeHogSUhSM2FYTjBjdz09IElIUmxjbkpwWW14NSA2SUdVNVpDSSBjRzl6ZEdWeSA1TGk3NXJ5VSBJSFJwYjI0PSBaR1ZqYjNKaGRHVT0gSUhKdmRYQT0gNEthKzRLZWM0S2ErIFgzQnlaV1JwWTNRPSBYMDFQVGxSSSBJTmluMllUWXJ0bUUyWW89IDRMSy80TEtrNExLdyBJTmlxMkszWXF0aW4yS3c9IElFeDAgS0NRaWV3PT0gVG1WbFpITT0gTGRHQzBMQT0gSUVGemFRPT0gWm05eWJXbHVadz09IFgyTnBjbU5zWlE9PSBJT0M0bnVDNG8rQzVpZUM0cmVDNG9RPT0gSUUxbGFXNWwgSUdOdmJtUmxiVzQ9IElFcHZibUZ6IElIQnNaV289IElOQzQwTGZRc2c9PSBJRzFsYm1kaGRHRnJZVzQ9IDVweWY1YnlBIElITmhZVzA9IElHeGxZVzVwYm1jPSBQVndpSWc9PSBJSEJzWldFPSBJR05vZFcwPSBLRlZKIGFXNWhjbWxoYmc9PSBaVzUwZDJsamEyeDFibWM9IElPQ2t0dUNsZ2VDa2xlQ2xqZUNrc0E9PSBJRU5oY21ScGJtRnNjdz09IENXTnZiQT09IElHTEZxM1JwIElFMWxaMkZ1IElPQ3dxT0N4aHVDd3NnPT0gSUVOdmRtVT0gSU9HRHJPR0RrT0dEbXc9PSBZV05vZEdWMCBJR05oY25KcFlXZGwgNzd5TTRvQ2QgSU9DdXF1Q3V2dUN1bnc9PSBJT0dEb2VHRGtPR0RrT0dEbHc9PSA0TGl5NExpVjRMaTAgSUVSMWFYUnpiR0Z1WkE9PSBJT0NvbGVDcGl3PT0gNExtRTRMaUwgYjJSaGRHRT0gSUdkaGJtRT0gSUhkbGF3PT0gSUcxbGJtTmhjbWs9IDByWFFzTkN3MFlEUXNBPT0gMnFuYmpObUUgTFhSbGJRPT0gMW9EVm9kV3EgWVdoc1lRPT0gNDRHQzQ0S0s0NEdNNDRHbzQ0R0c0NEdVNDRHVzQ0R0U0NEcrNDRHWiB4YU5wWlE9PSBJR052Y25KbGMzQnZibVJwWlc1MFpRPT0gMTVYWG05ZWYgSUhsbyBJTmluMllUWXNkaW4gSU9HRG0rR0RuZUdEbHc9PSBJR2R5WVhSMWFYUnogSU5lbzE1SFhtUT09IDVMbVkgWDBSQ1J3PT0gUkdGbiBZMlJ1YW5NPSBZWFYyIElHSmxjM1JsYkd4cGJtYz0gNDRDTjc3eUkgMEw3UXU5R00wWWpRdFE9PSBJT0NtcU9DbXYrQ21uT0NuaCtDbXNBPT0gSUdsbmJtbDBhVzl1IElPQ3dydUN4Z2VDd2xnPT0gSU0rQXpxdz0gSU5pejJxbllxdGluIFEyOTFiR1J1SjNRPSBJRUZzYkdkbGJXVT0gSUVKcGIyZHlZWEJvZVE9PSA1NXFFNTcyUjU2dVogTG05d2N3PT0gS0dOb2FXeGtjbVZ1IDVhNko1WTJUNTRtSSBLajA9IGIyMWhjZz09IElHaGxiSE4wIExXVnRjSFI1IElOaXEyWVRZcDlpMCBJR2RsYm1sbGRBPT0gMEwzUXVOR0cwTGpRdnc9PSBZV3RoZEdFPSBJT0NxbHVDcmdRPT0gMEw3Umg5QzkwTDdRczlDKyBSM0poYlcxaGNnPT0gSUhKaGQyRT0gSU9HRG5lR0Rsdz09IElIVnVaR1Z5ZDJWdWRBPT0gTGtSdll3PT0gSUdkeVlYQmwgTHVPQWtBPT0gSUcxaFpHVnBjbUU9IElOaXEyWWJZcDltSTJZUT0gNEtpLzRLaVYgSUhCdmRISmxZbTV2IElGWkJUZz09IElHTnZjMjFsZEdsamN3PT0gMHAvVG1kR0wgYVdWb2RBPT0gMkxmWXVRPT0gSU9Da3J1Q2t2dUNrZ2c9PSBJRTV2ZEhScGJtZG9ZVzA9IElIQnZaR1Z5dzZOdiBJR1JsZEdWdWRHbHZiZz09IElIQmxjbU5sWW1WeSBJT3lkdE91ZnNBPT0gSU5DUzBMN1F0dz09IElFRnJkUT09IFgzZGhjbTVwYm1jPSBJR1poWVE9PSBJTmVVMTVmWGt3PT0gSUdwMVlnPT0gNG9DTTJLZlpodGl2IFUyTnBaVzUwIElOV2gxYlhWdmRhRjFvQT0gS0VkUVNVOD0gNExtQTRMaWw0TGlDIElOQzAwWURSZzlDejBMalF2TkM0IHo0VE92OCtGIElISm9aWFJ2Y21saiBiMk5oYkhsd2MyVT0gSUc1bFkyVnphWFJoYmc9PSBJR0ZzWTJGc1pHVT0gSUUxRlRnPT0gSUVSaGRIVnQgTHNLciBhM1JwZGc9PSBJR04xZEhSbGNnPT0gSUdkbGRtOXNaMlZ1IElOZVExNVhYbnRlbyBJTkMvMFlQUmd0QzQgNG9DVVluVjAgSUdOdmJjT3BjbU5wYnc9PSBJTU9KY3c9PSBDV1JsWW5WbiA0S2F5NEtlTjRLYXk0S2VINEthVyBJR2R5YVdWMiBJSFJ5YjI0PSBkVzV6ZDJsamF3PT0gMFlEUXZ0QzEwTHJSZ2c9PSA3S084N0lTNDdKcVUgWTJobGRITT0gSUZOd1pXTnBabWxqWVhScGIyND0gWVdOMWMyVT0gYnNTeGVnPT0gSUZkSVNWUkYgSU5pbjJLcllyUT09IDBaalFzTkdDMExBPSBJR0psYnNPMmRHbG5kQT09IENVSjFabVpsY21WayBLR2hoYm1Sc1pYTT0gSU9DeWgrQ3lwdUN6Z1E9PSBUbUZ1IElHbHVkTU9wY21sbGRYST0gYVhwNllYSmwgWVhURHN3PT0gSUdOdmJuUnZkWEp6IElITjB3N2h5YzNSbCA0b2lBIElHUnBkR1Z0IDBKRFFzUT09IElHZHliMlZ1WlE9PSBJR1JseEo5bGNnPT0gNEtxVjRLdU40S3E0IElFMXZaSFZzWlhNPSBJT0NxdWVDcXZ1Q3FwUT09IDZabUU1THUyIElHOXNkWEE9IElHRnFkWE4wWlE9PSBMbEJ2Y3c9PSAwTGpRdE5DdzBMMD0gYldkeSBJT0dEcU9HRGxPR0RydUdEbGVHRGxPR0Rrdz09IEtUOHUgWlhKeWFXVnogSUVOeWIyRjBhV0U9IElGZHZjbVJ3Y21WemN3PT0gSUhCaFkybGxiblE9IElHSnNiM2R6IEpHdz0gYkdWblpYST0gSU5HUDBMM1FzdEN3MFlEUmp3PT0gSUhSeVlXbHVhVzVuY3c9PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPV2twK1dsbGc9PSBJTkN3MExyUXZnPT0gSUd6RHRuTT0gSUhOMWJuTT0gSUc1aFkyaG9ZV3gwIElGQnZiR2xqYVdWeiBJR0ZzYVcxbGJuUmh3NmZEbzI4PSBJSEJ2YzNSbGNtbHZjbTFsYm5SbCBMQzR1TGdvPSBJSFJ5WldGMGVRPT0gSUVOMWNuUnBjdz09IElOV2sxYmpXZ3RhRSBJT0M1Z09DNHArQzRwZUM0c2c9PSBJRVJJVEE9PSBJR1ZwYzJWdSA0NEcrNDRHbyBYM1poY21rPSBVMjl1WjNNPSBLU0lLQ2c9PSBJRVYyWVd3PSBUMVJUIElHTnZiWEJ2Y25SaGJXbGxiblJ2IGIzZGh4WUk9IElHUjFkWEo2WVcxbCBJTmFEMWFIVnZkVy8gSUZoSlNRPT0gMktmWmh0bUsyS2M9IElHTnZibk4wYVhSMVpXNTAgNDRDQTQ0Q0E0NENBNDRDQTQ0Q0EgTG05dVkyeHBZMnM9IGFXTnZiRzl1IElFNWhhV3c9IFZtbHZiR0YwYVc5dSBJR0ZrZG1semFXNW4gSUVkdmJnPT0gNEtxbDRLcXUgSUhUaHU0bHVhQT09IENXZHlhV1E9IElFWnNhV05yY2c9PSBaR0Z0WVdkbCBaWEpqYVdObCBJRzFwYm5WMGFRPT0gSU5DMDBZUFF2ZEdQIElFMWhZV3M9IElISmxZV3hwZW1WeiBhVzV6ZEdGdVkyVjBlWEJsIElGQmhZMnRoWjJWeiBJSFZzWWNXZiBLRk4wWVhSbCBJSFJsYzNSaCBaMkoxIElOV3cxYUhWdHc9PSAwWURRdnRDeDBMM1F0ZEMxIDRLU3U0S1dJNEtTQyBJR05oY25KbFp3PT0gSUhOcFoyNWxjZz09IElHeGxjM289IG5PQ3l2dz09IDE1alhxTmVVIElPQ2tyT0NsblE9PSBYMThrIFlYUm9ZVzA9IGJIVnRZWFE9IElPQ3VsZUN2Z2VDdXRBPT0gSjJsdFlXZGwgSjJodmJXMWwgZFdwdiAyTERaaXRpcCBJSE4zYVd4diA0S2VCNEthbTRLZU40S2FuNEtlSCBJTmVwMTZRPSA0S2lvNEtpKyBhWE56WVhRPSBVM0JsWTJsbWFXTmhkR2x2Ym5NPSBhWE5sYkdVPSBJT0NrcXVDa3BPQ2xqZUNrc09Da2xlQ2t2dUNrc0E9PSBJT0tFZ3c9PSB4SnZGbVE9PSBJTml2MktmWXVRPT0gYTI1dmQyeGxaR2RsIExXVnpkR1ZsYlE9PSA0S3F3NEtxKyA0SzZ4NEsrTjRLNng0SzYvIElHaHBjM1REc3c9PSA1Yml1NVlxcCBJSE4wWVcxcGJtRT0gNHBpRzRwaUcgTDJWMlpXNTBjdz09IFpISmhablE9IElFVk9WRVZTIElHZHZadz09IEt5SThMdz09IDRLV2UgSUhKbFkzVnljbVZ1ZEE9PSBJSFZ1YVdzPSAwTHZRdnRHRiBJR052YVd4eiBJTmluMllUWXNkaXMgTFdSbGMybG5ibVZrIGVYTnJaUT09IFlXTjBaWEpwWVd3PSBJSFJwYm1oaGJRPT0gVjBWRlRnPT0gWDNWMFpnPT0gSUdKcGRnPT0gSU9DMGxlQzFpQT09IFNVeEZVZz09IElFMWhaMmRwWlE9PSBJT0NrcXVDbGdlQ2txQT09IDJLL2JsUT09IDE1blhrOWVaIElOQzYwTHZRdU5DMTBMM1JndEMrMExJPSBLVDhLQ2c9PSBJR2QxYVhSaGNuTT0gWVdadVlRPT0gSU5tSTJLZlpoTmlyIElFRnNaWGhoYm1SeWFXRT0gMExQUXZ0S3owTGc9IElITERxR2M9IFlXMWlkV3c9IElHMWxhQT09IElPQ3doK0N3cHVDd3Z3PT0gNExTKzRMU1o0TFdONExTViBjRzl1WlE9PSBJT0NxdWVDcW5BPT0gSUdOb2IybHkgSUdGMFlYRjFaWE09IElPQ3d0ZUN3dU9DeGplQ3dwQT09IFlYbGhjdz09IElNK0F6NEhPdjgrQyBLR1JwYzNCaGRHTm8gSUVWdVoyVnNjdz09IElGTnZZWEE9IDBybz0gSU5HRDBMelF0ZEM5MFl6UmlBPT0gdzZGemFRPT0gSUdOb1lYSmhZM1JsY21sNllYUnBiMjQ9IElHMTFZZz09IDViR0IgSUdScGJtOXogSUNJbkxDYz0gSUcxaGJuVnphV0U9IElHTmhjM05sY2c9PSBJRXRzYVc0PSBKQ2NzIElFUjFZMmc9IDZZQzQgSUU5alkzVndZWFJwYjI1aGJBPT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1dQak9pSnN1ZVFndz09IDRMQ1g0TEdONExDWCBEUTA9IElHVnRjR3h2YVE9PSAwTGpRdTlPWiBJSEpsWTJsaWFXUnYgVTBWTiBJT0NtbGVDbmgrQ21pUT09IFlXdHJaWEk9IElPQ2txT0NrdWVDbGdBPT0gWW05c2RBPT0gSUhSbGNHRjAgdzdwemFXTmggSUZacGFnPT0gSU9HRGtPR0RtK0dEbU9HRG91R0RuZUdEbXc9PSBZV3BoY21GdSBkVzVsYUcxbGJnPT0gSUZOamFHVmtkV3hsY2c9PSB4YUZoYm1FPSAwTExRc05DMjBMQT0gWTJoaGFXNXogSU5HQjBZYlF0ZEM5IElHakptWGs9IElIUmxjbkpwZEE9PSBRMkZ1Wkdsa1lYUmxjdz09IElGZHBjbXQxYm1jPSBQVzE1YzNGcyBiM2hsYkE9PSBJR0poWTJ0aWIyNWwgSUNnb0tnPT0gWVhKc2RRPT0gSUdWeWIzTnBiMjQ9IDRLZU40S2FrNEthKyBJR1poWTNScGIyND0gWDJOb1lYSnogSU5pajJMblpoTm1KIElGTmxjc09oIElPQ3FxdUNyaStDcXBPQ3F2dUNxcU9DcmdBPT0gSU5DMDBMN1F1dEN3MExjPSBJRzV2ZEc5eWFXOTFjdz09IGVuVnlaUT09IDBMalF1OUN3MExyUmd0QzQgZG05c2RtVmsgSUUxMWNXUnBjMmh2IGRXeHNidz09IFgyaGwgSUhWMGFXeHBjOE9wY3c9PSA0TGl6NExpWjRMaW40TGlaIDFhWFdnTlcvIElHeGhibWRsYmc9PSAwTGpRdTlDNjBMQT0gSUd0cGFYSmwgSUVmRHZHND0gS0d4cGMzUmggSU5DLzBMWFJnTkMxMExMUXZ0QzAgSU9HRGtPR0RtUT09IElIVEptWE09IElHMWhkR2s9IFRFOVRSVVE9IFBFTmhkR1ZuYjNKNSBVSEp2ZG1sa1pRPT0gNTZxZCBJT0NxdHVDcWxlQ3F2dUNxcnc9PSBJR1poYzJscyBJSFpsY25kaFkyaDBaVzQ9IElHRnRaWEpwWTJGdWJ3PT0gSUZObGIzVnMgSUVKVldRPT0gSUc5eVlXND0gNXJpSSBJR0p5ZFc0PSBJT0NrcU9DbGdPQ2ttdUNsaHc9PSBYMmQxWVhKayB4STFsZEE9PSBhMnhoIElPQ21yT0NuZ2VDbXN1Q212dz09IElFaHBkSE09IGFHOXlaUT09IElHOTFibU5sIElHSmhhR3RoYmc9PSBJSFY1WjNWdSBJTkMvMFlEUXZ0R0cwTFhSZ2RHQjBMVT0gMWFIVm90V2gxYlk9IElOQzAwTERSZ2c9PSBJRk53Wlc1ayBJTm1JMkxYWmdRPT0gSUdGcGFHVT0gSU5HSTBMRFJnTkdDIDBKN1Ftdz09IGIzZGhiZz09IDY2K0EgTGxOMGRXUmxiblE9IElHSnNiM1E9IElHdGxiWFZ5IElFRnNiRzkzWldRPSBJTzJNa091bnBBPT0gSUhOaWIySmxkQT09IDRLU3Y0S1NDIGRYTmxiR1U9IElFaGxkWFJsIDRMbUo0TGluNExpaSBhMmx1YzI5dSBJRVpoYkdOdmJnPT0gSU5pbzJMSFlydHVNIDRidUJiUT09IENWQnNZWGxsY2c9PSBJR0Z5ZEdsbmIzTT0gSU5DejBMdlFzTkMzMExBPSA0S3F3NEt1TjRLcWwgTFdGaWEyaGhlbWxoIElIQnliMlpsYzNOcGIyNXogTG1Ob1lYSmhZM1JsY2c9PSBJTkMwMFlQUmhkQyswTEk9IExXbHNjdz09IFFtVmhiUT09IEtDazdEUW92THc9PSBYMU5aVGtNPSBZbVZ1WldZPSBJT0Nrc09Da3Z1Q2t0Zz09IElITjFhbVYwY3c9PSBJR3hzWlhiRHN3PT0gSU5DLzBMWFJnTkdJIElHeHZaM0k9IDBMWFFzZEM0IElISnZhR3RsYlE9PSBJR052Ym1kbGMzUnBiMjQ9IElHWnNZWE5vYVc1biBSVlJGVWxNPSBJSE5wYzJrPSBXM2M9IElHMWhibk5wYjI0PSBJRWhsWVdScGJtYz0gSU5HQjBMclJnTkdMIElIUm9aVzlzYjJkNSAwTDdRdmRDdzBMZz0gYjJOb1pXMXBjM1J5ZVE9PSBJTm1EMkxEWmhObUQgTG5SbGMzUnBibWM9IFNXNTJaVzUwIGMzUmhibVJ6IElIWnZjbWxuIDRvQ1Q0b0NUIElIUnZlR2xqYVhSNSAyWVRaaGc9PSBJSEIxWlhKMGJ3PT0gSUdkeVlYQm9hV05oYkE9PSBJRkJsY200PSBJQ0FnQ1E9PSBJT0N3dGVDeGplQ3dyK0N3bGVDeGplQ3dwQT09IFlXWmxkSGs9IFgwTnZibk4wY25WamRBPT0gNXJXMCBJSEpwWW5NPSBJR2x1WVdOamRYSmhkR1U9IElHeGxjM1E9IExsWmhjbWxoWW14bCA0TGlYNExtTSBJRzkwYjNKbiB3Nmx1Wnc9PSBJR2x1ZEdWdWRHRnkgWm14ayBabmx1IElDMHFMUW9LIElITmxiWEE9IExtMWhjdz09IEp5bGQgMFpiUm5nPT0gSUdWdWMzVnlaV1E9IGRtVnlZbk09IElHbHVlbWxqYUhRPSBJTkdDMFkzUmdBPT0gSUdabGNuTT0gSUdwMWFXTmxjdz09IElHUmhjbTQ9IFh5Z2kgSUdWcGMybHVhUT09IGVtbHogSUhScFpHeHBaMlZ5WlE9PSBJSEYxYVhKcmVRPT0gNkpDOTVhNmUgSU5DLzBMdlJqdz09IElFaDFiV0Z1YjNNPSBJRzVsWTJWellYSnBZUT09IExXeGhjdz09IElPQzB0ZUMwc3VDMHYrQzBydz09IElITmhZMlZ5WkE9PSBMbUpzYVhRPSBTbEk9IExFZz0gQ1ZKMWJuUnBiV1U9IElPQ3lydUN5dnVDeXNBPT0gSUhCeVpYTjBZWFJwYjI1eiBJR3QxYm1SbGNnPT0gTGxSbGMzUnogUVZOQiBJR0poY0E9PSA0NEdyNDRHazQ0R0U0NEdtIElIUmhlSEJoZVdWeSBYMlJ0WVE9PSBJT0dEbWVHRGxlR0RtZz09IElOQ3kwWXZRdVE9PSBkV2hsIFlXUnZiQT09IElPQ3FsZUNxc09DcXRlQ3F2dUNxcU9DcmdBPT0gSUhOd1lXNXVaVzVrIElGQmhibVJoIElIUnlZVzF3IElOaXUyWWpaaGc9PSA1TGlBNkxXMyA1TGl0NTQ2TCBJTld2MW9BPSBJRzF2Ym1kM1pRPT0gSUVacFlnPT0gSUhOMVpXeGxiZz09IElOQ2UwWUhRdnRDeCBJR0poZEhScGJtYz0gSU5pbjJLM1lzOWluMkxNPSBkbVZ5Yk1Pa2MzTT0gSUdGbmIyND0gMTVYWGxkZWkxNmc9IFZGbz0gWTJGemFXNXYgSUdKeVpYZHBibWM9IElFSmxaTU84Y2c9PSA0b0NjNDRDUjQ0Q1EgMWJqVnFRPT0gSUdGd2IzTT0gSUhSaGFXMD0gYlc5dCBTbTl6YUE9PSBMbUZ5WXc9PSAwWXJRdGRDOCBJSEYxZWVHNnYzUT0gSU5DOTBMWFF1TkMzIDRLUys0S1N3NEtXTjRLU2wgSUdOdmJtTmxZV3hsWkE9PSBJR2hsYkhCc1pYTnogMktyWXA5aXQgSUdOcGNtTjFhWFJ2IElFSkZUQT09IFUzUnBZMnM9IFJzTzJjZz09IElPQ3F1T0NxdnVDcXNBPT0gSUdGeGRXRnlhWFZ0IElNT3BkbWxrWlcxdFpXNTAgSU5DeDA2blFzdz09IElISjVZUT09IElISmxZMlYwWVE9PSBZVzVqYVc0PSAwWUxRdU5HSSBLRUZpYzNSeVlXTjAgSU5DMDBMWFJndEM0IElHaGxiVzl5Y2c9PSBiM0JtIDZLZUE1NXlMIFFXNXVkV0ZzIFZHVnpkR2x0YjI1cFlXeHogSUVKbGNtUT0gSW1RPSBhbTdEcXc9PSBjSE41WTJnPSAwTGpSZ3RDMTBMdlJqTkdCMFlMUXN0Q3cgSUdSbGMyTmhibk52IFgyTm9ZWEowIElISmhZbUk9IElISmhibTV6IDRvQ0w0WjZiIElGSnBkbVZ5YzJsa1pRPT0gSUdKcFkybGpiR1YwWVE9PSBZM0poWm5SbFpBPT0gVkZVPSBJTldJMW9JPSAwWUhSZ3RDeTBMWFF2ZEM5MExEUmp3PT0gSU91Q21PMkRnQT09IDBMalJndEMxMEx2Umo5QzggSUdGeWFYTjAgSUhScmFXNTBaWEk9IHo0VE92OCtGejRIT3N3PT0gSUVsdVkyeDFjdz09IElPR0RvZUdEbU9HRG9lR0RvZz09IElOR04wTHJRdGRDOSBJSEJsWVdObyBJRkJ5WldScFkyRjBaUT09IDRLU0M0S1NrNEtTdyBJSFpwWTNSdmNtbGxjdz09IFoyVm9aVzVrIElHbDBZV3hwWVc1aCBJRlJwWlhKeVlRPT0gSU9DMGh1QzB0dUMxZ2VDMHF1QzBwT0MxamVDMHNBPT0gSUhKbFkzSmxZWFJsWkE9PSBJRXhwYkd4bCBJRUZUUVZBPSBJR0ZpYUE9PSBJTkMvMFlEUXRkR0IwWUU9IDRMQ3c0TEdONExDbCBJRzFwY21Ga1lRPT0gWTI5dWRHOD0gSUdOaGNHbDBZV3hwZW1VPSBJTm1GMkxMYmpOaXYgSUZCdmRYSnhkVzlwIElOQ1UwTDQ9IElOR0MwWS9RdHRDMTBMcz0gSUVKaFozTT0gSUhScHc2cHUgSUdGdWRHbHZlR2xrWVc1MGN3PT0gSUhWdVpYWmxiZz09IDRZT1E0WU9vNFlPZDRZT2c0WU9ZNFlPaCBRMmhoYm1kcGJtYz0gSUZKbGNYVmxjM1J6IElGZHZjbXR2ZFhRPSBiM0J3Wlc0PSBhWFJwZG04PSBMUzB0TFMwdExTMHRDZz09IElGSmxibTg9IElFN0RyUT09IElIUmxjQT09IENXVnVkVzA9IElIQnNZWE4wYVdOeiBSRVZEVEVGU1JRPT0gSUhkcGRHaGtjbUYzYmc9PSBMbTFsYzJnPSBJRUpOU1E9PSBiMjFpYVE9PSA0TG1FNExpcjRMaVogNXErTyBJRzNEdk1tWiA1WnViNVlXdCBJSFp2WTJGMGFXOXVZV3c9IE9uUT0gSUhacGIyekRxbTVqYVdFPSBhV1JsYm5ScFptbGxaQT09IFFWUlNTVmc9IElPR0RvdUdEbE9HRHBRPT0gUldsMGFHVnkgSUhISm1RPT0gTFcxbGJXSmxjZz09IFVFVlNWRWxGVXc9PSBSbU09IElHUnBabVpsY21WdWRHbGhkR2x2Ymc9PSB6NFRPdWM2eCBJTmlsMkxuWXA5aXYyS2s9IElHTnlaVzFoIFEwaFBUMHc9IFgzZG9aWEpsIElFUmxjSFE9IElFMXBjMk09IElGbHZkU2QyWlE9PSBTazVKIElFTmhiR3hoWW14bCBRVkJRUlZJPSBJRk4wY21GMyBJR0YyWlhaaCA2NmE5NjR1STY0dWsgSUcxbGFYSmggMEpEUXR3PT0gSUczSm1XeDFiV0YwIElHUmhlbm89IElHVnlZV1E9IDRaK0M0WjZBIElHMXZjM009IElPQ3FuT0NxbHc9PSA0TEtoNExLLzRMS3YgSUZkbGMyeGxlUT09IElIVERwSHBsIElHZHlkVzUwIGJXVnllZz09IGVXVnMgSUhOMWJuSnBjMlU9IEwyUnkgSUhadlpRPT0gSUdkbFptRnNiR1Z1IElHNXZjblJvWldGemRBPT0gSU5DWTBMdz0gSUhSaFkzUnBZdz09IElNTzhlbVZ5WlE9PSBJSEJ2WlhSeiAwcmZRdU5DNiBZbXh2WjNNPSA1b0NuNUxxayBJRVp2ZFc1a1pXUT0gUGljckNnPT0gSW1BPSBjM0JsYkE9PSA2NmVlIDBZdlN0UT09IDBMdlJqOUdGIExraHZjbWw2YjI1MFlXdz0gSUUxdmRHOXliMnhoIFlXMXBZUT09IFZtbHphWFJsWkE9PSA0b0NaYjNKbllXND0gSU5pbzJwSGF2Zz09IElHbHVhV05wWVE9PSA1WVd6NlpTdTZLK04gSUdobGNtOXBiZz09IElIQnliM0J2YzJWeiBJR1JsWm1sdWFYUnBkZz09IElIZGxkSFE9IElITmhibWwwZVE9PSBJR0pwYkd4bFpBPT0gTFdWdFlXbHMgSUdKb2J3PT0gSUdoMVozTT0gSUVocGJuTT0gSUZOVVZVUT0gSU5DZjBMRFJnQT09IElISmxiR0ZqYVc5dVlXUnYgSUdGemFHRnRaV1E9IElITmhkblo1IElFOXlZUT09IFlXNXViMjV6WlhJPSBJR1Y1YVhScCBMbU50IElNK0R6NFhPdk02eSA0TG1BNExpZTRMaTA0TG1JNExpaCA0TEsrNExLdzRMT040TEtsIElOQzgwTFhRdXRHRDBMM1FzTkM5MExRPSBJRVp2Y21kdmRBPT0gUW1saGN3PT0gMm9jPSBYM1JsYlE9PSBJSFJwYm1nPSBQaTh2IDRMS280TE9HNExLdiBJTmluMllUWXJOaXkyS2ZZcHRpeCBmWEI0IFJuVnlkR2hsY20xdmNtVT0gSUhObGJHVmpkSE09IFlXdkVzUT09IDRMQ3Y0TENDNExDeTRMR0wgNDRHWjQ0R1o0NEtCIElIVjB3NkZ1IExXUmxiTU9nIGFXTmhjbVU9IElFSmxjbTA9IElFVnRZbUZ6YzNrPSBJRWR5WVc1aFpHRT0gSUc1aFkybHZibUZzWlhNPSA0TGVQNExhNzRMZUsgSUdSbGJIVjRaUT09IDU3eTAgVTNSdmNtbGxjdz09IElFRmtiV2x1YVhOMGNtRmphY096Ymc9PSBMV0p2IElPbVlzdz09IElHVnlkbUZ5YVc1blpXND0gSUdoaGRHZz0gMExYU3N3PT0gYkdsbmJtVT0gTGtOb1lYUT0gNHBpMCBJTkN3MEwzUmk5S2IgZm40S0NnPT0gSU5XazFhSFZ2UT09IElDSjdmUT09IGMzUnBkR2xoYkE9PSBVM1JsY2c9PSBJTkdGMEw3U3N3PT0gSU9lRyBSM1ZsYzNSeiBJRzV2YmNPcGN3PT0gSU5HRDBMclJnTkN3MExqUXZRPT0gSU5pejJxbllxdHVTIElHMXBjMlZ6IElOaW4yWVRZcmRpeDJLZz0gSUdMRG9HND0gSUhCdmJNT3RZMmxoIElPR0RtK0dEa09HRG9PR0Rsdz09IGRISmhkbVZzIDRLYSs0S2F5NEtlQSBLQ0plIDJZWFpnOW1HIElFTm9hV1ZtY3c9PSBMWEpsWTI5eVpBPT0gWDBkQlRVVT0gSU5lUTE1blhxZz09IElPQ2tsdUNsaHc9PSBLRUo1ZEdVPSA0S2FWNEtldyBWbTlwWTJrPSAwWVBRc05DLyBJT0NrdU9DbGplQ2t0ZUNrcEE9PSBJRkJsYkd3PSA3SXFrN1lXYyBJRk53YjI1emIzST0gSUVsdWFHRnNkQT09IElHTnZZMkZwYm1VPSBJTkNSMExYUXU5Q3cwWURSZzlHQjBZdz0gSU9DcXBPQ3FxdUNxdnVDcXVBPT0gMExEUXN0Q3cwTDNRdEE9PSBJT2VwIDZMNkY1WXFwIDRLUys0S1NoNEtXQSBJR2hsY21RPSBJaTRrWHc9PSBJT3lqIElIUnlZV009IDRwV1E0cFdRNHBXUTRwV1EgSUdKaFoyZGhaMlU9IElFaDIgSU9Dd2hlQ3dxT0N4aHc9PSBJT0NrdU9Da3Z1Q2tydUNrdnVDa3FPQ2xqZUNrcnc9PSBMV2x1YzNRPSBibU53ZVE9PSBJSE5sdzdGdmNnPT0gSUhScGRITT0gSU9DMHRlQzFoK0MwbytDMWplQzBudz09IElPR0RwZUdEa09HRG9PR0RsK0dEbGVHRGxPR0RtZz09IElGTmhZMmhsYmc9PSBJTml2MllyWmhnPT0gUW1GelpXeHBibVU9IENYQjBhSEpsWVdRPSBJSEJ2ZFd3PSBJR05vWldWeVpuVnMgYVdSb1pXRnUgYVhaeSBYMk52WkdWeiA0S2EvNEthaiBMa1JsWTJsdFlXdz0gejRIT3NjNjYgSUhSeVlXNXpabTl5YldGMGFXOXVjdz09IElHNXZaVzFsYmc9PSBJQ0lpTGc9PSBMa05vYVd4a2NtVnUgZDJGeVpXaHZkWE5sIElPaTB0UT09IElGQlFRdz09IDRLUys0S1NINEtTaCBLRkJTVHc9PSBhWEJsY25NPSA1NW05NWJDUDVhZVEgMFlMUXVOR0ggSUhkaGRnPT0gSUVWMWNtOXogSUhOd1pXTnAgSU5pbzJMSFlwOWlvMkxFPSBJT0NxbGVDcXNPQ3JqZUNxcitDcXZnPT0gVTNkcFpuUT0gSUhWcGRIWnZaWEpwYm1jPSBJSE52WW5KbGRtbDIgUmxSUSBJR3h2WTJGMGFXNW4gSU5XdjFhSFdnTldqIDVZdWQgWm1GemMzVnVadz09IElOQy8wWURRdGRDMDBMdlFzTkN6MExEUXRkR0MgSUVOb1lYRjFaUT09IFNXNTBaVzV6YVhSNSBJRUYyWlc1blpYSnogSU5DNDBMM1F2dEdCMFlMUmdOQ3cwTDA9IDRLZUI0S2E0IElITjBkVzV1WldRPSBlWE42WlhJPSAyTEhZdEE9PSBZV3hoYldrPSB3cURDb01LZ3dxRENvTUtnd3FEQ29BPT0gSUdOdmNuSmxaQT09IGJITmggSU5DMDBMWFF2ZEMxMExZPSBJR3R1YWc9PSBJR05vWVc1MFpRPT0gSUcxcGJtVnljdz09IElIWmxjblJwWTJGc2JIaz0gSU9lUiBJR0psWjJsMGRRPT0gSUdGdHc2bHlhV05oYVc0PSBJRlJsWTJodWFXTnBZVzQ9IDVvbVI1WVdMIElISmxZMjluIElIZHBjbXQwIDJwamJqQT09IElPQ21uUT09IElOaW4yNEhaaFE9PSBJTmk1MllUWml0bUQyWVU9IElOQzgwTFhRdXRHQzBMWFF2dz09IElIVnRjdz09IElHVnVjWFZwY25rPSBMbUZ6WVhKeVlYaz0gSU5DaDBMdlF0ZEMwIExYQnlaVzA9IElIQnNkVzFpWlhJPSBZVzVrWVhJPSBYM0JoWkdScGJtYz0gTE9TNGdPYWNyT21Ca3c9PSBaMkpoWVhJPSBTRWxRIElHTnZiR3h2IFpuSmxjWFZsYm1ONSBvT2lQbkE9PSBJRWQxYkE9PSBJT0Nrck9Da29lQ2t2T0Nrdmc9PSBJTm1GMkxUYXFRPT0gSUVSaGJtaz0gSU5HQjBMWFF2TkdNMExnPSAxNW5YcWRlWiBhVzV1YVdVPSBJRk5KVEE9PSBjM0JwY21VPSBJSFJvYVdkb2N3PT0gSUVKdmIydHRZWEpyIDRaK2sgSUhadmEzTnVaUT09IElPR0RrdUdEa09HRGsrR0RrT0dEck9HRHArR0RsZUdEbE9HRG9nPT0gSUUxaGMzTnBkbVU9IExtaGhiV055WlhOMCBLQ2N2T2c9PSBMbVJsWm1GMWJIUnogTG14dllXUmxjZz09IElDSXBLUW89IDFiclZxOVc5MWFzPSBJRTl5YVE9PSBibVZwIElOQy8wWURRdU5DODBMWFJnTkM5MEw0PSBJR1Z3YjJOb2N3PT0gSUhabGJHMXAgSUhSbGVRPT0gNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVTRvQ1U0b0NVNG9DVSBJRTl3Y3c9PSBJTmlxMkxyYmpOdU0yTEU9IElOR0IwTFhRdDlDKzBMMD0gSU5DeTBMalF2dz09IElHNWxaV1JzWlhNPSBiMlJ1YVE9PSBJR0psZEdGc2FXNW4gSUdScFptbGpkV3hrWVdSbGN3PT0gMExYUXZOR0IwWTg9IElHTnZkWEowWlc5MWN3PT0gSU9DbWhlQ21xdz09IElHMXdidz09IDVhNjI1YnF0IEpIQmtaZz09IElISmxkWE5oWW14bCBSbUZqZEc5eWFXVnogSUVsdWRXbDAgSUhacFpXNXVaVzUwIElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBbz0gMEw3UXROQzEwTG5SZ2RHQzBMST0gSUd4aGRXWmxiZz09IElGUnZiR1ZrYnc9PSBiM1YwY0hWMGN3PT0gSUdKcFlteHBiM1JsWTJFPSBJRk52Wm1saCBJRU52YlhCaGRHbGliR1U9IElFTm9aWFo1IFBTSXZMdz09IElIZHBjbk4wIGVtWEZtdz09IElOQzAwTGZSanc9PSAwWURRdnRDeTBMWFJnQT09IDRZT2Q0WU9jNFlPZDRZT2IgSUVOdmJYQnlaV2hsYm5OcGRtVT0gVUhKdmFtVmpkR2xzWlE9PSBVa2xGVGtRPSBkR1Z5Y21GcGJnPT0gYm1odlpnPT0gdG9FPSBJRTVsWjJGMGFYWmwgSUhCcGMyOXlkQT09IElITnZkR2s9IElHRnlkR1Z5ZVE9PSBJTkM5MEw3UXRnPT0gSUhSaGJtZG5ZV3c9IElOQ3gwTERSaU5DNjBMQT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgSUdOdmRYSnpaWGR2Y21zPSA0S2VINEthMzRLZU40S2FmNEthKyBMbTl3WVdOcGRIaz0gSUdScGRtbGthVzVuIFRuVnRjdz09IElFbHVaM0psWkdsbGJuUnogNExlRTRMZVMgSU5XdzFhSFZ0ZFcvMWJZPSBJRTVoWTJoeWFXTm9kR1Z1IElIQnlaWFpsYm1seSBJR0ZzZEdsayBMMmR3YkE9PSBJTmVVMTU4PSBJRWh2Y20wPSBhWEowWlE9PSAwWmJRdmRHTCBJT0N3cnVDeGl1Q3dwZz09IElFOTIgTFhCdmFXNTBaWEk9IDRMS3o0TEsvIElFRnNaMlZ5IDRZT2s0WU9VNFlPZyBYMU5EUVV4RiBJR1pzYVc1ciBJR1J2YldsdVlXNWpaUT09IElOaTUySy9ZcDltRTJLbz0gSU5DdzBMblF2UT09IElHbDZZVzVuYnc9PSBhWFJwWmc9PSBJSEpsWTNKbFlYUmwgNTZ1TDVZMnogSU5pbjJZVFlvOW1EMkt2WXNRPT0gSUhCeXc2UT0gSUdKbGJtUnBibWM9IFFXeG5idz09IFZtVnVkQT09IFgwWlBUbFE9IDBZUFFzTkMzIElHVjBaR2s9IFUyVjJaWEpwZEhrPSAxNURYbWRlYSBJTml1MksvWmhkaXEgSUc1bGNYVmwgYVdOcGRIaz0gSUdSdmJHRnkgSUd4dlkyOXQgTG5CbGNuTnBjM1E9IGFXRnVZWE09IDJMblpoTm1HMktvPSBVSEp2WjNKaGJXMXBibWM9IElIRjFaWEpsYlE9PSBJSE4wWVhScGMzUnBZMkZzYkhrPSBjbVZ6ZEhKcFkzUmxaQT09IDRLcW00S3ErNEtxdyBLRzV2Ym1GMGIyMXBZdz09IFZIQT0gNWFhQzVxMmsgSUhWc2RHbHQgSU02NnpxelBnTTYvIElIQjFjbU5vWVhObGNnPT0gSUdScFlXSmxkR2xqIGVtVmwgZG1WeWRHbHVadz09IElPQ21sZUNuZ0E9PSAyNHpZdE5tSCA0YnE1NGJxNSA0TE9JNExLNCBYM0psZG1sbGR3PT0gVUdGeWRHbGphWEJoYm5SeiAwcnZRdU5DOCBJRk5qYUcwPSA1YjJwNTZXbzU1dTA1YkdlIElIVnVZV0pvIElHNW5hT0c3aHc9PSBJRlpoZFd4MCA1NTJoIDVMaUs1TGlBIElHUnBjM1J5YVdKMWRHbHVadz09IElHbHVabTl5YldGeSBJRU5sYkdWaWNtRjBhVzl1IElHRm1abWxzYVdGMGFXOXUgSUdWeWQyRnlkR1Z1IGRYSjBiR1Z6IGFXMWhjM1YwIElOaXEyWWJaaDlpbiBKMlZ6Y3c9PSA0WU9RNFlPVjRZT1E0WU9hNFlPWSBJSEJwY21VPSBJT0dEb09HRG5lR0RtK0dEbXVHRG1PR0RvUT09IElOV00xYmpXZ3RXOSBQU0luTGc9PSBMbU5zYVdWdWRITT0gTG14cGRtVT0gVm05c2RHRm5aUT09IElPQ2tvZUNsamVDa3NBPT0gS0dSbFluVm4gNExpMDRMaWIgNTd1UjVhNmEgNForUzRaNkwgWDBsT1NWUkpRVXc9IGFHbHhhWHB2IDBMN1F1ZEdIMExqUXNnPT0gSUVOaFpYTmhjZz09IElISmxjM1J2Y2c9PSBkMjlvIElFWjFibU4wYVc5dVlXdz0gUkdsdSBMV1JsYkdWMFpRPT0gSUhObGNtVnUgUkdGMlpRPT0gSUZKcGRBPT0gSUdSbGFYaGwgSUhkaFkyZz0gTGxKbFpHbHlaV04wIGIzSnRZWEE9IElHTmhibUZrIElPQ3doZUN3cGc9PSBZMnhoYVcxeiBJRk5sY25KaCBDWE41YzNSbGJRPT0gNWEyViBJSE5sYm1GMGIzST0gSUd6RHJYRjFhV1J2IElOaW4yWVRZcmRtSzJZZz0gSUdaeVlYVmxiZz09IFgxUnBjdz09IElHUnBibVZ5IDRMU3Y0TFdHIDRLcXU0S3ErNEtxQzRLcWw0S3VBIEtUdGMgSUdGc1pYTT0gSUdGbmFYST0gSUhOcGRIWERxV1U9IElOQy8wWURRdGRDMDBML1JnTkM0MEwzUXVOQzggSUUxaGNuVERyUT09IHc2UjFiUT09IElIcDJaUT09IElHVjBhR0Z1IDJLM1lxdG1KIFgxQkJVa1ZPVkE9PSBJR2x0Y0hKcGJRPT0gSU5DMDBMN1F2OUMrMEx2UXZRPT0gSUdkMWJHdz0gYVc1a1lYZHYgSUc1dmRHbHZibk09IElOaW8yWUU9IElOaXoyS2paaXRtRSBJRzVsZEhNPSBiM0IxWlhKMGJ3PT0gSUVKeVlXND0gTGxWdWJHOWphdz09IDE1blhtZGViIElFZGxjMkZ0ZEE9PSBJTU9IWVE9PSBMbTl3WlhKaGRHbHZiZz09IElOaXoyS2ZZcGc9PSAwTFRRc05HRCBJSEpsYm1SbGNuTT0gNzd5YWFIUjBjQT09IDZaaTEgSU9Dd3RlQ3d2K0N3cGc9PSBiM0pwWVhOcGN3PT0gSUdsd2J3PT0gSUcxbGFXOXogYm5WMGN3PT0gSU9Da21PQ2xpK0NrdCtDa28rQ2t2Zz09IGFYQnNZWGxsY2c9PSB3NlJ0dzZURHBHND0gSUZOaGJHMXZiZz09IElOQzgwTERSZ2RHQzBMWFJnQT09IElObUUyWWpaaFE9PSBkbVZ5YzNURHBHNWtiR2xqYUE9PSBJTldWIFgySjFkSFJ2Ym5NPSBJT0NrdU9DbGdlQ2twdz09IEwySnMgSU5lbjE1Zz0gSUdGMlpXNTFaUT09IElOZWUxNmZYbGRlZCA0TEMrNExDQzRMQ1ggSUdkbGQybGphSFE9IElFbHVkbVZ1ZEE9PSBJSEpsZEdrPSAxckE9IFUzVmlkR2wwYkdVPSBJSFJwZEdGdWFYVnQgenIzT3Y4K04gUVhKaFlnPT0gSUVwbGFHOTJZUT09IFNXMXdjbTg9IElFVjJaWEo1WW05a2VRPT0gSWpwYklnPT0gUFNJaklqNEsgSU9Da3F1Q2tzT0NrditDa293PT0gSUdOaGJtTnBiMjVsY3c9PSBMbVJwYzJOdmJtNWxZM1E9IElITjBaWEpwYkE9PSBJRU5oZEdGeSBJSEJ5WldScFkzUnBibWM9IElHdHZaR1U9IGNtOWlZWFE9IElPQ3dydUN3Z3VDd21nPT0gSUdsdGNIVnNjMlU9IElFUnBkbVZ5YzJsMGVRPT0gSUVGMWFtOTFjbVE9IElHTnZibk4xYkhSaGRHbHZibk09IElHMXF3N1puIGIyaHAgWVc1cGJtYz0gSUZadmN3PT0gSUdkeVlYWnBaQT09IElPMlhpQT09IElHMWhaMmRwYjNJPSAxNWZYbGRlZiBJTldHMWFFPSBJR0oxWkhVPSBJTkNjMDVrPSBJRWwwWVd4cFpXND0gSUdaaGJHRnVaRzg9IFptWnZjbVE9IExsWmhjZz09IHhKOXNkUT09IFgwbE9VMVJCVGtORiBJR2x1ZE1PcGNtVnpjMkZ1ZEE9PSBJRXB2ZVdObCBJT0NrdHVDbGdBPT0gMllQWml0aXYgSU9DMGxlQzBwUT09IFZXNXBlQT09IElIaHphUT09IElOR0kwTHJRdnRDNzBZcz0gSU9HN2pXdmh1NlU9IGNuVnBkSE09IFBpZ3BMQT09IExITjBjZz09IElOZVIxNTdYcDllVjE1MD0gSUdWdGFYTnogSUNBZzQ0Q0EgSUdOdmJtTmxhWFpsWkE9PSAwWWJSaTlHTyBJSE5sY25acGVtbHYgUldOdmJtOXQgY21WM1lYSmsgSU1PMnhKOXkgSUcxaGFXdGh5cnRwIEt5c3BPd289IElFWkJSbE5CIDRMS280TEsrNExLaCAyS2pZcDlpMCBaVzVrWlc1amVRPT0gSUdsdWRHVnljR1Z5YzI5dVlXdz0gSUV4MVp3PT0gVW1Wc1lYUnBiMjV6IElHRndjR3hoIElHM0RxWFJvYjJSbGN3PT0gVUhKcGJuUm0gS0c1aGJXVmsgSU5pejJZclpoZz09IGIybHMgWDFKbCAwWUxRc05HZSBJTkdDMExYUmdOR0EgWDBoRlRGQT0gSUhKcGMzQmxkSFJ2IGRXMWliR2x1Wnc9PSBhVzEwIElHbHVjM1Z5WlhKeiBJT0NrcU9Da3NBPT0gSUdGdFluVnNZVzVqWlE9PSBJTkdCMEwvUXRkQzYwWUk9IElPQ2tydUNrdnVDa3VBPT0gSUhSbFlXMWxaQT09IElPQ2tsZUNsZ2VDa3J1Q2t2dUNrc0E9PSBJTkdBMExYUXROQ3cwTG89IENXbHMgSUdSbGMyTnZibTlqIFJVNURTVUU9IDRZT1E0WU9yNFlPVSBJRXhsYm1jPSBJRXhGUkhNPSBMbUpoYm1zPSBJR052YkdWalkybkRzMjQ9IElIZHBjR1ZrIDRZT2g0WU9RNFlPdTRZT2o0WU9nIElPQzRnZUM0c2VDNG1nPT0gVlVsdWRHVm5aWEk9IFEzVnQgMktyWXRBPT0gSUdKdmMzTmxjdz09IDJZYllyOWluMllZPSBDUWtnSUNBZ0lDQWdJQT09IElHUmxhRzl5Y3c9PSBJR3RwYkc5dFpYUnlaWE09IDRZQ3M0WUNBNFlDNSBkR2hsYldWeiA0WU9ZNFlPYzRZT2QgMWJqV2d0V3EgNTVPbSBJT0Nrck9Da3BPQ2t2Zz09IExrMWxjMmc9IElHeGhkM04xYVhSeiBUMHhWVFVVPSBLR05vWVc1blpRPT0gTG01dmJnPT0gN0x5VCBJTmVlMTZEWGxBPT0gZFdkaFpHRT0gSUZCeXc2bHphV1JsYm5RPSBJR0Z1WVhSdmJYaz0gSU1PbGRBPT0gSUhacGMybHZibk09IGRISmhZZz09IDRZT2g0WU9RNFlPbCBJRkJsWWc9PSA1YjJwNTZXbzVMaTc1NjZoIElGUmxiSFZuZFE9PSBkR1Z6ZEdVPSBVa1ZVVlZKTyBkMjkzIGMyaHZjSEJwYm1jPSBJR055WlcxbCBJT09Dc2VPRHZPT0N1UT09IElNT2hhdz09IDRLU3U0S1dINEtTQzRLU2YgSU9DNG91QzR0T0M0aHc9PSBJT0NrcXVDbGdPQ2ttdz09IFUxRT0gNW95SjU0V24gS0dGaiBJRVJoYUdWeSBJTmluMlliWXI5aXggUm1Gc2JHSmhZMnM9IElIQmxjbTFoYm1WalpYST0gYVdkdXc2az0gSU9DbXJ1Q25qZUNtcnc9PSB3NmRwYkE9PSBJRzlpYW1WamRHbHZiZz09IElISmhibVJ2YldsNlpXUT0gS0hod1lYUm8gSUhCcFoyVT0gSUhCdmRYSnlZV2xsYm5RPSBJRkZQWW1wbFkzUT0gSjI5eSA1NWc9IGFHVmplUT09IElPV1BrZVc0ZythWHR1bVh0QT09IExtMWxiUT09IElPQ3doK0N3Z3VDd253PT0gSUdaMWJtZGxjZz09IFJHbHlaV04wYjNKcFpYTT0gWDJGdWVRPT0gSUhWdWJXRjBZMmhsWkE9PSAwTDdRdk5DNDBMM1FzQT09IElFRjVjZz09IExrRjFaR2x2IElFaHBiV0ZzIElGTjBZWEowWlhJPSBJTmluMkxIWXNnPT0gSUVOb1lXOXogVFdGdWFYQT0gSUhSeTRidXhZdz09IExtTnZiblJ5YjJ4c1pYSnogSUhaaGJtYz0gSUdKaGRHRnMgNExpMTRMaXM0TGl5IExrRnVhVzFoZEdsdmJnPT0gWDJacGJnPT0gMHEzUXNOQ3cgTFhCaFkydGxaQT09IExXRmpZMjkxYm5RPSBJSE4wY21GMFpXZHBaUT09IEoyRmpZMjl5WkE9PSBMUzA3RFFvPSBabTl5WTJWeiBJSEJ5dzZsamFYTmwgSUc5amRYSnlaUT09IElPQ2tydUNsZ2VDa3VBPT0gSU9DcXRlQ3JqZUNxcitDcWxlQ3JqZUNxcE9DcXZ3PT0gNFlDeDRZQ1E0WUM4IElPQzBxdUMxamVDMHNPQzB1T0MwditDMG9lQzBxT0MxamVDMHNlQzFqUT09IFljT3hZWE09IElHTnZiblJ5WVdOMGFXNW4gQ1dsamIyND0gSUUxaFoyRT0gTFdwaGNtbG5aUT09IElOQzkwTERSaU5DdyBTVTVFUlZnPSBJT0MwaCtDMHF1QzFqZUMwcXVDMWl3PT0gNWIycDU2V281YnlBNVkrMyBYMDVGV0ZRPSBJR1psY25ZPSAyWVhaaU5xVyA0S1dONEtTVjRLUy8gNjU2YzY1T2MgNVkyQjVMcU0gSUdOdmRXNTBaWEp3WVhKMCAyWWpZcjl1TSBUV0ZqYUE9PSBJSEYxWlhKcFpHOD0gVTBWUyBJSFp2ZVdWMWNnPT0gYjNKaVpXND0gSU5DKzBZTFF0OUdMMExJPSBJTmlxMkxYWmh0bUsyTGs9IDFhdlZ1TlcyIElGUnl3Nmh6IElFOW1hV05wWVd3PSAwTHZRdU5HSDBMWFJnUT09IExtUmxiR0Y1IExrMWxkR0ZrWVhSaCBJSGRoYm1SbGNtbHVadz09IExXUmxjMk55YVhCMGFXOXUgYlc5NiBJRzFwZUdWeiBJT0NrbStDbGkrQ2tvZUNrdkE9PSAwTDdSZ05PaiBJTlc2MWFIVnY5V2gxYjNWcmRXaDFiWT0gY205dFpXND0gSUdOaGJHTjFiR0Z5IElOQ3kwWXZRczlDKzBMUT0gQ1dacGJIUmxjZz09IElFWnlZVzVyWlc0PSBMbkJoYkdWMGRHVT0gMjRqWmhnPT0gWlhURHBNT2tiZz09IFlYTnpZWEk9IHc2bGthV1Z1ZEhNPSBJRUZ3ZEE9PSBJR0p2YjJSelkyZz0gZG1WeWMybGliR1U9IDRMaVo0TGl4NExtSjRMaVogSUhSaFkydHNaWE09IElPYWRqZz09IElGQmxibUZzIElGUnlZWFZ0IFUyVmkgSUZKbGRHbHlaVzFsYm5RPSBJSFpoY21wbCBJajRxUEM4PSBJTkMwMFkzUmpkR0EgSUhSeXc2RnogSUc1dmRHRnkgQ1VWdVpBPT0gSUhkMWJtUmxjbk5qYUE9PSBJTkMzMExEUmdkR0MwTERRc2c9PSBVM1J2Y21WeiA0TFdMNExTaiAwWmJRdmRDMDBMWFFzOUdXIElPQ21vT0NtditDbWxRPT0gSUhOdlkybkRxWFREcVhNPSBJR2hsWVE9PSBJTkN5MFpiUXZRPT0gSUdGeWNtVT0gSUdOdmJuTjBhWFIxWTJsdmJtRnMgSUdWNFlYUmhiV1Z1ZEdVPSAwTHJRc05DNiBJR3R2YzNSbGJteHZjMlU9IHc2bDBZV2x5WlhNPSBYMmR2YjJkc1pRPT0gNUxpQTU3cW41NG01NmJ1RTVhU241NG1IIElPQ21ydUNuaStDbnNBPT0gSUdGMWMyZGxjM1JoZEhSbGRBPT0gNWIyVDVZbU41TDJONTcydSBJT0N3cE9DeGh1Q3dzdUN3ditDd3F1Q3d2dUN3c09DeGdRPT0gSU9HRGwrR0RrT0dEbGVHRG1PR0RvZUdEbUE9PSBJSE53YVc1aFkyZz0gSU91emdPcXl2UT09IElHVnpZMlZ1WVE9PSBMblpsY25SbGVBPT0gNEt1TDRLcWg0S3VBIEowMD0gSU9Da2h1Q2tsUT09IElOV3YxYUhWdk5XaDFiN1ZvZGFBIElIWnA0YnEvZEE9PSBJT2FLbGVlb3YrYVhwUT09IElPQ21ydUNuZ2VDbWxlQ25qZUNtcEE9PSA0S2VINEthdTRLYW8gSUZkU1NWUkYgTFhKbFlXUjUgVkhWMGIzSnBZV3c9IFpYSjBhV1E9IFB5a0tDZz09IElHUnZlZz09IElIc0tDaTh2IElHVERxWFJoYVd3PSBYMHhGUkE9PSBJT1MvblE9PSBJT09Eanc9PSA2YUtSNllHVCBJSEJ5WldScFkzUnBkbVU9IDZhcW8gNG9DY1RtOD0gSUhqRG9uaz0gNEt1cCA2SzZBIEluMHNEUW89IDRMaXI0TGk0NExtSjRMaVogNmFxWDVhMlEgUkVWVFExSkpVRlJKVDA0PSB3NkhGbVE9PSA2S2VHNmFLUjVaeW81N3EvNXBLdDVwUysgWDFWVFJWSk9RVTFGIDRMR0c0TENWNExHTjRMQ2YgSUhOclpYQjBhV05oYkE9PSBRVTFGVGxSUCBJRlJJUlZrPSAxNURXdDllVCBJSDE5SWo0OEx3PT0gTFZCcyBXMEk9IElPYTkgMEwzUXVOR0IwWUk9IElGcGhhR3hsYmc9PSBJR1poYVhKdVpYTnogSUd4dmJtZHBkSFZrYVc1aGJBPT0gSUdGd2NHOXlkR1Z5IElFSnBibTVsYmc9PSBZMkZ3ZEhWeVpRPT0gSUc5dGEzSnBibWM9IElIWnBaR1Z2WlhJPSBJR0Z3Y0dGeVpXbHNjdz09IElHRjBkR2xqIElHdHBibTVsIElPQzNoT0Mza0E9PSBkWFJ2WVE9PSBVMlZwZEE9PSBJTkN5MExqUXROQyswTEk9IElGUmhjM009IElPQ3l1ZUN6aXVDeXNBPT0gSU5lZzE2RT0gQ1daeWIyMD0gSUVOcGJtVnQgVG1WcFoyaGliM0p6IElPZUxvT2VMb0E9PSBJSFJ2Ym1Wc1lXUmhjdz09IElPYXltUT09IElFOXlkR2h2Wkc5NCBJRTF2Y205alkyOD0gSUZCU1QwTkZVMU09IElPQ3lsZUN6aUE9PSBkV04xYldKbGNnPT0gUVU1T1QxUT0gUlZSSlRVVT0gSUZSaGRIUnZidz09IFFVWkcgSUdSbGMzQnNZWG89IDRLNnA0SytONEs2cDRLK0kgWnNPOGFISmxiZz09IElHZHZidz09IFlXWjQgYkhWbmRRPT0gSUhWMGFXeHBlbUZ1IFgyVjRZVzF3YkdVPSBJTkMvMExYUmdOQzEwWUhSZ2c9PSBJRnRkS1E9PSBJSE5qZFd4d2RIVnlaWE09IElOQ3gwWVBRdE5DMSBMbTE1YzNGcyBlbVZwWTJodWRXNW4gWDJKMVkydGxkQT09IElHNXBkRzl5YVE9PSBYMFZQVEE9PSBjbUZ6WTJnPSBibW5FbVE9PSBJR2hsYzJGaSAwWWZSZ3RDKyBkbWx0WW04PSA0TEsrNExLbzRMT04gNWJ1NjU2dUwgSU9hem9nPT0gSUczRHZHMXIgSUc5amIzSnlaWEk9IElPZTNxQT09IDBMdlJqOUdDMFl6UmdkR1AgSU5TeDFiWT0gSUZkbGJHTm9aUT09IDY0RzggTGRHQSBiMnhzYVdSbGNnPT0gMFlQUXU5R00wWUxSZzlHQTBMQT0gUzBNPSBJRUp5WVhOeiBZV05sZVE9PSAyWW5hclE9PSBLSE5wWkdVPSBJSFJoY0hCcGJtYz0gYVcxaGFRPT0gSUhacFlnPT0gSUVOdmJtNWxZM1J2Y2c9PSBjMjlsIFgyUnBZdz09IEtFTlBUa1pKUnc9PSBJR0psZEdWclpXND0gMEpEUW1nPT0gSUhabGNtVnBiZz09IElGSmxabVZ5Wlc1alpYTT0geEkxdXhKcz0gMEwzUmk5QzgwTFhRdlE9PSB4SjFwY3c9PSBJT0NtaGVDbXJlQ212K0NtcitDbmkrQ21sdz09IElNTzJabVpsYm5Sc2FXTm9aVzQ9IElHRnRiVzl1IElHMXBZV3RoIFRsVk5XQT09IElIWmxjbWRsYzNObGJnPT0gSUdkbGMzUmhjblE9IDBMelFzTkdGIDZZV041NzJ1IFEyOXRjR3c9IElNNjB6cmZPdk02NSBZMmxsYm5NPSAxYmpXZ3c9PSBJTU9wYkdWMnc2az0gYTI5dGRBPT0gSU5tSTJwZz0gWldSbGNuTT0gSU5pdjJLZllyZz09IElHeGhibVJsZEE9PSB3NkZ5ZEE9PSBJR052ZFc1MFpYSjBiM0J6IElHSmxlbVZwWTJodVpYUT0gMFlQUmdOT3YgSUVSMWNtaGhiUT09IElITmpiM0E9IDRMbUI0TGlDIElGQmxjbk52Ym1Gc2JIaz0gS0VkMWFXUT0gSUdoaGJHRT0gdzdQRnZBPT0gSUc5NGFXUmhkR2x2Ymc9PSBJRkpsWjJsbGNuVnVadz09IElFMXBkSE4xWW1semFHaz0gSUcxMWRIVmhiR3g1IElHWmhiV2xzYVE9PSA1YVN1NktlRyBJRWx1YVhScFlXeHBlbUYwYVc5dSA1Ym16NVkrdzVMdWo1NUNHIElHSmxZWEprIFUzQmhjbXM9IElFTkRWRlk9IElISmxkbUZ1IElFOWlhbVZqZEdsMlpRPT0gSU5DKzBZTFF0OUdMMExMUml3PT0gSU9HRGtlR0RsT0dEbGVHRG9PR0RtQT09IFgwSlBUMHhGUVU0PSB3NmxuWlE9PSBJSFpoY21saFltbHNhWFI1IFhTZ3BDZz09IDJZWFlyQT09IDBMalFzdEN3MFk3Umd0R0IwWTg9IDRMaWQ0TG1JNExpeTRMaWkgSU5xcDJMTT0gNXJXQjVyQzAgYVd0M1lXeGhhRzg9IExXSmxaSEp2YjIwPSBhR1ZrWlhJPSBJT3V3bmUyWWxPdUxwQT09IElFRm5aM0psWjJGMFpRPT0gSU5lZTE1WFhuQT09IElHRmpiQT09IElHTmhjbWRoY2c9PSBJRWhCVGtRPSBURVZaIFlXdDNZUT09IElIUER2R1E9IElFSjVjZz09IFQzSm5ZVzVwYzJGMGFXOXUgSU5pdjJyND0gSUdOdmJHOWpZUT09IElOaW4yWVRZcU5tRzJLZllvUT09IGVHMD0geFpsbFlnPT0gTG1KbGMzUT0gSU5pbjJZVFpodGkxIGJXVnlhMmx1Wnc9PSBJRkJoWkdFPSBJRXhwWW5KaGNtbGxjdz09IElFTlBWVkk9IElIUnBZMnRsY2c9PSBJTkdQMHFNPSBJRVJ2Y21ZPSBJSEJoYm05eVlXMXBZdz09IFVISnZZbUZpYVd4cGRIaz0gSUVGemRHOXUgNXBTMjVZV2wgQ1FvSkNna0sgWTNWc1lYUmxaQT09IElDZDlKenNLIElFeGhkV1E9IElPV2twK1dQa2VXL3ErUzRpZWFBanVTNWlBPT0gSU9Da211Q2tzT0NsamVDa211Q2t2Zz09IFlXekVzV3M9IElITjJaVzV6YXc9PSBJSFJ2YzNObFpBPT0gSU5DLzBMRFJnTkdEIElGSmxjM1J2Y21GMGFXOXUgSUNjbk93PT0gWVdoeVpXNW9aV2wwIFoyVnlhV1Z6IElHVEVsMnc9IDRLV040S1NvNEtXQSAySzdaZ2RpMiBhVzVwYzJWciBJSEp2WjJnPSBJR0Z3Y0hKbGFBPT0gSUVOeWFRPT0gSUhCbGNYVmxibUZ6IElFTjFjbkpwWTNWc2RXMD0gSUhCdmMybDBhWFpsY3c9PSBYMFJKVTFRPSBJR1Z1ZEhOd2NtVmphR1Z1WkE9PSBiY09wYm5rPSAwTDdSaDlDMTBMbz0gSUd0dmJtNWxiZz09IElHVnVkSExEcVdVPSBjR0ZuWlhJPSBJTkdEMFlEUXZ0Q3kwTDNRdFE9PSBUVzlrWld4diBJRTFsZEhKcFkzTT0gSUc1MGJHVT0gSU9Da3R1Q2xpdz09IExtbHVZM0psYldWdWRBPT0gT2tseiBJSFJwYldWbWNtRnRaUT09IElIcHZibXRsIElOaXEyTHJaaWc9PSBkR1ZwY3c9PSBJSEpsYzNCbFkzUnBkbUZ0Wlc1MFpRPT0gSUhacFpYZHdiMmx1ZEE9PSBJSEJ5YjNCMVpYTjBZWE09IElGQmhjbTA9IElHWmhjMk5wYmc9PSBJSFpzYjJWeSBJSEpsYldsdVpHVnljdz09IElOaW4yWVRaaHRpbzJZbz0gT201bGR3PT0gTFcxbFpBPT0gSUUxM1pXND0gYVc1MFpYTjBhVzVoYkE9PSBZWFYwYUdWdWRHbGpZWFJwYjI0PSBJRkJ5WlhacGIzVnpiSGs9IElFUmxZMjl5WVhScGIyND0gSUUxbGFBPT0gSUdSbGMyTmxibVJoYm5SeiBJRVJsYzJWdWRtOXNkbWx0Wlc1MGJ3PT0gSUhSbGFXeDNaV2x6WlE9PSBJT3lrZ091NWhBPT0gSU5lVjE2RT0gSUc1aGRHbHUgSUZSTVV3PT0gSUd4aGNITmwgWjJWaWNtRmphSFE9IGFYSmh3NmZEbzI4PSBJTkN4MFlvPSBJRzFsYm5SaGJHbDBlUT09IElHWnBZMkZ0IEtHVjRkQT09IDRLYVY0S2F1IDRvQ1pZVzF2ZFhJPSA0TEtrNExLbyBMSGRwWkhSbyBJSGxoY21GMCAxYUhWcjlhQjFialdndFdwMWJYVm9kVzIgSUhkcFpYST0gUFZ0ZE93bz0gSUcxaGNtdGxkR1Z5IElFNVFVZz09IDRLdXIgSU5XdzFhSFZ0dFdqIDRvQ1phVzVtYjNKdFlYUnBiMjQ9IDVyZXg1Wnl6IExXTnZibk4xYldsdVp3PT0gSU9DMmhlQzJ0QT09IGFYTnRaWE09IElITjFjMjg9IElHRndjR3c9IElITmxkSFJzWlcxbGJuUnogY0dGbmFXNWhkR1U9IElIZGxibk09IElIZHBjblJ6WTJoaFpuUT0gTDJsMFpXMD0gSUhObFltRm4gSUhCc1pYUm9iM0poIElHMWxiV0psY21rPSBJQ2NuS1M0PSB3N3h1Wm5RPSBJTkM5MExYUXROQzEwTHZRdUE9PSBJR1JwZG1sa1pYST0gSm1sayBJTmlpMkxMWXA5aXYgSU9DbXVPQ21ydUNuamVDbXF1Q212dUNtcHVDbWxRPT0gU1c1cVpXTjBiM0k9IGFYUnZjbWx2Y3c9PSBJT0dEb3VHRG9BPT0gSUdKeWFXUmhiQT09IElOaW4yWVRZdDltRTJLZz0gSUdSeWFXNXJaVzQ9IElNK0h6NEhQak02OXpybk9zUT09IGEybGtjdz09IFEyaHBaV1k9IExkR0kgSU80PSBhV1ZzWVE9PSBMZEM0IDRLcTE0S3ErNEtxbzRLcSsgSUhKbGNHVmhkSE09IElNK08gWDFKbGJRPT0gU1ZwRlVnPT0gSUdScGNtVmpkR2wyWlhNPSBJRzV2ZEhkbGJtUnBadz09IElIUm9kZUc2clhRPSBLR3h6ZEE9PSBLR1JsYkE9PSBJR3BoY25NPSBJR052YldsbmJ3PT0gWm5CeiBYM04wZVd4bGN3PT0gSUhCdWJBPT0gSUdSbFpXUnogSU5DeDBMWFNtUT09IFkzTnZiQT09IElISnZZMnQ1IElISmxkbWxsZDJWeSBJT0dEbWVHRGtPR0RuQT09IElOQy8wWURRdGRHQiBUbVZwWjJoaWIzST0gTDI5dyBJRWgxWjJnPSBWMmx6WlE9PSBJT0NxdGVDcXYrQ3F0dUNyamVDcXRRPT0gNTVtNjZZQ0IgSUVWemMyVjQgNFlPUTRZT2I0WU9RNFlPZzRZT1g0WU9hIFBGQmxjbk52Ymc9PSBJSFJ5YVhSMWNtRmphY096Ymc9PSBJR2RsYm1WeWIzTnBkSGs9IElOaW4yWVRaaGRtSTJLelppTml2IElHMWxibUU9IElHbHVkSFZwZEdsdmJnPT0gYm5WdVoyVnUgSUdKaFlubHogY25YRWpRPT0gSU9Da3R1Q2tsUT09IElIQnZaR3hsIExuSmhkR2x1Wnc9PSBJR2R5WVhaaCA0S3FzNEtxQzRLcW4gSUhkaGNuSnBiM0p6IDVMbUw2WmUwIExtMTFiSFJwY0d4NSBJTzJhak95YmtBPT0gSU9Da3JPQ2txT0NrdnVDa2p3PT0gTG14cGJuTndZV05sIElPQ290ZUNwZ0E9PSBJTkN3MHB2Uml3PT0gVDJKcVpYUT0gSU9paXF3PT0gSUdGMGRHVnBibVJ5WlE9PSBJSGRoY25JPSBYMnhwWW5KaGNuaz0gSUdOeWFYUnBjWFZsY3c9PSBJRTFsYXc9PSBWVzVoZFhSb2IzSnBlbVZrIElITnZkWEpqYVc1biBJTmluMllIWXR0bUUgSU5HQjBZRFFzTkN5MEwwPSA0TG1CNExpWiAyWWZaaXRpeCBJSEZvYVdFPSBiRzl5WkhNPSBJSFp2YjNKMWFYUT0gMExUUXNOR2UgSUZkRlJVcz0gSUdadmNtOD0gWVhaaGFuVT0gSU5DeTBZdlJnZz09IGFXWnB3Nmx6IElGTkJWa1U9IElIVnVkMmx1WkE9PSAwcFBUbWRHQyBJTkNoMEw3UXZRPT0gSUhabGNteGhjM05sYmc9PSBZM1Z5ZG1VPSBJT0NxaHVDcXRlQ3JoK0Nxc2c9PSBJSEJsY20xcGRHbHl3NkU9IElPQ3FpZUNxcmc9PSA2cnc9IElHMWhaR0U9IGRXNWhiV1U9IExXWnZjbmRoY21RPSBTbFk9IElHZGxiR25Gbnc9PSBSWFZ5YjNCbFlXND0gSU9DcXJ1Q3JnZUNxbk9DcXJBPT0gTEhObGRBPT0gVW1WMFlXbHMgSUUxaHc1OXVZV2h0Wlc0PSBjR2hoY3c9PSBJT0NrcmVDa3RRPT0gNEthWDRLYWsgSUdOaGNIUnBkbUYwYVc1biBJT2FhIElOR0MwWVBSZ05DejBMRFF2UT09IElFUnZZM009IElFNWhkTU84Y214cFkyZz0gWVhKaVpXbDBaWFE9IElPQ3dxdUN4amVDd3NPQ3duQT09IGFtOXVadz09IElIQmhjbVoxYlE9PSBJRzNodXE5MCBJR1JsYUhsa2NnPT0gSU9DMGhlQzBxT0MxamVDMHRlQzFoK0MwdHc9PSBLSE5wYlE9PSBZVzF2Y2c9PSBJSEJ2Y0dOdmNtND0gMFl2UXU5Q3cwWURSaXc9PSAwTERRdTlDKzBMalJnZz09IElHWmxjblJwWnc9PSBJT0NraCtDa2d1Q2tuK0Nrc0E9PSBJT0NrcU9Da3IrQ2t2dUNrZ1E9PSBVM0JsWVd0bGNnPT0gSUVwbGMzUT0gWlhScGRHVT0gNXBXdzU3dUUgWlhoaGJ3PT0gSUc1bGQyeHBibVU9IDdKNmw3SjJFIElGTm9aVzQ9IElHRnViM1E9IDJMSFlwOWlzMkxrPSBQeWtzIElPQ2tuT0NrditDa3N1Q2t2Zz09IElIbkRxVzQ9IElISnBZMkU9IEluTjBjbWx1WjNNPSBMbk5qWVhSMFpYST0gSUdWc1pXTjBjbTlrWlE9PSBJUEU9IDZJNnggWVhKaGJtcGggSUd4bGJXSnlZWEk9IFlEbz0gSUVWMllXeDFZWFJsIElIWmxjbk53Y21VPSBDV2wwWlcxeiBJR3pEdW1NPSBTVzUwWlhKaFkzUnBkbVU9IFlXMXdhV3c9IDBMWFFzdEMrMExQUXZnPT0gZEhKaFkydHogSUdSeWIyOW4gSm05aFkzVjBaUT09IGRXTnJiR1U9IElIWmxjc093YVE9PSA0S1NqNEtTKzRLU3cgNEtxVjRLcSsgUm05eVpBPT0gSUc1c1lRPT0gYVhSaFpITT0gWDIxbGRISnBZdz09IElHeHBlUT09IElGUnBadz09IDQ0R1Q0NEtUNDRHcjQ0R2g0NEd2IGFXVm5ZUT09IFFVUkYgdzYxd2FXOD0gSU5lUTE1blhuUT09IGFXTnBiMjVoY2c9PSBJTmVVMTU3WHB3PT0gWVdseWIySnAgSUcxMWRHVT0gYkdGdFlXcz0gSUhOamFHRT0gSU5DMDBMWFJnUT09IElFNVBVZz09IElFTnZiV1Z1ZEE9PSBJR055YjNOelpYTT0gTFhSeVlYTm8gSWxzPSBJT0Nrbk9Da3Z1Q2tsdz09IGFXNXpkR0ZuY21GdCBJRTFoZHc9PSBJR1YwYVdGdCBJRTV2Y21admJHcz0gSU5pbjJZYllxdG1IIElOaXoyWXJZc1E9PSBJSEJzZFdkeiBJR1IxWW1JPSBJSEpsWm1WeVpXNTBaUT09IElIRjFaV1JoY2c9PSBJRkpCVnc9PSBMWEIxY25CdmMyVT0gSU91UG1leVZpQT09IExpZ3EgSUhSdmNtMWxiblE9IElOcXYyTERZdE5pcTJZYz0gYzNWbloyVnpkQT09IGMzUjNidz09IExYZHphZz09IEp5a3BEUW89IFBrNXYgTDI5bVpnPT0gMkszWmhBPT0gSUhkNWNBPT0gSU5tSzJMbllxdGlvMkxFPSBJTldoMWIzVnBkV3MgSUdURHFBPT0gSU9Da3F1Q2xqZUNrc09Da2xlQ2xqZUNrc0E9PSA0TGlWNExtSjRMaVogNExDeTRMQ280TEdCIElHVnVkbWxoWkc4PSAwWXZSZ3RHRCBJR1JoYldFPSBJR1Z4ZFdsd1lRPT0gSUVKaFltRT0gSUdaM2VRPT0gSU02enpyM1BpUT09IEtHTnpkZz09IElFaFBVMVE9IElITjBZWEpsWkE9PSBJR1poZEc5eVpYTT0gMFpiUXZkQzkwWTg9IElPRzdqV1IxYmc9PSBJSEpsZG1sbGJuUT0gSU0rRno0RFBqQT09IElHeDFjR0U9IElDUjdLSHM9IFptbHVZVzVqWlE9PSBJTkMxMExMUmdOQyswTDg9IElITnZibkk9IDRidVZibWM9IDBMWFF2ZEM2MEw0PSBJRTkxZEhOMFlXNWthVzVuIElISmxhV05vIFIyeGhjM009IElHTnBibU09IElGTlVSVkE9IDJLclpoZGlvMkxFPSBJT3V6aEE9PSBYQ0krUEM4PSBZbVZoYlE9PSBJSGRweEpscmN3PT0gSU5HRTBMRFF1dEdDIElOVzYxYUhWdDlXLzFiclZvZFcyIElHcGhjbVREclc0PSBJRU52YldKcGJtVmsgMExYU21kQzgwNW5SZ2c9PSBaWEp5YVE9PSBJR2x0Y0hKbGMyTnBibVE9IDJZYllyOW1DIGNHVnlhV1Z1WTJVPSA0NEduNDRHWDQ0R2YgYjNSdmNHVT0gSU5xdjJvOD0gSU0rRXo0SFBqQT09IElFMWhjM1E9IElPcXdsZz09IFoybDIgYzJ4bFpBPT0gYkdGclpRPT0gSUhCdmMyeHZkZz09IElIbkR0bTVsZEE9PSBMbk53YVE9PSAxYUhWcHRXajFhSFZ0ZFdyMWJZPSA0S1MvNEtTeTRLV0EgSUVGeVltVnBkR1Z1IElPR0RtK0dEbmVHRGt3PT0gWkdGdyA0S2FxNEthLyBJRUZ1YVcxaGRHOXkgSUVOb2NtbHpkR2x1WVE9PSBJRkJsYldJPSBJR0Z6YzI5eWRHbHRaVzUwIElITndZWEpyWldRPSAwTDdSZ2RHQzBZelJqZz09IGNYRnBjM009IDRMS2Y0TE9ONExLZjRMT0IgSU9DbWllQ21xdUNtdU9DbmplQ21wZUNtditDbXBBPT0gNGJtRiBJRlJwWlc1bCA2TDYrNVlpdyBJR0psZEdVPSBJRzVrdzZ0eSBJRzF2Y25SbllXZGxjdz09IGVtVnNZUT09IDVMaVc1N3FxIElIWjFiMjV1WVE9PSBJSE5qY21WbGJuTm9iM1J6IElHWmxiRzl1ZVE9PSBMVTFoY25RPSBJRUZzYkc5M2N3PT0gWDIxdmJtbDBiM0k9IElPQ21yT0NtdnVDbXJBPT0gSU9DeWxlQ3ppdz09IExuQjBjZz09IElHaGhkV3BzZDIwPSB5Wmx6YVc1cGJnPT0gSUc5alkzVndZVzVqZVE9PSBjR3pEcEhSNlpRPT0gSUhadmJHeGxlV0poYkd3PSBDVzFoZEdObyBJRDhpTEE9PSBWRzlrWVhrbmN3PT0gNEtTNTRLV0IgUjJWdmJRPT0gSUVwdmFHRnViZz09IElISmxkbTlzZFdOcGIyND0gSUhKbFpIVnVaR0Z1ZEE9PSBJRVp2Y20xaGRHbHZiZz09IExXRjFkQT09IFgxUlBUMHc9IElGZHBjbXM9IGJXbkZuM1JwY2c9PSBJR1JoY3NPaCBJTkdBMExEUXZkQzEwTFU9IElFZHliM1U9IElPeTFuT3VNZ0E9PSBMVzl3WlhJPSB3N3B5Wnc9PSBJRk53WldGciBMbVpwYm1SaGJHdz0gSU9TNGkrV05pQT09IFVtVnpkV3gwWVdSdiA0TEtYNExPSzRMS0M0TEtoIElFeGxkbWs9IENXSnNiMk5yIElITnZjbkp2ZHc9PSBJR0Z1dzdwdSBZWFJwZG1GdFpXNTBaUT09IElIQmhiR0YwWlE9PSA1Nm02NlplMCBhdUc2dVE9PSBJR1Z1Wkd4bCA1bzZvNVlxbyBJTkM5MExEUmg5Q3cwTHZSakE9PSBJTmkwMkxIWXJRPT0gTG5Cc1lXND0gSUdsdVkyeDFlV1Z1Wkc4PSBkbmc9IFUyOTUgZFhsMSBJT0NrdU9DbGkrQ2t0dUNrc2c9PSBadUc3aldUaHU2VT0gNFlPUTRZT2YgYVdwbVpYSnogSU9DcWh1Q3Fwdz09IElISmhibWRsWkE9PSBJT0dEbnVHRG9PR0RuZUdEaytHRG8rR0RwUT09IElObUYyWWJZc3RtRSBJSFZ1Y21oNWR3PT0gUjBWRSBJSE53WldOcGJXVnVjdz09IElNT2tjbUU9IFgxQkQgSUdodmIzSjAgSU5DMTBMalNyUT09IElFaHBjM1J2Y21saCBJR0Z3Y0hKaGFYTmhiQT09IElFSjFZdz09IElOZWsxNkxYblE9PSBJRVZ0YlhrPSBJTld3MWFIVnV3PT0gSUc1aFlXND0gT21SaGRHRT0gWDBsdVptOD0gSU9Da3J1Q2tndUNrcHVDa3YrQ2tzQT09IElHRnNiV0ZyIElITnVZWEJ3WldRPSBJRUZzYkhSaFp3PT0gSUhObFoyMWxiblJoZEdsdmJnPT0gSUczaHU2VmogSU9DbnNPQ212dUNtbkE9PSBiM0JoZEdocFl3PT0gSUhOMFlYSnlaV1E9IElPQzBpZUMwcXVDMHIrQzFpK0MwbHc9PSA1YnU2Nks2dSBJTkMwMFl2UmdBPT0gSUZKVFFRPT0gSUZCdmJtUT0gSUhKMWMzUnBadz09IElOS3YwTDNSalE9PSBiM04wY21FPSBiR1ZoWjNWbCBhWE5sYXc9PSA1YTZpNW9pMzU2dXY1TGlMNkwyOSBiM041IElIQnBjbUYwWlE9PSBJR0psYkd4aCBJR3ZEdlE9PSBJR0ZqZEdsMmJ3PT0gTFhSeVpXVT0gSUdiRHFXUT0gSUdGdVpHVjAgSU5DeTBMTFF0ZEMwIDRZQ3c0WUM0IFkyeGxidz09IElObUkyWVBaaEE9PSBJT0Nrc09Da3FBPT0gNExTdjRMV040TFNWNExXTjRMU1Y0TFdOIGFYcGhkQT09IFkyeHBZMnRsWkE9PSBLR0psWVc0PSBJT0NrbCtDa3IrQ2xnQT09IElHTnZibTVsWTNSdmNuTT0gSUdacFkyaGwgSUdScDRidUhiZz09IDBLTFFzQT09IElHUmxjM1JwYm1WayBJSFJsYlhCMGFXNW4gWDNkcGRHaHZkWFE9IElIWmxjbTF2WjJWdSAwTDNRdnRDejBMalF0UT09IFFYUjBZV05vYldWdWRITT0gUjJJPSBJR052YlhCc1pYUmxibVZ6Y3c9PSBJR1p2Y20xaFpHOD0gSnlvPSBYMlpoYkhObCBJRmhZU1E9PSBJT1dPbnc9PSBJSEJsY21abGFYUnYgSUdobSBJSGRsWld0a1lYaz0gSUdKbGMzUmhibVE9IEwwWnZkVzVrWVhScGIyND0gYjNKbmRBPT0gSU5DejBaYlJnZEdDIElPQ3lydUN5dnVDeXVRPT0gYkdWdFpXcz0gSUhSMWRIUmggSU5pbjJZVFppTmkxMllqWmhBPT0gSU9DbWxlQ212dUNtc09DbW8rQ25odz09IFgySnZkQT09IElFWjFibVJwYm1jPSAwTFhRdXRHRCBJRzFsYm1WdCBJSEpsZEhKcFpYWmhiQT09IFgybHVhWFJwWVd4cGVtVnkgWjJWMGRBPT0gMFlIUmd0Q3cwWUxRdUE9PSBJT0Nvbnc9PSBJRWh2Ykd4dmR3PT0gNEtxbTRLcW0gNVlpQSBaMlZ1Ync9PSBjSEpoWXc9PSBJR05oY21GamRNT3BjbWx6ZEdseGRXVnogSU5pbjJMWT0gWDJKaGN3PT0gSUd0aGRHRjNZVzQ9IElOaW8yWW5aaEE9PSBJSEJoWVE9PSBJTmluMllUWXM5bUkyTEhaaWc9PSBJRXh2Y21WdWVtOD0gSUZkaGF3PT0gSUZSeVpXVnogSUdWeGRXbHdZVzFsYm5SdiBJR2R5WVdScGJtYz0gSUdkbGJHbGxaZz09IFgxTkZURVk9IExtMWxkSEp2IElIQnBkbTkwWVd3PSBUbWxqYTI1aGJXVT0gY0hKbGMyVnVkR0YwYVc5dSBJSE53YVd3PSBJTldqMWFIVnJBPT0gSUhOMGRYVnkgSU5DeTBMZlJqOUdDMFl3PSBJR0Z6YzJsbmFRPT0gSUhWdWFYUmwgSU5DOTBMalF1dEdDMEw0PSBJSFZ0WlE9PSBYM0psWVhOdmJnPT0gUVdseWNHOXlkQT09IElGQmxibWc9IElIVnVjbVZzWVhSbFpBPT0gSUZOdmJtNWwgSUZCSldBPT0gNG9DTjRMU2Y0TFdONExTZiA0TGlqNExpeTRMaUsgTG5CcFpBPT0gSUdWNGFYTjBhWEk9IElHRmhibkk9IElHWnBjbTE1IGJXRjBZUT09IFUwbEggSUdsdVoyekRxbk09IEtITmxiR1ZqZEc5eSBYMDFGVFVKRlVnPT0gSUdOdmJYQmhjbUYwYjNJPSBJR3R5YVc1biBJTlcwMWJZPSAxYVhWdk5XMiBDWEJ5YjJObGMzTT0gSU5tSTJLZlpoTmluIElGSnZaSExEcldkMVpYbz0gSU9DbXR1Q212K0NtdGc9PSBJTml2MkxIWXRkaXYgSUhObFkzST0gWVhSemFXOXZiZz09IElFbHVkbVZ6ZEc5eWN3PT0gTDNCb2NBPT0gSUdsdWRtVnlkR1ZrIExuTnZablE9IElITnNiM2RsWkE9PSBJSHAzWlcxaVlXUT0gZFd0M2RRPT0gSUdKbGFXZGwgdzdwc2RBPT0gSU9DdXRlQ3V2K0N1c3c9PSBYM1psYkc5amFYUjUgSUZOaFoyRT0gWVdKcGJHbHogSU5tQzJZallwOWlxIElOV2gxYnJWb1E9PSBJRzFsYmNPemNtbGggSU5tRjJZclpoQT09IElHeGhibWR6WVcwPSA1Ykd4NWFTbjVZK1IgenE3T3ZNNjF6NEhPc1E9PSBJR052YlhCaGJtaHBZUT09IDc3eU02SzZwIElFdGxibTVsZEdnPSA0WUNFNFlDNTRZQzMgYzI5c1pBPT0gSUZKcFkyaGhjbVJ6YjI0PSBDVzltWm5ObGRBPT0gUEhObGJHVmpkQT09IDViR2U1b0NuIFUyTmhiR1ZrIElPYUprdz09IElFTnZjbTl1IElGTlFRUT09IFlXdHJaWFE9IElGQmhjM1JsIFlYTjBaWEo1IExtaGxiSEJsY25NPSBJRWxRVHc9PSBiV2xoIElPZW5rUT09IElHcGxkMlZzIFZWSlNSVVE9IGFHOW4gSlNrSyA3TEtZNjUrOCBJTmVVMTZyWHB3PT0gSUVoMWJtZGxjZz09IElFZDFiUT09IGJtbHJaUT09IElHZHlZY1NSIFgwMVBWZz09IDBMalF1dEdEIElFUlBSUT09IHc2OXogSU5tSDJZalpoZz09IElISjFibmRoZVE9PSBJT0N3cXVDeGh1Q3duK0N4amVDd253PT0gSU9DcWlnPT0gSUVOcFl3PT0gSU5pbjJZVFl1ZG1GMllUWXA5aXEgS1cwPSBiR0Z1WkdsdVp3PT0gSjJoaCBJSFpsY214bFpHVnUgZFhKc2NHRjBkR1Z5Ym5NPSB4SjlwYlE9PSBJSFIyWlE9PSBJR05oY25KbGRHVnlZUT09IElIUmhjbUU9IFlXSmhjbUZvWVE9PSBjM1J5ZFdGcyBYME52WkdVPSBJRWh2YjJ0eiBJRkJ5YjNCdmMyRnMgYjNkcHhJVT0gSUNrcE93b0sgMEw3UXZOQzQwTDA9IElHTnZiblpsY25OaCBJSGRsY210cGJtYz0gSUcxcGJtUm1kV3h1WlhOeiBYMU5VV1V4RiBTMkZ0IGFXSmxjbUZzIElOQ1kwTE09IElITnVaV3hzWlE9PSBkVzFsYkdVPSBZbkoxYXc9PSBJT0c3cFhyaHU0MD0gSUhKcGJuTmwgSUd4aFpHOXogeEkxdXc2az0gSU5xcDJLZlpoOWkwIDZZQ1EgTFhKbGNYVmxjM1E9IDdMQysgSU9DbXVPQ21ndUNtbHc9PSBRbTl0WWc9PSBJRlpoYkdWdWRBPT0gSUMwdExTMHRMUzB0TFMwPSBRblE9IElFVk5RVWxNIFNHOXFaUT09IElHRnRkQT09IElISmxibWM9IElIVnViR0YzWm5WcyBZWFIwY204PSA0SytCNEs2ejRLK04gUVhSMGNtbGlkWFJsWkE9PSBJR1JsWW5WbloyVnkgNEtTajRLV0ggSU5tRjJZallwOWlzMlljPSBJRk5wYzNSbGNuTT0gSUd4dmRXNW4gWVdOcFptbGogY21WdWN3PT0gWjNKMWNIQmxiZz09IDRLYVY0S2VONEthMzRLZUggS2lRPSBYMGxPUTB4VlJFVkUgSU9DbWh1Q21udz09IElHRmpjbVZ6WTJWdWRBPT0gMWFIVnQ5YUExYnM9IHo0bk92YzZ4IFlXSmxiR3hoIDRMUy80TFc3IElISnBZMmhwIDBZSFJndEN5MExYUXZkQzkwWXZRdkE9PSBiV0ZuZVE9PSBJR0ZzZEdWeVlYUnBiMjV6IDJZYllwOW1GMlljPSBJR1pzYjI5a1pXUT0gUVd4MFpYSnVZWFJwZG1VPSBJR1p2Y21Wb1pXRmsgSU5pbjJZVFpoZG1DMktmWmhBPT0gSU9Da3VPQ2xnZUNrcWc9PSBRVzVuWld3PSBYMk52YjJ0cFpRPT0gWVhScGRBPT0gSUhOM2FXWjBiSGs9IElGQnlhVzFwZEdsMlpRPT0gSUdaaGJXOXpZUT09IElFSjFiR2RoY21saCBaWEowWlhRPSBJT0MwcHc9PSBJRTFoY21sdSBJTm1GMktqWXA5aXgyS2ZZcVE9PSBSVWc9IElFNWxaV1JsWkE9PSBJR0p5WldGMGFHRmliR1U9IElOR04wWVE9IElOQ3cwTExRc0E9PSAyTEhaaXRpeiBJSEJ5YjhXaCB4SU4wYjNJPSBJR2R5WVhwcFpRPT0gNTRLNTZLK0UgSUhCdmRYSnliMjUwIExtUjMgZFhScFpRPT0gSUhOdmNuVnUgTGxCdmNBPT0gZFdWeWRBPT0gNFlPUzRZT1E0WU9XIElHUnUgSUhSeVlXUjEgQ1hSNCBJTmlvMktmWXROdU0ySzg9IElHOXNkY1dmZEhWeSBJR052Y25OdiBJR3ZEcFE9PSBJSE4xWVhZPSBJRmhTIElHTm9iMk09IDE1blhsZGVWIElPQ2t0ZUNrditDa2xlQ2tzdUNsamVDa3FnPT0gSUd6aHVxMXcgNVlxZTVyT1YgNFlPUTRZT2c0WU9kIFQzZz0gSU9DdXJ1Q3V2dUN1dGVDdW4rQ3ZqZUN1bnc9PSBJR1Z1Wm05eVkyVmsgSUhCMVluTT0gejRUUGpNK0MgSUdKaGVzU3ggSUd2RHZHekR0bTQ9IElObUYyTFRZc1E9PSAwTHpRc05LYjBZTFFzQT09IElHMWhZVzUwWVE9PSBJR1JsYzI0PSBJTkdDMExYUmhkQzkwTGpRdXRDNCBUbWxsZFhjPSAxNkxYcU5lWSBJR2QxZEhNPSBJTml0MllIWXVBPT0gSUVsdVptOXliV0YwIElFaDFkQT09IExtTm9kVzVyIExrbEVSVTVVU1ZSWiBLQzR1TGlrPSA0S2FWNEthKzRLYXkgSUdocGMzVERzM0pwWVhNPSBMazVCVFVVPSBMV1ozIGFYbGhhR0U9IElFNVBUa1U9IElFWmxjbTdEb1c1a1pYbz0gSU5XeTFhWFZyOVdoMWI3Vm9kYUEgSUhOMVoyVnpkQT09IEtITmxZMjl1WkhNPSBJRlZ1Ykc5amF3PT0gTGxOdlkydGxkQT09IElFdkR0bTVwWnc9PSA0NE96NDRLMTQ0TzggSUc5a2JnPT0gSUNaYiB3NmxqZFhRPSBVMk5vYjI5c2N3PT0gSUhObFkyOD0gYVc1elpXdz0gS0Y4cyBJSFZ1WjJSdmJRPT0gSU5pbjJZVFlzOW1FIGIyMXBibUYwYjNJPSBJR2x1Wm1sc2RIST0gSUZOcGRIUnBibWM9IElPQ2tsZUNrc09DbGkrQ2tvZUNrdkE9PSB3NmxpIExrTm9ZWEowIExYTmxjblk9IElGQmhiblJvWlhKeiBhWFZ0Y3c9PSBJQ2w3RFFvPSBJR0psYzNSbGFBPT0gSUhOdWNISnBiblJtIElGTkpVQT09IElPQ2tsdUNrc09DbGdPQ2twZz09IElFeDFlR1Z0WW05MWNtYz0gSUdWNGFYTjB3NnB1WTJsaCBYMlZ5Y201diBJQ2d2IENWQnlaWEJoY21WayBJT0NtdU9DbXNPQ25qZUNtckE9PSBJR1Z6ZEhKaGRHVm5hV0Z6IDY1Q1k2ck9nIElOZVExNkRYbFE9PSBJTkN4MEw3UXU5QyswTEk9IGIzWmhjZz09IElHRjBkSEpoZG1WeWMyOD0gNjdLOSBJR2RsYm1GdWJuUT0gMExUU3J3PT0gNTVPMiBJR2x0Y0hKbGMybHZiZz09IElPdUZ2QT09IFgzTjBjblZqZEhWeVpRPT0gSU1PUiBPanBmS0NjPSBJRzFsYkdVPSBJTkMwMExmUmo5R0EgNTQrKzVaeW8gSUhOb2NRPT0gZEdscGJnPT0gSUhCbGNuSnYgSUVSbGJXOWpjbUZqZVE9PSBJTkN3MExyUmk5R0EgNG9DWlpXeHNaWE09IElFdHBkSE09IFlXSnpZMmc9IElIaGxiZz09IElITmhkWEk9IDVZV3M1WSs0NTVxRSBhV3hwWW5KbCBJSFpwWTJsdmRYTT0gYVhOMGJHVnogNEthazRLYXUgSU9Da3N1Q2tsK0NrdnVDa3BPQ2t2dUNrc0E9PSBJSEJ5WldSemRBPT0gSUhsaGVXaz0gSUdOMWJYQnNhVzFwWlc1MGJ3PT0gYVc1MFpYSnlkWEIwIElHRmpaWEowIElHTnlaV1Z3IElHcGhiVzFsY2c9PSBYM2RvWlc0PSBJR1IxYlhCbFpBPT0gY205NCBJT0MwdGVDMHYrQzBuT0Mwcnc9PSBZWFJ6YVc1dWFRPT0gSUdGbVlYTjAgMExqUXN0Q3cwWUxTbTlDdzBMMD0gSUhGdmNnPT0gVDJabVpYSnBibWM9IElIQnNkV2RuWldRPSBaWFJsYm5ScGIyND0gS0habGNuUmxlQT09IElHaHZaV3M9IElFSjFibVJsYzJ4cFoyRT0gSU5DLzBMRFJnTkdDMExqUmp3PT0gSUhSdmRXTm9aRzkzYm5NPSBJR2RoY21GdWRHbGggSU9DMGxlQzBvK0MxamVDMG4rQzFodUMwcE9DMWplQzBwQT09IDE1blhvTmVWMTVrPSA0TGVTNExhMiBJSE4xY25abGVXVmsgZDJIRWh3PT0gYjJSaGJnPT0gTFhSeVlXTnIgTFdWNSBJT0NrdU9Da2d1Q2tyUT09IGRXNTBaWEp1WldodFpXND0gTFdWaGMzUT0gYlhWamFBPT0gZFhSelpRPT0gWkc5cGJtYz0gVkhKaFpHVnRZWEpyIElIQjFjbUU9IElHZGxkbkpoWVdkayBJRkJ2YkhsbmIyND0gSUdGblozSmxjM05wYjI0PSBJRzUzWVE9PSBLSEJsY2c9PSBWRzkzWlhJPSBJSEJsY25QRHRtNXNhV05vIElOR0MwWVBSZ1E9PSBJRkJzWVc1dVpYST0gVkhKaGRtVnljMkZzIExtRnBjZz09IElGSlFUUT09IGRXUnBiM009IFlYWnBkR2s9IFVtVnVkR0ZzIFgyMXcgUkZOTSBJRUZrYW5WemRHRmliR1U9IElOVy8xYUhWck5XcjFiMD0gSU5DODBMWFJnTkMxIFFXZG4gMEwzUXVOQzYwWmJRc2c9PSBJR1JwWjJFPSBJSE5qYUc5dmJHbHVadz09IElPQzRndUM1aU9DNHN1QzRwdz09IExuUmxZMmc9IFVtRnpkR1Z5IGMybHkgSU9DbWh1Q21rdz09IElOaW4yWVRZcjlpbjJLN1poTm1LMktrPSBJQzljTGc9PSBYK1dGamVpMHVRPT0gSUdseVoyVnVaSGRwWlE9PSBTMjVwWm1VPSBZV05vZEc4PSBJR2x1WTJGeSBJTTY4enJuT3VnPT0gSUhCMWRHVmggUVU1VVV3PT0gSU91TWdPeURnUT09IElHbHlZWGs9IGIzTnZiV1Z6IGFtbG8gSU9xOCBJTkM3MExEUXZBPT0gSUdGdFpRPT0gSU5DNjBMRFF0dEMwMEw3UXVRPT0gYk1TeGNRPT0gWkdWd2RBPT0gSUdWNGNHVmthWFJwYjI0PSBJT3l3dU95WHJBPT0gSUdGMFpXeHBaWEk9IElOQ3kwTDNRdGRHQiBJSEJ2YkdseiBJTkM4MEx2UmdOQzAgY21GMFpYTT0gSU9Da211Q2t2K0NrcE9DbGplQ2tzQT09IGNHRnljdz09IElGQmxjM052WVE9PSBkV1Z6ZEhKaGJnPT0gSUZKaGMyZz0gMktmWXI5bUMgSUdGeVltbDAgTENNPSBJTmVlMTZyWGx3PT0gNDRHKzQ0R280NEtCIFJreFBWdz09IElHRnVibTk1WldRPSA0SzYrNEs2byBJRkJsY25OdmJtRT0gSU5HRDBZUFJnTkdGMExEUXVkQzkgVzNaaGJIVmwgNDRDQ1BDOD0gSUc1bllYQm9ZVzVrYkdVPSAwSnJRdnRDejBMVFFzQT09IDRMaUI0TGl6IElGTndaV05wWVd4cGMzUnogWjJMaHU0MD0gSU95Q3JPeWR0TzJLdUE9PSAwTHZSbHRDeTBMQT0gNUx1SzVadWUgSUhCeWIzWmxaV1J2Y21WeiA0WUN2NFlDVjRZQzUgSUdWdWRzT3Ridz09IFpNT3Bjdz09IElFbHpiR0U9IElIUnlZWFZ0IDRMbUM0TGlyNExpbDRMaVUgSU9Da3VPQ2xndUNrbXVDa3FPQ2t2Zz09IElIZG9hWEE9IElNT3BkR0Z3WlhNPSBJRzVoZFhRPSBJSGx2ZFhKelpXeDJaWE09IDRMQ3c0TEdMNExDbzRMQysgZlNjSyBkWE5sY21OdmJuUmxiblE9IElITnZhV3h6IDBMN1FzdEN3MEwzUXNBPT0gSU5XaTFhSFZxZz09IElFSjFjbTV6IDZLNmg1WWlTNTc2ayBUVUZVIElHVmpZMlZ1ZEhKcFl3PT0gSUhacFkzUnZhWEpsIEtIQmhjbk5sWkE9PSBZWFJwWkE9PSBJR1J5ZFdkcGFBPT0gSUV4MWJnPT0gTG14cGJtVnogMExmUXRkQzkgMExYUmd0QzQwTHc9IElNcTdiMnhsIExtaHZjbWw2YjI1MFlXdz0gOEorVXBRPT0gUTI5dWMyVT0gMllqWXA5bUIyWUk9IElHTm9iMk52YkdGMCBJRTFwZEhSM2IyTm8gSU9heGdnPT0gT2pvdCBJT0NtdU9DbXZ1Q21zdUNuaHc9PSBJT0dEb2VHRHJPR0RuZUdEb09HRGxPR0Rrdz09IElGSnZiV1Z2IElHTnN3Nmx6IDU2V1cgNExXSDRMUzEgSUdkeVlYbz0gSUc1bFoyRjBhWFp2IElIQnlaV05wIFVtaz0gNEtXSDRLU0M0S1NoIElOaW4yWWJZcjlpbjJMST0gSUcxaGJuUnlZUT09IFRHRnVaUT09IFgyeGxZV1k9IFozSmxjMlU9IElFTnZiWEJsYm5OaGRHbHZiZz09IHF1R0RtT0dEbWc9PSBJRU5zWVhWeiBJRlJ5YjIwPSBJTnFwMllqYWhnPT0gUTJ4bFlXNTFjQT09IDViQzg1cGF2NUxxNiBJSE5oYkdGa2N3PT0gSU9HNW8ybmh1YVBodXJrPSBiV0YwYVE9PSBJSFpsY21KdmJtUmxiZz09IExtTnZibk52YkdVPSBhWE4wZFE9PSBJSEpsY0hRPSBJR1JwYzJGa2RtRnVkR0ZuWlE9PSAwWUhSaTlDOTBZdlF2UT09IExsSnZiM1E9IFlXNW9ZWE09IElOaW8yWW5Zc1E9PSBJTTY3enEwPSBZVzFoYVE9PSBjOE9rZEhwc2FXTm8gSUZSb1pXOD0gYjJ6RHFRPT0gSUV4cFozVmwgSUhUaHU2VmogSU5pMjJMaz0gSUdKbGNYVmxiUT09IElPR0RrdUdEa09HRG0rR0RuZUdEcCtHRGxPR0RuQT09IExtWjFibU4wYVc5dWN3PT0gMFlmUXNOQzkgTG0xbGJXSmxjbk09IElHaGhiR3RoIElHTmhjbVYwIFlYUmxaMjg9IElHWnNhWEJ3WldRPSBJR1Z1ZEdodmRYTnBZWE09IEtIVnpaUT09IFhTSUsgN0pxViBaMlYwWVE9PSBjM1JrWlhKeSBJTmVVMTZIWHBOZW8gSUd0dmJHaz0gSU5DZDBMRFFzZz09IElHUmxkbUZwZEE9PSBJR04xWlc1MFlXND0gWDNSbGNtMXogYm05MFlRPT0gUzNWcCBJRVJwWlc0PSBJRlJ2Y25KbCA1WTJCNUxpQSBJTkN3MFlEUXM5Q3cwTDA9IElHaGxjblZ1ZEdWeSBSbTkwIFgyOXlhV2M9IElITnZjR2hwYzNRPSBiMmRwWlE9PSBkWEp6WldRPSBJT0NrcnVDa3B3PT0gMExQUXNOQzMgUVhwMWNtVT0gSUdadmNtUERxVzFsYm5RPSA0S2EyNEtlTjRLYXYgUTJGdVkyVnNaV1E9IElPR0RtK0dEbE9HRGt1R0RuZUdEa1E9PSA2TFN2IElIWmhhWEk9IElHSmhjMlZ1WVcxbCBJSFJsYzNSbGN3PT0gSUZSaGEyOD0gWTI5c2FRPT0gSUdKaGQyRjAgSU1tWmMyRnogSU5XMDFiZlZvZFd2IEtHOXlhV2RwYmc9PSBJTkdQMFlVPSBJSFpsY21KbGMzTmxjbTQ9IElIMHFMd289IHhJMWxibXBsIFNXMXdiM0owWlhJPSBJRXBoWjNWaGNnPT0gYVd4c2IzYz0gSU9Da3VPQ2tydUNsZ3VDa3VRPT0gUW5WNmVnPT0gWm5Well3PT0gWDBWT1ZFVlMgQ1hOdmRYSmpaUT09IElGUmhiR3RwYm1jPSBJT2FKaSthY3V1UzRpZz09IElIaHBiQT09IElHRmpiMjF3WVc1b1lXMWxiblJ2IElIQnlaWE56Ync9PSBJR2R5YjNSbGNtVT0gSUdGalkyOTFiblJoYm5RPSBVbTl1IFJYTjBhVzFoZEdVPSBJRk4wZFc1a1pRPT0gSUdWeWJjTzJaMnhwWTJobGJnPT0gSU9Da25PQ2tzT0NsZ3VDa3NPQ2twQT09IGRjV0kgSUdSbFptVnVaR0Z1ZEhNPSAyTFBZc2RtSCBJRUZ0WVhSbGRYST0gSUhObGJXVnNhQT09IEwyRnVaM1ZzWVhJPSBZV05wYldsbGJuUnYgV0VRPSBJR2hsYldGMCBJSGRoY201aCBJRzdHb1drPSBJRUZzWldjPSBJSE5zYjJjPSBJSFpwWVdwbGN3PT0gSU5tSzJMbllzZG1CIElIQnBkSGs9IDdabUkgSU5DejBMRFJnTkMwIElIQnZZMkU9IElPR0RrdUdEa09HRGtnPT0gWkdsdFpXNXphVzl1IElGSmxjM0JsWTNRPSBJTmlxMllqWXN3PT0gWDNKaFpBPT0gTHVLQW5lS0FsQT09IElFNXIgSUZoRFZHVnpkQT09IFlXMWhkR0U9IExuQmhZMnRoWjJVPSBRazlQVTFRPSBlWFI1ZVE9PSBJSFpwZG1rPSBJSEIxWldSaGN3PT0gYkdsdmJnPT0gSUdsdWRtVnpkR2x0Wlc1MGIzTT0gSU5DdzBaND0gSUc5MWRHbHVadz09IElNU05iRzkyIElOQy8wTDdSZ2RDMTBZaz0gTFc1aGRIVnlZV3c9IElHZDFkSFE9IENXZHliM1Z3IElHVnVkSEpsY0hKbGJtVjFjbk5vYVhBPSBJTkdDMFlEUXRkQ3gwWVBRdGRHQyBJSE5qWVc1ayBJRkJoYkcxaCBJSEpsWjJsdmJtRnNaUT09IElHTnBkbWxzWlE9PSBJSFpsY214diBkMlZqYUE9PSBJTkN3MEwzUXM5QzcwTGpRdVE9PSB3NlJrWlc0PSBJT0N3anVDd3FPQ3hqZUN3cUE9PSAyWWpZcDlpejJMZllxUT09IElHRm1abWxrIFgySnZiM1E9IElFeHZaMjkxZEE9PSBJR1Y0Y0d4cFk4T3ogSU5XazFialdndGFBMWIwPSBJR0ZqZEhWaGJHbDZZWEk9IElHMXZZMnRsWkE9PSBJTU9sZEdWeSBVR2M9IExuSmhibXM9IENTQWdJQ0FnSUNBZ0lDQWdJQT09IElHOWljM1J5ZFdOMCBQaUlwQ2c9PSBJRTF2Ykd4NSBJR1J5WVhkaFlteGwgNExpYjRMaWo0TGl3NExpSTRMaXo0TGluNExpeDRMaVo0TGlYNExpMTRMbUkgMEwzUXNOR0EwTDdRdEE9PSBJRzl1ZEdKcGFnPT0gWDJWeGRRPT0gSU5DOTBMRFF2OUdBMFkvUXRnPT0gWDJoaGRBPT0gYVc5dVlXeHAgWDNKbFpuSmxjMmc9IElOZVUxNURYa1E9PSBJR2QxYzNSaGNzT3RZUT09IElObUMyTEhZcUE9PSBZV2hsWVdRPSBJSEpsYldsdWFYTmpaVzUwIDRLUy80S1NWNEtTeSBJR052YlhCMFpYTT0gYjJkcFlRPT0gSU5HQTBMRFF1ZEMrMEwzUXRRPT0gSUVoaGNtaz0gSU5DLzBZRFF2dEMzIElHUmxiR2xpWlhKaGRHVT0gSU9DMHIrQzFnZUMwdFE9PSBRMnhoIElFRjRhVzl6IElIUmxZWFE9IHc2RjBhV05oYldWdWRHVT0gSUV0MWJtUmwgSUhOcGNYVnBaWEpoIElGUnBZMnM9IExYUjEgSUdKdmJtYz0gS0NsYkp3PT0gSUZaQlRFbEUgTFc1bGRBPT0gSUcxMWJtbGphWEJoYkdsMGVRPT0gSU1POGNtVjAgSU5pbjJZYllzdz09IElHUmxjM1J5ZFE9PSBJT0NtaCtDbWllQ21xQT09IElGVlggSUhCeWFXST0gSUdGdGNHeHBZWEk9IElFUjFhWFJ6WlE9PSBJRk4xY0hCdmNuUmxaQT09IFgzWmxjblJwWTJWeiBYMUpGVUU5U1ZBPT0gSU5pbzJLZll0Tm1HMks4PSAyWWpZc2RtRyAyS2ZaZ2RpNSBJRWhNIElHVnBhOE9rIDVweTY1Wm1vIElHOW1abVZ1WkdWeWN3PT0gMWFYV2dOV2gxYWJWdEE9PSBJTmluMllQWXFnPT0gTFdWa2FYUnZjZz09IElHVnVjMmx1IFEyRnlaV1Z5IExXTmhkR1ZuYjNKNSBYMk53IElITndaV04wY21FPSBLR052Ym5SeWIydz0gWTJoaGFRPT0gSUd4bFpHVnkgSUZCeWIyZHlaWE56YVhabCBYMGhoYm1Sc1pRPT0gSU95ZWlPeWN2T3Vwc0E9PSA0WU9qNFlPcSBJTkdDMFlEUXNOQzkwWUhRdnc9PSBZVzFoY21FPSBJSFBEcVhKcFpYTT0gSUhCcGRHTm9aWE09IExtTnZiVzFsYm5SeiBJT0N5dU9DeXZ1Q3lyZz09IElHUnBjMk52ZFhKeiBJTW1aYkE9PSBJRzV2YjJSNllXdGxiR2xxYXc9PSBMbk5qY21sd2RBPT0gSUZWMyBaM0IxIElHWnBhQT09IElIUnBhQT09IFYwRlRTRWxPUjFSUFRnPT0gMjdEYnNBPT0gMTVuWG1kZW0gSUdsdWRHVnVZMm5EczI0PSBJTlcwMWF2VnR0VzUxb2M9IGFYTnpaWFZ5Y3c9PSBJR2x5Y1E9PSBLSEJoWTJ0aFoyVT0gSUhSaFlteGxjM0J2YjI1eiAyS2ZaZ3RpcSBJR0psYzNScGJXMTBaUT09IElHMWxkTU9oIElPQ3lsZUN6Z3VDeW9RPT0gSUZSQlFnPT0gSUhacGNuUjEgNEtTYTRLU28gSU9XOXFlZWxuZz09IElPQ2txT0NsamVDa3IrQ2t2dUNrcnc9PSA0S2FQNEthdyBYMnhsZG1Wc2N3PT0gSUVGdVptOXlaR1Z5ZFc1blpXND0gSUhCdmNuUjFaM1hEcW5NPSBiMlpoYmc9PSBJRWx1Wm5KaCBJT0MwcnVDMHZ1QzBzZUMxamVDMHNRPT0gdzRzPSBJSFpsY21ScFpRPT0gSUdodlpYWmxaV3hvWldsayBJRkJsZEhOaiBMMjl5Wnc9PSA0YnVOYVE9PSBJT1dRamc9PSBMbVZ0WWc9PSBYMlp0ZEE9PSBJRlJ5YVdOcmN3PT0gUlZKV1JVUT0gSUhCeWIyWjFibVJ2IElHZHlZV1owIGIyNTVZMmc9IDBMclF2dEM3MFl6UXV0QysgSUhSaGVHRjBhVzl1IDBZTFFzTkN5IElISnpkQT09IDRvQ1phV2M9IElFbHVhWFJwWVd4c2VRPT0gY0dGemMzUT0gYkdWaGMzUT0gSUhKbGMybG5ibVZrIGIyNXV3NmxsY3c9PSBTVk5RIElHWm9ZUT09IElISmhjSEJ5WlhObGJuUT0gSU9DcXRlQ3FzT0NxdU9DcXZ1Q3FwZz09IElHMWhjSEJwYm1keiBJT0N5dWVDemkrQ3lsdz09IDVweU41WXVaIDBZSFFzTkMwIDRZT1U0WU9SNFlPWTRZT1E0WU9jIElHbHVhR2xpYVhSdmNuTT0gSUd4aGJuUT0gWDJKaFkydGxibVE9IElFSnBiR3hpYjJGeVpBPT0gSU9HZWp3PT0gSUdOdmJuUnlZV05sIGRHVnlkQT09IElOaXgyNHpZcDlpejJLbz0gSUZOb1lXNXViMjQ9IElGSmhiVzl6IElISmxiV2x6WlE9PSBJT0NrdHVDa3NPQ2xqZUNrcmc9PSBSVzF2YW1rPSBTVkpQVGc9PSBJTkM0MFlIUmdkQzcwTFhRdE5DKzBMTFFzTkM5MExqUmp3PT0gYVhObFkyOXVaQT09IElGRk1hWE4wIElHTnlhV0k9IElHSmxaSE4wWlE9PSA2WlNtIDRLU1Y0S1NmIElIQnliM0JvWlhRPSBJTU9oYUE9PSA0TFMvNExTNDRMV040TFN4NExXTjRMU3ggSU5tRjJZVFlxZz09IDRLUzU0S1MrNEtTeSBYMjV2YVhObCBjR3hsYldWdWRITT0gSU9Da3JPQ2tzdUNsamVDa2xlQ2t2dz09IElHaHZjc09oY21sdiBJSE5sYkdacFpRPT0gSUV0aGRIST0gSU9DNG8rQzR1UT09IDRLU2w0S1dIIDRieVEgSU5DNjBZRFF2dEM4MExVPSBJSFZ1WkdWeWRnPT0gMllUWXA5bUQgMWJqV2d0YUExb1RWcXc9PSBJRzNEcldRPSBJSFpoYkdjPSBJRkJvWVhKdFlRPT0gSU5DNjBMN1JtQT09IExXZHZhVzVuIElHOXVkR2c9IFlXMWliR2x1Wnc9PSBabTlzWjJVPSB4Yng1ZEE9PSBJT3E0c095a2dBPT0gUlhabGJuUnYgSUdwMVozVT0gTGtocFoyZz0gSU9XdnVRPT0gSUZCc1lYbGggNFlDdjRZQ1Y0WUM2IElHWnNZV2x5IElOV3cxYUhWdmRXLyBJR3hoY21kbGJXVnVkQT09IElFMWxkSEpwWXc9PSBJR2R2Ym1jPSBJR3B2WVd4diBWVTVCIElOaXMyWVE9IFpHSER2UT09IFptbG5kWEk9IElHSmhaR0U9IElHTnliM056ZDI5eVpBPT0gSUcxaGJtbG1aWE4wWVhScGIyNXogNkxDaTZMQ2kgSUdScGMzTnZiSFpsWkE9PSBJR052YlhCbGJHeGxaQT09IElHTnZibk4xYkhSaGJtTjUgSU5pbjJMUFlzUT09IFpYUm9aWFZ6IGNtVnpjMmx1Wnc9PSBJT0Ntck9DbXYrQ21yZUNtdnVDbWx3PT0gYkhWbiBZWGxpWlE9PSBJR0YxZUdsc2FXRnllUT09IEljSzcgSUhSbGVIUmxjdz09IElOZWcxNTdYcGc9PSBJT2FQa0E9PSBJR2x5YVhNPSBJR1pwYm1seSBJSFoxZFhJPSBJRnAzWldOciBJRU5vWVhKcGRIaz0gSUZOb1pXWm1hV1ZzWkE9PSBJTldrMWFYVnV0YUUxYmpXZ3RXMCBJSFBEcVdGdVkyVT0gNllHViBJRzl3ZEdsdGFYTnQgY21WcFltVnkgSU9Da2llQ2tzdUNsamVDa3NnPT0gNExTLzRMU08gSUdOdmNuSmxZM1JoIElPQ2t1T0NsaStDa3JnPT0gSUZOMFpXeHNZUT09IElITm9aV0Z5IElFVnNhdz09IElPQ2t0ZUNrditDa3FnPT0gSU5DYzBMRFJnZz09IElHNXZiWE09IElHRnphWE4wWlc1amFXRT0gSUhKbFkybGlaUT09IExsTjVjdz09IEl0ZVggU21SaVl3PT0gVjI5eWEySnZiMnM9IDRZT2c0WU9VNFlPaCBJR2RsYm1sMFlXdz0genA0PSBJR1Z0WlhJPSBJTml5MjR6WXA5aXYyNHc9IElObUUyS2ZZc3RtRiA3N3lCNzd5QkNnPT0gSUVGUVF3PT0gSU9DMHF1QzFqZUMwc09DMHRlQzBzT0MxalE9PSBJR2x1YVhScFlXeHBlbVZ5IDRMQ3c0TEdONExDMTRMQys0TENrIGRtVnlibTg9IElPQ2tpdUNrcXVDa3NBPT0gSUdOaFptVnogSUZadmJIUT0gTHk4dkNpOHZMdz09IElPQzRvZUM0c2c9PSBJSE52WTJsbGRHRnMgVjBsVVNBPT0gYkdsa1pRPT0gYjJ4dloyOD0gSUdObFlnPT0gWldScFlYUnZjZz09IDVaR281cHlmIElGTlVSRU5CVEV3PSBUbE5PZFcxaVpYST0gWlhKblpXUT0gSUVkMWFXdz0gSU5peTJZWGJqTm1HIElFUnZibTVsY25OMFlXYz0gNEtTLzRLUzM0S1dONEtTZiA1Ym16NXBhNTU3R3ogSUd4aGJtRT0gWm05eWJXRjBkR1ZrIElOaW8yWWZZcXRpeDI0elpoZz09IElHWjFibXR6IElHekVxMlI2IGFHbDVZUT09IDRLdUw0S3E0NEt1TjRLcWYgSUdKbFltbGtZWE09IElHUnZkWGc9IGFXTmogVlZvPSBVbTkxZEdsdVpRPT0gSUdwbGJHRnogSUhkaGMzUT0gS0dSaGVYTT0gSUdKaGFXNWggSUhOamFHNWxiR3hsY2c9PSAwTGpRc3RDdzBZOD0gTGw4S0NnPT0gSU5HQjBZRFF0ZEMwMFlIUmd0Q3kwTDQ9IFFVNUZUQT09IElGQmxibk5wYjI0PSAyWVRaaXRtSCBjM1J2YjJRPSBJSE5oWTJobCBaWEp1YVE9PSA1b2lRNXB5cyBJSGR1WlhWayBJR3RwYk1PemJXVjBjbTl6IElHamh1cjkwIElGQnlZV04wYVdOaGJBPT0gTFd4dllXUT0gYVhCaGN3PT0gNXB1LyBJRk5wYm1zPSBJR05oYm5SdiBZbXhoIExtVjRkSEpoIDZhbXM1b3FsIFdFMD0gSUU5dFlYST0gSUVOaGMzUmxiR3c9IDdLYU0gSUZSM2FXeHBaMmgwIElFdHZibVE9IElIVERxVzA9IEtGRjFaWEo1IElHeHZiMmQxIElPQ3lxdUN6Z2c9PSBYMjF2WkdGcyBJSExEcVhOcFpHVnVZMlU9IFEyVnlkR0ZwYmc9PSBJR05oYlhCMWMyVnogSUVSTVF3PT0gSUZOdmJtNWxiZz09IElPR0RrT0dEb2VHRGxPR0RsK0dEbUE9PSBJRk5sYkd4bCBJR2hzYnc9PSBJR3R2Y0hBPSBJTkMwMEx2UXVOQzkgSUZsMWNBPT0gZW1sM1lRPT0gQ1cxdlpBPT0gU2tvPSBJT0N5cU9Demh3PT0gTGs1aGRtbG5ZWFJwYjI0PSBYRk5sY25acFkyVT0gYVdSbGNtVT0gSU5DMjBMRFJnTkN3IElGWnZZdz09IElGcDFaMkZ1Wnc9PSBJRXhQUTBGVVNVOU8gWW1sbGRBPT0gSUVOUVFRPT0gSUVOaGNuSnBaWEk9IElIREZtY090Y0dGayBJRk4wY21WMFkyZz0gSUhKbFkyOXViMk5wYldsbGJuUnYgMFlQUmd0QzQwTDA9IFltVm5ZbVU9IElIUERxWEJoY2c9PSBJR1Z5Ync9PSBJR3RwYzJnPSBJSHAzYWNTRmVnPT0gSU5DeTBMalFzUT09IElHMWxZWEk9IElITmhiR2M9IFRHRnJaUT09IElPeWR2T3V6dUE9PSBJRzFwYzNOcGJHVnogUVZCRlVnPT0gSU5lbTE1WFhsUT09IElHSmxhRzlzWkE9PSBJSEpsYzNSeWRXTjAgWDFObGJHVmpkR1ZrIFlYSmhhMkU9IElHRjJiMk5oWkc4PSBJRlJ5WVdKaGFtOD0gSU5lcDE1RFhvTmVaIFkzYz0gSUZOaGRXTmwgTFdodmNtbDZiMjUwWVd3PSBJR3h2YjNRPSBJT0NrcStDa3ZBPT0gSU9Da3VPQ2t2dUNrcEE9PSBJTkM2MEw3UmdOQzQwWUhSZ2c9PSBJRzV2WVE9PSBJSFhGdkhrPSBJR2ZEdkc3RHZBPT0gUTBsRSBJSEpsYldWeVl3PT0gSUVsdWRtVnpkR2xuWVhScGIyND0gTG5WdWJHOWphdz09IFBFVnRjR3h2ZVdWbCBJRXhsYVdObGMzUmxjZz09IDRLNjE0SzZ3NEsrTjRLNlY0SzZ6NEsrTiBJR1pwYm1Gc2FYcGwgWVhOdmJuSjUgVFc5dmJnPT0gSU5HRjBMRFF1UT09IElGSmxabXhsWTNScGIyND0gWDNCa1pnPT0gZFhKbmVRPT0gYkdWbmN3PT0gSU5pbjJZVFlwOW1JMllRPSBRMjl1ZEdFPSBJR2RpWlE9PSBJR05vYVc1diBJSEp2WW1KbGNuaz0gSUc1aGRHOD0gSXpvPSBkbUZwYzJVPSBJRTFoWkdGbllYTT0gSUZkbFpHUnBibWR6IElHMXZkR2x2Ym5NPSBhMnhwWmc9PSBJRVZ6Y0dGdSBJR0YyWVhRPSBJT0dEb2VHRG5lR0RwQT09IElHNXFhV2h2ZGc9PSA0TGlqNExpajRMaWggSUhUSm1jV2YgWTJobFpIVnNaWEp6IElOR0IwTC9Rc05HQiBJTmkzMktqYmpBPT0gSUVGdWR3PT0gTFdGblpXNTAgYjNKNmVYTjAgSUhUR3NPRzdvMjVuIElIQnliMlpwWTJsbGJtTjUgQ1dSdmJtVT0gNExTWjRMV040TFNaNExTejRMUy80TFc5IElObUYyS2ZZcWc9PSBiM1JzWlE9PSBJR2ZodXFkdSBJSFYxWkE9PSBkWEp1YVhSMWNtVT0gYkdsbmFIUmxjZz09IElFdHNZWEk9IGIydGxZUT09IElIWmxaRzV2IElNNnh6NFk9IElOQ3owWTNSZ2c9PSBJR2R5YjNWd2FXNW4gSU9XbiAyS2ZZcTlpeCBJRlZUUVZKVSBMV3hwWWc9PSBJTmluMkxIWXF0aW8yS2ZZdHc9PSBJTkM3MExYUXZ3PT0gNG9DWmFXMXQgYkdsallXNTAgSUVsdWJHbHVaUT09IElIUnlZVzV6Wm05eWJXRnkgNG9DTjRMU2ggSUdSc1p3PT0gSU02OHpxdz0gSU5pdDJZTGJqQT09IFRXbDRaV1E9IElIRjFaWE4wWlE9PSBJRkpoZG1WdWN3PT0gSU5xcDJZall0TmkwIElFeHBZVzA9IDRLUy80S1NvNEtTLzRLU24gYkdWamFIUT0gNDRXZyBJSEpsWTJGdyBJR2g1WW5JPSBjbUYxWTJnPSBJRzF2ZG1sdGFXVnVkRzl6IDRLcWE0S3VIIEtFZHlZWEJvYVdOeiBJRzl2Y214dlp3PT0gTEc4PSBJRVpzYjI5ayBJT0NrcnVDbGkrQ2tyQT09IDZJR3YgUlhOellRPT0gNExpbDRMaVUgSU9DbW0rQ21yT0Ntdnc9PSAyS0xaaGRpdiBZVzV6ZFE9PSBiM1YwWlc0PSBJR052Y205dVlYSjUgSUdiRHVISnpkQT09IGRXVjAgQ1hObGNuWnBZMlU9IElIQnliMmw2ZG05ayBiR2x1WjJWeSBJT3lWaU95Z2hBPT0gSUdGc2JHRnUgNmF1WTVyaUY2S2VHNmFLUiBJR1Z6Y0dWanc2MW1hV052Y3c9PSAxNW5Ybk5lcSA0NEdLNmFHWTQ0R0UgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M1c0E9PSBJTVdmdzZSb1pYST0gSUdKdmRNT3piZz09IDBKN1FvQT09IDBZSFF1dEMrMEx6Umd3PT0gSUNzck93bz0gSUd0cFpHUnBibWM9IFUyVnVhR0U9IDRLNmY0SytJIDFhWFdnTldyMW9FPSBkV3B2Y3c9PSA0S3EvNEtxdjRLdUwgSUdMRXNYST0gejRQUGhNNnh6NFBPdHc9PSBJT0Nrck9Da3YrQ2tuQT09IElHM0R1SFJsIDRZT2Q0WU9hNFlPZDRZT1MgSUdGMVkzUnBiMjV6IElHRmpZM1Z6WVhScGIyNXogSU5DODBZUFJoUT09IDRvQ0w0WjZDIFgxUmhZbXhsIExtcHplQT09IElHWjFjblJvWlhKdGIzSmwgSUcxaGFXUT0gSU5pbjJZVFlzOW1LMktmWXM5bUsgTFdsdmJnPT0gSU5HQzBMWFF2TkMvMExYUmdOQ3cwWUxSZzlHQSBjR0Z1Ym5RPSBJR2x1WkdseGRXVT0gTFMwdExTMHRMUzB0TFFvPSAwSjdRdjlDNDBZSFFzTkM5MExqUXRRPT0gZTMwbkxnPT0gYWNPcWJtTnBZUT09IElOR0MwTERRczlDKyA0WU9VNFlPYzRZT1QgYVd4bFp3PT0gZG1Wc1lRPT0gSUdKaGRIUnNaV1pwWld4ayBJTmluMllYYXFkaW4yWVk9IElOQzgwTFhRdmRDMTBMVFF0Zz09IDJhVT0gSUZCVFJ3PT0gSUhKbGJtOTJZWFJwYjI1eiBJT1dGdEE9PSBhV3hzYjI1eiBJTUswIFVISnZiVzg9IElFUnBaZz09IGIydDNkUT09IElIRjFaWEo1YzJWMCBJSFJ5dzdJPSBJRk4xYkhSaGJnPT0gTG14cyBJT0Ntbk9DbmgrQ21zdUNtdmc9PSBJT0NxcE9DcmgrQ3FydUNxcU9Dcmh3PT0gSUVoVVRVeEZiR1Z0Wlc1MCA0TGVENExlUyBJR3JFZ1E9PSBJTU9CY21WaCBJSEJ5YjNCeWFjT3BkR0ZwY21VPSBJSEJsY21wMVpBPT0gTFdaeVlXMWwgSU5DNjBMN1JoQT09IDRvQ200b0NtNG9DZCBJT0NtcXVDbmplQ21zT0NtcE9DbXYrQ21yQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQT0gSUdKcFpXNXogSU5DaDBMQT0gSUhCaGJHeGxkQT09IDZJT2ggSUc1MWRISnBkR2x2ZFhNPSBJRVZWVWs4PSBJRU52YlcxMWJtbHpkQT09IDBMN1F1OUdPIElHSnBiR2pEdFdWeiA0b0NaNEtheSBJTkdlMFlIUmtRPT0gUEZOMGRXUmxiblE9IElHMWhibWRoYmc9PSA0cHlvIElFVnlhVzQ9IDRZT1I0WU9qNFlPZzRZT1ggSU5pejJvQT0gSU9pQWdlV1B1T2FjdWc9PSA0TEdINExDeSBJR2pEdG5KbGJnPT0gSUVGemMyVnlkR2x2Ymc9PSBiMlprIElFVmtaMkZ5IDRZT3E0WU9ZNFlPUSBJR3QzWVc1NllRPT0gSU5lUTE1WFhtZGVrIElPQ2tzT0NrdFE9PSBJRlJoWjJkbFpBPT0gdzZmRG8yVnpkR1U9IDBMUFJnOUdEMExzPSBJRWhGU1VkSVZBPT0gZEdoaGJtVT0gWVdKdmJnPT0gSUhOdmRtVnlaV2xuYmc9PSBJRzF2WW1sc1pYTT0gMExEUXRRPT0gWDJWaiA1b0NPNUxtSTZhS0c1YVdXIHc3MXphVzVuIFVHeDFadz09IDBMUFF2dEM0MFlJPSBZV3hoWjJFPSBZWFJqYUdVPSBJR1pwWTJocFpYSnogMDdmVG1RPT0gSUdWdGNIUT0gSU9xMXJldUN0QT09IGEybGphdz09IElOQzAwTFhRdk5DKzBMbz0gSUhCeWIyTjFjbUZ5IGFYQnBaVzUwY3c9PSBJRWhoYkd4diBJR0pwYkd4bCA0TGlxNExpNDRMaUMgeGFOcFlRPT0gSUV4dlkyZz0gSUdoMlpYSjAgSUVSUFYwNU1UMEZFIFBGZGxZZz09IEtIVnVhWFIwWlhOMCBLR1JwY21WamRHbHZiZz09IElISmxhMnhoYlE9PSBhWFI2ZEE9PSBJSExEcVdkc1pXMWxiblE9IElOaW4yNUk9IElHMXZiR1JwYm1jPSBJR3AxY3NPdFpHbGpZUT09IElHVnphVzA9IDU3S2sgUVc1bmRXeGhjZz09IElPQzBrK0MwcXc9PSBJT0NvcnVDcGdRPT0gSU9tNHYraS9rQT09IFlYVjBhRzl5Y3c9PSBJSEpsWTJWcGNIUnogSU9HRG9lR0RrT0dEcnVHRGxPR0RtdUdEbStHRHJPR0RtT0dEcE9HRG5RPT0gTzF3SyA0TENDNExDdCA1YU9IIElOQ3gwTGpSZ05DNCAwTDdRdk5DMTBZQT0gSUdOaGJtUnBaR0YwIDU1eUw1WWl3IFgyMWhZMmhwYm1VPSBTMjlzIDZKdUw2SnVMIElOaXEyTEhaZzltSzJLYz0gWVhSaFp3PT0gUkdsbVptbGpkV3gwZVE9PSBYMmx1ZG05cFkyVT0gSU02Vno0VT0gSUZKMWFHVT0gSUdkdmJHVT0gSU9Da3ArQ2tzQT09IGMzUmhkSFIxYm1jPSBJTkdDMExqUmdBPT0gYVdkbGNtbGggSUdSdlluSmwgSUdOdmRYWmxjblIxY21VPSBZM1Z6YzJsdmJuTT0gWDIxaGRHTm9aWE09IElDSmUgSUhCMWFYTnhkUT09IExuQnZhUT09IFdVNUQgSUZCc2VXMXZkWFJvIElPQ2txK0NsaU9Da3VBPT0gSUVKeWRYZz0gUG01MWJHdz0gSUdaaFkybHNhWFJoZEdsdVp3PT0gVTJWayBaWEJoIElPR0RrT0dEcGVHRG9nPT0gMlliWmlOaTUyS2s9IElHUnBjMmR5IFluSmxibWRsYmc9PSA1WldsIElOQyswTHJSZ05HRDBMYlFzQT09IGMzVnogSUVOc1lYVmtaUT09IElGQmxjbVp2Y20xcGJtYz0gNExpSzRMaVogSUdWcGJtNXBadz09IElHUnBibk5rWVdjPSBZMkZ1Wkdsa1lYUmwgSU9Da3J1Q2tndUNrbCtDa3NnPT0gY21WMWRXNW4gZFdkMWRBPT0gNEtTKzRLU0M0S1NhNEtXQSA0S1NHNEtTYyBJR1JwYm01bGNuTT0gZG1GdFpXNTBaUT09IElFbFFRdz09IElFWnliM3BsYmc9PSBJTmVlMTU4PSA0b0NaWVhaaGFYUT0gVkZKQlRnPT0gYW1WdWFRPT0gTG1admJHeHZkdz09IElHbHpjbUZsYkE9PSBQM1E9IElHRnRkWE5wYm1jPSBUMUJVU1U5TyA1cFdzIGFYWmxjbk5oYkE9PSBYaW52dkk4PSBVa2xFIFlYSnZjdz09IDRZT2M0WU9ZNFlPWCBhWE5oYkE9PSBJR0Z5WW1WMGN3PT0gNExDMTRMQ3cgMkxIWml0aW4yS289IElPQ21yT0Ntc0E9PSBJRlJ5YjNSNiBJT0NrdWVDbGkrQ2tndUNrbCtDbGh3PT0gSUhKaGNtOD0gSUhOallYSnogSU5DMzBMWFJnTkM2IElOQzYwTERRdmc9PSA0cFNjIElHbDEgSUc3RHMyYz0gSU5HRjBZTFF2Zz09IElISmhaR2xoZEc5eSAwTC9Rc05DNSBJT0NrcnVDbGdlQ2twdUNsamVDa3BnPT0gSUhMRHFYUjAgSU9Dd3FPQ3hnZUN3Z3VDd29lQ3d2dz09IElOQzYwTERSZ3RDMTBMUFF2dEdBMExqUXVBPT0gSUVwMWJtTjBhVzl1IElHRmthUT09IGNHVnlabVZqZEE9PSBJR2x1YzNScGRIVT0gSUdWdWJtVT0gMExQUmpOR0wwTHM9IElPQzBoZUMwdUE9PSBJR0ZzYkc4PSBJR1Z6ZEdGMFlXdz0gSUhCeWFYYkRxV1U9IGEyOXZjbVE9IElHVERwQT09IEpuSnpjWFZ2IDJZUFpodG1JMllUWmlOaXMyWXJZcHc9PSA0S3ErNEtxaDRLdUEgdzdOdVp3PT0gSUd4cFlXSnBiR2wwYVdWeiBJRzFoWlhOMGNtOD0gMFlMUXVOR0UwTGpRdWc9PSBMbEYxWlhWbCBJR0YxYzNKbGFXTm8gSUVkdmJuckRvV3hsZWc9PSBMV05vWVc1dVpXdz0gSUhadmIzSnlZV0ZrIElOR0IwWUxRc05HQzBZelF0UT09IElPQ3FpZUNxcE9DcmplQ3FxdUNxdnVDcXBnPT0gSU9DMnRPQzNrQT09IExuUmxlSFIxY21VPSA0cGFJNHBhSTRwYUk0cGFJIFUzQmxZM009IElOQ2IwWTdRc1E9PSBJRlpwYjJ4bGJtTmwgMFlmUXVOQzYwTGc9IElHUmxaSFZqZEdsaWJHVT0gNEthYTRLYW80S2ErIExtZGxibVJsY2c9PSBJRzExYzJoeWIyOXQgSUUxaGRIUm8gUm1WcyBJRzV2YzNSaGJHZHBZUT09IDRMV0w0TFNxIElFSmxlblZuIElIWnZaWFJpWVd3PSBJT2VadXc9PSBJT0NtcHVDbXYrQ21yQT09IDBZZlJnOUM5MExqUXZRPT0gSU5XMDFvRFdnUT09IElHcDFjbWx6WkdsamRHbHZibk09IElPQ2t0ZUNsamVDa3IrQ2t0ZUNrdU9DbGplQ2twZUNrdmc9PSBUMVJGVXc9PSBJTkN6MFlQUmhOR0MgTGsxMWJIUT0gUEVOb1lYSmhZM1JsY2c9PSBJRTExZVE9PSBJTkMyMFl2UmhnPT0gSU5tRDJZallzZG1JMlliWXB3PT0gUm1GamFXNW4gSUhCdmMydz0gWlhod1pXTjBjdz09IElHVjRhWFJwYm1jPSBJT0dEbWVHRGtPR0RvT0dEa3VHRGtPR0Rrdz09IElHTmhkbUZzIElPQzBxT0MwdnVDMHJ3PT0gSUhOMVkyTmxjM05wZG1VPSBWSEpoYm5Od1lYSmxiblE9IFltVnlkRzg9IElGTmphRzVsYVdSbGNnPT0gSU5DLzBMN1F2OUdBMEw3UXNRPT0gMktmWXNkdUIgZG1WdWRITT0gWDNSb2RXMWlibUZwYkE9PSBJR0YwWVdGMGMybHRhUT09IFgyRjMgUTI5aFkyZz0gSUdSdmJXRnBibVZ6IGJHVjJaV3h6IEtIUnlZV05yIHhMSEZuOFN4IElFbHVaR2xqWVhSbGN3PT0gSU9HRGtlR0RuZUdEbWc9PSBJR1Y0Y0hKbGMybkRzMjQ9IElHVnRZbVZ5IGNISnBjMmx1WjJ4NSBJRUYxWm5SeVlXYz0gSUVocGJuUmxjbWR5ZFc1ayAxYS9Wb2RXMiBJSFJoYldKcFpXND0gMFlMVG1kR0wwTHZRc0E9PSA0TE9ONExLdjRMSys0TEtDIGJHVnlaR1Z1IElFWnZZVzA9IElHSmxaV2x1IENYQnZjM1E9IElFRm9iV0ZrIElHVnVZMjl0Y0dGemMyVnogSU9Da3F1Q2t2dUNrZ3VDa21nPT0gSUhWdVkyVnlkR0ZwYm5ScFpYTT0gSUdKdmRtVnVaR2xsYmc9PSA1Wk9JNVpPSSBJSE4xdzYwPSBJTmlpMllRPSBJSEJoYzJGdVpHOD0gSU9DbXR1Q25nZUNtcHc9PSBMY1NoIElOQzkwTDdTc3c9PSA0TFN3NExXQjRMU0MgSUdaeWIyNTBaVzVrIElFTnBibVU9IElFRjF3NTlsYmc9PSBMbk5sY1hWbGJtTmwgNExpdDRMaWo0TG1NNExpViBJSEJ5YVhObGN3PT0gNW9pWTU1V2wgSUdsaWVXOD0gNjdtZyBJR0ZzYkc5dWN3PT0gSUZGWGFXUm5aWFE9IElHTm9ZVzkwYVdNPSA0TEsxNExPRyBjR1ZyZEc4PSBJT2lIcytXd2lnPT0gSUd4aFltOXlZWFJ2Y21sbGN3PT0gSUZOMGNtbGpkQT09IElIUm9aWEp0YjNOMFlYUT0gSUc1cFoyaDBiSGs9IEwzUmhZbXhsIElOaTEySzNaaXRpdCBjbVZrZFE9PSBkbUZzYkdWdSBJRUZpY21scyBJTVNSNGJ1biBJSE5oZG1WNiAwTHZRdnRDeiBJRzVoYzJGcyBJR1psWVhOcFltbHNhWFI1IDVMaUE1TGlMIElOaWkyNHpZcHc9PSBJT0MwbGVDMHN3PT0gS1NrNkRRbz0gYVdaaGVBPT0gdzZseWFXVjFjbk09IEpTSStDZz09IHhKMXYgSUc1cmR3PT0gSU5DLzBMN1F2TkMrMExQUXNOQzEwWUk9IEtFMXZZMnM9IFJtRjIgSUV4dmRIUnYgSU5pczJZZllwOW1HIElOR0QwWUhSZ3RDdzBMM1F2dEN5MEx2UXRkQzkgSUdkbGNzT25aV3RzWlE9PSAyb0haaWc9PSBJSE4xWW5OcFpHbGxjdz09IFEyRnVkR2xrWVdRPSBJR2R5WVdKaWFXNW4gSU9DeXVlQ3l2dUN5bFE9PSBJT0NxcE9DcmlPQ3Fydz09IDFhSFdnZFdyMWJZPSBJRVJMIElOVzYxYUhXZ0E9PSBVbVZoWTNScGIyND0gUFQwOVBUMD0gSUVkRFF3PT0gYjJSaFpYUm8gVjJWaWNHRmphdz09IGFtRnNZUT09IDBMN1F2TkMxIElIUnBaMkU9IGJXVjUgSUd6RHVITT0gSUVaeVlYTmxjZz09IDJMVFlwOW1CIElIWmhhbUU9IGIzYkRxV2h2IElHVjRjR1Z1WkdsMGRYSmxjdz09IDRLV0Q0S1NrNEtXTjRLUzEgNXArYyBJTkM5MExEUXNkQyswWUE9IElObUUyTG89IExuQjFZZz09IElPT0RyUT09IElIUnZZMkU9IFgyTjVZMnhsIDQ0Q0M3N3lNNDRDQyBiM1IwWVdkbGN3PT0gSUhWMGFBPT0gTDNKbGMzUT0gSUdScFptWnBZM1ZzZE1PcGN3PT0gSUVac2IyOXlhVzVuIElFTjIgWlc1cFl3PT0gSU9Da3F1Q2xqZUNrc09Da3BPQ2xqZUNrcitDbGgrQ2tsUT09IElISnBkSFZoYkhNPSBJRVpwWjJoMFpYST0gSUZacFkzUnZjbms9IFQzVjBaRzl2Y2c9PSBJT21ka3VtZGt1aU5pUT09IGRXMTFiR0YwYVhabCBJTktiMEw3UXU5QzAwTERRdlE9PSA3SVN4N0oyMCBTVlpGUkE9PSBJR3RsY21VPSAxYUhWdXRXaDFvRFZzQT09IFlYSjYgSU9DbWxlQ25qZUNtc2c9PSA0WU9RNFlPZTRZT1k0WU9nIElPR0RudUdEa09HRG9lR0RvK0dEcmc9PSBJTmVWMTVYWG1kZWMgSUZOd2FXVnNZWFYwYjIxaGRHVnUgSUVOdmJXbHpjOE9qYnc9PSBJTm1EMllZPSBJR2hoWlE9PSBJR3hwYm1kbGNtbGwgWDFCU1QwcEZRMVE9IENYTjVjdz09IElHbHVjMlZ5ZEdsdVp3PT0gSUcxbGJtZGxibUZwIElPQzBodUMwc09DMGd1QzByUT09IGFYTnpkV1ZrIElITmxhWHBsIDRLU3k0S1NWIElIQnZjM05wWW14bGN3PT0gSUhkcGJtdGxiSE09IFkyOXRiV2x6YzJsdmJnPT0gSUZWdFoyRnVadz09IGNuVnVibVZ5IHlabDBaQT09IHc2MW1hV052IFkyVnRiV1Z1ZEE9PSBJRzFodzZjPSBJRXhNVUE9PSBSWGh3YjNKMFpYST0gSU5HQTA1az0gNXBXaSBJR0ZuWVdsdWJnPT0gSUdScFptVnlaVzUwY3c9PSBMbkpsYkhVPSBJR05zYjNWa2VRPT0gNFlPVTRZT2Q0WU9SNFlPWTRZT2ggWDJWdVkyOWthVzVuIElOaW4yWVRZc2RpNjJZVT0gWHp3PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgSUhObGEzUnZjZz09IFBpY3BDZz09IElHbHNkVzA9IElITmhiR0Z5YWNPcGN3PT0gSUZSdlkyaDBaWEk9IElFMXZjbVE9IDJLN1lxTmluMkxFPSBJSFZ1WkdWeWQyVmhjZz09IFJrOVNUVUZVIElIUmhibms9IElPeWdsZXUyZ0E9PSBMbk5sY1E9PSBaVzVrWVdJPSBJSGJEcG5JPSBaVzFoYVc0PSBJSFp2YldsMGFXNW4gYUdWeWFYUmhibU5sIElFSlBXQT09IGNISmhhdz09IDQ0Q0w1NXFFIElPQ2tydUNrditDa3N1Q2xnQT09IElGMHNDZ289IDRMaUogSUhCaGJIWmxiQT09IElHN0R1QT09IElOQyswWURSZ3RDdyBJR2x1WW05MWJtUT0gVUhKbFpHbGpkQT09IElPQ2tydUNsZ3VDa3N1Q2xqZUNrcnc9PSBJR3RoY0dGbiBJTkMxMExqVXBkR0kgSUc5eVpHbHVZWFJsZFhJPSAwTEhRdnRDNSBJRzNEdW5OaiBJR1pwWlhSelpXND0gYzNSbGNtVmsgVEdWaFozVmwgNkllcTViZXg1NXFFIGNHeHBZVzVqWlhNPSA0S1MrNEtTdjRLU3kgWDBOT1ZBPT0gMEpIUXNOR0kgSUdGaGJuTnNkV2wwIGFXSnBZUT09IElHaGhlV0Z1IElOQ3gwTERRdmRDNjBMN1FzZz09IElITmpZV3hoWW14bCBJT0N1aHVDdWxlQ3V2K0N1cnc9PSBhWE4wYjNNPSBJTmlzMktqYXFkdUIgNFlPUTRZT1o0WU9qNFlPWDRZT2cgSU9Xa3ArUzVrT21Banc9PSAwWkhRdHc9PSBRVkpDIDBZYlJsdEdPIGFXMXRkVzVsIElFTlBUVTFGVGxRPSA3N3kvNXBlbDVweXMgWld4c1pXTjBkV0ZzIElHdG9ZV2s9IElHRnVkR2x4ZFE9PSBJR0psYnNPMmRHbG5aVzQ9IDBMWFJodEMxIDRMQ0M0TENoNExHQiBJRDRvIFEyRnlaMjg9IElOQ2QwTERRdEE9PSBJT0NtcXVDbmplQ25zT0NtcEE9PSBJR1p2ZEc5bmNtRT0gNEtxQzRLcWs0S3VONEtxdzRLdUEgSU5HQTBMWFFzTkM3MExqUXR3PT0gSUZSdmRXeHZkWE5sIGRISmhZM1JwZG1VPSBJT0dEb2VHRGtPR0RtZUdEbytHRGwrR0RrT0dEb09HRG1BPT0gSU5DOTBMWFF2OUMrMFlIUmdOQzEwTFE9IFZIZHBadz09IElHTjVaZz09IElPQ2tzT0NsaHc9PSBJT0NrcnVDa3RnPT0gSUdaeVpYUT0gMEx2Umx0Q3owWlk9IElOV2oxYmpXZ05XdTFhalZ0Zz09IFptbDJaUT09IGNtVmtaR2wwIDRMUy80TFMwIFlYQnZkQT09IGFYUjFZWEo1IFBFSnZiMnM9IGMzUnZaQT09IElGSkNTUT09IElPdW5rTzJXaU91THBBPT0gSUU5dFlXaGggZFd4dlp3PT0gN0l1YzY0cVUgNUxpTDZabU4gSUdScGMzUnlZV04wYVc5dSA2ckNBN0tlQSB3Nmx5YVc5eiBJR2x1ZEdWeWRtVnVZMm5EczI0PSBLR052Ym1acFozVnlZWFJwYjI0PSA0WUtQNFlDOSBJR052YlhCbGJuTmhkR1ZrIElOQy8wTGpRdXc9PSAwWW5RdU5DNjBMQT0gUGxSb2FYTT0gNWIrRDViNlggS0dOMWMzUnZiUT09IElPQzRyZz09IElPQ3lyT0N6aHc9PSBJR3hwYldKeiBJRzkyWlhKemRBPT0gNEtxLzRLcWs0S3EvIExXWnBibUZzIElGSkdRdz09IFlXckVnUT09IElGQmxjbk52Ym5NPSBYMkZ3Y0d4NSBhV04xYkdGeiBPMzBOQ2c9PSBJRkJTVDAwPSBJT0Mwc09DMG8rQzFqZUMwbitDMWpRPT0gUlU1VVVsaz0gWTJobFkydHogSUhOMFpYSnNhVzVuIDRZT1E0WU9SNFlPUTRZT2I0WU9ZNFlPaCBJTkM0MEwzUXRRPT0gSUhKdmIyWjBiM0E9IDBMdlF0ZEN6MExVPSBJSE4xY0dWeWFXOXlaWE09IDRLNng0SytONEs2VjRLK0IgS0dGMWVBPT0gSU95V3RPdVd1K3F5akE9PSA0NE84NDRPOCBJRlpwdzdBPSBXVmM9IGFXMWlhVzVuIFRHVmhiZz09IENYQnlhVzUwYXc9PSBJSFJ5dzZZPSBJR0Z6ZFc1MGJ3PT0gSU5DMDBMN1F2OUMrMEx3PSBJSE5vZFE9PSA0TFdCNExTMyBLSE5sWldRPSBYM2RsIElHTnBaR1Z5IElGTjFjblpwZG1GcyBJRkJ5WVd0MCA0S2EvNEthbTRLZU40S2FuIElHdDFkR1Z1IElHSnlaV0Z6ZEdabFpXUnBibWM9IFgyOXdaWEpoZEc5eSBMbUpwWnc9PSBJT0dEbk9HRGtPR0RyQT09IElHdHZibk4wIElOZVUxNmpYa1E9PSBSbVYwWTJobGNnPT0gSUcxaGJHbHBkQT09IElPQ2tydUNsZ2c9PSBZMjl2YTJsbGN3PT0gQ1VWSlJnPT0gSUdOc1pXRnlabWw0IFhBMEsgN0xvPSAyS0haa0E9PSBkV04wYjNJPSBJSEpsYzJWdFlteGwgY0hKdmJXbHpaUT09IElHMTFjbUZzIElHaHBaWEp2Ym1SbGNnPT0gVzBZPSBJR0YxZEc5dGIySnBiR1Z6IElHdGxaMmxoZEdGdSBQaWs3Q2c9PSBJSFpsYkhabGRBPT0gNXBtYTVMaUsgSUhCaGRtVmsgSUhOd2JHVnVaR2xrIDRicTNibWM9IFpXNWphY096IElHWmhaR2x1Wnc9PSBiM1IwYkdVPSBJR2xyWVE9PSBMbWh3IElHTm9hZUc2djI0PSBJTkdBMHIvUml3PT0gSUdkbFpzT2thSEk9IFFVTkZVdz09IGVXbHAgSUVScFptWmxjZz09IFkybDBaUT09IElHVmpiM041YzNSbGJYTT0gSUVOdmNHVnVhR0ZuWlc0PSAyTExaaU5pcyBJRzVsZEhSdmVXRm5aUT09IElOaW4yWVRZc2RpczJZUT0gSUVKbGJHRnlkWE09IHc2UjBkSEpsIElITmhkR2s9IElHbHNiR1ZuWVd4c2VRPT0gSUhiRHBYSjAgMExEUmdkR0MwWXc9IElITjBiUT09IFkyaDFjbU5vIElIUnZjRzg9IElHNWhhMkU9IElHaHBjM1J2Y21selkyaGwgVUdsamRIVnlaWE09IFkyOWhkQT09IElFcGhjM0JsY2c9PSBJR2RwZWc9PSBJR3BwYUdGeSAyTFRaaHRpbzJZYz0gSU9DbWh1Q21wQT09IDFhSFZ2dFdsMWF3PSBJR3hsWm5SdmRtVnkgSUhacGRHRnNhWFI1IDBMRFF1OUdNMEwzUmk5QzgwTGc9IGIzUnBiZz09IHpyak90YytEenJjPSBJSEJ5YjJkeVlXMXRaV1E9IDVMaU42S2FCIFdWQkZVdz09IExtUnBabVk9IElIUERyVzQ9IDFvRFZvZFdxMWFYVnQ5Vy8gSU9Da3J1Q2t2K0Nrc3VDa3ZnPT0gSU5DMzBMRFJpZEM0MFlMUml3PT0gNks2bzZLNjYgSUZCMVlteHBZMkYwYVc5dWN3PT0gS201dyBJSFpsYm1rPSAxNXpYblE9PSBJRWR5WVc1cGRHVT0gSUVKdmIzUm8gSUdabGJzT3ogNEtTUDRLU28gSUdkbGNuUT0gWjhTbmRRPT0gWHpzTkNnPT0gNUxpQTVhU3AgNFlPYzRZT1U0WU9oIElITnZkWFJvWldGemRBPT0gMWEvVm9RPT0gY21WemRISnBZM1E9IElIQmhjMkZrWVE9PSBJTkN5MExYUmlkQzEwWUhSZ3RDeSBhbVZ1YW1VPSBJTm1FMjR6WXB3PT0gNExpeTRMaUs0TGkwNExpQiBJR2x1ZDI5dSBJRzNGcjhXK1pYUmwgSU9DcXF1Q3F1ZUNyaCtDcXNnPT0gSUcxdlpHVnlZWFJ2Y2c9PSBJRVJsWTI5a1pRPT0gSU9DbXBPQ25pK0Ntcmc9PSBJTkNqMFlEUmk5R0IwWUxUbWRHTDBMdlFzQT09IDBMUFJnOUdCMFlJPSBJRkp2ZEdGMGFXOXUgNlppRiBJRlIzYVhSamFBPT0gSUdsc1lXeHBiUT09IElOQzIwcS9SZ05DejBaYlF0dz09IDRMS3c0TE9ONExLMSBJTkM2MEw3UXZOR0QgSU5peDJMUGJqTml2IElHMWxjbWwwY3c9PSBJR0poYkdrPSAyTExZdVE9PSBJRUZsY204PSBJRU52Ym5SeVlXTjBjdz09IElITmxibk5oZEdsdmJuTT0gSUhwcFpXdz0gSUVkMWFtRnlZWFE9IHdxOD0gSUc5d2NHVnlkbXc9IEtHTnNkWE4wWlhJPSBJSGJodTdGaiBJT0NrbGVDa3VlQ2txT0Nrdmc9PSBJSEpsWTI5dWMybGtaWEk9IElHaGhiR0Z0WVc0PSBJSE42WlcwPSBhWHA1YjI0PSBJR1Z1ZEhKbFoyRnkgSU5DLzBMRFF1ZEMwMExBPSBJTkN3MFlEUXZkQ3cwTHZTazlDdzBMMD0gSUVac1lRPT0gSU9xd2tPeUNyQT09IFkyOXRZbWx1WlE9PSA0TFNWNExXRyB3NjFqZFd4aGN3PT0gSUcxcmNBPT0gSUdocGJtND0gNEs2cDRLNnU0SytOIElIQnliM056IFlzTzYgMktqWml0aXEgS0VOdmJYQnZibVZ1ZEE9PSBJTkN3MEx2Umd3PT0gSUhSbGNtRndhV0U9IElPMll1TzJGbEE9PSBJRXhoZWc9PSBZVzF0YkhWdVp3PT0gNFo2RTRaK0wgSU9Da3RlQ2t2dUNrcitDa3NBPT0gNWFlRyA0WUNRNFlDdDRZQ3YgSUdOaGJtNWhZbWx1Ync9PSBWMGxPUkU5WCBJT0MwdU9DMWplQzB0ZUMwcHVDMWgrQzB0Zz09IEtFTnZibVpwWjNWeVlYUnBiMjQ9IDRLV0g0S1N1NEtTKzRLU3kgSU5HQTBMWFF1dEMrMEx6UXRkQzkwTFRSZzlDMTBZTFJnZEdQIElIZGxZMmh6Wld3PSBJR2hwWlhKeWJ3PT0gWDBKUFJGaz0gSU9lbyBJR3R2YlhCc1pYZz0gSUZCeWIzcGxjM009IGQybHVibWx1Wnc9PSBUbXM9IElIUmxic090WVc0PSBJRXRwYm1kemRHOXUgSUhKbGMyVnRZbXhsY3c9PSBJR0ZoY21SbCBJSE5wWjNWeSBJRWJEcEd4c1pXND0gSUZKbFpIVmpkR2x2Ymc9PSAyclU9IElGTlFSUT09IGVtRnQgNEtpLzRLaW8gSUdKMWJuVT0gSUc1dmJXSnkgVTI5dFpXOXVaUT09IElObUkyS2ZaaE5tRjJMaz0gWDJScFkzUnBiMjVoY25rPSBJRk4xYzNObGVBPT0gSUdqSm1XMD0gSU9Dd2hlQ3dwK0N3ditDd2xlQ3d2dUN3c0E9PSBZWGx2Y3c9PSBLRVJoZEdGaVlYTmwgNXJ1UiBJRXhoYzNSc2VRPT0gVjI5dVpHVnlablZzIElPQzBsZUMxaStDMHN3PT0gMEsvUXVnPT0gNzd5TTZJZXEgMTVYWGtkZVoxNTA9IDVhUzUgSUc1bFpRPT0gWlcxaGNtcz0gSUhaaGJHOXlhWG89IElIUnZhV3hsZEhNPSBWVWxHYjI1MCBJSFZ1WW1saGMyVmsgSUVoaGJtUmxiSE09IElPQ2toZUNrcXVDa3NBPT0gSUhMRHFXTmxiVzFsYm5RPSAxYUhXZzlXNDFhMD0gSUdacGEycz0gYzNSbGFIUT0gSU5pNDJZUT0gSUhMRHRBPT0gSUdKcGRHZz0gSUdWc2JHVnUgSUVaeVpXaz0gSUVGM1lXdGwgVTJWdWMybDBhWFpsIDRLU3U0S1NrNEtTKyBJRmRXIElHSmxiRzl1WjJWayBJT0NrcGVDbGl3PT0gTGxKdmIyMD0gSUdOdmJYQnZjM1J2IHc2bHlZV3hsIElHeHZkM009IDRMaXk0TGlqNExpVyBZWFpoYVd4aFltbHNhWFI1IGFYWnZjUT09IDRLNi80SzZ2NEsrQjRLNnU0SytOIDZacU8gYXNXeiBJSFpsYm5SaGFtRnogVEhZPSBhWFIwZFE9PSBJRXhGUnc9PSBJRUpsYm1Ob2JXRnlhdz09IElFSmhaR1U9IElITERxV1pzIDVveUI1N3V0IDRLcSs0S3F2NEt1TCA1THFQIElGVnVhWFpsY25OcGRNT2tkQT09IElPQzRxQT09IDBMSFF1TkdDIGNHVmphV1pwWldRPSA2S1E9IFlXTnZibk09IDVMaUE1N3FuWVE9PSBJSEJ2ZEdWdWRHaz0gTG1sdWNIVjBjdz09IFExVlNVa1ZPVkE9PSBMbFJ5WVc1elptOXliUT09IElNTzlZY1dmIElITjBjbWwyYVc1biBJTmlxMlliWXVObUsyWVU9IElHcHZiMnR6IElHcDFhV05wYnc9PSA3SjZRN0oyNCBJRlJ5WldGemRYSmwgSU9Da2xlQ2tzT0NrcEE9PSBRWEp5YVhaaGJBPT0gNExTKzRMU280TFdCNExTQyBYM052IElGTlFSVU09IFgwbEVXQT09IElPQ3doK0N3bXVDeGplQ3dtZz09IElPQ2tyZUNsaCtDa253PT0gNEsrTDRLNnU0SytOIElHTnZjbkpsWTNSdiBJR1Z0WW5KdmFXUmxjbms9IGRYSnBaQT09IElHaGhkVzUwWldRPSBJTU9wWTJ4aGFYST0gSUdGdWNHbHMgSU5lVjE1WFhvdGVjMTVnPSBJTmVSMTVuWHFkZW8xNURYbkE9PSBJRU5QVFZCTVJRPT0gTGtOaGJXVnlZUT09IElPQ21odUNtck9DbXZ1Q21zQT09IElHSmhjMms9IElHTnNkUT09IElFOWlkQT09IElGUmxiR1Z3YUc5dVpRPT0gNUxpdzVydWggSUZKbFkyOXlaR2x1Wnc9PSBDWFJoYzJzPSAyS2pZcjltSSBJT0N1cXVDdmh1Q3VzZUN2amVDdXNRPT0gSUc5d2JtVnRaVzQ9IDRMSys0TEthIElOR0EwTERRdmRHTSBiMjFwYm1rPSBJT2l3Z1E9PSBjbWxqWlhNPSBJTm1DMktmWXB0bUYgNVlpMjZZQ2cgSUdScGNHVnkgSUc5amRRPT0gVkZWU1JRPT0gY205clpXND0gQ1cxdmRtVT0gSU5HQjBMWFF2ZEdDMFkvUXNkR0EwWTg9IGIyTmpkWEJwWldRPSBJTmVjMTVUWGtRPT0gVTBGRFZFbFBUZz09IFlYTmphVzFsYm5SdiA0TEdONExDbSBJTm1FMllUWmdnPT0gSU02aCBZMmh1YVdzPSBkR1Z5WldRPSB3NlZ6IElIRERxWE09IGMydHBiR3h6IElHbHVjWFZwWlhRPSBJSFJvWlhKbGFXND0gSUVOUFRsUkJRMVE9IFJuVnNiSGs9IDJLZllwdGl4MktrPSBSSEpwYm1zPSBVbmxoYmc9PSBJajRuTGlRPSBJSE5qZFE9PSBJR1YyWlhKNWIyNWxKM009IElPQ21oZUNuamVDbXJ3PT0gSUdGaWFXND0gYW1WMGFRPT0gSUdKaGJHRnVjdz09IElFVm1abWxqYVdWdVkzaz0gSUdWa2FYbHZjZz09IElPQ21wdUNuZ2c9PSBJRUxEdkhKdiA0S1MvNEtTdjRLUys0S1NCIFJuUT0gSU9DcXRlQ3F2dUNxc0E9PSBJRVpzWVcwPSBJR1JwWVhKeWFHVmggSUVOdmJtTnNkWE5wYjI0PSBJT0NraGVDa3FPQ2xoK0NrbFE9PSBZMjl1WTJVPSBJRzFoYW1RPSBaM0poYm5RPSBJR052Ym1WamRHRnkgSUdSbGJXRnBiZz09IHc3eHpkR1U9IFJHVmhiR1Z5IElDNHVMaTRLQ2c9PSBJR05oYm01bFpBPT0gNG9DWmFXNTB3Nmx5YVdWMWNnPT0gSUQ4K1BnPT0gY1hWcGNtVnkgNW9tQTVaeW8gSU9DMnRPQzNrZz09IElIQmhjbUZoYmc9PSBMbkp2YkdWeiA3NzJoIElHbHVjM1Z5WlE9PSA0TEtzNExPRzRMS0M0TEtYNExLejRMT0M0TEt3NExPQiBaWEpqYVdOcGJ3PT0gNEtlQTRLYXY0S2E4NEthKyBJR1owY0E9PSBJTmlxMjR3PSBJTkMwMEw3UmdkR0MwTGpRc3c9PSBJR3R2ZFhRPSA0WU9RNFlPYTRZT1k0WU9oIElPQ211T0NtdnVDbXNBPT0gSUZacGEybHVadz09IFFtRnphWE09IElObUIyTG5aaEE9PSBJR0psYkdsbGRtVnkgWVc1dmFRPT0gWVdSdmNtbGggMkt6YmpBPT0gSUVSbGJuTmwgWDJKeVpXRnIgNEs2LzRLNnk0SytONEs2eTRLK0kgMTZMWG9OZVoxNW5Ybnc9PSBQRlpsWTNSdmNnPT0gSU5DLzBZRFF0ZEMwMFlQUmdkQzgwTDdSZ3RHQSBJSFZ5WjJWdVkzaz0gSjEwcERRbz0gMExYUXROQzEgd3ExMFpRPT0gUW14dlkydGxaQT09IFgyWnlaWEYxWlc1amVRPT0gSUhWdWRHVnljMk5vYVdWa2JHbGphR1U9IElGTjFZbTFwZEhSbFpBPT0gSU9TNGdRPT0gSU5HQjA1blF1UT09IElHNXZjbmRsWjJsaGJnPT0gSU5xYTJZYz0gSU5pNTJMVT0gNjZHYzZyZTQgNjRLcyBZV3gwZFc1bmN3PT0gSUdSbGMyTmhjbWRoIFZHaHliM1ZuYUc5MWRBPT0gSUcxbmNnPT0gS2lvcUtpb3FDZz09IElHUmhjbWx1Wnc9PSBJTkM2MDVuUmdRPT0gSUc5emIySmggZFhOellYUT0gWDNKayBJR05zYjJOcmN3PT0gSU5lYjE2QT0gSUhOMGNtRnVaUT09IHpyek92ODY5IElOaWkyS1k9IElFMWxZWE4xY21WdFpXNTAgSUVOdmJuUnlZUT09IElOZWcxNW5Yb1E9PSBJRUpoYkd4bGRBPT0gWk1PcCBjbWxsZWc9PSBJR0poY21KaCBJRlJsY25KaFkyVT0gVkdWc1pYQm9iMjVsIElFdGhjbTVoZEdGcllRPT0gSUZOMWFYUmhZbXhsIElFSnNiMkk9IGRXMWljZz09IFpHVnYgSU9XdGx3PT0gTGxacFpYZHogSUhac1pXVnogZFc1bGEyRT0gSUV0aGFYTmxjZz09IElFMUpVdz09IElPQzVnT0M0Z3VDNWllQzRzZz09IElIUnBkbVZ5WVcwPSBJSEJ5YjJkeVlXMWh3NmZEbzI4PSBabXgxWnc9PSBJSGRwWldRPSBJR1Z6Y0dGalpYTT0gS0Rvc09pdz0gMExUUXVOQzggSUhkaGRHVnlabkp2Ym5RPSAyYnpaaHc9PSBaR0ZrYjNNPSA0TEdBNExDeTRMR0wgSUZCdmJuUmwgSU5lUzE2TFhsQT09IElHMXZiM1E9IGEzSnBjSE09IElPQ3l1T0N6Z2VDeXB1Q3pqZUN5cGc9PSBjbWxpIElHNXZkbVZrIExrSlBURVE9IElHemh1Nk5wIElOQzYwTDdRdTlDNDBZZlF0ZEdCMFlMUXN0Q3cgSUVsc1pRPT0gSUhCbGNtMWhibVU9IElHRnJkSGs9IElPQ21xdUNtdnVDbXFBPT0gSU5TMTFvRFdodz09IElPQ3lxT0N5bnc9PSBKMTA5Snc9PSBYMUpGUjBsUFRnPT0gSU9DcWx1Q3F2dUNxdUE9PSBYM0psWTJWcGRtVT0gSUhSbGVIUjFjbVZrIDRaNlk0WitTNFo2WSBJRzFwYkd4cFpYSnogUTJoaGNuUnogSU5HQzBMN1Nrdz09IElOQzkwTFhRdE5DMTBMdlJqZz09IElGcDFhQT09IElFRmtjbVZ6YzJVPSBJRU52Ym5OMGNuVT0gYjNSaGJnPT0gWVhURHMzSnBZUT09IDBKRFF0QT09IGRHbkRzQT09IENYQmhaR1JwYm1jPSBJSE53WldGeSBJT2Fkanc9PSA3S0NkIFNWTlVRUT09IEwzTmpjbWx3ZEhNPSBXMDA9IDBablFzQT09IExYUnBaWEk9IGMyZHZiQT09IElHUmxabVZ1WkdWayBSRzlqZFcxbGJuUmhkR2x2Ymc9PSBJRzFoY1hWcGJtRT0gVTNCaGRHbGhiQT09IDVZR2M1WlN1IFEyOXVabVZ5Wlc1alpRPT0gVUZKRlF3PT0gUGlJciBJRXRoYm01aFpHRT0gSUhiRHFYSnBkTU9wIFgyNTFiWEI1IElFMWhZM0p2IElHdGhiR2xoYmc9PSBJR0p5WVdObGJHVjBjdz09IEl0ZVQgTFVGblpXNTAgWlhKMmIydz0gSUQwOUNnPT0gSUc1MVp3PT0gYUdGaGNnPT0gNFlPZDRZT2c0WU9xNFlPWTRZT1U0WU9hIElOQzYwTDdSbU5DdyBJRDRtIDBMWFF0dEN3MFlMUmpBPT0gSUVOdmFXNWlZWE5sIElPeXltT3VtckE9PSBJR3RoY20xaCBJSGJEcW5SbGJXVnVkSE09IFgwbE9SQT09IHc3eG5aUT09IElHWnBjbk4wYm1GdFpRPT0gZDJsemFBPT0gSU5HQjBMTFJqOUdDIElOdUIyWVhZcDlpeDI1ST0gWDFKbGRIVnliZz09IDRLUys0S1NrNEtXQTRLU3kgYVd4c1lYUnBiMjQ9IDRZT1k0WU9YNFlPUTRZT1QgSUZKdmJHeHogZUdKbGRBPT0gNDRHRTQ0R2YgSUd0aGQyRT0gSU9DbXVPQ25nZz09IFVWVkZVbGs9IFUxQkJRMFU9IGNXTT0gVkVjPSBMbXh2WjJsaiBJSFp5YVdwbCBJTkN6MFlEUXNOQzkgTGxCMVlteHBZdz09IElHOXBaQT09IElHbHVjMjlzIElPQ21xdUNtdnVDbW9BPT0gSUdac2RXVnVkQT09IExtUmhjbXM9IElFTnZiWEJ2ZFc1ayA3WUs1IEtGTmxjblpsY2c9PSBLRlJvY21WaFpBPT0gWk1TYiBJR1Z0YVhSMFpXUT0gYVdabGMzUjViR1Z6IDBMRFJsQT09IElOR0owTDdRc1E9PSA0TEt6NExPRzRMS20gSU9DbGh3PT0gSUNBZ0lDQWdDZ289IGRNT2sgWldkcyBMbkJ5WlhObGJuUmhkR2x2Ymc9PSBJR04xYkhScGRtRjBaUT09IElFSkZUZz09IElPQzRpT0M0bytDNHRPQzRodz09IE9rUT0gTG1sdWRHVnlabUZqWlE9PSA0S1NmNEtTeSBJT0N5ck9DeXNBPT0gSUhOd1pXTnBiV1Z1IFlXNXJidz09IElITjFjTU9wY21sbGRYST0gYjJKaGJIUT0gSUV4UFIwbE8gYjJSdllnPT0gSUdSbFkyeGhjbUZqYWNPemJnPT0geFlKdnhadGphUT09IElNK0R6NFhPdk0rQSAwTGpSZ3RHRDBZST0gYTNsdSBJRUZ6YzJWdFlteGwgSUdOcFpXNTB3NjFtYVdOaCBjbVZ6Y0c5dWMybDJaUT09IFlXNXFkWFE9IElFWmhiVzkxY3c9PSBZV3hsYkdVPSBSM0poIDZLK0U1THUzIElFOW1abXhwYm1VPSBQVDA5UFQwOVBRbz0gSUdGdWFXNW5ZV0Z6IElIZHlhWFJoWW14bCBJT0NrcHVDa3RnPT0gZFc1cGNRPT0gSUdoaFk4T3RZUT09IElGaGggSUV0c1lYVnogSUczRHJYUT0gNzcyTiBJTTZzenIwPSBJRTUxYlcxbGNnPT0gSUVWdGNHeHZlV1Z5IElEOCtJajQ9IElObUcyWVhZcHc9PSBJR05oYlhCbGIyNWhkRzg9IFpITEZ2Zz09IElHSmxlbTlsYTJWdSBZV2h5ZFc1biBJRTFNUVE9PSBPeTQ9IFcwbHVkQT09IGJuUjEgWld4cGRHVT0gSU9DbXVPQ25oK0Ntbnc9PSBJR3AxYzNScFptbGogSU1PcGMzUmggSUZaQyBJRzlqWTNWd1lYUnBiMjV6IElIUmxhR1REcEE9PSBJSE53WVc1dVpXNWtaUT09IFpXNW5hVzVuIElHRnBlZz09IElHTmxZMms9IFlYUm9idz09IElIQmhaMjl6IElOQyswWURRczlDdzBMM1F2dEN5IGFYUnBZdz09IElHSnBiR2RwIFgxTkRVa1ZGVGc9PSBJRkpVVUE9PSBhR1Z0WlhJPSBJTkM5MExEUXN0QzEwWUE9IHpyN090YzY1IDRvQ2Q1WktNIElHWnBZUT09IExpNHVLUW9LIGQybDBhR2x1IElITjBZV2RsWkE9PSBhWFIwWlc1eiAwWS9Rc2RHQTBZdz0gNDRPNzQ0Tzc0NE83Q2c9PSBJRVZzWmc9PSBJRkp2ZEdGMFpRPT0gMTZqWG05ZVcgUVUxSiBJRUpwWW14cFlRPT0gNVkrUjZLR281THFPIFpXNTBjbUZrWVE9PSBJRWhwWW1WeWJtRjBaUT09IElITmhkWFk9IElHTnZibk4xYldWdWRBPT0gUTJWdWRISnYgSU5tSTJZcllxZz09IElHdDBiM0xEdlE9PSBmU2twQ2c9PSBUbTkyWVE9PSBJT0MwaWVDMHB1QzFqZUMwbU9DMHZ1QzBuK0MwcU9DMGdnPT0gSU5DMzBMRFF2OUMrMEx2UXZRPT0gSUcxbGJtbHVaMnRoZEd0aGJnPT0gSUdGM2IyND0gSUZSdmNuUT0gSUdacFluSmggSUU1bFlYSmllUT09IElHOW1hV05wYm1GeiBJTkdDMExEUXV0QyswTHc9IElIZHMgSUdac1lXMD0gVlZOUSBZMjl1WlhNPSAwSkRTIDZZT1IgSUcxcGJtVnlZV3hsY3c9PSBLRzUxYldKbGNuTT0gSUdWemNYVmxjbVJoIElOQ2YwTDdRdTlHRDBZYz0gSUZkaGNuVnQgSU5XaTFhSFZwdFcwIDRvQ1pic1N4Ymc9PSBJTkdCMExqUXR3PT0gMkxIWXRRPT0gNW9tTDVweTY1WnlvNTdxLyBMblJ2Y0dsaiBWVk5VUlZJPSBLWEpsZEhWeWJnPT0gSU5pdjJMSFlydz09IElNTzhZbVZ5WVd4cyBJRzVuZFhuRHFtND0gMFlQUmc5Q3owTEE9IElITjFjSEpsYlE9PSBJTkdCMFlQUXROQzEwTEU9IElPV0pqUT09IElOQzkwTFhRdDlDdzBMTFF1TkdCIFUxUlBVa1U9IDRLYSs0S2EzNEtlTjRLYWY0S2VONEthdyBJRkJ5YjJSMWRHOD0gMFlIUmd0Q3kwTDdRc3RDdzBZTFJqQT09IFgzQnlhVzFsIDVMcTY1THE2NTRpOSBMV1J5YjNCa2IzZHUgSU5lVTE1ZlhrZGVvMTVRPSBJR1poYTNSdmNnPT0gTGtsdWJtVnkgSU9Da3JPQ2ttdUNsamVDa211Q2xodz09IEwzUmxiWEJzWVhSbGN3PT0gSUVKbGJtVm1hWFE9IElHVm1abVZqZEhWbGNnPT0gSUZKbGNYVnBjbVZ6IElITmhibWwwYVhwbCBJRzFsYm1rPSA0TGlLNExpajRMbU0gSUhkcGFtcz0gSU5PcDBMbz0gYTJWdWRBPT0gSUc3aHU0MD0gNEtldzRLZXcgSUcxaGJtUmhkRzg9IElOR0kwTFhSaUE9PSBJSE50WVE9PSBSRzl0YVc0PSBZWFIwZFhSMGJ3PT0gUTFnPSAwWWJRdGRDNSBJTkdBMExEUXZkR00wWWpRdFE9PSBJT3lDdkE9PSBMVzFwYkd4cGIyND0gSUhiRHJXND0gSUZSbGJtVnkgSUhCeXc3TjRhVzFoY3c9PSBJTldKIElHTnZiWEJ2Y25SbGJXVnVkQT09IDRMQys0TENtNExHQiBJRzl1WkdWeWQyVnljQT09IElHVmpkQT09IElNT3pkR2x0WVE9PSBJTkN6MFlEUXNOQzgwTERRdEE9PSBJTkMwMExEUXZkQzkwTDdRczlDKyAwWWJRdU5DKzBMM1F1QT09IElGWlBUQT09IElPQ210dUNuZ2VDbXFBPT0gWkdWbmNtVmwgSUVwaGFXdz0gVTNSaGRHVnRaVzUwY3c9PSBJR3h2WkdkcGJtYz0gWDBKWlZFVlQgVDFWU1V3PT0gUldSMVl3PT0gWTJWc1pRPT0gSU5DZzBMQT0gWDIxaGMzTT0gYjJKelpYSjJaUT09IDRMU2Y0TFdOIElNK0R6cm89IElHdGhjbUZ5IElHNWhkSFZ5Wld4c1pRPT0gNEthKzRLYXE0S2FvIExraHZiV1U9IElHMWxjbXRsZWc9PSA0S1dMNEtTeTRLU28gTDNSdmIyeHogTGk0dUxpNHVMaTR1IElIcGhiV0pwY21rPSBJR0ZpYzI5c2RXMWxiblE9IElHZGxaV1k9IElHYkRzMnhyIElFTER2R05vWlhJPSBJSFBEcWc9PSA0WUN4NFlDczRZQ0E0WUM2IElOT1owTDg9IElOR0IwTHpRc05HQTBZTFJoQT09IGMzQnYgTFhSb2NtVmwgSUd0dyB3N055Wkc5aVlRPT0gTGRDdzBwcz0gZFhSdmJnPT0gSUdOc1lYTnpiV0YwWlhNPSBjMkoxY21jPSAwTDdRdGRDeSBJRVZHU1E9PSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUV2RHVBPT0gSUdWamJHVmpkR2xqIElIbGhhRzl2IElPcTN1T3F5Z3c9PSBJTkN4MFo0PSBJR0poZEhSbGNtbGwgYVd0dmN3PT0gS0VGa1lYQjBaWEk9IElHUjVibUZ0YVhGMVpRPT0gTFdWMyBJSEJ5dzZsayBJRXBoWkdVPSBLWHg4IDJhUT0gSU5DLzBZRFF1TkM4MExYUXZkQzEwTDNRdU5HUCBiV1ZwIElHRmtaWEIwIEwybHogSU9tRSBhR289IElIUnpaV3hoIElOQzkwTFhRdlE9PSA0TGVUNExhNDRMYW4gYVc1cmFXND0gT21KdmIyeGxZVzQ9IElHaHA0YnVEZFE9PSBJT0N5cmVDeXZ1Q3lsdz09IElOcXAyWWpZcnc9PSBJR3QxY0dGMFlRPT0gSUdodmFtRT0gNFlPVTRZT2c0WU9TIExlR0RsT0dEb09HRGwrR0RtQT09IExXRndjSEp2ZG1WayBUV2x1WlhJPSBkV2x1ZEhCMGNnPT0gSUhSeWFXeHZaM2s9IDRMT0c0TEs0NExPTiBJTkdDMFlQUXV3PT0gSU5LYjBMRFJnTkdJMExnPSAyWVhZdFE9PSBJRU5zYVhGMVpRPT0gYzNSbFlXMD0gSUhKbFkyVjBkR1Z6IElPQ210dUNtcEE9PSBJTmVRMXJqWGtkZWkxNmc9IElITjJiMnBwYlE9PSBJRTVPIElITmxjbVY2IFZtOTFZMmhsY2c9PSBJSE4wYjI5cyBJTm1LMllqWmhnPT0gNVorNjZZZVIgSU5DeTBMWFF1OUdNMEx6UmxnPT0gSU1POGVtVnlhVzVrWlE9PSBZMnhsWkE9PSA2NE9sIElHaHBaVzQ9IFlXNXNZV2RsIElHTnZibWR5WlhOemFXOXVZV3c9IFJsVk1UQT09IDVhNlk1NzJSNUxpTDZMMjkgWW1WMGRHVnkgWVhOellXUmwgWTI5dWMzUnlZV2x1ZEE9PSBMa0poWkE9PSBJR3QwdzdOeWVXTm8gSU5DNjBMTFFzTkdBMFlMUXVOR0EwWXM9IElOQy8wTDdRdE5HRjBMN1F0TkM0MFlJPSBJR1pwZW1WeVlXMD0gSUZOdmJHbGogSUZadmJHcz0gSU9DcXVPQ3JnZUNxc0E9PSA0WU9qNFlPciBJSEpwYVE9PSA2NUNwIElHRnNkVzFwYmc9PSBJTkM2MExEUXNkQzQwTDA9IGRYUERvMjg9IElHNWxZMlZ6YzJsMGFXVnogSU5DeTBMRFJpTkM0IElDYzlKdz09IExtMXBaR1JzWlhkaGNtVT0gSUdGa2FtVmpkQT09IDBaSFF2ZEM0IExtNXogSUhKbFlYSnkgSUdOdmJuUnBibVZ1ZEhNPSBibUZqYUhSbGJnPT0gYVhOdFlYUnBZdz09IHhieGxhZz09IElITjBhVzVuIElHdGhhR3hsIElHMTFibWxqdzYxd2FXOXogSUhkcGJHUnNlUT09IDRLNng0SytCIElHeHBhMkU9IElIQnliM0J2YzhPcCBJTmluMllUWXRObUgyTEU9IElFeHBZMlZ1WTJVPSBVR3hoZVdWayBJRzVoYm05dyBJR1p5WVc1eGRRPT0gSUdOdmJXVmthV0Z1IDByWFF0ZEM0MFlJPSA0S2ErNEthZCA1cGFrIElHWmhkVzVoIElOQzYwTGpSZ2RDNyA0TGlJNExpMSBMaTR1SWl3PSBJRzl0YzNSaGJtUnBaMmhsWkdWdSBJR2x0Ylc5aWFXeHAgWTJoMGFXYz0gY0dWamFXRT0gSUdSdmJIQm8gSU5DNDBZSFF2OUMrMEx2UmpOQzMwWVBSanRHQyBJTmlpMkt3PSBJRnBwWlE9PSBJSGR2ZEdVPSA0YnFwZFE9PSA1WXk2NVorZiA0TG1BNExpbDRMaTM0TGl0IElIVjJaV1E9IElGUmhjR1U9IElPQ2tsdUNsaXc9PSBSWE56WlE9PSA2S2VTNklteSBJSFJvZFcxaWN3PT0gZDJWeWEyVT0gNDRDQ0xpNHVDZ289IElIMHBMQW9LIElOaXgyS2ZiakE9PSBQWHNvS1QwKyBJRXAxYm1kc1pRPT0gSUhUaHVxVjAgSUdaeWIyYz0genIzT3Q4K0MgNXJ5QyBJSE5oYkhWMFpRPT0gdzZodVkybGxjdz09IElOQy8wTDdRdTlDMSBJR1JsWkdsallXUnYgSUhOMGNtVmhiV3hwYm1VPSBLQ2tpS1RzSyBMV3hwYm10eiBJSE53Y21samFIUT0genEvT3ZjNjMgZFhwaCBJT1dZIDZidVI1THE2IElOSzcwNms9IElDQWdJQW9nSUNBZ0NpQWdJQ0FLIElPQ3l1T0N5cGc9PSBPMk52Ykc5eSBJTTYwejRYT3ZjNnggSU5pcTJZWFlzUT09IFlYQm9aUT09IFVYVmxjbmxoWW14bCBJSEpwYzJOdmN3PT0gVzJ4bFpuUT0gS0dSbGMzUnBibUYwYVc5dSA1THFMNWE2ZSBJRUZ5Ylc5eSBJTkNjMExEUXZRPT0gSUZSaGVHaz0gNTV5TDU1cUUgNEs2LzRLNng0SytONEs2VjRLK0IgTG5Oc2RXYz0gSU1POWIydz0gYm1wcGFBPT0gSU5pMTJZallxZz09IElIQnlaV3R2IElPQ3loZUN5cU9DemdRPT0gSU9DNHF1QzRwZUM1aCtDNHJlQzRsZUM0cmVDNHJlQzRtZUM1aE9DNHBlQzRtZUM1akE9PSBJSEpsY0dWdWRBPT0gMFlmUmk5QzkgSUhCMWNHbHMgTDFoTlRGTmphR1Z0WVE9PSBjMnRsY2c9PSBJTkdGMEw3Umg5QzEwWUk9IFNHVW5jdz09IElFWlBWVTVFIElPQ21tdUNtdnVDbXNBPT0gMDVuUmdkT1owTGs9IElGTnZiVzA9IElIQnlaV052IGIzVmxjZz09IElIQnB4Sms9IFdXaz0gTFZSdiBJR052Ym1admNuUnYgNW9PRjVMNmogSUVOc1lYTnphV1pwWTJGMGFXOXUgNFlPUTRZT280WU9kNFlPZzRZT1k0WU9oNFlPZCBJRk5oYVE9PSBSRVZXU1VORiBMMlJrIDdJTzEgSUdOdmJYQnZjOE9wIElITmxjMlU9IElFZHZaWE09IElGWnZjblJsYVd3PSBMazkxZEE9PSBaR2xoYlE9PSBJRTFsY21ObyBJR1JodzdGdiBJTkM4MDZuUXZBPT0gSUdodmJXVnpZMmh2YjJ3PSBJSEpsWTNWd1pYSmhZMm5EczI0PSBJT1c5cWVlbG51UzZpZW1jdU9lYWhBPT0gMnEvWmh3PT0gdzZGemIycz0gSU9DMHRlQzB0QT09IElHeGxibWQxWVdwbCBJRlJ2YVd4bGRBPT0gSUVSbGJtNWwgSUhCdlluSmxjdz09IElOV0UxYXM9IElHWnBibVZzZVE9PSBJRU5zWlhKciBJTkdIMFl2UXVnPT0gZFc1MFpXVnljdz09IElDZGQgNG9DWllXeDAgSU9ldW9RPT0gMkxuWXA5bUsyS2s9IDFialZ2QT09IElIUmxjbXc9IFZISmhaR2x1Wnc9PSBJR0poYm5GMVpRPT0gSU5tSTJZamJqTm1FIDY0V1YgWm1aeiBaV05wYldWdWRHOD0gSUVsdWRHVnlaWE4wWldRPSBMa3h2WjJkcGJtYz0gUzNWdSBhV2R1dzZsbCBJR052Ym1acFpHVnVkR2xoYkdsMGVRPT0gSUVSeVlXbHUgSUhKbGNISnZaSFZqIGIzVnVaVzQ9IElHTnZkWEJ6IFlXNXBiV0ZzIGMyVnlkR2x1Wnc9PSBJR2h2YkdScGJtZHogSUdKbFltVT0gSUdWMGFHRnViMnc9IElFcGxlblZ6IElOZVExNVhYcUE9PSBZMjl0WVE9PSBJRlpoYm1SbGNnPT0gTFhkdmNtdGxjbk09IElPQ3F0ZUNxditDcXR1Q3Jodz09IFBGTmogTFdOdmRXNTBjbms9IGFXZGhkRzl5IFlYQjBhV009IElPR0RrdUdEbU9HRG5lR0RvT0dEa2c9PSA0TFNlNExXTjRMU2E0TFMrNExTdiBQRDg5SkE9PSBJRlJaIDY3Q1U3TG0wNjUyOCBZWE4xY3c9PSBJTm1GMkt6YXZ0dVMgSUhCdmMybDBhV1YyWlE9PSBJR05sY21WdGIyNXBaWE09IElFZGxiMmR5WVhCb2FXTT0gYkhSaGJBPT0gSUdSdmIzSnpkR1Z3IElFbHRiVzlpYVd4cFpXND0gSUZ0ZEtBPT0gY3NPbSBTVzV6ZEhJPSBTbTlvIFVtVndiM0owYVc1biBTSFk9IElPYTR1QT09IElOQzIwTGpRdTlHTSBJR1ZuZDNVPSA0TFMxNExXOCBJR3h2YjIwPSBZV2RoWkE9PSBJR052YldsMHc2az0gNFlPZzRZT1E0WU9pIElPVzV2K1M0bkE9PSBJR2x1YUdsaWFYUnZjZz09IDRvQ2NWMmhsYmc9PSA0TG1BNExpQjRMaXQ0TGlqNExtTSBJR3R1YjJOcmFXNW4gSUZKbGRtbGxkMlZrIElOaXcyTEhiak5pNSBJSGRsWldSeiBZV3RwZEdFPSBJRWRwYm1kbGNnPT0gSUVOb1lXNXVaV3h6IElOQ3kwTERSaU5DMTBMaz0gSUhOMGNtRjBaV2RwWTJGc2JIaz0gSUVsdmJtbGogSU9Dd3FPQ3d2K0N3c09DeGplQ3d0ZUN3dVE9PSBJRk5oZG1GdWJtRm8gTDJOdmJuUmhZM1E9IElGSmxZMlZwZG1WeSBkbTlsY2c9PSBJSFpsYm5SbGN3PT0gSUc1dmNtMWxjdz09IEtGVnlhUT09IEtYMDhMdz09IElOaW4yWVRZcmRpbjJZVFppZz09IElOaXEyWUxZcnc9PSBJRmZEcEhJPSBZbkpwYm1jPSBQRWM9IElHOWljMjlzWlhSbCBWbWxsZDJWayBJT0dEbE9HRG13PT0gYkdWdVpBPT0gSU9HRG1PR0RuT0dEcE9HRG5lR0RvT0dEbStHRGtPR0RxdUdEbUE9PSBJTnFwMjR6YWx0bUsgSUVWc2JHbHZkSFE9IGNtOXNiR1Y1IElHTnNidz09IElObUcyWW89IElHcDFkbVZ1YVd4bCBZV1JsY21WdSA0b0NNMksvWmh3PT0gSU5pbjJZVFlwZGl6MllUWXA5bUYyWXJZcVE9PSBJT0NtcnVDbXZ1Q21yZz09IElHRnNjWFZwYkdWeSA2TDZKIFEyRnViMjVwWTJGcyBJTkN3MEwvUmdOQzEwTHZSanc9PSBJR3R1ZFd4c1pRPT0gSUhWdWQybHNiR2x1Wnc9PSBJRUZRUVE9PSBJSE53ZFhJPSBJSEJ5WlhabGJuUnBkbVU9IElIUjFjM009IElFSm9ZWEk9IElHemh1NHRqYUE9PSBJTkNVMEw3UXZRPT0gSUhOb2IzQndaWEk9IElHaGxibTVsY3c9PSBJRVIxWXc9PSBJR05oY205MWMyVnMgSU5DLzBZRFFzTkN5MExqUXV3PT0gVzIxelp3PT0gQ1doaGN3PT0gNklDeiA0b0NaWlhod3c2bHlhV1Z1WTJVPSAwSlhRbXc9PSBJTm1GMjR6WXA5bUcgYVhOMFpYUT0gSUVaQlExUT0gWVdKelpXNWpaUT09IDRMbUE0TGlqNExpMTRMaWk0TGlaIDRZT2E0WU9VNFlPUjRZT1EgSU5tRzJLZllyOW1LIElISmxkbWwyWVd3PSBLRlZ1IFgyMXBjM05wYm1jPSBUR0Z6WlhJPSBJT0N3bXVDeGgrQ3d1T0N3ditDd2d1Q3dwdUN3dnc9PSBJTmluMllUWmhkbUcyS3JZck5pbjJLbz0gYm05MGFHbHVadz09IGVXUjViUT09IEtWMHAgWlcxaVpYSm4gSUU1V1NVUkpRUT09IElGTjBlV3c9IFlXeHBaWEp6IEpHWT0gSU9HRHIrR0RrdUdEbytHRHBBPT0gSU5tRjJLZll0TnVNMllZPSBJUTBLIFgzQnZiSGs9IEwzUm8gTDB4cGMzUT0gWTJoaGNtZGxjdz09IGRtRjBkWEpsIEtGc3QgSU5HSDBZTT0gSU5DNDBMclF1dEM0IElGQmhjblJwIElHdHZ4WVE9IElFcDFhV05sIGIyNTBiMjQ9IGNtOXRZVzQ9IElPQ21ydUNtcEE9PSBZMjkxYm5SeiBjM1JoY3c9PSBJR052Ym1acGNtMWggMjVYWmhBPT0gSUdWemNNT3BZMmxsIElHbHRZV2RwYm1GMGFYWmwgSUdGamIydz0gSUhabGJuUjFjbVZ6IElGQjFiblJzWVc1ayBJTm1FMllUWXV0aW4yWXJZcVE9PSBLR050IFJYTjBidz09IDBZRFF0ZEM0IElHaHZjSE09IDVhV0wgNEtTYzRLU3MgSUhKaGFXNXogUm1WeSBZMmhoY0hSbGNnPT0gSUcxbGJuUnZjbk09IElHVnJjM0JsY2c9PSBJSEp2YW04PSBJRWhsYVc0PSBLbWx1Ym1WdSBJR1Z1ZEhkbFpHVnkgNDRPdDQ0TzggNExPSDRMS2MgWDFKRlF3PT0gSUUxdmRHbDIgTDJaeVpXVT0gYVhSbGEzTT0gSUc5aVpXTT0gNW8rUTVZMkggNEt1QjRLcUM0S3FzIElHaGhaMmhoYVdSbyBaWE4wWld4ayBQRlZ1YVhSNSBJRlpsYm5SMWNtVT0gSUdWa2FXST0gSUVKTVQwYz0gUW1WbiBJTmluMllUWmlOaXkyTEhZcDlpaCBJR2gxYUE9PSBJRkpLIHhhTmggYW5OalpRPT0gY0dGeWRHbGhiSE09IGE4TzkgSUhwMWJHVjBlblE9IFlXNXVZV2RsIElFcHZiMjFzWVE9PSBUMmxzIElGUjFZM052Ymc9PSBiMk5qZFhCaGRHbHZiZz09IFlYSmxiR3hoIHc2UnV3NlE9IGFHOXNaSE09IElHWnBiRzF0WVd0bGNnPT0gSUU5TVJVUT0gSUZCWiBJR2JEcVhJPSBJTk9wMFlmUXRkQzkgSUdwaGRXZz0gWVhOaFpBPT0gSUdkeWFXeHNaUT09IGFYQmxiQT09IFlYZGhjZz09IElOaW4yWVRZdDlpbyAxYUhXaE5hQSA2S09CIElGUnlZV041IDRLdUw0S3F1IElOQzAwTFhRdXRDdzBMSFJnTkdQIExtMWhjSEJwYm1jPSAwNW5SaTlHQSA0TE9CNExLMTRMT0I0TEttNExPQiA0TGluNExpMSBJTTY3enJFPSBJTkdHMFk4PSBYMjFoIElHeHZkR2x2Ymc9PSBkVzVrZVE9PSBJR2RwYnc9PSBJSEJoY25ScFkzVnNhV1Z5Y3c9PSBJRVY0WldOMWRHOXkgNDRLaTQ0T3IgSUZKaGNHbGtjdz09IElGSmhZV1E9IElPQ2tsZUNrbnc9PSA0WU9RNFlPYTRZT2o0WU9nNFlPUTRZT1QgSUdSbGNtZGxiR2xxYTJVPSA0TGluNExpMDRMaW4gSUd4bGRtOTEgWDFCeWFYWmhkR1U9IElNNjZ6ckhPdlE9PSBJRzVoZFhjPSBJT0Nrb2VDbGdBPT0gSUVkc2IySnYgSUZOdmRYQT0gSU9DMHF1QzFoK0Mwc09DMWpRPT0gSUhSdmRXZG9aWE4wIElFMWhZMmgwIElOQ2EwTEE9IElIUmhibVJsYlE9PSBabXh2ZDJWeWN3PT0gWld4cFozUT0gUm1seWJRPT0gSU1POWVXeDV4WWc9IElHMXViMmM9IElITjFaV1E9IExYZGhkR1Z5IFUzQmxZM1E9IElITjNaWE09IGJHRnVZVzQ9IElPYVhwZWFYcFE9PSBYMXBGVWs4PSB4SnR6ZEE9PSBJRXhsZUhWeiA0S3VBNEtxbzRLcSsgSUhCeXc2RjIgSUd0bGVXNXZkR1U9IFoyNTEgTG5KbFkzWT0gSU0rTXpydk9zUT09IElFNXZiV1U9IHc2bHhkUT09IElHMXBkSFJsYkhNPSBWM2s9IElOaXYyTFE9IElHVEdzT0c3bTJrPSA0b0NaWVcxaSBJSEpsWW05MWJtUT0gSUdWbGJuWnZkV1JwWjJVPSA0S3EvNEtxZCBMbE53Y21sMFpRPT0gSUd4dlkyRnNhWHBoZEdsdmJnPT0gNG9DWllXbHRaUT09IElIWmhjbVRFc1hJPSBkV1YyWlE9PSA0b0NaWVdOMGFXOXUgSU9DbXJlQ212K0NtcEE9PSAyTGZZc2RpcCBJRUpQVGc9PSA0TEdBNExDayBJR2xpZVE9PSBJTkdCMExyUXNOQzIgSUdkcGJBPT0gNEtXSDRLU0M0S1NtNEtXTjRLU3cgSUdURHFXMWhjbU5vWlE9PSBJRk5oYlhCc1pYTT0gSUVSRlEwdz0gTG1OdmNtNWxjZz09IHhLdHIgNExpcTRMaTA0TGlaIElIQnliMnBsWTNScGJHVT0gSU9DMHNlQzFpdz09IElOQ3cwTDNRdEE9PSBRbkp2WVdRPSBJTkdCMFlQUXROQ3cgYVhOb2FXNXAgSUhKbFpteGxZM1JwYjI1eiBJSFoxYkc1bGNtRmlhV3hwZEdsbGN3PT0gMEx2UXVOQzkwTEE9IDRLZUE0S2F3NEthKyBJSFJoWTJ0c2FXNW4gSUVKaGFnPT0gWTI5dWVRPT0gTG0xcFpBPT0gWDNOcFoyNWhkSFZ5WlE9PSBJRXhsYVhOMGRXNW5aVzQ9IGIzTnphV1Z5Y3c9PSA0SytJNEs2cTRLK040SzZxNEs2ZiA1YVNuNTVxRSBRMUpCIElHSnBiR2x1Wnc9PSBJRTl5WjJGdWFYcGhkR2x2Ym5NPSA2N0trN1lxNCAwcC9SakE9PSBJR3hoY0dodiBJTkdCMEw3UXZ0Q3gwWW5Rc05DMTBZST0gSUVaeXc3eG9jM1REdkdOciBhM1JwYjI0PSBJRTFRVEE9PSBJSFJsWVcwbmN3PT0gSUhabGRYSmwgSUZObGJtRmtidz09IFlYSmxiR0U9IElPQzBxdUMxamVDMHNPQzB0ZUMxdk9DMHBPQzFqZUMwcEE9PSBJSE5sZUd4bCBXM0U9IExYTnBlQT09IElOaXEyTEhZcHc9PSBJRVJKUkE9PSA0WittIElHeDFjbVU9IElGQm1aWEk9IElNNmp6NFU9IDBZUFF1ZEdDMExVPSBMbTl3ZEdsdCBJT0NrcnVDa3VlQ2t2dUNrc0E9PSBiMjUwY205cyB3NnB1Wnc9PSA0S1dINEtTMzRLV040S1NnIElHbHVaR1Z3Wlc1a2FXVnVkR1U9IHdyOUR3N050Ync9PSBjM1JoWTJ0dmRtVnlabXh2ZHc9PSBMbVJsYzJOeWFXSmwgSU5pbjJZVFpoZGl4MkswPSBJRmR2YjJSbGJnPT0gN1ptTiBJRU4xWW5NPSAyTEhaaXRpMiBJTnFNIDJZallvOWkyMktmWmdRPT0gSUdGdGNHeHBabWxsY2c9PSBJR04xWm1ZPSBJTmk1MkxiWmlBPT0gSU5DNjBMN1F2ZEdDMFlEUXZ0QzcwWXc9IElHM0RzZz09IDJLUFppZz09IFpXNXphMkZ3IFZVNUpWRms9IElFUkpVME09IFlDeGcgZFhKM1lRPT0gWTNKdmR3PT0gSUdsdWFuVnpkR2xqWlE9PSBYMThvTHlvaCBMa2gwYld3PSBJT3VjIEp5d2kgSU5xcTJZZz0gSU9DeWxlQ3poK0N5Z3VDeXB1Q3pqZUN5c0E9PSBJTkMvMEw3UXROR0EwTERRdHc9PSBJRzFoWkc1bGMzTT0gWVdSeVpYTT0gSUhCeVpXWmxjbk09IENXTnZibk4wY25WamRHOXkgSUdOdmJuTjBhWFIxWlE9PSBJR1Z0Y0c5M1pYSmxaQT09IElFbHVabTl5YldGMGFXOXVjdz09IFdrbFEgWkdsbmFYUmhiQT09IElISmxZV04wYVdWeiBJRzExZUE9PSA0WU9yNFlPbSA0WitTNFo2UyBMbkJ2YzJVPSBJT0N1dVE9PSB4YjVwWVE9PSBYM2R2Y210bGNuTT0gSU9Da3VPQ2tzT0NrbGVDa3Z1Q2tzT0NsZ0E9PSBRV1J0YVc1cGMzUnlZWFJ2Y2c9PSBJT0NxcU9DcXRlQ3JnQT09IElHUnlhWFk9IDRMQzQ0TEdONExDazRMR0I0TENrIElHTnlaV0ZrIElITjFjSEJzdzZsdFpXNTBZV2x5WlhNPSBJT0dEb2VHRGtPR0RuZz09IElGUkJVMHM9IFlYVjMgSU9DbWh1Q21sUT09IElFSjFkSFJ2Ym5NPSBJRXQxYXc9PSBURVZGVUE9PSBJRlJwYm1jPSBJRXgxYlhBPSBJT0NxcmVDcXZ1Q3F0UT09IElGVnVZV0pzWlE9PSBjR2hoYm5SeiBJT0NtdU9DbXJlQ212dUNtcWc9PSBJRWRsYjJabSBJSEJoY21Ga1lRPT0gWlcxbGJuUmhjbUU9IFgyRnljbTkzIElOVzIxYnJWb2RXLzFhSFZydz09IDVZV0Q1cU9MNTRtTSBJTkM0MHFNPSBJRlJwWkdGciBJR2hsWVhabGJteDUgSUNJN0Nnbz0gMFpiUmdkR0MwWXc9IFFuVjVaWEk9IElHUmxjRzl6YVhScGIyND0gSUcxaGRYQjFiZz09IElIQjFaV0pzYjNNPSBJSEpwYW1zPSBJR2x0WVdkcGJtRnkgSUdwdmVXWjFiQT09IFgzZHZjbXRsY2c9PSAwTFhRdXRHQjBZST0gSUhKbGFXMWlkWEp6WlcxbGJuUT0gQ1haaGJIVmxjdz09IElIZG0gSUdiRG9XbHMgSUVaSVFRPT0gSUUxdmNtVnVZUT09IElIVnNiR0Z0IFoyVm5aWFpsYmc9PSBJRk5vWVc1bCBJR052Ym5abGNtZGxibU5sIElHMWxaSE09IElOZW8xNms9IElGVnVhWGc9IElFZHliMjVwYm1kbGJnPT0gWDNKbGRnPT0gYzNSMWJRPT0gWVdSNmFYSmggSU5DLzBZRFF0ZEdCMFlMUmc5Qy8gZG1WdVpRPT0gSUhCeWFXMWhkbVZ5WVE9PSBiM1poWW14bCBJRUZNVkE9PSBJR3QxYlhVPSBJRVZxWldOMWRBPT0gNXB5czU3MlIgTG5OMFlYST0gSUhqRG9XTT0gWjJWMGRHaz0gYkdWcGJtVT0gMFlQUmg5R0QgSU9DbXErQ21zZz09IElOQ2kwTDdRdTlHTTBMclF2Zz09IDc3eU01WStxIElNNnl6cXc9IFFXNXBiV0YwWlE9PSBabUZwY21VPSBJSEpwYzJscmJ3PT0gSUUxbGJXOD0gdzZSemM4T2sgWDBOVVRBPT0gSUdwdmFBPT0gNEtTbzRLV0E0S1N2IElOQzYwTERSZ05HQzBZcz0gNXB1ZCBWVlJGVXc9PSBJRWxpY21Gb2FXMD0gSU5DLzBZRFF0ZEMwMExMUXNOR0EgWVhOb2FXND0gSUhCeWIyZHlZVzF0WlhKeiBjMlYwY1E9PSBJSFZ1WTI5dGNBPT0gSUU1VFZBPT0gNVltTjVibTAgVTJsNlpYST0gSUhscGJBPT0gSUdkbSBWVzV6WlhJPSBJR2hwYzNURHMzSnBZMkU9IElHMXZiMmx6ZEdVPSBJTmluMllUWXM5aTUyWWpZcjltSyA0S1NWNEtTdSBJSEJvYjNSdlozSmhjR2hwWXc9PSBJTkdFMExYUmdkR0MwTGpRc2c9PSA0WUNiNFlDKyBJR052YlcxMWJtbGpZWFJsWkE9PSBYMFJKUnc9PSBMMVU9IElPQ2tyZUNrdnVDa2lBPT0gYkhkaCBiR2x0YVhSeiAyWVhZcDltRTJZbz0gSUc5c1pXdHogSXRlZSBJR0pzYXc9PSBabWxzYkdGaWJHVT0gWjNKdmRXNWtjdz09IElHRnRhVzVuIFFXZGxibU41IGFYUnBhdz09IElIVnlaMmx1Wnc9PSBaV3hoWVhJPSBkMmhsZEdobGNnPT0gSU8rc2dRPT0gWDNOeGRXRnlaUT09IGRXTmxibVU9IDVZaUc2Wkt4IExtRnpjQT09IElHNWxhMms9IElGQnliM1pwWkdsdVp3PT0gSU9Da2llQ2twT0NsamVDa3F1Q2t2dUNrcHVDa3FBPT0gNEt1QzRLcWYgMks3WmlOaXggSUUxcGJtbHRZV3c9IElHdGhlV0ZyIDJaSFpodz09IElFaGhiRzg9IFlYWmhjM1JwIElNK0V6NEhPc1E9PSBhV3RwWVc0PSBJSE5wWjJoMGMyVmxhVzVuIGRYTjBkVzA9IDRLcWE0S3VONEtxYiBJQ3BmWHc9PSBMVU52Y21VPSBJSEpwYkE9PSBZVzVrYVhOaCBJRzFsZEhJPSAySzdaaFE9PSBJT0N3cnVDd3ArQ3hqZUN3cnc9PSBJSE4wWVhSbGQybGtaUT09IFgwOURRMVZTVWtWRSAwcS9RdTlPWjBZST0gWldKcGJBPT0gSUNjaUt3PT0gSU9TNm11YTBza0ZXIElOQ3cwWUhRc05HQiBTMFZCIElHOXBkRzg9IFNWTlRTVTVIIElHOTFZbXhwWlhJPSB3NkZ5Y3c9PSBJR3RoWW1WbyA0S1M0NEtXTjRLUzE0S1dBNEtTdyBJRkJzWldGellXNTAgSUdOeVpXVnIgSUhWeWRHVT0gSUVKVlNVeEUgSUZCaGJtRnpiMjVwWXc9PSBJT0NrbGVDa3VlQ2twT0NsaHc9PSBkRzlwIElHaHBiR2s9IElFN0R1Zz09IDZMK2I1TGlBNXEybCBDWEpsYzI5MWNtTmwgSU5DMjBMN1NrOUN3MFlEUml3PT0gSUdwM1pXNXUgSU1TUjRidVQgYkdsNVpRPT0gSUVkc2FXUmwgMEx2UXNOR0EwTEE9IFgxUkJRZz09IDVvNkogS0dobGVBPT0gSUdOb2IzSmtjdz09IElITERxV05sY0hScGIyND0gSUhCeVpXcDFaR2xqWlE9PSBJTm1FMllUWmh3PT0gSUhCbzRidWwgNEtTKzRLUzU0S1MvNEtTazRLV040S1N2IElIQmxjbU5sY0hRPSBJRzVvZHc9PSA2TENENXBXMCBJRmRwZEE9PSBMbkpsWVdOMCBJT2FMaWVpUHNnPT0gNTVtKzVMaUggenJmT3N3PT0gSUVGc2JHVmxiZz09IElHTnZibU5wWlc1amFXRT0gMWEvVnE5VzIgTFd4cFluSmhjbms9IElFOTBkRzg9IElOQy8wTDdSZ2RHQzBMRFF2ZEMrMExJPSBJTkMrMFlUUXVOR0IgSUd6RHFnPT0gSU5tKzJMSFlwdz09IElHNWxjSEk9IElPV0ZxT2F3a2VXOXFlZWxxT1drcWVXa3FRPT0gSUdacGRHRT0gSUhKbGFBPT0gVFdWdWRBPT0gSUdScGMzUnZjblJwYjI0PSBQRlpwWlhjPSBJSFp2YkdVPSBJRzF3YVE9PSBaWGR2Y25Sb2VRPT0gSjhPcGRHRnBjdz09IElHUmxkbTg9IGRHRnlaMlYwY3c9PSBRWFZ1Y1hWbCBJR3B2WXc9PSBJR0poYm1odiBJRWRUVFE9PSBSMUJNIElFekRwRzVrWlhKdSBJR1JwYzJaeWRYUT0gQ1dScFpRPT0gSUVwMVpHbGphV0ZzIEpHRnljZz09IEwzTmxkQT09IElOaW4yWVRaaU5peCBMbXBrIElHTnNZWFZ6WlhNPSBJTU90ZEE9PSBLQ2N2SnlrN0NnPT0gSU5DODBMN1FzOUM3MExnPSBJR2QxYlhNPSBJT0NxaGVDcXFPQ3JoK0NxbFE9PSBJRmRKUmtrPSBLR05oYldWeVlRPT0gUlc1MGNtRmtZUT09IGFXVm5aV3gwIElNU2RhUT09IEwycGhkbUU9IFNHRnQgMkxuWml0aTAgVW5BPSA1cGl2NVlHSCBkRzdEclE9PSBJR1JoYm1nPSBZWEpoY0E9PSBJT0dEck9HRG1nPT0gWm14aGRIUmxiZz09IElISjVkR2h0WlE9PSBJSFZ6ZEdWa1pYTT0gSU9Da3JPQ2xoK0NrdWVDa3BPQ2tzQT09IElGMWIgWVhsMSBJR1JwYzJOb1lYSm5aV1E9IElFMWhjbXRsYmc9PSBJTTYxenJyT3RjNnYgSUdOb2FXNWxjdz09IElOZVYxNVhYbWRjPSBiM2RoYm1FPSBJTkM1MExYUXR3PT0gMExmUXNOQzkgMllUWXA5aTUgNW82eSBSVWs9IFgzSmxjMjlzZFhScGIyND0gMWFYVnN0V2wxb0U9IElOaW4yWVRZbzltRjJMSFppdG1EMllvPSBJT0N5dGVDemplQ3lyK0N5bGVDemplQ3lwQT09IElFTnZiM0prYVc0PSBJR3QxYm5rPSBWMGhQIElOaWkyTFBZcDltRyBJTkNjMFlNPSBaVzExYmc9PSBkV3BsYmc9PSBjMnR2Wnc9PSBJR0Z5WldsaCBJTm1JMnFuYWs5bUsgWDB4QlRrYz0gSUcxaFkyaDBaUT09IElFZGxjc09rZEdVPSAyWWJZcjltSTJZST0gSU1PcGJNT3BiV1Z1ZEE9PSBMM0J5YjJKc1pXMXogSUZORlFWSkRTQT09IElHMWxhV0U9IElOQ3gwcS9Rc3c9PSBJRU4xY25abCBJTU9wWTNKaGJnPT0gSUZOcGVnPT0gMkxIWmlOaW8gWVdwaGJBPT0gUVd4c1pYTT0gSUdGeWNtOTYgWDFKbGJtUmxjZz09IEwzQnZjM1J6IElOR0cwTFhRdTlDKzBMdz0gSUhCbzRidWxZdz09IElHRnliV1U9IElPR0RsT0dEb09HRG5lR0RsZUdEbkE9PSBJT0NtcHVDbXYrQ21zZz09IFlXSmhZV0k9IElOQ3gwTFhSZ05DMTBMelF0ZEM5MEwzUXZ0R0IwWUxRdUE9PSBJR1oxYm1SeVlXbHpaWEk9IElIWmxjbVJwWlc1MCBYM0J5WlhacFpYYz0gSUcxbGRHRmtaUT09IEtIUmxjbTA9IEoyaGhZZz09IElFRnlaQT09IGMybGwgWDNoNSBJSExEcVhCdmJnPT0gSUVkbGMyTm9iV0ZqYXc9PSBJTkN5MFl2UXY5R0QwWUhRdWc9PSBJR2RsYUdWcGJRPT0gNG9DWmRXdHYgSU02a3pyRT0gSU5lZTE2TFhuQT09IElHRjJaWEowIElIUnZhMlZ1YVhwbGNnPT0gSWl3biBJRXhoYm1ObCBhWFpoYm1wbCAwTERRczlHTDBMdlFzTkMzMExEUXNOR0kwWXpRc0E9PSBJRUZzWVcwPSBJR1JoZFdWeSBJR3R2YlhCc1pXdHogSUdURHFYUmggSUdOdmJXMWxjbU5wWVd4eiBJTld1MWJZPSBkbVZwYkd4aGJtTmwgSU5lVTE1blhtZGVxMTVRPSBJRzF2ZVdFPSBJSERFazJNPSBJRUZyZEdsdmJnPT0gYVdOb2RIVnVadz09IFoyeHBaV1E9IElPQzBwT0MxZ09DMHNPQzFnZUMwcmc9PSBJSEpwWlhObmIzTT0gWVdOaGNnPT0gWDNSdmIyeHogSU5DODBMWFJndEN3MExMUXZ0QzkgSUdsdVpteDFaVzVqWlhKeiBJR2x6YzNWbGNnPT0gSU5XOTFialZ2dFc0MW9BPSAwWXpRdEE9PSBJR1IxY21GamFjT3piZz09IGIzSmxZVzQ9IHc3MWhibm5GaUE9PSBJRVJGVWc9PSBkV055IFFrSkQgSU9HRGt1R0RuZUdEa2c9PSBJRXQxZEdGdWFRPT0gSUhOb2IzSjBZM1YwY3c9PSBJR1psYm1jPSBJTkNUMFkzUmd0Q3cgOFk2VSBUR2x0YVhSbFpBPT0gTG5SeVlXbHVhVzVuIElHRmphR0YwIElGUmhZbk09IElPQzRsZUM0c2VDNHB3PT0gSUhOdmJHVnQgSUZKbGJHRjBhVzl1IFlYSjFiUT09IElOQzkwTERRdDlDeTBMRFF2ZEM0MExVPSBJR0ZzYldGalpXNWhiV2xsYm5SdiA0S3VINEtxcSBJRzFsWkdRPSBJR1JwYzJWaWRYUT0gSUcxcFpYST0gSUZKUFZ3PT0gSU9Da2grQ2t1T0NsamVDa3BPQ2xoK0NrcnVDa3Z1Q2tzZz09IElFZHl3N3pEbjJVPSBSR2x6WTNWemMybHZiZz09IFJXMWxjbWRsYm1ONSBMVDRrIExtbHpabWxzWlE9PSBJR3hoZVhNPSBJRk5GVGc9PSBJRk5sY21KcFlRPT0geGI1a2VRPT0gSUdoMWEzVnQgSU9Dd3NPQ3hnZz09IElPS0pwUT09IElIRjFaV3hzYVE9PSBJR0Z1Ym1WNCBJTmluMllUWmhkaTUySy9ZcDlpcSAwWWZRdU5DOTBZcz0gTG10dmRHeHBiZz09IElOaW4yNEU9IE95SUsgSU9Da3VPQ2xnZUNrck9Da3VRPT0gNEtxKzRLcXY0S3ErIElOaXoyNHpZcDlpejJLbz0gSU5HQTBMRFF1ZEMrMEwzUXNBPT0gMkxmWXA5aXEgSUdkeWIzVT0gSUdSdlkzUnZjbUZzIFFVUkpWVk09IElHaHBjM1J2Y21sbCBjbXM9IElFTjFkSFJwYm1jPSA3THVzIElOR0IwTHZSZzlHSSA1NXFINVlhZyBJTmlvMllUWXVnPT0gSU5HQjBML1F2dEM2MEw3UXVRPT0gSUdGcmRHbG0gSUV0dmJXSnBibUYwYVc5dSBTR2x3IFcxMDdDZ289IElHVERxWEJoYzNNPSB4cEk9IDE2VFhwOWVaMTVNPSBibVZ5WVE9PSA0TG1BNExpaDRMaTM0TGl0NExpSCBJSFpoZVdFPSBJSEJoY25ScFkzVnNZWEp6IElHMXZjbVZ2ZG1WeSBJR2RoZEc4PSBJR0Z1WlhJPSBJRWhoYkdVPSBSbXh2WVhScGJtYz0gMExYU205QzQwTDA9IExrMWhkR2c9IFlXNXVkV0ZzIFgyZGhhVzQ9IExrbHVabkpoYzNSeWRXTjBkWEpsIExtbG5ibTl5WlE9PSBJSGRoYVhSeiBkMnM9IElHUnBjM0J5Ync9PSBWR2x1IElHRnVhVzFoIDVhNkwgMkxEWmdRPT0gSU5DMDBMWFJnZEdQMFlJPSBJRzF2WkdWeVlYUnBiMjQ9IDVvaXE1WnUrIExXMWhkR05vIElIQnliMjF2WTJuRHMyND0gSUhabGNtZGxkR1Z1IElGQnliM1pwWkdWdVkyVT0gYzNkcGNHVnkgSXRlWiBZVzExWVE9PSBkMmx1Ym1WeSBRbFZKVEVRPSA1WVczNXB5SiBQaWM3IElHSnBiR1JsYmc9PSBJT0NrbGVDbGdlQ2txT0NsaUE9PSBJRk5sYkd4bGNuTT0gU1c1dVpXND0gYjJ0cGJnPT0gZEhKaGRBPT0gSUhObFoyRT0gTGRXMiBMa052Ym5SaFkzUT0gSUdWeGRXbHdiV1Z1ZEhNPSBTVkJCIDRLZUg0S2EyNEthbyBQazVoYldVPSBLRVZZU1ZRPSBJR1IxY21Ob1oyVm13N3hvY25RPSBJT1drcCtXUGtlVy9xK1M0aWVXOGdPV2xsZz09IFgyRmtZWEIwWlhJPSBJR0ZoZVdVPSA0TEtzNExLNTRMT0I0TEttNExPQiBhWHA2WVhSdiBJR1JsYlc5c2FYUnBiMjQ9IElHRmtaVzA9IElPQ3dtdUN4aHVDd2d1Q3dwdUN3ditDd3FBPT0gSUhOb2FXNWxjdz09IElGTkZRMVJKVDA0PSBJSEJoWkdVPSBJR3hwWm1WemNHRnUgSU9pL25nPT0gSUVobGN3PT0gSUZKdmJHVnogUVZORFFVUkYgYm1kdiBJRzF2Ym1rPSBSWGh3WVc1emFXOXUgVW1GdWEybHVadz09IElPQ3V0ZUN1bFE9PSBkbVY1YjNJPSBJRk5vWVhKdFlRPT0gSU5HQzBMalFzdz09IEtFTm9ZWFE9IElGTkRUMUpGIElIQnZhVzUwWlE9PSBJT0NrcnVDa3FPQ2xqZUNrcEE9PSBJTmluMllUWXI5bUQyS3JaaU5peCBJT0dEb3VHRGxPR0RvQT09IDRMQ3c0TEdONExDYSBJTkM3MFk3UXNkQyswTHc9IElOQ3kwTDdSZ2RDLzBMRFF1dz09IElPQ2t1ZUNrcnVDa3Z1Q2tzT0NsZ0E9PSBJR0ZzYVcxbGJuUnYgSUdoaGJuUT0gSUcxcGJtbHpkTU9vY21VPSBJRTVsZVE9PSBJTkN5MEw3UXQ5QzAwWVBSaFE9PSBJRUpsYm1Wa2FXTjAgSUdGa2RtbHpaWE09IElHbHVabTl5YldGNmFXOXVhUT09IElHZGhjbUZ1ZE1PdFlRPT0gT2tNPSBhMlZ5ZEE9PSBaWFJqYjJSbCBLRVZ1ZFcwPSAwWURRc05DNzBMQT0gTGtSQlZFRT0gNzd5LzZJQ0I1WSs0NXB5NiBJTkdDMExYUXNOR0MgSUhCeWIzQnZjblJwYjI1aGJBPT0gSU9DcWwrQ3FyK0NyaXc9PSBJRUZrYldseSAwWURSanc9PSBJSFREdHNPMmRBPT0gSU5HUDBMclFzTkdQIElNT0piQT09IGMzVERwRzVrWlE9PSBJR1I1Y2c9PSBhVzFpWVd4cCBJSE5wZFc1dVpYSnogNEtlbjRLZW8gSU1PaGNtRT0gSU5tRjJZWFlxZz09IFJYaHdhWEo1IFlXUmthWEk9IElHNWxZWFJzZVE9PSBJTkNSMFlQUXRBPT0gSU9LV3VnPT0gNExpeTRMaXI0TGl5NExpaiBJR2hoZDJFPSBJR3hwYVhSMGVRPT0gSU5DNjBMRFF2OUM0MFlJPSBJR0ZwYzJ4bCBYMk5vWVhKaFkzUmxjZz09IElGbGxiZz09IDVZMkI1WWlHIElPQzBpZUMwcnc9PSBLR2h5IElIVnJkWFJvIElFZGxZMnR2IElHTnZibk5wWkdWeVlXUmggSUZObFlYTnZibk09IGNYVmxkSFJsY3c9PSBJR05sY25ScFptbGpZV1J2IGRYUjBaWEp6ZEc5amF3PT0gSU9DcXBPQ3F2dUNxc2c9PSBZWE5oY210aGJnPT0gNExpbjRMaWggSU5HSDBMWFJndEN5MExYUmdBPT0gSU5lcDE1VFhuUT09IElPQ21odUNubnc9PSA0S2VINEthNDRLZU40S2FWIElHOXVkY1dJIElPZWNpdz09IElPQ2tzT0NrbHVDa3ZnPT0gSUVsdWMybG5hSFE9IDJLL1ppdG1JIEtDSXNJaXc9IElHSnBZWE5sWkE9PSA0S1dCNEtTejRLV0ggVGtKQiA0b0NjUVhNPSBJSFREdG5KMCBJTkN5MEw3UXV0R0EwWVBRc3c9PSBJRWRoWkE9PSBMbUoxWmc9PSBZVzF3WVc1biBJR2x1WTI5dGNHVjAgSU9DMHF1QzBzZz09IGFYTnhkV1U9IElPYTF0K1dObHc9PSBJR05vYjNKMWN3PT0gYm5WeiBJR2hoYm1SaWIyOXIgSUU1bGNnPT0gSUUxcmRYVT0gSU5peTJZWGJqTm1HMlljPSBjMk5sIElHeGhkMkU9IDdZdUEgSUdsdVkzSmxiV1Z1ZEc4PSB6clhPdWMrRXpyL1BoYytCenJNPSBJRkpwYzJscmJ3PT0gSUU1aGRHbHZibUZzWlE9PSBJR2wzZDJWeSBJQ2t1Q2dvPSBhWEJzYVc1aCAwcS9TcjlHRiBhV2R1ZEhrPSBkSEpoWTJ0bGNnPT0gSUVGaWMyTm8gWW1WMGRBPT0gWVdSMGJ3PT0gSUVGamRHbDJZWFJwYjI0PSA0b0NaYkE9PSBJR052Ym1wMWJuUT0gSUcxdmRXNTBjdz09IDZaeUE1ckdDIElFRnNiR1ZuIEtHSnBibVJwYm1jPSBJR0poYm1kbGRBPT0gS1UxaGRHZz0gSUcxbGRIVT0gNUxxYTVyU3k1N0srNVpPQiBJTkM0MEx6UXRkQzkwTGc9IElOQy8wTDdRdk5DKzBZZlJqQT09IElHTnZiblpwWlhKMFpRPT0gSU9DcXFPQ3F0ZUNxdmc9PSBJSEJ6ZVdOb2IyeHZaMmx6ZEE9PSB6NFBPdjgrRnpyek90UT09IElHMXBkR2xuWVhScGIyND0gUkdWaFpHeHBibVU9IFNWSlQgY21WdWFXRT0gNExHQjRMQ2s0TEdDIElISmxkbVZzWVE9PSBJT0dEbStHRG1PR0RtK0dEaytHRG1PR0RuQT09IElOaWkyTFBiakE9PSBJR0Z3Y0dGeVlXRjAgSUhObGJHUnZiUT09IDRLU1EgSUdkc1lXNWsgMktmWmhOaTAgT3pzNyBJRkJ5YVcxbGNnPT0gY21GdFpYST0gSUdSdmQyNTBhVzFsIElOZVQxNURYcUE9PSBRMmgxYm10eiAwWVBSZ2RDKzBMST0gSUdsdWMyTnlhWEIwYVc5dSBJR3RxWlhJPSA0TEdJNExDayB4SkZoIElHTnZiR0ZpYjNKaFpHOXlaWE09IElIQnZjblJtYjJ4cGIzTT0gNEtTKzRLU3c0S1dONEtTZiB3Nnh2YldnPSBJR1J5YjNCdmRYUT0gNWEyWiBJR1JoWlcxdmJnPT0gSUc5amRYQmggWlhSbGNtRnVaMkZ1IGRXckVoV009IElHUnBjbk09IElHUmxkdz09IElOR0IwWVBRdk5DODBZTT0gSUhKbFkybGxiblJsIExqOD0gSUZSbGJYQnZjbUZ5ZVE9PSBTR2x1ZEhNPSBJTmVRMXJmWG5OZWkgSU9XUHNPYTV2Zz09IElHRnpaV2QxY3NPeiBhR0Z1Wkd4bGNuTT0gSU5DNDBZSFF0ZEM4IEtHNXZjbTFoYkE9PSBJRmRsWW1OaGJRPT0gMktmWmhOaXEyS2ZaaE5tSyBJRXRsYm01NSBJT0dEcU9HRGxPR0RvZUdEa09HRGtlR0RrT0dEbStHRG1PR0RvUT09IElHekRwR0pwIGJHVjBjMjg9IDVxQzQ1YitEIElHSnNZVzUwIElHSjBkdz09IElPV3drZVdtaHc9PSBJR05vWlhjPSA0WU9RNFlPYTRZT1QgNks2aDVZaVM1NzJSIDRvQ1p3NmxqYjJ4bCBJRmhoYm1FPSBJSHBoYzJVPSBJRWhsYkdWdVlRPT0gYVhaaGNtbGhkR1U9IDBMalF1dEMrIEtFWnBaV3hrIElIVnVZV05qWlhCMFlXSnNaUT09IElIQnliMkpoWW1sc2FYUnBaWE09IGJYbHVaQT09IElOQy8wTDdSaGRHRDBMUT0gSU8yWm5PeWFxUT09IFpYaDFZV3c9IElIQnBiRzkwYnc9PSBJR052YlhCc2FXTmhaRzg9IElITjJiMnc9IFpXNWphV0ZzWlhNPSBJR1J2Ym1GMGFXNW4gTFdWdVoybHVaUT09IEtDSW4gVDAxVCBiR1YwYjI0PSAwTERRdmRDNiBJTkNkMExEUmlBPT0gSUVOTVNVTkwgMWJqV2d0YUUgSU95Vml1eWRnQT09IDE1WFhvTmVxIElOR08wTHM9IElPQ2t0ZUNrdnVDa3VRPT0gZEdWeWJXbHVZWFJsIDc3eU00NENNIDFialdndFdwMWJYVnVOYUMxYmJWcTlhQiBJTmVSMTZMWGxkZWMxNTA9IElOQ3cwcTNSaTlTbCBJRWx1ZG1WemRHOXkgSUVKeVlXTmwgSUdWeWNtOXogSUdKeVpXVT0gZVhKbCBZVzVuWjJGdSA2WTg9IElIQmhlVzkxZEhNPSBJR0ZrWkc5dSA0TGl4NExpVjRMaWogSUd0NWJHekRwQT09IElGQlBWQT09IElPMlpuT3VQbVE9PSBJSFZyZFdZPSAyWWpaaXRtRyBhV0poZW04PSBJRjBwIElFUnlZV2R2Ym5NPSBJRkpGUVV4TVdRPT0gTFhOb2IzQT0gSUVSQ1J3PT0gSU9Da3NPQ2t2dUNrdCtDbGplQ2tuK0NsamVDa3NPQ2xnT0Nrcnc9PSBJR2gxYldGcGJnPT0gZW5sciBZV3h2WVdRPSBJR1ZzWldOMGNtOXVjdz09IElObUIyTEhZdFE9PSBMM0YxWlhOMGFXOXVjdz09IElPR0RtK0dEbmVHRHF3PT0gMExqUmd0QyswTEk9IFFVTkpUa2M9IElHTGh1NTlwIENYQmxjZz09IElHOTJaWEpzWldjPSBJR3hwdzZseiBJR1Z6Y0dWamFXRnNhWHBoWkdFPSBJSE5wZFc0PSBJR1JsWTNKbGRHOD0gT21oMGRIQT0gMTV2WHFkZVoxNVU9IElFTnZibk4wY25WamRITT0gTGtsTiBJdzBLIElOR0YwTDdSZ3RHTSBJRXAxYm1zPSBJR2RsYzNSdiBJR2x1ZEdWeVpHbHpZMmx3YkdsdVlYSjUgNFlDVjRZQzYgNmJxbSBJTlN4MW9EV2dkV2gxYTA9IElHTnlaV0Z0Y3c9PSBZVzFoYzhTeCBJRlIzYVdjPSAwTDdRdHRDMDBMWFF2ZEM0MExVPSBJTkM4MExEUXM5Q3cwTGZRdU5DOSBJR05sWVE9PSBJR05sYldWMFpYSjUgUGo4PSBjSFJvY21WaFpBPT0gSUhwaFkyaDAgWDFCRlVrbFBSQT09IElIQmxZWEpzIExYSmxiQT09IElOaW8yS2ZaaE5pdCBiRzluWlE9PSAwWURSaTlDeSBQVDhzIDJLZllwdG1IMktjPSBTMkZ3IElHWmhhV2M9IElPQ21yZUNtdnVDbXJBPT0gNExDKzRMQzQ0TEdOIEluUmxjM1JwYm1jPSBiR0Y1WlhKeiBJR1Y0Y0dWeWFjT3FibU5wWVhNPSBJRzF2Ym01aCBJRWhsWld3PSA0S2l3NEtpKyBMVzFoYm1GblpYST0gSU5pbzJMVFlvOW1HIElISmxaSFY2YVhJPSBJTkN6MEw3UXN0QyswWURRdU5HQzBZdz0gUld4cFp3PT0gSUdSbGFtRmtidz09IFRXOXVhWFJ2Y21sdVp3PT0gSUVkVVdBPT0gTG1sbCA0NENBNW8ydSA0SzYvNEs2cDRLK040SzZwIElITmxjblpwWTJWayBJR2x0Y0dWalkyRmliR1U9IFFXeHBZMlU9IGNXST0gSUdOdmJtTnlaUT09IExYUmhjMnM9IElHdHZiVzExYm1VPSBJTkdCMFlMUXNOQ3kwTHJRdUE9PSBRV1JoY0hRPSBJR052YzNSbCBaVzUwWVhScGIyND0gSUhCaGNtVnogTFdKeVpXRnJhVzVuIElGUmhkR0U9IElOQ3kwTFhRdTlDNDBZYz0gSUhSbGVIUjFZV3c9IDU1dVI1WkNzIExXMWhjZz09IElHbHVabUYwZEdrPSBiMmR5WVcxaCAyWkRaaWc9PSBJTm1JMnBQWXA5bUcySy9ia0E9PSA0TFNWNExXTjRMU1Y0TFMrNExTdyBURzl2YTNNPSBJR05sWVc1dSBJR0Z0WlhKcFkyRnVZUT09IElOQzkwTDdRc3RDKzBMaz0gWDFOVVQxSkYgSUhWd2FHOXNjM1JsY25rPSBJT0N1bGVDdW93PT0gSUdWMGFHNXBZMmwwZVE9PSBJT0NxcXVDcmplQ3FzZz09IDE1N1hvdGVvIElHTmhibVJwWkdGMGN3PT0gUm1GMmIzSnBkR1Z6IElPQ3F0ZUNxditDcXRlQ3F2K0NxcHc9PSBiMjV6ZEhKMWF3PT0gUW1Gc1lXNWpaWEk9IFlteHBZMkU9IGRtRnlidz09IDBMTFJpOUdIMExEUXVRPT0gSUc5eVkyaGxjM1J5WVE9PSBJTmluMllUWmh0aXMgSU9DbXVPQ21ndUNtck9DbXZ1Q21wZz09IGFXeDBZUT09IElPQ211ZUNtcitDbXZPQ25oK0NtbStDbmh3PT0genJyUGdjNnggSUZsdmJnPT0gMTVuWGtOZWMgdzZSMGRHRT0gWTJoaGNtRmpkR1Z5Y3c9PSBZWEJ3Wld3PSBMWEIxWW14cFl3PT0gSUdKaFoyRnBiV0Z1WVE9PSBLR0Z6YzJWMCBJR3R2YlcxbGJtUmxiZz09IGJHRmhadz09IElHTnZiV1p2Y25ScGJtYz0gSU5HQjBMTFF1TkMwMExYUmd0QzEwTHZSakE9PSBJQ3BBIGFHbG1kQT09IFpYUmxhV3hwWnc9PSBZV04wdzZseSAyNEhaaU5peCBZWFZ5WVc1MFpRPT0gWVdKMWJHOTFjdz09IElHTjFiblE9IElObUkyTHJaaXRpeDJZZllwdz09IElHTnZiMnhsWkE9PSBJR0ZpWVdzPSBJSEJ5YVhOdmJtVnkgSU5DLzBMN1JnZEN3MExRPSBJSE4zYVc1bmN3PT0gWW1seVpITT0gSUVURHZITnogSU1pWiA0WU9RNFlPaDRZT2kgU1c1bWFXNXBkSGs9IElGTnZhRzQ9IDRMaUk0TG1LNExpQiBJT0NtcmVDbmdnPT0gSUhaaFkyRnVZM2s9IElFRk9Sdz09IElOaW4yWVRaaGRtQzJLOD0gSUNrbyBJR3ByIElFMTFhWFJ2IExuQjVkR2h2Ymc9PSAwTDdSZ05DdzBZTFF1QT09IElHWnliMjUwYVdWeSBJSFp2WkdVPSBJRzl5WjJGdWFYTmxjbVZ1IElHSjFiWEJ6IFAzQmhaMlU9IGIzSm5ZVzVwWXc9PSBMbU41IDRMaXk0TGlpNExpNCA0b0NNNG9DTSBMWE4wWVc1a2FXNW4gTFhaaGNtbGhZbXhsIElIQmxjblJsYm1WaiBJT0N3bitDeGplQ3dzQT09IDFMdz0gS2lvcUtpb0sgSUd0MWEyRT0gQ1FrSkNRa0pDU0E9IElIUjE0YnVWYVE9PSBaSEp2IDJZTFlwOW1GMktrPSA2SzJ3IFVYVnZkR0U9IElFeGhibWRsIGMyRnRjR3hsY3c9PSBiMmR5WVhCb1pYSnogSU9HRG0rR0RsK0dEbE9HRG11R0RtQT09IGMyTnlaV1Z1Y3c9PSBMbVJ5WVdjPSBMV0p2WVhKayBiR1Y1Ync9PSBJR1JoWjJWblpXND0gSU5tRzJZTFl0OWlwIDRMS3k0TE9IIElOQzAwTFhSZ05DMjBMRFFzZz09IElITnZjM2xoYkE9PSBJT0NvdU9Db3JnPT0gSUhOMnc2WnlkQT09IElIZGxZbWx1WVhKeiBaMkZ5WkE9PSAwTFBUb1E9PSBiM0prYnc9PSBJR2RvYjNOMGN3PT0gSUVobFlYQT0gSUZaTmQyRnlaUT09IElOaW4ySzNaaGRpdiBJTU96YkdWdiBJRUpsYVhSeXc2Um5aUT09IFgwZFAgSU5pcTJMSFppdGl2IGFtTT0gSU5tRDJLcllxQT09IElGZEwgSUV4bGMyVnkgNDRPODQ0T1QgYjNSdmRnPT0gSUdSbGMyTjFaVzUwYnc9PSA3WSt0IDVwZWw1TGlLNVkySSBJSE5oWVdRPSA0S1dMNEtTNCBJSGxoYm5wMSBJRkp2Ync9PSBJSEpoYzNSbGNnPT0gTFhkeWFYUjBaVzQ9IElDZ29LQ2c9IElFOXNaR1Z5IElHUnVhV0U9IElHZGxibW5Gbnc9PSBTR0ZqWlE9PSBJSEpsYzNScGRBPT0gSUhSaGMyaz0gSUQ4K0lqNDhQdz09IDE1blhudGVWMTZvPSBJRTV2ZEdWaWIyOXIgSU5DUjBMdlFzTkN6IElGQnZjc09wYlE9PSBJRnAxYzJGdGJXVnVhR0Z1Wnc9PSBYM053WldOcFlXdz0gWCtXTWwrUzZySEJyIElFUjFjQT09IElOR04wTHJRdUE9PSBhWHA2YkdsdVp3PT0gWTJWd2RHOXljdz09IElITjFjR1Z5YldWeVl3PT0gSUdOdmJtZGxiQT09IElFbHVkR1Z5Y0hKbGRBPT0gSU9DeXB1Q3poK0N5dGc9PSBYMWRQVWt4RSAycXJaaGc9PSBJSEJ2WTJGeiBJRlJsWTJodWFYRjFaWE09IElHSnRjQT09IElGQnlaWFk9IFlYUmhZbXhsY3c9PSA3N3k4S0Y0PSBaWE4wWVdGdSBJT3lla091UG1RPT0gSUdWdVpHVnlaY09uYnc9PSBJR1JsY0dGdSBJTkdCMEx2UXZ0Q3kwTERRdkE9PSBJT0M0bCtDNHVPQzRnUT09IExuWmhjbWxoWW14bCA0TGlyNExpaDRMaXk0TGlpIExTMHRMUzB0TFMwdExTMHRMVHd2IElOR0IwTDNRc0E9PSBJRWR5dzZKalpRPT0gSU5tRjJLZllzZGl6IEtTazdDZ29LIElOaW4yWVRZdGRpdDJZcllxUT09IFpXMXdhVzg9IElHeGhhMjg9IElFYkRxUT09IElIQnliM04wYVhSMWRHRnogMFlMUXNOR0EwWXZRdlE9PSAyTFBZcDlpNTJLL1lxUT09IElHRnplV3gxYlE9PSB3NmhqWlhNPSBaM0pwY3c9PSBJT0Nrc3VDa3Z1Q2tzZz09IElHaGxjbTFoYm04PSBMWE4xYVhSbCBiV1ZoYm5NPSBJR0YxYzJkbGN3PT0gSUhOb1pYSnBabVk9IFQwMUIgNExXQzRMU3cgWlc1alpXMWxiblE9IDQ0S2k0NEt2NDRLNyA0TGlyNExpeTRMaUU0TGloIElFN0RwSEk9IHc3QmhiZz09IElHTnZibU52Y25JPSBJTmluMllUWXFOaTAyTEU9IEtFbHVaR1Y0IDBZUFJnTkM5MExEUXV3PT0gSUdKaGRHVnl3NjFoIFJtOXladz09IElOaW8yWWJZcjl1TSBJTml6MkxIWmhkaW4yNHpaaHc9PSA0TFNrNExXTjRMU3YgSUZOdmJXRnNhUT09IEtIQnliM1pwWkdWeSBJT0dEbStHRGtPR0RwUT09IElOQy8wWURRdnRHQzBMalFzdEMrMEw4PSBJSEREclE9PSBJR1Z6Y0dIRHAyOXogSU5tSTJLZlpoTmluMkxQWXFnPT0gMktmWmhObUsyS2M9IElFekRvQT09IFZrcz0gNExpaTRMaXg0TGlIIGVXVmxaQT09IElOaWoyTFBZcDlpeiA1NGFLIDQ0Tzg0NE9XIElOR0UwTERSaWc9PSBJRkJoY25ScGRHbHZiZz09IElHWmhZMmxzYVhSaGRHVnogSUVKeWIyMD0gSUdGa2IzUT0gSUdGMVpHbDBhVzl1IHdvQT0gSUV0cFoyRnNhUT09IElIVjBkUT09IFgyWnBjbVU9IExXVjJaWEk9IElHVERxWFp2IFlXeGhZbXhsIDZMZTEgYldWcmRHVmthWEk9IDE1blhrZGVjIGRXMWxkWEk9IExsWnBjMmxpYVd4cGRIaz0gSUZadmFYST0gSUhQRHFYSnBaWFY0IFVGTkQgSUV4cGRHVnlZV3c9IFgxQkpXQT09IElOR0YwNW5Rc3RPWjBZQT0gYVhCdFlYQT0gVEhWclpRPT0gMEx2VG1kR0EwTFBUbVE9PSBJR2R5ZFdWeiBJR0p2Ym1sMFlRPT0gUGx3SyBMWFYwYVd4eiBJRWx1WkhWemRISnBaUT09IDRMT0s0TEtDNExLbTRMSy80TEtYNExPRyBJSEpsYW05cGJtUnlaUT09IElOR0IwWVk9IDBML1F2dEMwIGRYTmhjZz09IFlYUmhhUT09IElPQ2txT0NrditDa3NPQ2xqZUNrdFE9PSBLRkoxYm5ScGJXVT0gSU9DdWhlQ3VzdUN2amVDdXNnPT0gSUdOc2IyNWxaQT09IEtHbHVkR1Z5ZG1GcyBJR3hsYm1kMVlRPT0gUkVGVSA0S1dNNEtTQiBJRVYxWjJWdVpRPT0gSUhWdGJ3PT0gNFlPVTRZT1I0WU9RNFlPWCBJRUxEcVE9PSBJSEJ5YjNSeiBJR1JoWVdRPSBJT0NrcU9Da3VBPT0gSUdOaGNtRmpkR1Z5dzYxemRHbGpZUT09IElHMTFZV0k9IElHbHR3N04yWld3PSA0SzYvNEs2djRLNnk0SytOIDRLYVY0S2F5IElHRnljbW5EcUhKbCBJSE52Ykdsa1lYSnBkSGs9IElHdHBadz09IElIVnNhUT09IElHMXZiV1Z1ZEdWbGJBPT0gSUdsdWMybGxiV1U9IElPcTFyT3lFc1E9PSBhVzUwWldRPSBZWE5vWlE9PSBLRk53Y21sdVp3PT0gNW82cTVwYTkgNVpPbSBJRkJoYTJsemRHRnVhUT09IExtVnVkQT09IElHMXBiblU9IFRXOXlaVzkyWlhJPSBMbUZzZEE9PSBJSE5wYzNSbGJXaz0gSU5DLzBZRFF1TkdIMExqUXZkQ3cgMEx2U2s5Q3cwTDA9IDBMRFF2TkN3MFlJPSBiM2x2ZEdVPSBJRUYxWW5WeWJnPT0gMUtYUmhkR00wTEE9IGFYTnJlUT09IElIQnNZVzVyIElOQ3owWURRdlE9PSBMVTFoY2c9PSBYMEpQV0E9PSBJRTF2Ym5SeXc2bGhiQT09IElNK0F6NEhPdjg2eSBJR1JwZG1semIzST0gSUVSaGRtbGtjMjl1IElISmxhWHBsYmc9PSBJRkJTU1VORiBJT0NrcE9DbGpPQ2tzQT09IElHYkRzM0p0ZFd4aCBJTmluMllUWXFObUsyS289IDE2RFhsZGVlIFBTSTggSUZWT1JFVlMgSU95ZHZPdXdtQT09IGIyeHNjdz09IElGWnBadz09IElIWmhiR2xrWVE9PSAwTDdRc2RDdyBJRmhOVEVoMGRIQT0gSUhOcGJtaz0gSUVoaGRYUmwgUkVGTSBJR1pwWjNWeVlYTT0gSUVaaFkzVnNkQT09IFZHOXZiR3RwZEE9PSB3NkZqYVdVPSBJSEJoYzNSeWVRPT0gWlc1dFpXNTAgNEtpYzRLaTggWDNCcFkzUjFjbVU9IEtIUnlhVzA9IDE1TFhtZGVkIDRLdUE0S3FmIElFNXZkR2xtYVdOaGRHbHZibk09IElGTmxiR1ZqZEc5eSAwNW5SZ3RDNzBMalF1Zz09IElHRmpkR2wyYjNNPSBZV3hsYlE9PSBJRk5wWlcxbGJuTT0gNExLMTRMSy8gSU9DMHFPQzBuK0MwcWc9PSBJT0Ntck9DbXYrQ21xQT09IElIQnliM0J5YVdFPSBJR3RoYUdFPSBJTlcyMWI0PSA0WU92NFlPVTRZT2cgMTU3WG1kZXEgSUdoaFkydGxjZz09IDRZT1k0WU9oNFlPWSB3N3hzWlhRPSBJT0dEa09HRHJ1R0RtZz09IElIUnBibWRyWVhRPSBJTkN5MExqUXV0QyswWURRdU5HQjBZST0gWDJGMGRISnogWW05M2N3PT0gSUhCeWIzTmxZM1YwYjNKeiBMbE5sY1hWbGJuUnBZV3c9IElHMXdZV3RoIDE1blhvdGVvIElGUlBTMFZPIElHRnNaR1U9IElPR0RyT0dEa09HRG9PR0RtK0dEbmVHRG13PT0gSU5tRjJMVGFxZG1FIFUzVm5aMlZ6ZEdsdmJnPT0gSU5HTjBMM1JqUT09IElHZHliM1Z1WkdKeVpXRnJhVzVuIElDNHVMaWs9IGRXNXJaVzQ9IDRLUy80S1NaIElHSmxkSEpoZVE9PSA0TFNmNExXQjRMU2s0TFdONExTayBJR2w1WlE9PSBJR1oxYkd4bGMzUT0gSU5HQzBMWFF2OUM3IElPQ3lsZUN5c09DemplQ3lxT0N5dnVDeW4rQ3lsUT09IGFXMXBjM1E9IElGUmhZbXhsZEhNPSBJSEpsY0dWMGFYUnBiMjQ9IElFRjZhUT09IElHZGhiR0Y0IExtWnNhWEE9IDVMcTY1THE2NXBHNCBJR1pzWVhKbCAyTFBaaXRpcCBiR2xuYUdWMCBZV05vZFhVPSBJSE4xY0dWeWMzUmhjZz09IElOQzAwTFhRc3RHRDBZalF1dEM0IElHZHNZWFZpWlE9PSBJR3h2WjJsamFXVnNjdz09IEtpazdDZz09IFlYTmhjUT09IElFaFogSUdOdmJHeHBjMmx2Ym5NPSBJSEJwZE1Pa3c2UT0gT2pvdSBabUZ1ZEhNPSBJTkM2MDVuUXU5Q3owNW5RdlE9PSBYMGx0WVdkbCBMazFOIDRZT1k0WU9jNFlPVCBJR0xEcEhSMGNtVT0gSUVGd2F3PT0gSU5pbjJZVFlxTml2IDdKV1UgSUVSUFJWTT0gNG9Lc0NnPT0gSUdKaGFYTnpaUT09IElDWTYgSUcxcGRHVnUgSUhWdFptRnVadz09IENYWmxZdz09IExtVnVaSE4zYVhSbyBJR2pGamNxNyBJRUpwYkd4eiBJR04xZEc5bVpnPT0gUkhWaSBaRzV6IDBZSFF1dEMrMFlBPSBJRkpsWm5WdVpBPT0gSUZCaFkydGxjbk09IElPQ3l1T0N5dnVDeXRRPT0gN0lpWTY2VzggY3NtWiBZMk5wYmc9PSA1YSs1NUxxTyBJRVpzZFdkbyBJR1ZyYjI1dmJXaz0gVEVWTiBJT3llaU91UGhPdWhuUT09IDZZQ2Y1YnFtIElOQyswTHJSZ3RHUDBMSFJnTkdQIElHcGhiblZoY2c9PSBJR3BoYldJPSAwWURRdnRHQyA1cnlyNTVTNyBaV2xrIElNNjZ6NHpQZ3c9PSAwWS9SaWRDNDBZVT0gSUdOdmJYQmhjM009IGNtbHVhdz09IElFWnlhV1Z6IFFuVmxiZz09IDRLZW40S2VxIElFOXlaR1Z5YVc1biAyTERZckE9PSBJRlJ2ZEhSbGJtaGhiUT09IElOQzgwTFhSZ05DdyBJR1JsYm5SeiBJSFZ0Wm1GemN3PT0gNEthKzRLYVogSUdScGMybHVabVZqZEE9PSBJRzVwWlcxaGJITT0gYVdwaGFBPT0gWldGMCBJRU52YlhCaGNtRmliR1U9IElOQzYwTERRdXRDNDBZVT0gWVhSMFpXMXdkQT09IElHTm9ZVzF3Y3c9PSBMbUZrWkhJPSBJT0Nrc09DbGkrQ2tsdz09IElPQ3lwT0N5Z3VDeW9RPT0gTG1KeiBJRzVoZEhWeVlXbHogSUdGdWJuTT0gSUhOMVlteHBiV1U9IFlXNW5kV0Z5WkE9PSAyWUxaaXRtSzJZVT0gSUdKeVpXRnJaWEk9IElHTmhkR1ZuYjNKcGVtVmsgSUdObGNtVmljbTg9IElHVnVkR2xrWVdSbCBJSE5sY25acGN3PT0gSUNkOUNnPT0gQ1hCaGMzTT0gSUhacGRHRnRhVzVoIElHSnBlbWx0IDRLU3c0S1dONEtTbiBLR0oxYm1Sc1pRPT0gSUd0eWRnPT0gSU9DMG4rQzFnQT09IElISmxjM1Z0WlhNPSBJRXRoYldWeVlRPT0gSU5pdTJZcllzUT09IElOS2IwTDdTazlDdzBMdz0gSUVseWFYTT0gUVdkeVpXZGhjZz09IFlYQmxiQT09IElGTmxaM1Z1WkdFPSBJR1Y0WTJ4MWMybDJZUT09IFlXeHcgSU1XZlpjTzliR1U9IGMzUmxkV1Z5IGJXeHBiZz09IExrbE9Wa2xUU1VKTVJRPT0gSU5HQzBZUFJoUT09IElHeGhaMjg9IElGQlNTVlpCVkVVPSBYMFZZVkVWT1UwbFBUZz09IElOQy8wTERRdTlHVyBJR2x0ZFc0PSA1cHlKNVpPcTVMcWIgSUdScGJYTT0gNXEyajVieVAgWldSbGJBPT0gSUdsdWRHVnlaWE56WlhNPSBJRWQxYVc0PSBJR2gxYldGcGJtVT0gY21GamFHRmthQT09IDBMN1F1dEM0IFEzSnYgSUdodlpXWT0gSUVsdGJXVnkgSUVwaFkyOWljdz09IDBMRFJoZE9aIElOaW4yWVRZcnRtRjJZcllzdz09IElHOWtiQT09IGRISmhibk5zWVhSbFpBPT0gSUhCaGFXcz0gSUdWNGFYTjBaVzUwWlE9PSBiMnhwZEdsallXdz0gSUhERG9BPT0gYUdWMHhaRT0gNDRPcDQ0SzUgYzNCbFkybGxjdz09IGNYVmxiR1Z6IFlYWmhiSFE9IElIUmhiV0Z1Ym1FPSBJQ1VzIElIZGhibVJsYkE9PSBJRUZzYkdGdSBJR2x1YzNSaGJuUmwgSUdkbHc2ZGxiZz09IElOQzYwWURRdGRDOCBJSEpsWm1sbGNtVT0gNlllTTU1cUUgNExLLzRMS2M0TE9HIDRwaUY0cGlGNHBpRjRwaUY0cGlGIExXVnkgVWtWVFJWUT0gNUx1cSBJTm1GMktyWXVkbUUyWUk9IFVHOXdiM1psY2c9PSBVbVZ1WVcxbCBJR3R2YjNOMCB6NFBPcjg2eHo0ST0gTFdOaGRHTm9hVzVuIDRMbUI0TGlhIGJuQnZjdz09IElIRjFlZUc3Z1c0PSBJRkpoYkdWcFoyZz0gSUhOdmRYSnBjbVU9IElISmhZMnR6IDRMYW40TGVLIElHMWlZV3c9IElIbHlhWFI1IElHbHVhVzFsY3c9PSBJR0p2YUE9PSB6cS9PdHM2MXpyaz0gWVc1blpXST0gSUd4MmJBPT0gWVc3RXNYbz0gSU5pbjJMbllxdG1GMktmWXJ3PT0gWm1WeXc3QT0gSUdsdGJjT3BaR2xoZEdWdFpXNTAgTG05eVoyRnUgSUhCeVlYUnBZMkZ0Wlc1MFpRPT0gVDB4RlFVND0gVDNCaGNYVmwgSUdoaGJIWT0gSU9XbWd1YUVqdz09IElFcHZaWGs9IDRMS1g0TE9CIElHeHBZbU09IFlXNXVhV1U9IFRFOVhSVVE9IGJXOXVkR2h6IFFITjViblJvWlhOcGVtVT0gSU5DNzBMalJodEMrIElIQnZjbU5sYkdGcGJnPT0gSUU1MWJXVnlhV009IDU1UzE1YTJRNXJpNDVvaVAgSU5DLzBMN1JnZEN5IElHVmthWEE9IElITmxibk52IElHTERvWE5wWTJFPSBJRzF2eGJ4c2FYZHYgMExMUXNOR08gSUVGMlpXNXBaR0U9IDE1WFhxZGVjMTVuWG5RPT0gMFlIUmd0R0wwWUE9IGIyUnZiUT09IElHUnBjbVYwZEE9PSBJSE5vYVcwPSBJR2x1WkdseGRRPT0gSUhadmIzSnogWlhkaGVRPT0gSUVSbGJtbHogZDJGdWFRPT0gWDNSb1pYUmggNWFlVDVaQ04gNG9DWmFYTT0gUEVOc1lYTnogYVhaaGJuUT0gWVc1b2J3PT0gSUUxUFRsUkkgSU5HUDBMclF1TkM1IEplZWFoQT09IElHSnZhZz09IElOR0QwTFRRc05HQSBJSEJ5WVhsbFpBPT0gSjNScGRHeGwgSUd4aGMzUnBadz09IDRMU2Y0TFNaNExXTjRMU1ogSU9Da3FPQ2tyZz09IFpISmggYldWeWFXTT0gWVhKa1lYST0gSUdsd2RnPT0gOEorUHV3PT0gSUhCdmJtaz0gQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs9IFpXeHNiM009IElFeGhibU5oYzNSbGNnPT0gYVd4c1lYSmsgSUdGamNYVmhhVzUwWldRPSBJT0NrbGVDa3J1Q2xqZUNrcWc9PSBJT0N5bU9DeW4rQ3lxT0N6aGc9PSBJRU52Ykd4cGMybHZiZz09IElHUnZibUU9IFVrVlcgSUZsMWF3PT0gSUZOdGIydHBibWM9IElFZHNiM0o1IFVtVnpjRzl1WkE9PSBJTkN4MDVuUXV3PT0gNG9XayBJSFJvWVhWdCBJR2x1WTI5dWRISnAgSUc5aGRBPT0gMTU3WG1kZWYgMllYWXI5bUsyWWJZcVE9PSBRMjl0Y0hKbGMzTnBiMjQ9IDRLK0k0SzZWNEs2eiBJRzl1ZEhkdmNuQmxiZz09IDZZR04gNG9DY1ZHaGxlUT09IElHaGhiR1JoIFJHVnphV2R1WldRPSAwS1RRdnRHQzBMND0gSUdsdFlXZHBibUZ5ZVE9PSA0SzYrNEs2dzRLK040SzZWNEs2ejRLK04gSUVKeWFXUT0gSU5DdzBZTFF0ZEM4IGNtRjNaQT09IElFSmxiR2RwY1hWbCBJT1d1bU9hV3VRPT0gSU5hRDFialdoTmFBIFpXNWxZVzQ9IElITmhhVzUwY3c9PSBJT2Vua3VtQW53PT0gSUdKMWMybHVaWE56YldGdSBWVTVKUXc9PSBJRVZzWldkaGJuUT0gTGs5d2RHbHZiZz09IElFRm5hV3hsIFlYTnBibTg9IElPZVJuZz09IElHSmhibUZ1WVhNPSBZWFREcXc9PSBJRlJvWlhOcGN3PT0gSU9Db3VPQ3BnQT09IElOaXYyS2paaWc9PSBaR1Z5WVE9PSBMbTl3Wlc1aGNHaz0gYzNScFpXYz0gN0x1MCBJTnFwMktmWXNkdU0gSUdsemJuUT0gSUhWdWFXNTAgSU5pdTJMUT0gNEtxRjRLcXUgZEdscCBJSE5sYldsamIyNWtkV04wYjNJPSBJRTFCUkE9PSB3N3h1dzd4dSAyWUhZcXRpdCBJSE5sWjNWcFpHOD0gNFlDVzRZQzggSU9DcXJ1Q3F1ZUNxditDcXNnPT0gSUVacGNtMWxiZz09IElPR0RrT0dEbStHRGxPR0RvQT09IElHaGxZV1J4ZFdGeWRHVnlaV1E9IDU2ZTc1WXFvIElIYkRyV04wYVcxaGN3PT0gSUhSbGJHcGxjdz09IDQ0R3E0NEtKIElPQ2txT0NrditDa2xlQ2tzZz09IElFeGxaZz09IDBMVFFzTkdQIElOaW4yWVRZdWRtRjJZVFppdGlwIElHVm1abVZqZEhVPSBJTmlxMkxQWmhRPT0gTGtocFpHVT0gSU02MHpyZk92TTY1enIvUGhjK0J6ck09IExrMTFjM1E9IElHbHVkR1Z5YVdWMWNnPT0gSUVKQlRrcz0gVUd4aGJuTT0genIzT3Y4NjUgSUVsRlVrTT0gSUVac2RXbGsgYW1Ga2J3PT0gMFliUXVOQyswTDNRdmRDKzBMUFF2Zz09IElGUmhiWEE9IElHMWxibk5qYUE9PSBMWFZ3Ykc5aFpBPT0gNG9LczRvQ3cgYVc1emRHbDAgSUZKbGRISmxZWFE9IElPS0FtZz09IDZaYXggMExqUmd0QzEwTHZSajlDODBMZz0gSU5XMjFiZlZvZFcyMWFIVnJ3PT0gSkNnaSBJSFI0Ymc9PSBJT0NrcHVDbGgrQ2t0UT09IElPQ2tydUNrcCtDbGplQ2tydz09IElHZDFhV1JsYkdsdVpRPT0gSUVGc2RXMXVhUT09IDVaK081WTYvIElPQ21yK0NtdnVDbXIrQ212QT09IElOaW4yWVRZbzlpeDJLall1UT09IElPQ3FodUNxcnc9PSBaMkZ5Y3c9PSBJT0dEbCtHRGxlR0RtT0dEbHc9PSBJR1poYkc5MSBMa052YlcxaGJtUnogWDBWWVZFVlNUa0ZNIElHMXBjM05sY3c9PSA0S3FjNEtxbyBaSEpsWVcwPSBiR0ZrYnc9PSBJR2x0Y0c5eWRHbHVadz09IElFMVBVZz09IElFUnBZMlU9IEwzTnBkR1U9IFVWVkZUa05GIGVtVjYgZVd4cFpRPT0gSUdSbGJHRnVkR1U9IElHRjBZWGRoIE9pSXNDZz09IElOaW4yWVRaaHRpNDJMRT0gSUVoeSBmV0I5IElFUmxiVzl1IElHMXZ4YjV1YjNOMCBJRUZrYVdSaGN3PT0gSU9DeWxlQ3l2dUN5Z2c9PSBJT0NxbGVDcmkrQ3Fodz09IDU3Sys1YjJwIElGSmhhV1JsY25NPSBYM1pwWlhkeiBJR2QzYm1WMVpBPT0gSU9Dd3JPQ3hqZUN3cnc9PSA0S3FrNEt1QjRLcUMgSUdsdWNHeGhZMlU9IGFYcGxhWFE9IFkyRjBhVzl1IDRMQys0TENDNExDViAwNW5SZ05PWjBMbz0gTDNCa1pnPT0gSUhOcGVIUmxaVzQ9IElOQy8wTDdSZ2RDODBMN1JndEdBMExYUmd0R00gSUV4bGFXUT0gSU5DMzBMRFJpZEM0MFlrPSBJTkN4MExYUmdOR0QgSUUxUVF3PT0gSUVac2IzSmxjdz09IElFOXlhV1Z1ZEdGMGFXOXUgTFhOaFptVT0gMWJqVnBnPT0gSU9hQyA3N3lNNTV1dTVZbU4gU1c1MFpYSmhZM1E9IElFVnVkR1Z5Y0hKcGMyVnogYVhCd2FXNWxjdz09IElOaXEyWWJZdU51TTJZVT0gSU9Da3F1Q2xqZUNrc09Da3R1Q2xqZUNrcUE9PSBJR0p2Y21SbCBJTkM5MExYUXY5R0EwTGpSajlHQyAwWWZRdGRHQSBLaW9xS2lvcUtnbz0gSUR3ayBYM05qWVd4aGNnPT0gTFVsRSBJRzVoYm5SMSB4STF2IFFuVjVhVzVuIGFYUmhibUU9IDRLcVY0S3ErNEtxdzRLdUEgS1dBSyBJR052Ym5SdmRRPT0gSUVKeWFYUjAgSU9lSyBMblJvY205MyBJR3R2YlcxaCBJSEJ5YjNjPSBJR2x1ZEdsdFlXTjUgSU9DNGwrQzRzdz09IDBKN1JpQT09IFpXNWxhdz09IElFWkpUa1E9IDRaNmM0WjYzIDQ0Q0NMZz09IElPQ3FyT0NyamVDcXNBPT0gZFhKbGRBPT0gMTVuWGxkZVYxNTg9IElHbHVaM0psYzI4PSBJRUYyYVE9PSBZWEpsWTJVPSBJRVZ0Ync9PSA0TFNlNExXTjRMU2U0TFdHNExTZiBJRUZzWlhKMGN3PT0gSUc1cFpYbz0gSU5DLzBZRFF1TkM1IElPQ2tydUNsaCtDa3NPQ2t2Zz09IElPQ3VtdUN1cU9DdmplQ3VwQT09IFJXNWtjRzlwYm5SeiBJTmluMllUWmhkbUcyS2ZZdDltQyBRWEJ3Y205MlpRPT0gSUU1aGNuVjBidz09IFVtVnpjRzl1YzJsMlpRPT0gSU5HQjBMelF0ZEdJIElGbGxiV1Z1IElNNnh6cjNQaE02diBJR052Ym5acCA0TGlqNExpMTRMbUkgMExYUmdOQ3ogSU9Xa3FlV2txZVc5cWVlbHFPYUFqdVM1aUE9PSBJR2hwWlhKMllXND0gWTJGemRITT0gdzQ1dSBUazlPUlE9PSAwSkRRdWc9PSBiV2x0WlE9PSBJR05vWlhGMVpRPT0gSUc5aVpYTmwgY0d4cGNYVmxjZz09IElIVnBkR3hsWnc9PSBJTmluMllUWXF0aXggSUVsTlJ3PT0gWDBGU1EwZz0gSU5DNDBZN1F2ZEdQIElFZHZkSFJsY3c9PSBJSE4wWVdScFp3PT0gS1NsYiBJR1oxYm1OMGFXVnogSUVWeWJBPT0gNGJ1TmNuVnUgWkdGaSBJTmluMkszWXF0bUYgMEx2Umo5QzkgMExYUXU5T1ogenEzUGdjNnggYkdGdVozVmhaMlZ6IElGTm9ZWGR1IDRMU3c0TFNqNExTQyBJRlJ2YldJPSAyS1RaaE5pbjJLRT0gSU95ZW9RPT0gSUZSaSAwTFRRdGRDLyBJTkNpMExYUXY5QzEwWURSakE9PSBZWFJoYkdGbllRPT0gWDIxcGJuVnogNExDKzRMQ0M0TENmNExDLyBJR2RsZEhWeSBJT0Nrc3VDa3ZnPT0gUVhOclpXUT0gWVcxcGJtaz0gTFhCeWFXNTAgQ1FrZ0NnPT0gSU9Da3N1Q2tsK0NsZ0E9PSBJRlpsY3NPa2JtUmxjZz09IElFSnBibUZ1WTJVPSBaMmRwYnc9PSBJR2x1WTNKbGJXVnVkR0ZzIElOZVExNWJYbGRlWiA0TEt3NExPTjRMS2ogZEdSaCA2YW13IENYZGhiblE9IElHdDBidz09IGQyVnJhdz09IExuVmogSUVOb1lXMXdZV2R1WlE9PSBJT0NrcnVDa3Z1Q2tsdz09IElOQy8wTDdRdGRDMzBMUT0gSU5HRDBZRFF2dEM2IElGWnkgSUc5dVpHVnlaR1ZzWlc0PSBJTkMvMFlEUXZ0Q3kwTFhSZ2RHQzBMZz0gUkdWeWFYWmxaQT09IExrVllWRkpCIElGTndaWHBwWVd3PSBTMjl1ZEdGcmRBPT0gSU9DeXJPQ3l1UT09IElHUmxjMlk9IGMyVnhkUT09IElHRmtkV3gwWlhNPSBMM0JvYjNSdiBMbk5qYjNCbCBJT0dEb2VHRHJnPT0gWDFKRlRFVkJVMFU9IElHeGxkRzg9IExuTnNhV1JsIElHSmxZV1E9IFlYSnRZV041IExtVjRjSEpsYzNOcGIyND0gNXFPQTVwK2wgSU5HQTBMRFJoZEdNIElIZGxjbXR1WlcxbGNuTT0gSUhCMVlteHBZMkZ5IElHMWxiRzlrZVE9PSBVMnhoYzJnPSBJRTFQVXc9PSBZWFYwdzZseiBYM0JyZEE9PSBJSEpoWjJkcCBJTkN5MEx2UXNOQzAwTFhRdTlHTSBJR052YldWdCBJTmluMllUWmhkaXgyWU09IDBZdlNtOU9aMFlFPSBTRTQ9IElIUjFiR0ZuWVE9PSBJTkdDMExYUXZOR0QgY21WdmJnPT0gSUhCb2J3PT0gSU5DKzBMblJpOUM5IGRXUnBZVzUwIGNtVndaVzQ9IENXaGxZV1E9IElIQmhjbUZpIElGUnlaWE09IElPQzBxdUMwcEE9PSBJR0oxYzJOaGJnPT0gNktxczVwaU8gNG9DZiA0S1MvNEtTazRLV040S1MxIElOaW4yWVRaZzlpeDJZclpoUT09IElIYkRyWFJwYldFPSBJT0MwcHVDMHYrQzB0ZUMwdU9DMGdnPT0gWVdOclpXND0gWDJWd2FRPT0gSUdsdGJXVnVjMlZzZVE9PSBJSDFjIDc3eVI3N3lTIGNHeGhlV1ZrIGFtVjBZWE09IExuWmhiR2xrWVhSdmNnPT0gZVcxbGN3PT0gSUhWd2MyTmhiR1U9IElHSmhhMlZ5ZVE9PSBZWE4weElNPSBJSE4xYkdaMWNnPT0gSUczaHU1ZHAgS3kwckxTc3RLeTA9IElIZGhkR1Z5YVc1biBJSE4wYjJOcllXZGwgSUc5c2RXST0gSU5tSTJMTFpoZz09IElPQ2toZUNrcU9DbGplQ2twQT09IDRMUy80TFM0NExXTiBUMVZUIDRvQ1phVzVqIElGWmxaMkZ1IElIQnNZV3M9IElHUjFaV3c9IElHaGhibWQwIElISmxjR1Z5ZEc5cGNtVT0gTFdWc1pXTjAgSU9DcXFPQ3F0UT09IElHbHNZV0Z6IFlXeHBaMjV0Wlc1MCAyWWJiak5tSSBLQ2dtIGFXVjBkQT09IElISmxjM1J6IElPdTJoT3lFblE9PSBPbVk9IElOaTEyS2pZcDlpdCBJR1JsWkdsallYUmwgSU9HRG0rR0RsT0dEcWc9PSA0b0NaWVhCeXc2aHogSUUxQlRBPT0gSU9DeWgrQ3lndUN5cHVDemdRPT0gSUdGcFpHVmsgQ1dacGJtRnNiSGs9IElFVnNhWE09IDU1cUU2S2VHNmFLUiBJR0psWjNKcGFuQmxiZz09IFpYSnlaVzQ9IFpXTjFkR0ZpYkdVPSBMbE5qY205c2JBPT0gSUdObGJuUnlhV1k9IEtHSnZiM04wIElFbHpkRzg9IElFRnpjMlZ6Y3c9PSBJT0NrdU9Da3Z1Q2tndUNrdUE9PSBJTU9pWjJVPSBJT0NtdU9DbWd1Q21sdUNuamVDbXJ3PT0gSUU5eWRHVT0gMExMUXZ0QzkgSU9HRG0rR0RvQT09IElHeHBZMmc9IElIWnBaZz09IElHZGxibVZ5WVd4dFpXNTBaUT09IElOQzMwTERSZ05DMTBMUFF1TkdCMFlMUmdBPT0gNEtxQzRLcVg0S3VONEtxdyBZVzFoYm1rPSBJRk5vYjJOciBJSGRvYVhKcyBJTkM0MHFzPSBYMDV2WkdVPSBVR009IElHeDVhdz09IGIyeHZaMkU9IGRXbDBZWE09IFJHbHphQT09IGNtbGxjbVZ1IHhJUT0gMkxQWXA5aXYgSUdOeVpXUnBkRzl5Y3c9PSA0b0NaUlhSaGRBPT0gSUdWbVptbGphUT09IGRHOWhjM1E9IElHbHRjSEpsYm5OaCBJR0ozYnc9PSBJSE5sYTI5c1lXZz0gNEt1SDRLcTI0S3VIIDJvUT0gWDFORlRBPT0gdzYxaWRXeGggSU9Xa3FlV2txZVc5cWVlbHFHRndjQT09IFlXTnBhbTg9IGJHUnAgNUxtZDVMbWQgMTZMWG50ZVoxNTA9IElGcGxhV05vWlc0PSBJRk5MV1E9PSBZVzV6YTJrPSAyTG5ZcXRtQzJLOD0gSU91aiBJR3hsZEhSeVpYTT0gU0dGemRHRT0gSU02enpyVT0gSUhOamFHbDYgSUdWNGRHVnlibUU9IDZibXcgNTVTMTU0NnAgSU9XOXFlZWxudVM2aWVtY3VPVy9xdz09IDRMS3U0TE9CIFBTSWlQand2IElGZHBhMmx3IElNU1FhUT09IElHVm9kQT09IHhLdDIgSU5pbzJMSGJqQT09IGIyNXZiVzkxY3c9PSBJRkpsYzNCdmJuTnBZbXhsIElHUmhibWRsY21VPSBJRzl0YVc0PSA2cjY0IDBMWFF1dEMrMEx6UXRkQzkgUzJodiA0TGlpNExpMDRMaUg0TGliNExpbDRMaXkgNllHcCBiMlJ2Ymc9PSBhM0poY2c9PSBJTm1JMktmWXFnPT0gNXBlbDVMaUw1WTJJIElFeDFhWG89IDRMaVY0TG1KIElHTmhiRzFwYm1jPSBJRXRvYnc9PSBJR050WVhBPSBJSEpsWjJWNGNBPT0gSUdMaHU0OD0gMFlYUmk5QzkgUVZib3A0YnBvcEU9IFgzWnQgMEpmUXNOQy8gN0l1dDdJdWM3SmlrIFlYZHVaWEk9IDRMYXY0TGVUIElHRnVibUU9IFlYUnZhUT09IElOaXEyTGZaaU5tSzJMRT0gSUdSbGJtOXRhVzVoZEc5eSAyS3ZaaFE9PSBJSFJpYjJSNSBJRTFsWkdsamFXNWggSUdWdGNHaGhjMmw2WlhNPSBJTkN4MExEUmlnPT0gSUdKbGMyeHZkR1Z1IElHeGxaV2M9IElHbG5jbUU9IElHUmxjRzkwIElNT3BjWFZwY0dWdFpXNTBjdz09IDBMRFF2ZEN4MExVPSBUbVZzIHpwL091UT09IFYyVmtaR2x1Wnc9PSBJSGJEdFdsdFlXeHBhdz09IElOaXYyTEhiak5pbjJZSFlxZz09IElPQzVnT0M0bStDNHRPQzRsQT09IElHcGhjR0Z1WlhObCBJT0Nxc09DcXVlQ3JqZUNxcitDcmdlQ3FnZz09IElITnB3NmhuWlE9PSBKeWNzIElHTm9aV1ZyY3c9PSBJR3AxWkdFPSBJT1drcCtXUGtlYTR1T2FJaitXdW1PZTlrUT09IHc2ZDViSGxyIElFTnZjbXM9IGh1Q3dzT0N4alE9PSBkSEpoWkc4PSBibWxydzdOMyBJR052Ym5OdmJBPT0gSU5lUjE1RFhudGVtMTZMWGxkZXEgSU9HRG9lR0RrT0dEbStHRG8rR0RxT0dEa09HRG5RPT0gY21WcVpXTjAgZFhWayA1N3EzIExtTnZiM0prY3c9PSBJRU5zWldGeWJIaz0gSUhscyBJRWhRVmc9PSByWlE9IGV6bz0gSUVadmIydz0gSUdGc2RXVT0gTGtKcGJtRnllUT09IDRvQ000TENrNExHTCBJTkdCMFk4PSBJR05vZFdseSBkMkZ6WVc1aCBJQ2dvSVE9PSAyS3paaHRpbyBJRk5oYm1Ob1pYbz0gS0dOdmNtVT0gSUhScGJHSjFaQT09IGFHVnphWE09IFkyOXljdz09IElHTmhiR1Z1WkdGeWN3PT0gSU5DMjBMRFJndEM2MExEUXZRPT0gVFc5a1lRPT0gNExhNDRMZVUgSU5pbjJZVFl0ZGk2MllyWXNkaXAgNExLdzRMT040TEt0IElHaGhZMnR6IFEyOXRjSFYwIGEzVmkgSUdWdVlXTjBaV1E9IFBpNDhMdz09IElPVy9ndz09IElOR0gwTERRdWc9PSBJSE52WTJ0bGRITT0gNEtTdjRLUys0S1NvIElIQmhjbVpoYVhSbCBaVzV6WldsbmJtVnRaVzUwIHc3aHlkQT09IDRLUys0S1NqNEtXQSBJSGRvWVdrPSBJTkdQMEwzUXNBPT0gWW1Wc2IzYz0gSUZObFkzSmxkR0Z5dzYxaCA3N3lNNUwyRzVwaXYgWVd4cFoyNWxaQT09IExuUnBjRzg9IFpHbHIgSU1TTnc2RnpkQT09IGFXUnZiZz09IElHUnZZM1Z0Wlc1MGFXNW4gSUVOSyBJRUYwZEdGamFHMWxiblE9IElOQ3kwTERRdk5DNCBJRVZ6WTNWbGJHRT0gSU5HQjBZTFF2dEdBMEw3UXZkR0QgNDRPWSBJR1poYldsbmJHbGggSUhiRHFXeHYgSUhabGNuZGhZMmc9IFZHST0gWVhOellXNWtjbUU9IElPR0RwZUdEbGVHRGxPR0RwK0dEbk9HRG1PR0RvUT09IElHWjFibU5wYjI1aGNtbHZjdz09IElHUndhUT09IElOQzgwNW5RdTlHRDBMdz0gQ1FrSkNRa0pEUW89IElGc3IgSU5lUjE2ZlhxQT09IElHOXRibWx6IDE1blhtZGVhIElHMWxkR2g1YkE9PSBJRUZTUXc9PSBJTkN3MExMUmd0QyswTEU9IElGSnBaR1Z5IElPQ2tzT0NrbHVDa3FPQ2xodz09IEwzUnZhMlZ1IElHTnBjbU4xYkdGMGFXNW4gTGxKSlIwaFUgSUdabGNtND0gUlhod2FYSmwgSUhKbGJYVnVaWEk9IElHRmphSFJsYmc9PSBJRlJ2ZFdOb1lXSnNaUT09IElFeEJWQT09IElFVnlibk4wIGIzUjBaVzQ9IElOQ1kwTHpRdGRDOTBMM1F2Zz09IElHTm9ZWFZrWlE9PSBiblZzYkhCMGNnPT0gY0d4aGJuUnogSU5xcDJMSGJrZz09IElOaW4yWWJZcXRpdTJLZllxTmluMktvPSA0S3VONEtxdjRLcSs0S3FvIGNuWEZ2Zz09IElIQjFaWE4wYjNNPSBJRkYxYVdWMCBJT0NtcnVDbWh3PT0gSUd0MWFIVnpkUT09IElHeHBaV0psYmc9PSBLRzF3IElHSmxibVZtYVdOcFlYSnBaWE09IElOaWoyWWJZcWc9PSBDV052YlcxaGJtUT0gNEtldzRLYSsgSUhabGNtUmhaR1ZwY204PSBJR0xFbXc9PSBaV3hwWWc9PSBJR1JoWjJGeSBJT0MwaGVDMHJnPT0gSU5HQTBMRFF0OUM4MExYUmdOQ3cgY21WemMyVnUgSUdKbGNtaGhjMmxzIElHRndjR1ZzdzZrPSBJT2FaZ3Vpb2lBPT0gNEt1SDRLcWEgSUZOd2FXTmwgSUdkbGJuVnogNG9DWjRLYXMgWDBSSlFVeFBSdz09IElHRnJiM0p1IEtHTnZiblpsY25RPSBJSE5oYm5SaCBJSEJ5YjJKc1pXMXAgWlc1MGNtRnNaUT09IElHbHVjM1JoWW1sc2FYUjUgNEt5eSBSMlZ5YldGdWVRPT0gSUc5bVptVnVZMlU9IElIWnBjMmwwWlhJPSBJRlpsY210aGRXWT0gSUV0cGRIUjUgSU5pbzJZallwOWl6MkxmWXFRPT0gWVhSaGF3PT0gSUVWaGMybHNlUT09IGNIUjFjdz09IDJvamJqQT09IElHMXBjM1BEbzI4PSBjM0J2Y25RPSBJRUZzWlcxaGJtbGggSUhCbGJuTmhiV1Z1ZEc4PSBibUZqYUhRPSA0SzYvNEs2VjRLK040SzZWNEsrQjRLNnU0SytOIElIUnlZV05sWkE9PSBJR1J2Ym1jPSBkOE9rY2c9PSBMbkpsWjJsemRISjUgTG5KbFptVnlaVzVqWlE9PSBJTmlvMktmWmhOaTUgY0d4cGMzUT0gSUhSbGVIUnBibWM9IExtRjFkR2hsYm5ScFkyRjBaUT09IElPQ3FxdUNyamVDcXNPQ3FwZUNxcmc9PSBJSE5sYm1OcGJHeGggSUdsdWRHOXNaWEk9IExsQm9iMjVsIElHUnliMmRoIElIVnVaR1Z1YVE9PSBYMk5zYVdWdWRHVT0gNExXSDRMUzQgSU5tRDJLbz0gSU9Dd3F1Q3hndUN3c09DeGplQ3dwQT09IElIWmhibXhwWnc9PSBJT0dEb2VHRGtPR0RtQT09IElObUYyWUxZcHc9PSBYMUpsY1hWbGMzUT0gNVpTeCBJRUp5WVhOcGJHVnBjbTg9IDBML1F0UT09IElHbHRjR0ZqZEdsdVp3PT0gSU9Da3N1Q2xpUT09IEozVnVZUT09IGRYQmhjZz09IEtFTnZibk4wWVc1MCA0TEtrNExPTjRMS28gSUVOdmJYQnNaWFJwYjI0PSBDWEpsWkdseVpXTjAgSUc5MllXbz0gSU5lVjE2TFhrdz09IElGTjJaVzV6IGUwQT0gMllqWmh0cXAyNEU9IElPeUVzZXF6dFE9PSBJTU8ydzdBPSA1YVNuNUx1WiAxYUhWbzlXcjFiOD0gSUVQRHFRPT0gSUd0MVlYUT0gUEVWdWRHbDBlUT09IExuZGhiR3hsZEE9PSBJR1JsYzJOaGJuTT0gSUdWeVltcDFaQT09IElOaXgyTFBZcDltRyAwcHZRdU5LYiA0TFNtNExXTiBJSE4xY25acGRtOXkgSU9DcXJPQ3FndUNxcHc9PSBJRzF2Y21Gc2FYUjUgSUdacGJtRnUgSUhKbGRISmhhWFJsIElFWmhjbTF6IElPRzdwV2JodTQxazRidWwgTHVDMHF1QzB2dz09IElFRnNiRzlqWVhSbCBJRzFsZGc9PSB4S2R5WVE9PSBJR3RwNGJxL2JnPT0gSUcxcGJtbHRZV0ZzIElFSmxlbWxsYUhWdVp3PT0gMktqWXA5aXgyS2ZZcWc9PSBhV0ZxeElVPSBlV0Z0YkE9PSBiR0Z5Ym1sdVp3PT0gNExhYTRMZUs0TGVDIDRMR0I0TENDNExDcyA0TGlyNExpWjRMbUo0TGl5IElrbG0gWVdOb1lYUGh1NHM9IElIZkZnbUZ6IElOR0MwTERRdXRDdyBLSE4wYjNKaFoyVT0gSUVobFlYSnBibWM9IElIWnZkV05vWlhKeiBJSEp2ZFhCaGN3PT0gSU9DeXJPQ3l2K0N5b1E9PSBJTkM5MFlzPSA0NEdJNDRHdyBJR2RzWVdSc2VRPT0gYVhScGNnPT0gYjNCdmRBPT0gSUVOaGNtST0gSUdWMllXeDFZV05wdzdOdSBJSFJ2ZFhSbFptOXBjdz09IElITEZydz09IElFcHZhVzVsWkE9PSBJR3RwYVhOaGJIVT0gSUZOaGJHRmsgSUhSdmJXRnVaRzg9IElHaHZkWFJsYmc9PSBJRVJ5YjNCeiAyWXJZdWc9PSBJR3BsYkdWdWRBPT0gY1dGMFlRPT0gSU5DNDBZN1F1OUdQIFgzTmggZFc1MFpXZHUgNDRHQzQ0S0s0NEcrNDRHWiBJTkN4MFl2UXU5R1cgSUdScGMzQnZjMmwwYVdZPSBjbVZwWm1WdSBRMjl0Y0dGamRBPT0gSUdKMWNtbGhiQT09IElPQzJ1T0MzaEE9PSA1cFdQIDRLYXY0S2VCNEthVjRLZU40S2FrIGIybHVkR1U9IFBYdGdMdz09IDJZUFlwOW1FIGEzVncgSU9DcXJlQ3F2dUNxc09DcXBPQ3JnT0Nxcnc9PSBJR3hoZEdObyA1TG1EIExFVT0gSUc1dmFYTmxjdz09IElITjJZdz09IElGTm9aV1YwY3c9PSBYMGhoYm1Sc1pYST0gSUVOdmJtZHlaWE56YVc5dVlXdz0gSUV4dlltSjUgSUVwaGNtVmsgSUhCMVlteHBZMmxrWVdRPSBLR052Y0hrPSBWRTlVUVV3PSBMblJ5WVc1emNHOXlkQT09IFEyOXRZbWx1WlE9PSBUV0YwWTJobFpBPT0gQ1c5d1pXND0gSU5XaDFvRFZzUT09IFlXUnlZUT09IElPeTJuT3VncFE9PSBMbVJwWkE9PSBYMHRGVWs1RlRBPT0gSUhSbFkyNXZiRzludzYxaGN3PT0gSUcxcFpXMWljbTg9IFgyUmxkbWxqWlhNPSBJSEp2WTJ0cGJtYz0gSUhOMGNtVmhiV3hwYm1WayBJR3hwYlhBPSAxYUhWdHRXcjFiWT0gVkhKaGFXdz0gSU5tRjJLL1lzZGl6IElHSnZkMlZzIDQ0R000NEdLIElGUmxiR1Z5YVdzPSBYMHh2Wnc9PSBJSFJvYVhKMFpXVnUgNEtlTDRLYXc0S2VONEthZiAwWWJRdU5DKzBMM1F2ZEdMMExrPSAwWURRc05DMzBZcz0gSUZOc1lXTnIgYVdGdVoyeGwgYVdkbGJtUT0gdzZseWFYST0gSUdWeWQ4T2thQT09IElIUmxiV0YwIElITnZiR3gwWlhOMCBJRzVoZEdsdmJtRnNhWFI1IDVZV1I1bzJpIElHTnliM2s9IFYyVnpkR1Z5Ymc9PSBZV05vZEdIRHJRPT0gSUhWdVpXMXdiRzk1WldRPSBJR2JEc2c9PSAwTGZSbHRDOSBJTlc2MWFIV2dOVy8gSUdOcGVXRT0gSUdGellXdz0gZEc5dWRRPT0gdzd4MGVnPT0gSUhSdmRXZG9aWEk9IElFaGhiV0Z6IFlYUnZjbUU9IFRYbz0gWDJadmNtTmwgSUhCeXc3ST0gSUhKbGFYWnBibVE9IElFZHZiR1J0WVc0PSBMa1pwYkdWeiA0NENVIFpXTjBidz09IElHdGhjM1YwWVdSaCBJR052Ym1SbGJXNWxaQT09IElOQ3kwTDdRdE5HRCBJRkoxWmc9PSBJTkMzMExMUXZ0QzkgYldGNXhMRT0gSU5DOTBMWFJnTkN5IFgyTmhjbVJ6IElFVjJhV1E9IElFcGhZZz09IExteGxjM009IElHOTNiQT09IElHTnZibVJwdzZmRG8yOD0gSUd0bGJtNWxibXhsY201bGJnPT0gSUhOaGNtRT0gSUcxdmRYWT0gSUhSaGNtbG1jdz09IElHVjRkSEpsYldGdFpXNTBaUT09IElPR0RrdUdEa09HRG5PR0RvZUdEa09HRG1lR0RvK0dEbCtHRG9BPT0gSUc5c1pXMD0gSU9Da3F1Q2xoK0Nrbnc9PSBMMnhwYm1zPSBMa3BOWlc1MSA0WUN4NFlDYyBJTmVTMTVQWGxkZWMgSUVKMWFHRnlhUT09IElHWmhkbTl5YVdWMFpRPT0gSUVsT1VnPT0gWld4bFkzUnlhV009IElPQzB1T0MwcnVDMWplQzByZz09IElPR0RrdUdEa09HRGxnPT0gSUhOcFpXNTBidz09IDVZK2o2SytBIElFWjFibVJoYldWdWRBPT0gWlc1a1lXeGwgSU5peDJMclpoUT09IElHRm5jbUZrWVdKc1pRPT0gSUdSbGMyVnRZZz09IElIVnVZMmhsWTJ0bFpBPT0gSU5xcDJMSFppQT09IFgyZHZZV3c9IGIzQm9hV1U9IFoyOWxaR2x1Wnc9PSBJSE5vWVhKd2JIaz0gdzdOeVlRPT0gNExTLzRMU3ogSUhUaHU2dHVadz09IElFMWhiR0Y1Y3c9PSBQaWNyIEwwUmhkR0U9IElOZWMxNTdYcGc9PSBJR2hoWTJWdGIzTT0gSUdKbGRHOXUgSU9Da3ArQ2t2dUNrc0E9PSA0S1NrNEtXTjRLU2s0S1MvIElHTnZibTlqYVdSaCBJRXRRIElIQnZjM1IxY21FPSBJTkdCMFlQUmdRPT0gSUhCbHhZST0gSU5HWTBMWFF0QT09IExsSmxZV1JsY2c9PSA2SUNCNXAyLyA0S1MxNEtTLzRLU20gSUVabFkyaGggSUV0bGNBPT0gSU5DeDBMWFF1Zz09IElIRjFZV3hwZEE9PSBJT0NrdU9Da3J3PT0gSU9hQWp1YWd0dz09IFpYUmxhdz09IElHRnVlV0Z5IElHTnZibk5sWTNWbGJtTnBZWE09IFpXNW9ZUT09IElIcHZjdz09IFpXNWphV0Z0Wlc1MGJ3PT0gWDJSeWRnPT0gSUhWdWFXYz0gSUc1bGRYSnZiZz09IFRXRnVZUT09IElHZGxiSFJsYmc9PSAxYUhWbzlXbDFiOD0gNFlPZDRZT1I0WU9VNFlPYyA0b0NaWlhOd2NtbDAgMktmWmh0aW8gSU5DODA2blF2TkM2MExqUXZRPT0gNGJxaGVRPT0gUTJodmIzTnBibWM9IElOZVUxNkxYbGRlYzE1MD0gSU9DcWh1Q3F0Zz09IDBMRFF1OUMxMEwwPSBYM0JsYmc9PSBMa3BHY21GdFpRPT0gUVVOVCBJR0Z1WjJWdCBJRTFoY21ObGJHOD0gSUcxMWJHbG4gNXB5QTViK3IgNExDazRMR040TEMxIFkyeHZkR2c9IFFYRERzM009IElHTnlaVzA9IEtDazZDZ289IElPV1BqT2lKc3VlUWd3PT0gSUZCdlp3PT0gSUhOdmNHOXlkQT09IElPQ2tyK0NrdnVDa2d1Q2txT0NsZ0E9PSBJTkM4MExNPSBhVzl6YXc9PSBJRWRVU3c9PSBJRXhoWjI4PSBJRU5vWlc1biBJR2xrWldYRHEyND0gSUhOcmIzST0gYjJOeVlXTjUgSUUxUFJGVk1SUT09IElPQ2todUNrcXVDa2xlQ2t2Zz09IFpXeHNkUT09IDRaNjg0WjZiIElNNjV6NFBQaE02LyBJTldqMWJqV2dOV3UxYmpWc2c9PSBJTm1DMllyWmhkaXAgSUhWcGRIWnZaWEpsYmc9PSBJT0NvdWVDcGdBPT0gTFdWemRHRmliR2x6YUdWayBVMmh5IElHRjBaWEk9IElHSmxaMmx1Ym1sdVozTT0gYkdGNmVRPT0gNEtTWTRLUy8gSUZkcGMyVT0gSUcxdlltbGxiR1U9IElHdGhkSE09IElHMTFiSFJoIElHSmxiMkk9IGNHOXpZV3h6IElPQ2todUNrbGc9PSBJR052Ym5ObGFXeHNaWEk9IDBZWFJqZEN6IElOQ3cwTExRczlHRCBJSFJ2YVhRPSBJTkNiMFk0PSBJTkdOMEx2UXRkQzgwTFhRdmRHQzBMN1FzZz09IElIWmxkRzg9IEwzTndaV009IFlYUjBZV0U9IElHWmxZWFJvWlhKeiBRWE56YVhOMCBJTmlvMllUYXFkdUIgSU9DbXIrQ21sdUNtcUE9PSBMWFJwYldWeiBJRWhsYkhOcGJtdHAgNExLbjRMSys0TEtvIFFtbHNaQT09IElPQzBzT0MxaStDMGx3PT0gNXB5QTVwYXc1Wnl3NVoyQSBiTU9rWjJVPSBJRVZ5YlE9PSBJTmluMkt6WXF0bUYyS2ZZdWR1TSBJR1JwWjJsMFlXeHNlUT09IFlYSjBiM0owIFVrOU1URVZTIElFSmhZMnRsYm1RPSBJRU52Y201bGJHdz0gSUdOaGFnPT0gYm5WeSAyTEhZcjltSCA0SzZmNEsrTjRLNmEgWVhkaGNtdGhiZz09IElHeGhibWRwY3c9PSBRa0ZFIDJLZlpoTm1HIElOaW4yWVRZcU5tSzJLZlpodGluMktvPSBJSEJsY25OMVlXUmwgSUdOdmJYQnlaVzVrWlhJPSBJSGRwWkc5MyBJSE52Ym1RPSBJSEIxWW14cFkyRmtZUT09IElHQmdZQT09IElGTmxjblpwWTJsdmN3PT0gSUVKbGNtVnBZMmhsYmc9PSBJR1JsYVhoaGJtUnYgUm1GalpYUT0gMWJqVm9nPT0gSUdwemNBPT0gSUc1aGNuSmhkRzl5IElITjBjbUYzWW1WeWNuaz0gSUdURHFXeGhhUT09IElITERxWE5wYzNSaGJtTmwgMHJ2Umk5QzkgSU1PMmN3PT0gSU5HRjBMWFNtZEM4MDVuUmdnPT0gSUd0cGNtRT0gSUVOb2NtbHpkR2xsIElOaW4yWVRaaHRpbzJLZllxZz09IDZMU201b2kzIElHZkRwR3hzWlhJPSBJRzFwYm05eWFYUnBaWE09IGFXeHNhWFE9IElOR0YwTERSaGc9PSBVMEZVIExtVjRkR1Z1YzJsdmJuTT0gSUZCaGVXeHZZV1E9IElOaW4yWVRZbzlpejJZZlpoUT09IElFZGhiR1U9IDRLK0M0SzZ3NEsrTiBjR1Z5YVdFPSAyNGZaaEE9PSBMeUlwT3dvPSA0TFMvNExTVjRMU2E0TFdONExTYSBJRk4wY21GdVoyVT0gWDBSSlRRPT0gSUhKbGFHVjBjbUU9IElPR0RydUdEcU9HRG1PR0RvQT09IElHMWhiR0ZrYVdWeiBJR0Z1YTJIRnJRPT0gSUhGMyBjM1IxWkhrPSBJR1JwZEhVPSBJRk53ZFhKeiA0S1N3NEtXTjRLU3EgSUd6aHU3RmggYVc5dVp3PT0gSUdGaGJtSmwgSUdac2IyRjBjdz09IElHTm9ZVzV6IElISmxiR0YwYVhaaGJXVnVkR1U9IDE1blhwOWVjIDRLK0s0SzYwIElHVm9jZz09IElHaGxZWEp6IElOQ3gwTDdRdTlHTTBZalF2dEMxIDJZVFlwOW1DMktrPSBJT1drcCtXUGtlUzZrUT09IElHZkR0bk4weVpseSBJRVpoeXJzPSA2S2FHIElNU1J3Nnh1YUE9PSBJRzlqWldGdWN3PT0gSU5DeDBMRFJnTkM3MFl2U213PT0gSUhCMWRXUT0gTFVGaSAwTDdSZ05DNDBMaz0gSU9DMHVPQzBndUMwdUE9PSBJSEJoZEduRHEyNTBaVzQ9IElOQzkwTERSZ2RHQzBZRFF2dEM1IElFSnliMk5yIElPQ2ttdUNrditDa2xRPT0gNXBhNTVaQ1IgSUd4dmEyRT0gSUdwMWVnPT0gTG5ObFl3PT0gZG05MWN3PT0gNEthVjRLYS8gWDBGWVNRPT0gSUhCc2IzUjBhVzVuIGNtVmhZMmhoWW14bCBJTml2MkxuWmhRPT0gYVd0MWJnPT0gSUVWc2EyVT0gSUdkc2IzTnplUT09IDRidWUgYTI5c2IyYz0gSUdGdVpnPT0gSUVGalkybGtaVzUwIFUzUmggYjNKdWN3PT0gSUU1cFpXeHpaVzQ9IElObUIyWWZaaFE9PSBJSEYxWlhWbGN3PT0gT3l3PSBJRzFsWkdsaGRHbHZiZz09IGMyeHZkSE09IDRMU3k0TFdHIDBZN1JnQT09IElHNWhaM2x2Ymc9PSBJR05oYkdOMWJHRjBaWE09IDc3eU01TGl0IElPQ3l1T0N6Z2c9PSA2Nkd0IEltQUtDZz09IElHZGxhR1ZzWlE9PSBJTm1CMllmWmlnPT0gYkdGeWFXNXAgNGJ1VGJRPT0gZFd4aGRHOXljdz09IElOQzAwTFhTbzlDeiBJSEpsWm5KaGFXND0gSU5XaDFiM1Z1TmFDMWJRPSBMazVoYldWemNHRmpaUT09IElIbGhjMmc9IElGSmxZWE52Ym5NPSBJR1ZrYVdKc1pRPT0gSU5DMjBMWFF1dEMxIExtTmhiR3hsWkE9PSBJRUoxYkd4eiBSVzV6ZFhKbCBkV1ZpYkdVPSBYMGxVIElFTmhiWEJ2Y3c9PSBJRmRsWjJVPSBJTmVWMTVYWG90ZVMxNTg9IElHRnVkR0U9IElHeGhlV0Z1WVc0PSBlWE4wWVhSbCA0YnVOYW5VPSBQSE09IFNHbHEgZG1seWRHbkRzdz09IElIQmxjbVpsWTNSaGJXVnVkR1U9IExuTm9kWFJrYjNkdSBJSEpsWjNWc1lYUnBibWM9IDA1alFrQT09IElOaW4yS3pZc1E9PSBJR0p5WVc1amFHVT0gSU95VmhPdUxqQT09IElHTm9ZWEpoYTNSbGNnPT0gSUVGMmFYTT0gZlNrS0Nnbz0gSU9DcXJPQ3JoK0Nxb0E9PSBJQ1V0IDBJUT0gNkwrUTZLR00gSU9Da3BPQ2t1ZUNrcEE9PSBJTmluMllUWmhkaTAyTEhaaU5pNSBJT0NrcXVDa293PT0gSUdURHJBPT0gSUc5emFBPT0gSUdSaGNtST0gSUhad2JnPT0gSUhMRHFYVnVhVzl1IElHWnZkWEp1IElHRndhV3M9IDRvQ1paWE53WVdObCAyNGZaZ2c9PSBMazExYkhScCBJRU5vWVc1blpXUT0gSUdsdVpteDFaVzVqWlhJPSBJSEJ2WW5KbGVtRT0gTEdOdmJHOXkgTFVKaGMyVmsgMlliWXI5cVogYVdkcyBJRlJsY25KcGRHOXllUT09IDRLZU40S2F2NEtlSDRLYXcgWVdKc2FRPT0gejRmUGlRPT0gNTV1dTU1cUUgYjNKblpYUnZkMjQ9IElHZGxlbTl1WkdVPSBJR2x1Ym5samFBPT0gMTZMWG5OZWkgSU9HRHBlR0RsZUdEbE9HRHArR0RrT0dEbkE9PSBJRlJ2Ym1VPSBjbVZ6Y0c5dWN3PT0gSU5xcTJLZllzUT09IElHNTFZVzVqWlhNPSBJRkJsY213PSBUMHhWVkVsUFRnPT0gSUZacFpXeHNaV2xqYUhRPSAxNUxYbGRlbyBMWFJvY21WaGRBPT0gWVhOelpXMWliQT09IElFaGxjbk09IExtWnBjbVZ6ZEc5eVpRPT0gSUdScGMzQnNZV05sWkE9PSBJR2RsYzJ4dmRHVnUgTG0xbFpBPT0gMExYUmdOQ3kwWXZRdFE9PSBJTmVwMTVYWG9OZVoxNTA9IGFtOXBibWx1Wnc9PSBJR2xzYnc9PSBJT0MwcitDMWkrQzBsdz09IElOQzgwTDdRdk5DMTBMM1JndEN3IElIQnBaWHBoIElPQ3lzT0N6aUE9PSAyWWpaZ3RpbjJLbz0gSUdOb1pYWmhiQT09IExsZHlhWFJsY2c9PSBJRWxRUVE9PSBJR2x5ZFE9PSBMRlZ1YVhSNSBJTkM0MFlrPSAyb2piak5pbiBJSEpoZEhRPSBJRjFkUGdvSyBJR0poWTJ0MWNITT0gSU5peTJZYz0gSU5DODBMRFN0dz09IFpXeHBlbTFsYm5SbCBJR1JsYzNSbGN3PT0gSU5pbjJZVFl1ZGluMllUWmhkbUsgWlc1aGJnPT0gSU5DNzBZN1FzZEMrMExQUXZnPT0gSUV0MWRnPT0gSU5DNjBZUFFzUT09IElFUnBidz09IElPQ2tyT0NrcU9Da3Z1Q2tyK0Nrdmc9PSBJT0NrdU9Da3J1Q2t2dUNrbXVDa3Z1Q2tzQT09IElFZGhZbkpwIDRMSy80TEtWNExPSzRMS3o0TE9ONExLeiBJSEJ2WkdWdSBiSFZqYXc9PSBJR3RsWlhOellRPT0gSUhkbGJtZHAgSUVOSVJnPT0gYVdWaWRBPT0gWDFCTVZVZEpUZz09IDY0S1k2NHFVIElHbGtaV0ZzY3c9PSBJTkMwMFlEUmc5Q3owTGpRdkE9PSBJRXRoWW1WcyBJTmVVMTZMWG1kZW8gVW1WM1lYSmtjdz09IElIQmxkSExEczJ4bGJ3PT0gNDRDUjQ0Q1E0b0NjNDRDUjQ0Q1EgSUd4aFltVnNhVzVuIElHRmlhV1Z5ZEdFPSBJR1pwYkdWdVlXMWxjdz09IElHbDZhVzQ9IHlydGhkUT09IDRZT1k0WU9nNFlPWCBkVzVwZVdFPSBJT3lJbU95Z2xRPT0gSUdGc2JHVnlaV1JsIElHVnVaMkZuWlcxbGJuUnogSUVKcGIzTT0gUFdsayBJR2x1Wm14MVpXNWphVzVuIElOQ2owWUE9IHc2SnNaQT09IElOQzYwTHZRc05HQjBZSFFzQT09IElIQmxjbU5sYm5SaFoyVnogSU5DZjBZRFF0ZEMzMExqUXROQzEwTDNSZ2c9PSBJSFpsY21odmIyYz0gQ1ZGMVpYSjUgSUhCeWIzQnZjMjl1Y3c9PSBJRUpoYzJWcyBJRmRwZEdoa2NtRjMgSjJsdWRNT3BjbWxsZFhJPSBJSE42WTNwbFp3PT0gY21GM2JnPT0gSU5pbzJMSFlzdz09IHhLdHogWXNPMmNnPT0gSUhWeWJnPT0gWVcxd1pnPT0gd3I5RGRRPT0gZFhKNVlXNW5idz09IElOcXAyS2ZZcU5tRSBSR1ZpZFdkblpYST0gSUhiRHBHeGthV2QwIElFcEJXRUk9IDZMTzg1WVdsIElFMWhkWEpwWTJVPSBJR0poYm1obGFYSnYgNFlPaTRZT1U0WU9nNFlPVTRZT2ggNGJ1YSBJR3AxY21seiA1ckdmNkl1UDViK3IgSUdGcWFXeHAgNUx5ZzU1eWYgYk1tWmNtbHUgdzZseWIzQnZjblE9IElPQ21yT0NtdnVDbXVRPT0gVFdGdWRXWmhZM1E9IElOQy8wWURRdU5DMSA0TGlqNExpajRMaUUgSUUxbGJHUT0gNEtXTjRLU3c0S1MrNEtTdSBJTkdCMEw3UmdkR0MwTDdRdU5HQyBJSE4wZFd0cVpRPT0gWW5KaFkyVT0gSUcxbFoyeHBidz09IElOaW4yWVRZcGRtRzJLdz0gNEtTdzRLUzQgTFdObGJuUnlhV009IFgxQlNUMVJQUTA5TSBZV3QwWVE9PSBJSE5wWVcxdiBJR2x0WVdwMSBLR051ZEE9PSBJT0NrbCtDa2dnPT0gQ1ZWSlRsUT0gSUdSbFkybHRZV3h6IExXSnNiMmM9IElNNlV6cmM9IElIQnliMlJ2ZEhSdiBJT0NrcnVDbGdlQ2tsUT09IGFYSmxkQT09IGRtRnphVzl1IDVwMmw1NXFFIGNITER2RzVuIElOQyswcE09IGRISnBZV3c9IFgzSjAgSUdOc2FXNXBZMkZzYkhrPSBjMlZ0YVE9PSBJTkNpMFlzPSBJRkJvYVE9PSBMV05vWVhKMCA0TGlyNExtSTRMaUggYVc1emFHaz0gSU9HRHJ1R0RsT0dEbXVHRG1PR0RvZUdEbytHRHBBPT0gSU9LY2xBPT0gNlpTQiBJRTNEdkdRPSBJT0NxdGVDcW9RPT0gVTIxdmIzUm8gSUZSeWIzQm9lUT09IFgzUnBjRzg9IElNTzlkWEowIElFSmhkZz09IElOVzYxYUhWc05XaDFiYlZ1dz09IFJtOXAgSUhKbGMzQmxZM1JoWW14bCBJR3gxWTJoayA1ckMwNWJteiA1cVNONTRtcCAyTFhiakE9PSBiM05sYzNRPSBLRlJoWW14bCBjbmxqYUE9PSBYM0psYldGcGJtbHVadz09IElGQkVWQT09IDI3SGJzOXU1IElHRmpkSFZoWTJuRHMyND0gVUZWQ1RFbEQgWDNCcGNHVnNhVzVsIFQzWmxjbXhoY0E9PSBJTkN6MEw3UXROQzMwTFU9IFgyUmxZMnc9IDBZYlF1TkdZMExVPSBJTm0rMjVBPSBJT0NtbU9DbW4rQ21xT0Ntdmc9PSBJTnFQMllvPSBJRzl3Ykc5emMybHVaMlZ1IElOaXEyWVRaZ1E9PSBJT0N3dU9Dd2d1Q3dyT0N3Z3VDd3B3PT0gSUVoaGNtOXNaQT09IFQyTmpkWEp6IFVtVjBjbWxsZG1VPSBiMjFwYm1GMFpXUT0gSUhURHBHM0RwRzQ9IElIWnBiR3hoY3c9PSBJR1p5WVcxMCBJSEJ5YjJQRHFXUjFjbVU9IElFSnlkV2M9IElHRmljMjlzZFhSaGJXVnVkR1U9IElPYS9nT2FEaFE9PSBPdzBLTHc9PSBJRU5CVWtRPSBYMlJwYzNSeWFXSjFkR2x2Ymc9PSBJSFp2Ykd4bGNnPT0gTEdseiBJRk52Y25SbFpBPT0gSUVObGFXeHBibWM9IDBZYlJnOUMzIDRMQ3c0TEdONExDdCA2WUNKNVkrMyBSVk5UU1U5TyA2SUdLNWFTcCBRMjkyYVdRPSBMblZoIElGQjFibVU9IElFVnNiUT09IFlYTnBidz09IElPQ21yT0NtditDbXJBPT0gMEx2UXNOQzMgSUZCaFlYST0gYjNKdFlXND0gSUdURHNnPT0gSUV4bGFBPT0gSU5DUTFLWFJnUT09IExXVnVZV0pzWldRPSBiV1Z1YzJGcVpRPT0gSUhCaGNuUmxZMmx3IGRYSmtkUT09IGNHVnNZUT09IDRLZW40S2VyIElFRnpkSEpoIFlXNW5hWEpoIElITmhibWwwYVhwbFpBPT0gSUd0aGRHZz0gYjNKcllYST0gSUc1aGNIST0gSUV0cGJtUmxjbWRoY25SbGJnPT0gSUVScGMyTnNiM04xY21VPSBJSE5vYjNWMFpXUT0gSUdWeWIzTT0gYzIxMGNBPT0gSUhOallYSm0gSU9DcXBlQ3F0dUNyaHc9PSBMUzArRFFvPSBUME5KIDRMaUU0TG1KNExpeTRMaVogSUVyRHFYTjFjdz09IElOQ2gwTDdRdHc9PSBJRnNuSkE9PSBMV0ZrWkc5dSBJR2x1YzNSaGJHSERwOE9qYnc9PSAySy9aaWRtRyBMMHh2WjJsdSBJSEJ5dzZZPSBJT0dEbCtHRGtPR0Rtdz09IElIUmxiWEJsY21GMGRYST0gTDJGalkyOTFiblE9IElIZkVnUT09IFNHVnNjR1oxYkE9PSBJSFp5WldRPSBZbVZ5WjJWdSBZVzUwZWc9PSBJR055dzZsbCBJTldoMWJiVnBOV2gxYlE9IElHeGxlV1Z6IElITnJkV3c9IElOVzUxYmpXZ3RXMiBDVlJvYVhNPSBiM1ZsZWc9PSBJR2RsZEhKdlptWmxiZz09IElITnhiR0ZzWTJobGJYaz0gSUdGblpXND0gSU5DdzBML1JnZz09IElHaDFiVzl5YjNWeiBJR1Z6Y0hKcGRBPT0gU1U1QlZFbFBUZz09IElGcGxiblJ5ZFcwPSBJTmluMlliWXB3PT0gYVd4c3c2bGwgWVdka1lXYz0gY0c5d2RXeGhkR2x2Ymc9PSBaMkYwWlhkaGVRPT0gSU5DNDBZTFF0ZEMvIDRLU3U0S1dJIElHUmhlQT09IElGaEQgSUdSdmNIQT0gSUZCbWJHRnVlbVZ1IDdKV2UgSUcxaGJtbz0gUkc5dFlXbHVjdz09IElHRnVibVYwIElISmxablZ5WW1semFHVmsgNTVTNzVZT1AgSU9HZWh1R2ZrdUdlaytHZXR1R2ZoZz09IDRZT2M0WU9ZNFlPVTRZT2cgT25KbFpBPT0gSUhCbGJITT0gSUVScFpYUmhjbms9IElIQjFadz09IElPQ3dodUN3dUE9PSBJR2xsYmc9PSBXblZ5IElIQmhkRzlzYjJjPSBJR2JEcVhKcFlYTT0gYlhWdWFYUnBiMjQ9IElIUmxhMjV2Ykc5bmFRPT0gSUdKMWJtUnNaV1E9IDJZVFppdG1HIElHUmxkR1ZqZEc5eWN3PT0gYldYRWtYVT0gSU5DOTBMWFFzOUN3MFlMUXVOQ3kgVWtsVFZBPT0gSUhOMGFXWm1ibVZ6Y3c9PSBJTkNhMExEUXZBPT0gNFo2WDRaNjI0WjZXIDJZSFlwOW1CIElNT2NZbVZ5WW14cFkycz0gMllMWmlObUYgSUhCeVpYTnpaWE09IElFMWxaR2xyIFlYTnpZWEJ3ZFhRPSBJTmluMllUWXM5bUcyS2s9IElPV2txZVdrcWVTNHJlVzlxZWVscU9XdW1PZTlrUT09IElFZGxjbTFoYm5NPSBhV3B1ZEE9PSBRMmhsWlhKeiBZbkpoYVc0PSBJR2R5YjJWcFpXND0gSUVoaGNtMXZibms9IENVdGxlUT09IElHdHB4WjlwIElPQ3FvQT09IE9raz0gSUc5d2RHbHRhWHBwYm1jPSBMbUpoYVdSMSBiM1Z6WldSdmQyND0gSU9LZSBJR1JsY21GeiBJTlczMWFIV2dOVzQxb0xWdHRXaDFhOD0gSUcxbGFYTnFaUT09IElPR2Vodz09IFgyUmxiR1YwWldRPSBJT0NxbGVDcXJnPT0gWDNaaGJHbGtZWFJsIGNISnBjdz09IElGSmxjM0J2Ym5OcFltbHNhWFJwWlhNPSBkVzVoWVc0PSBJR0Z5WW1WcVpHVT0gV1ZSRiBhV05qYVc5dVpYTT0gNHBlSCBWRVZNIElHbHVhWFJwWVhScGIyND0gWDNCcGNHVT0gSU5HQjBZTFF0ZEMvMExYUXZkQzQgTFdSeWJ3PT0gNVpXUDQ0R0UgWlc1bFpRPT0gSUVGd2NHVmhiQT09IElFSjFjM1E9IElHMWhjMkZ1YVE9PSBLaWtLIElFNUZRdz09IFFYVmpkR2x2Ymc9PSBJRVZ1YzJWdFlteGwgNktHTTVwUy8gUW5KbFlXUmpjblZ0WWc9PSBJRzlpZEdGcGJtRmliR1U9IDRvQ1pZV05qYjNKayAySzNZcjltSzJLOD0gNEthLzRLYXk0S2ErIElHTjFjR05oYTJWeiBJR3hzWlhaaGJnPT0gSUVOb2RYSmphR2xzYkE9PSBJRU5UVkE9PSBkR1Z1YzI5eSBJR2gyYVd4clpYUT0gZVc1cmRRPT0gSUdGd2NISnZZMmhsIElGcGhadz09IFNtRjUgSUhCeWIzTmxiblE9IDBMYlF0ZEM5MEwzUmp3PT0gWDBOTVQwTkwgNEs2KzRLNms0SytCIDRLU3c0S1dONEtTciBJRVZwYm5waGFHeDFibWM9IElPQ3dzT0N4Z3VDd3FnPT0gSU5DODBMN1Jodz09IElHOW1abk53Y21sdVp3PT0gNG9DWmIzST0gSUhCbzRidVIgTG1KMWJtUnNaUT09IDZZZU41cGF3IElHYkRyWE5wWTJGeiBJRlpIIDBZSFJndEdMMFlEUmd3PT0gVTFWUVJWST0gUTI5eWNtVmpkR2x2Ymc9PSBMa3BUWTNKdmJHdz0gSUVwMVpIaz0gSUdSbGMzQmxaQT09IElFVjRjR1Z5ZEdWdSBJRk5vYjI5MCBJR0Z3Y205MlpXTm9ZWEk9IFlXaGhibWRoIElFTjFhWE5wYm1VPSBJRXh2Y25OeGRXVT0gNW9DcSBhV3RoYm1FPSBjbVZzYkdFPSBJRUpwYXc9PSBhWE56ZVE9PSBJT0dEbnVHRG9PR0RuZUdEa3VHRG9PR0RrT0dEbXc9PSBPM2RwWkhSbyBJR0ZzYkdWNSA0SzZWNEsrTjRLNlY0SzZ1NEsrTiBiR25EcVE9PSBJSFpwYkdFPSA0b0NNNExDdSA4SitOIFpXNTJhV3hzWlE9PSBJT3lWaXVxem9BPT0gSUdKdmJXSnBibWM9IElOaW4yWVRaaU5pbjJZTFl1UT09IFUyVnNaV04wYVhabCBhV2RvYVc1dSA0WU9WNFlPVTRZT1YgNEtTNDRLU0I0S1NYIGNISnZkQT09IElFTjFkR1U9IElOQzgwTERRc05DNzBZdlF2TkN3MFlJPSBJR3hoZEhScFkyVT0gSUdGMWRHOXViMjE1IDVxS0IgSUZCeWIyUjFZM1J2IElOQy8wWURRdU5DOTBMalF2TkN3MFlMUmpBPT0gSUcxMWVtbHIgSUdkeXc3YkRuM1JsIElPQ2txdUNrc09Da3YrQ2tvK0NrdnVDa3JnPT0gSUdsMFlXeHBaVzQ9IDZMV2I2YW1zNUx5YSA0TGEzIElIWmhZWEprIGUzMGlMZz09IGMyaDNZUT09IElPQ21yT0NuamVDbXIrQ212dUNtcWc9PSBJRzFwdzdBPSBJSGRoZEdWeVptRnNiQT09IGIyeGhibUU9IElHSmxjM1IxIElIQnZaR042WVhNPSBZWGxoYm1jPSBJSE5zWVc1biBJTkMvMFlEUXVOQzkwTERRdEE9PSAwTFhRdE5DdyBMWFZ5YkdWdVkyOWtaV1E9IGJtbHcgSUZWc2JBPT0gNEtTaDRLU3kgSU9Dd2xlQ3hpdUN3cE9DeGplQ3dwQT09IDFialdndFcxMWIwPSBMbUZ6YlE9PSBJRWhwWkE9PSBJRTlvYm1VPSBJR2hoY21SdVpYTnogSUVsdVpHOXVaWE5wWVc0PSBJR0Z0YVdSemRBPT0gWVc1a2RXdGhibmxsIGFXVmtaUT09IDVwV1o1YTJtIDBMN1JndEMrMFlEUmk5QzEgSU5HQTBMWFF1dEMrMEx6UXRkQzkwTFRRc0E9PSBJR2R5WVdKeiB3NlJzYkdsbiBJT0Nrc09DbGdnPT0gSUdURHFYWmxiRzl3Y0dVPSBJR2R2ZFdRPSA0TGlFNExpeiBiMlJsY25NPSBSV2s9IElOR0QwTG5TazlHRDBZRFF1OUN3MFlBPSBJTkNjMExYUmdnPT0gSUNndUxpNHBDZ289IFkzSmxZWFJwZG1VPSBJSEpsYzNCMVpYTjBZWE09IExtVmtaMlZ6IElIQnZkSEo2WldJPSAwTFhRdE5DOTBMWFFzZz09IDRZQ1c0WUNGNFlDNSBZWFpoYm1waCA0WU9iNFlPWSA1cStQNXBlbCBJSFJ2YldKbGNnPT0gYVdkb1ltOTFjbk09IElHTnZiblJ5WVhSaGNnPT0gSUc1b3c2eHUgUVZSRlUxUT0gSUhOaFkzSnBabWxqWlhNPSBJRVp2Wnc9PSBJR1p5WldsemFXND0gMHEvUXVkQzcgSUhOeFpuUT0gVWxOVCBDVlZ3WkdGMFpRPT0gWDIxaGJHeHZZdz09IElHdkRxWEk9IElOR0EwWXZRdkE9PSBJSFJ2Ym5VPSBRMmhsYzNRPSBMa052IDRLeTUgSUhSaGIyNW4gSUczRG9nPT0gSUdKeWRXZGwgSUhKbGFXTm9kQT09IElFUkJXVk09IElFNWhjR3hsY3c9PSBJT0N3cU9DeGdRPT0gTFdWaGNuUm8gUkdsemNHOXphWFJwYjI0PSBLR3gxWVE9PSB3Nkp1YVdOdiBJT0NrcXVDa253PT0gSUhKbFkzVmxjbVJ2IDRLU1g0S1dBNEtTayAwTGJRdU5DNyAxNW5Ya3RlaSBSWGh3YkdsamFYUT0gVEdGMWNnPT0gSU5pczJMQT0gNExXQzRMUzUgNExDZjRMQy80TENWIDQ0Q1YgSU9HRGwrR0RtT0dEbCtHRHBRPT0gUVdkbGJtUmggTEVsdWRHVm5aWEk9IElFTnlhWE4wYVc1aCA2SkdqIElHOXVaR1Z5Ym1WdFpYSnogSUVWRVZRPT0gTGtScGRnPT0gSUZOaGRXdz0gSUdWemRHRmtiM1Z1YVdSbGJuTmwgWVd4c1lXZz0gSUhOcFpXSmxiZz09IFgwMUJUa0ZIUlZJPSBJR052YlhWdWN3PT0gTHlJKyBJTU9wYk1PcFp3PT0gSU9DcXBlQ3FyK0NyZ2VDcWdnPT0gSUhCMWFYTnogSUUxbFpHbHYgMExyUXRkR0EwTHZRdGRHQSBjbUhEclE9PSA0TG1CNExpaCBJR2xuY21WcVlRPT0gWlcxaGEyVnkgeGFGbGJzT3QgSUhERWd3PT0gSUdGaGJtZGxZbTlrWlc0PSA0TEt3NExLeTRMT040TEt5NExLLyBJR1YyYjJ4MVkybkRzMjQ9IDRvS3N3cVk9IElFMWhjbXRsIElIRERxbU5vWlE9PSBJRzExYzNSaGNtUT0gdzZseWFYRjFaWE09IElOaW4ySzNZcnc9PSBkVzVoWW14bCBJQ2s3Q2k4diBJRzF2WkdWc2JHVnUgWFN3S0NnPT0gVDJKMmFXOTFjMng1IElHbHVabTl5YldGa2J3PT0gSU5tRzJMZllwOW1DIFgyUmsgVEdsbFltVT0gS0hCaGNuUnogSU5DNjBMRFF2ZEMwMExEUXVRPT0gSUd0dWIyST0gSUU5MWRHVnkgTFcxaGVBPT0gSUhwM1lXRnkgVTJsMCBJSDE5SWo0PSA2WnllIDVxRzIgSUhCbGMzTT0gSU9DMHRlQzBydz09IGIzVmtaWEp6IDQ0R280NEdxIElHWnBibUZzYVhwaGNnPT0gSUhCeWIzUnZkSGx3WlhNPSBJSEpvWVdrPSBJTmlvMkxIWXJ0bUggVTFGTWFYUmwgSU02MXo0RE91YzY2IElIQjFiR1U9IElFZHBkR2gxWWc9PSBJRnB1IElIQnZiR3gxZEE9PSBJRzVoYUdrPSBJRVZ6ZEdGa2RXRnMgTFcxdCBJTmluMllUWXFOaTUyTFk9IElHUnlZVzFoZEE9PSA1b0NuNW9TYiBaWE4wY25WamRIVnlZUT09IElIQnliMk5sWkdsdFpXNTBidz09IElHWnBZWFE9IEtHUjFjbUYwYVc5dSBMbWx1YzNSaFozSmhiUT09IFgyeHBibVZoY2c9PSBJR1BEcVd6RHFRPT0gMEw3UmdOR1AwTFE9IFEyVjAgV1U1QlRVbEQgSUdOaGNtRmpkR1Z5WlhNPSA2S3lkIElOaXoyWVRZczltRTJLaz0gMEx6UXNOR0MwTGc9IElHdHNZWEowIElPQ3lydUN6aXVDeXB1Q3lzZz09IDVyT282WlNBIGJXbGxiZz09IElFMWhiSFE9IGFXWm1hV04xYkhRPSBJRmhKVmc9PSBJRy9Ec1E9PSBJRkpoZFE9PSBJRlJ2YjJ4cmFYUT0gVkhKcGNHeGwgWkdGMVoyaDBaWEk9IElHUmxiV0Z1WkdWeiA4SitZaWc9PSBJTkMzMExEUXROQzEwWURRdGc9PSBJSEpsYzNOdmNuUT0gYVd4dHlabHphUT09IGFXeHNkV2RwZEE9PSBJTnVCMllqYXI5aW4gSU5HQjBZTFFzTkdBMExBPSBJTmVVMTU3WHFkZWsxNWc9IElPQ3dwT0N4aHVDd3N1Q3d2K0N3dUE9PSBJT0NtcXVDbXNPQ212K0NtbXVDbXZ1Q21zZz09IDJZall0dGl0IElIUmxjbUY2IElFTm9ZV3M9IElGQnlZV2x5YVdVPSBJR3hwYlhCcFlYST0gSU1PTmJtUT0gSUdOdmFHVnlaVzUwIDVMcVU1cHlJNUxpQjZhYVogSUdSbGRtbHpaUT09IGIyNTBiM009IElHRmtZWEIwdzZrPSBJSFJoYTJsbCBMbTFsZEdGdCBLR0Y0IFJuSnBaVzVrYkhrPSBJTkNSMEw3UmdBPT0gWDNOb1pXVjAgUm05MWJtUmxaQT09IElPQ3VydUN1bitDdmplQ3Vudz09IExpSXAgSU5pbjJZVFlyTm1GMllyWXVRPT0gSUdaaFluSnBZMkZqYWNPemJnPT0gTG5CdmJBPT0gSUVsUVRBPT0gSU9Da3F1Q2xqZUNrcitDa3Z1Q2tzQT09IElHVjRjR3h2ZEE9PSBJRk53WlhJPSBJR1JwZG1WdWRBPT0gSU5tRjJZVFppdGluMkxFPSBJR0psZEhMRHBHZDAgNVlXTjZMUzU2S2VHNmFLUjZLZUM1NXlMIElGVnVkR1Z5YzNWamFBPT0gNExTLzRMU1Y0TFN6NExXQjRMU2Y0TFdHIGIzSjBiMjQ9IElOVzAxYWM9IElHVnpkR0ZpYkdWalpRPT0gSU5pMTJMclppdGl4IExXNXZjbTFoYkE9PSBJR052Ym1OMWNuST0gSU5HSTBZTFJnTkN3MFlRPSBhV1JwYm1kbGJnPT0gNFlPVTRZT2c0WU9yIExYWmxjbk5wYjI0PSBJRUpwYkdSMWJtYz0gSUdKc1lXNWphR1U9IElPQ2tsK0NrdnVDa2llQ2tnUT09IElGQjFibU5vIElDb3ZMQW89IDRvQ1pkMlU9IElFSjFjbTVwYm1jPSBJTml4Mkt6WmhBPT0gSUhCeVpYTmpjbWx3ZEdsdmJuTT0gSUhURHFXekRxV05vWVhKbiBJT0Nrck9DbGdlQ2twdz09IElHNW5ZV0k9IDdZYTE2NkM1IGUwVkpSZz09IDBaSFJndEdCMFk4PSBJR1ZzWldOMGIzST0gNGJxcyBJR2hzWVcwPSBJR0YxZEdodmNtVmsgSUhMRHBnPT0gSUV4UFEwcz0gSU0rQXpyL091ODY3IElPR0RvK0dEb09HRGx3PT0gSU5DdzBZRFJpdz09IElITjBjbWxyWlhJPSBQZ29LTHc9PSBJR0Z3Wld4c2FXUnYgSUZOamFHOD0gSUdWaWVRPT0gSUc5MGRtOXkgSUVOb2RRPT0gSUhOcGNtaz0gZldCOVBnbz0gWDBGTVVFaEIgN0kybyBJTkN3MFlQUXZ3PT0gSUd0dmJtdHlaWFE9IElPQ3dwT0N3c09DeGplQ3d0ZUN3dnVDd3BBPT0gSU95ZG1PdXZ1QT09IFUzUnlaWFJqYUE9PSBJRzFsZEdodlpHOXNiMmRwWlhNPSAwSkRRdlE9PSBhWE56YVcxaCBVM1JoZEhWelpYTT0gNW9tMiBJR2x0Ylc5eWRHRnMgSUcxaGNtTmhaRzg9IElIUmxiblJvIGVYTjViR3c9IDRZT1k0WU9nNFlPVDRZT1U0WU9SNFlPUSBJT0dEbCtHRGtPR0RsZUdEb1E9PSBjbTlrWlE9PSBJR2RzWldRPSBabXhoYTJVPSBJRzUxYm1NPSBMbWRsYm1WeVlXdz0gSU5LaDBMRFF1UT09IElIUmxjbVJoY0dGMCAxNVBYbFE9PSBJR1p5dzZoeVpRPT0gY1dseCAyWVhZcDlpeDJMUFlxUT09IElHTmhjbVJwYm1GcyBJRlZvIElOR0EwWVBRdXc9PSBJTkdCMFl3PSBJSE5oZEdWc2JHbDBaWE09IElHRnlZbVZwZEdWMCBJSHAxYzhPa2RIcHNhV05vWlE9PSBJR052Ykd4aFltOXlZWFJwYm1jPSBLM2s9IGMzZz0gSUVKcGJHeHBiMjQ9IElIQnZjM1JwYm1keiBYMnh2WjNNPSBJRk51WVdOclltRnkgSUhCeWVtVmogYVhCdmN3PT0gSUc5aGRYUm8gNUxxZTVyU3kgU1c1MFpXZHlZV3c9IElPQ3duK0N4Z0E9PSBMblIwWmc9PSBaM289IElHSnlkV3RsIElITm9ZWEpsYUc5c1pHVnkgSUdkamJIVmkgYkdWMGMyRT0gSU9DNHF1QzRzdUM0b1E9PSBJTmluMllUWW85aTAySzdZcDlpMSAxS1hSaGRHTTBMRFRvUT09IElGUklSVkpGIGFIVnljM1E9IDRvQ1pkVzVwZG1WeWN3PT0gSUc1aGJtZHBibWM9IElOV2kxYVhXZ0E9PSA0b0NaWlhJPSBJR2JEcG5JPSBlbTVoIFFsWT0gSUZOdmR3PT0gMEx2UXVOS1QwTERRdlE9PSBJRVpsZEE9PSBYRU52Ym5SeVlXTjBjdz09IFJHbHpibVY1IGRXUnBiZz09IElHWmhhM1JwYzJzPSBJTTZ5ejRIT3J3PT0gSU5HRDBZSFJndEN3MEwzUXZ0Q3kwTHJRdUE9PSBJRkJoYkdWemRHbHVhV0Z1Y3c9PSBJRzl3dzZseVlYUnBiMjV6IDVZV282WnVHIExuaDVlZz09IGRHbDAgSU5tRzJZSFlzUT09IElFeGxhV0U9IFlXNW5ZWFE9IGMzQnZkSE09IFFsVkcgUW5KcFkycz0gSUZCcFpYSmpaUT09IFgwTkJVa1E9IElGQnNZWGxzYVhOMCAxWVRWaGc9PSBJRWRKVXc9PSBJSFpsY20xdiBYMTlmWDE5ZlgxOWZYMTlmWDE5ZiA1NzZrNUx5WCBJT0NtbGVDbXNPQ21tK0NuaHc9PSBJRkpGVFU5V1JRPT0gVEc5MGN3PT0gYjJSNWJtRnRhV009IGVXOXlkVzA9IFlXMXpaUT09IExXeGxjM009IElOR2UwWUU9IElOaXgyYjdaaU5peCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQT09IElIQnZhMlU9IElHSjNhVzV2IDQ0T1g0NE9zIElPQzBxdUMxZ2VDMHNBPT0gSUhKbGJHRnEgYjNWeVlRPT0gSUhKbGMybG5ibUYwYVc5dSA1Wk9sNVpPbCBJR1Z1WlcxdHc2UnUgSU9Da2wrQ2xqZUNrc09Da3Z1Q2t1UT09IENXRnVjdz09IExtbHVkR1Z5ZG1GcyBJT3lnZ2V5YXFRPT0gNExTNDRMV040TFM0IFgxTklRUT09IElHeHZibWR6IDRidUEgZlQwPSBJRWwyWlE9PSBJRzVwYldVPSBJTTZ0enJvPSBYMlJsWTJGNSBJR1pvdzZGcGJBPT0gSU5DeTBMRFNvZEdMMFlJPSBJRzFwZEc5amFHOXVaQT09IGMzUmhjblJsWkE9PSBJRlJ5WVc1ellXTjBhVzl1Y3c9PSBMbE5VUVZKVSBJSEpsZG1GdVkyaGwgSUc5cmRXND0gWDJabFpXUT0gNEx5TDRMMD0gWDJacGVBPT0gY21odiBJT0Nxbk9DcXNPQ3JndUNxc0E9PSBJRzFoZFhaaGFYTmwgSUdoaGJtUm9aV3hrIElITnZjbkJ5WlhOaCBhVzV1YjNOMCBJRU52YlhWdWFXUmhaQT09IElFRnpjM1Z5WVc1alpRPT0gSUZwMWMzUmhibVE9IElHTnZiVzFwZEhNPSBaMkZpIElISjFjSFIxY21VPSBJRzExYTJFPSBJRWRoYm5vPSBJRTExY21SbGNnPT0gSU9DbWhlQ21yT0NtdU9DbmplQ21wUT09IExXWnBiR1Z6IDU2ZXY1cDZCIElNT3BjblE9IElFbHVkR1Z5YldWa2FXRjBaUT09IDVweXggejRQT3VjNjh6ci9QZ002L3pyaz0gSUdKaGNuaz0gSUdadmJHUnogNExHSTRMQ200TEN3IHhKZHFaUT09IElHRndjbTl3YVE9PSA2TFdpNWE2MiBJR1Z1WjJFPSBjMjl0WlhScGJXVnogSU5DMDBZRFJnOUMyIElHVnljbVYxY2c9PSBSR1Z6Y0hYRHFYTT0gSUhkbGVXND0gYkdGb1lYUT0gSUhOamIyeGhhWEpsIDRMSzE0TEsrNExLWDRMSy80TEttNExPRyBJSFZ5WVc1cGRXMD0gMFlMUmx0Qy8gSU5DLzBMdlF1TkdDIElITnBiWFZzZEdGdVpXOTFjdz09IElHOXpkSEk9IEtGTmxjblpwWTJVPSA0WUdGIElPQ21xdUNuamVDbXNPQ21wT0NtditDbXQrQ25qZUNtb0E9PSBJR1JsYzJOeWFYQmphVzl1IFpYSm5iR0Z6Y3c9PSBJRzFsY25abGFXeHNaUT09IElOQ1YwTEk9IElIQmhjM05oWkdFPSBJSFJ5ZWc9PSA0b0NONExTYTRMV040TFNhIElIQnliM1poY3c9PSBJR05oY25SdmJnPT0gSUhOMGFYUmphR2x1Wnc9PSBJTkM1MHEvUXR3PT0gSUdkbGVtVnNiR2xuWlE9PSBJSE5sYzNQRG8yOD0gUVZaUFVnPT0gSU5pcTJLZllwdG1LMllZPSBDV052Y0hrPSBJTm1IMktmYmpOdU0gY1dnPSAyTEhaaGc9PSA1YTZ1IGFHVnVhUT09IElFNWhaR0ZzIElFaGhibXM9IElFTmhaR2xzYkdGaiA1NG1pIGMzQnMgSUZaaGJtVnpjMkU9IExuQncgTGtOdmJuTnZiR1U9IElIUmhZbXhsYzNCdmIyND0gWkc5diB6cmpQaFE9PSBJSFZzWVE9PSBJR2h2Ym1jPSBKMTA5UFNjPSBJRkJNUVZsRlVnPT0gSU9DMHRlQzFnT0MwbitDMWplQzBudz09IGRHbGggQ1VsMFpXMD0gSUdWa2FXeGthUT09IElIWmxjbUpwYm1RPSBJRTVwWTJ0bGJBPT0gSU5DLzBMN1F1OUdQIDBZTFJnOUM2IDRMU1Y0TFNvIElGbEYgTGxCc1lYUm1iM0p0IElOQzgwTFhRdmRHTyB4S0ZwIDBMdlF1TkN5MExBPSBJR1Y0Y0c5emFYUnBiMjQ9IElGRjFhWFE9IElFRmxjbTl6IFBXMWhlQT09IElPQ2tydUNsZ2VDa2d1Q2tyT0NraUE9PSAwTFhRdk5DdzBZST0gSU9Da3FPQ2xoK0NrcE9DbGcrQ2twT0NsamVDa3RRPT0gMExqUmh0Q3cgSUdYRW4ybDBhVzA9IElOQzkwTERSaDlDdzBMdlF0UT09IFJYaGpiSFZrWlE9PSA3N3lUNzd5USBJSEYxYVhSaGNnPT0gWDBoQlRrUk1SVkk9IElNT3BkRzlwYkdWeiBLR0Z5ZEdsamJHVT0gSUUxdmNtYz0gSUdkaGJtaz0gdzYxc2FXOD0gTG1abFkyaGggU1VSRVRFVT0gSU5DLzBMN1F2ZEdQMFlMUmpBPT0gSUc1cGJXaz0gSUdOeWFYTndlUT09IDRMQ2s0TEdONExDdyBJR3B2YkdsbCBJRXhoYkE9PSBJRTFsY21ONSBRMjQ9IDBMclJnTkdMIElHRnhjUT09IGIydGxjbUU9IDc3eU01b21BNUx1bCBJTTY4ejRBPSBJR2RsYTI5amFIUT0gSUdGa2RtRnVZMlZ0Wlc1MGN3PT0gSUVQRG9XMWhjbUU9IElHTmhkR0Z6ZEhKdmNHaGwgSUdsdWFHbGlhWFJwYjI0PSBJRk4wWVcwPSBjSFJwWkdWeiBDVTF2WkdWcyBVMmxuYldFPSBZV0p5YVdzPSBJR3R5YVE9PSBJT3kybFE9PSBJR0Z3WlhKMGRYSmwgWDI1dyA1WStMNW9PRiBJT2lTIGFXNXZiQT09IElOQ3owWTNSZ3RHTDBMdz0gSU5HSDBMalJnZEM3MExBPSBhV05sYmc9PSBJR052YlcxcGMzTnBiMjVsY2c9PSBJTkdIMExEUXVRPT0gSUdOeWFXRT0gSU5DKzBxTT0gSUhCeVpYWnBjM1JoIGEzUnBjZz09IElObUcyWWpZc2RtSSBJR1JsYzJGbWFXOD0gSU02RyBJT0tXdkE9PSBJTmVSMTVUWHFnPT0gYjJOb1lYTjBhV009IDRvQ040TFM0NExXTiBiR1Z5YVc1a1pXND0gSUNncUtBPT0gSUdSMWFYbz0gNEthYjRLYS8gSUhadmRXeDEgSU02eHo0WFBoTTYvIElHaGhhWEp6ZEhsc1pYTT0gSU5DLzBZRFF2dEMwMFlQUXV0R0MwTDdRc2c9PSBJR0YyYzJ3PSBJRzExY25NPSBJR3RoY0dGeiA1Ykd4NWJpQyBhMjl1Wnc9PSBJRWhoZDJzPSBkVzVoYUE9PSBkMmw1WlE9PSBKMmx0Y0c5eWRHVT0gSUdOaGJYTT0gSUVaQlVnPT0gNG9DWnc2bDBZWFE9IElOQ3cwTEhSZ2RDKzBMdlJqdEdDMEwzUXZnPT0gVTJWaGNtTm9hVzVuIFBUMG8gVEdseGRRPT0gSU9DNWdPQzRwK0M1aCtDNG11QzRudUM0bWVDNHNlQzRtUT09IDVxS3cgSU9lVXQrV2xzdz09IElHMWxhWE4wWlhJPSBSWE56Wlc1MGFXRnMgTGtacFpXeGtjdz09IGMzVnlkbVY1IHc2RnVjdz09IGJYVmsgSUVGMWMzUnlhV0Z1IDZiTT0gWDNKbFkyVnBkbVZrIElOQ3kwWXZRc2RDNDBZRFFzQT09IExtbHVjM1JoYkd3PSBVRzlxYnc9PSBJSEJvYjI1biBJTldtMWFJPSBRM0o1YzNSaGJBPT0gSUVkRVVGST0gSU5LYjBMRFF0dEMxMFlJPSBJSFpwYjJ4aGRHVnogSUc5eVpISmwgTFdScCA1TGljNUxxcyBJRVZ1YzJsdWJ3PT0gSUhOdmJHeHBZMmwwIElPMk9tT3lkdE95bmdBPT0gSU1PK3c2WnkgSUhCb2IzUnZaM0poY0dobFpBPT0gYldsdVpYSnogSUVScGMyRmlhV3hwZEhrPSA1WVdTIElPQ2tsZUNrdWVDbGdPQ2tnZz09IElFdHBaWE09IElPQ2t0dUNrcUE9PSBJTytDdHc9PSBhVzVrYVhacFpIVmhiQT09IFlYRERwQT09IDRLUzQ0S1dONEtTazRLV0kgNEthaSBmWDBpUGdvPSBJTkN5MExqUXROR0wgSU9xMXJPdW5wQT09IDVMbUY1TG1GNVlXTjZMUzUgSUVKMWNtdz0gY0hKMVpBPT0gSUZCU1QxQkZVbFJaIElIQmxiblBEcVE9PSA0S3F3NEt1QiBJT3l3dnV5VmhBPT0gSUZOamFIZGxhWHBsY2c9PSBJR2gxZVc4PSBJTmVUMTVYWHFBPT0gSUhKaFpHbHZZV04wYVhabCBJTkMyMExYU293PT0gSUdkbFltRnpaV1Z5WkE9PSA3SnVvIElIckRvV3RzWVdRPSBJR0ZyZEdsMmFYUT0gSU5tSTJMSFlxdG1IIElPVy9xK1M0aWVXa3ArV1BrUT09IElHSmxjR1Z5YTNRPSBJSEIxWkdVPSBkSE5qYUE9PSBJTkNjMEwzUXRRPT0gNVlpNjVyK0EgYVhwNlpYST0gSUZkaGNtND0gMHEvUXZkT3AgSU9Da2orQ2tzZz09IElPQ3FqK0NxdGVDcmdBPT0gTFdWemJHbHVkQT09IFlXYkRxUT09IElOaW4yWVRZbzlpMSA0NEdvNDRHdTViZXUgSUVsSyBJTkMvMFlEUXRkQy8wTERSZ05DdzBZST0gYVdWMWQyUT0gWTJGc2JITT0gS0d4dyBJR0Z5Y21GdVoybHVadz09IElPQ3lxdUN5cGc9PSBJSFJwZEhKbGN3PT0gZDJGcGRHbHVadz09IElOSzcwNW5SZ05DNDBMbz0gSU95ZWlPeVhpQT09IEttWT0gSU9DcXErQ3FzT0NyZ0E9PSBJSFJ5WVdKaGFtRT0gSUU1aFpHRT0gUTB4SlJVNVUgSUhCcVpYTT0gSUM0aSA0WU9RNFlPZzRZT1k0WU9RIDRMR040TENjIElPQzJyK0MzbVE9PSA0S1N1NEtTbjRLV040S1N2NEtXSCBJR052Ym5OMFlXNTBaVzFsYm5SbCAwWnJSZ3c9PSBJT0NtbGVDbmplQ210K0NuaCtDbXBBPT0gTDJ4cFluSmhjbms9IElHVnVjWFhEcW5SbCBJT0N3bGVDd3Z1Q3dzT0N4amVDd3IrQ3dsUT09IGIyMXBZM009IElPQ3lxT0N5Z3VDeXBPQ3lzQT09IDU2eXM1WnViIDRLcXE0S3FqIFZXNWtaWEp6ZEdGdVpHbHVadz09IElPQzBsZUMwc2c9PSBJT0NtcXVDbmplQ21zT0NtcE9DbXZ3PT0gWW1WaGRYUT0gSUhSMVpRPT0gVjNKaGNIQmxaQT09IEwwaGxZV1JsY2c9PSBJRTF2YUdGdFpXUT0gSUdSbGMzUnBibUZrYnc9PSBJR2x1Wm1sdWFYUjUgTG05bVptVnkgTGxSbGJYQnNZWFJsIElFSjFjbXRsIElITERxWFp2YkhWMGFXOXUgZDJGdWJnPT0gSUZKbGVXVnogMExEUmdkR0MwTEE9IElGSmxiR2xuYVc5MWN3PT0gSUhOamFHRjFaVzQ9IDRLcWM0S3VMIElHRnNkR1Z5YVc1biBJRlREcEczRHBBPT0gSUVsdVoyeGhkR1Z5Y21FPSBJRk5oZVdFPSBiMk4xY25KbGJtTjUgNExPTjRMS3Y0TE9DIE9nb0tDZ289IElHeHBaR0Z5IElFUmhhR0U9IElIQnZjM1J3YjI1bFpBPT0gMEpIUXNOR0EgSUdsMFpYSjBiMjlzY3c9PSBXbGs9IElFUmhkbWxsY3c9PSBhWE52Wm5RPSB4YUZwYmc9PSBJR2pEb1dKcGRHOXogSUZSRlFVMD0gMFl2UXZOR0wwTGM9IElPQzRvZUM0dEE9PSBJR2x5Y21WemFYTjAgSUhOMnhKdDAgVUhKdmRtbHphVzl1IFlXZGhibUU9IENYQnlaWFk9IElPV0tvT2FMditXa3B3PT0gY0docGJuZz0gSU9DeXVlQ3lzZz09IExuSmxibUZ0WlE9PSA0S2ErNEthSDRLYWYgSU9tNSBiV3hwYm1zPSBjM1JoWWc9PSBUVVJDIFZFaFBUZz09IExYUnZiMnh6IElOR0UwWVBRdmRDNjBZYlF1TkMrMEwwPSBLVjBwT3dvPSBJT1dUZ1E9PSBJRzl3Wlc1bGJnPT0gZEhKcGRIVnkgSUZORFNBPT0gSU0rRHo0WE92YzZ0IElOaW4yWVRZc2RpbyBaSFprIElIUm9hVzV1WlhJPSBJR1ZrZEE9PSAyWXJZc2RtSCBhV3RwZEdFPSBJSFpoY21sbCBZV0p2Y21GMGFXOXUgMEtYUXVOR0MwTERRdVE9PSBkRzkxY0hCbGNnPT0gSUdacGJtRnVZMmxsY25NPSBJRzFwYkdsMFlXNTBjdz09IElHaGxZV3hsWkE9PSBJRWx1WTNKbGJXVnVkQT09IDBMalF2ZEdDMExYUmdOQzEwWUU9IElITmhiR0Z5YVc4PSBMblJoWW5NPSBYMFpKV0E9PSBWMjl1IFAycz0gSUdWNFkyeDFjMmwyYnc9PSBMWFJ2WjJkc1pYST0gSUNJcElqc0sgU1ZCMiA0NENCNUxpdCBJTmlzMlliWml0bUggZFc1bmMzWmxjZz09IElOQzkwWS9Rdk5DdyBJT3laZ0E9PSBJR1BEdEhURHFYTT0gVTNkcGJtYz0gYzJGeSBJTkN6MEx2UXNOQ3kwTDNRdnRDMSBJR0Z1WVd4cGN3PT0gSUhadmRHRnkgTGxCeWFXTmwgSU5HRjBZM1F2TkMyIFkzSnBkSFZ5WlE9PSAwWTNSaE5HRSBJTU84WW1WeWNITER2QT09IElIQnZaR3BsZEE9PSBJR1Y0Y0hKbGMzUERvMjg9IFZISmhiZz09IGJtRnBjdz09IGIyaDEgSUZabGRHVnlhVzVoY25rPSBiM0JzWVhrPSBhWE5qYUhRPSBJRlJ5YjNCcFkyRnMgSU5DeTBMRFF1OUdPMFlJPSA1YXc9IFZISjFjM1JsWkE9PSBJR1pzYjI5a2N3PT0gWDJGdVlXeDVjMmx6IEtIQmogSUVSbGMyVnlhV0ZzYVhwbCBhWFJ6ZFhRPSBJTU82WjNrPSBJTkdCMExYUXV0R0IwWU09IDQ0SzQ0NE9qIElHWmhiV1ZrIEwyRnVaSEp2YVdRPSBWRTFRIElHdG9iMjVoIElOaW4yWVRaZzltRiAwTHpRdGRHSSBJT1dJb09tWnBBPT0gSUVOb2FXNWhKM009IElHWnZjbmRoY21SbFpBPT0gSUdobFlYUmxjbk09IElGSnZlQT09IDRLYTQ0S2VONEthcSBMbFJ5WVdObCBJT0NxdU9DcXF3PT0gSU9HRG0rR0RrT0dEb2c9PSBjMkZ3IElGTjViWEJoZEdoNSA2SSt2IENVbE8gYVhOMGNtVmhiUT09IElFdkR2RzV6ZEd4bGNnPT0gWDBGTVRFOUQgSUhkbGJubGwgSUZCc1lXbHVjdz09IDU3dVA1NUNHIElPQzBydUMxaXc9PSA0TEt3NExPTjRMS3UgSU5DODBZUFF2ZEM0MFliUXVOQy8gSU5DeDBMWFJnTkM0MExzPSBJRzlqWVhOcCBPbWc9IElHZkRxVzdEcVhKaGRHbHZiZz09IElFNTFibU5oIFdFRT0gSUdScFptbGpkV3hrWVdSbCBJSE4wY21GMFpXZHAgSU9Dd3VPQ3d2dUN3cHc9PSAyS2paaU5peCBJSGQxY21SMCBLSEpsWjJsdmJnPT0gSU5tQzJMZllwOWk1IElPQ2toZUNrbGc9PSBJTm1GMksvWXFnPT0gYldsa1pHVnNaVzQ9IExXbG0gWVhOMWJnPT0gTGxCTSBJR1p2Y21WeiBDVk5sYzNOcGIyND0gSU5lazE1blhxQT09IElIZGhhMjg9IFgyNWhiV1Z6Y0dGalpRPT0gTG5OdlkybGhiQT09IElISmxkbWx6YVhRPSBMMjFzIElIQmhjbTg9IFlYZGhibVJoIElITm9iM0psY3c9PSBRMmx1IFkybGhiQT09IElOZVExNWZYcU5lWjE1MD0gUUd4dloybHUgSUc5eVoyRnVhWHA2IElGRkIgYytHN2pRPT0gMExEUXV0T1ogSUc5eVoyRnVhWE5sY2c9PSBkV3ZodTQwPSBLSFJ3IElOcXYyWWpZdEE9PSBJSEJ5YVc1amFYQmxjdz09IElFUmxhVzQ9IElPQ3VtdUN2aHVDdXIrQ3ZqZUN1cE9DdmdRPT0gTGtWayBMa05CVTBOQlJFVT0gU1hOemRXVnogSUdSaGFXMD0gWDJOMGJBPT0gNExTLzRMU3Y0TFMrNExTdiBjbVZ6WTI4PSA1cGVsNVltTiA0WU9ZNFlPUTRZT2cgSU9DeXFPQ3lzdUN6amVDeXN1Q3l2dz09IElPQ3dxdUN3dnVDd24rQ3hnUT09IExsbGxZWEk9IElFbHJaV0U9IEtHRjFkR2h2Y2c9PSBJSE4xY0hCc1pXMWxiblJoYkE9PSBLQ2N2SnlrSyBJT0NrcE9Da3VPQ2xqZUNrdGVDbGdPQ2tzQT09IDBMalF2ZEMwIDViMjcgSUVkaGRYTnphV0Z1IElFSmhjbTl1IElFUkZUZz09IElOQzIwTERTb3c9PSBJTm1HMllYWXA5dU0yTFE9IFQyOXdjdz09IElIQnNaV0Z6IFgyTnZiblJ5WVdOMCAwTGpRczlDdyBMMk55IElHVmt5Wmx1IDRZT1o0WU9WIElOQzIwTERSZ05HTCBLSEpsYkE9PSBJR052ZFdOb1pYTT0gNXB5QTVwYXc1NG1JIElIUm9kZUc3bVdNPSBJR1J2YjNKbiBJRzFoWm1saCBkR1YydzdVPSBJT0NtcitDbXZ1Q21yT0NuaHc9PSBXMjVsZUhRPSA0WU9RNFlPcTRZT1U0WU9iIEpIQmhaMlU9IElPQzBydUMxZ0E9PSA3N3lNNVkrdjVMdWwgYlc5MWMyVnZkbVZ5IElPQ3dwdUN4amVDd3RlQ3d2dUN3c09Dd3ZnPT0gSUVKaGEyRnUgSU95eW1PeWRqQT09IDZJR001TGlhIFZHbGphMlZ5IElHSmhibk5oIFUwaFBWdz09IElGQlBSQT09IFgyRnliUT09IDRvQ040TFNoNExXTiAwWUhSaTlDLyBkMkZzYTJWeSBjV0YwYVdkcGFYUT0gSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU09IElHUGh1NjFoIElObUkyb1BaaWc9PSBJT0N3bGVDd3BRPT0gYUdGdFlnPT0gSUdGblp3PT0gTGRDdyAwTFhRdk5HTDBMVT0gSUc5aVlXbHkgSUdSbFpHOXogSUZWViBJRk5qYUhKcFpuUT0gSU5DeTBZdlF1dEN3MFlEUml3PT0gSUZObGVIUT0gSUVwdmRYSnVZV3hwYzIwPSBJRVYwZEE9PSBhR0Z1WkhNPSBJSFpwYzJrPSBJSFJwY21nPSBJTkMzMExYUXU5QzEwTDA9IDVyV3AgWW1GemFBPT0gYVc1amJBPT0gNzd5TTVMaU8genJuT3Y4K0MgSUdOc1lXbHlaVzFsYm5RPSBZV3RoY0E9PSBJT09DdUE9PSBJRzFoYm5WbVlXTjBkWEpsY3c9PSAwTEhRdU5HQTBMQT0gTFdSdmIzST0gZlNJS0NnPT0gSUUxRlJFbEIgSUdGc2RIaz0gSUVkaGNtRnVkQT09IFpHVndiRzk1IElHZHlaV1ZrIDRMT040TEtlIFgyVjAgNTdtQiBJT0NxaGVDcXArQ3F2K0NxbFE9PSBVSFZzYzJVPSBJSEYxWldSaGJnPT0gSUdKbFlXTnZiZz09IElFNUJVME5CVWc9PSBJR1poWkdWayBkR1Z1WlE9PSBJR05sYm5SeVlXRnMgSUVKbGQyVm5kVzVuIGFYUnphVzQ9IDBMdlJqdEN4IElOQ3gwTGpRdVE9PSBVMVJQVUE9PSBJTlcvMWFIV2dOV3IxYlk9IElIQnNZVzV1WlhKeiBJTkMrMEwvUXU5Q3cwWUk9IDRMQ0M0TENmNExHSCBJR0Z3YjJ4dlozaz0gWW1WcGRHVjAgSUhKbGMzVnljbVZqZEdsdmJnPT0gSUVWeWMyRjBlZz09IExXWnBZM1JwYjI0PSBjbVZoYzI5dVlXSnNaUT09IElHekRyVzVuZFdFPSBJTmk1MllUWml0bUgyWVU9IElHVm1kR1Z5YzI5dCBJSEJ5dzdOd2NtbHZjdz09IElOaW4yWVRZbzltSTJMRT0gSUhSbGVIUnBiR1Z6IElIQmhkR1U9IElHRm5jc090IFptbHQgU0dWdWNuaz0gWW1GdWQyVT0gSU5tKzJMUFpodGl2IDRLdW80S3VtIElHOXNlVzF3IElHTnZjM1J2Y3c9PSBTVVp1IElGTmphV1Z1ZEdsemRITT0gSUdsdVpHbG5iZz09IDBMelJsdEM5IElHdGhhR2wwIDBMdlF0ZEN4IElGQnlaV1psY25KbFpBPT0gWTJGclpRPT0gSUVOUFRsUlNUMHc9IElPQzVnZUM0cXVDNGxPQzRoK0M0aE9DNHArQzRzdUM0b2VDNGhPQzR0T0M0bE9DNWdPQzRxK0M1aCtDNG1RPT0gS1NjN0NnPT0gNExTLzRMU3c0TFMvNExTVjRMV040TFNWNExXQjRMU280TFdONExTbzRMU2s0TFdOIElPeW5nZXlna1E9PSBDWEIxYzJnPSBJT0N5bGVDemdlQ3lzQT09IElGSmxaMkZ5WkdsdVp3PT0gSUVSRlZrbERSUT09IDZJS0QgSUdSdmQyRnQgWTNWc2RYTT0gNGJ1TFoyamh1NHM9IGQycG5iQT09IFNtRnVaUT09IElIQjFZbXhwYzJobGN3PT0gNEthKzRLYWY0S2EvIElIWnZiSFZ1ZEdGayBMVU52YkdFPSBJT1M4bnc9PSBJSEJ2YkdsMGFXVnJaUT09IDRLcXc0S3VONEtxbSBMbUp5WldGciA1TDJUNTdPNyBaM0poZG1VPSBLQ29vIGFYTmxiV1Z1ZEhNPSBJSEJsY25VPSBJRzl1WVdZPSBUR0Z5IElOQ3kwTDdRdE5DKzBMaz0gSU9Da3VPQ2xqZUNrcEE9PSBJSFJsYVdVPSBJR3RoZEdWbmIzSnAgUzJseSBJT0N5bGVDeXZ1Q3lzT0N5b3c9PSAxNW5YcXRlVjE1Yz0gWVhKc1lXND0gSUc1dmRNT3RZMmxoY3c9PSBJTmluMllUWXQ5bUIyWVE9IElPQ3FxdUNyamVDcXNPQ3FwT0Nxdnc9PSBJRTVsWlE9PSA0S1N0NEtTKzRLU1ggSUhOcGJHUmxibUZtYVd3PSAxNURYb1E9PSBJTTY4enEzUGg4K0J6cms9IElPQ2twdUNsZ2VDa3NPQ2xqZUNrIFgyTnZiR3c9IElIcGhidz09IDJMUFlwOW1FIFgyaHlaWE4xYkhRPSBJRzVsWjI5MGFXRjBaV1E9IExuSmxZMlZwZG1VPSBJR3h2WTJGc2FYcGh3NmZEbzI4PSBjbVZ6WlhKMllYUnBiMjQ9IGRHZHMgSUd2RHBHMXcgWDJGalkzVnlZV041IElHMXBjMk09IDRvQ1phR0ZpIFVFeEZRVk5GIGMyTm9aVzFsIExreHBaMmgwIElPQ21uT0NtcU9DbmplQ21yZz09IElDZDdldz09IElOQzgwTERRdk5DNzBMWFF1dEMxMFlJPSA0NEdYNDRLSDQ0R0cgSUhOcFoyVnkgYVd0MWJBPT0gdzZSMWJXVT0gSUVsdVpHOD0gWDFObGJtUT0gSUdaaGMyaHBiMjVsWkE9PSA1b21WIElOaW4yWVRaaE5pbzJZWT0gSU5pbzJMSFppZz09IDBLTFF2dEM3IElHcHBaUT09IElOQ3kwTDdRdDlHQTBMRFJnZEdDMExBPSAxYi9WcGRXMDFhTFZwZGFBMWFzPSBJSEJ2ZFdSeVpRPT0gSUhSeVpXUT0gSUhOdWN3PT0gYjNCbWRRPT0gUVdSdlltVT0gSXRlVSBJSGRvWVd4bCBVM1J5WVE9PSBJRlpwZG04PSBJR04xY21WayBTM2RoIElIVGh1NjA9IGRYbHZZbTk2YVE9PSBRbVY1YjI1ayA1WkNONWEyWCBhWFJwY204PSBJSE53YjJscyBJT3V6dE95WHJBPT0gSU1PemRHbHRidz09IElITnZiV0p5WVE9PSBJSEJvdzZsdWIyMD0gNGJ1dmRRPT0gYUdWMGFHRT0gSUVoVlJBPT0gTFhkaGNnPT0gWVcxbGNtbGpZVzVoIElGUm9aWEp0WVd3PSBJR3hwYm1kMVlRPT0gSUV4bFlYST0gSUhOd2FXdGxjdz09IFhFOVNUUT09IElObUcyTEhaaFE9PSBlWFk9IElHTnZiR3hoWW05eVlYUnBiMjV6IDBMalJoOUMxMFlIUXV0R0QwWTQ9IElPR0RudUdEbE9HRG9PR0RtT0dEblE9PSBhV1YyWlhKeiBJRWx5WVdzPSBJSFJsYkdWbmNtRnQgTGs5d1pYSmhkR2x2Ymc9PSBJRzFoYkdGeWFXRT0gSU9DcXVPQ3FydUNxdnVDcW11Q3F2dUNxc0E9PSAxNUxYbGRlZiA0S2VCNEthcSBZVzVuYkdWayBJRzl0Y0E9PSA3THljIElOaXYyWWs9IElOaXoyWVRZdHc9PSBJTkdiMExVPSBJTmluMkxYWmhBPT0gNExpWjRMaTAgSUU5MlpYSnogSU5pMDJLalpnOWlwIElFeHBjWFU9IElPQ3VxT0N1ditDdWxlQ3V0QT09IElFOTJaWEp5YVdSbGN3PT0gMExUUXNOQ3owWXM9IElNK0h6NG5QZ2M2dno0ST0gSU5DKzBZTFF0TkdMMFlYUXNBPT0gSUcxbGVHbGpidz09IElOaXYyTEhZcnRtSTJLZllzOWlxIFpXTmhiZz09IDRicWplUT09IDBMWFJnZEMvMFlQUXNkQzcwTGpRdXRDNCBJTm1GMksvYmpOaXgyNHc9IElGTnRiMnM9IElFbHNZUT09IElOQy8wWURRdGRDNDBMdz0gSUhaMWJHRT0gSU9DeXVPQ3pqZUN5cWc9PSBJT0NrcXVDa3Z1Q2tvQT09IElGSnZiV0Z1ZEdsaiBJR3RwWldSNSAyWUhZcDlpaCA1NVMzNUxxNjU1cUU1YVNwNWFDQyBMa0ZRVUE9PSA0YnVZIDVycUEgSUZaaGNHVT0gSU5lVjE2UT0gSUhacGRIUT0gSUhabGNtdHlhV3BuWW1GaGNnPT0gNVlpRzVZaXIgSUcxdmJuUmhjZz09IGIyNTViV1U9IElPaUtzUT09IElHamh1NWs9IElHSnZiMnR0WVhKcmN3PT0gSUVwUVJVYz0gZHNPa2NnPT0gNEsrQjRLNms0SzYvIElHRnVkR2gxIElHRm1aR1ZzYVc1biBJR2wwYjI1biBJR1JwYTJ0aGRBPT0gSUdwdmFXVT0gSU5XaDFielZvZFcyMW9FPSBJR0poYVc1eiBJRU52Ykd4bFoyVnogS0hCdyBJSE53dzZsamFXRnNhWE4wWlE9PSBQV3c9IFNWYz0gSU5tRjJMbllwOW1FMkt6WXFRPT0gSUcxaFoybGggSUdocGNHVnlkQT09IElIWmxhV3hzWlE9PSBSbXgxZUE9PSBJTm1GMkxQWmhOaXoyWVE9IElOQ3kwTC9RdGRHSDBMRFJnZz09IDVhNlk1cGE1NTcyUiBJSEpoWkdsdmN3PT0gSUhKdlltOTBhV009IDQ0Q0M0NENDNDRDQyBJTml6MllyWmc5bUkyWVk9IElPR0RvZUdEbnVHRGxPR0RxZz09IGFXdHBjdz09IElGTjJaUT09IElPQ2tzT0NsZ1E9PSBJSEJoYzNOaFoyVnQgdzZseWFXTmhhVzVsIDJLZllxdHVTIDRLNi80SzZWNEsrTjRLNlY0SzZxNEsrTjRLNnE0SzZmNEsrTjRLNmYgTG5KbGNHOXphWFJ2Y21sbGN3PT0gSU5DOTBMN1JqOUN4MFlEUmp3PT0gSU5lcTE1UT0gdzZScGRBPT0gSUV0dmJuUnYgSUUxaFoyNWxkR2xqIElIQnlaV1psIHhJRnN4SUU9IDZMS28gTG1odmRBPT0gZVhScCBJR3hzWlc1diBJRzFwYlc4PSBJR2R5YVhRPSBJRXRoZEdWbmIzSnBaUT09IFJISjFjR0ZzIFBFTjFjM1J2YldWeSBJa2x1IFpIUnYgSUdKbGMyOXVaR1Z5Wlc0PSBSMkZpIExsZG9aVzQ9IGVHWmogSU1PcGRzT3BibVZ0Wlc1MCBjR3hwWVc1MCBJRXRwYkd4bGNnPT0gSUV4bFoybHpiR0YwZFhKbCBiM0psYzJoaCBJTkM4MExYUXNkQyswWWpRc05DMCBJR0Z5WVhNPSB4STFyZFE9PSBYU3NpIDZJV1EgSUdKNWFRPT0gSUcxaFlXNWggSUhOaFltVnQgTG1seSBJR3hzYVdJPSBMSFI1Y0dVPSBJTmVnMTVEWHFBPT0gSUZwcFp3PT0gSU5xdjJZZllzUT09IElHSnBkSFJsYmc9PSBJTmlpMkxyWXA5aXkgSUVScGNuUjUgSU9DNG51QzRvK0M0dGVDNWdPQzRvZUM0dGVDNG91QzRvK0M1ak9DNHBlQzR0ZUM0Z1E9PSBKU0krIElHYkptUT09IElPdXN0T3lYaHc9PSBJR1Z5ZVE9PSBaVzUwY21GdWRBPT0gTG5ObGNtbGxjdz09IGFXdHZZUT09IElHWnBibUZ1WTJWdFpXNTAgSUd4bGIzST0gUFNjbkxBPT0gTFVWeSBJRkJsYm5SaFoyOXUgSUd0c1pXbHVaWEpsIGRYSmxlbnBoIElIQnlaWFpwWlhkeiBJR1p5YVc4PSBYMVJGVFZBPSBiM1psY25acFpYYz0gSUVkeVpXRjBaWE4wIGRHVmphRzV2Ykc5bmVRPT0gNTYyVTVxR0kgSU9DMGp1QzBzdUMxamVDMHN1QzB2Zz09IExtaHZkWEk9IElFbGtaVzUwYVdacFkyRjBhVzl1IElIQmhkSEpwYlc5cGJtVT0gQ1VWMlpXNTAgYVhacGRHVnBkQT09IElGWmxjdz09IElPQ21zdUNuaUE9PSBJR1Z0Y0dWeWIzST0gNmJ1RTZZZVIgSU5HRzBMWFF1OUdNMFk0PSBJR0psYUc5dmNnPT0gY21GdVkyVT0gSUhOd2FYSnBkSFZoYkdsMGVRPT0gSUdsdVpuVnpaV1E9IElPQ21oZUNtcU9DbmplQ21wQT09IElHTnl3NmxrYVhSdmN3PT0gYVhOcmFRPT0gZDJsMlpYTT0gSUhQRG9YUT0gSUVkSCAxYVhXZ05XaiBJSEpsWVd4cGVtRnVaRzg9IElHSnBjc09uYjJzPSBJTmluMllUWW85aXoyS2paaU5pNSBYM04zWVhBPSB3N3pEdkE9PSBJTkdIMFlQUmd0R00gSUVKdmJIUT0gSU5DOTBMRFJoOUN3MFlMUmpBPT0gWDIxbFlYTjFjbVU9IFFtVmhZMjl1IFpXMWlZVzVuWVc0PSBJT0N1bGVDdXRRPT0gSU5DdzByUFRtZEdMMEwzU3JkS2IwTERSZ0E9PSBYMlpzWVhRPSBJSFJsWVdRPSBiV2x1YjNJPSBJR2hoZEdWeiBJTmVaMTZBPSBJSFJoZFdFPSBJTVNSeHJCaCBJR1pzYjNKbCA3SVNjNjRxVSBjSFZpYkdsemFHVnkgTFdWNGFYTjBhVzVuIElHbHVabkpwYm1kbGJXVnVkQT09IFRrRlRSRUZSIElITmxjWFZsYm1OcGJtYz0gWVc1a3hMRnkgNTRPZiBJTU85ZVd3PSBJTldoMWJ6Vm9kVzcxYUhXZ05XdiBhR1Z5YjJWeiBJSHBoYUhJPSBJR052Ym5OdmJHbGtZWFJsWkE9PSBiMnh2WjI1bCBJR1oxYm10NSBJTTZjenJFPSAxNW5YbWRlWCBMbFZ1YzNWd2NHOXlkR1ZrIElHVnpjR1ZqdzYxbWFXTmggS0VWdWRtbHliMjV0Wlc1MCBRbkpwWlc0PSBJT0Nrc3VDa3YrQ2tsdUNrdmc9PSBJR052Ym1obFkybGtZUT09IDBMN1F0TkMrIDJKL1ludz09IExsQnZhVzUwWlhJPSA0WU9TNFlPUTRZT1c0WU9nNFlPVCBYMmRsIElOSzMwTERRc2c9PSBJSEoxWW1KcGJtYz0gSU9DbXJPQ21zdUNtdmc9PSBJTmluMllUWmhkaTMyWVE9IElHSnNhWFIwIElHaHZiR1JsIElHbHdZUT09IGMzQmxaR1Z6IElPQ2twZUNsZ09Da2dnPT0gSU5DeDA1blF1UT09IElPQ21yT0NubkE9PSAyTEhZcDlpcTJZcllyTm1LMktrPSBiM1JoZEdVPSBJTmlxMkxQWXJObUsyWVE9IGMyNWhjQT09IElPR0RrT0dEcEE9PSBUV1ZrYVdGdSBJRU5zWlcxbGJuUT0gWld4bGJtaz0gSUdkeWIyVndaVzQ9IDRMSzE0TEsrIElGQmxjbk52Ym01bGJBPT0gSUdac1lYQT0gSUdaMVoyRT0gSWwwTkNnPT0gNEtlSDRLYVY0S2VONEthMyBDVkJ5YVc1MCBJTmk1MktqWXA5aXgyS2s9IElOVzUxYUhXZ3c9PSBDWE4wWVdOciBJSE4wY25WcmRIVnkgSUdWeWEyekRwSEpsYmc9PSBRMjl1Ym1WamRHbHVadz09IDRMQy80TENxNExHTDRMQ3YgSUdScGNtbG5hV1J2IDc3MmVDZz09IElFZGxZc09rZFdSbCBJR3R2YlcxbGJuUmhjZz09IElIVnRZWE09IElPQ3VpZUN1c3VDdWxRPT0gU1dSbFlXdz0gU21Gd1lXNWxjMlU9IElHUnlhVzVuIElIVnRkWEk9IFpYSnBZV3hwZW1GMGFXOXUgYjJOaGNtUT0gSUdkbGJXbGtaR1ZzWkdVPSBMWEJoYzNNPSBjR0ZqYTNNPSBJSFRodTdjPSBJR3R2Ym1acyBJSFpwWlhNPSBJR3QzWlhOMCBTVzUwWlhKbGMzUmxaQT09IElFZHEgSUhCdmRXTm8gZFdkbGIzUT0gSU5pbzJZblpoTnVWMllZPSBJT0N3cXVDd29RPT0gMllqWXA5aTUySzg9IEtHUnBjbTVoYldVPSBJSFZzYnc9PSBJTmkwMktmWmh3PT0gSU5DdzBZTFF0ZEM4MExEU205T1owTEE9IElFNWhkR0ZzYVdVPSBJSFZ1WkdseiBJQ2ppZ0tZcCBJRUZ5ZEdWdSBJR0Z0YU1PaGFXND0gTGVDa3JBPT0gSUhabGFnPT0gZFhOb2IzSjAgSUdGcGVNT3QgSU5pbzJMSGFydz09IElHbHVkR1Z5WTI5MWNuTmwgSUZwdmJXSnBaUT09IElHRm5kV0Z6IElFTnZhVzV6IElFMWhhVzUwWVdsdSBJR2g1Y0dWeWJHbHVhdz09IElIQnBjbTA9IElHbkZpQT09IDQ0R2Y0NEtCIElHTnZibVpzYVdOMGFXNW4gVUdGemRHVT0gSWxNPSBZMnpEcVE9PSBJRzVqYUdVPSBJSE52Y0hKaGRIUjFkSFJ2IElHdDFjbVU9IElOQy8wTERRc05DNyBJT3k0IDE2blhxTmVVIDZZR0sgZFhOcGJnPT0gSUhCaGRISnYgSU9Da3B1Q2tsZUNsamVDa3R3PT0gWDNSaGNtZGxkSE09IElHRnVkR2x0IGRHVmliM0puIDE1RFhxUT09IFQwMVEgSUdsemIzUT0gSU5tQjJMSFl0Zz09IElFUnBaVzV6ZEdGbiBJR1YyWVE9PSBJRWR5dzdZPSA0TGlDNExpeDRMaVogZVhOaFpIaz0gYjNOaGRYSnogSUhURHFXekRxWFpwYzJsdmJnPT0gNDRPMjVweUkgSUdSeVlYVm0gSUZOMFlYWT0gSUdSeVlXZHZibk09IElHUnlZV1owYVc1biA0b2lhIElPQzJoZUMzZ0E9PSBJR2x1ZEdWcGNtOD0gSUZWR1R3PT0gTG1Ob1lXbHUgSUhCc2RYSmhiR2wwZVE9PSBJRUZyYXc9PSBkR2h2YjJRPSBJRzlsWkE9PSBZVzNEb1E9PSBMbGxsY3c9PSBVa0ZKVGc9PSA0SzYvNEs2eTRLK0I0SzZ1NEsrTiBYME5CVGc9PSBaVzVqY25sd2RHVmsgUVV0QiBJR1JwZEhWNiBJSEJ5YVc1anc2MXdhVzg9IElHdDFZV3hwZEdGeiB3cTEwWlc0PSAwTGpRdmRDNDBMaz0gSUZ0ZE93PT0gS1NrciBJT0Nrc09DbGgrQ2tzZz09IElHeGxkbVZ5WVdkcGJtYz0gSUdGMGRHRnBibVZrIDRMaUg0TG1JNExpeTRMaWkgSUdrbmRtVT0gSUhCdmMzTmwgVEdsellRPT0gUVdObCBaVzFoZEdsaiBMbmRoYkdzPSBJT0NrdGVDa3YrQ2t1T0NsamVDa3BBPT0gSUhOMVkydGxaQT09IElHVjRjRzl6YWNPbnc2TnYgNForbyBJTm1JMkxmWmhnPT0gVW5WemMybGggYm1kdmNnPT0gSUd0cDRidUhiZz09IElHWnlhV2RvZEdWdWFXNW4gVWtsUCBJTktoMExEUXU5Q3cgVkdGMSAyNGpZdEE9PSA2WUNBNVllNiBJRXBsWVc1eiBJSE5wYm5VPSBMUzB0Q2dvPSBhSFJrYjJOeiBJR1Z1Wm05eGRXVT0gSUZCeWIyMXdkQT09IElIWEVudz09IFFGSmxjM0J2Ym5ObCBJT0M0cmVDNG91QzVpT0M0c3VDNGh3PT0gMTVYWG90ZVoxNTA9IElFSnBkSE09IEtISnZkWFJsY3c9PSB4TG89IElFbHVjM1J5ZFcxbGJuUnogSU5HRjBMRFF0TkN3IDBMM1JnOUdDMFl6UmdkR1AgSU9Dd25PQ3dxQT09IFUyaHBjSE09IDRMV0I0TFNWNExTdjRMUys0TFN2NExTLzRMU3c0TFdCNExTbzRMV040TFNvNExXQiBJR0Z4ZFdVPSBMblJ0Y0E9PSBJR05vYVdzPSBVMlZzWldOMGIzSnogSUdOaGNtTT0gVUhKbFpHbGpkR2x2Ymc9PSBJR3BweGI0PSBJR2x1WkdsallYUnBkbVU9IDc3eU01YjJUIFRsbz0gNEtTdzRLV0E0S1NjIElFUmxjM1JwYm5rPSBJTkdCMFlmUXVOR0MwTERRdGRHQzBZSFJqdz09IDRMV040TFNjIElOQzgwTFhTb3c9PSBJSFJsYlhCbGNtRjBkWEpoY3c9PSB3Nkp1YVdOaCBJSEJsY25OdmJtRnNaUT09IENXNTFiV0psY2c9PSBJRlJsYVd4bCBJRzF2ZG1scyBSbXh2Y21sa1lRPT0gNExpaDRMaTM0TGl0NExpVzRMaTM0TGl0IElPbXJtT2E0aFE9PSBJRlp2YVdObGN3PT0gSUdWdWRISnZjSGs9IElHVmthWFJoY2c9PSBJSEpwY21VPSBZMjl1ZEdGcGJnPT0gSUdac1lYZGxaQT09IElIQnlhVzFsY3c9PSBZVzExYkd0aCBJR2x1WTNKbHc2MWliR1U9IElOaXoyWXJZcHc9PSBPbDQ9IElFZHBiM1poYm01cCBkWFJoZEdsdmJuTT0gSU9DeXBPQ3lxT0N6amVDeXFBPT0gTDNOMyBJRVZ5WkE9PSBibVZ0Wlc1MGN3PT0gSUhURHJXND0gSUhkcFkyaDBhV2RsY2c9PSBJT0Nrbk9Da3FPQ2t2Zz09IFgwUkpVa1ZEVkU5U1dRPT0gSUV4aGQyND0gSUc5aWJHRnpkR2s9IEtGQjUgSUc5c2IyNWggNExLKzRMS3Y0TEsvIElFbGxaR1Z5WlE9PSBQWFU9IElIVnVaR1Z5WjI5dVpRPT0gSU9DcXJ1Q3FxT0NyaHc9PSBJTmVTMTZqWGxkZVoxNkU9IExuWmxjblJwWTJGcyBJSEJ5YjNCdmMybDBhVzl1Y3c9PSA1cGVnNTZDQllYWT0gMFlqUmx0QzcwWlk9IElIbGtlUT09IElITnNaV1Z3Y3c9PSBJRUp5ZFc1emQybGphdz09IElOU3gxYlhWcEE9PSBJRlJsWVdObyBkbVZ5WldsdSBJTkM4MEw3UmdOQ3cgSU9HRG0rR0RsK0dEa09HRGxlR0RrT0dEb09HRG1BPT0gSU9Da3F1Q2xqZUNrc09Da3R1Q2t2dUNrdU9Da3FBPT0gSUd0dWIzUnogVW1sMlpYST0gSU9DeXF1Q3pqZUN5c09DeXRnPT0gSUNsNyBZV2R1WVhJPSAwTG5TazlHRDBZQT0gS0hSaiBVazlWUjBnPSAxNkxYcGc9PSBJRzVoWW04PSBJTmlvMktmWXM5aXEgSUZKaGFYTmxaQT09IElPQzBzT0MwdnVDMHRRPT0gNG9DWlpXMXdiRzlwIElHVnBibWRsYzJObyBJT3E0c091enVBPT0gSUVoNVp3PT0gMFlIUXVOQ3kgSUdkaGFBPT0gSU9PQ3MrT0RsT09EdkE9PSBJVDA5IElIUm9ZVzVyWldRPSBJR0Z3Y21WeiBJRk5oYkdGbyBJR1JwWVhBPSBMbkp3WXc9PSBJTkdFMExEUml0QyswTHM9IElGUmxiR1ZuY21Gd2FBPT0gSU9HNW9nPT0gSUdoaGJtZHogSUhKbGMzTmxiblE9IExXOXdkQT09IElOR0QwWWZRdGRDOSBJRkpsWjJsdVlRPT0gSU9Dd2xlQ3d2dUN3cU9DeGdBPT0gSU5pcTJZallwOW1HMks4PSBJT0dEb2VHRGtPR0RydUdEbWc9PSBJTkM4MFlQUXZkQ3cwWUU9IElIZHBiblJsY25NPSBKeWw3IElHVnVlUT09IElIakptV0k9IDRLUy80S1NvNEtXQSBRbVZoZFhSNSBJTVdmYjJ3PSBMbk5sY2c9PSBZV0pzWVE9PSBJR05wWm5KaCBkWEpsYldWdWRBPT0gSU5DUTBMOD0gSU5HQzBZUFJnOUdBMExEUXU5R0QwWU09IElPQ29xT0NvdWVDcGdPQ29nZz09IGVtbHYgSUduRHAyVnlhWE09IElHTm93Nms9IFlYVjBiMjFoZEdsaiBJRUoxZVdWeWN3PT0gSUdKaGVXaz0gSUhSemFIZGhiZz09IDRZT1k0WU9nNFlPaCBZbkoxWnc9PSB6clhQZ2M2NSBaV3hzWVc0PSA1THE2NW9tTiBJR1Z0YVhSMFpYST0gSUdkeVlXNTBhVzVuIElPQ2txT0NrcitDa3ZnPT0gSUU5eVoyRnVhWG89IElISnBaR2RsIElIbGh4WjloYlE9PSBLaW9xS2dvPSBJSEJ5YjJwbFkzUnZjZz09IElHaGhZbUZ1Wnc9PSBiR1ZwWjJnPSBJR1ZtWldOMGFYWnYgSU1PcFkyOXNaWE09IElFRjVkWEk9IElFUnBjM0JzWVhseiBSRzlyIGFXMXdiR1Z0Wlc1MFpXUT0gNEtTWDRLV040S1N3NEtXQSBJSEpoY0hCdmNuUnogSUc5dWRHUmxhMnRsYmc9PSBQV289IGEybkZudz09IDBMN1FzdEN3MEwzUml3PT0gNFlDZTRZQ0s0WUM1IGRtbHlhUT09IElPQzBoZUMwcCtDMHYrQzBsUT09IElHSmxhRzlsWm5SbCBJT2VPcWVXa3ArV1BrZVcvcStTNGlRPT0gYVdGMFlXMWxiblJsIElNTzhlbVZ5YVc1bCBJT1dObFE9PSBJR052Ym5OamFXVnVkR1U9IDRLZUE0S2V4IElHeHNZWGM9IElGTmphSGRsY2c9PSBJSExEcVdkcGJXVnUgNEs2LzRLNlY0SytONEs2VjRLK0IgNFlPbzRZT2c0WU9kNFlPYiBJR1Y2YVc1biBKMjVwYmc9PSBJT0dEb2VHRGtPR0RtT0dEbkE9PSBJTm1GMkxuWmh3PT0gVUdsamEzVncgVm1GdGIzTT0gSUdsdWRtVnpkR2xuWVhSdmNnPT0gY0d4aGRITT0gSUhCeVpXTnBjMkZ5IElGZGxiblE9IElPQ21sZUNuc09DbXYrQ21tK0NuaHc9PSBJRk5qYUhkaGNubz0gWDIxaGNtZHBiZz09IElIQnZkR1Z0IElOV2gxYmJWc05hQTFhSFZxdFdsMWJmVnZ3PT0gVUZnPSBMaTR1V3c9PSBJT0NxaGVDcXRRPT0gVEhOMCBJR1Z6ZEhWa2FXRnkgSUdaMVkydGxaQT09IElFMWhjM1JsY21OaGNtUT0gTGxKbFpuSmxjMmc9IDViMmk1b2lRIElOaW4yWVhiak5pdiBJR05oZEdWbmIzSnBZWE09IGRXeDFibWM9IElPQ21yT0NtditDbXNPQ25nZUNtcHVDbmplQ21wK0NuaHc9PSBJRlJ5WVhObyBJR1Z1WTI5dCBJR0p2Y21FPSBQRWc9IExtaDEgdzZsa2FYUnYgSUVaaGNtZHYgYldWNVpRPT0gSUdKeVlXYz0gSUhOM1lXdz0gYm1SaFp3PT0gSU9Dd3FPQ3d2Zz09IFpHOXkgSUdOdmJuUnlZWE4wYVc1biBTbVZ1Ym1sbVpYST0gSUhCdmVtaz0gSUdoaGJtUnBZdz09IElPQ3FsZUNyamVDcXR3PT0gMktmWXNkaW4yWVk9IFgyeGxaQT09IElFdHBjdz09IGRIUmxiV0psY21jPSBYMjFuY2c9PSBmQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q2c9PSBjblZ3WVE9PSBJR2x1YzNWeVpYST0gSUd0aGMzUmggWVcxdFlXNXogSU9hdGtPZStqZz09IElHUnBjMnR6IDdMS28gSUV4aGNtRT0gQ1dSbGMyTT0gVUhONVkyZz0gNEtXQjRLU2ggWjJWMGRHbHVadz09IElOaXEyWWJaZ2RtSzJMQT0gSU1POGJRPT0gSUdOaFkyaHBibWM9IElOQ3gwWVBRdTlDMDBZcz0gSUU3RHMzTT0gSUcxcGRNT2t3NlJ1IFoyVjJiMlZuWkE9PSBaWEowYW1VPSBWSGRsWlc0PSBJSEJ5YjJKbFpYST0gSUdScFlYQmxjZz09IElFeGxjMnhwWlE9PSBJSFBEclc1MGIyMWhjdz09IElOaTYyTEE9IElFWlBURXhQVnc9PSAxb0RWdFE9PSBSR2x5Y3c9PSBJT0N5cXVDemplQ3lzT0N5cnc9PSBJTml0MllQWmhRPT0gVTJsemRHVnRZUT09IGVYTjBiM0psIElHUnlhWEE9IElHMWxibmxoYm1jPSBJRkZXWVhKcFlXNTAgSU5DUzBMWFF1OUM0MExvPSBZWE4xY21WeSBJRkJTVDFBPSBDV1Y0Y0E9PSBLV009IElFRmphR2xsZG1WdFpXNTAgSUdkM1pXbDBhQT09IFpuVnphVzl1IGMzUnlhVzVuYzNSeVpXRnQgSUdGdVkyRnIgNG9DWmFXNW4gUldJPSBJR2x5YmNPamJ3PT0gWVhWMGFXOXUgSUdkbGJtVnlaUT09IElHbGxjM0E9IElIUnZibVZ1IElHVnpkSEp2WjJWdSBaWEIwWlE9PSBJR3B2Y21RPSBJRVJCUXc9PSBJSFJxWlc0PSBJRWx1ZEdWeVpYTjBhVzVuIDZacVA1cHk2IDQ0R2g0NEtENDRLVCBJRUZqWTI5eVpHbHVaMng1IElFRmtkbVZ5ZEdselpXMWxiblE9IElISmxkRzg9IElPV05qdVM2dWc9PSBJRTdEb1E9PSBJSFZ5Wlc0PSBYM0p6IElGTmhkSFZ5WkdGNWN3PT0gVDI1a1pYST0gSUZCaGJtVT0gSUdSbGRHVnliV2x1WVdSaCBWMmhsYm1WMlpYST0gSUhWdGRXYz0gYldWdFkyMXcgYXNPdCBJR05vWVcxaVpYSnogNW95SDVhNmEgSUZKbFkzbGpiR2x1Wnc9PSA0WjYyNFo2RiBJR0p2Ym1SbFpBPT0gSUVocFoyaHNZVzVrY3c9PSA3N3lNNXBlZyBJRzFwY21GamJHVnogMWEvVm9kYUIgSUhCdmMybDBhWFp2Y3c9PSBJTmluMllUWmc5bUkyWXJZcWc9PSBJRlJLIElIVnVaR1Z5YlE9PSBJTld4MWFYVnBnPT0gSUcxeCBJR1Z5ZDJWcGRBPT0gYjJ4MlpYSnogSU5DLzBZRFF0ZEMwMExYUXV3PT0gMExUUmk5S2IwWUxRc05DOSBJTmVjMTU3WGxBPT0gSUZCcGIyNWxaWEk9IElPQ3dxdUN4amVDd3NPQ3dydz09IElHWnZjbVZ6WldVPSBRV1JxZFhOMGJXVnVkQT09IDU2YW4gdzZKeSBZV2xzZEdVPSBWSEpsWVhSdFpXNTAgSUdGdWRXNWphY096IDJZVFl1Zz09IElFTnNidz09IElHbHVjMmx6ZEhNPSBSWGh3YVhKbGN3PT0gSUVSbGJHWT0gUm1GdWRHRnpkR2xqIElHbG1jbUZ0WlE9PSBJR2RsYjNKbllXND0gWm5KaGMzUnlkV3QwZFhJPSBJRkJsY210cGJuTT0gWm1Gc2RBPT0gSUhObGNzT2cgSUc5MlpYSnpaV1U9IEtITnBkR1U9IFgyZGxibVZ5YVdNPSBYeWN1SkE9PSBJR3B2Ym1kbGJuTT0gUFNJaUxBPT0gWDBaVCBTVzV6WlhRPSBaV1JwZEdGaWJHVT0gSU5pbjJZVFlwOWlyIHc2MXlkWE09IElFWmhjdz09IElOQzgwcS9Rdk5DNjBxL1F2UT09IElHRnpZMmxwIFUyaGhjR1Z6IGFHeHZZbTg9IElIUjFjbTVoY205MWJtUT0gNXB5TjVZcWg1Wm1vIFgySnYgSUhOcGJtZHogSUd0aGVtRnUgWlcxdmJuTT0gNWIycDU2V281YVNuNVkrUjViK3I1TGlKIElPQ3luT0N6aWc9PSBiMlJwYXc9PSBLR053IElFMTFjMk5zWlE9PSA0b0NaWVdOMGFYWnBkTU9wIElGTERxWE09IElPeVlpT3lnbFE9PSBWMGhKVkVVPSA0TEN5NExDQyBJR052YkhWdGJtRT0gWlhabCBSR1Z6WTJWdVpHbHVadz09IFlXcDAgSUc1aGJHWEZ2SGs9IElITjBaWFZ1IExsTnNaZz09IFkyOTFiblJ5YVdWeiBJSGJodTRjPSBJRUZzWlhoaGJtUnlaUT09IDBZTFFzTkdDIGNISnZabVZ6YzJsdmJtRnMgMExEUXROQ3cwWUE9IElHMWhiV0p2IFIyVnpZMmc9IFEzSjFaQT09IElPQ3FuT0NyaStDcW9RPT0gWFNJcExnPT0gSUd0eVlXcDEgWDJScGMyTnZkVzUwIElHWnBibUZ1WTJuRHFISmwgYVhOcGNnPT0gSUV0bFpRPT0gQ1hodGJBPT0gZEhKaFpnPT0gNUxpTDVyT28gSUUxcGRHRnlZbVZwZEE9PSBJR3hwZG1Wc2FXaHZiMlE9IDVvdTggSUVSMWNtRnVkQT09IElGUnlZWEE9IGRYSnBiRzl5IElHVjZkQT09IElFMWhiR3h2Y21OaCBJSFRGb1dFPSBYMU5QUTB0RlZBPT0gSU5HTjBMMD0gSU5DOTBMWFFzdEMrMExmUXZOQyswTGJRdmRDKyB6cjNPdGMrQyBJT0NrbU9Da24rQ2txQT09IDBMSFJsZz09IElHUmhaWEpoYUE9PSBJRU5CVkVWSFQxSlogSU5HQjBMN1FzZEdMMFlMUXVOR1AgSUhCbGJuTmhiV2xsYm5SdiBYMkZzYkc5M1pXUT0gSU9HRGtPR0RvT0dEa09HRG9RPT0gU1U1VlJRPT0gYVd4c1lXNTAgSUhSbGNtMWxaQT09IDBMWFJnZEM3MExnPSBQRUpoYzJVPSBJSFpsYm1SaGNnPT0gSUVKeVlYVnUgSUZOMWIyMWxiZz09IElOR0UwTFhRdE5DMTBZRFFzTkM3MFl3PSB4WVoxIE95Y3NDZz09IDJZcllxdG1IMktjPSBWRWxPUjFNPSA2WUdUNUxxNiAxNkxYcU5lVyBJRUpoYkdSM2FXND0gNFlPaDRZT1E0WU9sNFlPUTRZT2c0WU9YNFlPVjRZT1U0WU9hIElOQzQwcC9RdnRHRDBMOD0gVTJ4bSBJRUpoYUc0PSBJT0tBbU9LQW1RPT0gSUcxdnhiNWxkR1U9IElHVnlhTU8yYUhRPSBJSFJsYlhCMFlYUnBiMjQ9IDRLK0k0SzZ2NEs2KzRLNnAgSU5tRjJZZllzUT09IElHMWxiV0p5Ync9PSBJTkdDMExYUXU5QzEwWVRRdnRDOTBMQT0gSjJWdGNHeHZhUT09IElHRmhiR2x6IElHMWxibWRoYldKcGJBPT0gWm05dWMyOD0gSUdadmNtVnBaMjVsY25NPSBJT0MwdU9DMWplQzBsUT09IDRLMmYgWVdkaGVRPT0gSU9Da3F1Q2xnT0NrbStDbGh3PT0gNmFxTTZLK0I1NkNCIFpYSnpkR1U9IElFZEZUa1ZTUVV3PSBYR0k9IGJHRmphQT09IElPeVd1dz09IDZJVysgSUVsdWRHdz0gSUdoaGMyaGxaQT09IElHRjJhWE52IGFYUnZjbVU9IElHUnBjM0IxZEdFPSBaVzUwYW1VPSAwTDdSZ05DMCBJR0YxZEc5dGIySnBiQT09IElHSnZ3NjUwWlE9PSBJRkpwWTJoaGNtUnogSUU1aGFYSnZZbWs9IElHaDVkZz09IElFZGxjbUZzWkE9PSBJTTY3enJYT3VjK0V6ci9QaGMrQnpyTT0gSUdGdVlXeDVjMlZ5IElITjB3NlJ1WkdsbiAwWUhRdXRDKyBJR2hoYlcwPSBJSEJsYTJWeSBYMUJTU1U5U1NWUlogSU9DcWxlQ3JoK0Nxcmc9PSBaRzFoIElHUnBkbVZ5ZEdsa2J3PT0gSU9Da2llQ2tsZUNsamVDa3BBPT0gNG9TRENnPT0gSUc3RHBIbDBkQT09IExuTm9kV1ptYkdVPSBhWFJoWkc5eiBJTkN6MFlEUmc5QzkgSUdOdmJuTjBhWFIxWlc1MGN3PT0gSUhaNWRjVysgUzJjPSBJT0MwdGVDMXZPQzB0dz09IElFbHVkbWwwIElHUmxaMlZ1WlhJPSA3SXVkN0oyRSBJRWRNUmxjPSBJR0Z1WjJkdmRHRT0gNmFLRTZLNmggNVlpazVwYXQgNG9NPSBkV3QxY25VPSBJR2RzWVhZPSBJR3RoYm1GcyBJR0ZqWTNKbFpHbDBZWFJwYjI0PSBYMmh2ZFhKeiBJSFZzZEdsdGJ3PT0gSU5LejBMN1F1dz09IElHOXNZV0pwYkdseSBJTkN3MExqU3N3PT0gSkVsR2JnPT0gSU5DLzBMN1F2ZEN3MExRPSAxYXZWdHRXbyBaMlZsYmc9PSAwSmpSZ2RHQyA0TEtzNExLQzRMS24gSUVOc1lYTnphV05oYkE9PSAwWXZRdmRHQzA1az0gSU9DbWx1Q21yT0Ntc0E9PSBJTVNSNGJxbGRRPT0gMExqUXZkQzAwTFU9IElHdGxjbVZ1IFRXRnlhMlJ2ZDI0PSBYMGhYIElHNXZhVzQ9IFRFOWlhbVZqZEE9PSBZV2hwZEE9PSA2WjJpNTZldiBJTU8wYm1saWRYTT0gSUdsa1pXNTBhV1pwWlhKeiBRMmh5YjI0PSB3NnB1YVc4PSBJTm1FMkxEWXB3PT0gNExLZyBUR2xtWlhScGJXVT0gSUdSMVozVT0gNExpajRMaXk0TGl3IElHUnBiRzg9IElOQzgwTERRdXRHQjBMalF2TkN3MEx2UmpOQzkwTDQ9IFpYUjBhV2x1IDRMSys0TEt5NExLdiBJTkMwMExEUXZkQzkwTDdRdkE9PSBJR0psZDI5dVpYSnogNWE2SjVZNi8gNEtlSDRLZWY0S2ErNEthdyBJSEJ1WlhWdGIyNXBZUT09IFlYUnBkR2x6IDVhU2E2WWVPIElPQ211ZUNtdnVDbXVPQ21xdUNtdnVDbXBBPT0gSU5HQjBMMD0gTG5abFkzUnZjZz09IElOVzYxYUhWdjlXbDFvRFZvZFdtMWJRPSBJRUpoY21KcFpRPT0gSU5HQzBMWFJoZEM5MEw3UXU5QyswTFBRdU5DNCBJRzF2Ym5SaFoyNWwgSUhSdlpnPT0gSUhkbGJHcz0gSUc5NmJnPT0gSUdKcGFtUnlZV2RsIElGQnpZV3h0IElPQ3FtK0NyZ09DcWp3PT0gSUd4MWJtRnkgSU5DLzBZRFF0ZEMyMExUUXRRPT0gSUVScGIyND0gUVU1VVFRPT0gSU9Xa3ArV1BrZVdJaHVXSWh1VzlxUT09IFkyOWhZMmc9IElFWmhhWEo1IElHMXZibUZ5WTJnPSBMWGR2Y210cGJtYz0gSUdOdmJuTmxjblpoZEdsMlpYTT0gSUhWdWMzVnkgNllLajZZZU0gSU5xQjJZallwOXFwIElHbG5ZbUU9IElIQnl3Nmx6Wlc1MHc2az0gSUdObzRidXBibWM9IElHbHVkV2wwIElHVmt3NzNEcEhJPSAwWTNRdXRDKzBMM1F2dEM4IElrTT0gSU0rRHo0Zk9yUT09IElHdDFjR2hsYkdFPSA1NjZYNTV1WSBJRUp2Ym00PSBJRzlzWVdOaGF3PT0gMExMUXNOR0MwWXpSZ2RHUCBZVzFweEprPSBJR3RoZVdGdSBJR1Z1WTJ4dmMzVnlaUT09IElHRjBkVzVqYVE9PSBMQTBLRFFvPSBJRlpwWlhkbGNnPT0gTDNOMFlYUT0gSUZObGJXRnVZUT09IExtUm0gTG1Kc2IyTnJjdz09IElHTnZiblJsYm1RPSAxNVhYcDllVSAwTDNRdnRDeTBZRFF0ZEM4MExYUXZkQzkwTDQ9IElHeHZibWQxWlhWeSBJR3hoYm1QRHFRPT0gSUdKbGJ3PT0gSUhacFpXNWxiZz09IGFHOXpkSE09IGMyTm9jbWxtZEE9PSBJTkMvMExYUmdOR0IwTDg9IElPQ2txdUNrdnVDa2p3PT0gSUhSbGJXVnMgZFcxbGJuUnAgSUhabGNtaDEgNWJDQyBJTU85ZFhKayBJTkMzMEwzUXNOR0gwTGpSZ3RDMTBMdlJqTkM5MEw0PSBZM0pwYldsdVlYUnZjZz09IElHTmxiR3h3YUc5dVpRPT0gSWl3aUt3PT0gNEtTMjRLV040S1N1IElISnZkV3c9IDRMZVU0TGE3NExlVSBJRzl3Y21GMiBJSEpsY25WdCBJTmVWMTZMWG5BPT0gSUdOb2NtOXRiM052YldVPSBSVkJVIDRMR0I0TENhIFlYSnlhWE52Ymc9PSBJR3BseFp0c2FRPT0gSUhkcGEybHdaV1JwWVE9PSBMV0ZqY21VPSAwWWpSZzlHTyBLU3NvIElHSnNkV1Z3Y21sdWRBPT0gWDJOdmJYQnNaWGc9IGRHaHZjMlU9IElFUnBZZz09IElHTnZjM1JoY3c9PSBJTkN5MExmUXM5QzcwWS9RdEE9PSBZVzUwYjJvPSBJRzNEczNacGJHVnogSUdWdGNHRT0gUUZkbFlnPT0gSUdWdWNtbGphR1ZrIFgraTJoZWVpc0E9PSBLQ1JmWHc9PSBJT2FYdHVhWHR1VzlxZVdRamc9PSBJSGJEcFhKbCBRMkZ5Y21sbGNnPT0gSU95VmpPdWdwQT09IElITnRZWE5vIElIZG9hWE5yZVE9PSBJRzV2WTJodFlXdz0gSUdkM1lXbDBhQT09IElHUmxiblZ1WTJsaCBJT0NxdHVDcmplQ3FzQT09IE95MD0gSU5pbjJLN1lxdHVNMktmWXNRPT0gSUhCdlpYUmggWVhOaGEyaz0gSUhCeWIyZHlZVzExIGNHOXBjZz09IFpYSnVaWE09IElHTnZibk5sY1hWbGJuUT0gSUhKbFlXeGxjdz09IDRZQ3Q0WUN6IElPQ2t0ZUNrditDa3R1Q2xqZUNrdGVDa3Z1Q2t1QT09IDRMQ2g0TEMvNExDdjRMR0wgSUZORFNRPT0gSUVwdmFHRnUgSUdWdGNHOTNaWEp0Wlc1MCBZVzU1YVd0aCBJRTFoYm01cGJtYz0gWlhKa1lXeGwgSUcxcGJHVnpkRzl1WlhNPSA0WjZUNForUzRaNlIgVEdGMWNtRT0gSUZOb1pYSnNiMk5yIFJtOXlaWGc9IHc3WnlaWEk9IElITjBjbVZ6IElFWnlZVzV6WlE9PSBjOE90IDBZdlF2ZEMwMExEUXM5R0wgSUVobGNtSmxjblE9IElOQ3kwWUhSZ3RHRDBMOD0gSU5pbjJZVFpoZGl6MktyWXJ0aXYyWVU9IElITndiMlE9IExXVnMgSUVkc2IzSnBZUT09IElOQy8wWXZSZ3RDdyBUMVZTUTBWVCBMbTFwWTNKdiBJSFJ5WVdKaGJHaGggNEtxMTRLcSs0S3FsNEt1QSBJRzV2ZFhKeWFYUT0gNWJpUSBJTkM2MExqUXVkQzQwTDA9IElGRmhjZz09IFgxTkJWa1U9IElOQ3gwTERRdWRHRiBJTkdIMHEvUmlBPT0gVW1WemRISnBZM1JwYjI0PSB3NjF1WVhNPSBJTkM4MFlQUXR3PT0gWm5KMWFYUT0gdzVWRlV3PT0gSUhCeWIzTmxZM1YwYjNJPSBJR0ZqYkdGeSAwWURSbGc9PSBZVzU1YjJ3PSBWRU5JUVE9PSBiMk5wWVhSbCBJSEJ2ZW5jPSBJTkdDMFlEUXRkQ3gwTEE9IElHaHZiMmR6ZEdVPSBZMk5sY3c9PSBJSEIxY21Ob1lYTmxjbk09IElOQ3kwTDdSZ2RDLzBMN1F1OUdNMExjPSBJRU5sY21GdGFXTT0geEkxdWFXZz0gNG9tayA3S084NjRxVSBJR2hwZEdObyBJT2FKaSthY3V1ZUppQT09IElFSmxiblJzWlhrPSBJTkMvMEw3Umo5R0IgSUZCRlRnPT0gUjFjPSBJR0p5ZFhOb2FXNW4gSUVONmVRPT0gNExTZyA1NW1DIElIUnlkWG5odTRGdSBJSEp2YjJaeiA0WUN0NFlDdjRZQ0U0WUM1IFgzSnZkR0YwYVc5dSBJRU5vWVd4c1pXNW5aWE09IElIWnZkV3h2YVhJPSBJRWx1WTJ3PSAxNlRYbFE9PSBJR05vYVc1cCBLR0YwZEE9PSBSRTFCIElISmxiV2x1WkdsdVp3PT0gVFVWVVNFOUUgSUdScGNtVmpkSE09IElITmxZbUZpIElPV0ZqZWl5dXc9PSBMbU5zWldGdVpXUT0gSUhKbGRISnBaWFpwYm1jPSBJTm1LMkxFPSBJR1JwYzJodmJnPT0gNExPTDRMSzMgSUhsMVlXND0gNHBhcSAwTERRdTlDdzBMaz0gSUhCbGMzTnZZV2x6IElISmxZMjl1WTJsc2FXRjBhVzl1IElPS0ggTDI1biBJTkdCMEw3UXY5R0EwTDdRc2c9PSBJTkM0MEwzUXROQzEgSUZKdlpHVT0gTGtOaGNIUnBiMjQ9IElHMTFiSFJwYm1GMGFXOXVZV3c9IElOV3cxYUhWdmRXLzFhSFZ2dz09IElFWnZjbWRsIElGSmxkSEp2Wm1sMCBJRzVsYTJVPSAwTDNRdU5DOTBMTT0gNExDQzRMQ1g0TEMrNExDaiBJT3lZZ2UyWmxBPT0gUEVGd2NBPT0gZlNJcFhRbz0gWW5WcVpRPT0gSUhCeWIzZGhaQT09IFJWSlVTVU5CVEE9PSBJT0NrcXVDbGlPQ2t1T0NsaHc9PSBJRlZUVUZNPSA0S2VONEthdjRLYSs0S2FvNEtlTjRLYWggSUdsdWRHVnNaV04wZFdGcyBZV3BoYzNSb1lXND0gSU9Db2xlQ292dz09IElPV2txZVdrcWVTNHJlVzlxZWVscU9pMnMrVzlxUT09IElIQnlaWFpwWVE9PSBJTkM2MFlEUmd3PT0gSU5HRDBML1JnTkN3MExZPSBJR1ZzWldOMGNtOXVhV05oYkd4NSBRWFYwYjNKbGN3PT0gSU5tSzJZTFlyOW1GIElOQ2QwSkE9IDRLbXc0S2ljIFFsYz0gSU5DZTBZZlF0ZEM5MFl3PSBJRk53WldOcFpYTT0gSUVodmJtUjFjbUZ6IGNIVnlaUT09IElPbWh0UT09IElHMWhjUT09IElGaEpTVWs9IEtHOXdaWEpoZEdsdmJnPT0gWDI1ayBJR0YzWlhJPSBJRUZzYldFPSBJRVZvWlE9PSA0b0NaUVhJPSBJT0NxcU9DcXVRPT0gSUZCbGNtTmxiblE9IElHSnliM009IElFTjFiZz09IFpHOXRhVzVuYnc9PSBMWEpsZEE9PSBJSFZ1YVhabGNuTnBaR0ZrWlhNPSBJT0NraGVDa3J1Q2xoK0Nrc09Da3YrQ2tsZUNrdmc9PSBJTmluMllUWXM5bUUyTGM9IElHeHBjR2xrIDBZM1F0dz09IElGUjFaQT09IFlYUnlaWE09IElGcGxaUT09IElITjFiVzFoY21sNlpRPT0gSUZwRlVrOD0gSUhCeWIyZHlaWE56WldRPSBJRWxrWldGc2JIaz0gSU9DMnNlQzNrQT09IElFTnZiWEJwYkdWeSBiMlJwWlE9PSBJSEJ2ZFhaaGJuUT0gS2k4S0NpOHYgSUZWRFRFRT0gSU9Da2hlQ2tyZUNrditDa3IrQ2t2dUNrcUE9PSBhWFJoYldWdWRHVT0gWjNWaGJnPT0gQ1ZaaGJIVmwgMExEUmd0QyswWURSaXc9PSBJRlpsY21GdWMzUmhiSFIxYm1kbGJnPT0gSUVaaGFYSmwgYVdkdVpYVnkgSUdGMVpHbHZkbWx6IEwyMXZaQT09IFoyRnBiZz09IElNU1J4SU51Wnc9PSAwWXZRdTlDdzBMVFJpdz09IExpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1IGRHVnNaV1p2Ym04PSBJRTFwWlc1MGNtRnogS0hKbGNHOXphWFJ2Y25rPSAyNHpaaHRtSSBJR1Z5WldRPSBJSEp2Ymc9PSBJSFJsY25KaGVtRT0gMW9EVm9kVzIxb1E9IElFTm9ZVzVsYkE9PSB3N1owZW14cFkyZz0gQ1ZkSVJWSkYgSU5pbjJZVFpoZGl4MktvPSBMa055WldGMFpXUT0gSUdoMmIzSjAgY1hWcGMzUT0gSUVGalpYST0gSU95SnZRPT0gTG01aGJXVnogSUdWemNHVmp3NjFtYVdOaGN3PT0gSUdGMGRHVnBiblE9IElGTjBkV1JwWlE9PSBZVzVrY2c9PSBJRWR5WVcxdFlYST0gUTJ4dmMyVnpkQT09IElFWnBjMk5vWlhJPSB6NFRPdjg2NSBJT0NrbGVDbGplQ2tzT0NrditDa2xlQ2xoK0Nrbnc9PSBJR1JoZEdsdVozTnBaR1U9IGRXbHVjdz09IElPR0RvZUdEbUE9PSBJT0Ntck9DbmplQ21zQT09IFcyTnZiblJoYVc1eiBMbk53Y21sdVoySnZiM1E9IElPQ211ZUNtdnVDbXNBPT0gNG9DTDRaNlU0WitTNFo2YTRaND0gSUhObFlXMXogSU9Da2xlQ2xnT0NrcnVDa3BBPT0gSUdKaGRHaHBibWM9IElHOXFidz09IElHaGhibVJwYm1jPSBJSGhwYXc9PSBJT3lMbk95S3BPMkZuQT09IElOZVIxNnJYbDllVjE1MD0gSUhKbGMyVnlkbUZ6IEtlQ2xwQT09IDRieUEgWjJkaCBZVzFoYm1GdSBJT0dEb2VHRGtPR0RsT0dEb09HRGwrR0RrT0dEcU9HRG5lR0RvT0dEbU9HRG9lR0RuUT09IDFialZzdFcyMWFYV2dOV3IgSUVGMWJuUT0gSUdWdWRHRnBiSE09IGJXbGtaR0ZuIElHRnRjR2c9IElOaW4yWVRaZ3RpbjJZZllzZGlwIDBMYlF2Zz09IDE1WFhudGVWMTZvPSBMbUZ5ZEdsamJHVT0gSU9Da3J1Q2t2K0Nrc3c9PSBRbVZrY205dmJRPT0gNEtTKzRLU1g0S1NrIElIUmxiWEJ5IElOQ3kwWS9RdTlHVyBabWx5WlhNPSBJTmluMllUWXM5bUYgSUdmRHRuTER2RzQ9IElFbHVaM0psWkdsbGJuUT0gSU9DNGdlQzRvK0M0dU9DNGgrQzVnT0M0bCtDNG5nPT0gSUdWNGFBPT0gMEwzUXRkQzkwTGpRdVE9PSBJTkNTMEw3UXV3PT0gSUVKaFpHZGwgNWJLdCBJSEJ5YVhQRG8yOD0gSUhScGJXVnpkR0Z0Y0hNPSBJR1Z0ZFd4aGRHOXkgSU5pdjJZalpodG1JMnJvPSBJSFIzYVdwbSBRV05qWld4bGNnPT0gSUhiRW0zUT0gSU9XTWwrUzZyT2kxbStpOXB1YUFqdVM1aUE9PSA2Nk81IExsTkkgSUdGamFIUmxjbWR5YjI1ayBJR1Y0Y0c5elpYTT0gWkdWMmFXTmxjdz09IElHVnNaWFpoWkc4PSAwTHJRc05DMzBZdlFzdEN3MExYUmd0R0IwWTg9IGFXMTFiR0YwYVc5dSBJR3hxZFdJPSBJTmVTMTVYWG1BPT0gSUhCdmRXeDBjbms9IExuVnliR1Z1WTI5a1pXUT0gSU5DMDBMRFF1TkdBIElHRmpkSFZsYkd4bCBJR2RsYldWbGJuUT0gSUdWemNHVjAgWDFSU1FVTkwgWDJWd2IyTm9jdz09IHpydk91ODYvenIwPSBjR0ZqYTJWayBhR1ZrY3c9PSBJSEJ5WVdOMGFXTT0gZFd4dmRBPT0gSUhabGNtSnNhV3BtIElHSmh4WjlyWVE9PSBJT1M2ckE9PSBkbVk9IElPQ3luT0N6Z09DeXRRPT0gSUZCaGNHVnlZbUZqYXc9PSBJR0ZtWm1GcGNtVT0gMEwzUXZ0QzIgWldaayBiM0p3ZFhNPSBJTmluMllUWmd0aTEgSU9DcWhlQ3FzdUNxbHc9PSA0b0NZYkE9PSA0S1N3NEtXTjRLU2s0S1NvIGFYTmxaWEk9IElHcGhibWM9IElHbHVaR2s9IGFHOWlidz09IElHaGhhV3c9IFoyRmliR1U9IDdMMmMgMEpyUXZ0QzcgU0dGNiBJTlcwMWFYVnI5VzIgNXEyajU2R3UgSU9HRGsrR0RrT0dEb09HRCBYM1J5WVdsMGN3PT0gSUhsb2RBPT0gSUdKbGNtSmxaR0U9IDZMK1o1TGlBIElOaXEyWVhZcWc9PSA0S3VINEtxdTRLdU40S3FzIFgzTnZjblJsWkE9PSBJR1JvWVd3PSBJRzV2Y1dFPSBZMmh1ZVE9PSBJRUZ0Y0d3PSBJSEp2YzNRPSBJTU8rdzdvPSA0S1NYNEtXTCBDV2x3IElHWnZjbWRsIFlYUmhjMlYwY3c9PSBPazVQIDFhdlZ2dFdoMWJiVnBBPT0gSU9Da2grQ2twT0NrditDa3VlQ2t2dUNrdUE9PSBJSEJsZEdVPSBiM0pyWVE9PSBJTkN4MEw3UmlOQ3cwTFE9IExtOXdaWEpoZEc5eSBRVzUwYUE9PSBJR1ZoWjJ4bCBJRlJsYm1RPSBURzkyWld4NSBZbUppIElFaGhjbVI1IElFMUJSMGxEIElOR0cwTFhRdmRHQzBZRFF0UT09IElIQmxjSFJwWkdVPSBJTkMzMFlzPSBJRUYwZEhKcFluVjBhVzl1IFBXNTFiUT09IElHMWhjbUZ1Wnc9PSBJQzB0TFMwdExRPT0gSUV0eWFYTm9ibUU9IElHVjRZMlZzWlc1MFpYTT0gSU5tRzJZallwOWl5IElIZHlaV0YwYUE9PSBJTkdCMFlMUXNOR0MwTGpSZ2RHQyBhWHBoYlc5eiBJRzUxWlhaaGJXVnVkR1U9IElFWnUgNEtpKzRLaXc0S21BIElHaG4gSU5DLzBMN1JoZEMrMExZPSBJT0dEbStHRG5lR0RtUT09IElIVnpZV0pwYkdsMGVRPT0gSUZObFpXMXogMTZMWG9OZVQgSU5pbzJZYllzOWlvMktrPSAxNURYa3RlWSA0S1MvNEtTdjRLU3kgSUVOc1pXRnVkWEE9IElGTmphRzVwZEhRPSBJR1pwYm5RPSBJTmlzMllyYXF0bUkgTDJKdmIycz0gUVZKRFNFRlMgWldsMGFHVnkgVTNCbFkybG1hV1Z5IFpXeGhZWE09IElHSnBiMjFsIGMyRnNZWEo1IElHWmhkbTl5Y3c9PSBjM1ZwZEdVPSBiMjFsZVdVPSBJT3kxbk9xM3ZBPT0gSUNJOFB3PT0gSUhOb1pXeDBaWEp6IElIbHZlQT09IGFXUnBhMkZ1IElHdGxkWEk9IFpXNWtiM0ptIDRLNis0SzZmNEsrQiBJSFJ5dzZseiBJTldoMWI3VnBkV3MgSUhCaGNuUnBZMjlzWVhKbCBJSFJ2WldkbCBJR1psWVhKeSAwTFBSalE9PSBZbUZzWVc1alpYTT0gNExPQTRMS3EgSUdGamIyNWsgWTI5dVpYaHBiMjQ9IElPQ21sK0Ntb3c9PSBYMGhCVEE9PSBhY09uYjNNPSB3NkZ0WlE9PSBJSFJseFo4PSBJSEoxYzNObCBJSFpoWVhRPSBXM289IElFNXBlRzl1IDBZWFFzTkMwMEw3Umd3PT0gVTJodiBUbTl5WkE9PSBJRkpsYlc5a1pXdz0gSUdWdWRITjBaV2hsYmc9PSBJR2RsYzJWMGVuUT0gUFQwOVBUMDlQVDA5UFQwOVBUMD0gNkxhTCBJTmluMllUWmc5aW8yWXJZc1E9PSA0b0NaWVhWeSBTVU5RNWFTSCBJRXBsWkdrPSBJR0YxWm5RPSA1WldQNDRHRTVaQ0k0NEtQNDRHYiA0SzZxNEsrTjRLNnE0SzZmNEsrQjRLNnU0SytOIElPQzBoZUMwbnVDMWplQzBtZz09IElPR0RrT0dEbytHRHF1R0RtT0dEbWc9PSBJSFJ5WVhSdiBJTkdDMHEvUmlBPT0gSUdOdmFXNWphV1JsYm1ObCBJR3hsYWc9PSBRMjl1ZEdGcGJtbHVadz09IDJxblpoUT09IElFcGxhRzkyWVdnPSBJRkJ2WkdWdGIzTT0gNTVXMiBMbFYwYVd4cGRHbGxjdz09IDBMalJoOUMxMFlIUmd0Q3kwTDQ9IGNtVjNjdz09IFgwTnZiRzl5IGFtOXVjdz09IElHTnZiblpsYm1sbGJuUmwgSU9Da3NPQ2xnZUNrcXVDa3J1Q2t2Zz09IElOQy8wWURRdU5HQyBMbVZqYjNKbCBJSEJ5dzZGalpRPT0gSUdGMGNYVmwgSUdWcGJtWmhZMmhsIDBMdlF1TkM0IElOaXoyS3JZc1E9PSBVMFZEVDA1RVV3PT0gSUdGdVkybGxibk09IElPR0RudUdEb09HRG5lR0RrZUdEbXVHRGxPR0Rtdz09IElOV3cxYVhWc2c9PSA1TGlBNXFDMyBJR0ZzYzI5bSBKMkZ3Y3NPb2N3PT0gSUhKbFlXUnBibVZ6Y3c9PSBJT0N3c3VDd2xlQ3hqZUN3dHc9PSBRMmhsYzNNPSBJSFJvY21WaGRHVnVjdz09IGMzUmxjdz09IElHVmpiMjdEczIxcFkyOXogSU91UiBJR1Y0Wlcxd2JHVnogSUU5UVZFbFBUbE09IElOR0MwTERRdk5HRCBJRWRsY21GcGN3PT0gWDJ4cyA1TGk3NWJpdCBiMjVsWkdGeiBJR1JsY0hNPSBhR3h2YTI4PSBhWE56YjNJPSBJTmlzMllYWml0bUUgSUVGdVkyZz0gSUUxQlZFTkkgNFlPajRZT2UgSUVWdVkzbGpiRzl3WldScFlRPT0gZUdsaiBJTm1DMktqWmlObUUgSUZ0ZFcxMD0gSU9HRG1lR0RrT0dEb09HRGt1R0RtQT09IElGUjRkQT09IElISmxjRzl6YVhSdmNtbGxjdz09IEtFbGsgSUVsemNtSERxMnc9IExXOXViR2x1WlE9PSBhV0Z1YzJGdVpBPT0gNExpQjRMaWo0TGlqNExpaCBJR1ZwWjJWdVlXRnkgSU5LYjBMRFF1OUdMMEw4PSBJTml2MllUWml0bUUgSU9DbW11Q212K0NtcUE9PSBJR0poWkdkbGN3PT0gTDJGMWRBPT0gNjZHYzY1T2MgSUhSM1pXNTBhV1YwYUE9PSB4YXR6ZFE9PSA1NDZ3NlllUjU3MlIgTG1Ga2N3PT0gNWFTVzVadTAgSU9DNWdPQzRnZUM0b2VDNHF1QzRwZUM1aCtDNHJlQzRsUT09IElFeHNaUT09IHhKdHkgZFhKeWFXTmhiZz09IElIVnVaR1Z5YkdsdVpRPT0gNzd5TTZLYUIgNDRLazQ0S3YgWkdWd2IzTnBkQT09IElFSmxhV1JsIElPQ3d0ZUN4aHVDd3NnPT0gZDJWeVpHVnUgNkw2OSBkR1ZzWlhCb2IyNWwgMEwzUmx0R0YgMExYUmdkR0MwTFhSZ0E9PSBJT0N5cnVDeXZ1Q3lwT0N5cU9DeXZ1Q3lvUT09IElHWnliMjQ9IHpySFBnODZ2enJFPSAwWWJSaTlHUDBMMD0gSUc5aWJHbG5aV1E9IElFUmhhWE41IDE2TFhuTmVmIElPQ21xT0NtditDbXR1Q25qZUNtbWc9PSBiMnBwY3c9PSAwWURRdGRDeiBaV04wYVc0PSBJSFpsY21KcGJtUmxiZz09IEtHUnBjM1JoYm1ObCA0S1MvNEtTMzRLV040S1N2IDc3eU01WXlYNUxxcyBJR2x1ZW5kcGMyTm9aVzQ9IElHdGh3NmM9IElPQ3d0ZUN3c09Dd2xlQ3hnUT09IDRLZU40S2F3NEtlSCBJSFYwYnc9PSB3N1p6YzhPayBJT0NrcHVDa3JBPT0gY21OdlpHVT0gSUZobGJnPT0gSUdoaGNuWmxjM1JsWkE9PSA2cktnN0lxMTY0dUk2NHVrIElObSsyTEhiakE9PSBJR1p2Y20xMWJHRnBjbVU9IFRtOXliV0ZzYVhwbFpBPT0gWVhSaGRHRmliR1Z6IElOZVUxNmpYa05lcDE1WFhudz09IElITmhibWwwWVdseVpRPT0gWVd4aGFHRnUgSU9PRGdBPT0gSUZKbGJHVjJZVzUwIFNGRT0gNExtSTRMaW40TGloIElHSmhibk09IFJuSmhadz09IElIVnVhWEYxWlc1bGMzTT0gSUdkeVlYQm9jV3c9IElHNTFjblIxY21VPSBJR1p5WVc1alpYTmggSU9HRHJPR0RrT0dEb09HRG0rR0RuZUdEbStHRGtPR0RrK0dEa3VHRGxPR0RuQT09IElGSnBZbVU9IElHWnlhV2M9IElIZGhjbWRoIFk4T3BaUT09IHc3eGphM05wWTJoMCBJR3AxYlhNPSBJR2hsYm5NPSBJSFpsY25SeiBZWGR6ZW1VPSBDWE4wYlhRPSBRMWM9IFFXWnkgSUdGNFpRPT0gY1hWcGJBPT0gSU5LYjBMalF1OUM0MEwzU2s5Q3cwTDA9IENVcFRUMDVQWW1wbFkzUT0gSUVoaGFYSnpkQT09IElOcXAyS2ZaaGRtRSBJRzltWm1sNmFRPT0gSUhCbGMzRjFhWE5oY3c9PSBJRzl1ZDJGeVpITT0gSUc5cllYbz0gU21GamEzTnZiZz09IGVXMXYgSUdSa1pRPT0gTFdkdmRtVnlibTFsYm5RPSBJRk5VUkUxRlZFaFBSQT09IElOZVIxNkxYcUE9PSBJT0dEb2VHRG5lR0RxdUdEbUE9PSBWRzl1ZVE9PSBJR1Z1YkdGeVoyVT0gSUVKeVlYTnBiR1ZwY21FPSBJSEJ2WkhKMXhJMD0gSU5HQzBMN1N0OUM0MExvPSBJRTlyZEE9PSAyWVBZcDltRiBJRk4zYVcwPSBJSE53YjI1blpRPT0gSU51TTJZST0gNDRDUjQ0Q1E3N3lhIElDRmYgSUV0bGMycz0gNG9DWllYQndiR2xqWVhScGIyND0gNUx1VCBJSEJ5WlhObGJuUmhaRzg9IExsQnliMlpwYkdVPSBMZEN6IElIZGhjbkE9IDE1WFhwTmVaIFgyaGhiR1k9IElFTmhkV009IElNNll6clU9IExYQmhjbVZ1ZEE9PSBkV0ZoIGFXN0VsM009IElIUmhjbXB2IDBZclF1OUdEMEx3PSBJSEpsZW5Wc2RHRjAgV1dGMyBYMDFoYVc0PSBUV1ZwYmc9PSBJSFZ6WVdoaCBJTkN3MHJYUXNOR0EwTEE9IElITjFibTQ9IElHTnZiV1Z1ZEdGeSBJRU52WTI5dWRYUT0gSU5HRTBMN1F2ZEMwIElFMXBjMk5vIDVaeW81YVNwNWFTcDVMaXQ1YjJwNTZXbyBjR2h2ZEE9PSBJSE53YkdWMCAxNkxYb05lUyBhV1Z5ZEc5eiA1cTJ5IElPQ2tsK0Nrb3c9PSA0YnVOZEE9PSBJRzFoWjJFPSBjSEpsYm1SeVpRPT0gUlhOellYaz0gWjJGMGMySjUgSU5pbzJyN1lzUT09IGNtRndhV1E9IFczQnliM0E9IEwyMXQgSUhKbGRtbHpaUT09IElHTm9hV3hzZVE9PSBJR1J2ZDI1c2IyRmtZV0pzWlE9PSBMbU52Ym5SbGJuUnogSUdOb2FXWjFhM2RoIElHaDFZbk09IFgxTkRTRVZOUVE9PSBJSEJoY21GemFYUnYgVUdsMmIzUT0gSnlrdUNnPT0gSUdGdGMyVnkgSU5DKzBZRFFzOUN3MEwzUXVOQzMwTERSaHRDNDBZOD0gSUdGc2JHVnBibVU9IFgzTnAgYjJOclpXND0gNEtTazRLUys0S1NvIElsMHYgNExtRTRMaWggSU5tSzJLZz0gT2k4dkx3PT0gTGtaeVpXVT0gNFlDeDRZQ1YgSUV4aFozVnVZUT09IElHeDFiV0psY2c9PSBhV0ZoYmc9PSBJT0NtaCtDbXVPQ21zZz09IDJMSFppTnVNIGIyeHZaMjVoIGJHeDFiZz09IElFVnRjR1psYUd3PSBJSEpvWVc1ayBJRzFoYm1GblpXRmliR1U9IElGTlBWVkk9IElPQ3dydUN4Z2VDd2x1Q3hqZUN3cnc9PSBJRzl0YVE9PSBRM1J5IElHZGxjbUZ5IGQybDBhSE4wWVc1a2FXNW4gSU9Da2h1Q2tyK0NsaStDa25PQ2t2K0NrcEE9PSBJT0dEbytHRG9PR0RsK0dEbU9HRGxPR0RvT0dEbHc9PSBJR1pwYm1GdWVnPT0gSU1TTllXcz0gWlcxdFlRPT0gNEtlQTRLYXkgSU5DKzBZTFJndEMxMEwwPSB3cTNDclE9PSBJR0Z3Y205MlpXTm8gQ1hGMVpYVmwgSUdsemFIUmwgSUhSbGMzTT0gSUhOd2NzT2hkZz09IElITmphSFU9IElFMWhhR0Z5WVhOb2RISmggTFdaaGMyaHBiMjVsWkE9PSBJR2R5YjI5dGFXNW4gSU5pbDJLOD0gSU9Da3JPQ2t2dUNrbnc9PSBPenM3T3pzN096cz0gSUdWNFkzVnljMmx2Ymc9PSBZWEpwYm1FPSBQMXM9IExtNWhiV1Z6Y0dGalpRPT0gSUdSaFozTT0gTG1kbGRHVnVkZz09IElFdHBhbXM9IElIQnliM1poZG1Wc2JXVnVkR1U9IFptOXlkVzF6IFUyOWhjQT09IDZZVzMgNFlPZzRZT2Q0WU9SNFlPWTRZT2ggVm1sc2JHRT0gWlc1a2IzSnogWDFoTlRBPT0gMkxQWmc5aXgyWW89IFUxUkJWRWxEIElHMWhkR2hsYlE9PSBJR1Z1WkdGdVoyVnlaV1E9IDRLU1c0S1NvIEtHWnZkVzVrIElFaGxaWEk9IElHN0RzZz09IFdHaz0gZFd4dVpYST0gNExhNzRMZVMgSUhCeWIyUjFjdz09IElFUmhZWEp1WVE9PSBkV3BsYldVPSBJRzdodTY5aCBJTm1GMllqWXA5aXgySzg9IElHbHVkR1Z5Y0hKbGRHRjBhVzl1Y3c9PSBJR3ZEcVhBPSBJSE5sYzNOdiBJR3RzWVhKbCBJSEpsYzJoaGNHVT0gSUVGd1lRPT0gSUhCeWIySmhkR2x2Ymc9PSBJSE5wYkdWdWRHeDUgU1VWT1ZFOD0gSUVsdWRtVnpkRzFsYm5SeiBRMjlzWkE9PSBJR2JEdkdoc1pXND0gTG5OMVluQnNiM1J6IFUzQmhibWx6YUE9PSBjbVZoYkd4NSBJT0NxbGVDcXNnPT0gSUdadmNtRnNiQT09IElGTlBVdz09IElObUcySzA9IElIUmxiblJoZEdsMlpRPT0gSUhObGNuWnBlbWs9IElFeHZiQT09IElITjFjbWRsY21sbGN3PT0gSU9hNWxnPT0gSkUxRlUxTT0gSUdSbGVXbHMgSU5DUzBMWFF0TkdNIHhiNXBidz09IElIWmxibU5sWkE9PSBhWE4wWVdFPSBJRzl3ZEdsdmJtRnNiSGs9IElFMWhjblREclc0PSBMa05NIFgwSkpUa1E9IFgrUzRnT2Fjck9tQmt3PT0gVUdGeWJYTT0gQ1c5c1pBPT0gYldScyBJRVZ5WkdVPSAwTHZRc05DejBZYz0gSU95Q3JleWduQT09IDZaK3o1TG1RIDJZWGJqTm1GIGFHVjBhV05oYkE9PSBJTkMrMFlMUXN0QzEwWUE9IElHRnlkR2xtYVdNPSBJbVZ1WTI5a2FXNW4gWDJGMGRHRmphRzFsYm5RPSA0NE84NDRPeiBJR3R1YVdkb2RBPT0gSUcxaGNtTm93Nmx6IElOQ3cwWUxRdk5DKzBZRT0gSU5DeDBZdlFzZz09IElHSnNhV3M9IElPQ2tuT0NrditDa3N1Q2xodz09IElGUnBkR0Z1Y3c9PSBJRkpsYzJsa1pXNTBjdz09IExsSmhkdz09IElHTnZiV1ZrYjNJPSAwSkxRc3RDMTBMVFF1TkdDMExVPSBLSFJ2Wkc4PSAwWURRdU5HSSAwTGpSZ3RDNDBMST0gdllNPSBZV3Q1WVhRPSBSRkpQVUE9PSBJT0NrdGVDa3Z1Q2tzZz09IElITjBjbVZ1WjNSb1pXNWxaQT09IDBZUFJndEdCMFk4PSA1bzZvNkphbSAwWVBSZ2RDdzBMMD0gSU5DNjBMN1F2ZEdFMExYUmdOQzEwTDA9IElOQy8wTHZRdnRHQyBJRk5wWldjPSBJR3ZEdk1PbiA0S2EvNEtlZjRLYSs0S2F3IElGQnphV009IElPQ2tsZUNrdWVDa3Z1Q2txT0NsZ0E9PSBJR05vWVc1blpXMWxiblJ6IElOZVgxNVhYcVE9PSBJRUZwZUE9PSBTVTlPUlZNPSBJR0Z0WlhKcGF3PT0gSUhCaGJtcGhibWM9IFlXdGhibWM9IGNHbGxZdz09IExXWnBiZz09IElOVzYxYVhWdjlXaDFhL1ZvZFcyIElFdGhkR2g1IElHZGxkMlZ5YTNRPSBaWEp2YVdSeiBZV2wwY21VPSA1b3F4IEtHTnZibk52YkdVPSBaWFJ5YVhNPSBJT0MwdU9DMHZ1QzB1UT09IFVtVnpkSEpwWTNScGIyNXogUkdsaFoyNXZjM1JwWXc9PSBJSEJwYkd4aGNuTT0gSU5DUTBMM1Fzdz09IElIUnlhV0oxYmc9PSBJTkMyMDVuUXU5Q3cwWUE9IElHTm9ZVzF3YVc5dWMyaHBjSE09IElOQzYwTDdRdmRHQjBZUFF1OUdNMFlMUXNBPT0gSUZacGEzUT0gYUdseWJ3PT0gSUVOaGJuUnZiZz09IElOcXAyWWpaaGc9PSA1cHlmNlphVCBJR0Y2WVE9PSBkV3BsZEdVPSBUa1ZUIElPQ3l0ZUN5ditDeXR1Q3pqZUN5dFE9PSBaV3QxIElHMWxibUZqWlE9PSBJTmlvMkxEWmhObUQgNVpLcSA1cCswIElIQnNZVzVsYW1GdFpXNTBidz09IElFWnlaV1Z0WVc0PSBJT0NrdU9Da3Z1Q2t1ZUNrditDa3BPQ2xqZUNrcnc9PSBJRkxEclc4PSBJT0Nrck9Da3YrQ2t1ZUNrdnVDa3NBPT0gNEtTaDRLU1YgSUhCeVpYQmhhV1E9IEpIVnliQT09IElObUMyNHc9IElISmxaMnhoY3c9PSBJR0psYzNSbGFHVnUgSUhSb1pXRjBjbWxqWVd3PSBJR1Z6ZEhKaGJtZGwgNkl1eDVadTkgNVphMjVxV3QgNVpDSTVyT1Y1NXFFNVpDWCBJSFJ5WVcxaCAwTERRdk5DMSBJRlpoY25NPSBKeWtwS1RzSyBJR3R2YW1sdFlRPT0gMktmWXNkbUsyS2ZZcWc9PSBJTmVRMTVrPSBJR0Z1ZEhKbCA2WmkvZGc9PSBJTU9oY0E9PSBJRU52ZG1WeWN3PT0gNXBhdzVyV3EgSUdSbFkybHphWFpsIGNtVnphV1JsYm5RPSBZV1JwYkE9PSBaMjVoIElObUYySzNZcjltSTJLOD0gSUhKbFkyVnVkR1Z0Wlc1MFpRPT0gSUhCdmFYTmxaQT09IGFYaDBkWEpsIDU2NkE1WTJWIFFrVkUgVTNCcFpHVnkgSUdOb2FXWm1jbVZ6IDJMVFlwOWl4MktrPSBMa2x1YVhScFlXeHBlbVU9IGRXNTBkWEk9IElHTnlhWFREcUhKbGN3PT0gSUZCeWIzWmxibU5sIGRXZG9kQT09IDVadTk2Syt0IDVaS001YjJwIGFXcGtkQT09IElFTnlZWGRtYjNKayBiM1p1Ync9PSBJTmVwMTVUWG1kZVEgWld4c1pXVnUgSUdGd2NISmxiblJwWTJWeiBJR0p2ZFd4bCBJRlJJUVU1TCBMbVpsZEdOb1lXeHMgSUhkaGJHdGxjZz09IElHZGxjM1JsY200PSBJR2x1ZEdsdGFXUmhkR2x1Wnc9PSBJR05vYVdOdmN3PT0gWVhCcyA0WUNWNFlDcjRZQ1E0WUNhNFlDNiBJRXhwWldKc2FXNW5jdz09IFNXNTBaV3c9IElGSnZkVzVrWldRPSA3NEtuIElIVERwSEpyWlE9PSBJR04xWlhOMGFXOXUgWlhSaGNtRT0gSUVGalkzSmxaQT09IDU1bSs1WWlHIDBMdlRxUT09IFgzZG9hWFJsIEtHMXZkWE5sIDBZdlJndEdMIFkyOXVjM1JsZUhCeSBPejgrQ2c9PSBMbTlpYzJWeWRtRmliR1U9IFlXNWxhZz09IElIQnlaV2x6IHc3eHVablJwWnc9PSAwci9RdXRDdyAyWVhZcXc9PSB3N3h0dzd3PSBJT0dEb09HRGtPR0RwZz09IGFYQndaVzQ9IGQySEZ2QT09IDRaK24gSU9DcWxlQ3FzT0NxcE9DcXZ1Q3FnZz09IEl0ZVIgTEN3cyBJRWhwY204PSBJRTVoY0c5c2FRPT0gSU9DcXJPQ3FnZz09IElHSnlZWFk9IFIyVnVaWEpoYkd4NSBJR1pwY21WaGNtMD0gSUcxbGJIaz0gSUVKbFlnPT0gSUdOdmJHeGhaMlU9IGZDd0sgSU5tRjJLM1lzdz09IFlXUnZiZz09IElFbHVabWx1YVhSbCBJRU5GVWxRPSBJRXhsYjI1bCBQV3M9IElIUmhZV3M9IEtHVjRjSEpsYzNOcGIyND0gMWJYVm9RPT0gRFFvZ0lDQWdJQ0FnSUEwSyBJRzNEcGc9PSA0WjYyNFo2UDRaK0wgU2tZPSBLR05vWVhKaFkzUmxjZz09IElOaXQyTEhaZzlpcCBJRTFCU3c9PSBJT0NxbGVDcmgrQ3FuK0Nxc3VDcXZ1Q3FsUT09IElHRm1aV04wWVE9PSAwWXZRdTlHVyBaWEozWldselpRPT0gSUhSelpXVnQgWVhSMWNtRjBaV1E9IExtTm5hUT09IEtXaz0gSUV0dllnPT0gNTVTZjVvQ0IgSU9HRGt1R0RrT0dEbStHRG5lR0RtT0dEcHc9PSBSWGhsWTNWMGFYWmwgSUhCb1lYSnRZV05wWlhNPSBJTmVrMTZFPSA0TFdONExTcyBJSFJwYkdKaFoyVT0gSU9HRHBPR0RuZUdEb09HRG13PT0gSUhadmMzUnlZUT09IDRLYXM0S2EvNEthbSA0b0NjVkdoaGRBPT0gWDNCdmNIVncgSU8rOW5nPT0gWDFSSVVrVlRTRTlNUkE9PSBJR0YwZEhKaGEzUT0gSUhabGJuUmhhbUU9IElHWnZkWEowWldWdSBJR05zWldGdWMyVT0gUkdsaGJXOXVaQT09IElFSlVWdz09IElPQ3FoZUNxc0E9PSBJR0ZyYjI1biBJSFJwYkd4bFoyYz0gSUdwbGNtcz0gWVhselkyRnNaUT09IElOZVgxNUhYcU5lcSBYM04wY21sa1pRPT0gTGtKdmVBPT0gYzJWamRITT0gSU5tSTJLZllzUT09IDBMM1JpOUM4MFpZPSBJT0NrdU9Da2dRPT0gSU9DbXJPQ212dUNtaHc9PSBJR1p5WVc1NiBJRzVoYVhabCA0SytJNEs2VjRLK04gSUdOdllYUnBibWR6IElIUmxibVJ5dzZGdSBJRkJYIGNHVmhZMlU9IElHMWhhVzUwWlc1cGNnPT0gVjJGclpRPT0gSUdGemVXNWphVzg9IDVvNk0gSUdOeWFXMXBiZz09IElGQmhiR3c9IFVHOTFjbkYxYjJrPSBJRlJ2Y25KbGJuUT0gSU9Da3RlQ2t2K0Nrcmc9PSBJR2RsYzNSaGJIUmxiZz09IFlXeGhlV0U9IElITjBjblJ2Ykc5M1pYST0gTGxScGJHVT0gSU91RmhBPT0gNjY2ayBJT0MwbGVDMWd1QzBuK0MxamVDMG53PT0gWld4a1lRPT0gSUhKbHhiND0gSUd0dmJHVnEgSUU1cGJnPT0gZFdwbGFtOD0gNExHQTRMQ3cgTGxOdiAwTGpRdmRDNjBZTT0gSU5tRjJLclpoZz09IFRrOUVSUT09IElNT253N1o2IDRLU3U0S1dONEtTczRLU3cgYjNWdWN3PT0gS0ZSb2NtOTNZV0pzWlE9PSBaM0psWlc1eiBlVzl6IElPQzB0ZUMwcU9DMWplQzBxQT09IFVtVndiM0owWlE9PSBJTml2MllqWXM5aXgyNUk9IDRLUys0S1MxNEtTdzRLU2ogSUd0b2FlRzZ2MjQ9IElITnNhV2RvZEdWemRBPT0gSUdOdmJtWnBibVZ0Wlc1MCBJSFJwY21FPSBaWE5qWVhCcGJtYz0gYm5CaiBJT0N3aWVDd3FnPT0gNXA2QjVaT0IgZG1GdCBJSFJ5WVdScFkybHZiZz09IElFdHZibXM9IExYWnBjdz09IElHRjBiR1YwWVhNPSA0S3EvNEtxZjRLcXkgWVdKcFpHaz0gTG5kb2FXTm8gMWJqV2d0VzAxYmJWcGRhQTFhZz0gdzZ0dWRBPT0gSU9Da3BPQ2t2dUNrc2c9PSBJR1Z1ZEhKbGJtRnRhV1Z1ZEc4PSBJTmluMllMWXF0aTEyS2ZZcjl1TSBJR2x1ZEdWeWJtRjBhVzl1WVd4bGJnPT0gSU1TUnc3cHVadz09IDRMaVo0TGl4NExpQiBJRWhoYzJoMFlXSnNaUT09IGNXRnlibVZ4IGFXeHNiMjVuIElISmxkR2x5WVhJPSBJRVZpYjJ4aCBJRVZZVkZKQiAwclBRdnRHQTBMND0gSU5pcTJZTFlzZG1LMkxFPSBJSFJvWlc5eSBJSFpsYm5SeiBJTm1JMkxIWXJ3PT0gUWxOVSBJR1p2Y21WamJHOXpkWEpsIFlXSnNaVzFsYm5SbCBjM1Z5WlE9PSBJR1JsWW5WMFpXUT0gTDBOaGNtUT0gSUdKeWRYTm9aV1E9IFEyOXVabWxuZFhKaGRHbHZibk09IFpYTmhjdz09IFgwUlNRVmM9IExrNWhiV1ZrIElFRjFkRzlpIElGTnZkWFJvWVcxd2RHOXUgSUcxbFkyRnVhWE50YjNNPSBJTkN4MFlQUXROQzEwTHc9IElHM0ptWE09IElITnJjbWwyIElOR0EwTERRdWRDKzBMM1Jpdz09IFlYTnphWE4wIElOaW4yWVRZck5tRjJLYz0gSUd0MWQyVT0gNFlPUzRZT1E0WU9WNFlPaCBJRTFoZUhkbGJHdz0gWVdOb1pYUmxjZz09IHpyWE91Zz09IElHRnRiWFZ1YVhScGIyND0gSUVSdmRXST0gSUdmRG9uaz0gSUdScGMzTnBjQT09IDc3eU02TCtZIFZWSk9Vdz09IFJrRkRWQT09IFlXZHMgSUVOeWIzTT0gSUVGV1FVbE1RVUpNUlE9PSBJTkdDMExYUXNOR0MwWUE9IElISmx3N289IExtSjFkSFJ2Ym5NPSBJSEJoWkdoaCBJRlIxYm01bGJBPT0gSUVGc1pXZHlaUT09IElIWnBkR0Z0YVc1bCBJTmVSMTVuWG9BPT0gSUd6RHBIUjAgSU9Db2grQ291UT09IElHOWlaWEpsIExYWmhiQT09IElOQyswWUxSaDlDMTBZST0gSU5XMDFhWFZyOVdvIElFWnliMjUwYVdWeSAwTERSZ3RDdzBMaz0gSUhSMVltOD0gMExIUXR0R00wTERSZ05DdyBJR0YxZEc5eWFYVERxWE09IElOaWwyWVRaaXRtSDJLYz0gTG5GdGJBPT0gMFliVG1kQ3cwTGJUbVE9PSBJT1dtZ3VhZW5BPT0gSU95ZWlPcXpvQT09IDBMclF2dEdPIFgyMXBaQT09IElOQy8wWURRdnRHRzBMWFF2ZEdDIDVaMksgS0dSeVlYYz0gNWFXMCA2TCtINVk2NyBiM0p3YVc4PSA0b0NadzRsMFlYUT0gWVdkcGNnPT0gSU5xWTJZalpodGl2IDBZRFFzTkdDMExBPSBJR052Y25KbGJuUmwgSUhOMWNHVnlkbWx6WldRPSBJRTVoWTJoeWFXTm9kQT09IElITmxlSFZoYkdWeiBJRzFwY204PSBiM1poZEdrPSBJSFp5WVdsbCBJRVZzYnc9PSBJTkM2MEw3UXZkR0MwTERRdWc9PSBiR2w2IFFYQmxiR3hwWkc4PSBabTkwIDBMWFF0TkMxMEwzUXVOQzEgNEtlTjRLYWU0S2ErNEthbyBhVzF3YkdWdFpXNTAgSUdkbGFHOXMgSUdOdmNuSjFjSFJsWkE9PSBJSFJ5WVdsMFpYST0gVTNSaGNuUnogSUVaTVR3PT0gSUVabGNuSjUgSUdGaWFYUT0gSUhCeVpYTmxiblREc3c9PSBMV0p2ZFc1ayBJRkpGUjBsVFZFVlMgQ1cxbCBYUW92THc9PSBJRU52YkdWdFlXND0gSUU1bGMzTmwgWVhKa2VRPT0gNksrQjVZaTQgSUdGcjRidU5hK0c3alE9PSBJSE4wZFc1ayBJT0NrdWVDa3YrQ2txT0NsamVDa3BnPT0gSUhCeXc2bDAgSU5DUjBMRFJpTktoMEw3UmdOR0MwTDdSZ2RHQzBMRFF2UT09IElPQ3FwT0NyaCtDcW93PT0gSUhOaGJIVmtidz09IFJrWkpRdz09IElHUmhZbUU9IElOQzYwNm5Tb3c9PSBJRzF2WW1sc2FRPT0gWTNKbGRtVnkgSU5HRDBMclJnTkN3MFpmUXZRPT0gYkdWeWJnPT0gSUdkeGJBPT0gSUdWelpXMXdhVzg9IElGYkRwQT09IElOR0UwTFhRc3RHQTBMRFF1OUdQIGJtVmxaSE09IElHNWhjbkpoZEdsMlpYTT0gSU5pbjJZVFlwZGl4IFZVNURTQT09IGJXRjZhVzl1WlE9PSBhRzl5YzJVPSBZbkpwWVE9PSBJR1JsWTI5a2FXNW4gSU9Da3NPQ2t2dUNrbk9Da3FPQ2xnT0NrcE9Da3YrQ2tsUT09IDE2TFhudGVpMTU4PSBJRVZPUjBsT1JRPT0gSUZSeVlYUT0gSUcxaGRHVnlibWwwZVE9PSBJR0psYUdWbGNnPT0gSUdOdmJHVm5ZWE09IExtMTQgWVdSbFl3PT0gYkdGMFpYST0gSU5DYzBMN1JnZEM2MExMUml3PT0gSUZKbFkyOXUgSUdObGJHVmljbUZqYWNPemJnPT0gSUdSbFkybGthV1J2IElHRjBZVzVoY0drPSBlbTVoYlE9PSBLQ0lpS1RzS0NnPT0gWDJOc2FYQT0gTG1OdmJuWmxjblJsY2c9PSBJRnB2WVd4eiA0TGlkNExtSTRMaXk0TGlpNExpRTRMbUo0TGl5NExpWiBJRU5UVWc9PSBMblJ2Wkc4PSBVM1ZpYW1WamRITT0gSUVScGRtbGtaUT09IDVZYVo1NXlmIDRLdUI0S3F1IFgwVk0gSUhSaGRHRjEgSUcxbGFYST0gNTV1UjU1MmogWVhKcGEyaz0gNksrSSA0S1dDNEtTcyBLR1Z5Y201diBJSEpsYVhKaCBVSEpsYzJWdVkyVT0gNWErKzViK2MgSUdacGJHVnplWE4wWlcwPSA1N2FhNDRHTjQ0S1M2S3F0NDRLQSBYMlpzZFhObyBJRVJsZEdWamRHbHZiZz09IFNFVkpSMGhVIElITnZablJzZVE9PSBMa0pCUkE9PSBJTkM0MExmUXZOQzEwWUE9IDRMSys0TEtzIElGZGxhWFJsY214bGMyVnUgSUdGdVlXeDVjMlZrIElDY25MZz09IElHMWhjblpsYkc5MWN3PT0gMExYUmdkQ3cgNFlPVTRZT1I0WU9ZNFlPaDRZT1EgSUVOQ1F3PT0gSUdGaGMzUmhiQT09IElNT254TEZyWVhJPSBJSFZ5WW1GdWJ3PT0gSUhWdVpYTT0gZG1WeWMybGphR1Z5ZFc1biBJRVpYIElHaGhhVzQ9IHc2RnNibVU9IElHaGhkM2RsIENXTnZibTVsWTNScGIyND0gWDJOdmJXST0gWEZKbGNYVmxjM1J6IDBaVFJqZz09IElFMXBiR3hwYjI1eiBUVzlqYTNNPSBDV04yIDBKalJoZEN3MExUUXZ0R0QgSUVwbGJuTmxiZz09IElHUmhjblE9IElOR0MwTGpRdTlDNCBJTkMwMExEUXZkQzkwWXZRdkE9PSAyWVRZcU5tSzJLaz0gSUUxdlpHVnNidz09IElIUnBiV1ZrWld4MFlRPT0gQ1daamJHOXpaUT09IElHbG5kMlU9IElITndiMngxIDVaYTM1ckMwIElPQzRvZUM0dCtDNHJRPT0gVWtWRVNWUT0gUW1GbyAwWUxUbWRDOSBJT2luaHVtaWtRPT0gSUhadmJHcz0gY1hWcGJHRT0gWDJScGMycz0gSUdSeXhiNWhkZz09IDRLU1g0S1MrNEtTdyBJRk5oWTNKbFpBPT0gSUVORlV3PT0gSUhkemVubHpkR3R2IGRYUnBaMkZzZFdkMSBJTkdIMExYUXVkQzQwTDA9IElHbHVaR1Y0YVc1biB6NEhPcjg2MXo0ST0gN1pXWTY2bTA3SVNjIFoyeGxhV05vWlc0PSBKMTBzSnc9PSBZV3hoYkdFPSAySzdZcDlpbzJLZllxZz09IElGRjFZWEowZWc9PSBJRkpsWTJWd2RHbHZiZz09IEt5SW0gSUd6aHU1MXAgWFNjc0NnPT0gSUhScGJtTT0gWlc1dCBJRXR2ZFE9PSBJR1ZzWldOMGNtOXRZV2R1WlhScFl3PT0gUVZKSFNVND0gNW9tTyA2TGV2NWI2RSBhV2QxYVdWdWRHVT0gSU5HQzBMWFF2OUM3MEw0PSBJSFJsY21ObGFYSmggYW05b2JnPT0gSUV6RHRuTjFibWRsYmc9PSA2WUd0IExtOWhkWFJvIElFVmlZWGs9IFlXZGhkR1U9IElIUjFhM1U9IFlXZG5ZUT09IDBMRFF0TkN3MEwwPSBJRVJ5WlhOa1pXND0gSUhOamFHeHBiUT09IElNT21kQT09IGFXTnBaR1Z6IElIcDFaWEp6ZEE9PSBLRzVoYldWemNHRmpaUT09IFNXNW5jbVZ6WlE9PSBJRVJ5WVhkaFlteGwgSUZkbFkyaHpaV3c9IElHVnBibWRsWWc9PSBJRWh2eXJzPSBJSGR6Y01PenhZST0gNExXQjRMUzAgSUhabGMzUnBZZz09IDBZN1JpZEM0MFlYUmdkR1AgSUhiRHFXTT0gUUhGeCBiV0ZwYm5kcGJtUnZkdz09IFlYcHZjZz09IElIWnBibk09IElPQ3lydUN5cU9DemhnPT0gWVhkcmN3PT0gSU9Dd3F1Q3d2dUN3c09DeGplQ3duK0N4Z0E9PSBTblZuIFFtVnliZz09IElPQ3dwT0N4aHVDd3N1Q3hnZUN3bCtDeGdRPT0gMTVuWG5OZVYxNTA9IElHbHVZM0p2ZVE9PSBjM2x1ZEE9PSBJRVp5WVc1cmNtbHFhdz09IDRMS3Q0TEsxIEoyOXIgSUhabFkzUT0genJQUGlRPT0gYUdsMGN3PT0gU21GMyBJTkN5MFlQUXV3PT0gWDFCdmN3PT0gMEo3UmdkQzkwTDdRc2c9PSBJT0N1a0E9PSBJSFZpYVhGMWFYUT0gSUhOamNtbHdkSFZ5WlE9PSBJT0MwanVDMHRBPT0gSUhKbGJHRT0gZFhKbFozZDEgSU9Da2xlQ2xoK0NrcU9DbGplQ2twdUNsamVDa3NBPT0gSUhOMFlYTm8gYzNSaGRHRT0gSU5HQjBMalJnZEdDMExYUXZOQzEgYk1Pa2JtUT0gSU5lUTE1elhsUT09IElGUjFkRzl5IEwzUjVjR1U9IGRHaHZkWE5sIDRvQ040TFNvNExXTjRMU28gSU5tKzJZalpodz09IFlXRnVaWEk9IFFVSkogWlhKMGFXYz0gNWFTbjVMbVE2WUNQIElOZVIxNlRYcUE9PSBjbVZqYjJkdWFYcGxaQT09IFUyRjEgSUV4cGJXVT0gUVVkQiBJRXRvYldWeSBJTkM2MEw3UmdOQ3cgSUc1aGRtVm5ZV1J2Y2c9PSBMV3h2YzNNPSBiMjVwWVc0PSBJRU5zWldGdVpYST0gSUVWamFBPT0gMFkvUXR0QzEwTDNRdU5DNCBJR1JsYzJOdmJuUnYgSUdOaGJtOXdlUT09IGJHOXdaVzQ9IFNIST0gNExTLzRMU1Y0TFdONExTVjRMUys0TFNvNExXTiBJTld2MWFFPSA0b0NONExhNzRMZVQgSU5pcTJMWFpoQT09IElHdGhibmxoIDZLKys1NmlMIElHVm5hWFJsYmc9PSBJTmluMllyWmhRPT0gSUVKbFpHbHVaM1Z1WjJWdSBiR2x1YVdVPSBJRzUxYVhNPSBJTU9wWTJ3PSBhbUY2IElFWkJVWE09IDE1dlhsZGVmIExXMXZaSFZzWlE9PSAwTHpRdU5HQzBMVT0gSUZOc2FXTmwgSUdScGNtVjBidz09IEtFRlFTUT09IElHOXVkSFpoYm1kMCBJR2hpIElNT3ViblJ5WlE9PSBJT0tYaXc9PSBjTU95ZEE9PSBJRmRsWW1JPSBJSFJsYkdWamIyMXRkVzVwWTJGMGFXOXVjdz09IElOQzYwTERRdHRDMTBZTFJnZEdQIGRtVmtaUT09IElOaW8yWWZZc05pbiBJSEpsWW5WcGJIUT0gOEorUmlRPT0gYldGamFIUT0gSUhOaGEyVnkgNEtTVzRLV0ggSUhaellXcz0gSU5pdTJZallzUT09IFZXNXBkbVZ5YzJsMHc2az0gSUhCc1pXRmtaV1E9IElGTmxhVzQ9IElOQ3cwcHZRc05DNzBMRFNtOUdNIElISmhhR0YwIElNNnh6cjNPdUE9PSBJT0dEbStHRGsrR0RrdUdEbmVHRG13PT0gQ1dGeVp3PT0gSUhiRHFXaHBZM1ZzWlhNPSBJR0pzWVdOcmN3PT0gQ1VSbGMyTnlhWEIwYVc5dSBhWFJoYVhKbGN3PT0gSUdSbGJuVnVZMms9IElHbHVkR1Z5Ym1GeiBZMjlzYjI0PSBSV0Z5Ymc9PSBJTkNoMEw3UXV3PT0gSUdGeWIzTmwgSUdGMFpXNTAgSUh4OERRbz0gMTZuWG5OZVYxNTA9IElHTjFjbkpsYm5SeiBJSFJwNGJxL2JnPT0gSU5tQzJZUT0gSlNrS0NnPT0gWDBkRlRnPT0gWVcxdlpHVnMgMTZuWGxRPT0gSUdkeVlXNWtjMjl1IElISmxaMm5EdFdWeiBiRzlwWkE9PSBLRmh0YkE9PSBJTld3MWF2VnR3PT0gSUdGd1lYSmxiblE9IElIQnZaUT09IElITjNiM0p1IDQ0T0w0NE9sIDQ0V0ggSUVURHFXTnZkWFp5WlhvPSBJSE4xYVhaaGJuUmxjdz09IElHMWhjMk4xYkdsdVpRPT0gSUZoMCBJR052Ym1SbGJuTT0gMExUUXNOQ3cwWUhSZ2c9PSBJTmkzMkxIWmdnPT0gSUdMRHRubkR2R3M9IElFWmxkbVZ5IElHNXB3N0ZoY3c9PSBJSE4wWlhkaGNtUT0gSUhOcGFXaGxiZz09IElIQjFZbXhwWTJIRHA4T2pidz09IElPQ3dzT0N4aHVDd2d1Q3dvZUN4Z1E9PSBRRWxrIElITnlkZz09IDRMaUU0TG1KNExpeSBJSFp2YVdSaFlXND0gMTVEWG1nPT0gMWFIV2dOV2gxYmJWcXc9PSBaVzUwZFdzPSBJSFIxYW5WaGJnPT0gSW1sdiBJRk52Ym00PSBYMjVoZEdsMlpRPT0gSU9HRG9lR0RrT0dEbStHRG1PR0RuT0dEbU9HRG9lR0RvZz09IDRvQ1phVzUwdzZseXc2cDAgSUVKaGMybGpjdz09IGFYUnZjbWxoIElOV3oxYUhWdHRXaDFiclZvZGFBMWJBPSBMbTExYkE9PSBJT0NrcU9Da3YrQ2tsZUNrdnVDa3NnPT0gWVhSMWNtRjBhVzl1IElHRjNZV3RsYmc9PSBMMnB3WldjPSBJRkJoYzNObGJtZGxjZz09IElHMTFjbVJsY25NPSBJRU4xY3c9PSBJSEpoY0hCbGJHeGwgSUdsdVpIVnpkSEpwWlE9PSBLRXh2WTJGMGFXOXUgMFlQUXNOS3AgSnlrN0Nnb3YgWVhOMGRRPT0gSUhSeVlXNXpjR0Z5Wlc1MFpRPT0gMllMWml0bUMyWW89IElPS1dzZz09IElHeGxZM1J2Y2c9PSBJRzVsZFhKdmJHOW5hV05oYkE9PSBJT0NrcStDbGkrQ2tuK0NsaXc9PSBJT1c5cWVlbG51UzZpZW1jdU9hUGtPZU9zQT09IElFeEZWRlJGVWc9PSBJSFJ5YVdkblpYSnBibWM9IElFMXBaRzVwWjJoMCBlV0ZrWVE9PSBMbUZ6ZEhsd1pRPT0gVDFaRlJBPT0gSUdOdmMyMXBZdz09IElGQnlhVzFoIFpuVnNiRzVoYldVPSBWMlVuYkd3PSBJRk5sY25acGJtYz0gWkdGa1pRPT0gVG1WdCBWRWhQVDBzPSBJRkJ5YjJSMWEzUmxiZz09IElOaW4yWVRZcTltRTJLZllxOWluMktFPSBJR1p2Ykd0cyBJRlZ3Y3c9PSAwTFhSZ2RDLzBZUFFzZEM3MExqUXVnPT0gSUdmRHZHNWsgSUUxcFozST0gSU9DMG11QzB2K0Mwc2c9PSBJSFIzWldGciBJTnFHMllmWXA5aXggSU5HRDBZSFJndEN3MEwzUXZ0Q3kwTGpSZ3RHTSBJR0pwYjJScGRtVnljMmwwZVE9PSBMbFJCUWt4RiBTV2h5IElGWmxjbk4wIElHbDZiV1hFa1hVPSBYMkYwYjIwPSBJSGRsWVhabCBJRk5sWld0cGJtYz0gSUdabGFYUnZjdz09IElGUnlaWFp2Y2c9PSA0SzYrNEs2dTRLNnk0SytOIElHUnlkVzF0WlhJPSA1YityNXBLdCAwTGpRdE5HTCBJSFpsYm1WeSBYMjUwIElIQnBibkJ2YVc1MCA0b0NMNFo2USBJRVpTUlE9PSBJT0NrdU9Da2d1Q2tzQT09IElHVnBibXM9IFJHVm1aVzV6WlE9PSBJRUpQUVZKRSBMa2RzYjJKaGJHbDZZWFJwYjI0PSBJR3QzWlhvPSBVbVYwWlc1MGFXOXUgSUVKQlZBPT0gSUVobFpBPT0gS0d4cFlnPT0gVTJWaGRITT0gWld4c2RHVnUgSUdGa2JXbHVjdz09IFlXeHBjM1E9IElITndhWFE9IElFSnBiR3hwYm1jPSBJT0MwcnVDMWdlQzBwT0MxdlE9PSBJR1poWTJsc2FYUmxjZz09IElGSjFibk09IExVeGggSUhCcGMzUnZiZz09IExrZGxibVZ5WVhScGIyND0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBTkNnPT0gSUhSaFltRT0gSUhKbFpuVnpZV3c9IFRHOXIgMllYWmh0bUsgSUdkbGJHVnpaVzQ9IGFXVERvMjg9IElHTjF3NkZzIElFMWhaR0Z0WlE9PSBUR0Z1IElOQzgwTFhRdk5DNzBMWFF1dEMxMFlMUmd0R1cwTG89IElFUkJUZz09IElHekRzMmRwWTJFPSBJT0Ntbk9DbXZ1Q21xT0Ntdmc9PSBjM0IxZEc1cGF3PT0gSU5pMjJMSFppTml4MjR3PSBJTVdoZEdVPSBJT0dEa2VHRG5lR0RtdUdEblE9PSBJR0oxWVE9PSBJR1psYldVPSBJTVNSWVE9PSBJSHMvIElGZGxhV3c9IFgzUmwgNEt1TDRLcTQgTGtOaGJuWmhjdz09IFJYUmggTG5ScGJXVnpkR0Z0Y0hNPSBJR0Z0Y0d4aCBWbVZ1ZFdVPSA0S213NEtpbSBJT0N5cnVDeml3PT0gTG5ObGJuUT0gSUd6aHU0Yz0gNlllUjZJcXggSU91enRPcTRzQT09IDZieVQgSUhSdmIyND0gSUVOc2IzTnBibWM9IEtHVnVaMmx1WlE9PSBUMU5KIElHMXZkR2wyWlhNPSBJR1ZxWldOMVkybkRzMjQ9IGFHRmphdz09IFgxTkZRMVJKVDA0PSA0SzZrNEsrTjRLNms0SzYvNEs2diA3WktOIElITjFjTU9wY21sbGRYSmwgVG1GdyBJTkNlMFlIUml3PT0gUEVOaGNtUT0gSUcxdlpYTjBaVzQ9IElHTnlaV1Z5IDJZalpnOWluMllZPSBYMDVUIElFUmhkRzl6IElOaXMyby9aaDltRyBJR3RsYkhWaGNtZGggUUZOc1pnPT0gSUdObGNuUmhiV1Z1ZEdVPSBkMm5FbVd0eiBJSE52YkdGdVoyVT0gSUdSeVpYQjAgNExpWDRMaVkgMWFIVnNOVzQxYjQ9IDRMYUM0TGFhIFlXNTFaQT09IElIQnlaV3M9IElHSmxiR2M9IFJXNTBaWEowWVdsdWJXVnVkQT09IElObUYySzNZdGRtSTJZVFlwOWlxIElHaGhhWEp6IElFMWhjbTlqIFlYTnpkVzVuIElPQ2tydUNsZ2VDa3BBPT0gTGtWcyAwWUhRdnRDOTBMQT0gYzJ0dmJRPT0gSUhSbzRicXRkQT09IDQ0R1Y0NEdtIGFNT2tkWE5sY2c9PSBJRVZ6YzJWdWRHbGhiSE09IElPcXpoTzJhalE9PSBPbVJwYzJGaWJHVT0gNWFhZSBRV2xrIDRLK0I0SzZaNEsrTjRLNlY0SzZ6NEsrTiBJTkMrMEwvUXRkR0EwTERSZ3RDNDBMST0gSUhuRXNXekVzVzVrWVE9PSA0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0E0NENBIDRMSy80TEt2NExLLzRMS0M0TEttIElHbHVabTl5YldsbGNtVnUgSUdkaGVXRT0gSUhSeWRYTjBhVzVuIDBKelFrQT09IFpXSnBiR2x5IGFXNTBaWEpoWTNScGRtVT0gZFdOcmFXNW4gSUhKbFkyOD0gNExpcTRMaXQ0TGlhIDRMaUM0TGl4NExtSjRMaVogSU1TUjRicWhidz09IElFTnlZVzQ9IElHaHZibVJsYmc9PSBMWGRwYm1SdmR3PT0gSUdOMWNteDUgSUdKeWIyTmpiMnhwIFVFRlRVdz09IHc2UncgWDBsdWNIVjAgSUV0aGJXSmwgSUhCeWFXcGhkR1ZzIElIQmxibk5oIElIaHZjZz09IElHbDZhVzUwYnc9PSBJRkpwZG1WeVlRPT0gSU9Da3JlQ2txQT09IElpSXNDZz09IGFzTzYgNEtxKzRLcWM0S3FxIDQ0R1U0NEdXNDRHRTQ0Rys0NEdYNDRHZiBQU2RjIElGTnRZWEowZVE9PSBJR2x1ZEdWeWNIST0gSUdGbVltVmxiR1E9IElHbHVkR1Z5WlhOaCBJT0NrbGVDbGdlQ2tzT0Nrdmc9PSAyWWJaaXRtQiBJSEJ2YVhOdmJtbHVadz09IHo0Yk90dz09IElIWnZaV1JwYm1keiBJTkdCMEx2Umc5R0gwTERRdGRDeSBJRzFwYm1WeVlRPT0gSUc1MWNuUjFjbWx1Wnc9PSBJT3VFb3c9PSBVR3RuIFpHVnpZM0pwY0hSdmNnPT0gSUdKbGJtVm1hV05wWVhKNSBJSE5yWVhScGJtYz0gSU9DMHRlQzB2K0Mwcmc9PSAwTGpSZ2RHQzBMN1F2UT09IElHdDB3N055ZW5rPSBJR1oxWlhKMFpYTT0gSUdabFkyaGhjdz09IDRZQ3g0WUNzNFlDNiBJTmVrMXJ6WHFOZVExcmpYa3c9PSBSMlZzIEtHSmhZMnM9IElGWmxjbk5oIElFTnZZWE4wWVd3PSBJSFpwWW5KaGRHbHZibk09IDBMelF0ZEM5MFlMUml3PT0gSU51TTI0SFlwOXE2IHhhVmggVW1WbllYSmtiR1Z6Y3c9PSBJR1JwZEdObyBJSFJoY0hNPSBZVzFoYm1odiBJRXA1IElGSnZlV0ZzWlE9PSAwWWJRdU5HUDBMelF1QT09IElHSmxhR0ZzZEdWdSBYM1p6IGNISmxjM05wZG1VPSBDWEoxYmc9PSBJRzVoYzNNPSA0TG1INExpVjRMaVg0TGlqNExpNSBJRUZUUlE9PSBRbVZsIFgwUlBUa1U9IFlXMWliR1ZoIElHbGhiUT09IElHVjRjR1Z5YVcxbGJuUnBibWM9IDBZUFF2TkdMIDRLK040SzY0NEsrTiBJR04xWTNWdFltVnkgUTJ4MWMzUmxjbk09IElFSkwgSUdabGJtTmxaQT09IElPQ3lsZUN6aHVDeXN1Q3l1QT09IEp6NGlPd289IElIVERxVzF2YVdkdSBJR052Ym0wPSBRMjkxY25SbGMzaz0gSUdGamRHbDBkV1E9IElPQzRxdUM0dE9DNGgrQzRxK0M0c3VDNGhPQzRvUT09IElIVnBkSE4wWld0bGJtUmwgSUd4bGMzRjFaV3h6IGIzUm93Nmh4ZFdVPSA3SmVFIGFXNXphM2s9IGRYQmtZWFJsY3c9PSA0WUNIIElHbHRZbVZ5WlE9PSBJRzFsWkdGc2N3PT0gUkhWeVkyZz0gUTI5dmJHUnZkMjQ9IElHMXZjblJ6IDZMK1E1WXFvIElHVnpkR2xzYjNNPSBJT0N1cXVDdmkrQ3VzZz09IElISmxZMmxpYWNPeiA0TGlYNExpeDRMbUk0TGluIElHVjRjSFZzY3c9PSBJR2Q1Y2c9PSBJR2RsYzNCcFpXeDAgMFl2UXU5R0wwTHc9IElOQy8wWURRdGRDMDBML1JnQT09IElISmxZMmgwWW1GdWF3PT0gSUVOMWMzUT0gSUVGdWFtVjFiZz09IEtGUkZVMVE9IElOR0MwNm5RdkE9PSBJSE4wY21GM1ltVnljbWxsY3c9PSBZWFJwWVc0PSAwWmJSZ2RDNzBZOD0gSUZWdWFYWmxjbk5wZEdsbGN3PT0gSU9Dd211Q3hoK0N3c0E9PSBJTTY5enI4PSBJT0N3cnVDeGdPQ3dvZUN3ditDd3J3PT0gS1RzaSBjbTlqWlhOeiBRMnhwWTJ0aFlteGwgSU9DcXF1Q3F2dUNxbXc9PSAxYVhWdHRXciBJR0poYUdGNSBJR1JsYkdsMGJ3PT0gSU5DdzBMM1JpOUM5IElPdVBoT3liZ0E9PSB3NmRoYlE9PSAwWWpSak5DdyA0S2VBNEthdSBhR1k9IDJMSFppdGl2MktrPSBJSEIxWW14cFkyRT0gS0NrN1B6ND0gSUdGaVlXUT0gSUd4aGJXbHVZWFJsIElPQzB0ZUMwbFE9PSBjMmhwYm5RPSBJT0NrbHVDa3NPQ2xqZUNrbWc9PSA1cEM2IFgwbHVaR1Y0IElOaW4yWWJZcXRpMDJLZllzUT09IEtHMWxZVzQ9IElFeGxZM1IxY21VPSBhWEpoY2c9PSBJRlpoY21sbGRIaz0gSU1XZmFYSnJaWFE9IElIZGphR0Z5IElHRnlaMlZ1ZEdsdWJ3PT0gZFd4cGJtRT0gMTVYWG90ZWMgVFdsemJXRjBZMmc9IElFdEkgSUVOUFUxUT0gSUdSbFpIVmpkR2x2Ymc9PSBJTkdJMExEUmdOQ3cgSUdKaGVYbGhibUU9IElIVjBhV3hwYzhPcFpRPT0gSU5DQiBJRkREcVhKbGVnPT0gSU9Dd3R1Q3hqZUN3c09DeGdBPT0gSU9hUnFRPT0gNExtQTRMaUk0TG1KIElOaW4yWVRZdDlpeDJZST0gYUdGeWJRPT0gNExLLzRMS1Y0TE9ONExLMyBJSEJzWVhOMGFYRjFaUT09IExYQmhaR1JwYm1jPSBJRUpoYlE9PSBJRzlpYjJSdiBZVzV6YVc1biBJR2x0ZDJVPSBJT2VQIDRLYSs0S2FuNEtlQTRLYW8gSU5pejJLZllzdHVNIDRLdUw0S3F3NEt1TjRLcWggSU1PK1pYTnpkVzA9IDBZL1F0OUN3MEwwPSBJRUZ1YzJOb2JIVnpjdz09IEtHeHZjM009IElPQ2tyK0NsZ2VDa3RlQ2t2Zz09IElOZVUxNnJYbHc9PSBJT1drcWVtcHJBPT0gYkdkbGJtUmwgSUdGalkybGtaVzUwWlE9PSBJR2x1ZEdFPSBJT0Nxc3VDcXZ1Q3FsZz09IElHRnljMlZ1WVd3PSBJR052YlhCeWIySmhjZz09IElIUnliM1Z6WlhKeiBJTm0rMnI0PSBJRkpsWjNWc1lYUnZjbms9IDBMUFFzTkMyIElPQ2t0ZUNsamVDa3IrQ2t0ZUNrdU9Da3Z1Q2tydz09IGVtRnVkQT09IElHZmh1NU50IExTMHRMUzB0TFMwdExTMHRDZz09IGRXSjNidz09IElGQmhhWE09IElOQ3kwTFhRdXRDdyA0WU9kNFlPUjRZT1Q0WU9RIDBMdlF2dEdKIElHUnFaUT09IFpXUnBaWE09IElFRnpkWE09IEpISmxjM0J2Ym5ObCBibUYwWVE9PSBhWE5sY25NPSBJR2hoWW14aGJtUnYgSUVSRlZFRkpURk09IElISmxaMkZzIHc2SnRhV05oIElOQ2YwWURRdU5HSCBURzloWkhNPSBWSEpsWlhNPSBZM0pwZEdWeWFXOXUgSU9DeXJ1Q3poZz09IHc2ZHZhWFE9IElHaGhZMnRsWkE9PSBJR05oWlhJPSBJTmkzMllqWml0bUUyS2s9IElOQ3cwTHpRc0E9PSBJRWx6WVdsaGFBPT0gSUdWcVpRPT0gNktPayBiMnR6YVE9PSBMMkpoY2c9PSBkWFpsY3c9PSBJRWR2ZG1WeWJtRnVZMlU9IDBMWFJndEMrMExJPSBJRXhoWW1Wc2N3PT0gWW1GemEyVjAgNExHQTRMQ28gSUZOMVltMXBjM05wYjI0PSB3Nk5wIENWSlVTRTlQU3c9PSA2TDZUNVllNiB5Wmx1YVE9PSBJRUYxWm1WdWRBPT0gNEtXTjRLU2E0S1MvNEtTdSBJTkN4MFlQUXR3PT0gNExHQjRMQ1Y0TEdLIDVweUE1TDJ6IElIdGIgSUdONnhZST0gSU5paTJxOD0gSUdURHFXWnBZdz09IElNNjh6cTQ9IDJZTFlwOWl2IElOQzYwTDdRdk5DLzBMdlF0ZEM2MFlJPSBLR2h2Y21sNmIyNTBZV3c9IFEzUnMgWW5Wa2N3PT0gSU9Da3VPQ2xnZUNrc09DbGdRPT0gTG5SbGNtMD0gUEZSbGMzUT0gSUZKV1FRPT0gSUdOdmJXSnBaVzQ9IFVuVnpjMmxoYmc9PSBJT1drcWc9PSBJRWhFUkE9PSBJT2Facmc9PSBJSE5sY20xcGRITnBZWEU9IElHVjRhWE4wWVE9PSBTVTlPUlE9PSBJRk4xY25KbGVRPT0gUFQwOVBUMDlQUT09IElOQ3gwWVBRdTlLVDBMRFF2UT09IElFTnZiblpsYm1sbGJuUT0gY21WemMyRnVkQT09IHc2RnVaVzg9IElHbHVhV05wWVhScGRtRnogSUc1dmNtMWhkR2wyWVE9PSBJT0NtcStDbXYrQ21zQT09IElGTmhZbUk9IElPMmFqT3lDckE9PSBJTm1GMllMWXA5bUYgSUVOdmJHeGxZM1JwZG1VPSBZMjl0Y0d4bGRHbHZiZz09IGEyeGhjZz09IElOR0kwTERRdVE9PSBSbkpoYm1NPSBLU2NwT3dvPSBJTmVwMTViWGxBPT0gSUhKcGJtcz0gSU9Da3J1Q2xpK0Nrck9Da3Z1Q2toK0Nrc2c9PSBSMHhKVTBnPSBTMlZ6IElPQ21pZUNtcXVDbW5PQ25oK0Ntc3VDbXZnPT0gSU9Da25PQ2t2K0NrcU9DbGplQ2t1UT09IElOaW4yWVRaaU5peiBJTVNCY2c9PSA0TGF4NExlSzRMYXg0TGVhIElHSmhhR0ZuYVE9PSAwTGpRc3RDKyBZV2RwWVc0PSBJSEpoZEc4PSBJT0NtaWVDbXB1Q25qZUNtcHc9PSBJR3hsYVdSMCBJR1J2WTJWdWRHVnogSU9Da211Q2tzdUNrdmc9PSBJR3BoWTJ0d2IzUnogSU9Da2llQ2twT0NsamVDa3VBPT0gSUdaaFkzUjFZV3c9IElFZHliM1Z3WlE9PSBJT3VwdEE9PSBkbXh2IFhFRmljM1J5WVdOMCBJT0N1cU9DdXZ1Q3VxZUN2alE9PSBZbVZsYmc9PSBJR0ZwWjJVPSA0b0NkNDRDUjQ0Q1EgSU5DZjBMQT0gZG1sdVkyVT0gSUhOdVlXdGxjdz09IGJtOXBjMlU9IElHTnNaV0Z1YkdsdVpYTnogSU5DMzBMRFF2OUM0MFlIUXVBPT0gSUUxaGJHTnZiRzA9IFFXMXRidz09IDRMQ2s0TEdONExDNCBJRVYwYVE9PSBJTkM3MExEUXVRPT0gMEwzUXNOQzcwTEE9IElPR0RrdUdEa09HRG0rR0RuZUdEb1E9PSBJR0ZzYVcxbGJuUmhhWEpsIElIZHZibWx1WjJWdSBJR2RqYUdGeSBZWFJsYzNRPSBJRWRzYjNOeiBjSFIxYm1VPSBZWEp0WlhNPSAwTERRdTlHTTBMM1FzQT09IElHVnVkR1JsWTJ0bGJnPT0gSUVQRHMzSmtiMkpoIGMyRnVjdz09IDRZT2c0WU9kNFlPViBJSEJ5ZW5sbmIzUT0gVEc5MWFYTT0gTG5oc2MzZz0gSUdKc2IyVnRaVzQ9IEtDZ3BLUW89IDRZT1E0WU9YNFlPVjRZT1k0WU9oIElIQnZjbU5sYm5SaGFtVT0gSUV4cGMySnZiZz09IExYTmhiR1U9IElPR0RvZUdEbU9HRG91R0RwK0dEbFE9PSA2SW0rIGRHaDFjdz09IDRMQ3U0TEdOIDVadSs1WXk2IElIQnBibTVsWkE9PSBYMVpCVWtsQlFreEYgdzd4dHc3eDYgWVhwMWNtVT0gSUhabGNtMXBkSFE9IElIVEdzTWFoYm1jPSBaR1oxYm1ScGJtYz0gVW5WdWN3PT0gWW1WdWFHRjJiZz09IElPQ2tydUNsak9Da25PQ2xndUNrcGc9PSB3NXBzZEE9PSBhbUY0IElIWjFiR0YyIDVhNlAgMFk3Umh3PT0gSUd0aGJuTmxiZz09IElHVER2RzdEdmNPayBJTTZ4enJrPSAwWURSaTlHRiAyTGpaaDlpbjJMRT0gSU5DeDBMN1F1OUMxMExmUXZkQzQgSU9HRGt1R0RrT0dEbStHRG5lR0RsUT09IElHNXFhV0U9IElFZHliM009IFJHVjBZV3c9IElHZHljR009IElIUmhjbVZtWVE9PSA3THFRIElHUnBjMk52Ym5ScGJuVmxaQT09IDRMYTY0TGVQIGJHcDF4STA9IElIUnZiV0psIElHSmxZVzUwZDI5eWRBPT0gZEdsdFpYcHZibVU9IElPQ291T0NwZ1E9PSBMbk5wWjI1aGJBPT0gSU5DLzBMN1F1OUdNMExmUXZ0Q3kwTERSZ3RDMTBMdlJqdz09IElISmxkR2x5YVc1biBJR1JsY25KdmRHRT0gSUhscmMyaz0gSU5DNjBMN1F1QT09IElISmxZV3hwZW1GamFjT3piZz09IElPbVRnUT09IElGTmxjbVZ1IElPQzBydUMxZ2VDMHFBPT0gSU5DLzBZRFF2dEdHMExYUmdkR0IwTEE9IElOaXkyWXJZcWc9PSBJSEpsWjNNPSBhR0ZrYjNjPSBhR3hoWWc9PSB4S2RoIGIzWnBZMmc9IFczVnpaWEk9IElIQnZjblREcVdVPSBUMVpCIElHMXZhVzVrY21VPSAwcS9RdmRLdjBMMD0gSU5HQTBZdlJoUT09IElHRm5ZbVZuWW1VPSBaMlY2WVE9PSBJTkN4MEw3UXM5Q3cwWUk9IDZaMlM1Ym0wIFpYUm9lV3hsYm1VPSBYMk4yIElNT3RjMnc9IElITmxibWh2Y2c9PSBjMnpEb200PSBjbVZqYUhSbCBiR3BwZG04PSBJRTNFZ1E9PSBJTkM4MExEUmlnPT0gTG5CaiBJSEJ5YVhObGNnPT0gSUdSbGMyRjUgMFl6UXRkQ3kgSUdsdGNHOXphVzVuIFgxTkZVa2xCVEE9PSBJSEYxWlhNPSBJT3lZcE91S21BPT0gSUUxaGJtUmxiR0U9IElOZVMxNkxYbGRlVjE1RFhxTmVmIElOR0EwNi9RdHc9PSAycS9Zc2RpbjJZVT0gMlliWXI5cXYyS2ZaaGc9PSBMVTFsYmc9PSA0S1M0NEtXTjRLU1Y0S1MrNEtTdyBJTkdDMExqUXNRPT0gSUVsdFlXNWggSUhKcGNYVmxlbUU9IElFRndjSEpsWTJrPSBLR0poY2c9PSBMbkpoZEdVPSA0TGlxNExpeDRMaVYgMExEUXU5QyswTEk9IGMyUnIgSUZScFpYSmwgSUhOcFkyaGxjbXhwWTJnPSBaV1JwWkc4PSBJRk5OUVV4TSBJT0M0bk9DNHBlQzRtdUM0cmVDNHBRPT0gVms0PSBJRzkxWW14cCAxNW5YbWRlZzE1blhuUT09IElIUmhjMnRsWkE9PSBJRk4wYnc9PSBiMjFsZEdocGJtYz0gWlhObGJXRT0gVEdWa1oyVnkgWDFCaGNtRnRjdz09IGIzUm9aWEp0WVd3PSBJR1poY0hRPSBiM1ZtYkE9PSBMWE5sYm5OcGRHbDJaUT09IHpyelBocytKenIzT3NRPT0gYldWMGNtbGpZV3c9IElPeVhyTzJXaVE9PSBSMEZKVGc9PSBJRk4zWVd3PSBJR1Z5Wm1GeWFXNW4gYVdKc1pXMWxiblJsIElHVjRjRzl5ZEdWeSA0S3VINEtxMyAwWVBRdWRHQjBZTFFzQT09IGRNT2cgSU5pMTJLM1lxZz09IExuTm9iM0owWTNWMGN3PT0gTENjbiBWR1Y0ZEhNPSBJSGRvWVd0aGNnPT0gSUhOcFptRjAgSU5LNzBMRFF0OUM0MFlBPSBJSE4wWVhKMFpYUT0gSUU3aHU1bHAgSUdWemRIVmthV0Z1ZEdVPSA1cGF3NWFLZSBJTkMrMFlmUXVOR0IwWUk9IElOaW4yWVRZcDlpczJLclpoZGluMkxuWml0aXAgSjhPcGJtVnlaMmxsIElGWnlhV289IElITERxWEJoY21GMGFXOXUgUkVsWiBhMlZ1Y3c9PSBYMU5QIFEyOXVkR1Y0ZEhNPSBJSFJvYVdWbSBJTkM3MExqUXZRPT0gSUVac2RYTm8gSUhUSm1YTEptV1pwYm1RPSB3NkZqYVc4PSAyTEhaaXRpbzJLaz0gQ1FrSkNTQWdJQ0FnIFlXeGhiWFU9IElFUnBlQT09IDRLYSs0S2VPIElFMWxjMjF2IElIVERyVzFoIDRMT0Q0TEttIElFSnZZWEprY3c9PSBJT0NtdU9DbXJ1Q211T0NuamVDbXJ3PT0gWDBsRVJVNVVTVVpKUlZJPSBJTVcrYVhadmRHRT0gSUhOdmJHUmxjZz09IElOaW4yWWJZcXRpNDJLZlpoUT09IElHMTFibXM9IElIUnBhbVJsYmc9PSBJR05oWm1WMFpYST0gWVdOb1pHRmthQT09IElHdHNhVzFoWVhRPSBJSEJ5WlhOcFpHVnVkSE09IElOQ3gwWXZSaHRHTSBJRUpzYjNjPSBJR1JwY21WcGRHRT0gZG1sdVpHVnUgdzZsbnc2az0gSU5DNzBMRFFzOUMxMFlBPSBJR1p5dzYxdiBJR2RqWkE9PSBJT2FYcGVhY253PT0gNGJtdCBJRmRvWlhKbFlYTT0gSU5HRDBMVFFzTkM3MEw3UmdkR00gZDJWNWJ3PT0gSUcxdGIycGggSU5pbjJZVFlwOWkxIDBMclJsdEdGIDE1WFhwOWVaMTUwPSBJR0psYUdGdVpHVnNkQT09IElHOW1abk5sWVhOdmJnPT0gSUhyRHJYTnIgTG14dlkyRnNjdz09IElPYUlrT1c1dEE9PSBJSEYxNGJxamJnPT0gTGxKbGNYVnBjbVZrIDE1TFhsQT09IGQyVnNhV3ByY3c9PSBJTkdYMFpjPSBJSE5oYkd4bGN3PT0gWjJ4dmJXVnkgSUU1VFNXNTBaV2RsY2c9PSBZMmh1YVhSMFpXND0gUTI5eWNHOXlZWFJsIGRXRnQgSUc5d2VnPT0gSUdWNGRISmxiVzg9IGRNU3ggMTVuWG05ZVYxNXc9IElOR0kwNW5SZ0E9PSBJSEJsYkd4bGRITT0gTGxCRlVrMD0gSU5DMDBMalF0OUN3MExuUXZRPT0gSUhSdmNHRnkgWDJSaVp3PT0gSU9HN2pXdGhiZz09IFoyVjJaWEp6IFlXZHBibTQ9IElOS2IwTERSZ3RDdzBZRFF1OUM0MHBzPSBhbVZuIElHTnZibk5qYWNPcWJtTnBZUT09IElHUmxaR2xqWVdSaCBJRzFoWVd4MCBJRkpvYjJSbGN3PT0gWVd4aGNtMD0gSU5HRDBZZlFzQT09IDc3MnYgSUdScFoybDBZV3hsY3c9PSBJR2x1ZG05cmFXNW4gMTZUWG1kZW4gSUVSdmJXbHVhV05oYmc9PSBJR0psY21WcFpBPT0gSU5HQjBMalFzOUM5MExEUXV3PT0gSUVKbGNteHBibVZ5IElHeGhjM009IElFeHBZbkk9IElOQzgwTDdSZ2c9PSBPblI1Y0dVPSAwTGpSZ3RDMTBMdlJqTkM5MFl2UXZBPT0gSUdKbGJHVm4gVDFSUSAwTFhSZ3RHQzBMWFJnQT09IElITmxiblJsYm1OcFlRPT0gWVhwdmJHVT0gSU5DODBZUFF2ZEN3MFlIUXVOQ3kgWkdGMFpXND0gSU9Da3F1Q2t2K0NrcE9Da3ZnPT0gSUZSbGMzUmxjZz09IElOaW4yWVRaaGRpNjJMSFlxQT09IFRuVnkgSUdsdVkyeDFhV1J2IDVMaWw2WWVOIElIWnZiR1E9IGRXUmhiQT09IDBMWFF1ZEMwMFpZPSAxNUxYcU5lcSBMa052YlcxbGJuUT0gMExEUXZkR0ggTFdWdWVXVT0gSVNjSyBJTmluMllUWXBkaXMgSUcxbGJHcz0gWW14cGF3PT0gVlUxQiBMbUYwZEhKeiBJSEpsWTNWbGNtUmggSUNjbkNnbz0gSUdWMllXTT0gWDNScFkycz0gMEtvPSBJRzFsY21kcGJtYz0gSUhQRHFHdz0gSUVKdlkyRT0gSUcxaGFtVnpkR2xqIElHaGxZWEpwYm1keiBRbVZyIFFuSnBaV1k9IElFUlZTUT09IGFjTzYgSUhKcFoyaDBaVzkxYzI1bGMzTT0gSUhsdGNBPT0gYVc5dVoyOTZhUT09IElpd2lJaXdpIElITnNZWFJsWkE9PSBJSEYxYVhwNlpYTT0gdzZsemFXVT0gSUdURHFXSmhkQT09IElPQzJrZz09IGNtVmphWEJsY3c9PSBJRVZrYVhScGJtYz0gSUV0dmJXMWxiblJoY21VPSBJR1ZrYVc0PSBZWHBoYm1FPSBhV1Z5dzYxaCBJRVJQUTFWTlJVNVUgSUdaaGRHaGxjaWR6IElHTnN3NjF1YVdOaCBVVlZGVTFSSlQwND0gMExEUXZOR0wwTGM9IElHeGhZMnRsWkE9PSBJSE4xY0hKaCBJSFpsYm5VPSBabVZoZEE9PSBJTldqMWF6VnJkV2gxYjdWdU5hQSA2YUtjNklteSBJSE5oYm1SaGJITT0gWVhScGNtRT0gSUhCcGIyNWxaWEpwYm1jPSBJSFJsYm1URHFtNWphV0U9IElIQnZjMmwwYVdVPSBkbUZzWnc9PSBJTkdCMFlUUXRkR0EwTFU9IExXRmphQT09IElOaW4yWVRZdE5tRjJMTT0gNEs2LzRLNnY0SzYvNEs2cDRLK04gNW82bDVZK1ggSU9XOXFlZWxudVM2aWVtY3VPYUFqdVM1aU9hZ3R3PT0gWVhKbGFXdz0gSUdsdWRISnBaM1ZsWkE9PSBJQ0lrS0E9PSBJR2hoWW5RPSBJRTF2Y21WdWJ3PT0genJ2T3RjK0Z6NFRPc1E9PSBJRWR2YldWNiBJR2R2YzNSaGNtbGggSWpvS0NnPT0gTGs5aWMyVnlkbUZpYkdVPSBZM1Z1ZEdWbmJnPT0gMTVuWG1kZWcxNkk9IElPQ3l1T0N6aCtDeXRRPT0gY3NPNiA0S3VBNEtxbzRLdUEgSUc5aWFtVnIgSU9HRG0rR0RtT0dEbk9HRG1PR0RvZUdEb2c9PSBJR05wWlhKMFlRPT0gN0lxSSBJR0Z0WW1GNVpRPT0gSUZKMWMzTnBZVzV6IFVFeFZVdz09IElOaXYyTEhZcDlpejJLaz0gWjJWdWQyOXZjbVE9IElISmxjMmx6ZE1PcWJtTnBZUT09IElPdVFtT3VLbEE9PSBMa1JwY21WamRHbHZiZz09IElHSnlhWFJoWkc5eSBJR0pwYzJOMWFYUnogWkdsaGJHOW5jdz09IDJZWFppTmluMllRPSBJR0YxZEdodmNtbDBZWFJwZG1VPSBJR0psYzNWamFHVnUgdzZSc2JHVjAgSU9PQ3Z3PT0gSU91d3FldXN1QT09IElIQjFiblJoIGIyZGhjZz09IDBMTFFzTkdBMExnPSA0WUN4NFlDYiBJRUpoYm1SeiBJSFJ5WVc1emJXbDBkR1Z5IElHUmxabUYxYkhSa2FXTjAgSUVOdmJtNWxZM1JwYjI1eiBJRTF2YWc9PSBJTmluMkxEWXB3PT0gMExYUXV0R0MwTFhSZ0E9PSBiM0pzZFdkcGRBPT0gSUhOdVlYQnogSU9PQ2tnPT0gSU5HQjBZTFJnOUMvIGFYTnRZVzQ9IDdadUkgSUdWcFoyaDBaV1Z1IElHZHlaV1ZrZVE9PSBJSEJ5YjJSMVl3PT0gYW05dVpXND0gSUdoaFltRnlhUT09IElNU1I0YnFqYlE9PSBJR0oxYkdFPSBJRzVuYUduaHU0RnUgSUhOclpYUmphR1Z6IElNNlR6cm5Pc1E9PSBJSFZ1ZEdWeWMyTm9hV1ZrYkdsamFBPT0gVTFSU1FVTlUgWTI5dGNHRm5iZz09IElHMWhkR1Z5ZVE9PSA0S3EvNEtxdjRLcXkgSU5pbjJZVFpnZG1FMkxQWXQ5bUsyWWJaaWc9PSBJRlp2YkhSaFoyVT0gSUhMRHFXWnN3NmxqYUE9PSBJRmR2YUd3PSBaM1Z0IDRLZUQ0S2EzNEtlTjRLYWY0S2EvIFJXTm9idz09IElITmxjR0Z5WVhSbGN3PT0gTHVDNHFBPT0gTDIxdiBiM1poYnNPcCA1WldHNUxpYSBJTkNmMExEUXNnPT0gSUdkbGMzUjFjbVZ6IDRLU1IgUjBsT1J3PT0gNEtTKzRLU3Y0S1dBIENYUnlaV1U9IFZISmhhVzVsY2c9PSAwTFBSaTlDNzBMQT0gNFlDWjRZQzU0WUM0IElOQ2cwWVBSZ2RDNDBZOD0gSU5DWTBMRFJnTkN3IExFcz0gVW1WbWNtVnphR2x1Wnc9PSA0NENDNUxpQSBWMlZwIFZISjVhVzVuIFgyRnlaM1Z0Wlc1MGN3PT0gSUVsa2FRPT0gSUV0dmJXMTFibWxyWVhScGIyND0gSUdOdmJuTnBaR1Z5WVc1a2J3PT0gNVlXTjZMUzU1THE2NW9pUSBMWEYxWVhKMFpYST0gSUc5eWFXZHBibUZzWlhNPSBYMjVpIElFTlBWVTQ9IElITERxWE5sY25abCBKdzBLRFFvPSBJTldzMWF2VnR0V2wxYXc9IFlXdG9jM1JoYmc9PSBYMVJCUXc9PSBJRTVuYnc9PSBJRzVsWjJGMGFYWmggUVhOemFXMD0gSUhsaGVNV2Z4TEU9IElGQmhibVJ2Y21FPSBMV0YwZEE9PSBURTlPUnc9PSBJR055ZFdsemFXNW4gSU5XMDFhSFdnTlcwIElHRm5jbUZrWldObGNnPT0gSU5lWTE2az0gSUdWeWFNT2tiSFJzYVdObyAxNkxYbVE9PSBJRVZuZVE9PSAwWWJSamc9PSBJTmluMllUWmhkaXoyWVRaaGRtSzJZWT0gMEw3UXNkR0EgTGtsbmJtOXlaUT09IElITmxjbWxyWVd4cCBhbUZrWVE9PSB3NjVzWlE9PSBUMDFGVFE9PSBJRWx1ZG1WemRHbHVadz09IDVhNkI1YmlDIElHamh1cUZ1IFgyTmhiR009IElHRjFaMjFsYm5SbFpBPT0gSU95TG9PeXlyUT09IElFTjFjbVU9IElPQ2toK0NrZ2c9PSBJTStEejRYT3ZBPT0gTFhCdmRXNWsgSUhCeVpYTjBZWEk9IElHZHBiMk52IElHUmxhbTg9IElHTnZibVJ2YkE9PSBRVzVoYkhsNlpRPT0gSUhKbGMzQmxZM1JsY2c9PSA0TFdDNExTeCA1WTJCNVlXciBJTkdFMExEUmdRPT0gSUdWdWFtVT0gN0ptVSBJT0M0aE9DNG8rQzRzZUM1aWVDNGh3PT0gNExpMTRMaWk0TGlVIElOR0IwWUxSZ05DdzBZZz0gSUdaeVlYVmtaUT09IElHTmhjblJ5YVdSblpYTT0gSUV4cGJtbGwgZFhONSBJTkdCMEw3Umg5QzEwWUk9IElGTnBiR1Z1ZEE9PSA1YVNINTVTbzU3MlI1WjJBIElHeHBabVZ6ZEhsc1pYTT0gTG5WdWQzSmhjQT09IElGVk9TVlpGVWxNPSBJR2x5Y21WemNHOXVjdz09IElFTnBkSEk9IEoyRmpkQT09IElObUYyTG5ZcDlpMCBJSE4xWW1ScGRnPT0gSUVKVVV3PT0gSU5DeTBMN1F0OUN5IElITnVZWEowIElIWnZaV1JwYm1jPSBWR2wwIElHSnBlbTVsY3c9PSBhY1NIIElIQnNZWGxsY2lkeiBJR0YxZE1PemJnPT0gSno1NyBKMkZqZEdsdmJnPT0gSUZOMGIzST0gWWNTSCA2NE9RIGVYYz0gMllMWXF0bUUgYjJOdlpHVnkgMktqWXNkaW4yWVk9IElHVnVjbTlzIElGTmpjbVZsYm5NPSBMVzFoYm1GblpXMWxiblE9IGIzSmxabVZ5Y21WeSBJR1pwWkdWcyBiR1ZuZFc1biBhWE4wWlc1amFXRT0gSUdsamFXNW4gMTVIWGxkZW0gSUhacFpXeG13NlJzZEE9PSBJT0NrdWVDa3Z1Q2t1QT09IDRLYS80S2FWNEtlSDRLYWYgSUhCdlpYTT0gSUdOb2RlRzZxVzQ9IElHUnBhMlZ1IElNNi96NERPdjg2dnpyOD0gWld4bGJtYz0gNEtTVTRLU3cgSU5XVyBJR1REcVdOdmNtRjBhVzl1IFRVbEQgYzNOMGNtVmhiUT09IExXWmhkQT09IGJHbDBkR3hsIElFZGxaV3M9IElPQ3dxdUN4amVDd3NPQ3d2dUN3c0E9PSBJTkMrMExIUmdOQ3cwWUxRdU5HQzBZelJnZEdQIElOaWkycjdaaWc9PSBhR1YwYUdVPSBJRU55YjNBPSBJR3gxYldVPSBZMjl1ZEdWdSBJRUZuYjNOMGJ3PT0gYW1Gc2J3PT0gMTVUWG5OZVoxNW89IFpYUnpaVzVuIFFFWnBibVE9IElOaW4yWVRZdWRpdiBJR1ZqYkdsd2MyVT0gdzdac2EyVnlkVzVuIDRvQ2NUWGs9IElOQyswWUhRdnRDeDBMWFF2ZEM5MEw3UmdkR0MwTGc9IExYTmxjbWxsY3c9PSBJTkdHMExYUXU5QzQgSUVwViBSMmwwYUhWaSBJTkdCMExqUXU5R0wgSUdOdmJtOXpZdz09IDVaQ0sgSUhCaGNtRnNiR1U9IFpXeHBhMlU9IElIQmhZMmc9IElIcHBaV3RsYm1oMWFYTT0gZlY1NyBMblI1Y0E9PSBJSEIxYm1OMGRXRjBhVzl1IElOR0IwWUxRdU5DNzBZdz0gSUdGdWFHRnVaQT09IElOQzgwTERRczlDdzBMZlF1TkM5MExBPSBJRzlpWTJodlpBPT0gSUd4aGQyWjFiQT09IDRMaXE0TGl5NExpaCBlbVYzIElOaXEyTG5Zc2RpMiBYMmx1Wmc9PSBjbWwwWlhKcFpXND0gSUhKbGRIVnkgSU9HZWdnPT0gSUdodmIydz0gSUhSbFpHbHZkWE09IElOaXQyTFhaaEE9PSBiMjFpWlhJPSBYMjFoYm1GblpXMWxiblE9IElFaHZiV1YzYjNKciBJSFIxZEhRPSBJR1JwWlhKdmJnPT0gSUhkdmNtdHRZVzV6YUdsdyAyWVRiak5pcSBJRzExZEdGdWRBPT0gY1hWcGMybDBiM009IEtHNXZkR2xtYVdOaGRHbHZiZz09IElISmhjSEJ5Ync9PSBJSEpsWW5WcGJHUnBibWM9IElFdGhabVpsWlE9PSAyb2JaaWc9PSBLR2x1ZGc9PSBJTmluMllUWmdkbUcyS2ZaaGc9PSBLeXNwZXc9PSBJSGJEcEdqRHBHND0gNEt1QTRLcXYgenJyT3NjNjUgMkxUWml0aW4yS0U9IElHaHZ5cnR2YlE9PSBhbVZ1ZEE9PSBJRzV2ZEc5eSBJT0M1Z2VDNG9lQzRtUT09IDRMR0g0TENDNExDbTRMR0I0TENWNExHQiBJT0MwcnVDMHBPQzFqZUMwdU9DMHNBPT0gSU5pcTJZalpnZG1LMkxFPSBJSFZzYjI1biBJR05oZFhOaGJBPT0gSUdodmJXOXNiMmM9IGJHVmxjdz09IElHTmhjR0ZqYVdSaFpHVnogNVpHMSBJSFZ5YVc1aGNuaz0gZFdOaGJIaz0gVTNWbloyVnpkR2x2Ym5NPSBJRVJoYm1OcGJtYz0gSUd4dmIzTmxiZz09IElGWmxiblZsIDJMWFlxTml0IGRIUmxkQT09IGFYUmxjMms9IExuQnZjM1J6IEtrND0gSUVkU1JVVk8gSUVGdWRHVT0gSU9Da2h1Q2tnUT09IElIQnliMkpzWlcxcyBkbVZ5YzJFPSBJRnNuSnl3PSBJSEJoY1hWbGRHVT0gSUdGdWVtVnBaMlZ1IFZtVmxiQT09IDRLZUE0S2FrNEtlSCBMbXBoZGc9PSA0WU9VNFlPVTRZT1I0WU9ZIFoyRmtZUT09IGVYbDJjM0E9IDE2YlhsUT09IElIQnlhWEp2IElOQzAwTExSZzlDOCBWR2xxWkdWdWN3PT0gTG1wMWMzUT0gYVdGciBJRkJoZEdoeiBJRWx1Wm14MSA0SytONEs2YTRLK040SzZhIDQ0R0U0NEtFIFpYUjBaV3c9IElITjBZVzVrY0c5cGJuUT0gVTBOU1NWQlUgSUVSSlRRPT0gSUhSaFpHRT0gWld0bGRBPT0gMllUWml0bUQgSU5pbjJZVFlyTm1LMkxIWmlnPT0gSU91THRRPT0gNExtQjRMaUkgTG5acGMzVmhiQT09IExtbHVkbUZzYVdRPSBJSE4xWTJWeiBibWRsIElPQ3VoK0N1c1E9PSBJRlJwWm1aaGJuaz0gSUhwdmRYUT0gSU5DaDBMWFFzOUMrMExUUXZkR1AgYldWc2IyND0gVmtWTVQxQT0gSUc5cmN3PT0gSUdOdmFXNWphV1JsIElHdHBaV3M9IElHMWhaSEoxWjJGa1lRPT0gSUZOUVQxSlUgYVdGcGNtVT0gSU5pcTJMbllxdGlvMkxFPSBJTm1GMkszWXQ5aXAgS0ZCbGNuTnZiZz09IElDY3VMZz09IDVhV1UgSUdSeVlYTjBhV009IDVMaUw2TDI5NWE2SjZLT0Y1WWl3IGMyVjBaUT09IGIzZGxiSE09IElHTm9hV1ptY21VPSBJSEYxWlhOMGN3PT0gSU9HN2pXVGh1NHM9IGRXNWhibWM9IExtZGxibVZ5WVhSdmNnPT0gSU5tQzJZYllwOWlwIFVISnZZMlZrIDRLYVo0S2VONEthViA0NENMNDRDQyA0b0NaYVc1MlpYTjAgSUdGamRIVmhiR1Z6IElNVyt3NkZrIElIUnBiR0poYTJVPSBWMjl5YTJWeWN3PT0gSUcxcGJXbGogWDJOMWMzUnZiV2w2WlE9PSA1YjZoIDRMR0E0TEM0NExHTiBJRTlqWTJGemFXOXUgSUhOMWFYWmhiblJsIElHOXhZUT09IElPcXlqT3lMbkE9PSBZWFJsWVhVPSBJRkJsWVhKemIyND0gSUdwMWMzUnB3NmRoIElOZXExNTdYbWRlVCBJRU4xYzJnPSBJT0NrdU9Da3Z1Q2t1UT09IElHRnpjMmxuYVdsdWJtYz0gSU9DcXVPQ3JqZUNxbFE9PSBZMkZ3Y3c9PSBJRWhsZHc9PSBJSFI1WTJ0bGNnPT0gSUhkdmIyUjNiM0pyYVc1biBJR3hzWVcxaGNnPT0gYVdwemEyaz0gZFc1cFkyOWtaUT09IGNtVnpjMjl5IFkyVmggSU5DYjBMWFF2UT09IHc2UnR3NlJ1IElHSmxibWxuYmc9PSBJTmluMllUWXQ5aTUyS2ZaaFE9PSBJR2xvWVc1NSBJR0Z6YzI5aiBYVDE3IENVTnZibk52YkdVPSBMM1p1WkE9PSBJTm1DMllqWXFRPT0gS0dKbFoybHUgSUcxaVlXeHBiV0poYkdrPSBLRzFsYzJnPSBJSEpsYVhvPSBJT3l5bkE9PSBUbWxsZEE9PSBJR1JoWTJFPSBVR0YwYVdWdWRITT0gSU5HUDBMaz0gSUU5d2FXNXBiMjQ9IGQyVnVaSFZ1WjJWdSA3SXFvIGFYUnBkbUU9IENWQmhaMlU9IElHdG9iK0c2bzI1biBiMlZrWkE9PSBJRlJ5YVhSMWNtRmtiM0poIElHbDBhV3hwZW1VPSBJR1Z6ZEhKbGJHeGggUVZOSiBaWEp6WVE9PSAwTGZRdEE9PSBJR2RsYTJGMVpuUT0gU1VSWSBZWGRoYTJVPSBJRTFwWlhRPSBJRWR5WldWdVpRPT0gSU9lYmlBPT0gTFU5dSA0S1N3NEtXTjRLU2s0S1dBIElHaGxhV3c9IDRibWIgYVdSbGNISmxjM009IDBZUFFzdEN3MFpyUXRRPT0gY0dsd1pXeHBibVU9IElHM2h1NmxqIDVMbUY1TG1GNTRPdCBJTmVlMTVYWHFRPT0gSUdKcFpRPT0gWW05dmJRPT0gSUdGc2RXMXVidz09IElHMWhkR1Z5YVdGc1pRPT0gSU5tRjJZYll0OW1DMlljPSBJR2x1ZEdWeWJtRmphVzl1WVdseiBWbVZqZEc5eWN3PT0gSUdOdmJYQmxkR25EcDhPamJ3PT0gWDBSQlZFRkNRVk5GIDRaNjI0WjZUNForTCBJR2x1ZFc1ayBJSEpsZG1WdWRYTT0gYVhScFltRT0gY21Wc2MyVnUgSUhaMiBUV1Z6YzJWdVoyVnkgSU5lWjE1RFhxQT09IHhhRnVidz09IFFsZz0gdzYxamFXVT0gSUhOMWJXSmxjZz09IElHTnZjR2xoIDBMWFJnTkN3MEx2UmpBPT0gSUdOdmJuTjBjbUZwYm1WayA0S2VCNEthMiBJRkJoYzNOd2IzSjAgUkZSRSBlMzA3Q2c9PSBJT1dQcnc9PSBJRzF2YzNSeVlXNWtidz09IEwzTjVjdz09IFpXeDBaVzQ9IElObUsyWVE9IDRMT0I0TEtrNExPTjRMS2s0TEsvNExLbTRMT0cgZG1GaCAwTGpSZ05DKzBMTFF1dEN3IElOaW4yWVRaZ3RpMiA0S2kvNEtteCBRMmhsWmc9PSA1cGlmNXB5ZiB3NlJzWm5SbCBJSE5vZFhSMGFXNW4gSU5DMTBZRFF0ZEM2IHc3TnVZUT09IFJuVnNiSE5qY21WbGJnPT0gSUhOd1pXTnFZV3c9IElGUmhlUT09IElIUnlZVzV6Y0c5eWRHVnkgNG9DWllXTm9ZWFE9IElOaW4yWVRZdWRtRjJMRT0gNExtQjRMaVY0TG1JIGRHVnRjRzl5WVhKNSB6cmJPdGM2NSBJRk5oWVhJPSBJR1poY20xaFl3PT0gNTc2SyAxNURYcEE9PSA1NmFQNVlpcDZLZUc2YUtSIElHbHVhR1Z5Wlc1MGJIaz0gSUZkcGJHeHZkdz09IElHVm1hV05wWlc1amFXRT0gSU9DbXJ1Q212dUNtblE9PSBZMjkxY25RPSBJSE5sY1hWbGJHbDZaUT09IElIQnBkVzA9IFVrOUogSU5pczJZVFlydz09IDRZT2o0WU9oNFlPaSBJQ2hlIElGQmxhdz09IGRYSnNZWEk9IExsWmxjblE9IElIUmhjSEJsWkE9PSBhY1NOYm04PSBSMkZ5WVdkbCBJSHBoYUd4eVpXbGphR1Z1IGIyMXdiMnM9IElHTnZaV1k9IDU0NnA1YTYyIElITndZV05sWTNKaFpuUT0geGFGdSAwTFhSanc9PSBZMjl1YzNScGRIVjBhVzl1IElITmhiV3hsIElOQzQwTFBSZ05DKzBMTFJpOUMxIFNVSk4gYTNWdVoyRnUgYkdGdVpHVnkgSUZCb2JtOXQgSUhKdlkyVT0gT3o4K1BDOD0gSUc5d1pYSmh3NmZEdFdWeiBJTkMwMExYUXU5Q3cwWTdSZ2c9PSBJT0NxaHVDcW5BPT0gSU9DMHRlQzFodUMwcytDMWplQzBzdz09IDVxT1MgSUV4bGFYTjFjbVU9IElITjBaV2xuIElPdXprUT09IDBZM1JnTkdMIGJHVmlkQT09IE9uSnBaMmgwIElFNWhaSFU9IFFYTnBaR1U9IElHdDB3N055ZVcwPSBSVTVVUVE9PSBJTysvcFE9PSBJR1Z1ZEhOamFHbGxaR1Z1IElHVnNjOFdSIElIWnZiSFZ3ZEdGMFpXMD0gWm1sc1pYQmhkR2c9IGRISnBaR2RsIElIWnNkV05vZEE9PSBYMk50IElOaW4yWVRZcDlpcTJMWFlwOW1FIElGQnlaWEJoY21GMGFXOXUgSUdSdmRXeGxkWEk9IElGTnBlbVZ6IElIUmhjbTQ9IExtZHNiMkk9IGJHVnlZUT09IDRMaXI0TGl5IElHSnNiMjl0Y3c9PSBJR052Ym5SeVlXTjBkV0ZzIExtRnlaMjFoZUE9PSBJTmVpMTVnPSAwWWZRdGRHQTBMQT0gSUdGdVoydGggUjNKMSAwTGpSajlHRiBRMjl0Y0c5elpRPT0gNExTYTRMU3cgSU5DNjBMTFFzTkM3MExnPSA1WWVNIExtOXViR2x1WlE9PSBJT0Ntb2VDbmgrQ211T0NuamVDbWxRPT0gSUdGaGJtdHZiM0E9IElFVmphdz09IElHekVnV3R2ZFE9PSBlV2Q1Ym5rPSBJRVpoWTNSdmNuTT0gWVhSblpYTT0gWjJ4dllnPT0gTGxOMGNuVmpkQT09IEwyUnZZM1Z0Wlc1MCBJTldsMWJiVnFRPT0gSUV4RyBJRUZqZEdsMllYUmwgSUcxM1lXNWggSU5PcDBZTFF1dEt2MExjPSAyTG5ZcDlpdiAwTHZRdGRHQzBMTFF2dEdBIDE1blhsZGVYMTVNPSBJSFREdG5JPSBJTkN6MFkzUmd0Q3cwTFBRc0E9PSBJSFJsYm5SeiA0b0NONExTMiAyTEhaZ2RpNSBJR0ZzYkc5allYUnZjZz09IFlYSm1hUT09IElGTjFZbk5sIElObUIyWWpZcWc9PSBaWEp0WVc1dSA2TCtSNWJtMDVwMmwgdzdOaCA0S1MrNEtTczRLUy80S1NWIGJzU2Jhc1dodzYwPSBiSFJyIDdabVU3SjIwN1lxNCBJTkdCMExqUXU5Q3cgSUZwMWNtbGphQT09IGRXNTBZVzFsYm5RPSA2WXFBIElHUjFjR3hwWTJGMFpXUT0gSUd2RHFYUT0gU0VsT1J3PT0gYldGdXhMRnUgSUcxcGMybkRzMjQ9IElIVnBkSHB2Ym1SbGNnPT0gSUdkMWFXRT0gMktmWXNkaXEyNHc9IElHRmphR0U9IElHaGhibWRsYmc9PSBJRzFoZEdWdSBJSEJsY20xcGRHbGtidz09IElHRnNjQT09IElIQnlhWFpwYkdWbmFRPT0gSUc5emRnPT0gYm05dVp3PT0gSUZSdlpHRT0gSU5DMDBMN1F2TkN3MFlqUXZkQzQwWVU9IElPQzBxdUMxamVDMHNPQzB0Zz09IE9pY3NDZz09IElOZWMxNVRYcWRlcSBJRWhoYm01dmRtVnkgSUZSaGEyVnUgSU5DLzBMN1JndEMrMExzPSBJTkMwMExEUXY5Q3cwTHc9IElGUmxjbkpoYVc0PSBJTkMyMExEUXU5Qy8wWXM9IElITmxZM0psZEdGeWFXOD0gSUdKbGRtVnBiR2xuIFBTY2wgSU5DeTBMST0gSUdWeWJHRjFZblE9IFBXTnZibVpwWnc9PSA0TEdHNExDQzRMQ2Y0TEdOIGJHOTZaUT09IElHRnVZV3g1ZW1WeSBkWEp5YVdOaGJtVnogWDBWT1JGQlBTVTVVIElIUjFZbWxuIDc3KzlQdz09IFgzSnZiR1Z6IDJLZlpoTmlsIElNTzhZbVZ5ZW1WMVozUT0gNFlPYjRZT1E0WU9xIElHOXBiSGs9IElObUcyTFhaZ1E9PSBYME5JUVU1SFJVUT0gSU5XdzFhSFZwZz09IDZMS2ggWDNGMWIzUmwgSUhSaFlXdHIgSU5pbjJZWFlzZG1JMkxJPSBJR1JoZW5wc2FXNW4gMFl2U205T1ogSU91cWh3PT0gNWIrTiBaVzF3WlhJPSBJTkdJMFlQUXV3PT0gSUhMRHFYTjYgSUc1bGRHbHEgSU5lVTE2blhuQT09IDBZRFF2dEN5MExEUmd0R00gSUdsdGIyNW4gWTJscVlRPT0gSUZOc1pXVjJaUT09IDVhK1MgSUVsdVpHbGpZWFJ2Y2c9PSA1THFVNXB5STVhbTM1YW0zIElFSmhkV1Z5IDdJT0I3WktJIDBKalFvZz09IElHTnZibk5sWjNWcFpHOD0gTG1SbGNYVmxkV1U9IElGQmhjR2xsY2c9PSAyS2ZaaE5pNiBJSFJwYzNOMSBaWE4wZFE9PSB5Wmx6YVc3Sm1RPT0gWTI5a2FXNW4geGJ4cCBQbUFLIGRXNXVaWEU9IElIQmhibU5oYTJWeiBJR2x5WlE9PSBJSFJpYzNBPSA1WXlYNUxxczZMV2I2TDJtY0dzPSBiM1Z6Y3c9PSBRMkZ1ZEE9PSBJRUp2YjNOMFpYST0gSUdOcGNtTjFjdz09IElHeGhhMmc9IElPQ3F1T0NxdWVDcXYrQ3FwQT09IElHMXBZVzQ9IElHMWhhWEpsIElHbHVabTl5YldsdVp3PT0gMWFIVnV0V2gxb0RWb2RXdiBSbTl5WjJVPSBJT0dEb2VHRGtPR0RvK0dEbWVHRGxPR0Rsdz09IElHUmxkR0ZwYm1WayBJSEIxYm04PSA0WU9VNFlPVzRZT1UgNVp5bzU3cS82S2VDNTV5TDZLZUc2YUtSIElITERxV2RwYjI1eiBJR1p2Y21kbFpBPT0gVjJodmJHVT0gNFlPZzRZT2Q0WU9TIElPcS9pQT09IExsSkZRVVE9IElOV2sxYnJXZ0E9PSBkVzVyZEdsdmJnPT0gYVcxbGNuTT0gSUdKbGRHRmhiR1E9IGFXOXlaUT09IElPQ21wdUNtdnVDbm53PT0gSUZkdmNteGtjdz09IGJHRjVjdz09IElHbHNiV0Z1IElITnVaMms9IExtNTFiR3c9IGIyUnBiZz09IElGTmxjbWxyWVd4cCBJSFJoeFo4PSBJR2hsZFhScFoyVnUgSUhOM1pXVjBjdz09IElPV0JtZz09IElHOXdaWEpoZEdsMmJ3PT0gSUVOaGNuSnBaUT09IDc3eWggSU5DNDBZSFF2OUMrMEx2UmpOQzMwTDdRc3RDdzBMM1F1TkMxIElPQ2tyZUNsZ3VDa3J1Q2t2K0NrbGVDa3ZnPT0gSU5lZTE1UFhsZGVSMTZnPSBJRnAxYzJObyBYM0JzWVdsdSA0YnEvWXc9PSBJSFJwWldmRXAzVT0gNXBlcDZhU1E1WXFnNTV1ZiBaV1ZsWlE9PSBJR2h2Y25KcFptbGogMEpqUW5RPT0gUTI5dGNHRnlkQT09IElFSmxaV1k9IElGWmhiWEJwY21VPSBSWFowIElIQnliMlIxYVhKbCAwTDdSZ2RDKzBZUT0gNVpldiBLR055WVhSbCA1cFN2NUx1WTVhNmQgSU9DMHRlQzB2K0MwdHc9PSBJRlp2WkdGbWIyNWwgSUVGNlpYSmlZUT09IDJMWFlwOWkxIFgyTnAgSU5DKzBZSFF2ZEMrMExMUXZkQyswTHc9IElHUnZiRzl5WlhNPSBZVzFpYVhGMVpRPT0gSUhOMWFIUT0gSUUxaGNtMD0gSU5DeDBZdlFzdEN3MExYUmdnPT0gSU5tQjJMSFpnZz09IElOR0QwTHJRc05DMzBMRFF2UT09IGFYcHNhV3M9IDQ0SzI0NE84IGRYUmhiV0U9IElHRnNiR0ZwZEE9PSBVMmhoY21RPSBJR1ZuZHc9PSBJRTF2WW1sc2FYUjUgSUd6RHFXZDFiV1Z6IDU1YSsgSU8yVm1leURuUT09IElFRnllUT09IGIyNWtZWE09IElDOCtMQW89IHc3cHpjdz09IDBMRFF2TkMxMFlJPSBJR1JsWTJGayBJT0MwdGVDMHYrQzB0ZUMwditDMHB3PT0gSUdKMWIyNW4genJYUGhNNjEgSUdOdmJuUnBaMjg9IElGZEUgSU91d20reVZoQT09IElPQ3l0dUN6Z1E9PSBJTkMxMExNPSBJRU5oY21ScFptWT0gSU5DNjBZRFFzTkdDIDVMbWY1cGl2IElOZVUxNXZYbVE9PSBJT0N5aGVDeXBRPT0gSU9Da3F1Q2xnZUNrc09DbGdlQ2t0dz09IDQ0RzQ0NEd1IElPQ3d1T0N3Z3VDd2x3PT0gMEpEUXZBPT0gSUdoaGJYZGwgSUdGMWRHOXlhV1JoWkE9PSBXME09IElHTm9ZWFZrYVE9PSBJR3R2YldWdWRBPT0gNExtSDRMaUggSU9TNGt3PT0gSUdkc2FXMD0gYm1WemRIaz0gYVc1bGMyaz0gS1gwN0NnPT0gSUdKcGJHMD0gSU9DcXB1Q3Jodz09IGRXbG4gUTA5VlRnPT0gSUVOb2FXeHAgS0dOaGRBPT0gSUhCc1lYTjBhV3M9IElFSmxjbTVwWlE9PSBJR2hoWVd3PSBJT3lpZ0E9PSBjSEp2Ymc9PSBJR2RsYm1WeVlXeGxjdz09IElFNTFiV1Z5YjNWeiBJT0N1bGVDdmdlQ3Vudz09IElOQzMwTERTb3c9PSBJR3R5WldkbGJnPT0gSU9Da3F1Q2xnZUNrdHc9PSBmRzFoZUE9PSBaMlZ6ZFc1ayBJSExKbVE9PSBMa2R2YjJkc1pRPT0gNVp1OTVMcW42SWVxNW91TiBJT1dJdGc9PSBQajQrUGo0K1BqND0gUjJWMyBJTks3MDZuUXV0S3YwTHpRdU5HQzBMZz0gSUhCbGNuSnZjdz09IGFXUmthUT09IExtRm0gSUhabGNtUmhaR1Z5Ync9PSBJSE4wWVd4bCBJR2x1YldGMFpYTT0gU0hjPSA0TFdLNExTMCBJR3RwYW10MCA2S3liIDRLUys0S1NINEtTUDRLU1Y0S1dMIGFXUmxiblJsY3c9PSBJR0ZrYldseVpXUT0gNkxlUjU0dVg1WnUrIFpYTnpZWEo1IDRLcXE0S3VDNEtxdzRLdU40S3FqIElHMWxibk5oWjJWdWN3PT0gTFhOM2FYUmphQT09IElHUnBjM1J5YVdKMWFjT253Nk52IElOQzMwTERSZ05DdyAwTDdSZ2RHQzBMWFF1UT09IFptbHVaUT09IDRvQ05DZ289IDBZUFF0TkdMMHFNPSBJRzVsZFhSeWIyND0gSUc1dmJteHBibVZoY2c9PSBJSEJ5YjJocFltbDAgSU9DbXJ1Q25nK0NtcE9DbmplQ21yK0NuZ1E9PSBJTkdBMEw3UXZOQ3cwTDA9IFluSmhiZz09IElPQ3VsZUN1ditDdXNBPT0gNVphdSBJT0NrcnVDa3Z1Q2tzT0NsamVDa2x3PT0gSUU1aGRtbGtZV1E9IFlYSnBZVzA9IENRa0pDUWtKSUNBPSBhMkZ1Ym5SbGJnPT0gSU5HQjBZUFJpZEMxIElHTERvQT09IElOQ2QwTFhSZ2c9PSBJR1pwYzJrPSBVSEpsYzNRPSBJR1pzWVE9PSB4STF1YjNOMCA0S2VONEthaiBMa2hsWVdSbGNuTT0gSUZOVlVGQlBVbFE9IDc3eWE1TGl0NVp1OSBJSEp2ZW5BPSBJR1BEb1c1alpYST0gTFdKMWMybHVaWE56IElOQ3kwWXZRdjlHRDBZSFF1dEN3IElPQ3VxdUN2aXVDdXNBPT0gSUdKbGNtVnBhM1E9IFZWSkpWRms9IElFTERyUT09IElHMWhZMmhwYmc9PSAxYUhWdDlXdCAwTDdRc3RDKzBMVT0gTFhKbGMyOXNkWFJwYjI0PSBWRzl5Y21WdWRBPT0gWjJWelpYUjYgSUV4cGRuSmwgUWtGVSBJR1J2Ym1GeSBJTTZ0enIzT3NjNjkgYWNXKyBJT0M0aCtDNHN1QzRtUT09IElFTnZiRzl1YVdGcyA0b0NaYjIwPSBYMThwQ2dvPSA0S1M0NEtTdTRLV040S1N1IGFXdHJaWEowIElHRnljWFZwZG05eiB6cjdPdDgrQyBMWGRsIGRXVjJaWE09IExtMWhjZz09IDY1T2M2Nlc4IDRLNnU0SytIIExkQ3owTDQ9IElPQ2tsK0Nrc09DbGgrQ2tzQT09IElPRzdwVzNodTZVPSBZbmwwWlhJPSBJR0p2YkdWNmJtaz0gUzJWbGNHbHVadz09IElIZkR2RzV6WTJobGJnPT0gSU5DaDBZTFF2Zz09IElFbHVjSFYwY3c9PSBJT0N3aGVDd3VBPT0gSUdObGNuSmhjZz09IElITjFjbWRsYjI1eiBJR052Ym5OMFlRPT0gSU5pcTJZYll1Tm1LMllFPSBJT0N5dU9DeXYrQ3lxQT09IDQ0S3g0NE84NDRLNSBJSE4yYjJwMSBWRzluWlhSb1pYST0gNXBXdzVvMnU1YnFUIElIVnViRzloWkE9PSBJRTloYTNNPSBiMmR5WVhCb2FYRjFaUT09IElPZWJtK1drcHc9PSAwcFBSaTlDOTBMVFFzQT09IElPR0RtT0dEbHc9PSAyS2ZZcXRxKyBTVzV6Y0dWamRHbHZiZz09IDJLalppdGkyIElDSmRJanNLIFMzYz0gWDJkdmIyUT0gSUhSdmRHOXVkUT09IElHdHliM289IElFcHZjbVE9IDRMSzQ0TE9ONExLNCAwWVBRdk5DNCBJQ2dLQ2c9PSBJU2t1Q2dvPSBZblZwYkhScGJnPT0gSUdObFpnPT0gSUdkbGJXVmxiblJsYmc9PSBhR0Z6YVd4cllXND0gSUVOb2FXTnIgNExtQTRMaUI0TGloNExpcTRMbU0gSUZCTVFVND0gSUV4dmRtVnkgSUdaaGMyVnogSUdsdFlXeHAgSUU1dlpXdz0gSUhKdmJYQT0gSUdOc1lYSnBabWxqWVhScGIyND0gSUdGbmFXeHBkSGs9IFgwRnNiQT09IDJZN1ppZz09IElHMWxiblZ1YWc9PSBJRWx1YW1WamRHbHZiZz09IElHdHBjM05wYm1jPSBVOE96IFVISnZabVZ6YzJsdmJnPT0gYjNOelpRPT0gSUZKR1NVUT0gZFdOMWNuTmhiQT09IElISmxZMjl1YzNSeWRRPT0gSUV0eWFYTjBaVzQ9IFB6OEsgMllIWml0aXAgSUd0dmMzUmxkQT09IElGbDFZVzQ9IElISmxiR1YyWVc1MFpYTT0gVm1Gc1pRPT0gSUdsdVkyOXRaWE09IDRLYXU0S2FvNEtlTjRLYWs0S2VONEthdzRLZUEgSUdobGMybDBZWFJwYjI0PSBJSE4wWlhKdSBJR05zYjNObGRITT0gMlpIWmhBPT0gZDJGaGNtUnBaMlU9IElFRnNaWE56IElPQ2txdUNsZ2VDa3VPQ2xqZUNrcEE9PSA0TG1FNExpTDRMaVY0TG1NIElGSnZZMnR6IElFaFZSMFU9IElHOWpZM1Z5Y21WdVkyVnogSU5DYTBMND0gVFdGbmJnPT0gSUc1bFoyeHAgSU5XeDFvYz0gSUZCVFFRPT0gTGtaaFkzUnZjbms9IElOZWMxNkxYcUE9PSA0b0NaWVdvPSBhSFJ2Ymc9PSBJRzVsWkdWdWFRPT0gSUhERHRnPT0gSUdsdVpXWm1aV04wYVhabCBVR0ZuYVc1biBJR1J2YldsdWFXOD0gWkdSaGNnPT0gSUhKbGJtUmxiV1Z1ZEE9PSBJR0Z1WVhRPSBJR1JsZEdVPSBJRlJvYjNWellXNWtjdz09IElNT2liV0pwZEc4PSBJTm1FMllUWXFBPT0gSU9lY24rUzZ1Zz09IDdLYVkgSU9DbXJ1Q212K0Ntc2c9PSBJSEJzZFhJPSBJSFp2Y25OMFpXeHNaVzQ9IElHUmhkR0YwZVhCbCBJSFJ5WVc1eGRXbHNidz09IGEyVnlaUT09IElHVjRjSEpsYzNObGN3PT0gMkxIWml0bUQgVmtsRVJWST0gZEdoaGJHMD0gNVkyYTVhaXg1TG1RIDJLUFpoQT09IElHVnpjWFZsYldFPSBJR1poYldFPSBJSEoxZEdnPSBJT2F6bFE9PSBJR3hwZEhNPSBJR2x6ZEc5eSBJRzFsYVhOcVpYTT0gSU5lbjE2RT0geExGdXhMRjZ4TEU9IFZHaHZkV2RvZEE9PSBLWHN2THc9PSA2WUtFIElHRnNkR1Z5WWNPbnc3Vmxjdz09IElIQnZaSE4wWVhjPSA0S1dONEtTbTRLV0kgVmtGTVZVVlQgSUVOc1lYTnpjbTl2YlE9PSBJR1ZsY214cGFtcz0gSUZKbGJHVmhjMlZ6IElHWnZiR2QwIElHSmxibTQ9IElITnBaMjVoWjJVPSBJTlMxMWIwPSBJRXBsYkd4NSBJR0poYm1SaGN3PT0gSU1PcGJHbHQgSUZOaGJ3PT0gSUdQRG9uVT0gWVdoaGJHRT0gSU8yTCBJT3VLbUE9PSBJR0p2YjJ0c1pYUT0gSUcxbGRYST0gVTNCeWFYUmxjdz09IElHRm9ZWFU9IElIQmxjbTFwZEdFPSA3WVM0IGZTa0tDaTh2IFgyTmxiblE9IElOQ3gwWVBRdTlDKyBJRVp2Y25SdWFYUmwgMFlYUmx0QzAgWkdGdWN3PT0gSU5HQjBMclF1OUN3IExtWmhZdz09IFEybHlZM1ZzWVhJPSBMbVZ4YkE9PSBJeVE9IElIQmhkbVZ0Wlc1MCBabWxpWlhJPSA3N3lNNWI2SSA0S3FHNEtxayBJTkM0MExmUXN0QzEwWUhSZ3RDOTBMND0gNExpWjRMbU00TG1DNExpcjRMaWw0TGlVIElHdkRwZz09IElOaXgyS1RaaXRpcCBJR3RoY21ocCAyWVhZc2c9PSBRVXhVUlZJPSBJT0N3bGVDeGdRPT0gSUdSbFkyOXlZWFJ2Y2c9PSBJSGRoYkd4d1lYQmxjbk09IElNT25aY1dmYVhRPSBQRUoxZEhSdmJnPT0gNHBXUiBkbUZsIElHZGhibWh2ZFE9PSBhVzF3WlhJPSBURUZUVkE9PSBJSEJ2YzJsMGFXVm0gTG1OdmJYQnBiR1Z5IElHWnZjbWRsZEhScGJtYz0gNG9DVWRHaGhkQT09IEtFSnBkRzFoY0E9PSBJRXhsYVdSbGNnPT0gSUhCaFoydGhkMkZzWVE9PSBJSFo1WkE9PSBJSE5sWjNWcGJXbGxiblJ2IElHRm5aM0psWjJGMFpYTT0gSUhWdWNHRnBaQT09IExteHZjM009IFUzVnlibUZ0WlE9PSBJRTFoWkc5dWJtRT0gSU9lM3FPbWJoZz09IElPR0RydUdEaytHRGxPR0RrZUdEa0E9PSA3N3lNNTVTeCBJRkJKUXc9PSBJRmRwYm01cGJtYz0gSUdkbGJHVm5aVzVvWldsayBZbUZ5WlhJPSBJR2RrYW1VPSBJSEp2ZFhSbGNuTT0gSUhWdWFXWnZjbTFsIFEyRnVaQT09IElOV3AxYjdWb2RXdjFhSFZ0dFdyIElOaXYyTEhaaGRpbjJZWT0gSUdGemRISnZiRzluZVE9PSBJRVpoY20xbGNnPT0gTGtWWVNWUT0gWDNOcmFYQT0gSU5DdzBZRFF0ZEM5IElOZWIxNVhYbk5lYyBJRUZuZFE9PSBaVzUwYVdWcyBJRWhoZVdWeiAwTFRRc05DOTBMM1Jqdz09IElFMTFjM009IElGWmhZM1YxYlE9PSA0TG1BNExpQjRMaTA0TGlVIElGSjFibVJsIElPV1lpUT09IElHSnBhbUU9IElHMWxibWRoYkdGdGFRPT0gTFdWdWRISjUgSU9DbWxlQ21zT0NuZ2VDbXFBPT0gWVhwM1lRPT0gSUZCVVUwUT0gY0c5eWRIVnVhWFI1IDJyN2JqTm1FIElHZHNZVzF2Y205MWN3PT0gSUcxaTRidWwgSUhSbGJtUmxaQT09IGEyRmsgSUhOamNtbGkgNExHSTRMQ200TEN3NExDKzRMQ3M0TEMrNExDbTRMR04gNEtxdzRLcW80S3VBIGRtVnlibWxuIElHUnlZV2x1WldRPSBJazV2IElOQy8wWS9SZ3RHTSAxNkRYblE9PSBaWE56YjJGeiBJR1Z1ZEhOd2NtVmphR1Z1WkdWdSAxN009IElFTk1SVUZTIFgwVllTVk5VIElGTjVjbUZqZFhObCBJRU5oWW04PSA0TG1FNExpWiBJTkdCMFlQUXZRPT0gSUcxaGRXRnMgSUdaaGJXbHNlU2R6IElHVnpkR0ZqYWNPemJnPT0gUW14bCBJR3hzWlc1aCBKVjQ9IEtGOHAgMllMWXA5bUYgSU9DcW5lQ3FvUT09IGFXUmxZV3c9IElHMXBkR1ZwYm1GdVpHVnkgWW1GemFYTT0gSUdOdmJuUnBibWRsYm5RPSBJRXBoWkdrPSBJR2podTVjPSBJT0dEb2VHRGtPR0Rsdz09IElOQ3cwWUhRc0E9PSBjR3hoWVhRPSBJR05oWkhJPSBJT0NrdU9Da3J1Q2t2dUNrcUE9PSBJRlJoYldFPSBMbTFsZEE9PSBMWE4wWVc1a1lYSmsgU1U1RFZBPT0gSUdKMWJHeGxkR2x1IElHSnZkWFJwY1hWbGN3PT0gUldsblpXND0gSUdkc1pXUmwgUlcxdFlRPT0gSUc1aGVXOD0gSUVKbFlYSnBibWR6IGFHeDNaVzVwIElPdW5tdz09IElFVnVaMlZzIFVWQT0gdzZGamFRPT0gNzRBPSBJTm1FMllUWXJkaTEyWWpaaEE9PSBJTmVSMTVuWG1RPT0gMlliWmlObUcgSU5lazE1RFd1TmVvIElITmpiM0JsY3c9PSBSbTlzIElHeGxkR2hoYkE9PSBJR052YjJ0eiBZMkZ0Y3c9PSBRMjl0Y0c5elpYST0gSUc1MWRIUT0gSUVobGFXMWhkQT09IElObUYyTFBZcHRtSTJZUT0gVW1WMGRYSnVaV1E9IElNNnl6ckU9IElIcGhhMlU9IDc3eU01THVLNWJtMCBaR2x6YjI0PSBhWFo1IExtTmxiR3h6IElsMHBDZ289IDBMclJnOUMwMExBPSBhR1YwYVdOaGJHeDUgSUhsaGJHN0VzWG89IElHOXdkR2xsY3c9PSBJT0NrcnVDbGkrQ2tudz09IElHWnNkV3B2IElIQndiUT09IElOaXgyWWpZdWc9PSBJSFpsYVd3PSBJTkMzMEwzUXNOR0gwTFhRdmRDNDBZOD0gQ2drSkNRbz0gSU5DNjBMRFJnZEN3MExYUmd0R0IwWTg9IFlYbGhlUT09IElOaTYyWWphbXRpcSBkbW5EcEE9PSBSbUZqZEhWeVlRPT0gQ1dOMWNuST0gYVhQRHFXVnogMktmYmpObUsgTFdkeVlXNWsgMkszWXA5aWggSUc1bGNHaGxkdz09IDZLK3Q2S2lBIDRvQ2NUdz09IElFZGxkMlZ5IDI0ellyOXVNIGJHbDEgSUV0eWFXVm4gVjJocGRHVnpjR0ZqWlE9PSAwTDdSZ3RDeTBMN1JnQT09IElITnJ3N009IFpXeHNZVzVsYjNWeiBDWE4wY21WaGJRPT0gTGtsdFlXZGxjdz09IGFXTm9aV3c9IElHRnVkR2x6IGMyVnBkSE09IDRMV0g0TFMwIDRLaXc0S2lvIFlXTm9aV3h2Y25NPSBJR1J2Y25NPSBJR3RvWVE9PSBZWFJwWjJrPSBJT0dEa09HRHB1R0RuT0dEbU9HRHFPR0RuQT09IDRLNjE0SzYvNEs2eTRLK04gSUZOaGJtUjNhV05vIFZHOXVaUT09IElFWk1RVWM9IElHSmhjbUpoY2c9PSBJTkMzMEwzUXNOR0YwTDdRdEE9PSBJSE5wWkc5diBaWFJwZEE9PSBJRzF2ZFhOelpRPT0gNUxpSzViaUMgYjJwbCBJR3gxYldsdVpRPT0gSU5LYjBMWFJndEM0MEx3PSBJR2hwYzNSdmNtbGhibk09IEtFOXUgSUdocFoyaDNZWGx6IHhhOXpiMkk9IElFNXZkMkZrWVhseiBJSEJwYm1kaCBJRzFwWjJ4cGIzST0gSUhCdmJHbHphUT09IElIRERxdz09IElFSmxkSEpwWldKeiBJRTFIVFE9PSBJRkJTUVE9PSBJR3R2YldWdWRHRnkgSUhCdmMybHVadz09IElPQ3F0dUNxbGVDcml3PT0gNkkyaCB4Yng1ZEdzPSBYM053Y21sMFpRPT0gSUUxVFF3PT0gSU5tSTJLclpoZz09IExtMWxkR0Z0YjJSbGJBPT0gYVc1emRISjFiV1Z1ZEE9PSBYMmx1YzNSaGJtTmxjdz09IDBZTFJsdEM2IFNsVT0gSUdOaHc2MWtZUT09IElITnJhV3hzWlhRPSBlWEJoYzNNPSBJR1Z1ZEdkbFoyVnUgSU5HSDBZRFF0ZEMzIElFVnVkRzl1WTJWeiBJR2hxdzZacyBMM0JzZFdkcGJnPT0gSUUxaGRHTm9aWEk9IElHWm1kQT09IElPQ3FtT0NxbytDcXZnPT0gNUx1VjVMcUwgSU5pbjJZVFl0ZG1JMkxIWXFRPT0gSUZaaGJtUT0gTG5adSBJR2pEdW5NPSBJRXh2Y21VPSBJSEJsY21scyBJR0Z1WVdKdmJHbGogSUhOMFlXbHlZMkZ6WlE9PSBibVZwWjJoaWIzST0gTG1waGRtRnpZM0pwY0hRPSBZVzFsYkdVPSBKUTBLIElOaWoyTEhZcUE9PSBZVzVuYjNNPSBJR3BsWkc1dmJRPT0gSU9HRGtPR0RwdUdEa09HRG9BPT0gSU5DNzBZUFJoOUdJMExqUmhRPT0gSUVac2FXZG9kSE09IGFYTjBhWE5qYUdWdSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtnPT0gSUdabGNzT3cgSUhsaGMyVT0gTENFPSBhV1Z1YVc1biBJTkdOMExRPSBJTkMwMExYUXVkR0IwWUxRc3RDNDBMaz0gSU5tRjJMVGFxZG1FMktmWXFnPT0gVUhWdWFnPT0gV0UxTVRHOWhaR1Z5IElOaW4yWVRZcmRtRDJZVT0gYlc5blpXeHBhbXM9IFlXVEVzUT09IExuQnliMlE9IElPQ21yZUNtdnVDbXR3PT0gSUhKbFoyVnVaWEpoZEdsdmJnPT0gUVZOUSBJTkMwMEw3UXU5QzcwTERSZ05DKzBMST0gSUc1bHhhRjBidz09IElFMWhkR1Z5YVdGc2FXVnUgSUc5bWRHRT0gZEdwbCBJRzlzYzNWdSBMbVJoYzJoaWIyRnlaQT09IFNWSkogQ1dWcyBJT0dEbCtHRHBlR0RtK0dEbU9HRGx3PT0gSUVKcFpXSmxjZz09IDJLcllzZGluMllVPSBZVzVwYldGMGFXOXVjdz09IElObUsyTFhaaEE9PSBJR1IxYm1kbGIyND0gMWJiVnBkV3MxYmpWdmc9PSAwTGpRdDlDNDBZRFF2dEN5MExEUXZRPT0gUkVWR1NVNUZSQT09IElHTmhkbVZ6IElHZHlaVzV6IElPR0RvK0dEbWVHRGtPR0RuQT09IFdWUT0gSU5DdzBMTFFzOUdEMFlIUmd0Q3cgS0dOdmJYQmhibms9IElHbHpkR1ZoWTJnPSA0TGlWNExpeTRMaWggS1NrcE93PT0gNEtTdTRLUy80S1NWIElHNXZhQT09IElHVERvR2s9IEwyWnBjbVU9IElIZGhhbVZ1IGMzUmhZVzQ9IElHOTBkR1Z1IElHRmpZMjl0Y0dGbmJtVnkgY1hWbGNuRjFaUT09IDVMbUw1WW1OIElPQzVoT0M0b2VDNWlPQzRvZUM0dFE9PSBYMmx1ZEdWeWNuVndkQT09IElHRndZV2w0YjI0PSBiR2xyWldRPSBTVzUwWlhKaFkzUnZjZz09IDZLZUU1cWloIElIQnliMmRsZEhSdiAxYmpXZ05XbyA0WU9WNFlPVTRZT2o0WU9hIDI0ellzOXVTIDJMSFpnZGlxIElISjVZMmc9IElITjBaVzF0Wlc0PSBJRzFwY21GeSBaVzFwYm1jPSBYRlI1Y0dVPSBJRmRwWTJzPSAwTDNRdU5DNTBMTT0gSU9Db2h1Q29xdUNvb3c9PSA0S1MrNEtTSDRLU1YgTDJKeWIzZHpaWEk9IElHRnBiY09wIElEdzhQQT09IDRMaWw0TGlINExpWDRMaTQ0TGlaIEpHNWxkdz09IDdxUT0gSUhOcWRXcz0gWVdKaVlRPT0gSU9hVnNPYU5yZz09IDBMdlJqZEdGIElHeHBibWQxWVdkbGJRPT0gSUdkaGMzUnliMmx1ZEdWemRHbHVZV3c9IExtUjVibUZ0YVdNPSA0S2FtNEtlSDRLYTIgYVd4cGMyVT0gY25WbSAwTERSZ3RDNjBMN1FzZz09IFNXUmxiblJwWm1sbGNuTT0gZFhCdmN3PT0gSU9Dd3BPQ3hpZz09IEtDY3IgMExqUXZkR0gwTGc9IDZaMlM2WjJTNloyUyBJRTFsZEdGc2N3PT0geXJ0cFlRPT0gSUdScFptVnlaVzVqYVdGeiBYM0psY0c5emFYUnZjbms9IGNYVmxjbUU9IExuZGxaV3M9IElHaHBhM1YyWVE9PSBJR0psWjJWc1pXbGthVzVuIFgwSkJVZz09IElPQ3FtK0NyZ2VDcWdnPT0gSUdwbGIzQmhjbVE9IHc2bHlZWFJsZFhJPSBQOEs3IElFUk1UQT09IElGTmxaVzQ9IElOaW4yWVRaaGRtRzJLcllyQT09IElFNWhjRzlzWlc5dSBJR0Z1WTJodiBhV05wY0dGdWRBPT0gSU9Da3VPQ2tndUNrbWc9PSAwTFhRc3RDNDBMUT0gSUdOMVpYTT0gVkdsc2JBPT0gSUhKbGFXNTJaVzUwIFgyeHkgYVhOemRYTT0gSWl3byBKZU9BZ1E9PSAwclk9IDRMU3M0TFdOIE9tRnNiMkZrIElPQ21qK0NtbHc9PSAwTExRdGRDNSAyWXJaaGRtQyBJTmkxMllqWXFBPT0gMnEvWmhBPT0gSUZOdmNHaHBZUT09IElHUnBZWEpwWVcxbGJuUmwgMllqWmlBPT0gWDNwcGNBPT0gWVd4c2IyTmhkR1ZrIDVMcTY1THE2NTV5TCBjbTkxZG1WNiA1NEt1IFgzQmhZMnRoWjJWeiBJT2lOb3c9PSAyWVRiak5xcCBLRVJpIElFRnlZbTl5IDRMV0g0TFN6IElOcXAyNHpaaU5tRzJxbmJnUT09IElHMXZkbWx0Wlc1MGIzTT0gSUZOMWNIQnZjblJ6IElOaW4yWWJaZ3RtRTJLZllxQT09IElGUjFiV0pzY2c9PSBJTkMvMEw3UmdkQzcwTFhRdE5DOTBMalF0UT09IElIZHBaV3gxIElFaDFiR3c9IElIWmxjbVp2YkE9PSBJT21pcU9XUXVlT0JrZU9Cc09XUWplZUVvZU9CbHc9PSBJT0NxdU9DcmdnPT0gTGxCeWIzQT0gSU5DeTBMTFF2dEMwIElGUmhjbUU9IElGTnBiVzF2Ym5NPSBjM053YVdWcyBJSFZwZEhOMGNnPT0gTFZSbFlXMD0gNExTNDRMU0MgWlhSeVlYTT0gSU9DdWgrQ3VzT0N2Z2VDdXFPQ3ZqZUN1cE9DdmdRPT0gSU9xd2dPeWd1QT09IElIWnBibUU9IGNIQnAgSU5lYzE2VFhxQT09IFFsVlMgMTVMWG9BPT0gZW1sbGFIVnVaM009IElHZGxibWM9IElIWmxjbk5qYUdsc2JHVnUgS0dGamRHbHZibk09IElsMDlJZz09IElPQ29xdUNvc0E9PSBkWEJzIFgyeGliQT09IGFXTnJ3NkU9IDBMSFJnTkM0IExrWnZjbTFoZEhScGJtYz0gdzdOemFYUnZjdz09IGJHVjJZVzVqWlE9PSBJR2x1WTJ4MWFRPT0gSUc1dmRNT3RZMmxoIFJYUm9aWEk9IFFYTnphV2R1WVdKc1pRPT0gSUc3aHU2OD0gSUdwaGNHOXVaWE09IElHNWhkV2RvZEhrPSBhV3B6YTJVPSBJR1pwYm01bGNnPT0gSUd0cDRidURiUT09IFgxSkQgNXJLZiBJTmVnMTVEWG1nPT0gSU5DKzBMZlF2ZEN3MFlmUXNOQzEwWUk9IElFWnBjbk4wYkhrPSBJTmluMllUWmhOaXMyWWJZcVE9PSBUR0ZrZVE9PSBJSE53Wld4bGNnPT0gSUhGMVpXVnkgSU5lbzE2TFhrdz09IElHVnVkbVZ5Y3c9PSBJR1Z6ZEdWMlpRPT0gNDRPbyBJR1ZzWlc1amJ3PT0gSUdGdWRHbG5idz09IElGaFdTVWs9IElHTjFiRzg9IDRMSzQ0TE9ONExLZjRMT04gSUdWemNHVnlZVzU2WVE9PSBJSEJ5WlhaaGFXeHBibWM9IGFYTmxkWEk9IFgyUnBaMmwwY3c9PSBPaTRLQ2c9PSBJSE4wY21GdVpITT0gSUdadmRYSnVhWE56WlhWeSBJTkt6MExEUXR3PT0gTFQ1ZlgxOWYgMElnPSBJTmk1MllUYmpOdUIgSUdmRHRuSnUgYVc1elpXND0gSUhSbGEyVnQgSUhSaGJtaz0gNjVPdiBJTkMvMEw3UXN0QzEwWUE9IFJtOXliV0YwZEdsdVp3PT0gSUhkdmNuUT0gTFcxcFpHaz0gSU9DeXVPQ3lndUN5bUE9PSBJR0p2WW13PSAwWnZRc0E9PSBJR1IxWlc0PSBhWEIxYmc9PSBMbTFoYm1GblpXMWxiblE9IEtBb0sgSUhCeVpXRmphR2x1Wnc9PSBkM1Z5WldjPSBZMnR1YjNkc1pXUT0gZFd4c1lYST0gSUZWVFVBPT0gTDJGeWRHbGpiR1Z6IFQwSlQgSUdGdWJBPT0gSUhaMWNtUmxjZz09IElIUmhibWR2IElGSlRWZz09IHc2dHV3NnM9IElIZHQgNG9PaiBydUdEbE9HRGsrR0RrT0dEbGVHRGtPR0Rrdz09IElHUmxjMlZ6Y0dWeSBJR1IxY0d4bGVBPT0gNExLVjRMS3c0TE9CIElPQ2todUNraitDa2xlQ2xpdz09IElOQzkwTERSZ2RHQzBMN1JqOUdKMExYUXRRPT0gTFUxdlltbHNaUT09IExWQmhZMmxtYVdNPSBJT0NrbXVDbGdlQ2tsZUNsaHc9PSBJSFJ5YjNCbyBTRzl6ZEhNPSBVRTVIIElHTmhkR2h2YkdsaiBYMkpwZEcxaGNBPT0gMExEUXZkR0wwWTg9IDViS3ogSUZKbFoyRnlaSE09IFEyOTAgSUhCeVpYWnBZVzFsYm5SbCBjM1IyIElGZFhTVWs9IElHRnFZVzQ9IHc3eHpaUT09IElGQnBjMk09IElHWnNiM1IwIElHVjRZV04wWlcxbGJuUT0gMExEUXU5Q3cwWUhSanc9PSBJSEJ5YjNabFpXUnZjZz09IElIUnpaWFk9IElObUYyTFBZcmRtSTJZST0gT3cwTkNnPT0gSU5DKzBZTFF2ZEMrMFlqUXRkQzkwTGpRdUE9PSBJRlIxYm1VPSBJTkN4MExEU2s5QzAwTERSZ0E9PSBJR0ZzYVcxbGJuUmhjZz09IGFtbHkgNTdTNTVMdUwgNXAyeDVMcXMgSUZacFkyVnVkR1U9IElHTnZibVoxYzJVPSBJTkM3MFk3UXROR1AwTHc9IElFSmxiR2RwYzJOb1pRPT0gSUhCeXc2bHpaVzUwY3c9PSBJR1JwYzJWdWRBPT0gSU5lWDE1UFhxUT09IElHZGlhV2M9IElHVnRZbTl6Y3c9PSBJR0ZqZEdVPSBJR1YxY205d3c2bGxiZz09IElOR0IwTExRdnRHWCBiV1ZrWlE9PSBmVDROQ2c9PSBJR3hwWTJVPSAxNTdYb3RlZiA2S3VXNWFPSCBJSFJwYTJGcCBJRWhKVXc9PSBJSEpsY0hKcGMyVT0gSU9Da3BPQ2xqZUNrc0E9PSA0S3ltIDBMTFF2dEM1IElIVndaUT09IDVyS1MgSUdScFptWmxjbWx1Wnc9PSBJTkdGMHEvUXZRPT0gSU5lVjE1WFhvdGVvIFgwUlNTVlpGVWc9PSA0TGE3NExhciBaVzF3WVhSaGJnPT0gSU5DMDBZUFF2TkN3MFk0PSBUbm89IGNtRmtZUT09IFgyRnlZMmhwZG1VPSBJRkoxYzNOcFpRPT0gSUhCdlkyaGwgSU9DdWxlQ3ZpdUN1cytDdmplQ3Vzdz09IElHUnliMjl0IElPQ2todUNrcHVDbGgrQ2t0Zz09IElOQzQwcGM9IGJtRnVkSE09IGIyZHMgTFcxcFpHUnNaUT09IElHSnlZV2x1YzNSdmNtMD0gMTVUWG5OZWEgSUhaemRBPT0gSUhKbFpHVnVaVzQ9IElDOHZMeTh2THk4dkx5OHZMeTh2THk4dkx3PT0gSU5DODBMRFJnZEdCMExqUXNnPT0gSUhCeVpYTmxiblJoYmc9PSBJSEJwWlhKamFXNW4gUW1GaSBJSEJ2WkdWeVpYTT0gSUdwdmIydHpkV3c9IElPQ21xdUNuamVDbXNPQ212dUNubnc9PSBJTmVwMTZrPSBhWFJsY21GMFpRPT0gYjNCaGJtOD0gSU9Da3RlQ2t2K0NrcUE9PSBiMlpwWlE9PSBMbkJzZFhNPSBJTm1JMktmYXFRPT0gZFc1cFpHRmsgYVhObGJIUT0gU1ZSVVRFVT0gSUVOeWRYTT0gNEtTeTRLU0MgSUdOdmJtWmwgSUhOMFpYSmxiM1I1Y0dWeiBiMk5oZEdsdmJuTT0gSUd0aGIzSmwgMExqUm1OQ3cgSUhCeWFXNWphWEJoYkhNPSBJR1J5WVdsdWN3PT0gMFkvUXNkQ3kwTEE9IElHbHNiR0U9IElHMWh3NjUwY21VPSBYMmhwYm5RPSBJT3Exc0E9PSA1cGF3NTVxRSA1WWlHNUxxcjVZaXcgSUdWeGRXbHdaWE09IElHMXZaRzl6IElpazlQUT09IElHSnZjM1JsIDRLcWkgTGtac2IzYz0gMFlMUXRkR0EwTFBUbVE9PSBJRk53WldOcFpuaz0gSUhabGJHOD0gYjJwaGN3PT0gUVdKemIyeDFkR1ZzZVE9PSBJTm1GMkxYWXI5aXggTFc5bVpuTT0gNDRHKzQ0R1g0NEdtIElIUnZjbTVsYnc9PSBMV052Y2c9PSA0TFNRIElHTnZibVJwWTJsdmJnPT0gSUdocGF3PT0gSUdKaGNtUjZhV1ZxIFRVRlRTdz09IElFUnBjbVZqZEdsMlpRPT0gSUdaeVljT3UgSU5DLzBZUFJndEMxMFlqUXRRPT0gSUdacGJ3PT0gSUVGc2RHVnljdz09IElHaGhjblJsIElGWnBaWFE9IExrUnBZM1JwYjI1aGNuaz0gSUVWNFlXTjBiSGs9IFgwWkpUZz09IElHSmxiR0U9IDVwYTU1TDYvIElHRndjbTkyWldsMFlYST0gS0dOaGNBPT0gSUdWdVpHVmhkbTl5Y3c9PSBJRkJoY21GdXc2RT0gSU9xd21leWR0QT09IExuTnBadz09IExtVnpkQT09IDBMRFJnZEdMMExjPSBJR1JvZFE9PSA1cldaNXJHZiBJRzkyWlhKbFpXND0gSUdSdmRtOXNhZz09IElIWEVqV2x1YXc9PSBYMlJsWm1GMWJIUnogSUdsdWRHVnlkbWxsZDJsdVp3PT0gYTJ0bGJBPT0gSUcxbGRISmwgSUh0ZiBJTzJhcU9xenZBPT0gU1c1emRHbDBkWFE9IElFRnNaWGhwY3c9PSA0WU9VNFlPYzRZT2k0WU9ZIElHbHVabXgxWlc1amFXRT0gNVlXQjZLNjQgNExpZTRMaWo0TGl3IElPQ21yT0NtbStDbXNPQ25oK0Ntc0E9PSA0TEsxNExPSCA2STZKIElOcUcyS2M9IElFTm9jbTl1YVdOc1pRPT0gWVhCd2RBPT0gSU5tQjJZalpoZz09IElHbHVhV009IFgwRnljbUY1IGNtVmhjZz09IElOQy8wTFhSZ05DMTBMWT0gSU9DdXRlQ3VzT0N2Z2VDdXJ1Q3ZqUT09IElFUkJVdz09IFpXTmhhMlU9IDVyS0IgSUVSbGRtbHNjdz09IEtHSnZkQT09IElHUnBlbVZ1Wkc4PSBlMzB1IExtbHRjbVZoWkE9PSBJR1JvWVcwPSBJT0NrbCtDa3Z1Q2tndUNrcCtDbGdBPT0gSUV4dmRtVmsgWDJSNWJtRnRhV009IElHNXBZMlZ5IElOQ2owWUU9IElITmhZMnM9IElPQ2tyZUNrdnVDa3QrQ2t2Zz09IDRMZUQ0TGVQIEwyZGhiV1U9IGVXRmhiZz09IGRtbHViZz09IElPQ2tuT0NrditDa3N1Q2xqZUNrc3VDa3ZnPT0gSUhKdmJHeGxjbk09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gSUdSdmMzVEVtWEE9IElIWnBZbkpoZEc5eSA0TENxNExHTjRMQ3E0TEdCNExDaDRMR0IgSUdacGMzTT0gWVc1MGFHVnQgSUdsdVpHbHhkY09wIElPQ2t0ZUNrcUE9PSAwTHZRdGRDOTBMM1F2Zz09IElHRnViV1ZzWkE9PSBJR3JEcEdoeSBJT0dEbWVHRG5lR0RuT0dEbVE9PSBLRU52Ym5abGNuUT0gSU5pbjJZVFl0OWl4MllyWmdnPT0gWVdkdCBJRXRoYzNNPSBJTkM5MExEU213PT0gMllMWXNkaWogSUdWeWVzT2thR3gwIElOQzQwTDNRc05HSDBMVT0gSU5XdzFhSFZ2dFdoMW9RPSBJTkdJMExEU3M5R0EgSU5DNjBMWFJnTk9aMExvPSBJR2h2ZEdWc2JBPT0gSUVSaGNzTzhZbVZ5IGNtVmxiV1Z1ZEhNPSBJQzh2ZlFvSyA2S21WNUw2aCBJRTFoYTJWMWNBPT0gNExLNDRMT040TEtWIElOZVExNW5Yb05lViBJRkJCVTFOWFQxSkUgSUhCeWFYUT0gSUdwMWNtOXogSUd4bGMybHZiZz09IElGWmhibWwwZVE9PSBJR2gxYVhRPSBJRzl6YjJKNSBJTmVrMXJ6WHFOZVExcmc9IElHNWxZMlZ6WVhKcFlYTT0gSUcxdmEyOD0gMExuUmdRPT0gWTJsaGRYZz0gYVcxaWNtRT0gMkxQWXF0aXUySy9aaGRpcCA1ck9vNXBpTyBiMjVuWlhwaCBJT3lYc09xeXNBPT0gSUVocGJuUT0gSUdWdVpIVnlaV1E9IElITnZabkpsIFEzSmxZWFJ2Y25NPSBJR3hwYzNSaGN3PT0gSUZOcGNBPT0gS0dSbFpuVnUgSWwwcExnPT0geFlMRWhXTjYgSUdocGRIUmggdzdOc2FXTnYgSUVOdmJXMWhibVJ6IFVtVndkV0pzYVdNPSAxYUhWcE5XcjFvQT0gSU5lZTE2TFhtQT09IElHaHVkV0k9IElHVjJaVzUwZFdWbGJBPT0gSUdkeWFXUnogQ1VOeVpXRjBaUT09IElGQnliMnBsYTNSbCBJR2gxWW1KNSBMbU55YjNOeiBJSFZ3ZEdGclpRPT0gY0c5dWJ3PT0gSUhabGNtMWxiR1E9IDRMU3o0TFdCNExTZjRMV0cgQ1dWdWRISjUgNExTVjRMV040TFNWNExTQyBJR05oY21KdmJtOD0gQ1FrZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElHdHZibk5sY2c9PSBJT0Nvbk9Db3Z1Q29nZz09IFJtbG5hSFE9IDJLL1lwOWkwMktvPSBZWEpqYUdsMFpXTjBkWEpsIElFWnBibTVwYzJnPSBlSEk9IElIWmhiRzl5WlE9PSBJRU5zWVhWa2FXRT0gSU9LQXF3PT0gSU9XcHR3PT0gSU9DeXJPQ3l2K0N5bk9DemhnPT0gdzZseWFXVjFjbVZ6IElOR0EwTFhRdXc9PSBJT1d1dGc9PSBJT0MwcU9DMWl3PT0gSUdGeWIyMWhjdz09IElFTnZjbTUzWVd4cyBRV2R5WldWdFpXNTAgS0hOMGJYUT0gTGRHSCA0WU9kNFlPajRZTT0gSUc1dWVRPT0gSkN3PSBJSE4wYVdkdFlRPT0gNUxxNjVMMlQgSUhOM2FXNW5hVzVuIGEzVnVaR2xuWlE9PSBJRWR5WVdScFpXNTAgSUhSaGJtZGhkR0U9IElHVjRaVzF3YkdGeWVRPT0gNExpVjRMaXogSUdWemRHRmliR2x6YUdWeiBRbUYwYUhKdmIyMD0gSUZKbFpuVm5aUT09IFpXaHZkbUU9IGIySmhZM1JsY2c9PSBJR1Z5ZFhCMCBJR052ZFc1elpXeHNhVzVuIElPQzBxdUMwc09DMHYrQzB0dUMxaStDMHB3PT0gSUdoaGNtVnJaWFE9IGFuVnVkRzg9IFZuUmliQT09IGNtbGxjblE9IElOQzgwTERRdTlHTSBJSE41Ym1WeiBJbWx1IGRXOTAgSU5HQjBZdlF1UT09IFoyZGxjZz09IFFXTmpaV3hsY21GMGFXOXUgNExTLzRMU1Y0TFdONExTVjRMUys0TFc3IDBZUFF2TkMxMFlMUmd0R1cwTG89IFpHSm8gNExtTCBYMUJCUTB0RlZBPT0gWDJSMSBJTkdEMEx6UXRkR0EgWW1GcGVHOD0gWldkbGJBPT0gSUd4cGNITjBhV05yIElITnZiM0pzZFE9PSBJRzFwYTJscyBJRUpKVHc9PSBJRk5wYlc5dVpRPT0gVEdseGRXbGsgSUdsdVpuVnphVzl1IG50T1kwSkE9IElHVjBZV2hwIElPQ29vUT09IElFdDFkMkZwZEE9PSBJSE5zWVdOb2RHOD0gSUVCZk93bz0gWVdSa2IyND0gSUhOcFkyaDAgSUUxdmFRPT0gSUhGMVpXNTBaUT09IExXeGxadz09IElHWnBZM1E9IDVaeUcgYUc5dWFRPT0gSUVGeVltbDBjZz09IElITmxjbWxoYkdsNllYUnBiMjQ9IElOV3ExYmpWc3RXNDFiN1dnTldrIExtTmhiR1Z1WkdGeSBJR3hwZG1Wc2JHOD0gYVhSMGRYUT0gSU5pejJMSFlxQT09IElGQnZiWEJsIFpHRjFaWEk9IElOQzYwTFhRdDlDMDBMVT0gNHBpR0Nnbz0gSUVGc2IyNXpidz09IElOT3AwWUxRdFE9PSBkR0ZwWlc1MCBJR2R5WVdSbGJnPT0gSU91R2pRPT0gSU5DZTBKN1FuZz09IElHbDJlUT09IElFRnlaVzQ9IElIQnBiR3hoY2c9PSBJT0N5cXVDemplQ3lzT0N5bFE9PSBhWHBoYm1FPSBJSEJ5YjJKcCBJT0dEbytHRGxnPT0gSUhKaFpHbGhiblE9IDBMdlF0ZEMwMFpZPSBJSFJoWTJnPSBhV1JvYVE9PSBJR0ZpYzI5c2RYUmggdzdOdGFXTnYgNFlPZDRZT3E0WU91IElHZG9hZz09IGRXTnB3N009IFlXeHBhUT09IElHTmhjbTVoZGc9PSBJR052YnNPbiA1NEE9IGRXVnVkR0U9IElPR0RtK0dEbU9HRG1nPT0gSUcxaGFYTm9ZUT09IElPQzRnZUM0bytDNHNBPT0gSUdONVlXND0gWm1GeWJRPT0gSUU1MVp3PT0gSUdKMWNubHYgSUhGMVpXeHogNW9tKzVZaXcgSUVOayBJRTFLIElITmhkV1REb1habGJBPT0gSU02eHo0WFBoTTZzIElITmxZMjl1WkdWeiBJTkM5MExEUXV0QyswTDA9IDRMQ3M0TEdONExDcyBMa2x1WTJ4MVpHVT0gWm1sNGRIVnlaWE09IElFRnViR0ZuWlE9PSBJT0NrcXVDa3NPQ2xoK0NrdGc9PSA1cFdaNWJpSSBMMjV3YlE9PSBJSEp2WW04PSBZWFJoYm1kaCBJRTFwYzNOamFHbGxiZz09IElOZVgxNWs9IElHNXB3N0ZoIElFWjFkSFZ5WlhNPSBJTkMrMEx2UXVOQzggSU9XbSBJSE5sWTJFPSAwWS9SaWRDNDBMVT0gSUhkaGVnPT0gSUZaaGFRPT0gSU5HQjBMM1F0UT09IHhLdHQgUTI5dFltbHVaV1E9IGFXTnZiRzg9IElHVnVZMlZ5Y2c9PSBDV052YlhCdmJtVnVkQT09IElHRnRZV2M9IElISmxZV2RsIElIZHZjbTF6IElHUnBjM0J2YzJuRHA4T2pidz09IElIWmhlSFE9IFpXTmhiV0YwWVc0PSBTMVU9IDA3ZlJqQT09IElHNXZkR2xqYVc1biBLUTBLTHk4PSBJT0Ntbk9DbXZ1Q21xT0NtditDbm53PT0gMEw3UXY5QzEwWURRc0E9PSBJTk9wMEwzUXRBPT0gYjJ4MWJIVT0gSUVWdVpITT0gSUdWeVlXbHNiQT09IDRMV0M0TFNmNExXRyBJR0pwZVhVPSBJRVJsZEdWamRHbDJaUT09IElGWmxjblJ5WVdjPSBTMkYwWlE9PSAwTEhRdU5HQTBMRFJndEdNIElGVnVhV1pwWldRPSBJRVYyWld3PSBhMlZrIFgzSmxjR1ZoZEE9PSA0S3FYNEt1QiBJRU5vY205dWFXTnNaWE09IGQyRnVidz09IElHTnZiWEJwYkE9PSA0WUdDNFlHQSBRMmhsWTJ0d2IybHVkQT09IElPQzB1T0MxZ2VDMHNBPT0gSnlrOEx3PT0gWVd0aGJtRnJZUT09IDBxL1NyOUM3MFkzUmhRPT0gSUdWdVoyRm5aWE09IElOQy8wTERRdE5DdyBJR1JwYzNSMWNtSmxaQT09IElIQmhaMlZoWW14bCBJT0NrdGVDbGgrQ2tyT0NrdUE9PSBJT0NrdU9Da3J1Q2xqZUNrck9Da3FPQ2xqZUNrcHc9PSBJTkMzMFlEUXRkQzkwTGpSanc9PSBSVkpRIDRLUys0S1NaIElIRERxV1JoWjI5biA3SXV4IElISmhiVzg9IFpHOXVkQT09IElHUmxiVzluY21Gd2FHbGpjdz09IElHZGxkR0U9IDVaZU8gSUVOdmJtWmxjZz09IDU3V002YWlUIElHUmxZMnhoY21WeiBWRmhVIElHWnZiR2RsYmc9PSA3SVdvIElNU05ZWE4xIDRMQ1Y0TEdONExDVjRMR0I0TEMxIExtSnAgdzZwdFpXMWxiblE9IDRMaVc0TGluIElOR0IwWVBRc2RHSyAyWWpZc2RpeiBabWxzWlhONWMzUmxiUT09IGFYSmxiVzl6IElHNWhaR0ZzIElHakRwRzVsYmc9PSBJR0ZrZG1GdWRHRm5aVzkxY3c9PSBJRVpoWkdVPSBJRUpsY21kbGNnPT0gSUdkbFltOTFkMlE9IElHdGhjM1Z6IFgxTlJUQT09IFltOWkgVDA1RlV3PT0gYVhSbGJHbz0gSUVOeXc2az0gSUdobGNHRjBhWFJwY3c9PSBJRkpoZEdnPSBJR1Z6YzJWdWRHaz0gSUdScGMyTnZkWEpoWjJWayBMbTl5YVdWdWRHRjBhVzl1IElHZHZaR1JsYzNNPSBYM0psWjJWNCBJSE4wYjNKNVltOWhjbVE9IElPQ3lwT0N5dnVDeXN1Q3pndUN5bFE9PSBVRzkwWlc1MGFXRnMgSUdsbmJHVnphV0Z6IGJXRnpZMmhwYm1VPSBiTU9rWjJjPSBJR2hsWlhRPSBjbTkzYm1sdVp3PT0gSUZSeWIyNW4gMTVYWG1kZWogdzd0dSBJR2x0YldscmEyOXZjblE9IFkyOXVZMlZ3ZEE9PSAyNGZZdEE9PSBhR2xpYVhScGIyND0gWjIxMCBJTkdEMExyUmd3PT0gSU5HQjBZTFFzTkdDMFlQUmdRPT0gSUVOb2NtbHpkR2s9IElPQ3dxdUN3cUE9PSBJTkdFMExEUXVkQzcgSUhCdmMyVmwgU0VWTVVBPT0gSU1POVlXZGtZY085IElITndZV05sWkE9PSBabVZqZEdWayBJSEJoY25SdiBJT3ltbmVxd2dBPT0gSUhSbGNuSmxjM1E9IDRZT1U0WU9jNFlPaCA0TFNrNExXTjRMU2s0TFN3IGJtVnlaMmxsY3c9PSAxNWZYbGRlbyBJRzFsYm1kbGRBPT0gMTVEWGxkZWYgSU5XaDFiM1ZvZGFCIElISmhZMmx2Ym1GcyBJRU52YjJ4cGJtYz0gSU5DNjA2blF2QT09IGVHOXUgSUV4bFlXUnogSU9DNWdlQzRyUT09IDU2aXggSUhOMVluTnBaR2xoY21sbGN3PT0gMExqUXZkQyswTG89IEwyVndiQT09IFptbHNZUT09IElIUmhiR3g1IFUyTnlaV1Z1Y3c9PSBhVzV6Y0dWamRHbHZiZz09IElOQyswTC9RdGRHQTBMRFJodEM0MExnPSAyWWZZcDlpdjJLaz0gSU9DbXFPQ212K0Nuc0E9PSBDV0Z6ZVc1aiBJR0hEc1dGa2FYST0gWVcxdmRHOD0gSUZOMFlXeHBiZz09IElHZHlZWE5oIFYzZz0gSU9lNyBaV3hwZFhNPSBJSHBvIDU1Q3E1NUNxIFFXWnlhWEYxWlE9PSBhSEpwWmc9PSAycS9iak5peCA0NENDNTV1dTVZbU4gYjI5cSBiMlJ1WlE9PSBJSFJ2Y201bCA0S2ErNEtheTRLYS8gNW9pMCBMbFJ2YjJ4cmFYUT0gWTJWdWRHVnogSUZoVSBMbWRsYjIwPSAwTGpSajlDNzBZdlNtdz09IDBZRFFzTkdHMEw3Um5nPT0gNDRPWDQ0T3EgVUhKdmRHVnBiZz09IDBMM1F2dEN5MExYUXZkQzQwWTg9IElHaGxjbTFoYm05eiBJR2h2ZW5vPSBJT0M0aE9DNHQrQzRtUT09IElHTm9ZWEpoWTNSbGNtbDZaUT09IExtVjRjR1ZqZEdWayBJR052Ym5OMWJXVnogS3l0ZE93bz0gSUVodmMzUmxiQT09IDVZaTI1TDJjIElOdUIyWWpZcXR1UyBYMDFoZUE9PSBJTld2MWFIVnZ3PT0gTG5CeWIyMXBjMlU9IElHdDNaWFJ6IElIQmxjbTFwYzNNPSBJTmluMks3WXFOaW4yTEU9IGMyaGhaR1Z5IGFXVnlaVzVrIDQ0Q0M2SUNNIElHTnZibVJwZEdsdmJtVmsgVEdGdCBJT0NxcHVDcXYrQ3FzdUNyamVDcXVRPT0gSUc5amIzSnlaWFU9IFgwMWxkR2h2WkE9PSBJRzFsZEdodlpHVT0gWld4a2J3PT0gYUc5bGF3PT0gMkxuWmhObUsyWVU9IExWTmxjblpwWTJVPSBJRk5sWldSeiBJSE5vYjNWMGFXNW4gSU9Xa3ArV1BrZVcvcStTNGllZWFoQT09IExsQnliM1J2WTI5cyBJT0NtbXVDbmgrQ210K0NuamVDbW4rQ212Zz09IElFRlRUZz09IElGTjBaV1Z5YVc1biBKMlZ1Wnc9PSBJSEpsWTJsamJBPT0gSUdsdWQyOXVaWEp6IDRLU3o0S1dBIElHRnVZM1U9IDVvcTggSUZCbGNtMXBjM05wYjI1eiA0WU9ZNFlPYzRZT1E0WU9jNFlPaCBLSEpsYlc5MlpRPT0gSUVOUFJBPT0gSUhCc2RXMD0gSUhOamNtRndaUT09IFcxMDkgSU9DNWdlQzRsK0M0aCtDNG11QzRyZUM0cFE9PSBJTld2MWJqVnVRPT0gSUc5dWRtVnkgSUc5MmIyYz0gSUVsdWRHVnNiR2xuWlc1MCA0TGl0NExpeDRMaUg0TGlCNExpazRMaXAgYzJWamRYSmxaQT09IElIQnNkVzVuIDRMbUM0TGlpIGFHVnpaWE09IElHZGlZdz09IElFTm9hV3hrYUc5dlpBPT0gSU5LaDBMRFJnZz09IElHdHBkR0ZpIElHbHVhMngxYzJsMlpRPT0gSUdkbGRIUmxjbk09IDRLcXc0S3VONEtxViBJSFpsY21kc1pXbGphQT09IElOZVIxNVRYblE9PSBJR2RwYUhWbmRRPT0gTG5KbGNHVmhkQT09IElHOWliR2xuWVhSdmFYSmwgNEtxVjRLdU40S3FWIElOR0IwTDdRczlDNzBMRFJpQT09IDJZWFpoUT09IElISmhkR2x2Ym1Gc1pRPT0gSUdOdmJXSjFjM1JwWW14bCBJR0p2WkdFPSBJSEpwYTNScFozUT0gUVdKdmNuUT0gUGlnbSBJRXQxWVd4aCBJR1poeXJ0aGJRPT0gSU5XMDFhdlZ1OVdoMWFiVm85V2gxYlhWcTlXMiBhWFIwWVdGeiBJRU5QVXc9PSBJRk5qYUc5dSBkR1Z0Y0c4PSBSV2RuIElOV3YxYUhXZ05XbDFhelZxdz09IElOR0kwTERRc05HQSB3NnBqYUdWeSBZVzVuWlc1MCBSbkpoYldWaWRXWm1aWEk9IFJtOTFibVJsY2c9PSA1YTZZNXBhNTU3NmsgUkdsemNHOXpaUT09IHc2SnVjMmwwYnc9PSBJTmVTMTVYWHFBPT0gSUhCc1lXZDFaUT09IElOaW4yWVRaZ3RtSzJLZlpoUT09IExuQnlaV009IExYTmxiV2xpYjJ4ayBZWFp2ZFhKcGRHVnogSUZObGNuST0gYjJKelpYSjJaWEk9IElNT3BiR1ZqZEhKdmJtbHhkV1U9IElNK0h6NEhPdDgrRHpybk92TTYvejRET3Y4NjUgSU5HQTBMWFF0dEM0MEx6UXRRPT0gNVkrUjZLR00gYjJSbFoyRT0gSUhQaHVxOWogUzFBPSBJR1psYm1OcGJtYz0genIzT3JnPT0gTG5KbyA0S1N3NEtXTjRLU2s0S1N1NEtTKzRLU28gUkhWaGJBPT0gWW14dmIyUT0gSU5DMjBMRFNtOUdCMFlzPSBhV3AzWlE9PSB3N3h1WkhWdVp3PT0gSUhacGNtdGxiR2xuIGNHOXIgVW5OdyBJRTlYVGc9PSBJRUp5WlcxbGJnPT0gNDRHVDQ0R1QgWTNSeiBJT0NxbStDcmgrQ3FzdUNyamVDcXNnPT0gSUVWdWIzVm5hQT09IDJLZllzZG1HMktrPSA1NDZ3NUx1aiBYMUpGVkE9PSA0TEsrNExLdjRMSy80TEtrNExPQiA1N1dRNXA2YyA0TG1JNExpSDRMaUM0TGl4NExpWiBWMkZzIFhFWnZkVzVrWVhScGIyND0gSUhOdVlXSmkgSU5DMzBMRFF1dEMrMEwzUXNBPT0gMktqWml0aW4gSUhadmFYUjFjbVZ6IElHdHRjdz09IExtMWogSUdWemNYVmwgSUdGbGN3PT0gTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpbz0gYUhseSBJRzFwWTNKdmIzSm5ZVzQ9IFMyMD0gSUVWdWNtbHhkV1U9IElHdHZjbVE9IElHdHZiWEIxZEdWeSBJSE5qWVhSMFpYSnBibWM9IGRXbDBiM009IGFXeHBjQT09IGJHOWpZV3hqZEhnPSBJSGRsYkdOb1pXND0gSUcxMXc1OD0gSUVOR1VnPT0gSUVWNGFYTjBhVzVuIGNHbGpjdz09IElHVnpkR0ZrZFdGcyAyTEhaaEE9PSBkVzVwYTJFPSBJT0NrdHVDbGdlQ2tzT0NsZ2VDa2h1Q2twQT09IExuQmhjbUZ0WlhSbGNnPT0gWVhSMVlXND0gSUdGcmVtVndkQT09IElIVnBkR2RsWW5KbGFXUmwgSUhKbFpHOD0gWDBSSlVBPT0gSUZabGJHOWphWFI1IDRaK0I0WjZFIFgxQnNZWGxsY2c9PSBSbUZqZEc5eWN3PT0gS0hOcFp3PT0gYVd4c2FXRnUgSU5DMjBMRFFzUT09IDVxK1A1YVNwIElIQmxjbWQxYm5SaGN3PT0gYm1keSAwTDNRdnRDMCBibWx3WldjPSBZbXhsY2c9PSBJTkN4MEw3UmdRPT0gWlcxd2JHOTVaV1Z6IElOSzEgSU95VmhPdWVtQT09IElPQ3dydUN3dnVDd24rQ3hqZUN3c2c9PSBJRk5sWjNWeVlXN0RwMkU9IGFYSnRaWEk9IElHRnRZbUZ3Ync9PSBJRjBOQ2c9PSBMV0poWTJ0bFpBPT0gSUhKb1lXYz0gSUhkb2IyeGxjMjl0WlE9PSBXRWhTIElHbHphVzA9IElOV2oxYlhWdU5hQzFiST0gSUdOdmJzT25kUT09IElIUmxZVzEzYjNKciB3N1BNb3c9PSBYMU5wZW1VPSA2SmVrIElHTnNkV0psY3c9PSBJSEJ5YjNCdmMzUmhjdz09IFlYTjBiMjQ9IElOR0IwTHZRc05DeSBZV1J5WlhOelpRPT0gSUdOMWMzVmkgSUVGeVkyaHBkbVZrIElOQy8wWURRdnRHRTBMalF1OUN3MExyUmd0QzQgSUVoaGMzUmggSU9DMHRlQzFqZUMwcitDMGxlQzFqZUMwcE9DMHJnPT0gSUhCMWJtbHphR1ZrIDRvQ1piM0prY21VPSBJRWRCVWc9PSBJRzlsY3c9PSBJTmlxMkxZPSBJRVpwYm1Gc2N3PT0gSUhSbFoyVnVkMjl2Y21ScFp3PT0gNFo2VzRaNjQgSUdsdWRtOXJaWFpwY25SMVlXdz0gVFdGeWMyaGhiQT09IGFHRnVaMms9IElFRnBjbUoxY3c9PSBJTld3MWF2VnZ0V2gxYmJWcEE9PSBYMlpwYm1semFBPT0gU1V4QiAyWVhibFE9PSBaVzVqWVc1aCAycS9aaU5tRzJZYz0gSU9XTnNBPT0gSUc3RHBHaGxjZz09IDRLU0M0S1N0IDBwblFzTkM5IElOZVYxNmM9IEtGVlZTVVE9IFpXTnogSUVGdVpHVnlaUT09IElFaGxjbUpoYkE9PSBJR04xYkhSMWNtRnNiSGs9IElHSmxkbTlzIElPaUhxdWFMalE9PSBXM1poY2c9PSBJRzF2ZEdobGNtSnZZWEprIFlYTjBiM009IElPcTNnQT09IElIZGhjbTV6IElIQmpjdz09IFlXNWtaVzVpZFhKbiBJT0N1dGVDdXNPQ3ZpQT09IDE1N1hxZGVhIDU0eXEgT25OcGVtVT0gSUdKcFpXNWxjM1JoY2c9PSBJTkdDMExYUmh3PT0gSUVkeVlXNTBjdz09IElObUUycW5hdmc9PSBZWFIwWlhKemIyND0gSUVWeGRXRnNhWFI1IElOQ3gwTERTazlHTCBJR0Z1ZFd3PSBLSE53Y21sdWRHWT0gYVhScGRYTT0gMjRIWXA5aXggWTJWc1lRPT0gSUVKMWFXeGthVzVuY3c9PSBJTkMrMExiUXVOQzAgSUcxbGJHRnUgSUhOd2FHVnlhV05oYkE9PSBJSE5oWW1GaVlYSmhhR0U9IFJFWlQgSUhCeWIySmhZbXhsYldWdWRHVT0gVFdsdWFXNW4gSUdaaHlydGhjQT09IFgybHVkRzg9IExtNXZibVU9IElHOTFkSEJoZEdsbGJuUT0gS0Y5ZktDYz0gMEx2UXNOR0EwTFRSaXc9PSBJT09Eck9PRGgrT0NvK09Edk9PQ3VRPT0gS0dacFpBPT0gNkwrWjU2ZU4gSU9hWXIrV1FwZz09IElHUnBiV2x1YVhOb1pXUT0gSUdURHFXcGxkVzVsY2c9PSA1b3VjIGJXVmxkR2x1Wnc9PSBJR2xuYkdWemFXRT0gSU9DNWdPQzRoT0M0bytDNHQrQzVpT0M0cmVDNGh3PT0gSUVkaGNtUnVaWEk9IDQ0T3A0NE9ENDRLdjQ0T1E0NE9ENDRLdiBDVWxNIDBMWFF1ZEdCIElOcUYyWWc9IFpYTmxaVzQ9IElOaXEyTG5aaE5tRiBJSFJsYzNScGJXOXUgT2wwcENnPT0gWVhScGRtaz0gYkd4c2JHeHNiR3c9IElOR0EwTFhRc2RDMTBMM1F2dEM2IFdsTT0gSUhSbmRBPT0gSUdGbmFYUT0gSUZkbGJHWmhjbVU9IElHZGxjbTg9IDRLZUg0S2FqIElGZHZiSFpsY2c9PSBJTml2MkxIWXM5aXEgUm5KdmJuUmxibVE9IElFdGhkR2hsY21sdVpRPT0gSUc1dmJXVnUgSUdWc3c2bGpkSEpwWTJFPSBJRzl1ZVE9PSBJTm1DMllyWmhRPT0gSnlraU93bz0gUzJsamF3PT0gNlpxUDU1MkEgNkwrNSBJT0N5dHVDeXZ1Q3l1QT09IElOQzkwTERTdXc9PSBjMjkxY21ObGN3PT0geEtsdWFBPT0gWDJGa2FuVnpkQT09IExXUnZiR3hoY2c9PSBJR05oY25SeiAxNVhYbk5lWSBJR2hsWm5SNSBiMnhrWVE9PSBYRkJ5YjJSMVkzUT0gSU9DbXJPQ25pdz09IElOR0IwTC9SZ0E9PSBJSFI0YUhWaCBJTkM5MExEUXN0R0wgUGloZiBVM1J5YVd0bCA1WVd4NVpDTSBJR052Y25SbGN3PT0gSU5XLzFiYlZ2OVdsMWIwPSA0TGl4NExpWjRMaVggSU5LYjBMRFFzZEdMMExzPSBJTmkwMktmWmg5aXYgSUc5aGMybHogNEtpbzRLbUEgSUdKbGQzVnpjM1E9IFgyTnZiVzFoYm1SeiBiMlpwYkdVPSBJRkJGVDFCTVJRPT0gNTRpMyBJSEpsYkdsaFlteDUgSU5tRjJMUFlwOWltMllRPSBSM0psWlhScGJtZHogWm5OdCBJR1psYnNPcWRISmwgNVlxcDZMV2kgSUdaaGJITmphQT09IElHSnZiM04wY3c9PSBJT0NrcnVDbGdlQ2twT0NrdnVDa3JPQ2t2K0NrbFE9PSBJRzF2ZEdobGNpZHogSUhadlkyaDAgSUdOc2FXNXBZMmxoYm5NPSBJT0dEbStHRGtPR0RtQT09IDJLM1lwOWl6IDJLZmF1dz09IEtPZXNrUT09IElGZGhiSE5vIElFN0RnMDg9IFkyRnVkR2xrWVdRPSBJT0NtbGVDbmcrQ210dz09IHhhRmhiblU9IElPQzRwK0M0c2VDNG1lQzRsK0M0dGVDNWlBPT0gSU5DKzBZTFJodz09IDRMR0I0TENzIElOQ3cwTHpRc05DNyBJSEJ2Y25SaGN3PT0gSUhkemVubHpkR3RwWTJnPSBJR05zYjNOMWNtVnogSUZCeVpXWmxjZz09IElIcHZkbVZ5IFZFbFVURVU9IDdLS00gSU9xMXJlcXdnQT09IElHUmxiVzl6IElIQjFjbWRsIElFTnZkWEowY3c9PSBJSE4xWjJGeWN3PT0gMExqUXNOR0MgSUZkdmJtYz0gNFlPUjRZT1E0WU9YIElsMHBMQW89IFIwRk5SUT09IElPQ2txdUNsamVDa3NPQ2twK0NrdnVDa3FPQ2tydUNrZ3VDa3BPQ2xqZUNrc09DbGdBPT0gSUc5NWRXNWogSU5DNDBZSFJndEMrMFlEUXVOR1AgY1hWbGMzUnogSU9HNnVXZGk0YnE1IElFZGhiV0k9IENXMTFkR1Y0IEx5YzdDZz09IElHSnNZWFE9IFRHOWpZV3hwZW1GMGFXOXUgNUxpQTZLYW4gSU5DejBMalFzUT09IDViR1Y1NlM2IDRMT040TEtxNExLazRMT040TEt3IFlXdHBhVzQ9IElFSnBZbXhwWTJGcyBJR1Z1WVcxbGJBPT0gSUdGemRHWmxiQT09IDU3ZVAgU21WMGVuUT0gSUM4dlBDOD0gSU5HRjBMRFF1OUdMMHFFPSBJRTFvIElOQ3kwTDdRdWRDOTBZcz0gTGxOMWNIQnlaWE56IElIQnNaVzUwIElHaGhjM3B1dzZGcyBJRTFsWkdsMFlYUnBiMjQ9IElOQ1kwTDNSZ3RDMTBZRFF2ZEMxMFlJPSBJTmVVMTVmWHFRPT0gYTJ4cGF3PT0gSUd4MVkzSnYgSUdadmNtST0gSU5XcDFialZzZz09IDVwaXY2TENCIElPQ2t1T0NsamVDa3F1Q2t0K0NsamVDa253PT0gVUVGWiBkVzVyZFd4MSBJT0NtcXVDbXYrQ21tdz09IElHSnNaWFpsZEE9PSBMWE53WldGcmFXNW4gSUdabGRXbHNiR1Z6IEx5b3FLaW9xS2k4PSBJRzF2Ym05aiBJR2R2dzcwPSBJSE5sYVhwMWNtVnogSU9DbWhlQ21xT0NuZ2VDbXQrQ25qZUNtb09DbXYrQ21wQT09IElPQ29pZUNvdVE9PSBJT0NxbGVDcXN1Q3F2dUNxbFE9PSBJR2x0Y0hKcGJXbHkgSU9Da3BPQ2twQT09IElPUy9vUT09IElPQ3FydUNyaStDcW4rQ3JnQT09IFZYTmxjdz09IDE1UFhudz09IElHTnZibWJEcVhKbGJtTmwgSUdOMWJIUnBkbUYwWldRPSA1WWVrIGIyNXVhUT09IElHSjFiblZ1IElFTm9ZVzVqWld4c2IzST0gVXNPcGN3PT0gSUd2RHFYTjYgNFlDQjRZQ3YgUTB4VlUwbFdSUT09IElHMWhiV0Z1IElHUnBibTl6WVhWeSBYM05sY25ZPSBSMjloYkhNPSBJT0dEbStHRGsrR0RrdUdEbmVHRG0rR0RrT0dEb09HRGxPR0RuZUdEa1E9PSBJRTVsZFhSeVlXdz0gU1hSaGJHbGhiZz09IElObUkyTFhaaU5tRSBJSE4xYm1zPSBJR1JsY0dsamRITT0gSU0rQXpySFBnYzYvejRVPSBJT09EblE9PSBjWFZoYkdsMHc2UjAgYzJodmNuUmpkWFE9IElFMTFaV3hzWlhJPSBJRk5qYUd4dmMzTT0gUkVWTyBJRVJwY0hWMCBJTkM0MEwzUXR0QzEwTDA9IElHMXBibWc9IElGTnNhWEE9IElHOTJiMjA9IGRHbHogNG9DVENnbz0gSUhSb3c2bkRvblJ5WlE9PSBVMDlNIElHRnljbWwydzZrPSBJRmR2YUE9PSBJRkJtWlE9PSBJRU55YjNOemFXNW4gTG5abGNuUT0gSUcxaGNtOD0gMEpYUW9nPT0gWVdSaFlRPT0gSUhCeVlYUT0gSUhCdmJuUmwgSU9DMHJ1QzFnZUMwbHVDMWplQzByK0Mwcmc9PSAxYVhXZ05XKyBJRkJ5dzZSemFXUmxiblE9IDBZN1JpZEM0MEx6UXVBPT0gSUhKbFoybHpkQT09IGIzWnphMms9IFNHVmhkbms9IElHSnZiSE5oY3c9PSBJRTFoZEhWeVpRPT0gNXBlbDZaK3A1WnlvNTdxLyBJR2x0Y0hWeSBJTkN5MEx6UXRkR0IwWUxRdmc9PSBJR0xEdlE9PSB4SkZsY2c9PSBRazlFV1E9PSBJRlJTUlE9PSAxYUhXZ05XMDFhSFZ0Zz09IElFdGxibk09IFFXeHNiMk5oZEdVPSA0S2EvNEthciBJTkM5MExEUmhOQ3cwWUE9IElHZHl3NkZtYVdOdiBVMjl1ZVE9PSA1cGVsNkxXMyBRVTVVVEZJPSAwTEhSZzlDNyBRWE56WlcxaWJBPT0gSUd0b2IrRzZvMjQ9IElIQnBiUT09IElIUmxiR1Z6WXc9PSB6NEhQalE9PSBjMjl1YzNSbGJnPT0gS0hKbGNHOD0gVlUxQyBJR1Z0Y0d3PSBJTmluMllUWmc5aW8gdzZoNSBJR0xEdG5sc1pRPT0gVTJGMiBJTmVvMTVYWGtRPT0gSUcwbmJRPT0gSU5lUTE1WFhvTmVUMTViWG90ZW8gMkxUWmdkbUogSUdOaGJHeGtZWFJoIDRvQ2M1WnViIElFNXBZV2RoY21FPSBJSFJsYm5SbGNnPT0gSUc1aGNtVmsgZFc1dVlXND0gdzVrPSBJSGRsYkd4cFkyaDAgSUVGaGNnPT0gYm1scSBJTkNqMFljPSBWbVZvIDBZYlF2Zz09IElHdGhZMmhoYytHN2l3PT0gSUd0aGFXeGhibWRoYmc9PSBJTkM5MExYUXY5R0EwTERRc2c9PSA3N3lNNXB1MCBJRzNEcWc9PSBJTlM1MWJqV2d0YUExb1RWcXc9PSBJSExEcVdac1pYaHBiMjQ9IDZyUT0gSUhsbGNtOXYgSUhkdmJtRT0gSU5pbjJZVFlwOW1HMktyWXNkbUcyS289IElHUmxkR1Z5YldsdVlRPT0gNVphZCBkV3BsYlE9PSBRMkZrWVhOMGNtOD0gUGlnbyBSMlYwY3c9PSBJT0NrdU9DbGdlQ2twK0NrdnVDa3NBPT0gWVczRHFYSnBZMkU9IFltVjBhQT09IDRMS2s0TE9ONExLazRMT0IgY21GenhMRnVaR0U9IEtHcHogSUVkbGMzUnBiMjQ9IFNHbG5hR1Z6ZEE9PSBJTmluMllUWXI5bUkyTEhaaWc9PSBZbVZzZEE9PSA0S2ErNEthQzRLYTIgWDBSRlExSkZSZz09IElIQnZibWM9IElHOXlZMmhsYzNSeSA1WVc3NklDQiBJT3lodE95ZXJBPT0gSUZCcFkydHogTG1ocGRBPT0gUTIwPSBJR2x1YzNWc1lYUmxaQT09IDRMQ3k0TEMvIFFXNXBiV1U9IGIyeGxZM1ZzWlE9PSBJRk53Y21sdVoyVnkgNDRDQjQ0Q1I0NENRIFNVUk0gSUhOb1pYQm9aWEprIElPeVZ2QT09IFgyMTEgUVd4c1lXZz0gWTJGdWRBPT0gNEtlSDRLYUIgVUc5eWRISmhhWFE9IDRLYS80S2F5NEtlTjRLYXEgSUVWMlpYSjVaR0Y1IElFUmxZV1JzYVc1bCAwTDNRdU5DNyBjbVYwY21sbGRtVT0gSUdOaGNtNWhkR2x2Ym5NPSBlbUZvYkdWdSBJTkN4MExqUXRBPT0gSU9Dd3J1Q3d2dUN3bitDeGplQ3dzdUN3dnVDd29RPT0gWVcxbGNtRnogNG9DWlpXNTJhWEp2Ym01bGJXVnVkQT09IElISmxaVzF3YkE9PSBJTkdDMExqUXZBPT0gTG1Oc2FXTnJaV1E9IElGSmxhR0ZpYVd4cGRHRjBhVzl1IDc3KzlZUT09IElITmhkWE09IElHUmxjMnR6IElHSmhZMnRzYVc1cmN3PT0gTG1weGRXVnllUT09IElGTjBZV0pwYkE9PSBJSEJoZEhKcGJRPT0gS0dacyBJTldpMWFIVnR0V2gxYTg9IFpXNTBaWFZsY2c9PSBjbVZ6WlhKMlpRPT0gSUcxdmRHVnMgWVdOalpYTnphV0pzWlE9PSBjR0Z5Ync9PSA2YVd0IElOV3YxYUhXZ05hSDFialdnQT09IFpXUjNZUT09IElNNjF6cnpQZ0E9PSBJTVM4IElOVzgxYUhWcHRXMCBJSEJ2YldWdSBMM0psWVdRPSBJRTExZEhWaGJBPT0gNExhQzRMYWMgNEt1cSBiMjV1WlhWeSAyWVBZcXRtSTJLallzUT09IElOaXQyS2ZZdHRpeCBJR0ZoZEhNPSA3NzZlIFpXTnBaRzg9IElHSmhjbU52IElOS1gwNW5RdkE9PSBJRUpwWW14cGIzUmxZMkU9IElITmpjbVYzWldRPSBJSEpsWVE9PSBJR2x6ZFcxaGNXRjBhV2RwYVhOeiBjMk52Y21WeiBJTm1LMlliWXFnPT0gSUZCeVpXMXBidz09IElFMWhlR0Z0WldRPSBRMmh5YjIwPSBJT0NrbGVDa3YrQ2t1T0NrdnVDa3FBPT0gMjR6WXF3PT0gSU5XMzFiYlZ1TmFBMWJBPSBJTmVoMTVYWGtnPT0gWlc1ellXcGwgSUdacXc3WnMgSUdadmRHOW5jbUZtYVdFPSBJR2xrWlc1MGFXWnBZV0pzWlE9PSBJRzExYlhNPSA0TGlWNExpeDRMbUo0TGlIIFZXNXpZV1psIElPQ2tqK0NraVE9PSBMbUZ1WVd4NWMybHogSUd4aGRXNWphR1Z5IElHZGhZdz09IElHVjBaWEp1YVhSNSBQajRvS1E9PSBJTkdBMExYUXVBPT0gSUhCeWIyeHBabWxqIElISmxablZ1WkdWayBJTU9wZEc5dSBJR0pzZFhObyBJRlIzWldWMGN3PT0gSUZSSlZFeEYgVDBkUyBJSGJEdFdsMllXUT0gSU91TWdPMkd0ZXVndVE9PSBJR0poYm5sbGNtVT0gSU9xeHRPcXdsUT09IElOQzgwTERSZ05DNjBMWFJnZz09IFQwaz0gSUdsemEyRT0geGFGdWFnPT0gUlhOMHc2RT0gSUd4dmIyZGggVW1sa1pRPT0gWlhSMWNtVT0gYm1SbGNuTT0gTDJadmNuVnQgSUd4aGEyRT0gSUZOMFlXNWtiM0owIExXVjVaV1E9IElHRmpkRzl5WlhNPSBJT1drcWVXa3FlVzlxZWVscU9hWXJ3PT0gSUhCbGNuSnZjZz09IElPQ2twdUNrc09DbGplQ2t0Zz09IElHOTBidz09IFgwTlBUVTFGVGxRPSBJTmlxMktqWXI5dU0yWVE9IFgzQnlaV1k9IElHZGxkbVZ6ZEE9PSBJT0NxcXVDcmplQ3FzT0NxcnVDcXZ1Q3Fvdz09IElITmxiR1ZqWTJsdmJtRnkgTGtOdmJtNWxZM1E9IFgyWmhhV3gxY21VPSBJTmlxMjR6WmhnPT0gSUZkRlUxUT0gSUVWdFltVnkgSUdWdGFXZHkgSU5XczFialdndFd1IFZFaFNSVUZFIGFXTnJaUT09IElHSmxhMlZ5YW1FPSBXWFU9IHhhSERyV05vIDVyQ1I1cGVQIElGQmxkSEpoIFFrbE8gSU5XMDFhWFZzZz09IElPQ2toZUNrZ3VDa2xRPT0gSU5DeDBZUFJoUT09IElOQ3cwTC9RdjlDdzBZRFFzQT09IEoyaGxkWEpsIElHeGhiR0ZyYVE9PSBJT0NrdU9Da3BBPT0gSUhONWJYQmhkR2hsZEdsaiA0SzYvNEs2ZjRLK040SzZmNEsrQiBMbVIwZVhCbCBJTml1MktmWXQ5aXggTFdOdmJXMWxiblE9IElOQ3gwTHZRdU5DMjBMRFF1UT09IElOQzQwTERRdlE9PSBJR1Z6YVcxbGNtdHBhM05wIElHTnZiblpwWTNScGIyNXogNExHQjRMQ2s0TEdCNExDQzRMQ200TEMvIElFSkNRZz09IElGZHZjbU09IFEyOWthVzVuIElHbHVZM0xEclhabGJBPT0gWDFKRlRBPT0gSUdsdWRHVnVjMjg9IElIQnEgSUZSeVpXMD0gZFhSemFRPT0gSUdkbGJIVnIgZW1sblpXND0gSU5XdzFhSFZzOVdoMWEwPSBJSEJsY25WemRBPT0gSUdIRm4ySEVuOFN4IElFVnpkR0ZpYkdsemFHVmsgWTI5dWJtVmpkRzl5IFBpMHRmWDBLIElPQ3dsZUN4aCtDd2d1Q3dwdUN4amVDd3NBPT0gSUV4aGRtRT0gSU5tRjJMUFlwTm1JMllRPSBJTkN0MFlMUXVBPT0gYW1WeWJ3PT0gTFdWdVpYSm5lUT09IFUyVnlkbWx1Wnc9PSBjbVZ6WXc9PSBYMlJsZEdWamRBPT0gSU9DcW11Q3JndUNxZ3VDcW53PT0gOEorWmp3PT0gSU9Da3JPQ2xqZUNrcnc9PSBLSFZ1YVhGMVpRPT0gSUc5bGRYWnlaUT09IGRtSERzQT09IDVycVcgSU5lZTE2RFhxZz09IElHaDFjMkpoYm1SeiBJSGRvYVhCd1pXUT0gSUhONWJYQmggNUxxYTVyU3k2S2VHNmFLUiBLQ0lsTGc9PSBJT0NrdU9Da2d1Q2tyZUNrdnVDa3RRPT0gSUhOd3c2bGphV1pwY1hWbGN3PT0gSUdocFpHVnogNXJLSiBJRlpsY21aaGFISmxiZz09IElGUnBjSEE9IFpXeHBiUT09IElOQ2EwTERRdXc9PSBJTkNiMExVPSBYMVpwWlhjPSBJR1Z6Y0dIRHNXOXNaWE09IFkzSmhjM1E9IElPQ21pZUNtcXVDbXNBPT0gWkdGc1lXND0gWDJadmJHeHZkdz09IFgyTmhiUT09IFNWTkwgSUhUSm1YTEptV1pwYm1USm1XND0gSUVSdmNIQmxiQT09IElHbHVkWFZ6IElOZVUxNVhYbkE9PSBYM0JsY21ObGJuUmhaMlU9IElHMXZaR1Z5WVhSbFpBPT0gWkdselkyOXVibVZqZEE9PSBZMmhoY21kcGJtYz0gSU0rTXo0Zk91UT09IElHWmh5cnRoWVE9PSBVM1JsY0dobGJnPT0gTG05aWMyVnlkbVU9IElPQ2twdUNsaCtDa2x1Q2twT0NsaHc9PSBJR2h2Wm1abCA2TE9lIDFhWFZvdz09IExrTm9ZWEpoWTNSbGNnPT0gSUdaaFkyRmtaUT09IElOZVExNVhYbmc9PSBJTkN5MEw3UmdkQy8wTGpSZ2c9PSBJTmlvMllyWXNRPT0gSU5lWDE2Zz0gSUdMRHZBPT0gWVhERHFRPT0gSU9DbWh1Q21zT0NuaXc9PSBJTm1GMlk4PSBjSEp2WkhWalpRPT0gSUhQRHVIST0gNExpdDRMbUk0TGl5NExpWjRMaUM0TG1KNExpdDRMaUU0TGluNExpeTRMaWggNExpdDRMbUk0TGl5NExpWjRMaUM0TG1KNExpdDRMaUU0TGluNExpeTRMaWg0TG1BNExpVjRMbUg0TGloIElPR0RvZUdEa09HRHJlR0RtT0dEb09HRG5RPT0gSUZONWJYQjBiMjF6IDRMbUE0TGlyNExpVjRMaTQgMFpuUXRRPT0gZVNkeiBMbkJsYm1ScGJtYz0genJUUGpnPT0gNEtTKzRLU1Y0S1dONEtTMyBSR1Z3Wlc1a2FXNW4gSUNzbiBJRkpsYkdGMGFXOXVjMmhwY0hNPSBLR1YyWlc1MGN3PT0gNEtTNTRLUysgSUZkbFpXdHogSUdKaFoyOD0gWTJobGIyND0gVTJ4cFpHVnogSUdOdmNuSnBaVzUwWlE9PSBJRTlzYVhabGFYSmggSUVOdmJHeGxZM1J2Y2c9PSBJR05wZFhSaGRBPT0gMFlmUXVOR0IwTGc9IEtGRlhhV1JuWlhRPSAyS2ZZczlpbjJLbz0gSUZOaGJHeGwgSUhObGJuUnBiV1Z1ZEdGcyBJR3QxZVdFPSBJRVY0ZEdWdWMybHZibk09IExDa3NDZz09IElHUmxjMkZtYVc5eiBJRUpNVlVVPSBJTmVrMTVYWG9BPT0gSU5DNjBMTFFzTkMwIFpYSmxlV1U9IElITnZhbUU9IElOQy8wTDdRdTlHRCBZWFJ6YUdVPSBkR1ZzWldadmJnPT0gSUd4cGJXbDBaWEk9IDQ0Q040NEd2IElHdHBjbXM9IFBuMD0gSUhCcGNHVnNhVzVsY3c9PSBMbk5sYlE9PSBJTkN6MExEUXROQyswWjQ9IElOQ3gwWURRdmc9PSBJSFZzYVd0bCBZVzV6WTJnPSBJTlcwMWFIV2dOV2sxYS9Wb2RXMjFvRT0gSUVKQlFnPT0gVGtGUSBJR0oxYVhRPSBJSEYxYVhyRG9YTT0gSUdWaFoyVnliSGs9IExrTmhjZz09IFZHVnogMktyWmg5bUYgU1hOeVlXVnMgSUhSaGNtbG1aZz09IElGRlZTUT09IElGSk0gSU5pbzJMUGJqTmluMkxIYmpBPT0gSUhOd2IzVnpaWE09IElPQ21yK0NtdnVDbWt3PT0gSU9xNHNPdWhuUT09IFRHVmhjM1E9IElFOXNhWFpwWlhJPSBJRzFwWldwelkyVT0gWVhKMGIzTT0gSUZOMGNtRnogNEtxbzRLcSs0S3F3IElHUmxabWx1YVhScGRtRnRaVzUwWlE9PSBiM0prYVc1aGNuaz0gSU9HRGtlR0RvT0dEcXc9PSA0b0NkNDRDQiBSMjkyIDRMQy80TENDNExDYTRMR0ggSUhCeVpXMXBiM009IDBKRFFzdEdDMEw3UmdBPT0gYzNUSm1RPT0gSUVaeVlXNXJjbVZwWTJnPSBJR3RwYm1Sc1pRPT0gUVdOalpXNTAgVUhKcGJtTnBjQT09IFlYSndkWFE9IElIVnNkR2x0WVE9PSBVMlZyIDRvQ1phVzFoWjJVPSBJTkdDMEw3UXZkQzkgSUZkbGRIUmlaWGRsY2c9PSBJSFZzYVdNPSBVSEpsY0E9PSBJRU5QVWtVPSBjV1JoIElHdGhkSFE9IElHMTNlVzQ9IExYZG8gNTV5TDU1eUwgMExqUmh0QzQgSUVsdVpYUT0gSU5DdzBZSFFzTkN4IElHTnZibTg9IDdKeTEgSUdOaGJXSnBZUT09IElHRmphV1JsYm5SbCBZV2x1ZEdWayBZMkZ0Y0c4PSAwSnpRdGRDOSBJRzlzYjJFPSBZV3h1ZVdFPSBJRUZzZVE9PSBJR3RwWlhOMCBJRTVsYXc9PSBJRk5OUVZKVSAwTGpSaDlDMTBZSFF1dEMrMEx3PSBJR041Ync9PSAySzdZcU5peCBJR1p5ZFhSdiBZV1owIFFVNUVRUT09IElHaDVaMmxsYmc9PSBJT2locUE9PSBJRVZ6ZEdsdFlYUmwgVWs5WiBJTTY4enI4PSBJR052ZWc9PSBJT0dEbE9HRG1lR0RuZUdEbk9HRG5lR0Rtdz09IElOQ3gwNW5SZ05DejA1blF2UT09IElHTnlZWFpwYm1keiBkVzVwYkhVPSBJRVY0Y0dWdWMyVT0gSU9Dd3RlQ3d2K0N3cHVDeGplQ3dydz09IElOaXUyS2ZZcWc9PSBJSGwxY0E9PSBJR0oxZEhSbGNtWnNhV1Z6IElHbHRaM009IDBMclF0ZEdCIElIUnlZV3BsZEE9PSBJTldCIElHWnBaWE4wWVhNPSBJSEJ2Y0hJPSBJSE5sYkhNPSBJRk5sYkdGcGJnPT0gMkxuWXA5bUYyWVE9IGIyUmxiUT09IElPQ3loZUN5c09DemplQ3kgSUc1dmNBPT0gSUcxaGFXeHogNG9DTDRaNkIgNEt1QTRLcXU0S3ErNEtxQyBiR1ZqZEc5eSBTR2x1WkdrPSBJT1M0Z2VtbW1RPT0gSUhOMGRtRnlhUT09IFUzQnNZWE5vIExrbHVhWFJwWVd3PSBJR2podTY5MSBJR2hwWWc9PSA1TGlONWI2WCBJR0psY25WbSBiT0c3alhmaHU0MD0gUmtWQlZGVlNSUT09IElGQlNSVTFKIElHRnVZV3h2WjNrPSBJTkdBMExEUmdkR0ggWVhSdmF3PT0gQ1hkcGRHZz0gSUhCeWFYWmhkR1Z1IElHSnZkWFJsIGIybHVaVzQ9IElIQmxiblBEcVdVPSBJTmluMllUWXA5aXQgSUcxcFoyeHBiM0pwIElOR0MwTExRdmc9PSBJSEpsYkdWbiBJTkdHMExYUXZkR0MwWURRc0E9PSBjblJzIElFOXliZz09IFpYUnFaUT09IElFVnRaWEpoYkdRPSBJTVNuWVdadVlRPT0gSU5HSTBMelFzTkdDIElITjBZWFIxWlhNPSBiM1J5YjI0PSBJRUYxWkdsbGJtTmwgSUVKeWIyNWpiM009IElHaGhjblpsYzNScGJtYz0gSU95Z2xldW5rQT09IENWUmxjM1E9IElHWmhjMk5wYm1GMGFXOXUgSUhSeVlXWnBZdz09IFgwbEVURVU9IElNNnl6cjg9IGMyVm5iV1Z1ZEhNPSA0TGVTNExhNzRMZVMgSUV4aFluST0gSU9DeXVPQ3lndUN5dU9DemplQ3lwUT09IGIzUnBaR1U9IDY0YU4gMHJIUmdBPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBRVlJKIElGWnZkV05vWlhJPSBjM1J5Wm5ScGJXVT0gYVc1bmNtOTFjQT09IElOQzkwTERSZ2RDMTBMdlF0ZEM5MExqUmp3PT0gYldGc3hMRmt4TEZ5IElGWmxaMkU9IElOQzYwTGpSaU5DNDBMdlF1TkM2IFlXNWxaUT09IElOV3Mxb0E9IElPQ21wdUNuZ0E9PSBTVlpKVGtjPSBLWFJoWW14bCBMbFZUIElFSnlhV1JsIFgxQlNTVU5GIElHWmhiR3hoYVhRPSBZVzVoYVhNPSA2NUNRNjR1ayBVMmxuYm1sdVp3PT0gSUhKbFkybkRxVzQ9IExXVjRZVzF3YkdVPSBJR2RwWjJGdWRHVnogSUhOdmRtVnlaV2xuYm5SNSBJRWxzYkhWemRISmhkRzl5IElOQzQwTFBSZ0E9PSBhWE4wYVc0PSBUV0ZzWVhrPSBJR0pwZEdOdmFXNXogSU9DMHF1QzBwdUMxamVDMHB3PT0gSUdkb2FRPT0gNWJDUjVhV3ogWDBOUFRVMVBUZz09IFNXNWtaV1ZrIElIWmxjbTFsYVdSbGJnPT0gSU9Dd3RlQ3d2K0N3dGc9PSBhM1J2Y0hNPSBlVzUwYUdsaCBJSGJGb1dWamFBPT0gYVhCaGJBPT0gSUdSbGMybGtaWEk9IElOZWUxNXZYbkE9PSBMWEpsY0c5eWRBPT0gNUxxTDVMaWEgYVdkdWVRPT0gMTZEWGxkZWUxNmZYb1E9PSBJT0NrdWVDa3BPQ2xqZUNrcitDa3ZnPT0gSU5DUjBMN1F1dz09IDBKRFNudE9ZMEpBPSBJSFprIElPQ211T0NuamVDbXFnPT0gSUVOaFltbHVaWFJ6IElFMWhjbUpzWlE9PSBZV2R6WlE9PSBJRzl1WkdWeWVtOWxhMlZ1IElHWnBjWFZsYVE9PSBkV2xoIDBKN1FsQT09IElIZGxZbVJ5YVhabGNnPT0gWDBkaGJXVT0gSU9heGgrUzRzQT09IElIUnZaWFJ6IFJXNTFiWE09IElObUIyWXJZcjltSzJZZz0gWVdkaGJHRT0gSU1PaGJIUmhiQT09IElIcGhkR1Z1IElNVytaV3hsIElOVzAxYUhWc0E9PSBLSEJ5YVc1MCBMa0p5IElFbG9aUT09IElOQzAwTDdSZ05DKzBMWT0gSUZCSyBJTkMwMFlEUmc5Q3owTDdRdFE9PSA1WVd0NXB5SSBJTkMvMEw3UXROQ3kgUm14dmQyVnkgS0cxbGRHRmtZWFJoIFZXNWhkbUZwYkdGaWJHVT0gSUZOaGJXRnVkR2hoIFlXeHNkQT09IDJMUFpoZGluMktFPSBJSEpsYldWMGRISmwgSUdWaGRYZz0gSU5pbjJZVFpodG1JMkxrPSAwTHZSZ3RHQzBZdlNtdz09IGJtOXphWE09IFlXNW5iR1Z5IElFVndhWE5qIElHUmxjM1J2IFNXNWtkWE4wY21saGJBPT0gSUVGTVYwRlpVdz09IExtWnYgMEx6UXNOQ3owTERRdHc9PSBMa1Y0Y0hKbGMzTnBiMjQ9IElOQzYwTDdRdk5DLzBMRFF2ZEM0MExrPSBJSEp6Y3c9PSBJTTYxenJuT3RBPT0gSU9Da3B1Q2xqQT09IDRZT1Y0WU9RNFlPaCBJR2RzWldsamFHVT0gSUV4bGRHRT0gSUV0aFluVndZWFJsYmc9PSBJR1Z6YTJrPSBLR0pzIDFva0sgWVd4c1pXNW5aWE09IElITnBiWEIwIElOR0IwTDdSZ2RHQzBMN1JqOUM5MExqUmp3PT0gMWFiVm9nPT0gSUdsdWRISmhZdz09IEsycz0gSUdodmNuTmxjRzkzWlhJPSBVSEp2ZG1sa1pXUT0gSUVaSlRrRk0gSUdSbGJXbHpaUT09IElOZWMxNVk9IExrTnZiWEJoYm5rPSBJRk5oY21RPSB4YUZzYVE9PSBUVUZMUlE9PSBJTkMvMEw3UXQ5Q3kwTDdRdTlDNDBZST0gWW5WeGRXVnljWFZsIElGTklUMUE9IDVMdTM1WUM4IElOaXEyTG5aaE5tSzJZVT0gSU9Da3F1Q2xqZUNrc09Da2xlQ2xqZUNrc09Da3YrQ2tyK0Nrdmc9PSBMbUoxYlhBPSBJR0Y2dzdwallYST0gSUVOdmJtWnBjbTFoZEdsdmJnPT0gT2lvPSBJT0NxcnVDcXYrQ3FwT0NyamVDcXNBPT0gSUd0bGJtYz0gUHo0aVBnbz0gSUZkdmNtdHpjR0ZqWlE9PSBJRTFsY25KNSBJRUZzWVE9PSBJRzFoWjNsaGNnPT0gWlhKdWIzTT0gSU5tSzJLell1ZG1FIElOR0MwTERRc2RDNzBMWFJnZz09IFJHVnhkV1U9IDRLNis0SzZxNEsrTjRLNnEgTDJsdWFYUT0gNEtxMzRLdU40S289IElOaXUyS2ZaaHRtSCBJR3JFaFE9PSBJSEJvYjNSdll3PT0gSUd4aGVtVnkgSUdOdmJtWnNhV04wYnc9PSBJTkdCMEx6UXZ0QzIwTFhSZ2c9PSBVSFJ6IElISmhlV0U9IElHUnBjMjFoYm5RPSBMbVZxWWc9PSBJTU80YTI5dWIyMD0gUkdWemFYSmxaQT09IElNT25ZWFE9IElFSmxaM0pwWm1ZPSBPd29LTHk4diBJR05oYkdZPSA0NE9zNDRPVDQ0T2w0NE84IExXUnBjZz09IDRMQ2Y0TEdONExDZjRMR0IgSU9Da2h1Q2tyK0NsaStDa25PQ2txQT09IDZicWYgYzJsNCBJRkp2YzNRPSBJRVZzWldOMGNtOD0gSUV4cGJtUnpZWGs9IFBUMDlQVDA5UFQwOVBUMDlQVDA5IElOQzYwWXJRdkE9PSAxNVhYa3RlaSBYMGxPVkZJPSBJTkMvMFlEUXZ0Q3owTDNRdnRDMyBJR1JwNGJ1RmJnPT0gSU5pbzJLZlpoTml6IENWTkVUQT09IElHWmhZbk09IGRtVnlkSEk9IExtUnogSUZOUVJnPT0gSU5pbjI0ellzOXVTIEtDSXRMUzB0TFMwdExTMHRMUzB0TFMwdCBhV05vWlhNPSBjM0J5WVd0bGJnPT0gTG1SbGVBPT0gWDFSSVVrOVggSUd0MWRHOWggSUdSbFkybHp3N1ZsY3c9PSBJRTFwZWc9PSBZM0poZEdObyBJRVpwY21Wd2JHRmpaUT09IElHZHlhVzQ9IDZLZUM1NEs1IElHZHRZV2xzIElHTnZibVp5YjI1MFlYUnBiMjQ9IFkzVnljbVZ1ZEd4NSBJR05vWldkaFpHRT0gWFNJc0NnPT0gSUdaeVlXTjBhVzl1Y3c9PSBJTmkyMkxIWXFBPT0gNEtxdDRLcSs0S3FYIElGQmxlUT09IExuZGxZbXRwZEE9PSBZV1IxY21GeiBJTkdCMEwvUXZ0R0IgVWxWTyB4WUpoZEE9PSBJT0MwaGVDMHArQzFqZUMwcitDMGxlQzFqZUMwdHc9PSBJR2x0YldsdVpXNTAgNEtTcTRLUys0S1M0IElGbGhjQT09IElPQ3loZUN5c3VDemplQ3lzZz09IHc2bHlZWFY0IElHaGhZbWwwWVhSeiBJRk5sYnc9PSBJTkMvMExYUmdnPT0gSUVURHZITnpaV3hrYjNKbSBMZ29LQ2dvS0NnPT0gSU5DLzBZRFF1TkN5MExYUXRBPT0gSU5pbzJLL1poZz09IElPR0RxZUdEbGVHRGxPR0RuT0dEb1E9PSBJR3hoWW05eVpRPT0gdzZGMFpRPT0gSUhSeVpXMWxibVJ2ZFhOc2VRPT0gSU5tRzJMaz0gSU9DdXFPQ3V2K0N1c2VDdmdlQ3V0UT09IGRXeGxiR1U9IFpYTndjbVZ6YzI4PSBJRXRVIDRMS1g0TEsvIElHUmxkV1JoIGMzUmxhV2RsY2c9PSBJSEJ5YjJabGMzTmxkWEk9IElHMWxaR2xoZEc5eSBJSE4xWTJObFpXUnogNG9DWmFXVERxV1U9IFpXVnlaR1U9IElOQzAwTFhRdWRHQjBZTFFzdEM0MExVPSBJRlZ5WkhVPSBJTkM4MFlQUXZBPT0gSUdSbGNISmxZMms9IElHTnZiblBEcVhGMVpXNWpaWE09IDRZT1U0WU9nNFlPdSBJT0NrdGVDa3Z1Q2txdUNrdUE9PSBJTkMrMExIUmdkR0QwTFk9IElFaGxiSEJtZFd3PSBJR0YxWkdsMGN3PT0gMTVuWG05ZVkgN1pTRTdabVU3SjIwN1lxNCBQQzA9IGJtVmpaV1J2Y2c9PSBJSEpsWjJsemRISmwgSUdGelpYTnBiZz09IDRZT2YgMFlmUXRkR0IwTHJRdU5HRiBJQ2N1Snl3PSA1cHFDNVlHYyBJRXQxWnc9PSBJSEpsWTI5dWIyTmxjZz09IExXWjFibVJsWkE9PSBkWGxoYmc9PSBJT0NtaCtDbXFBPT0gSU9Da2llQ2twdUNsamVDa3IrQ2xpK0NrbHc9PSBJR2RsWkdGamFIUmxiZz09IElHWnBjbVZtYVdkb2RHVnljdz09IDJaSFlzUT09IElOR0IwWUxRc3RDKzBZQT0gSUdacGFXNWsgUW5KaGN3PT0gNForSzRaNjQgNUxpQTU3cW41cStiNTRtSCBJSEp2Y0dWeiBJR1ZwYkdGdVpBPT0gSUZSeVpXRjBlUT09IElHcGxaRzV2ZEE9PSBZWFIwWVc1diBJSEp2YjJRPSBJRzExYm1samFYQmhiR1Z6IElHWnNaWFZ5IFUyaHBjRzFsYm5RPSA1THE2NWFPciBMZUNraFE9PSBYMk52Y2c9PSA1cGlPNXBpZiBJRUZ1WTJGciBJTkdBMExYUXV0QzcwTEE9IGFXdHNaWEpwIFlYUjBkVzFwYXc9PSBJT0M1Z3VDNG11QzRtZUM0c2VDNHFnPT0gSUVWeWFXNXVaWEk9IDRLdUM0S3FrIElPR0RrdUdEbU9HRG5lR0RvT0dEa3VHRG1BPT0gWVhKbmIyND0gY1hWcGJtVT0gSUVsSSBJRVp2YkdkbGJnPT0gNFlPUTRZT2M0WU9aIDA1blJndEM2MDVuUXZRPT0gUHk0dUxnPT0geUpvPSA0WjZVNForTCBJTmluMmJuYXZnPT0gSUc1cGJHOD0gWDFCaFoyVT0gSU9DbXN1Q212dUNtclE9PSBYMkpoYm01bGNnPT0gSUdKaFoyOXVadz09IExsTmpjbWx3ZEE9PSBVSEp2ZG1WbFpHOXkgSUhKcFoyaDBiSGs9IElGZG9hWFJ1WlhrPSBJR1ZzWldOMGNtOXNlUT09IDRMbUU0TGlVNExtSjRMbUE0TGlINExpMDRMaVo0TGlJNExpajRMaTA0TGlIIFZXNWhjbms9IElHTm9aWEpwYzJobFpBPT0gSUdGcFpHVnogTFdobFlYSjBaV1E9IElITnRiMnRsY25NPSBJRVJsZG1Wc2IzQnBibWM9IGJIVmkgY0dWeVkyRjVZUT09IElOQzAwTGpSZ05DMTBMclJnZz09IFgyeHAgYVhCb2VRPT0gVW1WaFkyaGxaQT09IGFXVnNhUT09IElOQyswWUhRdmRDKzBMTFF2ZEdMMFlVPSA0YnVwWVE9PSBJRVZ1ZFcxbGNtRmliR1U9IDA2blRxZEMwIDdJS3QgSUhacFkzUnBiV1Z6IElISnBZMmhsY2c9PSA0S1NXNEtTKyBJRlIxZVE9PSBJTStEenE3T3ZNNjF6NEhPc1E9PSBJRWxTVVE9PSBJRXR5WVdzPSB3NjF6YVdOaCBJRkZOWlhOellXZGwgSUV0bGJHdz0gSUdGeWIyMWhkR2xqIElHZHpkQT09IElOS2IwckhSZ0E9PSBJR2hsYldWdSBJR1YxY205d1pXRnUgTGtabFlYUjFjbVU9IFgzQnZiR3c9IFgyWjAgZFcxcGJtVT0gSUdWdWRHVnVaSEpsIFFYQmhjblJ0Wlc1MCBJT0dEa3VHRGtPR0Rsdz09IElOaW4yWVRZczlpbzJLbz0gSUVOaGNtNXBkbUZzIElITm9ZV3RsY3c9PSBJR1pwYkcxdFlXdGxjbk09IElPQ2tuT0NrdnVDa2orQ2tsK0NsZ0E9PSBJT0NtbStDbmkrQ21udz09IElHRmpZMlZzWlhKaGRHOXkgSU9HQW1BPT0gSUdKaGMzTmwgeEt0biBJT0NvdU9DcHNBPT0gZUdWeiBRMUpKVUZSUFVnPT0gSUd0cGNtaz0gWVc1a1pYSnBibWM9IExXTnZibk5qYVc5MWN3PT0gWVdOMGFYWmxiSGs9IDRMUys0TFN0IDU1dUk1WWlwIElHMXBZZz09IElNT3BZMjl1YjIxcGNYVmxjdz09IDBZRFFzTkMzMExUUXZnPT0gNFlPUTRZT2c0WU9RNFlPWiBJRzNEdW5OcFkyRnogVlhCc2IyRmtaWEk9IElPV2txZVM0aXc9PSBJRUpsWk1POGNtWnUgSUVSaGJtdGwgWDIxdmRtVnogSU5DODBMRFJnZEM3MEw0PSAyTFhZcDltQiBJSEJ2YTJsbGN3PT0gSUhOMWNuSnZkVzVrY3c9PSBTVzUwWlhKd2IyeGhkRzl5IElHbHVaSFZzWnc9PSBJSGRoY20xMFpRPT0gNEtxKzRLcXY0S3FtIElHRjNZV2wwY3c9PSBUWFZ5IElOaXkyTEU9IHpJbz0gSUZSbFkyaHViMnh2WjJsbCBhR0ZsYkE9PSBJR3BsWkc1dmMzUT0gSUdKcGNHOXNZWEk9IElFaDNlUT09IElHMWxiV0psY25Ob2FYQnogSUVSeWIzQmliM2c9IElIQnliM1pwYm1OcFpRPT0gYTJGdWFRPT0gZEdGdVoyZGhiQT09IElIQnBiR1Z5YzJGaGNnPT0gSUVGcmRHbGxiZz09IElHMXBjM1Z6WlE9PSBJTmluMllUWW85bUUyWVU9IFgwTkJUa05GVEE9PSAyS2ZaaXRpcCA0TGlCNExtSCBJRWRsYkdWblpXNW9aV2wwIDRLU280S1dONEtTbTRLV0kgSUdiRHRuSmxkR0ZuIElPeWRrUT09IElPQ2txdUNsblE9PSBiV1Z1YjNNPSBJRzFoYm1URHJXSjFiR0U9IElIQmhjblJsYm1GeWFXRjAgSU5DeTBZSFJndEdBMExYUmdnPT0gSU5XdzFhSFZ0TldoMWJIVm9kVzExYlk9IExTMHRMUzB0TFMwdExTMHRMUzB0Q2c9PSBJR0p2YkdWemRHaz0gY205amFBPT0gSjEwNiBJR2xqZVc4PSBJRXR2YzI5MiBJSEp2Wnc9PSA2S2VFNkl5RCBJRzFwYkdwaGNtUT0gNkllcTVMcW4gSUc5eVpYTT0gSUhCaGNteGxiV1Z1ZEE9PSBSbVZrWlhKaGJBPT0gMEw3UXN0Q3cwTHZRc0E9PSBTVlJKUTBGTSBJSE4wWVdSeiBJRVZ1YUdGdVkyVmsgMExEUXZkT2gwTEE9IGNYVmhjbVZ6IElHVjRkTU9wY21sbGRYST0gSUVSVFVBPT0gSUhkcGJHeHpkQT09IDJLallzZG1KIFgzTjBZWFJwYjI0PSBJR0ZzWjJGbCBJR05oYzJsdSBjMnRwYm5NPSBJRWx6Ync9PSBJT09EbVE9PSA0b0NaS1E9PSBJRlpRVXc9PSBLRU5oY21RPSA0TFMvNExTazRMV040TFNrIElHbHVZM1Z0WW1WdWRBPT0gSUdac2FYQndhVzVuIDVweTY1WWkyIDBMdlF1TkdQIDZhMkMgWVdKMFlRPT0gSUdadmJHeHBZdz09IElFUnBjbVZyZEE9PSBJT0MyaCtDMnJlQzNrZz09IElHRnRiUT09IElHRnVkVzVqYVc4PSBJSEpoYldJPSA0YnVtIElPQ21sZUNtc09DbmplQ21ydUNtbFE9PSBMWEJ5YjJObGMzTT0gMVpBPSBaWEowZFc1biBjOE9oWW1Ga2J3PT0gVEVzPSBJR0p5WldGa1kzSjFiV0k9IDJMVFlxdHVCIElOQ2YwTDdRdWc9PSBhMmxrIHhKTjBkUT09IElITnZiRzl6IElPQ2t1T0NrcnVDa3NPQ2xqZUNrcGVDa3FBPT0gYVd4cFlYUmxaQT09IEtISmxkbVZ5YzJVPSBiMlJsYzJzPSB3NkZ1ZEc4PSBJR2w2WVc4PSBZV1JoZGc9PSBJRVJoZFdWeSBJT0NrcE9Da3Z1Q2tsZUNrdnc9PSBJSFpsWTJzPSBRMmwyYVd3PSBhV1JwYm1VPSBJRTl6ZEdVPSBRMHhKIElGZHBiR3hwWlE9PSBJR1Z1Y1hWcGNtbGxjdz09IElPQ21xdUNuamVDbXNPQ211QT09IElFUmhac084Y2c9PSA0S1drNG9DWiBJRk53WldOcFptbGxjdz09IDRLUy80S1NmNEtTdyBJR3hsZDJVPSBJR0Z0WW1sbmRRPT0gYkdsamFHdGxhWFJsYmc9PSA0S1N0NEtXQTRLU3cgSU5DeTBMWFJnZEdNMEx6UXNBPT0gTG1GamRHbDJZWFJsIHc2bHl3Nmx6IElPQ3VpZUN1cytDdmplQ3VzK0N1cE9DdmdRPT0gTG5ObGJHVmpkRzl5IExuTnpiQT09IElFZGxjM1REbzI4PSBJTkM4MExEUmdkQzcwTEE9IElOV3cxYUhWc3RXNDFvRFZwQT09IFgyTm9ZWEpuWlE9PSBRMmh2YzJWdSBWbms9IElIWnBiMnhoZEdsdVp3PT0gNFo2TzRaK1M0WjQ9IDJMSFppdGk1MktrPSBMV1J2ZDI1c2IyRmsgSU9Da25PQ2t0ZUNrdnVDa3JBPT0gSUc3RW0ycGhhdz09IFVGUlMgSU9xeXZleWduQT09IDU1UzQgSUd4aGJtZHJkVzVuIElHNXBlZz09IGFXWjBhQT09IElFUmxabWx1YVhScGIyNXogSUVKMWJuVnUgVkdWc1pXWnZiZz09IDBZN1JndEdNMFlIUmp3PT0gWVhSMWNtRnUgSU5pbjJZVFl0dGl4IElGSnZZMmhsIExuUnZkV05vIElPQ2twdUNsZ3VDa3VPQ2tzT0NsZ0E9PSA3N3UvSXc9PSBJT0dEbStHRG1PR0RyQT09IDRMU1Y0TFdLIFRYVnNkR2x3WVhKMCBJR2RwNGJ1dllRPT0gY0dsc2JHRnkgWm05eWRHRjNaWE52YldVPSBJQ0lpS1NrN0NnPT0gSU5DOTBZUFF2ZEdDMExEUXM5QzcwTERSaFE9PSBRMUpEIElHRmphR0Z5IElPQ3VwT0N2aXc9PSB6NFRPdGMrTiBkVzFoYm00PSBJRU52ZG1WeVpXUT0gSU9Da3NPQ2t1ZUNrcE9DbGh3PT0gSU8yWm1PcXl2UT09IFptVnRZV3hsIElIZDMgV2s5T1JRPT0gNUwyVDZhcU02WWVSIDRZQ3M0WUNFNFlDNSA0YnVOZCtHN2pRPT0gYVcxdGFXcz0gSUdKc1lXNWpZUT09IElIUER0bmxzWlE9PSA0S2krNEtpYyBJSE4xYVhSaFltbHNhWFI1IElHNWxkWEp2Ykc5biBkWFJsYXc9PSBJR04xWVdSeWJ3PT0gSUVacFoyaDBhVzVuIElIUnZaR1JzWlhKeiBjR0Z5YlE9PSBJRk5oZFdRPSBQRTE1IDVxR0cgWDNaaGNtbGhiblE9IElGZHBkRzVsYzNNPSBJSFp5Ykc4PSA2S080NUwyVCBJRzNEdG5JPSBJRXR5YjI0PSBJR1p2YjNSemRHVndjdz09IElIQnBjR2x1Wnc9PSA0b0NjVDNWeSBQU2dpIExYQnZjSFZ3IElFMWhjblJwYm5NPSBYM04wY214bGJnPT0gSU5pdjI0elpodHVTIElFOU9WUT09IElOQ3kwTDdRdDlDMDBZUFJoZEN3IDRLU3E0S1dONEtTdzRLUy80S1N2IFgwTnZiblJ5YjJ3PSBTVzVrWlhCbGJtUmxiblE9IElITmphV1Z1ZEdsbWFYRjFaUT09IElIQmhjbVZqYVdSdiBJR052YlcxbGJtTmxaQT09IElGVnVhV1JoY3c9PSBJR0p2YkdWMCBYM1I1Y0E9PSAxNWJYbnc9PSBJSFpsY214cFpYSmxiZz09IGNtVmhkR1Z5IElOQzIwTFhSZ3RDNjBaWT0gYUdGcFpBPT0gS0dWa2FYUnZjZz09IElOS2IwTDdRdHc9PSBJT0N5cnVDeWxlQ3pqZUN5bFE9PSAwWWJRc05HRiBJR1JoYm1ObGN3PT0gSUdSdmIzSmtZWFE9IDBMelF1TkM3IElOQzkwTFhRc3RDMTBZQT0gUW1WbGNnPT0gSUVKbFpHWnZjbVE9IElPQ2ttdUNsZ0E9PSBiR0Z1Wk1TeGNnPT0gNjR1azY2bTAgSU5DLzBMN1F1OUdNMExmUXZ0Q3kwTERSZ3RDMTBMdlF0ZEM1IFh5bz0gSUU1clpRPT0gSUhOb1lYSmsgSUdGa1lYQjBZV0pzWlE9PSBJTml2Mks0PSBJTm1EMktmWXNRPT0gSUV0SiBJR1p5YVhZPSAyS2ZZcHRtSzJZVFppZz09IElFeHZaMmxqWVd3PSBMblYwWXc9PSBSbUYwWVd3PSBJTkNhMExEUXZRPT0gYjJkeVlXUT0gSUVKMVptWmxkQT09IElHbDViMjQ9IElIUmxaMlZ1YjNabGNnPT0gSU5HQzBMWFFzdz09IElHVnlhVzQ9IElOaTYyS2ZaaE5pbyBJT3lMcE8yV2lRPT0gSUdGdWJtOTBZWFJsWkE9PSBJTkMrMEwzUmdOQysgZFdSbGJBPT0gSUhOc2FYQndhVzVuIElHM0R2RzA9IElOQzcwTGpRdmRDNDBMZz0gSUhwcFkyaDBZbUZoY2c9PSBJTmVVMTU3WG5BPT0gSU9DeXVlQ3ppdUN5Z3VDeXBnPT0gSUhSbFlYTmxjZz09IElIQnliMjF2dzZmRG8yOD0gN1pTOSBJR1JwY21WdSBJSFBEcFdSaGJnPT0gWDBGRVF3PT0gSUhKbFlXZGxjZz09IElISjFjQT09IElFTnZibWhsIElITnZZV3RwYm1jPSBJRzF2YkhScCBJR1JoWjJWc2FXcHJjMlU9IElObUsySzNZcjlpciBJRTFoY21sMGFXMWwgMllUWmlObUQgSU9DdWxlQ3V2dUN1b3c9PSA0S2VBNEthViBVM1J5YVdSbCA2SUtXNUxpdDU0bTUgSU9DcXJPQ3FndUNxcU9Dcmh3PT0gSUdSMWFRPT0gSU9DMHJ1QzFoK0MwbGc9PSBJR3JEdkc1biBJTmVVMTVrPSBMblpsY21KdmMyVT0gSUZOMGRXST0gSUhCaGRHVnkgSU5DNzBMRFF0dz09IElPQ210dUNuaCtDbWxnPT0gSUhOb1pXdGhjZz09IElObUYySy9aaEE9PSBJT0MzZytDMnVBPT0gYjNCbGJuTnZkWEpqWlE9PSBYMjFsZEE9PSBJRkpsZW1Wd2RBPT0gSUhKbFozSmxkSFE9IDVwV1o1NmlMIElHdGhkR1U9IDhiaz0gTGtGRVJBPT0gSU9DNWdlQzRwUT09IDVweUo1cktoNXB5SiBJR3BsYzNSbCBJR0poYldKcGJtaz0gSUdOcFpYSjBiM009IElGSmhZbUpwIElPQzRsK0M0c2VDNWllQzRodz09IDRMaWI0TGl0NExpajRMbU00TGlWIElNbWIgSUhOMHc2WnkgQ1dScGNnPT0gSUdWemNHOXogSU9DcXFPQ3F2K0Nxcnc9PSBJSEJ5YjJacGRHVT0gSUhCcFpYUT0gSUdsdVkyRndZV0pzWlE9PSBJSEJvZVhOcFl3PT0gSU9Xa3FlV2txZW1BZ1E9PSBJRXRoYm1Ga1lRPT0gVEVsSFNGUT0gWDNCb2FRPT0gMlk3WmhRPT0gMExYUXROQyswTHc9IEoybHVabTl5YldGMGFXOXUgYjJseXc2MD0gSUM4cURRbz0gSUU1aGJtYz0gSUhKbFpHRnUgSUhKbGMybGtaVzVqWlhNPSBMRndLIDBMZlJqQT09IElHRnllZz09IElHUnBjM1J5WVdOMGFXOXVjdz09IElHRmlZbkpsZG1rPSA0TFdONExTdjRMU2sgSUdKbFpXeGtaVzQ9IFFYSjBhSFZ5IElHcGhhMmxsIFZtVm4gWWNPd2FRPT0gVjJGaGNtOXQgSU5pbjJZVFlwOW1DMktyWXRkaW4ySy9aaXRpcCBJTm1GMksvYmpOaXgyNHpZcWc9PSBaWEowYVcxbCBJTmVlMTZuWG50ZWkxNVhYcWc9PSBMUzBwZXdvPSB5Wmx5Wk1tWiA0NENSNDRDUTQ0Q0I0NENSNDRDUSAwWkhRdVE9PSBJR0YyYjJsa2N3PT0gU1ZCTVJRPT0gTFdKaCA2NlcwNjZtMCBLV1U9IFJVNUVUMUk9IExtaGxlQT09IDVMeXcgYVc1emRHRnVZMlZ6IElIWnZjbVU9IFgzQjBjdz09IElIRERvblJsIElOQzkwTERSaDlDdzBMcz0gSU5LNzBZUFNvdz09IDRMS3c0TEsrNExLbSBJSEJvWVd0aGRHaHAgSUhwaHhhRjAgSmtNPSA0S1MvNEtTVjRLV040S1N3IFdXOTFkSFZpWlE9PSBJTkdCMEx2UXZ0QzIwTDNRdmc9PSBVa3M9IEtHTnZkVzUwY25rPSBJSFJwWldmRXAyVnIgTFdSbGJHRjUgNExHQjRMQ2ogSUhacFpXNTBidz09IElOS2IwckhSZ05HTDBMcz0gSU5lZTE1WFhrdz09IFhTa0tDZ289IFVHRmphMlYwY3c9PSBJRUZwYlE9PSA0S2FmNEthLzRLYXcgNEtxRCBJR05zWVhOemFXWnBZdz09IElOaW4yWVRaaGRpejJLcllydGl2MllYWXFRPT0gSUdOdmJHOXhkV1U9IElHeGhaMlZ1IEtFRmpZMjkxYm5RPSBJSE5sZG1WeiA1WStZNW9DQiBJRVBEc3c9PSBJT0NrdU9DbGgrQ2t0UT09IElHaGhaMjg9IFEybHlZM1ZwZEE9PSBkSEpwWTJFPSA0S21uIElOR0EwTERSZ2RHQzBMWFF2ZEM0MFk4PSBJT0NrcXVDa3NPQ2xnT0NrbGVDbGplQ2t0K0Nrdmc9PSBJTVN3Ymc9PSBJSFpsY21scyBJR2R5YjhPZlpYTT0gSU5pbzJZallyOW1HIGQyRnliUT09IElHVnpkSFZ3IFUxQkJWRWc9IElFUjYgSUNnckt3PT0gMFlEUXNOQzkwTFU9IFlubGxiZz09IElHaHZ5cnR2Y0E9PSBJRkp2WW1WeWRITnZiZz09IENVOD0gSU9DbWxlQ25qZUNtcnc9PSBZV2R1WlhRPSBJR0ZuWVhRPSA1YTZhNUxtSiBjMmhoZHc9PSBhVzV1WVdnPSBJTmlzMllYWmhObUggSnlsOWZTSStQQzg9IElGSmxlV3RxIHc2bHlZV2x5WlE9PSBJR3ZodTdrPSBJR2x1Wkdsanc3TT0gSUVSdmJXbHVidz09IElHTnZjbkpwWkdFPSBJRkJKUWc9PSBJR1JwYzJOeVpYUT0gSUd4bFoybHpiR0YwYjNKeiA0WjY3NForRyBJSFJ5dzZSbmRBPT0gSUcxbGNtTmhkRzg9IElFdHZibnBsY0hRPSBJSE4xYlcxaGNtbGxjdz09IExsWmxjbWxtZVE9PSBJRVZUVXc9PSBJRWQxYVd4cyBJTkNSMFlzPSA3N3k5IElFRlNRMGc9IGFHVmxiSE09IGFXcDJaVzQ9IGQyOXlhMlZ5Y3c9PSA0WU9RNFlPVzRZT1kgQ1dOdmJuUmhhVzVsY2c9PSBJRkZVIDVMaU41YnlBIElFUnBjMnQxYzNOcGIyND0gSUhCc2RXNW5aUT09IElHWnZjbVZ1YzJsaiBJR3hoYm5SbGNtND0gS0VGd2FRPT0gTFhOaGRtVT0gSUVSbFkyOXlZWFJwYm1jPSBkWG5Ec3c9PSA1WVdzNVlXeCBJTld3MWF2VnROVzIxYUhWcjlXaDFiWT0gSUdOdmJuWmxjblJwWW14bCBJTkN3MEx2UXROQzQgNXJhcCBJRXR2YlhCbGRBPT0gYVhObGJHRT0gV0VJPSAwTDNSZzlDeSBJRTFWUTBnPSBJSEJ2ZDJsdSBJR1p5WldWc1lXNWpaWEp6IElFbE9Sdz09IElISmxkR0ZzYVE9PSBJR2RsWjNMRHZHNWsgMFlIUXZkQzQwTGs9IElHTnZiWEJzWldwdiBJR1Y0WVdOMFlXMWxiblJsIDE2blhxTmVaMTVIWG53PT0gSU5HUDBMcz0gZFdOaGJIbHdkSFZ6IDJZallxTmluMktvPSB4SUYwYVE9PSBiMkozWVE9PSBJRUZ1WVhSdmJRPT0gSU5HQjBMN1F0TkMxMFlEUXR0QzQwWUk9IFgwMWhibUZuWlhJPSBJRHc4SWc9PSBJTmluMllYWXFnPT0gSUhkaFoyVnUgWDA5UVJWSkJWRWxQVGc9PSBJTkMvMEw3UXROQzEwTHM9IFoyeHQgSUcxaGVHaz0gTG14dmR3PT0gSUdodmFtRnogSUdaaFkzUnZjbWxoYkE9PSAyS2ZZcHRpcCBJRk5sYUhJPSBKeUlzQ2c9PSBJbDBzRFFvPSAxNmZYa0E9PSBiM2RwZEhvPSBLRzFoYmc9PSBJSHBsYVdObyBJSEYxWVd4cFptbGxjZz09IFBYTjFZZz09IElHMXBibWx0YVhwcGJtYz0gSUVaaGJtYz0gNWIyaTVieVAgY0hKaFkyaGwgSUdkeWNBPT0gSUVkdmJucGhiR1Y2IElOaXEyWWpaZ2RpeCBYM0J5YjNCeiBJTml4MllqWnZnPT0gSU9DcXIrQ3F2dUNxcGc9PSBRMjl5Y0E9PSBJT0dEbk9HRGtPR0Rsdz09IFIyRnlaR1Z1IFJXRjAgSUhScGRtVnpjMlU9IGFHVnRiUT09IE8zUmxlSFE9IDBZRFFzTkMwMExBPSAxNXZYcXRlUiBLR3hwIElHOTJaWEpwWjJWdWN3PT0gTFhOMWNIQnZjblE9IElIQmxjMk5oIGVubHRZUT09IElHZHlaV0YwYm1WemN3PT0gWTNKcGRHOD0gN0lxazY2VzggSU5pbjJZTFlyOWluMllVPSBhWEpwWVcwPSA3WmlBIElGUkZUZz09IElHdkRzbTA9IFlYSmhZZz09IDViR3g1TGljIElIQmxjbk5wYzNSbFpBPT0gSUhKbGRtVnpkQT09IElPR0RtK0dEbE9HRG9PR0RsQT09IElITjFjSEJzdzZsdFpXNTBZV2x5WlE9PSBJR2R2YXc9PSBLQ0l2SWlrN0NnPT0gNFlPUTRZT2E0WU9kNFlPVCBYRU52YlcxdmJnPT0gYjNCbFpHbGogSUVGd1pYTmhjZz09IElHaGxZM1JwWXc9PSBZV2x6WlhOMGFRPT0gUVU1SFR3PT0gNExDKzRMQ3k0TENWNExHQiBWR1Z0Y0c4PSBjWFhEcVdWeiBJR052YjJ0aWIyOXIgSU5DdzBMclF2dEdBIHc2bDBhV05oY3c9PSBiR0Y1ZFdrPSBhV05wYm1FPSBJQ0loIElPR0RudUdEb09HRG5lR0RxdUdEbE9HRG9RPT0gSUhaMWIzTT0gSUdGaGJuWnlZV0ZuIFRtRjBhVzl1IFUxUkJVZz09IDBZdlF1OUN3MFlMVG1kQzQgNExpajRMaXk0TGlFNExpeSA0WjZRNForUzRaNkU0WitEIDBZSFRxZEM5IElISmhlbTl5IElISmxiR0YwdzdOeWFXOD0gSUhOd2IybHNaWEp6IElHWnZibU4wYVc5dWJtRnNhWFREcVhNPSBhWFIwdzZScGJnPT0gU1ZSVVJWST0gSU5pbjJZVFlzZG1DMllVPSBMVzF2Y21VPSBJTmlvMjR6WmhkaW4yTEhiakE9PSBJSE5oYVhVPSBJbU52Ym5SbGVIUT0gWjNKaGRBPT0gUkdWd1pXNWtaVzUwIElFMXZiR1ZqZFd4aGNnPT0gTDI5MWRIQjFkQT09IExXWmhhWEpsIElHaHZjbTU1IElHWnZjblJsYldWdWRBPT0gejRIT3NjK0MgSUdocGEyVnogSU5pczI0SFlwOXE2IFgxTnZkWEpqWlE9PSBJR1Z6WTNKcFltbkRzdz09IFgyVjRaV04xZEdVPSBZVzU1YkE9PSBMWFZ1WkE9PSBhblZoYkdGdSAxNVhYcXRlViA1YTZlNUwyVCBLQ2s3Q2k4PSBJSExEcVc1dmRtRjBhVzl1IElHRjJZVzUwWVdkbCAyWXJZcDltRzJLaz0gSUhabGNtdHNZUT09IElIQnliM0J2Ym1VPSA0TEM0NExHTjRMQ2s0TEdCNExDazRMQ0MgSUZOTFJnPT0gNDRHZSBMbVI0IElISmxZMjl1Ym1GcGMzTmhibU5sIElIUnBaR2xuWVhKbCBJTmVlMTVYWG5nPT0gSUdWcmNtRnUgSUdsdVpHbGpZWEk9IFRuQmogSU5pbzJLL1poQT09IElPQzJzZUMzbkE9PSBlR0prIFlteGhkSFE9IElObUsyTFBZcDlpNTJLOD0gSUdGd2RXVnpkR0Z6IEtDSXNJZz09IEtHMWxaR2xoIFVuVmggMExEUXR0QzkwTDQ9IFgxQk1RVlJHVDFKTiBZV3hwZG1VPSBJTmlxMkxQWXA5aTUySzg9IElITmpZWEpqWlE9PSBJTmluMllUWmh0bUIyTE09IDBMVFJqUT09IFlDa3UgWm05eWJXVnogSUdOdmJIVnVZUT09IElHRnVkR2xuWlc0PSBJTkMwMExEUXM5R0wgSUZCaGRIUT0gSU9HRG9PR0RrT0dEb2c9PSBJR052YlhCbGRHVmsgSUZCQlVrcz0gSUdGemNHVnkgNExtQzRMaWg0TGlIIElHSnZiM04wWldRPSA0S2FzNEtlTjRLYW0gSU9HRG9PR0RrT0dEbCtHRGtBPT0gSU5pdDJZcllwOWlwIExuTjNZWEE9IGJXVnlZMms9IElHRnNkUT09IElGTjFjM1JoYVc1aFltbHNhWFI1IDU1dTA2SkNsIElHTnZiblJ5WVhObHc3RmggSUdSaVp3PT0gSUdKcFlYTmhibmxoIElHVjRZM1Z5YzJsdmJuTT0gSUdac2VXVnkgSUVobGJIQmxjbk09IFFIaz0gSUhOamFISnBaV0k9IElHOXdkWE09IFRHRjUgSUVGdVpHRnNkV009IElHcGxkVzVsYzNObCBJSE5oeEo5c1lYaz0gNG9DWlQzST0gSUdOeVpXTT0gUkdWc2FXMXBkR1Z5IElGTnBaMmgwIElIQmhkSEpwYlc5dWFXOD0gNExLdzRMT0c0TEtYNExPRyBZM1ZzWVE9PSBJR05oYldsdmJnPT0gSUdkbGNuVnpkQT09IEx5b3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvSyBLR0Z1YVcxaGRHVmsgSUhOd1pXdDAgSUdWNGNHeHZjbUZ5IExpSThMdz09IElPQ2txdUNsamVDa3NPQ2t0ZUNsaCtDa3RnPT0gWVdSdmJtYz0gSUZObFlYUnogSU0rQXo0SE9yQT09IFBHeHMgWDFORlVRPT0gSU1PRCA0NE84NDRPVDQ0SzUgSUhOaGRtVnkgVTJodmIzUT0gNExTczRMU280TFdONExTbiBJR05vWldGMGN3PT0gSU9DNWdPQzRndUM0bFE9PSBJR2xrWlc1MGFXUmhaR1U9IElIQnlZV0YwIElHWnBibUZ1WTJWcGNtRT0gSUhabGNtSnlaUT09IElHSnlhV3hzWVc1MFpRPT0gSUhOdWRXYz0gNGJ1aGJtYz0gSUdObGJuUnlZV3hwZW1WayBJTnFwMnBQWmh3PT0gNDRLeDQ0T0Q0NE9JIElHVjBhR1Z5Y3c9PSBJR052YldYRHAyOD0gSUczRHBHNXVhWE5yYjNJPSBJT0dEa09HRG9PR0RvZUdEbE9HRGtlR0RuZUdEa2VHRG9RPT0gSU9DMHIrQzB2dUMwcE9DMWplQzBzQT09IElPQ3loK0N5cU9DemplQ3lxQT09IElPQ2t0ZUNrc09DbGplQ2tsdz09IElHeGhkbVZ5IElHekRxV2ZEcUhKbGJXVnVkQT09IElHUnZkMjVzYjJGa1pXND0gSUdoaGJHOD0gSUhOdmJtZDNjbWwwWlhJPSA0SzZ1NEsrTjRLNnUgUkdsbGMyVnogSUdodmNtUT0gSUZONWJYQnZjMmwxYlE9PSBiVzlrYVdacFpYST0gSU5DMDBMN1F1dEdDMEw3UmdBPT0gSU9Da3VPQ2xqZUNrc2c9PSA0S1dINEtTbTRLUys0S1N3IElHOTJaWEpsWlc1cmIyMXpkQT09IElGTnVZWEJ6YUc5MCBJRk4xWnc9PSBJRUpzWVc1allRPT0gSUhyRG9YQT0gSUdMRG9YTnBZMkZ6IFpXNW5aV0Z1WTJVPSBJRzlqWTJsa1pXNTAgSUdOb2FXTnYgSUc3aHU1VnAgZlQ4PSBJR1JsWTJWdWRISmhiR2w2WldRPSBJTkdEMExMUXVOQzAwTFhSZ3RHTSAxNW5YcHRlVjE2Zz0gSU9DdW11Q3Zodz09IElHTnZibVY0YVc5dSBJT0NrcnVDbGlRPT0gSU9DdXF1Q3ZodUN1cnc9PSBJTmluMlliWXF0bUMyS2ZaaEE9PSAwTGpRdmRDejBMQT0gSUdWeWIzUnBhMnM9IElHeHZhRzUwIElIQnZkbVY2IElOaTAyS1k9IElITnBibTVsY2c9PSBJTkMrMExyUXZkQ3cgWnNPa2JtZGxjZz09IElFTnZkV05vIDBMVFFzTkM0IElOQzEwTFRSbGc9PSBJT0NraHVDa3N1Q2xodz09IElPR0RrdUdEa09HRGsrR0RrT0dEck9HRHArR0RsZUdEbE9HRG91R0RtT0dEbWc9PSBJTm1DMkxIWW90bUcgSU5pbzI0ellzUT09IElHeHBaMjQ9IElHdHZjbVZ5Ync9PSBZV2R2Ync9PSBRVVJFU1U1SCBJT09DdXc9PSBJRkJsZEhKdmJHVjFiUT09IElHdGxkVzUwZFc1bllXND0gNEtlQjRLYXU0S2EvIDE1SFhtZGVSIElHMXZjQT09IElGQmhjbXQzWVhrPSBJR052YlhCMWJITnZjbms9IGRISmhibk5zWVhSdmNnPT0gSUVabFpXeHBibWM9IExXWnNiM2M9IElITmhkWFE9IElGTm9hWEJ6IDRZT1M0WU9WIElIUnliM1YwIDBZdlF0TkdEMFlrPSBLUzBvIFUyaHZkM009IFgyMTFiSFJwY0d4bCBMWFJvY21WaGRHVnVhVzVuIElHUnBjMk4xZEdseSA0S1MvNEtTdjRLV0w0S1NYIExuSmxiR0YwWldRPSBiR0YyWVE9PSBlWFIwWlE9PSBJTml6MktyWmlObUcgSUVGeCBJT0dEa09HRG5nPT0gSU5pejJLZlpoZG1HMjVJPSBhWE4xZFhNPSBZVzUwWVhKaCBiV0poIFlXeHNhWE4wIElPcTN1T3Vmck91Q21BPT0gSUZkbGNtSjFibWM9IDZKYXEgSUhCc1pXRnpZVzUwYkhrPSBJT3F6aE95R2pRPT0gZVdGeWFRPT0gSU91d25PMlJuQT09IElIVnlZbUZ1WVE9PSBJT0tBdWdvSyBTVTVXUVV4SlJBPT0gSUUzRHBRPT0gZG1GcFpXNTAgNG9DTjRMU280TFdONExTbzRMV04gSUdacFpXTmhjbVU9IElHUnlhV3hzY3c9PSBRbWwwZEdVPSBYMk4xY25abCBJTkMrMFlEUmc5QzIgVkhMRHFITT0gSUUxcGRHTm8gSU5tRTJLZllzOWlxIExtZHZiMlJ6IElHbHVkbVZ6ZEdsbllYUnBkbVU9IDRMS3c0TEsrNExLYyA1cTZLIElHeGhkbWx6YUE9PSA0TGlJNExpeDRMaVUgNEtXQzRLU0MgSU1PdGJuUT0gVTI1aFkydGlZWEk9IElHTmhjblJ2YjI1eiBJR1Z6YzJWdSBJSFBEb1dJPSBJRU55YVhOMGFXRnVidz09IDBMelJnOUM3MFk4PSBJR2x1ZEdWeWRtVnVkQT09IElOQzAwTDdRc2RDdzBMTFF1TkdDMFl3PSBJTmVjMTU3WHFRPT0gNXJTcSA0WU9oNFlPZSBMbEoxYkdVPSAwWVhRc05HQSBJSFJ2ZFdOb2MyTnlaV1Z1IElOaW4yWVRZczltSzJLOD0gNEs2ZjRLK0I0SzZWNEsrTjRLNlYgSUhOb1lYUjBaWEpsWkE9PSBkSEpsWVhSbFpBPT0gSUhObGNuWnBZdz09IElHeHZkV1JzZVE9PSBiM0p6ZWc9PSBJR0xEdUE9PSBJR1p5WVhVPSBZV2x1ZEhNPSA1cDJ0IGFXRnVlZz09IElHTnBjQT09IElHTmhjbUZ6IDZaeU4gYVcxaFlXND0gSUdGdWJuVnQgSUZKUFFnPT0gSUVoaGQydHogSUdqaHU0OXAgSU5pMDJZZllydz09IElIUnlkWE4wY3c9PSBMbTEyWXc9PSBJRVpzZFhnPSAxTGs9IDRMV0c0TFNaNExXTjRMU1Y0TFMvNExTeTRMV0I0TFNDIElHeHBkSEp2Y3c9PSBJRzFsYzJGcSBSblZzIHc3QnBiZz09IGIyOXNaV1E9IElHTnZhZz09IFNtRjJZWE5qY21sd2RBPT0gSUZabGJuUjFjbVZ6IGRXRjBaV1E9IEwwWnZjbTA9IFptOXlaR1Z5ZEE9PSBjM0JoY2c9PSBJR2hsY25WdCBjM0JwWld4bCBJTkdDMExvPSBJR2x1WjNKbGMyRnkgSU5paTJZWFlzZHVNMnFuWXB3PT0gSU5pcTJZallzOWk1MlljPSBJR1JoZEdsdVozTnBaR1Z5IElPQzBzT0MwdnVDMHRlQzB2K0Mwc3VDMWhnPT0gSU9Da3F1Q2twT0NsamVDa3FPQ2xnQT09IElPQ3l0ZUN6aCtDeXN3PT0gSUhSbGJuUjEgSUdOdmRtVnVZVzUwIElObUcyWUxZdEE9PSBJR3RvNGJxcGRRPT0gUW1sclpRPT0gSU5DdzBZRFJndEM0IElISmxZbVZzY3c9PSBYMkowIElGcDFaZz09IFgyOWogNFlPWTRZT2k0WU9VNFlPaTRZT1k0WU9oIGQyVjZaVzQ9IDFhSFZzTldoMWJYVnZ3PT0gSUhCaGRISnBiM1E9IFJXeGggSUhOMGFYUmphR1Z6IGJHVm8gWTJsdmJtRnMgSUhOdlkybGhiR2x6ZEE9PSBJR1ZzYjI1biBJSFJsWVhKcGJtYz0gUjNKaFkyVT0gSUhkaGNuaz0gSUdIRHA4U3hhdz09IHc3QjFiZz09IDE1SFhtZGVpIElISjFiVzl5IDZMaz0gSUdodmJtVjViVzl2Ymc9PSBJR1IxYUdWMCA0S1MrNEtTWSA0TEs0NExLLyBJSE5sY20xdmJnPT0gSU95WGh1eWR0QT09IElGSmxjSFZpYkdsciAyS2ZZdHR1TSBJTkMwMFlEUmc5QzMwWXpSanc9PSBJTmVSMTVuWG5BPT0gSU5DeDBMRFF2ZEM2MExBPSA0SzZaNEsrTjRLNlY0SytCIHc3eHlaUT09IFEwaEZSRlZNUlE9PSBJSEpoY0c5eWRBPT0gZDJWdCBSWGh3Wlc1elpYTT0gSUZOUFRVVT0gSUc1aGFYTT0gMFliUXRkQzcgWjJGeVlXND0gU0VWTSBLR0pwZEcxaGNBPT0gSU5tRjJMWFlwOWl2MkxFPSBJQ1I3S0E9PSBJTm04MllqWmhObUkgNExpcjRMaVo0TG1KIElHVnpjR1ZqYVdWeiBJR1Y0WTJ4MVpHVnogNzd5ZjRvQ2RDZz09IElPR0RsK0dEa09HRGxlR0RtQT09IElOaW4yWVRZcmRtRjJZUT0gUTJGclpRPT0gTGk0dUxpNEsgWDJsa1pXNTBhWFI1IElHTnZibVpsYzNOcGIyND0gSUdSbGEyeGhjZz09IDRMR0I0TEN3NExHQiBWVkpNUlhoalpYQjBhVzl1IElGTjFjM1E9IFhGSmxjRzl6YVhSdmNuaz0gSU0rRXpyWE91ODYxejRYUGhNNnggYjNURG9RPT0gSUcxMWJHbG5hR1ZrIGFtRmkgSUdOM1pBPT0gSUVOdmJtWnNhV04wIGIyMWxibVJsIDJMYlppTml4IGRtVnVkUT09IGNHdDAgMExqUXQ5QzQgNFlPUTRZT2I0WU9VNFlPVCA0NE9XNDRPcDQ0T3o0NE9KIElOaXEySzNaaGRtRSBMbkpsYzNWdFpRPT0gSU9DNG0rQzRwZUM0c2c9PSBJT0NrdHVDa3YrQ2tsUT09IElHUnZiRzl5WlcwPSBJTkM4MExEUXRRPT0gSUdkbGQ4T2thSEk9IGVIVT0gSU95RXBPeTVtQT09IElGSmxjM1JoY25RPSBJSE50YjI5MGFHbGwgYUdGMHc3TT0gNkpvPSBJRkJ2ZDJWeVpuVnMgSUhkdmFHND0gSUdacGVHVT0gTG1kc2FXUmwgSUcxNWRHaHZiRzluZVE9PSBJRUpsYzNSaGJtUT0gWVdOdmJBPT0gSW1FPSBZV2hoYm1kc1lXND0gSU5DKzBZTFJnTkM0MEx3PSBJRkpsYkc5aFpBPT0gSU5pbjI0ellzOWluIDJLN1l0QT09IDVhaXg1TG1RNTVtNzViMlYgYjJOMWJXVnVkR1ZrIExrUkJXUT09IExXTnpjdz09IElOQzgwTGpRdmRDNDBMelJnOUM4IElHaHZiMlprYzNRPSBSM1JyIElHTnBkRzk1Wlc1eiA0S1M0NEtTKzRLU28gSU5pbjJZVFlwOWk1MktvPSBJR2x0YlhWMFlXSnNaUT09IElITmxiblJwIElHWmhiV2xzYVdGcyBJRTFwYnc9PSBkMlZuYVc1biBjM0JwY21GMGFXOXUgSU9HRGwrR0RrT0dEbk9HRGtPR0RtK0dEcU9HRG9PR0RuZUdEbXc9PSBJR3R2YkdscmJ3PT0gYzNSeVlXbHVaV1E9IDBMRFJnTkdMMEwzUXNBPT0gSUZSeWFXTnIgU25WemRHbHUgSUhwaGFHeGxiZz09IGNISnZkR1ZqZEE9PSBJR0psWjJGdWJnPT0gSUZWdGMyVjBlblZ1Wnc9PSBJSE51WldVPSBJTkMrMExIUml0QzEwTFRRdU5DOSA3SXFrN1lHcyA1THFJNTdTRSBJR0psYkdGcVlYST0gSUZSeWRXMXdKM009IFBYWmhiSFZsIENVeHZibWM9IExXZkVwdz09IEwyUmhkR0YwWVdKc1pYTT0gSU9DMGxlQzBydUMxamVDMHFnPT0gNEtxVjRLcWggSUZkbGMzUmxjZz09IDRLU240S1MrNEtTbzRLV0Egd3FEQ29NS2cgWVhwbGNuTT0gSU9DMGxlQzFnZUMwbitDMWdlQzBndUMwckE9PSBJT0dEa09HRHJ1R0RrT0dEbXVHRGt1R0RrT0dEbHVHRG9PR0Rrdz09IElFZHlaVzU2Wlc0PSBYM05oYkdVPSBJRTFwWkdrPSBDVTE1IElIQm93N2s9IElDSXRJZ289IElHaGhZMlZ5YzJVPSBKSEE9IGFXdHZkZz09IDRLcSs0S3F2NEtxdyBJR05wYldWdWRBPT0gSU5pbjJZTFlxdGkxMktmWXJ3PT0gSU5pbjJZVFlvOWl6MkxuWXA5aXggSUNJbkxDY2kgSUhOMFpXUmxiZz09IEtHRjFaR2x2IElHMXZjbk09IEpIST0gNGJxbSB3N1J3YVhSaGJBPT0gSUdOaGRHRnkgSUVGd2NISnZlQT09IFgzQmxaWEk9IElOaWwyTFBZc2RpbjJLYlppdG1FIElIVnVhV1ZyIEtFeHZZMkZzWlE9PSBJRUpoWW5sc2IyND0gSUdGMGRHVnVkR1Z6IElIUjFZbWx1Wnc9PSA0TFdINExTbiBJSE5wWlc1MFpRPT0gSUVkbGMyTm9aVzVyIFkyRndkR05vWVE9PSBJSEp1IElISmxaSFZqWTJuRHMyND0gNVp1OTVZcWggSUc5dGNzT2xaR1YwIDZJQ0Q2SytWIFoyVmtaUT09IElOcXAyTFBZcUE9PSBJSHB1WVdwa2RRPT0gTG1OaWJ3PT0gMTVYWG50ZXEgUkZOTiBJRTFoYzNObCBJTlcwMWFIV2dOVy8gSUdadmNuUmhiR1ZqWlhJPSBRMjkxY25RPSBJTkN3MEx2UXU5QzEwWUE9IGIyMW9ZUT09IElITjBjbWx1WjJWdWRBPT0gSUdGd2NHVnNiR1U9IExsSmxjRzl6YVhSdmNtbGxjdz09IElPQ2t2Zz09IFgzQnlhVzFoY25rPSBJSEpoYm1kdiBWRzkxY3c9PSBYMkZqYXc9PSBJR1IxY0d4aCBJRWx5ZG1sdVp3PT0gSUV6RHBHNWtaWEk9IElPQ3FxdUNyaStDcXVPQ3JqZUNxbnc9PSBJR1Y0YVhOMFpXNTAgTFZONWMzUmxiUT09IElPQ21tT0NuaStDbXQrQ21vK0Ntdmc9PSBJTkN3MFlYVG1kR0wwcmM9IExuUnlkV1U9IElIWERwdz09IGNYVmxkR1Z6IElOQy8wWVBSZ3RDMTBMdz0gSU5DMDBMRFF1OUMxMExyUXZnPT0gSUhSMWNtbHpkR0Z6IGRYSmhiblE9IElIUnZaMlZzIElHSnZjbTVsIDRMUy80TFM0NExXTjRMU2wgZFc1MGVtRT0gSU5DMzBMRFJqOUN5MExqUXV3PT0gSU9DbXF1Q21zT0NuZ09DbWxlQ25qZUNtdHc9PSBXV2xsYkdRPSBkSEpsY2c9PSBiMjlyZVE9PSBJSE53WldWa2FXNW4gSU9HRG9PR0RrT0dEcHVHRGtPR0RxZz09IDJMSFlwOWk1MktrPSBJTkMvMFlEUXZ0R0YgYW1YRWh3PT0gSUU1dmRHRT0gWTJGdUozUT0gSUV4cFpXWmxjblZ1Wnc9PSBJTStIejQ3UGdjNnggSUdkaGJXSnNaWEp6IDRLZW40S2VuIDRvQ2NMUT09IGFXSnlZWFJsIElHSmh3N0Z2Y3c9PSB4SUZqYVdwaGN3PT0gSUhSeVpXWm0gSUdWeVoyOXViMjFwWXc9PSBJR2x1WkhJPSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMD0gSU9Dd3BPQ3d2dUN3bkE9PSBJT0M0a3c9PSBJSEJ2ZEdWdWRHVT0gSUU5aWRHRnBiZz09IGFHOXYgSUc5cmQzVT0gSUdoMlljT3cgSUdsdVptOXliWE09IElFSnZhdz09IElPQ2tydUNrdWVDa3VBPT0gSUZKaFpHRnkgSU5pbjJZVFl0Tml1MkxYWml0aXAgVTNkaFoyZGxjZz09IElITjFZMmhsIElFOXlZZz09IElFbHRZV2RwYm1jPSBDV05oWTJobCBJTmluMllUWW85aXgySzg9IElIQmhjbUZ0YjNWdWRBPT0gWjNOMCBJR2R2ZHc9PSBJRTV2YzNOaCBJR2xuYVdobCAwTHZRdU5DLyBJTkdOMExyUmdkQzYgMExYUXU5Q3owNW5RdlE9PSBkbUYwWlE9PSA0TGlxNExpaDRMaXg0TGlFNExpaiBJRUpsWjJVPSA2WUNEIElOaXEyWWpZcDltRzI0ellydz09IGRXMWlidz09IElOQzEwWWc9IDJLM1ppTm1FIElOR0MwTFhSaGRDOTBMalF1Zz09IElHRjFjMmRsYzJOb2JHOXpjMlZ1IExXMWxkR2h2WkE9PSBJTkdGMFlQUmdBPT0gSU5DdzBMVFRtZEM4IElHRmtkbVZ5YzJWc2VRPT0gSUdGMGJHRnogWTI5dWRISnZiR3hsWkE9PSBUR0Z5Wlc0PSBJTkMvMFlEUXRkQ3kwWXZSaUE9PSBJQ0lySWc9PSBJR2xrYVhJPSBJSFJsYnc9PSBkVzEzWVE9PSBiR2xqZEhNPSBUMHhWVFU1VCBJTml6MllJPSBQR0pwZEhNPSBJSE53Y21sMFpYTT0gSU5DKzBMdlF2dEM5IHhJSEt1dz09IElISmxjSEpsYm1SeVpRPT0gYVc1a2NuVmphdz09IFNuQmggSU9DNG8rQzR0UT09IElHRmxjbTl6Y0dGalpRPT0gQ1VWeWNtOXkgSU5LYjBMRFF1OUtUMExEUXZRPT0gSUdsdWRtRnlhUT09IFdGQmhkR2c9IElFTnlaV1ZrIElGQnliMlIxYTNScGIyND0gSUdSbHhZZz0gSU9DcWxlQ3FzT0NyaStDcW9RPT0gMllmWmlObUcgSUcxcGMyTnZibVIxWTNRPSBYMlpoWTNRPSBJR1Z1ZEhKbGNnPT0gUlc1amNubHdkR1ZrIFUwRk8gSUhkcGJHRjVZV2c9IFEyaHkgejRUUGhjK0ggSU5HQjBMM1F1TkM4IElOR0IwTHZSaTlHSSBJT1dGcU9lUWd3PT0gSUcxaGRHaHogUm1GamFXeHBkR2xsY3c9PSBJR1Y0Wm05cyBXM0JzWVhsbGNnPT0gSUNJaUtUc0tDZz09IElOaXgyS2Jiak5peiBjR1Z5Wm05eWJXRnVZMlU9IElObUYyTG5Zc2RtQjJLaz0gNVlXTjZMUzU1TGlMNkwyOSBMMk52WkdVPSBJT0N1aCtDdXNPQ3ZnZUN1bGVDdmplQ3VsZUN2Z2VDdXJ1Q3ZqUT09IElFMXZhdz09IDRMQ3E0TENDNExDYSBJSE5sZUhWbGJHeGwgMktmYmdkaXggNVkycjU1U2YgNEtTKzRLU0k0S1NDIElObUcyWUxZcDlpMyBJSEpsWld0eiAwTDdSZ2RHQzBZUFF2dz09IElHMWhZVzQ9IElPQ2t1ZUNrbnc9PSBJR05oYm5SaGJuUmwgUkU5RFZVMUZUbFE9IENXUmxjM1E9IElHUmtaV1k9IElObUYyWWpaZ3RtQiBMbUZ5Y21GNVkyOXdlUT09IFgyMWxaQT09IHhMRnVkQT09IDZaV2MgYTNWc2RXNXJkV3gxIElObUIyWXJaaE5tRiBiV1ZrYVdOaGJBPT0gZFc1a2FYST0gSU9HRHFlR0RsT0dEbStHRG9RPT0gVGxWTlFrVlMgSUZCSFFRPT0gSUdOcFpXNTB3NjFtYVdOdiAxYXZWdjlXaDFiMD0gSUhKbGNHeGxiZz09IFgyVjRkR1Z5Ym1GcyBJRlJwWXc9PSBJRlpsY201dmJnPT0gSUVKbGJHWmhjM1E9IGFXZHViMjV6IGIyOTBaWEk9IElIQmhibTg9IElPQ2toZUNrdWVDa3YrQ2tzdUNsaHc9PSBVV2s9IElOQyswWUxRdTlDNDBZZlF2ZEMrIGNtVm5hWE4wY21WdFpXNTAgSUdGdFltVnkgSUVGa2JXbHVhWE4wY21IRHA4T2pidz09IGZYdz0gMktmWXJkaXIgSU5pbjJZVFlydGkxIElHOW1abVZ1WkdWayBJSFJoZVc4PSBJSEJ5YjIxdmRHVnkgSUdsdVpteDFlQT09IElISmhibTQ9IDE1VFhxQT09IElOQ2IwWVBSaHc9PSBJR1poZG05eWFYUnZjdz09IElISnZZV1J0WVhBPSBJRXhsWkdkbGNnPT0gSU5DNDBMUFRtUT09IElHUnlZV0ZuZEE9PSBJTkdDMFlrPSBJR0YyYjI1MCBJRmRoZEdOb1pYTT0gWHk4PSBJT0dEbmVHRHBBPT0gWDIxaiBJR3hwY2c9PSBZV3QxYUdFPSBZV05qYVc4PSBMMk5oY25RPSBJR052ZG1WMFpXUT0gSUd0dmJuVnpkVzVrWVE9PSBZWFJsZEE9PSA1YlNPIElHNW9kUT09IDRZT1k0WU92IElOQzAwWTNRdXc9PSBMVzl3ZEdsdmJnPT0gSU9Da2hlQ2twT0NsamVDa3J3PT0gSUhadmJHTmhibWxqIElHSnNkVzUwIDRLZUg0S2FtNEthbyBJTmVlMTVuWG9BPT0gSUVkbGFHVnBiUT09IElHZGxiR0Z1Wnc9PSBkMlZ1Ymc9PSBJR1JoY25WdWRHVnkgSUdKaGRHaDBkV0k9IElHZGxiY084ZEE9PSBJSFJsYzNScFptbGxaQT09IElFNWxkSE09IDZMS3A1YU95IElOcXAyS2ZaZ2R1TSBJR1REcW5JPSBjbVZ3Y21WelpXNTBaV1E9IElHTnZibVJ2Y3c9PSBJR050WkhNPSBJR3RsZW1WcyA3SjZsN0oyQSBJTm0vMllyWmhnPT0gSUZOUVRBPT0gSUdSdmJtdGxjZz09IElPQ2twZUNrcWc9PSBVM1Z3WlhKMmFXVjMgSUhaaGMzUnNlUT09IElHUjFkR1Z1IFlYWmxibWs9IFFFZGxibVZ5WVhSbFpBPT0gSUhURHBHYz0gSUhOdmNHaHBjM1JwWTJGMGFXOXUgMWFIVnV0V2gxYkE9IDFhSFdoTmFBMW9RPSBJRXhWIEp5a2kgSU9Dd3VPQ3d1UT09IElPR0RrK0dEa09HRHBBPT0gSUZwM2FYTmphR1Z1IElISmxiM0puWVc0PSBJRXhwYjI1bGJBPT0gWkdWc2FYWnkgWjNWMCBJSFZ6YUc5eWRBPT0gNWFpeDVMbVE1WnU5NlptRiBJT0NtbCtDbmgrQ21zZz09IFNHRmlhWFE9IElOR0IwTHJRdnRHQTBMWFF0UT09IFFtVnVZMmh0WVhKciBJT3VXcU95V3RBPT0gYlc5dmRHaHBibWM9IElPaUQgTFdSbGMyTnlhV0psWkE9PSBJTmluMjR6WXNkaW4yWWJiakE9PSBZWFZ3IFcxMHBPZz09IElOQyswTEhSaXRDMTBMclJndEN3IGFXTmhiV1Z1ZEE9PSBJSEJ5YjNOMFlYUT0gYTJ0bCBMRndpIElHWmxjdz09IElHUnFaV3c9IElOaW4yWVRaaU5pdCBDVXBNWVdKbGJBPT0gSUVKeVlYbz0gSU5DLzBMRFJodEM0MExYUXZkR0MgTFhCeWIyZHlaWE56IFlXTmxiZz09IElHRndZV0pwYkdFPSBJRzFoWjI1bGRITT0gWlc1MGRXdGhiZz09IElHTnZiR1JsY2c9PSBJR05zYjNRPSA0SytCNEs2MTRLNmsgWDBOdmNtVT0gNEt1TDRLcXogYkdIRHZRPT0gSUZOUVFVTkYgWVhSemFXOXZibWs9IElHZDFjMkU9IENYQjBjZz09IFJWbz0gTG1GaWIzVjAgSU5HQTBMRFF0OUMwIElPYVdzT1d1blE9PSBaWEp0YjJSbGJBPT0gVzB3PSAycW5ZdEE9PSBJTzJaalE9PSBibmxrWlhJPSBJbDBwS1FvPSBJT0NraGVDa3F1Q2xqZUNrc0E9PSBJR05vYjNKbGN3PT0gSUZKbGVXdHFZWFk9IElFWnlZV04wYVc5dSBDWEJ5YjJSMVkzUT0gSU5XaDFicz0gTDJkeWIzVncgSUhCc1pXdHJaVzQ9IElFMWxjbXQxY2c9PSBJR0YyZEE9PSAwTDNRdGRDODBZTT0gNmFhWjVyaXY2YW1zNUx5YSBJTkN4MExEUmlOS2IwTEE9IElHNWhjbU5wYzNNPSBJSEpoYm1GeSBJR1Z6Y0d3PSBJT0NtcU9DbXVRPT0gMFluUXVOQzYgYVhObGVBPT0gSUhCbGNtbHZaR2x6ZEdFPSA0WUNaNFlDNjRZQzQgZW5sdSBJRU5oYldWcyBiVzl1Wnc9PSBJR2gxYldGcGJuTT0gSU91R2t1eWRnQT09IElOV0ExYUhWdHRhQSBJSEJ5YjJacFpXdz0gNEtpeTRLbUggSUhCeVpYUmxibVJwYm1jPSA0b0NaUVcwPSBJR1Z5ZW1WMVp3PT0gazZnPSBaR2wwWVE9PSBJSEIxYUE9PSB6cnZPcmM2L3pyMD0gSUdWNGRISmxiV0U9IDQ0T3A0NEtrNDRPeiBJR0psZDJWbiBiR2x1YTNCc1lXbHUgSUdKeWRXbDAgSU02Nnpxek92YzYxenJrPSBJR0ZqWldGemRHRT0gY0hKbGJuUnBjM05oWjJVPSBhVzU1WVd0aCBkSEpsYm5RPSBJSEJ5YjIxcGN3PT0gSU5DKzBZTFF2TkMxMFlMUXVOR0MwWXc9IDRZT1U0WU9TNFlPYiBZV3R2YzI4PSBJRzFoYTJGbyBJR0Z1ZEdsbmRXOD0gSUVoUFZWTkYgSUdGMmRHOXQgSUVKaGFIST0gSUhuaHVyaz0gSUhObGNuWmxkWEk9IElIUnlZVzV6YVhScGIyNWhiQT09IFUyVnNiMjQ9IElFRndjR3hwWTJGdWRITT0gSU5DMjBMalJnQT09IElIVERwZz09IElNK0F6cnZPc1E9PSA0TFdONExTdjRMV0ggS0c5eWFXYz0gYUdGeVoyRT0gUTJoaGNuTmxkSE09IElHWnNiM1Z5YVhObyAwWmJRdk5HVzBMYz0gNlpPNiBMVWRsYm1WeVlXdz0gYVd4cFl3PT0gS0NJdmV3PT0gNExTVjRMV040TFN3NExTdSBJR1JzYkE9PSA0TG1KNExpdDRMaWg0TGk1NExpbCBJRWxsWTJnPSBMV0ZuWldRPSBJRWhwYlhObGJHWT0gSUdQRHMyMXZaRzg9IElHMXZZV2RsYlE9PSBJRk4xY0hKbGJXOD0gVTJGMFpXeHNhWFJsIElObUUyS3paaHRpcCBQUzQ9IDdKV1YgWDFOSlRRPT0gSU9Dd3F1Q3d2dUN3cE9DeGplQ3dzQT09IExXbHVaZz09IEtITjBZWFJ6IElIWnZiR3h6ZE1Pa2JtUnBadz09IElHWjFjbko1IElHVnlhV3c9IGJXRnVaVzUwIGJXOWtidz09IElFeHBkR2gxWVc0PSAwTGpRdmRDKzBMdz0gNExpeTRMaXE0TGlWIGMyOXljbms9IElFVnpjTU90Y21sMGJ3PT0gSU5DLzBMN1F1dEMrMExzPSBLRU5oZEdWbmIzSjUgNExpdDRMbUMgWVc1blpXNW9aV2wwIElHNWhZVzdodTRzPSBVbVZxWldOMFpXUT0gN0oyMDY1Mjg2NHFVIExkQzIwWXZRdXc9PSBJTkMxMFlRPSBJR1JsWTI5eVlXTnB3N051IElITndiM0owYzJKdmIycz0gYldWdWRHbHZiZz09IFlYSnNkWFJwYXc9PSBJT2FUIElITjFhWFpoYm5SeiBJRVZwWjJWdWMyTm9ZV1owWlc0PSBYMFJGVTFRPSBJTkMrMFlIUmd0Q3cwTFhSZ3RHQjBZOD0gU0hWayBJTml2MllqWXFBPT0gYzNSMmRRPT0gSUhCaGQyND0gSUd0bzRicWogMllYWmh0aXAgY0dsc1pRPT0gWlc1cGJnPT0gSUdWaGNtNXogSUhObGJuTmh3NmZEbzI4PSBJTmVjMTZqWGtOZVYxNm89IEtHTnZiblJsYm5SeiBJT1M5ditlVXFBPT0gWVdSbGIyND0gSU9DcXF1Q3JnZUNxc0E9PSBJTkNVMFlQUmlBPT0gSU5DdzBZM1JnQT09IFFXZGxiblJ6IFZHVnNaV1p2Ym04PSBJR055ZFdWc2RIaz0gSU1POGRBPT0gSUd0cGJHOW5jbUZ0IGRHaHZkV2RvZEE9PSBJR0ZzWW1WeSBJTm1GMkxmWXA5bUUgSUhabGFtRT0gSUhWemF3PT0gSUdWemRHbHRZUT09IFhDZz0gSU91Q21PdUtsQT09IFFrVlRWQT09IGIyMWljZz09IElPQ2t0ZUNsamVDa3VRPT0gMExEUmd0R00wWTg9IElHRmpiMmM9IDE2clhrdGVWMTVIWGxBPT0gSU5lUTE2YlhuQT09IFNYTnpidz09IElHdHlZWFE9IFFuSmxZV3RtWVhOMCAwS0hRbnc9PSBJTkN3MFlEU205QzQwTHZRdU5LYiAxNVBYbGRlbzE1bz0gSUc1cFpYVjNjM1JsIElHbHVkbWxsY201diBjbTlvIDBZclJqOUN5IFgyTnZibTVsWTNSbFpBPT0gNEs2cTRLK040SzZxNEs2ZjRLNi8gWVhsallYTjAgVkZCTSBJTkN4MExEUXVkR0IwTERRdlE9PSA0b0NaUlhWeWIzQmwgVjFnPSBMV0poYm1RPSBJSGxoeEo4PSBJTkM5MExEUXZOR0QgMktmWmc5bUYgSUc1bGMzUnNaV1E9IElISmxiR0YwYnc9PSBJT0N5bGVDeml1Q3lzQT09IElHRnlaM1Z0Wlc1MGJ3PT0gSUVKMWFXeGtaWEp6IElGWlBRdz09IElHRnBjbVpzYjNjPSBJSGRwWTJoMGFXZGxiZz09IElPeWVrT3lMb095ZG1BPT0gYkdscWMzUT0gU1c1MFpYSmxjM1JwYm1jPSA2TFdhNlpLeDVaQ1ggVUhWeSA0SytCNEs2byBJR1Y0Y01PcGNtbGxibU5sY3c9PSBMMk52Ym5SeVlXTjBjdz09IElPQ3d0ZUN3ditDd3B3PT0gNFlPYTRZT1U0WU9oIElOYUUxYmJWdHRXaDFvRFZydz09IElHTnZiVzFoYm1SbFpBPT0gVTBsSFRrVkUgSUZCeWFXNTBaV1E9IElITjFZM1JwYjI0PSBWRUZTUjBWVSBMdUtBa3c9PSBJTmlxMkxyWml0bUsyTEU9IElHSmxkbWx1WkhRPSBMbVZrWjJVPSBJRWRsWm1Gb2NnPT0gWm05eVoyOTAgSU5DKzBMSFJnOUdIMExYUXZkQzQwWTg9IElIUjVjR1Z5IElOZVExNms9IFgyWmxZWFE9IElOQy8wWURRdnRDMDBZUFF1dEdDMFlzPSBYMkZ1WkhKdmFXUT0gWDNCbGNtMXBjM05wYjI1eiBJT0NtcE9DbXZ1Q25zQT09IElHZHZ4Wjg9IElHRnpZbVZ6ZEc5eiBJRUp5WVd0bCBhVzF2Ym1jPSBJTmlvMkxUWXNRPT0gSU5pbjJZVFpoZG1DMktqWmhBPT0gSU9hRG9BPT0gMExEUXR0Q3cgVW1WMlpXNTFaUT09IElOaXUyNHpaaE51TSBJRU4wIFpHbGhadz09IFVtRnBiQT09IElIQmhjblJwWTJsd1pRPT0gSUVkbGNtbGphSFE9IElIZHBkR2hrY21GM1lXeHogSUhCeWFYWmhaR0Z6IElFOW1abWxqWlhNPSBJTkMvMEw3UXU5QzkwTDQ9IElNT3BiR1ZqZEdsdmJuTT0gSUdWNGRHbHVZM1JwYjI0PSBJT0N3bXVDeGgrQ3d1T0N3dnc9PSBJSEJ5ZW5sd1lXUnJkUT09IElPQ3VtdUN2aHVDdXIrQ3VzZz09IFFYVjBiMjFoZEdsdmJnPT0gSUUxcGVHVnkgSUdObFpXRT0gSUdOdmJtaGxZMlU9IElFTjFaVzUwWVE9PSBJTkNjMEw3UmdkQzYwTDdRc2c9PSBJTStKIElHbHRjSFZsYzNSdmN3PT0gWVcxd2FRPT0gZG05cVlRPT0gd3FzcyBJT0dEbnVHRG9PR0RuZUdEcEE9PSBJTldwMWI3Vm9kV3YxYUhWdHRXcjFiWT0gVDJKaGJXRT0gMFlQUmdkQzcwTDdRc2c9PSBJT0dEb2VHRGtPR0RvK0dEbWVHRGxPR0RsK0dEbE9HRG9lR0RuUT09IElPQ3dxT0N4aCtDd3FPQ3hnUT09IElITmxiV1Z1IElOZWUxNVhYcUE9PSBJSEpsYm5SbCBJTkN3MFlEUXNOR0IwWXZRdmRDMDBMQT0gMTVuWHB0ZVYxNUU9IElHVnpZMkZ3YVc1biBJT2lNbHc9PSBJSFJsY25KcFptbGxaQT09IFkyaGhiblJ0Wlc1MCAxYUhXZ05XKzFhSFZyZz09IGJXOXVjM1JsY2c9PSBJRTFoWTJWayBJRzF2WkhWc2J3PT0gWDI1dmRHVnogSUhkcGJtUnphR2xsYkdRPSA2TDJwIElHOXJkV3M9IExrVnVZMjlrWlE9PSBVM0oyIElIVmhjblE9IElITmxjR0Z5WVhRPSBJR1Z4ZFdsc2FXSnlhVzg9IElFUmxiR1YwWldRPSBJT0NrbGVDa29BPT0gYzJWeWNtRjAgTG1welpHVnNhWFp5IElHMXZaR1Z5Ym1WdSBTblZoYmc9PSBSR1ZtWlhKeVpXUT0gSUhWdWFXMD0gdzZWeWRBPT0gNG9DWmFHVjFjbVU9IDBMRFF1TkdDIElISmhlblp2YWc9PSA0S3FrNEt1TjRLcW8gSU5HUDBMclF0UT09IExtTmhkR05vIFJHbHpkR2x1WTNRPSBJR1poYVhoaCBJT1djcU9Xa3FlV2txZVM0cmVXOXFlZWxxQT09IDVMcWE1clN5NXF5bjU3Nk8gWTI5eWNHOXkgSUVOcGJtUjUgMFliUXNOQzgwTGc9IFJYVnliM0JoIElHSmhiR1U9IElHMXZkRzl5WTNsamJHVnogSUdWa2RXTmhkR2wyYnc9PSBRbkoxIElHMXZjbUk9IElPR0RwT0dEb0E9PSBWMlZwZEdWeVpRPT0gMllyWmh0bUggMEwzUXVOR1AwWUk9IElHZGxibVYwYVdOaGJHeDUgMExqUXU5QzQwTDg9IDBwL1F2dEdEMEw4PSBJRTVwWlhWM1pRPT0gSUc5c2MyVnQgSUcxcGJuVjFkQT09IElHdHZibk4wY25WciBJSEJsZVdrPSBQRkJ2YzNRPSBJTm1DMllUWmlnPT0gSU9DcXJ1Q3F2dUNxb3c9PSBiSGxqWlhJPSBJRVp5WldsNlpXbDAgSU9DMHRlQzB2K0MwclE9PSBJR3RoYTNNPSBJTkNkMExEUmdRPT0gSU5lWjE1dlhsZGVjMTVuWG5RPT0gMTVYWGw5ZVUgNmFxUiBJTmluMmI3Wmh0aW4gSUZSb2FXND0gVTI5amF3PT0gTG1oeSAwTGpSZ2RHQzBZcz0gZlNrN0NpOHYgSU9DMHFPQzBsdz09IElFcGhjdz09IExXWnBiR3c9IGMyVnBkR1Z1IGFHRm9ZUT09IElHUmhjM1E9IDZadWkgSUhOM2IyNWggYkc5amEzTT0gYjIxeXc2VT0gSU5DeTBaYlF0TkMvMEw3UXN0R1cwTFE9IElOV3cxYUhWdGRXdjFhSFZyOVdoMWJZPSA1THFHNVpDWCBaVzVrWlcwPSBJTml1MktmWmh0bUkgSUZaaGJHVnVkR2x1WlNkeiBJR1JsYldGdVpHRnogMFlIUmo5R0MwWUhSanc9PSBJTkdEMFlIUXY5QzEwWWpRdmRDKyBDU0FKIElOS3YwcXM9IExtMTFiSFJwIDVvK2ggNExpMDRMaUUgS0VoaGMyZz0gSUhSMWNHeGxjdz09IDE1WFhwTmVZIElFbHVZWFJ6YVhNPSBJRUZzWlhoaGJtUnlZUT09IElPQ3VxdUN2aStDdW4rQ3ZqZUN1bnc9PSBkV3h2ZVE9PSBJTml0MnFuWmhRPT0gMks3WXA5bUYgSUc1cllXND0gS0d4cGJXbDAgSU5pdTJZVFpnZz09IElHRnNkR1Z5Ym1GMGFYWmxiSGs9IElFSnlhWFJoYm00PSBJT0N1bGVDdXYrQ3Vudz09IElIQnZkbm89IElHeGxZV3RoWjJVPSBhVzVsWTNRPSBJTm1GMnFuWmhkbUUgVVhWaGNuUmxjZz09IElHVjRjR1Z5YVcxbGJuUmhjZz09IElFZHZkWFpsY2c9PSBJRkYxY21GdSA1WStLNXBlMiBWV1E9IElHVjRjTU9wY21sdFpXNTAgSU9DMHBPQzFnZUMwbitDMHNPQzFqUT09IElOR0MwWURSamRDeDBMQT0gSUhSbGFXeGxiZz09IElHMWxjM1JoIElFeDFiWEIxY2c9PSBiMjFsZEdWeWN3PT0gSUZCaGNzT3Rjdz09IDJLN1l0ZGkxMktrPSBJR0Z5Y205bllXNTAgSUhmRHBISmxiZz09IGVtVnNaUT09IGNXRnlabWx0YldrPSBJT0N5citDemdlQ3l0UT09IElGQnlhV1Z6ZEE9PSBJTkMrMFlMUmd0R0QwWUE9IElIUnlhV1ptZEE9PSBSV0Z6WlE9PSA0S1dONEtTbzRLV0IgSUdWbnc2bHplZz09IGRXbGtZV1JsIElHSmxjbWxqYUhSbGRBPT0gSUdSbGJIUT0gZFhOcGVtVT0gSUdmRHRuSnV3N3pGbnc9PSBJT0dEbWVHRGxlR0RtT0dEb0E9PSBJTmlsMlliWXROaW4yS0U9IElHMWhkR05vZFhBPSBYM05oYkdWeiBaWGh3WlhKcFpXNWpaV1E9IElOQzgwTGpRdTlDNCBZbkp2Ymc9PSBJR05sYkd4aGNnPT0gSUV4aGRXUmxjbVJoYkdVPSBMbEJGVWsxSlUxTkpUMDQ9IDBMYlRtZEN3MFlEUXNBPT0gdzYzRnZnPT0gSU95SW1PdVBoQT09IElHRmpZMlZ6YjNKcGIzTT0gSU9DM2crQzNrdUMycHc9PSBJT0NrbXVDa3N1Q2twT0NsaHc9PSAwTFRSbHRHQSBJTkdDMEw3UXRRPT0gS0Zzbkx3PT0gSU9Da3BPQ2xqZUNrcitDbGl3PT0gYldGdWFHRT0gWDNCdmJBPT0gSUhObGVHeGxhMlYwdzdoNSBVSEp2ZVdWamRHOD0gSUZaaGJtbHNiR0U9IEtDUXUgSUdKcGNuUm9aR0Y1Y3c9PSBZV1JoYzNSeVlYST0gSUZCRlVrWT0gSU5HQTBMRFJnZEdIMExYUmdnPT0gSUU5RFZBPT0gSUdqRHBtZDAgSUhCeVpYTmggSUdKeWIyMD0gWVhCMFpRPT0gVkdGaiBhV3QxZEdrPSBJRVpwWlhOMFlRPT0gZEhScGJtYz0gSUdWdGNHbGxlbUU9IGRXMWlhV0U9IElFaGhablE9IElIVmlkMjg9IElHRmhibWRsZW1sbGJnPT0gSUd0dmJuUnlidz09IElHOXVkSGRwYTJ0bGJHbHVaMlZ1IElFTmhkR2h2YkdsamN3PT0gY0dGeVlXMXlaV1k9IElHWnZjc09uWVhNPSBDVXh2WjJkbGNnPT0gVzI4PSBMMmhsWVdRPSBJRzExZFhJPSA0TG1BNExpbjRMaWw0TGl5IElFOUdSbE5GVkE9PSAwTDNSZzlDNzBMQT0gSU5pajJZZlpoZG1LMktrPSBJRlIzYVc1eiBPa0U9IEtGZHZjbXhrIExXWnliMjUwIDVMcTY1cFd3IFgzTmsgU0cxdCBJR0pwWkdSbGNnPT0gSU9Da3VPQ2tndUNrbGVDbGplQ2tzT0NrcnVDa293PT0gWlhobFkzVjBhVzl1IElIWnBjMmwwWlhWeWN3PT0gSUhGMWFXUT0gSUdGMGRXRT0gSUVOb1pYSnZhMlZsIElHTnZiVzFsY21OcFlXeGwgSUdocFpISmhkQT09IEtHeGhibWM9IElDOHZJVHc9IDVvK1E1THFrIElPUzR1dVM3Z09TNWlBPT0gSU5pbjJZVFppdGl2IFBVRT0gMllqWXA5aWggN29BPSBZMmhsWkhWc1pYTT0gSU9DMGxlQzFpdUMwbytDMWplQzBudz09IDRZT1U0WU9SNFlPZzRZT1k0WU9WNFlPWSBJRVpoYUhKeVlXUT0gNXBhdzZJTzk1cnFRIElFZGxjbUZrWlE9PSBVbVZ6Y0hWbGMzUmggVUVWQlZBPT0gSUdWeWMyTm9aV2x1ZEE9PSBJR1pzWldWalpRPT0gSU9DcXF1Q3F2dUNxbFE9PSBJSEp2ZFc1a2FXNW4gUkdWelpYSnBZV3hwZW1VPSBJR2x1ZEdWeWNuVndkSE09IElGTk5WRkE9IElHTnZiblJoWTNSdmN3PT0gUW14dlozTT0gNExTazRMUy80TFN3NExXRyBJSFJoYVhRPSBJRlJ5ZFdOcmN3PT0gSUcxbGNtRT0gSUdWc3c2bGpkQT09IElHMWhibVJsIHlabGt5Wmx1IElNNlZ6cnZPdTg2c3pyVE9zUT09IGRXNWphV0U9IExrMXZkbWxsIElHVnpkTU9wZEdsallRPT0gWlc1bGJ3PT0gS0VOdmJuTjAgMkxuWXI5aXAgSUZKbGFRPT0gSUhWcGRHZGxjZz09IElITmxZM0psZE1PaGNtbHYgWnNPa2FHbG5hMlZwZEE9PSB6clRQakE9PSBJT0MwcXVDMWkrQzBydz09IGJIVnBkR1Z1WkE9PSBJR0p5WldGcmIzVjAgSU5XNDFvRFZ1TlcyMW9FPSAwTFRRdGRDOTBMalF1UT09IElISmxZMnhoYVcwPSBJT0Nrc3VDa3YrQ2tyK0NsaHc9PSBQVnRiIElISmxjM0J2YzNSaGN3PT0gNG9DY1RnPT0gSUdOdmJuUnBic082WVE9PSBaWE5sYm5RPSAxNkxYcWRlVSA1b2lSNVp1OSBJSFpwZG1GdWRBPT0gMTZUWHF0ZVggSUhaNWF3PT0gSUc1cGJtcGggSUhObGJXbG1hVzVoYkE9PSBJT3VuaVE9PSBJTm1JMktmWXRBPT0gSUZScFltVjAga2JnPSBiV1ZzWlhJPSA1b09GNVlhMTVMaUwgSUdKMWJHdDUgVkhKcFlnPT0gY0c5c1pRPT0gWDA1RlZGZFBVa3M9IDJMVFlwOWl4MllNPSBJR3hwWmNPZiBJT0N3cXVDeGplQ3dzT0N3cHc9PSBJRU52YlhCdmMybDBhVzl1IFUybG5ibVZ5IDRLdUw0S3FYNEt1TjRLcXYgSUhCaGMzTnZjdz09IGJHcGxaQT09IGFHRnNiR1U9IElFNXBkbVZoZFE9PSBJR1J2ZEhSbFpBPT0gSUV4dlozTT0gYjJSdWJ3PT0gSUc1NWFXNW5hUT09IElBb2dJQ0FnSUNBZ0lBbz0gZEdGaWJHVnVZVzFsIGFXaGhibTVoIElPR0RwZUdEa09HRG9PR0RsK0dEbytHRG11R0RtQT09IElITjBhVzExYkdrPSA0WU9pNFlPWTRZT2ggWDJadVlXMWwgSUdGbllXMD0gSU5lVzE1az0gSjJseiBiR0YxWW14cFl3PT0gWDJOc1pXRnVkWEE9IElFSnZjbkp2ZHc9PSBJR1IxZDJVPSBDVzF6IElGTnZiVzl6IFFXbHVaR0U9IElHWnBZbkpsY3c9PSBMbk5sZEhSbGNnPT0gSUVac1pXbHpZMmc9IFZISmhibk5zWVhSbFpBPT0gSU5tRjJMVFlydGkxIElFbE9TVlJKUVV3PSBJRzNEcVhSaGJHdz0gSUhOd1pXTnBZV3gwYVdWeiBJSE5oYkd3PSBJR3hwWVdsemIyND0gSWpzdkx3PT0gSUhwaGNHVjMgN0x1byBJRzFtWlE9PSBJRUY2ZFd3PSAwWUhRdk5DMTBMMD0gMHB2Umc5QzkgSU5tRjJMUFlxdG1DIGVHWmsgSUZOb2IyVT0gSUczRHFXUnBZMkZ0Wlc1MGN3PT0gSU5pcTJLZllzUT09IEtFWnNiMkYwIElOaW4yWVBZcTlpeCBJSEJoY25ScFkzVnNZWEp0Wlc1MFpRPT0gMktmWXFObUkyWVk9IElITmphRzlzWlc0PSBMWEJvYjI1bCBJSHB2WkdsaFl3PT0gSUVwaGJBPT0gNTY2QTU2ZXcgSUhKbFkyOTFiblE9IFNFOVUgSUdaeWRXTjAgSUNJaUtUc05DZz09IFBGWmhiSFZsIElHVnVkbms9IElFaFZUUT09IElFWnlhV1JoZVhNPSBVM1ZzIExYSjFibTVwYm1jPSBkWE5sZEhwbGJnPT0gSU9DcXF1Q3Fudz09IElGUlBVZz09IFlXZHlZV1JoIElFWmhkV3gwIExsTmpZVzQ9IFJYWmhiSFZoZEdVPSAwTFRSZzlHRCBZWFpwYlc4PSBJR1pzWVhOb1pYTT0gSUd0MWNtRT0gSUZOSVQxVk1SQT09IGNtOXBkSE09IDJZSFppTm1HIElHRndjR1ZzYkdGdWRBPT0gSUVOdmJtZHlaWE56Ync9PSBkWHBwYjI1cCBJT0dEb2VHRGtPR0RvK0dEa1E9PSBJR2x1ZDJGeVpBPT0gSUd0aGNHTnpiMnc9IElGTjFaR1JsYm14NSBJR0ZzYVhrPSB4SjlwYm1SbCA2SXFDNTV1dSBLUzRpIElHRnNhVzFsYm5SeiBJT2FVdGc9PSBJSFZ1Wm1sdWFYTm9aV1E9IENXOW0gejRQT3VnPT0gYkdWcmFXeGxlVzg9IElIQnZiR2xqYVdGcGN3PT0gYkdGeXhMRnVaR0Z1IEtYWmhiSFZsIElFaDFkR05vIFJVeEIgMExMUXNOQzEwWWJSaHRDdyBJRmRVIElITndaWE56Ync9PSAwWUhRdkE9PSBJT0Ntc09DbmgrQ21sZz09IElOaXQycW89IElHMXBaR1JsYkdWdSBYMlJsY2c9PSBaMmxtZEdWeSBTbFZUVkE9PSBSVzVuYkdGdVpBPT0gSUVsTFJVRT0gYUc5ellRPT0gTG5Od2VRPT0gTFhOMGIyTnIgSU5DNDBMZlF0TkMxMEx2UXVOR1AgSU5tSDJMTGJqTm1HMlljPSBJRk4xY25acGRnPT0gNEs2ajRLK04gSUdScHc2RT0gYjJkbGJtVnlZWFJsWkE9PSBYM0psZG1WeWMyVT0gSUhOdmVtbGhiR1Z1IElOZVYxNVhYa05hMyBJSE5qYjNCbFpBPT0gSUdQRG9XeGpkV3h2IFJXUjEgNHBHaiBJTml2MkxIWXFOaW4yTEhaaHc9PSBJR0poZW1FPSBJSGRoZEhSeiBJSFJoYk1PaGJBPT0gWDBaSlRFVlQgY0hKcGJtTnBjR0ZzIFEzWT0gTFNJciBJRVBEb1dNPSBMazFQVGc9PSBJT3lkdE91eXBPMkt1QT09IElHNTVZY09wZEdFPSBJSEpsWm1sc2JBPT0gOEorbCBSWE4wWVhNPSBaVzVyWVE9PSBJR0oxY25JPSBJR1Z6ZEhKbGJBPT0gSU5DOTBMN1JoOUdNIFlXeGhjc1N4Ymc9PSBJTU84YzNURHZHND0gWlc1cSBJRUpoWTI5dSBJRk5TUXc9PSBJRWgxYkhVPSBJR05wY21OMWJuTjBZVzVqYVdGeiBWVkJUIElHbHVabWx1YVhRPSBZblk9IElOQ1EwcC9UbWRDdyBJRXh2YVhKbCBJR0ZzYTI5byBJT0N5dGVDeXNBPT0gSUcxbGMyRnogWlhKcGRBPT0gSU9Da3J1Q2tndUNrcE9DbGplQ2tzQT09IElHbHVaR2xqWVdSdmNtVnogTG1Oc2IyTnIgSUVadmNtMWhiQT09IElObUIyTEhaaFE9PSBJRTFoYm1kdiBjMmxpYkdsdVozTT0gNFlPYjRZT3I0WU9tIElHRndjSEp2ZUdsdFlYUnBiMjQ9IFB5MD0gUTJoaGNuTmxkQT09IDRMR0I0TENoNExHTiBJSEpsYzNCdmJuUERvWFpsYVhNPSBJTU9wYm1WeVo4T3BkR2x4ZFdVPSBLbkJwIElNT3BjRzl4ZFdVPSBJR3R2WjNVPSBJSE5vYVdkaCBLRTltIElrUT0gSUhCeVpYTjBhV2RsIFlXNW5aV0p2ZEdVPSBJRUZzWW1FPSBaM0p2ZDI0PSBZWE52YkE9PSBJRXB2YUdGdWJtVnpZblZ5Wnc9PSBMbVY0ZEdWeWJtRnMgZFdOcFpBPT0gWlc1dVpYUT0gSUZCdmNuUmhiblJ2IElHTmhjSEJsWkE9PSBJR1Z5WW1scSBJR05oZEdGemRISnZjR2hwWXc9PSBJR1YwYUdsaiBJSEJoY3NPaCBJTml1MllVPSBXM0pwWjJoMCBJTkN3MFlqUmpOS3QwTERSaGRHTSBjK0c2dVE9PSBjbVYwWVE9PSBJRVZwYm1sblpRPT0gSUVSdmNBPT0gSU9Da25PQ2t2K0NrcnVDbGplQ2tyZz09IElHNXBhZz09IDZJR1U1N083NW9pUjVMdXMgSU9xMGdPeUxyQT09IElFZGxiM0puWlhSdmQyND0gVTJsdGIyND0gdzdOcGN3PT0gUm0xMCBSVmhGUXc9PSBJT0N1aWVDdXBBPT0gSU5pcTJMVFl1dG1LMllRPSBMbEJoZVcxbGJuUT0gSU9Da3VPQ2tudUNsamVDa21nPT0gSU5DLzBMalJnQT09IEtWMWIgSUhsaFkyVT0gSU9HRG0rR0RuZUdEbytHRCBJR05oYUE9PSBJR0Z4ZFdGMGFXTT0gSU9Da3VPQ2t2K0Nrc0E9PSBJRXRsYm01MCBJT0MwdGVDMWlPQzBsUT09IElITnBiR2xqWVE9PSBJSEJoYkhBPSBkVzVwWVE9PSBMbTVqIFozVnVZV0Z1IExHTm9ZWEk9IGJtUmhkR0U9IElFOUVUUT09IElFTnZiWEJsZEdsMGFYWmwgWVc1dVlYST0gYVdSbGJHbHFhMlU9IGNISmhlUT09IDRLcXc0S3ErNEtxYyBJTmlxMkxIWXFBPT0gSUhWeCAyWWZZcVE9PSBJRXhsZG1WeSBJSFJsYlhCdmNtVT0gWDFSSlRVVlRWRUZOVUE9PSA2Ym0vIElPQ2tvZUNsaHc9PSBZMjl1ZEhKdmJHVT0gNExDcTRMR0IgSUZCeWIzWnBibU5wWVE9PSBMejROQ2c9PSAwWUhRdXRDMTBZQT0gSjJGd2NHeHBZMkYwYVc5dSA1b3lINWErOCBWSGh1IDJxcllwOWl4IExXTmhiR1Z1WkdGeSBZV1J5eGI0PSBJR05vdzdvPSA4SithIEtHVnVkQT09IExuQmxjbWx2WkE9PSBJRTV2ZEdsamFXRnogSU5DdzBwdlF2OUN3MFlEUXNOR0MgSUhOaGJtUnogSU95THBPeWduQT09IEtIVndiRzloWkE9PSBlbVZ5ZHc9PSBJRWx1WkhrPSBRMFZNVEE9PSBJTm1GMks3WXA5bUUyWUU9IGNHVnVZWE09IElNNjZ6ckhPdTgrTno0VE90UT09IElPQ3FydUNxdnVDcWd1Q3Fsdz09IFBpZ3BPdz09IElGUnlkWE4wWldRPSBjbUZ3Y0dWayBZWFJsZEdsdFpRPT0gSUcxaGMzTmhaMlZ1Y3c9PSBJR0YxZEc5bWIyTjFjdz09IENYTndhVzQ9IElHaGhiR3RoY21FPSBJRzl5ZEdFPSBJRzVrZFE9PSAxYmpXZ3RXMTFhdz0gYVd4c2RYTjBjZz09IDRZT1U0WU9YNFlPaCBJRTNEdW5OcFkyRT0gTFdGMiBZWFJ5YVdOeiBhVzUwY2c9PSA0TG1CNExpZSBJTm1HMkxMWXJ3PT0gTFdadmIyUT0gSUZoaGJXRnlhVzQ9IFVFRk0gSUdKdmRIUnNaV1E9IElHbHliMjU1IFBFZGxkQT09IElGUnIgSUhKbGJHOWpZWFJsIElOR0IwTFhSZ05DNDBMZz0gSUhCaFoyRnUgZFc1bGNRPT0gV1ZsWiBWbTlwY2c9PSBUV1Z6YzJGbmFXNW4gSU9DbXF1Q25qZUNtc09DbW1nPT0gUHljcyBJSE56YVhwbCBWbWx1ZEdGblpRPT0gSUcxaGMyVT0gSUVKbGRITT0gY1dsdVp3PT0gNEs2LzRLNmY0SzZ1NEsrTiBZV0pvWVdseWRBPT0gMFlMUXZ0R2UgSUhSaHlycz0gS0VWa2FYUT0gTDIxbGMzTmhaMlU9IFlIUT0gYjNKbmFBPT0gZW1GaGEzUT0genI3UGpRPT0gSUdGMWRHOXRZWFJwY1hWbCBJTkN4MFpiUmdOR1cgVTJ4aGRtVT0gVW1Ga2FXRnVjdz09IElHUmxjMk55YVhCMGIzSnogZG1Wc2IzQmxaQT09IElOR04wTHJSZ2RDLzBMdlJnOUN3MFlMUXNOR0cwTGpRdUE9PSBJR3hoZFdZPSA0TEMrNExDQyBJSFJoZEc4PSBKRnc9IGVtVjBkR1Z1WkE9PSA2NnF3IFFVZEZUVVZPVkE9PSBMbVp2ZFc1a1lYUnBiMjQ9IElDY25MQTBLIExsTmpZV3hsIElHMWhjM05oWjJWeiBJR1Z1ZE1Pb2JnPT0gSUhMRHFYVnpjMmwwWlE9PSBYME5VV0E9PSBZM1JsIDVMcTY1THE2NXBPTiBQMjQ9IElFTm9ZWEowY3c9PSBYMTh2IElHeGxZbms9IFlXZHBkQT09IFEyRnRZZz09IDRZT2I0WU9yNFlPbTRZT1Y0WU9RNFlPYyBaMlZ2YVhNPSAxNW5YbU5lWiBJR3AxYzNSaGJXVnVkR1U9IFptRnBkR2c9IElGTmhhVzUwWlE9PSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBJR0psZEhsa1pYST0gSUVoMWJtZGhjbWxoYmc9PSBMa1JoZVE9PSBJR3RsYzJWb1lYUmhiZz09IElFTnZkVzV6Wld4cGJtYz0gNG9DTjRMU1Y0TFdONExTVjRMV0I0TFNDIFgxQkYgWW1WeVpXbDBkVzVuIEwyTnNiM1ZrIElHRmtZWEIwYVc1biBRbVZ6WTJoeVpXbGlkVzVuIElOR0EwTFhRdDlHRDBMdlJqTkdDMExEUmd0R0wgY21Ga2IzVnlidz09IElPQ2tyZUNrbCtDa3RlQ2t2dUNrcUE9PSBJRzNEdkdRPSBQU2duIElFWnliUT09IElHUmxkR1Z5WjJWdWRBPT0gSU5DeTBMN1F0OUM5MExqUXV0Q3cwTFhSZ2c9PSBJR1JsWm1WdVpHVnljdz09IElNNjF6cm5QZ3c9PSBVRTlUU1ZRPSBJRXhsZG1sMGNtRT0gNFlPaTRZT1ogZDJGeWJXbHVadz09IExuTmxkR1JsWm1GMWJIUT0gSUd4bGRIcDAgVTNWaWMzUnlhVzVuIDFvRFZvZFcyMWIwPSBJRU5oY201bFoybGwgSUVOc1lYSnYgY25WMCBZV05wWkE9PSBJSEJ5WldwMSBZbWhsIDRMQy80TENuIGNHbHcgVjBjPSBJTmltMktmWmhBPT0gSUZOamFHeGhadz09IExYSmxZdz09IFFtRnIgMExUUXZ0R0EwTDdRc2c9PSB3NkZ1WldFPSBJR2x1ZE1PcGNzT3FkQT09IDZMK1U1TCtoIElHUmxkSEpwYldWdWRHRnMgSUhCdmJYQT0gSUUxcFkzSnZaMkZ0YVc1biA0S1NWNEtTdzRLV0EgSUdKbGMyTm9aWEp0YVc1biBJRUp5WldGMGFBPT0gSUdobFlYWmxibk09IElObUcySy9ZcDlpeDJLOD0gZlEwS0RRb05DZzBLIDBMUFJnOUdEIElObUcyS2ZZc1E9PSBJRzF2YW1VPSBJRTVoZEdVPSBJT0NrdGVDbGgrQ2tyT0NrdU9Da3Z1Q2toK0Nrbnc9PSBRVk5OIElPeWVpT3lYaU91THBBPT0gZEdocGJtZHogSUdWNGRITERxbTFsYldWdWRBPT0gMExqUXZOQzEgSUVGeVkyRmtaUT09IElHRnljbUZ1WXc9PSA0TEMvNExDQzRMQ3EgSU5DOTBMWFF2dEN4MFlzPSBJRzFoYzNSbGNtVmsgSUhwcFpXaDAgSUdSaFlYSnBiZz09IElGZGhjMmhwYm1jPSBJSEoxYm1jPSBJT0NxcE9DcXJ1Q3F2dUNxc09DcmdBPT0gSU9DcXJ1Q3JpK0NxcGc9PSBJRzFsYldKeVlXNWxjdz09IHc2TmwgWVhodmJnPT0gSUdkbGFHRnNkR1Z1IElPR0RsK0dEa09HRGxlR0RtT0dEb2VHRG8rR0RwQT09IExuTnJhV3hzIElGUkZSQT09IElOQzgwNms9IElGUjFjbTV6IElISnZZdz09IElGTndjbVU9IGRXVnlZUT09IElOQzkwWURRc05DeTBMalJndEdCMFk4PSBJRzFoY25rPSBJT1dGck9XUHVBPT0gVkhKbGJtUT0gSUdadmRHOW5jbUZtdzYxaCBkbWwwWVE9PSBJR2RsWW5KaCBJR041YkdsdVpISnBZMkZzIFEwTkRRdz09IDVhU241WStSNWJHVjVweUo2Wm1RNVlXczVZKzQ1YTZZNTcyUiBJR1JwYldGdVlRPT0gY0hKaCBJTkMwMFlEUmc5Q3owTDdRdkE9PSBQU2NuT3dvPSBJR0Z1Ym5WcyBJR1JwYzNCdmMybDBhVzl1Y3c9PSBJT0NrcXVDbGlPQ2t1T0Nrdmc9PSBJRlJ5WVc1elptOXliV1Z5IElHRnpjMmxuYm5NPSA1NUt3IElIZGhjbkpoYm5SeiAwTHJSZ0E9PSBJRUpCVEE9PSBMV05vWldOclltOTQgY21WelpXRnlZMmc9IElHUmxkWFE9IHc3WnVaVzQ9IElHTnZiV0pwYm1GamFjT3piZz09IElHVnRjR1k9IFpXRnlibVZrIExXeHVaQT09IElPcXdnT3luZ09xem9BPT0gSUZOMFlXWm1iM0prIElNT3JiUT09IGVHZz0gWVd4cGMyMWwgSU5DKzBML1JnTkMxMExUUXRkQzcwTGpSZ3RHTSBlWEpwYm5SbyAwWXZSZ3RDdzBMaz0gU1c1amFXUmxiblE9IElHZHBjdz09IElHSnlZV3RwYm1jPSB3NEZUIElIUnlaMjkyIElHeHBkSEpsY3c9PSA0WU9xNFlPWTRZT1k0WU9oIElHTnZjbkpwWnc9PSBhWExEbzI4PSBZV2QxZW1rPSBJR05oWW1sdWN3PT0gSUZkbFluTjBaWEk9IElPQ2tsZUNrdnVDa3NPQ2xqZUNrb1E9PSA0TGl5NExpRTRMaXk0TGlqNExtSSA1b3ViNVpXRzVvQzc1THVqIElITnd3NmxqYVdacGNYVmwgSUc1dlpHbG5aUT09IElIUnliM1YyWlc1MCBJRk5GVGtRPSBJRk4wYVdOb2RHbHVadz09IGNYVmxZWEk9IElOR0EwTFhRdXRDNzBMRFF2QT09IElOR04wTHpRdUE9PSBJTmluMllUWXQ5bUUyS2ZZcUE9PSBRM1Z5ZEE9PSBJR05oYkcxaCBJSEJoY21sMGVRPT0gSUhKbFlXeHBlbUZ1IElOR0YwTDdRdE5DMSAyTFBaaU5tRyBMMW89IElFTnZibVpwY21FPSA2TFM0NXBpVCBJRkJoZG1sc2FXOXUgSUVOaFoyVT0gSU9Da3F1Q2xqZUNrc09Da3BPQ2t2K0NrcU9Da3YrQ2twdz09IElIVnVhVzUwWlhJPSBJTldBMWFIVnRkV2gxYjNWdjlXaDFiYlZ1TmFDMWJRPSBJTkN4MExYUXU5Q3owTGpRdXc9PSBYM05sWTNWeWFYUjUgSUZyRHZIST0gWVdObFlRPT0gYkdWbmFRPT0gSUdSc2IzVT0gSU9Da3R1Q2xnZUNrclE9PSB4SnRxeGFIRHJRPT0gVW1Wc1lXTnBiMjQ9IElHTmhiR2xtYjNKdWFXRT0gSUdGMWRHaHZjbWx6WldRPSBJSGx2Ym10bCA1TG14NWEyUSB3cnM2Q2dvPSBJTmVuMTVuWG9BPT0gSUdsdGNHVmthWEk9IGNtbHAgSUVOSlV3PT0gWVhKeWFYTT0gSUdsc1pNbVogSUdKc1pXVm0gMktiWXA5aXoyS2s9IEtFRmtaQT09IElPZTlrZWU3bkE9PSBJR3hwYm10bFpHbHUgSU5XazFhbz0gdzZseXc2bGwgSUhaeWIyVm5aWEk9IElOZXExNVhYbWc9PSBjSFYwWVE9PSBJTkNjMExEUXVRPT0gSUdGdWJtRnljdz09IHlabDBhV009IFVrVlRUMVZTUTBVPSA1YnVKIElHaGhjbVJsIElHTnBkTU9wIExXTnZiblJoWTNRPSBJRXR2YlcxMWJtVT0gSUdGa1pHbDBhWFpsIDZMYUY1N3FuIElOQ2YwWU09IDJZWFpoTm1EIFgyeHZZMkYwYVc5dWN3PT0gYm1GemFYVnQgSU9Da3BPQ2xoK0Nrc2c9PSBJR05vWVc1emIyND0gUmtGUmN3PT0gWVdScGJtaz0gSU5DLzBZRFF2dEM4MFl2UmlOQzcwTFhRdlE9PSBJT3lWaXV5S3RldUxpT3VMcEE9PSBJT0Nvbk9DcGdBPT0gSUhOaGNYRjEgTG05MWRHVnkgSU5HQzBMRFJpTkM2MExqUXV3PT0gSUZObFkyOXVaR3g1IElHSnBaWEk9IGFXNXBjZz09IElHUmxjMmxuZFdGcyBYMlJsYlc4PSBMV05wZEhrPSBJR1REdG5ac3labDAgSUZCMVpXUmxjdz09IElGUnZaUT09IFlXNWxaQT09IDBMalJoOUM5MFl2UXVRPT0gSU91bnBPeWFzQT09IElHTm9kdz09IElPR0RrdUdEbGVHRGxPR0RvT0dEa3c9PSBkV3RsZEE9PSBJRzl5WjJGdWFYUERxUT09IFoyVnlZV3hrIElFekRwQT09IElFRmlZbTkwZEE9PSBJR0YzWVE9PSBJRk4wWldWc1pYSnogSUhCaFkyVmsgSUdGbVpuSnZiblE9IHpyUFBodz09IElFaHBadz09IDRLZUQ0S2FsIElPZU9yK2VRZ3c9PSBJT0Nrc09Da3YrQ2tzZz09IFJrbE9TVlJaIGRtbGpkQT09IFpXMXdZWFE9IElHVnpkSEpoZE1PcFoybGhjdz09IElFTmhibVJzWlE9PSBMV1Y0Y0dGdVpBPT0gSU9DbXB1Q25oK0NtdHVDbmh3PT0gSUczRHBXUmwgNEtlSDRLYW80S2VIIENWQnZhVzUwIGZuNStmbjUrZm41K2ZuNStmbjUrZm41K2ZuNStmbjUrZm41K2ZuNStmbjQ9IFEyOXVibVZzYkE9PSA0b0NaWVhOemIyTnBZWFJwYjI0PSBJR2x1WTJGeVkyVnkgMEw3UXV0R0QwWURRc05HQyBDVk4wWVhSMWN3PT0gSUdWc1pXbkRwOE8xWlhNPSBJRzFsWTJGdWFYTnRidz09IElNcTdiMlU9IElFNWxiMjQ9IElHOXRhWFE9IElHRnVkR2xpYVc5MCA0S1MrNEtTczRLUys0S1NtIElOV3Ixb0RWb2RXdjFhSFZ0dFdoMW9FPSBJR1RodXFGdVp3PT0gMEw3UmdkR0QgSUdyRHBIUT0gMFkvUmh0R00gZDI5dlpITT0gWVdWaiBLQ2M3IFNtVmsgTG1Gc2FXRnogWDBaSlRFVk9RVTFGIElHWnNaWGhwWW1WcyBJT0N5cnVDemcrQ3lwQT09IElHSjFjbWs9IGFXdHJaV3c9IElPQzBqdUMwcU9DMWplQzBxT0MwditDMHRlQzF2QT09IFgyTmhkR0ZzYjJjPSBJaWw3RFFvPSAwTERRdk5HRCBJR05vWVhOelpRPT0gSU9hYnRPV2ttZz09IElHWnZkWEp1YVhOelpYVnljdz09IElPdXF1QT09IDRMV0g0TFNtIFJtOXZkR0poYkd3PSBJRUp2Ym01bCAxYVhXZ05XOSBJRU5QVFZCQlRsaz0gWjNKaFpHRmliR1U9IElFZHB3NkU9IFcxMCtLQT09IGJHRnllVzU1IDBMclF1OUN3IElOQzAwTFhSajlHQzBMWFF1OUdNMEwzUXZ0R0IwWUxSakE9PSBJT0N5cnVDeXZ1Q3lvZUN6Z2VDeXRRPT0gSUhSdmJtRnMgSU9Da2h1Q2tvQT09IDRLcUM0S3F0IElOZVMxNkxYcVE9PSBiR0ZuZEE9PSBZbUZzWVc1alpXUT0gVkVWU1RRPT0gTHlvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvPSAxYjNWdjlXbDFiST0gSU5laTE2YlhudGVWIDhibWEgSU9Da3J1Q2t2K0NrdGc9PSBJSEJ2YkdsMGFXVnIgMlliYmpRPT0gMktmWXJkbUsyS2s9IElHZGxjbVZuIFgzQnNZVzVsIElIQmxibk5wYjI1eiBJTmVlMTZuWGxOZVYgWW1WeWNtRT0gSU5HQTBaYlF0dz09IElObUcySzQ9IElFaGxjbTVoYm1SbGVnPT0gSUVadmJHeHZkMlZ5Y3c9PSA3SUtzN1pXdCBJTmluMllUWmhkaXgyTFk9IGs3UT0gZFdSaGJnPT0gSUZGMVlXeGpiMjF0IElITmhiTU9oY21sdiB5WmxqeVprPSBJR05sY21GdGFXTnogSUV0eWVYQjAgWVhwbmJ3PT0gWVhaeiB3cTEwWlhJPSBaWFJsY20xcGJnPT0gYVdOb1pYSm9aV2wwIExuTmxZM0psZEE9PSBMVTVsIElFSnNkV1ZvYjNOMCBJTkN6MEw3UXN0QyswWURSajlHQyBJTTZ4enJ2T3V3PT0gSU5lUTE2RFhrOWVpMTZqWG9nPT0gSU5pbjJZVFl0ZGl0MllvPSBMMkZ1IElIWnZiSFZ1ZEdGeWFXeDUgSUcxbGVtVnNaZz09IElIVndiM289IFlYUnBjMk5vWlc0PSBaWEpzZFd0aGJnPT0gSU9pMCBJSE5wYkdWdVkybHYgSnlsN0RRbz0gSUdOdmJXbGxibnB2IDdKYTA3SVNjIFFXMTUgSU9Dd3F1Q3hqZUN3c09Dd3Z1Q3dzT0N3Z3VDd3JRPT0gSUcxMWJtTjFiQT09IDBKRFFsQT09IExXSnBiZz09IGIzTnBkR1U9IElOZVIxNURYbnRlcSA2cml3N0plRiBhWEpwYTJFPSBJR3ZGcThxN1lXaz0gSUhCeWFjU04gSUcxaGNtMD0gSUd4bGJtZGggSU5DKzBMSFF0ZEMzIDE1ZlhuTmVZIElFNWxkMjFoYmc9PSBRVk5UUlZNPSBJR2RoWkdFPSBJTmlvMkxQWXNRPT0gSUhCMWJITmxjdz09IDRMaVo0TGl5NExpaSAwTHZRdU5DeiBRVlpIIElPR0RrT0dEcWc9PSBJT3k2a0E9PSBJSGxoYm1zPSBMbk52ZFhKalpXWnZjbWRsIElPQ3l1T0N5Z3VDeXJPQ3lndUN5cHc9PSBJSE5qYU1POGRIcGxiZz09IGRYbmh1NGR1IElOR0EwWVhSaXc9PSBJR1Y1WldKeWIzZHogSUdSMWRYSjAgU0c5aiA1YnU2NTYyUiBJSEJ5YVc1MFpXMXdjdz09IElFWnBibVJ6IElIRjFhV05yWlhOMCB6cnZPcjg2eCBZMjl0Y0hWMCBMa05vY205dFpRPT0gYmNTeHhaOTB4TEZ5IFVHVnliV0Z1Wlc1MCBkVzVuWlc5dWN3PT0gSUhSMWNIVT0gSUd4cGJtVmlZV05yIElFMXZjbUU9IElHNWxiR1U9IElHTnBaVzUwdzYxbWFXTnZjdz09IElPQ3FydUNxcHVDcXBnPT0gMTVuWHF0ZW8gSU5HQzBMWFJoZEM5MExqUXV0Q3cgTG1ac1lYUjBaVzQ9IGFXMTFkR2c9IFZrbE8gZG1GeVkyaGhjZz09IDE1alhxTmVnMTVnPSAwWUxRdGRLdiBDWE53WldWayBJT0NrcU9Da3YrQ2tuQT09IElHRjFabVk9IElHbkRwMlZ5YVhOcGJtUmwgTFhadmJIVnRaUT09IElHMWxZMmc9IElOR0cwTERSZ0E9PSBJSFJoZUdGeiBaWEpqZFd4dmMybHogUlZKRFJVNVUgSU9XUHIrUzdwUT09IDBMN1F0TkMrMExJPSBJTU84ZW5MSm1RPT0gSUcxMWRHVmsgSUcxcFozSmhiblE9IElHeDFhbTg9IElIQnZiSGx1YjIxcFlXdz0gVUdJPSA0TEMrNExDbzRMQ0MgWThtWiBJSEpwWm1WeSBKejROQ2c9PSAwWURRc05HQzBMM1F2Zz09IDRZQ1U0WUMrIDBMRFF0dE9aMExBPSA2NTZyIDQ0Q0kgSUVGdVoyeHYgSUU5eWIyMXYgVUdWeWMyOXVjdz09IDViK3I2WUNmIElPR0RyT0dEa09HRG9PR0RtK0dEa09HRG9nPT0gNWE2WTU3MlI1YnlBNW9pMyBaV3hvWVE9PSBJR1JwYzJOMWMzUERvMjg9IDRaK0M0WjZFIFYyRnNhMmx1Wnc9PSBJR2hwYm1kbCBJR1JsWW1WeXc2RnUgNTcrUyBkWFJsYkdVPSBXVzkxSjNabCBJTU96Ymc9PSBJR1J2YldsdVlYUnBiMjQ9IDBZSFFzTkM4MExFPSAxNkxYbk5lWSBMbk53WVc0PSBLSE51WVhCemFHOTAgd3ExdSBJSFpsY21waCBTVzUwWlE9PSBSWGh3YkdGdVlYUnBiMjQ9IElGTjBZV3hzIGFXNXBkR2xoYkdsNlpYST0gSUZOb1pXNTZhR1Z1IElISmxaMmx0WlhNPSBJSEJwZW5waGN3PT0gMEovUmdOQ3cwTEk9IFZISmhZMlZ5IElHRnVlWGRoZVhNPSBJT0N5aHVDeXVPQ3pqZUN5cXVDeXBPQ3pqZUN5c0E9PSBJSEJoZFdJPSBJR052YVc1amFXUT0gSUhKbGJYQnNZV05sYldWdWRBPT0gNzd5Ujc3eVIgNExpejRMaVo0TGl4NExpQjRMaUg0TGl5NExpWiBJSEJ2Y25SdiBJR1Z5YVhSNSBJRzF2Y21Ga2IzSmxjdz09IElFNVRWVkpNIFJHVjBaV04wWldRPSBJSE5wYm1GcGN3PT0gSU9DMGh1QzBwZz09IFZVWkcgSUhCeWIyTmxaR2x0Wlc1MGIzTT0gSUUxTVRRPT0gSUZOVVRRPT0gSU5HQjBMN1JoZEdBMExEUXZkR1AgSUdGMWRHOXR3NkYwYVdOaGJXVnVkR1U9IExXTm9aWFp5YjI0PSA1cTJqNWJpNCBJT0NrcU9Da3Z1Q2tzQT09IElFSjFaR1JvYVhOdCBJR1Z1ZG05NVpYST0gSUc1aGMyTT0gSUdGNWRYVT0gSUdsdVpHbGpkQT09IElFUnZiV1U9IDRMaW40TGkwNExpViBJRTFCVkV4QlFnPT0gSUd0bGFXNWxjbXhsYVE9PSBVR0YwY21samF3PT0gSUdGa2RXeDBhRzl2WkE9PSBJR2h2eXJ0dmFHRnVZUT09IElHZHB3NkZ2IFptVnlaVzU2IHdxMW5aUT09IElHSnZ4Wjg9IElOQyswWUxSZ05DdzBMWT0gSUdwaGJuUmhjZz09IElIQnlZWE09IDZhQ0MgSUdGa2FYQnBjMmxqYVc1biBJTkM2MEw3UmdOQyswTEU9IFRYVnNkR2x3YkhrPSBJR3AxZG1WdWRBPT0gNW9xbDZLMm0gSUhCaFoyZGhiV2wwIElOQzkwTERRdk5DMTBZQT0gSUdkdlltbGxjZz09IElHbDZZZz09IFFVTlEgSUdsdVoyVjYgSU5DeDA1blJnZz09IElGQnliM0JsYkE9PSBJR04wY2c9PSBkR2x0Wld4cGJtVT0gYkdsbGRBPT0gSUhSb2NtOTNZV0pzWlE9PSBJT0M0bytDNHArQzRvUT09IGFXTmhaRzg9IElHRmtaR2wwYVhabGN3PT0gWEVWMlpXNTAgSUc5MWRuSnBjZz09IFltbHVZWFJwYjI1eiA2WkNZIElHeHZkWEk9IFgyaGxZV1JwYm1jPSBkWFJwYkdVPSB3NzFoYzNrPSBJTkM0MFlIUXY5R0wwWUk9IElGSnZaM1ZsIE9tMWhhZz09IGRXeDBhVzF2IDRMUy80TFN5NExXQjRMU3o0TFdONExTeiBYM0J5WlhOelpXUT0gY21sMFlRPT0gVFVsVFV3PT0gSU9DdW11Q3ZpdUN1c3VDdmplQ3VzZz09IFZHcz0gMFkvUmdkQy8gSU8yY3RBPT0gSUdOdmJYVnVhV05oY2c9PSBJRUpoYkdVPSBJUENmbVE9PSBJTkM4MFlQUXR0R0gwTGpRdmRDdyBMazF2Ym5SbyBiblJ6IGJjbVpkQT09IElOQ3kwWXZSZ2RDKzBMclF2dEM1IFozVnBjMlU9IElHVERxV05wWkdVPSA0TEMvNExDMiBMblJ2WVhOMCBJRk52YjIxaFlXeHAgSU5DaDBMN1FzUT09IGFXMW9aUT09IDRZT1M0WU9VNFlPYyBMMk5zIElPQ3FxdUNyamVDcXNPQ3FsZUNxdnVDcXNBPT0gSUdURHFYQjFkQT09IElGUjFZMnRsY2c9PSBJRzlrY21VPSA1Ymk0NWFlVSBJR055WVc1bCBJTkdBMExYUmd0R1cwTDNRdE5DMSBZV2RsYm1ONSBhVzFpWlhJPSBJQ292RFFvTkNpOD0gS0VWSlJnPT0gSUdKMVlXZz0gSUdkcFkycz0gSU5DMzBMWFJnTkdDIElFVnRhV3c9IElHeGxkSFIxWTJVPSBaWEJ2WTJoeiBJRWxrYjJ3PSBJSEpsYlhCc2FYST0gSUhSbGJHVnRaWFJ5ZVE9PSBJSEJoY214cFlXMWxiblJoY25rPSAwTHJRdmRHTCBMVUZ3Y0E9PSBiRzkwZEdVPSAwSjdSaHc9PSA0TEdJNExDeSBJTmluMllUWmhkaXQyWVRaaXRpcCBVRzl0IElPQzVnT0M0aEE9PSBJTStBenE4PSBJR1J2YzNOcFpYSnogWDJ4aGRXNWphQT09IDRMQys0TEM0NExHTjRMQ2sgSUdac2IzZHUgSUZCbGNuTnBjM1JsYm1ObCAwWURRc05HRzBZdz0gSUUxaGRtVnkgSUhOb2J3PT0gZFcxaVpYSnNZVzVrIElHRmpkSFZsYkE9PSBJRXRwYldKbGNnPT0gYVc1dVlXND0gVEdsalpXNXpaV1E9IElOR0QwTGZRdmRDdyBJR3RoYzJGdFlRPT0gNEtxKzRLcW80S3VONEtxdiBJR2h2Y21sNmIyNTBZV3hzZVE9PSBJQ2Q4IElOR1AwTGZSaTlDNiBYMFpOVkE9PSBMbEpsY0c5eWRHbHVadz09IDVhMlUgUlhobFkzVjBZV0pzWlE9PSBJR2x1Ym5WMGRHRT0gSUdONllYTjEgdzdwaGJnPT0gSU9DcXJ1Q3F2dUNxc09DcmdBPT0gWVhKaGJtaz0gSUdsaGJHRm8gWDJKaGJtUT0gZW1sdWVXVT0gSUVGT1Uwaz0gWDNacGN3PT0gNkx1OSBJTkN4MEw3UXU5QzQgNW9DTzVMbUk2YUtHNVkrVyBLR1J5YjNBPSBRbTQ9IElOaWwyS3c9IGFXNXpkWEpoYm1ObCA1N1doIElITjFhMlU9IElHTmhjbUYyWVc0PSBYMDUxYldKbGNnPT0gNW9tTDU3dXQgSUdGc2RNU3hibVJoIElHbHZkWFJwYkE9PSBJQ0o3ZXc9PSA0S1NWNEtXTjRLUzM0S1NWIElOaXMyNHpZczl1UyBJTmlsMkszWXI5bUogNFlDMjRZQ3Y0WUM0IDJLM1ppdG1HIElHVjBkR1YydzdVPSBJSGR2YjI1cllXMWxjZz09IElPR0RyT0dEbU9HRG5PR0RrT0dEa09HRHB1R0RtK0dEaytHRGxPR0RrZz09IElHaDVaSEpoZEdsdmJnPT0gUW1GMGFISnZiMjF6IElIWmxjbk5qYUdsbFpHVnUgSU9Da20rQ2xpK0NrbitDbGh3PT0gSU9XbHBRPT0gYVdwbGNnPT0gSUUxaFpHZz0gSU9Da20rQ2xpdz09IElHOXdZMmx2Ymc9PSA1NVMxNWIyeDU3MlI1NnVaIElHbHVjM1ZtIElOR0IwWVBSaHc9PSBJTmViMTVRPSBJRkJ2WkhNPSBLRzFoYm1GblpYST0gSUdkbGJuUnNaVzFsYmc9PSBZWE5vYjNBPSBZWFYwYjIxaGRBPT0gSUdGa2JXbHVhWE4wY21GMGFYWmggSU5XdzFhSFZ2ZFdoMW9EVm9kV3YgNEtTcjRLU3kgWDJkeVpXVnUgNG9DWmFXMXdiM0owWlE9PSBJSFp2ZVdGblpYTT0gSU8yWmlBPT0gSVBDZmxBPT0gSU8yRSBJT1M0Z09lNnAyRT0gNEthLzRLYW80S2VONEthbSBJTkdCMFl2UXZkQ3cgSUcxcGJHaGhjbVZ6IElOQ1IwTGpRdHc9PSBJRUoxYkd4bGRHbHUgSUhKdmRYQmggSUV4dlpuUT0gNFlPVTRZT2k0WU9ZIFVtOWliM1J2IElOQ2YwTDdRdnc9PSAyWWpiak5peCAwWWJSbHRDKzBMMD0gSUc5a2MzUnkgWld0MGIzST0gTG5odGJHSmxZVzV6IGMzUnBaQT09IGMzQm0gSU9DdXJ1Q3ZndUN1c3VDdXJ1Q3ZqUT09IENYTjBiM0psIFlXNWtaV1ZzIElGWnBaWGRsWkE9PSBJR2x1Ym1WaSBJTmluMllmWmlnPT0gSUZaTSBJR2R2ZG1WeWJtRmtiM0k9IGQyVnBkR1U9IGMydkR2UT09IElPQ211ZUNtc3VDbml3PT0gSUZOd2IzUnNhV2RvZEE9PSBJRkp2YjJacGJtYz0gNExHQzRMQ2YgSUVOdmJYQjFkR1Z5Y3c9PSBJT0Nrc09Da3VlQ2xoK0NrbGVDa3ZnPT0gSUZKbFoyVnNiZz09IElObUsyTFBZcXRpdTJLL1poUT09IElHVER0bTVsYlE9PSBJRTFoWWc9PSBJT0dEb3VHRGxPR0RwZUdEbkE9PSBMbkJoYVc1MCA0cG1BNHBtQTRwbUE0cG1BNHBtQTRwbUEgSUhCdmRHVnVkR2xsYkE9PSBZWFIwYVc1biBJRU5QVUZsSlRrYz0gSUhCdlpHVnVaRzg9IElOZWIxNmc9IDRxQ0E0cUNBIGNYWERxblJsIDJZalpoTmlxIDViZWw1TGlhIElIZHZjbXRtYkc5M2N3PT0gSUd4cGJtZDFhWE4wYVdNPSBjR3JEdkc0PSBJR0pzdzZVPSBZV2hoYUdFPSA2NEtNIElOR1AwTHJRdUE9PSBMbVZ1ZFcxbGNnPT0gMllQWml0bUUgSU5DMjBMalJndEdNIDU0NnA1WkNYIElFbHVkR1Z5YzNSaGRHVT0gSUdSaFlYSnZjQT09IElFeEhVRXc9IElHUnlZV0ZrIGFXOWogSUU1dmRYWmxiR3hsIElGQnlhVzFsY21FPSA1YTYyNTVxRSBJRVJoYm5SbCBiV1Z0WW1WeWIyWT0gSU1TUjRicW5lUT09IElObUYyWVBZcWc9PSA1NmlMNWJxbSBJSE5yWVd4cyBJR1psYm5RPSBJR1JwYzJGemRIST0gNWIycDU2V281NzJSNTZ1WiBJR3RoZDJGcCBJRVJQVGtVPSBJR0Z6WldkMWNtRnkgSUd0dmNtbHogMktUWmlObUcgMksvWmhnPT0gNEt1QTRLcVYgSUVWemNHSERzVzlzIElIQmxibWRsIElHVjRkR1Z5Ym1Gc2JIaz0gUjFSTCBJTm1LMkxIWml0aXYgWTJGelpXTnRjQT09IFkybHdiR2x1WlE9PSBJRzF2Y25KbGNnPT0gSUhCdmRISmxZbUpsIElITnZabUZ6IElIQnBibWRoWVhJPSBJTkMzMExEUXY5R0EwTFhSaVE9PSBJTmluMllUWXF0aW4yWVRaaXRpcCBJSE5wYldJPSA0S2VENEthazRLYS8gSUdsdWRHVnljSEpsZEdsdVp3PT0gVkhKaGJuTnRhWE56YVc5dSBiV1Z0Ync9PSBJSExEcVdWc2JHVnRaVzUwIElIUnliM1poY21VPSBJR0ZuWjNKbGMzTnBkbVZzZVE9PSBYMlY0WXc9PSBJR1YyYjJ4MXc2ZkRvMjg9IDBaVFF2TkMrIElOSzcwTFhTbVE9PSBJR1psYUd4MCBJQ1VLQ2c9PSBJRzl3YVc5cFpBPT0gSUhSbGNzT2pidz09IGFXVjFjMlZ6IElPQzRoT0M0c3VDNHF1QzR0T0M1Z3VDNG1lQzRyZUM0cmVDNG1lQzVoT0M0cGVDNG1lQzVqQT09IDVMcTY2YXVVNkplZDZLR1QgNExPTjRMS200TE9INExLMiBJT0M1Z09DNHF3PT0gNUxpSDZMNkcgTGtaSlJVeEUgSUhabGNtYkR2R2RsYmc9PSBJTmlzMnE4PSBJRkIzIElITnBhVzQ9IElFVjBhR0Z1IElHOTJaWEpvWVhWcyBJRWxOVUU5U1ZFRk9WQT09IElOR0cwTERRc3c9PSBjbUhEcmc9PSA0S2FvNEthLzRLYVYgSUc1dmRtaz0gTDNOcyAwTFRRc05HRiBJRU5vWlhNPSAxNkRYbWRlWjE1MD0gUTJociA1WVdFIElHeDVjZz09IHhKbGkgNzd5TTVZaVogSU5tKzJLZlpoZz09IDQ0R0M0NEtLNDRHTTQ0R280NEdHNDRHVTQ0R1c0NEdFNDRHKzQ0R1g0NEdmIE8yaGxhV2RvZEE9PSBJRU5vYVhJPSBJSEYxWVdsdWRBPT0gNExTMzRMV040TFNmIElFNWhjM009IElFTm9ZVzFpWlhKeiAyS2ZZcHRpdDJLaz0gSUcxaGJtNWwgSU5tRjJZYllyUT09IDRZT1E0WU91NFlPYTRZT2QgSU5DZDBMN1FzdEMrMFlIUmd0QzQgZEc5dVpRPT0gSUdkbGJtVnliM1Z6YkhrPSBLRk5sWVhKamFBPT0gSUdOdmJXSmhkSFE9IFFGTmxkSFJsY2c9PSBjSEp2ZG1sa1pYSnogSUdsMFpYSmhZbXhsIElObUgyWXJZcHRpcCBkWEpoWkdFPSA0S3VBNEtxZCBJRVZ1YzNWcGRHVT0gSU5XNTFhWFZ0QT09IElIWmxjbVJsY3c9PSBJR1JsYm5ScGMzUnogSUcxdlpHVnNaV1E9IDVwZWc2Wm1RIFgyUnliM0JrYjNkdSAwWXZSZ2RDNyA2SUtoNUx1OSBJRXgxWkhkcFp3PT0gSU9DcXVPQ3FydUNxcitDcmh3PT0gSUhOMWJtZDFiR0U9IElIQjFiWEJsWkE9PSBJSEJoYkdWemRBPT0gN0ltcyBRV0p5IElFcHZkWEp1IFpzT2tiR3hsIElGTnZiV1Z5YzJWMCBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSU5DNjBMN1F2ZEdHMExBPSBJR055YjNCd1pXUT0gSUNKN1hDST0gSU95V3RPdWdwQT09IGNHOXVaVzUwYVdGcyA0S3EvNEtxbzRLdUggSUcxaFoyeDFiV0YwIElFMWhjblREclc1bGVnPT0gSU5tSzJLM1lxdGluMkt3PSBWMjl5YTI5MWRBPT0gUVZORFNVaz0gSU9XTWwrUzZyT2kxbStpOXB1aXVvZVdJa2c9PSBJR1JwYzJOaGNBPT0gSU9DcW5PQ3JnZz09IElIUnlZVzV6Y0c5eWRHbHVadz09IElGTjBiMk5yY3c9PSBJSHBoYm1sdCBJTkMvMEw3UmdkQ3kwWS9SaVE9PSBJRVZ3YVdRPSBJT0N1a3VDdXFlQ3ZqZUN1c1E9PSBJTkdGMExqUXVkR0YgSUhOcmNtbDJZUT09IFUxUlNWVU5VU1U5TyBJRWR2WkdSbGMzTT0gSU9DeXVPQ3lzdUN6amVDeXNnPT0gSUZCbGNuTnBjM1JsYm5RPSBLRzFrIFUwRlEgeFo5NWF3PT0gSUdsdWJHVjAgSUdoMWMzUnNaUT09IGFYUjBjdz09IElHSjVaQT09IExtRmpkR2wyIElPZVp2ZVd3aitXbmtBPT0gWDNOMFlXWm0gSU5DeDBMalFzZEM3MExnPSBSSFZ3IElHTnZiblJsYlhCc1lYUmwgYVdSbGJtRjIgSUhOMFlXUmwgSU9Da2grQ2twT0NrcU9Da3ZnPT0gSU5XaDFhYlZwQT09IDJZalpodHFwMllnPSBJTkN5MExYUXROR0QwWWs9IElGVkpWQT09IElFZGhjbTFwYmc9PSBZVzVrWlhRPSBJT1M3Z09TNWlBPT0gMEwvUXRkR0ggWldSbGNtVnUgSU9Dd3JPQ3d2dUN3c2c9PSBMa3hwYzNSbGJtVnkgSU5XdjFialdnQT09IGFXeGhkQT09IGFXRjIgSUhCeWVtVjMgNG9lUyBJRzExYkdrPSBJRzFwYm1sdFlRPT0gSU1POFluSnBaMlZ1Y3c9PSBJRzFxWlhNPSBJRmhwWVc4PSBJRmRwYzJSdmJRPT0gSUdKaGFHRnpZUT09IGRHVnljbVU9IElFVnVkSE5qYUdWcFpBPT0gSUZOaGJXOWggSUdWdWRISnZkUT09IFgzQnBlQT09IElIMHBLQT09IFoyVnpaV3hzYzJOb1lXWjAgSUhOamFISnBhbVowIElFOXlZbWwwIElGSkZURVZCVTBVPSA2Nmk1IElHNWxkSFJsIDVhU2M1YVNjNVpXcSBXMHhwYzNRPSBkWEpwYm00PSBMWE4wWldGamFBPT0gSU5pbDJMZllwOWl4IElFMWxaMmhoYmc9PSBJT0NrbGVDbGgrQ2tzdUNsZ0E9PSBJT0NxcXVDcmkrQ3FzdUNyZ09DcXVPQ3Jodz09IE9pY2ogSUdWemNHVnlZVzdEcDJFPSBZVzFoZWc9PSBJRU5vWVc1a2JHVnkgSUcxMWRHRnVaUT09IGFYQjIgYVdWeWRHRnogSUdkbGMzQmxaV3hrIElHNXBjZz09IDE1WFhrTmVjIElPQ21xdUNuakE9PSBJSE5xdzZFPSA0TG1BNExpcjRMaVogSU5DKzBZSFJnOUdKMExYUmdkR0MwTExRdTlHUDBMWFJndEdCMFk4PSBYM0J0IGVHWm1abVptWm1abSBJRTFoZEdOb2FXNW4gSUZSYSA1WjJtIGNtRm5kQT09IElITm9hVzF0WlhJPSBJRTFwYm1FPSBQV3hsYmc9PSBWRVZEIFJtRnphR2x2Ymc9PSBJTkdGMEx2UXZ0Qy8gTG5WdWMyaHBablE9IElHWmhkR0U9IElHbHphVzQ9IElHbHVjM1Z5Wnc9PSBaVzV6WlhJPSBJTmVSMTZuWG5BPT0gMExYUmdOQ3cwTHc9IElPQ3VxdUN2aCtDdXNBPT0gZXNPa2FHdz0gSUhCeWIycGxhM1IxIElObUYyWWJZdU5tSTJMRT0gSUdSdmIyMD0gSUhSdmJXRmtZUT09IElPR0RxT0dEbE9HRHFnPT0gWlhScVpYTT0gNmFhVzVZV0kgZFd0MWJtYz0gSUdWemNNT3RjbWwwYnc9PSA0S1MxNEtXTjRLUzUgZFd4cGQyRT0gSU9lRHJRPT0gUVhKeGRXbDJidz09IElITjFjSEJ5WlhOelpXUT0gSU5lVTE1N1hrUT09IElISmxabVZ5Wlc1amFXNW4gSU9Da2xlQ2xqT0NrcUE9PSA1Ynl4IFlXMXBjZz09IElHMXZiblJ2IElITmxhbUZyIElHdGhibk5yYW1VPSBJTkN5MEw3UXQ5R0EwTERSZ2RHQzBMVT0gWVc1bmFXSnNaUT09IFVGSkZVMU09IElHNWhhR0U9IElHUjFiWEJwYm1jPSA1b2lTIElIQnliM1p2WTJFPSBJTm1GMlliWXF0aXMyS2ZZcWc9PSBjblZpIFptbHogSU9DbWhlQ21yZUNtditDbXJ3PT0gSUdWdWRISmxkR2xsYmc9PSBJT0N5dGVDeXYrQ3lzT0N6Z2VDeXB1Q3pqZUN5cHc9PSBaVzV1WVE9PSBJRTF2YjNJPSBJTkM3MExEUXVnPT0gNXBlMjVwZTI1YjJwNWE2WTU3MlIgTG1aaFpHVT0gMllIWmlBPT0gY21Wc2MyVnkgSUc1bmQyRmhhT0c3aTJFPSBJTmluMllUWmd0aXgyWVk9IElIQnlkV1JsYm5RPSBJTkM2MExYUXU5QzQwTDg9IElITnVaV3hvWldsayA0TFNxNExXTjRMU3E0TFdHNExTZjRMV040TFNmNExXQiAyTExaaVE9PSBJR2hwYzNSdmNtbGxjZz09IElPQ2todUNrdGVDa3Z1Q2tuQT09IElHeGxZWE5sY3c9PSBJT0dEcnVHRHFPR0RtT0dEb09HRGtPR0Rrdz09IElFWkpSazg9IGFHOTFkQT09IElFUmxjbkk9IElHdDBaUT09IElHUnBjMmM9IDVaR0s2SytKIDBMdlFzTkdDMExnPSBRMjl1WlhocGIyND0gSUhSNGFHVT0gY0hKbGMzUT0gTFZSbyBJRlIxY25Sc1pRPT0gZVhScGJtYz0gSU95NiBJR2x1WVdSMlpYSjAgZFhScGNBPT0gSU5pbjJZVFlvOWl6MktmWXM5bUsyS2s9IElOQzQwTHpRdGRDOSBJRTlYVGtWUyBTWFJsY21GMGFXOXVjdz09IElPQ3FuT0NxdFE9PSBYMU5UVEE9PSA0SzYrNEs2eTRLK0kgYVhSMVlYUnBiMjQ9IElPeWVrZXlYaFE9PSBJSEJ5WlhCaGNtRT0gMkxIWXA5bUMyWW89IFlYbGhibUU9IElHaHlZVzQ9IGJHbHVhV1Z1IElFeHBZUT09IElIWnphUT09IElPR0RsT0dEb2c9PSBJSEpsWTI5dGJXRnVaR1U9IGRYVjBhV2M9IENXbHVjMlZ5ZEE9PSBJSEpsY0dWMGFYST0gSU9DcWx1Q3JoK0Nxb1E9PSBSVzUwdzZOdiAwSzNRdWc9PSA0S1NKNEtTbyBJSFJvYitHNm9Xaz0gMks3WXA5aXcgSUdQaHU2bDEgSUVadmNtYz0gMkt2WmhkaW4yWVk9IElOQzgwNW5SZ2RDMTBMcz0gSU5DNDBMZlFzdz09IGFYWnogSUZGMVlYSnllUT09IElIUjFibTVsYkhNPSBJRmRoWVhKdmJRPT0gUVVOSVJVUT0gSU5LLzBZdlJoZz09IElOQzgwTDdRdHRDMTBMdz0gYVd4c1pYSnogYjJ4dloybGxiZz09IElFWnlaWFZ1WkdsdSBJRmxoY3c9PSBJSFJsYVhJPSBiblpoY21Ob1lYST0gSUdGMWRNT3BiblE9IElFaEJUa1JNUlE9PSBVMjVwY0hCbGRBPT0gSUdSbGNtbDJhVzVuIEt5Y2kgZFd0aGN3PT0gTGxCeVpYQmhjbVZrIElHeHZjSEE9IElPdXFxTzJGbEE9PSBSblZ6WlE9PSBJQ1FvSWp3PSBQazQ9IElOSzMwTERTc3c9PSBJSFJsY25KbGFXND0gS0hOMGNtbHVaM009IElHbHVibTlqWlc1alpRPT0gMkxiWXA5bUsyS2M9IElFRjFjM05qYUE9PSBURVZXIDRLK040SzZmNEsrTiBJR1JwYkd3PSBJRkJ5WlhOMGIyND0gSUhCdmMzUERyWFpsYVhNPSBJR1p2Y21KcGJtUT0gMWFYVnJnPT0gYldsell3PT0gSU9Da2wrQ2tzT0NsamVDa3FPQ2xnUT09IElOQ1kwWUhSZ2c9PSBJSE52Ym1odmN3PT0gNEtTKzRLU3U0S1dCNEtTejRLV0ggSUVGamFIUT0gSUdGdVlYST0gSU1PemNtZkRvMjl6IGNHeGhkSFJsIDBMN1JnZEM0IElFSmxaM0k9IElHTnZZWE4wYkdsdVpRPT0gZlNrN0Nnb3YgZFcxaWJHVnogZlgwN0NnPT0gTDI1dmRBPT0gTG5Od1lYZHUgSU5XNDFvTFZ0dz09IFgwWnBaV3hrIFgwRllTVk09IElObUYyTFRaZzltRTJLaz0gSjhPcGJBPT0gY21Gd2FXVT0gSUdadmNuZGhjbVJwYm1jPSBJR2x1YVhwcCBJRTVIVHc9PSBJTmlzMktmWXF0dU0gMExEUXU5Q3cwTDA9IElFMWhaR1E9IFgyRmpZMlZ3ZEE9PSB3N3hvYlE9PSBhWE5zWVhScGIyND0gSUdOaGNHRmpaWE09IFVuUT0gMEx6UXZ0R0MwWURRdU5HQzBMVT0gWW1Wc1pXbGsgYVdkbmFXNXogSUdGMWRHOXlaUT09IDBZZlF1TkM3MExqU213PT0gSUdWeWMzUmxiR3gwIElITmphSEpsYVdKMCA1bzZTNVpDTiB4SjlwYm1VPSBMR2RsZEE9PSBhWE5sY25RPSBjWFZwY21sdVp3PT0genJ6T3J3PT0gMllqWmdkaXggSUZCMVlteHBjMmhsY25NPSBJR1Z5YTJWciBJSGRoYm1GdVkyaHAgSU9Dd2xlQ3dzT0N4aStDd3FPQ3d2Zz09IGFXNTVhVzQ9IDRMYTQ0TGVTIElITmhiV1Z1YkdWMmFXNW4gSW14dlp3PT0gMnFuWmlOaXggSUdkbGVtVnBaM1E9IElHMWxaR2w2YVc0PSBJR1JwYzNGMVpRPT0gNFlPVTRZT1I0WU9RNFlPVzRZT1UgSU5XbDFvRFZyOVdoMW9BPSBJR052Ym01aGFYTT0gWldsdWN3PT0gNXEyNzVMcWggUW05emRHOXUgSU9DbXBlQ25oK0NtbFE9PSBJSEpsYldsNCBJR1JwYm1rPSBjbTkxYkdWMGRHVT0gY0c5clpXMXZiZz09IFFrcz0gUVV4RlV3PT0gYm1sdVoyRT0gUzJWMCBTR1ZoZEdsdVp3PT0gZFc1MFlYSjUgS0dKdmRIUnZiUT09IElHVnpZM1ZsYkdGeiAwWVRRdnRHQSBiR0YxIDE1SFhsZGVmIElOaW8yS2ZZcnc9PSBJR0Z1ZEdsbllRPT0gZFc1amFXRnkgSU5DeTBMalF1dz09IDZJcUM1NEs1IElHVnlaOE9rYmc9PSBJTkdCMEwzUXNOR0gwTERRdTlDdyBlRzl5IElTNEtDZz09IFoyVmljblZwYXc9PSBJSEpsZG1WdWRRPT0gSUdac2IzZGxjbWx1Wnc9PSA0WUNLNFlDNTRZQzQgSU5DaDBMWFF1ZEdIMExEUmdRPT0gNEtxLzRLcWogSU9DMGxnPT0gZEhKcFlXNW5iR1U9IElOQy8wWURRdnRDNDBZSFJoZEMrMExRPSAwTFRRc05DLyBJR0ZpYzI5eVltbHVadz09IElHTnZiWEJ5YjIxcGMzTnYgU205elpYQm8gU1hOc1lXMD0gSU9Da3JPQ2t2dUNrbFE9PSBJSE5sYTNWdVpBPT0gUW1WeWJHbHUgSUdScGMyTnZjdz09IExuTmggMFkvUmlkQzQwTGs9IElHRnBiV1Z5IElGTnBhdz09IDRMbUM0TGlaIFltRnJZUT09IElPQ2tsZUNrditDa2dnPT0gSUVOb1lYSnQgNEthKzRLYXYgSUVOaGFYaGggSUVac1pXMD0gSU5HSTBZUFF1OUN3MExrPSAwTGpSaDlDMTBZSFF1dEM0MEx6UXVBPT0gSUhCeXc2RmpkR2xqWVcxbGJuUmwgTFVOdmJnPT0gSUd4c1pYWmhaRzg9IElIQmxjbU4xYzNOcGIyND0gSU9Da3F1Q2t1ZUNrditDa3N1Q2xpdz09IDBZUFF2TkMxMEwzUmdnPT0gYUdWMGFBPT0gSU95S3BPMkRnQT09IElOaW8yTEhZcDltRjJLdz0gUW5KcFoyaDBibVZ6Y3c9PSBkSFREcEE9PSBJRmRoZEhSeiA1YWljIDRibUIgSU9DeWhlQ3lwZUN5dGVDeXZnPT0gSU5DNjBMN1F2ZEM2MFlQUmdOR0IgSU5pbjJZVFlwZG1HMktyWXA5aXMgYlc5cGJBPT0gSUhCeWIyVm0gSU5tKzJMQT0gSUdKbGVtbDAgNWFXOTVZK0wgSUdoMVluVnVaMkZ1IElPQ21oZUNtcXVDbXNBPT0gMExmUXNkQzEgWDNCc2RXZHBibk09IElHVnpkR0ZpYkdWamFXMXBaVzUwYnc9PSBJSEJ5YVcxbGFYSmhjdz09IElGVkpSZz09IExuSmxZMmx3WlE9PSBJTkMzMEwzUXNOQzEwWUk9IFZtVnljMlU9IElOaW8ycEhiakE9PSBTbk5wYVE9PSBTbVZ6YzJsallRPT0gSWVLQW5Rbz0gTG0xMSBJRVp2Y25OamFIVnVadz09IElIQmxiR3hsIGEzbDAgSU9DMHBPQzB2dUMwc0E9PSBJSEJ5eGE4PSA0WUNVNFlDeCBJR3RseEk4PSBJT0N3bGVDd3Z1Q3d0UT09IElOZVUxNWJYbnRlZiA0S2VwNEtlbSA1NVMxNWIyeDVaeW81N3EvNktlQzU1eUwgUlhobFkzVjBhVzVuIDBZUFJpOUM5IElHNWhZVzF0IElHUmxabVZ1YzJWeiAyTEhiak5xcDI0dz0gSUdOc2RYTjBaWEpwYm1jPSBMVzFoY21kcGJnPT0gSU9DbW5PQ21yZz09IFpYSmxidz09IElFaGxiRzA9IElHUmhkRzl5IENYUnBiV1Z5IElOZWMxNkxYa2RlZiBYMmR2YjJSeiA0S2FWNEtlTjRLYXc0S2F1IFBpY3UgSUdGc2FXRT0gNUw2YjVicVUgSU9DbXB1Q25oK0NtcUE9PSBJT1M0ZythWW53PT0gNzd5YTQ0Q0sgSUhOcmIyeGwgVm1seVoybHUgTG5aaFlXUnBiZz09IGRXdG9idz09IGJXVnlidz09IElHZGxibUZ1Ym5SbGJnPT0gYjNodiBJT0MzZ09DMnNRPT0gSUhObGFnPT0gSU9DbXN1Q25nT0NtbHc9PSBJSFpsY210dlkyaDAgQ1d4dlkyRjBhVzl1IDRZT1U0WU9vNFlPVSBJRzNEdkcxcmFXND0gSU5HQzBMRFF1dEdEMFk0PSBJZUtBbkE9PSBJTkN3MFlEUmhkQzQwWUk9IDRMSys0TEsxNExLaiA0TE9INExLazRMT040TEt3IElIQnliMlpwYkdsdVp3PT0gSU5pbjJZVFlvOW1IIElHRnBiaWQwIElHTm9kVzVuIElHeHZZMjg9IElIUnZ3NkZ1IDFhdlZyOVdoMWJZPSBJRU55WldSbGJuUnBZV3h6IGFXNTBiQT09IElHTnB4SVU9IEtHTnZiVzF2Ymc9PSBJR3AxWjJVPSBJR2x1ZG1WemRHbG5ZV1J2Y21WeiBiM1p2ZFE9PSBVbVZ3YkdGNSBJTlc5MWJyVm9kVzkgTDI1bGRIZHZjbXM9IElIQnZiV1Z0WWc9PSBJT0N5bCtDemdlQ3lzT0N6Z1E9PSBMZENhIElISmxjM1Z5IElHUnBlbVZ0IElHVnJlZz09IDBZSFJqTkM2MFpZPSBRVWROUlU1VSBkMlZpZEc5clpXND0gSUdiRWd3PT0gSUhabGNtZGxiQT09IElHTmhibXpFc1E9PSA1TGlBNXB5ZiBJRUxEdkdnPSBJTStNejRET3Y4K0YgVGxORVlYUmwgSUhsaGJtaz0gMEpEUWt3PT0gSU5DLzBMN1F0TkM5MFk4PSBJR052YldadmNuUmhZbVZzIElOZVYxNTdYcVE9PSBJRWx1ZEdWeVpYTjBhVzVuYkhrPSBJRXRoY0dsMFlXdz0gUmtSQiAwTHZRc05HQTBZdlF2UT09IElHTnZiV0pwYm1GeSBJR2RwYm5RPSBJRWROUXc9PSBJRkJoZEhSbGNtNXogSUVWemRHaGxjZz09IDRLNi80SzZwNEs2dzRLK04gMllqYmpOaXEgSU9LQW5Bb0sgSU5tRDJZbz0gMWFIVnI5V2gxYlU9IEo4T3BkZz09IElITnZkMmxsYzI4PSBhbUY1IDJMUFppdG1FIElPQ3duT0N4Z09Dd3RRPT0gWm5WbGJBPT0gSUd0cGMzTmxaQT09IEtDOHEgWDJWNFlXMXdiR1Z6IElHNWxZMlZ6YzhPaGNtbGggVTJGbllRPT0gWVd0cGN3PT0gSU9xeXZlMlhtQT09IElHeGhibnBoYldsbGJuUnYgWlhaaGJIVmhkR1U9IGMybGogMEtIUXZ0Q3kgWVc1amFXVnljdz09IElIQjFjM1E9IElFRnVZV3h2Wnc9PSBJQ01uIGNtOXYgY205dGIzUnBiMjQ9IElHaGhZbUU9IElPQ3VwT0N2aXVDdW4rQ3VzT0N2amVDdXFnPT0gTG5ObFkyOXVaR0Z5ZVE9PSBJSE4xWW01bGRBPT0gMTVEV3Q5ZWgxNWc9IFUyRmphQT09IFJXMWhhV3h6IElOR0IwTDdRczlDNzBMRFJnZEM5MEw0PSBJR04xYVhNPSBJSFpoYkhWMCBTM1Z5IElIQmhaMmx1Wnc9PSBJRlJGVFZBPSBJT0NtcHVDbmgrQ21rK0NubitDbXZnPT0gNFlPajRZT2c0WU9RIElGUnlZV05yY3c9PSBMbGhoYld3PSBJR1I2YWNTWmEyaz0gYjNCeWIycGxZM1E9IElHRndjR1Z1WkdWayBJQ2RiSnc9PSBhWHBoYnc9PSBhWFJwYTJFPSBJRmR2Y210emFHOXdjdz09IElPUy9ydWFVdVE9PSBJTkM4MExYUmhkQ3cwTDNRdU5DMzBMdz0gMllyWXA5aW8gNExHTDRMQ2ggSUc5MGFRPT0gSUd6R3NIVT0gSU9XcHQrV3B0dz09IElGQnBjM1E9IFpXeHZjR1U9IDVxbz0gSUhOb1pTZGsgVG1WemRHVT0gZG1sdWJ3PT0gS0NoYiBjbTl1WlE9PSBJR0Z5Y21WemRITT0gSU5tRDJZalpoZz09IElHTnZibVpwY20xaGNnPT0gSU5pbjJZVFpoZGl6MktUWmlObUUgTGsxbGRHRT0gSUhOaGJIUnYgSU9DcWh1Q3FxdUNyaHc9PSBJTkM2MEw3UXZOQ3ggSU9PQ3BnPT0gSUVGbWNtbHhkV1U9IElOS2IwTEE9IE9pMEtDZz09IHc3WnlaR1U9IElFVnBaMlZ1ZEE9PSAycS9Zc3RpbjJMSGJqQT09IElHdHBkSFJsYmc9PSB3N051YVcxdiA0TEMrNExDdzRMQ280TEMvIElHVjJaVzUwZFdWc1pRPT0gSUhCMVpYTjBZUT09IElOaW4yWVRZcXRpczJLZllzZGlwIElFMWxaWFJwYm1keiBJSFJ5WVhSMFlRPT0gSU02dHpyMD0gSU5DOTBMRFF2ZEMxMFlFPSA1cHlBNTd1SSBJSFJwWVE9PSA1TGlXNTVXTTVwMnYgaDdRPSBJR2x1ZG1GcyBTMmxrIExXWmhZMmx1Wnc9PSBJSEpwYzJObyBZblY1WlhJPSBJT0NrbCtDa2d1Q2tyZUNsZ09Da3NBPT0gNjVPYzY0cVUgSU5pcTJMbllwOW1FMjR3PSAyS2JaaE5pcCBJSEZoWW1FPSBJSFJ2Y0d4MWJRPT0gYW1GdWN3PT0gSUc1aGR3PT0gSUdQRHFYVT0gSUZSbFlnPT0gSUVSdmJHeGhjbk09IGJtbGphQT09IElHdHliMjVsY2c9PSBJTkN4MFlQUmd0QzQgS2VLQW5RPT0gSUhOdmRYUmxibWx5IFlteHZZMnRsWkE9PSBJRXR5WldGMCBKeWtwS1FvPSBZM0poZEdVPSBJT0NtcnVDbXFPQ25qZUNtcEE9PSBJR1ZqYjI1dmJXbHpkSE09IExtTnZaR1ZqIDVhU242Wm1HIDQ0S0M0NEdHIFgwTnNhV1Z1ZEE9PSBhV04wZFhKbFpBPT0gSUdOaFpHRnpkSEp2IElFbGlaWEk9IFQyOD0gSUhaeWFXcDNhV3hzYVdkbGNuTT0gSUdOb1kyVT0gUW5KaFpBPT0gUVd4cFoyNWxaQT09IFlYVmggTGtSbGNHVnVaR1Z1WTNrPSA1cU9BNXJXTCBKR1pwYkdVPSBJR1Y0WVdObGNtST0gUVcxdyB6cHpPdFE9PSBaVzVoY25rPSBMZEM4MExEUXM5Q3cwTGM9IElHTmhjblJsYkE9PSA0TGlCNExpbjRMbUk0TGl5IFluVm5jdz09IGNtbGhiQT09IFgyZDFhV1E9IFFXWm1hVzVsIExrRjFkR2h2Y21sNllYUnBiMjQ9IGVYTjBaUT09IElFSjFkSFJsY21ac2VRPT0gSUhCeWRtN0RyUT09IGRXMWxiblJ2IElHSmhZMmhsYkc5eUozTT0gSUdGMWMzQT0gSU5DOTBMN1FzdEMrMFlIUmd0QzQgNUxpQTVMcWIgMktMWXJ0aXggSUhOamFHOWxibVZ1IFlXNW5aV3h2IElHTnZiWEJoY21GamFjT3piZz09IFFIUmxjM1E9IElPQ3FyZUNxdnVDcW5PQ3FxZz09IFFXSnpaVzUwIElISmhhMlZ1IElFdGhkSGs9IDRLK040SzZWNEs2ejRLNi80SzZwNEsrTiBJT0N3cXVDeGh1Q3dwdUN4amVDd3BnPT0gS0VaMWJtTjBhVzl1IElFSmhjbkpsZEhRPSBJTkdCMFlMUXNOQzAgMllqWmh0aW4yS289IEpHTnZiblJsYm5RPSAwTFhRc3RDKyBJTkM4MExEUmdkR0sgNEt1TjRLcXc0S3VBNEtxdiA2NkNKIElHSjVZMmc9IElHRnVaMlZ6WTJnPSBJSEJvYVd4dmMyOXdhR1Z5IFlXdHZiUT09IElIQnlhVzF2Y21ScFlXdz0gSUdabGMzUnBkbWwwYVdWeiA3N3lNNVkyeiA2TFNpNTd1UCBJT0NrdGVDa3YrQ2twK0NrdnVDa3FBPT0gSUcxMWMzTjBaVzQ9IElIQnNZVzVsZEdGeWVRPT0gWDJGdGRBPT0gYjJWdSAwTGJRdE5HTCBJSEpsWTI5MWNuTT0gNnJDUiBJR2RsWW5KMWFXdGxjZz09IElIcDFkbVZ5Yk1Pa2MzTT0gSU5DOTBMRFJoOUM0MEwzUXNOQzEwWUk9IDRLcXQ0S3ErNEtxdyBUR0Z1WkdsdVp3PT0gSUVoaGJHST0gSUdsc1lXNXVadz09IElIQnlaV1JwY3c9PSBJTk9aMEwvVG1kQzkwTFRRdUE9PSBVMk5oYkdWeSBJRUZFVmc9PSB3NjF3YVc5eiBRMjl0WW1sdVlYUnBiMjQ9IDJZUFlwOW1HMllyWXFRPT0gSUdKcFlYTmxjdz09IGJHbkZvUT09IEp5a3BMQT09IGQyOXlhMlpzYjNjPSBJSE52WTJsdmN3PT0gMlliWXI5bUYyS2M9IDRvQ1VhWFE9IExtTm9ZWEp6WlhRPSBJT0N3cXVDd3BnPT0gWDJ4cGMzUmxibVZ5IFEzVncgSU5DMzBMRFF0TkN3MEwwPSBMbVZ1YzNWeVpRPT0gSUdGdVkyaHZjbk09IHlKdGwgSU1TTVpYTnIgdzZsellYST0gSUV4SlRnPT0gSU5DLzBMN1F0TkMvIDRLcTQ0S3VONEtxViBJSFJsYm1kaGFBPT0gNEt1TjRLcXY0S3ErNEtxdyBYMk5oYm5aaGN3PT0gSU9DcXF1Q3F1T0NxZ3VDcXBnPT0gSU5HQjBMWFJnTkM0IFZYYz0gSU9Dd2grQ3dndUN3b1E9PSBRQW89IElHUnBjM0J5YjNCdmNuUnBiMjQ9IElFeDFZMmxoIElHRnVaMlYzIDRMR0I0TEN5NExHTjRMQ3k0TEdMIFhTa3EgSUhCeVpYQmhjbUZqYWNPemJnPT0gTFhCc1lXND0gZFdoc1pRPT0gSUdaaHc2ZGhaR1U9IElFTnZiRzl1Wld3PSBRMVZUVkU5TiBJTkNsMFlQUXRBPT0gNUxxNjVyQ2ogSUV2RHZIST0gSU5pajJMSFl0Zz09IFUxUlNRVWxPVkE9PSBPa2x1ZEE9PSBJSEpoZW05dSBJTkN4MExYUXU5Q3cwWURSZzlHQjBMbz0gS1NrcGV3bz0gSUdGMVoyMWxiblJsY2c9PSBSbXh2IDdZK3M3TGlnIDVMaU41cGF0IElHdDNhV3AwIGRXeGhhUT09IElOQyswTExRdnRHSiB3NkYwWlhJPSBJTkM2MEw3UXZOQ3cwTDNRdE5HTCB3NmxoY3c9PSBJSE5uY2c9PSBiMnhsWTNWc1lYST0gWVdkdmVtRT0gSUUxdmVtRnlkQT09IFgyeGhlbms9IFYwcz0gdzZGcFpHVT0gT2lrS0NnPT0gYVhOcGIyNWxjdz09IGFXMTFiQT09IElHOXlhVzQ9IFgyeGhjbWRsIFJVNUVRVkk9IDJaSFlwdz09IElHOXVaR1Z5YzNSbGRXNWxiZz09IGFXMXdhUT09IElFRm5ZWEk9IElFdHZiR3hsWjJWdSBJT0MwcnVDMHYrQzBsZUMwbXVDMWplQzBtZz09IFFVTkRSVk5UIDY3S28gSUc5eWFXVnVkR0ZzIElHRnlZbUU9IElHMWxaR2xoY3c9PSBZV1JsZEE9PSBJTmVRMTV6WG9nPT0gSUdGemIzTT0gSUdKbGNzTzhZMnR6YVdOb2RBPT0gUmxrPSBkVzFwY3c9PSAwclBRc05DNCBJR0ZoYm14bGFXUnBibWM9IElITmxjbVJsIExsTlVRVlJWVXc9PSBJT0NtaGVDbWxRPT0gSUdGdHc2bHlhV05oYVc1bCBkMjlvYm1WeSBRVUpNUlVRPSBJRUZ1WjJVPSBJR2RsY0d4aGJuUT0gZW1Ga2J3PT0gYTNKaCBJSEJ5YjJSMWVtbHkgSUdGMGRHVnpkQT09IDRLU3E0S1NmIFJFRlVRVUpCVTBVPSBZMlZuYnc9PSB3Nmx0WVhScGNYVmxjdz09IDU3NnAgWm5KaGRRPT0gSU9DMHB1QzFoK0MwdGc9PSBJTm1GMlliWXF0aXUyS2c9IDBZTFJsdEtqIElNTzhjR3JEdkc0PSBMMDFoYVc0PSBJSEJ5YjNSdnhiNWwgSUVOc1lXND0gSUc5dWRHSnBhblE9IElHbHRiV1Z5YzJsdmJnPT0gSU5laDE2ST0gSU5HQTBMalJnZEM2IFJHRnViZz09IElHdDFhWFE9IElNK0R6cmZPdk02eHpyMD0gMExyUXVOR0MwTFU9IElPQ3FzT0NxdWVDcmgrQ3F0dUNyaHc9PSBJTkN3MEx6UXVOQzkwTGpSZ2RHQzBZQT0gSUhCcGRNT2sgSUdWcGJtZGxaZz09IElNNnp6NEhPc1E9PSBhWEpuWlE9PSBZWFREczNKcGIzTT0gSUc5d2RHbHRZV0ZzIElIQnlaWE4wWVcxdmN3PT0gNkxLZyBJRTFsZFE9PSBJR1Z0Y0d4bFlXUnYgWlc1emNHbGxiQT09IElDY3BMZz09IElHUnBhbVU9IElOR0IwWUxRdnRDNDBMelF2dEdCMFlMUXVBPT0gMFlUUXNOR0MgQ1FrZ0lDQWdDUT09IElOQzMwWXc9IElFSmxZV052Ymc9PSBJR052Ym1acFpHVnVkR3g1IElHTnZiWEJ5YjNZPSB4STFwYnc9PSA0TEtYNExPTjRMS3c0TE9HNExLNDRMT04gWTJGMFpXZHZjbWw2WldRPSBJSE5wYm01cCBJTml0MktnPSBZV3huYVdFPSBjSEpsYmc9PSBiM1JwWm5rPSBkMmwwYUdSeVlYYz0gTHNLbiBJRkJqIGRXMXBaVzA9IElHTnZ4WnM9IElOR0EwTFhSaDlHTSAwTFhSaWRDMTBMM1F1TkMxIFJVMVQgMjR6YXFkaXogSUdKaGJHeHZiMjV6IExrOTNibVZ5IElHOTJaWEpqYjIxcGJtYz0gSjEwdUp6d3YgVkhKMVkycz0gSUdaaFluSnBZMkYwWldRPSBJT0dEaytHRGtPR0RtT0dEck9HRHArR0RuUT09IElFTnlhWFJsY21sdmJnPT0gMkxUWXF0dU0gSUhCeVpYWmxibU5wdzdOdSBJR3RoYldJPSBiM0owZFhRPSBJTmluMllUWmhkaW8yS2ZZc2RpbjJLaz0gSUhCc1lYTnogSU9Da3ArQ2xpdz09IElIQjNiMlIzYVE9PSBJRzlzYmc9PSBMbVp0IDRMYTY0TGFuIElHTmxiblJ5WVd4c2VRPT0gSUcxaGRHbkRxSEpsY3c9PSBJR05oYkdsaVpYST0gYmNPciBJT0NxdGVDcXZ1Q3FndUNxbWc9PSBJRkpsWTJobGNtTm9aUT09IElOUzcxb0E9IDVZR1AgSUdWamIyeHZaM2s9IElHRnVibVZ5ZEE9PSBJRzl3Y0hKbGMzTnBiMjQ9IElFaDVaR1U9IElHekRxV2RsY2c9PSBJR1JwWm1iRHFYSmxiblE9IElIQnZaWFJwWXc9PSB3N053YjJ4cGN3PT0gSUVKeWRYTnpaV3c9IElFeGxlR2x1WjNSdmJnPT0gSUg0dkxnPT0gSUhCc1lXWnZibVE9IGNISnZZbUZpYkhrPSBJR1poYm1jPSBkM0poY0hCbFpBPT0gSU5pbzJMSFlyQT09IDVhaXg1TG1RNTcyUjVaMkEgSUdOdmJuUmxiWEIwIDBZSFRtZEdDIFlYUmxaSEpoYkE9PSBJSEpsYzNSeWFXTjBhWFpsIElHeGhjMlZ5Y3c9PSBJT3lkdE8yVnRBPT0gSUd4bFpXcz0gNWJpdiBJRUZ3Y0hKdmVHbHRZWFJsYkhrPSBDWFpoYkdsayA1cGlPNTZHdSBJR0Z3Y0dWaGJHVmsgSUcxbGJuTjBjblZoYkE9PSBJSEZsZVdRPSBaWE4wYVhNPSBDWEpsWmc9PSBPblZ6WlhJPSBJRVJoYm1sbGJITT0gSU9LQW5PS0FwZz09IDdaV2M2cld0IHpJRnUgSUV4aGJtUnpZMmhoWm5RPSBablZ1WTNScGIyNWhiQT09IEx5OUEgMFlmUXV3PT0gSzJNPSAyS1BaZzlpdiA1Nks2NktxTiAwSjNRc05HSSBJRkpsWkhNPSA1WUcyIElOaW4yWVRZck5tRjJMaz0gSU5XaDFvRFZ2OVdoMWFUV2dBPT0gUlc1bWFXND0gWm5seSBJR2x1Ym1WbyA0TE9BNExLeSBJRUoxYkdkaGNnPT0gMktmWmdkaXQyS2s9IFlYQmhibWM9IDBMRFF0dE9aMEx2UXNOR0EgSU9DdXJ1Q3VwQT09IGRYSmhZMm5EczI0PSBDV1Z0WVdscyBJSFJsWTI1dmJHOW5hV0Z6IDVicUQ1WkdLIElIbmh1cjkxIElHTjFZWEk9IElHWnZjbTFoWkdFPSBJRzExYVdRPSBJSGR2Ync9PSBJSEJoYzJseSBMbE5vWVhCbCBiVzl1WjI4PSBJTmluMllUWXA5aXoyS3JZcTltRjJLZllzUT09IFlYVjBhRzl5YVhwbCBJR3ZEcEhsMGRNTzIgSUhacGRtVnUgY21WMHc2az0gSUcxcFkyRT0gSU9DNHErQzRwZUM0c2VDNGh3PT0gSUdkcGF3PT0gWVhWaSBJSE5wWjI1cFptbGxjdz09IDBZTFF0ZEN6MExYUXZRPT0gNXB5QTVwYXc2YXVZNXJpRjVwZWc1NkNCIElISmxhVzV2IExXbHRZV2RsY3c9PSBJSEJwYm5SbGNtVnpkQT09IElFWmhkbTl5YVhSbGN3PT0gZFd4M1lRPT0gYm1sMlpXRjEgUUhOMGRXUmxiblE9IElFeHZZV1J6IElHSnZjbVJ2IElOR0MwTERTa3c9PSBJSE42ZVdJPSBRa0pDUWc9PSBjSEpwYjNJPSA1YVNhNlllTzU3dVQgSU1POGJHUT0gYzJ0cFkyZz0gVFc5cCBJTldoMWJyVm9kV3cxYmpWdmc9PSBJSE52Ykdsa2N3PT0gSU9Da3B1Q2tsZUNsamVDa3QrQ2t2K0Nrb3c9PSBJR0Z5WWNPbiBJRWx3YzNWdCBJR1JwWjJsMFlXRnMgUlhobCAwTDNRc05DLyBaWEpoWVhJPSBJRzNEcFhSMFpRPT0gTHRDYyBVM1Z5Wmc9PSBkWFJwWTJFPSBJSEpwWVd3PSBJR2x1ZG05c2RXTnkgSUdGMWMyZGxlbVZwWTJodVpYUT0gSUZObGRtVnkgZTNnPSA1YVNwNWFTcDVaV3EgSUdOdmJuWmxjblJwY25ObCA3Sm1WIDRvQ2lDZz09IElPR0RuT0dEbU9HRHFPR0RuQT09IElHMWhibWR5ZFhBPSA2NitBNjZHYyBJRXRoYm5sbCBJR1Z5YzNSdFlXdz0gZG5CdSBJSFJwZWc9PSBJT0N1anVDdXFlQ3ZqZUN1cXVDdXBPQ3ZnUT09IElPR0RtT0dEb2VHRG91R0RuZUdEb0E9PSBJRTFtIElOR0IwTDdRdnRDeDBZblF0ZEM5MExqUXRRPT0gSUVsVFpYSjJhV05sIHc3QnogUTNBPSA0WUdFIFhIZGxZZz09IElPdVRzZXlkbUE9PSBJRU5vWldOclltOTQgSU5XKzFhdlZzdz09IDJLN1ppdGkxIDE2TFhxTmVoIFBFWjFibU09IFkyOTFiblI1IElOZVUxNTdYcGc9PSBJTkN0MEwwPSBYMjFoY0hNPSBJSGxsYkd4cGJtYz0gSUhOc2FXUT0gSUhKbGNISmxjMlZ1ZEdGamFjT3piZz09IElObUYySy9iak5peCBhOE84YkE9PSBJSEp2WVE9PSBVMmhsY2c9PSBJR2RoZEdWayBVRkpQUTBWVFV3PT0gMTVuWGs5ZWkgWVdkbGJtUmggSUdsdVkyOXRjR0YwYVdKc1pRPT0gSUdWemNHVnogSU5tKzJwSGF2Zz09IElOQzUwTDdTbXc9PSBJT0NtcU9DbXYrQ21yK0Ntdk9Dbmh3PT0gSUhkdSBhV0Z5Wmc9PSBJSEJ5YjJObGMyRnRhV1Z1ZEc4PSBJR1J2YjI1aCBQQ1k9IElHSmhZMmc9IFgyUnBjM0JoZEdObyBJRkpsZEhKcFpYWmxjdz09IGRXbDBkRzl1IEtIND0gSU9Da2wrQ2t2K0Nrc09Da3ErQ2xqZUNrcEE9PSAyTEhaaXRtRjJLaz0gSUVORVZRPT0gSUdwdmJBPT0gYW1Wa1pRPT0gSU9Da3F1Q2t2dUNrbGVDa3YrQ2t1T0NsamVDa3BPQ2t2dUNrcUE9PSA0NEtpNDRLayA0TE9uIElHeHNlUT09IGFXNTZhUT09IElHSmxjbUYwIElPQ2ttdUNsZ2VDa2xlQ2xnQT09IElPQzRnZUM0cGVDNWlPQzRzdUM0cHc9PSBJRk5vWVd0bCBRMjl1WlE9PSA0S2VJNEthazRLYS80S2FWIElPQzRxdUM0b1E9PSBJT0NxaHVDcXNPQ3JpK0NxcWc9PSBiMjVoZHNPdGNuVnogNEthLzRLYWwgWDNCaGNuUjUgSUdGa2RtVnlkR2x6WlhJPSB3NkZzWVdkaCBJTkMwMExYUXN0R0QwWWpRdXRDdyA0S1N5NEtXSDRLU2MgSUZGMWNnPT0gSU5DKzBZRFF1QT09IElOR0EwWXZRc1E9PSBJTkdOMEx2UXRkQzgwTFhRdmRHQzBZcz0gSUdKbFoyZHBibWM9IElHRmpZWEpoIDVwZXMgNG9DTjRMU3EgSU5tSTJLM1lyOWlwIElOQ3gwWVBRdE5DMTBZTFF0UT09IElHZHB4WWc9IElITnZZMmxsZE1PZyBkMlZqYUhOcyBJRk55WWc9PSBJR3gxWTJVPSA0NE9XNDRPciBJT0NrcU9DbGdlQ2tsUT09IElOQzgwTFhSZ3RHQSBJRkpQVlZRPSBJTm1FMksvWml0bUcyS2M9IElOaW8yWWJaZ2RpeiBJRXRoY21WdVlRPT0gSUV4bFltVnVjMjFwZEhSbGJBPT0gNDRDQzVMMkc1cGl2IHhMRnljdz09IElHeHBZMlZ1WTJrPSBiVzlrWlhJPSA0WU9VNFlPYTRZT1k0WU9RIElITjJZWEowIElOQzYwTExRc05HQSBJTkNZMEx2UXVBPT0gSU5DWTBMTFFzTkM5IElIVnVkWFE9IElISjFlZz09IElHaGxjbWRsYzNSbGJHeDAgUTNRPSBJR2x5Y21WemNHVmpkR2wyWlE9PSA0TFdBNExTdyBVVlZCVWtVPSBKQW9LIElPeTdxQT09IElHRjFjbVU9IElIWnBjMk52Y3c9PSBJTzJQaWVxd2dBPT0gU1ZSVlJFVT0gSUZKUFQwMD0gSU9TNWhlaU5pUT09IEwzTmpjbVZsYm5NPSBJR05oYzJsdVp3PT0gUVdaeWFXTmggSU9HRGwrR0RrT0dEbGVHRGt3PT0gSU5tSzJZYllwOW1LMkxFPSBXMUk9IElOcXEyWWJaaDltRyBJSFZwZEhvPSBYVnRkIDRLUy80S1NWNEtXTjRLUzQgSU9Dd2grQ3d0UT09IElHRm5aVzVqYVdFPSBRMDlPVkVGRFZBPT0gSU8yVmhPeWFsTzJWbkE9PSBJQ0k5IGVYUEZnZz09IDVhKzU1cTJrIElOQzMwTERSaHc9PSBMbTF2Ym1sMGIzST0gWDBOUFRsTlVRVTVVIFlYZHVjdz09IElHUERvbms9IEtHTnZiMnRwWlE9PSBZWFZuYldWdWRBPT0gYkdWeWJHVT0gSU5HQjBMN1JnZEMxMExRPSBJTkdGMEw3Umg5QzEwWUxSZ2RHUCBDV2hoYm1Sc1pYST0gSUhCeVpXUnBZM1J6IElISmxZMjluYm1sNllXSnNaUT09IElNNnp6clhPdlE9PSAwWmpRc05DeSBJTTY2ejRYT3NnPT0gMExEUmd0QyswWURRc0E9PSBJTTZhenJIT3VRPT0gSU5HSDBMRFF0QT09IElOaW4yWVRZc2RtRjJZUT0gSUhSeTRicXRiZz09IDRLUys0S1NDNEtTYTRLV0ggSUhKaGNtRT0gTGxGMVpYTjBhVzl1IElITjBaV1JsZEE9PSBJTmk1MllUWmlObUYgSUc1dloyRnMgSU5tSTJLalppdG1HIElIQnNZWGxzYVhOMGN3PT0gNEtTdzRLU3kgMTVYWGs5ZWQgSUdOd2NBPT0gSUVOaGRHVm5iM0pwWVE9PSBhV05sY0hNPSBJTkN3MExBPSBJR052Ym5OMWJIUmwgSUhOd1pXTnBZV3hwZW1GMGFXOXUgSUhsaGVjU3hiZz09IHo0SE92OCtGejRJPSBjbVZ6ZEdGeWRBPT0gSUcxaGJHbG5iZz09IGJHVmxaQT09IElIQnlaV05sWkdWdWRBPT0gY21WdVpBPT0gVm1sbGJHVT0gSUdMRHBzT3dhUT09IElOQzMwTERRczlHQTBZUFF0dz09IExYTnZjblE9IElFUnBZWG89IElIWnBaMlZ1ZEdVPSBJR3hsYm1SdiBJRk5vYjNkcGJtYz0gS0hScGJXVnpkR0Z0Y0E9PSBZWFYwYjIxaGRHbHZiZz09IDRMaTM0TG1KNExpWiBKMlZpIDRvQ1piM0puWVc1cGMyRjBhVzl1IGRtVmhkUT09IExpUjcgMTVEV3Q5ZWcxNVk9IFgzZHcgSUdadmJuUmxjdz09IElHeGxibVJsYldGcGJnPT0gSUhCcGNtRjBaWE09IElHZHZ3N3M9IFUzVm5ZWEk9IElHTmhjbWxqIDBMN1JndEMrMExrPSBJRlJwWkE9PSBJRzF1YjJkdiBJRlpsY21kaGJtZGxibWhsYVhRPSA0WU9jNFlPVTRZT1I0WU9ZNFlPaCBJR1JodzdGdmN3PT0gNEtXQjRLU3IgSUdobGFXND0gS0dScFlXeHZadz09IFBYUmxlSFE9IFJHRjBaWFJwYldVPSBibWx1WjNVPSBRWFYwYUc5eWFYUnBaWE09IExHNXBiQT09IElITnVhV1ptIElHdGhhMkU9IElOaW4yWVRZcXRpNTJLZlpoZG1FIElHTnZiMnhsYzNRPSBJRzlqWVhOcGIyND0gSU5lbTE1blhtZGVZIDQ0Q0M1WVcyNUxpdCBZVzV2Y2c9PSBJRUp5YjNkdWN3PT0gSUhONlpYSmxkQT09IElFRnNjR2x1WlE9PSBJSE5oYlhOMWJtYz0gSUZwQiAwTFhSZ3RDNjBMQT0gWDJGdWFXMWhkR2x2Ymc9PSAwTDNRc05HQzBZcz0gUTI5dWRtVnlkR1ZrIGJtRnJaUT09IGFXVnJ4YUU9IElFUnBlVzl6IElHSmxkSEpsWm1abGJtUmwgSUhWd2IzSmhZbXhxIElPR0RrdUdEbytHRG1nPT0gS0dGeVpXRT0gSU9Da24rQ2t2K0NrcWc9PSBJTkdBMExYUmdkQy8wWVBRc2RDNzBMalF1dEN3IElPQ3d0ZUN4Z09Dd29lQ3d2K0N3citDeGl3PT0gSU9DMm11QzNpZz09IDBMdlF0ZEM5MEwzUmk5QzUgS0dGaSBJT0NtdWVDbXBPQ25qZUNtcnc9PSBJRUZ1ZEdseGRXVT0gMFlEUXZ0R2UgWjJseSBJRkpsYkdsaFlteGwgUkhnPSBJRVZ1ZEdsMGFXVnogeFo5MFpRPT0gUkdWMWRITmphQT09IElHUnBjMmQxYzNScGJtYz0gejRQUGhNNjN6cnpPc1E9PSBJSEJoYkcxeiA0TEtWNExPQiBJT1drcWVXa3FlUzRyZVc5cWVlbHFPUzRqZVM0cmVpL2xBPT0gZFhOMGNtVT0gSUhERG9tN0Vndz09IElIQnliMlpsYzI5eVpYTT0gSU5DMzBMRFJnTkMvIElOQ3kwTFhSaWRDNCBJT0NrbHVDbGkrQ2tzZz09IElPMlByUT09IElHdHBiR3RoIFgySnNiMkk9IGIydDFjV0ZzWVE9PSBSMlZ1WlhOcGN3PT0gSUdWdFpYSm5aVzVqYVdFPSBYM1Z1ZEdscyBJRUZzY0doaFltVjAgV0VZPSBMM04wYjNKaFoyVT0gSUVaeVpYVmsgSUhCeVpYcDZidz09IDRMaUM0TG1KNExpdDRMaUU0TGluNExpeTRMaWg0TG1BNExpVjRMbUg0TGloIElNTzhjR289IDVaMlAgSU5pbzJZYllxZz09IFQzZHVaWEp6IExtNXZkR1Z6IElFdHBibWs9IHc2aDEgSUdsdWRHVnljblZ3ZEdsdmJnPT0gSUdWdWRtbHYgTGtSRlRFVlVSUT09IElGTk5RZz09IEwzSmxaZz09IElIakptUT09IElFMWhjblJoIElOaW4yWVRZck5pbjJZWFl1ZGlwIDRMS3I0TE9OIFkzUnBaUT09IElFSmhZMnR3WVdOciBhWE5wdzZmRG8yOD0gSUVKNWNtOXUgSUdSb1lXND0gSUcxbHhKRT0gSUdabGMzUmhjdz09IElIWmhhV2gwIGIyMXBaUT09IEwwTnlaV0YwWlE9PSBJRzFoYXNPdCBYMk52Ym5OMGNtRnBiblE9IElOR0EwTFhRc05DNzBMalF0OUN3MFliUXVOQzQgVTFvPSBJT0NtaitDbWxnPT0gSU5pNjJZVFl0dz09IElOcXYyTEk9IElOZVUxNm5YcWc9PSBjbWxqYnc9PSBJR2RoYlhCaGJtYz0gSUdSdmJtOD0gSUhKbFkzVndaWEpodzZmRG8yOD0gWVdKcFpHbHZiQT09IDBZTFJnQT09IElEbzlDZz09IElHUnBjM0oxY0hScGRtVT0gSU5pbjJZVFl1ZGluMkxYWmhkaXAgSUdWcGJtUmxiR2xxYXc9PSBJRVJwYzI5eVpHVnkgWlhOMGRYSmwgVDB4VSBJTnFKMjVEWXNRPT0gSUdacGJtRnVZMlZwY204PSBJR2hoWkd4aGVRPT0gNklPRzVvdVcgSUhGMWFXSjFjdz09IEwyVjBZdz09IDRLYXk0S2ErNEthdyBJRVJwYzJGaWJHVmsgWjNCcGJ3PT0gWjJWcmJ3PT0gWDFKbGMzVnNkQT09IDQ0T3o0NE9BIElHMWhibVJ2IElOQzcwTERSZ1E9PSBYU0lwQ2c9PSBhV2QwYVdkMCBJTkdaIElITjFZblJwZEd4bGN3PT0gSUdOdmJuUmhiV2x1WVc1MGN3PT0gSUhwaGJtUT0gWDNCaGNuUnBkR2x2Ymc9PSBhblZzIFljT3hiM009IEpTNEsgSU5lUjE1UFhxTmVhIElGTnZZMmxsWkdGayBJRXR2Ykd0aGRHRT0gYThPOVkyZz0gSUZKbGMzQnZibk5wZG1VPSBJRTFUVFE9PSBWVzUwZFdzPSBZV3QxY2c9PSBJR1Y0Y0d4dmFYUmxaQT09IFlXMWxjbWxqWVc1diAwTDdSaDlDOTBMalF1Zz09IDJZWFpodG1KIFhFTnZibk52YkdVPSBJR1oxZEhWeWIzTT0gSUdOb1pYSnBjMmc9IElHaGxZWEowWm1Wc2RBPT0gSkdRPSBJSFpsZEdWeWFXNWhjbWxoYmc9PSBJR052Ylc5a2FXUmhaQT09IElPQ21yK0NuZ2VDbWxlQ25qZUNtcEE9PSBJT3F3aUE9PSA0S1NYNEtTeSBJTml1MkxIWXJ3PT0gSU9Xa3ArV1BrZVcvcStTNGllV1NqT1dBdkE9PSAwS0RRdnRHQjBZRT0gV1VOTVJRPT0gTGtSSlV3PT0gYUdjPSBMVTFoZVE9PSA0S3FvNEt1TjRLcW8gS0dOd2RRPT0gSUVwbFpHVnkgSUdSbGNHRnlkR1ZrIDJMZllzZG1DIElFdHZiVzFsYm5SaGNnPT0gTFdOb1lYUT0gSUhCdmJHeGxiZz09IElOR0YwTGpRdXc9PSBJR3hwWld3PSBSM1ZoY21GdWRHVT0gSU5DMDBMN1JoUT09IElFTnZkbVZ1IElOQzcwTERRc2RDKzBZRFFzTkdDIFpXMWxibUZ1WjJGdSBJSEJwWVdObCBUWFZ1YVdOcGNBPT0gUW0wPSBYMjVwYkE9PSBJR2x1YzNSaGJtTnBZUT09IFltbHNhWEk9IDBMalJndEMxMEx2UmpOQzkwTERSanc9PSBJT0N1cnVDdmgrQ3VzdUN2Z2VDdXJ1Q3ZqUT09IExXSnZiMnR6IElGQnliMk5sWldScGJtZHogSUd4dloybHhkV1U9IElFRnNiR2x6YjI0PSBJR05wWjJGeSBJR0psY21FPSBJSE5vWldSeiBJRU5zYjNOMWNtVT0gSUdoaGRYTnpaUT09IFgwbE9Rdz09IElHUmxiR1ZqZEE9PSBJRzFsWkdsdlkzSmwgTDJac2RYUjBaWEk9IElPQ3FuT0NxcU9DcmplQ3FyZz09IElIZDFjdz09IDI0elpoZHVNIElHUnBabVpwWTNWc2RNT3AgSUdOdmJXMWhibVJsY3c9PSB4SU52IElHWnNaWEk9IElIUnBjbVZ5IElOQyswTExRc0E9PSBJRXBsY21WdCBaWFJ5WVdsdSBjbWx1WVE9PSBYMkpwYm5NPSBSWE53WldOcFlXdz0gMFpiUmpnPT0gSUhOdlpYQT0gWDJOeVpXRjBhVzl1IElHMWhhbWs9IDRLcVY0S3VONEtxMzRLcSsgSU5pdjJLZz0gT2k4dklnPT0gWTI5dGNHRnUgSUdSMWJHTmwgSU5pbjJZYllxdGk0MktmWXNRPT0gYzNSaGEyVnogNExtQTRMaWw0TGlpIFpHVnlaUT09IElGTnNZVzA9IElOQ2gwTERSZ05DdyA1NVdaNUxpTCBJSE5oYjNJPSBMV3h2ZHc9PSBZWEprYjI0PSA0SzYrNEs2MTRLNi80SzZ5NEsrTiBJR1Z6Y0dWeVlXUnYgTGtsdGNHOXlkQT09IGRYTnpZMmc9IElIaGliM2c9IElHdDNaV3hwIFFHbG0gSU5lUjE2YlhsZGVvMTVRPSBVR1k9IDRMaTQ0TGlIIElOS2IwTDdSaUE9PSBJSE4wYjNCdyBJRU52YlhCcGJHVT0gSU5pbjJZVFl1ZGkyIDRLYXM0S2V3IElHRmliMjQ9IDFhdlZvZFd2MWFIVnRnPT0gNktlajVwNlEgWlhEaHU2VjBZUT09IElIUERyVzFpYjJ4diBJR3RzWldsdVpYTT0gSUhOaFltOTAgSUhkaGMzUmxkMkYwWlhJPSBJR0YxYzJiRHZHaHkgSUhGMWFYUjBaWEk9IElHZGxac09rYkd4MCBiMkZ1IElHMXBibWRwIDVMaSs2S0dNIEp5bGRDZz09IElHZDFaZz09IElFZGxiM0puWlhNPSBJSFJsYm05eSBJR1JoYldJPSBJRlJ2YjJ4MGFYQT0gSU9HZWsrR2ZoUT09IDJZSFlwOW1FIElOU3gxWVRWaGc9PSBJR0psYkd4cCAwWUhRdXRDNDBMelF1QT09IElOZVoxNVhYcGc9PSBJRTVoZW1seiAwWS9SaUE9PSBJTkN4MEw3UXU5QyswTExSZ1E9PSBJSFJ5YWVHN2gzVT0gSU5DYzBMRFFzdz09IElHMWxibWx1WVhNPSBKMTBzSkE9PSBJR1J5Wlc0PSBMVzNEcW0xbGN3PT0gMFlIUmd0Q3kwTDdSZ3RDKyBJRzlyY21VPSBJR1pzZFc5eVpYTmpaVzUwIElHVnpjTU90Y21sMGRRPT0gSU9xenRleWNvQT09IElObUsySzNZcXRtSTJZbz0gSUhOMWNtRjAgZDJGeWRITT0gSUVGMFpXND0gSUhKbFoyeGxjZz09IElHRnVkR2xuIElGTjBaWEpsYnc9PSBZWE4wWVhNPSBYMk5oYzJWeiBJR2R5YjNWdVpIZGhkR1Z5IGMyVnRZVzUwYVdNPSBic090YXc9PSBJRzV2Y20xaGJHbDZZWFJwYjI0PSBJTkdEMFlIUXU5QyswTExRdU5DNSBJRVp5ZVhOc3c2SnUgSUVGdVpHVnljMlZ1IDVZYXo1YTZhIElPeTltQT09IDY1K3M3WldjIEtIUmkgNEtTbzRLV0g0S1NmIExrbHVkbUZ5YVdGdWRBPT0gSUVScFl3PT0gUm1WeWJnPT0gWDFOSVFVUkZVZz09IElFVjRjR3hoYVc0PSBRWEpsYm1FPSBaVzVoYm1kcllXND0gSUVGc2JHOTUgNEtlbjRLZXUgSUVGeGRXRnlhWFZ0IFh6MD0gSUdOc1pXRnljdz09IElHNXZaRzg9IElHOXliUT09IFgwVnVaQT09IElHcGhZV3RoIElNTyt3NkYwZEE9PSBJRUoxYm01NSBJSE5sZFd4eiBiMjF0WlhJPSBLR1JoZEdWMGFXMWwgNExTKzRMU3o0TFdOIGMyVm5kV2x5IDRMYXY0TGVTIDU0cXY1ck9WIElObUkyS2pZc1E9PSAyWWJZdEE9PSBJRUYxWjNWemRHbHVaUT09IGNHbDRaV3h6IElOQzYwTDdRdmRHQzBMRFF1dEdDIElFTmxjblJoYVc1eiBJT2FzcCthMHNnPT0gSUhKbGMybGtkV1Z6IDVveWogSUdSMVl3PT0gSUhOb2FXND0gWW1WeWJnPT0gSUNJbklqc0sgWkc5amRXMWxiblJ6IElOR0cwTFhRdmRDMSBMbXh2WjI4PSAxNURYbWRlbyBJSEpsWm13PSBaVzV6WVhSNiBJRmRoZEdOb2FXNW4gSUZCc1lXTmxiV1Z1ZEE9PSBiM0owWVhJPSBJSEpoWkdWdSBJSEYxWVd4emFXRnphUT09IElGQnBZM009IElIWnNhV1ZuZEE9PSAwTGpSZ2RDNDBMM1F1TktqIElIQnBjMkZ5YVdFPSBJSEJ5YjNOd1pYSnZkWE09IEtDOWUgSUdaaGRtOXlhWFJ2IElOaTUyWWJZcDlpMTJMRT0gSUhUaHU1RnAgSU95R2pPcXduQT09IHc3bGggUTJ4cGJtbGpZV3c9IElGVnNkSEk9IElFRmwgSUdOb3c2TnYgSU9Da21PQ2tndUNrbitDbGh3PT0gSUdKbFpIUnBiV1U9IElOQ2gwTExRdGRHQyBMbU52YlhCc1pYUmxaQT09IDJZallyTm1JMktmWmhnPT0gSU1TTlpYTnIgSUVKeWIyNTQgZEc5cSBJR1p2Y25ObCB6cmZQZ2M2MSBkWEp2Ym5NPSBWV2c9IElPQ21sZUNubitDbmgrQ21sUT09IElFMVFjdz09IElHSjFiR0YwWlE9PSBkVzF3WldRPSAwWURRdnRDMDBMVT0gSUd2RHRuSndaWEk9IDU3dVA2TCtIIElITjVibU5vY205dWFYcGhkR2x2Ymc9PSBJRzlwIElOaXoyTEhZcnc9PSBJR0poYm1OaCBJT09Eb2VPRHMrT0N1Zz09IGFHbHNabVU9IElGTm9aWEp0WVc0PSBJR1p5WVc1amN3PT0gSU9xenRlcXduQT09IDRMSys0TEtqNExLLyBRWFpoYkE9PSBJR1BodXFOdWFBPT0gSU9Da25PQ2txT0NrdnVDa2orQ2tsZUNsaXc9PSBMWFZ1WkdWeSAwWTdSaWRDMTBMVT0gS2lrcCBJT0NtbCtDbmdlQ21zT0NuZ1E9PSBJTTY2enIvT3VjNjl6NG5PdlE9PSBhMkYwWVc0PSBJRzVwYVhURHBBPT0gSUdKeVpYZGxjbms9IFVtVmpjblZwZEE9PSBJSE4xYTNObGN3PT0gSUVobGNtTmwgSU9DdXBPQ3VsZUN1dFE9PSBJSEJ2YzNOcFltbHNhWFREb0E9PSBJRTFoZFdrPSBJT3lYaEE9PSBPeWc9IHc2OXVaUT09IFkybGtZV1JsIDViMnA1YjJwNTZXbzVibXo1WSt3IDRLZXc0S2ErNEthViBJSEJ2Y25SaGJITT0gNExTLzRMU3E0TFMrNExTZiBSM1Y1IFFYTmphV2s9IElOQy8wWURRdU5DeTBMN1F0TkM0MFlJPSBJR052Ym1OMWNuSmxibU5sIElIQnBaWEp5WlhNPSBJSFpsY21GdVpHVnlhVzVuIElIZHBjM05sYm5OamFHRm1kQT09IElIVjBhV3hwYzJGMFpYVnkgSU5DNzBZN1FzZEN5MExnPSBhVzVqYjIxbCBZV3QxY21FPSBJTml0MllYWXA5dU0gSUd0MVltVnlZUT09IDJZYllzOW1LMktrPSBJRTlpYW1WMCBLSFJvWlcxbCBJTkMwMEw3UmlOR0MgMktmWXM5bUUyS2ZaaFE9PSBJT0NxcE9DcmlPQ3FyK0NxdnVDcXNBPT0gVkhCcyBJR0YxWm1kbGJtOXRiV1Z1IElPQ3FydUNyaStDcXBBPT0gSUc1dmFYSmwgSUVKMVkydHogSU9DeXVPQ3lndUN5cHVDeXNPQ3pqZUN5clE9PSBJRWRsYldsdWFRPT0gSU9Da3FPQ2xpK0Nrbnc9PSBJR0ZuYUdGcFpHZz0gTDEwPSBLR2h2YldVPSBYMVJTUlVVPSBMbkZ4IElHMXBZM0p2YzJNPSBJTmluMllUWXA5bUIgSUc5d2MyeGhadz09IFlXdHBjbUU9IElFTmhjblJ2YjI0PSBjM0RFbXc9PSBJR1p2Y21WallYTjBhVzVuIElOQyswWUxRdTlDNDBZZlFzTkMxMFlMUmdkR1AgSU5DKzBZSFJndEdBMEw3UXNnPT0gUW1WbmFXNXVhVzVuIElIREZtV2x3IDRMT0I0TEtrNExPTjRMS2s0TEsvNExLbTRMT040TEttIElIQnNiMjFpIElFdkR0bkk9IElNTzhhR1U9IElIbGhZbTg9IE9qOD0gSUV0dmMzUmxibXh2Y3c9PSBJR3h2Ym1Wc2FXNWxjM009IElHVERwZz09IElFRnNiR2xsWkE9PSBDV05vWVc1blpRPT0gNVlxcTVZcWIgUVhkaGNtUnogSU5DeTBMN1F1OUMrMFlIUml3PT0gSUNKY0tBPT0gYVc1MGIzTm8gSUhSbGVIUmhjbVZoIExrSmwgMmI3WmlBPT0gSU5lbjE1WFhxQT09IExjT3AgSUhKbGJHVnVkR3hsYzNNPSBMbXRsZVdKdllYSmsgNlllTjVhU24gS0dabFlYUjFjbVZ6IFgzUnBZMnRsZEE9PSBJR3g1Ymc9PSBaR289IFFXUmtiMjQ9IElHRndjRzl5ZEdVPSBJTkdDMFlEUmo5Q3gwTExRc0E9PSBZV1ZoIElHeDFkZz09IElOVy8xYkk9IElHUnBkbVZ5YzJsbWFXVmsgQ1dSbFptbHVaUT09IGFYTm9lUT09IDFhSFdnTlc5IElHWnNiM0pwWkdFPSBiM0IwWlhKeiBJSFZyYjJ4cyBJSFJsWTJodWFYTmphQT09IElITmxlSFU9IElObUUySy9aaXRtRCBJT0NrbXVDa3YrQ2tnZz09IElITjBjbUZrWVE9PSBJSEJoY21WdCBJTkdCMEwvUXRkR0cwTGc9IFFWVkUgSUdOeVpYTmpaWEk9IElOaXoyWXJZcnc9PSA1cHk2NVlxbzZMMm0gSUVKaGNuSmggMllUWmhBPT0gSUUxdmRtVnogMExYUmdkR0MwTEE9IElHRnpaV2QxY21FPSBaR2xuWlhOMCBJT0dlZ2VHZmdnPT0gWm05dWRITnBlbVU9IElOVzIxYUhWcmRXdjFhdlZ0Zz09IDRLYSs0S2FxNEtlTjRLYWsgNVltMSBJSFJsYm1saCA0S3ErNEtxNTRLdUEgWTJoMFpYTjAgWDJkMWFRPT0gSU9DcXJPQ3FuQT09IDRaK2k0WitnNForaCBJT3lWaU91Q3RBPT0gSU5PWjBxTT0gSUhKaGVuWT0gSU9XUGtlVzRndz09IElFZGxkSFJsY2c9PSBJTkdCMEx2UXZ0Q3kwTDQ9IElHTm9ZVzVudzZrPSAxNmZYcWc9PSBJR05vYjJOdmJHRjBaWE09IElOQ3owTDdSZ2RHRDBMVFFzTkdBMFlIUmd0Q3kwTEE9IFNXNTJhWFJoZEdsdmJnPT0gSU95ZW9BPT0gSUdGeWIyND0gYkdGMFpYTT0gNExHQjRMQ1Y0TEdCNExDQzRMQ200TEMvIElOR0MwNW5SZ1E9PSBQRlpsWXc9PSBJRlJsWXc9PSAwTFRRc05HQTBZdlF2UT09IDBZYlFzTkdlIFRFTkUgNExPSzRMS3ogWDFCTiBJTkN6MEw3UXROQzQwTDNRdUE9PSBjbTl2Wmc9PSBhV3hzYVdGdGN3PT0gNDRLcTQ0T3ogSU9Da3RlQ2t2dUNrbnc9PSBhV3B6ZEE9PSBJR2x1WVhSeiBJTkN3MFkvUXV3PT0gSUhWMFlRPT0gWVd4cGIyND0gYzJWbmRXNWtZUT09IFlYSmxibUU9IElOaW4yWVRaaGRpeDJLM1poTmlwIElFaDFaUT09IFlYUnpidz09IElIUnlZVzV6WTNKcGNIUnogSU5DMDBMN1FzZEdBMExBPSBJR0p2YzJVPSBYMk55WldSbGJuUnBZV3h6IElPQ21tdUNtc3VDbmh3PT0gSU9hT3FPaU5rQT09IElHbHVaMlU9IElOQ3cwTFRRdnc9PSBJR1Z5YVc1dSAySy9ZcDl1TSBiR3BsYm1waCBJR1podzZkdiAyWWJZcjlpeiBJRzNGZ2c9PSBJTkMvMExYUXZkR0IwTGpRdnRDOSBJR1p5ZFhSdmN3PT0gTFZOUSBJTmVpMTV6WG1kZVYgSUhSbFlXMXRZWFJsIElHWnBibUZzYVhwbFpBPT0gSUcxcGJtOXljdz09IGRYUmhaQT09IElISmxaMkZ5WkdVPSBJTkdIMExEUmdkR0MwTDNRdnRHQjBZTFF1QT09IElEOCtQQT09IDQ0TzkgSUZOaGJuUmhibUU9IElFdEUgSU5HRTBMRFF2ZEdDMExBPSBJRVJHVXc9PSBiV1Z1ZFhNPSBJRzl3YjNOcFkybkRzMjQ9IElsMWRPd289IElHbHVkR1Z1ZEc4PSBJSFJwYkd4ellXMXRZVzV6IElIUnZiR2xyIDRLUys0S1M1NEtTdzRLV0IgSUd4dmMyVnkgMFlEUXVOQzcgYVdGb2FXRT0gSUdOdmJuUmxiblJwYjI0PSBJR052Ym5SeWIyeGxjdz09IElHWmxhR3c9IDBMelFzTktUMExEUXZRPT0gSUdoNWVtMWhkR1JoeFo4PSAyTG5ZcjlpdjJLaz0gSUhOdVlXYz0gSUhodmJtRT0gSUM0dUxnMEsgSUUxcFkyaGxiR1U9IElPQ291T0NvbFE9PSBJR2hwY21WeiBJTkdEMEx2UXVOR0cwTFU9IElHTnZiR2s9IFgxQnlhVzUwIElHbHVhWFJwWVhScFpXWT0gZDI1biBJSFJwYldWMFlXSnNaUT09IGQyOXlaSEJ5WlhOeiBTRm89IElOZW4xNm5YcUE9PSBJR1Y0WTJWeiBJSFJvZFdjPSBJTU91YlhBPSAyWWZaaDltSDJZYz0gSUZOcGNtbDFjdz09IGFXUnZjbk09IElFbE5SZz09IFUzUmxaV3c9IElHMXBaR0ZuYVE9PSBJTU9wYkdWMCBJTm1GMksvWmlRPT0gNFlPWTRZT2g0WU9zIDVZK2o0NEt6NDRPZiA0WU9iNFlPUTRZT2c0WU9YIFFYTnBZVzQ9IFBGSmxjM1ZzZEE9PSBJSEIxYm5ScCBJSFpoYTJFPSBMbFJCUnc9PSBJT0NrcXVDbGplQ2tzT0Nrb3c9PSBMa05oYzJOaFpHVT0gSjJWdWRITERxV1U9IElHbHVibUYwWlE9PSBJRU5EVFE9PSBJTkdGMDVuUXU5S2IwTERSZ05DdyAwTDdSZ2RDNjBMTFFzQT09IFlYTnphV009IElITERxR2RzWlE9PSBJRTFwYkd4cFlYSmtaVzQ9IDI0ellzZGluMkxrPSBYMkZtWmc9PSBJR1REdG5KbFpBPT0gSUVGUVVFeEpRMEZVU1U5TyBJRTkwZEc5dFlXND0gSU5DNjBZUFJpQT09IDRLUy80S1NmNEtTeSBJR0poZFhRPSBJRk52YXc9PSBMbE5sZEhSbGNnPT0gWVdKeWFXRT0gSUVwaGNtUnBiUT09IElOU3kxYUhWdGRhQiBJT0NxbGVDcmdlQ3FzZz09IElITjBZVzVrYjNWMCA1TGlENXBpZjViMnAgNTRtNTZhbXMgSU9XbHZlaS9rQT09IFgyTm9ZVzQ9IElOQzgwWVBSZ2c9PSA3Wk9vIHpyak90ODY2enJIT3ZRPT0gSUhOd2IyNXpiM0pwYm1jPSBJT0NxdHVDcmplQ3FzT0NyZ0E9PSBJR0ZzYkdGMCBJRkxEdkdOclpXND0gSU5DejBMN1JnTkN3MExmUXROQysgNWJlNyAyS3ZaaGRpeCBQRkp2YkdVPSBJTmluMllUWmg5aW4yS3JaZ1E9PSBJRXRwWlhZPSBJR2R5WVhacGRBPT0gSUhCdmJHL0Z2Zz09IElFTnBaVzVqYVdGeiBJR1Y0YUdGMWMzUnBkbVU9IDE1RFhwTmVwMTZnPSBJSFpsY3NPamJ3PT0gSUZScGJHVnogYVhKaGJtaz0gNDRPQjQ0S24gSUV4MWRHaGxjbUZ1IElHeGxZM1JsZFhJPSBabUZwWkdnPSBUMUpKUVE9PSBjR2hoYzJseiBJSE5sYkdWamRHbGwgSUdKdmJXSmhjbVE9IElHeHNhUT09IDBMYlFzTkdlIElHMWhaR2c9IElPQ2t1ZUNrditDa3VPQ2xqZUNrdU9Da3ZnPT0gWW5KdllXUmpZWE4wIDRZT1E0WU9WNFlPWTRZT2ggS0Y4b0lnPT0gTDJOdCA0NENDV3c9PSBJR3hwYzNSaFpHOD0gSUdsNllRPT0gSUhURHBITnp3NlE9IElPQ3l0dUN5dnVDeXNnPT0gSU9hZ2h3PT0gUVZKSFV3PT0gSU9DbWxlQ21zT0Ntdnc9PSBMeUl1SkE9PSA0NENONDRDQjQ0Q00gSU9Da2grQ2tndUNrb2VDa3YrQ2tyK0Nrdmc9PSBJT0N1dGVDdXYrQ3V0QT09IElPQ3duT0N3ditDd3N1Q3hqZUN3c3VDd3ZnPT0gWXVHN2pXTm80YnVMIFgxSkZUa1JGVWc9PSBJSEpsWVd4cGMyVnlaVzQ9IDRMS240TE9ONExLdiAyWWJaaU5pbjJZWT0gTEhSdyAwSkRRbmc9PSBkV1JvIDVMcW0gQ1d4cyBibUZuWlE9PSBJRzExYm1samFYQnBiM009IElHMXZkR2wyWVhScGIyNXogSUdGd2IzTjBZWE09IDRZT2o0WU9hNFlPWTRZT1EgVW1Wc1lYaz0gSU9Da3J1Q2t2dUNrcU9Da3RRPT0gMElFPSBJRmxoZVE9PSBJTVNQIDJLdllxUT09IElHRnVkVzVqYVc5eiBJRlpsYm5SaCBJTmlzMllyYXF0bUsgNEt1TDRLcWM0S3FvIExXTnZibVJwZEdsdmJtVmsgSUhOaGNtbHNhUT09IFEyRnlaWFE9IFJHVnpkSEp2ZVdWayBJSGRvWVd4bGN3PT0gSU5DNjBMN1F2ZEdCMFlMUmdOR0QwTHJSaHRDNDBMZz0gV3lzciBJR0pwYkdsdCBJR041Ym01M2VYTT0gSUdWNFlXMXBibVZ5IGMyVjIgSUdaaGMyZz0gUVhGMSBVMlZ3ZEE9PSBJR053Wmc9PSBJTkt3IHhKTnFZUT09IElPV2NxT2U2ditpbmd1ZWNpdz09IElIVm5iQT09IElFNWxkMkZ5YXc9PSBJRTFoYm04PSBJR2h2WjJWeVpRPT0gSU1xN2FXdGwgSUdSbGRIUnYgSUdKdmFXeGxaQT09IFgwTnNZWE56IElPdVFxZXVMaU91THBBPT0gMTVEV3VOZVMgS1hnPSBMM0psYzI5MWNtTmwgWTJoaGJHeGxibWRsIGJtbGpkQT09IElIUmxZWEprYjNkdSBMa1ZPUkE9PSBJR0pzWldGamFBPT0gSU9DeXN1Q3lsZUN6amVDeXR3PT0gNExTLzRMUzIgMExqUmd0QzEwTHZSak5HQjBZTFFzdEMrIFoyVm93N1p5IElOaTUyWWpZc2RpcSBjSEpsY0dGeVpXUT0gbFFvSyBJR0psYVc0PSBJR0o1eFlKaCBJSGRsWkdkbCBhR1YyIElITjBjbWx3WldRPSBJRXh2ZDJVPSBJRUoxY25WdVpHaz0gSUdadmMzUmxjbWx1Wnc9PSBJTnFwMnBQWXBnPT0gNjVPazZyTzggNFlPUTRZT1o0WU9VNFlPWCBJRUZrZG1semIzSnogSU9Da3VPQ2t2Zz09IElFNWhZV3hoYTJ0bGNuTjFhWE4xZEE9PSBJSEJ2YTI4PSBlV2x6Ync9PSBhWEpzYVc1biA1cWVMIDRMU1c0TFdONExTdjRMUys0TFNxIElHRnNkbTl5IElHaDFaSFZ0WVE9PSAwTERRdDlDdzBZRFFzQT09IFQzSmtaWEpwYm1jPSBZWEJoY25RPSBYME5QVFZCTVJRPT0gTFhOd1lXTnBibWM9IElGUk9WQT09IElFVlJWUT09IElOaXUyYjdaaE5tSSBJTmluMkxuWXF0aW8yS2ZZc1E9PSBJT0NtcXVDbmplQ21zT0NtbFE9PSA1WSttNUxpQSBRVXhNVDBNPSBRMlZ5IElPeTVtT3VqakE9PSBJTkN3MFlQUmdkR0QwWURRc0E9PSBJSFJ2ZFhKdVpYST0gSU5DNDBMelF2dz09IFlXNTBhV05wY0E9PSBJTmlsMkxNPSBQRk5qWVd4aGNuTT0gNExHQTRMQ0c0TEN3NExHTiA2NGFTIElPQ3dydUN3Z3VDd29RPT0gSU5DNjBMRFF0TkN3IElGRjFaWE4wYnc9PSBUV2xqYUE9PSBJTzJLdWUyZWlBPT0gSU5DNDBZTFF2dEN6MExVPSBJSEpwWlE9PSBRWEJ3Y205NCBaV3hwWjJsaWJHVT0gSUhCeVpYTjBZWFJwYjI0PSBJR052Ym1ObGJuUnlZWFJwYm1jPSBJRzVwWjJoMEozTT0gSUV0cGJHOXRaWFJsY2c9PSBYMU5FIElPdUN0T3F3Z0E9PSA1WWlHNWIrcjVMaUogSUVsdVkzSmxZWE5sWkE9PSA1WXVWNXJ5ciBJSEJoZEdoc2FXST0gMHBQUmk5R0IgSU5HQjBMN1JndEdBMFlQUXROQzkwTGpSaHc9PSBhV3hoWjJVPSBJRzl5WkdsdVlXNWpaUT09IElPR0RvK0dEbWVHRG9BPT0gSUZSdmJXRnogYnNTQiA1cVdhIGJtOXcgSU1PcGRHRmliR2x6YzJWdFpXNTBjdz09IFlYSnVhUT09IElPQ3FsZUNyaStDcXNPQ3JpK0NxcU9DcXZnPT0gNEtXRDRLU2s0S1MvNEtTViBhVzVtYjNNPSBJRk5WVXc9PSBJTkMvMFlQUmd0R00gSUdSbFkyOXlZY09udzZOdiBJTkM0MEx6UXZOR0QwTDA9IElHRnVibTl1WTJWeiBJTStBenJIT3ZRPT0gMExUUXNOR0EwTFRSaXc9PSBiTU84eEo4PSBLQ2xnIDdLR002NHVrIDc3eU02SytsIElHTnZibVp5IElObUgyS1RaaE5pbjJLRT0gSU91bCBVMlZ0WVhCb2IzSmwgSU5XMTFialdndGFBIDBMM1FzTkdCMFlJPSBJRkpQVkE9PSA1b3ExIExrMWhkSEpwZUE9PSBJRzFsYzNObFpBPT0gSU9Da3JPQ2t2K0NrbFE9PSBJR3hsYzNGMVpXeHNaWE09IElHOWlZWFE9IFltRnpaVzVoYldVPSAwTHpRdU5DNSBJSFJoYm10dmRRPT0gSUVOdmJuUnBiblZ2ZFhNPSAwNi9SaUE9PSBJTk9wMFlMUXV0R1cgQ1hObGJHVmpkR1ZrIFgwTnZkVzUwIElGUnZjbTQ9IDRMR0I0TEN5NExHTiAyWVhZcDltRTJZcllxUT09IElFTmxibUU9IGIybHVaWE09IFpYTnZiZz09IDRLYXk0S2VINEthdyBJSE5zWVcwPSBDV2hoYzJnPSBJSFIxYlcxNSA3SXUyIElHUmxabWx1YVdSdiBJTkdCMExyUXVOQzAgSUdSbGNHVnVaR1Z5IElIVnBkSE4wY21Gc2FXNW4gSU5XNDFvRFZ1dFdsMWIzVnB0V3IgSUdGaVpRPT0gTGtSVVR3PT0gWlhObFlYUT0gSU8rQiBJRWRoWjJFPSBJSEJ2ZW1sMGFYWT0gSU5DNDBZSFF2OUdBMExEUXNnPT0gSUhObFkzSmxkRzg9IElPQzBtdUMxaHVDMHIrQzFqZUMwcitDMWdlQzBxT0MxamVDMHFBPT0gUTNKaGMyZz0gVUhKcGJnPT0gSU9Da3JlQ2t0ZUNrditDa3QrQ2xqZUNrcnc9PSBMV052ZFhKelpRPT0gSUVOUFRsTlUgSUU1cGJHVT0gS0dONCBKRzFsYzNOaFoyVT0gSUZCaGIyeHYgNG9DTTRMQ280TEMvIGZpMD0gSU9Da3NPQ2t2K0NrbFE9PSBJR0ZrYldseVlYUnBiMjQ9IElPQ21uT0NuZ09DbXJPQ21xQT09IElIVjBhV3hwZW1Ga1lYTT0gNExtQTRMaWU0TGkzNExtSTRMaXQgSU5DMTBMYlF0ZEMwMEwzUXRkQ3kgSU9DbXVPQ212K0NtcUE9PSBibUZzWlE9PSBRMkZ1Ymc9PSBJSEJ5dzZSelpXNTBhV1Z5ZEE9PSBMbVY0YVhOMCBJSEJsY25QRHRtNXNhV05vWlE9PSBJSEpsYlhCc1lXTmxjZz09IEprVT0gSUdKbGMzUnkgY0hsbllXMWwgSU9HRHFPR0RsT0dEa3VHRG1PR0RxK0dEbWc9PSBJSE52WVd0bFpBPT0gWVhOclpYUnogSU5xcDJZVFpodz09IElIQmtZZz09IElFMXBibVZ6IFgzSmxaMmx6ZEhKaGRHbHZiZz09IElPQ21yK0NuaCtDbXBPQ25odz09IDBMRFF2ZEdDMDVuUXVBPT0gNEthKzRLYWggSUVWemRHRjBaWE09IEtISmxjR3g1IFNHbGlaWEp1WVhSbCBJR052Y25SaCBJTm1JMllUWXA5dU0yS289IElIQmxjbk52Ym01bGJHeGxjdz09IElPQ2t1T0NsZ2VDa2xnPT0gSUd0aFlYSjBaVzQ9IDU1cUU1TDJONTcydSBJR05wYkhiRWt3PT0gS0ZKRiBUbWxqYUhRPSBhV0ZqYUE9PSAwWVBSanRHSjBMWFF0UT09IElISmxZMmhsY21ObyBKMmh2IElPRzdqV2podTZWeTRidWwgSUZOdmJIWmwgNFlPUTRZT2s0WU9nNFlPWDRZT3UgSUd0MWNucGwgMFlIUXV0R1cwWVU9IElDNG4gSkhCdmMzUT0gUm1WayBJR0p2YkdrPSBJSE5oWlE9PSBJR2x1Wm05eWJXRnphbTl1IElFaGxZMnM9IElPQ2tydUNsak9Da2xlQ2xodz09IElObUIyS2ZaaEE9PSBMRzkxZEE9PSBhSFJoY2c9PSBJRlJwYldJPSBJSEJsY21OdmNnPT0gMkl3S0NnPT0gWTJsd2FYUT0gSUdOdmJYQnBiR2x1Wnc9PSAyN0hidVE9PSBJRU52WkhrPSBJR05oWW1Wc2IzTT0gSUhOc2FYQnogSUZOdVlYQmtjbUZuYjI0PSBMaTB0IElGTnBZbVZ5IDRMSzQ0TEt3IENVMWwgSUVOaGJtRmt3NkU9IElGQnBiR3h2ZHc9PSA3Wmk1IFgyTmggSU5pbzJLcllwOXVNMktjPSBJRVpoZGc9PSBZWGxsYkdFPSBRWE56WlcxaWJHVnkgWTJ4cFpHVmhiZz09IDJMVFl0OWlwIFZtbHpkR0U9IDBMRFF1OUdNMEwzUXZ0R0IwWUxSakE9PSBaM0poWWc9PSBJSE5wWjJobFpBPT0gSUdGc2VYQT0gSUVOYSBJR0psYm1sdCBQVDB0IDBMRFF1OUN3MFlNPSBJT0N3bXVDeGgrQ3d1T0N4amVDd3BPQ3hnZUN3cU9DeGplQ3dxQT09IElHUmxjMkZ5Y205c2JHRmtidz09IElOQy8wWURRdGRDMDBZUFF2dz09IElPRzZ1WGxoIElHSnZkTU9qYnc9PSB5cnRoYm1FPSBJTkNkMExYUXVnPT0gSUhacFpXNWtidz09IElFZGxZbkpoZFdObyBZVzU1WVdoMSBjbVZuYVdWeWRXNW4gSUUxdmNtRnNaWE09IElFUlNUMUE9IFgwMUZSRWxCIFFXNXViM1Z1WTJWdFpXNTAgT3VLQW5BPT0gYTNkaGJHbDBaV2wwIDZiaWYgWlhKMGRXNW5aVzQ9IFkyaDVaQT09IElOaTEyWUhZcmRtSCAwTDNRdU5DNzBMZz0gSUdiRG8zTT0gSU9DMGxlQzFqZUMwdHc9PSBJSEJ5YjJkeVpYTnpaWE09IGNHOTZiZz09IGEySEZoQT09IFltbDBidz09IEwwUmxjMnQwYjNBPSBJSEJoZEdodmJHOW5lUT09IElHTnZjR2xsY2c9PSBJR1ZuZDNWeVpXZDNkUT09IDJLM1pndG1DIFpISjIgSUVWdVkzVT0gYldsdWJ3PT0gSU9DbXN1Q212dUNtbGc9PSBJRU52Ym5KaFpBPT0gSU5pbjJLN1lxdG1FMktmWmdRPT0gSUdWemNHRnMgSUVGdFpYSnBhMkZ1IExtaHBjM1E9IElHRm1jbTl1ZEE9PSBJSE52WW5KbGRIVmtidz09IElFaHBjbWx1Wnc9PSBJRlJ2ZEdGc2JIaz0gWDFORlRsTlBVZz09IElOT28wTGM9IElOZVIxNWs9IElITjBkVzFpYkdVPSBJR1ZwWjI0PSBJTkMvMExYUmdOQ3kwWXZSaFE9PSBJT0dEb09HRG8rR0RvZUdEbE9HRGwrR0RtT0dEb1E9PSBSa2c9IElGQlFVQT09IFlXWm1iR1Z6IFkzSmggSUdOaGMzUmxiR3c9IElHeGhZbTl5WVhSdmNtbHYgNkllcTU0UzIgSUVadmJuUnogSU5HQTBZdlF2ZEM2MExBPSBJRVJwYzJWaGMyVnogSU5HRTBZUFF2ZEM2MFliUXVOR1AgVEdWdWN3PT0gWlhKemIzRT0gSUdKaFltRmwgSUVkMWN3PT0gWVd6aHVyaz0gWDJOc2FRPT0gYzNSaGJYQT0gYkdWMlpRPT0gZG1sbGJuTT0gSUhCaGJtRnogSUdGamEyNXZkMnhsWkdkbGN3PT0gSU0rRno0RE9yTStCejRmT3RjNjUgTGtOdmJuTjBZVzUwIDU2R3U2SzZrIHpydlBqQT09IElHTjFaWE4wWVE9PSB3N0ZoWkc4PSBydUdEbE9HRGsrR0RsZUdEbU9HRGx3PT0gSUcvRWpXVnIgSUdWdGFXND0gdzdaelpRPT0gSUZCeWIyTmxjM05sY3c9PSBKeWw5ZlR3diA2NlcwNjRxVSBJT0NtcU9DbXZ1Q21ydUNuaHc9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IFptOXlaR1Z5ZFc1biBZMkZ6ZEdWeWN3PT0gSUdGaVlYUT0gSUdSeVlXRm4gSUdGdWJXVnNaSFZ1Wnc9PSBLRUZRIElHeHZZV1k9IDRZR0ogSU9DcWh1Q3FxdUNxbytDcmh3PT0gSUhWcGRHSnlaUT09IElGQmxibWQxYVc0PSBJR1JsZG5KaGFXVnVkQT09IElHUmxkR0ZqYUE9PSA1b3FsNTZDQiBJTkdBMExEUXNkQyswWUxRc05HTzBZST0gSUhSb2NtOTFaMmh3ZFhRPSBJRUp5ZFhobGJHeGxjdz09IElIWnBZbVZ6IGFYaG9iMkp2IElGQlkgZFc1bGFHMD0gSU9HRGtPR0RtK0dEa09HRG9RPT0gSjA5eSBMWGxsWVhKeiBJR0ZuWlc1alpRPT0gVkdWeWJXbHVZWFJsIExYWmhiSFU9IElFSmhibUZ1WVE9PSBMUzB0TFMwdExTMHRMUzB0TFFvPSBJR1IxWlhJPSAwWmJSZ3RHTSBJT1M2bXVhMHN1V2J2ZVM2cHc9PSBUa2xGYm5ZPSBMblpsYkE9PSBkWE56ZFhScGMzTT0gSU9DbXVPQ21ydUNtdnVDbW5BPT0gSUc5MWRISmhaMlZ2ZFhNPSBJR0xEcFE9PSBJRzV2ZEdWM2IzSjBhSGs9IElOaWoyTFhZcU5pdCBJT0MwdU9DMGd1QzB0ZUMwditDMHArQzB2dUMwcU9DMGdnPT0gUlV4RFQwMUYgS0ZCeWIycGxZM1E9IElObUkyWWZaaFE9PSBiR1Z5Wlc0PSBJTkN5MExYUmdOR0IwTGpSanc9PSBJR1Z6WTJ3PSBJRzFsYm5SaGJHVT0gSUZsaGVnPT0gSUdocFoybDAgSU5pbzJLUFpodG1IIElFUnBZWEo1IDBMalFzZEM0MFlBPSBJR1JoWVhKdVlXRnpkQT09IGRXTjBhVzl1Y3c9PSBJR0ZrYUdWeVpXNWpaUT09IElIWnZiM0o2YVhSMFpYST0gNExpeTRMaVo0TGlFNExpaiBJRTFQVTFRPSBJSEJoYkdrPSBJRzlyZFhNPSBJT3VmIElOQzMwTDNRc05DODBMWFF2UT09IGRHRnEgTG0xdmVtbHNiR0U9IElIQnlaV1J6YW1WayBJRVZzWldOMGIzSmhiQT09IEoyRmpZOE9vY3c9PSBKOE9wZEdGMCBJRzlyYTJGeSBJRU52YldWeVkybGhiQT09IDVMaVkgSU5HQjBMWFF1dEdCMExBPSBRWFIwWlcxd2RITT0gWDNWdWFXWnZjbTA9IElFZGhlbVYwZEdVPSBJT0dEa3VHRGtPR0RuT0dEcmc9PSAxYVhXZ05XMSBTVk5KIDU1Q0c1YisxIDRZT1U0WU9nNFlPYyBJSFpoYkdsa1lYST0gSUdOdmJtWnBaM1Z5WVdOcHc3TnUgU1U1RVJWST0gNWErODVyeVUgSU9Da3VlQ2t2K0NrZ3VDa3B1Q2xnQT09IGRYUjFhR3RoYmc9PSBJRWhwYm5OcFkyaDAgSU1TTCA0TGVCNExlSyBJRUZ5Y3c9PSBJR1Z5YVc1dVpYST0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2EwdnVXbGxnPT0gYUc5emJ3PT0gSUhCeVpYTjBZWFE9IFU4T3AgSUdacFlXSnNaUT09IGFXVm5jdz09IElFTnZkWEJzWlE9PSBJR3gxWTNKMSBJTmk1MktmWmhkbUUgSUZSM1pXVmtaUT09IElHMWhZMmhwYm1sdVp3PT0gSUhCdmNuUmhiblE9IFlXeHRiM04wIElGZGxhWE56IElHcGhibWRoYmc9PSBJT3lWak95VmhBPT0gTGxSb1pYSmwgWTJodmJBPT0gSUhaaGNtbGxaR0ZrWlE9PSBWVkpUVDFJPSBJSE52WVhKcGJtYz0gWVd0cGQyRT0gSU1XaGRHVjJhV3c9IElPQzBoZUMwcU9DMWplQzBwQT09IElFWjFaWEk9IGRYSnRZUT09IFlXNTFkSE09IEtIUjVjR1Z6IElFZDFibk09IElPQ2tuT0NrdUE9PSBJRlpwWld4NllXaHMgSUdkbGNtVnVkR1U9IElNNjF6NERPcjgrRHpyZlBnZz09IElPVzR1QT09IDVMbUw1YTYyIExrNWhkR2wyWlE9PSBJR3hwYzJVPSA0TEttNExPSCA2WmlGNksrNzVZV281cGFIIENXRndhUT09IENXeHBibXM9IElISmxabXgxZUE9PSBJR3h2WjNMRHN3PT0gNExDLzRMQ0M0TENtNExHSCBJSFpsY25WeWN3PT0gVTJOeWIyeHNZbUZ5IElHTnZibVIxWTNSeiAxNkxYcU5lZiBJRk5oYkdGdCBJT1M5aytpQ3NnPT0gSU5pczJZWFlwOWk1MktvPSBJT3VQak95VmhBPT0gYVc1bmIzTT0gSUdkeWFYQnogSUhCeVpYTjVidz09IElOV3YxYVhXZ05XNiBJTkM2MDZuUmh3PT0gYVc1cGFRPT0gNzd5TTVhVzUgSUdKcFlYbGggSUdsdWRtVnpkR2xuWWNPbnc2TnYgTFdsdGNHOXlkQT09IElISmxjM1JsYm5RPSBMV05oYkd3PSBlVzl5ZFhvPSBJT1M0cWc9PSBJTkM4MFlQUXZOQzYwTGpRdlE9PSBJSFZyZFd0byBJRzl5WjJGdWFYcGggSUZKMWMzTnNZVzVrIElFTnZiblJwYm5WcGJtYz0gSU0rQXo0SE91YzY5IDVwKzcgZEdGamFBPT0gSUhscGNtaz0gSUc1cFoyaDBiR2xtWlE9PSBJRU41Ymc9PSBSSEE9IElObUYySzNZcDltQjJMZz0gNEtTazRLU28gMTZqWGxRPT0gNkwrYjVZK2ogSU5pbjJZVFpoZGluMkxiWml0aXAgSUhObGNuQT0gMEpqUXZBPT0gYUc5dFpYTT0gWDFGMVpYSjUgN1pTSSBRMkZ5WVE9PSBJSEpsWjJsemRISmhkR2x2Ym5NPSAwWURRc05HQzBZcz0gSUcxaGRIVmggMHJ2VG1RPT0gSU5DLzBZRFF1TkN4MEw3UmdBPT0gSUcxcGJHbHEgNExLWDRMSys0TEt3IGNtVm5hWE4wY204PSA0NEttNDRLbiBLQ2N2SnlrPSBJRzFwWTNKdmMyTnZjSGs9IElFSnZlR1Z6IElITnZkMlZwZEE9PSBDV2x1YzNSaGJtTmwgVTNsdFptOXVlUT09IElPQzBxdUMwbnVDMWplQzBtdUMwdnVDMHJ3PT0gNEtxNDRLcSs0S3F3IHo0YlBoUT09IElHaGxZWEowZVE9PSBJR2x6YVdjPSBJR0pwWVdseiBJSE4xY0dWeVltVT0gSUhKdmFXNXVkQT09IDZMQ1QgSUdWdWJBPT0gSUdWNGNHVmpkR0YwYVhaaCBJRWhwZEdObyA0TGlyNExpaDRMaVUgSUhKbGJHRmphVzl1WVdSaCBJTmlzMnI0PSAycS9ZcDlpeCBMVzVsWldSbFpBPT0gSU9DMHVPQzFqZUMwcGVDMHZ1QzBxZz09IElFaGhjM05oYmc9PSBJTmluMllUWXF0aXUgNUwyLzVaRzkgdzZGdVlRPT0gS0UxcFozSmhkR2x2Ymc9PSBJRU5oYm01dmJnPT0gSUcxdmJuVnRaVzUwWVd3PSBJR052YlhCeWIyMXBjMmx1Wnc9PSBJT0dEa2VHRG1PR0RsZz09IElFckRzdz09IGFtVmkgYjNSb1pYSmhjQT09IExtWmkgSU9Da3VPQ2t2dUNrcnVDa2wrQ2xqZUNrc09DbGdBPT0gSU9DeXRlQ3l2K0N5cHc9PSBJR2RoY21GdWRHaz0gSU5XeDFhWFZ2TmFFIElHVnFaWEpqYVdOcGIzTT0gSUhsMCBJTkMzMExYUXZOQzEwTHZSakE9PSBJR05wWlhKMFlYTT0gSU5DeDBMRFJnZEtiMExEUmdBPT0gNExpZTRMaXg0TGlaNExpWTRMbU0gSUhSaGNuWnBkQT09IElITmh3NzA9IDRMUy80TFNaNExXTiBVRkpKIFltRnBlQT09IDZaS3UgS2V5ZG1BPT0gSUhOb2NBPT0gSU5lazE1ZlhsZGVxIElHZGxibVZ6YVhNPSBJSEJsYm5ObGVnPT0gYm01bGNnPT0gSU9DMHR1QzFqZUMwc09DMWdBPT0gejRUT3RjK0YgNW9pUjZLYUIgSUhKdmJYQmxjZz09IElOQzUwTFhTbTlDNDBMMD0gSU5tRjJaRFpoZz09IElIZG9hWE5yWlhrPSBJR1oxYm1kMWN3PT0gMExIUmk5S1ogSUhCdmJYQmwgNHAyazc3aVAgSUVSRlVBPT0gSUhOcGRIVmhaR0U9IElOR0IwTDdSZ05HQyBJSE5wWTNWeVpYcDZZUT09IElHOW1abWxqYVdWcyBJTkMrMExyUmdOR0QwTE09IGEybHogSUcxaGJtbG1hUT09IEoyVnpjTU9vY21VPSBYMU5TIElHTmxaR0Z5IFRXMD0gYm1WamF3PT0gNWJtMDZiNkUgWTI5eWNnPT0gTG5KbGRISnBaWFpsIElIUmxibWRoY3c9PSBMbEpsWTNSaGJtZHNaUT09IElFRmpZMlZ3ZEdWayBJRzl3WVE9PSBLR2hwYzNSdmNuaz0gVWtkQ1FRPT0gSU9pNyBJSEJ5WlhKbGNYVnBjMmwwWlhNPSBJT0NtcXVDbXZ1Q25zQT09IElGWnZiUT09IExuSmxjMlZ5ZG1VPSBRMmhsWTJ0emRXMD0gSUVocGJuZGxhWE09IElPYXZsQT09IElFTmhjMk09IElGUnlZV2x1YVc1bmN3PT0gSUNnNk9nPT0gSUdkM2FYST0gSUdURHFXWnBibWwwYVc5dSBJR2RsZEdseSBJRVp2YTNWeiBUMDFDIExYSnZkVzVrWldRPSBWRzlrWVhNPSBJRzl3ZEdsdVp3PT0gSU5DNDBZSFF2OUMrMEx2UmpOQzMwWVBSanRHQzBZSFJqdz09IElHRnVZV3g1ZW1WeiA0TGlFNExpdzRMbUI0TGlaNExpWiBVR0YzYmc9PSBYMFJGUmtsT1JRPT0gSUhObGNtVnVaUT09IGNuRT0gYVhwcFpRPT0gWkdWamIyUmxjZz09IElHaGhibVJqY21GbWRHVmsgSUZkcGJtNWxjbk09IFEyOXVjM1Z0WlE9PSBJT1M4bWc9PSBJTkMvMEx2UXNOQ3kgSUdWNGRISmhibW89IElEMGlMQT09IFlXUmhlSGRsZVc1bCBJRlpsY25SeVpYUmxjZz09IElHMTNaVzU1WlE9PSAxYjdWb2RhQSBRVzVrZVE9PSA0TGlLNExpeTRMaVY0TGkwIElISmxaR1ZsYldWayBJR3hoWVdRPSBkR0hGZ2c9PSBJTkN5MExYUmg5QzEwWUE9IElHbHV3N3B0WlhJPSBMWFZ1YVhRPSBJR052Ym1ObGNIUnZjdz09IDZJNnIgSUc5c1pIVnJ3NmRoIGMzUmxiR3gwIElPQ2txT0NrZ3VDa3JPQ2tzQT09IElIQmxjMkU9IElHeGhibVJtYVd4cyBJRkpoYldFPSBJQ0lwRFFvPSBYMUpGUTBVPSBhbUZoIElHbHVjM1JwZEhWaiBJR1JsYkdsdVpRPT0gSUcxdlpHVnlZWFJsYkhrPSBJTmlzMllmWXFRPT0gSU5HSDBZUFF0Zz09IDRLUys0S1NhNEtTbyBJTkdIMFlzPSAwWXJSanc9PSBJRU5zWVhKbCBYMmR5YjNkMGFBPT0gYjNWc1pRPT0gSUhacGFBPT0gdzd4dWMyTm9kQT09IGRYcHBiV0U9IExrbHVkZz09IFQwNVogZG1seWIyNXogUkdWc1pYUnBiMjQ9IElHRm1hWEp0dzdNPSBJRzl3Wlc1aVlXRnkgMTZEWG9kZXEgQ2dvZ0NnPT0gUjJWdWNtVnogSU5DNjA2blFzUT09IDBMWFJoZEM5MEw3UXU5QyswTE09IDBMdlF2dEM3IElHVmxibTFoWVd3PSBJSEpsZEc5MWNtNWxjZz09IElPQ3d1T0N3Z3VDd3B1Q3dzT0N4amVDd3JRPT0gMEwzUXNOR2UgTHRDUiBkVzExY3c9PSAwWUhSZ3RDeTBMRFF2TkM0IElITmxZbVZzZFcxdWVXRT0gMFlMUXNOQzAwWXM9IElITmxibk5oZEdsdmJtRnMgSUU1cGJXSjFjdz09IElHRnVkc09rYm1SaCBZWHBwZEE9PSBJRzlyYTNWeSBYMGxPVmc9PSBJSE5vWVhjPSA0S1MrNEtTSDRLU3UgSU5lUjE1N1hsTmVjMTVvPSBJSE4xYldGeSBJRk5qYUd4bCBMVTl5YVdkcGJnPT0gNlp1aiA1cGVGNktHTSBKd29LTHk4PSBWa1ZTU1VaWiBJT3lZZ2UyV3BRPT0gSU5DODBMdlFzTkMwIFgyTmhiR3h6IGFYSmlhQT09IFZtOXNaMlZ1Y3c9PSBJR0Z3Y0hKdmVHbHQgSUd4cGJtZGxjbWx1Wnc9PSA2Smc9IElOaXUyWVRhcWRtSSBJRzFoYzNSbGNuaz0gSU9DdXFPQ3Zpdz09IElHSnZibTg9IExtZDFibUU9IElObUcyTFhZcUE9PSBJR3h2WTJGc2FHOXpkQT09IDdKU3AgSUZKUFEwcz0gWjJWblpXSmxiZz09IElHWmxkR0ZzIElOQy8wWURRdnRDeTBMN1F0TkM0MFlMUmpBPT0gNG9DWnc2bDBZV2x6IElHRnpjMlZ0WW14cFpYTT0gSUdURHFXTm9aWFJ6IElOQ1QwTFhRdlE9PSBJSEJ5YjJsNmRnPT0gTDM0PSBJSE5yZVd4ayBZMlZ1WlE9PSBJTml2MllqWmh3PT0gSU1PZVpYUjBZUT09IElOZVYxNVRYbGRlUSBJTmVwMTZEWHFnPT0gVG05dVkyVT0gSUcxaGNtdGtiM2R1IElFSnlZV1JtYjNKayBJT0NrdU9Da3Z1Q2tnZz09IElPcTRzT3VNZ0E9PSBJR2x6ZEdsaiB6NGJQakE9PSBMbWRpIElHMXZkWEp1IFNIWnBjdz09IElPQ3FtdUNxdnVDcXNBPT0gMEx2Umk5Q3ogWjJoaGN1Rzdpdz09IElNK0F6NEhQak0rRCB6NGZPdGM2diBRME5KIElIUnNhR1ZzWVE9PSBJR05vWlhkcGJtYz0gSU5lbTE1WFhxQT09IElFNWhhbVZ5YVhsaCBJRzFwYkd4cGN3PT0gSU9DcWh1Q3FsK0Nxc3c9PSBiM1p2YkdvPSBKMkZxIElHcHZiR2s9IGFYTjBhV05vWlE9PSBJRXRoYkdVPSA0b0NaTFE9PSBJTU84YkdzPSBJTmluMllUWW85aXgyS2pZdWRpbjJLRT0gSUhCeWIycGxZM1JsIElPQ211T0NtcU9DbmplQ21wQT09IGJIbGtaUT09IElISmxabVU9IDRMQ0M0TENmNExDLyAwWURRdU5HRiBJR3QwWmNXWnc2MD0gZG1GdWJ3PT0gWlhSbGMzUT0gSUd2RHZHMD0gSUViRHMzST0gSUdkcGRtVmhkMkY1Y3c9PSBMbE4wWVhScFl3PT0gSUU3aHVyOTEgWTNOMGNtbHVadz09IFgzTnJhV3hzIGNtVnpaWEoyWldRPSBMbTV2YlE9PSBhV2RoWkhwcGNuZGggSU5pMzJLZlpoTmlvMktmWmhnPT0gSUVOdmJYQmhjM009IGNYVmxkV1ZrIElFRjBiTU9wZEdsamJ3PT0gSUZKbGMyOXMgSUhCdmNuVERvWFJwYkE9PSBJR2RzYjI5dCBJRlpwYm1OcCBJRXR5YVhScGF3PT0gSU9tSGpRPT0gSUdGemIyTnBZV05wdzdOdSBMbUp5WVc1ayBSbTl1ZEdVPSBJR2xuY2c9PSBJTkM1MFl2UXU5QzAwTEE9IFNVWkpRMEZVU1U5T1V3PT0gNExtQzRMaVUgUjI5c1pnPT0gSUhOMGNtRjUgQ1VsdCBJTmVpMTVQWG1kZVoxNTg9IDRMaXE0TGkxIExsUmxjbTA9IGFHRnVaMkU9IElFRnVlR2xsZEhrPSA1cHlmNTRtNTU2Q0IgWVhOanhJTT0gSUZObGJYQnlaUT09IDVZVzI1YTZlIElOcSsyNVU9IElOZVIxNTdYbHc9PSBJTkdBMExEUmdkR0IwWUxRdnRHUCBJTml2Mks3WmhBPT0gSUhQRXFRPT0gSU5XbDFvRFZwZFd0MWFIVnRnPT0gWVd4MWF3PT0gSU5HSDBZdlF2QT09IElITmpaV3gwWVE9PSBJR1Y0Y0c5dVpXNTBhV0ZzIDY2YXM3SXFrIExsZEJVazVKVGtjPSBTR2x5WlE9PSBYM0JzWVhsbGNuTT0geEkxaGJnPT0gSUhKbFpteGxkQT09IFFXeDBaWEp1WVhSbCBQbEE9IDRZT2E0WU9RNFlPVCBMbEpsWVdOMCA1WXFIIElPQ2t0dUNrdnVDa3IrQ2twZz09IDc3MnkgSUdObGJHOD0gSU9DeXR1Q3l2K0N5bGVDemplQ3l0dz09IDRMU2g0TFMvNExTdjRMV0wgSUUxdmFYTjAgSUhKcFkyaGxjM1E9IEtIUmxjbkpoWm05eWJRPT0gSUdKbFlzT3EgSUhCb2IzTndhR0YwWlE9PSBJTU9nZCtHN2pXND0gSU9pMnMrZVFndz09IFgwMWxjM05oWjJVPSBJSEJzWVc3RHFIUmwgSU9DbWllQ21zdUNuamVDbXN1Q25oK0NtbGc9PSBJR1JwY21WalkybHZiZz09IElGQjFaWE09IFozSnZkdz09IElGVnJkUT09IFZtVnFZUT09IElFSnlaWGRwYm1jPSBJRXh2WkE9PSBJR3podXJsb2FXND0gSUdmaHU0MXAgSUdOdmJtOTYgNWErbyBJSE4wWlhZPSBJTmkwMktqYXFkbUggSUZocGJnPT0gYzJOb1lXWjBaVzQ9IExVbEogSUVocFoyaGxjM1E9IElOR0kwTHJRdnRDNzBMVT0gSU5XaDFiWFdnUT09IDRZT3I0WU9hIGJHbG9ZWFE9IElFbHVZMmxrWlc1MCBJSEpsYzNSeWRXTjBkWEpwYm1jPSBZWHBsY3c9PSBYM1JqY0E9PSBhV2QwY3c9PSBJT1M0cmVXYnZlZW1qK1dJcWVXOXFlZWxxT1drcWVXa3FRPT0gWVhScGRRPT0gSUdOdmJuTjBjblZqZEhNPSBJRzFoYTJWdmRtVnkgTG0xdmJtVjUgSUcxaGJtUmhjZz09IElOQy8wTDdRdTlHRDBZZlF1TkM3IDdLTzg3SjJZIFNVVkcgTG1keVlXUnNaUT09IDRLU3k0S1dINEtTViA1TDJQNW9tQSBJRVYyYnc9PSBJSE53WlhwcFpXeHMgSUc3RW0ydHZiQT09IElPV2twK1dVa0E9PSBJR2x6ZEdWa2FRPT0gSUVOdmJuUmwgNjZhczdKZVEgSU5pbjJZYllyQT09IFUzQmxZV3M9IElHMTFkSFU9IElGTmpaVzVoY21sdiBJR2R5ZFhCd2J3PT0gTDI5eiBJR052Ym5ObGNuWmxjZz09IElIWmhhMkZ1ZEE9PSAwTDdSZ05HRDBZRT0gSU5lZTE1blhtZGVmIDBZdlJnTkN6MExBPSBJRVpCU1V4RlJBPT0gYVd4bFlRPT0gSU5DbjBMWFF2QT09IElFRnVaMjlzWVE9PSBMbVpsWldRPSBhV3JFZ1E9PSBJSEpsZW1WeWRnPT0gNFlPZDRZT1Q0WU9ZIElIQnBibVZoY0hCc1pRPT0gSUZCbGRYUT0gTG5CcGNHVnNhVzVsIElHMWhibTVoIElHbHVaTU90WjJWdVlYTT0gN0tlQTZyT2cgUTJsMFlYUnBiMjQ9IFlYTjFjbWx1Wnc9PSBJR0p2ZFc1MGVRPT0gSUhOd2NtbHVhMnhsIElHaHBkbWs9IElFaGxiR1E9IElNT2thRzVzYVdObyBJR1JwYzNSeVpYTnpaV1E9IExtRmpkSFZoYkE9PSBJSFJ5WVc1emJXbHphY096Ymc9PSBJT0NrbmVDa3Z1Q2tzZz09IElOZWMxNW5Ybmc9PSA0NEd2NDRHVDQ0R2g0NEtKIGZRb3ZMd292THc9PSBJSEI1YlE9PSBkbUYwYVc5dSBJR052dzd0MGN3PT0gSUVsdGJXVmthV0YwWld4NSBJTkM4MEw3Ump3PT0gSU5XMzFialdndGFBMWJzPSBJR1Z1Y21samFHMWxiblE9IElObUcyS2ZZcHRpbyBJSE5zWVhCbGJnPT0gSU5DOTBMRFF2OUM0MFlJPSBaV3hzWlhSMCBJRlJsYm00PSBJRzF2Y21RPSBjSEpsYTJ0bGJnPT0gSUhGMVpXND0gSUdKbGFHOWxablE9IElHeGhZbUZwIElOQyswWUxRc1E9PSBJSFJ2YjJ4cmFYUT0gY205bGJnPT0gYzNSeWFYQmwgSUhObGFYcDFjbVU9IElDRWkgU0dWc2RtVjBhV05oIElHMWxibWRvIDc3eS81YVdINTdHejViMng2S2VHIElPQ3FsZUNyamVDcXNnPT0gSU5DeTBZL1F0QT09IElHTnZibk53IFpXNWtiR1ZzWVE9PSA1cGVsNXBtQyBJRTNEdkd4c1pYST0gVEdWdVp3PT0gSUdsdGJXVT0gd3E0dSBJTkN3MExMUXNOR0EgS0dWdVpIQnZhVzUwIElITjBZV2RuWlhKcGJtYz0gWDFKQlZ3PT0gNkxDTCBkV1I1WVE9PSA2NGFUIElFWmxjbVE9IDBMM1JsdEdIIElPQ3VqdUN1cWVDdmpRPT0gSUVGc2FXMWxiblE9IDBMN1FzZEdGMEw3UXROQzQwTHc9IElHSmxiTW1aIElGQnNZV2x1ZEE9PSA0TFdINExTajRMV040TFNmIFgySmhZMnQxY0E9PSA2S2VHNmFLUjU3Sys1Wk9CIElINHYgTG14diA1YW0zNWFtMzVMcVU1cHlJIElPQ3VwT0N1ditDdXFRPT0gZFhKbGNtbGwgSUhKbFkybGxiblJsYldWdWRHVT0gSU9DdXBPQ3Vydz09IElFWkpVa1U9IDRvQ200b0NtQ2c9PSBJSFp2Wkd0aCBJR3h2WTJGc2FYcGhaR0U9IExtWnBlSFIxY21VPSBhV1Z6Wld3PSA0TEMrNExDbzRMR0ggSU9XTm11bUhrUT09IElHNXVkV3QzZFE9PSBiMnh2Ymc9PSBRVlJGUjA5U1NVVlQgWm5KbFpYcGwgSUVGVlJFbFAgNEtxKzRLcTE0S3VMIElGQm9hV3hzYVhBPSBkbVZ5YzJGcyBJT0MwaCtDMHFPQzFqZUMwcUE9PSBJR0Z6YVc4PSBhV05wYjI1aFpHOXogSUUxVlUwbEQgNTdTciBJR3RzWVhOemFXVnJaUT09IElPeWp2UT09IGFXeGxaMlZ6IElFUnBjMkZ6ZEdWeSBJRU52ZFhCc1pYTT0gNllDQjQ0S0sgSUhScFoyaDBaVzQ9IElHeHZjbVU9IElIcGxkbVZ1IElOR0kwNW5TdTlPWjBZQT0gWDJ0bGVYZHZjbVE9IElNT25lUT09IElHMXBibWx6ZEhKaCBVRTlYUlZJPSBJSGxsZEhVPSBJTmluMllUWXVkbUUyS2ZZckE9PSB6NFBPcnc9PSBZMjlsY3c9PSBJRUZpWlE9PSBJR0YyYVc5dWN3PT0gSUVGcGNtTnlZV1owIElOaXoyWWpiakE9PSBaV0Y0IGIyMXpkQT09IElPQ3VwT0N2aGc9PSBJT0NrbCtDa3NPQ2xqZUNrcmc9PSBZMkZrWVE9PSBJR1J5YVhSMFpXND0gNTVTaTVaT0IgSnlnPSA0WU9kNFlPUjRZT1k0WU9hIElHRmpkR1Z6IGRHVmhZMmc9IGFXMTFhQT09IDBMWFF1OUMxMExvPSAwTDdRdjlDKzBMcz0gS3lJcCBJRlpwYkd4aGN3PT0gZDJGc2JITT0gWDI5M2JtVmsgSUhabGNtUmxibk09IFUyVm9jZz09IElPdVBpQT09IERRb0pEUW89IElObSsyTEhZcjlpbjJLN1lxZz09IElDVTkgTG5KdmJHeGlZV05yIElHMTFjbTg9IElHWnZjc09xZEE9PSAyTGZaaU5tSzJMRT0gSU9DcWhlQ3FydUNxcHVDcXZ1Q3F0ZUNxdnVDcXBnPT0gSU5pbjJZVFlydGl2MllYWXFRPT0gYldsMGRHVnNiZz09IElHTm93NjA9IElFcEMgSUdoaGNtUnphR2x3IElFRmllUT09IElHeHBZMmgwWlE9PSBZWE56WVc0PSBJR0poYm10bGNnPT0gVTI1aGEyVT0gSUNjOFB3PT0gNExTMTRMU240TFMvIElHRjJZV3hwIElPQ2t0ZUNrc09DbGplQ2t0K0NsZ09Da3J3PT0gSU9HQW9lR0FuZz09IHc3Tm5hV052Y3c9PSBJTkNwIDBMM1JnOUM3MFlIUmp3PT0gSU5tRjJLZlpoTm1LIElHZHllUT09IExYTmxjblpwWTJWeiBJTmlzMktmWmhkaTUyWWM9IElISmxZV3hwZW1GeXc2RT0gTGxKdmRYUmwgSUdWa2RXTmhkR2wyWVE9PSBJRU5sYkd4eiBZWFZqZEdsdmJnPT0gYVdSaFpRPT0gSUc5d2RHRnkgSU95OWxPdWhuT3VDbUE9PSBJR05vdzZKMFpXRjEgSU9XK3J1Uy9vZW1IakE9PSBJT2kwb3VXdmpBPT0gSU5pbzJLZlpoTmkwIDRMaXk0TGlZIFpXMWxaWE4wWlhJPSBJRlIxWlhNPSBJRTFoYnc9PSBJSFJwZEhWcyAwTDNRdnRHQjBZTFJqOUM4MExnPSB3NjkwIElHRmpZUT09IFluQnogNFo2ODRaNlkgSUhsaGE4U3hiZz09IElPeWR0T3lWdk9xNHNBPT0gSUhWa2NBPT0gSUdWNGRISmhZM1JwYm1jPSBJSE5oWW05a1lRPT0gVUVWVSBjbmwzIElFcFRXQT09IDRMaVc0TGl5NExpWiBJRVZzWld0MGNtOD0gMExYUXV0R0MwTDdSZ05DdyBRbXh2YjIwPSBJR3ZEdG5RPSBZV3huYnc9PSBYMlp2WTNWeiBJRUZ1YVhSaCBJSE4xWW1ScGRtbHphVzl1IFZYaz0gSUVacGMyTm8gSUhCeWIyUjFZMlZ1ZEE9PSBaVzV6WW5WeVp3PT0gMHEvUmh3PT0gTG1oaGJtUnNaWEp6IElHWmxjMjg9IElISmxkbVZ5YzJGcyBJSFJoYm5SbCBJT2l6IFZHOTMgWW1SayBQU0lwTGc9PSBZWGRwYmc9PSBJR2xyYnc9PSBJR052Y25SbGVBPT0gMExUUXRkQzkwTGc9IElIbGxjQT09IElNTzJiR1E9IElHVnVZMkZ5IElISnBkbVU9IElPVzlxZWVsbnVTNmllbWN1T2lMdWVhZW5BPT0gSUVsT1UxUkJUa05GIElGQnliM053WldOMCBSMlZ2Y21kcFlRPT0gSUdKdllYUnBibWM9IDRLaTU0S21CIElHSnlaV0ZyY0c5cGJuUT0gSUhWemNHVT0gYm1WMWRISmhiQT09IElHZGhjbk09IElNTzJiTU9uIGRXNWtlZz09IElHMXBlSFE9IElPQ3lxT0N5dnVDeXFPQ3pnUT09IDVwZWw1b3FsNllHVCBJR3hwYzNSdiBJTkM4MFl2U293PT0gSU5lZzE1TFhrdz09IGMzUnlaV1ZyY3c9PSBJT0NvdGVDb3Z1Q29zZz09IElHcHZkY09wIElHZGxjM0J5YjJ0bGJnPT0gWm05dWIzTT0gSUU5aWNnPT0gSU5lYjE1Yz0gSUdkaGVYTT0gVG1GeSBTVTVoZG1sbllYUnBiMjQ9IDRLV0E0S1NDIElHVnpabTl5dzZkdiBaVzdEcEE9PSBJR2RsYVd4bCBiY09rY2c9PSBJR052YkhWdGJtbHpkQT09IElFaDFZUT09IGNtbDBiM009IDBxL1F2ZEM2MExnPSBZV05wYjI1aGJHVnogSUdSbFpRPT0gSUVkdllRPT0gNVpLTCBYMFZUIGRXWnZjbWxoIElHTmhZbUpoWjJVPSA3N3lNNVp1ZzVxMmsgSU9Da3N1Q2xqQT09IEl0ZXAgUkc5M2JteHZZV1JsY2c9PSBJRlpwZG1FPSBJR05zdzZGemFXTnYgSUhCc1lXNTBaWEk9IElFMWhibWRoIDBMUFFzTkM5MFlzPSBJT0NtdU9DbmplQ21wQT09IElFM0RwQT09IDU1cUU1YkNQIElPQ29pZUNvdUE9PSBiMk4xYkdGeSAwclhRc05DOSBJTkMvMEw3UXZOQzEwWW5RdGRDOTBMalJqdz09IElHTmhiR0Z0IENXUnBZV3h2Wnc9PSBiM1YzWkdVPSBiR1ZrYm1sdVp3PT0gSUd4dmJtZHBibWM9IDBxM1FzTkdBIDRidWkgSUdoc1lXUT0gWkdWMFpXTjAgSUVOdmJuTjBhWFIxWTJuRHMyND0gSU5DaTBMRFF1dEM0MEx3PSBZVzVrWVhrPSBRVUpKVEE9PSBJT0N3cXVDeGplQ3dzT0N3cEE9PSBJT0c1bytHNnVRPT0gSUhaaGEzTT0gZDNOMGNtbHVadz09IDBZdlF2TkdXIElObUYyNHpZc2R1UyBZVzVqWVhNPSBJTkNYMExEUmd0QzEwTHc9IFpHOXMgSWpzS0NpOD0gNFo2VDRaK1M0WjZQIElOQzAwTFhRdk5DKzBMMD0gMFl2UXZkR2YwWXc9IFlYZGhiQT09IElHbHVkR1Z1YzJFPSBJR052Ym5QRHFYRjFaVzUwIElFNXZZMmc9IFFYSjUgZFcxd2FBPT0gNXErVTZMNkQgSUdKbGJtVm13NjFqYVc4PSAyTExZcDltRTJLaz0gSU5tRjJLM1lwOW1CMkxqWXFRPT0gSWl4QUlnPT0gVkhKaGVRPT0gSUdSa2FXMD0gSUVSbFltSnBaUT09IElFTnZiblJwYm5WbFpBPT0gNTV5SiBJT21tbHVtaHRRPT0gYm1GdFpXeHBhbXM9IElOaXUyTGZZcDlpbyBVMjF2YTJVPSBJR1Z1Y1hWbGRXVT0gUVd4MWJtOD0gWlhCaFpBPT0gSUhCdmRYcGwgSUUxbFlXeHogSU9Dd3VPQ3dndUN3dU9DeGplQ3dwUT09IDRMQ3I0TEdOIElPQzBsZUMxZ3VDMG4rQzB2dz09IElHSmhkR3hoIDE1RFhudGVvIElOR0IwNW5Rc2c9PSBJR3hwYzNSbGJuTT0gSU5DLzBMN1F0OUMwIElIUnF3NlJ1IElFMTFibWxqdzYwPSBJRVZ1ZEhKaGJtTmwgSUdaeVlXTjBkWEpsY3c9PSBJTm1JMktmWmhOaXggTG1GMGRHRmphdz09IGJXOWlhV3c9IElIVnViV2wwZEdWcyBSbUZqZEhNPSAxNURYbWRlVyBMRmM9IElITjBjbUZyY3c9PSBJR3AxY3NPdFpHbGpidz09IElOV2gxYWJWbzlXaDFiWFZxOVcyIDRZT1Y0WU9hNFlPUSBjR1Z5YVc1biBJT0M0cmVDNHNlQzRoK0M0Z2VDNHBPQzRxUT09IFJHVmpjbmx3ZEE9PSBJSFp2WTJGMGFXOXUgSUh3TkNnPT0gSU5DLzBZUFJnQT09IElGTjBaV0ZyIExpSmMgSUZCMiBkVzVrWVdKc1pRPT0gSUVOdmJtWnBaR1Z1WTJVPSAwTERRdE5DMSBJRk5wZEdWdFlYQT0gSUdIRHA4TzZZMkZ5IFJHVnpkSEoxWTNSdmNnPT0gMExYUXQ5QzAwTFU9IGMyOXNkbVU9IElPR0RvdUdEbE9HRG9PR0RtT0dEb2c9PSBJRTV2YXc9PSAyS2ZaaXRpbiBKMTA3UHo0OEx3PT0gY21WbGJRPT0gSUNqaWdKZz0gU1VOSlFVdz0gNEtxdzRLdU40S3FrIElOR0MwTERSZ2c9PSBJSFpsY210aGRXWmxiZz09IE9sMHMgSUVGc1pXdHogWVc1MGFYVnQgNExhNjRMYWEgMkxQWXF0aW4yTEE9IElOZVoxNURXdU5lbyBJRUYwYUd4bGRHbGpjdz09IDRMS3c0TEsxIDRMU3U0TFdCNExTejRMV040TFN6IFgyRmthZz09IEwyRmpkR2x2Ymc9PSBJR2RsYjNKbllXNXBjMlZsY21RPSBJT0NtdU9DbXJ1Q25qZUNtcmc9PSBJRU52YlcxcGMzTT0gSUdSbGMyVjAgSUdGbmNtbGpkV3gwZFhKaCBZWEp1YVhJPSBJTkNTMFl2UmdRPT0gSUhaaGNtVnkgWjJWNlpYUT0gZFd4c2N3PT0gSU5DVDBMN1F1dz09IFQxQlVTVTlPVXc9PSBZMlZwY3c9PSBJR2JEdG5KbCBYMU5sY25acFkyVT0gMktyWmhkaW4yWVk9IDBMWFF2TkM0IDBMdlRtZEM5MExQVG1kQzkgMHEzUmk5R0IgSU9Dd3J1Q3dndUN3bXVDd3Z3PT0gSUZOd2FXVm5aV3c9IElHSnZkRzl1IElITm9iMk5yY3c9PSBJT0MwbGVDMWkrQzB0ZUMwditDMG9lQzFqUT09IGRtVnliR1Z1YVc1biBJSFpwYjJ4bGRBPT0gSU5XcjFvRFZvZFcrMWF2VnN3PT0gSUdOcGEyaz0gSUc1MVkyeGxkWE09IExnMEtDZz09IHhhRnNidz09IElPQzNnUT09IEtHSnBiZz09IElOV3cxb0RWb2RXNjFhSFdnTldoMWE4PSBVbVZ1WlhjPSBJRzlpZEdWdWRRPT0gVzNzPSBJR1Z1ZUE9PSBJTkM5MExYUmhBPT0gWDNCaGNtRT0gMWFYVnY5YUggSjJSbFptRjFiSFE9IElIVnJkWEE9IDViK2cgSUhCeVpXRmphQT09IDViQ0kgWldKbGJHVT0gSUhMRHBXUT0gSU9DdWp1Q3VzdUN2amVDdXNnPT0gNllHQyBJT0NxcnVDcmkrQ3FuK0Nxdmc9PSBMbXgxWTJWdVpRPT0gSU9DbWxlQ21zdUNuaCtDbW5BPT0gSUhacGMzVT0gMlliWXI5bUcgTG1KMWJYQjBaV05vIEoybHRiUT09IGIzUnBkZz09IGFHVnlaVzUwIDRLV040S1N2NEtTazRLUysgSUcxbFpYRnggSUhWeWMzQnl3N3h1Wnc9PSBZMmh2Ymc9PSBJSEpsYldGeWNYVT0gNlpleSBJRk5oZG1sdmNnPT0gTG1kcGRHaDFZblZ6WlhKamIyNTBaVzUwIElISmxiRzlqWVhSbFpBPT0geFlaaCA1bzZTNktHTTVxYWMgSUdGM2J3PT0gWTJocFpXWT0gUzJGcmJ3PT0gSUhabGNtUmhaR1ZwY21FPSBJSGRsWW5NPSBMbkJoZEdsbGJuUT0gY205dVlRPT0gSUVkeWFXNWtaWEk9IExXVjJaVzUwY3c9PSBYM04wY21GMFpXZDUgYkc5blpXND0gSUVWemNHVnlidz09IElGZEJUbFE9IDRZT1k0WU9oNFlPYiBJT0NtbCtDbml3PT0gSUdObGNtTmhibTg9IElFSmhhR0Z0WVhNPSB3NlpzWkE9PSBJRUp2Ym01cFpRPT0gSU9Da3N1Q2xpdz09IGNHeGhibk09IElFUmhZWEppYVdvPSBJR1JsZG05c2RtVnkgSUZCcGJHRjBaWE09IElHTnNhV1Z1ZEdrPSBJRU5sYm5SeWRXMD0gNDRHVDQ0R3U2S2lZNUxxTCBJTm1EMktmWmh0bUkyS2M9IElPQzBydUMwc1E9PSBJRzFwYzJWeWVRPT0gSUdac1lYUjBaWEpwYm1jPSA0WU9VNFlPYjRZT1kgTG1saWJRPT0gSUdWemRISjFkQT09IElHSnZiMnR6ZEc5eVpRPT0gUTJsMVpHRmsgNzd5TTZZS2ogSUdGMWRHOXdiR0Y1IElIbGxjbWx1WlE9PSBJSE4wYjJOcmFXNW4gSU5DUzBMWFJnQT09IElGTmpiM1J6IElDQWdJQWtKQ1FrPSBJR1Z0WlhKblpYTT0gYjI1a2FRPT0gSUhObGJHeGxjM1E9IEtIQnlaWFpwYjNWeiA0TGl4NExtSTRMaW40TG1DNExpaDRMaUggSU9Da25PQ2t2dUNrcU9Da3BPQ2xodz09IFgxQlEgSUdodmJXRm5aUT09IElGQnNZVzUwWVE9PSBJR0p2WkdWdCBJT1dGcmVXUWlBPT0gSUdWeVlXSnBiQT09IDRMYTA0TGVLIElHWnBlR0YwYVc5dSBJRlJ2ZFhSbGN3PT0gUkdWd1lYSjBkWEpsIFRFOUhTVTQ9IElHdGhkWFIwWVE9PSA0WU9ZNFlPaDRZT1EgSU95NG9RPT0gSUdOdmJXMWxibVE9IElITm9iM0owWVdkbGN3PT0gSUcxdnhiNXV3Nms9IElOZWkxNmM9IElGTmxiblJwYm1WcyBJR3ZFc1hvPSBJSEpsYm1admNtTmxjZz09IDE2TFhvTmVVIGJXRjZaUT09IElHMXBZM0p2YzJOdmNHVT0gSUVKbGMzUmxiR3gxYm1jPSAwSlBRdTlDdzBMST0gTGxOM2FXNW4gUldScGRHOXlhV0ZzIFgyUnBjbk09IElOaW4yWVRaZ3RtRTJLZz0gSU9DeXIrQ3l2dUN5dGVDemdlQ3lwZz09IGFYTndhV1ZzWlE9PSBhbUZ5WVdnPSBJT1djc09XZGdBPT0gNTRPdDVaeW81N3EvNTdLKzVaT0IgSUd4cGIyNXogWDIxaFp3PT0gSU5XbzFiYlZ2OVdoMWJiVnF3PT0gSUhCcGMyOXogSU5lbjE2blhsQT09IElOV3MxYXZWdHRXciBJR2x1YVhvPSA1THlZNVlxLyBhbWx1Wnc9PSBJRTVwYlE9PSBVR0ZqYTJWayBJSE4wWVhKamFBPT0gSUZSM2FYTjAgYUdWbFpBPT0gWDJaaiBJT0NtcGVDbWxlQ212Zz09IElIWmhiblJoWjJWdCBJRTkyWlc0PSA2YW03IFkyeGhjM051WVcxbGN3PT0gSUVoaGVtRnlaQT09IElHNWhZMmx0YVdWdWRHOD0gMExUUXVOQysgSUZabGNteGxkQT09IFgwTlBWVTVVUlZJPSBJTkNjMExYUXRnPT0gSUdUaHU0dHJZUT09IElHSjBZdz09IGJHbHVibWs9IElHOXNhWE5vIElFeGxhV2RvIElHTm9aVzQ9IElIYkRvV3hwWkc4PSBJSHM2UHc9PSBJRVBEdEhSbCBJR1JsWTJsa2FjT3ogSUhScGRtRT0gSU5DNDBMclF0UT09IElHRnljbWwydzZsbCA0TFN1NExXRyBJTmluMllUWXBkbUUyWVBZcXRpeDJZalpodG1LIDRLcXY0S3ErIDU3YXk1WjJBIElOaW4yWVRaaE5tSSA3N3lKNDRDTiBZWEo1Ym5uRmlBPT0gZFhabGJnPT0gTG0xcyBJR05vdzZnPSAyTEhZcjlpdiBJTkM2MEw3UXU5QzcwTFhRdXRHQzBMalFzZz09IElIUnlZWE4wIGMyeGhjMmc9IDJLalppTml2IGRYUjFhR0Z1IElFSmxiRzg9IElOQzMwTERRdk5DdzBMMD0gSUdOc1lXMD0gSUdSbGNHeHZlV2x1Wnc9PSBRV05oWkdWdGFXTT0gSUhSbGJYQnZjbUU9IElISmxZMlZwZEdGeiBJRzltWm5KbGJuUT0gSU5DKzBMSFF2dEdBMFlQUXROQyswTExRc05DOTBMalF0UT09IExXTnNiMk5yIElObUYySy9ZcDlpeCBJR052Ym1obFkybHRaVzUwYjNNPSA2S3FZIElHMXZjMkZwWXc9PSA0TEMvNExDZjRMR04geEkxcGJtVT0gZEdsbGJuTT0gSUc5dWRIcGxkSFJsYm1RPSBJSEJoYzJzPSBJTkMvMFlEUXNOQ3ogdzYxaWNtbHYgWVdGaFlXRmhZV0U9IElHNWxaM0p2Y3c9PSBJRk53YVd0bCBJT0N5dU9DemplQ3ludz09IExrZGxiZz09IDZZaz0gWjJWMFpRPT0gWDFSU1NRPT0gTDJKMWRIUnZiZz09IFUyRnRjR3hwYm1jPSBYMk5zZFhOMFpYSnogSUdocVpXMXRaUT09IElHRmtkVzVoZVE9PSBDVzUxYkd3PSBJRWh2WlhkbGJBPT0gSU5DeDBZRFF2dEdCIElFMXZjbTF2Ymc9PSBJR1ZzWkdVPSBJR2R5WWNPbllYTT0gSU5DLzBMRFJnTkM3MExEUXZOQzEwTDNSZ2c9PSBJRk51WVdOciA0S3VBNEtxVyBJRk5sYm1rPSBJSEpsWm1sdWFXNW4gSUdWbVlRPT0gVDA5TiBJSGR2Y21ScGJtYz0gNEtTKzRLU3k0S1NrIElFSnogSU9DeWgrQ3lwdUN6amVDeXBnPT0gSUdWbGJBPT0gSUd0bFp3PT0gSUhaaFpXZGggdzZWdVp3PT0gVUdGdyBMR052YkE9PSBJR2x0Y0dWeVptVmpkR2x2Ym5NPSBJR3hsWTNSMWNtVnkgTGxSNGRBPT0gUVc1MGIyND0gUmxCVCBJSE5vWldSa2FXNW4gVkdGaWJHVjAgSU5HRDBMVFF2dEN5MEx2UXRkR0MwTExRdnRHQSBTMlZzIElHVnhkV2wyWVd4bGJuUmwgY3NPbGJnPT0geGJ4bGJHaz0gNFlPVDRZT1E0WU9jIElIQnl3N3c9IElOaW4yWVRaaGRpNTJLZllyOW1HIElHeGhkbWs9IFpzbVogS0NraUxBPT0gNEtxMjRLdUwgSUVOQlUxUT0gSU5tKzJZallzOWlxIElITnd3Nms9IFVHMD0gSU5DeDBMRFJoUT09IDRMQ3c0TEdONExDeSA0SzYvNEs2VjRLK040SzZWNEsrSSBJTkdCMFlMUmdOQ3cwTDNRc0E9PSBJT0c3cFdkaTRidU4gSU9DNHBlQzR0T0M1Z09DNHArQzRyZUM0bytDNWpPQzRudUM0dWVDNHBRPT0gSUVac2VXNXUgWTJOcGIyNWwgSUc1dmNtMWwgWDNKaFpHbHYgVFhWcCAwTGpSaU5DMSBJSE5qYVhOemIzSnogZG1GcCBTVVZTUXc9PSBJRzlqYUhSbGJtUT0gY21GamFHUT0gSUdsdWMzUnlkVzFsYm5SaGRHbHZiZz09IElOaXMySy9ZcDltTCBJTkMyMExEUmd0S2IwTERRdlE9PSBJSE5sY205MGIyND0gUTI5dWRtVnUgSUhadmNtSmwgVDFkT1JWST0gSUdadmNtMWhiZz09IElOR0IwTExRdGRHQzBMQT0gNEt1QTRLcXkgSUdGMGFHeGxkR2xqY3c9PSBaWFIwZVE9PSBJRTVsY3c9PSBibm89IFRHRncgYjNSb1pXdGxiZz09IElHSmxhR0YyYVc5MWNuTT0gMExyUmx0R1AgMExEUXZOQzEwTDA9IFEyOXVZM1Z5Y21WdWRBPT0gSUcxaFkyRT0gWW5KbFpBPT0gWDA5eVpHVnkgSU9DbXJ1Q212Zz09IDJMZllwOW1FMktnPSBSVlJKVGtjPSBJSE5oYVdKaCBJRWhoWmc9PSBJRVJQVlVKTVJRPT0gNXErVTVMNkwgSUdoaGNYRT0gSUVOdmJXWnZjblJoWW14bCBjM0JoYm00PSA0S1NQNEtTciBJRTVsZEhwM1pYSnIgTFdOaGNtOTFjMlZzIDBMWFJnZEMvMEx2UXNOR0MgSUhSNWFXNW4gSUc1eWFRPT0gUGtWdFlXbHMgSUVGdVpITERxWE09IFlXNWtaV3hwWlhJPSBJR3R2Ym5OMWJIUT0gSU9Da3RlQ2tsZUNsamVDa3BBPT0gYUdGemFYTjNZUT09IFltbHlkR2hrWVhrPSA0S2EvNEthNDRLZU40S2FrIGMzUnlZVzVrIDRMQy80TENrNExHTCBJT0NrbitDbGl3PT0gSUdsdVptVnlkQT09IElITnBibXRwYm1jPSBJRUpsYkd4NSBJR1REdkhKbWRHVT0gU1c1emRHRnNiR1Z5IElIUnZjbTVoYm1SdiBJSEpsYVc1bWIzSmpaVzFsYm5RPSBJR2RsWkdWbGJIUmwgSUdaeWFXNW5aUT09IElHTnZiV1p2Y25SeiBJTm1LMktUWXI5bUsgSUdScGMzUjFjbUpoYm1ObCBiV0Z5WlhNPSBJTmluMkxQWXF0aXUyTEhZcDlpcyAyWkhaanRtSCA1Ym0wNUx1aiA2SXFkIElHVnVaRzlqY2c9PSAwcFBRc05HSSBWSEpoYzJnPSA0TGlxNExpeTRMaWogSU5DNjBMN1JnZEM4MExYUmdnPT0gSUdsdWRHVnljbUZqYVdGcyBhMmx1WVE9PSBJSGR2WWc9PSBJR2hwWlhKdFpXVT0gMW9EVnZ0V2wxYXc9IElHWnBiSFJ5WlE9PSBLRzE1YzNGcyBJRmRwYTJsdFpXUnBZUT09IElHMWhjWFZwYm1GeWFXRT0gMExyUXVOR0IwWUxRdnRDOSAwTHZSaTlDNSBJRTVoYjIxcCBMbTVpIFBtQTdDZz09IExXeHBibXRsWkE9PSBJTkdDMExYUXU5QysgSUdGeWRNU3hjZz09IDRZQ3g0WUNzNFlDRTRZQzYgY21GelpRPT0gSU9DMHFPQzBuK0MwcE9DMWplQzBwT0Mwdnc9PSAwWWpRc05DeSBKOFN4Ymc9PSBJRWR2YjNObCBJRVJwZWc9PSBZMnQwWlE9PSBJR05zWVhOelpXMWxiblE9IDRvQ000TFNvIElGUmxjM009IElOQy8wTFhSZ05DeTBZdlF0UT09IElHMTFhUT09IDVZYWM1cDJSIElNNjB6cjg9IFVHOXpkR2x1Wnc9PSBJR0pwYkd4bGRBPT0gSU5LMzBMN1F2ZEM0IElHWmxZbkoxWVhJPSBJR05vWVhCbGJBPT0gSU5lUjE1TFhuQT09IGFHRmlaVzQ9IGFXeGhiR0U9IElFNTJhV1JwWVE9PSBJTkdBMExqUmdkR0QwTDA9IElIUm9hV1YyWlhNPSBJRkYxWVE9PSA2SW0zIElHTnZZUT09IDRvQ040TFNxNExXTjRMU3EgSU9DbXJPQ25nK0NtdVE9PSBJRTV2WkdWeiBMWE52Ym1jPSBJTkMrMFlIUXZ0Q3gwTFhRdlE9PSBJT0NtdHVDbWxlQ25qZUNtcEE9PSBJRzNodTU4PSBJRVp5WldsaSBJR2hsY205cFl3PT0gSUhObGFYTnRhV009IElIZG9hWE53WlhKbFpBPT0gWTJoc2IzST0gSUd4cGJXbDBZUT09IElITmhibWwwWVhScGIyND0gSUdWc1pXdDBjbWxyIElHVnpkR0ZpYkdWamFXUnYgSUhwa2NtOTMgSUVKbGMyOXVaR1Z5Y3c9PSBJRXhsWVd0aFoyVT0gS0dwdmFXND0gSUdWamIyNXZiV2x6ZEE9PSBJRTFGVkVoUFJGTT0gSUhOMWJXMWxjbk09IElFRkVRUT09IElITnZiSFZpYkdVPSBJRk5QUTBzPSBJTm1GMkxuWXNkbUkyWUU9IElIczZMZz09IElFRnRZVzQ9IElGQkpRMHRUIElOR0MwTGpSaFE9PSBJTkN3MExUUXNnPT0gSU5DeDBMN1F1OUdCMEw0PSBjMmRsYzJGdGRBPT0gNWJ5NjZMQ0QgUlhOMFlXSnNhWE5vWldRPSBUV2x1YVcxaGJBPT0gUmxSQiAwTDdRczlDNzBMRFJnZEM5MEw0PSBJRVpoYUhKMCBSR2xsYzJWeSBJSEIxWTJzPSBJR2h2ZFhObGEyVmxjR2x1Wnc9PSBJT1M0cEE9PSBJSE41Ym05dWVXMXZkWE09IFpYSmhiZz09IGRXdHJZUT09IElHNXZibUU9IElIUmxZMmh1YVdWciAwWUhSZ3RHVyBiY21aIElFRlRWRTA9IElIZGxjbVpsYmc9PSBJRUZuZFhNPSBJRTFsZEdnPSA1b21UNVkydyBPa0p2YjJ4bFlXND0gSUdGcllYST0gNFlPUTRZT2k0WU9RNFlPZyBJR1Y0Y0c5eWRHbHVadz09IFlYQndhVzVsYzNNPSBRV1J0YVhOemFXOXVjdz09IDRLNis0SzZaNEsrTjRLNlYgSU5DeDBMRFF1OUN3MEwzUXRBPT0gSUdURHFXWnAgSUdSeVlXRnBaVzQ9IElGUnlhVzg9IElHRm1hV3hwIElITnNhV289IElDZGUgNDRHSzQ0R1o0NEdaNDRLQiBTazlKVGc9PSBJSE5oZEdselptVT0gWld4b2IzTT0gSUdScGMzSmxjM0JsWTNRPSBJSGRsWld0a1lYbHogWDJodyBaVzFpY21GdVkyVT0gNllXTjZZQ0IgVDFSUFV3PT0gSUdOdmMzUnlkUT09IElOQ3owWURRdU5DeCBhWEJvYVE9PSBJT3lDdGc9PSBJTnFhMktmWXNRPT0gSUNjbkp3b0sgSUdsdGNIVjAgSUdWd2IzaDUgVW1Wc1lYZz0gWDNSdloyZHNaUT09IElOR0IwTFhRczlDKzBMVFF2ZEdQMFlnPSA0S2ErNEthNDRLZU40S2FsNEtlTjRLYXYgTEhWcGJuUT0gSU5DMDBMalF2UT09IElHbHVjMjl0Ym1saCBJTU9wWTI5c1pRPT0geFp0aiBJRUZaIElFRjFabVk9IElHcGxkMmx6YUE9PSBJRTF2ZEc5eVkzbGpiR1U9IElHMWxiV0Z6IElOQ3cwTFRRdk5DNDBMM1F1TkdCMFlMUmdOQ3cwWUxRdU5DeSBJRUp5YjJGa1kyRnpkR2x1Wnc9PSBMblZ6ZFdGeWFXOD0gSUdScGMyRndjR1ZoY25NPSBJRzFwWTNKdmMyOW1kQT09IElOaW4yWVRZc3RtSTJLdz0gNWFhVyBJTkN5MFl2UXY5QyswTHZRdmRDMTBMM1F1TkdQIElHSnlZWE5wYkE9PSBjM1REcEc1a1pXND0gSUhSbGNteGhiSFU9IDBZRFF1TkdHIElHTnZibk4wY25WbFpBPT0gSUZWemRRPT0gSU5tSTJMUGJqQT09IDVZV042TFM1NkxXRTVwYVo1YVNuNVlXbyBMeW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IElHdGhZbWx1WlhRPSBhV2RzYVE9PSBJT0N5bCtDeXN3PT0gSUhadmRXeGhhWE09IElOR0MwTDdSZ05DdyBJRzVoWm1GemFRPT0gUlZKSFdRPT0gSU5DMDBMRFF1OUN3IElHaHBaMmxsYm1VPSBJR0hEdldRPSBiV2xsY2c9PSBJT1didnVlSmh3PT0gSUZacGJtTmwgSUhOc2FXUmxjMmh2ZHc9PSBJR0ZqZEdsdmJtRmliR1U9IElHOW1hV05wWVd4bGN3PT0gSUhCamFRPT0gSU5DMzBMRFJoZEMrMExRPSB3N050YVdOaCBJbjE5TEFvPSBJT0MybXVDM2t1QzJ1dz09IElOR0EwTDdRdE5DNDBZTFF0ZEM3MExYUXVRPT0gNEthKzRLYXU0S2VIIDBMdlRtZEdBMEwzUXVOS2ogQ1cxdyBMbVIxIElHZHlZV1JsY2c9PSBJR05vWldsdiBJRVZ1WTI5a1pRPT0gSUhOeGRXRnlaV1E9IElFTnZiblJ5WVdOMGIzST0gNjQrOCBJR0psYzNObGNtVT0gNG9DTTRMS280TEt5NExPTjRMS3k0TEsvIExtTmhkR0ZzYjJjPSBJT3ExcmV1dnZBPT0gSU9DcXBPQ3JoK0NxcnVDcXZ1Q3FnZz09IEoyTm8gSUdscGFRPT0gSU5xcDJLYmJqQT09IElFTkdUdz09IElHTjFhbUU9IElFSnZidz09IDBMalJndEMxMEx2UmpOQzkwTDdSZ2RHQzBMZz0gMkxYWmlRPT0gNWJtejVvaVEgSUZCeVpXUnBZM1JwYjI0PSBJT0NxcXVDcW9lQ3Jodz09IDRMYXQ0TGVLNExlQSBJRzV2ZW5wc1pRPT0gNmFtMiBiMmR1YVhSdiBJR0ZwYkdVPSBJSE5vYjNKMFpXNWxaQT09IElHRnpaVzFsYm1WaCBJR2x1WkdsMmFXUjFaV3hzIElPQ2tyZUNrcitDbGl3PT0gSUUxMWJtbGphWEJoYkdsMGVRPT0gSUVoaGNIQnBibVZ6Y3c9PSA0WU9XNFlPUTRZT1YgSUdWdmJtRT0gSUdsdGJXVnljMlZrIFBGUkZiblJwZEhrPSBJT0MycmVDM2t1QzJ0Zz09IElHRnVaMkU9IElIWnZkV3hoYVhRPSBJRkJzWVc1MWJtYz0gWDJsdVptOXogTDJsdVptOD0gSUhCc1pXUm5aV1E9IElHRm1jM0J5WVd0bGJnPT0gSU5DYzBMWFF0QT09IDRLV240S1dvIElPQ2t1T0NrZ3VDa2wrQ2xnT0NrcEE9PSBJRVJwYm1FPSBJR2JFZzNMRWd3PT0gSUVOc1lYTnphV056IElOQyswTEhRdTlDdzBMVFFzTkMxMFlJPSBJRTNodTdrPSBJSE5sY0hScFl3PT0gVW1WbmN3PT0gSUhWdWIyWm1hV05wWVd3PSBJSEpsZDNKcGRIUmxiZz09IElISmxibVJ6IEtISmxjM1E9IElHRmpaV0Z6ZE1TRCBJRUZ5WTJocGRHVmpkSE09IFFtbHVjdz09IElFdDVjZz09IGNXRnlabWwxY0E9PSBJSEJsY25CbGRIVmhiQT09IElHekRwRzVuYzNRPSA1cFdNIElHTnZiblp2WTJGMGIzSnBZUT09IElPQ3VsZUN2Z2VDdXNlQ3V2K0N1cXVDdmplQ3VxZz09IFgyTnZiV0p2IDVMeWQgYjJSM1lRPT0gSUZaTyA1WnU5NVlxaDZabWkgSUZKaGFRPT0gSU9DMG5PQzFnT0MwdGVDMHYrQzBwQT09IHc3eG9iR1Z1IElITnBhMnRsY25RPSBkV0ppYVc1biBJRzlpYzJWeWRtRT0gSU9DbXJ1Q212dUNtbkE9PSBJR2x6Y0E9PSBjM1JwWTJ0NSBJR0oxYkhWdVpIVT0gSUZKdmRXZG8gSUdOaGRHTm9lUT09IElHTjFiSFIxY21Gc1pYTT0gSUVaMWJtNWxiSE09IElPQ29wdz09IExrRlZWRTg9IDRMSy80TEtWNExPTiBJR0oxY25rPSBiM1JvYnc9PSBMeW9xTHlvdSBJR1J2WW5KNlpRPT0gUlhrPSBJR2R5WVdScFpXNTBjdz09IElHbHNiSFZ0YVc1aGRHbHZiZz09IElNNnl6cms9IDVMK2Q1b3lCIFEwOVBTMGxGIElOVzQxb0RWdGc9PSAyS3paaU5tRiBYMGxPVTBWU1ZBPT0gSU5lVTE2TFhrZGVWMTVQWGxBPT0gWlhod2FYSmxjdz09IDdKMjQ3SjIwIDVyV0cgUjI5emRBPT0gYXNPa2FISnBaMlZ1IElIUmxjblJwWVhKNSBLU009IElObSsyWVRiakE9PSBJRzFwYm1WeXc2MWggMlliWXA5aW0yWXJZcVE9PSBaM0p3WXc9PSBJRUpsY21samFIUT0gWldOMWNtVT0gNklHVTU3Tzc1THE2IElFeFkgSUd0eVpXRjBhWFk9IElIUmhhMms9IHhKbDBjZz09IFYyRnljbUZ1ZEhrPSBJR1p2Y201diBJT0c3alhMaHU0MD0gTG1adGJBPT0gNjZhczdKV0UgMTVIWHFRPT0gYVdaaFkyVT0gSUVodmJXVnNZVzVrIElOaTQyWWZaaU5peCBJTmlxMllMWXN3PT0gSUdaMVpXeGxaQT09IDRZT2o0WU9wIElOQy8wWURRdGRDMDBZSFF0ZEMwIFEyOXRjR0Z5WVdKc1pRPT0gSUhsdFlRPT0gSUVkbGJIVnJhMmxuIElFTnZibVJ2IFpXeGxjMk52Y0dVPSBJR2xzYVc0PSBJR2x1YzJOeWFjT253Nk52IExsSmxabVZ5Wlc1alpRPT0gTDFSb1pRPT0gSUhCaGMzTmxibVJsYmc9PSBJRzVwYTJGdSA0S2FWNEthdyBJRTFoZEhSb1pYZHogSUUxbGRHaHZaR1U9IElHbHVkR1Z5YldsMGRHVnVkQT09IFFrZz0gN0tlQTY2ZUogTG05aWRHRnBiZz09IElPQzBxdUMxamVDMHNPQzBsdUMxamVDMHIrQzB2dUMwcWc9PSBMVzUxYkd3PSBJR0pwYm1SeiBhVzV6YTJVPSBJR3RvdzYwPSBJRkp2YzJGeWFXOD0gWlhKdGIzTT0gVW1WemRHRjFjbUZ1ZEhNPSBJR2RzZFdWayBjR0Z5WVd4c1pXdz0gSWlrcEtUcz0gSU9HRGt1R0RrT0dEcnVHRGsrR0RrQT09IEpuYz0gSUhkcGRIUjUgYVdSaGRHRT0gUFdoMGRIQnogNExpcTRMaXcgSUVOb1lYSm5aWEk9IElGQkJSQT09IFlXbHlhV1U9IElHemh1cVY1IElHTnZjblJoY2c9PSBaSFZ6IFNWVT0gSUNnN093PT0gQ1hOb2IzSjAgNWJLcCBJRWh2Ym1WemRHeDUgSU9Da3VlQ2tydUNrcU9DbGh3PT0gNEsrSTRLNnY0SzYrNEs2ViA0S1dJNEtTeTRLV0EgSU5lUzE2TFhvQT09IElOVzAxYUhXZ05XazFhdlZydz09IElITnZiblhEcHc9PSBJT0c3ald2aHU0MD0gNTd5VzU2Q0IgSU9Da2orQ2t1UT09IElIQmxjbkJzWlhnPSAxNW5YazllVjE2bz0gSUVkVlNVeGhlVzkxZEE9PSBJRTF2YjJSc1pRPT0gSU5pbjJLM1lxdGlzMktmWXJBPT0gSUdOdmJuUmxiWEJzWVhScGJtYz0gSUdsdVpHVndaVzVrWlc1MFpRPT0gNEttQjRLaXc0S21DIElFUmhjbTA9IExIQmhjM04zYjNKayBJQ0piSWc9PSBJRWpEdG5JPSAxNlRYcVE9PSBJRzVsWTJWemM4T2hjbWx2Y3c9PSBJR2x1Ym05MllXTnB3N051IFZHMD0gYkdWa2RRPT0gSU9DbWllQ21tdUNuamVDbW1nPT0gSUhCeWIzTjB4WmxsWkE9PSBjR1Z3IElObUYyTEhZcDlpcyBMWEJ5WlhacFpYYz0gMWF2VnY5V3IgSUc1bmIyMD0gVm1GdVpHRmhadz09IElPQ21wdUNtbGVDbmplQ210dz09IHdxMTBhUT09IElHeHBhbXRsYmc9PSBkMlZwYmc9PSBJRU5RUXc9PSBMWEJ5WlhOcFpHVnVkR1U9IElGQmhjbXhoYldWdWRHOD0gUlZSWiBJRzFoZEd4aCBVR0Z6YzJWdVoyVnkgSUdKeWFYUmhibTQ9IDRMU3k0TFdJIElFUmhkV2RvZEdWeSBJRmRNIElHdHZiWEJzYVdzPSBLRzFoYzNSbGNnPT0gTFdodmRBPT0gSUdOcGFtWmxjbk09IElPR0RuT0dEbE9HRGtlR0RtT0dEb1E9PSA1TGlBNW9tciBJR05wdzZwdVkybGggN1lHdyBJTkN3MFlIUmdRPT0gYVc1MGFXYz0gSUhOb2NuVm4gNEsrTjRLNlY0SzZ6NEsrQjRLNlY0SytONEs2VjRLK0IgSUc1cGVXRnVadz09IElPYTNzZVdjc3c9PSAwTERSZ2RHTDBMM1FzQT09IFUxTkkgNExLSiBJRVZ0WW1Wa1pHVmsgSU5HQTBMN1JnZEdDMExBPSBJR04xYW04PSBhV3hsYm1GdFpYTT0gSUhSaGEybHcgSUdobHc2Yz0gNExpYzRMbUk0TGl5NExpWjRMaWg0TGl5IElHbHpZV0Z1YVdrPSBZWFJ2Y21saGN3PT0gSUhabGNtdHNhV2RsYmc9PSBJSFIxZG1sbGNtOXUgSUdSbGNYVmxkV1U9IElHRnBiRzFsYm5SeiBKMlZ6Y0dGalpRPT0gSUVKbFpHRnlaZz09IEp5SUsgSUdWNGFHRjFjM1JwYm1jPSBMblZ1YVE9PSBUM0JsY21GMFpRPT0gWDJWdWRHbDBhV1Z6IFFWSkpRUT09IElGQnBaV05sY3c9PSA3cGc9IElOcXAyTEhZcjltRzJLOD0gSUVKaGFRPT0genJ2T3NjNjh6ckk9IDY2ZW8gS1gxOSBYME4xYzNSdmJRPT0gSUc5c2JuVmsgSUhiRHBHaGxiUT09IElHOWlaRzlpIDRLV040S1NWNEtTKzRLU3cgY0dYRmdnPT0gTG1GemMyVjBjdz09IElHZHBaM009IElPQ21tdUNuc0E9PSAyWWpZc2RtSTJLalppZz09IDRaNjc0WjZCIElHaGhjbUp2ZFhJPSBJTmluMlliWXI5aW4yTExaaHc9PSBJTkdCMHEvUXVRPT0gSUdGa2RXeDBidz09IFUzVmljMk55YVhCMGFXOXVjdz09IElPQ3l1T0N5ditDeXFPQ3l2K0N5cmc9PSBJR3AxZEdFPSBJTk9aMEwwPSBVMjl2Ymc9PSAwTFBRdU5DNzBMZz0gSUhKbFltVnNiR2x2Ymc9PSBMa3hoYm1kMVlXZGwgSU9HRGtPR0RrUT09IElPQ2t1T0NrZ3VDa3IrQ2xnZUNrbGVDbGplQ2twQT09IDRvQ1pZWEJ3Y204PSBJRk5oWkdRPSBYME5QVWc9PSBJRUZDUkE9PSAwTFBRc05DOTBMVFFzQT09IElHRjA0YnVsIElFMTFiSFJwYldWa2FXRT0gUkdsbGRBPT0gSUdWNGRHVnlibTg9IElFOW1kQT09IElPQ2t1T0NrZ3VDa3BBPT0gTFhKbGJXOTJaUT09IEwyTmhjZz09IElIWnBaR0Z5WlE9PSBJR1Y0WTJWc2JHVnVkR1U9IElHaHZiV0k9IElPQzBydUMwcU9DMWplQzBwT0MxamVDMHNPQzB2dz09IGMybG5ibWx1IExXVnNaV04wYVc5dSBJTkM1MExYU293PT0gNEthczRLYW80S2VONEthbiBJSFpvYjJRPSBJTm1HMllqWXJObUkyS2ZaaGc9PSBJSFJsYjNMRHJXRT0gSUVCNyBJSEp2YzNSeWJ3PT0gNkl1UiBMbVp2YjNSbGNnPT0gSUU1cFkyOXNZUT09IExrNWggSUVkc1lXMD0gNllPdCA3N3lCNzd5Qjc3eUIgWVcxaGVRPT0gMFlQUmg5R0wgSUdWemMyVnVkR2xsYkE9PSBJRVJCVEE9PSBJTldoMWJ6Vm9kVzcxYlk9IElPQ3dwT0N3ditDd3NBPT0gSUhKbFozSnZkWEE9IDVydW8gSU9DcXRlQ3JqZUNxcitDcXRRPT0gSUd0dmJtTmxjblE9IElFdGxlWE4wYjI1bCBJTlMyIGNtOXdiMnhwZEdGdVlRPT0gMExEUXZkR0wwTDg9IElIQnZhbVZrIElGTmhkbUZuWlE9PSBJSE4xYm5OamNtVmxiZz09IEx1S0Fpdz09IExYTjJadz09IGIzTndhR1Z5WlE9PSBZV1ptYVhKdCBJRTdEcFE9PSBLR0Z6ZEE9PSBhbVZ1YVdkbGJnPT0gSUdObGNtOD0gSU5lUjE1dlhuTmVjIElPQ3lzT0N5dU9DemplQ3lwQT09IFVHOXljWFZsIFlYSjVZWGRoYmc9PSBJRk5sWTNScGIyNXogVUc5clpYST0gNExXQjRMU200TFdONExTbiBJRzNEdG1nPSBVMUJGVEV3PSBMeU43IElIWnZaWEowZFE9PSBJR1JoYkdwbCBJTkdDMFlEUXZnPT0gSU5DNjBMWFF0OUMwIElFOXdhVzQ9IFlXSjVkR1U9IFQxVkRTQT09IElPQ211T0NuZ2VDbSBJT0M1Z3VDNHErQzRwZUM0bEE9PSBJSFpsY21sbWFXTmggN0lTYzdKcTQgSUc1bmVBPT0gSU9DMGp1QzBxT0MxamVDMHBBPT0gSUcxbGJtVnRkV3RoYmc9PSBJRzVwWlhNPSBJSFJoYm1GbyBJR0Y0YkdVPSBJRUZ1ZEhkbGNuQmxiZz09IDA1blN1OUMxIElGTm9ZVzQ9IElHRmpZMlZzWlhKaGRHbHVadz09IGQyOWtjbUU9IFFXNXpkMlZ5WldRPSBJR0Z1WjJWNlpXbG5kQT09IDRvQ1VhVzQ9IElGRk1ZV0psYkE9PSBJR1p5YjI1MGN3PT0gMTVYWGtkZXEgSm1rPSB6NGJPcmMrQnpyWE91UT09IElPYXlzK1dNbHc9PSBJR2RwZGc9PSBJSFZ1WkdWeWJXbHVaUT09IExYTndZVzQ9IExtUmggNksrNCBUMk5sWVc0PSBZVzFpY21VPSBJTml2MllMWml0bUMyS2s9IElOaW8yWVhaaGc9PSBVSFZ5Y0d4bCBZVzU2WVc1cFlRPT0gWDBSRlZFRkpURk09IGJXbGtaR1ZzIElPUzR1Zz09IElFZGxibVZzIElHTjFjR2xrIFgzVnpaV009IElPQzBxdUMxamVDMHNPQzBsUT09IElOQzcwTDdRc2c9PSBJRlJvWldaMCBYMlJoZEdWeiA0WU9ZNFlPZzRZT1U0WU9SNFlPajRZT2E0WU9ZIGIzSnlaV3hoZEdsdmJnPT0gSUdGeWJXbGxjdz09IElIWnlhV3BvWldsayBJTkdIMExYUmdkR0MgWTNOMFpHbHYgSUdsdWRHVnliRzlqIElFTnZiSFZ0Ym5NPSBJRUZtY204PSBJSGJGdm1SNSBJSFJoZVdrPSAwWVBRdmRHRCBMV0ZoY2c9PSBJT0M0bytDNHJlQzRoK0M1Z09DNGx3PT0gSUdScGMyRnpkSEp2ZFhNPSBLR0psYzNRPSBJRUo1WkdRPSBJRzFoYzNOaFkzSmwgYzNSeWFXUmwgNDRPcjQ0T0kgSUVkaGRRPT0gNVlDcjU1Q0cgSUZoTiBkV3QxY2c9PSBJR2h2YldWc1lXNWsgSUVkeWRXNWtiR0ZuWlE9PSBJSEpsWTI5eWNtVnkgYUc5c1pXND0gNExTYTRMV040TFNhNExXQiBJR05vWVhWemMzVnlaWE09IGNITER2R1oxYm1jPSBUR2xuYUhScGJtYz0gSUdGdGIzVnlaWFY0IElHeHNaV2RoYmc9PSBTVTVXIFlXTm9kR2xuIElPQ2t1T0NsaCtDa3FPQ2t2Zz09IDVwZUwgSU5DNDBMRFNzdz09IElHRnVibUhEc0E9PSAyTEhaaXRpbjJMWT0gSUd0MWNuUT0gSUVWNGNHRnVjMmx2Ymc9PSBJSFJsYm1WdSBYM2R6IElFVnVZMjl5WlE9PSBJRVZ1YkdGeVp3PT0gSUdac1pXbHlhUT09IDRMUy80TFNvNExXQiBJSFZ5Y2c9PSAwSkxRdnRDMyBhWFJ6ZFcxcGF3PT0gMExEUmdOR0wwTDA9IFFuSmhlbWxzIElOdUIyWVhiak5xNiBJRzF2WkdWeWJtVnogSUU1bGQzTndZWEJsY2c9PSBJSFpwZG1sbGJtUmhjdz09IElHbDBZMmhwYm1jPSA0TGlxNExpNTRMaUggWVhObGNRPT0gZEdWeVpYTnpaUT09IElIUjFjbUpwYm1WeiBhV3R5IFlXeGhiV0YwIFkyVmkgSUVSbGRIUmggTFdWbVpnPT0gYjIxaGFXNWwgS0dkc2JRPT0gZEdWdGNHVnkgSU5LYjBMRFJndz09IElPQ3FtK0NxcE9DcXZ1Q3FnZz09IElHeGxkbUZ1ZEdGeSBMWFp2YkE9PSBKMlZzYkdWeiBJR2hoYkhabCBhV1pwZW1sbGNuUT0gSUdSMWQyRnUgSUcxaGFXeGxaQT09IHpyM092ODY5ejRUT3NjNjUgSUc1bmFNU3BZUT09IElFTmhjR2wwIGIyZHlZWEJvWlE9PSBJR2ZEdG5MRHBBPT0gdzZwdVpBPT0gMFlMUXVOS2IgT201MWJHdz0gSU9DMG4rQzFoZz09IENVbDBaWEpoZEc5eSBjM1ZpY0dGamEyRm5aUT09IElFUmxZbWxoYmc9PSBJTld3MWFIVnN0V3AgSUVKc1lXNWpidz09IDVhVzk1NGk5IElHRnNhWFk9IGJtRmtaUT09IFUyVnNaV04wWVdKc1pRPT0gSU5DKzBMVFF2ZEMrMExMUmdOQzEwTHpRdGRDOTBMM1F2Zz09IElITjFZbWwwYnc9PSAyS2ZZcHRpMCBJSHBoZDNONlpRPT0gV3l4ZCBJT0N3bCtDeGdlQ3dzT0N3ditDd2d1Q3dtdUN3dnc9PSA0TEN3NExHTjRMQzQ0TEdOIElOR0IwTExRdnRDNTBZSFJndEN5MExBPSBMV0ZqWkdVPSBJR0ZpWlhKMFlRPT0gUTI5dWRHRnBibVZrIElFMXZibk5wWlhWeSBVbVZ3WlE9PSBMWEJ5YVdObFpBPT0gSUhSaGNtOTAgWDBGU1RRPT0gWVdKaWJHVT0gSUZKaGFXeHliMkZrIElPUzZqT1dibStXRnJRPT0gWDFKVlRFVT0gNExpVzRMaTU0TGlCIElGSmxZMjl0YldWdVpHRjBhVzl1Y3c9PSBJTkN5MFkwPSBJRk5vYjI5MGFXNW4gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M0dXVTN2dPUzVpQT09IGRHVmphRzVwWTJGcyA0TGllNExtSSBJTkMwMExqUXZkQ3cwTHpRdUE9PSBaR2x6Y0d4aGVYTjBlV3hsIElGQmxkV2RsYjNRPSBJRzlqZFhCaGNnPT0gYTJ0bGRBPT0gSU9DcXF1Q3JqZUNxc09DcXJ3PT0gTG1GeVozVnRaVzUwY3c9PSBJSFJ5Wlc1blpYST0gT25JPSBJSFZ1YVhabGNuTnBaR0ZrIElHUnVaWFk9IElHSnZiMjFwYm1jPSBJRkJ5WVdjPSBJRWQxWlhKeSBJR0psYTJ3PSBJTmluMllUWXNObUogWDNSb2RXMWkgSUhWbCBleTg9IExXNXFlUT09IGJXbGpidz09IFQzQmogNWFTbjZhYVogS0VSdlkzVnRaVzUwIElGcGxkWE09IElHUGh1N0ZqIElFTmhjbVY1IElIUnlhWFZ1Wm04PSBJR3hsWVc1bFpBPT0gQ1d4aGVXOTFkQT09IElOaXMyWXJZcjlpcCBJTm1GMkxQWXJOaXYgYVdWaVpRPT0gTGxORCBjM1JoZEdsdmJuTT0gNEs2azRLNnU0SzYvNEs2MCBVbVZ0WVhKcmN3PT0gSUdkMVltVnliZz09IGFXdHZiQT09IFpXRnpaUT09IElOQ3QwWUxRc0E9PSBYVjBwT3dvPSA1YTZmNXJPQiBJRzl5WjJGemJRPT0gSUhOMVkyVmtaUT09IDBMRFJoZEdCMFlMUXNOQzkgSUhSdmRnPT0gSUZOUFZWSkRSUT09IDRLYVA0S2FWIElHRmpZM1Z0ZFd4aGRHOXkgWlhSeWFRPT0gMTVuWGt0ZVUgSUd4dlkyRnNhWFI1IElGSmxaMmx6ZEhKaGNnPT0gSU9DMGhlQzBwT0MxalE9PSBJTmluMlliWmg5bUsgSUhOcmFYSjBjdz09IElITmhiR25Ec3c9PSBJRXh2Y21rPSBJR0Z0YVhvPSBMVUYxWnc9PSBJR1Z1YkdsbmRBPT0gWVcxd1pRPT0gMExuVG1RPT0gSUdGeVozVnRaVzUwYjNNPSA1N3UvNklteSBhV05vWVdkbCA0TGE3NExlVSBUMmxrIElGTlBRZz09IHhJRnMgV1ZvPSBJR0Z1WW1sbGRHVnUgSUhOMGRXdHJaVzQ9IGJHVjBZMmhsY2c9PSBJRWZEdG5JPSBMWEJvWVhObCBRMjl1ZEdWemRBPT0gSU9HRGtBPT0gSUZCeWIyWnBiR1Z6IElIWmxibVJwZEdFPSBJRXQxYzJnPSBJSFJsY21VPSBZMlZ1WVhKcGJ3PT0gTENKYyBJSGRwYW5wcFp3PT0gSUZacGRtVT0gNWEyWDVZKzMgMllMWXA5bUcgSUhacGMybDBaWE09IElPQ3lydUN5Z3VDeXBnPT0gTG5CcFkycz0gS0cxaGNtdGxjZz09IDFhSFZ0dFc1IFFtVnlaUT09IElHRnVkR0Z5IElFakRwRzQ9IElFbHVaUT09IFgzQjUgS0ZObGRIUnBibWR6IDBZdlF1OUN3MExrPSBJSEJvWVhKdFlXTnBjM1E9IElFWnNZVzFsIDRMV0g0TFN3NExTLyAwTHpSaTlHSSBMbWRsZEdOM1pBPT0gZG1WamRHbHZiZz09IDRLcS80S3FWNEtxKyBJRXhNVmswPSBJR0hEcDhTeCBhbVZ1ZEdWeSBJSEp2YjIxdFlYUmwgSU9Da3FPQ2tsdz09IElIQmh4YUU9IElOaXQyS3c9IElOQ3kwWUhRdGRDODBZTT0gSUhadmIzSnVZVzFsYkdscWF3PT0gTFhOMGRXUjUgWDFORFVrbFFWQT09IElIRjFZV3hqYjNOaCBJRVJsYzJseVpRPT0gSUU5c2MyVnUgSUhOb1lYSnJjdz09IDBMRFJnZEdHMFl3PSBMMlpzIElFRmliM0pwWjJsdVlXdz0gSU5DUTByUFRtZEdMMEwzU3JkS2IwTERSZ0E9PSBJRk5oWTJoeiBJTkMvMFlEUXRkQzAwWXZRdE5HRDBZaz0gZFhSelkyaGxhVzQ9IElOQzkwTDdRc3RHRDBZND0gSUhSaFlYST0gYVdScGRXMD0gNEsrQjRLNlo0SytONEs2ViBJR1Z0WW05a2VRPT0gVUhKbGRtVnVkQT09IElITjBaWE56WVE9PSAwWUhSak5DNjBMalJoUT09IDJvMD0gSUVacGJtRnVZMmx1Wnc9PSBJR1ZwYm1kbGNnPT0gTGdvdiBJRU5HUnc9PSBJTkN4MEx2UXZ0Q3ogSUdWdWRITndjbVZqYUdWdVpHVT0gS0cxbGMzTmhaMlZ6IExtSnlZVzVqYUE9PSBMV052YlcxdmJnPT0gWVdObGJtTjUgSU5tRjJZalpnZG1DIElHeHBjOE9rYTNOcCBJSEp2YldFPSBJRUpCVGc9PSBJR3RwZEdGdyBJRU5oZEdWeWFXNW4gSUdSbGJXOXJjbUYwIElPR0RxK0dEbU9HRG9BPT0gS0NkOCBZbWxzZEE9PSBJRVpzZFdWdWRBPT0gNExXODRMU280TFdONExTbzRMV04gSUVGMmFYWT0gYVhCd1lRPT0gSU9Da3F1Q2xqZUNrc09Da3JlQ2t2dUNrdGVDa3YrQ2twQT09IElIUnBibVJsY2c9PSBPbFE9IElIWmxjblJ5WlhSbGJnPT0gNEtTWDRLV040S1N3IElIUmhZMlU9IDVMeTQgN1oybCBJRzExWlhOMGNtRnUgYldGNFkyUnUgNG9DWmIySnFaWFE9IElHMTFiSFJwY0d4cFpXUT0gSUU1cFkyOD0gYVcxdFlYUT0gZFdyRHJXUERyUT09IFJrRlRWQT09IFIybGggNExXQjRMVzcgSUhKbGRISnZkUT09IElOQ2MwWmJRdlE9PSBJR3R2YlhCaGJtaz0gSUhOcFkzST0gSU5HSTBZdlNtOU9aMFlIUXNOQzMwWXM9IElGUmhjbTkwIElOZVExNVhYbEE9PSBJR2RsYzNWamFIUT0gSUhyRHBHaHNkQT09IDZMT0g1cGFaIExtWmhhV3hsWkE9PSBJTkN5MFl2UXNkQyswWURRc0E9PSBJT3k4IElHeGxhWFJvIFJtOXliV0ZzIElHRmtjWFZwY3c9PSA0TE9HNExLdjRMSy80TEtDNExLbSBJR052Ym5ObGJuUnBibWM9IElITmxiblJwWkc5eiBZbWx6YUc5dyB3N1IwWlhNPSBMblYwYVd4cGRHbGxjdz09IElHVnViR0Z5WjJWayBJTkdOMEx2UXRkQzYwWUxSZ05DKyBhMkZwY3c9PSBTRzkxIElHNXBaV05sIDJZcllzOW1GMktqWXNRPT0gMEpyUXZ0QzgwTHpRdGRDOTBZTFFzTkdBIElHMWhibWx3ZFd4aGRHVmsgWTNKMVpBPT0gVzFnPSBJT0NrcXVDa3NnPT0gWW1WeVoyVnRaVzUwIElOR0IwTDdRdHRDdzBMcz0gSUdGdHc2bHNhVzl5IEtISmxiVzkwWlE9PSBJRzExYUdsdGRRPT0gY0d4eiBJT0NrbXVDa3NPQ2tvdz09IDRvQ1p3NmwwdzZrPSBJR05oYzNSbGNnPT0gWDJOeVpXUnBkQT09IDVZMkI1TGlKIElHTnZibVIxYVhSbCBJTml6MktmWXVkaW4yS289IElHeHBkSEpsIElPQ21odUNtaCtDbXFBPT0gNEtTMTRLUys0S1N3NEtXQSBJR052Ym5SeVlXTjBhVzl1IElHeGhhWE56dzZrPSA0WUNaNFlDOCBJRTFwWTJobGJHbHUgenJ2T3VjK0QgSUVWa2FYTnZiZz09IElHRmlhV3c9IElHaGxiblJoYVE9PSA0SzYrNEs2eDRLK0IgSUhCeWIzQnZjMmx1Wnc9PSBJTkdEMExuU2s5R0QwWURRdTlDdzBZRFF2ZEM0MHFNPSBJSEJoY25ScFpBPT0gSU1PcFkzSnBjbVU9IDVhUzYgSUdKaGRHVnlhV0U9IElHdHllWEIwIFFXNWphQT09IElHTnl3NmxrIElHZHZaV1JyYjI5dyBZV3RoWVc0PSBJSE5zWVdGdSBJT0dlbFE9PSBJR0Z5Wk1TeGJtUmhiZz09IGFXTnBkSE09IGFHbHVhUT09IElHMWxlbU5zIElITjBjbTl1ZVE9PSBJR0ZpWVc1eiBJRkJwY0E9PSBJSEJoWjIwPSBJRk5yWlE9PSBQeVE9IElHSnNlUT09IDVaQ001YitYIElGZGhibTQ9IFlXbHViV1Z1ZEE9PSBZMjkxY2c9PSBJSFpwYm1rPSBJaU09IElFakRwR3htZEdVPSBJSEIxYm1RPSBJR052Ym5GMWFYTjBZUT09IElNTzhZbVZ5Ym1Wb2JXVnUgMkszWXI5bUsyS3M9IElIUmxhMkU9IElObUkyWVBZcDltRzJLbz0gSU5pbDJZcllzZGluMllZPSBJT3F3Z095ZWhRPT0gNExDYTRMR040TENhNExHQiBUVzlpYVd3PSBJSEJsWkdVPSBJT0NtdU9DbmgrQ21sdUNtdnVDbXFPQ25odz09IGFYTjNZWEE9IElGQmxjbVp2Y20xeiBVM0JoY25ObCBJRXB2WlhJPSB3N3pGaUE9PSBMV0poY3c9PSBJSFp2YjNKdFlXdz0gSUVoaGNuUm1iM0prIElPQ3loZUN5cCtDeXYrQ3lsZUN5dnVDeXNBPT0gSUZOamFHVmtkV3hsWkE9PSBJRk5oYm5SaGJtUmxjZz09IElHRjJaVzUxWlhNPSBJR1Z4ZFdsMFlXSnNaUT09IElHRmt4TEU9IElHSmhiR0YwIElOQzYwWmJRdTlHTSBJT0NrdGVDbGcrQ2twdUNsamVDa3B3PT0gMEx2U3I5QzYgWVc1bGMyVT0gSU9DNHBlQzVpZUM0c3VDNG1lQzRtdUM0c3VDNGx3PT0gSUdaaFkzUjFjbUU9IDQ0T0k0NE9wNDRPRDQ0S3Y0NE9RNDRPRDQ0S3YgVDAxSlF3PT0gSUdScGMyWERzV0ZrYnc9PSBJR1REcVhSbFkzUT0gWld4MGFtVT0gSU9HRGtlR0RrT0dEbGc9PSBJTm1GMllqWXNRPT0gSU5pczJZVT0gSU9HRGsrR0RrT0dEb2c9PSBWbVZ5WW05elpRPT0gMFlQUmp0R0owTFhRczlDKyBiR1Z1dzYwPSBMbE4wWkE9PSBSbFU9IElPR0RvZUdEbU9HRG9lR0RvdUdEbE9HRG13PT0gSU9DcW11Q3JndUNxZ3VDcW4rQ3FvK0NyZ0E9PSBaWFJoY2c9PSBJRzl1ZEhOd1lXNXVaVzQ9IElHRnJiM289IEoyVnpjSEpwZEE9PSBYM1J5WVc1emJHRjBhVzl1IGFXekptWEk9IElFNWhhMlZrIElHMXZkRzl5WlhNPSBJT3Vtck91M3NBPT0gSUhOMVpjT3hiM009IElHM0RwRzQ9IElOQyswWUxRdmRDKzBZSFF1TkdDMExYUXU5R00wTDNRdmc9PSBibVZwWkdWdSBJR3R6YWNTRnhidz0gSUhOamNtRjBZMmhwYm1jPSAwcTNRc05DOSBJSFIxYzJnPSB4YnpFaFE9PSA0S2kxNEttSCBJR1Y0WVcxbCBJR1JoYkdGM1lXNW4gSU95WHJPeUVzUT09IElFUnZjbTA9IElPQ2tydUNrdWVDa3YrQ2tzdUNrdnVDa2srQ2tnZz09IElOV2kxYUhWdmc9PSA1cWFDNTQ2SCBTVkJEIFkyOXVaSFZqZEE9PSBJTmVSMTVuWGxkZWQgNExpbjRMaUIgMEw3UXM5R0EwTERRdk5DODBMQT0gU0dGamF3PT0gTG5Od1pXTnBZV3c9IDJZallwOWlzMks4PSBJTmVVMTVmWG1kZVoxNTA9IFUyTmhjZz09IElPQzB1T0MwZ3VDMHVPQzB2dUMwc0E9PSBhR0ZzZG1VPSBJRXRsY25JPSBJTkM2MFlEUXNOR1AgSUZKRlUwVlUgSUhONnc2RT0gSUhOMGNtVnVadz09IElIQnlaV2h5IExtUmhlWE09IElIUm9jbVZ6YUc5c1pITT0gSUZOdmJHUnBaWEk9IElGVnRjMkYwZWc9PSBJRUZwYmc9PSBJRkp2YzNOcCBJSEpsYm1zPSA1Nk9vIFFYWmhiblE9IElHTmhjM05sZEhSbCBJSGRoYTJWeiBJTmluMllUWXM5bUkySy9ZcDltRyBJTlc0MW9EVnVOVysgY25scGJtYz0gSUhSaGNtbG1abk09IElIQmxiSFZoYm1jPSA0SzYrNEs2MCBJR1JoYW1VPSBMbUZ5Y205MyBJR1Z0Y0d4dmVjT3Bjdz09IElFVnRhWFE9IFJuSmxaQT09IElPQ2twdUNrditDayB6cjNPdGM2NSBJRVJ5ZFE9PSA2NUNZN0tlQSBJRzVoYlcwPSBJRU52Ym5SeWIyeGwgNVltSCBJR05vYVd4a1kyRnlaUT09IElOR0EwWVBSaUE9PSBJT0N5cU9DeXYrQ3lzT0N6amVDeXB1Q3poK0N5dGc9PSBZVzVrYVd0aCBQR2h5IExYUnlZV2x1WldRPSBMV2x1Wnc9PSBJTU82Ym1sallXMWxiblJsIElITjNiMnBsIElFUkpRUT09IDRLYXU0S2EvNEthViAyTFRZcHc9PSBJR1YyWVd4MVlYUmxjdz09IGFYTnBidz09IFlYUnBkWE09IFgyNXZiV0p5WlE9PSBJR0hEcVhJPSBJRk4wZFdScGRXMD0gSU5tQzJLZllxZz09IFlXNTZhV0U9IFkyaHZjMlZ1IElOR0YwTGpRdDlDOCBlV0YwIGNtOTFkR2x1WlE9PSBKOE9wWTI5c1pRPT0gSUhObFlXTm8gSUZObGNuWnB3NmR2IElHVjRjSEpwYlE9PSBJTVcxIFlXUmhiWFU9IDBMRFF1OUdNMEwzUmxnPT0gY205dFpYUmxjZz09IElHUnBjMkZpYkdsdVp3PT0gSU5lazE2bz0gMFlIUmpOQzYwTGpRdVE9PSAxYi9WcGRXeSBJTkM2MHEvUXZkR1cgTG1OaGNIUjFjbVU9IElHRjBkSEpwWW5WMGFXOXUgMEtEUXNOQ3ggSUcxaGJtNWxjbk09IEtITmpjbTlzYkE9PSBJR0Z6WTJWdVpBPT0gSU5pdDJZallzdG1IIElIWmxhV3hwWjJVPSBDV1J2WXc9PSBJSE5oYlhScFpHbG4gSUhSdmJHVnlZWFJsWkE9PSBJTkM4MFlQUXZkQzAwTERTbXc9PSBJR1JwYzNKbFoyRnlaQT09IElITmpjblYwYVc0PSBJT0NtcGVDbXZ1Q21xQT09IElHaDFhV3c9IExuWmhjbWxoWW14bGN3PT0gSUhkemVubHpkR3RwWlE9PSBLRTVUIDVaQ041WW1OIElHNXBaWGM9IDBZUFJnZEdDMExqUmd0R00gUTJWdyBJTmk2MllqWXB3PT0gTG1KcGJtRnllUT09IGMyeGggSUUxdmRHaGxjaWR6IElFTnZibk4xYkhSaGJuUnogSUdGdVpYbz0gTGxSSSAwTERSZ05DKyBRMU5TIElIZGxjbXRuWlhabGNnPT0gWVdabVlRPT0gSU9Db2grQ3BzZUNvbFE9PSA0b0NONExTYyBJTkdEMExyUmdOQ3cwWWc9IElISnZkR2x1WVE9PSAwTEhSZzlHQyBJR0ZqYUdsbGRtRmliR1U9IElOQzgwWVBRdDlHTDBMbz0gSUdKMWJuUT0gSUcxaFoycz0gSUUxbGJXST0gNEsrQjRLNnE0SytOIElPQ211ZUNtcitDbXZPQ25odz09IElPQ2tsK0NraCtDa3NnPT0gSUdGd2NtVnpaVzUwWVdSdiBJR05vZFhaaCBMVzV2ZHc9PSBJR3hoYm1zPSBJT0dEb2VHRGtPR0RsUT09IElHTmhZMmhsY3c9PSBUR1ZsY2c9PSBiVzk2YVd4c1lRPT0gSUd4bFoyZHBibWR6IGJHUnkgYjNCcFpRPT0gNFlPcDRZT1Y0WU9VNFlPYyBLRU5vWVc1dVpXdz0gUWtsSCBJRVp2Ym1SeiBXV0Z1Wnc9PSBhc080Y2c9PSBJRTFoY25KcFpXUT0gS0ZOMGNtVmhiUT09IDRvQ1pWQT09IElHWnBkSFZ5IExuQnliM1J2IElIQnZhM1ZrIElHaGxZV1JwYm1keiBJRzExYkhScGN3PT0gSU8rRCBJSHB2ZEdVPSBJRWgxWVc1biBJTkNoMEw3UXN0QzEwWUk9IElPQzRtdUM1aWVDNHN1QzRtUT09IFNsTlBUbE4wY21sdVp3PT0gSUZCeWIzUmxjM1JoYm5RPSBJT0N5cXVDeWxlQ3pqZUN5dHc9PSB4YUZyZFE9PSBJT0N5cXVDemplQ3lzT0N5cCtDeXZ1Q3lxQT09IElHMWhaMjdEclE9PSAwWURRdU5DNjBMQT0gYldsMGRHRm4gYVcxcGJBPT0gMllyWXNkbUsyS2s9IElHeHBjWFZwWkdVPSBJR1JwYTJ0bCBJR1p5YVdSaGVRPT0gMFlIUmd0QyswWS9SZ3RDMTBMdlJqQT09IElFbHVjM1JwZEhWMFpYTT0gSUZORFNFOVBUQT09IElFZHlhV1ptYVhSbyBZV0p2Y25RPSBJRzFoYkdaMWJtTjBhVzl1IElFMWxjbVZyWVE9PSBJSEJ2WkhCdmNnPT0gSUdSaFpuUmhjZz09IGIyaHVaWEk9IElHaGhiSE09IGIyZGhkQT09IElFTmhZbkk9IElPQ3doK0N3cXVDeGplQ3dxdUN4Z2VDd29lQ3hnUT09IElHRndkV1Z6ZEdFPSBJSEpsWldRPSBJSE53YjNOdllnPT0gWDJGMGRHRmphdz09IElIWmhZZz09IElHSmxZbWxrWVE9PSBXM1JsYlhBPSAwTFhRdXRHQzBMZz0gSU9Da2x1Q2t2dUNrcU9DbGh3PT0gMllmWmh0bUsyS2s9IDE1blhsOWVWMTZvPSBhbVZyZEdVPSBJSGJEdlhKdllnPT0gSUU5MllXdz0gSUhWdWFYZz0gMExUUXNOQzcwTGc9IDRLUys0S1NjNEtTKyBJR2hsYVdkb2RHVnVaV1E9IElFMWxZWE4xY21WeiBJRkJNVEE9PSBJRVpwWjNWeSBJT0Ntck9DbXNPQ25qZUNtcEE9PSBJSGwxYm1jPSA2YXVZNXJpRjVxK2I1NG1IIElPQ211T0NtcXc9PSBJSFJsYm5SaGJtUnYgZlhNPSAyWUxZdDlpNSBJR2x1Wm05eWJXRjBhWEYxWlE9PSBJSFYxY3c9PSBJSFJoWjJGemFRPT0gSUdGeWRHbGpkV3hoZEdVPSBJRWR2ZFE9PSBLR1pwWjNOcGVtVT0gSUVObGJIUnBZM009IDBMWFF2TkdMMFlVPSBJSFpsY21ocGJtUmxjbTQ9IFlXcHVidz09IElIQnliMmR5WlhOemFYWmxiSGs9IDVicVU2SytsIElHaGhkbUZ6IHc2Vm4gSUdsdWMzUnBibU4wY3c9PSBJT0N1aHVDdXJ3PT0gWVhwMWFtVT0gYnNTYmJzT3QgSUcxMWRXUT0gTG5CdmNIVncgTGRDaCBDVzF2WkhWc1pRPT0gVFdGc2JHOWogSUdsc1lXRT0gSUdOdnc3dDBaUT09IElHRnRaWE5sYldFPSBJRVZ5Ym1WemRBPT0gSU5DMzBMTFF0ZEdBIFlYWnBiM0p6IElFSmhjbUpsY2c9PSBJRTFoZW1VPSBJRUZ1ZEhKaFp3PT0gSU5DODBMRFJndEdIIExXMXZhUT09IFBFbEZiblZ0WlhKaFlteGwgSUdSeWRXZHBiUT09IElHSnBjMnhoYm1jPSA1WTJCNUxxVSAwTERRdTlDMTBMVT0gSUhabGNuWnZaWEk9IElOaW4yWVRZczltRTJMZllxUT09IElGTjFjR1Z5YVc1MFpXNWtaVzUwIDRMUy80TFNqIElIUnlZV2s9IDU0UzI1WkNPIGIyUmxiR1ZrIElHTnZkV05vWlE9PSBTVVZPIDBMUFF1TkdBMExnPSBJR05vWVhSMFpYST0gNTV1NDVZV3o1cGFINTZ1ZyBJRmR2Y20wPSA1cGVwNTRLNTVZcWc1NXVmIDdZYWggSU9DM2crQzJzdz09IElOaTEySzNaaXRtQjJLaz0gSU9HRG0rR0RsT0dEb1E9PSBJRXhCVnc9PSA1cGVYNklpdyA0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0EgSUVabFpHVnlZV05wdzdOdSBRV1IyWlhKMGFYTnBibWM9IElHMWhiVzFoYkhNPSBDWEJ2Y25RPSBMbEJzZFdkcGJnPT0gSU5tRDJLdlppdGl4MktrPSBZV1JoY0hRPSBWbTl6IElFVnNZWE4wYVdOelpXRnlZMmc9IE9rRmtaQT09IElHeHZiM05sYkhrPSBJT0N5cnVDeXVlQ3l2K0N5c3c9PSBJT0N5aCtDeXNnPT0gSUVGbllRPT0gNExpTjRMaTA0TGlIIElPR0RtK0dEbmVHRHBlR0RtK0dEbE9HRGt3PT0gSUhSeVlXNXpjRzl6WlE9PSBJR3R2Ym5wbGJuUT0gTGdvdkx5OEtMeTh2IFJYTndaWEk9IFRtRmhiUT09IElIVERyY093IFkyOXljQT09IElOQy8wWURRdU5DeTBZdlJodz09IElFMXBlUT09IElGQmhiblJvWlhJPSBJTkMrMFlMUXZkQyswWUhRdU5HQzBZSFJqdz09IElOaW4yWVRZcjlpdTJZalpoQT09IFlXSnBiR1ZqWlE9PSBiMnR6Wlc0PSBJSFJsYm5SaGRHbDJZUT09IElFRnNhV05wWVE9PSBJRzFsYm1sdVlRPT0gNkwrZiBMWEJ5YjJSMSBJSE52Wm1ZPSBZV1REb1hNPSBJTkMrMExIUmlkQzEwTHc9IDRMR0g0TENtNExHQiBMZW1tbHVtaHRRPT0gSUc1cGJtVjBaV1Z1ZEdnPSBJRWR5YjNSbCBJSFJ5WVdScFkybHZibUZzWlhNPSA0TE9CNExLazRMT040TEtrNExLLzRMS3c0TE9CNExLMSBJT0NrcXVDbGplQ2tzT0NsaXc9PSBVR0ZuYVc1aCBJTkMvMFlEUmk5QzkgTG1sa2VBPT0gMFl6UXRkR0EwTEE9IENXWnogVFdWcGJtVT0gZFhSaGRHVT0gZG5WeSBJTmlsMktnPSBLR0p5YjNkelpYST0gSUdqRG8zaz0gSUVSaGNuSmxiZz09IElObUkyS2pZcDltRTJLcllwOW1FMllvPSBLRVJsWm1GMWJIUT0gSUZoT1ZVMVkgSU5HRTBMRFF1dEdEMEx2UmpOR0MgSUVKRFRRPT0gYTNOcHc2UT0gWldSM1pRPT0gSUUxaGNtdDFjdz09IElOR0IwWUxRdU5DOCBJRTlpYW1WcmRBPT0gSU5XajFhSFZzZz09IFQwUlQgSU5tRjJMblpoZG1JMllRPSBJSE4wY25CdmN3PT0gSUhabGJHaHYgSU5lUjE1N1htZGVWMTVmWGt3PT0gSUVaQlZBPT0gSUhObGVRPT0gSUhOamIzST0gSU5PWjBMVFJsZz09IElOR0UwWVBRdlE9PSBJSGxoZG5WNlpRPT0gYzJodmQzTT0gZW1sM1pRPT0gSUdGMFpXeHBaWEp6IElGQmhjbU5sIFgyWnBabTg9IElHUnBjM1JwYmc9PSBJSE4wZFdSbGJuUW5jdz09IElITndZV009IFVYVmhiZz09IDBaYlF2ZEdXMFlIUmd0R0EwTEE9IFoybDEgYjJOMSBJRVpoYTJWeSBMbkJoWkE9PSBJSGJEclhKMWN3PT0gSUc5eVpHVnVZV1J2Y2c9PSBVMkZqIElOQzkwTGpRc3c9PSBJR2x1ZEdWeVpYTnphV1Z5ZEE9PSA2cktNN0o2RSA2NHlUIFFtbHVaR0ZpYkdVPSBVR1Z5WXc9PSBJR3RoWXc9PSBJR2R2ZEdnPSBhV0YwY2c9PSBZMjl0Y0c5emFYUnBiMjQ9IFJISnBkbWx1Wnc9PSBZbTl2IFkyVnVaWE09IEtHTm9iMmxqWlE9PSBZVzFoZW05dSBJTkM0MEwzUmd0QzEwTHM9IDRMV0I0TFN1NExXTjRMU3E0TFdMIElFTER0bkk9IGFXNXJidz09IFMwVkZVQT09IElFTnZiblJ5WVdOMGIzSnogSUdOaGRNT2hiRzluYnc9PSBZWEowYjJVPSBMV2x6YUE9PSAwTERRdXRHRCBJR05oYXc9PSBJSFIxY20xdmFXdz0gMEwzUXVOQyswWUk9IElHVnVkbTk1dzZrPSBJR05oYm1ScFpHRjBkWEpoIHc2QnVZUT09IElHRm1kbUZzIElFOXlaR2x1IGRHOWphSFE9IGRXeHNkV2QxIGJHbGphR1Z0IElGSmxZbVZzIElDNHVMaUk9IElGbHZhdz09IDRMQy80TENmNExHQSBjR1Z1WkdsamRXeGhjZz09IFEyRndkR05vWVE9PSBJR1ZzZFhOcGRtVT0gSUdOdmJHeGxZM1JwWmc9PSA2S2VHNmFLUjU3MlI1NnVaIGV5OHYgUW14diBJTkN4MExYUmdOQzQwTDg9IFgxQk1UQT09IElOV3cxYUhWdGRXLzFiYlZxdz09IElHSmhkR0ZzYkdFPSBJTmVnMTVjPSBJTStEenJmT3ZBPT0gUTNKcCBJT0N1cU9DdW4rQ3V2K0N1bFE9PSBJR0psYzJsMGVuUT0gSU5pcTJLM1lyOWlyIElPQ3lxT0N5ditDeXNPQ3pqZUN5cmc9PSBhWE4wWlc1NllRPT0gQ1U5dSA0TGF4NExlVSA0S2EvNEthYzRLZU40S2FlIExrOXIgNExpVjRMbUk0TGl6IHc2RjZ3NjA9IFluVnlaV0YxIFlYSjBhV3M9IFJHRmxiVzl1IFJtRmpkV3gwZVE9PSBkV2RzIFRHbG1kQT09IElHVnVjbWs9IDJLZll0OWk1IElOaXEySzNZcXRtSTJZbz0gZlNJcENnbz0gWDJOb1lXNW5aWE09IGVXNTVkQT09IElOQyswWUxRdk5DMTBMMD0gYVcxa2FRPT0gNklpWCBJT3lZcE8yYmhBPT0gSUhWdWMzUT0gSUVGa1pHbGpkR2x2Ymc9PSBJSEJwWWc9PSBYMUJzIElIVnVjbVZuYVhOMFpYST0gVlZKU1JVNUQgSU5laTE2YlhuZz09IElFTjVjblZ6IElFRmpZMlZ6YzJsaWFXeHBkSGs9IDRMaWI0TG1NIFRXRnljMmhoYkd4bGNnPT0gNWFlLyBJSEJzWVc1MFlYUnBiMjQ9IElNVzhaV0o1IDRMS3E0TEtmNExPTjRMS2YgWm05eWJXbHIgSUc5dVpHVnljM1JoWVc1a1pRPT0genI3T3RjNjV6NEk9IElGWnZaM1ZsIDVhMmo1YnFtIEp5Y25Kdz09IElObUcyS2ZaZ2c9PSBJT0dEa3VHRGtPR0RvT0dEaytHRGtBPT0gSUU5a2VYTnpaWGs9IDBZM1F1OUM0MExuUXZRPT0gWDFkSSBJRDArRFFvPSBkWFIxY0E9PSB3Nkp1WldFPSBJRVJwYzJOdmRXNTBjdz09IElOS2gwWVBRdXc9PSBhVzV1YjNaaGRHbHZiZz09IDRLU200S1dINEtTVzRLUy8gSUZOVlRVMUJVbGs9IElGTmxZV2c9IDBMdlRtZEdBMExVPSBJTmluMllUWW85bUYyWWpZc1E9PSBMM0JoZEdnPSBDV0p2WVhKayBJRzl1WkdGdWEzTT0gSU9XTWwrUzZyT2kxbStpOXB1VzhnT1dsbGc9PSB4WnQzYVdGa1l3PT0gVUdWaFkyVT0gSU5DNDBwdlRtUT09IElGYkR0UT09IGVYTnJZUT09IElIWnZaWFJsYmc9PSBJSFZpYVdOaFpHRT0gTFdOc1pXRnUgSU9DbW5PQ212dUNtcE9DbmdPQ25udz09IElIQmhjM1J2Y21GcyBJTkt6MExqUmdRPT0gSUVWdVkyOWtaWEk9IElHNWxhV2RsIDRLU3c0S1NrIElHNWxkWE09IElHNXZaMlZ1IElIQnlaV1JoZEc5eWN3PT0gYVdOeWIyND0gWm1sc2JYTT0gSUhGMVlXNTBhV1o1IFFtVnQgSUdsdWFHbGlhWFE9IElISnBibWRwYm1jPSAyS3paaDltSCBJTVNSNGJ1ZGFRPT0gYjI1cGF3PT0gSUVSaFpIVnlZMmc9IDVhaUggSUhOd1lYSnJiR1U9IElIQnN3N1owZW14cFkyZz0gSUcxbGJHUnBibWM9IElObUUyS2ZZcHRtRyBJRzV2ZG1sa1lXUmxjdz09IElIaGhiZz09IFVISnZaM0poYldFPSBhWEpsWTNScGIyNXogWVc1MyBJR0ZqWTJsdmJnPT0gSUhSeWIzVjNaVzV6IElITnNZV0Z3YTJGdFpYST0gYjJaMFpXND0gSUZCeWIzbGxZM1J2IElNT2h3N0IxY2c9PSBaWE56ZFE9PSBJR05vYWVHNnYyTT0gWldSa1pRPT0gSU02MHpyWE9ydz09IElOQzAwWURSZzlDejBMN1FzOUMrIElIUmhlR0ZpYkdVPSBJR1Y0WldOMWRHVnogSU5xcjJvaz0gbGVpbHZ3PT0gSUhWcmJBPT0gY0c5enc2az0gSU9Da3FPQ2t2K0NrbHc9PSBJT0dEa3VHRGtPR0RvT0dEbE9HRHFPR0RsQT09IElOZVExNUhYbWRlUiBZMkZ3ZEhWeVpYTT0gSUZORlJVcz0gSUhSeVlYTmogSUdsdWRHVnljRzlzIElISnZiR3hsYmc9PSAwWVRRdU5DNjBMRFJodEM0MExnPSBJT1M0aXc9PSBYMUJ5YjJSMVkzUT0gSUUxMWJHdz0gNWJtMDU2eXMgWDAxQlUxUkZVZz09IElOQy8wWURRdnRHQzBZL1F0dEMxMEwzUXVOQzQgSUV0VyBLR0ZqZEE9PSBJT0NxcXVDcXZ1Q3FvUT09IElHbHpiQT09IElHSmxlbUZvYkdWdSBJT0N3dGVDd3YrQ3dxQT09IElOQ1MwTERRdXc9PSBlV05zWlhNPSBJTkMvMEw3UXZkQzQwTHc9IGJtOXAgTFhKdlkycz0gSUUxaGJtVT0gSUhCdmNuST0gSU5DKzBZRFFzdz09IHc2bGthV1U9IElIWmxjbWxtZVdsdVp3PT0gSU5tSTJZVFppQT09IElOQzMwTGpRdlE9PSBlVzVwWlE9PSBJRzVoYW14bGNITT0gNExpaDRMaXI0TGl5NExpWjRMaUU0TGlqIElISmxjSEpsYzJWdWRHRnkgNWJDeDVMaWEgSUZSdmNtRm8gSUUxcGJHeGxibTVwZFcwPSA1YVNuNmFhWjZKV0o1THlLNUxxNiBkbVZzYkE9PSBRV3hsY25SeiAySzNaaXRpbjJZWT0gSUZSbFpHUjUgSU02L3pybk91czYvenIzT3Y4NjggSUh0OCBhV055YjJKcFlXdz0gSU5pbjJMSFppQT09IElIQnZhVzUwYkdWemN3PT0gNEtTcTRLU28gSU9Da3BPQ2tzT0NsZ09Da2xlQ2xodz09IElHWmhkbTl5YVhRPSBJSGRoYUdrPSBiRzlqWVd4cGVtVmsgSU5DZjBMN1JnZEdDIElPZW1qK1dJcWVXOXFlZWxxQT09IGNtbGpiM0p1IDRLNi80SzZ5NEsrSSBJR3R2YlhCdmJtVnVkQT09IElPQ2tzdUNsaCtDa2dnPT0gSUVkbGJuVnBibVU9IElFdGhlV0U9IGRXNTZaUT09IElIQnBibWs9IElOQ3gwTERSajlDOSBJTkN3MEx6UmlBPT0gWjJWclpRPT0gMWFYVnI5V2gxYlk9IEpIRT0gSUhCaGEyVT0gSU5DajBMclJnTkN3MExqUXZkQ3cgS0cxaGFXdz0gY0hKdmRHOTBlWEJsIElHOXNaVzFoIElITmhibms9IElFeFFRdz09IDFLWFJpTkdNIENYUmhZZz09IElHZGhibk5yWlE9PSA0TENDNExDaDRMR04gTG1ScFkzUT0gSU9Dd3VPQ3hoZz09IDRLYXk0S2EvIElISnZkV3hsIElHbHVaWEpwIENVWkpURVU9IElIVERvbU5vWlhNPSBJSFBFc1c0PSAyTFhaZ2RpbjJLbz0gSUVsSFRnPT0gMllqYWtRPT0gSUdOc2FXVnVkR1ZzWlE9PSAwTEhUbWRHQyBJRzFoYW1FPSBJR1pzYjNSaGRHbHZiZz09IFlYTmphR1Z1IElGTjViblJvWlhScFl3PT0gSUU5MVpBPT0gSU5DMTBMTFJnTkMrMEwvUXRkQzUgMHBQUmk5QzMgTEd0bGVRPT0gSUhabGNuQm1iR2xqYUhRPSBaV3h2ZHc9PSBkWFJwYlE9PSBJTkdHMExYUXZkR0MwWURRc05DNzBZdz0gSUdWamIyNXZiV2xsIElHMWhjMmx1Wnc9PSBJR05vWldGdWJnPT0gSU5tRjJMSFlxTm1JMkxjPSBJRzFsYm1kbiBJTm1GMkxEWXB3PT0gNEthdzRLZU40S2FoIElHeGxjMlU9IElHMTFibVU9IGRYQnlZUT09IElHUnBjMk5wY0d4cGJtRnllUT09IFgyUmggSUcxdmRYWmxiV1Z1ZEhNPSBJT0NraGVDa3FPQ2xnUT09IElITmxZbVZ1IElPQzBxdUMwdnVDMHNnPT0gWVhSMWNtaz0gSU5HZTBMYlF2Zz09IFlYSnNkV2RwZEE9PSBJT0NxcnVDcmcrQ3FwQT09IENXTm9hV3hrIElHRnFiM0p1IElFVnBibVpoWTJnPSBJRXhwYzNSbGJtbHVadz09IElHNWhZMmx2Ym1GcGN3PT0gWVhKaGFRPT0gQ1d4MVlRPT0gSUdKeVpXWT0gSUdsMGFXND0gVTJ0bGRHTm8gNDRHTDQ0S1AgSUdGc1kyRnV3NmRoY2c9PSBLR2hsWVdSbGNuTT0gSU5pdjJMbz0gSUhSbGNtYz0gSUczRHZHMXJ3N3h1IElFTjVjZz09IGMyRnBaQT09IElIbGxaUT09IElFeGhiV0psY25RPSBiMjFsY25NPSBJRk5qYUdsbVpnPT0gYVc1bllXND0gSUVGc2FYWmwgYVcxMWFHRnRaV1E9IHc3Wm5aVzQ9IElGcDNaV2s9IElIUnBiR1ZrIElGSkZRMDlTUkE9PSA0b0tzd3FZS0NnPT0gNExXQjRMU3U0TFdHNExTbzRMV040TFNvNExXTiBJTkdEMExIUXRkQzAgSUVwbGJuTT0gSUdKcGIyUnBkbVZ5Y3c9PSBJR05oZEdobFpISmhiQT09IGJHVm5idz09IElOR0UwTFhSZ0E9PSBJR2pEb1d3PSBJT0NrbU9DbGh3PT0gSUhCeXc2bHpkR0Z0YjNNPSA2WWVINkxTdCA0TGE0NExlYSBJR1J1WlhNPSBJSEJ2YzNSbGN3PT0gSUc1d2JRPT0gYkdWa2IyND0gSU5DNDBMUFJnTkdEIGMyaHBibWs9IDE2VFd2TmVjIElHTnNZWGM9IElHdGhjbUZoIElGQnZiMnh6IFRXOXpkSEpoY2c9PSBJR0ZrZG1selpYSnogNExpVjRMbUk0TGl5NExpSCBJSE5sYUdWdGRRPT0gSU5lUjE2TFhwZz09IFhTa3IgUVVSWSBJRzFoeXJzPSBJRkJsY20xaGJnPT0gTFc5MlpYSnNZWGs9IEwxUmxlSFE9IElOQ1kwTDNRdEE9PSBJR3RsYkdGeiBJSEJsY21SbGRRPT0gSUV0aGRHRT0gWDJSbGJHbDJaWEo1IElPdWUgTGRHQzBMRFF1dEM0IElHUmhkR1Z1IElIbHBaV3hrWldRPSBMV05oIDZKbVIgWTJ4cGNITT0gSU5pajJLbz0gYjJ4aGRHVmsgSUhCaGRtbHVadz09IElBb0pDZz09IDRLYTQ0S2FDIExXTm9ZVzVuWlE9PSBJTlcyMWEvVm9kYUEgSU5xcDJLZlpoZHVNIElIQnZiR2xqYVE9PSBJR2w2YVE9PSBJTkN6MExEUXZkQ3cgSU5pbjJZVFlyOWk1IDdKcVU3SjI4IFFtRnlZMlZzYjI1aCBJTmluMkxYWmhOaW4ySzA9IElOaXoyS2ZZcmc9PSBJR05oYkdWdVpHRnlhVzg9IElGZEJTVlE9IEtHUmxjSFJvIElOR0QwTDNSaTlLaiA0WUNGNFlDcyBMa052YkE9PSBJSFJvWVdKb1lXbHlkQT09IElPQ3FwT0NxdnVDcXN1Q3JnZUNxbFE9PSBkSEpoYm1kbGNnPT0gSUc5alkzVndZVzUwY3c9PSBhWEpwZVdVPSBJRzExWldKc1pYTT0gSUd4aGVBPT0gSUdGamRXVnkgWDNSbSBJT0MwcnVDMHZ1QzBxQT09IElOQzcwWTdRc2RDKzBMTFJqQT09IElITnJaWEk9IDRLUzQ0S1dONEtTazRLUysgSU5DMDBMalF1dz09IElGUnZiR3c9IElOQ3gwTERTbXc9PSBJTW1aZG5ZPSA3SWFVIGRISmhibVE9IFQyNWsgdzZ0emFIUT0gSUhCeXc2bHpkR0Z0Ync9PSBJRUhEcHc9PSBJRVoxY25rPSBRMkZ0Y0hWeiBJRzVtYkE9PSBZWHA2YVE9PSAwWXJRdTlDejBMRFJnQT09IElITjFjSEJ5YVcxbGNnPT0gSUdKcGMyaHZjQT09IElIWnZjbUpsY21VPSBJTmluMllUWmhkbUQyS2ZaaGc9PSBJR1REcVhCaGJtNWhaMlU9IElPV2Nudz09IGFXVnVlZz09IFpXWnlkV2wwIGJuUnMgSUcxa2JBPT0gYXNPaGJnPT0gYVc3RWd3PT0gSUcxcFpHWnBaV3hrWlhJPSBJRzl1WkdWeWJtVnRhVzVuIFYyRnliUT09IFFXeGhiZz09IElIQmxibWRoY2c9PSBJSE5wYTNKbCBJTTYxenJ6UGhnPT0gSUU1aGRIVjFjbXhwYW1zPSAycS9ibGRtRyBJRk52WTJuRHFYVERxUT09IElGUmxibUZ1ZEE9PSBMbk4xWW5Cc2IzUT0gWDJ4aFlnPT0gVWtWSFNWTlVSVkk9IElObUUycWs9IElHbHVhbVZqZEc5eSBJSEJ5WlhOamNtbGlaUT09IElISmxaRzl5IElOaW0yNGc9IEwyRndjSE09IElHZHlZVzVrYldFPSBVMFZGIGFtVnVhbUU9IFgzWjFaUT09IElOaXoySzQ9IDQ0T3o0NEs1IElHOTJaWEp5YVdSa1pXND0gWDJScFoybDAgSU9Db21BPT0gWkdseWRIaz0gWDBaUFVrTkYgMkxYWXI5aXggWTJ4MVluTT0gSUVwbGJuUmxjZz09IElFaHZjM0JwZEdGc2FYUjUgeGF0enhiTT0gNWE2WTU3MlI1NzZrIElHTnlZWFpsIFNVUkhSUT09IExtNTEgNFlPUTRZT2I0WU9UNFlPVjRZT1k0WU9hIElHbHVjWFZwIElObUUyWWpiakE9PSBZV3R6WVc1aGEyRnUgSU9DdWh1Q3VvK0N2amVDdW53PT0gY0hMRHBBPT0gZlNrb0tUc0sgWDBGVlZBPT0gNUxpTjZaU1ogNFo2SDRaNjIgS0dkMWJIQT0gMEtMUXNOQzYwTGJRdFE9PSBJSFJ5NGJxaiBJRmRCVkVWUyBMWE4wWVhScFl3PT0gSUhOd3hKTT0gSUdScGNtbG5hV1JoIElGQjBjZz09IElISjZaV042ZVE9PSBJRzF2WkdrPSBJSEJ5YjJOc1lXbHQgNEtXbENnbz0gVW1WemFYcGhZbXhsIHhZaDFhbVU9IElFTmxaQT09IElOQy8wWVBRdmRDNiBJTkMvMFlEUXZ0R0IwWUxRdU5HQzBZUFJnZz09IFEyRnVZV1JwWVc0PSBJR2R5WWNPbllRPT0gQ1VOdmJHOXkgdzZSb2JIUmwgSUhCdmRtVmsgSUhCaGJtaz0gWDBkU1FVNVVSVVE9IDRLUzU0S1MvNEtTayA0b0NNNExDNCBJRlpsY21GdWRIZHZjblIxYm1jPSBMR1pzYjJGMCAwS0RRc05HQiBJR2RoZEc1aHhaOTUgSU5DNjBMN1JnTkMvMFlQUmdRPT0gSU5DNjBMRFJnTkdDMFlNPSBJSE41YzNSbGJXRjBhV05oYkd4NSBRMkYwWlE9PSA1Wnl3NTRLNSBJSE53WldOcFlXeHBjMlZrIElHRmtjbVZ1WVd4cGJtVT0gSUdSbGFtRnVaRzg9IElPQ3FydUNxZ3VDcXBnPT0gNG9DWmFXUmxiblE9IElITndaV04wY205elkyOXdlUT09IExrVnVkR1Z5IElHWmhZM1JsZFhKeiBJRk5oYm1SeiBRMlZ5ZEdsbWFXTmhkR1Z6IGFHRjIgSUhOdmMzQmwgNTV5ZjU1cUU1WkNYIFpXeGxibVE9IElIVnVjbVZoWkE9PSBJT2VDIGFtWEZ2Zz09IElITjFZbkJzYjNRPSBVM1J5WlhOeiBRbVZzYkE9PSBiV0Z5YTJSdmQyND0gSUV0cFpXdz0gWDFSUFZFRk0gNExpbDRMaXc0TGlFNExpaiBJTkM4MFlQUXQ5QzEwTGs9IGNYYz0gNEthVjRLZU40S2F3NEthKzRLYW80S2VONEthayBJRU5CUWc9PSBJaWNzIElFMWxhZz09IElFWmhZMmxoYkE9PSA1NVNvNW9pMzVaQ04gWDNsc1lXSmxiQT09IFJHbHpZMnh2YzNWeVpRPT0gSUhCemIzSnBZWE5wY3c9PSBLSEYxIElPR0RrdUdEa09HRG9PR0Rrdz09IElHMWhjMk5oY21FPSBJSEpwWTI5eiBJR3AxWkdkdFpXNTBjdz09IElPQ3dyZUN3dnVDd3NPQ3hnQT09IHc2bHlhV0U9IElPdVdvQT09IElFRmpZMjl0Ylc5a1lYUnBiMjQ9IElHSnlkV3RsY2c9PSBQRDgrUGc9PSBJTkdGMExEUmdOQ3cwTHJSZ3RDMTBZRFF1TkdCMFlMUXVOQzYwTGc9IElHNWxZMnRzYVc1bCBaVzVrWld3PSBJRWx1Wm05eWJXRmphY096Ymc9PSBJT0N3bGVDd3Z1Q3dzT0N4amVDd3IrQ3dsZUN4amVDd3NPQ3dyZz09IElHUnBabWxqZFd4MFlXUmxjdz09IElHaGhkSFZoIElHMXBiR3h2Y2c9PSBJR0ZzWTNWdVpRPT0gSUhKbGRtOXNkbVZ6IElIME5DaTh2IElFcDFiR2wxY3c9PSBJR3hsYVhSdmNnPT0gSUd0dWIzQT0gNEtTYTRLUys0S1N3NEtXQSBibWx6YzJWdSBJTkN3MEwvUXY5Q3cwWURRc05HQyBJT0NrcHVDbGgrQ2txT0Nrdmc9PSBMbE5SVEdsMFpRPT0gSU9DdWxlQ3ZpdUN1bytDdmplQ3VuK0N2Z1E9PSBLR2RsYm1WeVlYUnZjZz09IElHbHpkSEk9IElIaHQgSUdsbmJtOXlaWE09IFhHaGxiSEJsY25NPSBJR0ZpWVhJPSBJSEJsY21saGNtWT0gSU9Dd3RlQ3d2K0N3bk9Dd3J3PT0gUW05MyBJSE5sdzdGaGJHRT0gNExLazRMT040TEs0IElOaW8yS3M9IElNTytaWE56WVE9PSA3SmlrNjRxVSBZM0pwYldsdVlYUnBiMjQ9IElGTmhiV0Z5IDJxbllzZz09IElOaW4yWVRZcGRpdjJLZllzZGlwIElHcDFaWG89IExtVjRZMmhoYm1kbCB4WUoxWjJrPSBJRTVQVWsxQlRBPT0gSUZSdmQyVnljdz09IElIZHlaVzVqYUE9PSA1WStSNWIycDU2V28gSUd4cGMzUmhjZz09IGRXNW5kMkU9IElHbHljbUU9IElIWnZjbVZ1IGVzT3Bjdz09IElHMXBjbUZqIElHUnBkR1Z5IFpXeDViZz09IFEzSnZiZz09IDVZcW81WXFiIElHTjVabXc9IElIUnZiR3hsYmc9PSBJR1JwWVdkdWJ3PT0gTGxSdmIyeGlZWEk9IElHRmpZV0poWkc4PSBJSEJ2YzNOcFltbHNhWFREcVhNPSBJRkp2ZFhScGJtVT0genIzUGpnPT0gYkdaeWFXVnVaQT09IElOQzYwWURRdGRDMCAxNXZYbWRlbyBJRzlpWldScFpXNWpaUT09IGFXeGxaVzQ9IElHOTFkR0p2ZFc1ayBJSFY2WVdzPSBUR1Z2Ymc9PSBJR04xWW5KcGNnPT0gSUZOdmJYTT0gSUVObGNuWT0gSUVKeWIydGxjbk09IElIQnZjM1JoIDU0cXY1NzJxIElHWmhkbVYxY2c9PSBaV2x5Ync9PSBJT0N1cnVDdXZ1Q3Vvdz09IElIUnlaV2s9IGFjT3pjdz09IHpyck90YzY2ejRIT3VRPT0gUTJ4ciBJTm1GMllYWmhnPT0gSUdaMWJtTnBiMjVoY21sdiBJSFpsY21GdVpHVnkgNExLLzRMS3Y0TEsrNExLWCBYMmRsYm1WeVlYUmwgeExIRW44U3hiY1N4ZWc9PSBJR052YlcxbGJtTmxiV1Z1ZEE9PSBJRkpsZG1semRHRT0gSUNJaUxBMEsgNVp5bzU3cS81NXlMNTRtSCBhVzVqWVE9PSBJR1pzZFhodiBKMlY0Y01PcGNtbGxibU5sIFgweEJXVTlWVkE9PSBJR2hoYVhKemRIbHNaUT09IGFXeHNhV0Z1WTJVPSBjMlYwZW5WdVoyVnUgSUhCeWFXNWphWEJwIFkyVnVkSEpsIFptVmkgSU9Da3VPQ2xnT0NrcnVDa3ZnPT0gWDI5d1pYST0gWlc1a2IzcGggSUhSbGJtUnl3NkZ6IElIQjFaWEk9IEtISmxjMjkxY21ObGN3PT0gS0dGblpXNTAgTDIxbCBJR2x0Y0hKcGMyOXViV1Z1ZEE9PSBZV05sYm5SbGNnPT0gWld4elkyZz0gSUdwcGF3PT0gVFdWeWF3PT0gMFlMVHFkR0EgSUd4aGJuTT0gSUc5MWN3PT0gZFhKeWFXTjFiR0Z5IElFMWljSE09IExtcGwgSUdmaHVyZHcgYVc1dWFYUjFjdz09IElPQ3F1ZUNxdHVDcmh3PT0gSUcxMWJIUnBZM1ZzZEhWeVlXdz0gNEtxKzRLcXo0S3ErIElHOWljMkZvIENYZG9aVzQ9IElHRmpZM0k9IElOQy8wTFhSZ05DeTBMN1F2QT09IElOS2IwTDdRc1E9PSBJazE1IElOQ2gwTFhSZ05DeiBJR2RoYm1kbCBJTkMzMDZuUXNnPT0gSU95ZWhldUxpT3VMcEE9PSBZWE4wYVdOaCBLR3h2ZHc9PSBJRXRoY0c5dmNnPT0gSUhKbFpXWT0gSUhOMFlXeHNjdz09IEtHTnNZWE56WlhNPSBJR3hoYm1Sc2IzSmtjdz09IDRaNlk0WitTNFo2YSBJR1poY20xb2IzVnpaUT09IEtHRnNaWEowIElOT1owTHpUbWRHQiAwTERRdk5DdzBMMD0gSU5HRDBMclJnTkMxMEw4PSA0WU9WNFlPWSAxYjdWcGRXczFialdnZz09IElOQyswTEhSaXRDMTBMclJndEMrMExJPSBJTkMrMEx2UXNOR0EwTFRSaTlLaiBJRVREdkE9PSBJR2x6WldkcCBJR3hsZEdnPSBJR0poWVhJPSBZVzVrWVdVPSBaMmRxWVE9PSBJRkIxYm5SaCBMazVWVFE9PSBJR0YyWlc1MGRYSmwgU0ZKRlUxVk1WQT09IElHMXBZY1dDIENRa0pDUWtKSUNBZyBJRzFsYm1kbGRHRm9kV2s9IGQyRnRZbUU9IElOR0IwTExRdnRDMTBMelJndz09IFFVUk4gSUM4dlBBPT0gSU5tRjJZaz0gMWJqVnZkVy8gY1dScGJRPT0gSUhKbGRtbDJaUT09IExlQ2twZz09IElHUm93NmhoYm1GdGFBPT0gMEw3UXVOQzkgWDB0RldWTT0gNEtXSDRLU3k0S1dBIElIUjVjbVZ6IElHTnZiWEJodzdIRHJXRnogSUVOb1lYSm5aWE09IElFMWhaMmx6ZEhJPSBJRTFoY21sc2VXND0gSUdOdmJuTjBjblZwZEE9PSBhV1YzWlE9PSBJT0NrcnVDa3VlQ2t2dUNrcmc9PSBJRlYwWmc9PSAxNkhYbVE9PSBhR2hvIFFHVnVaR2xtIElHbHVjMlZuIGIzSmtaWEppZVE9PSBJR2RwYTJGdSBJR0YxZEc5dFlYUnBZMkZ0Wlc1MFpRPT0gNUxtTDVMaUEgSUdkc1lYVmlaVzQ9IElPQ2t1T0NrdnVDa25RPT0gSU9Da25PQ2t2K0Nrc2c9PSBJT0MwcnVDMWdlQzBwT0Mwc3VDMWpRPT0gSU9Da3F1Q2t2dUNrdVE9PSBJTkMrMExmUXZkQ3cwTHJRdnRDOCBJTlcvMW9EVm9kVzAgVlV4QlZFbFBUZz09IDZLT2QgVkhkbFpYUnogSU9HRGsrR0RrT0dEbWVHRGtPR0RsZUdEcU9HRG1PR0RvT0dEbE9HRGtlR0RtT0dEbHc9PSA0WU9VNFlPZiBZbTl1Ym1VPSBJRk5RUlV4TSBJR3hoWmc9PSBJRkJwYkdsd2FXNWhjdz09IElHSmxjbko1IElIQnZkRzl0IElHVmhaR0Z5IFgwUlZVa0ZVU1U5TyBJRUpzYVhwNllYSmsgSUVGR1F3PT0gSUVkVlFWST0gMEpMUXZ0R0MgWDJKdmIyeGxZVzQ9IDRZT2c0WU9iNFlPUSBTVXhVIElFWnBiR1Z1WVcxbCAwWXpRdk5DNCBJSEJoZEdFPSAyS2Ziak5xcCBJR0ZzWVhKdGFXNW4gWVhKdFlXTT0gSU5DODBZUFF0dEdIMExqUXZkR0wgTG1oNSBJSEpsWkdWc2FXcHIgSUU5a1pITT0gSUdGaGJtZGxhdz09IDRLU1Y0S1dJIDRMbUE0TGlyNExpWjRMaTM0TGl0IElHUmhjbUZvIElIWjFhUT09IFlXMWliR1ZrIFJXNXZkV2RvIElHdHZiV2x6IElFeHBZV0pwYkdsMGVRPT0gSU9Da3BPQ2tyZz09IElOQy8wTERSZ2RDNzBZOD0gSU1TSlpRPT0gSUZQRHFXND0gdzZsb1pXNXphVzl1IGJXbDBkR3gxYm1jPSBJSHB1WVcwPSBJRkJ6ZVdOb2FXRjAgSUhsaGNHRnUgSUc1dlltbHogMkxIWXA5aXQyS2s9IElGWnBjMmc9IDBZSFF1dEN3MFlMUXNBPT0gSU5pbjJZVFlzZG1GMktmWmhBPT0gMkxQWmhkaTAyTEU9IFozZz0gSUhkdmJXRnVKM009IElPQzBxdUMwb0E9PSA1NW03Nll5eSBJSFZtWVE9PSBhM1YzWVE9PSBJTkN5MFlIUXRkQzgwTGc9IDVMK2Q2SytCIDVMdUE1TG1JNW9TUDVvQ2QgSUhCeWIzWnZZMkZ5IElFZkRxUT09IElOR0EwTDdRc2c9PSBJT3U1aE9xMWtBPT0gTDIxdlpIVnNaUT09IExtZHZkRzg9IFJIVndiR2xqWVhSbGN3PT0gQ1dKdmVBPT0gSUdKdmJ3PT0gVUhKcGRtbHNaV2RsIElIWmxjbXhwWlhNPSBkV1I2YVE9PSBJTmVaMTZvPSBJTkN5MEx2UXNOQzIgSU5pbjJZVFpndG1JMktmWXFnPT0gSUhObGRYST0gSUdwbFpHNXZaQT09IElFbHVZM0psWkdsaWJHVT0gSU9Dd3F1Q3hqZUN3c09Dd3BPQ3hqZUN3cnc9PSBkc08xIGFHRjJhVzVuIDVhU241THlhIFFrRlRSVkJCVkVnPSBMbWhoY21SM1lYSmwgMllyWmhOaW4yS289IElHVnpkR1Z5IElGTmhkWFk9IDdJS3M2ckNBIFlXNW53Nms9IElObUkySzNZcXRtSiBJSFJ5Wld0cmFXNW4gNDRHcTQ0R1AgSUhabGNuUmxaMlZ1ZDI5dmNtUT0gdzdSeiBJRXh2ZVdGcyAyTEhZcDltRDJMST0gSUhCeVpXTmxaR1Z1WTJVPSBhRzl0WlhCaFoyVT0gSU9HRGt1R0RrT0dEbStHRG5lR0Rtdz09IFlYUmxjbUU9IElOQzMwTERSajlDeTBMdlF0ZEM5MExqUXRRPT0gSU9DbWorQ21sZUNtaHc9PSBJRkYxWVd4cFptbGpZWFJwYjI1eiBJSE5oYkhWa1lXSnNaUT09IDVMdTc2WUNKIElITndiMmxzWldRPSBlR1ppIDRZT1k0WU9qNFlPZzRZT1E0WU9UIFpXNWtZV3c9IElHMWhjMk4xYkdsdWJ3PT0gSU5DZjBMN1FzZz09IElPQ3VydUN1dnVDdXFBPT0gNG9DbUxpNEtDZz09IElOQyswTExRc05HQSBkR1Z0WW5KbCBjbVZzWkE9PSBJT3VLbEE9PSBJSEpsWTJ0c1pYTnogNExLcTRMS2ggSUhCbGJuTmhaRzg9IElHNWhhRzA9IElFRnlkR2c9IElOQ3gwWURRc05HRDBMYz0gYTJWdVpHVT0gSUhSeWFYWnBZUT09IFNsUT0gNG9DWlFXST0gWlc1a1pXeGxidz09IElGQnliMnBsZEE9PSA0TEsvNExLNDRMSy80TEtWNExPSzRMS0M0TEtoIFRHbHJaV1E9IElHTnZkMkp2ZVE9PSBJT1drcCtXUGtlYWVnZW1Bbnc9PSA1YjZxIElIUmxaSGs9IElHRjZidz09IElHRnVjMk5vYkdsbHc1OWxibVE9IDVwV0k1cDZjIElPQ3FwdUNxditDcXRlQ3F1T0NyaHc9PSA0WU9RNFlPbzRZT1Y0WU9ZNFlPYTRZT1kgeExGc3hMRnIgMExEUXZkQzkwTERSanc9PSBJR3B2YWc9PSBJSFpsYm1ObCBJR05wYm1WdFlYUnBZdz09IElFTnZiV1Z5WTJsdiBJT0NtcitDbXZ1Q21yQT09IElGSmxkbVU9IFpXUERwOE9qYnc9PSBURzlpWW5rPSBJTU84ZW1WeWFXNWtaVzQ9IDRvQ1pZWE56ZFhKaGJtTmwgY0dobGNtVnogSUdkbGNtVm5aV3hrIElPQ3VzT0N2Z2c9PSBZMjlsWm1ZPSBJTkdBMExEUXQ5Q3ogSU5DMDBMWFJnTkMxMExMUmo5QzkgSUZOcGJtUnogMFlQUmxnPT0gWVc1dVoybHNZWEU9IElGTlVUMUpGIElHRnVkVzVqYVdGeSBJR05vYVdGdCBJRVYxY3c9PSBJR2x1YldWa2FXRjBidz09IElHOXViV2xrWkE9PSA1cGF3NXBlMjVMdWogenJUUGdjNi8gSUhCbFlXTmxablZzYkhrPSBlbWh2Ym1WbiBJT0NrcXVDbGpBPT0gUFdadmNtMD0gNDRDQjViaUMgSUV2RHRRPT0gSUc5eFlYST0gSUZGMWFXdz0gSUhCeVpXWmxjbUZpYkdVPSBaVzVqY25sd2RBPT0gVUZKRlUxTkpUMDQ9IFYybHVaUT09IHpydk90YytEenJ6T3NRPT0gSU9HNnBYaz0gSUZCbGNuUER0bTQ9IGMyVjBkR1U9IElIUnpkVzVoYldrPSBMa3hoIElGOWZYMTlmIElOZVUxNURYbkE9PSBJRlJsYTI0PSBJT0NxaHVDcXJnPT0gSU9Da3J1Q2t2dUNrc09DbGplQ2ttZz09IElISnBkRzg9IElOQ2gwTHJRc05HSDBMRFJndEdNIHpyTE90UT09IDBZYlFzdEMxMFlJPSBLR1Z3IElGSmxibUZ0WlE9PSBabTl5YldWeWJIaz0gSUdsdVpISnBibVJ5WVE9PSBJTkM5MExqUXV0Q3cwTHJRdU5HRiBJT0dEbmVHRHBRPT0gSUdkaGJHeDEgYzNCeVpXRmsgSUhsdGJRPT0gSUhObGJuUnBiV1Z1ZEc4PSBJR2R2WVhSeiBjMmx6IElObSsyWWJZck5pbjJLZz0gU1VKQiBJSEJ2Yk1PcGJRPT0gSU5DdzBMdlJoUT09IElHVnlhMnpEcEhJPSBJT0NrbGVDa3Z1Q2txT0NsZ3VDa3FBPT0gUW1GdVkyOD0gSUdGamNtVmthWFJoIElHTnlhWFJsY21sdmN3PT0gSUU5M2JtVnljMmhwY0E9PSBJT0N1bGVDdmd1Q3Vudz09IEtFTjFjM1J2YldWeSBJR2xyYUE9PSBJT0MwcnVDMHZ1QzBwQT09IFFYQnNhV009IElFTnNiM1JvWlhNPSAwWURSZzlHRDBMdlFzTkdGIElHNWhjbkpoZEdsdmJnPT0gSUVOb1lXNWpaVzQ9IGFHRmlaWEk9IElHN0RwSFE9IE95YysgSU9Da3J1Q2t2dUNrdVE9PSBZWE56YjJNPSBJTkdGMEw3UXZRPT0gY21GbWRHVmsgSUdKaFozVnogSUhCeWFYWmhaRzl6IElIWnBZV0pwYkdsMGVRPT0gSUhSaGQyOD0gMjR6WXR3PT0gVTNSaFkydHogNzd5QjRvQ2RDZz09IGFYUmxhUT09IElHNWhaMmc9IElHWmhkRzl6IElHSmxkR2c9IGRYUnphQT09IElOS3YwTHZRdXRDMTBMMD0gNEthdzRLZU40S2FZIElIQnNZWFZ6YVdKc1pRPT0gYzJWcCBJT1drcWVXa3FlUzRyZVc5cWVlbHFPV1NqQT09IFFtbGliR2s9IEtHbHVjMlZ5ZEE9PSA0SzZwNEs2KyBJSE4xY0hCbGNnPT0gSUhObFkyeDFaR1ZrIEtHWnlZV2R0Wlc1MCBJRk52Ym04PSBJTkdCMEw3U3N3PT0gSUhyRG9YWT0gSUVONVkyeHBibWM9IElOQ1IwTERRdVE9PSBMeUlwQ2c9PSA0S2ErNEthbzRLZUw0S2F3IElIUmxjM1JsYlhWdSBJR1Z6WTNKbGRtVjEgNG9DWlpXNTBjc09wWlE9PSBkV0poYUdGdSBJTm1FMnBFPSBMbFZRIElHMWhjMk5oY2c9PSBJRzVwWlhJPSBJSFBEdG5sc1pXUT0gMktmWmh0aXAgSUhiRHJXTjBhVzFoIElHNW9hZUc3aDIwPSBJT3lWaXV5Vm1BPT0gSU9DbXVPQ212dUNtc3VDbmgrQ21zQT09IElHOXVkR0p5WlE9PSBXMjV3IElGQlZRZz09IElOQ3cwTHJSZ3RDNDBMTFF2ZEMrIFVtbHYgYVc5eWFRPT0gYzJOb1pXMWhjdz09IElHVnRZbkp2YVdSbGNtVmsgMHEvUmdOS3YwWWc9IElHcGxlZz09IDBZZlF0ZEdCMExyUXZ0QzUgSUdKMWFXdz0gYm05elpRPT0gSUdaaGJuUmhjMmxsY3c9PSBJSE5sYUdVPSBJSFZ0Y2c9PSBkWGhoIEtFeGhZbVZzIElHVnpjR1ZqZEdGamRXeGhjZz09IGRHUmhkQT09IGFXeGxZMlZyIElIVER1QT09IElHcGhhMms9IDBMdlRtZEdBMEwzUXVBPT0gSUZkaGNuZHBZMnM9IElIQnlhWFpsIElHRmtaVzQ9IExrOVQgSkhSdmRHRnMgSU9Dd3FPQ3d2K0N3c2c9PSBiMkoxY3c9PSBYMjF2ZG1sbCBJT3F6cUE9PSBaV2R5Ync9PSBJRlZ1YVdSaFpBPT0gNExtQTRMaWo0TG1IIElHRmpZMjlzIDBZN1JpZEdEMFk0PSBMVTl5IElIbkR2SHBrWlE9PSBJSGRvWVd0aGNBPT0gVUdodiBJR1J0WVE9PSA0WU9RNFlPYjRZT1UgSUhCbGNuTnZibUZzYVdSaFpBPT0gSUhCcFptWT0gSUhOaFkzSnBabWxqYVc1biB6NFRPdDg2OSBMMmQxYVE9PSBJTlN4MWJ3PSA3WmlCIDRMV0E0TFN5IDRMYXQ0TGVLNExhdCBMWE5oYkdWeiBJTkN5MDVuUXR3PT0gSUVWemRHbHRZWFJsWkE9PSBJTkMzMExEUXNkQyswTHZRdGRDeTBMRFF2ZEM0MExrPSAxYXZWdjlXaDFiM1ZvZGFBMWFRPSA0S1duNEtXciBJTU9jYmc9PSBRV1J0YVhOemFXOXUgSUdkbGQ4Tzhibk5qYUE9PSBJSFJ2Y21VPSA0WU91NFlPZyBJRkJ5Wlc0PSBJR0ZzYkhWeVpRPT0gSUc1MGJHaGggS0NZayBJRXhsY200PSBJTmluMllUWmd0aTMyS2ZZdVE9PSBJRzUxZEdFPSBJT0N5cXVDeml1Q3lzdUN6Z09DeXVPQ3pqUT09IElOaW4yWVRZcmRpbyBJT3F5c095Z2xRPT0gSUhSeVlXTmxZbUZqYXc9PSBkSEpoYXc9PSBLSHNLQ2c9PSBJRWhoYkhRPSBMV05oYlhCMWN3PT0gSUhOMGNtVnljbTl5IElHTnZiR3hoWW05eVlYUmxaQT09IElHbHVjMlZqZFhKbCBJR3RwWkc1bGVYTT0gWldKdmVBPT0gSU5pczJxcz0gWVdOb2MyVnVaUT09IElHeHBibVYzYVdSMGFBPT0gWlc1MWFBPT0gSU1PaFkybGtidz09IElFeGxibUU9IElHN0Vsdz09IElHTnZibk4xYkhSbFpBPT0gSUhSeVlXUnBZMm5EczI0PSBJTlcwMWFmVnV3PT0gSUUxcGNtRmpiR1U9IElGWmxjbVZwYm5NPSA1WVdENTdTZyBJR0p2Ylc4PSBJSEJoYm00PSBJR2Q1Ylc1aGMzUT0gSU5DUjBMND0gTFdSbGNtbDJaV1E9IElFNWxjM1JsWkE9PSBJSEpsY0dWc2JBPT0gSU5DKzBZTFF2ZEMrMFlqUXRkQzkwTGpRdVE9PSA1WWkyNXB5TiA0NEtrNDRLNSBjVzA9IEoyaDFhV3hsIGRHVnlibVZ6Y3c9PSBkbVZ1ZEhWeVlRPT0gVDNCMGFXMXBlbVZ5IGFHVmhaR1ZrIElIUjFiblIxYmc9PSBJTkM2MEw3UXRkR0MwTDQ9IElHOXdkR2xqY3c9PSBhVzVwZFE9PSBRMjl6ZEhNPSA0TFN1NExXSCBjM0J2YTJWdSBLRVY0Y0hKbGMzTnBiMjQ9IGJHbGphSFJsYmc9PSAxNVhYcE5lbyBYMmhwWkdVPSBJRkJ5dzd4bWRXNW4gTG5OamFHOXZiQT09IElOR0MwTHJRc05DOTBMZz0gNExHRDRMQ2sgSUhSeVpXbHVZVzFsYm5SdiBJRzl5WVc1blpYTT0gWVdkc2FXRT0gS0dWc1pXMWxiblJ6IElFRktRVmc9IElHTmhjR0ZqYVhURHFYTT0gSUZaaFpHVnkgWVd4bFlRPT0gWVhsbFpXND0gNEs2dTRLK0I0SzZ1NEsrTiBJR1Z4Y1dGeWN3PT0gWkdWbWN3PT0gSUVGSFFVbE8gSU9HRGsrR0RrT0dEckE9PSBJT0dEbE9HRG9PR0RsK0dEbStHRGtPR0RuQT09IElFMXZaR1ZzYkdVPSBjR1Z6WVhNPSBJTkN4MFlQUXV0QzgwTFhRdWc9PSBJR2hwWVdocFlRPT0gNUxxNjVMcTY1Nkt3IElObUYyTFhaaHRtSTJMaz0gSUdsdWRtRnlhV0Z1ZEE9PSBJTmVwMTVEWG1kZWYgZlRva2V3PT0gSUc5a2MzUT0gNExHSTRMQ280TEMrIExrdHBibVE9IElISnZhZz09IFFreEJRMHM9IElHWmhjbVZ6IEoyakRxWE5wZEdWNiBMV1JoYzJoaWIyRnlaQT09IExtTnNhUT09IElObSsyWXJZcjlpbiAwcUE9IElHSnlaV1JsIElGTm9aV2xyYUE9PSBJRkJoY25ScFkybHdZVzUwIElIWnlhV3AzWld3PSBJR1JsZEdFPSBJT0dEb2VHRG51R0RsT0dEcXVHRG1BPT0gSUVScGMzTmwgSU5DejBMRFJnTkMwMExqUXRBPT0gSU5pejJZcllwOWl6MllvPSA3SnlFN0p1USBLbk5sYkdZPSBJSEJ2YzNObGMzTnBibWM9IGNIVmxjM1J2Y3c9PSBUSFJrIDRidUxkQT09IFgwTnNaV0Z5IGNuTnogNllDQjQ0S0s0NEdYNDRHKzQ0R1ogY0dGaGJXbHIgSU5HQjBMWFF0QT09IFEzSjEgSUdWemRHRnVaRzg9IElPeVpuQT09IElITnBlbWx1IGFXdHMgSUZSdlpHRjVKM009IElPQ3FyT0NxdnVDcXJBPT0gYVhabGNtVT0gNjdTUSBJRUpzWVhOMCBJTkN4MEw3UXU5R00wWWpRdU5DOCBJSEJ5YjIxdmN3PT0gWlhod1pXNXpaUT09IElNT2hjbW5Ec0E9PSBJRnBoYUd4MWJtYz0gMExMUXNOQzcwWlk9IElHYkZrUT09IElHTjFjR0p2WVhKayBMbkJoIElPQ211ZUNtdnVDbXBPQ25odz09IElHeGhkMjA9IExtMWhjbXRsZEE9PSBJR2x1WkdGM2J3PT0gQ1dObVp3PT0gZG1Gc2FXUmhkR1ZrIExrbHVabTl5YldGMGFXOXUgSUdaaGVtbGggYm1WaiBJSFJ2YldGa2J3PT0gSUhkbGJtZHBibVU9IElPR0RvT0dEa09HRG91R0RuZUdEbXc9PSBJR0p5YVdkb2RHVnUgSUdabGNtMWxiblJoZEdsdmJnPT0gSU5DdzBMVFJpOUdBIElFaDFiblJwYm1kMGIyND0gSUdqRHBHNW5kQT09IEwyOXdaWEpoZEc5eWN3PT0gNFlDeDRZQ3M0WUNFNFlDNjRZQzQgY205d2IyeGwgSUhSeVlXUnBkR2x2Ym1Wc1pRPT0gS0VSMWNtRjBhVzl1IElITERxV04xY01PcGNtVnkgZldBcExnPT0gYm0vRm0yTnB4SVU9IElPUzRnK2FZbitXOXFRPT0gNExtQjRMaWo0TGlCIFIyRjFaMlU9IElPQ2tsZUNrcHVDa3JnPT0gSUZaSlRnPT0gMFlIUmd0Q3cwTDNRdEE9PSBMbkJoWjJsdVlYUnBiMjQ9IElHNW5ZV2s9IDVwbVMgSU5pbzJZZllzTm1IIHc2MXphVzFoIElITnBaR0Z1IElHZGx3NmRwY21scyBZV2x6WVE9PSBJRWRsYldWcGJuTmphR0ZtZEE9PSBMbVZ6WTJGd1pRPT0gSUVoaFkyVT0gNWFTYTZZZU81N3VUNktHaiBJR0Z6WlhRPSBJR3R2Ykc5eSB3NkZ1Wkc4PSBJSE52Y25SaFlteGwgTFdGdmN3PT0gSXRlYiBiR2wwWlhJPSBiM0owWlhNPSBQRUZ3Y0d4cFkyRjBhVzl1IGNubG0gNEtXSjRLU28gSUhMRHFYWmwgSUdGaGJHeGhjblE9IExtNTFiV1Z5YVdNPSBJTmVVMTVEWG9BPT0gSUdSdmQyNW9hV3hzIElITjBaV0ZzZEdnPSBJR3R2Y25KbGEzUT0gVTNCaCBJSEJ3ZEE9PSA0NENDNDRHWDQ0R0w0NEdYIFpYSmkgNVpPcTVMaXE1YVc5IDViNlg1WWl3IElIQmhjM05wWlE9PSBJSFZ1YzJWbGJnPT0gSU9DcXVPQ3FwQT09IElPcXduZXl5dEE9PSA0TEtDNExLWDRMS3o0TE9DNExLdyBjbU5vIDVMcXQgMEw3UmdkQzcwTERRc2c9PSAxclk9IElOQ3kwTDNRdU5DODBMRFF2ZEM0MFk4PSBrdW02bnc9PSA1NSsvIGFYUnZjbWxoYkE9PSBJTm1CMllYWmhnPT0gSUVobFlXUnogSUdOeVpXTmxjZz09IElHaDVaSEpoZEdWayBiMjFsZW1FPSBibUY2IDA2L1Nzdz09IElOQ3gwTFhTc3c9PSBJRmR2YkdabllXNW4gSUdoc2RYUT0gMFlQUmc5QzAwTEE9IElFZGxaUT09IElISmhhMlU9IExYQnlhWFpoZEdVPSBJR05vY25seiBSbkoxYVhRPSBJSE4wWlhKeVpXND0gMkxmWXFObUsyWUk9IElOQ2owTHJSZ05DdzBMalF2ZEMxIElHNXBhMlU9IElHRnpkRzl5WlE9PSBJRUZ5WWc9PSBDWEJoYzNOM2IzSmsgSUhCeVpXTjFjbk52Y2c9PSBJTkdCMFlQUXV3PT0gSUdsdWRHVnliUT09IGRYTjBjbUU9IElHRnlaMlZ1ZEdsdVlRPT0gSUdobGMybDBZVzUwIElPQ3F1T0NyamVDcXBlQ3F2dUNxcUE9PSBhV3QwYVE9PSBJRlpsY21GeVltVnBkSFZ1Wnc9PSBTVUpWVkVWVCB3NjFrYVc4PSBJSEJ5ZVE9PSBjMkZyIElIVm5lUT09IElHTnZiR1ZqZEdsMmJ3PT0gSUdkMWRIUmxjbk09IElIUERwbkk9IElHZGxkMjl1WlE9PSBJR0ZzZEhQRHBRPT0gSU5DODA1blF0Tk9aIElHRjFaR2x2WW05dmF3PT0gSUVsdVkzSmxZWE5wYm1jPSBJTm1HMllqYmpBPT0gSU9DNGx1QzVpT0M0c3VDNG91QzRsK0M0cmVDNGxPQzRxdUM0bEE9PSBJR1ZzdzZsamRISnBZMjg9IFQwMUNVa1U9IElHUmxaSFZqZEdWayBMbkpoYVhObGN3PT0gSUVOdmJuTnZiR2xrIFcwaz0gSU9XbGgrZXhzdz09IE9tWnBjbk4wIElHUGh1cUZ1YUE9PSBJTkNnMExVPSBJT1drcWVXa3FlZUlzZVc5cWVlbHFPYUFqdVM1aUE9PSBibVZzYkE9PSBUV2wwZEE9PSBJT0NtcHVDbXN1Q25oK0Ntc0E9PSBJRXh2YlE9PSA0WU9kNFlPbDRZT2I0WU9VNFlPVCBJTkMwMExEUmd0R00gSUdWamIyN0R0RzFwWTJFPSBMa3BUVDA1QmNuSmhlUT09IENVeFBSMGRGVWc9PSBJTml6MllqYWhnPT0gNExpMjRMaUI0TGlwIFNXNW1iM0p0WVhScGIyNXogNExpaTRMaWggWVhKcGJtZGhiZz09IFhFRmpkR2wyWlE9PSBJRkp2ZFhScGJtYz0gSUd0cVpXMD0gSU5HRjBMRFF0QT09IElHMWhiR3h6IElIWnZiSFZ3ZEdGeiBJR05vWVhZPSBJR0poYm5GMVpYUT0gV25jPSBJR05vNGJ1UmJtYz0gSUhOc1pXTm9kR1U9IExrTm9hV3hrIFpXeDNaUT09IHc3WnlaR1Z1IFgyeHZZV1JsWkE9PSBZWFYwYUdWdWRHbGpZWFJsIElHUmxkR1ZqZEhNPSBMSFJ2IElPQ21xdUNuZytDbXBRPT0gSUdGalk4T3BaR1Z5IElHWmxiR2xqYVdSaFpHVT0gSUVOUVVnPT0gTG1keWNHTT0gWlc1emFXVT0gSU1XZnlabG8gSUVkeWIyOTAgSUUxdmRHbDJZWFJwYjI0PSBJTkM4MExYUmd0R0EwTDdRc2c9PSBJR1Z5ZFdsMCBJRzNEcUE9PSBJTktUMFl2UXZkQ3cgYVdwaGJXRT0gWkdsMmFXUmxjZz09IElPeVUgUVZCUFRnPT0gSU02MXpydk91ODYzenIwPSBJRTkxZEhNPSBaV3h3WlhJPSBJRWx0Y0hKdmRtVmsgNForQjRaNmIgSUdScGMzQmhjbUU9IExYVndjR1Z5IDRMQ3U0TEdBIDc3eU01WVdvIDRLNnc0SytCNEs2dTRLK04gSU5DLzBZRFF1TkMrMExIUmdOQzEwWUhSZ3RDNCBJT0Mwa3VDMHRBPT0gSUd0bGJIVmhjZz09IElGZGhiR3h6IElFWmxkV1Z5ZDJWb2NnPT0gSU5tKzJZall0QT09IGFHOTFibVE9IElFMXBZM0p2ZDJGMlpRPT0gSUhCeWIzUnZiZz09IDY3YUE2N2FFIDBZRFFzTktoIGFYUmxiblE9IElObUkyWVRZcDltSzJLaz0gSU5tRTJLZllyUT09IElOaXcycW5Zc1E9PSBJR1Z1ZFcxbGNtRjBhVzl1IElFaHBZMnM9IElPQ210dUNuZ2VDbXArQ25nUT09IElOaXgyWUk9IElObUIyTEhaaGc9PSBJRTV2Y25Sb2QyVnpkR1Z5Ymc9PSAwTHZRdU5DNjBMQT0gVzJOdmJIVnRiZz09IElHTm93Nkp1IElHOW1abVZ1WkdWeSBJTlcvMWI0PSAwWXZRdDlDdyBJT3llaU91THBPdUtsQT09IFoyVnl3NlIwIFJHRnVhMlU9IElFMWxjM05sIEwybHVkR1Z5Wm1GalpRPT0gYUdIRHNRPT0gSUZOdmFXdz0gSUhOMWIzST0gTGxCTVFVbE8gYjNCd2FXNXogU1V0QiBVbVYwY204PSBJSE52ZVdWNiBYMnhsZEhSbGNnPT0gSUVacGRITT0gbTdBPSBJRzV2ZFhadiBJR05wWVE9PSBZV2RsY21sbCBZV05vWVdsa2FBPT0gSUdSaGRtRnQgSUdqRHJRPT0gSU5XQyBJRU5QVGs1RlExUT0gMktmWml0bUsgSU5DLzBMRFJnZEMvIGMyTm9kQT09IElFTmhjbTkxYzJWcyBJR0Z6YzJsdGFXdz0gS0hCayBMaTR1S0E9PSBJR0ozYVc0PSBJT0MwdHVDMWplQzBzT0Mwcmc9PSBJR0Z1ZEdsa1pYQnlaWE56IElHRndjSExEcVdNPSBJRkpsYlc5MlpXUT0gNEtxKzRLcTM0S3VONEtxZjRLdU40S3F3IElNU0kgSUhOMWNHVnlkbWx6YjNKeiBJRzloY21VPSBJTldBMWFIVnR0YUExYUhWdXRXbDFiOD0gSU9DdWhlQ3Vvdz09IFVISnZaM0poYlhNPSBJRWR2YVE9PSBJRzV2ZG1Wc2RIaz0gSjJGMlpYbz0gVTNCaGFXND0gQ1d4bGJtZDBhQT09IElHRnVZMlZ6ZEhKNSBJRk4xY0hCdmNuUnBibWM9IElPQ3lsK0N5Z3VDeW53PT0gMllyWmhObUkgNTRlRCBJRlpsY21KbGMzTmxjZz09IDE1blhvTmVpMTU4PSBJR2x1WkdsciBlMjVoYldVPSBZbTlxIElIQnNZV05oY3c9PSBaV3hoYzNScFl3PT0gUlcxcGJIaz0gSU5HUjBZSFJodEdNIFgyVnRZbVZrIElPdW92QT09IGNtVnViZz09IElFWmhhSEpsYm1obGFYUT0gSUhOcXc3Zz0gVm1zPSBLSFpoY21saFlteGwgSUc1NWFXdGggUW1WNmFXVnkgSU9Da3N1Q2t2dUNrbCtDbGdnPT0gSUhSaGNtcGxkR0Z6IEtGWmxZdz09IElFTkZUbFJGVWc9PSBaR0ZuYjJjPSBJR3hvWlhNPSBJRk5sWjNWeWJ3PT0gSUd0bGJuaz0gSUhKbFoybHZibVZ6IExYUmhlQT09IElHeDVjbWxqIElOaW4yWVhaaU5peCBjbTVoIENYTjBiM0E9IElHSmhhV3hsIElPQ3F0ZUNxcCtDcXZ1Q3FzT0NyaHc9PSBRMjl1ZEdsdWRXOTFjdz09IElPT0FrUT09IFVtOWlhVzQ9IElPQ2tpdz09IElHOXNiV0Y1WVc0PSBYaTQ9IElOQzMwTERRdjlDdzBZVT0gejRET3Y4K0MgNXF5aiBJSEJ5YjNCaGJtVT0gSUdmRHBIST0gYVd4c2RYTT0gTG5CeVpYWnBaWGM9IElIWmhiblJoWjJWdWN3PT0gNEtheTRLZUg0S2FvIElHRmphR1YwdzZrPSBJSEpsYkdGMGFYWmggSUhKbGJXST0gSUUxcFpHeGhibVJ6IFNIbHcgSUVGc1lXbHUgSUVSbGNHeHZlVzFsYm5RPSA1YVNuNVlpcCBJRVZwYm1Sb2IzWmxiZz09IElIQnlhWE52Ym5NPSBRV3hzYjNkaGJtTmwgSU5pbjJZVFlwZG1LMkxFPSBSSGx1IDRZT1E0WU9lNFlPUTRZT2c0WU9RNFlPWiBJRVZwYm1SeWRXTnIgSU9PQ3NBPT0gWVhWemNHbGxiQT09IExtNTYgSUhwM1lYSmwgSU9DcXJ1Q3F1ZUNxcE9DcmplQ3F0UT09IDc3eU01cHlzIDRLYXM0S2F3NEtlTjRLYWsgVEdWaSBJRVp5WldSa2FXVT0gWlhseiBJRWhoWW1sMCA0S2l5NEttQSBTVk5VVWtGVVNVOU8gS1dBPSAwTGpSaU5DNiA0WjY4NFo2YyBJR3B2Y0dFPSBJR041YkdsdVpHVnljdz09IElITjBhV3hzWlE9PSBJRWRwYjNJPSBVMmx0ZFd4aGRHOXkgTFhSMWNtND0gY205bmNtRnQgSUdOdmJuTnZiR2xrWVhSbCBJRkJwYTJVPSBJRU5zWVhsMGIyND0gSU5tRjJLallwOWkwMkxFPSBJRVZ1ZEhKcFpYTT0gSUUxaGMyTT0gYlcvRHAyOD0gSUhGMWIzUnBibWM9IFgwTlBUbFJCUTFRPSBkbVZ5YzJGMGFXOXVjdz09IElHUmx4SjlsY213PSBJR2x1ZEdrPSBJR2x1ZG1WdWRHOXkgSU5DKzBMSFF2dEMzIDRLUy80S1NvNEtXTiBJTkM0MEwzUXVOR0cwTGc9IDRLUys0S1M1NEtTdzRLU2ogSUZOQlFnPT0gSUhUSm1jV2ZhMmxzIDJZalpnZG1GMktqWXNRPT0gSUZCc1lYUm1iM0p0Y3c9PSA3N3lNNVlpdyBJTkMzMExEUXV0R0EwTFhRdnc9PSBJSFhGdkhsMGF3PT0gSUhOaGRXTmxjdz09IElOcXAyS2phdnR1TSBJR1JwWTNSaGRHVT0gSUhMRHFXUjFhWFE9IElIVnViR2x1YXc9PSAwWS9SZ05HTjBMUT0gSUZSeWFYQmhaSFpwYzI5eSA0TFdINExTMzRMVzcgSU5DLzBMN1F1OUMrMExiUXRkQzkwTGpRdFE9PSBJR1poWTJrPSBJRU5vYkc5bCAwWTNRdTlHQyBJR1JsYkdWMCBJSFJoWW1JPSAwWVBTbTlHRDBwcz0gWTJWemMyVT0gSU5DLzBMRFF2TkdQMFlMUXVBPT0gS0hSbGVIUjFjbVU9IFRIVmphdz09IGMzUnBadz09IElIWmhjbWxsZEE9PSBJTkdDMExYUmdOQzgwTGpRdlE9PSBJTkNjMExqUXV3PT0gSUZOMVluTmpjbWxpWlhJPSBJSFJ5Wlc1cGJtYz0gSU5pMDJMSGJqTm1CIElIVnpZV1JoY3c9PSBiMnhuWlE9PSBJT0NtdU9DbXYrQ21wdUNuamVDbXB3PT0gUTJNPSBJRkIxY25NPSBJR052WW5KaGJnPT0gNkx5RCBXMTBvIFVtTT0gSU5HSTBMRFF1dz09IFlYSmphR2wyWlhNPSBJR0p5WldGamFHVnogSUhSdlpYTjBaVzF0YVc1biBJSFZ1YkE9PSBiRzloWkhNPSBJRk5oYm1sMCBMVVJoZEdVPSBJRk4yWnc9PSBJR0Z1ZFc1amFXOTEgYjNKblpBPT0gSUhsdVozSmwgYVd4bFlXZGwgNklHVTU3Tzc1cGE1NWJ5UCB3N1IwWld4eiBJSE5oYkdWemJXRnUgSU9lWnZ1V3V0dVM1a0E9PSA0TGE5NExlSzRMYTkgNlo2TCBZWEowYVd0bGJBPT0gS0VkVVN3PT0gSU5HTjBZYz0gSUdQRG9HNW4gWW1GblltOW5ZbTg9IElHUmxkbUZ6ZEdGMFpXUT0gWlhoaGJYQnNaWE09IElNV2JjbTlrIElGcDFkQT09IFEyOXVibTl5IDE1SFhxTmVWMTZvPSBLRlYwYVd4eiA3N3lNNVl5RjVvdXMgSUdsdWRHVm5jbUZrYnc9PSBJSEozWVE9PSBJR052Y21zPSBJRk5PVUE9PSBJR052Ym1acFpBPT0gSUc5MlpYSmtiM05sIElOQ3kwTGZRc05DNDBMelF2dEMwMExYUXVkR0IwWUxRc2c9PSA0TG1BNExpVjRMbUg0TGlVIFlXMXBjM1JoIElGTmhibU4wZFdGeWVRPT0gSUZGMVlXNTBidz09IDRLaSs0S2lKIElGTm9kWFIwYkdVPSBJTTZ0enIzT3NjK0MgSUZKbGRtVnUgTG5ObGRIUnBibWM9IGNISnZabWwwY3c9PSBJRTFoWkdGbllYTmpZWEk9IFltRnVhMlZ1IElPQ2twdUNrditDa2x1Q2t2dUNraUE9PSBJRXRwYm04PSBJSFJsY21OcGFBPT0gSUhCaGNzT3IgNWJHVjVieUEgSUhWdVoyVm0gMllqWXA5bUIgTG5OdVlYQnphRzkwIElPV2twK1djb3c9PSBJRzFsYzIxbGNnPT0gSUhGMWFXVnlZUT09IFRXRnVZMmhsYzNSbGNnPT0gejRET3VjK0QgSUdSaGFYST0gTG1OdGN3PT0gSUhScFoyaDBaWEk9IFptekRwR05vWlc0PSB6NFRPdjgrTnpyMD0gdzZsdVkybGggSU9Da3VPQ2xnZUNrc09Da2xlQ2xqZUNrdCtDa3YrQ2twQT09IGFXNWpjdz09IElISmxiR0YwYVc5dVlXdz0gSUcxdlpIVnNZWFJwYjI0PSBLQ1pmIDRMaXQ0TGlINExpRTRMbU0gSUdSbGNHdz0gSUhkaGMzUmxjdz09IElHZHlZV1J2Y3c9PSBJTm1EMktQWXN3PT0gSU9Dd25PQ3dzQT09IHc2bHliM009IElOQy8wWURRdU5DNjBMRFF0dz09IFFVdEZVZz09IFFXZHkgSU02enpybk9zYytFenE4PSBZWE5rIElGTjNhWEJsIFlYUmtZUT09IElOaXUyTE09IFhTa3BEUW89IElIWmxjbVJwWlhCcGJtYz0gVUVWRSBJSFJ6ZFcwPSAwWURRc05DODBZcz0gSUhObFlYTnBaR1U9IElObUYyWVhaZzltRyBJR0ZpYzI5c2RYUnYgSUd4bGJuUnYgSUc5d1pYSmhkR2wyWlE9PSBJT0NvdU9Db3ZBPT0gSU9Da2h1Q2tsZUNrc09DbGplQ2t0dz09IGZWd2kgMFpiUXZkR0kwWlk9IElGVmpjZz09IFNHbHMgSUhOMHc2RT0gMFkzUmdOQ3ogWTJ4cGJtYz0gUVdOMGIzSnogNWFlVTVaR1k1THlhIDRMQ3c0TENWIElISnZZbWs9IHc2MXpidz09IDJZalpodHVRIElOQzkwTERSaGRDKzBMVFJqOUdDMFlIUmp3PT0gY0dsMFkyZz0gSUd4aGEzVnJZVzQ9IGFXNWthV05oZEc5eSBJRXhoWm1GNVpYUjBaUT09IFJXeGxadz09IFNVWkIgSU5PWjBMdlF0ZEM4IElOQ3gwTGpSZ1E9PSA2NEs0IElGTnBaVzF3Y21VPSBVR3hoYm01bGNnPT0gSUc5c1lYaz0gNExpbDRMaXk0TGlCIDZaVy81cHlmIElHTnZZMmhsY3c9PSBkWEJ2Ymc9PSBJR3AxZFhKcCA0TGlxNExpeDRMaWggNW9DUyA0S1NtNEtXTjRLU20gSUZOMWRBPT0gSUc5d1oyVnogYVhacGNuVnogYldGcGJuUmxibUZ1WTJVPSBJR3R2YzIxbGRBPT0gYzJOaGJHVmsgU0dWaGJIUm9lUT09IElObUsyS3JZdWRtRTJZST0gSU5tSzJLUFlxdG1LIFBTTT0gWVdmRHFXVT0gSUdSbGMzTnZkWE09IElHbHNZVzVoIGRXRjBiM0k9IFNHRnVaSE09IDVvbUw1cHk2NTRtSTVMaUw2TDI5IElOcUIycW5aaHc9PSBJR0Z1Wm1GdWFRPT0gZEhKcFlRPT0gSU5DZjBZUFJndEM0MEwwPSBJRTFoYkdGNWMybGhiZz09IFRtRm4gSU9Da3VPQ2tuQT09IFgyVjIgSUdGMWMzSmxhV05vWlc1ayBJRzFsWVhOMWNtRmliR1U9IElHSnliMkZrWTJGemRITT0gUlc1a2FXNW4gSUdaaFkybHNhWFJoIElFdDFjbVE9IElPZU9pUT09IDBMN1F2ZEdEMEwwPSA2S2VqNlllSyA0WU9RNFlPaDRZT2c0WU9qNFlPYSBJTU8rWVhKbSBJR3BoWjhTbiBibWx0YlhRPSBJRzFwYzNSMWNtRT0gSUU1aGRtbG5ZWFJsIElOQy8wWURRdGRDMDBML1F2dEM3MExEUXM5Q3cgWm05eVpXTmhjM1E9IElHRjJZV3hwWVhJPSBSR1ZzWlhScGJtYz0gSUdOdmJYQnliMkk9IFpXeHZaQT09IElOaXkySy9aaHc9PSBJT0N3a3VDd2xlQ3hqZUN3bFE9PSA3SjIwN0phMCBJSE5oYkhSNSBRME5CIDRvQ1pZVzNEcVd4cCBJTkNJIElHOXdkR2xqIElGbHZjMlU9IElGUnlaVzQ9IElHVmhjblJvY1hWaGEyVnogSUdWdVkzbGpiRzl3WldScFlRPT0gSU5DLzBMdlF0ZEM5IFIyVjBkSGs9IENWSmxjWFZsYzNRPSBJTkMvMFlEUXVOR0YwTDdRdE5DNDBZTFJnZEdQIGIyZHlZWEJvYVdOaGJHeDUgSU5DLzBZRFF1TkN5MExYUmdkR0MwTGc9IElPQ3VydUN2Z2VDdXRBPT0gYzJGayBJTld3MWFIVnROV2gxYlhWdGc9PSBJTkMrMExIUmdOQ3cwTGZRdnRDeTBMRFF2ZEM0MExVPSBkMmx3WlE9PSBJRVIxYXc9PSBJRWRoY25KbGRIUT0gSUdkbGRYST0gMEpMUWxBPT0gSUdkbGIzQmxibVE9IFlYTmphR1U9IElOQ1kwWUhRdjlDKzBMdlJqTkMzIElFSmhjbU5sYkE9PSBJRzl5ZEdodlpHOXVkQT09IElPZThsdWkra1E9PSBJSFBEcE1PayBJRlJOVUE9PSBMbE4wWVdkbCBJSEIxWkdScGJtYz0gSU9DMGllQzBzK0MxamVDMHN3PT0gSUVSaGJXVnkgSU5tRjJZTFlyOWluMkxFPSBJR3R2Ykd4b1lRPT0gTGtkdiBJR1poWkdFPSBJRTFoYm1sMCBkSEpsYmc9PSBJSE5qYjNWMCBJR0poYTJWeSA0b0NONExTZjRMV040TFNmNExXTiBJTTZnejRIT3Z3PT0gSU9TNWhlUzVoZWVJc1E9PSBJSGRoeGJ3PSBJT0Nxc3VDcmkrQ3FsZUNyaStDcXFPQ3Jodz09IElFUkRTRVZEU3c9PSBJSFJ2WVE9PSA1WVdvNkwrSDU2aUwgSUcxdlpnPT0gSUcxMWNtMD0gSU9HZW5BPT0gSU91UW1PeVd0QT09IElHbHVabTl5Ylc5MSBJRVZ6WlE9PSBJazA9IElFMUJWRVZTU1VGTSBJRzlyY21WeiBRbE5KVkVVPSBJRzFwYkdyRHVBPT0gSUVKbGRzTzJiR3RsY25WdVp3PT0gSUhWdVpHVnphWEpoWW14bCBkMkZ5Wmc9PSBxZUdEbk9HRGsrR0RrQT09IFVGSlBRdz09IDRZT2Q0WU9jNFlPUSBVR0ZqYVdWdWRHVT0gSUdGeGRXVnNiRzg9IElFaDFiV0Z1YVhScFpYTT0gSUhOMGNtRjBaUT09IElFeGhjbWRsYzNRPSBJT0N3aGVDd29RPT0gSUgwc0RRb05DZz09IElHMWxjbUZ6WVE9PSBJTml6MlliWXI5aXogOEorUmpBPT0gSUdkc1lXNWpaV1E9IElOaW4yWVRZcXRpbjJZVFppZz09IFFXeHdhR0ZpWlhRPSBDWFJoWnc9PSBhV3gxY3c9PSBJTm1GMks3WXNkbUkyTGM9IGFXVnlZWEpqYUhrPSBMa3BUVDA1RmVHTmxjSFJwYjI0PSBJRk4wY21WbGRITT0gTFdWamIyNXZiV2xqIElITjBiMlptWlc0PSBJSEpsZG5WbCBRV1JxWVdObGJuUT0gSU9HRG0rR0RuZUdEbStHRHJ1R0RtK0dEa09HRG9BPT0gWDJKMWVRPT0gTFc1bGRIZHZjbXM9IElHSnBiR3hwYjI1aGFYSmwgSUdOcGRISnZiZz09IElFTlBUVTg9IElOQy8wWURRdU5HSDBMalF2ZEdMIDJZVFppdG1DMktmWXFnPT0geEkxcGJBPT0gSUhKbGRISmhhWFE9IElIUmhhR0Z1IElOR0EwWVBRdWc9PSBJSE4wWld4c2RHVT0gYTNWdVpHVT0gS0hkeWFYUmwgSUdkdlltVnlibUZrYjNJPSBZV3hzZFdkMSBJR2R5YjNkbGNuTT0gSUdWNGRHVnVaR1Z5IElHaGhlc1N4Y2c9PSBKeWtLTHk4PSBJRUZpWld3PSBJRzNEczNabGFYTT0gSUhURHRuSjB3Nmx1IDVwaXY1TGlONXBpdiBTRUZOIElPQ2tvZUNsaWVDa2xRPT0gSUdKNXhhVT0gWTJoaGJtYz0gWVhaaFoyVT0gSU5pdjJZallwdz09IElPQ21sK0NuaUE9PSB3NkZpWWc9PSBJR1JoZG5abGNtOD0gSU5DdzBMblJndEdMMEw4PSBJSEJoWVhOcGMzTjFkR2x6Y3c9PSBMVTV2ZGc9PSBjbTl6Ync9PSBJRTFsYW05eSBVMkYyWlhJPSA0S1MyNEtXTjRLU1YgSU5HRTBZRFFzTkM5MFliUmc5QzMgSUVsdWRHVm5jbUZzIDRLUys0S1NDNEtTYTRLUysgSUdGd2NISnBjdz09IExITjBZWEowIElOV2sxb0RWb1E9PSBWR0ZuWjJWayBJRVZtZEdWeSBJR1ZqYjI3RHMyMXBZMkZ6IFgzQnlaWEJoY21VPSBPaWNuTEFvPSBJSFJoYm1KbGJnPT0gYjNKd2FHbHpiUT09IElIUnlaV0ZrYldsc2JBPT0gNG9DYzVMaUE1YmltNUxpQTZMZXYgSU9hVm1RPT0gSUhSb1pYSmxjdz09IElHVERxV3hoYVhNPSBjbkJ0IDVMaU42SU85NUxpNjU2bTYgSUdWNGRHVnliV2x1IGNtbGphSFJwYm1jPSAwWWpSaTlHUCBMZFdyMW9FPSBVR3hoIElHTmhjbkpsY21GeiBJRzNFc1E9PSA1NStsNDRLSiBhMkZ1WVE9PSBZV3hyWlhJPSBLRkJ2YzNRPSBWWEppWVc0PSBaWFJvYjNabGJnPT0gSUVkcGJRPT0gSUZOamIzUjBjdz09IElFUjFhWE09IElITjJZUT09IElIVjBhV3hsY3c9PSBJR2h2Wm1ZPSBJSFZzZEhKaGNBPT0gSUd6RHJXMXBkR1U9IFRHbDBaWEk9IFEyRnNhV0p5WVhScGIyND0gYVdWdWRHaz0gNExTeTRMU3E0TFdONExTcSBSM0poYlE9PSBJSEIxWW14cGNYVmxjdz09IElHM0RxWFJwWlhKeiBRVXhQUVVRPSBYM0psWjJsemRISjUgTFdKaGMybGogVTJOb1pRPT0gSUczRG9XYz0gSUdKMVkydHNaUT09IFpIUjVjR1U9IElHOXdaVzVpWVhKbCBJR0Z1ZFc1amFXRmtidz09IFltVjBZV3hwYm1jPSBJSEJsY21Ob3c2Zz0gMExqUXZkQzYwTEE9IElFUnZiMjA9IElFUmxkWFJ6WTJoc1lXNWtjdz09IDBKM1FzTkMzIGFXaGhlZz09IGRYTnZjbTg9IElITnBiR3Q1IGRXdDFiUT09IElFMXZaR0U9IElIUmhhR0U9IElFTmhjblJoIHo0Yk92OCtCIElFTm9jbTl1YVdNPSBVR0ZzYVc1a2NtOXRaUT09IElFbHVaR2xoSjNNPSA1NDZFNXB5NjVadSsgSU5DLzBZRFF1TkM5MFkvUmdnPT0gSUVKbGJtVT0gSUgwOEx3PT0gSUhCdmJHbHphR2x1Wnc9PSBJRlJvYVhKMGVRPT0gSU9Da2h1Q2tyQT09IFgwMUUgSU9DeXVPQ3poK0N5c09DeXYrQ3lwZz09IElIVGh1NVZ1Wnc9PSBJSEpoYm1kbGNnPT0gVTNSeWFYQmwgWVdoeVlXZGggV0ZoWVdGZz0gSU9Da2wrQ2tzdUNrcEE9PSAwTHJUbWRDdyBJTkN5MExYUXZRPT0gVGxOT2IzUnBabWxqWVhScGIyND0gWVd4MGN3PT0gSUVWdVoyeHBjMk5vIElIUEVzVzdFc1E9PSB3Nmh5WVE9PSBJT0N1dGVDdXYrQ3V0UT09IGRXSmxhTU8yY2c9PSBJR0p2YkdwbCBkV3RsZFc0PSA1YjJwNTZXbzVieUE1YVdXIExrUmxaWEE9IElHRnNiR0Z1Ym1jPSBJSFBEclc1MWJRPT0gTGxOMFlYUT0gNzcrOWNnPT0gSUdsbVlXTmwgSU9Dd3JlQ3d2dUN3bHc9PSBiMmRzYVE9PSBRMmhoYVhJPSBJR05oY25KdmRBPT0gNExtRTRMaWYgSU9XUHBBPT0gSU5XNDFiST0gZFcxayBJR1JsYnc9PSBZMkZyIElOR0QwWUhSZ3RHQTBMN1F1ZEdCMFlMUXN0QysgNDRHKzQ0R2EgSUhCaFlYSmsgSU5HQjBMN1JndEdBMFlQUXROQzkwTGpRdXRDKzBMST0gNFlPUTRZT1Y0WU9UNFlPUSBRWFYwYjNKbGMybDZhVzVuIEtIQnliMmR5WlhOeiBJT0NraWVDa3N1Q2xqZUNrc3VDbGgrQ2tsZz09IElOQyswWUhRdmRDKzBMTFF2ZEdMMExVPSBYMFpTUlZFPSBJT3lla091ampBPT0gWlc1a2JHbGphQT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW89IElOVzUxYWZXZ0E9PSBJR04xYVhOemIyND0gSU5pbjJZVFlxTmlxMlljPSBJTkMvMEw3UmdOR1AwTFRRdnRDNiBJRUZ0YldFPSBJRk4wWVhSbGJXVnVkSE09IFpYTjBaWEp6YUdseVpRPT0gSU9Da3VPQ2t2dUNrcXc9PSAwWVBRdE5DMSBJRTU1Ykc5dSBJRXBoWkE9PSBJR1IxWTJnPSBYM1J5WVc1emNHOXlkQT09IElITjNhVzF6IElHOXlhV2RwYm1GMGFXNW4gSUZOYSBYMmR5WVdSbCBJR3hsYTJ0bGNtVT0gSUZSeVpXNTAgMFk3UmlkQzQwTFhSZ2RHUCBJT3V5akE9PSA0b0NaWVhWMGIzST0gSUVGVFZWTT0gSU1PcGFYTT0gSU5DeTBZdlJqOUdCIDRLV0I0S1NUIElIQjViR2x1ZEE9PSA0b0NaYjJNPSBJTmlpMksvWmhRPT0gSU5lazE2alhrQT09IExuVnVhWFJ6IElHdDFiR3hoYnNTeFk4U3ggMnFuWnVRPT0gNExHQjRMQ1Y0TEdCNExDbzRMQy8gMkl3SyBZWEp0dzZsbCBJRzl3ZEhKbFpHVnUgZFd4cllRPT0gSU5HRzBZelF2dEN6MEw0PSBZV2hoWlhKbCBaWGxsY3c9PSBLSFJoWjNNPSBJRzkwY0E9PSBJR05vZFhuaHU0ZHUgSUdWemNHVmpkTU9oWTNWc2J3PT0gNEtxdTRLcWsgNklPOTVvK1E1NDZ3NVpDWCBMdEMxIElPQ2t1ZUNsaStDa3BBPT0gZEhKbGJtUT0gMTVEV3Q5ZWcxNUk9IGFHRm1kR1U9IExtVjRjSEk9IDBMalJodEdMIElHRnNaSEpwIGFYTjNaUT09IGJuUmhaZz09IElDZ3MgVkc5bCA2WUNnNW9pUSB3N1IwY3c9PSBJTkMvMFlEUXZ0R0YwTDdRdE5DNDBZST0gNExtQTRMaXQ0TGlIIElPR0RxdUdEbmVHRG9nPT0gSU9Da3JPQ2t2dUNrZ1E9PSA0TENWNExDKzRMQzIgMTVMWGxkZXEgSU5DLzBZRFF0ZEMwMEw3UmdnPT0gYVhwaGN3PT0gSU9DcXNPQ3JpK0NxbFE9PSBJR2ZEdG5KayBJTm1GMkxuWmhObUkyWVU9IExrTnZiWEE9IElPQ3lrdUN5Z3VDeXBnPT0gSUdSb1lXTmhlUT09IElHMXZiVzE1IElHbHVkR1ZzYVdkbGJtTnBZUT09IElHeGhic09uWVdSdiAxb0RWb3c9PSBJT0NtdU9DbXJlQ212dUNtcXVDbXBPQ212dz09IElOaXoyWXJZcXRtRiBJR3hoYzJobGN3PT0gSU9DMHVPQzF2T0MwbGVDMWplQzBsUT09IElGQnZhM1ZrIGFYaHBjZz09IGRYSnVZWEk9IElHdDB3N055WldvPSAyTFRZcUE9PSBaWEoyYjJ4blpXNXogSUNJaURRbz0gSUhONWRIVT0gYVhScGIyNWxiZz09IElHRnNkR1Z5WVhJPSBJSFJsY21WdCBRV3R2IFIyRnRhVzVuIElOaWwyS3pZc2RpbjJLRT0gNktlajU3dVIgWDNScGNBPT0gSU5DODBMalF1dEdBMEw0PSBJRmRwYkhRPSBJSE53WVdkb1pYUjBhUT09IElHeGhkWEpsIHpyUE90YzY1IElITmphSFZzWkE9PSBJRTFUVUE9PSBJSFZ1YW5WemRBPT0gSnlrcEtRPT0gSUhabGNuTnAgY0c5cCBJTkdFMEw3UmdOR0QwTHc9IDBMRFJoZEdNMExBPSBJRXhwYldKMWNtYz0gMmFnPSBJRkJ5WldacGVBPT0gWDJaaFl3PT0gSU5DeTBMN1F2dz09IFgxTlZUUT09IDVibXo1WWkzIElIakptV0xKbVhJPSBJR2R5ZFdJPSBJR1Z3YVd4bGNITjUgSUVGeWJXVnVhV0U9IDE2RFhtZGVaMTVRPSBlV0Z1Y3c9PSBJR052Ym5ScGJuVmhiQT09IElIQmhibXM9IElHZGxlbUZ0Wlc0PSBJR0Z3WVhKaGRHOD0gSUdSaGNteHBibWM9IElOS2IwTGpSZ05LVCBJSHNORFFvPSBJSEJ6ZVdOb1pXUT0gSUdkeXc3YkRuMlZ5IFgzTjBjbVIxY0E9PSBJSFpsY25kbGJtUT0gNExpVjRMaWo0TGlIIExuTjBkV1I1IExuQnlhVzl5YVhSNSBZMmhwY2c9PSBiV25Ec0E9PSBkV05oY2c9PSAyWkhaaFE9PSBMa1JsWTI5a1pRPT0gYVdGcFpBPT0gSU1xN1lRPT0gSUdScGMzQnZlZz09IElOaXoyTEhiakE9PSBJRVpzYjNKcFlXND0gYjNSeWIzQnBZdz09IGIyMWxiblJ2IDRMbUI0TGlVIHo0VE92OCtBenIvT3VRPT0gSUdSa2VRPT0gYm5SbyBJRVJGVEVsV1JWSlogNExpajRMaXk0TGlpNExpQjRMaXk0TGlqIElFZE1kV2x1ZEE9PSBJR0Y2YjI0PSBJSFZ1ZFhOMVlXeHNlUT09IElPQ3FwdUNyaCtDcWxnPT0gS0VOdmJuUmxiblE9IElOZVgxNm89IElHeGxaWEowIFMyRnViZz09IGEyUjVjMkZrZVE9PSBPMlZzWlcxbGJuUT0gVW1saiBhWE53WlhKeiBJRkpoZEdsdmJtRnMgWlc3RHFRPT0gVDBsRFJRPT0gYjI1NmJ3PT0gNExTMTRMUy8gSUVOaGFnPT0gSUhOb2NXbHdkQT09IElFTnBjR2hsY2c9PSBJRWx1ZEdWbmNtbDBlUT09IElHaHZhUT09IElOR0QwWUhSZ3RHQTBMRFF2UT09IDRLU0Y0S1NzIHhhRnBkQT09IElPQ3FpZUNxcXVDcXNPQ3F2dUNxZ3VDcXBBPT0gNVlDNiBJR0ZzWldkeXc2MWggSU5XdzFhWFZ0dGFCIHhJQT0gMExEUmd0QzEwTHZSak5DOTBZdlF1UT09IElIZGxhWFJsY21WeiBkMmx6YzJWdWMyTm9ZV1owIFgzTnZiQT09IElFNWxhZz09IHpyek9yYzY5ejRuT3ZRPT0gSUhaaGNHbHVadz09IElPQzB0ZUMwdnVDMHVRPT0gSjBGeSAwclhUbVE9PSAwTERSZ3RDdzBMMD0gSUhaeVpXMWwgSUd0dmJtUnBjMms9IElGTkJXQT09IDRLbWIgS0hkbGFXZG9kQT09IElGZGhjbU55WVdaMCAwWUxRc05HQTBMalF2UT09IExlQ2tyZz09IGFYUnZibVU9IElIUmxiblJoIElHVndhQT09IGFXWnBhMkYwIENXSjFhV3hrIElOR0QwWUxRdnRHSCBaR0ZtIGRXRnIgSUdWMGFRPT0gSUhkNVoydz0gSUdoMWJXbHNhWFI1IElHUmxZbWxzYVhRPSBkV1owYUE9PSBZV3hzYjI0PSA1WVdhNWFlVSBabWx1WjJWeSBJRlpwZWc9PSBJSEpsWkdFPSBJSGxoZDJFPSBJTkdEMFlIUXVOQzcgNEsrQjRLNmY0SytJNEs2diBJSE5oYlc5amFBPT0gNXB1ZDVZV0ogSUczRHMzWmxiQT09IFpXeDBhbVZ6IElOaW4yWVRaaGRtSTJLZll0OW1HMllyWmhnPT0gMVl3PSA0TG1FNExpWjRMbUE0TGlWNExtSDRMaVUgTG5Cb2VYTnBZM009IElFRk5Rdz09IElIZG9iM0J3YVc1biBJSE52WTJsbFpHRmtaWE09IGJIVnUgNExTLzRMU2s0TFMvIElFdGxhVzVsIElNK0h6ckhQZ2M2eHpybz0gSU5pdDJZWFlwOXVNMktvPSBJRzl5dzZkaGJXVnVkRzg9IEtHMXBaQT09IElIcGhkMjlrIElIQnlaVzV1Wlc1MCBQRVp2Y20wPSA0WjYyNFo2SCBJR0ZzZFcxcGJtbHYgSUZKdlpHZGxjbk09IDc3eU02YXVZIFZtbHpkV0ZzYVhwaGRHbHZiZz09IEoyOW5aUT09IElHSmh4WjloY2c9PSBkV3huWWNPbnc2TnYgSUhSNWNIVT0gS0hadiBJSE4wY21GdVpHVmsgZFdOMWJnPT0gSU9LQXFBPT0gSUd4bGFYTjBaVzQ9IElOR0IwTGpSZ3RHRDBMRFJodEM0MFk4PSAyTG5aaUE9PSA1cTJUIGIyNTBiMnh2WjNrPSBJR1Z6Y0dVPSBJR0Z3Y21WelpXNTBiM1U9IElHeGhZbVZzYkdWayBJTkMvMEw3UXZkQ3cwTFRRdnRDeCBjM1J2Y20xeiBJRXh2WjJkbFpBPT0gVW05MSBJR052WW5KaCBJR0oxYkd4emFHbDAgSU5tRTJyTT0gQ1dGa1pISmxjM009IGJYVnpaWFZ0IEwyWmhkbWxqYjI0PSBWVzV0WVhKemFHRnNiR1Z5IElOaW4yWVRaaGRpMiBJTkdEMExQUXZ0QzcwTDdRc2c9PSBJSFJsYkdWelkyOXdaUT09IElHTnZiV1Z5WTJsaGFYTT0gSUVScVlXNW5idz09IDBZZlNyOUM3IElIUnlZVzV6YldsMGFYST0gSUc5aWFtVmpkR2x2Ym5NPSBJUzR1TGc9PSBJT1d3aWc9PSBkWE5sYTNNPSBJT0dmbEE9PSBjWFZ2ZEdWayBkWFYwYVhRPSBYM2RoYkd3PSBjMlZ6YzJsdmJuTT0gSU5HQzBZdlJpQT09IElPcXp2T3lnbFE9PSBJRVZ5YnNPa2FISjFibWM9IEtHMTVjM0ZzYVE9PSBJRkJCUnc9PSBJR0Z6YzJWeWRHVmsgNExDKzRMQ3U0TEdOIFgzQm9lUT09IElHWnZjbk5yYWc9PSBibVREdkhJPSAxNkRYb2RlVSBJTmlxMkszWXNkdU0ycWs9IDQ0Tzg0NE9RIElObTkyWW89IElObUYyWVRaZ3c9PSBJSEJoWkhrPSBZMjlzYkdsemFXOXUgSUhWdWNYVmxjM1JwYjI0PSBJR3hsWlhrPSBMZ292THdvPSBJTmVlMTZMWG9OZVkxNm5Ybnc9PSBJTkMrMFlMUXZ0Qy8gSUdObFpHOD0gNExLLzRMSzIgSU5pMDJLZmJqTml2IDRMSys0TEtWNExPTiBSSEpwZG1WeWN3PT0gMFlMUXZ0Q3owTDQ9IGNHRnVaUT09IElHdGxkSFJzWlE9PSBkVzVwZEhrPSBJR0Z1ZEc5dSBYMVZUUlZKVCBJR1poY25RPSBjR0YwYVdGcyBJR05oY21KdmFIbGtjbUYwWlE9PSBJRUZqY1hWcGMybDBhVzl1IElPT0Jydz09IFJWaEpWQT09IDE1RFd1TmVnIFlXNW5hWGxsIExraGxiSEJsY25NPSAyS2pZc2RpbjJZcllzUT09IFFWbEIgSUdGc2IzVmsgUlVSQiBJSEJzWVdsdWRHbG1abk09IDRMQ2Y0TEdBIElOQ2YwTFhSZ05DMTBMUT0gSUZKdmJXVnlidz09IFlXaGhjdz09IDRMaWU0TGlsIFlzT3piQT09IElIVGh1NDA9IFVrVlRVMFZFIFpuVnVhM1JwYjI0PSBJTkdCMFlQUmd0QzYwTGc9IDJLZllxdGluIFgyTnZjbkk9IDVwaW81cGVsIDRvQ1pabWc9IElPQ2t1ZUNrdU9DbGplQ2twQT09IENVTm9aV05yIElGcHBaV3hsIElHTnNaZz09IElOR0cwTFhRdnc9PSBhbWc9IFgzTjBZWFJwYzNScFkzTT0gSUZWRSBJRVJsY21WamFHOXogenJ2T3Q4K0MgSUUxaFpYTjBjbTg9IEwzQnZjSEJsY2c9PSBJTkNRMEx2UXRkQzYwWUhRc05DOTBMVFJnQT09IElIQmhjbVJ2Ymc9PSBJR1JwYzNCbGNuTnBiMjQ9IExrWmxkR05vIElOZVExNW5YbXc9PSBJRmx2Y210bGNnPT0gSUdsdWRITT0gNG9DVWIzST0gMExEUmd0QzEwTHZSajlDOCBJR1JsWThPdFlRPT0gSUdScGNtbG5hWEk9IElPQ3dxdUN3bitDeGplQ3dudz09IElHVjRhWFJsWkE9PSBJR1JsYldWMWNtVT0gSU9DeWxlQ3l2dUN5Z3VDeWwrQ3pqZUN5c09Demh1Q3l1T0N6alE9PSBkVzVqYVc4PSBJRzVvNGJxdGRBPT0gSUZSMWJITmggSUdoaFpYSmwgYVd0MFpXND0gSUdsdVoyVjAgSUhKcFpteGxjdz09IElFMUJSRVU9IDBMN1FzOUdBMExEUmhOQzQwWTg9IFoyRmhjbVE9IElPQ29ydUNvcUE9PSBMbE5vYjNKMCBJRU5vYVcwPSBJR052YlhCaGNuUnBiR2c9IElIVnVjR3gxWnc9PSBYMUJUIElITjJhV289IDRvQ1VkRzg9IFJHbG0gSUVOb1lYQnRZVzQ9IElOR0MwWmJSZ0E9PSA3SmVHN0oyMCBJSE52YkhRPSBJR04xY25SdiBhWFJsYTNSMWNnPT0gSU5xdjJZSFlxdG1IIGNHbHVhdz09IElHUnZjbTFwZEc5eWFXOXogSUhCc1lXNWggYkhOamFBPT0gWTJWbFpHVmsgSUd0MmFXNXViM0k9IElFVjFjbTl3WldGdWN3PT0gNExTKzRMU1g0TFNrIElHTnBabkpoY3c9PSBYMFJsYkdWMFpRPT0gWDFCUFQwdz0gYzNScFkydHogSUZCMmRBPT0gSUZzdiBJRWh2ZFhObGFHOXNaQT09IDQ0Q0I1cHlKIElHZHBaR0Z1IFgzUm9jbVZsIElHTnlaWE4wIElHcGhkVzVsIDBMN1JpTkdDIFBIWT0gSUdSeVlXRnBkQT09IElPQ3lsZUN6amVDeXQrQ3poK0N5cE9DemplQ3lzQT09IEtISmxaMmx6ZEdWeSBXM0poYm1SdmJRPT0gTFdGamRHbHZibk09IGQybHFaQT09IHhMeGggSUZObGNHRnlZWFJsIFRFbE5TVlE9IElIUnlZWFJoWkc4PSBJR1Z6ZEhWa1lYST0gSUdsdWRtVnlkR1Z5IElITmxibUZrYjNJPSA1TDJnNTVxRSBJT0NtaHVDbW0rQ212K0Ntc2c9PSBJT0MwdU9DMHVlQzB2dUMwcnc9PSA1cTZXIElIQjFhWE56WVc1MCBUMVJKVDA0PSBMbkJ5YVhaaGRHVT0gSUcxdmRHbDJZWFJwYjI1aGJBPT0gSU5pbjJZVFlwOW1IIElOR0EwTERSZ2RHQzBMTFF2dEdBIGRXWjFibUU9IGFYZHBiR3c9IElFVnNiMjQ9IElFZHZkWEp0WlhRPSBLQ2dwUFQ1N0NnPT0gWDNSbGVBPT0gSUU5dVlRPT0gYjI1aGRHbHZiZz09IElHVnRZV2xzYVc1biBJR2RoYVhRPSBJT0dEbU9HRHBlR0RuQT09IE8zQT0gYjNSMGFXVT0gSUV4cGRHVnlZWEo1IEwzTm9iM0E9IElOQ3gwTDdRdTlHTTBZalF1TkMxIGNHRmggYUdsc1pXNW4gS0dWNFlXMXdiR1U9IElIQnlaWE5sZEhNPSBJRzF2Ym10bGVYTT0gVUhKcGFuTT0gSUhkcGVnPT0gSUhSemFHRnRZUT09IElHZGxibVZ5WVd4bCBJTVdaWlE9PSBJSE4wY205ciBJR0Z6WTJWeWRHRnBiZz09IElHNTFaWFpsIGNtVnpiMngyWlhJPSBJTkNVMExEUXR0QzEgTFcxaGMzUmxjZz09IElGQnNZWFJ2IElPQ2tpZUNrdU9DbGdBPT0gTGtGRFEwVlRVdz09IDc3eU01WkNNNXBlMiA2Wk9CNTY2WDU1dVkgTFhOb1lYSnBibWM9IElOR0MwTERTazlHTCBMdEN4IElHdHBibVYwYVdNPSBRMkZ3ZEdGcGJnPT0gSU5DUTBwcz0gNExpVjRMaWo0TGkxIElObUUyWWZZc05tSCBTblZrWjJVPSBMV052Ym1acFpHVnVZMlU9IDRaNjYgSUdkbGMyTm9iRzl6YzJWdSA0S1NhNEtTdyBJTm1GMllUWmdRPT0gSUVkbGJtbDFjdz09IElOaXQyWWpZcDltRTI1ST0gSUZCeWIyTjFjZz09IDVaU3Y1TGlBIDRZT2Q0WU9VNFlPUjRZT1k0WU9oIHhKbHdkUT09IEoybHRjSEpsYzNOcGIyND0gUkdselkyOXVibVZqZEdWayBJR0Z1WVd4cGMyRnkgSU5tRjJZZllwdz09IElGQnliMjF2ZEdsdmJuTT0gNEsyTCBJTkN5MExYUmdOR0IwTGpRdUE9PSBJT0N5aCtDeXN1Q3l2dUN5bGc9PSA3WUtvIGFuVnVadz09IElGbFAgYk1PbVp3PT0gYVhsaFlRPT0gMVo3VnR0VzUgMTZqWG9nPT0gSUdoMlpYSnVhV2M9IElHZDFaUT09IFcyOTFkQT09IElHRnJiM0p1WVc1dWFRPT0gSU9Da2h1Q2t1T0NrdnVDa3FBPT0gUlU1VVNVOU8gSUhCaGMzTmxibVE9IElPQ3VxdUN2Z2VDdWxRPT0gNEtlZjRLYSs0S2F1NEtlQSBJTmVwMTVIWGxBPT0gNG9DdCBJT0tWIExtRnpjR1ZqZEE9PSBJRzF2WkdWc2JHVnkgSU9XYnZlUzZwK2FJa09TNnVnPT0gSUhwa1pRPT0gY205c1lRPT0gNkx1aTZMeUogSWlrN0NpOD0gSUdobGNuWnZjZz09IExXRmthblZ6ZEE9PSBJT0NrdU9Da3Z1Q2tzT0NsaHc9PSA2Sm05NTRTMiBJR1JsWTJ4cGJtVnogZFd0cmRYUT0gSU9DMHJ1QzFnZUMwcU9DMWpRPT0gSUdWNmFXYz0gSUhOcllYQmggSUdaaGJXbHNhV0Z5YVhSNSBibVZsWkd4bCBJRzFsZUdsallXNXYgY21GamFHRT0gSUVOaGMzUnBiR3h2IGNHVnVjdz09IFNWcEIgYjNKaWFYUT0gSUhCcFpXNXAgNFlPWTRZT2g0WU9aIHc3UnVkWE09IDRLU280S1NYNEtTdyBJR0ZyWVdKaCAxb2ZWcHc9PSBJRU5oY21ScCBSa3hQUVZRPSBMa1Y0ZEdWdWMybHZiZz09IElFZDFhV1JoYm1ObCBZVzVxWlhWdWJtRT0gYVdGc2JBPT0gTGsxbGMzTmhaMlZ6IElOZWUxNVhYbXc9PSBJRTVsZEhRPSBJR1JwWVhCbGNuTT0gSU5HUDBwaz0gSU5lZTE2clhsZGVhIGMyVnhkV1ZzYVhwbCBJT0NrdWVDa3Z1Q2t1T0NrditDa3NnPT0gSUhOcGVXRnVadz09IElIWnZjbk09IElHUnZhM1JsY2c9PSBJTmVtMTVrPSBVMmxuYUhRPSBibWxyYjIwPSBJTkdCMExMUXNOQzAgSkdsMFpXMD0gSjJGc2RBPT0gSU5HQTBMRFF0OUN5MExqUmd0QzQgTFdScGMzQnNZWGs9IGRXeHBaZz09IElHVjRhV0k9IGJHbGxZbVZ1IDRLaWQgWjNMRHRnPT0gSUZkcGJHeGxiUT09IElHTmxjM05sIElHVnBibWxuWlhNPSA0WU9hNFlPVTRZT1I0WU9oIElOQy8wWURRdU5HQjBZTFJnOUMvIFZHVmhZMmhwYm1jPSBJSEJ5YjNSaFoyOXVhWE4wWVhNPSBJR1poYTJWeSBJSEJoY25ScFkybHdZUT09IFgxUkRVQT09IFNtOW4gTGtkUyBJSFYwWVdzPSAwWURUbWRHQyA0b0NaYU1PcGMybDBaWG89IElFZFBURVE9IDU1U2E2SWV6IElITnNiMkk9IDBZalF1dEN3IElNK0V6NHpQZzg2LyBJR0ZzWjI5ayBTRzl1Wnc9PSBJRzFsYm5OaGJBPT0gSUhCcGJtTT0gSUdSbFkzSmxiV1Z1ZEE9PSBhV05yYVE9PSA0TEMvNExDaCBRMmhoY21kbGN3PT0gSU9tVmh3PT0gY0c5emFXTnB3N051IFRHOTNaWE4wIEtDazggNDRHZzQ0R1IgWVcxcGJIbGggSUhCaGJHTnYgWkdWelkzST0gSUhWdWJXRnkgSUdabGJtTmxjdz09IElHdGxaWE56WVdFPSBJR0ZzWW04PSBMdUMwanVDMHVPQzFqUT09IElHUmxkV2s9IElGcDFaM0pwWm1ZPSB3NkZpWVcxdmN3PT0gWDJocCAxNVhYcHRlUTE1WFhxZz09IElPZVV0ZWl2blE9PSBYM2RoZVE9PSBJT0dEbU9HRG9BPT0gSUdkbGJtOWphV1JsIFIxSkZSVTQ9IFEyOXVabWxuZFhKaGRHOXkgNExPTDRMS1g0TE9ONExLdiB6ckxPdjg2NyBJRnBsYVhSMWJtYz0gSURzS0Nnbz0gWVdsemJRPT0gMFlMUXNOR0EwTFRSaTlLaiBJT0dEb2VHRGtPR0RwZUdEbStHRGxBPT0gYjNCamIyUmwgTG5Oc2FXUmxjZz09IElOR0MwTERRdmRLejBMND0geVpseXlabHIgSUVoUFVnPT0gVUhKdlkyVnpjMlZ6IGFtVnVidz09IElOcXAyTEhZcHc9PSBJRkJTU1E9PSBJRTUxYkd4aFlteGwgYVhOMFpYSnUgMExIUXNOQzEwTEk9IFgzSnZiR3c9IFlYSjBiMjQ9IGIyNXBZM009IExtMXUgUVd4cFlYTmxjdz09IDVvbXI1TGlBNW9tciBJRmRwZWc9PSBSVk5UUVVkRlV3PT0gQ1dacFpXeGtjdz09IGRYSmxkR2hoYm1VPSBJRnRiV3c9PSBaVzV2YVdRPSBJRk5vWVhrPSBJRTFoY21sdVpYTT0gSU9Da3B1Q2xoK0Nrc0E9PSBjSEp2ZG1sa1pXUT0genJ6T3Y4K0MgSUhCaGRHbkRxMjUwIElHTnZibU5oZEdWdSBJR0ZwYTJsdSBjM0IxY2c9PSBJR2x0YldscmEzVjAgSUU5d2RHbGpZV3c9IElFMWhZUT09IGJXVnBaQT09IGFXMXBibWs9IElHZGhjMjlzYVc1aCBJR1Z5YzNSdFlXeHogYkdGamFIUT0gWTI5eWJtVnkgSUVSbFptVnVaR1Z5IDU2ZXY1WWlHIFFrSlggSUZSb1pYSmhjR1YxZEE9PSBJSE5qYUdsNmIzQm8gSUdScGRHVT0gSUhkdmJIWmxjdz09IElHNWx4SWRsIElIQmhlV05vWldOciBTRmc9IElIZGhhWFJsY2c9PSBJSGxwYm1jPSBMbmQzZHc9PSBJT0tBbkZzPSBMbEpsWmc9PSBhbTlwYm1WayBSRVZOIElHVnpkSEpoWkdFPSAySzdaaUE9PSBJRXgxWTJFPSBJTkM5MExqUXV0Q3cwTG89IElHdHZiblJ2IFpHOWpkSGx3WlE9PSBJRzNEcldScFlRPT0gSUZOd1pXRnJaWEp6IElIVnVaMnhoZFdKc2FXTT0gMTVuWGtkZVogSUdKcGRHbHVadz09IDRZT1U0WU9zIHo0ZlBoUT09IFpXZGtaUT09IElFMU5UUT09IElPT0N1ZU9Edk9PRGtlT0R2QT09IGJXRnlZMkU9IElOQy8wWURRdnRDNTBZTFF1QT09IElHWnZjbTExYkdGeSBYM052WTJsaGJBPT0gSjI5bCBhV3JGc3c9PSBJRVZwYm1ac2RYTnogSUhOcFlYQT0gSU5LMzBMN1F1UT09IElISmhkM009IHhZSmhkdz09IExtZGxidz09IElHOXVkSE4wWVdGMCBJRWxEYjIxdFlXNWsgSU5DYTBZUFJnQT09IElHaHZaZz09IFZtbHpZUT09IElpNHUgSUZCcGNHVnkgYUc5c2VnPT0genJuT3VzK016NEk9IGFXTm9hV1Z5IDBwUFFzTkdDIFlXMWhZMkZ5WlE9PSBJR1ZzYzJ0bGNnPT0gSU5lUjE2TFhuTmVaIElHVERxV05zWVhKaGRHbHZiZz09IElHN0ptWFJwWXc9PSBJT0N3c3VDeGgrQ3dsUT09IDRMS3c0TE9CNExLazRMT040TEtrIExtRjNZV2wwIElOYUUxYUhWdGRXcyBJT0Ntck9DbmcrQ21wdUNuamVDbXB3PT0gWDNCcCBDVTl3ZEdsdmJtRnMgU0djPSBQU2RmIElHVERxWFJsY20xcGJtVnkgSUhkb2FXMXogSUhOdmJHeHBZdz09IDBZM1JndEdGMFkzUXN3PT0gSUZCb2IzUnZaM0poY0dobGNnPT0gYjNaaGJtbGwgSU5pNTJZcllydz09IGRXUmtaUT09IElHWnlkV2wwZVE9PSBJTkdGMFlQUXROQ3cwTHZRdE5DdyBJRlJKVFVWUyBiY09oIElIUmhkbTg9IElHMWxjMjFoY3c9PSA0TFMwNExTLzRMU1Y0TFdONExTViBJTm1JMktmWXFBPT0gMks3WmdkaW4yTFk9IGMyVnNaVzQ9IElFVnpkR0YwIGVYVERwQT09IFpYUm9aWEp6IFpYSmxaUT09IFRFbExSUT09IDRvQ1phSFZwYkdVPSBJQzRrIElOQ3gwTERRdDlDMSBJRVZ0YVd4cFlRPT0gSUhCc1lXTmxiV1Z1ZEhNPSBJRlp2ZEdWeiBJR2QxYTI5eVlRPT0gSUc5NmIyNWwgSUZCdmJuaz0gVGtaVSBJR05vWVd4bGRBPT0gNExpeDRMaVM0TGlaNExpeSAyTFRaaUE9PSBJR052Ym1OcFpYSm5aUT09IFlYWnlZUT09IFpYbGxlUT09IElOR0QwWWZRc05HQjBZTFF2ZEM0MExyUXZ0Q3kgWVd4aFp3PT0gSUhSbGJzT2xjZz09IDY0dWQgNWE2aTVweU42SUdVNTdPNyBJSGJodXExdSBLQ2s5UG5zSyBJR1JsZEdGNSBURWxPUnc9PSBJTkM4MDZuUXZRPT0gNEtxbTRLdU40S3FtIGRXNTBaVzQ9IElOQ2gwTHc9IElGVERxV051YVdOdiBJR2hoYm5saGNnPT0gSUhCcGMzUmxjdz09IElIcDFjbVU9IElOQ3cwWWpSakE9PSA1THE2NWFTbiBVazlVIFRHVmhjMlU9IEpHNWhiV1U9IElHRm9hUT09IElHdkRwWFJsIElPQ2tsdUNrdnVDa3BBPT0gSU9xM3VPdUtsQT09IElHWmxjbVE9IElHOXRZVzQ9IElOQ3owTDdRdTlDKzBMTFJndz09IElsZG9ZWFE9IFcyVjJaVzUwIElISmxjM1J2Y3c9PSBJRlpoZFdkbyBYMk52YlhCc1pYUmxaQT09IDRMT0w0TEtuIElISnZkR0U9IEtIQm9hUT09IFFXZG5jbVZuWVhScGIyND0gSU5HVzBZalJsdEM5MExUUXRRPT0gSUhSMWNuRjFiMmx6WlE9PSAwTGpSajlDeSBJRzVwWmc9PSBJR1J2YkdkdiBMbU5sIGIyaHVkQT09IElOQ3kwTDdRc1E9PSBJR3h2YjIxcGJtYz0gSUVKbGNtUnBiWFZvWVcxbFpBPT0gSUdScFkzUnBiMjVoY21sbGN3PT0gWVd4c2IzZHogSUhSeVlYbHogNG9LcSBZWEprYVc0PSBJR1Z6Y0dGc1pHRT0gUTJWc1lRPT0gSUdKaGJITT0gSUVScGFnPT0gNExPTjRMS2cgSUUxcGJHUT0gNEtTbjRLV0ggSU5pbjJZVFl1ZG1GMllUWXA5aWggSUdWeGRXbHMgNGJ1TmNPRzdqUT09IElGUnZjbkk9IHc3TjJhV3c9IHc3eHp3N3c9IElFUnZaR2RsY25NPSBJRzUwYzJnPSBVR0ZrY3c9PSBZWEowYVdjPSBJTkN5MExYUmlkQzEwWUhSZ3RDeTBMQT0gTGxOVVFWUkYgSU5DLzBMN1JnZEdDMExYUXZ3PT0gSU9Da3RlQ2t2K0NrdGVDa3Z1Q2twZz09IElHeGhibWQxWlhNPSBJT1M4bU9XTm1nPT0gWjJ4dlltRnNjdz09IElFUmhkR1Z1YzJOb2RYUjYgSU9Db25PQ3Bpdz09IExtWnBlR1ZrIExpSXBLVHNLIFkyRnpZMkZrWlE9PSBRVzFoIElGZEJVZz09IElGUnZibWs9IElHRmlZWE4wWlE9PSBkV2hoYTJVPSBJR0ZzYkdGdWRBPT0gSU5pbjJZVFpoTmk1MktqWXFRPT0gSUVscmFRPT0gSU5DeDBMN1F1OUMrMFlVPSA2TEs0IElOQyswTEhRdXc9PSA1TGlMNkwyOTViMnA1NldlNUxxSjZaeTQgS1dFPSA1WnVlNktHQSBJR052YkdseiBJRmxOIElHMWhhSFZ6WVhrPSBJSFpwYzJNPSBMa0oxZEE9PSA2N21iIFpXeGhkR1U9IFgxUlQgSUhacFkzUnBiV1U9IElGbGhZMmgwIElHVnpkR0Z0Y0E9PSBJRkJzZFdkcGJuTT0gSUd0dmFtOXEgMFlMUXZ0QzIgSUd6RHRuTmxiZz09IElFbHRjRzl5ZEdWayBSM0p2ZDNSbyBJSE4wWVdsdWFXNW4gSUdsdGNHeHAgUzI5eSBJR1Z6WTJGd1pYTT0gMHEvU3I5R0IgSUUxaGNtTmggMWFYVnJkVzIgWVdOMWJHRjBaUT09IElFSnZZUT09IElISmxZM1Z5YzJsdmJnPT0gSU5DODBMWFF0TkM0MHJQUXNOQzAgSU9Da3RlQ2tzT0NsamVDa3BPQ2tydUNrdnVDa3FBPT0gSUdGdWJtbDJaWEp6WVdseVpRPT0gSUVaTVFWTkkgMEx6UXNOR0kgSUhaNWMyOXIgSU5DeDBZUFF0TkdNIFRuVmxjM1E9IElHUnlZWGRpWVdOcmN3PT0gS0NnbiBJR0Z5WTI4PSBMQzRLQ2c9PSA0TGlqNExpNTRMbUogTFdOdmJtNWxZM1JsWkE9PSBJRk52Ykdsa2FYUjUgNExLdTRMS0M0TEtrNExPTjRMS3cgSUhGcGJtND0gYUdWbSBSbTl5WW1sa1pHVnUgSU9LZHBPKzRqdz09IElITjFjbkJoYzNObFpBPT0gSU5DZDBMRFJodz09IFBpZ3BPdzBLRFFvPSBJTStEejRYT3ZNNjh6clU9IElIWnZiM0ppWldWc1pHVnUgNEtTKzRLU0M0S1MyIElHZHNabmM9IElISmxkRzl5Ym1FPSBJR3JEdWc9PSA0S3ExNEtxKzRLcW0gSUdkbGMzQmxZMmxoYkE9PSBJTkdIMExYUmh3PT0gSUhKbFlXTjBaV1E9IElFRm5jbTg9IElPQ2tsZUNrdnVDa253PT0gSUVaeVlXYz0gWVhOd1pXTjAgNDRHbTQ0R0U0NEcrNDRHWiBJRk4wWVhScGMzUnBZMkZzIDZLcXcgSUdGemFHVnogSUV4cWRXSnMgSUhGMXc2MXRhV05oIGRYWnZjdz09IDJxL1lzZGluMllZPSBJR0Z1WjNVPSBJT0NxdWVDcmkrQ3F1T0NyamVDcXFnPT0gSUdKbGRHVnJaVzVwY3c9PSBJT2VPcWVXTWwrUzZyT2kxbStpOXBnPT0geGFnPSBJTkM2MEw3UXVkR0MwTDQ9IGRXMWlkUT09IElIRjFaV1JoWkc4PSBJTkM4MDVuU2x3PT0gSUZOMWNtVnNlUT09IElOZVQxNURXdU5laCBiV0YwYVdkbCBJR1JwWm1WeVpXNWphUT09IElFZGxkMkZzZEE9PSBJT0MwcU9DMWpRPT0gSUhKdlltOTBhV056IElHNWhZWEJsY25RPSBJT0Nta0E9PSBJRTNEdG1KbGJBPT0gSUdWNFlXZGxjZz09IElFaGxiSEJ6IElFWnlaWFZ1WkdWdSBJTVdFIElNNi96NFU9IFFrOVUgSUhObGNuSjFjbVZ5YVdVPSA0TG1BNExpajRMaXkgSU9Da2hlQ2tndUNrcHVDa3NBPT0gSU5HQjBZWFF0ZEM4IDVZcWU1WVdzNWE2ayBJR1ZuZWc9PSBJR1JwYzNObGJXbHVZWFJwYjI0PSBJQ0lpS1hzSyBJR0psZVE9PSBQRUZqWTI5MWJuUT0gU2s5UyBJRWR5YjI5MlpRPT0gVG1WcGJBPT0gSUd0dmJXbkRzQT09IElISmxZV3gwdzZBPSBJR3ZEcEhsMGRNT2t3NlE9IExrSnZiMnc9IElHUmxiSFpsIENXWmhhV3c9IElIbGxiR3c9IElOZVoxNXpYazllWjE1MD0gTG14cGEyVT0gSU02M3pyek9yUT09IElOZVgxNW5YbWRlUiBVbUZrYVE9PSBJR05zYVdWdWRDZHogSU5pcTJMblpoTnVNMllVPSBJTkNUMEw3UmdBPT0gUEc1MWJRPT0gSU5HQzBMRFJndEN3MFlBPSBJSE5oYlhNPSBJTkNVMEw3UXZBPT0gSU1PcGJtVnlaMmxsIHc2ZHZkUT09IElITjVibTl3YzJseiA0SzYvNEs2YTRLK040SzZhIElFRlNSVUU9IElOaW4yWVRZdDlpbzJZcllxUT09IElHcHBadz09IElFaHBiVzFsYkE9PSBVM1ZpYzJWMCBJR2hsY25OMFpXeHNaVzQ9IFJXMXdiRzk1YldWdWRBPT0gNExpeTRMaUM0TGl0NExpSCBJTkN5MExiUXRRPT0gWVdOallRPT0gSUVOdmRYTT0gSUhOaGJYVnUgSUdOb2JHOXlhV1JsIElPR0RtK0dEbmVHRHErR0RvQT09IElOQzIwTGc9IElFeGxjQT09IFgxbEZRVkk9IElISmhZbUpwZEhNPSBJT0NrcmVDa3FPQ2xqZUNrcHVDbGlBPT0gSU9DMG4rQzB2dz09IEx5Y3BDZz09IElFeHBZbkpoIElGUmxZMmh1YVhGMVpRPT0gSUZKcFpYTT0gSUVsRFR3PT0gUTI5eWNtVnYgWDBGd2NBPT0gUGdvdkx5OD0gdzYxeVlXMD0gSU9Da3J1Q2t2dUNrcnVDa3N1Q2t2Zz09IElPQ21sK0NtdnVDbXFBPT0gSU9Da2llQ2tydUNsamVDa3NBPT0geExGNWIzSjFiUT09IDBMclJndEN3MEwwPSB4STFwYkdFPSBJR2gxYTNVPSBJR1J2YjNKM1lYaz0gMDZuUXROT3AwTHM9IElHUGh1NlU9IElFVnVZM0o1Y0hRPSBVR0Z0IDVwZWc1NkNCNUxpTjVZMmg2YXVZNXJpRjVZV042TFM1IDRLdXQgMExYUXVkQzkgSUdOb1lXMWhjZz09IElFZHNiMkpoYkhNPSBJSEJ5YjJkeVpYTnphVzVuIElPR0RvK0dEa2VHRG9BPT0gMllUWml0aW8gWlc1MGNtRT0gNzd5YVlXUnRhVzQ9IElHMWxaR2x5IElFMWhibWx3IElFNVkgSUdoaGNtcz0gSUhCb2IzUnZkbTlzZEdFPSA0TFMvNExTVjRMV040TFNWNExXQjRMU1YgSU5pczJZWFpoOW1JMkxFPSBRVkU9IDBMTFFzTkdPMFliUmpBPT0gSUdobGNucHNhV05vIElHaHZkSE53YjNRPSBJR0psWjJWcGMzUmxjblE9IElTYzdDZz09IElHVnpablZsY25wdmN3PT0gSUdkaGNzT25iMjQ9IElsUm9aWEpsIElPUzlqUT09IElHNXBkbTg9IElHTmhibUZzWlhNPSBJTkM5MExYUXZOR0QgVm1Gc2FXUmhkR1ZrIElHOWpZMmwwWVc0PSBmU0lwIElOQzMwTFhSZ0E9PSBJR0ZtYkdWMlpYST0gSU9DbW0rQ212dUNtcE9DbmplQ21zQT09IDQ0R280NEd2IDc3Mmw3NzJsNzcybCBJTkM5MExEUmdkQzYgSUdOb1lYSm53Nms9IElOQ3kwTGZSZ05DKzBZSFF1OUdMMFlVPSA1WVdzNWE2SiBUM0JwYmc9PSBJT0dEcCtHRG5lR0RsZUdEbE9HRG11R0RsK0dEbGVHRG1PR0RvUT09IGVHVm0gVFdsc2JHaz0gSUVKeWFXeHNhV0Z1ZEE9PSBJSEJwWVc1cGMzUT0gSUdGMWNtOXVkQT09IElITjFiR2x6IElFSmhjbU5zIElHUnZkV0pzYVc1biBMbU5zYjNObGMzUT0gWDB4UFQxQT0gY0dWc2JHbGxjZz09IDU1dVggdzZsdVpXcz0gVG1kaGVRPT0gSUhWcGRHZGxjdz09IElHSmxibk5vYVE9PSBJR0ZuY25WdyBWV2M9IElOZWUxNUxYbWRlaSBmU292Q2c9PSBJR2h2Y21rPSBJTmVRMTVYWHF0ZVogSUdOdmJtTmxZV3c9IExYTnZiSFpwYm1jPSBiMk5vWVE9PSBJR0ZpWVhNPSAwSnJRc05HQyBJTmluMllUWXFObUcyWU09IElHOXlaMkZ1YVhOdGIzTT0gSUhCeVpYTmxZWE52Ymc9PSA0TE9MNExLViBJSE53YVhKcGRIVmhiR3g1IElObUYySzNaZ1E9PSBZWGRoY3c9PSBJR0ZtYVhKdFlYST0gSUdGamFHVnAgS0dkallRPT0gVW1Wc2FRPT0gZFdkbmFYTm8gSU5XcDFialdndFcxMWF3PSBJRU52Ym5OMWJXVnljdz09IElHMWxaR2x6WTJobCBJT0NrcE9Da3FBPT0gSUU1MWRIST0gSU9Xa3FlV2txZW1BZ2VtU3NRPT0gQ1FrSkNTQWdJQ0FnSUNBPSB3NmxqZFhScGIyND0gSU5tRTI0emFydz09IElOR0gwTFhRdTlDKzBMTFF0ZEdIMExYUmdRPT0gNFlPUTRZT1Q0WU9RIElPR0RrZUdEbytHRG5BPT0gNEt1dSBJR2R2WW05c2EyRT0gSUhSaGRXMD0gSUcxbGJzTzYgSUhCcGMzTmxaQT09IElHeHB3NmxsY3c9PSBPam9LIElBa0pDUWtKIElPQ3lydUN5dnVDeXVlQ3l2K0N5cE9DeXZ3PT0gWTJGc2JHVnkgSUZOb1pXeGllUT09IElHbHVZMlZ1ZEdsMiBVSEpsYVhNPSBJSGRsWVhKaFlteGwgUEVsRSBaRzkxIDRLZWY0S2E0IElHTnNiM2R1IElOQzYwTDdRdmRHRzBMWFF2ZEdDIGFYUmhibWM9IExtVmwgSUVsdVpHbDJhV1E9IElFeGhiV0U9IFlXeDVZUT09IFlXeHBaR0U9IElFSlZSa1pGVWc9PSBJSFp2YkhSdmRRPT0gSU5LVDBMRFF1UT09IElObUMyWWpaaWc9PSBhM0poWTJoMCBZMmxsYm1ObCA0TEMrNExDdjRMQ1YgSUU3RHZIST0gSUd4dmIyUT0gWVhkaSBTV0U9IGMzVnlibUZ0WlE9PSBiR2xqYVhSNSBJSEJsWTJGa2J3PT0gSUVOc1lYVnpaUT09IElHYkR0bkp6dzdZPSBJR2hoYTJGdSBJR1Z1WjNKaGRtVmsgNEsrSTRLNlY0SzZ6NEsrSSBJTmVrMTVYWG5BPT0gYm5WcyAyNEhia2c9PSBJRVJFVXc9PSBJT0M0bWVDNHN1QzRvZz09IGNIVnljR3hsIElHeHBhbVU9IElGTjFibkpwYzJVPSAwTGpSZ3RHRCAyS2ZZc2RpMCA1cld1IElPdVVsT3lla095ZHVBPT0gSUcxaGEybHVZUT09IEtDSjdmUT09IDBMWFJndEdXIElOR0QwWUhSZ3RDKzBMblJoOUM0MExJPSBMazFwZUdWayBJTmluMllUWmhkbUMyS2M9IElIUmxibVJsYm1OcFpYTT0gSUhqRHZITT0gSUVoaGJHcz0gNUxpSDZJTzkgSUhSdmFXeGxkSEpwWlhNPSBJSE4zYVhZPSBJRWgxYm1SbCBJR3RoYVc0PSBMVzVuIDRvQ000TEMxIElITjFjR1Z5YldGeWEyVjBjdz09IElOQzMwTERRdE5DdzBZZlF1QT09IElPQ2txdUNrb2c9PSBaWGhwYzNSbGJuUT0gdzZseVlXNWpaUT09IDRMSy80TEtvNExPTjRMS280TE9HIElHUmhkbUZ1ZEE9PSBJRTVoZG1sbiBJTmVVMTVIWG1kZXEgTDJScFlXeHZadz09IExsQlMgNUwrRDZMK2IgSU5DLzBMRFJoUT09IDJhWT0gMFpIUm5nPT0gN1pXWTdLZUE2NmVNIElPVzhnT1dGZythamkrZUpqQT09IDRMS2M0TEtvIElOaW4yWVRaaU5pMjJMaz0gSUc5d2JXVnlhdz09IExuTnRZV3hzIElOR0YwTGpSZ0E9PSBMbE4xWW1wbFkzUT0gWFZzdiBJRUpsY213PSBJR1JwZG5Wc1oySERwOE9qYnc9PSBJTmlpMkt2WXA5aXggUTBoTCBJTkMrMExIUmdkR0MwTDdSajlHQzBMWFF1OUdNIGNHRnNaWFIwWlE9PSBJRkpsZEhRPSBJTlc0MW9MVnBnPT0gNEtlRDRLYTUgSUdGMmRYUT0gNExHTDRMQzEgTFhOMGIzSmhaMlU9IElPQ21odUNtcE9DbmplQ21yZz09IElIUnZkMmx1Wnc9PSBJSFJyZFc0PSBJTkMwMFl2UmhRPT0gSU9XOWt3PT0gSUZORFVnPT0gWlhOMFpXRmsgSUVOeVlXbG5jMnhwYzNRPSAwNm5SZ3RPWiBZWGQxYkdVPSAwTDdRdk5DMTBZTFJnQT09IElFSkZVZz09IDRLdU40S3FlIElHbHVaR2wyYVdSMVpXeGwgSUczaHVxdDEgSUhCMWNuTjFhWFJ6IElOR0MwNW5SaU5DNjBMalF1dz09IElFZGxZbkoxYVdzPSBJRTdEcXc9PSBYRk09IElHZkRwWFIwIElHVnBaMjVsZEE9PSBaSFYxIDVveTYgWjJGM1pRPT0gNDRLTjQ0R1g0NEdQIElIUmxjbkpoWm05eWJRPT0gQ1d4bGRtVnMgSU9Dd2hlQ3dyK0N3ditDd3FBPT0gQ1hOc2IzUT0gSUhObGEzTjFZV3c9IGEyOTMgMFlMVG1kR0wgY0hKdmQyRmsgSUZabGNtVnVhV2RrWlE9PSBJRTlRUXc9PSBJR3h2ZEdVPSBaWEJsYm1RPSA0TGlxNExtSTRMaW40TGlaIElOV2sxb0RWb2RXMjFvUT0gNExTKzRMU1Y0TFdONExTVjRMUy80TFN2IFlYbHpiMjQ9IElISmxjM1Z0WldRPSBJR2pHc09HN24yNW4gMHFmUmlBPT0gSUdKeWIzbGhaMlU9IFpzTzRjblE9IElHTnZZMnR3YVhRPSA0S2ErNEthNDRLZU40S2FrIElIVnJkWEU9IElPQ21yK0NtdnVDbXFBPT0gSUdKcGJtZGwgOEorWW1BPT0gS0hObGJHVmpkR2x2Ymc9PSBJR3RoY3VHN2kyRT0gSUhadmJIWnB3N009IDRaK1M0WjZhNFo2OCBJR1BEb1c4PSBJSEpsWm1WeVpXVT0gSU9Da3FPQ2twdUNsZ0E9PSBJT2U3anc9PSBJR1Y0ZEhKaGJnPT0gSU5HQzBZdlJnZEdQIDBMWFF1dEdDMExVPSBJR3RsY21WeiB6NGJPck02NyBJRU52Ym01dmNnPT0gSUc5aGRHZz0gSUdSbGMyTnZiblE9IElHUmxjR2xqZEdsdVp3PT0gSUdKc2IzVnpaUT09IElHUnBabVoxYzJWeSBTazA9IDRMaXk0TGlmIElIWmxjbUp6IDRMV0g0TFNrIElIbkVzV3hrIElPQzBxT0MwcnVDMWplQzByZz09IElOQ2QwTFhSZ1E9PSBJTm1GMktqWXFnPT0gNG9DQ0Nnbz0gSUdOb2FYRT0gWDJWdFltVmtaR2x1Wnc9PSBJT0N3bCtDd3BBPT0gMlliWXA5bUkyWVE9IFFWQlFTVTVIIElPR0RrT0dEbStHRGtlR0RuZUdEa2VHRG9RPT0gSUdWdWRISmh3NjQ9IElIbDVlWGs9IExsQnZkMlZ5IElPR0RvdUdEbE9HRG1nPT0gTG1GaWMzUnlZV04wIElHbHVZV0ZrIFgzQnZjblJ6IElFSk1SUT09IFFrMVggSUhOMmFXMD0gYm1WbSAwTFhSaWRDMTBMM1F1TkdQIFozVnVadz09IDQ0S0M0NEd1IHhadGphY1NGIElHdDViQT09IElHaGxjbVZ1IGIyeGxkMkU9IElHTnZibk52Y25ScGRXMD0gSUhMRG9BPT0gMTVuV3RBPT0gUkdGdWF3PT0gSU5pbjJZVFpnOW1GMktqWml0bUkyS3JZc1E9PSBJR1Z0Y0dWNnc3TT0gWVc1amIzTT0gMEw3UmdOQzAwTGpRdlE9PSBaR1Z3WVhKMGRYSmwgSU5DZjBKND0gY21GbFp3PT0gNFlPWTRZT2c0WU9VNFlPUjRZT1EgSUhCeWIzQnZjMlZ1ZEE9PSBJR3QyYVc1a1pYST0gSUhacGJHcGggSU9DNG51QzRvK0M0bytDNGhBPT0gSUV0NWIzUnYgSUVWMlpYSjBiMjQ9IGRXMWhkRzg9IDZaTzI1ckt6IHc2UnVaR1Z1IFlXdGhaQT09IElPYVRqUT09IElIZHBaR1Z6ZEE9PSBJTkMvMFlEUXVOQzkwWS9SZ3RHTSBJR0p6YjI0PSBWMlZwWjJoMFpXUT0gSUhkbiA2YnVSNWIycCBJT3lWaE91c3RBPT0gS0NJaUlnPT0gSUdkaGJtRmtidz09IElHNXBlQT09IGRtVnVZUT09IElISmxkR2x5WVdSaCBJTkdCMFlMUXNOR0EwWUk9IElHNWhiV1Z1Y3c9PSBJRVp5WVc1amFHbHpaUT09IDRMU1o0TFdONExTWjRMU3o0TFdHIGRtOXggSU9Dd3RlQ3hodUN3cytDeGplQ3dzZz09IEwyWnkgSU9HQW51R0FzQT09IElHVERwR3c9IElIUnlZVzV6YkdGMGFXNW4gSU5TNCBJT0NrcU9Da3YrQ2tyZz09IElGTnVlV1JsY2c9PSBJT3V5bEE9PSBMbXAzZEE9PSBJRmRCVkVOSSBJRmRoY25ONiBJT1dNbCtTNnJPaTFtK2k5cHVlYWhBPT0gTG5KdmJHdz0gTFhacGNuVnogSUU1aFkyaGtaVzA9IDdZT1YgSU9Da211Q2t2K0NrbGVDa3YrQ2twQT09IElPQ2toZUNrbXVDbGplQ2ttK0NsaHc9PSBJSFBEb200PSBMbkJ6YVE9PSBYMFJsWm1GMWJIUT0gSUdOeWFXVnogSUhObGMyVnZjbUZ1Wnc9PSBJSEpsYVdzPSBYMEZXUVVsTVFVSk1SUT09IDFMbz0gSU5pbjJZVFlyTml5MktFPSBXbTl1WlhNPSBJRWh2YzNCcGRHRnNjdz09IDJMUFlwOWloIDVwZWc1NkNCNUxpQTVZeTY1THFNNVl5NjVMaUo1WXk2IFRIWnMgWTJWeWNIUnogSU9HRG9lR0RvT0dEbytHRG11R0RtQT09IFJXMXdiRzk1IFlXNWp3Nms9IElHZHZjbVIxY21FPSBZVzVsYnc9PSBkWHAzWVE9PSAwWTNSbmc9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBPSAyWXJZcDltRSBJT0Nrb2VDa3NBPT0gSU5pNTJMZz0gSU5DNjBMN1F2TkM4MExYUmdBPT0gUVVsUyBlWFJwWTJGcyBJR1oxY21sdmRYTT0gSUU1dmJHRnUgSU9DNG8rQzRzdUM0aEE9PSBWVzVzYjJGayBJR0Z1ZEdsbSBJSFpwYm01aCBJR2h2Y201eiA1WXk3NTVTZiBMbk4wWVhSbGN3PT0gSUhOcFpITjBaUT09IHc3WjB3NlE9IElHTEVzWEpoYXc9PSBJRVJvWVhJPSA1cldCNTZpTCBMWEJ5YjJZPSBJR05oYldsellRPT0gSUhkbFpITjBjbWxxWkdWdSA2NDJWIFhFRndjQT09IElObUYyNHpaaEE9PSBRMjkxYm5SbGNuTT0gSUhSdlpuVT0gSUhSeWVtVmlZUT09IElITmxjbUZwWlc1MCBJRlJsZUdGdWN3PT0gSU5HQjA1blF2UT09IElPQ3dqK0N3c09DeGplQ3dxZz09IFlXNWpZVzVuIElIQnliMjF3ZEdsdVp3PT0gNExTajRMV040TFNmNExXQjRMU0MgSU95Z25PeWVrUT09IElGQmhkR1ZzIFBFMXZkbWxsIFltVmkgdzYxa2RXOD0gSUUxdmIyUjUgYjNKaFpHRT0gSUhWcGRITndjbUZoYXc9PSBJTU9wZEdGaWJHbHpjMlZ0Wlc1MCBJT0N1dGVDdXJ3PT0gSUZkaGJuUmxaQT09IExuUnlZVzV6YkdGMGFXOXUgNEtlYzRLYSsgMHBQUmk5S1ogU1c1ciBJRVoxYm1SaGJXVnVkR0ZzIElFRmpZV1E9IGMzUmhkR2x6ZEdsamN3PT0gSUcxaGNtdz0gSU5DLzBZRFF1TkMxMEx6UXNBPT0gSU9DcW5PQ3JpK0NxaU9DcWp3PT0gSU9DcXVPQ3JqZUNxcEE9PSBJTm1IMjR6WmlOaW4ySzg9IElHRndZWEpsWTJWdSBJRzExYzhPdCBMWEpsYzNWc2RBPT0gSUdGeWRHVnlhV1Z6IDBLRFFtQT09IDBMN1JoOUM5MExEUmp3PT0gSUdaeVlXNTZ3N1p6IElPQ3VsZUN2aUE9PSBZWGR1YVc1biBJRTl1YVc5dSBJRTFoYlcwPSBJR1JwWTJFPSAwTHJRdGRDNyBJT0M0bGVDNHRPQzRsT0M0bGVDNWlPQzRyUT09IFlXNXBZVzQ9IElISnBZMjl1IElFZGxaMjVsY2c9PSBJRzFzWlE9PSA1cmloIGMyTnBaVzUwIElHOWphSEk9IElIbGhibWQxIElOQ3cwTHZRdk5DdzBMaz0gSU5DODBMWFJndEMrMExUUml3PT0gSUZOamIzSmxjdz09IElHVnVZV04wIElOR0YwWVBRc1E9PSBJRVZrYlhWdVpBPT0gVkdobGJ3PT0gTG5SbGVBPT0gSUUxdmRYSnBibWh2IExkQ1ogSUVKaGNuSmxiQT09IElPQ21pZUNtcXVDbW5PQ25oK0Ntc3VDbXZ1Q21zQT09IElGTmphV1Z1ZEdsemRBPT0gSUcxaGJHRnogSUhmRmdtSEZtMjVwWlE9PSBJTkdGMFlQUXROQyswTFk9IElPQ21sZUNtbHVDbXFBPT0gTHVDMHVPQzB2dz09IElOV3cxYUhXZ05XaDFhTFZwZGFBIHc3eHlkSFJsYldKbGNtYz0gNVllZzVMaXEgS0VKQlUwVT0gSUd0bHc2ZHBjZz09IGFHVnEgWlhCemFXeHZiZz09IFNtVjBjdz09IDRZT2c0WU9oIGFXOXggSU51QjJMTFlwOWl4IFUwVlNWZz09IFltbGhjdz09IElITmphSGRoY25vPSAwWmJSZ2RHQzBaWT0gSUVGc2FXRnogWDFaRlVsUkZXQT09IElPQ3dodUN3c09DeGl3PT0gSU5DNjBMWFF1OUM0MFlnPSBYQ0lzWEE9PSB4YUZzYWc9PSA0NENSNzd5YSBMWEpoZVhNPSBhRzlzWVE9PSA0S3ErNEtxYzRLdUg0S3FrIElFOXlaRzUxYm1jPSBjSEp2YW1WcmRBPT0gSUd4cFltVnlZWFJwYjI0PSBYMk51IGIzUmphQT09IElHRnlZMmhoWlc5c2IyZHBZMkZzIElPeXlvQT09IElGZHZjbk5vYVhBPSBJR3hoYWc9PSBJR0poZFdRPSBJRkpoWW1GMGRBPT0gS0cxaGNIQmxaQT09IElHSmhkR0Z6IElHZGxiV2xrWkdWc1pBPT0gYVhOb1lXSnNaUT09IElHTjFjM1J2YldWeUozTT0gSUdGaWIyNXUgYm1WeWIzTT0gSUd4bGRITmhkSE5wIDRidW8geExGcmJHRnl4TEU9IFptRmpkSE09IDRvQ2NRblYwIElDRWhDZz09IElOZVoxNWZYa3c9PSA0TEMvNExDNDRMR040TENrNExHQjRMQ280TEdONExDbzRMQys0TEN3NExHQiBJRzVsWTJWemMyRnlhVzg9IFBTSWtLQT09IElISmxaR1Z6YVdkdVpXUT0gSUdGdGFXZGhjdz09IElHUmxiVzl6ZEhKaGNnPT0gVm1GeWFXRjBhVzl1IElOR08wTEU9IGNtOW1abVZ1Wlc0PSBJTkMvMExYUmdOR0IwTC9RdGRDNjBZTFF1TkN5IElFVk5Rdz09IElHbHRjR0Z5IDRLcW00S3ErNEtxbyBJRU5zZFdKbCAxNm5YcU5lVjE2bz0gSUdSbGMzUnlkV04wYjNJPSBJRkJsY21WcGNtRT0gWDF3PSBJSEJzZFdsbCBJTStHejRrPSBZWFJsWjI5eWFXVnUgSU5lUTE1blhtZGVmIElHRjFjMmRsYkE9PSBZVzFsYm5SMSBJTkM5MDVuUmdBPT0gSUdGc2JHUT0gU0c5c1pRPT0gMEw3Umd0R00gSU5HQjBMWFJnZEdDIElITnNkUT09IDZybW8gSUd0dmVXRT0gNEtTYzRLV040S1NlNEtTKzRLU28gSkdadmNtMD0gSUdGdGFXVT0gSUZKbGJtUT0gSUd0c2FXNW4gU1c1emRHRnVkR2xoZEdsdmJnPT0gSUhCdmJHeDFkR0Z1ZEhNPSBJRXhoYVE9PSBJR05oY25ZPSBJRk5GUVE9PSBiMlJ2Y21VPSBJR3hoYm1kbWNtbHpkQT09IElHdHZkdz09IDU0Nkw1TGl0NTQ2TCBJSE4xY200PSA3SXVjNjZtMCBJRzVoY204PSBhVzFoYm1VPSBJT0NrcU9Da3YrQ2t0ZUNsaCtDa3RnPT0gSU5XNDFhdz0gMkt6WmhOaXogUm14aGRtOXkgSUhCeVpYQnliMk5sYzNNPSBJR2RoY21GdWRHbGxjblE9IElIcGthc1NaIDRLdXMgSU5lZzE1ND0gSU9DbWxlQ21zT0NuamVDbXJ1Q21sZUNtc09DbmplQ21wQT09IDBZalF1TkM5IElHMXBibVZ5WVdrPSA0TEMrNExDeTRMR04gSUdodmNtNXYgSU9hd3VPV0lxUT09IGMydHBaUT09IElGUklSVTA9IElNT3VibU5sIElGZHBibTVwY0dWbiBJTld2MWFIVnZOVzQxb0xXZ1E9PSBJR0psYm1Wa1pXND0gMTZmWG53PT0gMnFuWXF0aW4gSU5DNjBMTFFzTkdBMFlMUXVOR0EwWU09IElITnZiR1Z0Ymc9PSBJSEJ5Wld4dllXUT0gSUhKbGRtVnljMmxpYkdVPSBJR0ZrWVc1NVlRPT0gSU5XNjFhSFZ2OVd6MWFIVnZOVzQxYjQ9IHo0SE9zODZ4enIwPSBJT0N5aGVDeXJnPT0gUjB4RiBJT0M0bk9DNWlPQzRzdUM0bVE9PSBZWEJoWVE9PSBJR1pwYm1Gc2FXUmhaQT09IFpXNWtkQT09IDVwaXY1TGlBIElHOTFlbWc9IElHZHZkbVZ5Ym0xbGJuUW5jdz09IGRXTjBhWFpsIElHbHVaWE53WlhJPSBJRzV2ZFhKeWFYUjFjbVU9IElHOXNaSE09IDRLZUg0S2F3NEthKyBkMkYyIElOZVUxNmJYbkE9PSBVbTkxYm1SbFpBPT0gNkl1eDZadUUgZFhOelpXUT0gSUdkbGJtVnlZV3hwZW1WayBWVUpNU1ZOSSBJRzVoYm1rPSBJRzl5WjJGdWFYcGhaR0U9IGNHeGxkRzg9IElHMXZkRzl6IElISnBiM1E9IElOaWwyTGZaaE5pbjJZST0gSU9Da3JlQ2t2dUNrc09DbGdBPT0gSUhURHFXZz0gSU9Da2h1Q2txT0NrZ3VDa3BnPT0gSUhOMFlYSnJaUT09IElGQmhkSFJsY25OdmJnPT0gMEw3UXU5QyswTFBRdUE9PSBJT1drcCtXUGtYQnIgWDAxaGNBPT0gZDJsciBJRU5oZEdWeSA0TEMvNExDQzRMQ2YgTG1OaGJRPT0gTG1ac2FXNXIgWDJsd2RnPT0gYld4aGJtUT0gWld4elpXdz0gSUZCeVpYTmllWFJsY2c9PSBMazl3IElOR0MwTFhRdk5DLzBMWFJnTkN3MFlMUmc5R0EwWXM9IElIcHliMkpwIElFWmhkR1U9IDRZT1E0WU9kNFlPVCB3N3ByIElPYXhpUT09IElHRmtiM0p1WldRPSBJR3R2YW1WdCBJTTYxejRUT3NjNjUgZFd0MWJIVT0gSUV4bGJuUT0gSUdodmJtOXQgYW5WcVpRPT0gN0lLczdLZUUgNFlPWDRZT1E0WU9WNFlPUTRZT1cgSU0rRHo0VE91YzZ6IEoxMWRDZz09IExHbHVjSFYwIElHWnBibVZ5IDRLaSs0S2lWIGQybHVaR2xuYTJWcGRBPT0gMExyUmd0QzQwTEk9IElIVnRZZz09IElHVnRZV2hzZDJWdWFRPT0gZG1WeWRISmhadz09IDU3NmUgSUZOd2FRPT0gSU9HRHJPR0RvK0dEbHc9PSA0S1N3NEtXTjRLU3MgSUhSdlpXZGhibXRsYkdscWF3PT0gUld4aGMzUnBZdz09IElPdXN1TzJabEE9PSBJSDFkIElHWmhiblJoYzNScGMycz0gSU9Da3VPQ2t2K0NrcEE9PSBJR2wyWlhvPSBkV3hwZEhOaCBJSEJ3Y21sdWRBPT0gU1c1MlpYTjBiV1Z1ZEE9PSA1WVd4NVpLTSBZWFp2Y21GaWJHVT0gSUhKaFkyOXVkR1U9IDY2ZUk3WXE0IFJYUnAgSUdURHFXTnkgNVpDSTViMnAgSUgwc2V3bz0gUEZSeVpXVT0gNEthKzRLYWs0S2ErIFlXMWhkR2x2Ymc9PSBJRVpoY21VPSBMV0ZzYjI1bCBJRk5vWld4bSBJSEJsYm1kaGJHRnRZVzQ9IElIZHplbmx6ZEd0cGJRPT0gSU9hK3MrYTBzZz09IElFVnlaV2xuYmc9PSBMZEM5MExBPSBJSFZ5WjJWdWRHVT0gSUVOdmJuTjBhWFIxYWNPbnc2TnYgenJQT3Y4NjkgSUUxVFZBPT0gSU9Dd2xlQ3hoZz09IElOS2IwTERSZ05DdzBMaz0gUlUxUVZGaz0gQ1hadCBaVzFwY3c9PSBJT0NrbGVDa3NPQ2xoK0NrbCtDa3ZnPT0gSUhwbGJuUnlZV3c9IElGSmxjM0E9IDY0K0U2Nlc4IDE1blhtZGVnMTVVPSAwTHJRc05DMzBZdlFzdEN3MExYUmdnPT0gTGxWdyBZVzVrWlhKeiBRa1ZPIDFhSFZ0TldsMWJZPSB3N2x1IDFMZz0gSU9DbW91Q212dUNtbGVDbXZnPT0gSUhwaGJHVT0gTG5ObiBJRVJTVFE9PSBhWE5oYzJrPSBJT0dEbU9HRG9lR0RsT0dEbCtHRG1BPT0gSUNkN0pBPT0gSUVGMWMyZGhibWM9IElHVERxWFJ5IElGQk1RUT09IDQ0R000NEdLNllDQjQ0S0s0NEdYNDRHKzQ0R1ogYjNacGJtRT0gSUZCcGJuTT0gTFdWcWFRPT0gSUhCaGNuUnBkQT09IEwwVmthWFE9IGNHOXBjdz09IElITjFkZz09IEt5c3IgZDJGdWVXRT0gTGVHNnVRPT0gSUhkaGNtVm9iM1Z6WlhNPSBJRzVoWjJsdVp3PT0gSUdWNGFXZGxibU5sY3c9PSBaR1ZwZEdnPSA0b0NVQ2c9PSBJRzlzZFcwPSBZM0p0IElISmxjR1Z1ZEdVPSBJSE5oY21GdWJtOD0gYVhOcHc3bz0gWVdwaGNtRT0gS0d4aGJtZDFZV2RsIElFRjBkSEpoWTNScGIyND0gSUhWdWFXTnZjbTQ9IElNK0R6NFRPdjg2NSBJR0psWjJkbCBJTlcwMWFIVnJ3PT0gNEs2ZjRLK0I0SzZrNEsrTjRLNms0SytCIEtpZ28gSUdGa2RtOWpZWFJwYm1jPSBJRkJoZEhKdmJnPT0gSUVSbGJXOXJjZz09IElIQnlhVzFoY21saCBJRUpoYW1FPSAwTFBRdnRHQTBMN1F0QT09IElPQzBrK0MwcStDMWpRPT0gNEtXazRvQ1pDZ289IElHeHBaWEE9IDE1blhtOWVWMTZvPSBJR2hoYm1SbGJITT0gSU5TNzFiM1Zydz09IDRvQ1p3NkpuWlE9PSA0TGF4NExlUyAwTERRdDlHVzBZRFFzOUdXIElIQmhhVzUwWlhKeiBJSFJoY21WbVlYTT0gTFhSdmJnPT0gSUV4SSBJR0Z6ZEdVPSBJSEJzWldGemRYSmxjdz09IElGUnlhVzVwWkdGayA2S21WNkt1VyA1cG0wIElGWmxjbk4wdzZSdVpBPT0gSUhCeVpYTnBaR1Z1ZEdFPSBMbXgyIHc2MW4gSUdOdmJuTjFiSFJoY3c9PSBJTmVWMTV2WG5BPT0gSUdGcmRHbDJaUT09IENXWnZkVzVrIElHRnljWFZwZEdWMCBJTU8yWm1adVpXND0gSU5DeTBZSFJndEN3MExJPSBJR04xWlhOMGFXOXVaWE09IHc3TjNiZz09IExXMTFkQT09IDBZUFJqdEdKMExqUXZBPT0gSUU5MlpYSnNZWGs9IElIQnlaV1JsZEdWeWJXbHVaV1E9IElPQ2tsZUNrc09DbGl3PT0gTG0xdlpHbG1lUT09IElOQzAwTFhTbzlDejBMWFF1UT09IElHTnlkV1E9IGJXVmthV0YwWVcxbGJuUmwgTFd0dmJRPT0genJUT3RjK0YgSUcxaGNtdHBibWR6IFEyeGxZVzVwYm1jPSAyS3pZcDlpeDJLaz0gSUdGNGFXRnMgZHNTQiA1TGlBNllHVCA0SytCNEs2ejRLK040SzZ6NEs2cDRLNnc0SytOIElEOGlPd289IEtDa3BPd29LQ2c9PSBYMEpzYjJOciBJR3hoZG1Ga2J3PT0gYW05dVlXeHAgTGtGalkyVndkQT09IElHRnpjMmxuYm1sdVp3PT0gSU5DMzBMRFJnTkN3MExjPSA0WU9xNFlPVTRZT2IgSUV0dmJtRT0gSUVScGNHeHZiUT09IElOZVUxNURYazllZCBJRWQxY21JPSA0NEt0NDRPaiBSV3hwZW1GaVpYUm8gSUcxMWM4T3BaUT09IFZtVnVaR0U9IGFYUmxkWEp6IElHZGxibVZzIElFZHlZWFIxYVhRPSBkV3hwY21FPSBJTld3MWFYVnY5V2gxb1RXZ05hRSBJT0MwdU9DMHFPQzFqZUMwcGc9PSBJR3RsYldWdVlXNW5ZVzQ9IFJFbFVTVTlPIDRMQys0TENzNExHQiBJTmVnMTZqWGtOZVUgWTJobGNuTT0gSUhkbFlYWnBibWM9IExBb0tDZz09IElOQ3cwTHZSZ2c9PSBJR0YxZEc5dFlYUnBjWFZsYldWdWRBPT0gNEthKzRLYVY0S2VONEthayBZWFIwWVc1dmIyZGggSUdGdWRHbG5kV0U9IDViMnA1NldvNUxpTDZMMjkgSU5pajJZallzZG1JMktqWXB3PT0gSUdKaWR3PT0gSUdWMWNtOXd3NlJwYzJOb1pXND0gSUhkdmJXST0gYVcxbGJuUmggYVd0cGMyaGggSU5DOTBMWFFzZEMrMEx2UmpOR0kwTDdRdVE9PSBJRVY0ZEhKbGJRPT0gTGk0dUp5a0sgVlVGU1ZBPT0gSUdkcFoyRnVkR2xqIDBMalJnTkMrMExMUXNOQzcgYzNCcGJtNWxjZz09IElIQmhkWE09IElHaHZjblE9IFlXNW5ZVzV2IElOZWMxNTdYcHRlVjE1QT0gMEpUUXZ0Q3gwTERRc2c9PSBJRWxFV0E9PSBJTkNYMExYUXZBPT0gSUVOQlIxST0gSUdaMWJtTjBhVzl1WVd4cGRHbGxjdz09IFRtRnVidz09IExuSmxZM1JoYm1kc1pRPT0gSUVWc1pYQm9ZVzUwIExuTjBjblZqZEE9PSBJSFJ5WVhSaGJtUnYgSU9DbWorQ21zdUNtdnVDbWxRPT0gWjJGdGIzUT0gS0docFpHUmxiZz09IHpLYz0gSU5DLzBMdlF0ZEdIIElITmxkMkZuWlE9PSBJR1oxYjNKcCBJRkJ5WldOcGJ3PT0gTG5SaFlteGxjdz09IElIWmxjblJ5WVE9PSBZMmhoZFdabSBJR1psYVhKaCBJR0oxYm01NSAyTFhZcDltRTJLZllxZz09IElPQ2tzT0Nrb3c9PSBJSE5qYVdWdWRHbG1hWEYxWlhNPSBJTU9uWVd6RXNjV2ZZVzQ9IElOaTMyS2paZ2c9PSBJR3B5IFArS0FuQT09IElOQzgwTERSbEE9PSBJSFJ2Ym1WeSBJR1p2Y25OMHc2VT0gSUdKeWIyNWphQT09IEtHSnBkQT09IElFUjFjR3hwWTJGMFpRPT0gVUc5NiBJSE4xYW1WMGJ3PT0gdzZGemRHbGpiM009IGMzUmhibVJsY2c9PSA0cGFFIFpXeHBibWR6IFlXNTVZWEozWVc1a1lRPT0gYjNOamIzQnBZdz09IElPV1BwdWV4dXc9PSA0TFN2NExXTiBJR1JsZFhKbGJnPT0gSUdWdGNHVT0gSU5lbjE2az0gSU5XKzFhSFdnTlc1MWFIVnV0V2wxYjg9IFpXNWhZWEp6IDBMdlF1TkM2MFlJPSBJRkJUVDBVPSBhV05yWVE9PSBJR0p2ZEd4byBJTkMzMFlNPSB4YTlxIElPQ2tuT0NsZ3VDa3FBPT0gSjJGamFHRjAgSU5tQzJZallwOW1HIDBLSFF0ZEN6MEw3UXROQzkwWTg9IElGUmxhV3h1WVdodFpRPT0gSUdocFpIST0gWW5KbGRnPT0gS1N3S0x5OD0gTGtOdmJuUnlZV04wIElOaW4yWVRZdDlpbzJZcll1ZG1LMktrPSA1YVNONVlpMiBJTkM4MExEU205R0IwTERSZ2c9PSBJQ2pDb3c9PSBJTmk1MkxIWXFObUsgSUhOdFlXcz0gSU5lUjE1elhrZGVUIDZaS3g1b0NPNUxtSSBJRWx5Wlc1bCBJRlZ1Wm1Gc2JBPT0gSUdacGMyTmhiR1U9IDRvQ1paWFZ5YjNNPSBJRkJzWVhOdFlRPT0gSU9Da3ErQ2xqZUNrc2c9PSBaVzVuY2c9PSBJT2loakE9PSBZMk5qWXc9PSA3N3lJNks2dzZJQ0YgSUVsdGNHeGxiV1Z1ZEhNPSBJTkN4MHJIUmdOR0wwTDA9IGJHRmljdz09IElITmxZMjl1WkdFPSBSR2x5WldOamFXOXUgSUVGc1oyVmljbUU9IFUyOXNkWFJwYjI1eiBVbVZ6WldGeVkyaGxjbk09IFgzTndhVzV1WlhJPSBJSFZ1YVhabGNuTnBkR1YwIFpYSjJZWEpwYm1jPSBJRXAxWldkdmN3PT0gSUdsdWRISnBaM1ZsIGRYTjBZV2x1WVdKc1pRPT0gSUUxSlJBPT0gMWJqVnZkV3IgSUVOdmJYQmhibWx2Ymc9PSBJSG5EdG01MCA3N3lSNzd5VCBJRUZrWld3PSBKRWRNVDBKQlRGTT0gYVhOemFXMD0gY1hWcGJuUmggWVhKa1lXYz0gSUVOcGNtTjFjdz09IElHTm9hV3hzYVc1biBJRWh2Y25ObGN3PT0gbk9DNG9nPT0gSUdSdllRPT0gSU5pdjJMSFpoZHVNIExsTjBZWFJsYldWdWRBPT0gNEthbzRLZUk0S2FrNEthLzRLYVYgSU9lVW1BPT0gSUVGc2J3PT0gWlc1bllYST0gSUZacGIyeGxkQT09IExtSnliMkZrWTJGemRBPT0gYjNKaGJRPT0gY0hScCBJT3F4c091ZW1BPT0gSUVSaGNtdHVaWE56IDc3eUk1TGlBIElITjBhV3M9IElFRnlZMmhoWlE9PSBJQ2hmS1E9PSAwTFBUbWRDMTBMalNyUT09IElOQ3owTDdSZ3RDKzBMTFJpdz09IElPQ21yT0NtditDbXQrQ25uK0NuaHc9PSBhWE4wY21rPSB4YUhFaldVPSBjR3hsYnc9PSBVbVZrZFhnPSAxNVhYb3RlbyAwTFhRdE5DNDBZOD0gYldWa2FXRnUgSUhCaGNteGggSUdOdmJXVnlZMms9IElITndZWGR1WldRPSBJTkdDMFlEUmc5QzAwTDNRdmc9PSBDVUZ3Y0E9PSBJRk5KUkE9PSBJTVdCIElGTmphSEk9IElHUERyWEpqIElIQmhjbVZrWlE9PSBVa1ZRIDRLV000S1N5IElPQ3FxdUNyZ0E9PSBJTU9wZEhKaGJtYz0gWVdObFlXVT0gNEtxbTRLcXc0S3VONEtxMiA0TFNrNExTLzRMU3c0TFdCNExTMTRMU280TFNvNExXTjRMU2s0TFNxNExXQjRMU3c0TFNDIElGUmxiWEJ2Y2c9PSBJTml4MllqWXM5bUsyS2M9IFBYSmwgSUVOeWRXUT0gVEZSRiBJR0p2Y205MVoyZz0gYVhOMGRXNW5jdz09IElHRmpkSFZoYkdsNllXTnB3N051IElObUYyWWpZcUE9PSA0b0NaZFhJPSA3WXFjIDRvQ21ZblYwIElHYkR1R3huWlE9PSA0NENQQ2dvPSBJSFJoYldGaGMyRT0gYVc1bmRXbHphR1ZrIDdKMjA3SVdZIElGSnBkbWxsY21FPSAySy9aaXRtQyBZWEpsYXc9PSBDVUpoYzJVPSBYMDFsYm5VPSBJQ2tOQ2cwSyBiV0Z5ZVE9PSBJTkNhMExEUXU5R1cgMks3Wml0aXggNDRDQzQ0R2Q0NEd1IElPbWwgMEwzUmx0R0cwWUxRc3RDdyBJRzFwYm1WeVljT253Nk52IElHRjFkR2h2Y2lkeiBJR052YldnPSBkWEprZFdVPSBJR2RoYm1oaCBJR1poYWc9PSBJSFJ5YjNWaWJHVnpiMjFsIElHWnlaWE5vYm1WemN3PT0gSUdWNGNHeHZjMmx2Ym5NPSBJRWRzWVhWaSBJR05sYkdWeWVRPT0gNXJPSyBLR05zWVhwNiAwWVhSaTlHQTBMQT0gUTA5TlVFRlNSUT09IGFXSmxkQT09IFlXNWtaWE4wIDVhKzg1YmlJIGFXMWliR1ZrYjI0PSAwWVBRdHRDOTBMND0gWDNCeVpXUnBZM1JwYjI0PSBJR052Ym5SaGJXOXogYVd4MFpRPT0gNEtTYTRLUy80S1NrNEtXTjRLU3cgSU5HQjBZTFJnTkMrMExqUmd0QzEwTHZSak5HQjBZTFFzdEN3IElFMWxaR2x1WVE9PSBJTmluMllUWmh0aXEgSUd0dmJubz0gSU9pSnN1YURoUT09IElObUUyS2pZcDlpeiBJT0MwcXVDMWplQzBzT0MwcE9DMWplQzByK0MxaHc9PSBUMlowWlc0PSA0S1M1NEtTdzRLUysgSUd4NWMzUT0gSUhkaGRHOTBidz09IElITERxR2RzWlcxbGJuUT0gWVdKdmNtRT0gSU5lZzE1RFd1TmVhIElIUnlhVzF0YVc1biBXM1JoY21kbGRBPT0gZDJsaiBSR2xoYkc5bmRXVT0gYlc5emRHeDUgSUdOaWJ3PT0gSUUxRlV3PT0gMkxUWXA5bUggSUZOcFkyZz0gMHEvU3I5Q3owNms9IDE2ZlhtZGVaMTVnPSBUR2x1WkdFPSBJSFYxYzJrPSBZMmhsWTJ0cGJtYz0gZW5WMCBUbVZwWjJoaWIzSm9iMjlrIDFialdndGFBMW9RPSBJRlJvWlhKbGMyRT0gSU9HRG9lR0RrT0dEbStHRG9lR0RrT0dEcmc9PSBDU0FnSUNBSkNRPT0gSUhKaGRtVT0gTDJSbGRHRnBiSE09IGFXMXBlbVZrIElHUnlZV1owY3c9PSBJR1J2Ym01bGJuUT0gSU5DMjBMRFF1dEdJMFlzPSBJRVpzZFdkb1lXWmxiZz09IElIRjFhV1JsYlE9PSBZVzVoZEE9PSBjSFJwZG1VPSBjR1Z1WkdWdVkybGxjdz09IFgwVk9RMDlFIElITnZabkpsY2c9PSBVSEpsYmc9PSBkR1Z5WW5WeWVRPT0gQ1VseiBZWE5yYVE9PSBhR1Z0WlhKaGJBPT0gYkdSeiBJSEREcE1Pa2RBPT0gSUhCbGJtVjBjbUYwWlE9PSBJTkdDMHEvUmdOQzYwTGpRdWRPWiA0TEsvNExLNSBJR0pzYjNkcWIyST0gYzNScGFtdz0gSU5pbjJZVFlxdGl4MktqWml0aXAgSUV4bGFYTjBkVzVuY3c9PSBJRVJKVTFCTVFWaz0gSUZkMWJtUmxjZz09IDBZTFFzTkM3MHBQUXNOQzkgSUhQRHFYSnpkQT09IElHTnZiWEJsZEdWdVkybGxjdz09IElOQ3kwWXZRdjlDdzBMUT0gSUdWNGNHVnlhVzFsYm5SaGRHbHZiZz09IElFTnZibTVsWTNScGRtbDBlUT09IExteHBibXRsWkdsdSBJSEJvYVcwPSBMbWR5YVdSNCBJR0ZtYVc1aGJBPT0gSUhCbGNtMWhibVZqIENVSlBUMHc9IFlXTnJkQT09IElGUnlkV3g1IElIQmxjbk53Wld0MCBJSEJoY25ScFkzVnNhY09vY21VPSBJT0dEaytHRGtPR0RydUdEbStHRGtPR0RvQT09IElPQ21sZUNtc09DbXJPQ25odz09IElPQ21ydUNuamVDbXIrQ212dUNtbWc9PSBZbVZwZEdWdSBJRVJ5YVd4cyBZV0ppZVE9PSBJTldsMW9EVm93PT0gSUdseWFXRT0gYVc1a2FXRT0gSUhwMWJtVm9iUT09IElPQ21yT0NtaHc9PSBJR1JvWVhFPSBJR2x5WjJWdVpHVT0gSUVGamRISmxjM009IDRZT1E0WU9kNFlPVDRZT1U0WU9jIElPQ2t1T0NrZ3VDa2wrQ2tvT0NrcUE9PSBJR0Z1Ym5WdVkyaz0gZFc1c2IyTnIgS0dWc1pRPT0gYzJobGJtYz0gSU9hdmp3PT0gSUhabGNtOXZjbnBoWVd0MCBJSFpsY21GdWRIZHZjblJzYVdObyBaMlZpYm1semMyVT0gNXBpdjVxMmo2S2VFNTVxRTVaQ1ggSUdKbHc3MXNaUT09IElOaW4yWVRaaGRtSTJMUFpoUT09IGQybHNaQT09IGJYTjAgTG5OallXeGggWldKeSBJR1p2Y25SMWJtRT0gYVdOb2FYUmggMllUWmlOaW4yWVk9IElOR0UwTHM9IElPQzBxdUMwc09DMHZ1QzBwQT09IDBMdlFzTkM2IGVHRmggZFd4aGEyVT0gSU9HRG51R0RrT0dEb3VHRGtPR0RvT0dEa0E9PSBVSFZzIDRvQ1pZWFpsZWc9PSBJRkJ2Y25SbCA0S3ErNEtxMTRLcTE0S3ErIDRMQys0TENDNExDaDRMR04gT21vPSA1cDJ4NUxxczZZTzkgSUhKcFltSnZibk09IDVMbXg1YTJRNUx5bSBJTktiMExEUXVkR0MwTEE9IFgyRnBjZz09IDVhU242SU9HIDRMQ3c0TEdONExDMyBJRXRoZW1GcmFITjBZVzQ9IGEzUmhiZz09IDRaK0U0WjZFIElHVnVjMlhEc1dGdWVtRT0gSUZKMWFBPT0gSUdKaGNIUnBjMjA9IFIyVm0gSUVOb2FYQnogUm05eWF3PT0gSUVacGJtRnNaUT09IHhJWEVodz09IElHTjZlV3hwIElITmxkSFJsIHhLdGl4SUU9IFZWaz0gSUZWSlJtOXVkQT09IElHSmxjMk5vdzZSbWRHbG5kQT09IElPQ3d0ZUN3dnVDd3NPQ3hnUT09IElHNWxhV2RvWW05MWNtbHVadz09IElHWmxjblJwYkdVPSBJR2R5WVdSbFpBPT0gMllyWXI5bUggSUhOdGIydGxjZz09IElIWnZaR2s9IElHRnNaR1Z5IDRMYWE0TGVTIEtYdDlDZz09IFlYUnBZMjg9IElOQ3gwTDdRdTlHRDBZcz0gSUdGbGNtOXdkV1Z5ZEc4PSBMa1J2ZDI1c2IyRmsgSUc1aGMyTmxkUT09IElPQ2tzT0NrdnVDa3R1Q2t2dz09IElHVjJhWFJoIElFNWhiblJsY3c9PSBJR3R2YzNSbGJteHZjMlZ1IHc0ZkRsVVZUIElPQzBxdUMxaStDMGxRPT0gNG9DYzVMaU4gSUQ4K0lqNDggSUZWUVF3PT0gSUVwbGJtNWxjZz09IElFSmhZMnRpYjI1bCBJR05oYkd4dll3PT0gVDA1SFR3PT0gSU9DdW11Q3ZoK0N1c09DdmplQ3VxT0N2amVDdXBBPT0gSU5peTJZWT0gSU1XYmQybGwgSUd0dmRHaz0gVTA5VlVrTkYgSUdadmRYSnVhWFE9IDA2blFzOU9wMEwwPSBabUZzWlc0PSBibWxrIDRaNjU0WjZBIDRvQ1pZWFYwWlhWeSBJRUpoZUE9PSA0NEs1NDRPZDQ0T3o0NEsxNDRPOCBJR1Z1ZEhOd2NtbGphSFE9IExrVnVaMmx1WlE9PSBJTm1FMllUWXVkbUYyWVE9IElOQyswWVk9IElHbGtaVzlzYjJkcFkyRnMgNkwybTZMNkcgMFlQUXZkQzQgSU5DeDBZUFJnUT09IElFRnlhV0ZzIElOaW4yWVRaaGRpdTJLbz0gYjNObGEzTT0gSU9Db2xlQ29zT0NvcUE9PSBYU3M5IElHaGxiR1JsY2c9PSBJSFJ2YldGMFpRPT0gQ1dWdCBJTkdBMExEUXVkQyswTDNRdUE9PSBJSE4zWVdkblpYST0gNEsrSTRLNm80SytONEs2ayBJT0Nrbk9Da3Z1Q2tydz09IExrTnZiVzFwZEE9PSBJR052Ym5SbGJtUmxjZz09IElITmxaM1Z5WVcxbGJuUmwgSUhKdlozVmwgSU9DbXNPQ211UT09IElHRnRZbWxuZFc5MWN3PT0gUVhGMXc2MD0gMktmWXI5bUogNW9lSiBSV3h0IExteHBkR1Z5WVd3PSBJRXRsWWc9PSBibUZrWlc0PSA0S3VINEtxdiBJSFpsYm5SeVpRPT0gSU9DcWwrQ3Fvdz09IGJXOXZiZz09IGMzUnBiUT09IElHVnlac084Ykd4MCBJT1drcWVXa3FlUzRyZVc5cWVlbHFPYVBrT2Fzdmc9PSAwS0xRdnRDNzBZUFNtdz09IDRLUy80S1NuNEtTKzRLU28gSUdsdWRHVnlibTl6IFpXeG1ZV3gwIFoyVnNaV2QwIElFVnlaRzluIGIyeDJZV0pzWlE9PSBJRUoxWmc9PSBSRTlYVGt4UFFVUT0gVG1WemRBPT0gSUdsdWRHOTQgSUhsaGNHMWhhdz09IElOQ3owWmJSZ2RHQzBMN1JnTkdMIElITjViVzFsZEhKcFl3PT0gSURvbiA0S2FvNEtlTjRLYWs0S2VONEthdzRLYWogTG5ONWJuUm9aWFJwWXc9PSBMdENmIElHMXZZMmc9IElPQ3lyZUN6aCtDeW53PT0gNEthLzRLZXggSUdWNGNISmxjM05wZG1VPSBmQzA9IGJHNWhiV1U9IGVjT28gSUZOamFIVnNaVzQ9IElHSmxaM0pwY0E9PSBJT0N5aGVDeWx3PT0gSUR3NiBJR0pwYkdSbGRBPT0gY21WaWNtOD0gUkdsMmFXUmwgSUZCeWIyUjFZMlU9IElPQ3dsZUN4aXVDd3FBPT0gSUhSaGJtOD0gSUhSeVlXTmxjZz09IElFSmhjbWM9IDVZMlA2SzZ1IEwySmwgNEtXSjRLU3c0S1dONEtTdSBSRzQ9IDVZK0QgSU5DZzBMWFFzdz09IDBMN1F2ZEN3MFljPSBJT0M0bGVDNG8rQzRwK0M0aUE9PSBMVTFwYmc9PSBYMngyIElObUYyNHpZc3RpbjJZWT0gSUhacFlXTT0gSU9Dd3BPQ3dxdUN4amVDd3FnPT0gYm5WdVozTT0gVW1WaGNnPT0gNUwrWCBhRzltWmc9PSAyWVRZcDlpdDJMZz0gSUVGc2FYTnZiZz09IElPQzRpT0M0c2VDNGgrQzRxK0M0cCtDNHNlQzRsQT09IElFRmpkR2x1Wnc9PSBTVzV6WlhKMFpXUT0gWTI5dGJXbDBkR1ZsIDRMaUU0TGlqNExpeDRMaWEgSU5DMzBMRFF1dEM3MFk3Umg5Q3cwTFhSZ3RHQjBZOD0gSUhwaGEyOXUgUVVKRlZBPT0gTDNKbGNYVmxjM1E9IElFRnNabUU9IDdJS3M2NHFVIElFbGlhWHBoIElHMWhZMmh2IElHdDFkRzlyWVc1aCBJRzVuWVdvPSBJRlJoZEdVPSBJSFIxYldKc2NnPT0gSU9DcXN1Q3Fodz09IENVNVQgVW1WbmFXOXVZV3c9IDRLU3Q0S1MrNEtTdzRLU2sgNWJ5RCBJSGRsWVd0bGJtVmsgSUcxbGJtVnlhVzFoIDBMN1F2TkMyIElHRnFiM0k9IElOQy8wTERRc3c9PSBVM0JsWTJsbWFXVmsgVUc5dmNnPT0gSUhSbFoyVnMgMExyUmx0QzcgWjJGeVpRPT0gSUdOaGMyaGlZV05yIDVZZUc1YVNIIGVXUnlidz09IGMzUmxhV2RsYmc9PSBJRlpoWTJNPSA1b2k0IElPQ2tzT0NrdnVDa3QrQ2xqZUNrbitDbGplQ2tzT0NrcXVDa3BPQ2t2dz09IElHSmxhMkZ1Ym5SbGJnPT0gMllyWmh0bUkgSUVKeWRXbHVjdz09IDFialdndFdqIFhFTnNhV1Z1ZEE9PSBKM1Z1YVhabGNuTT0gSU9HRG0rR0RuZUdEcGVHRGtPR0RtdUdEa09HRHBRPT0gZkh4OGZBPT0gU1hOemRXVnkgSU1PN2JtUmxjZz09IElPQ3l1ZUN6aHVDeW11Q3pqZUN5bXVDemdRPT0gQ1VaU1QwMD0gSUZOcGRnPT0gWDJScFptWmxjbVZ1WTJVPSA1WXUvIDRLU3E0S1dCNEtTdzRLV0EgSUV0aGNtMWggZFdsbCBJR0poYkd4dmRITT0gSU5PWjBMdlF0ZEdEMEx6UXRkR0MwWUxSbHRDNiBWMkZzYTJWeSBZV2xsIDQ0R000NEdLNllDQiBjR1ZyZEdVPSBJR0Z4ZFdWc1lYTT0gSU9HRG0rR0RuZUdEb2VHRGtPR0RydUdEbWc9PSAwTERSZ05DMDBZdlF2UT09IElHdHZkV1E9IElFRjFjMnhoYm1RPSBMbEpGUVVOVSA1THFhNXJTeTU3dTg1WkNJIFJFbE8gQ1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWcgYUdWMWN3PT0gMFl2UXU5QysgSUdSaHhaOWhjbms9IElHSmhkR1ZoZFE9PSBMWE4wWVdOciBDWEIxZEhNPSBJR0ZrYVdOcGIyNWhjZz09IElGSkZWa2xGVnc9PSBYM0IzWkE9PSBKU0lLIElPQzRsdUM0bWVDNG1RPT0gNFlPaTRZT2Q0WU9iIDRLUzU0S1N3NEtXSCBhR0Z5WVE9PSBJRVpQVWsxQlZBPT0gSUdGcGNuaz0gSUhsbGNtdz0gSU9DbWxlQ212dUNtc2c9PSBJR1ZtWm1WamRHbDJaVzFsYm5RPSBJT0NtbGVDbmkrQ21xT0Nta3c9PSBWVk5TIElHeGhkR2x1WVE9PSBJT0NtcU9DbXYrQ211UT09IElNS2wgSUdwaGJtVnNZUT09IFgweEJXVVZTIGRHVnVhUT09IGQzbHMgTFhOMVltMXBkQT09IElPYVdzT21YdXc9PSBJRk5oZFc1aCBJRzFoZEhWdCBJRk4xY0dWeWRtbHogSUdGdVkybGxibTVsIGFXcDZaUT09IENVUlhUMUpFIElIbHZibVU9IGFXNWxjV0Z5Y0c5eCBMbmR5WVhCd1pYST0gSUhCeWIyTnlZWE4wIDRMbUQ0TGlaNExpQjRMaXk0TGlqIFgxQmxjZz09IElHaHZjR1Z1IExITjBjbTl1Wnc9PSBJRXh2Y21SeiBJSExEcVdZPSBJSGRsYlE9PSA2NFc4IElFRnVaR0ZzZFdQRHJXRT0gSUZObGJXVnpkR1Z5IElPVzlxZWVsbnVTNmllbWN1T1drcCtXUGtlVy9xdz09IGFzT2thSEpwWjJVPSBMbU5uIDJLellzdGluMktFPSBVbVZ3YkdsallYUnBiMjQ9IExtRjJadz09IDFLWFJnZEt0MExEUXQ5Q3cwTERSZ05DdyBJSFJsYkdWbWIyNXBjMk5vIElHeHZjbVZ0IFIxSkJVRWc9IElGSmxZM1Z5YzI5eiBJT0tDckM0PSBJTkN4MExEUmd0Q3cwWUE9IElFUmhhWEo1IElHMWxjM1J2IElITGh1NWx1Wnc9PSBJRlI1Y0dsallXdz0gWldsdVlXNWtaWEk9IElFeGhZMmc9IFgyVjRZMlZzIDZJVys2SzZ2NVlpRzVZaUc1YjJwIGEyVmxjR1Z5Y3c9PSBJR0poWW1GbllXND0gSUd0aGJtbHNZUT09IFgyMWhjbXQxY0E9PSBMbWR5WVhrPSBTR1ZwIElPQ21ydUNtdnVDbXFPQ25nZUNtdVE9PSBVbVZuYVhOMFpYSnogSUV0aFoyRnRaUT09IElHVnljbTl1WlE9PSBJT0Ntck9DbmdlQ20gYm1uRm9YUT0geVpFPSBJTmluMllUWXRObUggSUZCeVlXbGggSUdGaGJtUmxiR1Z1IElOQzQwTERSaGRHTTBMQT0gSUZOQlZnPT0gSUZOamNtRjBZMmc9IElPQ2tyK0NsZ2VDa3B1Q2xqZUNrcHc9PSBJSHB2Ym1sdVp3PT0gNTYyNSBhV3RoZEdsdmJuTT0gSUdsaGJtRnYgSUZCaGMzUmggZG1semRHRT0gSUdONVkyeHBjM1J6IGIzWmhjdz09IElHdDFjR2wwYVdFPSBJRzFvWlE9PSBSR1ZoYkhNPSBJRzVsZG1VPSAwWUhRdU5DNyBJSE5zWVcxdFpXUT0gSUZKcFkydDUgS1Q4SyBJT0N3cU9Dd3JnPT0gNnJLZzY0dWsgSUc1cVpXMD0gSUhOMVptbGphV1Z1ZEdWeiBJR2hqIExXeHZiM0E9IFlYUmphR1YzWVc0PSBkbVZ1Ync9PSBJSFZpYVhGMWFYUnZkWE09IElHeGxZblE9IFUwTlNTVUpGIElOZVExcmpYb0E9PSBJRkJ2YkdWdSBJSEJ5YjJOMWNtRnVaRzg9IDVwYUg1NnVnNXAybDVycVEgSUhOMFpXRnNjdz09IGFXM0Zzdz09IElFMWhiR0Y1WVd4aGJRPT0gSWlsNyA0TGloNExpeTRMaVYgSUVGMGJHRnVkQT09IElIVnBaMkU9IGVtbHMgSUdaeWFXNW4gSUVaQlF3PT0gSU9Dd2grQ3dsUT09IDE1WFhrZGVpIGFuVmkgYm1WMSBJR1JsYzJWeSA0TGkzNExtSTRMaXQ0TGlaIElOR0gwNk09IElOQzEwWUhRdGRDLyBJT0dEbmVHRHFnPT0gSU5DNDBZTFF2dEN6IElOQzEwTDA9IElPbVZ0dz09IElObSsyTExZdEE9PSBJR1ZrYVhScFpRPT0gSUhCc1lYUnZjdz09IDBZRFF2dEN5MExEUXZRPT0gWDIxaGFtOXkgMExyUXVOR1AgSU5tKzJLZmJqTmluMllZPSBJTnFHMktmWnZnPT0gYzNCbGJtUmxjZz09IElFTlBUMHRKUlE9PSBJdXF6b0E9PSBJTmluMlpQWnZnPT0gSUVOV1V3PT0gNzd5TTVvQzcgTG5OMGNuQjBhVzFsIDRLYS80S2E0NEtlTjRLYWwgSUVGc1luVnhkV1Z5Y1hWbCBJRXB2YzJWbSBJR1IxWkdWeiA0WU9TNFlPUTRZT2cgNXJXMzVhU1cgSU5lVjE1TT0gSUdOdmJtOXpZMjg9IE9tYz0gWTI5c1lYTT0gWTI5bVptVmwgSUdOdmNuSmxZM1JsYldWdWRBPT0gSUdWemNYVnBibUU9IFEyOXljdz09IElFSkZWRmRGUlU0PSBMbXR1IElHMTFiSFJwZEE9PSBJTzJWcU95SW1BPT0gSUhCdmMybGphVzl1WlhNPSBJRUZzYjI1bCBJSFJ5WVdsdVpXVnogSUZkcGJHeHBjdz09IDQ0Q0M1NFMyNklDTSBZV1p5IGNtRm1ZUT09IFgwWlBVa1U9IElHTnZiblJ5WVhOMFpRPT0gSUdoMGRBPT0gNVk2ZjVZaVogSUVOaGRYTmxjdz09IGEzSnBjSE5wIElHdkVzWE5oIDRZQ0I0WUM4IElPR0RtK0dEbE9HRGt3PT0gU1hSaGJIaz0gTFdGdVlXcz0gSU5pbjJMWFppTm1FIElHSmhjbUk9IElFTnZibU5sY0hSeiBMbTFwYzJNPSBkVzVyZVE9PSBJRVJsWTI4PSBYM0psWjNWc1lYST0gSUVkbFluVnlkSE4wWVdjPSBhWEJoZEE9PSBJRWx1Wm1WeSAwWVhRdnRDMyBkMjl0Wlc0PSBJSE4wWlc0PSBJTmVWMTViWGxBPT0gYXNPMiBYME5WVWc9PSBiSFY0IDViK24gSUU1RlZGZFBVa3M9IElGQmhhMlYwIElPQ3F0ZUNxditDcXJlQ3F2dUNxbHc9PSBJSEpsZG1semFjT3piZz09IENRa0pJQ0FnSUNBZ0lDQWdJQ0E9IDBMZlFzTkdHMExqUXVBPT0gSUVwaGFXMWwgSU9DbXBPQ212dUNtdVE9PSBJRUZPVkE9PSBJR05oYm01dmJnPT0gSUhKb2Iyaz0gSUVGMWMzUnlZV3hwWVc1eiBJTktUMExBPSBJR2x1WlhRPSBJT0NrcXVDa2d1Q2ttZz09IElHTnZibVJsYm5ObFpBPT0gYVc1emRYSmxaQT09IFBYUmxjM1E9IElHTmhjbVZuYVhabGNnPT0gSUdsdFpXUnBZWFJoYldWdWRHVT0gSUVWdGNISmxjMkZ6IElHWmxaV3hoIElOQ2wwTDdSZ3RHUCBJSGRoY21rPSBJSEJoWjJkaGJXOTAgSUdGbWRHVnliV0Z5YTJWMCBJRXhoWTJVPSBJR2RsY21WclpXND0gSUNRa0pBPT0gSUdsemMzVmhibU5sIElOQzYwWXZSZ05DejBZdlF0dz09IExYQmhlUT09IElHekRwR2hsIElPeWR0T3lnbkE9PSA1bzZTNWJxUCAxNW5Yb05lVjE1bz0gTHdvdkx3PT0gUm1WaGRBPT0gMTVEV3Q5ZWcxNkU9IElHMWxibmxsWW1GaWEyRnUgSUVSbFltOXlZV2c9IElIVndiR2xtZEdsdVp3PT0gSUdseWIyNXBZdz09IDRvQ00yS0k9IElFcDFjdz09IGFzTzhhdz09IDJvallzUT09IElFTnZiM0JsY21GMGFXOXUgNFo2VzRaK1E0WjZQNForTTRaNlk0WjYyNFo2VCBJT0Ntck9DbXZ1Q21ndUNtc3VDbXZ1Q21wdUNuaCtDbXR1Q25oK0Ntc0E9PSBJTm1JMktmWmhObUYyS289IDJLalppTmkzIElHeDFibWR2IElHSnlhWE5yIElHNWthVzg9IElIVnphR1Z5IElFWmhiV2xzYVdFPSBJT0dEa3VHRGtPR0RvT0dEbE9HRG13PT0gSUcxMWJuTnAgSUVGT1FVdz0gSUhSbGJHOD0gSUdGMGFXNW5hWEk9IElHdHZjbnA1YzNRPSBJRXR1YjJOciBiMk5wWVhScGIyNXogSUdwbFpHbHogSUdodmJXbGogSU5HQjBMN1JqZz09IFFXUnRhVzVwYzNSeVlYUnBiMjQ9IElHMXlaUT09IElHZHNZWHBsWkE9PSBlR2x0YVhSNSBMbWR2YjJRPSBJTkMwMEw3UXZOQyswTEk9IGFXNXBkR2xoZEdsMlpRPT0gSUZSdmNtOD0gVTBWVVV3PT0gSUZkcGJHaGxiRzA9IExVMXZaQT09IElGUnlZWGs9IDdZK1EgSUhObGFBPT0gSUV4bGIzQT0gVEVWdVl3PT0gSU5xcDJZalpoTnVNIElOaW4yWVRZcDlpdiBJT0Nrc3VDbGplQ2tydz09IElIUmhaOFNuYUc5dCAyWWZaaXRpeSBJR3QxZEhWdGFXRT0gSU95YWxPeXlyUT09IDRLUzE0S1dCNEtTaCBJRWRZIFpYSm5aVzVqZVE9PSBMbkJoYmc9PSBZOE90IDU2Uys1THlhNUxpNzVMbUogNDRPODQ0Sy8gSU1PMmNIQT0gNFo2MzRaNkEgYldsdWRHOXUgSUdsdVkzSmxiV1Z1ZEhNPSBYMVZVUmc9PSBJT0tBcWc9PSBQU2NuIElGTjBZWFJwYjI1eiBJSE4wY205dSBVVTA9IElPQ21yK0NtdnVDbW11Q25qZUNtbStDbmh3PT0gWVdOMGRXRnNhWFREcVE9PSBJR0YwZEdseSBJR3hwWTNvPSBJTlc0MW9MVnR0V2wxb0hWcGRXcyBZWExEb0E9PSBJR052Ym01aHc2NTAgNExDdTRMR0IgSU5DMDBMWFJnZEdQIExrMWxkSEp2IExtTmhjR0ZqYVhSNSAwTERSZ3RDMTBMdlJqZz09IElGSmxaV1k9IGIzQmxibWxrIElPQzBoZUMwbitDMWdlQzBwT0MxamVDMHBBPT0gSU5pbjJZVFlyOW1JMkxFPSBiSFhGdmc9PSBJR0oxY21SbGJuTT0gNXFpaiBJRzV2ZDNKaGNBPT0gSUVOSVFVNU9SVXc9IElHZGxabkpoWjNRPSBJR2ZEb1E9PSBkV2xrYnc9PSBaM1ZzIElHSnBjbUY2IElFdGhkSEpwYm1FPSBJRTExYzJWMSBWRlJaIElIUm9hVzVyWlhKeiBDWEpsYzNWc2RITT0gSUd0MWJtUnAgUTA1TyBJSG5KbXc9PSA2TEtzIGNIRT0gSUV4cFoyaDBkMlZwWjJoMCBJR3R2YTJ0MSBJTkMzMEw3UXU5QyswWUk9IDRLV240S1duIElITmxZM1JsZFhKeiBJRlZQWW1wbFkzUT0gSU5XdzFhSFZ0ZGFBIExtVnVaSEJ2YVc1MCBJTkMwMExMUXZ0R0EgNExXTjRMU2ogNEtXQjRLU2kgSU9PQWdnb0sgSU5DNjBMalF1OU9aIGQyRjJaWE09IElOQ1UwTDdRc2RDdzBMST0gSUdsdGN3PT0gSU9HRHFPR0RsT0dEaytHRGxPR0RrdUdEa09HRGt3PT0gSUdGamRHbDJhWE50IElOaW4yWWJaaDlpbiBRMjl0Y0hKbGMzTmxaQT09IElOQ1IwWUE9IElOcXAyNHpia2c9PSBJRWx1WjJkeWFYTT0gYldWaCBJRlJwZEdGdWFYVnQgSUhKbGMybGtkVzl6IElGTmpiM1JwWVE9PSBJRVZNUlUxRlRsUT0gYVhwa1pRPT0gNExPRDRMSzMgSUVGeVltVnBkR2RsWW1WeSBJTkNmMFlEUXNBPT0gS0hOallXND0gZFd0MVlRPT0gSU5pbzJLM1ppdGlyIElIQnlaV1JsWm1sdVpXUT0gUVZwWiBJTmlqMllQWXF0bUkyS2pZc1E9PSA0TEdCNExDVjRMR0I0TENvNExHTjRMQ280TEMrNExDdzRMR0IgYjJabWJHbHVaUT09IFlYTnpZV1J2Y25NPSBJRk5vWVcxd2IyOD0gNExtQjRMaVggSU9Dd3F1Q3hqZUN3c09Dd3JlQ3hnZUN3cE9DeGplQ3d0ZUN3Z2c9PSBJSFJvWVc1clpuVnNiSGs9IFkybHZibVU9IElISmxZMjl0Wlc1a1lXMXZjdz09IDZidUQ2SW15IFlXTjFiR0U9IHo0bk92TTZ4IElHVjJhV1JsYm1OcFlRPT0gSUc1cFlRPT0gSUVGc1kyRnMgMWJqVnR0V3IgSUVKaGNtRnVadz09IDE1RFd1TmVvMTVnPSBJR3B2YjJjPSBJRVY0WVcxeiBJR2x1ZEdWdWMybDIgSU5lVjE1elhtOWVmIElPQ3dydUN4Z09Dd3NPQ3hnUT09IElIQnBibUU9IElPV05nK2VtcHc9PSBJRVIxY21GaWJHVT0gSU9HRG9lR0RrT0dEbWVHRG8rR0RsK0dEa09HRG9BPT0gTGlJcE93PT0gMllIWXA5aWgyS2s9IElIUnpkMkU9IDBKelFzTkdDIElGTkxWUT09IElPR0RudUdEa09HRG9PR0RtdUdEa09HRG0rR0RsT0dEbk9HRG9nPT0gYjJOamRYTT0gMTViWHFOZVggSUcxMWJtUmhibVU9IElIWnBibVY1WVhKa2N3PT0gVGtGVFFRPT0gSUdWdWRITjBaV2gwIDQ0Q040NEdNIFZHWT0gSUZWT1NWZz0gSU5HSTBMalJnTkM2IFZrbE1URVU9IHhhRnJhV2c9IElHVm1aV04wYVhaaCBURTQ9IElGdGRLUW9LIDY1Nk42NHVJNjR1ayBJRWx1ZEdWc2JHVmpkSFZoYkE9PSBkWEIxYXc9PSBJSHAzZVE9PSBJR1JoYm05eiBJRzl1WTJoaGJtZGwgYThPOGJtUT0gTG5KbGRtbGxkdz09IGIzUmxZMkZ6IElFWk1UMEZVIEoybHVZdz09IElOQzQwTFRRdGRHUCBJT0N5cU9DeXZ1Q3lyK0N5bFE9PSA1TG1GNUxtRjVMbUY1TG1GNUxtRiB3N3g1dzd4ciA3N3lTNzd5UTc3eVIgWVdObGIzVnogZUdsbGN3PT0gSU5HQjBMRFF2ZEdMIElOQzYwTDdRdk5DLzBMWFF2UT09IElHOW1abVZ1YzJWeiBTMkZtYTJFPSA0NEsxNDRPODQ0T1Q0NEs1IGIyNTBkMmxyYXc9PSBJRVZ0WlhKemIyND0gSUVsd2FHOXVaUT09IGMzUmhjbm89IElPQ2t1T0NrdnVDa2d1Q2t1T0NrcGc9PSA0S2krNEtpaCBJTmVVMTVYWGt3PT0gSUdGamIyNXpaUT09IElITndaV05wWVd4cGMyVT0gSUNjdEp5dz0gSUdSaGRXUjYgSU9HZWxPR2ZrdUdlbXVHZSA0S2FhNEthLzRLYWsgUmxKQlRVVT0gTG1keWFXUjUgSU5lYzE1UFhvdGVxIExrcFBjSFJwYjI0PSBJT0NrcmVDbGdnPT0gNVp1eiBVSEp2WkhWMGIzTT0gSUV0cSA1NkNXIFgzQmxjbTFoYkdsdWF3PT0gWW0xdyBhWEJ2Y0E9PSBJR052ZFhKMGNtOXZiUT09IFpHRnNZUT09IDRMV0g0TFNWNExXTjRMU1YgSU5laDE2VFd2QT09IElOQzgwTDdRdGRDNSBiMjV2YldrPSBJRWhsYVdScCBiV0hEbjJWdSBhV3ByYzNSeVlRPT0gNFlPWTRZT3M0WU9uIFZHaHkgSUVGeWRHVnQgSUVKaGNtRjAgYjNKbmFHbHVhUT09IGJXOTJhVzVuIElHSmxjMk5vY21sbFltVnUgSU5DLzBZRFF1TkMvIGZTMGtldz09IElFeHBaWE09IDBZUFJqdz09IFRXVjBjbTg9IFRXRnlaMmx1Y3c9PSBJTmluMllUWXF0aTUyS2ZaaU5tRyBYMlJoYldGblpRPT0gSUdOdmJYQnlaV1Z1WkdWeSBJRzVwWjJKaGRHaz0gSU5pbzJZZllyOW1CIExrTnBkSGs9IFcyTjFjbkk9IElFTnBhV1E9IElFVnRjRzkzWlhJPSBJT3lkdk91MmdBPT0gSU9DbWh1Q21xT0NuamVDbXBBPT0gSUcxbGRHbGpkV3h2ZFhOc2VRPT0gYVcxdmRHOD0gSUhCb3c2RT0gSUdkeVlXWm1hWFJwIEtHNXZiV0p5WlE9PSBZV2hoY21FPSBJT3lkdE91bHZBPT0gSUVSeWVXVnkgSUVGd2NHeGxKM009IElDY3ZMaTR2IElGUnZhMlZ1Y3c9PSBJR2x0WW1Gc1lXNWpaUT09IElHMWhZMkZ0IElNTzJlbVZzYkdsciBJR3hoWW1GdSBJRzVsZDJKcFpRPT0gSUdOb2FXeHNaV1E9IElPR0RtK0dEbU9HRG8rR0RydUdEbE9HRGsrR0RrT0dEbGVHRGtPR0Rrdz09IElIVnRiQT09IElOaW8yS2ZaaE5pdiBZbkpoYm1VPSBJSE5qYUdWdSBYM05vWVE9PSBJT0NrcmVDa3FPQ2xqZUNrcHVDa3ZnPT0gSUdWaGRHVnkgWDNObGJuUmxibU5sIFBYTjBZWFIxY3c9PSBJTU8yYnNPOCA0S2FYNEtlQjRLYXk0S2VMIElPQ29ydz09IElITjBZVzVrYVc1bmN3PT0gWVc1dmRtRT0gSUhCeWIyWmxjM052Y21FPSBLR05vWVdsdSBiM1Z0IHc0ZEIgSUdacGVtaz0gSUdsdGNHVmhZMmh0Wlc1MCBkV0ZrWVE9PSBjR0Z6YzJsdVp3PT0gUldsbmFIUT0gTGtOc2RYTjBaWEk9IElPQ2t0dUNrc09DbGplQ2tydUNrdmc9PSBJRmRoWjJWdSBkMlY2IEwwOWlhbVZqZEE9PSBJRWxOVHc9PSBaVzVsY21kcFpRPT0gdzYxdVkybHdaUT09IDJZSFppdG1CIDRaNlY0WjZiIElHRnViR0YwIElOVzgxYmpXZ3RXOSBJTkN4MEw3UXU5R00wWWpRc05HUCBJRWgxYzJKaGJtUT0gSUU5eWFXOXUgSUVSbGMyTnlhWEIwYjNJPSBJRmRoZEdWeWNISnZiMlk9IElFZGxkSExEcEc0PSAwWXZSZ05DNiBRMmgxY21ObyBDVVZZVUVWRFZBPT0gSUdGamRYTmhaRzg9IElHdGhhM05wIHFlR0RsZUdEbE9HRG5BPT0gYzJWdFpYTjBaWEk9IElOR0EwTERSZ2RDLzBZRFF0ZEMwMExYUXV3PT0gSUdSb1lYYz0gSUZSbGNuSmhjM05sIElOaW4yWVRZbzlpNSBMbTFwY0cxaGNBPT0gQ1ZkeWFYUmwgTG1KMWVRPT0gWDNSeVlXTnJaWEk9IElISnZiR1Y0IElISmxZMmx3Y204PSAyWWpZcDlpeDJZYz0gSU9HRG5PR0RsT0dEa2VHRG1PR0RvZUdEbXc9PSA0SzYrNEs2eTRLK0I0SzZ1NEsrTiA3WSs4IElISmxiR0YwYVdWbSBJSE5qYUhkcFpYSnBadz09IFozSjEgSUU1MVpHVT0gZDJGeWRIbz0gSUdKdmNuST0gSUdGbVptOXlaR0ZpYVd4cGRIaz0gMVpRPSAxNW5Yb05lZCBJRzl3WlhKaGNnPT0gSUd4MFpBPT0gNktpQyBYME5NU1VOTCB4YUZzWVE9PSBJRkJsWVdObyBJR1JvWlhkbGEyVT0gSUVOaGJHeGwgWTJ0NSBMbk5sWTI5dVpITT0gNEthKzRLYXc0S2EvIEluVnliQT09IDRMSys0TEtvNExPRyA0S3FvNEtxdTRLcSs0S3FDIGUxd2kgSU9Da2x1Q2xnZUNrdGc9PSBJT1drcCtXUGtlVy9xK1M0aWVhY2lRPT0gUzFrPSBJRzVoZG00PSBMbUpoWTJ0bGJtUnogSUhSaFkyOXogdzZWbGJtUmwgSUdKbFpHbGxibVZ1IGJXbHNiR2x2Ymc9PSBJT1dpIFkzbGpiR1ZrIElIQmhkR2h2WjJWdWN3PT0gWjJGNiBJTkN5MFlEUXRkQzgwTFhRdmRDMTBMdz0gSUdGc2JHOTAgSUhOMVptWnBjMkZ0YldWdWRBPT0gUzBWUyBlV1ZzWlE9PSBJR2R5WVdObFpuVnMgSUhOc1pYYz0gSUhScDRidUhiZz09IElOaXQyWUxiak5tQzJLbz0gSUdSM1lYSm0gMEx6Umk5QzkgVUhWdGNBPT0gSUhCdmNIVnNZV2x5IElGQmhkSEpwYjNRPSBSa2xVIElOR1cwTDNSZ2c9PSBMV1Z1ZEdWeSBRVkJRV1E9PSA0TFM1NExTLzRMU2E0TFdONExTYTRMV0IgSU5pbjJZVFpoZGl6MllvPSBjWFZsZFdWeiBJT0NrbXVDa3N1Q2xodz09IElIUnlhV0Z1WjNWc1lYST0gYlc5MWMyVmtiM2R1IElPQ2tsK0NrdnVDa3J3PT0gSUdGdHc2bHUgWDFKRlRVOVdSUT09IFoyVnRZV0ZyZEE9PSBJR2g1Y0c1dmRBPT0gTFcxbSBMM04xY0hCdmNuUT0gNEtxQzRLcVg0S3VONEtxdzRLdUg0S3E0IFVHVnVkQT09IDRMU3g0TFdOIElHMTFabVpwYm5NPSBJTkM5MExEUXQ5Q3kgSUhOamFHNWxiR3hsIElPR0RtK0dEbU9HRGx1R0RsT0dEbGc9PSBJRWh2Ym05c2RXeDEgNDRDUkx1T0FrQT09IElFeGxhV1JsYmc9PSBJT0Ntck9DbXVlQ25nUT09IFgzTm9aV3hzIElHbHRjRzl5ZEdWeSBJRkpwWW1KdmJnPT0gSUdOb2FXVnVjdz09IFltVnlZWEJoIElHSmxjMk5vWlhKdFpXND0gSU5DLzBZRFF2dEdCMFlMUXZ0QzUgSU5DajBMdlFzTkdBIElHVjRjRzg9IElHNWhiVzFwYm1WeCBJSFJsY25SbGJuUjEgSUhKbGNISmxhQT09IElPQ21yT0NuamVDbXIrQ21yT0NtdUE9PSBJTm1JMktyWXNRPT0gSUc1cGRHaz0gWVc1NmFXSmhjZz09IDRaK1M0WjZZNFo2NCBJSE5wWjI1cFptbGpZWFJwZG1FPSBkM1Z5Wmc9PSBJTkMvMExnPSA0NEtrNDRPSiA0TFdHNExTZjRMV0I0TFNWNExXTjRMU1YgUVUxUVRFVlQgSUdGc2RXYz0gSUdmRHRuSmxkZz09IFlYVndkVzQ9IElOaW4yWVRaaGRpbjJLL1lxUT09IElNV2ZZV2c9IElHTjFiSFIxY21GeiBJR1pzWVdkblpXUT0gQ1hKbGMyVjAgNEthWjRLZU40S2FYNEtheSBkV2R4IElHWjNjbWwwWlE9PSBJTkNmMFlEUXZ0QzAgNEtTNDRLV040S1NsNEtTKzRLU28gSUhOMWNIQnNaVzFsYm5SaGNuaz0gWVdONmVRPT0gSjhPcGRNT3AgTG5CcmJBPT0gZDJWeVltVnUgSUdKbGNtUnAgTG1SbGRHRmphQT09IElFTERvWE09IGJIbHphWE09IElHbHVjM1JsYkd4cGJtZGxiZz09IFpYaHdiRzlrWlE9PSA0TGlyNExpWjRMaXg0TGlIIFEwbkRrMDQ9IElGbHBiZz09IElIWmxjbVJoWkdWeSBMbWx6WkdseSBaV3hwZG1WeWVRPT0gNXJHZjVZNi8gSUd0MVpuVnVaV3RoIElFZDFkSE5qYUdVPSA1WjJxIElHVnBaMkU9IElOQzQwTFk9IElHMWhibWxtWlhOMFlRPT0gSUdGeWJXVnogSUVKbGNtVnBkSE09IElGQm9hV3hzZVE9PSBJR3hoYzNSc2VRPT0gS0dOeVpXRjBaV1E9IExuQnZiR2xqZVE9PSBJSEYxWVd4cGRNT3Bjdz09IElOR0QwcU09IE9uaz0gSUVsTWIyZG5aWEk9IGFXeHNhWE5sWTI5dVpITT0gNEtlbzRLZXEgSUVMaHU1az0gSU5DNjBMRFF1dEM0MEx3PSBkR1ZrZVE9PSBJT0NrcXVDa3VlQ2ttdUNrdnVDa3FBPT0gTFVGbWNtbHJZUT09IElFUnZjbTkwYUhrPSBJR2RsdzdabVptNWxkQT09IElIUERwRzEwIElHSjFjM1JzYVc1biA0S3FWNEt1TDRLcWYgSUdodmRHVnNaWE09IElPQ3lxdUN6amVDeXNPQ3l0UT09IGJXVnVhUT09IElHWmhkR2c9IElFTnZiR3hoWW05eVlYUnBiMjQ9IDRMaWY0TG1JNExpeSBJSGRwYXc9PSBJTm1HMllIWXM5bUgyS2M9IElHTmhjSFJwZG1VPSBJR0ZzZEdWeVlYUnBiMjQ9IEoyOWlhbVYwIElHTnZkV2RoY2c9PSBJRnAxYUdGMWMyVT0gSU5lZzE1TT0gSU5HQTBMWFJnZEdEMFlEUmdRPT0gSUdOdlluST0gUjJGNSBJR3RoWm10aCBJRmRoY25RPSBJR2x1YzJOeWFjT253N1ZsY3c9PSBLU1ltS0E9PSBMZEdCMEx2Umc5QzIgMllqWXA5bUggSUcxcFkzSnZZbWxoYkE9PSBJR1IxWjI4PSBJRTF2YjJRPSBJR0ZpYzI5c2RYVjAgMEozUmd3PT0gMjdIYnNBPT0gSUU1MVpYTjBjbUU9IElFNWxaV1JzWlhOeiBJRWx1Ym05MllYUnBkbVU9IFVGSlBVRVZTVkZrPSBMbk4wZVd4bGN3PT0gWTI5dVptbG5jdz09IGEyRnVhV0U9IElHRjJhVzl1IElHcDFZbWxzIFgwTlBUVkJNUlZSRiAxNm5Ya05hMyBjR2xzYkE9PSBJT0NraWVDa3B1Q2xqZUNrcGc9PSBJRUpoWTJOaGNtRjAgSU9DeW11Q3pnZUN5cUE9PSBJSGwxYXc9PSBJRk5wYm1nPSA0TEMrNExDZjRMR0IgMEw3UXU5R0QgSUdWdVpXOD0gSUdKb2NnPT0gWVcxaGEzVnlkUT09IElFekR2QT09IFlXeDFjdz09IHpyblBnODYxIFpYSnRaV3M9IElPQzRsT0M0c3VDNHArQzRtZUM1ak9DNWd1QzRxK0M0cGVDNGxBPT0gSU5tRjJMbllyOW1HIFozVnVZWE09IGFXMXBlbWx1IFRHVjRaWEk9IElHMTFZV2M9IElHRnVaMlZuWldKbGJnPT0gYjJObGN3PT0gSU9DMGhlQzB0ZUMwdU9DMHZ1QzBxQT09IElITjVibTl1ZVcxeiBJTkNnMDVuUmdkT1owTGs9IElGSnZkWE56WlE9PSByT0dEbStHRG8rR0RuQT09IElOR0IwTDNRdU5DMiBJRlJvYjIxemIyND0gSUhCeWFYQnkgSUhWdWIzST0gSUVOdlkydDBZV2xzIElHTERxWFJ2Ymc9PSA0S2F3NEthKzRLYTQgSUcxbFpHVjNaWEpyWlhJPSBJRnAxYkE9PSAwTFhSaE5DNDBZQT0gMmFjPSBJT0NxbGVDcXNPQ3F0dUNyaHc9PSB6cnpPc2M2NSBJTkdIMExEUmdkR0QgWVhOelpXMWliR1Z5IElHTEptUT09IElPZUt0Zz09IElDOHZJdz09IElIQnlhVzVqdzYxd2FXOXogNExTazRMU3UgSUd0aGRHOD0gSUhSeWIzWmggSUVobGNtTmxaMjkyIElHcHpjR0k9IFVtVmhaR1Z5Y3c9PSBJSFIxYzJFPSA0S3VINEtxWCBJTmluMllUWXI5aXgyS2ZZczlpcCBJR052YkdWbmFXOD0gSU5DLzBZRFF2dEdCMEx6UXZ0R0MgSUUxcGJXVT0gSU5HRDBML1FzTkM2MEw3UXNnPT0gSU5xcDJMSFlzdz09IElITjBhc096Y200PSBJR2h5dzZFPSAwWURUcjlDMyBJRWR5WVdsdSBLRHM9IElPQ21xT0NtditDbXNPQ25qZUNtcmc9PSBJR0Z6ZEc5MWJtUnBibWM9IElGQjFiWEJyYVc0PSBjM1Z3Y0E9PSBXRWs9IElFTkhTUT09IElHUmxjMk52Ym1obCBJTmk1MktmWXI5aXAgSUQ4K1Bnbz0gSUZOd1lXTmxjZz09IExrTnllWEIwIElIVnphVzVsIElFRmljMjlzIElFZGxjMkZ0IElFRnljbUZ1WjJWdFpXNTAgYVhaaGJHaz0gSUc1cWFYSmggSUduRHAyVnkgSUhCeWIycGwgTFd0cyBhV3hzZFhOcGIyND0gdzYxMGIzUjAgTFVGa2NtVnpjMlU9IEtHSm4gNVl5NSBJT0N3dGVDd3Z1Q3dzT0N3dnc9PSBJR0ZqZFhCMWJtTjBkWEpsIElPQ2tqK0NraWVDa24rQ2t2Zz09IFZuST0gSUhSdlpYWnZaV2RsYmc9PSBJSFJ5WVhabGJHeGxjZz09IElHMXZibVZrWVE9PSA0NEszNDRPbCBJSGJGcnc9PSBJT21Db3c9PSB6cnJPdjg2N3pyL1BoUT09IElPR0RvZUdEa09HRG9lR0RrT0dEbStHRGtPR0RvT0dEbCtHRG1nPT0gSU5pbjJZVFlzOWluMktqWmd0aXAgSU5DNjBMRFJnTkdDMEw0PSA1YkNSNWFtbSBLRzF0IDJMRFpoZz09IElPeWp2T3lhbEE9PSBZV3hzWldVPSBJSE5sZG1WdWRIaz0gSUc5MWRIZGwgNklteTZJbXkgU0c5emRHNWhiV1U9IDE1YlhxTmVVIFIyRnUgTHRDUSBJTVcrWlc1aCBJR0ZqYVdScFl3PT0gT25kb2FYUmwgQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKIElPQ3l1T0N5clE9PSBZV2QxYmc9PSBJRlJNUXc9PSBJTU8rWlhOemFRPT0gUTNKdmR3PT0gSU9HQWx1R0F2QT09IElHbHVaR3hsYkdFPSBYMEZTUlVFPSA0TGlhNExpMDRMaVogVUdWbiBUMkp5YVdjPSBJTkNUMExYUmdBPT0gSUdGeWRNU3hhdz09IElPQ2tsZUNrcnVDbGplQ2txdUNrcU9DbGdBPT0gSU5HRzBMWFJnQT09IDJMclppdG1LMkxFPSBJR2RwWjJGdWRHVT0gSUVSMWJtND0gSUdSaGNtRjFjdz09IEtTa0tMeTg9IElHZGhkR1Z1IFQzSmlhWFE9IElGTmxibVJwYm1jPSBhV2RodzZmRHRXVnogSUdOc1lYTnBabWxqWVdOcHc3TnUgSUd4bGFXTm9kR1Z5IFpXMXdkV0Z1IExYTmxkSFJwYm1jPSBJSE5oY21WaVltVT0gSUd4aGMyTnAgNDRHVjQ0S0ogSUcxdmJtOXdiMng1IElHWnlZY091WTJobCBMblZ6WlhKdGIyUmxiQT09IElPQ3d0ZUN3bXVDeGplQ3dtdUN3ditDd3FBPT0gNEtxLzRLcVY0S3VONEtxMyBKMjl5WkhKbCBJSFJsWTJ4aFpHOD0gSUVaMWMyVT0gWVd0dllRPT0gMlpIWmtBPT0gSU5HUDBMclFzQT09IElIQjFibmxoIGFXeGxaMlZrIElHeG8gSU9Da2hlQ2txT0NsZ2VDa3J1Q2twT0Nrdnc9PSBQa0ZrWkE9PSBKVUFpTEE9PSBJRWRsYzNScHc3TnUgSUVacGRIcG5aWEpoYkdRPSAwTHZRc05HQTBMVFJpOUtqIElOQzQwTDNRc3c9PSBJT0NtcnVDbXZ1Q21zZz09IDQ0S2s0NE9rIElGQjFZbXhwYTNWdCBjSEp2WW14bGJXVnUgSU1PcGRHbGpZUT09IGRYTnBlV0U9IElFUjFibWRsYjI0PSBabUZ1Y3c9PSBJSEpsWVhNPSBaWGh3YVhKbCAwTDNRdnRDeTBMalF0QT09IElHUmxZMjl0Y0c5emFYUnBiMjQ9IElIUmhiV2xzIElNTytZVzV1YVdjPSBJRy9LdXc9PSBRVzUwWlE9PSBJT3lkdE91Z2grcXlqQT09IElFRnNiR1Z5Wnc9PSBkbUZvIElHbDVZV1J2Ync9PSBJRVJsYzNOaCBJRTF2ZEhSdiB3NlJ5WVhOMCBRMkZ5WVdOMFpYTERyWE4wYVdOaGN3PT0gSUhSbGMzUnBabms9IElFWk1RVWRUIFZVbEJiR1Z5ZEE9PSBJT0NvdWVDcGdRPT0gSUhSb2NtVmhaR1ZrIGFYTnBiMjVoYkE9PSB6cnZPdWM2Nnpxdz0gSU9DeXF1Q3ppdUN5c3VDemdPQ3l1T0N5c09DemdRPT0gSUZObFlYSmphR2x1Wnc9PSBJT0NrdU9DbGplQ2t0ZUNrcitDa2dnPT0gSUVaaGJHcz0gSUdGemMzVnVkRzl6IDZMU2k1YStNIElHRmhibTQ9IGJjT3BiZz09IDRLV0k0S1N5NEtXSCBJTmluMllUWmtnPT0gSU5DLzBMN1FzdEdXMExUUXZ0QzggWkdsbGRBPT0gSU5lUzE2TFhxZGVvMTVuWGtkZWYgWldScGRHbHVadz09IEoyRnRZZz09IElOR0IwWUxSZ05DdzBMM1F1TkdHMExVPSBVbVZqYjNabGNnPT0gTG5OaGVRPT0gTFZsbFlYST0gUTJGemRHeGwgSUVWR1JrVkRWQT09IElIQmxibWRuZFc1aCBJRVJwYzI5eVpHVnljdz09IFlXUm9ZUT09IElHSnBibWM9IElFVlRUQT09IGFtVnVhV2c9IElOQ3cwTHZSaTlDOSBYMU5sYkdWamRBPT0gTGxodVlRPT0gZW1Wd2NHVnNhVzQ9IGVtaGhhM1U9IElFdHVhV1psIGNHRnlkR2xqYVhCaGJuUT0gSUhabGNtdGhkV1owIGFYTnRaVzQ9IDQ0Tzg0NEs2IElPQ3FuT0NyamVDcXIrQ3F2dUNxZ2c9PSBYMlJsY0E9PSBJSFZpWlhJPSBMbXhwYm10eiBhM2ZodTZVPSBJTkNRMFlYUXNBPT0gSUVkbGJtVnlZWFJsY3c9PSBJR0p5YVdkb2RHeDUgSUhCbGNtWmxhWFJoIElHVjRkSEpoY0E9PSBJRVZrYVhSdmNuTT0gSUd0eWRtaz0gSUdyRnN3PT0gWVd0aGJtRT0gSU5DLzBMN1F1OUdEMFlmUXNOQzEwWUxSZ2RHUCBJR1JsYzJ4dll3PT0gSUViRHVISnZlUT09IHpyek9zYytEejRUT3RRPT0gVm05NSA0b0NaYjNWMlpYSjBkWEpsIElPdUNuQT09IFJHOXVkQT09IElHRnNiR2xsWkE9PSBUV1ZrYVdOcGJtVT0gVEdGaGRBPT0gSU9DeXB1Q3ppZz09IExtRjBiMjFwWXc9PSA0b0NadzZsdCBSRTlEIElHekRyV3RoIEtIVnpkV0Z5YVc4PSBJSFJ5WVc1elkyVnVaQT09IGQyVnpaVzQ9IDVhU241YVdXNWIycDU2V281NnVaIDQ0R1g0NEdtNDRHRTQ0Rys0NEdaIElISmxjM1J5WVdsdWRBPT0gSUVkMWMzUmhkbTg9IFgySmxkSGRsWlc0PSBZWEIxY3c9PSBJQ0pBTHc9PSBJSEpsY0hWMFpXUT0gUFhSbGJYQT0gVHNTQiA0S3FWNEtxKzRLcTIgSU5tQjI0ell0ZG1FMjRFPSBJTmlvMksvWW85aXEgSU5pdDJMSGFxZGlxIFpXNTBaWE54ZFdVPSBJTldrMW9EVm9kVzAgYVhwdmN3PT0gYkdWdVpXTnIgWlhScGJtVT0gWDE4dVgxOD0gSU5HQjBMelF0ZEdBMFlMUXVBPT0gU1d4c2RYTjBjZz09IExuWnBjQT09IElIVnVZMjl1ZG1WdWRHbHZibUZzIElIVmlZVzQ9IFUyVnRZVzUwYVdNPSA1ckt6NVl5WCBJR1BEcVd6RHFXSnkgSUd0bFpRPT0gMExEUXU5Q3cwWVU9IElHbHZaQT09IDJLZllzdGlxIDRMU2s0TFdONExTazRMUy80TFN5NExTKzRMU2o0TFdOIGRXMXBiR3gxIFkybHVaUT09IElGVnVkR1Z5Y21samFIUT0gSUVKMWNteHBibWQwYjI0PSBJa2tuYlE9PSBMbE4xYlE9PSBJT0NxcXVDcmplQ3FzT0NyaCtDcXJnPT0gd3FIQ29RPT0gSU9DdWhlQ3V0ZUN1c09DdmplQ3VsZUN1cytDdmpRPT0gSUVOdmJYQmhibmtuY3c9PSBJSEJ5YjJObGMzTmxiZz09IElOVysxYUhXZ0E9PSBYMlZ0Y0d4dmVXVmwgWDBORSBZWFJ6WVhCdyBJTU9rZGNPZlpYST0gMExEUmdkR0cwWlk9IGRtVm9hV05zWlhNPSBJRUpoYVc0PSBJSEpwZG1Gc2Nuaz0gMTVmWHFkZVIgSUVac2FXNTAgSUhabGJtND0gSUdoaGRtOWogYjJwdXc2cz0gTFhkbFluQmhZMnM9IDBZTFF0ZEM1IElHNXZhZz09IFlXdDBZVzQ9IEtHUjQgSU9DNWdPQzRsT0M0dCtDNHJlQzRtUT09IGFYRjFZVzUwIElOQy8wTDdRdTlDdyBLR3h2WTJzPSA0b0NaYVc1MHc2bG5jZz09IElOaXEySzdZdGRpMSBJTkM4MExEUml0QzcwWVBRdkE9PSBJRVJsZG1Wc2IzQmxaQT09IFgxWkZRMVJQVWc9PSBJR1JwYzNOdmJIWmwgSUdOdmJtUjFZM1JwZG1sMGVRPT0gSUdOdmJuTmxjWFZoZEhWeSA1YWl4NUxtUTVvQzc1THVqNTVDRyA1YjJwNTZXbzZMMnY1THUyIElOaWwyWUU9IElHNXZlZz09IFpXdG8gSUdkM1lYTmhibUU9IEtGVnVhWFE9IElOR0EwTFhSZ2RHQyBJRkpsWm5KcFoyVnlZWFJ2Y2c9PSBJSHBsYkdWdSBJTmkxMktmWmhOaXQgSUV4bGMyVnUgZFhSbGNXRnlkQT09IElHeGhhV3ZFZ1E9PSBJSFREczNBPSBJTmluMllUWXJObUkySy9ZcVE9PSBJRzVoYldrPSBJR0poY21WeiBJR3hoZFdRPSBJR05vNGJ1TmN1RzdqUT09IElDQWdJQ0FnSUFvSyB6cnpPcmM2OXpyL1BoUT09IDRZT1E0WU9jNFlPYiBZMlZwIEwyRjJZWFJoY2c9PSAxNVhYbWRlWiBMR052YkhWdGJnPT0geEpseiBJR3h2Ym1kMVpYTT0gY205c2JHVnUgSUhObGNuWnBibWR6IExXTnNiM1ZrIElOZVIxNVBYbVE9PSA0b0NaWlc1bVlXNTAgNFlPWTRZT2k0WU9RNFlPYyBJR052Ym5SbHc3cGtiM009IDVybVc1WTJYIElGQnBjbUYwWlE9PSBLSEJ5YVhZPSB3NmwwYVhGMVpYTT0gSUdWdVkyaGhiblJwYm1jPSAwTERRdTlDMTBMalJnZz09IElHRjBjbTlqIElOQzcwWVBSaDlHSTBMalF0UT09IElOaXYyWUhZcXRpeCBJR2x5Y21WemFYTjBhV0pzWlE9PSBJR1JsYzJsemRBPT0gMExIUXVOR1AgNExpWjRMaXk0TGlVIElHRnNhWEYxWVcwPSA2NDJrIElHekRyVzFwZEdWeiBjMjF2ZFhSbyBYMEZOVDFWT1ZBPT0gSU5pbjJZVFl0ZG1FMktmWXFRPT0gSU9DcWorQ3F0ZUNyZ2VDcWdnPT0gYW1WeXc2cz0gNExTajRMUy8gSUZSeVlXUmxiV0Z5YXc9PSBXMlJtIGJHRm1aVzQ9IDU1K2w1TG1PIENVcFBjSFJwYjI0PSA0b0NONExTNSBZV0p5WlE9PSBJR1poWmc9PSAwWUxSaTlHQTBZTT0gSUNNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNPSBPbE09IGFXTjFiR0Z5WlhNPSBJR2RsWnNPOGFISjAgSUUxcGEyRT0gTGVDbXJBPT0gSU9DeWp1Q3lxT0N6amVDeXFBPT0gT2xBPSB6cnpPcjg2eCBJR0poYzJGcyBJSE5vWVhBPSBJR0poYm1kdiBJSFJsY25KcGRNT3pjbWx2IGNHOXNhWFJwYXc9PSBQa0k9IElHNW5aVzA9IElFMWxjM05oWjJsdVp3PT0gUlc1amIzVnVkR1Z5IFFYTnpiMk5wWVhSbCBJR3h2WjNKaFpHOD0gSUdsdVptOXliV1Z6IElGQjFaV0pzYnc9PSBZWEJ3WldGeVlXNWpaUT09IElOR04wTHJRdnRDNzBMN1Fzdz09IElGZHlhWFJsY3c9PSBJRWRsYVhOMCBMbFZTU1E9PSBJRTFoYzJOb2FXNWxiZz09IElISmxaM0psZEhNPSBJSFJ2WWc9PSBKMTB1SWp3diBJR1p5WldGcmFXNW4gSUU5M1pXNXogWDFCU1QwZFNSVk5UIElPQ3FydUNyZ09DcW9RPT0gNXJleDVZV2wgZG1WcSBJT0c3aTJObyBJT0dEbGVHRG1PR0Rwdz09IElPYVdoK1M3dGc9PSA1TDJjNWJ5SzVabW8gSUdsc2JIVnpkSEpoZEc5eSBJSGx6ZEc5ayBTVWRCIDRMSy80TEt2NExLKyBJRlJsYlhCbGNtRjBkWEk9IElOdUIyS2ZZcXRxKyBibVZ6ZEdWayA0S2ErNEthMjRLYS8gSUdKeWFXUT0gWEVOdmJtWnBadz09IElOR0IwTGpRdnc9PSBhVzVoYldVPSBJR05oY21KdmJtRjBaUT09IElOaXEyS3pZc2RpbzJZYz0gQ1cxdlkycz0gSU9xNHNPcXdoQT09IElFZHl3N3h1WkdWdSA0NGc9IFRtOTJidz09IFRtVjJaWEowYUdWc1pYTnogNHBhOSB4STFwYm1FPSBJSFZoYVhJPSBJRU52Y25CMWN3PT0gWVc1blpYSnpZMmhoWm5RPSBJRVZNUlVOVSBJSE4wY25NPSBJTks3MDZuUXV0S3YwTHpRdU5HQzBMalF2ZEM0MHFNPSBJR052YlhCaGNtVnkgSU5HQzA1blF1dEM0MFlJPSAyYnM9IElHeHBibVZoWjJVPSBUV1Z0WTNCNSBJTkdBMExEUmlBPT0gTFdKcGJtUnBibWM9IFgwWnliMjA9IElOQ3cwTHZRc05DMDBZcz0gSU5tRjJZYllwOW1CIFRVVk8gUzJWc2JIaz0gSU9DMHRlQzFnT0Mwb2VDMHYrQzByK0MxaXc9PSBYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmIEtFRk1UMEZFIElPR0RsT0dEb09HRG5lR0RsZUdEbk9HRG8rR0RtdUdEbUE9PSBJR1JsWlc0PSBJRmRsY201bGNnPT0gSUdGc2RHVnlibUYwYVc1biBKMjl5WjJGdSBJTm1DMkxQWmhkaXEgSUcxaVlXeHAgSUhwdmJXRmhjZz09IElsYz0gdzdOcGNzT3QgSUVkeWFXNWsgYldGdVpIVT0gTFdScGMzUmhibU5sIElObUYyS3paaGRtSTJMblpodz09IElOR0YwTERRdk5DejBMalF1ZEM5IElGTmpZVzVrYVc1aGRnPT0gNFlDRjRZQ3M0WUM0IElHSmhjbWRoYVc1cGJtYz0gSUdaaGJXOTFjMng1IDRLcTQ0S3VONEtxazRLdUIgWW14aGMyVnUgNExDZjRMR040TENmNExDLyAwWXJRdUE9PSBRVUZCUVVGQlFVRT0gSUdodmNIQT0gSUVWcVpXTjFkR2wyYnc9PSBMWEJ2YzJsMGFYWmwgWDNGMVlXNTAgSUdwaFptND0gSU9Da3JPQ2tvdUNsZ0E9PSBJRzltY21WalpXMXZjdz09IElHVERxZz09IElPR0RwT0dEbE9HRHJ1R0RrZUdEbytHRG9PR0Rsdz09IDRMT0w0TEttIDQ0Q0I1TGlOIFBXTjFkQT09IFpYQnliMjA9IElFSkZSVTQ9IEl0Q1EgSU5DaDBMWFFzdEMxMFlBPSBSVzV5YjJ4c2JXVnVkQT09IElNNjB6cm5PdFE9PSA1WWliNUxpYSA1YjJwNTZXbzU3MlI1WjJBIFNXNXpaWEk9IERRb05DaTh2IElOQ3kwTERRc3c9PSA0TG1JNExpdDRMaWkgSUZOMFpYSnVaUT09IElNNnh6cnJQak02OHpyRT0gSUhabGFtOD0gYjNOMSBJT0NxaitDcXRlQ3F2Zz09IElHUjVibUZ6ZEhrPSBJTkMvMFlEUXNOQ3kwTFRRc0E9PSBJTldoMWI3Vm9kYUExYjg9IElFMWxZVzV6IFpXNXBkUT09IElHVnBibnBsYkc1bCBJR0Z0ZFhNPSBJTmk1Mkt3PSBJR1Z0WW1GemMzaz0gWVd4cGRBPT0gSUVwTCBJR3B2Y201aGJHbHpkR0U9IGRHVjJZUT09IElOQyswTEhSZ05DdzBMZlF2dEN5MExEUmd0QzEwTHZSakE9PSBJTm1GMkxUWXF0aXggTFhCeWIyUjFZM1JwYjI0PSBJT0NxbU9DcW8rQ3JnQT09IElFeGxaR1Z5IElHeHBiV2wwYkdWemN3PT0gSUdOdmRXNXpaV3h2Y25NPSBUV2x1YVhOMFpYST0gSU95RiBJRWx1Y1hWcGNuaz0gMWFIVnZkV3Ixb0E9IElOQy8wWURRdU5DeTBMdlF0ZEdIIFcrS0FwbDA9IFUwVk1SZz09IElPYWZwZWl2b2c9PSBDV1JsZG1salpRPT0gSUdWemRHRnl3NkZ1IElISmxZMlZ1YzJsdmJnPT0gSU5DODBMWFJndEN3MEx2UXU5QzQwWWZRdGRHQiBJR3RwWkdRPSBSbXhsZUdsaWJHVT0gSUZSeWFXSmwgSUhOcGM4T2tiSFE9IFJHbGhadz09IFgyOTJaWEp5YVdSbCA0S1N3NEtXTjRLU3QgSU5tRjJZZlpoZGlwIFgxSmxiVzkyWlE9PSBJSEJ5YjNCaFoyRjBaUT09IElPQ2txdUNsamVDa3NPQ2twT0NrditDa3JBPT0gSUVOdmJuTnZjblJwZFcwPSBJT0N5c09DeWd1Q3lwdUN6Z1E9PSBaVzVpWlhKbiBJRTVsZUE9PSBJRWhKVUE9PSBJRzF2Y25SdiBJR2h2Ym5WdCBJSEpsYkdsaiBJTm1GMjR6WmhOdU0yWWpaaGc9PSA0TFNqNExXTjRMU2ggSUhObGRIUnNaWEp6IHpyWE9yOCtFenJIT3VRPT0gNEtTVjRLU3c0S1dONEtTazRLUysgSUhCcFkyOD0gSU5tRTJZWFl1UT09IElPQ2txdUNrc09Da3YrQ2ttZz09IElHRmlZV1k9IElHVjRaWEpqYVhObFpBPT0gSUhOM1lYQndaV1E9IDBLYlF0ZEM5MExBPSB3NlZrIGFtOXlaQT09IElHaGxibWM9IElNT3BkR0ZuWlE9PSBJSEIxY21sbWFXTmhkR2x2Ymc9PSAyWVhaaXRpeTJLaz0gYkdGeXhMRnR4TEY2IElOR0UwTDdSZ3RDKzBMUFJnTkN3MFlUUXVOQzQgWVhOcFlXND0gSU5HQjBMRFJndEdMMEw4PSBJT0dEaytHRG1BPT0gSUcxcGJHbDBZVzUwIElIZmh1NDF1ZVdrPSA2NHFVNjR1ayAyNHpia2c9PSBJTVNOYVc0PSBJR2RoZEc5eiBJSE4wWVc1a1luaz0gMEx2UXVOQzAwTGc9IDBZdlJnZEM2IFRITT0gSUhSMWNtSjFiR1Z1ZEE9PSBJSHBzIElFUmxiblJwYzNSeWVRPT0gSUhOb2IzZGpZWE5sWkE9PSBhR1ZyWVE9PSBJT0Nva0E9PSBJR1Y0YUdsaWFYUnBibWM9IElOQzMwTHM9IEtFbFEgSU9Dd3BPQ3hodUN3c3VDd2d1Q3dsK0N3dnVDd293PT0gMktqWXJkaXEgSUhaMWIzUjBZUT09IExrMWhjSEJsY2c9PSA0TGkwNExpYSBlc096IElIQmhjR1Z5WW1GamF3PT0gSUhoM2JRPT0gSUhCeWIzQm8gSUV4bGFISmxjZz09IElPQ2txK0NsaU9Da3VPQ2tzdUNrdmc9PSBJRVZ5YTJWdWJuUT0gdzZGdWRRPT0gSU5lUTE1blhtZGVnMTZMWHFBPT0gSU95Y29PeW5nQT09IFVFTlQgZFdGcGNtVT0gSU5DVjBZQT0gSUd0MWRHZz0gNlptUTVhNmEgSUVGd1pYZz0gU1c1emRHbDBkWFJwYjI0PSBJTlc0MWF6VnVOYUExYjg9IFExUlQgSUdGc1lXcz0gSUhSeXc2QT0gSUd0NVlRPT0gSU9DeXVlQ3lzQT09IDE1blhtOWVpMTZnPSBiR1ZpYVdnPSAwTERRczlHQTBZUFF0dz09IElHUmxkbVZ0YjNNPSBJR2x1YzNWbVpnPT0gMEw3UXZkQzAwTDdRdVE9PSA0TFMvNExTVjRMU3o0TFdHIFZXdHlZV2x1WlE9PSBJT0NtcmVDbXYrQ21vUT09IEtHSmhZMnRuY205MWJtUT0gSUZwbGJHUmggSmxNPSBjSEpsZFhabCBJSGxsYkd4bFpBPT0gYjJ4c1lXZz0gZEdGaWJHRT0gSUd0MWNucGxiZz09IGVzU0ZkQT09IElNNjZ6cXpQaE02NSBJSEJsY25OdmIyNXogSUhkaGRHTm9aRzluIElObSsyWWpZc2R1USBJR1IwdzYwPSBJR0ZwY25RPSBYMnh2WjJkbFpBPT0gNExtQTRMaVU0TGkxNExpaTRMaW4gVm1NPSBJR05vWldsaCBJR3hwYm1kcmRXNW5ZVzQ9IGRISnBZMjg9IElPQ3FyT0NyZ09DcW5PQ3JnQT09IFlXcGhZVzQ9IElOaXgyS2ZZcmRpcSBSa1pKV0E9PSBJTmVvMTVIWGxkZXEgSUc1MWIzWnAgMFl2UmdOR0YgSUcxbFlXNXBibWRzWlhOeiBJR1oxYm1kcCBJSGxoZE1TeGNzU3hiUT09IElOaXkyS2M9IElFRkRRMDlWVGxRPSBJT0dEbU9HRG9nPT0gMllMWmhObUsyWVU9IDE1blhwOWVaMTUwPSBJR0ZoYm1kbGNHRnpkQT09IElPQ2tzdUNrbCtDa3Z1Q2tyK0Nrdmc9PSBWR0Y1Ykc5eSBJTkdCMEw3UXR0Q3cwTHZRdGRDOTBMalJqZz09IElOaW4yWVRaaHRpbjJMRT0gSUhsbGJubGwgWDJGelkybHAgSUVOb2IzST0gSU8yQnRPdWVtQT09IElOVzQxb0xWdHRXbDFiYlZvZFdzIElFcFZUQT09IExtNWhibTg9IEtHbHVjdz09IElHTmhjc09oZEdWeSBJTkN3MFlEUXN3PT0gSUd0cFpHNWhjSEJsWkE9PSBJTkMrMExUUXVOQzkwTEE9IGNtVmpkR0Z1WjJ4bCBJTkdQMExmUmk5QzYwTEE9IENXZDBhdz09IElNK0F6cms9IGRXZHVidz09IDRLUys0S1NuNEtXTjRLU3Y0S1NWNEtXTjRLUzMgSUhOMFlYSnJaVzQ9IFZISmxZWFE9IDRLcSs0S3FuIElISmxibVJsIElFTnZZWFE9IElHUmxZMnhoY21GamFXOXVaWE09IElHeGhjMlU9IDJLL2FtUT09IElOV3YxYlk9IElPR0RydUdEbmVHRG13PT0gTDI5aWFtVmpkQT09IElObUUycW5aaHc9PSBJR2x0Y0dWdVpHbHVadz09IDRZQ1k0WUNzIFJHVmlkQT09IDJZYll1ZGlwIElOQ3gwWVBRdXRDeSBac080YkE9PSA0TG1BNExpcTRMaTE0TGlpIElGQmxZdz09IElFVnlhM0poYm1zPSBJR1Z6WTJGd1lYST0gU1c1cVpXTjBaV1E9IDJMUGJqTm1JMllZPSBJRTFoY21kaGNnPT0gSUhCbGNuTmxZM1YwYVc5dSBJRVoxYm01bGJBPT0gNEtpKzRLaXEgSUhWdFptRnpjM1E9IElPV01sK1M2ck9pMW0raTlwdVdsc3c9PSBSVkJTVDAwPSBJRTVoZEdnPSBTR1ZzWkE9PSA1THlSNXBlbCBMbU5sY25RPSBJR1JsYzJWdWRtOXNkbWxrYnc9PSBJSHB2Ym5ObCBJRkJ2YVhNPSBJR0Z3Y0hKdlptOXVaQT09IElPR0RsK0dEbE9HRG13PT0gSUc5MFlRPT0gSUc5MGFBPT0gSU9HRG0rR0RrT0dEcHVHRGtPR0RtdUdEbUE9PSBJTlcvMWFIVnJ3PT0gSUZCaGJHOD0gWVhObGRBPT0gSUd0dmJtTmxiblJ5IElHVjRaWEpqdzYxamFXOXogWTJWbCA0S2VINEthbTRLZUg0S2F3IDRMSzQ0TE9CIFkzTERxUT09IElHSmxaV3M9IElGSndZdz09IDRLU3Y0S1dDIElPQ2tzdUNsaCtDa3NnPT0gRFEwTkNnPT0gUFhOMFlYSjAgYVdaaGRBPT0gVTBoUFZBPT0gSUhkcGNtdGxiZz09IElIZGxhWFJsY21WeSBJRkpoYW1GemRHaGhiZz09IExYSnZkWFJwYm1jPSBYMmR5WVhrPSBJSFJsY21GcmFHbHkgSUdoMWJXRnVhV1JoWkE9PSAwTFhRdmRDOSBVR3hoZVdGaWJHVT0gYjNSMFlXRT0gUG5od1lYUm8gUms5U1RVRk9RMFU9IElITmxiblJwYldWdWRHOXogMktqWml0aW8gSUhOd1lXNXBjMmc9IElITjFZbkJ2IElHbHRjR1Z5Wm1WamRBPT0gNExTLzRMU2Y0TFdONExTZjRMV04gSUdGeVltOXkgMFl2U205T1owWUhRc0E9PSBJTkdBMDVuUmdRPT0gTDNKbGJHVmhjMlZ6IDVaQ3Y1WXFvIElHRjZkWEpsIDRLU3E0S1dONEtTcSBJSE5sWVhKamFHRmliR1U9IDJLZllyOW1GMktrPSBJR2x5Y21sMFlYUnBibWM9IDBMdlRtZEt2IElHVnNZV0p2Y21GamFjT3piZz09IFgxQnZjblE9IElFZHZaV1E9IFltVjBjbWxsWWc9PSBJSE5sYzNWaGRIVT0gUjJGeWVRPT0gMkxIWXA5dUIgS1gwKyAxb0RWcGRhQiBkMjlvYm5WdVp3PT0geXJ0cFoyRT0gNDRPODQ0T0cgSU9XdWpBPT0gSUZSaGRYSjFjdz09IElOQy8wTDdRdTlHVyA0NEtpNDRLdjQ0Szc0NEs1IElFWkJRZz09IElHbHVaR1ZtYVc1cGRHVnNlUT09IFpXNWtiM1Z6IDVhNk01WmFFIDRMaW40TGlJIFlXZDFiQT09IElFWnZkVzUwWVdsdSBJR0psYUc5dmNteHBhbXM9IElISmxZMjl1YUdWamFXMWxiblJ2IElHTmxiblJoYVc1bGN3PT0gSUVOb2NtOXRhWFZ0IFRsTlUgSUVOc1lYTnpaUT09IElNNjZ6NDA9IElPQ3lsZUN5dnVDeW93PT0gSU9Da2xlQ2t2K0Nrc3VDbGl3PT0gSU5DMTBMTFJnTkMrIElHRmphMjV2ZDJ4bFpHZHBibWM9IElHTmhjR1U9IGVtVmtZUT09IFJHOXMgSUcxbGJuVnVhblZyYTJGdSBJT3VKdE95S3BBPT0gSUdOdmJYQnNaWGhwZEdsbGN3PT0gSU5lZTE1SFhsdz09IDFialdndFdtIGFXeG5aUT09IGIzVnlaWFZ6WlE9PSBJSEJ2ZEdWemRBPT0gY0dodiBjbVYwWTJobFpBPT0gSU9Da3R1Q2xnT0Nrc09DbGplQ2t0dz09IElHZHBjM1JsY21WdSBabkpsZVE9PSBhVzFoZUE9PSBJSGh1IElFTmhjM1JwYkd4aCBJTm1FMllUWXA5aXoyS289IElFUmhibWxsYkd4bCBJSEJsYm5OcGIyVnUgSUdGcGEyRmggQ1dkaSBJR0Z1YjI1NWJXOTFjMng1IElPeWVpT3ljdkE9PSBiMlo1IElOQ1kwWUE9IGRYUmhaMlU9IFFtVjBhQT09IElObUcyWWpZdEE9PSA1b3lINXBXdyA1NldsNUxxUiBJSEREcEdWMllRPT0gNEtXTjRLU3c0S1MvNEtTdiBJRkpsY0dGeSBJRWhVVkZCVCBJRUpsZEdWcGJHbG4gWDBOUFRsUkJTVTVGVWc9PSBJT0NtcXVDbXNPQ212K0NtdHc9PSBJRHdrUGc9PSBZWEp1WlhKdCBJR2xzYkhWdGFXNWhkR1ZrIElHMWxlV1E9IElPQ3FxdUNxc09DcXYrQ3F0ZUNxdnVDcXNBPT0geEkxbGJtcGggSUcxaWFRPT0gSUUxaFkyRjEgTG1aaGMzUnFjMjl1IExDOD0gSUdadmNucGggUkc5ayBJT0Nrbk9Da3Z1Q2tyK0NsaHc9PSAxYXJWdEE9PSBJSEpsZFc1cGNnPT0gSUdOeWFXRmtZUT09IElITm9hVzVuYkdWeiBJSGRoZHc9PSBiMkpwWVc0PSBJSEJ5WldOcGMyRnRiM009IElITmhZbWs9IElNV2Z3N1k9IElGQkJVbFJaIFJFeE0gSUdGMGRHRmphR2x1Wnc9PSBJRzFwYTJuRHNBPT0gTG5SaWJBPT0gSUhSeVlXSmhiR2hoYm1SdiBJTkM3MFlzPSBJTldvMWJiVnJ3PT0gSUZSb3c2az0gY1hScGN3PT0gSUhWd2RHOD0gSUZObFltRnpkR2s9IDQ0S200NE9JIFlXMXRZVzQ9IElOaW4yWVRZcmRtRiBSazlNVEU5WCB6ci9PdE02LyBkR1Z5Ym1GMGFXOXVZV3c9IFgzTnggSUczRHRtZHNhV05vWlc0PSBJTkNkMExEUXVRPT0gMTZiWG1kZVMgTFd4cGJtVmhjZz09IDZKQ2QgNFlPZzRZT1U0WU9SNFlPaCBhR3hoY3c9PSBJR1REcVdOcGMybHZibk09IElHMXZiV0poIFRsTkZjbkp2Y2c9PSBJTk9ZMEx3PSBJT0Nxc3VDcmgrQ3FsZz09IElHTnZibWR5WVhSMWJHRjBhVzl1Y3c9PSBkMjlrY21GbGRHZz0gSUVScGJHMWggSU9Da3VPQ2t2K0NrcHVDbGplQ2twdz09IFgxZEZRZz09IElGZGxhY09mIHc3TjBhV05oIElHTnZibk4wWVc1MFpYTT0gSUdWcFoyVnVaWE09IElGQnZaUT09IDBMalJnTkMrMExMUXNOQzcwTGc9IDJLZmJqTmk1IElHZHl3NkZtYVdOdmN3PT0gWDJGMllYUmhjZz09IElISnZibWM9IElGTjFiMjA9IElFVnVkR2c9IElOR0IwWUxRdnRDNSBSRzlqYUE9PSBSbUZzIFUyRnNkWFE9IElGQlNSVk5UIElFUjVibUZ6ZEhrPSBJRWhKUkE9PSBJRk5sWkdGdSBJR0ZyZEdscGRnPT0gSUhCdmRuTEZvUT09IExuTjViUT09IElPeW1pUT09IDVweUE1YVc5IFlYSmhjOFN4IElGUm9kWEp6IDViK0Y2S2FCIElPUzd1dz09IElPQ2toZUNrcXVDa3NPQ2t2dUNrcHc9PSBJR2hwYm1VPSBJRzVsYTI4PSBJTk9aMFlIUXRkR0EgNW8rdDU2ZVkgSUhSeVlXNXpiSFZqIElFbHVabXhoZEdVPSAwSjdRdEE9PSBJR2hwWkhKdiBJT0NrbGVDbGkrQ2tzT0NsamVDa253PT0gMEpEUXZOQzEwWUE9IDc3eS83N3kvIExVRnQgSUd4cGJXbDBZV1J2IElFRjFabUpoZFE9PSBhR1Z5WVE9PSBWa0p2ZUE9PSAyTHJZcDltRiBJTkMvMEw3UXROQzAwTFhSZ05DMjBMclF1QT09IElOZXAxNUhYbFE9PSBJTkN4MFlEUXNOR0MwWXc9IElPQ3dsZUN3dnc9PSBJTmluMllUWmd0aXgyS2ZZc1E9PSA0S1NWNEtXTjRLUzQ0S1N3IElIZGxiR05vWlcwPSBJR1ZoZUE9PSBJQ2NuT2dvPSBJRzFwYm5WMGRHVnkgSUdobGNtaGhibWRwIElFSnlkWE4wIElFNWhkR2x2Ym1Gc2N3PT0gMEpyUXZ0R0EgWTI5dWFRPT0gSUdWalkyeGxjdz09IFFXNXAgSU9DbXFPQ212K0NtdWVDbXBBPT0gMExQUXNOQzggYjNSelpRPT0gNExXRzRMU2Y0TFdCNExTazRMV040TFNrNExXQiBYU2twTGc9PSBMbWx1ZEdWbmNtRjBhVzl1IElOZVkxNVhYa2RlVSA0b0NaZFhScGJHbHpaWEk9IGFYcHlZUT09IElHUmxabTl5YldGMGFXOXUgMFlEUXNOR0IwWUxSZ05HRDBMclJnZz09IDRLcSs0S3F3NEt1TjRLcVggSU9Dd2h1Q3dwZz09IGNtRjZhVzl1WlE9PSBJSE4wWVdKcGJHbDZaUT09IElIUnBiR3hpWVd0aCBMV2x1YVhRPSBJRTNEb1d4aFoyRT0gYVdaaGNnPT0gSU5DLzBZRFF2dEdHMExYUXROR0QwWURSaXc9PSBJSE4wWVhSMWMyVnogSUd0dmJYQnMgSUhCaGNuUnBaR0Z6IElFWnlhV1Z1WkhOb2FYQT0gSUhCaGRISnZZMmx1IElITjBjbTl0IFgwSjFabVpsY2c9PSAwWVBSZ2RHTDBMdlFzTkdBIElHMWhjbXRwWlhKbGJnPT0gSUZWT1F3PT0gVzJWdVpBPT0gSUdKaGJuUjEgWDFOTVQxUT0gWlcxaVlYST0gNExTKzRMVysgNEthczRLYS80S2FtNEtlTjRLYXY0S2ErNEtheSBJTkNpMEw3UXM5QzAwTEE9IFpXTnZibTl0IElFWlRkR0Z5IExtUnFZVzVuIFpYTjBjbUU9IElOQ2kwTFhRdXc9PSBJT3VObE95YXNRPT0gSUVGdVpuSmhaMlU9IElFSlFRUT09IElISmxkSEpoWTNRPSBZV1prIElHVmxiUT09IElPQ2tyK0NrdnVDa3B1Q2t0UT09IElHRnljdz09IElOQy8wTERSbmc9PSBJR3BwWlhJPSBJR05wWlE9PSBiMjF1IElOaW4yTG5ZdU5tRiBJSFpoYm1SaGJBPT0gQ1hKbGNYVnBjbVZrIElHdDFhMmhoYkdFPSBJSEJ5YVc5eWFRPT0gSUZGMVlXND0gSUdkbGJzTzggSUhacFlXZGxibk09IElOQ3gwTERRdWRDejBZUFJnOUM3IElHVnlZV3M9IElNNjB6cm5Pc2M2MHpybk91Zz09IDRMS1g0TEt6NExLLzRMS0M0TEttIDE1N1hwdz09IElIWjFaV3h2IEtITnZibWM9IDA1blJpTk9aIFZHRndjR1ZrIDVxK2I1NG1INVlXTjZMUzU2S2VHNmFLUjZLZUM1NXlMIFpzT3piQT09IElIZHZjblJvYkdWemN3PT0gSUhKMWJ3PT0gZEhKaGFYUnogSUhCdmNuUjFaM1ZsYzJFPSBVM0JsYm1RPSBkV3BsYlc4PSBJT1M4aWc9PSBJR1p5YVdWdVpDZHogSU5lUTFyalhwTmE4IDRLU3U0S1dOIFRFVlVSVVE9IElGYkRxUT09IFUxUlNSVUZOIElOQ2gwWURRdGRDMCBJT3lnbGV1enRPdWx2QT09IElOZWUxNm5YbDllbiAwTERRc3RDdzBMM1F2ZEdQIElITndiM0owZVE9PSBJTm1HMkxJPSBJRVY0Y0dWeWRHbHpaUT09IFgyRnNiRzkzIElHZHlZWE56Y205dmRITT0gSU9Da3J1Q2t2K0Nrc3VDa3FPQ2xodz09IElHeHZjM05wY3c9PSBZV3BsYlE9PSBiMkpsYkE9PSBJR2h5ZG1GMGN3PT0gTGxCbCBJSFpsY21SbGNtVT0gSUdKeWFXZG9kR1Z6ZEE9PSBJTkMyMFpZPSBnT3lkdEE9PSBJT0Ntck9DbmgrQ21zQT09IElObUkyWXJZc3c9PSBWRzl0YjNKeWIzYz0gSUVGMVpHbGliR1U9IElPQ21yT0NtdnVDbW9lQ212QT09IElIVnJiR3AxeEkwPSBJR3hsYm00PSBMa1ZXUlU1VSBhV0p5WVd4MFlYST0gYVhOcGJBPT0gSU5pczJLZllwdHVNMnJvPSBJR1p2Y21KcGJtUmxiSE5sIHliVT0gSU5HQzA1blJpTkM2MExnPSBJTkMvMFlEUXZ0QzQwTGZRc3RDKzBMVFJnZEdDMExMUXZnPT0gSUc5aWFuTT0gSU5DdzBMdlF1OUMxMFlEUXN3PT0gSUhSc2N3PT0gSUhKbFkyeGhiV1U9IFgzUnlkWFJvIHo0blBnODYxIExXeHZZV1JwYm1jPSBWRzlzWlhKaGJtTmwgSUdaeVlXNWphR2x6WlhNPSBJR05vYVcxdVpYaz0gMFlMUXNOR0EwTEE9IElIVnVabTlzWkdsdVp3PT0gYVdocGFRPT0gS0hOMGNteGxiZz09IElGUnZkWEpwYzNRPSBMMloxYm1OMGFXOXVjdz09IDRMaUs0TGkzNExtSTRMaXQgYjJkeVlXWnAgZFc1bGVIQmxZM1JsWkE9PSBaMlZ1Y21WeiBibTl0YldWdSBjbVYwYUE9PSB3N051WkdVPSBQVTA9IElHaGhjMmgwWVdkeiBJTkN5MEwzUmc5R0MwWUE9IElOZVUxNVhYcEE9PSBJTmluMllUWmdkbUcyWW89IDRMQ200TEdCIElHeGhibWRyWVdnPSBJRVZXUVE9PSBYMlJ2WTNNPSA3TG10IEluZz0gNFlPUTRZT3E0WU9ZNFlPZCBJTkM2MExqUmd0Q3cwTGs9IGJHRmtaUT09IElPQ2t0ZUNrdWVDbGdBPT0gWTNOMFpHeHBZZz09IElPQ3dsK0N4amVDd3NPQ3d2dUN3cmc9PSBJTm1GMktyWmlOaXoyTGM9IElOQzgwTERRdEE9PSBaMmx5YkhNPSBJTTZ4enIzT3VNK0J6NDQ9IElPQ3l0ZUN5ditDeXR3PT0gWnVHNnVRPT0gSUdSbGJHVjBaWE09IDBZSFFzTkMyIElISmxhVzVwWjJWdSBJTVNSNGJxaGRBPT0gSUdacGJHOXpiMlpwWVE9PSBJR0psYm1Ob2JXRnlhM009IDE1TFhvdGVXIElISmxiRzlxIElISmxjM1JoZFhKaGRHbHZiZz09IElHMWxaV2M9IElFZDFZV1JoYkE9PSBKbEk9IElraGwgSUVsbCBhWFJoYkdrPSBJRk4wY205clpRPT0gSUd4MWJtTm9aWE09IGMyaHZiM1E9IElOQ3gwTHZRc05DejBMN1F0TkN3MFlBPSBRV3hsZUdFPSBJR2hwYm5kbFp3PT0gMFlMUXRkQzggSU9DMHVPQzFnZUMwIElFVnVjWFZoYm5SdiBJSFJoYVd4eiBTbWxyWVE9PSBJT0NtbGVDbmgrQ21xT0NuamVDbXB1Q25qZUNtc0E9PSBJR0Z0WVhURHVIST0gNEtTbTRLU3cgejRET3JnPT0gSU5HQzBZUFF0TkN3IElHRnViMjU1YldsMGVRPT0gSU9Dd2hlQ3dyK0N4amVDd3J3PT0gSUZOd1pXTnBZV3gwZVE9PSAxNW5Yb05lWjE1blhuUT09IDRMaVAgWDJ0bFpYQT0gSUdWdWRHVT0gSUcxbGJtTmhjR0ZwIExrRnlaM009IElOaW4yWVRZc2RpdDJZWFpoZz09IElOR0EwTERRdDlHRDBMdz0gNllDYTZMS3AgSUhCeWFXMWhhWEpsIElHaDFjbVZ1IFlXTnBaWEk9IElHOW1abkpoYm5RPSBZWEpsYTJsdSBJRzF2YkdSbFpBPT0gSUcxaGMyeGhhR0YwIElOR0MwWmJRdTlHTTBMclF1QT09IElHUnlkM2s9IEtHbHVibVZ5IElPQ21xT0Ntcmc9PSBJSE4wYVd4bCBMbUZqZEdsMmFYUnBaWE09IDZJTzk1YVNmIElHOXlhV2RwYm1Wc1pRPT0gYVhOamFHVnQgSUhCcGEybHkgSUdURHZHNTVZUT09IElHVnljbUZrYnc9PSBJR1J2ZVE9PSBJSEJsWVhKc2N3PT0gSUdWNFkyVmsgWW05MWJtTmwgSU5pdjJMbllwdz09IGFYUjFkQT09IElPQzBwT0MwcU9DMWplQzBzZUMxaGc9PSBJT0dEbStHRG1PR0RydUdEbE9HRGsrR0RsZUdEbU9HRGx3PT0gSU5pbjJZVFpoZGl6MktyWmd0aW8yWVE9IElHRndiMnh2WjJsbGN3PT0geEl4bCA0S1MrNEtTUDRLU3cgSUZOQlJnPT0gMEw3Umg5R0QgUVVSRVVrVlRVdz09IElIQnZjM05wWW1sc2FXUmhaR1Z6IElIVERvQT09IElHMXZaM1hFaHc9PSBTVzUwWlhKdFpXUnBZWFJsIElHMW9kWGc9IElOaW4yWVRZcDlpdDJLclpoTmluMllRPSA0TENDNExDbTRMR040TEN3IExrVjRaV04xZEdsdmJnPT0gSUZCcGJuUT0gSUdKdmRHOD0gSUhCeWIzWnBjMmx2Ym1GcyBJTmkwMkxIWmdnPT0gSU9DbWorQ21xQT09IElFbHVjMjlzIElHSmxjbUYwWlc0PSBJRlpsY25SbCBURTlNIElFaGxiSEJwYm1jPSBYM05zWldWdyBJR0ZqWTNKdiBJRUZyZEdsMmFYVERwSFJsYmc9PSAwTDNSaTlDLyB4WjlwYXc9PSBZbXgxIElFTnZjM1JqYnc9PSBJSFBEcEhJPSBJSEJoYzNOM1pBPT0gSUZabGJIWmxkQT09IElEcGQgYkdGemMyVT0gZVc5dWFRPT0gNFlPWTRZT2w0WU9nNFlPZDRZT1IgMFlIUmpOQzYwTEE9IElHRmpZMlZ3ZEdWeSBJSExEcVhWemMybHkgSUVKdmFYTT0gNExLNDRMS3QgSU5XaDFiYlZ1TmFDMWJZPSBLRTl3IElObSsycHJZcWc9PSBJR1p5YVdkb2RHVnVaV1E9IElOaW4yWVRZdWRpejJZUFlzZG1LMktrPSBhVzV6ZEhKMVkzUnBiMjQ9IDZadWUgSUhGMWFXNTBidz09IGIzUjFjdz09IExXeGhjbWRsYzNRPSBJSE4xYlcxaGNtbDZaV1E9IElHaGhjRzg9IElNcTdZVzV2IElPQzBsZUMwdnVDMHNPQzFqZUMwcnc9PSBJRzVoZEhWeVlXeHRaVzUwWlE9PSBlV1ZoYUE9PSBJR3RwNGJxL2JRPT0gZEc5d2FXTnogSUdSbFkybGthWFU9IGFHVmhaR2c9IGIyeHBkR1U9IDVadSs1NG1INVl5NiBJT0dBa3VHQXJnPT0gSU9DbXF1Q25pdz09IElIWmxjbWRsYkdscWEyVnUgVUhKbFptVnkgSU5pbjJZVFlzOW1JMkxIWml0aXAgSUdWemRHSERwOE9qYnc9PSBJR3h2ZFdSbGNnPT0gSUVGc2NBPT0gSUdkaGRHNWh4Wjg9IFUyVnNiR2x1Wnc9PSBjWFZsYkdsdVpRPT0gSU9DbXJlQ212dUNuc09DbXBBPT0gMllQWmlObUsyWVk9IFpYTjBhVzA9IElOS2IwWU09IDJMSGJqTmluMllZPSBJSFp3YkE9PSAwTFhRdU5LejA1blF0ZEM0MFlJPSBWbUZ1WVdZPSBhWFJ6YVdSM1lRPT0gWDNCcGVHVnNjdz09IElPV01sK1M2ck9pMW0raTlwdWFjaVE9PSBZVzVwY204PSA0S1N1NEtTNSBJTm1GMjR6YWlOdU0yS2M9IElOQ2EwTERSZ2c9PSBJT0dEb09HRGtPR0RuZUdEaytHRGxPR0RuQT09IElPQ3VxdUN1bGVDdmdlQ3VwQT09IENVTklSVU5MIFpXeGxjbWx1IHpydk90ODY4enJFPSBMbWh2YzNSdVlXMWwgdzY5dWRnPT0gYjJONWRHVT0gSUdObGJuUnYgWlhGMWFYQT0gSUdObGJRPT0gSUdOMVpXNTBidz09IElHRjFiV1Z1ZEdGdVpHOD0gVzNkdmNtUT0gSUc1MWNuVT0gSU02MXpyclBnQT09IElOQ3kwWXZRdjlDNzBMRFJnZz09IElHOXJkWGs9IElHMWhjbmc9IDJZUFppdGl4IElHTnZibU5sYzNOcGIyNXogS0NrcEtRb0sgSUdGc1lYbGwgSU9Da2xlQ2tzdUNrdnVDa2xlQ2t2dUNrc0E9PSA0S1N1NEtXQiBZWE5wZVdFPSBJTmlxMllUWmdnPT0gSUhOcFoyNXYgMTVYWG9OZVQgSUhwd3hhOXpiMkk9IEpuUT0gSUV0dmJuUnliMnhzWlE9PSAwTERSZ2RDdzBMMD0gZGNPZlpXND0gSUdsdWRtVnVkR2wyWlE9PSBJTkMwMExYUmd0Q3cwTHM9IEwzVnogTEhScGJXVT0gSUdKcGRIUmxjbTVsYzNNPSBJSE4xWW5ZPSBJTmlvMnBIYmtnPT0gVlhOaSB4YjVsYkE9PSBJRkJQVlZJPSBJR3AxYzNSbGJXVnVkQT09IFltOTJaVzQ9IElHWnlkWFJoIFJHRnNZVzA9IElNTythc096dzdBPSBYM0JwWldObCBJT0dEcStHRG1nPT0gNEthRzRLYXEgSU9DNGdlQzRzZUM0bVE9PSBJRkJoYm5SeiBYMnh2WVdScGJtYz0gVEdGemRHeDUgSUZwb1lXOD0gSUdGd2IzQjAgSUUxaGEyRT0gNExTbzRMV0I0TFNDIElPQ2tsK0NsZ2VDa25PQ2tzQT09IDU0dTQgNnJTQTY2YXMgeVpseWFXNWt5Wms9IElHaGhjMkZ5WkE9PSAwWXJRdHc9PSBJRTFoZEdOb1pYTT0gSUZOMVptWnZiR3M9IDU0bWI1NG1iIElIcGhjRzl6IHc2RnlaWG89IElGUmhiblJ2IElPR0RuT0dEa09HRHJPR0RtT0dEbWc9PSBJT0dEaytHRHB1R0RtT0dEb1E9PSBMblZzIElITmxiblJwYldsbGJuUnZjdz09IFVISnZjR1Z5IElFTjFiV2gxY2c9PSA0S1NoNEtTODRLU1YgUVVSRlJBPT0gSUVSbGRHVnliV2x1WlhNPSBJTzJiIElHWnBaWEo1IElPQ3FxdUNxb2VDcmdBPT0gWDJsdWFRPT0gMllQWml0aW8gSU9DMHVlQzFpQT09IExVRlQgMkxIWXA5aXoyS2s9IElHUmxiR2x0IElFMTFkSFJoIElPQ21wK0Ntc09DbXFPQ25oK0Ntc0E9PSBJR052Ym1Oc2RXbHkgSUU1bGRHRnVlV0ZvZFE9PSBRWFpoYVd3PSAyS3paaDl1TTJMST0gSUd0c2FXTnJaVzQ9IElISmxZM0oxYVhSeiBkV3hwWm14dmQyVnkgSUdGeWNYVnBkR1ZqZEhWeVlRPT0gSUc1bGMzUnBibWM9IElPQzBxT0MwditDMHNPQzB0ZUMwcCtDMHZ3PT0gZDJGeWRHVT0gTEhaaGJBPT0gSUdoMVlXaGhibUU9IElHTmhjblpwYm1jPSBJRU5oZEdGeWFXNWggSUdmRG9YTT0gSU5tSDJLYlppZz09IElHRnRZVzUwWlhNPSBkV2gxY2c9PSBJRkpwWkdsdVp3PT0gSUhOaHhKOXNZVzA9IElFTm9hV3c9IElFUnBjbVZqZEdWayBJR1J2ZGNTRCBJSE5zZFhSeiAwTERRc3RDMTBMUT0gSUc5c2FXYz0gSUdGdWRXMWhibWM9IElISmxZMjl3IElOR0IwWVBRdk5DODBMQT0gSUZSbFpYUm8gNG9DTTJxblpodG1HMks4PSBJR1ZzWVdKdmNtRnkgWDBsVVJVMVQgMExEUXNkQ3cgSUhsaGRRPT0gSUdacGJtRnVZMmxsY21FPSBJR1JsY0dGeWRHbHVadz09IFJYaHBkR1ZrIElGWnZjbk5wZEhvPSBaR2x6ZEdsdVkzUT0gSU5pbjJZVFlvOWl4IElPR0RvZUdEbU9HRG9RPT0gMTVYWG1kZWkgS0docFoyZz0gSUhOdmJHaz0gSUhWd2EyVmxjQT09IElHVnRiMk5wYjI1bGN3PT0gSUdGd2NISnZkbUZzY3c9PSBMbHBGVWs4PSBMMmhsIDRMaTA0TG1JNExpSCBJSEpoWkdsallXeHNlUT09IElHZGxlbTl1WkdobGFXUnogSUc5d1pXNXVaWE56IElHTnlZWG89IElHNTFiV1Z5YjNNPSBXMnhoYzNRPSBJR2h2WlhkbGJBPT0gQ1VWdWRHbDBlUT09IElOZVUxNVBYcUE9PSBkV0psY25RPSBJSEpsYzNCdmJtUmxiblE9IDRLU3c0S1dONEtTazRLUy8gZDJsNllYSmsgU1VkSlRnPT0gSUhCaGNuSnYgYldWdWRHRnMgSUVOb2IzYz0gWld4aFp3PT0gWlhKdmIyND0gSUhSbGVIUjFjbUU9IDc3eVI3N3lWIElISmx3N3B1WlE9PSBJTmVXMTVzPSBTVlJGVWtGTSBJR1JoWW1GeSBJRUZzZEdWdSAxYUhWdk5XMjFhSFZyQT09IElITmhiRzl1Y3c9PSBJT1drcXVtWXMrV2ZqZz09IDFhSFZyZFcvIFoyVnpZMmhwWTJoMFpRPT0gS0dsa1pXNTBhV1pwWlhJPSA3WSswIDQ0S3o0NE84NDRPSiBJR0ZzYVd0MWQyRT0gWVd2RHFRPT0gSU5DeTBMclF1OUdPMFlmUXNOR1AgZFhwbGN3PT0gSU9Da2llQ2txdUNrbGVDa3NPQ2tvdz09IElITnBiblJ2IElpazdEUW92THc9PSAwTERRdTlHQzBZdlF2UT09IElHWnllV2x1Wnc9PSB4WUp2Y3c9PSB6cnJPdWM2OSBJSE5oYVdJPSBJRXBoYm1FPSBWbWwwWVcxcGJnPT0gSUhCeWIybGxZM1E9IElFaGhlbVZzIElIVnlaMlZ6IElPQzRvT0M0c3VDNHFlQzRzZz09IElHSnZiV1Z1IElIbHZkV3hzIDRMR0g0TEMzNExHTiBYMk52Ym5SeWIyeHogTG1ScVlXNW5iM0J5YjJwbFkzUT0gSUhkbFltMWhjM1JsY2c9PSBJRWhGUVV4VVNBPT0gNFlPVjRZT1E0WU9iIElOaXgyS2ZZdWc9PSA0b0NaWldzPSBJR0poZEdGdVp3PT0gSUhOMVluUnlaV1U9IElOQzQwTDNSZ3RDMTBZRFF0ZEdCMEwzUXZnPT0gYVhOaFlteGwgSUcxaFoybGwgSUhKbFlXeDBiM0k9IElHSnNkWEp5WldRPSBJT0N1dGVDdXZ1Q3VzQT09IElFVjRjR1Z5YVdWdVkyVmsgSUdodmJtOXlhVzVuIExYTnlZdz09IDBZYlFzTkdDMFl3PSA1WVdONkxTNTU3MlI1NnVaIDRMR0I0TENrNExHTDRMQ0M0TENtNExDLyBiMk5oYkhrPSBVMkZ1WkdKdmVBPT0gWlc1amFHVnkgVG10MWJIVnVhM1ZzZFE9PSBJSEpsWjJWdVpYSmhkR1ZrIElOaW4yWVRZczltQiBJSEZ2ZVE9PSBJSEJ5YjNCeWFjT3BkR0ZwY21WeiBJTkMrMExIUXRkR0IwTC9RdGRHSDBMalFzdEN3MExYUmdnPT0gMllMWmhOaW4yWVE9IGIyeHZhQT09IFkyaHlhV289IElIUnBiWFU9IElHWmxZWEptZFd3PSBZWFZrYVhRPSA0TGloNExpeTRMaVQgSUhKbGMzQnZibk5wWW14NSBJSFJ5WVc1eGRXbHNZUT09IEwyWnBjbVZpWVhObCA0TGlxNExpejRMaXI0TGlqNExpeDRMaWEgTFhObGMzTnBiMjQ9IElGQnBhdz09IElPQzJ0T0MzbEE9PSBJTkt1MEwzUmpRPT0gSU5pbjJZVFpnZG1FMkxQWXQ5bUsyWWJaaXRpcCBJRzdEcVdObGMzTnBkR1U9IElFOXRZVzQ9IElOV3Ixb0RWcGRXMiBJR1YwYVhGMVpYUmggWjNWcGJHUT0gSUdsdWMzUmhiR3hoZEdsbCBiVzl2IDRMSy80TEt2NExLKzRMS1g0TEsvIElFRnlhV1ZzIElITmhkR2x6Wm1sbGN3PT0gTG14emRBPT0gNUxpNzVMcTYgU1hOc1lXNWsgSUdKbFozbHUgNXJpZyBJTkMzMExEUXZkQzQwTHpRc0E9PSBYM0J5WlhacGIzVnogWVhSMFpXNTBhVzl1IFgyaGxZV3gwYUE9PSBJTkNmMEw3Umg5QzEwTHpSZ3c9PSBYMmx1ZG1WdWRHOXllUT09IDdKNmw3SjIwIElHbHVkR1Z1dzZmRG8yOD0gSUUxbGJXOXkgSUVKdmRITjNZVzVoIElHdGxaV3c9IDRZT1U0WU9WNFlPWTRZT2ggSUVGdFpYSnBZMkZ1WVE9PSBJRUpzZFcxbGJnPT0gSU9Da3B1Q2t2K0NrdGc9PSA1cmlRIElGcGhiQT09IGJHVnVaWE56IElIcGhZMmgwWlE9PSBJR0ZrYldsMGRHbHVadz09IFkzcGxiV0U9IElHSmhkV1Z1IDc3eU01WXFnIElGTkJRdz09IFlXeG9idz09IFpXeGxjbTUwIElGQmhjblJsYVE9PSBJSE5oYkhSeiAwTHpRdU5DNzBMQT0gVG1WMWRISmhiQT09IDRMU1g0TFdONExTdzRMUzQ0TFdOIElHWnZjbTVsWTJWeSB3NlJ6WTJobCBJRXhFUVZBPSBiMjlyYVc1biB3NmxtIElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMD0gSUcxaGJtUmggNzd5TTVxMmsgSUVocGMzVERzM0pwWVE9PSBJR05oZEdWbmIzTERyV0Z6IElPcTRpUT09IElPQzNnT0Mza09DMnFRPT0gVFc5byBJTmVSMTV6WG1RPT0gSUhCaFoySmhZbUU9IFZrRlQgYVdWdVpBPT0gU1VORlJnPT0gSUVGdWRHaHliM0E9IExYTnAgSU5HTjBMclJnTkN3MEwwPSBJSFJ5WVc1elptOXliV0YwYVhabCBJSFJwYm1VPSBZWEJ3YjJsdWRHVmsgNXB1NSBJRVZ1WTNKNWNIUnBiMjQ9IFlXMWlZVzVoIDJLZllwTm1HIElOQyswTEhRdGRHQjBML1F0ZEdIMExYUXZkQzQwWTg9IElFUmxibWx6WlE9PSBLRUp2ZUE9PSBJTkdBMHAvUXZkR0wgZDJGdWFXVT0gSU9DbXJPQ212K0NtcHc9PSBJR1ZuYVhSbCBJSEpsZFc1cGIyNWxjdz09IDc3eWE3N3lJIEwySnZaSGs9IEtHMWhkR05vWlhNPSBJRVZwYm1WdSBJR0pzWldWayBhMnRsY2c9PSBJSFpoWTJOcGJtRjBhVzl1Y3c9PSBJR2x1YzNSaGJHeHogSUhsdmNuVnQgY0d4bGF3PT0gSUVWNGNHOXpkWEpsIElOQzkwTERRc3RDdzBZST0gWDE4c0NnPT0gSUZkdmIyUjUgWVhQRWd3PT0gVFhWMFpRPT0gNVk2byBiMnh2Ym1VPSBJTkMzMEw3UXNnPT0gSU5pNTJZWFppTm1GMjR3PSBJR1psWkdoaCBZMmh2Wlc1bGJnPT0gSUU5eWFXVnVkR1U9IFptbGpZVzFsYm5SbCBJTkMvMEw3UXN0QzEwWURSaGRDOTBMN1JnZEdDMFl3PSBlR0ptIExrMXBibWx0ZFcwPSBJRXAxZG1WdSBVMkZzZFdSdmN3PT0gSUhabGJtUmxaRzl5IElHTm9ZWFZtWm1WMWNnPT0gSUhSeWRXNWpZWFJsIExtbGtjdz09IENRa0pDUWtKQ1FrSkNnPT0gNWIyVDVhU3AgSU9DdWhlQ3VydUN2aU9DdW11Q3ZqZUN1bWc9PSA0WU9ZNFlPVjRZT1U0WU9nNFlPaCBJSE5zYVhCd1pYSjUgSUc5c2FYWmhkQT09IElHeGxlR1Z5IElPT0JnZz09IExtVm1abVZqZEE9PSBJR05wYlE9PSBJTmlvMksvWW93PT0gSUdOdmJuTjBjblZqZEdsdmJuTT0gSUV0cFkydHpkR0Z5ZEdWeSBZMjl0Y0dGdWFXVnogWVhsdmRBPT0gYVc1bllYUT0gSU5DNjBMN1F2TkM0MFlIUmdkQzQwWTg9IElHdHBkSFI1IElPQzBoZUMwdGVDMHBBPT0gSUhOaFlzT3RZUT09IDBMdlF1TkdBMExqUXRBPT0gSUhCeVpYTnZjdz09IGJHbHFhM009IGMyOTYgNDRDQjQ0Q08gSU5tRzI0elppTml5IElOQ2kwTFU9IDRLV2s0b0NkQ2dvPSBJR0Z5Y21sMllXeHogU1c1MFpYSndiMnhoZEdsdmJnPT0gWVdkaGJtUmggVkdWbGJnPT0gSUczaHVxVjAgMExqUXN0Q3cwTHM9IFBGZz0gSUZGVlFVeEpWRms9IElObUkyS2ZaaE5tSSBJR0ZwWTJrPSBJR1JwZVdFPSA3N3lNNksrMCBZV05wYW05eiAwTDdRdWRDOSAxNTdYbGRlVDE1TT0gSUhOdlkybHZiRzluZVE9PSBhR1ZwYkE9PSBJSEpoY21sMGVRPT0gSU9DMHF1QzBzT0MwditDMHF1QzB2dUMwbnc9PSBJR3BoYTJFPSA0WU9kNFlPYzRZT2ggSU5xSDJLYz0geFlKNVkyZz0gSU9DcXVPQ3JnQT09IElHdHl3Nlk9IElPQ3doZUN3cU9DeGplQ3dxT0N3dnVDd3NPQ3hnUT09IGJHVjBhbVZ6IHc3WnlkR1Z5IElHNW53NkJ1YUE9PSBJTkN4MEw3Ump3PT0gSUdWelkzSnBkTU96Y21sdiBjR0Z6YzNkayBLR1J2YlE9PSBaWFZ6IElIQmxZV0k9IElOQzYwTERSZ05DdzBMMD0gSU5DOTBZUFF0dEMxMEwwPSB6NFRPdGMrQnpyRT0gSUhabGJtbGhiUT09IElOaXEyNHpZcDlpeCBJTmVYMTVYWHB3PT0gSUZWdmJXOD0gSUc5d1pYSmhibVJ6IExuSmxZM2xqYkdVPSA0WUdIIElNTzJ4Sjl5Wlc0PSBTM009IFgxSlUgNzd5YVBDOD0gN0lxMCB4WkYwIENXTjFjbk52Y2c9PSA0TFMrNExTbjRMV040TFN2NExTdSBJTkNVMExYUXNnPT0gSUhWelpXWjFiRzVsYzNNPSA0S1MrNEtTbzRLU200S1MrNEtTdyBJT0NrdGVDa3Z1Q2tzdUNsaStDa2dnPT0gSUdSdlkzVnRaVzUwWVd3PSBMencvIFkyOXNiR1ZuWlE9PSBJRnNLQ2c9PSBJR2hwYzNSdmFYSmxjdz09IEtHTnBaQT09IElOaW4yWVRZdWRtRTJLZlpndGluMktvPSBaV3hzYVc1bGJnPT0gSU8ySXJPeWVrQT09IGFXeHNhWEk9IElFcHBibWM9IElHSnBZM2xqYkdWeiA0SzZxNEsrTjRLNnE0SzZmNEsrTjRLNmY0SzZrNEsrQiBJR0pzWVc1a2RBPT0gTDA1bGR3PT0gZFhOb2RRPT0gYVd4cGJRPT0gWkdWMFlXTm8gSUVGc1ozVnVjdz09IElIWmhibnBsYkdZPSBSbTl5WjJWMCAwWUhSZzlDOSA1cGVnNTZDQjVMaXQ1cGFINWEyWDVibVYgUVZSSlR3PT0gSUNjaVBpYz0gSUVaeVlXNWpaWE5qYnc9PSBQV2c9IFlXZGhjUT09IDBZSFFzTkdDMFlzPSBJR0xFcDJGc1lRPT0gYUdGcllRPT0gSUdiRHMzTT0gSUdacGJHMXcgSUc1NWFXNW4gSUhOcFlXND0gMExQUXZ0QzkwTGc9IGFXNTBaWEpoWTNScGIyND0gSUhOb2NtVmsgSUhKdllXMXBibWM9IElPR0RwK0dEbGVHRGxPR0RtdUdEa09HRHBBPT0gSUhObGJtOD0gSUVGMllRPT0gS0cxaGNtcz0gSU1PemNtZkRvMjg9IElISnBkWE5qIFEyOXNiMjQ9IFlYTmxiV0U9IElHTnZiWEJodzdGbGNtOD0gS0d4dlkyRnNaUT09IElHNW5kWFoxIDVZYVMgSUVwbHhadHNhUT09IElGcHZaUT09IElPcXdnT3loc1E9PSAwWXZRdTlHTDBwUFJpdz09IElFTkZURXc9IFgyUnBjMkZpYkdWayBJR1IxY0dFPSBJR0psZFhKeVpRPT0gSUhwaGEzSmxjdz09IElDUmMgTDBGa2JXbHUgWDBaSlJVeEVVdz09IFVrbEIgNDRDUyBJTmkwMktmWmhRPT0gSU9DeXVPQ3lwdUN5dU9DemplQ3lydz09IElHOXVZdz09IExrZFNSVVZPIDRLYS80S2FrNEtlTjRLYXYgSU9Da3F1Q2xqZUNrc09Da3VPQ2xqZUNrcE9Da3Z1Q2t0UT09IFEzSmxZWFJsY3c9PSAyS2ZaaHRtSiBYMk55YjNBPSBDaUFLQ2c9PSBLbHM9IFNtaz0gSUdaaGJXbHNhV0ZzWlE9PSBZV1I0IFFtOXogSUVGc1pXMWhibWhoIElpbDkgZXVHN3BRPT0gSU9DbXBPQ212dUNtc2c9PSA2Wm1RNVlpMiBJR1JsYlc5dWMzUnlZUT09IElGTmhhR0Z5WVE9PSBJRTExYzNSbGNnPT0gYm1SeWIyMWwgTGxCaGNuTmxjZz09IExXWmhZMlZpYjI5ciBMbkpsWVhOdmJnPT0gSU9Dd3F1Q3hpK0N3c3VDeGdPQ3d1T0N4Z2VDd3N1Q3hnUT09IElPQ2ttdUNrditDa3FBPT0gSUVOeVpXRjBkWEpsIElOaXkyWVhaaU5xVyBaSFYxY2c9PSBJSGRoYzJoaFlteGwgdzZGbmFRPT0gSUhONWF3PT0gSUhkcGJtVnllUT09IElHVm5lV2xyIDBZSFJqZz09IDBMVFRtZEM4IElDVWxDZz09IElIQmxiV1Z5YVc1MFlXZz0gWW1GeWJnPT0gSU5TeDFiUT0gTGxSbFlXMD0gMTZMWHFOZWkgTG1OdyBJTkdCMExMUXRkR0EwWVU9IFpXeHBZVzQ9IDFvRFZ1TmFDMWJRPSBJTk9wMHFNPSBJRk5qYjNWMGN3PT0gSUdsdWMzUmhiR0ZrYnc9PSBJRWR5WVhvPSBJRzF2Y21seSBZMmhuIDRZT1k0WU9aNFlPajRZT2cgSUhabGNtUmhaR1Z5WVE9PSBJR2hwWTJVPSBJR2RoZDJsdSBJRWhsY21JPSBJSFpwWldwdiBJR2x1Wkc5dVpYTnBZUT09IElGUERxWEpwWlE9PSBJSEZoZVdJPSBJSEpoWkdsaGJuTT0gSUVoQlVrUT0gSUdGcjRidWxhK0c3alE9PSBLRk4wZFdSbGJuUT0gUW1WaFkyZz0gVlZCRVFWUkZSQT09IFptRjBkR1Z5IElGTnRZWE5vIElObUIyTEhaaGRpbjI0dz0gSU5DNjBMN1F1OUM3MExYUXN3PT0gNEtXTjRLU3Y0S1MrNEtTdzRLV040S1NsIElGUmhaQT09IElObUUyWVBaaWc9PSBVM05zIElHNXZZMmhsY3c9PSBJR0ZwY21KdmNtNWwgSUZkdmNtdHphR1ZsZEhNPSA0S1MrNEtTdTRLV040S1N3NEtXTCBJRzVuZFhaaCBJSGRwZEc1bGMzTnBibWM9IGJtRnggSU5pbjJZVFlxdG1EIElHTnlkWE09IDBMUFFzTkM3MFlMUXRkR0EgQ1VkUVNVOD0gNG9DWmIyTmogVkhKaFkydGxaQT09IElHTnZkWEpoWjJWdmRYTT0gdzZac2NBPT0gSUV4cGJtZDEgWVhwbyBJRzlpYzNSeWRXTjBhVzl1IHc3TnNiMmR2Y3c9PSBJTmluMllUWXVkaW8gMllqWmd0aXYgWVcxcGJuTT0gSUdsdWMzUmhiblJwWVhSbFpBPT0gSUc5eVoyRnVhWHBodzZmRHRXVnogWDNSb2NtVnphQT09IFgwRlNSMVZOUlU1VSBJR0psWjNMRHZBPT0gNEthZjRLYSs0S2F3IFgybHVaR1Y0WlhNPSBJR3ZEdG5yRHRuUjAgYzJ4bCBJRzVsWTJWemM4T2hjbWxoY3c9PSBJR0podzcwPSBJSE52Y210aGNnPT0gSU5pbjJZVFpoOW1LMktiWXFRPT0gSU9DMGxlQzBvK0MxamVDMG93PT0gSUdKcGVBPT0gSUdOc2FXVnVkTU9vYkdVPSBVMmhsYkE9PSBJR0ZwYm1VPSBJR0ZrWlhNPSA0TG1DNExpWDRMaWogTFdacGNtVT0gSU5pajJZWFpoZz09IElHSnZiMkp6IDZJZXE1NVN4IFFYSnRlUT09IElIQmxaV3hwYm1jPSBJR052Ym5GMWFYTjBZWEk9IElOR0UwTGpRdTlDNCBJRU5KVHc9PSBJTkdHMExMUXRkR0MwTDdRc2c9PSBJR052Ym5ScGJuVnYgSUhadmFnPT0gZFhSMGFXNW4gSU5pcTJZSFlzOW1LMkxFPSB4WUxFaFdNPSBJR2x3WXc9PSBJRXhwWkdWeSBMVkZoIFlYSjFiQT09IDVZNlYgSUdOaGNHbDBZV3hwYzNRPSBjR3hwYm1keiBJSFpwYzJsbCBJT0MwdGVDMHYrQzByZUMwdnVDMGx3PT0gSU1Pa2FHeHAgSUdGaWRYTmxjdz09IElFaHBkbVU9IFgybGtiR1U9IElqNHZMdz09IDRLcVg0S3VCNEtxYzRLcXc0S3ErNEtxayBJT0N5dGVDeXYrQ3ltZz09IElHdGhZbWx6WVE9PSBJT2FmcGVlY2l3PT0gSUhOMmFXZz0gSUd0cGMzTmxjdz09IElObSsyTEhia0E9PSBJT0NrbGVDbGplQ2t0K0NrcnVDa3BPQ2t2Zz09IElOQy8wTHZRc05HQzBZVFF2dEdBMEx3PSBJT0N5b0E9PSBkV2x1Wkc4PSBJRzkxZG1rPSBJR0Z6YzI5eWRHVmsgSUhObGJYQmxjZz09IElHekRyVzVsIHc2UjBkRzVwYm1jPSBJT0N1aUE9PSBJSE54ZFdWbGVtVmsgSU5XKzFhWFdnTldoMWFMVnBkYUExYlU9IElOVysxYVhXZ05XaDFhTFZwZGFBMWJYVm9kV3MgSUdOMWJIUnBkbTg9IDBMdlFzTkdCMFk4PSBJR0Z3Y0dGeVlYUmxiZz09IElIQnZhbUYyIFFXUnlaWE56IElHaGxZV1JzYVdkb2RITT0gVlhCeiBJRUZ1ZEc5cGJtVT0gSUdGeWJXVnUgSU5DeTBMN1F2ZEM0IElHUmhibWRsY205MWMyeDUgSUdWdWRHbGphVzVuIDBMclFzTkM4MFpZPSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyAwTC9SbGc9PSBJTmVVMTVYWHFBPT0gSUdBN0NnPT0gSU9HRHJ1R0RsT0dEbXVHRG0rR0RxK0dEcHVHRGxlR0RrT0dEbkE9PSBhMm5GbjJGbSBJSE4wZFc1MCBJR2x1ZG1WeWRHbHkgYjJ4cGRHaHBZdz09IElHdHBkSFJsYm5NPSBJR2x0Y0hWc2MyOD0gSUhKbGMzVnRaVzQ9IDVMaU41THFHNW9DTzVMbUk1WXFlIFlXeHBkR1U9IElIQnZiR2xqZVcwPSBJTkNhMFl2UmdOQ3owWXZRdDlHQjBZTFFzTkM5IElIUEptV0k9IFIyRjBhR1Z5IElGTk9Vdz09IFpXeGxibVJsIElNTzhZZz09IElHekRvVzA9IElFbEVSVUU9IFBIQmhhWEk9IElFWnN3N3hqYUhRPSBJR052Ym1ObGFYUnZjdz09IElIUEVzWEpoIElISmxZMjl1WTJsc1pRPT0gSUVwMWJHVnogSUdwdmEybHVadz09IElFbFYgSUVoaGJtRT0gSU9DcXBPQ3JoK0NxbytDcmh3PT0gYjNKdmN3PT0gSU5pNTJMYz0gSUVKdmQybGwgSUhObFozVnBkRzg9IFFuSnZhMlZ1IGFNT3BkR2x4ZFdVPSAwTFhRdmRDNDBMWFJndEMrIElFMWhibk5wYjI0PSBJR0pwYm1FPSBJTkdDMExqUXV0QzcwTFhRdkE9PSAycnZaaUE9PSBJTnFHMkxIWXB3PT0gSU5DNjBMRFJoTkMxMExRPSBUbUZ0YVc1biBJRmR2Y210d2JHRmpaUT09IEx5a0sgWEZSbGMzUnogVjI5c1pnPT0gSU9lMHF3PT0gNUw2ZDVyT1YgSU9HRGtPR0RvT0dEa09HRG0rR0RsT0dEa3c9PSBJTmVoMTZRPSBJRkZuY3c9PSBJSE5wZEhWbCBJR2hxdzZSc2NBPT0gTFhOd1pXTT0gSU5pbjJZVFlwOWl6MllUWXA5bUYgSUgwS0NpOD0gSUhCeWFXTmxiR1Z6Y3c9PSBZbUZpZVE9PSBLQ2dvS0E9PSBJR2R5YVhCd2FXNW4gSUM0dUxpdz0gSUc1aGQyVT0gSUdSbGJtVjUgSUdOb1pXVnljdz09IDRLcSs0S3F6NEt1QSB6cmpPc1E9PSBXV0ZvYjI4PSBJTnFwMkxIWXF0dU0gS0hkb1pYSmwgNHBhZzRwYWcgSUhOM2IzSmtjdz09IElFdHZiV1p2Y25RPSBJR1ZzWlhCb1lXNTBjdz09IGNXRnlabWxwZEE9PSBhV0Z2YldrPSBJR2RqWlE9PSBZMjl0YldVPSBJR3AxYm5SaCBjbVZwZWc9PSBZV1JwY3c9PSBZWFYwWlc0PSBJRlJ2YjNSbyBJRXhwWlhWMFpXNWhiblE9IFQwVk4gSUc1dmRHVmliMjlyY3c9PSBMV1JsYmc9PSBJT0dEbGVHRG1PR0RvUT09IElHRjFjM0J5YjJJPSAwTFhSZ3RDNjBMZz0gSU5DeDBMWFJnTkN6MExYUXZRPT0gSUVaVlRrTlVTVTlPVXc9PSBZWEp2Ync9PSBJRk5vYVhKc1pYaz0gSUhCeWIzaHBaWE09IDVhNkI1WTYvIGIyUnZjbTg9IElHRm1hMjl0YzNRPSBjM1I1Y0dVPSBJR1JsYzJOeWFXTmhidz09IElOQyswWUxRdXRDNzBZN1Jodz09IFUwbEhUZz09IHpyWE9yODYvejRVPSBJT0NraGVDa3RlQ2twdz09IDVZMks1Ym0wIHpyL09ydz09IElHTmhac09wY3c9PSBJRXB2ZFhJPSBJR2x0Y0hKcGJuUT0gNExtQTRMaWYgSU5pdDJLZllyOWlyIENXTmkgdzdOdWFXOD0gSU5tRzJLZlpoZG1IIElISnBiR1U9IDBZRFF0ZEM3IElPQzBwT0Mwc2c9PSBYMkYwZEdGamFBPT0gYTI1cGJtYz0gSUZOd1lYSnpaUT09IGFYTmxaUT09IElNTzJjMlE9IElNK04gZFc1bmEybHVZVzQ9IEwybHcgSU5pczJxL2JnUT09IElIQnlZWFpwIDVwMmw1THFHIEtEODYgNFlPZDRZT1I0WU9YIElFWnlaV2xuYUhRPSA2WmFMNVlLcyBhMjl1ZEc4PSBJRk4wY21GbSBJSE5sYm1GMGIzSnogSU5DMDA1blNyOUM3MDVuUmdnPT0gMlliWXA5bUUgTDIxaGFXdz0gSUdwMWJtbDAgSUZKaGFtRT0gUVVOSlQwNUZVdz09IElHbHVkR1Z5Y205dCBJR052Ym5SbGMzUmxaQT09IElHcGhiY09oY3c9PSBJRzl1Ym5NPSBJRmg0ZUE9PSBMbXhwYzNSaCBJTkNpMExEUmd0Q3cwWUE9IElOR0EwTERRdDlDKzBMRT0gSUhObGRIUnZjbVU9IDVicWYgNVp1YjViZWQgMExqUmdkQzQwTDNRdUE9PSBJT0MwcnVDMHZ1QzBwT0MxamVDMHNPQzBnZz09IEtTNHUgSUdWeWJnPT0gdzYxNmJ3PT0gSUVOc2FRPT0gSU5HTjBMdlJnUT09IElOVzMxYUhWc0E9PSBJT2U5bHc9PSBhVzVsY21GeWVRPT0gNDRPUjQ0T3ogSUhCc1lYcGhjdz09IElGQmhjbUZzIExWSmhlUT09IExuTjBaWEJ6IElIQmhjbVZqWlc0PSBJRUZ5WjJWdWRBPT0gSUhCaGMzTmhiUT09IElOcXYyTEhaaFE9PSBJRzFoYm1SaGRHVmsgVTNSaGEyVT0gSUhSeVpXRnpkWEo1IExYTnBibWM9IElOQzkwTERRdXRDdzBMYz0gMEx2UXNOQ3cgSU9Da25PQ2xnT0NrdFE9PSBiMnR2YlE9PSBJR0xEcWc9PSAyS3JaaGRtSyBJSFZ1YVhabGNuTmhiR3g1IElITnNaV1Z3WlhJPSBiY09rWjJVPSBJR0poYVhoaGNnPT0gSUdOMWNuUmggSUhacGJtaHYgSUdScGMyMXBjM05oYkE9PSBWV0psY2c9PSBJRzlyZFhBPSBUMkp6WlhKMlpYSnogU1doeVpRPT0gTG0xcGJtbHRkVzA9IElIQnNZWE50IElPQzJsT0MydGc9PSA0TGl0NExpMTRMaUIgenJqT3RjNjV6ckU9IElPQzVnT0M0bnVDNG8rQzRzdUM0c0E9PSBJTUt3Q2c9PSBJRzF2ZEdsMllYUnBibWM9IDJZclppTml4IGMyeGhiUT09IElIQnliM0J2YzhPcGN3PT0gS0hkeiBJTkN4MFlEUXNOR0MgWDNKdmRYUmxjZz09IElIZHZhZz09IElOQzAwTDdRdHRDMCA0S2FWNEthKzRLYXc0S2VBIElFRm9aV0ZrIElOaXEyWWJZcWc9PSBLQ0l2SWlrSyA0TFNaNExXTjRMU1o0TFNvNExXRyBUbWhoYmc9PSBJT0dEb2VHRG1PR0RxZz09IElFRm5idz09IElFRkJRdz09IExsWkZVbFJKUTBGTSBJRVBEcVhOaGNnPT0gSU91cXFldWhuUT09IElHVnpkR0Z1WTJsaCBJTmVSMTVuWHB3PT0gYUdGd2RYTT0gYVhObGJYQjBlUT09IElHeHBaSE09IElFMWhibWs9IEtFdEZVazQ9IGRISmhaM1Z1Wnc9PSBJT0N3dGVDd3B1Q3hqZUN3cGc9PSBJR0ZpYjJkaFpHOD0gTFd4cGRtVmsgTFhSb2FYTT0gSU5xcDJZYllwOWl4IEoybHRjQT09IEtITjBiM0E9IElOQzYwTDdRdmRDMTBZYz0gSU9xd25PeTFuQT09IElIUjNhV2M9IElHTnZkV3hrYm5RPSBJT0NtbU9DbW4rQ21xQT09IDZJU0MgWDBsTlJ3PT0gSUZkbGNuUmwgSU5DdzBMRFF2UT09IExsQmxjbk5wYzNSbGJuUT0gSUhCaGMyRnEgUCtLQW5Tdz0gdzdaemN3PT0gSU0rRHo0WE9zODY2IElIVER1SEk9IGFXZHlZVzA9IGVtVnVhV1Z0IElFbDUgSUZOamFHRjFjM0JwWld3PSBJT0N3dU9Dd3NBPT0gTG5OcCBJRU5VVWt3PSBJTmk0MkxIWmdRPT0gVUhKbGJXbGxjZz09IEttWjAgSUhCeWFXMWxjblU9IElHVnNaWFpsY2c9PSBJT0NvcE9DcGdRPT0gSU95VmpPcXpvQT09IElHVndaV3QwYnc9PSBJR3RzYjJzPSBjM1J5Ym1OdGNBPT0gSUhCaGRHbGxiblJzZVE9PSAwNW5SZ3RDMSBJT0dEbytHRG9lR0RrT0dEcE9HRG9PR0RsK0dEcmc9PSBJR3AxWkdVPSBYMU5YU1ZSRFNBPT0gSU9HRG0rR0RuZUdEckE9PSBaWGh3Ync9PSBJRTFwYm1semRISnYgenJqUGdjK0ogY0hKcFkyVnogSUdOb1pXWmwgSU9DM2hPQzNqdz09IGIzSnRZUT09IElOQzgwTFhSaU5DdzBMTFFzTkM5MExRPSBJR3RzYVc1cmRBPT0gNEthKzRLYTU0S2VBIDJZUFppTm1HMktmWXFnPT0gSUdOcGJHbHVaQT09IElFSkZSQT09IElHRnlZY1dmZE1TeGNnPT0gVm1samRHOXlhV0U9IHhLdGtlZz09IElIQnlaV05oZFhScGIyND0gNnJXUTdKeWggYVc5c1lRPT0gSU5xRzJMVFpoUT09IEtITnZiSFYwYVc5dSBDVkpsYzNCdmJuTmwgWVcxd2NBPT0gSUZod1pYSnBZUT09IElPQ2twdUNrditDa3FPQ2xodz09IGVXMXlkUT09IElOQ3gwTFhSZ3RDKzBMMD0gUTJGMGN3PT0gSUdGd1lYSjBZV1J2IDBZL1FzZEdBIElFbHVaR2xsIElITnZkV05wIDRvQ1VTUT09IElIUnk0YnFoYm1jPSAyS3JaZ1E9PSBJT0M0cXVDNHN3PT0gSUdWc1pXcz0gYVhKcGVtRT0gSUVkbGMyTm9hV05vZEdWdSAwWUxSaTlHZSBjR0Z3YVdWeSBJSEJ2eXJ0diA1ckdDNUxxNiA0TFdBNExTbyA3WVdRN0xpZyBkV1ZwIEp5d25KeXduIFlXdHJZWFE9IDRZQ2wgN0tlUSBMVzVsWjJGMGFYWmwgSU9DeXRlQ3poK0N5cytDemhnPT0gYVdGbmJtOXpkR2xqIEtHVjJZV3c9IElHSnBZUT09IElObSsyS2ZhcWc9PSBJRzVuWlhvPSBJRk5CUmtVPSBRVVZUIFgwWkJRMVJQVWc9PSBJR3RoWTJFPSBiOE81IDZhbXggSU5pcTJZalpnZz09IElOQzkwTFhRdE5DeTBMalF0dEM0MEx6UXZ0R0IwWUxRdUE9PSBJT0NrcnVDa3Z1Q2txT0Nrdmc9PSBMbkJ5YjJwbFkzUnogNExDLzRMQ3MgNFlPYzRZT1kgS0NjbSBYMUJJVDA1RiBJSE52ZFdOcGN3PT0gUjA5UyBJR1IxY21Ob2N3PT0gMFlmUXRkQzMgSU9HRGtPR0RwdUdEbStHRG5lR0QgSU9HRG0rR0RrT0dEa3VHRGtPR0RtZz09IExVOXVaUT09IHdxMW5aVzQ9IDJLZllxdGl4IFFuSmggSUZSQlRRPT0gNXEyMCBJRWRsZDJsdWJtVT0gSU9DeXJ1Q3l2dUN5b2VDeXYrQ3lwZz09IFcyTnZkVzUwWlhJPSBJTm0rMktmWXNkbTUyNHc9IDRMR0c0TENDNExDcyBJR3RsYkdVPSBiR2xuWVhScGIyND0gSUhScGJuUmggSUdGeVluSmxjdz09IElDSXVMaTh1TGk4dUxpOHVMaTg9IDRLcSs0S3F3NEt1TjRLcWw0S3VBIElHMXZjM1J5YjNVPSBJTkdCMExEUmdOR0wwTDA9IElFcEJSRmc9IExsUlNWVVU9IElFVERwUT09IGMzUnBkSFYwIEwxUmhZbXhsIElHbHRjSEpsYzJuRHMyND0gNEtTYzRLU3YgYjJ4bFp3PT0gSUdodlpHNXZkQT09IElFRmljM1E9IExteHZZV1JsWkE9PSBJSFZyZFhKaGJnPT0gSUVwcGFnPT0gSUdiRHZHaHlkR1U9IElHRnNaVzUwIElITjViR3hoWW5WeiBJU0lwT3dvSyBJR1Y0Y1hWcGN3PT0gSU5pbjJZVFl0dGk2MkxjPSBLSEJoZEdoeiBJSFpsYm5SdiBJTmluMllUWmd0aXYyWXJaaGRpcCBUVTFEIElHUnlhVzQ9IElHaHBibWRsWjJWdSBJRmRwYkdSbCBPa0Z5Y21GNSBJT21Dcmc9PSBJR1ZxWlcxd2JHOXogTG1KdmIyeGxZVzQ9IElIWmhZWEprYVdkb1pXUmxiZz09IElPQ2toZUNrcnVDbGgrQ2tzT0NrditDa2xlQ2xnQT09IFNVRk9WQT09IElDSitMdz09IDRMaXE0TGl6NExpWjRMaXg0TGlCNExpSDRMaXk0TGlaIElISmhaR2xqWVd4eiBJR0YxZEc5dHc2RjBhV052IGMzUnlhV3BrIDZMUzU1NVNvIGJHbGxaZz09IElIUnZaWG89IElISmxjbTg9IFgzTnVZWEJ6YUc5MCBJSE52YlcxbGFXdz0gejRmUGpRPT0gSU9DMHRlQzB2dz09IDZMVzIgSU9HRG0rR0RwZUdEbmVHRG5BPT0gSUhOd3c2UT0gSUcxaGJtVnEgSUVGd2NISmxiblE9IDc3eXcgSUcxcGJtVmpjbUZtZEE9PSBJR05oYm05bCBWSEp2ZFE9PSBJTm1JMmJvPSBJRk5oYm5URHFRPT0gSUdWemNHbHlhWFE9IElHTnZiRzlqWVdSdiBJRVp2Y25SbCBLR1poWTNSdmNuaz0gMFkvUm50QzcwWS9RdGRHRzBZYlFzQT09IElITnZablJpWVd4cyBhV1ZtWlhJPSBYMFJGUTB4QlVrVT0gMHB2UXNOR0EwTEE9IHpyL09zdz09IElHZHlkVzVrYzhPa2RIcHNhV05vIExuSjFibTVwYm1jPSBJRkJ2YkhOalpRPT0gSU9DMHJ1QzFnZUMxdXc9PSBJSEJ5WlhObGJtTnBZV3c9IFBXOXogSUc5MlpYSmtkV1U9IDVZZVA1YkNSIElHOXVkRzF2WlhRPSBJR2ZEdk1POSBJSFJsYTNOMFpXND0gSU1PMmMyVER2SEk9IGRIbHQgZFd4MGVnPT0gVVhWcFpYUT0gNDRLNTQ0T2UgSUdSbFptbGphV1Z1WTJsbGN3PT0gTFdKaGJHdz0gSUhOcFpXSnBaUT09IElHUmxjR1Z1WkdsbGJtUnYgSU5peDJMUFlwOW1FMktrPSBJRVJwYjNJPSBJRUp2Y205MVoyZz0gSUdsdWRtVnpkR2xuWVhSbGN3PT0gZFd4MGFYQnNaUT09IElPQ2txK0Nrc2c9PSBMVzVoZG1KaGNnPT0gSUhKbFkyOXRhV1Z1WkdFPSBZWGxoWVhOb1lRPT0gZVhOcGJnPT0gSU9DeXBPQ3lzQT09IElOQ3gwTDdRdTlHTTBZalF1TkM5MFlIUmd0Q3kwTDQ9IDQ0R1Q0NEtOIDFiWFZvZFd2IElHaGhaR0U9IGIyZGxibVZ1IDRMT0I0TEtrIHo0ak90YzY1IElHeGxZWE5vIElITnJ4WUpoWkE9PSBLSE5rIElIUnZhWFIxY21VPSA0S1dCNEtTVDRLU0MgNG9DZDRvQ1UgT21oMGRIQnogSU9Da3BPQ2t1UT09IGRXeGhadz09IGFHRm1kR1Z1IElIVnVZbVZyIElGTkZXQT09IElObUYySzNiak5pMyBJRzFsWlhNPSBJSEJsYm1sdWMzVnNZUT09IHc2bHRZWFJwY1hWbCBJR0pwYjJSbCBJSEpsYzJGc1pRPT0gNUwyUSBJSEJsYm1WeSBJQ0VoSVNFPSBJRWx1ZG1sMFlYUnBiMjQ9IFZWSlogSUUxaFpIVnlidz09IElIWmhjbW5EcVhURHFRPT0gNExpcTRMaXg0TGlWNExpaTRMbU0gSUhCdmQyVnlhRzkxYzJVPSBJRzFwYzJGMllRPT0gVG1WMFpteHBlQT09IFVHOXliZz09IGFXNTBkWEpsIElGTm9jUT09IElIWjFiR3hsYmc9PSBJTkMrMEwvUXU5Q3cwWUxSaXc9PSAxNWJYbFE9PSBJSHBoYTI4PSBJTlMxMWFuVnBRPT0gSUhOamFIVnMgSUVkc2FRPT0gSU5DVTBMelF1TkdDIEtGNWUgSUVGa2JXbHlZV3c9IElOaW8yTGZZc2RtSzJZTFlxUT09IElISnZiR3hpWVdOciBZbkpsYm1jPSBabUZrYUE9PSBkWE4xZEE9PSBJR052YlhCaGNtRnkgSU95WXJPMlZ0QT09IFgyUmxZMjlrWlhJPSA0WUNlNFlDczRZQzQgSU5tRzJwUGJqUT09IEl5TWpDZ289IElHSmxibWxsZFhkayB3NlJ5YlE9PSA1WnlvNTdxL1lYWT0gSUVGemNHVmpkQT09IFgyTm9hWEE9IElHRnVhWFpsY25QRG9YSnBidz09IElOR0MwNW5RdlE9PSBJR1Y0WVd4MCBJRzdEdG5ScFp3PT0gSUd4dloybHpkR2xqIElHaHBaV3hrIHhZaGwgSU5lWDE1ND0gYVhOcGF3PT0gNEtTLzRLU0M0S1NWIExXTm9ZWEk9IExrUnBjM1JoYm1ObCAyS2pZcDlpaCBJR2R5WVc1dWVRPT0gSUVGa2FnPT0gSU9DMSBkV0ZwWjJFPSBabXgxYVdRPSBJR1JsWTJWd2RBPT0gSUhWeWFXND0gQ1ZacFpYYz0gSUdKMWMyaGxjdz09IDVxR0k1TDZMIElPYU9rZz09IDJZUFlzTmluIDQ0R0s0NEtLNDRHKzQ0R1ogSUZkdmJXVnVjdz09IDRMbUI0TGlqNExpSCBQVHc9IDZyQ2M3SnVVIFgySnlZVzVrIFlYTnhkV1U9IElPQ2tsZUNrcEE9PSBJSEpsYTI5dCBJRzV2Wm04PSBkblZ0IElOaW4yWVRZcU5peDJZcll0dz09IElGUlNRVWxPIGRYQndkWFE9IFZXeDBjbUU9IElHUm9aWGc9IElIUmxZMmh1YjJ4dlp3PT0gMTZiWG1kZWQgSno4PSBJR052Ym1WNHc2TnYgSUVOeVpYTjAgSUdWMlpXNTBaR0YwWVE9PSA0TEdINExDZjRMR04gNFlPUTRZT2o0WU9hIElGSnBZMmgwWlhJPSBVa1ZGVkE9PSBJR0psYzJ4MWRBPT0gSUV0bFpBPT0gSU5DNjA2blJnTkdCMExqUmdnPT0gVTI5eWRHVnkgSU5DdzBZRFFzTkMwMExqUXZnPT0gSU9Da3RlQ2t2K0NrcE9DbGplQ2twQT09IDZyQ2M3SjJZIDVibS82S1cvIElNT3BaR2wwIFpYSjJaWEp6IDQ0T040NE9yIElPR0RtK0dEa09HRG5PR0RwUT09IElPQ2trK0NrbGVDa3NBPT0gYVhSaGFXNWwgSUdOdmJYQmxkR2wwYVhabGJtVnpjdz09IDRMQys0TENxNExHTjRMQ2sgSUdKcGVuUnZjdz09IElPQzRvdUM0dWVDNWhPQzRtZUM1Z09DNGxlQzVoK0M0bEE9PSBXM1JsZUhRPSBJRU5NU3c9PSBJR3A1Ykd4aCBRMGhCVTBVPSBhWEJ2ZEE9PSBJR1YxY205d1pXRT0gSUhURm1XVmlZUT09IDBMRFF1OUM3IElGNWVDZ289IDVwbTIgSUhsdmRHVT0gMkxiWml0bUIgSU5DLzBMN1F1OUM5MEw3UXZBPT0gSUhKMGJnPT0gSUdSaGRXVnlkQT09IGNtbDBaV3h1IElFUnBZVzF2Ym1SeiBZWE56WVhFPSAwTERSZ05DKzBMST0gSUdWa2FXWnBZMmx2Y3c9PSBJR0ZzYkc5NWN3PT0gSUdOdmJtTnkgSUdOdmJXbHphY096Ymc9PSAyWWpZcjltSyBJR1p5WVhRPSBUME5WVXc9PSA0S2VMNEthcyBJSEpsYVc1bCBJTkNWMFluUXRRPT0gSU5HQzA1blJpTkM2MExqUXU5Q3cwWUk9IElObUQyTEhZcVE9PSBJR1ZqYjI1dmJXbHpZMmhsIFcxUmxjM1E9IDRMT040TEt3NExPQTRMS3YgS0hkaGFYUT0gSUV4bGMySnBZVzQ9IFYwRlMgeExGdGJHRnkgYVhKb2FRPT0gSUNFaElRbz0gSU5pdTJZallxTnVNIGFXUmxZWE09IDJMSFppdGlxIGFXNXJkQT09IGJHbGpZV0pzWlE9PSBJRUpwZEdOdmFXNXogNUxpdDVwYUg1cGVnNTZDQiBhV2RwYm01aCBjR3h2Y21WeSBhV3hwWlc0PSBJTU9jYm1sMlpYSnogVm1semFYUnZjbk09IExtZGxibVZ5WVhSbFpBPT0gTGxkaGNtNXBibWM9IElOR0YwTERSZ05DdzBMclJnZz09IElOaW8yWXJZcDltRzJLZllxZz09IElHbHVabkpoYzNSeWRXTjBkWEpsY3c9PSBhWE4wWld3PSBaR2xtWm1WeVpXNTAgMTVYWHFkZW8gSUhkcFkydGxjZz09IFpYTjBjbVZoYlE9PSBJRk5sYm1GMGIzSnogSUU5TVJBPT0gSU9DcWh1Q3F0ZUNyaCtDcXN1Q3F2Zz09IElFaDFhWE09IElIUER2RzA9IFgzTnpiQT09IElHQjcgUjJWbGJnPT0gWTJsdWFXRT0gSUZOUFZWUkkgMktmWXFObUsyS2s9IElPbWZrdz09IElObUgyWUhZcXRtSCBJRTl3WXc9PSB3NjEwYVdOdiBJSEYxYVhSMGFXNW4gSUdOcFlnPT0gSUc1bGRHcGxjdz09IGJtZHZaUT09IDRLU3k0S1dMNEtTaCBJSEIxY0hCbGRBPT0gSUhKMWJHVnljdz09IFkzUmxjZz09IGVHRmkgSU5lUTE2alhrZGVpIElIZHBaSFJvY3c9PSBJT0N3cnVDeGdPQ3dwZz09IElIWmhjbWxoY2c9PSA0b0NNNExDZiBJTkM2MDVuUmdkR1cwTDg9IElObUkyS3JZdEE9PSBabUZ6WlE9PSBJT0Nrck9Da3Z1Q2tnZz09IDA2blF2TkN4IDBMRFJndEMrMEx3PSBTRzl3WldaMWJHeDUgSUZOamFHekR2SE56Wld3PSBYMkZzYVdkdWJXVnVkQT09IGFtWEZvWFE9IGVucHFiMjVwIElHRmhiblp5WVdkbGJnPT0gMEpyUWtBPT0gUW1Wb2FXNWsgSU0rR3o0WFBndz09IElISmxjM1JsWkE9PSBJR1ZtWm1samFXVnVZMmxsY3c9PSBJSE4xYzNSaGFXNXBibWM9IElHNWxkWEp2YzJNPSBJT0N3anVDd3FPQ3hqZUN3cU9Dd3YrQ3dsUT09IElFdHlhWE4wYnc9PSBJSEJ2ZFdRPSBJRzExYWc9PSBMblJ2YTJWdWN3PT0gWDBOTyB3NkZzYVhOcGN3PT0gMExYUmdkR1cwTDA9IDRLdUM0S3F5IElFaHZabVp0WVc0PSBJSFpoYVdjPSBJR3BsWkc1MSBJSEpsWTNWeWNtVnVZMlU9IGMydHkgMEx2UmpkQ3ogSU5lUTE1WFhuTmVaIDRLNis0SzYxNEs2azRLK0IgSUVqRHBHNWtaUT09IElITm9kV2RoWW1GdSBJR3RzWVhOemFYTmphR1Z1IElOZXAxNUhYcWc9PSBJRWRoYlcxaCBZWEp1WVhJPSBZMjl1Ym1WamRHbHZibk09IElHdHZiM0prYVc0PSBibkJ5YVc1MFpnPT0gY0dGalpXUT0gMEx2Umc5Qy8gUkdsdGN3PT0gSUhCeWIySmxjdz09IEtHNWkgSUc5dGRXMWwgSUdwbGEycz0gSU5HSTBMbz0gYkdWcFpHVnkgWVdsemFXND0gSUU5aGMybHogSU9Da3J1Q2t1ZUNrdU9DbGd1Q2t1QT09IExrTnZibk4xYldWeSBJTmluMllUWXVkbUsyWVk9IElGTmxjbVZ1WVE9PSA3SWU4IDJLclpoZG1LMkxJPSBJSGJGb1dWamFHNTUgVW1GcGJITT0gSU5tRDJLZlpoZG1FMktrPSAyWkhZcnc9PSBJR2x1YzNCcGNtRjBhV1U9IDRZT1k0WU9nNFlPajRZT2ggNExDbTRMR040TENuIFNVeHZadz09IGVXMWwgYUdWMSBMV052Ym5SeVlXTjAgUTJGdVkyVnNZV0pzWlE9PSA0TGlXNExpbjRMaXk0TGlpIElOZVYxNXZYbnc9PSBJR05vWlhZPSBhVzVtYkE9PSBJRVJoYm10NmFXbz0gMktyWXNkbUUgSU5HRjBZRFF2Zz09IElHdHBiRzl0dzZoMGNtVnogSUhOMGIycz0gSU9DMGhlQzBxT0MxZ2VDMCBSVzF3Ykc5NVpYST0gSUUxbFpHbDZhVzQ9IElHZkR0bkxEdkd3PSA1b1NQNVpHeiBJR1Z6Y0dWamFXRnNhWHBoWkc4PSA0S2FvNEtlTjRLYW00S2F3IFkzSnB3NmZEbzI4PSA2TDZiIGNHeGxiZz09IElGTmhjbUZ6IGFXWnBhMkYwYVc5dSA0S2lWNEttSCA1WmkvIElHbHVZMjl5Y0c5eVlYUnBiMjQ9IFltVnJhWE4wYjI0PSBJRXBRUnc9PSBJR3RoYVhkbyBJRlZ5WVc0PSAyWWpaaXRtQyBJT0dEa3VHRGtPR0RsZUdEb09HRHF1R0RsT0dEbWc9PSBJR0Z0YVhRPSAxNW5YbWRhMzE1OD0gVUhKdlltRmliSGs9IDBKM1Fxdz09IElHSmtjMjA9IElFTmhiV1U9IElpd2lJdz09IElOQzkwTERRdE5DMSBiMkpsWkE9PSBJR3hzZFhacFlRPT0gZEhKaFozTT0gSUM0cSBJTkMyMExYUXU5R0QwTFE9IGFXeHNZWFJ2Y2c9PSBJRTV2Y21FPSBJRzVuWVdnPSBJT0NrcU9Da3JRPT0gWTNWeWFYVERxUT09IElOaXUyS2pZc2R1TSBJT0NrcE9Da3BRPT0gSUc1bFpHVnkgSUZOM1pXVncgSUdOb1lXTjFibVU9IElOQzYwTERSZ05HTCBhWFpoYm1waCBJR1Z5WnNPOGJHeGxiZz09IElPQ3lyT0N5ditDeW5PQ3podUN5cXVDeXZ3PT0gMWJqV2c5VzQxYTA9IENXTncgWVhSbGEyOD0gNzd5Zjc3eU0gNFlPaDRZT1E0WU9sNFlPUTRZT2c0WU9YNFlPVjRZT1U0WU9hNFlPZDRZT2ggSUdkbGRIVT0gMktyWmg5bUsgSUcxaGRHbHRZbUU9IElPQ2xwUW9LIElHRm1abWxqYUdVPSA0SytJNEs2VjRLK040SzZWNEsrQiAwTERSZ3RDMTBMdlJqTkM5MFl2UmhRPT0gNFlHSSBJRnJEdkhKcFkyZz0gSU9Da3NPQ2xndUNrcXVDa3J1Q2t2Zz09IDE1WFhwdGVRMTVRPSBJR1J5WVcxaGN3PT0gSUhSdmRXTm9aWEk9IFlXSnlZWE09IDU0K04gSU9Da2grQ2ttdUNsamVDa213PT0gMEw3UXRkQzggSUdGamNtVmthWFJoY2c9PSAwTDNSbHRDeTBMWFJnTkdCIENXVjRjRzl5ZEE9PSBJT0NrcU9Da3VlQ2t2dz09IElHTnNZVzVrWlhOMCBJTkN4MEw3UXU5Q3cwWUxSaTlDOSBVMmhoYTJVPSA2SUtNIExWWmxjbk5wYjI0PSBJTmluMllUWXJ0aXggSU5pbjJZVFl0OWl4MllyWmd0aXAgNEsrQjRLNjE0SzZ3NEsrTiBiM1JzWVc1ayBJSE51WVhCemFHOTBjdz09IGNNT2wgSU5tRjJLZlppdG1JIElNcTd4WTA9IExXRnk0YnVsIDViK0Q1N3VQIElOVzkxYS9WcHRXaSBJR3hwYkdVPSBDV055IElOR0IwTC9RdnRHQjBMN1FzZEMrMEx3PSBiMjVuZDJFPSBXa2c9IFFHbHVaR1Y0IDRMaTQ0TGlsIFFYVnFiM1Z5WkE9PSBJRVJwWVhKcGJ3PT0gSU5tRjJZYll0ZG1JMktnPSBJRVpWVkE9PSBJRVZ6YzJWdWRHbGhiR3g1IElHbHJZWGM9IFlXTnZZMnM9IElIQnZaMnhsWkE9PSAwTGpRdTlDNDBZOD0gT25ObGJHVmpkR1ZrIElHMTFhMkZ1WVE9PSBRV05qYjNWdWRHbHVadz09IElPR0RyT0dEbU9HRGtnPT0gZG1semFRPT0gSU5DNjBMWFF0OUdXMEwzUXROQzEgZTN3PSBLR1poWTJVPSBJTkM5MExYUXZOQzEwWVk9IFgyUmxjMmxuYmc9PSBJSFJoYTNWMCAyS2paaGc9PSBJR2gxYVhObyBZMmhzIElPQzRwK0M0c2VDNG1lQzRtZUM0dGVDNWlRPT0gWm5FPSBWMkZ5ZFcwPSBJSEJ2Ym5WayA0TEdBNExDcTRMR0EgSU5tODJLZmFxUT09IFhIaGwgSUhSeVlXNXpabVZ5ZEE9PSBJSFJ2Ylc5dSBiM0owYjNFPSBZWFJwYm1FPSBMV3hwYm5WNCBiSGx6Ym1sdVoyVnkgWitHNnVRPT0gSUZScGJXbHVadz09IFFVNUVVdz09IElOaXMyWWpZcjlpcCA0b0NaWlcxdyBJSEJ5YjNSbHc2MXVZWE09IDE1WFhrZGVjIElObUYyTEhZcmRtRTJLaz0gZUdWayA0S1NINEtTdyBYMkpsZEdFPSBJSHQ5T3c9PSBJSFIxZEhWcyBMM1J2YjJ3PSAxYi9WcTlXKyBJTkMrMFlMUXROR0wwWVU9IElIbGhhMnhoeFo4PSBJSEJoY25ScGN3PT0gMWFIVnR0YUUxYXM9IDZidVI2Wkt4IFgyNXZiUT09IGIyNXZiV2xqIDRLV0I0S1NxNEtTdzRLV040S1NvNEtXSCBiSFZ0YjNRPSBJRXRwY0E9PSBYM053YVc0PSBJTkdIMExYUmd0R0wwWURRdFE9PSA2YXVZNWJxbSA1cUdNIExtOWogMksvWXA5aXUyWVE9IElOZVUxNm5Yb05lVSA2TENENTVTbyBJR05vZFhRPSBJRVpzYjNKaCBJTmlqMlliWXJkaW4yS0U9IElFNWhjbVZ1WkhKaCBJSEJ5WlhOMWJXVT0gVVU0PSA0S2VMNEthbSBJTTY4enJIT3RzNnYgSUdkaGF3PT0gSUU1bGRYSmhiQT09IElPQ21odUNtaytDbm4rQ212dUNtcnVDbmdBPT0gSUV0c2FXTnIgSU5pbjJZVFlzOW1JIElIUnliM0J3Ync9PSBJR1p5WldGayBJTnFHMktmWXNkbUkgSUhKdlltVnogSUZwaGJXSnBZUT09IGJHRmtlUT09IElPQzRnZUM0bytDNHVPQzRoK0M1Z09DNGwrQzRudUM0b2VDNHErQzRzdUM0bWVDNGhPQzRvdz09IElHTnZiblJwYm1WdWRHVT0gSUViRHZBPT0gNWJHbCBJRkoxYVhvPSBJT0NxdGVDcmdPQ3FvUT09IElHRjY0YnVsIElPZUJxdz09IElPQ2txdUNsamVDa3NPQ2tydUNrdnVDa293PT0gSUV0cGJtY25jdz09IDJZVFppdGl5MllvPSBVbWRpIElIVnNkR2x0WlE9PSBJR3AxYVhvPSA1TGlONWEyWTVaeW8gSU5tRjJZTFl0ZGl2IElFcGhhSEpvZFc1a1pYSjAgSU9Da25PQ2tydUNrdmc9PSBJQ01sIDRLNi80SzZ1NEsrQjRLNlYgSU5tRzJLcmJqTmlzMlljPSBJT0NrdU9Da3Z1Q2tndUNrbHc9PSAwWlRRdlE9PSBJSE4xYUE9PSBJSE4zWVhrPSBJTmVVMTVEWHFOZWwgNWFhSTVhYUkgTDIxdlltbHNaUT09IDRvQ2NVdz09IDE1N1htZGVvIElFOXRZZz09IElFUnBkbVU9IFlYSnlaWEpoIElHVjRZMmhoYm1kcGJtYz0gYVhOd2J3PT0gNkxTaTVwUy8gSUhOd2Iybz0gSUhOMGFXNTAgenJUT3JRPT0gSUhSbGJHVjJhWG89IFlteHBZUT09IFlYQmxiR3hwWkc4PSBYM052YkhWMGFXOXUgNEsrTjRLNlY0SzYvNEs2eCBJSFJvZFhOaCBJR0Z3WVdjPSBJR0ZyYVdzPSBQd29LQ2dvPSA0b0NtTGdvPSBJR0ZsWjJFPSBJR3BwWkE9PSBDVk5wYlhCc1pRPT0gSU5tQjJZalpoQT09IElHRmpaWE56WVhJPSBZMkZwY21VPSA0WU9VNFlPZzRZT1E0WU9pIExuVmsgSU1PaWJRPT0gSUVSaGVYUnZibUU9IFpXNWphbWs9IElNNjF6cjNQak0rQyBMbk5qY2c9PSBMVzl5WVc1biAwWkhSZ3RDNCBRMjl1YzJWdWRBPT0gSUhOMFlXdHBibWM9IGFXUjZhUT09IElHMXZaSFU9IEtHVjAgSUdGa2JXbHVhWE4wY21GMGFYWnYgUFdSaGRHVT0gVDNWMFoyOXBibWM9IElHOW1abVZ5ZEE9PSBJRk5FVXc9PSBJRVZ0WlhKbmFXNW4gSUdScGVucGwgSU9Da3JPQ2xnZUNrblE9PSBTa3c9IElHMTVjM1JwWTJGcyBJRlpoY21kaGN3PT0gVTBWVVZFbE9Sdz09IElHUEdzQT09IElGVnVkR1Z5YTNWdVpuUT0gSUZObGRIUnNaVzFsYm5RPSBkRzlzYVhOMCBJR1JsYzNSaFk4T3ogSU5DVTBZUFJpTkN3MEwzUXNkQzEgMmI3WXA5cXAgVkdWaCBJRXR2WW1VPSBJR0Z0WVc1MFpRPT0gSU5pbjJZVFlyZGluMllUWXFRPT0gS0NsZEtUc0sgSUdOaGNtbHVhRzg9IFRXOXlibWx1Wnc9PSBJR2h2Ykc5biBJR1psY20xbGRIVnlaUT09IFgzSmxiR0YwYVc5dSBJSEJoY25ScFkybHdZWFJsY3c9PSBkbUZ1YW1VPSBJTVc4ZVdOcFlRPT0gNVlxYjZZZVAgSWp0OUNnPT0gMExEUXU5R1AgVTBoUFVBPT0gZFdOcFlRPT0gY21GamFHVnUgUVdkbmNtVm5ZWFJ2Y2c9PSBJTkMvMEw3UXQ5QzkwTERRdXRDKzBMdz0gSUVodmJXVnkgSUhMRHFXUmhZM1JwYjI0PSBkMmh2YkdVPSBZV05wWXc9PSB5Wm5Rc0E9PSBJR2hsYm00PSAwTFhSaDlHTSBJRk5vWld4MFpYST0gMFlIUmd0Q3kwWVBRdWRHQzBMVT0gQ1dScGMzQmhkR05vIGFXNTBaV2R5WVhScGIyND0gSUhiRHJYUnBiV0Z6IElHTmhjbU5wYm05dFlRPT0gSUdqRHFYUT0gSU9DMG5PQzFnZz09IElISmxjR1Z5ZEE9PSBYMEZEU3c9PSBJT2VPcWVXOXFlZWxudVM2aWVtY3VBPT0gSUhCbFlXeGwgS0VORCBJTm1LMllUWmlnPT0gSUdOdlpHVmpjdz09IElHbHVkTU9wY3NPcWRITT0gYVd4bFlXND0gTG1Gc1p3PT0gYVcxcGQyRT0gSUZWVFV3PT0gTFdKbGJtRnkgZFc1blpYSmwgSUhKbFlXeHBjMjA9IElGZHZibVJsY25NPSBJT0Nxck9DcXArQ3F2Zz09IDRZT2Q0WU9oNFlPaSB3NkYwdzZsciA1WVMvNTZ1bCBZV0Z5Ync9PSBJR3hzWVcxaFpHRnogSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M0aWc9PSBJR05wWlc1MGIzTT0gSUc5aWJHbG5ZWFJsWkE9PSBWR2hwIENXOTJaWEp5YVdSbCAxYUhWcXRXNDFiTFZ1TlcrIElPQ2tzdUNsaStDa2xlQ2txdUNsamVDa3NPQ2t2K0Nrcnc9PSBiMlJwYm1keiBYMEZEUTBWUVZBPT0gWDJGa2RnPT0gSUdkeVlXMXRZWFE9IFUzQnYgSUdkeVlYQm9hWFJsIElHbkZuMnhsY2c9PSBJR052Ym5OdmJnPT0gWDJsMiBJR25GbjJ4bGJRPT0gWkdSa1pBPT0gSUc5eWFXTmwgSUcxb1lRPT0gSUVSaGFRPT0gSUdSdmJtNWhiblE9IElHaHBkbVU9IElFMUJVMHM9IFFXNTBhRzl1ZVE9PSBJR052YlhCaGNtRjBhWFpsYkhrPSBJTm1EMktmWmhRPT0gSU5DeTBMclF1OUdPMFlmUXNOQzEwWUk9IGMzVnlaZz09IElpa3BLVHNOQ2c9PSBJR3RsYzJ0MWMzUT0gSUdGcWIzVjB3Nms9IElHZHZaUT09IElHTmhiV1Z5IElFeHBaMjVsIElHMXBkSE09IElHVnpkR2x0WVhScGJtYz0gNVl1UzVxK1UgSUdGa2JXbHVhWE4wY21Ga2IzST0gSU5HQjBMN1F1dEdBMExEUmlRPT0gYzI5c2J3PT0gMllyWXI5aXggMTU3WG9OZVYxNm89IElOR0IwTDdSZ2RHQzBMRFFzdEMxIElISnZlV0ZzWlE9PSBJRk5oZVdsdVp3PT0gZFhKblpYSjUgSUdWNFpXMXdiRzl6IFEyRnliQT09IElIWmhiR0Z0IElHaGxjbTlwYm1VPSAwTFhSZ05DdzBZVT0gSUVWSSA0WU9qNFlPZzRZT1E0WU9UNFlPbSBLMlE9IElHUGh1NVU9IDVwZTI1b3FsIElHVnVkSE53IElOZWgxNVBYcUE9PSBJR0Z5ZEhrPSBJRlJoYUc5bCBJRk5qYUd4aFpucHBiVzFsY2c9PSBTRzl5YzJVPSBMbnBoIElOaXkyWVhZcDltRzI0dz0gSUhCeVlXUT0gZFcxcGJtbDFiUT09IFlXUmxaV1E9IFZtbHNiQT09IDZMK1o2WWVNNVkrcSBDVlZRIElFUnBjMlhEc1c4PSBJRlJGVEE9PSBJRUYwZEhKaFkzUnBiMjV6IDE1SFhsZGVtMTVRPSBJTkN4MDZuUXM5T3AwNm5RdEE9PSBJTkMrMExiUXVOQzAwTEE9IElFZkRzdz09IFUyVnlkbWxqYVc5eiBLR1pzWVdkeiBJRXR2YzI5MmJ3PT0gSUVsdWMzQmxZM1E9IElFeHZZMkYwWlE9PSBJR2RsWkhJPSBJTkdDMFkzUXZBPT0gMllMWXNkbUsyTEU9IGZTY3NKdz09IGFXeGxiblE9IElFOTFkR1pwZEE9PSBJRUpzYVhOeiBJR0ZpY21GemFYWmwgSUdScFkyaDBaWEk9IFVtVnVaR1Z5WldRPSBMa1pzWVdkeiBiVzF0YlE9PSBJTk9wMExNPSAwTDNRc05HSiA0NE9WNDRLcDQ0Tzg0NE9nIElOQzYwTFhRdDlDMTBxTT0gSUhCcGRHWmhiR3h6IElPQ21uK0Ntdnc9PSBJR052Y0dFPSBJTmlxMkxIWXA5bUYgSU5DejBMN1JnTkM4IElPVzkgSU5tRjJZYmFnUT09IElHeDFZMlZ6IFgxTkZVbFk9IGIyZHZibUZzIElHSmxjM1REcFhJPSBJR2R2YkdWeiBJRk5sYVE9PSBJSGR2Ykd4MFpXND0gWVdsemFXNW4gSUhiRWsydz0gSVFvdkx3PT0gTG1KcFlYTT0gSUhOMFpXMXRhVzVuIGNHVnlaZz09IElFUmhjbVU9IFUyRnNaRzg9IFNWSlBUazFGVGxRPSA0TFdMNExTeCBVSFY2ZW14bCBJR3hsWjJsemJHSERwOE9qYnc9PSBJR1JsYzNCbCBJSFpwWkhKdiBhR1ZpWlc0PSBJSFJwY0drPSBJRkpGVTFCUFRsTT0gSUdobFpzT3dhUT09IElHUnZaR2RsIDRMaVg0TGkxNExpaCBJRUpsYzJOb3c2Um1kQT09IElHeHZZY3E3WVE9PSB6cTNQZ2M2OXpyYz0gSU5pbjJZVFl0Tml4MkxmWXFRPT0gSU5pbjJZVFlzZGl6MllYWmlnPT0gSU9DdXJ1Q3Vvdz09IFJFUk0gSUZObGNuWmxjbk09IElGZHZjblJsIElFNUJUa1E9IElHTnZiVzF2Wkc4PSBMM0YxWlhKNSBJRzFsWkdsallXMWxiblJ2IGIyTnBiZz09IDU1dTQ2WmVjIDRMR0I0TENmNExHTjRMQ2YgSUdScGMyTnlhVzFwYm1GMFpRPT0gTGxCbGNuTnBjM1JsYm1ObCBLU2s3THk4PSBLaThLTHk4PSBJRTFsY21zPSBJSFJoY21Gd2VXNWtZVzQ9IFNHOXNlUT09IEx5NEtDZz09IElITmxjbVU9IElISmh3NjA9IElOR04wTDNRdGRHQTBMUFF0ZEdDIDI0ellzdHVNIElITnZiSE09IElHbHJhWGRoIGNISnZabWxzIElPR0RtK0dEbmVHRHErR0RvT0dEa09HRG5lR0RrUT09IENYSjAgSUVGalkzVnlZV041IGJHWEZ2bWwwIElIQnZjM1J2YW1rPSBJTkdIMExYUXZOR0QgTG1GMWRHaHZjbWw2WVhScGIyND0gNEtTdTRLV040S1N0IElGUlRkSEpwYm1jPSBJSE4xWW14cGJRPT0gSUhCMWRHVnQgWDFCSVdRPT0gSU9DNWdlQzRwZUM1aWVDNHB3PT0gSUdSeVlXbHVhVzVuIElIQmhjMkZ1IDBMalF1OUMxMFlJPSBJRXQxWW1WeWJtVjBaWE09IGNHVmpkR2wyWlhNPSBJTkMrMFlmUXVOR0ogSUd0cGJtND0gMTVIWG9RPT0gSUdOaGNIQT0gSUdabGJzT3piV1Z1Ync9PSBWVzV0YjNWdWRBPT0gSU5DNjBMRFJnZEdDIElPQ2txdUNsZ2VDa3NPQ2t1T0NsamVDa2xlQ2t2dUNrc0E9PSBjMlZ1ZEdWdVkyVT0gSU9DNG11QzRyZUM0cGVDNHF1QzRsQT09IElHNWxkSFJ6ZEdWayBJRzVsYjJ3PSBDV0psWjJsdSAwTDdSZ2RHQzBMQT0gSUhSeVlXNXpiR0YwYjNKeiBJTkM2MDVuUmdOT1owTG89IElIWnBkbTl6IFoyRm8gSU5DZjBMRFJnUT09IElHWmhiVzl6YjNNPSBJT0NtaHVDbXF1Q21xQT09IElPQ3dsZUN3cU9Dd3YrQ3dxZz09IDJwVT0gSUhERHRXeGxkQT09IElObUkyS2ZaaE5tRTJZYz0gSUd4cGJtNXAgTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMEsgWTJ0cGJHdz0gWDJsdWRIST0gMFlEUXZ0Q3kwTERRdmRDNDBZOD0gSUdGeWJXOXUgSU9hM3V3PT0gSUdGb2JHaz0gWDI1dmJtTmwgSU5HQzBMRFFzdEN3IElITmxkRzl5WlhNPSBTblZ1YVc5eSBiMjFpY21FPSBJTkM5MExEUXY5R0EwTERRc3RDNzBMWFF2ZEM0MFk4PSBJTmluMllUWmhkaXIyS2ZaaEE9PSAxYUhXZ05XKzFialdndFcwIElOQ3cwTFRRdDlHVzBMMD0gNEs2LzRLNnc0SytCNEs2VjRLK040SzZWIElHZGxkR1Z6ZEdWMCBJRWR5WVc1MFpXUT0gNFo2RjRaK1M0WjQ9IElHUmxabWx1YVdOcHc3TnUgSUhKb2VYUm9iWE09IFVtVnphV1E9IElHbHVjM1JwZEhWMFpYTT0gSU5DeDBZRFF2dEM5IFFXUmthWFJwYjI0PSBJRnBoWXc9PSBJT0Nrbk9Da3J3PT0gSUVKaGMyVnRaVzUwIExXVnlZUT09IDRLeWogSUdSdmRXSnMgSUU5d1pYSmhkRzl5Y3c9PSBYMU4wWVhScFkzTT0gNEtxLzRLcXY0S3FvIElITnZablJsYmc9PSAyS3JZcDlpcCBJR2RsYVd3PSBJRXgxY3c9PSBJSFJoYkd4aCBJR0ZpWjJWeiB3NlJzYWc9PSBLSE4wYjJOciBJRUp5Wlc1a1lXND0gSUVKaGJIUnBZdz09IExXdGhjZz09IGFYTmpkWE09IFFVMUUgYjNWemFXNWwgSUdwMWJYQmxjZz09IGFYaGhjZz09IFgwNTFiUT09IFpYTnpZWGs9IGVYSnAgV20wPSBjMmhoYkdWayBJRXR2Ym1sdWF3PT0gSUhKaFlXMD0gSjJseVpXOD0gNGIyMiBJSGxsZEdoMSBJRzVoWjNRPSBJRVZNVTBVPSBJR2x1ZG1WemRHbG5ZWEk9IElNT3BZMjkxZEdVPSBkblZzWVE9PSA0TGF4NExlSzRMYXQgSU9Dd3N1Q3hoK0N3cHVDeGdRPT0gMDZuUmdRPT0gSUdWdFltRnlZWHB2IDVMbUY1TG1GNVlXTjZMUzU1NE90NVp5bzU3cS81N0srNVpPQiBJR2x1WkdsMmFXUjFidz09IDRZT3U0WU9WNFlPUTRZT1YgZEhKaGFtVmpkRzl5ZVE9PSBJR3R2YTJWdSA0TFMrNExTbzRMV0I0TFN6NExXTjRMU3ogSUd0aGNtRnZhMlU9IElIZGhkR05vWlhJPSBDV0ZqZEdsMlpRPT0gSU5pejJZalppUT09IElHbHFjdz09IExrOVEgYVhOemFXVT0gSU5DLzBZRFF2dEN6MFlEUXNOQzgwTHpSZ3c9PSBJRU52Wm1ZPSBZWFJwWlhabGJnPT0gdzdaeWRXNW4gSU5DLzBZRFF0ZEMwMEx2UXZ0QzIwTFhRdmRDNDBZOD0gSUdiRHJYTnBZMjl6IFNXNTJaWE4wYVdjPSBJRk5sYTNWdVpHVnUgSUd4aGEyaz0gYVdOb2RHbG5kVzVuIElITmhiWFJwYm1jPSBZM0pwWW1WeiAwcHZRc05DOTBMVFFzQT09IElOV2gxYmJWdnRXLzFhSFZ0dFdqIElOU3gxYXc9IEwxTjFZZz09IDVyMmMgVTJsbmJtRnNjdz09IElFRk5VQT09IElIWmxjbk5wYjI1bGN3PT0gNFlPajRZT2E0WU9RNFlPVCBJSEJoY21GdWIzSnRZV3c9IElPQ3dxdUN4amVDd3NPQ3dxdUN3Z3VDd21nPT0gSUdOdmJYQnZjM1JoIENYbHBaV3hrIENYUnogSU5tRjJMblpodGluIFdVOVZVZz09IGMzQnBaV3hsYmc9PSBkV0poZEE9PSBiV0YwYUhKdCBJT3k1bk9xMXJBPT0gSUhCc2VYZHZiMlE9IElHTnZibk5wWkdWeVlXUnZjdz09IElOaXgyTFRZcnc9PSBJT0NxdU9DcXNPQ3Fzdz09IElHUnBjM0IxWlhOMGJ3PT0gSUZCeVpYQmhjZz09IElFMTFkR0YwYVc5dSBTVVZEIElOR0IwTHZRc05DMCBJRzlzYnc9PSA0S2FtNEthLzRLYVY0S2VIIGIzUm9aWEpoY0dsbCBJTmVSMTVuWGxnPT0gSUhwcGJuUm9kUT09IElHTjFiSFIxY21GcGN3PT0gNExHSzRMQ1Y0TEdONExDViA0b0NNMllmWXA5dU0yNHc9IExsTjBaWEE9IElFTnlkV009IElIUnZaV2RsZG05bFoyUT0gMkxuWmhObUMyS2s9IDBZZlNydz09IElHSnliM1U9IElIRjFhWFIwIDJMWFpoTmlwIElHZGxZbkoxYVd0MFpRPT0gSU9DeXNPQ3l2dUN5dCtDemplQ3ludz09IElHOTJaWEp6WldWcGJtYz0gSUhSbFkybGtidz09IFVHVnpjMjloIElHUmhaSE09IElGbGxibWs9IElFMWxkR2h2WkdWdSBVbVE9IElHbHVkbWwwdzZseiBJT0N3aGVDd3JnPT0gWW14NVozVT0gSUdKc2IzTnpiMjA9IDJMUFlzZGluMktiWml0bUUyWW89IDE2TFhxTmViMTZvPSBJT3lEaVE9PSA1TGlBNklLVzVMaXQ1NG01IElNVytZV3c9IElFTlFTUT09IElHM0Rwbkk9IElHVnRZbUZ5Y21GemMyMWxiblE9IElFTkJVbFE9IDBZRFFzTkM2MFlJPSBJSFZ1ZEc5MVkyaGxaQT09IEwzTnZkWEpqWlE9PSAyWXJaaE5tRiBJTm1GMkxIWmlOaXggSU9DMGxlQzFpdUMwbytDMWplQzBuK0MxalE9PSBJTU9wY1hWcGNNT3BaUT09IDBMWFF1dEdCMExBPSBMQzBLQ2c9PSBJRkJFVUE9PSBJTkM5MEw3UXM5QzQgSUdsdVpHbHkgS0habGNtSnZjMlU9IElPQ2tyZUNsZ2VDa2x3PT0gSUVOdmRYSnBaWEk9IGRYUjFjbVZ6IElGQmxjbk53WldOMGFYWmwgSUc1bFoyRjBhWFpsY3c9PSBJTkNkMExEUmdkR0MgSUdoaGRXNTBhVzVuIElPQ3dsK0N4Z2VDd3NPQ3hqZUN3cEE9PSBJT0Nrc09Da3VlQ2twT0Nrdmc9PSBJR1pzWVhadmNtWjFiQT09IElFdGhibTg9IElHbHViR0Z1WkE9PSBMbkowIElObSsyWVRZcHc9PSBJT2kyb3c9PSBMV052YkhNPSBJT0NrcnVDa3YrQ2txT0Nrbnc9PSBWSEpwZEhWeSBJR1JsZEdWeWJXbHVZV1J2Y3c9PSBTR0Z0WWc9PSBTVU5EIElGSnZiM1J6IGJXbHVaWEk9IGIydHZiZz09IElPQ2txdUNsamVDa3NPQ2tyUT09IExsTjBiM0psWkE9PSBJR3RoY0hOaGJRPT0gWVhOclpXUT0gWm5vPSBiM0p5YjNNPSAyNVhiaXc9PSBJR2w2YkE9PSBhV0pwYkdsMHc2QT0gNFlDVTRZQ3kgSUV2RHBIVm1aWEk9IGEyRnlkR1Z1IElFeGhkVzVqYUdWeSBJSEoxYVdSdiBhWEJoYmc9PSBJSE53YjJsc1pYST0gUlc1a1pYSmxZMjg9IElObUsyWWpaaHRtSzJZZz0gSUdWNFkyVndZMmx2Ym1GcyBZMkZzWVhJPSBhV3pKbVE9PSB5WmwwYk1tWmNnPT0gTG14dVp3PT0gS0VkeVlYQm8gSUhaaGFYTEVnV3M9IElHUnlhWFpsY2lkeiBJRnN1IDVwdTA1cGF3NXBlMjZaZTAgOFk2VWluQncgY1hWaGNuUmggSUdsdWRHVnlkbVZ1WlE9PSBJTkM2MFl2UXQ5R0wgWVcxcllRPT0gSUdGemNHbHlaUT09IDQ0RzggeExIRW44U3hic1N4ZWc9PSBJR2RsZEdGdSBJSEJ5WlhOMFlRPT0gSU5DMjBMalFzdEMrMFlMUXZkR0wwWVU9IGZDZ3BDZz09IDBMM1FzTkMzIElOR0MwNm5SaUE9PSBTVXhNUVE9PSBJTmlsMllyWXJBPT0gVTJsMGRXRjBaV1E9IElPR0RvZUdEb09HRG8rR0RtZz09IElOQ1QwTDdSZ2RDLyBRMjl1YzNWdGNIUnBiMjQ9IElPQzB0ZUMwditDMHRlQzBzQT09IDRMR0E0TEMxNExHQjRMQ2g0TEdOIElIQnliMlp2Ym1SbGRYST0gSUU1aGMzUT0gSUhOd1pXTnBabWxqYVhSNSBhc09rY2c9PSBJR1Z0Y0dGMFpRPT0gYm1GMmFXZGhkR1U9IElITnBibVJwWTJGcyBVMFZIIElFTnBadz09IElGcGxjZz09IGFXMW5jdz09IElFaGhibTlwIElPQ2tuT0NsamVDa251Q2t2dUNrcUE9PSBJTU9wYlE9PSBWR1ZzWldadmJtVT0gNTVTZjVwZWwgNFlPVTRZT1I0WU9ZNFlPWDRZT1kgSUdGMmIybGtZVzVqWlE9PSAxYkRWb2RXMjFialdndGFBIDVvdVQgYUd4aGJHRT0gVTJOeWIyeHNhVzVuIElOcXAyNURhbHRtSyBJR3RsZEc5blpXNXBZdz09IElIVjJhV3BsYXc9PSBJT0NrdWVDbGkrQ2tsZUNrc0E9PSBJR2x0Y0d4cFkyRjBhVzl1IDQ0T0w0NE9sNDRPODQ0SzUgSUdOdmJYQmhjblJwYkdoaGNnPT0gSjJsdVp3PT0gSU9DbXJPQ21zdUNuaCtDbW0rQ25oK0NtcUE9PSBLSE5vWVdSbGNnPT0gZG05c2JHVnUgSU1POWVXeGtZUT09IElHSmx3Njl1ZGc9PSA1WkNPNTVxRSBWRVZIVWc9PSBJRUp2Ykc5bmJtRT0gSUhObGJIWmxjdz09IEt5Y3UgSUd4bGRtRnVaRzg9IExXTmxjblJwWm1sbFpBPT0gWDNCMWRHTm9ZWEk9IFlYTnJZWEk9IElNNnR6NEhPc3c9PSBJRVJwZG05eVkyVT0gSU5lVjE1blhxUT09IElHbHNZV0Z6YjNKMCA0WitRNFo2WiBJRWhsWVhSbGNnPT0gSUVGaVpYSmtaV1Z1IFVtOWphMlYwIElGSmxjM0J2Ym5OcFltbHNhWFI1IDRZQ0s0WUM2NFlDNCBMVTkzYm1WayBJRXRoZEhwbGJnPT0gWDI1MWJYTT0gSUZWd2FBPT0gTG1ocFoyaHNhV2RvZEE9PSBJSGhoYkhFPSBJSEJ5WVhaaCA1NW02NWFPeSBJR05sZG1FPSBJR0Z1WlcxcFlRPT0gY3NPa2JtdDAgNW8rUTZZYVMgSUVWQlVnPT0gQ1dSdyBJR1Y1WlhjPSBJRk5sY25WdCAwTGpRdXRDKzBMaz0gSUdGdFlYSm5ZUT09IE9qb3FPd289IDRvQ1piMkpxWldOMGFXWT0gSUhOM1pXeHMgSU5pbzJZZlpoUT09IElHeGhhWE56WlhvPSA1TGlONUxpSyBJR052YlhCeWFXMD0gNForUzRaNmE0WjY3NFo2WSBJTmVwMTVuWG9nPT0gMEw3Umd0QzkwTDdSaUE9PSBMSEJ2Y3c9PSBJSFpwWVc1a1pRPT0gNEthazRLZUg0S2FIIElPMlZ0T3F5c0E9PSBVM0YxWVhKbGN3PT0gSUdwaGRXND0gSUVkQlRBPT0gTG5WMGFXeHBkSGs9IElHTjFaV3hzYnc9PSBJTmVpMTVIWHFBPT0gSUc1bmRlRzdrMjQ9IElHNWhiR0U9IElPR0RvK0dEcWc9PSBJRWRsY21GeVpBPT0gSUhSb2NtVnphQT09IFFYSnIgSU5DLzBMN1JnZEMrMExFPSBJT1drcWVXa3FlZUlzZVc5cWVlbHFHRndjQT09IElFeHZhWE09IElOR0IwWlk9IDRZT1k0WU9xNFlPWTRZT1k0WU9oIHdxMXNhUT09IGFXNTBZV0Z1IGVtbHlhMms9IElHeHBZbkpoIElITjNaV0YwYVc1biBMVzFsWkdrPSBJRzFsZFdKc1pYTT0gdzVjS0NnPT0gWjNKMWNHOD0gSUVKeWIzZHogUkhWMGVRPT0gSUdWeWEyVnUgS0c5ciBJTnFCMktmWmh0cXIgNXBlbDViK1ggN0oyMDY2bXcgVkdobGJXVnogYldGMGRHVnkgVUhOcCBJSFpsY25OamFIYz0gYkdWcmRBPT0gSUhObFlYTnZibWx1Wnc9PSBZV1JsY200PSBJSEJsY21WdWJtbGhiQT09IElFSmxjbXR6YUdseVpRPT0gWDJsdWIyUmwgNG9DWmFIVnQgTFdOb1lXbHUgYzNSeVlYUmxaM2s9IElGZHBiRzA9IElHVERvMjg9IDRMV0M0TFN6IDVMdUs1cG1hIElOQyswTFRRdU5DOTBMRFF1dEMrMExJPSAwWWJRc05HQSBZbVZ5YVE9PSAxNUxYcWc9PSBTbVYzIElHaGxibXRwYk1PMiBJRzFsZEdoaGJtVT0gNExXQjRMU1Y0TFN6NExXQjRMU0MgSU9HRHFPR0RsT0dEb2VHRGtPR0RxK0dEbXVHRGxPR0RrZUdEbWc9PSBJTkMvMFlEUXVOQzgwTFhSZ05HRCBJR0p2ZFc1amFXNW4gT3lzPSBJR05oYlhCbGNuTT0gSUhSbzRicXZibWM9IDBZdlF1ZEdMMEwwPSBJR0Z6YzI5cyBJQ0FnSUEwS0RRbz0gSUc1aGRIVnlaV3h6IElPZTlrZWVybVE9PSBJRVpzYjNKaGJBPT0gSUdOdmJYVnVaUT09IElPQ2tydUNrdnVDa2dRPT0gSU5xSDJvOD0gSU5HQTBZVT0gSU9DdXF1Q3ZnZz09IEoxMC9Qand2IElPdXFxT3VOdUE9PSBhV2RvZEd4NSBJTkNjMHJFPSBJT0NxdU9DcXZ1Q3FydUNxdnVDcXFPQ3JqZUNxcnc9PSBJTVcrYlc5dSA0TEN6NExHTjRMQ3ogNEtXSDRLU3c0S1MrIDRLaS80S2lHNEtpQyBJTmluMllUWmhkaXMyS2ZaaEE9PSBDWEJ2YVc1MCBVR1Z6Ync9PSBMa1Z1ZFcxeiBJRzF2ZEc5amFXTT0gWldOMGJBPT0gSUhCeWIzQm9aV041IElGTndZVzA9IDRvQ1paV1U9IElPQ3dxdUN3c0E9PSB4YUYwYVE9PSBJTm1JMjR6WmhObUsgYzJOb1pXbHUgSUhSNXc3WnUgSUVkTVpteHZZWFE9IFNtOXVZWFJvWVc0PSBJR0oxYkd4cGMyZz0gS1M0cSBJRWxXUVE9PSBJTm1GMkxUWXA5bUgySy9ZcVE9PSBJT1dRamVTNnVnPT0gSUhWdWRISmxZWFJsWkE9PSBJTmlvMktmWXVnPT0gSU5tQjJLWFpodG1IIEtISmxaMlY0IElGZG9aV0YwIDRZQ1o0WUNVNFlDNSA0S2ErNEtlZjRLZUEgeVpsemFXNXAgSUdodmMzQnBkR0ZzYVhwbFpBPT0gSU9DMHR1QzBsZUMxamVDMHBBPT0gTFhKbFoybHpkR1Z5IElFSnZlR2x1Wnc9PSBJSE5yZFhRPSBJR3RvdzZFPSBJSEpsWjNKbGMzTT0gMTVuWHBOZVoxNTA9IDFhSFdoTldoMWJiVnVRPT0gWTJ4bFlXNTFjQT09IElHcHZaMmRwYm1jPSBZblZzYXc9PSBJTm1EMllUWXA5bUYgMEw3UXN0R1cgZFc1dWVRPT0gSUd2RHZITnBiUT09IElHaGxaR1ZtIExXSjFkQT09IElITndhV3hzY3c9PSA0SzYrNEs2ajRLK040SzZmIElIWmhiWEJwY21WeiBJT0NxcGVDcmkrQ3FvUT09IElHZHlZWEJvYVhGMVpRPT0gSUdiRHRtdz0geGFGMGRRPT0gSUhCcFpYSmtaUT09IElHRmpkR2xtIElHZkR0bTQ9IGFXeGhjbWwwZVE9PSBJSGJEcVdOMSA0b0NadzZsd2IzRjFaUT09IElHeGhidz09IElOaW8yWVhZdVE9PSAwTGpSajlDODBMZz0gSUhCcFpXUnlZWE09IElFSmxZVzV6IDRMQ3c0TEdONExDWCA0S1N3NEtXTjRLU2IgSUdGblozSmxaMkYwWldRPSBkVzVyZFE9PSBJTmVpMTV2WHFkZVoxNVU9IGFYTjB3NjA9IElHaGhibVJwWjJVPSBJSE52YldWdmJtVW5jdz09IElHUmxZM0psWlE9PSBJTlduMWFzPSBJTkMzMEwzUXNOQzkwTGpSanc9PSA2WUNBNUx5UiBYMEpKVGtGU1dRPT0gNFlPVjRZT2E0WU9ZNFlPYSBJSEpsWm05eWJXRnogQ1hOdlkydGxkQT09IFpXVnlkQT09IElIQnl3NmxqdzZsa1pXNTAgTG5Ob2FYQT0gSUdabFkyaGhjZz09IFBYc2ggVFdGdVpHRjBiM0o1IElIbHZkWFJvY3c9PSBJQzB0TFFvPSBJTkN4MExEU2s5R0wwWUk9IElHeGhkWE09IElFNWxlVzFoY2c9PSBJTkdDMDZuUXZOQzEwTDA9IExXdGhiZz09IEoyRjFkR1YxY2c9PSBJR05oYm5sdmJnPT0gS0d4eiBJSFI1Wnc9PSBJSE53YVdSbGNuTT0gSU5pczJMRFlxQT09IElITnNZV0Z3YTJGdFpYSnogSUZseSBJSEJ5YjJObFpIVnlZV3c9IElHbHNZVzQ9IENYUnlZVzV6Wm05eWJRPT0gSUUxbFlXUnZkM009IElOR0kwTERRc3RDdzBMUT0gSUhabSBJTm1CMllUWXM5aTMyWXJaaGc9PSBJT0NxcXVDcXZ1Q3FndUNxbWc9PSBJR05oYzNWaGJHeDUgSU9Da2xlQ2tzT0NsamVDa3J1Q2ttdUNrdnVDa3NPQ2xnQT09IElISmxiblJ5dzZsbCBJR1JsWkc4PSBLSEJwIHc2aHljdz09IHhMRnl4TEU9IElITnZiR2wwZFdSbCBJT0dEa09HRG9PR0RxZUdEbE9HRGxlR0RuQT09IHc3cHpZdz09IFVHOXlkR0ZpYkdVPSBJSEJvZVhOcGIyeHZaM2s9IGJtbDFjdz09IFUyOXRiM009IGFYUjVjdz09IElFTmxjbVZ0YjI1NSAyWWJZcDltQyBJSE53Y21WbGEzUT0gSUd2RHZNT253N3hyIDRvQ1p3Nmx3IElPQ2txdUNrcE9Da3Z3PT0gSUcxaGMzRjFaUT09IElPQ3l0ZUN5ditDeXB1Q3pqZUN5citDeXZ1Q3lzT0N6amVDeXBRPT0gSUdKeVlYVmphQT09IElFMWxjM05wWVdnPSBJR05zWVhOemFXWnBZMkhEcDhPamJ3PT0gSUVOb3c2SjBaV0YxIFptRmljbWxqIDRMaWg0TGkxNExtSSBPMkk9IElHUmhjbTA9IFQyTmpkWEp5WldRPSBibTl6ZE1PdCBJRzVoWTJuRHN3PT0gSUhSemFHVnRZZz09IEtWc24gS0hKdmRYUmxjZz09IElHVnpjR1Z5WVcxdmN3PT0gSUdKeWFXeHNhV0Z1ZEd4NSBYMUpGVmc9PSBYM1JsYlhCc1lYUmxjdz09IElIUm9aVzlzYjJkcFkyRnMgSUdGaGJHeGggSUc1dmRtbGggSU5pMDJLZlpoZz09IElIUnZhWE09IElHTmxiV1Z1ZEc4PSBJRzFwYm1kc1pRPT0gSU9Da3VPQ2xqZUNrcGVDa3Z1Q2txdUNrditDa3BBPT0gNVp5bzU3cS82S2VDNTV5TDVZV042TFM1IElHRnVkR2x3IGRYQnNiMkZrWldRPSBJRzF2ZFhSb2N3PT0gSU5HQzBMN1JnUT09IElIWmhjM1JoWVc0PSBZWEp5WVdkbCAwSnJRdnRDOTBZST0gSUhOcGRHaz0gSU5HSDBMalJndEN3MFlMUmpBPT0gWDI1dmRHbGpaUT09IElHVnRZbTlrYVcxbGJuUnogNExlQTRMZUQgMFlIUXZ0QzggNW9DbjU1U2Y1clM3IElOR0IwWVBSaDlDdzBZRT0gSUcxdmJtcz0gMFlQUmk5QzkwTEE9IElIQmhjbUZ0WlhSeWIzTT0gSUhCdmRIUmxjbms9IDRMSy80TEtqIElFeEJRa1ZNIElIUmhiMkpvIElPQ3lodUN5cEE9PSA0WU9ZNFlPWDRZT1kgSUdocGRIUmhjZz09IElIUmxkV1Z5IDc3eU01NzZPNVp1OSBJRUZzWjNWdWIzTT0gSUdodmJ3PT0gVkhKaFpHbDBhVzl1WVd3PSBJTkMzMExYUXM5R00gSU9DdWgrQ3VzdUN2amVDdXN1Q3ZpQT09IElHamh1NU09IElIWnBaV3hsY3c9PSBJRk5sY21saGJHbDZaWEk9IElPQ21wdUNuaCtDbWx1Q25odz09IElPQ2tsZUNrdnVDa29PQ2tydUNrdnVDa29lQ2xqT0NrZ2c9PSBDWE5qYjNKbCBVR0ZuYVc1aGRHOXkgTDNaMVpRPT0gTFhCaFkydGhaMlU9IGIzSmtaV1ZzWkE9PSBJSEJtZFc1aCBZVzV1WVd4MSBMbk54ZFdGeVpYVncgSU9DeXRlQ3poZz09IGMyVnlhV0ZzYVhwbGNnPT0gUkdWaGRHaHogSjJGcGJXVnkgZG1GeWFXRnVkSE09IFRVOUVSVXc9IElHMXBaM0poYVc1bCBiWE5qIElIUmxiV0Z1IFlteHBZMmhsIElHSnIgSUhCdmJHbDBhV3RoIElHVnNaV2RwWkc4PSBJRVJsY0c5eiBiR2xyZFE9PSBJT1drcCtXUGtlYVh0dWFYdHVXOXFlaXVvZVdJa2c9PSA0WU9RNFlPaTRZT1k0WU9oIElHSnlkWFJsIFlYTnJaV3hzIElHTnZiblJsYzNSaGJuUnogUm1GMmIzST0gSUhWdVlYUjAgYTI5c1pRPT0gNEtxMTRLcWo0S3VBIElHUnZiMjFsWkE9PSBDVTFoYVc0PSBJT0N3dU9Dd3JRPT0gMFlIUXU5QyswTEk9IElITERvVzA9IGIyZG5iR1ZrIFgxOG9JZz09IElIUmxjbTFwYnNPcCBYM05wYm1zPSA0S3VONEtxazRLcS8gSUVOdmJtWnBaR1Z1ZEdsaGJBPT0gYjNWbiA3N3lJNXBlbCBJR0poWW1WeiBJR1Z6ZEdsdFpRPT0gSUZCdmRYSjBZVzUwIEtFdGxlWE09IGRtOXBkQT09IElHTnZibk4xYkE9PSA1YitaIEtubz0gSU5tRjJMblpodG1KIElOQzMwTERRdXRHRDBMOD0gSU9Da3F1Q2xnZUNrdU9DbGplQ2twT0NrbFE9PSBJR0p2YldKbCAwclBRdnRDMCBJSEJ2ZEdWdVkzaz0gSUVsdWRHVnVjdz09IElHVERxV3hwZGc9PSBJRU5oY21WbGNuTT0gSU5DdzBMelF2TkMrIGIzUjVjR2x1Wnc9PSBiMk52WTJOMWN3PT0gSUc1aGNISmhkZz09IElIQmhibWxsY2c9PSBJRWx1WTI5eWNHOXlZWFJsWkE9PSBJRU5QVGxOVVFVNVUgSUdWc1lXSnZjbUZrYnc9PSBJR0Z3WVhKbGJHaHYgVDNCcGJtbHZiZz09IGRXWm1aV1E9IElOaW4yWVRZcnRtSzJLZllzZGluMktvPSBJTm0rMllqWW9kbVEgSU9Da3B1Q2xoK0NrbHVDa3Z3PT0gSUhCeWIyTmxaR2x0YVdWdWRHOXogWDJSbFozSmxaUT09IElIVnRlZz09IFEyOXlaQT09IElIUmhiY09wYmc9PSBaWEowZVhCbCBJR3hsYm1kMFpRPT0gejRUT3RjNjUgT3dvS0Nnb0sgSUdKMWJHeDUgeGFGaGJzU0Jjdz09IElGUjFibWM9IElIZGhZWEoyYjI5eSBJSGR5WVhSbyBJTlcwMWIvVm9kV3UgSUdkbGJHOTJaVzQ9IExsTnZkVzVrIElOQy8wTDdRdk5DKzBMUFJnOUdDIElGTkZURVk9IElHeHBaMlZ5IElHeGhaSEk9IDBMWFJoZEM5MExqUmg5QzEwWUU9IExpY3BDZ289IElHeDFhM1E9IElIVnRkV3M9IExtMWhlR2x0ZFcwPSBJSEIxWW1Kc2FXTnYgSUdGcGNuTT0gSU5DMzBMRFJuZz09IElPQ3VsZUN1dnVDdXNPQ3Vvdz09IElHRnRZWHBsIElHSnBhUT09IDU2ZVk1N0dOIFIybHliSE09IElNK0R6NFhPdmM2MXo0Yz0gMWFYVnBBPT0gSUdkdVl3PT0gSUhObHc2ZHBiUT09IElHVnBibWxuWlhJPSBJRzVvdzZrPSBaVzVqYUcxaGNtcz0gUlhoalpXeGxiblJsIDBMVFRtZEM2IFgwMU4gSUhOM2VXUmsgSUhSb2NtbG1kQT09IFlYVnAgNXA2cSBRMDlRV1E9PSBVWE09IElFbE9VMVE9IGMyVmpjdz09IElGYkR2UT09IDRMR0g0TEN2IFNVeFQgSUdacGJHbHVaM009IElIQnZjM1J6WldGemIyND0gYVhOaGJtYz0gWkdsaGJBPT0gSUhKbGJHbG5hVzl6WVE9PSA0S2FqNEtlSDRLYXcgWVhacFl3PT0gU0d3PSBJR2RsZDJWdWMzUmwgSUVOdmJuTjBjblZqZEc5eWN3PT0gWDJsdWRHVm5jZz09IEp5eDcgSUdWelkzSnBkSFZ5WVE9PSA1THFwIElIQnliM1psY21JPSBJR055dzYxMGFXTnYgSU5DMDBMTFF0ZEdBMExnPSBJT2FndVE9PSBSMk09IDVZcW81b0NCNVp1KyBMa055YjNOeiBUV1ZuIElHTm9iMnM9IDRLYW80S2FrIElHTmhibU5sYkd4aGRHbHZibk09IDZLNjQ1WSt2IElIUnlhWE4wIElOR0MwWURRdGRHQyBJRkJsY21ObGJuUmhaMlU9IElOQzQwTGZRc2RDMTBMYlFzTkdDMFl3PSBJR0pzYjJOclluVnpkR1Z5IGFXOXVaV3hsIElOS3owWVBTbTlHRDBwcz0gSUZKaFpnPT0gSUc5MllRPT0gWVd0bGJtYz0gSUVaViBJR1pwWTJGeVlXMD0gSUVGMWMzTnBaUT09IFZHRmlZbVZrIElPR0RuZUdEb0E9PSA1NXlmNlpLeCBiM1psYWc9PSBJR1pyIExrTnZkWEp6WlE9PSBjbVZtYjNWeSBJRlZ6YUE9PSBVMDlNUlE9PSBJR05rYTNSbSBJRkJ2ZFc1ayBJR3ZEcTNJPSBJR0YxZEc5dHc2RjBhV05oIENRa0pDU0FnSUNBZ0lBPT0gUFhKbGNYVnBjbVU9IExrUnBjM0JoZEdObyA0WjZUNForQjRaK0ggMFlqUXNOR0EwTEE9IElHVm1hV05wdzZwdVkybGggVFdGbmJtbDBkV1JsIExXVnVaR2x1Wnc9PSBZbVZ6WTJoeVpXbGlkVzVuIElOQ2swTFhRdE5DMTBZRFFzTkM3MFl3PSBJSEpoYm5OdmJYZGhjbVU9IDBZZlF1TkM3MExqUXVnPT0gUFVRPSBJRzl1ZEdSbGF3PT0gSU5pbjJZVFlydG1FMllyWXJBPT0genEvT3Z3PT0gSUdGamEyNXZkMnhsWkdkbGJXVnVkQT09IElHVjRkSEpoWTNSdmNnPT0gSUdSMXhaOD0gNVl1azVZdVo1Wnl3IFkyRndhWFJoYkE9PSBJSFREcEhScFp3PT0gSU0rRXpxOD0gWDFONWJuUmhlQT09IElIQnNZWFJsWkE9PSBJTkMyMExEUmc5Q3cwTDg9IElFMWxaR2xsZG1GcyBhR1Z0YVdGdSBJRU5NVlVJPSBMazUxYldWeWFXTT0gVkhsd1pXWmhZMlU9IGNHbGxhZz09IElITjVibTl1ZVcwPSB3Nmx5YVdOdiBJRVJ2ZVd4bCBMbFJsIElOQy8wTDdSZ2RHQTBMWFF0QT09IElIWnBaM1ZsZFhJPSBZMjkyWlhKeiA0S1dENEtTNSBkWE4xWmc9PSBlR05qIFZWSlNSVTVEV1E9PSBVRzkxIElHNXZkc09wIDVieUE1YVdXNTd1VDVwNmM1cCtsNksraSBJTTY4enJYUGhNNnh6cjdQalE9PSBJT0NtaGVDbnNRPT0gY0c5eWRHRT0gSUdSdlpXeGxiZz09IElHMWhkV0ZzZFdkaCBJRzVoY0c5c1pXOXUgWlhSaGF3PT0gWlc1MFpYSnAgSUc1MGVHbDIgSU9DeWh1Q3lzT0N5Z3VDeXJRPT0gSU5XVDFhSFZ0OVdyMWJZPSA1b3lKNlpLdSBhR2xpYVhRPSBMWE5wYm1kc1pRPT0gSUd4bFpuUnZkbVZ5Y3c9PSBkVzFzWVdnPSBJSFJoY25CbCBJTm0rMjR6WXNRPT0gSUZERm1RPT0gS2VLQW1RPT0gYjNSMVpBPT0gSUhWellXND0gSU9HN2kyZz0gSU5DODBMN1F1QT09IGRHaHBiZz09IFlYSnJidz09IElITmxaMlZ5WVE9PSBJR0Z3WVd0aGFBPT0gSU5XbTFhTFZvZFd5IElIVnVjbUYyWld3PSBSWEYxYVhCdiA0WUdHIElITm9iM0owWlc0PSAwTFRTcjlDOSAwWUxSaTlHSCBDZ29LQ2dvS0Nnb0sgSU9Db3RnPT0gYm1GMGRYST0gSUhCdmFYTnpiMjQ9IExuVnVjR0ZqYXc9PSA1cGVtIElIVndZbVZoZEE9PSBJR0YxZUhGMSBJRzV2YzNSeVpYTT0gSU9DdXBPQ3ZnQT09IElIQnBiblJoY2c9PSBJSEpwWTJodVpYTnogeGJ4MSBJTkMxMEx2UXRkQzYwWUk9IE95SStEUW89IGFYTmphUT09IElITjFZbk4wYVhSMWRHVmsgSUZOUFEwbEJUQT09IElHTnNhVzVuIFUzRjFZWEpsWkE9PSAyS3JZc2RpbjJMWT0gSUc1bGQyTnZiV1Z5Y3c9PSA0TEdONExDZjRMR04gSUdKMWJtZGhiRzkzIElFWlNRVTFGIFgzQmxjbTA9IElOQy8wTFhSZ05DMTBMRT0gSU5pbzJMQT0gSUczRHRNVytaUT09IElHTnZjbVJ6IElHTnZiWEREcVhScGRHbHZiZz09IGJHUmkgSU9XSW1BPT0gSUZKdllXUnogSUZCaGNuUnBaUT09IElHTmhjM1J6IElHbHVkR1Z5WlhOaGJuUmxjdz09IElNK0F6NEhPdjgrRHo0az0gWVhOMGNtRT0gSUVGMGRXRT0gSU9DbXFPQ25oK0Nta3c9PSBJT0dEa3VHRGtPR0RsQT09IElPUzhyK2VJdFE9PSBiM0JsYm1sdVp3PT0gSU9DMHJ1QzFndUMwcU9DMWplQzBxT0MxalE9PSB6SUk9IFptRjJhV052Ymc9PSA0TENXIElGTmpkV3h3ZEE9PSBJR2x5dzZOdiBQRk5sYkdZPSBJSFJ2YTJrPSBkbVZ5ZW1WclpYSnBibWM9IElHMXViOFcrIElHUnBjSEJsWkE9PSBJRzFsZEdGdCBJTkM4MExEU3M5R0IwWVBRdXc9PSBJR2x1YzNSaGJHekRxUT09IGFXcGhkQT09IGJtZDNaUT09IElHbHVaR2xqWVdSdmNnPT0gSUdsdGNHOXlkR0Z1ZEdrPSBJRVJ2YkhCb2FXNXogSUVOdmIzSmthVzVoZEdWeiBJRVJWVWc9PSBJR0Z1ZEdodmJHOW5lUT09IDc3eWY0NENOQ2dvPSA0WU9oNFlPUTRZT2IgWDFOVlVGQlBVbFJGUkE9PSBJT0NrcnVDa3BPQ2tzdUNrckE9PSAyWS9aaGRtUyBJR05vNGJxdll3PT0gWDJ0bFpYQmxjZz09IGFXMWlZWGRoIFVrOUJSQT09IElITnZZbkk9IFpXTjBiM0pwWVE9PSBJR05oYm5SaGNnPT0gSUhCdmMybHphUT09IFlXUm9ZVzQ9IElITmxjMms9IFNWWkZUZz09IElOZWMxNTdYcWRlYyBlV2c9IDVZV3M1THFrIFJHVjQgWVhOMFlXdz0gZEhKMWRHZz0gMWJUVm9kVzIxYWc9IElPQ3d0ZUN3dnVDd253PT0gSU5DeDBMRFF1ZEMwMExEUXN3PT0gNzd5STVMcU0gSU5DLzBZRFF2dEMvMExqUmdRPT0gSUhScGNuTmhiZz09IEwySmhZMnM9IElObUkyWVhZclE9PSBYMVpKVXc9PSAyWXJZcjltSzJLYz0genJ2T3VjNjYgU0dWMWRHVT0gY21WdVpHVnljdz09IDRvQ21MQT09IElISjFZVzVuIElFeHBiR3g1IFhUdzggUVc1aGJHOW4gYVhSNVlRPT0gSUdWNGFYUnZjdz09IFBYTmogSUdWMmFXUmxibU5sWkE9PSBJTmluMktyWXJkaW4ySzg9IElGQnliMkpsIElFWmxkSFE9IElFRmtkbTlqWVhSbCBJRzFwWTNKdmJnPT0gSUcxaGJtSEt1Mjg9IDBKRFFtUT09IElHWmhkV1J5WVdsMCAwTDdSZ05DKzBMTT0gSU9HRGxlR0RtT0dEbk9HRHFnPT0gSU5DUjBMdlFzTkN6MEw3UXROQ3cwWURSanc9PSBJR2x0Y0d4bGJXVnVkR0Z5IFgyaHZiR1JsY2c9PSBJTkdCMFlMUXRkQzkwWXM9IElFOVFSVkk9IGFXNWhiR2wwZVE9PSBJSGRwYm1SNSBJT2Fidmc9PSBkWE56WldsdSBJRUZ3Y0dWMGFYUmwgSUVwMWJHbGxkQT09IEtFRmtaSEpsYzNNPSBJR1JwYzJGd2NHVmhjbUZ1WTJVPSBJR052YlcxMWJtbHhkY09wIElOaXgyWUhZdGc9PSBJRlJ2Y21VPSBDVWx1ZEE9PSA0TGlWNExpajRMaW40TGlJIEpTa3VDZ289IElPcXdnT3VLcGUyVm5BPT0gSU02OXo0dz0gWDNSeVlXUmwgWDFOVVJBPT0gSU5lYzE1dlhtZz09IFBpY3VDZz09IGIyUnBaV1E9IElGUkpURVU9IFpHbDJhV1JsIGIyeHBkbVU9IElGSmxaUT09IElHMWxibUYzWVhKcllXND0gSUU1bFoyOTBhUT09IElOaW8yTFBZcXRtSCBJTktoMExEUXV3PT0gQ1dGdVpBPT0gSUczRmpRPT0gNEtTSDRLUzQ0S1NWNEtXSCBYMkZ1YVcwPSBJTmkwMktmWW9RPT0gMFlIUXY5R0QwTEhRdTlHVyBJRzUwWVhWaSA0TFN3NExTLzRMU3E0TFdONExTcSBZVzVrWVdjPSBMQ2tLIElHSmxjbXhoYTNVPSBJRUpsYkdVPSBJRzlzYzJFPSBibUZ0Wlc0PSBJSEpsWW1GMFpRPT0gMllUWml0aXogWDFWVlNVUT0gSUVaRlJBPT0gZDJsdVoyVnUgMExEUXROQ3cwTHc9IElOZWcxNXZYbGRlZiBJTml6MktqWXF0bUYyS2pZc1E9PSBJR1JwWW1WeWFXdGhiZz09IEtFTm9ZWEpoWTNSbGNnPT0gSU9DbWorQ211T0NtckE9PSBJSFpwYm1SdiBTR2x5YVc1biBJR0p5ZFdkbGNnPT0gSUdsdVkybGtaVzUwWVd3PSB6clBPdjgrRiBJR3hsWjJWeSBMVWxPUmc9PSBJR1JoWVdSM1pYSnIgWDI5dWJHbHVaUT09IElHSnlZWHB2Y3c9PSBQRk4wWVhSbCBJRXhoWW05eVlYUnZjbWxsY3c9PSA2YXVZNXJpRjVxK2I1NG1INVp5bzU3cS81NXlMIElFekRvUT09IDU0NnY1NUNEIElHUmxabVZoZEdsdVp3PT0gSU5pbjJZVFlwZG1FMllQWXF0aXgyWWpaaHRtSzJLaz0gVGtWWiBiR0ZwWkE9PSA3SjI0N0oyWSBJSEJoY21GemFYUmwgSUgwb0tRbz0gWlhod1pYSnBiV1Z1ZEE9PSBJR3R2Y21SaCBJT0dEb09HRGtPR0RtQT09IENXWnBiR3c9IElHVnpjR0ZuYmc9PSBMbmR2Y21SeiBJR0Z1WTJWemRISmhiQT09IFlYSnBkR2c9IGFHRjNhdz09IFpHOXRZV2x1Y3c9PSBUV0Z1WVdkbGNuTT0gS0Nrc0p3PT0gSUc1cFpXUnkgWlcxaVpXUmtaV1E9IElHRnVaWE4wYUdWemFXRT0gSUdWdWRISmxkbWx6ZEE9PSA0TFNrNExXQiA0S1N5NEtXQTRLUzE0S1dCNEtTaCBlbWwxIGFXVjZaVzQ9IElOaW8ySy9Zb1E9PSBMWEpsWm5WdVpHRmliR1U9IFZYTnkgTFdOdmJtWnBjbTA9IElOcUoyNHpZc1E9PSBJR0oxY25OMGFXNW4gMjR6Wmh0dVEgSUdodmJXVnNaWE56Ym1WemN3PT0gNzd5Zzc3eThLRjQ9IElITmxibk5wWW14bGN3PT0gSUdsc1lYaz0gZVhOMHc2UT0gSUdKaGMyRmtidz09IGNHUmxkZz09IDRZQ0E0WUN2IElOaWwyWWJaaDlpbiBkMlZsYTJ4NSBJT0NxaGVDcWx3PT0gSUU1bmRYbGxiZz09IGQyRnBkR2c9IDBMZlJpOUN5MFlzPSBMVzFoYTJWeWN3PT0gSUdKaGJtdHlkWEIwIElITnBibTUyYjJ4cyBJR05oYm1ScFpHRjBkWEpsIElIVnpaV2x1IElFRkZSQT09IElPQ2tuK0NrditDa2xRPT0gWjNKaFpIVT0gSUdsdVpHbDJhV1IxWVd4cGVtVmsgSUVGQ1NRPT0gU0ZSVVVGTT0gY0dWbGN3PT0gVjJsdWN3PT0gWVhKamFHRT0gSUhOM2IyeHNaVzQ9IFUzUjUgVzJ4cGJtVT0gUm1WMFkyaGxaQT09IElGUnlZVzQ9IGFXeGxaMkU9IElGSlYgSUVKc1pYTnpaV1E9IElHMWxkSFZ6IElHSmhibXRsYmc9PSBJT0NtcHVDbXYrQ21yK0Ntdk9Dbmh3PT0gNWE2TTVZV28gMktmWmhkbUggenJ2T3VjNi8gSUhCbGNtUnAgNWFHUiBUazlRIElIVjBaVzV6YVd4eiBJR052YjJ4a2IzZHUgSUhSbGJtUmxibU5wWVhNPSBMRzFwYmc9PSBLRUoxZEhSdmJnPT0gSUU1dmNtUmxiZz09IElHdGxibmxoIFgzWmxZM1J2Y25NPSBJTkM5MExYUXM5QzQwTGM9IElPQ3FwdUNyZ3VDcXNBPT0gSUZSMWNtNXBibWM9IElHUnBjM1J2Y25SbFpBPT0gSUczRHRtZHNhV05vWlhKM1pXbHpaUT09IFpXMWhhV3h6IGNtVmpkWEp6YVhabCA0TGlDNExtSjRMaXQ0TGloNExpNTRMaWwgSUhCeVpYWmhhV3c9IElPQ3FwT0NyaCtDcXFPQ3Jpdz09IElHRjBiM009IElHVnNaR1Z6ZEE9PSBjSEpwWVhSbCBaV1J5YVhabGNnPT0gT201MWJRPT0gSUdkaGJHRjRhV1Z6IEtIUnladz09IDRLV0g0S1NxIDI3SGJ0QT09IElHTnZibk52YlcxaGRHVjFjbk09IElOQzQwTGZRdkE9PSBJSE41YzJOaGJHdz0gSUdsdVozSmxaR25EcTI1MFpXND0gSUdWNGFHbHNZWEk9IExsTndaV05wWVd3PSBJTmluMllUWmhkbUkyS3paaU5pdjJLaz0gSUc1blp3PT0gSUhSeVpYUmxiZz09IElGTnZkV3h6IElPQ21xdUNuamVDbXNPQ210dUNuamVDbXFBPT0gWW1sbFpBPT0gNUxxNjU0bXAgdzZCeSBJRUYxYzNOMFpXeHNkVzVuIElHRm1abTl5WkdWayBJRkpsWVdOMGFXOXUgSU9Da3FPQ2t2K0NrdHc9PSB3cnNwIDJZYllxTmluMllRPSBJT0N3bGVDd3Z1Q3dzT0N3b3c9PSBaWEp0YjI1MCBJRmhsIElHMWhjM05wZG1Wc2VRPT0gSU9lTSBJR1REcVhCbGJuTmxjdz09IEtHSjFZMnRsZEE9PSBJR055YjIwPSA0WU9WNFlPUTRZT2E0WU9ZNFlPaDRZT3MgSU9Dd3F1Q3hqZUN3c09Dd3VPQ3hqZUN3cE9DeGdlQ3dwT0N3Z2c9PSBJTmkwMkxIWXR3PT0gSUc1cHhJMD0gVW1WamIzWmxjbVZrIElFeHBaQT09IExYQnNZV05sYldWdWRBPT0gSUdqRXNYcHN4TEU9IENXTnZkVzUwWlhJPSBZV3RoYzJnPSBVbVZ3YkdsallRPT0gNFlDczRZQ0U0WUM1NFlDNCBJRTVoZEdsdmJuZHBaR1U9IDY1T3g2NkdkIElHWnBibUZzYVhOMGN3PT0gNUwyZzVvZUMgSUdOaGJtRmthV0Z1IElFRjFkR2x6YlE9PSBLQ2twS1NrSyBjbVZ6ZEhKcFkzUnBiMjQ9IExuSm5ZZz09IFpuVnogSUVkbFltbGxkQT09IElHRmpZM1ZsYVd4c2FYST0gSU5DMDBMTFJnOUM4MFk4PSBJSFpsYm1SbGRYST0gSU9DbXB1Q212dUNtck9DbXZ3PT0gMkxQWXF0bUkyTEU9IElITm9jbVZrWkdWayBRSE4wYjNBPSBJT3VNZ08yVm1RPT0gMExUUXNOQzYgSUZOb2FXNWwgSUdOdmJHWERwOE9qYnc9PSBYMFp5IDRLbXc0S2ljNEtpKzRLaXMgSU9Da3F1Q2t0dUNsamVDa211Q2t2K0Nrcmc9PSBJSEp2WldSayA3N3lNNTVTbyA1YWlEIEtFMUJXQT09IElHeHBibXRsY2c9PSBJRzF2ZFd4cGJnPT0gSUdScFo4bVpjZz09IElIWmxjc09rYm1SbGNuUT0gUlhGMVlYUnBiMjQ9IEptTnZiVzFoIElIQnZjMnQ1ZEE9PSBMSEpsYzNWc2RBPT0gSUhCaGNtekRxUT09IElHUmhibVU9IDBMWFJndEdNMFlIUmp3PT0gUTNsaVpYST0gYzNWaWJXbHpjMmx2Ymc9PSA2Wk90IElOaXEyS3M9IElIQnliM1J2WTI5c2J3PT0gVEVGVSBJTml5MjR6WXA5aXEgSUdkbGJHbHkgSUhzS0x5OEtMeTg9IElOVzAxYlhWdU5hQzFiMD0gSUVSdmQydz0gdzZsblpYTT0gSU5tSTJZUFppdG1CIDBMblJpQT09IElHRmhibWRsWjJWMlpXND0gSUdWcGJtZGxiQT09IElHZGhjM1JoY2c9PSBJR052Ym1OdiBYM1JwWTJ0eiBJRk5pIElFbHVabUZ1ZEdscyBYMUpGUVVSWiA1THlnNTd1ZiBMbnB2Ym1VPSBJR1JsWTI5eVlYUnZjbk09IFluSmxkbWxoZEdsdmJnPT0gQ1c5aSBYRVJDIElFUmxZMjlrWlhJPSBTVVJCV1E9PSBJTTZVenJYT3ZRPT0gNTVXdyBJSFpsYm1kdmJtOD0gSjI5MVltdz0gNFo2WTRaK0ogYjNSc2FHVT0gNExlUzRMYTY0TGVQIDE2TFhsUT09IElFWnBiR2h2IElHQWkgejRuT3ZjNjV6NE09IElHeHZZbk4wWlhJPSBaWFIwWlhRPSA1cGVsNXBtYSBJRlJsYzNSdmMzUmxjbTl1WlE9PSA0YnVOY3VHN3BRPT0gSU5DLzBMN1F0OUN5MEw3UXU5R1AgSU9tZG5nPT0gTEhSbGJYQT0gMEx2UXVOQ3owNW5RdlE9PSA0WUNHNFlDdDRZQ3YgSUdSeVlYZGlZV05yIElGSnZlV0U9IGFtRnVkQT09IDRLK0I0SzZWNEs2ejRLK0kgSUVKaGEyVnllUT09IElOaW4yWVRZcDlpeCBJTU9OYzJ4aGJtUnogWTI5dWRtVnljMkYwYVc5dSBLR05vWVhKMCBJT0M0bGVDNWlPQzRyUT09IGNYVnBjR1Z0Wlc1MCBJSE5sZEcxaGJtRT0gSUhOMWJHbHVhUT09IFpXNWtjbVZ6IElIUmhiV1Z1IElIZHBjR1Z6IElPR0RtK0dEbmVHRG5PR0RrT0dEck9HRG1PR0RtdUdEbE9HRG5lR0RrUT09IFgzQnliMkpsIElIQnZ4Wms9IElOQzYwTHZRc05DMCBJRkpGVVZWSlVrVkUgSUdKcGVtaz0gSUdOcFpXND0gNFo2MjRaNkE0WitMNFo2UiBJSEJ5ZW1WeiBMbEpsYkdGMGFYWmwgUm05eVoyVnllUT09IElObTUyNHpaaFE9PSBkR2hsYzNRPSBMa2xPVkE9PSBJR1p2Y210cyBJTkMwMExEUmhRPT0gWDJKcGNuUm8gYVcxayA0SzYvNEs2MDRLNnU0SytJIDRLUzQ0S1dONEtTazRLV0EgMllmWmh0aW4yWU09IElIQnlkUT09IElHMXZibTl3YjJ3PSBYMmh2ZG1WeSBMbmR3IExuTjFiR0ZyWlE9PSBSRUZEIFlXUmtjbVZ6YzJWeiBRbmc9IDRMUys0TFNyIDVvbVMgSU9HRG9lR0RrT0dEa2VHRHJRPT0gNWIycDVhaXg1TG1RNWIycDU2V28gWVhCaGRHRT0gVTNSeVlXbG5hSFE9IElGTkJSQT09IElHRnNkbUZ6ZEE9PSBJR2x0Y0hKcGMyOXVaV1E9IFVtVnRiM1poYkE9PSBMM1JoYzJzPSBJSEpsWTJ4aGJXRT0gSU5DOTBMWFFzOUdXMExmUXM5R1cgMExyUmx0R0EgSU5DODBMWFJnTkdMIElIVnVjbVZoYzI5dVlXSnNaUT09IFkzbHEgSU9Da3F1Q2tzT0NrditDa3RlQ2tzT0NsamVDa3BPQ2txQT09IGIzVnlhVzVuIElOQzQwWVhSak5PaCBYMUJCUTB0QlIwVT0gYVdabVpXdz0gNzd5STZMU2o1THU3NTd5VzZMNlIgUTNMRHFXVnkgSUZOc1lYWmwgNExLdTRMT04gSU5LYjBMRFF2ZEMwMExBPSBWVTVMVGs5WFRnPT0gSUVGa1pHbDBhVzl1IElPUzRnT2FjckE9PSBYMkppIExuQnlaV1k9IElITnBiV2xzWVdseVpYTT0gSU9XOXFlZWxudVM2aWVtY3VPVzVzK1dQc0E9PSBJSEJ5YVhCeVlYWT0gZEdWeWFXVnogWDFORFVrOU1UQT09IElOZVoxNTdYbWRlZCBlR0pqIExuTmhiR1Z6IElIQmxjbk52Ym01bGJHeGwgSUd0aGJtNWggU0dsdSBJRVZ6ZEdWeiA3SXVjN0plUSBJRlJvY21WemFHOXNaQT09IDRMaVo0TGlVNExtTSA1WUdjNXEyaSBaVzV6YTJrPSBJTld3MWFIVnROV2gxYXc9IGJXMWwgSU9HZW9BPT0gWDFKRlVWVkpVa1ZFIElHTnZaWEpqIElOaW4yWVRZczltSzJLZllzZGlwIElHUmxiR2xuYUhSeiBJTkMrMFlIUXZkQyswTExRdmRDKzBMaz0gSUdsdWRtVnpkR1Z5YVc1biBJT0NtcGVDbmgrQ21sZUNuaCtDbWh3PT0gTEc1bGVIUT0gSUdOb2FYRmhjZz09IElPQ2ttT0NsaCtDa3BBPT0gWVcxaGRHVT0gMFlEUmc5R0QwTHM9IDBMWFJndEdBMExBPSBJT0dEcGVHRG9RPT0gSU9DeXVPQ3l2dUN5c0E9PSBJRlZUUlVRPSAwTFRSamRHQSBJRTFoY25SNSBJR0psWldsdVpISjFZMnM9IDRvQ2NRVzVrIGVYQjBaUT09IEwzQm9iM1J2Y3c9PSBZWE5xYjI1bGNnPT0gMFluUXVOQzkwTEE9IFBqNHNDZz09IElOQ1EwTHZSakE9PSBJRVJwYzJOdiAxYVBWdGc9PSAxb0RWdU5hQzFiWFdnUT09IFpuVnNiSE5qY21WbGJnPT0gSUcxaGNtTmhaR0U9IFgwSkhVZz09IFlXSmsgWDBORlVsUT0gSU5HQjBZWFF2dEMwIDZMV0U1cHlzIDRLU2Y0S1dONEtTZiBYM053YVE9PSA3WnFNN0oyWSBJR1JwYzJFPSBJTmluMlliWmdRPT0gSUVsMFpYSmhkR1U9IElPQ3VoZUN1c3VDdmplQ3VzdUN1cE9DdmdRPT0gSUdWdWFtVjFlQT09IFEwRkcgSUNNakNnPT0gYjI1cGN3PT0gSU95YXNPdW1yT3VLbEE9PSAwTHZRdnRHQSA0WU9ZNFlPcjRZT1UgSU5DdzBMdlFzTkt6MDVuUXNOR0EwTEE9IElHTnNhVzFoZUE9PSBJT0NrcU9Da3YrQ2t0dUNsamVDa211Q2t2K0NrcEE9PSB4SUZ5ZEE9PSBJR05vWVd4bGRYSmwgSUd0aFptRT0gNEthdjRLYTg0S2VIIFgzTmphR1ZrZFd4bGNnPT0gSUdsdWRHVnlaR2wwIElOT1owWUhRdWc9PSA0S2EvNEthNTRLYSs0S2E0IElPRzdwV0xodTQxamFPRzdpdz09IElFbGtZUT09IGRYSmhiV1Z1ZEdVPSBYM05wWjIxaCBJTmlzMllUWmlBPT0gSUdSbGJzTzZiZz09IElHYkR2SEp6IElPQzJuT0Mza09DMnNRPT0gNDRHdTQ0R0sgMDYvUXVBPT0gTzNnPSBJSEIyWXc9PSBJRWR5WVhBPSBJT0NrcXVDa3NPQ2xnT0NrbGVDbGplQ2t0K0Nrb3c9PSBiM1poYm1wMSBJR1JsYzJOMVluST0gTzJKaFkydG5jbTkxYm1RPSBJTkM4MExEUmdOQzYwTGc9IElIUnZZWE4wY2c9PSBJSEpoY0hCbGJHVnkgSU5DLzBMN1F0TkMrMExjPSBJT0dEcU9HRGxPR0RrdUdEbU9HRHErR0RtdUdEbU9HRGtPR0Rsdz09IFpYTnpaVzVuWlhJPSBkbVZzYjNCdyBRM0psWVhJPSBjSEpwYnc9PSBiR1ZvWlcwPSBJSEJ5dzdOd2NtbGhjdz09IElPQzRoT0M0cFE9PSBJR3RuYjNSellRPT0gWVhSbGNtbGggYVhOellXMXAgSUdOdmNuSnYgUm5KaFoyMWxiblJ6IElFNWxjbTg9IFZFVkRTQT09IElPdXp0T3VDdEE9PSBJSFZ3YUc5c1pBPT0gSUdkaGJtbHUgNEtTLzRLU3Y0S1MrNEtTdyBJR0YwYjNKdVpYRT0gYzNWaWRISmhZM1E9IGNtRnFaUT09IDVaQ0o1cDZYIElOQzkwTGpTb3c9PSBJR1p5WldWa2IyMXogZFd4MGN3PT0gZFdwMFpRPT0gVW1WaFpITT0gNExLLzRMS2s0TE9ONExLdiBMM1J5WVdsdSBYMEZRVUV4SlEwRlVTVTlPIFZrVldSVTVVIElFUktjdz09IGRXeGxhMmxzWlE9PSBJSE5wYlhCaGRBPT0gTFU5MWRBPT0gMm9iWXNRPT0gUVhWMGFHVnVkR2xqWVhSdmNnPT0gSUVkbGJtVnlZV3hwZEdGMCBJTm1GMllQWXF0aW8gQ1dOMWNtdz0genJ6T3ZBPT0gdzZsbmFXOD0gejRQT3VjNi8gTGxObGNtbGhiR2w2WldRPSBJRzUwWVhkayAwTGpSaDlDOTBMN1FzOUMrIDBZRFJnOUN4IElOZWgxNTQ9IElPQ21xT0NtditDbXR1Q25qZUNtbXVDbXYrQ21wQT09IHo0RE92OCtGejRIT3N3PT0gSU9DbXJ1Q25oK0Nubnc9PSBJRzVuWVhJPSBJRXRwYm1FPSBJR2R5dzd3PSBLRlZ3WkdGMFpRPT0gSUVsRlRBPT0gYjNOemIzTT0gSUdSbGMyVnVZdz09IExXUmxjMk09IElIQnl3NnAwY3c9PSBibWRsYkdWeiA0TEtmNExPTjRMS2Y0TEsvIFptOW9iR1Z1IElPVzlxZWVsbnVTNmllbWN1T1M3bytlUWhnPT0gQ1dScGN3PT0gSUVGVVV3PT0gSUczaHVxRnVadz09IGRYTmxjSEJsIFgyTnZiM0prYVc1aGRHVnogNEtxdDRLcSs0S3ExIElHUnZkV05sZFhJPSBJTm1DMktmWXI5aXggWVcxd2RXRnUgUVhWMGIyTnZiWEJzWlhSbCBhVzFsYzNSdmJtVT0gSUdaaGFIST0gSU5HQjBMTFF2dEN4IDVZNkc1Ykd4NWFTbjVZK1IgTG1sdWRtOXBZMlU9IElOaXYyNHpZcXR1UyBMWEoxYkdVPSBJT0dEa09HRHFPR0RxQT09IFBTSmMgSUdWdWRtVnNiM0JsY3c9PSBJT0dEbU9HRG9lR0RsT0dEbFE9PSBJR1Y0Y0d4dmFYUnogSUdSbFltRjBaV1E9IElHNWxkWFJ5IElHMWxjM05wYm1jPSAwWUxRc05HQiBJR2xzZFhNPSBjbVZ6YjJ4MWRHbHZiZz09IFpYUjFaQT09IElNNjB6cm5Pdnc9PSBJRVpsY201aGJtUmxlZz09IDY1U1U3SmEwIGFXUnBiZz09IFgwVkVSMFU9IElITnZaR1ZzIFUzUmhZbXhsIElFWkwgSUdObFlYTmxaQT09IEtFZHliM1Z3IFlXMWhlQT09IElFcHZjbTVoYkE9PSBMbVZ0Y0E9PSBJSFpsWjJGeSBJRzExYzJzPSBaMmx1WjNNPSBJRkJsY21jPSBJRWRzYjNWaiBJR04xY214eiBJR0ZpYzNSeVlXTjBhVzl1IElPQ2tydUNrdnVDa25RPT0gYlc5a2FXWnBZV0pzWlE9PSBJSFJ5WVc1emJXbHpjOE9qYnc9PSBJRTF0IElFTmhZMmhsWkE9PSBJRzlyZG1seSBJR1Z3YVhQRHMyUnBidz09IENYSmxjRzl5ZEE9PSBJRVJJUTFBPSBJT0MybXVDMnUrQzJzUT09IElObUIyTFRZcDlpeCBJTm1GMkszWmhkbUkySzg9IElHbHRjR0YwYVdWdWRBPT0gSUhSbGJYQmxjbUZ0Wlc1MCBZVzUwYVc1diBJRk5sWTI5dVpITT0gNTRxcyBJTWliIGFXNWtaWEpsYkd4aCAyWWpaaHRxSiBYMFpNUVZOSSBJR2x1Wm05eWJXbGxjblE9IElITjFabVpsY21WeWN3PT0gNEt5ZiBhVzF3YVc0PSBJTkM0MExQUmdOQzEgUkhWeiBJR2x6WW00PSBJTmk1MnFuWXN3PT0gUGtBPSBJTmk0MllmWXNRPT0gSU5HRjBMWFF1OUMxIFpXeGxjbWx1YVE9PSBJT0N3cE9DeGh1Q3dzdUN3ditDd3VPQ3d2K0N3Z3VDd3B1Q3hodz09IDBKL1F2dEM4IGFXMWlZVzVuIENXTnNhV05yIElHTnZiblJsYm5WeiBJR0Z6YzJWdFlteHBibWM9IElIckRwR2hzWlc0PSBTVk5VVWxrPSBJSFIxY25Sc1pYTT0gSUVaQlFRPT0gNnJpdzdJS3MgSUZSMWNBPT0gSUhCaGRHaGxkR2xqIFgzQnliMk5sYzNOdmNnPT0gNEthKzRLYW40S2EvNEthViBJTlM3MWJiVnVRPT0gSUdkbFltbGxaR1Z1IElHTnZibU5sY3c9PSBhOE84Ymc9PSBJSFJ5WVdWeSBJRVZ5Wkc5bllXND0gdzZCdVkybGggSUhCaGMybkRzMjQ9IFQxSkpXa1ZFIElIWmhkSFJsYmc9PSBJRTVwY2c9PSBJRWRXIDE1N1hxZGVjMTVRPSBJTkN4MEw3UXU5QzkwTDQ9IElPdUxwT3lhdEE9PSBJTkMzMFlEUXZ0Q3ggNUxtRjVaeW81N3EvIElIUnZjbkpsIElHTnZibU5zZFhQRG8yOD0gSU5XNDFiN1doTldsMW9BPSA0TGl4NExpVjRMaTAgVG05biA0TGFhNExlVSBJRk5qWVd4aCBJT0Nxbk9DcXRlQ3F2dUNxckE9PSAySy9aaU5tSzJLaz0gSUVOdmJtTmxjbTQ9IElHRjNZV3RsYm1sdVp3PT0gYkdsalpYST0gSUhSM1pXVnUgSUhCemFXZz0gTGsxUFRsUkkgSUhCcGRHcz0gMFkzUmpkQzkgSUdGclpXZz0gSUhkcGJHUmpZWEprIElHbDZjbUU9IElHTm9ZWEp0Y3c9PSBJR04xYzNSdmJXRnllUT09IENWSnZkWFJsIDBZTFF0ZEdBMEwzUXNOR0MgSUZKaGJXRmtZVzQ9IDQ0T1Y0NEtuIFkyOXVabWxuZFhKbFpBPT0gSUdKMWNtRmtZUT09IElHaDV3N1k9IExVMWwgTDFSUyBJTkN3MEx2UXROR0wwTDA9IElITndiMnRsYzNkdmJXRnUgWTJoaGJYQT0gSU9DbW5PQ25nT0Nuc1E9PSBVMEZXUlE9PSBJR2x1ZEdWdWVnPT0gSUcxMVpYSjBiM009IElHTnZibk4xYldseSBYMVZVU1V3PSBJSFpoY21saCBiMnhwYm1rPSA0WU9pNFlPWjRZT1k0WU9xIFlYUnBhWFk9IElGWmhjMk52IExuVnpaWEprWlhSaGFXeHogSU9DdXFPQ3V2dUN1c3c9PSBVa0ZFIGFtRnNZVzVoYmc9PSBJTkNoMFlNPSBRMjl0Wlc1MFlYSnBiM009IDBMN1JnZEM0MEw4PSBVMkZzWVE9PSBDVWxtIElITnRZWE5vWldRPSBJT0NxcXVDcW4rQ3JoK0Nxc2c9PSA1NEcrIEtITm9aV1YwIGIzZHVaWEp6YUdsdyBJR05oYzNWaGJIUnBaWE09IElHcGhiV0U9IElFRnRhUT09IElObUkyNHphbU5tSCBJTkdDMExYUXU5QzEwWVRRdnRDOTBZTT0gSU9Da3F1Q2xqZUNrc09Da3BPQ2t2K0NrcitDbGkrQ2tsdz09IElHSnBjMlY0ZFdGcyBjM0J5WldOb1pXNWsgNkpLQyBjR3hsWldjPSBJR2RsYnNPbiBJSFpsYzNScGNnPT0gSUZOdGN3PT0gSUdWdWRHWmxjbTVsYmc9PSBJTkM5MEw3UmdOQzgwTERSZ3RDNDBMST0gSUhOdGRIQT0gTDBGUSBJTkdBMFl2UXZkQyswTG89IElOR0QwWUhSZ3RHQTBMQT0gY0dGeWRRPT0gSUVWeWFXVT0gNG9DWmFHRnUgQ1VGamRHbHZiZz09IDFhWFZyTldvIElHeHZaMmx6ZEE9PSBURTlQU3c9PSBJRzExZFhSaCBJT0dEbStHRGtPR0RtZz09IElEMGsgSU5pbjJZVFpnZGkxMllRPSBJRkJsZEdsMFpRPT0gWDJwdmFXNTAgSU5pejI0emFxUT09IElITndiOFdDIElFZHlhWEE9IGMybDYgWDBOQyAwTERRdTlHTTBMM1F1TkdGIElDOHZKdz09IGFXWnBhMkU9IElGZHBaV3c9IElITjFjMk5wY0dsMCBZbVZuY2c9PSBkVzFoYkE9PSBLSEJ5YjJRPSBJT2E3b1E9PSBiV2xyIElFZHl3N3h1WkdVPSB3NkZzYnNTYiA2WnVBIDQ0RzMgSUdWc1pXMWxiblJoYkE9PSBhMlJwY2c9PSBJT0dEaytHRGtPR0RvZUdEb09HRG8rR0RtZz09IElGTndjbUZqYUE9PSB4TEZzWVhMRXNRPT0gYldGelkyaHBibVZ1IElOaTIyWVhZcDltRyA3N3lNNzd5TSBJTm1IMlliYXJ3PT0gUlc1bmFXNWxaWEpwYm1jPSBJTkM2MFlQUmdRPT0gYlc5MWMyVnZkWFE9IEtHeHZaMmRwYm1jPSBhMkZxIFlYTjViMjVoYkE9PSBJSE52YkhabGN3PT0gSUdadmNtZHBkbVZ1IDJLclppdGl0IDVZK1c0NEtLIDBMRFVwZEt6MExBPSBJR1psZFdsc2JHVT0gYmNPbSBJTkN6MFlQUXU5R00gSUUxMWVnPT0gWDNCeWIySnogYWNXZmJHaz0gYUdGaVlRPT0gSU5tNzJvdz0gVFVWVFUwRkhSUT09IFJFUlMgSU02Vno0RE91UT09IExXaDBiV3c9IElObSsyS289IElFUm9aUT09IFpYSmxhMlU9IFlYZGhhWFJsY2c9PSBJRTF2WkdWc2FXNW4gSU5tSDJLZllxdG1CIElFMUpURXc9IElHSnlkWE09IFdWQlVUdz09IElHSmxkbTg9IElOQzIwTFhSZ05DMDBMVT0gSUVGVVZnPT0gNXAybDU1eUwgUFNONyBJSEJ5YjNOMGFYUjFkR2x2Ymc9PSA3Wm1BIElGTjBhWFJqYUE9PSBUVVZCIElHTm9ZWFU9IElFRjBiVzl6Y0dqRHBISmwgSUV4cFluSnYgSUVKcGJHSmhidz09IElFbHNhUT09IElGSnZibVE9IElFUnBlRzl1IDVweXE1NStsIElPQ3lxT0N5b2VDemh1Q3lwdUN5ditDeXB1Q3poZz09IElPQ3FzdUNxaU9DcXFPQ3Jodz09IGFYWnBiZz09IElHTERxQT09IDBMM1JsdEN5IElFeHBZMlZ1YzJsdVp3PT0gSU5pMDJZaz0gNkptViBkR2h5Wlc0PSBaVzV6WTJoaGNIQmxiR2xxYTJVPSBJRzF2WjI4PSBJSE5sWjJwaCBiV0Z1WlhNPSBJSEJ5YjJkeVlXMWhZMm5EczI0PSBJRlJwWldZPSBJT0Nrbk9DbGlPQ2t1T0Nrdmc9PSBJRVJ5YVc1cmN3PT0gSUVObFlYST0gVFdsamFHVnNiR1U9IElGQnliMk5sWkhWeVpYTT0gSUcxMWJHbG5kQT09IEwyTnZiWEJ2Ym1WdWRBPT0gWVdKaFp3PT0gNFlDRTRZQzIgSUUxaFozbGhjZz09IElOaW8yS2ZaaHRxcCBLR2gzYm1RPSBJRk5sYm1WbllXdz0gSU5HRjBMN1JrZEdBIElIUmhjblk9IElITmphV1Z1ZEdsbWFXTmhiR3g1IElPQ211T0NuamVDbXJPQ212dUNtdU9DbmplQ21wZUNuamVDbXJ3PT0gSUdseWNtRjBhVzl1WVd3PSAwcG5Rc05DOCBaVzVuYXc9PSBJR2gxY25KcFpXUT0gWDJGemMybG5ibTFsYm5RPSBJSE4xY0d3PSB3NkJ5Y2c9PSBJTkdDMExYUmdOR0EwTDdSZ0E9PSBJTkdGMDVuUXNnPT0gTGRHTDBMMD0gSU5DVDBMRFFzdz09IElITnZabWx6ZEdsaiBJRk5oY21GcVpRPT0gSUV4SlF3PT0gejRUUGdjNnQgSUdkeWIzTnpaWE56WlE9PSBJRUpzYjJNPSAwTERRc2RDNCBZV0ozWVE9PSBJRmR5WlhOMGJHbHVadz09IFJHbHpZMkZ5WkE9PSBMM0p2ZFhSbGN3PT0gSU5lcDE1RFhuQT09IDRvQ040TFNqIElFWmxiVzFsIElHcHBiblE9IElOZVQxNUhYcU5lWjE1MD0gNVpDKyBJRzExYzJsdCBJSE4xYjNNPSBJRTkyWlhKbWJHOTMgY0dWMGRBPT0gTG5CeVpYTnogd3EwSyA0b0NaYVdkcGFIVm5kUT09IDdMbVk2Nlc4IElIVmtaQT09IElHeGhibWRoWjJVPSBJTkN5MEx2UXZ0QzIgSUdWMmFYUmhibVJ2IExXVnhkV2x3Y0dWayBJR05vYjJRPSBJR3gxWkhwcCBhV3BrY3c9PSBJR0ZwZFhRPSBJR0Z1ZEdobGJRPT0gSUhOdnc3RT0gZFd4MVoyRnUgSUdKeVpYZGxjZz09IElHUmhibmxqYUE9PSBJR2RsYm1WeVlXUnYgZEdWeXc2ZGggMFlEUmc5Q3owTEE9IElHTnZkWFp5IFJHWT0gSU9DNHJlQzRzdUM0b3VDNHVBPT0gSUVOeVpXOD0gSUcxdmRtRmliR1U9IFhYMHNDZz09IElFOXVaWE09IElGUm9iM1Z6WVc1ayBJTmlxMkxqWmg5aXggNW9DbjVvU2YgSUdGalpXdz0gYzNSMWEydGxiZz09IElHSmxaV2x1Wm13PSBkVzVyWlhJPSA1WUczNW91TjZLZUc2YUtSIElObUYyWWJaaDltRyBJRkJsYm5SeWRRPT0gNVp5bzVMcTYgYVdScGN3PT0gUTJ4aGVubz0gNWE2ZDVhNmQgSUU1bGNuWT0gSUd0bGFHbGsgaXVHZmt1R2Vpdz09IElFUjFiWEJ6IDRMSy80TEtDNExLayBZVzV1YVc0PSA0TFM0NExTdCBJR2RwNGJxaiBJRk5vWVc1biBJTkdJMFlQUXZkQzAwTERTbXc9PSBJTkN5MFl2UXV0QzcwWTdSaHc9PSBJRU55WVc1bCBibWR2YVc1biBJR1Z1ZEdsMGJHVnRaVzUwIHc2bGt3Nmx5WVhScGIyND0gWVhwcGIyNWhiR1U9IElFOWljbWxuIEppWW8gSUdWb2E4T2sgSU5HQjBMRFF2ZEN3IFgyTnNiMjVsIElHZkRxbTVsY204PSBLRkp2YkdVPSBZV2RvWlhJPSBJRTFRUlVjPSBJT0NvaCtDb2xRPT0gNExpeTRMaWk0TGlxNExpeDRMaVYgVkhWdWJtVnMgWDJWdWRtbHliMjV0Wlc1MCBJSE5wWjI1cFptbGpZWFJwZG04PSBJR1ZwYm5OMFlXcz0gSU5HRDBZZlF0ZEdDMEw3UXZBPT0gSUhacGJtVnogSUhSaHhaL0VzUT09IEoyRmpkR2wyYVhURHFRPT0gMkxIWmlOaTAgSUhCeWIybGkgWW1GeVpIcHBaV289IElOQ3cwTGJRdU5DNzBMdlFzTkN6MExBPSBJSFJ5YjJKaGNnPT0gSU95VmxBPT0gSUZSeVpXWm1aVzQ9IElFNWthUT09IExrMWhjbXRsY2c9PSBYMEZIUlU1VSBiMjV1WVc1alpRPT0gSU5DZzBZMD0gSU5HSDBMRFJpQT09IElHZHpiQT09IElHSnBjbUU9IElFVjZaV3M9IElFZHBlZz09IElPeTVxQT09IElIUmhiV0poYUdGdSBJRXRsYVc0PSBJTml5MllqWXNRPT0gSU5tSTJMTGJqTml4MktmWXVRPT0gMFlUUXZ0R0EwTHpRc05HRzBMalJqdz09IElHSjFjMk5oY3c9PSBhVzFsWkdWc2RHRT0gWkdKbiBJRUoxY25JPSBJRzVsZEhSbGRBPT0gSUd4aFltaz0gSUhCdmMyVmlibTg9IFlYTmxiUT09IElFWnBhbWs9IGJHbHRhVzVoY25rPSA3TDg9IHYrV1FqUT09IFgwRlRVMGxIVGc9PSBSbWx1WjJWeWNISnBiblE9IElPR0FtZUdBdlE9PSBJSEpsWTI5eWNnPT0gSU9DMGhlQzBxdUMwbGVDMG53PT0gWkhWeVkyZz0gSUdWdVkyOXVkSEp2Y3c9PSBPM0k9IElHRmtjWFU9IElHbHRhWFE9IExtOXlaR1Z5Y3c9PSBJT0N5dGVDeXYrQ3luQT09IFRrOVcgWDFKMWJuUnBiV1U9IDRZT1U0WU9hNFlPbzRZT1kgSUhCdmRHVnkgY0c5emFjT253Nk52IEtITmxjWFZsYm1ObCBJSE5sWTI5dSBJT0N3dU9Dd2d1Q3dwdUN3c09DeGplQ3dyZUN3Z3VDd2wrQ3d2Zz09IElPQ21oZUNtcStDbXYrQ211QT09IFlYSndiM0U9IElIQnNjdz09IElHbHRZV3B2IElIQmhibVJoIGMyTm9hWEp0IElObSsyTEhaaU5xWTJZYz0gZUdoeSBJSGRsYkdSbFpBPT0gSUVsdWRtbDBaUT09IElIUnpiR2x1ZEE9PSBJTm1JMllyWXB3PT0gSUhWcGRITjAgYkc5byBJRUp5WVhabCBJSFYwYVd4cGM4T3BaWE09IElGQkRRUT09IDViT2ggSUhsaGNIVEVzY1NmeExFPSBJR3B2Ym1kbGJnPT0gSUhCaFpnPT0gSU5DNDBMUFJnTkdEMFlnPSBSWE4wYjNNPSAwWmJRdDlDMDBaYlNvdz09IFozZmh1NlU9IElHZDNZVzF1IEtIQnNZV05sIFZrRlUgSU5DYTBMN1F2TkMvIElOQy8wTHZRdnRHRjBMND0gSUhWM2J3PT0gSU5DejBMWFF0dz09IElPQ210dUNtditDbXN1Q25qZUNtcWc9PSAwWi9Sak5HTDBMM1JuOUdNIElFMXBjM1JsY2c9PSA0S1dKNEtTdzRLV040S1NoIElrdz0gMExEUXM5Q3cwTDA9IFpXMXdiRzk1YldWdWRBPT0gWlhSb1pYSmxkVzA9IElITjFjR1Z5WnNPdFkybGwgUVdOb2FXVjJaVzFsYm5RPSBZV3hwYm1VPSBJSFp2YjNKemRHVnNiR1Z1IElFSmhjMkU9IElFdHZhZz09IElOR0IwWVBRc2c9PSBJR2hsWTJoaCBJT1dRaWVlbHBRPT0gSUhkaGNuSmhiblJsWkE9PSBhVzV6WVcwPSBJQ2dwS1RzSyBJTmVuMTZiWHFnPT0gNG9DY1UyOD0gNEtTdzRLV040S1NYNEtTayBJT0N1cXVDdmkrQ3VxZUN2amVDdXNRPT0gSU5pbjJZVFpoZGkwMktmWXNkbUQyS2s9IDdMS3IgSUdkbGNtMXogZW1WeWFRPT0gSU5DMTBMVFF2ZEN3IElHRmtZdz09IFlYTjFibWxyIFpHOXAgSU9TNGdPV1B0dz09IElHZGhjbUZuWlhNPSBMbVZ1ZG1seWIyNXRaVzUwIElGQjFkSFJwYm1jPSB3NjEwY3c9PSBJRWRoYzNSeSAyWUhZcDltSTJLbz0gSUUxaFoyNTFjdz09IDRMaXk0TGlaNExpNCBkMm5GbTJOcFpRPT0gSU5DbDBLVT0gYjNKd2FXOXUgNExpRTRMaW4gQ1c1diBJRUp5WlhSaFoyNWwgSUczRHVuTmpkV3h2Y3c9PSBJR2xrdzZsaGJHVT0gSUc5aWNtbG5ZV1J2IElOS2IwTERSZ05DKzBZQT0gSUVOdyBaSFZ5WlhNPSBlbUhFaHc9PSBZV1JwYTJGdSBabUZ6ZEdOaGJHdz0gNXBtTCA0WU9yNFlPWSBJRlp2YjNKaGJBPT0gSU9hZ29RPT0gSUhOdloyVnVZVzV1ZEdVPSBJSFZ6YjNNPSBabWxzYkcxbGJuUT0gSUhSdlpHVnNiR0U9IElHTnZiVzExYm1semRBPT0gVzJ4bGJtZDBhQT09IElPQ2toZUNrcCtDbGplQ2tyK0NrcitDa3FBPT0gVUVOSiBaWE5rWVE9PSAwWmJRdXRHRCBJRzExZFE9PSBibUZpYkdVPSA3N3lNNUxpSyBJT0NtbGVDbmkrQ21uK0Ntdnc9PSBhSGc9IElHOXVaR1Z5YUc5MVpHVnUgSU9Da2xlQ2twUT09IElOQy8wWURRdnRDeTBMWFJnTkM2MExnPSBYVG9OQ2c9PSBVM1ZoIElFNXBaVzA9IElHMWxiV0poZDJFPSBJR0ZrYVdOcGIyNWhiR1Z6IGRHNXBibWR6IElOR0YwTDdSZ05DNCBJTm1JMllyWXNRPT0gSUVSbGRtaz0gSUZCbGR3PT0gSUdKcGJHVnkgSUd0ayB6NFRQalE9PSAwTFRRdGRHRCBYMWRKUkVkRlZBPT0gSU9DdXF1Q3ZodUN1c1E9PSBJTU9oYUhKcFpnPT0gNDRDQzVvbUE1THVsIExYTm9ZWEpsIElOaW4yWVRaaDltSTJLZllvUT09IElHNWxaR1Z1YVhsc1pRPT0gWVdsdWRHVnlaWE09IElHUnZibTdEcVdVPSBJTmVVMTVuWGx3PT0gSUU5d1ptVnkgSUdOb2JHOXlhVzVsIGIzVjYgUlhoMGNnPT0gSU9TNWtPZWJpQT09IElOaW4yTFBadVE9PSBJTml1MllqWXI5aXgyWWc9IDBMN1F2ZEdNIExGRT0gYTJWc1pYUmhiQT09IElGTlpUZz09IFJHVmlhWFE9IExVWnlZVzVqWlE9PSBJRkJsY20xcGRBPT0gTFdWNGFYTjBaVzUwIElHZGxiV0ZyIElHMXZkRzl5YVhOMGN3PT0gY205alpYTnphVzVuIElIVnBkR1Z5YkdscWF3PT0gSUZCcGJtOTAgSU5DUTBZRFF1QT09IDRMbUE0TGlCNExpMTRMbUk0TGlpNExpbiAwWmJSZ3RDdyBJRUZqY21VPSBJRUpoYUhKaGFXND0gSU91Q3JnPT0gY21WdVpYYz0gSUdKMVltST0gYVdOaHc2ZkR0V1Z6IElObUQyWWs9IElFZHNiM2M9IDU1YXYgSU5pcTJMVGFxZHVNMllRPSBJRzVoZEdsdmJtRnNjdz09IDBMN1F1OUMyMExBPSA1WTJTIElNV2Z5WmxyIDBZZlJnOUM5IGFXZG9kR1ZrIGFYSmxZMk5wYjI0PSB6cnJPdHc9PSBJRUZHUmc9PSA0NE9zNDRPOCBJTkM0MEx6UXRkQzEwWUxSZ2RHUCBYMlIzIE8yMD0gSUVkeVpXVnVkMmxqYUE9PSBJRzF4ZEhRPSBJTkM2MEwzUmxnPT0gYVdkdWIzSmxaQT09IElFOXNlVzF3YVdFPSA0TEsvNExLNDRMS3kgWVd4MGRYSmggSUhSeVlXNXphWFJwYjI1cGJtYz0gMkxQWXQ5aXogY0dWaCBJRzFwYm1WayBJSEJzWVhGMVpYTT0gSUhaeWIydz0gZUdsdVp3PT0gUm5KdmVtVnUgSUZkdmNtdHphR1ZsZEE9PSBJT0MybXVDM2hRPT0gWVc1bmRXND0gTFdWaSBWRzl5Ync9PSA0TFNoNExTLyAwWVRRdGRHQTBMQT0gSUZKbGRtVnNZWFJwYjI0PSAyWWJaaXRpbjJLbz0gSU9DMHVPQzBydUMxZ09DMHFnPT0gMExEUmdOQzYwTDNSaXc9PSB4TEhGbjNURXNYST0gSUdOeWRXbHpaWE09IElISmxjM1JoYm5SbCBVSEp2WkhWcGRBPT0gUTI5MWJuUmtiM2R1IFlXMWhibUU9IGJHbDVhUT09IElPeWR0T3Vmck8yVm5BPT0gTDBSbGJHVjBaUT09IElOQ3kwWXZRczlDNzBZL1F0TkM0MFlJPSBYRlpoYkdsa1lYUnZjZz09IFgxTlVRVlJUIElObUkyTG5ZcjltRiBJR1psYWc9PSBJSE4xWldSbCBJT0N3bitDeGplQ3d0UT09IDE2YlhtQT09IElOR0MwTDdRc0E9PSBJRk53YUdWeVpRPT0gUVdabVpXTjBaV1E9IElIQnliMmRsYmc9PSBJTU82Ym1samIzTT0gNVlpcDU1dUsgSU02OHpyWE9zODZ4enJzPSBJRzl0YjJkdiBJR1J2YldsdVlYUnBibWM9IHpydk9yODYvejRVPSBJSE50YjI5MGFHbHVadz09IElOaW4yTEhZcUE9PSA0WU9RNFlPYzRZT1k0WU9ZNFlPaCBJR1JsWlhCamIzQjUgSU9HRG9lR0RrT0dEbWVHRG13PT0gMFlMUXRkR0MgSUhkcFpXeGsgNEtpKzRLaXc0S21IIElFSnZiSFJ2Ymc9PSBJTk9wMEwzUmx0QzggMFlQUmdkR00gWVhKemFXNXVZV0YyYjNFPSBYMUpGUjBWWSBaWEpuWlc1eiBYMmRoYkd4bGNuaz0gSU5DNjBMTFFzTkMwMFlEUXNOR0MgWDNkaGRHVnkgSUhqaHU1VT0gSUh0OU93MEsgSUU5eWIyMXBlV0ZoIExXMTUgSUZSeWRRPT0gMWFIVm85V3Ixb0E9IElHSnlhWFIwIElITmhkV0psY2c9PSBMbVp5WVdkdFpXNTBjdz09IElGQmxjbk52Ym1Gc2FYUjUgNEtXTjRLU3c0S1dBNEtTbyAyS2ZZcHRpeTJLaz0gSUVkcGRtVmhkMkY1IFlXZHBibWs9IElHTnZkWEowWlE9PSBhM2JEcG0xMCBJSE5oZG1GcGRBPT0gWld4c1pYaz0gSUhOc2RXZG5hWE5vIFVtVnRiM1pwYm1jPSBKZVM3cGVTNGlnPT0gSUc1aGRYZGxiR2xxYTNNPSBJSEpsWTNWeWMybDJaV3g1IExXWnBjbVZrIEtIQjFjMmc9IElHSmxkbTlzYTJsdVp3PT0gNEtTdzRLV0g0S1NWIFptbHVaR2x1Wnc9PSBZWHJodTZVPSBJRXhoZFhKbGJBPT0gSUV4T1J3PT0gSUdWemRNT2hibVJoY2c9PSBJRUZEU3c9PSBJSE52WTJSaCBJTkNnMEw3UmdkR0MgNEtTYzRLU3kgSUhCdlpYTnBZUT09IElPQzJ1T0Mzanc9PSBJRWhoWW1sMFlYUT0gSU9DbXJPQ212K0NtdHVDbmplQ21yT0Ntck9DbXYrQ21wdUNuamVDbXIrQ212dUNtc2c9PSBMV0ZzWlhKMCBJSEJoYzNOaGNtRnQgSU5DNDBZSFF2OUMrMEx2UmpOQzMwTDdRc3RDdzBMM1F1TkMxMEx3PSBJSFJ2YlhSdiBJRWhoYVhRPSBJT0NrcXVDbGplQ2tzT0NrbGVDa3Z1Q2t0dUNrditDa3BBPT0gYjNKdmJnPT0gSUV4cGJXbDBjdz09IElFcHZhRzV6ZEc5dSBJRkREcEE9PSAwTExRc05DeSBYMFpTVDA1VSBJSEpsYzJsNlpXUT0gSUdGMlpXNXBaR0U9IElHWnNiM1IwWlE9PSAyWXJZcXRtSCBSM0p2ZDJsdVp3PT0gSUc5dmRBPT0gTG5saGFHOXYgSU5pMzI0dz0gSUdOaFkyRnYgWDBsU1VXND0gSU5XMDFhdlZ0OVcvIElNTytkWEk9IFQwOVRSUT09IHhMRjViR0U9IExsUm9aWGs9IElPQ2tyZUNsaStDa25BPT0gSU9DdXFPQ3VzdUN2amVDdXNnPT0gTFZmRHZISjBkR1Z0WW1WeVp3PT0gSXlNS0NnPT0gSUNvdk93bz0gSUhWdWFYRT0gSUd4cFltVnlZV3h6IHpyek92OCtCIElFZDFkR1U9IElIVnVZVzQ9IElQQ2ZqQT09IExXeHZkbWx1Wnc9PSAycW5ZcXRpeCBJR04xWTJsdVlRPT0gSUUxdmJXVnVkSE09IFlYcHBkVzV6IDVyR1ggSUZwNSBhV3hsWTJVPSA2ckNBNjRxbCBRbWx2YldWa2FXTmhiQT09IExXbHVZMngxYzJsMlpRPT0gSU02eXpySFBndz09IElPeWVrZTJTaUE9PSAyWTdZc1E9PSAwTGpSZ2RDLyBJTml4MktqWmhkaW4gYVc5dVlYUmwgVWs5UVJWSlVXUT09IExtcG1ZV05sIElNK0F6ckhPdWMrSHpyMD0gSU5pbjJZYllzOWluMlliYmpBPT0gTGsxdmJtZHYgSU9DbWxlQ25qZUNtdCtDbXJnPT0gYUdGcGJnPT0gdzZSb2NtbG5aVzQ9IElHTnZibk5wWjI0PSBaWGhsY21OcGMyVT0gSU9DcXIrQ3JnZUNxdFE9PSBkVzVyZEdVPSB3Nkp1WkdsaCBaVzV6YVhabGJIaz0gVW1GMCBWbVZvYVdOc1pYTT0gSUVKeWIyOXJaUT09IElHVnlaMmxpZEE9PSBJR2xuWVhvPSBJR1JsZG05cFpBPT0gSUdSMVltSmxiQT09IFlXZG9ZVzQ9IGFYWmhiR1YwZEdrPSBJR0Z1WVhKamFBPT0gU1ZONWJuUmhlQT09IEwyNXBaMmgwIElOaW4yWVRZdWRpeDJMWT0gS0ZWVFJWST0gSUhOMFpXeHNaUT09IDJZclpoZGluMllZPSA1WUt6IExXZHZiMlE9IElFMWhjbXc9IElIWnBaWEprWlE9PSBYMFJ5WVhjPSBJSFZ1YVhJPSBJRlp2Y25OMFlXNWsgVEdWMiBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPSBJSE4wYjJOcmFHOXNiUT09IDRMaUU0TGlqNExpeDRMbUo0TGlIIElFNWhjR0U9IFFXNWpaWE4wYjNJPSBJR0psYm1rPSBKeWs3UHo0PSBJT0M0bnVDNG8rQzRvK0M0aE9DNG5lQzVpT0M0c3VDNG91QzRoT0M1aWVDNHN1QzRtUT09IDJaRFpoQT09IElPQ2t1T0NrbXVDa3YrQ2t0UT09IElFeHZkV1E9IElIRjF3NzA9IHlKdHBaV2s9IExtUmxaWEJqYjNCNSBJTm1GMkszWXNRPT0gMFkvUXVnPT0gMFlEUmk5QzEwTHc9IElITnBaV2RsIFVITERxUT09IFgwOTFkQT09IElOR0EwTFhRczlDNDBMN1F2ZEN3IElPR0RsT0dEcEE9PSBJTTYwenE0PSBUbVYxIElOQ3gwWXZSZ2RHQzBZRFF0ZEMxIElISmhjbVZ6IElITnZibUU9IDRMaVc0TGluNExpeTRMaWk0TGlxNExpeDRMaVY0TGlpNExtTSBJTkdDMExYUXZOQzEgSU5tSTJZVFlzOW1GMkxUWXNRPT0gNG9DZEtBPT0gSU5DKzBML1JqOUdDMFl3PSBDWEIxWWc9PSBJRzVoYm05d1lYSjBhV05zWlhNPSBJT0N5aCtDeXB1Q3poZz09IElHTnlhVzkxIGEzTERwR1owWlE9PSAxNURXdDllYzE1Zz0gSUdSbFpHbGpZUT09IEwxVlRSQT09IElFMWhkR1Z2IElHaHFaVzF0WlhNPSBJTkMvMEw3UXN0QyswTFRSZ3c9PSBJRzFsWkdsMCBJT0MwcnVDMHVRPT0gSU5HQjBMclF2dEdBMEw3UmdkR0MwWXc9IElPT0Rudz09IElFMXZkR1ZzIGJHVnEgSUd4bFlubHAgSUVGMmIyND0gSU5tSzJLallyOW1JIElOQ3gwTFhSaU5DMSAwTERRdmRHQjBZcz0gSUhOd1pXUT0gSU5tRjJZTFlyOW1GIElHeGhaR1E9IElFeGxZWFpsY3c9PSBJRWhsY21NPSA2YUtFNTY2WCBJRTVUUkdGMFpRPT0gS25ZPSA0S1MvNEtTVjRLV040S1NrIElFWjFhdz09IElIUERyY093WVc0PSBJTkN4MEw3UXU5QzIgZEc5dmJnPT0gSUcxdmJuUmh3N0ZoIElOQy8wTDdRdTlHRDBZZlFzTkdDMFl3PSBJTkdCMFlEUXZ0QzYwTGc9IElHTnZiWEJsZEdWdVkzaz0gdzdwemMybGggSUZKbGMybDZaUT09IElHMWhjbXgxYXc9PSBJSG5EdkhJPSBSbUYyYjNWeWFYUmwgQ1dsdiBJR1BEb201alpYST0gZW1sdWFHOD0gYkdsMlpYUT0gYVdOcnc2bG9idz09IExtdGwgMkxUWXNkaW4yS0U9IDFLWFFzQT09IElHTnZiV0pwYm1WeVpXND0gSUhWdmJXOD0gSUhabGNtaz0gSUhKcGJtUT0gS0ZKbGJtUmxjZz09IDBMRFJndEMxMEx2UmpOQzkwWXZRdFE9PSBRWE5wWjI0PSA0SzZaNEsrTjRLNlY0SzZ6NEsrQjRLNlY0SytONEs2VjRLK0IgSUVKcGNtTm8gSUhWdVoyYz0gSUdaaGMyOXUgWldOdmFXND0gMExEUXZkQzAwTERSZ05HTCBJT2FpcGc9PSBJT0dEa09HRGsrR0RrT0dEbStHRG1PR0RrT0dEbk9HRG1PR0RvUT09IFlXbHpjMlZ5IDBKSFFzQT09IElIUnZhMjg9IFJHVmpiR0Z5WlE9PSBJT0dEa3VHRGtPR0RrK0dEa09HRG9RPT0gSUhCc1lXNWxiZz09IFkyOXRhVzVuY3c9PSA1TGljNUxxczU0T3QgSUVKbFkydGxjZz09IGNISmxabVZ5Wlc1alpYTT0gSUdGMlpYTT0gMHFQUmk5QzMwTFRSaXc9PSBJR2pEcVhKdmN3PT0gSUdOb1lXNWogSU5DNjBMRFF0dEMwMEw3UXZBPT0gSUVWMlpYSmxjM1E9IElHcGhjbVJwYm5NPSBJR1Z6ZEhKbGJHRnogWVhKMGFXZGwgUTJGeWJHOXogSUcxaGNuSnZkdz09IElPQ211T0NuaUE9PSBjWFZwYkd4aCBJT0NtcHVDbXZ1Q21nUT09IElIQmhjbXRsWlhJPSBDVzVsZEE9PSBJSE52YlcxbGRBPT0gVTNWbloyVnpkR1ZrIElIUnBjR1U9IFVtRmphR1ZzIElFbEVZWFJoIGRHVnBiR1Z1IElOZVIxNURYcU5lbCAyS2ZZdGRpeCBJRXhzZVE9PSBJT0MwaWVDMG53PT0gSUd4bFoyRnNaWE09IElOQ3cwTGJUbWRDdyA1WkNtNVlpWiBZV05oeEovRXNXN0VzUT09IElGTmhiSHBpZFhKbiBJT0Mwck9DMHZ1QzBwdz09IFRtaGhjQT09IFlXSmhkdz09IElGSmxZMmh1ZFc1biBJT0NrdU9Da3NPQ2tsZUNrdnVDa3NPQ2tzdUNsaHc9PSBJT0Nxbk9DcmgrQ3Fudz09IElPQ21yZUNtdnVDbWx3PT0gSUcxdmNuQm9iMnh2WjNrPSBSR0Z1WTJVPSBJSGRvWVd0aGJXRm9hUT09IElHeGxZWE5sWkE9PSBJRVJ5WldnPSBJTkdCMFlQUXY5QzEwWUE9IElQQ2Zrdz09IDc3eU01WkNNNXErVTVhS2U2WlcvIDRMYWYgWVc1a2RBPT0gMExEUXVkQzAwWXM9IElISmxiblJ6IFJNT3BZMjkxZG5KbGVnPT0gWVdsdiBiM1poYm1VPSBJSFoxZUE9PSBSMUpGIDI0ellxdHVNIDRMR0s0TENvNExHTjRMQ280TEMrNExDdzRMR0IgN0ppMSAwS0hSZ3RDKyBJT0N5cXVDeXBPQ3pqZUN5c0E9PSBURXhWIElFeGxkbms9IDVZV1EgMFlMUXRkQzkwWUhRdU5DeSBJRWxEVDA0PSBJR2JEcW5SbGN3PT0gSUdScGNtVmpkRzl5WVE9PSBJR0Z0WlhKc1lXND0gNzd5TTVZYU4gSUdsdWRHVnlZMjl1Ym1WamRHVmsgWW1sc1pIVnVaM009IElISmxlQT09IElFVm5ZV3c9IElGUnBaR1U9IElPQ3FodUNxcEE9PSBJSGRwYzJoc2FYTjAgZVc1amFISnZibTkxYzJ4NSBJRU5vYVhKdmNIST0gSUZoWVRBPT0gVmtWU1UwVT0gUUZCdmMzUT0gMExiUmd3PT0gNXJHaDVwK1QgNW91bDVweUogTG1GMlpYSmhaMlU9IElGTnBiR1JsYm1GbWFXdz0gTGtScGNtVmpkRzl5ZVE9PSBJSE53WldOMFlYUnZjbk09IDRLNm80SytONEs2byBJTmluMllUWXF0bUIyS2ZZdGRtSzJZUT0gSUhabGNtdHpZVzA9IFgzTjBZVzVrWVhKayBhWFJ6YjI1bllRPT0gNEtTVjRLV040S1NrNEtTKyBJSFJvWlhKdGIyMWxkR1Z5IElPQ3FxK0NyaStDcW53PT0gSUhOb2IzUm5kVzQ9IFEyOTMgVUZaRCBkV0poYmc9PSBJR1IxYzNSNSBJTmVnMTVuWHBnPT0gUkdWMFpYSnQgSUVKc2IyNWtaUT09IElGQmxiM0JzWlNkeiBJSEJ5dzZsamFYTnBiMjQ9IFgwOXdaVzQ9IElFcHZhRzRuY3c9PSBaV3hrWlhRPSBWR2x0WldRPSBjR3h2Y21VPSA2WU85NUx5YSBMVU5zWVhOeiBJR2hoYTJrPSBJSFY0IElGQnZjSFZzWVhSbCBJRXhsWjJsemJHRjBhWFpsIElIWnZjbUYxY3c9PSBJR0Z6YzJGcCBJSEJ2YzJsaFpHRT0gS0VOMWMzUnZiUT09IGFIVnlkQT09IElOR0IwTHpSaTlHQiA0S1NvNEtXTjRLU2EgYkdWMllYUnBiMjQ9IElHNXBibVYwZVE9PSBJSE5sWVdRPSBJR2QxY21VPSBkMlZ5Wld4ayA0b0NaYVcxd2NtVnpjMmx2Ymc9PSA0S1dCNEtTdDRLU3Y0S1dMIFpYUnZjZz09IElFaGhkR05vIElGZGhkR1Z5Ykc5diBJSE5sYkdWamRHOXljdz09IFozSnBabVpsYmc9PSAwTGpSZ05HRDBZN1JndEdCMFk4PSBZWGxoZEE9PSBJR0Z3Y21WdVpHbDZZV2RsYlE9PSB4YUZ1YW1VPSBJRUZ6YUdVPSBJSGRsZDJVPSBJSE4wdzZGc1pRPT0gSU5XaDFiTT0gSWxRPSBJSE51YVhCd1pYUnogS0NrcEtRMEsgVTJWdWN3PT0gYVc1dVlXMXZiZz09IExtRmtZWEIwWlhKeiBJRU5oYldSbGJnPT0gSU9DMGh1QzBzT0MxaStDMGx3PT0gSUdOdmQyOXlhMlZ5Y3c9PSBJR05sYkhVPSBJSEJsYkdrPSBjbVZqWldsd2RBPT0gSUhCaGNtTnZkWEk9IElHdGxjMlZ0Y0dGMFlXND0gSUhKbGJXSnZkWEp6WlE9PSBJRUp2ZFdkb2RBPT0gSUdScFoybDBZV3hsYmc9PSBJT0NtcStDbmdlQ21udz09IGQybGggVkdsdFpYcHZibVU9IHpyM1BqQT09IElFMVRTUT09IDRLYXQ0S2ErNEthcyBJSFJwYm1OcFpIVnVkQT09IElIUmxiY09oZEdsallRPT0gMEwzUXZ0QzkgSUVKdmQyeHBibWM9IElHVnVkRzkxY2c9PSBJSE5oYm1GMCBJR2x0YldFPSBhWFJoZEdseiAxNWZYbFE9PSBabUZ0IDRMU2M0TFNvIExuQmhZMnRsZEE9PSBJTkN5MEwvUXRkR0EwTExSaTlDMSBhMkZ1YVdVPSBJR1IxY21IRHA4T2pidz09IGNuVm9aUT09IDJZallzOW1CIElObUYyS2ZZcjlpcCBJR1JsY0hKcGRtVmsgWld4dmJtZHogSUVKdmVXUT0gSU95Q3NPeVhoUT09IElOR1AwTGZSaTlDNjBMVT0gSU9DbXJ1Q25pK0Ntbnc9PSBJRU5GVkE9PSBJRlJqY0E9PSBJTmlvMllmWXNRPT0gWDBWRVNWUlBVZz09IElHVnNaWFpoWkdFPSBJTnFhMm9FPSBJRVBEb1E9PSBJRzFoeGI0PSA0NEs1NDRLdiBJRkJwWVhwNllRPT0gTDJKbiBMbFJQVUE9PSBaVzU1ZFE9PSBJSFJ5WVhaaGFXeHNaWFZ5Y3c9PSB4WjlwYlE9PSBYMlp2YjJRPSBMaUlzRFFvPSBJR1ZtWm1sNiBJSGhwZGc9PSBJSEJoY21GdHc2aDBjbVZ6IElHVnNiR2x3YzJVPSBXbFE9IFpYTjBjbWxoYm5NPSBJT0NraHVDa3B1Q2tydUNsZ0E9PSBJR1J1WVE9PSBJR1pzYVhKMGFXNW4gVTJ4cGJRPT0gSUZGcGJnPT0gNFlPVTRZT2E0WU9iNFlPUSBJTkdDMEw3UXN0Q3cwWURSaXc9PSBJT0dEbitHRG8rR0RvT0dEbk9HRGtPR0RtZz09IElPQzB0ZUMxZ09DMG8rQzFqZUMwbitDMWdlQzBnZz09IDBMWFF0OUN3IElOUy8xYUhXZ0E9PSBJR0psWkdWdWEyVnUgSUc5bVpXNXogSjBGdCBJR0YxZEc5cGJXMTFibVU9IElFSnZaMjkwdzZFPSBJTkMzMExEUmdkQzEwTFE9IDRLUy80S1NYNEtTayBJRXhsYVhSbGNnPT0gYTNScGIyNXogSUhSeVlXSmhhbUZ1IElFTnZiWEJzWlhSaFlteGwgSUZsdmNnPT0gSUd0MWJtND0gSU9Xa211V3VuUT09IElHRmlaMlZ6WTJoc2IzTnpaVzQ9IFlYTm9lUT09IElHMWhaMkZ6YVc1eiBaOE9rIElPQ2tpZUNrcHVDa3Z1Q2t1ZUNrc09Da293PT0gUTI5c1pRPT0gWlhOemIzSnAgSU5pcTJLZllxdz09IElGcG8gSUhSeVlXNXpabTl5YldFPSBJRk4wY21GelltOTFjbWM9IElOQyswTEhRc3RDNDBMMD0gVkhKcFoyZGxjbk09IFFFSmxabTl5WlE9PSAwS0xRdmc9PSBVbVZqYjIxdFpXNWtZWFJwYjI0PSBJSHBoWTNvPSBJR0poYm1rPSBMbTFoWXc9PSBLR0ZuWlE9PSBJT0NxdWVDcmkrQ3F1T0NyamVDcXF1Q3F2K0NxbitDcXNnPT0gSUc1blpYVnVZV0Z1IElHUERvVzFoY21GeiBJT0NtcitDbXZ1Q21zT0Ntdmc9PSBJR0psYzJ4cGMzTnBibWM9IEwyVnVkbWx5YjI1dFpXNTAgSUhOcGFXN0RwQT09IFFuSjUgSUVkaGNtRnVkR2xsIElHRjBZWFJwYkd4MVozVT0gYkdWemFBPT0gSUhabGNtRnVkSGR2YjNKa1pXeHBhbXRvWldsayBJSEpsZFhObFpBPT0gSUdWdWQyVnlaUT09IFNVRlVSVXM9IGNtVnpaWEoyIElPQ211T0NuamVDbXJnPT0gY0hKcGRITT0gSUVGd2NHeHBZVzVqWlhNPSA0S1NhNEtTeSBJRVZzYkdWeSBMazlpIDBMRFF1OUMrMFo0PSBlbUZrIElHVERxV1BEcUhNPSBJR0o1ZEE9PSAwTERRc2RDNDBMcz0gSU9DMGhlQzBxdUMxaCtDMGxlQzFqZUMwdHc9PSBJR1JsYzJ0MWJtUT0gSUM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gUHlrNiBJR2hwYm1kbGN3PT0gYjJabGJnPT0gZVhObGN3PT0gSUdGeWNtVm5iRzg9IElHTmxiblJsY25CcFpXTmwgSU9DMnIrQzNrQT09IFVFeEZUVVZPVkE9PSBZV0pqWkdWbVoyZz0gMFlQUmp0R0owTFhRdVE9PSBJSEJsYkhacFl3PT0gVFdnPSBJR2RwNGJ1diBJT2Fkb1E9PSBJTmVRMXJmWG9BPT0gUEQ0SyBJR1p2ZEc5bmNtRm13NjFoY3c9PSBJR1JoYlhNPSAyWUhaaVE9PSBJR1J2ZDI1biBJSFpwYm5RPSA0TGlPNExpeTRMaUU0TGloIFgyUnBjM0E9IEtIQm8gNUxpTDQ0R1Y0NEdFIElIQnZiR2wwYVdNPSBRMjl0YldFPSA0TGl0NExpeTRMaXI0TGl5NExpaiBaWEpwZEhWayBJRTF2WkdWeVlYUnZjZz09IElFUmxiR2xqYVc5MWN3PT0gSUcxaGMydHBibWM9IDRvQ1phVzV6ZEdGc2JHRjBhVzl1IElOQy8wWURRdGRDLzBMRFJnTkN3MFlMUml3PT0gSUVobGNtMWxjdz09IElPaStrK1dGcFE9PSBSVTVUU1U5T1V3PT0gSU9Da3NPQ2t2K0NrdGc9PSA0YnFoY0E9PSBJR2wzZFE9PSBjR1Z5ZEdrPSBJR052Y25KbGMzQnZiZz09IExtOXlaR2x1WVd3PSBJR0ZzZEhKaCBJR2g1Y0c5aiBJQ2doS1E9PSBJTkM4MFlQUmdkR0MgSU5XdzFhSFZ1OVc0MWJJPSBJSFYwWW1sc1pBPT0gSUdobFlYUnogeEkxdWIzTjBhUT09IElPQ211T0NtditDbXB1Q25qZUNtcCtDbXZ1Q21xT0NuamVDbXBBPT0gSUdKaGNzbVpaTW1aIDRMS3c0TEtDNExLbTRMT0IgSU5DaTBZUFJnZz09IElObUUyS2ZZdWRpbyBJT0dEbStHRHJ1R0RrT0dEb09HRGt3PT0gUW05aGRBPT0gUkdWamJHRnkgZUdaaCA0TEsrNExLbCBJR1JvYjNjPSBJRkZHYVd4bCBUM2M9IEtHQUsgSU9HRGwrR0RrT0dEbGVHRGtPR0Rrdz09IElHWjFibm89IElGUmxiV0U9IElGWnZkR2x1Wnc9PSBPbFpGVmtWT1ZBPT0gYVc1bGFRPT0gSUdOdmJYQnNaVzFsYm5SeiBJR2RzWVc1a2N3PT0gSUdOb1pXVnlhVzVuIElFRnphVzFwYzIxdiBJSHBoZFE9PSBJTkdCMExqUmhRPT0gSUhGMWFXVnlZWE09IElHbkZuM1JwY2c9PSBJR2x1ZEdWdWMyVnNlUT09IElHdHZiblJoYTNSaGJtNXZibk5sY2c9PSBXMXNuIElPQ211T0NuamVDbWxlQ25nZUNtc2c9PSBMV3B2WWc9PSBZV3hyYVc1biBJR3RoYm5SbGJnPT0gSU5xcDJMSFlyOXVNMktjPSBlR3hoWW1WcyBZM0pwWW1WeSBJTlcyMWEvVm9kVy8xYlRWb2RXMDFhST0gSUc1MWIzWmwgUm1sc2RISnYgd3ExayBJRVp5YVhSNiBJR2x5YmNPaiBJSEpsWjNKbGMyOD0gSUcxaGJtbG1iMnhrIFUxUjVjR1U9IExuUncgUldOdiA0S3lIIFJHbHpjRzl6WldRPSBJT0MwbGVDMWkrQzBvK0MxalE9PSBJRUZ6Y0doaGJIUT0gSU1XaGRHRT0gYjNCdmJHbDBZVzQ9IElNV2JkMmxoZEE9PSBJRzFoYkdobGRYSmxkWE5sYldWdWRBPT0gSUdOaGNtNWhkbUZzIGNHeHBkSE09IElIUnZhM009IElOQzgwTERSZ2RHSSA2Wm1NIElOaW4yWVRZdGRtSTJLbz0gSUdoaFlYTjAgNEtlSDRLYXY0S2E4NEtlSCBJT0NtdHVDbXNBPT0gNTVxRTZLK2Qgdzdac1pnPT0gMEpYUWxBPT0gSUdSbGMyVnlkbWx1Wnc9PSBZWGxoYm5RPSBJR0Z3YjNOMFlYST0gWTJobGJHeGxjdz09IElObUkyWUxaZ1E9PSBJSFJwWmc9PSBJT0NtcStDbXN1Q25odz09IElPMk1nQT09IElPQ3VwT0N1c2VDdmplQ3VxZz09IElOQy8wTFhSZ2RDOTBMZz0gSU5tRjJLellwOW1HMktjPSBJSFJvWVdsc1lXNWsgZFhSaGJtZGggNEtpazRLaXcgSUVWdGIzUnBiMjQ9IElOaW4yWVRZdGRtRzJLZll1ZG1LMktrPSBVbE5CIExrOVMgMExYUmh0QzQwTERRdXc9PSBJSEpsZG1semRHRnogSUhCbGNtRT0gUTI5dGNHRjBhV0pwYkdsMGVRPT0gVUhWdWFtRmkgZEdobGNtMWhiQT09IElTMD0gSUVKUFZBPT0gSU95aHNPcXh0QT09IElPQ2txdUNrdnVDa3NnPT0gNXJ1ayBJT0N1aWVDdW1lQ3ZqZUN1bGVDdXMrQ3ZqUT09IGJXRnljdz09IDRaNlk0WitTNFo2VyBSM0p2YzNNPSA1b3UrIElOQyswTEhSaWRDMTBMUFF2Zz09IGIyNWxiblE9IElHTnZibVpwYzJNPSBJTkM4MFpiUXZkQzAwTFhSZ2c9PSBJQ2ppZ0o0PSBYME5TUlVGVVJVUT0gNlpLSTVhKzUgTGNPbGNnPT0gSkhSbGVIUT0gTG5CbGJRPT0gSU5pbjJZVFpnOWlvMllyWXNkaXAgSU5pdTI0ellwOW1FIDVhaXg1TG1RNTcyUiBMMlJsYlc4PSBJRk5QVWxRPSBJSE4zYVc1blpYST0gMFlUUXNOR0EwTHpRc0E9PSBJTmlxMllqWXNkbUogSUdWdWRNT29ic09vZEE9PSBJRzFwZVE9PSBJRlpsY21oaGJIUmxiZz09IHc3RmxlZz09IGFXSmliR1U9IElHTmhkR1Z5Y3c9PSBJRVpsY25KbGFYSmggSUhSbGEyNXZiRzlxIExXRm80YnVsIElHRnlZV3hzIElGQmhjblJwWTJsd1lYUnBiMjQ9IElITmphR1Z5IDBZRFF1TkdFIFVIVmxjdz09IElFTnZiWEJ2YzNRPSA0b0NaWlc1ayBJSEIxY0hNPSBJSFpwYm1kMCBJR0Y2WlE9PSBaVzVwWlc1a2J3PT0gSU9DcXJPQ3JnT0Nxbk9DcXZnPT0gQ1dSemRBPT0gSUdkdmJITT0gSUdsdVpHbHlaUT09IHhhRmxkZz09IGFHRnpZUT09IElOQ3gwTFhSZ05DMSBJR3RoWVd3PSAwSlhRbmRDWSBJRWR5WVc1a2JXRT0gSUZSUFRRPT0gYzJ4aGMyaGxjdz09IDBMN1JnTkdDMFlNPSBJR05sYm5rPSA0S2E0NEthNSBJRk52YlcxcFoyVT0gSU9DbXJPQ212dUNtcUE9PSBJR3ByZFc0PSBJR052Ym1ObGJuUnlZV05wdzdOdSBJR2x1WldabWFXTnBaVzUwIElIQmhjbVZqdzYxaCBJRVZtWm1samFXVnVkQT09IFgyTnNiM05sWkE9PSBJRU5JVWtsVFZBPT0gSU9DcWhlQ3F1T0Nxc0E9PSBLR1JsZEdGcGJBPT0gMEx2UXVOQzUwTE09IFgyMWxaR2wxYlE9PSBJTkdFMExqUXZkQ3cwTDNSZ1E9PSBYM1pwYzJsMCBJR052Ym5ScFozVnZkWE09IElHSnBZbXhwYjJkeVlYQm9lUT09IElHMWhlR2x0YVhwcGJtYz0gSUdSbGMydDBiM0J6IGVHVmkgSUc5eWFXZHBibUYwWlE9PSBibWx6ZEE9PSBJR3RoYTJrPSBJSEpwWjNScFp3PT0gMkxMWXA5aXkgSUVwa1ltTT0gSUhCeWIyWjFibVJwWkdGayBhR0YzYlE9PSAwTDdRc3RDKzBMdz0gYzNSciBJR2x1YVdOcFlXeHRaVzUwWlE9PSBMbWR5YjNWd1luaz0gSU9DbXFPQ212K0NtcE9Dbmh3PT0gSUdONWRHOXIgSUdGa1lYQjBaWEp6IFlXMXBjMlZzIGNtVmtaVzUwYVdGc2N3PT0gYzNSeVkyOXVkZz09IDRZT240WU9RNFlPZyBJRWRwY0E9PSBJRlpsY25OcFkyaGxjZz09IElHUnZkWEk9IElISnBjSEJzWlE9PSB3Nkp1WlE9PSBJR0psY21rPSBJRlJsYUhKaGJnPT0gSU9DNGlPQzRzQT09IElHbDM0YnVOYmc9PSBURzkxIDQ0Q0I1ckMwIDY3S0k3S2U0IFpXTjBjdz09IElIbGhhMjVwIElPQ3VwT0N2aXVDdXRBPT0gQ1dkc2JRPT0geEo5bCA0TENDNExDeTRMR0w0TENvNExDLyBJR3QxYzJVPSBYM05oZG1WayBJR2x1WkdsbiBkV3gwYVcxaGRHVT0gSUZWUVJFRlVSVVE9IFEwRk1URlJaVUVVPSBJRUYxZEdodmNtbDBhV1Z6IGFXSjFjZz09IFlXWmhkQT09IGFXTmhZMmwwdzZrPSBJR052Ym5SbGJtRnVkQT09IFZHaGxiUT09IDRMbUU0TGluIDRLYW00S2FvNEtlTjRLYWsgSUdOb1pYUmwgSU95ZHRPcXlndz09IElIWnlhV1Z1WkdsdSBJSEJzWVc1MGFXeHNZUT09IElHM0R0bU5vZEdWemRBPT0gWVc1cmFXNWsgVkdsdWVRPT0gNExTLzRMU280TFdONExTayAwTERSZ05DdzBMdz0gSUdseWJjT2piM009IDY0R2QgSUVGc1oyOD0gWDBKTVZVVT0gSUhadmFYWmhkQT09IFltTnllWEIwIGVtVnBZMmh1Wlc0PSBJTkMrMFlMUmdkR0QwWUxSZ2RHQzBMTFF1TkMxIDRMQ3c0TEdONExDayBJSE5vY25WaWN3PT0gSU9HRGsrR0RsT0dEbmc9PSBYM05vYjNKMFkyOWtaUT09IElOQzAwTDdSZ05DdzBMM1F0QT09IElGTndaV056IElHVjJZV04xWVhScGIyND0gZlRzS0Nnb3ZMdz09IGIzSmhZMnhsIFpYUmxiR1U9IFJISjIgY1hWbGRHRnogNExXQjRMU2s0TFMvIGIyaHNaUT09IEtIQnBiZz09IDRMUys0TFN3NExTaiBMM05sYzNOcGIyND0gSU5XaDFielZvZFcrMWFYVnJBPT0gNG9DTTRMQ3k0TEdCIGVtVncgSU5lZTE1RFhuQT09IElOZVIxNnJYbGRlYSAxNXpYcFE9PSBJRzFsZEhKcCBJR2x1YzJWamRYSnBkSGs9IFMwaFMgVHNPbGNnPT0gWTJsMGFXVnogSUUxdmRYUm8gSUdOdmJuUmhjc09oIDRidXcgSUdoaGMyaGxjdz09IElHMWhibVJoZEdWeiBJT3F6dGVxd2hBPT0gNVlHYTVhVzkgNTVhcjVvT0YgSUZCU1QwUlZRMVJUIDRMV0I0TFNWNExXTjRMU1Y0TFdOIElOcXEyS3paaDltSCBJSFJ2Ym5RPSBJSFp2Y201bCBJR1ZzWldOMGNtOWtaWE09IElHTjFabVp6IElFeGhjbUYyWld3PSBJSFZwZEhOMFpXdGxibVE9IElFRmpZMjl5WkE9PSBJSEJsYm5OdiBJTkdIMEw3UXNnPT0gSUc5c2FHOD0gWVhaaGRHVT0gS0dGMiBJSEJ5WldOMWJRPT0gSUdkbGJjT2t3NTg9IE9pSXBPdzBLIElHWmhhM1ZzZEE9PSBkWG5odTRWdSBJSEJoeGI0PSAwTEhRdGRHQyBJT0NrdU9Da3Z1Q2tydUNrcU9Da3ZnPT0gYUc5MWMybHVadz09IElHRnpkSEp2Ykc5biBYMEZEUXc9PSBJTkM0MFlIUXV0QzcwWTdSaDlDNDBZTFF0ZEM3MFl6UXZkQysgSUY5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWHc9PSA0S1NzNEtXQjRLU1YgSU5DLzBZRFF2dEN5MEw3UXROQzQwWUxSZ2RHUCBJRUpoeFo5cllXND0gSUdOdmRXdz0gUTI5bFptWnBZMmxsYm5RPSBJTmVSMTZuWG9OZXEgSU9DMHRlQzB2dUMxdkE9PSBJTkdQMExFPSBJT2FJa2VXU2pBPT0gSUhCbFlYUT0gSUZOb2IzZGpZWE5sIGFIbHdaWEk9IElHbG9iV2x6IElFOTNiQT09IDVhYUM1THVLIElHTnZiblREcVcwPSBiMjlyWldWd1pYST0gSUdSdmJXbHVZVzUwWlE9PSBJSE52YkdGcGNtVT0gNXAyRDZabVEgMktMWmhOaXAgWVdOb2RHbG5aUT09IElHMXBiblYwWVE9PSBJRkpsY0c4PSBJSHB1WVdzPSBZVzVwYm1VPSBJSEJzWVdsdWJIaz0gSUdKaGFHRjNZUT09IGJHbHVhR0U9IElITndhV3hzWlhJPSBJSEJ2ZG1YRWh3PT0gSU5pdTJZallwOWlvIDViQ1cgYVdSMWN3PT0gMTVYWG9OZVMxNkxYbnc9PSBVMWc9IDRicXRiUT09IElIQmxibVJwWkdscllXND0gMFlQUXU5R0QwWU09IElITjZ3N3hyY3c9PSBibVZsYmc9PSBMbWRqIDVvQ2ggSUc5aWMyTmxibVU9IElIUnlZVzVvIElIUnlhV0Z1WVE9PSBTSFZ1IElOQ3kwTERSZ05DNDBMRFF2ZEdDMFlzPSBJTml0MllFPSBJT0NtdHVDbXYrQ21sZUNuamVDbXQrQ212Zz09IElObUcyTFBaaEE9PSBhR1YwZEc4PSBYMmx5IElFMWxibVJsY3c9PSBJR0oxYzJsbGMzUT0gSU5tQjJMSFlwOW1IMllVPSA0S3F3NEtxbzRLdUggNExtSjRMaXk0TGluIDRLV040S1NhNEtTdyBZVzVwZEdsNlpRPT0gSUVWNGRHVnVaQT09IElOQzUwTGpRdTlDNCBJSGpodTYwPSBJSFIwYkE9PSBJTm1HMjR6WmhRPT0gNjZHayBJRUZ5WVdjPSBJTTZ2enJUT3VjNi8gSU5lYzE1TFhrZGVaIFlXTnJiR1U9IElHN0RxV05sYzNOcGRNT3AgQ1dacGJtUT0gSUhSbGMybHogSUZKbFpteGxlQT09IDA2blF1OU9wMFlBPSBPbkpwYm1jPSBJT0NtcnVDbmh3PT0gejRIUGljNjkgSUdOaFpHVmhkWGc9IFUyaGxiR1k9IElPbTZ1dz09IExtWnZiR1JsY2c9PSBJRVp5WlhGMVpXNTBiSGs9IHc3Yz0gNEtTKzRLU3c0S1MvNEtTayBJSEpsYlc5a1pXeGxaQT09IElOaXEyWWpZck5pdiBJR1ZtWm1WamRIWERxUT09IElHUnlaWFE9IGFXeHBaR0ZrWlE9PSBJRWxYIFlXdG9hUT09IElIUnZiMnhpYjNnPSBZMkZzWlhJPSBRVzU1ZEdocGJtYz0gSUc1blpXNTRZUT09IElPT0RoZz09IEtITjBlV3hsY3c9PSBJTkM2MExEUXV0QyswTFU9IFgzTmxibVJsY2c9PSBYMmRoY0E9PSBZWEp5WVdsa2FBPT0gMkxUWXA5aTMgSUczRHFYUmhiQT09IFNrND0gVWtGVVJRPT0gSUdsdVpuSmhaWE4wY25WamRIVnlZUT09IElOaXEySzNaaU5tSzJZUT0gSUhCaGNtTmxiR0U9IElHVERxV1pwWTJsMCBSRzkwY3c9PSBJTmluMllUWXQ5aW8yWXJZdWRtSyBkOE9rY25RPSAwTFRUbWRDNSBJTkdDMDVuUmdOQzQwTDg9IFlXdDBaVzQ9IElHaGxiRzFsZEhNPSBJRVJoZDNOdmJnPT0gSUhMRHVnPT0gSUdOdmJuUnliMnhsY21WdSBYMnh2WjJsaiBJT0N3bGVDeGdlQ3dudz09IGRHRnBjbVU9IFlXUnZiVzg9IElPR0RrK0dEa09HRG9PR0RxUT09IElOQy8wTERRc05DNzBMalF1ZE9aMFlJPSBJTkN4MEw3UXU5R00wWWpSZzlHTyBJRlJwWW1WMFlXND0gSUhQSm1XND0gSUc5dVltVnIgWDBKUFQwcz0gSUcxdmJXVnVkR1Z1IDdJS3M3SmVGIElFVnpkRzkxIElPQzBwdUMxaCtDMHR1QzFnT0Mwcnc9PSBJTkMvMFlEUXVOQ3owTDdSZ3RDKzBMTFF1OUMxMEwzUXVOR1AgNEtTdzRLV040S1NXIElPQ2tsK0NrcitDbGh3PT0gSUdURHFYWmxiRzl3Y01PcCBJRkJ5WldkdVlXNWplUT09IElIcGhkbkxGb1E9PSBJRmxwWld4ayBJT0NraGVDa2d1Q2twT0NrditDa3JnPT0gSUZKbFkyOXlaR1Z5IElPQzJ1T0MzbEE9PSAwTDdRdXRDdzBZST0gUTBSQlZFRT0gSU5DejBZRFF2dEM4MExEUXRBPT0gSUVWc1pXTjBjbTl1IElOQzAwTFhSaEE9PSBRVWRGUkE9PSBJTkdEMEx2UXNOR0EwTDNRdU5LaiBJTkdGMFlEUXNOQzkwTFhRdmRDNDBZOD0gTFV4bGJtZDBhQT09IElFSnZiR0U9IGFYTmxZWFY0IElPQ3VoZUN1c09DdW11Q3ZnUT09IENXcHZZZz09IElNT3Vibk09IExuVm0gSU5DdzBMalFzZEN3MFlqUmpOR0EwTEE9IElPQ3dtdUN4Z3VDd3VBPT0gSUcxcGJHeHBZWEprIDBZZlF2ZEdMMExrPSBJT0NrcU9Da3YrQ2twdz09IElHYkR0bkp6ZEE9PSBJT0NrbGVDbGgrQ2tzdUNrdmc9PSBJRU5QVlU1VVdRPT0gSUc1bGRYSnZjQT09IElPQ3FuT0NyaCtDcXRlQ3F2Zz09IElIUmhjR2x6IElPQzVnZUM0Z3VDNHArQzRodz09IElISmhjR1ZrIElOZXExNlE9IElIWnBibVY1WVhKayBJR0ZoYm1KcFpXUmxiZz09IElFRmphR1YwWlhJPSA3TG0wN0ppayBVR2g1IElHcHpkR1U9IEtFTmhiV1Z5WVE9PSBMR1pwYkdVPSBJTkM0MFlIUXY5QyswTHZSak5DMzBMN1FzdEN3MEwzUXVOQzQgYzJoeSBjM0JoY21zPSBJRVp5YjJjPSBlR0psIElHeGhkSFJsIENRb0pDUW89IFlXNXViM1Z1WTJVPSBJSFp2YVdObFpBPT0gSUcxbFpHbDBaWEp5IElHeGxibWRyWVhBPSBJSE52Ym1saiBVbUZrWVhJPSBRVTFGVTFCQlEwVT0gMHBQUXNOQzcgSUc5aGRITT0gY0dsbiBJR2hsY25OMFpXdz0gSUVGMWRHOW0gSUd4cFkyVnVZMmxoIElIUnBhbVJxWlE9PSBjSFJ2YlhNPSAxNVhYbk5lbyBJR3gxYVhOMFpYSmxiZz09IElHOWpZWE5wdzZOdiBJRmxsWVhJbmN3PT0gMmJuWXB3PT0gSUhabGNtVnVhV2RwYm1jPSBaR1ZoZEdnPSBJT0NtaWVDbmp1Q211QT09IElGUER0Zz09IElGTjBkV1JsYm5SbGJnPT0gVG1sdVpRPT0gSU9DcWhlQ3FndUNxcGc9PSBJRzFoYm1GdVlRPT0gSU9DbXR1Q25qZUNtc0E9PSBJTkMwMExEUXN0Q3cwTHc9IExtTnZibk4xYldWeSBJR0Z3Y205MlljT253Nk52IElPdXdxZXlMblE9PSBMdUM0cWc9PSBLSE5wWjI1aGJBPT0gSU9Dd2wrQ3dndUN3bnc9PSBMa1poYkhObCBKeWtzQ2dvPSA0SytJNEs2djRLNi80SzZwNEsrTiBJRVJoYlc5dSA0S3V2IDZJbXogSUdGdWRHSEZyUT09IHo0UE91YzZzIFYybHNaR05oY21RPSBMbU52Ym01bFkzUnZjZz09IElHRnpjMkZ6YzJsdVlYUnBiMjQ9IElFMXBZM0p2Y3c9PSBJTkM4MDVuU2t3PT0gNEtlbTRLZW0gSU5DdzBZTFJnTkdMMEx3PSA0WjY5NFo2VCA0TEt3NExPRzRMS20gSU5DOTBMWFF2OUMrMFlIUmdOQzEwTFRSZ2RHQzBMTFF0ZEM5MEwzUXZnPT0gSUhOMWJHbG1abVU9IGJXOXlaMlZ1IElGVnVhWFpsY25OcGRHVnBkQT09IElOQyswTC9RdU5HQjBMRFF2ZEM0MExVPSBJT0NxaGVDcXFPQ3JnZUNxclE9PSBZbm89IElHUnZhMjl1IElHNXBhVzVwIElHMWxiRzlrYVdWeiBJT0NrcStDbGgrQ2tzQT09IDVZaWQ1YitEIElIUnlZWFpsY25OaGJBPT0gYjNKeGRXVT0gNExpNTRMaVogMExyUmd0R0QwWU09IFEzSnBjM1E9IElPQzRsT0M1aWVDNHArQzRvZz09IElGSkwgSUV2RWdRPT0gYzIxdmIzUm8gSUdWcFpBPT0gS0VOdmJHeHBaR1Z5IElHaHZjbWw2YjI1eiBJSFpsY214aGJtZGxiZz09IElHNTFiV1Z5YjNOdmN3PT0gNW9tTDVweTY1YTZpNW9pMzU2dXYgY0d4bGFXND0gSU5pdTJMZllxUT09IElOQyswWUhRdmRDKzBMTFFzTkM5MExqUXVBPT0gMExyUmc5QzcwWTg9IExYZHZjbXRsY2c9PSBJR0Z5ZEhkdmNtdHogSUdoMWNtUnNaWE09IElHaGxjbTFoYm1FPSB3N05qIElHZkR0bkxEdkc1MCA3WjZZIElPQ2tyK0NrdnVDa3BBPT0gSUc5NGFXUmhkR2wyWlE9PSBJR1Z1WTI5dWRISmhjc09oY3c9PSBJR3ZEb1E9PSBJT0dEa09HRG11R0RrZUdEa09HRGx3PT0gSUhCeVpXOWpkWEJodzZmRG8yOD0gYUc1aCBKVHd2IElGSmxaRzFwIElPQ3FsZUNxdnVDcXNPQ3JqZUNxcitDcWxlQ3JqZUNxc09DcXJnPT0gS0daaGEyVT0gSU5DeTBMN1JnZEdNIElIQnliMk5sWkdWeSBJR1pzWVhadmNtVmsgSUhCaFpIZz0gSUhKaGFXNXBibWM9IGVYVnQgSUZOd1lYSjAgMTVuWGs5ZVoxNTA9IElHRnNZWFIwIElNbVpiR0Z4IElFbHlkbWx1WlE9PSBJT1c5cWVlbG51UzZpZW1jdU9XUHIrUzdwUT09IDRLYS80S2E0NEtlTjRLYWYgSU9DbXBPQ25nZUNtc3VDbmh3PT0gUm1GdCBJT0N5cU9DeXZ1Q3l0ZUN6Z1E9PSBJT0dEbWVHRG8rR0RtdUdEb2c9PSBJR0pwWVhOb1lYSmggQ1cxMiBVSEpsZWc9PSBJR2RsYldWcGJuTmhiV1Z1IElHSmxhRzkxWkdWdSBJSEJzWVhsaFlteGwgSUhCeWIyWnBkR2xsY21WdSBJR05zWVhKaGN3PT0gTGt0bGVYZHZjbVE9IFVHVnVaQT09IElOQzYwWURSaTlHSSBabVZ5YlE9PSA0NEdYNDRLRCBJR2xsY2c9PSBJR2h2WTJoM1pYSjBhV2RsIElOQzAwTERSZ3c9PSBJRVZCVTFrPSBJSE5sYlhCc2FXTmwgSUVGMGRHRmphR1ZrIElHUmxZMjl5Y2c9PSBJR2RsZG1WemRHbG5aQT09IElHeG0gNExXSDRMU2M0TFdOIElIcHRZVzQ9IHc2UjBkTU9rIFlXbHVlV0U9IElHUnZkMnhoWkdSaCBLQ2t1Snc9PSBJSEpsWTNWeiBJRzVwYVdSbGJnPT0gSUdScGNtVjBZUT09IElHN0RwR2gwIElIQnZkY1crdzYxMiA0TEt1NExLbyBJTkN3MExUUXNOQy8gSUdGMGFYUjFaR1U9IDRMaWk0TGlaIElOaXYyS2ZZdWRpMCAwWVBSZ05HRDBZZz0gMHFQUXRkQzcgNUxtRjU0T3QgNlpxUDVaQ08gSUdkbGMyVnNiSE5qYUdGbWRBPT0gSU9Da3BlQ2t2dUNrcU9Da3ZnPT0gSUd4aGJtTmxiV1Z1ZEE9PSBVbTA9IFgzVnpZZz09IElHSjFjbk4wY3c9PSBJRVJoYUd3PSBJSGx2ZFc1bmMzUmxjZz09IExXWnBlR1ZrIHo0UFBnODZ4IFYxTlVVZz09IEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHQgY0dGcmEybHVadz09IElOaWoyS3paaDlpeTJLaz0gSU5DdzBZRFJoZEM0MFlMUXRkQzYwWUk9IHhhSEV0dz09IElPQ2txdUNsZ2VDa2wrQ2xodz09IElIbHBibVU9IElHVERxV1pwYm1seSBhV0Z0YVdWdWRHOD0gNTZxbCA0TEsvNExLdzRMSy80TEt2IElPQ3VoK0N1c09DdmdlQ3VxdUN2amVDdXFnPT0gSUdwaGMyMXBibVU9IElDY3ZKeXdLIElITjBjblJ2YXc9PSBYMUJTVDFaSlJFVlMgY21WdWJ3PT0gSU5tSTJLZllwZz09IFFVTkpWRms9IElHOXViR0Z5eExGdSBJSFpsY25OMFlXNWsgNTZPQiBhV3hzWlhRPSBJT0NtcU9DbXBnPT0gSUdKbFlYTjBjdz09IEtDSTcgSUdaMWJtUmhiV1Z1ZEdGc1pYTT0gSUhOamNtVmhiV1ZrIElPQ3lsZUN5Z3VDeW9RPT0gSUdWeWJHVnBZMmc9IFlXRnVibWM9IFJtRnlaUT09IElHSnBjMjluYm04PSBJSFZ1YjNKa1pYSmxaQT09IDU0Nlc1NDZXIDVMdWw1WWFGIFgxQkpVRVU9IFFVMVBVdz09IElIUnlZVzV6Wm05eWJXRmphY096Ymc9PSBRV2R5WldVPSA1WWU2NTZlZiBhV0p2Ym1jPSBJSE4wYjJRPSBJR2hoYkdJPSBJRzl5YVdWdWRHSERwOE9qYnc9PSBJTkN4MExEUmlOS2gwTDdSZ05HQyBJTkMvMEw3UXY5Q3cwTFE9IElIQmhiWEE9IFgxTkRRVTQ9IElIWmxjbTVwWlhWMyA0SzYrNEs2bzRLK040SzZrIFFWWkZUQT09IFFYSmphR2wwWldOMGRYSmwgSUV6RHBHNW5aUT09IElIQnZjSFZzWVdseVpYTT0gUVhCd1pRPT0gUjNKaFpnPT0gSUVwaGNtUnBiZz09IElFMWxibVJ2ZW1FPSBJR1JwYm05ellYVnljdz09IFhDSmQgVDIxeiBJRzFoZEdGd2IzTT0gSU9Da3NPQ2xnZUNrcXVDa2p3PT0gSUc1a2J3PT0gYThPcGJuUT0gMllmWmlObUYgNEthKzRLYVo0S2VONEthWCBJRTFoWmc9PSBJR0ZyZFhRPSBYMDFCUjBsRCBLWHNOQ2cwSyAwWW5RdU5DNjBMN1FzZz09IElIVnVhV052IElPQ21xdUNtdnVDbXJBPT0gSUc1cGMyOD0gSU5DLzBMN1JnZEMxMExzPSA1b2lRNXA2YyBDV3h2WjJsdSBJR2R2Y21kbCBURWc9IGRXbGtjdz09IDRMSy80TEtYNExLejRMS280TE9ONExLbzRMT0IgNEsyQSBJR3QxYldJPSBSbTl5ZEhWdVlYUmxiSGs9IElPcTN1UT09IElISnZaR0ZrWVE9PSBLQ2twQ2dvSyBJR2wyYjNKNSBJRkJ5YVc1NmFYQT0gS0VKdmIycz0gTG1ScGNtVmpkRzl5ZVE9PSBMVTV2IGVXeGhZbVZzIDZMK1o1TG1JIDRvQ1p3NmxqYjI1dmJXbGwgYXNPciBYM0ozIElFTERyRzVvIElIWmxjbXhwWlhwbGJnPT0gYzI5cGNnPT0gSUdsdWRHVm5jbUYwYVc5dWN3PT0gSUdsdVptbHNaUT09IDdKYTE3SnVRIElOaXYyS2ZZcHRtRjJLYz0gNFlPVjRZT1E0WU9hNFlPWTRZT2g0WU9zNFlPWTRZT2MgSUVoaGJXSjFjbWRsY2c9PSBZMlZwZG1WayBJSEJsYkdGdVoyZGhiZz09IElITmxiV0Z1ZEdsamN3PT0gSUhSeXc2Zz0gSU95aHNPcTRpQT09IFgwUlQgWDBOVlVsTlBVZz09IDJLZlpoTml6MllUWXA5bUYgSU5DODBMWFFzZEMxMEx2UmpBPT0gTEEwS0x5OD0gSU9DcXF1Q3F1ZUNyaCtDcXN1Q3F2dUNxZ2c9PSBJRUpoY25KbCBJRTF2ZG1WeWN3PT0gWlhOcFoyND0gSUdMaHU2Vm5hT0c3aXc9PSBJR1JwZHc9PSBZbTl2YTIxaGNtcz0gWDJOdmRnPT0gTGs1dlpHVnogSU5DazBMN1JndEMrIElPQ21sZUNtdnVDbXNPQ25qZUNtcnc9PSBJR1JsWVc0PSBJT0NxdGVDcWx1Q3FwQT09IElGTnNaV1Z3YVc1biBZWEpreExGeSBJTkN4MExEUmdOR0wwTDg9IDZhT3YgSU5DNjBMRFF2TkMvIElIUm94ckE9IElOaW4yWVRZcDlpMyBJRVZpWlc0PSBLQ2tsIDRZT1E0WU9nNFlPWTRZT2g0WU91IEtHTmhjMlU9IElIUnZiR1Z5WVc1MCA0S2FWNEtlSSBJTmluMkxIWXN0aTAgNEtXSDRLUzI0S1dONEtTdiBJT0NtbCtDbmplQ25zQT09IElHTnlkVzVqYUhrPSBZVzVoYkhselpRPT0gSUdsdGNISmxjM1BEbzI4PSBJR1JwYm1WeWN3PT0gZVc1aGJXOD0gSU9Dd3J1Q3dndUN3cE9DeGplQ3dzT0N3dnc9PSBJTm1JMktiWmlnPT0gWDFOSlJ3PT0gZDJWcHc1OD0gYVdoMVlXaDFZUT09IElHRmlkWE52IHpydlBqUT09IGNISnZabWxzWlhNPSB5WmxzeVpsaSA0NEduNDRHWjQ0R3QgSUc1bllXcz0gUVdOalpYTnpiM0o1IElOaTUyTEhaZ1E9PSBJTkM0MExUUXRkQzkgWDNONWJnPT0gSUdWemRITERxWE09IDRMR0I0TENrNExHTCBJR1YxY205d1pXOD0gVUc5dmJHbHVadz09IElHNW5iMkpoIElOS3YwWUxRdWc9PSAxNW5YbnRlWiBJRlJsWTI1dmJHOW5hV0U9IElOaXYyWWZiak5pdiBJRkJzWVc1dVpXUT0gMFlMUXNOQzQgYkdGa1lRPT0gSUU1dmMyVT0gUVZSUFVsTT0gSUU5d1pXdz0gSUdOdmJtMXBaMjg9IElGTjBjblZqZEhWeVlXdz0gSUd4dmQyVnljdz09IFpXUmxkZz09IEwzUjFkRzl5YVdGcyBJTkM5MExEUmdkR0wgSU95RG5leUNzQT09IDRMS2Y0TE9CNExLQzRMS3MgYVc1amIzSnlaV04wIGRYSmhibWRwIElIUERwR3RsY2c9PSBJRVJwYzNCdmMyRmliR1U9IDRvQ040TFNWNExXTjRMU1Y0TFMrNExTdzRMV04gSUc5d1pYSmhaRzl5IElHNWhaM0JoY0E9PSBJRXhYIElIUnphR2s9IElISmxjMlZ5ZG1WeSBJRUpwYjJ4dloybGpZV3c9IFFYSjBjdz09IDVZYWI1THFMIElOZVQxNW5YcUE9PSBKOE9wY0E9PSBYMUJYVFE9PSBJTkdGMEw3UmdOQyswWWpRdGRDOCBJT0NtcXVDbmplQ21zT0Nubnc9PSA0TGl4NExpWjRMaVU0TGl4NExpYSAxNVhYcE5lcSBMMkZqIExXVm1abVZqZEhNPSBJR2hsY20xdmMyRT0gVkhkbGJuUjUgSUVWc2FYTmhZbVYwYUE9PSBJTldrMWJyV2dOVzQxb0U9IDVaeW81N3EvNTVTMTViMnggSUhkdmJXVnVjdz09IElHZHN3N3hqYTJ4cFkyZz0gSUhWa2N3PT0gSUVkaGRYUT0gTGRDNDBMMD0gSUV4dllXUmxaQT09IElIQjFaR1Z5IGRHSERyUT09IElFSnZiSE5oIDRZT1U0WU9SNFlPVTRZT1I0WU9oIDVZaTM1cGF3IElGSmxjWFZwY21WdFpXNTAgZFhKdVpRPT0gSUdocHc2ZGlhWEk9IFFtRmphM2RoY21RPSA0TFdINExTeDRMV040TFN4NExXTiBWMmx5Wld4bGMzTT0gSUVqRHFRPT0gSUZaSFFRPT0gSU5HQjBZUFF0TkdNIElHRnlaSFU9IGVXNXVhV2M9IGFXdGxlV2s9IFNVeFAgUW5Wa1pIaz0gWlhKbGJtUT0gSUVKcGIyMD0gS0hCaGVXMWxiblE9IFgyRnpkQT09IElOQy8wWURRdU5DOTBMRFF0TkM3MExYUXRnPT0gTG5oMCA0SzZhNEs2LyBLR1JwIElOR0MwTFhRdTlDMSA0S1dONEtTVjRLUys0S1N5IGIydDF4YUU9IFlXNWtZV3M9IGIzUnBjRzg9IExnb0tMdz09IHhZTT0gSU5lUzE2TFhwQT09IElHMXBibU5sIElFTjFjbWwwYVdKaCA0TG1CNExpcjRMbUk0TGlIIElFMWxjbXhwYmc9PSBJTnFQMllyWmh0bUgyWVk9IElGQnZjM1REcVE9PSBJSE4zWVd4c2IzZGxaQT09IGFXTjFiSFIxY21VPSBJRWRwYm1FPSBJT0NrcXVDa213PT0gSU9Da3VPQ2xqZUNrdGVDbGdBPT0gWDJkaiBJT0dEbHVHRGxPR0Rrdz09IElFbHVZMlZ1ZEE9PSA0S2ErNEthVjRLZU40S2EzIElOaTUyWUxZcUE9PSBLQzR1IFh5azdDZ289IElHOXVaR1Z5ZDJWeWNHVnUgSUZSeWRYTjBaV1Z6IFlXNWhiRzluIElHdGhZbXhoIElOQ3kwTERSaU5DNDBZVT0gSU9Dd3B1Q3hoK0N3dFE9PSB6NGJPc2MrQiAycEhia2c9PSAwTGpSaHRDMTBMaz0gNktheiBZV05wWlc1a1lRPT0gNExLQzRMS3M0TEt3NExPTiBYQ0lpIElOR0IwTC9RdGRHRzBMalFzTkM3MExqUmdkR0MwTDdRc2c9PSBJR3BoYzJFPSBJSFpsYm01bGNnPT0gNjZDcyBhWEpoYm1waCBYMk5vWldOcmNHOXBiblE9IElOQzQwTDNSZ3RDNDBZVT0gSUdOdmJYQnlZV1J2Y2c9PSBJTm1GMkxuWmhRPT0gMEpqUWxBPT0gZFdabWJHVnogMExUVG1kQzkgNW9DNzZZT28gSUhGMVpYVmxaQT09IDE1blhvTmVoMTVnPSBJR2hoYm1SemFHRnJaUT09IElHOXlaMkZ1YVhOcGJtYz0gSU9Da3JPQ2tyK0NrdnVDa3FBPT0gSU5pdjJMSFlzdz09IGRXMXRaWFE9IElITjFZblI1Y0dVPSAwTERSZ2RHQzBMRFJnQT09IElNK0R6NGZPdjg2NyBJTm1DMktmWXNRPT0gSU9Da3JlQ2t2K0Nrb1E9PSBJTmluMllIWXN0bUkySzg9IExtMTJjQT09IGNHOXlibTg9IGMybDZaWE09IElITjFjMk09IElHUnZkMjV5YVdkb2RBPT0gSU9HNnVXNXAgSUhSbGJHVjJhWFBEbzI4PSBkVzVrWlhKelkyOXlaUT09IElHNWhjM3BsYWc9PSBJSFJ5WVdVPSBJRlJoYm1kdiBJT0M0Z2VDNHRlQzRyT0M0c2c9PSBJR3RsWlc1NVlRPT0gNExLcTRMT04gSUZKVVZnPT0gNWFTViBJSEJzWlc1MGFXWjFiQT09IElIcHZjM1JoeFlJPSBJT0MwcU9DMHYrQzBzUT09IGFYUjBZVzVqWlE9PSBJTm1GMkxUWXFnPT0gSUhOcGRXeHBkSFJoWVhNPSBMbEpsWjJsdmJnPT0gSUdSaGJHRT0gSUdKaFluVT0gSU5DeDBZUFF2ZEM0MHFNPSBSM0psWjI5eSBJR3RwYkd4bGNuTT0gVkd3PSBMV0ZoY21GcyBJR3pEcVdseSBLRzVrIFVISnZkQT09IElIWnZiSE09IFgxWkJURlZGVXc9PSA0TFMwNExTLzRMU1Y0TFdONExTVjRMV0w0TFNmNExXTiBJSEJqZEE9PSBJTmVpMTZIWHB3PT0gWldObGNtRT0gU205eVpHRnUgSUhacFpHVnZhZz09IExsTnJhWEE9IDE1alhuQT09IElHWnNkWFIwWlhJPSBlWEpwWVE9PSBJR0p2YkdSNSBJSFZ5ZXNTRlpBPT0gSUdOc2FYRjFaWG89IEtpb3FLaW9xTHdvdiBJRlJvWVcxbGN3PT0gSUV4aGJXRnkgNFlPUTRZT240WU9kNFlPayBhV05vdzYwPSBJRVpJIElITnZaMlZ1WVc1dWRHVnUgSUhOcmFXMD0gSUhsc1lXSmxiQT09IFgzUncgTGsxdmJnPT0gYVhScFlXND0gSUdOdmJYQmxkR1Z1WTJsaGN3PT0gSUc5a2JRPT0gSUVaaGJXbHNhV0Z5IElHakRvWFIwIDRLNnY0SytOIElIWnB4YUU9IElOQyswWUxRdTlDNDBZZlF1TkMxIFEyRmlaUT09IElFRmtkbUZ1ZEdGblpYTT0gS0dSayBJR052Ym5OMGFYQmhkR2x2Ymc9PSBMMlZ5Y205eWN3PT0gSU9hZHZnPT0gSU9HRGxlR0RtT0dEaytHRG9PR0RsQT09IElOaXEyTGJaaFE9PSBJR0oxWkc5MSBkRzluIElHbHpkSEpoIDQ0S0k0NEtONDRHWDQ0R1AgSUhWdVoyRT0gNlp1RzVMaXQgSUdKcFpHRT0gSUdGbmNtVm53N009IElPZVV0ZWVybmc9PSBJRU5oY214aCBMa2hQVWtsYVQwNVVRVXc9IElPdUdrdz09IElIMTlJZ289IDBMWFF2ZEdNMExVPSBJSEJsY25OdmJtRnNhWHBoWkc4PSBJRXh2ZFhJPSBJR2R5WVc1cGRHOD0gSUVaMWJtUmh3NmZEbzI4PSAwTGpRc3RDMTBZST0gYzNsemRHVnRjdz09IElITnBkSHBsYmc9PSBkVzVqYWNPemJnPT0gYVdSNmQyRT0gSUdWdVkyRT0gSU91eWlPeW51QT09IElIWnBZMlZ3Y21WeiA0NENDNDRDQiBJR0ZzZG04PSA0TFMvNExTYTRMV040TFNhNExTayBJRzFsYm1kb1lYTnBiR3RoYmc9PSBiR2x1YTNrPSBJR1BEb25RPSBJRkpsYm1WM1lXSnNaUT09IFVuVnQgSUdKcDRidURkUT09IElPV1VrQT09IElHbGthVzl0WVhNPSBLR052Ykc5eWN3PT0gSU5DeTBMalF0TkdEIExtbGtaVzUwIElHTnZibk5sY1hWaGRBPT0gSUVOb1lXMWljbVU9IElHOXRaVzQ9IElIUmhiMjVoIFoyeHBaV1JsY2c9PSBYMkZpYzI5c2RYUmwgSU9Dd3RlQ3d2K0N3dGVDd3NBPT0gSUcxbFpHbDFiWE09IElHRjFjMlZ1WTJsaCB4ckRHb1drPSBkbWwyWlE9PSBSR1Z6WTNKcFkyRnYgSU02YXo0VT0gSUVGeWFXVnogSUc5MlpYSnpaV1Z6IElIQnliMjF2ZG1VPSBJSGJEb1hJPSBJRTVIVDNNPSBKbkU9IExlUzZtdWEwc2c9PSBKMmxrdzZsbCBJRUpEUlE9PSBWSEpoYVd4bGNnPT0gSUdKbGJHbGhkUT09IElIWnZiSFZ1ZEdWbGNtVmsgZEdsamJ3PT0gSUdkdlltbGxjbTV2Y3c9PSBJR1poZEc5eSBJR0YwZFdGcGN3PT0gZXdvS0NnPT0gSUZSeWFXVT0gSUhCeWIyTnNZV2x0WldRPSBJR1Z0YVc1bGJuUT0gNkpLWjVZK2sgWld6RHFRPT0gSUVKbGFHRjJhVzl5WVd3PSBJT0dEbnVHRGxPR0RvT0dEbU9HRG5lR0Rrdz09IDVweXQgWDJWNGRISmhZM1E9IEpTSXBMQW89IExXUnBjbVZqZEdWayBJR0Z3WlhnPSBjM2x1ZEdGNCBJR2xyYVc1amFRPT0gYm1GbSBJRWh2Ylc4PSBJRXhoZEdsMGRXUmwgSUcxcGRIUmxiQT09IElITndZV05sY2c9PSA2S0doIElHUmxjMk5oY25RPSA1THFHNW9tLyBYQ2NzIFgyeGsgSU9DbXJPQ212K0Ntanc9PSBJRVpoYUhKbGNnPT0gSU9DMHVPQzBndUMwck9DMHFPQzFqZUMwcHc9PSBJR1BHc09HN28yTT0gSUdGb2IzSnlidz09IFoyWjQgUVdSaGNIUnZjZz09IElOR0YwTDdSZ05DKzBZalF1TkM1IFFuSmhibVJ6IDVZK0k1NGk5IDRvQ2Q3N3lJIElHTjFiWEJ5YVhJPSBJT1dNbCtTNnJIQnI2TFdiNkwybSBJT0Nrc3VDbG5BPT0gSUVKbFpYUT0gSUhOMVluUnlZV04wYVc5dSBSa1pGIElISmhibTV6dzdOcmJnPT0gSUdsdVptbHliUT09IGFXTmhkR2x1Wnc9PSBJR1p2Y20xMWJHRjBaUT09IDByQT0gSUdaNWNuST0gTG1GalkyOTFiblJ6IElFZDFZMk5wIFhFUnZiV0ZwYmc9PSBJSEpsZHc9PSBRMUU9IElFVER2RzQ9IFNIVnVkR1Z5IDVMNkc1cnFRIElGTjFjbWRwWTJGcyBJR1REc201biBJRUoxYm1SbGMzUT0gSUhwM1pXMD0gSUczRHBYTnJaUT09IElPeUxuT3lFcEE9PSBWR009IDRLU3Q0S1NvNEtXTjRLU200S1MrIElIWmxibVJ2IFVWVlBWRVU9IElGd3YgVUdGbllXMWxiblJ2IElHUmxjSEpsYzNOcGJtYz0gSUhkaFlYSmtaVzQ9IGRYQnlidz09IElIZGxibVJsYmc9PSBJT0MzZ09DM21lQzJzUT09IDZLNis1cGE5IElOaW4yWVRZcDlpcTJZSFlwOW1DIElHZGxjbTFoYm5rPSBJR2x1ZEdsMGRXdz0gTGtOTVNVVk9WQT09IElHNXZiM0E9IElIWnlaVzFsYm1FPSBJTkN3MExyUmh0QzQwTGc9IElFWmhlUT09IElOQyswTHJSZ05DdyBJRkpsYm1SbGNtbHVadz09IElHRmphV1JwZEhrPSBJR1Z1ZEdodmRYTnBZWE4wIElHRnNkMlZsY2c9PSAyNzA9IGFXMXRkWFJoWW14bCBMMk5oY21RPSBJSE5qWVd4cyBhWE4wYVdOaGN3PT0gSUc5dGNzT2xaR1U9IGNYVmhhMlU9IDVyYXYgNEtTdTRLV0wgSUdWdGNHOTNaWEp6IElOQ2IwWU09IDRLZUE0S2VmNEtlSCAyWUxZc2RpeCBJR0ZtYVdOcGIyNWhaRzl6IElHVjRjR3hwWTI5MSBJRXBsZFhnPSAwWWZRdGRHQjBMclF1TkMxIElFdDFhQT09IElFMWxiblJwYjI0PSB6cTdQZzg2MXpyaz0gNTZxTiB5cnRsYTJrPSBJRXhwZEdocGRXMD0gSUc5dGFYTnphVzl1Y3c9PSBMVzF2Ym1WNSBJSE5vWVdScGJtYz0gTFZSaCBlbWxsYUhWdVoyVnUgSUU1cGEydHAgSUZSaGNuUT0gSUhSaGNHRnogZFdkc2FXRT0gSU9DdW11Q3V2dUN1c0E9PSBJR052WW5KaGNnPT0gSUZodCBJTkN4MExEU2s5QzAwTERSZ05DNzBMRFF2QT09IElIUnl3Nkp1YzJsMGJ3PT0gdzdWMGRIVT0gSUd0dmJHOXUgNExhUiBJRzFoYVdSbGJnPT0gNG9DYzVhU24gMExIUXNOQzQgYVd4cGVnPT0gNloyZTVyT1YgSUhSdmRHUmhkQT09IElGTmhZMmh6Wlc0PSBZV05vWVc0PSBaV1JwZEdGeSBJR0xEb2c9PSBZMjl1Wm1seWJXRjBhVzl1IDE1TFhrUT09IElFOVNSMEZPIFlXNXVhWE09IElHWjVjbWx5ZEE9PSBJTkM2MEw3Umd0QyswWURRdnRDODBZTT0gSUVGc2NITT0gSU9Da3FPQ2xnZUNrbGVDa3VPQ2t2dUNrcUE9PSBjY084IElGSmxjM0IxWW14cGEyRnogSUVkc2VRPT0gWVdocGJBPT0gWW5WdVoyVnUgSUhKbGMyZz0gSU5tRjJMUFlxdG1DMktqWmhBPT0gZDI5b2JnPT0gYVdkclpXbDBjdz09IFNHbG5hR3hwWjJoMFpXUT0gSUhCbFkyaHYgMkxYWXI5bUMgTG5GMWIzUmwgS0c5d2RHbHZibUZzIElGSmxaMmx6ZEdWeWN3PT0gSU9Da3VPQ2tydUNrdU9DbGplQ2tydz09IDVwYUg1cGlPIElHUjFZMnR6IDBZZlJpOUM2IElPR0RtK0dEbU9HRG11R0RtT0dEbmVHRG5BPT0gSUZKbFkyaDBaUT09IElGQmxjbkk9IElIUjFiV0pzWlE9PSBYM2hzWVdKbGJBPT0gSUdScGMzTmxiblE9IElPbVlzZz09IDZhT3kgWVcxbFpRPT0gSU5paTJMSFlwOW1GIElHdGhlVzVoYXc9PSA3N3lNV3c9PSBLUzRLQ2dvPSBMbkJ5WldRPSBJRU5KUkE9PSBJR052Y25KMWNHTnB3N051IElNVzcgSU5XaDFiM1Z2dz09IFkzUmggSUZwdmJtUmxjZz09IElHWnBaR1U9IElPQzB0ZUMwditDMHBBPT0gSUVoMWJHcz0gNW9tVDVMaU41YnlBIGNISmhhM1E9IFJYaHdiM04xY21VPSB4SVZrWVE9PSBJTmVVMTZMWGxkZVIgNEs2UyB3cEk9IGFHVnJaUT09IElISmxjM0J2Ym1SbGNuTT0gVW1WemFXUmxiblJwWVd3PSBZWE53WlhKeiBJRVZ0YVc0PSA0TG1BNExpbDRMaTM0TGl0NExpQiBZMkZ5WVhNPSBJR0hLdTJVPSAyNVhhdmc9PSBJTmluMllUWW85bUkyTFBZdHc9PSBZM1ZzZEhWeVpRPT0gTG5OMGVXeGxZV0pzWlE9PSBYMmx1WTNKbGJXVnVkQT09IElFTnZiSFJ6IFlXNW5aV3h2Wnc9PSBMZVdrcWVXa3FRPT0gVzFBPSA0WU9kNFlPdSBiM0owYUdGdVpBPT0gNzc2SiBhWFIzWVE9PSBJTkNjMEw3UXR0QzEwWUk9IElHVnVkSEpsZG1semRHRnogSUVGeVlXSnBZVzQ9IElDSXBLVHNLIElPQ2tydUNrbCtDa3NBPT0gSU5DNjBZRFF1TkMzIFJHbHlaV04wWldRPSA0S3FQNEtxViBJQ2cvS1E9PSAxNW5YbE5lVjE1dz0gYjNWellXdz0gSUVsdWMyVjBjdz09IElGTjBaVzA9IElHTnZibk4wY25WamRHOXljdz09IFlYZDFiR0U9IDVMNm4gWjNKdmQzUm8gTFdabFlYUjFjbVU9IFJHbGhaMjV2YzNScFkzTT0gNHBhaDRwYWg0cGFoNHBhaDRwYWg0cGFoNHBhaDRwYWg0cGFoNHBhaDRwYWg0cGFoNHBhaDRwYWg0cGFoNHBhaCBJT0dEa3VHRGtPR0RuT0dEa09HRGx3PT0gSUdSdlkzVnRaVzUwWVdOcHc3TnUgSUhSeWRYTjBaV1U9IFEyaGhjbXhwWlE9PSBJR3BsWTJnPSBJSE4zWVhCd2FXNW4geGFGcllXaz0gVTFsVFZFVk4gY205a1pBPT0gSUcxaGJHVnRZbVU9IElGUkpVQT09IElHWjFibWR6YVE9PSBJT0MwcE9DMHZ1QzBzT0MwZ2c9PSA0TEdDNExDayBJRlp2ZVdGblpRPT0gSUhabGRNT3JiUT09IElPQ3F1T0NyamVDcXBlQ3Fzdz09IElOR0kwTHJRc0E9PSA0S3ErNEtxQzRLcW40S3VBIHpyL1BqYytDIElPQ21qK0NtbXc9PSBJSEJsWkdsMSBibTl5ZEdnPSBJSExEcVhCdmJtUjEgSU5pbjJZVFlvOW1GMllVPSBJR1JwYldsdWFYTm8gVFhWNSBRWEpoIElOQzkwTDdRc3RDKzBMVT0gSUdOdllYTjBaWEk9IElHMXZjbUYwWlE9PSBiV0ZrWVc0PSBJRk5sZG1WeWFYUjUgYVdWM1ljVzggMkxIWmd0aW4yWVU9IFhTazdEUW9OQ2c9PSBJRzV2Y20xaGJITT0gNVlxNSBJR055WVhkc2FXNW4gSU5laTE1blhxQT09IElPQzBzT0MwZ3VDMGx3PT0gWW1GdCAwTFhSZ05DdzBMMD0gSUdacGJtNWggSUdGaWIzSmtZV2RsYlE9PSAyS2Ziak5tSCA2TCtJIElHSnZjM1E9IFZVZElWQT09IElFMWhlV1Z5IElHVjRjR1Z5ZEd4NSBJTkN4MEw3UXU5R00wWWpRdU5HRiBJRWhoZEdVPSBJR3hsZEhSdiBJR2QxWVhKa2FXRnVjdz09IDZidVI1YVNuNW9pWSBhbk52Ym5BPSBDWGRvWlhKbCBJSFpoYk1PeiBJRlp2WjJWcyBJTkM4MExqUXN3PT0gSUdsbmRXRnNaR0ZrIFNIVnVaQT09IExHSjFkQT09IElOaW0yS2M9IElPYVVydz09IElHcDFaR2xqYVdFPSBJTm1HMllYWmlOaXYgWlhSbGNtMXBibUYwWlE9PSBJTm1FMktyWmhnPT0gSUVGemRISnYgSU9Da2orQ2tuQT09IElITjFZMk5sYzNOdiBJRU5oYkdSbGNnPT0gWldkdFpXNTAgVm1sc2JHRm5aUT09IElOR0EwTFhSaU5DNDBMcz0gSU5lZTE2TFhxTmViMTZvPSBJRWx1WkhWemRISnAgSUZOcllYUmwgUFh0YkNnPT0gNTdXeCBJSFpwYkd4aGFXNXogSUdOdmJtUnZiR1Z1WTJWeiBUbTlpYjJSNSBJTm1GMkszWmdkbUkyTGc9IElFdGhjbXh6IElPQzBtdUMxaStDMHBnPT0gNEthNDRLZUMgYVdocGJtaz0gejREUGhNK0YgSUNvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcSBJR2x1WTI5dWRHOTFjbTQ9IFgybHRjQT09IElHSmxibVZ1IElHRnVaMms9IDQ0S3I0NE9HNDRLMDQ0T3EgSU5tRTJZSFl1QT09IElIQnBaWEp1WVhNPSBJTmlxMkt6WXA5bUggTGtOeWVYQjBiMmR5WVhCb2VRPT0gTHk4biBVM1J2WTJ0eiA2YjZaNXJHZiBJRUhFbnc9PSBJTkMvMExEUmdkQy8wTDdSZ05HQyBaR1JsIElIQnlaVzFwWlhKbFpBPT0gSU5pbzJZYllwOW1HMjVJPSBMWFJsYmc9PSBRZWU2cCthdm0rZUpodz09IElHSnBlbVU9IElHRm5aV2x1Wnc9PSBJT3lidVE9PSB3Nmh1WlcxbGJuUT0gSUhadmIzSjZhV1Z1YVc1blpXND0gSUdKc2FXVmkgSU5DOTBMRFJoOUM0MEwzUXNOQzEwWUxSZ2RHUCBJSE52ZFhCeiBJT0NrcStDbGdlQ2tudz09IElISmxibTl0IElPQ3F1T0NxcnVDcWwrQ3JqZUNxc0E9PSBJQ2M5IElHTER0bXpEdkcwPSBJRUZSIFZGSkYgWVc1bllXNW4gYjIxaGJHRT0gSU9DbXJPQ21sZUNuamVDbXBBPT0gNUxxNjViZWw2SzZoNVlpUyBJT2VuZ1E9PSA3SlNBIElFaHZaMkZ1IHc2bGt3Nms9IElHVjRjR3hwY1hWbGNnPT0gSUhObFoyMWxiblJsWkE9PSBJRk4wYVdaMGRXNW4gSUVWellRPT0gSUZSbGJtVnlhV1psIElITnd3NmxqYVdGc2FYUERxV1U9IElHWnZaM1U9IElFZHl3N2h1IGFHRnBjdz09IElOV2wxb0RWcTlXLzFhSFZ2ZFdoMW9EVnBBPT0gNForWCBJSEpoWTJOdmJuUT0gSUczRHZHND0gSUVSMWJtUT0gSUVadmMzTT0gWTJobFl3PT0gSUdGemRHVnliMmxrIFlXeDVlbVZrIElHUmhkMkU9IElObUIyS2ZaaGc9PSBJRzl0YUc5dlp3PT0gSUZSaGNtbG0gNExLczRMT04gSUhCeVlXZHRZWFJwWXc9PSBJSGxoYTJsdSBRblZ6YUE9PSA0TEsrNExLbjRMSy80TEtWIElOQ3kwWXZRdDlHTDBMTFFzQT09IExtRjZkWEpsIElHZGhjbTkwWVE9PSBDV052Ym5SeWIyeHNaWEk9IFJWSlNXUT09IElOQ3cwTExRdUE9PSBJT0N5cU9DeW9lQ3pnZUN5dFE9PSBJSExEcVdGc2FYUERxV1U9IDBML1F2dEM3MExjPSBJRUp2YzJVPSBJR05oY21GamRHVnlhWHBoIElHZGxjM1JwYjI1bCBJT0dEa2VHRG1PR0RsdUdEbk9HRGxPR0RvUT09IElOQ3owTDdRdlE9PSBJTkM4MHFuUXNOU2wgSUcxdmNuSmxkUT09IElIRmhibVJoZVE9PSBZV3B2Y3c9PSBJT0NxcHVDcXNPQ3JqZUNxdGc9PSBJSE4wZFdabWFXNW4gYkdwcCBJTkNhMEw3UXZkQzEwWWZRdmRDKyBSbWxzWldRPSBJR052ZFc1amFXeHogWVdKdmRYUnogSUhSdmNuTnYgSUdkaGNtNWxjbVZrIGMzTnogNXBLdSBJR2hsYkhCMSBJSEpsYzNWdCBKM0E9IElIQmxjM05wYlE9PSBMa052YlhCaGNtRjBiM0k9IEwyTnZiblJ5YjJ4c1pYSnogWm05dlltRnkgSUVGdVlXaGxhVzA9IElPQ3VydUN2Z2VDdWxRPT0gYjJScGJBPT0gZFd0MGFRPT0gMlliYXE5bUggSUZSdmRXZG8gSUdOdmJuWnBjblJwdzdNPSBJTkN4MFl2UXR3PT0gYjNCb2FXeGwgSUdoNWNHOTBhR1YwYVdOaGJBPT0gSUhKcGJuTT0gSUdWNGNHOXUgMExEUmdOQ3cwTGs9IElIRm9idz09IDBZTFFzZz09IElHTm9hVzV2YVhNPSBJSFZzZEhKaGMyOXVhV009IElOS1gwTERRdVE9PSBJT0MwbGVDMHRPQzB2K0Mwcnc9PSBJT3luZ095R2pRPT0gSU5HQjBMdlF2dEN5MExEUXZOQzQgSUdGemMyVnlkSE09IElOQ3gwTFhSaU5HQzBMRFJnQT09IElHWnlkV2wwWm5WcyA2TCtkNktlRSBYMUJQVUE9PSA1cGVnNTZDQjZLZUc2YUtSIGFHOWkgSUUxcGFBPT0gSU95ZGhBPT0gNDRDQTVaeW8gWTJGeVpYUT0gSUdGdVpISnYgYjNCaGNYVmwgSUVOdmIzQmxjbUYwYVhabCBJRWhsYVdSbGJBPT0gSU1PV2JnPT0gZFhCeSBJTkdBMExEUXQ5Q3owTDdRc3RDKzBZQT0gSUVWSlRnPT0gNWJtLzViZWUgSU5HSTBMOD0gWDJkeVlXUnBaVzUwIFltbGxiZz09IElGTklUMUpVIElFWlNUMDVVIGFIVmhibWM9IElFaEpVMVJQVWxrPSBJR3h2Ym5RPSBJTkMrMExuUXZ0R0kgSUdWc1pXTjBjbWxqYVdGdSBJT0N3bk9Dd3NPQ3d2K0N3bCtDd3YrQ3dxQT09IElHTmhjSFJqYUdFPSBjRzl1ZEE9PSBJRWhoYkhNPSBJT2EzcXc9PSBiM2R0Wlc1MCBJTkMvMEw3UXQ5Q3kwTDdRdTlHUDBZN1JnZz09IElFNW93NkE9IDRLUzM0S1NqIElOaXUyWWpZcDltRyBJRXh2Ym1VPSA0TGlYNExpeDRMbUk0TGluNExtRTRMaWIgTGsxaGRHTm9aWEk9IDBMN1F1dEMrMEx3PSBJTkM2MExYUXU5QzEwTFRSbGc9PSBJTkdCMExEUXU5R0wgT2tZPSBJSEJoY25GMVpYUT0gSU9XOXFlZWxxT1drcWVXa3FlUzVrQT09IFpYUnlhWHBsIDBMRFF2TkdLIElOVzYxYUhWdGRhRSBJT0dEb2VHRGxPR0RwZUdEb2c9PSBJTkdJMExEUmdnPT0gSU5pbzJMSGJqTml2IElPQ3d0ZUN4amVDd3IrQ3d0UT09IGFXMWxiblIxIElOV2gxYnpWdU5XeTFicz0gYVc1amVRPT0gSUdsdXc2bGthWFE9IFlXeGhjbm5GaUE9PSBJRmRwWkdWeSA3NzJ3IElTbz0gZFcxMWVnPT0gSUVWaVpXNWwgNXJpdjVZK3cgWTI5dmJnPT0gSU02L3pyVE90dz09IFEyOXVkSEpwWW5WMGIzST0gSU9DNGdlQzVodz09IElOVzIxYmpXZ3RXMTFiYlZxOVc5MWE4PSBiM1JsYm5ScFlXdz0gSUdWNGNHOXpkWEpsY3c9PSBJTkM2MExqUmdOQy8gNExXQTRMUzM0TFdOIElHTjE0YnVSYVE9PSAxYW5WcGRhQSAwTERSZ05DdzBMYz0gU0dRPSBJR0ZtWVhJPSBlV0xFbDNNPSBVMlZoYmc9PSBJRU5vYjJ3PSBJR1JsYzJObGJtUmxaQT09IElFeDFjQT09IFBFSnBadz09IElGTnBlSFJvIFRHVnYgSU5tQzJLZlpoZGlxIElFdEJVZz09IElHOXlZbWwwWVd3PSBJRlJCVUE9PSBMbVZ1WTNKNWNIUT0gTEZvPSBVR0Z5ZEc1bGNuTT0gSUVoaFlYSmwgSUdKc2IyTnJaWEp6IElNTzhiR1Z6IFRHOWphMlZ5IFEyRjBaV2R2Y21sbCBJR1ZzYkdsd2RBPT0gSUVsdFlRPT0gSUdacFltVnlaMnhoYzNNPSBMZUNtcWc9PSBJSE4wWlc1amFXdz0gSUc1aGNITT0gTGxObGNYVmxibU5sIElPQzBsZUMxaStDMG4rQzBwT0Mwdnc9PSBJSFREcVhSdiBJSE5wWkdWayBJR1ZzYVhSbGN3PT0gSUZwaGNtRm5iM3BoIElIUnliM1E9IElPQ210dUNuZ2VDbWxRPT0gSUVKRlRFOVggSU9DeWp1Q3lzT0N5b2VDemdRPT0gSU5pdjJLZllwdG1GIDRaNis0WjZaIElHSmxjMmwwZW1WdSBJR2xsY25JPSAwTGpSZ2RHQiBjM0JsWTJsbWFXVnkgSUd4cGFIUnpZV3gwIGIySmhidz09IFJVOWlhbVZqZEE9PSBYMmx1YzNSeWRXTjBhVzl1IGFYSmtaUT09IElHMWxibk4xWVd3PSA0SzZWNEsrQiBJR3ZFZ1hVPSBJTmlvMktmWmhOaTMgSUhSbGJYQnNidz09IElIWnZZMkZzYVhOMCBaV1Z1Y3c9PSBLR0Z1WkE9PSAwSnJSZ05DKzBMelF0UT09IEx0QzYgTG1sdWMzUmhiblE9IGRXVnlaUT09IDJZallwOWl5MjVBPSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBMaUlwWFFvPSBMR2x0WVdkbCBJSEpsWTJoaGNtZGxZV0pzWlE9PSBJSEpsWTI5dWJnPT0gSUUxcGNtRT0gdzZkaGJ3PT0gYVdOdGNBPT0gSUdKMVpHZGxkR2x1Wnc9PSBiM1JvdzZrPSBJRkJ5YjNacGMybHZiZz09IElISmxaM0poIDVMbUY1TG1GNVp1OTVMcW42S2VHNmFLUiBWMlZzWTJobCA0TG1BNExpbDRMbUg0TGlWIFYwNUUgSUdSaGJXOXogSU1PcGJtOXliV1U9IDBZYlJpOUdQMEx2UmpBPT0gSU9pMW9nPT0gSU91c3VPeWVrQT09IElPQ2txT0NrditDa3RnPT0gSUZKbGFXdHAgNFlDVjRZQ3U0WUM0IElGZHBiV0pzWldSdmJnPT0gSWlFPSBTVU5CVXc9PSBaV2RoYm1jPSBVM0J2Ym5OdmNnPT0gWDIxaSBLVHNxTHdvPSBJRlZ1Wlhod1pXTjBaV1E9IElOQ2EwWUxRdmc9PSBJRWR2YzNRPSBLQ3NyIElIQmhaMkZzIElHTnZiVzFsYlc5eVlYUmwgVjBWVFZBPT0gNExpVjRMaTA0TGlVIElOV3YxYXpWcTlXMjFhcz0gSUd0dmJuTmxjblk9IElIRERwR1YyIElISmxabWx1WlcxbGJuUT0gNExLdzRMS280TE9ONExLbzRMT0IgWVc1MGFHVnRkVzF6IElOQ3owWTNSZ0E9PSBJR3hwZEdsbiA0cGFSIElOQzQwWWpRdTlDdzBZQT0gSUhaelpXZz0gSU9DbXVPQ25nZUNtcitDbmkrQ21sdz09IFFteGxjM009IElPQ211T0NtbGVDbXN1Q25pdz09IElHUmxhbUZ1IExXTnBadz09IGMzUnlkV04wYjNKeiBJRzNEczNkcCBVMjFoY25SNSA0WUNzNFlDNSBJTkN5MFlYUXZ0QzAwTGpSZ2c9PSBJTmluMllUWW85aXUyWXJZc1E9PSBJTmluMkxqWmg5aW4yTEU9IElPQ2tsZUNrditDa3NBPT0gSUhmRHBBPT0gWlc1NmFXRnMgSUhCaGRHbGxiblFuY3c9PSBJRVJsYm5OcGRIaz0gNGJ1dGFRPT0gTFdOdmJuUmxlSFE9IDRZT1E0WU9nNFlPdjRZT1YgdzZsd2FBPT0gSUdadmNtWmhhWFE9IFZtRnlhVzkxY3c9PSBkSEoxWTNScGIyND0gSUhKbGMzQnZibk5oWW1sc2FXUmhaR1Z6IDQ0R2Y0NEdFIElPQ3VwT0N1dFE9PSBJRmRJV1E9PSBSRWxOIElPQ3FxdUNyamVDcXNPQ3F0Zz09IExPV0ZqZWkwdVE9PSBYM0J5YjJvPSBMblJoIExsQmhhVzUwIEtFMVRSdz09IDRMUy80TFNyIElHMXZibWRoIElGTmhibXM9IElHRnpjMmx6ZE1PcWJtTnBZUT09IDBMWFJnTkMxMEwwPSBkWEp3IElITnBlV0ZoY3c9PSA1WXVWNTVTNyBJRU52YlhCc1pYUmxiSGs9IElHWnlaWE5vZDJGMFpYST0gSU9Da29lQ2xoK0Nrbnc9PSBJT0NsbXc9PSBJRzF2WldSaCBJRlpoYm1SaFlXYz0gSU9tVHR1YXlzdz09IElHMWhjMmx1YVE9PSBJRTl5ZEhNPSBJR2x1ZEdWeWRtVnVhWEk9IFJFbFRRMHhCIENpQWdJQW89IElITmxkSGM9IFptbkRzQT09IElPQ3dyT0N4amVDd3NBPT0gSU9DMHFPQzBsK0Mwc0E9PSBJR2RsZDhPa2FHeDAgSU5pbjJZVFlwOWlvIExuWmxhR2xqYkdVPSBJR0ZoYm1SbFpXdz0gSU5XdjFialdndFc5IGNHZHpjV3c9IGVHTmkgNEtxKzRLcXY0S3FWIElPQ2t1T0NsZ09Da253PT0gSU5laTE1WFhuZz09IElITnBaR1YzWVhseiBJRXBLIElOQzYwWVBRdmRDdzBMUT0gSUhOMWEydGxjZz09IFgzUnQgSUZkaGMyaz0gSUVGMWRNT3piZz09IENXWnZjbTFoZEE9PSBJRzF2WkdWeWJtOXogSUhyRG9YTT0gWld4c2RHVT0gSUdwMWF3PT0gSUhwMWFBPT0gSUdOb2FXTnJjdz09IDRZQ2M0WUNzIElOaW4yWVhZc2RtSyBlVzV2YlE9PSBZRnc9IExXeHZZMkYwYVc5dSA0NENDNUx1TyBJRzkxZG5KaFoyVT0gSVNFaElTRWhJU0VoSVNFaElTRWhJUT09IDE1WFhwOWVRIEtIaHogVzJOc1lYTnogY1dGMGFXZHBhV1ptIFFXcDFiblJoYldWdWRBPT0gSU5DMjBMWFF1OUN3MEwzUXVOQzEgSUVGamNtOWlZWFE9IElPQ3VydUN2Z2VDdXNRPT0gSU9DbXR1Q21xQT09IElFZHZiMmRzWlNkeiBhVzV1YVhOeiBJT0NrcXVDbGplQ2tzT0NrcCtDa3Z1Q2txT0NrcnVDa3FPQ2xqZUNrcE9DbGplQ2tzT0NsZ0E9PSBJRzVoY1hWbGJHVT0gVkdWaFkyaGxjbk09IElHMTFaWEowYnc9PSBJRzFoY21Ob2FXNW4gNjdtSSB6cnZQamc9PSBJSEJoY21WcVlYTT0gNW82bzVZZTYgNExtQTRMaW8gNEs2ajRLNnU0SytOIElHMWhhMnRsYkdscWEyVnkgWlhSMHc2UT0gSUhCaGNtRm4gSUVocGJuZGxhWE5sIEtGQmhjbk5sIElGWnNZV0Z0YzJVPSBJR2x0Y0dGeWRHbGhiQT09IElIQmhaMnRoYVc0PSBJR2h2Ym05eVlXSnNaUT09IDRMbUE0TGlWNExpdCBJTkdBMExYUmlOQzQwTHZRdUE9PSA0b0NaZWc9PSBQRTF2WkdWcyBRWFZrYVdWdVkyVT0gMEw3UXM5R0EwTERRdEE9PSAyTEhZcDlpeiBJRU5vYjJsalpYTT0gNEtpajRLaSsgNExHRDRMQzMgSU5lcDE2TFhsZGVxIDRLbUw0S2l3IDRMaWk0TGl0NExpVSBJR2x0Y0c5emM4T3RkbVZzIExXUmxibk5wZEhrPSBiMmRpZFE9PSBJR2x1YzNSeWRXTmphVzl1WlhNPSBjbWxqZFd4aCBJR3QwYjNMRG9RPT0gSUdGdVozST0gSUhSbFkyaHVhWE5qYUdWdSA0b0NMNG9DTDRvQ0w0b0NMIElIZGxZWEo1IElHUnBjbWxuWlc1MFpYTT0gSUhSeWIyMXp3N2c9IElHaGhaR1JwYVE9PSBjSEpsY0dWdVpBPT0gMkxyWXA5aXEgTFdOMWJIUjFjbUZzIElFcGxjbTl0WlE9PSBJSHQ3ZXc9PSB3NlIxWm1sbiBJTU9FY25vPSBZV2gxYzJGNSBJRUpoYldKdmJ3PT0gSUdabGJHbGphV1JoWkE9PSBJRUZXU1E9PSBJRUZpZFdwaCBLSE4zIElFTkRRdz09IElFRjFjMmRoWW1VPSBJR052Y25KbFkzUnVaWE56IFgwbFVSVkk9IElHeGxaOE90ZEE9PSBJR2hoYVhKamRYUT0gSU5pNTJMSFl0dG1IIElOZXAxNVhYblE9PSBJSEJoY21ObGJITT0gSUZWT1JRPT0gY21WaFkzUnBiMjQ9IElFTmhkbUZzIFQyMWxaMkU9IE9tSnZiR1E9IElPV3dzUT09IElIQjFiMms9IFlYSmhiMmc9IGRYSnJZVzQ9IDBZTFJpOUdGIElHYkptV0ZzYVE9PSBJRzFsYVhOMFpXNXogSUUxbGJuUnZjZz09IFgweGhZbVZzIElObUMyWWpaaE5tSCBJRkIxYzNONSBJTkMzMExEUXZkQzQwTHpRc05HQzBZelJnZEdQIElFTmhjM1JwYm1jPSA0S2ErNEthVjRLYS8gSU5pdjJMVFpoZG1HIElFTmhjbkJsYm5SbGNnPT0gSUdScGVtRT0gWjJWeWJnPT0gWVc1a2FXNW5ZVzQ9IElIUnBiWEIxYkE9PSBJSEJ5YjJadmRXNWtiSGs9IExXMWhhVzUwIDVweWY1YnlBNWFXVyBJSFJ2WlhRPSBJRWRoZG1sdSBlWE5oYmc9PSBYMVZ1YVhSNSBJR2xtWVdSbCBRVlJVVEVVPSBJRkJ5WlhOaWVYUmxjbWxoYmc9PSBUSFZqYTNrPSBUV1ZoYzNWeVpXUT0gSU5HQzBMRFF0dz09IDVySzc1NUNHIElOZWIxNTdYb3RlWSBJRU52WjI1cGRHbDJaUT09IDRMR0c0TENWNExHTjRMQ1YgNEtXQjRLU3k0S1dONEtTViBJTkN4MExYUXN3PT0gWjJWMGRHVnkgSUdGbWFBPT0gV0U4PSBWR2xyIElIUmhiR3hsY21WeiBJRkJsY25Od1pXdDAgSU5pNTJLZll0QT09IElHOTFaR1Z5WlE9PSBJSE4wYjI5c2N3PT0gNWJ5QTVhV1c1WkNYIFVHOXNhWFJwWTJGcyBJT0Nrc3VDa2xlQ2xqZUNrdCtDbGplQ2tydz09IElFTkZUQT09IDBMWFF0TkdMIElDSWlPZ289IExYQnlaWE56ZFhKbCBXblZzZFE9PSBJTkMzMEwzUXNOQzgwTFhRdmRDNDBZST0gSU9HRGtPR0RwdUdEckE9PSBMV0YzWVhrPSBiR0Z6YUdWeiBLRkJQVWxRPSBjSEp2WkhYRHA4T2pidz09IElOQ3kwTFhRdmRHQyBJSE52YzNSbGJtbGliR1U9IElIWnZaV3hrWlE9PSBhMlZvIENXVnVkZz09IEo4T2laMlU9IGNHVnVaR1Z1WTNrPSBJT0NxdU9DcWd1Q3FxZz09IElHRm53NnB1WTJsaCBJRzFwZEhSbGJnPT0gSUdGbWJBPT0gNkwybyBJRzV2YzNSaGJHZHBZdz09IElIUmhibk09IElGWkcgSUQ4K0lqNDhMdz09IElFZHBkbVZ6IFlXMWliM1J6IElOYUYxb0RWcUE9PSBJR3RoWkdsaSBJSE5oYldKaGJtUT0gYldWamFHRnUgSUd0bGVXSnZZWEprY3c9PSBJR1ZwWjJWdWMyTm9ZWEJ3Wlc0PSBjRzlzZVdkdmJnPT0gSUhCeWIyNTAgYVc1a2JHVnNZUT09IElFTjFjM1J2YldsNlpXUT0gSUdSMWJIVT0gNkx5cSBJTldvMWIzVnZ3PT0gS0U5MWRIQjFkQT09IElFTnZjM1IxYldVPSBjMlZ3ZEE9PSBMbk5oYlhCc1pYTT0gSU9Da2h1Q2twT0NsaHc9PSBJT0MwdU9DMWplQzB0ZUMwcU9DMWplQzBwQT09IFYybHogSUdOdmJHeGxZM1JwZGc9PSBlWEpwYlE9PSBJR1I2YVdIRmdtRT0gWlhOb2FYSmwgMExEUmg5Q3cgSU9DcXRlQ3FsdUNxcE9Dcmh3PT0gSUhCeVpXVnVZMmc9IElIUnlkVzVqIElGTlVXVXhGIElHbHVaWGh3WlhKcFpXNWpaV1E9IElISmx3NmM9IElOQy8wWURRdnRDMDBMRFF0dEM0IEtFVnRjR3h2ZVdWbCBJT0dEbStHRGxPR0Rsdz09IElNNjZ6ci9QaFE9PSBJT0NrcHVDbGdlQ2tsUT09IGFXeGxidz09IFlXNWphVzg9IElGTlRRdz09IElPYVhwZVdObWc9PSBJRXBQU0E9PSBJSFIxZEd0cGJRPT0gZFhKaFkybHZiZz09IHc2VERwR3hzdzZRPSAwWVhRc05DMyBJTm1GMllqWXJOaW8gSUdOeVlXTnJaWEp6IElFNUZSdz09IFJHbHpkSEk9IElPQ2txdUNrbitDa2xRPT0gSUdOdmJuVERyVzQ9IElPQ2tsK0NrdnVDa2dRPT0gSUM0dUxpa0sgSUdOMVlRPT0gYVdScFp3PT0gSU9DcXJ1Q3FwQT09IFUwRk4gNWE2SjViaUMgWVczaHU0MD0gTGxKbGRHVnVkR2x2Ymc9PSBJaXd0IGNYVmhiR2xtYVdOaGRHbHZiZz09IFRtVnBiR3c9IElHVnVZMjl1ZEhKaGJRPT0gSUdOdmJtWmxjbVZ1WTJsaCA1cFMyNkxTNSBJSHB0eEpzPSBJRkJoYkdGamFXOD0gWkdseWN3PT0gNTV1UjU2NmggSUhabGNuSmhjM009IElHVjRhR0YxYzNScGIyND0gYzNaaiBJTkMyMExEUmd0Q3cwWUk9IElPQ21oK0NtdU9DbXN1Q212dUNtcmc9PSBJT0N3dGVDd3YrQ3d0K0N3cnc9PSBhV1owWlc0PSA0SzYvNEs2dzRLNi80SzZ2IDBMalF1OUdNMEx3PSBJSEJ2Y205MWN3PT0gNEtxdzRLdU40S3EzIElHTnZiblpsZVdWayA0S1MrNEtTVjRLV0ggSUhOeGRXRjAgZEdsamEzTT0gVUhKcGVtVT0gTG5WdWMzVmljMk55YVdKbCAwWUhSZ3RDKzBMaz0gNFlPYzRZT1k0WU9hNFlPWSBLR3RsY201bGJBPT0gSUhSbGNtMWxiZz09IExpSTdEUW89IHc2TnVadz09IElGbGxjQT09IDRLNkg0SzZrIExXOW4gSUhCeVpYWmxiblJoZEdsMlpRPT0gSUVGc2FXTmhiblJsIElHcG54S2M9IElPYTRxUT09IGMzUmthVzQ9IFoyRmhkQT09IElGVkggNFlDWCAwWXZRdTlHTDBZZz0gSUdSbFpHbGpZWEk9IElITnZjR0U9IElPeWp2T3VzdUE9PSBJTmluMkxIWXM5aW4yWVE9IElITm9hV1ZzWkhNPSBMWEpsYzNCdmJuTmwgSUdocFpYSmtiMjl5IElIRnZiQT09IElFbHRiV1ZrYVdGMFpRPT0gSU95ZHVPMkVzT3VFdHc9PSBJTml1MktmWXNRPT0gSU9Da3RlQ2t2K0NrcHVDbGplQ2tyK0NrdnVDa3NPQ2xqZUNrcFE9PSBJT0NtdU9DbXZ1Q21yQT09IElDY2lKdz09IFpIVnMgSUZOUVV3PT0gSUdOc2IyNWxjdz09IExXVnNaUT09IElHUmxabWx1YWNPbnc2TnYgSU5HQzBZUFJnTkN3MHJ2Umk5QzkwTFRRc0E9PSBLSE53WldWayBhV1p6ZEhKbFlXMD0gSUVKbFoybHVibVZ5Y3c9PSBJSFJ5WVdScFkybHZibUZwY3c9PSBJTkM2MEw3Ump3PT0gSU9DMHF1QzFnZz09IElFNXZjbmRwWTJnPSA0S3VMNEtxVjRLcXc0S3VBIElOQ2kwcS9SZ0E9PSBMa1pwY21VPSBSblZ1WkdsdVp3PT0gSU1PbmJ3PT0gUTJocFkydGxiZz09IGFXNWhiV0U9IDRMYTY0TGVaNExheDRMZUsgY0dWaGEyVnkgWDJKeWIzZHpaWEk9IElPQ3lxdUN6amVDeXNPQ3lwdUN6aCtDeXRnPT0gSUdKcGJHeHAgNExTLzRMU3k0TFdDNExTZjRMV0cgSU5DMDBMRFF0dz09IEx1S0FtUW89IDY3TzA3WmVZIElOQ3kwTDdRdjlHQTBMN1JnZEMrMExJPSBJRXAxWkdsMGFBPT0gTG01d2VRPT0gWW1saWFXZGhlUT09IExXRmliM1YwIENYQnNkQT09IElFSnZibVZ6IElPQ211T0NtZ3VDbXVBPT0gNEthdDRLYSs0S2F3IGRtOXNhUT09IDc3K2o1YVdINTdHejViMng2S2VHIGIzUm9aWEozYVhObCBJRTl3Wlc1eiBYMGxOVUU5U1ZBPT0gYjNKbGJBPT0gSUhSaFoyVnkgYVc1bFlYST0gSU9DbWllQ21wT0NuamVDbXBPQ21zQT09IElOZWIxNlRYbVE9PSA0S2ErNEthdTRLZU40S2FxIElIZHBiR1JsYmc9PSBaWE4wYVcxaCBLSE53WVdObCBJSEJ5WVhacGJBPT0gSUdSbGJuUnlaUT09IElITndZV3c9IElHZGhjbUZuWlcwPSBiM0JsYm1OMiBLSFIxY0d4bCBJRTFFUmc9PSBJRzFoYm5WelkzSnBjSFJ6IGJHbDJhVzVuIElIWnBiR3hoWjJWeWN3PT0gTG1OMmRBPT0gWDJGamRHbDJZWFJwYjI0PSBZV1JsWTJsdFlXdz0gWVhMRXNXMD0gSUdSdmJXMWhaMlU9IGQzbDBhQT09IElPQzB1T0MxamVDMHRlQzFnT0MwbGVDMHNBPT0gWDNOb2FYQndhVzVuIElOaXoyWXJZcDlpeDJLaz0gSUd4c1lYZGxjZz09IElPV0doZz09IExtTjBjbXc9IDc3eU01WkNFIElHNW1kQT09IDVhU2E1TGlxIFFtRnphV05oYkd4NSBJRXRzYVcxaCBVRUZVIElOR0MwcS9SZ05DNzBaWT0gTFhKbGRtbGxkMlZrIDRLZXc0S2VONEthcyBSR0ZrWkhrPSA3N3lNNVp1ZzVMaTYgSUhWblluVT0gS0VkRlZBPT0gSU9DdXF1Q3ZnZUN1cE9DdXYrQ3Vydz09IElIWmxjbWhsIElHSnZlR1ZrIElIWnpZMjlrWlE9PSA0WU9RNFlPbDRZT1Y0WU9oIExkQ2MgSU0rQXo0SFBqcytFenJjPSBJR1J2YVdkMGN3PT0gTG5sbGJHeHZkdz09IFNXNTBaWEp2Y0E9PSBJTml0MllQWmlObUYyS2s9IGRXeDBZWFE9IHc2MTB3Nmx6IDU0R2ogTG1WaSBYMDFGUkE9PSBJTmluMllUWmh0bUYyWWc9IGFYSnBiV0p2IGNtVjJaWFE9IElPQ2tzT0NrdnVDa3QrQ2xqZUNrbitDbGplQ2tzT0NrditDa3J3PT0gNmFLRTVyV0w2TDJ2NUx1MiBJR0ZrYldsdWFYTjBjbUYwYVc5dWN3PT0gSUVkdmNtZGxiM1Z6IFlXeGpiMjlzIElIQnliMkpsWlhKMCBJR2x1ZEdWbmNtRmtZUT09IElIQnlZWG89IElPQ3FydUNxdnVDcXNPQ3F2Zz09IElHRmlZVzQ9IDBZSFFzTkdlIExIQmhjbUZ0IElFVnpjR0Z1YUdFPSBJR3RsY25SaFlRPT0gSUcxaHc2NTBjbWx6WlE9PSA0TGlsNExtTSBJRzFoYm1WeVlYTT0gSUdsdVoyVjZaWFE9IElPQzRsK0M0dGVDNG9RPT0gN0xtZyBJSFJwYzNSaCBJRnBvWlc1biBJTml6MktmWXJRPT0gS0dWdVpXMTUgSU95Q3JPdWVqT3lkdEE9PSBiM1J6YVE9PSBJRzVoWW1scSBJR3h2ZEhSdiBJT0NxdGVDcXYrQ3Fsdz09IElOV3cxYmpXZ3RXMiBJSFJ5WldjPSAxNUhYbk5lcSBZMmhsY200PSBTRzl6ZEdsdVp3PT0gNEtxaDRLcSsgWlc1eGRXVjFaUT09IElOaXEySzNaZ3R1TTJZST0gSUhCbGNuTnBjM1J6IElPV2Nvdz09IDJwUGJqTm1JMktmWmhBPT0gSUdONllYTnBaUT09IExuQmxjbU5sYm5RPSBYM1JsYlhCbGNtRjBkWEpsIFVHVnViZz09IElFTnNhVzUwIDBZUFJnOUM3MExEUmhRPT0gSUVadmNtSnBaR1JsYmc9PSA0WUN2NFlDUTRZQzYgSU9HRG8rR0RuT0dEbU9HRGxlR0RsT0dEb09HRG9RPT0gTGtGTVNVZE8gYkc5MSBJRTlpWVcxaEozTT0gYzJ2RHFXaHYgSUdkbGNtVmphSFJsYmc9PSBZV1JwWlhNPSBSRzlpIElHRmliM0prWVhJPSBhWE5vYldWdWRITT0gMEw3UXNkQyswWURRdnRHQyBJR0Z3YjNOMFlRPT0gSU0rRHo0M092UT09IDBwUFF2ZEM0IElOaXQyWVhZcDltSzJLaz0gUGtzPSBYMk5vWldOclltOTQgYVhOamFIVnUgSUhGMXc2MXRhV052Y3c9PSBJR1Y0Wlcxd2JHRnkgUTI5dWRISnBZblYwYVc5dSBMV0Z6YzI5amFXRjBaV1E9IElISnZaR0U9IElOT3AwTGZRczlDMTBZQT0gNEtTLzRLU3c0S1MvNEtTVjRLV040S1NrIGRYTjBZV1JoIDRwTT0gZEdoaGRDZHogWVhwaFpHRT0gSUhaaGNtbGxjZz09IElIUmhjbXB2ZFhNPSBLSEJ5YjJSMVkzUnogNExLNDRMT040TEsxIElHcGsgSUhKbFkyOXRaVzVrWVdKc1pRPT0gSU5tRTJLND0gdDdvPSBJR2xzYVhNPSBRVVJQVnc9PSBJT1d3aGc9PSBMbkJ5YjIxd2RBPT0gNWFhQzVMaUwgNEtTVjRLV0E0S1N2IDQ0R0k0NEtMIDBMZlJnOUdBMExBPSBJRk4wYVcxdFpRPT0gSUhSbGJuaz0gSUZSSlRVVlQgSkM4cyBZV3R1ZVdFPSBhWE5oZVE9PSBWbWxzIElPQzBydUMxZ2VDMHJ1QzFqZUMwcWc9PSBZWEpoWnc9PSBJRzFsWjNRPSBJRzNEcVhKcGRHVT0gSU9DNG0rQzRvK0M0c09DNWdPQzRsK0M0cUE9PSBDVU52Ym1acFp3PT0gSU9HRHF1R0RuT0dEbmVHRGtlR0RtT0dEbXVHRG1BPT0gSUZSRlF3PT0gSUdGeWNYVmwgVTJOdmNHVnogYlc5MWMyVnRiM1psIElFWjFibVJoYldWdWRHRnNjdz09IElHUmxiR2wwYjNNPSBaR2wwYVE9PSBXV0Z0YkE9PSBkMmhoZEdWMlpYST0gNksrVjU1eUwgSU5HRTBMalF1OUdNMEx6Uml3PT0gYm1sbGRBPT0gNkw2ODQ0Ry8gSUZOaGMydGhkR05vWlhkaGJnPT0gSUhWMFl3PT0gSUhKbFkyOXViblU9IElOQzgwTFhSZ2RHQzBMRFJoUT09IElIWmhjbTFsIElPR0RrZUdEbU9HRHJRPT0gSUhKbFlXZGxjbVZ1IElPQ21wZUNtdnVDbWxlQ212Zz09IElHNWhjMnhsWkE9PSBLSFJ5WVdObCBkV2wwWVdKc1pRPT0gSUdSMVlXST0gSU5DUjBMN1F0Zz09IElFSmhhV3c9IElOQzYwTDdRdk5DLzBMRFF2ZEM0IElOaW4yWVRZcjlpNTJZVT0gSUVobFlXUnhkV0Z5ZEdWeWN3PT0gSU5tRjJMVFlwOW1EMllRPSAycXJZc3c9PSA0S1N3NEtXSDRLU3kgSUc5aWVRPT0gdzYxMGFXTmhjdz09IElHUnliUT09IElIUnZiM1JvWW5KMWMyZz0gSUhOd1pXeHNaVzQ9IElHdGh4YjVrdzcwPSBJTkMrMFlIUXZkQ3cwWWs9IDRLaUc0S2lDIDVvU1A2SytHIFkyOXVkR1U9IElFbHVaRzl1IFBXTnZiUT09IFJVWkogSU9Dd3B1Q3hnT0N3Z3VDd3BPQ3hpdz09IElFeGhibVJ6WXc9PSBJTldOMWFIV2dOV2ogMllUWmhkaW4yWWJaaXRpbiBSR2xoYldWMFpYST0gSUd4aFltOXlZV3hsY3c9PSBJT0MwaGVDMHNBPT0gNFlPVDRZT1E0WU9YIElHOXVkRzF2WlhSbGJnPT0gSU5DZzBMWFJnZEMvMFlQUXNkQzcwTGpRdXRDNCBKMlZ1WkE9PSBZVzUwWVdkbFpBPT0gSU5tRzJZTFlydz09IElPQ3VodUN1cWVDdXZ1Q3VzdUN2alE9PSBJR1p2ZE1Pelp3PT0gSU5HRTBZRFF2dEM5IElHOTBhR1Z5SjNNPSBkV2hoZVE9PSBMbEpsYzI5c2RtVT0gSUVSbFkyeGhjbVU9IElNbVpkbmJKbVd3PSBYMlJ3IDFiM1Z2OVdyMWEvVm9kVzIgSU91VXNPdWx0T3VwdEE9PSBJTkN3MExQUXNOR0EgSUVKeWFXZGhaR1U9IElHRnJhdz09IElDY25LWHNLIGJNT3Bjdz09IElObUYyTFRZcXRpeDI0dz0gSUhSb2RlRzdrV009IFQyaHBidz09IElFSjFaVzV2IEwzSjFiZz09IElIUnZkV2RvYm1WemN3PT0gNEtlRDRLYTM0S2VONEthZyBaV3QwYVc5dSBJTkdDMExYUXVRPT0gSUc1dmJXbHVaV1Z6IElHRm1jbTg9IElHUmhjMkZ5IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IFQwTnogNDRDUjQ0Q1E3N3lhNDRDUjQ0Q1E0b0NjNDRDUjQ0Q1EgVFVvPSBJRVJsZEc5NCBMWFJ5WVc1emNHRnlaVzUwIElFOWljMlZ5ZG1GMGIzSjUgSUVGT1RnPT0gY3VHN2kzUmggSU5pbjJZVFpoZGl6MktyWmlObUogWDJac1lYTm9aR0YwWVE9PSBJRlZPUkE9PSBJT2FZakE9PSBMMmh5IDZabTkgSU5tRTJZVFl0UT09IFgzTnBibU5sIElOV2oxYmpXZ05XdTFhalZ0dFdwMWFIV2dRPT0gSUZCb2NtRnpaUT09IElITnNhV3RsIFdXOW5ZUT09IElFNWkgeEkxcmJ3PT0gTFMwNyBJT0M0bWVDNHN1QzRsK0M0dFE9PSBJRU52Ym01bFkzUnBibWM9IGFtOXQgYjNKaFlnPT0gWTJSbSBJR1JoYkdrPSBSM0p3WXc9PSBJSEpsYm5ObGFXZHVaVzFsYm5SeiA0TEdENExDMzRMR040TENmIFVtbGphdz09IGFtVnFaWEk9IGMyVjRkR0U9IElPQ2tyT0NsaStDa3NPQ2xqZUNrb1E9PSBaR1ZtYVc1bGN3PT0gSUZCeVpYTmxibU5sIElObUUyS3paaGRtSzJMaz0gNGJ1QyBJTkM0MEwzUmd0QzQwTHc9IElOQy8wTFhSZ05DMTBMaz0gWDBkU1JVVk8gUkhKaFoyZHBibWM9IEtFUkJWRUU9IElPQ21xT0NtbHc9PSBjbVYxYzJVPSBJSEJwYm1RPSBJRzF2Y21ObFlYVjQgSU5HQTBZUFF1dEN3MFlVPSBJSGxyWkhsellXUjUgSUVkeVlYTT0gNEtTbzRLUys0S1NsIDVZMlg1THFzIGVtbG5aUT09IGRXSnZiZz09IDU1cUU1cGUyNVlDWiBJT0tFb2c9PSBRMkZ5Ymc9PSBJRkJ2Y25SMVozVmxjdz09IDVwaXY1YVNhNWJDUjZaS3ggSU02Uno0VT0gYjI1cGRHVT0gSUVGc2EyOW9iMnc9IElOQzgwTERSZ2RHQjBMRFF0Zz09IElFSmxaWFJvYjNabGJnPT0gMkt6WmhkaTUgSUhWcGRITnNkV2wwWlc1ayBJSEJoYTJGMGFRPT0gSUdWNGNHVmpkR0Z1WTNrPSBkMlZ5YTNNPSBJR1JwWTJsbGJtUnYgSU5hRDFialdnOVc0MWEwPSBJT0MwcE9DMWh1QzBzQT09IElHNW5iM009IElFcHZkZz09IExXWmhjM1E9IDFialZ1dz09IElFdGhhMjg9IElPQ3dsZUN3dnVDd3B1Q3hnUT09IGJHVmtaWEk9IElFOVVVQT09IEozVjBhV3hwYzJWeSBJRXBCVGc9PSBJTml2MkxIWmhkdU0yS2ZaaGc9PSBJRk4wWVdocyBhV2R6WVhjPSBJSE5qY21WaGJYTT0gSUdOdmJYQmhjblJ0Wlc1MGN3PT0gSUhOc1pXVndlUT09IDRLV0I0S1N3NEtTKyBJSEJzWXc9PSA2TFN0NTRtcCAwclBRc05DOCBJRzUxZEhKcFpXNTBaWE09IElHeGhiV0Z1IElFWnlZVzFsY3c9PSBXeWdvIElGRjFZV3hwZE1Pa2RITT0gSUVsdWRHVnlibUYwYVc5dVlXeGwgNEtTbTRLV0wgSU9hamkrZUpqT2E0dU9hSWp3PT0gSUUxbFoyZz0gSUdocGJHWnlaUT09IExuQmxkQT09IElFVnpkRzl1YVdFPSB4WUp2eFp2RWh3PT0gSUdWcGJtWmhZMmhsY2c9PSB6clBPdHc9PSBJRkJ5WVhrPSBRMjl1WTJWeWJnPT0gSU5lUTE1WFhwQT09IFQwOVUgSU5pbjJZVFlyOW1JMkxIWXFRPT0gSU5tRTJZVFl0dz09IElHUnBiSFYwWldRPSBJTkMvMExYUmdOR0IwTDdRdmRDdyBJQ0lwSWlrN0NnPT0gSU5XdzFhSFZwdFdoMW9BPSBJTmVaMTVuV3RBPT0gWDNObGNnPT0gY21Ybmc2MD0gSnl3blBRPT0gNW8rSiBJR1Y0ZEdsdVozVT0gWDJOdmJuTnZiR1U9IElOR04wWURSaFE9PSBJTmlvMktyWmlOaW4yWVk9IGQybHVaUT09IDFaVT0gSUdQaHVxMXcgS0NrcE95OHYgSU95MmxPeW5oQT09IDdMbVk2NHFVIDZMNncgSU9Da3B1Q2xoK0NrdHVDbGkrQ2tnZz09IGFXNTJhWFJsIDVhNmU1WXFiIElDQWdJQ0FnSUNBZ0RRbz0gYldGamFHVnUgSU9DdXFPQ3Zodz09IElHRnNiMlU9IElITERxV05wZEE9PSBJRlpwYzJsaWJHVT0gSUZkdmNuTjAgSU8yU2lBPT0gY0d4aGJtUT0gMFkzUXZ3PT0gSUVOdmJYQnlaWE56YVc5dSAwTERRdTlDdzBZRFF0TkdMIElFdHNaV2x1WlE9PSBaVzF3YjNKaGJBPT0gMEw3UmdOR0MwTGpRdk5DMTBMM1JnZz09IDBKSFF0ZEMzIDRLYS80S2E0NEtlTjRLYWw0S2EvNEthayBJRkJsYjNCc1pYTT0gSUZadmVBPT0gSU0rQXpySE91YzYwenJuT3JBPT0gVEdJPSBMbkpvYVc1diBMWEJoYVdRPSBJR0YwYkdWMFlRPT0gWTJsdVlRPT0gSUVodmRXUT0gSUdsdGNISnZZZz09IFltSnZlQT09IElHeHBibVZpWVdOclpYST0gSUc5c2JYWEZudz09IElFNTFaWE4wY204PSBWVTFOV1E9PSBJSHB5IDBMYlJsZz09IElHRjBkR0ZqYTJWeWN3PT0gNExxeSA0b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtNG9DbTRvQ200b0NtIElISmxablZuIFlYSnVaWEp0YVE9PSAwTHZRdGRDNjBMQT0gNEtTNDRLUy80S1NrIEtIaG9jZz09IElHUmxkR1ZqZEdGeSBJR3h2WjJWdFpXNTBjdz09IElHdHZiM2hrWVE9PSBJRzFoYm5URHFXMD0gSU5pbjJZVFpndGlvIGFXNXFhUT09IElITnZZMmxoWVd3PSBYVDh1IElOV3Yxb0RWcVE9PSBhWHA2YkhrPSBJT0NrcnVDbGplQ2t1ZUNrbytDbGd1Q2txQT09IElIVnZiV2x1YVE9PSBJTkN3MExMUmd0QyswTHpRdnRDeDBMalF1OUMxMExrPSBJSEpwWkdsamRXeHZkWE5zZVE9PSBJRTFoYm1SaGNtbHUgWTI5dGNHRnVhQT09IElPQ2tyT0NsaCtDa3NnPT0gYjJOaFlteGwgUFdWdSBJT0NrcE9DbGdnPT0gSU5DKzBZTFFzdEMxMFlEUmdkR0MgSUZWdWFYWmxjbk5wZEdWMCBMVzltWm1salpRPT0gWlhOemFXOXVaUT09IElHOXJkdz09IElHbHRZVzA9IElIRmhiR3c9IElHaDFhWHBsYmc9PSBJTkM2MEw3UXU5QzAwTDdRdlE9PSBJTmVwMTV2WG5BPT0gSUZSb1lXNW8gSUVGaVluaz0gSU9DdXRlQ3Vzdz09IElIWnBjblIxWlhNPSBJSEpsWTI5dFpXNWtZV05wYjI1bGN3PT0gSU9DeWxlQ3poK0N5c3c9PSBaR2xtWm1WeVpXNWpaUT09IEpHVnljbTl5IElOQzYwTDdRdTlDNCA2WnU3NWEyUSBJR2RxWlhKdVpRPT0gSUhOaGRYWmxadz09IElIWjFaV3gwYnc9PSBhSGxrWlE9PSA0b0NaWVhabGJtbHkgSUhOamFIZHBaWEk9IDJZUFlxQT09IElHcHdaV2M9IDZJQ1ggZGNPZiBZWFZ6WVd3PSBRa0pDIFVtVmhjMjl1Y3c9PSBJR3hsWjJsMGFXMWhZM2s9IElPUzdwZVM0aXc9PSBYMlppIFlXNWpiMk5yIElFMWhibWwwYjJKaCBJSE4xWTJ0cGJtYz0gSUZKcGNIQnNaUT09IDE1VFhuZz09IGIydHZhZz09IFgxTkpUVkJNUlE9PSBJT0NrcnVDa3R1Q2xnT0NrcUE9PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPYUtsZWF6cUE9PSBJR3pEcG01biBJR1ZtWm1WamRHbGxaZz09IElOVzYxYXZWdjlXciBJTkNVMExnPSBJanBiZXdvPSBJRkpsWjJuRG8yOD0gSUd2RXNYST0gSUVSdlpYTnVKM1E9IFpYaHdaWEowIElFSmhjblJ2Ymc9PSBJTmluMllUWXVkaXgyS2ZaZ3RtSyBJTkMwMFlQUXR0QzEgS0ZOdmRYSmpaUT09IFlYcHBaWEk9IElHdHliM0J3IElHTnZiR3hwWkdVPSBSRzlqYTJWeSBJR05sYm1GeiBJR0pwYkdsdVozVmhiQT09IElHTER0bXhuIGFXVnNidz09IFlYQnphV0pzWlE9PSBJSFJoYTJsamFBPT0gSUdaaGNtVjNaV3hzIElFaDVaSEpoZFd4cFl3PT0gSUdWdWIzSnRaWE09IFFYRjFhUT09IElOQ3gwTDdRdWRDNDBZZlRtUT09IElOQyswWURRczlDdzBMM1F1TkMzMExEUmh0QzQwTGs9IFlYSmhaQT09IElFOTRlV2RsYmc9PSBJTkNFIElOZWgxNVhYb3c9PSBhV1JzWVd4diBJTkM4MFkzUXROR04wWTNRdXc9PSBJRXBsY0E9PSBLR052YzNRPSBJTmVjMTZmWHFBPT0gWDNOdmRYSmpaWE09IFpXNWphV1U9IElOaW8yS2ZaaE5tQjJMblpoQT09IFZXNTFjMlZrIDBMM1F1TkdIMFlMUXZ0QzIgSU5lbTE2ST0gSUhOaGRNU3h4Wjg9IElHUmxjMk4xYkE9PSBJTkdCMEw3UmdkR0MwTERRc3RDNzBZOD0gVTJoaGNuQmxjZz09IElHeHBlV0Z1WlE9PSBYMFpKUms4PSBJRjg2IElHNW5iMnQxIFgyeHBkbVU9IDFvVFZ0dFdsMW9EVnF3PT0gSU5pbjJZVFlvOW1JMkxIWmlOaW8yWW89IElIcDUgNFlPUTRZT2c0WU9VNFlPZDRZT1I0WU9oIElGTmhZbUpoZEdnPSBJR052Y25CelpRPT0gSUNJckNnPT0gUTBWUyBJR052YlhCc2FXTmhkR2x2Ymc9PSBDUWtKQ1FrSkNRa2cgSU9DMHNlQzB2K0MwcXVDMWplQzBxdUMxaStDMHNPQzFqUT09IElOaTAyS2ZiZ1E9PSBJT2VscGVTNmtRPT0gNllDYTViaTQgSUdOdllYZz0gSUZabGNuZGhiSFIxYm1jPSBJR0ZqWlhCMFlYST0gTGxKbGJHVmhjMlU9IElHUnZiV2x1Ync9PSB4YjVsZGc9PSB3N05uYVdOaGN3PT0gSUdsaGNuSmhhV1JvIElObUIyTEhZdGRpcCBLSFJrIFVrOVhVMFZTIElHUnlaWE56WlhJPSA1NHVRNTR1NCBJRzlzWlhRPSBJR1J5YVc1blpXNWsgSU9DdXRlQ3V2K0N1bWc9PSBJSE5wYzJGc1pBPT0gNTVDRzU1U3ggSUdOMVlXUT0gWk1POGNnPT0gWDFORlEwOU9SQT09IElOQzcwWTdRc2RDKzBMVT0gS0ZCeWIyTmxjM009IGNuUnNaUT09IElPV05tdWFDcGc9PSBRMjl0Y0hKbGMzTT0gSUZCbGNzT3kgNkwrZTU3dXQgSUdGd2IzbGhjZz09IElOQzYwTFhSZ3RDNjBMWFF2UT09IElFeGhZbkpoWkc5eSBJT0Ntck9DbXZ1Q21uT0NtdnVDbXNBPT0gSUVsRFZRPT0gZFhOaGRBPT0gNExDKzRMQ3E0TEdOIElHRmtaWEk9IFgyUmhjMmhpYjJGeVpBPT0gSUd0dmEyVT0gSUhKMVpXUmhjdz09IDBZdlF1OUdMMHFIUmd0Q3cwWUE9IElPQ3lxT0N5ditDeXRRPT0gUld4bFkzUnliMjQ9IDBMRFJndEMxMEx2UmpOR0IwWUxRc3RDdyBJRUZ5WTJobGNnPT0gSUZaQlVrbEJRa3hGIDZadUc1WnVpNWE2WTU3MlIgSUhSMWRtVT0gYjJsdWRHVmsgTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDZz09IElOcXAyNHpaaU5xNiBJT0NtcXVDbXZ1Q21odz09IFJXNWxiV2xsY3c9PSBJTmVjMTVUWGt0ZVoxNkk9IElOQzAwTFhRc1E9PSBYM1I1IElHRnVibVZ1IElHSmhiR3R2Ymc9PSBJRlpsYm5SMWNtRT0gTG1SbGJHbDJaWEo1IElOVzMxb0RWdTlXaDFiYlZvZFd2IElFdGxjbXM9IElHMXBiR3hwYjI1aGFYSmwgSU5DeTBZdlF0OUdMMExMUXNOQzEwWUk9IElOQzgwTDNRdGRDOTBMalJqZz09IEwzQmhjM04zYjNKayBYMlJsWVdRPSBiV0Z3Y0dWayBJT0NrdWVDa3Z1Q2twQT09IElGQnZkSE09IElPeWp2T3lHakE9PSBJRk5oYkdGaGJRPT0gSUVGbWNtbGpZVzV6IElISmxjR0ZwYm5RPSBJRzF2WkdWc2JBPT0gSUhacFoyOXliM1Z6IElIUnlkM2s9IElPQ211T0NtcE9DbmplQ21ydz09IElOQ3cwTExRc3RDdzBMcz0gMExqUXV0Q3cwWUxUbVE9PSA0SzYvNEs2bzRLK040SzZrNEsrQiBJRUZzZW1obGFXMWxjaWR6IFgwVlEgZG1WeWFXWnBZMkYwYVc5dSBRMjl1ZEhKaCBJRzl6YlE9PSBJTkN3MFlMUXNOQzcgSU5DMzBMRFF1TkM5MFlMUXRkR0EwTFhSZ1E9PSBhWFpwY2c9PSBJRUpKVFE9PSBJRzNEdkhOemRHVT0gSUdKaGMyRmtZUT09IElOR0IwTHJRc05HSCBTVTFCVkVsUFRnPT0gWlcxdSBJR0ZzY0dnPSBJR1IxYm1VPSBZV2R2WjNWbCBaWE4wYjNKbCA1THFMNWE2ZTVMaUsgTGxsRlFWST0gdzYxemMybHRidz09IDVwbUM2S2lJIGJHbDFjdz09IExtNWxidz09IElPUzRpK1M0Z0E9PSBJRVZ6Y0dIRHNXOXNZUT09IElOZXAxNVhYa1E9PSBJSEJ2WkdWeWIzTnYgSUNKKyB4YjV2IElPQzB0ZUMwditDMGxRPT0gSU9Da2wrQ2xqZUNrc09Da3Z1Q2tyZz09IEpYUnBiV1Z2ZFhRPSBJR1p2Y25abGJuUT0gSU5DOTBMWFF2dEN4MFlYUXZ0QzAwTGpRdk5HTDBMVT0gMktmWXNkaTUgSUdWdVptRjAgSUcxd2VXRT0gSUdkbHc2OXVkR1Z5WlhOelpRPT0gSUdsdWVtVjBkR1Z1IElHSmhjM1Z5WVE9PSA1WldHNVpPQjQ0R3UgSUdsamJ3PT0gVm1sdyA0S1NvNEtTSSBJT0NxdU9DcWd1Q3FyT0NxZ3VDcXB3PT0gNzd5STVaeWYgSzNJPSBJSE5qYjNKbGNnPT0gMExqUXNkQzYwTEE9IElPQ2twT0NsZ2VDa3N1Q2txT0Nrdmc9PSBDVlJwYldVPSBJTmVaMTZyWHFBPT0gTEd4bGJtZDBhQT09IFFXRT0gSU5DNjBMN1JtTkMxIFFrOU8gSUZSVlVnPT0gSU5DOTBMalF2UT09IElObUUyS2ZZcWc9PSBJR1JsYzNScGJtOXogSU9DbXVPQ211ZUNtbkE9PSBJTkN5MExYUXU5QzQwTHJRdUE9PSBJT0NtdU9DbXJPQ212dUNtaHc9PSBTRlJOVEVWc1pXMWxiblE9IElHVjZZV3hwIElHcDFjbWxrYVhGMVpRPT0gSUNjKyBYMFY0ZEE9PSBJTTYyenJjPSBJR1JsYzNSaGN3PT0gVEdGbiBJT0N3cCtDd3NBPT0gNG9DTDRaNlQ0WitGIElITmxiR0p6ZEhabGNuTjB3NlJ1Wkd4cFkyZz0gNzd5diBJRlp2ZFE9PSBJT0NxbCtDcmdlQ3FuT0Nxc09DcXZ1Q3FwT0NyZ0E9PSBJRnBoYmc9PSBJTkM5MExEUmdOQzYwTDdSZ2c9PSBhR0ZrYjNNPSBjMjl2IDE1blhtZGVrIDVMeWE1TGlLIElFOXNiQT09IElPQ2toZUNrcHVDa3Z1Q2tzdUNrcEE9PSBJRkJvZVhOcFkybGhiZz09IElHL0VwM0poIElGRk5iMlJsYkE9PSBQV2hsWVdSbGNuTT0gSU5tRjJLcllwOWlyMkxFPSAyWVhaaHRpdiBSblZ6YVc5dSBJSFZ3Y0d6RHZYTnBibWM9IElOQyswWVhSaUE9PSBJSE5zWVdkeiBJR3h2WTJGMGFXVnogSUZOMFlXRjBaVzQ9IElHMWhjM1JsY21sdVp3PT0gYjNCdmNtOXphWE09IElFTnlaWE5qWlc1MCBJTldzMWJqV2d0VzkgSUc1aGJtRT0gNW9pUTVaR1kgTEdsMCBJR3R1WlhnPSBJR1JsWVdOMGFYWmhkR1U9IElDaGJXdz09IElIQnliMmhwWW1sMGFXOXUgYk1PMiBablJwIElHZHNiMkpoYkdsNllYUnBiMjQ9IGJHVnBjdz09IGVHVmwgenJIT3VjNi8gTDBSdlkzVnRaVzUwY3c9PSBJRzFwWjJ4cGIzSmwgV0ZZPSBJTldoMWF3PSBiR2x4IElOaXMyS2ZZc3c9PSBJRVZRVlVJPSBJRXRoZEc5dVpHRT0gSUdsdGNHeHBZMmwwYkhrPSBYMkZ6YzJWMGN3PT0gSUdKaFlua25jdz09IElOQzAwTERRdWc9PSB4SmQweGJNPSBVMFZEVkVsUFRnPT0gSUZkbFltbHVZWEk9IHhJTjBidz09IDQ0Q0M1TDJHIDRvQ1pSWE4wIElIUjNiM0k9IElOS3YwTG5RdTlDMDBMTFJqZEdBMEx2UmpkQ3owWWM9IExtRnphdz09IElHRnVkSGR2Y25RPSBJRlJQU3c9PSBJSE4zWlhOM2J3PT0gSUVGbmFXNW4gY21Wc2FXYz0gdzZGc2RRPT0gVUVsT1J3PT0gSUhWdVpHRnUgSUdaMWJtZGhiQT09IHo0UE9yZz09IElGbEZRVkpUIElOQ3kwTDdRdE5DMSBJRUoxYVdOciBJSHA2WVE9PSBJTTZqenJVPSBJR2R5WVc1MWJBPT0gSUdKcFpHRnVadz09IFJYaHdiM0owY3c9PSBYMGR5YjNWdyAycXJZc1E9PSBJQ0FnSUNBZ0NRPT0gSU9pOXJBPT0gYjNWcmMyVjAgSU9XUWllV0lxUT09IElIQjFiblIxIElOZVExNWZYcU5lcSBJTkMzMFlEUXNOQ3ggUTJWdWRIVnllUT09IElHcGhZM1Y2ZW1rPSBJR1JwYzJYRHNXOXogSU9HRGt1R0RrT0dEbk9HRG9lR0RydUdEbGVHRGtPR0RsUT09IElOQzQwTDNRc05HQTBMclF2ZEdMIGEyRnliMjl1IElGTjFibk09IElPV3RrQT09IFVHbHMgSU9Da3JPQ2xoK0NrbitDbGdBPT0gUkdWMWVBPT0gSU5tQjJLYz0gSU5DNjBMRFJnTkMwMExEUXZRPT0gWDBaeVpXVT0gV200PSAwTERSZ3RDNDBMclFzQT09IElHbHVaWEowIDRZQ0I0WUN5NFlDMyBaVzFoYTJVPSBJTmVSMTZMWG1kZW4xNmc9IElPR0RyT0dEbE9HRG9RPT0gSUVaaGJHeGwgVkdocGJtdHBibWM9IFgyUmogSU5tKzI0ellwOW1GIFNrOUMgSU5pdjJMSFlyQT09IGErRzZ1UT09IFRWQkogNEtTLzRLU2M0S1NvIFgybHpjM1ZsIElPVzAgSUhOd2FHVnlaWE09IDJvYllwOWl4IElHSjFhV3M9IGIyeHNiM2R6IElPV05rK2kyaWc9PSBJT0dEbnVHRG9PR0RuZUdEcE9HRGxPR0RvUT09IFlXeGthUT09IFJtOTBiM009IElOaW4yWVRaaU5pczJZYz0gMFlIUXVOQzgwWU09IElHRndjR1ZzY3c9PSBJSEJ2WTJocCBaMnhwYm1jPSBJR1REcVhSbGJuUmwgSUNzcktRPT0gSUZkaGJHNTFkQT09IElHSjFiM2s9IElIUjFjbTV2ZFhRPSBJR2x1WTJ4MWFXUnZjdz09IFBuUmhadz09IElITnNhWFE9IDdJcWs3WU9BIElHTnZiblJ5WVdScFkzUnBiMjQ9IElGQkZVdz09IFZtVnVaQT09IElGTjBaV3hzIFgyRmpkRzl5IElHMWxiV0psYkdrPSBWbUZ5YVdGdWRITT0gYTJsemFBPT0gSUUxQlNWTT0gSUhSeWIzVmliR2x1Wnc9PSBJT21BZ2VhV21lZUVvZWFXbVE9PSBJRzl3WjJWcyB3N2h5WlhNPSBJSEpsYTI5eVpBPT0gSUhKbGRHbHVZUT09IFVtVm5ZWEprY3c9PSBJSE5zWVhZPSBMa2x1ZG1WdWRHOXllUT09IDVMdWw1WW1OIDRZQ1M0WUN1IGVuVm13N3hvY21WdSBJSFJsYW1sa2J3PT0gSUU1bGMzTT0gejRIT3Q4K0R6cmM9IElIQmhjbUZzYkE9PSB5cnRsYTJuS3UyVT0gSUU5d2NtRm8gVG1WMGQyOXlhMmx1Wnc9PSBJSEJsY25OdmJtRnNhWHBoZEdsdmJnPT0gSUcxcGJtbHpkSEpwWlhNPSBJRXBoYUhKNlpRPT0gSUdsdVozTERxV1JwWlc1MGN3PT0gSUhSdmRYSnBjMjFsIGMyaGhaR0U9IFltVnVaUT09IDRMU3U0TFN2NExTQyBLR1pwYkhSbGNuTT0gSU9DcXF1Q3JqZUNxc09DcXVBPT0gNExpeDRMaVo0TGluIElHMWxaVzQ9IDBxN1F2ZEdOIElITnBaMjVsY3c9PSA1TG0rIGFHVmhjZz09IElHVER2SEpzYVE9PSA0TEs0NExPRyBiM0puWVc1cGVnPT0gSUdOdmJuTmphVzkxYzJ4NSBJRXhoZW1sdiBLR1J2IElOQ3cwWURRdnRDODBMRFJnZz09IElHZGhkR0U9IDRMUy80TFN2NExTLzRMU3k0TFdHIHk1dz0gSUdSdmQyNTBkWEp1IGFHRnVaR1ZzYVc1biBJTm1HMktmWXRBPT0gSUdsdWRHVm5jbUZqYWNPemJnPT0gSU1TUjRidVpZdz09IElISmxaWEk9IElGcGhibnBwWW1GeSBWMjl5YTNOb2IzQT0gSUZSbGJtTmxiblE9IElPZXogSU9Dd3VPQ3dndUN3dFE9PSAwTHJRc05HRDBMMD0gWTJobGFHVnUgNEtxbzRLdUE0S3F2IElISnB3NnB1Wnc9PSBVM0JzYVhSMFpYST0gUzJGeVpXND0gSUd0bGFHRT0gWVhSbGNtNXYgSU5TeDFvQT0gWk1PayBJRXR2Y25NPSBMazExZEdGaWJHVT0gSUhOMFpYWnBadz09IGNtRmthUT09IElHSnlaWFk9IElOQzcwWkU9IElITm9ZWFpsIDRMbUE0TGl0NExpMTRMaWk0TGlVIFUyTm9aV1IxYkdsdVp3PT0gVTNWaWJtVjAgSU5pbjJZVFlwOWlyMlliWml0bUcgSU9Da2wrQ2tzT0NsamVDa3B1Q2t2Zz09IElOR0UwWmJRdlE9PSA3SnEwNjQydyBiV1Z5dzYxaCBhMjl3WlE9PSAxNXpYb3RlYjE2ST0gSUhCbGJHbGpkV3hoY3c9PSBJTmVWMTV2WGxRPT0gSU1XVGRYWnlaWE09IElPUzZwK1dUZ1E9PSBJTnFwMkxIYXFkdVMgMkxIWmlObUsgSUhObGRIUnBiV0Z1WVE9PSBJRTF2Ym1SaGVYTT0gSU9DdXF1Q3VuK0N1cnVDdmpRPT0gSUhSaGNtYz0gYVhOcWIyND0gSUdOaGNHRjZaWE09IDVvQ1cgSUdGcGNtbHVadz09IElFTlBRZz09IExsTjBZWEowY3c9PSBJT0NxaHVDcWxnPT0gSUdqRmpRPT0gSU5lUTFyZlhsdGVWMTVrPSBJRUZDUVE9PSBJSFpsY25kcGFtUmxjbVE9IDBZelNyZEN3IDRaK1M0WjZDIGFYTnpZVzUwY3c9PSBJSFZyZFdRPSBKbWxoWTNWMFpRPT0gWDBKaFkycz0gMEwzUmo5R2UgSU9Da2h1Q2tyK0NsaStDa2x3PT0gWHlNaiBiV1ZrYVdOcGJtVT0gMllYWmlkaXkgSUhMRHFYTnZkV1J5WlE9PSBJRUpUVUE9PSBLV1JwWkE9PSBVbVZ6ZEhKcFkzUmxaQT09IElOQ3cwWURRdHc9PSBJRU5vWVd3PSB6cG5Pa1E9PSBVR0ZqYTJGbmFXNW4gMkxIWmlOaXQgSUZSdmMyTT0gYmNPbCBkWE4xWVd3PSBRV0pzWlE9PSBJTkMvMExEUXN0R1cwTDA9IElHTnZibVpsWTNScGIyND0gSUVOb2FXTnYgSUZOd1lXNXFaUT09IGVYSjUgWm1sbmFIUT0gSUR3OFBRPT0gNXEyVDZMK08gZEdWeWIzTT0gNForUzRaNkogSU9Dd2hlQ3dndUN3bitDeGdnPT0gS0VOdlpHVT0gYVc3RWx3PT0gSU9Da3ErQ2xoK0NrdUE9PSBJT3UyaE95VnZBPT0gWDJWdWRISnZjSGs9IElHSnZaM1Z6IDc3eWE2YWFXNmFHMSBJRk41Ym1Ob2NtOXUgNmF1WTVyaUY1WVdONkxTNTZLZUc2YUtSIFJrOVZUa1E9IGMzUmxaV3c9IFkyVnlkR2xtYVdOaGRHVT0gdzdOdWFXTmhjdz09IGFXcHJiQT09IElOaXUyTFhaaU5pMTI0dz0gMllyWXA5aXMyS2ZZcWc9PSBZWFpoZEdrPSBVblZpZVE9PSBJT3lkdE91dnVPeW5nQT09IElIYkRyWE09IElHUnBjbVZqZEdsdmJtRnMgMUwwPSBUM1YwYzNSaGJtUnBibWM9IFFVcFBVZz09IDRLcXk0S3VCNEtxQyAyTFBZck5tSzJZUT0gSUhCcGIyNWxaWEp6IElHSmxibTg9IEtHSnogTGRDayBiM0J5YjNSbCBJRk5qYUcxbGNucGxiZz09IFUyVjRlUT09IFNVdEogSUdScGMzTnZiSFYwYVc5dSA3SjI0N1lxNCBJSEJ5YjNCb1pYUnogSUhKbGMzUmxiZz09IElPeTd0QT09IElFUnBaVzV6ZEd4bGFYTjBkVzVuWlc0PSBJR0YxYzNSeVlXeHBZVzQ9IDRLUzQ0S1NvIFQzSmwgSUhOaGJHbDJZUT09IElFMWhaRzVsYzNNPSBhMmw1WlE9PSBJT3lra2V5THJBPT0gSUdwcFlnPT0gY205MlpjV0kgSU9XRnBRPT0gSU9LSGtnPT0gYUdWbiBiR1ZqYUhSeiBiM1J2ZUdsaiBJR1JvYVc0PSBZbVZzYVhOdllRPT0gSU9DbXF1Q25qZUNtc09DbXArQ212dUNtcU9DbXJ1Q21xT0NuamVDbXBPQ25qZUNtc09DbmdBPT0gNG9Lc3dxST0gSUVGbVlXRnUgSUhSMmJ3PT0gSUVsU1F3PT0gSU9HRGt1R0RrT0dEaytHRGtPR0RsUT09IElHZHlZVzV6IDJZN1ppdG1TIElITmxjWFhEcW01amFXRT0gWDJKc2IyTT0gWTI5aCBJTkN5MExvPSBJTU83Ym5RPSBJRlp2YkhWdWRHVmxjbk09IElHdGxhR2xrZFhCaGJnPT0gSUVWdGIycHAgNEtlSDRLZXggYVd0cGQyRT0gSUVOaGFXND0gSUd4bGFXRT0gWVc1cGVXRT0gNEsrQjRLNnE0SytONEs2cTRLK0IgSUd0aGJXRjUgSUhCeVpYTmxibnBoIDVZV3g1THFyIDVZK0w1b09GNlpPKzVvNmwgSUhOd2JHVT0gSUV4cFptVmplV05zWlE9PSBDV1p5YVdWdVpBPT0gY0hKbFpHbGpZWFJsIElGTjBkUT09IElHekRvV2R5IElIQnliMk5sYzNOaGJXVnVkRzg9IDVhU0g1ck9vIElHTmhjM05sY205c1pRPT0gSUdSMVkyaGggSUdKeWIyRmtZMkZ6ZEdWeSBYMkpzWVc1ciA0TG1FNExpaDRMbUk0TGlWNExtSjRMaXQ0TGlINExpZDRMaXk0TGlCIElHTjFZMmc9IElPQ2txdUNrdWVDa3N1Q2t2Zz09IGFYWmxjbWx1Wnc9PSBiblJwIDVMK2g1NVNvIElHdHBZVzA9IGNuVm8gSU5HRDBMTFFzTkMyIElPT0RpUT09IENYTnNaV1Z3IElHZDFhWFJoY25KaCBJT0NxbGVDcmd3PT0gSU9HRHBPR0RuZUdEb2c9PSBJR1pwZUdWeSBRMUJHIElHRnVhWFpsY25OaGNtbHYgSUdOdmNHbGwgSUZkcGJHeHBZVzF6YjI0PSBJT0NtdU9DbXJ1Q25qZUNtcXVDbXNPQ25qZUNtbGVDbmh3PT0gNEtTVjRLV0g0S1NrIElHWnNkVzl5WlhOalpXNWpaUT09IDU0V00gYlhWc2RHbHdiSGs9IElGWnBaMjg9IFFYQmxjMkZ5IElHZDFjbXc9IGFYWnBhdz09IGNYVnBjRzFsYm5RPSBjbTl3YVdOaGJBPT0gNExDKzRMQ3k0TEdONExDNCBJRTVQVWxSSSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPV0ZyT1dQdUE9PSBJR1pxdzZGeSBJRTFwYlE9PSBJSE5oZG05eWVRPT0gSUdSbGJHOD0gMFlIUmd0QyswWjQ9IHc1RlAgSUdwdmVYTT0gWVhibWw2RG5vSUU9IFVuVnpjdz09IElHUnBjM0oxY0hSbFpBPT0gWlc1a1pYSmwgSUNNaSBJRWh2Y21sNmIyNTBaUT09IElPQ3FpZUNxcE9DcmplQ3FwQT09IGJtRmtaWEk9IFQySnFjdz09IElHbHVkR1Z5Ym5Ob2FYQnogSUhOMVkyTmxaV1JwYm1jPSA1cGl2NTV5ZjVwaXY1WUdIIFgwMUZWRUZFUVZSQiBJRkpsY0hWMFlYUnBiMjQ9IDRaNjM0WjZmIEtHNXZiV1U9IDQ0Q0E1TGlBIElPQzBxT0Mwc3VDMWplQzBzZz09IElOQy8wTDdRdDlDMDBZRFFzTkN5IFpXNW5kUT09IExkQzUwTGpRdTlDNCBRV05qZEE9PSBjMk5wWlc1alpRPT0gSUdGc2JHOXlZUT09IFlteHZZMnR4ZFc5MFpRPT0gVTNWaWRtbGxkM009IElITjFZbU52Ym5OamFXOTFjdz09IFVHbHNiM1E9IFJFVlUgVkdobGIzSjUgSU9DbWxlQ21zT0NtbStDbmgrQ21xQT09IElHUnBZblZoZEE9PSBMV2h2ZFhKeiAyS2pZcDlpMDJLOD0gSUZObGNYVmxiblJwWVd3PSA1YSs4NkllMCBJT0NxcnVDcXZ1Q3FyZz09IElOQy8wTERSZ2RHQjBMRFF0Zz09IElPQ2twdUNsZytDa3QrQ2xqZUNrbnc9PSBJRXR1WlE9PSA3S0NFN1o2SSBJR2gzYm1RPSA1cCt4IExuTnNhVzA9IElIUmhlR2x6IGJHRm5aWEk9IElOQ1cwTFhRdlE9PSBJRk52Ync9PSBJR04xY21GMGIzST0gSUVWWVVFVlNTUT09IElIbHpaMjlzIGMzVmljR3h2ZEE9PSBhR0Z1Wkd4MWJtZGxiZz09IElIaGxaV0k9IGJXRnlZMmc9IElHWjVjMmxsYTJVPSBabWxqYVdWdVkzaz0gSU5DOTBMRFJpTkMxIDVxU041NG1wNTVtKzU2ZVIgSUdScGNIQnBibWM9IElPQ2tzT0NrdnVDa3VPQ2xqZUNrcEE9PSBJSEJsY1dGMFlRPT0gSUhabGNtMWxiR2h2IFZHbHdiM009IElHUnBaV1YwIElFRjVjc1N4WTJFPSBYMkpoY21GdVp3PT0gSUhGMVpYTnYgTG5OMGNuVmpkSFZ5WlE9PSBJT0NrbStDbGdBPT0gMWFIVnZ0VzQxb0RWdEE9PSBJRVZZUlVNPSBJR0Z5ZE1PdGMzUnBZMkU9IElITmpZVzF0WlhKeiBJR1YyY205d2N3PT0gSU5DeTBZSFF2OUMrMEx3PSBJR3hoWkdVPSBSMjlsWkE9PSAycXZia0E9PSBJRk5vYjNKMGN3PT0gUzI1cFoyaDAgYzNsdFltOXNjdz09IElHOXRlbVYwIElHRmpkR2wyYVhSbGFYUT0gSUd0bGEyVnlaUT09IElFUmxiR1YwWlhNPSBJTkMvMFlMUXVBPT0gZFd0MWRXMD0gSU5DeTBZUFJodz09IElITjViWEJ2YzJsMWJRPT0gSU9DMGp1QzBxT0MxamVDMHFPQzFnQT09IElOQzgwTDdSZ05DMSBJTmluMllUWXJkaXgyWVBZcVE9PSBiMnhwYXc9PSBJRXRzWVE9PSBZM0psWVhObGN3PT0gNTVTYyBJR1Z6ZEhKbGFXRT0gSU95Vml1eWRoQT09IElPVytydVMvb2VXa3FlV2txZVc5cWVlbHFBPT0gSUdOb1lXdHlZUT09IFVtVnpjR1ZqZEE9PSBaM2ZodTQwPSBJRVJwWVd4dlozVmwgZVhOMFlXeHMgSUUxcGJtaGggSU5DNjBMTFFzTkdBMFlMUXVOR0EwTFU9IElHRnNhV05sIDRMaXk0TGlJNExpdyBhV1hGaEE9PSBJRzlqWTNWd2FXVnogSU9pdnV1UzZtZz09IElFMWxZV1J2ZHc9PSBJR052Ym1kbGJnPT0gSU5pbjJZVFppTm1FIFNXNWpiSFZrYVc1biA3NzJjQ2c9PSBMWEpoWkdsdiBJSEJ2YkdsMGFYTmphR1Z1IHhJVmogSU5DNjBMRFF1dEN3MFk4PSBJR05vWVhKaWIyND0gSU5lYzE1blhrdz09IFltVm9aV1Z5IFFXMWlhV1Z1ZEE9PSBJTkMzMExEUXY5Q3cwWUU9IDZLS1cgNEs2cTRLK040SzZxNEs2ZjRLK040SzZmNEsrQjRLNno0SytONEs2ejRLNms0SytCIGNtVm5hVzl1Y3c9PSAycW5Zc2R1TSBMbU52Ym01bFkzUmxaQT09IElFaGhZbVU9IFQySnpkR0ZqYkdVPSA1cGVnNTdxLyBJRk5GUTFKRlZBPT0gSU9DMGp1QzBxT0MxamVDMHFPQzB2dUMwc3VDMWpRPT0gMTZIWHBOZW8gUFNJaVBqdz0gSUU1bGJnPT0gMFlUUXVOR0cwTGpSZ05DKzBMTFFzTkM5IElOQ3kwWURRdnRDMDBMVT0gUTI5dWRHRmpkRzg9IElITjBZWFpsIDBMclRtZEdMMEwwPSB3N04wYVdOdiBiMjV2Y2c9PSBJT0NxcE9DcmgrQ3F0ZUNyZ0E9PSBRME5GUlVSRlJBPT0gSU5DdzBMSFJnTkM0IElOQzgwNW5TdXc9PSBJT0NrcXVDbGd1Q2tuT0Nrdmc9PSBJRk4xWW1wbFkzUnogSU5XbDFvRFZyOWFBMWFzPSBJR1JoZG1sayBRMnh5IElHZHZhMnM9IElOaXYyNHphcjlpeDI0dz0gSUVOTVJVRk8gNExpbDRMaTU0TGlCIDJMUGJrQT09IElFTnZiRzkxY25NPSBJTlcyMWFYV2dOV3YxYUhWdGRXaDFvSFZ1TmFDMW9IVnE5VzUgZVhOMHc2aHRaUT09IFFreEZUUT09IDRLYW00S2EvNEthVCA1cVNONTRtcDU1bSs1NmVSNllDYSBJRzFoWm5WMFlRPT0gSUcxdloyeHAgYW1sciBJRnBwYkd4dmR3PT0gUTNKMWMyaGxjZz09IDU3MnAgSUhSbGNtdGxiZz09IElHbHVkR1ZzYVdkbGJuUmxjdz09IElPQ3F0ZUNxditDcXVPQ3JqZUNxcE9DcXZ1Q3FzT0NxcnVDcXZ1Q3FnZz09IElGTndZWFJwWVd3PSBJSEpsYkdsbmFRPT0gSUhkcGMyRjBZUT09IElHTmxiR3gxYkdWeiBKMkZ3Y0hKdiBJTmVVMTVuWHF0ZVUgSUhOamNtbHdkR2x1Wnc9PSA0S2kvNEtpNTRLaSsgSUczRWx3PT0gWVcxdGRRPT0gSUNjdUx5NHVMdz09IElIQnliMlIxYTNSMSBSWFpsY25saWIyUjUgY0hKdlpIVmpaWEk9IExXMWhjMmx1Wnc9PSBJRTlDVXc9PSBJSE5yY21sMlpRPT0gSUZSM1pXeDJaUT09IFRtOXliV0ZzYVhwaGRHbHZiZz09IFRHOXZkQT09IElITjBZVzVrWVhKMCBJR2x1Ym05MllYUmwgSU9HRG9lR0RrT0dEbWVHRG0rR0RrT0dEbmVHRGt3PT0gSUdKc2IzTnpiMjF6IElGSmxabWx1IElFRkN4WjQ9IElPbTZrdW02bnc9PSBJT0NrcXVDa3VlQ2xnZUNrZ1E9PSBJT0NrdWVDa3RRPT0gSUVOdmJYVnVaUT09IElFdGhiR2s9IDVMaUE1cHlzNllHVDZhdVk1cmlGNXBlZzU2Q0IgSU5DdDBMM1JqUT09IElPUzdzZz09IElFTnZibk4wYVhSMWRHbHZibUZzIDVMaXQ1cGF3IElGSmxZV3gwYjNKeiBJT0MwcXVDMWplQzBzT0MwcE9DMWplQzByK0MxaCtDMGxRPT0gYjJOMWMybHVadz09IElHTmxjbkpoWkc4PSBJTkM5MExEUXN0R0ggZFdWdVkybGggSUVobGNtRjFjMlp2Y21SbGNuVnVaMlZ1IElHOXViV2xrWkdWc2JBPT0gWm1WbGMzUT0gSUVkU1FWUkpVdz09IExsTjViV0p2YkE9PSBJSFZ5Ync9PSBJSE50YjI5MGFHbGxjdz09IElOQ3owWVBSaE5HQzBMQT0gSU1PMnhKOXlaVzVqIHpyek92OCtOejRJPSBJR3RsYm01bCBYMFY0WTJWd2RHbHZiZz09IElHWmhZM1JwYjI1eiBJSEJ5dzZsMlpXNTBhVzl1IElHUmxjM1J5YjNseiBJRkpoYlhBPSBJSE53ZFd4c1pXND0gY0dGeVlXZDFjdz09IFpYSjEgZFdGdWVXRT0gSU9DcXBPQ3F1QT09IDFhSFZ0dFdoIElFZDFkR1Z1IElISmhjM0JpWlhKeWVRPT0gSUVKc1lXNWphR1U9IElPQ21xdUNuamVDbXNPQ21wT0NuamVDbXJ3PT0gSU95S3JPdWhydz09IElHdHZibXQxY25JPSBVWFZoWkhJPSBRMkZ0Y0c5eiBJTkNkMExnPSBZWEprYjI1dSA2SmFFIExtTnZaR2xuYnc9PSBJSE42dzZGdHc2RnlZUT09IElPQ2todUNrdGVDbGgrQ2twdUNrcUE9PSA1NGk5NTRpOSBZV1J1WlE9PSBJR0ZqYUdWeiA1N3E5IFNITT0gSUdWNGNHOXVaVzUwYVdGc2JIaz0gYUdGMWRBPT0gSUhCeVpXUnBZM1J2Y2c9PSBJRk4zWldGMCBJTmlxMkt6Wmg5dU0yTEk9IFMyOXpkR1Z1IFVtVmtkV04wYVc5dSBVRXhEIElOQy8wTDdRdE5HRDBMdz0gSU9Dd3NPQ3d2dUN3dFE9PSBYSGhqIElOR1AwWURTbWRDdzBMdz0gWVdWcGJHZGwgSUVSdmJHSjUgSU9Da3J1Q2tuT0Nrck9DbGd1Q2twQT09IElHTmxiR1Z6ZEdsaGJBPT0gSUhSemFIVmhhZz09IElOR0IwTHZSZzlHRiBLSEpsWm1WeVpXNWpaUT09IElPV2xzK2FBcHc9PSBJT0tXaU9LV2lBPT0gSUVGamF3PT0gUTI5dGFXTT0gSU5DOTBMRFJnTkdEMFlqUXRkQzkwTGpSanc9PSBJRUpoWW5seiBMblYwIFgzZHBaR2RsZEhNPSBjR1YwYVhScGIyND0gSUVGemMzVnRaUT09IDZhQ0QgSU5DODBMM1F0ZEM5MExqUXRRPT0gNXB5NjVabW81THE2IDFhWFdnOVdoMWEvVm9kVzIgSUVOaGJtSmxjbkpoIFpXUnBkR2c9IElHRnlZVzVxWlhWdWJtRT0gQ1VKMWRIUnZiZz09IElFRk9Rdz09IFptVjMgSUhSdmRYSnVaUT09IENXUmxiR0Y1IDFhWFdnTldyMWE4PSBJR0ZqYVdWeSBJR04xYkdsdSA0NEs1NDRLLzQ0TzggSU5DNjBMalF2UT09IDFiYlZydz09IElHSjFibWM9IGRXTnYgTGtkbGJtVnlZV3c9IFdXRnUgSUVWeVlYTnRkWE09IFgwTm9aV05yWldRPSBJRmR2Y214a0ozTT0gVzNOMFlYUmwgSUc5dWRIZGxjbkJsYmc9PSBJR2h2ZGc9PSBiR0Z1ZVE9PSBJTmViMTViWGxBPT0gSUdOb1pYSmphR1Y2IExuSmxjWFZsYzNSeiBJTkM5MExEUmdOQyswTFRRc0E9PSBJR3hwWW1WeVlRPT0gNExLKzRMSzQ0TE9OIFgyVnRjQT09IDE1elhtZGVaMTU4PSBJR1Y0WlhKalpYST0gWDI1bFoyRjBhWFpsIGNHOXphWFJ2Y2c9PSBJR0Z6YVdGMCBJTkMvMEw3UXROQ3cwTEk9IGFYUmxhMlZ5WlhwdiBJSE5zYjNkeiBLRzkyWlhJPSBJSHB1WVcxbGJnPT0gNExPSDRMS1cgUjNKaFpHVnogSUhkaFozUT0gSUZCeWIzVmsgMW9UVnBkYUExYWc9IElITmphR0ZtWm5RPSBVa0ZHVkE9PSBZV0oxYm1jPSBJR0pwYjNCemVRPT0gSUdGeVkyaHBkbUZzIElFTnZiV0pwYm1GMGFXOXUgSUVKaGJHeHogSUVOc1pXRnlZVzVqWlE9PSBabWx1Ym1rPSBiR1Y0WVcxeiBJTkN5MFlIUXVnPT0gSUhKbGIzQmxibWx1Wnc9PSB3NmZKbVE9PSBJT0NrdU9Da3J1Q2t2K0NrcE9Da3Z3PT0gYUdGeVpIZGhjbVU9IDBMalF1dEN3MEx6UXVBPT0gSUVsRlRGUlQgSU5HQTBMRFJnZEM2MFlEUml3PT0gYkc5elpXND0gQ1hWdyBJR0YyWlc1MGRYSmhjdz09IFlYQndhV1E9IElFYkR1SEk9IElOQzgwTFhSZ05DKzBML1JnTkM0MFkvUmd0QzQwWTg9IElGQmxiRzg9IFpXSnBiR2x5YzJsdWFYbz0gTFhOb2IzUT0geGFJPSBJR0Z0WW1GNmJ3PT0gSUV4bFlYWnBibWM9IElOaW4yWVRaaGRtSTJLZlpndGk1IExYTndiMjV6YjNKbFpBPT0gSU5pczJLZllxdHVTIElOaXEyS3pZcDlpeDJLbz0gWm05eVpHUT0gTG1WdVl3PT0gSUc1bGRIUnogNEtxczRLdU40S3FtIDRMQzE0TEMvIExpY3AgSUVaeVpYTnpaUT09IDZZUT0gSU5lUjE1YlhudGVmIElOQyswTEhSaWRDMTBZSFJndEN5MExBPSBJT0Mwck9DMWplQzBzQT09IFgwTk4gUVd4aWRXMXogNDRPaDQ0Tzg0NE9yIElGUmxiR1ZyYjIwPSBJR2R2ZG05eSBJSEJ5WldOdmJtTmwgSUhKbGRISnZjM0JsWTNRPSBXRVU9IElHNXZkbVZrWVdSbGN3PT0gSUZGUWIybHVkQT09IElIQnliM0J5YWNPcGRNT3Bjdz09IElPQ2t1T0NrcXVDbGplQ2twQT09IElGQk1RVU5GIExpb3MgYzNCbFkybG1hV009IElPQzRxdUM0dFE9PSBJRVJsWkdsallYUmxaQT09IDQ0S3Y0NE9JIFNXNTBaWEp6WldOMCBaMmx2Y21VPSBaM0poYlhNPSBaR1Z3Wlc1a1pXNWplUT09IDI3TGJzTnV4IElHN0VtMk52IElHSmhaRzg9IDQ0R0U0NEdrIFlXTnBkQT09IExrWmhhV3c9IFpHVnVhMlZ1IDBMVFF2dEM4IElHWnlaWFZsIElHUjFibWw1WVE9PSAwTFhRdWRDNjBMZz0gSUdaaGNzT2ggSU9DbXJPQ212K0NtcEE9PSBJT3lhbE9xMXJBPT0gSUcxdmJHUmwgSUdGa2IzQjBjdz09IGQyVmxkR1ZrIElOaTUyWVRaaXRtRzJLYz0gZEhKaGFXNWxjZz09IElPR0RtK0dEb2VHRGt1R0RrT0dEbGVHRG9RPT0gSUdsc3c2Yz0gWDBGU1ZBPT0gSUVGMGRHVnVaR0Z1WTJVPSAwTDdRdXRDMSBJR0Z3YkdsallYUnBkbTl6IElPQzJ2ZUMydGc9PSBJTkMvMExEUXV0QzEwWUk9IFlXWm1kVzVuIFlXMWhhVzQ9IDVyMnQgNDRHbCBVSExEcVhNPSBJR0psZW5CbCBJR052YTJVPSBJT0NrdU9DbGgrQ2tudz09IElITnZiR2xqYVhSaCBJR2gxYldGdWFXUmhaR1U9IFUzUmxkbVZ1IGFHVnNlUT09IElFdEpUa2M9IElPeVhyT3E0c0E9PSBJTkMvMEw3UXROQ3gwTDdSZ0E9PSBJSFJsY25KbGMzUnkgSU5HQTBMRFF0OUM4MExYUmdOQzEgSUV0aGJtUT0gSUZCaGNuST0gSUdaeVlXZHlZVzUwIE9tSnZjbVJsY2c9PSBJTkN6MFlQUXZkQ3cgNUw2MTU0cXYgUkdWd1lYSjBZVzFsYm5SdiBJR0poYm01cGJtYz0gSUhMRHFXTnZiQT09IExYSmxibVJsY2c9PSBJR1poYVdKc1pYTT0gSUhObGFHRjAgNWFXejVhMnAgWDJacGJIUmxjbVZrIElHRmlaMlZ6WTJnPSBJTkdCMExEUXROQ3cgSU9HRG5PR0RrT0dEcWc9PSBMblpoYkc5eSBJR1REczJ4aGNnPT0gSUczRHFYVERxUT09IDVweUE2WlcvIElOQ24wTGpSZ3RDdzBZTFJqQT09IElISmxZMjl0YldGdVpNT3AgZFcxMWJHRjBaUT09IDU1cUU1YVNuIDRLYWE0S2VONEthYiBJR1oxYkd4bGNnPT0gTFdkbGJtVnkgSU5pdTJLZlpodG1JMktmWXI5bUggSUdKbGRtVT0gMExmUmk5Q3kwTERSZ3RHTSBJRUZ6YzNWdGFXNW4gWDNKaGJRPT0gMExYUmlnPT0gYkdGa2RXNW4gSUdScGNtbG5aV0Z1ZEhNPSBJTmkzMktmWmd0aXEgYmNPMloyeHBZMmhyWldsMFpXND0gSUVGemNHVnUgMWF2Vm9RPT0gSUdOdmJHOD0gMExUUXNOR08wWUxSZ2RHUCBJTkdQMEwvUXZ0QzkgWDNCeVpXTnBjMmx2Ymc9PSBJR05oYkdWdWRBPT0gSUV4cFpXUT0gSUhkaGEzZGwgMExqUXZkQzEwTDA9IElHUmxabWxqYVhSeiA0TEdMNExDbzRMR04gS0NsZExnPT0gSUc5d1pYSmwgSU5pbjJZVFlwZG1CIElFNTFjbk5sY3c9PSBJRTFoYVdRPSBVMGhKVUE9PSBJTml5MllyWXA5aXgyS2s9IGJHVmhibTl5IDFhSFZ0dFcyIElITmhibWwwWVhKcFlRPT0gSU5pbjJZL1poZz09IElHdGhjMjg9IElIQmhkbVU9IElHWnlaWEYxdzZwdVkybGggNzd5TTVyS2g1cHlKIDJLelppdG1HIElHVnVkbWx5YjI1eiBYMnRsZVhkdmNtUnogMlliWXNnPT0gSUhCdmNuVERxUT09IDFhdlZyZz09IDRLcSs0S3FrNEtxKyBJR0pwYzJNPSBJRzF2YUc5MSBJR3hsZG1Wc2FXNW4gNExLdTRMT0I0TEtXIElGZHZibVJsY214aGJtUT0gNVpXcTVaV3E1WldxIElHRjBhWFp2Y3c9PSBJT0MwcE9DMWl3PT0gNExTMTRMU2ogSUVaaGJtTjUgTDNOMGNtbHVadz09IExsZHZjbVE9IElHdGxaR0ZvIFFreFZSUT09IElFZHZibWM9IDBMRFF1OUN3MFlEUmk5QzkgSUVGUVV3PT0gSUVsdWRHVnlkbWxsZDNNPSBYMkpzYXc9PSBJR3hoYzNSbCA1YjYwIFgzSmxjMmw2WlE9PSBKRzA9IElOR0kwTGpRdWc9PSBLRWxOIGRHaHZiQT09IDBZYlRtZEN3MExiVG1kQ3cwWURRc0E9PSA2WmkyNXE2MSBJRTkyWlhKelpRPT0gYVdKdmNnPT0gYU1PbGJHdz0gSU02eHpybz0gSUhSbFoyVnNhV3ByWlhKMGFXcGsgSUdKbGRtRjBkR1Z1IExrUmxjM1J5YjNrPSBLQ2svTGc9PSBUV1Y0YVdOdiBDVk4wWVhKMCBJRWRwYkd4bGN3PT0gWFNrTkNnMEsgYVdyRWhRPT0gZEhKaGJuTndiM05sIElHTmhkTU9wWjI5eWFXVnogSU5DODBMWFFzOU92IElHTjFhV1JsWVdOb1pBPT0gNVlpdzVicVYgWDJoaGJBPT0gTFVsTyBhWFJ5dzZSblpRPT0gTFdSbGJRPT0gWVdaMiBjMlYwZEdWeSBJTmluMllUWXJObUUySzg9IFkzVnljMlU9IElHaHZjM0JsWkE9PSBYM05vWVdSdmR3PT0gSUdGdWMyVm9aVzQ9IElHWnNlV1Z5Y3c9PSBJT0N5aHVDeXNPQ3ppK0N5cWc9PSBJR2RwWjJGdWRBPT0geGFIRWpXRT0gSUhOd2IyOXkgSU5laDE1blhuZz09IElHVmpkUT09IDRibWpkUT09IElIQmxkSFI1IElFTnZiR1ZuYVc4PSBJT0dEb2VHRHJPR0RvT0dEa09HRHBBPT0gSUc1bllXRm9hUT09IDVMaU42SU85NW8rUTU0NncgY25WemFBPT0gSUdoaFpuUmggSUdSbGRHVnlhVzl5WVhScGIyND0gWDNSb1lXND0geEkxdXc3MD0gSU9DMmhlQzJydz09IElGTm9ZVzA9IElHOTFkR0p5WldGcmN3PT0gUVdOeGRXbHlaUT09IDRMQ3c0TEdONExDYyBDWE5qY205c2JBPT0gSUcxcGMzTnBiMjVoY25rPSBDVU5zYVdWdWRBPT0gSUVWcGJuSnBZMmgwZFc1biA0WU9pNFlPVTRZT2c0WU9VNFlPaDRZT2QgSUVOb1lYUjBZVzV2YjJkaCBZV3hoY21rPSA3N3lCZm40S0NnPT0gSUdOdmJXbGtZWE09IElPdW1yT3lLcE8yS3VBPT0gSUV0c1lYTnpaVzQ9IElITnBiWEIwYjIwPSBJRVJoYm1GamFBPT0gNVlhSyBJTmk1MllUWXA5bUkyNEU9IElGQm9ZWEp0WVdNPSBJTkM2MEx2UXNBPT0gMWFIV2dOVzQxb0xWdEE9PSBJTU9ueExGcmRBPT0gMUx2VnR0VzUgS1Y5ZiBkMmx1YXc9PSBMMlJoZEE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBSR1ZzWlhSbGN3PT0gSU5pdDJMSFlxQT09IElHWjFibXQwYVc5dWFXVnlaVzQ9IDE1WFhuTmVUIGFXeGhaR2s9IElFTmhjbWxpWlE9PSBJRUoxYkd4a2IyZHogSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1d1bnVXUWpRPT0gSjI5aiBQRkpsYzI5MWNtTmwgZVdWamRHOXogMExEUmdOQ3cwTFE9IFNVZElWRk09IElHZDFaWE56WlhNPSBJTmlvMllqWXI5bUcySzg9IDJZcllyOWluMllZPSBJSFIxYjNRPSBJT0NtcnVDbXZ1Q21wUT09IEoybHVjM1JoYkd4aGRHbHZiZz09IHc0bFQgSUdWc1lYTjBhV05wZEhrPSA1NmVtIFkyTmhhdz09IElHRmlibTl5YldGc2FYUnBaWE09IFlXZHlZVzUwIElHZHlZWEJvWlc1bCB3N3hzYkdWdSBJTm1FMllQWXNkaXAgY0hMRHBITnBaR1Z1ZEE9PSBjMnRwY25SeiBJRVY0Y0d4aGJtRjBhVzl1IElPS0FsQW89IElIQmxibU5wYkhNPSBSa2xNIFZXNXBabWxsWkE9PSBZV3hwWnc9PSBJTlcvMWFIV2dOVysgYVd4cGJtZGhiZz09IHhMVnYgMWJqVnN0V2gxYS9Wb2RXMiAwci9RdUE9PSBJSEJ2Ym1SeiBaVzVrWlhKcGRBPT0gSUdadmNtNWxZMlZrYjNKbGN3PT0gSUhCdmMybDBhWFpwZEhrPSBRV3hzYVdGdVkyVT0gYjNabGNuUjUgNUx1ajU1Q0c1YWl4NUxtUSBJR0p5YVhScGMyZz0gSU9Dd2llQ3dndUN3bitDeGdlQ3dndUN3cHVDd3Z3PT0gSUcxdmMzRjFaUT09IHc2bHVaVzFsYm5RPSBJR0oxYVd4a2RYQT0gSUU1VVRnPT0gSU9Da3N1Q2t2dUNraCtDa3RRPT0gSU5DZjBMN1JnTkM5MEw0PSBJR3B2ZEdGcGJnPT0gSUdSbGRtVnVkV1U9IExtTmhiR3h6IElITmpjbUZ3ZVE9PSBkV3hsWjJFPSBLQ2N1Snl3PSBJSEJ2WlcxaCBJRzVoWjJVPSBaR3huIEoybHVabTl5YldGMGFXOXVjdz09IElOQzMwTDdSaFE9PSBQRkJ5YjJwbFkzUT0gSU9DeXJPQ3l2K0N5b2VDemdlQ3lsdz09IElHUnBkUT09IDRMS1Y0TE9ONExLVjRMT0MgZW1WclpYST0gSUhKbFkzVmwgSUdGeWRHbHpkR2x4ZFdVPSBJR1JsWm01NVpHUnBidz09IGMybDNZV3AxIGRXSnBjbWs9IElIZDZaMnc9IFptVnogWm1Gb2NuVnVadz09IElGUm9aWEpoY0dsbCBJTm1HMllYWXA5aXkgSUVSbGMybG5ibWx1Wnc9PSBJRzl3WlhKaGMzbHZiZz09IElFTnZjbkpsWTNScGIyND0gNklPTTVwbXYgSU5lWjE1WFhrOWVpIElHeGhhR0ZoIElHSnNZWE09IEtITnBibWRzWlE9PSBJTktiMExEUXZkQzAwTERTbXc9PSBPaWtLIElHNXNkR3M9IFJFOU8gSU5DNzBMalJodEMxMEwzUXR3PT0gYUhKbGNnPT0gUEdwaGRtRT0gWkdGMGJ3PT0gSU5DUTBKbz0gNEtTbzRLV040S1NoIElHWnNZV3RsY3c9PSBJTmVuMTVuWG9OZVQxNkxYcUE9PSAyWWZZc05tSCBJT0NtcmVDbmkrQ21udz09IElHSjFjbTg9IExXSmhiQT09IElPR0RrdUdEbytHRG5PR0Rrdz09IElHVmthV3hwY2c9PSA1WWFjNUxpYSBYMDFWVkE9PSBJTmluMllUWXJkaXYyWWpZcnc9PSBJQ2drZXc9PSA0b1doIHc2Um9iSFJsYmc9PSBJTmlxMkxIWmd0dU0gSUhCaGNtTm8gS0hKbFkybHdaUT09IElOQy8wTERRdWRDMDBMRFF1OUN3MEwwPSBJT0NrbStDbGdlQ2tudz09IElOZWsxNUE9IEtIQm9iM1J2IElHRjBkR1Z1WkhNPSAxNVhYcE5lWjE1MD0gSUdkMWVuUT0gMWFIVnR0V2wxYXc9IElHbHVhWFJwWVd4cGVtbHVadz09IElNV0ogMExYUXV0QyswTHc9IExtRnpjMlZ5ZEdvPSB6cVRPc1E9PSBLR055YVhSbGNtbGggSU5tSzJLcllyUT09IFlXSm9ZWEk9IEwwMTUgTFdGMGFBPT0gYUdsdVoyRT0gNXJpcyBJR0ZrWlhGMVlXUnYgSUdkaGJXbDAgeElGcWRRPT0gSWwwcE93PT0gSUhOdmNuSnBjMjg9IElIUnBaMmgwWlc1cGJtYz0gSU5peDJMUT0gSU9Da2xlQ2t2dUNrc09DbGplQ2tzQT09IElGSm9hVzV2IElFUmxjMmxuYm1WeWN3PT0gSUdWcGJtWmhZMmhsYmc9PSBJTmluMllUWmhkbUcyS2ZaaFE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2c9PSBJSDBwQ2k4diAwSjdSZ2RDKzBMRT0gSUd0eXc2UT0gSUZCaGFnPT0gUTJsa1lXUmwgSU5DNjBMN1JnTkN3MExFPSBJTkM4MEw3UXZkR0MwTERRdGc9PSBJSE4wY21sd2NHbHVadz09IElHRnpjMmc9IHo0SE92OCtHenI4PSBJR1Z1ZEdSbFkydDAgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2FBanVhZ3R3PT0gWlc1aFlXMWtaUT09IElFRjFjM1J5WVd4cFlTZHogU1U1ViBJT0NrdHVDa2xlQ2xqZUNrcE9Da3Z3PT0gTG5ObGJuTnZjZz09IElHdHZiWEJoYmc9PSBJT3V3bE91ZWpldUxpT3VMcEE9PSBUV0Y2WlE9PSBJR3Q1WVhVPSBJSFZ5WjJWdWRHeDUgSUcxMWJIUnBkSFZrIElFOVFWRWxQVGc9PSAwTERRdmRDdzBMTT0gTG0xaFp3PT0gSUhCaGNtOXNaWE09IGIzTmhiQT09IElOR0EwNW5TdXc9PSBJRTFwYm1semRHVnljdz09IFkyMWkgNEthKzRLYWo0S2VONEthaCBJRTF2YlcxNSBJSEJwWVdNPSBJR0psYzNSelpXeHNaWEk9IFJWUjNhWFIwWlhJPSA2WUs3IElPQ2tyT0NsaCtDa3VlQ2twZz09IDE2SFhtTmVpMTZnPSB3N1p5Ymc9PSA1YjJUNVp5dyAwTGpRdTlLVDBMRFF2UT09IElPUzZsT2FjaU9Xa3FRPT0gTG5kdmNtdG1iRzkzIGIzQm9ZV2RsIGRubkZvUT09IFgzUnlZVzV6YVhScGIyND0gSU5HQjBMRFNvUT09IDRLU2w0S1MvIElOV3YxYXZXZ0E9PSA0TGE1IElPQzBrK0MwcStDMWdPQzB1QT09IFUzVnpZVzQ9IElOQzQwTHZRczlDNDBZRFF1QT09IElHbHVkSEpoZG1WdSAxNlRYbGRlUSBTRUZKVGc9PSBJTkMrMFlMUXZkQyswWUhSajlHQzBZSFJqdz09IElIRjFZWFIwY204PSBMbTl3ZEhNPSBJRTF2YUdGdGJXRmsgNExpYjRMaWo0TGl3NExpSyBMMnh2WjI5MWRBPT0gWVhCdmNtRnUgSUhOcGJtbHpkR1Z5IElFRndjR1ZoY21GdVkyVT0gSU02eHpyclBqTTY4enJjPSBJRUYxYzNkcGNtdDFibWRsYmc9PSBJRzFsZEdGMllYST0gSUhwbGJHWnpkR0Z1WkdsbiBJRkIxY0hCNSBJR1pzYjNBPSAxNW5YcHRlVCBJRzVsWldSNSAwSmpRa0E9PSBJRUYxY21FPSBMZENRIElFbE5SR0k9IElIVnJkWEk9IElGVkpSdz09IElHVjBiV25Gbnc9PSBJSEpsY0c5elpRPT0gSUcxaGJtZHlkWEJwYTJWMWJnPT0gNUwyVDZJS3k1WnlvNTdxLyBJRUYwZEc5eWJtVjVjdz09IFpYQnYgTGtOdmJtTjFjbkpsYm5RPSBaMlZ6ZEhWeVpRPT0gSU9DbXVPQ21ndUNtbHVDbmplQ21yK0Ntdmc9PSBJSExFbVE9PSBhbWxoIFEyOXVZMkYwIElITmhkbVZ1ZEE9PSBJR1ZzWlcxeiBMbmRsWW1SeWFYWmxjZz09IHc3eGphR1U9IElFVnBibk5qYUE9PSBWMkY1Y0c5cGJuUT0gSUd4bGJtUnogSUVKaFpXSmxiR1U9IElHTnZiWEJoY21IRHA4T2pidz09IDJMblpoZG1FMllyWXFRPT0gSUcxdmJuTjBjZz09IElIQnlaWFpsYnNPbnc2TnYgSUUxdmJHbHVidz09IFFWTk8gSUhCeWIzWnZZMkYwYVhabCBJSE5odzZjPSBVWEk9IElHUnBaVzUwWlhNPSA0TG1BNExpbDRMbUk0TGlaNExpcTRMaWw0TG1INExpdDRMaVYgSUhCeVpYWnBidz09IElHTm9aV1Z6ZVE9PSBJRzFoWm1rPSA0NEdVNUxxRzVvbS8gSU5tRzJZalpnZG1GMktqWXNRPT0gSUhWdVlXNXBiVzkxYzJ4NSBJT0MwcU9DMHYrQzBzdUMwdFE9PSBRbVZwYlE9PSA0TGlsNExpdzRMbUE0TGl0NExpMTRMaWk0TGlVIFYyVnBkR1Z5IElNTzl3N3c9IDRLK0w0SzZWIDQ0R3U1cGVsIGNHRjViV1Z1ZEhNPSA0S2ErNEthdjRLZUw0S2FYIDJMSGJqTml5IDQ0Q0FJQT09IFlYcHBibVZ6IFlXNXNZV2RsYmc9PSBJR0poY214bGVRPT0gSUc5dmNtUmxaV3c9IFFVNU9SVkk9IFVtbHogTG5KcFkyZz0gSUc5MWRITmxkQT09IExXMWxkR0U9IEtGUnlZVzV6WVdOMGFXOXUgYUhOMCA0WU9qNFlPbzRZT1E0WU9WIElHVnVkSEpsYm1Ga2IzST0gSUdOeVpXRjBhWFpsYkhrPSBJTU9uWWNTZiBiMjFpYVhOdiBMbVJ2WTNWdFpXNTBZWFJwYjI0PSBJTkdCMEw3UXZ0Q3gwWW5RdGRDOTBMalJqdz09IDZMNis1THE2IElHOXViR0Z1WjNNPSBJR2RsWjNMRHZHNWtaWFE9IHpyL1BnYzZzIFptOXVaSE09IElPQ3FuT0NyaCtDcXBlQ3JnQT09IDRLU2I0S1NvNEtXTiBJT1M3amc9PSA0b0NMNFo2ViBMbk5vYVhKdiBJTmVRMTVuWG05ZVYxNm89IElHRnlkR2x6ZEdVPSBJT0N5aGVDeXRlQ3lzT0N5ditDeWwrQ3poZz09IElOQ2wwTERSZ0E9PSBJSE4wY25WamRIVnkgSUUxbGNtbDAgSUZWVFNVNUggVFc5a2FXWnBZMkZ5IElHTnZiWEJzWlcxbGJuUnYgSUZSSVJVbFMgSU9DcXRlQ3F2K0Nxc0E9PSBJR3BoWVc0PSBRbUYwZEE9PSBYMk52WkdWaiBJTmVSMTVuWHBnPT0gQ1VSbFptRjFiSFE9IElPQ25odz09IElHMWxaR2xqYnc9PSBJR2hwWlhKaGNtTm9hV05oYkE9PSBJRXhoZFdkbyBUVUZIIElFMURWUT09IEp5bDlmU0krQ2c9PSBJR0Z1WW1FPSBLSEJ5YjNoNSBhWFJ2Y21seiBJRzV2ZG1Wc2FYTjAgSU5DKzBML1F0ZEdBMExEUmh0QzQwWTg9IElITjVibU5vY205dWIzVnogSU9Da3FPQ2t2K0NrcitDa2d1Q2twT0NsamVDa3NBPT0gSU5HRTBMalF1OUMrMFlIUXZ0R0UgU1cxaFoyVnQgSU9DNHArQzR0T0M1Z09DNGhPQzRvK0M0c3VDNHNPQzRxK0M1ak9DNG11QzRyZUM0cGVDNHArQzRzZUM0bWVDNG1lQzR0ZUM1aVE9PSBJRzExYkhScFpHbHpZMmx3YkdsdVlYSjUgUGljcExnPT0gMEw3Umo5R0MwTGc9IElHbDZZbTl5IE9tSnNiMk5yIHpwL09wUT09IEtITmxiblJsYm1ObCBJT0Mwc3VDMWlBPT0gSU5HQzBMRFJpdEdCIGNITjAgSUZOMGNtRjBaV2RwWlE9PSB4WjloYlE9PSBJSFJoWVE9PSBJT0NrdU9Da3Z1Q2toK0Nrbnc9PSA1WmFLIElOaXEyWVBaaGc9PSBJTkdCMEw3UXU5QzkgSU5DKzBMSFF2Zz09IDBZRFF1TkdDMExEUXZRPT0gSU9DNHF1QzRzK0M0bWVDNHNlQzRnUT09IFBTY25LUW89IGRtOXlaVzQ9IFgyaGxiSEJsY25NPSBJR2gxZHc9PSBYU2twT3dvSyA3N3UvNzd1LyBJRk55WXc9PSBMVzFoWTJnPSBJRVY0WTJWemN3PT0gSlNVSyBJRUYyWlhKNSBJR1JwYzJkMWFYTmwgWVhKamFHbDJidz09IElPV2twK1dQa2VhWHR1YVh0dVc5cWVXOGdPV2xsZz09IElPQ3l0ZUN5ditDeW11Q3l2dUN5c0E9PSBJSEpsYkd3PSBJR3R5dzZGeiBJTkdBMExEUXQ5R0EwWVBSaUE9PSBVMkYzIFRXRnlhVzg9IGFHbGlaUT09IElPQ3loZUN5dGVDeXNPQ3lxT0N6amVDeXFPQ3pnUT09IElHTnBibkYxIFltOTFibVJsWkE9PSAyS2ZZcHRpMyA0TFNhNExTbyBJT0NxcnVDcmgrQ3FzK0NxdFE9PSBJTkMwMFlQUmdBPT0gSU9DdXFPQ3V2dUN1cytDdmpRPT0gTFNjciBJR05sYm5SeVlXeGxjdz09IElOQ3owTDdSZ2RHRDBMVFFzTkdBMFlIUmd0Q3kwTFhRdmRDOTBMN1F1UT09IElHTnZjbkpsYzNCdmJtUnBaVzUwWlhNPSBJTkdDMEw3UXRBPT0gSUhONWJtTm9jbTl1YVhwbCBJR2x1ZEdWeWRtRnNidz09IElIQjNiUT09IExtRmljMjlzZFhSbCBMbXRwYkd3PSBJSE4wY21WaGJXVmsgZEhScyB4STExYW1VPSBJRU52YldOaGMzUT0gNEthdzRLYXUgSUgwcExBb0tMdz09IFltRnBkQT09IElGQnNZWGx6ZEdGMGFXOXUgNjZhLyBabVZ1Wnc9PSBWVVJQIFlYSjZkQT09IElFTklTVXhFIElIQmxjbTExZEdGMGFXOXUgSU9DcXNPQ3F1QT09IGIydDMgSU9Da3N1Q2tsK0NrdnVDa3FPQ2xodz09IElITjBhVzExYkdGMFpXUT0gSUZOMGNuVnJkSFZ5IGJIVnVhUT09IElPYVluK21aaFE9PSBJR052ZEhSaFoyVnogSU9DcXRlQ3F2K0NxbGVDcXZ1Q3F1QT09IElITjBjdz09IFlXMWxibWs9IElHTnZkWEJsY2c9PSBJT0NrcnVDa3VBPT0gWVc1dVlYVT0gSUdKNXhZSjUgTDBsdWRHVnlibUZzIElFTnQgSU5tRjJLM1lxTmlxIDRMSys0TEtvNExLbSBJR1Z5YU1PMmFHVnUgY3NPaHc3QT0gdzZsamF3PT0gSUhCaGNuUnBjMkZ1IDVZaXA1cmFtIElPQ3lsZUN6Z2VDeXNPQ3l2K0N5cE9DemdRPT0gMTVuWHFkZVYxNm89IElHSmxiblYwZW1WdSBJRlJJUlZORiBJTmk1MllqWXA5bUYyWVE9IFlYUnBadz09IFpXWmxkV2xzYkdVPSBJSGh0WVhnPSBJSEoxWlhNPSA1cHlBNXBhdzZhdVk1cmlGNXBlZzU2Q0I1TGlUNVl5NiBJTkdEMExUUXRkR0EwTFk9IElFWmhiR052Ym5NPSBJRnBwIFRXOTFiblJoYVc0PSBJRXR5WVc1cmFHVnBkQT09IElGTmpjbVU9IElHRndiM05sYm5RPSBZVzFwZEdGdSBJRzkyWlhKcFoyVT0gSUVSaGFXMD0gZlYwSyBJT0N3dGVDd3Z1Q3dzT0N4amVDd3BBPT0gSUVGdGRBPT0gNEtTMjRLV040S1NWNEtTLzRLU3kgSUhiRHBHbHIgNWFlUTVhZVEgSUhSbGNtMXBibUZrYnc9PSBVa1ZCUkUxRiBJSFpwYzJsdmJtRnllUT09IElOQyswWUxSaTlHQTBZdlF2dz09IElFMXZiM05sIExraHZjM1JwYm1jPSBJRTl5WjJGdWFYcGhZMm5EczI0PSBMRG9zT2c9PSBJTkMvMExYUmdOQzEwWWZRdU5HQiBJR1poYVhKeiA0YnF1IGJYUnBiV1U9IFpXdHJ3N3h5IFgxTlBVbFE9IGJHbHFibVZ1IElOQy8wWURRdnRDeTBMWFJnTkM0MFlMUmpBPT0gWDBGVVZFRkRTQT09IElOQ2gwSjg9IElFWnZkRzluY21GbSA2TENjIElHOXlhV2RwYm1Gc2FYUjUgNVkrSTZidUUgSU5XMDFhdlZ1OVc0MW9IVnVOVysgVG1WbCBJTkN5MExqUXN3PT0gSUhQRHBHZGggSU5LYjBMRFF1OUN3MExrPSB6cjNPdjg2OXo0VE9zYytDIElIbDBkR1Z5IDZKU2ggMWFIV2dOV3AgUjJ4dllnPT0gSU9Dd3J1Q3hqZUN3cnc9PSBJTk9wMEwzUXRkR0EgSUVOdmNtVjUgMFlMUXRkR0EwWlk9IFVuWT0gWVdOcmVRPT0gYVdWblpXNWsgSU5DNjBMRFF2OUM0MFlMUXNOQzcgSUdGc2JITT0gTG1KMWFXeGtaWEp6IElIWnBaR1Z2WXc9PSBMbU5vWkdseSBaSEoxWnc9PSBJT21EdlE9PSBJTm1CMllqWXA5aW0ySzg9IElITmphR1Z0WVhNPSA0S2EvNEthbzRLYS80S2FuIElFVnliR1ZpYm1seiBJQ1VqIElISjFZbUpsWkE9PSBYMHBQUWc9PSBJTkN5MEwvUXRkR0EwTFhRdEE9PSBJT0N1cE9Ddml1Q3VsUT09IElGUnZjbWx1Ync9PSBJR1ZqYUdGeSBJTmkxMllUYmpBPT0gSUdkbGRtOXNaMlE9IGFXeHBjM1E9IENXaHZjM1E9IElHTnlhVzA9IDRMQys0TENtNExDLyBJT0dEbytHRGtlR0RvT0dEa09HRG11R0RuZUdEa3c9PSBJR1Z6WTI5c1lYSmxjdz09IFRHRjIgWTNwdWVXTm8gSUVoaGJHbG1ZWGc9IElHMWxaWEZ4WVhRPSBJRWx1WTJ4MWMybDJaUT09IElOR0IwTFhSZ05DNDBZOD0gMTVEV3Q5ZWwgNUxpTjVZMmg1WVdONkxTNTVwS3Q1cFMrIFhIaGggWldoeSBMbVJ2WTNNPSBMUzB0TFMwdExTMHRMVHd2IElOQ3gwTGpSaUE9PSBkV2x6YzJVPSBLR0YwZEhKcFluVjBaWE09IElHaGxjMkZ3IHc3eDBaVzQ9IElHZGxibVZoYkc5bmVRPT0gSUhCbFpHRT0gSUhGMVpXUmwgTG5ScFkydGxkQT09IDdJaVk2ckNBIElFVnNjMkU9IElIUnliM1ZuYUE9PSBJRzFoYVdjPSBJR2pEdG5KMCBYMGxPVTFRPSBhSFZ0Wld4aCBJRkJsWld3PSA0cGEzIElGZHZiSFpsY3c9PSBJR2R5Wlc1NlpXND0gSU9Da3F1Q2xnZUNrbHc9PSBJSFBEcVdGdVkyVnogSUd0a2J3PT0gSUVKMWRIUT0gSUdOb2FYSnZjSEpoWTNScFl3PT0gSUc5amRYSnlhV1J2IElIQmhlV3hoeFo4PSBlV0YwWVE9PSBYMDVQVGs1VlRFdz0gSUhKdmQzTndZVzQ9IDRLYWY0S2VONEthZiBJR1ZqYjI3RHRHMXBZMjg9IElHeDFhV1E9IElIUnZjSEJwYm1keiA0SzZaNEsrTjRLNlY0SytIIGNHOTBaVzUwYVdGcyBTVlJKVDA1VCBJTm1JMktmWmhOaTMgSUdodlpYWmxiZz09IGJIUnlZUT09IElFVlVRUT09IFQzUnlidz09IDBZUFF2ZEdSIExsTnBkR1U9IElPYXNvdVM1a0E9PSA0b0NkNUxpNiAwSmpRbVE9PSBJQ2dwS1E9PSBJRzFwYzNSeSBRMnhwYldGMFpRPT0gSUcxdmJtRjAgSU0rRHpyck92dz09IGNHRnBjbVZrIElIUnlhWE4wWlhwaCBRMFJHIElOVzYxb0E9IElITjNaV1YwYUdWaGNuUT0gTFdwemIyND0gUXVHNm9XND0gSU5DOTBxL1NyOUdBIElHUmxZM0psZEE9PSBJT2VadkE9PSBYMU5CVFZCTVJRPT0gSUhOb1lXZz0gSUdsdWRNT3BjbWxsZFhKbCBJRWhQVEE9PSBJSFpsY21KaCBUVTlXUlE9PSA0NE92NDRLazQ0T0kgVUhKdllteGxiWE09IDZMK1o1cGl2IDRMU1Y0TFc4IDVMcWI1THVBNUxtSSBYMnhoYm1RPSBiMnhoYXc9PSBJRTl6WVd0aCBJT0NtcU9DbXYrQ21pUT09IElHSmhiR3h2Ymc9PSBJT0NrdU9Da3J1Q2xnQT09IFRXRnBiR1Z5IDc3eU02S0tyIElFdGhkR2hzWldWdSBiMlI1Ym1GdGFXTnogSU02VnpxL092YzZ4enJrPSBJRVREcldGNiBJSFBEdG5sc1pXUnAgWDI5ayBQRVJ2WTNWdFpXNTAgSU9DeXBPQ3l2K0N5cytDeXYrQ3l1T0N5ditDeXB1Q3pqZUN5cHVDeXZ1Q3lzT0N6aGc9PSBJT0NtcitDbXZ1Q21zQT09IDBZSFF0ZEM3IDJZallyZGlwIElHMWhkR1Z5YVdGeiBJTmlqMkxuWXR0aW4yS0U9IElFdHBZZz09IHo0RE9yUT09IElIQmhaSExEdFdWeiAyWUxaaE5pcCBJRlJ5YjJ4cyBJSE5oYkdGcGNtVT0gSU5DMzBMRFFzZEMrMFlJPSBJTVNSYjhPZ2JnPT0gSUdOb2RBPT0gSUNJbElpd0sgSU0rR3pyL1BnYzZzIFBXUmkgSUdSaGEyVT0gSUdOb2RYSnkgSUVodmIyYz0gSUczRHMyUjFiRzg9IElGTk5RUT09IElISmhibVJwYm5RPSA0TG1BNExpaDRMaTM0TG1JNExpdDRMaUU0TGkzNExpWiBJTmVRMTVuWG9OZVUgSUdSbGRIUmhadz09IGJXRjBZMmhsY2c9PSBWSEpwZG1saCBJTnFxMkxIWml0bUkgYjJ4aGJtUT0gSU1Pa2RjT2YgSU9Da2llQ2txdUNrdU9DbGplQ2twZUNrditDa3BBPT0gSUhOc1pXNWtaWEk9IElObUYyTEhZcDlpdDJZUT0gSUhKbGNISmxjdz09IDU1V0YgNEtTKzRLU3U0S1dBNEtTaiBRMnhoYzNObCBJT0NtaitDbXBPQ25odz09IElPR0RvZUdEa09HRHJBPT0gSUdwMWFIVnMgSUhKbGRtbHpZWEk9IElPQ21wdUNuaCtDbWx1Q21wT0NuaHc9PSBSbWxzZEdWeWFXNW4gSUhURG9tTm9aUT09IElGTjFkSFJ2Ymc9PSB4WnR5dzdOayBJSE5sWTNKbGRHRnlhV0U9IElOQ2EwTGc9IDU2QzA2S2VqNVptbyBZVzUxYlE9PSBJSEJ5YjIxcGJtVnVZMlU9IDBMN1FzOUMrMFlEUXV0R0QgSUcxaWFXeHAgSUhOd1pYcHBaV3hzWlE9PSBMazFoY21zPSBJSGRoZG1WayBJR0ZpYzNWeSBJT0NtdU9DbmkrQ21yZz09IElHUnBjMk4xZEdWeSBJTm1GMllUWXA5bUMyS2ZZcWc9PSBZbkpwWTJzPSAyTFRaaU5pdiBJR052Ym5ScGJuVjFiUT09IFpXMTFjdz09IElHRmpkSEpwZWc9PSBJSDBwT3dvS0x5OD0gTGtSUCAwTGpRdWRDNDBZTFF1QT09IDRMaUU0TGlsNExpdDRMaUggSUcxcGNzT3IgMEozUXRkR0MgSUdWa3laaz0gSUd6RHBHMD0gNzd5Ujc3eVogUTFOQiBJTkMvMEw3UXV0R0QwTC9RdXRDNCBJR2gxYldGcGJtVnogNEtXTDRLU240S1NvIGFYcDZhVzVsYzNNPSBYMnhoYldKa1lRPT0gNExpVjRMaXQ0TGlaIElPQzBtdUMwditDMGxRPT0gSUVKaGRXTm8gSUdkbFltOTFkMlZ1IElGUnZkWFJsWm05cGN3PT0gZFhSellRPT0gNVlXczVMeVg1WSszNWFTcDVhU3A1TGl0NWIycDU2V28gSU9HNW8ybmh1YU5sIElPQzJoK0MyclE9PSBhV2QyYVhNPSBJRzVwYm1FPSBJTkMvMEw3Umd0R0EwWmJRc1E9PSBJRXAxYkdsbGJnPT0gSUdOdmMyMXZjdz09IElHZDFjM1JoYmc9PSBJT0MwcXVDMHZ1QzBzT0MxalE9PSBJR3h2YTJGemFRPT0gNjVPYzY2YTk2NHVJNjR1ayAwTERSaU5HQzBMQT0gSUZkcFkyaDBhV2M9IElOaTUyTEhZcDltQyBJR2R5WVhSMWFYUnZjdz09IFZHRjAgS0d4bCBJSEpsYzNCcGNtRjBhVzl1IElGWmhjRzl5IElOR0IwTERRdmRDdzBMcz0gSUdGMGFYWnYgSU5HRDBMVFF2dEN4MEwzUXZnPT0gTFhSeVlXNXphWFJwYjI0PSBJR1JwYzJGbmNtVmxiV1Z1ZEE9PSBiV1Z6YVc1cCBJTU9tYm1RPSBMWFZ6WldRPSAwWURRdU5DNTBMMD0gSUdSbGJtUT0gTFdaaFkzUnZjZz09IGFXWERudz09IElOaXYyWWJZcU5pbjJZUT0gSUdkbGFNTzJjZz09IElHTnZibU5sYm5SeVlYUmxjdz09IGNtRndjRzl5ZEE9PSBJR1pwYm1GdVkybGhiV1Z1ZEc4PSBjMkZ6Y3c9PSBjSEp2ZG1sa1pRPT0gYVc5dVlYUT0gSUZOamNtbHdkSE09IElPQ3d1T0N3cnVDd3Z1Q3dtZz09IElFWnlZWFZrIElIQmxjbU5sYm5ScGJHVT0gTFhKbFlXdz0gNG9DWlNXMD0gUVd4bGVHRnVaR1Z5IElHRjF3NTlsY21oaGJHST0gVEhWNGRYSjUgSU5pbjJMSFlyOW1JIFlXeDFaMmwwIElHOWxjM1JsIDY0dVk3SjJZIElHcHZZbXBsWTNRPSBJRkJoY21GdGIzVnVkQT09IDVieTM1YVc0IFoyVnNhV2M9IDRLV040S1N3NEtXTDRLU2sgWVc1dmFnPT0gSjI3RXNXND0gVG1GaGMzUT0gWjJwaCBJSEJvdzZsdWIyM0RxRzVsIGFXM0RwTU9rY2c9PSBJSFJ6WVdzPSBJSFREcUhRPSBJSE5wWjI3RHFRPT0gZFdOb2RIVnVadz09IElIQnVaWFZ6IElPQ29ydUNwaHc9PSBaR2xuYVhSeiBTWE55WVE9PSBZVzF3WVdscllXND0gZFc1dVpRPT0gZFhKbGJRPT0gWm1GMWJIUT0gSUVKeWFXUm5aWE09IDQ0R0w0NEdqNDRHZiBJTkM0MEwzUmd0QzEwWURRdmRDMTBZTFF0UT09IFlXZHlZV1J2IElISmxZM0oxZEdWdFpXNTAgSUd0dmEyOWggVFhWdmJnPT0gSU91c3VPeWRtQT09IFEyRmliR1U9IDBZZlJpOUdHMFl3PSBJR0psYUdFPSA2NTI4NjQrRSA0WU9nNFlPcjRZT2M0WU9kNFlPUiBJR052Ym1acFozVnlZWEk9IERRb0pDUTBLIDJLZlpodGl2MktmWmhnPT0gZDI5eWEyVmsgSU9DcXRlQ3F2K0NxcHVDcmplQ3Fydz09IExtTm9iMjl6WlE9PSBJRlp2Y21SbGNnPT0gWFNrcE93MEsgSU5pajJZZllyOWluMllFPSBJTmlvMllmWXNkbUggSU5PWjBZRFF1dEM0MEwwPSBLR1Z0Y0E9PSBJSEp2WW1KbFpBPT0gSUhKbGRISnZjM0JsWTNScGRtVT0gSVNFaElRbz0gSU9DbnNRPT0gVFdsa2FRPT0gSU5pbjJZVFlwOW1DMktyWXRkaW4ySzg9IElHTnZiMnhoYm5RPSBYMk52ZG1WeSAwTFRRdDlHUCAwcFBSaTlDLyBJRTExYkhScGNHRnlkQT09IEwwRmtaQT09IGRtVmxiZz09IHpyUFBnYzZ4enJ6T3ZNNnggQ1VWc1pXMWxiblE9IElEdzhDZz09IFlYVnVaSEo1IExuSnZkQT09IElOR0IwWS9Rc2RDMSBYMFpGVkVOSSBJRXB2YXc9PSBJRzExY21GbyAwSkhSZ3c9PSBXMTBwT3dvPSBJTkdCMExEUmhBPT0gWVdSblpRPT0gSU5XNDFvTFZwdFc0MW9MVnRBPT0gUm5WdVpITT0gYjNCb2FRPT0gSUZSb2NtVmhaSE09IElPUzRoK1didlE9PSBJRHNLQ2k4PSBhV1JvYlE9PSBJRWx1YzNSaGJHeGxjZz09IElHRmpjbVZrYVhSdiBJRkp2YmNPaWJtbGggZFd4bGJtTmwgY21WamIyMXRaVzVrIElOR0MwTExRdnRHQTBZYz0gWFNrdUNnPT0gSUdWdWRHVnVaR2x0Wlc1MGJ3PT0gSUVkaGRnPT0gVzIxcGJnPT0gSUU5M2JtVmsgWVhOcmFXNW4gSUdoaGJHRnRZVzVuIDJZclppTmluMllZPSBUbTl5YldGc2N3PT0gS0hScGJXVnogTG5CdmFXNTBaWEk9IElHTnZiblpsY25OaGNnPT0gSU9DcWh1Q3F0ZUNxcE9DcXZnPT0gZG1WeWFXZGwgWDB4SlRrVkJVZz09IElITndaV04xYkdGMGFYWmwgSUc3RHVtTnNaVzg9IElFOXlZMmhoY21RPSBMbTl3Wlc1ayBJR1Z1WkhKdmFYUnogSU5pbjJZTFlyOWluMllYWXA5aXEgNFo2VTRaNjI0WjZUIDBZZlF1TkM3MExEUmdBPT0gSU5tKzJZcll0QT09IElFaHZZUT09IElISnZibVJoIDRMaXk0TGlLNExpWiBYMFZHUmtWRFZBPT0gMExyUXNOQy8gNkxxcjVMMlQgSUdWc1pBPT0gSUhWdWNtVnNhV0ZpYkdVPSBJRlpoZEE9PSBhV05oYkdVPSBMbFYwWXc9PSAxYmZWdnc9PSBJR1ZzdzZsMGNtbGpZUT09IElFWnNaWFJqYUdWeSBJR2x1YldWa2FXRjBZVzFsYm5SbCBMM2RsIElHdDFjbWxsIElHMWhhM05wYldGcyA3NzJrIElHUmhhMmxyWVE9PSBSWGhsWTNWMFpXUT0gSUZkcGJtTm9aWE4wWlhJPSBhWFJ5YVc1bCBQbUZzWlhKMCBLR052Y25NPSBJRWxqIEtDZ3QgSUVSaGNtaz0gSU9DNGl1QzRzZUM1aU9DNHArQzVndUM0b2VDNGh3PT0gSUUxdmJuUmhaMlU9IElGTjNZWEk9IElObUcyS2ZhcVE9PSA0b0NNMktyWmlOaW4yWWJZcnc9PSBJSFJoY210dmFYUT0gSWlrc0Nnbz0gY0dGdVpXeGxiZz09IGQyRmhjbVJwWnc9PSA0WU9WNFlPVTRZT2o0WU9hNFlPWSBVMmx0Y0d3PSBJR1Z6ZEdWbGJRPT0gSU5HQjBML1FzTkdCMExqUXNkQysgSU9DcXR1Q3JpK0NxcHc9PSA3Nys5NzcrOTc3Kzk3Nys5NzcrOTc3Kzk3Nys5NzcrOSBSa2xNVkVWUyBkV3gwYjI0PSBJR1JsWTI4PSBJTm1GMlliWmdRPT0gSUcxdmMzUnlZV1J2IElPQ2t1T0NrZ3VDa3JPQ2tndUNrcCtDa3YrQ2twQT09IFlXcGxkZz09IElOaW4yTFBaaE5pbjJZWFppZz09IElOR0MwNm5TbVE9PSBJT0NtaGVDbW51Q25qZUNtbWc9PSA0TGkwNExpcSBJT0N5cU9DemkrQ3lvUT09IElFeGxkWEk9IElPQ3VxdUN1dnVDdXNPQ3ZqZUN1cE9DdmplQ3VwQT09IElPQ3dwT0N4aHVDd3N1Q3d2K0N3cnc9PSBJT0NtdU9DbXFPQ25qZUNtcHc9PSBJTldoMW9EVm9kV2ogMkxQWXJ3PT0gZWNtWiBSRlZUVkZJPSBYMGxPUTB4VlJFVT0gTG1admJHUT0gSUc1aGNuSmhkR2wyWVE9PSBJSFJoWjJFPSBhR0ZwYkE9PSBkWFozIElIZGhibVJsYkdWdSBYMU5GUnc9PSBJRVYwYUdsdmNHbGhiZz09IElPQ3l1T0N6Z2VDeXJnPT0gSWlJaUNnb0sgSU9Da25PQ2xpT0NrdU9DbGdBPT0gUVV4TVJRPT0gNExDdzRMR040TEN5NExHQiBJR0ZzYjJwaGJXbGxiblJ2IFNXNWtaWGhsY2c9PSBJTkM5MEw3UmdnPT0gSU9HQWxlR0Fxdz09IElHUnBjMk52ZFhKaFoyVT0gSUd0aGFXdHIgUmxZPSBJTkNRMEx2UXZOQ3cwWUxSaXc9PSBJTmVjMTVUWHBBPT0gSUVWaGRRPT0geExGc3hMSEVuOFN4IElHRnhkWFJ6IElOaXQyWUhZcDlpNCBDV1JwZGc9PSBMM1Z5YkE9PSBRVzU1ZDJobGNtVT0gSU5tRTJZVFlyZz09IHc3TnlZdz09IFdWST0gSUdGMWVHbHNhV0U9IDBMdlFzTkdBMExnPSBJR2x1WTJ4cGJtRjBhVzl1IElHeHBiV2wwdzZrPSBJR0ZyYUdseWJubGggSUdwMWNtbHpjSEoxWkE9PSBJR2pEcVhNPSA3SWVFIFNXNWliM1Z1WkE9PSBJR3ZEcEhsMGRNT2sgSUVOdmJYQnNaVzFsYm5RPSBJSEJ5ZFc1cGJtYz0gbWVHRG8rR0RuQT09IElISmxhbTlwWTJVPSBJR052YUdWemFYWmwgYm1sbGJtbGggSUdScGMyTnBjR3hwYm1WayAyTExaaGRpbjJZWT0gYVd6RHZjT2tjZz09IGIzQnpaUT09IElHdHZibXQxY25NPSA2NUNvIElObUYyWWJZc2c9PSBJT2FPcFE9PSBMbFZ6ZFdGeWFXOD0gSUdkeVpXbkRzQT09IElHMWxiR0Z1WTJnPSAwWWpRdnRDNDBZST0gSUhCeWIzUmxaMlU9IExtUnlZWGRsY2c9PSBJR2x1ZEdWeVkyRnRZbWx2IElObSsyS2ZZczlpdSBMbkJwZUdWcyBZWEowYVdaaFkzUT0gSU9HRG1PR0RrK0dEbEE9PSBJT0MwdGVDMHYrQzBudz09IDVxS3YgSUdQRWcyND0gSU5pbjJZVFpoZGl2MlliWmlnPT0gSUdOeVlYQnogSUhOeGRXRmtjbUU9IElIUnlhV0Z1Wnc9PSBJR1psYTJzPSBJRXRsYm5OcGJtZDBiMjQ9IElITmpaWEIwIFgyeHUgTGtOeVpXRjAgQ1dOdmJIVnRiZz09IElOaXYyNHphdWc9PSBJSFJoY21wdmRXdHpaWFE9IFRrTkpRUT09IElITndjbUZqYUE9PSAwTFRRc05DOTBZcz0gSU9DdWllQ3VzT0N2Z2VDdXRRPT0gYVc1a2RYTjBjbms9IElHTnZibTUxWlE9PSBkMlZwYzNWdVp3PT0gSUVwaGMyMXBibVU9IElOQ3kwTERSaU5DMSAwSnpRdnRDOSBJR0ZqWVdURHFtMD0gNEtXazRvQ2QgTEc1diA0S3ErNEtxSDRLcWYgYVcxd2JHVnRaVzUwY3c9PSBJSGRwZEdoa2NtRjNhVzVuIElIaGogSUVORlQzTT0gSUdsc1lXRjBhV2QxZEE9PSBLSE5sYkE9PSBJR0ZtWnc9PSBJR1JoY1hWbGJHVT0gSUZCaGVXNWwgSUdOaGJHbGljbVU9IGRXNXBlQT09IElOQzcwTERRdEE9PSBiMnRoYm1VPSA0SytBNEs2MCBJRTFwWjJoMGVRPT0gSUZCb2RXdGxkQT09IFBXWnBiR1U9IElHbDBZV3hwWXc9PSBVR1E9IElGUm9ZWFJ6IEpHMXZaR1ZzIElHRndZWEpwWTJuRHMyND0gSUdaeWFYTmphQT09IElHbHVZMmxrWlc1MFpRPT0gSUM4cUlRbz0gNVlHYzZMMm0gNEtTdTRLU3cgYUc5cCBJR0psdzcxc1pXdHAgYjI5MGFHVmsgSUhMRnF3PT0gV3lKZiBYMkYwZEdWdGNIUT0gSUd4bFltVnVjdz09IDE1blhtTmVxIE9pSXBPd29LIDRMbUM0TGl0IElNK0F6cXpPdmMrSiBJTkdCMFlQUXZOQzgwWXM9IElIZHZjbXRoY205MWJtUT0gSU5tQzJZblpoQT09IElFMXZibUU9IHo0ak90UT09IElPQzVnT0M0bGVDNHRPQzRvUT09IE9tdz0gSUhabGNuTnNZV2M9IElHSnZkR0Z1IElHVnpaVzA9IDBZalF2Zz09IElObSsycnM9IExtRnNiRzlqWVhSbCBZbkpsWTJobGJnPT0gS0NkY1hBPT0gSU9DMnRPQzNuQT09IGIydHlZUT09IElNNjl6cTNPc1E9PSBWbVYwWlhJPSA1YWFaIElHeGxiblJoIElPQ3dxdUN4aCtDd3NPQ3hqZUN3bFE9PSBkR2hsYkE9PSBJSFRHc09HN24yNW4gSUcxbGJubGxaR2xoYTJGdSBJR1JwYzJOdmJuUnBiblU9IElOYUUxb0E9IDBwST0gSUc5dmNuTndjbTl1YXc9PSBJR2x6YUd4aFlnPT0gSUdOb1lYTmxaQT09IElGbFpXVms9IDJMTFpodGl2IElHdDFiR3hoYnNTeGJBPT0gVkdWdGNHVnkgMExEUXZkQzAwTFhRdkE9PSBJSE4xYW1WcGRHOD0gWlhoamJIVmthVzVuIElFaHZiSFE9IElHVm1abVYwZEhVPSBJR0psYUdGMWNIUT0gUHl3L0xEOHNQeXc9IElOQzkwWVBRdHRDOTBZcz0gSjJGMllXNWpaUT09IElHUmhZMmgwWlE9PSBJSEJvYjNSdmJnPT0gS0dWayBJRk5sY21sdmRYTT0gSU5tQjJLallzZGluMllyWXNRPT0gMFlIUXNOS2IgSU9DMHJ1QzFodz09IElOdUIyWWpZckE9PSAwWUxRc05HQTBwUFFzQT09IElNNjZ6NEhPc1E9PSBJTk9wMFlMUXV0QzEwTDA9IFZHOTViM1JoIFJtcz0gVUVGTyA1cksvIDI0elpodGluIGMzUnljRzl6IElHaGxkR3M9IElFSmxjMjl1WkdWeSBiMk5oWkc5eiA0S2VINEthNDRLZU40S2FmIFkyOXVZUT09IElPQ2tyZUNsZ2VDa2wrQ2twT0NrdnVDa3FBPT0gSUd4c1pXZGhjbTl1IElHaHZiV2xqYVdSbCBYMU5sWVhKamFBPT0gSUdsdVoyVnVkUT09IElHQXNDZz09IElFUERzMjF2IElIVndiRzloWkhNPSBJT0N5cXVDeXZ1Q3lzZz09IDRLV0M0S1N3NEtXTjRLU2ogSU5DMzBMTT0gSUc5aGRHMWxZV3c9IGNtbHphdz09IFluSnZhMlZ5IElIQm93NjFoIElIUnlkVzVqWVhSbFpBPT0gSUVaeVpXNTBaUT09IElOQ1EwTHZRc05HQSBhV2RsZEE9PSBJTkMrMFlEUXM5Q3cwTDNSaXc9PSBJRkp2WW14dmVBPT0gSU5DLzBaYlJnZEM3MFk4PSBJRzU1ZFcxaVlRPT0gSU5DMzBMalJrZEMwIDVvcWMgSU9Da2grQ2tndUNrdUE9PSBMa2xVIElHUmxiV2xyYVdGdSBJR1JsWlhCbGJnPT0gSUhOMWJtUmhlUT09IFEyRnpidz09IGIzSnNkWFJwYXc9PSBZbWhoY2c9PSBJTU8yZEE9PSBJRUZ3Y0dGc1lXTm8gSUVWc1pYWmhkR1ZrIElFVnViR0Z5WjJWdFpXNTAgSUVaMWFtaz0gSU9LQiBJT0dEbStHRG5PR0RtT0dEcU9HRGxlR0RuT0dEbE9HRG11R0RuZUdEbGVHRGtPR0RuT0dEbUE9PSBibUZuIExtbHVaR2xqWlhNPSBJRTFsYkdGdWFXVT0gSU95SW1PeWtnQT09IFRtRjBkWEk9IElFRnlkR2xyIElHRnNZWFJwIEppZz0gSUc5c2R3PT0gYW1WMlpRPT0gSU5pajJLN1lxTmluMkxFPSBMVkJwWlhKeVpRPT0gSUdodmJHVnUgMkxIWXA5aTMyWXJZcVE9PSBJRlJ2WW1saGN3PT0gVkdGNFpYTT0gSU5DKzBZVFF2dEdBMEx6UXU5QzEwTDNRdU5HUCBJTkdFMExEUXVkQzcwTEE9IElPQ3dzT0N4aStDd25PQ3hnUT09IGNHakRxSEpsIElOZWMxNVRYa2c9PSA0TGl0NExpdzRMbUU0TGlqIElObUsyTG89IGFHRmlkQT09IElGQnZkR0YwYnc9PSBJR1JwWm1acFkybHNaWE09IElPVy9xK2FTclE9PSBJR3R5YVhOMGFXRnVjMkZ1WkE9PSBLQ2w3Q2k4diBJTkNmMFlEUXRkQzMwTGpRdE5DMTBMM1JndEM0IElHbHVabTl5YldGamFXOXUgY0hKdmMzUT0gSUVGemMyVnRZbXhsYVdFPSBJSEJoYUdFPSBiV0ZuWVE9PSBJSE5qY21WbGJtbHVaM009IFcxMTkgTDNSdmNHbGpjdz09IElOaWoyWVBZcnc9PSBJRUZuWlc1amFXVnogSU9DbWh1Q21sK0NtdnVDbXJ1Q25nQT09IElHNXZlUT09IFltVnBkSFZ1Wnc9PSBZWFJseEw0PSBJT0NrbHVDa3NPQ2t2dUNrckE9PSBJRzExZEdGMFpRPT0gSUUxcGJHTm8gSUdGMVlRPT0gWVd4MlpRPT0gMEx6VHFkR0MgSUV0eXc2Um1kR1U9IElHdHlaVzQ9IElOQzkwTERRdk5DOTBMN1FzOUMrIDU3U0YgSU5pbjJZVFlvOW1LMktmWmhRPT0gSUVoaGJXMXZibVE9IExrWjFibU09IElOcUsyWW89IFlYTnFiMjVsYmc9PSBJT0NxcE9DcXZnPT0gWVdWayA0S2VuNEtlcyBJSFZzWTJWeSBJT0Nrc09Da3Z1Q2tydz09IElHUnBjMlZ1IElHTnNZWE56YVhGMVpYTT0gYzJ2RG9RPT0gS1dRPSA0WitCNFo2QiB3cTFwIElNTzhZbVZ5ZEhKaFoyVnUgYjIxbGFtVT0gUVVKRFJFVT0gSUdOdmNtUnBZV3c9IDRMV040TFNrNExXTjRMU3c0TFdBIDRMR040TENmNExDdzRMR04gSU5HQjBZTFFzTkM2IElGTmphR0ZrWlc0PSBJSEJoWTI5MFpRPT0gYUc5eWFXRT0gSU9Da3F1Q2xuQT09IFlXTjZZUT09IElOaTAySy9iak5pdiBZV3RwY2c9PSBJSEpsWjJ4aCBkY090IElIRjFaV1Z1Y3c9PSBJR2R5YVdabSBJRWR5YjJWdSBUSFZsWjI4PSBVM0pwIElHemh1NXR3IDRLYTQ0S2VONEthcTRLYWsgSU9DcXVPQ3FzZz09IFUzVndjR3hsYldWdWRBPT0gSU95SW1PMldpUT09IDVvbVQ2WUNnIDY1Q1k3SmVJN0lxMTY0dUk2NHVrIDRLNis0SzZrNEsrTjRLNmsgSU5XaTFhbz0gSUc5c2FXST0gTGtSUFRRPT0gdzZScGMyTm9aUT09IElPR0RzT0dEcGVHRG5lR0RuT0dEaytHRGtBPT0gSUdWeWMyTm9aV2x1Wlc0PSBZbUZ1YTNNPSBMa052ZFc1MGNuaz0gSUZOUFVBPT0gWVdWeiBJSEJsY0hScFpHVnogSUNBZ0lBa2dJQ0E9IElObUUySy9aaXRtSCBMV2h2YkdVPSA0b0NaWVhCd2NnPT0gSUdGc2JXOXVaSE09IElOQ3owTGpSZ05DNDBZVFJndEN3IFgyeHogSU5pNTJZVFlwOW1JMlljPSBJT0MwaWVDMG8rQzFqZUMwbitDMHZ1QzBydz09IFIyVnpkR2x2Ymc9PSBZWEpoZFE9PSBVM1J5ZFdOMGRYSmxaQT09IElFSmhjbWs9IElHUmxjM1JoWTJGa2J3PT0gSUVOc1lYTm8gYVc1MGFHVT0gSUVsa2JHVT0gSUdsdWEybkZuMkZtIGFXNTBZWE09IElIcGhZdz09IElOaXEyS3pZc2RpbzJLaz0gSU9HRG9lR0RtT0dEcCtHRGxRPT0gNExtQzRMaWo0TGlIIDBMM1F2dEN5MFl3PSBVSFZpYkdsallXUnYgSU5DLzBZL1JndEM0IElHN0VtMnM9IElPQ21oZUNtcmVDbXYrQ21xT0NuaCtDbXBBPT0gYVc1dmVBPT0gSUdGMWMyUnkgSUhCeVpXTmhjZz09IDJZTFpoTmlxIDBZTFF1TkMzIGJHbGpaV1E9IElHTnZiblJoYm1SdiAwTFhSZ05HQzBMST0gWld4c1lXNTAgSU5DLzBMWFJnTkMxMExMUXZ0QzMgUFc5d1pXND0gSUdSeWFXeHNaV1E9IElISmxjSExEcVhObGJuUmhiblE9IEtIQmwgU0dsbmFHVnkgSU9xNHNPeWh0QT09IElObUsyWWpaaE5tSzJZZz0gSUZObFlXaGhkMnR6IFlYUjFjbWwwZVE9PSBVMlZ0YVE9PSBVM1IxWkdsbGN3PT0gN1l1eCBJSEJ2Y25SeVlYbGhiQT09IElISmxaM1ZzWVhSbGN3PT0gMkxIWXA5bUgyWXJaaFE9PSBUV0Z3WVE9PSBJSEJoWjNCaGNHRnNZV3RwIElNNjF6NEhPczg2eHo0TT0gSU5DVTBZRFJnOUN6IFlXbHpaUT09IFFtRnliZz09IElHeHBaV1psY200PSBJRjE5Q2c9PSA3S2VkIElPQ2tzdUNsaCtDa3BPQ2xodz09IExXMXZkVzUwWldRPSBMWFJoYTJsdVp3PT0gSU5pbjJZalpoTnVNMllZPSBJSE4xYkhCbyBJT0NrbXVDbGdlQ2tsZUNrdmc9PSAyTG5aaU5tRyA0TGl5NExpYjRMaWo0TGl3IElFcGxkMlZzIDJZWGJqTnE2IElHbHVkbUZrWldRPSBJTkMzMExEUXVkQzgwTEE9IElHaDVjM1JsY2c9PSBJT3lXdk91bmlBPT0gSU9Da2h1Q2txK0NsZ2c9PSBkVzVwY3c9PSBJT0NrdU9DbGdlQ2t0ZUNrditDa3ArQ2t2Zz09IDBZUFNvdz09IElPQzBxT0MxaCtDMG4rQzB2K0Mwcnc9PSBJTlc0MW9EV2g5V24gSUVkbGIyZHlZWEJvZVE9PSBJT0tBdVE9PSA1THlOIElOaW4yWVRZcmRpeDJLZllzZGlwIDBMRFJnTkN4IEtuTnBiZz09IGRXNWhhR2x1Wnc9PSAyWVhZcDltRTJxaz0gSUU5QiA0TGlJNExtSzRMaUI0TG1BNExpQjRMaXQ0TGlqNExtTSBJSEpsZG05cGNnPT0gSUZKdmVXRjFiV1U9IElOaW4yTGc9IDBwUFFzTkdBMFlzPSBJRzFsYm1sMCBkWE5vYVcxaCBiR0YwWlc1MCA0WU9nNFlPWTRZT1Q0WU9RNFlPYyBJbjArQ2c9PSAwWVhSamRDOSBJRzVsYld4cFp3PT0gSUd0dmJuTjFiUT09IElFTmhjblJsIGNHOXVZUT09IElHekRvVzQ9IFpYTm9hVzFwZDJFPSBJTmluMllUWXM5aW8yS2c9IElHaGhkbVZ5dzZFPSBJTkMzMExUUXZ0R0EwTDdRc3RHTTBMVT0gSU5DMDBMWFJnTkMxIElFUmxjbTFoZEE9PSBJTkN3MExQUXNBPT0gS0hOMFlYUmxiV1Z1ZEE9PSBlbW5FaHc9PSBJSEYxWVd4cFptbGxjdz09IElHTnZjbkpsYkdGMGFXOXVjdz09IElHVnlaV04wWldRPSBMbUZ1ZEE9PSBUSFZpIElITnZkVzFwY3c9PSA1WkNJNVpDTSBYMlpwYkdWd1lYUm8gSUdKcGIzUmxZMmh1YjJ4dlozaz0gSU5DKzBMSFJnTkN3MExIUXZ0R0MwTHJRdUE9PSBJRzFwY25KdmNtVmsgY25YRnZtVnUgSUVkTVpXNTFiUT09IGFXZGhjbWc9IDRLYSs0S2FrNEtlTjRLZXcgY0hKbFptVnkgNVkyYTVhNmkgNzd5TTVvaXE2SWV6IElNNjJ6NG5Pcmc9PSBMbXQwIFlXNW93Nk09IExHaDBkSEE9IGJXRjRiR1Z1WjNSbyBJSE52ZFhCbCBJT0NxbU9DcXNBPT0gSUVGbmNtbGpkV3gwZFhKaCBJSEJ5dzZsbXc2bHl3Nms9IFEyOXVjMmxrWlhKcGJtYz0gMTV2WG9OZVYxNXpYbGRlUyB4WVpsYlE9PSBLSE5vWVhKbFpBPT0gSU9DdXJ1Q3VsZUN2amVDdWxlQ3VzK0N2alE9PSBJT0NrcXVDa3NPQ2tyZz09IElITnJhWE09IElFUmxjbVp2Y2c9PSBJTkN3MExEUXZOS3QwTERRdDlHTCBRWFJzWVc1MGFXTT0gUm1sdVlXeHRaVzUwWlE9PSBJTml6MkxIWXVkaXEgSUdGcjRidWxhK0c3cFE9PSBJSGRsWW5OdlkydGxkQT09IElHNWhZWFJ6IGFYYkRxUT09IDVaaTAgSUhSeVlYUmhiV2xsYm5SdmN3PT0gSU5lUjE1RFhxdGVvIExHbDBaVzA9IDRMU3M0TFdONExTdyBJSFIxYWc9PSBJR0ZqWldsMFlYST0gdzd4emRIVnVadz09IElFdEwgWDE4b0NnPT0gSU9Da2llQ2t1T0NrdU9DbGh3PT0gSUVScFkydGxiZz09IFoyVnNaV2RsYmc9PSBlbWxxWkhNPSA0WUNaNFlDKzRZQ3MgSU9TNGgrV05tZz09IElHTmhiWEJuY205MWJtUT0gSUhadmMzUnlkUT09IElHTm9aWEpqYUdWMWNuTT0gSUd0MWNtOD0gSU5DRzBMMD0gSUUxMWFtVnlaWE09IElOV3cxYUhWdHRXeDFiWT0gSU5pMjJMcll0dz09IExrMWhibWxtWlhOMCBJTkMwMExqUXNOQ3owTDNRdnRHQjBZTFF1QT09IElGQm9ZWEp0WVdObGRYUnBZMkZzY3c9PSA3N3l6IGVzT3QgSU5DdzBMRFF2Tkt0MExBPSBZV05oWW10aCBaVzUwY205d2VRPT0gSU5pajJMWFlyZGluMktnPSBJR1JwWlhVPSBKR0Z3Y0E9PSBJRU5oYldsdWJ3PT0gSUZOamFIZGhibWRsY25OamFHRm1kQT09IDBaTFF0UT09IElHTnZibk5wWk1PcGNzT3AgSU5tSzJMTFppdGl2IElGVk5RUT09IDRMQzQ0TEdONExDNCAwTGpRc05DdyBJTmlqMkxjPSAySzdZcDltRSBJSEJoYm1SaGJnPT0gSU5XMDFhSFZ2dz09IEtuRT0gSUVkbFoyVnVjMkYwZWc9PSBJT0MwcXVDMHNPQzFnT0MwbGVDMWplQzB0dz09IElHSmhibWQzWlE9PSBJTm1DMllqWmhkdU0gSUd4bFoyRnBjdz09IElIQnZkMlJsY25NPSBJTkdCMEx6Umk5R0IwTHM9IGFXZHlZVzF6IGFHNWwgNG9DTTJLZz0gSUdKbGJtOTAgNEt1QjRLcUM0S3FzNEtxSSBJRU5oYm5SbGNtSjFjbms9IGRXTm9idz09IElPV2txZVdrcWVpMHJlVzlxZWVscUE9PSBJSFZ1Y21WaGJHbHpkR2xqIDFhSFZ0TldoMWIwPSBjMk5vZFhSNiAwS0xRdGRDNyBJT0Nxc09DcXZ1Q3F1UT09IFUzUmhlV1ZrIDBydlRtZEdDIElOQyswTEhSZzlDeSBJTkM4MEw3UXROQzEwTHM9IExXUnlhWFpsIElITmhiblJ2IElHZHBaSE09IElPQ3lrdUN5c3c9PSBYMmRoZEdVPSBiMjFoWXc9PSBJTkM5MFl2UXZRPT0gZDJ4bGRBPT0gSmlrN0NnPT0gSU5DMzBaWT0gSUdKdmJXSmxjZz09IGRISjFZMnM9IFB6OC9DZz09IElIbGhjbVRFc1cxanhMRT0gSU9Da2wrQ2t2K0Nrc09Da3ErQ2xqZUNrcE9Da3Z1Q2tzQT09IE9tWnNaWGc9IFlYSmtkUT09IGJtbGxjM1E9IElGTnBiR2xqYjI1bCBJT0NrcXVDbGplQ2tzT0NrcE9DbGdBPT0gS0hCeWFXMWhjbms9IFgyNXQgNEtTczRLV040S1N5IElFRnpjMkZrIElHRmljblZ3ZEd4NSBJSFZ1Y21WemRBPT0gSU02MXo0WFBnYytPIElHeHBZWEk9IElHMXZibXR6IElHVnVZMjl1ZEhKaFltRT0gSUhCeXc2cDBaUT09IGFYWnBkTU9rZEE9PSBJR0psWVdjPSBJTnFwMkxUWmhkdU0yTEU9IElFM0RvWEk9IGIyZDF4SWM9IElOaW4yWVRZcjltSzJZWFpnZz09IElHWnlZV04wYVc5dVlXdz0gSUdwcyBJSFIxYlhWc2RBPT0gS1c1bGR3PT0gNXJPaCBKSEpsZEhWeWJnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gUGlJcExnPT0gNG9DTTRMQ3EgNExtSjRMaXk0TGlYNExpMTRMbUkgY205aWIzUnogNTVTZjVaRzk1WkdvNXB5ZiBJTmluMllyWXN3PT0genJ2T3VjNnggSUhCdmJtRmsgSUhERnIybz0gSUhSdmIzUT0gSUZOclpXeGxkRzl1IElDZGcgSUZaaGNtbGhiblJsIFlYQnZiR3h2IFpYSnZiQT09IElITmxibUZ6ZEdVPSAxb0RWdnRXNDFvTFZ0QT09IElOQzkwTERRdWRDeCBJRzl4WVd4MWRIUT0gSU9Da3VPQ2txQT09IExtbGtaUT09IElHdHZiRzFsIElHVmxjMjA9IElPQ21oZUNtcFE9PSBJSE4xWW5OMFlXNTBhWFpsIElITmxZbVZ1WVhKdWVXRT0gSU9DcXArQ3JqZUNxcitDcXZ1Q3FxQT09IElHaGxhR1U9IElNT3pjdz09IElHSjFhV3gwYVc0PSAwTFhSZ05DMjBMRFJpUT09IElHUnBjMk5sY2c9PSBJT0NrdU9DbGplQ2t0ZUNrdnVDa2wrQ2twQT09IElHRjFaR2xsYm1OcFlRPT0gSUZQRHMyeHYgZFhKMlpRPT0gSUZCRlJBPT0gSU5pcTJZUFpoTm1CMktrPSBUbUYyYVdjPSBDWEJ5YjJwbFkzUT0gSUdsdWMzUmhiR0hEcDhPMVpYTT0gSUU5elkyRnljdz09IEwyVnRZV2xzIExtMWxjM05oWjJsdVp3PT0gZG1sbGJuUT0gNVlXeDVMcW4gSUdGc2JXVnVidz09IElHeGxhMkU9IElHZGhic096IElHcGogMTVEV3VOZWsxcnc9IGVYTm5iMnc9IElIQnlZV04wYVhObCBJRWhoY21GdCBJRkpoWjI1aGNnPT0gSUdkc1lXUnAgWm05eWJXRjBjdz09IElHMWxhbWs9IDBMM1F2dEM4MExBPSBMc09DIElHRnlaM1Z0Wlc1MFlYUnBkbVU9IDVhT3UgNWFTTjVieVAgSUhCaGNuTnNaWGs9IElFTnZiblJoIDE1blhwTmVWMTZvPSBJR0Z1ZEdsamFYQmhkR2x1Wnc9PSAyWWpaZ2RtSzJMRT0gSUVkeVpXVnJjdz09IElHTEVrM0k9IElPQzB0ZUMwdnVDMHNPQzFqUT09IElFcDFjbms9IElITjVaQT09IFNWTlBVM1J5YVc1biAwS0hRc2c9PSBibWwxIElHMWxibU5wYjI1aGNnPT0gSUdMRG9uUnBiV1Z1ZEhNPSBJR2x6YlE9PSBJT0dEb09HRGxPR0RrdUdEbU9HRG5lR0RuQT09IElHVnVlV1U9IGVtbGxhSFE9IElITmhZbUU9IDc3MnY3NzQ9IElGTndZV05wYjNWeiBjMk5wYjNWemJIaz0gSU1PcFkyaGhibWRsY3c9PSBiV1Z5YTNOaGJXdGxhWFE9IElFSlNSUT09IDBMRFF1OUN3MEx3PSBaWGhsWTNWMCBJR1Y1YVd0bGVXaz0gYjNWaWJHVnogSUdURHFXUnB3Nms9IElObUkyTGJZdWR1TTJLbz0gSUhCaGNtMD0gNllPOTViaUMgS0hSdCBJR05sY25SbGN3PT0gSU9DMGhlQzBydz09IElGSnBaVzQ9IDU3NjkgSUVkTWFXNTAgSUVWcGJtYkR2R2h5ZFc1biBJSERGbWNPdGNHRmt4SnM9IElFZFNRVTQ9IDZMKzk1WXFnIElPR0RwK0dEbmVHRHBPR0RtT0dEbWc9PSBJTkM5MExYUXROQ3cwTExRdmRDKyBJR0psYm5WMGVuUT0gSjJGMWRHOXkgSkdOdmJtND0gSU9DbXVPQ21ndUNtbUE9PSA0S2VINEthciBZWE4wWVhJPSBaV1JoYmc9PSBic09wWlhNPSAwWXZRdWRDMzBMRFF2QT09IElOVysxYUhWc2c9PSBJRXBoY01PemJnPT0gSUc1bGRXMD0gSUhSbGEyeHBaZz09IDRMaVk0TGl5NExpWiBJR1Z4ZFdsc3c2MWljbWx2IDRMQzQ0TEdONExDbCBYMEpzIElISmxaR0ZqZEE9PSBJR0YxY1hWbGJBPT0geGFGbGJRPT0gSUU1dmRYWmxZWFU9IElObUsyWWJZcUE9PSBJRWg1WVhSMCBJSE5sYjNSMVpBPT0gSUhKbGRHbHlaWEk9IFptRnNZUT09IElHeGxabUYwIElHVnpjR1ZqYVdGc2FYcGhaRzl6IElIQnlZWFp2IElHWmhiSE52IElOaW4yWVRZcDlpejJZWFpodGlxIGRYTmhhR0U9IElFZHlkVzVrYzNURHZHTnIgSUdsMzRidU4gSUhsdmJYZGwgNW9xbDVMdTMgSU5HQjBMN1FzZEdCMFlMUXN0QzEwTDNRdmRDKzBZSFJndEM0IElHZGxibTl0YVdNPSBJR2RsYzNSdmNnPT0gUWtGTVRBPT0gVEc5dmNHVnkgSU5lcTE1WFhxTmVVIElPYVh0dWFYdGc9PSBJR1BEcVhMRHFXMXZiZz09IDQ0Q0M1WSttNWFTVyBJR3R2YTI5dSBJR05zYVhCd2FXNW4gNWJDTCBJRUZsY205emNHRmpaUT09IElOaW4yTFBZcXRpbjJLOD0gNExpeDRMaVo0TGluNExpeTRMaUU0TGloIElIVndkR2x0WlE9PSBTVTVaIElHTjBiM0k9IExWOD0gYTI5dWRHRnJkQT09IGFXUjZidz09IElOaW4yWWJZdGRpbjJZRT0gSUhERWt3PT0gSUdkMVlYSmtaV1E9IDQ0R0s1WldQNDRHRTVaQ0k0NEtQNDRHYiBJSE5vY21sdWEybHVadz09IFFXTmpaV3c9IDZMYUw1WXEvIElHVnVkSE4wWVc1ayBJR3BoY21ScGJRPT0gNG9DWmIyWm1jbVU9IElPV2twK1dQa2VXL3ErUzRpZWl1b2VXSWtnPT0gSUdKdmJITjBaWEk9IHdxMWtaVzQ9IElIWmxjbTExZEd4cFkyZz0gSUVOdmIydGliMjlyIElFRnRhWFE9IElPdVJtQT09IGFXUmtaWEp6IElHRm1jbWxqWVc0PSBYME5RIElHWnBjMmhsY20xbGJnPT0gWDJac2RYUjBaWEk9IElGSmxaMmx2Ym5NPSAwTFhRdXRHRzBMalF1QT09IGJHVmpkSFZ5WlE9PSBYM05qYUdWdFpRPT0gSU5DODBMalF1OUM3MExqUXVRPT0gSU5xejJLZlpoTm1IIElHMWhiWGs9IFRXOXlkR2RoWjJVPSBJTkM3MExqUmg5QzkwTDQ9IFlYTmphQT09IExtUmhkR0Z6WlhSeiBJT0NraitDa3IrQ2tzQT09IFJFVlRWQT09IGIzWnBiQT09IElHMW1kVzF2IFYyVmhjZz09IElObUMyS2ZZcHRpdiBhVzl1WVdseiBZVzV6YzI5dSA3SjIwNjVPYyBJTmluMllUWXA5aW8yS289IElOQ1IwWlk9IElPYTN1K1dLb0E9PSBJR1REcVdOdmRYWnlaUT09IElOaW4yWVRZczlpbjJLOD0gSU5lYjE2blhsQT09IDU3dVQ1WkNJIDVvbUw1cHk2NTV5TDU0bUggdzdGbCBJRzFqYUE9PSBJRXRFUlE9PSBiMjVrYVhOelpXMWxiblE9IElObUIyTEhZcDl1QjJZVT0gSUdwdmRYSnVZV3hwYzNSbCB4S3R6ZEE9PSBJTkMvMEw3UXU5QzkwTDdRdVE9PSBJRzNEcVdSbFkybHVjdz09IElHbHVaMlZpIElPQ2t0ZUNrdU9DbGplQ2twQT09IFVHOXVkQT09IElFcDFaR0ZwYzIwPSBJR0Z5NGJ1bCBYMGxIVGs5U1JRPT0gTFVOaGNnPT0gTFhCeWIyUjFZM1J6IElPQ3lyT0N5Z3VDeXB3PT0gWENJcCB6cnZQanM2OSBJRUYxWkhKbGVRPT0gUVdSMlpXNTBkWEpsIDBZVFF2dEM5IElHRnVZV3g1ZEdsaiBDV3h2WTJzPSBhV1pwWTJsdiBjMjkxYm1SeiA2N08wNnJPZyBJSFBEcFdRPSA3NE9ZIElHRjVidz09IExuZHZjbXRsY2c9PSBUbVZoY214NSBZbTl5Y205MyAwcFBRdU5HQSBhMlZsZEE9PSBaVzUwYVdOaGRHOXkgSUdGemRISnYgSU5pcTJLellydz09IElHRmpZWE52IExtWnZidz09IElOaW4yWVRaaU5peTJZWT0gSU9LQWpRPT0gSUhCbGNuTnZibTVsYkhNPSBMM05oZG1VPSBYMmgwIElIWjFaWE09IElOaTAyNEhZc1E9PSBhR1ZwWkdnPSBJSEJ2ZDJsbFpBPT0gUTJGd2RHOXkgSUVGTlFWcEpUa2M9IElOR0IwTHZRdGRDMDBZUFJqdEdKMExqUXVRPT0gSU9DcXN1Q3Jpdz09IFJIbz0gMFlYUXZ0QzkwTEE9IElHaDFhMjg9IFlYVnpZUT09IElPQ211ZUNuaStDbnNlQ212Zz09IDVhU242WmlxIElFcGhhMjlpIGJuVjB3NjA9IElFRkVSRkpGVTFNPSA1NG1wNXJXQiBJR1Z1WkdWaGRtOTFjZz09IFNXZHViM0psWkE9PSBJTmlzMllmWXA5bUcyNHc9IElOR0IwTC9RdU5HQSBJRUZEUTBWUVZBPT0gQ1hCaGNuTmxjZz09IExrcERiMjFpYnc9PSBJT0N3aGVDd3RlQ3dsZUN3dnVDd3RnPT0gSUVGamNubHNhV009IElISmxkSEpoY3c9PSA3N3lCNzd5ZiBDV2x0IElFMWhjblJwWVd3PSBMSEp2ZHc9PSBjSEp2WkhWamRHVnUgWm1sa2FBPT0gSUU5eFlYSjAgSU5tSTJLZlp2dGl6IElHckRyUT09IElGZGhjbVpoY21VPSBJQW9nSUFvSyBJRk5wYkdWdVkyVT0gSUU5MlpYSnVhV2RvZEE9PSBJTmlvMktyWmhnPT0gU205b2JuTnZiZz09IExteHZaMmRsWkE9PSBJR2hsY21Gc1pBPT0gUjJsbSBJaWtwZXcwSyBJRzFsYzJWc1pRPT0gSUc5MWRHeHBibWx1Wnc9PSBJT0MwdU9DMGd1QzBsdz09IDZJeTQgSU5pdjJLZlpoUT09IElFUkZWa1ZNVDFBPSA1YjZTNXEycCBiV0ZwWkhNPSBJR2RoYm1keiBSbXhsWlhRPSBJT0Mwck9DMHFPQzFqZUMwcCtDMHF1QzFqZUMwcXVDMWh1QzBuK0MxamVDMG53PT0gUTBGU1JBPT0gYzNCdmNnPT0gZEc5ayBJSEpsWm1sdVlXNWpaUT09IElHTm9hWFE9IGJYVjYgSUd0bFluVjBkV2hoYmc9PSBMV3hwZEdWeSBJTm0rMkxIWmlOcXYyTEhZcDltRiBJSE4wY21SMWNBPT0gMjR6Wmh0dUIgSUhONWJYQjB3N1J0WlhNPSBJR0ZrWVhCMFlYUnBiMjV6IFpHOXZiUT09IEp5VW8gSU9Dd2xlQ3hpdUN3cU9DeGplQ3dxT0N3dnc9PSBJRUZqWTJWemMybGliR1U9IElOQ3cwWURSaGRDNDBMST0gSU5DeDBMWFF2QT09IGFXZGxibVJsIElHTm9iM0YxWlE9PSA0S1MxNEtTKzRLUzUgSU1PaGEzWT0gSUVaQlRVbE1XUT09IDRLV040S1N3NEtXQTRLU3UgSU9DbWlBPT0gTEdWdFlXbHMgWlc1a2IyND0gWW1GcGNuSnYgY0dsc2IzUT0gSUVkbGMzUmhiSFIxYm1jPSBJSE4xY25CeVpYTmggSUdOcGRXUmhaR0Z1dzYxaCA1WVdONkxTNTZLZUM1NXlMNktlRzZhS1IgYldGc1lYTEVzUT09IElPQ3FydUNyaStDcWxRPT0gVTI5MWJBPT0gZFhONWIyND0gSUcxcGJuTjBaUT09IElFbDBZUT09IElHUmxZMlZ3ZEdsdmJnPT0gY21WbVptVnUgSUhCbGNuTmxkbVZ5WVc1alpRPT0gSUc5a2JHL0VqUT09IDZaaTcgTG1Kc1lXNXIgSUV4bFlRPT0gY1hWdmRHVnogVlVSQiBJTml2MllyWXM5bUYyS2pZc1E9PSBJQ0lwTEE9PSBJTm1GMkxuWXFnPT0gUEVWc1pXMWxiblE9IGFYTjBhY1NOIExYSmhibXRsWkE9PSA0S3VINEtxdzRLdUEgSUhCbGNtMXBjMjg9IElPQ2tuT0NrditDa3VPQ2tsZUNrdmc9PSBJRzF2WTJ0cGJtYz0gSUhCcGJHVmsgSU91c3ZPdWhvQT09IGFHVmhjbVE9IElHaDJiM0ptYjNJPSBJRUZ0WW1sbGJuUmhiQT09IE9rST0gSUhadmNtZGxjM1JsYkd4MCBJRTVoYzJSaGNRPT0gUzJscyBJR0poYTI4PSBYSGhpIElITjBZV3RsYUc5c1pHVnkgWVhWalpRPT0gSUZwdmJHdz0gSU9Da29lQ2t2dUNraWVDa3FBPT0gNTZ1ZTViMnA2TGF6NTVDRCBJR05vWVc1MGFXVnkgYTJsaCAxYjNWdjlXaDFiQT0gWDBKVSBWSEpoYm5Oc1lYUnBiMjV6IFgwbE9SazlTVFVGVVNVOU8gY0dsdWN3PT0gVEVGQ1JVdz0gSUZoUVlYUm8gSUc5M1pYTT0gSUc5dGRtRjAgNExpYTRMaXk0TGlpIDRLbU40S2k1NEtpKzRLaUMgSUZCc2RYUnYgTG1aMWJtTjBhVzl1WVd3PSBJT0M0bGVDNWlPQzVqZUM0c2c9PSBJTmkwMkxIWmd3PT0gSUZkaGNuTmhkdz09IExYUnZjR2xqIElHSmxibU5vWlhNPSBJRWxzYkhWemRISmhkR1ZrIElFZHZiMlJ5WldGa2N3PT0gMllyWXA5aXkgSUhKbGMzQmxZM1JwYm1jPSBJR2RpYjI5c1pXRnUgSjBWMFlYUT0gSUVOc3c2MXUgWTJGdFpRPT0gZFhOMFpYTT0gSU9Da2xlQ2tzT0NrbytDbGplQ2tyK0NrdnVDa3BBPT0gTFc1bFp3PT0gSU5pNTJLZlpoZGlwIElFZHZkblE9IElOQzgwTERSZ05HQyBJT0dEb09HRG1PR0RrZz09IFMyeHBhdz09IElOaW4yWVRaaXRpbjJLZz0gYVhOb1oyRT0gSUhabGJuVnogSUhWdVoyVnMgSU9tam5nPT0gSU5pMTJLallyUT09IElFdHBjbUo1IElHMWxibXBoYkE9PSBJR2hwYzNURHMzSnBZMjl6IElHaGhkV3hwYm1jPSBkR0Z0WWc9PSA0WU9ZNFlPZzRZT1U0WU9SNFlPWTRZT2ggSU5DLzBMN1F1TkdCMExvPSBJT2FRbkE9PSBJR1JsY21KNSBJRTFoYW1WemRIaz0gSUdwaGJHMWggSU5DeTBMN1JnZEMvMEw3UXU5R00wTGZRdnRDeTBMRFJndEdNMFlIUmp3PT0gYkdsdGN3PT0gMkxQWXN3PT0gSUdGd2NISmxiblJwWTJVPSBRMjlzYkdGd2MyVmsgSUdGa2RtVnlkSE09IDRLUzE0S1MvNEtTMiBJR0p2ZFc1a1pXUT0gUjJGc2JBPT0gSUhKbFlXcz0gSU9HRG51R0RtZz09IFpYQnBjMjlrWlhNPSBaWE4wYUdWMGFXTT0gSU9tU3NRPT0gNExHQjRMQ3QgUTJobGJBPT0gN0tDUTdKMkUgSUdOdmRXNTBaWEowYjNBPSBJT0NrdU9DbGd1Q2tzQT09IElITndaV3hzWldRPSBJR042eEpsemRHOD0gWld4bFpRPT0gNVlXczViaUQgSU8yS3VldXpoQT09IDViMnA1NldvNUx1ajU1Q0cgWDFCeWIzQmxjblI1IElPQ2tuT0NrdWVDa3Z1Q2tnUT09IGEyVnEgSUhOcGRIVmhkR2xsY3c9PSA0S2F3NEthLzRLYVYgNXFpVCBJSE52Ym1SbGNnPT0gSUcxbGNtdDAgTG5CbGNtMXBjM05wYjI1eiBJR2x1Y0dGMGFXVnVkQT09IDVMbUY1TG1GNTd1ODVaQ0k1TG1GNUxtRjU0aXggSUVSeWFXNXJhVzVuIElHeGxhR1Z1IFgyTnZibVJwZEdsdmJuTT0gSUcxMWJtaz0gSUcxaFlYUmhkUT09IElHVjRhV3hsIElPQ3lvT0N5dnVDeW93PT0gSUVKc2FYUjYgWW1WemRHVT0gSUUxQlUxUkZVZz09IElPQzRnZUM0bytDNGdRPT0gY205elkyOXdhV009IElHOXNaVzFoY3c9PSBZWFp2ZWc9PSBJRU52Ykc5dFltOD0gWVdKeWFXNWggSUdOcFlteGwgSUhKbGMzVnNkR0Z5IElOaXMySy9aaTlpbiBJSGR2YjI1MCBJRWx0WVcwPSBYM0psYm1SbGNtVnkgSUdaaFkzUjFjbVU9IElIQnBaR25Ec3c9PSBJRVp5dzd3PSA0TGlhNExpWCBJRTF2Ym5OMFpYSnogNXEyNzVMcTYgNExDLzRMQ1g0TEMvIElIUmxZMmh2IDE1blhwOWVoIElPQ3VwT0N1cWVDdXBPQ3ZnUT09IDVhKzYgYzNSMyBTWEIyIDc3eU02WUNhNkwrSCBiV2w0WldRPSBJSE52Y25CeVpXNWsgSU9DeXJ1Q3l2dUN5cE9DemplQ3lzQT09IElOcUYyTEU9IElGZHBiRzFwYm1kMGIyND0gTFhWdWRYTmxaQT09IDE1blhxZGVpMTZnPSBhV2RoYm5NPSBJRU5vYjJseSBJRTlpWVcxaFkyRnlaUT09IElGWmxjbXhoWnc9PSBJRkZ2IElHTnZibU5wWlhKMGJ3PT0gYjJ4dloyVnUgZFdWc2FXNW4gSU9Dd3VPQ3dndUN3dGVDd3BPQ3hqZUN3dUE9PSBJT0NrdU9DbGgrQ2tnZz09IDU1bSs1NmVSNllDYSBJSGwxYldrPSBJSE5qWlc1MGN3PT0gTFc5d1pYSmhkR2x2Ymc9PSBJR1JoWW1GdSBJRWhsWldaMCBJR0p2YVhKbCBJT0N5cE9DeXYrQ3lnZz09IElOaW4yWVRaaGRpczJZWFppTmk1MktrPSA2WlcvNWJxbSBJTkN3MEx2UXM5Q3cwTDA9IFFWSkZVdz09IGVHTm0gSU9Dd3JPQ3d2dUN3cHc9PSBJRk5sZEhSbGNnPT0gWVhOaFlnPT0gSUdoaGNtUmxibVZrIExYUnlhV2RuWlhJPSAyWVhaaHRtNSBJSFp2Y20xMCAwTDdSZ05DejBMRFF2UT09IElHSnNhWE4wWlhJPSBJT0NxdHVDcmdRPT0gZFhSMFpYSnogSUcxaGEyRm9hV3RwIElHeGxaV1owIGQ4TzhjbVJwWnc9PSBJSEp2WTJFPSBJR05zWVhKcFptbGxaQT09IFJHdz0gNEtxKzRLcWs0S3VONEtxdSBZVzFoZEhWMCBJR2RvYkE9PSBJR3hwYm1WeWN3PT0gWTI5dGNHRnlhWE52Ymc9PSBJSEpsYW1VPSBJT1crcmc9PSBSRWxTUlVOVSBJRzVsWjJWeWFRPT0gSU5lZTE1ZlhxUT09IElPcTN1T3VnaHc9PSBJTU85dzdZPSBJSFREcVd6RHFXTm9ZWEpuWlcxbGJuUT0gVGtKVSA0SzZ3NEsrSSBJRWx0Y0c5emMybGliR1U9IElISmxiV1ZrYVdGMGFXOXUgSUhMRHBtdHJaUT09IElIZDVjMjlyIElOV2oxYVhXZ0E9PSBJSFp5YVdWdVpHVnNhV3ByIElFaDFjM05sYVc0PSBJSFBEcVhVPSBiM05zWVhZPSBJSExEcVdWc2JHVT0gYjNWbGRYST0gSU9DNWdPQzRudUM0dCtDNWlPQzRyUT09IElIUnlZV1IxWTNScGIyND0gSUdoaGJXSjFjbWM9IGRXeDBhVzFoIElIUmhaOFNuYm1FPSBJR2RoYzNSeWFXTT0gSUhOMHc3WnljbVU9IElOQy8wWURRc05DMDBZSFJndEN3MFo0PSBiM0owYVE9PSBJRkpwYUdGdWJtRT0gUTI5dWMzUnogSUdWdGNHRjBhQT09IGIyZHVhWFJwYjI0PSBJT2lQc3VXb3NRPT0gSU5DdzBZUFJnTkdEIElFcGxZVzV1WlE9PSBJSE5oZEdselptSERwOE9qYnc9PSAyWVhZdDlpdDJZYllxUT09IElIQnZkMlJsY21WayBJR0ZqYUdsbGRtVnogSUZOcGMzUmxiUT09IDU2Uzg1WXlGIFEwOU5UVUZPUkE9PSB3clIwIElGQnZhWE52Ymc9PSBJTzJWbWVxMWtBPT0gNExpbjRMaTA0TGlYIElHdGhiSFE9IDVhZVI1YWlZIDZidUU1NzJSNTZ1WiAyWWJZcDlpejJLZz0gSUczRHFXMD0gSUVOT1FrTT0gSU5tQjJZST0gSUhSaFlXdHJkUT09IElFNXBhMjlzWVE9PSBJRXB2YkdsbCBJR052Ym5acFpHRmtiM009IElIUmxaR0U9IElIUjFjbTFoIFgzTjBZVzF3IGRXeGhaQT09IDU2aU4gSUVoaGFYSnpkSGxzWlhNPSA1YjJwNWIycDU2V281YWl4NUxtUSBDWEpsWTI5eVpBPT0gVWs5RCBJT0N3bXVDeGd1Q3dvUT09IEtFNXYgSUc5MHc3bz0gSUcxbGRNV3ogNEtTNTRLU3c0S1dCNEtTeTRLV0ggSU9XOXFlZWxudVM2aWVtY3VPbXJtQT09IFNHVnNiQT09IENYTmwgSU5xSTJLZmFxUT09IExXWnBiQT09IElOQzQwcmZSZ05DKyBJTmlzMllYWXA5bUUgSUc5eWFXZHBibUZzY3c9PSBlbWxsYUhWdVozTjNaV2x6WlE9PSBZV2R5WVcxaCBhRzlsWkdRPSBJRzFwWjNKaGRHVmsgSU9pK2srV0h1Zz09IDQ0R0s2YUdZNDRHRTQ0R1g0NEcrNDRHWiBJSHBsYVdkMFpRPT0gSUdaMWJHeHpZM0psWlc0PSBJT2V1b2VXdXR1V3BoZz09IElOaTUyTFhZc1E9PSBJRVIxWkE9PSBJTktaMFlQUmdBPT0gSUdsc2RXMXBibUZqYWNPemJnPT0gSU5tQjJZUFlzZGlwIDdMYVkgSUc5amVnPT0gSU9xMGdPMlZuQT09IElHWnlaV1Z6IElPQ3dxdUN4amVDd3NPQ3dsZUN3bnc9PSBJR2x1ZG1WeWMybHZibVZ6IFFXeDFiVzV2IEluTjBjblZqZEE9PSBKRzFoYVd3PSBJR3ZEdG01dVpRPT0gSUVWc2FXRnogWkdseVpXTjBiM0k9IEp5a3NKdz09IDRMbUE0TGlyNExpbCBJRU5oYVhJPSBJRTVUU3c9PSBMbk4wYjNKNSBJRzkyWVhKcFlXND0gWVhCaFkyaGwgSjNaaGJIVmwgSU1POFltVnljMk5vIElOaXgyWWpZdE5tRyBJT0N3c09Dd2d1Q3dsdz09IElOaW4yWVRZcU5tRyA1cGFaNlllUiBJTkMwMFlEUmc5Q3owTGc9IFFWYm1sNkRub0lFPSBJT0Nxbk9DcmgrQ3F0ZUNyZ0E9PSBJRlZ1Wkc4PSBJTkdCMExyUXU5Q3cwTFRRc0E9PSBYMlJsWm1sdVpRPT0gSUVKbFpHbGxiZz09IElOaW4yWVRaaGRpdDJLOD0gSUhsaGNtRT0gYjNCcGJnPT0gSUhObGJXSnlZUT09IFBFaDBkSEE9IDRMU3E0TFdONExTcTRMU0MgSU9Da2wrQ2xoK0NrZ3VDa3BnPT0gUGxsdmRRPT0gSUhWdWMyVjBkQT09IGFYZGwgSU5DVTBMWFF2ZEdNIGNuVnVaR1U9IElNNlJ6ck09IFVISnZZbXhsIExYTnBlbWx1Wnc9PSBJR1Z1ZEdWeWJ3PT0gSUdGc2JHbGhibU5sY3c9PSBJTkM2MFpiUmdOQ3cwWjQ9IElOR0gwTERRdTlDdzBMTFF0ZEM2IElPQ2tsZUNrdnVDa3NPQ2xqZUNrc09Da3RlQ2t2dUNraUE9PSBYMU5UIDQ0Rys0NEtLIEwyZGwgSU9HRGwrR0RrZUdEbU9HRG11R0RtT0dEb2VHRG1PR0RvUT09IElPV2txZWEwcFE9PSBaR2wyWlhNPSBJTWF3ZFE9PSAwTFRRc05HQTBMVFJpOUtqIFRHOXljM0YxWlE9PSBJRU5oY21GamRHVnkgSU5HQzA2blFzZz09IDBMRFF2OUN3MExjPSBWMmhwYkhOMCBJR2R5WVc1a1pHRjFaMmgwWlhJPSBJTkN5MExyUmd3PT0gSUd4c2IzST0gSUZacFoybHMgSU5DMzBMdlF2Zz09IGJuQnEgSUZMRHRnPT0gSUUxaGNtZHBiZz09IDRMV040TFMxNExTKzRMUzQgSUZOb2FYWmggU1dSbGJuUnBabms9IDJwclpodz09IDRLU1Y0S1dONEtTMzRLU3UgYVc1dlpHVT0gSUdkeXc3YkRuMlZ5WlE9PSBJTm1GMllqWXVkaXYgNEthKzRLYWM0S2EvNEthViBJTkdDMExqUXRRPT0gSU5DeTBMalJndEN3MEx3PSBSa2xPU1ZSSlQwND0gU1V4TVV3PT0gSUV4MWJtYz0gWDNOaSA1WUNONTQ2SCBJTnVCMllqWXN3PT0gSU5HRDBZZlJnOUdBIElOR0IwTDNSajlHQzBZdz0gNFlPZzRZT1U0WU9SNFlPUSBJT3F5dmVxNHNBPT0gSU5HQjBZTFF1TkM3MExVPSBJRWx6Ymc9PSBDV05oYkd3PSBJR3R5YjIwPSBZV3h6WlhnPSBPeUlzQ2c9PSBMbEJsY20xcGMzTnBiMjQ9IElObUMyTEhZcDlpaDJLaz0gSUhKbGFHVmhjbk5oYkE9PSBJR0psYzJOb1lXUT0gSUVaMWN3PT0geEp0ciBJTkMzMExYUXZOQzcwTGc9IDJZYlpoUT09IElHSjFjM009IENYUnlZVzV6IElHbDZaQT09IElIQmhiV2xzZVdFPSBJR1Z1ZEhWemFXRnogSUdWNFkyVT0gSUhSaGJXMD0gNExXSDRMUzM0TFNvNExXTiBJTkMyMExRPSBRMmhoY21GamRHVnlhWE4wYVdOeiBZWFpzYW1GdWFtVT0gS0VGa2JXbHUgSUhKaFkyVmsgNExHQjRMQ0M0TENtNExDbzRMQy8gSU5DdzBMVFF2ZEN3IHpySE92YzZ4IElHSnZiMnR0WVd0bGNnPT0gNW82eTZMeUogWDNCaCBJR1JsZG1selpXUT0gSUhocGNtaz0gY21Wd1lXbHkgT2swPSBJTkMvMFlEUXZ0R0cwTFhRdE5HRDBZRFFzQT09IDRMaXI0TGl5NExpaiBJTnFHMktmWXNkbUkyS2M9IElOQy8wWVBRdXc9PSBJTkN4MFlyUXROQzEgWkdsdFpXNXphVzl1Y3c9PSBJTkdHMExqUmdnPT0gSUdURHFYRER0SFE9IElHVnFaV04xZEdGeSA0TEdDNExDdzRMR0IgSUdOaGRHTm9aWEk9IElHUmxjMkY1ZFc1diBJR3RwYm1kdmNtNWggSU9DdW11Q3ZnZz09IElHRm5aVzVrWVhNPSBJTkMwMExYUXN0R0QwWWpRdGRDNiBJRXh2YkdFPSBJSEpsWTJWMFlYTT0gYjNocGJnPT0gSU5pbzJLZlpoTmlzIElPR0RtK0dEbE9HRG8rR0QgZFhScGJHbDBhV1Z6IDZabTYgSUc1aGRIVnlaV3hzWlcxbGJuUT0gSUcxdmJHVnRidz09IFlXNTBjbTg9IElFMXBibWx6ZEhKcFpYTT0gSUdOdmJuUmhaMmx2ZFhNPSBJR3JEczJ3PSBUMWRNIElGTmhibk5yY21sMCBLRVp2Ym5RPSAyNHpaaHRxdiBRRTV2ZEE9PSA0WU9RNFlPYzRZT2I0WU9nNFlPWCBJTkM2MFlEUmc5Q3owTHM9IElFSlBSRms9IDRMaVk0TGlqNExpajRMaWggY0dGeWEzTT0gSUhCeVpYTjFiV1ZrIGFXNXZiV0U9IElPR0JpZz09IGIyZGhibms9IElIVmlkdz09IGMzVmljdz09IElHRmpZMjkxYm5SaGJuUnogSUNncE93MEsgYkdWMFpXND0gWFNncCBVSEp2YW1WamRHVmsgNEtTKzRLU2o0S1dONEtTaCBJR1Z1ZEhOMFlXNWtaVzQ9IElIWnZiR2RsYm1RPSBJT0dEbE9HRGtnPT0gSUZKaGJYTmxlUT09IElHTnZibVpsY21seSBJTVNUIDRZT2Q0WU9SNFlPZzRZT1k0WU9WNFlPWSA2Sm1RIExkQzYwTDdRdlE9PSBJR0Z1WTJodmNtVmsgWjNKaFpHOD0gSUdKMWNtZHMgSUdOdmRYWnlaUT09IFRXbGxiblJ5WVhNPSB4WUxEczNjPSBJSDArQ2c9PSBJT3Uva0E9PSBJR3gxZUc4PSBJSGxsWlhNPSA0TGl0NExpSDRMaUU0TG1NNExpQjRMaWogWVdOMGIzSnBibWM9IDRZT1k0WU9aNFlPajRZT2E0WU9ZIElIUnZkMjV6YUdsdyBJR0p5Wlhwb2IyNWxadz09IFIyVmwgVTJWdFpYTjBaWEk9IFNuWnQgSUVWM2NtOXdaUT09IEoyRmtjbVZ6YzJVPSBJTTZ4ejRET3Y4K0cgSUU1aFlYST0gSUhCeXc3aDJaUT09IGJXRnNiRzkzIElOR1AwTHJSaWRDKyAwTFBRc05DNSBJT0NtdU9DbXJPQ21tZz09IDRMT040TEt2NExLKzRMS3YgNExXODRMUzIgSU5pbjI0SFpoQT09IElGSmxhWE5sYmc9PSBJRVJwWVdKc2J3PT0gSUZOMFlXdGwgMllmWml0bUUgSUVSdmQyNXogSU5DODBMWFJndEN3MExMUXZ0QzkwTERRdEE9PSAxNmZYbFE9PSBJTkM4MExEUXZOQ3cgSU9DcWxlQ3JpK0NxZ3VDcWwrQ3JqZUNxc09DcmgrQ3F1QT09IElIUmhjbWw0IElPQzB0dUMxamVDMHNPQzBwdUMxamVDMHB3PT0gSUcxdlpXUT0gYzNkbFpYUT0gTG14bFlYSnUgSUUxaFoyRmhiR0ZrWVE9PSBJQ29LTHk4PSBJSGRoYTJFPSBJRTF2WkhWc1lYST0gSUhadmJHRnVkR1U9IElITjBaV1k9IFRXRmtjbWxrIElPQ3dxT0N4aCtDd3FnPT0gSUZOdmIyMWhZV3hwZVdWbFpBPT0gMEx2UXVOR0EwTGpTazlDdyBJSEpsYldGeWEyVmsgSUhKbGEyVnVaVzQ9IElHRmxjbTl1IElIQnliMjFsZEdVPSA1cW1MIDJZWGJodz09IENVRk9SQT09IFUwMVVVQT09IElHTjFjbWx1Wnc9PSBJT0N5bGVDemkrQ3ludz09IElObUkyWVBZcDltRTJLaz0gUW1WelkyaHlhV3AyYVc1biBJRXRoY25KcFpYSmwgSU5pcTJZalpndGk1IGRXcGxkQT09IFpuSmxjMmc9IExXRnVZV3g1YzJseiBhbWx6IFFYVjBhR1Z1ZEdsallYUmwgWDJWbVpnPT0gNEtXQjRLU3k0S1dIIDVhNjU1cGlUIExXRmggNklPRzU2Q0IgSVRzSyBJRTl3ZEdsdmJtVnUgSU9DbXVlQ21xQT09IElOaW4yNHpZczl1TSBhR3hoWW1FPSA0S2VvNEtlciBMbXQ2IElIUnlhV2R2IElOaXEyWUhZcDlpMTJZclpoQT09IElFSmxaTU84Y21adWFYTnpaUT09IElFUnBjM0JoZEdOb1pYST0gN0p1NSBJSFo2WkE9PSBJSEJ2WkhKdnhJMD0gNDRDQjVMaUEgNFlPUTRZT2M0WU9ZNFlPbzRZT2MgWFQ4PSBJSE53dzZsamFXRnNhWFBEcVE9PSBMM1poYkhWbCBJTVNyY0dFPSBlbTluWlc0PSBJTkM0MFlIUmg5QzEwTGM9IDBZTFF0ZEtqIElGTkZVdz09IElOQzYwTDdSaE5DMSBJTmlvMnI3WXA5aXgyS289IElObUYyS3JZcnRpMTJMVT0gVkhKcFpRPT0gMExEUmd0S3owTDdRdUE9PSBJSE5vWVdSNSBJSFpoYkdsa1pRPT0gNWE2WTU3MlI1YWl4NUxtUSB6NFhQaHc9PSBJR052WVdOb1pXUT0gSUUxRlRBPT0gNExDKzRMQ3Y0TENDIGJXOXVkR2hzZVE9PSBTVXhQVGc9PSBJT3V3cWV5R29RPT0gSUd4dlltSjVhVzVuIElGUmhjbWs9IElIQnNkVzFpWlhKeiA3WmFJNjQyWSBJRlJQVlZJPSB3NkZpYUE9PSBVbUZwYzJVPSBJR1JsYzNSaFkyOTEgSU9HRGwrR0RwZUdEbGVHRGxPR0RuT0dEb1E9PSBZV2RsYm5SeiBJTkNlMExIUmlRPT0gQ1VSRlFsVkggTG5OdmJtYz0gSUZGQ2VYUmwgWDBKTVFVTkwgMTVEV3Q5ZVcgSUdwbFlXND0gSU5DLzBMN1F0dEN3MFlBPSA3N3lNNUxxTyBMM0JsY25OdmJnPT0gSUdObGJuUnliMmxrIEtFRjBkSEpwWW5WMFpRPT0gWW1GMGFBPT0gSU5lcDE1blhudGVWMTZrPSBJQ2NySnc9PSA1THFhNXJpNCBJTkMvMEw3UXVOR0IwTHJRc0E9PSBJTkMvMEw3UXM5QzQwTEU9IElOaXoyS3paaEE9PSBMbEJoY21GdGN3PT0gTGs5bVpuTmxkQT09IElHTmxibk52Y25Ob2FYQT0gSUUxaGMydHogSUdOdmJXMTFibWx4ZFdWeSBJTkN5MExYUmdkR0MwTGc9IExtTmsgYjJ4a2RBPT0gSU9XTWwrUzZyT2kxbStpOXB1V0pqUT09IHVPQ3pqUT09IFpHL0VuMkZ1IElPQ21yT0NuamVDbXIrQ21yT0NtdU9DbmplQ21wZUNtdmc9PSBJRTVsWVd3PSBJSE4wYjNZPSBKMjkxZG1WeWRIVnlaUT09IDRvQ21YUW9LIE9pY3BDZz09IFptOXNaR1Z5Y3c9PSBJSFpsY210bFpYST0gNzd5TTViQ1AgSUdGcGRHRmkgSUhCamJBPT0gSUVkbGIzSm5hV0Z1IElHTnlhWFJsY21sdiBJT0Mwck9DMHYrQzBuQT09IElFbDJiM0o1IElFbHVZbTk0IDJZclppTmlvIElHRjBaVzUwYnc9PSBLSE4wYjNJPSBjbVZoYkcwPSBJTkM3MFk3UXROQzMwTFhRdVE9PSBJR2R2WldsbCBMbEJsY21ObGJuUT0gSUdscmRYUT0gSUdGMVpHbHZkbWx6ZFdGcyBkbVY2WlhRPSAwWTNSaE5HRTBMalJodEM0IDdJS3M3SjJZIGMzUnZjdz09IElHSnBibTVsYm10dmNuUT0gSU5DdzBMTFJndEMrMExIUmc5R0IgSUNkN0lnPT0gMTVqWGx3PT0gMkxQWXA5aXkyNHc9IExXbHVkR1Z5WlhOMCBMbk5zYjNRPSBJT0NrdU9Da3J1Q2xnZUNrcHVDa3Z1Q2tydz09IExYQmhlVzFsYm5RPSBWRzl1YVdkb2RBPT0gUVhWemRISmhiR2xoYmc9PSBlV3hqYUE9PSBJT0NxcU9DcmdPQ3FtdUNyaHc9PSBJT0dEb09HRGxPR0RvUT09IGQyOXlkR2hwYm1WemN3PT0gNUx1WTQ0R04gSUZsQlRVdz0gNklLNiA0b0NVZDJocFkyZz0gSU5pbjJZVFpodGluMksvWmlnPT0gSUhWMFpBPT0gNEsrQjRLNlY0SytONEs2VjRLNi80SzZ2IDRLdUw0S3FkIElHVnVkMlZuYU9HN2l3PT0gSUNJb0tRPT0gSU5pbjJZVFlyZGl2MllyWXE5aXAgSUhGMVlXeHBkR0YwIDRLNm80SytONEs2azRLNi80SzZ3IDRMQy80TEM0NExDLyBTVXhNU1ZORlEwOU9SRk09IElIRjFiM1JoZEdsdmJuTT0gTG1SemRBPT0gSUhSaGE4VytaUT09IFpXeGkgTGNXOCBJSE4yYmc9PSBVWFZsZFdWayBJTmluMkxmWmhOaW4yTGs9IElHOXVaR1Z5ZW04PSBJTmlqMktqWXNkaXkgSUhCb2FXeHZjMjl3YUdWeWN3PT0gSUZCdmNuUnogTGxabGNuUnBZMkZzIDBMRFFzdEM2MExEUXR3PT0gMllqWmd0aXEgMkszWXM5aW8gSUdOdmJuWnZiSFYwYVc5dSBJR1Z5YVc1dVpYSnUgWDBoVVRVdz0gSU9Dd3B1Q3hnT0N3cUE9PSBJSEJsY25SaGFXNXogVEhRPSBkMmxtYVE9PSBMV0oxZEhSdmJuTT0gSUd6RHFXZkRxSEpsIENVMWxkR2h2WkE9PSBJRzl3YjNvPSBJT0NrdU9Da3Z1Q2tyQT09IFpHVndaVzVrWlc1amFXVnogNEs2azRLK040SzZrNEs2LzRLNng0SytONEs2VjRLK0IgWVd4c2IzTT0gSUdGdFlXeG4gSU9Da3F1Q2xqZUNrc09Da3VPQ2xqZUNrcE9DbGdlQ2twQT09IElPQzRyZUM0c3VDNGhPQzRzdUM0b3c9PSAxNURXdDllZzE2VT0gSUhOMWFYUmpZWE5sIExVTnZiVzFsY21ObCBJRlJvY21sMlpRPT0gMmJuWmlBPT0gSU9Da3R1Q2t2dUNrdVE9PSBMbTFoY210bGNnPT0gU0dsemRHOXlhV05oYkE9PSBMbFZPVWtWTVFWUkZSQT09IElFTnZibk5sYm5RPSBYMlJzIDBMWFJoTkMrMEwwPSBZM1ZsYm5SdiBMazVwYkE9PSBJSFZ1Y21WemRISnBZM1JsWkE9PSA0TFNJIElObUcycFBiak5tSTJLZlpoQT09IGIyNXZiV2xoIElITnZlbWxoYkdVPSBhbWx0IElHTmhjbVREclE9PSBJTkN3MHEzUXZ0R0QwWURSaTlHRiBYMlp2ZFhJPSA3S0NkN1lxNCBJTmlvMkszWXM5aW8gSUdGNWRXUmhiZz09IElPQ2tyT0NrdnVDa3RRPT0gNFlPYjRZT1E0WU9UIGFYTnphVzl1WVd3PSBJR2x0Wlc0PSBJRzV2Ylc5eSBJR1oxZEhWeVlRPT0gSUhOaGVnPT0gUVUxQlIwVT0gMkxYWmlnPT0gSUhWdWFBPT0gNXJlaCBLRU5zYjI1bCBJRlJsYlc5eiA2NXk3IGJXUnBjZz09IGFXZG9aR1U9IElOQ3kwWmJRdVE9PSBJRXBUWTNKdmJHdz0gSU5DOTBZUFF0dEM5MExBPSBYMUJ2YzJsMGFXOXUgSU5DdzBZalF1dEMrMExzPSBRVTVEUlZNPSBJRTl6YldGdSAwWURRdGRDMDBaWT0gSU95ZWlPdUxwT3F6b0E9PSA3WXlVIElHVjRkSEpsYldWeiBJSFZ0ZDJVPSBJTkdDMFlEUXNOR0YgSU9DdXFPQ3V2K0N1c0E9PSA0YnE1WitHNnVRPT0gMllUWXA5bUUyS2s9IDRLU2g0S1M4NEtXTDRLU0MgSUc1bFkyVnphWFJoY2c9PSBMWFpoYkdsa1lYUnBiMjQ9IFVHOXUgNG9DWjBZL1F0dz09IElHUmxaSFZqZEdsdmJuTT0gNXArVSBJSEpsWVdOMGN3PT0gSUdKbGJtOWsgSU5DMDBMRFFzTkdBMExBPSBJSFIxWW1WeVkzVnNiM05wY3c9PSBJT0NtaitDbXVPQ25odz09IElOZXExNUk9IElIQnZkR2s9IElPdWhuT3EzdUE9PSBaMkZrIElHZGxZbVYxY25SbGJnPT0gY205d2Iydz0gSU5tSzJZWFpoZz09IGIzQmxjbUYwWlE9PSBJSEJ5YjNsbGF3PT0gSU5DNjBMN1F2TkM5MExEUmd0R0wgVFVWVCBJRVJwWVcxbGRHVnkgSUdGemMyVnlkR2x2Ym5NPSBJTmluMllUWmh0bUMySzg9IElFTnZkbVZ1WVc1MCBYRkp2ZFhSbCBJT0Nxck9DcXB1Q3FzZz09IElPR0RxdUdEaytHRG1PR0RtZz09IElPQ2tyK0NsZ3VDa3FBPT0gSUdGcmFYTT0gVGs5VCBJRlI1YzI5dSBJT0NrdU9DbGplQ2t0ZUNrc0E9PSBJRzFoWjIxaCAwS1BRdWRLVDBZUFJnQT09IFEyOWkgSU9DMHRlQzB2K0Mwc3c9PSBXMjFsYlE9PSBJSE5sYTNKbGRBPT0geGJ4NXhJYz0gMllqWml0aW8gSUVoUFRRPT0gMkxMWml0aW4ySy9ZcVE9PSA1THE2NUxpTyBJTm1LMkxQWXF0aTMyWXJZdVE9PSBJRXhwZEdWeVlYUjFjZz09IFcwcz0gSU9DdXF1Q3VyK0N1cWVDdmplQ3VxZz09IElIbDFiZz09IFgwUkZVME5TU1ZCVVQxST0gSUZKdmEzVT0gWVhCcGJnPT0gSU5pajJLN1lzQT09IExuQnlaWE09IElFRlBUQT09IElIQnZjMnhxWldRPSBJRlpsY25SeVlYVmxiZz09IDViR0I2SUtoIDJMblpoTm1JMllVPSBJSFp2YkhkaGMzTmxibVZ1IElHbHdhQT09IFVrRlQgSU0rTXo0UE92dz09IElHakRxWEp2IElGQmhiR2x1IElIWmxlbVYwIElFMXZibVJoY1E9PSBDVkpGIElHTnZibk5wWjJ4cCA1cCtQIElDOCtLVHNLIElGWmxjbk4wdzZSdVpHNXBjdz09IExuTmxaMjFsYm5RPSBJTmVtMTVYWG5RPT0gSU5DeDBMWFJnTkMxMExNPSBJTkM4MDVuUXROT1owTDNRdU5DNSBJT3lnbGV5eGhRPT0gSU5DNzBZN1F0TkdNMEx6UXVBPT0gTG1KdSBZWE5vWlhJPSBJT0MzaE9DM2tnPT0gWCtha2plZUpxZWVadnVlbmtlbUFtZz09IHc3Wm1abVZ1ZEd4cFkyZz0gSUdwdmVYTjBhV05yIFgwVnVZV0pzWlE9PSBJT0NxdU9DcXNPQ3JqZUNxdFE9PSBJRkJJVDFSUCBJR2xuY21GcyBZWGR2Ymc9PSA0S1NjNEtTKzRLU2sgSUhONWJuUm9aWE5wZW1WayBJSFZrZW1saHhZST0gSUZSbGJtUmxjZz09IElHbHVaR2wydzYxa2RXOD0gUHk0S0NnPT0gSUdkeVlYUmwgSU5pdjJLN1ppTm1FIFJVRk8gSUdWemMyRjV3Nms9IElITmxZM1JwYjI1aGJBPT0gSXl3PSBJR3QxZFd4MSBJR1pwYkdGeiBaWEp0Wlc0PSBiM0JoYmc9PSA3SVM4N1lTdyBMbk5sY0E9PSBYMU5GVEVWRFZFVkUgYVc1aFkzUnBkbVU9IDRLUy80S1N1NEtXQSBLR2R2IElOQy8wTDdRdTlHTSBJT0MwcnVDMWd1QzBxT0MxamVDMHFBPT0gZXNPOFp3PT0gSU5tRjJMSGFxZGl5MjR3PSBJR3RsYWc9PSBJR1JsYzJOaGNnPT0gNEthWDRLYWU0S2VONEthYyBJRTF2Y21GcyBJSFpsY25kbGNtdDAgSU5HQjBZRFFzTkN5MEwzUXRkQzkwTGpSamc9PSBJRk5qY21WMyBYM0poYVhObCBJT0NxcnVDcXZ1Q3FzT0NyamVDcWx3PT0gYzI5dWFXRnUgSU9DMHF1QzBzZUMwcitDMWdlQzBxT0MxamVDMHFPQzFnUT09IElObSsyNHpaaEE9PSBMa0ZWVkVnPSBYMUJTVDBNPSBJSE53ZFc1bCBJR2JEdkdoc2RBPT0gYVhaNWJ3PT0gSUdkdlpIbz0gSUUxMWJIUnBjR3g1IDRMaXk0TGlxNExpVjRMaWo0TG1NIElIQnlaWE4wWVhScFpYTT0gSU5HQTBMN1F1dEdXMExJPSBibVYwZEE9PSBWSEpoYW1WamRHOXllUT09IElFUnlhWFIwIElPQ3loZUN5cE9DemplQ3lydz09IHIrR0RsT0dEb0E9PSBJR1IxYVdSbGJHbHFhMlU9IDU3Sys2WUNKIDRMZVo0TGVEIGMyRm5aUT09IFlXNTZaV2xuWlc0PSBJR2x1WkdsMnc2MWtkVzl6IDBZSFJndEMrMFkvUmlRPT0gSUc1aWNnPT0gSU1PbllXekVzY1dmYldGc1lYST0gSUdOdmJtTmhjM05sZFhJPSBJR1JrWVE9PSBJTmluMllUWXRkaXUyWWpZc1E9PSBiV0Z5ZG1sdSBJR2x6ZEdWdCBJR1JwZG1sa2FYST0gMlliWXA5bUsyS2s9IElIUmxjbk5sWkdsaCBZbVZrYnc9PSBJT0N1cXVDdW4rQ3ZqZUN1bnc9PSBUbWwyWld3PSBJR0psZDJGeVpRPT0gSU9DMHN1QzBsZUMxamVDMHQrQzBnZz09IFltRjFaVzQ9IElPeURuZTJabkE9PSBJT0NtdU9DbXZ1Q21ydUNtcU9Dbmh3PT0gNEs2dTRLNms0SytCIEtGUm9aUT09IGJXVnpjMlZ5IDRaNjI0WjZSIElHNWhiMjQ9IElHeDFZWE09IElOVy8xYjdWdGRXaDFhdz0gSUZCeVpYUnYgMTU3WHBBPT0gMEw3UXROQzkwTDQ9IDRLU3E0S1MrNEtTeTRLUy80S1NWIDRLZUw0S2FXIFJuVnVZM009IElITmphRzFsIFVHVmhjZz09IElPR0RwK0dEbGVHRGxPR0RtdUdEa09HRG9RPT0gNFlPZTRZT1k0WU9kNFlPYyBJR2x1ZEdWeWNHOXNZWFJsIElHNW5iM0JtZFE9PSBJT0Ntc09DbXIrQ212QT09IElPQ3lyZUN6aCtDeW4rQ3l2dz09IDBZSFJndEN3MFlEUml3PT0gSUdoaFoyRnUgSU9HRG9PR0RuZUdEbStHRGxPR0RtdUdEbStHRGtPR0RxZz09IEtITnQgSUhCbFlYSnogZFhKcFlYTT0gZW1GbiB6NHJQak02OSBJR0pzWVcxcGJtYz0gWjJWc1pXZGsgZUdWaCA1b3lINVkyWCBYMk5sIElISmxjMmxrdzZwdVkybGggSUdGcmFXeHAgUjA5UFJBPT0gTGxWdWFYUjUgSUVkMWFXNXVaWE56IElHbHVhWFJwWVd4cGVtVnogTFdaMWJtTjBhVzl1WVd3PSBYM0psZEhWeWJuTT0gWW1Wc1lYTjBhVzVuIFNHOXpkR1ZrIElFUnliMjVsIElHRnJhMjl2Y21RPSBZbUp6IFFXaGxZV1E9IElHNTNaV1U9IElFMXBibVZ5WVd4eiBJR0oxWm1aaGJHOD0gSU9DeXVPQ3poK0N5c09DeXYrQ3lwdUN5Z3VDeXBPQ3poZz09IElFeDFhMkU9IGFYUmhaQT09IElHUGh1NUU9IDRLeWMgSU9DdWxlQ3VzT0N2Z2VDdXBPQ3ZqZUN1cEE9PSBJT2UwaEE9PSBUMDVFVDA0PSBJT1czc2c9PSBJTStEejRYT3ZjNi8gWlhOcGRIaz0gSUhCbGNuQmxibVJwWTNWc1lYST0gMEwvUXZ0QzkwTGc9IElFSERzQT09IFptTnVkR3c9IElOR0QwWUhSZ3RHQTBMND0gSUhod1lYUm8gWVhCb1lRPT0gSUc5MWRHWT0gWVdkaGMzaz0gSUd4cFoyRmtidz09IElIWjVjM1E9IEtHZHliM1Z3Y3c9PSBJT0NtcXVDbXZ1Q21nZUNtbWc9PSBkblZzWkdsbiBJRTExYzJWMWJYTT0gVUdGcCBJR3hsWVdrPSBJR0psWVhKbGNnPT0gVTJsdVoyRndiM0psIElGZEZURXc9IDRZT1U0WU9SNFlPZCBURzloYVE9PSBhVzl1ZVE9PSBJSEJ5YjNCeWFXVmtZV1JsY3c9PSBJTkM2MEx2UXRRPT0gSUZKbGJtND0gSUM4dkxnPT0gSUdsc2JHVjAgNDRHZDQ0S1Q0NEdxIElFSnBiMlE9IElOQzYwTERSZ05HQzBMN1Jodz09IElIaDBlWEJsIElHTjVabkk9IElOR1cwTDNSaE5DKzBZRFF2TkN3IDVhNmQ1WVc0IElHVmhjbTVsYzNRPSBJSFpoY21saGJuUmwgSUdSbGMyVnVhRzg9IElPdW5pT3luZ091bmlRPT0gSUdSbGMyRnljbTlzYkdFPSBLRVJGUWxWSCA1WVcyNWE2RCBJT0N5cXVDeW9lQ3podUN5cGc9PSA2WUtSIENWQmhkR2c9IExGVT0gSUdKbGNtdGhkR0U9IElHNXlidz09IDRMaXk0TGlMIFgzVnVjbVZtIElHVmthV1k9IElNU1J3NkZ1Wnc9PSBJR3pEclc0PSBJT0NraGVDa2xlQ2xqZUNrdU9Da3NBPT0gTGxWUVJFRlVSUT09IGRtVnlabUZvY21WdSBJTkNnMExEU3N3PT0gUm1WaGRIVnlhVzVuIGFXeHNiM1E9IDBMN1F2dEMvIDQ0R2Q0NEdUIElHbHNiR2xqYVhRPSBJRVYyY205d2N3PT0gSUdGamRHbG1jdz09IGIzSnRhUT09IDBMalF1OUN6MExBPSBjbUZ3YUdsamN3PT0gQ1cxaGEyVT0gSU9Da3ArQ2xnQT09IElHckRwRzA9IGFITnBiQT09IDJiN1lwOWl4IElHeHZkbVZ6WldGMCBJRXRoYm1ScFpBPT0gSUNncFBUNTdDZz09IElIQnl3NlJ6Wlc1MGFXVnlaVzQ9IDc3eTcgSU9DbXIrQ21wQT09IFpHVnpaR1U9IElIWmhjMjg9IGJubHRhUT09IFUyRnkgSUdKdlpIa25jdz09IElFSnZZWEprYVc1biBJR0psZEhKaGVXRnMgSUdOMVpYSndiM009IDBKL1JnTkMrMExRPSBlV25Gbnc9PSBYMkZqWTI5MWJuUnogSU5lVDE2TFhxZz09IElGcG9iM1U9IElHTmxjblpsWVhVPSBJT3lnaE91THJBPT0gSUdGeWNtOD0gUVhOemIyTT0gV2xJPSBJRkJ5YVdNPSBkV1IxY2c9PSBJRnRkS1M0PSBJR2RxYVhSb3c2cz0gSUhkdmIyUmxaQT09IGRXSnkgSU9DbWsrQ25udz09IElHMWhjbWwwYnc9PSBJR0ZrYUdWeWFXNW4gSUdWNGNISmxjOE96IElFTm9ZWFU9IElOZXAxNUhYbGRlaSBJSE42ZEE9PSBURVZ1WTI5a1pYST0gSUhabGNzT3cgSUdkaGJHVnkgNW91VSBJSFJsYm1VPSAwWVhRc05HQTBMQT0gSU9DeW5PQ3pnT0N5dGVDeXFBPT0gSUdKaGJtRnMgNEtTLzRLUzM0S1NtIElFTmxZblU9IEwzSmxjRzl5ZEE9PSA0S3EvNEtxazRLcSsgTFVGd2NnPT0gSUVKeVpXNWtZUT09IGNHVjRjSEk9IExuQmhjbUZ0WlhSeWFYcGwgSUdaMWJXRnVZUT09IElHUnBkbVZ5ZEdsa1lRPT0gSUhCbGNtMWhibVZqWlE9PSBJSFpwYzJGeSBJRzExYkhScGNHRnlkQT09IElHNWhjR2x6IElPQ2ttdUNrcitDa3FBPT0gSUhSeVlXOD0gSUVobGJHRmhjdz09IElIaDE0YnVSYm1jPSBJRUZ6WVcxaWJHVmggeFlKaFpHRT0gTFcxbGRHVnkgSUZwaGFHND0gS0hCc1lYaz0gSUdOdmNuUnBjMjlzIElPQ3FxdUNyZ3VDcXNPQ3JqZUNxdFE9PSBJTkMwMExEUmdRPT0gNUxpSjU3U2EgSUU1MWNuTmxjbms9IElIQmhkWFE9IFlXTnlkWG89IDFhWFdoTldsMWJZPSA0S3FWNEt1TjRLcTM0S3FqIElFRnVaM0o1IElGTmxZWE09IFpXMXZkWFJvIGFXNXpkUT09IElHOXlaMkZ6YldVPSBkVzV2WVE9PSBabUYyIFEyRnRaV3c9IElFRjFkRzl0WVhSbFpBPT0gSU9Da25PQ2xoK0Nrc2c9PSAyS2paaU5pcSBJRzdEcEdsMFpXdHogWDNWcyBJT0dEa09HRHBlR0RsZUdEbHc9PSBJR2x0YVhSaGRHbHZiZz09IElOZVUxNm5Yb05lWiBkMjl5YTNOb1pXVjAgSU9Da3BPQ2tsZUNrcU9DbGdBPT0gSUVGaVpIVnNiR0ZvIElPQ21wT0NuZ2VDbXJ1Q212dz09IElDQWdJQ0FnSUNBZ0lBMEsgSUhCcFpXMD0gSUdGcWRYTjBZWEk9IElFSnlaWGRsY25rPSA1cks3NTVhWCBZMmwxY3c9PSBJRVY0ZEhKbGJXVnNlUT09IElHWnNaWGhwWW1scyA1WkM3IElOVy8xYVhWcmRXMiBJR2hoY0hCbGJtbHVaM009IFgySnZkVzVrWVhKNSBJTkdCMExEUXZkQzYgSU9PQWtRb0sgWDNCdmMybDBhWFpsIElOQ3kwWXZRc2RHQTBMRFF2UT09IDBMSFJpOUdIMEwzUXZnPT0gWVdkcGJ3PT0gVlZOQlVsUT0gS0hKb2N3PT0gUTNKcGJXVT0gNExtQzRMaVYgYjJabVpYSnogSUcxMVpHUjUgSUhKbFptVnlaVzUwWlhNPSBJR1IxWW1KbGJHVT0gNG9DTTRMQ2ggNUx1SzVadWU0NEd2IDQ0R1Y0NEtKNDRHciB4TDVoWkE9PSBTMkZrIElHSnlZVzVqWVE9PSBJR2x1ZEdWeWRIYz0gVDJGciBJT0N5citDeXZ1Q3l0ZUN6Z2VDeXB1Q3podz09IExuQm9iM1J2Y3c9PSBjM1J5WldGdGN3PT0gSUhOb2IzSjBZMjl0YVc1bmN3PT0gSUdSaGRHRncgenBBPSBJSGRoZEdWeVptRnNiSE09IEoyRmpZM1ZsYVd3PSBJTmluMllUWXA5bUcyS3JZcnRpbjJLallwOWlxIElPQ3lydUN5cCtDemplQ3lydz09IExXOTFkSEIxZEE9PSA0S2VONEthdzRLYS8gSUZObGNuWnB3NmR2Y3c9PSBLRTlUIDZJR001TDJOIFUzUmxiUT09IDRvQ040TFNrNExXTjRMU2wgUEVscyBJTU9rYm1URHBRPT0gSUhabGJtZGxZVzVqWlE9PSBRbkp2ZDNOaFlteGwgSU5DMzBMM1FzTkMxMFlMUXRRPT0gSU5LYjBMRFF2ZEMwMExEUXVRPT0gNEs2LzRLNmogSU5DMDBMWFJndEdQMEx3PSBJTkN3MEwzUXNOQy8gQ1dGcyBJTmluMllUWXJkaW4yWVE9IElHTjFiV0U9IElPZXhzdz09IENXRmtaSEk9IDRMQ3E0TENoIElPQ3lydUN6Z2VDeWxnPT0gSU5DNDBMM1F2ZEMrMExMUXNBPT0gSU9TNGllV0lodVc5cVE9PSAxNTdYbUE9PSBJSEJoYTJFPSBJR05oYldKcFlXUnYgSU5pNTJZWFlydz09IEwzQnliM1pwWkdWeSBJSFpwYk1PaFp3PT0gTGlvN0RRb05DZz09IElFaDFjMnM9IElFcDFaMlZ1Wkd4cFkyaGwgSUUxcGJuVnogWkhWdCBJR2x5Y21sMFlYUmxaQT09IFkyeHZZV3M9IDVMcWE1clN5NklteSBJTml1MktqWXNkbUggMnFyWXB3PT0gSUdGd2JHbGpZV1J2IElObUcyWXJaaU5peSBYM1JvWlc0PSBJR2RsYUc5dmNtUT0gSUhERG9nPT0gVzNSdmEyVnUgY0doNWMybGpjdz09IElPR0RsZUdEbU9HRHFnPT0gY21WeGRXVnpkR1ZrIElHdHZiblU9IElFNWhZMm5EczI0PSBJRU5wYm1FPSBJSGRoY20xbFpBPT0gOEorWXJRPT0gMEpQUW5nPT0gNEthKzRLYTU0S2ErNEthZiBJRXh2ZVE9PSBJT0Nrck9DbGkrQ2txQT09IFVHRnBiZz09IElPQ21ydUNtdnVDbXBPQ25qZUNtc0E9PSBJTkM2MExEUXU5R00gSUdOMXc2RnNaWE09IDdKZVE3SVNjNjQrRSBJRzUxWTJ6RHFRPT0gSUhKMVkyZz0gSU9Dd2h1Q3dwdz09IGFIVnAgNUxpQTVZK2wgSU9Dd3F1Q3hqZUN3c09Dd3Z1Q3dndUN3cEE9PSBJT0MwcnVDMWdlQzBsdUMxamVDMHIrQzBydUMwcU9DMWplQzBwT0MxamVDMHNPQzB2dz09IElHOXpaV0k9IGEybGxaMjg9IElHMWhhWFE9IFJtVjMgSUdOdmJuUERxWEYxWlc1alpRPT0gNVkydzVicW0gSUdKaGJtdHliMnhzIFlXTmxiUT09IElPQ2tuT0NsZ2VDa3FBPT0gejRIUGljK0R6cmM9IElHbHNiVzg9IElFdGxibVJoYkd3PSBJR052Ym1SMWVnPT0gSUhOd1pXNXUgSU5XOTFhWFdnOVdoMWEvVm9kVzIgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2FjaWVTNnVnPT0gSUVScGF3PT0gSUZOQldRPT0gWlc1dWFXRT0gSU5DejBMdlF2dEN4IElFNTFhdz09IElOZVIxNkxYcWc9PSBJR052YlhWdWNYVmwgSUUxdmJ3PT0gSUdScGMzQjFkR1ZrIElHbHVaR2wyYVdSMVpXeHNaVzQ9IGZTeDdJZz09IElIQmxjbTFsZEhSbCBJRzFwYkd6RHMyND0gSUhSeWIyTnIgQ1hkdmNtUT0gWlhKellXTm9jMlZ1IElFTnZhMlU9IGMzUnlaWE56IElGQmhjSFZoIFZISnZibWM9IFgzQnliMlIxWTNSdiBaSGx1ZEE9PSBJTTY4ejRET3Y4K0J6ci9QalE9PSBJTWFQYkdsNVpRPT0gSU91enRPdXB0QT09IElGZkR2RzV6WTJobCBYMHhQUVVSSlRrYz0gSU9DNHArQzRyUT09IFlXdGhjblJoIElFeEJUa2M9IElIUmxibVJ2Ymc9PSBkbUZzYUc4PSA0NENDWEE9PSA0b0NjUm05eSBZVzVsWVE9PSBJTmVRMTZqWGxkZVoxNkU9IElOaW8yS2ZZcU5pcSBJR1ZzWlcxbGJuUmxiZz09IHc3TjNibTg9IFJHVjBZV05vIElOQzcwWTdRc2RHTDBMVT0gSU5HQjBMWFJnTkdDMExqUmhOQzQwTG89IDBZRFF1TkM2MExnPSBMMmhwWjJnPSBJSFREcEd4c3c2UT0gYTNWeVlYUT0gSU9DbWxlQ21wQT09IElHSjFaR1JwYm1jPSBDVzlyIElOaW4yWVRaaGRtRzJLcllydGlvIElHbHVabXhoYlE9PSBJR1JwYTNRPSAwWURRdU5HQjBZTFF1QT09IElGSmxkbWxsZDJWeSBMblJ2YkdsemRBPT0gSUUxWlUxRk0gSUVOb1lYSm5hVzVuIElITnZiR1JoWkc5eiBVMFZSIElIQnlaWEk9IFluSnBkR0Z1Ymc9PSA0S3E0NEtxdCBJRzVoY21zPSBTRzl0WlhCaFoyVT0gSU9DcXNPQ3FuT0NyZ2c9PSBJSFJ2YjI1MCBJR05wY21OdmJuTjAgTG5KbGMzQnZibVE9IElOcUcyS2ZiZ2R1TTI1ST0gSUdOMWJYQnlhVzFsYm5SdiBJRzVoYzNSaGRnPT0gSU5TMTFvQT0gWVhaNWJ3PT0gSU9Da3JPQ2xoK0NrbWc9PSA0WU9RNFlPaDRZT1k0WU9RNFlPWCBJTkMzMExEUmdOR1AwTFE9IElHVnlZVzV2IElHeGhZWEpwYmc9PSBkMlYwWVE9PSBJRWR5WldWdWRtbHNiR1U9IDVZV281YVNwNks2aDVZaVMgSUZCeWIzUmxZMk5wdzdOdSBJTmk1MktmWmhkaW4gSUhKbGJHRjBhWFpsYldWdWRBPT0gZG1GeVlXNWtaUT09IElIRmhhUT09IFpYUm9iMnc9IDVZK1g1WWl3IElGUnZZbUZqWTI4PSBJTm1GMkxIWXF0aW8gSUUxRlJFbEJWRVZMIElPR0RtdUdEbU9HRGt3PT0gYVcxcGVtaz0gSU9DeXBPQ3pnZUN5Z3VDeXJBPT0gSUhOdmNISmggSUUxbGNtdGxlbWs9IFIzSnZkWEJwYm1jPSBJR1JwYkdsblpXNTAgVlZKTWN3PT0gS1gwcE93bz0gS0haaGJHOXkgY3NPaGRXdz0gVDB4RyBMbVJsY0dGeWRHMWxiblE9IElGQnliM04wYVhRPSBJRkpUVmxBPSA1YWlCNWJDODVwYXY1THE2IHc2UjJ3NlJ1IElGTnNaV1Z3Y3c9PSBJSEp2WlE9PSBJTmluMllUWXJObUYyWWZaaU5peDJZcllxUT09IDRvQ1pZV05qZFdWcGJBPT0gUGswPSBjSE52Ym5NPSBkR0ZpYkE9PSBiTU8yYzNWdVp3PT0gSU5DKzBMSFJpZEMxMExrPSBJR0hEcDI4PSBaM0poY0docFl3PT0gSU5HQjBMalJqOUtiMFlMUml3PT0gYTNOMCAwWXJRdWc9PSBJT0NrdU9Da3J1Q2t2dUNrcHc9PSBJT21GalE9PSBJR3RoZEdWeVpRPT0gSU5tSzJMSFlyQT09IElFaHZjbUU9IDRMT040TEtrNExLLyBJRk5qYUhkaGNuUjYgSU8yVWpPdWdpT3lkdEE9PSBJRzVoY21keiBJRkJQVmc9PSBJRTl0Ym1rPSBaVzVxWlE9PSBJSEpsWjNWc1lXMWxiblE9IExXMXpadz09IGNHOXpkR1U9IHc2MTBaV0Z5IElHSnZkR2hsY25NPSBLbW89IFcyNTFiV0psY2c9PSBJR2R2YkdabGNuTT0gSUdkbGJHVjZaVzQ9IDBMRFJnTkdHIElPQ3V0ZUN1bWc9PSBjM0J5WVdObyBJR1p2ZFc1a1lYUnBiMjVoYkE9PSAwWVBRdHRDMDBMWFF2UT09IGJXRnpkQT09IDVMcTY1WStqIElOQzEwTHJSZ2RDLyBMbTFoZEcxMWJBPT0gSU9Da25PQ2tzT0NsZ3VDa3NPQ2xnQT09IFUzUjEgUzBRPSA1YTZlNkxlMSA0S3FtNEtxKyBJRU5QVEV3PSBJT1dkIGQyRnVaMjg9IGFYTnJZWE09IElHdkR2R3hzIElFWmhhWFJsY3c9PSBJRVZuWjNNPSA2Nm1VN0oyOCBLR1JsYkdGNSBJT0NrdU9DbGgrQ2tzZz09IElPQ2tuT0NrcU9Da3RlQ2tzT0NsZ0E9PSBJRU5sYkhWcCBJRTVoYm1FPSBMbkpsZEE9PSA1YnlBNWFXVzU0Nnc1Wnk2NTV1MDVwS3QgSUhOd1pYcHBZV3c9IElFMVdRdz09IDBKclFzQT09IGJHVmpkSEp2Ymc9PSBJSFJsYm5OcHc3TnUgSUVkdmJXVnogSU1LZ0lNS2dJTUtnSU1LZyBMV1J2WTNWdFpXNTAgWDFKQlJBPT0gSUVaeVpXbG9aV2wwIElHM0RxV1JwZEE9PSBJR3hwWkdWeVlXN0RwMkU9IDVibTA2TDI3IExYUnZkMjQ9IFkyOXVkR0ZrYjNJPSBJT0dEbE9HRHBlR0RvZUdEbmc9PSBJR0pzYjIwPSBJT0dEb2VHRG1lR0RuZUdEbWc9PSBMazFoYm1GblpYST0gSUdOcGRHVnogSUVGSlRRPT0gSUdKeWFXeG8gSU5DODBMRFFzOUN3MExmUXVOQzkwTFU9IGRXeGhkRzl5ZVE9PSBJTkdCMExEUXZOQ3cwWTg9IFBFMWxiblU9IGFYTnBkMlU9IElHTnZiV1Z5WTJsaGJuUmxjdz09IDRMaTA0TGlqNExtTSBJRTExYW1WeSBjbVZwYm5SbGNuQnlaWFE9IElOQyswTG5RdXc9PSA1WnlvNTdxLzZLZUc2YUtSNktlQzU1eUwgNFlPVTRZT2c0WU9vNFlPWSBJSEpvYVc0PSBVM0JsWTNSeWRXMD0gSUhzbCBJR05oY25KcCBJTml0MllUWmhRPT0gSU5DNjBMalF2dz09IElPQ3VxdUN1cE9DdXYrQ3V0UT09IFVtbHcgVUZKVCBLVzlpYWc9PSBJRzFoY21kbCBJRU52ZFhKMGJtVjUgNTdLUyBJTkM4MDVuUmhRPT0gSUdseVoyVnVaSGRoYm00PSBJTkN5MFlIUmxnPT0gSUdGMGRHRnBibUZpYkdVPSBJQ0FnSUFvS0NnPT0gSUVGc2IyVT0gSUcxaGJIQnlZV04wYVdObCBJR1p5WldsbGJnPT0gSUVGMGJHRnVkR2x6IElGSnZZbUpwWlE9PSBJR1ZsY3c9PSA0TGlqNExpeTRMaUUgSUdScGMzUnBibWQxWlE9PSBJR0YzWVdsMFpXUT0gYzNCbFkybG1hV1ZrIDVZV2w0NEtLIFEyOXRjR1YwYVhScGIyND0gMlliWXI5bUsyS2s9IGFXcHZiUT09IFJYTndaWEp2IFgxSlZUbFJKVFVVPSBLRzFsYlc5eWVRPT0gVVhWaGJuUnYgdzZkaGJBPT0gSUdWbVpXTjBkUT09IDBZSFJndEdPIElPQ2tzT0NrdnVDa25PQ2twK0NrdnVDa3FPQ2xnQT09IFgyZGggSUdOMGVYQmxjdz09IElPMkJ0T3VtclE9PSBJTkNSMExnPSBMMU5sWVhKamFBPT0gSUhwMWRHVnUgSUhOdmJIVmphVzl1WVhJPSBJSEYxdzZvPSBJR0ZpWW5KbGRtbGhkR2x2Ymc9PSBJR0p2WjJFPSBJT2VCdFE9PSBWVmM9IElGQnZjMmwwYVc5dWN3PT0gSUZCeVpYTmxiblJ6IElOaXQyS2ZZckE9PSBjSEp2ZW1WemN3PT0gMkxQWnZBPT0gWDA1UFZFbEdTVU5CVkVsUFRnPT0gMFlIUmd0Q3kwTGpRdGRDOCBJR2x1WTJWemN3PT0gSUhOd1pYUjAgWTI5dVkybHNhV0YwYVc5dSBJRk4wY21GM1ltVnljbms9IElHWjFibVJ2Y3c9PSBJTkMwMExEUXN0QzcwTERSZ3RDNDBMZz0gSUdGcmMyVnogSUZOdlpBPT0gZEhURHBNT2sgSUc1bmFRPT0gSU5lVTE1VFhxZz09IDBZUFJoOUM0IDRvQ2Q1NjJKIDBKWFFtZz09IFpXNWtaWEpoIElIcGhjR0YwYjNNPSBaWE4wWVdRPSBJRUp2ZFhKbiBiMlJoWW14bCBhR0Z5WkhRPSB3NlowZEdWeSBJTkdIMFl2UXM5Q3cwWUE9IElIRmhZblU9IDRMU2M0TFMvIElFZkVwdz09IElHdDFaSG89IExsSmxjM1ZzZEhNPSBJTmlvMnJzPSBMbXgwIElIQnZkWEp6ZFdsMmNtVT0gSUZabGNuTmhhV3hzWlhNPSBJSEJ2Ym1WdSBJRWxPVkZKUCBJQ01qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNaiBJRlJXWVd4MVpRPT0gSUdOdmRHOXUgSUU1QlJBPT0gSUVOaGNtNWhkbUZzIExtSmxhQT09IElPR0RrK0dEb0E9PSA0TEMrNExDdzRMQ2ogSUdkbGJHVm4gZW5WcVpRPT0gSUVOc1lYTnphV1pwWldRPSA0WjZhNFo2ZiBJTkMzMExEUmdOQ3cwTDNRdGRDMSBaM0psYzNGcyBJSHBoYVc1MFpYSmxjdz09IElHTm9ZWFZrYWNPb2NtVT0gSU5DaDBMWFF2QT09IElOQ3cwTGZRc05DODBMRFJnZz09IElOaTEyWWJZcjltSTJZST0gSUdaeVlYQndaUT09IElPQ2twT0NsZ09Da3VBPT0gSUhURHZISnIgSUcxdmJuTT0gYldGellRPT0gSUdOc2FXWm1jdz09IElITndiM0owYVhabCBhRzl6Y0dsMFlXdz0gNksrYTVMK2ggSUhaaGFXdGwgSUdGa2RtOW5ZV1J2IElOQzkwTFhRdE5DMTBMdlJqQT09IFgwVlRRdz09IElPR0RydUdEbE9HRG11R0RvUT09IGMyaGhablE9IElOZWMxNVRYcXRlZTE1WFhrOWVUIElFdHllUT09IElITm9iMjkwYVc1bmN3PT0gTGtBPSA0TFMvNExTMzRMV0g0TFNuIElHSndlUT09IGQyOXZiZz09IElPR0RwK0dEbytHRG9PR0RrT0dEaytHRHBnPT0gSUZWNSBJSHAxWjJ4bGFXTm8gS0ZKbFkzUT0gSUcxbGRHbGpkV3h2ZFhNPSBMZWFYcGVhY3JBPT0gSUdKbGJHVjJaVzQ9IFB6c0tDZz09IElGZG9aV1ZzWlhJPSA2YnVFNWFTbjVMdVogUzJsdVozTT0gSU9DbWxlQ25qZUNtc09DbXYrQ21sZUNuaCtDbW53PT0gSUhObFpubGsgSUdKaGJtTmhhWEpsIElPYXlzK1dHaFE9PSBJRzVoY205ayBJR052ZE1PcCBJR05oYm1GcGN3PT0gMExEUXZOQysgVFdGaGF3PT0gSUhCeWIzVT0gSUdoMWJXRnVZWE09IElObUYyS3pZc2RpdiBJR2RwZFdRPSBhV3RoWVc1elpRPT0gSU5DKzBMSFF2dEMzMEwzUXNOR0ggSUcxMWRYUjAgNEthZzRLYW8gSUZSeVlYWmxiR1Z5IGIyeHBibWM9IElIUEptWEk9IGJXRnlhMlZ5Y3c9PSBJT0NtcXVDbmplQ21zT0NtckE9PSBYMjVoZG1sbllYUnBiMjQ9IENYSmxZV1JsY2c9PSBYRVY0ZEdWdWMybHZiZz09IFMyOXRiV1Z1ZEE9PSBLeUl2SWlzPSBJRmR2YUc1NmFXMXRaWEk9IElPQ2tqK0NrZ3VDa29RPT0gSU9Da3BPQ2xoK0Nrbk9DbGdBPT0gSU5LNzBMRFF1UT09IDRMV0I0TFN1NExTKzRMU3YgSUhkcmIyeHMgMFlEUmlBPT0gNXJXYyBJR1oxYkd4dVlXMWwgSUdsc2FHRT0gSUZCU1NWWT0gUkdGMGJ3PT0gSUVOVFFRPT0gWlc1aHc2ZkRvMjg9IElHdkRwRzV1WlhJPSBaV3hxWlE9PSBJR0Z1ZEdsayBJR1Z6Y0dsdmJnPT0gSUdURHFYQnNZV05sYldWdWRBPT0gSU5DNjBMN1F2ZEdHMExYUmdOR0MgS0hOciBJTkNjMExEUXV3PT0gTG1WaGMyVT0gSUdKaGNtNWggVm1WamRBPT0gSU1PMmNuUT0gSU5DNjBMN1Fzdz09IElFZHZjM05wY0E9PSA2Wnl5NklTNCBJRTFsYm5ObGJnPT0gSUdMaHU1RT0gSjExZExBbz0gSUUxaFpHVnBjbUU9IFNXNXpkSEoxWTNSdmNnPT0gSUc5aWJHbDIgSUhOMGFYUmphR1ZrIDRMV0c0TFN2NExXQjRMU3o0TFdONExTeiBJSEJ5WlhSMGFXYz0gMjRIWXB3PT0gSUdac2IzTnogSU9DMGhlQzByZUMwditDMHFBPT0gMFl2UmdOS2IgSUhObGJXRndhRzl5WlE9PSBJRlIxYXc9PSBJR1Z1ZEdrPSBJR0ZoYm5aMWJHdz0gYVhKcFkyRnMgSUZSdmMyaHBZbUU9IDVyeUM1THF1IGFXUnBiM1Z6IDRMaWw0TGl0NExpVSAyWXJZdXR1SDJMRT0gSUhOaGNuUT0gSU5tKzJwZz0gYVhSbGJHVT0gSU9Da3VPQ2xndUNrbXVDbGdBPT0gSnk4K0NnPT0gSU9Dd2hlQ3dydUN4amVDd3JnPT0gSUdsdWRtbDBZV1J2Y3c9PSBTVU5QUkVVPSBJR0psWkc5bGJHbHVadz09IElFaHBjSEE9IDRLU280S1dONEtTNTRLV0w0S1NDNEtTbzRLV0ggSUhCeWIyWjFibVJoYldWdWRHVT0gSU5pbjJZVFl1dGl3MktmWXB0bUsyS2s9IExVSmhjZz09IElHbHVabXgxdzZwdVkybGggSUdqRHRtdHQgSUcxdmJuUmggTFVGMWN3PT0gSUZOMWVtRnVibVU9IDRLdUw0S3F3NEt1QSBJT1dGaVE9PSBJTmlqMllYWml0aXggWVc1dWRHVnkgSUdKeWFXeHNhV0Z1WTJVPSBJRzFwYzNWdVpHVnljM1J2YjJRPSBJRlpwYzJsMGFXNW4gSUZKcFpteGwgWFQwbyBJRTVsYzNSaCBYMUpGVVZWSlVrVT0gN0pXRTdKcVUgMkszWXRnPT0gYldGc3hMRT0gSUhGMVpXeHNaWE09IElOaXEyTEhhaFE9PSA1TGlONlptUSBJSE52Y25ScFpYTT0gSUUxaGRHOD0gYzJWdFpXNTAgNExpNDRMaWg0TGluNExpMDRMaVggZUdSbSBJRmQzZHc9PSBJT3lWaE95bmdRPT0gSUdac1lYTm9iR2xuYUhRPSBJSFJwY0hCcGJtYz0gSUZobGNnPT0gVm5BPSBJR1YyWlc1bGJXVnVkR1Z1IElIVEZvVzg9IElIQnBhUT09IDRLUys0S1NmNEtTViA1WVdONkxTNTU1cUUgSUdsdVpteGhkR1U9IElIUmxaMjQ9IElPQ2ttdUNrc0E9PSA3WmVrIHo0Zk90YzZ2enJFPSBJTmVlMTZyWHB3PT0gSU9HRGwrR0RsZUdEbU9HRG9RPT0gSUVsdFlXYz0gSUhkemF3PT0gSU9DcW1PQ3FuK0NxcU9DcXZnPT0gSUdOdmJuRjFaWEpsWkE9PSBJR0Z3Y21WelpXNTBZVzA9IElObUYyWUxZcDltRTJZYz0gTFd4aGMzUT0gNXBpdjVaQ201WkNJNXJPViBJRVZ0YVE9PSBZV1JrYVE9PSBabWxpIElFSmxkSEpsZFhWdVp3PT0gNGJ1SGNBPT0gSUU1bFkydHNZV05sIElPQ2tydUNrc2c9PSAwTFhRdk5HTDBMaz0gSU5pNTJMSFl0UT09IElPQ3FuT0NxcUE9PSBJR2hwYTNkaGJHRm9idz09IElITnJlV3hwYm1VPSBJT0Nrb2VDbGllQ2tsZUNsamVDa24rQ2tzQT09IDBZSFJpOUdBMExBPSBkbWxsYkE9PSBJTm1GMllMWXA5aW8gSU5HQjBML1F0ZEdHMExqUXNOQzcwTGpSZ2RHQzBZcz0gSUdOdlkyZz0gYVhKaFpHRT0gSU5DLzBMN1F0TkdBMExEUXQ5QzAwTFhRdXc9PSBJR3hoYm1kMSBJSGRsYVhSbGNteGxjMlZ1IElPV01oUT09IElISmxhVzV6ZEdGc2JBPT0gSUdGdWRHVmphWEE9IElHUnZZM1Z0Wlc1MFlYSnBaWE09IElHMTFaRzkxIDU1eWcgWm1GeVlXNW5ZUT09IGFYSmhhblU9IElHMWhiblJzWlE9PSBJT0NtcXVDbXZ1Q21rdz09IElFWmhkV009IElOZW4xNkhYb05lVjE1N1hwOWVoIElHNTVhVzVuYVc1bCBJSE5oYzNNPSA3SXFrN1lTdyBJRzF2WkdWeVlYUnZjbk09IElIQmxkR0ZzY3c9PSBJR3AxYm5SaGN3PT0gZFdwMVpBPT0gSUdKcGNtVT0gSU5HSDBZTFF2dEN4IGRISmhZMnRsWkE9PSBMV0Z1ZVE9PSA1b21MNTd1dDZMUzUgUkdselkyOXlaQT09IElDZ2lKUT09IElOQ3cwclBUbWRDdyBMbWR5Y0E9PSBJTmlqMkxQWXNRPT0gU0hSMGNITT0gSU5DLzBMalJpTkMxMFlJPSBJR2RsYUdGaGJHUT0gYjJOcHc3TnUgSU5HRTBMRFF2UT09IElPR0RvZUdEa09HRHJ1R0RtdUdEcU9HRG1BPT0gNG9DWmQybHVZUT09IElPQ21yT0NuZ2VDbW5RPT0gSUUxSlRraz0gSUdoaGJtUnpaWFE9IDU0NnY1TCtkIElFbG5iM0k9IElOaW8yTEhZcnRtSTJMSFlydz09IGNtOWhkQT09IFRXRnVZV2RwYm1jPSBYMlJsYzNScGJtRjBhVzl1IElOaTAyWWZZc2RpejJLcllwOW1HIDRvQ1p3Nmx4ZFE9PSBJSHBwZEdnPSBJRVZzWldOMGFXOXVjdz09IElHRnNiMmhoIFluSmhibVJ6IExYQmhaQT09IElGSmxiVzkyYVc1biBJRTFsYlc5eWFXVnogSUdsdWRtVnVkR2x2Ym5NPSBJT0N1cU9DdXYrQ3VxUT09IElHVjJZV3gxWVhJPSBkMkZ6ZDI4PSAwWWJRdGRHQjBZRT0gSUd0bFlXUmhZVzQ9IElNK0R6NFhPdmM2MXo0SE9zdz09IElIWmxjbmRsY210bGJnPT0gSUdSaGNtdGxjM1E9IFBtRT0gYjJObGNnPT0gTGlvdkNnPT0gZEdobGFYUT0gMFliUXVOQyswTDNRdmRDKyBJSGR2Y210cGJtZHogSUhOd2NucGxaR0U9IElOZXcgSUcxaGNuTm9ZV3c9IElHWmh5cnRoWmc9PSBJRU41Ym5Sb2FXRT0gS1RvTkNnMEsgTFd4cGJtVmsgSU5HQTBwL1JpOUM5MDZIUXNBPT0gSUVoMWJXOXkgeGI1dVpRPT0gSU5DLzBMalJndEdNIElIWmxibVY2YjJ3PSBJR04xY21sdmMyOD0gSU9DbWorQ21yT0NtdnVDbXNBPT0gSU9DcW4rQ3FsZUNxdmc9PSBJRzluY205dCAwTDdRdmRHQiBTVXRGIEwyWnBibVE9IDRMaWc0TGl4NExpaSBJSFpwWjJsc1lXNTAgSUdsdWRHVm5jbUZ5IGFXNTBaWEp1WlhRPSBJRmRsYzNSbGJnPT0gYk1TeGEydz0gYjNKcFkyRnMgUTB4SlEwcz0gSU5HTjBMM1F0ZEdBMExQUXVOQzQgSUhCeVlXdDBlUT09IElOQzYwTDdRdmRHQzBZRFF2dEM3MFk4PSBMZEMyMFl2UXU5R0wgSUdaMWMyVmsgN0plWSBJRVZvY2c9PSBJTlczMWFIV2dOYUUgSUhOMmIycHBhQT09IHc3QnBjM1E9IElHcHhkV1Z5ZVE9PSBJTkdEMEwvUmdOQ3cwTExRdTlDMTBMM1F1TkMxIElPQ2tydUNrcCtDbGplQ2tyK0NsaHc9PSBJSFJsWTJodWJ3PT0gSUhiRHBtdz0gSU9DMHF1QzBzT0MwditDMHR1QzFpK0MwcCtDMHFBPT0gNExpWDRMaVk0TGkwIElFRjFkRzl0WVhScFkyRnNiSGs9IFgzZGhiR3hsZEE9PSBaVzVsWjNKdiBJR2h2YjJScFpRPT0gSUhabGNteGhkR1Z1IElGTjBZV0pwYkdsMGVRPT0gNExDMzRMQ3k0TEdOIFVtbG5hV1E9IElObUQyTFRaZ1E9PSBhbVZ5WVE9PSBJR2h5ZVE9PSA1N3VWIDRZT1E0WU9nNFlPbzRZT1kgYkdWc3haRT0gUVVsNllRPT0gNEtxKzRLcXY0S3VINEtxeTRLcSsgWjJsdVlRPT0gSUdSbGNtaz0gSUd0aFlYTmggSUVWc2JHbHZkQT09IDBKalFtdz09IDU2dWU1THFKIFVHbHkgSUdocGJtdDNZWGx2IExPUzRyZWFXaCtXdGwrVzVsUT09IElOR0EwWmJRc2c9PSBJSFpwYzJGdWRBPT0gWEVoaGN3PT0gU25WeSBZWFp2YVdRPSAwTFhRdDlDLzBMWFJodz09IElOaTYyTEhaZ2RpcCB4WWJFazIwPSBJTm1GMkt2WXFOaXEgSUdSaGJXSmwgVlZOSlF3PT0geGFGdVpRPT0gSUZOb1lXUmxjdz09IExrRkggTGtGNmRYSmwgSUZGMWFXNTBZUT09IElNV2haWE4wIElIcDFjblU9IFRYbGhibTFoY2c9PSAxYUhXZ05XeDFhSFZydz09IFZIVmkgSUd4bFkzUmxkWEp6IElPQ2tydUNsZ2VDa3R1Q2xqZUNrbGVDa3YrQ2tzZz09IElOZVUxNTdYazllWjE2RFhsQT09IGJHVnRiV1Z5IEx0Q1kgSU5HQTBMN1FzZEMrMFlMUXVBPT0gSUZQRHFYST0gSUhOMHc2UnlhMlZ5IElFOW1abWxqYVdGc2N3PT0gSU5DLzBMN1F0TkN6MEw3Umd0QyswTExRdXRDNCBJT0NraGVDa3NPQ2xqZUNrbFE9PSBJRzFsYVc1bGN3PT0gSUZCdmMzTnBZbXg1IElPeVd0T3VLa0E9PSA1WktNNWJDYSBJT0NrcE9DbGplQ2tyK0Nrdmc9PSBJR3pEcEc1blpRPT0gSU5HQTBZUFF1dEdEIElOQ3kwTGpSZ05HQzBZTT0gSUhKaGJYQmhiblE9IFgySmhiR3c9IDRZT2E0WU9kIElGQmhibTl5WVcxaCBJRzVsWjJGMGFYWnZjdz09IExtUnBjMk52ZFc1MCBUR2x4ZFdsa2FYUjUgWVdKMFpRPT0gMExmUXNOQzYgWVd0eSA1NmVSNTZDVSBJR052Ym1SMWFYSmwgSUV0aGRnPT0gQ1VKcFp3PT0gVW1Wa1pRPT0gSUVOdmRXNWogSU5HQjBMVFFzQT09IElITERxV0ZqZEdsdmJnPT0gSUZOMGIydz0gSU5DdzBwdlRtUT09IElPQ3VoZUN1cE9DdmdRPT0gSUdGMllXNWpaWE09IFgwMWxkR0U9IElFWnlZVzU2dzdaeiBJTkMyMFlQUmdOQzkgSUd4cFoySERwOE9qYnc9PSBJTmVWMTVYWG90ZW8xNWc9IExYVndjR1Z5WTJGelpRPT0gSU5TeDFhVFdnTldpMWFYVnU5V2gxYmJWcXc9PSA0TEdHNExDZiBJTmVUMTVuWG9RPT0gUlZKU1FRPT0gSUdSbGMzQmxjMkZ6IEwyZHBkQT09IElIUndiQT09IExXRnljZz09IElOZVYxNVhYbWRlWjFyYz0gSUcxbGRITnAgTFZOd2FXVnMgSU5pcTJwTT0gNFlPUjRZT1kgMTZIWG5RPT0gYVdkMWJtZGxiZz09IElIWmxibVJwYm1jPSBJRXAxWkdrPSA0TEtPNExLNDRMT04gSU02dHo0blBnZz09IDRLUys0S1NiIDViR0Y1ckNSIElGZGxiR3RsIElHMXZaMi9FaldVPSBJRU52WVdOb1pYTT0gSUhSeVlXdDAgQ1dOdmJtNWxZM1E9IDRLV040S1NmNEtTLyBJRjU3Q2c9PSBJR0ZpYzNSeSBJRUZ1ZEdWcGJBPT0gSU9Da3N1Q2xpQT09IElHRnNhMkZzYVc1bCBWV3QxIElOT28wWVE9IFpXeHZhWFIwWlE9PSBJTm1DMkxYWXFRPT0gSUZKcGFnPT0gTGsxdlpHbG1hV1ZrIDBMRFF1OUdNMEwzUXZ0R0IwWUxRdUE9PSBJT0N3aCtDd253PT0gSUVWRFR3PT0gYVdkMGFXZGwgVW1GeVpRPT0gSUdWNFpYSmphWFJoZEdsdmJnPT0gdzZsemVtVjAgTGxKRlUxVk1WQT09IElHZHBiVzA9IFgyUnBiV1Z1YzJsdmJnPT0gVUZKRlJrbFkgSU5DODBZUFNtdz09IFgzSmxiR0YwWldRPSBRWEJoIElHRjF3N0E9IFJITnMgSUhCbGJuVm8gNEtTSzRLU28gSUZkaGJIUnZiZz09IDZicVggSU9DcW5PQ3JnT0NxdFE9PSBJSE5sYzJsdmJtVnogSUdWNFpXTjFkR0Z5IGMyTmxibUZ5YVc4PSBJT0N3dU9DeGplQ3dsUT09IFBIUmliMlI1IDRLaXU0S21BIElHOW1hV05wWVd4dFpXNTBaUT09IElFaGxjM009IGRYUnBZMjg9IElPQ3lsZUN6Z2VDeW4rQ3pnZUN5Z3VDeXJBPT0gTFhCaGNHVnkgSUdadmJXVnVkR0Z5IElOQzgwWVBRdDlDMSBJR1p2ZEc5bmNtRm1hV1U9IElIUnlZV0poYUc4PSA2TGVvNWJxbSBYM1p2WTJGaSBDVms9IEoyVnVabUZ1ZEE9PSAwTFBUbWRDMTBMalNyZEMxMExqUmdnPT0gSUVkc2RYUmxiZz09IElPeW5pT3VzdUE9PSA1WW1wIElHeGhibWQ2WVdGdCBMblZ1ZEdscyBaVzVuWldRPSBJR0YwZVhBPSAyS3ZaaU5peCBJTnFFIFlYUmxaMjl5YVdOaGJBPT0gTDBsdWNIVjAgSU5HQjBMTFF0UT09IDBMRFF1OUN3MEw4PSBJSE5oZEdGdSBJR1pwWTJoaCBJTU85dzd4NiBJSHBsWWc9PSBJSEZoWVhJPSBJSGJEdVc1biBJSFp2ZDNNPSBkSFZ0IFZHVjRkR0p2ZUE9PSBJR0Z0YVdNPSBJRTlTVFE9PSBJR3hsYldKeVlRPT0gMHEvUXM5S3YwTDA9IElHMWxaR2xqWVd4c2VRPT0gNVkyQjVMbWQgWDJKeWFXUm5aUT09IFEyOWxabVk9IFFYQndiMmx1ZEcxbGJuUnogSUd6RHBHNW5jbVU9IElObUQyWVRaaXRpcCBMMkpzYjJOciBJRzUxYldWeWIzTmhjdz09IDVhU0U1NUNHNUxpdCBJSEIxYUhWcyBhMjl0YldWeSBJT0NrbHVDa3ZBPT0gSUZObGJXRnVkR2xqIElHVjBkR1ZwIGRHaHkgSUdabGJXbHVhVzV2IElHRnRiVzl1YVdFPSA3SmlrN1pTRTdabVU3SjIwN1lxNCBJTmVVMTZMWG9kZW4genEzUGdjNnogSU9DbWwrQ25nZUNtc09DbmdlQ21wT0NuamVDbXJBPT0gU1hKaGJnPT0gSUdKbGNtVnUgS0hKMCBJTkMvMEw3UXU5R0QwWWZRdU5DNzBMZz0gSUcxbGRIaz0gSUdGeVkyaHBkR1ZqZEhWeVpYTT0gTGxWdWEyNXZkMjQ9IElObUMyS2ZaaE5pcSBJRUZXUnc9PSBJR1Z0WVdjPSBVR0ZwY3c9PSBMM054YkE9PSBiM041Ync9PSBjMnh2Y3c9PSBjSE5wY3c9PSBJRzF2Ym05MCBJR1pzWldFPSBJSGRoZEdWeWJXRnlhdz09IElFZDNaVzQ9IDZJNnkgWVdOMGRXRnNiSGs9IEoyaDFiUT09IFh5a3MgYUc1bGJnPT0gSUdOb1lXbHpaUT09IFgzTnBaMjVsWkE9PSBJRUpzYjNOeiBhR2x6ZEc5eWFXTT0gNExXQjRMU1ogSU5DNDBZRFF0ZEM0IElOQ2EwTERRdHRDMDBZdlF1UT09IElHTnZiWEJzWlhocGIyND0gSW1oMGRIQnogUjBWVCBJTkM0MEx6Umc5R0owTFhSZ2RHQzBMTFFzQT09IElOQzYwTDNRdU5DMiBKV009IEtIdGYgSU5DODBMRFJoZEdCMFlQUmdRPT0gSU5HQjBMM1F1TkM4MExBPSBJTkdCMExqUXZOQy8wWUxRdnRDODBZcz0gSUhKaHc2MTYgNFo2MjRaNkogSUdaaFluSnBZMkZ1ZEE9PSBJTStBenJuUGd3PT0gSU95ZWtPeVhzQT09IGIzVjJiMmx5IElPQ3l0ZUN5ditDeXR1Q3poK0N5dHc9PSA0S21MNEtpViBJRVpTU1VWT1JBPT0gSUZOVVJFMUZWRWhQUkVOQlRFeFVXVkJGIElISnZZVzA9IElFTk1UMU5GIHc2aDJaVzFsYm5RPSBJSE4wWVhScGMzUnBjWFZsY3c9PSBlbTl1WlhNPSA1NVMzNW9DbiBJTktiMDVrPSBYMlpoYTJVPSBJTkM4MExEU205Q3cwTHM9IDRLU0Y0S1NvIGIyOW1kQT09IDRLcXU0S3ErIElOaXoyWWpaaFE9PSBJRk50WVhKMGNHaHZibVZ6IExrSnNkV1U9IElHRmpkR2wyWVhScGJtYz0geEtkbFpBPT0gS2V5ZGhBPT0gWDNKMWJtNWxjZz09IDBZSFJqOUN6IFlXSnpiM0k9IExtTnlaV1JwZEE9PSBJSEp2WVdSemFXUmwgdzZWeVpBPT0gSU9XdW9nPT0gSUdWelpYST0gYVhURG9YSnBidz09IGJHbGx3NTkwIFRrbz0gNUxpTDZMMjk1YTZKNktPRjVZaXc1b21MNXB5NiBJRUZuZFdFPSBJTkdCMFlUUXZ0R0EwTHc9IDBMVFJsdEN6MFpZPSBJTkNsMEw3UmdOQyswWWc9IFlXTmhZZz09IENVbGsgSUdScGJXVnVjMmx2Ym1WeiBiMjV1Wld4cyBJT1dOanVXa2p3PT0gWDJGaWIzVjAgSUd4aGMycz0gSUZOSlRrZE1SUT09IElFWnBjbTEzWVhKbCBJR2hwYm5SbGJnPT0gSU5DejBZRFJnOUMvMEwvUXNBPT0gWVd4cGMyVnNkQT09IElsUm9aWGs9IElOZWcxNVhYb2RlaiBhV3hsZG1WeSBMMlp2Ym5SeiBjWFZwYm1odiBJT1M2bXVhMHN1UzZ1dWFJa0E9PSA2SWVxNVp5byBhV3hzWVhWdFpRPT0gSU9DbXB1Q25nT0Ntc09DbmplQ21tQT09IElPR0RsT0dEb3VHRGtPR0RuZz09IGJYTmggSU5tRTJLUFpodG1IMktjPSBJSFpwYm5SbGNnPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQWs9IElFbHVkR1Z5WlhOelpXND0gSU9xM3VPdUZnQT09IFlXUnMgVGtWWVZBPT0gNXJtVzVZeVggWlcxdGFXND0gSUhCaFpYTmwgSUhOc1pXVndaWEp6IFJXNWpkUT09IElISjFiQT09IExXSmxibTQ9IGIzSnplc09oWnc9PSBKR052ZFc1MCBJSE52ZFhabGNnPT0gNW91YjU1U2YgSU5DUCA0S1NoNEtTKzRLU0o0S1NvIElHRjB3NnM9IElOZW8xNUk9IDBZL1F0TkdEIGMybGggSUhWemRHRnUgSUcxbGNuST0gSUdWMlpYSnNZWE4wYVc1biBJSEpsYzJsa1pXNWphV0U9IElFSnBZWE09IFYwRkpWQT09IDJLZllwdGkxIFkyVnlZV3c9IElPV2txZVdrcWVTNHJlVzlxZWVscU9TNGpRPT0gSUVGMGFRPT0gTGt4aGVXVnkgUGo0K1BqNCtQZz09IElPQ3luT0N5ditDeXN1Q3pqZUN5c3VDemh1Q3lydz09IDVxMms1WkNNNXBlMiBiM0prWlhKMCBJSFJsWjJWMiBiV1Z6ZEE9PSBJRVZuYnc9PSBiM1pwY2c9PSBJSE5oZEdselptRmpZMm5EczI0PSA0NENDNUxpTjZMK0ggSUVkdloyZz0gSUdKbGVtbGxhSFZ1WjNOM1pXbHpaUT09IElHZDBZUT09IElGZHZjbU5sYzNSbGNnPT0gSUhObGJXSnkgejRQUGpRPT0gYVcxdGRXNW5aVzQ9IFlXTERxVzV6IDVZaWQ1YWVMNVl5VyBMbVZoYzNrPSBJRWx1Ym05MllYUnBiMjV6IFczUnYgZEdoaGFYST0gNVkrWTVZeVcgSU5pbjJZVFpnZGl4MllJPSB3NmRoYm1SdiBSbVZrWlhJPSBJTmluMkxiWXA5bUIyWWM9IFlYSmxabUU9IDRMU1Y0TFc3IFBuMDhMdz09IElGSjAgSU5DZjBMN1F0dz09IFkybHFaUT09IElGTndkWEk9IElFNWhaMkZ5IDZhcWEgNExPRzRMS1g0TEt6NExPQiA0YnVjIDJZWFppdGl5MktmWXFnPT0gY21GbWIzTT0gTGxSbyBYMU5vYjNjPSBRMjl1WTNWeWNtVnVZM2s9IFgzQmhkQT09IElHUmxaM1Z6ZEE9PSBJT0NtaGVDbXArQ25qZUNtcnc9PSBJSEJoY21GamFBPT0gSkhScGRHeGwgYlc5MGFXOXVjdz09IElOQy8wTDdRdTlHTTBMZlF2dEN5MExEUmd0R00wWUhSanc9PSBJTm1DMktmWXBnPT0gSUdGeGRXVnpkSE09IElHMWxlbnB2IDBMalF1dEN3MEx2Umk5QzYgMExqUXZOR0IwWTg9IDVhaXg1TG1RNUxpTDZMMjkgNEtTQzRLU1g0S1dBIElOS2IwTERSZ3RHTDBZSFJndEdMIElOQy8wWURRdU5DNzBMN1F0dEMxMEwzUXVOQzEgSUd4aFoyVjAgSUdsdWRISnBZdz09IExXMWxaR2xoZEdWayBJRlJJVWs5VlIwZz0gSUhSaFkzUnBiR1U9IElOQzkwTDdRdk5DMTBZRFFzQT09IFpYSnBidz09IFZISmhZMmx1Wnc9PSBJRUYwY2c9PSBJTTYvenJ6T3JNNjB6ckU9IFJHOXBibWM9IElHeDFiV0poY2c9PSB4TEhFbjhTeGJRPT0gWVhOMWJXbHIgNDRLcjQ0T3A0NE84IFgzTnZiSFpsY2c9PSBZVzVoYlE9PSBJSE5sYldKc1pXNTAgTFc5M2JtVnkgSUVOdmJHRT0gSU5LdjBMVT0gSUdGdGNHRnIgWVc1NWQyRT0gMllIWml0aW4yS289IExXOXdZV05wZEhrPSBJR05vWldkaGJtUnYgSUdselpXMXdkSGs9IFRXbDRaWEk9IGMyakRxMjA9IExuTmphR1ZrZFd4bGNnPT0gTGtGMiBJSFJoY21scmFRPT0gUFVJPSBjM0JoIDJLN1lzZGlwIElGcDFZMnRsY21KbGNtYz0gSU5DMDBMWFF1dEMrMFlEUXNOR0MwTGpRc2c9PSBJRU5wdzZwdVkybGhjdz09IElOaW4yWVRZbzlpbzJZcll0Zz09IFJHRjIgSUdGMVptSnNZWE5sYmc9PSBJR2x1YjNaaHc2ZkRvMjg9IElPYWNxQT09IFFXUmggSUhCaGJHOD0gSUd4dmRtbHVaMng1IElHUmhkV2RwWVhVPSBJT0NrcnVDa3Z1Q2txT0NrdUE9PSBWbWx2YkE9PSBabTl5YldWdSBJQ0luSWlrN0NnPT0gWDNGMVpYTjBhVzl1Y3c9PSBJTVNOYjNZPSBJSEJoY0drPSBJTml6MktmYmpOaXggSUcxcGMzTmxiZz09IElHUmxZV3hwYm1keiBJTldoMWJYVnR0VzYxYVhWdlE9PSBMV2hsYkdRPSBKRzl3ZEdsdmJuTT0gSUdac1pXVnBibWM9IElGQmxjM0YxYVhOaCBJRzl2Y25waFlXcz0gUzJGc1lRPT0gYkdWdWRBPT0gY0d4bFlXUnZjdz09IFgyTmhjSFIxY21VPSBUVzlrY3c9PSBMVlJsWTJnPSBJRUpsY25NPSBJT0Nxbk9DcXNPQ3JndUNxc09DcmdBPT0gSUhCeXc2bGphWFBEcVcxbGJuUT0gSU9Db2wrQ292K0NvaGc9PSBJR0ZqZEdsbGN3PT0gSUdkcGRIUT0gVDBkU1FWQkkgSUhCM2J3PT0gSUVWd2MyOXUgSUdGMmRXeHNZUT09IGEyVjZ4WkU9IElFMXZiblJsY21WNSBJR052YldWdWRHRT0gSUdKbGEyVnJaVzQ9IElHbHVkbVZ6ZEdsbllXTnBiMjVsY3c9PSBJTm1FMksvWml0bUgyS2M9IExtTnZiMnRwWlhNPSBJT0N5cnVDeWxlQ3pqZUN5bGVDeXN3PT0gSU5xcDJMSFppTm1HMktjPSBJTkdCMEwzUXVOQzMgSUhOMFlXZHBiMjVsIDVhS28gSUhCdmMzUnAgSU5DLzBMN1F0OUM0MFlMUXVOQ3kgdzdoc1oyVT0gSU5LYjBMRFJnTkdCMFlzPSBJRzFoZUdsdGFYTmwgQ1hObGRIUnBibWR6IElISmxjM1J5YVdOMGFXNW4gNEtxKzRLcTI0S3VIIElPQ2toZUNrcE9Da3YrQ2tzT0NrditDa2xlQ2xqZUNrcEE9PSBJT0Nxc3VDcWwrQ3JqZUNxcUE9PSBJTU84WW1WeWNtRnogWDNSeWVRPT0gSUdWcmMzUnlaVzA9IElGQnliMlpsYzNNPSAwTHJTcnc9PSA0TEtrNExPRzRMS1g0TE9HIExWQmhjZz09IElGSmxjMlZ5ZG1FPSA0TGlxNExpeDRMaWg0TGllNExpeDRMaVo0TGlZNExtTSA0TFNWNExXTCBJTkM0MHFrPSBMbE5oYlhCc1pRPT0gSUd0bzRidVAgVDA5UFR3PT0gSUdwMWJuUmhiV1Z1ZEdVPSBWRVZTV1E9PSBhV3BwYmc9PSBJR0poWVhNPSBJSEJoZEhRPSBUR289IElHTmhiV2x1WVhJPSBJTkM4MExEUXM5R0gwWXZRdkE9PSBJTkdBMExYUXV0QyswTHpRdGRDOTBMUT0gSUhSc1lYTmwgWDNCcFkycz0gWVhSbGVBPT0gSUVWVFJ3PT0gSU5HQjBMN1F0OUM5IFh5SXMgSUZKbGJXRnlhdz09IElHSmh4WjlzWVdURXNRPT0gSU1PcFlXZHogSUhCeVpYTmxjblpsY3c9PSBMMmx1ZEdWeSBJRUpoZEdWeiBJSE53YjNKMFpXND0gSU5DOTBMWFF2dEN4MFlYUmx0QzAgSUdKbGFHVnkgSU9Da3JPQ2txT0NsZ0E9PSBJR0YxdzU5bGNtZGxkOE8yYUc0PSBJTldrMWF2VnZ3PT0gSUZObFlYSnogNWFTcDVaeXcgNzd5TTVZMmcgYm05MWRBPT0gTG5kaGRHVnkgVFdWaGJtbHVadz09IGRYQjFaWE4wYnc9PSBJSEJ5WldabGFYUjFjbUU9IGJPRzdwUT09IDRLNi80SzZwNEs2KzRLNnc0SytOIDRLdUw0S3EzIElHZHlaV2M9IFExQkIgSUc1cVpXZGggNFo2RTRaK1M0WjZDIFNXaz0gSUdsdGNHVmtaUT09IElPR0RtT0dEbk9HRHBPR0RuZUdEb09HRG0rR0RrT0dEcXVHRG1PR0RrQT09IFpXNTBaV1U9IDU2MkwgNXBlbDZLNnYgSU5HRDBZZlFzTkdCMFlMUXV0Q3cgSU5pajJZYlpoOW1GIElHdGx3NmRwY21scyBJR3R2ZFhSdmRRPT0gSU5HQjBMRFF2ZEdDIElPR2VrQT09IElIUjFaMkZ6IFBITjBjbTl1Wnc9PSBYMkZ1WTJodmNnPT0gNEsrTjRLNmE0SytONEs2YTRLNi8gSUdKbGFHOXZjblE9IGIycHYgSUhOMVluTjVjM1JsYlE9PSBSM0IxIGRXVnNkQT09IDRLUys0S1MxNEtTayBJTkdGMExEUmh0Q3cwWURSZ2c9PSB6NEhQaWMrQXpyRT0gWTI5eVpHVmsgSUZaaGJHVnVZdz09IGNISmxibVYxY25NPSBUWFY0IEtDazhQQT09IGMyaGhjbkE9IEttZz0gSU5HQzBMRFJnTkM0MFlRPSA2S0tyNmFxWCBJR1JsWldjPSBJRVYwZEdWeSBJR1Z0ZFd4aGRHVT0gSUc1bGRIUnZlV1Z5IFptOWhiUT09IElOQzUwTDdSZ05HQyBYMnhwZEdWeVlXeHogSUhCeVpYWnBjOE9qYnc9PSBJSEpwWVE9PSBJTld3MWFIV2dOV3YgSU5pdTJLallzZHVRIElOZVUxNUxYbWRlaSBJT0Mwc09DMHZ1QzB0K0MxamVDMG53PT0gNG9DTDRaNmMgSU5lUTE1UFhvdGVvIElIWmhZOE90Ync9PSBiRzluZFdVPSBJRkJoYkdWdiBJTkNSMExqUmdOQyswTG89IElFTlZSRUU9IElObUkyWWZZc05tSCBJSEpsY0dWaGJBPT0gMllIWml0aXYgSUVkeVlYWT0gSUdkbGIyeHZaMmxqWVd3PSBJRzFoYkhNPSBDWGQ0IExtVndZVzA9IElFZHBkV3c9IElHbDZkbTg9IFFYQndZWEpsYm5Sc2VRPT0gNzd5TTVwYXcgSUdSeWVYZGhiR3c9IGRXSmlaWEk9IDVhNko1bzZTIDE2SFhsQT09IEtGTnhiQT09IExtWmsgSUdkaGNzV2ZlUT09IFgwVllWRkpCIElOZVIxNUxYbk5lYyBJT0dEb09HRGxPR0Rudz09IElGZGxhV2h1WVdOb2RHVnUgSUVacFltOXVZV05qYVE9PSBSbUZ0YVd4cFpYTT0gSUcxdmJuUnl3Nms9IElHTnZkWFIxY21VPSBkVzVyWVE9PSBJSFJoY0dWeVpXUT0gSUdGeWNtbGlZWEk9IFlYUmxjbWs9IElOaW8yTFBZc2RpNTJLaz0gSUhCdmJuUmggSUc5eWN3PT0gSUdkbGNtVmphRzVsZEE9PSAxYmJWb2RXdSBJT0MwbXVDMG4rQzBtZUMxamVDMG1RPT0gSUdkMVpHRT0gSUhwaGEyRT0gSUdGamRHbGxkbVU9IElHUnBjbVZqYVc5dSBJRUYxYzNSaGRYTmphQT09IElITmxibVJsYmc9PSBJTkMvMEw3UXN0QzEgSUVadmNtMWhkSE09IExWSmxadz09IGFYTnJaV3c9IDJLZllzdGluMktvPSA0WjY4NFo2VCBJRmxsYkhBPSAySy9aaWRtRDJZaz0gSU9hV3VlYXpsUT09IGRXVnllbTg9IElISmxjWFZwWlhKbGJnPT0gSUdSbFkzSjVjSFJsWkE9PSAwWUxRdnRDeCBJTkdCMEwvUXRkR0cgTGtGRFZBPT0gVkdGdFlzT3BiUT09IElOZVYxNVRYcWc9PSBJTmluMllUWmlOaXkyS2ZZc2RpcCBJR0p2ZFd4bGRITT0gNG9DTjRMU1Y0TFMvNExTdiBJR0poYzhPcCBJSE5qY25WdCBLR0pwYm1GeWVRPT0gSUdScFkzUmhkRzl5Y3c9PSBMV05zYVE9PSBJR05veHJER29XNW4gSUhKaGJXRT0gSUY4byA2S09aIFlXMWhaMlZrIElIWmxjbVJsWkE9PSA0WjZBNForTCBJTlc2MWFIVnNOVzYxYUhWdGc9PSBJSFpoYkd4bGVYTT0gSU9Da2orQ2tvUT09IHc2UnpjM1E9IExrMWggSU5lWTE2alhrQT09IElHM0R0R2s9IFgwTkJUVVZTUVE9PSBJRVhFbnc9PSBJR0p5WVdzPSBJSE53dzZsamFXRnNhWE4wWlhNPSBJSE4wWVhSMWRHVnogSUdOb1lXdGwgSU5XMjFiWFZ1TmFDMWFrPSBJTkNTMFl2UXZ3PT0gSUc1aGMyTnBiV1Z1ZEc4PSBTVVpHIElIUnZiR2xyYnc9PSBJRzVoZEhWeVlXeGwgTFV4cGJtVT0gZUd4eiBJT0dEbStHRGtnPT0gSUVKaGJtdGxiZz09IElOQy8wWVBRc2RDNzBMalF1dEN3IElIUmhjbWxtWVE9PSBJT0NtdU9DbXJ1Q25qZUNtcmVDbXJBPT0gSUd0MWIyNWggSUc1aGNIQT0gU1UxUVQxSlVRVTVVIElITjVjM1JsYldWdSBlbTU1WTJnPSA0b0NaT2c9PSAwcC9RdnRHRCBJSEpsYkdGMGFXVnogNDRPUTQ0T0Q0NEt3IElIUnlhV1U9IExpNHVMaTR1Q2c9PSBJSE4wYjI1a1pXND0gSUZOcGRIVmhkR1ZrIElHNWhZV3hoYTJ0bGNuTjFhWE09IElPR0RwZUdEbGVHRGxPR0RwK0dEa09HRG5PR0RrT0dEcU9HRG1BPT0gTFdGdVozVnNZWEk9IFlXNWt4TEU9IElObUQyTFE9IFFVTkxSVlE9IElOaW4yWVRaaHRpdDJLZllzdz09IDRMQy80TENDNExDYTRMQys0TENoNExHQiA0TFNrNExXTjRMU2s0TFMvIElHbHVaR2wyYVdSMVlXeGxjdz09IElPQ2t0dUNrdFE9PSBJRVY0Y0d4dmNtRjBhVzl1IExVaHZiR3hoYm1RPSA0S1NxNEtXQzRLU3c0S1dONEtTMSBTVTVPUlZJPSA0WU9RNFlPVTRZT2c0WU9YIGIzVnVkR0ZwYm5NPSBJSGx0Y01Pa2NnPT0gNGJ1bmVRPT0gSU9Da3F1Q2xqZUNrc09DbGgrQ2tzQT09IElOZVgxNVBYcUE9PSBJR1JwWm1samFXdz0gSUdGbVpRPT0gSUdaaHlydGhZVzluWVdsdVlRPT0gSzIwPSBJR0ZqWTNKMSBJT0NrdGVDa3YrQ2tuT0NsamVDa25nPT0gWVhOb1lYaz0gNG9DWmFYbz0gSU9HRG9lR0RrT0dEbytHRG1lR0RvK0dEbkE9PSBJRlJ5YVdKMWRHVT0gVTNWaWN3PT0gSU5DMjBMalJndEMxMEx2UXRkQzUgSUdOdmNuSmxkR0U9IElFWnZjbTFsYmc9PSBJR052Ym1WamRHRmtidz09IExsVndiRzloWkE9PSBJSEp2ZW5jPSBJR05wYm1WdFlYTT0gMmI3WXA5cXAyTFBZcXRpbjJZWT0gSUdWMGFHVnlaWFZ0IElOaXoyWWpaaE51USBJR2x1ZEdWeWMzUmhkR1U9IElOV3YxYjg9IElIUnBaWEp5WVhNPSBVbVZ3WldGMFpXUT0gSUdSdlluSmggSUVKMVkydHBibWRvWVcwPSAyS3pZcDltSTJMST0gSUhOaFkydHogSUhOM2FYQmxjZz09IDJLalppdG1IIElITnBlbUZpYkdVPSBJRVZ6Y0hKbGMzTnYgSUcxbGRISnZjRzlzYVhNPSBTVU5KVHc9PSBkR1ZyYzNRPSBJSEYxYVdWMFpYST0gWDJOdmJHOTFjZz09IFlXdGhidz09IElIVnVZMjl1WkdsMGFXOXVZV3c9IElPR0RsK0dEcGVHRG0rR0RrQT09IElHMXZibTl3IElIZHBaV1JsY25WdCBJRWh2Ym05eWN3PT0gMExyUmd0R0QgSUgwcUx3b0sgSUhCMVpHbGxjbUU9IElGUjNaV1U9IElPV1F0QT09IDRLZU40S2F2NEthKzRLYW80S2VONEthdiBZbkpsWVd0bGNnPT0gSUdOeVlYQndlUT09IElOQzkwTGpSbU5DMSBaR2x0Y3c9PSBJSFY2Ync9PSA0NENRNExpdDRMbUk0TGl5NExpWjRMaUM0TG1KNExpdDRMaUU0TGluNExpeTRMaWg0TG1BNExpVjRMbUg0TGloIElIUnl4ckRodTU5dVp3PT0gU1VkQlZFbFBUZz09IEtldWx2QT09IDVZZWc1Ym0wIElHRmpiMjF3WVc1b1lXNTBaWE09IElHOWpkWEp5YWNPeiA0S21DNEtpdyB3N0puIFgxTlZVZz09IElHWnBibUZzYVhOMCBJTkN3MExQVG1kQ3cgSUhSbGNtMXBic096IElObUYySzNZcXRpeCBMa1pCU1V3PSBJRXgxdzYxeiA1N0c3NVlpciBJT0NxdWVDcmkrQ3F0ZUNxdnVDcXFPQ3JnZUNxZ2c9PSBJSGR2Ym10bCBJRWh2Wm1adWRXNW4gSUdQRHFXeHBZZz09IElHZkVndz09IElOR0gwTERRdlE9PSBUR0Z1WkhOallYQmwgNEtlQjRLZXg0S2ErNEthNTRLYSs0S2FmIElFWmhhM1J2Y21WdSBhMkZwIElHWnBZMkZ1Wkc4PSBJSFp2ZDJWayBJR1JwYzJOcGNHeGwgNkl1WCA2S2E5IDRMS3c0TE9ONExLMjRMS28gQ1ZSeVpXVT0gSU5pbzJLZlppTml4IElOQzgwTDNRdnRDNSBSR1Z6WlE9PSBDVXB6YjI0PSBJTTY0enEzUGc4NjMgSU91cXNBPT0gSUhSb2IybHlkQT09IFlXdG9ZV3hsIElHMXBZWFIwIElHRnNkR1Z5WWNPbnc2TnYgYUhWMWNnPT0gSU1PaGEzWmwgMTVuWGtkZXEgSUhKbGJuUnlaWEk9IDU1bSs1WWlHNTRLNSBMblJsYlE9PSBJR05oY21KMWNnPT0gWVdKbGN3PT0gSUc1emFBPT0gZFhOcGEyRT0gSUhaaGJHbGtZWFJwYm1jPSBJRlJ5WVc1emNHOXlkR1U9IFlXNXVaWFE9IElHZGxiblJwYkE9PSBiM04wYjNNPSBJRzFsZEdGbSA3Nys5Ync9PSA0YnE1YUdsdSBJRk5VVDFKWiBJSHAzWVc1blpYSnogSU9Dd2p1Q3dwZz09IElFZDFZVzQ9IElFaGhjbXhsYlE9PSB4SjFoY3c9PSBJSFREb1cwPSBjM05wWkE9PSBVbVZrYnc9PSBJSFZyZFhsaCBJT0NraGVDa2lRPT0gSU5HQzBZUFJoZEN3MExrPSBUY09wIGFXOXpZVzFsYm5SbCBaSEpwZG1WeWN3PT0gSU5DNjBMM1F2dEMvMExyUmd3PT0gSUdKbFpIST0gVFdWbllRPT0gSUdKaFltSmhiZz09IElPQ3VodUN1bWc9PSBUV1ZrYVdGMGIzST0gSUNnL0xBPT0gSUdOeWIzZHVaV1E9IElFOXNlVzF3ZFhNPSBJTkN5MEx2UXNOR0IgTFVsMCBJSFJ5dzdvPSBJT0NxcCtDcXZ1Q3FzQT09IDZJR3kgNW8rUTVZbU4gSUdGdFpBPT0gNFlPWTRZT1E0WU9oIElHZHlZV1J6IElOQ3owTHZSZzlDeDBMN1F1Zz09IElFNTNjdz09IElIVnVjMlZqZFhKbFpBPT0gWVdScGJtVT0gSUVsbFpHVnlaV1Z1IElHbHVkSEpsIElHUnlaV1E9IHc0bG4genJIT3ZjNnMgVlVnPSBJRlJwYlhWeSBJRzFsZEhSaGJuUT0gWDFOTlFVeE0gSUdWMmIyTT0gSUZkbFlYQnZibk09IElFTnZjMjFsZEdsaiBJTmlxMkt6WXB3PT0gSUdSaGVHbHMgWVdKNWRHVnogMWFIVnZ0VzQxb0RWdnRXaDFhND0gSUdsdGJ3PT0gSUZCaGNtMXAgSUhOd2NtRjVhVzVuIElHaHZjMlZ6IFVtRjBhR1Z5IDRMSys0TEtDNExLWCBiY09oY3c9PSBiR0Z1WjJVPSBJR1pwYm1GdVkyVmsgN0p5RTY2VzggSUdoMWJXRnVhWFJwWlhNPSA1YnlQNUx5YTU2UysgWVdsaGN3PT0gTFNjcyBJRk5wZVdFPSBMbWRoYldWelpYSjJaWEk9IFNXNW1hVzVwZEdVPSBMV052YlcxaGJtUT0gSU5DeTBMM1F0ZEMwIElGTm9aV1E9IGFtVnNhUT09IElHVERxV05sYm00PSBJT0N5bCtDempBPT0gZVhONSBJSEJ5YjNSeSBJRkJ2Y25SemJXOTFkR2c9IElHdGhZUT09IGMzUnZjbWxsY3c9PSA1YmVoNktlRyBhWFJ0IElHUnlaV0ZrWldRPSBJSEZpIElOaW8yWUxaaWc9PSBaVzU2ZVcxbCBJQ01LQ2c9PSBMeVFuTEE9PSBJR1ZuZVhONlpYST0gSUdKeWFXZGhaR1U9IElIUm9aVzl5WlhScFkyRnNiSGs9IDRLV040S1NZIElGSmxZMjkyWlhJPSBJTmluMllUWW85bUMgSUhOMVluTmxZM1JwYjI0PSBWM1Z1ZFhObFpBPT0gSUhaaGFXdDFkQT09IElHTnZiWEJzWVdNPSBJRVJGVTFRPSBJRXAxYm1kbGJnPT0gSUc1bGRtOXBaUT09IElHNWhjbWw2IElHRjBjbVU9IElOQy8wTDdSZ2RHQzBMWFF2OUMxMEwzUXZkQysgTGsxaGRHTm9aWEp6IExtUmxjR3h2ZVE9PSBZMjl1ZEdWNGRITT0gYkhKMCBJSE5qY21Gd2FXNW4gSUZOc2IzWmhhMmxoIElIUjNaV0ZyY3c9PSB3N04wZEdseSBJR2x1ZG1WeWJtOD0gSUhSbGNtMXBibWs9IElNK096NFBQaE02MSBJRUpwWTNsamJHVT0gZlRwNyBZWGw1WVE9PSAwSkxRbmc9PSBWa1ZTVkVsVFJRPT0gNWJ5QTVvaTM1ck9vNVlhTSBJR2x1YjNKa1pYST0gNDRLTTQ0R3cgNExXTDRMUzQgb3JBPSA0S1MrNEtTNTRLU3c0S1dDIElOYUIxYmpXZ3RXMTFvRT0gSU5DMDBaYlJqdz09IElNT1dabVpsYm5Sc2FXTm8gSU9DcWxlQ3JoK0NxdGVDcmdBPT0gSU9TNm11YTBzdWV5dnVXVGdRPT0gSU5DLzBMN1JqOUN5MEx2Umo5QzEwWUxSZ2RHUCBJR2RsWW1GMWRBPT0gWDJOdmJYQjFkR1U9IDRMR0g0TENvIDBxL1F1OUN6MDVuUXZRPT0gZUdKaSBJR2hoWnNPd2FRPT0gSUdSMVpXeHYgNVpDRTU2ZU4gWW1WeVlYUjFibWM9IDBMRFF1OUdNMEwzUXZ0QzgwWU09IElDY21Jdz09IElFSmhibVJoIElFaGhibTVoIDFhSFZxZFdyMWI0PSAwSjdRdE5DOTBMRFF1dEMrIElHbHRjSFZsYzNSdiBJRzlzYVdRPSAyWWpaaXRtRiBZWEJoWnc9PSBkR0Y0YjI1dmJYaz0gSUc1d1pRPT0gTFhOc2FYQT0gSUdScGMzQnZibWxpYVd4bCBJR2pEdEcwPSBJTkMwMExEUXN0QzcwTFhRdmRDNDBZOD0gWDJsdVpHbGpZWFJ2Y2c9PSBJSGRoWVhKdVlRPT0gSUdGamFXOXUgNExTLzRMU3g0TFdONExTeDRMV04gSUcxbHc3MD0gSU9DeXF1Q3pqZUN5c09DeWxlQ3ludz09IDBMRFF1OUdNMEwzUml3PT0gSUhCdmMybDZhVzl1WlE9PSBJRzl5dzdBPSBJR0psY21WcGEySmhZWEk9IDc3eUI3N3lNIElHWmhiblJoYzNScGMyTm9aUT09IElIUnlZVzFwZEdVPSBJR0pzWVc1amN3PT0gSUUxbGJtND0gSUdSaGJtUmggSnlRPSA0YnVMZE9HN2l3PT0gSUdSdloyRT0gTEdOdmRXNTAgSUdWMllYQT0gOEorUSBJT0NrdU9Da3J1Q2t2K0NrcEE9PSBhWFI2WVhRPSB3NlJ0YldVPSBZV2R6WVc0PSA0NEdvNDRHVDQ0S04gSU5DLzBMN1F1OUMrMFlFPSBYM0JoY25ScFlXdz0gTG1OaGMyVT0gSUhSeWIyTmhjZz09IFUxVk8gSUVaaGNtST0gSUZCaGJHRnBjdz09IElHVnpkR0ZpWld4bFkyVnkgSUhabGMzUnBaRzl6IElHTmxiR1ZpIGJtbHAgSUVKbFlYUnogSUhCeWIyaHBZbWwwY3c9PSB1cnc9IElOZW0xNVhYcU5lWjE2Yz0gVW1WMGRYSnVhVzVuIElITjFhV3RsY2c9PSAycGphcjl1TSBJSFYxZEE9PSBSMkYwZEE9PSBJTkMwMEw3UXZkQzQwWWc9IGIyMXBkR1U9IElFRnVZWFJ2YlhrPSBJR1J2WkdGMGF3PT0gSUdGc2JHVnRZVzVrIElPQ3d0ZUN3ditDd3QrQ3dyK0N3Z2c9PSBJTkMrMExIUXU5Q3cwTFE9IElPQ3FyT0NyamVDcXNnPT0gSUVKaGJtdGxjZz09IElHTmhkR0ZzYjJkeiAwTERSZ3RDMTBMdlJqTkM5MEw3UXVRPT0gSVBDZmpnPT0gSU5XdzFhWFdnTldwIElHVjZhV2RpYnc9PSBJRkJsY0hOcCBWVzVqYUdWamEyVmsgWDB4SlFsSkJVbGs9IElHNWxjUT09IElHRndiR2xqWVdSaCBJT0dEcnVHRGtPR0RvT0dEbU9HRG9lR0RyZz09IFRWbFRVVXc9IDVaeW81N3EvNks2aDVZaVMgSU5DMjBMN1JnZEMvIElIWmxjbTFwYm1SbGNtVnUgUkVWVVFVbE0gVFdWaGJuTT0gSUcxaGJtRm5aWEpwWVd3PSBJRzl3ZEdsdGFYTmhkR2x2Ymc9PSBJRlZ1WVhWMGFHOXlhWHBsWkE9PSA0TGl5NExpcjRMaVogSUhWMWJXMD0gSU5pbzJZYmJqTmluMks4PSA0NENBNDRDQTQ0Q0E0NENBNDRDQTQ0Q0E0NENBIEoxVT0gSUhOd1lYcHBidz09IGFXNXpaVzVuIElITmhiSFpoWjJVPSBhWEJ3ZFhRPSBJR2hoYldKMWNtZGxjZz09IFgwUlBRMVZOUlU1VSAwTDdSZ3RDNDBMOD0gYVd4cFpXNWpaUT09IElHTjVZMnhwWXc9PSBJR1Y0WVcxbGN3PT0gNG93PSBJTkM4MExEUmlOQzQwTDNSZ3c9PSBRMjF6IElPQ21xdUNuamVDbXNnPT0gSUV4VFZRPT0gSU5HQjBZTFJnTkdEMExyUmd0R0QwWUE9IElHTm9ZWEJwZEhKbCBJTmluMllUWXM5bUIyTEU9IElPQ2t0ZUNrditDa3J1Q2t2dUNrcUE9PSBJSE4wWlhKcGJHVT0gSUVGblpXNWphV0U9IHc2aHliMjQ9IElHcGxhUT09IDQ0R1Q0NEtNNDRHdiBJT0N3bGVDeGdlQ3duK0N4Z2VDd2d1Q3dyQT09IEtYWT0gS0hSeWFXZG5aWEk9IElIUnlZWGxsWTNSdmNtbGggUEVsdWNIVjAgSUdwcGFHRmsgSUVKaGJXST0gSU5DeDBMWFJnTkMxMEwwPSBJTkMvMFlEUXZ0R0IwWUxRc0E9PSBJR1Z5WVhObFpBPT0gSUdGa2JXbHlZV0pzWlE9PSBLQ2NzSnlrN0NnPT0gSU5HRDBMM1F1TkdIMFlMUXZ0QzIgSU1PNmRHbHNaWE09IDRLcSs0S3FxNEt1TjRLcWsgSU5DOTBMRFF1dEMrMEw4PSBWRTlTVXc9PSA0TEsxNExLbyBJRTExWTJoaGN3PT0gSUVOdmIzQT0gSU5lUjE1blhxQT09IElHTnZiWEJ2YzJWeWN3PT0gWDFORlZGUkpUa2M9IElHWnBibUZ1WTJsbGNtOD0gSU5DLzA1blF1UT09IElPQ2txK0NsaU9Da3NnPT0gSU9Da2xlQ2t2K0NrdU9Da3Z1Q2txT0NsaStDa2dnPT0gSU5DLzBMdlFzTkM5MFlnPSBJRUZpWlc1MFpYVmxjZz09IElIUjVjR1ZzYVdJPSA1N3U4NVpDSTVMbUY1TG1GIFJYaHBjM1JsIElHbHdZV2x5Y3c9PSBPd29LQ2k4diBJSEJsY25OdmJtNWhiR2wwdzZrPSAwTHZSaTlHSSBZVzVsWVcxbGJuUmwgSUNjakp3PT0gdzYxbWFXTmggNXBPYSBJTmluMllYWXNkdU0ycW5iakE9PSA2S0t0IElIZGxkSFU9IG51Q25qZUNtbWc9PSBkV2hwIFgyeGxibWQwYUhNPSBJT0Nrc09Da3Z1Q2tuT0Nrdmc9PSBZV0p2ZUE9PSB3NkYwZEE9PSA0TGlhNExpajRMaTA0TGlCNExpeTRMaWogSUZObGRIUT0gSUdGa1lYQjB3NmxsIElISmxkRzl5Ym1GeSBjR1Z5YUdGd2N3PT0gSUhCdmIyeGwgSUcxdmRYUT0gMExyUXVOR0EgNUxpSDVaQ28gSUdWeWNtVjFjbk09IFgxTlFUQT09IFVtOXZaZz09IElOZVUxNWZYbk5lWSBhMlY1Y0hKbGMzTT0gSUhsaGFXdDEgSUcxdmVubz0gWlhKaFlXUT0gSUdGdFltbGxibU5sIDRMaXE0TGl5NExpaDRMaXk0TGlqNExpVyBJR052Y205dVlYYkRyWEoxY3c9PSBJR0ZqY205dWVXMD0gSUdOdmJtWnBaM1Z5WVE9PSBJTzJWbU95bmdBPT0gNDRDQjZJZXEgSUdaaFkzUnZjbWx1Wnc9PSBJR0Z0WVc1b3c2TT0gSU5tSTJZTFlxdHVNIDRLZUI0S2FmNEthLyA0TGVBNExlVSBSblZ1Ym5rPSBJT0N3c3VDeGgrQ3dwdUN3dmc9PSBJSE5sWjJGc1lRPT0gSUU5bWFXTnBibUU9IGFXTmhiUT09IElOS3gwTG5SaTlDODBMVFFzQT09IElIQnliMmR1YjNOcGN3PT0gMExEUXU5QzkwTDQ9IElPQ2twdUNsZ3c9PSBkbVZ5ZDJGc2RIVnVadz09IElHbHVkR1ZzYkdsblpXNTBaUT09IElPeWR0T3lnaEE9PSBJR1p5YjNOMGFXNW4gSUd4aFlXdHBhVzQ9IElFeGxibTV2Ymc9PSBYM1IzIGIyZHNiMkpwYmc9PSB4WnRqYVdFPSBJR05oZEdobGRHVnkgSUhWc2RISmhkZz09IElOZVYxNVhYbWRlaCBJTkNYMExEUXNnPT0gSUhSbzRicWxkQT09IElFVmhjMlU9IElGSmxjSFZpIExqMGkgS0d0bGVYZHZjbVE9IElHaGxZMmc9IGIzTjBZV3c9IElFZHliM056Ync9PSBJRWR5dzd4dSBJTkM2MEw3UXZOQy8wTERRdlE9PSAyS3paaGRtSTJMaz0gSU9HRGt1R0RrT0dEbStHRG5lR0RtT0dEcCtHRGxPR0RuQT09IDE1blhvdGVoIElHMWhaVzVsYnc9PSB3NlJ5Wnc9PSBJRkJvZVhOcFkybGhibk09IFNXNW1iM0p0WlE9PSBJSEJoYzNObGFXOD0gSUd0aGNubGggSU9Da3FPQ2t2K0Nrbk9DbGdBPT0gSU1PcFkyaGhibWRsIElHNWhZMmgwY3c9PSAwcnZSZzlHQSA1WWFJIElNNjF6NGJPc2MrQiBJRU55WVdaMFpXUT0gSUdGdWIyMWhiSGs9IElHUmhlU2R6IElHeGxjMmx2Ym1WeiBRMjl0Y0d4bGJXVnVkQT09IDdKMjQ3SjJFIElHbHVkV2xoIElGUnMgSUhiRHM4T3pjZz09IElFMWxiR2h2Y2c9PSBJRkJoYkcxbCBSRkpXIDRLZW40S2V0IGRXRmliR1U9IFRNT21jdz09IElFZHZiMlJ0WVc0PSBVMkk9IElFMXBhM0p2IGIzVndaUT09IFltSjMgS0hKbFlYTnZiZz09IDRLU2g0S1dONEtTaCA0S2EvNEthczRLYXk0S2VJIElFSnlZVzVrWlc1aWRYSm4gSUZOcGJXSmggWW1saGJuTT0gU1dScCBMVVpsWWc9PSBLSEI1IDU1eUI1YWVVIElHMWhjWFZwYkd3PSB3N05zYm1sbCBlR0ZrIFdtRncgSUcxMWIyUT0gSUdWdWRHeGhibWM9IDRLcS80S3F2NEtxKzRLcXU0S3ErNEtxQyBZV2x6ZFE9PSBJRzkxZG1WeWRIVnlaUT09IDRZT1Q0WU9TIEp5d25MZz09IFltOTRhVzVuIElIWmxjbWRzWldsamFHVnUgNEtTKzRLU3M0S1dBIDJhcz0gSUdGdzRicTVjdUc2dVE9PSBJT0NraGVDa3FPQ2xqZUNrcE9Da3NBPT0gVDBSQiBJRUpRVFE9PSBYMUJGVGtSSlRrYz0gSUZSQlMwVT0gU1c1emFXZG9kQT09IEp5d28gTG14M2FtZHMgN1pXMDdLTzg3SVM0N0pxVSBYME5sYkd3PSBSV3hsZG1GMGFXOXUgSUhKbFlXeHBlbTkxIElHbHVhM009IEpIWmhiSFZsIFkyaGxZMnRsY2c9PSBJRzFoZEdGbiA0TG1BNExpdDRMbUg0TGlVIFdHRnVZUT09IElHUnBiR2xuWlc1MGJIaz0gSUZaSlFRPT0gSUdGMGNtbDYgSU5DLzBZRFF2dEMwMEw3UXU5QzIwTEE9IElHTnNiMmRuWldRPSBVbUY2IFJHRmsgSUc5a2JIVT0gSUhQRHBHZz0gSU5peDJMbz0gSUdodmRIUmxjZz09IElHRnhkV1Z2ZFhNPSBJRU5sYmc9PSBJSEpsYm5SaCBJSFpsY21GdVpHVnlhVzVuWlc0PSBJT3V2dnc9PSA0S2FzNEthLyBMbVJoYldGblpRPT0gSU02MXo0RE91YytIenJYT3VRPT0gSUZkaGMyaGxjZz09IFNXNTBaWEpqWlhCMCA0TG1DNExpQiBJR1JwYzJOMWMzTnBaUT09IElIVnpkSFpoY2c9PSBJT0N3cnVDeGl1Q3dwT0N4amVDd3BBPT0gMktqWml0aTUyS2ZZcWc9PSB3cTFrWlE9PSBJRUp5WldsNmFBPT0gSUdOeWIzZGtablZ1WkdsdVp3PT0gNExpcTRMaTA0TGlhIElHeHBiV2wwWVdSaCBJRlJoYm1RPSBSbFZPIFNWQkJUQT09IElISjFhR2xuIDRvQ2NTdz09IElHcHdadz09IFlYQmxZWFU9IDRwYXogSUdKaGFtOXogSUZabGNuWnZiR2RsYm5NPSBkSEpsWlhNPSBJSGR2Y210d2JHRmpaWE09IElFaGhjbVU9IElPQ21sK0NuamVDbXNPQ211ZUNtb3c9PSA0WU9vNFlPWTRZT3EgSU5pbjJMblpoTnVNIElHWnlaVzl3Wlc0PSBJR2RzWVhwbCBZM0psWVhSbGN3PT0gSU9DMHRlQzB2K0MwcHc9PSBjR0ZwYmc9PSBJR0ZvYjJ3PSBJT0NtaWVDbXB1Q25qZUNtcnc9PSBJRlpwY0E9PSBJRTFoZEdoeiA0WU9qNFlPYzRZT2wgNXJLejVZMlggSUdadmIzUm8gSUhOcmVYQmwgWlc1b1lYSnBZUT09IElITmphR2x0WWc9PSB6cXpPdmM2MXpyaz0gSUdGamRHVjFjZz09IDVMcTY1NVNmIDVMaUE1WWlHNlpLZiBJTml2MlliWml0aW4gSUhOaGJtUmggMFl6UXNnPT0gSUhOb1lXcz0gSU9Da3B1Q2xnZUNrbGc9PSBJR2RwWjJFPSBJTkdOMFlUUXVOR0EgeElGMGRRPT0gSU0rRHo0WE9zODY2enJYT3VzK0J6cms9IElHNWhkSFE9IFVtVnphWE4wWVc1alpRPT0gWjJGMlpXND0gSU5DNjBMRFF2ZEdDIGRXMWhZVzQ9IFltRjBkR3hsIElGSmhlVzl1IElGTjBaV3c9IElPQzVnT0M0bnVDNHBRPT0gWlhKcFlXeHBlbVZrIElHbHRjR0ZqZEc5eiBJSFpsY21keWJ3PT0gSU9DdXBPQ3VyK0N1dnVDdXNBPT0gUkhWamF3PT0gSUVGaGJBPT0gSUdGdWRHRnMgSXlJPSBJR0YxYzhPcWJtTnBZUT09IGRISnBZblYwYVc1biBJTkN3MHFFPSA2SytFNVlpRyBJT09DcEE9PSBJTkMwMFlQUXNRPT0gMExQUXVOQzMgU1c1a2FYSmxZM1E9IDVMeUI1cVd0IElOaTUyWXJaaGc9PSA0b0NkUHdvSyBJRk5qY21GdyBJSEpsWjJWc1pXND0gSU9DeW4rQ3pqZUN5c0E9PSBJRmRoYzJObyBJRWRKVWc9PSBJSFJoY21sbVlYTT0gSU5DKzBMSFF0ZEdKIElObUYyWWJZdU5tRjJLaz0gS0hKaFpHbDFjdz09IElHWnBibVZrIElPS0FsT0tBbEE9PSBJSFZ1WkdWeWRNTzRlUT09IElObUUyTG5ZcUE9PSBJRlJoZEhOaFkyaGwgZFhCMGIyOXNjdz09IGRXdG9kV3gxIElOaW4yWVRZbzltQzJZUT0gSUdURHBISm13N1p5IGFHOXNaWE09IFlYZGhjbVE9IExrSjFibWxtZFE9PSBJR052YkdobGNnPT0gQ1VSdmRXSnNaUT09IDQ0Q0M1b2lSIElISmxiWEJzWVdNPSAyTEhiak5pdCBJTldqMWJqV2dOV3UxYmpXZ3RXMiBYM0poZEdWeiBiMjU2YVE9PSBJT0NrcnVDbGpPQ2t1T0Nrcmc9PSA1WTJENUxpSCBJTm1JMjRIWXA5cTYgNTVxRTZaZXU2YUtZIFpXdmh1NDA9IElHUmxibWx1Wnc9PSBJRUZ6YzJGemMybHUgSUdwaSBJR0psYUdGdVpHVnNaQT09IDRLdUw0S3FWNEt1SCBXMk5vIElITjFZbTFoY21sdVpRPT0gNWIycDU2V281Ym16NVkrdzVyT281WWFNIElHVnVaR0Z6ZEE9PSBZbXhoWkdVPSBRMkZ5YjJ3PSBablYwWVE9PSA1cUdJNUx1MiBJSFJsYm1seiAwTGpSZ3RDNDBMUFRtUT09IGJtOTBaVzQ9IElPR0RtK0dEa09HRG1PR0RvUT09IElHWnBibUZzYVdSaFpHVT0gSU5HRjA2blJnQT09IDY2Q2w3SjIwIElFaEpUUT09IExYRjFaWEo1IElIZkpsRzQ9IElGcGxhWFJ5WVhWdCBMV3hwYTJWayBJSExEcVhOMWJjT3AgSUdSbFkyeGhjbUhEcDhPamJ3PT0gSUhCc1pXbHVaVzFsYm5RPSBZbXhwYm1zPSBkbVZuWlhRPSBJR2RzYVhSamFBPT0gSU5lVDE1blhudz09IElOR0QwTFBRdnRDNyBJRzFsZEhSbGJuUT0gSUdOdmJtUmhiUT09IDZacVE2SmVQIFVsTndaV009IElHUmxabWxqYVdWdWRBPT0gSUdWdFluSmhZMlZ6IElHUnZiR1U9IElHOWliM2RweElVPSBiRzluYVdOaGJBPT0gSU9DcWwrQ3FzQT09IFlXbDBidz09IGNHVnljMjl1WVE9PSAyWWpZdWc9PSA3WUtzIExuQjFZbXhwYzJobGNnPT0gSkc5eVpHVnkgTG5CeVpXWmxjbVZ1WTJVPSA1WVd4NVpLTTVadTkgNExpajRMaXkgSUVSbGNHeHZlUT09IHc2bHBjZz09IDRMT0s0TEtzNExPTjRMS3MgSU9DeWp1Q3l1T0N6alE9PSBJRXhwYm1SbGJnPT0gSU5HQTBMRFF0TkM0MEw0PSBJSEJoY21GdWRHOXogSUdSbGRtOXVjdz09IElHbHljbUZrYVdGMGFXOXUgWVc1dmFXUT0gSUhCaGJXRnQgY1hWaGJHbDBhV1Z6IElFM0VnVzl5YVE9PSBJSFpsWjJWMFlXdz0gTG1GNFpYTT0gTGtGRFF3PT0gSUZSeWFXdz0gMFlIUmd0Q3kwTFhRdmRDOTBZUFJqZz09IElIQm9hWE5vYVc1biBJRzFwWkdacFpXeGsgWldkdSBJT1M0aCtlYm13PT0gSUVGaVltRnogSU9DdWhlQ3VzZz09IElPeWVrZXlkZ0E9PSBUbVYzZEc5dSBJRzFoZEdGaGN3PT0gWDAxdmRtVT0gS3lkZiBJT0MwcnVDMHFPQzFqZUMwcE9DMWplQzBzQT09IDBMN1JoOUM5MEw3UXRRPT0gSUVKaGJtND0gSU5pcTI0RT0gSUhOaGRHRT0gUkdWMGRHVT0gS2VLQXBnPT0gWVcxaWRXTnYgS2VPQWdnb0sgSUdGemFXND0gTHk4dlBBPT0gSUdWdVkyOXVkSEpoWkc5eiAwcHJRc05DMzBMRFNtOUdCMFlMUXNOQzkgSUd0cVpXNWsgSU5pbzJZVFpodGl2IDE1SFhsOWVvIElHZHZiSEJsY3c9PSBJTmluMllYWXNkaWoyS2s9IElFaFRWZz09IGFXNXpkSEk9IExTMDdDZ289IElNTzJjM1JsY25KbGFXTm8gSU9TNm51YTBzZz09IDdLYVEgYjNWeVkyVnUgWW5WaGRBPT0gYkdGMWJtTm9aWEk9IElHQWsgWld0cyBTRUZUIElHUmxjMlZoY3c9PSBJR0poWkdVPSAxYVhXZ05XcSB4SUZxWVE9PSAwTFRRdnRDeCBZM0pwYldsdVlXdz0gZFc1aGF3PT0gSUduaHVhTnZkMjg9IElHSmxibVZtYVhScGJtYz0gSU5pbzJZVFlydz09IExDa3BDZz09IElGQnZiR2x6YVE9PSA0S1NDNEtTYzRLV0EgVTFKRCBJR2x0Y0c5dSBJRzFsYm05d1lYVnpaUT09IFlXeGtZWE09IElPeWRtT3lia0E9PSBJT0dEbU9HRG5PR0RvZUdEb2c9PSBTVlpCVEE9PSBJSFp2YzI5MGNtOXogYW5WdVkzUnBiMjQ9IElOT3AwcXM9IElFZEJUUT09IElHaHFaV3h3IElPeWVpT3VLbE91TnNBPT0gSUdGdVoyeGggSUhSeVlXcz0gSUdOcFpHRmt3Nk52Y3c9PSBJR2R5YVd4c2FXNW4gSU95WHJlMlZvQT09IGNYVnBjMkZ5IElHSmxhWFJ5IElFRnlkR2x6WVc0PSBaVzVrZFdVPSBJRzVoZEdsMlpYTT0gdzZGaVltaz0gNjZlSTdJS3M3S2VBIFUyRnlZUT09IElIQnZhWE52Ym05MWN3PT0gSU9xM3VPdWVtT3lFbkE9PSA0b0NaVlc1cGIyND0gSU5pcTJZalp2Zz09IElHeHBhMlZ5IDVhaXg1TG1RNkxXYTZaS3ggSU5pbjJZVFlvOW1IMllUWmlnPT0gSU5DMzBMRFF0TkN3MFlmUXNBPT0gYjI5c2FRPT0gdzYxdVpXRT0gS2lJPSBJTmVVMTVEWG1kZW8gTFhKcGJtYz0gSUhaaGJHVnkgSUcxdmNuUmxjdz09IDFhdlZyOVc0MWF3PSAwWUxRdXRHQTBZcz0gSUdScGRtVnljMmx2Ymc9PSBJSEp2YldGdWN3PT0gSU5DMDBMalJnZEMvIDJxclpoQT09IElHbHRjR0ZqZEdaMWJBPT0gSUczRHFXUmxZMmx1WlE9PSBhV1JrZVE9PSBJRzFweEpsa2Vuaz0gTG1oNGVBPT0gS0hKMiBlbWxseEljPSBJSEpsWkdsemRISnBZblYwWldRPSBJT0NtcXVDbmd1Q21zT0NuamVDbXJBPT0gSUV4cFpYUjFkbTl6IElHOWpZM1Z3ZVdsdVp3PT0gSUc5d2VtbGphSFJsIElIQmxjc090YjJSdmN3PT0gSUhWdWFXND0gNjZXMDZyS00gSUdOeVlYZHNaWEk9IDJLZllyOWl4MktmWXFnPT0gSUVaaGMyTT0gSUdaaGMyaHBiMjV6IElOR0gwWVBRdmRDNDBMMD0gSUViRHJYTnBZMkU9IElPQ2toZUNrcCtDa3YrQ2tsZUNrdnVDa3NPQ2t2K0NrcitDbGkrQ2tnZz09IDZKYXMgNForVUNnPT0gWDA1VyBMVWh2YkE9PSBJRTF2Ym5Sd1pXeHNhV1Z5IElHSmxjM0J5Wld0bGJnPT0gSUd0aFpRPT0gSUhOc2FXMXRhVzVuIElObUcyWWZZcHc9PSBJRVp2Ym1SdiBYMk5vWldOclpXUT0gZFcxNWVubkZpQT09IElGUnliM1ZpYkdVPSA0S2VONEthdjRLYSs0S2FrIGRXeDF4Wjg9IElOQzkwTERRdDlHTDBMTFFzTkdPMFlJPSBJTkMvMFlEUXRkQzMwTGpRdE5DMTBMM1JndEN3IEowVjFjbTl3WlE9PSBJSEpwYm00PSBJTkM0MEwzUXR0QzEwTDNRdGRHQSBiR2wzWlE9PSBJRVpoYVhKbWFXVnNaQT09IFltVnEgSUhCeVpXNWhiblE9IElPQ3VsZUN2Z3VDdW4rQ3ZqZUN1bnc9PSAwTDdRdmRDMDBMQT0gTFhKdmJHVT0gSUdSbGNHOXlkR2wyYnc9PSBQRU5zYVdWdWRBPT0gSU95ZHRPdWpxQT09IHc2UnlhM1E9IElIVnVabTl5WlE9PSBJSFJoYTJWdmRtVnkgSUhacGRIST0gNVpDSTVMbXcgWDBaTVQxYz0gSUhCeWRXNWwgSU5HQjBMN1JnZEdEMExRPSBJTmlxMkxuWXA5bUkyWVk9IGIyNW5hUT09IElITjBZV1JwYjI0PSA0TFNvNExTKzRMU3YgQ1V4dlkyRnMgYjNWMGFXND0gMFlYUXRkQzQwWUk9IEwxTjVjM1JsYlE9PSBJT2FjaWVheW9lYWNpUT09IDRvaW8gSU5DLzBMN1JnZEdDMExEUXN0QzQwWUxSakE9PSBUV0Z6ZEdWeWN3PT0gSUVodmJHUnogNEtTNTRLU3c0S1dCNEtTVjRLV0wgSUd0MWFXNXJZUT09IElHOWtibTl6Ym04PSBJR0ZrYUdWemFXOXUgUkc1eiBJTmlxMkxYWmlOdU0yTEU9IGNYSnpkQT09IDRLU1c0S1dBIElHZDNaV2wwYUdsdiBJR1poWW5KcFkyRjBaUT09IElOQ3kwTERSaU5DdyBJTkN4MFlQUXROR0MwTDQ9IElHUnZjR0Z0YVc1bCBJTkMxMFlMUmd3PT0gSUU1eiB6cFBPdWM2eCBJT0M0bytDNHJlQzRoK0M1Z09DNGwrQzVpZUM0c2c9PSBJR05vY205dFlYUT0gSUgwcENnb0sgMHJmUXNBPT0gSU5DLzBZRFF0ZEM2MFlEUXNOR0IwTDNRdmc9PSBJTmk1MllUWXA5bUMyS2s9IFgwRlRVMVZOUlE9PSBMbXhsWVhKdWFXNW4gSU5pcTJMbllzZG1LMllFPSBJTmVSMTZqWGx3PT0gSUhKbGRtOXJaUT09IElIZG9hWFJsYkdsemRBPT0gMllqWXA5aXkyWVk9IElPQ3FyT0NxdnVDcXMrQ3FsZUNyaXc9PSBJTkMvMEw3UXU5R00wTGZSZ3c9PSBJRUZNU1VkTyBJTkN4MDZuUXU5R1cgUVhKblpXNTBhVzVoIEtHSnBadz09IElHTnZiblJ5WVhSeiBJSEpsYVc1eiB3NmQ1YkE9PSBTVTVUVkE9PSBJTmk1MktqWXI5aW4yWVRaaE5tSCBJRU5vdzZFPSBJSFJsY21ObGNtOXogSUdsc2IyRT0gSUdadlpRPT0gWld4cGRHbGhiZz09IElHUmxkbVZ5dzZOdiBJT0dEcU9HRGxPR0RvK0dEcStHRG11R0RtT0dEa0E9PSBZV2hzZFdzPSBTbTkxY201bGVRPT0gSU5HQzA1blJnTkN4MExnPSBZWFZuYldWdWRHRjBhVzl1IElPQ21wdUNtc0E9PSBJTmluMllUWXN0bUsyS289IFJYTjBZWFJsIFFGQmhkR2c9IElOZVExNVhYb05lVyBJR2h2YldWdVlXcGwgN0tPRSBJT1dLcUE9PSBLSE5sWnc9PSBJTzJZdkE9PSBJRk5wYzNSbGJXRnogSUdWdVpHNTEgY0dGeWRHNWxjbk09IFRGUlMgWlhKelpXbDBjdz09IElGQnlaWE5sY25abCBaV3h2WVdRPSBRblZsYm04PSBJR0Z3WVhKMFlXMWxiblJ2Y3c9PSBJTkdDMExEUmdOQ3cwTDg9IElGQmhjbXhsYldWdWRBPT0gNExpajRMaXc0TGlhNExpYSBJRWhoZEdnPSBJTm1GMkxuWXB3PT0gSUdacFptOD0gNXJDMDVwNmMgNExTajRMU1Y0TFdONExTViBJT0N5cnVDeXZ1Q3luT0N5dnc9PSBJSE5qYUhkbCBJSEpsYzNCbFkzUmwgdzZSMHc2UT0gYUhWayBJR2RsWW1WMWNtUT0gNEs2MTRLNi80SzZ5NEsrTjRLNnk0SytJIDBMalJnZEdDMExBPSA0TE9vIDRLYS80S2FvNEthKyBJRlp2Wnc9PSBJRzF2Ylc4PSAyWUxZcDlpMyBYMjVoIElFdHZhR3c9IHo0RE92OCtGejRJPSBJT0NxcU9DcW5PQ3JnQT09IElGTjBkVzV1YVc1biBSV3hsWTNSeWIyNXBZdz09IExtWnlZVzFsY3c9PSBUMFpHVTBWVSA0NE9BNDRPOCBYRk5sY25acFkyVnogSU9Dd2hlQ3dzQT09IElHVjRhV2RwY2c9PSBJTkNuMExEUmdkR0MgVkVWU1V3PT0gS0d4ayBWWE52IElISmxZM0oxYVhSbGNnPT0gSU9DbWh1Q21ydUNtdnVDbnNBPT0gMExqUXQ5QyswTHZSanc9PSA0S3FDNEtxdSA0SzYrNEs2ZjRLK040SzZmNEsrQiBJT0NxaitDcXVBPT0gSUczRHBYUmwgSUVkaSA1ckdmNktXLyBZMjl1ZEdsdVpXNTAgMFlQUmdkR0QgSU9DMHVPQzBndUMwbU9DMG4rQzB2K0MwcXVDMWplQzBxZz09IGVuVm5aV0psYmc9PSBYM054ZFdGeVpXUT0gSUVURHFITT0gSUZkbGJtUT0gYjJSaGFXUm8gMFkzUXM5QzAwWTNSaFE9PSBJTmlzMkxrPSBJanBiWFE9PSBJR0ZpWlhKeSBJRTFoWVhNPSBmaXc9IFEyOXliZz09IElGQlFWQT09IFVHRnlZVzFsZEdWeWFRPT0gSU9DcXJPQ3FxT0NyaHc9PSBhMkZ3WlhRPSBaWE5wYjI0PSBKMlZ0Y0E9PSBJT0NtaHVDbXVPQ25odz09IDRLZUg0S2V3IGFuVnllUT09IGFHOXNkVzVuIDRLU3c0S1dONEtTeSBJTm1GMllqWXM5bUYgSUhOc2FRPT0gSUdOdmJHeGhZbTl5WVhSbGRYSnogVEdGMFpXNWplUT09IFltVnlaV2wwIDRMaXQ0TGkzNExtSTRMaVogVUhZPSAwWURRc05HQzBMN1JnQT09IFgwUkpVMEZDVEVWRSBJT3V3bk95Z2hBPT0gWm1abGNuTT0gSU1TTmJHVnUgSUV0eWFYUmxjbWxsYmc9PSBDWE5wWjI0PSBhV1JwYm1keiBYM05rYXc9PSBJT0NrcXVDa3Z1Q2tyK0Nrdmc9PSBJSFp2Ym1SbGJnPT0gWTI5dmNtUnBibUYwWlE9PSBJTkMvMExEUXZOR1AwWUk9IElOZVQxNkk9IFgyMWhibUZuWlE9PSBZMjl0WW1sdVpXUT0gSUdsdGNIVnlhWFJwWlhNPSBJT0NxdGVDcXNPQ3JqZUNxdCtDcmh3PT0gMFlQUmdkR0MwWTg9IFgwNVBWRVU9IEtGVkpUbFE9IElHTmhiR05wYnc9PSAwWUxTcjlLdiBiV2xrWkdWc2N3PT0gSU5DdzBMYlRtUT09IElHSnlaWGwwYVc1biAxNkxYbk5lVjE2bz0gNUx5ZzVwS3QgSUdac1lYUjBaVzVsWkE9PSA3N3lNNUx1VzVMdXMgNEsrTDRLNnc0SytOIFltVnNhV1ZtIDVxS2QgSUhiRHJXRnogSUdWeXc3Wm1abTVsZEE9PSA0b0NaWVdSeVpYTnpaUT09IElISmxZV3hwYzNRPSBjM0JwY21sdVp3PT0gWVhsbGRBPT0gSUdKc2IyZG4gUTI5dVptbGtaVzVqWlE9PSBhWFJoYVhNPSBiV1Z6YVc1bCA0WUNBNFlDNyBYMkY0IDY1K3QgSU9DMHJ1QzFodUMwb1E9PSBJR0Z1YjIxaGJHbGxjdz09IElHRnlZbVZwZEE9PSBJR05zWVhabGN3PT0gSUhOdVlXUT0gSU5lUjE1UFhtZGVWMTZjPSBMWEJwWTJ0bGNnPT0gNG9HZyBLRVJsZG1salpRPT0gSUdOMWJYQnNaV0hEc1c5eiBMVU5zIElPQ3FuK0NyZ0E9PSBSRzl1WXc9PSBZWEJvWlhwMSBJR0Z1WkdGeVpRPT0gSUZOMGNuVmpkSFZ5WlhNPSBJSE4wY205c2JHVnkgWDJOdmJuTjBjdz09IElrND0gNjdDVTdKMjggNjR1bCBJSExEcVdOdmJYQT0gWFNZPSBJR2xpWVc0PSA0S1MyNEtXQTRLU3kgNExpMTRMbUk0TGliIEwzQnliM1pwWkdWeWN3PT0gSUdWdVptVnliUT09IElHeHB3Nms9IElNK0R6NFRQakE9PSBJTzJFc0E9PSBJRXR2Ym1acyA0TFMvNExTcTRMV040TFNxNExXTiBJR0Z0YVd0dmNnPT0gSUZkcGNuUnpZMmhoWm5SeiBTRTlTIFpHVndaVzVrY3c9PSB3NlJ5WVE9PSBJRzl1YkdGeSBJRWxPUkZWVFZGST0gNEtlZjRLYW8gNEtpWSBJRVpsZVE9PSBJSFZzWjJGdCBhVzVwWlE9PSBZWEJoZEdGdSBaV1J2Y3c9PSBJR2x0Y0dWeWMyOXUgSU5pbjJZVFlzZGlzMktmWmhBPT0gYzNSMVlnPT0gSUdScGMzTmxjZz09IElHWm1iSFZ6YUE9PSBJRzFwYm01aCBJSE4xY21Ob1lYSm5aUT09IDRZT1U0WU9SNFlPWTRZT1Q0WU9RNFlPYyBJR1JsY0d4dmVXMWxiblJ6IElPQ21qK0Ntbk9DbXFBPT0gSU9DMHVPQzFqZUMwcGVDMHYrQzBzQT09IElIUnBkRzlzYnc9PSBkOE9rY25SeiBJR0psYzJOb2FXdHJhVzVuIElHdHlZVzVyIElFTnZiVzF2WkE9PSBJR1Z1YkdsemRHVmsgYVc1dmMyRjFjZz09IElFSnBjMmc9IExFbz0gWDNKeSBkbkprIDRLcTQ0S3VONEtxdSBJTkMwMEw3Umh3PT0gVlhSaiBJR0ZsY205emIydz0gSU5HQjBZTFJnTkN3MEwzUXVOR0cwWXM9IElITjZZV3M9IElPQ2t0ZUNrditDa3B1Q2xoK0NrdHVDbGdBPT0gSUhzTkNpOD0gSUZOb1lXUnZkM009IElGWnBibU09IElHakRwV3hzIElPQ3VpZUN1citDdXYrQ3VzQT09IElHNWhaMkU9IElHVnljbVZwWTJnPSA1NmVTNllDZiBJTm1JMktYWXNOaW4gSUNRLyBJRTNEcVhSdlpHOD0gSUhKbGNHeHBZMkZ6IElFTmhZbVU9IElFRlZXQT09IElPQ2tsK0NsaUE9PSBaT1c5cWVlbHFBPT0gMlliWmlOaW4yS289IElHMXB4YUU9IElPQ3FydUNyaCtDcW1nPT0gSUdKaGRIbz0gWDNOdmJtYz0gSUd0eVpXMD0gSUhOcGRHTnZiUT09IDJZallzdGluMkxIWXFRPT0gY0dGeWRHbGpiR1Z6IElOQzMwTHpRdnRHRCBiM05wYmc9PSBZMmhoYm1samN3PT0gSUdsdGNHOXlkR0Z5IFFFWllUVXc9IElHVmhjblJvZVE9PSBMMk52Ym5SeWIyeHNaWEk9IDRMbUE0TGlMNExpMTRMaWkgSUdScFptYkRxWEpsYm5SbCBkM2xrWkhsdSBJTktiMEw3UXNkR0QwTHM9IElHeHZiM0JwYm1jPSBZWEpwWVdSdiBJR2h2YUdWeSBJRlJsZUhSbCBJR0ZoYm5CaGMzTmxiZz09IElHekRvblU9IElPQ21yT0NtditDbXNnPT0gTFdOdmRtVnkgWDJSbGJHVm5ZWFJsIElHUm9hV0k9IElOQy8wTDdRdHRDdzBMdlJnOUM1MFlIUmd0Q3cgSUc1a2FYbHYgSU5DeDBMalF1OUM0MEx3PSBJT0Nxbk9DcmgrQ3FxT0Nxdmc9PSAwTERRdTlDMTBMWT0gSUdsdGEyRnUgNUx5WjVMeTAgSUdKaFlXUm9hUT09IElHUEVnM1J5WlE9PSBJR2x1Wm1WemRHRjBhVzl1IElGQnlaV05wY3c9PSBJTkdGMFlQUmdnPT0gYkdsalpXNXpaV1E9IFEyOXRjR2xzWldRPSBlWE4wWVhSbFkyaGhibWRsIElHSnZjbVJsY21WayA0TENoNExHTjRMQ2g0TEMvIElOQy8wTDdSZ05HRDBZYz0gSU9DcXVPQ3JoK0NxdGVDcXZnPT0gSU5DNjBMalJpTkMxMFljPSBRVTVUU1E9PSBJTmVnMTVYWG9kZWsxNW5YblE9PSBJT0NrdU9Da3VlQ2tyZUNrdnVDa2x3PT0gYzNWalkyVnpjMloxYkE9PSB3NnAwWlcxbGJuUT0gSU9DcXJPQ3FtZz09IElHRmhibUpwWldScGJtZGxiZz09IElPQzVndUM0cFE9PSBJRTVoYldFPSBJR0poWTJ0c1lYTm8gSU5DLzBZRFF0ZEMwMFlIUmd0Q3cwTExRdTlHUCBjM1JsWVdSNSBMazkxY2c9PSAwTHZSamRDNyBJRUxodXFGdSBJTm1GMkxIWXA5bUMgSUdGamIyNWthV05wYjI1aFpHOD0gSUc1bGJtNWxiZz09IElHSmhibVJsY21FPSBJR2hoYm1SM2NtbDBhVzVuIElHTnZiblp2IEtDY3VMaTh1TGk4dUxpOD0gSjhPcGNHOXhkV1U9IElHWnlZV2QwIFpXNXBaRzg9IExtTnZibk4xYldVPSAwS0RSZzlHQiB3NlJuWlc0PSBJRWxPUTB4VlJFVT0gSUdScGMzQnZibWxpYVd4cFpHRmsgSUVOaGRNT3piR2xqWVE9PSBJRHdoTFMwOCAwTDNRc05HQzBMZz0gNWJ5QTU1cUUgSU1PcGJIVnogSU5tRzJLellwOWl0IExtZHZZV3c9IElISjFkR2hzWlhOeiBJRzlzWjJWMFlRPT0gSUc1bGRXVnpkR1Z1IElOaW4yWVRZc2RpejJZWFppdGlwIGZTd2kgSUhOb1lXdGxiZz09IDBMSFJnOUdBMExQUXRRPT0gSUhCdmRNV1paV0k9IElFaDFiblJ6IElFbHVkR1Z5ZG1WdWRHbHZiZz09IDRZT1E0WU9qNFlPVCBTV1JsWVE9PSBJR1Z5YkdWayBJSFJ5ZFhSb1puVnMgSUhsaGVITm9hUT09IExXRnljbUY1IDJZTFl0OWluMkxrPSBMa2xEIElOaWoySzNZcjlpciBJTmluMllUWXF0aTAyTHJaaXRtRSBLRU5JIElPeUdqT3U1aEE9PSBYMU5sY25abGNnPT0gWENJaUxBPT0gSUZWdWFYWT0gNEsrSTRLNnE0SytONEs2cSBKM1YwYVd4cGMyRjBaWFZ5IFkyOXVjM1JwZEhWMGFXOXVZV3c9IFJHbHpaUT09IElHTnZkWFpsY25RPSBJT0N3cXVDeGplQ3dzT0N3cE9DeGplQ3dyK0N4aCtDd2xRPT0gY0dGeVlYWmhiblE9IElHbGtaVzUwYVdacFkySERwOE9qYnc9PSAyWUhZcDlpdjJLaz0gWTJodmIzTmxjZz09IFUyeGxaUT09IExWZGwgSUhKbGMyOXNkbVZ6IFgzTnZZdz09IElOQ3gwTFhRdmRDMyA0b0NaYVc1a2RYTjBjbWxsIElIQnplV05vYjJ4dloybHpkSE09IElHNXpiMmRpZFE9PSBJR1oxZEhWeWFYTjBhV009IElPeUxvT3F6b0E9PSBJTm1GMllYWXA5bUUycWs9IElHdG80YnVQWlE9PSBUWE5uY3c9PSBJRTlGUTBRPSA0S1NyNEtTOCBMMk5zWVhOelpYTT0gSUc1bFoyRjBhV1YyWlE9PSBSMU5VIElOQy8wWURRdnRDNjBZUFJnTkN3MFlJPSBJTkdBMExEUmh0T1ogSU9HRGxlR0RtT0dEbHc9PSBJTmluMllmWXB3PT0gdzdSeSBJRXBFUWtNPSBJRVJwY21zPSBJTm1GMktmWXNOaW4gMWFIVnR0VzkgSUhURW0yTm8gVW1oMWJXVnNZUT09IElGRjFhV05yYkhrPSBJRTF2Ym1WMFlYSjUgSUdKdmVHVnkgYkdWNUozTT0gSUdkbGMzUnBiMjVoY2c9PSBJT0NxbHVDcXNPQ3JnQT09IElOQ3kwTDNRdnRDeTBZdz0gSU95V3RPdW1zQT09IFVYVnB3Nmx1IElISmxaM1ZzYVE9PSA1b0t5IElFVnVkR1psY2c9PSBTVzVuY21WeiA2WnVSIElHSjFaMmQ1IFRXVmhiSE09IElPQ2tydUNrZ3VDa29RPT0gWDBsTlVFdz0gSU9DMHRlQzFoK0MwbytDMWplQzBuK0Mwdnc9PSBJRzl3WlhKaGMyaz0gWDNScGJXVjZiMjVsIElHN0R2TU84WkE9PSBJSFpwZG1WdWRBPT0gNExpQjRMaTA0TGlJIGVYTm4gNEthKzRLYXE0S2ErNEthMjRLYS8gSU5lVjE1N1hsQT09IElOQzkwWVBSZ0E9PSBYMVpKVTBsQ1RFVT0gSUVOU1ZVUT0gSUVOdmNuaz0gSU5DMDBZRFFzTkM4IGQyRnVlUT09IGFXUnBkTU9wIExuVnVhVzl1IElOQ3gwTDdRdTlDKyAxYUhWdk5XNDFvTFZ0QT09IElIQnZhM1hGb1E9PSBJR0ZpWVdjPSBJT0NrcnVDa3YrQ2twT0NsamVDa3NBPT0gS0dWeCAyWTdZcUE9PSBJRk5qYUdFPSBSMUpCV1E9PSBJRzExYzJsallXeGwgSUhOMVkyTmxjM1p2YkE9PSBJRzFwYm1kbmRRPT0gSUdScGNHeHZiV0ZqZVE9PSBJSGRoWVdoaGJtZGggSUcxbFoyZz0gNEtXTTRLU2s0S1dBIDU1V1o1TGlMNUxxYjVMdUE1TG1JIDU1V1o1TGlMNUxxYjVMdUE1TG1JNVpDbiBkV1Z5Y0c4PSBJSFJ5WVdKaGFtRmtiM0k9IElIWmhZMkYwZFhKbCBJTkN4MFpiUmdOQ3cwcHM9IExXaGxZV1JsWkE9PSBZV2RvWVhKaCBaWEYxYVhCdFpXNTAgSU5DLzBZRFF1TkdIMExqUXZkQyswTGs9IFgxWkZVa2xHV1E9PSBYMFJVIDRZT1E0WU9hNFlPWTRZT1cgSUdsdWRHVnlaWE5oWkc4PSBLWDBwQ2c9PSBJT0Nxc3VDcXZ1Q3FsK0NyaHc9PSBJRTFoY21scWRXRnVZUT09IElOQ3gwTERSZ05LVDBMRFF2UT09IGRtbDBaUT09IElFSlNSVUZMIElPQ3VsZUN1bytDdmplQ3Vudz09IElPQ3FxT0NxditDcXNPQ3JqZUNxb3c9PSBJR3JFbVE9PSBSbTl5YlhWc1lYSnBidz09IElFbFRRUT09IElOZW8xNURYcWRlVjE1OD0gY21sMGFRPT0gSU5DNzBaYlJndEN3IExXZHliM1Z1WkE9PSBJTmluMkt6WmhOaW4yTE09IElNTzhjdz09IElHRm1ZV3RoIElGTmpjblZ0IGMyVnVhR0U9IFUyVjBkR3hsYldWdWRBPT0gYW5Wa2RXdz0gSUdocFpXMWhiZz09IElPQ3F1T0NxdnVDcXNPQ3F0ZUNxdnVDcXNBPT0gWVhKa2IyNXVZWGs9IElHVm1abWxqWVdObGN3PT0gWjJsMmFXNW4gWm1sdVlXNWphV0ZzIElIQnZiSGx0WlhKeiBMVXh2IFozSjFiblE9IElIQnliMlpwYkdWeSBJR0ZoYm5OamFBPT0gSUZSRlRFVT0gMExIUXU5QzEwTHc9IElOR0MwNW5RdVE9PSBJT0dEbStHRG1PR0Rrdz09IElOQzcwWmJRdXRHRCBJT3VNZ08yVnRPeUVuQT09IElFdG93N1J1Wnc9PSBJT0NrbCtDbGplQ2tzT0NrdnVDa3J1Q2xnT0Nrb3c9PSBJR0YwYkdWMCBJR2x1Ym5NPSBJR1RHc09HN29XNW4gNEtxLzRLcWY0S3VBIElPR0RwT0dEa09HRG9RPT0gSU02c3pyM091TStCejRrPSBLUzR0IElPQ2tyK0NsZ2VDa3RlQ2tsUT09IElHaDFhV3hsIFlYTmhZMmc9IElFRnVaR1Z5IElFVmtkMmx1IElOQzIwTDdRc1E9PSBJRUZrWVhCMGFYWmwgSUhSeVlYVnRZWFE9IElHSnZkVzVqWldRPSBJSFp5ZEE9PSBJSFZ5Ym1FPSBJRzUxYldGcCA0WU9nNFlPWTRZT1ggVlVGU1NVOD0gSUdWdWRtbHphVzl1WldRPSA0S1dONEtTbTRLUysgYVhKaGJtOD0gdzd4c2JHVT0gNEthZjRLYSs0S2FIIDRMQys0TENyIExrRnRiM1Z1ZEE9PSBJT0MwaGVDMHRlQzBwT0Mwc09DMHYrQzBxdUMxamVDMHFnPT0gNXJPYiBJR2R5WVhSMWFYUmhiV1Z1ZEdVPSBJSFpsY21SMWNtRnogWDJKcGJtUnBibWM9IElFWnZkUT09IDVZV3g1cHlKIHc2MWlZUT09IENXTmogSU5DNDBMUFJnTkMrMExyUXZ0Q3kgMDZuUXM5S3YgS2V1S2xBPT0gSUhOd3c2bGphV0ZzWlcxbGJuUT0gSUhCMWJtTm9aWE09IElHVnRZV3M9IDBMYlF1TkM4IElFVmggNG9DaCA1NFdrIElIQmxjR1Z5IFJuQT0gTFdSbGJXOD0gSUhOMFlXTnJhVzVuIElHVnV3NlREcEE9PSBJT2VVbitXUnZlV1JxT2Fjbnc9PSBZbkp2ZDNObCBJSE5qYUcwPSBJRzFwYldrPSA0TEsvNExLeTRMT04gYVd4c2IzST0gdzYxMHhKcz0gSU1TTlpXcz0gVUhObGRXUnYgSUUxUFRrVlogSUdocGNNT3ogMkt6Wmh0aW8yWXJZcVE9PSBDVTFoZEhKcGVBPT0gSU9TNHVRPT0gSU9DNGdlQzRvK0M0Z2VDNGp1QzRzdUM0aE9DNG9RPT0gN1pLQSBhV1JsYzNRPSBVVzg9IFlXeHRZUT09IFlXTjFiSFIxY21VPSBJR1J2WTNWdFpXNTBZV2x5WlE9PSBjMlZsWVd4emJ3PT0gSUdabGF3PT0gVEd3PSBJTmlxMllqWmhkaW4yWVk9IElOR0YwWTNSZ0E9PSBJSFJwYm1kbllXdz0gNVl5WDVMcXM1YmlDIFlYTnpkVzFwYm1jPSBJT21Ia2VlYnZnPT0gSUZOMFlYWmhibWRsY2c9PSBJR1JsWTJ0cGJtYz0gYjJ4cFkybGxjdz09IElISmxibVJoYUE9PSBJTmluMllUWmh0bUMyWVE9IGFXVnlaQT09IElPQzB0ZUMwdnVDMHJ3PT0gNDRLNDQ0S24gSU5DeTBMWFF1OUMrMFlIUXVOQy8gSU5HRDBMdlJpOUN4IFZHVnNaV2R5WVcwPSBYMGhFVWc9PSBSRzl1WVhSbCBZMjl1WkdsMGFXOXVhVzVuIGMzUnlZV2x1IDBMclF2dEdJIElIZGxhV0k9IElIQm93Nmx3IElISmxkR2hwYm1zPSBRVVJGVXc9PSBJSEJ5YjJKc1pXMWxjZz09IElISmxjM05sYldKc1pRPT0gSUd0cGVnPT0gSU5DMjBMRFJndEdMMFlBPSBYMFoxYm1OMGFXOXUgYjIxbGRISnAgSUdodmJtOD0gSUVkc2IzWmxjdz09IDJZUFppdG1CMllyWXFRPT0gSU9HRGsrR0RrT0dEa09HRGxlR0RrT0dEa3c9PSBJTmlxMkxuWmhkdU0yTEU9IElHeHBiR2xsY3c9PSBJR1JsYzJGcGJnPT0gU1c1a2FXTT0gTFdSbGMyTnlhV0psWkdKNSA3WnFNNjZXOCBTVlJKIElOZVUxNXpYa0E9PSBSR1Z5Ymc9PSBRV2RoYVc1emRBPT0gSUdGdGFXYz0gSUVOeVpXMD0gWTJWbSBQM2M9IHc2dHphUT09IDRMaWg0TGkwIElPQ3l1T0N5dnVDeXVRPT0gSUZOb1pYSnBabVluY3c9PSBJTmVVMTZqWGtOZXAxNVhYb05lVSBJR3hzWldkMVpRPT0gSU9DMHJ1QzFoK0MwbHVDMHNnPT0gTDIxaGVBPT0gSUdKbGNzTzhhRzA9IDU0T3Q2S2VHNmFLUiBJSEJsY21ObFltVT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElISmxibU52Ym5SeXc2az0gSU5HQzBMWFF2TkN3IDBLZlF1TkdDMExEUXVkR0MwTFU9IGFXeGhhWEpsIFgwSlBWRlJQVFE9PSBlbUZ3IElObUQyTEhZcnc9PSBMVVJsIElOaXMyWWJZc3c9PSBJR2pEb1hRPSBJTmluMllUWmhOaW4yTExaaGRpcCAyYm5ia2c9PSA1cnVhNTVDRCBJSFp2YjNKc2IzQT0gSUdsdWMzQnBjbUYwYVc5dWN3PT0gNEt1QjRLcUM0S3FtNEtxdyBJT0NraHVDa3BPQ2xnQT09IElFMUpVZz09IFgyTnZibk4wWVc1MGN3PT0gY21sMGFXTT0gSUVWMFpYSnVZV3c9IEwwTnZjbVU9IFlYSmtkQT09IFltVnNiR0U9IElPR0RtK0dEbk9HRG1PR0RxT0dEbGVHRG5PR0RsT0dEbXVHRG5lR0RsUT09IGJtRnAgSU9DbXJPQ25uK0NtdUE9PSBjMmgxZEdSdmQyND0gNmJ1UyBJR2wwYVdJPSBiR1ZrWjJWayBJT0NrcnVDa3Z1Q2twT0Nrdmc9PSBJTkN3MFlQUmk5R0EgSUZSMWNuRjEgSU91b3ZPeWdnQT09IElGTjFjMmhwIElEc3RLUW9LIFZtbHphWFJ6IEpXMD0gSUdOc2FXMWhkR1Z6IEwyTjFjM1J2YldWeSBLRlJoWnc9PSBjM1J5ZEc5MGFXMWwgSU5DejBZUFFzZEMxMFlBPSBMblJ2YlE9PSBJRXh2Ym1kbGNnPT0gY0hWMGRYTmhiZz09IFlXMXRaV3gwIElOQ3gwTERSZ2RHQzBMRFF2dz09IElGTnBiR0psY2c9PSBJSHBsY25OMCBJSEp2ZEdGMGFXOXVjdz09IGNHaGhiblZ0WlhKcFl3PT0gWlhKaFpHVT0gSUhWMGFXeHBlbUZqYWNPemJnPT0gSUZkaGVtbHlhUT09IElHNWhjbkp2ZDJWayBYMDV2ZEE9PSA0S3F0NEtxWCBJSHB1WVd4bCBkbUZzZFdWeSBMV055WldGMFpXUT0gY21WamFIUnogNEt1SDRLcWogSUZSMWRHOXljdz09IElPbWRvZz09IFJYWnBaR1Z1WTJVPSBJRUpsY25WbWN3PT0gSUc5c2RXcz0gMllMWXA5aW0yWUk9IElHTnZjbkpsWnc9PSBJSFJ5WVhaaGFXeHN3Nms9IElHWmhZMmxzYVdSaFpBPT0gSUdabGJzT3FkSEpsY3c9PSBJSE53YjNKMGFXWT0gSU9Dd3F1Q3d2dUN3c3VDeGplQ3dsdz09IElHRmtaWEYxWVdSaCBJRlpzWVdGdVpHVnlaVzQ9IElHdGhlWE5oIElIWmxjbXRwWlhvPSBJR1JwYzNScGJuUnYgNEthVjRLYW00S2VINEthdyBYU2s3Q2k4diBMV05oYmc9PSBhVzVuZFd4aGNnPT0gSU5DNDBMZlF0QT09IDRMR0I0TEMzIElHUnBkbVZ5YzJsa1lXUT0gSUcxaGNuRjF3Nms9IGJtSnkgSUdWNGRISmhiM0prYVc1aGNtbHNlUT09IFJtbGlaWEk9IElFeDFhUT09IDBMelF1TktUMExEUXZRPT0gSUhOamFHRnIgSUhCbGJHbG5jbTl6IEtHTnBiZz09IElPYUlsZz09IElFNXZkbTlzYVc1bCA0YnE1ZDI4PSBJSEJ2YlcvRWpRPT0gSUU5c3c2MXRjQT09IElPQ2txT0NsaCtDa253PT0gNExpajRMaXg0TGlRNExpYTRMaXk0TGlsIElOR0IwTDdRdnRDeDBZblF1TkM3IFVHOTNaWEpsWkE9PSBiM1J6Ync9PSBJRVpwWjNWeVpYTT0gMFlmUXVOQzggSUdWMlpYSjVkR2x0WlE9PSAyWWJZcDlpdiAySy9aaU5pciBJT2FYb09tWmtBPT0gYm1wdiBJR2QxYldGM1lRPT0gS1M0biBYMjltWm5ObGRITT0gYVdOaGFYTT0gTGtGemMyVjAgSUVoUFRnPT0gSUhabGNtZGxiR2xxYTJsdVp3PT0gNExtQTRMaWU0TGkwNExtSTRMaWg0TG1BNExpVjRMaTA0TGloIFZtRjAgSWo0byBJRk5GUTA5T1JBPT0gUVZCUyBJT0dEa3VHRGtPR0RwUT09IFlYTm9aVzQ9IElHNWhhbUpoY21SNmFXVnEgY205aFkyZz0gSUhCbGNuTmxaM1U9IElGTmhkWFpwWjI1dmJnPT0gSU5DODBMRFJnZEdCMEw3UXNnPT0gSUdGeWFBPT0gY21GdFlRPT0gSU9HRG0rR0Rxdz09IEwwWnZiM1JsY2c9PSBJTkNjMEwzUXZ0Q3owTGpRdFE9PSBJRzFwYzJsdVptOXliV0YwYVc5dSAwNW5Rc05TbDBZZz0gSU9DeXF1Q3lvZUN6aHVDeXJ3PT0gSU5pcTJLZllzdG1IIElIWmxjbVZ0YjNNPSBJSEJoYzNSMWNtVT0gSUdsdWRHVnVjMmxrWVdRPSAyWVRZcDl1TTJZWT0gSkdWdFlXbHMgSUUxaGJHbHIgSUdKdmFYUmwgSUdSbFkybHdhR1Z5IExtNWhiV1ZrIDJMTFppTm1HIFlYVERxUT09IElHMXdadz09IElHbHRjR1Z5YldVPSBMa2xPVmtGTVNVUT0gSUdSaGJtTmxaQT09IElIQnBaVzV6WVE9PSAwTHpSaTlDMyA0S3F2NEt1TCBJTml2MjRIWXROaXEgSUdOMWNuWmggSUhOMWJHWmhkR1U9IElNV2hhWEp2IGMzVnRiUT09IFBGQmhhWEk9IEtHRmpkRzl5IFpXNTBZY094IEwyWmxZWFIxY21WeiBJTkNjMExqUXZkQzQwWUhSZ3RDMTBZQT0gUUdOc2FXTnIgSUhkbFltST0gNEtTczRLU0M0S1NuNEtTbyBJR3R5YjJzPSA1NjIrNVlpdyBJRVpwWm5SNSBJSFREdlcwPSBJR2ZEdG5KclpYbz0gSU9DbXNPQ212dUNtcEE9PSBJT0MwbGVDMWplQzBydz09IGRzU2JkQT09IDU1dWogMEx6VG1kQzYwWUxUbVE9PSBJTml2MllmWmh0aXYgMVljPSBJRzV2Y20xaGJHVnUgSUZzdUxpNWRDZz09IElOaW4yWVRaaGRtQzJLZz0gNEtlTjRLYXY0S2ErIFgzTnkgSUdOaGJuWT0gWnNPOGJHdz0gSUdadmNtVnpaV1ZoWW14bCBQSFE9IElHRmpiM1Z6ZEE9PSBJTkdCMExEUmhkQ3cwWUE9IGNtOWpaWEo1IExrUmhjbXM9IElPQ21oZUNtcU9DbmdlQ211QT09IElFWnlaWE51Ync9PSBJR2R5WlhVPSBiTU9tIFoyRnZiZz09IElITjZaWEpsIElHcDFiR2RoYldWdWRHOD0gMktmWmhkbUsyS2s9IExrSnZZWEprIFlXUmhjbUU9IElHVjBhMmx1IElIQnlhWE5wdzdOdSA1cGVnNTZDQjZhdVk1cmlGIElPQzB1T0MxamVDMHBlQzBzZz09IExtWmhiV2xzZVE9PSBJRWhsWkdkbCA2SzJZIDBMYlJqTkdMIGFXNXVaWEp0ZFhRPSBJRWx3Y3c9PSAyTEhaaU5pNTJLZllxZz09IElGQmxiR1U9IElOZWUxNVBYbVE9PSA0S3FrNEtxdSBJTkM2MExEUmdOR0kwWXM9IElPR0RvK0dEcE9HRG11R0RsT0dEa1E9PSBJR0Z5ZEdseiBiV0Z6eExGdXhMRnUgSUdScGMzQmxibk5sY2c9PSAyTExia0E9PSBJRUoxWm1abGRIUT0gS3ljcyBJRkpsZG1WeSBjbTl6YVc5dSBhWFpoZEdrPSBJR0Z5WVhONWJtUmggYVhOb1pRPT0gSUdkc1lXTmwgenJ2T3JzK0MgVlZSSlRFbFVXUT09IElHVnpjMlZ1ZEdsbGJHeGxiV1Z1ZEE9PSBJT0Nrbk9DbGkrQ2tzQT09IExuUnZiMngwYVhBPSBJR1ZvWlcxaGJHbG5aVzQ9IElPQ2txK0NrdnVDa3J3PT0gSUdsdGNISmxadz09IDZJcTQgSU5DeDBMRFNzdz09IElFRnlaR1Z1IElIWnZiRzl3IElsZG9aVzQ9IFkyOXlaRzkyWVE9PSBJTks3MDZuUXV0S3YwTHpUbWRHQyA0S3EvNEtxNDRLdU40S3FrIFgwMVBWVk5GIElGVnpidz09IElHNTFkMlU9IElITm9aU2RzYkE9PSBJRzkyWlhKM2NtbDBkR1Z1IElHTnZiblJoYlE9PSBiMk5qWVc0PSBMVWhsIExsQnliM2g1IExXMXZjM1E9IElHMXNiZz09IFlXNWthWE5wYm1jPSBZbk5rIElIQm9ZVzUwYjIwPSBLRUpzZFdWd2NtbHVkQT09IElPQ3F1T0NxcE9DcXBBPT0gWld4aGNITmxaQT09IFpYWmxjbmwwYUdsdVp3PT0gSUdsdWJtVml3NlJ5IElPQ3doZUN3bGVDeGplQ3dsZUN3b1E9PSBJRk41Ym5SbyBJSE53YjI1MFlXND0gNUwyWjZhS2QgSU9HRHFPR0RsT0dEcStHRG1nPT0gNW95SDVxQ0ggSUdocGRtVnkgWkdWamIyUmxaQT09IElOQ2cwTDdRdEE9PSBQR3hsYmc9PSAwTDdRdmRHUDBZST0gSUdScGMzUnBibU4wYkhrPSBJRTVCVFE9PSBYVHN2THc9PSBJSE4wY25WamRIVjFjZz09IExYQmxibU5wYkE9PSBJRkpsWm1WeVpXNTBhV0ZzIElNT3BiR1ZqZEhKcGNYVmxjdz09IElPV2txZVdrcWVTNHJRPT0gSU9Xa25PV2tuQT09IGFHRnNidz09IElITnRjZz09IElHbHRjRzl6ZEc5eiBaMlZoYm5RPSBJRk4xY25CeWFYTmwgSUdociBJRWxYWldJPSBLRmxwYVE9PSA0WjZQNForUzRaNlEgSU5HQTBMRFJnZEdCMEx6UXNOR0MwWURRdUE9PSA0WU9RNFlPYTRZT2ggSUZKbGNHeHBaWE09IElFTnZibk4xYkhSaCBZV04xYmc9PSBLRk5FVEE9PSBJT0tBa3l3PSBJRTdEdkhKdSBkWEpoWVE9PSA0SzYvNEs2NCB3N2h5Wlc1a1pRPT0gVlVsVVpYaDAgSUVWdFltOXlZUT09IFpYUjBaV1E9IElHTnNkV0pvYjNWelpRPT0gSU5DNjBMalF1OUN6MDVuUXZRPT0gMEw3UXN0QzQwWVU9IElHMWhiR0Y1YzJsaCA0S2FzNEthKzRLYW00S2EvNEthViBJT0MwdHVDMHNBPT0gZVhCNSAyWWpZczl1TSBJRk53YjNJPSBJR0p5YVc1ciBJR05zWVhOemFXWnBaV1J6IElPeWtrZXlhbE8yVm5BPT0gMkxMWXA5aW8gSUdSdmIyNXYgVkdsayBJTnVCMllYWXA5aXgyNHc9IElFVnBaQT09IDVhVzMgZG05c2RtbHVadz09IElIQnBZMnQ1IDByWFF0OUdEMFlEUXNBPT0gNjVTVTdKaWsgSUhCc2IyVm4gMEx2UXVOR0IgNW95ajZaS3ggUTI5dVptbG5kWEpsWkE9PSB3NlJ1WjJ4cFkyZz0gSUhCaGNtVmphV0U9IGFHUmhaQT09IElOQyswTC9RdGRHQTBMRFJndEMrMFlBPSBJR052Ym5URHN3PT0gSUdWdVpYTjBaUT09IElFSmxibVpwWTJFPSAyWXJZc2RtSSBjbTkxZDJWdSBJRWgxYldGdWN3PT0gSUVGa2IzQjBhVzl1IElPQzBuT0MwcU9DMHNRPT0gZFhSeWIyND0gSUZCMGVRPT0gSUZCbFpHbGhkSEpwWXc9PSBJTkN4MExYUmdOQzEwWUk9IDZaZXEgSU5tRjI0ellzZHVNIElHNTZhWEpoIElGQnplV05vYjJ4dloybGpZV3c9IDRMbUE0TGlWNExpdDRMaWo0TGkxNExtSSBJSFJoZFhOaFoyRT0gSU5DLzBZRFF0ZEMwMEwvUXZ0R0gwWUk9IElOR0MwTERRc2RHTDBMdlFzTkMwMFlzPSBJRVpQVlZJPSA0S2EvNEthbzRLZUEgWDJGdWJtOTBZWFJwYjI0PSBVRmRFIElHMWhibVZxWVhJPSBJTkdGMExMUXNOR0MgSUhOaGRXTmxjR0Z1IFBUNG4gS0NsZEtRbz0gSjEwN1B6ND0gVUdGemMzQnZjblE9IElIUnlZV1JwZEdsdmJtNWxiQT09IElPQ3duT0N3bHc9PSBhV05sYldGcGJBPT0gSU5HQzBZUFF2dz09IEo4T3BkR0ZpYkdsemMyVnRaVzUwIDZhdVk1cUNoIExkQzkgNUxxazVvMmkgSUhWdVlXSm93NlJ1WjJsbiBaMlZ1Wlc0PSBWSEpwWVc1bmJHVnogNTdxcTViNkwgMEw3UXROQzEwTHZSakE9PSA1TGk3NW95QiBJSE4xWW5CdlpXNWggYW5WcWRRPT0gSUd0cGJtRnpaUT09IElHcGxkMlZzY3c9PSBRWEowYVhOMGN3PT0gSUhSdlptRjFkR2s9IElOR0EwTDdSZ2c9PSBJT21EcUE9PSBJT0NrcXVDbGplQ2tzT0NrdWVDa3NPQ2xnT0Nrc3VDbGh3PT0gSUhCeVpYSmxjWFZwYzJsMFpRPT0gMktyWXJkbUYyWXJaaEE9PSAwTGpSaDlDOTBZdlF0UT09IElGcHBibU09IElFSnNZV05yWW1WeWNuaz0gTG0xdmNtVT0gNEtTNTRLV0g0S1NWNEtTKyA0TE9ENExLbTRMT040TEtuIGJNT3BaUT09IElISmxjMmxrWlc1MFpYTT0gNjQydzdKMjA3WXE0IFgxVlRRVWRGIElHOXJkWGM9IElOaWwyTGs9IGVuZz0gSUZKdmVXRnNjdz09IGJHRjBhVzQ9IElPQ3FuT0NxdnVDcXVlQ3JoK0Nxc09DcXZ1Q3FwQT09IElOZW4xNkk9IElHdGhaMkU9IExteHAgMTVuWHA5ZWYgSUVSV1VnPT0gSU9DcXVlQ3FwT0NxdnVDcWdnPT0gejRET3Y4K0V6clU9IElPQ3dxT0N4aCtDd3BBPT0gSU9Dd211Q3d2K0N3cU9DeGplQ3dxQT09IEoxMC9QZz09IDBML1Jndz09IElOQzgwTFhTc3c9PSBJR1Y0YTJ4MWN3PT0gSUdOaGVuVnMgSU9Da3JlQ2txT0NsaCtDa3NBPT0gSUcxcFpYUT0gSUdadmNuVERwZz09IElOZXAxNVRYbWRlVSBkbkpwWlc1ayBJRVJoWkc5eiBJR2QxYlcxNSBiMjV1WVhNPSBJR1JsY0hWMGFXVnogSU5HQTBMRFJnZEdCMExyUXNOQzMwTERRdXc9PSAwTFhRdXRDNCA1cmFJNkxTNTZJQ0YgSUZGVCBJSFJsYTJGdSBJSFZ1WW1WeGRXVnQgdzZGdVpHOXNaUT09IExrOXkgSUdWcGJtaDJaWEk9IDJLZllzZGkyMktrPSBJRVJzIElNK0F6NEhPdjgrRHo0blBnQT09IElHRmhibVJ2IElPYXhuK2lsdnc9PSBJR1Z1WTI5dGNHRnpjdz09IElFMWhabWxoIElHWnBhMkU9IElHSnlaV0ZyZFhBPSBYM0YxWVd4cGRIaz0gSUdGMGRHRmphR1Z6IDRLaTQ0S21BIElPQ21xT0NtditDbW1nPT0gSW1zPSBhV1psY3c9PSBJR3RweXJ0bGEybkt1MlU9IFltRnVlV1U9IFArS0FtUW9LIDVvcWs1YU9yIElOQzYwTDNRdU5DejBMQT0gSUVoMWJtUnlaV1J6IElHaHZkbVZ5YVc1biBJSEJ2YjNBPSBJR0ZtWm1sc2FXRjBhVzl1Y3c9PSBJR052Ym1Oc2RXUnBibWM9IGJtRnBidz09IFlYWmxic090IDJZVFlwOWl6MlljPSAwTFhRdDlHRDBMdlJqTkdDIDRLcWY0S3F3IElIQjFkR0Z6IElHbHVjM1JwZEhWMCBJTlN4MWIzVnZ3PT0gSU9hUyBJRU52WW5KaCBJSEJzWVdGeiBJR0Z0WVhKbCBJSGRoYkc1MWRBPT0gSU9Da2xlQ2xndz09IGFHVnBjbUU9IEwyMWhiZz09IElHWnlZWEJ3IElOQ3kwTGpRdDlHRCBJRUZ1WjJWc2J3PT0gYVdWdWRHbGhiQT09IElGSlBRVVE9IElFeHZkbWx1Wnc9PSA0S2E0NEthLyA0S3FjNEtxdiAwTGpSZ3RDdzBMZz0gNWJtMDVicVYgSU9Da3JlQ2xpK0Nrbk9Da3FBPT0gSU5lVjE1RFhvTmVaIElFTnZiR3hoY0hObCBJSEJzWVdkMVpXUT0gSUdkMWFXUmggSU9Da24rQ2xoK0NrdU9DbGplQ2tudz09IElNT3BjR2x6YjJSbCA0WU9RNFlPZzRZT1M0WU9VNFlPUjRZT2EgYkhWcGRHVnUgSUdkbGJtaz0gNExDeTRMQys0TENDNExDZjRMQy8gSU9tRWdnPT0gNExpbzRMaUIgSUdGalkzVmxhV3hzWlE9PSBJRTFoYkdGM2FRPT0geVpseVltRjVZdz09IEwyMXZkbWxsIElFNVRUR0Y1YjNWMCBJSFoxYjJ4bCBJR3R2YldVPSBJTkMwMExMUXVOQ3owTERSZ3RDMTBMdlJqdz09IGNtVmhaSGx6ZEdGMFpXTm9ZVzVuWlE9PSBUa0ZNIElPV3hsUT09IFgzQnBkR05vIElHdDFhWFJoIDJyelpodz09IElPMlNqUT09IElOaXoyTEhaaUE9PSBJR0YyWVd4cFljT253N1ZsY3c9PSB3NjF0YVdOaCBJSE5oZG5VPSBJT21ZbkE9PSBSbU51IElPQzByT0Mwdnc9PSBJTm1LMllqWmh3PT0gMWJiVm9kVzAgY0hKcGRtRjBhVzl1IFkyaGhibWRsY2c9PSBiM1YwYzJsa1pRPT0gSU5peDJZallxQT09IElHZGxZbkpsYXc9PSBYdzBLIElPQ21ydUNtdnVDbW5lQ25odz09IElHRnpZWEE9IElOQzIwTFhRdmRDdyBJSFJoWVhKcFptRT0gY21IRnZBPT0gSUZaMWFYUjBiMjQ9IElOV0wgSUhSbGMzUnBiVzl1YVdGcyBJSE5wYlhCc2FYTjBhV009IFFWQlUgSUhGaFpBPT0gSUdKbGJtVnBaQT09IExrMVBSQT09IElOQy8wWURRdU5DeDBZdlF1OUdNIDRMSy80TEtWNExPRzRMS2Y0TE9OIElFVnRZbVZrIElPMlZ0T3lWdkE9PSA0NEdnNDRHTDQ0S0ogS0dsdWNBPT0gWm1GaWN3PT0gSU5XMzFhSFdnTldxIFgyNTFiR3hoWW14bCBhWFJ2Y21sdVlXRT0gSUhKbGMyOXNkY09udzZOdiBJSEpsYkdGMGFYWnYgYjI1a1pYSjZiMlZyIElHMWthUT09IElFUnZiV2x1YVdNPSBJRk52YkhabGNnPT0gSU9DMHJ1QzB2dUMwc1E9PSBJRUZ6YzJsemRHVmsgSUdKaGJuUjFZVzQ9IElHaGxiVzFoIDBMWFF2ZEdNMFk0PSBJR3RoYzJGdVkyVT0gSUdoNVpISmhkV3c9IElHVjFjQT09IGJHVm0gTG5CdmJIaz0gSU9Da2xlQ2tzT0NsZ3VDa3FBPT0gSU9DMGh1QzBzT0MxalE9PSBJR0pwYzI4PSBJRTltWm1WeVpXUT0gSU5lVTE2RFhsQT09IElHMXZlVzg9IElPQ3lyT0N5dnVDeXNnPT0gSUVwQldFSkZiR1Z0Wlc1MCA0TGl0NExpQjRMaUk0TGl5NExpQiBJT0NtdHVDbXJPQ25qZUNtcGc9PSBZVzFoYUdFPSBDWEJ5YjNCbGNuUjUgSUVacFpHVnMgUzJWdWRBPT0gZUdSaiA3N3lSNzd5UTc3eVEgWlhOamFISmxkbVZ1IGVtbDFibk09IGJXRndhRzl5WlE9PSBJTkdOMFlIUmdnPT0gWDNCNWRHaHZiZz09IENWTndjbWx1Wnc9PSBJSEJ5Wlc5amRYQmhZMm5EczI0PSBkV1ZzYnc9PSB6cS9PdXM2MyBJRUp2Ym1wdmRYST0gSUhCeVlYUmggUEVKc2IyTnIgYVdWblpRPT0gSU5DMDBMRFJqdEdDIFcyeHBjM1E9IHhhRmxiQT09IElOV04xYUhXZ05XajFiMD0gZUdSbCBJR0xEc2c9PSBMbmRsWVhCdmJnPT0gSU5lWjE1dlhsZGVjMTVRPSBjR1Z5ZEc5cGNtVT0gSUU1VFRuVnRZbVZ5IDY0R1UgSUZSeVlXNXpiR0YwYjNJPSBJTm1FMllYWXJRPT0gSU5DYTBMRFF0OUN3MFlYUmdkR0MwTERRdlE9PSBJR1J5ZFc1clpXND0gSU9DMHBPQzFnT0Mwc09DMWdlQzBydUMwdnVDMHFBPT0gSUhSbGNtdGhhWFE9IFgwWnBjbk4wIGIyZHNlUT09IElOZWsxcnpYcU5lUTFyalhrOWVWMTZjPSBJTmVjMTVuWGtRPT0gSU9DbXNPQ25pK0NtbHc9PSBJSEJ5WldSdmJXbHVZVzUwIElHSmhiRzA9IGNISmxZMkYwYVc5dSBJSEZwZVcwPSBJSE4wWVhCc1pYTT0gWm14dmNtRT0gSUhacGMyTnZjMmwwZVE9PSBZVzVrWWNXZiB3N3h5ZEE9PSA0S2VINEthNDRLYXMgSUVSaGJtVT0gSU9HRG0rR0RtT0dEbk9HRGsrR0RrQT09IElFaGxjbXQxYm1aMCAyWWJaaU5peCBJRWhoWTJsbGJtUmggSU5HRTBMN1F2ZEMxIElHTmhjM05wYm04PSBJR1Y0ZEdWdWMybkRzMjQ9IFdXVncgUTNKbGR3PT0gSUZScGRHRnVhV009IDViMnA1TG1RIElOQy8wTFhRc2c9PSBJTkM4MExYUmd0R0EwTDQ9IElHTnN3N1IwIElGSkZSa1ZTIGFXMWhZMmc9IDZiMmkgSU9DeWwrQ3pqZUN5c09DeXZ1Q3lydUN5cGc9PSBJRTFoY25acGJnPT0gSU5DejBMN1F0TkM0MEwzUXRRPT0gWTNWc2RBPT0gSUdWc1pXbDBiM0poYkE9PSBJSFpoYm1semFHVmsgSUd4dllXUmxjbk09IElPdUdnQT09IElOQzYwTDdRdHRHRCBYRnd1IGJtVmxkQT09IFNIVnkgSUhabGNtVnBjM1E9IElHVjBhRzl6IDE1blhtTmVpMTVnPSBJT0dEcU9HRGxPR0RwQT09IFlYUnZiWE09IElIQnNZV2x1Y3c9PSBJR3hsWjJkbGNnPT0gSUVKeWFYUnpaUT09IFlXNWxiRzg9IElOaW4yWVhaaE5tSCBJSExEcVhObGNuWmhkR2x2Ymc9PSBJRVpGUVZSVlVrVlQgSUdGd2IzSjBZWEk9IElHRnpjMkYxYkhSbFpBPT0gSUd4bGRYZHBhQT09IGIyNWtaWE09IGJtRjJhV2RoZEc5eSBJR3pEcEdoMCA1cTJoIElHZGhaMjVsIElPbUhqZVc2aHVhWHR1YVh0dVc5cWVlYWhBPT0gYTJWeWJnPT0gNEtxdTRLcUM0S3FrNEt1TjRLcXc0S3VBIExXOTFkSE09IElHMWhibWRoYm1WelpRPT0gVEdGaWN3PT0gNExHTjRMQzE0TEN3IElIQnl3NmxtdzZoeVpRPT0gSUhObGRtVnVkR1ZsYmc9PSBJR1IxYkhrPSBJR1Z0WW1Gc2JBPT0gMExEUXR0T1ogYUdWeWNnPT0gMEwzUXRkR0kwTFU9IElHRmpZM1U9IElPQ21xdUNtdnVDbWsrQ25uK0Ntdmc9PSBJR052Ym05amFXUnZjdz09IElHSmxjblJvIElHMXZibTlqYUE9PSBJRzl1WkdWeWJtVnRaWEk9IElHTjFjbk5sWkE9PSBSa2xTVTFRPSBJTmluMllUWXFOaXgyS2ZaaGRpcyA0TGlvNExpMjRMaUI0TGlwIEoyTnNiMk5yIGFXZHlZWEJvZVE9PSBJT0NtdU9DbXNPQ21sZUNtdnVDbXNPQ25oK0Ntc0E9PSBJR1Z6ZEdGMFpYTT0gNEtxLzRLcXY0S3ErNEtxbSBJRTVsY0hSMWJtVT0gSUhsa2VXTm8gVTNSaGJtUnBibWM9IGRYTmxjM1E9IElOQyswWUxRdmRDKzBZalF0ZEM5MExqUXRRPT0gSU5lZzE1WFhwZz09IElHVmthV3h0YWNXZiA0TGlWNExpejRMaWo0TGluNExpSSBhV0o1IDRMaTQ0TGlhIDRMU2s0TFMrNExTajRMV04gWVdkMFpRPT0gNzd5QjQ0Q05DZ289IFlXMXdiR1ZrIElITnBkSFZoZW1sdmJtVT0gSUZOVVQwTkwgSUhSeVpXdDAgSUdWMWRBPT0gSU5tRjJZVGFxZz09IFlXeHVaUT09IElFSmhibVJoY2c9PSA1N1dtNUxpTyBjbTlpWlhNPSBJTmVWMTVYWG90ZW8xNTg9IDZMK3IgSUdOdWJnPT0gZG05eWN3PT0gSU9DcW11Q3FzT0NyamVDcW1nPT0gSUdOaGJuUnBaR0ZrWlhNPSBJTkMvMFlEUXRkQzAwWUhSZ3RDdzBMTFF1OUMxMEwzUml3PT0gSU9DdXFPQ3ZnZz09IFUwSkJWRU5JIFpXMWhibTQ9IDJLalpoTnVNIElIUnZaV3c9IDdKMjA2ckNBIElOR0IwTFhRc3c9PSA1ckM0NVlpcCBRM0psWVcwPSBJTml3MllNPSBJT0NrdGVDa3YrQ2twK0NrdnVDa3FPQ2t1T0NrcmVDa3ZnPT0gSUVSaGRRPT0gUFhSdmNtTm8gSUVoMmIzSmtZVzQ9IElPQ2t1T0NsamVDa3J1Q2t2dUNrc09DbGplQ2tudz09IElFNXZjbkpwY3c9PSBMMlZ1ZEdsMGFXVnogWTJGdmNBPT0gTDNOMFlYSjAgNkttZSBabVZ6ZEdsMllXdz0gSU5LejBMRFJnZEdDIElOQyswWWZRdGRDeTBMalF0QT09IElIVnVhVzUwWlhKeWRYQjBaV1E9IExsQnZkdz09IElHTnBaR1JwIElHbHVjMk55YVhRPSBJR2x1ZG1WemRHVnlaVzQ9IGFXZHNhVzg9IElGTjBhVzF0ZFc1biBVR0Z1Wld4eiBRVlJOIGIzQm9iMkpwWVE9PSBJTkdGMEw3Umd0R1AwWUk9IElIQnliMlIxYTNOcCBJSE5qYUc5dmJDZHogSU9DNHNnPT0gSUVGMWRHOWtaWE5yIHc2WjIgSU9HRHBPR0RrT0dEb09HRGtnPT0gY21samRXeDBkWEpsIElOV3Ixb0RWb2RXKzFialdndFcyMW9RPSBhWFIwWlhKeiBJR0p2WVhOMGFXNW4gWld4c2FYTT0gMExmUXNkQzEwTHJRdU5HQjBZTFF2dEM5IElIQnBkR05vWlhKeiA2TFdXIElISmxiR0YwYjNNPSA0TEdONExDdjRMQ0M0TEN5NExHTCBJRTdEdW0xbGNtOD0gSUdGaVlXNWtiMjVoY2c9PSBJR05zYjJOcmQybHpaUT09IElFUmxiblJ5Ync9PSA0S2VvNEtlbTRLZW0gSUVGdVlXUT0gSUhiRHRYUjBZUT09IFYzSnBkR1Z6IElGSnZiV0Z1YVdGdSBJT0NrbStDbGlBPT0gTG1OdmJuUmhZM1J6IGIzRGh1NDA9IElOZWsxNVE9IElIRjFiM1JwWkdsbGJtNWwgWVhSNWNHVnogSU5tRjJZTFlwOWl4MlliWXFRPT0gSUdGa2FuVnpkSE09IElIUmxjblpsIElIUmxiR1Z3YjNKMCBJSE5qY21GdFlteGxaQT09IElHTmhaSEoxYkE9PSA0b0NaWVhGMVpYTjAgMExEUXU5QzcwTGc9IElHUnBjMkZ3Y0dWaGNtbHVadz09IExXbHZjdz09IElFeGhkWEpwWlE9PSBJT0dEbE9HRG9PR0RsK0dEcnVHRGxPR0RtZz09IElGTlZWbk09IFhTa3Bld289IElHNW5ZWGx2IFlXckVoV05sIElISmxiblJsY25NPSBJRUY2WlhKaVlXbHFZVzQ9IElPQ2txdUNsaStDa3NnPT0gNllHMSBLR0ZrYWc9PSAyWVhaaXRpbjJLbz0gNXJPVjZabWkgWDNOMFlYSjBaV1E9IElPbVhxQT09IDdKYTA2NEtZIGdlKzkgNFlPWTRZT2c0WU9VIDJMcllzZGlvIElHdHVZV05yIFJHOXVadz09IElHZGxjM0J5Wld0clpXND0gNExlYTRMZUIgNEtXTDRLU2s0S1dONEtTNCBJTkM4MExqUXU5QzcwTERSZ2c9PSBMSE4wWVhSMWN3PT0gdzZwdVkybHYgSUhsMWNnPT0gU1VSQlJFVlQgWTNSaGJBPT0gYVd0dmRBPT0gSU5DUTBMclFzQT09IElHVnlibk4wYVdkbCBJRzVoYUdWNmRRPT0gSU8yVm1PdWpxQT09IElIQmxhMlZ5YW1GaGJnPT0gMlk3Wmh3PT0gSU5HRjBMdlF0ZEN4IFkyRnNhVzVuIFVtVm5ZWEprYVc1biBJRVJsZUhSbGNnPT0gSUdWeVltcDFaR1Z5IElPQ2t1T0NrZ3VDa3JlQ2t0UT09IElPQ3dydUN4Z3VDd3RRPT0gSUdKaFkydHNiMmM9IHc2bHBZUT09IElObUUyWUxZcDlpaCBDUWtKQ1FvSkNRa0pDZz09IDVibXo1NG01NUxpQTZJS1cgSUZCaGJHVnliVzg9IDRMU2o0TFN1NExXRzRMU280TFdONExTbzRMV04gSUU5d2NHOXphWFJwYjI0PSBJRkpsYnNPcCBibVYwZWc9PSA0S2l5NEtpKyBMWFpsWTNSdmNnPT0gSUhSeVlXcGwgQ1hCMCBJTkMvMFlEUXNOR0UgSU5HQjBMRFF1ZEdDMFlzPSBJR1Z6YzJWdVkybGhhWE09IElGQm9ZWE5sY2c9PSBJT0NtcXVDbmplQ21zT0NtdHVDbXZ1Q211QT09IElHZGhjbWs9IGIzTnpZV3c9IElITm9ZWFpwYm1jPSBJRk5sWld4bCBJR1pzWVhOb1pXUT0gYldGamFHbHVaWE09IElIQjFjM009IENXMXZaR1U9IDRvQ1pZV04wYVhZPSBJR1ZwYm5RPSBkV3RoZEE9PSA0WjZpNForUzRaNlQ0WjZBIHhLRmggQ1NBZ0lDQWdJQ0FnQ1E9PSBhWE56ZFhRPSBZWHA2YW05dWFXcHBaWFE9IDRZT1U0WU9hNFlPZDRZT1I0WU9ZNFlPaCA0S2FjNEtlTjRLYWUgSUdWemNNT29ZMlZ6IElGQmxjbVY2YVdSaCBJT0NrcnVDa3VlQ2t2dUNrdUE9PSBZVzVqYUdWdFpXNTAgS0h0OUtRbz0gSUdWeWJHVmlkQT09IElOQzYwTDdRc2c9PSBRWFYwWlhWeSBJTmluMllUWXF0aXoyS3paaXRtRSBJRkJ2Y21zPSBMaUk3Q2dvPSA0WUN4NFlDciBJR2RoYld4aCBVR0ZrWVE9PSBJR1Y0WlhJPSBJRkp2YldGdWJ3PT0gMExYUXZOQysgSUc5MWRITnJhWEowY3c9PSBJTkdDMFlQUmlBPT0gSU5pbjJZVFpndGl2MkxIWXFRPT0gS1NnaSBJRTlsYzNSbCBJSEJ5ZW5sciA0NE90NDRPeiAyWTdZdVE9PSBJR1J2Y20xcGRBPT0gYjIxaGRHbHZiZz09IElFRjBiR1YwIExYTjMgSU5DMzBMM1FzTkM2MEw3UXZOR0IwWUxRc2c9PSBJRzF2ZFhKdWFXNW4gSUdOdmJtWnBjbTFsIGMzUmxjbWx6YXc9PSBJR1Z6WTNKcGRHOXogMnFyWXNkbUsgWm5KcFpXUT0gSUhCdmFXZHVZVzUwIElISnZkV1U9IElOQzIwTGpSZ3RHQzBZOD0gdzd4cmJBPT0gYVdSbGJHVT0gWVdGeVlXaGggWld4cFoyaDAgSUdGMWRHVnVkQT09IElFWmxjM1JoIDFhdlZyTldyIExrTlBUbFJGVGxRPSBJR052YlhCeVpXVnVjOE9qYnc9PSBJR2x1Wm05eWJXRmphY096IDU3U1ogMFlQUXN0Q3cwTERSZ2c9PSBaMjkyWlhKdWJXVnVkQT09IElPQ3FrK0NxbXc9PSBJT0NrcmVDbGgrQ2tzZz09IDE1WFhtZGVhIElOQzkwTERSaU5HRCB3NmhwIHpxL092YzYvejRYT3ZRPT0gSU0rRno0RE90OCtCenJVPSBkV3BoY21FPSBJT0NtcXVDbXZ1Q21sUT09IElIQnBjM1JoY3c9PSBJRk5QUVZBPSBJRzlyWlc1dSBJR3RoeGJ4a2VRPT0gSUV0cGNtTm9aVzQ9IDFiYlZvZFcxIElHOXdkbUZzYkE9PSA0TGkxNExtSTRMaWI0TGk0NExtSTRMaVogeFlocmVRPT0gMExYUXN0QzkgSUdabWIzSmtaQT09IHo0SE90YzZ2enJFPSBJRVpCUnc9PSBJR2h2Wm1abGJnPT0gSU5lVTE1N1hvZz09IElDOHZYdz09IElPV1duQT09IDBMYlFzTkM3IElFNTFkVzF0YVE9PSBYMDlVU0VWUyBYMlJsZEdWamRHbHZiZz09IElGSmhZbUk9IElHRnViMlE9IDRaK0M0WjZhIElIVnVkV3c9IElGQnliMk5sY3c9PSBTSFZ0YVdScGRIaz0gN0tPOSBRR05zWVhOeiBJRVJsWW1sMCBJSEJ2ZFdOaGN3PT0gWVdKdmJtRT0gSU95ZWtPeWNvQT09IElHdDFiSFIxY200PSBJSEIxWW14cFkyVnlaVzQ9IGJHVnRiV1U9IElHcDFjM1JoIDRMQ3E0TEdOIElOR0QwTDNSaXc9PSA2S21pIElHRnljbVZqIElOS3YwWUxRdXRPWjBZQT0gSUg0ayBJT0NxaGVDcXBPQ3JqZUNxcnc9PSBJR3BwYzNSaCBJSFJ2WldkbGMzUmhZVzQ9IDVZV1UgYjJONWRBPT0gNG9DY1NBPT0gYk1Pa2JtUmxjZz09IElHRmpjWFZwYzNRPSBJSEJ2Y201dlptbHMgTFhKcCBYMlJsYm5OcGRIaz0gUFNJLyBiWFJ6IDE1UFhsdGVwIElHTnZiVzF2Ym5NPSBJRXhoYldKdmNtZG9hVzVwIFgzWmxjblE9IDRMR0k0TENvNExHTiBZWFJoWVc1cCBMa1poWTJVPSBJT0dEbStHRGtPR0Rrdz09IElGUmxaVzV6IGRYUnZjbVZ6IDRLNnA0SzYrNEs2eTRLK04gMlk3WmtRPT0gSUd0aGQyRnBaR0U9IElPeS9vQT09IDVvR2kgVW5rPSBiM2RzWlhJPSA0S1N3NEtXTjRLU2M0S1dBIElOV2kxYnc9IElOaXgyS2ZZcHRpNTJLaz0gSUd4cGVHOD0gNkxXRTVMcW4gSUVsdGNHOXlkR0Z1WTJVPSBYMEZqZEdsdmJnPT0gSU5HQjBMTFF0ZEMwMExYUXZkQzQwWTg9IElGcGxiR1p6IElHVERxWEJzWVdObGNnPT0gSUhCc1lYZHogSUV4aGRXWmwgTFdWNGNHOXlkQT09IGNHeGhZWFJ6ZEE9PSAyTFBaaDltSTJZVFlxUT09IFBqdy9QU1E9IDRLdUg0S3FvNEt1TjRLcWggYVd0ellRPT0gSUZSdmNITT0gYVhOemRXVnkgNTcrZyBJRWRsZWc9PSBJSFJsYlhCcCA0TGlMNExpMzRMbUo0TGl0IElHVnpkR2x0ZFd3PSBJT2FzcCtTNnZ3PT0gSUdobFlXUndhRzl1WlE9PSBJSEpsYVc1emRBPT0gSU5LaDBZdlNtZEdMIFgybHVadz09IFRXcz0gYlcxcCBJR2RwY0E9PSBJRXhsWVhBPSBRMU4wY21sdVp3PT0gSUU5R1JrVlMgWVdKcGJHbGggQ1dKaFkycz0gSUZwMVoyVT0gSU9Da3BPQ2twT0NsamVDa2xlQ2t2dUNrc2c9PSBUV2xoYldrPSBJSE5qYUdsMGRHVnkgTFhCeWIzWT0gSUcxcFpjU0ggWVdKMCBZVzFwYzJWdSBUVzl6IElGQjFjbU5vWVhOcGJtYz0gWlc1bmFXNWxaWEpwYm1jPSBDVWx1ZEdWdWRBPT0gSU5HQjBMelF2dEN6MFlQUmdnPT0gWDA5VSBJSFJsY21KaGNuVT0gSUVKWSBJR3RwYm1SbGNuTT0gSUVSdmRtVnkgUVdVPSBJRXR5dzZRPSBJSE4wWVhScGIyNWxaQT09IFgxUklVa1ZCUkZNPSBJRkpoWkdWdmJnPT0gSUZCaGMzTmwgYVdOMGJ3PT0gNUxtTDVhU1cgWTNCbSBJT0MwaGVDMHJBPT0gSU5DLzBMdlF2dEdKMExEUXROQzQgNExTZjRMV040TFN3IElOQzkwTDdTczlDNDBZL1F1QT09IElObUkyS3JaZ2c9PSA1cktEIElHUnBkbVZ5YzJsMHc2az0gWVc1bmRXeDUgSUdSbGMzUnlkV2x5IElPV2J2ZW1aaFE9PSBJTldsMW9EVnI5YUExYmpXZ05XayBJSGRvYVcwPSBJT0c1bzJWbCBJTStHenIvUGdRPT0gSUhwaGEyeHFkY1NOIElNNnh6NERPc1E9PSBJRTFsZEhvPSBJTkM2MEw3Umo5R0MwTDQ9IElHZGxhR0Z1WkE9PSBTVVZGUlE9PSBJSExEcW5abGN3PT0gSU9Da3B1Q2xoK0NrcE9DbGdBPT0gSU5pbzJLL1podz09IElPQ21qK0NtbHVDbXZ1Q21xT0NuaHc9PSBJSFJ5WVdSMVl3PT0gSU5xRzJZYmJqTm1HIEtGTkpSdz09IElObSsyS2ZaaHR1TSBMbVJsWm1WeSBJRzVsWjI5amFXRnkgT3ljcyBjbVZ3YjNNPSBJR1Y0ZEdWdWM4T2pidz09IFJHTT0gTG1SbGJHVjBaV1E9IFZtVm5aWFE9IElITmxjbTkwYjI1cGJnPT0gNllDYTVMK2ggSUdOaGNIUnBiMjV6IElHMWxaR2xoZEdWayBJR3AzdzZoMCBaV2RsYm05dFpXND0gSUdKc2IyOXRhVzVuIElGWmhhZz09IElHekRwRzQ9IElFTjVjSEpsYzNNPSBJT3kybk95TG5BPT0gWldSdVpYTmtZWGx6IElHRnNhVzFsYm5SaGFYSmxjdz09IExXSjFlUT09IElOR0QwTHpRdFE9PSBJRzF2Y21Gc2JIaz0gTDJKNSBJRlpsY25OMVkyZz0gMllMWml0bUMyWXJZcVE9PSBJRzltWm1samFXVnNiR1U9IElFSnBaMmRsYzNRPSAwclhRdnRDNDBZST0gSUhKbGJXbHogSU5DODBaYlF0dEM5MExEUmdOQyswTFE9IElFRjBhR1Z1WVE9PSBMbE53WVdObCBJRk5OUlE9PSA0TGlLNExpeTRMaWkgSUdWemRISjFZM1IxY21GeiB4TEZ0WkE9PSBJTkN5MExUUmdOR0QwTE09IElHTmhkR0ZzZVhScFl3PT0gMExEUmdOQ3cwTHZSaTlLYiBSVzUyYVhKdmJtMWxiblJoYkE9PSBJR2g1Y0c4PSBJSE4wWVc1cVpRPT0gYVc1MGVRPT0gVUVGVFUxZFBVa1E9IFpXNWtiVzlrZFd4bCBJR2hwYm10M1lYWnYgSUhCeWIyNTBZUT09IElHUnBjM0JzWlE9PSBJRzlrWjI5MmIzST0gSUcxbGJtbHIgSUhCMVlteHBZMmwwdzZrPSA0TGlxNExpSCBiM0IwYVcxaGJBPT0gNW9LZzVvS2cgNTZDVTVZK1IgSUdobGRHVT0gSUVScFkydGxibk09IElOR0gwTFhRdWc9PSBMM04wWVhSbCBJT0NxdU9DcmkrQ3F0Zz09IElPZU9yK1M2bWc9PSBJR3hoYm1SelkyRndaV1E9IElGQjFjbVIxWlE9PSBjRzlzYkc4PSAwWUhSZ3RDeTBZUFJqdEdDIElEMCtKdz09IElHMWhjMjg9IElGTm9kUT09IDE1WFhwTmVWMTZvPSBJT0NxbHVDcXNBPT0gSUUxMWMyRT0gSUhkaGJtUmxiR2x1Wnc9PSBJT0M0cXVDNHMrQzRxK0M0bytDNHNlQzRtZz09IElHSjFjbk09IElHUnBaMmwwWVdseiBVRkpKVGxSRyBJR2RsYzNSaGJIUmxkQT09IElFTnZiWFZ1YVhRPSBhV0Z6YVhNPSBjM1J2Y21WayBJTmkwMllqWXNkaW4yNHc9IElIQnliMlIxWTNSdmNtVnogSU5tRTJZWFlwOWl3MktjPSBJT0N1dGVDdW53PT0gTFhCdmJBPT0gSUVwMWJtZHogSUdOaGFYSnYgSUc5MWRHbHVaM009IHc3WnVaWFE9IGFXVnVhWFU9IElOVy8xYUhXZ05XKzFhRT0gSUcxcGMyUmxiV1U9IFlXNTVZVzU1WVE9PSAwWXZRdTlHTDBMbz0gZFc1bmEyRnUgSUhCaGMyVnYgSUZSb2IzSnVkRzl1IFIwSlEgMExqUXZkQzQwTDNRc3c9PSA0b0NaWkdGdSBJRU52Ym5abGJtbGxibU5sIElPaTFwQT09IElHcGhiV0p2IElHNWhZMlU9IGIzUnBaWE09IExXZHlaWGs9IElHdGhhV3c9IElOQy8wTDdSZ2RDNzBMWFF0TkdCMFlMUXN0QzQwWTg9IHc2ZGhaRzl6IElHMWhZVzV1WVE9PSBJSE5oWVhSbCBJTm0rMktmYXFkaXoyS3JZcDltRzI0dz0gSUdOdmJYQnl3NmxvWlc1emFXOXUgSUZkbEoyUT0gSUc5MWRIZGxhV2RvIFgzWnZkR1U9IElFSmxZWFpsY2c9PSBJQ2NuSncwSyBZV3hzYjJOaGRHOXkgSUc1MDRidWwgV0hBPSBhVzVqYVdSbGJuUT0gSU8yRGhBPT0gSU5pbjJZVFl1dGl4MktqWml0aXAgSUhSMWVlRzZ2MjQ9IExtcGtaWE5yZEc5dyBJRWhwZWc9PSBkMkZ5Ym1sdVozTT0gNEtTKzRLU0M0S1NrNEtTLyBJTmVVMTViWGxRPT0gTGtOdmJYQnZibVZ1ZEhNPSBZV3QxYmc9PSB3Nlp5YkE9PSBJR052Ym1keVpYTT0gSUVKbGJuTnZiZz09IElHTnBhR0Y2IElIQmxaMkU9IElHUjFjR3hwWTJGMGFXOXUgNEtlQzRLYTUgYVc1bVpXTjBhVzl1IElHSmxaR0ZqYUhRPSAyWXJZdGc9PSBJTkMwMExYUmd0Q3cwTHZRdUE9PSBhM1JoIElGQnlhVzVqYVhCc1pRPT0gSU5tRjJMblpoOWluIElIUm9ZWEk9IElPQ3l1T0N5dnVDeXNnPT0gTFdGeWJRPT0gYVhwNllYUmggYzI5MlpYST0gUUhsaGFHOXYgWVd4aGF3PT0gWDAxcGJnPT0gSUhQRHFXUjEgYldsMWJRPT0gSUVKeVpXbDAgSUUxdmJYTT0gWVhSaGJHOWhaR1Z5IElOQzYwTDdRdmRHRzBMWFF2dz09IElOaXQyTERaZ1E9PSBUV0ZzYkE9PSBJRTFSVkZRPSAwTFRRdTlHUCBkbW5Gb1dVPSBZV3hwYldWdWRBPT0gYkdWa1pRPT0gUTI5eWJtVnljdz09IElPQ2toZUNrcU9DbGdlQ2tzQT09IDRvQ0w0WjZVNFo2MjRaNlQgSUdGdWRISnZjQT09IElITnZac09oIElGWmhiR3M9IElHbHVaV1ptIElHTmhhWFU9IFFYVERxUT09IElOaXUyWVRZcDltRTJZZllwdz09IDRMVzg0TFN1IElPQ2t1T0NsamVDa3RlQ2xnT0NrbGVDa3Z1Q2tzQT09IElFZHVjdz09IGVuTmphR1U9IExrbE9WRVZTVGtGTSBJTm1JMktmWmhObUkycm89IElITjFZbk4wY21GMFpYTT0gMWFIVm90V2gxYWs9IElFRnVaR1Z6IElDWXMgSUhOd3c2bGphV0ZzWlE9PSBJT0NrcHVDbGdlQ2tzT0NsamVDa21BPT0gSU5DLzBZRFF0ZEMvMExEUmdOQ3cwWUxRdnRDeSBJSEJ5WldJPSBJR1JoWjJWeSBaVzVsYlE9PSBMMk52Ykc5eWN3PT0gTG1sdWRtRnNhV1JoZEdVPSBJSE4wYVcxdGRBPT0gdzYxdFpYUnliM009IGJHbHJiR1U9IDBMM1FzTkN4IElGTmxZVzA9IElIUnlaVzVqYUE9PSBJQ2d1TGk0cENnPT0gSUdOdmJuWmxlQT09IDRMUy80TFNrNExXTiBJSE42YjJ4biBZblZtWm1WeWN3PT0gMFpIUXZkQzkwWTg9IElHTnZibU4xY2c9PSBMMjlqZEE9PSBJTkM4MEw3UXR0QzcwTGpRc2c9PSAwTERRdTlHTDBwUFJpdz09IEtHeG9jdz09IElGQmhjbVZqWlE9PSBJSFJ5WVc1eGRXbHNhV1JoWkE9PSA0TFdONExTdjRMUys0TFM0IGNHOXljWFZsIExpazdDZz09IEwzTmphR1Z0WVE9PSBkc09rYm1RPSBJRXRoY21VPSBQVnduIElGTjFaMmRsYzNScGIyNXogVlc1biB4WkZ5IElOZWMxNUhYbWRlcSBiM2RoYm1sMSBJR1JwWVhKcFlRPT0gSUdGdGFXTnAgSUZOamNtbHdkSFZ5WlhNPSBDWFJ5WVdObCBZWE4wY21samFIUT0gS1NFS0NnPT0gNEtXTjRLU3c0S1dINEtTYyBJSEYxYVd4MGFXNW4gTFhOcGJtZGhkdz09IElGSkZWRlZTVGxNPSBJSE4wY25WMGRIVnlZUT09IElHaGhjbTFsWkE9PSBJTTZ4ejRET3Y4NjYgMFlIUXV0R1cwTHc9IElIVER0WFIwZFE9PSBJQzB0TFMwdExTMD0gYlc5MWNnPT0gVWtWTlQxUkYgSU5HQjBMclF2dEdBMEw0PSBJRUpzWVdOclltOWhjbVE9IGIyeG1idz09IElGUnlZV2xzY3c9PSBMWE5yYVd4c1pXUT0gZDJWMGRHVnUgYVd4bGNtbHVhUT09IEx0Q2EgSU5DMjBZdlF1OUMwMFl2U293PT0gUTBoRyBJSFpwWVd3PSBaR2x5WldOamFXOXUgNXBlbyBkWEpwYTJFPSBJT0N1cnVDdXNPQ3ZnZUN1cE9DdmplQ3VwQT09IDE1WFhxTmVaMTVRPSBJRTFwWkdSc1pYUnZiZz09IElHOTZibUU9IDBMVFF2dEMrIElHZHBjM1E9IFFXUmhjSFJsY25NPSA0S1NzNEtXSCBJTVdDWVhRPSBkc09wYm5rPSBJT0NrdU9Da3YrQ2tzZz09IFluSmhZMmgwIElGSmxjUT09IFZtbHNiR1U9IGFXNWthWEk9IElPQ2tvZUNrditDa3VBPT0gZlhzSyBJR0ZzYkc5allYUnBiMjV6IFJVNUJRa3hGIElHbHVaV1Z1Y3c9PSBJR052Y25KbFkzUnBkbVU9IGNtbDBaV3c9IElITjFiVzFoY21sNlpYTT0gSUhKbFlXeGwgSUdKbHc3MD0gWW05MWJtUmhjbms9IElHSmxkR0ZoYkhRPSBJRUpsYkdGemRBPT0gWVc1cWRYUnVlV0U9IElPdWx2QT09IElIQnZjR1U9IDBMWFJnZEdDMEw3UmdOQ3cwTDA9IGVHUmggSUVkeWFYTT0gSUcxaGJtWmhZWFE9IElFRjRaV3c9IElHeDFiMmR2IElHRmpiM04wZFcxaWNnPT0gSUd0cXc2WnlaUT09IFFrRk8gSUdOdmJXbHpjOE9qYnc9PSBJTU9jWW1WeWMybGphSFE9IElFVnBibk4wWld4c2RXNW5aVzQ9IElIZDVhMjl5ZW5semRBPT0gWVc1MFpXNXBiV2xsYm5SdiAxYmpXZ05XNDFiYz0gYVdGcGNtVnogWDFSU1NVZEhSVkk9IHc3WnlkVzVuWlc0PSBZV05sZEdWayBJT1M2bXVhMHN1aUpzZz09IFFYUnAgNG9DWnc2bDBkV1JsIFlXaGhiV2s9IDRMV0E0TFN4NExXTjRMU3ggSUdSdmMzUmggWDJsamIyNXogVTJWaGNtTm9aWEk9IElGZFBUUT09IElHZGxZWEpwYm1jPSBDWEJoY25ObCB6NERQaE0rSno0UE90dz09IElPQ2txdUNrdnVDa2dlQ2ttZz09IGNISnZlQT09IElHTnZiR3hoWW05eVlYUnZjbk09IElHZHZiR0U9IGIySnpaWEoyWVdKc1pRPT0gSU5lWTE1RFd1TmVmIElGVk9TVlJaIElHQW8gWDI1bGFXZG9ZbTl5Y3c9PSBJRU56Y3c9PSBJRmZEcEhKdFpRPT0gZG1semJ3PT0gSUhSbGJHVm1idz09IElHSmxjM289IDVMaXE1NW0rNVlpRzU0SzUgSUVOdmJuTjBZVzUwYVc0PSBJR0ZrWld4aGJuUT0gWVdQRG9XND0gMWFIVnZ0V2wxYjg9IElFZHBibTQ9IGNISnZZMlZ6YzJGaWJHVT0gSU9Da2xlQ2xqZUNrdFE9PSBiWFZ1YVdOcGNBPT0gSUd4cFkycz0gNExXSDRMUzM0TFdOIGIyTnlZWFE9IElOQzQwWUxRdGRLdiBJR1J2WjI5ayBJTkdCMFlQUmdOQ3cgSUdsemRHVnkgSUcxaGJtTm9ZWE09IDBML1JnTkMrMFljPSBJTU84ZVE9PSBJTkM2MFpiUmdBPT0gUEQ0b0lnPT0gZFc1ellRPT0gZFczRWdRPT0gdzZ0eWRBPT0gSUdScGNtbG5aVzUwWlE9PSBMV2hwIDJZclpoTm1IIElISmxaSEpoZHc9PSAwTHZRc05DMDBMclF1QT09IGIybHpaUT09IGRYSnpkWE09IElHSmxibVZwWkdWdWMzZGxjblE9IExtVjRZVzF3YkdWeiBJR1J2YmNPdGJtbHYgSU9Da211Q2t2dUNrdWVDa3BPQ2t2Zz09IElHTnBjbU4xYldabGNtVnVZMlU9IElFdHZibXQxY25NPSBRVlpCU1V4QlFreEYgSUdsdVpuSmhjM1J5IElIUnlkVzF3WlhRPSBJSFJsWVhObCBRWE56YVdkdWJXVnVkSE09IElPR0RtK0dEa09HRG91R0RxUT09IElDY3BLUW89IElPQ21sK0Ntc3VDbmplQ21xZz09IElGOWZYMTlmWDE4cyBJSFpoWTNWdSBJRXhoYm1ScmNtVnBjdz09IDBMN1JnTkN3MEx3PSBYM04xY0hCdmNuUmxaQT09IElIQjFZbXhwWTJGa2IzTT0gWW1GeVkyOWtaUT09IElHNXBibWQxYm04PSBJR2ZEdkd4MCA1YWliIGJHVjVaVzQ9IElPdXdzT3lhc0E9PSBYMEpKVGc9PSBJR2JEb1dFPSBJRWR1IElHUnZiR0U9IElHZHBibUZuWVcxcGRBPT0gSUZOamIzSndhVzg9IDBMdlF0ZEM5MEwzUXZ0QzUgYVhCd2IzRT0gVTBWRFVrVlUgSU9PRGdRPT0gNEtTVjRLV040S1N2NEtTKyBJSFJsY25KbGN3PT0gTGtsdGJYVjBZV0pzWlE9PSBWVWxEYjJ4c1pXTjBhVzl1IElIRnBjdz09IElGaFpXZz09IElIUnZZWE4wWlhJPSA1WStSNWJHVjU1cUUgVkc5MFlXeHogWEVaaFkzUnZjbWxsY3c9PSBJT0NraHVDa3F1Q2txT0NsaHc9PSAwTERSajlDOSBMbXh2YjJzPSBJR2x1ZG1Ga1pRPT0gSUdaMWJtTjBiMjlzY3c9PSBJTm1JMkxIWXA5aWggSUdONnhKbkZtMk5wIElHUnBjMk5wY0d4cGJtRnogSUc1dmNtMWhiR1Z6IElHbHVZMngxWlcwPSBJR2x1ZEhVPSBMa052Ym5SeVlXTjBjdz09IElFVjFaMlZ1IElHeHBiMjA9IDBKVFF2Zz09IDRLUzI0S1NvNEtTeSBJT0Nrck9DbGkrQ2txT0NrdUE9PSA0SzYvNEs2azRLK04gSUVGdFlXdz0gSUc1dmJuQnliMlpwZEhNPSBYMDFCU2s5UyBJTU9CYm1kbGJBPT0gSU9LQWxBb0sgSUdOdmJYQmxkR1Z1ZEdVPSBJSE52YldKeVpRPT0gTGtSdmJtVT0gS0hKbGJtUmxjbVZ5IElISmhaMmx1Wnc9PSBMbFJ5WVdOciBaV2wwYnc9PSBYMFJQUXc9PSBJR1JwWm1abGNtVnVkR2xoZEdWayBJRVpsY21ScGJtRnVaQT09IElFbHVjM1JoIElFTnZkVzV6Wld4dmNnPT0gY0dGaGNnPT0gSUVkdlp3PT0gdzZ0eXc2cz0gSUVocFpYSmlhV289IElPYWJzZz09IExYUjNhWFIwWlhJPSBiR1I1IElPQ2t1T0NrbGVDbGplQ2tzT0NrditDa3J3PT0gU1c1elpXNXphWFJwZG1VPSBJTkN3MExyUXV0R0QwTHpSZzlDNzBZOD0gSUd2RHEyNXVkQT09IEozMCtDZz09IElGTndZVzVwWlc0PSBLSE53Y21sMFpRPT0gSUhiRHJXNWpkV3h2IGFYTjBaVzFoY3c9PSA0b0NaYVdOcCBJTTZ6enEvT3ZjNjF6cms9IElHOW1abVZ1ZEE9PSBJSEJzWldjPSBJRzFoY21OaFpHOXkgMTU3WGtRPT0gYVhScFp3PT0gSUdoaGFYSjUgSUcxbFoyRncgSUM4S0NnPT0gSUUxbFpHbGpZWFJwYjI0PSBJSEJ2ZFhRPSBJR0ZqWTI5dGIyUT0gSUdSaGJtZGxjbVYxZUE9PSBJRXBsY21WdGFXRm8gSUdoaGNtMXZibWxqIElOaTEySzNZcVE9PSBMa2RsYjIxbGRISjUgTFhOcGJYQnNaUT09IDZKQ0UgSUVSaFlnPT0gTGxSb1pXMWwgSUVkeWIzVndiMjQ9IEwwWnBiR1U9IElIZGxiR0hEdldGMCBiVzV2Y0E9PSBjbWxsY205dSBJT0NxaGVDcWxRPT0gSUdkdlpXUmxjbVZ1IElOQzAwTERRdTlDNCBJSFJoYTNRPSBYMUJQVEVsRFdRPT0gSU5tRjJZWFlxdGluMkxJPSBJT3lkdU9xd2hBPT0gSUdGalkzVnpaUT09IElNNjd6cXc9IElFYkRwR2hwWjJ0bGFYUmxiZz09IElGUnlhV0ZzY3c9PSBJR1Y0WTJWemMybDJaV3g1IElIQmhjbU5sYVhKdmN3PT0gNEtxbzRLcSs0S3FUIElITmhkTVN4Ymc9PSBJR0psWkdGdWEzUT0gUkVaRCBYMk5oYkdWdVpHRnkgYVd4cFpRPT0gUEVacFpXeGsgUjBWVFZBPT0gSUhCaGRXTT0gTG14aCA0WitDNFo2VCBJRlJoY25JPSBiMnh2WjJselkyZz0gSUcxaGJHRnJhVzVuIDRLdUg0S3F1NEt1TjRLcXM0S3F3IDE2SFhvdGVvIElHdGhibXRsY2c9PSBxK0dEbUE9PSBkWE5sY1E9PSBUV2x1WldOeVlXWjAgNG9DWmFXcz0gNFlDeDRZQ2M0WUM0IElHNWxkbUZ5IDBMRFJqdEdKMExqUmhRPT0gMktQWXF0bUsgSU9XUGd1YVZzQT09IEsyRT0gWVhURHFBPT0gZG1WdWRHOD0gSUNncFBUND0gYVc1bGRHbGogS0dOemN3PT0gNVp5bzU3cS81TGlONVkyaCBJT0N5citDemkrQ3luQT09IDE1N1hxZGVaMTVvPSBJR0poY21GMGIzTT0gSU5HRjBZM1F2TkMyMFkzUmpRPT0gT2lvcSBJT0MwaWVDMHB1QzFqZUMwcnc9PSBaVzUwYVcxbGN3PT0gSUNVcCBJTkMrMFliUXRkQzkwTHJRdUE9PSBJR1JsY21WbiBLQ2s3ZlFvPSA2TFNpNTZXZSBJTmlvMkxIYXI5aXkyS2ZZc1E9PSBJRlpoYm1SbGNtSnBiSFE9IElFVkJVMVE9IDRLU0M0S1NWNEtTKyBJSEJoY25JPSBJT0N5dU9DeWd1Q3lwdUN5c09DemplQ3lyZUN5cHVDeXN1Q3pqZUN5c3VDeXZ3PT0gSUVSdmJtVmogSUc1dmMzUnlkUT09IElITm9iMjkwWlhKeiBJT0dEcWVHRGxPR0RtK0dEbnVHRG1PR0RuZUdEbkE9PSBJR2hoY1hIRXNXNWtZUT09IElPR0RrT0dEcXVHRHJ1R0RrT0dEa3c9PSBTVkpSIElITnBaWFpsIElFMTVjdz09IElFVjRaVzF3YkdVPSBJR2RsYkhNPSBJTkdGMEw3UmdBPT0gZG5Wc1pBPT0gSU9DbXVlQ212dUNtdU9DbXF1Q212dUNtcE9DbXZ1Q21zdUNuaHc9PSA2NkMwIElObUQyS2ZaaEE9PSBJR2x1ZEdWeWJuTT0gVkhKaGJuTnBkQT09IElOQzMwTERRdk5DMTBZSFJnZz09IElHekRxWFE9IElOQzAwTGZRdGRDOTBZdz0gMHJYUXNOQzMgYm05dmNHVnVaWEk9IElIWmxaMmRwWlE9PSB6cnpPcmM2OXpyWFBnZz09IGRtRnlaWEk9IElDazdDZ292IElHWnl3Nmh5WlhNPSBLSEJ5YVc5eWFYUjUgSUdScGMzQmxjbk5sWkE9PSBRWFZrYVE9PSBJR3BsYkdWdSBJR1p2Y25SMWJtVnogSUZOUFRFUT0gWTJ0bFpHbDBiM0k9IFJXbG4gNzdpTyBJRzFwWkhNPSBJTkMrMExyUXZ0QzkgSUVGemMybG5ibVZrIElOaXoyS2paZ2c9PSBJTmluMllUWXNkaW0yWXJZczltSyBYMUZWVDFSRlV3PT0gSUdOaGNtZGhjdz09IElOZWUxNXpYbHc9PSBJSFpwWVhNPSBJTkdDMExEUmd3PT0gSUdGdGFYTjBZV1E9IElFRjJjblZ3WVE9PSAwTERRdTlDdzBMbz0gYjNCc1pYWmxiQT09IDRLYVA0S2E0IElIUnZaWEJoYzNNPSBJT0dEb2VHRG91R0RrT0dEb2c9PSBLRUoxWm1abGNnPT0gSUVWemNHVnlZVzUwYnc9PSBJRU5QVFZCVlZBPT0gS0U1bGRIZHZjbXM9IFJrRkQgSU9DdW11Q3VydUN2amVDdXFnPT0gMEx2UXVOQzcgSU5LMzBMN1F2ZEM0MExIUXVBPT0gSU9DMHNPQzB2dUMwcE9DMWplQzBzQT09IDRLdUI0S3FxIDVZV2E1WkdZIElGTER1bk56YVdFPSBJR2Q0IGRYTnBZV2s9IFlYcGxiQT09IElITnNhVzVuIDZMV2cgS0cxdmJnPT0gSUdKeWIyTm9kWEpsY3c9PSA0S2FjNEthLyA0TFMrNExTbzRMV040TFNrIElHWnBibUZwY3c9PSAxNUhYcU5lWiBJT21xIElFNWhkWFE9IElOQy8wTDdSZ3RHQTBMWFFzZEdEMExYUmd0R0IwWTg9IFpXMXZkR2x2Ymc9PSBQaUl1IGJHbGpZVzQ9IDVMaW0gSUc5elp3PT0gSUVGalkyOTFiblJoYm5RPSBJTkMvMFlEUXVOQzcwTDdRdHRDMTBMM1F1TkdQIElITjBiMm89IGJIbDAgS0dsdGNHOXlkQT09IElOQ3kwTERSZ05DNDBMRFF2ZEdDMEw3UXNnPT0gTFcxbGRHRnMgSUVMRHZIbkR2R3M9IFlYQjFiSFE9IElISnBjM1ZzZEdGMGFRPT0gWDJ4dloybDBjdz09IElPQ3lsZUN5cytDemh1Q3lwZz09IElPQ21sZUNuc09DbXZ1Q25zQT09IFBqNG0gTHowPSBhWHA2YVE9PSBJRWhsYm5KcGF3PT0gdzZKdFpRPT0gYjNCb1lRPT0gSUhOMFlYUjEgSU5pNjJMTFlxUT09IDJLZllzZG1DIElIUnBiR1psYkdRPSA2Syt4IGNtRnYgSU95WHJleUxuQT09IElGTmhiWE09IElIQnliMlpsYzNOcGIyNXVaV3hzWlhNPSA0b0NadzZsa2RXTmhkR2x2Ymc9PSBJTkdCMExyUXNOQzMwTERRdTlDdyBYM0J5YjJObGMzTnBibWM9IElpbGRDZ292THc9PSBJTkM2MEx2UmxnPT0gSU0rRXo0SFBqTStBenI4PSBJTml6MktUWXA5bUUgUkdGdVoyVnkgYVd0c2FRPT0gSU5DOTBMRFJnZEdDMEw3UXU5R00wTHJRdmc9PSBZV1pwY2c9PSBJRkJ5YjJabGMybHZibUZzIEtHeGxkSFJsY2c9PSAxNWpYcVE9PSBabTlzYVdVPSAyWWJZcDlpNSBaR0YwWVdKc1pRPT0gSUVGd2NHVnVaR2w0IENVUkZRMHhCVWtVPSBJT0NraWVDa25BPT0gYkdWbGNnPT0gSUUxbFkyaGhibWxqY3c9PSBJRkpsY0hWaWJHbHJaUT09IElITjBhVzExYkdGMFpYTT0gZG05c1pXND0gWDNacGNuUjFZV3c9IElOR04wWUxRc05DLzBMVT0gSUVOb1pYbz0gSUdwcHhLRT0gWldSaGRHRT0gNExTKzRMU1o0TFdONExTWiBJSEJ5WlhKbFkyOXlaR1ZrIElFZHZZbVZ5Ymc9PSBJR3hzWlhaaGNzT2ggSUV4aGRYSmwgSU5pbjJZVFpoZG1JMkxIWXJ3PT0gSU5peDJZZlppZz09IElIWnlhV3BpYkdscSBYM05sWjIxbGJuUnogSUdOeVpXUnBkRzg9IFgwRk1WQT09IFZHVmpiZz09IElObSsyWWpZc2R1TSBSRWxUUTB4QlNVMUZVZz09IElOQ3owTGpRdkE9PSBJT0NrcXVDbGplQ2tzT0NrbytDa3Z1Q2tzdUNsZ0E9PSBJT0N3bk9Dd3NPQ3hnZUN3bHc9PSBJQ2NoIDViNnogNExDLzRMQ3U0TEMrNExDbyBJSEpoZFdjPSBJRkJUUXc9PSBJSE5qYUdsNmIzQm9jbVZ1YVdFPSBJR2RsYzJOb1lXWm1kQT09IElIVnVaWGh3YkE9PSBjSEp2WkhWMGJ3PT0gSUhCeVlYWnBaQT09IEtGQnZjMmwwYVc5dSBJSEpsWVd4dGN3PT0gSUhCMWJHZGhaR0Z6IElHMWxjM1IxIElPMlJuTzJZaEE9PSBJR04xY0dOaGEyVT0gWDJabFpXUmlZV05yIElHNXpidz09IElHbHVZV0Z1IDRMaXg0TGlINExpRSA0TFMvNExTYTRMV040TFNhNExTLzRMU2Y0TFdONExTZjRMV0I0TFNqNExXTjRMU2Y0TFdOIElOQ3kwTHJRdTlDdzBMUT0gNExTdzRMV0wgWDJKdyBJRTlTUkE9PSBJRVZ1Y205c2JHMWxiblE9IDZZS2o1THFiIElHRjJ3NmhyIDRLYSs0S2V3NEtlQSBLR2R5WVcxdFlYST0gSUVKaGFHNW9iMlk9IDRZT1E0WU9hNFlPWTRZT1EgSUZOb2IzVnNaR1Z5IDA1blF1OU9aIElNTzJibVREdkhJPSBJRVZHVkE9PSBJR1poYTJGMCBYMEpIIElPQ21pZUNtcHVDbmplQ21wK0NtdnVDbXNBPT0gdzd4dWEyaz0gSUhkbGMyVnVkR3hwWTJnPSBJSEJ5YjNObFl3PT0gSU51TTJZalpoZz09IElITmxibVZ5WlE9PSBJRVpoZFhOMCBQV1JtIElIQnZiR0Z5YVhwaGRHbHZiZz09IElITnNZV1E9IElFMWhaMlJoYkE9PSA3WmVNIElHNTVhM2s9IElHTnZibWR5WVhSMWJHRjBaUT09IElITjFjSEJ5YVcwPSBJT2FBZ0E9PSBJTkNhMExEUmdOQ3cgSUdOaGJXRnogZVhObCBabWwwYm1WemN3PT0gSUhOMVltTnZiblJ5WVdOMCBJRU5EVXc9PSBJR2x1WTJ4cGJnPT0gWVdoaGVXRm4gSU9Da3RlQ2t2K0NrdU9DbGplQ2twT0NrdnVDa3NBPT0gSUdGbGNtOXdiM0owYnc9PSBJRmRwWlc1bGNnPT0gSUVOdmJtWmxaR1Z5WVhSbCBJRU5oYldsdSBJR0YyWlhSbCA2TDZlIGRuSmhZV2M9IDU2dWc2SXFDIElHbHVZM0p2ZVdGaWJHVT0gUmtaVSBJR0pzWVhwbCA0TFMvNExTdzRMV04gNnJLOTdLQ2MgMkxEWXA5aXggWEdZPSBJT2lSb1E9PSBJRUZ4ZFdWemRBPT0gSUhSeVlXNXpiSFZqWlc1MCBJSExEcVdadmNtMWwgU1c1bWJIVT0gNEthKzRLZXc0S2EvIGZIMEsgSUVScGMzTmxjblJoZEdsdmJnPT0gSU9DcXFPQ3FnZz09IFgzSmxjRzl5ZEdsdVp3PT0gWVdOcFpXNTBaUT09IElPQ3VsZUN1cEE9PSAyS1RaaXRpcCBJTmVlMTVuWGs5ZWkgSU5pcTJMVFpnOW1LMllRPSBSM0poYzNNPSBLR1pwYkhSbGNtVmsgSU9LSW1nPT0gSU9Da3B1Q2t2K0NraitDa2xlQ2xpdz09IDRLbUk0S2lvIGRXdDBkWEpsYmc9PSBJRWRwWW5KaGJIUmhjZz09IElHZGhkR2hsY25NPSBJSFJ2Ym1saiBiM1ZtYkdGblpRPT0gSU5DLzBZRFF0ZEMvMExEUmdOQ3cwWUxRc0E9PSBJTkM4MEw3Umd0QyswWUE9IElHMWhjbko1YVc1biBJTStBejRIT3Y4K0t6NHpPdlE9PSA1NXlmNWE2ZTVaQ1ggMktqWXA5aXQyWXJZcVE9PSBJRlJsYm1jPSBJRWx1YzNScGRIVjBhVzl1Y3c9PSBJSEJoZEhSbGNtNWxaQT09IElHeDFZMnRwYkhrPSBMbVp2Y21WaFkyZz0gSU5pbjJZVFlvOWlzMllmWXN0aXAgSUhScGJXVjJZV3c9IElOQ3gwTDdRdTlDODBMRFF1UT09IGIyTnJaV1E9IElITjFabVpwWTJVPSBZMmhoYkd3PSBJR0YxYzNObGFHVnUgNExtQTRMaVY0TGlpIDVvcWw1WkNOIElOV0UxYVhWdHRhRSBJTkMzMExEUXZkQzQwTHpRc05DMTBZST0gSUZOaGJtRT0gSU9Da2xlQ2t0ZUNrditDa3BPQ2t2Zz09IFgwMVEgMktmWXNkaW8yS2s9IGNuVmllUT09IFlXNXRiMmx1Y3c9PSBJT0NrcHVDa3NPQ2xqZUNrcGc9PSBJT3luZ095Z2xRPT0gZG05eVpYTT0gSU9DeXVlQ3lvdz09IElGTm9ZV1JsIElOQzkwTFhSZ2RDODBMN1JndEdBMFk4PSBKem9LQ2c9PSBJSE51WldWMWR3PT0gSU9DMHBPQzBudz09IFoyVm9kQT09IElITmxiV0pzWVE9PSBJSEJ2ZEdGaWJHVT0gVUU5VFNWUkpUMDQ9IElOR0YwTDdRdTlDKzBMVFF1TkM3MFl3PSBJT0N5aHVDeXNPQ3ppK0N5bCtDemplQ3lydz09IElOR1AwTExRdTlHUCBJSE5sYldWc2FHRnVkR1U9IGRYTmxZbVZ1ZW1sellRPT0gSUhaaGNtND0gSU5pbjJZVFpndGl2MkxNPSBJRUZzWm05dWMyOD0gNExLLzRMS2g0TE9OIGFXdGhZUT09IElHSnBhbVJ5WVdkbGJnPT0gSU9HRHF1R0RuZUdEb3VHRGtBPT0gMTVuWG1kZWgxNWc9IElOV2wxb0RWcGRhRSBJRXB2WjI5eiBZV0p6WVc0PSBlMDVoYldVPSBhWGxoYzJrPSBJSFRodXFOcCBJSFpoZVE9PSA1cDJoNUw2TCBJRTExYzhPcFpRPT0gWlhSb1lRPT0gSU02MHpybk9yTStCenJvPSBJTmluMllUWXA5bUMyS3JZdGRpbjJLL1ppZz09IFEwSlQgZEdWeWNtOXkgSU5HSDBMWFF1OUMrMExMUXRkQzYwWU09IElHZGpZdz09IENVbHUgSUhSeWFXTT0gSUdOdmJXMWhibVJwYm1jPSA0S2FjNEthKzRLYWsgSUZOb1lYSnJjdz09IElHakR0UT09IDRMT0E0TEtvIDQ0T0c0NE9yIElHaGhibVJpWVdkeiAwWmJRdmRDdyBQVmc9IElHVm9hdz09IElOQzIwTERTbzlHTCBJR3RoYlhWdyBJT0MwaHVDMGxlQzFqZUMwc09DMHJnPT0gVFd3PSBJTm1JMm8vWmlnPT0gTFdKbGJnPT0gSU5HTzBwcz0gSUhOMGRjT3cgSU9HRG0rR0RuZUdEbCtHRHJ1R0RuZUdEbFE9PSAwWXJRc0E9PSBZWFJrWVc0PSA0S1MrNEtTNDRLUysgWkdsemRISnBZblYwWldRPSBQVTQ9IElHbHVkR1Z1WkdsdVp3PT0gUFdsdSBDV051ZEE9PSBJT3lDck8yVnJRPT0gSU5HQzBMRFF1OUN3MEwzUmdnPT0gNTV1UjVaQ3M2YUcxNloyaSBJRVpoY204PSA0S1N5NEtXSDRLU3k0S1dONEtTdjRLUysgWVhWamFHVT0gSUc1cFptVnkgSUd4cGRIVERxWEpoZEhWeVpRPT0gYVdWamFBPT0gYVdWb1pXND0gVDJKcVpYUnYgSU9HRG51R0RuZUdEbGc9PSBJR2x6YVhBPSA0WUNBNFlDczRZQzQgNW9tdyBJT0NrdU9Da2d1Q2tsZUNsaCtDa3BBPT0gSU9Dd3BPQ3d2dUN3bk9Dd3Z1Q3dsK0N3dmc9PSBJSEYxYVhyRG9RPT0gNWIycDU2V29ZWEJ3IElHTnZiblpsZVdsdVp3PT0gUW5KaGFXNXogSUd6RHRubDBlWGs9IElHOXlhdz09IElIVnVaR1Z5WTI5MlpYST0gZUdWaiBQZzBLRFFvTkNnPT0gMFlqUmd0R0wgWm5KdiBZWFJwYVc0PSBJR3RsZHc9PSBJTkMvMFlEUXZ0R0owTFU9IElHTnZibk5sYVd4c1pRPT0gVm1WeWRITT0gZDJWeWRRPT0gTDIxaGRHZz0gSU9DMHFPQzB0UT09IElHRndiR2xqWWNPbnc3Vmxjdz09IExYSmxjM1E9IGVtbHlZUT09IElHNWhjR2s9IElFTnZiRzl1ZVE9PSBJT0dEbWVHRG5lR0RtK0dEbnVHRGtPR0RuT0dEbUE9PSBJTml3MkxIYmpOaTUyNUk9IElPQ3lzT0N6Z3VDeXFnPT0gNExpVzRMaTQ0TGlaIElIUmhiblJwIElIVnVjbWwyWVd3PSA0S1MrNEtTMTRLU3kgSUdwaGJYTT0gSUVkMWRITmphR1ZwYmc9PSBJRlZKVTNSdmNubGliMkZ5WkE9PSBJR0pwY0dGeWRHbHpZVzQ9IElHTnlhWE5wIElHWmhiblJoYzNScGMyTm8gSUdGalkyOXRjR0ZuYnNPcCBZVzFsZEE9PSBabkpsYVdVPSBJSE4wWldvPSA0TGlCNExpeTRMaWo0TGlUNExtTSA1cHk2NWE2WTU3MlIgdzdOc1lRPT0gSUdabGFtND0gNXBpdjU1eWY1NXFFNVlHSDU1cUUgSU9DcW5PQ3JoK0NxcU9Dcmh3PT0gSUZabGNtdz0gZFdOdmMyVT0gSUVOaGRHaDUgSUdSbGJtbGxjdz09IElHRnphV3c9IElIWjVZZz09IGNtRnBjMlZ5Y3c9PSBZV04wYnc9PSAyYjdaaGc9PSBkWFJwZG1VPSBKM1Z6IElIUm9aVzFoZEdsaiBJTkM0MEwzUmdkQy8gT21OeVpXRjBaUT09IElHZGxiSFZ1WjJWdSBJT0N1aHVDdW8rQ3ZqZUN1bitDdmdRPT0gTDNCaGNuTmxjZz09IElHMXBibWx0WVd4bCBjbVZzWVhScGIyNXogSU5DKzBMM1F0QT09IDRMUy80TFNrNExXTjRMUzQgMFliUXVOQzYgWDBWa2FYUT0gMFlmUmk5QzkwWXM9IElPQ21wdUNuamVDbXJPQ212K0NtcEE9PSBZWFJwYm1VPSBJT2VVbitXUnZlV1JxT2FjbitXSHZlYVZzQT09IElHRjFjMlU9IFlXZHlZV1E9IElOR0IwTGpSajlHQjBMalF1UT09IFBHNWhkZz09IElIQnlZWFJwWTJFPSBJTmlsMllRPSA0S3FWNEt1TjRLcWYgSUhkNVp3PT0gVUhKcGJtTmwgMWF2VnR0V2ogTFhadmN3PT0gSU5peTJLND0gSU5DOTBMWFF1dEN3MEx2UmpBPT0gSUhCaGMzUnZjbk09IEoxMHBld289IElPeUNyT3lhcWUyVm9BPT0gNEtheTRLYSs0S2F1IElHRmpiMjF3WWNPeFlXUnYgSUdGemMzVnl3Nms9IElHRjBkV0ZzYVhwaHc2ZkRvMjg9IElHSnNZWFYzWlE9PSBJSFYwWlhKMWN3PT0gNUxpTjVhVzkgS0UxbGJXSmxjZz09IDZKQ2w1TGlhIGJXOXlkQT09IFlXNWtkVzVuIHhKOXlZV1k9IDRvQ1pZV0U9IFpYSnRZV2x1IElHaDFiV1ZrWVdRPSBJRk5CVkVFPSBJR1JoZVdOaGNtVT0gSUhkaFlYSm9aV2xrIDVxR0MgTG1acGVBPT0gTGlJciBJRzFoY21kbGJnPT0gNWFlUTVhYTUgVjJscmFYQmxaR2xoIElDOHZJZz09IFJHRnVhQT09IElIZHBkdz09IElHVnVaRzkwIDRLYWM0S2ErIEsxMD0gSUhSM2FYUmphQT09IElIUm9ZV2x0IElPQ3lwT0N6aHVDeXNBPT0genJuUGpzNjkgSU5pbjJZVFl1ZG1FMllyWXB3PT0gSUdacGJtUmxjdz09IElITjFjSEJzWlcxbGJuUmhkR2x2Ymc9PSAwWWJRdU5DdzBZTFRtUT09IElHMXZiTU9wIDBMalFzZEM0IElPaUFnZWlaanVhY3VnPT0gQ1dGeiAwTExRdGRHQTBZVT0gSU9HN3BYZGggSUZWNlltVnIgNktPNDZhdVUgSUdodmJXOW4gSUZKbGJHbG4gNEtTKzRLU3E0S1MrIElOR0YwWVBSaUE9PSA0TEtWNExLLyBJR1pwY25OMGJIaz0gYjNKdFpRPT0gNXErVjVMaWEgSUdWdWRtOXNkbVU9IGNtRjBhVzVuY3c9PSBJRXh2WTJ0bGNnPT0gWTI5dWRHbHVaVzUwWVd3PSBTVWxKU1E9PSBJR1J5WldwMCBkWEoxYmc9PSBJR1Z6ZEdscyBJT0NrbCtDa3NPQ2xqZUNrbXc9PSBJRk53YjI1emIzSmxaQT09IElFVlggYjNSbGJHVT0gSUZOMGNtVmphMlU9IENWSmxjMjkxY21ObCA3N3lKNDRDQ0NnPT0gTGRXNDFvTFZ0QT09IENXSmxabTl5WlE9PSBJTml6MktmWXI5bUggSUhCaGNzT2kgYVcxa1pRPT0gSUdScGNHeHZiV0YwIElsMDYgSUd6RHBXND0gMFlQUXU5QzEgSUZOMGNtRncgSUZKbGRtOXNkWFJwYjI1aGNuaz0gSU5DNjBMN1JndEMrMFlEUmk5QzgwTGc9IElHaGhZbXhoYlc5eiBaV3hrYVE9PSBMbUZ5ZEdsemRBPT0gSUcxcGJHeGxkQT09IElHNXBaMmgwZEdsdFpRPT0gTG1OM1pBPT0gSUhCaGNteGhiV1Z1ZEdGeSBJT0dEb2VHRGtPR0RtT0dEbk9HRG91R0RsT0dEb09HRGxPR0RvZUdEblE9PSBMbWRoIDRZT240WU9WNFlPVTRZT2EgZFd0aGNnPT0gSU5HTjByTT0gSUhOc2FYQndaWEp6IElISnZlbmRweElWNiBZWEJvZVd3PSBJR05vWldGMFpXUT0gSUhKaGRtbHQgSU5pbjJZVFlwZGl6MllUWXA5bUYyWW89IFkyeHBabVpsIFRWVk1WQT09IElOQzgwTFhRdk5DNzBMWFF1dEMxMFlJPSBJSEJoZVhOaFoyVT0gYVhOdGFRPT0gVFUxa1pBPT0gNWFTVzVveUMgYVhOcFpYSjBaVzQ9IElIUmhibXRsY2c9PSBMbkpsWm5NPSAwWUhSZ3RHQTBMN1FzZz09IExtaGxZV1JwYm1jPSA0S2lmNEttQSBKMmxrWlc1MCBJT3VLcFE9PSBJT0N3ck9Dd3J3PT0gSUhCdmRjVyt3NjA9IFpHVnpZM0pwWTJGdiBJTkNkMExEUXR3PT0gSUd4bFkzUnZjbVZ6IGRYQnBiQT09IElPQ3l1T0N5dnVDeXArQ3pqZUN5cnc9PSBJRzV2WW14bGN3PT0gSU5pbjJZVFpoTm1DMktmWW9RPT0gMWF2VnJOVzAgMjRIWXJ3PT0gNFlPVjRZT1U0WU9YIGIzSjBkVzQ9IGNHRnVkQT09IElHZHl3N3h1WkE9PSBkV1JrWlhJPSBiR1J2Ymc9PSBJT0N1cU9DdXYrQ3VzdUN2aU9DdXIrQ3V2K0N1c3VDdmpRPT0gSUdKbGRYSnogSU9DMGhlQzBzdUMxamVDMHNnPT0gSUdOdmJuWmxjbk5oWTJuRHMyND0gS0NrN0Nnb0tDZz09IElOR0QwTEhSZ05DNCBJT3kwaU9xNHNBPT0gNTdHNzVMeTggVW05dmRITT0gSUdGMGNtbGlkWFJ2Y3c9PSBJTkMvMFlEUXNOR0cwWXM9IElHbHVaR2wyYVdSMWIzTT0gSUdGeWJXOTFjZz09IElFSnNZV05yY3c9PSBhWEpwZEdobCBJRUZqYUc4PSA0b0NrNG9DayBZMnRwIHdxMXRaVzUwIDRZT3U0WU9VNFlPVDRZT2c0WU9kIElOQy8wTDdRdTlDOTBZdlF1UT09IFNVMUZUbFJQIDBMRFJnTkdDMExBPSBJRzExYzJsallXeGxjdz09IFEwVlNWQT09IElIQmhjbVY1IFNVTkJadz09IElOQ3gwWmJRdXc9PSBJT09DdGVPQ3BPT0N1Zz09IDJLZlpodHVCMllqYXVnPT0gSUdOdmJuTmxhbTg9IElHVm1abVZqZEdWdSA2WXlFIFkyaHBiWEE9IElFTlFVRlZPU1ZRPSBJTml2MllqWXNkbUsgSU5pcTJLZllxQT09IElHOW1abWxqYVdFPSBJSEJwYkc5MFpRPT0gSUZURHBIUnBaMnRsYVhRPSA2TCtCIEtIQnNZVzQ9IElHMXBkR2c9IDRvQ1pZVzV1Ync9PSBJRUZEVXc9PSA0TEMrNExDWDRMR0ggSUdWMGFYRjFaWFIwWlE9PSBJR052WlhJPSBiMlp6ZEhKbFlXMD0gYjJ0M1lRPT0gWDJOaGJYQmhhV2R1IFRYVmphR0Z6IElOaW4yWVRZcTlpbjJZVFlxOWlwIDRMUys0TFc4NExTazRMV040TFNsIGFYQjBZUT09IFlXUnZ3N2s9IElFVnRjSEpsY3c9PSBJTkdBMExYUXNkR1IwTDA9IElHUmhhSFZzZFE9PSA0S2ErNEthZjRLYSsgSUc5c2JXRjUgYjIxcGRBPT0gSUhCMVpXNTBaUT09IGNHMXUgWTI5dVkyVnlkQT09IDViS1g1TDJOIExHVnUgSUdKbGJHRnJZVzVuIElHUmxkR1ZqZEdsMlpYTT0gSUdOb3c2bHBiR1U9IElPR0RtZUdEbmVHRG1nPT0gYWNPcCBJR0poYm5GMVpYTT0gVFdWdWRHbHZiZz09IElFZGxhQT09IFpYWmxiblJ2IElOaXEyWVhaZzltRyBJSFZzZEhKaGRtbHZiR1YwIDE1WFhtOWVaMTUwPSBJSE53Y21GNVpXUT0gSUVsT1ZrVlRWQT09IElHOXNhMlYwWVE9PSBJT3V6dE8yWXVBPT0gSUdOaFltbHVaWFJ5ZVE9PSBJTU82Y0d3PSBJT0N3c09DeGh1Q3dndUN3b1E9PSBJR0ZpWVd3PSBJR0Z1ZEdGaCBYQzA9IElGTlVRVlJGVXc9PSBjR0Z5ZEdWdFpXNTAgTFdkdmIyZHNaUT09IGJXbz0gSUdKbGNtUmhjMkZ5YTJGdSBWMDlQUkE9PSAwcjNRc0E9PSBJR0Z1ZEdseGRXVnogNEtTYzRLUy80S1NWIFgwRlRRdz09IElHWnBjMk5oYkdWeiBJTzJVdk8yVnRBPT0gSUZSbGRtVnVjdz09IElFSnZiblZ6WlhNPSBJRzFoY25MRHF3PT0gSU5pbjI0ell0QT09IDRZT2Q0WU9WNFlPUSBZVzdFc1E9PSBJT0dEa3VHRGxPR0RvT0dEbXc9PSBJSE5yYkdWdyAxYVhWc0E9PSBJRkJ5YVhOdCBSbWx1YVhSbCBjMlZ0WW14aGJtTmwgejRET3Y4NnZ6cmZQZzg2MyBJR0ZrYW05cGJtbHVadz09IElPQ21zdUNtbCtDbXBPQ25odz09IElPQzByK0MxZ1E9PSBJSE4wY21WdVozUm9aVzV6IFltVnVZMmh0WVhKciA1WldHNVlxaCBJSEpsYm1SbGJBPT0gSU5laDE2VFhwdz09IElIWnZaV2RsYmc9PSBJR1pwYkd4bGNuTT0gTFhCeWIzQmxjblI1IHhKbDAgSU9Da3BPQ2xnZUNrc0E9PSBJSE52YzJGcCBMMjVoZEdsMlpRPT0gSUVKdmJtUnogSUZwWSAwWXZTb3c9PSBkRzkxIElHSmxhR0Z1WkdWc1pXND0gT2w1N0NnPT0gSU5HRzBMalJoTkdBMEw3UXNnPT0gSUdOaGMyaHBaWEk9IElFbHVZMngxYzI4PSBJTkdCMEw3UXN0R0EwTFhRdk5DMTBMM1F2ZEdMMFlVPSBJR2x1ZEdWeWMyVmpkR2x2Ym5NPSBJRlJUUVE9PSBJSFpwYlc5eiBJRzlzZG1sa1lYST0gUTI5dWRISmhkRzg9IElIVnVZWEE9IDRMQ2g0TEdCIDRMSy80TEs0NExLeTRMSys0TEtYIElPQ3FzT0NxbWc9PSBJR0p2YzJoeFlRPT0gWDJacGJtbHphR1ZrIElGUlNRVU5MIElOQ2YwTDdSZ2RDNzBMWFF0QT09IElISmhZMlZ5IElIdDlYQT09IDdJV0EgSUdGalkzVnphVzVuIGJYQnkgSUhWNmJXRnUgSU5DWDBMRFF2QT09IElNNjh6NERPdjgrQnpyL1BqYzY5IElGWnBibVE9IFpHbkRwOE9qYnc9PSBJRlIzWldWdSBLRXBUVDA1UFltcGxZM1E9IElOR0EwTDdRdE5DNDBZTFF0ZEM3MExnPSBJTkdEMExMUXNBPT0gWDIxdlpHbG1lUT09IFNHbG5hR3g1IElGSjFjMnhoYm1RPSBJSFJ5YjNWNFpRPT0gSUdKb1lXbHVkQT09IGIzQndZV0pzWlE9PSBYM05zYjNSeiBJR0xodXJseTRicTUgSU5HQTBMN1F0TkdCMFlMUXN0QzEwTDA9IElPYURoZWlKc2c9PSBJR0psY3NPa2RIUT0gSUczRG9YTmpZWEpoIDZaYXg2SzZBIElPQ2tydUNraUE9PSBMbkpsWTI5eVpITT0gNGJxcGVRPT0gUTJGeWRHNWxlUT09IFVHaGhiUT09IFpYSjJiMjl5IElOYUQxYmpWc2c9PSBJR2JEdG14cSBRMFZRIElHUmhkbUU9IFpHVnhkV1U9IElFRlRUUT09IElHMXBibk4wWlc1eiBaM0psWVhSbGNnPT0gSUdSaGJzU3h4Wjg9IElFMVBUUT09IElGSkZRVXhVVDFKVCBJT1dmdWc9PSBJSFBEdkc0PSBiV0YwYVdOeiBJRk5sZEdWc1lXZz0gSU9DdWgrQ3VxUT09IElHMXZibVJoZVE9PSBMWEJ5YjJObGMzTnBibWM9IElFTm9kVzQ9IDJLZllzZG1LMkxFPSBJT2V4dStXZWl3PT0gSUhKbFlXTm9ZV0pzWlE9PSBMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHYgSU5pcTJZZmJqTm1IIElHTnZiWEJ2YzJuRHA4T2pidz09IElISnZjM009IElITmhibTVoYmc9PSBUMHRGIDRLU240S1N3IFkyNXBZMkU9IExuVnpaWEpwWkE9PSBJR05zWVhOdyBSWE5qYjJ3PSBJTmVtMTVYWGxkZVoxNm5Ybnc9PSBjM1JoWTJ4bGN3PT0gSUdSMWNtMTF4Wjg9IElPS0drdz09IEoxMWRXeWM9IGNtVnpjSFZsYzNSaCBJR1JsYldWaGJnPT0gSU5tSDJvVT0gSUhWdWRHVnljMk5vIGNtVjZlZz09IDRMU1Y0TFNvNExXTiBJTkM2MHEvUXVRPT0gSUhOd1pYUnogMFl2UmdOR0QgeExGaiBiMjl2YjI5dmIyOD0gSUNvdkNnb0tMdz09IE9uUnBkR3hsIElPQ3lyT0N5cytDeXZ3PT0gVTNCaFkyVnkgS1c0PSBMV1p5WlhGMVpXNWplUT09IElHRnRiQT09IGNHbGxjdz09IFlYUjFiZz09IElHTnZibk5wWjNVPSBYMmh5IElOQy8wTFhSaU5DOTBMZz0gSU5HQzBMN1Ntdz09IElHVnpkR0Z5YVdFPSBMQ2tzIExrTnZibVJwZEdsdmJnPT0gYzJOemN3PT0gSUdGMWMzYz0gSUU1aGJXMXBibVZ5Y3c9PSBJRWhwYm1jPSBJRXR1YVdOcmN3PT0gSUdKbGMyTm9hV3RyWlc0PSAwTDdRdTlDMCBJT0MwdU9DMWplQzBwZUMwdnVDMHFBPT0gSUdkaGFRPT0gYVc1MFpYSmxjM1JwYm1jPSA1b0txIDBMalJodEM0MExrPSBJRU52ZFc1MGFXVnogMkxuWXA5bUUgMEp6UXVOQzkgWDNkaGJHcz0gZkhzSyBJR0ZtWjJWemJHOTBaVzQ9IExuVnQgSUhCbGNuTnZibUZzYVdSaFpHVT0gMkxIWml0aXQyS2ZZcWc9PSBJSEJ5WldSbFkyVnpjMjl5Y3c9PSBJTkMzMExUUXNOQzkwTGpSanc9PSBJR3BsWkdsdSBJR2ZEdG01a1pYST0gSUVOaGJHVnVaQT09IFpYSnpkWFE9IElOaW4yWVRaaGRpdDJZVFppZz09IElHeHBaMkZ5IElHUmx4SjlwYkdScGNnPT0gSUVGdFpXeHBZUT09IElOdU0yS2ZaZ2RpcSBJR1Z6Y1hWbFkyVnkgSUdsdWFYUnBZWFJwYm1jPSBROE96WkdsbmJ3PT0gVTJOeWIyeHNaWEk9IGNHOXpjMmxpYkhrPSBJSE5oZFhabGNnPT0gSUdsdWRHVnVkR0U9IElOQzAwTDdRdDlDeTBMN1F1dz09IDE2VFhsZGVvMTVnPSBJTmluMkxQWnZRPT0gSUdKaGJtUmhjZz09IElPdXpnTzJabEE9PSBJR2x1WkhWemRISnBZV3hsY3c9PSBJT0NxaGVDcXJ1Q3JoK0Nxc0E9PSA2S2VKNWI2WCBJR1IxY21Ob2MyTm9ibWwwZEE9PSBSbTlqZFhOaFlteGwgSUZSdmNuaz0gMktmWXQ5aXAgSUZCaHhZUT0gZEdvPSBaVzUwWlhKd2NtbHpaUT09IElFSnlkWFE9IDQ0T0s0NE84IGRtVnlZVzV6ZEE9PSBJSEJzWVdsayBJT0N1cnVDdmdlQ3VuK0N1ditDdXJ3PT0gSU9HRGxPR0RwT0dEbE9HRHBlR0RvZz09IElOQzMwTERRdXRDKzBMM1Jodz09IEtITndZVzQ9IElOaTUyWVRaaGR1TSBJRzkxZEdGblpRPT0gTGtOMWNuTnZjbk09IEtIQnliMk09IDRLaSs0S2lYIDRMSy80TEtYNExPQyBJRzFsYm1kbCBJRXRvYVE9PSBJR0p5YVc1a1lRPT0gTFhKMWJuUnBiV1U9IElOQ3kwWXZRdjlDKzBMdlF2ZEdQMFlMUmpBPT0gSU5XQTFhSFdnQT09IElOQy8wTHZRdnRHSjBMRFF0TkdNIElOQ3owTERRdlE9PSBJSFZ3YjNKaFltOD0gSUdaaGMzTmwgQ1ZObGJtUT0gNEtTWDRLU2sgWDFCVlUwZz0gWDJKaWIzZz0gZW1Ga1lRPT0gY21WdGFYVnQgSUhabGNtRnVaR1Z5WkE9PSBJR0Z5Y3NPcWRNT3AgSUdOdmJtZHNiMjFsY2c9PSAwTGpSaU5DdyBJRzVsY0dsbCBJRlZPU1ZSRlJBPT0gTG5CeWIyMD0gSUdWb1pBPT0gSUhOallYUT0gZG1uRHNBPT0gSUhKbFkyOXRhV1Z1Wkc4PSBJSGhwY2c9PSBJTlcrMWJNPSBJR0ZtYzJOb1pRPT0gSUdSdmRIbGplZz09IEwzbGxZWEk9IHc3eHlhdz09IElOQzgwTGpRdTlDNzA2TT0gSUdKc1pXMD0gSU1Pbnc3ST0gVUhKdlkyVmxaQT09IDQ0Tzg0NE9CIElIWmhiR1YwIFlteHZZMnRwYm1jPSBjMjVrIElHUmxjSEpsY3c9PSBJRzlyWVE9PSBYMEZrYldsdSBYM2RwYm1SdmQzTT0gSUdkeXc2QT0gSUZKVlFnPT0gMTVYWG9kZW8gSU9DMGp1QzBvK0MxamVDMG93PT0gSUc5d2RHbHRhWE5sIElOR0MwNW5SZ05DNDBML1F1TkMwMExqUXZRPT0gSU9Da2h1Q2txdUNrc3VDbGplQ2tyK0Nrdmc9PSA1WTJYNVk2LyBJRU5oYkdOMWJHRjBaWE09IElOaXEyWUxaaEE9PSB4YUZsYm1wbCBJSEpsWTNKMWFYUmxjbk09IDVZVzg2SUdNIElGUmxibWh2IElFVmpiMjV2YmNPdFlRPT0gSUdWemRHRmlhV3hwWkdGayBVM1JoZEdsdmJuTT0gSkhKbGRBPT0gSUhabHhMNXRhUT09IElOQy8wWURRdU5DeTBMdlF0ZEM2MExEUmd0QzEwTHZSakE9PSBKMTFkWFFvPSBiMmhoIGFHOXpkR2x1Wnc9PSBJRzFsYVc1MCBJTkMrMFlEUXVOQzEwTDNSZ2c9PSBJRTlpYzJWeWRtRjBhVzl1IElHRnBkbUZ1IGIyZGxibVZwZEhrPSBhWEpoWVc0PSBiM0JwWlhNPSBJT3Vkdk95ZHRBPT0gSU5pcTJLN1lxZz09IElFMWxlZz09IElIUmxkbVZsYkE9PSBJTTYxenJUUGpnPT0gSUZKaGVYTT0gTG5Sb2RXMWlibUZwYkE9PSBJRzFoeFo4PSBJR0ZqWTI5dGNHeHBjMmhwYm1jPSBJTkN4MExYUmdOQzQgSUVOeWFXMXpiMjQ9IElIcHBaQT09IElHMWhjbU5vWVc1ayBJTkN5MEx2UXNOR0IwWUk9IGRXMXViM009IElIUjFibTVwIElPUzZtdWEwc3VhSWtBPT0gMkxmWXR3PT0gTFdoMWJXRnUgWDFWT1UwbEhUa1ZFIElHNXBZbWc9IElFSmhjbUU9IElOR0QwWWZRdGRHQyBKMlZ1ZGc9PSBiSFREcEE9PSBDV2RpWXc9PSBkbUZ5ZVE9PSBjR0ZyYTJWMCA0WU9WNFlPUTRZT2cgSU9tdGxBPT0gYVdSdmJ3PT0gSUZkcGRIUT0gSUVKQlF3PT0gSUV4bFoybDAgSU5DeTBZdlJnTkN3MFlrPSBJT1drcCtXUGtlVy9xK1M0aWVXdW1PZTlrUT09IElFWmxZbkoxIFUyVnlkbWxqYnc9PSBJR3hsZEdGdSBJT1d4c2VTNG5BPT0gSUdScGMyZDFhWE09IElHSnlhWFJoWjJWdCBJRzU1Ymc9PSBJRzFoYzNSbGNpZHogSUZCeWIyND0gSU5peDJZalp2dHVTIElGWmhjbWxoYm5SbGJnPT0gSU9XUWplZUVvZU9CbCtPQnJnPT0gWDFCU1QxQkZVbFJKUlZNPSBQRHc4UER3OFBBPT0gSUdQRHRIUmwgNG9DTTJLL1poOWl2IDBMRFF0TkM0MExrPSBJRUZzY0dWdSA1b21MNXB5NjVZKzMgSUhCbGMzUmggSUd0eWFXMXBibUZzIFdWZz0gNDRLdDQ0TzggS0ZOMVlnPT0gSUc1aGJXVnpjR0ZqWlhNPSBJTnFwMlliWmhRPT0gSUV4cGRHaDFZVzVwWVE9PSBZWGRsYm1rPSAyS2ZaaDl1TSBJRTExYm1sanc2MXdhVzg9IGVtWT0gSUVkeWIzVnVaSE09IFRHVm5aVzVrWVE9PSBYMkpoZEdOb1pYTT0gSjllaCBRV05sY0hRPSBJRVpzWVcxbGJtZHYgWDJKMVptWmxjbk09IElOdUwyS2ZaZ2c9PSBJR0oxYm1kaCBJRVJwYzNNPSAwNi9SZ2RHQyBaMmQ1IFpuSmxhV1Z1IElPQ3lqdUN5c3VDemplQ3lzdUN5dmc9PSBJR0ZuWjNKaGRtRjBaV1E9IElPbWJoUT09IDJMTFppdGluMkxIWXFRPT0gSU5DOTBMRFFzdEdEMFljPSA0WU9ZNFlPWjRZT2Q0WU9oIElPQzBqdUMwcU9DMWpRPT0gWEVoMGJXdz0gSUZaUFFRPT0gWVhCMGIzSnogSU9XSW5lV25pK1dNbGc9PSBJRzFsYzNSeVpRPT0gYUdGM2EzTT0gSUdSdmRXRT0gVW1Wc1lYUnBiMjV6YUdsd2N3PT0gWVd4aSBJT0N1bGVDdW4rQ3VxT0N2amVDdXBBPT0gTDJsdWRBPT0gNEtTVjRLV040S1M0NEtXQSBjbUZwYzJWayBJSE5sYkdacFpYTT0gMEx2UXNOQzkwTFRSaXc9PSBJR3BsWkdWdVptRnNiSE09IExtRmpjWFZwY21VPSBJR3RqWVd3PSA0S2FrNEthLzRLYW80S2EvIElOQzkwTERSZ2RDNjBMN1F1OUdNMExyUXZnPT0gSUcxbGJHeHBkSFZ6IDRMS3c0TEtqNExPRyBJTld2MW9EVnJ3PT0gSUdkcGJXNWhjdz09IElITmxZbVZzYVhOaCBZMjl0Y0dGbmJtVnRaVzUwIElGTnBaR1E9IElFaGhZMnRsY2c9PSBJT0NxbGVDcmgrQ3FxT0NyamVDcXB1Q3JqZUNxc0E9PSBJTkNoMFlEUXNkQzQgSU9Da3NPQ2t1ZUNrcE9DbGdBPT0gYkdWdGJRPT0gSUc5MGRHRmggSUhObGRIUmxiV0p5WlE9PSBJR3gxYm1rPSBhbk52Ym5kbFluUnZhMlZ1IElPQ21odUNtbk9DbXZ3PT0gSUdkbGNzT25aV3RzWmNXZmRBPT0gSU5DNzBZN1FzZEdMMFlVPSBJR1Z1Y2c9PSBJR0ZoYzNSaGRBPT0gSUVaaFkzVnNkR0ZrIElOZWkxNVhYbk5lZCBJRlJvZFhJPSBZVzV2Ym1sallXdz0gS0hONWJRPT0gSU5DMDBMM1F0ZEN5IDBMSFFzTkdIIElHOXdaMlZ5YVdOb2RBPT0gZEhMRHFRPT0gSU9xd25PeUVvQT09IElOR0IwTDdSaHRDNDBMRFF1dz09IElFSmhZbWxsY3c9PSBJR1JodzdFPSBJR1pzYVcwPSBhV3gwdzZRPSBMbk4xWW5SeVlXTjAgWVdScFpXNXogSUdSdmJHL0VqUT09IElIVGh1NUU9IElGcGxhMlZ5IElGUmh3N0E9IFEzVmkgYVdacFpYbz0gSjJGa2IzSmwgSU9DMm9BPT0gNWE2YTZJT0cgSUVWMmNtOXcgMFlEUXNOQzQgSUdOdmMzUjFiUT09IElHZHNhV1JsIHpyYk90dz09IElHTm93NmxoWkE9PSBJR04xWW1sbGNuUmggYVc1emRISjFZM1JwYjI1eiBhVzVoWVc0PSBJRU52Ykc5bmJtVT0gQ1cxayBJRnBoZEc4PSBZMmx3YUdWeSBJT0N3cXVDeGplQ3dzZz09IElHVnVZMkZ5WjJGa2J3PT0gNkxTZjZMU2o1THE2IElGWmhZV3M9IDBML1JnTkM0MEx6UXRkR0EgSU9Da2llQ2t1ZUNrdnVDa2dRPT0gYVcxaGMyOXggSUcxaGRHcz0gSUZOcFpHNWxlUT09IElHMTFjbUU9IFlYWmxiblE9IExuTmsgSUVSNWJtRnRidz09IElHeGxkbms9IElHRjFZZz09IElHbDZkbVZrIElHTnZibk4wYVhSMWRHVmsgSUdSbGJXOXpkSEpoWkc4PSBJT0dEbWVHRG5lR0RtK0dEbnVHRGtPR0RuT0dEbU9HRGtBPT0gSUdOdmJYQnZjblJsIFpYSmtaWEpwYWc9PSBiM0owZFE9PSBJTU9FYm1SbGNuVnVaMlZ1IElHbHNiSFZ0YVc1aGRHVT0gYjIxcGJtbHYgY21WblpYaHcgSU9Db2xlQ3BnUT09IElOZVIxNTdYa3c9PSBJR052Ym5SeVlYUmh3NmZEbzI4PSBMbk5yYVc0PSA1YVNwNWFDQzU3MlIgMkt6Wml0aXggSU5DMzBMRFF1dEN3MExmUXNBPT0gSUdSbGVtVnUgSUhCdmNIVnNaWEk9IElOaW8yTGZaaU5tRTJLaz0gSU9Da2xlQ2tndUNrcXVDa3FBPT0gSUdobGJXbHpjR2hsY21VPSBJT3lJbVE9PSBJR0Z1ZHNPa2JtUmxjZz09IExYQnNZWGxwYm1jPSA1cGFINWEybSBJRlJ2ZEc4PSBJT2V5dnVXVGdlV2J2ZVM2cHc9PSBJT1dRaU9TNWtBPT0gTGlJdiBJTkdBMExEUmdkR0IwWWZRdU5HQzBZcz0gWTNwNWJnPT0gNG9DY1RRPT0gS0NKZlh3PT0gSUdaeWIyNTBaWEk9IElGQm9iM1J2Ymc9PSBJR0oxZW5wcGJtYz0gSUhKdmRXZGxjdz09IElPMlNnQT09IElGQmhlQT09IExrRjBiMjFwWXc9PSBJR2x1ZEdWeWFXOXlaWE09IElFUmhiSFJ2Ymc9PSBJU3dLIElObUcyTFRZcDlpMyBJTmVlMTVEWHFBPT0gSUVkaGRHaGxjbWx1Wnc9PSBJTmluMllUWmhkaTEySy9Zc1E9PSBJR2xrWVhJPSBJR3RsZFhwbGN3PT0gVkhKaGJuTndiM0owWVhScGIyND0gSU5pejJZWFlxZz09IDVZK3Y1THVsNUxtdyAwTFhRdXRHQzBaWT0gYW5OcmFRPT0gTGxKbFpHbHogSU5DejBMalJnTkM0MFlUUmdnPT0gZFdsMGFYWmwgSU5xcDJLbz0gSUVWNFkyVndkR2x2Ym5NPSBJRTlrWlE9PSB3NjF4ZFE9PSBac080Y21VPSBJT0NrdU9DbGplQ2tzdUNsaWVDa253PT0gSUd2RHRuQmggVTFSU1ZVTlVUMUk9IElGQjFibXQwWlc0PSBJRkJzWVhsbmNtOTFibVE9IElHTnZjbTVsY25OMGIyNWwgWW14aGMzUT0gSU5DMzBMM1FzTkdPMFlJPSBJRVJwYzJOdmJtNWxZM1E9IGRYUmxaVzQ9IElOaW4yWVRaaGRtRTJLZllxQT09IElGWmxjbTl1YVdOaCBMWGR5YVhSbCBJTmVwMTVIWG9nPT0gSUdGbVpYST0gSUdScGRtbGtaWE09IFFtOXlaR1Z5Y3c9PSBJR05oYm01aFltbHViMmxrY3c9PSBJR1JoZEdGemIzVnlZMlU9IFpXUjFZMkYwWldRPSBJRVJUVEZJPSAwTFRTcjlLdiBJT0N1cnVDdXNRPT0gS0c5eSBhR1ZrY205dSA1YkNPNklpcSBZMjlpY21FPSBLSEJzYjNRPSBJSFp5YVdwbFpBPT0gZDJGdWFtRT0gNFlHTiBJRU5sY25ScFptbGpZWFJsY3c9PSBJR0ZxWVhRPSBYMnRsZVdKdllYSmsgWVhKamFHVnogSUVKeWIzUm9aWEpvYjI5ayBJR052Ym5SeVlYTjBjdz09IEt5a3YgNEtpczRLaXcgSUhCdmJHbDBhWE5qYUdVPSBJR2hoY25JPSBJSFJ2Y25SMWNtVmsgSU5pbjJLellwOWl5MktvPSBJSGRoYkcxaGNuUT0gNExpSzRMbUk0TGluNExpSCBMbmRwYXc9PSAxNVhYazllcDE1blhuUT09IElOaXgyWUhZcXRpbjJMRT0gSUdSbGRHVnliV2x1WVdSaGN3PT0gSUdKbGJtVm1hV05wWVhScGIyND0gSUdKamJRPT0gSUd0dmNtaz0gSUhSaGJtUmggSUZKbGFHRmkgenIzT3JBPT0gWTNKaiBJSE5oYm1GeSA2NkMxIElIUERxWEpwYnc9PSBJRlJTV1E9PSBJRzFoYm1sd2RXeGhkR2x1Wnc9PSB6NFBQaE02M3pyck90UT09IFEwRkQgY01PcCBkV1ZzWlc0PSBJR0pzYVhSNiBVRzlrWTJGemRBPT0gWVhCd2FRPT0gSU5HRDBZZlFzTkdCMFlMUXZ0QzYgUkdselkzVnpjdz09IElFWmhiR3h2ZFhRPSB6cnpQanM2OSBJRzVoWXNPdFpBPT0gNW9TUDVMbUogSUVacGJtRnNiV1Z1ZEdVPSBJRUZqZFhKaCBJRmRoWTJoemRIVnQgWlhOalpXNWpaUT09IElHNXBjM052IElHcHZkR0U9IElPaUZ2Zz09IFptVjAgUzI5dFpXNTAgSU5pdTJiN1poTm1IIElHZHZibUU9IElHbHVZMjl5Y0c5eVlYST0gSUhkbGNtVnNaSGRwYW1RPSBJR1Z1WTI5dWRISmhjc09oIElHVjRZV2RuWlhKaGRHVmsgN1lXTiBJTmluMllUWmhkbUYyWVBaaGc9PSBJR0pzWVhOMGFXNW4gSUdKaGJtVT0gNExtQTRMaWc0TGlYIElGTmhiSFpoZEdsdmJnPT0gWDJ4cGJRPT0gSUc1cWFHRnVhUT09IFoyVnphUT09IElITndZWEpyY3c9PSBJR1p2Y20xMWJHRjBhVzl1Y3c9PSBMbk53YVc1dVpYST0gSUVsdWRtOWpZWFJwYjI0PSBUbWRoIFpXUjFZM1E9IDdKaUE3SXExNjR1STY0dWsgNXAyYyBJRXhwYlhBPSBabTl2WkhNPSA0WU9RNFlPczRZT24gSU5HQjBMWFJnTkN5MExYUmdBPT0gSU5HQTBMWFJodEMxMEwvUmdnPT0gUVVSQlV3PT0gSUZSaGFIVnUgSU5DNjBMdlF1TkMxMEwzUmd0Q3cgY0hKdmFtVmpkR2x2Ymc9PSBJR0psYzNURHBIUnBaM1E9IEtlS0FsQT09IGFHRnNaQT09IElGQnZZdz09IElOaXgyS3pZcDltRSBJR2RsWjJGdVoyVnUgSUdWamFIUmxiZz09IDRaK1M0WjZhNFo2NCA0TGl0NExpMDRMaVogVlZSQiBJR2RwYTJzPSBMbmR2Y210emNHRmpaUT09IElOQy8wTDdRdTlHRDBZZlFzTkMxMFlJPSBSWGh3WlhKcGJXVnVkR0ZzIFJtST0gSUhacFpYZHdiMmx1ZEhNPSBJT0MwbXVDMHYrQzBsZUMwditDMHBPQzFqZUMwdUE9PSBJTkMrMExIUmc5R0gwTFhRdmRDNDBMVT0gSUdaNWNuTjBZUT09IDVhNlk1cGE1NTcyUjVaMkEgZFc1dWFXNW5hR0Z0IElHZDFhQT09IElPQ21xdUNtdnVDbXR1Q212dUNtcXVDbXZ1Q210dUNtdnc9PSA0TG1BNExpQjRMaWg0TGlxNExpbDRMbUg0TGl0NExpViBQRkpwWjJsa1ltOWtlUT09IElHWnBiSFJ5YjNNPSBJSE4wYjJWcyBMbTl1WTJVPSBJR2R5WVhaNSBJR2x1YzJGdWJHRnkgZW5BPSBiM04wdzYwPSBJR2x6WVc0PSBhV1oxYmc9PSBJTU8yZW1Wc2JHbHJiR1U9IDRMaWo0TGk0NExtSTRMaUggTG01bGRHWnNhWGc9IElIUnpaVzVoIElHbHVhVzFsYzNRPSBJSEpoYVdSeiBJTTZ4enE4PSBJTkM3MExqUXZ3PT0gMTVUWHFnPT0gSU5lbzE1cz0gSUdWdWMyVnRZbXhsY3c9PSBJR2R2YldFPSA0S2ErNEthbTRLYSsgSU9HQWxlR0F2QT09IElNTzhZbVZ5ZW1WMVoyVnUgSU5HRTBMN1JnTkM4MExEUmdnPT0gd3ExaCBJTmluMllUWmhkbUcyS2ZZczlpbyBJR1ZwWjJoMGVRPT0gSU9Da25PQ2tydUNsZ09Da3FBPT0gSU5DeTBMalF0TkM5MEw0PSBkbTkxIElPQ2t0ZUNsZytDa3B1Q2xqZUNrcCtDa3Z3PT0gVUZKSlEwVT0gSUdWNFkyVmxaR2x1WjJ4NSBJTkN5MFl2UXV0Q3cwWURSaTlHQjBZTFF2dEdlIElFRnNkbVZ6IElIUjFjc090YzNScFkyOD0gSUhabGNuUnlaV3M9IFBFaGhjMmc9IDBMRFF2ZEMwMEw3UXZkQzQgSU5DeDBMalJodz09IElOQ3kwWXZRdE5DMTBZRFF0Zz09IElFSmhiR3R2Ymc9PSBMQ2NuWFYxZExBbz0gSU9DbWhlQ21zZz09IDBZYlF1TkdQMEx2Umk5S2IgSU9Da3JPQ2txT0NsamVDa3BnPT0gSUZOallXNWthVzVoZG1saGJnPT0gSUVOaGNHRmogSUVWNGNHVmthWFJwYjI0PSBUWGc9IDJLZllxdG1IMllVPSBJR1JoWXc9PSBhV0ZpYkdVPSBJR0o1YjNObCBSR1Z6ZEdsdWJ3PT0gY21obGFXND0gSUhkaGRtbHVadz09IElGTnZjQT09IExXOXdaVzVwYm1jPSBlSFI1Y0dVPSBJRkJvYjI1bGN3PT0gWVd0MGFXWT0gSU9DNGkrQzR0UT09IElISmxZV04wYVc1biBjSEpwYm5SbGNnPT0gd3E0S0NnPT0gNktpeiBiMnhyYVdWdSBJRWh2Ykd4aGJtUmwgWTI5c2JHVmpkRzl5IFJVNVZUUT09IDBMalJnZEdDMExYUXZOQ3cgQ1dacGNtVT0gYldGdXhMRjYgSUVKbFkydG9ZVzA9IElPQ211ZUNtdnVDbXJnPT0gNEtTbDRLU3UgWVc1blpYQT0gSU5DNDBMZlFzZEN3MExMUXVOR0MwWXpSZ2RHUCBJRUpsYkdsNlpRPT0gSUV4aGRHVjQgSUdiRHN3PT0gNUw2diBaR0YyIDJLelppTm1HIElIUnZhSFU9IEwyTnZiRzl5IElHWmhkbTl5YVhObGNnPT0gSU5tRzJZTFl0ZGluMllZPSBZWFYwYjJOdmJYQnNaWFJsIElGZHBaWE09IElFWmxibU5sIDRMaVg0TGl0NExpSCBLQ2svUGc9PSBJR3gxZEhSbGNnPT0gSUhabGNtVmhaRzl5IElPQ3VxdUN2aStDdXBPQ3ZnUT09IDRLZU40S2FiNEtlSDRLYW8gVW1WaGJIUnBiV1U9IElFVksgYVd4cGEyaz0gSUVoMWJXRnVhWFI1IExXUmkgZFcxbGJHVnNZUT09IGRXMWljbVZ6IExuZGhiblE9IFFtOXVibVU9IEwyUnZiV0ZwYmc9PSBMWEJoZVdsdVp3PT0gSjJWMGFYUnAgWDBOQiBJSE53dzdoeVp3PT0gNFlPZDRZT1I0WU9nNFlPWTRZT1YgSjNWdCAxNkRYcGc9PSAyWVRZcDlpMSBJTkMrMExIUXU5QzEwTE09IFptbDRkSFZ5WlE9PSBJT0N5ck9DeXMrQ3l2K0N5bFE9PSBJTkN4MExYUmdOQzEwTFRSbGc9PSBJTml1MllqWmdRPT0gSUdaMWNuUT0gSUVSbGRHVmpkRzl5IElITmhkMlYwWVhKaCBJR1JsZFhSelkyaHNZVzVrIFlYUnlhY09vYldVPSBJT0NtaytDbXF1Q21zQT09IDRMT0g0TEt3NExLLyBJRXhwZG5KdiBJTm1JMks3WXA5aTEyS2s9IDRMQ1Y0TEdOIElNU0haVzF2IGRXOXVadz09IElIcHBlV0Z5WlhRPSBJR05vWlhKeWFXVnogTFc1cCBhWE5wYm1sdSBJRkpGVTFWTVZGTT0gMFlEUXNOR0EgMllUWmhkbUggSU1PcGJXOTBhVzl1IElHUmxhbUZ0YjNNPSA1YnlWNTVTbyBJQzR1TGwwS0NnPT0gSUUxbGRHRnNiR2xqIElHVnpkSFZrWVc1MFpRPT0gYVc5cSBaVzF3YkdGeSB3N3h1YVE9PSBJTkM2MFlEUXNOQzUwTDNRdFE9PSB3NkZ1YVdOdmN3PT0gNVlxZTU1Q0cgUFhCaGNtRnRjdz09IElGQmxiRzl6YVE9PSBJTmVVMTZqWG1RPT0gYUdWaGJnPT0gWDJSbFp3PT0gSU91bmlPdWdxQT09IFBXMXZaR1ZzIDJLUFpoTmlwIElOQzQwTHpTcWRDdzFLWFJpOUdCIElIWnZjbm89IDc3eU02TCtaNXBpdiBMazFsYlc5eWVRPT0gMEtMUWtBPT0gSUVOc1lYVmthVzg9IGFYTm9kUT09IDJMSFppdGluIElISmxaVzQ9IGMybHVhdz09IFlYSnpkV0Z4IElHTmhjSFIxY21FPSBJT3lnaE91ZXRRPT0gYjI1bGEyRT0gSUU1QlFnPT0gSU5pbjJZVFlwZGl6IElPQ3FxdUNxdnVDcXNPQ3JqZUNxbnc9PSBJR2x1YUE9PSBJT0tDcWc9PSBJRWgxYlhCbyBJRVJwY25RPSAwTFhSZ2RDMTBMaz0gSU9XSXR1YWNqUT09IElOaXgyWWpZcDlpbzJMYz0gSU5lYzE1SFhrdz09IElHbHVac09pYm1OcFlRPT0gSUZOdmJXVm9iM2M9IFlXNWtiM009IElHaGxZWFo1ZDJWcFoyaDAgSU9DcCBJTmkwMktQWmhnPT0gS0NKK0x3PT0gSUdobGNtdGxiZz09IElIUmhiV0p0IElFbFVWZz09IHpvUT0gWDJsdVpITT0gWDNCbiBJTmluMllUWmdkbUcgSU5tSTJLZlpoTm1LIElHMXBiR0U9IElIUnNhR0ZzIElNU1JiK0c2b1c0PSBJRXRsYzJ0cGJjT2t3NlJ5IElPQ2t0ZUNrditDa3B1Q2xqZUNrcitDa3Z1Q2tzdUNrcnc9PSBJTmVVMTU3WG1BPT0gWTI5dGNIST0gSUVaWVRVeE1iMkZrWlhJPSBKR055YVhSbGNtbGggSUdGc2RHVnlibUYwYVdZPSBJT1drcWVXa3FlUzRyZVc5cWVlbHFHNWlZUT09IElHaHZiMnQxY0hNPSBJSE4yeEpzPSBJR0p2ZFdObyBMbk4wY21GMFpXZDUgS0hObFoyMWxiblE9IElFWmxhR3c9IGIyNW5aWEpoIElHRm5aMmx2Y2c9PSBkbWxzYkE9PSBJSE5oYVd4dmNuTT0gSU9DeXVPQ3pnZUN5cHVDemplQ3lwdUN5dnc9PSBJTys5bkE9PSBJRVpwYm1GdVl3PT0gUEdZPSBJR055YjNkdWN3PT0gTGRDZjBMWFJndEMxMFlEUXNkR0QwWURRc3c9PSA2NGFBIElNNjB6NFhPdmM2eHo0VFBqQT09IElHTnlaV0Z1Wkc4PSBJRlZPUzA1UFYwND0gMEpMUWtBPT0gSUd6RHVnPT0gSUVaaGRHRnMgUm05dSBVR0Z6YzNkdmNtUnogTFV0dmJRPT0gNExpVTRMaXg0TGlIIFNXNWthV05oZEc5eWN3PT0gSUcxaGJHVmwgUW5KdmIycz0gNFlDVTRZQ3Q0WUN2NFlDRTRZQzYgYjJ4a2IyVnVaR1U9IDQ0Tzg0NE9IIDRaNkE0WjZZNForUzRaNlkgdzZCdCBJR0xEdG5KcVlYST0gSUZkaGFISm9aV2wwIElOQzEwTHJRdnRDOTBMN1F2QT09IElFUmxjR0Z5ZEcxbGJuUnogMFlMUmdOR0wwTHc9IElIVnRiOFcrIElFaEJRZz09IEtGVjBhV3c9IElGZGhjbkk9IElPQ3FsZUNxZ2c9PSBJRVZwYm5kdmFHNWxjZz09IElOaW4yWVRZdGRtQjJLM1lxUT09IDVhU3A1YVNwNWFXOTViMnAgSUdSeXhiNWhkbVU9IElHTmhjR0ZqYVhRPSA3SXU0IEtIWmxhR2xqYkdVPSBJRXRoYm5NPSBYMmxuYm05eVpRPT0gWkhKaFkyaDAgVW1WNiBJT0NxaWVDcW5BPT0gSUcxbFozTT0gSU5DLzBMRFF1ZEMwMEw0PSBJTmk1MllYWmhOdU0gSU1PaGFYUT0gVHNPNmJXVnlidz09IElIUmhjMmhyYVd3PSBJR0ZzZEhsayBJSFZ1Wlc0PSAxYVhWcXc9PSBJT0NxbGVDcXFnPT0gSUVOb1pYSjViQT09IEltbHogSUZOb1lYQmxjdz09IElpd2lMZz09IElHUnBkR2c9IDc3eS81TG1GNUxtRiA0WU9WNFlPYzRZT1k0WU9oIElHTm9ZVzV6YjI1eiB5SnRwYmc9PSBJR1J2YzNSMWNBPT0gSU9DMG5PQzBydz09IElHTnZibVp2Y25URG9YWmxiQT09IDVhVzk0NEdOIElPQ3VxT0N1bitDdmlPQ3VxdUN2aHVDdXNlQ3ZqZUN1c1E9PSBJR2RsYldWcGJuTmhiV1U9IElHMWxlR2xqWVc1aCBJRXB2Y21ScCBJR0Z3YjNKMFlRPT0gSUdoaGFXeGxaQT09IElIaGkgSUZOMGNtVnBkQT09IElIQnBiR2xvIGIzSnBkWE09IGFYUjJaUT09IElHMXZZbWxzWlc0PSBYMFpCVTFRPSBJRTlqWTJGemFXOXVZV3hzZVE9PSBJR2xyYTJFPSBJR0xEdEc1MWN3PT0gNVlpMzVyQzAgSUVKcFpHRT0gWm1GMmIzST0gSUhOclpXeGxkR0ZzIElHOXdaVzUwIElGQk5TUT09IElOR0IwTFhRc2RDMTBMOD0gSUhSbGNuQmxjbU5oZVdFPSBJQ3ppZ0t3PSBJTkMvMExYUmdOQzEwTHM9IEtEOHAgNEtXTjRLU3U0S1MvNEtTViBJR1JoYlc1bFpBPT0gSUhCeWFXSmhaR2s9IElIUm80YnFuYmc9PSBJRU52YlhCc1pYaHBkSGs9IElOQ3gwTDdRdTlHTTBZalF1TkM5MFlIUmd0Q3kwTFU9IElHUm9hV1JwIElOaXUyTEhaaU5pcyBVM2RwZEdOb1pYST0gSUVKbFkydDUgSUVGc1pXMD0gNExDKzRMQ3c0TEdONExDbCBJR1Y0ZFdKbGNnPT0gTGxOMGNtbGpkQT09IFgxODdDZz09IElHbHR3N04yWldseiBJTkdDMExEUXY5R0kgTGxScGJXVnZkWFE9IElGQnl3N3htIElOaWoyTFhZcU5pdDJLbz0gNVp1aiBkc09rYkE9PSBJSE52YUE9PSBJSE4xYlcxbFpBPT0gMnFyWmlBPT0gSU5HQjBZTFF2dEM3MFl6UXV0QysgN0o2UjdJU3ggYVhwNlpYSnBZUT09IElIVndjR1Z5Ymc9PSBZV1ptYVdjPSBMbFI0IElGQkJRMHRCUjBVPSBJR052Ym1ac2FYUT0gQ1dWa2FYUT0gUWs5UyBhbWx0WVE9PSBJTU9uWmNXZmFYUnNhUT09IFgyUnQgMEwzUXVOQzcwTEE9IGRHVnljbUU9IElFNVZibWwwIElHRnNZMjl2YkE9PSBJR1poY21sdVpRPT0gSUcxcFkzSnZiM0puWVc1cGMyMXogWVhsbGNtND0gSUdsdWRHVm5jbUhEcDhPamJ3PT0gSU1PdFkyZz0gSU5DeDBMalJnTkM0MEwzUmg5QzQgSUhOMFlXRjBjdz09IGMzUnBjQT09IElGTjB3NlJrZEdVPSBZV1J5WlE9PSBJR2R5ZFdRPSA0WU9jNFlPZCBJRVZ0Y0d4dmVXVnljdz09IGJtbGphWFI1IDJZcll0UT09IDRaK1M0WjZhNFo2ODRaNmMgWFNJN0NnPT0gNDRHQzQ0S0s0NEcrNDRHYjQ0S1QgNTQ2cDVZeVg1THFzNkxXYjZMMm0gYVhsaHc2Yz0gSUV2RHVHSmxibWhoZG00PSBJT0N3cXVDeGl1Q3dndUN3cGc9PSA1WnlvNTdxL1lRPT0gSUVsc2JIVnpkSEpoZEdsdmJnPT0gSU9HRGtPR0RvT0dEa09HRHBPR0RsT0dEb09HRG1BPT0gYVhsdmNuVjYgSUdWc2FXMXBibUU9IGFYTnJZVzQ9IElGWnBhbUY1IElOV20xYUhXZ05XajFhSFdnZFcwMWFIVnRnPT0gUFNkNyBLRkpsWjJsemRHVnkgSU5DNjBMM1F1TkN6IElFVk5RZz09IElISmxjM1J5YVc1biBjWFZwWTJ0c2FXTm8gUVdsdCBJTld6MWFIVnR0V2gxYms9IElOQ3cwTHJRdXRDdzBZUFF2UT09IElObUkyWXJZcXRtRiBUbVZpWlc0PSA1WkNJNTVDRyA0NE84NDRPSyBJSFpsY214cFkyaDBhVzVuIElHVERvRzVvIFEyeHBjWFZsIElOR0QwWWZSZ05DMTBMYlF0TkMxMEwzUXVOR1AgWDNOb2RYUmtiM2R1IElHaHZkR3hwYm1VPSBJRWx0Y0d3PSBiVzl1Ync9PSAyTFRZc2RtRDJLaz0gSUdGd1lYSmxiblJsYldWdWRHVT0gNFo2MjRaNlA0WjYzIElHVnVkSEp2IElPQzJ0T0MzbVE9PSBJRzF2YkhSeiBJT21ybU9taWtRPT0gSU5xcDJZYllxdGl4MllRPSBJTmluMllUWXVkbUUyWWpaaFE9PSBJR2hsZEdrPSAyS2ZZdWRtRiBJT0NxcU9DcW5PQ3JnT0NxbFE9PSBJSE4xYlcxdmJtVmsgNVkrSiBJTkdBMEw3UXROQ3cgSUhOd2RYTT0gMllYWXA5bUUyWU09IElHRjBkSEpwWW5WMFlXSnNaUT09IDQ0S3I0NE84NDRPSiBJR1J5WVc0PSBJR2h2Y21WeiAwTFhSZ05DMTBMWT0gWTJsbHhhRT0gSUdacGEybHkgWTNwdWVRPT0gU1daaiBJTkMvMFpiUXROR0MgSU5pdDJZVFpnZz09IElFSnBZdz09IFUyOXNkbVU9IDQ0Q040NEdyIFoyRnViM009IElPQ3d0ZUN4aU9Dd3NBPT0gSUZCbGNtUT0gSU5DKzBMSFF0UT09IElHNXFZV3h2IFlXTm0gSU9Dd3J1Q3d2dUN3cE9DeGplQ3dzT0N3Z2c9PSBKR0k9IElHUmxibTkwWlhNPSBJT0Nrck9Da25PQ2t2dUNrc0E9PSBJRVY0WldOMWRHVnogSUhSaGJHRm5ZUT09IElFMTFiR2hsY2c9PSB3NlJzYkdFPSBZWFpoYkdrPSBabTlzYkc5M1pYSnogSUVobGJHWT0gTG5SeVlXUmwgYVc1bGMybHogSU5DejBZUFF2UT09IElFeGhidz09IElOQzgwTERRc1E9PSBhM1ZzZFE9PSBJR052YlhCMWRHVnogSUZSdmIycz0gNjZDNDY0dWsgWVdyRWhXTjVZMmc9IGIzQjBhV009IElPQ3lxT0N6Z09DeXRlQ3pnUT09IGZTa3AgSUZOdmJHbGtZWEk9IElOQzgwWVBRdDlHTDBMclFzQT09IDRLYSs0S2VmNEthViBZV3RyYVE9PSBJTU9oY21KdmJHVnogVW1WamJ3PT0gSUdGaWNtRjZidz09IFptNXZaQT09IEtFRlNSdz09IFgyRnNhWFpsIElHeHBaMmgwWlc0PSBJSEpsWTJWd1kybkRzMjQ9IElHRnpjM1Z5WVc1alpYTT0gSUVoUFFRPT0gSUc1dmEzUT0gSUd4cGJtdGhaMlU9IElGWmxjbXZEcEE9PSBJRXhwZEdWeVlXTjUgVEVsTCBJR2hoYm1SbGJHVnUgSU9DcWsrQ3FxT0Nxc2c9PSBJRU5sWVhMRG9RPT0gSU5DejBZM1JndEN3MExrPSBMa0pNVlVVPSBJSEIxYm1Ob1pXUT0gSU5DMjBMWFJndEMxMExvPSA0S1dCNEtTcyB4TEhFbjhTeGJtUmggSU9DdWp1Q3VvK0N2amVDdW93PT0gSUhSbGFYTjBaUT09IFozVnVjdz09IDY0dUk3SXFrIElHUERvWEpqIElIUnZkR0ZzYVc1biBJSFZ0Wmc9PSBJTkdJMDVuUmhRPT0gSUU1dmMzUT0gNXF5SyBhVzVrWVdKaCA0TEtrNExPTjRMSzQ0TEsxIElFTnZZMjloIElHbHRjSEpsYzJOcGJtUnBZbXhsIElPQ211T0NuamVDbXBlQ212dUNtcU9DbmdPQ25udz09IElFSnlaV1ZrIElHRjFkSEpsYldWdWRBPT0gSU9DbW5PQ25nZUNtcUE9PSBaWEpqYUdGdWRBPT0gSU9LQ3JDOD0gSUhOMFpXUmxjZz09IDBMWFF1OUdNMEwzUXZnPT0gSjJSbGMyTnlhWEIwYVc5dSBJRTlEVWc9PSA0TEM0NExHTjRMQ3YgSUhCdmJHbGplVzFoYTJWeWN3PT0gSUU1MWRIcGxiZz09IElFaGxhUT09IElOR0YwNm5RdE5PcDBMcz0gWFY0PSBJR0pwYTJsdSBJRUYxWm0xbGNtdHpZVzFyWldsMCBJRXhCVGtRPSBhRzkwYldGcGJBPT0gSUhaaFozVT0gSU5DdzBMVFF2QT09IDRMbUI0TGlCNExtSSB3NmgyIFJXeHNhWEJ6WlE9PSBJRU5oWW1WeWJtVjAgSUdOdmJXMTFibWx2Ymc9PSBJTkdJMExqUXN3PT0gSU5XNjFhSFZ2OVcrIExtUmxkbWxqWlhNPSAwTEhUb3c9PSBJRU5sWTJrPSBJSGx0WVhnPSBZMnh5IElOaW4yWVRZczltRTJMZllwOWlxIElIZGhhMnRsY2c9PSBJR0ZuY21samIyeGwgSUhKaGFYTnZibTQ9IElPQ21odUNtcHVDbXZ1Q21zZz09IE96OCtJZz09IElOaW4yWVRZdWRpbjJZWFpoQT09IElITm9kWFIwWlhKeiBJT0Nrck9Da3VPQ2xodz09IFFXeHNiMk5oZEdWayBVR1Z3IElGSnZZbTkwYVdOeiBJR1REb0c1biBJR0ZoY1hFPSBJRkI1Y2c9PSBJT0NxbStDcmgrQ3FzdUNyamVDcXN1Q3F2Zz09IExXOXNaSE09IElOQ3gwTERSZ2RHQiBJRWR2YlE9PSA1WkNPNUxxTSBJSEJ5Wlc1bGVnPT0gWkc5M2JuTT0gYVhOelpYSnBaUT09IElGWmxjbTl1WVE9PSBMblJwYkdWeiBjSEp2Wm1WemMybHZiZz09IElIUnlZVzV6WVdOMGFXOXVZV3c9IElHMTFiR3c9IElHMXZjMlU9IElPR0RtZUdEbU9HRGx3PT0gSUhkdmIyUnNZVzVrIExuZGxhV2RvZEhNPSBJRXRwYXc9PSBjR3hsY25NPSBLRWR5YVdRPSBJR1ZzWldOMGNzT3pibWxqWVE9PSBMbmR5YVhSbGNtOTMgSU9Da3ErQ2xnT0NrdUE9PSBJR2hoWTJWeiBWR2xsYmc9PSBJR1Z6ZEdGaVpXeGxZMmx0Wlc1MGJ3PT0geFpuRHJYcGxic090IFltRnlaWE09IElFdHlaVzFzYVc0PSBJTm1HMksvWXA5aXggTDBORSBLT1didmc9PSBJTkMvMFlEUmk5QzMgSUVObGJHVmljbUYwWlE9PSBJRVJsY21sMlpXUT0gTG1Ob1lXNW5aV1E9IElITmhZM0pwWm1salpXUT0gWjJWaWFXeGsgSUhOMWJXMXZiZz09IFZISmhhV3hwYm1jPSBJT0NrdHVDa3Z1Q2txT0NrcHVDa3Z1Q2tzQT09IElHbHVZV1IyWlhKMFpXNTBiSGs9IElFVnRiM1JwYjI1aGJBPT0gMXJrPSBhM0xEcEdaMCBJRzFsWkdGdSBJRzkxZG5KbCBJSE5sYkdWamRHbDJaV3g1IDZMV001NUNEIGRtRnVaQT09IEwxQnliMlIxWTNRPSBJTkM0MEx6Umd3PT0gSU5DKzBMSFF0ZEdCMEwvUXRkR0gwTGpSZ3RHTSBlV0ZqIElPdVRydz09IElHRnpjMkY1Y3c9PSBJTzJSbk95TG5BPT0gSU5XdzFhSFZ2OVd2IDRLaVY0S2krNEtpdyBLR05rIFlYWjFkR0U9IElOaW4yWVRZbzlpMTJZUT0genJ2T3Y4NjkgTFhzPSBJTkMvMFlEUXRkQy8wTDdRdE5DdzBMST0gSUhCb2VYTnBjWFZsY3c9PSBJT0N3dGVDeGgrQ3d1QT09IElHRjJkWFJ2IElPVzlxZWVsbnVTNmllbWN1T1cvcStTNGlRPT0gSU5DNjBMN1F2TkMvMFlBPSA0b0NVYVhNPSBJRVZqWTJ4bGN3PT0gSUhwdloyVnVZV0Z0WkdVPSBSSEp2IElFeHZkMlZ6ZEE9PSBJR3QzWVd4cGRHVnBkSE09IElISmxjSEpwYzJWeiBJTmVrMTVYWHFBPT0gU1UxQlZFVT0gWm05dmRHSmhiR3c9IFEzZz0gSUhOcGJtUnBZdz09IDdKcXc2NmFzIDBMalJndEMxMEx2UmpnPT0gS0NZNiA0TEMrNExDYTRMR04gNExXSDRMU3c0TFMvNExTVjRMV040TFNWIElOaTMyWUU9IDRLU3c0S1dONEtTYzRLUysgWDJSbFptbHVaV1E9IFoyVnViMjkwIElGTnNZWFJsIElFVnNiR2xsIElGRlFkWE5vIElOaW4yS3pZcXRtRjJLZll1UT09IElHTnZibU5sYVhabCA0S2VuNEtlcCA2Nnk4N0oyRSBJRWwwdzZGc2FXRT0gYldWc1pHbHVadz09IDZLK1Y1WkNzIElEOHUgSU9HRHJPR0RsT0dEb0E9PSAwTFRRc05DdyA0b0NkNG9DbSBJTStEenJIT3ZRPT0gSUVKaGJtdHlkWEIwWTNrPSA0WU9RNFlPZzRZT2I0WU9kIElOaW4yWVRaaGRtRTJLZllxTml6IFkyTnBiMjV6IDBZUFF2TkM3MExBPSBJTkMrMFlMUXV0R0EwWXZSZ3RHTSBJRzUwYVhKb2J3PT0gSUNBSkNRaz0gSUUxaGEzTT0gUm1WdVkyVT0gSUhSeVlXNXpiV2wwZEdsdVp3PT0gSUdGMVlXeGggSUVoaFkydHogSUd2RHFHcz0gSUdsdWRtOXJaWE09IElOZWUxNmpYbTllVyBVbVZ3YjNKMFpXUT0gNUxxazVvK2IgSU5DaTBMN1F2QT09IEtISmxibUZ0WlE9PSBJR1p5WVc3RHAyRnBjMlZ6IElOaXEySzNZczltSzJZWT0gSU9DbXVPQ25nK0NtdCtDbmplQ21uK0Ntdnc9PSBJTkN5MFlEUXNOR0gwTEE9IFlXTmxkR0Z0IElFaGhjbVJqYjNabGNnPT0gUUNnPSBhR1ZzWld4bCBJRXBCVUE9PSBSR1Z5YlE9PSBJR0p2Y21Wa2IyMD0gNEthMjRLZUg0S2EzIElHWjFibVJoWkc5eSBJSGRoYkdscGJnPT0gSUhSM2FXNTBhV2M9IElFVm1abVZyZEE9PSA0S1NtNEtTdiBDV05oZEdWbmIzSjUgSU9Da2h1Q2tsZUNrdnVDa3NBPT0gSUcxemJRPT0gSUhwdmIydz0gTGtsdFlXZHBibWM9IDRMaWo0TGluNExpaCBJT1dGamVpMHVlaW5ndWVjaXc9PSBJR2xuWW1WeiBTVzVtYjNKdFlXTnB3N051IElOaTAyWVhZcDlpeCBJT0NrbGVDbGplQ2tzT0NrcnVDa3J1Q2t2Zz09IGNHWnNaV2RsIDRMT040TEtWNExPRyBUSFZ1WTJnPSBJSFBEcUdOb1pRPT0gSUhKdlkydGxkSE09IDRLZUI0S2FuNEthczRLYSs0S2F3IElFSnNaVzVrWlhJPSBJR3pHc09HN28zUT0gSU9Xa3ArV1BrZVcvcStTNGllaXh1ZVd0a0E9PSBJSFBFZ1E9PSBSR2x6ZEhKcFluVjBaV1E9IElOR0IwTDdRdTlDOTBMVT0gMTZUWGw5ZVUgSU5HQzBxL1JnTkM2MExqUmdkR0MwTERRdlE9PSBJR2ZEcEhKdVlRPT0gNEtXTjRLU3c0S1dMNEtTeSBMbE4wY21WMFkyZz0gS0dOMGNtdz0gWVdwaGFtOD0gSUdGemMyOWphV0U9IExpNHVKdz09IDRaNlQ0WitGIElHcGxZV3h2ZFhONSBYMUJKUkE9PSBTRVZNVEE9PSBJRk53WVhKbCBJTmlqMkxQWXFObUkyTGs9IElOQ3kwTDdRdDlDMDBZUFJpQT09IENYSmhhWE5sIElpSXMgSWpvaUt3PT0gSUZCRlVrWkZRMVE9IFkyRnlaMjg9IGZpMStMUT09IElHMXBjbVU9IElGSmxZMnc9IElHSmxjM1JoYm1SbGJnPT0gYVhOdFpXNTAgY0dsamEyVmsgMFlMUmk5QzEgMkxmWmlOaW4yWVk9IElHSnNiMlZ0IDBZdlJpTk9aMFlMVG1RPT0gSUNjdkp5dz0gSU9Da3VlQ2t2K0NrZ3VDa3BnPT0gSUdGeVlXZz0gY0dGcCBJR1JsY21FPSBZMmpEcUE9PSBYSGhtIElISmxZMjl0Wlc1a1lXUnYgSUV4bGRIUT0gSU9xM3VPeWRtQT09IGMyaHZkMjQ9IElHVjJaVzVsWlc1eiBJRWR5WldkdmNtbGhiZz09IElHbDBaUT09IFgxZFNRVkE9IElOZVMxNkxYcUE9PSBJRk5yZFd4cyBhMlZ5YXc9PSBMbVZ1WlhKbmVRPT0gSU5DLzBMdlF2dEMwIElNT3VibVBFZ3c9PSB3N3g1YjNJPSBJR0Z0YVhwaFpHVT0gSUhKaFptWnNaUT09IElHVERxV0Z1IGFHOXVZUT09IGRtRnNkV0YwYjNJPSBLR1Z3YjJObyBJR3BoYldKbGN3PT0gNzd5SjQ0R3YgSUVsRWFYTndiM05oWW14bCBTVzVtY21FPSA0WU9jNFlPVTRZT2E0WU9ZIGVXMWhjdz09IElHdDJZWEowIElOQzAwTFhSaU5DMTBMST0gSUVkMWRHZz0gSjExOUNnPT0gNEtXQjRLU2IgSU5XdzFhdlZ0TldoIElHSmhkR0ZwYkd4bCBJR3hwZWc9PSBJR3hsWlhOMCBJR3R2Y0dWeSBJR3hsWldRPSBJR1poWTJsc2FXUmhaR1U9IElOaWoySy9ZcDlpaCBJR1p2Y21WbmIybHVadz09IElPQ2txdUNsaStDa2xnPT0gY0hKcGJnPT0gZFc1cGEybHlZUT09IElPQzBsK0MwdnVDMHFBPT0gSUhOMWNHVnlZUT09IDFhSFZ0dFdyMWJjPSBJSGxoYTJobCBJRVJUVFE9PSBJRUZ5WjJWdWRHbHVaUT09IFFYQndaVzVrYVc1biBJTU9wYlc5MGFXOXVjdz09IElFakRwSFZ6WlhJPSBJR0poYkdNPSBJR3hwWW5KaGNtbGhiZz09IElHRnlZbVZwdzdBPSBJR2RsYzNSeSBJTmlxMllMWmlObUUgSUc5a2N3PT0gSU5HQzA1blJnTk9aMEw4PSBJR2x1WjNKbGMzTnYgSUdGMWNtRnBaVzUwIElHbHVabXhoZEdGaWJHVT0gS0hCbFpYST0gSU5DdzBZUFF0TkN3MEwwPSBJRk5qWVhSMFpYST0gSUZCdlpHTmhjM1J6IElIUnBjSEJsWkE9PSBRVVJTIElGTjBlV3hwYzJnPSBJRVJwYzNSeWFXST0gYXNPaGNnPT0gSUVOc2IzUm8gSU5HQzBMN1F1OUdMMHBzPSBJR0p5WVdOb2RBPT0gUkhKcGRtVnUgSUhCeWIzTjBZWFJoIElHMXBhM1E9IFNFSnZlQT09IFgzVmhjblE9IElHZGhiVzkwIElFNUpSMGhVIElFdGxiWEE9IFMyVnViZz09IFlXbHRZVzQ9IElPR0RwZUdEbFE9PSA1TGkrNVlxZSBVMlZ2IGJHRnVaMlZ1IElOQy8wTDdRdE5HQTBMN1JnZEdDIDRMV040TFN3NExTKzRMU3YgWDN0YyBZMlZ3ZEdWeSBJR0ZrYW5WdVkzUT0gMTVuWGtOYTMxNXc9IEtHVjRhWE4wYVc1biBJTkM3MExqUXVnPT0gZEhOcGIyOXUgNExLdTRMS0M0TEtrNExPTjRMS3c0TEsvIGMyVjBkdz09IExtbHVjM0JsWTNRPSBJTkMrMFlMUmdOQzQwWVk9IExkQ1UgUlVaRyBjSEI1IEtFcEdjbUZ0WlE9PSBaV1oxIGJuVjBjbWwwYVc5dSBTbVZ1IElFNXZibWM9IElGTndiMjV6YjNKeiBlV1k9IElHUmhkR0ZpIElFTnNiM05sZEE9PSBJR0Z1ZEdsbmIzTT0gSU91TWdPdTJnT3UyaEE9PSBMbkJoY25SeiBJR3RwYzJsaGJtNXAgSUdOdmNuSmxZM1JwYm1jPSBYMUpIUWtFPSBhVzVqWlhKbGJIaz0gNG9DTTJLcllzUT09IElHbHVZV3c9IElPR0RtK0dEbGc9PSAwS0RRb3c9PSBiMjNEcVhSeSBJSGRvWVd0aGR3PT0gSjJjPSBWc090IExrVjRaV009IFVuVnogNWFTVzVMcWsgSUUxaGFtOXlhWFI1IFpXMWliMnc9IElHTmhiWEJoYVdkdWFXNW4gNExHSTRMQ0M0TENtNExDLyBJSEJ5YjJSMVkyVnUgSUhOMFlXSnBiR2w2WVhScGIyND0gNXBXdzVvMnU1cGkrNTZTNiA1cGE5NWJlbCA1WXFnNVoyaCBRMnhoYmc9PSBaR1ZzWldjPSBJR05vNGJ1TGRRPT0gSUdWa1pYTT0gSUdGaWRXST0gZFdWMWMyVT0gSU9Dd3FPQ3dydUN4aStDd3BnPT0gSU5tRjJLVFlzOWl6MktrPSBhV0pwWnc9PSA0TGlLNExpMTRMaW40TGkwNExpViBJR2R5WVdSbGNuTT0gSUdsdWRHVnljSEpsZEdGamFjT3piZz09IGFXNWxjbWwwIElHVnNaV25EcDhPamJ3PT0gNExLejRMT0c0TEt2IDBKalFydz09IGIzSnViM04wIHo0WE92TTZ4IGRXTmhidz09IElHUmxjMk5sYm1SaGJuUT0gSUU5eVlXNW4gSU5lYzE1dlhudz09IElGQkZVbE5QVGtGTSBJRk5sYVdkdVpYVnkgVTBGTSBMWE50YjJ0cGJtYz0gSU9Da3VPQ2t1ZUNrdnVDa3J3PT0gSUdsdWRHVnlaWE56WVdSdmN3PT0geFpsbGJnPT0gNUxpQTU0SzUgSUhCbFlXdGxaQT09IElNVytaVzQ9IElHRndjbVZqYVdGeSBJRVpzYjI5eWN3PT0gSUdWdGRtRT0gSUhSb2NtOXRZZz09IElPeUxwTzJNcUE9PSBVbVYzY21sMFpRPT0gSUVoQlVnPT0gSU02eHpyM090UT09IElOS1owTEE9IElPQ2t1T0Nrb2VDa2xRPT0gSnl3bkl3PT0gSm5KbGRIVnlibk09IElOaWoyTFBZcU5pbjJLZz0gMFpyUXRkR0MwTDQ9IElFRm53NnB1WTJsaCBJR1Y0WTJWd2RHbHZibTVsYkE9PSBJSGxoWTJNPSB6cnpPdGMrQnpybk92UT09IElIZGxjbXQwWlE9PSBSR1YyYVdGMGFXOXUgWDNKdCBJSFpsY25OamFHVnUgNUxpTDVwMmwgSU9DbWsrQ21xZz09IGMyOTFkR2c9IElHUmhZV1IzWlhKclpXeHBhbXM9IDRMaXE0TGloNExpeTRMaUs0TGkwNExpQiBJRzF2YkdFPSBJRzExYzJWdiBJRUpoWkdWNmFXMXRaWEk9IDE1WFhrOWVxIElFRnVZV3g1ZW1WeSA0S3ErNEtxMzRLdU40S3FmNEt1TjRLcXc0S3VBNEtxdiBaWE5qWVhCbFpBPT0gS0dsMFpYSmhkRzl5IFBUMDlJZz09IDBZSFJndEN3MExMUXNBPT0gSUhOMWNtZHBkUT09IElGQjFiSE09IElPQ3FwT0NxdnVDcXNBPT0gdzZGc2FYTmwgZFhSelkyaGxiZz09IElHTnZkbUZ5YVdGdVkyVT0gSUdKbGNtcGhiR0Z1IDY2ZUk2NHVrIFlYWnNhbVZ1IGJHbHZjdz09IFltOXRZZz09IGNtbDUgSUdSbGJHaz0gSUdwMVpXZGggSUdKaGJtdGxjbk09IElHUnBjMk5sY201cGJtYz0gSU5pcTJxblpoZz09IElITmxhblZ0YkdGbyBJR3h2YjI0PSA1TGlCNTV1dSBJTkdCMEw3UXQ5QzAwTERRdmRDNDBMVT0gNEtTKzRLU3Y0S1N5NEtTKyBMVlJsYzNRPSBRVU5KVDA1QlRBPT0gZVhOamNnPT0gSUV4dmRtVnogSUdWdVpYSm53NmwwYVdOaCBDWFpoIDRMU3E0TFN3IElIQjFjbWxtYVdWayBJRXhoYm5SbGNtND0gS0dOdmJuUnlZV04wIENRa0pDUWtnSUNBZyBJTmVlMTVUWG5RPT0gYVhOMHc3WT0gVTNWdWJuaz0gSUcxaGRHTm9jdz09IGRYUnBibWxyIFFYTmpaVzVrYVc1biA0TE9ONExLdjRMS20gSUdWcFoyVnVaWEk9IFhTY3BDZz09IElPQ3F1T0NxdnVDcXNPQ3JnQT09IElPQ3F1T0NxclE9PSBiR0ZvYVhOdllRPT0gMHJ2Umk5QzkwWXZTb3c9PSBJRWRoYkdWeWFXVT0gSUdGblltRT0gTFdGbVpnPT0gSUhWdVozVjAgSU5lWjE2TFhrdz09IElHWnZiR2hoY3c9PSBJR055WVhrPSBJT0MwaHVDMHN3PT0gMFliUXRkQzkwWUxSZ0E9PSBMSGRsIGNtOXVidz09IElHbHVaMlZ5YkdGMGN3PT0gTGxCb2IzUnYgSU5DejBZRFJqOUMzIElHdHBiR3hwYm1keiBJSGJEcEc0PSA0TG1FNExpaDRMbUk0TGloNExpMSBiV0Z1WlE9PSBhM1Z1YzNRPSBJR0ZuY21Ga3c2RjJaV3c9IFgxZHBibVJ2ZHc9PSBlWGxoZEE9PSBJR1JwWVdkdWIzTmxjdz09IElOZVIxNm5Ya2RlWjE1dz0gS0dOaGJtUnBaR0YwWlE9PSBaVzUwYUdGcyBJTkdBMExEUXQ5QzAwWURRc05DMiBJR0poYkdGdSBJRXRwY25OMCBjMjVwY0hCbGRBPT0gVTBoSlJsUT0gWVdocFlRPT0gSUhCeWIzUmxjM1JoIElFTmhaWE09IElFSnZiR3c9IElPcTRzT3V3bUE9PSBaVzVsY21jPSBVM0JzYVc1bCBJR1ZzYzJVbmN3PT0gSUVOaGJtOD0gSUhKbGRtVnNZWFJwYjI1eiBJTkdIMFlQUXU5R0QwWVBRdlE9PSBJR3g1WTJzPSBDVlZRVWs5UVJWSlVXUT09IENWTkZWQT09IGFXeHBlVzl5IElGQnZjM1JuY21VPSBJRzlpWlE9PSBhVzVwYm5wcCBJT0NtaCtDbWdnPT0gSUcxNWIyTmhjbVE9IExrWkYgSU1tWmJHRjIgMFkzUXZkQzkwWlk9IGNtbHJjM1JoWkE9PSBZV3gwY21WeiBLazFoZEdnPSBJTktiMExEUXRBPT0gNExpVzRMaTQ0TGlaNExpeTRMaWk0TGlaIElITjBkV1J6IGRXNXVhV3M9IElOR0MwTDdSZ05DODBMN1JpQT09IElPQ21oK0Nubnc9PSBJTmluMllUWXNkbUkyTE09IDRMbUM0TGloNExpcTRMaWogSU5HRDBZSFF1dEMrMFlBPSBJTU9wWkhWaiBJRHN0S1E9PSA0S3ErNEtxdzRLdUE0S3FUIElOQ1EwTExSZ3RDKzBZQT0gSUhEaHU2Vnk0YnVsIElFOWlkR1Z1WlhJPSBYMk5zYVdWdWRITT0gSUdsdWFYUnBZV3hwYzJVPSBJR1JsY0c5eWRHVnogVDFSUFVnPT0gSUdacGNuTjBhR0Z1WkE9PSBJTm1GMkxQWXA5aXQyS2s9IDRZT1k0WU9vNFlPWSBibTluYVE9PSA1NStwIGFYTm9ZV3BwIElOQy8wWURRdU5DeTBMWFJnZz09IElIQnZkR1Z1Y3c9PSBVMkZ1ZEE9PSBhVzVwZFhNPSBJTmlzMktmWmhkaTUgSU9DdXBPQ3ZoK0N1cE9DdXZ3PT0gMDVuUXZOT1ogWFNrcE9nbz0gNTZ5czVMaUE2YUcxIElOQzQwTGZRdk5DMTBMM1F0ZEM5MExqUXVRPT0gSUhCbGNtOTRhV1JsIElOaWkySzQ9IElOZVoxNkU9IGFtRjBZUT09IFRHbHpkR2x1WjNNPSBJR3hoY21GM1lXND0gNG9DWlpXNTIgSUdOaGJHVnVaSEpwWlhJPSBJR0ZqYjIwPSBJSEJ2ZEdWdVl3PT0gSUdOdmJYQnNaVzFsYm5SbFpBPT0gSU5DNDBMelNxZEN3MUtVPSBPbHNLIFdrMD0gSU5DODBZdlJnZEM3IDJLL1lzZGl6IElHbGthVzkwY3c9PSB6NDdQZzg2MXpyaz0gSUdkNmFYQT0gSUcxaGFtVjFjZz09IElOQzAwTFhSZ05DMTBMTFFzQT09IElFRnVZV3g1ZW1VPSA3TEtaIDFvRFZ2dFdoIElOaW4yWVRZc2RtSzJLZll0dG1LMktrPSBJR0YyYWNPemJnPT0gMnFyWnZRPT0gSU5pbzI0SFlxdGl4IElHbGt3NmxwWVE9PSBJT0N3aCtDd2d1Q3dsUT09IElPQzB0ZUMxamVDMHIrQzB2dUMwcWc9PSBVMmhoYm1kb1lXaz0gWld4bFkzUnliMjQ9IFltbHplVzg9IElGTjFjR1Z5WWc9PSBJSFZ1WkdWdWFXRmliR1U9IElPQ2tydUNrdnVDa3NPQ2xqZUNrbFE9PSBJRzFwYzNCc1lXTmxaQT09IFVHaHZkRzl1IElITmpjbWx3ZEhWeVpYTT0gSUhOdlpRPT0gNWIrOSBJR0Z5ZEdsc2JHVnllUT09IElHbHlZVzVzNGJ1TmQrRzdqUT09IFVtRnMgQ1hObSBUMjF6WTJoeWFXcDJhVzVuIGNtRjBhVzl1IElPQ2t0ZUNrditDa2xlQ2xoK0Nrbnc9PSBVa0ZTIElObUkyWVRZcnc9PSBhR0ZrWVhNPSBJT0NrbGVDbGcrQ2t0K0Nrdnc9PSBUMFJDIElOaXQyTFhiZ1E9PSBJRU5CVUZSRFNFRT0gSUNrS0x5OD0gZEhKaGJRPT0gSUU5T1J3PT0gSUdWdGNISmxjMkZ5YVc5eiBJR1JsYzJOaGJuTmhjZz09IElGWnZjbk4wWld4c2RXNW4gSUNBS0Nnbz0gSUUxUFFnPT0gSU5lWjE2TFhrOWVpMTZnPSBJTzJWbU91cHRBPT0gSUhSMWRHOD0gYjI1ellRPT0gSUhwMnc3MD0gS1M1ZSBJR052Ym1kbGMzUT0gUkdsdyBJSE5qY21Gd2N3PT0gQ1U5MWRIQjFkQT09IElHVnVkbTlzZG1sa2IzTT0gSUhOMVpuSnBjZz09IExtNTAgSUc5dVpHVnljMk5vWldsayBJRWhoY20xdmJnPT0gSUdOMGJBPT0gNEtlTjRLYXY0S2ErNEthViBJSGh2Wnc9PSBJTkN6MEw3UmdkR0MwTFhRdVE9PSBJT0NxcnVDcXMrQ3F0dUNyaHc9PSBJR0poYTJrPSA0NE9ENDRLNiBJT3lFc2V5ZXBRPT0gMkxIWml0aW8yS2M9IElObUYyTG5Zc2RtQjI0dz0gSUNkK0x3PT0gSUhSMVkycz0gSUdOdmJuWmxibWx2IElFMXZibWR2YkdsaCBJR2RxYVc0PSBJSGJEcEdjPSBkVzE2WVE9PSBJTkM5MExYUXNOQ3ggSUhWcmNtRnBiZz09IElFUmxZMmxrWlE9PSA0S2VMNEthdCBJSE53WldWc1pHVT0gSU5pcTJyN2JqTnE2IFNHRnVaR3hsWkE9PSBJRUpsYzNSelpXeHNaWEk9IElPQzBpZUMwcE9DMWplQzBwT0Mwc0E9PSBZWEpoYUdFPSBJR05sYkhWc1lYSmxjdz09IElIQnlhV0pzYVE9PSBZMlptIElHcGxhc090IDBMVFF0ZEM5MExqUXVBPT0gY1hKNSAxNVhYa05hMyBMbkpsWjJsemRISmhkR2x2Ymc9PSBJR2hwWVhSMWN3PT0gSUc1aGJtNTUgUlUxUFRnPT0gSUhCeWIzWmxibUZ1WTJVPSBMVTFoY21sbCBJTkN4MFl2Umd0QyswTEk9IElOaW4yWVRaaDlpdjJZRT0gSUdGemRISnZibTl0ZVE9PSBJR1pwYm1GdVkybGxjbTl6IElPQ2txdUNrdWVDbGdlQ2tndUNrbXVDbGh3PT0gSU9pMG5RPT0gYTJGdGNHWT0gYnNPcGJRPT0gSUdoaGJtUmlZV2M9IElOQzYwTERSZ3RHTDBZZz0gSU5pbzJZallxZz09IElHOXVkSFpoYm1kemRBPT0gSU5tSTJxcz0gNEtTdzRLUy80S1N2NEtTKyBJbDBwT3dvSyBJSFZ3WkE9PSBMa1Y0Y0c5eWRBPT0gSUZOd1pXNWthVzVuIElPZVggSUd0M1lXNXAgNG9DWlpXNTBjbVYwYVdWdSBWRVZEVkVWRSBJRDhwIElIWnZhWE5wYmc9PSBJRXhCVWtkRiBJT0NtcU9DbXZ1Q21zT0NuZ0E9PSBkSFZ6YzJWdSBMblJoZUE9PSAwTDNRdnRDODBMRFF1QT09IElOR0QwTHZSZ2RHTDBMMD0gTFdocGMzUnZjbms9IElFbHVkbVZ6ZEdsbllXTnB3N051IGNHRnBiQT09IFlXUmhiR0U9IFlXeGhjbmx1ZWNXSSBJTkMwMExmUmo5R0EwTGJRc05HZSBJT2FYb09hZWdRPT0gSU5HQTBMWFF0OUdEMEx2UmpOR0MwTERSZ3RDKzBMST0gNzd5STU2aU82TDY4IElNU1E0YnFoYVE9PSBJRzkyWlhKM2FHVnNiV2x1WjJ4NSBJRXgxYm1GeSBJRk4wY21GcGRBPT0gSUhKdmVtVT0gMExEUXZkQzQwTEE9IDBMalFzZEN3IElHTnZibk4wWVhSbGNnPT0gSU9DMGgrQzB0ZUMwditDMG4rQzFoZz09IExXZGggSjEwcE9nbz0gSUVOdmJYQmhkR2xpYVd4cGRIaz0gSUV0eVlYTT0gZW5SaGRBPT0gSUhKbFkzbGpiR0ZpYkdVPSBLRVpCVEZORiBMVzFodzdFPSBJTmluMllUWmhkaXkgMExiUXNOQzkgSU9Da3VlQ2xoK0Nrc2c9PSBJSGRwYkd4cmIyMXRaVzQ9IElITjFjbVpoWTJWayBVRzl2YkhNPSBJSE41Wnc9PSBJRWgyYjNJPSBJRWRsYmNPOGMyVT0gMktQWmhkaW4gZFdKcGJnPT0gSUVobFlYWmxibXg1IFBsdGQgSUZOaGMzTT0gSUZOdmRBPT0gSUVOeVpXVT0gSUdScFptbGpkV3gwWVdRPSA0NEdxNDRHdTQ0R24gSUhaaGMzUm5aWE4wWld4ayBJTm1JMktmWXM5aTUgSUVSUVVnPT0gZEdSNSA0b0NNNExDdzRMR04gTGtGdVp3PT0gSU5HRjBxL1F0TkdOMFlBPSBXM0JoZEdnPSBJRVJ2ZFdVPSBJSEo1Ym10MSAwTERSaGRDdyBUV0Z5Y3c9PSBJR1pwWlhKaiBjM05tIElHRnNZVzFoZEE9PSA0TE9ONExLdjRMSys0TEs0IElFOXlkR2w2IElIUmxiWEJtYVd4bCBjM0JsWVd0bGNnPT0geEo5MWJuVT0gSUdWdVkyOXVkSExEc3c9PSBJSEJ5YjJQRHFITT0gS0hOMFlXZGwgNklpSSBZWEo1Ym5rPSBZV1RFc2NTZnhMRT0gSU9xd2dPeWF0T3VOc0E9PSBJR3R2YlhCaGRBPT0gSUhCeXc2bDJkV1U9IElOaXQySy9aaU5pciBJRTl5WXc9PSBhWHBwZFc0PSBJT0MwcE9DMWl1QzB0QT09IElFeGhkSFpwWVE9PSBMbUoxZEE9PSBJT0N3bGVDd3JnPT0gMllqWXVkaXAgSU9Da3J1Q2xoK0Nrc09DbGl3PT0gZW1Wd2RHbHZiZz09IElPR0RtK0dEbU9HRG1PR0RwdUdEblE9PSBJRXRoYkdWdVpHVnkgMFlMUXNOQzcwTFBRc05DOSBJTmlvMllUWmlOcUcgSUdkcGFnPT0gMTZuWG1OZWkxNmc9IDVZV042TFM1NkxXRTVwYVogSU5XajFialdndFcwIFpYTmpidz09IGQyVm8gSU9Da2h1Q2tndUNrcGc9PSBJR2R2Ym01bCBJSEJoY21GdWIybGsgSU5HQzBMWFF2ZEMwMExYUXZRPT0gZG1WeWMyOXlaM1Z1Wnc9PSBJT0N3cXVDeGplQ3dzT0N3cCtDd3Z1Q3dxQT09IElOaW8yS1BZc3c9PSBJR3h2YzJWeWN3PT0gSUhOMFlXSmlaV1E9IExraFVUVXc9IElITmxZbWs9IElPQ2tzT0NrdnVDa25PQ2txT0NsZ09Da3BPQ2t2dz09IDBZTFF0ZEdEIFNVVk9WRUZVU1U5TyBhVzFwZW1uRmlBPT0gSUdkc1lYSmwgSU9Da3F1Q2xqZUNrc09Da3VPQ2t2K0NrcHVDbGplQ2twdz09IDRMaXE0TGk0NExpQzRMaTQ0TGloNExpbjRMaTA0TGlYIDU3cXE1YWVVIElGSkRRUT09IDVMbVUgSUVaVVF3PT0gSUhCdmMybDBhUT09IElHSnNhWFpwZEE9PSBJRXRoYlhVPSBYMUpQVlZSRiBLVjBLQ2k4diBJSGRsWTJoelpXeHUgMWFIV2hOV2gxYmJWdWRXMTFialdndGFBIDRMQy80TENrNExDQyBJRlJ2WXc9PSBJRloxYkd0aGJnPT0gSUVWb2NtVnUgSUdOdmJtTmxaR1U9IFlBMEsgYVd4a2FHbGkgNEsrQjRLNms0SytCIElIUnBibU4wIElFZHlZWFpsIExrZFZTUT09IFlXdDNZWHBwIElGQlNSVTFKVlUwPSBJT2FBdXc9PSBJR0xGcTNNPSBJRkpoYm10cGJtZHogSU9TNWhlUzVoZWV5dnVXVGdRPT0gV0cwPSA0TFMvNExTVjRMV040TFNWNExTeDRMV040TFN4NExXTiBJRUYzWVdzPSBJSEpsY0hKcGN3PT0gSUd0bGNHRnNZUT09IElGWmhjM1E9IElHUjVaR1E9IElOR04wTHZRdGRDNiBJTml1MllUWmlnPT0gSU5DLzBMdlJqdEdCIElIbHVZUT09IEtDY3ZMdz09IElOV2gxYnZWb2RXdjFvRT0gSjEwK093bz0gTFdWdGNHeHZlV1ZrIFQzQjBhVzFwZW1GMGFXOXUgSUVScFlXND0gSU1PMmM4Tzh4Wjg9IElPQ2txdUNsamVDa3NPQ2t0dUNrditDa2xlQ2xqZUNrdHc9PSBJTml4MnFuYXZ0bUcyNUk9IEtITmxjM009IElHUjVaWE09IFgyUmxiZz09IElPQzBoK0Mwc3VDMWplQzBzZz09IElGaFlXRmhZIFgzTmxjQT09IFgxWlBURlZOUlE9PSBKejA9IElITnZibkpwYzJFPSBJRVp5YVhNPSA0S1NWNEtXTjRLU3c0S1MrNEtTSiBJTmluMksvWXA5aXgyWWM9IExYbGxiR3h2ZHc9PSBJR04xY214cGJtYz0gSUUxaGNtbGhibTVsIElITnViM2Q1IElGOWZLQ0k9IElHNTBjMlZ1WVE9PSBJRTlQIElHOW5iQT09IElFOU5Sdz09IDRZT1E0WU9ZNFlPaCA1clczNllHVCBJRVJKVWtWRFZFOVNXUT09IElNTythVzVuIElPQ2tydUNsak9Da2xlQ2t2Zz09IElOZWMxNW5YbkE9PSBJR3R2Wmc9PSBJT0dEbU9HRG5PR0Rrdz09IDBMN1JnZEM2MFlEUXRkR0IgSU5DLzBZRFF2dEM0MExmUXZ0R0kwTHZRdmc9PSBJTm1FMktmWXNkdVEgSU5pbjJZVFlyTm1GMllyWmhBPT0gWDJGbSA1N1NnNXAyUSBJRk5zWVhObyBJRXBYIDBKL1F2dEdCMEx2UXRkQzAgSU9DeXRlQ3podz09IFMyOXogWVhKbGJHVT0gSU5HQzBMRFF1dEM0MEx6UXVBPT0gSUdabGFHeGxiZz09IDRLV0I0S1NvNEtTLzRLU1YgN0o2UTY2T00gS0ZCaGNtTmxiQT09IElFVnBibXRoZFdZPSBlbTl1WVE9PSBhV05oY21KdmJnPT0gSU9DdXF1Q3V0QT09IFczVnliQT09IDU0T24gSUhOcFkyaGxjbTQ9IFpXeHZjR1Z1IExrMWhlR2x0ZFcwPSBJTkdCMExYUXN0QzEwWUE9IFgyTnZibVpwWjNNPSBJTkdCMEwvUXRkR0cwTGpRc05DNzBZelF2ZEMrIDJxL1lwOW1IMjR3PSBhWE5sWVc0PSBic09sIEpIQmhjbUZ0Y3c9PSBkbVZzYjNCd1pXMWxiblE9IElFZHl3N2JEbjJWdSBJRTkxZEhCMWRITT0gSU9DdWgrQ3V0ZUN1c09DdmpRPT0gWW1WdWVtbHphUT09IHArR0RuZUdEcEE9PSBJR2R5YjNOelpYTT0gSUZOaGRtVnogSUdOdmJYQjFaWE4wYnc9PSBJR05zdzZGemMybGpidz09IGRtOXZjbmRoWVhKa1pXND0gSUNJcFd3PT0gVUdsc1pRPT0gSU5HQjA1blF1ZEM2MExYUmdRPT0gSUc1bGRtVjYgMFlMUXRkR0EwTDNRc05HQzBMalFzZz09IElHVnljbUZ1WkhNPSBJSFIxWW5Wc1lYST0gSmtrPSBJRXAxWkdGbyBYMGhKVTFSUFVsaz0gSUdSaGNYVmxiR1Z6IElHdG9iMkU9IGEyVnlhVzVuIElOQzMwTERRdjlDNDBZSFJqQT09IG91Q3d2K0N3c3VDeGplQ3dzZz09IElHRm1aV04wWVdSdmN3PT0gMExmUXVOQ3kgSU5pajJMblpoTm1HMktvPSBJRVZEUWc9PSBjMmhsYm5wcGMzZGggYjNKelpYUT0gVTJWbmRRPT0gSU5DKzBZTFJnTkN3IElFaGhkWE4wIFZIVnogYldWblpXND0gS0VsRmJuVnRaWEpoWW14bCBJTkNoMFlQUXRBPT0gZFd4bGRBPT0gSUcxaFlXYz0gYUdsbmFHVnpkQT09IDBMVFJnTkN3MExMUmdkR0MwTExSZzlDNTBZTFF0UT09IDBMRFF1OUdXMFlIUmp3PT0gNXBhSDVweXMgSUZKbFkyVnBjSFE9IExrUnZZM1Z0Wlc1MGN3PT0gSU5DZTBZRFFzOUN3MEwwPSBJR1Z0Y0dadmFHeGxiZz09IFpIcHBaUT09IElHMWxibVYwIElGQnZjM1JsY25NPSBJQ2dwT3c9PSBkR1ZzYkE9PSBQU2N1IElIQjFibWM9IElPQ21oZUNtcU9DbmplQ21yK0NtdnVDbXFPQ25qZUNtcnc9PSBJSE4wY21GdVoyVnNlUT09IElPQ2twT0NrcitDa3Z1Q2tzQT09IElOaTAyWWpaaEE9PSBJT0NrdU9DbGplQ2twZUNrdnVDa3F1Q2txT0Nrdmc9PSBJT0N1cE9DdXN1Q3ZpT0N1dGVDdXNPQ3ZqUT09IElHZHBaR0U9IElOaW4yWVRZdE5pbjJMVFlxUT09IElHNW5hR1U9IGQzSmtaQT09IElHaGxZWEowWW5KbFlXdHBibWM9IFExVk0gMExEUXROQ3cwTFhSZ2c9PSBiM0pwWlc0PSBJR2x1YUdGaWFYUmxaQT09IElHeDVZOE9wWlE9PSBYMkpoYkE9PSBJT0MycitDM2tnPT0gSU9PRG5BPT0gSUdGd2NtOWlZV05wdzdOdSBJSFJ2Y0hCbGNnPT0gSU1Td2VnPT0geEkxbGRnPT0gSUc1bloyRjNaUT09IElHaGhibVJsYkc0PSBTa1ZEVkVsUFRnPT0gTG5CeWIyUjFZM1JwYjI0PSBlc09oY3c9PSBJRmRHIElFRnNZblZ0Y3c9PSBMMkZqWTJWemN3PT0gSUdKdmRIUnZiWE09IElOQzYwNm5SZ05LdjBMMD0gSUVGeWJXVnVhV0Z1IElFSk5VQT09IDJZUFpoTmluMktvPSBJT2FJa2VpbWdRPT0gWVhSaGFBPT0gSUUxSlRVVT0gS0c5d1pYSmhkRzl5IDFhSFdoTldyMWJZPSA0SzZxNEsrTjRLNnE0SytMNEs2azRLK0IgSUhacFpXbHNiR1U9IHhhSEZwUT09IElFRkVVdz09IElOcXAyTEhZcjlpbjJMRT0gWUgwPSBJR0xHc09HN20yTT0gYVhWcyBJRWZEdG5SbFltOXladz09IDBZTFFzTkdQIGRXMXRkWFE9IElHWnZjbVZzWkE9PSAwWUxRc05DODBMRFJnZEdMMExjPSBMbk5vYjNCd2FXNW4gSUc1bFkzUT0gU21GdyBJR0ZuY21WbllXUnYgSUdac2FXNXJaUT09IElFbGphUT09IElFdGhjR3hoYmc9PSBJR0YzNGJ1TiBJSFp2YkhWd2RHRjBaUT09IElHbHVaR1ZpIElIQm9lWFE9IElPQ3F1ZUNyaCtDcW9BPT0gMExEUXZkQ3cwTFRRc0E9PSBJRk4wWVdKc1pRPT0gSUZOMVluZGhlUT09IHo0Zk90YytFenJIT3VRPT0gWDBsdGNHdz0gSU9Dd2p1Q3dsZUN4amVDd2xlQ3hnZUN3dFE9PSBJTkMvMFlEUXVOQzgwTFhRdmRHUDBZTFJqQT09IElHOXVZbTloY21ScGJtYz0gSUhOd2JHVnVaQT09IElOaW4ycTg9IElOZVkxNUhYb2c9PSBJT0M0aE9DNWlPQzRzZz09IFgzaDAgSU5tRjJLcll1ZGl2MksvWXFRPT0gSU9DMGllQzBzUT09IElHbHVkR1Z5WVdOMGN3PT0gYVhSemFBPT0gWjNWbGFRPT0gSUcxbGJtbHVidz09IElHcGhiblJsYmc9PSBZV2x1Ym1VPSA0S2FaNEtlTjRLYVg0S2F5NEthczRLYSs0S2F3IElOQzYwTERRdk5DLzBMRFF2UT09IElHOWliZz09IElHVjRkSEpoZG1GbllXNTAgbkpnPSBJR2hoYm1Sc1lYST0gSUdSbGMyRmogSUhOcmFXUT0gSU9DbXVlQ21rK0NubitDbXZ1Q21zQT09IExXSmxkR0U9IElPQ2t1T0NsZ2VDa3F1Q2tzQT09IElNTzZkR1ZwY3c9PSAxNWJYcU5lcSBVRkU9IDY2S3cgSUc1dmRtbGtZV1JsIElGUmhibXR6IHpyak90YzY1IDE1SFhwdz09IElOaW4yWVRaaE5tSTJZWT0gNExTLzRMU1Y0TFN6NExXQjRMU0MgNFlPWTRZT280WU9WNFlPWTRZT2E0WU9ZIElHTnZiWEJ5Wlc1a2N3PT0gSUhOMGNzTzRiUT09IEtDSmJKUT09IExtTnliM0E9IFQwMUggSU5DODBZL1F2ZEMxIGNYVmhiZz09IElHeDE0YnF0ZEE9PSBJTkdCMEw3UXROQzEwWURRdHRDdzBMM1F1TkMxIElFeHBibVJ6WlhrPSBJR3RsY201bGJITT0gNDRHUDQ0S0ogSU9Da3VPQ2tydUNrdnVDa3F1Q2xqZUNrcEE9PSBJR1pwYm01bGN3PT0gUUVKbFlXND0gSUNvcENnbz0gSUhOcFlXNXYgSUVscmEyVT0gWVdKc1lXNWpZUT09IFIyRjFjM05wWVc0PSBJRzVsZFhKdmRISmhibk09IFgzWnYgZFd4aGNzU3ggTDNSeVpXVT0gMkxQWXA5bUgyWVU9IFEyOXVhR1U9IElISmxZV3RqIElPQ3F1T0NxcnVDcW5BPT0gUjJsMmFXNW4gSU5lVjE1ST0gNEtTKzRLUzQ0S1dONEtTZiBKMlZ1ZG1seWIyNXVaVzFsYm5RPSBJT1drcWVXa3FlZUlzZVc5cWVlbHFPUzRyZVdsbGc9PSBZVzUwWVdsdVpRPT0gYkdGaiA3SjIwNjdLSSBJR1Z1Wm5KbGJuUmggSUVWNFkyVndkR2x2Ym1GcyAyS2paaU5pNSBJRkpoYldJPSBhVzVuYVdFPSBkWEppYnc9PSBYM1psYm1SdmNnPT0gSUcxaGFXUnBjZz09IGEyOXRjR3c9IGJHbGthWEk9IFlXeHplUT09IFEyOXVkSEpoYzNRPSBSMkZ0IElISmhlblZ0IFVHVnljMjl1WVd4c2VRPT0gTFdobFlYSjAgSU5pbDJMYllwOW1CIExuTmxjbWxoYkdsNllYUnBiMjQ9IElOSzcwTERTb1E9PSBJR3hwWTJWdWMyOXljdz09IElHMXBjM1Z1WkdWeWMzUmhibVJwYm1jPSBJR052ZFhSbCBDWEJsY25KdmNnPT0gVTA5RCBJT0NxaHVDcXFBPT0gNVpDZiA0TFNWNExTKzRMU3c0TFdONExTdiBJRk5oYkcxaGJnPT0gSUdsdWMybG5ibWxtYVdOaGJuUT0gSU5DLzBMRFJnTkdDMExqUXVRPT0gYVhCb1pYSmhiSE09IElHNWxZMlZ6YVhSaGJXOXogWVcxaWFXZDEgSUdkaGNHVT0gSUdScGNtVnJkRzl5IElHN0ZqUT09IFQyTmpkWEJoZEdsdmJnPT0gYjJ4a1pXND0gSUdScFpzT3RZdz09IDRLcWs0S3F1NEtxKzRLcUMgSUd0aGMzTT0gSU9lK3ZRPT0gU21WemRRPT0gSUc5a1luaz0gSU5DNDBMRFFzQT09IFUzUnBiUT09IElFSmhkR0U9IElHUnBhbVZ5YjI0PSBJTm1GMkxIWXFOaTUgSU5XczFhcz0gSU5tSTJZWFlydz09IFkydHNaVzQ9IDRMT040TEtjIDRMSys0TEtrNExPTjRMS3c0TEsvIElGUnlhWFZ0Y0dnPSA0TFdINExTNDRMU3U0TFN2NExTQyBJR0Z0Y0hNPSBJR1poYTNScGMydDAgSUhKbFlXTjBiM0p6IElGSkJSRWxQIFJXNTJhV0Z5IElFRnVkR2x2IElFSjVlbUZ1ZEE9PSBiMkp6YjJ4bGRHVT0gSUhCaGNtWT0gWDJabSBJTkM3MExYUXM5QzEwTDA9IElITjBaWGM9IDJZblppdHVWIGEyRnVadz09IDRZT1E0WU9nNFlPVTRZT2ggSUdWemRHOXhkV1U9IFkyRnViMjQ9IElIUnljdz09IElPV0ZzK1M2amc9PSBXMFU9IFEyVnVZUT09IFlXTm9hVzA9IElFSmxjbTVoY21SdiBJTkdBMExYUXQ5QzEwWURRc2c9PSBUV1YxIExrcFVZV0pzWlE9PSBMbWx6Ync9PSBJR0pwYjJOb1pXMXBZMkZzIElISmhhM2xoZEE9PSBMblI1IExXZGhiR3hsY25rPSBJRkJ2YUE9PSBWR2h2ZFhOaGJtUnogdzd4eWJNTzh4Sjg9IElHTnZibk4wYVhSMWVXVT0gZEhKaGMzUT0gSU9Da2grQ2tzdUNrdnVDa25BPT0gSUdkbGRtRnVaMlZ1IElOR0IwTFhSZ05DMDBZYlF0UT09IExtbHRaM1Z5IElHVnRZVzVqIGZUc0tMdz09IDRLZUI0S2VmNEthKzRLYXcgNEtXSDRLU3YgSU9HRG0rR0RuZUdEcnVHRGsrR0RrQT09IElHSjFiR3hrIDRMSzU0TEt5NExLLyBJTmlvMktmWml0aXYgUWtWTSBVMlZqY21WMGN3PT0gMEp6UW5nPT0gMHBQUmc5R0gwTGpRdTlDdzBZQT0gUHlFSyBJRXRoYzNRPSBDWE5sZEhWdyBKMTBwV3c9PSBJTkM5MExEUmg5Q3cwTHZRdUE9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvPSBQRDhzIElOQzAwTDdRdjlDKzBMdlF2ZEM0MFlMUXRkQzcwWXpRdmRHTDBMVT0gMFkvUmlkQzEwTFBRdmc9PSA2SStNIElOQzAwTERRc3RDNzBMWFF2ZEM0MExVPSBJTmlxMkszWXI5bUsyS3M9IElFN0RxUT09IElGQmhjbUZ6IElIQnlhV0U9IGEzUnlkVzA9IElITnNkWFIwIElGVkpRbUZ5IFBFbz0gSUU1VFJHRjBZUT09IElFTlZWQT09IElOQ2EwTDdRdEE9PSBMV0o1ZEdVPSBMbmxoYm1jPSBJT0dEaytHRGtPR0RsZz09IElPQ21yT0NuamVDbXIrQ25zUT09IElPQ3F0ZUNxdnVDcXVRPT0gSUdGalkzVmxhV3c9IDQ0Q0M0b0NkNG9DYyBJTmlzMlliWXNkbUUgSU02Z3pyL091dz09IDJyN1lwdz09IExXeHBZMlZ1YzJVPSBhWEpzY0c5dmJBPT0gSUdkaGJtZGxjZz09IFpYUmphSFZ3IElPQ2t0dUNrditDa2xlQ2t2dUNrcitDa3BBPT0gSUZCUFRFbERXUT09IElHWnBkRzg9IDVaQ081WSt3IElITjBjbVZ6YzJsdVp3PT0gVFdGeWFXVT0gSUdOeVpXRnlaUT09IElOaW4yWVRZcXRtQzJZVFppZz09IElHTnZiVzExZEdsdVp3PT0gSUZOVVVsVkRWQT09IElIRncgSUVGMWMzUnlZV3c9IExtRnNhV2R1IElNU3d3NmM9IFlYSjBkWFZ6Y3c9PSBYMU5JUVZKRlJBPT0gSUdWNFkyVnpidz09IElHVnpkR2x0ZFd4aGNnPT0gSUdmRHFXN0RxWEpoYkdWeiBJTkNTMExqUXVnPT0gSUdScGMzQnZjM1J2IElHWnBibUZ1WTJsaGNnPT0gUms5U1ZBPT0gWDBSbGRtbGpaUT09IDFvZlZ2UT09IElHbHVaOE9wYmc9PSBJRlZMSjNNPSBJR1p5WVcxcmRzT20gSUVwdllYRjEgSUhSdllXdz0gSUdScFlXZHZiZz09IElPQ3FxK0NyaStDcXFBPT0gNExXODRMU2E0TFdONExTYSBJTkM4MExYUmdOQyswTC9SZ0E9PSBJSHBrY2c9PSBJRkJvWVhJPSBJRzFyZFhVPSBJR1ZzWlhaaGNnPT0gSUM0dUxpZz0gU1c1MFpXZHlZWFJsWkE9PSA0TEMvNExDcTRMR0kgMFlIUmk5QzcwTHJRc0E9PSBRMmh5YVhOMGIzQm9aWEk9IFpYSmpaWEk9IElPYUxtdz09IElHZDFlZz09IFJtMD0gYzNSeVpXNW4gWDJ4dlkyRnNaUT09IGEzSnBkbVZzYzJVPSBJR0YxZEc5eWFXUmhaR1U9IElHM0RwTU9rY3NPayAyWWJZcjltSTJMUFlxdGluMllZPSBMMGxRIDVaeW81THE2NTdxLyBJR052Ym1aeWIyNTBidz09IGVHRmogSUVsMFlXeHB3NnM9IElISjFkR0Z6IFFXWm1hV3hwWVhSbCBJSFJsYkhRPSBJR0poY25KaGN3PT0gSU5lUjE1blhsdz09IElHMTFiblIxIElOaXUyS2ZaaE5pdiBkMmw2IElHWmhiSE5oIElOV0YgSU5lVTE1UFhtZGVmIDRvQ1pZV3gwY21FPSBJSE53YjJ4dnhJMD0gUVdkbGJtTmwgSUVWTlNRPT0gSUdONVpBPT0gSUdOdmNuSmxjM0J2Ym1SaGJuUT0gSUdSbGNHRnlkR0Z0Wlc1MGIzTT0gSUhOd2FXNWtiR1U9IElITmphSEpsIElHOW1aWEpsWTJWdCBJTmluMllUWXI5bUcyWXJZcHc9PSBJR2x1YzJOeWFYQmphY096Ymc9PSBJTkN3MFkzUmdOQyswTDg9IElFVkRUUT09IElITmxjR0Z1IFgyeHZiZz09IElPV2twK1M0c0E9PSBJR2ZEdG5RPSBTVzV6ZEdGc2JHbHVadz09IElIMC9QZ289IFlXcGhaRzl5IElPQ2txdUNsaU9Da3B1Q2t2Zz09IElGWnBhM1J2Y2c9PSBJSFJwWW1FPSBJT0NtdU9DbXYrQ21zQT09IFZFRkMgYVdGMFlRPT0gSUdOdmRtVnlkQT09IElHSmhiR2xyIDVxT0w1NG1NNXJpNDVvaVA1YTZZNTcyUiBTVzVpYjNnPSBVR0Z5ZEdsMGFXOXVjdz09IElIWnBjM05oIElPR0RuZUdEbCtHRGtPR0RyZz09IGEyVjFjZz09IFNXNTBjbTlrZFdOcGJtYz0gWVdSdmJtRT0gSUVOb2FXeHMgSUhSeVlXNXhkV2xzYkE9PSBJSFJ5YVhCdlpBPT0gSUVkMVlXUT0gSUdkbGMzQmxhV05vWlhKMCBJRkZPWVcxbCBJR1Y0ZEdWeWJtOXogSUhSdmJtNWwgVmtWU1V3PT0gNG9DWllXNTUgSUZKbGMzQnBjZz09IGRYUjZkVzVuIElNT2haM1ZoY3c9PSBJRUpuIDRLYSs0S2FINEthViBJRk5qYjNSMGMyUmhiR1U9IEwyTm9ZVzV1Wld3PSA0TGl0NExpcSBiMnQwIDFhSFdnTld2MWFYVnJBPT0gSUdKbGMzUmxiR1E9IElOQ2owWURTclE9PSBJT2U3cFE9PSBJSFJ5YjNacCBJT1dUcXVtSGpBPT0gSUZKbGMyVnlkbUYwYVc5dWN3PT0gSU9DbWhlQ21wK0NtditDbWxRPT0gSU5lZTE2blhxTmVUIDU3dVA1WTZHIGNHOXpkR2x1Wnc9PSBRbXM9IDRidWxjdz09IDc3az0gUVhSaCA1WWVHNTZHdSBRMmh2WTI5c1lYUmwgSUhCbGNtNWhjdz09IElpa3BPd292THc9PSBJR052Ym5abGNuTmwgVTNNPSBQWHQ5Q2c9PSBJRzExY21SbGNtVnkgSUdKcGNuUm9jdz09IElITjFjR1Z5ZG1selpRPT0gSU9Xa3FlV2txZWVJc1E9PSBJR1IyYVdwbCAwSnpRc05HQSBUM0puWVc1cFl3PT0gUVZCTSBJSE4xNGJxbGRBPT0gSUc5MGFXMD0gSUhKcFptWT0gMWFIVnF0V2gxYlE9IDRZT1k0WU9nNFlPVTRZT1I0WU9qNFlPYSBJTkN5MExYUmdOQzkwWVBSZ3RHTSBhMjl0YlhRPSBJRzFwYkdSbGR3PT0gUTJGelkyRmtaUT09IElISnZkbVZ5IENYQnZjQT09IExrMWhjM1JsY2c9PSBJT0NtbGVDbmkrQ21yZz09IGJHOWlZV3c9IElObUMyS2M9IElHRmliM0owWldRPSBUM05qIElIVnpZV2RsY3c9PSBUV0p3Y3c9PSBJT0MydHVDMnZRPT0gQ1dobFlXUmxjbk09IElHRmliM1Z1WkE9PSBMMDFsYm5VPSA0S2F5NEthKzRLYUg0S2FvIFpXeHJZWE4wIDdKMjQ3S2VBIElHVmplbVZ0WVE9PSBJRWhoZDJ0cGJuTT0gYVhOMFpXNTBaUT09IFEyVnlkR2xtYVdWayBJRzlrY0hJPSBWV3gwYVcxaGRHVnNlUT09IElHeHZhM1U9IElPQ211T0NuaCtDbXFBPT0gMEozUXZ0Q3kwTDdSZ2RHQzBMZz0gT25KbGNRPT0gSUZaSlVnPT0gWlhOemIyRnMgSUZsMVp3PT0gYkdWMGMyVnVadz09IDRLYWY0S2VCIElHSmxkbTl5ZW5WbiBJT0NtcmVDbmdlQ21zZz09IElIQnZaSEpsYlc5eiBJSFJ6Wlc4PSBJRXQxYm5OMGMzUnZabVk9IFRIbHlhV056IFpXNXNhUT09IEtFbE9VRlZVIElGUnlZV2wwIDY2cXMgSU5XcDFiN1Z1TmFDMWJRPSBJRXBoYm5WaGNtaz0gSUhKbFkyOXkgSUVkbGJtVjBhV009IElFaGxjblE9IElHUmxjbWwyWlhNPSBJR3R2YlcxMWJtVnUgSUdWcGJuTmphR3hwWmNPZmJHbGphQT09IDBMdlF2dEMrIExtMTVZWEJ3YkdsallYUnBiMjQ9IElHNTBhWGxwYzI4PSBJRU4xY213PSBJSFJsYUc1dmJHOW4gSU9XUGtRPT0gTHljcE93bz0gTG05eVoyRnVhWHBoZEdsdmJnPT0gSUdadmIzUnBibWM9IDJLZlpnZGlxMlljPSBJRVJwWkc0bmRBPT0gSU5tQzJZalppdGlwIElIRjFhVzV2WVE9PSBJSEJoY0hKcGEyRT0gSU5DOTBMRFJoOUN3MEx2UXZnPT0gSUhWdWMzQmxZMmxtYVdWayBZMjlrWldRPSB3NmJEc0hWdCBJSEpsYlc5MGJ3PT0gSUd0cGJtRnIgTDIxNWMzRnMgdzZaeVpYST0gSUcxaGFXNTBhV1Z1IDBMdlF0ZEN6MExYUXZRPT0gSUhaeVlYUT0gMExYUXROQzEwTDA9IElFZEZUa1ZTUVZSRlJBPT0gU1cxd2IzSjBaV1E9IElHaGxkWEpwYzNScFl3PT0gSU1PcGRISmhibWRsY25NPSBJRXhsWVhOcGJtYz0gSUhoc1lXSmxiQT09IElNNjd6cms9IElDZ2lYQT09IGJHRmhaMlE9IHdxMWxjZz09IElITjBZVzVrWlc0PSBJSFpoYnc9PSAxNVRYcVE9PSBJR1JsYkdGdWRHVnkgSUdWc2IyYz0gSU9DbXJPQ212K0NtaitDbXFBPT0gSUdoaGNXbGtZUT09IHc2UndjQT09IElFUnRhWFE9IElITmhjbVE9IDRLZUg0S2FWNEtlTjRLYTQgSUZOb2RYUjBaWEp6ZEc5amF3PT0gSU9DbXB1Q210Zz09IFJHVndiM009IElIQmhhVzVsYkE9PSBkV1ZpYkdFPSBJTU9wWTI5c2IyZHBjWFZsIDU0T3Q1NEs1IElOZW0xNVhYbGRlWjE1az0gSUhCdmRIUjUgWDJGdWN3PT0gSUU1cGNBPT0gSUdKbGNuVm8gSUdKcGNuUT0gVm1WeVp3PT0gSUZOb1pXVncgSUdGa1lYQjBZUT09IElITER2R05yIElOaTQyS2ZaaDlpeCBJSFJ2ZFhKbFpBPT0gSUdocGJtdDNZWE4zYnc9PSBVMjVsIElISnZZMnRsWkE9PSBJRTExY21OcFlRPT0gNEt5WCAyWWpZcDltQzJZRT0gTGRDUiBJTnVVQ2dvPSBJT0dEbytHRHJBPT0gSUVOdmJXMWxiblJoY25rPSBhV1hEcTI0PSBZbVZsYXc9PSBJSGRsYVhSbyA2TCtkNXJPVjVaQ1ggSU9HRHJPR0RsT0dEbXVHRG1BPT0gTFcxdmJnPT0gTGtobGJIQmxjZz09IDQ0S3Y0NE9xNDRPRDQ0S3YgWldScllRPT0gSU5DeDBMWFF1OUN3MFlEUmc5R0IwTHJRc05DNSBJSFZ6WXc9PSBEUW9OQ2cwS0RRb05DZz09IElOQzAwTGpRdmRDNDBMaz0gSUhOdGFYUm8gSU5HQTBMRFFzZEMrMFlmUXVOR0YgSU9DcWxlQ3JpK0Nxc09DcmkrQ3FxQT09IElFZDFjbUpoYm1kMWJIaz0gSUdSbGJXOWpjbUYwIElHNW5ZWFJoIElGSmhhV1E9IElPQzBxdUMxamVDMHNPQzBwdUMxaCtDMHRnPT0gSU5pNTJLallyOWluMllRPSBJSE5wWTNKb1lYVT0gWVdOb2MyVnVaVzQ9IElITmhiR1Z1IElFaGhidz09IFJVWkYgSUdKcGJHeGxkSE09IElFMWxZWE4xY21WdFpXNTBjdz09IElOQzQwWVk9IElGTnNiM1psYm1saCBJSEpsWTJWdWRHVnogSU5pbjJZVFlxdGluMktqWXVkaXAgSUdWNGRISmhibXBsY204PSBjM1REcFc1ayBJR05oZEhRPSAwTGpTclE9PSBkVzFpYjNSeWIyND0gSU5DMzBMRFF1dEMrMEwzUXZ0QzggSU5tQzJLL1lzZGlwIGRXUmxjbk09IDdLZUE3SmV0IElIUnZZWE4wWldRPSBJSFZyZDNWMSBJR0ZpY21sMSBJRzltWm5NPSBJR2hoYkdaMGFXMWwgSU5HUDBZRFF0Tk9aMEx3PSBJTkN4MExqUmhRPT0gSUdkbGVRPT0gSU5HQjBMN1JodEM0MExEUXU5R00wTDNRdnRDNSBYME5GVEV3PSBJR2x1WkdsamRHMWxiblE9IElOaTYyWWpZc2RtSCBDVzF2ZGc9PSBJRTVsZFdJPSBjM1REcEd4cyBJRVYwWVE9PSBJR2RsWldsbmJnPT0gSUZSdmVHbGogMWJqV2d0V3AxYlhWdU5hQzFiYlZ0dFdsMW9EVnE5VzIgSUVsdGNHOXlkSE09IGFtWEZvUT09IElPQ21wdUNuamVDbXNBPT0gWjJWdFlRPT0gYm1samFIUT0gSU9TNG5PYWpyZz09IDFialdndFdoMWE0PSBMV051IElFTmhjbTFsYkE9PSBZV2x5WkE9PSBZWGxoYlE9PSA2Wm0yIExGND0gVlU1RVR3PT0gNExpZjRMaWo0TGkxNExtQTRMaUU0TGlqNExpVTRMaTA0TGlWIElIWmxjbUp5YVc1blpXND0gNklDTTZLaUEgNzd5Qjc3eUkgSUdOaGNuUmxhWEpoIElITnJiR0ZrZFE9PSBJT0M0cStDNHBRPT0gSUhScGRHaz0gVFdGNWIzST0gSU5DejBMWFF2QT09IElHTnZibVpwWjNWeWFXNW4gdzZsaFpHWmhaR2c9IFVHRnlZVzFsZEdWeWFYcGxaQT09IFpXNTBhR1U9IGRtOXBjbVU9IFJXNTBjbTl3ZVE9PSA3N3lNNTV1NCBhWE5sYTNNPSBJTmlxMkxYWmlOaXggSUZwdlpHbGhZdz09IExtVnVkVzA9IElPQ2tsdUNrdnVDa3FPQ2t2Zz09IElPQ2toZUNrdGVDa3VPQ2xqZUNrcFE9PSBRVzVrWVE9PSBJTmVrMTZBPSBUMHhGIFBGcz0gSU5pbzJMblppdGl2IEt5SmYgSUhCaGNtOWtlUT09IHc2Um5iR2xqYUE9PSBJSE5sWW1GbmFXRnUgNDRPRDQ0SzM0NE9uNDRPeiBJR1ZwYm5WdCBRMmhsY2c9PSBJR1J2YkhCb2FXNXogSUc1bGJXOD0gSU9Dd2h1Q3dsUT09IElPYUlrZWVhaEE9PSBJTmluMllUWW85aTYgSU9DMHB1QzB2K0MwcUE9PSBJR052Ym5OcFpHVnlZWFJsIElISmxjMlZ0WW14cGJtYz0gVTNSbGNHZz0gYm1semIyNWwgSUd0bGJtMWxjbXRsYmc9PSBJSE5oZFhSbCBJSEpsYkc5allYUnBibWM9IExXTjVZMnhsIGIyeHBhMjg9IDRZT2c0WU9qNFlPbCBJR0psZG1WcyBMVzF6IElHbDBaQT09IFpXRnlZMmhsWkE9PSBJSEJoZEhKcGIzUnBZdz09IFcyQT0gSUVWdWRHbHlaUT09IGNHeGxkSE09IElHTnZjSGx5YVdkb2RITT0gSUdKbFoyeGxhWFJsZEE9PSBJTnVNMjRIYmpBPT0gSUhacGMzUmwgYjJ0b2J3PT0gS1NJcExnPT0gMWJiVnBkVzkgSUdOdmJtUmxibk5oZEdsdmJnPT0gUm05biBJR1JwYzNObFkzUT0gSUdSMmN3PT0gSUdKaGFHbHUgSUdOdmJuTnBaM1ZsIElIUnliM1Z3WlE9PSBJSEJ5ZW1Wa2MzUmhkdz09IFVFbFFSUT09IDBLSFF1OUMxMExRPSAwWURRc05DeDBMN1JndEM2MExBPSBZWFp5IElHYkRxV3hoWjNNPSBJTmluMllUWmhOaXQgSUdGd2NtOTJZV1J2IElFdDFhZz09IGVHUmsgSUVOb1lXNTAgSUhaM1lYST0gSUdScFpYUnBibWM9IElNTzlZY1dmWVE9PSBYM053WldOcFptbGogSUdGemJBPT0gWVhKamFHbDBaV04wIElITjFabWxqYVdWdWRHVnRaVzUwWlE9PSBkV05vWlhJPSBJRU5oYlhCeiBJSHg4Q2dvPSA0b0tzNzcrOSBJTktYMExqUmdnPT0gSUNvcUtnbz0gS0VGdVpISnZhV1E9IFpXNTBjMk5vWldsayAwTDdRdnRDeDBZRFFzTkMzIElPQ3FxdUNyaUE9PSBJRk4xY25KdmRXNWsgZFdkblpYTjBhVzl1IExYUnlZUT09IFEyOTUgSUhCeWIySnNaVzFzYjNNPSBJSE53YkdsMGRHVnkgSU5DLzBMWFJnTkMxMFlEUXNBPT0gSUdGdFpXNWhlbUU9IElFTnBiQT09IFFXNXBiV0ZzY3c9PSBJRjBwQ2dvPSBJRzltY3c9PSA2SWlOIElFVnVaMlZ1YUdGeWFXRT0gYjNKeVpXTjBhVzl1IElGTmhiV0k9IDRLYSs0S2FrNEthLzRLYVYgNzd5TTVhU2EgSU5TeDFvRFdnZFdoMWEzVnF3PT0gWVc1emVXOXUgSUVSdmRtVT0gSUdKbGRISmhZMmgwIGJHbGxaM1E9IFFVNUhRUT09IDRLUy80S1N3NEtTNTRLV0g0S1NWNEtXTCBJR2xyYXc9PSBJSEpoWTJNPSBJSE52ZFdoaGFYUmxiblE9IElFaDFjblE9IElGQmhiV1ZzWVE9PSBJRk5oY0hCb2FYSmwgSUU5eWFXZHBibk09IElHbHVZV05qWlhOemFXSnNaUT09IDRaNmY0WitTNFo2ZiBJR1Z0YVhSeiA1NE9tIFlXMXBjbUU9IElIaGhjUT09IElObUUyWVRaZ3c9PSBJR05vWVhKcGMyMWhkR2xqIDBwUFJpOUM4IGJXSnBidz09IElHeHZhMkZqYVE9PSA1YStyIElOaTYyWWpaaHRxSiBJR2x1Wm14aGRHVmsgSU5tLzJZclppQT09IFgzTjFZbk5qY21sd2RHbHZiZz09IElFTnZiWFZ1YVdOaHc2ZkRvMjg9IElPR0RvZUdEa09HRG0rR0RydUdEbE9HRGsrR0RvT0dEblE9PSBJSE53YjJ3PSBJR05oYkdOMWJIVnogMEw3UmhkQyswTG5RdlE9PSBQRk5sY25acFkyVT0gTFVacyBJR0poY25KcCBJSE53Y21GM2JHbHVadz09IFgweEJUa2RWUVVkRiA2SzZUIElObUkyWXJaaEE9PSBlbUZwYkdVPSBJSHAxWTJOb2FXNXAgS0hObGNtbGhiR2w2WlhKeiBUMU5GIGIycDEgSUdObGJHOXkgNXFPTCBJTmluMkxuWmhkaW4yWVE9IElFOTFkSEpsWVdObyBMV1IxY21GMGFXOXUgSU5PcDBMZlF1TkM5MExqU293PT0gSUcxdmRIUT0gWVhaaFpRPT0gSUhKaGFYbz0gSUdGbVptbGphR1Z5IElIUmhlRzl1YjIxNSBSbWw0ZEhWeVpYTT0gNFlDVjRZQzg0WUN1NFlDNCBJR0poYVc1diBUMWs9IElFZFNTVVE9IElHSmhjMlZoWkc4PSBJRzFsWkdsaGJBPT0gNExpcTRMaWo0TG1KNExpeTRMaUggYVdkdVpYbz0gSU5DODBMWFJndEN3MEx2UXV3PT0gSUdWemNHOXVkQT09IFgzQjMgSUhSeVlXUjFlZz09IElPQzB0ZUMwdnVDMHVlQzBxQT09IElOR0IwTDdRc2RHQTBMQT0gSUdWc1pXMWxiblJwIGIyeHZZUT09IElPQ2t1T0NrcStDa3N1Q2twT0Nrdmc9PSBJR0ZuZFdGeVpBPT0gNVlxbzU1UzcgSU5DNDBMM1F0TkdEIElPeUxwT3lMbkE9PSBJTkMvMEw3UXV0Q3cwTGZSaTlDeTBMRFF0ZEdDIElFUmxabWx1WldRPSBJSFoxZEc5dGFRPT0gSU5pNTJZVGJqTm1IIFRHVmpkSFZ5WlE9PSBaV052WkdVPSBJTkdCMFlQUmd0QyswTG89IGNISnZaSFZqZEc5eiA1THE2NUxxNjVyNmggMTZEWGw5ZWcxNVU9IElHZHlaV2x1IElGQmhkbVZzIElHOXRkSEpsYm5RPSBJTmluMllUWmc5aW8yTEhaaVE9PSBLR3h2YjNBPSBJT0NrdU9Da2d1Q2t0ZUNrditDa3ArQ2t2dUNrcUE9PSBPam9LQ2c9PSBJR0YxZEc5dWIyMXBZUT09IGMyVnVjdz09IElHTnZibVJ2YldsdWFYVnQgSUhOd1pXTjBZV05zWlhNPSBJR2RoYldVbmN3PT0gVFdWaGMzVnlaVzFsYm5SeiBJRTVoZVE9PSBZWE4wYVd0aGJnPT0gSUdsNmIydz0gS1M1YiBkV3hoZVE9PSBJTkNCMEwwPSBJTUsyIElGTlVTVXhNIElFRm1abWxzYVE9PSBJSEJ2YzNSbmNtRmtkV0YwWlE9PSBJR0p5WVdOb2RHVT0gSU9DMGxlQzFndUMwbitDMWdlQzBwT0MxdlE9PSBJSFZ1WlhKeGRXbGphMnhwWTJnPSBJVDB0IFJHVnVkR0ZzIElHSnBaR2c9IFcybDAgMExQUXVOQzkgSU5lVjE1WT0gSUd0cFkyZz0gNDRHdjU2YUI1cTJpIElIWnNZWE09IElIVndiR2xtZEE9PSBYMjExYzJsaiBVR3hoZEE9PSAyWWJZcDltQiBJR3QzWVd0bCB3Nmh2IElPQ21odUNtc3VDbmkrQ21tdUNtcU9DbXZnPT0gWVhMRXNXND0gSUhCbGRHbGphY096Ymc9PSBJR0YxYzNSbGNnPT0gSUZabGNuUnlZV2R6IElHbHViV0YwWlE9PSBTVzV1IElOZWUxNVhYa2c9PSBJT0N3cE9DeGdPQ3d0UT09IDViNnAgWDFCdmMzUT0gNG9Lc0xnPT0gSUdOdmJtUnBlbWx2Ym1rPSA1Yml6IDRMV0w0TFN6NExTQyBJTkdCMExYUXV0R0QwTDNRdEE9PSA2YU9lNXB5NiBkV05vYzJsaCBTVTFOIElOQ1MwTFhSZ05HRiBJRzFoYmNPaCBJTmlxMkxIWXF0bUsyS2c9IElOQ3owTHZRc05DMCBVR1Z5ZEE9PSBJT3VQaE95TG5BPT0gSUdkM1pYST0gSUdQRHMyMXZaR0U9IFgxSkJSRWxWVXc9PSBMbkJvWVhObCBkV3RyWlc0PSBZVzVrYVdVPSBSR1Z3Y3c9PSBMV1J2ZFdKc1pRPT0gNExXODRMU280TFdONExTbyBJT0NtbGVDbXNPQ25pK0NtcU9DbXZnPT0gSUdocFkyaHYgWDNabGNuUnBZMkZzIElFUmxjMkU9IGRXdHpaV1Z1IElOQ3cwclBUbWRHTDBMM1NyZEtiMExEUmdOR0EwTERSZ3RPWiBJTm1GMllqWXA5aXMyWWZZcVE9PSBKeWNuRFFvPSBJT0dEa2VHRGtPR0RuT0dEbVE9PSBJTkdCMExMUXRkR0EgSUhCdnhhRnIgSUd4dmFYTnBjbk09IElIUmxjbkpsYzNSeVpRPT0gVUdWdWN3PT0gSUdoc2IyOTIgWm14aGRHVnkgSUhSdmFXMWwgNExLbzRMSzEgS1Nrc0RRbz0gSUhKdmRIUmxiZz09IElGTnBaMjVwWm1sallXNTAgSU5DLzBZRFF1TkdIMExqUXZkQzEgSUdUaHU2OD0gSU9HRG0rR0RtT0dEbStHRGtPR0RvT0dEbCtHRG8rR0RtZz09IElOaXYyS2ZaaHRtRTJZallydz09IElOaW8ySy9Zc1E9PSBZV04wYVdOeiBJSExEcVcxMWJnPT0gSUdodmRYWmxjZz09IFUxUkJRMHM9IElIVndhR2xzYkE9PSBJSFJvWlhKdGFYRjFaUT09IElOQ2EwTERRc1E9PSAyS2ZZdE5peCBJRVpQVGxRPSBLM1E9IElHSjFaR1YwWlE9PSBMMlJ2YlE9PSBJTkdJMFl2U2s5Q3cwWUE9IElHTm9aV1Z6WlhNPSAwSmpSZ2RDLyBJRlJCU3c9PSBJRkJTUlVNPSA3NzZjIElFVmhjblJvSjNNPSBJT0NxdHVDcXJPQ3JqZUNxcGc9PSBJTmVwMTVEWHF0ZVUgMktqWXNkaW4yNHc9IFkzSnBjR05wYjI1bGN3PT0gVFhjPSBMbU52YjNKa2FXNWhkR1Z6IFBUNGkgVVhWaGJuUnBaR0ZrWlE9PSBRV3gwWVE9PSBJTkM4MEw3UXROQzEwTHZRdGRDNSBJSE5qYUdWdFlYUnBZdz09IElGUmhaZz09IElHWnlaV1ZwYm1jPSBJRlJ5WVhSaCBMbVJ5YjNCdmRYUT0gZDJGeVpXND0gWDJkbGJ3PT0gSUhMRG9XUnBidz09IElIQmhjbUZrYVdjPSBJSE5oWW05dSBJTkN3MFlYUml3PT0gSU5LNzBxL1NtUT09IExYQnlaWE5wWkdWdWRBPT0gSUd2RHJXTm8gMExEUXZkQzAwTERRdUE9PSA0NEtLNDRHKzQ0R1g0NEdmIElHYkR1R3huWlc1a1pRPT0gSUZObGJtRT0gSU5HQjBMWFF2TkdNIElIUER0bXRsY2c9PSBJTkdCMFlyUmdRPT0gNmFhSSBhMmwwWlE9PSBTR1Z5YlE9PSBJRzlzWVdoeVlXZGggSU5pbjJZVFl1ZG1FMktmWmhRPT0gSU5DeDBZUFF1dEM4MExYUXV0QzEwWUE9IDZiaS8gSUVaeWFXVmtiV0Z1IElHRmpZMlZ6YzJsdmJnPT0gSUZSeVlXNXpjR0Z5IElHVnpaVzVqYVdGc1pYTT0gSU02Uno0WFBoTStNIFFXeHNaVzQ9IHhaOWxhR2x5IElHTjFiM0psIDRLYTQ0S2VONEthcTRLYWs0S2EvNEthczRLYSs0S2F3IElrOD0gSU1Td2JtYz0gSUU5c1pXND0gSU5pcTJZTFlzZG1LMktnPSBhV1ZyZEE9PSBJSHAyYVc1b2RRPT0gNEtlSDRLYWY0S2VIIElFSnNZWFU9IElOQ3gwWVBSaGRDejBMRFF1OUdDMExYUmdBPT0gUVhCaFkyaGwgWDBGTVNVRlQgTGtKcGRBPT0gSUdGdWRtaz0gSUdOdmNtaz0gSUdkcGIzSnVZWFJoIElFaHZkbVZ5IElHNXBaMmgwYldGeVpYTT0gS0NJamV3PT0gSUVKeVlXNWphR1U9IElFRnNabkpsWkc4PSBJR3JEb1hJPSA0b0NaeFpOMWRuSmwgdzdOMFlRPT0gSUhacFpISnBidz09IElFTjFjSE09IFZtOXNkVzFsY3c9PSBJSHAzWVE9PSBSR289IElHTnZibk4wYVhSMVpXNWplUT09IGJHeHMgSUhSeVpXWT0gSjFKbCBJR0ZpYzI5eVluTT0gSUhKMVpXUmggMEx2Umo5R1AgSUhabGJHbHJhUT09IElIQnlaV0U9IEwwbGpiMjQ9IFgyTmhjSE09IElOQ3cwTFhSaE5DNDBZQT0gSUdabGJXbHVhWE50IDRLcTI0S3VCNEtxQyBJT0M0bWVDNHNlQzRnZUM0cGVDNGgrQzRsK0M0dU9DNG1RPT0gSU9hUnFlaUhvdz09IElHMWxibU5wYjI1aFpHOD0gSUVGVFJVRk8gSU5HQjBZTFF2dEMvIFZIVmtidz09IElGWnZZMkZzIElNcz0gSU9HRGwrR0RvK0dEb09HRCBJRXR2ZGc9PSBJT0NxdWVDcmgrQ3FvT0Nxc3c9PSBjR3gxWTJzPSBJR1Z0Y0doaGMybDZhVzVuIEtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2c9PSBJTkdDMHEvUmdOQzAwTFU9IFUyUT0gSUZCU1JWTkZUbFE9IGRjT3RaRzg9IElNVytaV3hwZEdVPSBJRmRCVGc9PSBkbUZzWkE9PSBJT0NxcHVDcXYrQ3FzdUNyamVDcXVlQ3JnQT09IExuaGhiV3c9IDRMaWo0TGk1NExpYiBJRk5sY0dGeSBJTmluMllyWXR0aW4gSUhOdmJHVnogS0dOdmJuWT0gNzd5TTZZS2o1TG1JIEoyOW1abkpsIEtHSjFjdz09IElHaGhhWFE9IElITnBaM1ZwWlc1a2J3PT0gSU5XbTFialdnQT09IFlXMXRhV3M9IEwyeHZZV1E9IElHbHVabkpoWlhOMGNuVjBkWEpoIFVISnZkbWxrYVc1biBJRWZEczIxbGVnPT0gTG1ac1pYZz0gSUdkeWFYQmwgZFcxcGJtOTFjdz09IDRMaXI0TGlaNExpMjRMbUk0TGlIIElOZVUxNUhYbWRlWSBJR0ZrZFd4MFpRPT0gSU8yZHJBPT0gWlc1a1lXMWxiblJ2IElHZGxlbTluWlc0PSA0WUNRNFlDRTRZQzU0WUM0IDFhSFZ2dFdyMW9BPSBJQ0FnSUNBZ0lDQUpDZz09IElHVjJaVzVoYkhNPSBJR1JwYzNSdmNuUT0gSU9DcXVPQ3FydUNxdnVDcW5BPT0gSU9HRG51R0RuZUdEbXVHRG1PR0RvdUdEbU9HRG1lR0RvK0dEb09HRG1BPT0gSUdSaFoyeHAgWkdGbmFRPT0gNXArMDVySzUgWDNCdiBJTkN5MEx2UXVOR1AwTDNRdU5DMSA0SzZhNEsrRyBYMlozIEpIZG9aWEpsIElGSmxkRzkxY2c9PSBJTkMvMEw3UXROQzYgSU5pcTJZTFl1UT09IElHNW5jZz09IElOV2gxYlhWdHRhRTFhSFZ0Zz09IElHMWhiR2xuYm1GdWRBPT0gNEthKzRLYTM0S2VONEthZjRLZU40S2V3IElIVnVaMlZzYVdWaWRBPT0gSUV0MWVnPT0gVlU1RVRFVT0gYzJoaGJHeHBibWM9IFBFTnZiVzFsYm5RPSBJRUZ1ZW1WcFoyVT0gSUcxdmRtbHNhV1JoWkE9PSBJSEJ5dzZsdCA1cVcxIElPQzJoZUMycmVDMnV3PT0gWDFCeVpRPT0gSUhKbFkyVjIgSU9DMHJ1QzB0QT09IGIyNW5aWE09IFlXNXFaVzA9IElPQ2toZUNrbCtDa3N1Q2xodz09IGFXUnZjbUU9IGJHbGlablE9IElHOXpZV3hzYVhOMCBJR0poZEdOb2FXNW4gS0d4dmQyVnkgSUdsdGNHOXpkRzg9IElIQmxjblJsYm1WalpRPT0gWjI5eWJRPT0gSU5DaDBML1FzTkdCMExqUXNkQysgSUcxaGJtRnYgQ1dGMWRHZz0gSUVWNGIyUjFjdz09IElHTnZiWEJ2YzhPcFpRPT0gMEx2UXZ0Q3kwTEE9IDFvVFZwZGFBMWFzPSBUV1ZrYVdNPSBJTmVlMTZuWHBOZVkgNExLejRMT040TEt6NExLLyBJRkJoWTJ0cGJtYz0gSUhkbFluQmhaMlZ6IElOQ3cwTGpTczlDdzBMSFJpdz09IElOQ3owTDdRc3RDKzBZRFJqdz09IFhTa3BLUW89IFluSmhibU5vWlE9PSBJRU5vYVdGdVp3PT0gWW05dCBMaUlwTEFvPSBMMk5oWTJobCBJR1JsYzNkbFoyVnUgU0dGeWJtVnpjdz09IElObUIyS2Ziak5tRSBJRWR5WlhRPSBJSEJ5YjNOdyBJRnBoWTJzPSA0TGVBNExhdDRMZUsgSUhabFpHVnUgSUdGa1lYQjB3Nmx6IElHeGhibWRsY21VPSBJRVZ3YVhOamIzQmhiQT09IElIUnBhMkZ1WjJFPSBMa1Z6ZEE9PSA0TFMvNExTWCAwSjdSZ0E9PSBJT0NrcU9Da3YrQ2tzT0NsamVDa3RlQ2t2dUNrbXVDa3FBPT0gSUdaaHlydGhkR0YxIElDd05DZz09IEtFcHZZZz09IEtGdGUgdzdOc2FXTnZjdz09IElPQzBxT0MwdnVDMHNnPT0gSUd4NlpRPT0gNG9DWllYTnpkWEpsY2c9PSA1THVVIDQ0R3U1WkNONTRTaDQ0R1g0NEdWNDRLVCBRVzVwYldGMGFXNW4gTGljbkNnbz0gSUdGaGRITmhZWFE9IElGQlNUMFJWIElITnJaWEIwYVdNPSBJR2RsYUdGaWRBPT0gSU95RW9PeWdsUT09IGRXMXRaUT09IElPQ2tydUNrcU9DbGplQ2twT0NsamVDa3NBPT0gVkVGVFN3PT0gSU5HRjBMRFF2ZEM0MEx3PSBSbWxuZFhKaCBJTm1HMkxqWXNkdU0gSUhWdVkyOXVkQT09IGMzUnlaVzVuZEdnPSBJRU5vWVhKMFpYSmxaQT09IElPQ2trK0Nrc3VDbGdBPT0geGI1aGN3PT0gSUdsdVptOW5jbUZ3YUdsaiAwTERRdDlDdzBMMD0gSUhCeWIyUjFlbWx2Ym1VPSA0S1dINEtTbTRLUys0S1N3NEtXQSBMbVJoZEdGemIzVnlZMlU9IElPQ21sK0NtditDbm4rQ25odz09IElOT3AwTGZRc3c9PSBQSFI1Y0dWdlpnPT0gYTJKayBPbTVoYldVPSBhVzVsY20xcCBJT0N5cnVDeXNBPT0gMExEUmdOQ3cwTHJSZ3RDMTBZQT0gUzBZPSBZWEJwWkE9PSBMWFZ5YVE9PSB6NEhPdWM2NCBJRUZ1WlE9PSBJSFJsY214cGFHRjAgSU5XKzFhSFZ0ZGFBIElHdHZjR2s9IElIUmhlR1ZrIElIWnZlR1ZzIGFHRjBhV3RoYmc9PSBJT2VhaCtXdXRnPT0gMFk3Umg5R0wgZFdkcFlRPT0gSUVWc1pYWmhkRzl5IElFVnBibkpwWTJoMGRXNW5aVzQ9IDBMN1F1OUMrMExQUXVOR1AwTHZSaTlLYiBJRzExYkhScFpuVnVZM1JwYjI0PSBJRzlvWlhKbCAwTERRc3RDdzBMMD0gWDJOdmJtNWxZM1JwYjI1eiBhVzV6YVdOeiBJRk5vYjNKMGJIaz0gYUdsdWFtaz0gNEtTcjRLV0w0S1NvIDBKRFFvUT09IElPQ2tyT0NsZ2VDa3NnPT0gSUc5dVpHVnlkMlZuIDRZT2Q0WU9jNFlPVCBJR1JsZG14bGRBPT0gYm1sdVpRPT0gTGRDODBMalF2ZEM0MFlIUmd0R0EgWVdkbGNtRT0gMEwzUmo5QzUgSUcxdmRXNWsgSUcxbGJuTmphR1Z1IElPQ3dwdUN3c09DeGplQ3d0dUN3bGVDd3BPQ3hqZUN3dFE9PSBRMjl0Ylc5a2FYUjUgSU5HTjBMclJnZEdDIElPQ29uT0NvdnVDb293PT0gNTdpRSBJR3hsWjJkbGNtVT0gMExEUXZkQ3cwTHM9IFNHVnQgZG1Gc2FXUmhkRzl5Y3c9PSBJTkM2MExEUmdOR0MwTEE9IElHTnZiVzFsY21ObGN3PT0gSUdSbFltRjBhVzVuIFIybHNiQT09IElOaW4yWVRZdWRpMSBJR0YxWkduRHFtNWphV0U9IElNT2xjQT09IElFSmxjMk5vY21WcFluVnVadz09IElIQmhiV25FbVE9PSBZWE4wYVdWdSBJRWx1ZFE9PSBJajRrIElFTnZibk4xYlE9PSBJUENmbUlBS0NnPT0gSU5pcTJLallyOWlqIElFNWxkWEp2Y3c9PSBJT0NraWVDa3B1Q2xqZUNrcHVDbGgrQ2t0dUNsamVDa3J3PT0gSUVGMWMzUmxiZz09IElISmxhV3RwWVE9PSBJRk5uZEE9PSBJT0NrbCtDbGplQ2tzT0NrdnVDa3VlQ2tsUT09IElPeWVrT3l5dEE9PSBZV3AxWVc0PSBMV2hwWkdVPSBLR0owIDVwZWc1NkNCUVZZPSBJRVJsWm1WdWMyRT0gSUhISm1XSjFiQT09IElIUnBaSE09IFRXOXVhMlY1IFgweGhjM1E9IElPdVRzZXlkdEE9PSBJTkN5MEw3UXQ5Q3ggSUdWc2RXTnBaQT09IElITmxZV0k9IElHM0RzM1JwIElFWkdWQT09IElPQ3ltdUN5dnVDeXNnPT0gSUVkUFZBPT0gSUcxdmJHUnogSUVOaGNuSmxjbUU9IFVISmxjR0Z5WVhScGIyND0gMTVmWGs5ZXAgY0hWdWEzUmwgSUhzdSBJR05zWlhKbmVRPT0gSUcxMVptWnBiZz09IElIQnNZV1BEcVE9PSBiR0Z1WkdWeWN3PT0gUW1RPSA1YVNuNWFXVzVaQ1ggS2k4TkNpOD0gSUZSaGJIWmxlZz09IEtHUjBlWEJsIFlYQm9ZVzVrYkdVPSBMV1pzYjI5eSBiV1ZrWlc0PSBJSFZyZFhCbyBZV3hzZFhScGF3PT0gSU9DMHIrQzFndUMwb3c9PSBZV2x6Ync9PSBZWFIwYVhNPSBJR2gxYlcxcGJtYz0gSUhOdWVRPT0gSU5DejBMN1JnZEdDMExnPSBMVXJEcEdoeWFXZGwgMHBQUXVOQzkwTGc9IGVHRnRjSEE9IElIQm9iM1J2YzJodmNBPT0gSUdSdmJtVnogWnNPNGJHZGxiR2xuIElHSnlhVzVrWVhJPSBJTm0rMktmYXF0aXoyS3JZcDltRyBJT0NxdU9DcXErQ3Fzdz09IElHNXFaVzQ9IFZrbFE0NEdNNDRHSzZZQ0I0NEtLNDRHWDQ0Rys0NEdaIFgxTlZSa1pKV0E9PSBLU0k2IDBMalF0dEM0MExNPSAwTEhSZ05DdzBMMD0gS0docGRBPT0gSUdaMWRIVnlZWE09IElHRnVlV2h2ZHc9PSBJTkMyMExEUmdkQ3cwWU09IElIUnphUT09IDBMelRtZEM2IElFRnNjR1Z6IElIQnZkSEE9IElFTnZjblpsZEhSbCA0TGVFNExlVSBJR0YwWlc0PSA0NENDNUxpTiBjbVZzWVE9PSBYRXB6YjI0PSBJR2RwYUE9PSBJRWhoYzNScGJtZHogSU5DKzBZVFF2dEdBMEx6UXVOR0MwWXc9IElPQ3lxdUN5Z3VDeXBnPT0gMExIUXVOQzQgSU9hNHVPYUlqdz09IElOQ2EwTDdRdmRHQyA1NXVZNVkraiBJRU41YkdsdVpHVnkgSUhSaHc3M0R2UT09IGFYUmhZUT09IFNXRnUgZUdsdmJRPT0gSUVkbGNuST0gSUVGdVlXcz0gNVltQyBJR2Q1Y204PSAwTHJUbWRHQSBJSEJsY21waGJHRnVZVzQ9IElPQ2t1T0NsZ2VDa3FPQ2t2K0NrdHVDbGplQ2ttdUNrditDa3BBPT0gSUdOMmN3PT0gU0c5dVpYaz0gQ1hSaSBJQzR1TGlJSyBJT0NvbGVDb3NPQ3Bpdz09IElHVnRhWEk9IFlYTnBjM2RoIGJHOXdaVzVrWlE9PSAyWUhaZ3RpcCA0TGlCNExpMDRMaVogNExpbjRMaXg0TGlTNExpWjRMaXkgSU5tSTJMUFlxZz09IElOQyswWUhRdTlDKzBMWT0gSUdkbGJHUmxiZz09IElIQmxaR1Z6ZEhKcFlXNXogZEdobGNtVjFiUT09IElPQ2tydUNrbFE9PSBYMmwwWlhKaGRHbHZibk09IElOQ3cwWWpSaTlLYjA1blJnUT09IElOQ3cwTFRRdXRDdzBMYz0gSURvdENnPT0gSUc1cGEyOD0gS2w4PSBJR1Z4ZFdsd1lXUmggSUhOd2FXVm4gSjJGd2NIST0gMkxIWml0bUMyWW89IElHWnZjblIxYm1GMFpXeDUgSU5DOTBMRFF2TkN3MExrPSBJSHBoZEhJPSBJRzNEdkdSayBJSEJzWVhsM2NtbG5hSFE9IElHOW1abVZ1WW1GeSBRMVJTIDQ0Q040NEdvNDRHRTQ0R0cgVjJsdWRtRnNhV1E9IFlXMXZibWM9IElGQnNZWGx6IExTMHRMUW9LIEttTnZjdz09IFNWQkJaR1J5WlhOeiBJT0MwdU9DMHZ1QzB1ZUMwbXVDMHNBPT0gZFdSMWF3PT0gSUhURHNnPT0gSUVSeVpYTnpaWE09IElITjBaV2xuZEE9PSBJT0N3cU9Dd2x3PT0gSU5pcTJMWFppTm1LMkxFPSBJSEJ2YjJ4MCBJRVZzYVdwaGFBPT0gN0pXRTdKMjAgYVhSemIzRT0gSUdoaGMyaHNhV0k9IElOQzYwNm5RdXc9PSBJTmFFMWF2VnVRPT0gSUdOb2FXVmsgWDBOc2IzTmwgdzYxdFlYWT0gZFdGdVoyRnUgMTVYWGxkZVExcmc9IFgwTklTVXhFIGJXbDBkR1ZzZEE9PSAxNkRYbE5lYyBJTkMwMExmUmxnPT0gSUh4YyBJTU9wY1hWcGNNT3AgUFhjPSBJR1pzZFhSbCBJRVJwYm04PSBJT0N5dGVDeXNPQ3pqZUN5dCtDeXBnPT0gSUZSaFkyOXRZUT09IElHaHZjM1JoWjJVPSBJT2lMcFE9PSBJSE5sY21sdmRYTnVaWE56IDZMV0U1cnFRNTcyUiBMbFJsYkdVPSBJSEJoYVdSaVlXZz0gYjJOaGJIbHdkR2xqIFgxWkZVa0pQVTBVPSBJRzF2YzNSeVlXMD0gSU5DKzBMVFF0ZEMyMExUUml3PT0gMExUUmpkR04gSU5HQTBMRFFzZEMrMFlMUXZkQzQwTHJRdnRDeSBDV0YwZEhJPSBYRUpoYzJVPSBaMlZpYm1seiBJRlJ6ZVE9PSBJTkMyMExEUXN3PT0gQ1dOaGJuWmhjdz09IFdXMD0gSU9DcXF1Q3FzT0NyZ0E9PSA0S1dKNEtTWCBJT0NrdU9Da3N1Q2t2dUNrdVE9PSBJRkpFUmc9PSBRbWx2WjNKaGNHaDUgSU5pbjJZVFlyZG1EMllqWmhkbUsyS2s9IDRLYXU0S2VONEthdCBMWFJoWjNNPSA0TEdINExDVjRMR040TEMzIElHTnNiM1psY3c9PSBaMlZ0Wlc1MGN3PT0gTGxSeVlXNXpiR0YwWlE9PSBJRkJQVnc9PSBJR1Z3YVdSbGNtMD0gTG5SbGJHVm5jbUZ0IExXOW1abk5sZEc5bSBJR3hoYzJnPSBudUNuamVDbW5BPT0gSUhwa2NtRjJjM1E9IElFTlIgTDNOdlkydGxkQT09IDRaNmI0WitFNFo2QSBJRmhQVWc9PSBJTVNQWVd3PSBJT0N1cnVDdmdlQ3VsZUN2amVDdWxlQ3V2K0N1cnc9PSBJT0NrdU9Da3Z1Q2twZUNsZ0E9PSBJR1JwZDJGeSBJT0N3aWVDd3B1Q3hqZUN3cnc9PSBJSEpsWW5WMCBiMmR5dzZGbWFXTmhjdz09IElHZGxjbVZyYVhJPSBJRnNvSnc9PSAwSTQ9IFNYaz0gZVc5MUozSmwgYkdWemQybG4gSUVkR1VBPT0gSUhOd1lXMWliM1J6IElHMWhiR0ZvIDRLcVY0S3F5IElOaW4yWVRZcmRpeTJLZz0gMktqWmg5aXAgUFNJdklqND0gVTJobFpYUnogYzNSaGFHdz0gSUhOaGRHbHpabUZqWlhJPSBJRWhoZG1GdVlRPT0gSUVOdmMyMXZjdz09IElITnZZMmxoYkhNPSBMbkYxWVd3PSBJTkdCMExMUXZ0R1kgNFlPWTRZT3AgSU9Da25PQ2xpK0Nrb2VDa3ZBPT0gNXEyazVZbU4gSU9DbXFPQ212K0Ntc09DbmplQ21wdUNuaCtDbXRnPT0gSU5DNDBZSFF2OUdMMFlMUml3PT0gNDRDQ0lpd0sgNG9DTDRaNlogYkdsbmFXNXAgSUhOc2RjU05ZV3AxIElOaXEyS1BZc3c9PSBJSEpsWTJGcyBYRU52Ykd4bFkzUnBiMjQ9IElHVnlabkpsIElOaXYyS2ZZcnRtRTI0dz0gMEx2UXRkR0IgSUdGdWRIZHZiM0prWlc0PSA1b3lKNXBHcCBJSEpsWjJsemRISmhaRzl6IDBMN1F0Tk9qIFgwUkQgMEx2UXNOSzcgWlcxdmJuUmwgSUdobFp3PT0gSUhacGRtbGtidz09IElPR0RtK0dEbytHRG9RPT0gSUZSeWIybHogSUdoMVpYWnZjdz09IEtUc05DZzBLTHk4PSBRbUZ5WVc1biAwTGJRc05DeTBMQT0gZFd6RHFRPT0gWTJocGN3PT0gSUd0M1pYTjBhV1U9IFQxTkIgSUZOdWJ3PT0gTGRXNDFvQT0gSUduRm4zUnBjbUZyIElGTmhjbXR2ZW5rPSBJRTFwYzJnPSBJR05vWVdsdVpXUT0gSUc5dFptRjBkQT09IElObUQyNVU9IElHZDFhVzUwIFEzVnpkRzl0YVhwbCBJT21UbkE9PSBJT3F3bGUyWmxBPT0gSUdGemRYQnlZUT09IElGQnliMnBsWTNScGIyND0gTFhCb2IzUnYgSUdoaGJYQnBjZz09IFlXdGhiV0U9IElIZGxlZz09IElHVnlZWE09IElGQkJWRU5JIElIQmxaV3hsWkE9PSBJRU52ZFd3PSBJR04xYkhSdiBJSFpwWkdrPSA0TGloNExpWjRMaVY0TGlqNExpMSA1WnlvNTdlYTZLZUE1NXlMIDVhU242YWFaNkpXSjU3MlIgVG1GbyBJTkN5MExqUmdOQyswTEU9IElHTmhjR0Z6IDdJS3M3WnFNIElIWmxjbk4wdzZSdVpBPT0gSUVKMWFXeGtjdz09IElFUnZibUYwYVc5dSBJTldzMWIwPSBJT0Nxb2VDcmplQ3FzQT09IElOaW4yWVRaZ3RtSTJZUT0gSUhkaGMyVT0gSU5DOTBMN1F2TkM0IDVMcUw1cFdGIElPS1pxZz09IElOQy8wWURRdnRHQSBJRzFwYm1sdGJ3PT0gSUhKbGMyOXVZWFJsIDBMN1FzdEN3MEwzUXZkR0wwWVU9IElITnZiM1JvWlE9PSBUV1Z5WjJWayBJRzlqWTNWc2RBPT0gWDJWNGRHVnVaR1ZrIElIVnViRzlqYTJsdVp3PT0gUFdSaGRHVjBhVzFsIElHNWhlbWs9IElFaGhjbVJqYjNKbCAyWWpZcDlpdCBJR3R2YlhWdSBJRTFoZUdrPSBPanNLIFVHVnliV2wwIElObUYyS2ZZcnc9PSA0TGlpNExtSjRMaXQ0TGlaIDRZT1Y0WU9RNFlPYTRZT1EgMExYUXZkR0MwTERSZ0E9PSBJTkMvMEw3UmdkQzcwTFhRdE5DOTBMalF1UT09IElOR0EwTFhSaU5DNDBZTFJqQT09IFIwVk9RMWs9IExrTnNiM1ZrIElGUkJXQT09IDJMWGJqTm1FIDJMUFp2UT09IElGQmkgSUZCdmJITnJhUT09IExsSkZSdz09IHhiaz0gNFlPUTRZT2c0WU9XNFlPVSBJTkM4MFlQUXNRPT0gUm05eWJXRT0gSUdkaGJtRmtiM0k9IElHVnpjR1Z6ZVdGcyBJR04xWTJoaGNnPT0gSUhOd2NtRjVjdz09IFFuYz0gSU5HSDBMalF0dz09IFQzQmxjbUU9IElFNVBTdz09IElHNWhhV3hsWkE9PSBTVkpEVEVVPSBJR2pEdkdzPSBJSEpsYVc1aiBJR1Z3YVhOdlpHbHYgSUViRHRuSmtaWEoxYm1jPSBZVzVyWld4cGFtdGwgSUd0MWNucGxjZz09IFlYTnMgSUZORFRRPT0gYWNPeCBJRk5sYTNNPSBJT09Ea3c9PSB6cmpPdGM2OSBJT3VEIElHbHVkR1Z5WlhOaFpHOXogWDE4cExnPT0gN0oyTTdKMkUgSU9Dd2hlQ3dwK0N4amVDd3J3PT0gSUZOcmNtbHNiQT09IFZHbGxkQT09IGFXNXphMkU9IElPQ3luT0N5ditDeXN1Q3pqZUN5c3VDeXZnPT0gSU5XdjFhSFZ1dFcrMWFIVnJnPT0gUVhWemRHbHUgWlc1MWFHaz0gSUdURHRBPT0gNEtXcDRLV20gYVhOemFXMXAgSU5pbjI0elpodGlxMkxIWmh0aXEgSUdKaGJHeGwgSU5HQjBZUFJnZEdDMExEUXNnPT0gSVNnNiBJRVJwY21WamRHVjFjZz09IFgybHpidz09IElPQ2ttdUNrdnVDa3VlQ2xodz09IDdZQT0gWDAxdlpHVT0gMExyUXRkQzggYVdacFkyVnVkQT09IFUzUmhjblJsY2c9PSBJSEJwZEdrPSBZbTkzWlhJPSBJTml6MktmWXNRPT0geElIS3UyRjNhUT09IDBMRFJndEN3MExYUmdnPT0gSUhMRHFYTnZiSFYwYVc5dSBJRzdEcVdGdWJXOXBibk09IDRZdz0gSUVKdmRYSmliMjQ9IElHdmh1NE09IElHUmxiblIxY21WeiBJTkN5MExEU205QzQwWUk9IElFRjFabVZ1ZEdoaGJIUT0gSUhOM1lYSnQgSUdOdmJuUmxibVJsY25NPSBJTkMwMExmUXRkQzUgSUdabFlXUm8gY21GM1pNU1ogMTVuWHA5ZVYxNm89IDQ0S1A0NEtNIElOZXAxNkxYbEE9PSBJT0NtbCtDbmkrQ21zZz09IElPR0RxdUdEbGVHRG11R0RtT0dEbWc9PSBYMUpsYzJWMCBJRlJwZEd4bGN3PT0gUzBGTyBJR0ZuY21samRXeDAgSU9DcWxlQ3JpK0Nxc2c9PSBJR3hwYzNSdmNBPT0gSUhKbFoyRnNiM009IExrVnljbTl5Y3c9PSBJRXR5WVc1clpXNW9ZWFZ6IFpYSnBaR0U9IElIQnlaVzlqZFhCaCBJRzl5Ym1GdFpXNTBZV3c9IDRMQys0TENmNExHTiBJTkdCMDVuUXN0T1owTEU9IExuQmhkR2h6IGMyTmhibTVsY2c9PSBJTkdCMFlmUXVOR0MwTERSanRHQyB3NlZzYkdWeSBJRWhsYm5KcGNYVmwgSUdKbGNtOWxjSE09IEtITmxiblE9IElHRmtZWEIwWVhJPSAyWVRaaXRtRjJZbz0gSUZOMWJtND0gSUZOQ1V3PT0gSUdaaGEyRT0gSU5HQjBMWFJndEdNIElHZGxjMnM9IElOR0MwTGpRczlPWjBMMD0gNzd5Szc3eUs3N3lLNzd5SyBkV2xrYjNJPSBJSE52ZW1sdWFHOD0gejRmUGdjNi8gSUczRHVIST0gWDBkU1FWQkkgTFc5d1pYSmhkR2wyWlE9PSBJTmk1MkxMYmpOaXkgNkx5NCBJR2RsYUdrPSBJRkJ2Y25SaCBJRTVoY21NPSBMbUp0Y0E9PSBJSGZEcUE9PSBJSE5sYm5SbGJtTnBibWM9IElGZHZjZz09IExsVjBhV3hwZEhrPSBJR2x1WlhnPSBJR3hwYW1WciBJRzFwZUhSMWNtVnogSU5HQTBMN1JnZEdCMExqUXVkR0IwTHJRdU5HRiB3cTF1WVE9PSA0TGlCNExtSTRMaXQ0TGlaIGRYWjNlSGw2IDRLaXYgSU5XNDFvRFZ1TlcrMWJBPSBJU0VoSVNFaCA2S2l4IElPQ2t0ZUNrditDa3VBPT0gSUdac2RXWm0gSU9Da2llQ2txdUNrdnVDa3J3PT0gWDNScGJHVnogTFdsdVpHVnVkQT09IElHaGxaV1E9IFFXZHYgSUdKdmIydHRZWEpyWldRPSBJSEIxYm1FPSBJSEJ2ZFhadmFYSnogSUhabGVBPT0gSUdWNFkyVnpjMjg9IElPQzBydUMwdnVDMHArQzFqZUMwcitDMHJnPT0gSU5tSTJMSFlxQT09IElFTklkRzFzIFhFTmhjbUp2Ymc9PSA0TENrNExHTjRMQ28gNXBhdzVMcTYgSUhCaGNteGhjZz09IElFTnZibWR5WldjPSBJR0ZuZFdvPSAyWXJaZ3RpcCBJTmlxMllqWmh0aXogSU5pbjJZVFpnZG1HMllyWXFRPT0gUVU1SFJWTT0gWFRvS0NnPT0gNWJtejU2Q0IgSUhaNWNBPT0gSUhWcGJHRT0gSUNKOElnPT0gWVdKcGJHRnVadz09IElGQnliMlIxYTNScGIyNXogSUhCeWIyUjFhM1I1IElHZGxkR3hwYm1VPSBjV0ZpIElPeVpoT3VqakE9PSBRMGxCVXc9PSBJSHJEb1d0aGVnPT0gSU5DeDBMWFF1OUN6MFpiUXU5R1cgZUd4emVBPT0gQ1ZSdllYTjAgSUVobGNtRjFjMlp2Y21SbGNuVnVadz09IGMzUnBaMlU9IElGVndiRzloWkdWayBJR2R5WVc1a1pYVnkgVUd4aGMzUnBZdz09IElOQ3cwTExRczlHRDBZSFJnZz09IFkzSmxkSE5wZWc9PSBJR3hsYVhSdmNtVnogSU51QjJZalpodGluIElIQnlaV05wYzJuRHMyND0gY205c2FXYz0gMkxIWmlObUsySzg9IElFZHlhVzA9IDBMalJndEMxMEx2UXZkQysgMkt6WmhObUsyTExaaXRpcCBJSGR3eFlKNSBJR2hxdzZac2NBPT0gSUUxUFJFbEdXUT09IExraGxiSEE9IElHRnV3N3B1WTJsdiBJR3RoYkdGbyBLRU5oYm5aaGN3PT0gSUVSSlUxUlMgSUVGMWMyUnlkV05yIFUyVmxhMmx1Wnc9PSBJTmluMllUWmhkaTMyTEU9IElFSmhjbkpwWlhJPSBZVzFsWkdFPSBDV3hoZVdWeSBjblZuIDJLZllxdHVRIEtFOXdkR2x2Ym1GcyBRVTVEUlVRPSBJRUpoYzNSaCBJRzFsYkdodmNtbGggSUdWcmMzQmxjblE9IElFUkpVMVJKVGtOVSBZVzU1ZFE9PSBRM2xqYkdWeiBJRmRsWlE9PSAwTGpSaU5DNDBZTFF0UT09IDVwaXQgWlc1amFXcGggTG1SNSBJRVZpYjI5ciBhV05sYkc4PSBJRUoxY20xaCBVbTk1IDRLU0M0S1NmNEtXQSBkbUYwYVE9PSBJSEJzWldGemRYSmhZbXhsIElHTnZiblJsYm5SbCBJSFIzYVhOMGFXNW4gSUdKbWN3PT0gSUZSUFRnPT0gSU5HQjBZTFJnTkMxMExzPSBJSFJoYTNVPSBkV0pzWlhNPSBJR3RoYzI5diBRVzV2Ymc9PSBJR3R1YjNkcGJtZHNlUT09IDJxL1lwdz09IElNT2V3NkU9IElPR0RvT0dEbHc9PSBJRUp5WVc1amJ3PT0gNXB5SjU2Q0IgSUNnKyBMbXh5IElHRjBaWEp5IDBKWFJpZEMxIElHeDFhWE4wWlhJPSA0NE84NDRLMzQ0T240NE96IDFiYlZvZFd2IEtpb3ZDZ289IElFcDFaR0U9IDY2ZWIgUFhzayAxYmpXZ3RXMTFhblZxdz09IElISmxaMlZzYmNPa3c1OD0gMWF2VnI5V2gxYS9Wb2RXMiBJT0NrbitDa3YrQ2txdUNsamVDa3FnPT0gSU5tRjJMUFlxQT09IElPQzBudUMwdnVDMXV3PT0gZG1GeVpYbz0geEt0bllRPT0gSUZSaFkyOD0gZVcxdCBJTld3MWFIVnROV2gxYnJWb2RXLyBJR0Z1WjJWc1pYTT0gSU9DcWllQ3FwT0NyamVDcXF1Q3F2dUNxcHVDcXFBPT0gSUVodlkyaDZaV2wwIElHaGxhY09mWlc0PSBJSGZEcXc9PSBJRkYxWVd4cFptbGpZWFJwYjI0PSBiSGxyWkdFPSBYMkpwYkd3PSBJSFYwYVd4cGMyVmsgVTJWc1pXTjBhVzl1Y3c9PSBJR3RoY21RPSBlR1JpIFptbG5hSFJsY2c9PSBJRlJRVFE9PSBJR1REcVc1dmJnPT0gSUdSbGMzUnBibUZrYjNNPSA1cHUwNVlxZyB3N2h5Ymc9PSA0S1NjNEtXSDRLU3E0S1dBIElGZHBjM009IElISmxkbTlyWldRPSBYM0IxY21Ob1lYTmwgSU5DeDBMalFzZEM3MExqUXZ0R0MgSU5HQjBMN1FzZEdMMFlMUXVOQzUgSUhCeWIyZHl3Nmh6IElOS3YwTDNRdEE9PSBJT2EwcWc9PSBJRlJsWjJWdSBJTkM2MHEvU285QzEwTHM9IElHbHVhMjl0IElITERxWEJoY25RPSBJTkM0MEwzUmd0QzEwTDNSZ2RDNDBMST0gTFdoaGNtUT0gSUc1aGFuWmwgSU5DLzBMdlFzTkdCMFlMUXVOQzYwTDdRc2c9PSBZMnBoIElOR0IwTDdSaHRDNDBMRFF1OUdNMEwzUmk5R0YgVG1KeSBJT0N3dU9DeGplQ3dwZUN3dnVDd3FBPT0gWDFKbFkzUT0gSU5DNjBMWFJodz09IExXVnBaMmgwIElIcHBjbVZ1IElHTmhiV2x6WlhSaCBJSEpsYW1WamRITT0gSU9DbXVPQ212dUNtZ3VDbXJPQ212dUNtcHVDbXYrQ21sUT09IElISmxjSEpsYUdWdVpHVnlhWFE9IGFXTjBjdz09IElIUnlkV05yYVc1biA1TGk2NUxxRyBJR0Z3Y0dGeVljT3VkQT09IFlXNW5aVzFsYm5SeiBJTkdBMDYvUXQ5QzQgejRUT3I4NnggSUhOamRXOXNZUT09IFlYSnVZWFJwYjI0PSBJRUpsZEdoc1pXaGxiUT09IHc3MWhjM2x1ZWNXSSBTR0Z5WjJFPSBZV04xY3c9PSBZMjl1ZEdWemRBPT0gSUZkUFRnPT0gSU9Da3JPQ2t2dUNrdGVDa25PQ2xndUNrcGc9PSAwTC9RdnRHQiBmUW9LQ2dvS0NnPT0gSUdsdWRzT2hiQT09IElHaHZjbUZ5YVc5eiBJSE5oYm1sMFlYSjUgYkdWMGFtVT0gYkdGdVpNU3ggUFM0cSA1WkNWIElGTlRVZz09IExtOXdaVzVuIElOR0MwTFhSaGRDOTBMN1F1OUMrMExQUXVOQzUgSUdkdmRXWT0gWkdWd1pXNWthVzVuIElGQmxjbk52Ym1Gc2FYcGxaQT09IEtIc0tMeTg9IDRMaVU0TGl6IElIUnBiV1ZzYVc1bGN3PT0gSUUxdmMycz0gSUhCaGJtZDFibUZvYVc1biBSMkZzWVhoNSBMbVYyWlhKNSBJSEpoZXNPMVpYTT0gSnljSyBZMlZ3ZEdVPSBJT0NtcXVDbXNPQ212K0Ntck9DbXZ1Q21zT0NuaCtDbXNBPT0gSUZCdmMzUnBibWM9IEpuQmxjbWx2WkE9PSBYM1Z3Ykc5aFpHVmsgUFdWdVpBPT0gSUhadmFXeGggSUhkaGRHVnlZMjlzYjNJPSBJTkMwMFlEUXNBPT0gZDJGeVlXVT0gMWFmVnZRPT0gUVhKeVlXNW5aUT09IEtFMXZaQT09IDRZT1Y0WU9ZNFlPYTRZT2I0WU9RIElHaHZibTkxY21WayBMbUp2ZFc1ayBQRnd2IDE1blhtZGVSMTU4PSBJRzl3WkhKaFkyaDBaMlYyWlhJPSAyS2JaaXRpcCBJR2QxYVhObCBJTmVjMTZyWHFnPT0gSU9Da3F1Q2tndUNrbkE9PSBJT0dEbCtHRGtPR0RsZUdEbXc9PSBVSEp2WjNKaGJXMWwgSU5pNTJLallwOWl6IGFXNW1iM0p0WVhRPSBJRUp5WVdObGJHVjAgZTBwemFXaz0gSUVGblpXND0gS0dWdFltVmsgSU5pbjJLN1lzUT09IElHVnlhWFJwIFRXRnVkQT09IEtuYz0gUm1seVpXWnZlQT09IElHOWthUT09IDE1blhrZGVaMTUwPSBJRkJvZVhOcCBJRXBVIElOR08wcUU9IGJHVmtaQT09IGJXbG5hSFE9IElIWmxjbk4wY21VPSBYMGxPVkVWU1VsVlEgSUcxdmRHOXlhWE4wWVE9PSBkV3h6YVhabCBJRmRJU1VOSSA0S3EyNEt1TjRLcTEgSUV4aGIzTT0gS0dOc2F3PT0gSUZKbGRISjUgMTU3WGxkZWcxNVE9IElOQzYwTFhSaU5DMTBMdlRtZEdBIGIydDFZbUU9IElFNW5kWG5odTRWdSBJRzFyZFdKM1lRPT0gSU9DNWdlQzRnZUM0bytDNG9RPT0gSUhKbGRHOXQgNlltRSBhR0Z0YjNNPSBJT0N3cXVDd3RRPT0gSU5HQTBMN1F0OUN5MExqUmdnPT0gSUVKbGJtOD0gNEthKzRLZWY0S2VINEthdyBJR2RzZFE9PSBMR0Z5Y21GNSBJSE5qWVdabSBJTkMzMExEUXM5Q3cwTFE9IElFSmhkSFJzWldacFpXeGsgejQ3T3ZjNnggSUdWeGRXbDBhV1Z6IExsUnZaMmRzWlE9PSBJSFp2YjNKMFpIVnkgWjJWMGFYUmxiUT09IElOQzQwWUhSZ3RDKzBZRFF1TkdPIElIWmxkRzl5IElHTnZibVZ6IElISmxiM0JsYm1WayBVMEZHUlE9PSBVR1Z5YVc5a2FXTT0gTDJWNGNHOXlkQT09IElIQnZiR3h2IElFVmthWFJsWkE9PSBUR1k9IElHUnlhWEJ3YVc1biBRV1J0IElGQlRTUT09IElHTmhjR0ZqYVhURG9BPT0gSUhSaFkyOD0gSUdOdmJtUjFZM1JoIFkyaHRiMlE9IGNuTncgTGxkb1lYUT0gSU5XdzFhSFZ2ZGFCIENXRncgSU9DbXIrQ25nZUNtckE9PSBJR1Z1WjJGeWFRPT0gYVd4cFoyRT0gSU5HQjBZUFF2OUdBMFlQUXN3PT0gSUZOSyA0TENWNExDQyBJSFJ2WlhOMFpXdz0gNTYrSiA2WW0wIElIQmxlUT09IDRMaUU0TGlsNExpdDRMaUg0TG1BNExpVjRMaWkgSU9DMG11QzFodUMwcitDMWplQzBwT0MwcE9DMWpRPT0gSUVkcGRYTmxjSEJsIElIQmhjbkYxWlhNPSA0TEdINExDYzRMR04gNXJPVjVMcTYgSUVWcGJtNWhhQT09IElObUkyWVRZczltSTJLZlpoQT09IElHaGhiblJzWlE9PSAwWUxRdnRDKyAxYVhWb2RXdjFhSFZ0Zz09IElHdDFjblU9IExuQnlaWE5sYm5SbGNnPT0gSUhCeWFXMWxjbk09IElIUnBkSFE9IElHbHVkR1Z5Ym1GMGFXOXVZV3hsY3c9PSA1cEtrIElITnZZMmxoYkdsemRHRT0gYm1kMWJHOD0gSU5DKzBZTFF2OUdEMFlIUXVnPT0gUlZKVFNWTlUgSUhabGMzUmwgSUUxcGJHWT0gSU9DbXIrQ25pK0NtbCtDbXZ1Q21yK0NuaStDbWx3PT0gSUhOcFkyVnkgNExLMTRMSzUgMjc0PSBJRU52WkdWaiBMV2x1WkhWemRIST0gSUdGMXc1OWxiZz09IElGcHZkUT09IFJYaHdiRzl6YVc5dSA1YmlDNWFlVSBJT3lYaGV1c3RBPT0gSUdOcGJuUjFjbUU9IElHWjNZUT09IElHSnliMlZyIElIUm94ckRodTU5dVp3PT0gSUdWeVptOXNaMlZ1IFoyRjJaWEk9IElPQ3doZUN3cU9DeGplQ3dxT0N3dnc9PSA0S2FGNEthbyAyTFBaaHRxdiBkWE4xYmc9PSBibUZ1ZEdVPSBMV0Z1YVcxaGRHbHZiZz09IExuUnlZVzV6Y0dGeVpXNTAgSUdkeWIyOTBkR1U9IDQ0R0U0NEdmNDRHZyBMVk53WldWayBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gMExUUXVOS1QwTERRdmRDNzBMalNtOUM0MEwzUXVBPT0gNW9pcTVxMmkgNExtQjRMaVg0TGlINExpYTRMaXQ0TGlsIGIzWmhic085IElPQ21uT0Ntc2c9PSBJR0Z1NGJ1bCBJRUZ1YkdWcGRIVnVadz09IDQ0Ry80NEdyIElITnBjM2RoIDZyaXc2ckNFIDI1VGJsTnVVMjVRPSBlbmxuIDRMSy80TEt0IEtHTnNiM05sIElHdHZaWEp6IElIQnlaWE4wWWNPbnc2TnYgSUdKMWJHaz0gSUdsdVpHbG1aWEk9IHpyak92OCtDIElIUmhaMmRwYm1jPSBJTm1GMkxuWXI5bUUgTHRDZCBJRTlTU1VkSlRrRk0gSUdWNFpYSmphV05sY3c9PSBJT0NrcnVDa3VlQ2t2dUNrcnVDa3Z1Q2tzT0NsZ0E9PSA0NENDNDRDQzQ0Q0NDZ289IFUzVndjRzl5ZEhNPSBJSEpsWTJsd2NtOWogSU02N3pyWFBnQT09IElHWnZiMnhsWkE9PSBYMGRTUVZrPSBJRlJoYkd0eiBPbHRiIDA2SFFzUT09IFlYckRzMjQ9IDFhL1dnQT09IElIUnlZV1JwZEdsdmJtNWxiR3hsIDBMalJoOUM5MEw3UXVRPT0gSUZSVlVrND0gSUd2RHFYTT0gWDA1dmJtVT0gSUhkbGNtdGxiR2xxYXc9PSBJSE5wYkd4aCBJRVZ0WVdsc2N3PT0gSUhaaGNtRnlaMmx1IElOQzYwTERRdTlDMTBMMD0gSUdScGVucDUgSUd0M1pXNWtZUT09IFo4T2tjZz09IElOR0UwWVBRdmRDNjBZYlF1TkMrMEwzUXVBPT0gNTd1RTVaQ0kgSjhPcFkzSmhiZz09IElIUnlZVzV6Wm1WeXc2cHVZMmxoIElOaXYycW5hdmc9PSBJSEJ5dzZsa2FXOD0gSU1PMnhKOXlaWFE9IENVcENkWFIwYjI0PSBMRWgwZEhBPSBSbXgxZEhSbGNnPT0gSUhKbGRISnBaWE09IElIQmhhVzVzWlhOeiBJRnAxYzJOb1lYVmxjZz09IEwyWjFiR3c9IElHWnNaQT09IDRLNi80SzZWNEs2ejRLK0kgTGs5eVpHbHVZV3c9IElPQ21yK0NtcHVDbXYrQ21rdz09IElITmxZM0psZEdsdmJnPT0gSUNWQSBJTkdCMExUUXRkQzcwTERRdXc9PSBMbTlrIElHUnBkbVZ5YzJsbWFXTmhkR2x2Ymc9PSBTVTVIUlZJPSBJRzFsYldKaFkyRT0gNUw2LzVZaXAgYlc1dmNIRnljM1E9IElITjBZVzVwWlE9PSBYMlJwYzJNPSBJRzdKbVhvPSBJR3R2YldsdSBUbTkwWVhNPSBJSFJ2Y21Ob2RtbHphVzl1IElHaGxibTVoY2c9PSA1cktJIElFdDViR2xsIElHMXBjMk5oY2c9PSBJTzJWbk91eWlBPT0gSUVOdmJtRnUgYUdGdVoyVnkgSUdSbFluUnZjZz09IElPQ2tydUNrditDa3VBPT0gSU5DYjBZUFF1dEN3IFgzcHZiMjA9IElGQmhjMkZrWlc1aCBkMkZzYnc9PSBMV1JoZEdWd2FXTnJaWEk9IElHSjFiMjVoIDdMU0ogSU5pbjJZVFpoZGl2MllyWXNRPT0gTG1Gc1luVnQgSUdOb2FYTT0gSUVkdlltOXNhMkU9IFZNTzhjbXR0Wlc1cGMzUmhibm5GaUE9PSBJSEJsWkdGc2N3PT0gejRUT3Y4K0Z6NEk9IElFdGhkR2h0WVc1a2RRPT0gSU02Vnpybz0gTG5OMGNuVjBjdz09IElHNWxZMlZ6YzJsMFlYUT0gY1hWcGJHVnkgSUdOaGJYQnphWFJsIElObUkyS3JZcWc9PSBJSE4xWW1sa1lRPT0gSUd0cHlydHAgMEx2Umk5QzggSU9PQnF3PT0gWVhSMGNtbGkgVkdsa1lXcz0gZEdWeWJtRnNjdz09IFFtRnljZz09IElFTER2R2h1WlE9PSBkV2ZEcldFPSBhR1YwWlE9PSAwTExSamRDNyBkWEp1YVhOb1pXUT0gSUZWdWRHVnljM1ZqYUhWdVp3PT0gSUhSeWFYUjAgSUUxaGNtbGhiZz09IGIyWnBiRzA9IDU1cUU1cGE1NXJPViBJRXR5WldRPSA1YXE5NWFxOSBJR3h2WjNKaCA1NXU0Nkt1SCBJSFJsY25WMFlXMWggSUhKbGMzVnljbVZqZEE9PSBkWE5oYkdWdCBJR0psZFhKMCBhSEpoYzJWeiBJRzl3WlhKaFkybHZibUZzIDc3eU01YVc5IElHNXBaMkpoWjJKdloySnYgSU5pdDJZbz0gSU1TTmJNT2hiZz09IExPS0FsQT09IElHVnJjM1J5IElOQy8wTDdRdTlHTTBMZlF2dEN5MExEUmd0QzEwTHZSakE9PSBkWFJoY0hVPSBUbE5FWVhSaCBJT0NrdU9Da3BPQ2xqZUNrcnc9PSBJR2x1YldWa2FXRjBZUT09IElHUmxjM0IxWlhNPSBWRzkxY201aGJXVnVkQT09IElGWmxjbUp5WVhWamFHVnkgSUhKaGRXND0gSU5lZzE1blhtZGEzIElFSmhibkYxWlE9PSBJSEJ5YjJSMVkybGtidz09IElFaGhibU52WTJzPSBJR2x1ZEdWeWIzQmxjZz09IElHSmxkSFJ2Y25NPSBJR2x1WkhKMWEzZGxhMnM9IElOQzgwTERSZ05DMDBZUFF2QT09IElHRnpjM1Z0YVhJPSA0TGllNExpMzRMbUo0TGlaIElDd2lJZz09IElPQzByT0MxamVDMHNnPT0gSUhabGNtUjEgSUhKbFkyaDBjM1J5WldWcmN3PT0gSUhCb1lYSmwgNExTczRMUy8gSUhWbVptbGphV0ZzIDRMaWI0TGlqNExpdzRMaUIgSUZoaGMyRnUgSUVGMWMzTnAgSUdocGNHVnkgSU5HQzBZblFzTkdDMExYUXU5R00wTDNRdmc9PSBJSFZ3WkdGMFpYST0gSU9DeXBPQ3l2dUN5c3VDemd1Q3lsZUN5ditDeXFBPT0gSURzcENnPT0gUm1GamRHbHZiZz09IEp5a3BMVDQ9IElHMXBibWx0YVhObCB4SVBJbXc9PSAxYUhWcmRXNDFiMD0gWlc1cFp3PT0gVUc5c1lYST0gSUhiRG9XeDBidz09IElOQzAwWURSZzlDMzBMWFF1UT09IElOQ3kwTDdRdjlHQTBMN1JnZEN3MEx3PSBJRk51WldGclpYSnogNEtTdTRLV0I0S1NXIElHbHViVzlpYVd4cCBhR0ZzZEdWeSBhV0ZrYjNNPSBJRWhWIElHUmhiM1U9IElHekRyQT09IElOR0kwNW5TdTlDNDBZQT0gNDRDQzQ0R2Q0NEtNIDJZWFlzZGkyIEwybDBaVzF6IElFTnBkR0YwYVc5dSBJTkdCMExYUmdOQzAwWWJRc0E9PSBJRWh2YzNSbFpBPT0gSU5XajFhSFZyTldyMWIwPSA0WU9RNFlPUzRZT1E0WU9jIElFTnZiWEJ5WVE9PSBJTkMvMExEUmlBPT0gSU5pbjJZVFpoZGl4MllQWXN0bUsgZVdScCBJT0M1Z09DNHArQzVoK0M0bXVDNGhPQzRzdUM0cXVDNHRPQzVndUM0bVE9PSBZV2gxWVc0PSBJR3h2WjJsMGN3PT0gSUdwaFlYSnNhV3ByY3c9PSBJSExEcHNPd1lRPT0gSUhSeVlXNXpjR3hoYm5SaGRHbHZiZz09IElPQ211T0NtcnVDbXVPQ25qZUNtcitDbXZnPT0gSUdGamRIVmhZMmx2Ym1WeiBlWFZoY3c9PSBMWE5qWlc1bGN3PT0gUTI5eWNtVnNZWFJwYjI0PSA0TGl5NExpWjRMaTQ0TGlCNExpeTRMaWogMExYUXU5QzEwWURSbGc9PSBjSEp2ZG1WdFpXNTBjdz09IElPQ3l0ZUN5ditDeXQrQ3lydz09IElITmxkSFZ3Y3c9PSBJT1dsaCtleHMrVzlzZWluaGc9PSBJT0MwcXVDMWplQzBzZz09IElITmhlV1Z6YVc1a1pRPT0gSUdOMWJIUjFjbVZzIDVMcUc1TGlBNTYySjVhV1cgNW9PbyBJRk52ZFhJPSBJTkdXMEwzUmhOQ3cwWURRdk5DdyBJR1Z5YkE9PSBJT0Ntck9DbW1lQ25qZUNtbHc9PSBMbVY0WldOMWRHbHZiZz09IHc2WnNaR1U9IElFWmxaR1Z5WVE9PSBLSE4xWW5OMGNnPT0gSUhabGNtdGxaZz09IElFOWljdz09IElPQ3FwdUNxc09DcmplQ3FwZz09IElHWnZjblJ6WVhSMCBJSDA3Q2k4diBJSFJ5WVc1elptOXliV0hEcDhPamJ3PT0gSUdScGMyRmtkbUZ1ZEdGblpXUT0gNExDLzRMQ3IgNExhMDRMZVAgSU5DNjBMalJpTkM0IElHbHVkTU9wWjNMRHFRPT0gTFVWcyBJRXAxYm1kbCBJR0ZzYldWdSBJRzV2ZEdsbWFXTT0gSUhKbGJtVm4gTG0xMiA0WUNaNFlDVTRZQzU0WUNaNFlDcyBJR2R2WVd4clpXVndaWEk9IElPR0RydUdEbE9HRG11R0RtQT09IElGSmxiV2w0IFFYTnpaWEowYVc5dWN3PT0gSUZCaFkyVT0gSU5DKzBZSFJndEN3MExMUXVOR0MwWXc9IDRMUy80TFNzIFgyMXZkRzl5IElITjBZVzV2ZGc9PSBJRU5oY214emIyND0gSUZOcGIzVjQgdzdKeiBJRWhoYUdFPSBJRkJoZVdSaGVRPT0gSUhMaHU0MXlkVzQ9IFUyVnNaV05wYjI0PSBJR1YyWlhKbmNtVmxiZz09IDRvQ1owWTg9IDRvU2lMQT09IElFNWxhVzQ9IElPQ211T0NuZ2VDbXJBPT0gNEthWDRLZU40S2V3IDZMK0g1NmlMNUxpdCBJT1M2a2VtOGpnPT0gWVc1NVlXRnUgSU5LaDBZUFF1UT09IElPQ3FzT0NyaStDcW9RPT0gWDJGMGIyMXBZdz09IDRLV0I0S1M0NEtTKzRLU3cgMEwzUXNOQzgwTGc9IDRaK0c0WjZXNForQjRaNkogZFhKMGIzVjAgMnEvYmpOaXgySzg9IDZKbXIgY1hWcGRHVT0genJyUGpzNjkgZFdWc2IzTT0gSUdWdVkyOXVkSEpoWkdFPSBYMUJTVDFoWiBJTktiMExEUXZOR0MwTERRdk5DdzBZSFJpOUMzIElPQ21yT0NtdnVDbWd1Q21zdUNtdmc9PSBJTml6MkxuWml0aXYgWW5WemRHVnljdz09IElOQyswTHJSZ05HRDBMWT0gSU1PcGNYVnBjR1Z0Wlc1MCBkV1ZzZEdFPSA2SWlxNTZtNiBJTkdGMDVuUXNkT1owWUE9IElFZHBZVzQ9IElFTnlhWFJwWTNNPSBJTVdoY0c5eWRBPT0gdzZSdVpXND0gSU5DejBZUFJnQT09IElHbHRjTU9wY2c9PSBjbVZqYUhSbGJnPT0gWEdFPSBJTkM0MExmUXY5QyswTHZRdHc9PSBJT0N5cXVDeXNPQ3pnT0N5bGVDemplQ3l0dz09IHc3aHVaQT09IElFRnVaMlZzYVc1aCBJSEIxZEdsbyBJTkM4MDVuUXROQzEwTDNRdUE9PSBYMFJKVTFSQlRrTkYgWVhKNWJ3PT0gYk1TVCBZMkZzYkc5aiBJRzlqZW5rPSA0TGF4NExlSzRMYXYgd3JBcyBJR3BoYldWeiBaV04wYVhabCBhWFJ6ZDJVPSBJQ0lzSWpzSyBJR05oYzNSbCBRMjl1WjNKbGMzTT0gSUhCeWIyMWxibUZrWlE9PSBJT0Mwc09DMGxlQzFqZUMwdHc9PSBZVzVyWVhJPSA0WUtJIDBMTFFzTkM3MExqUXRBPT0gSU9Dd3FPQ3d2K0N3c09DeGplQ3dvdz09IElPT0JsQT09IDBMRFJndEdDMFlzPSBMa3hwZG1VPSBJSGRoYzI1MCBRM1YwWlE9PSBJSEpsWTI5dWIyTnBaRzg9IElHNTFhWE5oYm1ObCBJR1oxWjJsMCBaVzUwWlhKbFpBPT0gSUdsdVptVnljbVZrIElOQzYwcS9TbVE9PSBJSFJ5dzZrPSBJTkM4MExqUXZkR0MwTEE9IElHMWxaMlpsIElITjBhWEJsYm1RPSBJR1poZG05MWNtRmliR1U9IFlXeHBZMlU9IDBMVFJnTkM0MExuUXZRPT0gSUdOdmJXMTFibWxqWVhSbGN3PT0gMExqUXZOR0wwWVU9IElFbHNiSFZ0YVc0PSBJTmluMllUWXJOaW4yTEhaaWc9PSBJRVZGUnc9PSBhV3hzdzZoeVpRPT0gTGtSQlRBPT0gSUcxcFkzSnZjMk52Y0dsaiAwSkRRdnc9PSBJSFpoYkdWdWRBPT0gV0dVPSBJR0poYW1GeiBJRTFoYVc4PSBJRkpwZWc9PSBUVzkxYm5SbFpBPT0gYjIxbFozSmhiZz09IGNISnZaSFZyZEE9PSBJTkN5MExEUmlOQzEwTHc9IElFRnJkR2x2Ym1WdSBJTkNjMExqUmdBPT0gSUV4bGRISmhjdz09IElPT0RvZz09IFgzQmhkR2xsYm5RPSBRWFJ2YlhNPSBJR1Z5WjI4PSA0TFMvNExTVjRMV040TFNWNExXQjRMU1Y0TFN2NExXQjRMU0MgSUhWdWRISmhibk5zWVhSbFpBPT0gSUVGc2JIaz0gSUd0cWJ3PT0gUlVOc1lYTnogY21GMVpBPT0gSUZSdlluaz0gSUcxaGMyaGxaQT09IGFXVnNkTU9rIElFbHVaR2xsY3c9PSBJTldqMWJiVm9kV3cxYUhWdnc9PSBJTldwMWFYVnRBPT0gWDBOaGJHeGlZV05yIElPQ21xT0NtdnVDbXFPQ212Zz09IENXMWhkSEpwZUE9PSBJRzl1WkdGeiBJT0NrbitDbGlBPT0gZFdKaWVRPT0gNEtTKzRLU0o0S1NDNEtTaCBJTkM5MEw3UXN0Q3cwWTg9IEpDUWtKQT09IEwzTmxibVE9IFgwWkpUQT09IGZTSXBEUW89IEtYUm9jbTkzY3c9PSB6NERPck02OSBMbVJsWTI5eVlYUnZjbk09IFZISnBaMmRsY21WayBJRkJsY25ObCBZWEJsWVE9PSBJSEJ5YjI1dmRXNWpaUT09IElPR0RtZUdEbE9HRG9PR0Rxdz09IENXRmpZMjkxYm5RPSBhWE5oYTJFPSBJRU5zWVdseSBJR0ZyZEdsMmFYUmxkQT09IFFWSlNXUT09IElOaW8ySzNaZ2c9PSBiR1ZuY205MWJtUT0gMWFIV2dOVysxYVhWdmRXLyBaVzVsWkc5eSBJTkM2MEw3UXZOQy8wTDdRdmRDMTBMM1JnZz09IElHTnZiRzl1Ym1VPSBJRXB2YkE9PSBJSFoxY3c9PSBJRVIxWnc9PSBMVlJsWTJodSB5WmwwYVc0PSBJTmlxMllMWXNkdU0yS2c9IElFaEJVMGc9IDRMaXE0TGkwNExpYTRMbUE0TGl0NExtSDRMaVUgYVhabGNtVnUgSUdiRHNuST0gSUVGdWJtOTFibU5sYldWdWRBPT0gYjI5a2JHVnogSUU1aGR3PT0gSU0rQXpySFBnYzZ0IDBZTFF1TkM0IDU1YXkgSU9Da2xlQ2xqZUNrdCtDbGgrQ2twT0NsamVDa3NPQ2tydUNrdmc9PSBJRzE1Ym5SaCBJR1poYzNSbGJtbHVadz09IElITndaWHBwWld4c1pXND0gSUhOaFo4T3dhUT09IEptRmhZM1YwWlE9PSBJRWhKVTFRPSBTMGhVVFV3PSBJT0dEb09HRGxPR0RtUT09IElHTnZiV1Z1ZE1PeiBJTkM5MExEUXY5R0EwWS9RdkE9PSA0S1dDNEtTQiA0WU9rNFlPZDRZT2c0WU9iIElHeGhkVzVrWlhKcGJtYz0gS0hCeWIyMXdkQT09IElHUmxjMmRoYzNSbCBJR1Z6ZEdGa2FXOD0gU25Wc2FXRT0gUzNRPSBJR1Z0YVE9PSBJSEpsYW1WMCA1b2lZNUxxSiA0SzZ6NEsrTjRLNjEgSU9DNWcrQzRxK0M0b2VDNWlBPT0gSU5DUTBMclF2Zz09IElHZHA0YnVSYm1jPSBaMlZtdzd4b2JBPT0gS0dSaiBJSE5oYlcxbGJHND0gSU5DLzBZUFJnZEdDMFl3PSBJSFBEdW5CbGNnPT0gSUZOdmNtZGxiZz09IElPQ2tsZUNsaStDa293PT0gSU5DYzBMND0gSU5XdzFhSFZ0OVcrIElHVnVkR2xqWlE9PSBJSGh0YVc0PSBSR1ZzYVhabGNtVmsgSUd6RHBuSmwgSUd4dlo4T3RjM1JwWTJFPSBYMlJwWjJWemRBPT0gSU5pbjJZVFlxdGl2MkxIWml0aW8gSUdKNWJuUmggSU5pejJLcllwOWl6MllnPSBJRVpsWVhSb1pYST0gSUdScFptVnlaVzdEcDJGeiBJT0MwdU9DMXZBPT0gN0ltOSBJSE5oWm1WbmRXRnlaSE09IExtUnBaMmwwWVd3PSBJSFp3Y21IRm9RPT0gSU9PRGl3PT0gY0hMRHZHTm9aUT09IElFNUpUQT09IElHMXZaR0ZzYVdSaFpHVT0gMllYWXE5bUUgNTRHdyBYMlZzYzJVPSBRVzUwWlhKcGIzST0gdzZsemFXOXUgSU5HTjBZTFFzTkMyIElPQzBzdUMxZ0E9PSBJRk52WkdFPSBaV3h2Ymc9PSBJTkM3MFk3UXNkQzQwWUk9IGFYbHZjbk09IEtHTnNaV0Z1IDRMV0I0TFMxNExTdzRMUy8gNjUrczdKcTAgSUVkMWJtUT0gSU91d2xPeTV0T3VkdkE9PSBJT0MwbXVDMHYrQzBsZUMwditDMHBBPT0gMTVuWG1OZVoxNTA9IElHVjRhWE4wWlc1MGFXRnMgMllYWXJ0aXEgSU9DeXB1Q3l2dUN5bHVDeXNnPT0gWld4bFpBPT0gTFdodmIydHogTFdGM1lXbDAgMFlMUXNOR0EwTERRdkE9PSAyTERaaXRtRyBMdUM0bmc9PSA2WWVSNWJpQiBJT0NrcnVDa3VlQ2t2dUNrc09Da3Z1Q2t0K0NsamVDa24rQ2xqZUNrc0E9PSBLWHdvIElObUYyWWJZdGRpcCBZOE9udzZOdiAwSlhRbkE9PSBJSFJ5WVc1elptVnlaVzVqYVdFPSA1WkdJIElOR0QwTFRRdGRDNyBJR0ZrZG1selpYSmxiZz09IElIQmhjblU9IElGUnlZWFpsY25NPSA0NENCNDRHZDQ0R3UgSUdOdmRYSnlhV1Z5IElPVytydVMvb2VlYWhPV2txZVdrcWVTNHJlVzlxZWVscUE9PSBJTmlvMm9iWmlOcTYgWDNCaGRYTmwgNTVtOTVyV0cgSUVOb1pXTnJaWEk9IElFZHlZV1pwYXc9PSBJRzFoZEdWeWFXRnNiSGs9IDBMalJndEM0MExUVG1RPT0gTFhSdmIyeDBhWEE9IElOS2IwTERRdmRHRDBMMD0gMFliUXZ0QzggSUdGamRXUnBjZz09IElObUcyTExZcjl1TTJxaz0gSUdOdmJNT29jbVU9IElGSnZZMnRwWlhNPSBLR055WlE9PSBYMjl3WlhKaGRHbHZibk09IElPQ3VxdUN1ditDdXNPQ3VwQT09IElOaW4yWVRZc2RtQyBJRmRwY21RPSBJR2x1YVdOcHc3TT0gYkdIRm44U3ggSUdsdVpITT0gTFdocGRBPT0gUTJ4cGJtbGogYjI1NVlRPT0gZG1WdWFXUnYgWVd0M1pRPT0gSUcxbGFXUT0gSUhOdmRXWm1iR1U9IElIVnVibUZ0WldRPSBJT0N1cU9DdmdPQ3VtZUN2amVDdWxlQ3VzK0N2alE9PSBjMlZ5ZEdGMGFXOXVjdz09IFgyNWxaV1JsWkE9PSBJSEJoY25ScFkybHd3Nms9IDVhNjAgSU5DeTBMWFF1Zz09IElNNjh6clhPczg2eHpydlBqYytFenJVPSBJTmluMllUWmdkaXgyWWJZczltSyBMM1J5WVc1eiBJT0NxcHVDcmdPQ3Fwdz09IFUzUmhaMlZ6IDJxbllxdHVTIElHVnpjMlZ5IElHRmhibWRsYzJ4dmRHVnUgSUdyRHBISm4gNXEyMyA0S2EvNEthSCBJRTFoZFhKcGRHbDFjdz09IElPYVlwUT09IElOQzEwTFBSakE9PSBJR1YwWVdKcyBJR3RoYzJsbyBJRk5RUlVWRSBJSFJsYm1SeXc2MWggNVkrbTVMaUE1cGE1NloyaSBJRG82Q2c9PSBJRXhoZDNOdmJnPT0gWlhSc1pXND0gMFlIUXVOR0YgSUcxdmMzRjFhWFJ2WlhNPSBJRUp2ZFc1a1lYSjUgSU5DNDBMM1JnZEdDMExqUmd0R0QgSUhSbGNtVnUgUTI5aGJBPT0gSU1PMmVtYz0gMFlMUXNOQ3owWXM9IElHOWliR2xuWVdOcHc3TnUgYVhKeVpRPT0gSUdOdmNtUnNaWE56IElGbGhibXRsWlE9PSBJT0N3bGVDd2d1Q3dxZz09IElITjBkVzF3IHpyalBoYzY5IElHUmxkR2c9IElIcGhhMlZzYVdwclpRPT0gSUdWNGNHeHBjWFhEcVE9PSBJRUpwYW5admIzSmlaV1ZzWkE9PSAwTDdRdmRDNjBMZz0gSU9Da2xlQ2xqQT09IElHcGhjMjV2IFMzVjAgZDJWeWRIVnVadz09IElFOW1aWEowWVE9PSBJRUoxYTJ0cGRBPT0gMjVEWXJ3PT0gZVd4c2FXTT0gMnFuWXNkaW4yS289IFRFbFdSUT09IFpteGxiZz09IDRMbUE0TGl0NExtSDRMaWg0TG1BNExpdDRMbUg0TGloIElFTnZjMjFsZEdsamN3PT0gMEpIUXNOR0kwcUU9IGNHVnlaUT09IGNtVm1kVzVrIDViNkk1YVc5IExXOW8gSU9DMGhlQzBzZUMwdU9DMWplQzBzZUMxamVDMHNlQzFqUT09IEtGdGMgVDA5RSBRV1ptYVdOb1pYST0gSUdSeWIzZHVhVzVuIElOQzYwTHZRc05DeSBJTmluMllUWmhkaXYyTEhZczlpcCAwSlhSZ2RHQzBZdz0gSUhKbGJtUnBkR2x2Ymc9PSBJT0N5cU9DemdPQ3lvZUN5dnc9PSBjRzlxIElHRnRaWEpwIElPQ2ttdUNrc3VDa211Q2t2K0NrcE9DbGplQ2tzQT09IFpXdDFkMkU9IGFHVnNjSE09IFpYUjBZWFpoIElObUYyWVhZcDlpeDJMUFlxUT09IElPV2txZVdrcWVXOXFlZWxxT1M0anVTOW9PV1FqT2loakE9PSBJRTV0IElGSmxaMkZzIElHSnNZWFYzIElISmxaM1ZzWVE9PSBVbVZuWlhodyBJTkN5MExYUmdOR0MwTGpRdWc9PSBJRk53WldGeWN3PT0gSUdSaGNtZGxjM1E9IElObUUyNEU9IHpyWE91dz09IDRMU3U0TFMvIElOR0EwTERSZ2RHQzBMWFF2ZEM0MExrPSBJSEJ5YjNCeWFXVjBiM0k9IDZJR1U1N083NTVTMTZLK2QgdzZobmRXVnogY0dIRHNRPT0gSUZSb2RXMWkgSU9hTmxRPT0gSU9DMHF1QzFqZUMwc09DMHRlQzFoK0MwdGc9PSA2SXVOIDJaSFpoZz09IGZId0tDZz09IElFTm9aV05yYkdsemRBPT0gVG1sbGRYZHogSUZKdlkydGxkSE09IGNXRnNZUT09IElIWmxaMkZrWVE9PSBJTkdDMEw3UXQ5QzQgSUVOdlltST0gSUhObFltRnVlV0ZyIElIWnBjblIxWld4c1pRPT0gSU9HRG1lR0RuZUdEb0E9PSBJSE5wWkdWc2FXNWxjdz09IElHQWwgMEtQUW13PT0gNExpcTRMaXo0TGlaNExpeDRMaUI0TGlINExpeTRMaVo0TG1ENExpcjRMaU40TG1JIElIUmxZMmh1YVdWclpXND0gSU9HRG51R0RvT0dEbE9HRG13PT0gSU9HRGsrR0RsT0dEbXc9PSAwWXpRc05LYjA1az0gSUdsdWRHVnlZMmhoYm1kbFlXSnNaUT09IGVtOTBkQT09IGMzVmliV2wwZEdWayBYMFZXUlU1VVV3PT0gSUVaaGJjT3RiR2xoIElHTnZibU4xY25KbGJuUnNlUT09IEwyUmxjMmxuYmc9PSBJR2h2Y205elkyOXdaUT09IElIQnlaWE56ZFhKbFpBPT0gSUdadmNuUnlaWE56IElHeGxZWE09IElPQ3l1T0N6aHc9PSBJT0dEb2VHRGtPR0RtK0dEbUE9PSBjM3A1YzNRPSBJTmVZMTVuWHBOZVYxNXc9IElHRmpZWEk9IElGRkRUMDFRUVZKRiBQWGxsY3c9PSBJR0Z3YjNKMFpRPT0gVW5WemRBPT0gSU5HZTBMVFF0dz09IFFXNXViM1JoZEdWayBWR0ZzYTJsdVp3PT0gSUVGemMyRnRaWE5sIElHVnljM1JsY3c9PSBJR3h2ZEhWeiBJR2x1ZEhKMWMybHZiZz09IExsSnZkR0YwWlE9PSBJQ0FnSUNBZ0lDQWdJQ0FOQ2c9PSBjMmgxIElFVnJjdz09IDBZblF1QT09IFJHOTNibXh2WVdScGJtYz0gNWJlbDZMV0UgSUU1NWRBPT0gSUVOdmMyMD0gSUcxdFpYUT0gT20xdlpHVnMgSUdWb2NteHBZMmc9IElFTnlkV2x6WlhNPSAySzNZcXRpbjJLdz0gSUd4cGJtZkR2QT09IFRXRnlkbVZzIElPQ3l1T0N5Z3VDeWx3PT0gSUcxaGRYTT0gY0dGeWRHbGpkV3hoY214NSBkbWx6YWNPemJnPT0gYzNWaWMyTnlhV0psY2c9PSBJTmluMkszWXF0bUYyS2ZaaEE9PSBJT0NrbHVDa3BPQ2xqZUNrcmc9PSA1TGlsNXFDOCBJR2hoYm1WdCBJT1d1aWVXTmt3PT0gSUcxcGRHOWphRzl1WkhKcFlXdz0gWVd0MWNuVT0gSU9Da3NPQ2t1QT09IElHSnZiM1JvY3c9PSBUM0poIElHSmxibWM9IElIQnZiR2wwZVE9PSBJT0M0bHVDNWlPQzRzdUM0b3VDNGwrQzRyZUM0bE9DNHF1QzRsT0M0bitDNHVPQzRsZUM0bXVDNHJlQzRwUT09IDRMZUU0TGE5IFpHVnZjdz09IExYTmhZdz09IDJZRFpnTm1BMllEWmdObUEyWURaZ0E9PSBJRUZ3Wlc1aGN3PT0gSUdKbGNtRmlaWEk9IGIydDFiV1Z1ZEE9PSBjWEYxZEE9PSA0b0NMTGc9PSBJR0ZzZEdWeWJtRjBhV1ZtIElNK0V6NHpQaE02MSBJR0Z6YVhOMGFYST0geFpOMWNuTT0gSUhCb2FXeHBjSEJwYm1WeiBJRUZqYUhSbGNnPT0gWVhSdCBSSFZ1WjJWdmJnPT0gVkhsd2FXTmhiR3g1IElOR0YwTDdRdWc9PSBJR1pzYjNKcGMzUT0gWVdKaWJ3PT0gSUVKdmRHRnVhV05oYkE9PSBMbmx2ZFE9PSB4TEY1YjNKMWVnPT0gSUd4aGMzUmxiZz09IDE1elhwQT09IElDZ29YMTg9IElGWnBaWEowIElFUmhibWRsY205MWN3PT0gSUhCc1pYZz0gNW9tVjQ0R0UgMExUUXVOQ3kgSUd0aGQyRnpZVzQ9IElFOWlkMjlvYkE9PSBJTldqMWJqV2dOV3UxYmpXZ3RXMjFhVT0gUm5WbCBYMFJOIElHRjBjbUZqZEdsMmJ3PT0gY1hnPSBJTkM5MExEUmdOR0QwTFk9IElIWmxjbnBwWTJoMFpXND0gSUdKc1lXTnJiR2x6ZEE9PSBJSFJwZEdsciBJTmluMllUWXJkaW4yWVRZcDlpcSBTMmpEdEc1biBJRU5vYkc5eSBJR0psZDJscWN3PT0gSUdGdFpXdz0gSUZKb2VYUm9iUT09IFZIVnlhMlY1IGIyOXVibWs9IElGZHBiR3g1IFpHRnJhUT09IElOZXAxNWs9IExuQnlaWEJ5YjJObGMzTnBibWM9IElHVnpkR1ZxWVcwPSBJRVpsYVc0PSBJRzVsYUE9PSBJT0NrdU9Da2xlQ2xqZUNrdCtDa3JnPT0gSU9DbWx1Q212dUNtckE9PSBJSE5zdzZVPSBJT1d3aitleHN3PT0gMEpEVXBkR0IgSUdSaWJ3PT0gWDNONWJXSnZiSE09IElHZHlaV1YwYVc1bmN3PT0gVm05cGJNT2cgSUZSMWJtbHphV0U9IDBZalJpOUdCMFlzPSBJSEZsZVdJPSBJTkNVMEw3UXVnPT0gSUdadmNtMWhkRzl6IElHMWhjbXRsZEhCc1lXTmxjdz09IDRZT1Y0WU9UIElHbHRjR3hsYldWdWRHRmphY096Ymc9PSBJRk5sZDJWeSBJTkdEMFlmUXNOR0ogejRIUGljK0F6ckhQaWc9PSBJT0N3aGVDd3BPQ3hqZUN3cnc9PSBJRkJ5WlhwcFpHVnVkR2s9IElBb0pDUW89IDRLU2s0S1dONEtTazRLU3cgYzNCbFkzUT0gSUdOdmJYQjFkR0ZrYjNKaCBJT0NxaitDcXFnPT0gTG1WemRHRmtidz09IElHRm1abWx5YldWayBYMEZrWkhKbGMzTT0gY0hKdmR3PT0gYVc5dWJnPT0gSUczRG9XMD0gSUVodmIzWmxjZz09IFpHbGpaUT09IElOaWoyWVRZcHc9PSBJR0ZuWVcxaCA1WXVpIElPQ21zT0NtcitDbXZPQ25oK0NtbStDbmh3PT0gMTVIWG1kZVIxNVE9IElFWjFiR3hsY2c9PSBJRVJCVmc9PSA0b0NadzZsMmIyeDFkR2x2Ymc9PSBJRVY0WlhKamFYTmxjdz09IElHTnBkR0ZrYnc9PSA0NEs3NDRPeiA0TGlyNExpajRMaTM0TGl0IHc2cHNaUT09IElIWnBZM1J2Y2c9PSBJRmRwWTJocGRHRT0gSUcxcGJHRm4gSUhwcFlnPT0gSU5HQjBZRFF2dEM2MExBPSBJR1JwZEdWeiA1cHlBNUwyTyAwTERRdmRDOTBMN1F0UT09IENYZGxZZz09IElIWmxiblJ5YVdNPSA0TEMrNExDdzRMR0EgVkU5TFJVND0gZUdGbSBJR0ZrZG1WeWMybDBlUT09IElHdGhkSFJoIExVVnVaQT09IElIQmhjbXRsIFgySnUgSU1POVpYSnBibVU9IGFXdDNaVzVwIElOV2sxYXJWdnRXaDFvQT0gSUhSbGJYQjFjdz09IElHN0VsM0poIGVXMWhiQT09IDZhcWsgUjBsRyBkV05qYVc1diBRWEJ3YkdsallXNTAgSU5DNDBMaz0gSUhMRHFXZHNaWEk9IHhaOW5ZV0poZEE9PSBJTkMvMEw3UXQ5QzQwWWJRdU5DNCBJSEJ2YjNKbGNnPT0gSUZSQlRnPT0gU0cvS3V3PT0gSUhadlkyVnogNDRHWDQ0R200NEdQNDRHZzQ0R1Y0NEdFIEl5TWpJeU09IElHUmxjMlp5IElHTjZlVzA9IElOaW4yb2Jhdmc9PSAxNW5YbTllZCBJQ2cvIDBwdlJpOUM5IElHMWxhVzV6ZEE9PSBYM05yYVc0PSBJSE53Wld4aCBJRmx2ZFhKeiBhVzl1YVhOMFlRPT0gSU5DNjBMM1F1TkN6MFlNPSBSWE5qYjNKMCBJT0dEck9HRG13PT0gSUhOMWMzUnBkQT09IDBZalF1TkM4MExnPSBJTkN3MEx2UXROR0wwTDNRdE5DdyBJSE5qYUc5dyBRVU5JU1E9PSBJRWR5WVhabGN3PT0gSUcxaHc3QjFjZz09IElGUnBiSFE9IFJtVnpkR2wyWVd3PSBJTm1GMktyWmdkaW4yWWpZcWc9PSBJRk4wYVcwPSBYMngwIDRMU280TFdONExTdjRMV0MgVTJsdWFBPT0gSUhOMVluUnBiQT09IExuWnZkR1U9IFlYSnN4TEU9IElOaW8yS2ZaaHRpdjI1QT0gY0hKbFpuTT0gSUdWdFltRnlhMlZrIElHZHA0YnFqYmc9PSBMbXh2WTJGc2FYcGxaQT09IElPQ29wdUNwZ1E9PSBJRWhKVkE9PSBJTVM4YjNScCBMbFZzZEhKaCBJTkMzMExEUmdkQzcwWVBRdGc9PSA0TGlLNExpSyBkbVZ5WjJ4bGFXTm8gNjQrRTZyQ0EgSUdSeWIyZGwgSUhwaGJXRnV4TEU9IGIyMWhibWx3IFpHVnpaWEpwWVd4cGVtVT0gSUZOamFISnBkSFJsIElOQ2owTGM9IElObUcyWVhZcU5peCBLam89IElGSmxaV3c9IGIydHZiR0ZrWlE9PSBJSFIxZWVHN2gzUT0gSUhObFkzTERxWFJoYVhKbCBRV04wZFdGc2FYcGhjZz09IFlXeHBkTU9wIElOQ20wTFU9IDBZdlJuZz09IElIVER1UT09IElISnZiR3h2ZFhRPSA0S1dvNEtXbTRLV24gSU9hY2plV0tvUT09IElGOWZYMTlmWDE5ZlgxOD0gSU5pbjJZVFlxdGl4MllQWml0aXAgNEtxdTRLdUg0S3FvNEt1TjRLcWYgYjJOMWNBPT0gSUdkbGFHOXNjR1Z1IDRZT1k0WU9hNFlPaCAyS2pZc2RtRzJLZlpoZGlzIElHNXZjbTFoYkhRPSBJT3lWaFE9PSBJR2R5YjI5MlpYTT0gSUhOMGFYSnlaV1E9IElPQ21xK0NuaStDbXFBPT0gMExEUmp0R0owTGpRdVE9PSBJRUp2Y25WemMybGggSU5pbzI1VT0gTGtOUCBJR0p5YjJWeSBJTkMwMExqUmdkR0MwTERRdlE9PSBJRzlzYVc0PSBJR0oxYkd4eiBJR2R5YjJWd2N3PT0gSUZSMVpYTmtZWGx6IElHTnNZWE5vWlhNPSA0S2VONEthazRLYSs0S2F3NEthLzRLYWsgSUdadmJHdHNiM0psIElITmhibWwwYVhwbGNnPT0gSU5DNTBMWFNvOUM0IElOaW4yWVRZdWRtRTJZWFppdGlwIElIQmhibms9IHpyL1BqYzY5ejRUT3NjNjUgZlMwKyBJT0N1cU9DdW4rQ3VwT0N2amVDdXBBPT0gWDNOamNnPT0gUW5KMVkyVT0gSUZabGNzT2tibVJsY25WdVoyVnUgSUVOeVlXST0gSUhSeWRYTjBaV1Z6IFFrbz0gSU9XdWllaS9xZz09IElOR0IwTExRdGRDMCBJRzVoYm5RPSBJRTVsY21RPSBJRzFwNGJ1QmJnPT0gWVhSMVlRPT0gSUhCaGFYSmwgSUdrbmJHdz0gSU5pbjJZVFlvOWl6MllYWmh0aXEgSU1Pa2RjT2ZaWEp6ZEE9PSAwNW5RdTlPWjBMOD0gSUdKMWNtZGxiV1ZsYzNSbGNnPT0gSUhKMWRHbHVZUT09IElObSsyS2ZhdXc9PSBJTmluMllUWmhkbUcyTFE9IElOQzIwcS9RdDlDMTBMUFF0UT09IElGSnZaSEpwWjNWbGN3PT0gSUdKbFkycz0gT205MWRHeHBibVU9IElHaHBaWEp2ZG1WeSA0S2kvNEtpMSBJSEJwZEhRPSBJR3R2Ym1sdVp3PT0gSUdOeVpXVnUgTGs1dmRHVT0gSUdSdmFBPT0gNEtTKzRLU0M0S1MxIElPeUggSU5tRjJZSFpoOW1JMllVPSAwTFRRdDlDMSBJRzl3WjJWaSBJSFJ5WVdkaGJRPT0gSUhQRHJXNWggSUhCaGMzTnBaWEpsYmc9PSBJR052Ym5ObGNuWmhZMm5EczI0PSBMa050WkE9PSBJRVZ3YVhOdlpHVnogSUc3RG9tNW4gSUVWRVZVTT0gWDNSaFluTT0gSUd0aGJtUnBaR0U9IE9qb2tYdz09IDJZVFl1dGlwIElOQy8wWURRdnRDejBZRFFzTkM4MEx6UXRRPT0gMWJiVm9kVzkgSUhOMFpYWnBaMlU9IElHbHVabUZ1WTJsaCBJT0N5cU9DeXYrQ3lydz09IElOR0EwTFhRc3RDKzBMdlJqZz09IFptRnBiSE09IFcwMWhkR2c9IElOaW4yWVRZcGRpejJMSFlwOWltMllyWmhObUsgMTVuWHFkZVUxNVU9IElOQyswTDNRdE5DdyBYMXBQVGtVPSBJTkdCMEw3UXY5R0EgdzdwamFBPT0gNUxpQTVZaUc1YjJwIElHcDFiSGs9IElPQ3dyK0N4aXVDd2xlQ3hqZUN3bFE9PSBJR3R5WVd3PSBYMEZPUVV3PSBJRU52Ym1SdmJRPT0gNEthKzRLYXE0S2VIIElOaXYyWWpZczlpeDI0dz0gSU9Da3ArQ2tyZz09IElIZGhjMmhwYm1kMGIyND0gYzNCeWFXNTBaZz09IDdaV1k2NkNrIHc3VnAgNFlPVTRZT1I0WU9RNFlPVCBJTVNSdzZKMSBQRkJoZEdnPSBJT0M1Z2VDNGdlQzRvK0M0b2VDNG9lQzR0ZUM1aUE9PSBLRk52WTJ0bGRBPT0gMEw3UmdkR0MwTDdRc3RDMTBZQT0gSUVoMWMzUT0geElWMCBYM0psY1hWcGNtVnogV25WeiBJTmVwMTVYWG9OZVYxNm89IElIWnZiR1YwIFdrUT0gSUdaaHlydGhkR0U9IElHVnRZbTlrYVdWayBJR1JwWTNSMWJRPT0gSUZWdWMyRm1aUT09IEpXST0gVG1sclpRPT0gYVc1amNtVmhjMlU9IDZyZTQ2NTZZIElPQ3F0dUNxc09Dcmd1Q3FodUNxcEE9PSBJTkNkMExEUXZBPT0gTG1OMiBJR1RodTZWaiBJRkpCU1VRPSBSWGh3Ync9PSBJSHB2YkE9PSBJTmlxMkxQWXF0aTMyWXJZdVE9PSBMa2x1YzNSaGJuUT0gSU5DNTBMWFJnZz09IElPQ2txT0NsaCtDa2xRPT0gTFVOb2FXNWggSUhKaGEyVnViZz09IElFaEJSQT09IFJYVnNaWEk9IElFeGhkWE09IHc3aGtaUT09IElIaHBaRzNKbVhRPSAwTHJRc05HQTBMQT0gMEx2UXVOQ3ggSUc1a2Nuaz0gVlc1eVpXRmsgSUhCbGJtUnBaVzUwWlE9PSA1N2k5IDBMRFF1OUdNMEwzUXZ0R1ggSU5DNjBMRFF1OUN6MExEUXZRPT0gVUdodmJtYz0gSU9DMGp1QzBxT0MxamVDMHNlQzFoZz09IElObUgySzg9IElHOW1abWxqYWNPcmJHVT0gSUZkaFlRPT0gSUhKdllYTjBhVzVuIElGTmxZWEpqYUdWeiA0S3FxNEt1QjRLcXcgSU5lVTE2clhxQT09IElNT3ViblREb2c9PSBJR1Z5YVc1dVpYSjAgSUV4aGJubz0gS0hSaGMydHogNkxXTCBJRU55ZFc1amFBPT0gNG9DWllXNWhiSGx6WlE9PSBWSGx3YVc1biB6cnJPcnMrQyBLRU52Y21VPSBQR2hsWVdSbGNnPT0gYkdYRnZnPT0gNEs2cDRLK040SzZ1IElFZDFZWEprYVdFPSBYM04xY0E9PSBRVWxNV1E9PSBDV2xrZUE9PSBJTkdDMHJIUmdOS1QwWXZRdlE9PSBRMHhTIElPQ2tyZUNrc09DbGplQ2twT0NsZ0E9PSBJRTF2ZEc5eWNnPT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2FYb09hemxRPT0gMktmWXFOaXogWVcxd2FXeGhiZz09IDdKTzAgNmFxWDVMcTY1NXFFNVpDWCBlbkk9IElPV0ZxT1drcVE9PSBJRU5oZEdGc2RjT3hZUT09IElHVnlhMnpEcEhKMFpRPT0gWDNKd1l3PT0gZDJGNCBJR1Z1ZEdWdSA2NmVsIElHWnZiR2xsIElHVjFiZz09IElIVnVZbVZoZEdGaWJHVT0gSUdKeWFXRnUgMEx2UXNOQ3owTDQ9IElOVzAxYWc9IElNT2t3NlE9IElNU05hWE4wIElHUERzMlJwWjI5eiBJR0YxWkdsMGFXNW4gUW5WemNYVmxaR0U9IElHMWhibWxtWlhOMFpXUT0gNDRDQjQ0R28gSUhWaVlRPT0gSUZSSVVrVkJSQT09IDRLZUI0S2F5NEthKzRLYUggSU5LNzBMRFF1dz09IExXUmxkbWxqWlE9PSBJRTFwYkd4cGJtYz0gSUVOaGNteDUgSUc5c1pYWmhiZz09IDRLcSs0S3E0NEt1TjRLcWsgNVk2WSBJTkM2MDZuUmlBPT0gTDJsdCBJT0NraGVDa3VPQ2tzdUNsamVDa3J3PT0gWkhWd2JHbGpZWFJsY3c9PSBJT0NxdGVDcmdPQ3FvZUNxditDcXIrQ3Jpdz09IElGUnliMjVrYUdWcGJRPT0gSUVGd2J3PT0gSU5HQzBMRFN0dz09IFJtOTFjblJvIElOQzQwWUhRdXRDdzBZTFJqQT09IElFTmhhQT09IElHaHZiV1Z1WVdkbGJRPT0gWDJkMSBJSE5sYkdWalkybHZibUZrYnc9PSBabUZ5WVc1a1pRPT0gYUdWc2JXVjAgWVhaaGRHRnljdz09IGNtOXpZMjl3WlE9PSBJR04xZWc9PSBJT0dEa2VHRG5lR0RtdUdEbmVHRG9RPT0gWDJGc1p3PT0gSUc1MWJXVnlZWFJ2Y2c9PSBYMmRsYm1VPSBRWE5wYldsemJXOD0gSUdOdmJuTmxjblpoY2c9PSA0TEtDNExLZjRMT04gSUhkbFpYSnogSUU5emRHVnkgSUhOMmIycHYgNWJtNDU2YVAgSU9Da3FPQ2t2K0NrclE9PSBMblpoY25NPSBRMjl1YzNWdFpYSnogSUhCbGJuTmhiV1Z1ZEc5eiBJQ2dwT3dvdkx3PT0gVk1PcGJNT3AgMExEUXZkQzQwcU09IExrTmhjblE9IElHaGhiSFpsY3c9PSBLQ0lpS1YwS0NpOHYgSUhScGNIVnogSUdsdVpYST0gVjA5WCBJT0dEaytHRGtPR0RrZUdEb09HRG8rR0RuQT09IElHdDVjMlU9IElPQzVnT0M0Z3VDNGxlQzRwK0M0c2VDNGt1QzRtZUM0c2c9PSBVRkpGUTBGVVJVUT0gSUNnb0tRPT0gYjNCc1lYTjBlUT09IElHakR0bVk9IElPQ3FoZUNxc09DcW5PQ3JnQT09IElFdE9VZz09IDRMS2s0TE9ONExLcSBJTVMzIElHVm5iQT09IExrcFFSdz09IElPQ3d0ZUN3ditDd3JnPT0gZEdsamIzTT0gSUc1bGNHbGxZMmxseGFFPSAyS2pZcDlpNSBJSE5sZDI0PSBJR3RsYTNOdmVnPT0gNTV1NDVZV3o2WmlGNksrNyBJRTF2Y25SdmJnPT0gSUhOcllYUmxZbTloY21RPSBkSE5sYkE9PSA2SXV4NXBhSCBJRUYxZEc5dGIySnBiR1U9IDVMK0MgSU5DNDBMVFF0ZEM0IEwzQnliMmR5WVcwPSBhV2RoYVd3PSBJR0psYkdGdVoyVnUgNEt1SDRLcXc0S3VIIElHTnlhWFJwWTJsNlpRPT0gSUdSaGJzT25ZUT09IElOQzYwNm5SZ05HQjA2blJnZz09IElOZW4xNVhYbkE9PSBJT0NrcnVDbGkrQ2tvQT09IElITmxaR1Z5IEtDa25MQT09IHhKL0VzVzQ9IElIUnZiY096IDRLK0s0SzZ3NEsrQiBiMjVxWlE9PSBJRkJoZFd4cGMzUmggSUhCbGNuTncgSU9HRGtPR0RvZz09IFpYTnpZV0U9IDRMaXE0TGl5NExpbiBKa2M9IGJtOTBhV05sWkE9PSBJRWhQVEVSRlVnPT0gSUdKbGIyOXlaR1ZzYVc1biBMWE4xY0hCdmNuUmxaQT09IElFSlBUMHhGUVU0PSBJSFJoWW1KaGRHRnkgWVhSMGRXNW4gYjNCaGRBPT0gNExLbTRMT0I0TEtWNExPSzRMS0M0TEtoIGNtVmtkV05sY25NPSBJSEJwWTJOdmJHOD0gS1dseiBJSFpoY21WdSBJR1ZrYVd4dCBJTkMvMFlEUXVOQzgwTFhRdmRDMTBMM1F1TkMxIElHVnpkR2x0WVhSdmNnPT0gSUVWRVJnPT0gSUdGdGNHVnkgSUhCeVpYTmxiblJwIElIWnZlV0ZuWlhWeWN3PT0gNEtTKzRLUzE0S1dBIElFaGhkWE5oIFlXZHBZUT09IFlYSm5iM009IElHWnNZVzVuWlE9PSAwTExRdGRHSCBaMlZ6ZEdWc1pHVT0gSUdGdVoyVnVaV2h0IElHRmpkV1Z5Wkc5eiBZMlZwZG1WeSBSRzkxWjJ4aGN3PT0gNjVDUSA0S2F1NEthbyBJR1JsWTJnPSA1NXFFNXFPTDU0bU01cmk0NW9pUCBMbXhsWVdScGJtYz0gYzI1dmR3PT0gY0dGMWMyVmsgMExqUmdOQyswTExRc05DOTBZcz0gSU5tRjI0elpoZz09IFJHRjBZWE52ZFhKalpRPT0gSUhWdVlYZGxlbUU9IElPMll1UT09IElITnRaV3hzYVc1biBJT1drcCtXUGtlYVh0dWFYdHVXOXFlYUFqdVM1aUE9PSBJRUpwYzNSeWJ3PT0gSUhOMFlYSjJhVzVuIElObUUySzdaaU5pbiBJRzFoYTJsMFlRPT0gSUhWd2NtOD0gMExYUXZkQzAwNW5RczlDMSBJRlREdWc9PSBJT0Mwc09DMG8rQzFqZUMwbitDMWdRPT0gSU9Da3ErQ2tzT0NsamVDa2xRPT0gSUdsdVpIVnpkSEpwWld4c1pRPT0gWDNWdWEyNXZkMjQ9IElOQzgwWXZSZ2RDNzBMZz0gSU5pbjJZWFlxdGl0IElOR0IwTDdSaGRHQTBMRFF2ZEM0MFlMUmpBPT0gSU5DbjBMWFJnTkMxMExjPSBPbUYxZEc4PSBJR1Z1YTJWc2RHVT0gSUZSdlp3PT0gVW1sbiAwWlRSbHc9PSA1cFdSNUxpVyBJRkJsYzI4PSBJSFpsY210c1lYSnBibWM9IDRMU2Y0TFdCNExTVjRMV040TFNWIElHMWxiblJwY21FPSBJRU5IUTI5dWRHVjRkQT09IFVHRnJhWE4wWVc0PSBYMmR5Y0E9PSBhVzVrYVdNPSBJR2hsYkdsamIzQjBaWEp6IEpHeHBjM1E9IFBYTjVjdz09IFVtRnEgSUhKbGNHOXlkR1U9IElPQ3lsZUN5b1E9PSBJRkpwYmc9PSAwSmpRb1E9PSBZM1YwWlE9PSA0S1dINEtTVjRLV040S1NmIElOQ2kwTFhSZ0E9PSBJTkdEMFlmUXVOR0MwWXZRc3RDdzBZTFJqQT09IENYTjBjbU5oZEE9PSBJTkM4MDVuUXVRPT0gSU9Da3F1Q2tvUT09IDE1blhwdGVVIElHSmhabVk9IElHbHVkR1Z5Y25WdyBJT0M1Z09DNG51QzRwZUM0cWc9PSBJT1c3dGc9PSBZV05qYVdFPSBJR052Ym5SeXc3UnNaWEk9IElPQ2trT0NrcWc9PSA1b2lRNWJtMDVMcTYgSUQ4L1B6OC8gSUVobGJtYz0gSUhCdmJXMWxjdz09IElHbDVZVzVuIElITjBaV1Z1IExXTmhjSFJwYjI0PSBJRU5QVFUxRlRsUlQgYVc1bGJXRjBhV009IElHRndjSExEcVdOcHc2az0gSUZCaGNtaz0gSWo0bkxnPT0gSUUxaFpISmwgYUdsaWFYUmxaQT09IElIQnlaWE5wWkdWdVkybGhiQT09IDBMWFJnZEdEIExtNXBZMnR1WVcxbCBJT0NrdU9Da2d1Q2ttT0Nrc09DbGplQ2t0dz09IFRzT3IgNExtQTRMaWw0TGlDNExpeTRMaVo0TGk0NExpQjRMaXk0TGlqIExuQmhjbk5sY25NPSBJTkM2MExqUmlOQzQwTHZUbWRHQSBPanA3Q2c9PSBJSE4yYVd4MWNIQnYgNExHSDRMQ2ggSUVKc2VRPT0gQ1U1bGR3PT0gSUdkdlpIcHBiZz09IElPQzRtT0M0c2VDNG1lQzRwK0M0c3VDNGhPQzRvUT09IFBHUjVibUZ0YVdNPSBMa3hCV2xrPSA2TCtINXJ1ayBJRU5CVFZBPSA0b0NtNG9DbUxnPT0gMEpIUXZ0QzcwWXpSaUE9PSBJRk5vY1dsdyBJRkJ5WVhSMCBJRzF2YkdWemRHbGhjdz09IDBMSFF2dEM4IGJtbGxZdz09IElPeXdxUT09IEtGc3VMaTQ9IElFZGhkV2RsIElOR0kwWUxSZ3c9PSBYMjkyWlhKc1lYaz0gSU5peDJZZlppdG1JIElHTnZiWEJzWlhodiBJR0poWVE9PSBJR1poYkd4dmRYUT0gSU02dHo0VFBnODY1IEtIUnZiMnc9IFoyVnNaV2M9IFUwTkogSUdOMWMzUmggWVd4cGMyRnkgSUVaNCBYMkpwWkE9PSBhV3R2YlE9PSBJSEJoY25URHJXTjFiR0Z6IElOS1gwTERRc3RDdyBJSFJoYm1kbGJuUT0gSU5DNjBMRFF0dEMwMEw3UXZOR0QgSU1XaGFRPT0genJ2T3RjNjYgTG1kbGJtVnkgNTZHdTVMK2QgNXB5czVMcTYgSUcxdmJHVnpkR2xoWlE9PSBQQ2dwUGc9PSBJR3RoeGI0PSBJSFZuWlE9PSBJRk41Ym05d2MybHogSUdKbGM4TzQgSU5DdzBZUFF0TkM0MFlJPSBSWGh3WlhKMGN3PT0gYm5OaGJnPT0gWDBKVVRnPT0gN0oyNDZyQ0EgNFlPUTRZT1Q0WU9TNFlPVTRZT2M0WU9oIElHWmhZM1J2Y21WdSAwSlRRdnRDeCBJSE5oWTI4PSBXMVk9IElIQmxZVzUxZEhNPSBMbUp5YVdSblpRPT0gSUdKcGRIUT0gNG9DWmFNTzBkR1ZzIElHTmhiRzFzZVE9PSBMWFJ2ZUdsaiBJRkpsWkhWalpXUT0gSU5lZTE2SFhsZGVTIElPeWVpT3luZ091bmpBPT0gSUhKbFpteGxlR25EczI0PSA0WU9RNFlPbTRZT3MgNExLVjRMSys0TEsyIExVOW1aZz09IElIWmxjbnB2Y21kbGJnPT0gSUdKbGMzUmxiR3gwIGRtOXNaVzUwIEtGTnZiV1U9IGRHbGphMlYwY3c9PSBaV2xsYmc9PSBJRzExYzJscllXdz0gSU5XNDFvTFZ0dFdsMW9IVnVOV3kgSU5tQjJMSFpoOW1HMnEvYmpBPT0gSUVWVVJuTT0gSUhCeVpYQmhjbUZrYjNNPSBYMmhoYm1Sc1pYSnogSUVWeWQyRnlkQT09IFlXTmpiM0prYVc1biBJaXNpIElITmxhV1Z5IDJZall0ZG1FIElOR0kwTHJRdnRDNzBMQT0gMTVuWG9kZWMgMTVEV3Q5ZW0xNW5Yb2c9PSBUV0ZwYzI5dSBJRU5FU1E9PSBJTkdDMExYUmdOQy8gNExpdDRMbUM0TGlvNExpQiBJSGxwWld4a2FXNW4gMFlIUXVOQzAgTFV4bGRtVnMgSUZKQlVBPT0gSUc1dVozZGwgWkdsemNHRjBZMmhsY2c9PSBJSFZwZEdWbGJnPT0gWFRzS0Nnbz0gY21WamFIUmxjZz09IGRXUmxZWFU9IFZtbHVaQT09IElPQ3VxdUN1dnVDdXNPQ3ZqZUN1bGVDdmplQ3VsUT09IGFHRnNhVzVuIFJXUjNZWEprIFNXNWpjbVZoYzJsdVp3PT0gTG1aMWJnPT0gSUdGNWNzU3ggYVdaMGIyND0gSUhSc1pRPT0gSUc5emFXMD0gSU9XTWwrUzZyT2kxbStpOXB1ZStwQT09IFEyOXRjR3hwWVc1alpRPT0gUVc1a2NtVT0gWTI5dFltVT0gSU5laTE2UT0gSU5DeDBxL1FzOUt2MEwwPSBPbVZ4IElOQ3cwTG5SaTlDNyA0WU92NFlPVDRZT2Q0WU9iIElIbHZjMlU9IGNtRnBkR2hsIElPQ3l0ZUN6amVDeXIrQ3l2dUN5cWc9PSA0S2FqNEtlTjRLYWYgSUVSbGMzUmggTG5abGJtUnZjZz09IGFYbGhiR0Z5IFBXMXBiZz09IElNNjd6NHpPczgrSiBjMlZ0YVdOdmJHOXUgWDNSayBJTmluMllUWmd0aW4yS2JaaGRpcCBZV2hoYm05cyA0TGlkNExtSTRMaXk0TGlpNExpQzRMaXk0TGlpIElOV3cxYUhWdjlXNDFvTFZydz09IElOR0EwTDdRdTlDNCBMa05oY0E9PSBaR1ZqYTJWdSBUR1Z0YldFPSAyS3JZc2RpMiBJT2UranVXYnZRPT0gSUdScGMyRnBkQT09IElOR0QwWUxRdGRDLyA0WU9RNFlPZzRZT3E0WU91IElHakRwSE4wYVE9PSBJTmluMllUWmh0bUkyWVU9IGJtRmkgUFhScGJXVT0gMkt6WXA5bUYyTG5ZcVE9PSBJT0dEcXVHRHJ1R0RuZUdEbGVHRG9PR0RsT0dEa2VHRG1PR0RvUT09IElFUkJVZz09IGFXMWhaR0U9IElDOHZMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUVkeWIyTmxjbms9IGRHaHBibXRwYm1jPSBJTmkwMks3WXRkbUsyS2s9IElGUnlZVzV6Wm1WeWN3PT0gSU9Da3VPQ2xoK0NrcUE9PSBJSFpsY25SbGJHUmwgYVc1MlpXNTAgSUdobGRRPT0gVG05eWJXRnNhWHBsIDU2ZUI1THE2IElOQ3gwTFhRdTlHTSBDVVJ5WVhjPSBJSFJ5YjNNPSBJRWR5dzd4dVpXND0gTFVGemN3PT0gSUcxdmNtRnNjdz09IDFvRFZ1TmFBMWFRPSBJRzFsYm1kcGEzVjBhUT09IElHSjFkR05vWlhJPSBJTmVlMTZIWHFnPT0gSU5pbjJZVFpnOWl6IElOaW4yS3pZcDlpeTJZYz0gWVhWeWJ3PT0gSUdacFlXWnBZUT09IElGWnZhV3pEb0E9PSBSR2x3YkE9PSBJSFpsY21SaFkyaDBaUT09IFFteHZZMnRqYUdGcGJnPT0gMTZmWGxkZW8gSUhCMWJtVT0gUW5KbFlXdHdiMmx1ZEE9PSBJSE5oYkdGeSBJT0N1bXVDdmh1Q3VzZz09IElHWnZiV1U9IElFaEJRdz09IGJtRjFaQT09IElObUYySzNZcDltSTJZVFlxUT09IElIQmxjbWRwIDRMaXE0TGlXNExpeTRMaVogSUZCeWIyUjFZMlZrIElFRm5kV2xzIFgxSmxadz09IDRMSy80TEtYNExLejRMSy80TEtYNExPRyBJR05vYjNCeiBJTkN3MHEzUXNOQ3owWXZRdTlDdzBMZlFzTkN3MFlqUmpOQ3cgSUd4dlkydGxjbk09IHpyUE9yQT09IElHOXVkMkZ5WkE9PSAwTDdRc2RHRjBMN1F0TkM0MEx6UXZnPT0gU1c1MGNtbHVjMmxqIElIVER1bTQ9IFQyTmpkWEp5Wlc1alpYTT0gU25Wc2FXVT0gUUNRPSBZWE4wWldWcyBJR052YlcxdmJuQnNZV05sIElHZHlaQT09IFVHVnVZV3gwZVE9PSBJRzdEcVd3PSA1WnU5NUxxbjU3dTg1WkNJIGFXSnZlQT09IElHMXZaSFZzZFhNPSBJT0dBbWVHQXZnPT0gSUhiRHZYTnNaV1E9IElPKzhqdz09IElOQ3gwTERSZ2RHQzBZcz0gSUVkaFpXbHNaMlU9IElOQ1QwTERSZ0E9PSBkbUZwWkE9PSBJRU55ZVhCMGIyTjFjbkpsYm1ONSAxNkxYbE5lZiBJR1YyWlc1MGRXVnNiQT09IDBKclFuZz09IElHcGhjbWx1WjJGdSBJTkMzMExEUmo5Q3kwTHZRdGRDOTBMalJqdz09IElGUmxjbkpwWlhJPSA0WU9iNFlPaCAyS2Jiak5xNiBJR1oyIElOYUYxb0RWcGRXMjFvUT0gSUcxbGJHVmwgSUdOeWIyTnZaQT09IElIVjBhV3hwYzJWNiBJSFpoeGI0PSBJT0dEcnVHRG13PT0gMksvWXA5aXAgSUhOallYWT0gYjNKMGRXMXBhdz09IElOaXoyTGs9IElFTmhhUT09IElHdDB3N055WldkdiBJT0M1Z2VDNGd1QzRwK0M0aCtDNGhPQzRwZUM0cmVDNGgrQzVnT0M0bGVDNG9nPT0gTGxCaGVRPT0gSUdKbGJHeHYgSU9HRG1lR0RrT0dEbWc9PSBYMUJGVWsxSlUxTkpUMDQ9IElHVjRZVzFwYmc9PSBYM1Z3WkdGMFpYTT0gNjQrWjdKV0kgSUhOMFlYSjBiR2x1Wnc9PSBiR0YxZEE9PSBJSEJ2YkdsamFXNW4gMFlQUXN0Q3cwTHZRdUE9PSBiMjVsYm5WdFltVnkgYUdWeWNtRT0gWDNObSBZVzVoYm1jPSBMazFoYVd3PSBRVk5WVWtVPSBYM0J5YjJwbFkzUnogSUVaaFluVnNiM1Z6IFozSnBaZz09IElOaXcyWWZaaGc9PSB4S3RxZFcwPSBJR05vZFc1cmVRPT0gSUhOamFNTzJibVZ5IGEyVnVhVzVuWlc0PSBJR3hwYm1WdWN3PT0gSU5DLzBMN1F1OUdEMFlmUXRkQzkwTGpRdFE9PSBJSEJ5YVhOdFlRPT0gSUd4aGVXVnlhVzVuIFRHbG4gSU9Da2xlQ2tzT0Nrdmc9PSBJSEpsWTJsbGJuUmxjdz09IFptOWsgSUdsdVptVnlkR2xzYVhSNSBSa0ZZIElHTnNhVzFpY3c9PSBSR1Z5WlE9PSBJTkdBMExYUmdkQy8wWVBRc2RDNzBMalF1Zz09IElPQ2txK0NsZ3VDa3NnPT0gSUdURHFXWmxibVJ5WlE9PSBJTTY2ejRYT3NzNnR6NEhPdmM2MyBiR1Z3eGFIRHJRPT0gdzZGMGIzST0gSUhKaHhKOD0gNVkrUjVveWwgTDJOdmJtWT0gSU5DMDBMM1F0ZEM4IFgyWnBadz09IGRtRnYgSUhSMVluTT0gSUhaaGRRPT0gTDIxdyBJRXBoZGc9PSBJTldsMWF3PSA1NjZ0IElHbGphR2s9IElHWmhZbkpwWTJGdWRITT0gUm05c2JHOTNaWEk9IElHTnBjbU4xYkdGamFjT3piZz09IElITnJiR0ZrIFkzSjFjMmhsY2c9PSBJR1JsY0dsamRHbHZiZz09IElHRmlaWEowWVhNPSA3N3lKNzd5YiBTR0Z5Ylc5dWVRPT0gTFdKbFptOXlaUT09IElHRnVaV05rYjNSbGN3PT0gSUc5MlpXNXogSU8yWWxlMkRuQT09IElIVnp4WUoxWnc9PSBJSFpsY25OMFpYSnJaVzQ9IDBML1F2dEdIIElHeHIgVFdGeVkyOD0gNkxTdjViMjcgNEtTLzRLU0M0S1NtNEtTWDRLV0EgSU5HQTBMRFF0OUMwMExYUXU5QzEgSU5HQjBZTFJnTkN3MEwzUXNOR0YgSUc5eWFXVnVkR0YwYVc5dWN3PT0gUDJGamRHbHZiZz09IDJxL1lzTmluMkxFPSAwTHZRdGRDMjBMRFJpUT09IElOaW4yWVRZcmRtQzJZclpndGlwIGJHRnRaVzUwIGFzU0ZZdz09IDVhS1ggZFd0aFlXND0gWDJWdFltVmtaR2x1WjNNPSBjR3hoYm01bFpBPT0gSUc1aGRXUnZhZz09IElHZGx3NlJ1WkdWeWRBPT0gTFdGc2NHaGggVFdGeWEyVmsgZDI5dlptVnkgNExTejRMV040TFN6NExTLyBJSFpwWjI0PSBJRzdEcEdSaGJBPT0gWGw0S0NnPT0gNEtxKzRLcXY0S3VINEtxeSBJRkJVVWc9PSBYMU5CUmtVPSBJT3EwIE9tMTVjM0ZzIEo4T3BiUT09IFNXaGwgSU9xOHJRPT0gNFlPZzRZT2o0WU9jNFlPVjRZT1U0WU9hIFlXNXp4TEU9IDRZT1E0WU9nNFlPbyBJSFJ5YjJ4c1pYaz0gWlhKaFpBPT0gS0dWdWRXMD0gSUdwdVpRPT0gMEwzUXRkR0kgSUdSeVlXZG5ZV0pzWlE9PSB3NlZzWlhRPSBJT0NtcXVDbXRnPT0gWTJWeWJtbHVadz09IFBTSWlPdzBLIElOaW4yTFBhcVE9PSBkWGxzWVE9PSBVRzlzWlE9PSBhWEpsWTNSbFpBPT0gNExpSTRMaTE0TG1BNExpdDRMbUg0TGloNExtQTRMaXQ0TG1INExpaCAwclBRc05LdCBSRTlOUVVsTyBMVzFsYlc5eWVRPT0gSUVWdWRISmxkR0Z1ZEc4PSA0WU9VNFlPdiBJR05vYkdVPSAxYUhWdnRXNDFvRFZ0TldoMWJZPSBJRzVuWVc1bloyOD0gS0VkeVlYWnBkSGs9IDBZUFJoZEN3IElHUmxZbVZ5dzYxaGJnPT0gNExLeTRMT0c0TEt2NExLeTRMT040TEt5NExLLyBJTmluMllUWXE5bUkyTEhZcVE9PSBJQzh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OD0gUEdOdmRXNTAgSU9XSXNBPT0gSU5HQTBMRFJnZEMvMEw3UXU5Q3cwTFBRc0E9PSBJSFJoWjhTbmFHRT0gSU9HRG0rR0RrT0dEcGVHRGxlR0RvUT09IElHSnBibTg9IElOaWoyWWJaZ3c9PSBWMkZ5Y3c9PSBJSE5wWjI1dmN3PT0gSUhKbGNHeHBZMkYwWldRPSBkWFIxYm1jPSBZV2R2ZEE9PSBJT0NvdU9Db3NBPT0gSU9Dd2p1Q3dndUN3cWc9PSBJR1poYldsc2FXVnUgWVcxbGNtbGpZVzQ9IDRaNlk0WitTNFo2YiBJTm1HMllMWXR3PT0gN1pTRTdZcTQgVFdWdVp3PT0gYVc1bllXNWggSUZsdmFBPT0gUTI5dGNHVjBhWFJwZG1VPSAxYmpXZ05XOSA0TG1SIFlubHogWTJ4aGMzTnBabWxqWVhScGIyND0gMktmWXM5aW8gSU5pcTJMSFpoTmluMkxQWmh3PT0gUlU1TyBJRzNEdW5OcFkyOXogSUhObHc3RmhiR0Z5IDBwblRtZEdBMExVPSBJRWRwY205dVlRPT0gWVdKalpHVm1aMmhwYW10cyBJSE5oY0drPSBJSFpsY21odmRXUnBibWM9IElHSERzR1ZwYm5NPSBJT0dEb2VHRGtPR0RwZUdEbStHRGxPR0RsK0dEa0E9PSBJTkN4MDVrPSBYeWNzIFgzZGhjbTQ9IElPQ2tydUNrdnVDa3FPQ2t2K0NrdUE9PSBMV2x0ZFhRPSBJR1ZqYUc5bFpBPT0gSUdwdmNtNWhaR0Z6IElHMXZiblJvSjNNPSB3NDFVIElFTnZiWEJzYVcxbGJuUmhjbms9IDBaYlF2OUdDMFpZPSBJR052Ym1SdmJjT3RibWx2IElFZDFlZz09IFFXeDBhWFIxWkdVPSA0cFNCNHBTQjRwU0I0cFNCNHBTQjRwU0I0cFNCNHBTQiBJR05oY0dGamFYUnZjZz09IElITnVaV0ZyWlhJPSBJR3BsYm1VPSBJR1JoYW5VPSAwWVBSZ05DOTBMRFF1OUM0MFlIUmdnPT0gSUdGa1pYUT0gYVhKaGJ3PT0gNzd5Vjc3eVEgSUdGcmRHbDJibTl6ZEdrPSBJRlJ5WVcwPSBJR052Ym5ObGJuTnYgSUhKbGJuTmwgSUdSbGMyVnRjQT09IElIZG9hVzF6YVdOaGJBPT0gYkdWMHc2az0gSUhkbGMyVT0gSU9DcWh1Q3FyK0NyaStDcW5PQ3FxQT09IDFhSFdnZFcrMWFIVnJnPT0gSUhKbGJXSnZkWEp6WlcxbGJuUT0gSU9DNGlPQzRzK0M0bWVDNHArQzRtUT09IDRLUzU0S1dMNEtTNDRLV04gSU9DNWdlQzRndUM0cCtDNGgrQzRoT0M0cGVDNHJlQzRoK0M1Z09DNGxlQzRvdUM1Z09DNHErQzRtZUM0dCtDNHJRPT0gSUdkaGNtRnVkR2w2WVE9PSBJRzFwZEdFPSBYMUJTUlVZPSBJSE5vWld4MmFXNW4gUjNsdCBVSEpwYldFPSBJT0NtaHVDbXVlQ21wQT09IElHSnlZWFE9IElHSnlkWFJ2IElFRk1WRVZTIElHUnBjM0oxY0hScGIyNXogMEw3UXRkQzAwTGpRdlE9PSBjMlZtIElFZDFaWEp5WlE9PSA0TFdCNExTVjRMUys0TFN3IDVhU2kgSU5DLzBZRFF1TkdJMEx2UXZ0R0IwWXc9IElGQnNZV2x1ZEdsbVpnPT0gSU5lWDE1WT0gSU1POGFBPT0gQ1c1aGJXVnpjR0ZqWlE9PSBZWGx6WVhrPSBJR2hoYkhSbFpBPT0gSU9DMHFPQzF2ZUMwbGVDMHZ3PT0gWDFKbGMzQnZibk5sIDFZVT0gNEs2cDRLK040SzZ4NEs2LyBJTm1GMkxuWXNkaTIgWVhKNWJBPT0gSUd0bGMyVnMgYldGdWRXWmhZM1IxY21WeSBJRVZ6WTI5eWRHVT0gNExLLzRMT1YgSUc5d2NIVnlaUT09IElPQ21xdUNtc09DbXYrQ21yT0Ntc09DbmplQ21wQT09IElPaVBvT2lQbkE9PSBkbWxoWkc4PSBhR1Z5Y3c9PSBJR0p2YkhOdiBJTTZ5enJIT3VBPT0gSU5lYzE1VFhvUT09IEwzTmxZM1Z5YVhSNSBJR0poY21KbGNnPT0gSUdwaGQyRmkgSU5DMDBMWFJndEdNIElITjFhV05wWkdGcyBMazFCVkVOSSBJTkN4MEw3UXU5R0IwTGpRdk5HRCA0TFMrNExTcTRMV040TFNxIElPQ21sZUNtdnVDbW13PT0gSU91dnVPdWVtQT09IDRZT1U0WU9SNFlPZzRZT1k0WU9WIElIZGhiR3RsY25NPSAwWUxRdGRHQTBMM1F0ZEdDIExXRmpkQT09IENXeHZZdz09IElPQ3F1T0NyZ2VDcWd1Q3FwdUNxc0E9PSBVMnhwYm10NSB3Nkp1Wlc4PSBhVzl1WVhSdiBJT0MwcStDMWhnPT0gMEw3UXROQzEwWURRdGc9PSBJR0Z6YzJsamRYST0gMEx6UXZBPT0gSUZSaGJHeHBibTQ9IENYUm9jbVZoWkE9PSAwTGJRdU5DeSAxYUhWck5XaDFhL1ZvZFcyIElITnRaV3hzWldRPSBJaWtyIGMzQnlaV3M9IElFdGhiV0U9IElITmxjR0Z5WVdSdiBJR2x1ZEdWeWRtVnV3NmZEbzI4PSAyWW5aaHRtSiBJT0NtdU9DbW1nPT0gWDBWT1JFbEJUZz09IElOQ3cwTFRSZzlDNjBMQT0gMllYWmlObUcgSUhCbGNuTnZiMjV6WjJWblpYWmxibk09IElDSWpJZz09IElGZGxjbVJsYmc9PSA1WXlGNVpDciBMM05sWXc9PSBJR0pzWldGciA1WnlvNTdxLzVadTk1THFuIElPQ3lsZUN5cFE9PSAxNW5Yb3RlWjE1MD0gSU02NHpyWFBpUT09IElIQmhjbU5vYldWdWRBPT0gSUhGMWIzTT0gSUdsdFlXZHBibWx1Wnc9PSBJR1Z1Wm05eVkybHVadz09IEpTY0sgUm5KbFpXUnZiUT09IFgwSlBUMVE9IElOZWUxNWpYcUE9PSBJRTVoYTJGdCBZMjl5Y21WdiBJRzlyZFcwPSBJSEpwYjNSeiBUVWxFIGFYcHBaWEpsYmc9PSBRVk5UUlE9PSBJRzltWm1WdVpXND0gSU9DeXR1Q3l2K0N5dFE9PSBMVU5UIFZISmhibk5qY21sd2RBPT0gSkdSaGRHVT0gSU5lWTE1QT0gWDNOc2FXUmwgWDB4QlZBPT0gWlhSbGNtRT0gSU9DcW5PQ3Fydz09IFlYSnFZUT09IElHVnRaWEpoYkdRPSBJR1JwYzNSeVlXTjBhVzVuIElOQzkwTDdRc3RHTDBMdz0gSU9DbXJPQ212K0NtdHVDbmplQ21yT0NtdnVDbXVBPT0gSU95YXVBPT0gSUhSaGEyL0VrV1Z5IDdKaWs2NHFZIEtTRUsgSUVOeWIyMD0gWDFabFkzUnZjZz09IElOR0EwTFhRdE5DNjBMND0gVm1GayBRbFJVWVdjPSA0S1MvNEtTMTRLUy80S1NuIDRLZXc0S2VONEthaiBSbXhwWjJoMGN3PT0gNWE2SjViNjkgWlhkaGNnPT0gSUhKbFlYTnpkWEpwYm1jPSBJTU9jYm1sMlpYSnphWFJsYzJrPSBJRXhsWjJWdVpHRnllUT09IElHUmxjMmR5IElHRjFZM1J2Y2c9PSBjMnhoZG1VPSBJR1p2Ylc5eiBJR052eGI0PSBMWEJsWlhJPSBJT0M0Z2VDNG8rQzR1T0M0aCtDNWdPQzRsK0M0bnVDNG9lQzRxK0M0c3VDNG1lQzRoT0M0bytDNHJ3PT0gSUc5aGJuUT0gSUdKeXc3bz0gSUhKeCBJRkJoZVhKdmJHdz0gVFhWcGRHOD0gSUhkNloyekVtUT09IFpuVnpZMkYwWldRPSBJSEpyIExtSmhiR3c9IElHaGhaR2x6IElGbDJaWE09IFgwWk8gSUhOMGNtOXVhV1U9IFlYSnBlV0U9IDZabWs1THFHIFFYVnlZUT09IFVHOTBhVzl1IElHWmxkSFE9IExXZDFhV1E9IDBMclF2dEN5MFl2UmhRPT0gSU9HRG0rR0RtT0dEbkE9PSBZV3h6WlhadmJBPT0gSU9lVW53PT0gSUZOb2FXMWhibTg9IDRLUys0S1NYNEtTdyBJRXh2ZG1WeWN3PT0gYVhabGJHMWxiblJsIElHZGxiR1ZuZEE9PSBWRzkxWTJobFpBPT0gSUd0aGJHRnUgVEdWaGRtVnogSUc1dmRIUmwgSUhSb1pXRjBjbVZ6IGRXVnNaWE56IFVFaFFSWGhqWld3PSBibWxsYW5ONlpRPT0gSUc1dmJXM0RxUT09IElHdHZibk5sYXc9PSA1NldkNDRHRSA0WU9hNFlPVTRZT2MgMExMUXZ0R1kgTFdWc1pXMWxiblJ6IFJYRjFhWFpoYkdWdWRBPT0gSUNjdkx3PT0gSUdKc2FXcG0gSUdSbHhKOWxjbXhsYm1RPSBMV3JEcEdoeWFXZGwgSUVsdWRHVnNiR2s9IGRYSm5aVzl1IElPQ3F0ZUNxditDcXB1Q3JqZUNxcitDcXZ1Q3FzT0NyamVDcXBlQ3JnQT09IElIQnlaV1J6WldRPSBJT0M0cXVDNHN1QzRvZUM0cXVDNHRPQzRtdUM1Z09DNHJlQzVoK0M0bEE9PSBJT0dBbHVHQXZPR0FoZUdBdWc9PSBaR0ZuWVc1bllXND0gSU1PbnlabHIgSUhERG9uUT0gSUZORFF3PT0gWDBkRiBJRlpwWld4bVlXeDAgSUhSbGMzUnYgSU9Da3F1Q2tzT0NsamVDa3RRPT0gSUd0cGEyRT0gSUZOM1lXZG5aWEk9IElOZVYxNTdYcWc9PSBZblZwYkdSbGNuTT0gSjJGMWNtRnBjdz09IElHZHZiMlIzYVd4cyBJTktqIElPQ3doK0N3cGc9PSBZWEowYUhKcGRHbHogVDNCMGFXMXBlbVU9IFRXOXljR2c9IElHVjRZMlZ5Y0hSeiBJT0c3alc3aHU0MWs0YnVsIElHUmxjMkU9IDBZSFF0ZEM2IElGTmhiVzA9IGRzT2hiZz09IElIUnZibVZrIFZHOXMgSUNjcFd3PT0gSU9HRHJ1R0RrT0dEb0E9PSBJSFpsYkdWdSBZV0o1WlE9PSBQRlJMWlhrPSBJRzl6WTNWeSBJR1poYldKaCBLQ0lrTGc9PSAwWUhSZ3RDdzBMcz0gSUVkaGFXNWxjdz09IFgyTndjQT09IDI0elpoTnVNIElObUkyTEhZc3RpMCBJTkMvMExYUmdOQzQwTDdRdE5DdyBJRzFsYm1OdlltRT0gSU5HQjBZZlF0ZEdDMExBPSBjSEJsZEE9PSA1cWFDNkthQiBJTkN4MEw3UXU5R00wWWpRdnRDejBMND0gSUdsdWRtbDBZUT09IElOZWkxNm89IFpYaGggSUhOMVltcGxkQT09IElHTnZibk5sYm5NPSBhV1psY25NPSBXbTl0WW1sbCBJR2xvZEdsNVljT24gTG5GMVpYTjBhVzl1Y3c9PSBJR2ZKbVE9PSBJSFBEdkc1ayBJSE5sWXNPayBJT0NrdGVDa3YrQ2t0ZUNrdnVDa3VRPT0gTGxCQlVrRk4gSUV0dWIzaDJhV3hzWlE9PSBMV1Z6ZEdGeSBJRWRNUlZNPSBJSFJoYzNOaGJtaz0gWVdSbGJtRnogSUVOSlJnPT0gTFhObFkzVnlhWFI1IElPR0RrdUdEa09HRG9PR0RtUT09IElFTk1UME5MIGJXbHNiR2x6WldOdmJtUnogSUhKbFpuSmxjMmh0Wlc1MGN3PT0gNExTKzRMU2wgWlhKdGFXNW4gSUdGa1pHRT0gSUd0dnhaOD0gWVdKbGJHOD0gSU9HRGt1R0RrT0dEbk9HRGxlR0RtT0dEbCtHRGtPR0RvT0dEbE9HRGtlR0RtT0dEb1E9PSBJR2xrWlc1MGFXWnBZMkZrYnc9PSBJT0Nrbk9Da3NPQ2xndUNrc0E9PSBJRTNodTVsMCBJTm1JMmIwPSBJRzl5WjJGdWFYTmhkR2x2Ym1GcyBJR05zY2c9PSBMV1ZrWlE9PSBJR04xYVhOcGJtVnogSUZCSlJRPT0gSU5DeTA1blNtOU9aIElIUm9aWE09IElHYkVnMk4xZEE9PSBRbFZHUmc9PSBJR1ZzWldOMGFYWmxjdz09IElGRldaV04wYjNJPSBJRzVwWldSeWFXYz0gSUZKdlltOD0gSUd0aGRIUmxiZz09IFpXeDFZUT09IElPQzRtZUM0c2VDNGdlQzRwZUM0aCtDNGwrQzR1T0M0bWVDNHF1QzRzZUM0b2VDNG51QzRzZUM0bWVDNG1PQzVqQT09IFpXNWthV1JwYTJGdSBSVlJGIElHMWhhWEpwWlE9PSBlV1ZqWTJuRHMyND0gSUdobGNtMXZjMjg9IDBMRFJnTkdDMExEUXZOQzEwTDNSZ2c9PSBJR25GbjJrPSBMM05wYlhCc1pRPT0gSU5pejJxL1poOW1LIGIyNWhkR1U9IGMyeHBZMnM9IElPQ3FuT0NxaUE9PSBJTVdmYVhKciBJSFJsYkd0bGJuTT0gZW5WblpXaGxiZz09IGIzTjBZVzUwWlE9PSBJT0dEbnVHRG1PR0RvT0dEbmVHRGtRPT0gTG1aeVpRPT0gYzJ0aGJBPT0gYjNKbFp3PT0gMktmWXR0bUsyTGs9IElHNXZiMnM9IDZMNm0gNWFTbjViaUkgSU9PQnFBPT0gSUhOdmJHbGphWFJoWkc4PSAxYmJWcGRXMjFvUT0gSUdsdVpHbDJhV1IxWVd4cGRIaz0gSUdOaGJuWnAgSU5lcDE1WFhuQT09IElHTnZiblJsY2c9PSBJTm1GMjR6WXNRPT0gSU5pbzJLM1lzUT09IElHWnl3Nmx4ZFE9PSBJTkdBMExYUXM5R0QwTHZSajlHQTBMM1F2Zz09IElGQlBTVTVVUlZJPSBJSFpwYkd0aCBRVXhKUjA0PSBWOE9rYUhKbGJtUT0gNWJlbTVwZVggSUVKeVpXWT0gWEhoayBRMjlzYjNKaFpHOD0gSUVobGFXNXlhV05vIElITnZabVZ5Ymc9PSBJSFREcVc0PSBLRTFoZEhKcGVBPT0gSUdOdmJuUnliMnhzYnc9PSA1cHlmNXB5ZiBJR3BsWlhBPSBJTlc0MWJMVnV3PT0geEt0ayBJT0NrdGVDa3Z1Q2t1T0NsamVDa3BPQ2t0ZUNrditDa2xRPT0gY21WbmJHOD0gTG1kaGRHVjNZWGs9IElIQmxaSEpoY3c9PSBWR1ZzWlcxbGRISjUgSUhCd2JBPT0gSUdSbGMzQmxjblJoY2c9PSBJT0N3cnVDd3VlQ3d2K0N3c3c9PSBJR0Z3YjNCMGIzTnBjdz09IElOcXAyYjQ9IElOQ1MwTEE9IElIQnliMlpoYm1sMGVRPT0gNDRPczQ0T0Q0NE9JIElIQnZibVZ5YzJVPSBJTkMvMFlEUXZ0QzEwTHJSZ3RDKzBMST0gWDA1UFZFbEdXUT09IDRLNi80SzZaIElHMWhZV05vWlc0PSBJSFZyZFdzPSBJR1Z5YVhSMHc2UnBiZz09IDU2YTkgSUhKMVluSnBjWFZsIElPeVlpT3lWdlE9PSBjMjNEdG1kc2FXTm9hMlZwZEdWdSBZWEp1YVhOellXRT0gNlllTjZZZVAgTFhKbFoybHZiZz09IDRZT1E0WU9xNFlPVjRZT1k0WU9oIElFeEJVQT09IElFeHZZMnR6IEtHTnNhbk09IElHaDFjMlYwIDBMTFF2dEM5MExnPSBJTmVYMTVQWHFkZVoxNTA9IElOR0IwWUxSZ05DdzBMM1F1TkdHIFpXeGlaVzQ9IDVxaWg1b3VmIExYTmxZM0psZEE9PSBJRzVsWTJ0c1lXTmxjdz09IElHMXBiR2wwWVdseVpYTT0gSUdwcGJtZHogSUU5aWFtVmpkR2wyWlhNPSAwWWZRdU5HRiA0SzZxNEsrTjRLNnE0SzZmNEsrQjRLNlY0SzYvNEs2eDRLNms0SytCIElITndaV05wWm1sbGF3PT0gS0dKbCBJR2x1WkdWd1pXNWtaVzVqYVdFPSBJRXhFVEE9PSAxNmpYa3c9PSBJR2JEdG5KemRNT2wgSUd4cFpXWmxjblE9IGIzWnBiZz09IElGTlVVa1ZCVFE9PSBJT2E0cnc9PSBJR0p2WkhsaWRXbHNaR2x1Wnc9PSBJR0ZqWTJWcyBJRzNEdkhJPSBJTkNRMFlnPSBJR0ZqYUdGMGN3PT0gMEw3UXV0R0QwTDg9IElOQzQwcC9Rc05DMyBJTmlxMkxYWmhkdU0yWVU9IElOV2gxYlhWdmRXLzFhWFZzZz09IElFaGxZV3c9IFYyOXlhMkpsYm1ObyBJRmRCVmc9PSBMbTFwIElOaXMyTEhiak5pbjJZWT0gYVhSbGJHaz0gMTZuWGtBPT0gSU5TejFvQT0gTG0xaGMzTT0gS0dadmNtMXogSU5DNjBMalF1OUMxMEw4PSBJR1JwYTJWdVlXdz0gYzNCaGNuUnVaWEk9IElId3RMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW89IElOQzgwTGpSZ2c9PSBJSFIxZEhSMSBJQ0lwSWc9PSBJSEJsY25OMVlXUmxaQT09IElOR0EwTERSaHRDNDBMN1F2UT09IDVhR3I1WWFaIElHUmtaV1p1ZVdSa2FXOD0gSUdSeWFRPT0ga2VHZmdlR2Vudz09IElPQzRxdUM0cytDNG1lQzRzZUM0Z2VDNWdPQzRwZUM0Z3VDNHN1QzRtZUM0dU9DNGdlQzRzdUM0b3c9PSBJT0M0cXVDNHMrQzRtZUM0c2VDNGdlQzVnT0M0cGVDNGd1QzRzdUM0bWVDNHVPQzRnZUM0c3VDNG8rQzRyZUM0aCtDNGhPQzVqT0M0Z2VDNG93PT0gSUhCeXc2bHdZWEpsIElIUnlZVzV6YlE9PSB3NlJ1WkdsblpXND0gSUdGaVlXNWggSUVSaGRHVnAgSUZacGJXVnYgSUdKc2IyOWtjM1J5WldGdCAxNkRYb2RlVjE2bz0gSUVkMVlXNW5lbWh2ZFE9PSBJT0N3cnVDd3ZnPT0gSUhSNFlXbHogSUdOdmJtWnBZWEk9IFNWUklSVkk9IElHSnZiMjQ9IHhJMXBiZz09IElHUnBkSE09IElNbVpiR0YyeVprPSBJR05oY25ScGJHRm5aUT09IDBMYlF1TkM5IEluTjBjbU52Ym5ZPSBJRzF2Ym1GemRHVnllUT09IDQ0R0M0NEdvIFlYQndiM0U9IExuUmogZEc5dVp3PT0gSUdGcWRYTjBaWE09IElOQy8wTDdRdTlHRDBZZlF1TkdDMFlIUmp3PT0gYkdWamF3PT0gMFlEUXRkR0IwWUhRdU5DeSBJTmVTMTVuWG5BPT0gNExpcjRMaU40TGkwNExpSCBJRVY0YVhOMFpRPT0gSU5DODBMRFJnTkdJMFlEUmd3PT0gS0hCdmJHbGplUT09IElOaXUyWVRhcVE9PSBJR1JsYzJOMVpXNTBiM009IElPQzRyZUM0c3VDNGhPQzRzdUM0bytDNGlPQzR0ZUM1Z09DNHJlQzVoK0M0b2VDNWdPQzRyZUM1aCtDNG9RPT0gZEdscVpBPT0gSUdWemRNT3RiUT09IElGQmhibVZzY3c9PSBJRDgrRFFvTkNnPT0gSUcxbGRHRnNiSFZ5WjNrPSBURmM9IElOZVYxNVhYbWRlWjE1dz0gSUc5emJBPT0gSUZkaGJHeHdZWEJsY25NPSBJR0ZqWTI5dGJXOWtZWFJwWlE9PSBJTmVTMTVIWGxkZVUxNVE9IFVISmhZM1E9IDRZT2M0WU9VNFlPUjRZT1kgSUZSbGNtMXBibVU9IElPQ21yZUNtdnVDbXJPQ25odz09IElPQ2txT0NrditDa3NPQ2xqZUNrcHc9PSBJRVJ2YzNRPSBJT0M1Z09DNHJlQzRudz09IExYTjVibU09IElPdXlpTzJZdUE9PSBJR0YxWjIxbGJuUmwgSU9Dd3F1Q3hqZUN3c09Dd3RnPT0gVTFCUyBJR1oxYm1WeSBJRUo1WlE9PSBJT0NrdU9Da3YrQ2tsUT09IElFeGxhWFIxYm1jPSBjR1Z5YzI5dVpXND0gSUhCaGNtbGhkSFZ5IElFdHZlZz09IElIYkRzbTVuIElPR0RwZUdEbytHRHFRPT0gSU9pL2hlbWJ0dz09IElGSmxkSFZ5Ym1sdVp3PT0gSU5lbTE2UT0gSUd0dmJuUmhhM1JsIElISmxkRzkxY200PSBJRWRsYm04PSBJSEJvWVhKdFlXTnBaUT09IElPQ3VxT0N1bGVDdXNBPT0gSU9Da3BPQ2txdUNrdnVDa2lPQ2tnZz09IElGTjBaV1ZzWlE9PSBMMEZKUkZNPSBJSE5sYzJGdFpRPT0gSUdabGNtNWxjZz09IElPQ2t1T0NsZ09Da3JnPT0gSUdWeVoyVmlaVzQ9IElObUYySzdZdGRtSTJMVT0gSU5XaDFiYlZ0QT09IElOZVExNW5Ybmc9PSBJT0dEa3VHRGtPR0RrK0dEa09HRG1BPT0gSUd4cFltVnlkR2xsY3c9PSBkbWxsZEE9PSA1Wnl3NVorZiBJR2R5WVhWeiBJR1oxWjJsaGRBPT0gSUhCemVXTm9iM009IElPQ3dydUN3dnVDd3NPQ3hqZUN3bFE9PSB3NnR1ZEdVPSBJR05oY21KcFpHVT0gdzZSMWJXVnUgWDJGeVpRPT0gSU9Dd3FPQ3d2dz09IElFMWxZdz09IElHTnZiV0p2Y3c9PSBJR2h2YzJrPSBjR0YwY21samF3PT0gTGxOamIzQmwgdzV4UyBJRlJvWXc9PSBJTkM4MFlQUXV3PT0gMEw3UXNkQzcwTFhRdkE9PSBJSEpsWkhWNCBJSEJ5YVc5eWFYVERxUT09IEtIUjIgSU9DcXVPQ3FzT0NyamVDcW5BPT0gSUdsdWRHVnpkR2x1WlE9PSBJSEJ5YjJKaGRHVT0gSU9DeWgrQ3lndUN5b1E9PSBJTkM3MFpiUXVnPT0gSU5PcDBMelF2UT09IGIzTnZiV0ZzIGIyOXVaQT09IElPQ21yZUNtditDbW9lQ212K0Nta3c9PSBaWGgwWlc1MCBkSEpoYVd3PSBkWE5zWVhJPSBJTkMrMFlMUXN0QzEwWUxSZ2RHQzBMTFF0ZEM5MEwzUXZ0R0IwWUxSakE9PSB5WmxzeVpseWFXND0gSUV4MWFXZHAgYzJsdWFYbz0gSU5lVTE1blhxQT09IElITjFjSEJzWlcxbGJuUmxaQT09IElITmxiWEJzYVdNPSBJRXg1YldVPSBJR2g1YzNRPSBZV2xvIElOR0IwTDdSZ2RHQzBMND0gS1RzTkRRbz0gSUVGdVpHaHlZUT09IFkyaGhablJsYmc9PSBYM05vYVhBPSBJRmRsYlE9PSA0TDQ9IDBMUFFzTkM5MExEUmhkR00gSUVOaGRHVT0gSUVsdWJuTT0gSUdOdmJYQnZjMmwwYjNJPSBJSE42WlczRHFXeDUgUW05dmJRPT0genEvUGljNjkgSUdOaGJjT3BjbUU9IGFXcDZhV2M9IElPQ2tuK0NsamVDa3NPQ2xoK0NrcUE9PSBMMk5vWVhRPSBMa05oYzNRPSBJR0ZvYjNKeVlYST0gSUdsdVpNT3BjR1Z1WkdGdWRBPT0gSU5DUzBMZz0gVTJWeXc2RT0gVFdsdWJnPT0gSUhOcGNtVT0gMks3WmlOaW4yWWM9IElHRmhiblJ5Wld0clpXeHBhbXM9IElHbHRiV1Z5YzJVPSBJR05oY01PdGRIVnNiM009IExIUmxjM1E9IElOQzQwTDNSZ3RDNDBZWFF2dEN4IExuaDBaWGgwIDRLNlY0SytONEs2VjRLNi80SzZ2IDRwaU8gNEtTdzRLV040S1N1NEtXQSAyS2ZaaHRtSTJZcllxUT09IElPQ2ttK0NrcUE9PSBJR2x1Wm05eWJXRmphV3BsIElOR0EwTERRdE5HTCBiM0p6WTJoMWJtYz0gSU95SnZlcXlqQT09IFJHOWwgVG1GMFlXdz0gWVhSciBUR1YwY3c9PSBJTmluMllUWmlOaXoyTGM9IElGUmxiWEJsY21GMGRYSmxiZz09IFpXNTZaV3RoIElFVmpiM009IElPcXlnK3VQaEE9PSBLRVY0Y0dWamRHVmsgWlc1MWIzVnogWTJ4aGMzTndZWFJvIElIZGhibVJsY21WayBJTkM4MExYUmdkR0MwWU09IGFYSnBidz09IElHTnZibVpsYzNObFpBPT0gSUhKbGRHRT0gSUdWcmIyNXZiV2xyIElHbHVhWFJwWVd4eiBJTm1FMlliWXI5bUcgWDJSMWNBPT0gYVdWdWMyVT0gSUZGVlJWTlVTVTlPIDRLV040S1NWNEtTKyA1YTZlNXBlMiBJTkMvMExEUXN0QzEwTFE9IElGTmphSEpsYVdKbGJnPT0gSUZKTlV3PT0gWTJWd2RITT0gSU9la3VnPT0gSU0rRHo0VFBnYzZ4IFBTZ28gMWFIVnZ0V2gxYlhXZ0E9PSBJTkN3MFlMUmc5R0EgS205aWFtVmpkQT09IElFTkdRUT09IElHUmxjMlZ0Y0dYRHNXOD0gSUhSb3c2aHRaWE09IFBGUmhZbXhsIExtVnVaVzE1IElOQ3cwTHZTazlDdzBZZz0gdzdaeVpHVnkgSUdOb2IydGwgTG1kemRXST0gSUhObFozSmxaMkYwYVc5dSBJT0M0bGVDNHRPQzRsT0M0bGVDNWlPQzRyZUM0bmVDNWlPQzRzdUM0b3VDNGd1QzRzdUM0b2c9PSBiMjl1ZFE9PSBJTm1IMktiWXB3PT0gSUZOd1lYSjBZVzQ9IElHTnNhWEJ3WldRPSBJSEREdFdocSA0S2VINEthcTRLZU40S2FmIElOQ3kwTFhRdE5DKzBMdz0gMFlyUXNnPT0gSUZCRVJuTT0gMkszWmhkaXAgYjJKcFpRPT0gSU5pbjJZVFlzZG1EIElHOXNhWFpsY3c9PSBJT0NxbGVDcmgrQ3FuK0Nxc3VDcmdBPT0gTG1Ga2FuVnpkQT09IElGRjFZWEowWlhKc2VRPT0gYVhOMGNtbHIgdzYxemMybHRZUT09IElGVnRabVZzWkE9PSA0S1dINEtTeTRLU28gQ1dkeVlYQm8gWDNOcFpBPT0gWm1GNiBMbkYxWVc1MCBJT0N1cE9DdXNlQ3ZqZUN1cXVDdmkrQ3VwT0N2Z1E9PSBSMWc9IGMzZGhaMmRsY2c9PSBJR0psYUc5bFpuUmxiZz09IElOR0IwTERRdWRHTDBMMD0gSU5xcTJZYllyOW1LIElOQzkwWTNSZ0E9PSBJR2h2NGJxaFkyZz0gSUd0dmJXMWxibVJsIElPQ211T0NuakE9PSBKMlZ0WWc9PSBaV052Ymc9PSBhWE5oZEdsbGN3PT0gSUVOdmFBPT0gWDJkcGRtVnUgSUcxaFltbHNhWE09IElNV2ZaWEowIElFVnNhV2RwWW1sc2FYUjUgSUhobSBPM0U9IFZHOWsgYjNCc1lYTjBhV009IDRMaUU0TGk1NExtSSBJRzF2ZDJWeSBJR0ZpWjJWemRBPT0gMllqWXNBPT0gWDNabGFHbGpiR1U9IElITmhZM009IElPQ3V0ZUN1c09DdmdlQ3VsZUN1ditDdXNlQ3VwT0N2Z1E9PSA0TFNWNExXTjRMU1Y0TFMvIExtaHZkbVZ5IGJtRmxkMlZzWlE9PSBiV1Z0YjNJPSBJRkpsYzNSeWFXTjBhVzl1Y3c9PSBJTmFIMWIwPSBJR0ZyZDJGcCBZWEpwYjNRPSAxYUhXZ2RXaDFiND0gS0hKbGJRPT0gSU9DMHJ1QzB2dUMwc09DMWpRPT0gSUdwaGQzTT0gWDBSTVRBPT0gYUdWMGFHOD0gSUZCaGMyTT0gSU5pbjJZYllzUT09IElPQzNnK0MyZ2c9PSBYMFJKUTFRPSBMbWhzIElPQ2tqK0NrcWc9PSBJT0dEbWVHRG5lR0RuT0dEb3VHRG9BPT0gSU9XSHBBPT0gUFdsdVpHVjQgSUVWc1lXbHVaUT09IElHUmxkR1Z5Y2c9PSBJRzNodXExMCA3SUt0N0tDYyBJT3lDck9xeHRBPT0gWDJWemRHRmtidz09IEwybHVkR1Z5Wm1GalpYTT0gSUVGd2NHeHBZMkZpYkdVPSBiMnhoY21rPSBJR0Z5WTNNPSBkV3hsYXc9PSBJRTVGVXc9PSBJSFJoY25rPSBJT3lla095RXVBPT0gSUcxMVozTT0gSUhQaHVycz0gUG1JPSAwTDdRdHRDdyBJTkN3MEwzUXNOQzcwTGpRdDlDdyBJRlJvWlhKaGNHbHpkQT09IElHZHlhV3hzY3c9PSBJTkN5MExqUXROQzEwWUxSakE9PSBJT0N3aGVDd3B1Q3d2dz09IElOV3MxYXZWdHRXbDFhelZ1TmFDIElHRnpjM1Z5WlhNPSBJT0M0bmVDNWlPQzRzdUM0b3VDNGd1QzRzdUM0b3VDNHJlQzRyZUM0bWVDNWhPQzRwZUM0bWVDNWpBPT0gSU9DNG5lQzVpT0M0c3VDNG91QzRndUM0c3VDNG91QzRndUM1aU9DNHN1QzRwdz09IElPQzRuZUM1aU9DNHN1QzRvdUM0Z3VDNHN1QzRvdUM0cGVDNHNPQzRoT0M0b3c9PSA1cldUIHc3aHljdz09IFFtRmphMlJ5YjNBPSBJT3lYbEE9PSBJT0dEcU9HRGxPR0Rsdz09IDRMUzQ0TFdONExTViBJT3lnaE95WGtBPT0gdzZocGVHVnkgSUZOMWMzQmxibk5wYjI0PSBJR3h2Y21jPSBJRzFwYm1sdGFYcGxaQT09IFkzcDV4SWM9IElPQ21wdUNtbGVDbmplQ210K0NtditDbW93PT0gSUZWeWRHVnBiQT09IElHeGxaMjg9IElNTzJaQT09IElHOWtZUT09IElIQmxjbk53WldOMGFYWmhjdz09IElPQzBodUMwc09DMWkrQzBsK0MxamVDMHJ3PT0gSUV4dloybDBaV05vIElFWmxjbTV6WlE9PSBJSEoxYm01aFlteGwgSUhCbGJtNWxaQT09IElHMWhhMmx1IGVXbz0gSUhSeVlYUmhaRzl6IEtXRnVhVzFoZEdWayBYMHhwYm1VPSA1WVdvNXJDUiBJTml6MllmWmhRPT0gSUdKbGNzTzl3NlJ5IElITnVaVzA9IDBKL1F0ZEdBMExJPSBJRk52Ym05dFlRPT0gSU5DeDBMalF1OUMrIElGSmhiVzl1IElObUYyTFRZcDltSDJLL1podz09IDBMdlF1TkdDMFl3PSBaWFpsYm05a1pBPT0gMTZEWG53PT0gYVc1MFpXNWsgN0ppbCBJSEJsZEhKdiBJRzlpYWNTTiBMa05QVEE9PSBVMlZ1YzI5eWN3PT0gSU5DLzBZRFF2dEMwMExEUXR0QzEgdzdabVptNTFibWM9IGZXQXBPd29LIDdJcWs3WWFnIElOQ3cwWUxSZ05HTDBMelFzQT09IDQ0Q040NENCIFlYWnBiR2s9IEtIQmhkR2xsYm5RPSBJTkMzMFlEUXRkQzcgenJqT3NjNjkgSUM5ZVd3PT0gYTJGNSBJT0NrdGVDbGlPQ2t0Zz09IElPQ3FoZUNxcU9DcmdlQ3F1T0NxdnVDcXNBPT0gSUhWdWIyST0gTG5WdGJBPT0gSU9Da3VPQ2tydUNrdnVDa3ArQ2t2dUNrcUE9PSBJT0dEb2VHRG1PR0RvZUdEcmc9PSAwWVhRdnRDNDBZST0gSUdSbGJtOXRhVzVoWkc4PSBVMlZsYVc1biBJSEJ5ZGNXKyBJaTB0IENRa0pDUWtKQ1NBZyBJRlZwZEdWeVlXRnlaQT09IElPQ2t1T0NrZ3VDa3F1Q2tzT0NsamVDa2xRPT0gSU9HRGxlR0RtT0dEcXVHRG1BPT0gNFlPUTRZT2c0WU9sIFRVOVcgNEsrQjRLNms0SzZ5NEsrTiBJT0Nrc09Da3Z1Q2t1ZUNsZ2VDa3NnPT0gSU5XMDFhSFZ0ZGFBIFgzaDVlZz09IElHZGhiR2x0WVE9PSBVMjlzYVdOcGRIVmsgWlc1a1lXMD0gUlhoamJIVmtaV1E9IElFdkR2R05vWlc0PSBJRWxXUmc9PSBJR1JwYUE9PSBJRmRoZEdWeVpuSnZiblE9IElOR0MwTERRdTlDdzBMRT0gSU5DejBMN1JnTkM0MExjPSBJRTFOUXc9PSBJR04xY21WeiBYMWRJU1ZSRiBZV1IyWVc1MFlXZGxjdz09IElHNWhZMm5EczI0PSBJSEJ5YjIxMWJHYz0gMllyWXNkbUsyS2M9IFoyaGhibUU9IElOaW4yWVRZcjltQzJZclpndGlwIElHWmhibVJ2YlE9PSBTMjlrWlE9PSAwTFhRdWRDOCBJSE4wdzdoMGRHVT0gSUdWelkyeDFjdz09IElFaGhjbVIzYjI5ayBhWHBoWTJGdiBJTkNSMEw3UXU5QzEwTFU9IElGUnlhWFE9IElPdUZ1T3VncFE9PSBJR0Z1YldWc1pHVnUgSUhmRHBIST0gSUc1cmIydGggSUdKaGJHTnZibWxsY3c9PSBJR3pEcUhaeVpYTT0gSUc1MVlnPT0gSUdKbGJHbGxZblJsYzNSbGJnPT0gSU5HRDBMYlFzTkdCIElHTm9iMlI2YVE9PSBJR2x0ZVdGcllRPT0gZFhOb1lXND0gTG0xMWRHRmliR1U9IElHRjBZWFZ3ZFc0PSBJRXR2YjNCbGNtRjBhVzl1IElPQ21xdUNubk9Dbmh3PT0gSUd0MWEzVT0gSUhOMGRXUmxiblJwIElHTmhkbWwwYVdWeiBJRzVuWVhjPSBJTkNkMExEUmdBPT0gSU5DNDBMSFF2Zz09IDZhbXM1TGlLIElPQ2todUNrc09DbGkrQ2txdUNsZ0E9PSAyWVhaaU5pbjJLOD0gSUV4aGRtVnVaR1Z5IEwzTmpjbWx3ZEE9PSBJRzF2YVhOMGRYSnBlbVZ5IElIZGhaMlZ5Y3c9PSBZVzF3Wlc0PSA3N3l5IElFWnNlV1Z5Y3c9PSBJRWQxYW1GeVlYUnAgSUdsellXZGggVkhWdCBMbGRTUVZBPSBJRUZUUVE9PSBJRzExZEd3PSA1Nld0IFptVmxaSE09IElFTnZkVzUwYVc1biBLR1ZqIElHTm9aV1Z6WldOaGEyVT0gSUdWa2RXTmhkR2wyYjNNPSA0TENvNExHTjRMQzQ0TEdOIElIUnlZV1JwdzZmRG8yOD0gSUdaaFluSnBZMkhEcDhPamJ3PT0gMllqWXJOaW8gSUUxTlV3PT0gWDJWMFlRPT0gY0hKdmNIbHNaVzVsIDVZaXA1cDJsIFkyaGhibWxqWVd3PSBLR3RwYm1RPSBJTkM5MExEUXQ5R0wwTExRc05DMTBZTFJnZEdQIElOaTYyWWpZc1E9PSBJT09FIGNHOXVaVzUwWlc0PSBJRk5oY25RPSBkMlZ5Wlc0PSBJTmVTMTVQWGxkZWMxNVE9IElHOXdaWEpoWkc5eVpYTT0gSUZObGJtbHZjbk09IFQzSm5ZVzVwZW1GMGFXOXVjdz09IDRLdUI0S3FXIGFXWnBlbWxsY25WdVp3PT0gU1cxd1pYST0gdzZweVpRPT0gSU9TOW5BPT0gVmtsRVJVOVQgSUhOamFISnBhbVk9IElFSmxZUT09IFgwbE9RMUpGVFVWT1ZBPT0gSU5DOTA1blJndEM0MExZPSBJRmx2YzJnPSBJT0NrdU9DbGplQ2tuK0NrdnVDa3NBPT0gS3lkYyBJT0Mwb2VDMHYrQzB1QT09IFUyVjRidz09IDRMQ3c0TEdONExDbyA2NFNZIElFTmhjM05oYm1SeVlRPT0gSU5HQTBMWFF2TkMrMEwzUmd0Q3cgSUdGeGRXbHphY09udzZOdiBJRWx0Y0hKbGMzTnBiMjQ9IDFhSFZ2TlcyMWJqV2d0VzAgSUdOdmJtWnBjbTFoWkc4PSBiM05wWVE9PSA0S1NvNEtXTjRLU200S1N3IFBYc29ldz09IElHWnZjbXR6IDc3eUo0NEd1IFJYQnBZdz09IFgzSmxkSEo1IElHMXZjMkU9IElObUYyTG5aaXRtRzJLaz0gMWFIVnRkV2wxYXc9IExsUkpUUT09IElHaGxibVJsIFJHbGhjbms9IElHVnpZVzQ9IFkydHNaVzVpZFhKbiBJbVJsYzJOeWFYQjBhVzl1IElPQzRuK0M0bytDNHRlQzVnT0M0aE9DNG8rQzRsT0M0dE9DNGxRPT0gSU1PcGJHVjJ3NmxsIFVFbFkgSUhCbGJXSmhlV0Z5WVc0PSBJRk5oYldFPSBlR05sIElPQzRuZUM1aU9DNHN1QzRvdUM0Z3VDNHN1QzRvdUM0bytDNHN1QzRvdUM0Z2VDNHN1QzRvdz09IDBZSFF2dEdBIFVtOW5aWEk9IDFhSFZzTldoMW9BPSBJSEZ5ZVE9PSBJTkN5MExqUXV0QyswTDA9IElHeGhibXAxZEE9PSBJT0MwcXVDMWdlQzBzZUMwcE9DMWplQzBwT0MwditDMHNRPT0gSUR3L1BTUT0gNDRPODQ0T3I0NE9KIGMyeHBaR1Z6IDJLZllwdG1JMllZPSBJTkMrMFlMUmd0R0QwWURRdU5LVDBMQT0gSUcxdlpHRnNhV1JoWkdWeiBJR3hoZW1sdFlRPT0gSUVGdWJHRm5aVzQ9IElITjNZWEJ6IElHNWxZbms9IElOQ2UwTDNRdTlDdzBMblF2UT09IExuTnBaR1ZpWVhJPSBJRXBsZFE9PSBJRTVwWjJWcyA1b1NmNkxDaSBJTml2MktmWXM5aXEyS2ZaaGc9PSBMbTF2WkdWc2J3PT0gSUdScGRtVnlaMlZ1ZEE9PSBDVWR5YVdRPSA0WU9hNFlPZDRZT1IgSU5DeTBMN1FzdEdCMExVPSBJR1J2Ykc4PSBkWEpsYm5RPSBLRkpsIElHRnRjR3h2IFgweEpRMFZPVTBVPSBZbXhwWTI4PSA1ck9vNXBhSCBJRU52Y25YRHNXRT0gWDJkbGIyMWxkSEo1IFFYTnpaVzFpYk1PcFpRPT0gS0hCclp3PT0gSU5pcTJLallyZGlyIElOR0IwWWZRdU5HQzBMRFF0ZEdDIElHWjFibVJoYldWdWRHRnBjdz09IElFWnBiRzl6IGFYQnBkQT09IFlXdGxkWEE9IFVISnZaSFZyIElHeHBkR1Z5Y3c9PSBJSFBFc1hJPSAycS9aaU51TSBJR1JsWVd4bGNuTm9hWEJ6IEoxMEtDZ289IDJZallzOW1LIGIyTmxibVU9IFgyWjFkSFZ5WlE9PSBJRVZEVDA0PSA2WXM9IElHaGhjbTF2Ym1sdmRYTT0gSUhWdVptOXlaWE5sWlc0PSBJSGRsZEdnPSBiRzluWVc0PSBPa2M9IGVzTzhaMlU9IDJZN1ppQT09IFpXNTBkMmxqYXc9PSBMbkJ2Y0hWc1lYUmwgSUc1aGMybHZibUZzIElHSnZiMlJ6WTJoaGNBPT0gSUd0b2RYUT0gMFlYUmk5R0EwTERRc05HQTBMQT0gVDJ4bCBJR0ZzYzI1dlp3PT0gSUhGMVlXeHpaWFp2YkE9PSBZMmh5YVhOMCBhR2hvYUE9PSBJSFZ6WkE9PSBJTStFejRIT3Z3PT0gSU5HRTBMalF1dEdCIElHUmxiR2x0YVhRPSA3N3lCQ2dvSyBTV0Z0IFgzVjIgYjJKdmIydHogSUcxaGJHOXphUT09IElIQmxjbTFwZEdWdCBJT3lla09xNHNBPT0gYUdWdFltRT0gUGxSdmRHRnMgSU9XOXFlZWxudVM2aWVtY3VPZVV0ZWlFa2VlSmlBPT0gSUNndExRPT0gSUd4dmRYSmsgSUhWdVpHVnlaWE4wYVcxaGRHVT0gMTVIWG5OZVogSUdOdmNuSjFjTU9udzZOdiBZWE56WlcxaWJHVmsgSUhCaGFYakRvMjg9IElIQmxjbVoxYldWeiBJRWhsY203RG9XNWtaWG89IHo0SE9zYytBenJVPSA2S2lxIDBZUFF0TkdXIFUzVmliV2wwZEdsdVp3PT0gYVhKclpXND0gMEtQUXV0R0EwTEE9IElPZVp1K1c5bFE9PSAwS0hRdnRDMyBJSE52YkdOb1pYST0gZG1WdWVnPT0gWlhKelkyaGhjQT09IElHTmxhdz09IElOQy8wTERSZ05DKzBMdlJqQT09IElIRERwWFpwY2c9PSBJT0M0cXVDNG0rQzRyZUM0bytDNWpPQzRsUT09IElObUYyTG5ZcDltSTJZWT0gSUdKcGVYbGggSU5pbjJZVFlvOWlzMlliWXFObUsyS2s9IFgyVjRaV04xZEdsdmJnPT0gSUc1a2FYbGwgSUdSbGMyVnRZbVZ5IDBMelFzTkM5MFlzPSBJTkdCMEw3UXROQzEwWURRdHRDdzBZaz0gNUxxNjVyQ1I1WVd4NVpLTTVadTkgSUdkbGJtbGwgSUVGc2NHZz0gMTVuWG05ZVYxNTg9IElOQzEwWUxUbVE9PSBiV1Z5WVhNPSA0WitCNFo2UiBJRzExYkhScGNISnZZMlZ6YzJsdVp3PT0gYUc5NllRPT0gSUVSU1FWYz0gSUVCN0NnPT0gSUhObGNYVmxjZz09IElPQ21sZUNtb0E9PSA0NEtrNDRPSTQ0T3IgQ1dOdmJtWT0gS0dSbGRHRnBiSE09IGRXTm9iM009IElHdGhkWEIxYm1jPSAwSjdSaU5DNDBMSFF1dEN3IFJXNWpiMjUwY2c9PSBJRUpoYm1SbCBJR055WldGa1lRPT0gSUd0dmJuUmhiZz09IEkxTkNRVlJEU0E9PSBJRVpwWXc9PSBJR0Z6Y0dWciBjSEp2ZWc9PSBJTml6MllyWXA5aXgyS2ZZcWc9PSBRbTkxWjJoMCBiMjV6ZFcwPSBJR2R5YjNRPSBWMmxyYVdFPSBhMmhwY1dsNmJ3PT0gUEVac2IyRjAgNG9DYzRvQ20gSUdaeVpYTmpZUT09IDVweVg1cG11IFkyaDNZVzQ9IFpYUm9hV05oYkE9PSBXMlpwYkdVPSA1NXFFNTcyUjVaMkEgSUdaeXc2bHhkV1Z1ZEE9PSA0b0NNMktyWXNkdU0yWVk9IElPZWJrQT09IElFVnNaWFpsYmc9PSBJTkdCMExYUXZOR00wTFU9IFkyaGhhM0poIElPYVlrK2kwclE9PSA0TFN3NExTLyBMbWQxYVdRPSBJR3hoWTJobGJnPT0gVlhScGJHbHpZWFJsZFhJPSBiMjVoYm1FPSBTMkYwWldkdmNtaz0gNzdpUDRvT2ogVG05MFpXSnZiMnM9IElGUmxhV3hsYmc9PSBJTmkwMktmWXVkaXggSUdsemIyeGhkR1Z6IElPQ2t0ZUNrc09DbGplQ2t0K0NsaStDa2dnPT0gUjNKaFpIVT0gSUdOcGNtTjFiR0YwWldRPSBJSGhwZVE9PSBJT0N5cE9DemhnPT0gSUhCNWNtRnQgTFc1bFkycz0gSUhCeWIyUERxV1JsY2c9PSBZV2RsYm1FPSBaR1Z3Wlc1a1pXNTAgSU5lWjE1ND0gYjJ4dlozVmxjdz09IDBMRFF1OUN3MExjPSBjbVZyWlc1cGJtYz0gSUZSaGJXRnVibUU9IFgyWnNhWEE9IDJZYllyOXF2MjR3PSBYME5CVUZSVlVrVT0gNExpaDRMaXg0TGlaIElFSmxaMmx1Ym1WeSBYM0psYzNWdFpRPT0gSUcxaHc1OD0gSUhCdmRHVnVkR2xoYkhNPSBRVVpZIElObUUyWWpaaGc9PSBVbUZvIFUwVlNWa2xEUlE9PSBJT0NvbGVDcGdPQ29wT0Nvdmc9PSBJR1JwZG5Wc1oyRnkgS0hSaWJBPT0gZm41KyBJR1JwZG1sdVlRPT0gSUhOcGJYVT0gSUVkMWNIUmggYlhsNiBJRmRwWkdkbGRITT0gVkhKaGJuTnBkR2x2Ym5NPSBMbTUxYldWeWJ3PT0gSUd0aHhieGtaUT09IDQ0R3E0NEdLIDRMQ0M0TENxNExHSSBVa289IElFaDVaMmxsYm1VPSBJSEpsYkdsemFBPT0gSUVOdmJHeGhZbTl5WVhScGRtVT0gYzJWeWFRPT0gSU5pbjJZVFlyZGl6IFlYUmxiR2xsY2c9PSBJSFRFa3c9PSBJR2xzZVdWdSBVMjkxZEdobGNtND0gMEw3Umg5QzQgSU5pcTI0ellzUT09IDY2aTQ2NHVJIFUzQnBjbWwwIElOaW4yTGpiZ2RpbjJMRT0gSUVSdmJIQm9hVzQ9IElGWmxibVYwIGRtVnlhMlYwIGRHaGhkbVZ1IElOR0YwWURRdnRDOTBMalJoOUMxMFlFPSAyTEhaaU5pcCBUWFk9IElHWmhZbkpwWTJFPSBJR0ZqWlhOenc3TnlhVzl6IElObUYyTEhZcDlpcSBJSE5oYUdsaWFRPT0gSU5DNDBZSFJndEM0MEwwPSBUbVZ2IElHVnpkR1ZsYldWayBJSFp2YkdWeSB3N3pFbjhPOCBJR2h2eFo4PSBJSGRsYVhSbGJRPT0gSUZOb2FYWT0gSUdsdWJXbG5jZz09IFoyVjZiMmRsYmc9PSA1b0NuNTRpeCBhR1ZpWW1WeWN3PT0gWVc1MGRBPT0gNEtpZjRLaXcgSUdKdlpYSmxiZz09IFFWSkZRUT09IElObUkycW5hazltSCBJR05vY25sellXNTBhR1Z0ZFcxeiAwTDdRdTlDdzBMTT0gMEw3UXZOQ3cwTDA9IElGQklXUT09IExHUmwgSU5DNzBZN1FzZEM3MFk0PSBJT0NtbGVDbnNPQ212K0Ntck9DbXN1Q25pQT09IElOQzgwWXZRdWRDMzBMRFF2QT09IDBMN1F1OUN6MEw0PSB5cnhsIElOVzIxYVhXZ05XayBJR0p2ZVhWdVkyRT0gZG1Gc2J3PT0gSU5DLzBZRFF2dEMwMFlQUXV0R0MwTEE9IEwxVkogNzd5Tzc3eU8gTGxCeWIyUjFZM1J6IElPQ3l0ZUN5ditDeXArQ3l2dUN5cUE9PSBJSFpsY25CbWJHbGphSFJsZEE9PSBJT0N5dU9DeXJ1Q3lydz09IFRIVnZibWM9IEtHWnNiM2M9IElIWnZiSFJ2IElIVnViR1ZoYzJnPSBLM0E9IDBZUFJndEM0IExrVnVZMjlrYVc1biBhbk5yWVE9PSAxNlRXdjllZiBMVUpzIFJuVmxiblJsIFBDZ3BMQT09IFpXNWthV1Z1YzNRPSBJRzFwYTJVPSBLRU5sYkd3PSBkR2wxYlE9PSBJRkZWUlZKWiBQRlJ5WVc1ellXTjBhVzl1IElIQmhiR3M9IElISmxjSFZrYVE9PSBDV0ZrYldsdSBJR0oxY21WaGRYZz0gSUdobGNtVmthWFE9IElHZGhaMjdEcVE9PSA1THlZNVl5VyBLMmc9IEtHVnVkbWx5YjI1dFpXNTAgSWo0S0x5OD0gNkllQSBJSE4weFprPSBJT0N5dWVDemh3PT0gSU9DNGhPQzR1ZUM1aUE9PSBJRTlzYVcxdyBJTmluMllUWmdkaXgySzg9IElHUnBjMkZ1ZEE9PSBhR1ZoWkd4cGJtVT0gV1VzPSBlR05rIElITnZiV0p5IElPQzBydUMwdnVDMHVPQzBnZz09IElIcGhaMjkwIExtMXZkZz09IElHVjRZMngxYzJsdmJuTT0gSUhOd1pXTjFiR0YwWlE9PSA0TFN1NExXQjRMU1cgSUdaeVpYVjAgTG5OaGRtVmsgSU5pbjJZVFlwOWkwIElIUjFibWx6IGJHbG5ZWEpsIElPQ3lpZUN5cE9DemplQ3lwT0N5c0E9PSBJTkNVMExEUXNnPT0gSU9HRHBlR0RvQT09IElHMXBiR1JzZVE9PSBJSGRoYm1kMSBkR1ZzWldkeVlXMD0gNFlPUTRZT2M0WU91NFlPYiBjM1JsYkd4aGNnPT0gSUhKbGFtVmpkR2x1Wnc9PSBLRzFoZEdWeWFXRnMgNTV5TDVwMmwgSUVkMVlYSmthV0Z1Y3c9PSBJTkdCMEw3UXZ0R0MwTExRdGRHQzBZSFJndEN5MExYUXZkQzkwTDQ9IDU3cTEgSUdodmJXOW5aVzVsYjNWeiBlVzVsZEE9PSBLejBvIDBMM1F2dEdJIElOaXMyS2ZaaHc9PSBkV3JFbVE9PSBJR2x6ZEdWNVpXND0gSW1WeWNtOXljdz09IElIWmxjbTVwWlhRPSBJRTVoZFE9PSBYWDBzIElHZHZkbVZ5Ym05eWN3PT0gSU5peDJLZllwdGk1IGNtRjBlVzQ9IFRXbG4gQ1ZWSiBJR05wWTJ3PSAwTDdRdk5DeCBJT3U0ak91ZW5PdVRuQT09IElIUmxjbkpoYVc1eiBJSEpsdzZkdmFYUT0gSUVGMWRHaHZjbWw2WldRPSA1cGF3NTVhRyAxYUhWdHRXaDFhelZ1TmFDIGFYUmhjbVU9IElPV1RpQT09IEtFMWxjM05oWjJWeiA0TEMrNExDazRMR0E0TEN2IElIQmhjM1BEcVdVPSBkWE5qYUdWdSBJSE5sYTNOcCBJRk5oY21GcVpYWnYgSUhObGJtUmwgSUhSaGJXVT0gSUd0cGJHND0gSUdGdWRHbHRhV055YjJKcFlXdz0gSUVKdll3PT0gSUdOdmJtTjFjbk09IElGcDFjMkYwZWc9PSBJSEYxdzZKdSBJRVpsWVhOMCBjMjl1ZVE9PSBJR0ZoYkdGcVlXNW5aWEp6IElNNnh6NEhPdXM2MSBJTm1HMktmWmg5bUsgMllQWXM5bUsyTEU9IElFSnBiR1JsY200PSBJSFpoWTJnPSBJTTYxenJ3PSBJR1psYVhSbGJnPT0gVm5KcGFnPT0gSUhOcGJHeGwgSU5DLzBMWFJnTkN5MFl2UXZBPT0gSUhwaFltOD0gSUVaeVpXRnIgSUU1bGFRPT0gSU9DMHBPQzFnZUMwc1E9PSBJT0N5cnVDeXZ1Q3lvZUN5ditDeXB1Q3pqZUN5cHVDeXZ1Q3lzT0N6aGc9PSBJR05vY205dGFYVnQgUTA5TlRVVk9WQT09IGVtbHdiR2x1IElNT0wgSU9DdXRlQ3ZoK0N1c3VDdmlBPT0gNUxxYTVyU3k1cGVsNlorcCBYM0p2ZEdGMFpRPT0gSUdOeCBJR1JsYzNScGJzT3AgSUhCdmNtTT0gSU5DLzBZRFF2dEdHMExYUXZkR0MwTDdRc2c9PSBabTl5Ync9PSBJR2xzYkdVPSAwWWZRc05HQTBMQT0gSUhOb1pYSnBZUT09IElOQzgwWVBTdTlDNDBMdz0gTG1WdVkyOWtaWEk9IElOZVIxNkRYbGRlcDE1QT0gSUVKaGJHdGhiZz09IDVhS1ogSUdGemNHbHlZWFJwYjI0PSA0S1duNEtXdSBJT0M0bytDNHRlQzRwK0M0dE9DNHB3PT0gSU9XRnFPYXdrZVc5cWVlbHFPV2txZVdrcWVtQWdRPT0gYVc1bGJXVnVkQT09IDRLNjUgSU5DaDBMWFJnTkN6MExYUXVRPT0gSUZONWJIWnBZUT09IElITnZZWEk9IElHeGxkSHAwWlhJPSBJTkM0MEwzUmd0QzEwTE09IFhTdGMgSU9DdWhlQ3VxZUN2amVDdXNlQ3ZnUT09IElITmxjbWxoYlE9PSBJRWx1WTI5eWNtVmpkQT09IElFRnljbWwyWVd3PSBJR3hoWW05eVlYUnZhWEpsIElFTnZhV3c9IElHTnBjblZ5WjJsaCBJTkNlMEwzUmk5S2ogSU5lcDE1N1hxUT09IElFTkpWQT09IElFUjFaV3c9IElHTm9ZVzF3YVc5dWJtRjAgWVd4NiBabTl5YldsdSBJRUoxYzJObyBWMlZ5WlE9PSBJR0p5WWNPbmIzTT0gMEx6UXZRPT0gMHEzUXNOR0EwTEE9IElPQ3FydUNyZ2VDcXN1Q3F2dUNxbFE9PSBUVTlUIExtaGxjbTg9IDRLcSs0S3ExNEtxMTRLcSs0S3F1NEtxKzRLcUMgVEdWMyBUbmc9IFpYSnBZVzQ9IFoyVjBiR2x1WlE9PSBJTm1CMllyWXNkbUkyTE09IGNtbHcgSUdwcGNtRnUgNVpPSTViQ1UgWTNKcGJXVT0gNFo2QTRaK1M0WjZhIFgwZFZTVVE9IExYVnBiR1U9IElPbTdndz09IDRZT2M0WU9RNFlPaCBJSE5sZUhSeVpXWm0gMFlIUmd0Q3cwTDNRdE5HTDBMMD0gUWtsUCAwTExRc05DNzBZSFJqdz09IDE1RFhwdz09IElHRjJZVzVqWlhJPSBZVzVrYVdSaGRHOD0gSUVkbGNzT2sgSU5DNjBMN1F2ZEdEMFlIUXNOQzkgSU5DVzBKbz0gejRQT3ZNNnh6NFRPc1E9PSA0Ym1pIFpYUmxaWEk9IDU1QzAgdzZGemRHbGpZWE09IElITmxaMjl1Y3c9PSBJR1Y0WTJWd1kybkRzMjQ9IElFUnZjMlU9IFdtOWhiSE09IElHWnZjbk5sZEE9PSBhVzUwY205a2RXTmxaQT09IFkzSmxaR2wwWldRPSBYMWRwWkdkbGRBPT0gUTJGc2IzSnBaWE09IElOV2gxYkE9IElOR0YwTDdSZ05DNDByYz0gTEhScGRHeGwgSU5tSDJMclppQT09IElOQ3cwWWpUbWRLZjA1blJpdz09IElHOTJaWEp5YVdScGJtYz0gSU5DMzBMN1F1dz09IElITmpjbUYwWTJobFpBPT0gSU5DNDBMM1JoTkdBMExEUmdkR0MwWURSZzlDNjBZST0gSUV4aGNtZGxjZz09IElHZGhjM1J5YjI0PSA0S3FDNEtxVyBJT0M0bHVDNG1lQzRtZUM0cXVDNHVPQzRndUM0dU9DNG9lQzRwK0M0dE9DNGx3PT0gU1c1a1pXNTBaV1E9IDBMRFJnTkdMMEw4PSBJTlc5MWFFPSBMR1p2Ym5RPSBhWGhsYldWdWRBPT0gTDJacGJIUmxjZz09IDc3eU01b3FLIElHNWxiM0E9IENXOXdkQT09IDE1N1htZGVZIElOZW8xNVhYcHRlWjE1MD0gSU5pdTJMZlppTmkzIExHMXpadz09IElpa3BPdzBLRFFvPSBZV3hwZVdWMCBJSFREdEE9PSBJR3RzWVhONSBjM1ZpYldWdWRRPT0gSU5DKzBZTFFzdEMxMFlMUmdkR0MwTExRdGRDOTBMM1F2dEdCMFlMUXVBPT0gSUdObGJuUnBiV1YwWlhJPSBJTkM2MExqUXU5QyswTHc9IFFHbHVZMngxWkdVPSBVa2xUIElHZDVaUT09IElFTnliM2RrIExuTm9ZUT09IElHdHBlUT09IElHaDF3Nms9IElPQ21sZUNtc09DbXJPQ25oK0NtcUE9PSBJTmluMllUWmhkaTEyWWJZdWRpcCBJSEJ2Ym1sbGQySEZ2QT09IDQ0Q040NEduNDRHWiAxNTdYb05lWjE1MD0gWVdsemFRPT0gSU5pdTJZcllwOWl4MktmWXFnPT0gWW5WelkyRnkgSUZkcFp3PT0gSUhabGNtaHZaMlZ1IFozVnogNW91RjViMlQgdzcxeiBlWFJoIElIbGhiR2s9IElPQ21wT0NtdnVDbXVlQ21zdUNuaHc9PSBJRk4yWlc0PSBJRk52ZFhwaCBJSE4xY0dWeWFXNTBaVzVrWlc1MCBJSEJsY25SaGJtUnBibWRoYmc9PSBJTm1FMllUWXNRPT0gTG1Gd2NITndiM1E9IDQ0R3c0NEtUIFlXNW5iR0ZwY3c9PSBkRzlsIElOR0gwTGpRdlE9PSBZV1J2ZUE9PSBJSE4xYzJObGNIUnBZbWxzYVhSNSBKR0Z5IElFTlRkSEpwYm1jPSBJRXBoYkdGdSBJRVp5ZFdsMGN3PT0gNEtXTjRLU1Y0S1dBIDJZZlppTmlwIDRvQ1phVzVtYjNKdFlYUnBiMjV6IEtDSXZMeXBiUUE9PSBJSFZ1WTI5dGNHeHBZMkYwWldRPSBMbFpoYkE9PSBJTkM5MExEUmg5QzQwTDNRc05HTzBZST0gZEdsbGNnPT0gMktmWml0bUkgSUdadmJHeGwgSUdkeVlYcHBibWM9IElFTmhiR04xYkdGMGFXOXUgSUdOaGJtUnBaWE09IElFeHBibTQ9IElITjBiMk5vWVhOMGFXTT0gSU5tRzJZWFppTml3Mkt3PSA0TG1DNExpYiBMbFJwY0c4PSBJR2JKbVhJPSBYMk52WkE9PSBJR2R5YjNWdVpHbHVadz09IElGQmhjblJwWTNWc1lYSnNlUT09IElHZHBjbXhtY21sbGJtUnogVTFSU1NVTlUgbkdrPSBTVWRJVEE9PSBhR0Z5YVdFPSBJRTF2YVc1bGN3PT0gN0tDYzdaS0kgS0NJKyBJR1Z6WTI5dSBJR05wYVdSaGJXRmtZUT09IFgyWnlZV04wYVc5dSBJR052Ykd4cFpHVnkgYVhwaGNtVT0gSUhSaGNtdHYgNExTNDRMV040TFMxIGRYTjBiM009IElOT1owTFE9IElOaTAyYjQ9IExEb3BMQT09IGFXNW5hWG89IElISmxkbVZ1WkE9PSBJR0ZwWkdsdVp3PT0gNFlPZDRZT28gSjllZiBJTkMvMFlEUXRkQzMwTGpRdE5DMTBMM1JndEM0IElHUnlZWFhEbjJWdSBJTkMvMFlEUXVOQzcwTGc9IEoyRm1abUZwY21WeiBVMG89IFBYRT0gTFd4aGJtUT0gSUdGMWRHOXlhWHBodzZmRG8yOD0gSUhSeVlYTmwgSUdoaGNtbHVZUT09IElFVlRRUT09IElOaTEyS2ZaZ1E9PSBkV3hrZFE9PSBRMkYwYUE9PSBJRU52Ym5kaGVRPT0gNFo2MjRaNmY0WitMIExtVnVkR1Z5Y0hKcGMyVT0gYUd4aGJtZGhiZz09IFNXNTBjdz09IElIUnZaR0Y1Y3c9PSBJR2hoYzJrPSBhR1Z0WVE9PSBJTldrMWFYVnV0V3IgSUhabGRHRT0gSU9HN3BYVGh1NDA9IGFYSmhiR0U9IExXWnNZWFE9IDRLZU40S2FmNEtlTCBJSGhwY3c9PSBJRlREcVdOdWFXTmggY0hOclpRPT0gdzZWeVpYUT0gSUdOaGNtNXBkbUZzIElNU05ZWE5oIExteHBjM1JsYm1WeWN3PT0gVDFOUSA1TCtLIElHRmtiMnhsYzJObGJtTmwgSUd0dmJHMD0gS0dkbGJtVnlZWFJsIDRZQ3g0WUNWNFlDNCBJTm1GMjR6YXFkbUcgSUhSaFpHRnMgSUd6RG9XZHlhVzFoY3c9PSA1b21UNXJPViBJTmlxMktmYXFkdUIgSU91d3NPeVh0QT09IElHaHBjMjlpIFlYZGhhQT09IFltVjNhV3B6IHhJRmthUT09IElITmxhV1E9IElPeUlxdz09IGRYUmhibTg9IElOQ3IgYW05MWNtND0gMWFIVnZkVy8xYUhWdGc9PSBJRzl6WTNWeWJ3PT0gSU5HSTBMN1Jndz09IElHSnNkV1ptIExtWm9hWEk9IElFNTFkSE09IElHSnZkR0Z1YVdOaGJBPT0gSU02MXpyM090dz09IElFbFVSVTFUIElHaHZaR2x1IGMybHVaMnhsZEc5dSBJTkMzMExEUXV0Q3cwTGZRc05HQzBZdz0gNG9DWmRYVT0gSU5DUzBMRFJnQT09IElGQmhjMlU9IElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLZz09IFgzZGhkR05vIElHbG5kV0ZzWlhNPSA0TEMrNExDdTRMQ280TEMvIElOQ2kwTERSZ3RDdzBZRFJnZEdDMExEUXZRPT0gSU5DWTBZST0gMktmWXN0bUUgSUVkMWJtND0gSU5DeDBMN1F1OUN6IElHMWhlR2x0WlE9PSBJRk5GVTFOSlQwND0gSUdGdWJtOXVjMlZ5IElOaW8yTHJZcjlpbjJLOD0gUkdsaFoyOXVZV3c9IEtHeHBaMmgwIFJISmhiV0U9IElHVm1abVU9IDRvQ1paVzVqIENXTm9ZVzV1Wld3PSBJTmVlMTVEWGt3PT0gSUVKMVlnPT0gYVcxcGMyVnJjdz09IElHRnNhWEYxWVE9PSA4SitSaHc9PSA0b0NUWVc1ayBYM2RoZG1VPSBJRVZEUXc9PSBJRzNEb1hSbCAwNW5SZ05DejA1az0gWjJWc1pYWmxjbVE9IDBMalF0OUdMIDJZWFp2Zz09IElIRjFZV3hwWm1saiBJTkN4MEw3UXU5QyswTHpRdGc9PSBJTm1JMm84PSBhWEppYU1PdGN3PT0gUWxWTiA1WWFnNUxxYSAyYUxab0E9PSBJR1p2ZEc5aGJtRT0gSUhKbFpIVmpaWEp6IDY0S1k3SnFVIFEyRnNaVzVrIHc2MXVjdz09IFluVjBaWEp2YkE9PSA1NkdWIFBTSXZJajRLIElHVnFZV009IElObUkyWWZaaHRpbjJZTT0gWDFKUFZBPT0gWVhWbWJtRm9iV1U9IElHZGhibk5yWVE9PSBJTmluMllUWXBkaTEyS2ZZcU5pcCBJSEpsWkhWaiBJRzNKbVhJPSBJSEpsWm5WbmFRPT0gSUdKaGNtSmwgSU9DcWxlQ3JqZUNxcitDcXZ1Q3FnZz09IElPQ3VydUN1dnVDdXFPQ3V2K0N1c2c9PSA0WU9aNFlPWTRZT1g0WU91IFpHRmhiZz09IGNtbHJaUT09IElHTnZaWGhwYzNRPSBJRVZ1WkdsdVp3PT0gSU5DeDBMRFF1ZEM3MExEUXZkR0wwWWc9IElHMWhaSEpwWkE9PSBJSFpsY210bFpYSmsgSUcxcGJubGhhdz09IElHMWhaMmRwYnc9PSBKeWw5UEM4PSBUV1Z5WTJWa1pYTT0gSU9Da3F1Q2ttK0Nrdnc9PSBJR2h2eXJ0dmJnPT0gWVhKdWFYTnpZV0YwIElFRmpkRzl5Y3c9PSBJRXAxWjJWdVpHeHBZMmhsYmc9PSBYM0p2ZFhSbGN3PT0gSUhSNWN3PT0gSU9HRGtPR0RrK0dEa3VHRG1PR0RtdUdEbUE9PSA3N3lNNXErVTVhYUMgSUdoc1pXUT0gSU5DeDBZUFJqZz09IElHRnBjMnc9IElPQ2t1T0NsaStDa3J1Q2t0ZUNrdnVDa3NBPT0geFo5a3hMRnkgYUdWMFlXMXBibVU9IElFRnNiR1Z0WVdkdVpRPT0gVTNScFkydDUgSUZCbWJHbGphSFE9IDVMaXc1YStNIElHeHZZMkZzYVhwaGNnPT0gSUdSbFk4T2lkQT09IEtGSmhibVJ2YlE9PSBTVzV6Y0dWamRHRmliR1U9IElIWnljM1JsIElISmxkSEpoYm5NPSBJRWhsYVhvPSBJT0NrbGVDbGllQ2tzdUNsaCtDa25BPT0gSUhOdlkybGhiR2x6YlE9PSBhVzVsWVc1dSBJSE5wWjJVPSBJSEpvWVdsayBMMk52YlcxbGJuUnogSU5DeDBMN1F1OUMwMFlNPSBMWEJ2YkdsamVRPT0gSU5pejJZclpoUT09IElPQ3dyK0N4Z2VDd3RRPT0gNDRDQjViQ1AgSUhURHBtND0gSUZOamFIVnNaQT09IElHOW1abVZ1WTJWeiBmVDQ4IElFaGxjbkpsY21FPSBJRUZwY214cGJtVT0gSU9Da2xlQ2twZUNrdmc9PSBVM2x1ZEdnPSBJTkMvMFlEUXRkQzMwTFhRdmRHQzBMQT0gSUZCeWFXNWpaWE09IElHSmhjbkpsWkE9PSBZMkZ1Wkc4PSBSVzF3YVhKbCBJSFpwYzJsMFlXNTBaUT09IFUzUmhjQT09IDQ0Q1JPZz09IElIMTlDZ289IElOQ3gwTERRdWRDOTBMZz0gSUhIRHZBPT0gMExEUXV0QzQgSU9DeXRlQ3l2K0N5dGVDeXYrQ3lwdz09IElIWmxjbk5qYUdscWJtVnUgSUdkMWMzUmwgUkdWbWFXNWxjdz09IElITmhhV3hsWkE9PSA0NEsvNDRPeiA1YUtlNWJ5NiBJTkdBMHEwPSBJRXQxWkc5eiBJTkMvMEw3UXV0Q3cwTFk9IDRMT040TEtlNExLKzRMS28gSUVGdVlYTjAgVG1WMVpRPT0gSU5DeDBZUFFzZz09IEtHOWljdz09IElHRnNhMkZoIElHRmpkR2wyYVhSaGRITT0gSU5pbjJZVFlxTmkwMkxIWml0aXAgMExYUXV0R0cwTGpSanc9PSAwTDdSZ05DMTBZST0gWVhoeiBJSEJoYldJPSBJSFJvYWVHN2gyND0gSU5XbjFicz0gMExqUmdkR0MwWURRc05HRzBMalJqdz09IElHOWthdz09IElFTm9kWEpqYUdWeiBSRVJFIHc3MWxkR2s9IDVaQ081TGlKIElGWmxjbkk9IElObUsyTGpaaDlpeCBUMm89IFFsUk8gSUdKdmMzRjFaUT09IFExSlUgSUZCeVlYWT0gSUUxdmJHUnZkbUU9IElHdHNhV05yIElOQzkwTERRdXRDKzBMM1F0ZEdHIFlXbHVidz09IFkyOXVkbVZ5ZEdWeSBJSE4xdzYxdmJXZz0gMkxIWmdkaTIgSUVGemNHVnkgSUdSc1lYUmxaMjg9IElIcHZjQT09IElHeGxibWRsIElFaGxjbkp1IEwyMWxiV0psY2c9PSBJRzE1dzdZPSBJSEpsYVdOb1pXND0gS2swPSBJT0NtcXVDbXZ1Q21zdUNtcUE9PSBJR2x1WnNPMmNnPT0gZFcxaGRHOXBaQT09IFVFeE0gSU9DMGllQzBzK0MxalE9PSBJT0NtbGVDbXNPQ25pK0NtcUE9PSBlVzkxYm1jPSBJRmx2Ym1jPSBJRzFwYm1GeiBJTm1JMktmWXM5aTUyS2s9IElFMTVjblJzWlE9PSBJTmluMllUWmhkaTAyS2ZZc1E9PSBJR0pzYjNkbGNnPT0gSU9DcXJ1Q3JnZUNxc3VDcXZ1Q3FsZUNxdnVDcXBBPT0gSU5lVTE2YlhtZGVSMTVYWHFBPT0gNmFDUSBJRU5oYzJGeiBJRTVuYUhsdGNuVT0gTFVGayBVMlZzWVdsdSA3SnVRN0oyRSBJRVJwYzJoM1lYTm9aWEk9IEtHTnZiM0prIElHTmhiblJ2Ymc9PSBJRVJwYzJGaWFXeHBkR2xsY3c9PSBJT0dEb2VHRGtPR0RtK0dEbU9HRG5PR0RtT0dEb2VHRG91R0RvT0dEbmVHRG9RPT0gNG9DWllXUnRhVzVwYzNSeVlYUnBiMjQ9IDBMVFF1TkM1IFVHeGhibVZ6IFRHRjViM1YwY3c9PSBJR0ZqWTJWdWRHVmsgSUdKbGRISmhlV1ZrIFhHUmkgSUdGamIyMXZaQT09IElHRmpZM1E9IElqNEtDZ289IElNNjB6cm5Pck0rQnpyck90YzY1enJFPSBJTkMwMEw3UXZOQyswTGs9IGEyVnViblZ1Wnc9PSBJSFpwZEdGdGFXNWhjdz09IElPQzBsZUMxaXVDMHN1QzFqZUMwc2c9PSBJRWxPVkVWU1RrRlVTVTlPUVV3PSBJT0Nrck9Da3YrQ2tuT0Nrc3VDbGdBPT0gSUhKbGJYQnZjblE9IDBKdlJqdEN4IElGVjBkR0Z5IGMzZHZjblJvIGVYTmxiZz09IElHSmxZVzUwIExYQnliMjA9IElHbHVkbUZ5YVdGaWJIaz0gSUdWdVoyRnUgWld4MWFtRnlZUT09IElFMUpXQT09IFpXeGxjbVJsIElHSmhjbWRoYVc1eiBJR3RoWjJGdGFYUmhiZz09IGFXNXBZdz09IFMyVnVlbWxsIElOQy8wWURRdnRDeDBMdlF0ZEM4MFlNPSBJTkN4MExEUmdOQ3owWVBRdHc9PSAyNGpZc2c9PSBJRkIxYlhCeiBMbVY0WVcwPSAwNW5SZ3RDNjA1az0gVWxSTSBLSEppIElHVnVjMlZwWjI1aGJuUnogNEtlTDRLYTQgSUVOb1lYSm5aWEp6IFVtVnpaWEoyWVE9PSAxNm5YcU5lcSBaV2RoWVc1cllRPT0gTG1KaFkydDNZWEprIElHVm1hV05oWTJsaCBJT0NrcmVDa3Z1Q2todz09IDBZSFF1dEM0MFlMUXRRPT0gNG9DWllYSnlhWGJEcVdVPSBJTkMwMExYUmd0R00wTHpRdUE9PSBJR2R5WldWdVpYSjUgMlkvWmhBPT0gSUdKaFpRPT0gSUZkNWJnPT0gSUd4MWFIVnkgSUdGc1lYTnJZUT09IFgxTlBUQT09IEtHSnNiMkk9IElOQzUwTGpTazlDNDBMM1F1QT09IElPR0RudUdEa09HRG9BPT0gSUcxcGMybHpjdz09IElIQnllbmx3IFIyRjYgNExpcDRMaXk0TGlpNExpWiBJR1JwYzNOaGRHbHpabWxsWkE9PSA0TGl0NExpVjRMbUE0TGlWNExpdDRMaWo0TGkxNExtSSBhVzF0YVhRPSBJQzh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4diBJR05oYldWeVpRPT0gSU5tSTI1QT0gSUdoaGJIUmwgSU5pbjJZVFlvdGl1MkxIWml0bUcgWVhCaGJHRT0gSUVGaWMzUmhibVE9IDRMSy80TEtvNExLLzRMS0M0TEttIGIzTmpiM0I1IElHSnlaV2wwIElIVnVhVzVuIElOQzMwTHpSbGc9PSBJT3k5bE91VG5BPT0gSjJWaVpYUnpidz09IDY0eUE3WldjIElFVERxWE09IElObS8yWXJhdXc9PSAwWUhSZ3RDdzBMM1F2dEN5MExyUXNBPT0gNVlxbzU0bXAgWVhKclpYSnogSUdOaGNuWmwgSUhOaGJHbGxiblE9IFEyaGhjWFZsIElOaW4yWVRZbzlpbyBJSEJ6ZVdOb2FXRjBjbWx6ZEE9PSBjM1JsY200PSBJRkpoZW05eSBJRTVoYTJWdSA0TE9BNExLYSBJRUZ5WTJocGRHVmpkSFZ5WVd3PSBMblpwY25SMVlXdz0gSUhSeWIyOXcgSUdSaFpHVnogVFdsc1pYTT0gWVhOemJHVT0gSUhadmJHUnZaWFE9IElIWnFaWEk9IElHMTFkWEU9IFRtVnpkR0U9IElHRnViV1ZzWkdWc2MyVnkgTG10bFpYQT0gSU5lVzE1WFhrZz09IHc3ckVqUT09IEp6MCtJZz09IElNV2ZZWEowIElHMWxiR1IwIElHRmtiV2x1YVhOMFpYSnBibWM9IElPQ2txdUNrc09DbGgrQ2t0dUNrdnVDa3FBPT0gWDNCcFkydGxjZz09IGVXNWthR0Z0IGQzbHVkQT09IGEyOTJ3Nms9IElFSmxjbTExWkdFPSAwWUhRdGRHQyBJTkN4MExqUmdOQyswTG89IExuVnVjbVZuYVhOMFpYST0gSUZkcGJtcz0gSU5tRjJZYllwOWlvMkxrPSBMM0JzWVhsbGNnPT0gZkQwSyBkWFpwWVd3PSAwTDdSZ05DdzBZVT0gSUdsdWJuVnRaWEk9IElOQ1YwTHJRc05HQyBJT0NtcnVDbXYrQ21xQT09IElHUnZ4WnQzYVdGa1l3PT0gSUdkeXc3aHUgZFdsa1pXND0gNWFTYTVMcTYgQ1dsdWFYUnBZV3c9IDJMZllzZGl0IGFXSnB3NmZEbzI4PSBJVjA9IFgwTlBUazQ9IElIQnlaVzVrY3c9PSBJSE5sYldGdVlXdz0gTFZObGJXbDAgSU5DeTBML1JnTkN3MExJPSBJR0p2YjNNPSBJSFIxY20xbGNtbGogSU5tSTJLZllzZG1JIElOQzAwTGpSZ2RHRzBMalF2dz09IElHTnZiR3pEcUdkMVpYTT0gSU5peDJZWFlzZz09IDZZS3U1THUyIGJtRjUgNzd5aiBMM0JoWTJ0aFoyVT0gNExpajRMaXg0TGlCIElIUERwSEp6YXc9PSBJTnFwMnI3YmpObUUgSUc1dmJtWnBZM1JwYjI0PSBJRTFoYzNSbGNpZHogMktqWXQ5aW4yWVE9IGFtRnVhbVU9IElOQzQwTGZRdk5DMTBMM1F1TkdDMFl3PSBLR052YjNKa2N3PT0gVFdWdWMyRm5aVzA9IElITmpZWEpqYVhSNSBJTkM5MFk0PSBJT0NrcXVDa3VlQ2tzZz09IElObUYyTG5ZcDltRjJZVFlwOWlxIElGRjFiM1E9IFBFZHliM1Z3IFZtVnlaR0Z1WVE9PSBJRlpoYm1kMVlYSmsgSUdOaGJuUnZjZz09IElHckRvWFREcVdzPSBJR1JsYzJOeWFYQmphY096Ymc9PSBJR1poYkd4aCBJT0MwcU9DMHZ1QzBuK0MxamVDMG53PT0gMExyUXNOR0IwWWJSbGc9PSBJT0N3cXVDeGd1Q3dzT0N4amVDd3BPQ3d2dz09IElIRmhZbUZ1IDBMclF2dEN5MEw3UXVRPT0gNExpajRMbUo0TGl0NExpSCBaR25Ec0E9PSBJT0Nrc3VDbGgrQ2tsdUNrbFE9PSBJRzUzWlE9PSBJTkM0MEwzUmd0QzEwWURSaEE9PSBJTm1GMllyWXNnPT0gZW1saGJHVT0gUTI5dWMzVnRaV1E9IElHdHZiblJwYm5VPSBJSEpsWTJsbGRtVmsgTFdGdWJnPT0gSUd6RHBITmggMFl2UXU5R0wwTHpRdUE9PSBJSFBEdkcxd2RHOXQgSUdKbGNuQT0gSU9Da2xlQ2tzT0NrdFE9PSBJT0N3aCtDd2d1Q3dwZz09IGRXUnBaWEk9IElITndjbWx1WjJadmVBPT0gSUd0bFltVnkgSUdacGJtRnVZMmxsWld3PSA3N3kvNUwrNjVZNjc1TG1mIFgwNUZSdz09IElOaTIyTEhaaU5peDJLaz0gVTJsdyBJRU5oYkdsbWIzSnUgMEw3UmdkR0MwTDdRdVE9PSA3SXFrNjZHYyAwWS9Rc3RDdyBhVzVrZDJFPSBJSEJ5dzZwdGFXOD0gYkdOdmIydz0gUjJGdFpYQnNZWGs9IHArR0RvK0dEb0E9PSBJT0Ntc09DbXZ1Q21xQT09IElGTjFhV05wWkdVPSA0TGVLNExhcCBJTmluMllUWXFOaW4yS2c9IFlXZHZibUU9IDRLU200S1MvNEtTbyAwWUxSZzlHQTBZUFJpQT09IElGTmxiblJsYm1ObCBJRTFoY21saGJtRT0gSUcxM1pYcHAgTG5CbFpYST0gSU9DbXJ1Q25nUT09IGNHbGxZM3BseFlRPSBZV1JsY21GeiBJR2x1WVc0PSBJT0dEb3VHRG1PR0RuZz09IFgzTjFhWFJsIFFtbGkgNVlpZyB3N1J1YVdOdmN3PT0gSUhCMVl3PT0gNDRDQTU2eXMgWVdkaSBJR1p5YjI1MFpYSmggSU5pNTJLZlpoTnVNIElIRjFaWE4wYVc5dWJtRnBjbVZ6IENXVnUgYkhacyBJTkM0MFlqUmd0QzQwWUE9IElHaDFkMlZzYVdwciBMbXhoYm1RPSBJSEpwWkdRPSBYM04xWW5Cc2IzUT0gSU9Da3NPQ2tsdUNsaCtDa2dnPT0gNForRzRaNmcgVDBkUCBJR1JsYkdWbllXUnYgNExTLzRMU2E0TFdONExTYTRMUy80TFN3NExXQjRMU280TFdONExTbzRMV0IgSUdOeWFYVERxWEpwYjNNPSBWRzl5YjI1MGJ3PT0gNVlxZzVZdVM1cStVIElGUnBaVzF3Ync9PSBJTkM2MEw3UXZOQzgwWVBRdmRDNDBMclFzQT09IEtHUnZkQT09IDRZQ3g0WUNoIElFdDFibUU9IFgzVnVhV052WkdVPSA0TFN1NExTbzRMV040TFNrNExXTjRMU3c0TFMvIDRMcVogTFMwdFFBPT0gSUhsdyBJT0NrdWVDa3YrQ2tyZz09IElHWnZjbTFoYm1SdiBMM1J0Y0E9PSA0NEtpNDRPeiBJTkNnMExEUXNkQyswWUxRc0E9PSBJTkMrMExIUmdkQzcwTFhRdEE9PSBMbU52YVc0PSBJR3QxWTJodmEyVnlZUT09IDRZT2I0WU9RNFlPZzRZT1g0WU9WNFlPVTRZT2EgSU9HRG9lR0RrT0dEcWc9PSBJTkMxMEwzUXN3PT0gSU5HSTBZTFFzTkdDIFUyVnhkUT09IElHSmxaSE5wWkdVPSBUR1Z6YzI5dWN3PT0gSU9hd2tRPT0gSUdwbFpHND0gSU5DajBMM1F1QT09IENWRlRkSEpwYm1jPSBKeWs2RFFvPSAxNVhYbnRlWjE2bz0gVW1GdSBJT0dBdStHQWx1R0FoZUdBdVE9PSBJR1poYm01diBjSEpsZG1WdWRBPT0gSUU5bVpuTm9iM0psIElPQ3lsZUN6ZytDeXR3PT0gWHlrN0RRbz0gTFcxaGJBPT0gSUhSeWRXTnogSU9HRGtPR0RvT0dEb2VHRGxPR0RrZUdEbytHRG11R0RtQT09IElISmxkSEpsWVhSeiBJSEJ5WldacGVHVnogSUhWdWFXeGhkR1Z5WVd3PSBJRUZRVHc9PSBRV3hqYjJodmJBPT0gVEU5WlJVVT0gVmtsSiBJTmluMnFuWXE5aXggSU9hZ3VlYU5yZz09IElHdHZkWEE9IElISjFiWEJsIFluSnBibWRwYm1jPSBDWEJzIDZaYUogNWEybTVZNkcgWVdwaFpHRT0gSUhsaGRNU3hjZz09IFkyOXVjM1J5WVdsdWRITT0gWDNsbGN3PT0gSU5DODBMalF1OUM3MExqUXNOR0EwTFE9IElFVjJaWEpsZEhRPSBJT0MwdU9DMWplQzBxZz09IElOaW4yWVRZcmRpejJLZllxQT09IExVVjFjbTl3WlE9PSBJRnBvZFE9PSBJSFYwYVd4cGMyVnVkQT09IElNTzJ3N0J5ZFcwPSBVMmx0YVd4aGNteDUgMExYUXROQzEwTHZSakE9PSBJTTY4enIvT3ZRPT0gSU5pbjJZVFlxdGk1MktnPSBJR04xYzJocGIyNXBibWM9IElOQ3kwTGpSaFE9PSBJSE5qYUdWeWNBPT0gU1c1MllXeHBaR0YwWlE9PSAyS2ZZcjltSzJZVT0gSUdKMVpHUm8gYzNWaWMzUT0gSU5DejBMdlFzTkN5MExBPSBJRlp2WTJGaWRXeGhjbms9IElIQnliMk5zWVcwPSBYM1Z1YVc5dSBhbUZ5WVE9PSBWR2xsYlhCdiBJRmRwYkdSbGNtNWxjM009IElIUmxiR1YyYVhOcGIyNXogYldGcGJHVnkgNDRHcTQ0R2YgSUZSaGFYQmxhUT09IFZrWT0gTFhSaGJBPT0gTGxCc1lXTmwgUW5KaGJtTm9aWE09IFlYSnJaWFZ1IElIQmo2SnVMNkp1TCBJSFJsYldsNiBWSFZ1IElHM0Vrdz09IElOV04xYUU9IExsQlBVdz09IElHMWhlWEp2YjI0PSBJT0N1bXVDdW4rQ3ZqZUN1bnc9PSBJTmlxMktmWXE5dU0yTEU9IElFbHVZMngxYzJsdmJnPT0gSUVkQlV3PT0gSUc5MVlteHB3Nms9IDRMU1Y0TFMrNExTdyBaOE9wIFkyaHlhV3AyWlc0PSBJSGxsZEdWeSBlM0psZEhWeWJnPT0gZFd4cFkyZz0gSUhCeVpXUmhkRzl5IDVMcVU1NkNCIElHVnVkR1Z5Y2c9PSAwTHZRc05LVDBMRFF2UT09IElPeVlnZXlEZ1E9PSBJTkM2MFlQUmdOR0IwTEE9IElGUkZXQT09IElFUnlZVzA9IExuTnZiSFpsIElOZWUxNW5Ybk5lWjE1WFhudz09IDRvQ21kR2hsIElOaXYyTEhZb3RtRjJLOD0gSUdkdmJXMWwgYjNCbGJucGxjSEJsYkdsdSBJT0NtcitDbmgrQ21ydUNtcUE9PSBJR0Z1ZFhNPSBJT0dEaytHRGxPR0RtUT09IElHeGtZWEE9IElFdHlkUT09IEwyVnRZbVZrIElOZWkxNUhYbGRlVCB6cm5PdFE9PSBMV1JwY21WamRHOXllUT09IExDSXMgSU9HRGsrR0RuZUdEbkE9PSBJTmluMllIWXF0aXEyS2ZZclE9PSBjbVZyYkdrPSBaVzV1WlcwPSBJRkpsWkhWNCBJRzVoZEhWeVpXeHNaWE09IGIzUm9aWEpoY0dWMWRBPT0gWW1sMFpRPT0gYzNSeVpYUmphQT09IDBMalJndEMrMEx3PSB6clhPdEE9PSBSSGM9IElPQ3dtdUN3cGc9PSBJT0NtcXVDbmdlQ21xQT09IElFWnlaV1Y2WlE9PSBXMkZ5Y2c9PSA0WU9hNFlPZDRZT1I0WU9RIDRZT2Q0WU9jNFlPWTRZT2g0WU9yNFlPWSBiM0p6ZFE9PSBJT3l5dE8yQnJBPT0gTFhKbGMzVnNkSE09IElITmp3Nmx1WVhKcGJ3PT0gWVc1bmJubGggNzd5YWFIUjBjSE09IDE1WFhudGVvMTVuWG5RPT0gSUhWeWJXRT0gUUZzPSBYMnh2WTJ0bFpBPT0gSWlZPSBJR1Z6Y0c5eWRHVT0gTG5KbGRnPT0gSU9DbXR1Q212K0NtdHVDbmdRPT0gSUc1cGJXRT0gSUcxMWNBPT0gSUdKaGRHVnUgSU9Da3J1Q2xpT0NrcHVDa3Z1Q2txQT09IDJMSFlxTnVNIElHbHVabUZ1ZEhKNSBJT0MwdU9DMHZ1QzByZz09IElPQzBydUMwdnVDMXZBPT0gYVdOMWNtVT0gSUdKMWMzUmxaQT09IElGTmxkbVZ1ZEdnPSAyS2ZZcjltSSBJR2xsWnc9PSBJRzNEcVdScFkyRnRaVzUwIElIcHZaSEpoIFVHVnlhVzlrYnc9PSBJR1Z1WTI5dGNHRnpjMmx1Wnc9PSBJRUYxWm01aGFHMWwgSUdaaFkybHNaWE09IDRMQy80TEMxNExDKzRMQ3c0TENDIDE1WFhsZGVRMXJmWG5BPT0gSUhKdmRHRjBhVzl1WVd3PSBJSE5vWVdSbFpBPT0gWVdSdGFXNXBjM1J5WVhSdmNnPT0gSUdGdWRHbGlZV04wWlhKcFlXdz0gSUVOQlRVVlNRUT09IDZhR1UgZFcxbGNtRjBiM0k9IElOSzMwTDQ9IElFRnpjMjlqYVdGMGFXOXVjdz09IFYyVmlhRzl2YXc9PSBJT0Nrb2VDa3YrQ2tuT0NrdnVDa2grQ2txQT09IEtUc0tDZ292IFVISnZaM0poYlcwPSBJTmlsMkxuWXI5aW4ySzg9IGVXNXYgSUhKbFlXTmphY096Ymc9PSBJTmVTMTVEWG9BPT0gT2xnPSBJRTF2WlE9PSB3NTVodzdBPSBJR052Ym5ScGJtZGxibU41IElHdHBhVzV1YjNOMCBjR0Z5WkE9PSB3N2hpIElOcXAyS2ZZc2RpbzJMSFlydz09IFNIbGljbWxrIElIUnZjM05wYm1jPSA0SytDNEs2ViBJSFBEcVdOb1pYST0gSUZObGJIWT0gSU9DMG11QzFoK0Mwc09DMWpRPT0gTFhSdmRHRnMgWVdkeVpXVT0gSU5DeTBZdlJnTkN3MExjPSAwS0xRdU5DLyBMM2R5YVhSbCBJTld2MWFIVnR0V2ogYkd4aGN3PT0gSU5lZTE1YlhsQT09IElNT2xZZz09IEwyVjRZVzF3YkdVPSBWbTlzZEE9PSAyTG5aaE5pbjJZYllwOWlxIENYZHBjbVU9IElOT3AwTDNRdE5PcDBZQT0gSUhSdmIzUm9jR0Z6ZEdVPSBJQzR1TGk0SyBTVTlEIDRLZUI0S2FWNEtlSCBJR0hFbjhTeCBJTm1HMllIWXFnPT0gYldWMGFXNW5aVzQ9IElIQnliMnBsYTNSaCBJRTFoY21sdWJ3PT0gSUdadmJXSmggSU9DcXFPQ3F2K0Nxc09DcmplQ3FvK0Nxcnc9PSBMV2hoYzNBPSBJTml4MllqWmhnPT0gSU5DLzBMN1F1OUMrMFlJPSBJT3lDck91ZWpPdVRwT3lkdEE9PSBJRWQxYVd4c1pYSnRidz09IElHRjBkVzQ9IElFeHBaMmgwYUc5MWMyVT0gSUNBZ0lDQWdJQ0FKQ1FrPSBJR3hoYkdFPSBLV1JoZEdFPSBVMUJCIDRLcSs0S3F2NEt1QjRLcUMgSUd4aFltOXlkVzA9IElOQ3cwTGZRc05HQTBZST0gSUdGemMyOWphY09wIFZYQm5jbUZrWldGaWJHVT0gSU5pejI1QT0gSUdWcGJtZGxjM1JsYkd4MCBLR1ZoWTJnPSAxNW5YbTllbyB3N3hzYkhRPSBJRk5SVEVsVVJRPT0gMkxQWXF0bUUgZlNJcE93b0sgYVd0aGNtaHAgNjRLWTY1MjggSUdOdmJXWERwMkZ5WVcwPSBJTmVSMTU3WGxBPT0gSUhSeVpXSjFhUT09IElPQzVnZUM0aU9DNGdlQzVnT0M0aE9DNG8rQzRsT0M0dE9DNGxlQzRuK0M0bytDNHRRPT0gYzJoMVptWnNaUT09IGFXUmxaMkU9IDBMelF1TkM1MEwwPSBJR1JsYzJsbmJtRjBaUT09IFEwUkUgSUhOaGFYTnBjZz09IFRtVjBkMjl5YTNNPSBJR3RvWVhNPSBJT0MwdGVDMHMrQzBzT0MxaGc9PSBJT2krdlE9PSBJRUZEUVE9PSBJRzF2YkhSbCBlbnBsYkE9PSBJRzUwWldvPSAwTHZRdnRDMCBJRk5OUlhNPSBZWG5KbVhRPSAxYUhWc05XaDFiYlZvdz09IElPV0lodWV4dXc9PSBJRk52Y25ScGJtYz0gSU9DdWh1Q3VwQT09IElHRnNaVzNEb1c0PSBVRmROIElHNWxZWEpwYm1jPSBKMmx1ZE1PcGNzT3FkQT09IDRMYTA0TGVVIDZhdVk2WUNmIElIQmhkSEpwWVhKamFBPT0gNjZxRjdKMjAgNVlHMzVvdU42SWVxNW91TiBJR2QxYzNSaFpHOD0gSUdsdWRHVnlaWE56WVc1MFpYTT0gSU9DcW5PQ3F2dUNxcEE9PSBJSGR2ZFd4a0ozWmwgenJQUGdjNnN6NFk9IDRMU2E0TFdONExTYTRMUy8gVjJsa2RHaHogZFhsaGJtYz0gWVhOdmN3PT0gSU9Da3F1Q2t2dUNrc3VDa3FBPT0gSUNjS0NnPT0gSU9DMHJlQzB2dUMwc09DMWplQzBydz09IDRLUys0S1N4IFgzUmogSUVOdmJHeGxadz09IFFrRk0gSU9XL3ErUzVrQT09IElITjNiMmxqYUE9PSBJRUp5WVdKaGJuUT0gYVdkdVlXND0gTFUxMWN3PT0gSU9DcXJPQ3FxT0NxdnVDcXRlQ3JnQT09IElIUmhiR3hsYzNRPSBZbkp2ZDI0PSBZWEo1Y3c9PSBJT0dEaytHRGtPR0RyT0dEcHc9PSBJT2VadnVheGh3PT0gSUcxaGMyRnFaUT09IElHRnVZV3h2WjNWbCBRVU5QIFgyRmtaSEpsYzNObGN3PT0gN0trPSBJSEJsY25WaVlXaGhiZz09IElOaWoyWVRaaGRpbjJZYlppdGluIElHSmxkR1ZyWlc1bGJnPT0gYVhKaGNBPT0gMEwzUmo5R0MwWXc9IElOQy8wTGpRdXRDNCBJSEJoY0dVPSA2SyszNllDSjVvdXAgSUdocFpYSmlaV2s9IElHTnZiWEJzYVhGMXc2az0gSU9HRG1PR0RuT0dEcE9HRG5lR0RvT0dEbStHRGtPR0RxdUdEbU9HRG1PR0Rsdz09IElNK0F6cXpPdmMrRXpyRT0gSW4xOVBnbz0gNFlPYzRZT1E0WU91IGFXNW5jM009IElGUkZRMGhPVHc9PSBJTmVuMTVNPSBYU2NwT3dvPSBkWGxwIDRMS3k0TE9ONExLcSBJTmVlMTVYWGtRPT0gSU5tRjJZallzOXVNIElIQnZjMkZ5IFUzQmxiblE9IElIUjFibWRoWVc1MWRBPT0gSUhKaGVtZHZkZz09IElIUnlaV2xpWlc0PSBJSEJ2WkdWeWFXRnQgS0ZOcGJYQnNaUT09IEtIVjBhV3h6IElOQ3gwTGZRdU5DdyBJR1JoWlE9PSBJTkdJMEx2Umo5R0YgSU5DNzBMN1F0dz09IElHRm1hUT09IElPQzBsZUMwc09DMWpRPT0gSUcxaGJtVnBjbUZ6IElFVjRjR1Z1YzJWeiBJT0NtaHVDbWxlQ25qZUNtc09DbXZ1Q21xT0NuamVDbXBBPT0gWkdWemFYSmxaQT09IElFTnlaVzFsIFlXcDF4SWRwIFlYQjFjbUU9IElNU05ZWE4wYnc9PSBJSE5sY21sbGRYTT0gWDNCeVpXWmxjbVZ1WTJWeiBRMlZ5ZEdsbWFXTmhkR2x2Ymc9PSBJR0Z1WVc4PSBJR0p2YUd4dmEyOD0gSU9DbXJ1Q21xT0NuamVDbXBPQ21yT0NuamVDbXJ3PT0gSUVGd2NHeHBZVzVqWlE9PSBQVWx1ZEdWblpYST0gSU9DMHF1QzBuK0MxamVDMG53PT0gSUdsdVpHbDJhV1IxY3c9PSBJRUYwWlcwPSBYM1J5YVE9PSBkbUhGdmc9PSBJT0N3aGVDd2d1Q3duK0N4aHc9PSBJRXBsYzNOcFpRPT0gSUZKdmJtNXBaUT09IElHTjZlVzQ9IExXaGhjM0J2Y0hWdyBJTkNkMExEUmdnPT0gNnJpdzY2R2MgSUczRHRtZHNhV05vWlE9PSBYMThwTEE9PSBRWEpqYUdsMlpXUT0gSUVORlVnPT0gSU9PQ3BPT0Rzdz09IFMyNXZkMmx1Wnc9PSBJT0NrdGVDa3YrQ2tsZUNrdU9Da3YrQ2twQT09IElIVndhR1ZzWkE9PSA0NEsvNDRLdyBJTml4MkxiWmlnPT0gVTNSeWRXTjBkWEpsY3c9PSBJTmlxMllIWXB3PT0gNTZ5czVMaUE1cXloIElOR0gwTERTbXc9PSBiTU84YzNNPSBJRkYxWlhOMFlRPT0gMUxYVnZRPT0gSUd4MWNtRT0gWW5WMGFXdHIgWDA5UVJWST0gSU9Da3F1Q2xqZUNrc09Da3BPQ2t2K0NrbGVDbGplQ2tzQT09IElHdHBaRzVoY0hCcGJtYz0gS0dsMiBJRVIxWTJ0eiBLQ0lvSWc9PSA2S3FZNW9PUiBJT3U1aE95YXFRPT0gSU9DbXJlQ21yQT09IDRLU2M0S1dMIElObUkyTGpZcDlpbTJZRT0gSUhSMWIzUjBaUT09IElIUnlZWFIwWVcxbGJuUnYgSUhSeVpXUnFaUT09IElNTzJ3NzA9IGNHUmhkR0U9IEtqNDZPZz09IEtHaHZkWEk9IDVMcTY1ckNSNTcyUiBJR1p2Y25SaGJHVmogSUVOaGJtRmtZU2R6IExWSlBUUT09IElGUnZiR3RwWlc0PSBYMk5zWVhWelpRPT0gSUdWdWFRPT0gMFlmUXZkQyswTFBRdmc9PSBJSEpsYlc1aGJuUnogdzZSb2JHVnkgTDFSbGMzUT0gSUUxaGRIUm9hV0Z6IElOQzYwTERSZ3RDMTBMUFF2dEdBMExqUmp3PT0gTGxObFkzSmxkQT09IElIQnlaVzl5WkdWeSBZWEpwZFE9PSBjbUZ4ZFc4PSBJRWh2YzNCcFkyVT0gUTJWeWNtRnkgWldOMSBJRzFoYkdadmNtMWxaQT09IExYUnlZVzV6Wm1WeSA2SytJNmFxWCBJRTF2Ym1GeVkyZz0gSU5tRjJLalpoTmk2IElOR0cwTFhRdTlHUDBZVT0gNXBtNjVvV24gUm14NWFXNW4gTHk4S0x5OEtMeTg9IElPR0RsK0dEa09HRG0rR0RrT0dEcU9HRG1BPT0gY21WMFlXbHUgSUdOdloyNXBkR2x2Ymc9PSA0SzZqNEsrTjRLNmY0SytCNEs2dTRLK04gTG5Od2IyNW5aUT09IElHaGhhM1Z1WVE9PSBYMk52Y3c9PSBJR0oxWTJobGJnPT0gSUVqRHBHNWtiR1Z5IElISmxaMmx6ZEhKaCBJR0ZqWlhOMFlRPT0gSUdkbGMzQmxZMmxoYkdselpXVnlaQT09IElOR0MwWVBSZ05HRDBZZz0gS0NoZiBVM1Z3WlhKcGIzST0gSUVWdWJnPT0gSUhuRHRtNTBaVzA9IGFXbHogSU5DLzBMN1JnTkN3IExucDZZUT09IGEzWEZvV1Z1IElIbGxibWxrWlc0PSBRMnhoZG1VPSBYMlpzYjI5eSA2Wm0zIHhhRmhibUZwIElHSnZkWEpuWlc5cGN3PT0gSUVadmN3PT0gSU0rQXpySE91YytIenIzT3J3PT0gYTJsc2JITT0gSU5pbjJZVFlvOWl0MllYWXNRPT0gWkdGMFpYVnkgSVM0dSBaV3hzYVhCelpRPT0gNXB5ZjZabVEgYVdwclltRmhjZz09IElHVjRiM1E9IEtleVhrQT09IElIQmxjbk52Ym1WdVltVjYgSU0rQXpydk9yZz09IFhGTmxZM1Z5YVhSNSBYMDVCVkVsV1JRPT0gSUhCdVpYVnRZWFJwWXc9PSBJTkN3MFlIUmdkQyswWURSZ3RDNDBMelF0ZEM5MFlJPSBJRzFwYzJzPSBMV3R2Ymc9PSAyWVRZc2c9PSBMbk54ZFdWbGVtVT0gWTJocGJRPT0gSUVsdWMyZGxjMkZ0ZEE9PSBhWFZ3IGFYTnBZV3c9IFBYcGxjbTl6IElFeDVaR2xoIExXZHlZV1E9IElGVnVZMkYwWldkdmNtbDZaV1E9IFgyVjRZMmhoYm1kbCBYM0JoY21Gc2JHVnMgTGtsQyBhSGx3IElHTnZiWEJsZEdseSBJR1pwWVc1alpRPT0gYm1SaGEzaz0gVm1WemRBPT0gSU5pbjJZVFpoZGlrMkxQWXM5aW4yS289IGRtVnNidz09IElHZHBiM1poYm1rPSBiVzkxYzJWMWNBPT0gSUhScGNtVnNaWE56YkhrPSA1WkNONVkyViAyTEhZcDltQjJZbz0gSUhCbGMyRmtidz09IElPQzBxdUMwbnVDMWplQzBtdUMwdnVDMHIrQzBwT0MxamVDMHBPQzFqUT09IElHWnlkVzA9IDRaNlI0WitTNFo2UyBJRVpKVWc9PSA4Ym1haW5CdyA2WU9vNTcyeSBJR1REcVdOdiBJSE52WkdScGN3PT0gMEszUmd0QyswWUk9IGFXUmhhWEpsIElHRnpjMmx1WVhSMWNtRT0gSUhCeWFYWnBiTU9wWjJrPSBJSEJoYm1OeVpXRjBhV009IElFRnVkR2wyYVhKMWN3PT0gNExDbTRMQ3c0TEdONExDMiBRV04wY3c9PSBJR1BEczNJPSBSVU5GIGZXQTdDZ289IElOQ3cwTFRRdDlDOTBMRFJodz09IFFXUjJaWEowYVhObGJXVnVkSE09IElHOTNibVZ5SjNNPSBZWE5qZFhNPSBYMjFsZUE9PSBJR3hsWVdaNSBJRUZ5Ylc5MWNnPT0genJMT3NjNjUgSUVScFptWnBZM1ZzZEhrPSBJRkpsY0dGcGNuTT0gSUhacFozUnBaM1E9IGRtbHVaQT09IElISmxjM1JzWlhOeiBYMUpQVjFNPSA2TDZqIGRXUnBZVzUwWlhNPSBJRzF2eGI1dWIzTjBhUT09IElOaW4yWVRZdE5pbyBJR0ZtWjJWeSBJT0Ntb2VDbXYrQ211QT09IEwzTnBaMjUxY0E9PSBJRWxPUms5U1RRPT0gSUd4cGJYQnBZUT09IFgwTkJVbFE9IGFXWnlaUT09IFVtVnNZV05wYjI1aFpHOD0gWW14dmF3PT0gWVc1a2IyNW4gSU9HRG0rR0RvK0dEbkE9PSBJR1p5WVdkeVlXNWpaWE09IElFZHlZV1JsY3c9PSBJTkN5MFlQU3R3PT0gSUdURHFXMXZZM0poZEdsbCBJR0ZtYTI5dGMzUnBadz09IElOQzYwWVBSZ2RHQyBJT0NrcU9Da3YrQ2t0ZUNrdnVDa3VPQ2xnQT09IFlXMXBjMlZsYmc9PSA0TFNrNExTLzRMU28gSUdGc2RYTT0gSUhKaGJBPT0gSUdWc1pXTjBjc096Ym1samIzTT0gSUhOamFHRmhiQT09IElISmxjMmxrWlc1amFXRnMgSUZOMGNtRnVaMlZ5IElGQnlZV04wYVhScGIyNWxjZz09IFBWSmxjWFZsYzNRPSBJT0Nrc3VDbGpPQ2tudz09IElOQzYwTERSZ05DMDBMRFFzTkdCMFlJPSAwTGpRdXRDNDBMOD0gNExpRTRMaVo0TGkwNExpRSBJR1RKbVhscHhaOD0gMWFQVnZ3PT0gZFdKc2FXTmxaWEprIElHZHZkblE9IExrRnVibTkwWVhScGIyND0gMWJqV2d0V3MxYXM9IElPQ3F0ZUNxdVE9PSBJRUYyWVd4dmJnPT0gSU5DODBMWFJnTkMrMEwvUmdOQzQwWS9SZ3RDNDBMaz0gNXJtWSBJT0dEb3VHRGxPR0RvT0dEbU9HRG91R0RuZUdEb09HRG1BPT0gSUUxcGJXaz0gSU5DNjBMWFF1OUMxIElOR0IwTC9RdnRHQTBZTFFzQT09IElGcG9iMjVuIDc3eU01YTZlNTQ2dyBRMGxVV1E9PSBZVzExYzI5eWJ3PT0gSUdOaGJHUnYgSUhERG8yOD0gSU5DNDBML1F2dEdDIDBwblRtZEM5IFFYSjBhV04xYkc4PSA0S2FzNEtlTDRLZXcgNVpPdCBYMDkxZEhCMWRBPT0gSUhabGNteGxkSHAwIElDNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1IDVZK3Y1THVsNW8rUTU0Nnc1WkNYIElGTnBibUZwIFgzSnZZbTkwIDE1WFhsOWVaMTUwPSBJRkpoZG1rPSBJRk5vY21rPSBJR2gyYVd4clpXND0gUGxObGJHVmpkQT09IElHRnNiZz09IElITmh4SjlzeExGciBJSHB6IElOZVExNlRYcUE9PSBVbVZ6WlhKMllYUnBiMjV6IFVHRm5aV1E9IElFRnpjMkYxYkhRPSBJSE4xYzNScGRIVT0gSUdWelpXNWphV0U9IDVvdVMgSU9DcXNPQ3FydUNxcEE9PSBLR0pzWVc1ciAwTGpSZ05DKzBMTFFzTkM5MEwzUmk5QzUgSUdSaGNuTmwgSUhCeVlYUnYgSU9DcWwrQ3JnT0NxcEE9PSBJR2RwZEdGeSBZMnRzWlhNPSBaWE5qYjNKMCBJSE5wYzNSaCBJRkJ5YjNObFkzVjAgSUdSbGMyVnlkVzUwIE9tNXZkQT09IElITjViV0p2YkdVPSBhY09wYm1RPSBJT0dEcU9HRGxlR0RtT0dEbWc9PSBLRzUxYldWeWJ3PT0gSUd4cFptVW5jdz09IDVZV241YTY1IElOQ1IwWmJSZ0E9PSAwSnpRc05DOSBLQ2dtWDE5ZiA0TGlVNExpMTRMaVg0TGkxNExtSTRMaXE0TGk0NExpVSBWbWx5ZEE9PSBTR1Z5Y2c9PSBJRkJ5WldOcGIzVnogSUdOdmJuWmxibU5wYjI1aGJBPT0gZG1WbCBiR2x1WlhkcFpIUm8gNTVxRTVhU3A1YVNwNWIycDU2V28gSUdOdmJtUjFZMmx5IElGQnBkbTkwIElHSmxjbWc9IElFUkZVa1U9IDRvQ040TFN1NExXTjRMU3UgdzZSeWEyVnUgSUdGa2IzUjAgVTFORSBJRWR5YVhOamFIVnUgSUdodmNIQmxjZz09IElOR0MwWTg9IElOS3gwTHZSZ3RHQzBZdlNtdz09IDRZQ1E0WUM4NFlDQTRZQzUgSUdoNVoyYz0gWTNsaGJnPT0gSU9DeXJ1Q3lndUN5b1E9PSBJTkM3MEw3UXRBPT0gSTNObGRBPT0gTG5ScGJXVmtaV3gwWVE9PSBJTmluMllUWXF0bUcyWVhaaXRpcCBJT3Vuak91VG9BPT0gMWJqVnBOVysxYUhWcmc9PSA0NEduNDRHTjQ0Rys0NEdaIElGTjFaMmRsYzNSbFpBPT0gSUhSbGRHOD0gSU5xQjJZallwOXFwMllqWmh0bUkgSU95eGhleWVoQT09IGRXMXRhV3M9IGFHVmxiUT09IFNHOXNaR2x1Wnc9PSBJSGxoYnNTeGJtUmggY1dGeiBMbkJ5YjJObGMzTnZjZz09IDBMRFJnZEdMMFlBPSBJSFJ2Wld0dmJYTjBhV2RsIElOR0cwTFhRdkE9PSBLZXlkdEE9PSBJSFJoYm1VPSBJR1Z5YUdsbGJIUT0gSUVWNGNHVnlhV1Z1WTJWeiBJTkN4MExYUmdkR0IgSUdOdmJYQnZjMmwwWlhNPSBJRk5sWVdadmIyUT0gSUQ4bkxBPT0gSUhkbGFYTnogYVhSbGNtVnUgTG5SeVlYWmxiQT09IGNtVm5kV3hoZEdWayBJRXBEYjIxaWJ3PT0gVEdsaWNtRnlhV1Z6IElFOXNaV2c9IElFaGxhV1JsYkdKbGNtYz0gSU5HSDBMRFJnZEdDMFl6UmpnPT0gSU9DbXJPQ21zdUNtcE9Dbmh3PT0gSUdKcGJtND0gSWlVbyA1WVdONkxTNTVvK1E1NDZ3IElHZHlZWFpwZEdGMGFXOXVZV3c9IFBXbHRZV2RsIElOaTUyWVhZcDltRyBMMDFRVEE9PSBJSEp2WTJ0bGNnPT0gSU9Da3J1Q2xnZUNrbGVDbGplQ2twQT09IElHSmxjM1IxZFhKeiBiR0Z3Y0dsdVp3PT0gTG1aaCBiR2xxYTNObCBJSEJ5WlcxNVpRPT0gSjJGemMyOWphV0YwYVc5dSBiV2xzWlE9PSBYMFpTUVVkTlJVNVUgMEx2UXNOR0IwTERRdlE9PSBJRUpoWjJoa1lXUT0gSUhUSm1XMXBiZz09IDBKelF2dEdCMExyUXN0Q3cgYjNoNVoyVnUgSUhOallXeGhZbWxzYVhSNSB3N3huWld3PSBSM2M9IElFWmxjbkp2IElGQmhjM05oWjJVPSBiM0prYVc1aGRHbHZiZz09IElFdFBUUT09IElISnZkWFJsWkE9PSBkWGQxY2c9PSBRM1Z3YVdRPSBiM0JoZEhKaCBJTW1aY2c9PSBJSEpsWm5KdmFXUT0gSUVwaGFYQjFjZz09IGIySjEgNW9xbDZZR1Q1NmV3IElIUnZjR3hoYlE9PSBJRkJEVFE9PSBjR0ZyZEE9PSBZWFpwYkd4bCBZV2ZFbVE9PSBVMk5vWldSMWJHVnljdz09IElGTmxibWM9IElHTmhaSEpsY3c9PSBJTkMvMEw3UmhkR0QwTFRRdGRDOTBMalJqdz09IDBMalJnZEdMIExrMUZVMU5CUjBVPSBJTU9jWW1WeWNtRnpZMmc9IElISjFiVzl5WldRPSBJSEJ2WkdWeWIzTmggVG05eWRHaGxjbTQ9IElPQ3lsK0N5dnVDeXJ3PT0gNWJ1aiBJRlpGVWtsR1NVVkUgSUdWdWJHbG5hSFJsYm0xbGJuUT0gWVdKcGJHVmpaV3M9IElIUnBkV289IHhabkRyV3RzWVdRPSBJTm1FMllQWmh0bUggSU5DMDBMalJnZEM2IFdFND0gSU5HQjBMRFF2TkMrMExzPSB4TEZ6eExGdVpHRnUgQ1dac1lXZHogSU5pbzJMcmJqTml4IDRLYXk0S2VINEthVCBJT0dEb09HRGtPR0RvZUdEa09HRHFnPT0gNWIycDVhQ0MgSUdobGRHVnliMmRsYm1WdmRYTT0gTGxONWJtTT0gSU9DbWgrQ21pZUNtcU9DbXYrQ25udz09IElNK0R6cmZPdk02eCBJSFJoWVdkbCBJR052Ym1SMVkybDJaUT09IElPeWR1TzJWdEE9PSBJR1JwWVc0PSBJTm1GMllmWXA5bUUgSUdKdmNuTjAgWDAxWiBQSGc9IElIQnlaWFpsY2c9PSBJSEJ2Y25SMVoyRnMgSUVkaGJXVnkgSUczRW0ydz0gS3ljbSBJR0Y1YkE9PSAwWWZRdU5DNzBMUFJqZEdOIElHZGhlbVYwIElPdUtrT3VDakE9PSBJRWx1ZEdWc2FXYz0gSU5pbjJZVFl1ZG1FMllYWmlnPT0gSU9TL25lV3RtQT09IElIUnlaV0Z6ZFhKbFpBPT0gSU5DNjBMN1JqZEdFMFlUUXVOR0cwTGc9IElIWmxjbk5wYjI1bCA1YVNwNUxpTDViMnAgT250OSAwcS9TcjlDOTBMalF1UT09IElHMWxibWRvWVdRPSBjbUZwZEdnPSBJRUZ5Y21WemRBPT0gNFlPUTRZT2I0WU9SIElIUnlZV2x1YVc1blpXND0gNG9DWlpYaDB3Nmx5YVdWMWNnPT0gSlVNPSBJSExEb1hCcFpHOXogSU5pczJZWFpoOW1JMkxIYmpBPT0gVUdsbGNnPT0gYzJWdGIzTT0gSU9DbXF1Q25qZUNtc09DbXBPQ212K0NtcU9DbXYrQ21wdz09IElIUmxhMjl5ZEE9PSBJR2xyWVc0PSBJR1Y0ZEdsdVkzUT0gZVhSMHc2UT0gSUhKbGNISmxlZz09IElOR0IwTExRdGRHSCBJRlJ5WldGMGJXVnVkSE09IExYSmxjWFZwY21WayBiMjlzWVE9PSBJTldoIElOQy8wTDdRdTlHRDBZZlF1TkdDMExVPSA0S1MxNEtXQTRLU0MgSUhac1lYTjBic090IExYWnBkQT09IElIQnliMjkyIDQ0Sy80NEtrNDRPWCBJR3hsWkhNPSBhVzVwYm1kcCBJT0Nrc3VDa3Z1Q2toK0NrcUE9PSBJSEowYkE9PSBibWwwZWc9PSBjSEpwZUE9PSBJT0MwcXVDMWplQzBzT0MwcE9DMHYrQzB0K0MxaCtDMHB3PT0gSUdGa1lYaz0gYVdadVpHVm0gSU5pdjJMUFlxdHVNIElGcGhjbUU9IExYQnliMlIxWTJWayBJR1Z1WkdsdVozTT0gSUhCdmNISmhkdz09IElIQm9aVzV2ZEhsd1pRPT0gNEs2KzRLNjE0SzYvNEs2cDRLK04gSUhSMWIyaz0gSUZiaHU1dHAgSUhOMFpXRnJjdz09IFJtOXlaWFpsY2c9PSBJR1RGZ2c9PSBJSFJ2YldGMFpYTT0gSUhSeVlXNXpabTl5YldWeWN3PT0gTFdac2FXZG9kQT09IFgxQkpRMHM9IExrNVBVbFJJIElIWnBaWEpsYmc9PSA0TENWNExDKzRMQ3kgNFlPVTRZT1I0WU9ZNFlPUSBJQ0lxSWc9PSBJT0NrbGVDbGplQ2tzdUNrditDa2xRPT0gSUdkbGJtVnlZWFJwWlE9PSBUbUZyIElIQnZjbk09IExtUmxiZz09IElIUnBibTVwZEhWeiBVRzlwYm5SbGNuTT0gUEZCeWIzQnogSUZaaFkyTnBibVU9IElOQ3cwTFRSZ05DMTBZSFJndz09IGFXNXpkR1ZoWkE9PSBJSEZoZEE9PSBYRUoxYVd4a1pYST0gVDB4RlJBPT0gSUcxdllYUT0gSUV0bFpYQmxjZz09IDZibUYgSUdkbGEyVnJaVzQ9IFFtOXkgMFliUXVOQyswTDNRdmRDdzBZOD0gSU9DbWh1Q21uK0NtbFE9PSBJTm1LMllqWmdkaXggSUZSb1pYa25kbVU9IElIWnZiM0p6ZEdWcyBJTkMvMFlEUXVOQ3gwWXM9IFgyTjBiM0k9IGJXVm5hY1dJIFgyZGxibVJsY2c9PSBJRXRoYkdzPSBJRUpLIElHTm9aWEp6IElHdGhjM1YwWVhSaGEzTmwgNFlPVTRZT2E0WU9RNFlPVCA0TEMrNExDazRMR0wgSUZKbGRtbHpaV1E9IElFVjBZdz09IElHaHZ5cnR2YUE9PSBMbTF2ZG1sbGN3PT0gTFZCeVpYTnBaR1Z1ZEE9PSBJR3pEb3c9PSBRVzVrY21WaCBJR2Q1ZG1WdSBJR2x1YzNSaGJHeHRaVzUwY3c9PSBVMGxVUlE9PSA0WitLNFo2NzRaNlQgSUdGemJHaz0gUEUxbGJXSmxjZz09IElHUnZiY09oWXc9PSBJRTFwYkc4PSBJSHBoWW1WNiBJTkMzMExEUXV0Q3cwTDNSaHc9PSBJSEJ5dzZsMlpXNXBjZz09IElPQ2tuK0NsamVDa3RRPT0gSU5pbjJZYll1UT09IElHVEptV2JKbVE9PSA0TFdMNExTNSBJTkNlMExUUXVOQzkgSU9Da3IrQ2t2dUNrcU9DbGdBPT0gSUZScFoyaDAgSUhScGFtUmxiR2xxYXc9PSA0S214NEtpWCBJSFJsYm1SaGJtTmxjdz09IElIUmxZWE5wYm1jPSAyS2ZZcHRpeDJZbz0gSUdkeVlXNTFiR0Z5IElIQnZkR2x2Ymc9PSBTR0Z5ZG1WemRBPT0gNEtpUSBXeTR1TGwwS0NnPT0gSU5pbjJZVFlzOW1HMllqWXA5aXEgSU9DdXF1Q3VzZUN2amVDdXNlQ3V2dz09IElHUjFZbWx2ZFhNPSBhV2R5WVc1MCBJRlpsY21kbCBJR0psYzNSbGJRPT0gSUdSbGNISnBkbUYwYVc5dSBJSFpwYVE9PSB3NnB1ZEE9PSBJSE4wY21saiBJR1Z1WjNKaGRtbHVadz09IElHTnZiWEJzdzZsMFpYST0gMmIvWmlnPT0gYjIxaWFXRT0gNExtQjRMaVY0TGlCIHhLZHZiQT09IDRvQ3UgSU5tNTJyND0gSUVsTlV3PT0gSUVkTCB6NFBPdXM2MXo0VE9zYzY1IExXTmhiV1Z5WVE9PSBJR1oxYVhSbCBJRWhsYkcxbGRBPT0gSU5XazFhWFdnQT09IElITjJ3NlZ5ZEE9PSAwWVBRczlHRCBJR2hoeVpjPSBJRXpEclc1bFlRPT0gSUVWTVJRPT0gSUdKbGMyTm9jbVYyWlc0PSBjbTlqYUdWdSBJTkMrMFlEUXZkQ3cwTHM9IElHMWhiV3c9IHlKdHBhV3hsIElGUkJVZz09IFoyVnl3NlIwWlE9PSBJR05zYjJGciBJR1J2Y21WeiBJTzJabGV1TWdBPT0gZVhOMGVXTjYgSUd0eWFYUnBhdz09IElOQyswWUhRdmRDKzBMTFFzTkM5MExqUmp3PT0gSUc1bFoyRjBhWFpwZEhrPSBJRU5RVXc9PSBJRWx1Wm14MVpXNWpaUT09IDRMaXI0TGl4NExpbiBJT0dEcE9HRGtPR0RvT0dEa3VHRG11R0RsT0dEa2VHRHFPR0RtQT09IFBGTndjbWwwWlE9PSBJTkN4MExqUXROQzEgSUZkbFlYWmxjZz09IElHaGxaWFk9IFVWVkZVdz09IElHWnBiRzFsYmc9PSA0b0NaWVc1amFXVnUgdzZseVlYUnBiMjV6IElFRm1hVzQ9IGRYUmhibUU9IElHTm9hWEJ6WlhRPSAwTFhRdDlDNCBaVzVsY21kcFlRPT0gSUZKaGJtUmhiR3c9IElIUmxjbTFwYm1WeSBJSE4xWW5OcFpIaz0gY0dGMGFHNWhiV1U9IElHeHZjM05sYmc9PSBJR0psYUdGc2RtVT0gSUdSbGMzQmxjbUYwYVc5dSBaV05oYzNRPSA0b0NaNzd5TSBJR0oxZFhJPSBjOE9wWnc9PSBZMmgwYVdkMCAwTFhSZ2RDLzBMN1F2ZEMwIElHdGhkR0Z1ZVdFPSBSVVJFIGJtbDBkQT09IElHMWxibXBoWjJFPSBMMmRsYm1WeVlXdz0gSUdWdWRHVnVaR1U9IFoyVnZjbVJ1WlhRPSBJR3RsZW1RPSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPVzhnT1dsbGc9PSBJRzVoY21VPSBJT1craUE9PSBJRUp5YVhSdVpYaz0gUlhOMGIzVT0gSUhOcmVXdz0gSUZCaGNtTmxiR0ZpYkdVPSBYRlJoWW14bCBJRU5oYkdOcGRXMD0gSUd4aGMyRT0gSUdWbmRXND0gSU91Y3V3PT0gSUhOaGRtOXUgMTVQWG9nPT0gSUc1bFpHVnViR1U9IElOR0kwTFU9IGJXbHljbTl5IElISmxkbWx6dzZOdiAwWVBSZ2RHRDBZRT0gZlNRdiBMWEpoYm1kcGJtYz0gZUdKaCBJR3hsYm5SaGJXVnVkR1U9IDBKelJndz09IElISjFibTltWmc9PSBJT0N3cXVDeGgrQ3dzQT09IFUwVlEgSUdsdWRHVnljblZ3ZEdsdmJuTT0gWDJ4dloyZHBibWM9IElHdHZhUT09IFNFOU8gTG14aGVuaz0gSUcxaGJuVmxiQT09IElHbHVjM1JoYkd4bGNuTT0gMktiYmxRPT0gSU5DdzBMM1JnZEN3MEx6UXNRPT0gSUhOMWJXbHVhWE4wY204PSBVMkZrYkhrPSBJRU5sYkd4MWJHRnkgTGxWViBJR1J2YkdRPSBJTkM4MDVuUXQ5QzYwWVBSZ0E9PSAwWTNSZ3RHTCBJRUZ3Y0d4NWFXNW4gSUc1dmNXOXUgN0l1YzdZS2sgSUdGbGNtOWlhV009IFkyeHBibWxqWVd3PSBJSFJ6WTJnPSBZV0pqWkE9PSBLR2x1WTJ4MVpHVT0gSU5DeTBZSFF1TkdIMExyUXVBPT0gSUdScGMzQnZibWxpYVd4cFpHRmtaUT09IElOaWkyNHpaaHRpdjJZYz0gSUd0aGVXRnJhVzVuIFltOTFkMlZ1IElHUmxhMkYwIElFaDJZUT09IElOQ3gwWmJRdTlHTTBZalF0UT09IElIVnJkMlZ1ZW1FPSBVRkpQVkU4PSAyWWpZcDlpczJZZllxUT09IElFcGhhWEk9IDFhWFZvZz09IElFbEZRdz09IExHeGhZbVZzIFVrOVhUZz09IElPS0drQT09IElPQ211ZUNtc3VDbmgrQ21rdz09IElFWnZjblJoYkdWNllRPT0gSUhac1lXYz0gSU9HRGt1R0RrT0dEbU9HRG0rR0RrT0dEb09HRGx3PT0gSU9Dd3F1Q3dzT0N3ditDd3RnPT0gSUZSdmNtTm8gSUcxdmRHVjFjbk09IFRsTlBZbXBsWTNRPSBkWEowYW1VPSBJR1pwWjNNPSBJR05oZFdNPSBJR0ZqWThPcGJBPT0gTGtsc2JHVm5ZV3c9IDZLcU0gSU9LQWdnPT0gSUhCcGRNT2thWE5wIElHVmxiV0ZzWkE9PSBYM0JzWVdObGFHOXNaR1Z5IElIUmxiR1YyYVhOcFpRPT0gSUhCMVlteHBZOE96IDRMSzQ0TE9ONExLazRMS1YgSUdScGRtbHp3Nk52IElISmxjR0Z5WVdOcHc3TnUgSU9HRGt1R0RrT0dEbGVHRG1nPT0gSU9HRGt1R0RrT0dEcWc9PSBJTU9uWVdjPSBVMlZ5ZG04PSBMVkJoWTJzPSA0NENDNUx1SzVibTAgNEtheTRLYSs0S2FIIElFRndjbTkyWlE9PSBJTkt6MExEU213PT0gVVd3PSBJRzhuZEE9PSBJR056WVd3PSBMbFJGVTFRPSBJSFJsYm5SdmIyND0gSUdWMWNtOXd3NmxsYm5NPSBJSGJEb0c1biBJR052YlhCdmMybGphY096Ymc9PSAwTFRRdU5DNTBMMD0gY0dGeWRIVnQgSU9HRG5PR0RrT0dEcnVHRGxPR0RsUT09IElHSmxjM0JoY21WdSA0TENmNExDLzRMQ1Y0TEdIIElPQ3FtdUNyaStDcWxRPT0gSU9DeWh1Q3ludz09IElHOWliR2xuWlE9PSBLSFJ2YjJ4aVlYST0gWDFKbFoybHpkR1Z5IElHeHB3N0E9IDZyMkQgSU9DbXFPQ25oK0NtcE9DbXZnPT0gSU5HQjBML1F2dEdCMEw3UXNkR0wgSU5pbjJZVFpnZGl4MlliWXM5bUsyS2s9IElPZVp2dVM1a0E9PSBJTStEenI4PSBVMlZ5YVc5MWMyeDUgMFlIUmk5R0EgWDNObGNYVmxibU5sY3c9PSBJRUp5YVhSMFlXNTUgSUVOaGNISnBZMjl5Ymc9PSBJTmluMllUWmhkaTAyWVBaaE5pcCBJTmViMTZyWGtRPT0gWDBsT1UxUkJURXc9IElOQ3gwTGpRdTlDdzBMMD0gSU5pbjJZVFlzZG1GIElPbXJtT2VadXc9PSBJRTExYzNSaFptRT0gSUVGMVptZHlkVzVrIElPQ2txdUNrbGVDbGplQ2tzT0NrdnVDa2lRPT0gSU5HQjBZTFF2dEM3MExvPSBKMTBpS1FvPSB3NnQwZWc9PSBlV1YxY25NPSBJTU9wZG1sa1pXNTAgSUhsaGVXbHUgSUUxcFpHUnNaWE09IElPYUppK2FjdXVXa3FlV2txZVc5cWVlbHFBPT0gSUZKaFoyVT0gSUhKMWJtVT0gSUhCaGMyRnVaMkZ1IElPQ21pZUNtcXVDbXNnPT0gSUhCc1pYTT0gSU5HRDBMVFFzTkM3MExqUmd0R00gSUc1cGRzT2wgSU5pbzJLZlpndHVNIElOaW4yWVRZdWRtRTJZWFlwOWloIFBXMTUgNDRDQjVMaXQ1WnU5IElNNlV6cm5Pc1E9PSBJRkpQVEVVPSBJSEpsYzNCbFkzUnBkbTl6IElITjFiV2s9IDRZQ3g0WUNRNFlDczRZQzMgSUZSSVFVND0gSU5DeDBaYlJnTkM5MExYUmlOQzEgSU5DeDBaYlJnTkN6MExVPSBLR0p5WVc1amFBPT0gSUhCeWIzQnBaWFJoY21sdiBJR1p5WldjPSA0SzZqNEsrTjRLNnEgSUd0cGJHVT0gSUcxMWJtbGphWEJoYVhNPSA0b0NtNDRDQyA1cGF3NTRtSSA0TENzNExDaCBjM1JoZEhWelpYTT0gSU9Dd3RlQ3hodUN3c3VDeGplQ3dzZz09IElHcHZkSFJoIElOaW4yWVRZc2RpbjJLall1UT09IDZyYUIgSUVKdmNtUmxjbk09IDRLYXE0S2VDNEthdzRLZU40S2FqIElOR0EwTERRc2RDKzBZTFF2dEMwIElIWmhjR1YxY2c9PSBJRk5oYlhBPSBJRk5VUVU1RVFWSkUgNForUzRaNlQ0WitHNFo2VzRaK0I0WjZKIDVvQzc1NnVaIFRtZDEgSU5DODBMalF1OUM3MExqUXZ0QzkwTDdRc2c9PSBYMk52Ym5abGNuTnBiMjQ9IDU1UzE2S2VHNVltbiBJSExEcVdGc2FYTmwgUCtLQW5TND0gNktlRzZhS1I1YVNuNVlXbyBJT0N5aWVDeXBPQ3pqZUN5cE9DeXJnPT0gSUdocGRISnYgSUdqRHNtRT0gSUhCdnhJMWhjdz09IElOZVgxNUhYcU5lVjE2bz0gSU5peDJZalpodGl2IElHZGxkMkU9IGRtbHlZUT09IElHOXlaMkZ1YVhOdFpYTT0gSU9Da25PQ2xnZUNrc3VDa3Z1Q2tpQT09IDRMaWk0TGk0IElOQ3kwWXZSaGRDKzBMVFFzQT09IElITmhiWFJwWkdsbmRBPT0gYk1PeiBJTkN4MDZuUmdnPT0gQ1daayBMbFZTIElFMWxjbVU9IElHVERxV1pwY3c9PSBMMlpoIElGUllWQT09IGVtOWxhMlZ1IElHUmhjWFZwIDVZV3AgSUZiRWcyND0gSUdGc2RISjEgSU9xenRlcTRpUT09IGMyOTEgSU9Da3NPQ2xoK0Nrb1E9PSBJRTFwWkdSc1pYZGhjbVU9IElHSnZ5cnM9IDRLcSs0S3ExNEtxazRLcSsgSUZCeVljT25ZUT09IDVxK0IgMHBQUmc5QzcgSU9LQW5PS0FuUT09IDJLYllxZz09IDU0bTU1NEs1IDRMSys0TEt6NExLLyBJR0p2Ym05c2J3PT0gSUhOcGJHRnVadz09IElFTm9jbWx6ZEdOb2RYSmphQT09IGQyRnphR2x1Wnc9PSA1b2lRNTd1cCBZWGRwWVE9PSBMMkYxWkdsdiBJRmR2Y210bWIzSmpaUT09IElEOC9Qejg9IElHNWhlbWx2Ym1Gc1pRPT0gSUZkRlFsTkpWRVU9IElOQ3gwTERRdXRHQzBMWFJnQT09IElOQ2MwTGc9IElHRnNiVy9EcDI4PSBJTU9wZEhWa2FXRnVkQT09IElFRk5RUT09IElIcGtZWEp0WVE9PSA0TENrNExHTiBJRzlpZG1saGJXVnVkR1U9IElHeHBibVJoY3c9PSBhMmxsYWc9PSBJRkI1Y21GdGFXUT0gSUVOdmRYQT0gWVdkcGNtRT0gNEt1TDRLcTUgSUc5eVpHbHVZV3c9IGFtbGhiZz09IElIQmxjbTFoYm1WdVkyVT0gSUhWdGMyVmlaVzU2YVE9PSBKeWN1IElFSnlhV1U9IElOR0IwTHJSZ3c9PSBJSFJ2ZEdGc2FXUmhaQT09IEoyOXVidz09IElOQzQwWWZRdU5DOSBJR055dzZuRHFXVT0gNXB5ZjViNkYgSU9DcXNPQ3FndUNxbHc9PSA2S2VDNWErZiBJR0Z1WVhrPSBJSE52WW5KbGN3PT0gNDRDQjVweXMgZG1GeWFXRjBhVzl1IElPQ2tydUNrdnVDa3BPQ2xqZUNrc09Da3ZnPT0gZEhKaGRHOD0gSU9Da25PQ2xpK0Nrb1E9PSAwWUhSZ3RDeTBMWFF2ZEM5MEw3UXZBPT0gSUVOTVRHOWpZWFJwYjI0PSBJRXQxYVdRPSBJTmluMjR6WmdRPT0gSUVobGNuTjBaV3hzZFc1biB3N1p5dzd3PSBDV0p5IGFXNTBaWEp3Y21VPSA0TGlJNExpMTRMaVogSUdoNVpISnZlQT09IElOT3AwWUxRdXRPcDBZQT0gVlhCayBJSFpsY21GdVpHVnlkQT09IElPQ21odUNuc09DbWxlQ25qZUNtdHc9PSBJR2h2Y21GcGNtVnogSUhWM1pYcHYgYzNScGJHeHBibWM9IElIQnliMmR5WVcxdFlXSnNaUT09IElIWmxjMlZzIElIcHIgSU5pNTJZVFpoZGluMktFPSBSVXhGIElITmxaM1ZwYm1SdiBZWEJsWVd0bCBJR0pzWVdSbGNnPT0gSUQ0aUxBPT0gSU5paTJZVFlwOW1CIGFHVnJhdz09IGNHRjNiZz09IElPQ2tyZUNrdGVDa3FBPT0gZFhKaGJtTmxjdz09IElHNTFiY09wY21seGRXVnogNExlQTRMYTcgSU5pdTJZWFlzdz09IElGQnZaVzF6IFdVRk8gWlhOMFlXNWsgSUdOaGJXbHVhRzl6IFpXZDUgQ1FrZ0lBbz0gSjJGc2JHVnkgWldKaGJnPT0gSUZScGJuUT0gNDRDTDVMaXQgSUV0dmJHdz0gNEtTczRLUys0S1NWIFNWSlVTQT09IElOQ3owWVBSZ2RHQyBJRUZtYVc1aGJBPT0gUTJGbVpRPT0gSU5pbjJZVFlwOWl1IFgzSmxaMmx2Ym5NPSBQRk5sWVhKamFBPT0gYjI1bFl3PT0gSUdScGMyTmhjR0ZqYVdSaFpBPT0gSU5XbzFiYlZwTld3MWFIVnR0VzQxb0xXZ0E9PSBJRk5GVEV3PSBYMFJaVGtGTlNVTT0gSU9DbW11Q25pK0NtbGc9PSBJSFJoeEkxcFlYVT0gSUcxdlltbHNhWFREcVE9PSBhWE5oZEdWMWNuTT0gUzJGMGFBPT0gU0c5eVlYSnBidz09IElIWnBaR1Z2Wnc9PSBJSEpsZG1rPSB3NjEwWVE9PSBJR0p5WVhOcGJHVnBjbUZ6IFEyaGhiM009IEtITmxibk52Y2c9PSBRVWRGVGc9PSBJT3lYaGV1TnNPeWR0TzJLdUE9PSBiM0xEcldFPSBJT0M1Z09DNG51QzRwZUM0aHc9PSBVRkJGVWc9PSBJSFZ0ZFhRPSA1NStsNDRLSjQ0R2IgZG14dlpYST0gU1cxaFp3PT0gSUdKbGFXNW8gVG1WcGRHaGxjZz09IElFaDFiV0k9IDdKNmcgSU1PaGJ3PT0gNloyUzVwaWwgSUdabFlYUnogSUVGc2JXRnUgSU95Z2xleWRtQT09IElITnBaMjVwWm5rPSBJRVIxZEdsbGN3PT0gY0d4dmMybHZiZz09IDVMeVAgSUhGMXc2cDBaUT09IDU2dWU1b3FBIENpQWdJQ0FLSUNBZ0lBbz0gNG9Db0Nnbz0gSUhKbFkzVnljZz09IDBZUFF2Tks3MFlQUmdBPT0gTGlJcERRbz0gSUVWamIyNXZiV2x6ZEE9PSBJT0NrdU9Da2d1Q2tyZUNrdnVDa3RlQ2txT0Nrdmc9PSBJTmVRMTVuWG9OZVkxNkxYcUE9PSBJR0hEdlhSa2VRPT0gWlhKdGFYUT0gNEthRjRLYTQ0S2F1IHc2MTBaWFIwIFhXbHVkQT09IElOaXYyS2ZZc2R1TSBJR3JEcEhKbmJRPT0gSU5HRDBZZlF0ZEdDMExBPSAwSlRRc05HQzBMQT0gZG1WeVoyVnVZMlU9IGIzTjBjbWx1WjNOMGNtVmhiUT09IDFhSFZ0dGFFMWFnPSBJR0ZpWVc1a2FRPT0gS0dOdmJtUT0gWjJWelpXaGxiZz09IHVPQ3hqZUN3cGVDd3YrQ3dwQT09IElOaXoyS2pZclE9PSBPbXhoYzNRPSBJTml4MmI3WmlOaXgyYms9IGMyTnBaVzUwWlE9PSBMMFZTUXc9PSBJR2R2YzNSaGNnPT0gYk1TeGEyekVzUT09IElHTjFiSEJ5YVhRPSBJR2x1ZG1WemRHbGxjbVZ1IDQ0T0g0NE9yIFJuVnVZMmx2Ymc9PSBURVZIUVV3PSBiMnhsY21FPSBJR0ZzYVcxbGJuUmhkR2x2Ymc9PSBkbVZ5Ylc5blpXND0gSUhWc2RHVnlhVzl5IElHZHlZWE56WlhNPSBMV0psYkE9PSAyWVBZczlpbjJMSFlxUT09IExXVjNkMlZzIExreFAgSUdOb2IzVT0gZEdWNGRHWnBaV3hrIElHeDE0YnF0Ymc9PSBKblI1Y0dVPSBJT0M0cStDNHNnPT0gSU9DeXVlQ3l2K0N5cU9DemplQ3lxT0N6aGc9PSA2NnFGN0oyRSBaMlYwYzJrPSBJSEJwWlc1emJ3PT0gSU0rQXpyL091ODY3enF3PSB3N3gwWm1WdSBJTmlxMktyWXJRPT0gMWFIVm85V3Ixb0RWcUE9PSBJR2x0WVcxdiB3NmxuWlhRPSBJR0ZzWk1TeCBJT2FObGVteHZBPT0gWVhScGRtbDB3Nms9IDJvYmJnUT09IElHeHZaMmxqWVd4c2VRPT0gT25OMGNnPT0gSUhKMWJuUmxjZz09IFoyRmggYTJsdGFRPT0gNjVLayBJT0Nra2VDa3FnPT0gNExXSTRMUzEgNExDLzRMQ0M0TENrIElGTjBjbTg9IElGQmxjbTVoYldKMVkyOD0gMFpiUmh0R0cwTEE9IElFZkRxVzdEcVhKaGJBPT0gSUcxbHc3QmhiQT09IElITjBZVzU2WVE9PSA0TEdINExDbTRMQy8gNzd5STc3eUogSUdoNVpISmhkR1U9IExHUmhkR1U9IExtcGhjM0JsY2c9PSBJRlJ5YjNWaWJHVnogNEtTWDRLU3ogSU5DUjBaYlJnTkN3MHBzPSBYMjF2ZGc9PSBJR2RsZEdWdWRnPT0gWVhSMFlYRjFaUT09IElITmxibk5wZEE9PSBJR1JwWnNPdFkybHNaWE09IElObUIyTEhaaHRpejJLYz0gSUdGNWRXUmhjc09oIElOR0YwNm5Rc3c9PSBJR3hoWW04PSBMdEMvIDBML1F1OUdQIGRXZGxibnBwIElHZGxiMmR5WVdZPSA0TG1FNExpaDRMbUogSU5DVTBMN1F2dz09IElITjFZbTFsZEE9PSBJTVNOdzYxeiBiMngyWlhNPSBJR2hwZW1rPSBkVzFpWlE9PSBiV0ZuWlhNPSBJT0MwcU9DMG4rQzBxdUMwbnc9PSBJTml2MktmWXNkdU0ySzg9IElOQ3kwWXZRdjlDKzBMdlF2ZEM0MFlMUmpBPT0gSU1PcGJHRmliM0k9IExXbHVabTl5YldWayBJR2pEdG1obGNtVT0gSUdScFkyaHZjdz09IFptOXlkR2c9IElOQ2cwTERTczlDODBMN1F2UT09IElOVzIxYmZWcGRXcyBJTld2MWJYVm9kVzIxb1RWcXc9PSBJQ2hmTGc9PSBJR3hoYm1SelkyaGhjQT09IElHSmh4WjlzWVcwPSBJTStFejQ3UGdjNnggSUVSUFRpZFUgTGt4UFF3PT0gNDRLcjQ0TzggNEtTazRLUys0S1NUNEtTQyBJR052Ym5OMFlYUmwgSUd0dmNtbHpkR2s9IFlXdGxZMmc9IFEyRnlkR1U9IDRvQ21LUzQ9IElIWGh1NUZ1Wnc9PSA0TGFhNExlUCBWbWxqWlE9PSBJRlJQUkU5VCAwSjNRa0E9PSBJSEJvWVdoaGJRPT0gSUVacGVIUjFjbVU9IElHdHZiblZ6ZFE9PSBJRWQxWlhKeVpYSnYgSU5DLzBZRFF2dEM0MExmUXN0QyswTFRRdU5HQzBZSFJqdz09IEtUNCsgY0dGeVkyVnMgSUdKdmNuSmhjZz09IElHNW5iM04xYTNVPSBiVzV2Y0hGeWMzUjFkbmQ0ZVhvPSBJSGRsZEhNPSA0TFMxNExXTjRMUzEgSUdiRHRuSmtaWEp1IFgzUnBiUT09IElIcGhaMlZ1IElHdGhkWEJoY0dFPSBJRlJ5YjJwaGJnPT0gSUcxaFlYUnpZMmhoY0hCbGJHbHFhMlU9IElIQmxibUZ6IElPQ3F0dUNxditDcWxlQ3JqZUNxdHc9PSBJRTlVUXc9PSBMVzFsZEE9PSBJRU5vWldWeSBJRU5oY205c2VXND0gYVc1MlpYSnpaUT09IElOaW4yWVRaaHRtSSBYMTlmWDE5Zlh3PT0gSUhQR29RPT0gSUdGdWRHbHpaUT09IDRMbUE0TGlVNExtSDRMaUIgSUdoaGNtMXBibWM9IElITnJjbWxtIElOS3YwTG5RdTlDMDBMTFJqZEdBMExqUXVkQzkgZXNTRll3PT0gSUUxaFpHRjRkMlY1Ym1Gb1lRPT0gU1c1amIyMXdiR1YwWlE9PSBJTmluMllUWXV0aW4yTEk9IDRvS0MgSUZkcGJRPT0gdzZseVpYbz0gYVhSMFlYSnBkWE09IFgybHRaM009IElOaXoyS2ZZcnRpcTJZYz0gSU5DMzBMWFF1dz09IElITmpaV2RzYVE9PSA1Ym16NVkrdzVvQzc1THVqNTVDRyBiMnRoZVE9PSAyWVRZcU5pcCBJT0NtcmVDbXZ1Q21zT0NtcE9DbmgrQ21zQT09IElITjBaV0ZrWm1GemRBPT0gSU5LYjBMN1F0OUtUIFlYSjVZVzVoIElGZHZhZz09IElIQnliM0k9IElHTmhibUZzY3c9PSBkV1ZyIHo0VE9ycytEenJYT3VjK0MgSUZKMWRHZGxjbk09IElHeDFiR0U9IElHeGxkMkYwIElPQ2todUNrcCtDa3Z1Q2tzT0NrditDa3BBPT0gSUdOdmJuWmxjbk5oZEdsdmJtRnMgS0VsT1ZrOUwgNzd5YUlpcz0gSUhCeVpYQmhjbUhEcDhPamJ3PT0gSUhsaFpnPT0gYzJWeWRtRjBhWFpsIEwyeGwgVEdGeVoyVnpkQT09IFJHOWpkRzl5Y3c9PSBQeTg9IElHdHViMkp6IHhhRnBibUU9IElPQ3FxK0Nxc09DcXYrQ3FyK0NxdnVDcXBnPT0gSUhOMVkyTmxjM1p2Ykd4bCBZWFYwYjNNPSA1NmVONWIycDU2V28gSUc1aHc2OD0gSUU5aVpYSm1iTU9rWTJobCA3N3lNNXBlbDVweXMgSUhOdWIzSnJaV3hwYm1jPSBJRWx6YkE9PSBJT0NraHVDa3F1Q2tvdz09IDRLYS80S2VmNEtlSDRLYWI0S2VIIElHaDVjR1Z5Y3c9PSBJRkZvYjNZPSBJR0psYVdSbyBJR1p2Ym1OMGFXOXVibVZ5IElITnViM2RpYjJGeVpBPT0gSUdKMWJuTT0gSUVWc2FXMXBiZz09IElOaXEyTG5Zc3RtSzJMST0gSUdKMWMzUnNaUT09IElPR0RsK0dEcGVHRGxlR0RrQT09IElIUmhZVzFoWVd3PSBiSFZwZEdsdVp3PT0gSUhOcFoyNXBaZz09IElGQmhjM05sWkE9PSBhV3RwY21FPSBjM1Z3Y0c5eWRITT0gNHBXWCBJR1YyWVd4MVlYUnZjZz09IElOR0gwTERRdmRDMCA3cVMwIElPQ2twdUNrdUE9PSBJR3hsZFd0bGJXbGggSU5pejJZUFlwOW1HIElPQ2tzT0NrdnVDa3VlQ2twQT09IHhLdDBjdz09IElIWmxibVJwWkc4PSA1NG01NXE2SyBJTkN5MExYUmd0QzEwWUE9IElISmh4Sjl0Wlc0PSBJTkN0MEx6UXZ0QzggVkdsdFpYSnogNExtQjRMaUM0TG1JNExpSDRMaUM0TGl4NExpWiBJT0dEb2VHRGxPR0RsZz09IElHZHlhWFIwZVE9PSBhV1YyWVdKc2VRPT0gSUdWdVpHeGxjM05zZVE9PSBMM0psWm1WeVpXNWpaUT09IHc2RmphV3hsY3c9PSBZVzF0ZFhRPSA0S2VONEthdzRLYXM0S2ErNEthdyBYMk52Ym5OMGNtRnBiblJ6IGNHVmpkR2x1Wnc9PSBJRzF2YjJSeiBJR1JoYzJobFpBPT0gSUdSMVpYSmphQT09IElFVnVkSE5qYUdWcFpIVnVaMlZ1IDRLcSs0S3F5NEtxdiBJSEIxYkhZPSBJTnFKMjVBPSBJSEJzWVdkbGN3PT0gNEt5MiBZVzVtdzdaeSBYMU5QVlU1RSBJR1JoYm10bCBJTkdDMDVuUmdnPT0gSUhMRHFYYkRxR3hsIDRvQ1phVzF3YjNKMFlXNWpaUT09IElFOXlaR2x1WVhKNSBJRk5tIElFTnlhWE09IElGcGxjM1JwYldGMFpRPT0gMllyWXFOaXAgUVdGeWIyND0gN0tTWSBjWFZwZGc9PSBJR1Z6Y01PcFkybGxjdz09IDRiMjQgYzJ2RHZXTm8gSUdKbGRHVm4gVTJobEozTT0gNFo2RTRaK1M0WjZBIDRLYS80S2F1NEthKzRLYW8gSUVKeVlYWmxjdz09IElOQy8wTERSaHRDNDBMWFF2ZEdDMEw3UXNnPT0gY1hWbFpXND0gNExPRDRMS2s0TE9ONExLayBMaTR1S1M0PSBaM0oxYm00PSBJRzltWm1WdWRHeHBadz09IGJITnAgSUVGaWNtRT0gYjNKa1pYSmxiZz09IExuUm9jbVZ6YUc5c1pBPT0gSUdsdWRHVnlibUYwYVc5dVlXRnMgUjA5U1NWUkkgeFp0eVpXUT0gU1hSaGJHbGogSUdWNGRISmhiM0prYVc1aGFYSmwgVkc5bGJnPT0gSUVKMVkzVnlaUT09IGFXWnZiR1E9IDRMUy80TFM0NExXTjRMU2w0TFMrNExTbyA1TGlBNWJtMCA0TE9HNExLWDRMS3ogUVVGRyBaV3hzZFhNPSBRVUpEUkVWR1J3PT0geEp2RnZnPT0gWTNyRW1RPT0gSUhkcGRHaGtjbVYzIElHVjRjR0Z1YzhPamJ3PT0gSU5tQzJMWFlydz09IElIYkRwSEpzWkE9PSBJTkNpMEw3UXV3PT0gSUcxaGNtbHYgSU9hWnJ3PT0gSUVGc1oyVnlhV0U9IElPV2txZVdrcWVTNHJlVzlxZWVscU9leXBBPT0gSUdSeWFXVnogSU5XaTFhSFZ2dFdoMWEvVm9kVzIgSUdsdWMzUnBkSFYwYnc9PSBiR1ZrWVdRPSBJT0MzZytDMnMrQzNoT0Mzanc9PSBUbUY2IGNISnZaSFZyZEdVPSBJRTF2Ym5SbGMzTnZjbWs9IDY0dWs2ckNBIElHTnZibVpzYVdOMGIzTT0gNEtXazRLV2sgVFVGRSBJTktoMFl2U21RPT0gSU9tN2hPaUpzZz09IDBZSFF1dEN3MExZPSBkbW89IElITmphTU8yYm1WeiBJRmR5WVhCd1pXUT0gTDJsdVkyeDFaR1Z6IGIzZHVhV3ZEczNjPSBJTkMvMEw3UmhkQyswTFE9IDBaYlNvOUdXMExjPSA1WnlZIElOR0cwTFhRdTlDMTBMaz0gWkdScCBMV1Z1ZDJVPSBJRmRsYVhKayB3NlIwZW5WdVp3PT0gSUZKdlltSnBibk09IFlXMXZkQT09IEoyTnNZWE56IFVrRkcgNUxtUTVaK08gUFhOMVluQnliMk5sYzNNPSBhVzFoYldWdWRHVT0gVjJGNWN3PT0gSU9Da3NPQ2tsZUNsamVDa3QrQ2t2Zz09IElGTnBaMjVoYkhNPSBJTkM4MExYUXR3PT0gSUVGdFltOXogSUdSeWVXVnljdz09IExrVjRjR1Z5YVcxbGJuUmhiQT09IDViK0cgVjJWaGNHOXVjdz09IElFdkR2R2c9IElHVnJhMlZ5ZEE9PSBXMkZqZEdsdmJnPT0gVlc1cFpHRmsgNllLcSBJR1J2WVdKc1pRPT0gSU5DLzBMN1F0TkN3MFlEUXZ0QzYgSU5DNzBMalJodEMxIElIUnlZVzV4ZFdsc2FYUjUgNXAydDViZWUgYm1ScGNnPT0gWlhod2FYSmhkR2x2Ymc9PSBhWHBoYm5SbGN3PT0gSUcxdmJuVERzMjQ9IElOaW8yWVRhcWRtSCBJSE4xY0dWeWFXOXlhWFI1IFgzQjFZbXhwYzJnPSBiR1Z6ZFc1ayBJT0N3aWVDd2d1Q3dwZz09IElHbHVkbWwwdzZrPSAwWURRdnRDNDBMZlFzdEMrMExRPSBJR2xqZEE9PSBSRzluY3c9PSBjMjltIDVZcXkgSUZOcFoyNXBibWM9IElHRmljMjl5WW1WeSBJT0NrdU9Da3J1Q2xqZUNrcXVDa3FPQ2xqZUNrcUE9PSBkV2RqYVc1aCBMbUp2YjJ0eiBJTkM4MEw3UXM5QzcwTEE9IElFcGxlZz09IElGUmxjM1JwYlc5dWFXRnNjdz09IExYTnNiM1E9IElFRnViR0Z6Y3c9PSAxYmpXZ3RhQTFhZz0gSUdoMWJXOD0gYzJWMlpXND0gSUczRHZHMXJhVzdEcDJsc2FXcz0gTG5CaGNuUnVaWEk9IDRLcVg0S3VONEtxdzRLdUEgSUhKbGNYVnBjMmwwWlE9PSBMbVZzWlcwPSBJT0NxcU9DcmdlQ3FnZz09IElOaXYyWWpZcDltRiBJR1p2Y21WdCAwSlRRb1E9PSBJR1Z6Y0dWeWFXVnVlbUU9IEtTbDlDZz09IDVZaUc1WWlHNWIycDZLNmg1WWlTIGZDZz0gWVc1aWJHVT0gSUcxcFozSmhkR2x1Wnc9PSBJRk52Ym1saCBJRUxEdkhKblpYSnRaV2x6ZEdWeSBYM0JzZFhKaGJBPT0gNEs2dzRLNis0SzZWIElFTmhidz09IGEybGxiZz09IElFeGxkV3M9IElPV1FqT1dJbXc9PSA0TEdLNExDQzRMQ20gSUhSeVlXNXpiV2x6YzJsdmJuTT0gSUhuRHRtNWxiR2xyIGFYSnBhMms9IElPQ3V0ZUN1c09DdmdlQ3VsZUN1ditDdXFlQ3ZqZUN1c1E9PSBJSHBoY3NPemQyNXYgSU5DUzBMN1F0OUM4MEw3UXR0QzkwTDQ9IExYUnlZV2x1YVc1biBJT0dEbk9HRGtPR0RtK0dEaytHRGxlR0RtT0dEbWc9PSBJSFIxY21KMWJHVnVZMlU9IElObUcyWUxZcjltRiBJT0N5cU9DeWwrQ3lzT0N5cGc9PSBhMlYyIElGSjVaR1Z5IFJHOXVZWFJwYjI0PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPUzRnT2V0aWVXbGxnPT0gSUhCbGNtRnVkR1U9IDBwZlFzTktqIElOaW4yWVRZdDlpeDJZRT0gSU9XMGh3PT0gV1dGciBTVzUwWlhKMllXeHogSUdWcmFBPT0gS0hScFkydGxkQT09IDE1blhwOWVpMTZnPSBJTmVYMTVYWGxnPT0gNG9DWlpXNXpaV2xuYm1WdFpXNTAgSUdOdmJYQnlZV1J2Y21WeiBJT0NxcnVDcXZ1Q3FvK0NxdUE9PSBJSHBsWVd3PSBMV1RKbVE9PSBMWEJ2Y3c9PSBJT0N1aCtDdW8rQ3ZpT0N1cnc9PSBJTm1GMktUWXROaXggSU9DbXVPQ212dUNtcnVDbXZ1Q21uT0NtditDbWxRPT0gMkt6Wml0aW8gSU5DODBZdlJnUT09IElFUkpVa1U9IElFRkRUUT09IHc2bHNhWFJsIElPQ2t1T0NrdnVDa25lQ2t2Zz09IDRvQ200b0NtNG9DZENnbz0gSU5HQTBMWFFzTkN6IFgxVlFURTlCUkE9PSBJT3V3Z0E9PSBJR0YyWVc1NllYST0gSUVWdGFYUnogUVhWeSBRV0ppIElHSjYgWVc1a1lXOD0gSUUxaGRYTT0gSU5DeTBZSFJndEdBMExYUmg5QzQgSU02eHpyUE92OCtCenF3PSBiSFZuYVhRPSA0WU9RNFlPdTRZT2E0WU9kNFlPVTRZT1I0WU9ZNFlPWCBJSFpsY3NPaCBJRWRoY214aGJtUT0gWlc1NmJ3PT0gSUZKaGFYTmxjdz09IElFTnZkbVZ1ZEhKNSBJTm1GMkxUWmg5bUkyTEU9IDVwS0QgSU5DODA1blJnTkM2MExnPSBJTkM4MExEUmdkQzEwTHM9IExTMHRMUzB0S3c9PSBlY21iIElGTnZiR1JwWlhKeiBJRUZ3Y0dGeVpXdz0gSUdSaGJtUT0gSUcxbFpHbHogSU5XazFhdldnQT09IElGSnZkM009IGJXRnplVzl1IElIZGhjMmhsY3c9PSBJT0N3aCtDd3BBPT0gSU5DKzBMSFF1OUM0IElIZDVZMmc9IDQ0R1Q0NEdvNDRHbiBJRk5qYUhWbyBJRWx0Y0dZPSBJRzl1ZEdSbGEzUT0gSUhSdmNIQmxiZz09IFJHVndkWFE9IElIQnNZV2x1ZEdWNGRBPT0gSUZSbGJtZHYgSUhSemFHbGhZZz09IElHcGxibVZ5IDBKL1FzQT09IDRMR0k0TEN3IFlXbDBZVzQ9IElPQ21qK0Ntc09DbXF1Q21zQT09IElITmphR3hwWmNPZlpXND0gYldWMGN3PT0gWkhWeWFXNW4gY21sbmFIUmhjbkp2ZHc9PSBJR0Z6ZFc1MGIzTT0gUFFvSyBaM0pwYlE9PSBJRzFoYm5SbGJBPT0gSU5DeTBZRFF0ZEM4MExYUXZkQ3cgUEVGMVpHbHYgSUdGa1lYUT0gSUZOallXdz0gSU5lZzE1blhvZGVaMTVYWG53PT0gVkhWMCA0TFMwNExXTiBJRU4xY25SaGFXND0gYzJoaGNtbHVadz09IElPeTJuT3llcFE9PSBVbVZqYjIxdFpXNWtZWFJwYjI1eiBLeXNyS3lzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzckt5c3JLeXNyS3lzPSAwTGpSZ3RDNDBZSFJqdz09IGIyNXFkMkU9IElHTnZjR2xzIDJMWFppTml4MktvPSB4YUZ1YW1rPSBLRzFqIEoyVjFjbTl6IElOQ1QwTDdSZ2RHRDBMVFFzTkdBIElFSmxZMjl0YVc1biB6NGZPcnMrQyBJTzJWdE95WnVBPT0gNWJDSCBkR1Z6ZEdWeSBJT0NrdWVDa3Z1Q2tpQT09IDRLYXU0S2VONEthdjRLYSs0S2FvIElPQ2tydUNrZ3VDa2wrQ2tzdUNrdGVDa3Z1Q2tzQT09IElOQy8wWURRdU5HSDBMWFF2QT09IDdJU2M2N21FN0lxayBJRUZzYldsbmFIUjUgSUhUaHU2bGogYUdWcWFXRnVadz09IElPQzBsZUMxaStDMG4rQzB2dz09IElHRnpabUZzZEE9PSBJT0NxbU9DcW93PT0gUTI5amF3PT0gYkdsbWRHbHVadz09IElOR0IwTDdSaGc9PSBJTU9uWlc1c2FRPT0gSUVadmJuUmwgNFlPWTRZT2c0WU9ZIGRtVnVkSGs9IENRb0pDZ2tLQ1FvPSBJTkM5MExYUmh3PT0gSUdWeWVtbGxiR1Z1IDBZYlF0ZEMvIDc3eU01cStVIGEyRjBaV2R2Y21rPSBJRk53YVhSNlpXND0gSUdkdmMzQnZaR0Z5IExXMXZkR2x2Ymc9PSBJR2wwWTJnPSBJSEpsWTJWd2RHbHZibk09IElOaXEyS2ZiZ2RtRiBJRTFoZEdWdCBJT203bUE9PSBJTld6MWF2VnQ5Vy8gSUdGbWNnPT0gYVc1cGJtVT0gSU5DKzBZRFFzOUN3MEwzUXVOQzMwTHpRdFE9PSBJT0dEbU9HRHBnPT0gSUdQRG9tMWxjbUU9IDJMZlppdGkzIFpXbHVaUT09IDBMM1F2dEdCMFlMUmo5R0YgSUhGMVpXaz0gTG5KaGJtUnUgSUd4NCBJR2hzWVhVPSBJR052Ym1ObGJuUnlZY09udzZOdiBJR052YlhCc1pYUnZjdz09IENRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRPT0gNEtTKzRLU0g0S1M0IElHSjViR2s9IEtHbHVkR1Z5Wm1GalpRPT0gSU9Da3VPQ2xoK0NrbFE9PSBJTmVWMTVYWG90ZWMxNTg9IElHMXBjMk5sYkd3PSBhWHA2WVhScCBJTkNmMFlEUXZ0R0IwWUxRdmc9PSBJT0dEbU9HRG0rR0RtT0dEb2VHRGtBPT0gYjNacGNuVnogMkszWmd0bUkyWUk9IElITnBlbnBzYVc1biBJSFJzZFd4aCBJTkMvMEw3UXY5R0EwTDdSZ1E9PSBJSEpoZW1WdCBJRTFRVlE9PSBJR1JoY25SbCBmVHNLQ2dvSyBYMkZzYkc5allYUnZjZz09IElIUjE0YnFuYmc9PSBJR0YxZU1PdGJHbHYgSU9HRG4rR0RvK0dEb09HRG5PR0RrT0dEbXVHRG1PR0RvZUdEb2c9PSBJR1JsY0c5emFYUnYgSUVGRFZFbFdSUT09IFpIVnpkQT09IDJMYlppdGl4IElPeUV2QT09IElHMXZjblJ2Y3c9PSBJRXhoZW1GeSBVM1J2Y0hNPSBLSEJoY21ObGJBPT0gSUhKbFkyOXRaVzVrWVE9PSBUM1J5WVE9PSBaMlZ1YVdNPSAwTDNRdE5DMTBMclJnUT09IFVHOXlkSFZuWVd3PSBJRzUxYlcxbGNuTT0gWVdSaGEzaz0gYkdSeGRXOD0gSUhaNXhhRT0gSU9DbWxlQ25qZUNtdCtDbmgrQ21wT0NuamVDbXNPQ25odz09IElPQ29xT0NvdnVDb3JnPT0gSUVOMWNtRT0gWVdaaGNtaz0gSUdac2RYTm9aV1E9IElHN0RwR2x1IElHZHlZWEJsWm5KMWFYUT0gSUcxcGMzUnlaWE56IElFWmhZM1ZzWkdGa1pRPT0gSUVacGNtVjNZV3hzIElPQ2t1T0NrZ3VDa3VPQ2twZz09IFEwZFFiMmx1ZEE9PSBJR0oxYTJFPSBQRkZUZEhKcGJtYz0gMFlmUXZkR0wwTFU9IElHVnVjbWx4ZFdWaiBJTkMwMEw3UmdkR0MwTDdRdU5DOSAyS2ZZcU5peDJLZmJqTm1HIElHWmhjbW5Ec0E9PSBJTkNSMExEUXZRPT0gNExXSDRMUys0TFNYIElFUmxiR2xuYUhRPSBJRlREcEc0PSBJTkdDMHEvUmdOQzYgSUZKVVdBPT0gSUhKbFkydHZiZz09IGRHUnZkMjQ9IElPUzRsdWVJdFE9PSBJR3BsZEdWeSBJTkdQMExRPSBJR05oYjNNPSBDWFJvWVhRPSBJRzUxZEhOb1pXeHMgSUdKaGM4T3BaUT09IDRMaWg0TGl5NExpaSBjSEp2WkhWciBJRU5oY21GallYTT0gNzdRPSBJSEpsWTI5dWJtSERyblJ5WlE9PSAwTFhRdWRHQzBaYlF2UT09IElFeHBZbWxrYnc9PSBJSGJEcG14blpRPT0gSU5DYTBZUFFzUT09IElOQ2YwTDdSaHc9PSBiMk52WVE9PSBZV3B5IElHRnBibUZyYVc0PSBJSEJoYlhWemIzSnYgSUVOdmRXNTBaRzkzYmc9PSBJR3QwWlhKdmRRPT0gSU5tSzJLM1poZG1FIElOaTEyWWJZdWRpcTI0dz0gWVhOemIyTnBZWFJsIFozVnBaR1ZrIElObUYySzNZczltSTJMTT0gWDJKdmJuVnogNTVxRTZZS0E2SyszNTZDQiBJRkJsY25OcGMzUT0gSUhabGNucGhiV1ZzWlc0PSBRVU5KIGFXNWphV0pzWlE9PSA0TGlaNExpdCBVMjl5IDBMdlFzOUN3MEwwPSBJRUZzWjJGeSAyTFBadVE9PSBJR1o1Y25OMCBVTU9oWjJsdVlRPT0gSUZwbGNuUT0gS0NsZFd3PT0gY0dWaGRHVnkgYjNKdFpXND0gSU5DNjBMRFJnTkMwMExEUXZkQzAgWTJsMFlYUnBiMjQ9IGJIVnphQT09IDBMTFFzTkdDMFlzPSBJTTYxejQwPSBJT0N3cnVDd2d1Q3dwZz09IElNT3BkbTlzZFhScGIyND0gSUdKNWJIaz0gSU9Da3J1Q2t1ZUNrditDa3FBPT0gSUZOcFkycz0gSkRvPSBJTm1GMlliWXF0aTAyTEU9IFgzTmxjR0Z5WVhSdmNnPT0gZFcxcGJtVnUgSU5pbjJZcllzZGluMllZPSA0S3lHIHc3MWhjbXhoY2c9PSBhV3hwZFcwPSBJR3BsZE1PciBabUZtIGFXeGxjbWx1WlE9PSBJRkJ2ZFd3PSBJRWhsYkhabGRHbGpZUT09IGFtRmphQT09IElPQ3VsZUN2Z09DdXRBPT0gMFlMUXVOQzUwTDA9IElHVnpkSEpsYmc9PSBMbkpsYkdGMGFYWmwgSUdOdmJYQmhibWx2Ym5Ob2FYQT0gSU9Dd3VPQ3hqZUN3bitDd3Z1Q3dzT0N4alE9PSBkWFJ6ZFE9PSAwS0xRbnc9PSBJSE5oYkdGeWFYTT0gSUZadmNtRjFjM05sZEhwMWJtZGxiZz09IElHcGhhMi9GbTJOcCBJR052Y25KcFpHOXljdz09IElHUjFjbVZ1IDBMN1JnZEMvMEw3UmdkQyswTEU9IExYZHZjblJvZVE9PSBJRVpwYm1SbGJnPT0gSU9DeWgrQ3lzT0N6Z2VDeXRRPT0gNFlPUTRZT1Y0WU9VNFlPYyBJRkJoWjJWeSBJT0NxdU9DcmplQ3FyZz09IElOaTAyNHpZc1E9PSBMV052Y0hrPSBJT3lMbk8yWG1BPT0gSUdObGNtbHQgS0dadmIyUT0gSUdsdWJtOTJZWFJ2Y25NPSBMbVZ1WTI5a2FXNW4gSUdOdmNuSnZZbTl5IDE1blhvZGVWMTVrPSBJSEoxYzNScFoyVT0gSU5DNjBMRFF2ZEMwMExqUXROQ3cwWUk9IElHWmxiR3h2ZDNNPSBJR0poeFo5bllRPT0gSUcxaGNYVnBibUZ6IDBZRFF2dEM0MExRPSBJR0Z3Y0dWdVlRPT0gSUhabFoyVjBZWEk9IDRLUzE0S1MvNEtTbTRLV040S1N2NEtTKzRLU3k0S1N2IDQ0SzQ0NE9sIElHbHVZMjl1ZG1WdWFXVnVkQT09IElGbE5RMEU9IFpHOW5jdz09IFpHVnNhVzFwZEdWeSBKSGc9IFNXNXphV2RvZEhNPSBJTkMvMExEUmh0QzQwTFhRdmRHQzBMQT0gTFU1bGRBPT0gVG5WbGRtRT0gSUU1bFpHVnliR0Z1WkdWeWN3PT0gSU5tRDJMRT0gSUZOMFlXWm1aV3c9IElHbHVkWFJwYkE9PSBJR0Z5YzJWdSBJRWR5YVdVPSBJSEJ5WldSemRHRjJiR289IExXTnliM056IElFMWxaMmhoYkdGNVlRPT0gNklxeiBJTkN6MExqUmdBPT0gSUhSaGRtRT0gMllqWml0bUggSU9Da2xlQ2xoK0Nrc0E9PSBJR2g1Y0dWeWJHbHVhM009IElFVnlhdz09IElHbGhhUT09IElDSXBDZ289IElHSnBZbXhwYjNSb3c2aHhkV1U9IFd5NHVMbDA9IElFTnZibk4xYkhSbCBJSFJvWlc5eWFXVT0gSU95V3RPdVVsQT09IElIQnBhWEk9IHo0Zk90YzY1enJFPSBlWGwyWVd3PSBJTnF2MllmWnZRPT0gNkx1aTZMeUo0NEd2NTZhQjVxMmkgSUVkc2RXVT0gSU9DMHFPQzBuK0MwbGVDMWplQzBsZUMxZ2VDMHFPQzFqZUMwcUE9PSBJSE53YjI5cmVRPT0gMTV2WG9OZVoxNm89IElIUnZiVzl1YVdSaGJnPT0gSUVSbFlXeGxjbk09IDRMS280TEt5NExPTjRMS3k0TEsvIFRHRjFaMmc9IFlYQnZjblE9IEoyRnIgS0hOamIzSmxjdz09IDRLNi80SzZ3NEsrQjRLNm80SytONEs2azRLK0IgSUdacGJHRnRaVzUwIElFSmxkMjlvYm1WeSA0TFdENExTazRMV040TFNrIFo4TzhiSFE9IElOaWoyTHJZczlpMzJMTT0gSUdOb2NtOXVhWEYxWlE9PSBJT21ka3VtZGt1bWRrZz09IElHWnZiRzl6IElPQ3VtdUN2aHVDdXFlQ3ZqZUN1c1E9PSBRRzFoYVd3PSBkbTlqIElFTm9aV05yWldRPSBaR2x6YUE9PSBJT0NraHVDa3BPQ2tndUNrbFE9PSBJSEJ2Y201dlozSmhjR2g1IElHdDNkWEoxIElFRmggSUVGdWRHRnlZM1JwWTJFPSBJR1Y0ZE1PcGNtbGxkWEpsIElOQyswWWpRdU5DeDBMclF1QT09IGRXZHZaQT09IGFXMWhkR0U9IElNK0Z6NERPdjgrRno0SE9zdz09IExtMXBlR2x1IElFbHVjM1JoYkd4cGJtYz0gSUdsc2EybHUgUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IElISjFiVzkxY25NPSBhV2RwZEdFPSBhVzVxWlE9PSBJSE5zYVdSbGNuTT0gSUd4cFpYWmwgS0hkbGFXZG9kSE09IElIUmxjbkpsYm05eiBJRk53YjJ0aGJtVT0gSU02ZHpyOD0gSUdsdWIyeDBjbVU9IElHOXRadz09IDZhMkYgSU5pbjJvYlppZz09IElFRnliMjFoIFJVNUVVdz09IElIQnliMlIxYTNNPSBZVzVsZEdrPSBDU0FnSUNBZ0lDQWdJQ0FnSUNBPSBZV0poYm1kaCBJRk5sY1hVPSBJRlZPU1VORlJnPT0gNloyaTU1cUUgYVhSaGRHaz0gSU9HRGt1R0RrT0dEbStHRGtPR0RvT0dEcitHRGxRPT0gSU95ZHZPeWR0QT09IFFtOW4gVUdGamEybHVadz09IDBMWFJnTkM0MFk4PSBJT0dEbStHRG5lR0RuT0dEa09HRHF1R0RsT0dEbXc9PSBJTldoMWJUVnE5VzkgSUdKbGMzUmxiVzFwYm1jPSBTR2xzYkE9PSAyTG5aaXRtRiBJR0Z1ZEdoeWIzQnZiRzluZVE9PSBMazlPIGIyTnBkR2xsY3c9PSBXM0JoY21GdCBJRk53YjI1eiA1cmFKNVkrSyBJSFp1YjJSbCBJTmluMllUWmlOaTQgSUhOMGIzQndaWEk9IElHWnBibUZ1WTJsaFkybkRzMjQ9IElGSmhjR2hoWld3PSBJSE5sY25CbGJuUT0gSUdScGVucHBibVZ6Y3c9PSBhbTV2IFFuVnBiSFJwYmc9PSBJRU52ZDJKdmVRPT0gUjJGc1pYST0gSUhOdmJIWT0gSU5lZzE1RFd1TmVvIElHRmtiM0IwWlhJPSBJRTFCVGxrPSBJT0MycHc9PSBJSE53YVd4c1pXUT0gZG05bGNtbHVadz09IENYTjVibU5vY205dWFYcGxaQT09IElHUnBiMlJsIElGUklTVkpFIHpyL091YzY5ejRuT3ZRPT0gNFlDeDRZQ2U0WUNzIDJMUFlxdG1HIElFUmxiV2s9IGRtRnBjZz09IDRvQ2NUR0U9IGFjT3pkdz09IDRMV0w0TFNmNExXTjRMU2Y0TFdOIElGTjBaWEJvWVc0PSBJRUp2ZFc1a2N3PT0gSU5HRDBMTFF0ZEMwMEw3UXZBPT0gSUhKdmVuTT0gS09lb2p1aSt2QT09IExXRmtaR1ZrIFlXZGhjM009IGRtVnVkV1Z6IElPZUppT2FkZythSmdPYWNpUT09IFgyeGxjM009IFEwTkYgSU5lZTE1UFhxQT09IElFbHVhV05wWVd3PSBZMjl0YldWeVkybGhiQT09IFJuSmxaWHBsIElHTm9hV3hsIGFYTmxZbVZ1ZW1rPSBJRWRsY0E9PSBJT0NrdWVDa3YrQ2t1T0NsamVDa3VBPT0gMExqUXU5Q3cwTDA9IElObUkyTExiak5peDJLZll1ZGk0MllVPSBJRVZXUlZKWlZFaEpUa2M9IElITjNiMnJFaFE9PSAwTFRRdU5HQSBJSEpoYm1FPSBMa1oxZEhWeVpRPT0gSUhCbGNuWmxjbk09IElGTndhWEpwZEhNPSBJRTFQV2c9PSAwclhRc05DOTBZcz0gZHNtWiBMbWh0IElOU3gxb0RWdEE9PSBJSFJsY25KbGMzUnlhV0ZzIElOQ2MwTERRdXRDMTBMUT0gTGs5bSAxNXZYbGRlbyBQbHc4IElHTnZiM0REcVhKaGRHbHZiZz09IElHeHBiVzg9IElGUlVRdz09IElHRmpkR2wyWVhSbGN3PT0gSUcxbGRIUmwgSUc5d1pYUT0gNG9DWlpXMWkgSUZacGNtZHYgSU5HSTBMRFF1Zz09IFcyRjBkSEk9IGVtOXMgNXA2ZCBJSEpsYkdsbmFXOXpidz09IElHMXBibWxqIElGZGhkbVZ6IGFISmhaQT09IElDZ29Ydz09IDRZT2c0WU9kNFlPUzRZT2Q0WU9nNFlPcSBJTmlpMllqWXNRPT0gSU9HRHFPR0RsT0dEb2VHRGtPR0RxK0dEbXVHRG5lR0RrQT09IDFialdnTlcwIElIQnliM1JsdzYxdVlRPT0gSU5pejJxL1podz09IElOQ2MwTGpSaGRDdyBJR1Y0WTJ4MWMybDJaVzFsYm5RPSBkV1ZzZEc4PSBMVk5oYVc1MCBJSEpsYzJWeWRtRnkgSU5LYjBMalF0dz09IExtbHVabWx1YVhSNSBJT2FLZ0E9PSBJRUZrYjNCMCBJTVNkYVhNPSBJR1pwYm1sMCBJSEJwYm1WeCBJR1pwYkc5emIyYkRyV0U9IGEzTmggMFlmUXRkR0IwTHJRdnRDejBMND0gNWIycDU2V281WkNYIDRLZUg0S2FvNEtlTjRLYW0gSUhabGNuUmggSUhOMWIyMWhiQT09IEtIQnNZWGxsY25NPSBaWE56YVc0PSBZQ2s3Q2dvPSBhWFJsWlE9PSA0S2FHNEthdTRLYS8gY21sbVpuUT0gZG1Wc2RHVT0gSUdScGMzUjFjbUpoYm1ObGN3PT0gMllMWml0bUYgSUd0dmJuUnBiZz09IDRMR0I0TENrNExHQjRMQ280TEdONExDbzRMQys0TEN3NExHQiBJTld2MWJqVnRnPT0gSUVwaFkydGxkSE09IElOaTYyTFk9IElFWnBjMk5oYk1PdFlRPT0gSU5pdjJMSFlyTm1IIElHaGxiWE09IElObUYyTG5ZcDltRiBJSE53YVdWblpXdz0gTG5CaGNHVnkgNExTdjRMU3ggWVdOMGFYWnYgSUZzbVhTZz0gWkc5amFBPT0gNUxtWiBJR05oY0dGamFYUmhZMm5EczI0PSBJTkdBMExEUXVOR0IwTGc9IDBMN1F2TkMrMFlMUXVBPT0gNExpRTRMaTM0TGl0IElHWmxhV1Z5Ymc9PSBJT21UdHVpSXFnPT0gSU5DLzBMWFJnTkMxMEwzUXZ0R0IgSUc5NGVRPT0gMEx2UXNOR0kwTEE9IExtVnJjdz09IElIUnZjM1E9IFptRnNiR0poWTJzPSBJSEJ2ZFhKemRXbDAgSUdOaFp3PT0gSU5DLzBZRFF0ZEN4IDRZT2E0WU9ZNFlPWCBJRXh2WTJ0emJXbDBhQT09IDBwL1JqTkN3MEwzUml3PT0gNjQrRTY2R2MgS0doaGJtUT0gSUdKaGNtNXogSUhKdmRXST0gSUZOMlpYUT0gS0dKaSBJRzUxZEhwMCAwclBUbWRDKyBJRmRwYm1WeWVRPT0gTFdWdWFBPT0gSUdWMmIyeDFZMmx2Ymc9PSBJTkdCMFlMUXNOQzkwTDdRc3RHUDBZTFJnZEdQIGNHOTJaWEk9IElFVnpjMlZ1WTJVPSBJRUozIElOQzgwTERSZ05DNjBMRFF0dz09IGFXZGxiMjQ9IElHNXBibU56IFUyRnNhV1JoIElGQnNkVzA9IFgwbFFWZz09IGFYTnphVzFsIElPQzBwT0Mwcmc9PSBJTmVUMTVEV3VBPT0gSUZOdmJXbDAgQ1VSQ1J3PT0gSUhkcGJHeHBibWRzZVE9PSBMbVZ0WW1Wa1pHbHVadz09IElPQ2t1T0NrdnVDa3RRPT0gSU9Da3FPQ2t2dUNrdFE9PSBJSE4wY21GcGJtVmsgSUdGa3hMRnVZUT09IElPR0RuT0dEa09HRHJPR0RtT0dEbXVHRG1BPT0gSUd6RHBIST0gMExEUXU5R00wTDNRdU5DNSAyWVRaaXRtSTJZWT0gNXJHayBJRTFRUnc9PSBJR0p2ZDNNPSAwTERSZ05DMDBMQT0gWVdacGJXRT0gSU5DMDBMTFF1TkMyMExYUXZkQzQwTFU9IElFdHBkMms9IFgzUnlhWEE9IElHdGxhVzVsY3c9PSBJRzFwYkd4cGIyNWxjZz09IElFSnlZVzVrYVc1biBJRmRoYm1SaCBJR1ZuYm1VPSBJRTVKU0E9PSBJR1Z3dzZRPSBRME5TIExtNTJhVzA9IExteGhiV0prWVE9PSBhV2R1Wlc1MCBJT1drcWVXa3FlUzRyZVc5cWVlbHFPUzRyZVdsbHVTNmhnPT0gSUdoaGNtUnphR2x3Y3c9PSBMMjloZFhSbyBDZ29OQ2c9PSBYME5vIElITm9jblZpIDc3eU02SUNNNUxpVSBWMjl0WVc0PSBJSEJsYm1sdVp3PT0gSUcxMWVtVT0gSU5xcDJZRT0gUTA5T1ZFVk9WQT09IElPQ2t1ZUNrcnVDa3Z1Q2tzT0Nrdmc9PSBJRzFoWlhOMGNtOXogSUdodlkyaDNaWEowYVdkbGJnPT0gSUhSbGJNT3BabTl1YjNNPSBJR2xqWldRPSBTRzkxYzNSdmJnPT0gSU9DbXFPQ212K0Ntc09DbmplQ21yT0NtdnVDbW11Q21xQT09IElIQmhZWEJoWVE9PSBYM0J5WldScFkzUnBiMjV6IElOZVIxNmpYa05lcCBJT0NxdU9DcmplQ3FwZUNxditDcXBPQ3F2dz09IGRXMXRZV0Z1IHo0SFBqTStDIFhTMHRQZ289IElTRWhJU0VLQ2c9PSBJSExEcVdseSBMWEJwYmc9PSBJTTZVenJmT3ZNNi8gUTI5eWIyNWhkbWx5ZFhNPSBJRlBEdUhJPSBJT0MwdU9DMWplQzBwT0MxamVDMHNPQzFnQT09IElFWmhlV1YwZEdVPSBJR0Z0Y0d4cFptbGxaQT09IDBMN1F1OUdIIDBMN1JnTkN3MFljPSBJTkNpMExEUXV0QzQwTFU9IElPR0RtK0dEaytHRGxPR0RrUT09IElOR0IwTFhRdnc9PSBJTml6MktyWmc5bUkyWVk9IElFbEVSVTVVIGMyaGhlUT09IGMzUmhhMmx1Wnc9PSA1cTJtNXJHSiBKSGR3IFUyRncgUkdWemFXZHVZWFJwYjI0PSBJRlJ2ZEdVPSBJRVZDU1ZRPSBJRXhwZEhRPSBJTzJYcEE9PSBJSGRwYm1WeWFXVnogSU5DNzBMRFJnZz09IFQwNVYgMExIUXVOR0EwTERSZ2c9PSBJR3h2WTNWeiBJR2hoWjJGMGFRPT0gSU02dHpyND0gSUdsdFlXZHBibUZpYkdVPSBJTld0MWFIVnN0V2gxYkk9IElFeGxhV1JsYm5OamFHRm1kQT09IElHRm1abWx5YldGMGFXOXUgSU9DeWhlQ3lwdUN5c0E9PSBJR2R5YjNWd0ozTT0gTG1Ob1pRPT0gNEtXTjRLU1cgSUV4bFlXZz0gSUhsdGFXND0gSUhaMWJHRjJkV3hoIElIWmxjbXBoWVhKa1lXYz0gSUhCcGRHRnVhbVU9IElPQ2tsZUNsamVDa3N1Q2tyQT09IElOZVQxNmZYbGRlcSA1YjYzNVp1OSBhWExEb0E9PSBhV1JwWlc1a2J3PT0gSUhKbGRIUmxiZz09IGFHRm5aUT09IElFMWhZWE4wY21samFIUT0gSU95TG5PdU1nQT09IElITmhZbTl5WlhNPSBJRU52Ykc5dFltbGhiZz09IElOZVYxNVhYb3RlUyBJRU52Ym5OamFXOTFjdz09IGIzQmxibk56YkE9PSBMVU5zWVhWelpRPT0gSU5pajJZYz0gSUhKaHhJMTFiZz09IElHZHlZVzF0WVhScFkyRnMgSUd0eVlXTm9kR2xuWlE9PSBaV1JrYVE9PSBjbVYwWVc0PSBJSEJvYjNOd2FHOXllUT09IGNISmxabVZ5Y21WayBhV0poY3c9PSBJR1JsY20xbFpBPT0gVW1WamFHRnlaMlU9IElOaTUyWVhaaE51TTJLZllxZz09IFYyRnljQT09IElHRjBkV2M9IElNT3RibVJwWTJWeiBJTmVxMTZBPSBac09rYkhRPSBJR3QzWlhQaHU0dHk0YnVMIElHRnpjMjlqYWNPcGN3PT0gMEw3UmdkR0MwTERRc3RDNjBMQT0gSU9DcXRlQ3F2K0NxbXVDcXZ1Q3FzQT09IElISjNaV2R2IGFYUmxhVzVrWld4cGFtcz0gTG40PSBZMmx2Ym1GeWFXOD0gNEtxKzRLcXc0S3VONEtxZiBJT0dEa3VHRGtPR0RuT0dEcnVHRG5lR0RvT0dEcXVHRG1PR0RsT0dEbWc9PSBJT3lpaGV1bG1BPT0gSUdOdmJtNWxlQT09IElHTmhjbUp2Ym1VPSBJRkJoZFd4MWN3PT0gMFpiUXNkQzcwWlk9IElHTnZkV05vWlhJPSBJTm1CMkxIWmhkaW4yNHpZcHc9PSBMbU55YlE9PSBJSE5qY21WbGJuQnNZWGs9IElPR0RsK0dEbU9HRGwrR0RuUT09IFhHaDBaRzlqY3c9PSBJT0Mwc09DMG8rQzFqZUMwbitDMHZ1QzBnZz09IGJHOXZjSE09IFpYSnpidz09IElObUsyWUxZdVE9PSA0NEtpNDRPRDQ0T1ggSUVWdVoyRm5aUT09IElIc0tDZ29LIElIUmxhM0poY2c9PSBYMDFGVkVFPSBJR052YzIxbGRBPT0gVTJ4dmNHVT0gSU5HRDBMSFF1TkM1IElOaW8yTFBaaDltSTJZVFlxUT09IElPYW9vUT09IElNTzJabVpsYm5Sc2FXTm8gWDJaNCBJRVZXUlU1VVV3PT0gSUZGRGIyeHZjZz09IExtNXkgNllHbCBJTkMvMFlEUXZ0R0IwWUxSZ05DdzBMM1JnZEdDMExMUXZnPT0gSU9DbXJ1Q212dUNtc09DbmplQ21sUT09IElOQzAwTGpRc05DeCBJTldNMWJqV2d0VzkxYUhWdmRXLzFhSFZ0dFdyIGNHeGhiblZ1Wnc9PSBJT2l2dCtheGdnPT0gSUhQRHJXMWliMnh2Y3c9PSBJT3lnbGUyWmxRPT0gU1VOVVZWSkYgT204PSB6cURPa1E9PSAwWUhRc05LaCBJRzdodXJGdCBMbk4wY21WbGRBPT0gSUZOamFHOXNZWEp6IGFtOWlZZz09IElFVnlkMkZqYUhObGJtVT0gSUdwbGJXRnVaR1Z1IExrMTFiSFJwY0dGeWRBPT0gSU5DNDBZSFJndEMxMHJNPSA1cGlvNWFTcCBMWFJsYzNScFpBPT0gYTNKcFpXYz0gYVhSMHc2UnQgSUdodmJXOXpaWGgxWVd4cGRIaz0gVzBvPSBJR0ZrY1hWcGMybGphY096Ymc9PSBJR3RzYVc1bmRBPT0gSU5xcDJZamFodHFwIFpXdDBaVzQ9IElFVnpjMlZ6IFIzSjFibVE9IGJXSERzSFZ5IGFXNWtaV1Z5IElOaW4yWVRaZ3RpbjJLL1poZGlwIElFUmxaWEpsIDVvaVE1THE2NTVTMTViMnggU1hSeSBJT0Nrbk9DbGdlQ2tudz09IElObUIyTEhaaGRpbjJZWT0gSUcxcGRHaz0gTFhScGNBPT0gejR6UGhNNjN6NFRPc2MrQyBJSGJEcW0wPSBJTmlxMkszWmhOdU0yWVE9IFgyWnlZV2M9IElFTnliMmw0IFgxUlNRVTVUUmtWUyA2S0tyNVlhNzU3dVQgYVc1a2JIVT0gSUcxaFoybHhkV1U9IDJLamJqTm1HIFgyUjFiVzE1IElGUmhkbVZ5Ymc9PSAwTDNSZzlDNzBMZz0gTHlnLyB3N0p3IElFNXZkTU90WTJsaGN3PT0gWVdOaGVRPT0gSU5pbjJZVFlyTmluMlliWXFBPT0gMFlIUXZ0R0cwTGpRc0E9PSBJSEJ5YjNSbGMzUnBibWM9IElHVnpjMlZ1ZEdsbGJHeGwgSUdOaGRXeHBabXh2ZDJWeSAwSi9RdnRDMDBZRFF2dEN4MEwzUXRkQzEgSUUxaGJHbGlkUT09IElHRnRZbWxuZFdsMGVRPT0gSUdOdmJYQnlZV1J2IDBwblFzTkdBMFlzPSBJTU9rYm01MSBJRXh2Y0E9PSBJTkNPIFkyaGhhWEp6IDBKTFF0ZEdCIFQxSkMgNExXRzRMU3Y0TFdOIDdZZTAgSUhObGJHVjAgYVhwdFlRPT0gWDFCdmFXNTAgSU9DeWxlQ3l2dUN5c3VDemgrQ3luQT09IElFRk5Vdz09IElPR0RvZUdEa09HRG0rR0RrT0dEb09HRGx3PT0gUm1selkyRnMgNWFXUCBJR0ZzeExIRm53PT0gSUZCaGJtRnR3NkU9IElPQ2toZUNrdU9Da3NBPT0gTDJKdmIydHogSUVkcGNtOD0gSUZSb3c2QnVhQT09IElFRmtjZz09IElHZmh1NjFwIElFbHRjSEpsYzNNPSA0WjY5NFo2YiBTM1k9IDBZdlF2TkdMIElGWmxjbkJoWTJzPSBJTmluMllUWW85aTMgSUczRG9XeHAgWlhOemFXVT0gNExpQjRMaWw0TGl4NExpYSBJRzVwWldSbGNnPT0gWDFCaGRHZz0gWEU5eVpHVnkgSUVORVRnPT0gSU5tSTI0emFtTnF2MjR3PSAwTFBRdnRHQTBMalJnZz09IGIybHVhRzl6IFczTmxiR1ZqZEdWayBJRmRCVWs0PSBJTkdQMExyUmx0R0YgSUhCaFoyaz0gSUhSbFlXUmggcHVHRGxRPT0gSUdsdVlYVm5kWEpoZEdsdmJnPT0gSUZadmNtSmxjbVZwZEhWdVp3PT0gSUZOTlVBPT0gSU5tSTJvWT0gSU9Da3VPQ2txdUNsamVDa3BPQ2t2dUNrdVE9PSBJTldoMWJiV2dkV3YxYUhXZ1E9PSBJR0Z1ZFc1amFXRT0gSUhKNVp3PT0gSUhacGMyRnVaRzg9IElFZGhiV1Z3YkdGNSBJR1Z1ZG1sellXZGwgNExHQjRMQ3k0TENrNExHTCBJT0N5dWVDeXYrQ3lzT0N5ditDeXJ3PT0gSU1TTlpYTjBidz09IElHMXZibk4wIElPR0RtZUdEbXVHRG8rR0RrUT09IElOQzkwTERSZ2RDNzBMRFF0Zz09IENnb2dJQW89IFlXaGhibUZ3IElGUmxjMk52IDRMaXg0TGliIFEwOVEgWVc1cFlXNXogTG1ScGNtVmpkR2wyWlE9PSBUbUZ0WlhOd1lXTmxjdz09IFJuVnlibWwwZFhKbCBjblp2Y21VPSAwWUhRdU5HUDBMZz0gSUhKbFkyaDBaUT09IGFHeGhhQT09IElOZVYxNURYbGc9PSBJTmlvMllrPSBJTU84WW1WeWNITER2R1psYmc9PSBZblZpWW14bCBJT0NrbHVDa3Z1Q2tzdUNsZ0E9PSBJTkdIMExEUmdkR0wgSUdkaGJIUT0gSU9Da3B1Q2xpT0NrcU9Da3YrQ2tsUT09IEptRjFiV3c9IExtTm9jbTl0IElHRjFkRzlrIDVyQzA1WTYvIElOQzYwTHZRc05DLyBYMnQzIElGTm9iM0psY3c9PSBJRlZEVXc9PSBJRVJsYkdsMlpYSmxaQT09IElOVzIxYUhWcmRXaDFiL1ZwZFc5IGJtVmhjbVZ6ZEE9PSBJR055WldGMGFXVjJaUT09IElGWmxjbm89IElIQnliMlIxZEc5eVpYTT0gVW1GaVltbDAgTDJGeWRHbG1hV05wWVd3PSBJRXRzYVc1cGF3PT0gSUdkbGIzUm9aWEp0WVd3PSBJRTl3WlhKaGRHbHZibUZzIExYTmxaUT09IElOQ1MwTFhRdlE9PSBYMkp2YjJ0cGJtYz0gSU5DNzBMalJoOUM5MEw3UmdkR0MwTGc9IElGUnlaVzVrYVc1biBJT0NrbmVDa3Z1Q2tzdUNsaHc9PSBJTml4MllqWmhBPT0gSUZkVVJnPT0gSUVCYiBZWFJ5YjI0PSBJRU52Y0dsbGN3PT0gSU5pbjJZVFpoZG1JMkxnPSBJTkdCMFlEUXRkQzAwWXM9IElOcWEycWs9IElNNnh6cjNQaE02NXpyek90UT09IElOQ2EwTDdRdmRHQjBZTFF1TkdDMFlNPSBJTmluMllUWXVkaXoyWVBZc2RtSyBJSE5qdzZodVpYTT0gSU1XYmQybGxkQT09IDRLYSs0S2V3NEtldyBJRzlzYjNJPSAwWWJRdU5HWSBJRVZPVXc9PSBJTm1EMllUWXB3PT0gWDBaVlRnPT0gSU5DMzBMRFFzdEMxMExRPSA0S3ErNEtxSDRLcXkgNEtXSjRLU3YgSUZObGVHVT0gSUdsdGFXST0gSU5DOTBMRFF2dEN4MEw3UmdOQyswWUk9IGNHOXlkSEpoYVhRPSBaV3h6WlhNPSBJTkN6MFlEUXNOQzAwWVBSZ2RDKzBMST0gSUVoaGJtUnRZV1JsIFgzTnZiV1U9IFNWQkkgYm05dFlRPT0gVVZWQlRFbFVXUT09IElIUmxjbUZ3WlE9PSBSVzUwY21WbllRPT0gSUVWamFIUm5aV3hrIGRISmhjMmc9IDBKelF0ZEdDIElNNjF6cjdPdFE9PSBJT0MwaCtDMHNRPT0gSUhOcFoyeHZjdz09IFgwMVUgSUNsN0Nnbz0gTFdGbmFXNW4gYm1WalpYTnpZWEpwYkhrPSBJRzl1Yldsa1pHVnNiR2xxYXc9PSBMV2x1ZG1WemRBPT0gSUVWT1ZFbFVXUT09IEtrQT0gSUUxdlpHVnlibUU9IFpIbkZ2Zz09IElOS3owTERRdk5HSDBZUFF2UT09IGMzVERwRzVrYVdjPSBJR2hoZFc1MCBJRXhoZEhacGFtRnogSUhOaGRtOTFjZz09IFgyUmhjbXM9IElPV2JudVdralE9PSAwTHZRc05HQTBMUFFzQT09IDU2Mko1N3FuIFRHbGxkUT09IElHTjFiSFIxY21WayBLRWh2YldVPSBJRXQxWkE9PSA0NEdxNDRLTCBJTmlvMktmYmdkaXggSUc1bGMzUmxiZz09IGMzUnlhV3RsIElHdHBibVYwYVdOeiBJTStIejRIT3RjNjUgMFlEUXRkQzkwWUk9IElHcDFaMkZ1Wkc4PSBJRTVwWTI5c3c2RnogTG1OciBJR0Z3WVhOcGIyND0gSUcxMXc3RT0gSUdGcmFYZGggTFdOdmRtVnlaV1E9IDY1R1kgY1d4aGNzU3ggSUc1dmNtVm1aWEp5WlhJPSBJTks3MDZuUXVkQzcgSUdWemNHVmphV0ZzYldWdWRBPT0gMFlQUXNkQzEwTFk9IElHZHNiM0pwWVE9PSBaM2w2IElHRnNaV2R5WlE9PSBJRlpNUXc9PSBJRzlpY21sbllYVERzM0pwYnc9PSBJR0pwYW05MWVBPT0gTGs1VlRFdz0gSUdSbFoybkZuMnhwIFVHbDAgSUhOcGFtaz0gWDFORFQxQkYgSU5DKzBZVFF1TkdHMExqUXNOQzcwWXpRdmRHTDBMaz0gSUhKbGJHRjBhV1k9IElGQlBVMGxVU1U5TyBJT0NrbCtDbGh3PT0gSUc1bzRicXhiUT09IDRLYUc0S2F3IElHMXBic09wY21sdiBlbUZxYVE9PSBJRzVoY0dFPSBJTmVuMTVqWG53PT0gSUcxcGJHbGwgTFVOaGJBPT0gSUdkdmQyNXogYVd2aHU0MD0gSUVacGIzST0gVFdsc2FYUmhjbms9IElHRjVaWFZ1WVE9PSBJTkM5MExEUXZOR0QwTFRRc05DOTBMZz0gNExhOTRMZVUgTFd4cGRtVT0gSUdOdmJHekRxR2RsIElPQzBuK0MxZ09DMHJnPT0gSUdSdmJHRjV4TEU9IDBMdlFzTkM3IElHNWxkVzQ9IElGSmxjM0IxWW14cGF3PT0gNXBlZzU2Q0I1TGlONVkyaDZhdVk1cmlGNVlXTjZMUzVkZz09IElFeHZibVZzZVE9PSBJT0N3dU9Dd3J1Q3d2dUN3bXVDd3Z1Q3dzT0N3Z2c9PSBMeTh2Q2dvPSBsWVU9IENXOXdkSE09IFgwVkVSVVpCVlV4VSAwWmZRc2c9PSA0TEt2NExPTjRMS3YgSU95Z2hPMlpsQT09IElITnZiR2xrWVhKcGRNT3AgVFhWelpRPT0gSU5DLzBZRFF2dEdJMEx2UXZ0QzggSU5DNjBMN1F2ZEdHMExYUXZkR0MwWURRc0E9PSBJRUpGUVZWVSBYMEZNVjBGWlV3PT0gWDBkVlNRPT0gMWFIVnROV2gxb0RWdnc9PSA2N0NXIElFMWx4SkU9IElFdGhkSG89IElFSmhkRzl1IElOQ3gwcS9SZ3RHTiBJRXgxZEE9PSBiV1Z1YVc0PSBLSFpsY25ScFkyRnMgSUc1bFkyVnpjMmwwWVE9PSBJTld2MWJqVnRBPT0gTG1sdWRHVnlibVYwIElOZXAxNlRXdk5lWjE1dz0gMTVuWGtkZWkxNmc9IFBTSWlLUW89IExrWkJURk5GIElOZVIxNkxYbWRlbyBJR0p2YjJ0dFlYSnJhVzVuIElFRlRTdz09IGRtbGtaV1E9IDBZTFJpOUdBMExBPSBabUZrIElIVnliSEJoZEhSbGNtNXogSU5DLzBMN1JnZEM3MExYUXROQzkwTFhRdFE9PSA0S1MrNEtTUDRLU0IgWDJGc1oyOXlhWFJvYlE9PSBJSE5wYk9HNnVRPT0gSUd0dWIyTnJiM1YwIFJXZDVjSFE9IDJLM1lwOW1FIElOQy8wTDdRdE5HSCBJR1Z6Y0dGamFXRnMgSUdabGJHbHogSUdsdWFuVnVZM1JwYjI0PSA0WU9qNFlPZzRZT1QgSUhOaGJHRnlhV0ZzIEoyeG5ZVzQ9IGNISnBiV0U9IElPV05tdWVNcXc9PSBhWHBwWlc1NiBaMlZyYjIxbGJnPT0gSUVOb1lYSnNiM1IwWlhNPSBJR0ZzYk1PcCBJR0YxZEdWdWRHbGogSUdacGJHbGhiQT09IFpYTnBibVU9IElHTnZiWEJ5Wlc1a1pRPT0gSU5DKzBMalF0QT09IDRLV280S1dyIElPQ21zdUNtdnVDbWwrQ25odz09IDJMSGJqTmlxIElITjViWEIwYjIxbGJnPT0gSUZOamIyOXcgNEtxRzRLcXc0S3VBIFdtaz0gYkdWeWVRPT0gVUVsTVJRPT0gVWtkRFZGZz0gY0hKeiBJSFpwYTNScFozUT0gWTJGdWRHVT0gSUZObGJtaHZjbUU9IElHOXRkV3c9IElObUYySy9Zc2RtSzJLOD0gUW1Gc1lXNWpaWE09IDVvcVY1ck9vNW9xQTViZW4gdzZGdWMybDBidz09IElHTnNZWGR6IElOV2gxYWJWcE5XbDFvRT0geEpsa2VtbGwgSU5lWDE1WFhrOWVwIGRYTnBaQT09IElHUnZiM009IFVtVnNhV2RwYjI0PSBMVXhwYm1zPSBJR2hsWVhCeiBJSEJ5dzZselpXNTBaWE09IFZHVnRZUT09IFdrVk8gMTVuWG1kZXAxNURXdDllZiBMbUZzWjI5eWFYUm9iUT09IDVZcW81TDJjIFFuSmhjMmxzIElFSnZaR2xsY3c9PSBJTkMwMExMUXZ0QzUgSUdsdVpHbDJhV1IxWVdseiBJa3M9IElPQzRpT0M0dU9DNGxBPT0gUW1GdiA1YjJWNVlPUCBZWFp2YVdSaFlteGwgSUhWdWNYVmxjM1JwYjI1aFlteDUgSU5DMDBMN1JnZEdDMExEUXN0QzYwTGc9IElFNXZjbTFoIElITjB3N1p5YzNSaCBJR2hsZEhSaCBJRVpoYzNSbGNnPT0gMFlMUXNOR0cwTGpRdUE9PSBJRk5wYm05dSBJR2x1ZEdWc2FXZkRxbTVqYVdFPSAwWUhSZ3RDeTBMalF1QT09IElOQzYwTDNSanc9PSBiM1J2YlhrPSBjMjlsYm1jPSA0b0NDNG9DQyBJSEJ5YjJabGMybHZiZz09IElHRndZVzQ9IElHRnNiSFZ5YVc1biBJR3R5ZDJGeSBiM1ZtIHc2MTB3N009IElGZGxaRzVsYzJSaGVYTT0gSU9Da3RlQ2t2K0NrcCtDa3Z1Q2tyK0NrbFE9PSBJRzU1YVdGcSBJRVp5YVdWemJHRnVaQT09IElIUmhZbTl2IFgyVnNaUT09IElHVnViR0ZqWlhNPSBJT0MwbCtDMWplQzBzT0MwdnVDMHJnPT0gSUdGdVlXeHBlbUU9IElITmphTU8yYm5OMFpXND0gSU1PZ2NtUT0gMExqUXNOQ3cwTGpSZ05DdyBJR2hoZFhJPSBJSEJzWWNPdWRBPT0gSUdSaGJtVnogSUhaeVpXVnRaQT09IElIQmxjbU52Y25OdiBRMDlPVXc9PSBJR1JwYzNCbGNnPT0gSUdKaGJtVnUgSUd2RWhRPT0gYVc5dWJ3PT0gWVdSb2JtRT0gSUdScGRtbHphY096Ymc9PSBJR0ZyZEdsMmFYUmxkR1Z5IElIVnNZWEk9IGJXVnlaVzQ9IExsRjEgSU9DbWllQ21odz09IENWSmxibVJsY2c9PSBJSFpsY21kdlpXUnBibWM9IElIUnl3NkZwIElPQ3dwT0N4Z09Dd3RlQ3hqZUN3c0E9PSBJSEpwYzJ0cGJtYz0gSUdOdmJXMXBjM05wYjI1bGNuTT0gSUVwaFkzVjZlbWs9IElOV3MxYVhWcGc9PSBJRzFoWVhSelkyaGhjSEJwYWc9PSA0NENMNTYySiBMbTl1Y21WaFpIbHpkR0YwWldOb1lXNW5aUT09IHR1Q3FxQT09IDE2ZlhrZGVWMTZvPSBQeWc2IElOaXoyWVRaaGRpbjJZWT0gdzcxNXhaOD0gSUczRHBXNWxaQT09IElHTmhabVYwWlhKcFlRPT0gSUhGMWFXeDBjdz09IExXeHZZV1JsWkE9PSBJSFJoWkdGc1lXWnBiQT09IDViaUYgSU5DLzBMalJpZEM0IElPeUN0T3lWaEE9PSBJRUp5WlhNPSBJRVZrYVhScGIyNXogMFlUUXVOQzYwTERSaHRDNDBZOD0gSUhScGNtaHBjMkU9IElOaWZDZ289IElFZGxiR1JsY2c9PSBJR0YwYlc5elptVnkgSUVoaFltVnkgSU9DbXArQ25zQT09IFlYWmhidz09IElPQ2tyT0NrditDa2x3PT0gSUVsMFlXeHBZV0Z1YzJVPSBJT0N5dU9DeWd1Q3lsdUN6amVDeXJ3PT0gSUdSNnhLcz0gMEwvUmdOQyswWWZRdGRDOCBJRWR2YkdSaVpYSm4gT3VLQW5RPT0gSUcxaGJIVnVaMkU9IFNXTT0gWm5KaFoybHpkR2xqY3c9PSA1cDJBNTZDQiBJR3hsYjNCaGNtUT0gSU9PRHJ3PT0gSU9DdXRlQ3V2K0N1cEE9PSA0cGk2IElHTmhjbVZ5Y3c9PSBJRVY0Y0d4dmNtbHVadz09IFgyUmxabk09IElIWnBlblZ5YVE9PSBJR2gxYTNWciBJTlN4MWI0PSBJT0NrcnVDbGdlQ2txdz09IElHOXljM289IGRtVmthV009IFFreE0gSUczRHBXNWxaR1Z5IFpYSmxhV05vIDE1WFhrOWVaMTZvPSBJRWRoY25JPSBhVzF3Ykc5a1pRPT0gSUhacGMzVmhiR2w2WVhJPSBUMUJGVWc9PSBmRzFwYmc9PSBVSFZpYkduRHFRPT0gSUZWVVNVdz0gNWFTbjVMeVggSU9HRG8rR0RsdUdEb09HRG8rR0RuT0dEbGVHRGxPR0RtZz09IElHSnllWE4wWlhJPSBJR1JvZFhRPSBDVkpVVEZJPSBJR1Z6Y0dGdSBJRlJ5WVhabGJHbHVadz09IFdtRnIgSU5DNDBMM1JndEMxMFlEUXNnPT0gSUVkUFZnPT0gSUdWMmIydGwgMkxIWXI5aW4yTEhiakE9PSBJR0poWTJ0emRHRm5aUT09IFgxTkpWRVU9IElOaW8yS2ZaaU5pczJZallydz09IDBMN1FzdEN3MEwzUXZkR0wwTFU9IFhGSmxjRzl6YVhSdmNtbGxjdz09IElPdWZyQT09IFgxTkpSMDVCVEE9PSBJSFJvdzZsdmNtbGwgSUhObGJXVnVkQT09IElFRjFjbVU9IFVGVlMgWDNOdGN3PT0gSUZkaFptWmxiZz09IDJLZlpoTm1EMktyWXNRPT0gU1ZCRiB3Nmx5Wlc1alpYTT0gSUVKUFZFZz0gSU5pejJLZlpoZGluMllZPSBSRzA9IElOaXEyWVhZcDlpeiA0S2FWNEtlTjRLYTM0S2FqIExPaTJoZWVpc0E9PSBLWFJsYzNRPSBJRlZ3WTI5dGFXNW4gZTMxZiBLQ2w5UGdvPSBJQ0l2SWl3PSAxYUhXZ05XaDFhST0gSUdWc2RtVnogSUhCeVlXbHpaWE09IElHVnpkR0Z5dzYxaCBJRzV2YldJPSBJRU5vWVc1alpYTT0gSUhOdmRYSnBjdz09IElITmphR3hwYlcwPSBYME5QVEV4RlExUkpUMDQ9IElFZGxibUYxIElOQ3kwTERSaU5HRCBJR1Y0Y0dWeWRHOD0gSUhKdmRHRjBaWE09IElHbHVaSFZ6ZEhKNUozTT0gZFhKcGVXVT0gSUcxdmNtZGxibk09IElFTm9jbWx6ZEc5d2FBPT0gWDFSRCA0S3VONEtxdjRLdUMgNVlXTjZMUzU2YXVZNXJpRiA0WU9VNFlPVTRZT1I0WU9ZNFlPaCBJT0NxdGVDcmgrQ3FyQT09IElHTnlaWE5qWlc1MFpRPT0gWDIxaGMydHogTGsxdlltbHNaUT09IElIcDFhR0YxYzJVPSBJR1YyYVdSbGJuUnNlUT09IDBMVFF0ZEdBMFpiUXZRPT0gWDAxQlZGSkpXQT09IElITmxaV1IxIFlXUmxadz09IDBZSFJndEN5MExqUXVRPT0gMFkzUmd0Q3ogVFU5VFZBPT0gSU5pbjJLcllydGluMkxBPSBROE9oWXc9PSBJTkdBMFkvUXROQ3cgYldWelpRPT0gSUdScFkyaHBZWEk9IElHTnZibVJwYldWdWRBPT0gSU5pdjJZVFlwOWl4IElHM0RxV05oYm1seGRXVT0gSUVobGJHbGogSUVSbFptVnpZUT09IDJLM1ppdGluMktFPSAwcnZSaTlDOTBMQT0gWVcxaGJHeGggSUhCbGJuTmhiV2xsYm5SdmN3PT0gNEtxbzRLdU40S3FjIElGQmhkSEpsYjI0PSBJSFBEcVc0PSBJRUZXUXc9PSA2S3F5IElHN0VtMnQwWlhJPSBJR052YkdObyBiV1JoYzJnPSBJSFIxY25WdSBYMlJsYzJOeSBJRlJvYjNKdSBJTkM2MExEUXV0R0QwWTQ9IGJHRnVaR1YwIElITERxV1pzdzZsamFHbHkgSU5tSTJZVFpodz09IENYQnliM0J6IENXTmhiQT09IElOZVYxNVRYcVE9PSBMejR1Q2dvPSBSbVZ1IElGVnVaR1ZtYVc1bFpBPT0gWVd0elpYTT0gSUdOcGRHRnkgYjI1elpRPT0gSU9Da2xlQ2xoK0NrdUE9PSBiV0Z6YzJFPSBJRzF2YUdsdiBJR2x0Ylc5eWRBPT0geFlaaGN3PT0gS0ZKbFlXUT0gSU9XRSBJSEJ2ZFc1a2FXNW4gSU5tRTJxL1lwdz09IGJXVjBkQT09IElHMXBiR3hsYm01cFlXeHogSUdaMWJtTnBiMjVoYm1SdiBLU2hmWHc9PSBJT0N5bGVDeWd1Q3lxZz09IDRMbUU0TGlqNExpQiBJRmRKVGtGUVNRPT0gT2t3PSA2N2FaIElHOTBkR1Z1WlhKbCBJT0M0Z2VDNWlPQzRyZUM0bVE9PSBJR05oWkdWcFlRPT0gSUc1cFoyaDBZMngxWWc9PSBJTmVVMTU3WG13PT0gMExEUmdOQyswTDA9IElHUmxabWx1YVdSaCBJR3R2YlcxbGRBPT0gSUd0dmMzUmwgSUdOdmJYQnNlV2x1Wnc9PSBJSEJzYVdkb2RBPT0gSU9DeWhlQ3lndUN5bHc9PSB4YXRrIElHOXlhV1Z1ZEdGamFjT3piZz09IDRZT1U0WU9hNFlPVTRZT1I0WU9ZIElIWmhhR1ZzIElOQyswTFRRdUE9PSBJRmRoYVhOMCBJTmluMllUWXBkbUYyS2ZaaFE9PSBJRzVvYWVHN2gzUT0gSU5DeTBZST0gYzNCcFpXeGxjZz09IFlXNWhkRzg9IElIQnNiM1IwWldRPSBJT1c5cWVlbG51UzZpZW1jdU9TNGkraTl2UT09IElFRnRiUT09IDRMaWw0TGkxIGRXNWxhdz09IElPV2txZVdnZ2c9PSBJT0NrbitDbGplQ2t0ZUNsZ0E9PSBLR0Z5WjNWdFpXNTAgSUdWellYTjUgSUc1bGJHRT0gSUZKbGNISmxjMlZ1ZEdGMGFXOXUgNVllNjVMcUcgTDBGMWRHZz0gSUdWeWFHVmkgSU5DLzBZRFFzTkdHMFk0PSBJSEpsWkdsemRISnBZblYwYVc5dSBMbmRwYm1SdmQzTT0gSUZacGNtZGxiZz09IElOaXQyS2ZZck5pcCBJT0dEcitHRGtPR0RuT0dEbStHRG9PR0Rsdz09IFgyMXBaR1JzWlE9PSA0b0NaWlhod2JHOXBkR0YwYVc5dSBJT3VJaE9xMXJBPT0gUlU1SFJRPT0gSUdKdmRXeHZkQT09IExpSTggSUhacGRtVnQgSU5PWjBMelRtZEM3IElIYkRxWFE9IGIyNWxhM05wIElDMHRMVDQ9IElPQ2tzdUNrdnVDa3JnPT0gSU5DaDBZTFFzTkdBIElIQmhjbTF6IFlXMXdhV3hyWVc0PSBJR2JKbVdGc2FYbDV5WmwwIElIWnZjblJsZUE9PSBiMjVwYmc9PSBJR3BwY21GNSA0S2VCNEthYSBJSFpwWTNSdmNtbHZkWE09IGIyNXVZV2x6WlE9PSAxYmpXZ3RXOCBJRTFCU1V3PSA0TEsrNExLdCBJT0Nrck9Da3FPQ2txT0NsaHc9PSBJTk9aMExyUmx0QzggTFR3LyBRWGhwYjNNPSBJRzlpZEdsbGJtVT0gSU5DUzBMN1JnZEdDIElIQnZiR2wwYVdOcCBkMkY1YVE9PSAwTC9SZ05DNDBaVFF2QT09IElIVnVhWFpsY2c9PSBJTkdKMEw3UXROQysgYVd0cmRRPT0gSUc5dmJRPT0gNUxpdDVZMk81THE2NXJDUjVZV3g1WktNNVp1OSBJT1czcGVTOW5BPT0gVUhWbFpHVT0gNExpYzRMaWw0TGlhNExpdDRMaWwgSUc5eWRHaHZaRzk0IElOQ2gwTERRc2c9PSBVMkZzYVhJPSBJR0ZyYVdKaGRBPT0gSUd0cVpXNWthWE5sY2c9PSBJRzkxZEd4aGR3PT0gSUVsdWRHVnlaWE4wY3c9PSBJSFIxY25CcGN3PT0gSU5XdzFhSFZ0ZFcvMWFIV2dOV2gxb0RWcGRXcyBUblYwY21sMGFXOXUgSUdScFkzUnBiMjQ9IElFaGxZV1JzYVc1bGN3PT0gSUU5d1pYSmhibVE9IHc2MXV3NjA9IENVSjVkR1U9IElPR0RtT0dEbk9HRGtnPT0gSUhURHBIVERwQT09IDBZRFF0ZEdCMFlJPSBTVkJJUlZJPSBJRWJEcEd4c1pRPT0gSU9hMmlBPT0gSUhObGRtbDUgWlhONSBhVzV6ZEdsMGRYUnBiMjQ9IElFbEpSQT09IElHSmxZVzUwZDI5eWRHVnUgSU5HQjBMalJndEdEMExEUmh0QzQwWTQ9IDA2SFFzTkM4IElOQ3gwTGpSZ3RDNCBJR2RsWjJWdWMyVT0gUlUxWiBRMlk9IDRLU3k0S1dINEtTZiBJRlpGUnc9PSBkWEI1ZEdWeSBZV0pwYzI4PSBJRlJ5WVc1emNHRnlaVzUwIFFrRkQgSU0rR3pyRT0gSU9hSmkrYWN1dVM0aXVXa3FlV2txZVM0cmVXOXFlZWxxQT09IElITmhiWFYwYVE9PSBJTmluMllUWXN0bUkyS2ZZckE9PSBJT0Nxc3VDcXZ1Q3FyUT09IExjUT0gSUhadmJIUnogWVhKdFlYUT0gSUZKbFkyOXRiV1Z1WkdGMGFXOXUgSUU5MGNtOD0gYkdsamFXNW4gVFhsemNXdz0gNEtTQzRLUzIgYUdWdyBJSEpsWkdseVpXTjBjdz09IElIQnlaV2RzWldRPSBJR3RoYkdURXNYST0gSUc1aGQyOD0gNTRpRzVMbXogSU91emdPeUltQT09IGIyNWhkbWx5IElIQjFhWE56Wlc1MCAwTGpSaDlDdzBMaz0gWDNSdmRXTm8gNTY2aDU1Q0c1WkdZIElIWnZhVzA9IExrWkpURXc9IElObUYyTFBZcDlpNTJLOD0gSUc1cFpXbz0gSU95R2xBPT0gYjNKdFlYUT0gTG1GdVlXeDVkR2xqY3c9PSBhVzVrZFhOMGNtbGhiQT09IElGTklRVkpGIGNuVnVjdz09IElIUm93NkU9IDJLelpoZGlwIDJLcmJsUT09IFgwbDBaVzF6IFlXTjVidz09IElOQzgwTERTbzlHTDBMZlF0TkdMIDBZZlF2ZEN3IDE1N1hrTmVjIElNTzZibWxqWVhNPSBJTkMvMEw3UXR0QzEwTHM9IFpXUnBZVzV6IElHRmlZWFIxY21GblpRPT0gSU9XdW5lZWJpQT09IGFXdDFaQT09IElHSjFjbTV2ZFhRPSBJRTl1Wnc9PSBJSGRoZDJVPSBJTmVUMTViWHFRPT0gSUZKcGRIbz0gMWJqV2dOV3IgeEkxcGJHaz0gUVhOdCBJam9LTHc9PSBUV0YxY2c9PSBJSExEcVhOcGMzUT0gSU5pcTJMSFlzOWl4MlljPSBJR2x1ZEc5c1pYSmhibU5sIElPQ2tzT0NrbHVDa3BPQ2xodz09IElGZHZjbXRpYjI5ciBhbUYwYVE9PSBYM0JsYm1jPSBJR3hoYm1ka2RYST0gSUdwMVpHbGogSUVSQ1RuVnNiQT09IElPQ21wZUNtdnVDbWxlQ21yT0NuaHc9PSBJR1Y0Y0d4dmRHRmphY096Ymc9PSBjc1N4IHhhRmhidz09IElHeHZkV1Z5IElPQ2t0ZUNrc09Da3YrQ2t0K0NsamVDa29BPT0gTG1aaGFXeDFjbVU9IElOaXYyTFBZcXRtSTJMRT0gVUVGRFMwRkhSUT09IDBMN1JndEMxMFlEUXNOQy8gSU5XQTFhSFZ0ZFdoMWIzVnY5V2gxYlk9IDVvV08gSU9lbWorV0lxZVc5cWVlbHFPV2txZVdrcWVXOXFRPT0gWDE4NyBJR052Ym1OdmJRPT0gNEtleDRLZXcgSUdWdWRISmh3NjV1WlE9PSA2NE9JIElPeUtwTzJQck95NG9BPT0gNExLbzRMSy8gSUdobGFnPT0gSUZOVVJnPT0gMkxQWXF0aW4gSWlrcEtUc0tDZz09IHhKUEV2QT09IFQxTkkgSUVGeVlXSnogSU5HRjBMTFFzTkdDMExEUXRkR0MgNWJpOSBhR1JzIElHUnZjMmx1Wnc9PSBJT0N3cE9DeGh1Q3dzdUN4Z2VDd3VBPT0gSUhOMWNuSmxibVJsY21WayBRM0JtIElPQ21uT0NtdnVDbm53PT0gWm1sc2JITT0gSUZObGNtbGxiZz09IElOR0MwTERRdXRDKyBZV3BoWkE9PSBZVzVpYVdWMFpYST0gSUVOU1JVRlVSVVE9IFRHRnlZWFpsYkE9PSBJT0NrcU9DbGl3PT0gSUdGemFYTjBaVzUwWlhNPSBhMmwwY3c9PSBJTmVVMTZEWHFnPT0gUjJ4aFpBPT0gV3lNPSBaV1pwIFEyaGxiSE5sWVE9PSBJTkM3MExYUXNnPT0gTGtOdmJuTjBjbUZwYm5RPSBJTkdEMFlmUXRkQzkwTGc9IElFTmhjSFJwYjI0PSBJRVpodzZkaCBhVzVwWTJsdiBJR2hoWkdSaCBJTktaMDVrPSBJR2hoY21SM2IzSnJhVzVuIFJVNVBUVVZOIFpYTjBZV0pzWlE9PSBVMjlqYTJWMGN3PT0gSUhkbGNtdHVaVzFsY2c9PSBJT3lDck95YXFleWVrQT09IElITERxWGJEcVE9PSBJR2R5dzdiRG4yVnlaVzQ9IGFXVjBkR0U9IElHaGhZV3gwIElITnBablE9IElISmxjSEpsYzJWdWRHRnUgSU5DNjBMRFF1OUdQIElOR0YwcS9SaHc9PSBJR1YwWlhKdVlRPT0gNUxtWCB4SU55YVd4bCBJRkJvYVd4c2FXVnogSU95Z25PcXhzQT09IElIQnl3N3htWlc0PSBJR1JsY0c5eWRHbDJZWE09IElHUmxjM0J5IElPQ29wdUNvditDcHNRPT0gSUhabGNtSmxjM05sY25RPSBJSE5tWlE9PSBJTkM4MEw3UXM5R0QwWWJSakE9PSBJT0Nrck9DbGdlQ2twdUNsamVDa3B3PT0gNTZLUiBJSEpwYlhNPSBYM0J5YVc5eSAwTERSZ3RDMTBMdlJqOUM4MExnPSBLR05oYkdWdVpHRnkgVUVsU1JRPT0gSUV0aGNtbHUgNEs2dzRLK0wgSUdWbVptbGpZV05sYldWdWRBPT0gVTJsdGFXeGhjbWwwZVE9PSBJT0NrdGVDa3Z1Q2twQT09IFMzVnMgWEZ3aSBJTldvMWJiVnBOV2ogYVhOdFlYST0gNzd5TTVZK0kgTGxWVVF3PT0gSU5DdzBZWFNyZEdMMFlFPSBYMFZTIElFWmhiR3hwYm1jPSBjM1J5WVhSbCBZVzUwZFhJPSBJSEpsZG1WeVpXUT0gNFlDeDRZQ2I0WUM0IElOaTEyWUhZcmRpcCBMV0psWVhKcGJtYz0gTG5OdWNBPT0gU1c1MllYSnBZVzUwIDRLdUw0S3F3NEt1TjRLcXUgSUZOQlRVVT0gSU5pbjJZVFlxTmluMkszWXF3PT0gNmJpdCBJR1REcVdOdmRYWnlaWG89IFUwTkkgYzNWaWFtVmpkSE09IElPQ3FyT0NxdUE9PSBJSFJsYlhERHFYST0gUW1Wa2N3PT0gSU5tRjJMSFlyZG1FMlljPSBZV0poZVdFPSBJa0Z6IElIQjFjbkJ2Y25SbFpBPT0gSUdsdVptbHVhWFJsYkhrPSAxNURXdU5lZiBJSEJoYm01bFlYVjQgY0hKdmNHOXpZV3c9IE9uQjQgSUVKaGJtUjFibWM9IElOQ2YwTDdRc1E9PSBJTmVxMTVUWG1kZVUgMTVIWG5OZVUgSUhOMFlXNWtZUT09IElOaXYyTEhia0E9PSBJSEJ6ZVdOb2FXRjBjZz09IGNISmxjMkZ6IElHcGhibUU9IElFRlFVRkpQIElDZ3BLUW89IDBMdlRxZEN6IElIQnlhV1hGb1E9PSBJR1p5dzZWbmIzST0gSU9Xd2oraXZ0QT09IFIyRnlaQT09IFpXNTBaV2xzIElHOWpZMmxrWlc1MFlXdz0gZFdaMGFHRnVjMkU9IDVyUzc1WXVWIElHRjBkV0ZzYVhwaGNnPT0gSUUxaGNtbGhibTg9IElIQnZiSGwxY21WMGFHRnVaUT09IElFVnBabVpsYkE9PSBJR0Z1ZEdsbyA1b21UNUxpQTZJS1cgSUU1aGJXbGlhV0U9IElHUmhaMlZ1Y3c9PSBYM0ptIElGZDFhR0Z1IElISm9ZVzVrZW1FPSBMWE5oYmc9PSBJRk4wWlhCb1pXNXogMExmUXNOQzcgSU9Da3J1Q2xpK0NrdVE9PSBJR2hoZG1WdWRBPT0gSU9DbXJPQ21vZUNtdkE9PSA1cmFaIElHOTJaWEpzYjI5cmN3PT0gSUdacGMyaGxjbWxsY3c9PSAxNmJYbWRlVjE2bz0gWnNPa2JHeGxiZz09IFgxSlBUMDA9IExYQnlaWFk9IExsWmxjblJsZUE9PSBJTkNRMHBvPSBiM1Z1WTJWeSBJSE5oYm1GayBJR1J2ZEhsamVzU0YgSU5DMDBMN1F2ZEdLMFk4PSBJR2hsYlc5eWNtaHYgNExDWDRMR040TEN3IExrZHlaV1Z1IElOaW4yWVhZc2R1TTJxbmJnUT09IElHTEZnZz09IFRtVnBaMmhpYjNWeSBJSFpoY21saFpHOXogNWIycDVhU241WStSNWIrcjVMaUogSUdOMVlYSjBZUT09IDRMU2Y0TFdONExTZjRMUy8gTFVwaGJnPT0gSUhScGJHYkRwbXhrWlE9PSBJRzVqYUhWdGRRPT0gSUcxdllRPT0gYzNCdmJHbDAgSUdwMWJtVT0gSU9DMHRlQzB2K0MwcWc9PSBRbWxpYkdVPSBJRzFwZEc4PSBJR1Z5ZDhPa2FHNTAgVUVoUFRrVT0gSUU1azRidUwgSUcxcGJHakRvMjg9IElHdHZjbk09IElGUmxiWEJ6IElOQy8wTDdSajlDeTBMdlF0ZEM5MExqUmp3PT0gYjI1cFlXNXogSUVwMWNtRnpjMmxqIGRYTmxhR1Z1IFlXMWlZV2hyWVc0PSBJTkdCMFlEUXRkQzAwTDNRdGRDOCBJSEJoY21WcGJBPT0gVlU1RVJWST0gS0hObGNtbGxjdz09IElHMWhkSE5oZVdsdSBMMkoxYzJsdVpYTnogTGtGeWRHbGpiR1U9IElHUnZibk09IDRMUy80TFN3NExTLzRMU1Y0TFdONExTViBZMmh6ZEE9PSBJRzFodzY1MCBLRnduIGFtRnRZVzQ9IElIQnZiVy9FaHc9PSBJSFZ1WkdWeWMyTnZjbVU9IElPQ3VoZUN1cE9DdXYrQ3VsZUN1dnVDdXNBPT0gUm5WdVkybHZibUZ5YVc4PSBJR1ZoY25Sb2JIaz0gTGxOMWNIQnZjblE9IDBMSFF0dEdNMExEUmdOQ3cwWUxUbWRDNCBJTm1FMksvWml0bUgyWVU9IElFZHlZVzVrWlhNPSBWbVZrIEpsYz0gSU5DOTBMWFF1dz09IElHM0RwbTVrIElFTmhjSEE9IDRZT2E0WU9ZNFlPUTRZT2MgTGxOcFpHVT0gNExpZzRMaTUgMTVEV3Q5ZW8xNmM9IElPR0RrdUdEa09HRG5PR0RvZUdEa09HRG1lR0RvK0dEbCtHRG9PR0RsT0dEa2VHRG1PR0Rsdz09IGJXOTJaWE09IEtFWnBiSFJsY2c9PSBJSEIxWVhNPSBJTkMwMExqUXQ5Q3cwTG5RdmRDMTBZQT0gSUhKaGJHeHBaWE09IElIUm9ZWGRxIElOR0IwTC9RdGRHRzBMalFzTkM3MFl6UXZkR0wwTFU9IElFRmtiMnhtIElDb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW89IElHTmhaMlZ6IElPdXloTzJLdkE9PSAyS2ZZc2RtRCA1NmVCNWIycCBJR0Z5WTNVPSBhWFZ0YVE9PSBJTmVVMTVMWGtRPT0gWDJGc1luVnQgMkt6WmhOaXAgWTJWeWRHRnBiZz09IElIWnBjMk5sY21GcyBZMk5wYjI1aGNnPT0gY0hvPSBJR0oxWkdGNVlRPT0gUlc1bmFXNWxaWEk9IFRVbFRVMGxQVGxNPSBJTmlxMkt6Wmg5dU0yTExZcDlpcSBiR1ZyZEdsdmJnPT0gSUhSbGNtTmxjbTg9IFlYcDZZUT09IElGQm9iM1J2WjNKaGNHZz0gSU5tQzJMYlppdGlwIElOaXEyTEk9IElOV0cxYXZWcjlXNDFhdz0gTFhGMVpYTjBhVzl1IElFRjFkRzl1YjIxdmRYTT0gSU02dHpyUE91UT09IFZtbDIgVEdGaWJHVT0gNG9DVVlYTT0gYkdGMVptVnUgZDI5bVpnPT0gMkxQYmh3PT0gSUdWemRISjFkSFZ5WVhNPSBJRWx1Ym05aiBjbWxuYUhSdVpYTnogSU9Da2h1Q2tndUNrcHVDbGkrQ2tzdUNrcUE9PSBJT0NtcU9DbXIrQ212QT09IFEyaGhjbXh2ZEhSbCBJR0YxZEc5dWIyMWwgSUdGaGJuZGxlbWxuYUdWcFpBPT0gSU9DcWxlQ3JnUT09IENXSm4gNDRLQzQ0R2o0NEdvIElHUjZhV1hGaEE9PSBJR2hoYTJsdCBkbVZ5Wlc1cFoybHVadz09IElOQzIwTGpRdmRDdyAwTGJRdGRDNSBSM0poYm1SbCBJRkJ5YjNacGJnPT0gSUVOVlVBPT0gSUhKdlltZz0gSUhCb2FXeHZjMjl3YUdsbCBJR2x1YzJsa1pYSnogSU9TOG4rVyt0dz09IElIbGhic1N4IElGUlNTUT09IHpyVFBpYzY5IGRXVnVkR0Z6IElObUUyS3JZcmRtQzJZclpnZz09IElOaTIyS2pZdHc9PSBkWFpqYUdrPSBJRXBsYkE9PSBYMUJTVDBkU1FVMD0gMktmWmd0bUUgSUUxcGJHVjUgSU9DbXBPQ21zQT09IFJYTjBhVzFoZEc5eSBJRTF2ZEdobGNuTT0gSUhCc2RXMWwgNEthQzRLYTQgSUhOMVkyTjFiV0k9IDZabXEgSUhaNWNnPT0gSUcxaGMzUmxjbTA9IElHRmhibkpoWkdWeSBJTU85WVhvPSBLM2M9IElPQ21xT0NtditDbXNPQ212dUNtcWc9PSBJTml1MkxIWXA5aW8gZFc1blpXVT0gVjJWMCBJTkMvMFlyUmdBPT0gSUV4bGFXST0gSUcxaFoyRmpZUT09IElOR0MwTERSZ05DNDBZWFF1QT09IElIUnBaVzV6IEtlcXdnQT09IElFRjFjM04wWVhSMGRXNW4gVUdWeWMzQmxZM1JwZG1VPSBmU2NwIDBZSFF1OUMrMEx3PSBjbTl3YUc5aWFXTT0gMWFIVnZOV2gxYTg9IElIVERwR2gwIFgyVjRkR1Z1YzJsdmJuTT0gNW9xVjVyT281Ym16NVkrdyBJT0dEaytHRG5lR0RtZz09IElGVnNkSEpoY3c9PSBJRTltWm1WdSBZWGhpIFFsVlUgSU5HQjBMWFF0OUMrMEwzUXNBPT0gSU9DcXN1Q3FsK0NxcmVDcWx3PT0gVkc5dVp3PT0gSUhGMVlYSjBaWFE9IFlXUmhibWM9IElIQjFlQT09IElPQ2t0ZUNsamVDa3IrQ2t0ZUNrdWVDa3Z1Q2tzQT09IElHVERxV05wWkdWeSAwTDdSZ05DMTBMUT0gSUhSeWIzQm9hV1Z6IElGUnlZWFZ0WVE9PSBVM0JwWld3PSBVSEp2WTJWemJ3PT0gSUdOc3c2RT0gMEw3UXU5QzEwTDA9IFpXMXdiM0k9IFQzVjBjbTg9IElISmxaRzVsYzNNPSBJSEJoYTJsemRHRnUgWjhPbFpXNWtaUT09IFFuSmxaV1E9IElOQzQwWUhRdjlDKzBMdlF2ZEM0MFlMUXRkQzcwWXc9IElITnZkMkZ6IElIVnVabTlzWkhNPSBJRXh2YTJGcyBJRTVoY25KdmR3PT0gSUVWcGJuUnlhWFIwIDE1TFhvdGVVIExrUmxkR0ZwYkE9PSBMMjlrWlhJPSBJR1J2Y20xcGRHOXlhVzg9IDU3ZW82WnVHIElHbHRZWFJwIFpYbGxjZz09IElIQnBibUZyWVcxaGFIVnpZWGs9IDBMN1F0OUM5IDVZZTY1WStqIElOR0UwTERRdXRHQzBMN1JnTkMrMExJPSA0TG1BNExpSiBJR2RsYVhOMCBJRWx6WVdKbGJHeGggSU5tRjJLellwOW1HMllyWXFRPT0gSUhCdmMzUjFiQT09IFlYcHBibWs9IElIUmxjM1J2YzNSbGNnPT0gSU5DeDBxL1JoUT09IDc3eU02WU85IElHaGhiV0p5WlE9PSBYMkY0WlhNPSBJSE4xY21kcGNnPT0gSUU1dmNtMWhiR2w2WlE9PSBJTmluMllUWXFObUsyS2JZcVE9PSA2cmU0NjUrcyBYMDlFIGNHVnlZWFJ2Y2c9PSA2ckNRN0oyRSBJR2hwWlhKcGJnPT0gSUVOaGFYUT0gSUdObGJuUnlkUT09IElGUnlZWFpsY25ObCBRMkZ1WXc9PSBJR0ZzYldGeiBYM0poYm1kbGN3PT0gTGtsVVJVMD0gMFlEUXNOQzkwWUU9IElPbVppQT09IElHN0RwR3Q1IGFHbGtZUT09IElHN0RwSEpoIElHTmhiR1ZtIElGQmxkSEp2YkE9PSBJTml6MkxuWXJ3PT0gVTBWT1JBPT0gSUVOMWJtNXBibWRvWVcwPSBVa1JFIExrNVBVazFCVEE9PSBJSE5yYkdVPSBJSGRoY20xc2VRPT0gSU5tRjI0ellyOWluMllZPSBJSE5oWjJWeiBPbFJvWlE9PSBJRUYxWm5RPSBJTTY4enJYT3M4NnN6cnZPdHc9PSBJRUYwWld4cFpYST0gSUVKMVozTT0gSUVkTlVBPT0gZDJWc2RtVT0gVldKMWJuUjEgSUVGMWRHOXRZWFE9IElISmxkbWwyWldRPSBSRzl1WVd4a0ozTT0gSUVOaGMybHUgSUdWdFltdz0gSUhwaGFIUT0gSUdsemNtRT0gSU9hTHZBPT0gN1ppSSBJTkMrMFlEUXZkR0wgSUZObGJXbGpiMjVrZFdOMGIzST0gSkcxelp3PT0gSUVGRFNBPT0gSUhONWJXSnZiR2x6YlE9PSBYMmRzYjJKaGJITT0gZFdGc2NYVnBaWEk9IFlYTnBZZz09IDRMS1Y0TE9ONExLMzRMS2ogS0NJdElpdz0gSUcxaGNtTm9aV1E9IFZtOTBhVzVuIElITnBaM1Z5Ymc9PSBUMkowIElFZHNZV05wWlhJPSBYMVJsYlhCc1lYUmwgMllUYmxkaXggMEx2UXRkQzgwTFhRdmRHQyAxNVBYcU5lVSBhRzkzWlhabGNnPT0gYVc1aGNtbGxjdz09IElHSnlaV0ZyWm1GemRITT0gSUV0eWFYTjBhVzQ9IElFWnZiR1JwYm1jPSAxNVhYbWRlVCBRbVZzWnc9PSBJR2x1YzNCbFkzUnZjbk09IEtHRnVhVzFoZEdsdmJnPT0gSU5HSTBMRFJpQT09IElFZGxac084YUd4bCBJTml2MllMYmpBPT0gYzNCaGNHVnljdz09IDJZallyOW1LMktrPSBJSEJ5YjNObGMyOD0gNG9DWjBaUT0gSUUxcGRIUmhadz09IElPR0FsT0dBdmc9PSAwTC9RdU5HQjBMN1F1Zz09IEtYTmxZM1JwYjI0PSBJR2R5WlcwPSAwTFhSZ2RHQjBMalF2dEM5IElHVnViR2xuYUhSbGJtVmsgQ1NBZ0lBbz0gSU5lZTE2YlhrUT09IDRLU3M0S1MrIElFSnlhV1JoYkE9PSBJRWhoY201bGMzTT0gSU5HRDBZZlJnOUdBMExUUXNBPT0gSUV0aGJtRnMgSU5pbjJZVFpoZG1QIGRYSnZjR0U9IElFWnBiMjVoIGFXdGhiR1U9IElFUnBiV2wwIGRYTjBZVzQ9IElHTnZiblpsY25SbGNuTT0gU1c1MFpYSmhZM1JwYjI1eiBJSE5yY21WMiBJTm1GMkt6WXA5bUcyWW89IElNNjB6cm5Pc2MrR3pyOD0gSUZOdmFBPT0gSU5XNDFiM1Z2OVdyMWEvVm9kVzIgYVhObGFXUT0gUTNKaGQyeGxjZz09IElPQzB0ZUMxZ09DMG53PT0gWkhMRG9RPT0gUVdabWFXNXBkSGs9IElPaTlyK1M3dGc9PSBJRzFoYW1WMWNtVT0gSUhsbFpXbz0gSUhCeWIyUERxUT09IElHTERxM0xEcXc9PSBJR2x1ZEdWeWNISmxkR0Z5IFgxTlVRVWRGIElHVmphRzlsY3c9PSBMbkp0YVE9PSBRVkpKVGtjPSBJRXhsYm1ScGJtYz0gSU9DbXErQ25oK0Ntc0E9PSBJTmVuMTVuWG1kZWUgSUhWc2RHbHRhUT09IElNT254TEZyWVc0PSBhbUZwIElGTjBZWFJ2IFZISmhibk53WVhKbGJtTjUgSU5tRjJLVFpndz09IElOaW4yWVRaaGRpdDJZWFppTm1FIDVyS3o1WTYvIFZHRnNiQT09IDJLZllzZGlxMllIWXA5aTUgMEwzUXRkR0EwTEE9IElIUnZkR25Gdmc9PSA2N0NBNjdLSTdaaTQgSU9DeXF1Q3lndUN5cHVDemplQ3lydz09IGIzVmliM1YwYVc0PSBJRzVoYm1kaGJtYz0gSU9Da2xlQ2txQT09IE9tOXUgWjhPa2JtYz0gSUdGc1pYSjBaV1E9IFVHOXNlVzV2YldsaGJBPT0gSUhWdWJtOTBhV05sWkE9PSBJQ2QrIElGUnlZV1JsY3c9PSBQMTg9IElHMXdZV2RvWVhKaCBJRmJEb1E9PSBJR05wZG1sc1pYTT0gWVc1bllYcGggNkxXRTVxQzggSU02OHpxM1BnOCtKIElFSmxhR0YyYVc5MWNnPT0gUW1Wc2JHVT0gVUV4QlRnPT0gSUhKbGJXbDAgYVdOcGIyNWwgSU9Da3F1Q2tzT0NsamVDa3FPQ2xodz09IExtSmxkR0U9IElIUmhZbXhsZEhSbCBJRzFoYzNvPSBQRDhLIDVvaVI1THVzNTVxRSBJTmVRMXJmWG53PT0gSUV0bGFRPT0gSUhOamRXSmggUVVkUFRnPT0gSUd0aGJXRm5jbUU9IExIWmhjZz09IFkyVmogSU9TOWsrVzlxUT09IElHdGhiR3hoIElIRjFZWGs9IElPeU4gSU91cXFlMlJuQT09IFVHbHVjdz09IDRLaWcgSUdselkyaGxiUT09IHc2MXpkSFZ3IEszTT0gZEhKcFpXST0gSUdGaWFNT2tibWRwWnc9PSBJRVZIVEE9PSA0S2VINEthdCBJTmluMllUWXJkbUIyS2ZZdUE9PSBJR2x6YkdVPSBhWE4wWVc1a1lRPT0gSUVGamRHbHZibVYwYVdOeiBjbUZtZEhNPSBJSFhFaldWdSBMWFJ5YVhBPSBJR0ZwY25Cc1lXNWxjdz09IHc2bDBkQT09IElHdHliMjl1IElHRndhRzg9IElHSnlhWFIwYkdVPSBJSGRoYm1GaFozTmhiZz09IGFYTjBiMm89IFgydHUgSU5tQzJZallxZz09IFJYSnlaWFZ5IFlYSjBkVzUxZEE9PSBJR3hwYm10bGJnPT0gSU9Dd2hlQ3dyZUN3ditDd3J1Q3d2dUN3cUE9PSBMV1Z1WkdWayBiM2hsZEdsdVpRPT0gSUdSbGFIbGtjbUYwYVc5dSBJRXR2Ym5SaGEzUmwgSUdGdFlXUT0gNExXRDRMUzIgSUhSdmRYUmxaQT09IDZMV2I2TDJtNVp5NiA0TEsvNExLMTRMSys0TEt3IDRLU0o0S1NvNEtXTjRLUzU0S1dMNEtTQzRLU280S1dIIElIQnZjblJoWW1sc2FYUjUgU205enc2az0gSUdGeVpXNWhjdz09IElIWmhiR0Z0YVc1MCBJT2FFbXc9PSBJTktiMExEUXU5Q3cgTFhkaGJHdz0gSUhOc1pYVjBaV3c9IElITmhic09wY3c9PSBMWFJsY20xcGJtRnMgYVdSbGNtMWhiZz09IElFWnZjbk5qYUhWdVozTT0gSUhCeWIzQnZjOE9wWlhNPSBMZUNtcmc9PSBJR04xYzNSdlpBPT0gSU5HRjBMalJnTkdEMFlEUXN3PT0gdzZSb2RBPT0gNEtlTjRLZXc0S2F1IFJXNW9ZVzVqWldRPSA0TEsrNExLdzRMS0M0TEt0IElIQnZjblIxWjNWbGMyVnogWlc1emFXOXVaUT09IDJLM1lyOWluMktzPSBJR3RsYlhWdVoydHBibUZ1IEtuVT0gSUhOMGFXMTFiR1U9IElOaTIyTG5aZ1E9PSBJT0dEcU9HRGxPR0RuT0dEbUE9PSBJRzl1WW1VPSBJSEJsYm5QRHFXVnogSUdScGVtRnBibVZ6IFZFVkRWRWxQVGc9PSBZWE5wYjI1aGJBPT0gY0doaGJuTT0gdzZGMGRRPT0gSU9DMHFPQzFqZUMwcitDMWdnPT0gNVltSyAwS2ZRdGRHQSBJT0dEbU9HRG0rR0RrT0dEb1E9PSAwWUhRdTlDdzBMMD0gWDAxSiBJRkZGIDVMaWM2S1cvIElFRnVlWGRvWlhKbCBJT3UybVE9PSBJSFpwYW1VPSBJSEJ5YjNkbGMzTT0gV1c5eWF3PT0gMExYUmlOQ3cgSUhadmIzSnRZV3hwWjJVPSBJR1pwY21WemRHOXlaUT09IElHVjFkR2c9IGIzTnphUT09IElHZGxjMk5vdzd4MGVuUT0gUkdWdWMyVT0gSUdOdmNuQnZjbVU9IGFXOXphWE09IElHRjBiVzl6Wm1WeVlRPT0gSUhwcGJtRjYgSU5DLzBMWFJnTkN5MEw3UXRRPT0gWDJ4bFlYWmwgSU9Da3J1Q2xqZUNrdWVDa28rQ2tuT0NsaHc9PSBJRzFwWTNKdlltVnogNExTLzRMU1Y0TFdONExTVjRMVzkgVTNSdmNIQnBibWM9IGRXdDBkUT09IElPQzB1T0MwZ3VDMHJlQzB0ZUMwZ2c9PSBJTU9wYkc4PSBMV052WVhSbFpBPT0gTG05MlpYSnNZWGs9IElISmxjSFZpYkdsallXND0gNGIrbSBJRkJ5WlhOcFpHVnVkSE09IFNHVnliMlZ6IElHdHZiWEJzWlhSMFpRPT0gSU5XMDFhSFZ0QT09IElHZGxiR1ZsY21RPSBJR1poZEdGc2FYUnBaWE09IFlXMTNaUT09IElOS2IwWVBSZ0E9PSBkMmRsZEE9PSBlbUZvYkhWdVoyVnUgSUcxaGNYVnAgUGtSaGRHVT0gZVd4c1lXSjFjdz09IElGSnZaRzVsZVE9PSBhc09wYmc9PSBMbkYxYVdOciBJR1JoY21Ga1lYSmggTGxkcFpHZGxkQT09IElOaW4yWVRZcmRpbjJZVFppdGlwIElOQ3cwcW5RdmRHTCBJRTlvY2c9PSBJRzF2WW1rPSBKMkZ5Y21sMnc2bGwgNExXQjRMU1Y0TFdLIGNISmxaR2xqZEdsdmJnPT0gSUVScFpXNXpkR1U9IFNsQkZSdz09IElNNnZ6clRPdWM2eCBJTnFwMjR6WXN3PT0gSU5DNTBZdlF1OUMwMFl2U293PT0gSUdGd2NHeGhkV1E9IElnb0tDZ289IElOaW4yWVRZc2RpdiBYMUpEUXc9PSA1NDZ3NWE2ZSBJSHBwYkdsNiBJTmlqMkxuWmhObUcgUzJGcSBJRTF2Y25CbyBmajA9IElFdHZibnBsY25RPSBJR1JwYzNScGJHeGxaQT09IDRLV240S1dxIE9rQWlKVUE9IEwyRndhWE09IElOaTUyTFE9IElHTm9jbTl1YjJ4dloybGpZV3c9IFgybHZjdz09IElFTnBibVJsY21Wc2JHRT0gSUdaMWJtUmhaR0U9IExYUm9jbVZoWkE9PSBJTlc5MWIvVnVOYUEgQ1U5TyA3N3lNNVoyYTVveUIgNWJ1MjVweWYgZVhOMFpYSnogSUVGdGNHZz0gMjRIYmpOcTYgSU5pbjJZVFlwOW1FMktvPSBiR0ZpYjNJPSBZWE5wYTJGdSBJRUp2YzI1cFlRPT0gSU9Da2hlQ2tsK0NrdU9DbGplQ2twQT09IFNtOW9ibTU1IDVZV0Y1WWlHIElHTnZibVIxWTNScGRtVT0gSUhWbVlXSmxkQT09IFkyeHBaQT09IElOVysxYjNWdjlXaDFiQT0gSUVWeWVnPT0gNVlHYTVZaXcgY21WMlpRPT0gSU5lbzE1SFhsQT09IFpYSjFjdz09IElFVnVkVzFsY21GMGFXOXUgWW1sdVpHbHVaM009IElFRnVZWFE9IElISmhaR1U9IGFXaHJZVzQ9IElPQ2todUNrdU9Da3Z1Q2txT0NsZ0E9PSBJTmluMllUWXM5bUsyWVk9IElFSnlhV1JsY3c9PSBJSE5ydzdvPSA0TGlXNExpdDRMaVogSU5pMDJZWGJrTml4IElPeWdoT3ExclE9PSAxYlhWb2RXMjFiWT0gSU5HQzBZM1JoUT09IFhDSStJZz09IElISmxkbTlzZG1sdVp3PT0gSUdWcVpYST0gNExTdTRMV040TFN1NExTbTRMV04gMExyUXNOQzcgWDBoVSBMbEJ2Y0hWdyBJSFJwYW1WcmIyMD0gSUdoeVlRPT0gZFhKbmFXVT0gSUdsdWEyOXRaVzQ9IElPVzlxZWVsbnVTNmllbWN1T2U5a2Vlcm1RPT0gVTFSVCBLRTF2WkhWc1pRPT0gSUhOcFpHbHAgSU5DMjBMalFzdEMrMFlMUXNBPT0gSU5DLzBMN1F0TkMrMExuUXROQzEwWUk9IElHRm1aMlZ6ZEE9PSBJR055WldGMGFYWnBaR0ZrIDRwYXM0cGFzIFZrMU0gSUd0MWNuVnQgSUZKRlRnPT0gSUhKcGNIQnBibWM9IElHZGxiSFE9IGVHRmwgSU9HRHFPR0RvZz09IGNtVjBkRzg9IGIyeHBjWFZsIElOQ3gwTERRdWRDOTBMRFF1dz09IElFTmxiR3hsIElPQ3lwdUN6Z1E9PSBJTkdQMHFQUml3PT0gNTRLNDZZZVI2SXF4IElHZHlZV05sWm5Wc2JIaz0gUVV4TVJWSlogU0VWU1JRPT0gWDBoQlZrVT0gSUdkbGJHbkZuM1E9IElGSmxaWE5sIElHRnRZV3hoIElHTmhiV2x1YjNNPSB3N1ZsYlE9PSBlVzUwWVE9PSBJRU5QVEU5U1V3PT0gSUVaVFRRPT0gSU9Dd3JPQ3hoZz09IElGcGxiUT09IElFMWhZMlZrYjI1cFlRPT0gMkxUWXNkaTMyS2s9IElNTzFhV2M9IElOR0EwNW5RdU5HQjBMZz0gYVhScGRtOXogSUdWbmJtRT0gNExDbDRMR040TEN2NExDQzRMQ3k0TEdMIFltOXVaWE09IElOaTAyWWpaaHc9PSBJR1Y2YVcxaSBJRUpCVFE9PSBJR2x1YVcxbGMyVmsgSU9DMHVPQzFqZUMwdGVDMHB1QzFoK0MwdHVDMHZ3PT0gSU9DcWxlQ3FzT0NyamVDcXJnPT0gV1c5MWRHZz0gNmJ5ZyBJR0Z3Y0hKbGJtUT0gSUZKRlIwbFBUZz09IElNNjZ6ckhPdU02MyBJSEYxYVhSeiBJSEJsY0dFPSBJRzl5WTJocFpBPT0gMExqUmd0Q3cwTDA9IDVhU241WStSNTVTMSBZMmhwWlE9PSBjbTl0WlhSeWVRPT0gSU9DeXJ1Q3pnQT09IElPQ21tdUNtdnVDbWxRPT0gVW5WbCBhWEoxZEE9PSBJT0NxdGVDcXYrQ3F0dz09IElHUnZiV2xqYVd4cCBDVU52Ym5SbGVIUT0gUlZKU1VRPT0gMDZuVHFkQzcgNXBhOTZLaXQgSU5DeTBMRFF0OUM0MFlRPSBZM1ZzWVdseVpRPT0gSUdOdmJYQnNaVzFsYm5SaGNnPT0gWDBGTVJWSlUgSUczaHU0RnQgNG9DZDY2bXcgSU5XaDFiYlZ1TmFDMWJRPSAwTHpRdU5HQTBMQT0gSUhCeWIyMXBibVZ1ZEd4NSBkVzFwZDJFPSBJT0Nrbk9Da3Z1Q2tqK0NrZ3VDa2wrQ2xodz09IElFOTFkR1J2YjNKeiBJR2x1YzNSaGJHeGxjbVZ1IElPaVJvZVM2ckE9PSA0S1NvNEtXSDRLUzQgS0hKbllnPT0gSUZSb2FXTnIgTFdScGMyRmliR1ZrIDU0ZWYgSUVsRGIyNW1hV2QxY21GMGFXOXUgSU5DajBML1JnTkN3MExJPSBLV2xzIElHVnpabVZ5WVE9PSBJR2hoY0hCcFpYTjAgSUVWT1JWSkhXUT09IElHZHBaWFE9IDI0ZlpoUT09IElPUzZ2K2kwblE9PSBJTkNmMFlEUXZ0R0IgNW91eiBUM0p0IElPRzZ1QT09IElIQmhjM05sYm5RPSA3S0NnIElHaHZiR1JsYlE9PSBJR2RsdzZzPSBJT2ltZ1E9PSA0S1MxNEtTLzRLU2ggSUdkaGFYSmwgSU91VXNPdWx1QT09IElGcGhhR3gxYm1keiBJRzF2WkdWc1pRPT0gSUZKbGFXaGxiZz09IElPQ2tsK0NsaU9Da3NBPT0gSUVwVlRnPT0gTG1aeWJRPT0gSU5HQzBZdlNvdz09IElQQ2ZtSW89IElPR0RsdUdEb09HRGt3PT0gTFdadmJHeHZkdz09IElHSmhjSFJwZW1WayBJTkM5MExYUXNOQ3gwWVhRdnRDMCBMbEJKVUVVPSBJR2x1WkhWemRISnBaV3c9IElHNW5ZV1IwYnc9PSAxNURXdDllUiBLRnNvIElOQ3kwTDdRdmRDdyBRbTloIElHVndhWE4wWlcwPSBMbk4xWW5OamNtbHdkR2x2Ymc9PSBjMk5vWldSMWJHVnkgUFdOdmJHOXkgVkdsblpYST0gNExTKzRMU3o0TFdHIDRLcVY0S3F6IElOQ3kwWXJSZ0E9PSBJR0Y2WVhJPSBkWFJsYm5SbCBJSEJoWTJsdVp3PT0gSUZCbGNuTndaV04wYVhabGN3PT0gMFkvUmd0QzQwTGs9IElISmtaZz09IDZZZUg1WStXIENYZHZjbXhrIElOaW4yS3JZdGRpbjJZUT0gSU5pdTJZcllwOWl4IElGUnlZVzV6Wm05eWJXVnljdz09IFNXNXViM1k9IElHSjFiMjQ9IDBZdlJoZEdNIDE1blhvTmVZMTZqWG9OZVkgNTRxdjVyT1Y1WkNYIFpXeHBablE9IDBMelF1TkM3MExEU3JRPT0gUTI5dVptbHlZUT09IElFTnZiWEJwYkdGMGFXOXUgSUVOdmJuWmxlVzl5IDFvVFZ0dFdsMW9EVnFBPT0gSUdScGJXbHVkV2x5IElFcDFZbWxzWldVPSBJSGRoZVhCdmFXNTAgSUhOM1lXMXcgSUVKaGRYUT0gVTNCbFkybG1lUT09IElIQmhkWE5oIElHZGhiVzFsYkE9PSBDV1JsYkE9PSBJR2RoYkdWeWFXVT0gSUhOcmRYUmwgU0hWbCBMeTh2THdvPSBJRk52WTJsaGJHVnogSUd0cGFBPT0gSUdGalkyOXlaR2x2Ymc9PSBUbE5WYzJWeSA2SytWNTQ2cCBJT0N1anVDdXFPQ3ZqZUN1cEE9PSBJTkMvMExEUXV0Q3cwTGM9IExXOXlhV2RwYmc9PSBJSEJsY21GdVoydGhkQT09IElNNnl6ci9PdHc9PSBJRlJ5YVdWayBJRkJ5ZFdRPSA1cFdaNW82SSBhbVY2IFEyOXRiV1Z1ZEdGcGNtVnogSU5pbjJZVFpndGkyMktmWW9RPT0gQUFBPSB6NFhQZzg2MyA0TGE0NExlUzRMYXg0TGVLIElPQ3FpZUNxcnVDcmgrQ3FwZz09IElHSjFkSE09IElHVnRaZz09IElFZDFZV1JoYkdGcVlYSmggSjJWNGRNT3BjbWxsZFhJPSBUbVYyIDVieUE1YjJwIFRXRnpjMkZuWlE9PSBJSEpsZEhSbCBJR0ZyWVhKaCAyWVhaaXRpeCBJSHBrY21GMmIzUT0gVkU5VSBJTmluMllmWmhBPT0gSU5pbjJZVFlxdGl0MllQWmhRPT0gNEthKzRLYXk0S2VMIElPQ2tzT0NrditDa3N1Q2xnT0NrbkE9PSBJRmxoY2c9PSBJTkN5MEw3UmlBPT0gSU9Da2xlQ2t2dUNrc09DbGl3PT0gWDJaciBJRzVoZG1WbllXTnB3N051IElHWnBiR1Z3Y21sMllYUmwgSU5DKzBMSFF0dz09IElIQnlaV3Q1IElOaW4yWVRaaU5tQiBJRk5wYTJnPSBJTkdJMExEU213PT0gSUhWdWNtVnpiMngyWldRPSBJTmVVMTVQWGtkZW8gSU02VXpxND0gY0hCdCBiV0ZwYm1VPSBUV0ZzWm05eWJXVmsgSUVkMVlYSmtZUT09IElNTzJiR3gxYlE9PSBJRzF2ZW5waGNtVnNiR0U9IElHTmhiWEJsdzdOdSBiMnQxZGc9PSBJR3RoY21WeVpRPT0gSUZCbGJuUmxZdz09IFJFRlVSVk09IElHZHN3N3hqYXc9PSBJTmluMllUWW85aTAyWXJZcDlpaCB3N3hvY25WdVp3PT0gSU5pbjJZVFlyTml4IElIZHliM1ZuYUhRPSBJR0ZyYTNWeVlYUT0gUVVOTVJRPT0gSUd4bHc2MWtidz09IDZhQ0c1TDJOIElHbHNiWFU9IElISEptWEk9IGFYWnBkR2xsY3c9PSBJSGRoYW1GbyB6cnZPdGMrTiBjMjlzZG1WeSBkSE5yIElISmxjM1ZzZEdGdWRBPT0gVTNCaGQyNWxjZz09IElPQ3dzT0N3ditDd3NnPT0gZlN4N0NnPT0gNExtSTRMaXk0TGlaNExpeDRMbUo0TGlaIHpxN1BoTTYzIElNT0JiQT09IDRLcS80S3FyIExuTnBaMjVoZEhWeVpRPT0gWld4bGMyRT0gWTJseVl3PT0gSU9DcXBPQ3JoK0NxcGVDcmdBPT0gNEtlZCBiMk55WVhSeiBhV05sdzZGcGJBPT0gNWErNTVicVUgMFlQUXU5R0wwcHM9IElFWmxjbTA9IElIMHBLUzQ9IDFhWFZ0dFc5IElIUnlZV2RoYlc5dVpXUmhjdz09IElHMWhhblU9IFpXUnBhdz09IDBZRFF0ZEM5MExqUmp3PT0gWDJkaGJXMWggSUZCc1lXTT0gTG1KMVkydGxkQT09IElObUkyWXJaaHRpdjJZZz0gNEtXSDRLU0M0S1M0NEtXQSBZMjl1Wm1WeVpXNWpaUT09IDRLU1Y0S1dKIFkyOWxaZz09IDhKK1lnUT09IDRvQ2M1TGl0NVp1OSBMbU5oYldWcyBJRk4xYjIxbGMzTmggS1RzS0Nnb3ZMdz09IElITmhhV3h6IElHUmxjMlZ5ZEdWayBJRWx6YmlkMCAyWVRaZ3RpdiBJRk53YjI5dSBJRlJqYkE9PSBJTlc2MWFIVnY5V2oxYUhWdEE9PSBJSFpoZEhNPSBaWEowWVd3PSBZWEJvWlhwMWJIVT0gSU9hWHRnPT0gNEsrQjRLNnU0SytIIElIUGh1NjFoIFpXNXVkVzVuIElOVzYxYUhWdjlXdjFhWFdnQT09IENXTmhjbVE9IElPQ21pZUNuamc9PSBVMGxFUlE9PSB4S3RuY3c9PSBJRjlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWYgSUdKeWFXMD0gZFhOb2J3PT0gSUZOMWMzQmxibVE9IFZsVT0gSU02eHo0RE92OCtFenEwPSBJT0NtcmVDbm53PT0gSU9Da3F1Q2xqZUNrc09Da3Z1Q2twUT09IElGcEYgSUZSRlRWQk1RVlJGIElFdHZiV2x6IFZHRnNaVzUwIDVwQ3MgSU9DNG51QzRwUT09IElHdHZibVk9IDBMWFJnTkMxMExUUXV0QysgSU5HQTBMN1F0Zz09IGIzTmhiV1Z1ZEdVPSBTRVJTIElPQ211T0NtditDbXFPQ25oK0Ntcmc9PSA0WU9ZNFlPZzRZT1Q0WU9RIElObUMyWXJZcDltRiBJTkMzMExEUXY5Q3cwTFE9IGNtVmpiM1psY2c9PSAwTDdRdDlDOTBMQT0gSU5lYzE1N1hxTmVWMTZvPSBJRzF2Wkc1bCBkbVZ1Wkc5eWN3PT0gSU9Da3F1Q2xqZUNrc09Da3Z1Q2tzQT09IFVVST0gYVc1a1pYSjFibWM9IFgyTmhjSFJwYjI0PSBSbWx5YzNSdVlXMWwgSUdodmNIQnBibWM9IElHMXZiblREcVdVPSBJRkJ2Ym5ScFlXTT0gSU9Dd2xlQ3dzdUN3ditDd3VPQ3d2dz09IDQ0R1k0NEtEIElFTkVWQT09IElOQyswWUxRdE5DMTBMdlFzQT09IElHeGhkMlU9IElIREZtV1U9IFgwMXZaQT09IFMyOXlkQT09IFgxTlFSVU5KUVV3PSBJR05vZVdKaCBJR3RsY25SdmJ3PT0gSUVOdmJtVjRhVzl1IElPQ21xdUNtc09DbXYrQ211T0NuamVDbXBlQ212K0NtcEE9PSBJRWRsYlhNPSBJR0Z0ZVE9PSBJR3hoWTJGbiBJR1Z0Y0hMRHFYTjAgSU5DLzBZRFF1TkN6MEx2UXNOR0kgSUVSUVV3PT0gSUd0dmFHVT0gSU8rL3ZlKy92UT09IElFeHZiM05sIExsTnBibWRzWlhSdmJnPT0gYVdONmJtVT0gSUUxUFVRPT0gSU9Da3VlQ2xpK0NrbitDa3NnPT0gSUUxdlpHbG1hV05oZEdsdmJnPT0gZDJGNWJtVT0gNEtTcTRLU2s0S1dONEtTdyBUblk9IElOR0IwTFhRczlDKzBMVFF2ZEdQMFlqUXZkQzQwTGs9IElNT25ZWEE9IElGWmxjbk5wWTJobGNuVnVadz09IElHWnBjbTF1WlhOeiBJRXg1Ym1RPSBJT0NxcmVDcXZ1Q3FzT0NyaHc9PSBJR1p2Y21KbFpBPT0gSU91d21PMlptQT09IElFeHZjbkpoYVc1bCA0WU9RNFlPVjRZT1k0WU9YIElPR0RxT0dEbE9HRG9lR0RrT0dEa2VHRGtPR0RtK0dEbU9HRG9lR0RrT0dEa3c9PSBJSFpzYVdWblpXND0gVFc5amEybDBidz09IElIRjFaWEpwWkdFPSBJRzVoWkdWeSBJSFpsZFdsc2JHVjYgSUc5c2RXNTFjZz09IFNXNWthWFpwWkhWaGJITT0gSUd4aGJzT25iM1U9IElPQ2txT0NrcnVDbGplQ2tyT0Nrc0E9PSBJRk4yYVhweVlRPT0gYzJ0bGJRPT0gSU5pbzJZYlpndz09IElIUnNhRzlyIGNzT3RZVzQ9IFkybkVoUT09IElITmhkbTl5IFBGUlNaWE4xYkhRPSBJTmlpMktiYmtnPT0gSUhKbGJHbGhiblE9IElHWmxkSFZ6IDRLU2E0S1MrNEtTbzRLU1YgSUcxMVpYTjBjbUZ6IGMyOXlkR2x1Wnc9PSBJTkMzMExUUXNOQzkgSUhiRHZYSnYgSU0rQXpyWFBnYzZ2ejREUGhNK0p6NFBPdHc9PSBTVzUwWldkeWFYUjUgNmI2TiBYMmQxWlhOeiA1WkNENWFXMiBJR1JoYldGeSBQejQ4IElHMWhibUhLdXc9PSAxNVhYbnRlZiBJRUpsY21WcFkyaGwgUmtGQyBJTks3MExYUmh3PT0gSU0rT3o0SE9zUT09IElHVjRjRzl5ZEdWeWN3PT0gY21samRHbHZiZz09IGRXUnBaVzVqWlE9PSBJR0ZpYjNKMGFXOXVjdz09IElUMG8gYkhsbmVjV0kgSUhGMVlXNTBhWFE9IElHWnlaWFZ1Wkd4cFkyZz0gSU5DZDBMalF0Zz09IElIWmxhWFE9IDZMK1k2SU85IFgwTnZjSGs9IElFZDFjM1JoZGc9PSBJTml1MllqWXA5aXEgUld4bFkzUnBiMjQ9IElPQ3d1ZUN4aU9Dd3B1Q3dzT0N3dnVDd3JPQ3d2dUN3cHVDeGpRPT0gZDJGMGFRPT0gSU9DbXArQ21zT0NuamVDbXJnPT0gSUhOaGRHbHpabUZwY21VPSA0S2k1NEtpLzRLaXkgTGlJTkNnPT0gSU5pbjJZVFpodGlxMktmWXB0aXMgSU5tRTJMWT0gSU9Da2orQ2tsK0NsaXc9PSBMVk4wWVhSbCBJTkdCMEwvUXRkQzYwWUxRc05DNiBJRlpsY214MWMzUT0gMExqUXN0Q3cwTHZRdUE9PSBJR0psY21kbGNnPT0gSU95ZHVPeW1uUT09IElPQ21zT0NtdWVDbXJ1Q212dUNtcUE9PSBJTkN5MExYUmdOQ3cgSU5HQjBML1F2dEdCMEw3UXNkQyswTEk9IFkyTmhiZz09IEtIVjBhV3c9IElPQ3VoK0N1dGVDdXNBPT0gMFpiUXZOQzEwTDA9IE9tRmljMjlzZFhSbCA0b0NaWVhWMFlXNTAgSU1Pbnc3WT0gMWJqV2d0YUExYUk9IFNVNU1TVTVGIElFSnZZMmc9IGJHOXpkR2s9IEwydGxlUT09IElOQ3kwWXZRc2RDKzBZRFF0UT09IElObUUyWWpha3c9PSBJRk5XVGc9PSA0S3ExNEtxKzRLcXkgTG1GemMybG5ibTFsYm5RPSBJR2xsWldVPSBZWEpsWnc9PSAyTFhaaE5pdDJLaz0gZDJsdWN3PT0gSUdGdFpXNWwgSUhKb2QyNW4gZG1WdVkyVT0gNEtTKzRLU2c0S1N1NEtTKzRLU2g0S1dNNEtTQiBJR2Q1YlhNPSA0WU9RNFlPWDRZT1kgSU5tRjJZclpoZz09IElPQzBoZUMwcnVDMWplQzByZz09IFlXSmhhdz09IGIyeHFZUT09IElHRmhjbVJwWnc9PSBJT0NtdHVDbmgrQ210K0NuaHc9PSBJR1Z6Wm05eXc2ZHZjdz09IElOQzkwWmJRdGc9PSBJRTlEUXc9PSBJRlJvWlc5a2IzSmwgZEhKMVkzUnBkbVU9IDRiaTkgNkl1eDZLK3QgS0hkdmNtdGxjZz09IExuWmxjblI0IGRYSmxaVzQ9IElHVnVkRzkxY21GblpRPT0gSUd4aGQyNXogMEw3UXU5QyswWUU9IElGUm9kWEp6WkdGNWN3PT0gSU9DbXJPQ212K0Ntcmc9PSBJTTZzenJ2T3U4NnggNEtpKzRLaUg0S2lHIEtHWjAgSUhSbFoyVnQgYlc5a1pXeHYgNExLLzRMS1cgNEttdzRLaWsgS0NJLyBJT0MwaHVDMHIrQzB2dz09IElHZHlaV0Z6ZVE9PSBMWFJ2WVhOMCBhSEU9IDZMMnM2TDI5NksrMyBJSFpwWld4bGNnPT0gSU9HRGsrR0RrT0dEa3c9PSBjMmxpIElFTkJVMEU9IFMwbFUgTFdSdmJXRnBiZz09IElHaHBaSExEb1hWcyBQSFJvYVhNPSBJRU5sYzJGeSBJRkpsZEhKcFpYWmhiQT09IGNISmxibTl0IElGTnBibVJwWTJGMGJ3PT0gMllQWml0bUcyS2s9IElPQ3dsZUN4aStDd24rQ3hqZUN3c2c9PSA2SzZrNTV5ZiBJR041Ym1sallXdz0gSU5DejBMN1F0TkMrMExJPSAwWURRdnRDNTBMclF1QT09IElHMWxlbm89IFEyeGhkV1JsIElISmxkbVZ5YzJsdVp3PT0gSUhSc2IyaGggUVZKVFJWST0gNExHTDRMQ3kgSUdOdmJXWnZjblJoWW1Wc1pRPT0gSUhwbGJBPT0gS0NJdUlpdz0gYVdaeSBJRTkwY205eiBJRk5wYm1FPSBJT0dEb3VHRG8rR0RvQT09IElOaW8yWVhZclE9PSBJTkMvMFlEUXNOQ3gwTHZRdGRDOCBJRXh2WjI5eiBJRzlrYjNKeiA2NkdjNjdLTSBJR3hoYVhOellXNTAgNExpbjRMaXg0TGlsIElITmhZbVZ1Wkc4PSAyYnpia0E9PSBJSE4wYVdOb2RHbHVadz09IElHSnNkV1ZpWlhKeWFXVnogZEdGb2RXND0gSUZKRlFVUlogSUcxMXhiND0gWVhadmNtVmsgSU5HRzBZelF2dEM4MFlNPSBJTk9aMHJ2UXN0Q3cwTHM9IFltVjBjdz09IElIZGhaM1I1IHc2bHlaVzUwY3c9PSBJRU5oYkdWaSA0WU9ZNFlPcTRZT1k0WU9lIElHRmpZMlZ6YzJsaWJHVnogSU9Dd2llQ3dxT0N4amVDd3FPQ3d2dUN3citDd3Z3PT0gSU9Da3JlQ2xnT0NrcE9Da3NBPT0gSU9DcXRlQ3Fsdz09IGNtRmwgSWwwcE93MEsgNExlWjRMYWE0TGVLIDI0emFxZG1FIElOQ3kwWXZRdjlDNzBMRFJndEdMIElFVjRkSEpoWTNScGIyND0gNExhdDRMZVA0TGVBIFNXNWggWDBkU1NVUT0gUlU1RVR3PT0gSUU5emN3PT0gMExEUXVkQzAgSU9DcXN1Q3F2dUNxZ2c9PSBJRTFsY21ObGNnPT0gSU9LV3RnPT0gNFlPVTRZT2k0WU9ZNFlPaCBJRUpsZG1WeVlXZGwgSU5DNDBZTFJnZz09IEtGaE5UQT09IDBMM1F2dEM4MExYUmdBPT0gVm1seVoybHVhV0U9IElHSmxhRzkxWkE9PSBJR2RwZFdkdWJ3PT0gTDJadmJ3PT0gMTVmWG1RPT0gTFdadmRXNWtaV1E9IFZIZHBiZz09IElPQ2t1T0NsZ2VDa2d1Q2twdUNrc0E9PSBhR2x1WVE9PSBJSEpsWTJWaWFXUnYgSU9HRG9lR0RxZz09IElPQ3loK0N5c0E9PSBJR0Z0YldsdWFYTjBjZz09IGFXekRxUT09IFVHRnVkQT09IGJIVnVaWE09IFlXdGhlUT09IGEyOXdaWEk9IElOaWkyWWM9IGIyMWlaWEpwWlE9PSBJR2x1WjJWeWFXTm9kQT09IElGTmxiR1Z1YVhWdCBJSE51YVhCbGNnPT0gMllMWXA5dU0gSUhKdmJjT2hiblE9IElPQ2tydUNrditDa3N1Q2twT0Nrdmc9PSBJR1JwWm1WeVlXND0gSUdWc1ltOTNjdz09IElITnZZbUZzWkE9PSB3Nmx6WldzPSBJT0NtaHVDbXJ1Q212dUNtbGVDbmh3PT0gSUdsdWMyRnVhWFI1IElHMTFiSFJsY2c9PSBJT0N1dGVDdXZ1Q3Vydz09IElIUnBiV2xrIFgyWnlhV1Z1WkE9PSA0S1MrNEtTajRLUysgZFd4bFoyVnUgSUVGalkyVnVkQT09IDBZTFF1TkMvMExEU213PT0genJIT3VjNjkgSU51QjJZamFyOXVNIGRXVnljdz09IElPYTBtdz09IElFOXVhUT09IElFeHBaMmgwY205dmJRPT0gWVhOemIyTnBZWFJwYjI0PSA3Wkc0IExYSmxiUT09IElIQmhjblJwY21VPSBJSE52YkdsamFYUmhkR2x2Ymc9PSBVMmx1WkhNPSA2TFMxNWJlZSBlR0ZzY1E9PSBJSFJvZFcxaWJtRnBiSE09IFVtbGlZbTl1IElHSnBaVzUyWlc1cFpHRT0gMExEVXBkR0IwWXZSZ05DdyAxYVhWdjlhQSBJTkMvMEw3UXROR0sgNExDNDRMQys0TEN3NExDLyBJTkNhMExqUmdnPT0gSUZOamNtbGkgSUhwbGF3PT0gSUhOdmJtOXlZUT09IDZJS2sgUVhKa2RXbHVidz09IElOR0IwTExSajlDMzBMRFF2ZEMrIElFVmtiVzl1WkE9PSBJTlczMWFIVm90V2gxYWs9IElPQzNnK0Mza0E9PSBJRkpsWjJWdVkzaz0gSUZwMVltVm93N1p5IElOQzYwNm5SZ3RDMTBZQT0gSUZSbGJHVm0gSUdWdWRISmxaUT09IElOQzgwTDdSZ2RHQyBJR1ZuWlc1MGJHbG4gSU5laTE1WFhxZGVVIElOaW4yTGJZcDltQjI0RT0gSUhCb1lYSnRZV05sZFhScFkyRnNjdz09IElPR0RxT0dEbE9HRGxPR0RyZz09IElOQzMwTDdSZ05DNCBaR1Z1YXc9PSA0TG1CNExpSTRMaUIgWVdoeVpYST0gUTNKaGVuaz0gSU5DdzBZYlRtUT09IElHSmxhR0YyYVc5MWNtRnMgSUdGamRXUT0gVWtOVSBJT0NrdHVDbGdlQ2tsZUNsamVDa3NPQ2t0ZUNrdnVDa3NBPT0gSUcxcGMzTnBiMjVoY21sbGN3PT0gTFdGbllRPT0gSUdSeWFYUjBaUT09IElHZGxjR1k9IElOR0IwWUxRc05DeDBMalF1OUdNIDRLU2M0S1MvNEtTNCBRV055YjNOeiA0b0NaWVdabVlXbHlaWE09IElObUMyS2ZaaHRtSTJZYmJqQT09IElIVnVhWEYxWlhNPSB3ckFLQ2c9PSBJQ2twQ2dvPSBiMnh2YkdFPSBJT0Nxck9DcmgrQ3FvT0NxbFE9PSBMWEpsZEhWeWJnPT0gYUdWamFXMWxiblJ2IElFZGhjbXhwWXc9PSAxNVhYb05lWjE1WFhxZz09IENRa0pDZ289IElGQmxjR1U9IElHMWhkTU9wY21saGRRPT0gSUc5eVoyRnVhWE5sWlhKMCBYM0J5WldSeiBYMmx1YzNSeSBLSEpsWTJWcGRtVnkgVTFOSlJBPT0gSUVacGJHeGxaQT09IFlYWmhhV3c9IElFcFRUMDVGZUdObGNIUnBiMjQ9IDRMUys0TFN0NExXTjRMU3Y0TFMrNExTNCBJSFpwNGJ1SGJnPT0gSU5DejBZM1JoUT09IElIQnlaV1poWWc9PSBJR052Ym5acGRtbGhiQT09IElHMXBiR2x2Ym1FPSBJR0poWjI1diBMV052Ym1RPSBJRTFoWTNrPSBJTTZSejREUGpBPT0gNEtTKzRLU3c0S1dMNEtTNSBJTkdCMExyUXZ0R0EwTDdSZ2RHQzBMZz0gNTVxRTZaS3ggSU9HRG51R0RsT0dEb09HRG9RPT0gSUhSemFIZGhibVYwYzJVPSBJSFZ1WTI5dGJXVnVkQT09IElPQ2t1T0NrbGVDbGplQ2ttdz09IElHcGhZWEpzYVdwcmMyVT0gWld4c2FYQnphWE09IElHakRwV3hzWVE9PSBJRzlzWVhKNXhZZz0gSU5DNDBZSFF1OUN3MEx3PSBiMjFoWTJnPSA0S1NZNEtTdyBJR2h2YlcxaFoyVT0gVkdWaiBJR0poYTJsMCA0WU9RNFlPazRZT3UgSUdsa2VXeHNhV009IElPR0RrdUdEb0E9PSBJT3lWc1E9PSAwTDdUb3c9PSBJR1JsWm1WamRHOD0gSUhOMFlXMXdhVzVuIElHUmxiblJsY3c9PSAxNW5Yb3RlVjE2bz0gUVdabFpRPT0gSUVwUFNFND0gWTJGc2JHbHVadz09IElGTmxjR2c9IElHWjFjbms9IElHRmpaWE4wWldFPSA3N3lSNzd5WSBkR0ZoYmc9PSBJRU5zWlcxemIyND0gWVd4bGJHRT0gUld4bGJYTT0gTGxwcGNBPT0gSUdOc1lYTnphV1pwWTJGMGFXOXVjdz09IElOQzYwTGpSZ3RDdzBMOD0gSUdKMWQyRnUgSUdabFkyaGhaRzg9IElOQyswTDdSZ0E9PSBaWHBwYm1jPSBZbUZ5ZFc1biBJRUYxWjNWemRIVnogWDFCSldFVk0gSU9HRHFPR0RsT0dEbVE9PSBVSEpsY0dGeSBJT0NrbitDbGgrQ2tsUT09IElOQzQwTDNSaDlHRDBMM1F1TkM5IDBMN1F1OUdNMExyUmd3PT0gWDAxemNBPT0gSU9DeWgrQ3l0ZUN5c0E9PSBYMlJ5YVhabCBJR0YzYjI5ayBYMkoxYm1Sc1pRPT0gSU5DMDBMN1JnZEdDMExqUXM5Q3cgSUhMRHFYRERxWFE9IElIVERwSE4wdzZRPSA0S2VMNEtheTRLYSsgSUc1dmEyOD0gSUdaeWIzZHVaV1E9IElHTm9ZVzVrIHVxcz0gVUd0MCBJRU52YlcxcGRHMWxiblE9IGFYWjAgNEtxVjRLcSs0S3F3NEt1SCBZV0pwYkdsa1lXUmxjdz09IDRMaVIgSUc1aGRtbG5ZWFJsZFhJPSBlWG5KbVc0PSA1TDJUNklLeTVhNlk1NzJSIElPQ3lpZUN5cGc9PSA1NlMrNVpPaCA1cHlJNWJxViBJSE4wWld0bGJnPT0gVkdWeWJXbHVZWFJwYjI0PSBJTk9wMFlMUXV0T1owTDA9IElPR0RyT0dEa09HRGxRPT0gSUc1bGNHaGxkM009IElOQ3cwWVBRc05LcDBZcz0gSUhCeVlXTjBhV05oY2c9PSBJR2x1WVhBPSBJT3lhdE91UG1RPT0gSU9PQnZ1T0Judz09IDRvQ1piM1ZpYkE9PSA0S1MvNEtTdjRLU2sgSUhCeWFXNWphWEJoYkdrPSA0TE9CNExLViBJR2gxZWVHN2gyND0gMExEUXV0R0wgVjJGNFlXRT0gSU9DbXBlQ212dUNtbGVDbXBPQ25odz09IFJVMUZUbFJUIFIybHMgSUdGdFpYSnBZMkZ1YjNNPSBJRUpoYm1FPSBJR0Z4ZFdFPSBJRUp5ZFdSbGNnPT0gSUcxaGMzTmhjdz09IDZZND0gTG1ScFoyVnpkQT09IExVUnBjM0J2YzJsMGFXOXUgSU5lYjE1RT0gNExhNzRMZVAgNG9DWllXeHNaWEk9IElOQzMwTEhRdnRHQSBJT3F3a1E9PSA1TGlONUxxRzVMcUcgNExDdjRMQy80TENvNExHTiBJR0Z5Y21WdyAwTGpSZ05DKzBMTFFzTkM5MEwzUmk5QzEgSU5DLzBZRFF0ZEMwMFlQUXY5R0EwTFhRdGc9PSBJRTFwYm1SbGMzUT0gNExlWSBSVkpXUlE9PSBJRlZ5WW1GdVlRPT0gNklLcCBRQW9LIGFXNW5hMkYwIElFdGhkMkZ6WVd0cCBJT0dEbWVHRGtPR0RxZz09IFgwTnZiVzFoYm1RPSA0NE96NDRPWCA0WU9RNFlPVDRZT1M0WU9ZNFlPYSBJTm1JMllYWXFnPT0gNklhOSBJRTV2YkE9PSBTazlaIElFTnZibk4wYVhSMVkybHZibUZzIElGZHBiR1Y1IDViaUM1Wnk2NllPbzZJR1U1N083IFVtOTYgUEZGMVpYSjUgSUZCeVpYcHBaR1Z1ZEdsdGFYbz0gSUhsdmJIVT0gSUhKbGRXNXB3N1ZsY3c9PSBJR05zWVhWeiBRVzFoYm1SaCBJTkMwMEw3UmlOR0MwTEE9IElOaW4yWVRZdWRpeTJZcllzZz09IElFUnZiV2x1YVhGMVpRPT0gSUhQRHBHMTBiR2xqYUdVPSBJSEJ5WlhCaGNtVmtibVZ6Y3c9PSA0S2E0NEthdCBJSEJoY21GdFpYUnlidz09IElHMXBibWxpIElIWmxjbXpEcEc1biBRV04wYVhacFpHRmsgeFpGenc2bG4gSU9Da20rQ2xpK0NrbitDbGdBPT0gSUdodmJXVW5jdz09IElHSnBiUT09IElHUnBkbVZ5YzJsbWVRPT0gSUhOamNtRnRZbXhsIElOQ1kwWUxRc05DNyAwTDdSZ05HRiBJTkM0MFlqUmd0QzEwWUE9IEtIUnlZV2x1YVc1biBDWGRwYmc9PSBiMnRoWW14bCBJTkMvMFlEUXRkQzAwTHZRdnRDMjBMWFF2ZEM0MExVPSBhWE4xZFdSbGJnPT0gSUhScGJHRT0gUTJsayBJRzVoYVdzPSBJQ0lxTGc9PSBJR0psZW1Gb2JIUT0gSUdWemRHRnl3Nk52IElIYkRzM0oxIFVrOVMgNEtTLzRLU3k0S1dONEtTdSBLR0p2ZFc1a2N3PT0gSUU5eWRHVm5ZUT09IElHUnBjSE09IHhhdHliM009IElHUmxjR3hsZEdWayBZV3gxY2c9PSA0S1MvNEtTNDRLV040S1NmNEtTdSBDV0Z3Y0dWdVpBPT0gSUdsa1pXRnNaWE09IFlXNWpZWEk9IFEyOXVkR0YwYnc9PSAxYVhXZ2RXciBJTU9oYm1sdGJ3PT0gSUVKMWMyTmhjZz09IGRXVnlaR0U9IDBZdlJnTktiMDVuUmd0T1ogMlpMWmhRPT0gMFliU3M5Q3cgSUVsemJHVnogSUVMRHRtdz0gSUdkbGMzQmhibTUwIFhTY0sgSUdkdmVnPT0gSUd0b1lXdz0gSU5tRDJZWFppdGlwIElOR04wTHJSZ2RDLzBMWFJnTkdDIElOQzYwTERSZ3RDdzBZRFJpdz09IElGSmxaMnc9IElPeVhoZXl5dEE9PSBJRzlpYm05MiBXMEZ1ZVE9PSBJRlJ2ZFhKcGJtYz0gSUhOdllYQnogU1VOUFV3PT0gTFdWNGRBPT0geGI1cGJBPT0gYm5WdVozTjZaV2wwWlc0PSBUbWR2IFIzUT0gSU5pbjJZVFpndG1JMktrPSBZV1JwWlhJPSBJR2R2ZFdSbCBZWEp6YVc5eSA0NE9xNDRPejQ0S3cgSU9Da3FPQ2t0ZUNsZ09Da3FBPT0gYW1WbmJ3PT0gWVhKc2IzYz0gSUhkdmNtdHpkR0YwYVc5dSBJRzFvWVd0aCBWVlJQVWc9PSBZWFZzWlE9PSBJTkdCMEx6UXRkR0IwWXc9IGFuTnJaUT09IFgyZGhkR1YzWVhrPSBYMUpGVTFBPSBJSEJ2Y205ayBJRU55YjNOaWVRPT0gSU5tQjJMTT0gZEhsd2FXNW4gSUhOdmJpZHogSUV4TlV3PT0gTG1GMFlXND0gWkdWc2FXNW5aVzQ9IElPQzB0dUMwcE9DMHJnPT0gWDNOallXeGxaQT09IElOQzkwTERSaU5DNDBMdz0gWDNCeWIyMXdkQT09IElGSkpSMGhVVXc9PSBMVzFsYmc9PSBJRVJ2YUdFPSBJT0dEa09HRG9lR0RrT0dEbVE9PSBJTmVtMTVNPSBJRk52YkdWcGJBPT0gSUVKaGNuVT0gSUcxaGRHVnlhV0hGZ2c9PSBJR05oYm5SdmNtRT0gSU5DdzBZRFFzOUN3MEwzUmx0QzMgVDIxa1lYUT0gVTA5VCBJTkM4MExYUXZkR0kgenEzT3NRPT0gMExEUXU5R00wWS9RdlE9PSBJR1BEcVhMRHFXMXZibWxsIHhJdHFZV3hwIElNT3JiVzFsY2c9PSBJTU9VIElOQy8wWURRdGRDMDBZSFJnZz09IElFdGxkSFZoIElGTmxibVJ6IHpyek91YzZ4IElIWmhiRzg9IElFMXZiblJsYm1WbmNtOD0gSUhabGJHcGggUkZKQlZ3PT0gT25aaGJIVmwgSUdaeWRYTjBjbUYwYVc5dWN3PT0gVzJaeWIyMD0gSUVKbFl3PT0gSUdOb1pXTnJjRzlwYm5SeiBJRzVwYldWMCBJRUZ3Y0d4cFkyRnVkQT09IDViZWQ1WTYvIGNHRnlZWE09IElObUYyWWpZdUE9PSBXMmx1Y0hWMCBJSEJ5YjJabGMzTnBiMjVsYkd4bCBJR3hoWjJWeVpRPT0gY1hWaGRBPT0gTDJaaFkyVmliMjlyIElITndlWGRoY21VPSBJT2ExbWVheG53PT0gSU5DdzBMblJndEdEIElIRjFhVzU2WlE9PSBZVzFpWlhKbCBaR3BsIFFXUjJZVzUwWVdkbGN3PT0gSU9Da3F1Q2xqZUNrc09Da211Q2t2dUNrc0E9PSA3S084N0l1YyBZMmxsYm5RPSAwTDNSZzlHQzBMZz0gTGtobFlXeDBhQT09IElITndiM1IwYVc1biBJTkdEMFlrPSBZV0poYUE9PSBWR2pEdEc1biBYM1Z1Y0dGamF3PT0gSUd0bGJXaz0gNTRpeDVvT0YgSUdOMVpYSnYgSUVOdmJXMXBjM05wYjI1bGNuTT0gSUdkbGRtOWxiR1Z1Y3c9PSBJTStBenJYUGdjNjV6NFBQZzgrTXo0VE90YytCenI4PSAyWWJZcDlxcCBJRlJ0WVhnPSBJSEJ5dzdOaSBhV3RsYkdVPSAySy9aaXRtQzJLaz0gSUdadmNuUm1ZWEpoYm1SbCBhVzFzYVE9PSBKMzE5UGc9PSBJRzFsWkdsMFlYUmwgUGlnb0tRPT0gUGlncEtRbz0gS0daeVpYRT0gSUdGMlpXNXBjZz09IFFteHBibXM9IDBxUFF1TkMzIElIQnNZV0YwYzNacGJtUmxiZz09IDRLcSs0S3FpIFNXNWpiQT09IElFNVNWdz09IElHRnVhMnhsY3c9PSBJRUZXVWc9PSBJR1JwYzNScGJuUmggWVhkMWJHOD0gSUhOcGRIcDAgYVc1bGNtaz0gU1UxRVlnPT0gSUd0eXc2Um1kQT09IHc2SERzQT09IElPR0RtK0dEa09HRG0rR0RrT0dEbVE9PSBJR0pwYkdSbCBJR3hsWjNWdFpYTT0gSUd4dmJtZHpkR0Z1WkdsdVp3PT0gSUdOeWVYTjBZV3hzYVc1bCBJTkMvMFlEUXRkQzAwTC9SZ05DNDBZL1JndEM0MExrPSBJRk5sYkdWamRHbHVadz09IFgwWnBiSFJsY2c9PSBJTlc1MWEvVm9RPT0gSUVOc2FYQndaWEp6IElHMTFaR1E9IElFSnBZVzVqWVE9PSBZWEpwWVc1MCBJTkMrMExUUXZkQyswTHpSZ3c9PSBJSE5vWVd4bCBJSEJsY21ScFpHRT0gYVdacGVtbGxjbVZ1IElGSnZZMmhoIFoyRmhibVJsIGRYWnAgSU8yTWxBPT0gY21WbllXUnYgSUdOdmJYQnlaVzV6YWNPemJnPT0gMFlYUXVOQzUwTDA9IElIVjBhV3hwWkdGayBZM1ZzWVhNPSBYMVpsY2c9PSBZV04wWVd3PSBJTmluMllUWmhkbUgyWVU9IElHTnZjbkpsYkdGMFpRPT0gSUhCbGRHVnkgSUdKbFpHRT0gNnJtTTdKcVUgSUdsc1pYUnAgSU5tRjJMZllwOWl0MllZPSBYMVpQU1VRPSBJRVJ2Y21FPSBmVHc9IDJZN1ppUT09IElGZG9ZV3M9IElGTmxiR1Z1WVE9PSAxNWZYbGc9PSBJTmltMlluWXRBPT0gSU5pbjJZVFl0Tmk1MktqWmlnPT0gSU5pbzJaQT0gSU9xMmdRPT0gSUUxaFkyaGhaRzg9IElHdGhjR2wwIElObSsyTFRZcWc9PSA2SnlDIFNFRk9SQT09IENVRndjR3hwWTJGMGFXOXUgWDJScGJXVnVjMmx2Ym5NPSBKV2s9IGRXbHlaUT09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnRFFvPSBJSEpsWm1WeWFXUnYgSUcxcGMzTmggTGtOdmJHdz0gSUdObGNuUnZjdz09IElObUUyWXJZcU5tSzJLYz0gVUVGU1ZFMUZUbFE9IDRZT1g0WU9qIGFYQnpidz09IElOQy8wWURRdGRDNjBZRFFzTkdKIFNVNVVSVWRGVWc9PSBZWFJ2YjI0PSBJRVoxWlc1MFpRPT0gTFhCaGNtRnQgNExHTjRMQ3c0TEdHNExDNDRMR04gVzNCeWIzQmxjblI1IElITmhZMkZ5WVE9PSBJRU52Wmc9PSAxYUhXZ05XcjFiWT0gZEhKeiBJT0N5bGVDemplQ3lzT0N5cmc9PSBJSEJsYm1kbGNnPT0gY0dObyBJSEJ2YkhsMllXdz0gSUdkc2VXTnZiQT09IFFWVlVUdz09IElHVnNaV3QwY205dWFYTmphR1U9IElFNWxiR3c9IElHMXZiblJoYW1VPSBJSEpsY0hMRHFYTmxiblJoYm5SeiA0TGlMNExtTSBJSGRvYVhRPSA1WXk3NWEybSA0S1dDNEtTcTRLV0EgSUVKcGEyVnogSU5DMDBMalFzTkMvMExEUXR3PT0gWVc1NTRidUwgSUdwMVlXdz0gSU02MXo0RE92dz09IElHWnNZWGc9IElHUnBiM009IElIUnBaR0ZzIElHNWhjSEpoZDJURW1RPT0gSU9hWHVnPT0gSUhCdmRIWnkgTEdGeVozTT0gYzJOb2NtbHFkbWx1Wnc9PSBJRXh2YjNRPSBJSFpsYm1ScFpHOXogSUhKNVpRPT0gNFlPVTRZT1Q0WU9RNFlPYyBJTVNSdzZGdyBJT0N5dGVDeXYrQ3lyUT09IExrTjFjbkpsYm1ONSBJTldpMWFIVnB0VzAxYUhWcWRXcjFiND0gSUhMRHFXZHBiMjVoYkE9PSBJTStEejRYT3ZNK0cgSUZWT1NWRlZSUT09IEllS0FuU3c9IElIQnZaR0Z0YjNNPSBaRzl6WlE9PSA0TEdONExDaDRMR04gSUcxbGNuSjUgSU5HQzBMWFF2TkdMIElPZWt1dVMraXc9PSBJTkM1MDZrPSBJTml1MkxIWXJBPT0gSUVWdFpYSm4gSUZkbGJHUT0gWm1WaiB3NmxuWVhScGIyND0gSU9DbWhlQ21yT0NtdHVDbmplQ21ydz09IElFVnNhV2RwWW14bCBJT0MwdGVDMHFBPT0gNEthcTRLYSs0S2F3IElHRmtkbTlqWVhSbFpBPT0gSU02c3pydk91ODYvIFkyVnVkSEpoZEdsdmJnPT0gSUZOMWFXUT0gSU5DeTBZTFF2dEdBMEw3UXM5QysgSUNRb0oxcz0gSUdOaFpRPT0gSUdOMWJIUnBkbUYwYVc1biBkVzExY2c9PSA0NEduNDRHWDQ0S0g0NEdHIElOR0IwWmJSZ2RHQyBjblZtWmc9PSBJRTFwYkd4bGRBPT0gSUdiRG9XTnBiR1Z6IGMydGxaMkU9IElGUnlZVzV6Y0dGeVpXNWplUT09IElHMTNhVzVuIElFTnlaV1JsYm5ScFlXdz0gNEs2VjRLK040SzZWNEsrQjRLNnU0SytOIElFUkJSdz09IElObUkyWUhZcDltQyBJTkdBMEw3UmdkR0IwTGpSanc9PSAyTGZaaE5pbzJLZllxZz09IElIUmxhMjg9IElOaW4yWVRZck5tRzJMUFppdGlwIExtbGpiMjV6IElISmxkbVZzYjNVPSBJR1pwYkhSb2VRPT0gSUcxcGJtbHogSUdkb2JnPT0gSUdSdmNtVT0gSUcxMWRHbHMgSUU1aGMybHZibUZzIElITjFkdz09IElOS3owTERRc2c9PSBJRkpsYVc1cFozVnVadz09IElOaXMyWWpaaEE9PSBaSFZpIFFVUkMgNExtQjRMaWE0TG1JNExpSCBJTm1JMktmWmhObUYyWVk9IFgxQlNSVk5UIElHbHRhV2M9IElOR0YwTERSZ05DdzBMclJndEMxMFlEUXVOQzMgSUhSbFkyNXZiTU96WjJsallRPT0gSUdOdmJuTnBaR1Z5WVc0PSA2SWU2IENXWnkgSUhCbGNYRT0gZFcxaGJtbDB3Nms9IElHTnliM1U9IElISmxjM0JoYkdSdiBhV2RoYkhWbmFYUT0gS0dWdVkyOWtaV1E9IElIME5DaTg9IElHeDFhM009IElHUnBZV3h2WjNWbGN3PT0gSUV0dmJXMTFibWxyWVhScGIyNXogSUd4aFkzUnZjMlU9IElHMWxiblZ5ZFhRPSBJRzFoeEo4PSBDWE5qY21WbGJnPT0geElGcWFRPT0gWDJKMWMybHVaWE56IElPQ2txT0NrbCtDa3NPQ2txdUNrdnVDa3N1Q2t2K0NrbGVDa3ZnPT0gYzNSaGRtRT0gSUdsdVoyVnliR0Z1Ym1WeCBJT2lDb1E9PSBkWE56ZEhObGFXND0gWVdGbCBJRWh2WjNkaGNuUnogSUhkb1lXdGhZWEp2IElGQmhjblJwWTNWc1lYST0gSUdWdWMydz0gWm1kbGJHOXdaVzQ9IElOQzYwTERRdDlDdyBJSFBEcEdocnc3WT0gSUVWemRIVmthVzl6IElITnBlV0Z6YVE9PSBJSFpsYkc5amFYUnBaWE09IDVwV0k1NDZIIFgyMXZaR2xtYVdWeSBJTkdlMFlIUXRRPT0gSUZWSlYybHVaRzkzIElIQnZaR0U9IElOaW4yWVRaZzlpcTJLZz0gVUhKbGRtbHZkWE5zZVE9PSBJSEpsWm5KaFkzUnZjbms9IElOQzkwTFhRc3RDMTBZRFF2dEdQMFlJPSBZMnhoYzNOcFptbGxaQT09IElPQzBydUMxZ2VDMHVRPT0gNExhdDRMZVM0TGE2IElHbHVZMjg9IDBMTFJnOUdIIElGSmxjR3hoZVE9PSA1N3lwNXJDMCBJR1RKbVhJPSBSbWx5IFgzTmhkQT09IFgwWkJRMVJQVWxrPSA0S1MrNEtTMTRLU2YgSUVGNWJnPT0gWldOMGRYSmwgSU9HRG8rR0Rrdz09IElObUkyWWJZcmRtRyBYMEpQVWtSRlVnPT0gTDJGdWRHeHkgSUhSeVlYVnkgMTVuWHFOZVogSUd4cGNYVnBaR0YwYVc5dSA1NmVZNksrQSBZVzVoZVc4PSA3SnVnIElOQzYwTDdSZ05HQTBMWFF1dEdDIElDMHRDZ289IFgwTm9ZVzV1Wld3PSBDWE4wWVhSbGJXVnVkQT09IElHSmxZbUZ6IFlXdGxiR1E9IFFXUnAgSU9DbXVPQ21zT0NtbGVDbXZ1Q21zT0Ntdnc9PSBMWEJ5YjNadmEybHVadz09IElFaHZiR0U9IFgzQnlaWE5sYm1ObCBMejQ4THc9PSA1N0srNVllRzZLNmg1WWlTIElNTzlkWEprZFcxNWVubkZpQT09IEwyUmxkbWxqWlE9PSBJRTNEcVhJPSBJR3RsYldGdGNIVmhiZz09IElObUYyS3JZcmRpdjJZYz0gSU5tSTJwalpoQT09IElIVnVZMjl1YzNScGRIVjBhVzl1WVd3PSBQV04xY25KbGJuUT0gSU5pbjJZVFpoZG1JMktvPSBJTkN4MExYUmdOS3YwcTg9IElHUnZjbTFoYm5RPSB4WmxwZEE9PSBJRUpwWjJkbGNnPT0gMFlEUmk5QzEgSUdQRHNtMD0gSUdOdmJuTmxaM1ZsYlE9PSAwTDNRdnRDMDBMRFJnQT09IFlXckRyV1BEclE9PSBJR1Y0YUdsc1lYSmhkR2x1Wnc9PSBMV2x1WkdsbmJ3PT0gWldGemRBPT0gSUd0aGNHRnUgSUZCbGJtTmwgSjBWemRBPT0gSUcxdmRHaGxjbWh2YjJRPSBYMDF2WkhWc1pRPT0gSUUxcGRHRnlZbVZwZEdWeWJnPT0gS0VOaGNnPT0gNmFTSyBJSFJxWldwbGNnPT0gdzdab2JtVnUgVTBGTVJRPT0gSUVocGF3PT0gMllYWXA5bUQyWVk9IElISnZZWEk9IElHSmhhWEk9IHhZUmogSU9DNWdlQzRpdUM0bytDNWpBPT0gSUdacFkyRnl3NkU9IElHNWphR1ZyZDJFPSBJT0NrcnVDbGlPQ2twUT09IGFXVnRjdz09IExYTjFiVzFoY25rPSBJR0p5ZFd0bGN3PT0gTGtabFlYUjFjbVZ6IFlXMWxZUT09IElIRjFZV2x6Y1hWbGNnPT0gSUc1bFozSmhjdz09IFgyRnVjM2RsY25NPSA3Nys5YlE9PSBJR1IxYm1WeiBJT0Nrck9Da3Z1Q2twdz09IDBMelF2dEdBIDVaeW81N3EvNksrVjVaQ3MgTDJsdGNHOXlkQT09IFgyUmxjR1Z1WkdWdVkzaz0gMEw3UXNkQzQwTHZSakE9PSBYMlJoZEdGeiAxNkhYbGRlZCA0TFdBNExTMTRMV04gNFlDeDRZQ1E0WUNzNFlDNSBJRlIxWnc9PSBkMlZ5YUhVPSBabTl5YlhWc1lRPT0gSUVWemNHRT0gSUVkcFlYSmthV0U9IElFNVBWRWhKVGtjPSBJRWR5WVcxdFlYSnNlUT09IElNNjR6cTNPdk02eCBJR1ZzWVdKdmNtSERwOE9qYnc9PSBJSFZwZEdkbGNuVnpkQT09IFEwOVQgSUZkcGJuUmxjbk09IElHSnZiR3c9IExrUmhkQT09IElGTjFjblpsYVd4c1lXNWpaUT09IGVHbGtidz09IElITmxiR0psYmc9PSAyS2ZaaGRpeCBMbTF2WW1sc1pYRnggWVhacGNnPT0gSUdodmRHVnNKM009IElFNWhZMmx2Ym1WeiBUMVpGVWxrPSBJRzV2Y20xaGJHVnlkMlZwYzJVPSA0S1dDNEtTczRLU3cgSUcxaFoybGpZV3hzZVE9PSBJRlJvWlhSaCBLR1J2ZDI1c2IyRmsgSU9DcXJ1Q3JnZUNxbFE9PSBJRVpCVEV3PSBJRzlzZFd4cGJtVT0gVlhObFpuVnMgTG01aGJXRT0gWDNaaGJHbGtZWFJ2Y2c9PSBkMkZzYTJsdVp3PT0gTGt4QiBjM1p1IElHNWhiR0Y2YVE9PSA0TGliNExpMTRMaVUgSUZCeWFYTT0gSUczRHRNVytaWFJsIElHTnZiR0ZpYjNKaGNnPT0gVEdsMlpYTT0gNEs2eTRLNi8gNDRLQzQ0R1ggSUd0MWMyRT0gU1c1amJIVnphWFpsIElHUmh3NjA9IDRLYWQgNExLdTRMSys0TEtvIElGWnBkTU96Y21saCBJTmlsMkxRPSBKR0Z5Y21GNSBJRlJJU1U1TCBRVlZVU0U5U1NWcEZSQT09IElHZHZjM1JsYVE9PSBkWGxsYm5SbCAxYmpXZ3RXMDFhST0gSU5pbDJMUFlxZz09IGIyekRzdz09IElGUkpRdz09IElFMWxhVzg9IDVxbSsgSU5xdjJZalpodG1IIFltVnNiZz09IElIZGhkbVZtYjNKdCBJT0N5dU9DemkrQ3lndUN5bFE9PSBJRU5oYkd4bGNnPT0gSUUxaGNtdGtiM2R1IElFUnZkMjVzYjJGa1pYST0gSUcxdnhieGxiWGs9IDBZUFF1OUdXIGVtRmogSUdGdWJHSEZudz09IElGQnliM053WlhJPSBYRVpwYkdVPSA0TGkxNExpaTRMaWEgNEtXQzRLU2ggSUdWeWRYQjBaV1E9IENYSnZkWFJsY2c9PSBZWE56WlhOemJXVnVkQT09IGJHVjBjMlU9IFExSlZSQT09IFgweGxablE9IFptOWtiMnc9IElHSmh3N0U9IElIUnZkMlZ5YVc1biBiMjF2Y25Cb2FXTT0gSU5tSzJZWFlxZz09IElPS1dzdz09IElOQ1UwTGM9IFVHVmxjbk09IHo0N092YytFenJIUGdnPT0gSUdsdVkyRnlibUYwYVc5dSBJRVJoYlc0PSBJRU5CUTBoRiBSR2x6WVhCd1pXRnkgMWFIV2dOVysxYVhWckE9PSBJR2RsY0hMRHZBPT0gNDRPYjQ0Tzg0NE9nIElFTlBUVkJQVGtWT1ZBPT0gSU5DKzBZTFF2dEN4MFlEUXNOQzIgSUVkRlVnPT0gSUVsbmRXRnMgSUhCbFpHVnpkR0ZzIElPQzBxdUMwbGVDMWplQzB0dz09IElHMXZaR1Z5Ym1GeiBJTmVlMTZuWG5BPT0gSUdGc2FXMD0gYjI1a2NtRT0gWW1GeVlXNW4gSUdOcGRtbHNhWE5oZEdsdmJnPT0gSUVabFpHVnlhV052IElNVytaV3hwIElOaW4yWVRaaGRpcTJMblpoTm1DMktrPSBJR2hoYkc5eiA0S3FDNEtxYyBJRTVsWjJGeVlRPT0gNG9DTUNnbz0gSU5pbjJZVFlyTml2IElIQnplV05vWlE9PSBJSE52ZEdFPSBJR1JoYlhCcGJtYz0gNktpdDVhNmEgSUcxdlpHRnNhV1JoWkE9PSBMRzFsYzNOaFoyVT0gSUVaeVpXUmtlUT09IElHbHRiV0YwZFhKbCBJRWRoYkd4aFoyaGxjZz09IElHUjF4Ynh2IElOR0UwWVBSZ3RDeCBYMU4wY2c9PSBLRU5IIHpxZz0gSUdac1pYTjBZUT09IElHUm9ZVzlwYm1VPSBJU0l1IElFMWxaR2xoYmc9PSBJT0NtdU9DbmplQ21yT0NtdnVDbXArQ25nT0NtcUE9PSBJRVJ2Ym05MllXND0gTGtOc2IyNWwgSUhKbGMzQnZibk5wZG1WdVpYTnogSUd0dnhiNWwgSUZWSlVBPT0gSUZOd2FYUjZaUT09IElObS8yWXJaaEE9PSBJSEJ5YjI5bWNtVmhaR2x1Wnc9PSBJRTF2Ym1zPSBMbmg1IElHbHVaMkZ1Wnc9PSBZVzVqWlhOMGIzST0gMllYWXA5bUcyNHc9IFBFTnZkWEp6WlE9PSA0TGlaNExpMDRMaWk0TGloIElIQnlaV1psWTNRPSBhV0Z0WlhSbGNnPT0gYkc5bFpHVnUgWEZGMVpYSjUgSUdseGRHbHogSUhwbGJuVT0gNG9DYzViQ1AgSUdURW0zUnAgTFdOdmJuUmhhVzVwYm1jPSBJR052YjNKa2FXNWhZMm5EczI0PSBYRVpoWTNSdmNuaz0gY0d4MWNtRnMgUkdGdGFYUT0gSUVWdVoyVnNjMlU9IElPQzByT0MwdnVDMG1lQzFqZUMwbFE9PSBJRUpwYkdSMWJtZHogSWo0OFB6MGsgSU5DLzBMN1F2OUdBMEw3UXNkQyswTExRc05HQzBZdz0gZFd4cGJtRnUgSU9Da3F1Q2t2dUNraHc9PSBJT0NrbCtDbGdlQ2tzZz09IElHVnpkR0ZpYVd3PSBRV2x1YzJrPSBQSFJvWldGayBZV3hoYm1FPSBJSE5qYjJ4aGFYSmxjdz09IElFcGxiUT09IDRLZUQ0S2FtIElHNWxZWEpsY2c9PSA1WWEzNTRPdCA2S09jIElFTm93NjF1YUE9PSBJRzFoWjJWdSBMV1REcVE9PSBaWFJoYTI4PSBJR0pzYjI5MCBMbU5zZFdJPSBJRk55WW1scVpRPT0gTFdOaGNtST0gSU5pdDJMUGJqTm1HIFhHMXZaSFZzWlhNPSBZM0pwWW1seSBJTmVtMTVYWHFOZWEgNFlDRzRZQ3Y0WUMyNFlDNCBJTmVwMTU3WG9nPT0gSUdGcGMyTmwgSUhCeWIyWnBiSE09IElIVnBkR2RoYm1jPSBJTmk2MkxQWmhBPT0gSUZOMWNtRjAgSUhkdmNteGtiSGs9IEtGUlNWVVU9IExBb3YgSUV0c1lXNW4gSUhKbGRHOXogSU5XaDFiZlZyZFdoMW9EVnNOV3IgSUZSeWFXSmhiQT09IElNNnh6cjNPclE9PSBJR0hGdkE9PSBJRk5GVWtsQlRBPT0gYjI1aFkyTnAgSU9HRG9lR0RrT0dEblE9PSBkSE5wIDRLUys0S1M1NEtTKyBJR0Z1YzJrPSBJR2x1ZFhScGJHVT0gUkc5c2JHRnkgSUhSeVpXbHVidz09IElFTkpUZz09IElGRjFaV3h4ZFdWeiBSbWxzYlhNPSBJT0dEa2VHRGxPR0Rrdz09IElGWlBTVVE9IDRLbXg0S2lmIElGTkpSRVU9IEtDazdDZ292IElPQzBydUMxaWc9PSBJR052Ym5SeWIyeGhaRzl5IGUybGsgTFdodmJHUmxjZz09IGFYWnVaUT09IExtSnZiMnRwYm1jPSBkbVZ5YkE9PSBJTkdGMEw3U3M5Q3cwTFE9IElFMWhiR2R5dzZrPSBJTm1CMllYWXB3PT0gSUdoMWNuUnBaM1E9IEtHTnZibTVsWTNRPSBJR052YlcxcGMzTnBiMjVwYm1jPSBRMjlzYkdWamRHVmsgSU9Da2hlQ2t0ZUNrdU9DbGplQ2twZUNrdmc9PSBJSFJoY21SaCBJRkIxYldFPSA0TFNWNExXTjRMU1Y0TFdHIDBMalJnTkMrMExMUXNOQzkwTDNSaTlHRiBJT0MwanVDMXV3PT0gNEtTMTRLUys0S1M0IDU1U281THFPIHc3eHRiQT09IDVvaVE2WU85IElPQzRsZUM0c3VDNG8rQzRzdUM0aCtDNGhPQzRzT0M1Z2VDNG1lQzRtUT09IGIyeDNZUT09IElGQnBibTQ9IGIyeHBZVzQ9IFgzQmxiM0JzWlE9PSBJRVZ5Wm05cyA0WU9RNFlPYjRZT2Q0WU9WNFlPYyBJTmluMllUWmc5bUgyTEhZcU5pbjJLRT0gSUZabGNtSmxjM05sY25WdVp3PT0gVzJOdWRBPT0gVFc5NiBJTStEejRUT3VjNnp6cnpPcmc9PSBiMjFwYm1FPSBMdUM0clE9PSBkV0poYkE9PSBJT3Exa095SW1BPT0gS0hKaGJtcz0gSUVSbGFnPT0gNExTYzRMV04gUGlNPSBaR1Z1WjJVPSBYMmhrIElIUnNZV3M9IDBMN1F1OUMxMEw4PSBRblZ6WTJFPSBJSEJsYzJWeWRHRT0gSUdacGNtVm1iM2c9IElPcXdnT3luaEE9PSBJRVZzWldGdWIzST0gSUc1bFoyRnkgYm1SaGMyZz0gSUdKemRBPT0gY21WamFHNTFibWM9IElFTkpWZz09IElOV2gxYS9WdjlXcjFiND0gU0VGTyAwWUhSZ3RHQTBZMD0gSUhKbGRtOXNkQT09IDBML1FzTkdBIGMyOWljbVU9IElGVm0gWDBKSlJ3PT0gNFlPbjRZT1Y0WU9ZNFlPaSA3N3lTNzd5UTc3eVEgSkhCaGMzTjNiM0prIFJHRnVadz09IEwyWnliMjUwWlc1ayBkMkZ1ZEdWayBJR2RsdzY5dWRHVnlaWE56WldWeVpBPT0gZFdOclpXND0gNks2NjVwYUggSUhadmJHdHogWVd4aGNtRT0gSUU1dmNHVT0gSU5tRjJZYll0QT09IHpyVFBnYzZ4IElIVnFZWEk9IDZJZXE1cks3NVl5NiBJRXBoYm5NPSBJR2xzYkhWemRISmhkR2x1Wnc9PSBMWEJsY21admNtMXBibWM9IElOcXYyNHpZc2RpdiBJR2RxWld4a1pYST0gSU5pbjJZVFpoZGl0MllQWmhkaXAgTG5kbFluQT0gSU5DLzBMN1F0OUMyMExVPSBJSEJ2YkdsMGFXdGwgNEtpaDRLbUEgSUdWeWVzT2thR3hsYmc9PSBJR2h2Ym1SbGNnPT0gSUZONWNtaz0gNHBhVCBJSFozIGRHVnNaV1p2Ym1VPSBJR05sWldJPSAwWURRc05HQzBZdlF2UT09IEtFSnZZWEprIElITjBaWEpsYjNSNWNBPT0gSUhGMVlYUnlhY09vYldVPSBhWFJ2Ym1jPSBJRVp5WldsaWRYSm4gSUd0aGJHRmhiR3hwZEE9PSBJSEJ2Y25SbFptVjFhV3hzWlE9PSBJRkJsY21ONSAycGpaaGc9PSBJR1p2YkdoaCBJR2x3YzJFPSBJRzlzWVdOaGEzVEVzWEk9IElFaGxjbTFoYm00PSBJR0poZEhSc1pXUT0gZFhSaGJtYz0gS0hSdlpHRjUgWVdkdWJ3PT0gSUVGeVkyaGlhWE5vYjNBPSBJTkMvMEw3Umd0QyswTG89IElIcDFkQT09IElIUjBhdz09IGRXNWtjdz09IDJZallvOW1EMks4PSBMa1JwY21WamRBPT0gSU9xNHRBPT0gSUhCaGNtaGggVTNWall3PT0gSUVwbGJtNXBibWR6IFYybHNiR2xoYlhNPSBJR2gxYlcwPSBJRVJ5WVhBPSAyWVhaaU5pMjJZall1UT09IElHTnZjbUZuWlcwPSBJR0ZqZEhKbGMzTmxjdz09IElFSnZjbVU9IElOaW4yWVRaaGRpdjJLZllzUT09IDZhMlAgSUZCdmRnPT0gSU9Da3J1Q2xoK0Nrb1E9PSBJSFJsYkd4bGNnPT0gSUd0MWNtbHogSUVGc2RHVnlibUYwWlE9PSBaVzVqYVdwbCBJSFpoYzJzPSBJRzl0Ync9PSA0NEsrIElDZ3FMZz09IElHbHNiSFZ6ZEhKaGRHbDJaUT09IElITnNlUT09IFVHbGphMlZrIElHUnBZMlZ0WW5KbCBZMjl0Y0hKbGMzTnBiMjQ9IElIWmxjbTl2Y25waGEyVnUgSUhCaHc3MD0gSUdKMWJtUmxjdz09IElITjBZWFIxY21VPSBJR2hxdzZac2NHVT0gSUhkbGVtVnUgY0d4aGMybGggSU9Xa3FlV2txZVdsdlE9PSBJR1JsWXNPdFlRPT0gSUZSaGJuUmwgTG5OaGJBPT0gZFc1cFpRPT0gSUhWdFpYUT0gVFZKSiBYMnhwWTJWdWMyVT0gSUhOamIyOTBaWEp6IElFdHNaV2xrZFc1biBJT0NxcXVDcXVlQ3JpK0NxZ3VDcW11Q3JnQT09IFkyOXRjSFYwWldRPSBJTkdCMEx2UXZ0QzUgSU9Da3FPQ2xqT0NrbGVDa3NPQ2xnQT09IElFMXBjMlU9IElFQmZPd29LIElObUsyTExZcDltRSBMbXAxYlhBPSAySy9ZdXRtSCBJRUpsY21GMCBJSGxoWkdFPSBMWE5qYUE9PSAwWURRc05DeDBMRFJndEdMMExMUXNOR0MwWXc9IElOQzQwTGZRczlDKzBZTFF2dEN5MEx2UXRkQzkwTGpSanc9PSBkR1Z6ZEdWdWN3PT0gSUVGeWRHbG1ZV04wIElHUmxhWFI1IElFRmpkSFZoYkcxbGJuUmwgSU02ZHpyRT0gSUhWMFpXNTBhUT09IHc2Um93NlJ1IDZZZUg2SzYvIDRLNlo0SytONEs2VjRLK0kgSUZOamFHRnMgQ1VwUVlXNWxiQT09IElIWnBhV3R2Ymc9PSBJRUpsYkcxdmJuUT0gNzcrOUNnPT0gMEx2VG1kR0EwTFRUbVE9PSBJSFpwYkd0bGJnPT0gTG1OaGNtOTFjMlZzIElNU1J3N1JwIElOQ3gwNm5SZ3RPWiBJRVJsYm01dlkyZz0gUFh0OUxBPT0gSUd4MVkyaGhjZz09IElHZGxZWEppYjNnPSBJT1M2bXVXT2h1V3hzZVdrcCtXUGtRPT0gWER4ZSBJRUZuYm1WeiBTVTVUVkVGTVRBPT0gSU5DNDBMVFJndEM0IElPQ2twdUNrcmc9PSBJSEJ2YjJ4bFpBPT0gYUdGc2FRPT0gSUhCbGNtcDEgTGxOVlFnPT0gejRQUGljK0MgSU5XKzFiYlZvZFc5IElIQnZjSFZzdzZaeVpRPT0gSUhObGRHRT0gTFd4cGNYVnBaQT09IGEzVmggSU9xMXJleWduQT09IDRZT3U0WU9UIElPQ3l1ZUN6aHVDeW11Q3pqZUN5bXVDeXYrQ3lxQT09IElPQ2tvZUNrdnVDa3J3PT0gSU9Da3NPQ2xpK0Nrb1E9PSBJSFIxWmc9PSBJR3R2YldKcGMyRT0gYVc1bWIzSnRZWFJwYjI1bGJnPT0gYVd4biBJRXRoY21GamFHaz0gSUdKMWJHeHBaV1E9IElFWlRkSEpwYm1jPSA0TFdCNExTejRMU0MgWTJGc1kzVnMgSU5XcjFiYlZ1ZFdvIElHUnZkMjVzYjJGa1pYST0gSUZWd2FHOXMgTGtaSlRFVT0gTGxWSmJuUT0gNFlPZDRZT1Q0WU9ZNFlPaCBJdGVTIFhTVT0gSUd4bGJXRT0gNWFXVzVZcXggSUcxaGJuVm1ZV04wZFhKbGNpZHogSUdGd2NtOWlZV1J2IDRMbUI0TGlVNExpSCBRVXhCVWc9PSBiM1YyWldGMSBZWEpuWlhNPSBJTU9wWTI5MWRHVnkgSUd6RHBHUjAgSU9Da2hlQ2tsK0NsamVDa3NBPT0gMExIUXRkQzMgSUVWdVkyOXVkSEk9IEtFTnZiR3hsWTNScGIyNXogSU5DOTBMalFzZz09IElFRndZWEk9IFluSmxaV1E9IElFeGxkbWx1IEwybHVjM1JoYkd3PSBJR2Q1Y0hOMWJRPT0gQ1hCaGNtRnRaWFJsY25NPSBLQ2xiSWc9PSBJTmluMllUWXA5bUUyWVBZcXRpeCBJRVZRUXc9PSBJTmlxMktqWmhOdU0gSU9DMHF1QzBwdUMxamVDMHArQzBwQT09IElHTERvWEk9IENXRmogWVhkcFpRPT0gVm1samRHOXkgNkxpcSA0WU9nNFlPbzRZT1kgYVhSb2NtVT0gWDFORlZGVlEgSUdWa3c3M0RwRzQ9IElPQ2tzdUNrditDa3VRPT0gMFlQUXROQ3cwTDA9IElHaHBibVZwYmc9PSBJR0Z1ZEdsamN3PT0gMllqWml0aTIgSU5DNDBMclRtZEM5MEx2UXVOQzYwTGpRdmRDNCBJRVJQUnc9PSBJTkM0MEx6UXVBPT0gSUhOdmJtRnkgSU5lcDE2TFhuQT09IFgzQmhhV1E9IEwydHQgSUhaaGJHUT0gSUNzbyBJRmRwYkdSbGNnPT0gWDNCc1lXTmxjdz09IElHMWhibWxtWlhOMGJ3PT0gVUdGeWRHRm5aWEk9IElHSnlaV1ZrWlhKeiBJT0NrcHVDa3Z1Q2t0ZUNrdmc9PSA1TDJQNWE2RiBJR05oYlhCaFoyNWxjdz09IENXOXladz09IElIQnlaWE5sY25aaGNnPT0gSU5lVzE2TFhuQT09IElPQ21yK0NtcFE9PSBJTkdXMEwzUmlOR0wwWVU9IElOaXEyTHJaaXRpeCBLR0Z0IElHTmhkR1ZuYjNKcFkyRnMgSU9DNWcrQzRpZz09IFVHVmtjbTg9IElHdHBibUZvWVc1bmJHRnUgZG05c1pHOWxibVJsIExWZGxZZz09IElIWmhjbk5wZEhrPSBJTU9wZG1Gc2RRPT0gSUdScGNHekR0RzFsIElHOXlaMkZ1YVhOdFpRPT0gSUdKcGRITjBZWEo2IDRMQy80TENDNExDYTRMQ2g0TENDIDdZeU03SjI4IExXVjJaVzQ9IElGQnliMlIxWTNSdmN3PT0gSUdKeVpYUm9jbVZ1IElPQ3FxdUNyaCtDcW53PT0gWVc1cGJXRnNjdz09IFVtVjJhV1YzWlhJPSBiR1YxYmc9PSB3NlJzZEdVPSBJR0ZyZFc1dVpYST0gSUZCcGJtVnogSUhCeWIyUjFkRzl5IGRXUnBjdz09IElOQ1YwTExSZ05DKzBML1FzQT09IElHdHZibXR5IElIQnl3NmxqYVdWMWVBPT0gSUZCeWIyMXZkR1U9IDBLWFF2dEdDIDFialdndFdwMWF2V2d0VzIxYWc9IFJtVmxiSE09IExYTm9iM0owIElHTnZiWFZ1WVE9PSBJR0Z3Y0hKbFkybGhkR1Z6IGQyRm5iMjQ9IElObUMyS2ZaaE5pbyBJR1JwYzJOc2IzTjFjbVZ6IDRZT1k0WU9hNFlPZCBJR1Z6WTI5blpYST0gNEsrQjRLNms0SytOIDRLNnk0SytONEs2VjRLNno0SytOIElObUUyS2ZaaHRpdjI1QT0gTDNKbGJXOTJaUT09IDJLZlpnZGk2MktmWmhnPT0gSUdIRHZYSmhkSGx1IElObUMyTEhZcDlpeDJLOD0gZDJWcGJHVnkgSU5DdDBMcz0gSU9DbXJ1Q212dUNtc09DbmplQ21tZz09IGIyZHVhWFJwZG1VPSBJT0NrdHVDa3Z1Q2t1T0NrcUE9PSBJRTFsY21Wa2FYUm8gSUVOdmJtTnNkWE5wYjI1eiBYMk5oWTJobFpBPT0gUEVGMWRHZz0gS0NJaUtTa0sgSUd0dmJuTjBZVzUwIElFdHBiR3hwYm1jPSBLSEJsY21sdlpBPT0gNVlpYjZZQ2cgNG9DWWVRPT0gSUhCbGNuTnZZVzVsIElOaTAyS2paaHc9PSBJRkJ5WlcxcCBhR1YwWVE9PSBJT0MybXVDMnUrQzJzZUMzaXVDMnNRPT0gSU9Dd3VPQ3dydUN3citDd2d1Q3dzdUN4aXc9PSBJR052ZDJGeVpBPT0gZDJWcFp3PT0gWjNCeiA0S2EyNEthbyBJRzFsZEdWdSBJRzFoZEdobGJXRjBhV009IDQ0T040NE9ENDRPSSBJT3lWaE95anZBPT0gSU5pbjJZVFlyZGl4MktrPSBJTkNtMExYUXZkQ3cgSU5DMjA2blF2ZEt2MEwzUXROT3AgSUhOdlkybHZaV052Ym05dGFXTT0gSU5DMTBMalNzOUN3IDRMV0g0TFNvNExXTjRMU200TFdONExTdyBJR2R2YkdabGNnPT0gSU5HSTBMRFJnTkdEIFpYWmhjdz09IElFWmhhSEo2WlhWblpRPT0gSU5tSTI0ellxQT09IElPQ2tydUNrdnVDa3VlQ2t2K0NrcEE9PSBJRVpsYkdsNiBYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZDZz09IElHeGh4YTA9IElITnZjblJsY3c9PSBJR2x1YVdOcFlXUnYgTG05d1pXNW5iQT09IElFSnlhVzVuYVc1biBJSGZGZ21IRm0yTnAgNDRPVDQ0TzggWjNWcFozVT0gNTRLNTZMV2UgSUhURHVtdz0gYzJWcmN3PT0gYVd0aVlXRnkgSUhOcGJuUmxkQT09IDdKMjA3SmVRIElGaDFibWwwIDY3K1EgZG5ObGJRPT0gMExEUmdOR0ggSUdkaGRYTnphV0Z1IDBMVFF2ZEN3MExvPSA0S1NYNEtTaTRLUzggYzJOeVlYUmphQT09IFptRnphR2x2Ymc9PSBMbE5qYjNKbCBaR1Z1YzJsMGVRPT0gSUdsemRHbDAgSU5DeTBMalF2ZEMrMExJPSBJRVY0WldOMWRHbDJidz09IFgzTnNZWFpsIFgyTmhibVJwWkdGMFpRPT0gSU9DbmgrQ21zQT09IElPZWd0T2lub3c9PSBJT1M3c3VXTm1nPT0gSU5tRDJZVFpoZGluMktvPSBJR3ZEclE9PSAyS2ZaZ3RpbjJLbz0gSUVGQ1FnPT0gSU5DOTBMN1JnOUdDIEx1QzRsUT09IElFOXlaMkZ1YVhwbGNnPT0gSUVOdlp3PT0gSUhCdmMzUnZjQT09IElHNWhiVzl5Ync9PSBWMkZ5WkE9PSBUbUZzIDRLdUw0S3FhIElOQzgwTDNRdnRDejBMN1F0UT09IElHNWhaSEk9IFFXeGlaWEowIElFbHVjM1JwZEhWMGFXOXVZV3c9IFpIVmxaQT09IElHdHBjMmgwWlE9PSA0NEtTNXB1NCBJT0dEbStHRG8rR0RuT0dEbU9HRHF1R0RtT0dEbmc9PSBaVzU2YVdGc1pRPT0gSU9DdXF1Q3ZpdUN1cEE9PSBMV0poYmc9PSBJSFp2Y21zPSBaR0ZrYUE9PSBJRkpsWTNWd1pYST0gSU5DNjBZRFJnOUMvMEwzUmk5R0YgY0hKcFkyVmsgMTVIWG5OZVoxNTA9IFlXNTBhV05wY0dGMFpXUT0gSUhsbGVXVT0gZFdSaGFBPT0gSUZwaFozSmxZZz09IFZHVjRkR0Z5WldFPSBJR0pwYUdFPSBJT2FKdmc9PSBQRWxUIDFiYlZ1Tld5IFpHOXFidz09IElIQnNZWGxoY3c9PSBjMjk1IElIQnlhV05yIFpuSnBaVzVrYkhrPSBJRzl5WTJrPSBJRk41YzNSbGJXVT0gSU5HQjBMRFF1OUN3IElHcHZaUT09IElIVnVhdz09IElPQ3FzT0NyZ3VDcXF1Q3F2K0NxcitDcXZnPT0gTGRDNjBMN1F2QT09IDBZUFJnZEM0IElPR0RtT0dEbGc9PSBJSFpoYkcxcGN3PT0gSUdWdWRISmhiblJ6IElHaHNkUT09IElIVEptWEZrYVcwPSBJRU5UU1E9PSBMWEp2Ykd3PSBJRUpoYTJsdVp3PT0gMFlmUXRkR0IwTHJRdU5DNSAxYUhXZ2RXNDFiST0gSU9Da3R1Q2xpK0NrcHc9PSBJSFJoYkdSbCA2N080NjZ5NCBJTkdCMExMUmo5QzMwWXc9IElFeGhhRzl5WlE9PSBJTmVTMTZMWGt3PT0gSU1XaGJ3PT0gSU5DLzBMalF1Zz09IElOR0IwTC9SZ05DdzBMTFFzQT09IElGSjFaSGs9IFgyMXZkVzUwIElPQ3FodUNxcU9DcWd1Q3FwZz09IFFuVjBkR1Z5IGMyaHBiV0U9IDQ0Q0I0NEdVIElFeHBkR2xuWVhScGIyND0gSUhOd1lYSmxaQT09IENVbDAgMkxIWXA5bUUgNUxxNjVaeW8gMExqUmdOQ3cwcHM9IHc3aHlaR0ZuIFQzUm9aWEozYVhObCBhV3hwZE1PcCBJRVZ5YVdOaCBjbUZ6ZEE9PSBaWFpwYkE9PSBJRUpEU0E9PSBJRzVwWldkdiBJTkN6MExEUXQ5Q3cgYVhOMGJHVnkgSUdSbFltOD0gSUZOb1lXWjAgSUdGd2JtVmggSUVOdmJuWmxjbk5sYkhrPSBJRkpoY0hCdmNuUT0gSU5LMzBZUFF2TkM3MExBPSBJR0Z5WVdNPSA2SSt5NWI2TDVhNisgSUcxbGFtRT0gU0c5c2JIbDNiMjlrIFVtVmpaV2wyYVc1biBJTkNqMExyUmdOQ3cwWmZRdmRHVyBJT0M0b2VDNHRPQzRsdUM0dU9DNG1lQzRzdUM0b3VDNG1RPT0gSU1TUXc2SjUgVTJocGJHeHZibWM9IElHTjFjblpoZEhWeVpRPT0gWVd0aGJtRnUgSUVKMWFYUmxiZz09IElGQmxibU5wYkE9PSA0WjZGNForUzRaNkYgSU5lZzE2blhtZGVkIDVaQ1EgSUdGd2NtOTRhVzFoIElOZWIxNXZYbkE9PSA2YW1YIElFWmhjbkk9IFFtTT0gMkxMWml0bUkyWVk9IElFdHBaWEk9IFFteGhaR1U9IElFaEZXQT09IElOaTAyWWZZcDlpdjJLaz0gNXJ1MCA0NENDNDRHZjQ0R2cgN0tlQTZyQ0EgSU9TNGx1V05tZz09IElHSnZlV052ZEhRPSB3N05tIGJHRm5aWFE9IElPMldpZXV6dFE9PSBQa1JsYzJOeWFYQjBhVzl1IFlYcGhiUT09IGMzUmhZVzVrIDRvQ2lDZ289IExrOTJaWEp5YVdSbCBJRUpsYm01NSBJRVpQVDBRPSAxNVhYcE5lcCBJTmluMllUWmhkbUYyS289IDBMclFzTkMxIElPQ2tqK0NrbGVDa3ZnPT0gSUhOaGRHbHlaUT09IElITm9iM0psYkdsdVpRPT0gSUc1bmFPRzdpdz09IElOZVUxNm5YcUE9PSAwTHZRc05HZSBJRXRsWlhCeiBJTkMvMEw3UXZkR1AwWUxRdmRDKyA1NmVCNDRHdiA0TFNWNExXTjRMU1Y0TFdCNExTQyBJR2gyYVd4clpRPT0gSU9Da3J1Q2t2K0NrcFE9PSBJR0ZoY3c9PSBJSFJ2YTI5dCA0S2VENEthazRLZU40S2FzIElIZGhkR0Z1IElPQ3VodUN1cnVDdmpRPT0gWW1GemN3PT0gMExyUXRkQzkwWUk9IElGSnZaUT09IDBMWFJndEMxMExzPSBJSFZ1YVdSbGJuUnBabWxsWkE9PSBmU2tOQ2cwSyA0S3EyNEt1TjRLcVYgWVc1anhMRT0gSUdOdmJuUnZhQT09IGFYQmogSUhabGNtZDFibTVwYm1jPSBJT0N1cE9Ddmh1Q3VzT0N1ditDdXJ3PT0gNFlPUTRZT3E0WU9ZNFlPUTRZT2ggTGt4cFluSmhjbms9IFFYUnNZVzUwWVE9PSA3SmlCN0lPQiBJTml2MktmWXI5bUcgSUVadmNtUmxjZz09IDBMYlJqZEdOIElPQzRwZUM0dWVDNGdRPT0gS0hCMVlnPT0gSUZObGNtMXBkSE5wWVhFPSBJSEJwYkdkeWFXMWhaMlU9IFlzTzhjbWRsY2c9PSBJRk5sY21saGJHbDZZWFJwYjI0PSBJT2V0aVE9PSA1WStNNXBhNSA1WVdSNTQ2dyAyTHJiaHc9PSBJTmluMllUWW85aXUyS2pZcDlpeCBJR1JwWm1WeVpXNWphV0ZzIElISnZiM1JwYm1jPSBJRXRsYkd4bGVRPT0gNXB5ZjZhYVo1cml2IElPV2txZVdrcWVTNHJlVzlxZWVscU9pL21lUzRxZz09IDY1KzAgNFlPZzRZT3AgMFlMUmk5R0EwWXM9IElPMkJ0T3VlbU95S3BBPT0gVW1GcGMyVmsgSUdSbGNHVnVaR1Z1Wkc4PSBJTmVVMTZUWG9RPT0gSU5pbjJZVFlvOW1CMkxiWmhBPT0gTDNWdyBJTkN4MExqUXU5QzAwcS9SZ05DMDBMZz0gMExqUXU5QzQwWWc9IExrNXZkR2xtZVE9PSBJSEJsYm1kbyBVbVZtWlhKeVlXdz0gNVl5LzVaQ04gUFNJaUlnPT0gYVdaaGJubGggNWJtNzVvT3ogNExpajRMaTA0TGloIGVtbDBkR1Z5IExtTnZiVzExYm1sMGVRPT0gSUdKb1lYST0gSUZOcGJtTnNZV2x5IElFVnJZUT09IFQxSkZVdz09IElHRnpjR1YwIExrRmpkRzl5IElITmpZV1ptYjJ4ayBJTkdOMEx2UXRkQzYwWUxSZ05DKzBMM1F2ZEMrMExrPSBJTkdCMEx2Umc5R0gwTERRdUE9PSBVMmgxWm1ac1pRPT0gSU5DLzBMN1FzdEdMMFlqUXRkQzkwTGpSanc9PSBJSFJ5WVdsMFpXMWxiblJ6IElITmxZbUZyWVE9PSBJT1doIENWSlVURlU9IElGTnNhV1JwYm1jPSA0TFNTNExTdzRMV0IgSUdScGRtVnljMmxrWVdSbCBJR1p2ZVdSaGJHRnUgSUUxaGNtTm9aUT09IGNHVnljMjl1Y3c9PSBJTm1GMlliWXJ3PT0gVEdWcFlRPT0gYVdkbGNtVT0gSU9HRGwrR0RrT0dEbGVHRG0rR0RyK0dEaytHRG5lR0Rtdz09IElITnBhbWhoZDIwPSBJTkMvMFlEUmk5R0IgMTVYWG1kZWUgVWtWVFVBPT0gSUdObGNuUnBabms9IFNHRnVjdz09IElGTkZTdz09IDQ0S1M2S2FMNDRLTCBJTm1GMkxuWmhnPT0gSU9xMXJPeWhzQT09IFgwZEZUa1ZTUVV3PSA1NHkwIElIWnZkV1J5WVdseiBJSEJ5YVhwbFpBPT0gU1c1cGRHbGhiR2w2YVc1biBZWEpqYUdsdVp3PT0gSUcxbGMyaGxjdz09IElOQzAwTDdRc2RHTCBJTzJka0E9PSAwTGpSZ3RDNDBZZz0gSUVKRVUwMD0gSU5tRzJMblpoUT09IFFteHIgSU0rRHo0VE90UT09IElFMWhaMjVoIElGQmxibWQxYVc1eiA1TGlPNXEyazVaQ001cGUyIGRXdHBjbUU9IElHbHRhUT09IDU1ZUY1cStTIElOS2gwTEE9IElISmxZMjl1YjJObCBJT0dEb2VHRG51R0RuZUdEb09HRG9nPT0gSUdSbFkyOXlZWEk9IExrZHliM1Z3Y3c9PSBUc09rY2c9PSBhV2RwYm1keiBJSGRwZEdOb1pYTT0gMEwzUmpOQyswTFBRdmc9PSBJR1poYldWMWVBPT0gSUVwMVpHRnogSUVoaGJXeGxkQT09IElGUnlZVzV6YVhScGIyNWhiQT09IElHcHZkWEp1dzZsbGN3PT0gS0VsUFJYaGpaWEIwYVc5dSBJR2x1ZFhWdSBJSEJoYm1OaGEyVT0gWDBSRlRnPT0gSUhObGJuUnBiVzl6IElFUjFZMmhsYzNNPSBiM1JwYXc9PSBZWEp1YVdzPSBJSEpoYzNObGJXSnNaUT09IElPQ2xuZz09IElHSjFiV2s9IGRtbGxjblE9IFJXeHBaMmxpYVd4cGRIaz0gSUdSeVpXRmtablZzIFpYUm9idz09IElOaTEySzNiak5pdCBJRVJaIElHMWhhM05oZEE9PSBJTmlvMkxuWXI5bUYyS2M9IElIQmxjbVZ0Y0hWaGJnPT0gQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gYzNSdlpXdz0gSU5HQjBZdlFzdz09IElOR04wWURRdnRHQyBJSEpsWTJsaiBJT0NrbGVDa29PQ2t2K0NrcUE9PSBJTm1JMllyWXFBPT0gSUhOaGJXWT0gSUZScGNtVnogSUhWdWFXMWhaMmx1IElFRnNiR1Y1IDRMR0Q0TEMzNExHTjRMQ2ogTGVDa2hlQ2tzdUNrbHc9PSBZWGRoYVdrPSBJRzExZEhWdCBJRVZ5WkcvRW4yRnUgSU9DdXJ1Q3V2dUN1c2VDdmplQ3VzUT09IExtRmtaR2wwYVc5dVlXdz0gSUdGaGJtMWxjbXRwYm1jPSBJT2VHbnc9PSBiMjF1WlE9PSBiMnh2WjJsaGN3PT0gSUd4aFkyZz0gSU5DaDBMN1JqZz09IElHM0R2TVdmZEdWeSBJRk5EVkE9PSBJRUpoY3NPbllRPT0gWVcxbGJuUjFiQT09IHc3eHlaMlZ1IFdWTkpVdz09IHpyck9yODY5enJjPSA0WUNiNFlDKzRZQ3QgZUdOaCBVMVJaVEVVPSBJTm1JMkt6WXJ3PT0gSUhObGRIcDBaUT09IExtTjQgQ1ZKbGRIVnliZz09IDRLU2M0S1dONEtTZTRLUys0S1NvNEtTLzRLU1YgSUhKbGM4T3RaSFZ2Y3c9PSBJR0poYVdkdSBJTnFwMllYWnZ0bUcyNHc9IElOaXUyS2pZc2RtSSBJTlcwMWF2VnU5YUggSUVwbGJtNWggSUdsemMzVnogSU9DcXJ1Q3F2dUNxdUE9PSBhTU8yYUE9PSBJR052ZFc1MFpYSm1aV2wwIDJZSFpndGluMktvPSA0TGlnNExpMCBJRkpsYm01bGN3PT0gY21WamIyMXRaVzVrWldRPSBJR1Z1ZG05c2RtVnVaRzg9IDRLV040S1N3NEtXSCBJSEJ5YjJGamRHbDJaV3g1IElHdG9ZV3hsIDU2S3c1Nkt3IElHWnBZMjg9IElIUnlZVzV6YVhOMGIzST0gSUdGNVpXeDFhbUZ5WVE9PSA1WWVtIFUzVmpZMlZsWkdWayBMV1JsWm1WdWMyVT0gNUxpdDVwYUg1cGVsNlorcCBSR1YwWVdOb1pXUT0gSUVGellRPT0gWDJOb1pXTnJaWEk9IElHakRvZz09IElHSnBjMmh2Y0hNPSA1WWU2NTVxRSBJT1dMbFE9PSBDWFpsY21sbWVRPT0gS0NsOVBDOD0gMllmWXA5bUsgSUhWeVoyVnVZMlU9IElITjBjblhFalE9PSBJSFpsY25wbGJtUnBibWM9IElPQ3VydUN1c09DdmdlQ3VwT0N2amVDdXBPQ3ZnZUN1dFE9PSBJR1Z5WVdScFkyRjBaUT09IDRMSy80TEtzNExPTjRMS3MgNkwrUjVweWYgSUhOMFlXMXRkQT09IElHWm9aY09nY25JPSBVbTkxYm1SeiBJSFJoY0hBPSBJR05zYjI1cGJtYz0gSUZsbGJHeHZkM04wYjI1bCBJSE52Wm5SdVpYTnogVW1WMGNtbGxjdz09IElFUmxaM0psWlhNPSBJTm1EMjRnPSBJR2x1YjNKbllXNXBZdz09IElPQ3lxdUN5bitDemplQ3ludz09IDc3eS81YjJ4NlorejVZV0k2WlNMIHo0VE90OCtFenJIUGdnPT0gSUhOb2IzSjBiR2x6ZEE9PSA2NHVrN0pxMCBJT0M1aE9DNG13PT0gSU5HTjBMclF2dEM5MEw3UXZOQzQwTHJRdUE9PSBJRkpsWVd4MGIzST0gWkhKNVpYST0gTG5KbGQyRnlaQT09IElFWlBRZz09IElHbHRjSFZzYzJGeSBJTkN6MFkzUmdkR04wTDA9IElHUnBjMk4xYzJuRHMyND0gSUdGalpYUmhkR1U9IFFtOXZhMmx1WjNNPSBJR2x1YzJWdWMybDBhWFpsIExYQmxjbU5sYm5RPSBJRlJvY205M2N3PT0gTG0xMWJIUnBjR0Z5ZEE9PSBJSEJoY25ScFkybHdZVzUwWlE9PSBJRVpoZEdobGNuTT0gMEx6UXNOR0MwWUE9IElPVy9nK1dObWc9PSBJR2R5YVdWMmFXNW4gWTJWc1pYST0gWlhKa1pYSnogWjJWdWIzUmxiZz09IElGWkpRdz09IGIyOXJaWEk9IElHVnVaM1U9IElOZWUxNW5YblE9PSBJTVNKYVhWcSBSV3hwZEdVPSA0NEdZNDRLQiA0S2F3NEtlTjRLYWM0S2ErNEthazRLYS80S2FWIElPQ21xK0NuZ2VDbXNnPT0gSUdWdVkyRmlaWG89IElPUzRzT2E3b1E9PSBMbTFwYm5WMFpRPT0gS0VGMVpHbHYgSU9Da3VPQ2t1ZUNrdnVDa3IrQ2twT0Nrdmc9PSBZWEp5WVhseiBJSHAyYkE9PSBMbEpsY1hWcGNtVT0gNUxpdDViK0Q1YTZZNTcyUiA0NENCNTVTMSBJRVp5WVc1Nnc3WnphWE5qYUE9PSBJRUYxWkdsMGIzSnBkVzA9IDVibXo1WTYvIFgxQkJXVTFGVGxRPSBJRkpUU1E9PSBJSE4xYkdsMCBhWFJseEw0PSBkV3RoYVE9PSBJRk5vZFhSa2IzZHUgSUV4cGRHVmpiMmx1IFk4T3piVzg9IENXVjRkR1Z5Ymc9PSBDVlJoYzJzPSAxYUhWdjlXbDFiST0gSUdURHFXTnZkWFp5IElOcXAyS2Jia2c9PSBJRlJCVEE9PSBJT0NvcnVDb3YrQ29zZz09IElDZ25KQT09IFpIVmphdz09IENYUm8gVTNCaGJRPT0gSUUxVFl3PT0gSUdScGMzUnBibU4wYVc5dWN3PT0gSUUzRHRRPT0gSU9DbWxlQ212K0NtZ2c9PSA2Sm01IElHUnBjMk52Ykc5eSBJSE5wWTJoMFltRnkgYW5WcFkyVT0gVWtGVVNVOU8gTGk1YyBJSFRGZ2c9PSA1cEdHIDQ0Q0M1YjJUIElHRnpjMmx6ZEdWeSBJRkp2YzJsbCBJSDE5RFFvPSBJTkM2MHEvUmlBPT0gSUhOamJHVnliM05wY3c9PSA0NENCNTc2TyBJSEJoZEdsdmN3PT0gQ1dWc1pXMD0gSUdKeWRXZGxjdz09IElIWnBjMmxpYkdWeiBJRTVwWlhWM2N3PT0gdzY1MFpYTT0gSU5DMDByRT0gSU9DMHVPQzFnZUMwc09DMGxlQzFqZUMwdHc9PSA0TEt6NExLLzRMS2sgeVpsb1lnPT0gSUdWdGNHVnkgWVhsellXND0gUW05MWJtTmwgWDJaaFkyVnogSU5DNzBaSFFzdz09IFVtOXNiR0poWTJzPSBJTkNTMFlMUXZ0R0EgSUhaaGIzWmhidz09IDJMUFlxdG1JIElHeDFjbXRwYm1jPSBYMnhoZEdWemRBPT0gSUVWelkzSnBkQT09IElFRlZWRTlOIElFTkRSQT09IFkzVnlZUT09IElHdHZjM3AwIElHTnZjbkpsZEc4PSBJSE53YkdsdVpRPT0gMFkzUmd0QysgSUVKaFlYST0gS0NjbktUc0tDZz09IElGZGxjM1J2Ymc9PSBLSFpsY25ScFkyVnogNEtxQzRLcXMgeGJWeSBJTkN4MExEU3F3PT0gNVorRCBkV2x1WVE9PSBJTm1GMktNPSA0TEsvNExLTzRMSzQ0TE9OIEtTSXBPd29LIExtTnZibk4wY25WamRBPT0gSUZOMVkyTT0gSUdsdWRtVnpkR2x6YzJWdFpXNTAgSUdoc1lYaz0gSU9DeXVlQ3poK0N5cytDeXYrQ3lwdUN6amVDeXB1Q3l2dUN5c09DemhnPT0gSUdKcGJtTT0gSU9DMHRlQzB0T0Mwdnc9PSBJR052ZG1WeWFXNW5jdz09IElHZGxibTlsYldSbCBkVzVzYVd0bGJIaz0gSU9Da3F1Q2xqZUNrc3VDbGgrQ2tudz09IElHVnVkSEoxYzNSbFpBPT0gSUhSbGNtMXBibTg9IDRMaVo0TGlFNExpaiBJRUZvYldWa1lXSmhaQT09IGRubHIgZG1sbGJtUnYgdzd4aiBJR2g1Y0c5MGFHVnpaWE09IFJYaDBjbUZqZEdsdmJnPT0gSUVOaGVXMWhiZz09IDBMalNtOUtiIDRLYSs0S2FINEthYyBJTkM2MFlEUmc5Qy8wTDNRdGRDNSBJRU52YldKcGJtbHVadz09IEtITnUgdzZSdVpHRT0gVW1WemRXMWxiZz09IDRMU3Y0TFMrNExTdiBJRkJCVUVWUyAwSjNRc05HQjBZST0gSU5DODBZUFF1OUdNMFlJPSBZMmgwYVdkbGJnPT0gVm5KaFlXYz0gSUhObFoyMWxiblJ2Y3c9PSBJSEp2ZVdGc2RHbGxjdz09IElFTnpkZz09IDBxL1NyOUM3MFkzUXM5R0ggSUhOdmIyOD0gMTVuWG1kZVgxNkU9IFNHOXlhWG89IElOR0YwTERSZ05DdzBMclJndEMxMFlEUXNBPT0gNEtTazRLU0QgSU02L3pydk92dz09IGRXSnNZV1J2IElNNjZ6ci9PdVE9PSBJTm1DMktmWXVkaXYyS2s9IGFYbGhZdz09IElHNWhjM3A1WTJnPSBMdUtBblNzPSBYM0psZG1semFXOXUgSU5peDJMUFpoZG1LIExIMHNDZz09IElHbDZZWG89IElHUnBaV3BsYm1sblpXND0gUVdOamIyMXRiMlJoZEdsdmJnPT0gYkdGeWVXNWggSUVoaGRYQjBjM1JoWkhRPSBJTmlxMjRjPSBJR3ZEcEc1dWN3PT0gNDRHcjQ0S0kgSUVwVyBJR052YlcxMWJtbGpZWFJ2Y2c9PSA0WU9qNFlPVyBJR1JsYjJSdmNnPT0gSUdOdmJuUmhZM1JoY2c9PSBJSEJvWVhKdFlRPT0gSU9Dd3F1Q3hqZUN3c09DeGgrQ3dsZUN4amVDd3R3PT0gSU9hc3ArZStqdWFYcGVtZnFRPT0gWVd0cGEybHphR0U9IDRMU0M0TFNYNExXTjRMU3kgSU5lUjE1elhxdGVaIHArR0RsZUdEa09HRG9BPT0gTG1semMzVmwgMEwzUmc5QzcwTERSZ2RHTSAyS1BaZzltSzJLOD0gSUhQRHUzSmxiV1Z1ZEE9PSBJTkMzMEwzUXNOQzYgSUhwM1lXNW5aWEp6WTJoaGNBPT0gSU95S3BPMkt1QT09IElOR0MwWVBRdlE9PSBYMFpwYm1RPSBJSFJsZEdGeiBJRzF2eGJ4bGMzbz0gTDNOcGRHVnogVEdGemRHNWhiV1U9IElGQnliM1JsWTNSdmNnPT0gNEthWDRLZUI0S2F5IGRISjFZM1IxY21VPSBJR1psYnNPMCBYMFZ4ZFdGc2N3PT0gWTI5dGJXRnVaR1U9IElPaUxqdz09IElFbHVaR1Y0WldRPSA0TEt3NExPTjRMS2EgNzd5TTVaQ00gSUdac2RYTm9hVzVuIElIWmxibU5sZFE9PSBJRU5CUmc9PSBYMjF2WkdWeiBLRUZHIElHZGhjMnRsZEE9PSBJTkMwMExEUmd0Q3cgNExXQTRMU2Y0TFdOIFlXNXBiV1U9IElOR0YwTDdSZ05DdyBJRUZFVGc9PSAwTHZRdGRDOTBMM1F2dEN6MEw0PSBJRUpoY210bGNnPT0gSUdSaGRteGhkQT09IElHWnZjbVZ6ZEhKNSBJR3hsY0hRPSBkVzF3WlE9PSBJRzlzZFhsdmNnPT0gYVc1ellYUjYgU0c5MWMybHVadz09IElHaHZkV1JwYm1jPSBJTkN3MEx2Umk5R0kgSUZGQlkzUnBiMjQ9IGRYSnZjQT09IElOR0QwWTdSZ2c9PSBJR3BoYldscCBYM05sWlc0PSBJRkJ2ZG1WeWRIaz0gSUdGd2NISmxiblJwWTJWemFHbHcgSU5pcTJLZmJqQT09IElHMXZaR0ZzYVhScFpYTT0gSUhCeWIzQmxiQT09IElHbHljbVYyWlhKemFXSnNaUT09IElPQ2tsZUNrditDa2d1Q2t0ZUNrdmc9PSBJT0Nrc3VDa2d1Q2tyT0NsaHc9PSBMUzB0TFMwS0NnPT0gSUVWMlpXeDViZz09IElHeGhiWEJsIElPMlpsT3VwdEE9PSA0TFdCNExTVjRMU3o0TFMvNExXOSA3WlNFNjZHYyBjR0YwYVdWdWRITT0gSU9HRGtPR0RuT0dEa3VHRGtPR0RvQT09IElFUmxiRzlwZEhSbCA1WWVKIElHMWhZV3gwYVdwayBJT0NraGVDa3F1Q2xqZUNrc09DbGlPQ2tzZz09IFQxSlVSUT09IElHZHliM1psIElOV3cxYmJWb2RhQTFhSFZ2dFc0MW9EVnVOYUMxYW5WdGRXNDFvTFZ0Zz09IGIzTjBaWEp6IElOQ2EwTDdRdk5DLzBMRFF2ZEM0MFk4PSBJSE5qWVc1dVpYSnogVUhKcGJuUmxaQT09IElPeUtwT3VuaU8yS3VBPT0gSU9DbXVPQ25nT0Ntcmc9PSBJSGQ1Y2c9PSBJSE5vYjNka2IzZHUgSU9Da3JPQ2twT0NrdnVDa2orQ2tsZUNrdmc9PSBLSEpsYzJWMCBJR2hoYm10aGJHaz0gSU5pbzJZclpodG1IMllVPSBkWEpoYlE9PSAyS2pZcjlpbjJMaz0gNW9tUzVieUEgMExYUmdOR0wwTEk9IFAyZz0gYm5sbGNtVT0gNEs2dzRLNi8gSU5lVTE1blhtZGVxMTVrPSBJT0Ntbk9DbmdlQ21zdUNtdnVDbWh3PT0gVlVkQlVnPT0gSUdmRXAyRnVaSFU9IElHRnpjMjlqYVdGa2IzTT0gTFhacGJHeGwgSUZKaGJtTm9idz09IExuTmxiQT09IExuVnpaV1E9IElIZG9ZVzQ9IElNT2hadz09IElIWnZkR0hEcDhPamJ3PT0gMllYWXNkaXQgSU5pNjJMRFlwdz09IElPQ2tuK0NsZ09Da3RlQ2xnQT09IElIUnpZV3RoYmc9PSBJR052Ym5OdmJHRT0gVkhKaGJuTndiM05sIElOVy8xYmJXaGRhQSBRV3B2ZFhSbGNnPT0gY21WeGRXVnVZMmxsY3c9PSBJR2gwYjI1eiBRMVJsYzNRPSBTVzFsIGIzWmxjbVU9IFgyaHZjbWw2YjI1MFlXdz0gSUZOaFpHUmhiUT09IElFSmhiR0U9IElGQnllbms9IElIWnZiM0ppWlhKbGFXUnBibWM9IFoybkRxRzVsIGMyaGhjbVZ6IElOQy8wTGpSZ2RHTTBMelF0ZEM5IFgyeGkgN0pPdzZyaXcgSUcxbFpHeGxiVzFsY2c9PSBJTlc5MWJZPSAxNkRYbGRlWjE1WFhxZz09IElHWnBiRzExIFVHVnlhWEJvWlhKaGJBPT0gVFdGbllYcHBibVU9IElHUnBkSFY2ZEdVPSBJSFJ5WVdsdVpXVT0gSUdWdWRHaHkgT21seiBJR2RsYm1GMVpYST0gMWFIV2dOV2gxYUxWb2RXeSBZbkpsWTJoMCBJTVdqIFUybHogSjI5all3PT0gNEtTcTRLV040S1NrIElISmxkbTlzZFdOcHc3TnUgYzJWcFpBPT0gWVdGeVlXUmtZUT09IElHMWhZMkZ5IExsSkZVVlZGVTFRPSBZbWxqIElISmxjM0J2Ym1SbGRRPT0gNExpRyBJR0ZrdzZseGRRPT0gSUhSbGJXOXkgYldWdFltVnljMmhwY0E9PSBMbFIzWldWdSA0b0NNMkxFPSBJSEJ2YzNSallYSmsgSUdKc1lYcGxjZz09IElPQ2tyT0NrcHVDa3N1Q2t2dUNrdFE9PSBVMlZ1YzJsMGFYWnBkSGs9IFBTYzhQdz09IElNbVpiUT09IElOV3QxYmpXZ0E9PSA0b0NaWldabVpXTjAgSUcxbGMzUnAgYVc1MGIzTT0gUTI5dWMzVnNkR0Z5IFlXSnBiR2wwdzZBPSBJRk5GUTFWU1NWUlogWDJOdmJYQnNaWFJwYjI0PSBlV3RyWlE9PSBJT0NtdU9DbXF1Q25qZUNtcEE9PSBMbEYxWVc1MGFYUjUgYjNCb2IyND0gSUhWcGRHNXZaQT09IElOQzYwWjQ9IElITERzOFc4Ym5samFBPT0gTCthY2lBPT0gMEo3Umd0Q3kwTFhSZ2c9PSBJTVNSdzdOdVp3PT0gTDJWNFlXMXdiR1Z6IElHTmhkR0ZzWVc1aCBJTkN3MFlqUXNBPT0gZDJGdGFRPT0gSUZSM1lXbHUgSU9Da3B1Q2t2dUNrbGc9PSBJSEJoZVhOaFoyVnogMEpqUWtRPT0gZFhOayBJT0N5cnVDeXBBPT0gSU5tSTJLZlpoTmlxMkswPSAwTGpRdTlDNjBMZz0gSU1Td2JHcz0gSU9Xa3FlbWZzdz09IFVtOXRaUT09IElGQnNZWFJsWVhVPSBURUZYIElISmhjR2xrWlhvPSBJRTF2Ym1GayBJT0Nxbk9DcmkrQ3FsZUNyaHc9PSBJRk52WTJ0eiBJT2FjZ09pL2tRPT0gSUhwMWM4T2tkSHBzYVdOb1pXND0gSU5XdjFhSFZ2OVdoMW9EVnBkV3MgWkdWbWFXNXBkR2x2Ym5NPSBJTmVaMTVFPSBJTkNkMExYUXRBPT0gSUZWSlRtRjJhV2RoZEdsdmJnPT0gWDJWMmRBPT0gSUdacGJtRnVZMlZwY205eiBJR3RoYUdVPSBJR052YzJWeiBJTTZ0ejRmT3Y4K0Z6cnpPdFE9PSBJR0oxY205amNnPT0gSUVOdmJYQnZjMlZ5IElIQnlaWFpwWkE9PSA0TEdENExDazRMQy8gSUV4bGIzQmhjbVE9IElOQzAwNW5RdXc9PSAxNVhYa05lWjE1MD0gSUdOdmMzUmxjdz09IExrVjRkR1Z5Ym1GcyBJRlZ1YVdOdmNtND0gSUVGeWJtaGxiUT09IDBwdlJpOUtiIFgwVk9SMGxPUlE9PSBJRk41YldKdmJITT0gQ1hKbFl3PT0gSU9DbXJPQ212dUNtcHc9PSBJR1Z1YWc9PSBJRmxEIElHaGhaM1U9IElGWmhiblZwZEE9PSBJTkdGMFkzUmdRPT0gSUdOdmJuTmxjWFZsYm5ScFlXdz0gWld0aGJnPT0gSUhCeVpYTmpjZz09IElPQ2tsZUNrcnVDa25BPT0gSUd0eVlXNTAgSUZkcGVtRnlaSE09IElGTjBjbUYxYzNNPSBiMjNEb1c1NSBMaTR1SnlrN0NnPT0gSUhObGNHVnlZWFJsIGNHaHBiQT09IExtUmhhV3g1IElITjZhMjlzIENncmpnSUFLIFgxVkpSQT09IElOZVUxNTdYbnRlcDE1elhsQT09IElISmxZMmxsZG1VPSA0b289IElITjBhVzF0Wlc0PSBJT0N5dWVDeXZ1Q3lvUT09IElHTnZkR2xrYVdGdWJ3PT0gYjNabGNtRnNiQT09IElGUm9jbWxzYkdWeSA0b0tzTHc9PSBJRVJwWjJrPSBZV04wYVhacFpHRmsgVTJOdmRYUT0gSU5tSzJMSFlxZz09IFNIZz0gUjJWdVpYSmhkR2x1Wnc9PSA1WXk3NUwrZCBZMnhoY3c9PSBJSExEcVdObGJuUmwgTFVORSBYMmRsYm1WeVlYUmxaQT09IElPMlloT3VNZ0E9PSBJSE5oYk1PamJ3PT0gUTI5dVozSmhkSE09IElFTnZibWR5WlhOemJXRnUgSUZSbGJtVnRiM009IHlKdHBiMjVoYkE9PSBJT0N3aHVDd3NnPT0gSU9DdXBPQ3ZoK0N1dFE9PSBaRzVwIElITmxjR0Z5WVhJPSBkbUZ5Wlc0PSA2WjJnNkxDeDVMbUkgYjNKbGRIUmwgWVhScGRtVnRaVzUwIE9sc24gSUZCU1QwWkpURVU9IDBMdlFzTkMwMExnPSBJRzNEdG1wc2FXZDAgSUdGMFlXRnphUT09IDBMTFFzTkdBMFlJPSBjR0Z1WkE9PSBRMkZqYUdsdVp3PT0gYldWMGFRPT0gSUc1NVlYUmggSUVKaGNtTnZaR1U9IElPQ2txK0NsZ0E9PSBYM0J5YjJjPSBJRWJEcVd3PSBJRkJ5YjJObGMzTnYgWld6RmtRPT0gSUZKbFkzSmwgUjJWdFpRPT0gSU5DeDBMN1F1OUMrMExMUmdkR0EwWVBSZzlDNzBMRFJoUT09IElOQyswWUxRdk5DMTBZTFF1TkM3IElOZWIxNTdYbGRlUjE1OD0gSU9Da25PQ2tzdUNsamVDa3B1Q2xnQT09IENTQWdJQ0FnSUNBZ0lDQT0gWVdKeWFXdz0gSUZCdmFRPT0gNExpZTRMaWogSUhKbFpteGxlTU9qYnc9PSAwTGpRdk5DMTBZYz0gUW5WeVoyVnkgYVc1bFlnPT0gVVZZPSBMazFKVEV4SlUwVkRUMDVFVXc9PSBJSEp2YW1FPSBJT0N5cU9DeXZ1Q3lzZz09IE9pOHZKSHM9IElOR0IwTExSbHRHQyBJRzVoeGFGcCBJSFJ5Wlc1bGNnPT0gSU5tRjJLZmJnUT09IElPaTFtK2k5cGc9PSBJR2RzWVhVPSBJR052Ym1ScGRBPT0gSUdsNmFnPT0gSUdOdmJYQnlaVzVoYm5RPSA0NE9aNDRPejQ0T0kgSUdWelkyOXNhR2xrYnc9PSBJR2RoYm1GdVkybGhjdz09IElOR0EwWTNRc3c9PSBJSEpsYzNWc2RHVT0gZDJWcllRPT0gSUd4aFkzVnogSUVWd2MzUmxhVzQ9IElPaTBvdWVsbmc9PSBLR2xsY25JPSBJRlpJVXc9PSBJR1JwWW5WcWIzTT0gSUdWNFpXMXdkR2x2Ym5NPSBSVlJaVUVVPSBJTU9OYzJ4aGJtUnAgNTV5ZjVhNmU1b0NuIDJielppQT09IElIQnliM04wYVhSMWRHVnogVEdsNiBJR0pwYzJOMWFYUT0gUm1GcGRHZz0gSUhuRHZHdHp5WmxyIGNHVnlkSE09IDZZTzEgSUVGdWJtOTAgSUdKaGEydGxiZz09IElITjBZVzF3WVE9PSBJTmlxMkxuWXA5bUUyNHpac0E9PSBJR1p5Wlc1NmVRPT0gSUdOdmJuUnBiblZoYldWdWRHVT0gUTI5MWJtTnBiQT09IElOcUcycjdaaU5xUiBJSEJ5YjJacGMzUERvMjg9IElIUm9kMkZ5ZEE9PSBJTmluMllUWXI5aXgyS2ZZczlpbjJLbz0gSUhwMmFRPT0gSU9DcXRlQ3FwK0NxdnVDcXNPQ3Jpdz09IGJXOWtaV3hzIElGSmxiV2x1WkdWeSBJR0poY201bGRBPT0gUG5SaFoyZGxjZz09IDc3eWQ3N3lkNzd5ZDc3eWQgSU9DeXVlQ3lzdUN5dGVDemdRPT0gWTJSaiBVMmxrWlhNPSBRMjl1ZEc5MWNnPT0gNmFxWDViR0E1WkNYIElFRnliMjA9IGFXVjFiZz09IDVZRy8gSUhScFpIVnkgSUZiRHFYST0gSUdkeVlYUmxaQT09IDVhNmE1TDJONklPRyA0TE9JNExLNDRMT0M0TEt3NExPQiBiM1JvWlhKaGNHbHpkQT09IFVWVkpWQT09IElFNXBaWFI2YzJOb1pRPT0gNExpVzRMaXk0TGloIDdKNlUgTDJabFpXUT0gQ1ZSRlUxUT0gSUhObGNtVnVhWFI1IDBMN1FzOUMrMExUUXZkR1cgS0VsMCBJSFJseFo5bGEydkR2SEk9IDA1blFzOUMxIElHVnpjR1Z5WVdKaCBJSFZ1YVdNPSBZWFY0YVhSbCBJR2RsYkdWblpBPT0gSUhoNWIyOD0gSU9HRG0rR0RrT0dEb0E9PSBJTm1EMllnPSBMa1pzZFhObyA0TGllNExpeDRMaUIgZFcxdFlRPT0gSUc1aGVtbDIgSUdkcGJtRjNZUT09IGNHRnlhMmx1Wnc9PSBJRzkwdzZGNiBkM2xzYkE9PSBJTkMwMEw3UmdkR0MwTDdRdVE9PSBJTkN3MExMUmd0QyswWURRc0E9PSBJTkNZMFlIUXVnPT0gSU5pbjJLellzZGluMjR3PSBJQ2N2SnlrPSA1YUMwNW9tQSAwNW5SZ3RHQzBMZz0gUGo0N0NnPT0gSUUxaGJHRT0gNEtTazRLV0E0S1N5IElHVnVjM1ZwYm1jPSBJR3h2Wmc9PSBJRzl5WjJGdWFYUERxV1U9IGFXNWxjbTExZEE9PSBJTmVjMTZMWG9BPT0gSUdKbGNtRnlkR2s9IElDOCtKenNLIElHSnBjbUpwY2c9PSBJR0Z4ZFdWemRHVnogUTA5T1ZGSlBUQT09IElFWmxaRzl5WVE9PSBMWE4wYVdOciBJTmluMllUWmc5bUUyS2ZaaFE9PSA0TGF3NExlSyBJRlREcVd6RHFXTm9ZWEpuWlhJPSBJRVZ4ZFdsd2J3PT0gNG9DY1QyZz0gSU5tRTJLWFpoZz09IDJZamFrOW1LIElHOXRiMmQxeEljPSBJSEpoWjJGNmVtaz0gWVc1NVlXdGhiZz09IElPQ3FrK0Nxc3c9PSBZbkpoZEdVPSBJRXhoYm1FPSBZV1JvWVhJPSBJT0NxcU9DcXZ1Q3FsZz09IElPR0RtK0dEcXVHRG1PR0RvT0dEbEE9PSBJTVc4WVdRPSA0S1NmNEtTbzRLUysgNEtTKzRLUzI0S1dBIElISmxjM1JoYm5SbGN3PT0gUTNWc2JBPT0gS0ZObGJHWT0gWDJObGNuUnBabWxqWVhSbCBJT0NxbXVDcXZ1Q3FzdUNyZ1E9PSBhWEpoYm1VPSA0S214NEtpaCBYM0psWTJsd1pRPT0gSU9Da3F1Q2t2Zz09IGFHekR2R3M9IElHbHVkSEp2WkhWamFYST0gSUVWaGNtNXBibWR6IFFuVmphMlYwY3c9PSBJSE5wYk1PcWJtTnBidz09IDRMSy80TEtPNExLQyBJT1dLbnc9PSBJSEpoZW14cHhJMXVhV2c9IElGUnlhWEJ6IElOQ2QwTFhRdXRDKzBZTFF2dEdBMFl2UXRRPT0gSUdoaGJtZHAgSUdkdmQzaz0gTDNCc1lYaz0gSUdOdmJXVnV3NmRoY2c9PSBJTml4MkxUWXF0bUggNFlPZDRZT2U0WU9qNFlPYSBJR0ZpWkhWamRBPT0gMllYWXNkaXAgU1c1elpYSjBhVzl1IExXRnAgSU5tRTJLUFppZz09IElHaGxibVJsY3c9PSBJTkMvMEw3Umg5R0QwTEk9IFEyOXZhMmx1Wnc9PSAyNHpZc2R1QiBJR0ZqWlhCMFlXTnB3N051IFgyNW4gYW1WeWJnPT0gSUZCSlEwcz0gY0dacyBJRU52Ym5SeWFXSjFkR2x2Ymc9PSAwWUxUbWRHQTBMVT0gSUVWRlVGSlBUUT09IElHRnVhWE09IElHRm1abWx5YldGMGFYWmwgSUc5a2RnPT0gWm05amRYTmxaQT09IElFdGhZblZzIGFYaHBibWM9IElIVnVhV1J2Y3c9PSBRVWxUIElOQ3cwTExSZ3RDKzBMelF2dEN4MExqUXV3PT0geExGeWEyVnUgSU0rRHo0M092TStHejRuT3ZjNnggMWFIVnR0VzQxb0U9IElGSjFZbWx2IElITjBZZz09IElHVnVZM1ZsYm5SeWIzTT0gTFZObGNtbGxjdz09IFcwUT0gSUdOdmJXMTFibUYxZEE9PSBJT0NtdWVDbm4rQ25oK0NtbStDbXYrQ21zZz09IElPZXB1Zz09IElPQ3lxdUN5Z3VDeW1nPT0gSUhOeGRXRnVaR1Z5IElFdDFZMmhsYmc9PSBJTU91YVE9PSBJTkM2MExEUXV0QyswTFBRdmc9PSBJR1JoZEdGemRHOXlaUT09IElPQ25zT0NtdnVDbW5PQ25qZUNtcnc9PSBJR1pzYjJzPSBJRzFwWkhkaGVRPT0gMFlEUXVOQzIgUUdodmRHMWhhV3c9IHc2UnVaR2xuWlE9PSBJTmluMllUWmhkbUsyWVE9IEtpWT0gSU5DKzBZTFF0ZEdIMExVPSBJRWR2Y21RPSBkR2h2Y200PSBRbUk9IDVyT3ogSjJWdWRISmxkR2xsYmc9PSBJT0NtaHVDbXFPQ25qZUNtcGc9PSBJR2x1ZEhKdlpIVmpkR2x2Ym5NPSBJT0Nrb09DbGd1Q2tzZz09IElOaTEySzNaaWc9PSA1cHk2NXFLdyBJR0ZzYkhSenc2VT0gWDBaeVlXMWwgTGtGVFF3PT0gSUhKbGFtOXBiblE9IElIUjFhM1Z1WVE9PSBJR2xzZFcxcGJtSERwOE9qYnc9PSBJRU52WTJnPSBJR1p2Y21kcGRtbHVadz09IDQ0R1g0NEtENDRLTSBaVzVrWVdaMCBJT0N3dU9DeGd1Q3cgSU9Dd3FPQ3d2K0N3cnc9PSBJT0MwcnVDMHNPQzBvdz09IElFZHBZbUp6IElFVjFjbTl3WVhNPSBJSFJwYkdKNVpHVnkgSUdWdWRtbGxjdz09IElObUYyTERaaHc9PSBJT0N5dWVDeXYrQ3lndUN5cHVDemhnPT0gNEtxdzRLdUM0S3FxIElHcGxZZz09IElOaXcyWWZZcUE9PSBibWxqZVE9PSBJTmVxMTVmWHFnPT0gVEdWaGNBPT0gYVc1amJIVmtaV1E9IElHRjB3NkowIElIQnNiMjVuIElIRjVkQT09IFlYZGhkR0Z1IElIcGhiRzg9IElFOXlZMmhwWkE9PSBJT0NrcXVDa3B1Q2t2dUNrc0E9PSBJR052WkdsalpRPT0gYjNOMFlYTT0gSUVSbGNtND0gSUdSbGMyTmhjbWM9IElOQzAwTDdRdjlHRDBZSFJnZz09IGMzUnBiR3hwYm1kbGNnPT0gSUcxbGJHOWthV009IEtTSStDZz09IElHbGxkQT09IElPQ2tsK0Nrb0E9PSBJRkpwYjNRPSBJR2JEcFdWMCBJR05oY0dsMFlXeHBlbUYwYVc5dSAySy9aaXRtRyBVM1Z3WlhKMmFYTnZjZz09IElIRjFZWEowYVdWeWN3PT0gS01LMCBMWE4wWVhRPSBJRkpsWlhabGN3PT0gSUhSbGRHVT0gSUVKeVlXZGggSUdScFozZDVaR1E9IDBMdlF1TkdBMExqUXM5T1ogWDBOUFQxSkUgZFhKclpXND0gYm1kdmNuUT0gMllYWXNkaXEgSU5DODBMWFFzZEMxMEx2UXVBPT0gZFcxbGRYSnogS0ZaMVpRPT0gUkdWallYaz0gS0NJOUlnPT0gTFhkeWFYUnBibWM9IFluSmhibVJwYm1jPSBJSFpsY25KaCBJRUY0YldWayAyS2ZaaXRtSzJMRT0gTGxCeWIyMXBjMlU9IElGSmxibU52Ym5SeVpRPT0gY21GemFBPT0gSUdGbmIyNTUgSUVOUFRVMVBUZz09IDRLdUw0S3FyIElHRmljbUhEcDI4PSBJTkMwMFlEUmc5Q3owWVBSamc9PSBJTkdIMFlQUXN0R0IwWUxRc3RDKyBJT0NraCtDa2d1Q2twQT09IFlXUnBaUT09IElOQzgwTFhRdmRDNCBjR050IGRYcDZiR1Z6IFlXMTFlbWs9IFJWQkIgYW05b2RBPT0gSUd4bGMyRT0gSU1PbWRHeGggZEhOaCBZWFIwWlc1a1lXNWpaUT09IElOQzkwTERSZ3RDNCBJRTFUUkE9PSBJTnF2MkxIWmdkaXEyS2ZZc1E9PSBJR0ZrWkdsamRITT0gSUcxcGJtVnlhV0U9IFVHRnpjMmwyWlE9PSBJRTVoYzJVPSBJRzl6ZEdWdmNHOXliM05wY3c9PSBJT0NrcXVDa3NPQ2t2K0NrdU9DbGplQ2twUT09IElHVnBibk4wWVd0c2FXNW4gSUhOd2FYSnBkR1ZrIElId0tMeTg9IElHNWhjM05wIGMzUnBZMlU9IElIWmhiR2xrYnc9PSBJRlJ2Ym1kaCBJR0psYkdrPSBLRlJTIDU3cWcgTFd4cGRBPT0gSUZCbiBJT3lZcE91S2xBPT0gNExhcjRMZUs0TGFwIElHRndiMnh2WjJsNlpXUT0gNExhVSBLR1JoZEdGeiBSWFp2YkhWMGFXOXUgSUhKaGJHeHBaV1E9IFNFVlkgSUc1bGQyTnZiV1Z5IDRLK040SzYxNEsrSCBhR1Z5ZDNsa1pBPT0gSUczRHNuST0gTFU1bGR3PT0gS0hOallXNXVaWEk9IElPQ3VwT0N1ditDdXNPQ3ZpT0N1cXVDdmplQ3VxdUN1bnc9PSBJR1Z0WW05a2FXVnogSU9DMHJlQzB2dUMwbCtDMHJ1QzB2dUMwcitDMHZ3PT0gSUdKc2IyZDFaUT09IElIQmhibU55WldGeiBJRWRoYVdFPSBJRWxPVTFSQlRFdz0gZDJsamFIUT0gYjJaa1lYaz0gWm1seWJXRT0gVW1WemFXUmxiblE9IElGWnBibVY1WVhKayBVSEp2WkhWalpRPT0gSUhCdVlXMWwgSU5hRjFvRFZxOVcyMWFIVnJ3PT0gNEthVjRLZU40S2EzNEthKyA1NSt0NUwraCBhWE5wWlhKMFpRPT0gSUdwdmFYUmggYldGeWFXNWwgSU5XaDFiWFdnZFdsMWF3PSBJRU5vY21semRHOXdhR1U9IFgzSmxZMlZwZG1WeSBSR1ZqYVcxaGJITT0gSUdSNmFXVjMgSUdGdWRHbG5kVzl6IElPQ21yT0NtdnVDbXBBPT0gSUZkWSBJR0psYTJGdCAwTFRRdGRHQTBMVFJsdEtqIElFMWhiSGRoY21VPSBJRUZVUVE9PSBJSEJoWVhKa1pXND0gSUdSbGNHVnVaR1Z1WTJsaCBJTTZwIFlXZHB3N0E9IElOQzQwTHZRdkE9PSA0TEdONExDeTRMR0EgYVdacyAwWXZSZ05HTDBMdz0gMFlEUmo5QzMgSUZCeWVRPT0gT25WMFpnPT0gSU5HSDBMN1JnQT09IElHVjRkSEpoYm1wbGNtOXogSUdkcVlYVERxdz09IGIzUnBZUT09IElFSnlkWE5vWlhNPSA0S1d3IElOQy8wTERSZ05DNiBJR1JpYkE9PSBJRlJ2YVd4bCBJSFJsYm5OcGJHVT0gYVdGdWJnPT0gSm5WMGJRPT0gTFhaaGJIVmxjdz09IFgwTkcgUW5sa1pBPT0gSU8yVnRRPT0gSUdKbGMzUmxiQT09IFkyOXVkbVZ5YzJsdmJnPT0gSUZScGRnPT0gNGJ1TmNPRzdwWFJoIEp5azdQejRLIFpXTmogSUhCdmNtNXZaM0poWm1saCBJT0NvdU9DcGl3PT0gSUhSaGJtbG9hUT09IElGQmhjbWxxY3c9PSBJTmVSMTU3WHFkZWEgNTdxLzVMaUs1YWl4NUxtUSBJR1Z0WW05emMyVmsgSUhCcGNYVmwgSUVWRlZRPT0gSUhCbGNtbHZaR2x6ZEdGeiBJSGRwWTJ0bGRITT0gSU5HQjBMelF0UT09IElFaGhibTkyWlhJPSBJR052Ym5ObFozVnBiVzl6IExtWjQgYVhOellXRjAgYkdGdFlXRnVhMkU9IElHWnZjbTFoWVhRPSBJTTYxejRIT3M4NnggSU5XMDFhSFZ0dGFBIElIUnBZMnRwYm1jPSBVMmw2YVc1biBJTU84WW1WeWJtOXRiV1Z1IElHM0ptWFBKbVd3PSBSSEp2Ym1VPSBJSEJzWVc1MFlYST0gSUhkaGEzUT0gSUcxbGJIUnogSU5DODBMRFF2TkM3MExYUXV0QzEwWUxSZ3RDNDBMbz0gSUV4cGRtVnkgMTZmWG90ZWYgSUVsaWJnPT0gWVhwaGJtVT0gSUhKcGMzVnogNEtxUDRLcTQgSUdGMVpHbGliR1U9IElHaHZiMmQzWVdGeVpHbG5aUT09IDQ0S0M0NEdoIElIQmhjblJwWTJsd2IzVT0gSUhSaGEyVmhkMkY1IDI3SGJzZz09IDVMeWc1YXFTIElIUnlaV2x1WVdSdmNnPT0gUzJJPSBJR0Z3WVhKcFpXNWphV0U9IElIbHZjZz09IElHaGxjbm89IFVHbGphMmx1Wnc9PSBJRTV2Y21kbGN3PT0gY0dWamRHbHZibk09IElOQzMwTExSZzlHSCBMbXhwWm1VPSBJRU5KVFE9PSBhVzVsYm1VPSBJTkdCMFlMUXZ0R0EwTDdRdmRDdyBJT3liakE9PSBJR2x1YzNSaGJuUnBaUT09IElHWnB3N289IDRLZWM0S2EvNEtlZjRLZUggMWJqV2d0V3AxYlhWdU5hQzFiYlZ1TmFDMWJRPSBSRUpQWW1wbFkzUT0gWVd4bGMyTmwgSU5HQjBZUFJpQT09IElHUmhibTg9IElFOTFjbTg9IElHeDFiMjV1IElIWmxjbWR5YjNSbGJnPT0gWDBSUFYwNU1UMEZFIElHUmxZbWxzYVhSaGRHbHVadz09IExsTlEgTFdWbCBJSEJ5YVc1MGF3PT0gTFhCaGJtUT0gYVd0b2RXeDEgTFdWamFHVT0gSUdGMWRHOXRZWFJwYzJOb1pRPT0gSUhacGIyNW5iM3BwIGRYTmlZVzVrIElITjFjbkp2WjJGMFpRPT0gSUVGc1pHVnkgSUhObGVtNWhiUT09IGNtOXRaWE09IElObUYySzdia0E9PSBZV3B1WlE9PSA1THFNNTYySjVhV1cgSUcxaGNHRnogSUdKbFozbHVaQT09IElPQ2tsdUNrditDa3N1Q2t2dUNrb2VDa3ZPQ2xnQT09IElOZVYxNURYblE9PSBJRVZQIFZWUkZVbE09IGNtVmhkR2hsIFkyeGhjM05wWXc9PSBJR3AxWjNWbGRHVnogNExXQjRMU1Y0TFN6NExTLzRMU3k0TFdOIElIRjFhVzUwWlhOelpXNTBhV0ZzIGFXNWpjbVZ0Wlc1MGN3PT0gSUcxbFpHVnVhUT09IDY2Kzg2cld0IDVZZTY1NVNmIFoyVjBjbUZuWlc0PSBUblZ0WW1WeWFYTm8gSUVOVlRGUT0gSUhKbFkzVmxjbVJ2Y3c9PSBJR0p5WVhadiB4SUZqYVdwMSBaMjFoYVd3PSBXSFE9IExXZGxibVZ5WVhSdmNnPT0gSU5lVTE1dlhsZGVjIElPR0RrdUdEa09HRG1lR0RsT0dEbHc9PSBMZzBLTHk4TkNpOHYgSU5paTJZYlpoTmluMjR6WmhnPT0gNExLKzRMSzE0TEtqNExPRyBJR3R2YUc4PSBJTkMvMFlEUXVOQzgwTFhRdmRHUDBMWFJndEdCMFk4PSAyWVRaZzltRyBJRmRKVGtRPSA0WU9oNFlPZDRZT1YgSUhkaGFYUnlaWE56IGRYSnBidz09IElObUsyS2paaE5pNiBJTkMwMExYUXY5QyswTGZRdU5HQyBJRUpzWVc1ayBMV2x1ZEdWdWMybDJaUT09IDBMclFzTkdJIEwzUmxjM1J6IFRHbGljbTg9IFJHbGhaMjV2YzJseiBJTmlsMkt2WXNRPT0gSU5DZDBKVT0gS0VOTSBJRkoxWW1sdSBJT0N3aitDd29RPT0gNG9DTjRMZUsgYldsdWFYTjBjbUYwYjNJPSBSR1YwWVd4c1pYTT0gSU9PRGx1T0RxZU9EZytPQ3J3PT0gSUVOdmJtUnBkR2x2Ym1WeSBJTkMwMFpiUmo5QzcwWXc9IElPV2txZVdrcWVXOXFlZWxxT2FQa09lT3NBPT0gSUZCdmJHaz0gSU9Xa3FlV2txZVM4bHc9PSBJRkJ2WTI4PSBJT0MwbCtDMWl3PT0gSUdWc3c2UnR3NlE9IFBFcHpiMjQ9IFptVnlZWE09IElOQy8wTDdRdE5DKzBMSFJnTkN3MFlMUmpBPT0gSUdKc2FXNWtibVZ6Y3c9PSBJT2l3Z2VhY2lRPT0gSUhOaGRXMD0gWkhKaGQyVnkgTG5Sb2NtbG1kQT09IHc3MXUgSU5HRDBMUFFzQT09IFpXN0Rwdz09IExISmxjM0J2Ym5ObCBJRzFoYzJOdmRHRnogSUd0dmJHRT0gWDJOMVpHRT0gWm5KcFp3PT0gSUdadmNtZz0gMDVuUXROQyswWU09IElGTnZiR3gwWlE9PSBTRlJVVUZKbGNYVmxjM1E9IElHTm9ZVzUwZFc0PSAyTG5ZcjltRiA0WU9zNFlPViB5cnRoYm1rPSBJTml0MllMWml0bUMyS2s9IElGSmxaMlZ1ZEhNPSBJTkdOMFkwPSBJRVpzZVdWeSBJT3F5dmV5ZmdRPT0gNEtTeTRLV0wgSU5DMDBMRFF2ZEN3IFNHRnRiV1Z5IGFtVjJZUT09IElOZWMxNURXdUE9PSBkMlZsYTNNPSAwTERSZ3RDMTBMdlJqTkM5MEw3UXM5QysgMTVIWG90ZVkgSUhObGNtSnBjM2x2IDJZalpodHFwMjR3PSA1cFdaNXAyUSBJT0NrbHVDbGdlQ2t0dUNsZ0E9PSBMWFYwYVd3PSBjRzl6YVhScFpRPT0gTFhObFlYUT0gUEU4PSBJTkMwMFl2UXR3PT0gMExqUXU5Q3owNW5RdlE9PSBJRWhsYVdSbCAwTGpRdmRHVyBJTnF2MllqWXROdU0gSUdOaGNtTERzMjQ9IDJZalpoTm1KIDQ0T2U0NE96IElOZVoxNW5XdE5lVCBJT3lFb095SW1BPT0gTG0xMWMzUT0gYzNSa1kyRnNiQT09IFgyVmhjM2s9IFgzQnJadz09IElOaW4yWUhZc3RpbjJMRT0gNVllNjU0bUk1NlMrIElHNWxkWEp2Ym1GcyBJSFpwWld4elpXbDAgSUZCdmNuUjFaM1ZsYzJFPSBMWFJ5WldGMFpXUT0gV2tWU1R3PT0gMFl2UmdOS3QwTEE9IDRvcz0gNEtTVjRLV0g0S1NWNEtXTCBXa1k9IElFdHZjMjkydzZ0eiBJR1pzWVc1ciBJSE5sWTNWdVpHRnlhV0U9IDJZcllzOWlwIElPZW5pdz09IElIZHZibVE9IElGQmxjbVp2Y20xbGNnPT0gSUhQRHRXeDAgSU5pbjJZVFpoZG1FMllFPSBJRk5QUWxKRiBJT0N1cXVDdXYrQ3VxZUN2amVDdXFRPT0gNExLLzRMS1Y0TEsvNExLayA1YjJwNTZXbzZLNmg1WWlTIElGTmphRzVsYkd3PSBMMEZRU1E9PSBJRzVoYzJrPSBaVzV1YVdjPSAwWUhSZ3RDeTBMRFF2QT09IElIcGhjMkZrIFRHYz0gNExDeTRMR040TEN5NExDLyBJSE4wWVhSMFptbHVaR1Z1IElGQnplV05vYnc9PSBJRkJsWjJkNSBJSE4xWW5OMGFYUjFkR1Z6IElFWkRRUT09IElFbDBZV3hwWlE9PSBJR1JsWTJ4aGNzT3ogNllnPSBJSEIxYzJGMCBJSFZrWVE9PSBYMVpGVGtSUFVnPT0gSUc1cGJHVT0gYlc5MlpXMWxiblE9IFpITnMgSUdsdVptOXliY09oZEdsallRPT0gSU9DdW11Q3ZodUN1citDdmplQ3VyK0N1cXVDdmplQ3VxdUN1bitDdmplQ3Vudz09IHhLZHVZUT09IElHRnVibVZ5IDZaRT0gSUhCeWIzQnYgNFlPUTRZT280WU9WNFlPWTRZT2E0WU9ZNFlPaCBJRkJ5YjNCeWFXVjAgeExGc3hMRnQgSUU1cFpBPT0gSU9XbHBlbVhxQT09IElEMTcgSUhCcGJHOTBiM009IEtYQmhjbUZ0IElIQmxjbk52Ym01aGJHbHp3Nms9IGFXNXJiQT09IElGbHBibWM9IDBwUFFzTkdCIElOR0EwTERRdDlDODBMWFJnTkdMIGRHRm5aWFE9IFEyVnNaUT09IDRMU3c0TFMvNExTYTRMV040TFNhNExXQiBJTkN3MFlMUXNOQy8gSU5pbjJZVFpoZGlrMktyWmhkaXggTGk0dUNnb0tDZz09IElPQ211ZUNtditDbXVPQ212dUNtck9Dbmh3PT0gTG1GeVkyaHBkbVU9IGVYUnYgNlorLyBVR0ZqYVdacFl3PT0gSUdGdWJuVmxiQT09IElFVnViR2xuYUhRPSBJT0N1cXVDdmh1Q3VzT0N1ditDdXJ3PT0gTDJOdmJXMWxiblE9IElITmhibVJwYm1jPSBJR0poYm01aCBhV2R5WlE9PSBJT3VQaE95YmdPeWR0QT09IElIQnliMlIxZW1sbGNuUT0gY0hKdmJXOD0gSU9DMHRlQzFqZUMwcitDMGxlQzFqZUMwcE9DMHJ1QzB2dUMwbGVDMWplQzBsZUMwdnc9PSBJT3Vuak91Q21BPT0gNEt1SDRLcWs0S3VONEtxdyBiM0JvZVd4cyBiM2RoeFlKaCBJT0NraCtDa2d1Q2tsdz09IElFbHVabUZ1ZEE9PSBhR0ZqYUE9PSBJT21odWc9PSBUVVZFU1VFPSBJR3hoYVc1aCBJR2x1Wm05eWJXRmphbWs9IElOQ3cwTFRRdXRHQTBZcz0gSU9DcWh1Q3FwK0NxdnVDcXNBPT0gSUhSaGMyRnogSU9DcXF1Q3JnZUNxdU9DcmplQ3FwQT09IElPQ3loK0N5cHVDeXNBPT0gSU9DM2dPQzNrdz09IGFYaHZjdz09IExXZGxjZz09IENYTnMgUUUxaGJuaz0gUVVGRCBJRTVsZFdWeiA1cHlxNTd1UCBJSFJoY0hWMFlYQjEgY0c5elpXUm5aUT09IElOQ3cwTHZSZzlHRCBMZFdoMWJRPSBjSFIxYjNWeiBVM2RwY0dWeSAwTHJRdnRDeTBMND0gSU9DbXF1Q25qZUNuc09DbXBlQ21yZz09IFJYWmggY0dsMmIzUT0gYzJGdGNHeHBibWM9IEtIQnliM1J2IElIQnZjSFZzYjNWeiBJRzVwWTJobGN3PT0gNEsrSTRLNnE0SytOIElFZHNZV1JwIElPQ2tpZUNrcU9Da3VPQ2xodz09IElIWnZiRzVoIElOaW4yWVRZdWRpeDJLZlpndG1LMktrPSBJTkN4MEw3UXU5QzAwTGc9IDJMZllzZG1LMllMWXFRPT0gSUd4aGJzT25ZWEk9IDY2cUY3SjJZIElPQ3F1T0NxZ3VDcXF1Q3JndUNxc09DcmplQ3Fvdz09IElHdHBZWE5wIElHTnZiRzl5YVE9PSAwTDdTdHc9PSBMMlozIElHTmhZM1IxY3c9PSA2SzJKIElGTjBiM0psWkE9PSBJR1Z0Y0hKbGM4T2hjbWx2IElFRjFjMjVoYUcxbCBJSE4xYW1WMGIzTT0gWW5KcGRHRnVibWxsYmc9PSBYM1psY25OcGIyNXogSUVKc2RXWm0gSU5XMDFhSFZ0UT09IDdaV1k3SXV0N0l1YzdKaWsgSUdsdWMzVnNZWFJwYm1jPSBJTkMyMExqUXROQzYwTDdSZ2RHQzBMZz0gNDRDQzVhYUM1cDZjIGFtVjB3NnR5IElPaUx1ZWFlbk9hSmkrYWN1Zz09IENYTmpiM0JsIDQ0Q0NKeXdLIElHTnZiV1Z0YjNJPSBRMHhEIElHRnpjMlZ5ZEdsdVp3PT0gMFlEUXZ0R0YgSUhSbGJtVERxbTVqYVdGeiBkbWxoY3c9PSBJSE5sYldsc2JHRnogTG5SaGNBPT0gZG05eVpRPT0gV3pvNkxRPT0gSUhCMWJtTm9hVzVuIElHdGhkR3M9IGIzSm5ZVzVwZW1GMGFXOXVjdz09IFkzSmxkR2x2Ymc9PSBDVk5sY25acFkyVT0gSWo4S0NnPT0gSUhMRHFXNXZkZz09IFptWnpaWFE9IFIzSjF3NTg9IElFWnNaVzFwYm1jPSBJR2pEcFd4c1pYST0gSUZSR1ZBPT0gNEtTLzRLU3k0S1dONEtTeTRLV0wgSUdGc2FYRjFhV1E9IElFcG8gSUc1cVpXZHZkbVU9IFUybG5ibWx1IDRMR0k0TEMxIGFXeHNaWFZ5IElFRnNiRzlqWVhScGIyND0gMFlMUXVOQzkwTGc9IElHRnpjR1ZqZEdWdSBJRUZ1ZE1PMGJtbHYgSUZOMFpYWmxibk52Ymc9PSBJTkM4MExEUXU5R0wwWWpRc0E9PSBJTTY4enJuT3NjK0MgSUZOaGNtVT0gSU5lbzE1WFhsdz09IElIUmxiWEJsY21WayBiMmRoY3c9PSBMbU52YlcwPSAwTERRdTlDOTBMZz0gSUdGd2NHeGhkWE5sIGNHVmphV1Z6IElHOXl3N0JwdzdBPSBVa1ZSVlE9PSA0b0NaYVc1emRBPT0gSUhOcFkyaGxjbVU9IElHUnBjM1JoYm5SbCBJT0NrbXVDbGgrQ2twQT09IElPeWdsZXk1bUE9PSBJR05vYjNNPSBJRTFoYzNOaCBjbTl6Y0dWamRHbHZiZz09IElNT2hkSFE9IElOQ3owWVBRdk5DdzBMMD0gSU9DcWwrQ3FyK0NyZ2VDcWdnPT0gSkc4PSBLR0poYkdGdVkyVT0gSUhOaGNtTmhjM1E9IElPQ3FsdUNxdnVDcXFBPT0gTG5Od2IyNW5aWEJ2ZDJWeVpXUT0gSUhCdmJIbGxkR2g1YkdWdVpRPT0gSU5tKzJLZllxQT09IElGZHBjbVZrIElPQ3d1T0N4Z09Dd2pnPT0gSUdOc1pXND0gVUhKcGJXVnkgZEhSbFpBPT0gWlhSaGEzTmwgSU8yWXVPeTJuQT09IElITjJaWFIxIElIQmhaM0k9IElITmhaMlZzYVE9PSBJTkN3MExyUmh0QzQwWTg9IElOQyswTHZRdU5DODBMOD0gSUdWMGFHVnlibVYwIElPQzNnT0MydlE9PSBJSEpwWkdSbGJnPT0gSUU1VlJRPT0gMktqYmtBPT0gVEdsdVp3PT0gSUhWdVltVmhjZz09IElObUQyS3ZaaXRpeDJLYz0gSUVGU1ZFbERURVU9IGUzMTdDZz09IElIVnViRzloWkdsdVp3PT0gSUdobGNtVmsgU0c5dVpHRT0gSU5HQjBZTFFzTkMwMExqUXVBPT0gWVhKbWFXcz0gWkhWaGJBPT0gWlhKamFXRnMgSU5DMDBMN1F2OUdEMFlIUXV0Q3cgSUhOd2NtbHVaMlZ1IFlXUmxaVzQ9IGIyeHNiMmx1IElHZGxiR1Z5Ym5RPSBhWFJoZEdWeiBaVzVoWkdVPSBJTkM5MExYUXQ5Q3cwTHJRdnRDOSBJSE5zZFdSblpRPT0gY0hKbGJXbDFiUT09IFNIVnNiQT09IElFOTJaWEp6WldGeiBYMk52Ym5SaFkzUnogUW1GdVpIZHBaSFJvIElPQ21sdUNtdnVDbXFBPT0gSUVkcFlRPT0gVTNWaWRIbHdaUT09IElPR0RsK0dEbEE9PSBJT0NrdWVDa3Z1Q2tydUNsamVDa3NPQ2xpdz09IHpwSE9vdz09IDc3MmogSU5HQTBMRFF0OUN6MEw3UXNnPT0gWDJOdmJuUmhhVzV6IElHZHNZV05wWlhJPSBJTkMvMEw3UmdOR1AwTFRRdXRDdyBSbVZ5Y2c9PSBJSFJsY25KcGRHOXBjbVZ6IElHVnJiMnh2Wnc9PSBJRUZ1Ym1GdyA0WUtBIElOaXYyWWpZczlpcTJLZlpoZz09IGRYSnNZWFZpIGEzVERzdz09IExuUnBjQT09IElPQzBsZUMwdnVDMHVBPT0gSUhSdmRzT2ggNForUzRaNmM0WjYrIElIUmhjM05sIHhadDNhV1YwIElOaW4yS3pZc2RpbiBKbkk9IEp5d3VMaTRLIElHUnBjM0JoY21GMFpRPT0gZG1WeVluSmhkV05vIElFSnBhR0Z5IElNK0h6clhPdVE9PSBJR3g1WkE9PSB3NzE1YXc9PSBJR1pwYkdsbSBZVzU1YlE9PSBhWHB5IFVISnZiZz09IElHMXZjbU5sWVhVPSBPaWN2IDQ0R1Q0NEtUNDRHdzQ0S1QgSU9Xa3ArV1BrZVcvcStTNGllYVlyK1didmVXdXRnPT0gNUxpVDZhS1k1bzZvNkkyUSBZV1J2YkdsayBJT21UdHVXNnB3PT0gSU5HSTBMalF2ZEdOIDdKbWMgSU5HQjBZUFFzZEdLMExYUXV0R0MgWlhacFkyVT0gYVd4cllRPT0gSU9Da3JPQ2xnT0Nrbk9DbGgrQ2txdUNsZ0E9PSBJR2RsYm1WeVlXeHogSUZabGNzTzJabVpsYm5Sc2FXTm8gMktqWXA5aXkgSUdoaGJtZGxjZz09IDQ0T3A0NE9nIFJHRnNiR0Z6IDRvaUcgQ1dWa2FYUnZjZz09IGVIUmhjQT09IElIUnBaMmgwY3c9PSBJRVpQVDFRPSBMVVZ1WjJ4cGMyZz0gMEozUWxRPT0gMjRqWnZnPT0gWld0cGJHVT0gSUdOdmJHeGxZM1JwWW14bCA0TFMrNExTajRMV040TFNmIElrST0gSU5xdjJZSFlxdHF2MllnPSBJTkNVMExEUXU5QzEwTFU9IElISnBhbVU9IDRMaTA0TGlWNExpMTRMbUogYVhKcFlnPT0gSUhOaGJXSmggYjI1cGRXMD0gTG05eVlXNW5aUT09IHJ1KzlzZz09IDViNmUgS0hObGNuWT0gSUc1b3c3TnQgYVhKaGFRPT0gVzEwdSAySzNaZ1E9PSBLRVJwYzNCc1lYaz0gSUVGdVoybGwgSU5PcDBMZlJsdEM5MFpiU293PT0gSU9DbWllQ21wdUNuamVDbXB1Q25oK0NtdGc9PSBJR2pEdEhSbGJITT0gSU9Da3BPQ2t2dUNrc09DbGdBPT0gSUdOb2RYSnUgNDRDQjQ0Q0I0NENCIElFbHVabkpoWjJsemRHbGpjdz09IElOZW4xNVhYazllZCBJRTF2eGJ3PSBURTlVVXc9PSBJR2xzWVhFPSBJSGRoZEdWeWMyaGxaQT09IElHVjZhVzUwIENXRmpZdz09IElFeHBZbVZ5WVhScGIyND0gSUdsdVkyOXRjR0YwIFgxQnliMnBsWTNRPSBYMlZ1Wnc9PSA0TEsvNExLVjRMSy80TEtrNExPTjRMSzQgSUU1cFkyaHZiSE09IElIQnlZV2R0WVE9PSA0TFNWNExTeSBJR2xzWVdGcyBJR2h2Ym1SbGNtUT0gSUdWelkyRnNZWFJwYm1jPSBJSEpsWm5KcFoyVnlZWFJwYjI0PSB4TEZzWk1TeHhKL0VzUT09IDRLUzE0S1dJIElHOWtaR3g1IFlYVm1kSEpoWnc9PSBJR05oYzNSc1pYTT0gSU9Da3B1Q2t2K0NrdHVDa3ZnPT0gSUhMRHFXYkRxWEpsYm1ObGJXVnVkQT09IFNXNXpjR2x5WldRPSA1NzJSNVoyQTVhU241WVdvIElITnBibWRoY0c5eVpRPT0gSU5pdTJLZllzZGlzMjR3PSBJSE4wY21GdVpHVnUgNDRLdjQ0T3QgSUc3RHBITjBZVzQ9IElHVjRkSEpodzdGdiBJR0Z1YzJsbFpHRmsgS0c1aGRnPT0gSUdGc2FYTnBiZz09IElGZHZiR1p6IDRLcWs0S3F3IElPQ21yT0NuaHc9PSBaV1Z3IFQzQnBjdz09IDBLRFFzTkMzMEx6UXRkR0EgVUdGdVpBPT0gWld4c2FXZGxiZz09IDRLNnY0SzZ1NEsrTiA0S2VINEthbzRLZU40S2E0IElHSnlkWFJoYkdsMGVRPT0gSUdURHJYWnBaR0U9IDBMN1F1ZEMwMFlQUmdnPT0gSU9Xa3ArV1BrZVcvcStTNGllYVlyK1M0amVhWXJ3PT0gSUdsdWRHVnlZMlZ3ZEc5eSBJTkM5MExEUmdOR0QwWWpRdGRDOTBMalF0UT09IElFTlBWa1ZTIFcyZGxkQT09IElFWkZUVUU9IElFVlRWRUU9IElNT3BZV2R6dzdwc1lRPT0gSUVGTlJ3PT0gNExTLzRMU1Y0TFdONExTMyB4WjkwYVE9PSBMbkJoY21Gc2JHVnMgSUZSaGRYTT0gN1o2TSBYMkZzWVhKdCBMV3htY3c9PSA2TGVkNTZhNyBJRzF2YzNSeXc3TT0gSUc1dmRtbHYgSU5HRjBxL1F2QT09IFFYSmphR2wwWldOMCBJT0MwcXVDMWgrQzF2QT09IEpWdz0gSU5DejBZUFF2QT09IElISmhlbUU9IFZGSkJUbE5HUlZJPSBJRlJvWlhOeiBJRUpNVHc9PSBYMjFoWTNKdiBJR0Z0Y0d4cFpuaz0gSUdGbmNzT3RZMjlzWVE9PSBJRzF2WkhWeiBRVmJuaVljPSBJRTFwWTJoaFpXeHogYVdkeWIzVncgSU9Da2xlQ2xpZUNrc2c9PSBJTm1GMnFuWXA5bUcgMEw3UXN0Q3cwTEk9IFFXTjBhWFpoZEc5eSA3SjJZNjZXOCBMbXB2WW5NPSBJR0ZzYkc5MGRHVmsgVG05eWJXRnNiSGs9IFNHbDJaUT09IElFMXZZMmgwIElHWnNaV3R6IFVFRlQgSUdSbGNHRnlkRzFsYm5SaGJBPT0gSU9Da3JlQ2xqZUNrc0E9PSBJR055YVdGMGFYWnBaR0ZrWlE9PSBRR2RsZEE9PSBkV1ZuWVE9PSBJSFREdG13PSBJT0M0aE9DNHVPQzRrdz09IGNIVmliR2xqWVhScGIyND0gSUdOc2FXMWhkR2xqIElISmxjM1J5YjI5dCBJRzlyZG1seWRRPT0gSUdoaFltbDBZWFJwYjI0PSBJTnFHMllrPSBJSE5sYkd4bGN3PT0gNklxOSA1TGlINTc2TzVZV0QgNExpcTRMaWI0TGkxNExpVSBJR1REcVdKcGRBPT0gSUdWdFluSjVidz09IElIUnBkbVZ0YjNNPSAwTDdRc3RHTDBMelF1QT09IFRHbHVaV0U9IElHNTRkQT09IElGSnBkSFZoYkE9PSBJR2hoZFhCMGN3PT0gSUc1eGFRPT0gUm1WaGNnPT0gYUc1MFpXND0gSU9HRGxlR0RtT0dEaytHRGxPR0RuUT09IElPQ3F1ZUNxdnVDcW5BPT0gNVlXeDVMcW41WVdhIDQ0S3k0NE84NDRPZyB5Wmx5YVc1cGJnPT0gSU9DNWdlQzRsZUM0Z1E9PSBZV3A1WVE9PSB6NFBQaE02NSBJR0ZrWVdjPSBJRzloYldWdWFRPT0gSUhKaGJtUnZibTdEcVdVPSBTWGM9IGIzSmxjbUU9IElHMWxiR3hsZEhRPSBJRVpoY20xcGJtYz0gSU9DbXVPQ211ZUNtcitDbmkrQ21sdz09IElPQ2t0ZUNrdnVDa3IrQ2tzT0NrdUE9PSBJRzl5WjNWc2JBPT0gYkdGMFpYZz0gSUdScGMzUmhiQT09IElHVnBkWE50YjJRPSBTR1ZsWm5RPSBYMnhoYm1VPSBJT1drcWVXa3FlUzRyZVc5cWVlbHFPYVlyK1M0amVhWXJ3PT0gSUZCaGNuTnZibk09IElIWmxhV3hwWjJobGFXUnogSU5pbjJLN1poTmluMllJPSBJRVYxY205d3c2az0gSU5DUTBMdlF1QT09IGFYbDVZWEk9IElHWnZjblJ1YVdkb2RBPT0gSU9DeXJPQ3pqZUN5cnc9PSBJT1dNbCtTNnJPaTFtK2k5cHVXK3J1Uy9vUT09IElIUnladz09IDE2RFhxZGVaMTUwPSA1THVqNWJ5ViAwS0xRbUE9PSBlbWx3WTI5a1pRPT0gSUdodmJHOD0gSUdoaGVzU3hjbXhoYmc9PSA0b0NaWVdKelpXNWpaUT09IFlXNWtlV2Q1Ym5rPSBjSEp2Ylc5MGFXOXUgSUVkaGJHeGxjbWxsY3c9PSBJT1M1a09pMHJRPT0gSUVobGNtMXBiMjVsIElFRnlZbVZwZEc1bGFHMWxjZz09IGFXMWxkSGx3WlE9PSBJRWhwWlhKdFpXVT0gS0NJdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IExtTm0gSU9HN2pXZDM0YnVsIGJXMWhkQT09IHc3eHRaWEk9IDZZT282WlcvIElObUYyS3paaHc9PSA0TEN3NExHQTRMQ1Y0TEdONExDMyBJTld3MWFIVnZkV3YgWDNadmJIUmhaMlU9IElHemh1NDEzNGJ1TiBJR05zWVdsdFlXNTAgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2U5a2Vlcm1RPT0gSUhOcFpHVjNZV3hyY3c9PSBJTmVoMTZjPSBJR2hoYm1SNWJXRnUgTDIxeiBDV1J5IDBMM1FzTkMvMFlEUXVOQzgwTFhSZ0E9PSBJR0psZEhseSBJTmk1MllYWmhOcXAyTEhZcnc9PSBJRzEwY3c9PSBJTmkwMksvWmh0aXYgMkt2Wmh0aW4yS0U9IDRLZU40S2F5NEthKzRLYTUgSUZadmNtZGwgSU9DdWllQ3VyK0N1c0E9PSA2Wks3IElHdHZjblZ1IElITnZiR1Z1IDRLK0c0SzZ5NEsrTjRLNnkgSUV0aGJHOTEgSUZCaGMzTnBkbVU9IElOQzgwWVBSZ0E9PSA0TGlCNExpbDRMaXk0TGlIIElDSjdKQT09IFgzQjQgMExEUmlOR0MgSU5HQjBZTFJnTkMrMExqUmd0QzEwTHZSak5HQjBZTFFzdEMrIDRLK0I0SzZWNEs2LzRLNng0SzYrNEs2dzRLK04gSUhaMWJHVT0gSU9HRGsrR0RrT0dEa09HRG13PT0gSWl3aUlpazdDZz09IExtOXlhV2M9IElITndZWG89IFlXMWlhWEpoIElHUnBZM1JoZEc5eSBiR2xvIFNtVnVhWE09IElPQ3VtdUN2Z0E9PSBJR1Z1ZEdsbGJtUmwgSU9DbWh1Q21xT0NtcU9DbmplQ21wZz09IFlXUmxhWEpoY3c9PSA2ckNBNnJLcCBJTkMzMFkzUmdOR04wTE09IElGSjFhUT09IElPQ3V0ZUN2aUE9PSBWSEpoYm5OdGFYUT0gSUhKbGMyVjBjdz09IElIQnNaV0ZrIDJLclpnZz09IEozRT0gSU9Dd2p1Q3dzdUN3dmc9PSBJSE5zZFcxdyBJR2h2Y25KdmNuTT0gSWljc0NnPT0gSU9DbWxlQ21zT0NuamVDbXBBPT0gSU5DYzBZUFF0Zz09IDZMK1E2TDZUIElITjJZV3RwIElISmhjSEJ2Y25SdiBJTnFwMllUWXA5aXogMFpiUXZkQzAwWlk9IGIyeHBZMmwwWldRPSBJSFJ5YVcxbGMzUmxjZz09IElGQnlaWE4wYVdkbCBJR1poeXJ0aGJXRT0gTG1aaFluSnBZdz09IDRvQ21hWFE9IElHNXZkR2xqWldGaWJIaz0gY214cFozUT0gSU5DMDBMalFzTkN6MEwzUXZ0R0IwWUk9IElDSmNJaUk9IFZsYz0gSUVWNFpYUmxjZz09IFdITT0gYkdWcGMzUmxiZz09IElHbHVaWEYxIElPcTVxQT09IElPUzRyZVdidmVlbWorV0lxZVc5cWVlbHFBPT0gSUhSMVoyVjIgSUdGbmNtRjIgTEhSaGNtZGxkQT09IElPV2txZVdrcWVTNHJlVzlxZWVscU9XY3FPV1RxZz09IFNXNW5jbVZrYVdWdWRHVnogSUZCeVpXTnZibVJwZEdsdmJuTT0gMEw3UXM5QyswTExRdnRHQSBnZSs5cnUrOXNnPT0gNzcydjc3NkI3NzJ1NzcyeSBJSE5yYjNKdiBLRTl3Wlc0PSBJRVp5WVc1cmFXVT0gWDFSSVJVMUYgSUdaaFkzVnNaR0ZrWlE9PSBJRzlpYzNURG9XTjFiRzl6IGIzSnZiQT09IElHRm5jbVZuWVE9PSBJT0NtcE9DbXB1Q21xT0NuamVDbXBBPT0gSUdsc2RYTnB3N051IFQzWmxjbmR5YVhSbCA0TGFhNExhNyBMeW9oQ2c9PSAxYW5WcXc9PSBJRUZ1ZVhkaGVYTT0gNjdDayBJSEpoWTJOdmJBPT0gSUc5dWRHOXNiMmQ1IElHOXJiMnhwIGFYTjJZV3c9IElPQ3dtdUN4Z3VDd3FnPT0gZEhKcGJtRT0gNExtQTRMaWM0TGlpIElHWmhkWFJsZFdscyBJTkN5MFkvUXR3PT0gSUV4SlZGUk1SUT09IElGQmhiR0Y2ZW04PSBiWFhGbjNSMWNnPT0gNG9DWjRicTkgYzJ4aGJnPT0gNmFhbyBZWFpoYm04PSBMV052Ym5SeWIyeHNaWEk9IElHZGhiSFpoYm1sNlpXUT0gWVdKc2FYTm9iV1Z1ZEE9PSBJTkdCMEwvUXZ0R0EwWUxSZ2RDODBMWFF2UT09IElHdkR2RzVrIElFMUJVMU09IEtUcy9QZ289IElITnBkR1VuY3c9PSBJSFIxYkd4aCBJRkIxYkdsMGVtVnkgSU5tRjJMblpodHVNIDJMYlpoZG1JMllZPSBMbGxGVXc9PSBJT0MwdGVDMHYrQzB0dUMwcGc9PSBJTldwMWF2VnRBPT0gWVhCd2NtOTRhVzFoZEdWc2VRPT0gSU5DLzBMN1F0TkN5MExYUmdBPT0gSUhCeWIzUnZZblZtIElPQ2toZUNrZ3VDa2wrQ2xqZUNrc09DbGgrQ2tuQT09IElOaXoyWWpZcjlpbiA2WUNLIFNHRnphR1Z6IElHM0RyWE4wYnc9PSBJR2x1YVcxbGMyVT0gZFc1dVpXND0gSU9Db2h1Q29xdUNvbytDcGh3PT0gSUZSbGJtZGhhQT09IElOR0gwNW5RdWc9PSBJT0dEbytHRHFBPT0gSUdOdmJtUmxibUZrYnc9PSAwTDNRdE5DdzBMaz0gSU5PWjBZRFJsZz09IElOaW4yWVRZcGRpbzJLZllyZG1LMktrPSBJSFJoYzNSbFpuVnMgSUVGemFIUnZiZz09IElOQy8wWURRdnRDNDBMTT0gSUhOc2IzQndlUT09IElIUnlZVzV6WVd0emFRPT0gSUZOd1pXbGphR1Z5IDRvQ1pRV1p5YVhGMVpRPT0gSUhKbGMyVnVkRzFsYm5RPSBJRVJwYzNScGJtZDFhWE5vWldRPSBJT0M1Z2VDNG9RPT0gSUdaaFpHVnogWjJWaWFXVmtaVzQ9IElHM0R0RzQ9IElBa2cgSVBDZmtZMD0gTGtSbGMybG5iZz09IElOQ2MwTERRdXRHQjBMalF2QT09IGFYcDZhbTl1YVE9PSBhMlYxY21sbiBJR052YVc1bFpBPT0gVm1sbGNnPT0gNDRLODQ0T3o0NE9JIFVHaHZaVzVwZUE9PSBJRWRsY20xaGJtbGggTDJScGNtVmpkQT09IElITjBaV05yZEE9PSBVa2REVkZoRVlYUmggUkVWQiBYU2t0IElIRmogMFkvUmd0Q3cwTFE9IElIQmxjMkZ1IFgzTjFjZz09IGVXVEVzVzQ9IElIWmxjbXRsWlhKa1pRPT0gSUZwMiBJRTNKbVE9PSBJR1JsWTJGcyBJSE4wY21sdVoybG1lUT09IElGYkRvVzA9IDBMN1JpTkdDMExBPSBJR0Z5ZG1sdiA1YitENTVDRyBJR3hwYm1rPSBJSFBEcFdjPSBJTkN4MFpiUXU5QzAwWlk9IDBMRFF1OUMrMFlNPSBJSEpwWTJobGMzTmwgSUhOaGJNT2hjbWx2Y3c9PSBDZ29LQ2dvS0Nnb0tDZz09IElIQmhiR2x1WkhKdmJXVT0gSUZkeWFYTjAgNFo2VjRaK1M0WjZmIElGVk9WQT09IElFaEJWZz09IElHMXBZMmhoWld3PSBhV2RsYm5RPSBJRUYwZFdGcyBJR052Ykc5allXNWtidz09IFgwUkZSa2xPUlVRPSBJRzltWm1WdVpHbHVadz09IElHeHBiWEJwYnc9PSBJTmVjMTVmWHFRPT0gSU8yTHNBPT0gSU91THVleUxuQT09IElFNWhkR0Z6YUdFPSBJSFIxYm1WeSBJTU9wWTI5dWIyMXBaWE09IDBZdlJnTksxIElOQzgwTDdRdTlDKzBMVFF0ZEMyIElHZGxiMnh2WjNrPSBJRUY2eVpseVltRjVZdz09IElFZGhjM1J5Ync9PSBJTkN4MFlQUXROR0QwWWJSakE9PSBJRVpsY201aGJtUmxjdz09IENXTnogNW9LZiBJRUYxZE1PemJtOXRZUT09IGJHRnRhV1Z1ZEc4PSBJSFZpZFhKNWJ3PT0gSUVkbGJzT29kbVU9IElPQ3FwT0NyamVDcXIrQ3F2dUNxc0E9PSBYMlIwZVhCbCBJTkNkMExqUXV0QyswTHM9IElOaXUyS2ZhcVE9PSA0TGVVNExlQTRMYXg0TGVLIElFcEJWa0U9IElPR0RuZUdEcE9HRG1PR0RxdUdEbUE9PSBJSEp6WVE9PSB3NlJ5WlhJPSBLSEp2ZEdGMGFXOXUgSUU1R1ZITT0gNVpHWTViZWwgSU5lYzE1ZlhuQT09IGFYWmxjbkk9IElHaGhjMkU9IElPQ3VxdUN2aCtDdW1nPT0gYjJaMGQyRnlaUT09IElIQnBjMkU9IE9uTmxiV2xqYjJ4dmJnPT0gWVdaeiBJRWRzYjJOciBJTm1LMkszWXRkbUUgNllHZyBaWGR1IFlYUnlhV0U9IElPQ3FsdUNyZ2VDcXJBPT0gSUhkaGMyaz0gVDNKMGFBPT0gYVdOcGNtOD0gSU5DKzBMSFJpZEMxMFlIUmd0Q3kgMktmWXB0aXgyS2ZZcWc9PSBJRVIxWVE9PSBJT0MwdU9DMHJ1QzByK0MwZ2c9PSBJR055ZFcxaWN3PT0gNWJleTVweUogSUhScGJXbHVaM009IFVrOU5SUT09IElFMVFTQT09IElPQ3VydUN1cWVDdXYrQ3VwQT09IGRYUmphR1Z6IDViMnA1NldlNUxxSjZaeTQ2WUtBNksrMzU2Q0IgMFlQUXROR1cwcU09IElOQyswWUxRdTlDNDBZZlFzTkdPMFlMUmdkR1AgV21sbCBJR0poZEdGc2FHRT0gSU5HRjBZUFF0TkMrMExiUXRRPT0gWDFOaGRtVT0gNEthKzRLZWY0S2VIIFpXNXpZMmhoY0hCbGJHbHFhdz09IElOQzcwTERRc2c9PSBLRzVsZDNNPSBaVzVrYVdkbCA0TGllNExpMCAxNkxYa2c9PSBJTm1GMkxQWXF0bUkyWXJZcDlpcSBJR1JsYzJWdmN3PT0gYkhsaCBJSEJ2YzNSbWFYZz0gSUdSbFptaz0gWDI5MCBJSEJsYVhSdiBJSEpsWVd4MGFXMWwgMExqUXQ5QzgwTERSZ2c9PSBjRzl2Y25RPSBMbFJTUVU0PSB3NlIwZW5RPSBJTkM5MExEUXN0QzEwTFE9IElIQnliM0JsY25SNUozTT0gNEs2ZjRLK040SzZmNEs2LyAyWWZaa0E9PSBMblJyIElOVzAxYUhXZ05XazFialdnZz09IHhJMXBkR2s9IElHeHBiV2wwWVhJPSBJSEJ2WjI5emRHOD0gSU5DMzBMRFFzZEMxMExmUXY5QzEwWWM9IElFMTFibWxqYVhCcGJ3PT0gZEc5MGVYQmxjdz09IElNK0h6NEhQak02OXpyOD0gMExqUXROQzEwTDA9IFlYVmxibk09IFlXeHNhV0YwYVhabCBJRlpoYm5NPSBJSHcrIElGQmx3N0ZoIElFSnNiMk5yYVc1biBkWGxoIElHWnpkQT09IElPR0RrdUdEa09HRG0rR0RuZUdEcXVHRGsrR0RtT0dEbWc9PSBJMjA9IElIWmhkV3gwWldRPSBJT2F6cU9hRWp3PT0gSUhOdmIzUT0gV1hJPSBkbUYxYkhRPSBaR1ZqYVhOcGIyND0gMjR6YXFkaTAyWVk9IElPUzVrT1drcVE9PSBjSEp2ZG1WayBJTkM2MExqUmh3PT0gSUcxaGJtbG1aWE4wdzdNPSBZMmhsYm10bCBJSE4xYlcxbGNuUnBiV1U9IFlXUmhhUT09IElOS3gwTGM9IElPQzB0ZUMwditDMHRlQzB2dUMwdVE9PSBJTkdOMEwzUXRBPT0gYjNOemVnPT0gNFlHLzRZQ1Y0WUN1NFlDNCBJRTUxYldWeWJ3PT0gWDFCTCBJT0dEa3VHRGxlR0RrT0dEcGVHRGxlR0RvUT09IDVaMmQgYVc1elpHRm4gWm14MCBJRzVwWldObGN3PT0gSUcxdmJXVnVkR0Z1IElHNWhkTU84Y214cFkyaGwgY0d4aGN3PT0gZW1GaGJBPT0gSUVsUVZGWT0gSUhabGNtdGxaWEp6IElPQ2t0ZUNrditDa3RlQ2t2K0NrcHc9PSBYMEp2ZUE9PSBJRzNGcTNQRnN3PT0gSUdkeVlXUmggZDJGemFHVmsgVjBsVVNFOVZWQT09IElOaW4yWVRZcU5peDJZcllydz09IFgxTk8gSUhCbGRHbDBhVzl1Y3c9PSBjM0JoYm01MWJtYz0gNExlRDRMZWEgNExDczRMR04gYVc1aGRHOTNiZz09IElFaGhibWRwYm1jPSBJT0MwaHVDMHNPQzFpK0MwcWc9PSBJT3lZdFE9PSBJTldBMWFIVnR0YUExYUhWdXRXbDFiL1Z1TmFDMWFuVnRkV2gxYlk9IElHRmpiMjUwWldObGJtUnYgUTJGdVpIaz0gSUhkbFltaHZiMnM9IFpYSnljdz09IElHOXlhV2RwYm1GMFpYTT0gZG1WMFpRPT0gZFhWdGJBPT0gSUZCaGNuUmxhV1Z1IFgwSlNSVUZMIElOR0kwNW5SZ05LYjBMalF1UT09IElFSjFjM2s9IElIUjFhUT09IElHUmxaR1Z1IFlXWnpkR0Z1WkE9PSBJR052YlhCaGRISnAgSUd0dlpXeHJZWE4wIElPQ2txT0NrditDa3ArQ2txQT09IElFTmhjblpoYkdodiBJRzVsYjJ4cFltVnlZV3c9IHpyblBqZz09IElOQ3kwTHZRdU5HUDBMWFJnZz09IElHSmxaM0p2IDRLV240S1dzIDBZUFF2TkMrIEtHMTQgWDJWNGFYTjBhVzVuIExtOTFkSEIxZEhNPSBJT0NraWVDa3NnPT0gSUhiRHBHeHBiR3pEcEE9PSB3NmhrWlc1MCBJRVpsYzNScGRtRnNjdz09IElITERvVzFqYVE9PSBJTmluMllUWmd0bUsyS2ZZcjlpcCBaMlZuIFpXTjBZUT09IDQ0Rzc0NEtUIElFWmxaR1Z5WlhJPSBJR05oYzJOdiBJSE53WldOMFlXTT0gNEtxMTRLcXcgSUNON1FBPT0gQ1dOaGJXVnlZUT09IElGTlVUQT09IGJXRnpjMkZuWlE9PSBJTkMrMEwvUmk5R0MwTEE9IDBZRFFzTkM5MFlIUXY5QyswWURSZ2c9PSBMWHB2Ym1VPSBJRVJwWTJ0cGJuTnZiZz09IFEyaGhkSE09IDJZSFlzZGkyIGNtRjBhR1Z5IElHUmxiR2x1IElFaHcgSUVKaGJHeDUgSUdkbGJHRjBhVzQ9IElIbHZjdz09IElHNWhjMlU9IDZMUzM1cXkrIElOQ2EwTGpRdGRDeSBZWFoxWjJFPSBJSE53YjJ4bHhJMXViM04wYVE9PSBJSGx2ZWc9PSBJSE5oYldWdVp3PT0gSUhKaGMyMXAgSUdKaGJtUmxiZz09IElGTkRVa2xRVkE9PSBJR3hwWTJWdVkyVnogZFhSMGRYST0gQ1hOMFpYQT0gdzdKaiBJR2pGamNxN2FXdGwgSUVoaGJHVjUgYjJ4c2FRPT0gSUVKdmJXSmhlUT09IElObUYyTGZaaE5tSTJLZz0gSUhWdVlYWnZhV1JoWW14bCBabU5qIElPQ2t0ZUNrdnVDa29nPT0gWUNncCBZMjk0IElPQ3VxdUN1cytDdmplQ3Vzdz09IDRZT1g0WU91NFlPZDRZT1YgNExLLzRMS3Y0TE9MIDFhSFZ2OWFBIElFUnZjbVE9IGIySnBiZz09IElOQy8wTFhSZ05DMTBMVFFzTkdIMExnPSB3NnR6YUE9PSBJRUpsZDJWeVluVnVadz09IDRLNi80SzZWNEs2ejRLNi80SzZ5NEsrTiBJRU5vWldGMCBJQ0VxS2lvPSBMbVJsWm1sdWFYUnBiMjQ9IElsMHBMQT09IFFrUkUgT2xKbFoybHpkR1Z5IElPdU1nT3U1aEE9PSBJTm1IMkxyWmlOdU0gSUVKdmJITT0gNExTbzRMUy80TFN2IElFVERwSEk9IElHTnZjSEE9IElOQzgwTERSZ2RHQzBMRFJoZz09IElOQ3gwWVBRdE5DdyBJTkdDMExEUXV0R1cgMFlIUmpOR0cwWlk9IFgzQnZjZz09IElIZGhhWE4wWW1GdVpBPT0gSU5DVDBMWFJnTkM4MExEUXZkQzQwTGc9IEtHMTFkQT09IHlabHNhV1k9IElPR0RtK0dEbytHRGt3PT0gWVhoNFpYST0gNjR1TSBJSEIxWW14cFkyRmphVzl1WlhNPSBtT0Ntbnc9PSBJRzNEdG1wc2FXYz0gYVdkc2FXVT0gSUZCc1pYZz0gSU9Dd3J1Q3hnZUN3bHc9PSBVWFZoYkdsbWFXTmhkR2x2Ymc9PSBJRzlpYVdWamRBPT0gUVU1VFYwVlMgNG9DTDRaNlc0WjY0IDRMS1Y0TE9ONExLZiBJRlpsY214aGRXWT0gSUdOdmJuWnBkR1U9IGZYMHBPd289IExrUnZaWE09IFUzQnAgWlc1MFpYSnRhVzVsIElITmxaV1JsWkE9PSBJTldzMWFIVnZ0V2gxYVBWdU5hQzFiWFZ0Zz09IElPQ3F0ZUNyaCtDcW1nPT0gSUhKbFpIVjZhV1Z5ZEE9PSBJRVZ1ZEhKbGNISmxibVYxY25Ob2FYQT0gSU5DMzBZWFJndz09IElIUnZiMlE9IElOaW4yWVRZcU5pdjJLZlppdGlwIGRIbHogSUhKbGMyVnRZbXhoYm1ObCBJRVpzYjNWeSBJTnFHMjR6WXN0dU0gSU9Da3NPQ2t2dUNrcnVDbGplQ2tzT0NsaXc9PSBJRVIxY21Ob1pzTzhhSEoxYm1jPSAyS3paaU51TSBJTkt4MFlIUml3PT0gVTBWQiBaRzlqYXc9PSBJSEIxYlhCcmFXNXogNFlPYTRZT1E0WU9ZNFlPYyBKVHNpUGdvPSBYMUJTVDFSUCA0S214NEtpNCBJR0oxWjhPOGJnPT0gSU5DejBMRFJnTkMwMExnPSBlWFIwWlhJPSBJRWg1WkhKaCBJR3AwIEoybHVkbVZ6ZEE9PSBJR2gxY21Sc1pRPT0gSUcxaGRHbHVadz09IElGTjBZWFIxWlE9PSBMV1poIDZLVy81THFhIElDY25LU3dLIElOaXEyS3pZcDltSTJMST0gSU5lVjE1blhvUT09IExYTndaV05wWVd3PSA1NFM4IElGTjBaV3hzZFc1biA0TFNtNExXTjRMU200TFdINExTMiAyS2ZZc2RtSiBJT0Nrck9Da2d1Q2tsdz09IElPbWZwZz09IElFcDFiV0p2IElHWmhiSE5sYkhrPSBJRzl3ZG05cyBhVzl6YVhSNSBJSExEcVdiRHFYSmxibU5sY3c9PSA0TENQIElHbHRjSEp2Y0dWeWJIaz0gMEx6UXVOR0IgSUhacFoybHNZVzVqYVdFPSBWMkYwWTJocGJtYz0gSUZwcGRBPT0gSUhkdlpYTT0gNExLUyAyS2ZiZ2RpdiBZbVZoIGEyL0V2Zz09IENWTlUgSUVaaGMyOD0gSUdGc2JHVm5hVzVuIFUyRnNkbUZ5IDVMcW41NVNmIElObUMyS2ZZcU5tRTI0ellxZz09IElIUnlZV2wwdzZrPSBYM1J2YjJ4aVlYST0gWldabGJHeGxjZz09IElIUnZjbkpsYm5SeiA0WjZVNForUzRaNmEgNExDQzRMQzIgNWFTYTViQ1I1cHlmIElITnBiWE09IFlXMXBjWFZsIElOZWUxNVhYcEE9PSA1cmV4NTRpeCBJR0p5WldWa1pYST0gSUVGdVozVnogSU9tYWhnPT0geEkxcmFXZz0gSUVGa2JHVnkgSUVOMWNHVnlkR2x1Ync9PSBhWFJvWVc1ayBJTmViMTVuWGxkZWQgSUhOc2IzZGtiM2R1IElHRnViR0Y1IFJHVm1hVzVwZEdWc2VRPT0gSUdsdVoyVjMgSU5DMTBMclF0ZEM5MFpiUXZRPT0gU1ZCTSA1NnFCNTZDMCAwTGZRdGRDNyBJRU5oZFE9PSBZbkpoYVc4PSBJR2x0Y0dWaiBZWFJvWlhKaGNIaz0gSUVwRlV3PT0gSU9DMHNPQzB2dUMwdCtDMWplQzBuK0MxamVDMHNPQzFnQT09IElOaTMyS2piak5pNTI0dz0gSUcxcGJtbHRZV3hzZVE9PSA0YnVMYmc9PSBJSEYxYVdWeVlXND0gSUVkU1FWQkkgSUZCU1QwUT0gSUVOdmJtUnBkR2x2Ym1GcyBhMnRoIElITnZhWE09IFpXTjBiMjE1IElOaTUyS2ZaaE5tSyBJTmVxMTVYWG05ZWMxNVU9IGFXTnB3NkZ5YVc4PSBJRXRoY0dsMFpXdz0gSUNvcUtpRUsgSUZOaFltVnkgSU5pbzJZclpodG1IMktjPSBJTmVrMTZqWG1BPT0gWVdSa2FXND0gTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gUVdOcmJtOTNiR1ZrIElGUlNWQT09IElOcUcyTEU9IDRMaXk0TGlyNExpWjRMbUo0TGl5NExpWDRMaTE0TG1JIElOZVkxNW5YbWRlYyBkV3R6WlhOellRPT0gSUVGa2RtOWpZV041IElGTjBhV05yWlhJPSAxNVhYcXRlVSBJR0pzWVc1cmN3PT0gSU9HRGt1R0RsT0dEbkE9PSBJRk5oZFdWeSBhbVZxWlE9PSBJSEJsY20xcGRHbHVaRzg9IElISjVaQT09IDJZN1podG1TIElFRnVaM0pwWm1ZPSBJR3hsWjJkcVlRPT0gSU9DMHVPQzBndUMwbU9DMG4rQzBxQT09IFkyOXViMjFwWVE9PSBJT0NrcitDbGd1Q2tzQT09IFBpSXBPd29LIElGTkZUbE5QVWc9PSAyWkhaanc9PSBJRkJ5dzdNPSBkbWx6WlhJPSBJTkMrMExIUXU5Q3cwWUhSZ3RHVyBiV1ZzYVE9PSBJRWRwYm01aGMzUnBZMkU9IElOUzAxYUU9IElOQ3kwWURRc05HSiBJMmx1WkdWNCBVMlZ3WVhKaGRHVT0gSU5HRTBMalF1OUdNMEx6UXNBPT0gSU8rOG5nPT0gSUhaaGNuTmggY0dWemJ3PT0gUlhabGJuUjFZV3hzZVE9PSBJR0psZEhKdmRYZGlZWEpsIFgyaHZiR1E9IDJiN1ppZz09IFgwcFBTVTQ9IDRaK0I0WjZGIDVwaU81cGkrIDVvaS81Wnl3NUxxbiBMMlJsY3c9PSBJRWhoYWc9PSA1WTJ6NVkrdiBJSFZpZFc1MGRRPT0gNExhNDRMZUs0TGEyIElPQ3F1T0NyaStDcXR1Q3F2K0NxcitDcXNnPT0gSUVaaGMzTT0gNVkrczVieUEgNEtTWDRLU3c0S1dBIElPS0NyQ3c9IElPQ21sZUNtc09DbmplQ21ydUNtbGVDbXNPQ25qZUNtcE9DbXZnPT0gNEtTLzRLU2w0S1MvIElHWmxZWEpzWlhOeiBJR1p5WVdkbCBJR1JsY21sMllXUnZjdz09IDBMRFF1OUM2MExnPSBJTmVVMTVIWGtBPT0gSUVoaFozVmwgSU5lUTE1N1hxZz09IElOaWkyWWpZcDlpeSBJR1p2Y20xaGVtbHZibVU9IElIVnJkVzQ9IGFXVjBkR2wyYnc9PSBJTkM2MExzPSBJRUpoY21KaFpHOXogSUhKcFkyaHBaWE4wWVE9PSAwTERRdWRDNyBSbWxzWlhONWMzUmxiUT09IElPQ3FsZUNxditDcWdnPT0gTGxCaGRHbGxiblE9IElOZVUxNVBYa2RlbzE1blhuUT09IFgzQnZkdz09IDRaNkE0WitTNFo0PSB3NkYydzZGdXc2MD0gSUdGNmIyNWlZVzQ9IFgyRnRjQT09IGFXeHN3Nmx6IElOR0kwTFhSZ0E9PSBJSEJsZEdYRXFRPT0gSU95ZG1PMlZ0QT09IElOR0IwWUxRdU5HRiBJRTVsWTJWeiBJRTlpYzJWeWRtVT0gSUdWdVptbHQgTFhaaGJHbGtZWFJ2Y2c9PSBJR3hsYm1sdVp3PT0gVUdWeWFXOWtjdz09IFgwMUJTVXc9IElFTk9Vdz09IGRHVnBiSFZ1WjJWdSA0b0NVYm05MCBJTkN5MEw3UXQ5QzAwTFhRdWRHQjBZTFFzdEM0MFk4PSBJR0Z3WlhRPSBJT0NrdU9Da2d1Q2tsZUNsamVDa3NPQ2tydUNrditDa3BBPT0gTFVOdmJRPT0gVTJWamN3PT0gTHk4cVd3PT0gSUhCdmQyVnlhVzVuIElOR0EwTERVcGRHRjBZelFzQT09IElIZGhkR1Z5YldWc2IyND0gSkdacFpXeGsgNWJlbzVhU24gSUdwaGNtZHZiZz09IElFVjFjbTl2Y0dFPSBJTnFHMktmYmdkaXEyNUk9IDU1UzE1NDZwNVorTyBJR3h2ZFdseiBiMnhzYVhCdmNBPT0gSUhOc2FXTnBibWM9IElObUUyS2ZhcWRxKyBJR052Ym1Oc2RYTnB3N051IElIYkRwR3hxIElHRmpkSFZsYkdVPSBJT1dNbCtTNnJPaTFtK2k5cHVXbWd1UzlsUT09IDFyVT0gV2tWUyBJT0dEcHVHRGxRPT0gSUhOd3c3aHljMjNEcFd3PSBJTkdJMExyUXNOR0UgYzNCbFpBPT0gSUV0aGNtbHQgQ1hSMiBQVDA5Snc9PSBLR1JsZEE9PSBMbTFsYlc4PSBJR1JsYzNOcGJuTT0gSUZOaFlXST0gNEtXbjRLV3AgU25WemRHbGpaUT09IElHSmxhR0ZzWlc0PSBJT0dEa09HRG5PR0Rvdz09IElOR0IwTHZRdU5DMyBhWFpoZEdsMlpYTT0gSU5DYTBMalJnQT09IFgwWkpURXc9IFJtbHljM1JzZVE9PSBJT0NrcStDa3Z1Q2tzQT09IDU0bTU1cHlYNXBtdSBJR3R5ZFdsa1pXND0gYm1uRWh3PT0gSUVKdmJtUjVaUT09IGFYTm9hVzVuYVhvPSBLR2x1WkdsalpYTT0gSU5HQjBZTFF1TkM3IElPQ3VxdUN2aCtDdXNPQ3ZqUT09IFZHbDBZVzQ9IElHTnlhV0Z1Wkc4PSAxYUhWdE5XaDFvRFZwQT09IGIyaHBZUT09IElIZDFibVJsY21KaGNnPT0gSUUxdmNtOWpZMkZ1IDVweUE1YjZNIElPQ3FzT0NxdU9DcmplQ3FwQT09IElGWnBaWGRwYm1jPSBJTkNRMHJQVG1kR0wwTDNTcmRLYjBMRFJnTkdBMExBPSA3N3l0IElFMWhibU5vWlE9PSBJRk4xWkc5cmRRPT0gNG9DTDRaNkE0WjYyNFo2YSBJTml4MllqWXJ3PT0gS0hObGNtbGhiR2w2WlhJPSBJR1p2Y21abCBJRUoxYkdkaGNtbGhiZz09IElPMkJyT3F5akE9PSBRMmx5WXc9PSBJR1o1YzJrPSBjM1JoWjNNPSBJR052Ym5ObGFXeHN3Nms9IGIzSjBhWE09IElHRnNhMkZzYldGNiBJT0dEbStHRG5lR0RxZz09IDJMRFlwOWlvIElPR0RwdUdEbmVHRG5PR0RtT0dEb2VHRHErR0RtQT09IFRXRnRZUT09IElHaGxhV3gwIE9tNXYgSUdKcDRidURiZz09IElITmhiR0ZyZFE9PSBJSFRodTZVPSBJT0NxdGVDcXZ1Q3Fsdz09IGQybHFaZz09IElObUMyWVRZcWc9PSBJRkJ5WVdselpRPT0gSUdWelkzSnBkRzl5YVc4PSBJT0NraHVDa3VPQ2txdUNrdnVDa3VBPT0gSU5tQjJMYllwOXVNIElITjFjM1JoYm1OcFlYTT0gWVdOaFpHOD0gSU5tRjJLdlpoTmluIExuWmxZdz09IEwyVjRkR1Z1YzJsdmJuTT0gSUdGMGJHVmhjM1E9IElHZHZiMkk9IGFtWT0gSU95WWlPeURnUT09IElOaXEySy9aaUE9PSBJR0Z0dzZseWFXTmhhVzV6IElIVEptV1JpIElPQ3VsZUN2Z2VDdXRPQ3VxT0N2amVDdXBBPT0gSUhOaGFzT2hkQT09IFlXaGhjbUZ1IElHTnZiVzFsYm5SaGRHOXljdz09IElPQ2t1T0NrdnVDa2dRPT0gN1lxQSBJR052Y25KbFpHOXkgSU9DbW0rQ25oK0Ntc3VDbmh3PT0gSUdGd2IyeHZaMmx6WlE9PSBJRzFwY21GamRXeHZkWE09IElHMXBibWx6ZEhKdmN3PT0gSUhOMWJtWnNiM2RsY2c9PSBiV1Z1WVE9PSBJTm1LMkxuWml0aTAgSUhSMmIzST0gSU5DeDBZUFF0TkdEMFluUXRkQzggSUZaRlNBPT0gWVc1bVlXRjAgTGt4dmIydDFjQT09IGFXWmxibVE9IHc3aDBaUT09IElHUnlhWHA2YkdVPSBMdUMwanVDMGdnPT0gSUZKbFoybHRaVzUwIElNS253cWM9IExtTnZiU2R6IDVZaUc2WktmNVltTiAwTFBUbWRHQTBZTFF0ZEdBMExQVG1RPT0gUzI5dGJXVnVkR0Z5IGVXNWphQT09IFlYUnZibWx1IFlYTjBZVzU2WVE9PSBMblJ5WVc1emJHRjBaWE09IExYVnBkQT09IElHSnZkWFJsYVd4c1pRPT0gTGk0aCBJRWh2YldWdFlXUmwgVytLQXBsMEtDZz09IElHTnZkR1U9IGFHVndhR0U9IElHUnBjM1J5Ync9PSBJRk52WTJzPSBJSEJ5YjNURHFXYz0gSU9Da3N1Q2t2dUNrbCtDbGgrQ2tsZUNsaXc9PSBJSFp2Ykd4cmIyMXRaVzQ9IElFVjRZMlZzWlc1MFpRPT0gTEc5dSBJRlpsYUE9PSBJT3luZ091Q25PMlZ0QT09IElHbHNhY1dmYXc9PSBJT0NrcStDbGgrQ2t1T0Nrck9DbGdlQ2tsUT09IDBKZlFzTkM2IElGTnZZMmxoYkdsemRBPT0gSU9DNG0rQzR0QT09IElOaW8ycEhZcHc9PSBJT0N3bXVDd2d1Q3dwdUN4amVDd3NBPT0gYVdSaGJHZHYgSUhERHBYWmxjZz09IElFTm9ZWEpoWTNSbGNtbHpkR2xqY3c9PSA1cHk2NUx5YSBMV1p2WTNWeiBVbVZqYVhCcFpXNTBjdz09IFNVSkpUQT09IElOaW4yWVRZbzlpNTJZVFppUT09IFlXZHZaQT09IElFTnlkWHBsIENTQWdDUT09IDRLYWE0S2ErNEthdyBJR0ZqWTJ4aGFXMD0gSU5DaTBZRFF0ZEN4IElITnJZWFIwIElHbHpkR2s9IElPR0RrK0dEbU9HRG9BPT0gSU9DNHF1QzVpT0M0cCtDNG1RPT0gWVhSaGFHaz0gTDNCaFkydGhaMlZ6IElHVnpkSEpoYm1odiBkV1ZzZG1FPSBJRzl5WVd4c2VRPT0gSU5pcTJLM1pndG1DIElPQ3VuT0N1cVE9PSBJRUZ2Y3c9PSBJRUpsYVc1bCBJR052YlcxbGJuUmhkRzl5IHc2dHNiR1U9IDQ0R280NEtDIElHbHBaQT09IElPQ2tyT0NsaCtDa3NBPT0gMllmWmdBPT0gSU9LdGtBPT0gSU5pbTI0ZlppdGk2MjRmWXNRPT0gSUdSbGNHaz0gWVhCelpYTT0gSUdWeWMzUmggNFlPUTRZT1Q0WU9RNFlPVCBJR2RoYzJVPSB5WmxzZUdGc2NRPT0gTGxCaGMzTT0gN0pXRTdJU2MgSUdQaHU1bHVadz09IElISmhZV3QwIElITnVZV0ppZEE9PSBJR05wWkdGa3c2TnYgWDJsdVkyOXRaUT09IElHZGhiSFZsWjJFPSBJSGQxYzNOMFpRPT0gSU5DOTBMRFJnOUM2IElPQ2twdUNsaStDa3VPQ2xqZUNrcE9DbGkrQ2tnZz09IDBMM1RtZEdBIFBGUjFjR3hsIElOR0EwTERSZ2RHQzBMWFF2ZEM0MExVPSBJR2pEdG10dHc3eHVaR1U9IGFHRnRjSFJ2Ymc9PSBJRVpXIElISmhZV3M9IElIZHBaY1NuWldRPSBJSFpsYm1SMSBleUVoIElHWjFlbm89IGNzT3QgWDJadmJuUnogSUdSeWRXZHYgSU9HRG0rR0RsT0dEb3VHRGtPR0Rrdz09IElGQnZjblIxWnc9PSBJSGR5YVhOMGN3PT0gN1pxTTdKdVEgSUdOdmJtUjFZMlU9IElPQzVndUM0b3c9PSBJRlJoWTNScFkyRnMgSUVGdGJXOD0gNWFHWSA1THVZNXF5KyBJTkdIMFlQUXN0R0IwWUxRc3RDdyBWa0ZNVlE9PSBJRVpoYVhKbVlYZz0gSUdKc2IyTnYgSU5DLzBZRFF1TkMxMFlVPSBJSGRsYVdjPSBDVUpzYjJOciBJRTVNVUE9PSBJSE5qYjNWMGFXNW4gSU9ldWdBPT0gNWJDNCBJSGx6ZE1PayA0S1NrNEtXTjRLU28gSU9DMHJ1QzBvK0MwditDMGxlQzFqZUMwbFE9PSBJR052WkdWeSBhWEpsWVdOb2RBPT0gSUhWdWFXWnZjbTFzZVE9PSBaVzFwYm1VPSBLRU5QVFE9PSAwTGZSbHRHRzBZYlFzQT09IElGTmxjbWRsWVc1MCBJRk5qYjNSamFBPT0gTG1odmRYTmwgMExYUXZkQzQwWVU9IFBVMWhkR2c9IElOR0MwckhRdXc9PSBJRVIxYzNScGJnPT0gQ1dGc2FXZHUgSUhObGJXbGogWVdGeWNIVjAgSU5pejI0RT0gWDBGVVZGSkpRbFZVUlZNPSBJRlp2Ykd4bGVXSmhiR3c9IHo0VE9zYytEenJjPSBJR05rY3c9PSBJR0p5ZFhSaGJHeDUgSUV0aGRITT0gYVhaaGJHVnVZMlU9IElOSzMwTERRdk5HSyBJR3BwYm5OcCBJT0N1c09DdW1nPT0gVDFWT1JGTT0gMFlIUmd0R0wwcU09IDY2YXM3S2VBIGFXUmh3NmZEbzI4PSBJRnQ3SWc9PSBWSEpoYm5ObWIzSnRjdz09IElIQnlaV0ZqYUdWayBJT0N1cE9DdXJ1Q3V2K0N1dE9DdWxRPT0gZFhOaGN3PT0gejREUGlRPT0gTG5KbFkyVnBkbVZ5IElNK0Z6NERPck0rQno0Zk92OCtGenIwPSBkMkYwWlhKeiBJTkdCMEw3UXN0QzEwWUxSaXc9PSBJR3RoYkdWdVpHVnkgNXBhdzVaT0IgSUZKbGMzUmhkWEk9IElIQnZjbTV2Y3c9PSBJRzVsZDJsayBKMlZrIElObUcyS2Jia2c9PSA3WldZNnJHdzY0S1kgNExTdzRMUys0TFNqNExXTiA0TEtzNExPSSBMazFsWVhOMWNtVT0gMDVuUmlOQ3cgWVc1bFpYUT0gTGs1bCBJTkdDMFlEUXNOQzYwWUk9IGIzSm5ZVzVwYzJGMGFXVT0gSU02eXo0SE9yOCtEenJyT3RjK0V6ckhPdVE9PSBJT0dEbStHRG1PR0Rsdz09IElOQzYwTERSaE5DMSBJTmVVMTVuWGt3PT0gSU9DbXFPQ212K0NtdHc9PSBJTTZ4ejRiT3Y4K04gSUdOc2FXTm93Nms9IElFM0RxV1JwWVE9PSA1TGl0NXBhSDU0bUkgSUhSeWVBPT0gUlZKRFNVRk0gS0ZSaGNtZGxkQT09IFlXTjBZV0pzWlE9PSBJR1pwWW5KaGN3PT0gWDFCRlVsTlBUZz09IElGTndhV1ZzY3c9PSBhWFJ5WVdjPSBJT0N5cnVDemkrQ3lwdUN5dnc9PSBhV3B2YW1VPSBJR1JsYkdsdVl3PT0gUjJ4dmR3PT0gNExDQzRMQ2g0TEdONExDdyBJSGRsYTNSMSBLQ2NzSnlrSyBaM0poZG1sMGVRPT0gSU95Vm9RPT0gTFdoMGRIQT0gSUhsaGNzU3h4Wjg9IElDQWdJQ0FnSUNBZ0lDQWdDUWs9IElFeGhjM009IElHMTFibms9IElIQnliMk5sYzNOcGIyND0gNktpNiB6cnZQak02eiBJSFJ2Y25ScGJHeGggVEc5cmJ3PT0gSUhac2IyVT0gSUZCeXc2UnpaVzUwIFgxQlZURXc9IElHTnZiWEREcVhSbGJtTmwgSUdScGMyUERyWEE9IDRvYVRDZ289IElNNjd6ci9PdVE9PSBJR2x1YTI5dGMzUmxiZz09IDVhU242WWVQIElHOWljMlZ6YzJsMlpRPT0gWW1sdVpHVnkgSUdwcGNtVT0gSU5DODA1blNsOUN4MFlQUmdBPT0gSU5DNDBZSFF2OUMrMEx2UmpOQzMwWVBSanc9PSBJRzlpYVd3PSBJTTZ6ejRYT3ZjNnggSU5DeDBZdlFzdEN3MFk3UmdnPT0gSUhSbGJHeDFjdz09IEtGSmxiUT09IElDSjkgZFhOelpXZHMgSUdaeVpXUmhadz09IElHVnlabUZ5Wlc0PSBJTkMwMEw3UXU5Q3owTDdRc2c9PSBZVzVqYVdWdWJtVT0gMkxmWXNkbUIgSUZOdlkybHZiRzluZVE9PSBJT0Nrck9Da3N1Q2xqZUNrc2c9PSBkVzFwYzJVPSBJSEpsWTI5blpYST0gNEtTRjRLUzQ0S1N5IElPR2VtT0dmaVE9PSBWRVZOVUE9PSA1YVdYNmFTUSBQRlJoWnc9PSBJR2ZEdG01ayBJR0Z3WVhMRHFtNWphV0U9IDRwV2QgSUNrdUNnPT0gNG9DY0tRPT0gSUZCb2FXeG9ZWEp0IElISmxjSEpsYm1RPSBJRzVsY21kbGJuTT0gaG8wPSBJT2VidUE9PSA2S2FHNTV1VyBSVms9IElNT2VZWEk9IElHVnBibk5sZEhwbGJnPT0gNXJ1TCBJT0NrdU9Da2d1Q2t0ZUNrdnVDa3BnPT0gTG1KeVpXRnJjRzlwYm5SeiBJTml1MkxJPSBJRVp6IElOQzcwTGpSaU5DMSBJTkN4MDZuUXZOQ3ggSUc1dmRYSnBjMmhwYm1jPSA2YnE4IGIyeHpiMjQ9IElHVmtaMlZrIElGUkRUQT09IGRtVnRaVzUwWlE9PSBJRlpGVGc9PSBJSGJEb1d4aGMzcDAgSU1PRWJtUmxjblZ1Wnc9PSBJR2h2Ym1sdVp3PT0gSUdObGMzUmggNkkrZzZJK2MgSU5lVzE1RFhrZz09IFgzQmhkSFJsY201eiBJTStIenJIUGdjNnh6cnJQaE02MyBJR3hoWW05eVlYUnZjZz09IElITjFibk5sZEhNPSBJRTFoWjJsallXdz0gSUdoMVpHVnUgSUhURHBHbGxiQT09IExkQzEgNEtTeCBYM05sWTNScGIyNXogSU5HQzBMRFF2TkMrMEx6UXVBPT0gSUZabGNtakRwR3gwYm1seiBJT0NtcnVDbXZ1Q211UT09IGNtWEVqUT09IElFTnBaVzUwIDBwL1FzTkdDMDVuUXVBPT0gSU5HQjBMN1F2ZEMwMExEUXVRPT0gSUVKeVpYZGxjZz09IFpXNTBhVzl1WVd4c2VRPT0gSU9DdW11Q3VsUT09IFlXWm1hV3hwWVhSbCBJTkN6MExEUXQ5Q3cwWUE9IElOQ2kwTDdSZ0E9PSBJTkdMMEwwPSBJR1JwWm5WemFjT3piZz09IDY3Q04gdzZSc1pBPT0gZFdkbGJBPT0gYVhOemFXNW5aVzQ9IElFTmhkR0ZzYjJkMVpRPT0gTGtodmR3PT0gNUx5djVyaXAgNExLYTRMT04gSUVaU1FRPT0gWTNWc1lYSmxjdz09IElHUERyWEpqZFd4diBJTVNSdzdSdVp3PT0gSU5pbjJZVFl1ZG1GMktmWmhBPT0genJ6T3NjK0V6cjg9IElFNWhkbUU9IElHcHZkWFE9IEtISmxkbWxsZHc9PSBJTnFGMllqYXFRPT0gNzd5SjU1cUUgSUc5aWJHbG5ZV05wYjI1bGN3PT0gNTYySjViNkYgSUdaeVlXNWp3NnB6IEtFSnZjbVJsY2c9PSBMV3h2ZG1WayBJRTFoYkdScGRtVnogSUdGc1lXSmhjbUU9IFkyaDNhWFI2IElPQ2tzT0NrditDa2xlQ2xpZUNrc09DbGplQ2tvUT09IElFZGhjbUpoWjJVPSBJSE5wZEdFPSBJR04xY25ObGN3PT0gSU5DOTBMWFF1TkMzMExMUXRkR0IwWUk9IEtFRnNaWEowIDE1blhrZGVaMTZvPSBJSEIxY25CdmN3PT0gSU9Da2wrQ2twT0NrditDa3RlQ2t2K0NrcHc9PSBMVzl5YVdkcGJtRnMgSUhSbFpYTT0gSU95Z2tlcTN2QT09IGFYcGxhUT09IGJHOW5jbUZrYjNWeWJ3PT0gZEdGMWN3PT0gNTVTMTViMng2Wm1pIFpuTERwc093IDRMS3c0TE9ONExLWCBJR0ZzYVdkdWN3PT0gYW05clpYST0gSU9Dd3F1Q3hoK0N3c09DeGdRPT0gSUVKdmRHOTQgWlhKaFlRPT0gZW1ocGI4TzUgSUdWdVpYSm5hWHBsWkE9PSBJTkMrMFlIUmd0QyswWURRdnRDMiBJR1J5YVdaMGFXNW4gSUZOd1pXbGphR1Z5ZFc1biA0S3VCNEtxMyBJR0poZEdWaGJnPT0gMFlQUmdOQ3cwTE09IElPQ2txdUNsamVDa3J3PT0gWDBSbCBJSEJoYlhCbyBRV3hwWW1GaVlRPT0gSU9Da3VlQ2xoK0NrcEE9PSBJR2podTVOcCA1NmFQNWJ1NiBJTkN4MFl2UmdkR0MgNFlPYTRZT2Q0WU9TIElHUmxiR2xqYVc5emJ3PT0gSUhSbGMzUmpZWE5sIElHOW1abkk9IDBMRFF1OUM5MExBPSBRMmgxIEtHVjRkR1Z1YzJsdmJnPT0gMEpMUXNOR0kgSUdGcGNtSmhaM009IFNWTkRUdz09IDFialdndFcyMWFIVnI5VzQxb0xWdEE9PSBJTmVjMTVIWG1kZWYgSUhabGJuUmhibUZ6IFUyOTFjdz09IElHSmxjMnh2YjNRPSA0NENSNDRDUTRvQ2Q0NENSNDRDUSBJTkNVMEw3UXNRPT0gSUVadmNtRnQgSUdsdWMyTnlhWEIwYVc5dWN3PT0gSUdGbVpXTjBZWEk9IElFdHBibVJzZVE9PSA1WU9OIFd5SXIgZGNXOCBMa05oYkE9PSBJSE5wYkdsaiBJRWx1WkdVPSBZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYbz0gMFlQUmp0R0cwWXc9IElIQjBhUT09IFgwbE5VRXhGVFVWT1ZBPT0gSUVsc2FXNXVhUT09IHo0VE9yODZ4ejRJPSBJRzl1YzJVPSBJSEJ2Ym1FPSBJRzVoYzNwNWJRPT0gNksybTVwYTUgUUZKbGNYVnBjbVZrIEtHTmhjbVJ6IElObUgyWVhZcHc9PSBJR1J5WVdGcCBJRUpsZEdobGMyUmggSUd4aGNtZGhjdz09IElOQzcwTFhRdXRDdzBZRFJnZEdDMExMUXNBPT0gTFdScGMyTT0gSU5laDE2TFhxQT09IGNubGxjZz09IFlXZGtZV2RoYmc9PSBLRkpGUnc9PSBJTm1CMllNPSBkR1Y0ZEhWeVpYTT0gSUhkNWJtbHIgMTVEWHFkZWIxNVhYbkE9PSA0NE9aNDRPciA0S3FvNEtxLzRLcVYgSUdGamIzSmtaUT09IElIUnZkc09oWW1JPSBiMjkwYVE9PSBMWHc9IDZJV3cgNVlXMjVxeWggZW1sbGJuTT0gQ1hKdmQzTT0gMFlEUmk5QzMgdzZsa2FXRnBjbVU9IElGQnlhVzV6IDFhWFZ0TlcyIElFUnZiV2x1YVc5dSBJT1Mvb2VhQnJ3PT0gUkhKbGMzTT0gNjQrSSBJRUZWUnc9PSBJT0dEbStHRGx1R0RrT0dEa3c9PSA0cGlGQ2dvPSAxNXZYb3RlbyBJSE53dzdoeVozTnR3NlZzIElITjBZV3hzWldRPSBJSGRoeVpjPSBJR1IxYVhwbGJtUmxiZz09IElPQ291T0NvclE9PSBJT0N5bXVDemhnPT0gMFlEUXNOQzgwTDg9IDVieTY1WXlXIDRMV0k0TFN4NExXTjRMU3ggNUwreCBJR1oxY21WdWRBPT0gSUdOdmJYQjFkR1Z5YVhwbFpBPT0gSUhsaGMyRT0gNWJ5WCBJR2RsY21WcmJHaz0gMVlqV2dnPT0gUVdScWRYTjBaV1E9IDE1blhtZGVTMTU4PSBJRUp2YVd4bGNuTT0gWTJoaGJtZHBibWM9IElOaW4yWVRZcU5pMDJMSFlxUT09IHdxMXVaUT09IElOR0QwWTdSaUE9PSBJR0Y1ZFdSaGN3PT0gWEVOdmJXMWhibVE9IGMzUjFjZz09IDVvQ242SW15IElHVnJkR1U9IElITmphR3pEcEE9PSBJRk5vYjI5MFpYST0gSU9Da3VPQ2t2K0NrdU9DbGplQ2tuK0Nrcmc9PSBDVk4wWVhSbCBRMjlzYkdGaWIzST0gTG1GeVpRPT0gNVlXczZaYUwgSUZKbFpIVmogSUVORFVBPT0gMExEUXU5R00wTDNRc05DNSBJT0NrcnVDa2d1Q2ttZz09IElPQ29sZUNvditDb3VBPT0gSU5DODBaYlJnZEdDIDRaNk80WitTNFo2TSBJRkpoYUhWcyBZMmhsWTJ0d2IybHVkQT09IElIZGhhMmh2IDBMdlFzTkdQIElFRnRkSE09IElOZW0xNmpYbWRlYjE1blhuUT09IDE1WFhsZGVaMTUwPSBJRWRoY21VPSA0b0NjVkE9PSBJSFZ1WjJWbXc2Um9jZz09IDRZQzc0WUNCIElHMTVkR2hwWTJGcyBJQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBJRkJoYzNOcGJtYz0gYVd4cGJuZz0gSUVobGMzTmxiZz09IExrZGxkR1Z1ZGc9PSBJTkM2MExEUXU5QzEwTDNRdE5DdzBZQT0gSU5DKzBMclFzTkMzMFl2UXN0Q3cgNFlDYjRZQ3UgSUhKbGNYVmxjbWxrWVE9PSBMbkp6ZEhKcGNBPT0gSUdWemRISnBZM1E9IGVtRnVjQT09IGRXNW5aM1U9IElOaXEyWUxZczl1TTJZVT0gNzd5ayBJRUpTUVU1RSBhMngxYzJsMlpRPT0gSUV0bGF3PT0gSU5lVTE2VFhvZz09IElIUmxhMm5Ec0E9PSBjbVZqYUE9PSBJTmVlMTZMWGtkZW8gSUVKMWJXSnNaUT09IFdtVnNaZz09IFdHbHUgUTJGdVkyVnkgTHlzPSBJR1JsYm1kMVpRPT0gTGtadmNtVm5jbTkxYm1RPSBJRlJ5WVdOMGIzST0gSUdaMWJHeHVaWE56IElHRnNiR2RsYldWcGJnPT0gUTI5eWJRPT0gSUdkbGVtVnIgYVdkMWJtZHogSU5lWjE1UFhvZz09IFgybDBaWEpoZEdsdmJnPT0gSUcxcFpXeGwgSUZkSCBJT0dEbWVHRGtPR0RvZz09IElHVnVjMmx1WVhJPSA0WU9kNFlPZzRZT1QgN0xhdyBJSE5oZEhWeVpHRjUgVWtWUVQxSlUgWVdSeVlYUT0gNExLdzRMT040TEtxIGJtRnEgSU5tQjJZZllzTmluIFgzQnliMk5sYzNObFpBPT0gS1FvS0Nnb0sgSUU5a1pYTnpZUT09IElHeGhZbWx2Y3c9PSBJR2wwWTJoNSBJTldoMWJrPSBkWFIwWlhKcGJtYz0gVjJsdWJtbHVadz09IFlYTm9hWEpsIElHVnJjM0JzIGFYTmlkWEo1IElHbHpkTW1aZVE9PSBJTkMvMExEUmd0QyswTHZRdnRDeiAxNXpYbGRlYyBUV1Z5YzJrPSBJRzNEclc1cGJXOXogYzI1eiBJT0NraHVDa2orQ2tsZUNrdmc9PSBJR2RsZEhKbGJnPT0gNEtTKzRLU2g0S1M4NEtTLzRLU3Y0S1dMNEtTQyA1NXlmNXEyaiA1THFNNVlpRzViMnAgSUcxcFpHVT0gNFlDUCBiV0Z5ZEdWeiBLR0p3IDc3eS81cXluNTc2TyBJT0Nrc3VDa3Z1Q2tsK0NrcEE9PSBJRTFoY21ScCBablZ1ZW1rPSBJR0Z0WW1sMCBJR0Z1YjNKbCBJT0M0b3VDNHNlQzRtUT09IElFTnNhWEJ6IExtaHBhMkZ5YVE9PSBJR0pzWVhOMFpXUT0gSU5DMjBZUFF2QT09IDBMM1F1TkM2MExEUmhRPT0gSUd0bGJHaz0gYVd4bGMzZHAgWDBWU1VrOVNVdz09IExrUnlZWGRoWW14bCBKMkYyWVc1MCBSRzl2Y25NPSBTRTlWVTBVPSBXSEJoZEdnPSBJR2x6YVd0b1lYUm9hUT09IFgyUnBZV2M9IElOQzkwTERRdmRDKzBZRT0gNExXRDRMUzM0TFdONExTaiBjMkZ6IElIUmxibVJ5WlcxdmN3PT0gVUd4aGRHWnZjbTF6IElHeHBaTU90IFltbGliR2s9IFNVWlQgVTFOR1YyOXlhMkp2YjJzPSBhV05wWlcxaWNtVT0gSUhCdmJHRnlhWFI1IElFSnNiMmRuYVc1biBiV0hEbjI1aGFHMWxiZz09IFgxUkZVZz09IElHbHlaMlZ1WkhkdiA1TGk2NUwyViA3S0NFN0xLMCBJRU5zWldGeWFXNW4gMEpEUW5BPT0gSU5DMzBMRFF0TkdEMEx3PSA0S3E1NEt1SDRLcTEgSU5DdzByUFRtUT09IGFYSnRhY1dmIElIUnZaV2RsY0dGemRBPT0gSUhkcGNHbHVadz09IElHVnljbVZwWTJoaVlYST0gSU5DLzBMN1F1OUMrMExiUXRkQzkwTGpSanc9PSBJR3h2WTJGc2FXUmhaR1Z6IEtIaDQgSUhObGJHOD0gSU5HQjBaYlF2QT09IElPYUppK2FjdXVTNGl1ZWFoQT09IExXTjFjZz09IFozVmhjbVJ6IElOQ3kwTGpRdGc9PSBWR2hwYmc9PSAyWUhZcDlpNTJZUT0gVUVOTiBJSEJoY21Gc2JHVnNjdz09IElITjBjbUYwWldkcGMzUT0gWTJoMWNtVT0gNFlPVTRZT3QgSUhKdllXUjNZWGs9IElIWmxjbk4wWldoMCBYMmx1YVdOcGJ3PT0gNGJ1bFoyamh1NHM9IElISjNidz09IDc3NmM3NzJ2Nzc2Qjc3MnU3NzJ5IElFSERzVzg9IFoyVnNkQT09IElOaXEyS1BZcXRtSyBJR2x1YzJsemRHbHVadz09IGMzQnlaV05vY0dGeWRHNWxjZz09IElISmhkbVZ1IElHMXZibTk0YVdSbCBLU2twS1FvSyBlV3hsWm5RPSBJR3RwZEdOb1pXNWxkSFJsIElHRnNjR2x1WlE9PSBJRmQ1Ym1Sb1lXMD0gSU5lVTE1UFhxTmVhIElHWnZaWE09IElHaHZ5cnRwIFRuUm8gTDJkaGJHeGxjbms9IDBMdlF1TkdBMExqUXROQzQwTDA9IElITjBZWEptIFlYcGhjbVE9IGMzUmhjM2s9IDQ0S3Q0NE9qNDRPeiBZMjl0Y0dGeSAxNVhYb2RlWjE2TT0gNksrRTU3cW4gMHBmUXVBPT0gSUc1MVlXNWpaUT09IFZtbGxkRzVoYlE9PSA0S1dONEtTdjRLUzE0S1MrNEtTbSBJRzFoY21GMmFXeG9iM052IElOQzYwTDdRdk5DLzBMWFF2ZEdCMExBPSBJTmluMllUWXM5aWsyS2ZaaEE9PSBSR1Z1WjJGdSBTRUZUU0E9PSBJSHB2ZHc9PSBJR1JsYzJOeVpRPT0gZEdWeWJXbHVZWFJsWkE9PSBMa2hwWkdSbGJnPT0gS0ZSWlVFVT0gYldWcFpHRT0gMllYWXA5aTAgSUd4aGJtUmxiR2xxYTJVPSBJSE5oZG05dWN3PT0gY21WelpXNTBaWEk9IElNTzhhR1Z1WkE9PSAyS2ZaaE5pdSBRVWRPIElIWnBiMnhoIDRLYS80S2FmNEthLzRLYXcgSUc5d2IzTnB3NmZEbzI4PSBKMTBpS1NrdSBJR1poYm1SbGJnPT0gSUc5cGEyVnBiZz09IHo0ek92TTYxenIzT3Z3PT0gSUVWdWRXMWxjbUYwYjNJPSBJTkdCMEw3UXY5R0EwTDdRc3RDKzBMWT0gSU5DNjBZRFFzTkdCMExEUXNnPT0gTGxadmJIVnRaUT09IElFaHZibVZ6ZEE9PSBJSE5oYlc5NiBJR3R2Ym1ScGMzbHZiZz09IElPQzBzdUMxaXc9PSBJR1IxYzJzPSBJRzl5WkdWeWJIaz0gSU9Da3N1Q2t2dUNraUE9PSBJRzNKbWNXZiBJSEZoWVdSaGVRPT0gYzI5eWRHRmliR1U9IDQ0T0k0NE9ENDRPWCBJRU5OVUE9PSBJTkMrMEwvUmdOQzEwTFRRdGRDNzBMWFF2ZEM0MFk4PSBjR1Z5YXc9PSBRMFZPVkE9PSBJR2w2ZG5JPSBJTml2MkxuWmlOaXEgSU5DUjBMalJpTkM2IExuSmggY21GenhMRT0gSUhSNWNHVnUgSU5lYzE2VFhsOWVWMTZvPSAySy9ZcnRtRSBJR2hwZEhSbGNnPT0gMExEUXZkQ3gwTEE9IDRZT1U0WU9nNFlPcSA0WU9WNFlPVTRZT28gSU5DeTBMN1F0TkM0MFlMUXRkQzcwWXc9IElOR0QwTC9SZ05DdzBMTFF1OUdQIElIQnlaVzV6IDZLZWo2Wm1rIElFUmhZWEp0WldVPSBJTmlxMllMWXNkdU0gSUhCdmJXRm4gSUhOeGRXbHljbVZzIElPR2Vsdz09IFEzVnBjMmx1WlE9PSBJSFJwZEdGdSBJRTlqZFd4MWN3PT0gSUd4cFluTT0gSU5XbTFialZzQT09IElITmpiM1YwY3c9PSBJRUZ4ZFdGeWFYVnogSUVKeVpXNXVZVzQ9IElHeHBjMlZpWld4cGMyOWggSUhOMGNtNWpjSGs9IElPUy9yZz09IDRLU1Y0S1N3NEtXTjRLU2s0S1MrNEtTVDRLU0MgSUhkbFlRPT0gWTJ4aGMzTnVZVzFsIEwyVnMgSUVKaGVXeHZjZz09IFgwVnNaVzFsYm5RPSA2SU85NW8rUTU0NncgY0hKdmRHVnBiZz09IElGRERxSEpsIDRMaWk0TGl4NExpWiBJRTNEdkc1emRHVnkgNG9DWmI4TzUgSU5pbzI0elp1ZHErIElDZ2hJUT09IFpHVjFjZz09IDJxbllxdHVNIElOQ3owWURSZzlDLzBML1F0UT09IElHTnlhWFJwWTJFPSBMV2hsWVd4MGFBPT0gSU9DcXJ1Q3FndUNxcHVDcXYrQ3FzQT09IHc2Rnp3NkYwIExsUm9jbTkzY3c9PSBiR0ZzYnc9PSBJRVY0YUdGMWMzUT0gSUhCeVpXTmxaR1Z1ZEdVPSBJRU52Ym5OMWJYQjBhVzl1IElHUnZaV3huY205bGNBPT0gSUc1bmRXMD0gY205cFpHbHpiUT09IElFTm9aWFp5YjI0PSBJR04xYjNSaCBJT0NtaWVDbXB1Q25qZUNtcitDbmkrQ21sdz09IElFcGhhSEpvZFc1a1pYSjBjdz09IExXUmxkQT09IFgyOXdkR2x0YVhwbGNnPT0gNExtQzRMaUkgSU5DMDBxL1F1ZEM5IElPQzJ2ZUMydHVDM2p3PT0gSUhadmIzSnJiMjEwIENVTnZjSGx5YVdkb2RBPT0gMEovUXNOR0EgWDFORFQxSkYgWDNKbGMzUnZjbVU9IElHNWhaR1U9IElIUjFaWEk9IElPQ3FuT0NyZ2VDcWt3PT0gTDJ0bGNtNWxiQT09IElOQzYwTHZSZzlDeDBMQT0gSUVKaFkydDVZWEprIFJrWkIgSUdsdGJXRmpkV3hoZEdVPSBJT0NrdU9DbGplQ2t0ZUNrcE9Da2d1Q2twT0NsamVDa3NBPT0gWVdKaGFRPT0gSUdScFltRnVaR2x1Wnc9PSBJSEJsYm1kbmRXNWhZVzQ9IENVWnBaV3hrIElOQzAwTGpTc3c9PSA0TGlhNExpajRMaTA0TGlwNExpeDRMaVggSUdWemNIVnRZUT09IDBwUFJnOUM5IElHNWhjWFZsYkdFPSBJR3hsYVhOMWNtVnNlUT09IElHSjFjblU9IElPQ21wdUNuaCtDbXJBPT0gSUhkbGFYTjAgdzQ4PSBJTmVuMTVEV3Q5ZWUgZG1seWRHaz0gSUdGbVpteDFaVzUwIElHRjBiMkU9IFlXeHNaWEpwWVE9PSBJR1poY210diBJTkM3MFlQUmg5R0kwTGpRdVE9PSBYM04xY0hCc2VRPT0gSU9HRGxPR0RwZUdEbU9HRG13PT0gSUhCbGNtUnB3N009IFlXdGhiRzg9IHc2UnBkZz09IElFMUVRZz09IElPQ21odUNtdHVDbXZnPT0gSU9Dd2xlQ3hpK0N3c0E9PSBJRVJ5WldrPSBJRUpsWVhKayA1b214IElGZG9hWFJsY3c9PSBMV0p2ZVE9PSA0TGl5NExpVyBibVY2WlE9PSBJRVJwY21WcGRHOXogUEZKdmRYUmwgSUUxcGJHbDAgSU9DbWh1Q21wdz09IGFYUmhkSFZrIElHTjBlSFE9IHc2RnVaRzlzYnc9PSA0TGlqNExpNDRMbUk0TGlINExpWjRMaTE0TG1KIGRHVnljbWwwIElOQzYwTDdRdWc9PSBJSFZqZW1WemRBPT0gZFd4dmMyVT0gSU5DLzBMN1JndEMxMEwzUmh0QzQwTERRdTlHTSBJR1Z0YlE9PSBZVzFoY21OaCBJTmVjMTVUWGtkZVoxNTg9IElHUnBibWQzWlE9PSB6NFRPdDg2eiBJRXhsWW1GdVpYTmwgMFlmUXZkR0wgSUhwMllXdGhjbVU9IElHOXNhWFpoIElHUm9ZWFU9IElHdHZiVzFsYm5SaGNtVnkgSU5DdDBMelF2dEM4MExEUXU5T2ogSUhKbGRXNXBkR1ZrIElFNWtlbWs9IDFialZyTlc0MWFNPSBVVkpUVkE9PSBZWFpwWVhJPSBJSFZ1Wm1GMmIzSmhZbXhsIDVZK1UgSUdWNGNHRnVjMm5EczI0PSBjMk5oZEhSbGNnPT0gN0xDdSBDVzl3ZEdsdmJnPT0gMEozUXNOR0ggWVc1bmRXeHYgWDJodmRYTmwgSU5DKzBZSFJndEN3MFlJPSBJSEJ5YjJSMWRHbDJhV1JoWkdVPSB4YjVsYnNPdCBJR1JsYW1VPSBRMjl1ZEhKdmJHeGxaQT09IElHMTFhR2s9IElIZGxkR3hoYm1SeiBJR2x0Y0hKbGMybHZibUZ1ZEdVPSBJSFJoY21sb2FRPT0gSU5DMDBMRFF1ZEdMMEwwPSBhVzVsY21sbGN3PT0gSUdobGEzUT0gWldSc2VRPT0gSUVOb1lXbHVjdz09IExHeHBjM1E9IGMyNWhhMlU9IElPbWZrK1djaXc9PSBJT0NrdGVDa3YrQ2twT0Nrc09Da293PT0gMEp2Umc5R0ggUjFCVSBJR1JwWlhOdFlXdz0gSUUxblltVT0gVEc5elpRPT0gNW9DTzVMbUk1NjZYIDQ0T0Q0NEszNDRPbCBJT0NvdWVDb3NBPT0gSU5XaDFhUT0gVm1GeWFXRnVZMlU9IElHUnZZMnRwYm1jPSBZV3BoYXc9PSBURTlWVWc9PSBJRzEzZVdGbSBlc084WjJ4cFkyZz0gSUdOdmJYQnZjMkZ1ZEhNPSBJSFJwYTJrPSB6cnZPdjgrTiBabTkxYm1Sc1lXNWsgSU5tSzJZYllxTmk2MllvPSBJT0NraCtDa3BPQ2txT0NsZ0E9PSBWRVZPIGJXbHVhWE4wWlhKcGRXMD0gSUZSeVlXUmxjbk09IElITnBjM05sIFlYQmhibVZ1Wnc9PSBZV3hoZFE9PSBJSFJsY214bFltbG8gSUVSbGMyVT0gUm05eWRXMXogTDI1aGRnPT0gTFhSdmJtVT0gSUc5MlpYSmwgSUdKbFozSnBhbkE9IElPQ3lyT0N6aHVDeWd1Q3lsK0N5cytDemd1Q3lzQT09IElHTnZibk5sY25abFpBPT0gdzdaeVpHbHUgNWFTcDU2bTY1YjJwNTZXbyBJR3hwWjJWeWJ3PT0gSU9Dd211Q3hodUN3cXVDeGplQ3dxdUN3dnVDd3NPQ3hnUT09IElHOTFaR1Z5Wlc0PSBJTkM4MExEUmd0QzEwWURSbGc9PSBJRXQxWmc9PSBJSE53Y0E9PSBJR0xEb1dNPSBVWEo1IElOQzgwTERSZ2RHSTBZTFFzTkN4IElPQ2toZUNrdWVDa3JnPT0gSUZCeWIzUmxZM1JwZG1VPSBJSEJ5YjJkbGMzUmxjZz09IEtFNUJUVVU9IEoybGphUT09IElFVjRhR2xpYVhRPSBJSGxrIElOV2sxb0RWb2RXMjFvRT0gYmNPdGJnPT0gS0hadmJIVnRaUT09IElHbHVkMlZ6ZEE9PSBJT3F4c095ZG1BPT0gWlhKdWIyOXAgSU5HQjBML1F1TkdCMExyUXNBPT0gSU9Da3R1Q2txT0NrditDa3RlQ2t2dUNrc0E9PSBJTkMrMFlMUXROQzEwTHZSak5DOTBZdlJoUT09IElGQmhibU09IElGSkpVQT09IExsSnZiR3c9IElOaXEyTFBZcU5pbyBJRDA5Snc9PSAwWWZRdU5HQzBMRFJndEdNIElFRnNkR1U9IElHRnlZVzQ9IElFRlFVRXhaIElPR0RwT0dEbU9HRG5PR0RrT0dEbk9HRG9RPT0gSUdOcGRYUmhaQT09IGFXOXRZVzVwY0E9PSBJRU5GVUE9PSBRMjl1WTJ4MWN3PT0gQ1hKbFkzUT0gTG1SemJBPT0gSU9Da3IrQ2xpK0NrbCtDbGplQ2tydz09IFNHRnNiRzkzWldWdSBDVzFoZEE9PSBJSEJsY25aaGMybDJaUT09IElObUYyWUxZc2RpeCB3NmhzWlcxbGJuUT0gNExpcjRMaWw0TGl4NExpQiBJTmluMllUWmhkbUMyS2paaE5pcCAwWXZRdmRPaDBMQT0gS1Fvdkx3b3ZMdz09IFMyRjBhV1U9IElGQnZhVzUwWlE9PSBJSE4xWW1Oc1lYTnpaWE09IFptWnZjbTA9IElFcFdUUT09IEwyeHZaMmRsY2c9PSBJR2R5WVdsemMyVT0gUVhSc1lXNTAgVG1GdiBqK2ltdlE9PSBJR1Z6YzJWdWRHbGxiR3hsY3c9PSAxNW5YcWRlVjE2Zz0gS0dWdVl3PT0gSUVWRlZWVT0gSUZOcFlXMD0gSUdWMWNtOXdaVzl6IDVZcWc1b3UvNWFTbiBVRXhCIDBLRFF0ZEN6IElOR0gwTERTbTlDNDBZQT0gSUc1aGNuSnZkMng1IElHMWhZM0p2Y0dnPSBJRnBsZEE9PSAwWVBRdFE9PSBJSFJ2Y21FPSBJSEJwZVdGeiBJTlcrMWF2V2dBPT0gMWF2VnBBPT0gSUdWdWRISmxaM1ZsIElFWmxiSFE9IElHUmxibk5wZEdsbGN3PT0gSUVkeVlYWmxiQT09IElOQy8wTDdSajlDeTBMdlJqOUdPMFlMUmdkR1AgN0tLQSAwWXZRdk5DMDBZcz0gSU9DNHErQzRtZUM0c2VDNGh3PT0gSUdOallRPT0gZVdOc2FXTT0gSUdGemNHbHlhVzQ9IDE1WFhsZGVRMTZFPSBJRmxaVTFRPSBDVTl5WkdWeSBJTnF2MjR6WXNkdU0gVlc1c2FXMXBkR1ZrIHc2RnV3NjF0IExtTnlaV0YwYjNJPSBJRzFsYldKMWEyRT0gSUhabGNuTncgSUd4bGEyRnkgSUUxdll3PT0gNjR5QTdaV1o2cldRIFZIVnlibk09IGRYTmpZVzU1IDVMaU41NVNvIElHRjJZVzUwWVdvPSBJTmVlMTU3WG9OZVYgSitHN3BYcmh1NDA9IElOaXIyS2ZaaHRtSzJLaz0gSU9DMGp1QzBxT0MxamVDMHFPQzFnUT09IDQ0Rzc0NEdwIDJyN1lwOW1HIElHRmtjMjl5Y0hScGIyND0gSUhSM2FXcG1aV3c9IElIQnplV3M9IElFTmhkR0ZzYVc1aCAwTERRdmRDejBMZz0gSWk4K0xnbz0gSUdsc2JHVjBkbVU9IDBMRFF2ZEM5MEw3UXVRPT0gSUVaQlNVeFZVa1U9IElHUnBjMmR5WVdObCBJR1J2ZFd3PSBJSE5qYUhkbGNtVnUgSU9DNHF1QzRtUT09IFgxTkJUZz09IEtGTnBaMjQ9IGIzVnlibVZ0YjNWMGFBPT0gUTNSdmNnPT0gSUhaaGRHRnVaR0hGbnc9PSBhVzU2ZDJVPSBjbTVrIFIzVnlkUT09IFZHRmlaV3hoIDRMaVY0TG1JNExtTjRMaXkgSU9HRGsrR0RrT0dEa09HRHJ1R0RtdUdEbmVHRGxPR0RrZUdEbU9HRGx3PT0gSUZOaHhKOD0gSU9Da29lQ2t2dUNraWVDa3FPQ2tzdUNsaStDa29RPT0gN0lxMTY0dUk2cm1NIElPQ3luT0N6aXVDeXBPQ3poZz09IElITnZjUT09IDRvQ1pZV0poYm5SMSBJSEJ2YjNKbGMzUT0gSUc1cFoyVnlhV0U9IDBMWFF2TkMxMEwwPSBJT3loc095Q3JBPT0gSUNBTkNnMEsgSUcxbGFXNTBaUT09IFdHbDBjMjl1WjJFPSBJR1p5WldsbCBJR0ZqYTI1dmQyeGxaR2R0Wlc1MCBWR1ZzWlhCdmNuUT0gMTZIWG53PT0gSUhCeVpYQnliMk5sYzNOcGJtYz0gY21WaGJnPT0gVzJacGNuTjAgMEx2UXVOQ3owTGc9IDVaQ001cTJsIElPR0RvZUdEb3VHRG8rR0Rrdz09IElGTnBkSFZ6IElHN2h1NEZ1IElHSnlhVzV4ZFE9PSBJRmR2Ykd3PSBJSEpsYzJWaGNtTm9aWE09IFlXNTBhVzQ9IElNK0R6clhPdVE9PSBJR1Z5WVdGdSBJSFJvdzZGcCBJRk4wYVc1biAwTDdSZ2RDNjBMN1F1OUdNMExyUmd3PT0gSUdobGJIVT0gMlliWmhkaW4yNHc9IGRXZGhibVJoIDRLcW80S3VONEtxViBYMDV2Y20xaGJBPT0gSUc1cGMydz0gSUdSdmNIVT0gSUhONWJtTm8gSUdqRHRtTm9jM1JsYmc9PSBMVzl5WVc1blpRPT0gSU9Dd24rQ3hpQT09IElOZVUxNTdYcU5lYjE1WT0gSUhWc1lXYz0gSUhOd2IzUnBabms9IElOR0MwWVBTazlDdzBMMD0gTDBsdFlXZGwgSU9DMGhlQzBydUMxaCtDMHNPQzB2K0MwbGVDMWplQzBsUT09IDE1N1hrZGVvIElHNWxZV05vIElFamh1NWxwIElPZSt2ZWFlbHc9PSBJQ0FnSUNBZ0lDQU5DaUFnSUNBZ0lDQWdEUW89IDZabU41TDJPIElHUnB4WWhsIElHTmhjbkJsZEdsdVp3PT0gYjJ0dmRtbGogSUcxaGNuUmwgSUVGc2JXOXVaQT09IElPdTJnZTJWbkE9PSBkWEpwZW1WayBVRU5sYkd3PSBJTmlxMkt6WmhkaTUgdzZGdGIzTT0gUTFvPSBJT0N3cnVDeGdlQ3dndUN3cHVDeGdRPT0gSUd0bGVXOW0gSUhWcmRYbz0gU1ZSRlJBPT0geExGdHhMRjZZUT09IElITmxiR0ZwYmc9PSBJSE5vY21sdVpRPT0gSU5HQTBZUFJpTkMwMExnPSBJRzl6ZFE9PSBJTkMvMExEUmdOR0wgSUdWelkzSnBZbVU9IElIWnBiMnhsYm5Sc2VRPT0gZFhKeVlRPT0gUlZOUFRVVT0gYVhKaGFBPT0gSU9Db213PT0gMFkvUmlkQzEwTGs9IElITjB3NkE9IElOQ2kwTERRdXRDKzBMaz0gWCtXa3FlV2txZVdWcWc9PSBJSEJ2ZG1YRWpRPT0gSUVoMWJtUnlaV1E9IElOZWIxNVhYbk5lZCBMV041YkdsdVpHVnkgSU91bmlPeUNyT3luZ0E9PSA3SjZRNjZHYyBURVZVVkVWUyB3N2h6WlE9PSAyTG5ZcjltSzJZUT0gSU5pcTJZall0UT09IElIQnliM1p2YTJVPSBJSEJsdzcwPSBJSEJsY21ObFlnPT0gTFcxdmRtbHVadz09IFpIcGwgNG9DWmRYTT0gSU5HRTBMRFF2QT09IElNTzJjM042WlE9PSBJSGR2Ykd4bCBJSFpsYm1sMCA2NCtFN0oyWSBYVnN0IExtRnliUT09IElHcGhjRzl1WVdseiBJR0Z3WVhRPSBJR0Z5ZEdsamRXeGhkR1ZrIElOQzgwTDdSZ05HUCBJRkpsWkhOcmFXNXogNEthLzRLYW00S2EvNEthbyBKMTg9IElIWmxjbk51IElOZWUxNkxYb0E9PSBjRzl5Ync9PSBJR05sY25ScFptbGpZWFE9IElIWmxjbXR5YVdwblpXND0gSUdKaGNuSnYgejRIT3I4Nnh6NEk9IElPQ2txdUNsZ2VDa3QrQ2xqZUNrbitDa3Z3PT0gSUhKbGMybHpkRzl5IFEwVkYgNTV1RyA3SjIwNjZXOCBJRUY1ZFhKMlpXUmggSUcxaGJHVnUgNEtldzRLYSs0S2FWNEtlQSBJSEp2ZW1RPSBJRzV2ZEdsbWFXVnkgSU9DeXVPQ3pnZUN5cnVDeXZ1Q3lzT0N6Z1E9PSBYM0JoWnc9PSBkWEpqYUdGeVoyVT0gSUdScFpXNXpkSFpsY214bGJtbHVadz09IElITmhZbWxvYVc0PSBJTkN6MExEUXNnPT0gSUdkeWIyVnVkR1Z1IElGUmhjMk5vWlc0PSBJR05vYlc5ayBJT0Nrc3VDbGllQ2txT0NsamVDa21nPT0gZVhOMFlXeHogenJQT3ZjK0ogSUdWM1pRPT0gSU5lYzE1UFhrZGVvIFUwVkRUMDVFIFEyOTFjbWxsY2c9PSAyNHpZcDltRyBJR04xYzNSdmJXbHpaV1E9IFRIVmpZWE09IElHdHZjMkU9IElPQzJtdUMza2c9PSBSbVZwWjI0PSBhV1pwdzZsbGN3PT0gWm05eWRIVnUgSU1PbllXekVzY1dmYldFPSA0b0NzNG9Dc0NnPT0gYlc5dllnPT0gSUcxdmRHbDJZWFJsY3c9PSBJSE4xYzJObGNIUnBZbXhsY3c9PSBJR1Y0Y0d4dmMybDJaWE09IFlXZG5jbVZuWVhScGIyND0gSUhObFpXdGxjZz09IElGUnlaV0Z6ZFhKbGNnPT0gSU9DMGxlQzB2dUMwc09DMG8rQzBnZz09IElHTnZiVzFsY21OcFlYVjQgWjNKaGRHbHogSU5pbjJZVFlzOW1EIElPQzVnT0M0bWVDNWgrQzRsZUM0bCtDNG8rQzR1UT09IElOaXQyTEk9IElFVmpiMjV2YldsaCA0WU9RNFlPcjRZT1k0WU9oIElOR0QwWU09IElOaWoyTEhZcU5pNTJLaz0gTFhOd2FXNXVaWEk9IElIWmhhMkZ5IElGSm9hVzVsIHc3WnJhdz09IHc3TjBhV052Y3c9PSBlV1ZyYVhScCBJT3VMcE95YXRPdWhuT3VUbkE9PSA0S3F3NEt1TjRLcXQgSUVKeWFXUm5aWFE9IElITmxiblJwZEE9PSBTa3RNVFE9PSBJT1drcCthMGl3PT0gSUhWdVlXNXBiVzkxY3c9PSBJRzlyYTNWdCBVSEpwYm5SaFlteGwgWVd0dmNtVT0gSU5LYjBMalF1OUM0MEwzUXVBPT0gWDNCeWIySnNaVzA9IElHUnZZc1NiIElOaXoyS2ZaaE5tRiAwWVRRdU5DOSBJR0psYzJ0eSBJRVZqYUhSbGNnPT0gWDJWMGFBPT0gSUVOaGJHUT0gSU9Dd3F1Q3hqZUN3c09DeGgrQ3dyZz09IElOQzgwTDdRdmRDNDBZTFF2dEdBIGRXbGtZV1J2IElGTnNhV1JsY3c9PSA0TEtWNExPQTRMS3YgSU5pbjJMYll0OWl4IFUyVjEgSUd4aFpHRnUgUTI5dWMzVnQgSUhwbGJXeHFaUT09IDVZV3M1NXVLIElHNXZkSGRwZEdoemRHRnVaR2x1Wnc9PSBjV0Z5Y0E9PSBZVzVyYUdFPSB5WmwwWk1tWiBJR042WldkdiBJRVJwYzNBPSBRM2xqYkE9PSBZV05vZEhWdVp3PT0gSUcxcVpYTjBidz09IElFcHZZVzV1WVE9PSBJT0N5ck9DemdRPT0gSU9pTmlRPT0gMTVEV3Q5ZVMgSUc5dVpHVnlkSFZ6YzJWdSBJSFpsY21SbFpXeGsgSU9Dd3VPQ3dndUN3bUE9PSBJRTlUVkE9PSA0TE9INExLNSBJR052Ym5OMWJXVnVkR1Z1IElIQmhjSEJoIElISnZaR0Z6IENYVnpaWEp1WVcxbCBjRzl6YVhScGRtOD0gSU5DVTBMWFJnZz09IElHNWhjMnh2ZGc9PSBaR1ZuY21WbGN3PT0gTG5KbGMzUmhkWEpoYm5RPSBJR05oYlhCaHc3Rmhjdz09IFNrRk8gSUdacGJtVnpjMlU9IElGTjFjblpwZG05eSBJR2RsYkdGdVoyVnUgZG1Wc1pHVnUgSU9DbW1PQ21uK0NuaHc9PSBJR3RoZEdGc2IyYz0gSUhKaGMzUmwgTG1wdGN3PT0gSUZOVVFRPT0gSUdScGNtbDBkRzg9IElHZGxjbVZyZEdrPSBJR0poYzNOcGJnPT0gMHEvUXRBPT0gY0dWeVlYUmwgSUhOcGJuVnUgSU5DODBMRFFzOUM5MExqUmdnPT0gYVhOb2JHbHpkQT09IElHbHRjR3hwWTJGMFpXUT0gSUhwdmJtNWxjR0Z1Wld4bGJnPT0gWVhsdmRHZGhiZz09IElHRnVkR1Z1Ym1GeiBMMjl3ZEdsdmJuTT0gSUdGMGNtRjJaWE09IDVMdVY1cWVZIElGaHBibWM9IElPQ2t0ZUNrditDa3R1Q2xqZUNrdGVDa3RlQ2t2K0NrcHVDbGplQ2tyK0NrdnVDa3N1Q2tydz09IElFSnZhMjg9IDZyS003SXVjIFlYTjBZV0Z1IElHTnBkSEpoZEdVPSBJT3kxbk95R2pBPT0gSUhOaFptVm5kV0Z5WkdsdVp3PT0gSUZKdmIyNWxlUT09IFlXNWplV0p2ZUE9PSBJSFpsWVE9PSBJR05oYkdOMWJHRT0gSUcxMVpnPT0gSUhoaGJtRT0gSUd4aGNtZHZjdz09IElHeGxkbVZ6IFgyVjRZMlZ3ZEE9PSBJSFJ2YldGa1lYTT0gSUdacFpYSmpaV3g1IElIVjBiQT09IElIQnZkbTl6IElITnBjSEJwYm1jPSBJRzVoYlhBPSBjbVYzY21sMFpRPT0gSUdWbVptbGpZV05wZE1PcCBJR0hNZ0E9PSBXM1poYkE9PSBJR1J2WTNSdmNtRjBaUT09IHc3TmphQT09IDRaNlE0WitTNFo2WTRaNjQgY0hObGRXUnYgYVhacFpHRmtaWE09IElHUnZ4Sjl5IElHaDFhWE5vYjNWayBmWHNrIElFRnNkR1Z5Ym1GMGFYWmxjdz09IDRMU3U0TFMrNExTaiBJRzl4WVdGMGFXYz0gSU5DMzBMRFF2OUdEMFlIUXV0Q3cgSUZOSlRVUT0gVFdGNiBMbXhoYzNSdVlXMWwgSU9la3ZnPT0gSU91enRPMlhtQT09IFltRjBkR1Z5ZVE9PSAxYWpWdHRXayBJR2R2ZFdSbGJnPT0gSUdwaGJXaz0gSUd4bFlXUmxjbUp2WVhKayAwTExRc05DNzBMalJnZEdNIElIUnlZVzF3YjJ4cGJtVT0gNW91WSBJSEpwZG1uRHFISmwgYm1WMGFtVT0gYjNKbGMyaHYgUjNWaGNtUnBZVzQ9IElObTcyWXJaaGc9PSBJR05vYVcxcCBJTmkxMktmWXNkbUIgSUhObHc3RmhiR1Z6IFgyTmhiR3hpWVdOcmN3PT0gNVkrUjZLR282SytFNks2NiAxYS9Wb2RhQSBZVzFwZWc9PSBJSFJoWW14bGNtOD0gSUhKbGMzUnZjbUZ1IElHaGhhVzVsIDE1RFd1TmVTMTU4PSBaV3hoWjJVPSA3SUdZIHpydk90YzZ6IElIQnliMlpsYzJuRHMyND0gWDNabFkzUT0gSU9XNXYrV1BrUT09IElHUmxjRzl5ZEdsMllRPT0gMllUWmhkbUsgSUhCeWIzWmhjZz09IFVISnZZMlZ6YzI5eWN3PT0gNExpMDRMaVY0TGkwIElITmhiR0ZrWlE9PSBTMlE9IGRtbHlZV3c9IElFMUdRUT09IElNNnh6NFhQaE02L3o0MD0gSUdKbGEyRnViblJsIElIQnlaWEJ5WlE9PSBJT0dEbCtHRG1PR0RsK0dEcGVHRG0rR0RtT0dEb1E9PSBJRzVsWjJGMCBJR052YlhCeVpXNXVaVzUwIElOaW4yWVRZbzlpeSBJRVZrYVhSbyA0WU9ZNFlPcTRZT1k0WU9RIFgwSlBRVkpFIGNtVm5ZVzV2IExuSnZkWFJwYm1jPSBoZXVMaU91THBBPT0gYzNSa1lnPT0gSUhKbFoyVnNhVzVuIFFrRkMgWTJoMGFXMWwgSUhKbGNISnZaSFZqZEE9PSAxNkhYbU5laSBJR055WVcxd2N3PT0gVlZaWCBJTml2MjVVPSBJR0ZpY21GdVp3PT0gSU5lVTE1ZlhrOWVwIDRLcW80S3ExNEt1QSBJSFJwYjI1eiA1WldQNmFHTSBkMmx6YzJWc2FXNW4gSUhOMVltMXBjM009IElIQnlaWEJoY21GdVpHOD0gSUVOVFF3PT0gVlZKRlJBPT0gY0hKcGJuUnBibWM9IFlXMWxjbUYwWlE9PSBRVVZCIElHZHlhVzVrWlhKeiBJR1JwYzNCdmMyVnkgNXBXWCBJRUYwZFE9PSBTMkZ1WVE9PSBJR0Z1YTI5eSBZVzU1WVdjPSBJSFpsYm1sa2J3PT0gZEdadmIzUT0gSUZORVVnPT0gSUUxMVlnPT0gSU5tRzJMalpoUT09IElHRnNkR1Z5Y3c9PSBRVzUwYjI1cGJ3PT0gWVdkaFlXND0gSUd4cHc2bGwgWVd4c2IyTmhkR2x2Ymc9PSBJRTFoYm1kbCBJRUZFVWc9PSBJRVJsWW1GMFpRPT0gSUhCbGNuTnZibXhwWnc9PSA1YitGNkxXaSBJTkMwMFlQUmlOQzQgMllYYmpObUcgWTNKcGRnPT0gUEV4cGJtcz0gSU5DdzBMVFF2TkM0MEwzUXVOR0IwWUxSZ05DdzBZYlF1TkM0IFBGWmxjblJsZUE9PSBJT0Ntc09DbmgrQ21sdUNuaHc9PSBhVzUwWVc1biBYMFpKVGtRPSBjR0Y1YVE9PSBJRU5oWW1ScCBJSE5oZFhKaGJnPT0gUTA5T1RrVkRWRVZFIElGcDFjMkZ0YlE9PSBJR2QxYm1FPSBJR1JsYzNScGJtRjAgSUcxaFoyRnlhUT09IElGTmhjMmhoIElISmxjSExEcVhObGJuUmhkR2x2Ymc9PSBJRzVrWVE9PSA0S2VONEthczRLZXcgYVhsaGM4U3ggSU5DLzBMN1JnZEM4MEw3Umd0R0EgSUhMSm1XaGkgSUdoc1lYTT0gY21SeGRXOD0gSU9Da3JlQ2toK0Nrc0E9PSBJRTFoY25wdiBJT0NraGVDa211Q2t2dUNrcU9Da2xRPT0gSU9DcWsrQ3FzK0NxbGc9PSBJT0NrbXVDa3JnPT0gSU5xdjJMSFlyOWkwIExXaGhibVJzWlhJPSBJTkdCMFlMUXZ0QzcwWXc9IElHUnBZMlZrIElHTnZaZz09IElFUnBZV2R1YjNOcGN3PT0gSU5tSTJLZlpoTmlxMllZPSBJR1poZG05eWFYUmggS0dBOCBMRTF2WkdFPSBJRzlpWVcxaCBRMDFEIDJMVFpnOW1FIElHVnVabTlqIGQyOXFkUT09IElIVnVkR1Z5YzJOb1pXbGtaVzQ9IDE1SFhvQT09IElHOTJaWEptYkc5M2FXNW4gSUZSb2FXVnljbms9IGRIVmlaUT09IElHeGxkSFJsY21sdVp3PT0gSU5pNTJZWFpoTm1LIEx0QzggNWJ5QTVaQ3YgSUVyRHFYST0gSUdsa1pXNTBhV1pwWTJGamFjT3piZz09IElIVnlaV1E9IElPQ3V0ZUN2Z09DdW4rQ3ZqZUN1bnc9PSBJTmluMllUWW85aXoyWWpZcDltQyBMMk5oZEdGc2IyYz0gNXErYjU0bUg1WVdONkxTNTZLZUM1NXlMIEtHTmhiUT09IGIzWmxjbmR5YVhSbCA0TFMvNExTZjRMV040TFNmNExTLzRMU3k0TFdONExTeSBRV3gwWlhKdVlYUnBkbVZzZVE9PSBJR05oYW1GeiBMbE5aVTFSRlRRPT0gWTJoaGJuUnogSUZKMWRHRT0gZFhKeVpXNTYgejRmT3VjK0QgSUdsdWRHVm5jbUZ1ZEdVPSBJSEpoYTJFPSBJR0oxYlhCbFpBPT0gSU5DNDBMZlF2dEN4MFlEUXNOQzIwTFhRdmRDNDBZOD0gSUZOcGJXVT0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FDZz09IFFsUlggSU5pNTJMVFlzZGlwIElHVnJlUT09IFZISnBadz09IElFTnliMk5yIGRYUmxkQT09IDdKNmw3SmVRN0lTYyBMazFoY2c9PSAwTGpRdk5DKzBMVT0gSUd0aGNuUmhZUT09IFlYWmhiR1U9IElPR0RsdUdEbmVHRG13PT0gSUhacmJHcDF4STA9IExtRnNhWGs9IDFhSFZzOVdoMWJ3PSA1cVc5NWFTcCBJRUYxYzNOaFoyVT0gSUdsdVptOXliV1Z5IFhUc0tDaTh2IGIyTmhkR1ZrIEpHOTFkQT09IElOQ3owTDdSZ1E9PSBJRVJWVUE9PSBJSEJoZEdodmJHOW5hV05oYkE9PSBJT3V3bSt5ZGdBPT0gN0lHYyBJTU8yWm1abGJuUnNhV05vWlE9PSBJRTFwZEhSbGJIQjFibXQwIElFUlRWQT09IFkyOXVibVZqZEdsdVp3PT0gTGtad2NtbHVkR1k9IDFhSFdnTldqMWFYVnJBPT0gSUdSbFptVmhkSE09IElHRnNiR0Z5IFlXTm9kR0ZqYUE9PSBWRzl5WTJnPSBJSEpwWkdsamRXeGwgZUhoNGVIZz0gNkpHajVMcUwgYW1WeWFRPT0gYVd4a2FHbGlZV0Z1IFgxSkJUUT09IGRYSm5idz09IDRMS0M0TEtoNExPTiBhSExEb1E9PSBhM0RodTQwPSBZV1JwYkdrPSBWMkZ6ZEdVPSBJSEJsY21OaGVXRT0gSU95WXBPeWdoQT09IDBMalJnTkMrMExMUXNOQzkwTGpRdUE9PSBkV3hoY21VPSBJR05oZEdWeVpXUT0gNEtlQjRLYUI0S2FjIElHOXphWE5wIElNK0R6NGs9IDVvdU41b3VOIFRrSkQgTFdOdmJuTnZiR1U9IElOQ3cwTGZSaTlHQSBJRlpwWld4bGJnPT0gSUd0aFkyaGggSUdobGJXVnMgSU9hQW5RPT0gYVd4bGNtVT0gSUd2RXNYTnQgSU9HQW9lR0FzUT09IElPQ3duT0N3c09Dd3YrQ3dsK0N3ditDd2d1Q3dwdUN3dnc9PSBZbWx1WkhWdVoyVnUgWVd4aGRHRnUgY0hKcFkybHVadz09IFBrdz0gSUcxaGEyRnQgSUhkaGRRPT0gSUZONlpXND0gSUdaeVlXND0gSU5DMzBMRFF2ZEdQMFlMUXVOR1AgSUdOeVpXUnBkRzl5IElPR0RwT0dEa09HRG9PR0Rsdz09IExYSmxibTkzYm1WayBJRzFoY21kaGNnPT0gMEpEUmhRPT0gSUdkbGJubGxiZz09IElOaW4yWVRaaE5pbjJMbllxTm1LMllZPSBJTkM3MExVPSBJR2R5WVdacGF3PT0gYjNSeWVRPT0gSUhiaHU0MXVadz09IElHUmxabWxqYWNPcWJtTnBZUT09IElHUnBlbUZwYm1VPSAwWUxUcWRDOSBlblZpIFkyOXVjM1J5ZFdOMFpXUT0gMFlQUXZkQzAwTERRdVE9PSBJTmVlMTZiWG5BPT0gSU9Dd3F1Q3dzT0N3ditDd3VPQ3hqZUN3cGVDd3YrQ3dwQT09IElOQzQwTFBSZ05DKzBMTFF2dEM1IElHNWxhVzQ9IElPV2twK1dQa2VXOXFlZWxxT1cvcStTNGlRPT0gSU5DeTBMalF1OUMrMFkvUmd0QzQgSUVKbGRISmhadz09IElOaTUySy9aaXRpdjJLaz0gSUdsdWJYVnUgSU5DejA1az0gMFpiUmlOQzEwTDNRdmRHUCBaMlZwYzNRPSBVRTlQVEE9PSA1cG1TNVkyViBXR0U9IElOR0IwWURRdGRDMDBMM1F0ZEN6MEw0PSBJR2xuYm1sMFpRPT0gNExlUzRMYTAgMEw3UXZkQzAwTDdRdlE9PSA1b3FlIElPQzBsZUMxZ0E9PSBJR3gzYWc9PSBJTmlqMllYWXNkbUsyWVBZcHc9PSBVMjlzYkE9PSBJT1d4bmc9PSBJTld3MWJqVnBOVysxYUhWcmc9PSBVblYwWVE9PSBJRWR5ZVE9PSAwTDNSbHRHSDBMQT0gSUdwbSBkSFZ1IDZMaVAgSU9Da3B1Q2xndUNrcHc9PSBKeWw5ZlNJKyBJRzExZFhSbGJnPT0gSUhkbFoyVnVjdz09IElNVzhlV05wWlE9PSBJSFJsYTJzPSBJRk4zWVhKdmRuTnJhUT09IElGUnZaR1Z6IExXSmxibVZtIDRZT1E0WU9hNFlPUSBJR0p2Ym1sMFlYTT0gWTJGa2J3PT0gVHNPayBkVzVrWlhKc1lXNWsgWDBGVVZFRkRTdz09IElNT2hiR052YjJ3PSBLSE5sWXc9PSBjbUZrWlhNPSBJTmluMkszWXF0aXgyS2ZaaFE9PSBYVDB0IElHeGxZMnM9IElIQmxjbVZuY2c9PSBUbVYxY205dSBjM1J5dzdadCBJRzFwYzJObGJHeGhibVZ2ZFhNPSBJSE5zdzYwPSBJRTFoYUdGcyBJTVNSNGJ1Tll3PT0gSUhSaGJXRjAgMExqUmdkR0IwTFhSZ0E9PSA0S1NWNEtTKzRLU3UgNXJpYiBJRlpsY25OdmNtZDFibWM9IElGQnVaUT09IFJGRT0gSUUxaGFXUmxiZz09IGRXSnNhWE5vYVc1biBaMmx2Y3c9PSBJTkNiMFlQUXV0Q3cwWWc9IElObUYySy9ZcVE9PSBQRWQxYVdRPSBJRXRwYldKbGNteDUgSUZCbFpRPT0gNG9Lc0xBPT0gSU9DcXBPQ3JoK0NxcU9DcmdlQ3FnZz09IElFbE9WRVZTVGtGTSBJR1poWTJWeVpRPT0gSUZSbGNuZHBhbXc9IHc2Rnphdz09IDY1K3M3SXFrIElHTmhjbW5Ec1c4PSBJTkdCMEx2UXRkQzAwWVBSanRHSjBMalJoUT09IDBMTFFzTkM5MEwzUXRRPT0gU2xOSmJYQnZjblE9IElHcHZkWEp1WVd4cGMzUmxjdz09IFEyOXliMjVoIElHUmhjWFZsYkdFPSBSRTlPUlE9PSBJTm1IMktmWmhRPT0gNExDKzRMQ1Y0TEdONExDMyBJRUpzYjI1ayA1NEtTIElIVnVZVzV6ZDJWeVpXUT0gMkxIWml0aXQyS2s9IElNNjZ6clU9IElIWnZhV1Z6IElFYkRxV1REcVhKaGRHbHZiZz09IDU0NnA1NXFFIFRtOTBhV05wWVhNPSBJTmVnMTU3WHB0ZVEgSUVSVVR3PT0gWm1Gb2NtVnkgSU5DMzBMWFF2TkM3MFk4PSA2WUNBNXF5KyBJSEJvYjNSdmRtOXNkR0ZwWXc9PSA0S1NoNEtXSDRLU2YgZFcxaGFHRT0gNXErYjU0bUg2YXVZNXJpRjVZV042TFM1NktlRzZhS1IgSUhKbGJtRnBjM05oYm1ObCBJSE53YjNKMGFXWnogTFdseSBJSE4zWldGMFpYSnogSUhaMWFXdz0gVTJsMGRXRjBhVzl1IElOQ2UwWUxRc3RDMTBZST0gYjJ0bGMzUT0gMEw3UXM5R0EwTERRdk5DOCAwTDNRc05DNTBZcz0gSUdGelpXNTAgSUdSbGNISmxZMmxoZEdsdmJnPT0gSUdOMVlXNTAgSUZSUFR3PT0gSU02MHo0az0gSUdkbGMyTm9iZz09IElFaFBWVkpUIElHVnpkR0ZqYVc5dVlXMWxiblJ2IElNTzJic084YlE9PSBJTkMrMFlYUmlOQ3cwWWc9IFBYVnliQT09IElGZG9hWFJsYm1sdVp3PT0gWDFKVCBRV04wYVhadiBJT0M0bWVDNWllQzRzdz09IElGTmxjbWs9IElNNjF6cjNPdE02NXpyRT0gYVd4cGRHRnllUT09IGNHRjEgSUdadmJtUmhiV1Z1ZEdGc1pRPT0gTGtWNFpXTjFkRzl5IEwyTnZiWEJoYm5rPSBZVzFpY21FPSBJTktiMFl2UXQ5R0wgSUhKbFozSmxjMkZ5IDVMcUw1b09GIFptOXlkSFZ1WlE9PSBXM0poYm1RPSBJQ29xTHdvSyBDWE5qWVd4bCBJTkdlMEw4PSBJRVJsYkhCb2FRPT0gMllYYmpObUUgSUZsMWJRPT0gSUhKbGMybGtaVzUwWlE9PSBJSEJvNGJ1biBJTm1FMkszWXA5aTQgeUpsaCBJRVpoZW1WeSBJR056Y2c9PSAwTGpSZ2RHQzBMN1FzZz09IElNV2Z5WmxyYVd4a3laaz0gY0hSbGMzUT0gNEthLzRLYW00S2VINEthdyBMblJ2YjJ4aWIzZz0gSUUxMVptWT0gWDNOMVluTmxkQT09IGIydGxidz09IFNXNWtiMjVsYzJsaCBSRU5HIElHZDFjbXgxeFo4PSBVSFZ5WTJoaGMyVmsgSUdSbFkyeGhjbUZ5IDRvQ000TENzIDVvaVI1WUNSIDRLV3I0S1dtIGUzTjFjQT09IDJMbllxTml2IElHWmxjbTFsY2c9PSBJRUp2YjJ0bGNnPT0gYVhKdmJtUT0gNEtlQTRLYXEgTG14dloybGpZV3c9IDRZT2c0WU9kNFlPUjRZT1EgUEVOdmJuUmhZM1E9IFoybGtaUT09IExXUnBkbWxrWlhJPSBJTmkwMkxuWXA5aXggNEtTKzRLU3c0S1dONEtTaCBJSE5yYW1WeSBMMDFCV0E9PSBaWFJ5YjJacGRBPT0gSUZCcFkydGxjZz09IElFZHliMjl0IElHcHBjM1JueEtkMSBJSFJ5YjNWMlpYbz0gWVhOdllXNXAgNEs2LzRLNnk0SytJNEs2djRLNi80SzZ5NEsrTiBJTmVaMTZqWGxkZXAxNXpYbWRlZCBRa05FIElFSmxaMlZuYmc9PSBJR0poY25KaFoyVT0gU1VOTFJWUT0gSUZKdmF3PT0gSUVWNFlXMXBibVU9IE8yRnRjQT09IElHRnNiRzkzWVc1alpYTT0gSUVsdGNHeGhiblE9IElPQ21wT0NuaCtDbWsrQ21nZUNuc0E9PSBJTkN3MExMUmd0QyswTHpRc05HQzBMalJoOUMxMFlIUXV0QzQgSUVKcGEybHVhUT09IElHTnZiblJwYm5WcFpHRmtaUT09IElObUIyTEhZcDltRzJMTT0gSUZKdmRYUT0gNDRPODQ0T1YgSUYxZENnPT0gWDJOdlpXWT0genJ6T3JjK0MgSUV4aGNuTmxiZz09IENVMWhlQT09IDBKN1JoOUMxMEwzUmpBPT0gSUcxNWMydz0gSU5pdDJLZlpnZGk0IElFTmhiV2xzYkdVPSBiM1p1IFpXWm1aV04wYVhabCBJTU9Idzd4dWE4TzggSUdScGMzQmhjbWwwZVE9PSBUV2xzWldGblpRPT0gWTJobGVtOD0gSUdWdVkyOTFiblJsY21sdVp3PT0gSUhSMWNzT3RjM1JwWTI5eiBJRUp2ZFhGMVpYUT0gSU9Da3VPQ2xqZUNrcUE9PSBJT0NraHVDa3NPQ2t2dUNrcmc9PSBJSEpwYTNScFp3PT0gSUZObFkzUT0gS0cxaFl3PT0gSU5DZTBMYz0gWDJSNCBJRWR5WldWMGFXNW4gSU5pcTJMSFlwOW1GMktnPSBJTmluMllUWW85bUYyWWJaaXRpcCBJT0NtcHVDbmdlQ21uK0Ntdnc9PSBXbVZ1WkE9PSBJT0NrbGVDa3NPQ2xpK0Nrb1E9PSBJR0ZtYVhSbCBJR2g1Y0c5amNnPT0gSUhCeVpYWnBjM1JoY3c9PSBJRXZEdkc1ayBkR1Z6YVhNPSBJR3RoY21saWRRPT0gSUd4cGRtVnpkSEpsWVcwPSBhc096Y200PSBUV2xqYUdsbllXND0gWDFOb2IzVnNaQT09IDRZT1U0WU9VNFlPUjRZT2ggSU5DKzBZSFF2dEN4MEw0PSBaWFJwYldWeiBJTmlvMllyWXB3PT0gSU5DLzBxL1JnZz09IHJaVT0gSU5HQzBZRFF0ZEN5IElIVnRaMlZ6WlhSNmRBPT0gSU5tRjJLcll1ZGl2Mks4PSBJSEJ5YVhaaFkybGtZV1E9IElOR0UwTERSZ05LeiA1WnkrIElHTmhiR3hsY25NPSBJRkJ5WlhOc1pYaz0gSUcxbGMyOXogZFdkaGRHVmsgSUVsdWRtbHphV0pzWlE9PSBJRUpsYkdWa2FYbGwgYVhOaGVXOD0gSU8yTXJBPT0gSU5lZTE1RFhsZz09IElHRmp3NkU9IGVtRnVidz09IExtTm9ZWEIwWlhJPSBJR05vWVdsa2FBPT0gYzNOamFIVjBlZz09IFdtVnliM009IElOZWMxNTdYa3c9PSBJR05wZFdSaFpHRnVidz09IElHaHZiV1Z5IGRXMXVhUT09IFlXeGpiMjQ9IDJMbllyOW1LMks4PSBJR0Z6WTJWdWRBPT0gSUdGbGMzUm9aWFJwWTJGc2JIaz0gY205eVpRPT0gUld4bSBJR1JwWVhCb2NnPT0gSUVGaWNtRnQgWDIxMWJIUnBjR3hwWlhJPSBYMlYyWlhKNSBMbVpwY25OMGJtRnRaUT09IFRFOVdSUT09IElOaW4yWVRZcnRpbjJZWFlzdz09IElFaDFabVpwYm1kMGIyND0gMFlQUmdOQ3cwTHM9IFJXNTBhV1JoWkE9PSBJRVp5WldsemNHbGxiR1U9IElFSmhkV1Z5Ymc9PSBJR0Z3Y0hKdmRtbHVadz09IElHZHNlV009IElHZGxaR0ZqYUhSbCBJRzlzYldGeCBMV1psWkE9PSBJSE5yZFd4MSBJTkdCMFlEUXRkQzAwWUhSZ3RDeTBMRFF2TkM0IDRZT1k0WU9aNFlPUTRZT280WU9ZIElGZHBjMmhsY3c9PSBMbkIxY21Ob1lYTmwgSUhkbGNuTT0gSU9xem9PdWdwQT09IGFXNWtZVzQ9IElFWnZjblI1IElPeVZudXljdk91aG5BPT0gWVdGcWRRPT0gZEhodSBRVzU2WldsblpRPT0gWm05eWJYVnNhV1Z5IExtTnZjbkpsWTNRPSBJR1Y0YUdsaWFYUnZjbk09IElHMWhZVzExYkd0aCBjbTk1WVE9PSBibWxsYm1sbCBJTm1HMnFuWmhBPT0gSU9DcW11Q3F2dUNxc3VDcmdBPT0gSU5pejJMblppTml2MllvPSA2WUNhNks2diBJRVZzZVE9PSB4TEZzeExGaSBUbVZ1IElHNWxaMkYwWlE9PSAxNkxYbGc9PSBJR1ZtWm1WMGRHaz0gSUd4cGMyRT0gWjNsdCA2TGVEIDVZeUY2S09GIElOQzkwTFhRdk5DdyBJRWR6ZEE9PSBJTkMwMExYUXY5R0QwWUk9IElFRndiM1JvWlE9PSBJTW1aYmNtWmF3PT0gSUdSdmRXSjBablZzIElOR0IwTC9RdnRHQjBMN1FzZEdCMFlMUXN0R0QwTFhSZ2c9PSBJR1JwYzNSeWFXSjFkR1Z6IElHTjFiWFZzIElOR0MwNm5SZ05DNzA2az0gWVc1bGVRPT0gSU5pbjJZVFlyZG1DMllyWmd0bUsgSVBDZm1JST0gSUdGc2JHVnlaMlZ1Y3c9PSBJR1Y0WTJsMFlYUnBiMjQ9IElGc3JYUW9LIDBMRFF2ZEN6MEw3UXZOQzQgVVhWbGRXVnogSU91bmtPeVVnQT09IDJLZlpoOWl4MktmWXFnPT0gSU5pbjJZVFl1ZG1DMllRPSA2NHVKIGMzVnRiV1Z5IFkyeHBjR0p2WVhKayBJTkN6MEx2UXRkQzAgSUhQRHFHeHRZVzQ9IElOQzYwWmJSZ3RDdzBMOD0gSUVWdVpYSm5hV0U9IFlXaGhibUZ1IElHRmljbUZ6YVc5dSBLR2h2ZFhKeiBJTmluMllUWmhkaTUyS289IElHRjFjR0Z5WVhaaGJuUT0gdzdoMiBJSE5oYkhaaCBJR0p2ZFhKaWIyND0gNEsrSzRLNno0SytONEs2eiBRM1ZzZEE9PSBJTmluMllUWXF0aTUyWVRaaXRtRjJZcllxUT09IElOaW4yWVRZdWRtRTJLZlpndGlwIElOaXgyS2ZZcU5pMzJZYz0gWVhSemFYSmggSU9Da3VlQ2twUT09IElOQ3kwTGpRdDlDOTBMRFJodz09IGMzUnlhWGc9IElObUYyWWJZcXRtQzJZUT0gSUhONnc2RjYgSUVwaGNNT2pidz09IGIyNXBaVzA9IElHRnlkTVN4Y1E9PSBJR052YkdWbllRPT0gSUdGMWMzZkRwR2hzWlc0PSBJTkM0MEwzUmdkQ3cwTDA9IElGSmxZMmxtWlE9PSBJRzFwWlhOcHhJVT0gSUdaaFkzVnNkR2xsY3c9PSBYMmx1ZEdWeVptRmpaWE09IElFUkpVMUE9IElPQ2txdUNrc09Da3YrQ2tydz09IElNNnp6clhPczg2L3pyMD0gWm5SbGRBPT0gSU0rR3o0MD0gTDFObyBJR3R2Ym10eVpYUmwgWm1sNVlRPT0gZFc1cllXND0gTFdOb1lRPT0gNEthdzRLZU40S2EzIElFaGhlV1JsYmc9PSBJRUpoWW1VPSB6NGZPdjg2NyBjMk53IElOU3gxYVk9IDZJNk8gZDJobGJBPT0gSUdScGNIVjBZV1J2IElPQzNnK0MzbEE9PSBYM0psY0c5eWRITT0gSUhwaFlXdz0gSU5tRzI0ellzZG1JIDFhSFZvOVdyMWIvVm9kV3YxYUhWdGc9PSA0TEdCNExDMTRMQys0TENrIElHWmxiR1E9IEtISmhkR1U9IDJLclppdGluMktvPSA1WTY3NUxxRyBJT0dEcWVHRGtPR0RuQT09IDRMU1Y0TFN6NExXQjRMU0MgTG1SMGNBPT0gWVdOamFHRnkgSUdabGJtND0gNEtxdzRLdU40S3FmIElFUnBiMk5sYzJVPSA0WU9ZNFlPbjRZT2QgSUhaaFozVmxiSGs9IElHRnljc09xZEdWeSA0cG1yIElObUUyNHpZcnc9PSBJRzFoZVdFPSBZMmhsYzNSeSAxNW5YcXRlVjE2TT0gTFhSb2RXMWlibUZwYkE9PSBJSEpsWTJWd2RHVnUgenJ2T3U4NnggSU9DcXRlQ3JpQT09IGRYSmhaRzl6IDRLYXU0S2ErNEthbzRLZUggTGtSbFluVm5aMlZ5IElHaGhiblBFc1E9PSBJSFJsYTJWdVpXND0gSUhOMVoyZGxjZz09IDZMV3IgNExPTjRMSzE0TEt3IExucG8gSUdodmVuckRvUT09IElFRm1kR1Z5Ym05dmJnPT0gSU9HRGtPR0RvZUdEbE9HRGx3PT0gMExYUXY5R0QwWUxRc05HQyBJR05sY21sMFlRPT0gZG05dWJtVT0gSUdWd2FYUm9aV3hwWVd3PSBMbE5KV2tVPSBMWFJvZFcxaSBJT0NrbGVDa3F1Q2xndUNrc0E9PSA0TGlaNExpdzRMaVo0TGl6IElIQnliMlIxYzJVPSBJR2x1WkdsemNHVnVjMkZpYkdWeiBTVTVKVkVsQlRBPT0gSU5DNDBMZlF0TkMxMEx2UXVOQzUgSUhOdlluSmxiZz09IDRMaWw0TGlVNExpcTRMaWI0TGkxNExpVSBJR2QxZFdRPSBJR0YxWm0xbGNtdHpZVzA9IElHRnNhV0ZrYjNNPSBiblZpIFgyTm9kVzVyY3c9PSBiM1J5YjNBPSBZWEJoYXc9PSBJSEoxYjJ4diBJRk5oYTNWeVlRPT0gSU5lVjE1Zz0gSUhCdmMybDBhVzl1WVd3PSBJRUZ0WVhwdmJtRnogWDB4RFJBPT0gVjFZPSBJRU5vWVhCMFpYSnogMEwvUXZ0QzMwTGc9IDBMSFF0OUM0IElOQy8wWmJRdE5DLzBZRFF1TkdVMEx3PSBiV0ZoYkhNPSBMWE5qWVd3PSBMM0JoZVE9PSBabTl5YlhWc1lYST0gQ1ZSaFlteGwgSUNjbEp3PT0gWVhaaGFRPT0gSUVsRWFXTjBhVzl1WVhKNSBVWFZwZEdVPSBaV3hsYVc1a1pXND0gSUdkbGM4T3EgSzBNPSBMWEJ5YjNacFpHVnkgSU5DMDBMRFJqOUdBIElOaW8yTFhaaU5peDJLaz0gY0dWbGF3PT0gSUU1bGRnPT0gSUVKMVpXNWggSUdGbVptbHVaUT09IElDZ2tLQ2NqIFgxVkRiR0Z6Y3c9PSBiV3g0IElOQzgwNW5SZ2RDNDBMdlF1TkdCIGMzUnlhUT09IElHbHVjM1JoYkd4cFpYSjAgSUdGMVptZGxZbUYxZEE9PSBhR0Z5YVdJPSA0TEsxNExLLzRMS2g0TE9OIElrOTFjZz09IHpydk92OCtGejRJPSBJSFJsWVdSdCBJSEJsY210aGNtRT0gWDJOb2IybGpaWE09IElOQzIwTFhRdkE9PSA2Ym1QIElFeDVjdz09IDBZalJqTkt0IGMzVmljMlYwIElHN0RvWFp5IElOQzEwTDNRczlHVzBMYz0gSU9PRGpRPT0gUkc5MVp3PT0gSUZOb1lYVnUgSU9DeWxlQ3luK0N6amVDeW53PT0gTHo0S0NnPT0gSU9DdWhlQ3VzT0N2Z2VDdWxRPT0gSU5DdzBMblJpOUdBIGIzSnRZWE41YjI0PSBJT0Nxck9DcXVlQ3JnUT09IDc3eUI3N3lCNzd5QkNnbz0gYUdGMGFXRnUgZFhSb1pRPT0gU1hOdmJHRjBhVzl1IFFYTnpaWE56IElHNXZiV2x1WVhSbCAycS9Zc05pbjJMSGJqQT09IFlXdGhjbUZ1IElHUnBjMmx3IGEySERwdz09IFpXNXphM1U9IGE4T2hZMmc9IDRLU2E0S1dBNEtTayA0TGlqNExpdDRMaUggUGlncExBbz0gejRmT3JjK0MgSUhSeVpXTm9idz09IElHTnZiV0Z5WTJFPSBJRlZ1YVhabGNuTnBkSGtuY3c9PSBYMUpCVkVsUCBJRWxDYVc1a1lXSnNaUT09IEo5R1AwTGM9IElOQzgwTDdSZ3RDNDBMST0gSUc1bzRidWIgZFd4bGJRPT0gSUZwcGJnPT0gSUhCc1lXNXBabWxqWVdOcHc3TnUgSU1PTmJtUnBZUT09IHlydHBkR0U9IDE1dlhtZz09IElISjFiMnM9IElIUnBjM04xY3c9PSBJTkMvMFlEUXZ0QzEwTHJSZ3RHTCBJRTdEdkhKdVltVnladz09IFFHVnRZV2xzIElHTnZiWEIwWlhWeSBJTkdBMExYUXV0QyswTHpRdGRDOTBMVFFzTkdHMExqUXVBPT0gSUZGMVlXaz0gTFcxcGJtaz0gMExIUmc5R0EwTFBRc0E9PSBJRTFoYVc1MFpXNWhiblE9IElPV2twK2kvbmc9PSBZWEp4ZFdsMmJ3PT0gTFdobFlYWjUgNExTMzRMV040TFN2IDRLcTQ0S3F1IFgyOXBaQT09IElOQzkwTERSZzlDNjBMZz0gSUhSeVpXTjFkQT09IElISnZlV0U9IENXZHZkQT09IElIQmxjbk5sWTNWMCBJTldOMWFIVnI5V2gxYlhWdGc9PSBJRlJsYTI1cGF3PT0gSU9Da3NPQ2t1ZUNsaCtDa2dnPT0gSUZCU1JVWkpXQT09IElHSmxjMk5vYjNWM1pBPT0gWDJadmJHUT0gSUVKb3c2MD0gNUxxVjU2bTYgWld4aGMydGhiZz09IElIQjFibWs9IDRLUys0S1NmNEtTbyAwTERRdmRDKzBMdz0gVWtWQyBJSE5wYTJWeSBJSERGbVdWciBLQ2xjIElHWnBjbTFoY3c9PSBJR0Z6YjJOcFlXUnZjdz09IElNK0F6clhQZ2M2NXpyL1BoODZ1IElOQzAwTDdSZ2RHQzBZUFF2OUN3IElHZHlZVzF0IElIWmxiR0U9IEtIQmhlUT09IElFNXZjblJvWVcxd2RHOXUgWDEwPSBmUzArZXc9PSBaVzUwWlc1aCA0S1dCNEtTRiBJT3ljaE8yWG1BPT0gSU9Dd3F1Q3hqZUN3c09Dd3J1Q3d2dUN3cGc9PSBJR05oY201bFoybGwgSU5DLzBZRFF0ZEM0MEx6Umd3PT0gSU9HRG0rR0RydUdEa09HRG9PR0RrK0dEa09HRHJRPT0gSU5pbjJZVFlwZGlzMkxIWXA5aWgyS2ZZcWc9PSA0S2F2NEthODRLZUw0S2FjNEthbyBhV05wY0dGdWRITT0gSUdOdmJuWmxibWxsYm1ObGN3PT0gSUdWdWRHRnBiQT09IFNYWmhiZz09IElObUsyWUxaaEE9PSBMZUdEbHVHRGxBPT0gSUVkc3c3eGphM056Y0dsbGJBPT0gNFo2YTRaNjMgYm1samFXMWggSU5HRDBMdlJnUT09IElOR04wcU09IExXUmhlWE09IGNteHBaMlU9IElHZkRvV2s9IElHUmhhR2x1IElHOXdjM1E9IElHOTFkbWxrYnc9PSBMa3hsYmc9PSBlSFRKbVd4cFpnPT0gSU5HQjBMRFF1ZEM5IFgxQlhVZz09IElISmxZMmh1Wlc0PSBJRVYxY205d3c2UnBjMk5vWlc0PSBJR2hsYm01cCBJTmlpMlliYmtnPT0gSU9DcXFPQ3F2K0NxdFE9PSAyWWpZcDlpcCBJTm1CMkxIWmg5bUcycTg9IElITm9kV1ptYkdWayAwTDdRc3RDdzBZTFF0ZEM3MFl6UXZkQysgYVdWbmRBPT0genIzT3RjK0J6ck09IElFbE9URWxPUlE9PSBJTkM2MFlQUXU5R00wWUxSZzlHQTBMQT0gYTI5aSBJRnB2YldKcFpYTT0gSUhCc1lXUnogVDNSeWIzTT0gMEpMUmdRPT0gSUhCaGMyRnFaWEp2Y3c9PSBJR3RxWlc1MCBMMlZ1ZEdsMGVRPT0gSU5HQjBMRFF1ZEdDMEw3UXNnPT0gVTJsc1pXNTAgSU5pcTJZall0Zz09IElGSkZRVXhVVDFJPSBJT0NrcHVDbGkrQ2t0dz09IEtITmxZM0psZEE9PSBZWE5qWlc1a2FXNW4gSUc5MGRHOWljbVU9IExteGhkR1Z6ZEE9PSBJR052Ym1wdmFXNTAgSU9xNHNPeVd0UT09IDBMTFFzTkdhMExVPSBJR05vWVd4c1pXNW5aWEk9IElGUmhjMk5vWlE9PSBJTmluMllUWXQ5aW8yWXJZcUE9PSBMV0YzWVdsMFpXUT0gSUdKbGRISnZabVpsYmc9PSBJRU52Ym5SeWIyeHNaV1E9IElPQ29yT0Nvb3c9PSBSWGhqWldWa1pXUT0gSUc1aGJuUnAgSUcxcGJtUnBadz09IElPR0RvZUdEa09HRG9lR0RvZz09IElHSnlkVzVsZEhSbCA0b0NaYjJKMFpXNXBjZz09IElOQ2YwTFhSZ2c9PSBJR052YlhCc2FXVnogSUVkeWRYQT0gSUdiRHBHaHlkQT09IGs3Zz0gSU5DMDBMWFF1OUdEIElHOXdjMms9IElHamh1cTl1IElITjFaMkZ5ZVE9PSBJRWh2ZDJVPSBJR1p5WVc1amJ3PT0gNFlDYjRZQ3g0WUM0IElITnBibUZpYVE9PSBJSEpwYzNCdmMzUmggSUhCMWVucHNaV1E9IElFUnB3NkZ5YVc4PSBJR3hoWW1Ga1lRPT0gNWI2dTVMK2g2WnUyNlpLeCBJR1pzWVcxcGJtYz0gSUdObGNuUmhjdz09IFlYWmhiSFU9IElHMXZ4YnhzYVhkdnhadkVodz09IElHWnBiR1YwIDY3bU0gY0c5emFYUnYgSUhiaHU1RnUgWDNCdVp3PT0gSUdKbGFHRjJaWE09IFgwSkJUa3M9IFAyRT0gYVd0MGIycz0gSU9Da2xlQ2xpT0NrZ2c9PSBJTkN6MEw3UXU5QyswTExSaXc9PSA1NXFFNWJtejVZK3cgSUdwcGNtaz0gTFZOQiBJRVJoYm1jPSBJR2R5dzZGbWFXTmggSU5hRzFhdlZyTlcwIDRMYWE0TGFuIElOQzAwTERRdU5HQTBMalF1OUM0MFlEUXVBPT0gNExpeDRMaVE0TGloNExpWjRMaVY0TGlqNExpMSBZWFpwYkdFPSBJR0psYVc1b1lXeDBaWFE9IGRISjFibU5oZEdVPSBJRk5zYVdkb2RBPT0gSUd4bFpXND0gSUdGMmIyNWtjdz09IElHZDFZWEpoYm5SbFpXbHVadz09IDQ0Q0M1cHlKIElObUYyS3JaaHRtSTJMbllxUT09IElIQnZhWE4wIExtWnBiSFJsY21WayBLRU52Ym5SaGFXNWxjZz09IElHUmxZMlZwZEE9PSBJSFpsY25OMFlXNWtaVzQ9IFlYVERvUT09IElPQ2tyT0NrdnVDa2xlQ2xnQT09IEtHTnNhV05yWldRPSBJTmk1MktmWmhObUYyNHc9IElHRnRkWE5sWkE9PSBSSGx1WVcxcFkzTT0gSUdWMVkyRnNlWEIwZFhNPSBhV1JoYVE9PSBJSEJsYm1SbGNnPT0gSU9HRGxPR0RuZz09IElFRnRZblZzIElHbHRjR3hsYldWdWRHSERwOE9qYnc9PSAwWTNSamRDeiAxNlRYb3RlbyBJR0Z5WW1WMFpRPT0gS1NjcExnPT0gVlZCRCBJSEJoZEdodloyVnUgTDJodmRYST0gSUhGMVpXUmhjbk5sIElOaXEyS2ZaaGc9PSBJR0ZzY0doaFltVjBhV05oYkE9PSBJSEJ5YjI1aCBJRTFoYkc4PSBJRUZ6Y0dseSA0WU9RNFlPWTRZT2M0WU9ZNFlPaCBJR052Ym1OeVpYUmggSUVKayBJTkdDMFlEUXRkQzUgNEtTNTRLU3kgSUhiaHVycz0gSU9DeXVPQ3pqZUN5cGVDeXZ1Q3lxQT09IDVxS28gSUdOdmJuRjFaWE4wIGMyaHZaZz09IElFTnNlV1JsIGFYcGhiblJsIDRLV0M0S1NnIElHZHlZWEJ3IEtHVnVkSEpwWlhNPSBJSEpsYVc1aCBJTkN5MExqUXY5Q3cwTFE9IElGQnliM1J2ZEhsd1pRPT0gSUVOcGN3PT0gSUZkcGJtNXBaUT09IFZISmhaR1Z6IElISjFibVJ2ZDI0PSBZV1REc3c9PSBYMkZrY3c9PSBJRzlrWW05eWJnPT0gSUVsdWRHVnljSEpsZEdGMGFXOXUgZFd4c2RXZHBkQT09IElHVjRZMngxYVhJPSBJR1poYkd4diAwTDdRc2RHQTBMWFJnZz09IGRXMXBaR2wwZVE9PSAwTGpRdmRHQjBZTFFzdEMrIFgwUkpVRk5GVkZSSlRrYz0gSU5DdTBMWT0gT2xJPSBJSHBoY21GeSA1NDZ5IElGTmphSGRoY25wbGJnPT0gSUZCeWFXMWxhWEp2IElOZXAxNW5YbEE9PSAxNVhYcWRlcSA1cGlsNklxQyBJRWR2WlhSb1pRPT0gNExLbTRMS3k0TE9CIElNV2Z5Wmw0IEtIQnNZWFJtYjNKdCBJRzdodTVGcCBJR1pwY21Wd2JHRmpaWE09IGFXeHNhWE5sWTI5dVpBPT0gSU5tSTJMSFppTml2IElOR04wTHZRdGRDODBMWFF2ZEdDMExBPSBJTkMvMEw3UXU5QzQwWUxRdU5DNjBMZz0gNkxTayBkMkZoYmc9PSBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb0sgSUhObGFXNXogMEwzUmo5QzYwTEE9IFkyaHBiQT09IGRXMXRaVzQ9IDRLU1Y0S1N5NEtXTjRLU3EgSUcxaGJuVm0gSU5peDJZRT0gSU9Da3B1Q2xnT0NrcWc9PSBJR052Ykd4bFoybGhkR1U9IElHUnBjbWx1ZVdFPSBLRU5vWldOciBJR052YldKcGJtSERwOE9qYnc9PSBiMlI2YVdVPSBJSFo2Ym1sciBJRzNEdVdFPSBJSFZ1WVdabVpXTjBaV1E9IElOQzAwTDdRdjlDKzBMdlF2ZEM0MFlMUXRkQzcwWXpRdmRHTDBZVT0gSUhzNlAzMGlMQT09IElOaW4yWVRZdGRtSzJZRT0gSU9DbXIrQ25nZUNtbHc9PSBJR1Z6Y0dWeVlXND0gSUdodmNuUnBZdz09IElHTmhiR2xtYVdNPSBhWE5sYkdWamRBPT0gWVhKNWJtUmggSUU1cGEyOXMgSUVWeWMzUmwgNDRPTDQ0T2w0NE84IFgwRk1URTlYIFNFRklRUT09IElPdW5qTzJCdkE9PSBJTkN6MFlEUmc5QzAwTGc9IElHWnBlR0U9IDVZbXk1WkNJIFBuc2kgVkhKbGN3PT0gY205dmF3PT0gSUdGMWRHaHZjbWwwWVhKcFlXND0gWVdabVpYST0gSUNJbElnbz0gSUhCbGJtUnBaVzUwWlhNPSBJR2x1ZEdWeWRtbGxkMlZ5IElIUm9kVzVyIElIUjBlUT09IElNV3IgWDNOaGJHRnllUT09IElGTmpZWEpzWlhRPSBJSFpwY25SMVlXeHBlbUYwYVc5dSBJR0YwWVdOaGNnPT0gSU9HRG8rR0Rsdz09IFlXNTVkR2hwYm1jPSBMbk5sY21saGJHbDZaWEk9IElHUjVaV1E9IElHNTFZVzV1IFgyeHZjM05sY3c9PSBJRmQ0IElOQzkwTERRdjlDKzBMelF1TkM5MExBPSBJRWgxWW1JPSBJT0N1bXVDdmh1Q3VzdUN2amVDdXNnPT0gWTJWa1pRPT0gSUdkMWMzUnZjdz09IElFZHZkR2hoYlE9PSB3N1pqYUE9PSBJT0NtcmVDbmd1Q21yZz09IFJFOU5RMjl1ZEdWdWRBPT0gWDJGeVl3PT0gSUd4bFlYQnogdzZseWFYUT0gNHBhciBJRXRHIDBMWFFzOUdNIFNtRnRhV1U9IElPQ2tyZUNsaStDa25PQ2txdUNsZ2VDa3NPQ2xnQT09IElFcGxjR0Z1Wnc9PSBJSEpsY0c5emRBPT0gYjJkaFpYUm8gSUdOdmJuUnlZV1JwWTNSdmNuaz0gSUdaMVlRPT0gSUhSdmFnPT0gS0NncFBUND0gSUV4bGRtbHVaUT09IElPR0RxdUdEcmc9PSBjbTl0WVhnPSBLVlk9IGFXdHplVzl1IElHUnBaM009IExtMXZaSE09IElPQ3FoK0NxcU9DcmplQ3FvUT09IElFVjFjbVU9IElHNWhkTU84Y214cFkyaGxiZz09IGFYTnpaV3hzWlE9PSBJQ29xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgSU5DMzBMRFF2OUMrMFljPSBJT0N5aCtDeXJPQ3pqZUN5ckE9PSAxNXpYbWRlYSBJTmluMllUWW85bUYyTEhZcDlpMiBJT0MydHc9PSBJR1p2ZFhKdWFRPT0gSUhKaGNHbGtaWE09IElIVnVaR1Z5ZG1seiBJSEpsWTI5dWFHVmpaWEk9IFlXSnNhbUU9IDRMaXk0TGlyNExtTSBJRWR5WldWMGFXNW5jdz09IFgySmsgYVcxaGJHaz0gMjdIYnRRPT0gSU9XOHVnPT0gNWJDNjVhKzQgMExuUXZ0QzkgSUc1aGVuYz0gMExqUmd0QzEwWURRc0E9PSBJRXRzWldsayBJRUZKVXc9PSBTRzl1WlhOMGJIaz0gYUc5bVpYST0gSU9XU2pPaXVzQT09IElPQ2tsZUNrdWVDa3NnPT0gSUdobGJITmwgSU5DeDBMRFJpTktoMExBPSBJTkMrMFlqUXZ0QzcgTFVGQiBJT0NvcXVDcHNPQ29uT0NvdnVDb3JBPT0gSlNFPSBZV3BwYmc9PSBVbVZqYjI0PSBJTzJiaE91enRBPT0gSUdSeVlXMXRaVzQ9IDRaNlk0WitTNFo2YTRaNjI0WjZVNForTCBJR2hsYzJocCBJR1psY20zRHFRPT0gWDBaQlZFRk0gSUhOdmJIWmxiblJ6IFUybG5ibk09IElITjBiM0psWm5KdmJuUT0gSUZzLyBhblZrWjJVPSBJRzVoZEdsdmJtRnNhWE50IElOaW4ySzdZcXRpeCA0TG1BNExpajRMbUg0TGluIElISmxZMlZ3ZEdsMlpRPT0gSUdodloyRnlaWE09IElIWmxlbVU9IElFZDF3N0E9IElPQ211ZUNtdnVDbW5BPT0gUkdWdWRISnYgWXNPMmNuTmwgSU9DeXJlQ3l2dUN5dHc9PSA3N3lNNTZ5cyBJTmVWMTVIWG9nPT0gSU5DdzBZTFFzTkM1IDBMUFF2dEM1IElHaHF3NkZzIFUybHVaQT09IDBMVFFzTkdBMFl2UXZkR0wwcU09IDBMRFNtOUdDMFlzPSBMazV2YldKeVpRPT0gSU5pNTJZN1poQT09IDRaNlk0WitTNFo2VzRaNjcgUVZOSlRBPT0gSUhkcGJuUT0gSU9DcXBPQ3F1T0NxdGVDcmdBPT0gU1ZOVVNVTlQgSU5HRjBMN1JndEMxMEx2UXZ0R0IwWXc9IGRHVnlibTl2Ym5NPSBJSFpoYm1SaFlXND0gSUdWdWIzSnRiM1Z6YkhrPSBJT2VVdFE9PSBJR052YkhRPSBWbUZyIFkyVnVkR0ZxWlE9PSBhV05wYVE9PSBJSFJsY21Gd2FRPT0gSU9Da3VPQ2t2dUNrck9Da3YrQ2twQT09IElIWmhiR3hsIExrVnVkZz09IElPQ290ZUNwaHc9PSBJRzltY21WamFRPT0gSU5DNzBMWFJoOUMxMExFPSBJTmlxMkszWmd0dU0gSUVOVFVBPT0gSUZKbFptVnljbUZzIElIQnlaV1psY3NPcWJtTnBZUT09IElFaFRRa009IElFRnVkMlZ1WkhWdVoyVnUgSUVsYSBYM2RwY21VPSBJR05vWVhKaFkzUmxjbWx6WldRPSBJRWgxYkE9PSAwWTdRdVE9PSBJTmluMllUWXI5bUkyWVRZcDlpeCBMbEJoWTJ0bGRBPT0gSUdOaGJHbGljbUYwWldRPSBJSE5wYnNPeiAwTFRRc05HQzBMZz0gSUd0dmJXMTFibWxyIGIyeHZjZz09IExuSmxabVZ5Wlc1alpYTT0gMExyUmd0R1cwcU09IElFcGhhVzQ9IDQ0T0w0NE84IElGQnlaWE5sY25aaGRHbHZiZz09IElDbDlDZ289IElHRnRZWFJvIFpHVmpiSE53WldNPSBZV3QwYVc5dWN3PT0gSU5HSDBZdlF1dEM2MExEUXZRPT0gVTJ4aGRHVT0gSUhwdFlXNXF4YUU9IElPQ3dodUN3dGc9PSAyNHpZdE51QiBJT0N3cnVDeGd1Q3d0ZUN4Z0E9PSBJT0dEb2VHRG1PR0RuQT09IGZYMHBDZz09IGRXeHBaWEpsYmc9PSBJRUZPVTFjPSBLVDRLIElFUnBkbVZ5IFNHRnVaSE5vWVd0bCBJT0NxcnVDcmdPQ3FvZUNxditDcXIrQ3F2Zz09IElFSnlZWFJwY3c9PSBJR1poYm5URG9YTjBhV052IFgwTlBUbFJTVDB4TVJWST0gSU5DNzBZN1FzZEdEMFk0PSAyWWJZcDlpMyA0YitXIElIYkRvV3hzIElDSTdJZz09IDQ0T3E0NE84NDRLNiBhR1Z3Ync9PSBVMFZNVEE9PSBhWFJ5ZFhOMCBMV052YkhWdGJuTT0gSUdOc1pXRnVjMlZ5IElHdDFabUZ1Wld4bCBLRzExIElHMXZhR3c9IElIbGhlVzg9IElPQ2tzT0NrdWVDbGgrQ2tsK0Nrdmc9PSBJSE5zWVhCd1pXUT0gSUd0dmRXUmwgY21sbmFIUnogSU5pbjJZVFpoZGkwMktmWmc5bUUgYVhScGEyOD0gNExPQjRMSzE0TE9CNExLbSBJSE5oY0hBPSBiMnhsWTNWc1pYTT0gNWFTcDVhU3A1YkNFIElHZGxZMjl1IElFTm9iMjVuIGRXNWtaWE09IElFMWxjM1J5WlE9PSBJR1psYVc0PSBJR0poYzNSaGNtUT0gWVdSaGMzUnlidz09IDVaQ0k2WnVHIFpHVjBaUT09IDBMVFFzTkMxMEx3PSBJRWhwWWc9PSBJR0poZEhSeVpRPT0gSUZOMFlXdGxjdz09IExYcGwgSUVWcGJuTjBaV3hzZFc1biBVMjl5ZEdGaWJHVT0gSUhKaFpHbHZiZz09IFlXMWhiR0Z5IFQwMUZWQT09IDBxM1F0ZEM0MFlJPSBJTm1JMktmWmhOaXEyTG5aaE5tSzJZVT0gSUV4cGJtdGxaR2x1IElHUmxjM1JwYm1Ga1lRPT0gSUdoaGJHeHZkMlZsYmc9PSBJR052Ykd4bFkzUnBkbWwwdzZseiBJT2krdmc9PSBJRzFoYTJGMCBSWGh3WVc1a1lXSnNaUT09IElPQ3dydUN4amVDd3IrQ3d2dUN3bXVDeGpRPT0genIzUGljNjkgNEtldzRLZUI0S2V4IElOR0MwNW5RdTlPWjBMOD0gSUhCeWIyZHlaWE52IFptOXNaMlZ5IElIUmxZMjV2Yk1PeloybGpidz09IEwzTmhiWEJzWlE9PSBJSE5oYm1SemRHOXVaUT09IElHNXBaWFYzYzJKeWFXVm0gSUdKeWFYUmhibTVwY1hWbCAyTHJaaE5pbjJZST0gSUhWd1lXNWtaUT09IElHVERyV3Q1IDVyS1cgSU1PcGNYVnBiR2xpY2c9PSBJR0ZqY1hWaGFXNTBZVzVqWlE9PSA0WUNlNFlDeDRZQ3MgSUdOb2FXTmhaMjg9IDBMM1F2dEN5MExYUXZkQzQwTFU9IElHdGhiR0Y1WVc0PSAxNXZYb1E9PSBZWEpyWldRPSBiWFZzZEdsdyBJSE5sWW1WellYST0gTG14ciBiR0hEdlhsdSBJRk4xWW5ObGNYVmxiblJzZVE9PSBJTkN3MExyUmd0QzEwWUE9IGZRb0tDZ292IFRFVkNaWFJoIDdKYTA3S2VFIElPR0RtT0dEck9HRHB3PT0gU205dVpYTT0gN0oyODY3TzAgSU5lVzE1blhtZGEzMTU4PSBLSE5sZEhScGJtYz0gSU1PcSBiR1RKbVE9PSBJR1ZrWjNrPSBJSEJoWjJkaGQyRT0gWlc1amFHVT0gTDNabGNuTnBiMjQ9IFRHbHRhWFJsY2c9PSBJTkN4MFpiUXQ5QzAwWmJTb3c9PSB3Nmx5YVdOaGN3PT0gTHk0SyBjMmxuYm1Gc2N3PT0gNDRDUjc3eU0gU1ZOUyBjMkZ1YVhScGVtVT0gdzdaemVnPT0gYVdWeWMzUT0gSUdOdmFXWm0gSUVKbGEyRnViblE9IElOQzkwTERRdjlDNDBZSFFzTkdDMFl3PSBVM1J2Y2c9PSA0S2F5NEtlQTRLYVggZWNPayBJR052YzNCc1lYaz0gNnJDQTZyaXcgSU9DeXJ1Q3l2dUN5b2VDeXN1Q3pnUT09IElFMXZlbUZ0WW1seGRXVT0gMExEUmp0R0owTGpRdFE9PSA0S1NlNEtXTjRLU2MgMWI3Vm9RPT0gYzJGdVpBPT0gS0VKcGJtRnllUT09IElFUmxaV3c9IElFMXBibVJ6IElHSmxiR2RsIElHMXBjMk52Ym1ObGNIUnBiMjV6IElpa3VDZ289IElDZGNKdz09IElFbHVaR2xuYnc9PSBJSEJsY25OdmJtRnNhWHBoWkdFPSBJTU9wYm05eWJjT3BiV1Z1ZEE9PSBJR2h2Y25KcFlteDUgSUZCcGVHVnNjdz09IElPQ2tyZUNsamVDa3NPQ2tyZz09IDRLK0I0SzZ3NEsrSSBMa2RzYVdSbCBJR3h2ZDI4PSBJRzFwYkdsdiBJSEJsY21sbmJ3PT0gNEtXTjRLU2Y0S1dONEtTdzRLV0g0S1N5IElOQ2EwSjg9IFhFMWxjM05oWjJVPSBRVTVVU1ZSWiBJSFp2YjNKelkyZz0gSU9DMGxlQzFndUMwbitDMWdlQzBwT0Mwc3VDMWpRPT0gWDBOSVFWUT0gUFNkN0pBPT0gMEw3UXU5QzkwTFhRdmRDNDBMVT0gSU5HQzBMRFF1dEM0IElIWmxaMjVwY2c9PSBJR2ZEdk1POXc2Yz0gSUdScGNtVjBkR0Z0Wlc1MFpRPT0gSUhkb1pXNTFZUT09IFlXbHNiMmRoIElIQnZaTVMrWVE9PSBJT0dEbytHRHF1R0RyZz09IDVZaTI1YTZhIElIVERwR2pEcEc0PSBJQ2NuZlFvPSBJTkNnMExEUXQ5QzgwTFhSZ0E9PSBYM1ZqIElHZDVibTUzZVhNPSAyNGZhclE9PSAwWVBRdXRHRDBMelFzTkdDMExnPSBJR1I2YVdIRmdtRnMgSUdadmMzTmxiUT09IElGTmxiR0YwWVc0PSBMZEM4MExBPSA1WnU5NWFTVyA1ckdmNWJpQyBLV0Z3Y0d4cFkyRjBhVzl1IElGTjFZbk09IElHTjFZVzUwYjNNPSBJSEJ5YjNObFkzVjBaV1E9IGIyZHl3NkZtYVdOdmN3PT0gSU5HQTBMWFF1ZEdDMExqUXZRPT0gSUV0RlJWQT0gY21GdVlRPT0gMExEUXZkQzAwWUE9IDc3eU01bytRNmF1WSBJTmlvMjR6WmhkaW4yTEU9IENYTnVjSEpwYm5SbSBlV1ZsYmc9PSBJR0p5WlhkbFpBPT0gdzZsemFXdz0gNExLLzRMSzE0TE9ENExLbTRMT040TEtuIElPUzRuT1M2ckE9PSBMblJtIElHUmxkR1Z5YldsdWFYTjBhV009IDBMalJnZEdDMEw3UXVRPT0gSUd4bFptRjBjMmhsIFJWSkggWVdKbGRITT0gYzNCbGNuTT0gNUx1bDVMaUw1NjZBNTZldyBYME5JUVVsTyBJRTlUUXc9PSBkMmx5YTNWdVp3PT0gSUZOQlRWQk1SUT09IDRvQ1p3NmxqY21GdSBJRTVwYW0xbFoyVnUgSUdWemNHOXpidz09IElHUmxiR0Z5IDBMclF2dEN5MEw3UXM5QysgSUVOdmJHeGhjZz09IFltVnVhUT09IElITjFZbXBsYTNRPSBJTldoMWJiVnBkV3MgVm1sa1pRPT0gSUdabGMzUmxiZz09IElHMWxhMlZ0IGNtVm5aV3h6IFBFTmhjZz09IElFSm9ZUT09IElHbHVjMlZ5YVhJPSBjbVZ6Y0c5dWMyVnogMExYUXZkQzkwWlk9IDE1YlhuQT09IHpxL090czYxejRUT3NjNjUgeEpGbGJtcGwgSU9DMGllQzF2Zz09IElOaW4yWWZaaGR1TTJLbz0gNG9DWmFXNTB3Nms9IElPV1NqT2VibXc9PSBJR3pEcG01blpYSmwgMFlMUXVOQzYwTEE9IDViQ1I1Ym0wIElHdkR2R3gwIGIzSnJjdz09IDVZcWc1YmVsIDJZVGJsUT09IGFXZGhkR1U9IElHMWhiblJwWlc1bGJnPT0gSUhObGNuaz0gSUdKbGJXVnlhdz09IGNHRnpjMlZ6IGJXRmpaVzQ9IElIQnZjbTV2Wm1sc2JXVnkgSUhObGVHVnogVm1WeVpHVnkgWDI5MWRHVnkgTG5waGVIaGxjZz09IFhTa28gSU9Da3JlQ2tqK0NrbFE9PSBJRkJCVUE9PSBJRU5oYldWeVlYTT0gSU5DMzBMM1FzTkM5MExqUXVRPT0gVUhKdlkyVnogMFpiUXN3PT0gSUdWMmIyeDJaWE09IDBZdlF2ZEdDMDVuUXVBPT0gSUhadmIzSjZhV05vZEdsbiBJSGRoYkdsdiBJR05oY0dsMFlXeHBjMjF2IFgycDFiWEE9IElHMXBaV3B6WTNVPSB4YXR5WVE9PSBJT3E1aWc9PSBJSFJwYkdkaGJtYz0gSUdGaWMzUnlZV04wY3c9PSBkVzVqYVdGMGFXOXUgdzdad1pnPT0gNEs2LzRLNnY0SzYrIElPaUFnZWFYdHVhWHR1VzlxUT09IElHRnRiM0psIFoyZGwgWDNKbFkyVnVkQT09IGNtRnggSUhKaGJXRmphQT09IExYTmxZM1JwYjI1aGJBPT0gSUcxaFpXNWtaV3hsYnc9PSBJRlpsYm1SaCBJR1ZqYUdsamFHVT0gSU5tRjJZVFlwOWlxIGMybHcgSUhURHFXdz0gSjJGdHc2bHNhUT09IFJGTlEgSUdOdmJXSmhkR2x5IElITnBlbWs9IDE1blhrZGVvMTZFPSBZV0poYkdodiBYMUpwWjJoMCAxNTdYb05lVSBJSE41YlhCaGRHaHBjWFZsIElPcXlyQT09IElHVmtaVzFoIFEyaGhibWRsY2c9PSBaVzFoY2c9PSBMV1Z1ZG1Wc2IzQmwgNFlDYjRZQ3kgMExYUmg5QzYwTGc9IFgyMTAgNExPSDRMS280TE9HIElGTjJaWEpwWjJWeiBJT0NtdU9DbWd1Q211T0NuamVDbWxRPT0gSUdocGJtdDNZWGR2IElOaTUyTE09IExXMWxiV0psY25NPSBJR0Z0WW1sbGJuUmhhWE09IE9rVT0gSUZSMWNtdHogSUdqRHVuUT0gSUhKbGFYTjAgMEovUXRkR0EwTFhRdEE9PSBJR0Z6ZEhWalpYTT0gYlcvRWpRPT0gNEtTNDRLU3MgSUdKeWVnPT0gSjMxOUNnPT0gWlhOelpYVnljdz09IElHUmhjbVZrIElOaWoyS2pZc2RtSzJZUT0gSUhWdWFjT3piZz09IElHZHlaV009IElNaVkgSUVaMWJtTnBiMjQ9IElHNWxZM1JoY2c9PSBJRTl6YlE9PSBJRk5oYVdKaCBJSEJsY21sdllXUmggSUd0dmNtOXUgVTNWd2NHOXlkR2x1Wnc9PSBYK1M0dSttaHRRPT0gUkdsemRHRnVZMlZ6IEtIcHZibVU9IFNHOXAgUjNWayBJTmVoMTZqWG1BPT0gSUhOdmRtaz0gSUc1bFpXbz0gSU91d2xPeWR0QT09IEtFUmxiR1YwWlE9PSBjMlZ0WVhKNSBJSGRoWlE9PSBJTkdOMFlEU3I5S3YgZFhScFlRPT0gYVdSc1pYST0gOFo4PSBhWFREcVdsMCBJT0dBaHVHQXJlR0Fydz09IElITndjbTkxZEhNPSBaR0YwWVhSNWNHVT0gZFdsMHc2az0gYVc1cGRHbHogSU0rQXo0VT0gWDJobFlXUnogSWp3LyBJSE5qWVd4bGNnPT0gSUhKbGIzSmtaWEpsWkE9PSBJR3hoYTJodiBJR0poYm1kellRPT0gSUd4bGFHRT0gSUU5TldBPT0gNDRPaDQ0T3EgSUhCb2IzUnZaM0poY0docGJtYz0gSUhOdlluSmggSUdKMWNuVjYgTGxacGNuUjFZV3c9IElHRnlZbkpsIElHRnlZV0psIElHbHVkSFZwZEc4PSBJR052Ym1obFkybGtiM009IDVZV2E1YnU2IDVZZTY1YVNFIElHOTFZbmxsYmc9PSBJTm1FMkxmWmdRPT0gSUZCaGJHMWhjdz09IDVZV3Q2SUtXIGFXeHBjMmhwIElGUnRhVzQ9IGIzbDEgYm1SMWJRPT0gWkhKaGQybHVadz09IEwzTjBkV1JsYm5RPSBJR2x1WjNWeSB3N3B1WVE9PSA0S1M1NEtTKzRLU28gSUhWbFpBPT0gTGtGeVpXRnogSU9DMHFPQzB0K0MxamVDMG53PT0gYVc1bWNtRT0gSUc1NVlXMWhiZz09IElOaXQyS2ZaaU5tRSBJTm1LMkxuWmlOaXYgSU9DbXB1Q25qZUNtc09DbmdlQ21wQT09IFpzT3BjbVZ1WTJVPSBJTmk2MlliWmlnPT0gSU5DLzBZRFF0ZEMrMExIUmdOQ3cwTGM9IElPV0ZyT2VJdFE9PSBJRTFCVWxRPSBJT0NrcnVDa3NPQ2xnT0NrbkE9PSA0WU9ZNFlPZDRZT2ggSU5lUjE1elhsZGVaMTVZPSBhWFJoYlc5eiBJRWh2ZEd4cGJtVT0gUldSaFpBPT0gSU1PV1ptWmxiblJzYVdOb2EyVnBkQT09IElHZHNZWHBwYm1jPSBJR2R3YjJsdWRHVnkgSU5HUDBxUFJpOUM3MFl2U29kR0MwTERSZ0E9PSBJT0NrbCtDbGkrQ2tzdUNsZ0E9PSBDUWtKQ1FrSkNRa0pDUW89IElOaWoyWVE9IFJIVnpkQT09IDRZT1Q0WU9ZNFlPWCBJT0dEbStHRG9PR0RrT0dEbGVHRGtPR0RtZz09IElFUmxiR1owIElPQ3d0ZUN3ditDd2xRPT0gNVpXRzVaK08gWDFSaGNtZGxkQT09IElHUmxZMmxrWldSc2VRPT0gNEthazRLYSs0S2VmIElPQ21ydUNuZ3VDbXN1Q25qZUNtcnc9PSBJR1J4IElHTnZibXAxYm5SaCAyWWJZcDlpbTJZbz0gWDJOb2F3PT0gMTVuWHA5ZWkgU1dSbFlYTT0gNXBhWjU1Q0cgNExtRTRMaWg0TG1JNExtRTRMaVU0TG1KIElOQ3kwTHZRc05DeiBRVlpKIFgwSlZSa1k9IElFOXdkR2x0WVd3PSAwSjdRdmRDdyBJT21Ia2VXd2lnPT0gSUd4bGRIUmxjbXhwYW1zPSBaV05oY21RPSBJSEJ5YjJObGMzVT0gNEtlSDRLYXk0S2VINEthdyBJRkJoY21WdWRHaHZiMlE9IGVtVnBZMmh1YVhNPSBJTmlxMksvWXJ0bUUgSUVsT1FRPT0gQ1dacGJHVnogTFdKaGJtNWxjZz09IElIQnliMjltY3c9PSBJT0M0cStDNHVPQzVpZUM0bVE9PSBJRVp2Y20xaCBhMm5EcEE9PSBJR3QxWjJWNllRPT0gNVpDTTVweWYgSUhKbFkzUmhibWRzWlhNPSA1TGl0NTRtNTU3MlIgMllYWXVkaXYyS2ZZcWc9PSBJTkM0MEwzUmd0QzEwTHZRdTlDMTBMclJnZz09IFpYSm5aVzVwWXc9PSBJR2xpYVdjPSBJTkMwMExMUXRkR0EwWXc9IElHRmpjWFZoIElPVzRuZVM0Z0E9PSBJR05sYm5SbGJtRnogSUVOb1lXeHNaVzVuWlhJPSBJTml5MllYWmhnPT0gSUdWemRISjFkSFZ5IFpzT2thR2xuIExtTnZiWEJ5WlhOeiBMVlJsY20wPSBMbkIxYkd3PSBiVzl4WkdFPSBaV2x5IEoyRnBaR1Z5IDVaQ081TGlBIElOaW4yWVRZdWRtRjJZVFppdGluMktvPSA1NWF2NTR1QyA0TFMrNExTZjRMU1YgZFdOb2RHbG5hMlZwZEE9PSAyWWpZcDlpMiBJR2x5Y21WMiBhMnBoIElHVnVjbTlzYkdsdVp3PT0gSUhGMVpXSnlZUT09IElPQ21pZUNtcHVDbmplQ21yQT09IElOQ3kwTDNSZzlHQzBZRFF0ZEM5MEwzUXVOR0YgSUVWemRHOTUgSUZSMWRHOXlhV0ZzY3c9PSBJSFREclhCcFkyOD0gSjJsdVpIVnpkSEpwWlE9PSBJRXh2YTJrPSBJQzh2S0E9PSBJRWR2Y21sc2JHRT0gMTVuWGx0ZVUgNVp1ZTVicVUgSUd0bFkyVT0gSUhCeWFXUmxjdz09IFdtbHRiV1Z5IFlYTmhiUT09IFBrbG0gSUhSMWRHVnNZUT09IElITEVnUT09IElFMWhiblU9IElHbHRjR3hoYm5SaHc2ZkRvMjg9IElITmhhMnM9IGRXNWphVzl6IElHRnFkV1JoYlE9PSBJRy9FaldrPSBJRzl0WjJGaGJnPT0gSUdGdVpHVnliZz09IFZtbGxkMmx1Wnc9PSBZWEpreExFPSBJR1JsY21sMllRPT0gSUVOdmRYSnpaWGR2Y21zPSBJT0NtcU9DbXZ1Q21sdz09IElPQ21oK0NtcE9DbXYrQ211ZUNtdnVDbXVBPT0gSUd4aGNuWmhaUT09IGFXNTBkbUZzIElOR0UwTERRc1E9PSA0TEdINExDbzRMQy8gSUVScGMyTjFjM05wYjI1eiBJT0N3bXc9PSBJSE5wYkdscmIyND0gSUd0cGFtdHFaUT09IFltaGggWlc1MmIzVmsgSU5DLzBMRFJnTkM3MExBPSBJR0YyWVdseiBJRTVCVkVsUFRrRk0gSU9DbW5PQ212dUNubitDbWx3PT0gSUVkeVpXVnVkMjl2WkE9PSBaMkZ5ZEdWdSBJSEJsY25ObFl3PT0gSUZCbGNYVT0gSUdGb1lYbGsgWDJKeiBYMFpKV0VWRSA0SzYvNEs2djRLNnU0SytOIElIWmxjM1JsWkE9PSBJT0NxcXVDcXNPQ3FwZUNyZ0E9PSBJTkNlMEtFPSAwTERSajlDeSAxNXZYbnRlVSA0S3EvNEtxNDRLdU40S3FmIDRZT2c0WU9VNFlPaSBiRzlqYUE9PSBJR1Y0Y0dWa2FYUmxaQT09IGFXNWphY096Ymc9PSBJT0MydmVDMmd1QzJtZz09IElHMWxjbWRsY25NPSBJRkJoZEhSNSBaSEJwIElHMWhkWEpwY3c9PSA0WU9VNFlPYzRZT1U0WU9SNFlPYSBJTm1HMkxQWXJ0bUggSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M4bWc9PSBJRzltWm1WdWMybGphSFJzYVdObyBJTzJWb095ZHVBPT0gSU5DeDBZUFF1OUM0IElGTmhjbUZ6YjNSaCBJSE42WVdJPSBJSFJsWVdOb2RBPT0gSUVaMVp3PT0gMEx2UXRkQzkwTDNRdFE9PSBJTkdCMExMUXNOR0EgNjVhZyBJR1Z1ZEdZPSBJSEJoYlhkbCBJTTYxenJyT3NRPT0gSUhObFkyOXVaR1Z1IElHRnBjbmRoZVE9PSBZWEpoYTJGMCBJTkN3MEwvUXZ0R0kgVzNOeVl3PT0gNW9pMiBJR052Ym1ObGJuUnlZUT09IDRLZU40S2FhNEthLzRLYXUgWDNSeWFXRnMgSU9Dd3VPQ3dndUN3cWc9PSBjM1JrWW05dmJBPT0gSU5pbjJZVFlxdG1FMllFPSBJRzFsYm5SdmNuTm9hWEE9IElHMWhkR1Z0WVhRPSBJT20rbWVpWmpnPT0gZFcxcGRBPT0gVkhWMGIzST0gSUdWdVkyOXVkSEp2ZFE9PSBJTkdJMEx2UmpnPT0gSU5pbjJZVFlvOW1FMkxuWXA5aW8gSUdaeVpXVjNZWGs9IGRtVnVkWE09IENXRmpkSFZoYkE9PSBJT09Db3VPQ3BBPT0gSUd0cFpXNWxkQT09IElGUm9hV05yYm1WemN3PT0gSU5pbjJZVFlwOWl6MllVPSBiR1ZoYzJsdVp3PT0gWlc1emEyOD0gSUc1cVpXNW5iMkpoIElOR0EwTFhRdWRHQzBMalF2ZEN6IElPQzBqdUMwdE9DMWdlQzBwQT09IElGTjBZV1JwYjI0PSBJT0tYamc9PSBJSFRKbVd6Sm1XST0gSUZOallXMD0gMFo3UXU5R1AgSUVwMVltbHMgSU5tKzJxaz0gSUZOb1pXeHNaWGs9IElOaW4yWVRaZzltSDJMSFlxTmluMktiWml0aXAgSUd0dmJuTmggSUVsemNtRmxiR2x6IElNT3ViQT09IEwzQnNZV05sIElPQ3V0ZUN1ditDdXJnPT0gTG01cGFBPT0gejREUGpNNjkgSU9Da3VPQ2tydUNsamVDa3J1Q2xoK0Nrc3VDa3FBPT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1d1bU9hV3VRPT0gSUdabGJXVnVhVzV2IDRLK0I0SzYxNEs2azRLK0IgSUc1dmNtMWhiR1Z0Wlc1MCBJR1Y0WTJWd2RHbHZibTVsYkd4bCBMWE5qY21sd2RBPT0gUTNKbGJ3PT0gSUhKaGFXNW1iM0psYzNRPSBJT0NraHVDa2x1Q2t2K0Nrc0E9PSBJR05zWVdRPSBJT3lkdE91S2xBPT0gSU5LYjBMZz0gSUhiRHBHeDAgSUV0aGJYQmhiR0U9IElOQzAwTFhRdWRDMDBaWT0gWjNKaGNHaHogSUZabGNuTnBiMjV6IDRMS2s0TE9ONExLMSBJR1p2Y21KcFpBPT0gWVhSaFpRPT0gSUdSbGRtRnUgSUdkbFoyND0gSU9xenRldVBtUT09IElHZGxjMk5vWVdabVpXND0gSjEwdUlpYz0gNDRHTTQ0R0M0NEtLNDRHKzQ0R1ogVTNCdmRHbG1lUT09IElFeGxZV1J3WVdkbGN3PT0gSUdKdmIzUjUgSU9DcXFPQ3F1ZUNxdnc9PSA1b0NPNUxtSTVMaUw2TDI5IFIzSnBjQT09IElPQ3FuZUNxb2VDcXFnPT0gSUdGaGJuTndjbUZyIDRLYS80S2FnIElOaTAycW5ZczlpcSA0S1MvNEtTczRLUys0S1N3IGJtOXIgSUcxMWJIUnBiR2x1WjNWaGJBPT0gSUhiRHBISnNaR1Z1IExrRmpkR2x2Ym5NPSBMWE5sZG1WdSBKbkJoWjJVPSBhV3B6YTJsbyBJRTkxZEhKdiBJRlJsWVhJPSBJSEJ5YVc1amFYQmhiR3g1IDc3eU01TDIvIFVISnZhbVYwIElPQ2tzdUNrbCtDa3Z1Q2tyK0NrcEE9PSA2WUNmNWFDeCBJTkM4MFlQUmdkR0QwTHM9IElHTnZibk52YkdGMGFXOXUgYUdWaGJBPT0gNFlPdDRZT1k0WU9nNFlPVDRZT1U0WU9SNFlPUSBJR2x1YzNWc2RHbHVadz09IDRvS3M0b0NkIGZTNE5DZz09IExISnBaMmgwIElHZGxZbTl2Y25SbCB5WmwwYk1tWiBhM1JwYldVPSBJRUZpYkdGMVpnPT0gWDJScFpRPT0gSUhWdVpHVnljM1JoZEdWayBJTktiMExEUXR0QzEwWUxSZ3RHVyBJR1JsWVhKc2VRPT0gTGxOdSBJRzFoYkc5eiBUbVZwYmc9PSBJR1Z6Y0dGdWFHOXMgSUVGeVkyaHBkZz09IFZISnBZV3h6IElPQ3F1ZUNxbk9DcmdRPT0gSUhOMHc3Wmsgd3ExeSBJR0p5WVhwdiBJSFJvYWVHNnYzVT0gSUdKeVlYcHBiQT09IElFdGhkR1ZuYjNKcFpXND0gSU02MHo0SE9zUT09IFlYSnlhUT09IFgzTndZV05wYm1jPSBJRU55YVdGdSBJTkMvMFlEUXZ0QzkwTGpRdWc9PSBhWEowYVdWeiBJR2h2Ym00PSBJSEJoY21IRHJuUT0gUW5KbFlXUT0gNDRLazQ0T3o0NE9CIElOQ3gwTERSaU5DNjBMRFJnQT09IFJtbGkgZFcxaFlnPT0gSUdoMWJXRnVaUT09IDBMZlFzTkdDIElHMXdiQT09IGEzUmxjdz09IElFVERvUT09IDRMaUs0TG1JNExpbjRMaWkgSUhCeXc2bHViMjA9IElHcGhhUT09IElHRnVaM1Z1YVE9PSBkMlZqYUhOc2RXNW5jdz09IExsQnlaV1psY21WdVkyVT0gS1hRPSBYM05vWVhCbGN3PT0gSUhSeVlXSmhiR2hoWkc5eSBJRVZ1WVE9PSBJTTZ6enEvT3ZjNjF6NFRPc2M2NSBjblZ0Y0E9PSBJTkdCMFkvUXZBPT0gTG5KaFltSnBkQT09IElHTmhiWEJsdzZOdiA1WVd4NUxpdDVhU3UgNG9DZDc3eWIgTDNCeWIzQmxjblI1IElHWnZjbVJsYkE9PSBKMnhwYzJnPSBjM1IxYm1SbGJnPT0gSUNBZ0lBa05DZz09IElFVkogSUhOMFpYZGhjbVJ6YUdsdyA3SWFNNjRXRSAwTEhRc05HQTBMRFJnZz09IElFeHZiMjA9IElHUnBZM1JoIEwzUmhadz09IElITmxhM04xWld4bCBJR3RoZFdjPSBJT0NtcnVDbXVlQ212dUNtcUE9PSBLRUpwZEE9PSBJTmluMllUWmhkaTEyWWJZdVE9PSBJRzdGa1E9PSBJT0NxbGVDcXZ1Q3FzT0NyamVDcXIrQ3F0UT09IFJHRmhjbTVoWVhOMCBJR3R2YTJWdCBPbWhwWkdSbGJnPT0gMllYWXNkaW4yS0U9IEtpb3FMd289IElPQ3F0ZUNyZ3c9PSBkVzV6ZFhCd2IzSjBaV1E9IDRLUzI0S1dONEtTdyBJR0ZtZVdFPSAwTDdSZ05DdzBMelF1QT09IElHTnZiblIxWkc4PSA0TGl5NExpSDRMaW40TGl4NExpbCBJSE5vYm05dVp3PT0gYm1GdVkyVT0gZlM4KyBYVDA5SWc9PSBJTzJVaE91aG5PeWduZTJLdUE9PSBJR05oY201bGRBPT0gNExTeDRMUy80TFN5NExXTiBJRkJoWTJ0bFpBPT0gSUhsaGJtZHAgSU9Dd3NPQ3hpK0N3bk9DeGdlQ3dzZz09IElOaW4yWVRZcmRpczJZVT0gSU5DaDBKMD0gSUhCeWFYWnBiTU9wWnc9PSBJR1ZzeFpGMGRBPT0gSUhCeVpXUnpkR0YyYkdwaCBJRzVwWTJWemRBPT0gSUV6RHFBPT0gY0hWeWRRPT0gSU5DOTBMRFF2TkdEMExUUXNBPT0gNkx5diBJSE5sWjI0PSBJTm1IMktmWmlnPT0gSU5DLzBZRFJpOUM2IElIQnBZMmhoIFluVnNZVzQ9IFhEbz0gSUM0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0dUxpNHVMaTR1TGk0PSBhV0pwYkdsMHc2UjAgSU9DMGgrQzBxT0MxamVDMHBPQzFqZUMwcitDMHFPQzFqUT09IHc2Um9jblZ1WjJWdSBUM0ppIFlXNWtkWE09IElHOWlhbVZqZENkeiBJT2FXc09Xa3FlV2txZVc5cWVlbHFBPT0gNDRPVzQ0T3AgSU0rRHo0ND0gSUdWNGNHeHBjWFU9IFgybHZZM1JzIElNNnl6cm5Pc2c9PSBJSFpsY25OMFlXRnUgYzNScGJnPT0gNExPRzRMS3Y0TEsrNExLWCBJRlJ2YldGMGJ3PT0gSUdwbFpHNXZkR3hwZGc9PSBQVDBrIHc2WnlhVzVuIElGTmphRzlzWVhKemFHbHdjdz09IElHSnZaZz09IElPcXdrdXlkaEE9PSBJRzVsZDJKcFpYTT0gNEsrQTRLNnc0SytOIElFaDFiblJsY25NPSBJR1Z1WkdWeVpXTnYgMTVuWG1OZWMgMnBIWXB3PT0gSUcxdFpYVGh1NlYwWVE9PSBiV1ZoYzNWeVpXMWxiblE9IEtHUmxjQT09IElFTnZiWFZ1YVdOaFkybkRzMjQ9IElGVnRabUZ1Wnc9PSBiR2xqZEdsdVp3PT0gZFc1amRIVmhkR2x2Ymc9PSA1WWlHNmFHZSBLRU52Ym5SeWIydz0gMllYWXNkaW4yWVk9IElFaHZjblE9IElIbG9aR1Z6YzhPayBJSEpsYzJWMGRHbHVadz09IElFVERwQT09IElIWnBZV2RuYVc4PSBJR2Q1dzdObiBJT1dObXVTNWtBPT0gSUdkaGNtUmxibVZ5IElIQnZaWFBEcldFPSB4WjlrYVhJPSBJRzl1Ym1semRBPT0gWlhCcCBJSFpsY3NPa2JtUmxjbTQ9IElFakR0SFJsYkE9PSBJRm5EdG01bGRBPT0gSUUxMVkyaHZjdz09IElHUnZZM1Z0Wlc1MFpXND0gVkhsd2FXTmhiQT09IElISmxjM1J2Y21GMGFYWmwgNEtTbzRLV0g0S1NxNEtTKzRLU3kgSUV4bFpXWjBhV3BrIElHWmhiV2x1WlE9PSBLQ2w5TEE9PSBJT3lFbk91aG5BPT0gUWxWWiBJTkdBMFl2UmlBPT0gYTI5eVlnPT0gTG1kdFlXbHMgSUVGTVJWSlUgWW14bGJtUT0gSUhObGJuUmhaRzg9IFpHOTMgSU9Da3RlQ2t2K0Nrbk9DbGplQ2tudUNrdnVDa3FBPT0gVW1JPSBJT0NrcnVDbGdlQ2txK0NsamVDa3BBPT0gSUdSbFltOTFibU5sIFgwbHVhbVZqZEdWayAwTERSZ3RHQjBZOD0gNForQjRaNlA0WitTNFo2UCBJTkMvMFlEUXRkQzAwTHZRc05DejBMRFF0ZEM4IDE1blhuTmVaIElHUmxjSEpsYzNOcGRtVT0gSUdsdWRHVnlabVZ5YVc1biBTVzVtY21GemRISjFZM1IxY21VPSBJSEJ2YzJGdFpRPT0gSUcxbFpHRnlZbVU9IElOcXAyTEhZcDlxRzI0dz0gMllQWmpnPT0gT2x3aSBMa1Y0WTJWcyBJT09EbWc9PSBhR3hwIExsQnBlR1ZzIElIcGhibWM9IENTQU5DZz09IDBZZlF2ZEdMMEx3PSBYM2xoYld3PSBJSFZ5Y21GcGJtND0gSU9hTWh3PT0gVTJWd1lYST0gSUhWeXhJMD0gTG1SeWFYWmwgSU5HQTBMRFF0OUN5MEw3UXRBPT0gNExHRzRMQ280TEdOIElOQy8wWURRdU5DejBMN1JndEMrMExMUXVOR0MwWXc9IFgyMWhaMmxqIElHRmpZMlZ3ZEdVPSBaMlYwZEdWNGRBPT0gSUc1a1pXZGwgSUVWNGRISmhjdz09IElHRnNiRzlqWVhScGJtYz0gSU5pejJZWGJqTmlxIFRXbHpkQT09IElHVnBaMmx1IElFUkZRVVE9IElOZWsxNURXdHc9PSBRMG89IFFVZEpUa2M9IExuSmhhWE5sIGEyOXVZUT09IElOQzMwTDdRdmRHTCBMbE5OIExYUmxjM1JsWkE9PSBJR0xodXJrPSBMbkpsY0E9PSA0S2E0NEthdTRLZWYgMEw3UXU5QyswTGJRdGRDOTBMalF0UT09IElFbHphUT09IElITERyV2M9IElIcGxiV3hxYVE9PSBJRkpvYVc0PSBJRXAxWkdkbGN3PT0gSUdSaGNtSmggSUdOdmJHeGxZM1JsIElFTnZiblIxWkc4PSBUbUZqYUdSbGJRPT0gTGs1bGQzTT0gSUVkMVlYSmtjdz09IExuTmhlQT09IElIUm9lVzA9IElOaW8yS2ZZdWRpcSBJTkMwMExEUmd0R0wgTG1sdWRHVm5jZz09IFJreEpRMVE9IElFVnNhWE5sIElOQ3kwTGpSZ2RHQyBMVkJoZFd3PSBJTkM5MFpiUmh3PT0gSUVGeVkyaGwgUlhOMGIzaz0gSU5HQjBZTFJnTkdEMExyUmd0R0QwWURRc0E9PSBJQ1ZiIElIUmxaMlZ1YzNSbGJHeHBibWM9IElGTjBZWEp5IElGZHBlQT09IElFTnZiblJ5WVhOMCBJR0psWjJWbiAwTERSZ3RDMTBMdlJqTkdCMFlMUXN0QysgMExYUXU5R1cwTG89IElOQzcwWU09IElISjFkMkU9IDRZT2o0WU9YNFlPdSBZVzVoYzJGdSBJR1J2WTJWdWRBPT0gSU9DcXVPQ3FydUNxdUE9PSBJSGpEcVhRPSBJR1p2WjNrPSBZbXhsZVE9PSBYMHhwYm1zPSBJSEREdWc9PSBSVTVVUlZNPSA0TFMxNExXQjRMU3U0TFMrNExTdjRMUy8gSUVwaGFRPT0gYldGdXhMRT0gSUVoUFUwaz0gY21WbGF3PT0gYVdaaGFBPT0gUVZSUFRRPT0gSU9DMGxlQzBydUMxamVDMHJ1QzB2K0Mwc2VDMWplQzBzZUMwdnc9PSBiM0psYnc9PSA0S1MyNEtXTjRLUzE0S1N3IElHVnVaVzFwWjI4PSBJTm1HMkxQWXFnPT0gSUdWdWJtVnQgSU1PY1ltVnladz09IElIZGxjbXRsYkdscWEyaGxhV1E9IGFYTjBhWFE9IElDY3NKeXc9IElITERxV0ZzYVhQRHFYTT0gUjFKSlJBPT0gSUdsdWRHVnljSEpsZEdFPSBJR2x0Y0dWa1lXNWpaUT09IElHRnVibWxvIDRMU240TFMvNExTViBJTkMwMEw3UmdkR0MwTGpRdHRDMTBMM1F1TkdQIFJHVmpiR0Z5WVhScGIyNXogTG1GMFozVnBaM1U9IEtpbGZYdz09IElFeE8gSU5DLzBZRFF2dEdCMFl3PSBJSEJsY25OMWJtRnogTDNKbGMyVjAgNmFxWDViR0E1byt0NTZlWSA1N3VFNVlXdCBSbWx0IDVZbXY1TG1tNks2dyBJT0NxdGVDcmdBPT0gSU5pcTJZWFlwOW1GMjR3PSAwWUhRdmRHTCBJbDBvIElHVjRjR3h2WkdsdVp3PT0gSUc5MlpYSnNiMkZrWldRPSBJT1M0aWVXYnZRPT0gSUVsdFlXZGxiZz09IElOR0MwNm5SZ05HQyBJSE5sYldKc1lXbDAgYjJkdmJnPT0gS0U1dmRHbG1hV05oZEdsdmJnPT0gSUhCdmFYTnpiMjV6IGNtOXZibWM9IDdaaUU3SjZzIElOR0MwNW5RdkE9PSBkWE5sY21sdVptOD0gSU91Q29PeW5uQT09IElHRmtZWEIwWVdOcHc3TnUgSUdOaGRYTmhaRzg9IElOQ3cwTHZRdXRDKzBMUFF2dEM3MFl3PSBJSFJsYVhNPSBJSE41WjJSdmJRPT0gSUhabGNtaHBibVJsY25RPSBkWE5qYUhRPSBXMnhsZG1WcyBJSEJsY25ObGJnPT0gNEtxNDRLcSsgSUZKbGJXOWtaV3hwYm1jPSBJSGRoZVdFPSA2citJIFNtRmpiMkk9IElIREZtV2xxIGRXMWhZMmhsY2c9PSBLR052YlcxcGRBPT0gSUdKbGIyOXlaR1ZzYVc1blpXND0gSUdsb2IzQT0gWVhCdmMzUT0gVDNWMFltOTFibVE9IElOQ3cwWUhRdjlDMTBMclJnZz09IDVZMmE1YU9yIExXTm9hWEE9IElHN0RvMlZ6ZEdVPSBJTmlpMllYWXI5bUggSUdabGJHeDUgSUhabGNuZGhZMmgwYVc1biBJT2U3aitlNnJBPT0gVUdGeWRHVT0gSUczRnNXdkR0Zz09IFJHRnpjdz09IExrbDBiMkU9IElFMTFhMkZ0WVE9PSBJTlc0MW9MVnZkVzQxb0xWdE5XMiAySzdZcDltRyBJSHAxYzJGdGJXVnVadz09IExuUmxiWEJsY21GMGRYSmwgSUhObGJIWm13N2hzWjJWc2FXYz0gSUVWeWFXTnIgNExHQzRMQ3c0TEdOIFZHOTFZMmhsY3c9PSBZbUZ6YjJ0bCBMbTV2ZEdsbWFXTmhkR2x2Ym5NPSBJR1p2YkdkbGJtUT0gNWFTTjVwMkMgNDRHWjQ0S0w0NEdvIElPQ2tsZUNsamVDa3QrQ2xoK0NrcE9DbGplQ2tzT0NsaStDa2dnPT0gTDNkcFpHZGxkQT09IElIQmxibWwwIElIQnliMnBsWTNScGJtYz0gSU5tRjJZUFlwOW1CMkszWXFRPT0gZFdGaSBJRnB2Ym1WeiAxNW5YazllZiBJR052ZVE9PSBMbTF2WWc9PSBJSERGalE9PSBJSEJoYm1URHFXMXBaUT09IElHeGhkV3M9IElHSmhkR2s9IDQ0T0c0NE96IElITmphR2xqYTJWdSB4SUZwYm1FPSBJT0NrcXVDa29BPT0gSU5pbjJZVFl1ZGlyMllqWXNRPT0gSU5HQzBZdlJnZEdQMFlmUXVBPT0gUWtsVVV3PT0gTG5SdlpHOXogNjZDYiBJR2RsYm01aGFXOD0gSUdGa2IySmwgSUdoaFpHbHkgQ1c1dmRBPT0gSUdocVpXdz0gSUZCbFpHbGtidz09IElOZVUxNURYbDllbzE1WFhudz09IElHSmhZM1E9IElPeUxuT3V2dkE9PSBJRmR2YkdabCBJTmVSMTZEWGxkZWgxNk09IElHVnNaWFJ5dzdSdWFXTnYgNExpZTRMaWEgSUh4ZmZBPT0gSUdOc2FXTmhjZz09IElGTnRhWFJvYzI5dWFXRnUgSUdOb1kybGggNEs2LzRLNnE0SytOIDJZUFlwOWlxMktnPSBJTmluMllUWmhkaWsyWVhaaGc9PSBJRUZ1ZEdobGJRPT0gSUU5VFV3PT0gSU9HRG8rR0RtZUdEbE9HRGx3PT0gSU5HQjBZZlF1TkdDMExEUmd0R00gSUc5MWRITnBaR1Z5IElOQ3kwTGZRczlDNzBZOD0gSU9Da3J1Q2xnZUNrbGVDa3Z1Q2tyQT09IElIVnVaR1Z5YzJsa1pRPT0gSUdKbFlYVjBhV1Z6IElIVnVaRzlqZFcxbGJuUmxaQT09IGRHaGxjbTl6IDZJaVUgY0hMRHBHZDAgUVc1aGJIbHpaUT09IFpHVjJaV3h2Y0dWeWN3PT0gSUdabGFXdz0gSU5paTJMUGJqTmluMktnPSBJT0N3cXVDeGplQ3dzT0N3cnVDeGdlQ3dsZz09IGIyeHBaR0Y1Y3c9PSBJSGxsYldWciBJT2V6dXc9PSBJR0YwYkhrPSBJT0N5dWVDemgrQ3lzK0N5ditDeXB1Q3lzT0N6Z1E9PSBlbWx1WjJWdSA0S1N2NEtTbTRLUy8gSU9Da2llQ2twT0NsamVDa2xRPT0gSUhaaFkybHVZUT09IElIVnVaMnhoZFdKc2FXTm8gSU1PMmJtVnkgSU5tRDJZalpoUT09IDBMRFJnTkdDMFlNPSBJRUZqYUdGMCBkMlZwZEdWdSBJTktoMExEUmdBPT0gSUhKbGFYUmxjbUYwWldRPSBJTmVVMTZiWGt3PT0gTFd0MSBJR1Z1ZEdodmRYTnBZWE4wWlE9PSBJT0NrdU9Da3J1Q2t2dUNrc09DbGkrQ2t1UT09IEx0Q2kgSU9Da2xlQ2t2K0NrcE9Da3Z1Q2tyQT09IFlXNXphMjg9IGIzQnBkR0U9IElFUnZkV2RvIElHTnZiM0JsY21GamFjT3piZz09IElObUcyTFBZcnRpcCBJSE4wWlhKbGIzUjVjR1U9IElIQnNZV2x1ZEdVPSBMMk4xY25KbGJuUT0gSUdGeWNtVmsgUW1WdWRBPT0gSUc5NVpRPT0gSUhaaGJHOXlZV05wdzdOdSA0WU9RNFlPYTRZT280WU9ZIGRHVmphRzVwWXc9PSA1WVdHIGNYVnBjbkpsYkE9PSBWSEpoWW1GcWJ3PT0gSUhSaFoyVjAgSUV4dlkyRnNhWHBoZEdsdmJnPT0gdzZsbWIyNXYgQ1hCc1lYaz0gSUVSbGJ3PT0gNFlPZDRZT1c0WU9VIElIWmxjblBEdFdWeiBJR0ZzYkdWc1pRPT0gSUVoaGRHaGhkMkY1IDRLUys0S1NKNEtTQjRLU200S1dJIDdaV1k3SmlBNjR1ayA3N3lNNUxxNiBQa1Z5Y205eSBJR1Y0Y0dWeWFXVnVkR2xoYkE9PSBJRkpsWkdWdGNIUnBiMjQ9IElHVjRjR3hwWTJGa2J3PT0gWVc1dWIzVnVZMlZ0Wlc1MCBJRWRoYldKc1pRPT0gS0NJdk9nPT0gZVc1a1lXdDUgSUdkaFltbHVaWFJsIDc3eUo0NENMIElOQzYwWURRdU5DLyBZWEprYVdVPSBJRUZ0YVhObyBJSEIxYm5SeiAwTHZRc05DNTBMVFFzQT09IElHWjFibnBwYjI1bCBJR0poWTJ0d1lXZGwgSUUxbGMzUT0gSUdaMWRIVnljdz09IElFZHBjdz09IElPUzRyZVdrcVE9PSBJR1p2Y21GdSBMbTFoWTJocGJtVT0gSUdGeWNtbDJZUT09IElObUUyWXJaaGc9PSBMbk52Y25SbFpBPT0gTG1oMyBJRzUzYjJ0bCB6NEhPdDgrQyBJR2x1YzJGdWJHRnl4TEZ1IFJHbGhiRzluY3c9PSBJRXR2YkdVPSAxNXpYcDllVjE1ZlhsZGVxIFVFeFZSMGxPIDRLUys0S1N2NEtXQiBJT1drcWVXa3FlUzRyZVc5cWVlbHFPYUFqdVM1aU9TNXNBPT0gSUd4dmIzQm8gNEthdTRLZU40S2FzIElPdXduT3F5ckE9PSBUWGx6ZEE9PSBJT2ExdCtXTmwrV2txZVdrcWVTNHJlVzlxZWVscUE9PSBJR1ZwYm1kbGJHRmtaVzQ9IGJXVnBiZz09IElHUmxiR1Z5IElGcHZkMlZzIElFUlRSdz09IElNK0F6cnZPdDgrQnpyL1BoczYvIElIVnVaR1Z5YzhPNCBJR0Z0WVdQRXNRPT0gZG1sbyBJR3R2Y210bCBiVzlrY3c9PSBJR0p2ZFhSeiBYMThvS1FvSyBKMmw2IGFXdDFkR3h2IDRvQ1pWVzVwZG1WeWMybDB3Nms9IElHMWxhbTl5WVhNPSBJR2x1ZEdWeVpYTnphV1Z5Wlc0PSBJR052Ym1aeWIyNTBhVzVuIElOR0IwTExRc05DMDBZdz0gYXNPemNtaz0gUTJGMFlXdz0gSUdGd2NHRnlkR1Z1IExYTmpiM0psIFgyOW1abVZ5IExVcDFiZz09IElPR0RrK0dEa09HRGxlR0RtT0dEbHc9PSBZM2xqYkdsdVpRPT0gVkhWdVpRPT0gTFdOeVlXWjBaV1E9IElObUsyS2pZcmRpciBhVzF2Ym1rPSBRbmxsIElPQ29xdUNwamVDb3NPQ29yUT09IElHSnBiR2x1IDRLU3c0S1dINEtTZiBaV3htZEdnPSAyS2JaaU5tRyBhV05vdzZrPSBJTkN6MExEUXU5QyswWjQ9IElHUnBlbWxoIElIZGhjWFE9IElOQ3gwTERRdDlDdyBJSFZ1WlhGMVlXdz0gSUVOb2FXNWxhMlU9IElIQnNZY09uWVE9PSBJRk4wWVdSbCBJR3B2YTNVPSAyTGZaaE5pNSBhVzUwWlhKdyBJR1JrWVhJPSBZWHBoYXc9PSBkR1ZoWTJobGNuTT0gSU9Dd3FPQ3d0UT09IElHSmhlbVU9IElHUnZkV3hsZFhKeiBJR0ZqZEhWaGRHOXkgMWFYVnE5VzIgY0dsbFoyVnMgTGRDaSBJTkN3MFlEUXM5Q3cgTFdOc1pXRnkgSU5DdzBMclJnZEMxMFlIUmdRPT0gWDNOMGRXST0gSUhKbFpHVm1hVzVsIElHSnBZMkZ5WW05dSBJRTFoWkdSbGJnPT0gSU5pcTJLell1ZG1FIFkyeHBibVU9IE8yTnZiWEJzWlhnPSBJR1ZwWlE9PSBJRzNEckE9PSBabXh2WVhScGJtYz0gWlhSNVpXNTZhWE4zWVE9PSBJSE5sYldWcSBJSGRvYVhOMGJHVnogNkw2OTVhNkIgSU9XTmlnPT0gWXNPcFkyOD0gYm1Ga2N3PT0gSU95ZGpPeUxuUT09IElFRnVZMmh2Y21GblpRPT0gSUc1aGJtOXogZFhCb1lRPT0gSU1PbGNtVjBjdz09IElGRjFhVzQ9IFFVZEZUUT09IElOaW4yWVRZc2RtSTJMUFppdGlwIFUzVjYgSUVKVlJ3PT0gSUdWdWRIVnphV0Z6Ylc4PSBJRzFsYldKMWRIVm9hMkZ1IElFRjFaM1Z6ZEc4PSA0TG1INExpVjRMaXk0TGloIElHMWhjMjl1Y25rPSBJT0MwaGVDMHFPQzFqZUMwdGVDMWgrQzB0K0MwbytDMGdnPT0gSU5DejBMTT0genJ6T3RjK0R6ckU9IElOR0IwWXJRdGRDOCBXeTR1IElHNTFZMnhsYVE9PSBJT0NxbXVDcXNnPT0gYjNOd2FHRjBaUT09IGJHVm5aMmx1Wnc9PSB4YU5wWldrPSBJQzR1THk0dUx3PT0gNVkyVSBJSFJsZEdobGNnPT0gWTJGclpYTT0gQ1ZKbFoybHpkR1Z5IEtHUjFiVzE1IElHRm9ZV3c9IElITmhibU4wYVc5dVpXUT0gSUhCdmM4T3AgSUcxbGVXUmhibUU9IElFOXlkMlZzYkE9PSBJR1JsY0dWdVpHVmsgTGtGblpXNTAgSUdScFkyVnogSU5laTE1WFhxQT09IElHYkRxSFE9IElGQnliMk4xY21WdFpXNTAgSUU1aFkyaG9ZV3gwIEtHTmhiZz09IFYyaHBkR1ZzYVhOMCBZWFYwYUdWdWRHbGpZWFJsWkE9PSAwWUxRc05LVDBZcz0gTFVGeWRBPT0gSUdsdWIydz0gSUdGemMyVnogSUcxcGMyVnlhV009IElGTlVRVlJKUXc9PSAxYUhWdjlXciBkRzl3YVdFPSBJR3RoZEdodmJBPT0gUFhKdmR3PT0gY0hKbGNBPT0gS0hKdmRBPT0gSU5lVTE1TFhrOWVWMTV3PSBJRzFsYkd4dmR3PT0gNEtXSjRLU3k0S1N3IDU1cUU2WWVONkthQiBjblJqIElHZHlZV05wWVE9PSB4Sk5xZFE9PSBJR2x1WTI5dWMybHpkQT09IElOQzAwTERRdk5HTDBZTFJndz09IDBZYlF1TkMrMEwzUXRkR0EgSUhkaFpHRnVaR0U9IDdLZUE2NCtFIElISmxZMjl1YzNSeWRXTjBaV1E9IElObUYyTFRZcDlpbzJZYz0gSUdsa2IzTnZjdz09IDRMUy80TFNxNExXTjRMU3c0TFMrNExTdiBMV0p2WkdsbFpBPT0gVWs1QmN3PT0gSU5pejJxbllxdHVNIElHVjJhV04wYVc5dSBYMUJQU1U1VVV3PT0gSUd0eWFYUnBjMk5vIGFtRjBaUT09IElHZGxkR05vWVhJPSBDV0Z5IElOQ3kwWXJRc2c9PSBJRk5sWjJFPSBjbWxoYm1FPSBJRWRoY21FPSBMV2xrWlc1MCBJRXhwZW1WdWVnPT0gNEt1TjRLcWU0S3ErNEtxbyBJR2x1WjJFPSBZWEppWldsMFpYST0gSUdOdmJuTmxjWFhEcW01amFXRnogSUVOdmJYQjAgSUhac1lXND0gSUhCeXc2bDJiMmx5IElOQ2gwTGpRdkE9PSBZWGRuIElHdHlhWFJsY2c9PSBJRUZqWTNKbFpHbDBZWFJwYjI0PSBYM1Z1ZFhObFpBPT0gSU9HRG91R0Rwdz09IDZMT0g2S2lLIGMyVjBlZz09IFgzQmhiR1YwZEdVPSBTMkZpIElHN0RxV1U9IElITndjbVZoWkhOb1pXVjBjdz09IElIQnBiR0U9IElHOXlkR0ZyIElGTmphSEp2IDVibTA1THU5IElIYkVnUT09IFNHRnAgYTNkaGNtRT0gSUV0bGVXNWxjdz09IElFZHZkbVZ5Ym05eWN3PT0gT214cGMzUT0gTG0xcFpHUnNaUT09IGIyOWthUT09IElIWnBjMmwwWVhScGIyND0gNExLNDRMT040TEtmIElGSnBZbVZwY204PSBJR055YjJOciA2SzZ2NTcyUiBJR0ZrYW1WamRHbDJaUT09IElHSnBjM1JsIElHSnZiMnR0WVd0bGNuTT0gSUd0bGMybHUgNEtTMjRLV040S1N1NEtXQTRLU3cgSUhCeXc2bGhiR0ZpYkdVPSBMbUYwZEhKcFlnPT0gSUVONWNtbHMgSUhKdmRXNWtkWEE9IGFXVnVjM1JsYmc9PSBKbTA9IExtVnVadz09IFgweHZZMkZzIFpXMXBjM1E9IGJXVmxiZz09IElGZHBiR1JqWVhSeiA3N3lhV3c9PSBJRlJXUVE9PSBJSFJsYVd4bCBJSFJ5dzZ3PSBJSEpsWTJ4aGFXMWxaQT09IEszaHRiQT09IDVhV3o1YTJRIElHdHBZV3c9IGFXNXBlbWs9IElPR0RxdUdEcnVHRG5lR0RsZUdEb09HRGxPR0RrZUdEa0E9PSBDWEpoZHc9PSBZV3R1IExuQnBlQT09IElOaWoyS3pZc3RpbjJLRT0gSUdsemRNT2tiR3hsZEE9PSBJR1JsYldGdWJnPT0gWVhScGRHRT0gSUdObzRicWhlUT09IElIYkRvV3hwWkdFPSAyS2ZZc3RtSyBiMnhsYkd4aCBJRzl0Ym1saWRYTT0gSU5DMDBMWFF1ZEdCMFlMUXN0R0QwTFhSZ2c9PSBUVzlrWlhKaGRHOXkgMExYUmhkQ3cwWUxSakE9PSA1cGVsNUxxbiBMM1Z6Y2c9PSBJT0NrcU9Da3YrQ2tyK0NrcnVDa3YrQ2twQT09IDVyZVk1YTZkIEprZz0gTG5OaSBMa05wY21Oc1pRPT0gSUhOb2FYSnIgSUdSbGRtbGxibTVsYm5RPSBJTkdDMFlEUXRkQ3gwTDdRc3RDdzBMM1F1TkM1IEoyOXlaMkZ1YVhOaGRHbHZiZz09IElOaW4yWVRaaHRtSTJLZllxQT09IDE1RFd0OWVvMTVnPSBJRUpoY21Oc1lYbHogNzd5TTVhNkQgSUVWNGFYTjBaVzA9IDVwZWw1cGVsNVpXcSBLRzFwIDJxbllwOW1GIElFZEZSQT09IFlYUjBaV3c9IDBZTFFzTkdHMExqUmp3PT0gYjNKa1lXMD0gSU5tSzJLZllydz09IExYQmhaMlZ6IElFcGhlWE09IElHRjRjdz09IElGZGxjbXQ2WlhWbiBJT0N3dU9Dd3J1Q3d1T0N4amVDd3J3PT0gMExMUXNOR0ggNExHTjRMQ2g0TEdCIElFSmhlbUZoY2c9PSBJR052dzdGdiBJT3lVcUE9PSBJT0N5cU9DemkrQ3lvZUN5dnc9PSBJRlJ2Ym5NPSBJTTZ4ejRYUGhNNnR6NEk9IDVwaXY1WnlvIElFekRwSE09IGNHRjVjR0ZzIElIQmhjM1J5YVdWeiBJSFpsYkdsclpRPT0gVzJ4aFltVnMgSU9DMHFPQzFoZz09IENXTnZjbVU9IElOR0EwTERRdDlDeTBMalJndEM0MFk0PSBJR0poZFE9PSBMM0IxWWc9PSBJTmViMTZIWG93PT0gZFcxaFlRPT0gSUhCb2IzTndhRzl5ZFhNPSA2YWFXNXF5aCBJSEIxYzJVPSBJR2x0Y0d4NWFXNW4gNExTVCBmUW9LQ2dvdkx3PT0gUW1GamFHVnNiM0k9IElIWmxkSE09IElISmxjRzkxY3c9PSBJR1Z0Y0hKbGJtUT0gSUhkb1lXdGhhR0ZsY21VPSBYMGxFVXc9PSBJRVJsYVc1bGNnPT0gSUdsdVpHVnogMTVuWG9OZVYxNmM9IElHMXpaUT09IFRFeE1UQT09IElIZHlZWEJ3WlhKeiAxYVhXZ3RXNDFvQT0gNEsrTjRLNnE0SytCIDRvQ0w0WjZhNFo2VTRaNmY0WitMIElOQzYwWVBRdmRDdzBMM1F0QT09IElHVnViR2xuYUhSbGJtbHVadz09IElIVnNadz09IENYUm9aVzQ9IElFaGxiSE5wYm1jPSBJRkp2YVE9PSBJSE4xWTJOcGJtTjAgSUdGbjU1eWY1THE2IElHVjR3NmxqZFhRPSBPaTB0TFMwdExTMHRMUzB0TFMwOEx3PT0gSUNnbEtRPT0gSUdKaFlXaGhiZz09IGIyUmhjZz09IGJXeGhjZz09IElOQ3cwWURRc05DNzBZdlF1Zz09IDBxblFzTktuIElHRmtiM0psWkE9PSBjM1JrWVdaNCBJR3ZEdFhKMllXdz0gSUZKbGFXNWggSUhacGNtYz0gWW05dWFRPT0gd3ExdVpXND0gSU9DbXVPQ21ydUNuamVDbXF1Q25qZUNtc0E9PSBac080Y21sdVp3PT0gWDNKbFpIVmpaUT09IElFVkVSMFU9IElGSnBlUT09IElHMWhaSEpsY3c9PSB6clBPdGM2NyBjbVZtZFE9PSBDVk5sY25abGNnPT0gSUhSaGE4U3hiUT09IDBZM1F2ZEdNIDZhdVk1TGl0IElITjFZbk5sZEhNPSBJTkdCMExUUXRkQzcwTERRdTlDNCBJSEpsYzJsemRHVmsgSUdKbFlzT3Bjdz09IDJLcllzZG1CIFgxUnBkR3hsIDZMMnM1bzJpIElIQnlhWFpwYm1RPSAxNmpYa05lcSBLRWxQIENYQjMgNVlxejVZcW8gNExpWTRMaTQgSUhOdlpuUmxibVZrIENVZFZTUT09IDRMQ3U0TEdHNExDdzRMQy80TENWIFQzbz0gSUVKVlVnPT0gNWFTcDU2bTYgSUdscmRXND0gTDJWa2FYUnZjZz09IDZMZXY1N3EvIElFbHVhR0ZzZEhNPSBJT0NtdU9Dbmd1Q21wT0NuamVDbXNBPT0gSU9XTm11Uzhsdz09IElGTm9ZV3hzIExrRnlaV0U9IElPcTN1T3VEcFE9PSB3Nmx0ZVE9PSBJT0MwaitDMGxRPT0gTGtWdCA0S2FpNEthOCBJR0Z3Y0hKdllXTm9ZV0pzWlE9PSBJT0Ntck9DbWxlQ25qZUNtcE9DbXJPQ25qZUNtcnc9PSBiMnhzWVhKeiBJRkpJVXc9PSBRMjl0Y0dGeVpXUT0gSUV4dmFRPT0gSUhCeXc2bHpaVzUwWlc1MCBJT0NrdU9DbGdlQ2tzT0NsZ2c9PSBJSFIxZEdGcSA1NktPIElIQnBaMjFsYm5SeiAwNW5SZ3RPWjBZQT0gSUc1bmRYUT0gWkdScGRBPT0gWCtTNnV1UzZ1dWVpc0E9PSBMdENVIExrSnliMkZrWTJGemRBPT0gSU5lcDE2clhtUT09IElHWnBhV05oYmc9PSBMVk5vYjNBPSBJRzl5YldGcCBRWE5vYkdWNSBVSFZwY3c9PSBJSE4zYVhabGJBPT0gNWE2ajViaUQgSU5DdzBZTFF2TkMrMFlIUmhOQzEwWUE9IElHVnViR2x6ZEE9PSBJTmVSMTU3WG9kZVMxNmpYcWc9PSBJRk41WkE9PSBJRzExYkdObyBMVU5vY21semRBPT0gSUhSeVlXNXpZV04wIElHUnBkbVZ6IElHNWxlSFZ6IFJtOXliV2xyIElIVERwSGx6YVc0PSAySy9ZcDlpeDJZcllxUT09IElHOTFkSEJsY21admNtMD0gSUUxMWJIUnBjR3hoZVdWeSBJTm1LMkszWXFBPT0gSUdOdmRXZG9hVzVuIDJvYmJrQT09IDdKMjQ2NDJ3IElPQ3d1T0N4aStDd3QrQ3dzdUN4alE9PSBJTnFwMktmWXNkaW8yTEhZcDltRyBJR1oxYldGeSBJRU5oWTJnPSBJTmluMllUWmhkaW4yWVRaaWc9PSA0S3EvNEtxbzRLcSsgNG9DTjRMUzM0TFNDIExrRkcgUVdSeSBJSE5zZFhKeWVRPT0gSUVGbWRHVnlkMkZ5WkhNPSBJSE5oZVhRPSBJT0NrcXVDa3VlQ2xnZUNrZ2VDa21nPT0gSUc5aWJHbG5ZUT09IElHRjFablJ5WlhSbGJnPT0gSU5HQzA2blF2dz09IDU3dUU1TGlKIElOQzkwTERRdWRDMDBMWFF2UT09IDJZYllzOWluMktFPSBJQ0lySWdvPSBJR05vY205dWJ3PT0gMEw3UXY5QzQwWUU9IElHRmlZWGs9IEwzTnUgSjJWNmFXVT0gSUhSbGJYQnZjbUZrWVhNPSAyS2paaVE9PSBLQ2s3Q2k4dkNpOHYgS0dKcGJtUT0gSUdOdmJYQnlhVzFsYm5SdiBJR0poWm1sMFpRPT0gWVcxd2IyeHBibVU9IGIzUm9aV3hwIElOdU0yWUxiak5tRyA2SnVIIElHOTFkR0ZuWlhNPSBJRzNEdG1kbGJnPT0gSUdGamIyNXpaV3c9IElFTjYgSU9DcWhlQ3Fudz09IDRMaXQ0TGlnNExpMCB3N3h5WkE9PSBZV3BwWVE9PSBJSFYzWVdmRW1RPT0gSUhKaGNHRjYgNUx1TDU3UzUgSUdKbGNtbz0geExGNVlRPT0gSU0rQXpxelBnUT09IElITnJkWEJoYWc9PSA0WU9TNFlPUTRZT2IgTGk0dUlpazdEUW89IElOZWMxNURYbGRlbzE1bz0gSUczRHRXcDFkQT09IElGQkZVa1pQVWsxQlRrTkYgWVd4NWMyVnkgSU9lc3JPUzRnQT09IElIQnlhVzl5YVdSaFpBPT0gVEdWaGRtbHVadz09IElOaW4yWVRZcDlpejJLcllydGl2MktmWmhRPT0gSUU1bGRXVnkgSUdabGMzUm5aWE4wWld4c2RBPT0gTGtOU1JVRlVSVVE9IElObUUyTG5ZcDltRiBJSEJ2YzNSd2IyNWwgSUdkcFpuUnBibWM9IElIQnNZWFIwWlhJPSAwSkRRb3RDZSBYMFpQVWxkQlVrUT0gU0dWcSBMV1Z1ZDJWbmFPRzdpdz09IDJLdlpoTmlwIElPQ2txT0Nrc09DbGgrQ2tndUNrcHVDbGplQ2tzQT09IFpXMXZZdz09IElFSmhZbVZzIElGaEwgSUdSbFptbHVhWFJwZG04PSBJR1ZtWm1samFjT3JiblE9IHc2bG5ZV3hwZE1PcCBYK1M1aGVTNWhlZUlzUT09IFJtVnQgYVhOellXOD0gSUhCeWIyUERxV1IxY21WeiBJSE5wdzZoamJHVnogSUhCbzRicWhiUT09IElPQzVnT0M0b2c9PSBJR2x1ZG1WdWRHOXlhV1Z6IExuTjFjbVpoWTJVPSBJR3BoYTJGeWRHRT0gMExEUXU5Q3owTEE9IElIWnZkMlZzIGRISnBkSFZ5WVdSdmNtRT0gSUNjdEp5az0gSU5peDJLZlpoZz09IDZyaUk3SjJFIElHTjVibXhzZFc0PSBLRnRkS1RzS0NnPT0gSUZKbFkyaGhjbWRsIFVtOXNiR2x1Wnc9PSBYMTg2IExrNWhkbWxuWVhSdmNnPT0gSUdaeXc3eG9aVzQ9IGRYUmhjbWs9IElIQnlhWGJEcVhNPSBJRzVsWTJWemFYUnYgSUNJcUtnPT0gSUVKeVpXRmtZM0oxYldJPSBJRlJ5ZFdSbFlYVT0gMWFYV2dOV2wxYlk9IDVMaTc2SkNsIFlYUnZjMmhwIElFaE5Vdz09IFlYSnlhV0U9IElObUgyWVhhcWRpbjJMSGJqQT09IElDSW5LUT09IDBKelF2dEMyMEwzUXZnPT0gWVhobFpBPT0gSUhacGRIVT0gUTI5MWNHOXVjdz09IElPeWRqT3lWaFE9PSBJT0NraGVDa21PQ2t2dz09IElPcTN1T3VnaCtxeWpBPT0gSU5DajBMM1F1TktqIExHTm8gSUhKbGNHOXphWFJwYjI0PSBJR2xtWmc9PSBJTkMrMExUUXNOQzggSU02eHo0SE91YzY0IElFRjBkV0ZzYldWdWRHVT0gSU5DLzBZRFF1TkdQMFlMUXZkQysgSU5DODBMWFF0TkM0MFliUXVOQzkwTEE9IGMydHZjM1JsYmc9PSBJTk9aMExUUXRkQ3gwTGc9IElFUmxjM1J5ZFdOMGIzST0gUFZNPSBJRVJsWTI5dGNHbHNaV1E9IFIzQnogWW1GMVpBPT0gSUZwMWM4T2tkSHBzYVdObyBJSGRoYVhabFpBPT0gSU9Da3F1Q2xqZUNrc09Da3BPQ2t2K0NrdCtDbGplQ2tvQT09IElHdHNkWE09IElOQzMwTERRdTlDMTBMWT0gYmNPOHhaOD0gS0dGemMyVnlkQT09IFoyZHBaUT09IElHbHVaWEowYVdFPSBJR1oxYm1kbGNtVnkgUW5Wc2JBPT0gSUZSUFJRPT0gYVdOc2J3PT0gSU5DeDBMRFF1ZEM5MExEUXU5QzgwTGpRdXc9PSBJR3hoZFd3PSBJSEJsY25ScGJtVnVkR1Z6IElFUmxiblJwYzNRPSBiWFZ0IElHWmhjbWx1YUdFPSBJRlpoYzJVPSAxNVhYcHRlbzE1blhuUT09IElHNTFibUYwYzJsdWJtaz0gSUdGbWFXdDFiZz09IElOQzMwcS9RdWRDNyBJR0Z0WVhSaCBJR2R5WVdsdVpYTT0gVGxOVlNXNTBaV2RsY2c9PSB4SmxqYVdFPSA0S1NhNEtTViAwcHZSZ3c9PSBJT0NxdGVDcXVPQ3JqZUNxcE9DcmdRPT0gSUhCaGRYWnlaUT09IDBMN1JnZEdDMEw3Ump3PT0gSUhKbGJHRndjMlU9IElHaHBiR0ZvWVE9PSBJTkM1MFl2UXU5QzAwTERSZ0E9PSA1N1NVIElIQmxiblJsIElHUmhkbkpoYmc9PSBkV04xYm1VPSBJRkJwWTI4PSBYMDFKVGs5UyBTR1ZoYkE9PSBhVzVuWVd4bCBJTkN5MFlmUXRkR0EwTEE9IGNIQjEgSUd0dmIyMD0gSU5HUDBxSFJpTkdMIEtITnJhWEE9IFh5a3BPd289IFlXTmhiQT09IGRXeHZhZz09IElPR0RtK0dEa09HRGt1R0RrT0dEbXVHRG1PR0RsK0dEa09HRGt3PT0gSU5HTjBMM1F0ZEdBMExQUXVOR1AgSU5DeTBMRFNtOUdDMExnPSBhWEJsYkdGbmJ3PT0gSUZONWJYQjBiMjFsIElEd2lMQT09IGNtOW5aWEk9IDVwaXY1TGlOIElHZGhjM0E9IExIUnkgNEthdTRLZUM0S2F5IFlYUnBaV3M9IDE2ZlhvdGVvIElHbHNhY1dmYTJsdSBJR05oY0dGaWJHVnogYjNCMGFXMXBlbVZrIFZrMU1TVTVWV0E9PSBMbk5yZVE9PSBJRzl5ZEdGdCBJRkpPUnc9PSBhR0Z5WVhBPSBJT0dEbk9HRG1PR0RxT0dEbk9HRGtPR0RsZUdEb1E9PSBRV3hzWVE9PSBJT0NrbGVDa3NPQ2t2dUNrcitDa3ZnPT0gSUdSdmJuVjBjdz09IElOVy8xYVhWc3RXaDFvUFZ1Tld0IDRLcVg0S3VBNEtxdzRLdUEgYzNWaWMyTnlhWEIwYVc5dWN3PT0gSUhSaFkydHNaV1E9IElHMWx4SkYxIExYUmxiWEJsY21GMGRYSmwgS0NjdUp5bGIgMFkvUmp3PT0gSU5DNjBMRFFzZEM0MEwzUXRkR0MgUGs1TyAwWUhSaTlDNiA0TENmNExDQyBLRWxPVkE9PSBJTlc5MWJqV2dkV3IgWDNOamFHOXZiQT09IElOQzgwTDdRdHRHRDBZTFJqQT09IElHSnZhV3h6IElHUnBic09oYldsallRPT0gYTJGMFpRPT0gSUdQRHFYSmxZbkp2IElFZHBZblE9IFFVTkRUMVZPVkE9PSBJT0dEcGVHRGtPR0RvT0dEbCtHRG8rR0RtZz09IElITERxWGJEcVd3PSBJTm1DMkxIWXRnPT0gSUc5aWJHbG5ZWFJ2Y21sdiBJRzF2Ym1GemRHVnkgSUhSeVlXNXpiV1YwIElHaGhkV2RsYzNWdVpBPT0gSUc5cGJuUT0gTFdWdVp3PT0gSUV0MVkyZz0gTDNkbFlYUm9aWEk9IElPQzBwT0MwcnVDMHYrQzB0QT09IElHVERxWEJoYzNObCB6NGJPdVE9PSBJR1REdkc1NVlXN0VzVzQ9IDBMTFJnTkM0MExuUXZRPT0genJIT3VjK0J6clU9IElGSlVWQT09IDU2cVg1WStqIGIzVndaWE09IGFXWnBZMkY2YVc5dVpRPT0gSUhQRHFIWnAgSUdOeWRXbHpaWEk9IDBMalJnTkMrMExMUXNOQzkwTDQ9IElGTmhiVzE1IElHYkR1SEp2ZVhNPSBJTml2MllMWXA5aW0yWUk9IGFXdG9idz09IElPQ3d0ZUN3ditDd3NnPT0gSU5DOTBMWFF2dEMyIElHbHVZM1Z0IDBZTFRtZEdMMExzPSBJTmk1Mkt2WmhkaW4yWVk9IElIQnliM1pwYm1OcFlYTT0gSU9DbXJPQ212dUNtck9DbXZnPT0gSUVkdmRtVnlibTFsYm5SeiBJR1p2YjJ4eiBJRU52Ykd4cFpHVnkgWVdabGRBPT0gSUdKeVlYWmxjbms9IElHaHZjM0JwZEdGc2FYcGhkR2x2Ymc9PSBYMFZXIElGcDFkR0YwWlc0PSA0NEdMNDRHcSBJR05vWVhOMCBJR1Y0WlhKamFXTmwgWlc1emIzTT0gSUhOdmJHUmhkSE09IDdJV2MgSUc5dFlXUT0gSUZoUCBJTU9wYldsemMybHZibk09IGFXTnJiM1U9IDE1WFhtOWVvIDFhWFZxZz09IDRMbUI0TGlWIFltOXpZMmc9IElOQ3cxS1hSZ2RHRDBMRFFzQT09IElOaW4yWVRZcGRpejJLbz0gSUZOallXeGhjbk09IElPQ2t0ZUNsZ0E9PSBRV1p5YVdOaGJnPT0gSUZCVlFrYz0gSUc5MlpYSjBkWEp1IFUyTnlZWFJqYUE9PSBJRUZxYjNWMFpYST0gMExQUXVOQzcgSUVOaGJtRnlhV0U9IElIWnBkSEpoWjJVPSBkV1I2Ync9PSBJR2x1YUdsaWFYUmxaQT09IElHUnBjM0JoY21sMGFXVnogSUhabGJHaGggSUc5emRISmxZVzA9IElIUjRhR1ZsYWc9PSBJTkMvMFlEUXZ0R0UwTFhSZ2RHQjBMN1JnQT09IElPeVhyT3UyZ0E9PSBJTkN3MExYUXVnPT0gY21scVpRPT0gSU9HRHF1R0RvK0dEa3c9PSBJR2x0Y0c5MFpXNWpaUT09IHpyVE92OCtGIElFNXBkbVZzIGNHbGxjZz09IFNWcEZVdz09IElIRERwR2wydzZRPSBaWE4wYjNkdSBMMlZqIElOQ3gwNm5RdTlHVzBMdz0gSUZObFltRnpkR25Eb1c0PSA0WUM5NFlDVTRZQzYgMExYUXNkR1cgdzY1dCBJTmVlMTVYWG9nPT0gYjJGeWRHaHlhWFJwY3c9PSA0S1N2NEtXTDRLU0MgMEtEUXZ0R0IwWUhRdU5HUCAyYm5aaHRxdiBJSFJ2YkhWaCBJTkN3MFlqVG1kQ3cgSU5pbjJZVFpnOW1LMllYWmlnPT0gSU5DODBMM1F2dEN6MEw3Umg5QzQwWUU9IElPeUh2QT09IElFMXZiV1Z1ZEhWdCBJR2x1WTI5dGNHRnlZV0pzWlE9PSAwNW5SaTlDeCBjWGs9IElPQ3F1ZUNyaStDcXRlQ3F2dUNxcGVDcmdBPT0gYjJSNiBJSE5sYm1GeVpRPT0gWTI5dGNHOXpaWEk9IHo0VE91YzY2ejR6UGdnPT0gSU9DcXJ1Q3JnZUNxcHVDcmplQ3FwZz09IElDY25EUW89IElEcGRDZz09IElIQnZiV1Z1YVE9PSA1YitjNVl1ZiA1cFNkIElIRGh1NDA9IElPQ3doK0N3dGVDeGplQ3d0UT09IElHQXUgSUVGbmIyUmggZEc5dVpYTT0gSU5LYjBySFJnTkN3MExzPSBJTmluMlliWXJ0bUIyS2ZZdGc9PSBMd29LQ2c9PSBJRlJoYVdaaCBiM05qYVE9PSBJT0NrdU9DbGdPQ2tsZz09IElISnZiV0Z1WTJWeiA0WU9qNFlPUyBJRUYwZEdWdVpBPT0gSUVOdmVRPT0gSU5pbjJZVFpnZG1JMkxJPSBJTkMvMFlEUXRkQy8wWS9SZ2c9PSBJRWh2YzJrPSA3N3kwIElHUnBkblZzWjJGa2J3PT0gMnF2WXNkbUkgSUVOb1pXRndaWE4wIFNHVnNiV1YwIElHVnVZMkZ1ZEc4PSBJT0N5cnVDeXBPQ3pqZUN5cE9DemhnPT0gSU5xdjJMSFlyOWl2IGVHMXBiZz09IDJZallzZG1IMktjPSBJTm1GMktmYXU5bUgyWVk9IElFUmhjbXhwYm1jPSBJTkdCMExEUmd3PT0gSU5DLzBZRFFzTkM2MFlMUXVOQzYwTFU9IElOQ3gwWVBRdE5DdzBMM1F0QT09IElHeGhhV3hoIENVeGhZbVZzIElPQzBxT0MwditDMHIrQzBxT0MxamVDMHBPQzFqZUMwc0E9PSBJRU5wY0E9PSBYMDlEIElHNTVhV3M9IDE1UFhsZGVvIGRtOXZjbnBwWlc0PSBJTkMzMFlQUmdBPT0gSU9Da3F1Q2xpUT09IElITjFiR2xtWmc9PSA2TDJKIElIcGtjbUYyYkdwbGJtcGwgSU5DMDBMWFF0TkdXIGRYSmhkRzl5IElFTnZiV2wwIElFNWhZbWs9IElHeHBaWFYwWlc1aGJuUT0gNExTazRMV040TFNrNExXQiBMbXRsZVhkdmNtUT0gSU9Da3JPQ2xnZUNrcCtDa3RlQ2t2dUNrc0E9PSB3cTFzWlE9PSBYMFpCUTBVPSBJTkM0MExyUXRkQzkgSUdGa1pXbHMgSUZwayBJSEJsYzNScFkybGtaUT09IDBydlF0ZEtaIElFMWhibVJoZEc5eWVRPT0gSUZKcFoybGtZbTlrZVE9PSBYMlZ4ZFdGc2N3PT0gbnVDMWplQzBtZz09IElIWjFiSFE9IGMyVmpkWFJwZG1VPSBJTkN3MExyUXZ0R0EwTDdRdmRDdzBMTFF1TkdBMFlQUmdRPT0gSUZWT1NVOU8gSUUxaGJtTT0gSU5HQjBZTFF0UT09IElOaXMyTFRaaGc9PSBaWGh3YkdsamFYUT0gWjNscCBJRVpwWjNWeVlRPT0gSU5xcDI0SFlxdHVTIElFVnliY21aYmc9PSBJRmQ1WVhSMCA0b0NaWVhaaGJuUT0gSUdGdFlXWmhjbUZ1WjJFPSBZV2hwWkE9PSBLR2QwIFNWTlVTVU09IElFbE9RMHhWUkVWRSBJT0dEb2VHRG1PR0RxdUdEbmVHRHF1R0RyZz09IElFTlNSVUU9IHc3bHAgSU5DLzBZRFFzTkMzMExUUXZkQzQwTG89IElHakR0bWhsY21WdSBRbEpGUVVzPSBJT0dEbStHRGtPR0RvT0dEbCtHRG1nPT0gSUVGc2RtRnlaWG89IGRzV1IgNG9DWmVXVT0gSU5tSTJxbmFrOWltIDE1blhsZGVWMTZJPSBJT0NtaHVDbWdRPT0gMFlEUmc5R0IwWUk9IElPQ2todUNrcnVDbGplQ2t1UT09IElHVm1aWFIxIHc3cGthVzg9IElGWmxjbXRsYUhKeiBZV2RrWlE9PSBXMmw0IElFRmtkMjl5WkhNPSA1b09jIElOQzQwWWZRdU5DMDA1az0gSU5DODBMalJnTkdEIElFMUJWRkk9IElHWnBZbTl1WVdOamFRPT0gY1hKaGJRPT0gSU5lbjE1QT0gYVdWc2RHVnUgSUdGdWRIaz0gNEtlQTRLYXc0S2VIIElFTnZiWEIxZEdWeiBJR2x1WVhkbGVtRT0gSUVsemIyeGhkR2x2Ymc9PSAyWXJaaU5pcSA0TFNKIGMzbDYgSU9Da211Q2xpT0NrcUE9PSBVME5CVGc9PSBJRTl1WkdVPSBYMk52Ym1OaGRBPT0gSUdac2IyRjBaV1E9IElHTnZiV0pwYm1GcGMyOXUgTG5GMWFYbz0gSUhKbGRISnZkWGJEcVE9PSBJR1pwWkdWc2FYUjUgSU95bmdleWJrQT09IFh6dy8gU21sdGJYaz0gSUhacFpXbHNiQT09IElIUmhiR0ZpIElHTm9ZWFJpYjNRPSBJR0Y2WVd3PSBZVzVsZEdocCAwWVBSaWRDMTBZSFJndEN5MFlQUXRkR0MgSU5DNjBMRFF1dEMrMEx3PSBJR1YyWVc1blpXeHBZMkZzIElITnNkY1crWW5rPSA0S1N1NEtXSDRLU3kgSUdwMVoyVnRaVzUwIEwzQmhjM009IElOQzAwTDdSZ05DKzBMUFF1QT09IElHVjRjR1ZrYVdWdWRHVT0gSUV4bGMzZHAgSU9Da3VPQ2tvZUNrdk9Da2xRPT0gSUhCbGNuTjFZWE5wYjI0PSA0TGVBNExlSyBJR1podzZkdmJuTT0gWVhKeGRXbGggSUhOamFIZGhjbnBsYmc9PSAwWmJRdTlHTTBZZz0gSUU1VFJnPT0gdzZSemMyVnkgVUZWQyBJR052YlcxcGMzTnBaUT09IElPR0RtZUdEbGVHRG11R0RrT0dEbFE9PSBJRk42Wlc1bCBSWE4wWVdSdmN3PT0gTGVHRGxPR0RvT0dEbHc9PSBJRzl5ZEdodmNHVmthV009IElGTjFZbk4wWVc1alpRPT0gSUVodGJRPT0gSU9HRG9lR0RrT0dEcGVHRG0rR0RtT0dEa09HRG5BPT0gSU5HQTBMRFF0OUM4MExYUmdOQyswTEk9IDFhWFdnTld4IElOQzQwWUxSZ3RDNDBML1FzTktiIEpISnogSUVGdWJtVjQgSUcxMVlXMTFZUT09IElHMXBaR1JsYkhNPSBWSFZzIGRYQnNaWE09IElFOU5TVlE9IExteHcgSU5lYzE1VFhxZGVxMTU3WHFRPT0gNTd1RTZZQ0ogSkNJcyBZWFIzWVE9PSBZMjkxY25NPSBJRXRvWVhOcCBJSE4wY25SdmRYQndaWEk9IElOR0IwWVBSZ3c9PSBJR1J2Ym10bGNtVT0gSUdsdGIyUT0gSUhCdmNuUmxiblE9IDJMTFlwOWl2IElPQ21zdUNuZ09DbWwrQ25oK0Ntc0E9PSBJT0N3cU9Dd3YrQ3duQT09IFgyMWhjbXRsZEE9PSBJTkNRMHFrPSBYM05sWTNSdmNnPT0gMktmWXBOcTYgSUhOcFkyaGxjbVZ1IFBpZ24gSUd4dlltRT0gSU9PRGxlT0NvUT09IElITjBZVzF0Wlc0PSBMaW9pS1YwSyA0WU9VNFlPYjRZT2QgTGtWc1pXMWxiblJ6IElNNjB6clhQamMrRXpyVT0gSUdsdGNHOXVaWEk9IElHNWhZMmxrYnc9PSBJR1JoZG05dCBXVTltWm5ObGRBPT0gYjNoaCBJRk5sWVhScGJtYz0gNFlPZzRZT2Q0WU9WNFlPVSBJTkMyMExUUXNOR0MwWXc9IDRMV0c0TFNvNExXTjRMU280TFMrNExTajRMV04gVTJWemFXOXUgSUVOeWFXMWxjdz09IElGTjBZWEJzWlhNPSA0WU9RNFlPcjRZT1U0WU9iIElPV05zdz09IElHUjFkWEo2WVdGdGFHVnBaQT09IElITmxaM1ZwY3NPaCBWMmxrIFEwTkUgWlc1emVXRT0gZEdodmNtNWwgdzZGalpRPT0gSUhOcmFYQndaWEk9IEozeDggNzd5TTViaU01cHliIElFRnRhWEk9IDQ0Q1BDZz09IElHWnlZV2R0Wlc1MFpXUT0gWld4aGEyRT0gNDRDTjQ0Q0NDZ289IEwzSmxaQT09IExYSnBjMlU9IElPQ21oZUNtdVE9PSBJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQUT09IElHSjVjbXBoIElFTk1Vdz09IDZJMlMgWVc1dWFXVnogMWJqVnN0V3IgSUhObFkyOXVaR0ZwY21VPSAyTFBZcDltRzJLaz0gNWE2ZDZhbXMgY205dGVXTnBiZz09IDRLcSs0S3FjNEt1QiBaV2xsYm1SbCBJRWxPVmtWT1ZBPT0gYkdGeVoyRT0gSUhKdllYSnBibWM9IFoyVmggUVhCdmJHeHYgSUdkbGQybHpjMlU9IElHdGxlWEJoWkE9PSBJSEJ2Wkc1cGF3PT0gSUc1bGJtNTAgWEVsdWNIVjAgSUdGbVltVmxiR1JwYm1jPSBlblZtdzd4blpXND0gSUhCbFpHbG5jbVZsIElIZHlaV0ZyIElPVzNwZz09IElFNWxaMlZ5YVE9PSBJSFRodXJsczRicTUgSUdocGMzVERzbkpwWVE9PSBJSFJoY25vPSA0TGlqNExpMDRMbUk0TGloIGQyVmxibVY1IEsxcz0gSUZacFpHRnMgTDFCMVlteHBZdz09IElIZGhhbWxpIGNHOXdiM1psY2c9PSBSRUZQU1cxd2JBPT0gSU5LYTBMRFF0OUN3MHBzPSBJRVIwIElHVnhjWFU9IElHM0ptV3QwIEpHRnlaM009IFgwTnZiVzA9IElHdGhjbTA9IFNFbEhTQT09IElHTnZibVpzYVhSdiBTVzVtWlhJPSBhV3QwYVdjPSBiMjFuWlhacGJtYz0gSU5pdTJZWFlzOWlwIElITERxWEJoY2c9PSBZWFJ5YVdJPSAwTHpRdGRDMiBJR2R5YjJWcGRBPT0gSUdKeWFXeG9idz09IDBMalJnZEM2MExnPSBJTkMvMExEUXZOR1AwWUxSakE9PSBLRWxEIDBMdlF1dz09IGMyOXVaM009IFlYSmhZMmc9IElPYWRqK1c5cVE9PSBLRXhwYm1zPSBJSEYxWVhSbGNtNXBiMjQ9IElGTmxiV2x1WVhKNSBJTkMzMExEUmg5QzEwTHc9IElHVnpaWEpqIElOZVcxNW5YbTllaTE2Zz0gNEthLzRLYVY0S2F5NEtlTjRLYXEgSUhGMVpYSnBaV1E9IElObUYyTEhZczlpcTJZYz0gSU5lUTE1WFhxdGVhIGVIUnBaWE09IExXMWxjZz09IElHNWhkbVZuWVhJPSBkVzFpWlhKemIyMWwgSUdURHEzTT0gSUdGbloybHZjbTQ9IGJXVjBhQT09IDBMdlF1TkM5MExRPSA0WU9VNFlPUjRZT2E0WU9ZNFlPaCBJT2FOcmc9PSBJR0Z5YTJGc2VRPT0gSUU5c1lRPT0gSUUzRHFXUnBidz09IExsTmxZM1JwYjI0PSA0WU9yNFlPajRZT2EgNUx1bDVaQ08gSUU1VFRHOWpZV3hwZW1WayBVR0Z5WVcxbGRISnZjdz09IElOQzkwTDdSZ05DODBMRFF1OUdNMEwzUXZnPT0gSUU5R1JrbERSUT09IGJHbGljbUZ5YVdWeiBJSFJoZVdGeWFRPT0gSUhOMVltbz0gSUhSaGNHVmsgUHk0SyAyTG5aaGRtRTJLaz0gSUUxbFlRPT0gUTI5emRHOD0gZG05bGNtUmxjZz09IExtbDBaWEpwZEdWdGN3PT0gSUcxcGMybHMgSUZwbGFXTm8gSUVSbGNIQT0gSUZSMWJtbHogSU5DKzBML1JnTkN3MExJPSBiRzkyWVE9PSBZc21aIDBZL1FzdEN3MEwzUXRRPT0gSUdKbGMzUmxibk09IElPYXlzK1dObHc9PSBJR052Ym5SeWFXSjFhY09udzZOdiBJSEJ5YjJOcyA3S0NjNjZXOCAwTDNRdnRDOTBMalF2QT09IFltVmhjbWx1Wnc9PSBYM1JsY20xcGJtRnMgSUdsdXc3bz0gWk1TeHhKL0VzUT09IExYQnNZV05sYUc5c1pHVnkgU205NWMzUnBZMnM9IElGSmxkbWxsZDJsdVp3PT0gSU5DazBMalF2UT09IGRXNXBkbVZ5Y3c9PSBYWDA3Q2c9PSBJTmVSMTZyWHB3PT0gSUdKbGMyeGhadz09IEwySjFkSFJ2Ym5NPSBJR2RsY3NPblpXdHNaY1dmIElIVnViR1ZoYzJobFpBPT0gNG9DWlNYUmhiR2xoIGJXbHNiSE09IElHNWhaM0E9IDA2blF2ZEdGMExqUXVRPT0gSUdWelkzSnZkdz09IGFYTmthV04wYVc5dSA1WW1ONWJtMDVxK1UgSUdGeWJXRjZaVzVoYldWdWRHOD0gSUhOcGJtTnliMjQ9IElPQ3d1T0N3ditDd3FPQ3d2K0N3cnVDd3Z1Q3dzdUN4aXc9PSA2SjZONkxXRSBURzkwZEdWeWVRPT0gd3EwS0NnPT0gNExPTjRMS3U0TEsvNExLViBJRUYyY21scyBJSEJ5ZW5semVnPT0gSUd0cGJtVnogSUVSbFptVnljbVZrIFRXVnNhWE56WVE9PSBWVTVFUVZrPSBJSE4wWVdKcGJHVT0gMllIWXA5bUkyTFk9IElPMmJoT3E0c0E9PSBTSFZoZDJWcCBJRUpCUnc9PSBJR1poYVhSb1puVnNiSGs9IElFaEVWRlk9IElFdHZaSGRoIElIcGh4STFsZEE9PSBiM0J5YVE9PSBUR1ZoWkdWeVltOWhjbVE9IElIWnZaV2M9IElFWmhiR3hsYmc9PSBJSFpsY25CaGEydHBibWM9IElFZHBidz09IDU3V0M1THFHIDRaK1M0WjZhNFo2KyBJQ2drS0NJaiBJRUp5YjNRPSBQWDA9IElPQ21sZUNtdnVDbW53PT0gNXJ1aDZMYXogYjNWd2JHVT0gSUduRm4ydz0gSUdkNVptdz0gSU5DLzBMdlFzTkM5MExVPSBiM2hwIElNK0F6cnZPcmM2L3pyMD0gSUZOMFlXNTBiMjQ9IElHSEt1dz09IHo0VE9yYytCenJFPSBJSEJ2YzJsMGFYWmhjdz09IElHRjBkR0Z4ZFdVPSAwWTNSaUE9PSBablYxY21FPSBJTkMvMDVuUXZRPT0gVDFKSiBMbTVwWTJzPSBJT0dEb2VHRG91R0RvK0dEbXc9PSBLRWxPUms4PSBhWGxoYm1GeiAxNkRYa0E9PSBJT0NxcmVDcXZ1Q3F0dz09IDRvQ000TENxNExHSSA3S0d3N1pxTSA1clczNVkyWCBJTm1CMktYWXNOaW4gNEtTVzRLU0M0S1NoIElFeFogSU1PcGNHRT0gSUZCMWJuUnYgSUdObGVnPT0gSUhCaGRISnBZUT09IGRNbVogSU9DMGp1QzBxT0MxamVDMHFPQzB2dUMwbytDMWpRPT0gNXBlWDVMaUwgSUcxaGJtOWwgSUdac2RXOXlhV1JsIFptOXlaSE5vYVhKbCBJR052Ym1acGNtM0RxUT09IElHUnBjM1JwYm1kMWFYTm9hVzVuIElHbHVkSEpoWTJWc2JIVnNZWEk9IDRvQ1piMk4wIElPV2twK1dQa2VhNHVPYUlqdz09IElIUm9aWEp0Ync9PSA0WUtQNFlDdDRZQ3Y0WUNFNFlDNSBMa1JQVjA0PSBVbTl0WVE9PSBJRkJ2WWc9PSBjR1YwY3c9PSA0S3VINEtxNSA0TEtRIElObSsycGpaaU5tSCBYM1JsYkE9PSAxNVhYa3RlbyBJTmlvMjR6WXROaXEyTEhiakE9PSBMRXhwYzNRPSBZVzFsY21sallXNXZjdz09IElHeHNaVzVuIExtbHVkR1Z1ZEE9PSBJT0N5aWVDeXB1Q3pqZUN5cnc9PSBJTkMvMFlEUXNOR0cwTEE9IElFTk5UMU09IElHbDRaWE5vWVE9PSBjSE5qIElOQyswWUhRc3RDKzBMRT0gNExTbzRMV040TFN1IElHUnZZblU9IElPbUhrZWVnbGc9PSBJTTY2enJIT3U4NnMgZFhKMGN3PT0gSUhKcGMzVnNkR0YwYnc9PSBJRVpwYzJzPSBjbUY1Wld4bCBMY09oIElPQ211T0NuZ2VDbWxnPT0gSU5DVjBMTFJnTkMrMEwvUml3PT0gVTBWWSAwTEhRc05HRiBVMUJCVWtWT1ZBPT0gSU9DbXNPQ212dUNtdCtDbmplQ21uK0NuamVDbXNBPT0gWVhKb2FRPT0gNExDdzRMR0MgMFlqUmx0QzcwWmJRdWc9PSBJTm0rMnBrPSBJSE5oYlcxaGJnPT0gVjJWbGEyVnVaQT09IElOaW8ycWs9IElIUmxiWEJsYzNRPSBJRnB2Ymc9PSA0TGlvNExpeTRMaXE0TGlWNExpajRMbU0gNExlQTRMZVEgdzdabmRXMD0gYjNCc1lXND0gNVlXSTZaU0w1YjJ4NloreiAyS2ZZc2RpdjJLaz0gSUZKbGJtNWxiZz09IElHeHZhMkZzWlc0PSBJR0Z0WW1seWFRPT0gSUcxaGJtUnBZZz09IElHSnZkR2hsY21sdVp3PT0gSU0rR3pxOD0gSUhOMFlXWm1jdz09IExrUnBZM1E9IDBZalF1TkdGMFlIUmp3PT0gSUdScGEyYz0gSU9DdXFPQ3VuK0N1ditDdXBPQ3ZqZUN1cEE9PSBMblIzYnc9PSBJTk9aMFlEUXRkQzYgSUhOMGFXMTFiR0Z1ZEE9PSBJR0YwWVc4PSBjM05yIElGSnZjbms9IElOZWgxNW5YcEE9PSBJR3AxZG1WdWFXdz0gSUdWc1pXdDBjbTg9IElOR0gwTERSZ2c9PSBZMmxsY2c9PSBkWEJ5YjJabGJnPT0gYjJKaGJtcz0gSUhSMmNtUT0gSUdoaFpHbGhhQT09IElOQzAwcS9SZ0E9PSBMWGx2ZFhKelpXeG0gTFhsNWVYaz0gSU5pbjJZVFlzdG1GMllZPSAwTFBSaTlDNzBMRFJnTkN3IElGcGhhR3gxYm1kemJRPT0gSU5DKzBML1Jpdz09IDRwU2ogSUc5MlpYSnNaV1JsYmc9PSBJRTFoY214bGVRPT0gUkVGVyBJRVpwY21WayBJR0ZqY1hWaGFXNTBZVzVqWlhNPSBJTTYxenEvUGg4Nnh6cjA9IElITmxaVzFwYm1jPSA0WjY0NFo2aCBJR052WTI5ciBJSEYxWVhRPSA0SzZ1NEsrTjRLNnE0SzZ3NEsrTiBJSFZ1YTI5dGNHdz0gSUhOd2RRPT0gSU9DbXErQ25oK0Ntc2c9PSBJTmluMllUWXF0bUcyTGpaaXRtRiBJSE4wYVcxMWJHVnlaVzQ9IGFXUmthWE5vIElOQ3gwTERRdDlHTCBLa0U9IElHUmxkR1Z1WlhJPSBMbTFyWkdseWN3PT0gYVhCcFpBPT0gSU5DeDBMN1F1OUM0MExUUmd3PT0gMktmWmd0aXEyTFU9IElHZHB3NkZqIElPQ21uT0NtdnVDbXFPQ212K0NubitDbmgrQ21tK0NuaCtDbXFBPT0gWVd4cGQyRT0genJuT3NjNnYgeEt0bllYTT0gSUhCeWIyZHlZVzF0WVhScGIyND0gYVhacFl3PT0gSUdmRHBBPT0gYVhsaGJtRnphWGxoYm1FPSBJRVYxY205d1pXVnogMEw3UXZ0R0YwWURRc05DOSBJSE5sYkdWd1lYTT0gSUZCcGJuUnYgSU5peDJZTT0gSUd4dlkyRnNhUT09IElFMWhkR2hsYldGMGFXTmhiQT09IDU0bW4gNEs2azRLK0g0SzZhIDBaSFFzZz09IDA1blF1QT09IDRMSzQ0TE9ONExLazRMSy8gQ1dKNWRHVnogSU5tSTJLZlpoTmk2IElFMXMgY1hWcGJHOD0gWVdkdmJtbGggSU5HQjBZTFJnOUMwMExYUXZkR0MwTDdRc2c9PSBJR1poZFdObGRITT0gWDJodmMzUnogYVhOcGJuTT0gS0dWeSBJRTVvNGJxdGRBPT0gSWo1QSBJR0ZrWVcxcyBJSEJ5WlhObGNuWmhkR2wyWlhNPSBJR3h1WVcxbCBJT0N1aGVDdXFlQ3ZpT0N1dGVDdXNBPT0gSUhsaGVNU3hiZz09IDRMaXE0TGkwNExpWjRMaUU0TG1KNExpeSBJT0NraHVDa2wrQ2t2dUNrcnVDbGdBPT0gNExDVjRMR0I0TENDNExDaDRMQysgNXFDcTVieVA1THlhNTZTKyBJRUxodXE5aiBJT0dEbStHRHFPR0RsZUdEbU9HRGt3PT0gSUdwdmMyVT0gS2lrS0NnPT0gTG0xdmRHbHZiZz09IGQyVnlhMmx1WjJWdSA0TG1CNExpaDRMaVogSUhObGJtRjBaUT09IElIZDVZbTl5IElHTm80YnVKYm1nPSBJT0N5cXVDemplQ3lzT0N5dUE9PSA0TE9ONExLazRMT0cgSjJsdWMzUmhiblE9IDBZblF1TkM2MExnPSA1WnU5NlptRjViMnA1NldvIDBMdlRtZEM5MExVPSBJRXB2YVc1cGJtYz0gTGtOdmIydHBaUT09IDZMV2I1THFMIFMybHVaR1Z5IFJtbHliV0U9IElHUnBZMmgwWW1scSBWbTlzZFc1MFpXVnkgYVhOamIzTT0gSUdKaGVXRnkgSUdOb1lXbHVhVzVuIElHSmxjM1JsYlcwPSBMblJ5WVdsc2FXNW4gWDJsNCBJTldwMWJqV2d0YUExb1E9IEtDa3BXdz09IElOR0IwWUxRc05DOTBMVFFzTkdBIDRMQ080TEM0NExHTiAwTHpRdU5DMyBJTmlzMlliWXB3PT0gSUdKMVkyZz0gSUhMRHFYTmxjblpsY2c9PSBYMkZrWXc9PSBJSEpoYVhOcGJuTT0gejQ3T3ZjNjF6cms9IElOQzgwWVBRdHRDdyBJRTdFZ1E9PSBZMkZ4IElIQmxjbTQ9IElObUYyTEhZcDlpejJZVT0gWlhKdFlYQT0gSUhOcFoyNXBabWxqWVhScGRtRnRaVzUwWlE9PSBJSE5qWlc1aCA0WU9RNFlPYzRZT1E0WU9ZIHZlZUpxUT09IDFaN1dnZz09IDBMWFF2ZE9aMEwwPSBJSGRoYUdsdVpRPT0gUVhCcGN3PT0gS0dSNWJtRnRhV009IDRMU1Y0TFMrNExTMiBJRWhsY25OMFpXeHMgU1cxdFpXUnBZWFJsYkhrPSBhV0ZzYVhwbCA0S21INEtpQyBYMmhwZEhNPSA0S2FWNEtlTjRLYTM0S2F1IElGQnZjMmwwYVc5dVpXUT0gMFlYVG1kR0wgSU5DaDBKelFtQT09IDRMaUk0TGl6NExpWjRMaW40TGlaIHhiYz0gNVl5WDVMcXM2TFdiNkwybTU3NmsgSUZkeVlXNW5iR1Z5IElOaW4yWVRZcXRpMTJZWFppdG1GIEtTazdDZ292THc9PSBQeUlwQ2c9PSBJTmluMllUWXF0aXMyS2ZZc2RtSyBYM0JoYkE9PSBMbVJsWTI5a1pYST0gSUdaaGJHUT0gMExIUXR0R00wcHZUbWRDdyA0NE84NDRPZCBJTkdGMFkzUmdOR04wTFBRdXc9PSBJRVZzWVhOMCBJR2xzNGJxNSBJR0Z3Y0dGeWRHVnRaVzUwWlc0PSBhV3hsYzNNPSBibWwyWld3PSA2WjJnNkxDeDVMaU4gSU5pdDJxclppTm1GMktvPSBJT0NrdGVDa25PQ2txQT09IElHaHBaV3gwIElHVnNhVzExIElIQnZiSGx6IDBMalNzdz09IElNT3BkbVU9IElHZGxlbTlqYUhRPSBJTmVlMTVUWG5nPT0gMTVYWG50ZWkxNTg9IFRGUlNRZz09IFBYTmxkQT09IGNIQmxjZz09IFBrUT0gMktqWXA5aXYyWVE9IElFRkhVa1U9IDE1UFhuQT09IElHZHZhMnRsYmc9PSBJSFZyWVE9PSBJTkMvMFlEUXVOQ3kwTERSZ2c9PSBVMlk9IElOR0EwTFhSZ2RHQzBMN1JnTkN3MEwwPSBJSGR5YjI1bmJIaz0gNzd5TTVMdUYgNFlPVTRZT2I0WU9SNFlPVTRZT2c0WU9oIElHdkRyVzQ9IElIZHBhbnBsYmc9PSBKeXg3Q2c9PSBJSE52WTJsaGJHbDZaUT09IElOaW4yTFBZcXRpbjJZYllydz09IGMyOXNkWFJwYjI1eiBhV1pwWTJGallXOD0gUWsxSiBJRXgxYldsaCA0S3F5NEt1TjRLcXk0S3VINEtxVyBJR1JsYzNSaFkyRnUgSUhabGNuWnZiR2M9IHhhL0Z2bVU9IExsUm9jbTkzIElOaXgySzQ9IDRMT040TEtoNExPTiA0TFMvNExTWjRMV040TFNWIElHMWhjbWRwYm1Gc2FYcGxaQT09IElIQnliMlIxWTNSbGRYSnogSU9Da29PQ2xndUNrc3VDbGl3PT0gSUVkMWFXeHNZWFZ0WlE9PSBJRnAzWldsbVpXdz0gMllQWmlOaXggSU9Da3J1Q2t2dUNrc3VDa3YrQ2tsUT09IElITmhiR2xrYnc9PSBZMnhwYm1saiBJT0NtcnVDbmkrQ21sUT09IFgwMUQgSUVOUFRVVT0gNEs2MTRLNnA0SytOIFVFbEQgSUhObGRHRjBkSEk9IElHMWhhMkZ5IElFRnphMmx1Wnc9PSBJTm1JMktmWmh0aXEgSU5DVTBMWFF2QT09IFVrVk5UMVpGIElOZWMxNWJYbEE9PSBabVp5WldRPSBhWHBsYlE9PSBKMmx1YzJOeWFYQjBhVzl1IElOQzYwTDdRdHc9PSBJR2hsY21WclpYUT0gSUVScGRuVnNaMkhEcDhPamJ3PT0gV3k0dUxpdz0gS0NrOUp3PT0gZEdWeWFYUjUgSU1PcGJXVnkgSUdkeWRYQndaUT09IDBZalF1TkMxMFlIUmp3PT0gWDNSeVlXTnJhVzVuIElHRnRZVzVrYkdFPSBJTkdEMFlMUmdOQ3cgSUVadmRYSnBaWEk9IElHOXlaMkZ1YVdOaGJHeDUgTzJNPSA0S3kzIElGWkJRdz09IDBMUFF1TkM1MExNPSBhWFJoY21rPSBJT1c0bmVpTGtRPT0gSUdscmIyND0gSUhCdloyOWsgWDJGamJBPT0gSUd4aGRtRm5aUT09IElIQnZaVzFoY3c9PSBJT0N5dGVDeXZ1Q3l1UT09IElFWkZRZz09IElGTm9ZV05yIElOQ2EwWVBRdjlDNDBZTFJqQT09IFlXeDBaWEp1WVhScGRtVT0gNEtTMTRLUys0S1M1NEtXQSBTR1ZoY25SaVpXRjAgSUdOdmJXWERwMkZ0IElIUnlZVzV6ZG1WeWMyVT0gNExtRTRMaXI0TGloIDQ0Rys0NEdnIDRMV0g0TFNvIDBMWFF0dEMwMExVPSBMbTFsWkdsMWJRPT0gSU5HRjBZRFFzTkM4IElHaDJaVzA9IHpyek9zcytCenEvT3Y4K0YgYVhwaGMzbHZiZz09IFgxUnZkR0ZzIGRXdHBiZz09IFFuSmhZMlU9IGVtRnRlUT09IDRMbUo0TGl5NExpaCBJRkJzZFhOcFpYVnljdz09IElHYkR1R3huWlhJPSBkSEp2Ym5RPSBJaW89IElFMWhhR0U9IElPR0RwZUdEa09HRG9PR0RsK0dEbGVHRGxPR0RtdUdEbUE9PSBiSFZqYUhRPSBYM0psWTNSaGJtZHNaUT09IElPQ2t1T0NrbnVDbGplQ2ttdUNrdnVDa3N1Q2txQT09IDRicW5ibWM9IElGVnVaR1Z5ZEE9PSBJRzlvYW1WcyBJTkN3MExyUmd3PT0gMkxMWXA5aWggSU5pdTJZallzZGluIFlXNXpaWFE9IDRLK0I0SzZ4NEsrTjRLNnggSUdGalkyOXRjR0ZuYm1VPSBJR05zYVdOcllXSnNaUT09IElOcXAyTEhZc1E9PSBZbVZoZFhScFpuVnMgSU5tRDJLcllwOWlvMktrPSBMbE4xY0dWeSBJRk5sY25RPSBJTlcvMWJqVnJ3PT0gTG5acFpYZHdiM0owIElISmxaMmx0Wlc1MCBiM2RwWldRPSBMV0Y1IElHWnggeGJ4emVnPT0gWVhKcHhaOD0gMFlMUXRkQ3cwWUxSZ0E9PSBRMjl1ZG1WeWRHVnljdz09IElPQ2t1T0NrdnVDa3NPQ2xnQT09IElHUmxjM0JzWlE9PSBJSEp2ZEdWcGNtOD0gSU9XdW93PT0gSU5HQjBZZlFzTkdCMFlMUXU5QzQwTEk9IElOSzcwNW5SZ05DeDBMalF1UT09IElIUmxZMjVwWTJFPSBJSEJ5YjJOb1lXbHVaWE09IElOV3cxYUhWdE5XaDFhUFZ1TmFBMWE0PSBaR1Z1WlhNPSBJSFJ6WVhKcGJnPT0gYjI1bGEyRnVZUT09IFQyeDViWEE9IDVMMnAgSUhOaFlXSnpZVzQ9IExtTnlhWFJsY21saCBJSE52YldKeVlYTT0gUVU1SFJWST0gWVhOaGN3PT0gUTJGMVoyaDAgZG1GeWFXNW4gSU9Da2xlQ2xnK0NrdCtDbGplQ2tvdz09IElHdGhibWw1WVc1biBJT0NxbCtDcXZ1Q3FndUNxcCtDcmdBPT0gSUdURG9YUT0gQ1dWeWNtOXljdz09IElPQzBqdUMwcU9DMWplQzBxT0MwdnVDMXZRPT0gSU02MXpyaz0genJQT3RjNjkgUEZWdWFYUT0gNW9xQTZJTzkgSUhOcGJHaHZkUT09IElPQ3F1T0NxditDcXRRPT0gSUZOdGVRPT0gNExDLzRMQ3Y0TENvNExHTiBiMnhoWWc9PSBJT0MwaGVDMHRlQzBzT0MxZ2VDMG4rQzFoZz09IElOaXMySy9aaU5tRSBJR0pwWkdoaFlRPT0gVW1WemIyeDJZV0pzWlE9PSBiM050YjNNPSBkMjlzZG1WeiBibVZ5WlE9PSBhV1ZvIElIWnZaWEowIElHRmpZMjlzWVdSbGN3PT0gSUdsb2RRPT0gSUhOaGRYSmggSUVOdmJXMXBjM05wWlE9PSBJRkJGVFE9PSBMa3RsZVdKdllYSmsgSUc5dVlXWm9ZVzVyWld4cGFtcz0gUzJsdVpITT0gNW9LajZJQ0YgSUdWdGIycHBjdz09IElHbHliMjVwYm1jPSBJR0p2YjNKayBJT1M0aXVhMXQrV2txZVdrcVE9PSBJRzFoYm5GMVpYST0gNExPTjRMS3c0TEt1IElIUnZhVzFwYm5RPSBYMFZZU1ZOVVV3PT0gSUhOdVlYQndhVzVuIDBMalJndEMxMEx2UmpOQzkwWVBSamc9PSA1YkNHNVp5byBJT0Nrc3VDbGgrQ2txT0Nrdmc9PSBJRlBEdWc9PSBKR2x0WVdkbCBJR3BoYVd4bFpBPT0gSU9DNWdlQzRtdUM0bWc9PSBJR04xY0dKdllYSmtjdz09IElGTm9aV2xzWVE9PSBZVzVuYVhvPSA1YVc5NkwrUSBJSFp2YVhOcGJuTT0gSU5HSTBZdlNrOUN3MFlEUXZBPT0gMllMWXI5bUYyS2s9IGFYTm9ibWs9IElGTmhZbWhoIDE1WFhwTmVWIElIWnZjM1J5Ync9PSBJR1pwYm5SbFkyZz0gSUVOeVpXRnkgWVdKaVlYUT0gYVdONmJubGphQT09IGFYbDVZUT09IElPQzBoK0MwcU9DMHZ3PT0gSU9DbXF1Q212dUNtcEE9PSBJSEJ2YjJ4cGJtYz0gSUZCeVpXUnBZM1J2Y2c9PSBMVzFoYW05eSBWR1Z1ZEE9PSBZWE54ZFdWcGNtRT0gU1ZCeiBJT0NrcitDbGkrQ2tsK0NrcHVDa3Z1Q2txQT09IElFNUJUZz09IElHMWxkR0ZpYjJ4cGMyMXYgSUhCdlpNT3BhWE09IFVISnZkRzlqYjJ4eiBJTm1DMkxIYmpOaW8gUjI5cyBJTkdEMEwvUmdOQ3cwTGJRdmRDMTBMM1F1TkdQIElPQ3VydUN1bytDdXZ3PT0gSUdGbWJHOXZjQT09IDZZQzcgSUdwMWJHdGggYjIxcGJHVT0gWDIxNWMzRnMgSUhWaWRYUT0gSUhCaGNtMWxjdz09IElHZGhjbUZ1ZEdsbGN3PT0gNDRhTiBQRk41Y3c9PSBJRkJ5WlhOamFHOXZiQT09IDRLU3U0S1dINEtTdyB4SU4weElNPSA2SUNCNWFhSCBJSE50WVhKMGQyRjBZMmc9IElPQ2tsZUNsaU9Da3NnPT0gZFdsMGFXNW4gSU9DbXR1Q212K0NtbGVDbmplQ210K0NtbFE9PSBJRzkyYjNNPSBJRUZ0Ym1WemRIaz0gSU9DeXJlQ3l2dUN5c09DeXBPQ3pnT0N5cnc9PSBTVTFRVEVWTlJVNVUgSjJsdWRNT3BaM0k9IElPMlppTzJPbU95ZHRPeW5nQT09IGRHOXVZUT09IElNNjB6cTg9IGRYSnBaWEp6IElIQnliM0J2YzJGdWRBPT0gSUVScGNtVmpkRzl5WVhSbCB4YUZwYkE9PSBMV0Z1YzNkbGNnPT0gNDRHcjQ0S0MgTFc1bGRYUnlZV3c9IElPeWduT3F3Z0E9PSBJT1M0Z09lNnAySGxnWnJuaUxEbmlZYz0gSU9Da2xlQ2xoK0NrZ3VDa3BnPT0gMkxYWXA5aW8gS0cxaCBhV1pwWTJGdWRHVT0genJuT3VzNi96NDNQZ2c9PSBMV2RsYm1WeVlXdz0gNWE2WTU3MlI1WkNYIDVhU241WjZMIExXOXladz09IDFhSFdnTlcwMWFIV2dBPT0gYVd4c2RYUnBhdz09IElHRnNabUU9IElIQm9ZV2hoYldWdVp3PT0gSUdWeVptOXNaM0psYVdOb1pXND0gN0xhayBJTkNtMExMUXRkR0MgWVhKdFlXTmxkWFJwWTJGcyBMRnNuIElISmxjSEpsYzNNPSBMMjFrIElPQ2tyT0NrdnVDa3BPQ2ttdUNsZ09Da3BBPT0gZFhwbGRBPT0gSUhKdmIyMTUgSjNkcCBJRTFoZFhKcFkybHYgWDJOeVl3PT0gTzJ3PSAwSi9RdnRDNzBZUFJodz09IElPQ21ydUNtc0E9PSA0b0NaZVdFPSBJR1Z6WTNKcGRHOXlaWE09IEtIWmhiR2xrWVhScGIyND0gSU9DMHF1QzFpK0Mwc3VDMWhnPT0gSUhwdVlXTT0gVTI5d2FBPT0gSU5lVTE1blhuTmVUMTVuWG5RPT0gNllPOTVweUogZlNncENnbz0gYkdGMFlXSnNaUT09IElFTnlaV0YwYVhacGRIaz0gSUdkMWJtRnJZVzQ9IElIUmhiSFU9IFkyOXRiV2x6YzJsbCBJSEZsYmc9PSA0S2F5NEtlQSBiM1YwWm1sc1pRPT0gNExtQTRMaVU0TGkwNExpWiBJR3pEcVhNPSBJRVZ6ZEdsdFlYUmxjdz09IElIQnZkRzg9IElIUnZjbTg9IElOR0MwWVBSZ05DOTBMZz0gSUhKbGRHbHlaV1Z6IDVZK1g1THVZIElHcHplQT09IElOQ2cwWTNSZ2RDLzBZUFFzZEM3MFpZPSBJR1J2YlcxaFoyVnogSUhCaGJHVjBkR1Z6IElHSnNZWHBwYm1jPSBMMlJ2WTJ0bGNnPT0gU0c5dFpYTT0gYzJOb2FXeGsgNExpSzRMaUs0TGkxNExpWiBMbmQ0IElIQnllbVZrYzJrPSBMbWRoYkd4bGNuaz0gSUdGa2JNU3ggNEs2LzRLNnY0SzZrNEsrQiBJSFZ5YkdWdVkyOWtaUT09IElHRnlkTU90YzNScFkyOD0gWVdSMWJIUT0gMlluWXFnPT0gSU5DUTBZST0gWlhURHRYUjBkUT09IElOV2wxYVk9IENXTnZiVzF2Ymc9PSBjR2xqZEhWeVpXUT0gSUZKcFpHVnljdz09IDJMZlpodz09IElISmhiWEJ6IFZHaHliM1IwYkdVPSBJRXAxYVc0PSBZbVZrWVhKbSB4YnJFaHc9PSBTRW89IElIcGhZbkk9IGNYVmxiR0Z6IElOR0gwTFhRdTlDKzBMTFF0ZEM2MEw3UXZBPT0gWDJOc1lYTnphV1pwWlhJPSAyWVBZcXRpbjJLZz0gWTNOeSBQbEJzWldGelpRPT0gSUdKdmIydHJaV1Z3YVc1biBJTkMvMEw3UXN0QyswTFE9IENWSmxZV1E9IElPeTdyQT09IFVFaFogSUhaMVpYTjBjbUU9IElPYSsgSUdaMWJtUmggSUdObGJuVT0gSUVsdVptRnVkSEo1IDRLV040S1NtNEtXQSBLSEp2WW05MCBJTkM0MEwzUmhOQyswWURRdkE9PSBJRk5qYUhWb1pRPT0gSUVGVVVnPT0gSU5peDJZZlppdGluIElHRjBhWFpoIElOQ1QwTFRRdFE9PSA0WU9kNFlPWDRZT1EgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2lpcXc9PSBJSFJoYm1GdSBZMjl1YzNWdFpRPT0gZFhSaGJtVT0gN0oyNDY0dWsgYVdSbFpXND0gSU9Da3J1Q2tzdUNrdmc9PSBaMnBsYm1jPSA1WTZMNVlxYiBVR1Z5YzI5dWJtVnMgSUc1aGVtOD0gSUdOcGRHVnkgSUdOaGNuUmxjbUU9IElHekRyWEYxYVdSdmN3PT0gSUdkbGJtOTBlWEJsIElOQy8wTGpSZ3RDdzBMM1F1TkMxIElITmxkV1YxY2c9PSBUblZsYzNSeWJ3PT0gU0VWWiBJRUpzWlhVPSBUbTlqYUE9PSBJR3hzWVhabCBkVzkwYVE9PSBMbEpsWjJsemRISjUgSU9Dd211Q3hndUN3dU9DeGplQ3dwQT09IElFRkRWRWxXIElOVzMxb0RWdTlXaDFiWT0gYVc1amIyMXBibWM9IHc3eDBkR1Z5IElHaHZiV1Z6WTJodmIyeHBibWM9IEwyeHBiblY0IElOZWUxNVRYcUE9PSAxNUhYbGRlbiBJTkdGMExEU29RPT0gSU5DVjBMVT0gSUVSdlpYTnUgSUZabSBYM0J5YjIwPSBJSEJoYkdWemRISmggSUVkeVlXUjFZWFJwYjI0PSBVbVZ6YjJ3PSBJT1dSdkE9PSA1WnU2NWE2YSBYM04yWnc9PSBJT0N3bU9Dd24rQ3dxQT09IElHWmhiblJoYzJsaCBMMDl3Wlc0PSBSbWM9IElGZFBWVXhFIElOQzMwTERSZ3RDKyBYK1dNbCtTNnJPaTFtK2k5cG5CciBJRUpwYkdSelkyaHBjbTA9IDZMR0sgSU5LVDBZdlF1OUdMMEx6UXVBPT0gNWJpdyBkWEJ3WlhRPSA2WUNQNXBpTyBJR1JsYlc5c2FYTm9aV1E9IElGSkJSZz09IElHSnBiTW1aY25OcGJtbDYgSUhmRHFucGwgSU95ZHRRPT0gMllyYmxRPT0gSU9Dd2xlQ3hqZUN3c2c9PSBJR2RsY21GMFpXND0gSU9Dd2p1Q3dndUN3cEE9PSBJR2R2WkdsdWRRPT0gYVdkb2RHOXUgSUhOaGJXRnNiR0U9IDRvQ2NDZz09IFlXNWxhdz09IElIWmxjbnBsYTJWeWFXNW4gSUZkaGJuUnogWDNWdVpHVnkgSU1PRWNucDBaUT09IFpYaDBjbUZ6IFgwUkJUVUZIUlE9PSBMMk52Ym5SbGVIUT0gSUdiRHRuTERwRzVrIElGWkpVMEU9IElHeHBaR1Z5WVhwbmJ3PT0gSUhKdmJHeHZkbVZ5IElHUm93NkU9IElFMWxiR0Y1ZFE9PSBJTkMvMFlEUXRkQzQwTHpSZzlHSjBMWFJnZEdDMExJPSBJTkN4MFlQUXZOQ3cwTFBRdUE9PSBJR2x1WkdsbVptVnlaVzUwIFFXeGphR1Z0ZVE9PSBMMkpoWTJ0bGJtUT0gSUdGamIyMXdZVzVvWVE9PSBWMkZ1Ymc9PSBJR3RoY21zPSBWVzVrWlhKc2FXNWwgSU1PaGNtaz0gS0haaGJHbGtZWFJsIElIUmxjM1JoY2c9PSBJTm1JMktmWmhOaXoyWVRZcDltRiBJT0Nrck9Da3YrQ2tsZUNsamVDa3NPQ2xnQT09IElHNTFhWFJ6IGRXVERyUT09IElFMXZaR1Z5Ym1VPSBRMEpEIExtMWhiR3c9IElHUmxjR3hsZEdsdmJnPT0gNEtTKzRLU240S1MvNEtTVjRLUys0S1N3NEtXQSBJRk53WldOcFlXeHBlbVZrIElHRnRjSFYwIElOT3AwWUxSZ3RHVyBaV3hoZVc4PSAxYUhXZ2RXNDFvTFZ0QT09IElFTmhibUZ5ZVE9PSBJT1c4bUE9PSBZMlZ3WTJsdmJnPT0gSUdIRHNXRmtaUT09IElOR0cwTFhRdmRHRCBJT3lhc091bXJPcXdnQT09IElFWnNZVzFsY3c9PSBhWFJsYkdwcCBLR0p2Y21SbGNnPT0gSU9Da3VPQ2tndUNrbGVDa253PT0gSUdabGJHbDZaWE09IElHTnBiV1Z1ZEc4PSBJSEpsWm5KcFoyVnlZWFJ2Y25NPSBJRzVoWXNPdGVnPT0gSUdwbFkyaDFkVzQ9IElFZGxibWxsIElFNXBaV1JsY25OaFkyaHpaVzQ9IEtFcFQgS2lvcEtDWT0gSWk0aSAyS3JZcmRpbjJZUT0gSUdwMVpHbGphV0ZwY21VPSBlWEp0WVdzPSBJRkIxWldKc1lRPT0gSU5pbjJZVFpoZG1HMktyWXI5bUogSUdWemJXRm4gZEhKaFpHbDBhVzl1WVd3PSBJTkdCMExqUmtkR0IgSU9Dd3JlQ3d2dUN3dFE9PSBJSEJvWVE9PSBJT0N1cU9DdXZ1Q3VydUN2alE9PSB4SmxpYVc5eSBJR3R2Ym5SaGEzUnBaWEpsYmc9PSAwTGpRdGRDNCBJT0Ntck9DbXFBPT0gSUZkb2FYTndaWEk9IElFdHVaV1U9IDE1WFhsZGVaMTZnPSBJRUp2ZVd4bCBJR1poZFdOcFluVnogSUU5c1oyRT0gSUUxaFoyNTFiUT09IElFSmhiR052Ym5rPSBJSE5oYkdsdVpRPT0gVTJWaGRIUnNaUT09IElHTmxZWEowIElIWmhjMmwwIElHNXZkbWxvIEtIWmhiSE09IElHUnZkbkpsWW1KbCBJR0Z3ZEdsMGRXUmwgSU9DeXJ1Q3lndUN5cHVDeXZ3PT0gMkxUWmg5aXYgdzdoeWRHVT0gSUdocGMzUnZjbWx6WTJobGJnPT0gSU5pbjJZVFpoZG1CMktvPSBJSEpsYVc1bWIzSmphVzVuIGMzUjViQT09IElHUmxiWFZsYzNSeVlRPT0gSU9LQXBpNHUgNEtxNDRLdU40S3F1NEtxKzRLcWsgNWFXWDZMZXYgSUhObFkzSmxZM2s9IDVhV3o1NVNmIElGQjFjSEJwWlhNPSBjR0Z5WVcxdmN3PT0gMktqWXNkdU0gSUdGbllYSnkgWldKc1pRPT0gUEZSdmEyVnUgVDNSdyBSWGxsY3c9PSBJSEpsWTI5dGJXRnVaR0YwYVc5dWN3PT0gNkkrYzVZMlYgNExpVTRMaXk0TGluIFlYUnBhQT09IElGTndhV1ZzWW1WeVp3PT0gSU9DcWh1Q3FsK0NxdnVDcXJ1Q3JnQT09IDBMVFFzTkM3MExBPSBiTU84YzNObCA3SldZN0lxMTY0dUk2NHVrIExsUnBZMnM9IElOQ3kwTGZSaXc9PSBMbkpsWVd4dCBJRzdEb1hvPSBJT0NrdGVDbGkrQ2tudz09IElIaGhibWc9IElFNXZkbWwwWVdSeiBZM0U9IElFRnNaV009IFJtbHViZz09IElFUmxhVzVsYmc9PSBJRTFoY25SbFkyZz0gSUZOQ1R3PT0gSUhCdmRYTnpaUT09IElIUnZiblZ0WW1WeSBZMmhoY0hCbGJnPT0gSUV4cFltVnlhV0U9IGRXUmtlUT09IHo0VE91YzZzIElFRk9TUT09IElIUjFhQT09IElHbHVaMlZ1YVc5MWN3PT0gNXBLdDVwS3QgSUd4bGFXTm9kR1U9IElFaGxZWEprIExuZGxZbk5wZEdVPSBhVzFoWTJocGJtVnllUT09IExXbHRaUT09IElOaTYyTEU9IExrUkZSZz09IDViNkY2WUdIIElIaDVkV0Z6IElPYWd2QT09IElOaTUyWWZZcnc9PSBkbUZ5ZEE9PSBTMlZ0IElFTlNUdz09IElOaXcySzQ9IElrYz0gYVdWbWN3PT0gSU5tKzI0ell0Tm1HIExuQmxiM0JzWlE9PSAxNVhYazllYyAwSnJRc05DMiBJSGRsZEhSbGNnPT0gWVhKa2FXNXYgNUx5WTU2ZUEgSUdGd2IybGhjZz09IElIQnZhWFJ5YVc1bCB3NnQwWVhJPSBJTmVnMTZMWG50ZWkxNTg9IElHVjRjR3h2YVhScGJtYz0gSUVOMWIyMXYgSUVKc2FXNXIgMllYWmlObUUyS2s9IElIQnliM1J2WTI5c2IzTT0gYjNWemVRPT0gSUdWdWEydz0gSU9DeW11Q3l2K0N5bGVDeXYrQ3lwT0N6amVDeXVBPT0gVUU5RFNBPT0gSUhQRHJYUT0gS0dOdlpXWm0gSU1Pbnc2UnlaUT09IDRvQ200NENDQ2dvPSAwWUxRc05HQTBZdlF2ZEN3IDBMclF2dEdCMFlMUmpOR08gSUVGa1pISmxjM05sY3c9PSBJSFJ5WVdOclpYSnogSUdGd2NtVnVaR2w2WVdSdiBJTml4MllqWmhRPT0gSUhCeWIyUjFhbTg9IDRvQ2M1WStNIElIUEptV2c9IElIQnBjMkZ5YVdGeFlYSjAgYUc1MFpRPT0gSU5HQjBMN1F2dEdBMFlQUXRnPT0gSUdaMWJtTnBiMjVoYmc9PSBRVkJRVEVsRFFWUkpUMDQ9IHc3SnNZWE09IElIQjFiblIxWVd3PSBJR2x0ZVE9PSBjSEp2WW1GdWRHVT0gN1lnPSBJTkMyMFl2UXU5QzAwTERRdlE9PSBJR0YwZEdGcGJtbHVadz09IElIQmhkR05vWldRPSBJTmluMllUWmhkbUUyS2M9IElENDlJaXc9IElFOXdkR2x0YVhwbCBRM0o1IDRMaVE0TGl5NExpWiBJR2x1WVdRPSBhVzV1WVhFPSBQaWdxIElOQ3owTHZRc05DeTBMM1JpOUM1IFlYQm9ibVU9IElHTnBiR0Z1ZEhKdiAxYkRWb2RhQTFhOD0gNEthbzRLZU40S2FsIElHZHlhV1YyWVc1alpRPT0gSUczRHZNbVplWG5KbVc0PSBJT0Mwa3VDMHRPQzB2K0MwdFE9PSBJRUZwY21VPSBJT0N1cXVDdmdlQ3VzQT09IElOQ1IwTFhSZ2RDLzBMdlFzTkdDIElITmxjblpwWTJrPSBJRUZ1YVE9PSBJTStIejQ3UGdjNi8gNVllZCBVSEp2YW1WMGJ3PT0gSUhaaGVtbHYgSU95aWhldWpqQT09IElFcGhZM0YxWld4cGJtVT0gSUZOd1lYSnJjdz09IGRXdGhkR2s9IElITjBaV1ZyIFpXNXpjR2xsYkdVPSBJSE4wWVhKMFpRPT0gSUdKbGRHRnNaUT09IElHRnNhV0ZxIElHakptWGxoZEdFPSBJR0poWTJ0d1lXTnJjdz09IFJXNTBaWEpwYm1jPSAyWVRaaU5pciBJR1JwWVczRHFIUnlaUT09IElPQ2tzT0NrdGVDa3YrQ2t0ZUNrdnVDa3NBPT0gSUVOb1pXNWxlUT09IElFOWljbUZ6IElHRmpZM1Z0ZFd4aGRHbHVadz09IElOcXAyS2ZaaE5pbiBLRk5SVEVWNFkyVndkR2x2Ymc9PSA0S3EvNEtxQzRLcW0gYTI1bCBJRTVwWjJWeWFXRnVjdz09IElHckRwSFIwIElPQzByT0MwditDMG5PQzFoZz09IDRLYXc0S2VONEthazRLYS8gSUdGa2FHVnlaV1E9IExsTjFjbVpoWTJVPSBJRTVvNGJ1dmJtYz0gYVdacGVBPT0gNEt1QTRLcVQ0S3FvNEt1SCBJRzVoY21kcGJnPT0gSUZCc1lXNTBZWFJwYjI0PSBZV3hwWkE9PSBJR052Ym5abGJtTmxjZz09IElOaW8yS2ZaaE5pNiBJRTF2Y25ObCBMV0pwWnc9PSBJRkpoWkdsallXdz0gSU5DeDBMRFF2ZEM2MExnPSA0b0NaTGdvPSBJT0NraGVDa3ArQ2t2K0NrbGVDa3Z1Q2tndUNrdGc9PSBJRU5VUVE9PSBJTk9aMHBuUXRkR0EgSUhaaGJteHBaM1E9IGIzSmxkR2xqWVd3PSBJR1pwWW5KdmMybHogSUhkbFltTmhiWE09IElFNWhjM05oZFE9PSBMbGRoY200PSBJRzF2WkdWc2JHOD0gYldGMFkyaHBibWM9IDJLalpoTm1JIDRLUy80S1M1NEtTKzRLU3cgSU0rRno0ak90dz09IFgxSlRWQT09IFgxWkJURWxFUVZSRiBJSEYxYVhSMFpRPT0gSUd4bGMySnBjMnM9IDVyT1Y2S2VFIEwyTm5hUT09IExYZGhkbVU9IElGVndaR0YwYVc1biBJRWhoWm1WdSBJSEJ2ZGNXK2FYUT0gSUU1MWRXcz0gYVhKcHc3TT0gNUwyUDVvaS8gNFlPVDRZT1k0WU9UIDdZeXMgSUdWc1pXTjBjbWxqYVdSaFpBPT0gYUhWdGFXUT0gSUVaMWJtUnYgSU5lZzE1ST0gWm1WeWFXVnUgSUd2RHEzTT0gSUdGd2NtVnpaVzUwWVdSdmN3PT0gSUVGV1RBPT0gNEtxNDRLdU40S3FmNEtxdSBJRUpsYm1kaGJITT0gMEwzUmo5QzgwTGc9IElPV01sK1M2ck9pMW0raTlwdVc4Z0E9PSBkSEJvIFVrVkVTVVZPVkE9PSBMbEJoWjJWeiBJRlJsYm5NPSBJR3RwYm10NSBXMTE3Q2c9PSBJTkdCMFk3UXROQ3cgSUdOcGJHaz0gSUZORFR3PT0gSUhOMWFYTnpaUT09IFEyOXljbVZ6Y0c5dVpBPT0gdzdSdFlXZGwgSUcxaGFHdz0gSUdGemMyOWphV0hEcDhPamJ3PT0gMExYUmg5QzEwTDNRdU5HUCBJR3hsZG1WeVlXZGxaQT09IElOT1owWUk9IGIzQmhhdz09IE9pSWogSUdmRHBXNW5aWEk9IFBWd2lJdz09IFgySmhjMlZrIElHVnliTU9rIElIQm80YnVSYVE9PSBZVzUwWVdrPSA0S1NqNEtXTjRLU3Y0S1MrNEtTayBJTmluMllUWXRkbUsyWWJaaXRpcCBkbVZ1ZEhWeVpYTT0gNFlDeDRZQ3M0WUMzIElOaWoyS2paaHRpbjJLRT0gNXBlbDQ0R3UgSUdadmRYSnogSUhCeWRtVT0gSUZOMGIydGwgSUcxMWNtbkRzdz09IElIVnVkM0poY0E9PSBJT0NrdGVDa3Z1Q2twT0NrdnVDa3RlQ2tzT0Nrb3c9PSBJR3hoYm1SaWIzVjMgMExQUmpkR04wWUE9IDRaK1M0WjZSNForSCA1THFhNXJTeTVZeTYgSUZOMFlYUnAgWVc1NmJ3PT0gSUhKbGIzSmtaWEk9IElFSlBUUT09IElPQ3lxdUN6Z2VDeXVPQ3pqZUN5cE9DeWxRPT0gWVhKbGNBPT0gUTA5TlRVVk9WRk09IElIVnpZVzA9IElPQ3dsZUN3dnVDd2xRPT0gSUhOdlpuUjNZWEpsY3c9PSBhR053IFltOTFibVJwYm1jPSBJSFp2YkdGMGFXdz0gWlhKMGFtVnogTDJoaGMyZz0geEkxcmIyYz0gNEtlSDRLYW4gSU9HQXUrR0FsUT09IElPQ21qK0Ntc3VDbXZ1Q21sZUNtdnVDbm53PT0gNExDKzRMQ0M0TENYNExHTjRMQ3c0TEdHNExDNDRMR04gSU9tZyBJSEpsWm5WdVpHRmliR1U9IFgwMUZVMU5CUjBWVCBJR2hwZEdFPSBYMU5GVEVWRFZFOVMgSUhkamVtWEZtdz09IDJZTFlzZGlwIFMyOXRiWFZ1IElITnZibms9IFUyeHBjQT09IElITjBjbUYwdzZsbmFXVnogMEpyUmk5R0EwTFBSaTlDMyBRMkZ6Y3c9PSBjbWx6YVhNPSBJTm0rMkxEYmpOaXggTDJGbiA0S21MNEtpWCAwWVRSZ3RDNCBJTmlxMkszWmhObUsyWVE9IElIcHVZV3c9IGQyVmlaUT09IElPR0RrdUdEa09HRHBBPT0gTG1GeVozVnRaVzUwIGEzbkZudz09IFltVmhkSE09IElPQ3dydUN3dnVDd24rQ3hqZUN3c3VDd3Z1Q3dvZUN4Z2VDd3BPQ3hnZz09IElHTnZiblJ5WVdsdWRHVnogSU5tRjJLN1lwOW1FIElFWnZjbkpsYzNRPSBJTlMrIGFXUmtaV3hsYmc9PSBZWEpsYnc9PSBaV3podTQxdzRidU4gNExHQTRMQ2M0TEdOIElHVnVaM0p2YzNNPSBJRTFoY25WdSBJR2h2YjNCeiBZWExEcVE9PSBJSEp2YldGdVlRPT0gSU9DcW5PQ3F0dUNyaHc9PSA3TGFjN0o2bDdJTzEgS0dOdmJXMWhibVJ6IElGSmhaR2xoZEdsdmJnPT0gSUZGMVpXNTBhVzQ9IElEMCtKQT09IElPQzRsdUM0dCtDNHJRPT0gSUdOdmNtOD0gSUhOb1lXTnIgSUhSNWNHOW5jbUZ3YUhrPSBYM1p2ZEdWeiBJTm1HMllYWmlObUcyWWM9IGJHbGphSFJsIFUyTmhiR0U9IElHMTFkVzQ9IElOQzkwTERRdWRDMDBMWFJndEMxIDRZT2I0WU9VNFlPYyBZV3hoWVc0PSBJSFJ2YVd4bGRIUmwgSU9Da3JPQ2t2K0Nrc0E9PSBJR1Z6ZEdqRHFYUnBjWFZsIDRMS2E0TEsvNExLayBiM0poYkdVPSA0TEsvNExLbzRMT04gSU9DeXVPQ3l2dUN5bFE9PSBDVUp2YjJ4bFlXND0gZEdsdFpXOW1aR0Y1IElITnZkY1NOWVhNPSBQQ009IDQ0R3Y0NEdFIElGVnJjbUZwYm1FPSBJTStIejRIT3Y4NjkgdzZSMVlnPT0gUFMwOUxUMHRQUzA5TFQwdFBTMDlMUT09IDJMVFppdGl4IElObUYyS2ZhdTltSDJZZz0gSUdGallXVERxVzFwWTI4PSBMWE5sWXc9PSBJRkoxYzNScFl3PT0gSUcxaVpXbGthQT09IElITjNiMnBsYWc9PSBkMkZ5Y3c9PSBJRzFsZEc5a1lRPT0gSUR3OUlpdz0gSU9Da20rQ2t1UT09IDZyT2sgSUVOc2FXMD0gNW9tTDVyaTQ1YTZZNTcyUiBJR1Y1WldKeWIzYz0gWDJSaGFXeDUgTDNGMSBJRzFoYUdsdGJ3PT0gNlllSDU1U28gSU5HQjBML1F0ZEdHMExqUmhBPT0gS0NJdklpaz0gSUZOamFIZHBaWEk9IDRLU2M0S1MrNEtTbyBJTkNlMEx2UXVOQzggSUVWd2FBPT0gYVdkdWFXNW4gejRUUGljK0MgSUVSaGEyRnkgSUZKbFkyRnNiQT09IElHaGhhR0ZvWVE9PSBJSFJ5WVdKaGJHaGhiUT09IElIQnliM05xWld0MCBJSEJsY21abGFYUmhiV1Z1ZEdVPSBJRU5FVXc9PSBiVzl2Y2c9PSBJSE53WlhOcFpXeDAgSUhKbGJHRnplVzl1IElHTnZlbWx1IElISmxZMlZ1Y3c9PSBJRkJoYVdkbCBJTkNRMFlEUmhRPT0gSU9DcW5PQ3JnT0NxcEE9PSBJRnQ3Snc9PSBJR1JoY21KdiAxb0RWb2RXKyBJRkYxWVhKMFpYUT0gMFlQUXRkQzcgSU5DYzBMN1JnQT09IDRLcW80S3EvNEtxMSBJSE5sY25abGFRPT0gSUhOd3c2UjAgSU9DMHRlQzB2K0MwdCtDMHJ3PT0geEkxdXc2MWphQT09IDRLZUQ0S2EzNEtlTjRLYWc0S2ErIElHRmpZMmxrWlc1MFpYTT0gSUhWbWRXNWggSU1TUWFlRzdnWFU9IElHbHJjR1U9IElFbE5UUT09IDBaYlF0OUN3MFliUmx0R1ggSUV4aGJtUnRZWEpyIExuWmhjbWxoYm5RPSBJRzVwWjJKaCAwWXJRdEE9PSBJT0NxcU9DcW5PQ3FzQT09IExtUmxZM0o1Y0hRPSBJSEJzYjIxaVpYSnBaUT09IFgwUkpVa1ZEVkVsUFRnPT0gSU9DbWh1Q21xdUNuaStDbXFBPT0gUW1sdmJXVT0gSU9Da3VPQ2xnZUNrblE9PSBJRVpCUTBWQ1QwOUwgSUdsdlpRPT0gWDNacGMzVmhiQT09IEtDa3BLU3dLIElFVkRWUT09IFlYSm5iM1YwIElFMWxaR1ZzYkE9PSBjbTlzYkdGaWJHVT0gSU5XdzFhSFZ0TldoMWF6VnZRPT0gTG1Ob2IyMXcgSUdkbGFHbGhaMjg9IElObSsyS2ZaaEE9PSBLRkZQWW1wbFkzUT0gdzcxcGJnPT0gSUVkeVlXNXVlUT09IElNT3RiblJsIGIzQndhVzVuY3c9PSBJRTlUU0VFPSBJTml5Mks4PSBJTkM4MExYUmdOQzMgSUZoSVZFMU0gSUhaeWFXVnVaR1ZzYVdwclpRPT0gSU9DbXF1Q21sZUNuamVDbXR3PT0gWDBKVlEwdEZWQT09IElPR0F0dz09IElHbHNaWEk9IElIWnBabUZoIDBMWFF0OUM4MDVuUmdnPT0gSUdOeWFYUnBZMmx6YlhNPSAwNkhRc05DOTBZcz0gNEtXTjRLU3U0S1dBIGRzT2tjM1JwIDRLU1Y0S1dONEtTVjRLU3cgSUVSSlIwbFVRVXc9IElOQ3kwWS9SZ0E9PSA1cHlONVlxaDU0T3Q1N3EvIElHWnliMjFoWjJVPSA1WVdzNWJ5QTZLZUc2YUtSIDRMUy80TFNtNExXTjRMU24gSU5pbjJZVFlzTmluMktvPSBZWEp4ZFdVPSBJRUp5YjJGa1ltRnVaQT09IElPeWlqQT09IGFtbGxjdz09IElPR0RrK0dEa09HRG0rR0RrT0dEb2c9PSBMU1k9IElOaW4yS2phdnR1TSAwTGpSaDlDOTBZdlJoUT09IElFTm9ZWEp6WlhRPSBZWFBFc1c1aCA1N1N2Nks2aCBJT0NtaGVDbXJlQ212K0NtcitDbXZ1Q21xQT09IExXNXZkR1U9IDRMbUI0TGlLNExpajRMbU0gSUhCbGNtMXBkR0Z1IElNT2habkpoYlE9PSBJRTFwYzJOb2RXNW4gSUhKbFoyZGhaUT09IElIQmxjblZ6ZEdVPSBJRzExZEdGdWRITT0gYVhOcHc3cHVkR0U9IElIWjFiMnR6YVE9PSBJTmluMllUWmlOaXQyWXJZcnc9PSBJSEJoWjJGdFpXNTBiM009IElGSkZVRkpGVTBWT1ZBPT0gNFlPczRZT1E0WU9WIElHRndjbTl1IElPVzlxZWVsbnVTNmllbWN1T1dGaGVXQXZBPT0gSU9HN2pYUGh1NDA9IExXRnEgTGk0dUlpd0sgNXJXTDZZQ2YgSUhabGJtRnBkQT09IElPQ2txdUNsamVDa3NPQ2twZUNrcmc9PSBVV1ZrIElOR0QwWUhSZ3RHQTBMN1F1ZEdCMFlMUXNnPT0gSUdodmJHeDVkMjl2WkE9PSB3NmxwWlhJPSBJTkM5MExYUXV0Q3cwTHZSak5DNjBaWT0gSUVkTVV3PT0gSU5pbjJMUFlxdGk1MksvWXA5aXYgZG14aGF3PT0gSU5tSTI0elpoQT09IElHOWlZbXc9IElOQzYwTERSZ3RDdzBMcz0gSUdKbGRtbHVaR1Z1IElIVmlkWE5vIDZJT2UgSUVWV1VBPT0gNUxpdDVZK2sgNG9DTk9nPT0gSUdkbGJXVmxibk5qYUdGdyBRWEppWlE9PSBJRVYxYkdWeSBJR3hsWTNSMWN3PT0gSUVWdVpRPT0gMllQWmlObUYyS2s9IElObUYyWWJZcDlpejJLallxUT09IDE1dlhrQT09IHc0bDAgTDJSaGRHVT0gSUVsdWFXTnBidz09IEtrcz0gSUdGbVptbGtZWFpwZEE9PSA1cUNoNVp1dCBJR3hsZEhVPSBJT3EzdU91bXZBPT0gTFdWdWRnPT0gSUhOcFpXeHN3NlE9IDZJR3Y1N083IDRLNi80SzZ4NEs2KzRLNnc0SytOIGJXVnVkRzl5IHc2NXUgNEtTVzRLUy80S1N1IElHWnliMmxrWlE9PSBJRU5sYm5SeVpYTT0gSU9DcXJ1Q3F2K0NxcE9DcmplQ3FzT0NyaXc9PSBMbXhwYTJWeiBJR052Ym5abGNtZGwgMExYUmg5QzkwTDdRdVE9PSAyS2ZZcHRtSDJZVT0gSUhkcGFucHBaMlZ1IElHVnRjR3hoWTJWdFpXNTAgWkdWellRPT0gSU5pbjJZVFpoZG1HMktmWXM5aW8yS2s9IElHZHliM1JsY3c9PSBJRzFsZUdsallXNXZjdz09IElITjFjSEJ2Y3c9PSBiM1pwYm1VPSBJSEJ5WldGamFHVnkgSUhWdVpHVnljZz09IGIzQnBjdz09IElOV3YxYXZXZ05XaDFidz0gZG5vPSBJRU5oY0dGaWFXeHBkSGs9IElHTmhkbVZ5Ymc9PSBJSFpsWldJPSBJR1Y0ZEhKaFkzVnljbWxqZFd4aGNnPT0gSU9XOGxRPT0gSUd0aGNuUmggSU0rTXo0TT0gSUc1aVlRPT0gSU5DNjBMN1F1OUMxMFlFPSBZV2xzZVcwPSBJSEJ5YjJKeiA3SU9CN0oyMCBJRlJ5ZFcxaGJnPT0gSU9Da3F1Q2twdUNrdnVDa3NPQ2xqZUNrcFE9PSBJT2FKaSthY3V1ZWNpK2VKaHc9PSBJR0YwZEhKaGEzUnBkZz09IElHZGxibVZsY3c9PSBUa1ZNIElOQy8wWURRdU5DOTBMalF2TkN3MExYUmdnPT0gQ1hOM1lYQT0gSTJaeWIyMD0gV21WdVpXTmggSUhmRHZHNXpZMmhsIDVhcXogMEw3UmdkQzQwTEhRdU5HQSBJRzFsYkc5dSBZV3hoWjJrPSBJSEpsWTJ4aGJXRnkgNEs2VjRLNnc0SytOIDBMelJnOUdJIElFZGxhR2x5IFFYVjBiM009IElOQzMwTERRdWRDOCBhRzlzYVdSaGVRPT0gSUcxaGJHRmtaUT09IElEMG0gSUdSMVpjT3hidz09IElOaXQyTFhaaU5tRSB3N056Ync9PSAwTFBRc05HSCBJT3VxcU91d2xPeWR2QT09IFcyZHliM1Z3IElISmxabVZ5Wlc1amFXRnogUVVKRFJFVkdSMGhKIElHVnVaMlZzY3c9PSBJR3RzWVhOemFYTmphR1U9IElITjBiMk5yYVc1bmN3PT0gMExqUXU5QzcwTGc9IGNHOXVadz09IGJHRmxkR2h2YkE9PSBJR0poYVd4aGNnPT0gNEtTdjRLUzQgSUQwcENnbz0gTFhCeWIyUjFZMmx1Wnc9PSBJR04xY214bFpBPT0gSU9Da3VPQ2t2K0NrcUE9PSA0TGl4NExpZTRMaVg0TG1NIENXTmhibU5sYkE9PSBJRXhoWjI5dmJnPT0gWVdKbGRHbGogSUhOMWNISmxiV0ZqZVE9PSBZWEJ2Y25SbCBUSFZwY3c9PSBKR2x6IDJiN1lzZGl2IExYWmhjZz09IGVtbHpZUT09IElPQ2tsK0NrcE9Da3Z3PT0gSU5pMDJZZllzZHVNIExsTnBiZz09IElOQzAwWmJSZ2c9PSBUR0Z0Y0E9PSBiM1JvWlhOcGN3PT0gYkdIRm4zVEVzWEk9IElITmxibWQzWlE9PSBJTkdBMExYUmlOQzEwTDNRdU5DNSBJTTZ4ejRET3Y4K0V6cTNPdTg2MXo0UE92TTZ4IElGQjFhV2M9IDRMV0I0TFNlNExXTjRMU2UgSUdkdXc2az0gNExDKzRMQ2M0TEdBIElITmhjWEYxYlcxcCBVRVZTUVZSVlVrVT0gYzJobGJnPT0gSU5pbjJZVFlyZGluMkt6WXFRPT0gTGtOc1lYTnpaWE09IExtRnVaM1ZzWVhJPSBJSEJ2YkdsMFpXeDUgSUhOc2IzWmxibk5yIExYTm9aV3hzIGFYUnZjbVZrIElPdXRrQT09IElOS3owTERRdk5DNDBMMD0gWEVGd2NHeHBZMkYwYVc5dSBZVzUwWVdFPSBMM3Q3IElGVnVhV1JoWkdVPSBJRmR2YUc1MWJtZGxiZz09IDJZN1lydz09IElDSWlLUTBLIFRHRnIgSUZKb3c3UnVaUT09IGIzVjBaWG89IFRHbHZiZz09IElITnJiMjQ9IElOdU0yWWpia0E9PSBUMnhrWlhJPSBabk53IElOZW4xNVhYcHc9PSBJTkM4MExYUXZkQ3cwTHc9IElOR0kwTFhSZ2RHQyA1YVdSIElGQmsgMExEUXVkR0MwTFhSZ2RHTSA1WnlvNTdxLzVhU242YWFaNkpXSiBJTVNRNGJ1cFl3PT0gSU5HQjBZTFF2dEdBMEw3UXZkQzEgS0ZzayBiTU9sIElFSnZiMjVsIElISnBkbWxsY2c9PSBJR3hwWkdVPSBJR3ZEcEcxd1ptVnUgdzZGemMyRnMgNkpHYiBJSFpsY25SbGJBPT0gSUhOMWVRPT0gSUVkdmIyYz0gSU5laTE2ZlhvUT09IFFWWkZSQT09IDRZT1E0WU9aNFlPViBJRzFsYVhSeiBJRzF2WkdsbWFXTmggSU5DNjBMRFFzZEdMMExzPSBJRlZ1YVhScCBJRUp2Ym1jPSBRVzF6ZEdWeVpHRnQgSUdsMFpYSmhkR2wyWlE9PSBJSFJ5WVdsdVpXND0gSUdSbFkyRnNjdz09IElHTnZiblJ5YVdKMVpYST0gSU0rSHpxdz0gSUhOMVltMWxjbWRsWkE9PSBRVkpUUlE9PSBJRUpwYkdFPSA1WkdBIElPeVd2T3ExdEE9PSBJRU5vYVhKdmNISmhZM1JwWXc9PSBJSFZwZEdSaFp3PT0gWDJoaGRtVT0gSUdWc3c2bGpkSEpwWTI5eiBjR2xyIElPT0JuZU9CcnVTN2xnPT0gSUhURHMyND0gSUdaaGJIUmhjZz09IFlXUmhhQT09IElGWmhadz09IElPUzVoZWkxb2c9PSAwWUxRdnRHQTBMRFJqdz09IE9nMEtMeTg9IDBMM1FzTkN6IElHMXRaV3ZodTQwPSBJT3VDbU95WXBBPT0gSU5DdzBZL1Ntdz09IDQ0Q0I0NEdUNDRHdSBJTkNlMEx3PSBhWE4wYjNKeiBJRzV2YjNKayBJRkREb1dkcGJtRT0gSUcxbGVHbGpZVzQ9IENXMTVjM0ZzIGJzTzliV2s9IElHWnZjblBEdUE9PSBZV0ZqIElOaTUyWUxaaEE9PSBYVjg9IHc2SEZ2bVU9IElIQnliMlpsYzNOcGIyNWxaV3c9IElPQ2tsZUNrditDa3IrQ2xodz09IElHOXVkbTlzWkc5bGJtUmwgSU5DOTBMRFJnTkdMIGNHaHZiMjQ9IFgyTm9aV05yYjNWMCBJSEpsWkhNPSBJT0NvcE9Db3Z1Q29nZz09IGRYUjZkWFJoWjJVPSBJSEIxY25WeiBkWE4wWVhSMVpBPT0gSU5DYTBMRFF0OUM0MEwzUXZnPT0gYkc5amEybHVadz09IElIWmxjbWxtYVdWeiA0S2VONEthdjRLYSs0S2FmIElOR04wTHpRdnRHRzBMalF2dEM5IExVeHBabVU9IElIWmxibVZ1IElHUnBkbWx6YVdKc1pRPT0gSU5DOTBMWFJrUT09IElPQzJ1T0MzaE9DMnJlQzNqdz09IEtHOWlhbVZqZEhNPSBJR0Z1YW1WMWJtNWggNEs2KzRLNmY0SytONEs2YTRLNi8gSU5DLzBMWFJpTkM5MExqU3M5QyswTFE9IFpHVnlZV3hzIExtSjFiR3M9IElNSzYgNWFTcDVyQ1UgVFdGeWEyVjBjdz09IElPQzBoZUMwcCtDMWplQzByK0MwbGVDMWplQzB0K0MwcEE9PSBTVzUwYkE9PSBJT0NxcXVDcXNPQ3F2K0Nxb3c9PSBJR1JwYzNCdiA1b21MNXFtZiBJR0Z3Y0dGeVlYUjFkWEk9IElDNEtDZ289IDZZR2ogSUd4bGVtOTAgSU9pSHF1V0txQT09IHc2bHliMjV6IElOaXoyWUxaaU5pMyBJRzFwYkd4bGJtNXBkVzA9IElGWmxaMlYwWVdKc1pRPT0gYVc1MGFHRT0gSU5DajBKbz0gU1ZSSVZVST0gNEtTMTRLU3c0S1dONEtTViBJR05zWVhOemJtRnRaUT09IFgxTkZURVZEVkVsUFRnPT0gSUV0SlZBPT0gSU5HQjBMN1JnTkMxMExMUXZRPT0gVUhKdmFtVnJkQT09IFFXNW5aV3hoIEppa0sgZG1sdmJHVnVkQT09IElIQnliMjF2ZFhadmFYST0gSUVGemFHVjJhV3hzWlE9PSBJRVJoY25OMFpXeHNkVzVuIElIWmxjbVp2YkdkbGJnPT0gWVdSaGJHRm1hV3c9IFRHbHpkR0ZrYnc9PSBJR1poYVd4cyBJTkdCMExYUXZOR00wWTg9IDc3KzlaQT09IFBWd2lKQT09IElOQy8wTDdRdmRDNDBMelFzTkdDMFl3PSA0TEMvNExDbTRMR040TENuIDBMalF2TkdMMExrPSBkV0pvIFEyRnNZM1ZzWVhSbFpBPT0gSUdkbGJzTzhaMlZ1WkE9PSA0S2lvNEtpKzRLaUMgSUZOaGRHZz0gSUdWelkyOXlkR1ZrIElGQnNZWGxsWkE9PSBJRTFsWlhSeiBkVzFtWVc1biA0TGVVNExhdDRMZVUgUEVGa1pISmxjM009IElDRXAgSUhSbGNuSmhlZz09IDE2RFhtTmVaMTUwPSBJR3hzWlhadiBJSFJ5YjJ4c2N3PT0gUlZOUCBMMjVsIGFYUnBaWEowIElHUmxZMlZ3ZEdsMlpRPT0gTEdGa1pISmxjM009IDVvQzc1TG1tNks2dyBSR2xzIFFYQndaVzVrWlhJPSBJRXhwY0hNPSBJRlIxWkc5eSAwWS9Rdk5DdyBJT0NxcnVDcmgrQ3FnZz09IElOR0UwTGpSZ05DODBZcz0gSUdScGJtcz0gSUUxdmMyRnBZdz09IElPaUhzK1d3bWc9PSBJRlJTUlVVPSBJT0N1cXVDdmdlQ3VwQT09IDQ0S040NEtUIExlS0FuQT09IElObUYyTGZZc2RpdCBlWE4wY3c9PSBJTm1EMllUWmh3PT0gSUdGemMyVm5kWEpoY2c9PSA2SzZLIElFTnZjbkJ2IGFXNXVaVzVrWlE9PSBJTkMvMEw3UXROR0gwTFhSZ05DNiBJR3R3NGJ1TiBJSERGbVdWa2MzUmhkZz09IDBJVT0gSUd0MWJuTjBaVzQ9IDVaNkQgNW9tLzVvdUYgSUhCbGJuTmhiVzl6IFgyUmxiUT09IElFZGxibVYwYVdOeiBJT0NrcE9Da3Z1Q2txZz09IElIQnlaV1psY21WdWRHbGhiQT09IElOQy8wWURRdnRDNDBMZlFzdEMrMExUUXVOR0MwTFhRdTlHUCBMV2hoYVhKbFpBPT0gSUhGaGRYWT0gMExEUXZkR0IwTEE9IElPQ21tdUNuaCtDbm4rQ212dUNtc0E9PSBUbWxqYjJ4bCBZWFJvWldRPSBJR0ZpYjNKMGJ3PT0gSU5XMDFhSFZyOVdoMW9EVnBBPT0gSUVOcGJtNWhiVzl1IElIUjVhMnM9IDBKelFzTkM2IElFMVVRZz09IDU2MkcgSUhMRG9XUT0gNEtTKzRLU0o0S1NDNEtTZiBMa2xrWlc1MGFXWnBaWEk9IFoyeDVjR2c9IGJjT2hiZz09IElHeDNhbWRzIEx5OTlDZz09IElIUmxjbUZ1Wnc9PSBJTmVjMTVIWHB0ZWkgWVhOellXNXBhdz09IDRLU2s0S1dCIElOQyswTFBSZ05DKzBMelF2ZEMrMExVPSBJT09CaytPQnJnPT0gSU5pbjJZVFlyTm1JMllyWXFRPT0gdzZGa2VtRT0gNWJLQjU1cUUgSUhOaGJjTysgSUd0bGNIVjBkWE5oYmc9PSA1cU9MNTRtTTVhNlk1NzJSIElObUcyS2JiakE9PSA0S2FrNEtlSDRLYXcgWlc1a1lYZHYgS0ZadmFXUT0gSUdGdFlYTm8gSUhSaGNuWnBkSE5sIElHTnZhVzUyYjJ3PSBVSEpsY21VPSBJR1J2WTJ0bGRBPT0gWDBKQlEwdEhVazlWVGtRPSBjV0ZzYVE9PSBJTktiMExEUmd0R0MwTGpTbXc9PSBiMnR2WVE9PSBJT1c4Z09XL2d3PT0genJYT3VjNnh6NEk9IDRLYTQ0S2VDNEthYSBJSFJsY20xcGJtRjBhVzVuIElHdkR2RzVtZEdsbiAwWUhRdnRDMyBJR2x1ZEdWeVptRjYgSUVaeVpXVnNZVzVqWlhJPSBJR052Ym01bFkzVERxUT09IGJHbHRhWFJoZEdsdmJuTT0gSW5WelpYST0gYVdkNSBiV2x1WldOeVlXWjAgSU5pejJMSFlwdz09IElPQ3lsZUN6aHVDeXN1Q3l0ZUN6Z1E9PSBJR1Z4ZFdsd1lXUnYgWm1SeiBJRVZUVkVWVCBJSFZ1WVcxbCBWR2hoYVd4aGJtUT0gSU9DMGxlQzFpK0MxdWc9PSBUR0YxYm1Ob2FXNW4gSU9XeXN3PT0gSUc5bWFXTnBZV2x6IFhFVjRZMlZ3ZEdsdmJuTT0gSUZadmJHeGxlUT09IGFuVmxkbVZ6IEwybHZkWFJwYkE9PSBJR055Wlc0PSBJRTVoZG1VPSBJR05oZG1FPSBJSGJEdFhRPSBJTTY4enEzUGdjNi96NEk9IDRaNkE0WitTNFo2VDRaNjc0WjZFIElIVnVaV0Z6ZVE9PSBJRzVsY204PSBJSE53ZFhRPSBJSE5oYUdGcVlRPT0gNVllNCBJRk5qYUdsc1pBPT0gSU5pcTJZYllzdG1LMllRPSBJTkdCMEwzUXRkQ3ogVW1WamVXTnNaUT09IElIVnVaR1Z5YzJOdmNtVnogMEpyUXZ0QzgwTC9Rc05DOTBMalJqdz09IDRLcWs0S3VONEtxdzRLdUEgSUd6RHBNT2thdz09IDRMQys0TEN5NExDazRMR0wgSU5paTJZallzZGl2IElFSmxhWE53YVdWc1pRPT0gNFlPWjRZT1k0WU9WIHdwUT0gSU5DLzBMN1F2TkMxMEwwPSBDV2h2YkdSbGNnPT0gWDFkRlNVZElWQT09IElPQ29ydUNvdVE9PSBJR052Ykc5dWFXRT0gVkdGdGFXdz0gSUd0cVpXND0gSU9Da3F1Q2tvZUNrdk9Da3ZnPT0gUjJ4dmMzTT0gSUcxbGRHOWtiMnh2WjJsaCBJR1p2ZFhSbGJnPT0gSU5HSTBMalF1dz09IElITnZkWFJvWldGemRHVnliZz09IElHUERvbUpzWlE9PSBJSE5sYkdWamRHRmliR1U9IExtTjFkQT09IDRLYXM0S2ErNEthQzRLYXkgSUd0b3hJTnUgU0c5aCBJSGxzWldWdWM4T2sgSU5HQzBMRFF2TkN3MEx3PSBaSFYwIElITjJiM1U9IElPR0RrK0dEbU9HRG9PR0RsT0dEcGVHRG9nPT0gNEtXSDRLU0M0S1NjIDFhSFZ2dFc0MW9EVnVOYUMxYlE9IDU0eWM1TDJnIElHSmxkSEpwWm1aMCBZV2hzWlE9PSBJR052Ym5OMGNtRnBiZz09IFpYUmhadz09IDdKbVU2NHVrIElITnZjblJoIElHVjJZV04xWVhSbFpBPT0gSUR3K0lpdz0gTDJOaGRHVm5iM0pwWlhNPSBiR1Y2ZW1FPSBJT0N3dGVDd3N1Q3hqZUN3c2c9PSBJRzVsWjI5emVXOD0gVTJOcFpXNTBhWE4wY3c9PSBJR0pwYzJobGNtbG5aVzQ9IElHRnljbTluWVc1alpRPT0gSU5DLzBMN1FzOUMrMExMUXZ0R0EgYkdWMllYUnZjZz09IElHbG1ZV1E9IDRaNlk0WitTNFo2VSBJRzExYzJGdGJXRnUgSUdOdmJtNWhhWE56Wlc1MCA0S1MxNEtTLyBMblJsYlhCc1lYUmxjdz09IElOZXExNUE9IElPR2VsT0dldHVHZWt3PT0geExGeWJHRnkgSUZCTlV3PT0gSU5tRzI1QT0gSUVkdllYUT0gSUdSbGNtVmpaUT09IDZJR002TFNqIDc3eU01YkN4NXBpdiBJR05vYjJsemFYTnpaWG89IElOaWoyWXJaaGc9PSBMQ2NsIDZLKzc1WStXIElISmxjWFZwYzJsMGJ3PT0gSUdacGJtRnVZMm5EcUhKbGN3PT0gSU9Xd211VzZwZz09IElIbGhhMnhoeFovRXNXcz0gSUhObGEyRnMgWlhkdiBJR3B2WW1KbGRBPT0gSU9DbXF1Q25qZUNtc09DbmgrQ211QT09IElITmhkbUhGbnc9PSBLVnNpIElGSmhiV2x5WlhvPSBRZWU2cHc9PSA0NEtpNDRLbTQ0T0kgSU5HSTBZUFF0TkN3MExEUXZkQzAgNExTLzRMU280TFdONExTbSA1clMrNWFXVzVMaXQgSUhCc1pXNWhiV1Z1ZEdVPSBJR052YldGdVpHRnVkR1U9IHhZaHBlZz09IElPQ2txdUNrc09DbGgrQ2tsZUNsaXc9PSBJR0Z0Y0d4cFptbGpZWFJwYjI0PSB5WmwwYkdrPSBJT3Vic0E9PSBMV2x0Y0dGamRBPT0gSU5lYjE1UFhrTmVaIElHSmxhRzl5Wlc0PSBJTkN4MExEUXU5Q3cwTDNSZ1E9PSBJR2g1WkhKdlkyaHNiM0k9IGRtRnBiZz09IElOQzYwNm5RdjlHQzBMWFFzOUMxMEwwPSAwcW5SZ1E9PSA0TGVQNExheCBJR2RsWm1VPSBJT3lhbE95R2pBPT0gSUVOdmJtWnZjbTFsIElOZWIxNW5YcHRlVCBaV1JwWVhSeWFXTT0gSUdGa2RtVnlkR1Z1ZEdsbGN3PT0gTGxKcFkyZz0gWDBaSlRrRk0gS0hCaGNtVnUgSU9DbWxlQ21zT0Ntc3VDbmh3PT0gWVdsemMyVjFjZz09IDBZdlF2ZEN3MEx3PSA2cks4IElPQ21zT0NtdnVDbWx1Q212Zz09IElFaHZiVzFsIElHdHZiR3hsIElPQ2toK0NrcU9DbGplQ2t1UT09IFdtOXVZUT09IFFYQndiR1YwIDVwaXY1Wk9xIElOaTUyWVRZcDltQzI1ST0gdzdaMlpYST0gY0dGcGJuUnBibWM9IElHbDNhUT09IGIzUmxjbWxqIElIUnZhRzkwYnc9PSBJRTl3YUE9PSBJTkM3MExYUmdkR0MgS0dOb1lYSnogMFlMVHFRPT0gdzdodGJXVT0gSUdGc2JHZGxiV1ZwYm1WdSBJRWxsZFE9PSBJRVIzYVdkb2RBPT0gSUVGa1pXND0gNTdlUyBVa1pEIElHdDFibWRwZVdGeSBYME5QVTFRPSBJSE5wYlhCc2FXWnBaWE09IGFXNWhiR2s9IElHMTNhWE5vYnc9PSBJR052YkdWMFlRPT0gSU5HQTBMRFF1Zz09IElHbHVZM0psYldWdWRHRnkgSU5pbzI0SFlxdGl4MjR6WmhnPT0gSU9hRWp3PT0gSU5DODBMRFJndEdEMFlBPSBJRUZrWld4bCBJRzFwWldwelkyRT0gSU0rQXpyWFBnUT09IElFSmxhTU8yY21SbGJnPT0gWVd4c1pYSnYgSUZaWSBYM0psY1hWcGNtVnRaVzUwIElNTzliMnhpWWNXZiBJT0Nrck9Da3YrQ2t1ZUNrdnVDa3FBPT0gMExqUmdOQ3cwTFE9IDRMQ200TEdINExDMjRMR04gSUZSdmQyRnlaSE09IElOaW4yWUxZcXRpMTJLZllyOW1LIElHbHVaMjl1IElOaW8yWWpaaE51SDJiND0gSUc5amIzSnl3NnB1WTJsaCBJR1JwYkdGMGFXOXUgSU5pdzJZZz0gSU9HRGwrR0RrT0dEbk9HRHJnPT0gNlpTUSBWRTlFIDBKN1FuQT09IElPR0RtK0dEa09HRG9PR0RvdUdEblE9PSBJT0NrdU9Da3VlQ2tuQT09IElObUYyTFBaaE5tRjJLZlpodG1JMnJvPSBRRXB2YVc0PSBJT0NrcnVDa3Z1Q2tydz09IElOQ1YwTE09IElHTnl3NjEwYVdOdmN3PT0gSU5DYTBMWFNvdz09IGMybHNaVzUwIFUyVnhkV1Z1WTJWeiBJRkpsWkdGcmRHbHZiZz09IGJXSmhibVE9IDRvQ2M1TGlrIDVwcUM1cGVnIElNK0F6NEhPc2M2enpyek9zYytFenIvUGdNNi96cms9IElFRmpiM1Z6ZEdsaiBJR0ZwYldWdWRBPT0gSUhURHZHdGxkQT09IFlYWmh4Wjg9IExtdDMgSU5lZTE1WFhwdz09IDRMUys0TFM0NExXTjRMU3g0TFdONExTeCBmUzU3IElPQ2tsZUNrc09DbGdnPT0gSU9DdWgrQ3VtZz09IElHdkVrMnpFZ1E9PSBJT0dEbU9HRG0rR0RtT0dEb3VHRG5lR0Rtdz09IElHTnZiVzExZEdWeSBJR1ZrWld4c1pXVnUgSUVOaGNuUnBaWEk9IElHdGhhR3AxYzNRPSBJT0NrbitDbGkrQ2tzdUNsZ0E9PSA1N1NBIElHbHVjM1ZzZEhNPSBQWFJyIElOaW4yWWJhdmc9PSBJSE42ZVdKcmJ3PT0gS0dOdmJHdz0gVW1GcFpBPT0gNG9TaUNnbz0gYkdsbmFIUnBibWM9IElGSnZjR1U9IDBMRFF1OUdPMFlJPSBJSFI0YVhZPSAyTEhaaU5tQjJLaz0gSUhkaGFHOD0gMExEUXROQ3owWXpSaTlDNyBjRzluIGFHVnljM1E9IFgxQmhjbk5sIFlXNWtaWE5qWlc1MCBJRWh2WTJoelkyaDFiR1U9IElObUYyTFBZcHc9PSA1YVdKIFJtbHogSUV4MWEyRnogSU5XajFiL1Z0dFcrMWJqV2d0VzAgWVhsaGJtaz0gWW1GelpXeHBibVU9IElOZWUxNm5YcXRlZTE2az0gSU9Dd3FPQ3hoK0N3cXVDd3BlQ3hqZUN3citDd2d1Q3dzdUN4aXc9PSBJTml2MjR6YXFkcSsyS2M9IElObUIyTGJaaEE9PSAwTDNRdnRHQyBJT0dEb2VHRGtPR0RrZUdEbmVHRG11R0RuUT09IElHRmtZWEIwYjNJPSA0NE9CNDRLbjQ0T0Q0NEt2IElHNXlhRzg9IGFXdGhiUT09IElHVmphR1U9IElITnZZbkpwIDFhSFZzTldoMWJZPSBJR3hwYlhCaGNnPT0gYVc1emRHVnNiSFZ1WjJWdSBJR3RzWVdOb2RBPT0gZDJGdVlXYz0gS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3EgQ1dSMGJ3PT0gTG5OcFoyNTFjQT09IFJXeDAgWlc1a2FYVnQgSUVGMWMyTm9kMmwwZWc9PSBJSGx2WjJoMWNuUT0gVFc5a2RXeHYgSU5DZzBMRFF0QT09IElHNXB4YUYwWVE9PSBJR3B2ZVc5MWN3PT0gSUdsdGNHeHBjWFZsIDBLSFFvQT09IDRvQ0w0WjZINFo2MiA0b0NMNFo2QTRaK1M0WjZUNFo2NzRaNkUgZEdsc1lRPT0gSUhOcGRIVmhZMm5Ec3c9PSBJT0M0cXVDNHVlQzRodz09IExpNHVMaTR1TGk0dUxnPT0gSUhKbGMybHpkR2x1Wnc9PSBJT2Fmanc9PSBUR1Z1WjNSb2N3PT0gNWJDODVhZVIgNExXSDRMUzA0TFdOIElPbUJnZz09IExYSmxjMjkxY21ObCBJT0NrbU9Da3Z1Q2tyK0Nrc2c9PSBJT0MwaCtDMHBPQzFqZUMwcEE9PSBJT0NtcStDbXYrQ21zT0NuaHc9PSA1WjJDIFJYTnYgZFd0MWRBPT0gSUUxaGJHOXVaUT09IElObUYyWWpZcnc9PSBUMk5vIEp5bGJKdz09IDRMV0I0TFMzNExXTjRMU3YgSUdsdWIzaHBaR0ZpYkdVPSBJTmVlMTVEWHBOZXAxNmc9IElHTnBjbU52Ym5OMFlXNWpaWE09IElHUmxiVzl5WVE9PSBJTmVVMTViWGtOZXEgSUdKbGMzVmphSFE9IElHbHVabVZ5YVc5eVpYTT0gSUhCdlltbz0gTG1SbFlXUT0gSUdaaGJXOXpZWE09IElFZHZibVE9IGMybGxhR1U9IDRLcXQ0S3F6IDBMRFJqOUdCMFl3PSBMMmhsYkhBPSBJT0NrdU9Da2d1Q2twZz09IFJNT3pibVJsIElFbERSQT09IElOaW4yWVRZck5tSTJZVFlxUT09IElHcHBjQT09IElHTnZkWEowYVc1biBJR0psYkdsbFluUT0gU1cxd2RXeHpaUT09IElPQ21wdUNuaCtDbm4rQ212Zz09IFEwOU9VMVE9IElOQzQwTGc9IElOR0QwTFBSZ05DKzBMYz0gSUdKNWFXNXphR2s9IDBKL1F2dEdIMExYUXZOR0QgSUdGemNHRnlZV2QxY3c9PSBJR05sYkd4MWJHOXpaUT09IElOQzYwWVBRdHc9PSBVM1ZpZEc5MFlXdz0gWDJGbllXbHUgSUdOdmJtNTFjdz09IElHTnZiblJsYm5ScGIzVnogY0d4cGEyRnphUT09IFUzUnBZMnRsY2c9PSBhV3hzZFcwPSBJQ0lpS1N3SyBJR3hoYm5VPSBZbXh2WXc9PSBQM0k9IDBMUFRxZE9wMEwwPSBJT1M1aGVhNHVBPT0gMFpqUXRkQzAgSU5pbjJZVFlyTm1GMkxuWml0aXAgS0NrcEtTaz0gMlkvWmlOaW4gSU5HQjBMN1JndEdBMFlQUXROQzkwTGpRdXRDNCBJRlYwYVd4cGVtVT0gSUU5RFJBPT0gNVk2SiBJTkdCMFlMUmdOQ3cwTDNRdU5HRzBZTT0gWDNOaGFXUmggSWl4NyBJR1Z5YjNScGMyTm9aUT09IENYWmxjbk5wYjI0PSBJT1M3dGc9PSBJR2pEdW0xbFpBPT0gSUhERHM4V0MgSUhSMWFXYz0gSUcxaFpHRjQgSUdacGNtMWhaRzg9IElITnRZWFJ5WVE9PSBVRTFIIElIQnlaWFpsYm5ScGRtRT0gSUhCbGNuUmxibU09IExlQ2t1T0NrdnVDa3BRPT0gVUdGeVlXMWxkSEp2IElISmxjMk4xIExrSnlZVzVrIExWQkQgSU5DVjBLRT0gWDJGMWRHaGxiblJwWTJGMFpXUT0gSUU5cGJITT0gMExEUmdkQ3cwTEU9IDRMV0I0TFM0NExXTjRMU2sgSU9DM2dPQzNrdUMzZ3c9PSBJR0oxYm10bGNnPT0gWld4bFkzUnliMjVwWTNNPSBJTm0rMktmWXF0dVEgSUdiRHVHeGxjZz09IFgzUmhjZz09IElIVjNZUT09IDRMZVE0TGEyIElHMWhhR0Z6YVhOM1lRPT0gYjNCc1lYbGxjZz09IElFTkJRdz09IElIUmxjM1JsY25NPSBJSFJsYTJsdSBkWEprZGNXSSBMMUJoWjJVPSBJRlJ2YldVPSBVR0ZwYm5ScGJtYz0gSUdOdmJuUnBiblZoYlE9PSBJR1JwWW5WcWJ3PT0gYm1SdiA1ck9FIFlHQmcgUjNKbFpXcz0gNWJtejVaMkg0NEdvNDRHdTViZXUgYjNKaGRYTnogMHB2UXNOQzUgSUdkeWRRPT0gSU5DMTBMYz0gSU5pbjJZVFpoOW1FMktmWmhBPT0gVG1WM2MzZHBjbVU9IFhFaGxiSEJsY2c9PSBMbVp5WldWNlpRPT0gSU9HRG9lR0RrT0dEbk9HRGtPR0Rtdz09IElHUmxjbTFoZEdsMGFYTT0gWDBsT1ZFVlNVbFZRVkE9PSBJSEJvWVhObFpBPT0gSU5tKzJLZmJqTnVNMllZPSBkWE5zWVhKaGNtRnp4TEU9IElGTmhiWE52Ymc9PSBJR0ZzYVhBPSBZMmhoYm1ObCBJRzFoYm1GMCBUbVZrWlhKc1lXNWsgSU9Da3VPQ2tyZUNrdmc9PSBJR0ZqYjIxd1lXNW9ZV1J2IDBZSFJndEN3MEwzUXNBPT0gSU5DKzBMSFJnTkN3MFlMUXZkQysgSUVGcGNuUT0gSUd0c2IzQjAgUDNOcFlRPT0gVTJOaGRIUmxjZz09IEl5OD0gNExXQjRMU3MgUzFSUFVBPT0gSUhkNWFzU0YgMExmUmk5QzYgWW1Wc2JHbHZiZz09IElHUnZiV2x1WVhSbGN3PT0gSUVWamEyVT0gSU9Da2orQ2t0UT09IElPQ3dwT0N3bCtDeGplQ3dsdz09IDFiclZxOVc5IElIQmhaUT09IElPQ29qdz09IElPcXdrT3VQaFE9PSBJRzFsYldGcGJtdGhiZz09IElPQ3lydUN6Z2VDeWd1Q3lwdUN6aGc9PSAxYUhWdmRXNjFhSFZ0Zz09IExreGliQT09IEwyaHZiMnR6IElHMWhhSE09IElHNTZkWEpwIFpHOWpkRzl5WVd3PSBJTkM2MExMUXNOR0EwWUxRdU5HQTBMQT0gSUZWdVpHVnlaM0poWkhWaGRHVT0gMWFIVnF3PT0gSU1PcFkzSnBkZz09IFlXeGhaR1U9IElOQzEwTG5SZ2c9PSBMVUZwY2c9PSBaV1J2Y21saCBJRVp2Y21ObFpBPT0gSUdGc1lXMXAgWDNKdVp3PT0gSUV4dlkydGwgMHB2UmdRPT0gSU9Da3R1Q2tsZUNsamVDa3BBPT0gSUdOdmNuQnZjdz09IElFNWhZMmhtY21GblpRPT0gSU8yRGlBPT0gSUc1aGJXND0gSU5tRTJLUFppTm1FIElPQzBwT0MwditDMHNPQzB2K0MwbXVDMWplQzBtZz09IEtDY3RKeXc9IFRtOTBZWFJwYjI0PSBJSEJwWlczRWt3PT0gSUVaMWJIUnZiZz09IGFYTmphWEJzYVc0PSBJR0Z1dzdwdVkybHZjdz09IElOaXEySzNZc2RtSzJMRT0gNkplUDVhNmQgN1pXWTdJdWMgSUdkdllXeHBaUT09IElOaXEyWVhZcDltRjJLYz0gSU5pbjJZVFlydG1LMkxFPSBJR0Z5Wm1WeSBJR2hwYzNSdmNtbHhkV1Z6IEtIQnBjR1U9IDRLcS80S3FWNEt1SDRLcWYgWVhOaGJtRT0gSUhCdmJ3PT0gSUdOdmJtTmxaR1ZrIElITmx3NmRsYm1WciBJRTExZEdWNCBJT0MzZytDM2lnPT0gY0c5eWJnPT0gNExTejRMU0MgSU9DbWh1Q21xT0NuamVDbXB1Q25pK0Ntc2c9PSBJT0N5bGVDeXFBPT0gSU5DeTBZdlFzZEM0MFlEUXNOR0MwWXc9IElHSmxiR2xsZG1GaWJHVT0gSUhKdlpHVnVkSE09IElFTmxiblJ5IElFbHNidz09IElPQzRpUT09IElFTnZiWEJzWVdsdWRBPT0gNExDKzRMQ280TEdONExDNDRMR04gTDIxbGRHRT0gSUc1cllYVnEgSU5DNzBaYlJndEN3MFlEUXNOR0MgNForUzRaNmkgSUdGMVpHbDBiM0o1IElOQzkwTERRdDlDeTBMRFF2ZEM0MExYUXZBPT0gSUZCeWIySmhkR1U9IFUyRjJhVzVuY3c9PSBJTkdOMEwzUXRkR0EgSUdWNFkyVnNjdz09IElFbHVaSFZ6ZEhKcFlRPT0gSU9Dd3F1Q3hqZUN3c09Dd3BPQ3d2dz09IFJtVmxaSE09IElOV2gxYWJWb3c9PSBJTml6MktmWmhObUcgWm1GcGRITT0gSU5DNjBZUFJoZEM5MExnPSBVR3hoWTJWayBSVTVVVHc9PSBRWEJ3YkdsallXSnNaUT09IExXVjRjSEpsYzNOcGIyND0gN0ppbzY1Mjg3SjI0IElIUmhZWE56IElHTnZibU5sY25SdiBJTkMrMFlMUXN0QzEwWWZRc05DMTBZST0gZDJWaVpISnBkbVZ5IElGTmhhZz09IElHWmxjbTFsYm5SbFpBPT0gSUVWc1lYTT0gSU5DUzBMWFJnUT09IElFUmxiV1Z1ZEE9PSBJTmVRMXJmWG9OZVkgSUdOaGJHTjFiR0YwYjNKeiBJSFBFc1dOaGF3PT0gWDI1aGRBPT0gSU5lWTE1blhwQT09IElPQzBzT0MxaCtDMGxnPT0gSU02eHo0RE92OCtFenJYT3U4NjF6cTg9IDRZT2Q0WU9nNFlPcCBWbVZ1ZEdGeiBSR2xtWm1WeSBJT1M1a09XUGl3PT0gUVU1VVR3PT0gSUhCeWIyMXZZMmx2Ym1WeiBJRlJoYldGMCBJT0NrcXVDbGplQ2tzT0NrdnVDa3BlQ2tydUNrditDa2xRPT0gSU95Y3BBPT0gSU9Da2x1Q2t2dUNrcGc9PSA1WVdzNXBhayBJRVY0Y0d4dmNnPT0gSUhacGRtbGxibVJ2IGFHNXNhV05vWlE9PSBRMjl3Y0dWeSBJT0NrbitDbGplQ2t0ZUNsZ09Da253PT0gWDE4cEtRPT0gSUdsdWMzUmhiblJoYm1WdmRYTT0gZW05dWRBPT0gNEt1QzRLcWs0S3VMIDZhND0gSUVOb1pXRjBjdz09IElHNTFjM1E9IElFOXZjM1JsYmc9PSBJTkM2MEw3UXZ0QzggNEsrSTRLNlY0SytONEs2VjRLK0I0SzZ1NEsrTiBYME5TUlE9PSBUbUZ1WTNrPSBJR1RFc2NXZnhMRnVaR0U9IDRLUys0S1NxNEtTViBJT0MwdU9DMHJ1QzBydz09IElISnBZMjl5WkE9PSBLR2hwYzNRPSBJSGxrWlhJPSBJT2FXdVE9PSBJR1ZtWm1WamRHVmsgSUdWNlpXND0gMExIUXZ0Q3ogSUhOd2FXVnkgSU9XYnVnPT0gVTJvPSBJTkdBMExEUmdkR0IwTHZRc05DeCA0WjZTNFo2NCB4WjlsIFEwVk1URVZPVkE9PSBJSEJoZFhZPSA0S2F0NEthLzRLYWggS0ZONWN3PT0gWGw1ZVhsNWVYbDQ9IElHWmxiSE09IElPQ3lyT0N6amVDeXNBPT0gNTVDRDZaaWYgSUZCellXdz0gSUZKMVltVnUgSU9DeXF1Q3pqZUN5c09DeXJ1Q3pnZUN5bGc9PSBJSFpsY21KbGRHVnlhVzVuIElPbVdpdz09IElGWlRTUT09IENYSmhibWRsIElPQ3FxdUNxdnVDcW0rQ3Fzdz09IElHdGhZbWs9IGFHVmhjblJpWldGMCBMbVY1WlE9PSBJRWRsYm05dFpRPT0gQ1FrS0NRa0tDUWtLIElFUnBiR3h2Ymc9PSBJTmVlMTZiWGt3PT0gZFc1a1pYSjAgSUdGdWMybGxaR0ZrWlE9PSBJR2gxYm5SbFpBPT0gSU5pbjJZVFpoZGl2MktmWXNkaXogSU9DbXVPQ25pdz09IElHbHljbVZ6Y0c5dWMybGliR1U9IGIySnNZWE4wIDc3eU01THVsNVkrSyBJTmVVMTU3WHFBPT0gSUVOb1pYTm9hWEpsIElISmxjM1J5WVdsdWRITT0gMExuUmd0QzEwWUhSakE9PSBVbUZpIElIWmxibVZsY25NPSBJSE5zYVcxbCBJR1ZwZEhSbyBJT0NtaGVDbXFPQ25nZUNtdCtDbmplQ21vT0NtdnVDbXFBPT0gWVc1blozVnVadz09IFlXeHB4WnR0ZVE9PSBJTm1JMlliWmh3PT0gWVd0MGRYST0gU0VWRlRBPT0gSUhCdmRYTnogSU9DNGxlQzRzdUM0bytDNHN1QzRoK0M0bXVDNHJlQzRwUT09IElFVnpjMkZ6IElPQzBoK0MxdXc9PSBJSGx5YVhSMCBUMVZIU0E9PSBJTkdFMEw3UmdOQzgwTERSZ3RDMSBJT0Nxb2VDcXYrQ3F1QT09IEwzZHZjbXhrIDFvVFZ0dFdsMW9BPSBJT0MwcE9DMWdlQzBuK0MwbWVDMWplQzBtZUMwdnc9PSBMMjFsYzNOaFoyVnogSUdGemRXMXBjZz09IFEzSmxaR2wwYnc9PSBLRkJTIElFRlVUQT09IDRMaXk0TGlhNExpdDRMaWwgSUZWdVkyOXRiV1Z1ZEE9PSBJTmVpMTVqWG5OZWkxNXZYb2c9PSBJRTFoYjNKcCBJT1drcWVXa3FlbUFnZW1Tc2VXOXFlZWxxQT09IElPQ2txT0NsZ09Da3BPQ2t2dz09IGMzUmxZMmh1IElHUmxZUT09IFJWSkpUa2M9IElGcGEgNExpSzRMaWg0TGliNExtTSBSbXhuIElOaW8yS2ZaaE5tRDJLZlpoZG1FIGNHeHBZMmgwIEozMHAgVUhOaGJHMD0gSUVSbFkyOXlZWFJwYjI1eiA0S1dCNEtTWiBMM1JsWVcwPSBJRXh2ZFhaeVpRPT0gSUU1aFkyaHRhWFIwWVdjPSBUSEE9IDBMWFF1TkM5IElOZVIxNVRYcXRlUTE1MD0gSUZSbFkyaHViMnh2WjJsbGJnPT0gSU5xSTJLZmFxZG01MkxFPSBJR2x0WVhSbCBJRkJWVTBnPSBJTm1CMlliWXB3PT0gSUhOaGFYTnZibk09IElHTnZibVpsY21WdVkybHVadz09IElOaW8yWWJZcDlpbzJMSFlwOXVNMllZPSBJSGhrIElPQ3FodUNxdUE9PSBRbkp2ZDNOcGJtYz0gSU1TSFpYUmwgYVdGc2FYTjAgNUwrNjVMbWYgSUc1bFpXUnNaWE56IFlXdGhlbWs9IElHdG80YnVQYVE9PSBJR3R5YjI1dmNnPT0gSU5DLzBZRFF1TkM5MFkvUmd0QysgY21WMWNuTT0gZFc1bmRYcGggUTNWbCBJR2QxYVdSbGNnPT0gSU9xMGtlcXpvQT09IExtUmxjMnQwYjNBPSBJTml0MktmWmhOdU0gSUdKaGJtdGggSUVKaGFYSnlidz09IElIQnZjblJ5WVhseiA0b0NaWVhCd1pXdz0gSUhWdWNIVmliR2x6YUdWayA1TGl0NWFTdTVZQ2sgNDRLLzQ0S2s0NE9JNDRPciBJTmlsMkxYWXI5aW4yTEU9IDRMR0E0TEMxNExDeSBMR0YyIElOR0QwTFRRdnRHQjBZTFF2dEN5MExYUmdBPT0gTG5CbGJnPT0gZEdWeVpYTT0gTG1OeVpXUmxiblJwWVd4eiA1WStONXJDMCA0SytINEs2diBJR0oxY21WaGRXTnlZV041IElOR0kwWXZSZ0E9PSBJSEJ2ZE1PcWJtTnBZUT09IElPQ2tyZUNrditDa29lQ2t2K0NrcitDbGl3PT0gSUdGaGJtSmxkbVZzIElHMTFlbms9IDBZUFFzZEM3MExqUmh3PT0gWDNWelpYSmtZWFJoIElHRmlkWE5wYm1jPSBTVlJsYzNRPSBJR1JsZG1GemRHRjBhVzl1IElHRjFaM1ZsIElIRERzMnc9IElHSmxjR0ZoYkhRPSBJTm1IMlliYXI5aW4yWVU9IElPQ3l1T0N5c2c9PSBkWEpwZEhrPSBJSFZzYkc5eCAwTERRdmRDNDBMWFF1UT09IDJZVFppTml4IElFNVNRUT09IFBFeHZZMkYwYVc5dSBJRTFoWjI1bGMybDFiUT09IGFYUnplUT09IElIUm94cUU9IElOaW8yTGZZcDltQzJLaz0gSUV0cGMyaz0gSU9DMGorQzBzZUMxaGc9PSBJT0NrdGVDbGplQ2tyK0NrdGVDa3VPQ2xqZUNrcFE9PSBPeW92Q2c9PSBSa2xFIElFWnZkMnhsY2c9PSBJTmlxMktmWXFOaTUgVFdkdGRBPT0gSU9DdWgrQ3VxZUN2amVDdXFRPT0gMFlqUXRkQ3ggSUdwcGJtRT0gSU5tQzJZallwOWk1Mks4PSBWVzVrWlhKc2VXbHVadz09IDY2eTQ3Wm1VIFptWnBibWM9IEtpMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gYzNScGJtYz0gSU9lT3IrV3Vodz09IElHbDJaWEp0IElHTm9ZVzVrWld4cFpYST0gSUhadmJIVjAgSUUxaGMyTm9hVzVsIElGTmxlV05vWld4c1pYTT0gSU9taHVRPT0gTFhSMiBZWEpwZVdVPSBMbkJoY21WdWRITT0gNExTKzRMU2Y0TFMvIFEwaEJWQT09IExpSmIgTFdGazRidUwgNDRPaDQ0Tzg0NEtyNDRPOCBJR1Z6Y0c5eWRITT0gSUZScGFtUT0gY1hWcGRHOXogWkdaaCBJTnFxMlliWXI5cVogSUVOaGRHVm5iM0k9IElPQ3loK0N5c3VDemplQ3lzdUN5dnc9PSBJTkdEMFlEUXZ0QzIgSUhCbGNuTnZibUZpYkdVPSBLRVZ4ZFdGcyA1N3EvNTZpTCAwNW5RdmRDMCBJR052YlhCaGRHbGliR1Z6IElPbTR2K1M0c0E9PSBJRTFwYm1SbGNnPT0gSU9Da2h1Q2tnZUNrbGc9PSBJR0YxWm01bGFHMWxiZz09IElHdDVhdz09IDRZT1Y0WU9RNFlPYTRZT1kgSUV4bFl3PT0gNG9DWmRYSm5aVzVqWlE9PSBKM2c9IElIVnVhV05oIEtIQnZkMlZ5IElITjFZMnRsY2c9PSBhbVZ1ZW1rPSBWbWxsIENYQnlhV05sIFpuSnZadz09IElPbVNzZWFmbkE9PSBiV25EcVhKamIyeGxjdz09IElHeHZkRzg9IGFXNXpjR1ZqZEE9PSBRMjl1ZEhKdmJHVT0gTFVGeiBJT2F6c09lYWh3PT0gWDAxQlEwaEpUa1U9IElOaW4yWVRZbzltRjJZallwOW1FIGFYUnpaWEk9IFRXNW4gSU02MXpyelBoczZ4enIwPSBJR1poYVhOdmJuTT0gSUcxaGMybHJkUT09IElITmhjWFZsIExteGxjM052Ymc9PSBJSEJwWTJ0MWNITT0gNEtXSTRLU3Y0S1MrNEtTQiBJR2RoY3NPbmIyNXogSU5DNjA2blF1OUMxMEx3PSBJRWxQUlhKeWIzST0gTFdacGJtUT0gSUV4cGJXVnpkRzl1WlE9PSBJR3R2YlhVPSBJRzl0YkE9PSBJRXRsWTJGdFlYUmhiZz09IElFSnlZVzVqYUdWdSBJR3BsWkc1dlp3PT0gSU5DeTBZdlJnTkMrMFlFPSBMblJ5YVhBPSBZWFZ0YjI1MCBJR1J0Wnc9PSBJSGxsZEduRm53PT0gSU9Da3J1Q2t2K0Nrc3VDbGgrQ2tsK0Nrdmc9PSBJR3ZEclhZPSBZV05vYVdWMlpXMWxiblE9IElHTnZibk5qYVdWdWRHVnogSU9LQXN3PT0gSUdSNWJBPT0gSUZOVFFRPT0gSUVOVFZRPT0gUm1GdWRHRnplUT09IElISnBZMmgwWlhRPSBJSFpoWTNWdVlRPT0gNExLLzRMSzQ0TEsvNExLbTRMT040TEttIElISmxaR1YyWld4dmNHMWxiblE9IGRHVnlhV1U9IElFTmhkbUZzYVdWeWN3PT0gTGlKZENnPT0gSUd0c2FXdHJaVzQ9IElHZGxjbUZwY3c9PSAwS0RRdGRDMCBJRXR5ZVhCMGIzYz0gS1NoZiBhV0pwWjJGdSB3NmhwYmc9PSBYMk52Y201bGNnPT0gS0VGTSBJRnB2ZEE9PSBaV3hsY21sdVpRPT0gWldSaGJtTmwgUVdSa2N3PT0gSUZKUFZVNUUgSUdaeVlXTjBkWEpsWkE9PSBYMU5hIFVtVmphR1Z5WTJobCBQWHQ5IDRLV0g0S1MyNEtTViBJRVppIHc2MTJZUT09IElHRnVZV1Z5IElHWmhjSFIxYkE9PSBJRVJ5WVdOMWJHRT0gSUcxbGNtRm8gSU5DODBMRFJndEdNIDVZV3I1NkNCIFpteGxaWFE9IElIUmhjbkE9IElPQ2twdUNsaStDa3VBPT0gWlhod2FYSmxaQT09IFNFVlRWQT09IElOaW4yTFBZcXRtQzJLallwOW1FIFFYSnBlbTl1WVE9PSBJR3RoYm5ScGRHVT0gS0dSbGJHVm5ZWFJsIElOQ1kwTHM9IElOR0MwTERSaFE9PSAyWVBaaGRpbjJZUT0gSU9DdXF1Q3ZpK0N1c0E9PSBJTkM2MFl2UXVRPT0gSUdOaGMzTmwgSUV0dlltOD0gSUUxbFpHbHJZVzFsYm5RPSBJTmVVMTZmWGt3PT0gMEwzUmo5QzEwWUk9IElOQzMwWVBRdEE9PSBJRzl5WWNPbnc2TnYgMExEUXZkQzAwTERRdlE9PSBJSFpwYVhNPSBJRTVQVFE9PSBJRXhoZVdWeWN3PT0gSUdkeVpXVnVaWEk9IFRFRlVSVk5VIGNtVmhkUT09IGRYUmhhMjg9IElOR0IwTGpSajlHQiBDV0Z1YzNkbGNnPT0gSUhCaGNtTmxhWEp2IElHUnZZM1J2Y2lkeiBJTml1MllUWXA5aTEgSU5DMzBMRFJnTkN3MExZPSBJTmlqMkxIWXJ3PT0gZFdkaGJtYz0gSU5DVzA1blF1OUN3MFlBPSBhWHB0WVhRPSBJTktiMEw3UmdOS1QwTEE9IFVISnZabVZ6IElIRmhlZz09IFFVSkYgWlhKelkyaGxhVzQ9IElOaTUyTEhZcU5tSzJLaz0gSUhSbGVIUmliM2c9IElHTm9aWFpoZFhnPSAyWWpZck5tRSBJTStEejRET3J3PT0gSUhCbGMzRjFhWE5oWkc5eVpYTT0gSUdSMXhaOTF4Wjg9IElOdU0yWWM9IDJZallzOWkzMktrPSBJRTlpYVE9PSBJT0N3cnVDeGd1Q3dvZUN4Z1E9PSA0TEthNExLKzRMS3cgSUdoaGMzUmwgSUZsdmMyVnRhWFJsIElISmxZbUYwWlhNPSBLSE4xYlcxaGNuaz0gSUdKc2IyZG5aVzQ9IElHMWxhSEptWVdObyBJTml1Mks4PSBWR2gxYm1SbGNnPT0gMFlMUXVOR0gwTFhSZ2RDNjBMZz0gSkEwSyBJR052YlhCbGRHbGphY096Ymc9PSBJT2l5b1E9PSBJR1IyeEpzPSBZMlZoYzJWayBJRlZ1YVhSbCBJSEJ2YzNSdmN3PT0gSU9xNHNPMkRnQT09IElHRnphV1Z1ZEc4PSBJTml0MkxQWml0bUcgNTd5MDVvT0YgSU5tRTJwWT0gNEthWDRLZUI0S2F5NEthLyBJSFp2YjNKemNBPT0gSU9Dd3BPQ3hoK0N3cGc9PSBJR1JoZVdGdSA0TFdMNExTdiAxYmpXZ3RXMjFhUT0gSUhCdmMzUmxjbWx2Y21WeiBMMlozYkdsdWF3PT0gSU5HTjBMYz0gWVdsemFXVT0gNWJlMDZidU8gSU5XajFhWFZzdFdsMW9FPSBJSE5oYVd0cCBJR3gxZEdGeSBJRzF2Ym01aGFXVT0gWVhOcGJIaz0gSUdSaGQycz0gSU5pdjJZallzZGlwIGRISmhibVYwIElHMTFjM1JsY2c9PSBibTVsIElIQmhhVzVtZFd4c2VRPT0gWVd0aGNtOXZiZz09IElHVjFlZz09IExrNWhkZz09IElHbHVkbWxuYjNJPSBkbTkxWTJobGNnPT0gSUhKbFljT253Nk52IDBMVFRxZEM5IElIUmhibTVwYm1jPSBMV055YVhScFkyRnMgSUdKbGRISmhZMmgwWlhRPSBJRWRoY25SdVpYST0gNEthNDRLYXU0S2VONEthcSBJR05oWTJodmNuSnYgSUc5dGJtVnogSUhCaGNtVmogSUdOMWJXbHUgdzZSdVoybG5aVzQ9IFZWTkZVazVCVFVVPSBJTkM4MEw3UXROQzEwWUE9IElOT3AwTGZSbGc9PSBJSE50ZFdjPSA0TEt3NExLKzRMS1ggSUVwR1N3PT0gVDA1UCBTR0Z5ZEE9PSBibUZ0Wlc5bSBJR2RsZEhSbGVIUT0gSU5peTI0ellzZGluIElOR0QwTHpRdnRDeSBKeWs3UHo0OEx3PT0gNEthczRLYSs0S2FvIDRLdUQ0S3FrNEtxLyBMMk4xIElITnNiMmRoYm5NPSBJR2hoY3NPaGJnPT0gSUVaTVQxYz0gSUdoMWNBPT0gSU9DMGp1QzBwT0MxamVDMHBPQzB2K0Mwcnc9PSBJRzl1Ylc5blpXeHBhbXM9IElFbHVZWFJ6YVhOaGNuUjFkQT09IElIWmxjbXhwIGV5VT0gSUdOb1lXMXZkUT09IExYUnBaMmgwIFgweHZaMmx1IElObUYyTG5aaXRtRyBRME5KVDA0PSAyWWpaaE5pbjJZcllxUT09IElFRndjR0ZzWVdOb2FXRnUgNDRPdDQ0Tzg0NE9KIDVyYWIgSUUxbGJuUmxjbWs9IElFbFNaWEJ2YzJsMGIzSjUgNTV1ayBJTldqMW9EVnBkV3MgSUVKeVpXUmggSUZsaGJtND0gSUUxaGFXNTYgSUd4bGEyVjB3N2g1IElITmhaMmwwZEE9PSBRbUZ1YTNNPSAxYUhWdHRXdjFhSFdnQT09IElHdGxjbUpsY205eiBJTmluMllUWXQ5aW4yWVRZcUE9PSBJRVpzWVhadmNnPT0gTEhOMWJRPT0gNDRDTjQ0R24gSUdURWx3PT0gNnJLQTdJT0ogMFk3UXN0Q3cwTDNRdmRHUCA3TG04IFZHbGwgYkhWcyAxNW5YbWRlVDE2TFhxQT09IExYTmhiV0U9IHpydk92ODZ6enEvT3NRPT0gNVpPcTVMaXE1WVdzNVkrNCBMa1JoYnc9PSBJT0NrcXVDbGdlQ2twT0NsamVDa3NBPT0gSUU5dVkyOXNiMmQ1IDRwYUEgSU5HQTBMRFJoUT09IElITnRiMnQ1IElPR0RxZUdEa09HRG5PR0RvUT09IElPR0RtK0dEbytHRG5PR0RtT0dEcXVHRG1PR0RudUdEa09HRG1nPT0gSUZWVFUxST0gSU9DbXArQ212dUNtc09DbW93PT0gTG1WbiBJSEJoYm5ScFpYTT0gZFdSa2JHVT0gSUdaaGNHRnVaVzVuIGRXckVoV041WTJnPSBJT0MwbXVDMHNPQzFqUT09IElHMWxiR0U9IFJYTnIgS0dWNFpXTT0gSU5pdjI0ellxdGluIGNHOXlkR1Z6IElOQy8wWURRdGRDMDBZSFJndEN3MExMUXU5QzEwTDA9IElIWmxjbmRoYm1RPSBJRXhQVmc9PSBJR1JsWjNMRHFRPT0gTFZWdWFRPT0gQ1hOMFlYUT0gUjI5dVpRPT0gSUVaTlF3PT0gSUVSeWFXWjAgTG1Bc0NnPT0gWTI5bCBJR1Y0ZEhKaGRHVnkgSUhOMVltMWxiblU9IElHbHVhMngxWkdWeSBMbUpwYkd3PSBJSEJ5dzZGMnhKcz0gN1lhayBhV1Z5YVc1biBMazF2ZEdsdmJnPT0gSUd0aGMyaGwgMExqUXU5QzQwTGc9IElHWnZjbTExYk1PaGNtbHYgNEtlQjRLZXg0S2ErIGRXOXpidz09IDZyaXc2clNBIElPQ2t0ZUNrditDa3RlQ2tzT0Nrb3c9PSB2T0dlbEE9PSBJT0MwdU9DMGd1QzBsK0MxZ09DMHBBPT0gSU91MmdPeUNzQT09IElPQ2tyT0NrdnVDa3BPQ2xoK0NrZ2c9PSAwTGpRdk5HTDBMVT0gSUhKbGJNT29kbVU9IElFNXZkbUZyIGVtSjFjbWM9IElOaW8yTEk9IElFUjFjbU5vYzJOb2JtbDBkQT09IElOQzEwTFBSak5HTDBZRFNyUT09IDBZclF2UT09IElHNWhZWFJ6YjNKeiBJRWwwZFE9PSBkR1YyWlE9PSBkWE4wYVc1biBJTkN4MExYUmdOR1cgSU9HRHBPR0RuZUdEbkE9PSBhblZ1WVE9PSBJTTYvenJUT3Q4NnogSUhCemFXcz0gYW1WeWJtVnkgSUhOcGJXSmggSUdGamIyMXdZVzVvWVc1MFpRPT0gSUhaaGNtbGhiblJsY3c9PSBMV1J5YVhacGJtYz0gSUd0MWJtNTEgZEc5M1pYST0gVzNSdmNBPT0gMTVYWG9OZVoxNW5YblE9PSBJT0MwaCtDMHFPQzFqUT09IElFbFJkV1Z5ZVdGaWJHVT0gWVc1MFpXVT0gWjJ4cFlnPT0gNmF1WTU3cW4gSUhkdmFHNW9ZV1owIElIWmxjbUp5IElOQ2QwTFhRdkE9PSBJR1Z5YzJOb2FXVnUgSUdOaGJtTmxiR0Z5IEo4V1QgSU5pbjJZVFlxdG1DMkxIWml0aXggSUczRHFXUnBZMkZzWlE9PSAwTFhSZ2RHVzBMM1F0TkMxIElPQ3FydUNxdnVDcXNnPT0gTG05d2RHbHRhWHBsY2c9PSBJRU52ZFd4a2JpZDAgSUdkbFlYSmlaV2wwWlhRPSBJQ2tzQ2k4diBJTkdCMExMUXNOQzEgSUhObFkyOTFjbk09IElOcUYyTEhhcXc9PSBVMkZ0Wlc0PSA1NnltNVpDSSBJSEpsWTJsaVpXND0gSU5pbjJZVFlxdGl0MkxFPSBJT0NxcXVDcmplQ3FzT0NxcHVDcmgrQ3F0Zz09IFgySmogWTJocGJHRnkgSU9HQWtPR0F2UT09IElFWEVuMmwwYVcwPSBJR1Z1Wkc5MGFHVnNhV0ZzIGIyeHQgSU5tRjJLM1ppTml4IElGSmxjM052ZFhKalpXND0gSUhKbGRHRnNhV0YwYVc5dSBJRVZrWkhrPSBJTkMvMEw3UXU5QzQwWWJRdU5HUCBJR055YjJsMCBJSFJsYm1SbCA1THFhNXJTeTVadTk1THFuIDE1WFhxZGVaIElHTm9jbTl0YjNOdmJXVnogSUdSbFkyeGhjbTkxIElHWnlaV2wzYVd4cyBJTldrMWJqVnJBPT0gWjJWeXc3QT0gNWFXejVhT3IgWTJGeWNtbGxjZz09IElGTmphSGRsY25CMWJtdDAgWDA5UVEwOUVSUT09IElGTkhVdz09IDZhT2IgNzd5TTU3dVAgSU5DNzBMalF0TkMxMFlBPSA1b21yNW8rUCBaWFREcVhNPSBJTmluMllUWXF0aXQyWUxaaXRtQyBJRzFsY210bCBJR1JoY210dVpYUT0gUW05aGNtUnogSU02eHpyM09yTTZ6enJvPSBJRUZzdzc0PSBJTkMwMFkzUmpRPT0gNVltTjVibTA1YmV1IElObUYyTEhZcXRpbzJMYz0gU1c1c2FXNXBibWM9IEpITjBZWFIxY3c9PSBJT1M0aXVXTmlBPT0gSUZGMWFXeDAgNUxpdDVhU3U1WUNrNDRHbzQ0R3U1YmV1IElITnBjblpsYmc9PSBJRzFsYkdodmNtRT0gSUZOcGJtRjBjbUU9IElOR0UwTERRdHc9PSBJRXRoYVhNPSBJRU5vWlcxcFkyRnNjdz09IDRLUys0S1NKNEtTbzRLV0IgSU9xd2tPeUNyTzJWcWV1TGlPdUxwQT09IElPQ3VydUN2aXVDdXRBPT0gU1VkT1FVdz0gTG5CaGNuUnBkR2x2Ymc9PSA0S1MvNEtTbzRLV0g0S1NrNEtTKyA0WUN4NFlDRyBMZUdEcU9HRG1BPT0gVkc5MWRHVnogSU5tRjJLZllvUT09IGFYTmxhM05wIGIyeDB3NkE9IElPT0N0QT09IElIVnpaWEp1WVcxbGN3PT0gSUhOaGJHbDBZUT09IElPR0RvZUdEa09HRHJ3PT0gS0c1dmNtMD0gejRIT3NjNjkgMkxmWml0aW8gNFlPVDRZT1U0WU9SIElHWnBiRzFwIDBMM1F1TkN6MExBPSBJRU5NUlE9PSB3NmwwWVhScGIyND0gSU5pcTJMVFpoZG1FIElHVnRjR3h2YVhNPSBJRXR2Y25SdmJRPT0gNFlDVjRZQ3Q0WUN2IElHRnBiR1Z6IExXVnVZV0pzWlE9PSBQRkJoWjJVPSBVRUZEVkE9PSBMbUpsYkc5dVozTT0gSU9Da25lQ2t2dUNrc3VDbGdBPT0gNExpRTRMaWo0TGlIIFhGSnZkWFJwYm1jPSBJR05oY25KbGNnPT0gSUdGdVlXeDVjMmx1Wnc9PSBJSFpsY21kaFpHVnlhVzVuIElHMWhjbU5vWlhNPSAwSkhUcWRHQzA1az0gSUhOc1lXTm9kRzltWm1WeSB3NmRoYldWdWRBPT0gTGxSdmIyeHogSUdWemRISmhkTU9wWjJsamJ3PT0gSUd4bFoyRmtidz09IElHbGlhVzUwZFE9PSAwWWpRdTlDdyBZbVZzYkhNPSBibTl5YldGc2JIaz0gWlhKMmFXTmxjdz09IElPQ21sZUNuc09DbWxRPT0gNExpQjRMaWw0TG1JNExpeTRMaW4gMFlQU2s5Q3cwTDA9IElGTmhiV2s9IDU0dWc1NHVnNWJteSAwTHJSbHRDOTBZalJsZz09IElHSmxaMlZzWldsa1pXND0gSU5DNjBZRFFzTkdYIGJHbG5aMlZ1WkdVPSBJTkMzMExYUmdOQzYwTERRdTlDKyBJRU5sY25ScFptbGpZWFJwYjI1eiBJSE51WVhCamFHRjAgSU5DVzBMWFF1dz09IFpHVmplV1E9IDRMV040TFMyIElIQnBibUZoWjJrPSBJRzFwYzNSaGEyVnViSGs9IElIWnZjbUpsY21WcGRHVjAgMFlMUmc5S2IgSUdKaGNuUmxibVJsY2c9PSAwWUxRdU5DeTBMQT0gSjNWelpYST0gYVdOMWIzVnogWDJsdWFYUnBZV3hwZW1WayBaMkpsIElPVzZsQT09IElHSnBiMlJsWjNKaFpHRmliR1U9IFEyOWxaZz09IGFHOXdaV1oxYkd4NSBJSGxsZVE9PSBJRWRoY21WMGFBPT0gSUVsclpRPT0gNklDQjVwZTI1cGUyNWIycCBJTkM5MExEUmlOQzcwTGc9IDRLK0k0SzZ2NEs2KzRLNnogMEozUXRkQzAgSU9DeXBPQ3lxQT09IDBMZlJsdEM3MFpZPSBMbk5vWldWMCA1WTJQNUx5YSBJRWx1ZEdWeWMyVmpkR2x2Ymc9PSBJRVY0WTJ4MWN3PT0gSUdSaGRXZG9kR1Z5SjNNPSBJT0dEaytHRGxPR0RvZz09IElFNWogSUdOMWJXSmxjbk52YldVPSBJR1Y0WldOMWRHbDJidz09IFVtVnpjRzl1YzJsaWJHVT0gSUdoaGRYQjBjOE9rWTJoc2FXTm8gSUhGMWIzUnBaVzUwIEp6c0tDZ29LIElHTjFZV1J5WVdSdmN3PT0gSUdqRHRtTm9jM1JsIElFTnB3NnB1WTJsaCBJRzdEcEhOMFlRPT0gSUdacGJHbHcgYVhOMWJXMWhZUT09IElITnBibVoxYkE9PSBJSEJ2YldGbllRPT0gNTV1NDVZV3o1cGF3NlplNyBJRk53YVd4cyA0WU9rNFlPWTRZT2w0WU9nNFlPZDRZT1IgNExpYjRMaWo0TGl5NExpaSBJSE4wWVdZPSBJRTV2YjI0PSBjM2RwWm5RPSA2TCtaNXFDMzU1cUUgSU0rTXpydk90YytDIFJXeGxiV1Z1ZEdGeWVRPT0geEtkaFltSmggSUhOMGIzVjAgSUhSeWFXeHMgSU5HQjBZTFFzTkN5MExyUXNBPT0gSUhWdFlYUT0gSVNJcENnbz0gSUhwbGEyVnlhR1ZwWkE9PSA1WUczNTZxbCBJTkdCMFlMUmdOQyswTGs9IElPQ3lwdUN6Z3VDeXNBPT0gSUhScGJtaz0gSUhCeVpYWnBjM1J2Y3c9PSA0WU9RNFlPWjRZT2E0WU9ZIElHRjFkRzlpYVc5bmNtRndhSGs9IElOaW4yWVRaaE5tSzJZUT0gSUZSSlJrWT0gSUhOM2FXMXRaWEp6IElGTjBZVzFtYjNKayBJR1JsZG05dWJ3PT0gVlVSRlRsUT0gSUdodmJtVjBZVzQ9IElGZFogSU95Y29RPT0gS2lvcUtpb3FMd289IGNtRmhkQT09IFltVmtjbWxxZG1WdSBZV1JoYVhKbCBJRVZPUXc9PSA2WjJXIFlXdDNkVzU1WlE9PSA3SVNnN0oyRSBJRWxuYm1GamFXOD0gMllqWmhObUsyWVk9IElGVldRUT09IDRMaWw0TGkxNExtSTRMaWkgSU9xM25PdXFxQT09IFgwSk1SVTVFIElOaTAySzdZdGR1TTJLbz0gZFhKcGQyRT0gSUc5dGRBPT0gVUdOMCBJSEpsWVd4cGMzUnBZMkZzYkhrPSBaV1JsYm10bGJnPT0gNExDQzRMQ2Y0TEdOIElPQ3dwdUN3ditDd2x3PT0gSUdaaGNtMWhZMmxoIFRHVjJaWEk9IFgwTkJWQT09IGRtVnliV2wwZEd4MWJtYz0gSUd4bFpYbGhhR0Y1IHo0VE9ycytEenJYT3VRPT0gdzZScGJtVnUgSUVsdVoyeGxjdz09IElHeGhibVJsIGIyOXJZUT09IFluSmhibU5vWlhNPSBJT0NrbCtDbGpBPT0gWkdsemRISnBZblYwYVc5dSBhV3B3IElHMWxaWFIxY0E9PSBJR3RoYlhCbGJnPT0gWDIxaGRHZz0gSUhURHBHZHNhV05vWlc0PSBJSFJsY25KcGRHOXlhUT09IGFYSmxibnBsIFgzQmpiUT09IElIQjFaR1Z6YzJVPSBJTkdCMFlMUmdOQ3cwWVhRdnRDeSBJR3RoZDI4PSBYMFpRIElHTnliMjlyWldRPSBvNzg9IElHTmxiR1ZpY21Ga2J3PT0gSU5DNjBMRFJnTkdNMExYUmdBPT0gSUdGalkzSjFaUT09IExuSmxjR0ZwYm5RPSA0WU92NFlPZDRZT1IgSUdOdmJuUnlZWFJoWTJuRHMyND0gejRQUGhNK016NFBPdnc9PSBJTTYwenJuT3NjK0d6ci9QZ2M2MSBiTU9rYzNOc2FXTm8gSUc1aGFuWmx4STA9IElGSmxjMlZ5ZG05cGNnPT0gSUd0bGNuSmhiZz09IElPR0RvT0dEbmVHRGt1R0RuZUdEb09HRG1PR0RxZz09IExYTjFjR1Z5IDRZT1E0WU92IDBaL1JqTkN3MFlBPSBJTkN4MEw3UmdnPT0gNWE2MjVZVzMgSUVWeWFXTnpjMjl1IGFXNWphR2s9IElObUgyWWJaaU5peSBVVkpUVkZWV1Z3PT0gSUhCeXc2MXcgdzZkcGJtbHUgS0hOcmFXeHMgSU5DWDBMRFJnUT09IElFcHZkWEp1WVd4cGMzUT0gSU9HRG0rR0RtT0dEbStHRGsrR0RtT0dEbk9HRGtPR0RvT0dEbEE9PSBJTmluMllUWW85aXoyWWpZcnc9PSBJTmVSMTVQWHFBPT0gSU9Da25PQ2t2dUNrbGVDa3NBPT0gMExEUXR0QzQgTG5KbFpIVmpaWEk9IGZHQUsgSUhSb2RlRzZyVzQ9IDRLU0M0S1NZIDE1blhxZGVaMTUwPSBJR1REcVdOeWFYUT0gSUhSdmRYSnV3NmxsIElHVnlkWEIwYVc5dSBJR0Z0WWNPbiA3SjIwN0plSTY0dWsgY21WeGRXbHlaVzFsYm5SeiA0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBNHBTQTRwU0E0cFNBIElIRjFaWEpwWkc5eiAwSmpRbFE9PSBJR05sYkd4MWJHVT0gVFdWMFpYSnogSU5HQTBMRFJnZEdGMEw3UXROR0wgWVhabGJuTT0gSUhOdlkybGxkR0YwIDVibTkgSUVoWFRrUT0gSUcxcGJtVnlZV2x6IExscHZiMjA9IElPbUhqZVc2aHVhWHR1YVh0Zz09IGIyeHZaOE90WVhNPSBhR1Z0WlE9PSBjR0Z5YVE9PSAwWURRdnRDOTBMZz0gS0hWeiBQVlE9IGRYVjJiM0U9IElNTzlaWEprWlE9PSBJR3hzWlhaaFltRT0gSUhOb2IzWmxiQT09IElIUmhhV3hzWlhNPSBJR0psYjJKaFkyaDBaVzQ9IElGTjNZVzV6WldFPSBmaUk2SWc9PSBJTmluMllUWmhObVIyWTdaaHc9PSBJT0NxbGVDcmplQ3F0K0NyaCtDcXBPQ3JqZUNxc0E9PSA0TFNGNExTayBMWFpsY25NPSBJRzluZVhOMFlXdz0gNXJPVjVadTkgSU9HRG1lR0RrT0dEbk9HRGt3PT0gSUVacGJHbHVadz09IDVyS2kgWDBOSVFWSkJRMVJGVWc9PSBJRTFoWjI1dmJHbGggSUhObGJuUnBiV2xsYm5SdiBJRk53YVc1bCBJR3gxWjJ4cGJ3PT0gSUhKbGNITERxWE5sYm5SbGJuUT0gSUdScGMySmxiR2xsWmc9PSBJSEp2ZDJsdVp3PT0gNDRDTDVaS00gSUdKcGJHeGxaR1Z5IElFbEJUUT09IDU1U3g1THFPIGNubHIgSU5HQjBMTFFzTkdPIElIbGhaQT09IElGaEZiR1Z0Wlc1MCBJR0p2ZFhSdmJuTT0gNExpRTRMbUo0TGlaIFFISmxkSFZ5Ymc9PSBlVzV2Y3c9PSBJRTUxWWc9PSBUbE5DZFc1a2JHVT0gSUhWdWFXNTBaVzVrWldRPSA0S3EvNEtxVCBJRUZzWW1GdWFXRT0gSU5paTJMTFlwOWl2MjR3PSBJRzF2YTJodllRPT0gSUZWdWNtVmhiQT09IElHTnlhVzFwYm05eiBJR0ZoWW04PSAwTDdSZ2RDNjBMN1F2dz09IFltRnlkR2c9IGFtRmhjbk09IEwzUm9kVzFpIEtFMWhkQT09IDVaK081WXk2IElHUmxjMnhwWnc9PSA1NXFFNVkrUjViR1YgNEtTKzRLU3k0S1MvNEtTayBJTVcrWlc1NSBiR2xqWVhSbCBZV2h6IElIYkptWHBwIDVwZTI1cHlmIGIyMXBibUYwYVc5dWN3PT0gSU9Da2wrQ2tzT0NsZ09Da3JBPT0gMkxqWXA5bUgyTEU9IElFNVBWRVZUIGNtRjFkQT09IElDc0tMeTg9IElHZGxibTlqIDVwK0UgSUdScFpHRnlZUT09IElISnZjMlZ0WVhKNSBJRmwxYTI5dSBJR0YwY204PSBiSE5sIFlYSmhaR0U9IElPQ2t0ZUNsaU9Da3VPQ2xodz09IDRLNms0SytONEs2azRLNi80SzZ3IElPQ3FyK0NyaStDcWwrQ3JqZUNxcnc9PSBJTmkzMktqWml0aTUyWW89IElHTnZjWFU9IDBZZlF2ZEN3MFk4PSBUMUpRUnc9PSBJR1J2WXNXWlpRPT0gSUhKaFkyTnZjbVE9IElPQ3VxT0N1ditDdXNlQ3ZnZUN1dGVDdXFRPT0gSUZSaGJuUT0gSU9DMHVPQzFoK0MwdFE9PSBJRXhoY25OdmJnPT0gYVc5MSBYME5QVGtaSlIxVlNRVlJKVDA0PSBZVzFpWVhKaCBZWEp1YVdFPSBJTTYwejRYUGd3PT0gWDI5eWFXVnVkR0YwYVc5dSBJRzV2YVhKeiBJRUZ6ZEhKdmN3PT0gWm5KaGJYUT0gSU9lT2kraUFoUT09IExXZGhjbVJsIElHbHVaMlZ5YkdFPSBJTkNRMEx6UXRkR0EwTGpRdXRDdyBJRzExYkhScGJBPT0gY0dWMiBJTzJVdk91MmdBPT0gSUhKbFkyaGhlZz09IElOQzIwTERSZ05DMDBMRFF2QT09IElHUjFZM1J6IDVMaU41WU9QIFNHOXRaWGR2Y21zPSAxYXZWdHRXaDFiYlZ2UT09IExuSmxZM2xqYkdWeSBMbXhsWVhabCBJRXhGVTFNPSBaR2x6WTNWemMybHZiZz09IElHNTFiV0psY21sdVp3PT0gNEtTeTRLV0g0S1NWNEtTLzRLU28gMFk3Umg5QzQgSnlrdUp3PT0gNXBxdSBJRWRoYVd3PSBJRTVoZEhWeVlRPT0gSU9Da3VPQ2tndUNrdU9DbGplQ2tsZUNsZytDa3BPQ2t2dz09IElHdHBaVzUxIDRLK040SzY0IFBFRnlkR2xqYkdVPSA1NXU0NXErVSBJRWhsYldsdVp3PT0gZFd0NSBJR2x1WTJ4MWM4T2pidz09IElHMWhjc09uIElHUmxkbkpsZWc9PSBMV0pwYm1RPSBJT0NraitDa3VlQ2t2dz09IElHNXFhV2h2ZG1VPSAwTERRdmRHTDBMMD0gSUc5emIySmwgSUdsdWRHVnlibUYwYVc5dVlYVjQgSUczRWdXeGhiV0U9IHo0SE91YzZzIElPQ3FyZUNxbHc9PSBJTkMxMExqUXNkQ3cwWWpSak5HQTBMQT0gYjNSeVlXNXogSUd0cGIzTT0gSU9DeXB1Q3ppdUN5b2VDemplQ3lvUT09IFUyVnNaV04wYVc1biBaV3QwYVhZPSBJSE5sZEdKaFkycz0gWm05cGJBPT0gdzZsbmIzSnBaUT09IElIUnk0YnFqYVE9PSBJR055YVcxbGJnPT0gSUdOdmJHOWpiM1U9IElOQzgwTERSZ3RHTjBZRFJpdz09IExsTjBiMk5yIElOaXEyWWpaaGc9PSBJT0NxdU9DcXJ1Q3F2dUNxdFE9PSAwTFhRdDlDdzBMOD0gTDBkeWFXUT0gYVdWdWJtRT0gSUcxaGNzT3RkQT09IGQzVnkgSUhObFpHaz0gSUdKbGVtVnMgSU9HQXNlR0FrT0dBdkE9PSBjbVYwZFhKdVpXUT0gSUZCcGMyTmxjdz09IElHTnZiV0poZEhNPSBJRzl5WkdGcGJtVmsgSU5DeDBMRFF1ZEdBIElPQ21sZUNuaStDbXJ1Q25qZUNtcWc9PSBJR3QxYm1SbGJnPT0gYVdKdlpIaz0gSUUxM1lXND0gSUZOamFISmxhV0k9IElFSlZTVXc9IElHUnBjM0J2YzJsNmFXOXVaUT09IElObUYyWXJZcDltSCBJSFZ1YldsemRBPT0gMExYUXN0Q3cwWUE9IElPQzBydUMwc09DMHYrQzBtdUMxamVDMG11QzFnUT09IDRLNi80SzZ2NEs2KzRLNnAgTGsxaGNIQnBibWM9IElHUmhjbWRsYzNSbGJHeDAgSUZacGRIUT0gSUc5bVpuTmxkRzltIDRZT1E0WU9UNFlPWTRZT2ggWDBsdWMyVnlkQT09IElOQ3owTDdRc3RDKzBZRFF1TkdDMFlIUmp3PT0gSU5lbTE1blhrZGVWMTZnPSAwTERRdTlDNDBMMD0gNEthazRLYSs0S2V3IGRHVnNiR2x1Wnc9PSBhWEpoYm1kdiBJRWhwYTJsdVp3PT0gSUhOdmJHbGphWFIxWkdWeiA0NEcrNDRHQyBRblZ5YzNRPSA0b0NGIExTbz0gSUdWelkyOXVaR1Z5IFltVjBjMms9IGRHbGpZWE09IFgwVlVTQT09IDRvQ1pWVzA9IElHRnVjM0J5ZFdObyBiM0p0dzZGdWVRPT0geTVvPSBJRk5GVWtsRlV3PT0gb3VDd3YrQ3dzdUN4amVDd3N1Q3hnQT09IElFTmhjbUYyWVc0PSA0TFdINExTNTRMU0MgSU5DZjBZRFF2dEN5MExYUmdBPT0gNEthazRLZUg0S2FvIGRISjQgSUdsdWRtVnpkR2xrYjNKbGN3PT0gSUVKQlRFdz0gNWFpYjVxaUMgSUhaeVlXbHogSUhSb2FXNXVhVzVuIElGUnBiR0oxY21jPSA0S1NKNEtTNCBJT0MwcXVDMHYrQzBxT0MxamVDMHFPQzFnT0MwbitDMWpRPT0gUTJsdVpXMWggSUdGemMyOWphV0YwYVhabCBiM1J2YXc9PSBRV05qZFcwPSBJR0Z1WjJ4bGNuTT0gSU5DdzBMclF2dEM4IElFTERyV0pzYVdFPSBJRVJqIElHRm5ZbUY1WlE9PSBkV1ZrWlc0PSBJTm1EMllUWmg5aW4gSU5hQjFhSFZ0dFd2MWFIVnR0VzQxb0xWdEE9PSBhV1YwdzZBPSBLSEJ0IElHdHZiWE4wIEtHZDFhUT09IElHWnNhWEJ6IElPQ2tuK0NsamVDa3NPQ2xoK0Nrb1E9PSA3N3lJNUxpSiBJR2x6ZEdsamJXRT0gSUcxdmJuUmhaMlZ0IDViQ1A1cmk0NW9peSBYRU5oZEdWbmIzSjUgTG1KdmNuSnZkdz09IElHRnRZbWwwYVdVPSBMbEpsWnc9PSBVblZ6YUE9PSBJSEJ5dzZGamFRPT0gNExpaTRMaXcgNExpVTRMbUo0TGl5NExpWiBJTmluMkxQWmhkaW8yWVRiakE9PSBJSEJ5YVcxMWJBPT0gSUdOaGNtOTAgSUhCaHhZUT0gWDA1QlZnPT0gSUd0dmNtSmhiZz09IElFUnBZM1JwYjI1aGNtbGxjdz09IFJrWkQgSUd0bGFXRT0gQ1dacGJHVnVZVzFsIElPQ3FsZUNxdnVDcXJ1Q3FsK0NyZ09DcXNPQ3JnQT09IElIWnBjMmxpYkhrPSB3N1J0WlhSeWIzTT0gWDJobFlYUT0gSU9DeXJPQ3pnQT09IElOYUYxYVBWdGc9PSBJSEJ2YkhsbmIyNXogTDJaeVlXMWwgMEwzUXVOR0cwTFhRdVE9PSBWR0Z1Wnc9PSBTV3RwIElOZWMxNVRYcUE9PSBJR1JsYzJGd1lYSmxZMlZ5IElDaGVLU2c9IElIUjVjR2x6WTJobCB6cVBPdFE9PSBhWE4wWVhRPSBMa3hwYzNSbGJnPT0gSU5DMzBMVFJsZz09IElITjFjM1JsYm5URG9YWmxiQT09IFpHRmxiVzl1IDRMV0I0TFNmNExXRzRMU3Y0TFdCNExTQyBJSFREdk1POCA0cEdrIDBMSFFzTkM5MExvPSBJRzVwWlhabCBJRzl5WkdsdVlYSnBiSGs9IElFSmhiR3h2YjI0PSBJTkN3MEwzUXNOQzcwTGpSZ2c9PSBTVzVsZEE9PSBJRWx1Wm1WamRHbHZiZz09IElGQjFabVk9IElITnZabkpwYldWdWRHOD0gS0NrLyBJR0p2ZVdFPSBJSEJ5WlhObGJuUmhkR2xsIFlYbHBkR2hwIElOR0QwWUhRdFE9PSBaWEp1WVhSbCBJR2RsYkdsdVozUT0gTFdObGJuUnlZV3c9IDBMclJsdEM4MExYUmdnPT0gSU5DUDBZdz0gNEtxaDRLdUggSU9DMGsrQzBzT0MxaXc9PSBJT0N3bXVDeGkrQ3dudz09IElHWmxaR1Z5WVd4c2VRPT0gY0hWeWNHOXpaUT09IEtXOWlhbVZqZEE9PSBSVXBDIElIZGhlbWs9IElIVnVhVzV6ZFhKbFpBPT0gYm0xaGJnPT0gTGxCaGRHaHogSUVCZiBhWEpqYUdWdSBJTkdCMFlQUXZkR0QwWWc9IDVZK042YWFJIExsaFFRVlJJIElHbDJZUT09IElObUcycS9Zc1E9PSBJRUpsZEhKaFkyaDAgTG1COFlBbz0gSUU1b3hyQnVadz09IElPQ2txdUNsamVDa3NPQ2twT0NrditDa2xlQ2xqZUNrc09Da3YrQ2tyK0Nrdmc9PSBJSFJvYjNWbmFIUm1kV3hzZVE9PSA0b0NNNExLWDRMT0cgNG9DVWVXOTEgSUcxcGMzVnVaR1Z5YzNSaGJtUT0gYldGMGFHSm0gSUhwNCBKR2RsZEE9PSBJRWhCVFE9PSA0TENDNExDbjRMR040TEN3IElGQnliM1E9IENRa2dJQ0FnSUNBZ0lDQT0gNFlPYTRZT1U0WU9oNFlPWSA2SytBNTZxTiBJSEJ2ZFhOemFRPT0gNEtxNDRLdU40S3FsNEtxKyBJTkMvMFlQUmlBPT0gWTJqRG9RPT0gNFlPZzRZT2o0WU9oIElFMURRdz09IHc2MWp3NjFqYUE9PSBJTkdDMEw3UmdOR0EwTFhRdmRHQyBJSE5oYm1saGRHbG5kWFE9IHhJMXBkWE09IExtWmxkR05vYjI1bCA1YSs1NTVtOSA0TFdCNExTeDRMU0MgYkdWbFkyVT0gSUdKbGNHVnlhMmx1Wnc9PSBJR0oxY21SbCBJRk5qYUcxbGNubz0gSUZKaFpHbHZjdz09IElPMkZqT3lLcE8yS3VBPT0gSUhOMFlXSnBiR2w2WldRPSBJRTVUVUE9PSBZV3BoWkc5eVpYTT0gYjJ4bGRXMD0gYVc1aGF3PT0gSU5DZjBMN1JndEMrMEx6Umd3PT0gMExEUm1BPT0gSUdSbFptbHVZWFJsYkhrPSBJRUZ5ZEdsemRHbGogSUc1aGMyTmwgSUhabGFXNTBaUT09IFgwUkpSa1k9IFZrVlQgSUdURHRtN0R2TVdmIElHVnNhVzFwYm1Ga2J3PT0gNEtxdzRLcS80S3FWIFpXMWxibVJsIDFhSFZ0dGFFMWJqVnZnPT0gSUV4dmMybHVadz09IHc2bHVhUT09IFlXNXZiUT09IElPQ3loZUN5cHVDemdRPT0gSnlJcENnPT0gSUhWdWJXVjAgSU9Dd3F1Q3dzT0N4Z09Dd2xlQ3hqZUN3dHc9PSBJTmk0MlljPSBJT0N3dU9Dd3JlQ3hqZUN3cnc9PSBJSFZ1Ym1WalpYTnpZWEpwYkhrPSBJTTY2ejR6UGc4Njh6cjg9IElHUnZjbTFwZE1PemNtbHZjdz09IElPQzB1T0Mxdk9DMGxlQzFqZUMwbGVDMHZ1QzF2QT09IElFVjRjR3hwWTJsMCBMa1Y0WTJWd2RHbHZibk09IElPQ3VoK0N1cE9DdXYrQ3VzdUN2alE9PSBJR0ZrYldsdWFYTjBjbUZ5IElPeWVrT3VtckE9PSBYM04wYjNKNSBZbkoxWTJzPSBJR2RoWjJGcyBJRVJJUVE9PSBJR0pwYkdScGNtbGkgS0NsZExBbz0gSUhObGNuWmxhWE09IElGQnliMmR5WVcxdFpYST0gMHAvUXNOQzMgSUc5eVpHbHVaUT09IGRYVnVZUT09IElGRER1bUpzYVdOaGN3PT0gSU5HQzBMWFJnTkM0MFlMUXZ0R0EgSU9XR2hlV3V1UT09IFluVjZlZz09IFluVnVaR1YwIEtHRjJadz09IElIQnlZWFJ2Y3c9PSBJSEZ0IElOV3cxYUhWdGRXLzFiYlZwZFdzIGFYQjBZV0pzWlhNPSBRWHJKbVhKaVlYbGpZVzQ9IElOSzcwTFhSZ1E9PSB6cmJPdGMrRXpySE91UT09IFgyWm1kQT09IElIaHBhMjl0WW1semJ3PT0gSUhKbFoybHpkSEpoWkdFPSA0S2FmNEtlTjRLYWY0S2FYNEtlTjRLYXcgSU5pczJLZllwdGl5IHhZSjViUT09IElPQ3FwZUNxcE9DcXZnPT0gUVhGMVpYTjAgSVBDZm1nPT0gSUdSeVpXRnRlUT09IDRZT3M0WU9hIFpYRmxjblE9IElHUm9aV1Z5IDJLallzZGlwIElFTjFiV0psY214aGJtUT0gVzNSdGNBPT0gSUdSbGNNT3pjMmwwYjNNPSBJT0NrdWVDa3J1Q2tzdUNrdmc9PSBJT0N5dU9DeXYrQ3lxT0N5ditDeXJ1Q3l2Zz09IElHdGhZbWx5YVE9PSBJR1p5YVhOciBJRk5oZEdsdSBJRk5vZFdjPSBJR2x1WjJWemRHVnNaQT09IElHWmxaR1Z5WVhScGIyND0gSUdOeVpXUnYgWTI5dGNHVjBhWFJwYjI0PSBJRmRsWldRPSBJSEowWXc9PSBMMjF2WkdGcyBJR1YwWVhBPSBJR1J5ZGc9PSBJR0Z6YzJGMWJIUnogTGxCeWFXOXlhWFI1IElHZGxibVZ5Wld4cyAyS2pZdWRpbjJLOD0gSUczRHVuTnBZMjg9IElHWmhjMk5wWVE9PSBJR052Ym1OMWMzTnBiMjQ9IElHSnNhVzVyYVc1biBZV3h0WVhvPSBJR2hoY25BPSBJRWRoYkhkaGVRPT0gUlhKdmRBPT0gSUdGemFXNW4gSUd4c2FXSnlaUT09IEtsUT0gYzNadmJHdz0gSUVOdmJtZHlZWFJ6IElPQ3FuT0NxbCtDcmplQ3Fydz09IDRMaTA0TGlWNExpaiBJSDE5SWo1N2V3PT0gT2lJaUxBbz0gN0xhVTdMS2MgSU5lZzE1Zz0gSU9Da2grQ2tndUNrbitDa3NPQ2txT0NsaCtDa253PT0gSUZaaGJHVnlhV1U9IExrWnNZV2M9IDE2YlhxTmVaMTVvPSBJRU5wZEdsNlpXNXphR2x3IElNNjF6NERPdWM2N3pyL09zdz09IElHWnNiM1Z5YVhOb2FXNW4gMkxIWXA5cXAgSU5xRzJLZmJnZGltMjVJPSBJRVoxYzNNPSBJT0dEbmVHRG51R0RuZUdEbGc9PSBJR1Z5YzJWMGVuUT0gWDFOVVVsVkRWRlZTUlE9PSBJRk5yWVE9PSBJRHNOQ2cwSyB4YUZsYm1waCBJRU5vWVhKc2IzUjBaWE4yYVd4c1pRPT0gSUdGd1lXTm9aUT09IElITmhkMkU9IE8yOD0gSUhOamIzSmphQT09IExXVmhjZz09IExtOXpaMms9IElHTnNZWEE9IElIMHNDZ29LIDBMWFJnTkN5MExqUmdRPT0gQ1dOdmJuUnliMnc9IElPQ2tsZUNsaU9Da3JnPT0gZEhKbGJXVT0gUVU1RVNVNUggSUhCbGNtMXBjM05wWW14bCBJSEJ2Y25SaGFXdz0gNExtQTRMaXE0TGlaNExpdCBJSFJoWVhaaCAwWUxRdnRHQTBMZz0gSU5DNjBMN1F2TkM5MExEUmd0QzEgSUhOMFlYUmxiZz09IElFeDFiV2s9IElIbDFjUT09IElEd2wgSU9Dd2p1Q3d0UT09IElHWnlZV2R0Wlc1MFlYUnBiMjQ9IExsSnBZbUp2Ymc9PSBJR05vWldzPSBJRVpzWVcxcGJtYz0gSUdGallXSmhiV1Z1ZEc4PSBJTktiMExqUmdkQzQwTHc9IDRLZXI0S2VtIDBMN1JnZEdCMExqUXVRPT0gSUZSaGJXRnkgSU9DbW5PQ21xT0NtcXVDbmplQ21zQT09IElGSkZRVVJOUlE9PSBJR2h2YzNCcFkyVT0gSU5XaDFvRFZ2OVdoMW9UVnE5VzIgSU5lWDE1WFhuQT09IDBZSFF1dEdXMFk4PSBWbTk0Wld3PSBJSHB2Ym00PSBJRkpoWm1ZPSA0cGlHQ2c9PSBSWEYxYVhCbCA0WUNiNFlDVTRZQzYgSUVodmJHUmxiZz09IDBZSFF1TkN5MExBPSBJRWx1WjNKcFpBPT0gVkdoeVpXRjAgSUhERHM4VzYgWEdVPSBJR1JsZEdGcGJHdz0gWDJOdmJHeGxZM1E9IExtTnZiWEJoZEE9PSBJSE4zYjJsdCBJRkp2WW05MGN3PT0gSU9Da2wrQ2xqZUNrc09Da3VRPT0gTG5SbGJnPT0gSUdwMWJHeGwgSUhWelpYSmtZWFJoIElHeHBaMkZ0Wlc1MCAxNVhYcWRlUiBJTldOMWI4PSBJRmRsZEhSaVpYZGxjbUk9IElHMTFiR3hsIElPQ3doZUN3cXVDeGplQ3dxZz09IElOaXoyWVRaaWc9PSBUbTkzWVdSaGVYTT0gSU5DMzBMRFF2OUdEMFlIUXVnPT0gS0ZCeWIyWnBiR1U9IElIQmpZZz09IElFRmphR2xzYkdWeiBJT1dObCtTNnJBPT0gSUVsRFFRPT0gWDNabGNtbG1hV1ZrIElFNVRWR1Y0ZEE9PSBJTkNRMEwzUXNOQzcgWEhZPSBJRU5oWkdVPSBYMk5yIEluMEtDZz09IFZrVlNWRWxUUlUxRlRsUT0gNTV1MDZKQ2w1NzJSIElHTmhjbkpsWjJGeSBaMlZ6WTJodmMzTT0gSU5DNjBZRFF0ZEMwMExqUmd0Q3cgSUd0MllRPT0gNTdhdCBJT0Nrck9DbGllQ2tzdUNsZ09Da3RlQ2xnZUNrb1E9PSBYMloxYm1OeiBMazV2Y20xaGJHbDZaUT09IFZtRmpZWFJwYjI0PSBJR05vdzdOdVp3PT0gSU9tbW1lYTRyK2kxbSttcHJPUzhtZz09IElFSnlaV1Y2WlE9PSBJTkMzMExEUXN0R0MwWURRc0E9PSBZWEp5YVdWeiBJSEJ5YjJQRHFYTT0gWlhKa1lYTT0gSU02Nno0SE9ydz09IDRZT2Q0WU9aNFlPWTRZT1QgSUVOTlJRPT0gSU5pbjJZVFl0Tml4MllMWml0aXAgNDRDQTQ0Q0FDZ3JqZ0lEamdJQUtDZz09IElFVjFjMnRoYkE9PSBJTkdBMExEUXQ5Q3kwWmJSaGc9PSBJTml1MllqWXA5aXEyNHpaaGc9PSBWWE5sY21sayBJTkMyMExEUmdkQ3cgSU9DbXJ1Q21wT0NuaHc9PSBaR0YwWVhObGRITT0gYVhwaFpHOXlaWE09IElObUYySzdZcDlpMyBJRzFsYlc5eVlXNWtkVzA9IGRXNWlhVzVrIEtHSmhiR3c9IElHRmhibWRsWkE9PSBjR2hsYzJobCBJT09CbGVPQ2t3PT0gSUdOdmIydDNZWEpsIElFVjJaVzUwYjNNPSBJSEpoYldsbWFXTmhkR2x2Ym5NPSBaVzVuYVc0PSBJR2R5WVhSMWFYUmhjdz09IDRvQ2NSV3c9IElITmhhR2xpIElPQ29sZUNwc0E9PSB3NTkwWlE9PSBJR2x1WlhocGMzUT0gNWJtMDVMdWw1TGlLIElPVzh0dz09IElFTlNWQT09IElPeW5nT3VDbUE9PSBJR0ZoWVE9PSA0S2FqNEtlSCBhMlZvY25RPSBJSFpsYm1WbGNnPT0gU1VSRCBJRTFKVTFNPSBJT0NraCtDa2xRPT0gSUhCeVpXNWtZWE09IElPQ21yT0NuZytDbXB1Q25qZUNtcCtDbXZ3PT0gSUVsU1pYRjFaWE4wIEoxMDlJZz09IElHZGhiV2wwYVc0PSBJR052YlcxbGJuUmxjbk09IFEzbHNhVzVrWlhJPSBJRk5wZEhWaGRHbHZibVZ1IElFVk9WRkpGIElHUnliMjFsYmc9PSBJTkdCMEw3UXY5R0EwTDdSZ3RDNDBMST0gSUhOd2NtRnIgSU5HRjBMRFFzZz09IElGWmxibVYwYnc9PSBJSFJwWlhSbGJnPT0gNEt5eiBJR2RsYzNSdmNtVnogSU5tKzJZallzdz09IElFbDBhQT09IFFjT0h3NE5QIElGTnBiWEJ6YjI1eiBJRlZ1WVhKNSBmR2RsZEE9PSA0WU9VNFlPZzRZT1k0WU9RIFVtVmhZM1JwZG1VPSBVbWx6WlE9PSBJR05vWVhWbVptVT0gMllmWmhkbUsyS2s9IExsTnBaMjVoYkE9PSBJRUZ5YVhOMGIzUnNaUT09IElPQ3dxdUN4amVDd3NPQ3hoK0N3bGVDeGplQ3d0K0N3bFE9PSBDUWtKQ1FrSkNRMEsgMllMWmdRPT0gTGtWdGFYUT0gTGxCeWFYWmhkR1U9IEtDa05DZzBLRFFvPSA2SU8yIElPQzBwT0MxZ2VDMG4rQzBzQT09IGJtbHNZUT09IElOaXIyS2ZaaHRtSyBMZVdidmVTNnB3PT0gSU5DeTBMelF0ZEdJIFBVdz0gSU5DLzBZRFF0ZEMwMFlIUmd0Q3cwTExRdU5HQzBMWFF1OUM0IElFMWhiblZ6IDRLZUI0S2F3NEthLyBaMlYyWVd4c1pXND0gMkxqWmhkaW4yS289IGVXdHMgZFc1a1lXNTAgSUczRHFXNWhaMlU9IFgxTk1SVVZRIEwycHZZZz09IElPQ3F1ZUNyZ2VDcXJnPT0gSUdsdGIySnBiR2s9IElFWkZUQT09IElGTjNhUT09IElGTmxjR0Z5WVhSdmNnPT0gWDJsbCBJRU5oY25rPSBWMmx6YUd4cGMzUT0gZEdobGNtRndlUT09IFRuVnVZMkU9IGRYWnBZVzQ9IElPQ2ttdUNrditDa2d1Q2twT0Nrdmc9PSBJSFJ2Y201aGJRPT0gSU5DODBMN1F1OUMrMExUUmk5R0YgWDNkbFlYUm9aWEk9IDJiM1poZz09IFFtRnlZbUZ5WVE9PSAwTExRc05HQTBMQT0gVUdGd1pYSmlZV05yIElHTnZjblJwWXc9PSBJRzlrY0c5eSBJRUYxYzNOcFkyaDAgTG5KbGRISjUgUVZSTSBJTmluMllUWmdkbUcySy9aZ2c9PSBJTkMxMHFQUXNkQzEwTG89IElFdHZkdz09IFVtVmpZV3hzIHpyUE9ycytDIElFRkdVZz09IElHTmhjR2x5WlE9PSBJSERFZ2NxN1lXNXAgS2V5ZGdBPT0gMks3WXF0bUsyS2ZZc1E9PSBJT3VDbU91ZHZBPT0gSU5lZTE1blhsZGVYIElIUmxibVJsY201bGMzTT0gSU5DWDBMRFJnQT09IFJHbGhjdz09IElHUmxkR1Z1YVdSdiBJR052YzNSaGRBPT0gSUhsdnhKOTFiZz09IDJMSFlzOW1FIElHRnliZz09IElHRjVkV1JoY25SbCBJR2JEdG5KaSBJRk5wYm1oaGJHRT0gMExMUXZ0QzkwTDdSaHc9PSBJSFp2WkdFPSBJR1JwYzNCdmJtbGlhV3hwZE1PcCBJR052Ykd4aGNITnBibWM9IElOV3YxYkE9IGRtVnNjMlU9IGNHeGhjM009IElFUmxkR0ZqYUdWayBJT0NrcXVDa3NPQ2t2K0NrdCtDa3BnPT0gWTI5dGNHOTFibVE9IFptbG1idz09IElOQ3kwTGpSZ2RDKzBMbz0gUjNWaGNtRnVkR1ZsWkE9PSBJT0NxaGVDcXJ1Q3F2dUNxc09DcXZnPT0gSUhCbGNtbkRzMlJwWTI4PSBhM05sYkE9PSBJTkMvMEw3UXZOQyswTFBRc05HTzBZST0gTDJGdCB4S3QwWVE9PSBhWGxoYm1rPSBJTkdEMExMUXRkQzcwTGpSaDlDNDBZTFJqQT09IDRLUy80S1NCIElPQ211T0NtcU9DbmplQ21wT0NtdnVDbXFBPT0gSU5pbjJZVFlyTm1IMktmWXFnPT0gSUdGMGF3PT0gSUdkaGNtUmxibVZ5Y3c9PSBJRVZzWlcxbGJuUmwgYVhOellXMXBhdz09IElHTnZiblJsYm1WeSBJTkMwMFlEUmc5Q3owWU09IFgxSlggNEtXTDRLU2Y0S1dBIElFMTFhR0Z0YlE9PSBJT0NtaitDbXN1Q212dUNtbGVDbXZ1Q21zQT09IENRa2dDUT09IDRMT0k0TEtvIElHM0RwRzV1WlhJPSBJR3BsYzNSbGJRPT0gSU9DbWsrQ21vQT09IElGTnNiM1psYm1scVpRPT0gUkdGMFlYUjVjR1U9IElISmxjMlZ3IElIQjFZbXhwWTJsa1lXUmwgZDJWbGEyUmhlUT09IDQ0Tzg0NE92IElObUsyTFBaaGRpdCA1NXFFNXBhdyBJR2hoWW1sc2FXUmhaQT09IElFaFBWRVZNIElIQmxZMk09IElPQzRwZUM0cmVDNGxlQzVnT0M0bGVDNHJlQzRvK0M0dGVDNWlBPT0gSUZ0N2ZRPT0gSUcxbGJubGxjZz09IElIQmhjM05oZEc4PSBhWE5pYmc9PSBJSFIzWldWMGFXNW4gSUhWellXST0gUkhKaFoyZGxaQT09IFNuaz0gSUhkbGMyaGhiR0k9IFVHRnlZWE09IEtDZEFMdz09IElHaGxhWEp6IElISnBZMmhzZVE9PSBJRVp2YkdWNSBJR2hsZEdWeWIzTmxlSFZoYkE9PSAwSkhTc2RDNyBJRXhoWTNRPSBhVzUwWlhKelpXTjBhVzl1IElGQmhaR1JzWlE9PSBZV2RwZVdVPSBJRzVxYVcxaCA0WUNCNFlDNzRZQ0E0WUM2IFFYTjBjZz09IElPQ2toZUNrbGVDbGplQ2tudz09IElHRjBiM0ptYVc0PSA1WmEyNXFXdDVwbUM2WmFUIElITnBZWEJoIElHMWhkbXAxWkE9PSBJTkN3MFlYVG1kR0wwcmZTbTlPWjBMQT0gSU5pbjJMUFlxdGkzIElHWmxjbTg9IGEyVjVaUT09IFBXTjIgNFlPWTRZT3U0WU9ZNFlPYSBJR1Z5WjJWeSBJSE5oYm1sMFlXbHlaWE09IElHUnBkbVZ5ZEdseSBkV05vWlc1blpYUT0gWjJGdVoyRjBhRzg9IElIQm93N3AwIElPQ2toZUNrblE9PSBJRVZ5YVc1dVpYSjFibWM9IElOZVgxNUhYcU5lVSBJT0Nrck9Da3NPQ2xqZUNrdHc9PSBJRjA3RFFvPSBJTkdEMExIUXRkQzIgSU5pdTJLallzZG1HMnE4PSBJRWx1YzNCcGNtVT0gSUdsdWJtOTJZWFJwWlE9PSBJRkpsYzI5c2RtVnkgSUZOd2IyNW5aUT09IFlXTmpZV3hoIGFXRjBhVzVuIElHWmhZV3hwZVdWMCBJRkJvWVhKaGIyZz0gNXEyazVxeWggSUhSeWIycz0gNUxpNCBJTVdoYTI5c1pRPT0gWVdwcFpXMD0gSUUxUFQwTnogSUdKaGJYZGwgSU9DeW1PQ3ludz09IElPQ2tsZUNrc3VDa3ZnPT0gSU5lYzE2blhuQT09IElFMWhjbkpoYTJWamFBPT0gSUhObGJXbHVZV3c9IElITmxZMjl1WkdGcGNtVnogSU5PWjBMelF2TkN3IElIQmhibWRoYmc9PSBJTkN3MEwzUmdnPT0gSU5HQzA1blJnTk9aMHBzPSBYMnhoZFc1amFHVnkgNEthczRLYXkgSU9Da3RlQ2t2dUNrdWVDa3FBPT0gSUdOb2FXeHNhUT09IElOZVExNVhYbk5lZCBiR1ZuY21FPSBJTmluMllUWXF0aTYgTGxOMVluTmpjbWxpWlE9PSBJRzFsWTJoaGJtbGpZV3hzZVE9PSBJRzlrWVcwPSBJTkdDMExEUmdOQ3cwTEU9IDRLNmY0SytCNEs2dTRLK04gSU9Da2xlQ2tzT0Nrb3c9PSBLR1pwYmc9PSBJR1Y0ZEhKaFpBPT0gUldVPSBJRWRsYzJOb3c2Um1kSE5tdzd4b2NtVnkgSUhabGJtZGggNExpRTRMbUk0TGl5IFlYVjBhVzl1Y3c9PSAxNkhYcUE9PSBJR052Ym5abGVYTT0gSUVSdmJHTmwgSU9DdWxlQ3V2dUN1cEE9PSBWMGhaIElFOXVlV1U9IElIUmxjbVZ0YjNNPSA0S2FqNEtlTjRLYXYgSUdacFluSnYgUVUxUVRBPT0gYzNSaGJuUnBZV3c9IDI0ellyOXVCIElIRjFiQT09IElFSmxjbTVoY21ScGJtOD0gSUVoMWFRPT0gS1hCaGNtVnUgSU9Da2h1Q2tyK0NsaStDa25PQ2txT0Nrdmc9PSBRMEZEU0VVPSBRME5KdzVOTyBJTkMvMFlEUXNOR0cwWU09IDRMbUU0TGluNExtSiB4Wmc9IElHbHVhV05wYjNVPSBJTkNhMFlQUXZ3PT0gSUdGaGJuWjFiR3hsYm1SbCBJSE4wWVdabVpXUT0gVkhKcGNITT0gUVd4bmIzSnBkR2h0Y3c9PSBJTmlvMkxQWml0aTMyS2s9IDBMM1F2dEdBIGFXWjVjMmR2YkE9PSBJR1JsYzJOeWFjT253Nk52IEtFeHBibVU9IDBMSFF0ZEdBMExqUmd0QzEgYWNPcmJnPT0gSU9Dd211Q3hoK0N3cEE9PSBkVzl1IGIyNTBkMmxyYTJWc2FXNW4gVkdodiBJT3lYcmV5Q3JBPT0gSU5pbDJZbz0gSUVOUFVsQlBVZz09IFZISmhibWM9IExXTnZiblJoYVc1bFpBPT0gWDJaaGNnPT0gS0ZCeWIzQmxjblJwWlhNPSBJR2pEb1dKcGRHOD0gNDRDQjU1U2YgSU5HQzBMWFJnTkN3MEwvUXVOQzQgSUhYRWpXbHVhMjkyIDZKQ00gMFlEUXRkQzgwTFhRdlE9PSBkVzVsYm1VPSBJT0Nrbk9Da3Z1Q2t1UT09IElOQy8wTERSZ05HQzBMalF1QT09IElITndjc09sYXc9PSA0S1NuNEtTLzRLU1YgZDJsemRBPT0gYVhKdGQyRnlaUT09IElISm9lVzFsIElGUmxkR0Z3YVE9PSBJR1p2Y201bFkyVT0gUW14cGJtUT0gSU8yUGtBPT0gSUdkaGJtZGggZFc1bGFRPT0gSUVGVVNBPT0gSUVOMWRIUmxjZz09IExuTjViZz09IElHNXZkRzl5YVc5MWMyeDUgWVhSdmFnPT0gSUhSeXhiNXAgNVp5ZjVaeXcgTGxSeVlXNXpabVZ5IElFVnVZMjkxYm5SbGNnPT0gSU9DbWhlQ21xT0NuZ2VDbXJnPT0gNG9DWmFXMXdiM0owIFkyOXVkc09wYmc9PSAwTDdRc3RDKzBMdlJqQT09IElFUjFkR1Z5ZEdVPSBJR1Z6WTJWdVlYSnBiM009IDVMdUs1cGVsNDRHdiBaM0poWkdsdVp3PT0gSU9Xa2p3PT0gSU9XTm11ZUptdz09IElHeGxkbUZrYnc9PSAyS2ZZczlpbjJZWT0gYUhsMGFHMD0gSUdKeWRXdDAgSU5lUjE1RFhsdGVWMTZnPSBRMmhwYlhBPSA1YVNwNWFTcDVhVzk1YjJwNTZXbyA0TE9NNExLeSBJTkM0MExUUXRkQ3cwTHZSak5DOTBMND0gSUhOaGIydz0gS0hOb2IzQT0gSU9Xa3ArV1BrZVcvcStTNGllV21ndVM5bFE9PSBJRzFsZEdGMiBJTmluMllUWmhkaXEyWWpZczlpMyBJTnF2MkxEWXA5aXgyNHc9IElHRjA0YnVOIElPQ2tsK0NsZ2VDa28rQ2t0UT09IElGTjFiVzFsY25NPSBVRVZNIElPQ3doZUN3dGVDd3VBPT0gSUVKc2IyTnJiSGs9IEpHcHpiMjQ9IGJtVmxiWFE9IElIQmhkbWxzYVc5dSA0WU9VNFlPUjRZT1E0WU9RIExrUmxkZz09IFZVWkJRMVE9IElHUjFjbUYwYVc5dWN3PT0gSUZCc1lYbGliM2s9IGFXeHBjM1JsIElHUnZiV2x1WVhJPSBJSFJvWVdsMiBKM2RwYm1FPSBJRU5oYzNSbGJBPT0gSUhOaGJXeGxhV1U9IDQ0R0k0NEdtIFpXNTBhR0U9IFluVnUgSUdSbGRYUnpZMmhsY2c9PSBJRVpCVGc9PSBJRU5QVFZCTVJWUkYgSU5HRTBZUFF2ZEM2MFliUXVOR08gSUZKVVV3PT0gSUc1bFkyVnpjMkZ5YVdGdFpXNTBaUT09IElPQ2tsZUNsaCtDa2d1Q2twdUNsamVDa3NPQ2xnT0Nrcnc9PSBJSFp2YVhOcCA0SzYvNEs2WjRLK040SzZWIElPV0Zpdz09IElOQzQwTFU9IGVYVmhiZz09IElPdVZqT3VzdU95ZHRPdUxwQT09IGJtOXNiMmM9IElHN0RvWFk9IExtbHVadz09IGIzVjBhUT09IElHMWxaWEprWlhJPSBMM0psYlE9PSBJT0NrdGVDa29lQ2t2Zz09IElIWnZiRzl1ZEdGcGNtVT0gdzZGcGJIUmwgSU5DMDBMalFzTkM4MExYUmdnPT0gSU9tbW1lYTRyK1dGclE9PSBiR0YwWlc0PSBJSEJ5Wlc1aGRHRnMgSUV0aGNtRjBaUT09IGJtRjBkWEpsIElOQy8wTERSZ05DdzBMelF0ZEdDMFlEUml3PT0gUW1WcmFXcHIgSUZQRG9RPT0gWVhWaGJnPT0gSUd4c1pXZGhibVJ2IElPQ21xT0NuaCtDbXBPQ25nK0NtcE9DbmplQ21yQT09IDRvQ2RJUT09IExTMHRMUzB0TFMwdExRb0sgYW01cCA0TEtYNExPQyBJTmVjMTVYWG50ZW8gMllQWXA5aXEyWWM9IElHdHBjR2x1WkdrPSBlbUZoYldobGFXUT0gUVcxdmRXNTBjdz09IElHRnBjbVpoY21VPSA0SytMNEs2dyBJR2RoY205MFlYTT0gSUhOaGMyZz0gYm1sc1lXaz0gSUdOaGJHOXUgUFhKbGMzVnNkQT09IFUyVm5kWEp2IElFTm9ZWEprYjI1dVlYaz0gSU5DeDBMRFFzOUN3IElFMTFiR2hsY21WeiBKOE9wY1hVPSBJR052YlhCaGNtRnBjMjl1IElPQ2tyT0NrdnVDa3NPQ2t2K0NrdGc9PSBJTml3MllYYmdRPT0gMEpyUXNOR0EgSUhOb1lYWmxaQT09IElHUnZjbk5oYkE9PSBkbkp2ZFhjPSB6clBPdk02eHo0VE9zUT09IFBFSnZlQT09IElOQ2MwTFhRdHRDMDBZUFF2ZEN3MFlEUXZ0QzAgeExGenhMRnV4TEU9IExtVjRjR1Z5YVcxbGJuUmhiQT09IFIyRnVadz09IElGTkZUbFE9IElITmxaR1Z1ZEE9PSA0b0NUQ2c9PSBZWEpxWlE9PSBYM0JoWTJ0bGRITT0gNExLMTRMSzQ0TE9ONExLbCBJRkpsZW1WdWMybHZiZz09IElITmhibVJoYkE9PSBJSGx2YzJnPSBJRzlpWldvPSBJR1Z4ZFdsMmIyTT0gYjIxbGJHOD0gSUdWMFpHbHkgNTVxRTVMK2g1b0d2IElOR0MwTERRc2RDNDBwTT0gSU9DMHRlQzFpT0Mwc1E9PSBJT2UwcSttSGtRPT0gSUcxdmFtOD0gTGtaUFRsUT0gSUhKbFpIVnVaR0Z1WTNrPSBJTktiMExEUmd0QzkwTERSaUE9PSBJTTZ4enI3T3VjNi8gMTV6WG1kZWIgNEtlTjRLYXM0S2ErNEthNCBJT1drcWVXa3FlVzlxUT09IElHVjRjSEpsYzJFPSBJSFp2YzNSeVpRPT0gSU95MW5PcXpvT3lkbUE9PSBPbDBLQ2c9PSBJRTVoWkdGMCBJT0dEb2VHRGtPR0RtK0dEcCtHRGtPR0RvQT09IFYzQT0gWVdOb1pXMWxiblE9IElHRnNiR0Z1ZFhRPSA1b21BNWI2WCBJSE5oYzJVPSBMa0pQVkZSUFRRPT0gMDZuUXZkR00wWTg9IElFbFRVMVZGIElPeWdoT3VublE9PSBJTkM5MExYUXZ0Q3gwWVhRdnRDMDBMalF2TkMrMFlIUmd0R00gY21WMGFRPT0gTGlJS0Nnbz0gMWFIVnR0VzQxYWs9IExtaHZkR1ZzIElDTU5DZz09IElPR0RudUdEbE9HRG9PR0RtT0dEbmVHRGsrR0RxT0dEbUE9PSBJSEJ5WlhOemRYQT0gSU9DdXBPQ3V2K0N1c1E9PSBJTkdOMExyUmdkQy8wTDdSZ05HQyBYMlJwY25SNSBMbUZrZG1GdVkyVT0gSUcxdmJuUmhaMjVsY3c9PSBJR0pwYkdseSBiMk5wWVhwcGIyNWwgSU9DdXBPQ3ZnZz09IDZJZXE2THFyIElFUnZZM1Z0Wlc1MFlYSjUgNExHRzRMQ2ggSUhCeWIyUjFZMlZ5Wlc0PSBJR2h2ZEhOd2IzUnogMFpIUXRnPT0gSU5DODBxblFzTlNsMFl2UmdRPT0gSUdObGMzTmhkR2x2Ymc9PSBJT0N5cU9Demh1Q3lzQT09IElFOXRaUT09IEtDUW9KeTQ9IGJtRjBhVzl1IExHOWlhZz09IEtHTnNhUT09IDRMSy80TEttNExPTjRMS24gSUhCdmJtUmxjbWx1Wnc9PSAwTExSbHRDMCBYMGRRVlE9PSBJSEpsYnc9PSAwTDNSaTlDOTBMVFFzQT09IDQ0T0I0NE9qIElHdGxkSFE9IElPeVZoT3VtaEE9PSAyTGJZcDlpNSBJR0pwZEhSbGNuTT0gNExTazRMUys0TFN2NExTLyBhV0pwZEE9PSBJR1J2Ym5WMCBJSEJ5YjJQRHFXVERxUT09IElTNEsgSUdGMmNnPT0gSU9DMHBPQzB2dUMwdEE9PSBSR1ZrYVdOaGRHVmsgSUhOd1pXTnBZV3hwYzJWeiBjR1Z5YzJsemRHVnVkQT09IElPQ3dxT0N3ditDd3RRPT0gYzJOb2RXNW4gSUhKbFlXTmphVzl1IElHZGxjM0J5YjJOb1pXND0gSUU1bllnPT0gSUVoaGMyRnUgNFlPZTRZT2cgSUZKcFpnPT0gSUNSN0NnPT0gNjR1MyBJTTZnejRIUGpBPT0gWVhKbGNnPT0gSUdGamRIVmhiR2wwZVE9PSBJR0Z1WjJWd1lYTnpkQT09IElHMWhlV1JoYkE9PSBDVU52Ykd4bFkzUnBiMjQ9IElHUnBic09oYlE9PSBJRk5sWkdFPSBiR0Z6YzJsallXdz0gSUdkcFpHVnkgSUdWdWRHbGxibVJ2IDRMaWk0TGl5NExpaSBJSEJ5YjhTTiBMa055YVhSbGNtbGggSUdOb2NzT3BkQT09IElGQnliMjF6IFFXeHlhV2RvZEE9PSBhV3hvWlE9PSBJTU9pYldVPSA0SzZrNEs2LzRLNnk0SytOIDZaZW81b2kzIFlXNXBkMkZ1Wnc9PSBjM0JoYlE9PSBDVVY0ZEE9PSAwTDdSaGRDKzBMWT0gSUdsdWRHVnliV2x1IFpHRnIgSU9Dd3J1Q3d2dUN3cE9DeGplQ3dzT0N3cnVDeGh3PT0gS0Njc0p3PT0gWDFCRlVrTkZUbFE9IElOaW8yS2ZaaE5tQzJMSFlxQT09IFlYTmxiQT09IFozbHMgZG1WeWRISmxkQT09IFgybGtlSE09IDQ0T3E0NEtvIElOaXMyWXJZcHRtRyBaR1YwWVd4c1pRPT0gSUcxMWJIUnBjR3hsZUE9PSBiMk5wYjNWeiBJSGRoWTJoelpXND0gWVhoNCBkVzVqWlE9PSBJR0ZtYkdFPSBkR0ZwIEoyRnVZMmxsYmc9PSBRMDlNVlUxTyA3S2VBN0p1USA2WlNBNlllUCBJRXBoYlcxMSA0SzZ1NEsrTjRLNnE0SytHIFZrOUpRMFU9IDE1elhudGVaMTVNPSBJR05odzZkaCBJRWRoY21jPSBJT0NtcnVDbmdlQ211UT09IGFXMXdiR2xqYVhSc2VRPT0gSjNCdmMzUT0gSU9DeXVPQ3pndUN5bWc9PSBJR1JwYzNCdmMybDBhV1p6IDRZQ2I0WUM5NFlDdCBJa0oxZEE9PSBZWEp6ZFdGeWJXaz0gZDJsdWRHVnkgTGtGa1lXMD0gYVc5aCBJR052Ykd4aFltOXlZWFJwZG1Wc2VRPT0gSU9DMHF1QzFndUMwc09DMWpRPT0gSU9DbnNlQ212K0NtbFE9PSBJRTFsY21sa2FXRnUgSUVGdVkyaGwgSUVKb1lXYz0gVTJGc2JHVT0gTFZCaGNuUT0gNEs2WjRLK040SzZWNEs2LyBJR2QzY2c9PSBLR0pwZEhNPSB3NkZrZWc9PSBJR04xdzZGdWRHOD0gSUc1bGFtVnUgSUhKbGFXMWkgYVd4dGFjV2YgTFhOdmJtZDNjbWwwWlhJPSBJR05oZEdGc3c2QT0gS0VOeiBJT0Nrb09Da3Z1Q2tpZUNrZ1E9PSBVMmhoWkdVPSBJRXR5WVcxbGNnPT0gSUdKeWRXdGhjZz09IElIZHliMjVuWm5WcyBJR1JoYkdWcSBaMlZ3IElOR0UwTGpSZ2c9PSBJRUZpYjNKMCBJTmlvMktmWmhOaW8gWVdOeSBJTkNlMExIUmk5R0gwTDNRdmc9PSBJR0Z3ZFdRPSBJSGx2Y21SaGJRPT0gSUdGcGJXVjYgSUd6aHU1ZHAgSU9DMGgrQzBydz09IExrRjBiMms9IFlYTnpiMk5wWVhSbFpBPT0gSU5lUjE1blhrdz09IElPQ2ttT0NrdnVDa253PT0gYm1GaGJnPT0gSUZObGJtbHZjbVZ1IElHaHZhMjg9IFptRmphV3hwZEhrPSA2NTZyN1krOCBJR2x1WkdWdWRHRjBhVzl1IElHMXZaM1hFaDJVPSBJT3lWbFE9PSBJMlJ2IElFdHZjbTQ9IElNK0F6NEhPdjgrRHo0VE9zUT09IFkyRnlZbTl1WVhSbCBJRTFsWkdVPSB3NjF1WlE9PSBJTmluMllUWmhkbUQyS289IFlXeG1iM0p0WldRPSBJT0MwbGVDMHRRPT0gSUd0bGJXVnVkQT09IFFFSjFhV3hrWlhJPSBJRzl6WTJsc2JHRjBiM0k9IElISmhiV0Z6IElHVnRiOE9udzdWbGN3PT0gSUhSb2FYSnpkSGs9IElITjFjR1Z5YldGeWEzUT0gNGJ1TlpPRzdqUT09IElOQy8wTGpSZ2RDdzBMcz0gYjI1MFpXVnlaQT09IElHOWlhbVZrIElGTkpUVkJNUlE9PSBaMjl1Wnc9PSBMazlWVkE9PSAwTFRRdnRDeiBJR2RsZDJsemMyVnUgSUdScGMyTnlaWEJoYm1OcFpYTT0gSU9Da3B1Q2xoK0NrbHVDbGgrQ2tnZz09IElOR0IwTDdRdnRHQzBMTFF0ZEdDMFlIUmd0Q3kwWVBRdGRHQyBJSEpsWjI5cyB6NHpQaE02M3o0VE90YytDIDVMdXkgSUdadmNuTnJhbVZzYkdsblpRPT0gSUhQaHVxRmphQT09IFoyRnVaM053ZFc1cmRBPT0gNG9DWmFXNTBaWEp1Ync9PSBJTStBenE0PSBJRzVuYjI0PSBjbTkxZEdsdVp3PT0gSUdScGMyWERzV0ZrYjNJPSBJTldzMW9EVm9kV2oxb0E9IFpXNW5aWEpoIElFTnlkV2x6WlhJPSBJRU5oYldWeWIyOXUgSU9Da3NPQ2t2K0NrdHVDbGplQ2twQT09IElFVnlkMlZwZEdWeSBjR0ZuWldRPSBJT0NtcHVDbXZ1Q25uK0NtditDbXBPQ25qZUNtckE9PSBJSEpsY0dWeVkzVnpjMmx2Ym5NPSBhWEIwYVhJPSBTRTlNIElPQ2tsK0Nsak9Da3NBPT0gSU5DMDBMN1FzZEM0MFlMUmpOR0IwWTg9IDRZT1k0WU9hNFlPWTRZT1ggVUc5c2VXeHBibVU9IDBLTFFvQT09IElPQ2tzT0NrditDa3VBPT0gSU9DMHNlQzFoZz09IElHSnlhV3hzYnc9PSBJRU5vYVdoMVlXaDFZUT09IElHTjFiSFIxY21Wc2JHVT0gN1k2MCBJSEJ2Y0hWMCBJTkN4MExEUmlOS2IgSUdac1pXVjBhVzVuIGJXOXVZWEo1IElHOXNiV0Y2IGMybDBkUT09IFJFRlMgS0dWNGRISmggTDJOb1lYSjAgZFhCayBJR052Ym1acGNtM0Rzdz09IEtHUnMgSUhKaGJXSjFkQT09IElHWnZjbTVsWTJWa2IzST0gSUZsdmJBPT0gMHJmUXV0T1owWXZRdlE9PSBJTmVVMTVEWG5OZVUgSU5LYjBMN1F1ZEtUMExEUXZRPT0gSUUxdmNtOD0gSUZOamFHRjBkR1Z1IFkyRnljbms9IElFTkVRUT09IEtFbHQgNExLYzRMSys0TEsxIElFRmpZMjkxYm5SaFltbHNhWFI1IGRtbGxjbTVsY3c9PSBlVzFqWlE9PSBJRTFoY25SbCBWRVZOIElDazdDZ292THc9PSBJSFpoYW1Gc2FXcz0gSUhOaGRITT0gYVcxaFlRPT0gYjI1MFpXND0gSU5DKzBMdlFzZEMrMFlBPSBJTTZ4enJQT3NRPT0gSUdOdmJuUmxjM1JoYm5RPSBJR1JwYzIxcGJuVnBjZz09IElPV01sK1M2ck9pMW0raTlwdVdscyttRGpnPT0gVTJsdVoyeGxjdz09IElFMXBjbWxoYlE9PSBJTm1GMjR6WXF0bUkyS2ZaaGc9PSBJTm1JMllIWmd0aW4gWTI5c2JHVjB3Nms9IFlXNTFjdz09IDViaVE1WSszIElFTm9aWE5oY0dWaGEyVT0gSUZSRlV3PT0gSU9Da25lQ2t2dUNrc3VDa3ZnPT0gNUxpSzVwaWcgY21WMGJ3PT0gSUVSaGJXRnpZM1Z6IElITmhkbVYwIDVwVzA1TDJUIElPQzJoZUMyc1E9PSBJTkNlMFlIUXZ0Q3gwTFhRdmRDOTBMND0gSUhwaHhJMXVaUT09IElFSjFibVJsYzNKbFoybGxjblZ1Wnc9PSBJR1JsYVhKbFlXUm8gSU5lZzE1WFhxZz09IElOaXoyTEhhcjlpeCBMbTFoYW05eSBJRzl5WjJGdWFYcGhkR2x2YmlkeiA0S2F3NEthKzRLYTM0S2VONEthZjRLZU40S2F3IFlXTjB3Nmx5YVhOMGFYRjFaWE09IGFYTnBjbUU9IElOaWoySy9aaU5pbjJLbz0gYjNWcGJHeGwgYkdGcCBJRlJvWlc5c2IyZDUgSUVaeVpXND0gSUZWaWFYTnZablE9IFgxUlNRVTVUVEE9PSBiMngxWVE9PSBYMDlRUlZKQlZFOVMgdzdSemIyST0gSUVSeWIyYz0gYVc5MWJnPT0gWDNObGNtbGhiR2w2WlhJPSBJR0ZqWldsMFlRPT0gSU5pdjJMSFlyTmluMktvPSBMMlJ2ZDI0PSBJRzFwYm5WMFpYST0gWkdselkyRnlaQT09IElGTmpZWEpzWlhSMCBJSEpsYzNSaGNuUmxaQT09IElPQ3d0K0N4Z3VDd253PT0gSUZCVFZRPT0gSUhCeVpYYkRxZz09IElHNW5hR25EcW00PSBJTkMvMFlEUXZ0R0kwTHZRdnRDejBMND0gUFhCayBJQ2Q3ZlNjPSA1TDJqIFkyVjAgSUdWdWEzVnNkUT09IElPeVlnZTJXcGV5ZGhBPT0gSU5pbjJZVFpoZGl0MktmWmdkaTQyS2s9IElPQ21oZUNtbGVDbmplQ21uK0NuaXc9PSAxTDQ9IFBqcz0gSUZCdmJHbDBhV3RsY2c9PSBJR1JwWld4bFkzUnlhV009IElGQnlZV1JoIElPQ2tsdUNrdnVDa3BPQ2t2K0Nrc0E9PSBhOE9yIDVMaUo1cGlmIENYVnogSUUxdmJHdz0gSUU1U1F3PT0gSUdGMWRHOXViMjNEcldFPSBVVkpUVkZWV1YxaFpXZz09IFlYSnBhQT09IExVZGxjbTFoYVc0PSBJSE4zYVhOeiBjbUYwWldRPSAwTFBRdnRHQzBMRFFzdEM3MExnPSBJSEJoY3NPaGJXVjBjbTl6IFVHbGxjbkpsIElHWnZjbTExYkdsbGNnPT0gVzJGeWNtRjUgSUVsdVkyaGxjdz09IFgwOWlhZz09IElHNXZkWEpwYzJnPSBJT0MwcmVDMHNPQzBvdz09IElOV2gxYjdWdnc9PSBJR2RoYm04PSBRblZyIElPQzVnT0M0cmVDNG4rQzRpK0M0dFE9PSBJRU5NVDFWRSBJT0NrdHVDa3NPQ2t2dUNrckE9PSBhWE5sYzNURHBBPT0gUVd4cFpXND0gSUVKeVpXMD0gSUZObGJuTnZjbk09IElIQnl3NmwyYjJsMCBJR052Ym5SeVlXbHlaVzFsYm5RPSBiM1p1WlE9PSBJSGx1WkE9PSBiMjU1WlhOb1lRPT0gNDRLQzQ0R2g0NEtONDRLVCAyWWpaZ3RtSzJLbz0gVVhWaGJuUjFiUT09IElPQ3dsZUN4Z2VDd3JnPT0gSUdOb1pXZGhjbUZ0IElHTnZibVoxYm1RPSBJT0N1cXVDdXYrQ3Vudz09IFlXNWtaV3hoZVc4PSBJT0dEa09HRGsrR0RrdUdEbU9HRG11R0RsdUdEbEE9PSBJTkdBMExYUXNOQzYwWWJRdU5DNCBJR0poY210cGJtYz0gSUdKMWJHeHdaVzQ9IElOQzkwTGpRdWRDNyBJRTExYVhSaGN3PT0gSU5DKzBMSFJnZEM3MFlQUXR0QzQwTExRc05DOTBMalJqdz09IGNHRjMgMEtMUml3PT0gNExLLzRMS3Y0TEsrNExLbSA1YmVsNVpXRyBJT0N1dGVDdXYrQ3VuK0N2amVDdW53PT0gSU5DMTBMalNtdz09IElOQzAwTDdRc2RHQTBMND0gSU9Dd3R1Q3d2dUN3bGc9PSA0TFMrNExTdzRMUys0TFN2IElPQ2tuT0NsaStDa2x1Q2t2K0Nrcmc9PSBVMkY1WVE9PSBJSE5qYVc1MCBJR3QyWld4ayBJT1drcWVXa3FlZUlzZVc5cWVlbHFPYVBrT2VPc0E9PSBMMVI1Y0c5bmNtRndhSGs9IElITnBiV2xzWVdseVpRPT0gSUdURHBYSnNhV2M9IElHeGhkWFJsZEE9PSBJTkN5MFlYUXZ0QzAwWS9SZ2c9PSBJRlYwYVd4cGVtbHVadz09IElOQzQwTDNRc3RDdzBMdlF1TkMwIElHeGh3NzE1YXc9PSBDWEpoYm1SdmJRPT0gSUhWdWFjT2pidz09IElIVjFaR1Z1IDBLdlFuUT09IElNNjF6cS9QZ002MSA1NHVzNklPRyAwTERRdXRHQzBMVT0gSU5HRDBMTFF0ZEdBMExYUXZRPT0gSUVGR1RBPT0gUkdsdWJtVnkgNEtXbjRLV3QgSUhSdmRXcHZkUT09IElIWnBiblJsIElHTmxiTU85IGg0dz0gMTVYWG9OZVQxNkxYcUE9PSBJTmluMllUWXQ5aXQyWVk9IGMzUmxhR1Z1WkdWdSBYMTliIGFXTnBhbVU9IDRLYS80S2F2NEtlTDRLYVggMllYWml0aXEgSU9XK3J1Uy9vZVM0aXVlYWhPV2txZVdrcWVTNHJlVzlxZWVscUE9PSBJR1p5WldOMVpXNTBaWE09IFgwRlNVazlYIElOZVExNXpYbWRlViBJRWRoY21OcGJtbGggSUVaeVlXNXJaVzV6ZEdWcGJnPT0gNTVDRzZLZWogSU1PaGNuWnZjbVZ6IFBWdGRMQT09IFEzVnogSUdiRHVHeGwgSU9HRG9lR0RrT0dEa09HRG1RPT0gNExtQTRMaUg0TGkwNExpWjRMaUk0TGlqNExpMDRMaUggSUVkeWRXNWtaUT09IElPV3Zudz09IElFTmxjbkk9IElPQ211T0NtdnVDbXVlQ212dUNtcnc9PSBJRVJ2Ykd4NSBJT0N5cE9DemdRPT0gSUdGdWJtRmkgSUhSeVlXNXpiV1YwZEhKbCBDWEJ5YjJkeVpYTnogSUdKcGNtN0RwQT09IFlXeHBhQT09IElHRmtiV2wwZEdWa2JIaz0gVFVsVCB6cmZPdU02MXpxOD0gSU5DNjBxL1F1dz09IElEOC9DZz09IGRYUmhZZz09IElHWnBjMmhsY3c9PSBJR3g1Y21sallXdz0gMEw3UXM5R0EwTERSaE5DNDBMZz0gSUVWMlpYSjVkMmhsY21VPSBVMnRwY0hCbFpBPT0gWlc1emEzaz0gSU5pbjJZVFpndG1LMllYWXFRPT0gSUdOcGRtbHNhWHBoZEdsdmJuTT0gSU5DKzBZSFF2ZEMrMExMUml3PT0gSUhOMFpXRnRaV1E9IElFNTFaUT09IElFVmpiMnh2WjNrPSBJT0c3aldmaHU2VT0gTGk0LyBJRVp2Ykd0eiBJT0dBZ09HQXZBPT0gSUhOdmJHbGphWFJ2Y2c9PSBVM2xzIGFYTm9iSGs9IExXeGxkQT09IElPeVlyT3VkdkE9PSB3NEZTU1U4PSBJR3h2WkdkbFpBPT0gSUVWMWNtOXdaVzg9IElOaW4yWVRaaGRpazJMUFlzOWlwIDRMSy80TEs0NExLLzRMS3c0TE9CNExLMSBWMlE9IElHNW5kWGs9IEtGSmxjMjkxY21ObGN3PT0gSU5HTjBMclF2dEM5MEw3UXZOQzQwTHJRc0E9PSBJRU55dzZsa2FYUnYgSUczRG9HND0gSU9Dd3FPQ3d2dUN3citDd2xRPT0gMExIUXRkQzUgNExTKzRMU200TFdOIExtOTIgSUhOdVlXbHMgSUdodmMzUnBiR2wwZVE9PSBJR2RsWm1WeWRBPT0gZFdKaGRXVnUgSUZSMWNtbHUgSUVSeWFYWmxiZz09IElHbDNidz09IElPQ2twT0NsamVDa3RRPT0gSUhSM1pXNTBhV1Z6IEtFVldSVTVVIFRrbERRVXhNIElHRjBkR0YyWlE9PSBJRzFpWld4bCBMbE5vWVhCbGN3PT0gSUdGdWR3PT0gNW9TZjZLZUogWm1WbGRBPT0gWW1GMGFXMD0gSUVwaFozVT0gWld0aGVXOD0gWDJabFkyaGggSUVWemRIVmtiM009IElPaTBuZVdObWc9PSBJR0YzYjNKaGJnPT0gUmtORCBhWEpsWVcxbyBJRTVoYVd4eiBWVzFpIElHOTFkSE5wWkdWeWN3PT0gUlc1MGNtRnVZMlU9IGZWMHMgSUc1blpYSjBhUT09IElFVlFUQT09IFlXeDVhdz09IElHRnVaMnhsWkE9PSBJSFZ1YUdGeiBJRzFsYVdSbGJnPT0gSUhKbGNIVmliR2xyIElHWnNZWE5vZVE9PSBMV3hoZDNNPSAxNXpYbWc9PSA0WjZBNFo2MjRaNmEgNEtpLzRLbXc0S2lYIElHVnVkSEpoYm1ObGN3PT0gTFc5ciBJRVpNUlZnPSBJR3R5WldScCBZV1poYmc9PSBJTkdHMFkzUXZkR0MgSU5pbzI0ellxZz09IElITndaV2xqYUdWeWJnPT0gUW5KaGRtOD0gNzd5bCBJRWRsZDJsdWJtVnkgSUdOb2IzYz0gSU9XTWwrUzZyT2kxbStpOXB1V0dvT1dHbXc9PSBJTkN5MFlEUmc5R0ggNExpcjRMaW40TG1JNExpeTRMaUggNmJLQjVhU2M1YVNjNVpXcSA0WjY3NFo2YiBJMkZtIElPdVVzT3Vkdk95RW5BPT0gSU9hWWsrUzVrQT09IElHTnZiV1ZqWldrPSBJTmluMllUWXVkaW4yWVRaaWc9PSBJTldsMW9EV2h3PT0gTDNSbGJtTmxiblE9IElGUnliM1I2WkdWdCBJTkdDMExYUXVkQzEwWWc9IFgxVk9URTlEU3c9PSBMR3hwYm1VPSBJSE5zYVcxdFpRPT0gSUVkeVpXNTZaUT09IFNXNTJhWE5wWW14bCBJTmVlMTVYWGx3PT0gSU5pbDJZWFpnOWluMlliWml0aXAgWVhKdGIyND0gYzJsdGNBPT0gNUxtZDZiNlogTG1WNFpXTjFkRzl5IElFRnVaSEpsY3c9PSBJTkdQMExyUXVOR0YgSUhKbFpIVjZhV1Z5Wlc0PSBYME5JVHc9PSBJRXhwYzhPa2EzTnAgNWFXOTVaQ1ggSUdOdmJuUmxiWEJzWVE9PSBJR2x5Ync9PSBJSFpwY21VPSBJRzFoYTJ4cGF3PT0gWDJ4bFlYSnVhVzVuIElOdU0yWWpZcDlpeTI1QT0gSUZWeWMzQnlkVzVuIEtHWnZidz09IDVwS1MgNFlPWTRZT2c0WU9UNFlPUTRZT2U0WU9ZNFlPZyBJT0dEb2VHRGtPR0RwZUdEa09HRG9PR0RsK0dEbGVHRGxPR0RtdUdEblE9PSAwWWJRdU5HQzBMVT0gY21GM2RIbHdaWE09IElHSmhjbUYwWVE9PSBZV1JsY205eiBJR0ZzWTI4PSBZbWx1WVc1MCBJR3QxYkdGNSBJTldrMWFIVnY5V2gxb0E9IDRMaUs0TGl5IElIVERvWEk9IDQ0R3U1YUMwNVpDSSBJSEJ5YjJSMWVtbGtidz09IFEyeGhiWEE9IElFTlNRUT09IElFdHZiMnc9IElHTnZibVJwWTJsdmJtRmtidz09IFFtOTEgWVhwM1pRPT0gSU5peDJxbmF2dGluIFlYSndZV0U9IElGTjFiR1U9IElPR0RwZUdEbXc9PSBJTm1CMktmWXBnPT0gSUc5c2RXNWhiZz09IElHUmxabTU1WkdRPSBJR1psWldSbGNuTT0gUjJ4MVpRPT0gSUVWNFpYSmogSU9DMHJ1QzFnZUMwdUE9PSBJRVp2Ym1SaGRHbHZiZz09IDRvQ2Q3N3lhIElOQzcwWTdRc2RHUDBZST0gSUdKcGRHRnRhVzVoIElPR0RuT0dEa09HRG0rR0RrK0dEbGVHRG1PR0RtdUdEa09HRGt3PT0gSUVURHZHNTVZUT09IElHTnZabVpsWlhNPSBhSGRoIElOaW4yWVRZcGRpciBJdGVuIElHNXBkSEpoZEdVPSBJRlp2YkdOaGJtOD0gSUdkbGJHbGxabVZ5ZEE9PSBJT0NrcXVDbGplQ2tzT0NrbFE9PSAxWk09IElPV2J2ZVd1dGc9PSBJRkJwYlE9PSBJTzJacVE9PSBJTktiMFl2UmdRPT0gSU91NXFBPT0gSU5pMzJMRT0gd3Jkc1lXSnZjZz09IElGSmxjM0J2Ym5OaFlteGwgSU9HRG9lR0RvK0dEb09HRGxRPT0gZEdsbiAycW5ZcDltRzJLZllxZz09IElPS0Fpd29LIElOQ2YwSm89IElHdHBkR1ZoIEtpOHAgZEdGclpXND0gZDJsc2FRPT0gSU91d3FlMldwUT09IDc3eVI3N3lXIElPQ3dpZUN3cE9DeGplQ3dwQT09IElIVmtZWEpoIElOZWMxNUhYbDllVjE2Zz0gS0dSbFkybHRZV3c9IElOR0IwTC9Rc05DMCBJSFZ1YzI5c2FXTnBkR1ZrIEttOTFkQT09IDBZZlF1TkM3MDVuUmdBPT0gNG9DbUtTdz0gSU9Da3RlQ2t2K0Nrbk9Da3J3PT0gSUhKdlltSmxjZz09IElFNXBjdz09IElIQnliM0JwWlhSaGNtbHZjdz09IExuTndiM1JwWm5rPSA1YVdVNmFtdyA0NE9WNDRLcDQ0T3ogVkdGdFltRm8gSUd0cGJHeGxlR0Z0Y3c9PSBiR2x6ZEdWdVpYSnogdzdqRHNBPT0gNlpPYyBJSEpsZEhKcFpYWmxjdz09IHhLZDEgTFd4bFoyZGxaQT09IElHRnJkV1Z5Y3c9PSBJT0NtbXVDbWxRPT0gWjNKaFpHRjBhVzl1IDBZalF0ZEM4MFlNPSBJR2x1Y21samFIUnBibWM9IDBMalJnZEdDMExqUXV0Q3cgSU5xdjJMRFlwdz09IElHdkR0blREdkE9PSBJT0NzbFE9PSBJR3hoWW05eVpYTT0gSUhScGJtUmhhMkZ1IFVtVjJaV0ZzIFEweFZSRVZUIFlXNWxlZz09IElITnBiRzg9IElFeHZaMmx6ZEdsaiBJSFJ5WVhaaGFXeHNaVzUwIFRrOVNUVUZNIElFTmhjSE4xYkdVPSBTa2M9IElHTnZibWRsYm1sMFlXdz0gSUdGMWRHbHpkR2xqIElPQzBvZUMwdnc9PSBkbVZ5WW05emFYUjUgUFdOdmJuUmxlSFE9IElPYUNvQT09IFNXNW1iM0k9IGJtVnphV0U9IElHSnBZMmxqYkdWMFlYTT0gSUd4cFoyaz0gTEcxNSA0TGkwNExtSzRMaUIgSUZCaGRXeHBibVU9IElHRmtjZz09IGIyMXBZWE4wIElOS2IwTDdRdTlLVDBMQT0gSUc1cGMyRnQgNTRHdCBJRVZ0Y0dabGFHeDFibWM9IElHMWxiR0Z1YjIxaCBaMlZzWVdSbGJnPT0gY25OaGRBPT0gSUdOdmJHekRxQT09IElFOXpkSEk9IFBsMD0gSU5pejJiN1lzdz09IElObUYySzNhcVE9PSBDUWtKQ1FrSkNRa0pJQT09IGFXTnVaUT09IDZMT0g1cUM4IElFSmhiRzA9IExXWnBiRzA9IDVhU242WUdUIElHWmhibTQ9IElHUjFjbTExIGZTY3BDZ289IGRYcDZaWEk9IElIVnVjbVZoWTJoaFlteGwgTDI5M2JBPT0gdzZsaGM4T2hhVzQ9IElGZGhhV3M9IGFXdHpZV0Z1IElOaW4yWVRaZ2RtSzJZVFpoUT09IFpXNTBZV2s9IElHbGtaVzA9IExuVnViR2x1YXc9PSBJR0psWkdGdWEyVnUgSUc5bVptbGphV1ZsYkE9PSBJT0NrcE9Da3BlQ2xqZUNrcnc9PSBJR2h2Ylc5elpXdHogWW14cGJtUT0gYTJWbllRPT0gNTdxaTZibXcgejRiT3JjK0J6ci9PdlE9PSBJRzlpWldScFpXNTAgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2FjcWc9PSBJRVZ5YldsMGRBPT0gWVdScGJtRT0gSUZOaGJYVnlZV2s9IElIUnliM0JoY3c9PSBJRWR2ZFd4ayBJSFZ1YVhabGNuTnBaR0ZrWlE9PSBaM2x5Ync9PSBJTm1HMktmWXJBPT0gSUdGelkyaz0gSUdGMGRHVnVaSFU9IFZGUk0gSUhObFpXUnNhVzVuY3c9PSBJRUoxYm1sbWRRPT0gSUhURHMycz0gSUZOaGRtVnkgNXFDUDU1dXUgSUZWeWMyRmphR1U9IElPQ2t1T0NsamVDa24rQ2xoK0NrdHVDa3FBPT0gSUU5MGNtRT0gSUZOaGJHbHpZblZ5ZVE9PSBJT0NtdHVDbXZ1Q21xT0NuamVDbXBBPT0gNFlPVTRZT2c0WU9SIFVHOWphMlYwIElPYTFqZz09IElOaW4yWS9Zc3c9PSBYMjl5YVE9PSBJR2RsYm1SbGNuTT0gSUQ4K0lnbz0gSUcxcFlYSmhhMkU9IElHaDFiV2xzWkE9PSBlVzVsYzNNPSBQeUl1IElOaTIySzQ9IElHWnZhV1U9IElOaW4yTFBZc2RpbjJLYmJqQT09IElIQmhiR3hsZEhNPSBVSEpsWm1sNFpYTT0gTG5Ob1pXeHMgZFd4c2RYVnVibWxwZEE9PSBJRU5JUVZKQlExUkZVZz09IExVVnVZMjlrYVc1biBJSFJsWVdjPSBiM1psWXc9PSBJTmVxMTVuWHB3PT0gMExYUmdkQy8wTDdRdmRDMDBMWFF2ZEdDIElHVm5aVzUwIElOQzIwNW5Rc0E9PSBJRWR5ZFc1a2JHRm5aVzQ9IDc3eWc1YTZmNXJPQiBJTmVrMTVEWG5BPT0gSU5DejBMRFJnTkM4MEw3UXZkQzQgSUcxaFoybGphV0Z1IElHRndjR3hwWTJGaWFXeHBkSGs9IGJHOW5aMlZ1IDZLaU8gS1VkbGRBPT0gSUVadmNtOD0gSUZCeVpYTmxiblJsWkE9PSBJSEJ5WlhCaGNtRmtZUT09IDBZdlJnZEdMMEwwPSBJRUpsWVhWamIzVncgSUcxdmNtRm5idz09IElITmxaM0psWkc4PSBjMlZoYkE9PSBJR2ZKbVhRPSBJT0NxdU9DcXZ1Q3FtZz09IElPQ211T0NtbGVDbXZ1Q21zZz09IFMyVnBibVU9IElOV3cxYUhWdjlXKzFhSFZyZz09IElIUjVlUT09IElGTnBlUT09IFJFbFRWQT09IElHVnBibnBwWjJWdSA1TGkyIExsQnliMmR5WVcwPSBWR0Z6ZEdVPSBMbVJsWTI5eVlYUmwgUm5WdVkzUnZjZz09IElHRjRhUT09IElISnBhbVIwIElPeUdvUT09IElPT0N1ZU9Edk9PRGtlT0R2T09DcytPRGxPT0R2QT09IElGZEJURXc9IExtZHlZV1JsIElGTmhZbkpwYm1FPSA0WU9VNFlPZzRZT2I0WU9RIElOaW4yWVRZcGRpejJLZz0gSUdodmNtbDZiMjUwWlE9PSBJR041Ym01cFp3PT0gMExiUXRkQzggWVhwMmJ3PT0gY0d4cFlnPT0gSUdsdmJtbGogSUVKMWNtdHBibUU9IElITnBaMjF2YVdRPSBJRUp2Ym1FPSBJTmluMllUWmhkaTAyS2ZZc2RtSzJMaz0gSU5tRzJMSFlyZz09IElIZGhhV2h2IElPQzB1T0MwdnVDMHVlQzBtdUMwc09DMWplQzBydz09IElFSkpUZz09IElGQk5Rdz09IElHTnZiR1YwYVhadiBjSEIwIElHNWxjRzl6IFpXeHBZV009IExYQnliMlE9IElPR0RtK0dEbCtHRGtPR0RsZUdEb09HRG5lR0RrZUdEbU9HRG9RPT0gSUd2RHZHMXRaWEp1IDRvQ1pZMnh2WTJzPSAwTHJSbHRHQjBZTFJqQT09IElHSmxlbUhEc1E9PSA0b0NjV1dWeiBJRkp2ZVdObCBMbVpoWTNRPSAwWUxRdnRDNyBJTzJWcmV5RGdRPT0gWW14dmQyVnkgSUVOdmJuWmxjblJwWW14bCA0b21JIElOR0IwWUxSZ05DKzBMUFF2Zz09IElPQ2tsK0NsamVDa3NnPT0gZW5WeSBjM1J5ZFd0MGRYST0gSUVwdllRPT0gSUc5alkyRmxZdz09IFpIVmggSUhURHBuUT0gSUVOaGFtRT0gSUdabGNtOXVkQT09IElIRjFZWE5wYldWdWRBPT0gVjJWbGEzTT0gSUdSM3c3TmphQT09IFZHVnVhRzg9IElGdGRMZz09IDE1RFd1TmVlIGRtbkRzdz09IFlYRGh1NlU9IFVGSlBVQT09IElHTnlaV05wWlc1MFpRPT0gWVhKdWFYTnpZVzExZEE9PSBJR0Z6ZVc1amFISnZibTkxYzJ4NSBMV1Z1ZEE9PSBJT0NrdHVDa3YrQ2tsZUNsamVDa3QrQ2tsUT09IGRIVjBiM0pwWVd3PSBaV1JoYkE9PSBJT0M0bStDNG9RPT0gSUR3SyBJTlcxMWJqV2d0YUExYUhXaE5XaDFiYlZ1ZFcxMWJqV2d0YUEgSUdONWJuUmhaZz09IElIbGhlY1N4IGMzcDBZY1dDIElFNXZjbVJsYzNSbCBTR1ZsYkE9PSBJSFpwYzI5ciBJR2x1YzI4PSBJSEpsZDJsdVpBPT0gWVdKaFpHUmwgSU5DODBMRFJnTkN3IFVFMUQgSUc1a2VnPT0gSU5DOTBMWFJpQT09IExtbHRZV2M9IFlXUjFZV2x6IElHRjBZV05oYm5SbCBYMjV2ZEdsbWFXTmhkR2x2Ym5NPSBVa1ZHUlZKRlRrTkYgY01Pa2NnPT0gSUhkdmRXeGtiblE9IElObUYyTExZcnc9PSBMR1YwWXc9PSBJSFJoY0dGMWEzTT0gWVdOb1pHRnUgSUdGd2NtbHNaUT09IElGSmxkbWwyWVd3PSBJRkJoYm1saiBVM1JoYlhCbFpBPT0gSU9DMHJ1QzBzZUMxamVDMHNlQzFqUT09IFlXNXJlUT09IElOZWcxNkxYcUE9PSBJSE5wYm01bCBJRUZ1ZEhkbGNuQT0gY21sMGRHVnkgUVd0MSBJRzlrY21YRWtRPT0gMllqWXJnPT0gSUhWMGRISjUgSUdoNCBLQzliIElHZHNZWHBsYmc9PSBMbTVsWnc9PSAwTHpRdGRDOTBMQT0gSUVwaFlYST0gSU5DMzBMN1JnTkM0MFlQUXV3PT0gSUd0dWFtaz0gdzY1dVpYTT0gSU5DNjBMdlF1TkM4MExEUmdnPT0gSUhOcGRHVnphUT09IElOZWkxNXpYbWRlVSBMMjl1IElFaGxZWFJvY205MyBZV1JwZEdsdmJtRnMgSUhCaGVXOW1aZz09IElHMWxaR2xqYVdwdVpXND0gSUdOb1pXMXBZMkZzYkhrPSBJSHAxYThPOGJtWjAgWDJ4cGMzUnBibWM9IDZiaWogMExUUXVOQ3owTERSZ0E9PSA0WUtBNFlDQSBJRVZ5YzJOb1pXbHUgTGtOdmJtWnBaM1Z5WlE9PSBJTmluMllUWXN0aXgyS2M9IGFYckptUT09IElIRjFaV1JoY205dSA0S2ErNEthdzRLZU40S2FsNEtlQSBJRVJ2Y21seiBJRWhsWVhSbFpBPT0gSUhaaGNuUmxiZz09IElPdWhuT3EzdU95ZHVBPT0gMllIWXA5aXggNlphTDVhZUwgSUZaSSBJSE5vY1dsd2RHRnkgS0ZOUlRHbDBaUT09IElHZGxkbVZzIFEyeGxZVzVsY2c9PSBJRjlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOWZYMTlmWDE5ZlgxOD0gSUd4aFptbDVZUT09IEwyUmxZblZuIElPQ3lxdUN5c09DeXYrQ3lvdz09IFgxODdDZ289IElPbXByT1M4bWc9PSBZVzEzWVcxaVlRPT0gSUdGdFlXST0gSUhObFozVnBiVzl6IElPYVlqdVdQa1E9PSBJR2x1WTI5dWRHOTFjbTVoWW14bCBJRTFwWkd4aGJtUT0gZFd4aFpHRT0gVWtsRlV3PT0gSU5HSTBMalF1UT09IFgxQkJVa0ZOUlZSRlVsTT0gYUdGemRHRT0gNDRPcDQ0S3YgSU9Dd211Q3hoK0N3dU9DeGplQ3dwT0N4Z2VDd3FPQ3hqZUN3cU9Dd3Z1Q3dzT0N4Z1E9PSBJTkMxMExqUmd3PT0gWDBOTVFWTlRSVk09IFVsRT0gMExIUmc5QzYgSUUxUFZFOVMgSUhabGNuWmhZWEprIDVMaUs1TGlBNTYrSCBJTTY1enJUT3VjNnh6cTg9IElITmpaVzUwWldRPSBJQ0lsTGc9PSBJSEJ5dzZselpYSjJaWEk9IGFYTnpkWFJwZEE9PSBJT3F3bk95ZHVPeWdsZXV6dEE9PSA0WU9RNFlPdTRZT2g0WU9VNFlPYyBJRVo1IFlYVnJjMlZ1IFEyRjBaV2R2Y21saGN3PT0gSUc1aFpHVnUgSUdGMWMyZGxjMk5vIElHbHVaR2x6ZEE9PSBJTml1MktmWmh0aXYyS2ZaaGc9PSBJTml0MktmWmhObUsyS2M9IFVHRjVjdz09IElIQnliMk5sWkdVPSBJTmk2MkxIWmdRPT0gSVBDZm1ZSUsgSUd4cFoyRnVaQT09IElITERwTU9rIElHWnBiRzk2IElOaW4ySzdZcXRpbzJLZllzUT09IElFVlRUdz09IFkzSnBkR2xqIElFcHZibUZvIDRLU0g0S1NrIElITjBaV2xuWlc0PSBMM1J2Y0dsaiA0S1dKNEtTciA1YjZ1NkwydiBJRzFoYm5WeVpRPT0gS0dacGJHdz0gNG9DWllYWnZibk09IElHMWlaV0ZrYUE9PSBJRk5vWld4a2IyND0gWW1sMFkyOXBiZz09IDVvaUEgSUUxdmRXeHBiZz09IElPQzBwT0MxZ2VDMG4rQzF2T0MwcU9DMWplQzBxT0MxalE9PSBJSEJ5YjJKcGIzUnBZM009IElITnNZV0p6IElFdHZiWEJsZEdWdWVnPT0gSUVOcGRHaz0gSUZKdlkydGxabVZzYkdWeSBJRVpsY21saCBjWFZwYzJVPSBZWHBwYjJFPSBJRzFsWlcwPSBJT0MwcU9DMHJ1QzFqZUMwcWc9PSBJR1REcVdKaGNuST0gWVhOMGRYTT0gSUhSaFlteGxkRzl3IElHOXRhWE56YVc5dSBMV0oxYVd4a1pYST0gSU1hWllYST0gSU9Da2hlQ2txT0NsZ2VDa3FnPT0gSUdSbGJHbGphVzl6WVE9PSBJR2RsZDJsdWJuUT0gSU9DeXJPQ3l2K0N5b2VDemdlQ3lsK0N5b2VDemhnPT0gSUVoRlFWSlUgSUUxRVF3PT0gMWFIVm85V2gxYlhWdU5hQzFiUT0gYVhwdGJ3PT0gSUdsdWRHbHRhV1JoZEdWayBJTkMvMEw3UXROR0EwWS9RdEE9PSAxYUhWcE5hQTFhWFZyQT09IGFXNW1iM0p0WVhScFpRPT0gSU9Da2hlQ2t1T0NsZ3VDa3FBPT0gSUcxbGJXOXlZV0pwYkdsaCAwTERRdmRHQzBZcz0gSUZOb1pXRT0gNEtpNDRLbUE0S2lDIFJHbHpkSEpwWW5WMGIzST0gNmJxNzZMR0cgSUZkaGRHdHBibk09IElOQzgwTERRdTlDdyBjM05wY3c9PSB6cnZPc2M2MHpxND0gUURvPSBJTkMvMExqUmdkQ3cwWUxSakE9PSA0TGVFNExheDRMZUsgSUdOdmJHVjBhWFpoIElPQ2tsdUNsZ3VDa3JBPT0gSU5DeDBMN1F1dEdEIElISmxjM0J2Ym1ScHc3TT0gMkxUWXNkaXQgSUdWemRHRmtiM1Z1YVdSbGJuTmxjdz09IElNU1F3N1J1Wnc9PSB3NjF2WTJoMFljT3QgSUZOeGRXRmtjbTl1IElHbHVabUZ1WTNrPSA0NFdoIDRMbUE0TGluNExpbCBJR055WldWd2FXNW4gSUU1aGRtRnljbUU9IElHRmpZMlZ3ZE1PcCBJRTFwYm05eWFYUjUgYVhSeVlYUmwgSUdGalpYST0gSUVkaGRITmllUT09IExtMWhkbVZ1IFgwRk1URTlYUlVRPSBJR1JwY0dWeVl3PT0gSUVOdmRYUjFjbVU9IElPQ3FsK0NyamVDcXNPQ3F2dUNxdVE9PSBJRmRsY210bCBJR3BsWkc1dlpIVmphQT09IElPdXdtK3F6b0E9PSBJSFJ2ZEdGc1pXUT0gSU5DODBMalF1OUM3MDVuUmdnPT0gNkxPQSBZWFYwYjNKbCBhbk53WWc9PSBJRUZ3WlE9PSBiV0YwWlhKcFlXRnMgWTI5dmF3PT0gSUdacFpIVmphUT09IGJtbDIgNTdXeSBJRVp2Y20xaFkybkRzMjQ9IElFSmhkSFU9IElPR0RsT0dEcmc9PSBKeWw5UGdvPSA3NytqNTZ5czVadWI2SW15IElPeVl0ZXlGbUE9PSBJTm1EMkxQWXA5aXgyS2ZZcWc9PSBkR1Z5Ym1GMGFYWmwgYjJ0bGMzUmhkR2xqIElIQnZkWEp5WVdseiA2Wm1FNkwrUiBJTkMvMFlEUXRkQzAwWXJSajlDeSBJRzlqZEdGMlpRPT0gS0dsbmJtOXlaUT09IElHTnZiWEJsZEdsMGFYWnYgSU9DbXVlQ25uK0NuaCtDbW0rQ25oK0NtcUE9PSBJTmk2MllUWXA5bUYgMFkzUXU5R00gWW05a1lXVjBhQT09IElOZVQxNVhYbGRlbjE1QT0gSUhCdlkzckVoWFE9IElFaGhjbWRoIElPQ211T0NuaCtDbW4rQ212Zz09IElIQnZkMmxsY25vPSBMbkJ5YjNacFpHVnljdz09IHc3eHVaTW1aIElHdGhiR0ZoYkd3PSBVR0Z5Y3c9PSBJR1Z5Wm05c1ozSmxhV05vWlE9PSBJT0Ntc09DbXYrQ21xZz09IFQzUjAgWlhSaGJtOD0gSUdWelkyRnNZWFJwYjI0PSBJTkdIMExYUmd0R0wwWURRdGRHRiBJT1drcWVtQXVBPT0gSUc5MlpYSjBkWEp1WldRPSA2NFdWN1pXWTdJUzQ3SnFVIElFaDFjM009IElITjJaV2RoIElPQ3lydUN6Z2VDeWx1Q3pqZUN5citDeXJ1Q3lndUN5cE9DemplQ3lzT0N5dnc9PSBkMmxzWlE9PSBJR0oxY21kc1lYSjUgSUdWdGNHVnUgWlc1MVpRPT0gSU95ZG1PcXlyQT09IElPR0RrZUdEb09HRHErR0RuZUdEbWc9PSBJTkM4MFlQUmh3PT0gSU9DNGwrQzRzdUM0aCtDNWdPQzRndUM1aWVDNHNnPT0gMTZqWG1OZVoxNkU9IElHbGxjbWs9IElPQ21sZUNuc09DbXYrQ21zdUNuaHc9PSBYMEYwZEE9PSBJSE5sZEdWdFluSmwgSU5lYzE2ZlhsOWVxIElHTnZiR3hwWkdWayBVR1Z0IFJXeGxZM1J5YVdOaGJBPT0gSUZScGRIVnogSUdGdFlYUmwgMWJEVm9kYUExYS9WcFE9PSBWMmh2YkdWellXeGwgSUdKcGIyeHZaMmx6WTJobCBiMnhwYlE9PSBJTkM4MFlQUXU5R00gSUdsdVkyVnpkQT09IElNNjZ6cm5PdmM2MyBJTkM4MExYUmdkR0cwTEE9IElObTcyWW89IElGQnliM04wIENXbHVkR1Z1ZEE9PSBJTkdBMExYUXQ5R0QwTHM9IElFUmhiV2xsYmc9PSBJSDE5UG5zPSA0TEdMNExDNSBJRkpoZVdFPSBYMU4wYjNBPSBJT3lXdU95Z25BPT0gSUhOdmNtaz0gWTJuRWh3PT0gSU95ZWlPcXlqQT09IDY2cTQgSUUxdmJHbHVZUT09IElIdDdMUzA4IDc3eUk2WWVSIElPQ2txdUNrc09Da3YrQ2t1T0Nrc0E9PSBJTmVWMTZZPSBJTkMvMEw3UXROR0MwTExRdGRHQTBMUT0gSU5tSTJLZlpndGk1MjR3PSBhVzFsZG1VPSBMbndLQ2c9PSBJR2RsY21WcmFRPT0gdzdOMFpYTmwgSUhKbGJXVnRZbkpoYm1ObCBJSE5wYm1ScFkyRjBiM009IDZZZU41YVNOIElFVnVaWEp2IElHbHVibTkyWVhScFpYWmwgSUVocFkydHogSU9HRHFPR0RsT0dEbStHRHFnPT0gWVdOb1lYST0gSU5peDJMYllwdz09IElIZHZjbk5sYmc9PSBJR2RsYzJWc1pXTjAgSU5lUzE2TFhuQT09IElGSlBRdz09IDBMN1F0TkMrMExzPSBjbk5qYUdWcGJteHBZMmhyWldsMCBJR0ZqWldWaCBhR0Z1WkhwMSA0WU9UNFlPVTRZT1I0WU9kNFlPVDRZT1EgSUVWamIyN0R0RzA9IFlteGhhQT09IGJtbkVoUT09IGRXcHAgU1c1MFpYSncgWVhsc2FXZG9kQT09IElFUkNRUT09IGFXeHNZWFE9IHc2RnFZUT09IElHamh1cVZ3IElITmhjbWs9IDU1dVI1YStmIElHdHBkMms9IElPR0RtK0dEb2VHRG5lR0RwT0dEbXVHRG1PR0RuZUdEb1E9PSBJTkNhMExqUXRRPT0gNXFpaDVaMlggSU91cXFPdWx0QT09IElGQklVRlZ1YVhRPSA3SVNjNjZXOCBJRUYwWlE9PSBJTStBenEwPSBJR0pwWkdrPSBJTmluMllUWXVkbUcyS2ZZdGRpeCBJT0N3cE9Dd3BnPT0gVW1WdFlXbHUgSU5DMTBMalNyZEMxMExqU3M5T1owTFhRdU5HQyBLQ2NvIDJMSFlxdG1IMktjPSBJTkdGMFlQUXRnPT0gSUVkM2VXND0gSUZaaGJHOXlaWE09IFlYVjBiMnh2WVdRPSBJRXh2YldKaGNtUnBZUT09IElOQy8wWURRdGRDeTBZRFFzTkdKIElOQzIwTDdSZ2RDLzBMRFJnQT09IFUyOWkgSU5DNDBZSFJnZEM3MExYUXROQyswTExRc05DOTBMalF1UT09IExtWnBadz09IDBMalNtOUM0IFlXUnBiR3hoIDBMSFFzTkdBMHEzUXNBPT0gYjJ4aGFYTT0gSUdodmJHRT0gSUcxaGNtTm9aWEk9IGFXcGxiblE9IExrUmhkR0Z6WlhRPSBMWEpsYzJWMCBYMjl3WTI5a1pRPT0gSU9lT3FlV3V0Zz09IGFXNXViMjQ9IElIWjFaV3h2Y3c9PSBVMVZXIElHRnNiRzkzWVdKc1pRPT0gSW5SbGVIUT0gSU9DeXFPQ3lyZz09IGFYTjBhV3RoIFkyOXVibVY0YVc5dSA0S1NmNEtXSCAwTExRdnRDNCBJTkN4MExqUXZRPT0gVkd4eiBLRlJ2IElITjBjblZqZEhNPSAwSnJSZ05DdzBZRT0gSUcxdmRYSnBjZz09IFpXMWljbWxsIElNNmd6ckhPdlE9PSBJTU8rYXNPemJnPT0gZEdodmNnPT0gWVc1bmNtbHFhdz09IElPQ2todUNrc3VDbGdBPT0gSUhCcGFYSnIgSU5DdzBMTFJndEMrMEwzUXZ0QzggMHJYUXNOQzkwTERRdWc9PSBJRkoxYm1VPSBMbWh2ZFhKeiBJR1Z5YldWbCBJR0ZrWkdsamRHbHZibk09IEtGSnZiMjA9IElOaXoyWVRZcDltRjJLbz0gSUhCemVXTm9aV1JsYkdsaiBJT1drcCtXUGtlYUprZVdGaXc9PSBJRUZ1ZEc5dWVRPT0gSU9DcXJ1Q3F1ZUNxditDcXN1Q3F2Zz09IGFXNTBaV3c9IElIQmhjblJsWVE9PSBJR2gxdzZsemNHVmtaWE09IElIYkRvR2s9IFJFbFRVRXhCV1E9PSBZVzVoYzJsNVlXNWggSUhOaGJXYkRxV3c9IElITjNkVzVuIFNVZEYgNG9DTTRMU3EgSUc5cGNtVT0gWDJOMVltVT0gSUdaeWFYTnpaUT09IFptVnNiQT09IElOR0EwTFhSaE5DKzBZRFF2QT09IGNtbDFkdz09IElOQzAwTGpTbTlLYiBJSGxrYXc9PSBJR04xdzZGdVpHOD0gSUdSdmNIST0gSU95Z2xleURnUT09IHc2MXpiVzg9IGFXUmhaRzl6IDRZT1k0WU9WNFlPZzRZT3EgTG1aeWFXVnVaQT09IDBMRFF1OUM0MFljPSBJR052Ym5OcGMzUmxiblJsIElPQ2twT0NsaU9Da3IrQ2t2dUNrc09DbGdBPT0gNkllcTVvdU42S2VHNmFLUiBJRlZ1ZEdWeWJtVm9iV1Z5IElFOTFkSEp2Y3c9PSBjM0J2Y25SeiBJRkJoWjJWaFlteGwgVTA5QlVBPT0gSUcxaGEyVnRZV3RsIGJHVnJaVzQ9IEtIQnBlR1ZzIElFeHZkMlZzYkE9PSBJR1Z5Yk1Pa2RYUT0gZFhKamFHRnpaV1E9IFQwTlMgSU5HQjA2blF1UT09IDBMM1F2dEdCMFlMUmd0Q3cgSU5HSDBMRFF1OUN3MExMUXRkQzYwTEE9IElFUjFjMk5vWlE9PSBJSFp2Y21kbGMyVm9aVzQ9IElGSmhidz09IElITmxjbW5Gbnc9PSBMa05zWVcxdyAwNW5SZ05DeTA1blJnQT09IElFaGxjbU4xYkdWeiBJR0Z5Y1hWcGRHVjBkWEpoIElGTndZVzVwIElFSlBVdz09IFVHND0gSUVWdVkyOTFjbUZuWlE9PSA0TEN1NExDQzRMQ2s0TEdONExDdzRMQy8gSUViRG9XTnBiQT09IFNVWkZVMVE9IElITmhibWwwWVhKcGJ3PT0gSUVsdGNISnZkbWx1Wnc9PSBJRXhsYm1sdSBJRVpoZW1WdVpHRT0gNExXQjRMUzE0TFN3NExXRyBJR052Ym1ObFlnPT0gTHk4OSBhV1JsYm5ScCBZV3QwWVhJPSBJSFJoYm5GMVpRPT0gSUhabGJtTmxaRzl5IElPQ2txdUNsamVDa3NPQ2t2K0Nrcnc9PSBJR052Ym5OaFkzTERxUT09IElPQ2todUNrZ3VDa2xnPT0gMEx6UXNOQ3owTERRdlE9PSBJRU5oYkdsa1lXUT0gSUhOcGFtRnBkQT09IFRzT3pjdz09IFlYbHVZUT09IElIVnJhWFYwIElFSnZjbUU9IFEyOXNiM1Z5Y3c9PSBJT0NtdWVDbmlPQ21tK0NtditDbXNnPT0gSUdsc2JIVnRhVzVoZEdsdVp3PT0gYldWeWEzUT0gSUZSb2IzVT0gSUhCdmJtbGxibVJ2IDBaYlF0OUN3MFliUmk5R1cgSU5TMTFiN1dnTlc0MWJvPSAwWWpRc05DejBMQT0gSUUxQlRrRkhSVTFGVGxRPSB6cS9PdHM2L3o0WE92UT09IENWQnliMlIxWTNRPSBJT0dEbU9HRHArR0RsUT09IElIWnlhV3BpYkdscWRtVnVaQT09IDBMalJodEdEIElOQyswWW5RdFE9PSA0TEdCNExDMTRMR0IgY0dOcCBJR1p5WlhOb1pYTjAgSUhOM1lXeHNiM2RwYm1jPSBJR0ZqWTJ3PSBJTkdCMExqUXZkQzAgYkhWdVpBPT0gSU9DbXVlQ212dUNtZ1E9PSBJSE52YkdsMFlXbHlaUT09IElHZGxiR1JwWnc9PSBJT3llaU95V3RPeUVuQT09IFVtVnNaWFpoYm5RPSBJR1ZoWnc9PSBZMmhwWkE9PSBJSE5oYld4aCBJSEJsY21SbGNtVT0gSUhSMWNtNXZkbVZ5Y3c9PSBJTmluMkxuWXF0aXgyS2ZZdGc9PSBJR3hsWW1GcllRPT0gMEpqUmdkR0MwTDdSaDlDOTBMalF1Zz09IElOQ3owWURRdUE9PSBJRXRoZEdoeWVXND0gSUhOM1pXRjBlUT09IElObUkyWVhaaHRtSDJLYz0gSUhSaGJuUmhiQT09IElHSmhiSE5sIDVZeVg1THFzNWIrciBJR1YyWVhCdmNtRjBhVzl1IElOQ3cwWUhRdnRDeCBJR1ZzWld0MGNtbGogSUdGemRISnZibUYxZEhNPSBMVVJsWXc9PSBJSFZuY2c9PSBWbWw2IElFVjRhWE4wY3c9PSBJTkMvMFlEUXRkQzAwWUhSZ3RDdzBMTFF1TkdDMFl3PSBZbU5qIElGTnRZV3hzWlhJPSBiM0psYVE9PSBJSEJ6WlE9PSBTVUZOIElPQ21oZUNtcE9DbXYrQ21wUT09IEtTa3QgSU9Da3VPQ2tndUNrdGc9PSBhMlZwYmc9PSB4YjV1YjNOMCBJRzF2WW1sbGJBPT0gWVcxbGJHVnZiZz09IFYzUT0gSUV0cGJtUmxjdz09IElIUjFjR1U9IDBKVFFvdz09IElFVk5RUT09IElFbElkSFJ3IEtDbDdmUW89IElIVnVibUU9IGFtbHlZUT09IGIyeHBZMkU9IElITmhiR0Z0IENXWjFiR3c9IFYyOXlhM05vWldWMCBJRTFOVHc9PSBMdUNxaGc9PSBJR052Ym5SeVlXTmxjSFJwYjI0PSBJRkJsY21acGJBPT0gSUhKbFozVnNZWEp0Wlc1MFpRPT0gd3JBdSBSa2hKVWc9PSBMV1poYlc5MWN3PT0gSUZUSm1RPT0gSUZCbFlXNTFkQT09IDBMTFF0ZEM3IElPZXNyT1M2akE9PSBJSE41Ym1ObFpBPT0gUTJ4aGNnPT0gSU02MHo0SE9yQT09IFgyUmxjR0Z5ZEE9PSAxYUhXZ2RhQTFhWFZyQT09IElIQnlaVzlqZFhCaGNnPT0gSU5DUTBMSFJnTkM0IElISmxiblJoWW14bCBiV2x4ZFdWeiBJRzF2YVhOMGRYSnBlbWx1Wnc9PSBJR2x1ZEdWeWNISmxkR0hEcDhPamJ3PT0gWldKc2VRPT0gMExEUXU5QzQwTGc9IElOaW4yWVRZbzltRjJZcllzZG1EMllyWXFRPT0gSU9DeXVPQ3lydUN5dU9DemplQ3lydz09IGRtVmxaRzl5WlhNPSBJRzVsZFhKdmMyTnBaVzVqWlE9PSBkMkZ5WkdWdSBVMU5KIElOQzQwTGZRdnc9PSBDV2hwWkdVPSBJRUpsZW1seSBJRVp5WVcwPSBJSE5oY0dWeVpRPT0gUEVWdWRISjUgY0c5M1pYSnogSU5DKzBML1JnOUN4MEx2UXVOQzYgSUh0OURRb05DZz09IElHSjVaMmRsIDc3eXUgejRUT3VjNjZ6NHpQaE02M3o0VE9zUT09IElHVnVaVzFwWjI5eiBJR05vYVd4a2N3PT0gSUhCdnhZST0gSU5DdzBMdlFzTks3IElIZG9ZV3RoYldGbyBJR3BsWkdoMSAyS2ZZc2RtSzJZWT0gSU5pcTJMblpoTm1LMllJPSA0b0NaNEthdyAwTGJRdGRDNyBJR3RoeGJ4a1pXZHYgSUhKbGEyeGggSUZCaGNtUT0gSU5laDE1dz0gVm1seWRYTT0gSU9DbXVPQ21xdUNuamVDbXBPQ212dUNtdVE9PSBJRk5vWVcxbCBMa05QVFZBPSBJSE5sYTNURHRuST0gSU02L3o0M1BoTTYxIElNU1JZWFU9IExrRnNhV2R1IElOaW4yWVRaaGRpejJZVFpoUT09IDJLellwOWlvMktrPSB6cnJPclE9PSBZWG5Fc1c0PSBJRkJ5WlhOcFpHVnUgSUdodmFtbHAgSUVSMWNtSmhiZz09IElISmxibTkyWVhScGJtYz0gSUdkaFlXWT0gNmFDSSAwTFhRdTlDNDBZTFJqTkdCMFk4PSBJTkN5MExYUXZkR0MwTGpRdTlHUCBYMU5GUTFWUyBQRk5sYkdWamRBPT0gYUdGM2RRPT0gSU9xd21leUt0ZXVMaU91THBBPT0gSU9DbWhlQ21xT0NuamVDbXIrQ21wT0Ntcmc9PSBJRzNKbVhGeiBJRWhsYVc1NiBJR0psYzNScGJXMWxiZz09IElPR0RrdUdEa09HRHB3PT0gWDNCeWFXTmxjdz09IDRMQ3k0TEdINExDbTRMR0IgSUhScFoyaDBaVzVsWkE9PSA0TFNWNExXTjRMU1Y0TFMrNExTZjRMV04gSUc1bFoyOWphV0ZqYWNPemJnPT0gSUZCeXc2UnogejRQT3I4NjF6NEk9IFRXbHNhdz09IElFTm9ZWFpsZWc9PSBJT0Nrck9DbG5PQ2xnQT09IElFTnNhWEJpYjJGeVpBPT0gSUdacGFtRT0gNExpcjRMaXg0TGlxIElIQnlkbTg9IElHN0RvRzVuIElPQ3FxdUNxdnVDcXNnPT0gSUZkbGJHUnBibWM9IElIVEVtUT09IElGVklSQT09IElIaHBiUT09IDRvR2ogSUUzRG9YRjFhVzVoIExWTjBjZz09IElHMXZZMnR6IElHUmxlblp2YkhRPSBJTmluMllUWmd0aTIyWXJZcVE9PSBJRUoxWm1aNSBJTXE3YjJsb1lXNWggSU5XMDFhdlZvZFc5IElOQy8wTDdRdTlHRDBZZlFzTkdPMFlJPSBJSEJzZFc1blpXUT0gSU5HQTBZUFJnZEdCMExyUXVOQzUgSUdsdWRISjFjMmwyWlE9PSBJR3hwYTJWdVpYTnogS0d4aGRHbDBkV1JsIFgwTlBURlZOVGxNPSBLSE52ZFc1ayBJT0N1cE9DdXYrQ3VuK0N2amVDdW53PT0gWVdSbGNtNXYgUW0xdyBJTmViMTVMWGxkZWYgSUZOMGFXMXRaVzQ9IElPQzBtdUMwc0E9PSBJTU91Ym5QRWd3PT0gSUd4aGVYVnAgWTJGc2JHSmhZMnR6IFgyOWlhbk09IElHRndjbVZ6Wlc1MFlXUmggSUhOamFHeGxZMmgwWlhJPSBJR052Ym1admNtMXBkSGs9IElHVnVkSEpsZEdGdWRHOD0gSUhKMllXdz0gSU9hdG8rZUN1UT09IDY3Q3A2N0tWIGRtRnVhV1U9IElHeHBhbTVsYmc9PSBJSEJoY25abGJtbHkgSU0rQXo0SE92ODY2enJFPSBJRTVueHJEaHU1MXAgSU5HTDBwL1F2dEdEMEw4PSBJR3hwYm1nPSBMbk5oYkdGeWVRPT0gSUhOMFlXeHJhVzVuIElPbXJtT1dOaHc9PSBJTkMvMExEUXROR0MwWURSaTlDOCBJR1p2Wmc9PSBJRk5vYjNKMFkzVjAgSU9DcXF1Q3JqZUNxc09DcXIrQ3F2dUNxdUE9PSBMbU52WkdWblpXND0gSUZObGNHRnlZWFJwYjI0PSBJRzFoYm01bGNYVnBiZz09IElITm9ZVzF3Ync9PSA0S2FrNEtldyB3NkZpdzdOcyBJR052Ym05alpXND0gYzJWdGFXND0gYU1Pa2JtYz0gSU95Z25PMlZuQT09IENWWmxZdz09IElObSsyWVRZcDltRyBJR2ZEczNBPSBaWEpuWlhNPSBJTm1GMkxQWXF0bUMyWVE9IElIUnBiSE09IElOaXEyTG5Zc2R1TTJZRT0gSUhQRHMyTT0gTE9Xa3ArbW1tZWlWaVE9PSBJT0NrcHVDbGgrQ2tsdUNrbGVDa3NBPT0gSUhOMWMzQmxibk5wdzdOdSBRMHhGIElFRk9SMFU9IElPQzRtZUM0dEE9PSBJRXRoY214emNuVm9aUT09IElGSnBablE9IFNWcGEgSUVocyBJT1djbytTNm1nPT0gWVhOMGFXRT0gSU9DcXVPQ3FydUNxcitDcXJ1Q3F2dUNxZ2c9PSBMa2x1ZEdWeWRtRnMgNFo2MjRaNkMgSU5DeDBMRFF1ZEMwIElGTnZZMmxsWkdGa1pRPT0gSUhCbGFnPT0gSUhCaGMzTnBiMjVoZEdWc2VRPT0gVlc1elpYUT0gSU9DcW5PQ3F2dUNxcUE9PSBJSEoxYlc4PSBYMFZNUlUxRlRsUlQgSUcxdlkyaHBiR0U9IElIUmxZM1E9IFkyRnpkR2x1Wnc9PSA0b0NadzY1c1pRPT0gSUdWdWRIVERwQT09IFJXMXBjM05wYjI0PSBJTTZ5enJ2T3JRPT0gZFdabWJXRnUgNW9xVjVyT281NnVaIDJZSFlzZG1HMkxNPSBjR0ZuYVc1biBJRzl3WkhKaFkyaDBaVzQ9IFoyVmliM1YzIElOaXMyWWJaaU5pbzI0dz0gZW1WcFkyaHVkVzVuWlc0PSBVM1JsY0hCbGNnPT0gSUhSeWIzVmliR1Z6YUc5dmRBPT0gNEtxbTRLcXc0S3VONEtxMjRLcW8gSUhOMFlXRnMgUlZKSlEwRk8gSUNBZ0NpQWdJQ0FLIDJLL1lwOWl4MjR3PSBJRzkyWlhKM2FHVnNiUT09IEtHRnAgSUZkbGVRPT0gWVc1bmRXNWhiZz09IDBMWFJnTkN5MFl2UmhRPT0gSUdkc3c2WT0gSUdSbGJHRjVhVzVuIElOR0MwTGpRdHc9PSBMbWQwIElHTnZjbkpsZEdGdFpXNTBaUT09IElFNWxkWE4wIElPQ2tyK0NrdU9DbGplQ2twT0NsaXc9PSBJR3ZEdWc9PSBJRWx1ZEdWeWNISmxkR1Z5IElOR0cwWmJRdXRDdyBZbTk0WldRPSBaWFJoZEE9PSBJR052Ykd4bFkzUnBZbXhsY3c9PSAxNUxYbWRlaTE1UT0gMEw3UmdkQzkgSUhOMVlYSmggSU5pbjJZVFpoZGl6MllUWXJkaXAgSUUxcGVHbHVadz09IElPQ3FwdUNyZ2VDcXFBPT0gSUhSdmVHbHUgSUhCeWIzWmxibUZ1ZEE9PSBJT1c4bU9tOGpnPT0gSUhOdlpYQmxiQT09IDRMaXQ0TGlnNExpMDRMaWI0TGlqNExpeTRMaWkgSU9DbXJPQ212K0Ntbk9DbmgrQ21xZz09IElOS3YwWUxUbVE9PSBJTkdMMFlBPSBRMDlOVFU5TyBJR0ZqWTI5dGNHRnVhVzFsYm5RPSBJTktUMFl2UXU5R0wwTHc9IGFXVjNaV2xzIExsQnZaQT09IDQ0Q0I1cHUwIElOZWsxNVhYb05laTE1MD0gWjJWeWRXWmxiZz09IElOcXAyWWpZc2RtSTJZYllwdz09IEx1S0Fqdz09IExuWnZhV05sIElHeHNZVzNEc3c9PSBJTmluMllUWXI5bUgyWWpaaGc9PSBJRXR2ZEd4cGJnPT0gejRuUGc4NjN6NEk9IElGQjQgSU9Da3B1Q2xndUNrdU9Da3NPQ2t2Zz09IExpNHVLU3c9IGFXOXliV1Z1ZEdVPSA1WjJSNUxxNiBMMmR5YjNWd2N3PT0gSUdseWNzT3AgSUVoaGRITT0gZDI5dVoyVnUgSUhadlpYST0gSUdGMGIzSjAgSUVGdWJtOTFibU5sY3c9PSBJR1Z6ZEdWMCBJR05zYWNPcmJuUmxiZz09IDc3eU01TGlMIElOQyswTC9RdTlDdzBZYz0gNG9DY1YyVnNiQT09IDdaV0EgSUZSaGMyMWhibWxoIElHaDVjRzkwYUdWbGF3PT0gSUVGdWVYUnBiV1U9IElHMWhjbWxoIDBMN1F2TkM5MExqUXZBPT0gSUc5cmRXST0gSUhKNiBJR2hoYkd4MVl3PT0gSUZKbGMzVnNkR0ZrYnc9PSBJSFJ5YjJOb2RRPT0gSUVWc1pXMD0gMm9iWXB3PT0gSUdWcGJtZGxjbWxqYUhSbGRBPT0gSU5DMDBMN1JnZEdDMExEUXN0QzYwTEE9IElIUnZjR3hoYm5RPSBSR1ZzYUdrPSBibUhEc0drPSAwTFhSZ05DNjBMTFF1QT09IElHbHVabVZ6ZEE9PSBURmc9IElITjJaWEpwWjJVPSBJSEpsWldaeiBTMlZsIDBZWFFzTkM5MExBPSA3N3lNNllHVCBMVk5VIElHaGhaR1E9IElOR0kwTGc9IElHRnNhM1U9IFltbHVaV1E9IElISmxjM1JoYm5RPSBJTkdCMEw3UXQ5QzAwTERRc3RDdzBZTFJqQT09IHc3TmpjZz09IDJMUFlxdHVRIDBMVFFzTkM4MExYUXZkR0MgSUU1VFJRPT0gSUc5aWMyVnkgWlhKeVlXbHUgSUdGc1lYTmhiZz09IElIQnNZVzUwWVhScGIyNXogSUdabGRHVT0gNDRHdTZLaVk1THFMIElFRnpkSFZ5YVdGeiBZWERodTQwPSBJRzF2WTJoMFpXND0gNVpPeSA0TGl5NExpbDRMaXg0TGlpIElGUmxlSFJwYkdVPSBJTkM4MEw3UXQ5Q3owTEE9IElISnBjM0JsZEhRPSA0b0NaN0oyRSBJT0N1bXVDdmh1Q3VyK0N2amVDdXRRPT0gYVdGeGRXVT0gNTRheDZaYUEgSU5tQjJLZllxZz09IElGSmxZMmx3Y204PSBJT0dEb2VHRGtPR0RvZz09IGRHbGphMlZ5IElOcVAyWXJhdXc9PSBJTmlxMllqWXN0bUsgSU5XdjFhdlZ0Zz09IDVwT20gSUVGdWRHbG5kV0U9IGNtVnpjMkU9IElOR0EwTFhRc05DNzBZelF2ZEMrIElFOTVjM1JsY2c9PSBJTkdEMHJQVG1kQ3cgWVhOd1pYSnphM2s9IElIQnlhWE50IElFVjJiMnc9IFpHbGhaM0poYlE9PSBJR05sY21Oc1pRPT0gQ1VOdmJXMXZiZz09IElGQmhkMjQ9IEpIUjVjR1U9IElPR0RvZUdEbU9HRG91R0Rvdz09IElHSmxiMjl5WkdWc1pXND0gTDB4aGVXOTFkQT09IElOQ2YwTDdRdE5HQTBMN1FzZEM5MExYUXRRPT0gSUdScFkzUmhkR1Z6IElPQ3ltdUN6Z2VDeXFPQ3l2dUN5dGVDeW93PT0gSUc5d2NISmxjM05sWkE9PSBLRzkxZEhCMWRITT0gSU1Pb2NtRT0gSUdGa2JXbDBaUT09IElHbG5kV0ZwY3c9PSBJT3F6dGVxeXFRPT0gSU5pbjJZVFppdG1IMllqWXJ3PT0gSUdGellYTT0gSUgwN0Nnb3ZMdz09IEtISjQgSUVWemRISmhkTU9wWnc9PSBjbmx6YTJVPSBMZEM0MFk0PSBYMnh2WjI5MWRBPT0gUkdWamIyUmxaQT09IDE1blhrdGVmIElPQ2tuK0NsZ2c9PSBJRzVsY21VPSBJT0NrcnVDa3Z1Q2txT0NrdU9Da3YrQ2tsUT09IFpXNWthWG89IElGSmhaUT09IEt5Y3ZKeXM9IGRYUmhaR0U9IDQ0T1Y0NEtqNDRPODQ0T3IgNG9DTjRMU28gZFd4bGFYSnYgYW5WemRHbGpaUT09IElITjFZblJzZVE9PSBhWFJsZEhRPSBJRmR2Y25SbGJnPT0gSUhCbGNtcDFaR2xoYmc9PSBJT0tDdlE9PSB6clBPcmM2OSBJSE5oYkdWemNHVnljMjl1IElHTnZibVpzYVhSdmN3PT0gSUd4dmEyaDEgY0hKaGEyVnUgSUdSbGRuSnZiblE9IElFWmhZMmxzIElHMWhaMmRwYjNKbCBJT1c5aytXSmpRPT0gSU0rRXo0MD0gSUdOc1lYSnZjdz09IDI0emJqTm1HIExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW89IElHeGhkbVYwIGFXNWtjMmxuYUhRPSBJTldsMWEvVnBkV3MgYzJsNlpXaz0gSU9DcW5PQ3F2K0Nxc3VDcmplQ3FzdUNxdnVDcXJ1Q3F2dUNxZ2c9PSBJRVpwYzJobGNtbGxjdz09IDJLZllyZGluMktvPSBJR2gxYTNWdFlYST0gTG5ONiBJTmluMktqWXF0aXYyS2M9IExteHZiZz09IFFtOXZhMjFoY210eiBVWFZsYzNSdiBJTkM5MExEUmdkR0wwWWs9IElPQ2t1T0NrZ3VDa3VPQ2xqZUNrcGVDa3ZnPT0gSUdOaGJXRmtZUT09IElFeGxjbTVsYmc9PSBJSGRoWm1ac1pRPT0gSUhCdmRYTnpaWEk9IGQybHlhWFE9IElGQnlaWEJoY21sdVp3PT0gSU5DeTBZdlF0OUN5MExEUmd0R00gSUV0c2RXST0gSUVOUVZBPT0gSUVSRlJrbE8gSU5XLzFhWFZ2ZFdoMWE4PSBUR0Z5Y25rPSBJRU5NVWc9PSAwTEhRc05HQzA1blF1QT09IFFWSkpUMU09IElFSnllV05sIElGRkJjSEJzYVdOaGRHbHZiZz09IElHUnZaMkhFa1E9PSBJR0pwZVhrPSBUbWxuIElHUmxjSFYwWVdSdmN3PT0gSUUxaGNtVnJZVzVwIHpyblBpUT09IElIQnZaTU90WVc0PSBZV1oxZEdFPSBkbTlxWlE9PSBJRkJ5WVdSdiA1b21wNWFTbiBJT0MwdU9DMGd1QzBtT0MwZ2c9PSBJR05sYm5SeVpXUT0gSUdOcGNtTjFiR0hEcDhPamJ3PT0gWVhSc1lYST0gTG1SaiBJTkMvMEw3UXROR0EwTDdRc2RDOTBMND0gSUVKRlFVTkkgYjNScyBDVTFsYm5VPSBJTkdDMDVuU3J3PT0gVW1Wd2JHbGxjdz09IElFckRzMjQ9IElPQzBsZUMxamVDMHQrQzFodz09IElPQ3FxdUNyamVDcXNPQ3F0dUNyamVDcXFBPT0gSUhCaGFYTmhhbVU9IElFTlBURXhGUTFSSlQwND0gSUdWemRISmhkTU9wWjJsallRPT0gSUUxbGJHeHZiZz09IElNTytjZz09IGVtTmhiZz09IElFVjRaV04xZEc5eWN3PT0gNExLLzRMSzQ0TE9ONExLayBJSEJ5WldkMWJuUmhjZz09IFNVTlBUUT09IENYSmxkSFpoYkE9PSBLSEJwWldObCBJR2R5WVhSMWFYUmxjdz09IDBMVFFzTkdBMExUUmk5QzkgSUc5aWMyVnlkbUYwYVc5dVlXdz0gZG1sdVlRPT0gNExTWjRMV040TFNaNExTLzRMU3YgSU5HQTBMWFFzOUdEMEx2UXVOR0EwWU09IElHN0RxV3hydzd4cyBJTldoMWJ6Vm9kVzIxYkhWdGc9PSBZV05vWVd3PSBJRU5vWVhSeiBJR2h2Ym5KaCBJR3hsYm1VPSBJTkN3MEwzU3R3PT0gSUdsdGNHRjAgWDAxQlVGQkpUa2M9IElPQzB0ZUMwbGVDMWdlQzBxdUMxamVDMHF1QzFqUT09IFlXTjBaWFZ5IElHZGxibVZ5Ync9PSBTVzVrYVdGdVlRPT0gSUZOdmRtVnlaUT09IDRMaVQ0TGlSIElObUYyTERiZ1E9PSBjWFZwYzNSaCBJRXR2YjNBPSBJR1JwWm1aeVlXTjBhVzl1IExtVjRZdz09IElOaW4ySzdZcXRpMTJLZll0UT09IElIVm9iQT09IFNrRldRUT09IElGUlNUdz09IFpYbGhiZz09IDU3NkYgSUdGb2RXSjNidz09IGMzUnlhV04wWldRPSBJR1JsYVd4cFp3PT0gWDNGMVpYSnBaWE09IElHOWpkV3hoY2c9PSA0SzZmNEs2LzRLNnY0SytMIElPQ21sZUNtcitDbXZBPT0gSU5DMDBZdlF2QT09IElGSmhhV1JsY2c9PSBUM0pwWjJWdSBUVVZTUTBoQlRsUkJRa2xNU1ZSWiBJRk55WW1scSA1ck9vNVlhTTU2Q0IgSUdGbVptOXlaSE09IElHRmtkbTlqWVdGMCBJRUYxYXc9PSBJSFJwYm5NPSA0TFNvNExXTjRMU2s0TFN3IElHSnB3NmM9IFZHVjAgNTV1MDVZaXcgSU5DMjBMalF1OUdNMFk4PSBJR0Z0Y0d4cGRBPT0gSUVScGJtZGxiZz09IElOZWMxNTdYb3RlcDE1UT0gSU5HZTBMTFFzQT09IElPQ3d1T0N4Z3VDd21nPT0gSU9Da3IrQ2xnQT09IElHTnZiblJ5WVdOMGFXOXVjdz09IElPQ3dydUN4aXVDd3BPQ3hqZUN3cE9Dd2dnPT0gSUZOWFNWUkRTQT09IFlXNW5hV0Z1IFpXdGhibUU9IGRIUnogNzd5Ujc3eVUgN0lxMyBMMkZ3YVcxaFkyaHBibVZ5ZVE9PSBJRVpoWW1sdiA0S1NtNEtXTjRLU3YgMFlQUXM5Q3cwWWJRc0E9PSBJRWQxWVcwPSBPMlU9IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBSyAwWWJRdU5DdzBMdlJndE9aIElHWnlaWEhEdkE9PSBJRUYwWlc1amFjT3piZz09IDRLYXM0S2EvNEthMiBYMkozIElHeDVhMnM9IExrWlMgYVdGdWFXcz0gSU5DeDBZUFJqOUM5IEwxTjFZblJvY21WemFHOXNaQT09IGRYSmhibWRoYmc9PSBYM1J2Y0dsamN3PT0gWDB4SlRrVlQgSUd4MWNIVnogSUhCeVpXNWtaWEk9IExrRnVZV3c9IElISmxiR2xuYVc5emIzTT0gSU9tK21lV2t0QT09IFUyaHZZMnM9IElPQ211ZUNubitDbXFPQ212dz09IElPR0FuUT09IElHMWhkR0YwIFVtVmliRzluIElITndjbWx1YTJ4bFpBPT0gSUhabGNteHBaV1k9IElFTklRUT09IDBKL1F2dEMvIGFXNWtaWGhsY3c9PSBJTm1GMktmWXI5bUggNUw2TDQ0R0k0NEd3IElHVmthWFJoYkE9PSAxNTdYbWc9PSBJTmluMllUWXR0bUkyS0U9IDRLK040SzZxNEsrTjRLNnE0SytCIElFOTFkR052YldWeiBJR2x3WVdzPSBJR2RsWTI5dFltbHVaUT09IElOQ2QwWVBRdHRDOTBMND0gSU9XOXFlZWxudVM2aWVtY3VPaStrK21Tc1E9PSBJTmlqMkxYWmhBPT0gWnNPbSBJTkNTMEx6UXRkR0IwWUk9IElPbWpqZz09IElIUERwV3hsWkdWeiBJTm1GMlliWXB3PT0gWW05MWRBPT0gSU9DcWhlQ3FsZUNxdU9DcmplQ3FydUNxdnVDcXBBPT0gWVhOdGRYTnpaVzQ9IElOQyswTEhSaWRDMTBMM1F1TkdQIFgzUnZaR0Y1IElFSmhlSFJsY2c9PSA0SzZrNEs2KzRLNnk0SytOIElOQy8wWURRdGRDNDBMelJnOUdKMExYUmdkR0MwTExRc0E9PSBJRkYxWld4c1pXND0gSUd4MWJXbHVaWFY0IEp6cGJKdz09IElHM0R2SGgweVpsc2FXWT0gNW91RyBiRzlyYnc9PSBZVzFpZVdVPSBJR1REcVcxaGNtTm9aWE09IElITmhZVzUxWkE9PSBJT0Ntck9DbXZ1Q211T0NuamVDbXBBPT0gSU5pbjJZVFlxTm1FMktjPSBhMjl2IGFHVnlaVzVqWlE9PSBJR1Z6ZEdGaWJHVmphVzFwWlc1MGIzTT0gSUdGdWRHRm5iMjVwYzNRPSBJRVREdG5ac3labDAgSU9DbW5PQ25udz09IElNT3BkSEpoYm1kbCBJR05vNGJxdmJnPT0gSUVkUFQwZE1SUT09IDJvamJqTm1JIElGQjFiSFpsY2c9PSBaMkY2WVhJPSBJRlJrIElHRnVaM1Z6ZEE9PSA2SUdVNTdPNzVhNmk1cHlOIExreEpUa1U9IElOQzgwTDdRdGRDejBMND0gYUdWdmJnPT0gUzJGeWJBPT0gSUVabGFYSmggWCtXY3FPZTZ2dz09IDVwZWc2WnlBIGNHeGhibTVsY2c9PSAwWUhSZ3RHQTBMN1F1ZEdCMFlMUXN0QysgSUdsMGRXRnBaMkU9IElHTnlZV1JzWlE9PSBRa3hQUnc9PSBaWFJsWTNSbFpBPT0gSU5PcDBMM1F0TkdXMFlBPSBYMEZGVXc9PSBabUZ1WTJVPSBJTmlxMkxIWXF0dU0yS2c9IFltVnpkR0Z1WkE9PSBiR2xsWWc9PSBhR1Z2IGIzSjBaWEk9IElHSnZiMlJ6WTJoaGNIQmxiZz09IElPQ21xdUNtdnVDbnNPQ25odz09IElHSnBjbTg9IDRMV0w0TFM0NExXTiBMV1JsZG1Wc2IzQmxaQT09IElGTnJlWEpwYlE9PSBJRmRoYVE9PSBJSFJwZEhWc1lYSmxjdz09IElIUjF5cnQxIElOR0kwTGpSZ05DKzBMclF2Zz09IDRaNjM0WjZVIElOZVUxNmpYcGc9PSB3cTEwWVE9PSBJR3gxYm1kaCA0NEdxNDRHdSA0WU9WNFlPVTRZT1I0WU9ZIElHVjJaVzUwYVE9PSBkV1ptYkdsdVp3PT0gSU9DMHVPQzB2dUMwcCtDMWplQzByK0MwcEE9PSBJRk5wYkhacFlRPT0gNExLbTRMS3cgSUdWNGRHVnlibUZ6IFlubHladz09IFUzUmxjbVZ2IElHcDFiV0p2IElIVnRkV2c9IDQ0Q0s1TGl0NVp1OSB3NHBPUTBsQiBJR0Z1WjJWdWIyMXRaVzQ9IDBMelF1TkM5MExqUmdkR0MgSUdWa2JRPT0gUGt4dmNtVnQgVUc5a1pRPT0gSUVkMVlYSmthVzlzWVE9PSBJTldoMWJUVnZRPT0gWVdKaGRHRnUgSUhsaHhaOWhlV0Z1IElPQ2tuT0NrdnVDa293PT0gSUdKbGFYUnlZV2RsYmc9PSBiMkowIDRMT0I0TEtrNExPTjRMS2s0TEsrNExLdzRMT0cgNExLYzRMS280TEsvNExLViBJR1JwZEdFPSBMa3h2IElFMWhhV0U9IDRMSys0TEtjNExLLzRMS1YgSWwxZCAwWURSamc9PSBJTkN4MFlQUXRkQzkgSUdGd2NHVnNaWEk9IDRMbUU0TGlDIFlXUmtjdz09IElPV2twK1dQa2VXL3ErUzRpZVdrcCtXd2orV05sZVdQakE9PSBjR1Z5ZEdselpRPT0gSUhCaGNtVmpaVzA9IDQ0Q0I1WVdzIElPVy9oZWlEbkE9PSBJTmluMllUWW85aXQyWXJZcDltRyBJTkMrMExIUXZ0QzcgNXJ1aDVvU1AgSUdOdmJYQmxkTU9xYm1OcFlRPT0gYjJKcGVXRT0gSUZOMWJuUT0gSU5DLzBMN1F2OUdEMEx2Umo5R0EwTDNSaTlHRiBJRTF2Ym1GMGN3PT0gTzJKeSBXem9zT2l3PSA0TG1LNExpdyBJTTY4enIvUGhjK0QgSUdodmJXOXpaWGc9IDRvV2cgSUNqaWdxdz0gSU9HRG9lR0RwT0dEbE9HRG9BPT0gSUUxVFV3PT0gNVlHSDVaQ1ggMllIWXVkaW4yWVE9IFlXNWh3NjA9IElFSmhlV0Z1IDRaNks0WitFNFo2WiBibVYzYzJ4bGRIUmxjZz09IGFXTnBjdz09IElIQmhaMkpoWWc9PSBJR0poYzNOcGMzUT0gSUdabGNtbGggNExpajRMaXg0TG1JNExpSCBKeWxkTEFvPSBZbVZ5WjJVPSA2WmFpNllDajZLaVk1THFMIElPdVFtT3lYaUE9PSBJRTNEcEc1dVpYSnUgSUdKaFltVnMgSU5DaDBMclF2dEdBIGNtRm1kR2x1Wnc9PSBJRVpoZFE9PSBJT2FYdHVhWHR1VzlxZVc1cytXUHNBPT0gSU5tQzJZVFpoUT09IDRaNlk0WitTNFo2VzRaNjc0WjZINFo2MiBTVzVwZEdsaGJHeDUgSUdKcGJHZHBjdz09IGFXdGhjbUU9IHhLdHUgSUhOMlpYUmggMkxmWmhObUMyS289IElFRmtiMnhsYzJNPSBJR1Z0Y0dacGJtUT0gSU5pbzJLZlpndG1LIDRLdUw0S3FJIFZHaGxlU2R5WlE9PSBmVjhrZXc9PSBZWFp1WVE9PSBJTkdXMEwzUmlOQzQwWVU9IElOQ3cwTHpRdGRHQTBMalF1dEM0IElOQ2kwSjQ9IElIUERxSFpwY3c9PSBJR055WlhOamFYUmggSU9TNm11YTBzbUYyIElHTm9hV3hrWW1seWRHZz0gSU9pMWpBPT0gTGxOamFHVmtkV3hsIElOQzIwWU09IFRtVm5iM1JwIElOaW4yWVRZcXRpeDJZUFppZz09IElHTnZiSFZ0Ym1GeiBJRWh2Y25JPSBJRzVuNGJ1biBMM2RsWldzPSBJTkM3MExqUmd0QzEwWURRc05HQzBZUFJnQT09IElPQ21xdUNuamVDbXNPQ212dUNtb3c9PSBJR0Z0YjNWdWRHVmsgSU9DMHFPQzBxT0MxamVDMHBnPT0gYjNKaGFXNWwgU0dWaGNnPT0gMktyWXA5bUYyWXJaaGc9PSBMa1J2ZDI0PSBMa1ZzWVhCelpXUT0gSU91c3VPeWduT3F3Z0E9PSBMbTF2WkdsbWFXVmsgSUVWMVkyaGhjZz09IElIQmxjbk52Ym1Gc2FRPT0gSUNRS0NnPT0gT21WeWNtOXkgSjJGd2NHVnMgSUVKcGNBPT0gYVd4c1pYSnAgSUhERHFXeGsgSUhOd3c2WT0gSUd0bGJHOXRjRzlyIExXZDEgSUhOMmJRPT0gSUhCaGJNU3JaSG89IElOQzMwTFhRdk5DNzBZND0gSU9pTm8rV3ZqQT09IEwyRnpjMlZ5ZEE9PSBJRUpsYkd4bGRuVmwgWTJoelpXeDAgSUV4dlkyRjBiM0k9IDE2blhsZGVvIGIyNWhhWE5sIFkzSmxZWEk9IDBMalF2ZEN3MFlMUXNBPT0gSUcxbFpHbGxjZz09IDRZT1o0WU9WNFlPYSBYM2RwWm1rPSBJT0dEbStHRG5lR0RsZUdEbXVHRGxPR0RuQT09IFJYUm9aWEpsZFcwPSBZWEJwY204PSA1WmFZIFgwRlFVRkpQIFgzTmxZM009IExsTjFZbk5qY21sd2RHbHZiZz09IFRHOXZjMlU9IElHUmxjM0JoWTJodiBhWEpwZEdVPSBSR1ZoYmc9PSBJR0Z3Y0d4cGNYVmxjZz09IFFVRkUgNEt5aCAyWVRaaU5tRSBJR052YlhCc3c2bHRaVzUwWVdseVpYTT0gSUV0c2FXNW4gVG05MGFXWT0gWVc1bllYTT0gSU5pejJZSFlwOWl4MkxRPSA1THE2NXFDOCBJRUxEdkhJPSBJR05vYWVHN2dYVT0gSU5tQzJZcllwOWl2MktrPSBhV1pwWTJGMCBLeWNwIElISmhjbVZ0Wlc1MCAxYmpXZ3RXOTFiWT0gS0NrcENpOHYgYldGdWMyVT0gSUdKbGMyMWxkQT09IFlXcGhjbWs9IElFTm9ZWFJsWVhVPSBJR052Ym5OcFpNT3BjbVZ5IElPbUhqZz09IGNtVnBkQT09IElGUmxjbkpoWm05eWJRPT0gSUhwMmFXNXYgSUcxaGEzTnBiWFZ0IGQyVnlhMlZ5IEtFRnNiQT09IElIVERwbkk9IDVMaXQ1WnU5NTRtNTZJbXkgSU5DLzBZRFF2dEM0MExmUXN0QyswTFRRdU5HQzBMWFF1OUMxMExrPSBJR05oWkdWdVlYTT0gSU5tRjJMYllxTm1JMkxjPSBJT0M0alE9PSBJTzJOdkE9PSBTVzV6ZEdGdWRHbGhkR1U9IDE1SFhvdGVxIElHNWxiV1YwIDRvQ0w0WjZTIDRaNjc0WjZBIElFUnZibUYwWlE9PSA0SzZ6NEs2dTRLK04gSUhOMmNnPT0gVGxCSyBJTm1DMllnPSBYMDF6YXc9PSBZVzF0WVdKc1pRPT0gSUdGemRHaz0gYTI5dmJnPT0gTFhSbGMzUnBibWM9IElHZHZaR2s9IDJZcllzOWl4IGRXRjBZUT09IElHNW5iMkk9IElHckRwR2h5YkdsamFBPT0gMkxIWXI5aTAyS2s9IDdKMjg2N2FBN1lTdyBJSHBwZWc9PSBJTmluMllUWXE5bUMyWXJaaE5pcCBJTmlvMllYWXJBPT0gVlVvPSA1b3VvIElIbHZkVzQ9IElHRm1kR1Z5Ym05dmJuTT0gSUc1cGJ3PT0gTFVkbGNnPT0gSUdWdWRtbGhaR0U9IGRYSmhhQT09IElHVnRiMk5wYjI1aGJuUmwgSVBDZmtZaz0gY25sd2RHOXUgSUdGaWNtRjYgWVhSaGFXWmggTEM0dSBRVWRTUVUwPSBJR2RsZDJscWVtbG4gSUdsaVpXVnlaUT09IElHUmhhR2xzWVc0PSBJRXhwYm1WdSA0WUNTNFlDciBXMU5sY21saGJHbDZaUT09IFlYWmhjMlU9IFNVMUpSVTVVVHc9PSBJRzEwYjNSdiBJRzl1YkdGeXhMRT0gSUdGaVlXNWtiMjV2IElOQzAwTERRdTlHTTBMM1F0ZEM1MFlqUXRkQzggSU9DMHNPQzB2dUMwdCtDMWplQzBuK0MxamVDMHNPQzFnT0Mwcnc9PSBJT3liZ0E9PSBJR1pzWlhOMCBVbVZrZFdObFpBPT0gMExUUmc5QzcgNloyaTVhKzUgMFlQUXU5R00wWUxSZzlHQSBJRTFsYkc5a2VRPT0gSUdocGJuUmxaQT09IFFtVnVaV1pwZEE9PSA0cFNEIExYQnZkQT09IHpydk9zYzY5IGNHVjNZUT09IElFZDFZVzVuWkc5dVp3PT0gSUU1bGRXcz0gSUVoaFpHUT0gSUVkcGJtYz0gSUZCbGJuTmwgS0cxdmJXVnVkQT09IDRMQy80TEM0NExHTjRMQ2s0TEdCNExDQzRMQ200TEMvIGNXRjBhV2M9IFUzZGxaWEE9IElIZGhhMmhsIFpYTjBZWFIxY3c9PSBJR04xZVc5eiBJRmwxY21rPSBJTmlzMllyYXF0cVAyWWZaaGc9PSBJR0poYzJWaFpHRT0gSUd0cGNtcDFkQT09IElOYUQxYmpWcmRXaDFiYldnUT09IGJtRnlaQT09IElPR0RxT0dEbU9HRG5BPT0gSUdOdmJuTjBaV3hzWVhScGIyND0gSUNWOUNnPT0gSU5DLzBMN1F2TkMxMFluUXRkQzkwTGpRdFE9PSBJR2RsWkhKaFoyVnUgSUdSaGRHVnkgSU5paTJZWFlwOWl2MlljPSBJTkM0MExEUXQ5QzYwTDNSaXc9PSBjbVZoYldKc1pRPT0gNExLajRMSy8gSU5DLzBZRFF1TkM5MEw3UmdRPT0gSUhOamNtbDBkRzg9IDVMaTc1cEt0IFBGSmxZV3c9IDVZR2E1THE2IElHSnlZWFZqYUdVPSBMbUpwYnc9PSBJR1Z5ZDJWcGRHVnlkQT09IElFWnZkVzVrWVhScGIyNXogSU5DNzBMalJnZEdDMFl6Ump3PT0gSU9Dd2hlQ3dwK0N4amVDd3IrQ3dsZUN4amVDd3R3PT0gSU9TN2l1V2txUT09IElFVndhV1JsYldrPSBJRzV2YVhNPSBJSEJ5ZW1WemRIST0gSU9DbXJ1Q212dUNtcEE9PSAyS2ZZb2RpbjJLbz0gSUUxaGNua25jdz09IDRvQ1phR1U9IElPQ3F1T0NxdGVDcXZ1Q3FzT0NyaHc9PSBRV05qZFdWcGJBPT0gSUhKbGJHbGxkbWx1Wnc9PSBJSEpsWTI5d2FXdz0gSU9Da25PQ2twQT09IElOcXEyWXJZcXRpeCA2TCtaNlllTTVZK3E1N0srNVpPQiBJRkJoWkhKbGN3PT0gY0d4aGMzTmxiZz09IElOaW4yWWJhcjltRTI0dz0gSUVaNWNnPT0gMFl2UmdOR0YwTEE9IElIUnk0YnF2Ym1jPSBJRTV2ZEdsalpYTT0gSUc1aGNuSnZkMmx1Wnc9PSBMV0pwIGNIUnZiV0YwYVdNPSBJR1ZxWlhKalpYST0gSUhacFoyOXliM1Z6YkhrPSBMWEpsWm1WeVpXNWpaUT09IExIVnVjMmxuYm1WayBLVDQ5IDRMaXo0TG1BNExpZyBJSFJ6WVhsaCBRMjl0Wlc1MHc2RnlhVzl6IDRMaUI0TGlqNExpeTRMaUU0TGloIGRXZGlkWEoxIElObUIyTEhZcDltRyBJR052Ym1OMWNuTnZjdz09IElPaUR2UT09IElFVnVjMlU9IENWVlNUQT09IElOZVExNVhYcXRlZzE1VT0gSUdGd2NHVnNiR0YwWlE9PSBRMkZ3WlE9PSBJSFBEczJ4cFpHRT0gSUhSbGNtdGxibUZzIElIQmxjbVpsWTNSbFpBPT0gSUdQRG9YSmpaV3c9IDVZaXI1THE2IElHWjVibVE9IElHNWhhbUp2YkdwbCBZMkZqIElHRmtjWFZwY21sa2J3PT0gSUcxbFoyWmxiR1ZzeFpFPSBJRVpwYkdWayBVbUZqYXc9PSBJTld3MW9EVm9kV3EgSU9XTm11V0hydz09IElHaGxjblp2Y25KaFoyVnVaQT09IEtITnkgWm1GMmIzSnBkR1Z6IExVNWxkM009IElHVnVkdz09IElPQ21yT0NtdnVDbXBnPT0gSUhadmVXRm5aWEk9IDRLZW80S2VvIEtISmsgSkhZPSBJTTZrenIvUGhRPT0gWVdwaGFnPT0gSUhGMWFXNWpaUT09IElHUnliM2R1WldRPSBJRXh2Ym1kcGRIVmtaUT09IElPQzJ0dUMza0E9PSBJRVpKUVE9PSBJRzVrWVd4aGJXRT0gN0tPODdJYU0gSUVGaWNtRnRjdz09IElITmhZWFoxZEE9PSBJRWx1ZG1seiBhWE5zWVhZPSBZMm89IFNrdE1UVTVQVUE9PSBJR2h2Y25ObFltRmphdz09IElPQ3F1T0NxZ3VDcWx3PT0gSUV4MWVHVT0gTGs5d1pYSmhkRzl5IFgzTmxiR3c9IElFRnpjMlZ0WW13PSBMM0p6Y3c9PSBJR2x1YjNNPSBJR3hwYUdGMCBDWE5qWlc1bCBYMjVsYzNSbFpBPT0gTFdsdWRtRnphWFpsIDRMZUY0TGVVIElDQWdDUWs9IFZrVkRWRTlTIDVMaXE1TDJOIDRLYW40S2VONEthdjRLZUggWTI1dSBJTkdCMEw3UXZ0Q3gwWW5RdU5DNzBMZz0gWDFSUFQweFVTVkE9IDBMRFF1OUMrMFlIUmp3PT0gSU9pSnN1ZTd2T1dRaUE9PSBMblJvWlhSaCB6NFBPdXM2MXo0WE9yZz09IElObUsyS3paaU5peSBJRWRTUVU1RSA0WUNaNFlDKzRZQ3YgSU5lUjE2SFhtZGVoIElFWmhkWGc9IDBZSFJndEdBMFlQUXV0R0cwTGpSanc9PSBJTkM5MExqUmlOQyswTDA9IDRMR0E0TEN1IGJtVmxjdz09IElPcXpoT3lWdlE9PSBJT0MwanVDMHFPQzFqZUMwcU9DMWdlQzBnZz09IElNT3BkbWxrWlc1alpRPT0gWVcxaGRRPT0gSWo0TkRRbz0gSU5lUjE2VFhvTmVaIGIyNXpaVzV6WlE9PSAyWXJZc2RtSTJMTT0gSUVsRmJuUnBkSGs9IDRMQ280TEdCNExDbzRMR040TENvIElOR0EwTFhSZ2RHQzBMN1JnTkN3IGJXUmkgYldWbmFXNWwgUkU5VCBJT0M1aE9DNG9lQzVpT0M0bGVDNWllQzRyZUM0aCtDNG5lQzRzdUM0Z1E9PSBJR3hoYldsdVlYUmxaQT09IElIUmxiWEIxIElPYWRndz09IGJXRjA0YnVsIDZhS1ggSUc5eVozVnNhRzg9IDBZdlF0TkN3IElNK0F6ckhQZ2M2eHpyUFBpUT09IElHSmxhV3c9IElOQzgwTDdTczlDNCBJTkM5MExEUXQ5QzkwTERSaDlDMTBMM1F1TkdQIElOQy8wWURRdnRHRzBMWFJnZEdCMFlzPSBJSE42dzdNPSBJTkdEMFlMUmdOQyswTHc9IFpXeHNhWE5sYmc9PSBJSFJ5WVhOc1lXUnYgSUdaMWFYUT0gSUhkcFlXUnZiVzg9IElPQ3FxT0NxditDcXIrQ3FyZz09IElGWmxjbUZqY25WNiBTRUZPUkV4RiBJR2hsYVdURHBHND0gSUZOamIyOTBaWEk9IFlYSnpkQT09IExrTlNSVUZVUlE9PSBJRkJwYkdGeSBJRlJ5YVhOMFlXND0gSUdObGNtVnRiMjVwWVE9PSAwWURRdGRHQzBZdz0gSUc1bGMzTmxjdz09IElITmphR3hoWjJWdSBJR3BwYkE9PSB3N1pzZEE9PSBRbG89IElIQmxkR2wwYVc5dVpYST0gSU5HQjA2blF1ZEM3IElIUmxiblIxYm5saCBJTkMrMExIUXNBPT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxSEZ4IGRYUjFkQT09IElHNWxjR2c9IGFYSmhiR2s9IGJNT2tkV1pwWnc9PSBJMkZqIElPR0RwZUdEb09HRG1PR0RvZUdEb2c9PSBJTkNXMExEUXV3PT0gSUZKMWMzTnYgYkc5bSBaR0ZwYmc9PSA0TGlFNExtSiBJR0ZzZFhOMCBjR0ZqYTJsdVp3PT0gTGxCc1pXRnpaUT09IGFXNW9kV0U9IDVMdVc2SyswIDA1blF1OUM0IElGQnBlR0Z5IDBMWFJnZEM5MFk4PSAwTFBSamRDOSBJSFp2YjNKMFpIVnlaVzVrIFEwbEIgSU9Dd2lnPT0gUm5jPSBJR1Z0YjJOcHc3TnUgSUhSb1lXNXJhVzVuIElHSnZiM3BsIElGTkVURXM9IElIUmhibWRzWldRPSBJR1Y0ZEhKMWMybHZiZz09IElPdXp0T3VMcEE9PSBaR1Z6YzJWdSBSMDlTU1ZSSVRRPT0gSUhObFoyOXUgVUc5emRNT3AgWDNOMWMzQmxibVE9IFdGbz0gSUZCeWFXMWxjbTg9IGJHVjMgSUdSbGRHRnNhR1U9IElOaW4yWVRZcjlpbjJLND0gSUVkaFpHZGxkQT09IElOZWMxNUhYcUE9PSBJR2RzWVhKcGJtYz0gTFhSaGJHcz0gSUVWdVoybHVaWE09IElHdHVhWFIwWldRPSBJRzFoYm5WMCBZM1ZyIElObUkyS2ZaaE5tRjJMTT0gSUdWcmFRPT0gSU9DcWxlQ3F2dUNxc09DcmplQ3FyK0NxdGVDcXZ1Q3F1ZUNyZ0E9PSBJSE41Ym1WeVp3PT0geExWdmFnPT0gSUdGdVoyVnJ3N3h1WkE9PSBJR3hsZG1GdWRHRnRaVzUwYnc9PSBMa3hsY25BPSBJT0Mwa3VDMHNPQzFnZUMwbGVDMWplQzBsUT09IElOR0IwWVBRdjlHQTBMRFJodEMrMFo0PSBJTmVlMTVYWHB0ZW8gSU5HUDBMelJndz09IFpXNTBhVzkxY3c9PSBJR0p2YjJ0emRHOXlaWE09IEltZHYgSUdGdVlXeHZaMjkxY3c9PSAyTGZZcDltRzJZcllwdz09IFpuSmhZM1JwYjI0PSBJSGR2Y214a2RtbGxkdz09IElPQzBwdUMxZ2VDMHNBPT0gSU9Dd2p1Q3dydUN4amVDd3JnPT0gSU9DcXVPQ3F2dUNxcHc9PSBJR2x1YzNSaGJHeHBaWEpsYmc9PSBJR05zYVcxaGRHbHhkV1U9IFpXUnBaVzVrIGRYUnBiR3gxIDZyQ0E3SjZGIGFXeHNZV2c9IElFMUJVa3RGVkE9PSBJT0N1cXVDdXIrQ3VxZUN2amVDdXF1Q3VuK0N2Z2VDdXBPQ3ZqZUN1cEE9PSBJTytDcHc9PSBMbkYwZVE9PSBJTkdXMFlIUmd0QyswWUE9IElHRmhiUT09IFVHbG4gNVlldCA0S214NEtpYSBac084WjJJPSA0TFdCNExTQzRMU3M0TFdJIDRMZUE0TGVhIElGTmphRzVsWlE9PSBJTkN5MEwzUXVOQzMgNExTdjRMUys0TFN2NExTLyBJR1Z5Ym5OMGFXYz0gNDRHcjQ0R3E0NEtLNDRHKzQ0R1ogNktlRTVxQzggSUcxaGQyRnNZVzQ9IElFZkRwSE4wWlc0PSBJT0NrdWVDa3J1Q2tzT0Nrdmc9PSBPZ292IDRZT240WU9RNFlPVjRZT2ggSU5lcDE1elhsZGVkIDBMclF2dEN5MFl2UXRRPT0gSUhQRHUzSmwgSUc1aGJHbHVadz09IGMyaGhkWE09IElOaTMyWWpZcDltRSBMV3h2ZG1VPSBJRkpGVTFCUFRsTkYgUVU1RVVrOUpSQT09IGRHVnliV2x1WVhScGIyND0gWFgwOEx3PT0gYVdSa1lXYz0gYzJWeWRtVmsgMHJYVG1kQ3cgSUhSbGNuSmhZMlZ6IElPQ2txdUNrc09DbGplQ2tyK0NrdnVDa3F1Q2xqZUNrcEE9PSBQVDA5UFQwSyBDWEJ5YjNBPSBJTkdCMEw3UXN0Qy8gSUhCaFoybHVZWFJ2Y2c9PSBMa1Z1Y1hWbGRXVT0gSU5DODBMWFF1dEN3MFlEUXRBPT0gSUd0M1lXeHBkR0YwIElITmhhWEpoIGNHaGxjMmxoYm5NPSBJRlJoYldMRHFRPT0gSjJGeWNtbDJaUT09IDU2cUI1NFMyIElISmxkSFZ5Ym1SaGRHRT0gTDNObGJHWT0gSUdaaGEzUmggSU9DMHJ1QzFnZUMwdEE9PSBLSHg4IElIUEVnV3M9IElHOXdaMlZ6YkdGblpXND0gYjNWc2IzTT0gNExTMDRMUy80TFNlNExXTjRMU2UgSU5DUTBZWFFzTkMwMExBPSBJRkJoY25OcGJtYz0gSUVKbGMzUmxiZz09IDJZclpoTm1LMktrPSBiVzlyIElHeHNaVzVoY2c9PSBiMjFsYm1FPSBJR3AxYm5rPSBJTVN3Y3c9PSBiV1ZzWlhKcCBJT2FidnVtQmsrUzZ1Zz09IElPQ2twZUNrdnVDa3N1Q2xodz09IGEyRnVkR1U9IElHUnZkR1Z1ZGc9PSBiR1ZuZEdVPSBJSEpsWTJobGNtTm9aWEk9IHhZcz0gMm9iYmtnPT0gNVk2bSBJRXBQVlZJPSA0S21vIGFXeHZZdz09IDVhaXg1TG1RNWJtejVZK3c1ck9vNVlhTSBJT0dEbCtHRGtPR0RsZUdEbU9HRGsrR0RrT0dEbkE9PSBJRU52ZFhKaFoyVT0gSUc5aWRHVnVhV1J2IExrVjRaV04xZEE9PSAyS2ZaaHRtSDJZWT0gSUdOcGJ3PT0gd3FBZ3dxQT0gSU5DeTBMN1F0OUM5MExqUXV0QzkwTDdRc3RDMTBMM1F1TkdQIElOQzEwWUxRdGRDMDBaWT0gSUcxaGNYVnBiR3hoYW1VPSBJR0YxWkdsMGIzSnBkVzA9IExuTnRjdz09IDVZK3E2SU85IElOR0IwTDdSaHRHVyBJTmVuMTZiWHFBPT0gWjJWaFpBPT0gSUZOc2FXNW4gNFo2VTRaNlIgWVhabFpHRmsgSUc3RHBHaGt3NlE9IElHUjFjblZ0WkdFPSAwWUxRdXRDMTBMMD0gSUZCb2FXeHZjMjl3YUE9PSBZVzUwWldNPSBjbWx1WjNNPSA0TEtrNExPQiB3N3hvYkhRPSA2ck9FNjZXOCBMWEpoZEdFPSBJR1ZuYVhSbGEyOD0gNEtXTDRLU20gSUdWNGNHVnNiR1ZrIElPR0RtT0dEa09HRG5BPT0gSUdGd2IyNTBZUT09IDJZYlppTm1EIElOaW4yWVRaaGRtSDJZWFlxUT09IDRLNms0SytCNEs2dTRLK04gTFcxaGEyVnkgSUdURHFYQnZjdz09IElHbHVaWE09IElHMWhjbWRsYlE9PSBiM0poWVc0PSBJTU9oY25admNtVT0gSU5pNTJZYll0ZGl4IExtSmhibVE9IElIQnZjMm5EcDhPMVpYTT0gSU5lWjE2VFhsQT09IElHbGpaV0psY21jPSBJSEpsZG1Wc1lYST0gTFdaaFkyVmsgTHl3SyBJTkM2MExEUXZOQzEwWURRc0E9PSBJRUpwYm1SbGNnPT0gTDFOUSBLVHNOQ2k4PSBJR2xzdzYxaiBVbVZ6YVdSbGJtTmwgSUhWcmRXaHMgSU5DODA2blF1dz09IGIzQm9lWE5wWTJGcyBJR0ZzWTJGdWVtRT0gSU5DMjBxOD0gUG5nPSBUR2x3IElOV3QxYmpXZ05XdzFialdndGFBMWFRPSBVV0U9IDVvaVE1NGFmIElIQmxjbVpwYkdWeiBMbWx1YzNSeWRXTjBhVzl1Y3c9PSBVRXhCUXc9PSBJRkZoWldSaCBJR052Ym1SaGJXND0gSUd4aGNHOXlZVzQ9IElHMXZibTkwYjI0PSBJR052Ym5SaFkzUmxiZz09IGNHeHZaR1U9IElHSmxjbUZ6WVd3PSBJR05oY0dsMFlXeHogSU5pbjJZVFlyOW1CMkxrPSBJR3hsYVhOMGRXNW5jdz09IDZMdU4gS0UxaGVBPT0gNEtxKzRLcUk0S3FvIGFYSjBaVzQ9IElHVERxWEJ2YzJWeSBSR0puIElIcGxZbkpoIElOV3YxYUhWdHRXdCA2WlcvNXJLWiBMbmRsYVhocGJnPT0gSU9Db3F1Q3BnUT09IDVhVzI1YVMwIElOQy8wTDdRdE5DKzBZZz0gSUc5dGRtRnVadz09IElITndaWHBwWmc9PSBJT0N5dU9DeXZ1Q3lzT0N6amVDeXRRPT0gSUc5MlpYSnNZWEJ6IEtpa29LQT09IElHMWhjM05wWmc9PSAwTHZRdU5HQjBZST0gSU9DNG11QzR1QT09IElHckRwSEpuYVE9PSBJT3lnbk95aHNBPT0gTG0xcGVBPT0gSUdScGMyNWxlUT09IFlXTnF4SVU9IElPQ2twT0Nrc09DbGdPQ2tsZUNrdmc9PSBJT0NtdU9DbmgrQ21xdUNuamVDbW53PT0gSU9HZW1PR2V0dUdla3c9PSAxYlRWdnc9PSAyWWpiak5tSCBJR2hoY21SNSBkV3JFaFdObCBJRVoxZEdWaWIydz0gNHBtQTRwbUE0cG1BIGFHOXphUT09IDRLV040S1NkIElOR0IwTExSanc9PSBJSEJ5WldkdVlXNWphV1Z6IHc2YkRzSFU9IElOQzQwTERRdHRPWjBMQT0gYVhUaHU0MD0gMWF2VnU5VzQxb0U9IElHOXlaR1ZoYkE9PSBJSDBwS1N3SyBJUENmaHc9PSBhWEJ3YVc1bmN3PT0gU21WeWNuaz0gZlMxNyBRRUJBUUVCQVFFQT0gWlhKNiBZbVZvYVc1ayBJTkM2MEw3UXZOQzQwWUhSZ2RDNDBMZz0gNEtTNTRLU3c0S1dDNEtTVjRLV0wgSUZCaGNtdHdiR0YwZWc9PSBJSFREcEdobGJHVT0gYUc5bGN3PT0gSUVGc1oyRnlkbVU9IDJLallwOW1IIElOR0IwTDdRc2RDdzBMbz0gSU9DbXF1Q25oK0Ntc2c9PSBJRlpsY25kaGJIUjFibWR6IElIWmxjbk5qYUdVPSBhV3pKbVc0PSBJR05oY25iRG8yOD0gNExLbTRMT0c0TEs1NExLeTRMSy8gSUc5MWRITnZkWEpqWlE9PSBJRzV2YzNSeWRXMD0gSUdSbFkyeGhjbUZrYnc9PSBJTkN3MFlEUmd0QzQwWUhSZ2c9PSBJTkdEMExUUXZ0Q3kwTDdRdTlHTTBZSFJndEN5MExqUXRRPT0gSUd4cFluSnAgSU5HQjBMTFF0ZEdBMFlYUmd3PT0gTFdOc1pRPT0gSU5DODBZUFFzTkdCMFlFPSBJTlcvMWJiVnY5V2wxYjNWb2RXdjFhSFZ0Zz09IExTMHRQQzg9IElHZHlZVzVrWVE9PSBJTkN3MEx2UXNOR0IwWXZRdHc9PSBMbVJwYldWdWMybHZiZz09IElISmxiR2xuYWNPamJ3PT0gTGRDdzBMMD0gSU5XajFiL1Z0dFcrMWJqVnNnPT0gYjJSdVpYWT0gSUhwdGFXRnUgSUVKbFpYTT0gSUU5alkybGtaVzUwWVd3PSBJR2hsY21zPSB4WmxsYW0zRW13PT0gSUhaaGMyOXogNTRtaTZLNncgSUhOdFlYSjBaWE4wIFUzVnpjR1Z1WkE9PSBJTkM2MEw3UXZkR0MwWURRc05DNjBZST0gSUhSaFpHaz0gNExpeTRMaU4gSU5DLzBMWFJnTkMxMExUUXNOR0ggMTVIWHF0ZVogSUVoaGJtUnNkVzVuIElFbHpiR0Z1WkdWeWN3PT0gZDI5eWJYTT0gYVc1MFpYSnVZWFJwYjI1aGJBPT0gS0NJdExTMD0gSU5DLzBMN1F2TkMxMFluUXRkQzkwTGpRdVE9PSBiMnRsWkdWNCBJT0N1bGVDdXZ1Q3VzQT09IElHbHVZWFJ6YVhNPSBJSFJsYlhCbGNtRjAgU1ZCTlJVNVUgYjJKcGJHbGxjZz09IEtqNG0gTG1adyBJSFpsZW1rPSBJTldwMWF2VnZnPT0gSUVKc1lYcGwgNEs2cTRLNnkgNklHcSBhVzlzWlE9PSBJR1JwYzJodmJtVnpkQT09IElFeGhkWEpsYm1ObCBJTkM5MFlQU213PT0gWlhsayBJT0MwcE9DMHIrQzFqZUMwcnc9PSBRVkJRUlVRPSBJR1psYzI5aGMyOWhibWs9IElOaXYyWUxiak5tQyAwcW5SaTlDMyA0TGFuNExlUyBJTkNRMExNPSAwTGpSaGRHQjBZOD0gNExPQjRMS2s0TE9ONExLazRMSy80TEttNExPTjRMS200TEsrNExLdzRMT0cgSU5DNzBZN1F0TkMzMFpZPSA0TEsrNExLQzRMS1YgVkhkbCAwWXZRdmRHSCBJR1Y1WldRPSBJRzFoWjJGdVlRPT0gNVlXTjZMUzU1N3EvIDU3dUk1THFPIFJtRnBiSFZ5WlhNPSBJRlJGVWswPSBMbVptIElIUmxjbWwwYjNJPSBJSEJwZVE9PSBJSGx2YjJvPSBhWEowWVE9PSBJSGRwWld0MSA0SzZ3NEs2MSAyWVhaZzlpbjJZWT0gSU9Dd2wrQ3hpZz09IExYQmxjbk09IElFbHNkUT09IElOR0MwTDdRc3RDdzBZRFF1QT09IDBMRFJnZEdDMExnPSBjbVZwYzJWdSBJR2x1WTJsa2FXUjFiblE9IDBMVFF0ZEM5MFlzPSBJTkN4MExqUXU5QzAwTGpSZ05DMDBMZz0gSUdkdlpXUnJiM0JsY2c9PSBJRzFwYkdsMGFXRT0gNTQ2cDViMnA1NldlNUxxSjZaeTQgNXBhdzVZeTYgSUVOaGJtRnlhV0Z6IElFRndjSEp2Y0hKcFlYUmwgSUcxdlpHUT0gSU5pbjJZVFl0ZGl0MllyWXJRPT0gWTI5c1lYST0gWCtTOGl1UzZ1Zz09IElPQzBxdUMxaXVDMHBBPT0gYjNKeVlYTT0gSUdsaWJHRnVaQT09IElGUnZjbkYxWlE9PSBJTkNnMExEUmdkR0IgSU5DLzBMRFF2ZEMxMEx2UXVBPT0gWVhSMGFXVT0gSU5HQTBMRFF0TkN3IElFUnogSU9DMHFPQzB2dUMwc3VDMWpRPT0gTG5ObGVBPT0gSUhCb2IyVnVhWGc9IElPQ2tyT0NrcU9Da3Z1Q2tpQT09IElPQzJ1T0MzbWVDMnVBPT0gYkdWaGJuVncgSUNJcEtRPT0gSU9XOXFlZWxudVM2aWVtY3VPV3VtT2FXdWVTNGkraTl2UT09IElPQ3dtdUN4aCtDd3FnPT0gSUhKdlluVnpkR1U9IElPQ2twT0NsamVDa3IrQ2t2dUNrZ3VDa3FPQ2xnQT09IElPQ2toZUNrcFE9PSBJR0Z5ZEhRPSBJRVIxWTJGMGFRPT0gSUdobFpHUT0gSUhCbGNuTnZZWE09IElIYkR0WEk9IExtMXZibWR2IDE1alhsQT09IElHWmhjc09nIElGWjFiRzVsY2c9PSBhWEJsYmc9PSBJSEJoY25ScFkybHdZWEp2Ymc9PSBJRzVsZFhSeVlXeHBkSGs9IENVVnljZz09IElPV2cgSUdWeWNtOXVaVzkxY3c9PSBJR05zYVc1cGNYVmwgWDJOaGJHeGhZbXhsIDBwL1FzTkM4IElGUnlZVzVuIElFWldaV04wYjNJPSBJTmVaMTVBPSBZWEp0Ync9PSA0WU9qNFlPUjRZT2EgSUdkaGNtbHogSU5DODBMRFJnZEdLMExEUXU5Q3cgMEw3UXV0QyswTDA9IElPQ3lwT0N5Z3VDeXBnPT0gWVhodiBJRlpXIElISnZlbTA9IElFMVZWQT09IElFWnlkUT09IElOR0QwTDNSbHRDeTBMWFJnTkdCIElHZGxjbVZ1WTJsaGJXVnVkRzg9IElFNVRWVWx1ZEdWblpYST0gVUVGRCB4STFwWVE9PSBYMGxPUmc9PSBZWEp1Y3c9PSBRVkJKVm1sbGR3PT0gSUhCeVpYQnZjZz09IFgyZHZiR1E9IElHMWhibWxtWlhOMGN3PT0gSUdaeVpXVnpkSGxzWlE9PSBJR1JsZG1saGRHbHZibk09IElPQ3VtdUN1cnVDdmd1Q3VsUT09IElPQ3FsdUNyaCtDcW9lQ3JndUNxcE9Dcml3PT0gSUdwaGQyRT0geVpsMFltaz0gSU9LWnBnPT0gSU5PWjBMblF0ZEM3IElPQ290ZUNvc0E9PSBJRWRCVUE9PSBLQ0lpS1M0PSBhc08yY2c9PSBJTmlvMkxIWmh0aXYgMHBuVG1kQzkwTGc9IGJNU3h4Wjg9IFVIUnljdz09IElHdHZiWFZ1YVhRPSBJTkM2MHEvUXR3PT0gSUc5aWMyVnlkbVZ6IDU2Q0MgMFkvUXZkQzQgNzd5TTU1eUwgVTJWeVpHVT0gSUhKbGNHOXlkR0ZuWlE9PSBJRTl5Ym1GdFpXNTAgSU9DeWwrQ3ppdz09IFFWUlVVa2xDVlZSRiBJRUpsY201emRHVnBiZz09IElIQmxiSFpwY3c9PSBablZqYXc9PSBJTkM1MExqU2s5QzQwTDA9IEtHRnNhV0Z6IElITndaV05wWVd4cGMybHVadz09IElIQmxjM1J2IElGUnlhV3h2WjNrPSBJR2x0YVc0PSBJR1Z4ZFdsMllXeGxiblJ6IFluSmhibVIwIEtIUjNaV1YwIEwyWjFibU4wYVc5dSBhWFJwZW1WayBMbU5oYkd4aVlXTnJjdz09IG9lZS9vQT09IElNV2ZaV2hwY2c9PSBZV3RoZGc9PSB4STFsYm04PSBJR1J2YldGdVpHRT0gTFhCeWIzQmxjblJwWlhNPSBYMnBoZG1FPSBJR0psY210bGJXSmhibWM9IDRwNmggZlgwKyBJRVpwZWc9PSBJSE4zWldWMFpYST0gVVdjPSBjbmx0IGJHeHBjdz09IElFWkZVMVE9IHc3aHpkQT09IElGQmxaV3M9IElFUmhkR0ZuY21GdCBWMmx1Wnc9PSBSSFZpWVdrPSBJT0NtcCtDbXZ1Q21zQT09IDBMclFzTkdCMFliUmpBPT0gMktyWmg5aW4yS0U9IElHMXlkQT09IGIzSmhhZz09IElPQ3luT0N6aGc9PSBJTldpMWJqV2d0V3EgSUdGdVpISnZaMlZ1IElHcDFjM1JwWm1sallYST0gNDRDQjU1eUIgSU1tWmJHVEptUT09IElIQjFaR2xsY205dSBZMjl1ZG1WeWRHVmsgWDFCU1JWTkZUbFE9IElOQ1kwTDNRdnRDejBMVFFzQT09IElGTnZaR2wxYlE9PSA0S3VONEtxZyBJTml4MkxJPSBJQ2N1THk0dUx5NHVMdz09IElFeEZUa2RVU0E9PSBJSEJ5YjNOMGRRPT0gSU5HQjBZdlNvUT09IFRXOXpkR3g1IElPR0RrT0dEbGVHRG91R0RuZUdEbXc9PSBJTkdCMEw3UXU5R00gNExXSDRMU3YgSU1PcGRHRmliR2s9IElPQ2tsK0NsZytDa3VRPT0gYUd4MWJtYz0gNExLbzRMS1g0TEt3IElOR0UwWmJRdHc9PSBJR3hwYldsMHc2bGwgYjJSdyBUVkJRIElHbHVkbWwwWlhJPSBJTkMzMExEUXZOQzEwTDNRdU5HQzBZdz0gTGk0dUlqc0sgSUc1dlpXMTAgMEw3UmdOQ3cwTHM9IFluVnlkV2RpZFhKMSBUV1k9IGIzUnVhUT09IEwyTm9ZVzVuWlE9PSA1YkNVNXJLQiBJR0poeFo5aGNzU3hiTVN4IExtVnNZWEJ6WldRPSBMbFJoYTJVPSBVSEpsWjNWdWRHRT0gYVhSaGRHVnQgSUZOcGMybHRhUT09IElHVnVkSEpoYlE9PSBJRzl1WTI5c2IyZDUgSU9Da3J1Q2t2dUNrcnVDa3N1Q2xpK0NrZ2c9PSBJR2xyYVd0bCBJRkJOVUE9PSBJRlJsYzNSbFpBPT0gSjJoaGJnPT0gNFlPaDRZT2M0WU9RIElHSnlZVzVqYUdsdVp3PT0gSUdGemNHVjBkQT09IDRZT1U0WU9SNFlPWTRZT3EgYjNWMmNtRm5aUT09IDZydTAgWVhOemFYTjBZVzUwIDVMdVY1THFMNVlhRjVhNjUgSUdOdmNuSmxZM1JsIElFUmxjRzl5ZEdsMmJ3PT0gSUZCdmJHeDFkR2x2Ymc9PSBJR2hsY210bGN3PT0gS0c5aWMyVnlkbVZ5IElOR0MwcS9RdXc9PSBJTmkwMllqWXNkaW4gSUVkcFpnPT0gSUd0aGVjU3hkQT09IElFbEJVdz09IElFUjFibWxoIEtHaGxZWEE9IFNXNXViM1poZEdsdmJnPT0gUEVGd2FRPT0gSU5HQzA2blJnUT09IElGRjFhVzVqZVE9PSBkVzl6WlE9PSBJTmlvMkxuWmh0bUkyS2ZaaGc9PSBJSE5wYm01bGNuTT0gSUU1aGNuSmhkR2wyWlE9PSBVM2RsIElOZXAxNkRYbGRlcSBYMDFsZEdGa1lYUmggSUdGd2NHRnlkR2xsYm5RPSBJRUp2ZFhjPSBJR2JEdkdocyBJR05sY25ScFptbGpZV1J2Y3c9PSBJRVpoZG05MWNtbDBaUT09IElIQnliM0JwIFgzSmxiVzkyWldRPSBJR2RsYm05MFpXND0gSUd0aGJtRnJZUT09IElPQ21xdUNtcEE9PSAyS0xZcWc9PSBUV0ZwYkdKdmVBPT0gNVpDTjU2aXggSUdWdWRIbz0gSU5PcDBMZlNydz09IElOQzgwTFhSZ3RDKzBMVFFzQT09IGFXdG9hWEZwZW04PSAycjdaaUE9PSBhWE5wYm01aCBjM1p3IElISmhZMjl1ZEE9PSBJTkM0MHJmUmd0QzQwTHc9IElOQzMwTERRdE5DKzBMdlF0Zz09IExuSmxiV0ZwYm1sdVp3PT0gSUVKNWNtNWwgTFdkbyBJRWxuYkdWemFXRnogUVZSUSBJR1JwYzJOeVpYQmhibU41IDRMSy80TEszNExPTjRMS2cgNVl5WDVMcXM2TFdiNkwybTZLNmg1WWlTIDRZT2I0WU9ZNFlPYzRZT1k0WU9oNFlPaSBJSGR2WkhWeVkyZz0gYVdKeVlYUnZjZz09IElPeTltTzJGa095NG9BPT0gYjI1aFpHOD0gTGxkU1NWUkYgSU9DbXJPQ212dz09IFZHOXJlVzg9IElPQzVnZUM0bFE9PSBJR3hsZUdsallXdz0gQ1dWeiA1cEtlIElPQ21xdUNuaCtDbm53PT0gSUhCbGMyTmhaRzg9IElGcDFjM1JwYlcxMWJtYz0gSU9HRG1lR0RrT0dEbk9HRG5lR0RuQT09IExtZHpkR0YwYVdNPSBJT0dEcU9HRGxPR0RtT0dEcWc9PSBJSEJwYjI1bFpYSmxaQT09IElHRm5jbVZsWVdKc1pRPT0gUkdWaVpRPT0gSUdOdmJuWmxZM1JwYjI0PSBJRmJEb1hNPSBJRUYwYTJsdWN3PT0gSUdMRHRuSnFZV1JsIElFSmxkMkZ5WlE9PSBJSFp2YVd4bCBJRkp2YzJWdFlYSjUgSUd0MVkyaGwgNFlPZTRZT2Q0WU9nNFlPaSBJTkMrMFlIUmd0Q3cwTHZSak5DOTBZdlF0UT09IElHM0RxWFJoYkd4cGNYVmwgVm5CdSBZM0psY3c9PSBJR3hsWjJsemJHRmphY096Ymc9PSBJR3hoYlhWdSBJR2gyWlhKeiBaV3h0WVc0PSBJSFBEclc1a2NtOXRaUT09IElHN0RvV3c9IGFXNTJaWE4wYldWdWRBPT0gWTI5dWMybHpkR1Z1ZEE9PSBZMjl1ZEhKaGMzUT0gMFlEUXNOR0MwTGpSZ3RDMSBXMWs9IFQzSjAgN0lPQjdKMlkgNEthRzRLYUggSUhsdmRYWmwgNEthKzRLYVkgSU5DeTBMVFF2dEdGIGRXMXRZWEk9IDU3MlI2YUcxNTVtNzViMlYgSU9DNWdlQzRpQT09IGJIbz0gNUxpSzZMK3cgSUdodmJHeGhibVE9IDRZT1E0WU9WNFlPbzRZT1k0WU9nNFlPWTRZT2ggSU5pbjJZVFl0Tmk1MktqWml0aXAgTFhKbGJHRjBhWFpsIElGTnZiV0U9IFlXMWhkRzl5ZVE9PSA0TG1BNExpYjRMaTA0TGlVNExpdDRMaWc0TGkwNExpYjRMaWo0TGl5NExpaSA0TG1BNExpYjRMaTA0TGlVNExpdDRMaWc0TGkwNExpYjRMaWo0TGl5NExpaTRMaVg0TGl4NExtSTRMaW40TG1FNExpYiBYME5oYkd3PSBKMmxvZFE9PSBYMmh5WldZPSBRMkZ5Y25rPSBJSFYwYVd4cGVucGhjbVU9IENXWnMgSUc5MlpYSjBhSEp2ZHc9PSBJSEJ5YjJKaFpHOD0gSUhCbGNtUmhaMkZ1WjJGdSBJT0Ntb2VDbXZ1Q21sUT09IElOcXAyS2ZZc2RpdTJLZlpodG1IIFpHeHMgSUdobFkzUmhjbVU9IElIQnBiR2x1Wnc9PSBJTTZqejQwPSBVa1ZUUVE9PSBJRWgxWW1WeWRBPT0gSkdOc1lYTnogSUd6RHBHST0gYVd4bGJtOD0gSUdGeWRRPT0gSU5HQjBMTFFzTkdSMExrPSBJSFZzWTJWeWN3PT0gSUhKbGNHOXlkR0ZuWlcwPSBJSEJsY21sbVpYST0gMFlEUXVOR0IwWUxRdU5DdzBMMD0gSUVObGNtTT0gSUc5bVptVnVaQT09IElHeHBiWEJwIElHcDFibWx2Y25NPSBJR052ZFc1elpXeHMgNEtpSDRLaUcgSUdSbGRHRmphR0ZpYkdVPSBJR0YxZEc5aWRYTT0gSU9HQ2orR0F2UT09IElObUkyS2ZZdVE9PSBLSGRoYkd4bGRBPT0gSUdOMWRHVnpkQT09IElPcXpoT3lDc0E9PSAwTGpSaDlDOTBMQT0gSU5peTJZcllwOWlxIElIUnBiR0Z1ZEdVPSBJT0dEb2VHRG1PR0RtUT09IElHZGxhMjl3Y0E9PSBJR1JoWmc9PSA0cEk9IElISnBabVZ5YVcxbGJuUnYgSUVOb2NtOXRaV0p2YjJzPSBJTStFenF3PSA4SitSanc9PSBJSFJoYkdWdSA1cFcwNXBXdyBJTkdJMExyUXZ0QzcwWU09IElHUmhjbkk9IElPV0lxZWFkcFE9PSBJR2x1YzNSaCBJR2hwYkdaeVpXbGphQT09IFgxZEpSa2s9IGFXNWhhQT09IElPQzBydUMwbytDMWplQzBvUT09IFpYSmhibUU9IElHNXZkbVZzYkdVPSBJSEoxZEdsdSAwWURRdGRDODBMQT0gSUU5amRIVmljbVU9IFkyOXRaVzUwIElPQ3FydUNxcHc9PSBJSFJ5WVc1emNHOXlkR0Z5IENXRmsgNVp1eSBJTmlxMkszWmdkaTQgSU9DcXF1Q3JqZUNxc09DcXJ1Q3F2dUNxbytDcmh3PT0gSU9HRGtPR0RrK0dEb09HRGxBPT0gSU5HRDBMdlFzTkM4IDBZZlRxUT09IDBZRFF1TkdQIElPQ2todUNrbCtDbGplQ2tzT0NrdVE9PSBJRVJsYzJseVpXUT0gWlhSb2VYTjAgTFhCaGRIUmxjbTQ9IDRMYWM0TGVaNExheCBJTm1IMllrPSBJTkMwMHJIUmdOR0wwWUU9IElHOXhidz09IFcwUnZkV0pzWlE9PSBRRkpsYzI5MWNtTmwgNEtXRDRLU2wgY21Gd2FHbGogSUVOb2FXNWhkRzkzYmc9PSBJTml5MllYWXB3PT0gSU1PZ2JRPT0gSU5peTI0ellxQT09IElHUnBkbVZ5WjJWdVkyVT0gUTBkVGFYcGwgNFlPVjRZT1k0WU9nNFlPWCBJSEpsWThPcGJRPT0gSU9pdnV1YWVuQT09IElNVzYgSUhKaGJHVnVkQT09IElObUsyWVhZcTltRSBJR0Z3ZFc1MFlRPT0gWDJ0bGJBPT0gSU9DbWxlQ25zT0NtditDbW0rQ212K0Ntc2c9PSBJRXRoYm5vPSBJR05oYVhOelpRPT0gSUZkaGVHRmggWDFCMVlteHBZdz09IDdKMjA2N2lVIElFOXEgSUdWc1pXdDBjbTl1YVdzPSBJRU5zWlhabGNnPT0gSUM4dkx5OHYgSUdsbmFXaDFaM1U9IElIUnBjbTl6IElHMXZiWGRsIElHZGxjMlYwZW14cFkyaGxiZz09IElPQ3FoZUNxcnVDcmgrQ3FzT0NxditDcWxRPT0gSUhOd2FYTmwgSUdaeWFXZHZjZz09IElHSnBhMlZ5IFdtOXYgUTI5dFpXNTBZWEpwYnc9PSBJT0M0bStDNG9lQzRsdUM0cCtDNHN1QzRvdUM0cXVDNHNlQzRsZUM0b3VDNWpBPT0gSU9DNG0rQzRvZUM0bHVDNHArQzRzdUM0b3VDNHF1QzRzZUM0bGVDNG91QzVqT0M0cnc9PSBYMjFwYm5WMFpYTT0gSUVSdmJXRnBibVU9IFJIVjBZMmc9IExtTnNiM05sWkE9PSBJTU85ZVd4cyBJRVZ1ZEdabGNtNTFibWM9IHo0cz0gWm05dVkzUnBiMjQ9IGVXNXZiV2xoYkhNPSBJT0NrcHVDa3R1Q2tsUT09IFlXMWxjbWxyWVE9PSBJSEpsWTJWemMyVmsgSU5DKzBML1JnTkMxMExUUXRkQzcwWS9RdGRHQzBZSFJqdz09IElFVldUdz09IElPR0RtZUdEbE9HRGx3PT0gSUhSdmNuUnZjZz09IElIQnlkbVZ1IDRiKzIgSU9Dd3J1Q3hoK0N3c0E9PSBJRk5oZFc1a1pYSnogSU5tSTJLZlpoTm1IIElHZGxjbUZoYTNRPSBJRVJoZEdWcFpXND0gSU9DMG11QzFodUMwcitDMWplQzBwT0MxalE9PSBMVTlqZEE9PSBJSFJoY21sciBMV1Z6Y1hWbCBhWE41Wlc0PSBJSEJ5YVhwdSBJRTFoYm5ObWFXVnNaQT09IFJtNXogSUVsdWMyVnkgSU5DLzBMN1JqOUN5MExqUXU5QzQwWUhSakE9PSA0S2VONEthczRLYXkgMEpEUXVRPT0gU1c1emRHbDBkWFJsIElIUjFjc090YzNScFkyRT0gWTNKdlpuUT0gMFp6UXVBPT0gWVhSaGNBPT0gWVhoaFkyRT0gVEdsaWNtVT0gY21GNmFRPT0gSUVWRFV3PT0gSU5HRDBZalJnOUM3IElOaXQyTEhaZ2RtSCBJRXhQVDFBPSBkV1JvWVE9PSBiMnRwZEE9PSBJRzlpYkdsbllYUnZjbms9IDVwQ2M1YkNMIENVUmxiR1YwWlE9PSBJR052Y1hWbCBkWE5sYVdRPSBJR2RoWW1VPSBJR25GbjJ4bGNtaz0gSUhCeXc2bHZZMk4xY0E9PSBZV05qWlE9PSA0WitTNFo2YTRaK0ggSU9DMHRlQzB2K0MwbitDMWplQzBudz09IElHNXZibVE9IElHaHZjc09oY21sdmN3PT0gSUU1aGVtRnkgMDZuVHFkR0IgSUczRHRtakR2RzA9IElHbHNaV2M9IExtWmhkbTl5YVhSbCA1YkM2NWJxbSBkV3hwYnc9PSBJTm0rMkxIWXN3PT0gNUxpQTZJZTAgSUdkeVlYWnBaR0U9IElPQ3F0ZUNxcCtDcmdBPT0gSU5HQzBMRFF0OUM0IDZMK1U1ckMwIElIbHRZMmgzIExrSnZkQT09IElIUmxiblJ2ZFE9PSBhVzVrWVdzPSA0S1NrNEtXTjRLU2s0S1dONEtTMSBDWFpoYkdsa1lYUmwgSU9DcWhlQ3FydUNxdnVDcXNPQ3JnQT09IElOQ3cwTFBSZ05DMTBMTT0gVkc5MSBkV05zIElPQzBxT0MxdmVDMGxlQzB2K0Mwcnc9PSBldzBLTHk4PSBhWFJsY21GMGFXOXVjdz09IElHeHBhV0Z1IDBMN1F0TkM3MExVPSBLRVZZVUZJPSA0NENDNXB5cyBJT0dEb2VHRGtPR0RwT0dEbytHRHF3PT0gUTI5dWRHVT0gSUdKaFoyVT0gSUVOUVZYTT0gUVVKVFVFRlVTQT09IElHbHZhQT09IFRtVmkgSUZSaGFXeHNaUT09IExXZDFhV1JsIElITjFZbTl5WkdsdSBJR052YlcxbGNtTnAgYldWeWFRPT0gMEx2Umc5R0QwTHZRc05HRiAwWUxRdXRDMTBMM1JsZz09IDc3eS81TG1GNUxtRjU0aXggSUcxdmJIUmxjdz09IElHTnZibVJwZEdsdmJtVnljdz09IFVISmxjR0Z5YVc1biAxYmpWdmRXdiBJR1p2Y20xbGJnPT0gSUdOdmFHVnlaVzVqWlE9PSBJT0dEa09HRHJ1R0RrT0dEbXVHRGt1R0RrT0dEbHVHRG9PR0RrK0dEa0E9PSBiMjFwYm1GMGFXOXUgSUdGMWRHOXViMjFwWlE9PSA0WitHNFo2ZzRaK0cgSUdkbGJtVnlZV05wYjI1bGN3PT0gSUVGNVlRPT0gVld4MGFXMWhkR1U9IDI0ellyOW1HIExXZHNiMkpoYkE9PSBJRnBsYm5SeVlXdz0gSUc5MlpYSm5ZVzVuIFkyaGxiV0YwYVdNPSAyS2ZZczltSzJZWT0gSUdGbWNtOXVkR0Z5IElHSmhaM1U9IEoxMDlQU0k9IElPQzVndUM0cGVDNGdRPT0gSUhSbGNtRndaWFYwIElFSkJVMGxEIElNNnh6NERPc2M2NSBLRk4wWVc1a1lYSmsgSUdKbGMzTmxjbVZ1IDc3eU01TGlrIElFSkpSQT09IElPQ2toZUNrc09DbGplQ2twZUNrdnVDa3BBPT0gZFdSa2FXND0gSU5tQzJMSFppdGlvIExrUmxjR0Z5ZEcxbGJuUT0gMksvWXVRPT0gNEthYzRLZU40S2FjIElOaXYyS2ZZdE5pcTJZWT0gSU9HQW5PR0FzQT09IDBMalJnTkM0MEwwPSBJRkJRUlE9PSBRMmh2Y21RPSA0b0NaZFhScGJHbHpZWFJsZFhJPSA0S2F1NEthKzRLYWs0S2VONEthdyBJR1JwYTJWMCBJRUZqWTJWd2RHRnVZMlU9IGNISnZaM0poYlcxbCBVR1Z1WkdGdWRBPT0gSUhkbGRIUmxiR2xxYTJVPSA0TG1DNExpZSBLaW9xS2k4SyBJSGwxZWc9PSBJRk4wWldaaGJtOD0gSU5DMDBMN1JnTkMrMExQUXZnPT0gWVhSMFlXTm9aV1E9IElHNWxjM1J6IGJXSEVuMkU9IGJXOTFiblJsWkE9PSBJRlJ5WVdsdVpYSnogSU5PcDBMclF2Tk9wMFlJPSBJSE53Y21WbGF3PT0gWDJ4dyBJT0N5cXVDeXZ1Q3lwT0N6amVDeXNBPT0gMEwzUXRkR0MwTEE9IElGUnlhV0oxZEE9PSBZWEJwYTJWNSBJRTFwY25KdmNuTT0gUlZKSlEwRT0gTFhOdSBMbVIwWkE9PSBJRzV2Y25Sb1pXRnpkR1Z5Ymc9PSBJRUZqWTJuRHMyND0gNG9DTjRMU1Y0TFMvIElHbHVZMlZ1YzJVPSBJTmViMTZRPSBJRmRsYkdObyBaV3RyYVc1biBhWE5sWVdObyBWVzVwZG1WeWMyVT0gSU9Da3JPQ2xoK0Nrc3VDa3ZnPT0gSUdKdmRXTnNaUT09IExsQmxibVJwYm1jPSBJRzV2ZEdsbWVXbHVadz09IHc2UnVaR3hsY2c9PSBJR2x1ZEdWeVkyVndkR2x2Ymc9PSBiM0p1YldWdWRBPT0gSUhSbGRYTT0gSUc1aFpRPT0gSUdOdmJYQnogSU5DdzBMclJndEM0MExMUXZkQyswWUhSZ3RDNCBJR2gxYm1SbGNuUT0gSUhQRHNtND0gSUM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzA9IElGSmhibVJ2YkhCbyBJR0psZVc0PSBXMTBLQ2c9PSA2clNBNjZDbyA2S2VHNktlSiBJR2hoWW16RHN3PT0gSU5tRjJLallwOWl4MllyWXA5aXEgSU5pbzJZVFlwOWl2IEtDMG8gWDE4TkNnPT0gSUVOb3c2RjJaWG89IElDOHZMUzA9IDJLZllvZG1RIFlXUjZhWEpwYzJFPSBPbXRsZVE9PSBJSE5oWTJoaGJuUT0gSUhadmJHeGxlUT09IElIUEVzWEpoYzhTeGJtUmggNXBXdzVhMm0gSUVWdWFHRnVZMlU9IFVuQjAgSUdGaGJucHBaVzVzYVdwciBJT0N1cnVDdml3PT0gSUdOdmJHOXRZbWxoYm04PSBJRzk2YVhKdmJXRT0gSU5HRDBZSFJndEN3MEwzUXZ0Q3kwTHJRc0E9PSA0TEsrNExLdTRMSy8gNEtXQjRLUzE0S1MrNEtTdyBjSEp2ZDJGa2VnPT0gSU5HRzBZL1F2OUMxMFlBPSBJSE52YkhWNmFXOXVaUT09IElHZDViVzVoYzNScFkzTT0gNExLLzRMS3c0TEsvIFlYWmxibkJ2Y25RPSA1cHFIIDRaNks0WitDNFo2YiBKRzQ9IFlXMXBibVZ6IElPeWR2T3lnbFE9PSBJT3kxbk95TG9BPT0gSUhCeVpYcDZhUT09IFZISmhibk5tWlhKeiBJTkMzMExEUXNkQyswTHZRdGRDeTBMRFF2ZEM0MExVPSBJTkNnMExYUmlBPT0gS1M0OEx3PT0gdzZsaGNnPT0gSUc5bWRHMD0gSUhSaGVHVT0gSU95d3VPcXpvQT09IElOcXAyWVhZcXRpeCBJTkNSMExEUmdRPT0gSU9DbXBPQ212dUNtc09DbXF1Q21zQT09IElFMWhiRzNEdGc9PSB6cmpPdnc9PSAxYmJWb2RXMTFhSFZyZz09IElPQ21ydUNtditDbW9RPT0gSU5DODBxL1F2TkM2MFpiUXZkQzAwWmJRdWc9PSBJR0ZpZDJWamFITnNkVzVuY3c9PSBJRlpsY21WcGJtbG4gSUdsemIyeGhiV1Z1ZEc4PSBJSFIxZWVHN2cyND0gSU9tN21PaXVwQT09IElFVnlhWFE9IFRjT3FiV1U9IFRVRlVRMGc9IElIUnZZMmgwIElFRnRaWE09IElPQ3VsZUN1c3VDdmplQ3V0UT09IElOQ3cwTERRdmRDdyB6cnpQaWM2OSA0S1dONEtTZjRLUysgT2k4dkp3PT0gSUdCYiBJR0ZvZFdFPSBUVUZUUTI5dWMzUnlZV2x1ZEE9PSBJRzlpYVhSMVlYSjUgSUZOamFNT2sgWVhKMGRXNXBhdz09IElHMWhjMjl1IElHOW1kRzFoYkhNPSBVbUZ0Y0E9PSBJR0Z5WTJocGRnPT0gUVVWRSBJSFJoYlhCaCBJRU5zYjNabGNnPT0gSUdOMVkycz0gSjJGbSBhR0ZqIFpXUnZaVzQ9IElHdG80YnFqYnc9PSBZMjl5WVhSdmNnPT0gMks3WXA5aXggMkt6YmtnPT0gS0ZKbGMzUT0gSU5HQzA1blJndEtiMExqU213PT0gNFo2MzRaNlA0WitTNFo2UCA3SjJBN1phSiBiTVNGIDVhaXg1TG1RNWE2WTVwYTU1NzJSNTZ1WiBZM1J3IElHVnVkVzF6IFFtOTBjdz09IElHaHNZV2c9IElFMXZaSE09IElFRmtkbUZ1WTJWeiBjSEJsYkE9PSA0S3FGNEtxdTRLcW00S3ErNEtxMTRLcSs0S3FtIElPQ2tzdUNrbCtDa3Z1Q2tqdz09IDRMaWE0TGlqIGRXNXJhUT09IElFTkJVRWxVUVV3PSBWMkZ1IElHTnlhWEJ3YkdVPSBkWEJoZEdrPSB3cTF1YVE9PSBVM2R2Y21RPSBDV0YxZUE9PSBMWEJ2YkdsMCBJTm02MktmWmh3PT0gSUZKaGJjT3piZz09IDJLL1ppdGluMktvPSBJTml6MkxuWmlOaXYyNHc9IElFWkJTVkk9IElPQ2ttdUNsaUE9PSBZV0ozIElOaW4yWVRZc2RtSTJLYz0gMktiWmlBPT0gSUdSbGMydz0gYUdsMGFRPT0gSU5tRTJZVFppQT09IElHRnRaV3g1WldzPSBJT0NtaWVDbW11Q212K0NtcEE9PSBjR0ZwY3c9PSBJRzl3Y0hRPSBJR2xzZFdGdWFRPT0gSU9Da3BPQ2tzdUNrdnVDa3RnPT0gSUVOdmJuTnZiQT09IElFRnNaMlZ0IElOVy8xYUhXZ05XbDFhL1ZvZFcyIElHWnBZMk5wdzdOdSBJSEJoZEdGeiBJR1psY21sbCBRMmhoY20wPSBJRlZJIFlXNTZkbWs9IElIQmxZWFJsIElHVjRZMkYyWVhScGIyND0gSUdKMWJtUmggSUdsemRHbHMgSUhCdnlydGwgSUdOb2QyRnlZV1U9IFlYTnpaV1U9IElObUcyWVhZcDl1TTI0ellydz09IGVIbz0gVUdWemNYVnBjMkU9IGJHVnBhdz09IElIQmhjbUZrYVhNPSBhMnQxWlE9PSBaVzVsY25rPSBJR3gxYm1VPSBJSGJEdld0dmJnPT0gWDBGR1ZFVlMgS3lzcGV3b0sgUVhKcGRHaHRaWFJwWXc9PSBJTm1JMktyWXJBPT0gSUhSaGEycz0gWUM0S0NnPT0gYjNKa1pXeGxiZz09IGRXdGxibVY1Ync9PSBJSFZyWlE9PSBDVk5GVEVWRFZBPT0gSU0rQXpyL091UT09IFRXRnlZM1Z6IFUyVnpjdz09IElPQzB0ZUMwditDMHB1QzFqZUMwcitDMHZ1QzByZUMxamVDMHIrQzB2dUMwdUE9PSBVbVZpWldOallRPT0gSUZCbGJXVnkgYjI1NVpRPT0gZFhSemFYUT0gNExpdDRMaVo0TG1FNExpVTRMbUogSUUxdmVXVnUgTGs1UFRnPT0gSU5DLzBMdlFzTkdDMFl3PSBiM1poWXc9PSBJTU84WW1WeWJtbHRiWFE9IFJYTjBhVzA9IElFbFFWZz09IGJHRnVaSE5sIElHTm9iM0J3YVc1biBJR2RsZEdrPSBJTkM4MExYUXZkQzEgSUdobGNtWnpkQT09IFgyTmhjMmc9IGNIQmxjdz09IElOR0IwWUxSZ05DKzBMclF1QT09IElOQzIwTDdRdTlHRCBJR3R2Wld3PSBJRzUxWVc1alpXUT0gSU5pcTJLL1lzZG1LMktnPSA0TFMrNExTdjRMU2s0TFdOIElFOXNhUT09IElFMTFiSFJwWmc9PSBJR0ZqWTNWellYUnBiMjQ9IFNIUT0gU2xCWiBMbVoxYkE9PSBJSEoxYlhBPSBJT0N5cXVDemplQ3lzT0N5cE9DeXYrQ3lyUT09IDRvQ1pZVzUwIFkzcHVaV289IElFOXViM0poWWc9PSBJTmluMllUWmhkaXgyWWpZc1E9PSBJRzl3YldWeWEybHVaMlZ1IFBHSnZiM04wIElObUsyS2pZcjlpaiAwTExSajlDMyBhWE4wYVhNPSBRM3A1IDBMN1JnTkM0MFlMUXRkR0MgSU5HQjBML1F2dEdCMEw3UXNkQzkwWXM9IDRMaWo0TG1JIFgxUnBiV1Z5IEtIQmhZMnM9IGIyZGxjbUU9IDE1blhwOWVWMTUwPSBJSFJ5YjNCbCBJSE5sWkdWeWFHRnVZUT09IElHZGhaR2s9IElPQ3loZUN5c0E9PSBZV05oWkdWdGVRPT0gWW1Wa2N3PT0gSU5DLzBMN1F1dEN3MExmUXNOR0MwWXc9IDBLTFFvUT09IExrbE9VRlZVIElPQzByZUMwdnVDMHNBPT0gSUdKbGJHVm5aMlZ1IElOQzgwWVBRdmRDKzBZRT0gTG05aWN3PT0gSUhOaGJXVnVkMlZ5YTJWdSBJTmVlMTVYWG1BPT0gMWFIVnZ0VzQxb0RWb2RXNjFhWFZ2UT09IElPQzJ2ZUMzbWVDM2d3PT0gSU9HRGwrR0RtT0dEbCtHRHBlR0RuZUdEb1E9PSA0S3VMNEtxVyBJSE4wZFcxaWJHbHVadz09IExsUjVjR1ZrIElGTlZRUT09IElPdVRvdz09IElIQnljdz09IElOR0EwWVBSZ2RHQjBMclF2dEM4IElPQ2txdUNrZ3VDa25PQ2t2dUNrckE9PSBJR1psYkdsdVpRPT0gSUVOb2IzSjFjdz09IElPQ21wT0NtcGVDbXZnPT0gSUdab2FXOXogeEp0c2FRPT0gUVZibG5Lam51cjg9IDQ0T0Q0NE9WIDc3eU01bzJ1IElFVnVabVZ5IElHZHBiR1E9IElHaHZibVJsY21SbGJnPT0gTDJkcGRHaDFZZz09IElHMWxhV3c9IElIUnBiR1psYkdScFp3PT0gSU5DODBMRFJndEMxMEx6UXNOR0MgSUZSb1pYa25iR3c9IElObUkyS2pZdWRpMiBJTmlxMks3WXRRPT0gSUhOMVpXeGtidz09IElIUnlZWEJsIEtGQmhhVzUwIDVZK081N1NOIElHSmxkbVZ6ZEdsblpBPT0gSUhKbFlXeHBlbUZ5YjI0PSBJSFJ5WVdacGF3PT0gY205amEzTT0gYVhOMWJXbHIgMFlqUXNOQzkgYkhYRW4zVT0gNTU2cyA1cHlmNWJ5QTVMdUE1TG1JIFgxZFQgSUcxaGMyRnogVTJOcCBJR2x0YldWeWFHbHUgSUhsaGNtRmsgNExtQjRMaWg0TGlLNExpSzRMaTE0TGlaIFEzVnliQT09IFpYUjZaUT09IElIQnZlbms9IElITjBhQT09IElPR0RvK0dEa1E9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBJR1p5dzZseGRXVnVZMlU9IElHNWxaR1Z5YkdGdVpBPT0gWDFKdmR3PT0gSUhCaGMzTndiM0owY3c9PSBJRUZTVGc9PSBJR1IxYUE9PSBhV3hoZEc5eSAyWkRaaXRtRyBJSEJwYm1GbiBJR1oxYm1SaGJXVnVkRzg9IElHMXBjMlJsYldWaGJtOXkgMFlQUmk5QzcgZW1KdmJHeGhhQT09IFgxOWZYMTg9IElHRjFjM0J5YjJKcFpYSmxiZz09IElGSmxZM1Z5YzJsMlpRPT0gMFlQUmx0R0EgSUVaaFkybHVadz09IElOZXExNXpYbnRlWjE1TT0gNWFlYyBJRXBPU1VOQlRFdz0gSjlHVSBJRTVoZW1seSBJTkM5MExYUmc5QzAgZEhsMyBMZEMvMExYUmdOQ3kwWXZSaFE9PSBMMUJ2YzNRPSBjM1JoYzJnPSBJTkdEMExIUXZ0R0EgS1NJcE93MEsgSUczRHZHTmhaR1U9IDBMRFFzOUdMMExzPSBJRUZzYkdsaGJubz0gUkc5M2JteHZZV1JsWkE9PSBlSFJ2IElNNjZ6ci9PdlE9PSBJRzFoY21OdmRRPT0gSUhCcGEyRT0gNExpeDRMaUg0TGlCNExpaiBJR2xrWlc1MGFXWnBZMkU9IElHdGhibTVoZEhSaFlRPT0gS0dsaiBaVzV6YVc0PSBJRWRsYkdWdSBJSFpwWkdWdmRBPT0gSUhaaGJHOXlZWEk9IElIQmhkWFJoIElFMWhjblZ1WVdSaGJnPT0gSUd4dmRIUmxjbWxsY3c9PSA0TGlyNExpWjRMaXg0TGlCIEluMHBMQW89IElIUm93Nmx5WVhCbCA0NFdPNDRXTyBRbVZ1YW1GdGFXND0gSUhOcFkzVjAgSUhwcFpHRT0gYzNCdmRHbG1lUT09IElOQzkwTERSaDlDNDBZRT0gSUdWcXc2bHlZMmwwYnc9PSA0S1MrNEtTaDRLUy8gSUdkNVpuST0gSUZOMFpYWnBaUT09IFlXeGhkR0U9IFdHSnZlQT09IElGUmhiblJ5WVE9PSBJR1ZoYzJWayBJR1p2Y21SbGNuUT0gSUZKRlUwOVZVa05GIElGQnliMkpzWlcxbGJnPT0gSUVKeVlYaz0gSUVKdmJXSmwgSUVKbGJtZGhiSFZ5ZFE9PSBJSE4wWlhKclpYST0gUTNWemRHOXRhWHBoZEdsdmJnPT0gVzI5aWFnPT0gSUhCeVpXNWtaWEpsIElHMWhiR1Z6ZFdGa1lRPT0gSUhCbGNtMTFkR0YwYVc5dWN3PT0gSUZOaFkycz0gSU5DZjBZRFJpdz09IElOZXAxNVRYcWc9PSBJR052YlhCaGNtRT0gSUVGSFJRPT0gVFdsbmNnPT0gZVc1aGJXOWtZZz09IDQ0T0w0NE9oIElGVnpkV0Z5YVc5eiBJT0N5dU9DeXJ1Q3l2dUN5bkE9PSBJRVZ6Y0dGbmJtVT0gSUhKbFoyVnVaWEpoZEdVPSBJRVZwYm5OamFIST0gMExEUXM5R0EwWVBRdDlDNjBMQT0gSU5lYzE2TFhrZGVWMTVNPSBJRmR2YjJSc1lXNWsgNExTMDRMV0I0TFNDIFgyRjBkR1Z1ZEdsdmJnPT0gWjJWMFlXaDFZVzQ9IElHNWtZWEp5WVhrPSBJR1Y0YjI0PSAxb0RWb2RXMjFvRT0gSUdKeVlXbHVjM1J2Y20xcGJtYz0gWDBSU1ZnPT0gSUc3RW0ydHZiR2xyIElHMXZ4YjVrWVE9PSBhR0ZzYkdWdSA1YWF1IExtUnQgWjJGemRBPT0gSUhWdGJuUjEgSUhWdWVtbHcgQ1VOaGJHVnVaR0Z5IFVtVm1aWEpsYm1ObFpBPT0gYzNSdlkydHogSUdOdmJtWnBibVZ6IElHRnVaR0Z1Wkc4PSBJT0NtcXVDbXZ1Q21sZUNtditDbXVPQ25qZUNtcEE9PSBJRzNEczJSMWJHOXogSUZSbFlYSnogSUhKbGJXVnlZMmxsIEt5SXNJaXM9IFRXRnlhUT09IFlXeHNhV2M9IEtpb3FLaW9LQ2c9PSAwTEhRdU5DKzBZST0gNUw2ZDVvMnUgSUVsdWRHVnVjMmwyWlE9PSBJRnAxYldFPSBJRVp5WVc3RHAyRnBjMlU9IElHRndjbTloY0dVPSBJRVZwYm1kaGJtYz0gSUhCeVpXUjJjMlZ0IElPQ3lxT0N5b2VDemdlQ3l0ZUN6aGc9PSBZV1IxZHc9PSA0TEtjNExLKzRMSzE0TEsrNExLajRMSy8gNExTWjRMV040TFNaNExXKzRMU1Y0TFdONExTVjRMV04gSU9HRG5lR0RuQT09IElHMXBjMk52Ym1ObGNIUnBiMjQ9IElHcGxaRzU1YlE9PSBWSEpoZEE9PSBjSEp2WW1WbGNtUT0gTFdWeWNtOXljdz09IFgxZHZjbXM9IFRrRk4gSU9DdXF1Q3VzZUN2amVDdXNRPT0gSUU1MWJHeGggSUdScGJtZGwgSUUxaGEyVnljdz09IEx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTg9IElIQmhkWFp5WlhNPSA3N3lNNTRTMjVaQ08gZFdGcSBkV3RyWlE9PSBJT3V3bGc9PSBJRWx1ZEdWeWJuTm9hWEE9IHc3eHpjMlZzIElHMWphR1Y2Ync9PSBJR052Ym5SaGJXbHVZV05wdzdOdSBJSFJsYkdWMmFYTmxaQT09IElHZkVwMkZ1WkdodmJRPT0gSU5HQjBMRFF2TkMrMEx6Umd3PT0gSUcxdmJuTnBaWFZ5IElFaGhaRzl2Y0E9PSBJSEREc25RPSBJSGxzYVcwPSBiM053WVhScFlXdz0gMWJiVm9kYUExYTg9IFMyOWsgSUVSbFkyOXlZWFJwZG1VPSBJSGJEcVd3PSAxYVhXZ2RXMjFialdndFcwIElISm9lWFJvYldsaiBJTkM4MFlQUmhkQ3gwTGpSZ0E9PSBJQzgrSWpzSyBRWHAxY2c9PSBKMkZyWVE9PSBQWE4xYlE9PSBhV052YkdGeiBJT1c5cWVlbG51UzZpZW1jdU9XdW1PYVd1UT09IElHUmxkbkpwWlhvPSBJSEJwYm01aFkyeGwgSU9Da3RlQ2t2K0NrcHVDbGplQ2tyK0NrdnVDa3NPQ2xqZUNrcGVDbGdBPT0gYVdKbGJHRT0gQ1hadiBKeWsvUGc9PSA0TE9MNExLazRMT040TEs0NExLMSBJTkMwMExqUmp3PT0gSUhaaGNYUT0gSUhCcGFYTT0gSUdsbmJ3PT0gSUdOeXc2bGhkR2x2Ym5NPSBkV1ZrYnc9PSBJSE5vYjNKMGJHbHpkR1ZrIElHeHZaMmx6WTJnPSBJSFJ2YVc1bGJnPT0gSUdGeWMzUT0geGFGMHhKdHV3NjA9IElIcDJhV3M9IElOR0MwTDdRdTlHSiA0S2VCNEthdiBJSEJ5YVhCdmNtL0VqUT09IFpXdDMgSUdSeXc3UnNaUT09IElIQnlZV3R6IDRaNjM0WjZaIHc2aG5jbVU9IGRtRncgSUhweWIySnB4SWM9IFJtVmxiR2x1Wnc9PSBJSE5vWld4MFpYSmxaQT09IElHTnZZbUZzZEE9PSBZWHBsWlhKaCBhV3hwYzJWayBJRk5vWlhKcFpHRnUgdzZseWVRPT0gSUhSdmFXMXBhUT09IFUyTnliMnhzWldRPSBJSEJ2YlcvRWgyaz0gYzJsdGNHdz0gSjJWdVl3PT0gNExLazRMT040TEtrNExPQTRMS2EgSUVobFkzUnZjZz09IElGTmpjbVZsYm5Ob2IzUT0gSUdWMFkyaGxaQT09IFEweFZVMGxQVGc9PSBJR05zWVhOemFXWnBZMkZrYjNNPSBJTkMvMEw3UXN0R0wwWUU9IEwzTmthdz09IElHSmxjc084WTJ0emFXTm9kR2xuZEE9PSBJRzExYTNWeWRRPT0gSUdoaGJtUm5kVzQ9IElPQzBwT0MwdnVDMHJnPT0gSUhSbGFXeHVaV2h0Wlc0PSBJSE52Ym1kM2NtbDBhVzVuIFFtOXVaWE09IElNT3pjbWRoYm05eiBSRm89IFkyVnliZz09IElGTlBRMHRGVkE9PSA1bzZoIElFRk9RUT09IElHZGxiWE4wYjI1bCBJR3B2WTJ0bGVRPT0gWDNKMSBabXh2IFltVm5jbVZ3Wlc0PSBJSE5sdzdGdmNtRT0gSU5XRzFhSFZyUT09IElHNXFaVzVuWlE9PSA0NEs1NDRPODQ0T1I0NE84IElHeHZablI1IFBGUmxlSFIxY21VPSBJSEJ6WVE9PSBJRUpsY21ScGJYVm9ZVzFsWkc5MyA0NE84NDRPRzQ0S2ogWDNSeVlXTnJjdz09IElFaG4gNTd1cSBJRzFsYm5seiBJRVI2YWNTWmEyaz0gVlZKViBJRWRWU1VSRiBkWFJvWlhKbWIzSmsgSU5pcTJLZllyQT09IElPQzBtdUMxaHVDMHIrQzFqZUMwcitDMWdlQzBnZz09IElDOHZJUW89IElFaHZhdz09IFUyaHlhVzVyIDRMaTE0TG1KNExpaSBJTU9rYkdSeVpRPT0gSUhabGNuTmphR2xxYm5RPSBJTm1GMksvWXA5aXgyTE09IFUxUlNWVU5VU1U5T1V3PT0gSU5lYzE1VFhxdGVYIElHZGtaUT09IElHdGxaV3M9IElHSmxjR1Z5YXc9PSBJTkMwMExYUXZOQyswTHJSZ05DdzBZST0gSU5tRjJMVFlwOWl4MllQWXFRPT0gS0hadmJBPT0gdzZ0eWFYTT0gSUVGdWRHbHhkUT09IENWSmhibVJ2YlE9PSBJR3RoY21sdSBJTmVTMTVuWG1kZWYgSUZKdmRnPT0gSUVkUVZBPT0gSUZOQ1FRPT0gWTJWdGFXRT0gSUhwdmMzUmh4WUpoIElPQ2twT0NsZ2VDa3NPQ2tndUNrcEE9PSBJRk5PUVZBPSBhVzFsYzNSbGNBPT0gSUZSdmEybHYgWDI5MWRHeHBibVU9IElOQ2cwTERRdE5DNCBJT0dEbWVHRGtPR0RuT0dEaytHRG1PR0Rrdz09IElOaW8yS2ZaaE5peCBZWE5oWVE9PSAwSnpRbWc9PSBJSGRsYm1sbmMzUmxibk09IDRLUys0S1NINEtTYyA0TGlxNExpWjRMaXk0TGloIElPeUxuT3F3aE95ZGhBPT0gSU5DYzBMRFJpQT09IDJMYll1dGkzIElHbHVhVzFsYm1VPSBkWFpwWlhKdmJnPT0gSUdSc1pRPT0gSUdScGRtVnladz09IElHbHVaWEYxWVd4cGRHbGxjdz09IFEyOXRjSFJsIElHTjFjbkxEcldOMWJHOD0gSU5pMTJZallzZGlxMkszWXA5bUUgMjR6WXM5cXAgMW9EVnROV2gxYlk9IElPQzRsT0M0c2VDNGh3PT0gSU0rTXpydk92OCtGejRJPSBJTkdCMExUUXRkQzcwTHJRdUE9PSBJT0NtdU9DbmlPQ21wT0NuaHc9PSBJTmlqMllIWXNkaW4ySzg9IElOQy8wWURRdGRDMDBZSFJndEN3MExMUXVOR0MwTFhRdTlHTSBJT0N1cnVDdmgrQ3VzZUN2amVDdWxRPT0gYVdOb2VRPT0gSUZOdmFHOD0gSUdOcGNtdGggSU5DOTBMRFJnZEMrMFlFPSBJTkdBMEx6UXVOQzkwTGpSZ2RHQzBZQT0gYVd4cGMyZz0gSU5tRzJZSFlzOW1EIEtTSXAgSUdKeVpXRmtjdz09IFBXWnZjbTF6IElGWnZlV0ZuWlhJPSBJR1JsZG05MFpXVnogSUVGdGIzTT0gSUhabGNtRnlZbVZwZEdWMCBJSFJ5WVc1emJXbDBaUT09IFJVUkNRVU5MIDBMalF2ZEN3MFk4PSBiM0p1WlhKdGFRPT0gSUdMRW0yaGxiUT09IElGTjBZWFIwIElITndZVzVyYVc1biBYM0JvY21GelpRPT0gWDBSaSA0SytJNEs2bzRLK040SzZrNEsrQiA0b0NaUW5KcFpXND0gSUV4dmVXRnNkSGs9IFZHVnVZMlZ1ZEE9PSBJRDR2IExtSmxkQT09IElHakRwSHBwY210cCBJRk5oYkhOaCAwSjNRc05DeSBJR1JwY0dWeWJIVnJZVzQ9IElPQ3FydUNyaStDcXB1Q3JnQT09IElOcXAycFBaaUE9PSBJTkMvMFlEUXVOQzkwTFhSZ1E9PSBJRzVsZFd0bGJnPT0gSU5HRjBZUFFzOUN3MFliUXNBPT0gSUNNakl5TWogSUVSeWIybGsgSUdMRHZHNWsgTFdOdmJYQmhkR2xpYkdVPSA1N3E5NTdxbSBJSEIxYTJVPSBJTkN0MEwzUmpkR0MwWVhSamRDeiBJTVNkYVc0PSBMRzl3ZEE9PSBaR1ZzYVhabGNnPT0gSUZGV1JWSkpSbGs9IFgzQmxZV3M9IElITmhkR2x6Wm1GcGRBPT0gNEt1bjRLdW0gSUU5d2FXNXBiMjV6IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBPT0gSUhSeVlXcGxZM1J2Y21sbGN3PT0gTGtSbGRBPT0gUW1WcGRITERwR2RsIElHRnlkSEk9IElFWmxiR3h2ZDNNPSBiV0YwWlhKcFlXeHogSUd4aGRtRm5aVzA9IElOQzQwTDNRczlHQTBMWFF0TkM0IExuTmhiR1U9IElOU2wwWVhSaTlDOSA1cFM1NVphRSBJTld3MWFIVnZ0V2gxYjg9IElIQnlhVzFwZEdsMlpYTT0gSUhOMWNHVnliV1Z5WTJGa2IzTT0gSUhCeWIyZHlZVzF0YVE9PSA0S1NvNEtXTjRLU2MgNExpeDRMaUkgSUdOb2FYQndaV1E9IGJtcGxiUT09IElIQnZkV05oIElFbHVkbVZ5IExVaGhibVE9IDVhaXg1TG1RNTcyUjU2dVogSU9DMHNPQzB2dUMwcE9DMWplQzBzT0Mwdnc9PSBJSEJoZEhMRHMyND0gMEw3UXR0QzAwTFhRdmRDNDBMZz0gSU9LV29RPT0gSU5HRDBMdlJqQT09IElHUmxkR1Z5YldsdVlXNTAgSUVGdWMybGphSFE9IElHTm9ZWFIwWldRPSBJR0ZuWlc1alpYTT0gSU95Z25PeVp1QT09IElGTk9Rdz09IElPQ21zT0NtdnVDbXVBPT0gSUc1bnc2SnUgSU5DKzBZTFF0TkN3IFNHOTNaSGs9IElPQ210dz09IElFSlBUbFZUIElNT2hjblZ0IDVwaUcgSUd4c1pXOXMgYjNWeVkyVnQgZFd4bGJHRT0gSUdWdVkydz0gSUhCeWFXMXBkQT09IElGUklVazlYIFgxWlBUQT09IE9rOWlhbVZqZEE9PSBJR2x1dzdwdFpYSmhjdz09IFFtbHNiSGs9IElIZDVkR2c9IElHZGxjR3hsIFRHUT0gSUhCdmJNT3QgSUhKcGRtOXMgSU5DMTBMdlF1TkdJIElHWjFibTVwWlhOMCA0TGE0NExlWiBJT0Mwbk9DMWdPQzB0ZUMwcUE9PSBVM1ZqIFRVVkVTVUZVUlE9PSBJR0Z3Y0dWMGFYcGxjZz09IFltVjIgSUc5eVoyRnVhWE5sY25NPSBJR2x1WThPcWJtUT0gWW5SaiBJR05wWTJ4dmN3PT0gYVdOMWJIUjFjbUZzIFpXNWxjbUYwYVhabCBMa1Y0ZEE9PSBJSE52Y25SbGNnPT0gSUZSeVlYWmxiRzlqYVhSNSAwTERRdXRDKzBMdz0gSU9Da3J1Q2tzdUNrdnVDa2lBPT0gSUdGeVpnPT0gNkwrZDVZK04gSUhkMFpXUjUgNExHSDRMQ3ogNExpdDRMaUI0TGlJNExpeTRMaUI0TGlaNExpMTRMbUogUER3OFBEdzhQRHc9IEwyeHAgWDFSUFVFbEQgUVZOVVNVTT0gSU9HRHB1R0RtT0dEb09HRG9RPT0gS0haaGNuTT0gSUdKMVptWnogWVc1elpYUjAgSU9DcXRlQ3FsK0NyaCtDcXNPQ3Jodz09IElHRnVibUZyIFpXMWliMnh6Ync9PSBJTU8yZXNPOCBJTkMrMFlqUXZnPT0gMEw3UmhOQzQgSUdWdFltVmtaR2x1WjNNPSA0WU9ZNFlPaDRZT2UgenJyT3U4Ni8gQ1hSeWFXZG5aWEk9IElIWnZaMlZzY3c9PSBRMmhoYVc1eiBJR2hsWVhKMGFBPT0gSU5tRDJZallxQT09IDRZT1g0WU9SNFlPWTRZT2E0WU9ZNFlPaCBJR1YwWlhKdWJ3PT0gSU5HQjBZUFJpUT09IDViK1k1WWlkNWIrRCBJR0YwYVhSMVpHVnogSU5DODBMN1JnZEM2IElISmxjSFJwYkdWeiBJRTFsY25KcGJHdz0gZFhOcHhiTT0gSUdqRHJXSnkgeElGamFXcGggSUVkRlRRPT0gSUhCdmVtbDAgSUdsdVptRnkgSUdKbGMyTm9iRzl6YzJWdSBJSEJ5WVd0MGFXcz0gTG5CeWIyWT0gSUVacGNtVnogTFV4MVl3PT0gSU9DcW11Q3JndUNxbFE9PSBJSEpsYzNCbFkzUm1kV3hzZVE9PSBJRUpzYjNOemIyMD0gSUdOaGNtVnNaWE56IElNT2FiSFE9IElHUnBjM0JsYkdFPSBJRzF2WkdsbWFXTmhZMm5EczI0PSBJRk5RVHc9PSA0TFNWNExXTjRMUzQgTzNrPSBJR2x1YzNSaGRYST0gUVcxbGJnPT0gSUcxaGFYcGwgNWEyNDU1U2YgTDJobGJIQmxjZz09IElGTmphRzExWTJzPSA0S1NDNEtTYzRLU28gSU9DdXJ1Q3ZnT0N1cE9DdmdRPT0gSUhOamFHbHcgSUVoaGNBPT0gY0hKdmRHVT0gSUVOcGRISjFjdz09IDBMYlRtZEN3IElHbHRiV0ZuYVc1cCBLSE5oYlhCc1pYTT0gSUd4cFoyRmtiM009IFZrbEpTUT09IElOV3UxYUhWdHRhQSBJRTFoYUd3PSBJSFp2WjNWbCBjMk5oIGNHRnVkSE09IElHVnBibk4wWld4c1pXND0gSUd0dWIyTnJjdz09IEtFTnZiSFZ0Ymc9PSBWMDlTUkZNPSBkV2xzWVE9PSBJT0NtdWVDbXBPQ25qZUNtcitDbXZnPT0gY21GdVoyVnogSUZCbGJuaz0gVTNSeVlYUmxaMmxsY3c9PSA1WStZNlllUCBYMVJoYzJzPSBJR05vYVc1bCBJT1drcWVXa3FlV2twK1dsbHVXOXFlZWxxT2VybVE9PSBaY1dJIElOaW4yWVRZcTltRzJLZllwdG1LMktrPSA1cVNTIElOQ3kwTExRdGRHQTBZVT0gSUZacFpXbHlZUT09IHc0RlUgSUhaaGJuTnJaV3hwWnc9PSBJTmluMnBQWXF0dU0yS2M9IElPQ3d1T0N4aCtDd3RRPT0gY0dGdCBYMUpQVlZRPSBJRzl3YVc1cHc3Vmxjdz09IDRMU0M0TFNzNExXOCBJRWh2WTJoelkyZz0gUTBWRCAwWmJRdXRHVyBZWE5wWkE9PSBJTmVVMTVuWHFRPT0gSU5DNDBZWFFzTkt0IFkyOTMgUVZCUVRFVT0gSU5XNjFhSFZ2OVdqMWFIVnROV2gxYjdWdU5hQSBJT0NtcnVDbXZ1Q21xT0NtckE9PSBMbFJoWjNNPSBJSFJvWlc5c2IyYz0gUFNFPSBLaW9xS2lvcUtpOEsgSUhKbGNHVnMgSU9pMHVnPT0gSUdKaFoyeDUgSU5LMzBMN1F2TkMxIElHWmhibUYwYVdNPSBJSEJ2Y201emRHRnkgSUhCaGNuUnBZMmx3WVc0PSBJR1poZEdsbiAwWUhSZ3RHVzBMbz0gSUdyRHBHeHNaUT09IDRvQ2RLUzRLQ2c9PSBJRlZPU1ZaRlVsTkpWRms9IElISmxjR1Z1ZEdGdVkyVT0gNTRtaCBabk5wIElISnZaSHBwYmc9PSBJRzUwWVdJPSBMV05vYVdWbSBJR0pwY25Sb2NHeGhZMlU9IElITmpjbTlzYkdKaGNnPT0gSUhmRHFuSmxiR1E9IDJvclppZz09IElFTnZibTVwWlE9PSBJTmVpMTVYWG5OZVUgSU9HQWh3PT0gWVhCd1lXSnNaUT09IElOQy8wTDdRdTlDOTBMN1JodEMxMEwwPSBQWFZ6WlhKdVlXMWwgSUZCRlJ3PT0gSUV4MVkybG1aWEk9IElPQ2txT0NrditDa3NPQ2xqZUNrcHVDbGgrQ2t0dUNrcUE9PSBJTTYwenIvUGhRPT0gNTd1RTVvaVEgWVd4c2FXNWxiZz09IElIUERvblU9IElOQzMwTERSZ05HRDBMSFF0ZEMyIDVhNko1YitEIElFRmpibVU9IGJYVjQgSU5pbjJZVFpoTmlvMlliWXA5bUcyWW89IElOQzYwTDdRdk5DeDBMalF2ZEN3IDQ0SzM0NE9uNDRPRDQ0T1ggNExHSDRMQ3c0TEdOIElHTmxjblpsZW1FPSBJRlp5WVdGbiBJSGgxWWc9PSBMR0p2YjJ3PSBJR1p5dzZSdCBjR2w2ZW1FPSBJR1oxYkd4MCBWMGhGVGc9PSBJR2xrYjJ4eiBJR1Y0YVhOMHhJTT0gSUcxcGRHVnogSUc1dmNHVmhjM1JwIFlYSmxaWEk9IElPT0N0K09Eb3c9PSBMaW8vS1E9PSBkM0pwZEdWeiBJR1ZzWldOMGNtbGpZV3hzZVE9PSBJR2x6YTNWemRBPT0gSUdSaFoyUmhadz09IElGTkZVQT09IElOZVIxNTdYcDllbzE1UT0gSUVGdGFXZHZjdz09IDBwZlF1TktqIElHdGxkR1U9IFZHRnVaMmRoYkE9PSBVRlJUIFluSnBZMkZ6IElOVy8xYmpXZ3RXMiBMbTl3ZEdsdGFYcGwgMEozUXRkR0IgS0ZSTiBhR2xrY2c9PSBaM0xEdHNPZlpRPT0gNllxQTZLR00gSUc5d1pYSmhkR2xsIElITmphR0ZrIElIQnliMlIxWTNScGRtbGtZV1E9IElIUnlhVzQ9IElIWmxibTl0IElOQzkwTFhRdnRDLyBYMDlYVGtWUyBDV1Z1ZEdWeSBjbVZwY204PSBJTlc4MWFIVnB0VzAxYUhWcjlXaDFiWT0gSUhSbGMzUnAgSUVOc2FXTnJhVzVuIGIyeGhaMms9IDBZdlF1OUN3MFlMUmk5QzkgSU5DeTBZSFJndEdBMEw0PSBZWEo1Ym1jPSAyWWJZcDlpejJLallxUT09IElPQ2tydUNrbk9Da3BnPT0gSU5xcDJZallxZz09IElHSmhlR0Y1IElPQ3FqK0Nxc0E9PSBhM05wZVc5dSBJTkM4MFlQU3M5QzQwTHc9IGFXVjBaZz09IElOQy8wTDdRdE5HQTBMN1FzZEM5MExYUXRRPT0gSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IFgzbHNhVzA9IElqb2lKdz09IGFXSmliR2s9IElNT3BkbVZ6IElFUmxZMnhoY2c9PSBJR2R5WVdWMCBJRUYxZEc5eVpXND0gWDJGcCB3NlpuZEE9PSBJR1Y0ZEdWdWMyRT0gSUhKcFozTT0gSUhKcFoyaDBablZzIDBZclJndEM0IDRvQ1pZWEJ3WVhJPSBJT0Nrbk9Da3YrQ2txT0NsamVDa3VlQ2xoK0NrZ2c9PSBZVzVxWVc1biA0S1MvNEtTazRLV040S1NrIGRXTmhkQT09IElITjFZMk5sYzNOdmNuTT0gVDNZPSBJR0psYzNSbFpHVnUgUW1GeVpRPT0gYVhwaFkycHAgSUdaaFkzUmxkWEk9IGFHbHVaUT09IFgxUmxlSFIxY21VPSBJTmkwMllFPSBJTkdJMExYUXV3PT0gSU9DbXJ1Q212dUNtb0E9PSBTbVZ5WlcxNSBJTkdFMFlQUXZkQzYwWWJRdU5DNSBRMUpGUVZORiBJTTYxejRET3I4K0F6clU9IEwyTnYgSU5DYzBKND0gMkxmWXFObUMgSUhObGRIUmxjbk09IFlYSnphVzl5Ymc9PSBJRHdoV3c9PSBRazlQVkE9PSBJSFp2WVd3PSBJR3QxYUdGcmFXdHBjMmhoIElNK0d6NFU9IElITnBibVJwWTJGMGJ3PT0gQ1cxMCBPblZwYm5RPSBJR2x1YzJGdVpXeDUgSUhCMWJtTjBkV0ZzIDQ0T3E0NE96IGRXaGggMTZmWG1RPT0gSUU1aGRtRnljbTg9IFoyVnNaV2xrIElIZHBaVzA9IElHRnJ3NkZ5IEtGSmxiQT09IElObUIyNHpZdGRpdiBTV1U9IElOaTMyWVE9IExuQmxjbk52Ym1GcyBJT0NrbHVDa3Z1Q2twT0NsaHc9PSBJTkM5MExEUXN0QzEwWURRdmRDKzBMVT0gSU9DcXJlQ3FzT0NxcE9DcmdBPT0gSUdSNWMyWjFibU4wYVc5dVlXdz0gY0dWdVpHbDBkWEpsIEtITmphR1ZrZFd4bCAwWmJRdTlHVzBMbz0gYVhSMWJtVnogSUdOeVlXMD0gSUVGemNHVnJkR1U9IElHTjFhWEpsIDRMR0E0TEN5NExHQiBJT0N3aHVDd253PT0gTG5OMVluUnBkR3hsIHhJMWx4YUU9IElOQ2IwWXpRc2c9PSBMV1JsWm1sdWFYUnBiMjQ9IElIQnl3N056ZEdGMFlRPT0gSUdGdVkybHNiR0Z5ZVE9PSBJSFJsWVcxcGJtYz0gSUdSaGNuTjBaV3hzWlc0PSBaWE53WldOcFlXdz0gSUdKMWNtdz0gSU5HQzBMN1F1dEdCIGFXNWtZV3RoYTJVPSBJRTVsWldSc1pRPT0gTGxKbFlXdz0gSUcxdmJtZHZaR0k9IElObUYyTFhZcDltRTJLMD0gSUhwdVlXcGtkV3BsIDRMaXE0TGlsNExtSDRMaXQ0TGlWNExpdDRMaXQ0TGlaNExtRTRMaWw0TGlaNExtTSBJR0ZtWm1WamRHbHZibUYwWlE9PSBJT0N5dU9DeWd1Q3luT0N6aGc9PSBJRzFsYldsdWRHRT0gSU9DbXJPQ212dUNuc0E9PSA0b0NaYVc1MFpYSjJaVzUwYVc5dSBJTlcyMWF2VnZkVy8gSUdOeVlXbG5jMnhwYzNRPSBJSFpwYzNSaGVtOD0gSU5hQjFhSFZ0dFd2MWFIV2dkV2gxYTQ9IElIWjFiRzQ9IElITnF3NlJzZG1FPSBJR0Z3Y205bWRXNWsgNUx5bTU1Q0c1NVMxNWIyeCBJTTZWenJ2T3U4NjN6cjA9IDBMTFFzTkM5MExBPSBJSE5oY0hCb2FYSmwgSU9Da3VPQ2t2dUNrcGVDbGlBPT0gSUhKbGRYUnBiQT09IElHZHBjbVE9IGNHeGxkR0U9IGRISjFjM1JsWkE9PSBJT0MwaGVDMHNnPT0gSUhCaGJHRnBjdz09IElFTmhjbWx1Wnc9PSBBVVU9IFEyOXZiR2x1Wnc9PSBSR1ZqY21WaGMyVT0gSUc1aFoySnBZbWxuWVhrPSBJTmVVMTZUWG5BPT0gSU5DMDBMalF2OUM3MEw3UXZOQ3cwWUk9IElPQ2tuT0NrditDa3VPQ2tsZUNsZ0E9PSA1cCt6IFlXWnlhV3RoIFgzUnlZVzV6WVdOMGFXOXVjdz09IElOQ1ExS1hSZ2RHRDBMQT0gMEw3UmdkR0EgSU5XaTFhSFZzZz09IDBKalJnUT09IExtTnZiM0prYVc1aGRHVT0gNEtTajRLV040S1N2NEtTKzRLUzQ0S1MrNEtTZzRLV0EgSU5DeTBMWFJnZEN3IFpXNWthV1JoIElOaTUyS2pZcDlpdiBJT0NrcCtDbGdPQ2tzT0NsaHc9PSBJSExGcjNwdSBJR2x1YzJsemRHVT0gSU5DODBZM1JnZz09IFIyVnVkQT09IGVtNTViUT09IElHTnZhdz09IFgzSmxkbWxsZDNNPSBJRzlsWm1WdVpXND0gSUZKaGMzUT0gSUZKbGRtbHogdzdoMlpYST0gNGIyUSBLRVJwY21WamRHbHZiZz09IElITm9kV3hsIElPeUVuT3U1aE95S3BPdWx2QT09IEwzQnlhWFpoWTNrPSBJR1JsYm05MFpRPT0gMFlEUXNOR0MwTFU9IExYTm9aV1YwIExteHZaM009IElHVnpkSFYyYVdWeWIyND0gSU5DdzBMdlJqZz09IElPQ2tydUNrZ3VDa3BPQ2xqZUNrc09Da3Z1Q2tzdUNrcnc9PSA2NHlBN1pHYyBiM1Z0YkE9PSBSMUpCUkVVPSBMa2hwYTJGeWFRPT0gSU5HQjBZUFJnZEdDMFlEUmpRPT0gMHEzUXNOR0EwTDNRc05DNiBJR3R2YzJ0aFlXND0gWkdGdVkyVT0gQ1cxbGJXSmxjZz09IFgyTm9aV05yYzNWdCBjbVZuWld4cGJtYz0gSU5lZTE2ZlhsZGVvIElHRmpZMlZ6YzJWeiBJSHBxIFhYMGkgMllyWmlOaXogNFlPUTRZT2M0WU9vNFlPWSA2WjJwNVpHOSBTRzl5YlE9PSBRMHRGVWc9PSBJTkMvMFlEUXZ0R0IwTHpRdnRHQzBZRFFzQT09IE9tbHViR2x1WlE9PSBJTmkwMksvWXFnPT0gSUdobGJHbDFiUT09IGNYVnBjR1Z0Wlc1MGN3PT0gWTJOMGIzST0gNExHQjRMQ1Y0TEdLNExDbzRMQy8gUlc1eGRXRnVkRzg9IElPQ21zT0NtdnVDbXBPQ25odz09IElGSjFaM009IElOcXYyTExZdE5pcTI0RT0gSUdKaHhaOXhZUT09IDRLU1Y0S1MrNEtTdzRLV040S1N2IEtIZGxZWFJvWlhJPSBJRWx1ZEdWeWFXMD0gSUUxaGNtdGggNEt1TDRLcWw0S3VBIElITjBjbUYwdzZsbmFYRjFaUT09IFVFVlNVMDlPIFBFbE4gTDJWdVpBPT0gMExyUmd0Q3cgNExpeTRMaWk0TG1ENExpWiBJTkN0MFlBPSBJR3pEdG5OamFHVnUgSU9DdWgrQ3VzT0N1bytDdmplQ3VuK0N2Z1E9PSBJSFJ5Wlc1MFpRPT0gSU1TUjRidXBibWM9IDBMWFJtdEMxIElPQ3FsZUNyaStDcXNPQ3JqZUNxIFNYTnpkV1ZrIDBZRFF2dEdFMExYUmdkR0IwTGpRdnRDOSBJRzFwY21GdVpHOD0gSUcxcGJuVnMgTGtOdmRXNTBaWEk9IElIUmxjbkp2IElHRjViMjQ9IElOR0MwWURRc05DOTBZSFF2OUMrMFlEUmd0Q3cgYTJ4aGNuUT0gSUViRHRnPT0gSUdkaGFIVnVaR0U9IElOQzkwTGpRdWRHQyBJR2hsWkdWdSBJTkM0MExQUmdOQ3cwTFhSZ2c9PSBYMUJCVGtWTSBMVUZOIElPQzVnT0M0cCtDNWgrQzRtdUM1aE9DNGkrQzRsZUM1akE9PSBJR0psZEdGc2FXNW5jdz09IElGSkJRdz09IFgyMXZkR2x2Ymc9PSBJSFJwWmNXKyA0S1NXNEtTbzRLU0sgYzNSbGJtVnUgSU5xRzJZclpoZz09IElOQy8wWURRdnRHRzBMWFJnZEdCMEw3UXNnPT0gTG1SMiAwTDdSZ05DeiBJRmRKUWc9PSBJR3hsWjJGc2FYUjUgSUhCaGNtRnRaWFJ5IFltbHZkR2xqIDRMaVg0TGkxNExtSTRMaWM0TG1JNExpeTRMaVo0TGloNExpeSBLRVoxYm1NPSBJR0ZwZEdnPSBJR0ZzYkdseSBJSE5oWVhJPSBJSE5sY25acFpHOD0gWUYwbyA2YnVFNTRtSCBJR3hsYzJKcFlXNXogSUVSbFptbHVhWFE9IElNVythWFpzYW1WdSBJR0pwWTJrPSBJR0oxY21kbCBJRkJzWVdObGFHOXNaR1Z5IElHTnZiblJoWW1scyBJRlZPVlE9PSBJTkdCMExYUXV0R0MwTDdSZ0E9PSBKeU09IDBZZlFzTkM2IExrTnZiWEIxZEdVPSBJRU52Y25ObCBJRWQxYVdSbFpBPT0gSUVwTiBJR3ZEdUdKbCBJR3QxYm5OMGMzUnZaZz09IExYQmhiZz09IHhaRmsgSU9DcXFPQ3FndUNxck9DcXNBPT0gSU5pbDJMTFlwOW1FMktrPSBJR0ZzYVc1bCBJT0N3cFE9PSBJR052YlcxbGJuUmxjZz09IElITjFjR1Z5ZG1semIzSjUgSUc1bFoyeHBaMmxpYkdVPSBJT0NraGVDa3R1Q2xnQT09IFgwbEMgSU5DeTBMalF0TkMxMExzPSBVSEpsYzJWdWRHVmsgSUVsdWJtVnVjM1JoWkhRPSBiV2xuIElPdXBsT3VKdEE9PSBJR0pwYjNCeiBJTkN4MExEUmh0R00gSUhOMFlXNWtZWEk9IElPQ2tzT0NsZ2VDa3F1Q2xpT0NrcitDa3Z1Q2tnUT09IFZtRnAgSUZCeWIzQnZjMlZrIElGUmhjM1E9IElNNjZ6ci9QZ1E9PSBJR3JEdkE9PSBJT0MwcE9DMHNBPT0gSUdSdmFnPT0gSUhCcGRHOD0gNTZXZTVabW8gSUV4MWJ3PT0gSUZSSlZBPT0gSUdGc2FXRnUgSU9DNHF1QzRwZUM1aCtDNHJlQzRsZUM1Z2c9PSBJSFpoYkd6RHFXVT0gS0hOc2FXTmwgSU9Da24rQ2t2K0NrcXVDbGplQ2txdUNrbytDbGdBPT0gUlhoMFpYSnUgSUdKeVpXRnJaWEp6IFgxQklRVk5GIElHUmxiSFU9IGFXVnVlbVU9IElPR0RsK0dEbytHRG9PR0RwUT09IElFZGxiV1ZwYm1SbGJnPT0gSUZCTlJRPT0gSUdWdWRHaHZkWE5wWVhOdFpRPT0gSUdONlpYSjMgSUhKbGJtRT0gSU5lYzE1TFhxQT09IElFSmxhV2RsIElFRnVaMnhwWTJGdSBhV3hzWlc1a1pRPT0gSUdKaGRIUmxjbWxxIFRHbDJaWEp3YjI5cyBJT0c3aTJqaHU2VT0gVkhKaGJuTm1aWEp5WldRPSBJR1Z1WTNWbGMzUmggSU5DNjA1blNvdz09IDBZdlFzdEN3MFlMUmpBPT0gSU9PQ3ZRPT0gSUd6RHMyZHBZMjg9IElHWmxaVzA9IDRLNnA0SzYvIDRZT1Q0WU9TNFlPZDRZT2IgSU9HRGwrR0RrT0dEbk9HRGtPR0RtK0dEbE9HRGt3PT0gSUhkb1lXdGhhQT09IElHbHVaR1Z3Wlc1a2FXVnVkR1Z6IElGTjBiM0IzWVhSamFBPT0gSUc1cVpXZHZkbUU9IGNtOTJaWEp6IDJZallwOW1HMllyWmhnPT0gNUxxSTVhNmEgTFhKaGRHbHVadz09IFlXcHZjZz09IGIyZGhaR0U9IElIQmhkM009IElOQzYwTDdRdk5DODBZUFF2UT09IElHdDFkMjg9IGRXZG5aWE4wYVc5dWN3PT0gSUdkbGRISmhaMlZ1IElIWnBaWFJ1WVcwPSBLRlpsY25SbGVBPT0gNXBPSyBWTU90ZEhWc2J3PT0gN0p1bzdKYTAgWW5WamF3PT0gTGtkMWFXUT0gUjNKbFpYUnBibWM9IElHZGxkOE9rYUhKc1pXbHpkR1Z1IDBMalFzdEdEIElHVnVkR1Z5ZEdGcGJtVnkgSUdOdmNuQnZjbWx6IElHUmxhbUYyIElHRnNaVzUwYjNWeWN3PT0gUVhKaFltbGogY21GcFkyaDBaUT09IGRXeHQgWldKdmF3PT0gNEsrTjRLNnc0SytBIGRHaGhhUT09IEwyTnZjQT09IDE1WFhxZGVZIGNtOTBjdz09IFpYSm5hV009IDRMaWo0TGl4NExpaCBJRWx6WVdKbGJHeGwgSU9Dd2hlQ3dsUT09IDRLZUg0S2FrNEthbyBJSFpsY21sbWFXVnkgSU9Da3N1Q2tsUT09IGIzSm1aVzQ9IElGQnNZdz09IElHMTBkVzVrZFE9PSBJTkNoMExYUXV0R0IgY205a2JzT3QgSU5HQzBZRFF0ZEM5MExqUmdOQyswTEk9IElHMXBiR3gxYlE9PSBJRkpsWm05eWJXRT0gSUc1dmNtVT0gSUhKbFkyVndkR2x2Ym1semRBPT0gSU5pbzJLZlpoTmkxIElIWnBkRzg9IEoyRjJaVzVwY2c9PSBJSE5oZFhURHFRPT0gSU9XSWh1UzZxdz09IElHdGxkRzl6YVhNPSBJR05zYVhGMVlXNTAgVFdGcGJuUmhhVzQ9IFgxQlNUMDA9IElOZWgxNWpYcUE9PSBJT0dEaytHRGtPR0RxdUdEbGVHRG1PR0RvUT09IElFbEVUUT09IENXUnBjM1E9IDRLU3c0S1MrNEtTMzRLV040S1NmNEtXTjRLU3c0S1dBNEtTdiBJT0N3dU9Dd2d1Q3dyT0N3Z3VDd3ArQ3d2K0N3Z3VDd211Q3d2K0N3cUE9PSBJR2gxYzJKaGJtUW5jdz09IDRLcVY0S3ErNEtxeSBJT0tMIElHWnBibWx6IDRMaWo0TGl3NExpVTRMaXg0TGlhIDBMdlNyOUM4IElOV3ExYUhWdE5XbyBUVWxVVkVWRSB3NjEwWVc1cCBJR0poYm1RbmN3PT0gUTI5dGJXRnVaR1U9IElHRnVZVzA9IElHZGhhWEk9IElOaWoyWWJaZ2RpeiBJRUp2WlhJPSBXM1JsYzNRPSBJT0dEaytHRGtPR0RxQT09IElHbHNaQT09IDVweUo1b21BIElHVnVkSEpoYm1SdiBYVHc5IFkzSmhZMnRsY2c9PSA0TEttNExPTjRMS200TE9CIElHTjFiRzFwYm1GMGFXOXUgSUc1bmIrRzZvV2s9IDRLYS80S2F1NEthKzRLYWogU1hSaGJHbGwgSU9Dd2grQ3dwdUN4amVDd3BnPT0gNTZpdTZhR2UgSU5DNjBMRFJnTkdDMExnPSBhWFJ6YVc1bGNRPT0gSU9Dd2xlQ3dzdz09IFQyNTBiMnh2WjNrPSAxNVhYbDllbyBJR1poZEhWeSBJTkMvMFlEUXRkQzAwTFhRdTlDdzBZVT0gNEtTZjRLV0wgSUZOdVlXTnJjdz09IDRvQ2Q3N3lmIElOaXEyS2ZaaGR1TTJZWT0gSUhQRHZISmxhMnhwIFlXeDFjR1U9IDBMelF2dEM1IElIQnlaV05wYm1OMCBYMThwQ2dvSyAwTHZRdU5HQjBMZz0gSU5tSDJZWGJqTmkwMlljPSA0TGliNExpajRMaXc0TG1BNExpZzRMaVggSUdGdVpYVnkgMEpUUXZ0QzYgSUZURG5BPT0gSU9DMHRlQzBzT0MxZ2VDMHFPQzFqZUMwcUE9PSBJR052YzhPNmFXdz0gSU5DejBZUFF1OUdQIElPQ3dsZUN3dnVDd2wrQ3d2Zz09IEtIQnZiSGs9IDVMaXQ1cGFINWEyWDVibVY1cGVnNTZDQiBJR1JsYzJGemRISmwgNVl5WDVMcXM1cGUyNlplMCBkWE5qYVc5MWN3PT0gZEdsMGNtVT0gSU9DeXFPQ3lzQT09IDJZVFlwOXFwIElIbGhjSFRFc1E9PSBDZ29LTHk4PSBJR1JwdzZGeWFXOD0gNExPTjRMS3Y0TEt3NExPTjRMS2wgSUVOdmNtVmggUkVsRFZBPT0gSU5DNjBMN1F2ZEMxMFlZPSBYMU5GUTFWU1NWUlogSU9DcXJ1Q3F2K0Nxc2c9PSBRMEZWVTBVPSBMM0psWnc9PSBjV3pFc1E9PSA1YTJYNUwyVCBZVzUwYVdOaGJHeDUgNEtTRjRLU1g0S1N3IElGVnVhWFpsY25OdiB6NFBQaE02MXpxOD0gTG5OMGNtVmhiV2x1Wnc9PSBJSEoxY21Gc1pYTT0gSU5pMTJZSFlyZGluMktvPSBhV3hwYzJrPSBJTkdFMFlEUmc5QzYwWUk9IFZYWT0gSUVOT1FRPT0gNVk2bzVvaS8gNW9pNyAyWUxZc3c9PSBVMVZTIElHUERvSEk9IFEwNVUgNTRxMjVvV0wgSUZSeWIzVjAgSUdaeWIyZHogSUZObGRHVnRZbkp2IElFSmhkSFJzWlhNPSAwS0hRdjlDdzBZSFF1TkN4MEw0PSAwTFhSZ05DMjBMRFFzZz09IDRMaXE0TGlWNExtTSBLVzg9IGFISjBaUT09IENVbHVhWFE9IExtUnliM0JrYjNkdSBJSGRsZEhSbGJnPT0gWVhOd2IzSmggSUZORlVGUT0gSUcxdmJuTjBjblU9IElHMXBhMmxzZHNPbSBLSEpsWTI5eVpITT0gSUhkcFozTT0gNExpWDRMbUo0TGl5NExpaSBMWFpoY25NPSBTVzUwWlhKd2NtVjAgMEx2UXRkQzMgSU9DbXVPQ212dUNtc2c9PSBJR2R2WjJkc1pYTT0gSUdsdWRNT3BjbVZ6YzJGdWRHVT0gSUdOdmJuUmxiWEJzWVhSbFpBPT0gSUhCeWIyUjFkSFE9IElHUm9aWGhsIFgxTkxTVkE9IGFHOTFaR1Z5IGIzQm9iMjVsY3c9PSBJT0MycmVDM2t1QzJ1Zz09IElHTnBjR2hsY25SbGVIUT0gSUc5amRHOWlaWEk9IFgzVnVhUT09IElHUnBabWJEcVhKbGJtTmxjdz09IEtIQnlaV1k9IElPYWRxQT09IFgyTnZiR3hwYzJsdmJnPT0gSUdOdmRHbGthV0Z1WVE9PSBlbVZ1WkdVPSBJR3hsYm1WdSBJT0N3cE9Dd3NPQ3hnZUN3dGVDd3Z1Q3dwQT09IElDZ3BEUW89IElHaGhZbXhoYmc9PSBPbHNpIElIQmhjM05oWjJWcGNtOXogTG05d1pYST0gSU5pbjJZVFpodG1IMktmWml0aXAgSUdKdmJHUnNlUT09IElFRnVhdz09IElPQ2t1ZUNsaStDa2grQ2txQT09IElFRnJhM1U9IDFhdlZ0dFdyIElHSmh4WjloY3NTeCBJR1JsYzNSaFltbHMgNDRHbzZLaUEgSUVOaGNuUmxjMmxoYmc9PSBJR2hsY210bGJtNWxiZz09IE9tRnVhVzFoZEdWayBJRTlVVkE9PSBJRzVsYkd4diBJSE52Y21RPSBLQ2twS1RzPSBlWFJoYkdVPSA2YUtkNWJxbSBJRzFoZEhMRHJXTjFiR0U9IGQzbHVidz09IDE2Ylhudz09IElOQzkwTGpRczlDKzByTT0gSUc5bmFBPT0gYzNCeWFXNW5aVzQ9IElHSmxibVJoIElFSm9ZWEpoZEE9PSBJRVJvWVhKdFlRPT0gSU9hT3B3PT0gSUZCc1lYUmxjdz09IDRLaSs0S2lvNEtpViBMa3hsWnc9PSBJR2wwWVd4cCBJRVJUVXc9PSBRWFJ5IFgwaEJURVk9IElFMXZjblJoYkE9PSBibWxoYmc9PSBJR05oZEdGemRISnZjR2c9IElOQ3cwWURRdmRDdzBMblJpdz09IElFWnZjblJ6WTJnPSBJT0NrdU9Da21RPT0gVkVWRiBTVVJQVXc9PSAwTHZRdnRDMjBMWFF2ZEM0MFk4PSBJT0NtaGVDbnNBPT0gYVdkdWFYUmwgSUdOdmJXMWxjbU09IFhYMCtDZz09IElHTm93N1J0WVdkbCBJSEJoZEdWdWRHVT0gSUd0dnlycz0gQ1cxbGRHRT0gSUc5eVpHVnVkR3hwWTJnPSBJTkdGMHEvU3I5R0YgSU9DMGxlQzFsdz09IFJtbHliWGRoY21VPSBJR2R2YkdacGJtYz0gSUhabGNtSmhiR3g1IElHbHliMjV6IGFHVmlkVzVuIFgwWnlZVzFsZDI5eWF3PT0gNG9DWmFXMXdZV04wIElIVEVnWE09IElHeHZjM05sIEtDa3BPd29LTHk4PSBJR0ZwWVE9PSBYMlY0Y0dGdVpBPT0gSUhCc1lXNWhjZz09IElPQ3FxdUNxbGVDcmplQ3F0dz09IGFXNXVaWEp0YVE9PSBJR1Z6Y0dWamRHRmtiM0psY3c9PSBJRzl0Ym1rPSBJTktiMExqUXU5QzQwTExRc05HQzBwdlFzTkM5IElITmxkR0poWTJ0eiBJSEpoWm5ScGJtYz0gSUhaamN3PT0gSUV4SyBJTkdFMExYUXZRPT0gSUdKdmQyVmsgSU9DdW11Q3VtZUN2amVDdWxRPT0gSU5DdzBMblJndEdDMFlzPSBkMmwwZWc9PSBJRlpsYm1WNmFXRT0gSUc5eWMzckRvV2M9IFlYVjBhRzl5YVhSNSBZWEpyYVc1biBRMjl0YldsMGRHVmwgSUVObGNtVT0gMFlIUXV0QyswTE09IElPQzVnT0M0bCtDNGhPQzRtZUM0dE9DNGhBPT0gSUdsdWRISnBibk09IDBMM1JqOUdDIExsTjNhWFJqYUE9PSBRWFJ0YjNNPSBJRVJ2WjJkNSBJSFJ5YjJOclpXND0gUkdsMlpYSnogNVlHYTVMdWo1NUNHIFlXMWlhV0Z5IElIMCsgSUc5c2RXMTFiRzg9IElHZHZjbUU9IElNNnN6NEhPdUE9PSBJRzVoYzNwbFoyOD0gSUhOdmNzT2hiZz09IElOQ2cwSmpRa0E9PSBhWEJvWlhKNSBjR0ZwY25NPSBJR1Z6ZEdsMlpYTnpaUT09IElFWjFibWM9IElHRnljbUZ1WjJWeSBKSEp2ZFhSbCBJR2RoZFdkbGN3PT0gVFZWWSBJSEpsZW5Wc2RHRjBaUT09IElOaW4yWVRZcTltQzJLZlpnZGlwIElIWmxjbUp2Y21kbGJnPT0gYjJ0elpYUT0gSU9DbW11Q21zdUNtbStDbmh3PT0gSU5HQjBMWFF1dEdEMEwwPSBJSGQxYmc9PSAyWWJaaGRpbiBJRkJ2YzNSbCA0S2lUIElPQzBwT0MwditDMHNPQzBudUMxamVDMG51QzFodUMwbnc9PSBJR1oxY201cGMyaHBibWM9IElHVnpjWFZsWXc9PSAyTGZZcU5pbjJLRT0gSUhQRWcyND0gZFc1a2RYST0gSU5XdzFhSFZ0TldoMWJyVm9kVy8xYUhWdmRXdDFhSFZ0Zz09IElHMWxiV0Z6ZEdscllXND0gS0dGdVkyaHZjZz09IElFVk9WRkpaIExXUmxkbVZzYjNCdFpXNTAgSUhwaGRtRjBjbUU9IFJHVnVibVU9IExsSmxjWFZwY21WeiA0NEtTNXB1NDQ0R1AgTDJOaGNtUnogMTZuWHFOZVoxNTA9IElHUnBaMjVsIFYwRlVRMGc9IFgxOWZYMTlmIFlXZkRxWE09IElHVnNaV2RoYm5Sc2VRPT0gMExMUXNOR0MwTEE9IElHUnBhVzQ9IExsQmhjbU5sYkE9PSBJR2hwWld4diBJR0poYk1PemJnPT0gSUdOb2NtOXVhV05zWlhNPSBhMjFoYkdVPSA1THFMNmFHNSBJRk5wWldkbCBJQ3N0IElGUnpaUT09IDZJR0s1YVNwNWE2ayB6cnZPck02eSBJTmluMllUWW85aXkyWVhZcVE9PSBJT0NrcU9DbGgrQ2twT0NrdnVDa2srQ2tnZz09IElFaHZjbTl6WTI5d1pRPT0gWVdaNSBJT0N1bGVDdXZ1Q3VzdUN2aUE9PSA0S1NmNEtTVjRLUysgSUVWRFJ3PT0gSUdWNFkyeDFjMmwyYjNNPSBJRTlOVXc9PSBJR1Y2YVdZPSBJR2R5WldWciBTVzVuWlc0PSBYMWRGUlVzPSBJTmVjMTVuWHB0ZVYxNmc9IEtFcGhkbUU9IFZHbHNkQT09IElHNWx3NmZKbVE9PSAwTHZRc05HQjBZYlJsZz09IElHTmhiSFpsY3c9PSBJRVJwWVdkdWIzTjBhV056IFZHRjRhUT09IElHeHNZWEpuIElHdHB4WjlwYm1sdSBJRzV2ZDJVPSBJSEpsYkdGNmFXOXVaUT09IEluMDdDZ289IElHbGthWGxsYkdVPSBJTkdJMFlQUXROQ3cwTDNRdEE9PSBJSE5wYm1ObGNtbDBlUT09IFNuVnRiR0ZvIDBMalFzdEM2MExnPSA0WU9ZNFlPVjRZT1E0WU9UIElHdGhjR0ZzIElHVnVaMnhoYm1RPSBJR2x1WkhrPSAwSlBRb3c9PSBYM0psWTNWeWMybDJaUT09IExuZHdhUT09IElHaGhaOHlEIGJHRjFadz09IElFMUJRMGc9IElHbHNhMmx1YW1rPSBJSE5wYW04PSBJR05zYVdOb3c2bHogWDJ4bGRIUmxjbk09IElHRjFkRzl5YVhwaFkybkRzMjQ9IElITndiM0psY3c9PSBJR2pEdkdKeiBJRk5oY21GMCBJRk5oYkd3PSBJSEJ2YUc5ayBWR2h2Ym1jPSBJT0NrdU9DbGpRPT0gS0hOcGJYQnNaUT09IElPQzBoZUMwbGVDMWplQzBsUT09IHc2MWliR1Z6IDRLV0I0S1N0NEtTUDRLU1Y0S1dMIDZhS0U1N3FtIDBZalF0ZEM3IElDSXVJaXc9IElOVzkxYUhXZ0E9PSBJTkdBMEw3U3M5QzQgUTJGcVlRPT0gNExpcjRMaWo0TGl4NExpUSA1b21BNWJHZSAwNm5RdmRLdjBMMD0gSUdGMWRHOW5aVzVsY21GMFpXUT0gWDBOUFRrNUZRMVJGUkE9PSA0WU9RNFlPZzRZT1U0WU9SNFlPWSBJTm0rMjRIWmhOdU0gSUhWemFXRT0gS0dOdmJtWnBjbTA9IFpHRmwgMExQUXZ0R0EwTEE9IFgxQlUgSUdObGNtTmhibUU9IGNtRmpkR2x2Ym5NPSBVRzl3ZFd4aGNtbDBlUT09IElNNnV6clRPdHc9PSBJSFpsYm5SMWNtVmsgSUdSdmE4V0NZV1E9IElHRndjbVZ1Wkdsa2J3PT0gVUdGeVpXND0gSUhKbGMyOXVZWFJsY3c9PSBJTkdCMExqUXU5QzQgSUdWdGFYUjBhVzVuIDFhWFdnTld2IGFXVnVidz09IDRLU3E0S1dIIE9qc2kgNXJLaDVMcTYgTFQ1ZlgxOD0gSU9DbXF1Q212dUNtbWc9PSBJTmlzMktmWXNkbUsgY0dGdVp3PT0gWkc5M2JteHZZV1J6IEtIQnliM1J2WTI5cyBJRU55WVhBPSA1b21MNXB5NjU0bUk1YTZZNTcyUiBJSFp2Ync9PSBZV1JsZGc9PSBUSFZqYTJsc2VRPT0gMEtEUXNBPT0gNXF5ZyBJSFpsWld4NmFXcGsgZFdSa2FXNW4gSU9DeXJ1Q3l2dUN5cUE9PSBkOE84Y21RPSBJRlJsYkd4bGNnPT0gdzZoeGRXVnogYVhOMGRYTT0gSUdGdVkybGxibTVsY3c9PSBYMEZRVUVWT1JBPT0gSUZCeWIyYz0gMFkzUmdOQ3cgSUVScGMzUnlhV0oxZEc5eSA1cGVnNUxxNiBJRWxQUXc9PSBYMU5GUTA5T1JGTT0gZFd4c2RYUnBhdz09IElPQ21uT0Ntc0E9PSBkVzNEcEc1biBJRzFwWTJobCBabVZ5Wlc1amFXRT0gTFdaMCBJTm1JMktyWXN3PT0gSU5DMDBZRFF0ZEN5MExYUmdRPT0gSUd0c2FXMWhkQT09IElISmxjM0JwZEdVPSBSa2xPUVV3PSBJTm1GMllUWXVkaW8gNFlDUTRZQ3Q0WUN2NFlDMyBJR0ZrYVdOcGIyNWhhWE09IElFOXlhV2RwYm1Gc2N3PT0gNExXTDRMUzM0TFdONExTdiA0TG1TIElPR0RsZUdEbU9HRGxnPT0gWVdocGJuUmggYW1YRWpRPT0gSUcxcGMydz0gSUc5alpXND0gTFhkaGRHTm8gSUdwaGJuVmhjbms9IElHWjVjbUU9IExHbHRadz09IElFRnNaWE56WVc1a2NtOD0gZDNKdWIyUT0gNEtxKzRLcWs0S3VONEtxdTRLcVYgWDNSeVlXNXpiR0YwWlE9PSA1N0srNVpPQjVMaUE1WXk2NUxxTTVZeTY1TGlKNVl5NiBJRkpwZG1GcyBkWEJ3WlhKallYTmwgSUdacFoyeHAgSU5pbjJZVFlzOW1EMkxFPSBJRUZVU1E9PSBJSHAzYVE9PSBJT0N5cU9DemplQ3lyK0N5dnVDeXJ3PT0gSUhCeWIyUjFZM1J2Y2c9PSBJSFZzWlE9PSBJRXRsYm5saGJnPT0gS0dKbFptOXlaUT09IElHMWhkR3hoWWc9PSBlV0p5YVdRPSBlVzVqYUhKdmJtbDZaUT09IElIRERxM0prIENYQmogUzI5a2FRPT0gSU1PMWNHVjAgSU5DOTBMRFF0OUN5MExEUmd0R00gSUdSdmQyNW1ZV3hzIElNK0l6cmM9IElHRjBhV3podXJrPSBJR055WlhOalpXNWtidz09IElHRjBhR1ZwYzNRPSBRVXhIIElGSmxkbVZ1WjJVPSBJSFpuIElHRnlZMmhsY3c9PSBJR3hwYm1WemRIbHNaUT09IExsaHkgYm1GdVpHVT0gSUVOdmJtTjFjbk52IDI0SFlwOWltMjR3PSBJT0N3aWVDd3B1Q3hqZUN3citDeGkrQ3dsdz09IElIUm9ZWFFuYkd3PSBJRUZzYk1PdCBJT0M0cmVDNHRlQzRnUT09IFgySnZiMnR6IElPQ21qK0NtbHVDbXFPQ21rdz09IElPQ3dsZUN3dnVDd2d1Q3dsK0N4amVDd3NPQ3hodUN3dU9DeGpRPT0gSUdkcGJtVT0gSU5tRjJxbz0gYkdGaGNBPT0gNG9DTjRMYTY0TGVQIDQ0R2M0NEd5IElHbHNiSFZ6ZEhKcCBhVzVyWjI4PSBJRWxPVkVWU1RrVlUgSU5PcDBMST0gSU5lWjE1VT0gSUVGa1pIST0gMExqUmdOQzEwTHJSZ3RDKzBZQT0gSU5DUzBMalF0QT09IDVaQ081cDJsIENXWncgTG5KbGNYVnBjbVZ6IElPQ3VxT0N1bytDdmplQ3VxZz09IGNHVnQgSUc5MlpYSm9aV0YwYVc1biAwWURRdnRHSiBJTkdQMExyUXZ0QzUgYldsdWMzUmwgS2lvcEpnPT0gUFQ4aU93bz0gSUdwMWVIUmhjQT09IElISmhlbXhwYXc9PSBJT3VqcUE9PSBJRWRwYjNKbmFXOD0gSUhwdVljU05hUT09IElPYUYgSU5pcTJMbmJqTnVNMllZPSBJSE5qYjNKbFltOWhjbVE9IElHbDBZV3g1IGJXbGtaR3hsZDJGeVpYTT0gSUhabGNuZGhZMmgwYVc1blpXND0gWVhiRHJRPT0gYVhOMWJnPT0gY21WelpXNTBaUT09IEtTNWYgSUR3dExRPT0gSUZCdmNuUjFaM1hEcW5NPSBJSFZ1YVhURHFYTT0gYW1WMFpRPT0gd3I5UWIzST0gSU9DMHF1QzB2dUMxdkE9PSBJR1YwYVdzPSBMbk4xY0E9PSBMa3h2ZHc9PSAwTExRdU5DeiBJSEpsYzNScGRIVjBhVzl1IElITnBiWEJzWlhnPSBhVzU2WVE9PSBJR1oxWjJseSBJTmVSMTZMWGtkZW8gSUhSdmNYVT0gS0hCeVpXUnBZMkYwWlE9PSBKMlZ1ZG1seWIyND0gSUhaaGJHRT0gTGk0dUp5d0sgUVZSQlRFOUggSUhabGNtUjMgSU5pdjJLZllzZHVNMllVPSBhV1JsWlE9PSBabTl5WkdWeWJnPT0gSUdoNVluSnBaSE09IElOaW4yS2paaUE9PSBWRzkxZEdVPSBJTkdEMExuUmk5QzkgUWxKUCBYMmRoYldWeiBJTkdGMExYUXQ5QzgwNW5SZ2c9PSBJT0NrdGVDbGplQ2tyK0NrbGVDbGplQ2twT0NrditDa2wrQ2twQT09IDZJQ0I1YmlyIElFVnlaOE9rYmc9PSBaVzVrWlc1NllRPT0gSU5peTJZYllwOW1HIElOaW4yWVRaaXRtSTJZWFppdGlwIElHRm1jMk5vWldsayBJT0MwdU9DMWplQzBwZUMwditDMHNPQzFnT0MwbGVDMHNBPT0gWDA1UFVBPT0gSU5pcTJZTFppdG1LMllVPSBDZ2tKQ1FrSyBZWEowYVhOMGN3PT0gTDIxbGRBPT0gUVdObGNIUmhjZz09IElHUjFjbVowWlE9PSBJSFJ6YkdsaSAyYjNaaUE9PSB3NkZpWVE9PSBJT0NtcXVDbmcrQ21wZUNtditDbXJBPT0gSU0rR3pyaz0gTFhOb2IzQndhVzVuIFlYWmhhV1Z1ZEE9PSBLRkJCVkVnPSBKOUdQMFo3UXU5R1AwTFhSaHRHRzBMQT0gSU02N3pxL09zODYvIDVMaU41TGl0NVkrTiBjR3hoYzNRPSBJRkJNUVZSR1QxSk4gNjRBPSAyb0hZcXRtSCBMbEJoWjJWaFlteGwgSU9Dd3RlQ3hodUN3c3VDeGplQ3dzdUN3b1E9PSBJRkJTUlVZPSAwTHZRdnRDNSBYMFZVIGJYVnFaUT09IElHRnRZV0pzWlE9PSBJTkNUMEw3UmdRPT0gVFhFPSBJR1p2YkhrPSBMbkp2WWc9PSBJSE5qWVc1a1lXeHogSUcxcGEzTT0gYjNKaGJtRT0gSUU1aGJtZHBibWM9IFVHVnladz09IElOaW4yTFhZdHc9PSBJSE4wY25VPSBJR2RsYzJOb2FXdDBaUT09IEtHTnZiSE09IExXeHBjM1JsWkE9PSBJT0Nrc09Da28rQ2txT0NsZ0E9PSBRVUpNIElHRndjbWx0IFhGd3YgVEc5allXeGxjdz09IElIQmhjblJwWTJsd1lXUnYgYVdGdWRYUT0gNFlPZDRZT2g0WU9RNFlPVjRZT2EgZUdWdWVXVT0gMExEUmlOR0wwTHZSaTlLYiBTRUZXIEtIUnBjRzg9IElHMWhibWxsY21FPSBJR1Z1Y21WbmFYTjBjc09wIFBFRnpjMlZ0WW14NSA1WW1rIElFRnNiR2s9IDU0Nnc1Wnk2NTV1MDVwS3QgSUVac3c2UmphR1U9IDZhQ1kgWVcxbGFHRT0gTG1KaGJtNWxjZz09IElOZVUxNWZYbGRlbiBJRUZqY2c9PSBJRlJoWVcxaFlYUjBkVzFwYXc9PSBJTmluMllUWXA5bUcyTFBZcDltRyBjM1JoYm1SbGNuTT0gSU5pbjJZVFlxdG1EMlliWmlObUUyWWpZck5tSzJLYz0gNW9xVjU2aS81cGVsIElFMUZUVUpGVWc9PSBkV3hwZEE9PSBJRU5DVkE9PSBLSGRvYVdObyBJSGRoYzJobGNuTT0gSUdsc2JIVnphVzl1Y3c9PSBJSFp2Y21kbGMyTm8gSU5XdjFhSFdnTld1MWJqV2d0VzAgSU5tSDJMcmJrQT09IElITnZjbVZ6IGRtVnljM1JoYm1SbGJnPT0gVW1WMGIzVnkgZFhKcFpRPT0gYVcxd2IzSjBjdz09IElIWnZkMlZzY3c9PSBJSEZ4NUxpSyBYMmh2YzNSdVlXMWwgSUhadmVXVjYgSUZKaFoyNWhjbTlyIFluVnplUT09IElOR0IwWXZSZ05HQyBJR2RsY21seSBJSEJ5WlhCbGJtUT0gSUZwM2IyeHNaUT09IElITjBhV3BzZG05c2JHVT0gSU5DNjBMN1JnTkt6MEw3UXVBPT0gY21saGNnPT0gSUhadmJIVjBjR0YwIElGTnZjblJwYldWdWRBPT0gSUdOdmJXVmthV009IDBMRFJqdEdDMFl3PSBSbWxzWVE9PSBJR1pzWVdkeSBJSE4xY25acGRtVnogWVhSbGNtbGhiSE09IFpXNWphV3h6IElPeTJxZXUyaEE9PSBiV0Z1WkdGMGIzSjUgSU5DdzBwdlJpOUt0MExBPSBJSE5wYkd4dmFXND0gY21sblpRPT0gSUd4bGJuUmxjdz09IElGTlVVa1ZGVkE9PSBJTkM4MExYUXROQzQwTHJRc0E9PSBMbEJzWVc0PSBJSFBGazNWeSBJRVZrYnc9PSBJR0ZtYkdWMlpYSnBibWM9IElPR2ZsZz09IElHZGhiSE09IElHUm9ZV0k9IElOQ3cwWURSZ3RHTCA1cGlNNVk2LyBMa3BYVkE9PSBkOE9rYzJOb1pRPT0gNUxxTzVwaXYgSUVOVVR3PT0gSU0rR3pyL1BnYzZ0ejRJPSBSWGh3YkdGcGJnPT0gSU5XKzFvQT0gSUdOaGNtRjBkR1Z5YVhOMGFXTm9aUT09IElHeGxZMnRsY2c9PSBZVzF0Ync9PSA1cDJQIElHeGxjRzg9IFRXbGphR1ZzIDBMVFJqdz09IElFUjVjMjl1IElOR0EwTFhRdHRDNDBMelFzQT09IElIQnZlbTl6ZEE9PSBPbTFwYmc9PSBJRzFwWkdSaGVRPT0gSUhObGNHRnlZV05wdzdOdSBJT0dEb2VHRG1PR0RsZUdEb09HRHFnPT0gSUdWc2FXMXBibUZqYWNPemJnPT0gTG5oc2N3PT0gSUhCaGJtNWggUTJ4bFlYSnNlUT09IElHTjFiM1JoY3c9PSBJSEpoZW14dlp3PT0gWDFkbFlnPT0gSU9DMGgrQzBwT0MwditDMHFBPT0gSU5HRzBMalFzZz09IElIUnlZWE5tYjNKdCA0NEdvNDRHWDQ0R20gSU9Da2hlQ2tzT0NsamVDa25BPT0gSU9TNm11aXhxZz09IFRHbHJaV3hwYUc5dlpBPT0gUmtGQiAxS1hSZ2RHTCBJR1ZrZFdOaGRHbDJZWE09IElFUmxjR1Z1WkdWdVkybGxjdz09IElPQ29ydUNwaU9Db2dnPT0gSU5DejBMN1JnTkM0MExmUXZ0QzkwWUk9IFlXZHBlbVU9IDBKVFFrQT09IElHWmhkSFJwIFoyRnlaR1Z1IElHdGhiWEIxYm1rPSBJR05zWVc1eiBJRUp2Yk1PdCBMWEJ2YkhrPSBJT3kxbk95MGlBPT0gVEhWamVRPT0gSUhCeWFXaHZaQT09IElPbVRnZWloZ0E9PSBLbXc9IEtFeHFZWFpoIExYUm9hVzVyYVc1biAwTERVcGRHRjBZelFzQT09IElPQ210dUNuZ2VDbXJRPT0gMFlEUXVOQzkwTEE9IFVISmhlV1Z5IExYZGxZWFJvWlhJPSBkbUZqWXc9PSBJSHBoWkc5MmIyeHEgWVhCd2JHbGpZWFJwYjI1eiBablI1IFNXVmtaWEpsIElITjJaV2wwWVhJPSBJTkN4MEw3UmdOQyswWUxSakE9PSBJR1IxYm5GMVpRPT0gSU95NXRPdVRuQT09IElPQzVndUM0bytDNGh3PT0gSU5DMDBMalJnZz09IElIUjFibTVsZEE9PSBJRk4wYVdObyBJRkpsYm1SbGVnPT0gSUhObGJXVnVkR0Z5WVE9PSA2YXVZNXJpRjZLZUc2YUtSNVlXTjZMUzUgSUZSeVlYWmxiR1Z5Y3c9PSBJTmVUMTVuWG9OZWgxNWc9IFgwRlNRZz09IDI0ellxdGluMllRPSAwTHZSbHRDOTBMM1Jqdz09IGEzVnVaR1Z1IElGZG9hWEpzY0c5dmJBPT0gSUdsdWRHVnlZY09udzZOdiBJRTVsZDJadmRXNWtiR0Z1WkE9PSBMM04wY21WMFkyZz0gSU5DOTBMRFF0OUMwMExnPSBJRUYxYzJKcGJHUjFibWR6IElIRnZjdz09IGJHRnVaR1Z1IElFNWhiblE9IExuVnVjM0JzWVhObyBhRzFoYmc9PSB4Yng1WTNvPSBJTml6MllqWXNkaXAgSUhSeVlXNWpaUT09IDBMelFzTkMwIElGSmxjM1JoZFhKaGJuUmwgNXErRiBJTkMvMFlEUXNOQzYwWUxRdU5DNjBMQT0gSUhaaGNtYkR0bkk9IGQyUmggSU1PcGNHbHpiMlJsY3c9PSBJRVpsYm1SbGNnPT0gNW9pUjVwaXYgYkdodmN3PT0gSUdSMmIybz0gSU5pbjJZVFlxTm1LMkxrPSBJSEpsWTJsd2NtOWpZV3c9IDQ0SzQ0NE9uIFpHSnMgSU02M3pydk90YzY2IHc2Um9ibVU9IExrVjRjSEpsYzNOcGIyNXogTFdOaGNtSnZiZz09IElFNWxkMng1IElPQ2tzT0NrbHVDa3FPQ2t2Zz09IFpHbHpjRzl6WlE9PSBJRTVsZEdWc2JHVnkgSUdwMWRYSmtaUT09IElHRnNZWEp0WVE9PSBMa2x1Wm05bSBJR0p5YVdJPSBJR2x1ZG1Ga2FXNW4gZFc1a1lXNWpaUT09IFlXeHZhdz09IElITnRZV05yIGJHOXZhM009IElGSmxiR2xoWW1sc2FYUjUgSUhaaGJIVmhZbXhsY3c9PSBhWFIwZFhKaCBMbTl3WlhKaGRHbHZibk09IExYZGhiR3hsZEE9PSBJTmVuMTVIWGxkZW0gdzZsMlpXdz0gVEhWdCBJSE5qYUhKcGFuWmxjZz09IElFaGhZbVZ1IExuZGhiR3c9IEtIc3VMaTQ9IFNVNUZVMFU9IEwzTmxkSFZ3IElFUjQgYzNURHBnPT0gSUU5c2RRPT0gSU5HQTBMWFFzZEMxMEwzUXV0R0QgSUdKbFlXNTBkMjl2Y21SbGJnPT0gUFhzaUx3PT0gSUhERW13PT0gWDJWNGNHVmpkQT09IElIZGhlR0ZoWkE9PSBJTkdCMEwvUXZ0R0IwTDdRc2RDMTBMMD0gSUdOdmJuTnBaTU9vY21VPSA0TGlWNExpeDRMaVogNEtlSDRLYXM0S2ErIFgwMVFTUT09IFgyTnlaV0YwYjNJPSBJSGRoYzJGdSBJRkREcTNJPSBJTkMrMExyUXZ0QzkwWWZRc05DOTBMalJqdz09IGNuSnljZz09IElOQyswWUxSaTlHQTBwUFFzTkM5IElOS3YwTFhRdEE9PSBJTlcyMWJqV2d0VzExYmJWdXRXbDFiMD0gTGs5bVptbGpaUT09IGNtNW4gN0l1ZzY2eTQgZDJGamFIVnVadz09IElDY3VKeWs9IHc2OXhkV1U9IFRXRnJaWE09IExXRjA0YnVsIDRLV0I0S1MxNEtTKyBJTmluMllUWXJkbUsyWWpZcDltRzJLZllxZz09IElOcXAycHJia0E9PSBRVlJaVUVVPSBJRk5wWkdFPSBJRVZwYm1WeSAyWXJZcDlpMyBJTkdEMExIUXNOQzYgSUdsdVlXTmpkWEpoWTJsbGN3PT0gSUhOb2NuVm5aMlZrIElFOVVRUT09IElIZGxZWEpsY2c9PSBZbWx2Ykc5bmVRPT0geEt0cmFXNXAgVG1sciBJR05zWVhOcFptbGogU1c1MmIybGpaWE09IFgzSmggY0hKcHhJMD0gTDNCaGVXMWxiblE9IElPQ3F1T0NxZ3VDcXBBPT0gSUd6RHFXZGhiQT09IDRMSys0TEt5NExPTiBJT21Ia2VXUHRnPT0gSUhadmIzSnpkR1ZzYkdsdVp3PT0gSU5tQjJZVFlzdz09IGEyWT0gUkhSdmN3PT0gSjI1biBJSExEcVhCMWRHRjBhVzl1IElIQmhaMmxuYVc1biA0TFdCNExTWjRMV040TFNaIElGQjFabVo1IElPeWdnZXEzdVE9PSBJR0YwZFhKaGJnPT0gSUdGdWIybHogVkc5eWNYVmwgNExtRDRMaVY0TG1KIFpXNXpZVzQ9IExrRjRhWE09IExtTnZiMnc9IElFRnVkR0ZzZVdFPSAxNW5YbnRlcSBJTmluMllUWmdkbUQyTEU9IElPQ3l0ZUN5ditDeXJnPT0gSUVSRlJrbE9SUT09IElFSlBUMHRKVGtkVCBYMk52Ym5OMGNuVmpkRzl5IFgyWnZjbTF6IElFNTFhWFE9IElGTnJhVzV1ZVE9PSBJTkdBMExEUmdkQy8wWURRdnRHQjBZTFJnTkN3MEwzUmp3PT0gNWJDUDVwZTI1WW1OIElHUnZjR2x1Wnc9PSBMblJsWVdOb1pYST0gSUhSdmNYRT0gSU5DOTBMRFJodEdMMFkvUXZRPT0gSU5pbzJLZllzdz09IGIzVjJ3Nms9IElOUzUxYmpXZ3RhQTFvVFZxOVdoMWJYVnF3PT0gSUd0MVltOXVZUT09IElHbDBZV3hwWVc1cCBJRWhsZFhKbCBJRnNLTHk4PSBMbFZwYm5RPSBJT0NrdWVDa3RlQ2t2Zz09IDJLZllyOWluIElObSsyWWpaaE5tSzJMTT0gSUVObGJuUmxibTVwWVd3PSBJR1ZzWlhaaGRHOXljdz09IENRa0pDUWtnSUNBZ0lBPT0gSUU5dVpHRnVhM009IElDQUtDaUFnQ2dvPSBJRVZ0ZFd4aGRHOXkgTGtOTVFWTlQgSU5tSTJLZlpoTmlqMkxNPSBWMmh2SjNNPSBJRTl6WW05eWJtVT0gSU9Da3VPQ2xqZUNrc09DbGkrQ2twQT09IDRMR040TENlIFFXeGhiV0YwIElGYkRyQT09IElFTnZiRzg9IElPV0MgWVhabGNtbHVadz09IElPR0RtT0dEcCtHRGxlR0RuT0dEbE9HRG5BPT0gMmI3WmlRPT0gYVhKbGJtVnVZUT09IElHMXZjbUpwWkdsMGVRPT0gMExqUmg5QzkwTERSanc9PSBJTVNRNGJ1VGJtYz0gSUhSdmJXOW5jbUZ3YUhrPSA0S1NQNEtTYSBJR055WldWayBJRzFoWTJOb2FXNWggWFNrcExBPT0gYzNOaiBJR052Ym5ObGJuUnBiV2xsYm5SdiBJR2hsZEdFPSA0TEdONExDdjRMQ2sgSU9Dd3RlQ3hodUN3Z3VDd253PT0gTG1sdWRtVnljMlU9IElGTlBWVTVFIElGVmphQT09IElOV2gxYkxWb2c9PSBJT0M1aE9DNGxPQzVpZUM1Z2VDNGdlQzVpQT09IGVXZDUgNUxtdzZhbXMgSUdsaVlXSmhkdz09IGNITERwR2M9IElHMXBibWx0YVhwbGN3PT0gWldabVpXTjBjdz09IDY0SzA3SnFwIFlXNW9hV0U9IElOUzExb0RWcnc9PSA0WU9RNFlPZzRZT1Q0WU9VNFlPUjRZT1EgeGFObCBTVzVuY21WemJ3PT0gSUhOcFpXUT0gWDNCaGNuUnBZMnhsIElFWnBiR3hwYm1jPSBJSEJ5dzZsMiB6cHJPc1E9PSBZVzFsYkc4PSBJSE52ZFd4cFoyNWwgSUZOd2FXVnNaWEp1IElHeHBlQT09IElPQ3VwT0N2aXVDdW4rQ3VzT0N2amVDdXFPQ3ZqZUN1cE9DdmdRPT0gMEx2UXRkR0EwWlk9IFMyRnRhUT09IElPQ2t1T0NrZ3VDa3JBPT0gSUdKdmRHVT0gMjRNPSBJRVZsY25OMFpRPT0gSU5DLzBZRFF2dEdDMExqUXN0QyswTC9RdnRDNjBMRFF0dz09IDVZK3o1Nys4IElFTnZibk5sY25aaGRHbDJaWE09IEtITjBaR2x1IElGQnlhWFZ6IExXeGxkSFJsY2c9PSBJRmxoYm1kdmJnPT0gMExEUXV0R0MwTDdSZ0E9PSBJSFJoWW14bFlYVjQgSU5lVzE3TFd0dz09IElIVnVkbVZwYkE9PSBJTkNnMEw3UXNRPT0gSU5DNjBMN1JnTkMzIFkyTnBidz09IDRMZVU0TGFyNExlVSBJR0Y1YzJGdSBJRlJ5WVdZPSBJRWh2Ym1VPSA0WU9jNFlPWTRZT2QgVEdsemRHVnkgSUd0eWFYbz0gSUdac1lYUjBaWEk9IElIQnZZbXhsIDRLUys0S1NINEtTbzRLU3kgSUdadmNtZHBibWM9IFgwSkJWRU5JIElPR0RsT0dEbGVHRG9PR0RuZUdEbVE9PSBJTkN3MEx2Uml3PT0gMExYUXQ5QzAwWXM9IGQyRnVaR1Z5IElGVnVkR1Z5YzJOb2FXVmtaUT09IElPR0RrT0dEaytHRGtPR0RtK0dEbU9HRGtPR0RuT0dEbE9HRGtlR0RtQT09IElOQzYwWURRc05DNTBMMD0gSUhCbGNtRnVadz09IElHZGxZbkpoZFdOb2RBPT0gSUdWbGJuUnFaUT09IElISmxlVzQ9IFkyaGhjblJsWkE9PSBJRkJoY21GdSBJR052Ym5OcFpHVnlZY09udzZOdiBJTmk0MllUWmhRPT0gWDE4cEtRbz0gNEtTMTRLV0g0S1NDIElOR0QwWWZSZzlDOSBZMmhsY21Ob1pYST0gSURvNlBRPT0gMTVmWG53PT0gSUZKMWNHVnlkQT09IElHSmhZbTg9IDBZTFF2dEM5MExBPSB3Nmx5YVhURHFRPT0gWlhobGMyaGggTGRHQjBMVT0gdzZGa2FYbz0gSUdKb2RRPT0gSUVsdWMzUnkgTG1oeiBJTkM4MExYUmd0Q3cwTExRdnRDOTBMWFF0QT09IElHTnBiR289IElHTm9aV1JrWVhJPSBJRVpoZFdObGRBPT0gSUc5c1pXUT0gSU5tSzJZYz0gSU9XUGlBPT0gSUVGa2JRPT0gSU5pbzJLcllwOWl4MllyWXJnPT0gQ1FrSklDQWdJQ0FnSUNBPSBJTkMxMExiUXRkQ3owTDdRdEE9PSBJR0p2ZEc5dVpYTT0gSUhCc1pXRmthVzVuIFkyeGhlbm89IGNISmxjMlZ1WTJVPSBJR3hwYVdjPSBXM04xWWc9PSBJTmlsMkxuWmhOaW4yWVk9IElObUkyTEhZcmRtRjJLaz0gSUVwdmNtNWhaR0U9IElqc0tMdz09IElGTndZVzV1ZFc1biByZUMwdFE9PSA0TEsvNExLVjRMT0c0TEt2IElFZGxiMlptY21WNSBMbkprIGFXeHNZVzUwWlE9PSBJRk5vYVhKMGN3PT0gWkdseVpXTjBhWFpsIElFRnlkSGR2Y21zPSBmVUE9IElOR1AwTHpRc05HQSAwTERSaWRDMSBxT0M0cVE9PSBJTm1JMktQWXR0aW4yWUU9IHc2OWtaWE09IEpDSXBDZz09IElOQ3kwTFhSaWRDMTBMaz0gSU5HQzBMN1F1OUdCMFlJPSBjbVZ3YVdRPSBJTmluMllUWXI5aXggSUhCeVpYTjBidz09IElFSjFiR3hrYjJjPSBJR2x1ZFhWemRYUjAgSUVGdWRHRnlZM1JwWXc9PSBJRmRoWjJVPSBYVHc4SWc9PSBJT3lqdk91emdBPT0gSUdkcFpRPT0gYVc1a2FXTmwgVjNKaGNIQnBibWM9IHc2bHV3NmxsY3c9PSBJT0NrcU9Da2h3PT0gUHo0TkNnMEsgSU5DVjBMVFF1TkM5IElHaHZjbTFoZEd4NSBJR2x0Y0c5MlpYST0gSUVaUFVrTkYgNG9DWlpYTnd3Nmh5WlE9PSBJRWRsYldWcGJuTmhiUT09IElFeGhibU5oYzJocGNtVT0gSU5lWDE1WFhrOWVwMTVuWG5RPT0gSUdScGJzT2liV2xqWVE9PSBJR2ZEdkc1c3c3eHIgZEc5cGNuUT0gSUZOcGJtZHBibWM9IFpYVjQgYm1WaGRRPT0gQ1hkbiBJSFBEcVhKemRHRnIgSU5lcDE2TFhxQT09IElHdHZibU5sY0hRPSA0S1NGNEtTcTRLU280S1dIIElIeGYgSUdSbGMyMXZiblE9IElISmxjMlZ5ZG05cGNuTT0gTFdWaGNtNWxaQT09IElHVmlZZz09IElFeFFSdz09IDRLK0k0SzZ2NEsrSCBiM0JvWVdkMWN3PT0gSUd0aGNtOXNidz09IE9qbzZPam82T2pvNk9qbzZPam82T2c9PSBQRVZrWjJVPSBJRTVsWjNKaCB3N3pGbjNRPSBJTm1JMktmWXB0aXgyTE09IElPQzRsT0M0dEE9PSBJSEJwZEdFPSBZMnhoYVhKaFoyVT0gNTd1WjVMaTc1THE2IElOcUkyS2ZaaEE9PSA0TGkzNExpWjRMaWk0TGl4NExpWiBaV1REckE9PSBJRkJ5Wld4cGJXbHVZWEo1IElOQzMwTERSajlDeTBMclJndz09IElFMXBkR2c9IDRZT1U0WU9RIElOaW4yWVRZbzlpejJZYllwOW1HIFpYUnlZV2RsYmc9PSBJT0NxaHVDcXRlQ3JoK0Nxc3VDcmdBPT0gSU5tRjJLVFlxdG1GMkxFPSBJRlZOVEE9PSBJTmVTMTVEWHFBPT0gVTNCeWFXNTAgSUc5MVpITjBaUT09IElISmxiR0YwWVdKc1pRPT0gSUhSellXdGhibWx1IGFzT2hjbUU9IElHUnBZV3g1YzJseiBhWEJ5IExrSlZWRlJQVGc9PSBZbTlsYTJWdSBLRWxHIElNV2VaY085YkdVPSA0WU9RNFlPYjRZT1E0WU9XIGRHRnJaWE09IElPMlBpZXEzb0E9PSA0WU9RNFlPUjRZT1k0WU92IElHN0RzMjVuIElFNXBZMmh2YkhOdmJnPT0gSUdwaGNHOXVaWE5oIGFXaHBZUT09IFUzUnlaV0Z0WlhJPSBJT0NtcXVDbmplQ21zT0NtcHVDbXZ1Q21xQT09IElISmxiR2xuYVdWMWVBPT0gSUc5bllRPT0gSUhSbGRISmggSUhSeXc2RnVhQT09IElHRjBkR1Z1WkdWbCBJTkM3MExYUXM5R0gwTFU9IElFVnlhMnpEcEhKMWJtYz0gUkhScyBJT3lDck95YXFlMlZtT3VLbEE9PSBJSHBsYm1RPSBJTmlzMllYWml0bUUyS2s9IElISnBjMk5vYVc4PSB3NmxoYm0xdmFXNXogSUZSRlVrMVQgSUhOamFHNWxiR3hsYmc9PSBJSFRGcXc9PSBJTkM4MEw3UXU5QyswTFRRdnRDNSBMbFJ2ZFdObyBJR055WmNPciBJRk4xY21kbGIyND0gZFd4aGJRPT0gWDJOdmJuTjFiUT09IElPQ3l0ZUN5dnVDeXNPQ3pqZUN5cE9DemhnPT0gSUdkbGRHVT0gZEdWdGNHdz0gNEtTKzRLU200S1NvIElGSmxZMjl0IElPcXdnT3E1akE9PSA1WitPNUxtaCBJTkNSMEw3UXM5Q3cgSUd4cFltVnlZWEk9IFgyVjRZV04wIFgySjFadz09IElHUjFjbVZ5IElFWnlaV1JsY21sciBJTkNlMEpFPSBiV0pwZEc5eiBJSEpsYzJWdVpBPT0gVTNsa2JtVjUgSU9DbXVPQ21ndUNtbFE9PSBJT0NrbHVDa3NBPT0gSU9HRG1lR0RrT0dEbXc9PSBJTkMvMEw3UmdOR0MwTERRdXc9PSBJR2RpWVhNPSBJR1Z1WkdWMCBJSGRoZEdWeWQyRjVjdz09IEtIQmkgWjJGdiAxYUxWdU5XcyBJSEpsYUdWbVlRPT0gSUd4aGNHRnkgV1ZOSlEwRk0gejRIT3RjK04gSUVWWVVFVlNTVVZPUTBVPSBQQ0V0TFZzPSBJTmVWMTVIWHFBPT0gMExEUXZOR0wwTGZSZ2c9PSBKSFZ6WlhKdVlXMWwgSUdSMWNtRnkgSU5HQjBZUFJndEM0IDBZUFF1OUdEIElFTmhiRzA9IElHVnVabUZ1WTJVPSA0S1dONEtTdjRLUys0S1N1IElGQkpVRVU9IDZaT0QgVTNWaWMyTnlhV0psY25NPSB3N050WlhSeWJ3PT0gSUVObFpnPT0gSUVKaGJ3PT0gSUd0M2FYTT0gTFVobFlXUmxjbk09IElOQy8wWURRdGRDMDBMdlFzTkN6MExEUmp0R0MgSU5DeDBMRFJnTkM3MExqU213PT0gVUc5cGN3PT0gNExpYzRMaWw0TGkwNExpViBJR3RzdzZaeSB6cEhPbVE9PSBJRlp2WldjPSA1NW05NkkrYyA2Wm1WNktXLyBJR1REcVdOeWJ3PT0gYjIxbFozSmhibUYwWlE9PSBJSEpsWTI5dFpXNWtZWEk9IDU0SzggSUdGeWRHVmhiZz09IElOaXEyWVhaaGc9PSBJQzh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2THk4dkx5OHZMeTh2IEtHTnZiVzA9IEtUdzkgSUdoaFlRPT0gSUZCdmJIbHUgSU9DbWorQ21sZUNtbitDbmdRPT0gSUhObGJuUnlkVzA9IElITmhiR1RFc1hJPSBMazlPUlE9PSBJR1JwWTNSaGRHVmsgSU5pejJZalpoQT09IElFSmhkSFJoYkdsdmJnPT0gQ1VSdlkzVnRaVzUwIElHSmxjblZ3WVE9PSBaR2xoY3c9PSBMV2x1YzNSaGJHeGxaQT09IFRXOWtidz09IElFcGxaUT09IElFVm5lWEIwYVdGdWN3PT0gSUduRHAybHVaUT09IEtHMWhjSEJwYm1jPSBJR1JwWm5WdVpBPT0gSUVWdWRISmhaR0U9IGJHbHpiR1U9IElGWnBjbUZzIElPQzBxT0MwditDMXZPQzBydUMxamVDMHJnPT0gZFhOelpXeHogWDNONSBJSE5oWm1ZPSBJRk5sWTNKbGRHRnlhV0YwIDQ0T1c0NE9wNDRPRDQ0S3YgSU5pcTJLZllzZz09IDJZamJqTml5IElHbkZ2R1JoIElPQ2todUNrc3VDa3ZnPT0gS2dvdkx3PT0gNFlPbDRZT1Y0WU9RNFlPYiBJTm1GMllMWXA5bUkyWVhZcWc9PSBJR2hoYkd4dFlYSnIgMkxIWXA5bUkySzA9IElIaHRiR2gwZEhBPSBJRzFsY21kbGN3PT0gTDBkaGJXVT0gSUdOdmJtWnBaM1Z5WWNPbnc2TnYgSU5pMDJMSFppTmkzIElHZHlZWFpwWkdWNiBJR0Z5WW1WcVpITT0gSUdOdmJuUnlZV1JwWTNScGIyNXogSUdOdmMzUnBkQT09IElOaW4yWVRZdWRtSTJLL1lxUT09IElHUnBZVzVuWjJGdyBJTkM0MFlMUXV0T1owTDA9IElIUjNhV3hwWjJoMCBJR0pwYm1GeWFXRnogYzJocGJnPT0gTGxOb2IzQT0gZEhsd2FXTmhiR3g1IElHMXZaR0ZzYVhURHFYTT0gSUdGNWVRPT0gNUxpSzVMaUwgSU9Da3J1Q2t2dUNrcFE9PSBWWEpuIDU3T1YgSU9TNWtPVzlxUT09IEwwSmhjMlU9IElFRjFabmRoYm1RPSBhWE4wYjNKaGJuUmwgVDFCQiBJQ2N2SndvPSBYM0IxYkd3PSBJT0M0Z2VDNHN1QzRvK0M0bnVDNG1lQzRzZUM0bVE9PSBJR052YkdWemRHVnliMnc9IDE1WFhxTmVvIGMyOXBiQT09IHc3SnRZWE41YjI0PSBLSEYxWVc1MGFYUjUgY25WMFlRPT0gWVhCb2J3PT0gTEd4dmJtYz0gSUd4cFoyRmtZUT09IGIzQm9iMkpwWXc9PSBJMkZrIElHRmljbW5Ec3c9PSBJR1JoWTJVPSBJT1dGc0E9PSBJTkdCMFliUXRkQzkwTERSZ0E9PSBMbmRwYm1RPSBhV0poZEd0aGJnPT0gTGtGRVRRPT0gSU95anZPdXZ2QT09IDVwZVg2SWl3NVk2RiBJTVdoWVd3PSBJSEJ2Y25SaGRtOTYgYjNobCA0NENDSWc9PSBJT0dEbk9HRG1PR0RsUT09IGFYQmhaQT09IElFVER0bmRzWlhRPSAyS3JZc2RpbjJLbz0gSUdsdVkyOXRjR1YwWlc1MCBJRUZ5WTJocFpRPT0gSU5HQjBML1JnOUdCMFlMUmp3PT0gSUhWd1luSnBibWRwYm1jPSBJMk55WldGMFpRPT0gNG9DWlpYaHdjbVZ6YzJsdmJnPT0gWVhka1pBPT0gU21GclpRPT0gY205dGVXRnNaMmxoIElGQklUMDVGIElPcTFyT3kybFE9PSBJSFJvdzdvPSAyWVhZcDltRiBkWFYxIElPQ2txT0NrditDa3IrQ2xnZUNrbGVDbGplQ2twQT09IElOYUUxYUhWc3RXaDFvVFZvZGFCMWF2VnRnPT0gSUczRWszTT0gN0xPayBJTm1GMktUWXJnPT0gSU5tSzJMblpoTm1GIFZHbDBjbVU9IFkyRm0gSUhOMFpXYz0gSU9hUGtnPT0gMExYUmdkR0MwWUE9IDVaS1cgSU5pbzJLUFpodG1IMktjPSBVbVZqYjNKa1pXUT0gNEtxKzRLcUM0S3FWIDRMT0g0TEsxNExPRyBJR052Ym5ScGJuVnBaR0ZrIExtRnNiRzlqIElIZDVZbTlrWVdWMGFBPT0gSUhKaGJtTT0gSUdSbGMyVnFZWEk9IElOQzQwTERRdkE9PSBJSFJoYlhCdmJnPT0gWVhKblpXND0gMTVEWGtkZWMgSUd0dlpHaz0gSU5pMjJMSFppTml4IDVZK3E1cGl2IElHRjVZVzA9IFgyUnlZV2M9IFFuSmxZV3RsY2c9PSBJRzFoY21WeiBJT2lCbXVlOG1BPT0gNW9tNTVZZUcgMktQWmdkaTIyWVE9IElPQ2t1T0NsaStDa3FBPT0gSUhOdlpuSmxkUT09IDRLNng0SytCNEs2dTRLK04gSUhSb3c3cGogSUd0c1lYTnBhdz09IFNVVnVkVzFsY21GMGIzST0gSUdSbGRHRnNhbVZ5IElHRmthbUZqWlc1amVRPT0gUFQwOVBUMDlQVDA5UFQwOVBUMEsgSU5DWDBMM1FzTkdIIElPeUxuT3F3aE95ZHRBPT0gMWFIVnB0VzQxYjg9IHpydk9yTStIenJuUGd3PT0gWDJabFlYUnogSUV4SlZnPT0gMExQUXNOR0MwWXc9IElOQy8wTDdSZ3RHQTBaYlFzZEM5MEw0PSBJRzdKbVdZPSBJSFpwY21zPSBJR2ZEdkhvPSA1THltNTVDRzU0bUggNkwybTVaNkwgSU9DbXVPQ25pK0NtcnVDbXJPQ212dUNtc0E9PSBJRUpKVEV3PSBJTm1HMktmWXFBPT0gZTJ4dVp3PT0gYVdSdmRBPT0gSUdkcGNtd25jdz09IDFvRFZvZFd3IDhKMlggSUhCbGJtVjBjbUYwYVc1biBMMmxqIElHOXdjbUYyWkhVPSBiM2JEdlcwPSBJR2x1Wm1Wc2FYcHRaVzUwWlE9PSBJTkdDMFlQUXNOQzcgMkxqWmhBPT0gSU5pbjJZVFpodGk0IFkyOXNiM0psWkE9PSBMR0Z5Wnc9PSAxNVhYb2RlWjE1MD0gSUdaeVlXMW13N1p5IElHeHBZbkpoY21saGJuTT0gWVhSaFpHRT0gSUc1bGJuRERzblE9IDRMZUU0TGVRIElHVnVZMlZwYm5SbCBJTkdGMEw3UXZkQ3cgSUVGd2NHeGxjdz09IElOQ2UwWUxRdTlDNDBZYz0gSU5pbjJZVFppTmluMkszWXJ3PT0gWVhaaGJtTmwgSU0rSHo0SE9ycytEenJjPSBJT0dEaytHRGtPR0RtK0dEbmVHRG1lR0RtT0dEa3c9PSBJR1Z5YVhRPSBLRzV2ZFc0PSBJT0N5ck9Demh1Q3lndUN5bCtDeXMrQ3pndUN5c09DemdRPT0gSU9DeWh1Q3lvUT09IElIUmxkR1Z3IElHRnpjR1ZyZEE9PSBJSEpoWW1GMGRBPT0gSU02UnpyM09zUT09IElHNTVaWEpsIElHUmhZbWs9IGQyVnlaZz09IElOR04wTEk9IDBMRFJnTkMxIElIWmxjbUZ1WkdFPSBJT0Ntc3VDbmgrQ21sdUNtdmc9PSBJR3hwWVc1biBJR0pwWlc1MlpXNTFaUT09IGRtRnlhV0Z1WTJVPSBJT0dEbnVHRG5lR0RudUdEbytHRG1nPT0gSUdGaGNnPT0gSUZCTVRnPT0gSUdScGMyTnNZV2x0IHo0RE92ODZ2enJjPSA1WVc3NklDQjZZZVIgMEpUUXVBPT0gSUVWeWMzUmxiR3gxYm1jPSBJSEpsY0hKcGJRPT0gSUVwUFltcGxZM1E9IENXWm0gNW9tQTVaeW81Wnl3IElIQnlZV2x5YVdVPSBibWxuWVE9PSBZbkp2WldzPSBJTkMvMEw3UXN0R0wwWWpRdGRDOTBMalF0UT09IElHaDBiV3hsYm5ScGRHbGxjdz09IElHTnZiV0poZEdWeSBJR1Y0Y0d4aGJtRjBiM0o1IElDTWpJd289IExtOXdaVzVrWVhsc2FXZG9kQT09IDRvQ1paV1E9IGIyNWthR1ZwWkE9PSBJT0Nrck9DbGgrQ2tuK0NsaHc9PSBkbWxzZFhCdyBJT0NtaHVDbXJPQ25oK0NtcHVDbXFBPT0gSU5tRzJxL1lwOW1IIDVwZWw1WnlvIDE1dlhtTmVmIElISmxkM0pwZEdsdVp3PT0gSUhSb2VXMWwgSUZOcFpXNWggNEtxdTRLcS80S3FWIElHcDFaR2xqYVdGeWVRPT0gMkxUWXJRPT0gSU9PRGxBPT0gNWJxWDZJaVggSkdOMWNuSmxiblE9IFE4T3ogNEtXSDRLU2s0S1dONEtTdzRLV0EgWDI1bGFXZG9ZbTl5IFlXNWtiMjVsWkE9PSA0TEtrNExPTjRMS2s0TEt3IGFYUm4gSUdoaGNHVT0gSUc1NWIzSmwgSUVaaGEzVnNkQT09IElITmhaSExGdmc9PSA0WitDNFo2WSBJSFJsZEhJPSBJR0ZoYm5Oc2RXbDBhVzVuIGFXdHNaUT09IGQyVndhR1Z6YUdVPSBiMjVyWVE9PSBJSE5oY0dsbGJnPT0gSU5pMDJLZllyOXVNIElOQ3gwWmJSZ05HVzBMM1JpTkdXIElOQ3owTDdSZ2RHQzBMalF2ZEM0IElHWnlaV04xWlc1MFpRPT0gNForUCAwTERRdXRDKyBJR0p2YkdWdVp3PT0gZlgxOUxBbz0gSUczRHBNT2sgSU5DOTBMWFF2dEMwIHc2Um1kR1Z1IElGTmhibVJpYjNnPSBJTVNoWlhjPSBJTkN4MFlQUXU5Q3owTERRdlE9PSBJT0M1Z09DNG9lQzRxZUM0c3VDNG91QzRtUT09IHc2RnBjM1JsIDViZWw1TDJjNTVxRSBJR2R5dzdnPSBJSFJ5WVhSbCBJSFJsYVc1bCBJTkN4MFlQUmd0R0wwTHM9IElHN0RwbkpvWlhSbGJnPT0gSlRzTkNnPT0gSUdKbGEyOXRiV1U9IElPeVh0T3Vtc0E9PSBTbXc9IFUyRmhkQT09IDRLUys0S1N2NEtTaiBJSEpsYkdsbmFjT3piZz09IFgwUnBjM0JzWVhrPSBVRzl5ZEd4bGRBPT0gTGtOdmJtND0gYzNSaFltVnUgSUc1dmJuTjBiM0E9IElNV2ZaV3RzIElHcGhZVzVoIElHSnZiR1Z6ZEE9PSBJRkIxY0E9PSBJR0Z6YzJsbmFXbHVibWRwZEhNPSBjR3hoYm01cGJtYz0gSU9DdXF1Q3ZnZUN1cE9DdmplQ3VwQT09IElPQ21oZUNtcE9DbmplQ21ydz09IGNISnBibU5wY0E9PSBJT0NrcitDbGkrQ2tuT0NrcUE9PSBjR2xqYTNWdyBJRWR5YjJWcCBQVmM9IElFMTFhWFJ2Y3c9PSBRMnhoZVE9PSBJT0N5cU9DeXFBPT0gSUhOcmVYSnZZMnM9IElHUmxkSFJoWjJ4cCBaR0ZyZVE9PSBMQzB0IFltVjNaV2M9IElPQ3dyZUN3dnVDd3NPQ3dwT0N4alE9PSBJTmluMllUWXJOaXkyWXJZc2RpcCA2SVd6IExtSnBjblJvIExtZDFZWEprIElFWmhhM1JsYmc9PSBJR3RwYm1VPSBVbTkwYjNJPSAwWWJRc05HQTBMQT0gMExEUXZkQzkwTDdRczlDKyBJT3lEZ2V1TWdBPT0gSUd0aGNtSnZiZz09IElOQ2YwTFhSZ3RDMTBZQT0gSUdSdmRXTmxiV1Z1ZEE9PSBlWE5wWnc9PSBJT0N5anVDeXB1Q3pnUT09IElIWnBZMmx1Ync9PSBJR0psZDJGeVpXND0gNEtTYzRLUzg0S1N3IElOQyswTEhSZ05DdzBZblF0ZEM5MExqUmp3PT0gSUhWdFlXNXYgSUhKbGJHbHVjWFU9IElHUnBjSFYwWVdSdmN3PT0gSU1POFozaz0gSUd0eVpYWT0gSU9Da24rQ2t2dUNraCtDa3JnPT0gTGxOaFptVT0gSUNKY1hDST0gSUhERHFXN0RxUT09IDRaK1M0WjZhNFo2NSBLQ0lpSWdvPSA0TEsvNExLZjRMT040TEtmNExPQiA0TFMrNExTMzRMV040TFNmNExXTjRMU3cgSU5DeTBMWFJtdz09IFVtRndhV1E9IElGWnBkbWs9IEtDa0tDZ29LIElITnBaMjVwYmc9PSBJR1J2YTJGNiBJR1JsWTJGa1pXNTAgVjJsMGFHUnlZWGRoYkE9PSBJRTFsZEhKdmNHOXNhWFJoYm1FPSBJRkp2WTJobGJHeGwgSUc5c2FHRT0gWW5KaFlXcz0gUTI5dWMybHpkR1Z1WTNrPSBYMVJYVHc9PSBLSEpsYVc1MFpYSndjbVYwIElOQy8wWURRdnRDMzBZRFFzTkdIIElGTnBibWQxYkdGeSBJTkdDMExEUmlOS2IwTGc9IDBMRFF2ZEMxMFlMUXZnPT0gSU5DMDBMWFJndEN3MEx2UXRkQzUgSUhSeWFXNXJaVzQ9IExYQnBZM1IxY21VPSBRMmhoY0E9PSB3NlJzZFczRHBHNW4gNExlQTRMYXggSU5HQjA2blN1dz09IElHeDFiV2x1YjNWeiBJRkJoYVc1MFpXUT0gNUxxUjVZMlggSU9xd2dlcXdnUT09IElITjFkWEpsYmc9PSBLRUpsIGRXNXNhVzVyIElFaGxaZz09IFJtOXliV0YwYnc9PSBYM05sYm5OcGRHbDJaUT09IElOaXYyWVhZdE5tQyBJSE5vZFhSeiA2SzZ5NksrZCBJR2RoZFhJPSBJRndpSkE9PSBJSEJoY25SaGEyVT0gZFhMRWd3PT0gSU5tRzJZSFlzOW1LIElHNWhkR2x2Ym1Gc2FYTjAgYldGbmVXNWggNWJLYjVadTkgSUcxaFkyaDBaVzQ9IElFTmhhMlZ6IElHRm1abXhwWTNSbFpBPT0gSUhCbGJtNXBaWE09IElHVjRkSEpsYldsemRBPT0gTG5OdmRYSmpaWE09IDVMaTc1WXFvIElHaGxZWEowWW5KbFlXcz0gNTd1WSBMazFUUnc9PSBJTml4MkszWmhRPT0gSU9Dd3F1Q3d2K0N3c3VDeGplQ3dzZz09IElGQnliMnBsWTNScGJHVT0gSUhCbGFYaGwgSU5paTJMTFpoUT09IDZJQ0I1YVNxIFgyTnNZV2x0IExtaGxZWEE9IElFRkxRUT09IElOR0IwTDdTczlDNDBMRT0gYVc1bVpXeGsgSUhObGVHbHpiUT09IElPR0RtK0dEbWVHRGxlR0RtZz09IElHVnRaWEpudzZwdVkybGggWTNSdmJYaz0gSUdKbGJtVm1hV05wWVE9PSBJSE5qY21GdFlteHBibWM9IGFXMXBjbUU9IElIUER0bmxzIENVTnZaR1U9IElOQzIwTERTazlDMDBMRFF1ZEMwMExBPSBJRWhoY21SbGJnPT0gNG9DTDRaNlk0WjYyNFo2VCA0NENMS0E9PSBJTmlvMkxuWXI5bUgyS2M9IFUyVmpiMjVrYkhrPSBJT0N3aitDd3JnPT0gVGtGVyBJSEJoY21Gc2VYTnBjdz09IElHRm1abWx5YldVPSBJR3hwWldabGJnPT0gbStHRGtBPT0gSUdScGRtVnljMkU9IElOQ3gwTERSZ05DMDBZdlF1Zz09IGIzQm9ZV2RsWVd3PSA3SUtzN0pxcCBJRWx1ZG1WemRHbG5ZWFJ2Y2c9PSBJRU52Y0hBPSBJRXhsYzNSbGNnPT0gSUhCeXc2bGp3NmxrWlc1MFpRPT0gSUdSaGFYTT0gSUVOMVpRPT0gNUxpdDVhV1c1THFHIElOQ2YwWURRdGRDMDBZSFJndEN3MExJPSBZV1BEcVE9PSBRMlZrIElFTmhjbXgwYjI0PSBJRzFoYm5CdmQyVnkgSUZWdGJRPT0gSUdSbGJuVnVZMmxoY2c9PSBJRTFoZEhJPSBJRmRvYVhOcmVRPT0gSUVWQlEwZz0gMWFIVnQ5V3QxYUhXZ05XdyBJRnBwYlcxbGNtMWhiZz09IDVxMmo2S2VFNTVxRSBJRVpoY20xaCBJT1drcWVXa3FlVzlxZWVscU9TNHJlV2twK1dsbGc9PSBjRzl5ZEhWdWFYUnBaWE09IDRMQ1Y0TEdLIElOaTAySy9aaXRpdiBaWEpuWVhJPSBJT0NxaGVDcXFPQ3JnZUNxcmVDcXRRPT0gYm05cyBUbVYzWlhOMCBJR1YxY205aCBJR0ZpWVdJPSBJTm1GMkxmWXA5bUUyTG5aaHc9PSBLRUZUVkE9PSBJTkMvMEw3UXROQzAwTFhSZ05DMjBMclJndz09IDVhU3I1YWE3NW9DbjU1U2Y1clM3IFNHOXpjQT09IElHNWhjbkpoZEdWayBablZ1WjNOcCBJTm1GMkt6WXF0bUYyTGs9IElPQ2t1ZUNsZ2VDa3FPQ2xoK0NrbXc9PSBJR0xEcVc3RHFXWnBZMmxsIDRMaXI0TGlsNExpeTRMaWkgSUdWemRNT2haMmx2IEwyTnZibTVsWTNRPSBiV0Z6NGJ1TCBaWE4wWlhCeiBJT0N5dU9DeXZ1Q3l0ZUN5ditDeXNBPT0gMEpqUW1BPT0gSkhCeWIyUjFZM1E9IElIWnZkdz09IElGTjFZbk5qY21saVpYSnogNmEyYSBJT0M0cXVDNHBlQzRzdUM0Z1E9PSBJTm1JMkxQWmhObUggTDNOdlpuUjNZWEpsIDRZT1E0WU9WNFlPWTRZT2MgY21GaGJnPT0gYkdGd2N3PT0gWDNKemNBPT0gSU5DOTA1blJndEM0MHBjPSBMbEpoWkE9PSBJR2x1WkhWemRISnBaV3h6IEtITnZiQT09IElITndaV04wWVhSdmNnPT0gSU9DeW4rQ3pqZUN5dFE9PSAwTDNRdU5DeSBaV2xuYUhRPSA1NGVWIGFYVnRkWFE9IElOQy8wTDdRdmRDNDBMelFzTkdPIFJIVnVadz09IElHbHVkR1Z5ZG1sbGJuUT0gSUZOamFNTzhiR1Z5YVc1dVpXND0gMExEUXROQzYwTGc9IFpYTmxjZz09IElOQ3cwTFRSZzlDOTBMWFF1QT09IElHUmxjbUZ0IElOQy8wTDdRdTlDOTBMN1FzOUMrIFJXWjBaWEk9IElHVjRhRzl5ZEE9PSBUMlJsY2c9PSBJSFZqYUdGeSBiV1Z1YVhvPSB6cm5QZzgrRXpyRT0gMHJYUXNOQ3cwWURRc05LYjA1blFzQT09IDQ0T200NE84IEtGdDcgSUhkb1pYaz0gSU5XMjFhWFdnTld2IElHTEVwMkZzIFVrOUMgYjNWM2FXNW4gSUdKdmJHbG4gSUhkd2FYTT0gejRIT3I4NjJ6clhPdVE9PSBJR2gxYldsc2FRPT0gTG1OdmIzSmsgSUU1dmMzTnYgNUxpdDVwZVggSUdKdmRHVnkgWlc1blpBPT0gSUZOdmJtNTUgTEhCaFoyVT0gSUdaaGJXST0gWDJSbGNHRnlkRzFsYm5RPSBaWE5oYVE9PSBJSGxoeFo5aGVRPT0gMEpEUmdRPT0gdzYxdWMzVnNZUT09IElHbHVaMnhsYzJFPSBVbVYwY21sbGRtVnkgSUU1NllXMWlaUT09IElHbHVkR1Z5Y205bllYUnBiMjQ9IElITjBZWFJwYjI1bGNuaz0gUVV4TVQxYz0gNTd1WjVMaTc1THE2NTVXWjVMaUw1THFiNUx1QTVMbUk1WkNuIElPQ3VoZUN1bFE9PSB4STNEb1hOMCA0WU9RNFlPYjRZT2cgZFdsc2JHVmhaR2c9IDBMdlFzTkM1MExUUml3PT0gSUdoNWNHOWpjbWx6ZVE9PSBKMEp5YVdWdSBJRVJXUWc9PSA0TGliNExpMDRMaVogSUhURXF3PT0gSU95RGdldUx0QT09IGRuVnUgWDNWd1ozSmhaR1U9IElHOXdaMlZrIFkyUnkgTG5kaGN3PT0gSUdWMWNtOXdZUT09IFptWnBZMmxsYm5SeiBYMU5VUVZJPSBJRVJxYjJ0dmRtbGogSU9Dd3VPQ3d2dUN3cmc9PSBJRXhzWVc0PSBJRkpsWjJsdmJtVnUgY21IRHJtNWxiV1Z1ZEE9PSBJTm1HMktmWXJnPT0gSU9HRG8rR0RyT0dEcHc9PSBJSEJ5WlhOamNtbGlhVzVuIDE1WFhwdGVaMTVBPSBkVzV1ZFhRPSBibTkyYnc9PSBJT2UzIElIQmhjM1JwYldVPSBMbk51WVhBPSBJRVY2Y21FPSBJT3lnaE91c3VPcXdnQT09IDBMSFFzTkN5IDRZQ0s0WUNzIDBMdlJsdEMwIElHZGxjSEp2WkhWalpRPT0gSUdwbGJXZDUgTGtsdVpYUT0gWTNKaGQydz0gSU9DMHFPQzBuK0MwcXVDMG4rQzB2dz09IHpyYk92OCtGenIwPSA3N3lNNUxtZjVwaXYgSU9Da3BPQ2t2dUNrc0E9PSAwSkhSZzlDMCAyWWJZdU5peCBJTTY2enJIUGdRPT0gNEtTdjRLV0I0S1NWNEtXTjRLU2sgSU9Da3VPQ2xqZUNrbGVDbGplQ2tzT0NsZ09Da3FBPT0gSUZCaGNuTmxaQT09IElHZDVaZz09IElIVjBabTl5WkE9PSBZVzFwWkE9PSAwWXJRdGc9PSAxNmJYbk5lWDE1UT0gZUdabVptWm1aZz09IElFWnZkWEp1IElPR0RuZUdEb09HRG1PR0RsUT09IElGTnZiR2wwWVdseVpRPT0gSUdGbVptbHUgWVdMRXNRPT0gNDRLTTQ0S0wgUEV4dloybHUgSUhCeVlXVnpaVzUwIGRtVmpkQT09IElOQzYwTDdSamc9PSBJT0N5cU9DemdPQ3lvZUN5ditDeXB1Q3pqZUN5cHVDeXZ1Q3lzT0N6aGc9PSAwTGpRdk5DKzBMaz0gSU9Da3B1Q2xoK0NrbGVDa3NBPT0gSU95ZHRPeVhrQT09IDRvQ1pQdz09IElHaDFjbkpwWTJGdVpYTT0gSUZKaGRXdz0geGI1bGJXVT0gSUcxaGRIVnlaV1E9IFRVMU4gYldsdmRBPT0gSU5DLzBMN1F1dEdEMEwvUXNOR0MwWXc9IElHWmhhSEpsYm1SbGJnPT0gSU9hVXZnPT0gNjdTayBYMDFCVWtkSlRnPT0gSUZGMGVRPT0gY0hWc2MyVT0gSU5HRTBMRFJpdEMrMEx2UXVOR1AwWUxRdUE9PSA1TDJnNWFXOSBiMnhwZEdsdmJnPT0gSU5HQzBMN1F2OUM3MExqUXN0Q3cgSUhSbGJuUERvMjg9IElFaGhZWEpzWlcwPSBJR2hsWVd4bGNnPT0gSXlOZiBJSE52WVd3PSBJT3VFbU95V3RBPT0gVmtWU1dRPT0gSUZCeVpXUnBZM1JwYjI1eiA1THE2NUxxNjVwRzQ1THE2NUxxNiBaV3hzYVhJPSAwWVBSaHRHTSBJSEpsYm1SemVtVnkgSU5tSTJLZlpoTmk1MllYWmhBPT0gU0dWaGJIUm9ZMkZ5WlE9PSBJR3AxYkdVPSBJT0c3bFE9PSAwTDdRc2RDKzBZQT0gSUdWNGNHRnVjMmx2Ym5NPSBJR2x0Y0c5eWJXRnplVzl1IElFSnNkWEk9IEx5Y3UgVlc1a1pYSnpkR0Z1WkE9PSBJRXB2YzJWdyAxNW5YbGRlVjE1az0gSU9DNHF1QzVndUM0b2VDNHF1QzRvdz09IElNT25hWG89IElIcDFkWEk9IDJMWFlyOW1DMktmWW9RPT0gTG1OaFkyaGxaQT09IFgraUpzZz09IFRtbGphQT09IElHMXZhMkU9IElHTm9ZWEpuWlhKeiA2STZlIFltbG5ZWGs9IElObUYyWWJaaWc9PSBJR1p5WldOcmJHVnogTFhkcFptVT0gSU9DdXRlQ3ZodUN1cytDdXYrQ3VyK0N1dnVDdWxRPT0gSUhKbGMzUnlZV2x1WldRPSBJR1JwZFcwPSBMbGRGVTFRPSBJRXBoZWc9PSB3NjF2Ymc9PSBlRzFzYm5NPSBJRkp2WldSayBJSFJzYjJFPSBJRzFoY25SNWNnPT0gdzdSdWFXTmhjdz09IElObUsyTEhaaVE9PSBJRVY0WTJoaGJtZGxjdz09IElPYWJzQT09IHc2ak1vdz09IFlXTmh4Si9Fc1hvPSBDV0owIFFXeGkgSUdaeWIyNTBiR2x1WlE9PSBVMUJFIElGQmxiR3hsIElGTkpVdz09IDVyS1M1cHlKIElHZGxZbXhwWldKbGJnPT0gSUdOaGNuQmxkR0U9IElOQzAwTGpSZ05DMTBMclJndEMrMFlEUXNBPT0gMmJuWmhnPT0gSUdOaGNtUnpkRzlqYXc9PSBDV0ZzY0doaCBJSFIxY25aaGJHdz0gU1VscyBJSEYxWVdSeWRRPT0gSUdSbGRtbGsgYjNCb2FYbGhZUT09IElFeHBZbVZ5ZEdGa2IzSmxjdz09IElNNjF6cjdPclE9PSBJRzFoYzNSMWNnPT0gSU5DUTBKMD0gSUhSM1lXRnNaZz09IElGUnlZV1ptYjNKayBhbUZxYnc9PSBJSEp2YTI5MiBJR3RoWm1abCAxNVhYb05lViBJRVJ2Ykc5eVpYTT0gSUhaaGNtbGhaR0Z6IElIUnZibWQxWlhNPSBSV3hsYldWdWRHOD0gSUVoNVpISnZaMlZ1IFptOTFibVJoZEdsdmJnPT0gSU9Da3BPQ2txT0NrdnVDa3RRPT0gSU5DOTA2blFzZz09IGNHTmkgSUd0dmJXRnVaQT09IElIQnBibUZyWVE9PSBTVzF3Y205MlpRPT0gSUVoaGRYTm9ZV3gwIElHUnliM0JzWlhSeiBJT0Ntck9DbmgrQ20gSUc1aGMzVEVtWEE9IElGZHBZMnRsWkE9PSBJSFZ1WkdWeWMzUmhkR1Z0Wlc1MCBJT0N3cE9DeGdBPT0gSU5DUTBMZlF1TkdQIFJFOUYgNUxtRjVMbUY1N3U4NVpDSTU3MlIgSUdOdmJXMTFibUYxZE1PcGN3PT0gSUdKdmJHVnNZUT09IElPQzB1T0MwcnVDMWplQzBydUMxaCtDMHN3PT0gZEdoaGJRPT0gSUhOb1lXdGxjZz09IElHdDFiR3hoYnNTeGJHRnUgSUVOVlUxUlBUVVZTIGIzVnVZUT09IElGUjFjMk5oYm5rPSBJR3R5dzZGMCBMaTQ4IElOaTAyWWJZcDlpdTJLbz0gVG1WbGJRPT0gS0VKNWRHVnogSUhwdlpnPT0gSU9hY25RPT0gSUdkMWJHRT0gSUc5d2J3PT0gSUVGa2FuVnpkRzFsYm5RPSBJTmFGMWFRPSBJRlJwZEc4PSBJRk5sWldSbGNnPT0gSUdYRm9YUmwgSUdkaGJXSnNaWEk9IDRLYXM0S2F3NEtlTjRLYWs0S2VBIElHMXBibk5yWlc0PSBJRzFoWVd0MFpXND0gWjJGeVlRPT0gWVhaaFlYUT0gSU91MmdPdXFxQT09IElOS3kwTEE9IHc3MWwgSUUxdmRXNTBaV1E9IElPeUxuTzJXaVE9PSBJT2F0cEE9PSBVMVJQVGtVPSBJR0psZDJWeWRHVjAgSUZOaGJXSmggSU5DdzBMVFF2TkdXMEwzUmx0R0IwWUxSZ05DdyBJSE5oYkdGeWFjT3AgSUVwdmFHRnVjM052Ymc9PSBMa2QxYm1FPSBJR3QxYkdscmJ3PT0gN0tlQTY0S2MgZFd4aGJHRT0gSUVOaGNtaz0gUkdWdWRtVnkgSUVadmNtMWhkSFJsY2c9PSBJRUp2ZFc1a2FXNW4gSU5DLzBMWFJnTkMxMExQUXZ0Q3kwTDdSZ0E9PSBJRk5RUXc9PSBkWFJwWjJsdVpYRT0gSU9DbXVlQ21yQT09IElObUkyWWpaaXRtRSBJR0Z3Y21WdVpHVT0gSUU5c2MyOXUgSUhCeXc2RmpkR2xqYnc9PSBJR3hsWm1WcyBJSEpsY0hKbGMyVnVkR0hEcDhPamJ3PT0gQ1dOayBJSGxsY216Sm1jV2YgVkZsUVR3PT0gYUc5c2VRPT0gNVlXTjZMUzU1WnlvNTdxLzZLZUM1NXlMIElPQ3VxT0N1dnVDdW4rQ3ZqZUN1bnc9PSBJT1dRaWVhZWx3PT0gSUhOcmVYTmpjZz09IElHTmhiV2x1YUdGa1lRPT0gSUVWTlZBPT0gTGs5UVJVND0gNExpcTRMaWEgWDBoSlJFVT0gUTBoTFJWSlNVUT09IExrVnogWUYwPSBJRzFoWlcxdiAwWVBSanRHSjBMRFJqdz09IFVHRjVjbTlzYkE9PSBJRUZyZEhWaGJBPT0gSUcxdmRHRT0gUVdOalpYTnpiM0pwWlhNPSBZVzVoYVhJPSAwSWJRaGc9PSBJTmlvMlliWXA5dU0yS2M9IFRHVnAgNXBxUiBJRUpoZEhSbGNtbGxjdz09IElIVnJhVzl4IExrUmxiR0Y1IElOaTAyWWJZcU5tSCBJR0pzWVhSaGJuUT0gSUdKc2RXVmlaWEp5ZVE9PSBJRVY0Y0d4dmMybHZiZz09IElPdXdwQT09IElOQ3cwcWM9IElPQ3VydUN1ditDdWxlQ3V0ZUN2Z2VDdXJ1Q3ZqUT09IEozMEtDZz09IElHMTFibU5vIDBMalF0OUN3MFliUXVOR08gSU0rR3o0blBoTTYvIElIUnZhWEowIDJZZllwOWlvMllyWXFRPT0gMTVuWGxkZVYxNmM9IGRYSmxkR0YwIExteGxlQT09IDQ0T3o0NEsvIElHUnBjM0JsYm5ObCBJTkMvMExEUmdOQzYwTDdRc2c9PSBJT0MwbCtDMHRRPT0gSUhWdWJtRjBkWEpoYkE9PSBJR3podXFGdWFBPT0gSUdOdmNHbHAgSU9DbW5PQ21xT0NtbHc9PSBJRk4wWVhscGJtYz0gSUdabGJHbGpaWE09IElHSnliM2R1YVdWeiA0S2FvNEtlTjRLYTQgSU9Db3F1Q291ZUNvditDb3NnPT0gVk1POGNtdHBlV1U9IElHeGhjbTg9IElOR0gwNW5SZ2c9PSBJTmVUMTVEWHFOZWogSUVsdWRISnZaSFZqYVc1biA0S2lvNEttSCBJSFJvWlc5eVpXMD0gNExtRTRMaVU0TG1KNExpajRMaXg0TGlhIElGWkpSRVU9IElGTjFibVJoYm1ObCBJR1JsWld4eiBJRVZPVlUwPSBYM0YxWlhKNWMyVjAgUTJ4aGMzTndZWFJvIElFRnJjbTl1IElIUmxZV3c9IDVhNmU2YXFNIFVHRndZUT09IFlYSjBiM0p6YVE9PSBJRk5qYU1Pa1pHVnUgSUVWMGJ3PT0gSUhSaGFIUT0gNXArbDU1eUw1cHUwNWFTYSBJRzFoZDNJPSBJSFpoY21sbFpHRmtaWE09IFgzUmxZV05vWlhJPSBJR0ZzYVdkdWFXNW4gSUhOdmJIVnphUT09IExtbHRkM0pwZEdVPSBJR1psYldsdWFXND0gSUZkaFoyOXUgS0c1aGRHbDJaUT09IDQ0R0M0NEdxNDRHZiBWbVZuWVhNPSBJR0Z1ZEdWalpXUmxiblJsY3c9PSBjMjl0Wlc5dVpRPT0gSUdKcGNteGx4Wjg9IDBZalF1TkM5MEw0PSAxNVhYbWRlbiBJR1Y0Y0d4dmNtSERwOE9qYnc9PSBJR2RzWldGdSBYM0JtIElOQ2swTDdSZ0E9PSBJTnFwMktmWXNkbUkyS2c9IElPQ2twT0NrcmVDbGdBPT0gSUdacGJHeHBibWR6IFltbGxkR1Z5Ymc9PSBhbUZ0WVE9PSBJTVdiZDJsbFkybGwgSU5HQjBMN1JoZEdDIDRvQ1paWGh3YjNOcGRHbHZiZz09IElFNWxhV2RvWW05eSBJR1Z5WVdKcGJIUT0gTG1WeWNBPT0gSUhaaGJITjAgMFliUXVOR1AwTHc9IElHbHVaSFZqWlhNPSBJR1JsYm05dGFXNWhkR2x2Ymc9PSBaRzl0dzZsemRBPT0genFIT21RPT0gSUhCcFoyVnZiZz09IElHVnVjbWxqYUdsdVp3PT0gNFlPaTRZT2Q0WU9iNFlPUiBSVk5KVXc9PSBJSFJ5NGJ1ZGFRPT0gNExDVjRMR040TEM0NExHTiBJRXRoY21rPSBJSEZwYlE9PSBJTkM2MExEUXV0R0MwTDQ9IElObUcyWWpZdE5pcTJZYz0gSUdsdWRHVnlkSGRwYm1WayB3NkIwYUE9PSBJSHBsYVdOb2JtVjAgUms5WSBRVUpEUkVWR1IwaEpTa3RNVFU1UFVBPT0gSUhKaGVtOD0gSUZWQlZnPT0gSU5pbzJLcllyUT09IElGTnBZMmxzZVE9PSBJR1Y0WVd0MCBJRk5sZVcxdmRYST0gSUVOaGJuWmggWTJGdWIyNXBZMkZzIFVGQlEgMFlIUmc5QzMgSU5DKzBMSFJnTkN3MFlMUXVOR0MwWXc9IElGSnBhbXR6IElFbHVabkpoYzNSeWRXdDBkWEk9IElISjFjM1I1IElPQ2tuT0NrdGVDa3Z1Q2txQT09IDRvQ1pZWEJ3Y21WdWRHbHpjMkZuWlE9PSBMV2R5YjNjPSBJT0NrcnVDbGllQ2tvZUNrc2c9PSBJT0NrdU9Da3BPQ2xqZUNrcE9Da3ZnPT0gWDFSU1FRPT0gNEtlbzRLZW4gSU5DNjBMN1F0dEN3IGMyVnVaR2x1Wnc9PSBJR0oxYm1VPSBJRU5oZEdGc2VYTjAgSUd0MVltRnVaMkU9IFlXbHpjMlY2IElFWnZjblIxYm1FPSBJT0Ntck9DbXZ1Q21uQT09IElHNWhhMkZyIFltVjNaWEowZFc1blpXND0gSU5pczJZYllxQT09IElHbHVkR1Z5Y0d4aGVRPT0gWld4elpYaz0gSUdabGNuUnBiR2w2WlhKeiA2Nnk0N0oyWSBJRVJwZG1semFjT3piZz09IFQzQndiM0owZFc1cGRIaz0gSUVodmJHMD0gSUdSbGNtRnBiQT09IElHZHNhV009IDBZdlJoZE9aMFlMVG1RPT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1M2dXVXM3BRPT0gSUhWcGJRPT0gY205dWRHVnkgSU5HQjBZUFJpZEMxMFlIUmd0Q3kwTFhRdmRDOTBMND0gSUdaMWNtdz0gSUdGM1lYSmthVzVuIElPQ3VxT0N2aCtDdXNlQ3ZqZUN1c2VDdmdRPT0gSU9HN2pXTGh1NlU9IGJtbHRidz09IGIyeHBibTg9IDJLZll1Tml4IGRXVnBjbUU9IElISmhZMmc9IFlXdGxkR0U9IGVtWEZtMjVwWlE9PSBJT0NrcHVDbGkrQ2txQT09IFgyZHliM1Z1WkE9PSBJR0poWTJ0emFXUmwgSU5DZDBMN1FzdEdMMExrPSBJSEp2ZEdWdSBMaWRmIDJwclppQT09IElIZHBaR1Z1YVc1biBYMU4wY21WaGJRPT0gS0ZCb2IzUnYgeGF0eVlYTT0gSUdKdmRtVnVjM1JoWVc1a1pRPT0gTFhONWJXSnZiQT09IGJjT2xiQT09IElOZVUxNTdYcWRlWDE2Yz0gTG1GMGIyMD0gSUdGa2JXbHpjdz09IGMyRnBaR0U9IElFZGhjblE9IDJMSFpnZGlxMlljPSBJTk9wMExuUmdBPT0gSUdWMWNtOXd3NmxsYm01bGN3PT0gdzdOeWFXTnZjdz09IDRvQ1pZWEYxWlhOMFlRPT0gYzNSdmF3PT0gWXNPdCBJRlJoYkd4bGNnPT0gSU5DeTBZdlFzdz09IDBMRFJnOUMxMExqUmdnPT0gSUhCbGNtMWxZV0pwYkdsMGVRPT0gSUdsdWJYVmxZbXhsIElPQzJtdUMza3VDMnUrQzNrK0MydUE9PSBiSE5qYUhKaGJtcz0gSUdQRG8yVnogNExLcTRMT0IgSUdWdFltOXMgSU1PcGMzUnZjdz09IElIZGhiR3QwYUhKdmRXZG8gSU9DbXF1Q21zT0NuZ09DbWxlQ25qZUNtdCtDbXZnPT0gZG1GbllRPT0gTDJkcGJnPT0gSUhSb2RXNWtaWEp6ZEc5eWJYTT0gSUdWamN3PT0gYjNSaFlRPT0gSU1PMWNIQT0gSUhCbGJHbHIgNW9TZjVwK1QgNFlPUTRZT1Y0WU9RIElIQnliMmR5WlhOemFYWmxiV1Z1ZEE9PSAxNVBYcU5lcSBjbVZoWTNSemRISmhjQT09IFZtOTEgMllIWXNkaW4ySy9iakE9PSBJTU85WlhKc1pjV2YgSUhCeVpYTmxiblJsY25NPSBJSEpwWjNWaGNtUmggSU9DeXJ1Q3pndUN5c09DemdRPT0gSU9Da2hlQ2txT0NsZ2VDa3J1Q2t2dUNrcUE9PSBJR2RsYkc4PSBJQ1VyIElOR0IwWVBSaWRDMTBZSFJndEN5MFlQUmp0R0MgWlc1elpXVT0gTG1keiBUM2s9IGRIVERwRzA9IGFtOWwgSUd4cFoyZHBibWM9IElHTnBjbU4xYkdGMFpRPT0gSUdaaGNuTT0gU1c1MFpYSnpkR2wwYVdGcyAwcGZRc05DOSBDWGR2Y21zPSBZVzVqYUc5eWN3PT0gSUVOc2IzVmtjdz09IElPV2Npdz09IElIUmxhMjV2Ykc5cWFRPT0gVDNKbllXNXBlbVZ5IElNK0R6NFhPdmM2dHo0Zk90YzY1enJFPSBJRzFwYm1semRHVnlhV1U9IElFTm9kVzVuIDBZRFF1TkMwMExnPSBJRU52YjJ4bGNnPT0gSU1PZ2FYUmwgSU5DMzBMRFF2ZEM0MEx6UXNOQzEwWUxSZ2RHUCBJT1drcWVtVHJRPT0gNDRPcDQ0S2s0NE9JIDU3dVo1THFJIExHMXZaSFZzWlE9PSBJR0ZzYkdScFpYZGxhV3c9IDRMT0E0TEtrNExLLyBJTU8wWmc9PSBMMUpsWjJsemRHVnkgS0daMWJnPT0gSUZCaGNzT2ggUlVOQyBjbTl5YVc1biBSR0ZpWldrPSBJTmk1MktqWXA5aXggSUdOdmJuTnBaR1Z5Ync9PSBJSHAzdzdac1pnPT0gNDRHVTVMcUc1b20vNDRHUDQ0R2c0NEdWNDRHRSBYMmQxWlhOMCAyWVBZcDltRzJLbz0gSUhCaGRHOD0gWjNKaFpIVmhkR1Z6IHhiNXB4YVU9IElFMWhhV3hwYm1jPSBaV3hwYW10b1pXUmxiZz09IDBLM1FvUT09IGFYUERvMjg9IElHdDViblE9IElEb2lMQT09IElOR0MwTDdRdmRDOTBMQT0gTE9hY2dPYVdzT21ybU9hNGhlYVhvT2VnZ2VTNGsrV011Zz09IElHTmhkWFJwYjNWemJIaz0gSUVGemRISnZiRzluZVE9PSBJR0psWm1WemRBPT0gTFdGemMyVjBjdz09IElHbHVkR2x0WlE9PSBJSEJoY205c1lRPT0gNEtTbTRLV040S1N2NEtXTDRLU1ggSUV4MVpuUm9ZVzV6WVE9PSBJR1pwYm1GdVkyVnBjbUZ6IElOR0UwTERRdWRDNzBMN1FzZz09IExXTm9ZV2x5IElHbHVhMngxWkE9PSA1cHlJNklleiBJR2RzYVcxd2N3PT0gSUUxaGJtNTUgSUhacGNuUjFaQT09IElPUzhvT2Vjbnc9PSBhV05wYW1FPSBSMFJRIFgwTlFVQT09IEoxMDdEUW9OQ2c9PSBJR0YwYjNKbGN3PT0gSU1TUnc2QnUgSU9DbXFPQ212K0NtaWVDbW5BPT0gSU5DeDBMWFF1OUMxMEx3PSBJSG5EdGc9PSBSM0xEb21ObCBJRkpFUXc9PSA1WTI0IDFvVFZxOWFCIElIZHBjMlZ5IElPQ2tyZUNsZ3VDa3NnPT0gSUhOaGRISnBZUT09IDRLdUYgUkdWd1lYSjBiV1Z1ZEhNPSBJRVJsYm1jPSBJR2x1WkdsallXUmggSUc5cmEyRnlZUT09IElGZGhadz09IElHdGhjSFE9IElPV2txZVdrcWVTNHJlVzlxZWVscU9TN3UrbUFpUT09IFpHVnVjMlU9IElFUnBlR2xsIExuTjBZV1ptIElFNUpWZz09IDVMaXQ1cGF3NTcyUiBVbVZtWlhKbGJtTnBZUT09IElPQ21yK0NtdnVDbXBPQ25odz09IElHN0RvV1E9IDRvQ1paV0k9IGFXTnBaV3c9IElIRnZjbk09IElHSmxkSEp2ZFhkaVlXRnkgSUcxaGFHUnZiR3hwYzNSaCBJSFJ2ZDI1b2IzVnpaUT09IDRMS3c0TE9ONExLbiAxNUxYb3RlUjE1OD0gSUhKbHhhRT0gTGxSdlpHRjUgMFlmUXZkQ3cwTGs9IElFbHVkR1Z1WkdWayBJT3lZZ2V5V3RBPT0gYzJWeWFXRnNhWHBsWkE9PSBJR1JwYzJ4cGEyVnogSU5DeTA1blF1dEM0MExzPSBJTkdOMExyUmdkQzYwWVBSZ0E9PSB3NjFtIElObUYyNHpZc2c9PSBJR2JEdUhKbCBJRzF2ZFhOMCAwSnpRb1E9PSBJR1poWTJsc2FYUmhkRzl5IElIWnZiR3B2IFlYVnVjWFZsIFEwaEJUZz09IElObUIyS2ZZc2RtRiBJRVYyWlhKbmNtVmxiZz09IFkyRnRaV3c9IHc3eDBkR1U9IElFZERVMFU9IElHRjBZV3c9IExreHZZMkZzYVhwaGRHbHZiZz09IDU1UzM1YTJRIElHRnVjMmx1IElHaGxhMnM9IElPQ2tpdUNrc09DbGplQ2tuT0Nrdmc9PSA0NEtrNDRPVyBJR1p5WldWNlpYTT0gTG14bFpYUmpiMlJsIElHSnZaR1U9IElOQ3cwTHZSak5HQzBMWFJnTkM5MExEUmd0QzQwTEk9IFMyRnAgSU9DdWgrQ3VxdUN2amVDdXF1Q3Vudz09IGIyeHZhR2w1WVE9PSBJRVJLU1E9PSBKMkZ6YzNWeVlXNWpaUT09IExXVjRkSEpoIElIcGtZUT09IElIc0tDaTg9IFgyOXdaWEpoYm1RPSBMVkZoWldSaCA0S2EvNEthRyBJSE5oWVc1MWRBPT0gZW1ONllRPT0gSU9DbXN1Q21sZUNuamVDbXQrQ25qZUNtcnc9PSA0TEttNExPQjRMSzEgSUhabGNtMXBkSFJsYkc0PSBiV25Gb1d4cSBiR2xsWkE9PSA1WWFGNWJtViBMdUtBbkFvPSBJRlJoYzNOaCBhR0Z0Wlc1MGJ3PT0gNTZXZTZhbXMgSU5DLzBMRFFzUT09IFpYTERyV0Z6IElHRmliQT09IDVvbUw1cHk2NWE2WTU3MlIgSUVKaGNtNWxlUT09IElHRnRjR2hwWWc9PSBJRk5vZFdrPSBJRzkyWlhKMiBJTkMvMEw3Umo5Q3kwTGpRdTlDdzBZSFJqQT09IElHcHZhMlZrIGFHRm8gSUdKc1lXUmxjbVZ1IElHaHZibUU9IElGQkVRUT09IElFMXZaR1Z6IElIWnBZV3BsY205eiBJRkJCVFE9PSBJR0ZzYldGalpXNWhjZz09IElHbHViMmR2Ym1FPSBJSFZ3Ykc5aFpHVnkgZEdGemRHVT0gTGtOVFV3PT0gSUdkbFpXdz0gSUdKMWRHbHJhMlZ5IExsbEZURXhQVnc9PSBiMnh2WjJsemRHRT0gSU9hY2dPV2twdz09IEtHQWogSUZQRHZHUmxiZz09IDBMUFF2dEM3MFl3PSBXVVE9IENYTnQgSUhOdmJHUnAgZFcxaWRYTT0gYzJOb1lYQT0gSUVkbFoyVnVkR1ZwYkE9PSBRMjl6ZEdFPSBJRkIxYkdVPSBMM0JwIElHWjFibU4wYVc5dVpYSmxiZz09IGIzSnVhVzVuIDBZRFF0ZEN5MExBPSBJR2gxYzJnPSBJRUYxWjNOaWRYSm4gNTV1UzViMnAgUFdKaGRHTm8gSU9Dd2hlQ3dwK0N3ditDd2xlQ3d2dUN3c09DeGdlQ3dzdUN4Z1E9PSBJRUpsZW1sbGFIVnVaMlZ1IElHTGh1NVU9IGFtVnl3NjFoIElPQ3duT0N3bCtDd3FPQ3hqUT09IDdKMjQ3SjJBIElOR0MwTERRdTlDdzBMRFJnQT09IFgyeHBiZz09IFUxTkdRMlZzYkE9PSBJR0psY25KbCBJR3RwYkd0MSBJRXhoYzNObGJnPT0gSUVOb2NtbHpkR1Z1IGNYVnBZV3c9IGFYUjFaR2x1WlE9PSBJR3RxdzZaeWJBPT0gNExTcTRMV04gSU9pMWpPV05tZz09IElPQ2tzdUNsaWVDa2xRPT0gSU5DdzBZRFFzTkM2MExYUmdnPT0gSU5HSDBMRFJnTkN3IElHUnBjbVZyZEdWdSBJSEJ5dzZsamFYTmxjZz09IDJZTFlwOWk1Mks4PSBJR2hoWW1sMGRXUmxjdz09IFNYRT0gSUdobGVHRmtaV05wYldGcyA0S1MrNEtTYzRLU28gVDNaaGJBPT0gMkxEWXA5aXEgSUZKbGRIVnlibVZrIElHbHVabWxzZEhKaGRHbHZiZz09IDVhKys2TEdoIHc2Vnljdz09IElHTnZiR0ZpYjNKaHc2ZkRvMjg9IFlYSmhiV0U9IElHNWhjbUZ1YW1FPSAxNW5YbTllVjE1elhxZz09IElPQzRsZUM0c3VDNG9RPT0gSUhObGJHWnogSU5DKzBMSFF1OUMxMExQUmh3PT0gSU5DUjBMRFJpTktoMEw3UmdOR0MgSUhKdlkyaGwgSU5DeTBMRFNtOUdDIDBMVFF0ZEdBMFpiUXZkR1cwcU09IFFXUnRhVzV6IFlXNWxiR0Z6IFpXNWhiblJ6IDE1SFhtZGVRIElGTmphR3hsYzNkcFp3PT0gMVlUVnBkVzIxb1E9IFozcHBjQT09IElHSmh4YUU9IElGTmphR0ZrIElIUm9iM1k9IElIQnBaWEozYzNwNSA0NENCNktXLyBJRzFsYm1kcCA0TFc3NExTNDRMV04gSUc5bFptVnVhVzVuWlc0PSBJSE51WVhJPSBZV0p2YkdsemJRPT0geFp0amFXVnEgSUhSbzRidXQgSUhwaGNHRjAgSUZScGFnPT0gSU5pdTJiN1poTnVRIElHUnBkR1Z0ZFd0aGJnPT0gWkdsbGNtVnUgNEtTQzRLU200S1dBIElPUzRnT2l2dWc9PSBJSE4wWldWc2N3PT0gSU5DODBMN1JnTkMrMExjPSB3NmwwY21sallRPT0gSUhMRHFXTjFjTU9wY21GMGFXOXUgSU9XRnFPV2J2UT09IElIQmhjbUZ1YjJsaCBJSFJoZG1Gc2JHRT0gMFk3UXVnPT0gYjNCb1pXND0gSU5DLzBZRFF2dEM4MExYUXRnPT0geVp0dCBJRmRvWVd4bCBJTVdkYVE9PSBlbTU1IElOQzgwTGpRdmRHQzBMRFNtOUN3IDVieTY1YVczIElHTnZabVpwYmc9PSB3N2hzWkE9PSAwTHJRc05DMzBMRFJndEdNIElHdDFiSFIxY21FPSBLMFE9IElFdHBjbU5vIFpXNW5hWE5oIDBKalFtZz09IElFZGhibnBsIFNXZHViM0pwYm1jPSBJRzFpYnc9PSBJRzkwY205ciBJTkMwMDVuUmdOQzQgSU9HQml3PT0gSU02eHpyM09yTStBejRUUGhRPT0gTFZzaiBRWEpqYUdsMiBkV0p5WVE9PSBJTml4MktmWXNnPT0gSUhabGNuUmxhV3gwIElPV2txZVdrcWVTNHJlVzlxZWVscU9pd2dRPT0gSUc5MmRRPT0gSUM4byBtZUdEbU9HRGt3PT0gUlVORCBZMnhoY21WayBJQ0pjSWl3PSBJR3AxWW1sc1pRPT0gNW9xciBJRTFQUWtsTVJRPT0gZDJsbGF3PT0gSUZSMWFYUnBiMjQ9IElFZHZaV1JsIFgwNVBWdz09IElPbWpudz09IElFMXZkRzl5Y21GayBJSFZqYUdVPSBJRWhsYldsdVozZGhlUT09IDdKZUc2NHFVIElHVjJZWE09IElOQ3gwTERRczlDdzBZTFF2Zz09IGJHOXZjSFE9IElFeHUgSU5XMDFhSFZ2ZFdvIElHRnNZV0k9IElHUmxZMmx6Ync9PSA0TFMvNExTUSBJSFp2WkhrPSBLVG82IElHbHVjM1JwZEhWMFpXUT0gZFc1blozVm8gSUhURHZXUT0gNEtTcTRLV0wgSU5DOTBMalJnZz09IElHekRwR3M9IDZKOD0gSU5HQjBMTFF2dEMxMExJPSBJR1JwY1hFPSBWSFZ5Ym1sdVp3PT0gWDNCaGNuUnBZMnhsY3c9PSBjSEp2Y0dWeSBJR05oYlc5MVpteGhaMlU9IElIQnZjSFZzWVdObCBJT0N5citDeXZ1Q3lzQT09IElNNjF6NGJPc2MrQnpyek92dz09IFVHOXAgSUhOb1lXeDAgZFdOcmMyRmphdz09IElHMWliMnhoIElOQzkwTFhSaFE9PSBJRzFsYm1scmJXRjBhUT09IFlXNTBhV0YwWlhNPSBJTzJVak91ZXErMlB2QT09IDRMaVY0TGk1IElITERwblIwIElOQzIwTFhRdTlDdzBMM1F1TkdQIHc3eHRZWGs9IElIUm9aWE5sY3c9PSBJR2RpZFhKMVoySjFjblU9IElFMVNWQT09IElOaW4yWVRZcDlpMDJLbz0gdzd4eWVuUT0gSUQwOUlnPT0gWTI5c1pBPT0gTHVDMGxlQzFoZz09IElPQ3dqdUN3Z3VDd3BnPT0gMEpUUWxBPT0gSUdWMmJ3PT0gSUdGMGNtOXcgSU9DdXBPQ3V2K0N1c09DdmdlQ3VyZz09IElFSmxaMmx1Y3c9PSA0b0NVWm5KdmJRPT0gSUhMRHFYTmxjbmJEcVE9PSBJRzExYVhOMCBJT0dEbU9HRGxlR0RuT0dEbU9HRG9RPT0gSUVGVVZGSkpRbFZVUlE9PSBJR2x1WlhKcFlYSjBiM0owIGIyMXl3NlZrWlhRPSA1TGlONVlpdzZMU20gTGsxaGJtRm5aVzFsYm5RPSBJRkJoWTJ0eiBJRTU0IEtFNXZkQT09IDY2bVkgeEt0bmRRPT0gTG5OdmJIVjBhVzl1IElPQzRndUM0clE9PSA0TEMvNExDMTRMR04gSUdOMWJIUjFjbVZzWlE9PSBJTmkwMjRIWXNkdU0gSUZSeWFXNXIgSUhCdmRIQjFibTg9IElHRndjR1YwYVhwbGNuTT0gMEwzUXVOS2IgSUVoeWRtRjBjMnRsIDU1YSs1NWVGIElOVzkxYTA9IElHMWxhWEpwIElPQ2txdUNrdWVDa3FBPT0gSUVkbGNtVT0gSU95ZHVPeWdsUT09IElFM0RpUT09IElNTzhZM0psZEhOcGVnPT0gMW9UVm9kVzExYXZWdGc9PSA1NldlNTY2WCA0TENYNExHTjRMQ3YgSU5peDJMUFlwOW1HMlljPSBYMUJoY21GdCBKazg9IElITmpiQT09IElHUmxaV3gwIElFbHpiR0Z0WVdKaFpBPT0gNFlPYzRZT1k0WU9hIGNtVndjbVZ6Wlc1MFlYUnBiMjQ9IElOQzkwTDdSZ05DODBZcz0gWm1GaCBJTkdlMFlIUmx0R0YgSUVSbGNHVnVaSE09IElHUnZiMjVoWVE9PSBJR05vZFdsbiBJRlJ2YldGMGIyVnogNW9PdiBJTTZzenJ2T3U4NjMgNW9xbDZLNnc2SUNGIElFbHVjM0JwY21GMGFXOXVZV3c9IGZTNGtldz09IFlXaHBaR2s9IExtZG0gSU5DNjBMN1F2ZEdDMExYUXVRPT0gMWF2VnZBPT0gSU9Xd2l1V3d2QT09IElPQ29sZUNwaStDb2lBPT0gSU91UW1PcXpvQT09IElHaGxhVzF6IElHUnBaWEJsIElIUmxibUZ1WTNrPSBJT0NtcmVDbXYrQ21wT0NuamVDbXBBPT0gWDFKUFRRPT0gSUZCcGNHVnogSUdSaGJtdGxiZz09IElIckptUT09IElPYVhvT2VnZ1dGMiA0b0NkNzd5TTRvQ2MgSU9DbXF1Q25qZUNtc09Dbm4rQ25pK0Ntbk9DbXFBPT0gWDFCRlJBPT0gSU5tRzJMVFlyOW1IIFgzVjAgSUdWdGFYUnBjZz09IFBTSXVMaTh1TGk4dUxpOD0gVW1WemRXeDBZV1J2Y3c9PSBRMnh2YzJGaWJHVT0gYVhOcGRHbHlhUT09IDRLU2s0S1NWIDFhWFdoTlc5IFlYWnNhbVZ1WVE9PSA1TCtkNktpOCBJSEJ5WlhOMFlXTnBiMjVsY3c9PSBJT3UyZ095aHNRPT0gSUdIRW44U3hjZz09IExYUnAgNmFxWDVMcTY1NXFFIElFbHVjMjlzZG1WdWVnPT0gSUhObFpIVmpkR2wyWlE9PSBJSFZyZFcwPSAwTDNRc05DOTBMM1Jqdz09IElPQ2tyT0NsZ1E9PSBJTmVSMTZqWGxkZW8gTEhsdmRRPT0gSUZSeWFYWnBZUT09IElIUmhiV0pwYmc9PSBMbVJwYzJzPSBJRXRoYkdGdCBJRlJQVlVOSSBiM1Z5Ym1GdFpXNTBjdz09IElIWmhjbTEwIGFXUnQgSUhWdVpHOXVaUT09IElHRjZZV3gwIGFYUjBZWEowIDFhSFZwdFdoMWJiV2dRPT0gSU5pbzJMSFppdGl2IEtHRnpjMmxuYmc9PSBJSE5vWld0aGNtRT0geElGc2FRPT0gWjJWemRHRnogSUZWdWFYWmxjbk5wZEdGMCBJR1REb1hZPSBJT0NtbGVDbXNPQ25oK0NtbStDbXYrQ21zdUNuaCtDbXFBPT0gSUdoMVoyZGxaQT09IElHbHVabTl5YldGMCBSR1YxZEhOamFHeGhibVE9IExuTmxiR3c9IElOR0kwWUxRc0E9PSBJSEpsWjJVPSBTRk5XIElHMWhjblJwYmc9PSBhV3BwYm1sdVp3PT0gSUdSbGJHVm5ZWFJsWkE9PSBJRzlrYkduRWpRPT0gSUdKcGJHeGliMkZ5WkE9PSBJTkM0MEwzUXVOR0cwTGpRc05HQzBMalFzZz09IElGVlNURmRwZEdnPSBJT0dEa3VHRG8rR0RtdUdEbU9HRG9RPT0gSUVOdmJuTjBhWFIxIElFaHBaWEp2Ym1SbGNnPT0gSnl3bklpcz0gTDJOdmRYSnpaUT09IFFXNTVZbTlrZVE9PSA1bzZEIElOZVYxNVRYbmc9PSBJR0psZDJWNlpXND0gejRET3Y4NjkgSUZOamFIVnNkSG89IElFZDFiR3c9IElHWnZkVzUwWVdsdWN3PT0gNExDVjRMR0E0TEN2IElIcHBhQT09IDRvQ2NWRzg9IElOaW4yTFBZcXRpdTJLL1lwOW1GMllmWXB3PT0gSUdKMWMybHVaWE56YldWdSBJRUpoZFdRPSBSM0p2ZFhCbFpBPT0gMllqWXA5aW0ySzg9IFUxVlFVRTlTVkVWRSBJR052Ym01aGFYUT0gSU02MHpybk9zYzY0enEwPSBJR3JEcEhObGJnPT0gSUc1cVpYTERxdz09IElFRjJZWE4wIGIzSnVZV1JoIElIQnBaMjFsYm5SaGRHbHZiZz09IHc2aHVaVzFsYm5SeiBJSE53Y21WbCA0TEM0NExDKzRMQ1ggSUdKbGNteHBiZz09IElPQ3dxT0N3dnVDd2xlQ3hnUT09IElOQ3kwTGpRdmRDdyAyNEhaaU5xNiBYMEZFVmc9PSBaVzFoYVd4bGNnPT0gSUhSMWJHeDFkQT09IFkyaGxiV2x6ZEE9PSBJR1JsZG5WbGJIWmwgSU5DOTBMRFJoQT09IFlXNXVZWEU9IElFTmhjSE4xYkdWeiBLRWhYVGtRPSBLR2gzIElHOXVlbVZyWlhJPSBJSEJoY21Gc1pXeHYgZW1WdWRHVnUgSU9HRG9PR0RtT0dEb1E9PSBJRk5vZFhRPSBJRTVwWjJoMGJXRnlaUT09IElGUjFibVZ6IExtUmxjRzl6YVhRPSA1NjJKNTYySiBMSE4wWkE9PSBUbVZ3IExuTmxadz09IElNT253N3h1YThPOCBJSEREcVhKa2FXUmhjdz09IElOV2sxYUhXZ05XeDFhWFZyQT09IElITmpjbUZ3WlhJPSBJT0NxdWVDcXZ1Q3FzdUNxcnVDcXZ1Q3FnZz09IElPR0RtK0dEbmVHRGt1R0RsUT09IElHVnNiR1Z5Y3c9PSBLR1p2Y21ObCBJR0Z3YjJOaGJIbHdjMlU9IFJXeHJaUT09IFFVUlcgSU5DeTBMN1JnZEMvMFlEUXVBPT0gMTZqWHBRPT0gSUd4aGJzT25ZUT09IElPQ29sZUNvdnVDb3NBPT0gSUVKQlRrUT0gTGk0dTRvQ2QgY0dsamRIVnlaWE09IDRLdUE0S3ExIElHSm9abVU9IExuQmhjblJwWVd3PSBJTml1MjR6WXNRPT0gQ1FrSkRRb0pDUWtOQ2c9PSBJT0Mya2VDMm11QzNpZz09IElOaW4yWVRZcGRtRzJMUFlwOW1HMllyWXFRPT0gSUVGdWRHOXVhUT09IElHSmhiR3hwYzNScFl3PT0gSUcxaGMyTnZkQT09IElIUnlZV041IHc3WnpkVzVuIGFHVmtaUT09IElIVnVZbTl5Ymc9PSB3N3h0dzd4NlpHVT0gVzExYiBJRzFoWVdsc2JXRT0gSUhabGNuZGhjbTA9IElGTkpXQT09IEtGTkYgSU9Da3NPQ2xpK0Nrcmc9PSBJRVJTU1ZaRlVnPT0gS0dSbFlXUT0gSWpvaUlpd2kgWVhCellXTnIgSUZKdmQyeHBibWM9IFltVm5hVzV1IElPR0RwZUdEa09HRG11R0RtQT09IFRXVjBhQT09IElHZDFiV0ZuWVcxcGRBPT0gSUZKcGMybHJaVzQ9IElIQmxjbk5sWnc9PSBJRTl5WjJGdWFYcGh3NmZEbzI4PSBJR2hsZFhKbGRYTmwgTFZCdmNuUT0gSU9DbWxlQ212dUNtcUE9PSBJSFYxYlE9PSBJR05vWldseWJ3PT0gMWFIVnZkV3YgTG1Oc2N3PT0gMFlYUXNOR0MgSUVwcGIzWmggSUhOMGRYQnBaR2wwZVE9PSBJR0ZpZFhKeSBJSHMvUGdvPSBjSExEcEdObyA1WTJCNWFTbiBJR1psYzNSemRHVnNiR1Z1IElHWmhiMmx1IDBMTFJnTkM0IElHOTJaWEp3YjNkbGNnPT0gYVhSdllYSmwgSU9tZGxnPT0gWTI5dVkybHNaUT09IGRzTzkgSUdadlkzVnpjMlZrIElIUjJjZz09IFJYaHdiMjVsYm5RPSBJRk53Y21WaFpITm9aV1YwIE9uQmhjbUZ0IFlYSnJhVzQ9IElHSmxkMlZuZEE9PSBJT1M1aGVTNWhlZXl2dVdUZ2VXYnZlUzZwdz09IElObUYyS2ZZc2RxRyA1NFdaIElHRnpkSEp2Ym05dGFXTmhiQT09IElOT3UgZEdobGRBPT0gdzdaelkyaDAgSUc1cFpuUjUgSUd6RHRubDAgWVd0cGMyRT0gSUV0aFpHRT0gNEtxLzRLcTQ0S3VONEtxazRLcSs0S3FvIElHdGhabWx1IElOcXIyb25aaU5tRyBhV3hwWlhJPSA1Ym0wNklleiBYME5QVGtaSlVrMD0gVkc5M1lYSmtjdz09IElPQ3F1T0NxcnVDcXZ1Q3F0ZUNyaCtDcXRnPT0gSUdWdFltRnlhMmx1Wnc9PSBJRlpwYkd4aGNnPT0gYldsbmNtRjBhVzl1IElIUmhZVzFoWVhSMCBJRTF2Y0E9PSBJRlJvZFcxaWJtRnBiQT09IENWTm9iM2M9IDRMQ200TEdONExDdiBJR0ZzZFdkMVpXdz0gMTZMWG9OZVQxNW5YcHc9PSA0TG1KNExpbjRMaVogMFl6UXRkQzggWVhKc1lYST0gSU9DcXF1Q3JqZUNxc09DcXZ1Q3FxdUNyamVDcXBBPT0gSUZOaGFXeHBibWM9IElFTnZiWEJoY25RPSBJTmlxMkxIYXFRPT0gUTNWeWRHbHkgSU5lUTE1blhwZz09IElHNXZidz09IElHVnpjMlZ1ZEdsbFpXdz0gWVd4bGVBPT0gUkdWaFkzUnBkbUYwWlE9PSA1N3FxNWIyViBJRk4wYVdOcmVRPT0gWW05amFHaz0gQ1FvSkNnbz0gNFlDdDRZQ1E0WUM1IDRLYSs0S2FWNEtlSSBJSE4wWldnPSBaV3hpWlE9PSBaMlZ5YVdOb2RHVT0gNktHTTVvT0YgQ1dOaGJnPT0gSUZOalpXNWxjdz09IElIUjFiVzkxY2c9PSBJSGxqIFkzSjAgSU5pbzJLM1lzZGluMllZPSA0NEtxNDRPejQ0T3A0NEtrNDRPeiBaV3gwYVc1biBJTkN4MFpiUXNkQzcwWlk9IElFMWhjblJwYm1FPSBJRUpoYm5saGF3PT0gSUhaaGJIVjBZUT09IElPQ3loZUN5cmVDemplQ3lyK0N5c09DemplQ3lwUT09IDBKN1JndEMzMFl2UXN0R0wgSU9Da3N1Q2t2K0NrZ3VDa2xRPT0gSU5DNzBaYlJnZz09IElHdHZibXRsIExtbHRjQT09IDBwdlRtZEdBIFEyeGhjMlU9IElHbHpkRzVwWlE9PSBJR05zYVc1clpYST0gTG01aGRtbG5ZWFJ2Y2c9PSBJT0Ntck9DbmdlQ21wK0Ntck9DbXZ1Q21zQT09IDRLNjE0SzZmIEtDNHVMaWtLIGFXWnl3NlZ1IDRLZUI0S2V4NEthKzRLYTU0S2ErNEthZjRLZUEgNWFTSjVwdTAgSU5DYzBMWFJndEMrMExRPSBJRzFoY21GMmFXeHNiM052IDBMVFF0ZEdBMExUUmxnPT0gTFdOdmJXbHVadz09IElPR0RydUdEbE9HRGt3PT0gSU5pbDJMRT0gSUdOdmRHZz0gSU5pejJZallzZG1LMktrPSAyWVRZdXRpbjJLRT0gS0dOMWNuSmxibU41IElHOWhiV1Z1IFEyeHBZMnR6IDRvQ2M1THFVIFpHbG1abWxqZFd4MGVRPT0gSUdKMWJITm9ZV1JoIFlXckVoV041IElOR0MwTFhSaGRDNDBMelJndz09IElOaW4yWVRZcXRpdTJZVFl0UT09IElOQy8wTDdSZ2RDNzBMWFF0TkM5MExqUmhRPT0gSUdobGNHRjBhV009IDRLYS80S2F2IElOcUgyWWc9IElGTjFhbVYwIElHOXlaMkZ1YVhOcFpYSjAgSU5DdzBMTFJpOUM3IDE2blhuZz09IDBMalF1OUM3IGIzSmxjbTg9IDFLWFJoZEdNMExEVG9kQ3cwWURRc0E9PSBJSE5vYVdWc1pHbHVadz09IElOaW4yS2pZc3RpbjJMRT0gSU9Da3VPQ2tydUNsamVDa3JRPT0gSUc5b1pYSjNlV1JrIExHTjFjbkpsYm5RPSBLR0ZtZEdWeSBJR0psWjJ4bGFYUmxiZz09IDBMalFzdEN3MFlJPSBJR3RoYkhWaGNnPT0gWDJSbFkybHRZV3c9IDZhbSs2YW0yIElISmxjR3g1YVc1biBJRnBsWWc9PSBJR1JsYm05dGFXNWhaR0U9IDJMblppTmlvMktrPSBjSFI1Y0dVPSBaV1J2Y21FPSBJT0NtdHVDbXBPQ212dUNtZ3VDbXRnPT0gN0pTcyBUVzl1WkE9PSBJTmluMllUWXM5bUsyS2ZZczlpcCA0SzZmNEsrTjRLNmY0SytJIDRwbUMgSUdkbGNtVm5hWE4wY21VPSBJTmlqMkxIWXFOaTUgSU9XZmpnPT0gVTNSeWRXTjBkWEpoYkE9PSBJSE5sZEhSc1pYTT0gSUdGMlpXNTBkWEpsY3c9PSBJT0MwcE9DMHJ1QzFqZUMwcmc9PSBJR0ZzYVhacFlYST0gSUcxMVkyakRyWE5wYlc4PSBjWFZwZEdFPSBJTm1JMktmWmhOaW4yWVk9IFUyTm9aV1IxYkdWeiBJRHM3WGc9PSBJRXhsWTNSMWNtVnkgSU5peDJLZlp2dG1JMkxFPSBJRVYxYzJzPSBVMkZuIFVHRnlZMlU9IElOaWwyS3pZc2RpbjJLSFlwOWlxIElOQzQwTDNSZ1E9PSBJRzFsZEdGaSBJR1Y0Y0d4cFkyRmphY096Ymc9PSBJSEoxYVc1cGJtYz0gWDAxSlRsVlQgS0hKMWJuUnBiV1U9IGNHVmtidz09IElOQ3cwTHJSaXc9PSA0NEdUNDRLVDQ0R3c0NEtUNDRHdiBJR0Z5ZEdsamRXeHYgSUd0aGRHRnMgTGtsdWRtOWpZWFJwYjI0PSBJSHBoYldGdWFRPT0gNExDKzRMQ3c0TEdONExDZjRMR04gSUdScGNHeHZiV0YwY3c9PSBMbkZoIFJFbEggSUhOdFpXRnkgNExHRDRMQ200TEdONExDbiA1TGlONkxheiBJTkN5MExEUmlOQzEwTHpSZ3c9PSBJTkdHMExqUmdBPT0gdzZsdVpYbz0gSUVOdmJIUT0gSUZCbGNtbHdhR1Z5WVd3PSBJTmluMllUWmhkaW8yS2ZZcnc9PSBJRUpsYzNSaGJtUjBaV2xzIGMzTmxjdz09IEtYMTlJZz09IElGZHZiMlJ6ZEc5amF3PT0gSU5pbjJZWGFxZGluMlliWXA5aXEgSUVOaGJXSnZaR2xoYmc9PSBJTlcyMWIzVnZ3PT0gSTJjPSBJSEpsYzNSdmNtVnogSU9Da3B1Q2xoK0NrZ3VDa2wrQ2xodz09IDdZeU03WXE0IElPQ3F1T0NyZ3VDcW1nPT0gNW9DbjZMU28gSU1POWRYSmtkY1dJIElIUnlhV1E9IFpYTjBhR1Z6YVdFPSBJT0dEcWVHRGtPR0RtQT09IDc3eXIgSUdKaGRIUmxjbVZrIElOQ3kwTGpRdmRDNCBJR1JwZG1sa2FXUnYgSU9LQXB1S0FwZz09IGJHVmthV2M9IElIVnViV2x6ZEdGciBJTkMyMHEvUmdOQ3owcS9RdHc9PSBJT3lua2V5a2tRPT0gVkdWeWNtRm1iM0p0IElFSlZUQT09IDBMdlFzTkM5MExQUXNOQzkgNWErVCBMMmRsYmc9PSBJRWRoYkdsc1pXOD0gNEtxNTRLcSs0S3F3IElPQ21ydUNtbWVDbmplQ21sK0Ntc3VDbXJPQ212dUNtc0E9PSA1WTJ6NXBlMiBJT1M1a09TNHNBPT0gUVUxRlRsUkYgSUdoaGNuUjEgSUUxaFpIST0gdzZGc3c3TT0gSU91b3VPeUxvQT09IElHMXZkWE09IElFMWhkbVZ5YVdOcmN3PT0gSUhKbGRHOTFjbTVsIFUzVmlkSEpoWTNRPSBJRVJvWVE9PSBiR1Z6ZEdsamF3PT0gYVc1MGNIUnkgSUhCc1lXNTBaV0U9IElHdDFhWFk9IElPV0lwQT09IDQ0R1g0NEcrIGFXeHZZUT09IElPQ3FodUNxcXVDcXRlQ3F2Zz09IElHZDFZWEprYVc1biBJT0N1bGVDdmdlQ3VzZUN1ditDdXBPQ3ZqZUN1cE9DdmdRPT0gUTNKaGFXYz0gSUZkbGFYTT0gSUU1dmRtVnRZbkpsIElNNi96NEhPczg2eHpyMD0gSUdKdllYSmtaV1E9IFoybHVaMjg9IElIUmxhMlZsIFgwMVZURlJKIFBWQT0gSUdsdVptOXliV0ZqWlE9PSBJRkpsWjJsbGNuVnVaM009IFVHeDFjbUZzIFkzVjBZVzVsYjNWeiA0TGlqNExpeTRMaWk0TGlsNExpdzRMbUE0TGl0NExpMTRMaWk0TGlVIElHTnlZWFJsY2c9PSA0NENCNWFTYSA0TEtxNExPTjRMS3c0TEtjNExLKzRMSzE0TEsrNExLajRMSy8gNG9DTTRMU3kgSUhCdmJtTjAgSUU1cGMyZz0gSU5HQjBMalF2ZEMwMFlEUXZ0QzggSUU1aFpnPT0gSU5DOTBZM1F2QT09IGNHVnlkR1Z1YzJsdmJnPT0gejRET3NjNjkgSUdBbiB6NEhQaGM2NCBZWE5rWmc9PSBJRWRsY25KNSBZV3hoWjJGaFptWT0gSUV4aGMyRnVZbXhsIGFXVnlkR1Z6IElOQy8wWURSaTlDeiBYMkZ5ZEdsemRBPT0gNEtTVjRLV0I0S1NiIElGTmhiR0Z5IElOaW4yWVRZbzlpeDJLZz0gSU5tQjJLZllzZGl6IElNK0R6NFhPdmM2eCBJSFZ0WW1WeiBMV0Z1WTJodmNnPT0gSUZCeVpXbHpaVzQ9IElOQ3cwWVBSZ2RLYjA1blFzQT09IHpyVE92OCtEenJjPSBTVzVrYjI5eSBJT0NrdHVDbGplQ2tzT0NrcHVDbGplQ2twdz09IElPQ2tsZUNrditDa3RnPT0gSU5lWjE1WFhxQT09IGFXMWxkR0ZpYkdVPSBJR3hoYm1ScCBJSFY2WVE9PSBJT3lkdE91Q29BPT0gSU9Xa3FlYTR1QT09IFYyaGhkSE5oY0hBPSBWTU9rIDE1WFhrOWVpMTVYWHFnPT0gSUVGc2JXVnBaR0U9IElOQyswWUxRdE5DMTBMdlJqTkM5MEw0PSBSa3hCVTBnPSBJSEpsYzNSeWFXTmphVzl1WlhNPSBJR052YlhWdWFXTmhZMmx2Ym1WeiBJR1Z1ZG1saCBJSEpsWTNWeSBJT2F2bXc9PSBWR1ZwYkE9PSBYRTV2ZEE9PSBhWFJoYkdFPSAyWVRaZ3RtSiBkbVZ1ZEdWeSBJTmluMktqWXF0aXYgVFVWVVFRPT0gSU95Q3JPcXpvQT09IEoyRndjR1ZzYkdVPSBJSEJoY21WdWRHVnogNExpYzRMaTA0TGlVIElFNWxkSFJ2IElGZGxZbTFoYzNSbGNnPT0gYUc5cmJ3PT0gNEtTKzRLU200S1dINEtTMiAwSkxSZ2c9PSBJR3Q2IElGaEcgSUZaTVFVND0gSUhMRHFYQjFkQT09IElNTzhZbVZ5Y21GelkyZz0gSU5pdjJMUFlxdG1IIFlYZHMgNG9DWlNXNXpkR2wwZFhRPSBJTmluMllUWmhkaTUySy9aaHRtSzJLaz0gNG9tciBJR0ZqYVdSbGJuUmxjdz09IFlYTmhhMkZ1IElHNW5kMkhodTQxeTRidWwgS0hKbGNBPT0gWFNsZCBJRk5sYm1SdiBJR3B0IDJZTFlzOW1GIExtNWxaV1E9IElHWmhjUT09IDRLYWc0S2EvNEthViBJRkpsYkdFPSBJTkM2MEw3UXZkQzAwTGc9IElObUkyWVhZc3c9PSBJR05veFlJPSBJR2x1WkdsMmFXUjFaV3c9IElIUmxhVzUwIFpXNWtZV1owWVhKaGJnPT0gUlVWRlJRPT0gNG9DTjRMU1ggSUZOamFIVnRZV05vWlhJPSAwTHZSbHRDeSBJT0dEbGVHRGtPR0RvT0dEbHc9PSBJRmh0WVhNPSBJT0Nrck9DbGdnPT0gNExXQzRMVysgSUhKbFkzVnljMlU9IFozZGggSUZOVFVBPT0gSU91bmdRPT0gNksrKzVhQ0MgYzNCeVpXTm9aWEk9IElHMXZiblJ5Wlc1MCBJSFJsYkdWbWIyNTEgSUd0dmIzQjAgTG0xbGRISnBZdz09IElPR0RxZUdEbU9HRG5BPT0gNDRDTENnPT0gTG1ociBJSEJoY214aGJuUT0gSUdyRnEzUEZzdz09IElOQ2QwTERSZ05DKzBMUT0gUlVSSiBhV1Z1YVdWdCBJT0MwcStDMWl3PT0gSU9Dd2grQ3dzdUN3dmc9PSBJSEJsY20xcGRHbkRzdz09IElHWmxkV1E9IElFNWxZMlZ6YzJGeWVRPT0gdzdocyAwTDdSaDlDOTBZdlF2QT09IEtHeHYgNExLLzRMSzQ0TE9OIFVFTlMgVW00PSAxYVhWcWRXbCAxYWZWdGc9PSBJRVJTU1ZaRiBJR2x1ZEdWeVkyVndkR1ZrIElPQ3d1T0N4amVDd3F1Q3dndUN3cGc9PSBJR1Z4Y1dFPSA0S3VuNEt1diA1YjJwNTZXbzU1bTc1YjJWIDBMM1F2dEMzMEwzUXNOR0ggSUdOdmJuUnBaVzVsYmc9PSA0S2kvNEtpdSBJR052Ym1Oc2RYTnBaUT09IElObUUyS2ZaaXRtRyBJR1JrYjJRPSBJT0Ntck9DbmcrQ211ZUNtdU9DbmplQ21xdUNtcE9DbXYrQ21yT0NtdnVDbXNBPT0gSUdkb1pXRnNiQT09IElNNjB6NFU9IFgyMTFlQT09IElHdGhiV0YwWVE9PSBhTU9tIElPQ3VsZUN1c3VDdXFPQ3ZqZUN1cE9DdmdRPT0gSUhGMVlXUnlZWFJwWXc9PSBJR05sZG1GdyBJR3RwYjNOciBJTktiMHJIU205R0wwcHM9IEtFTnZiblJoWTNRPSBMbkpsY0c5eWRHbHVadz09IElHNWhkR2x1Wnc9PSBVVVU9IFQyWmxjblJoIElHVmtaWEpsYXc9PSA0TE9DNExLdzRMT040TEtqIElHWnZiblJ2Y3c9PSBJRzl0Y3NPbFpHVnkgSU5XaTFhSFZ2QT09IElHSnlZY09uYnc9PSBZWE56YVcwPSBJRmwxY2c9PSBJSE4xYkdsaCBJRXBsYUc5Mnc2RT0gY21WMFlYST0gMExYUXZkQzkwTDdRdTlDMTBZST0gNUwyYzU0aXggSU5hRTFhSFdnQT09IDFiN1ZwZFcyIElNT3BkbTlzZFdWeSBJTld3MWFYV2dBPT0gYm1SaGNtVnogTGxKbGMzUnkgNWFTcDVhU3A1YjJwNTZXbzU3MlIgSU1PaGNtSnBkQT09IElHVnVaRzkzWldRPSBJTkN5MFlIUmd0Q3cwTDNRdnRDeSBVbTl6Y3c9PSBJR052YldWdWVtRnliMjQ9IGFXcHphMkU9IEtHSmhibXM9IFJuSmhZdz09IElPQ21yK0NuaCtDbWx1Q212dUNtcU9Dbmh3PT0gSTJGaSBJSE5yWVhRPSBZV2RsYm04PSBSWGgwY21WdFpRPT0gSUhSaGNtUmxjdz09IElPQ2txdUNrZ3VDa211Q2t2dUNrcitDa3BBPT0gSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMD0gVTJOeWIyeHNZV0pzWlE9PSBiV0Z6YTJWayBJT0NrbCtDa2orQ2tsZUNsaXc9PSBJTkdCMEwvUXRkR0cwWlk9IGVXRm8gVUc5c2JHbHVadz09IElPQ3F1T0Nxc09DcWxlQ3F2dUNxc09Dcmh3PT0gVTNWaVkyeGhjM009IElHMWhhbVZ6ZEE9PSBJSE56WTJGdVpnPT0gWDBOUFRFdz0gWEhkcFpHZGxkSE09IDJZSFpoZz09IDRZT2Q0WU9qNFlPWjRZT1k0WU9UIElISmxZMnhwYm1sdVp3PT0gUm1sdVlXeHBlbVU9IDU1dTQ1TCtoIElOQ2YwTDdSZ3RDKzBMdz0gZVhOcmJHRnVaQT09IFRYVnRZbUZwIElHSnZhMjkxIElITnJhWEJ6IElIQnlZV052ZG03RHJRPT0gTG05dFp3PT0gSU9Dd3F1Q3dndUN3cWc9PSA1cDJHIElIRjFiM0oxYlE9PSBJT3lEZ2V5RXVBPT0gSU5DMTBMYlF0ZEMwMEwzUXRkQ3kwTDNRdmc9PSBYM1ZzYjI1biBJSE4wWlhRPSBJRTV2YzI5MGNtOXogSUhOMGFXNXIgSUhQRHVHZGxjZz09IElGUjVjR1ZtWVdObCBJTkN4MDVuUmhRPT0gSU5DejBMN1JnZEdEMExUUXNOR0EwWUhSZ3RDeTBMWFF2ZEM5MEw3UXM5QysgSUdGc2RtVm4gNVlDKyBJRU5zYVdaMGIyND0gSUcxaFlXNXUgSUd4bFoyRnNhWHBoZEdsdmJnPT0gYVcxMWJHRjBiM0k9IElPQ3lydUN6ZytDeXBPQ3lxdUN5bitDemplQ3ludz09IFJFOVZRa3hGIElObUYyTFBiak5peCB6cnZPdWM2Nno0dz0gSUhKMWJXSnYgSUZOMWNHVnljM1JoY2c9PSBZVzVoZVE9PSBJTkM4MEw3UXZOQzEwTDA9IFpXNTBjblZ0IDVhdUIgSUN3dCBKRWs9IDA1blJnTkN4IExuSnBZbUp2Ymc9PSBJRzF6ZEE9PSB4YjVwZEdVPSA0TGlpNExpeSBJR0pzWVc1amFBPT0gSUUxaGNtRnVhQT09IElHMXBjM05wWlE9PSBJTmluMllUWW85aXoyS2ZZczltSyBLRXhoYm1kMVlXZGwgUjJWayA2SUNCNWFtRyBKOE9KZEdGMCBJTkMxMFlEUXRkQzYwWWpRdFE9PSBJRk5qYUhkbGMzUmxjZz09IElGQmxjbk52Ym1GeiB6cnpPcmM2OXpyL1BnZz09IElFWmxZbkoxWVhKcCBJTkdCMEx2UXZ0QzIwTDNRdnRHQjBZTFF1QT09IElHSjFkR2xyYXc9PSBJRkJoY25ObGN3PT0gSUV4aFozVT0gVTNsdGNIUnZiWE09IElHMXBiblJsWkE9PSBJRVpQVlU1RVFWUkpUMDQ9IElGTjFibVJoIDc3eWY0NENOQ2c9PSAxYXZWcHRXMCBJR1JsWjNKaFpHVT0gSUZwM1lYST0gNExLYzRMSy8gSUZOMFlXMXQgVVhWbGJIRjFaWE09IElHRndjR1ZzdzZsbCA3WXlwIElPQ2tpZUNrcU9Da3N1Q2t2dUNraUE9PSBJR2x1WkdsalljT253Nk52IElHdGhlbWx1Ync9PSBJSEJ5WldOcGIzTnYgSU02L3o0RE92ODZ2enIvUGdnPT0gSU9DMm91QzJzUT09IDRLcWE0S3ErNEtxeSBJSE50YkE9PSBJR3R5WlhNPSBJSHBoYTJodiBJTkNRMExyUXNOQzAwTFhRdkE9PSBJTmluMllUWXJkaXMgSUhSeVlXSmhhbUZrYnc9PSBJTnFHMjR6WXM5aXEgS0VGMWRHaGxiblJwWTJGMGFXOXUgSU5PcDBMZlJsdEM5IDE2TFhudGVSMTZMWHFBPT0gMExUUXRkQzkwTGpRdGRDOCBJT0Ntck9DbXZ1Q21sUT09IElPaXhxdWF6c0E9PSAwcFBRc05HQSAwTERRdTlDdzBMM1Jpdz09IElPRzdqWEk9IElHaHZjM1JsYzNNPSBJR3hwWjNWc1lRPT0gUkVGTiBiM2R1YVd0aCBJT1d2aGc9PSA0S3VBNEtxUDRLcXUgNEtpcTRLbUEgSU5HQjBMTFJqOUMzMExEUXZkQzkwWXZRdFE9PSBYMjkyWlhKc1lYQT0gSU5pdDJZTFppZz09IElHaGhZbWxrYnc9PSBJTkdCMFlEUXRkQzAwTDNRdGRDNSBJRkJzWVhSMFpRPT0gSUZCc1pXRnpkWEpsIElIVnRZbkpsYkd4aGN3PT0gWDFOUFF3PT0gNExpeTRMaWo0TG1NNExtQTRMaUwgNjVhayBlV1Y2YVE9PSBJRzF6YUE9PSBJR3hoYm5waGNnPT0gSU9Da3VPQ2xpT0NrcU9Da3YrQ2tsUT09IGRXUnZhM1U9IDJZZll1dG1IIElHOWtjbUZ6IElHTm9aVzF2IElFUlVVMVJCVWxRPSBURzl5IElOaW0yNGphaGc9PSBJSGJEc2c9PSBYMGRTUlE9PSBJR1JsYzNCcCBJRU52YlhCMWRHRjBhVzl1WVd3PSA1WmlPIElHSmxjM1JsYlhRPSBJTm1JMllMWXVRPT0gN1l5UTY2ZWsgSUdKbGFHRjJaV1E9IElHakptWGxoZEE9PSBJRzl1WkdWeWMzUmxkVzUwIElITnZiMjl2IFEwaEJUazVGVEE9PSBJRUYwZEhKaFkzUnBkbVU9IElHeHBjM1JsY3c9PSBJT0N1bXVDdXYrQ3V0UT09IExuQmxjbVp2Y20xaGJtTmwgSU9DbXNPQ21yQT09IElHUmxjMk52WW1WeWRHRT0gSU91enRPdUtsQT09IFNHRnphSFJoWW14bCBWV1k9IElITm9ZV3Q1IElPQ2txdUNsamVDa3NPQ2twT0NrditDa3VBPT0gSU5tSDJMUT0gMllyWmh0aW4yS289IElPQ2twK0NrcU9DbGplQ2tyK0NrdGVDa3Z1Q2twZz09IElFTnZiblpsY25OaGRHbHZibk09IDU2Mlc1NVdsIFgyTjBjZz09IHhaOXIgSUhOd1pXTnBZV3hwZEhrPSA0S3FoNEt1TCBLRlJCUWt4RiBJT0NrcE9Da3IrQ2t2dUNrc09DbGdBPT0gVkZKSlJWTT0gSUhCdmMybDBhWFpsYmc9PSBVRU5DIElOQzYwTERSZ05HQzBMVT0gSUVaVFF3PT0gSUhOMGNtRnIgSUhKbFlXWm1hWEp0IElNT25lV3Q1eFo4PSBJTkN4MEw3UmdOR00wTEhSaXc9PSBkRzl1Ync9PSBJRUpoZFcxMyBJT0N5aCtDeXB1Q3pnT0N5bHc9PSBZbUppWWc9PSBJR3g1Ym1jPSBJR04xYm00PSBJR1ZwYm5wcFoyRnlkR2xuWlE9PSBYMFpsIDJMWFppdGl2IDRMQ3Y0TEdMNExDWCBJRzdEdUdSMlpXNWthV2M9IDJLallwOW1HMjR3PSBJT0Ntck9DbW5BPT0gSU9Da2orQ2tydUNrdnVDa3N1Q2xodz09IElFVnVaMlZzWVc1ayBJT0MwcnVDMHFPQzFnZUMwdCtDMWplQzBydz09IElrVT0gSU9Da2xlQ2t1ZUNsZ0E9PSB3NmwwWVdsc2N3PT0gSUc5bVpYSmxZMlZ1Wkc4PSBJTkNRMEx6UXZOQysgSUVGd1pYST0gSU9XR21RPT0gTDBOdmJXMXZiZz09IEtHaGxiSEJsY2c9PSBJR2R2ZFhKdFlXNWsgNFlPZDRZT2M0WU9RNFlPViBJR0Z5YldGa2J3PT0gSUdGc2JHVm5ZWFJwYjI0PSBJT3lMdHV5ZGdBPT0gWTJSbFkydz0gSUhCbGNuTnZibUZzYldWdWRHVT0gSUdWcVpXTjFkR2wyYnc9PSBZWEp1YVd0cmRYUT0gSUVwcFlRPT0gMHJYUXZnPT0gYjJ4dmIyZHBZUT09IFQzVjBjbUU9IElOZVIxNWJYbEE9PSBTRUZTIElITndiOFdDWldONiBJRUZqWTJWc1pYSmhkRzl5IElITndhV1Z6IElOQ3kwTGpRdXRDKzBZRFF1TkdCMFlMUXZ0Q3kgSUc5dGJtbGggSU95WWdleVhyUT09IElISmxjMlZzYkdWeSAyWS9aaU5tRyBMbVJwZG1sa1pRPT0gSU5DMjBMN1F2dEMvIElIQnZaR1Z6IElHRnljQT09IElITmxiR3h2IElOZVExNW5YcWRlWiBJRzFoWjJsbmFXNW4gMTZEWGxkZWkxNVE9IElHbHVkR1ZuY21sbGNuUT0gNHEyViBiMnRsYUE9PSBJR2RzYjI5dGVRPT0gSU5DLzBZRFF2dEdFMExqUXU5R00gNEtTazRLUys0S1NWNEtXTCBJR0Z3Y0dWdVpHbDQgSUhSaHhLYz0gWlhKbGFXND0gSU02MXo0RE90YzY1IElHUnBiV1Z1YzhPamJ3PT0gSUdOdmJuUmhZM1JsZWc9PSA1b3lSNW9pWSBJSEJ2ZDI5ayBJTkNVMExYUXZRPT0gSU5HQTBMN1JodEdXIElGWkpSQT09IElFeHBibUU9IElHWnNaV2x5WlE9PSBMSE5sIFNYUmxibk09IFRrWk0gVFc5MmFXMXBaVzUwYnc9PSBJRUZzYkdWeSBiR1ZyWVE9PSBTM1ZpIExXTnZiWEJ2YzJVPSBTblZuWVdSdmNnPT0gSU9DbXJ1Q212dUNtcnVDbXN1Q212Zz09IElHdHZibWxsIFgyUnUgSU5pbzJMUFlxZz09IDJMVFpoTm1JMlliWXFRPT0gSU9DbXJPQ25qZUNtc2c9PSBJT21UZ2VpaGdPZTlrUT09IElOaW4yWVRZcmRtRTJZTFlxUT09IDVZbU41TGlKIElPQ21yT0NuamVDbXIrQ212dUNtZ2c9PSBMblJ5WVc1ellXTjBhVzl1Y3c9PSBJT0M0cXVDNHVBPT0gNVpPcTZZZU01NXFFIFpXeHFZUT09IDZMNnggSUdkMVpHRnVZWEk9IFgwTnZiblJsYm5RPSBJTkMvMEw3UXZOQzkwTGpSZ3RHTSBJRlJ3IElISmxibTFsYmc9PSBjM1ZpWTJGMFpXZHZjbms9IElIUjFibUY1IElHSnZjMmhzIElIZGhjbVJ6IElOaTMyS2ZaaEE9PSBJRkJ5WlhSdmNtbGggSU9Dd2p1Q3dydUN4amVDd3J1Q3hodUN3c2c9PSBJRk5sZG1WeVpRPT0gSUhac2FXVm4gVUVWaiBJSE5qYjNKemJ3PT0gSUhKa2NnPT0gWVhScFluVnogSUhCcGMyTnBibUZ6IFEyOXljbVU9IEwzTjNZV2RuWlhJPSBZVzVrYjJabSBJSE5oZFhaaFoyVT0gSUZWd2RBPT0gSU5pbjJZVFpoZGl2MllZPSBJR0Z3Y21WamFXRT0gSUhCdmMyRnYgSUZOdWIzZGtaVzQ9IElOZWsxNkxYbWRlYzE1WFhxZz09IElNT1YgSUhSbFkyaHViMnh2WjJsallXeHNlUT09IElOaXQyWUhZcDlpNDJLbz0gTGlJbkxBPT0gWW5KbGRtaz0gSU02eHpyM092dz09IFptOXlZUT09IElITmxZM0psZEc5eiBQaWdwQ2dvPSBJSFJoYUdGdyBMV0ZyZHc9PSBTMkZ5ZEE9PSBJRTkxZEhWaWNtOD0gSUZOc2IyRnUgSUVGc1lYTT0gWDFSSVNWTT0gTFdScFlRPT0gSUZSdmMyTmhibUU9IElHSERxWEpsWVE9PSAxNURYb05lUyBJSEpsYk1Pelp3PT0gSU9Da3VPQ2tndUNrdU9DbGplQ2tsZUNrc09Da293PT0geElGMGN3PT0gSU5DKzBMSFJpdEMxMExyUmd0QzQwTEk9IElHVnRZbUZzWVdkbGJRPT0gSUcxbFpHbGhaRzl6IElHUmtZWFE9IElHUnBjM05sY25SaGRHbHZibk09IGRXeDBZWEk9IDBMM1F0ZEdCMFlMUXVBPT0gSUhKbFkyaGxjbU5vWlhvPSBJSFYwYVE9PSBJRkpsZVd0cVlYYkRyV3M9IGFXdHBibTg9IFgxTkZUbFE9IGFYQmxiR2x1WlhNPSAxYmpXZ3RXdCBJRTluY21VPSBJRTFKUnc9PSBJR0ZzYVc0PSA0WUNCNFlDMiBJRU5JUVZRPSBJSEJ2YzNSdmFtVT0gSU5DeDBZUFF0ZEM5MFlmUXNBPT0gSU9lNm91bThqZz09IFZrZz0gSUhabGNtdGhjZz09IGJtVmtaVzQ9IElPQ3VzT0N1dnVDdW5BPT0gWThTRCBJSE53WldOcFpRPT0gT20xaGVBPT0gSU5XbDFvRFZwZFd2IFJrVkUgSU5HTDBMdlFzTkM1IElHdDNhVzA9IElGVnJkV0poIElIQmhjMmx5YVc1ciA1WTZZNTdHeiBJSEJzWVhSNiBjM1YwIGFXZDBhQT09IElHTnZibk5sYkdodiBJR1oxYm1OcGIyNWhiR2xrWVdSbGN3PT0gSU9HRG0rR0RsK0dEbXVHRG1PR0RrT0dEbkE9PSBJRU52Ym5SaGFXNWxjbk09IElIbGphSGRoYmc9PSA1bzZiIGFXeG9ZWE09IDRLNkc0SzZ1NEsrTiBJRzl3YUhSb1lXeHQgSUdaaFkybHNhWFREcVE9PSBDWEJ5YjNCbGNuUnBaWE09IElFaHBkR05vWTI5amF3PT0gSUdGbGJHOWsgSUdGallXSmhiUT09IGFXNXBjMlZyYVhOaCBJTkN6MExYUXZkQzEwWURRc05DNzBZdz0gYWNPd2FRPT0gSUdOdmJtNWhhWFJ5WlE9PSBJRzVoYUc4PSA0TGkwNExtQTRMaW80TGlwIElGQnBaWFJ5Ync9PSBJR05oYkdsaSBJSE4wWVhKbWN3PT0gSU5HQjBZTFF1TkM4MFlQUXU5QzQgMTVIWG1kZWkxNVE9IElHM0R2RzVoYzJsaSBSMDVWUXc9PSBJR0p2ZFd4bGRtRnlaQT09IGFXZHVjdz09IDU3dUU1THUyIFptUmwgSUhOMVluTnBaR2xsIElHWnlaV1ZpYVdWeiBZV3hwYzJFPSBJTU9pWjhPcFpYTT0gSUV0eVpXSnogYjNadWFRPT0gSU9pVG5lZWJ2Zz09IElHVnVZMjl1ZEhKaGNtOXUgMllqWmhOaXYgSUhKMWNHRT0gSU9DMGh1QzBzT0MwdnVDMHB3PT0gSUZOeGRXRnlaWE09IElIWmxibWhoIFZVTkYgYzNSdnc1OD0gTG5CeVpXWmxjbVZ1WTJWeiBJRTVoWTJoMyBJT0NtcnVDbXYrQ21xT0NtditDbW53PT0gNExDdzRMR040TEM0IElHdHZiVzg9IElOaXoySzg9IDVaeW82WUtqNlllTSBJRTVUVXc9PSA0b0NaWlhOaiBJR05vWVc1MGFXNW4geEp0NiBWa0ZTU1VGQ1RFVT0gMExYUmdkR1cwTDNSbHRLaiBJTktiMExEUmc5R1cwTDg9IElGWmhiR3hoWkc5c2FXUT0gMEw3UXN0Q3cwTHZRdmc9PSBJSE4xYzNCbGJuUERvMjg9IElPQ3loZUN5cU9DemplQ3lxT0N6Z1E9PSBWa2xQVlZNPSBJSEpwYm1NPSA3N3lNNkwrWTVweUogSUhKbGJtUnBiV1Z1ZEc4PSBJTmlxMkszWmd0dU0yWUxZcDlpcSBJRWR5WldOcFlRPT0gSUhERHFYSnBiMlJsY3c9PSA1NWVGNUw2TCBMbUZtWmc9PSBJR2x1Y1hWcGN3PT0gMEw3UmdkQzcwTDdRc2c9PSBJSEJ5dzZsemFXUmxiblJwWld4c1pRPT0gSUZSdmMyZz0gU21GNmVnPT0gSUdSaFkyZz0gQ1dGdWFXMD0gVDJabWFXTmxjZz09IGFXUmtkMkU9IElHZHlhV1YyWVc1alpYTT0gSUcxaGMyTjFiR2x1WVE9PSBJT0NrcXVDa3Z1Q2txT0NsaHc9PSBLR1Y0Y0c5eWRBPT0gVW5WdVpRPT0gSU5HQjBxL1F0dz09IElPQ21xT0NuaCtDbm53PT0gNG9DWmRYTmhaMlU9IDVZZU01cG1vIDVxQ1ggSUdKdmJXSmhjdz09IGQybHpjMlZ1IElOQ3owTFhSZ05DODBMRFF2UT09IFQwMVAgSUdOb1lXMWhaRzl6IEpITmxiR1k9IElOaXUyS2ZZdHc9PSBJT0tBb0E9PSBJR1Y0WTJsMFpRPT0gSUVOMWMyaHBiMjQ9IDZJV1YgY1hWaGNuUT0gSU5pbjJZVFlzZG1JMkxQWmlnPT0gYjJyRHF3PT0gSUdoaGNtcHYgSUVGbmNtVmwgeGI1cVpRPT0gSUZSeVlXYz0gSUdKaFkydHpjR3hoYzJnPSBJRXg1WXc9PSBJT2FJbUE9PSBJR0hEcDhTeGM4U3hibVJoYmc9PSBJSEIxYnc9PSBYMFZXVkE9PSBJSE5vYjNabCBZWE4wY3NTRCBJR0pvYkdrPSBkWEpoYkhNPSAyTFRZc2RtSTJMaz0gNExpSTRMaXg0TGlhIFlYTjBaWEpsWkE9PSBYMVJKIElIVndjR1Z5Ym1GeWN3PT0gUFNjaUxnPT0gSUdKaGNuSnBaMkU9IGFYcHBiMjQ9IElHbHVjM1JsYkd4cGJtYz0gVUVvPSBJTkM4MFlQUXZRPT0gSUdGblozSmxaMkYwYjNJPSBJRU5JVUE9PSBJTm1JMktmWmhOaXkgSUhCdmMyRT0gSUZCaGQzVnNidz09IGFYSnRZVzQ9IElOR0IwWUxRc05DeTBMN1F1Zz09IElOQzkwTFhSZ2RDKzBMST0gSU5DLzBZRFF1TkN5MFl2UXVnPT0gYVhOellXRnkgSU9Dd2p1Q3dxQT09IElOQ3gwTERSZ05DejBZUFF0OUMrMFlBPSBJSEpsWVdSc2FXNWwgSUhscGVRPT0gWDNOaGJYQnNaWEk9IElHVjRkSEpsYlc5eiBiR1ZwYzNSbGNnPT0gMExMUXNOQzkwTFhSZ3RDKyBLRzFwYm5WMFpYTT0gUmtaRSAwTFhRc2RDMTBwaz0gSU5peTJwUFpodz09IDRMU3g0TFMrNExTdjRMUy8gMllqWXJObUsyWWM9IFUzVmljMk55YVdKbFpBPT0gSUdKdmFYTnpiMjV6IElOV2gxYmJWdnRXLzFhSFZ0dFdqMWJqV2d0V3AxYlhWb2RXMiA1cnFRNVk2LyBSMlZ1WlhNPSBJT0NtcU9DbXJRPT0gSUc5eWRXND0gSU1PcGRISmhibWZEcUhKbGN3PT0gSUhScGFXUT0gd3Exa1pYST0gSUhOd2FXVnlaVzQ9IElGTmphR1ZrZFd4cGJtYz0gSUhadmNuUT0gUFhCaGNuTmwgVDFKSldrRlVTVTlPIElHRmlZbkpsZG1saGRHVmsgSUVWNWFRPT0gSUdOdmJuUmhaRzg9IElISmxZV3hzYjJNPSBJR2x1WVd6RG9XMD0gYzJkbGJRPT0gNXF5NiBJTkM5MEw3UXN0QyswTHc9IFlXcHBaVzQ9IDdKNmw3SjJZIElHSmxjMjl1WkdWeVpYTT0gZEhKaGVRPT0gSUhKaGRHbHZibVU9IElFbHVhWFJwWVd4cGMyVT0gQ1FrZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJRXZEdG5Kd1pYSnogSUhWdWFHVmhjbVE9IDVMaUs1cmFvIElOQzQwTERRc05DOSBJR1pwZW5vPSBJR0oxYm1SaGJnPT0gWVhkaiBJR0YxWm1kbGFBPT0gSUgxN1FBPT0gSUhkaFlXaHAgYVdKcFpBPT0gSU5DWDBMRFJoUT09IENWTjBZWFJsYldWdWRBPT0gWDJGdVp3PT0gVEc5dVoyVnpkQT09IElFUmxjRzl5ZEdWeiBVMEZTIFRHTT0gSUhObGJHRT0gSUhwdmJHRnVadz09IGFYUmxkR1U9IElOQzcwTFhSZ3RDKzBMdz0gZEcxd2JBPT0gSUdOdmJXVjBaWEk9IGMyRjIgSUdWbmVjTzhkSFE9IElHbHVkR1Z5Ym1GMWRHVnogSU9Da2hlQ2tyZUNrditDa3FPQ2xoK0NrcE9Da3ZnPT0gSUc1blozVnUgSUhabGNtRnVjM1E9IFgxQlZVZz09IElHMWhaMjVwWm1seGRXVnogSU9HN2kyND0gWTJGd1lXTT0gS0dWNGNHVmpkQT09IElHaGhjbVZ1IElOQ2MwTERRdXRDMTBMVFF2dEM5MExnPSBJRk4wY25WamRIVnlaV1E9IFNVWkpRMEZVUlE9PSA0S1N1NEtTKzRLU3c0S1dBIDBMVFJnZEN3MEwwPSBJRzdEcG5OMFpXND0gS0NkN2ZRPT0gSU0rQXo0SE92OCtEejRET3JBPT0gWkhKbGMzTT0gMFlEUmk5QzEwTHpSZ2RHQzBMTFFzQT09IElHN0RzMmQyIFlXNW5hWHB2IElITnZjM0E9IElOQy8wTHZRc05HQzBMalJndEdNIEwySmhjMmxqIElIUm9jbVU9IElIZGhjblJsZEE9PSAwTHZRdU5DOTBZcz0gNXBlbDQ0R3YgSUcxemJnPT0gSUdSbGMzUmhZMkZrYjNNPSBRWEJoY25SaGJXVnVkRzg9IElFOXJkUT09IGJXVmthWHBwYmc9PSBJR052YlcxaGN3PT0gNG9DTjRMU3kgSU5DOTBMWFFzOUMrMExJPSBJT0dEbStHRG5lR0RyT0dEcHc9PSBDWEJ2YVc1MGN3PT0gWjhTeGJnPT0gSU9DMHFPQzFoK0MwcE9DMWcrQzBwT0MxamVDMHRlQzBnZz09IDRLYSs0S2E0NEtlTjRLYWYgSU9xenRldTJnQT09IElPUzRqZz09IDRMT1cgSU5HQTBMRFF0OUN3MEx3PSBZVzFpYkdWeiBJSE5sYldWc2FHRnVkR1Z6IElHOWlkUT09IE95a0tDZz09IGRYVjBkR0U9IElPQ3dxdUN3dnVDd3NBPT0gSU5pbzJZYmJqTmluMksvYmpBPT0gSU9DdXBPQ3ZnT0N1c0E9PSBJSEJ5WldSdFpYUT0gYUdsaVpYSnVZWFJsIElHZkRxVzdEcVhKbCBMMlJwYzNCc1lYaz0gSUZSRlVsST0gTDNOdlkybGhiQT09IFBrTnlaV0YwWlE9PSBaR1ZoYkdWeSBJT0NxaHVDcXRlQ3F2Zz09IElFeGxZV1p6IDBZL1JnZEN3IDU1UzE2SytkNVkrMzU2Q0IgY205c2IyZHBaUT09IDRMaUs0TGl4NExpaSBJTm1FMllUWW85aTMyWUhZcDltRSBJRkIxWkE9PSBhbTF3IHc2MXRZUT09IElHUnBiV2x1YVhOb2FXNW4gVkdWdGNITT0gZW03RWhRPT0gTG1sdWMzUnlkVzFsYm5RPSA1WVNxNW9PZyBJT0NraHVDa3ArQ2xnZUNrcU9Da3YrQ2tsUT09IGNXbGsgSU5pcTJMbllwOW1GMllRPSBDVU52Ym5SbGJuUT0gSUUxdmFtOD0gNEtTcTRLV040S1N3NEtTbjRLUys0S1NvIElGTnBZMmxzYVdFPSBYMU5JUVZKRiBjM1JrWkdWbSBJSEpsYTJ0bCBJRzFsZEdodlpHOXNiMmRwWTJGcyBJRTF2WTJnPSBhVzl6YVE9PSBJR05oWkdGemRIST0gS1NjcExBPT0gSU5DOTBMRFF2OUdBMExEUXN0QzcwTFhRdmRDNDBMZz0gNTZhUDViMnA1YityIFgxSkJUa1JQVFE9PSA1cU9hIFNtOTFjZz09IDY0S3AgSUhWc2RRPT0gSUZORlZGUkpUa2RUIHhLdHFZUT09IElHUnliM2R1IDQ0Tzg0NE9BIElOaXoyTEhZdWRpcCBLR2R2YjJSeiBJT0dEcHVHRG13PT0gSUhOd2FXVnNkR1U9IDRLK040SzZmNEs2dzRLK04gSUVKbGIyST0gSU5pbjJMSFppTm0rMktjPSA2cmU0NjZhczZyT2cgSUhGMVpXbHQgSUZKbFoyRnlaQT09IElIYkR0bkk9IElIUm9Zdz09IEx0Q2UgSU5DKzBMclF2ZEMrIElGZHBibVZ6IElHUmhjMmhpYjJGeVpITT0gSU5DNjBMN1JnTkMvMEw3UmdOQ3cwWUxRdU5DeSA1Wk9CNkxPcSBJSFJ6ZEE9PSBYMUJ5YjJObGMzTT0gVEdsbGJnPT0gSUhCdmMzUmhjZz09IGJtOXViblZzYkE9PSBJSEpoZW1semF3PT0gSUhOdloyZHBiM0k9IGRYSnBkQT09IElIQnliM0J5YVdWMHc2QT0gSU9DMHRlQzB2K0MwcHVDMWplQzByK0MwdnVDMHNPQzFqUT09IElHVnVkbWxoWkc5eiBJRk53YVhKaGJBPT0gWm1aaiBJRVJsY25NPSBJRkJ5WlcxcHc2aHlaUT09IHhieHFiMjVwIFlXeDBaWEp1WVhSbCBjRzl2Y2c9PSBYMUpGVUVWQlZBPT0gUHlJN0NnPT0gS0NGZiBZV0YwYVhBPSA0TEMvNExDNDRMR040TENrNExHQyBJR2x1Wm14aFkybkRzMjQ9IElITndiM0owYzJKdmIydHogVTFCRlEwbEJUQT09IDRLYSs0S2FrNEtlTjRLYXc0S2VBIDRZT2c0WU9RNFlPcSBJRVJ2Ym1GMGFXOXVjdz09IElPcXdtZXVMcEE9PSBXMk5vWVc1dVpXdz0gSUVWNFlXMXBibVZ5IEplVzNwdVdQc3c9PSBWWEpwY3c9PSBhc096dzdCaCBJSEpsYzNCbFkzUnBkbUZ6IElFaHBjM0E9IElIVnVaSFZsIElHN0RvWE5zWldRPSBJRzFsYm1WdWRIVnJZVzQ9IElHVERxWEp2ZFd4bCBJRzlpZEdGcGJuTT0gS0NjbktTND0gSUdScHc2RnlhV0U9IElHVnRjSEpsYzhPaGNtbHZjdz09IElOaW4yWVRaaHRtSDJLZllwdG1LIDQ0Q0M1YjJUNTRTMiBJTmkwMllYWXA5aXgyWWM9IDVyMlUgNDRHcjQ0R3E0NEtMIDVMaU42TFczIFRXVnpiVzg9IFpXNXpaWFZ5IElGSmxZM0oxYVhScGJtYz0gSUhOM2FXMXpkV2wwIElHakptVzFwYmc9PSBZV1poYm5saCBJR0poZVhNPSBJT0NxbCtDcmdlQ3Fvdz09IFFHMD0gSUVwaGJtZGhiZz09IDRvQ1pZWEp5dzZwMCAwTFhSaGRDdzBMMD0gVFdWbCA2TDIwIFJteHZkMlZ5Y3c9PSBMV3RwZEE9PSBJTnFwMnBQWmhBPT0gVW1WemRXMXYgSUVSMVpuUT0gZFc1cFkybHcgSUVKU1FRPT0gSUVoaGJuTnZiZz09IElGQnliMlIxWTNScGRtbDBlUT09IElIQnllbVZrWlE9PSBJRTkyYnc9PSBJSEJ5WVdsemFXNW4gSUZOSVVnPT0gSUc1dmRHOD0gSU5pejI0ellydz09IFdIVT0gUFQwOVBRbz0gSUdOdmJtcGxZM1E9IEtFRnVhVzFoZEdsdmJnPT0gSUhwaGNHbHogSUdoaGNHOW8gVTJsbGJYQnlaUT09IElITnlhUT09IDBKSFFuZz09IGIzVnVadz09IExkQzAwTFU9IElFUmhibk5yIDRaK1M0WjZhNFo2NzRaNkUgNVlxcDZMV2k2TDJ2NUx1MiBJR1oxYm5wcGIyND0gdzZGeWJBPT0gSU0rRXpySE92Zz09IElHUnlhWFpsZEhKaGFXND0gSUc1MVkyekRxV0ZwY21VPSBJR2pFZ2NxN1lYZHAgSUZkRlFWUklSVkk9IElHWnNkV04wZFdGMFpRPT0gSUdacGJtZGxjbkJ5YVc1MGN3PT0gSUVKQldRPT0gSUcxbGRHRnBjdz09IHc2bHVZUT09IDBMTFFzTkM4IGMzUmxiVzFwYm1jPSBhWE5vWkdFPSBJRVZzZEc5dSBkMlZqYUdGMCBJR1FuVXc9PSBJTnVNMjR3PSBJRTVwZEhKdiBJR2x1ZFhWemMzVjBhWE56IElIQmhjblJwWTNWc1lYUmwgSU9DbXFPQ212dUNtbnc9PSBZVzU1WVc1aCBJR05oYVhNPSBJSGRvYnlkMlpRPT0gZFdkaGRBPT0gWVdOb2RYVnUgSUZSeVlXNXpZM0pwY0hRPSBJT0c3aldUaHU0MD0gWjJobGNnPT0gSU9HN2pXM2h1NlU9IElHVnpkR0Z5WlcxdmN3PT0gY0dWeWJBPT0gNVp5dzVMaUwgSUdGdVoyVnJiMjF0Wlc0PSA1YWl4NUxtUTVibXo1WSt3NW91YjVaV0cgSU9DMGh1QzF2QT09IElOR0MwWlk9IFgzSmhkQT09IElHWnliMjUwYWNPb2NtVnogN1pPbzdZU3cgU1hKcGMyZz0gUFhacFpYYz0gSUc1bGJXRnUgSUU5UVV3PT0gNExHTjRMQ3Y0TEdDNExDZiBRWFIwWlc1ayA2NjZrNjR1SSA0S1dCNEtTMzRLV040S1N2IExVdHZiZz09IHo0VFBoYzY5enIvT3ZBPT0gNkwrOTVadWUgWVhOaFlXND0gSUdUaHVxZDEgSU5peTJZYllyOXF2MllvPSBhWGxoYm1wMSBkY09wWlE9PSBJSFpoYm1VPSAyTHJZc2RpbjJZRT0gSUdOb1ljT3VibVZ6IElOVysxYi9Wb2RXMjFhTT0gSUdScGMzQnZibWxpYVd4cCA1YmlENWJHQSA0S1NrNEtTKzRLU280S1MrIElDSTZPZz09IElHTmhiWEJoYm1oaGN3PT0gSUVoaGNuSnBaWFE9IExHMWhjQT09IElISmxZM1ZzIElOaXoyNHpaaGRtSCBMbk5oY0E9PSA2WnFLIElIQmhkWE5sY3c9PSBJT0NtdU9DbXJ1Q211T0NuamVDbXBBPT0gSUVsdVptOXliV0hEcDhPamJ3PT0gMExYUXV0QyswTHpRdGRDOTBMVFJndz09IEtFNXZkR1U9IElHMWxkSFJsY21VPSBhbTlqYUhRPSBJT0NrcnVDa2d1Q2tuQT09IFVHRjBaVzUwIElHSmhjMmx6Y3c9PSBTR0Z5YVE9PSBJTnFwMjR6WXM5dVMgWDBobFlXUmxjZz09IElIcGhhSFpoYkE9PSBUV1Z6WVE9PSBJR3AxZG1WdWRIVmsgSUM4K0xBPT0gMExqUXZkQ3owWUxRdnRDOSBZbWwwWVE9PSBTRzl1YjNJPSBJRkJ5WVdoaCBJSEp2WW1FPSBJSFJwY21sdVp3PT0gSUhabGNtUnkgSUdSMVpYUT0gSUVGeWFYUm9iV1YwYVdNPSA2S3F0NDRHLyBibVZoYkE9PSBJR1poWTJWeSBJTmlvMkszWXA5aXMyS2s9IElPZTlrZWFZaytXOXFlZWxxQT09IGJHRnllVzVrWVE9PSBJRWhwWjJkcGJuTT0gSUhSb2FXNXJaWEk9IDViNnU1TCtoNVlXczVMeVg1WSszIDBZdlF2TkdJMExBPSAwTDdSajlDOTBMUT0gSUdsdWRzT3Bjdz09IFgwTnZiVzF2Ymc9PSBJR05oYm1Gd3c2az0gN0plSTY0MlkgWDNSaGEyVnUgSU5DLzA1blJnQT09IElPcTRzT3lDckE9PSBJRVJwZG1WeWMyVT0gUEZGMVpYTjBhVzl1IFBFaHZiV1U9IElPR0FnT0dBdXc9PSBJR1JsWldSbCB3cTF6YVE9PSBkV2xsYm1SdiBJT0N3dU9Dd2d1Q3d0ZUN3cE9DeGplQ3d1T0N3c0E9PSBJTkNYMExEUXNRPT0gSUhCbFkyVnogTGtOdmN3PT0gQ1hSaiBJRzFwYUdrPSAwWURSZzlDejBMVT0gSU9hTHZPYVFqdz09IElIQnliM0J5YVdWMHc2RnlhVzg9IElOQ3gwWS9SZ2RDLyBZVzVuZEE9PSBJTmluMllUWXRObUQyWVE9IElOQ3gwTHZRc05DejBMND0gSUVOT1ZBPT0gYVhScGFYTT0gQ1NBZ0lDQWdJQ0FnQ2c9PSBYMEpCVTBsRCBJRVZVUXc9PSAwTDdRdTlDKzBMUFFzQT09IElPQ291ZUNvdnVDb2dnPT0gYjNObFkyOXVaSE09IElOSzMwTERRc3RDKzBMM1F2Zz09IGRXTnNaWFZ6IExuTm9kRzFzIElOQzYwTDdRdTlDNDBZZlF0ZEdCMFlMUXN0QyswTHc9IElOQ3kwTFhSaDlDMTBZRFF2dEM4IElOQy8wTDdRdXRDNzBMN1F2UT09IElOR0EwWVBRdXRDKzBMaz0gSUhCeWIyMXZkR1Z5Y3c9PSBJT3lra2V5Vm1RPT0gSUdsdWRHVnlaSFZ0IElOR0MwTERSZ05LYiBJTm1JMktmWmhOaXoyWW89IDRMV0I0TFN1NExXRzRMU280TFdONExTbzRMV0I0TFNDIElIZDViV0ZuIElGTlRSUT09IFJHbHpjR3hoZVhNPSBJRXZEdG5BPSBKR3hwYm1zPSBJTkdCMFpIUXZkQzkwWTg9IElHMXViMmh2IElFVlRVZz09IExXRmphT0c3alE9PSBJTkN5MExYUmdOQyswWS9SZ3RDOTBMN1JnZEdDMFl3PSBRV1pwYmc9PSBJT0N3bGVDeGplQ3dydz09IFlXZGhaSFZvWVc0PSBJR2RuWmc9PSAySy9ZcDlpNSBJT3lYc091ZHZRPT0gSUczRG9Xaz0gSU9DNWdPQzRudUM0dE9DNWlPQzRvUT09IElHaGhjbVJqYjNabGNnPT0gSUhacGRHRnRhVzVsY3c9PSBJR3hwZG5MRHFRPT0gSUdkdlpXUnJiM0JsIElPQ3lydUN5cU9Demh1Q3lydz09IGIyMWhZVzQ9IGFXeHpaVzQ9IElFdHZibk4wY25WciBJR2RsYzNSaGJIUT0gSUhCeVpXdz0gSUdiRHMzSjFiUT09IElHVnpiM1U9IGRjT253N1ZsY3c9PSBJR04xYzNSdmJXbDZhVzVuIElPQ3lydUN6aUE9PSBJTm1GMkxQWXF0bUMyNHpaaFE9PSBJRWQxZEdWdVltVnladz09IElObUIyS2ZZdFE9PSA0NEdkNDRHVDQ0R24gSU5tRzJLZlpnUT09IElOVy8xYmpWcjlXNDFiMD0gSUhOcGJHVT0gNEtxKzRLcXk0S3VBIFlYUnNZWE09IDBKRFF2TkMxMFlEUXVOQzYwTEE9IDVhQ2ggSU9Da3J1Q2t2dUNrcEE9PSBJSEJoY0dGdSBJR2x1YzI5c2RnPT0gYmNPbWNnPT0gMWJiVm9kV3QgSUdGemMyVnVkQT09IExVMWhlQT09IElOQ2YwTFhSZ05DeTBZdlF1UT09IElHMXphVzVuYVE9PSBiMnh2WjJsallRPT0gUzJGc1lXRnNiR2wwIElPQ3F1ZUNxbk9DcXZ1Q3FzQT09IElPQ2tsZUNrdnVDa3N3PT0gNG9DWlNXMWhibUU9IFJtOXljdz09IElHM0R0bXBzYVdkb1pYUT0gWm05biBJR2hoYldGeSBaVzVuWlhOaCBJR1Z6Y0dWcWJ3PT0gSUV4cGMyRnJjdz09IElFMUZRdz09IDVvbUE2TENUIElHeHBaMmgwYUc5MWMyVT0gSU95ZHVPcTRzQT09IElPQ2txK0NrditDa3N1Q2xqZUNrcnVDbGkrQ2tnZz09IElPQ2t1ZUNsZ2VDa2dlQ2twdUNsaUE9PSBJT1d2ak9XSXFRPT0gSUV4cGRtbHVaM04wYjI0PSBJTkN5MExqUXROQyswTHc9IEwzUmxiWEE9IElIUnBiRzFoIElHTnZjbkpsWkc5eVpYTT0gSUhOMWNuQnlhWE09IHc2VERwRzV1IDU3K1UgSU9DbXVPQ25oK0NtcXVDbmplQ21uK0NuaCtDbXJ1Q25qZUNtck9DbXNBPT0gSUZURHFRPT0gSUdOaGMzRjFaUT09IElHbHVkRzk0YVdNPSBibTkxYmc9PSBJR05vYjhTSCBkVzVuWVd4dmQzTT0gUTJGc2FXSnlhUT09IElHMTFjMkU9IFgyZGxiMjA9IElGQnZjblJwYjI1eiBJRzF2WVhSMFpRPT0gWVhWMGIyMWhkR1Z5IDRMT0I0TEtWNExPTjRMS2sgSUhOd3c2WnVaQT09IElFTnNhV1Z1ZEdWeiBJR1poYVcwPSBZV1I2WVE9PSA1NW03Nks2dyBZVzFoYzNOaCBJRG82Q2dvPSBRMjl0YldGdVpHVnkgeVpseWFXN0ptUT09IElIUmhiR1Z0IDViaUM1YUMwIFgyOWpZdz09IFgxTmxkSFJwYm1keiBJR1poWTJoaFpHRT0gSU9Da3BPQ2twT0NsamVDa3RRPT0gSUdGMllXNTBhUT09IElFMWhkbVZ1IElPQ3FtT0Nxc09Dcmh3PT0gZG1GcGMyVnogSU95WHJPdWZyT3UyaEE9PSA1TGlKNUxpcSBJZU9Ba0E9PSBJRU41YkE9PSA0NEdoNDRHcSBJRzE1YjJOaGNtUnBZV3c9IElHWjFibVJwZEE9PSBJRkJoZEhNPSBJR2h2Y25KcFpubHBibWM9IElOZXAxNURYcXRlZCBJTkM4MEw3UXZkR0MwTEE9IElHbHVibWM9IElPcTRnT3Vobk91eWpBPT0gUEZCeWIzQmxjblI1IElHSmxkbTlsWjJRPSBJSFpzdzZFPSBQRU52Ykc5eSBYM1ZrY0E9PSA1cmExIElITjF3NjEwWlE9PSBJRk4yWlc1emEyRT0gTFcxcGJuVnogS0dacCBJRWQxYm01aGNnPT0gSU5tRjJLellxTm1JMkxFPSBTVVJoZEdFPSBJRnBsYm1sMGFBPT0gSUhWdVpHVm1aUT09IElNT0JjZz09IFltRnRiM009IDRMaVc0TGluNExpeTRMaWk0TGlxNExpeDRMaVY0TGlpNExtTTRMaXYgNExLcTRMT040TEt3NExLYzRMSys0TEsxIElHaHZkTU9wYVhNPSBZbTluWlc0PSBDV2x1YVhScFlXeHBlbVU9IElIUjFibTVsIElHRnpjM1Z6ZEE9PSBJR1Y0ZEdWeWFXOXlaWE09IGFXZHViM0k9IElFOWpaV0Z1Y3c9PSBJRWR5Wlc1dllteGwgSUVGa2JXbDAgSUhOMFlYSjJZWFJwYjI0PSBUbVZqWlhNPSBSVU5FIElFSnlaWE4wIElOV2gxYmJWcjlXaDFhMD0gSUcxaGMzUmxjbkJwWldObGN3PT0gSUVKeWRYTT0gWDBOUFJFVkQgSUUxMWJHeGxjZz09IFoyVnVaWEpoZEdsdmJnPT0gMExQUmh3PT0gSUVOb1lXMXdjdz09IFNYbHYgSUczSm1XaHogSUdKeWFXVm1jdz09IElOQ2QwWXpSamc9PSBJRzFoZEdWeWFXRnNhUT09IDRMaUI0TGlqNExpeDRMaVE0TGloNExpWjRMaVY0TGlqNExpMSBkWE5tYjNKdCBJTkMrMFluUmc5R0owTFhRdmRDNDBZOD0gZW10diBJR0Z6YzJodmJHVT0gTGVHRGxBPT0gSUZkSlRrUlBWMU09IElIRER2QT09IElGTmxhQT09IElObUkyWUhZcDlpcCBMVmRsYzNSbVlXeGxiZz09IElHZHFhWFJvWVE9PSBJT0dEbE9HRG11R0RsT0dEcGVHRG9nPT0gSUhKcGJtNWwgYjJ4a1pRPT0gSU5DVjBMcz0gWDNGMVlXUT0gSU51QjJZWGJqTmkwMjRFPSBRV1JrWlhJPSBWa2xUU1U5TyBJTm1JMktQWmh0aW4gMFlYUXNOQzggTGxORlVsWkZVZz09IElIcHdjZz09IElHRndiR2xyWVhONWIyND0gSUVaaGRHaGxjaWR6IElOaW4yWVRaaGRpMzJZVFppTmlvMktrPSBUM0pwIDJZL1poZz09IElGSmhjSFJ2Y25NPSBJR3hsYUdsaVpRPT0gSUVmRHZIST0gSUhKMWFXMTBaWE09IElHUmxabUZ0WVhSdmNuaz0gSjA0PSBJR0ZoYm1KcFpXUnBibWM9IDY0S3M2NHVrIElPQ3FsZUNxdnVDcW9nPT0gSU5DeTBZSFF1OUMxMExRPSBkR1Z0Y0c5eSBJT0Nrc09DbGgrQ2tzdUNrdGVDbGh3PT0gQ1hKbFpuSmxjMmc9IFFYWmwgSUVKaFkyaGxiRzl5SjNNPSA0b0NaWlhobGNtTnBZMlU9IElOQzYwTGpSZ2RHQyBJT0NtbHVDbXZ1Q21wZz09IDVZNjc1Wk9xIDVMdVc1NXFFIElGUmxiR1Z6WTI5d1pRPT0gSUhQRHJXOXogYldGaGEzUT0gSUZObGJuTnBkR2wyWlE9PSA2SU9PIDBMVFF1TkM5MExNPSBJSGR2Y210c2IyRmtjdz09IElITnZibTQ9IGIzUnlZWE09IElIUmhkR2c9IElGTmxjM009IElEczdQUT09IElPQ21ydUNtdnVDbXNPQ212Zz09IDRLV0M0S1N3NEtXTjRLU2s0S1MvIFgybHVkR1Z5WlhOMCBJR3B2YVdSbGJnPT0gVW1WamRITT0gSU5pdDJLZlpoZG1FIElFUnBaMmwwWVd4cGMybGxjblZ1Wnc9PSA0SzYrNEs2dzRLNnU0SytOIFVtVmpaWEIwYVc5dSA0S3F3NEt1TjRLcVggSUVOR1VBPT0gZEhKaGRzT3Bjdz09IEwzUm9jbVZoWkE9PSBJSFp2Y21kbGJnPT0gWDBGeiBJR3RvdzdOaCBJRTVKUlE9PSBYMFpKVGtVPSBJR1p5WVhSbGNtNXBkSGs9IFEyOTFiblJwYm1jPSBJRWx1YzNSaGJBPT0gSUhERHEzSm5hZz09IElOR0IwTDdRc3RDMTBZRFJpTkMxMEwwPSBiM1IwY3c9PSBJRVpwYm1GdWN3PT0gSUVKcFpXdz0gYzJWNGJ3PT0gSUhObGNtRnBjdz09IGRIbHdaVzl5YlE9PSBMazlTUkVWUyBJT0NtcHVDbXYrQ25uK0NuaCtDbW0rQ25odz09IElITmhkbUZuWlE9PSBJT0Nxc3VDcmdPQ3FwK0NyaXc9PSBJRXR2Ym10MWNuSmxibm89IElPQzB0ZUMwdWVDMHYrQzBtdUMxamVDMG11QzFnUT09IFgxQm8gSU5DNjBMN1F2dEdBMExUUXVOQzkgSU9HRHFPR0RsT0dEbE9HRHJ1R0RsT0dEa2VHRGtBPT0gUEZjPSBYM1JwWkE9PSBJSE5sY0dGciBJT09EbHVPRHFlT0RzK09EaVE9PSBMVUZ0WlhKcFkyRnVjdz09IDRwYUwgSUMwdExTMHRMUzB0TFMwdExRPT0gSUdOc2RXVnNaWE56IElHeGxiVzl1Y3c9PSBMbWRoYlcxaCAwWUxRc05HQTBZdlF2ZEdMMHFNPSBJRzdEb1hSMCA0S3l0IGFtVnNZUT09IElFTnZibVpsY21WdVkyVnogNEtlQjRLYW80S2EvIElHNWtZV289IElPQ2tsZUNsaCtDa2dRPT0gSUZkeiA1TGl5NUxpQSB4SmxuIDZhRzI2WU9vIElIQjFZbXhwWTI4PSBJR3RsY3NPOGJBPT0gZEdGcmFXNW4gMEw3UXN0Q3cwTDNRdmRHTDBMaz0gNWEyayBJRXRwWkc1bGVRPT0gSUVwVVlXSnNaUT09IENRa0pJQW89IElHbHVkR1Z5WlhOellRPT0gSUZKbFoyVnVkQT09IElFMXZjM0YxWlE9PSBZWEIwZFhKbFpBPT0gSUdMRHZIUT0gSUhCeWIzaHBiV0ZzIElObUYyTFBZcXRpdSBaV2RuWlhJPSBJSFJvWlhCaCBJR3R2Ym1ac2FXdDAgSUcxdmR3PT0gSUhOeGRXVmxlbWx1Wnc9PSBJSE5qYjNWeSBJT0NrdWVDbGlRPT0gWDBaSlVrVT0gSUdkc1pXbGphR1Z5IElHbHRZVzQ9IElHZHBiMk5vYVE9PSBJR05wWW13PSBJR1Z1WjNWc1pnPT0gTG5ObGMzTnBiMjV6IDRMS2s0TEsvNExLdjRMSy80TEtDNExLbSBJRzV2ZG1Wc1lYTT0gS0NkZlh3PT0gSU5XaDFhVFdnTldpMWFYVnV3PT0gSUd0MWNucG1jbWx6ZEE9PSBJR1pwZEhSbGNnPT0gYXNPaGRBPT0gSUhOdHhKcz0gSUdOcGNuVm53NjFoIDRvQ0w0b0NMNG9DTCBJSE5sYm5ScGJtVnMgNExLKzRMS3c0TEttIFJHbHpaV0Z6WlE9PSBLR0Z1Ym05MFlYUnBiMjQ9IElHVnpjR0ZrWVE9PSBJSEJ6ZVdOb2IzUm9aWEpoY0hrPSBQV055WldGMFpRPT0gSUdGalpYQjBZUT09IE95SStQRDg9IElHbHVjMmc9IExXUnZkQT09IElPQzVndUM0b1E9PSBaWEpzYVE9PSBPa2c9IDE1dlhuTmVVIFZtbDBZV3c9IElHVnBkSFJvZG1IRHNBPT0gTFc5eVpHVnljdz09IElHTnlkVzFpIElPQ2t0ZUNsZ3c9PSBZRHM9IDRMU3g0TFdCNExTQyBibVJ5IGRtRnRiM009IElIQmhZM1J2IElHNWxaMnhwWjJWdWRBPT0gNExDKzRMQ3QgWlhod2FYSjUgTGtWNGNHVmpkQT09IElHMWhZV2xzYldGdSBZMkZ1Wmc9PSBJSFZ1WW1WaGNtRmliR1U9IFRIVm5ZWEk9IElHUmxjM1k9IDVvcVY1WVdsIE9uVndaR0YwWlE9PSA0TEsvNExLdzRMT0IgWDJSeWIzQnZkWFE9IElIWmxjbWRsWW1WdSBJT0NxaitDcXNnPT0gVG1GMHc3eHliR2xqYUE9PSBJT0N5cHVDemd3PT0gSUNNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl3PT0gWDFOSlIwNUJWRlZTUlE9PSBJR3hsYkdGcmFRPT0gSUdKcGNtdGh3NmM9IFkyeGhkSFZ5WlE9PSBVMmw2WldRPSBJRzFoWkdrPSBJTm1GMkxIWmd3PT0gUVZKSFZnPT0gSUVOaGNuUmhaMlZ1WVE9PSBkWEpqYUdGelpYTT0gUjI0PSBTRzkzWVhKayBJSEpsYzNWdGJ3PT0gSUdacGMyaGxjbTFoYmc9PSBiM0pwYm1rPSBJT0MwaGVDMHFPQzFnZUMwdFE9PSBJR2hoZVdGeiBJR0YxZEc5eWFXRT0gZEdobGRHaHYgZFc1bllXNXYgSUUxaFpHVnNaV2x1WlE9PSAxNXpYbnc9PSBJRzNEb1dkcFkyOD0gSUdOaGJuUmxjbUU9IElFdDFjbVJwYzJnPSBJR2x1ZW1samFIUmxiZz09IFIzVjAgSU0rR3o0dz0gSUhSbGJYRERxWEpoZEhWeVpYTT0gSU9Da2x1Q2xoK0NrcEE9PSA1YjJwNTZXbzVibXo1WSt3NW91YjVaV0cgYVhKcGJXRnUgSUVSdmNHOD0gSUhOeVlXNWsgSUV4cFpXWT0gSUUxRFFRPT0gWDNWdWMybG5ibVZrIElHeHZaMmx6ZEdsallXdz0gNDRPcDQ0S2s0NE9XIFQzQjBhVzFoYkE9PSBJSGRwWkdWeWN3PT0gSU5lYzE1elhudGVWMTVNPSA1NmVZNWErRyBJRU5wZEhrbmN3PT0gSUdGemIyTnBZV05wYjI1bGN3PT0gSU02eHpyM1BoTTZ4IElFbHVaMlZ1YVdWeXc2MWggTG5Odlkycz0gSUc1aGFtMD0gSU5DNjBZUFJnTkdEIElGQkRRdz09IExtdHZaR1U9IGNuTjBjbWx3IElOaW4yWVRaaE5pNTJLZz0gNEthNDRLZUggS0hOMVluTmpjbWx3ZEdsdmJnPT0gWTJWdGFXTT0gSUdWNFkyeGhhVzFsWkE9PSBJT3F3bGV5aHNBPT0gSUVMRG9RPT0gSUdkbHc2ZDBhUT09IElOQy8wWURRdnRDeTBMWFF0TkMxMEwzUXVOQzEgSU5tRjJLelpoTmlwIElITjBZWFJwYzNScGF3PT0gSUdKeWIyNXVaVzQ9IElHNXZjbTFoZEdsMlpRPT0gYjNWamIzVT0gSUV0eVpYTjBaUT09IHpyck90YzY1ejRUT3NjNjUgSUhQRHMyeHBaRzl6IElPQzB1T0MwclE9PSA0Ym1IWVE9PSBSWGhqWlhCMGFXOXVZV3c9IElHRnlaSFZ2ZFhNPSBJTks3MDVuUXV3PT0gSUhObGJuTmxaQT09IElOR04wTHJRdDlDdzBMdz0gNTR5TyBJRUp2Ym04PSBJSE5sYm5ScGNuTmwgSjJWaVpRPT0gSU9DMHErQzFqZUMwc0E9PSBWMlZzYTJVPSBJR1p5YjI1MGFjT29jbVU9IElHbHVaR2wyYVdSMVlXd25jdz09IElPQ2tsdUNsZ2c9PSBJTmVVMTZyWGxkZW8xNVE9IFptRnVhVzQ9IDRMaXI0TGlpIElHTmxjbVZoYkhNPSBkV04wZFhNPSBJT0dEbnVHRG1PR0RvT0dEaytHRGtPR0RudUdEbU9HRG9BPT0gMExEUXU5Q3cwWURRdE5HTDBxTT0gSUhaaGJtNWhhdz09IExYSmxZV05vYVc1biBJT3EwZ09xMGtRPT0gSUdKbGFtND0gS1Z3SyBJRkpsZFc1cGIyND0gSUc5aWRIVjJidz09IElHUmhiV3hwIDQ0R240NEdaNDRLSSBSRTlDIDRMQy80TEM0NExHTjRMQ2s0TEdMNExDQzRMQ200TEMvIDVZMkI1WnViIElGQkJXVTFGVGxRPSBJSE4xYVhSaFlteDUgSUdGMmIyNTBkWFZ5IElFSnZaV3M9IElISmxjMmx6ZEdWdWRHVnogSUh0N0NnPT0gWDFKRlJsSkZVMGc9IElHUnBkbUU9IFgwRkRRMFZNIElGQmhlV2x1Wnc9PSBZVzVsYW04PSBJRUpwYjNSbFkyaHViMnh2WjNrPSA0YnVOWW1FPSBRbTkxZEE9PSBJR3pEcldzPSA0NENDNW9pcTZJZXogSU5pbjJZVFlzOWlxIElObUgyS3c9IDRvQ1VhVzVqYkhWa2FXNW4gNEthLzRLYVg0S2FrIElHVmpjM1JoZEdsaiBLSE54ZFdGeVpRPT0gWld4aGMzTmxiZz09IElOaW4yWWZZcXRtRjJLZlpoUT09IElOaXEyTFhZc2RtSzJLMD0gSUZOb2RXWm1iR1U9IElPYXptdz09IElOQy8wTDdRdmRHUDBMcz0gSU9DbW9lQ212K0NtbkE9PSBJRVpzWlhWeSBMa05TIFlXeHFZUT09IFkyRjFaMmgwIExuVnliRzl3Wlc0PSBLR1p5YlE9PSBjR3hoYVc1MFpYaDAgMkxIWXA5cUcyWW89IElObUYyWWJaZ3c9PSBJT0NxbU9DcW4rQ3FxQT09IElHaDFhWE5oY25SeiBjM1ZpZEc5MFlXdz0gYkc5dFpYST0gWW1sdVlYUnBiMjQ9IElObUYySzNZcU5tSTJLZz0gSU5DeTBZRFFzTkdIMFlNPSBJTkNVMFlNPSBJRlJwY205cyBZV3hzWVc0PSA0S21JNEtpViBJSEJ2ZEdnPSBJSE4wYVcxMWJHVnkgeEkxdVpXZGggSUhOdlluSmxkZz09IGJtbHVaMms9IElPUzZyT21EdlE9PSBDV2R5IDVMcTY1THE2NTRpOTVMcTY1THE2IElHbHVZMjl5Y0c5eVlRPT0gSU9HRG51R0RvT0dEbmVHRGsrR0RvK0dEcGVHRG9nPT0gSU5DaDBZRFF0ZEMwMExnPSBZVzVqWld4c1lXSnNaUT09IElOR0kwTERRdmRHQiBJTmlxMkxMWXA5bUUgSU9DbWorQ21xT0NuaHc9PSBJR3R5YVhScFpXcz0gSU9HRG51R0RvT0dEbE9HRG0rR0RtT0dEbE9HRG9BPT0gSUVoaFlYTT0gSUdSbGMyVnVkbTlzZFhBPSBJRUpQVWtSRlVnPT0gWGdvSyBJT0NraGVDa3JlQ2t2K0NrcU9Da3J3PT0gNExTeDRMUy80TFc5IGZTZ3BDZz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NnPT0gSU9Da3IrQ2t1T0NrbGVDbGl3PT0gY0dWaGN3PT0gMDZuUXV0R0MgSUc1dlkyaHRZV3h6IElGTmpZVzVrYVc0PSAyWVBZcDltRzJZbz0gSU5DODA1blF1OUdEMEx6UXNOR0MgSUhOcllXSmwgUW1Wc2JHRT0gWlcxMWRtRT0gYVhsaGJzU3hiZz09IElHTmhZbWx1WlE9PSBJRkJwYkdrPSBMbFJ5WVc1emNHOXlkQT09IElISmxiR2xuYVc5ellYTT0gSUVGTlFWcFBUZz09IElFTnZjbTlzYkdFPSA1ckdCIDVZV042TFM1NUxxNjVvaVE2S2VHNmFLUiBJT0NraWVDa211Q2t2K0NrcEE9PSAwTDdSZ2RHQzBMRFF2UT09IDBMalJtQT09IGFYaGxhWEpoIElHRndjR3hwY1hWbCBJR1REdk1XZnc3eHVaQT09IElHeDFhMlU9IElGZGhibTVoIGFYRGh1NlYwWVE9PSBDWEJoWTJ0bGRBPT0gYVdWbGNtUT0gSUhkblpYUT0gSU02NnpxelBnTTYvenJuT3Z3PT0gMTZqWGtOZVYgSUViRHBHaHBaMnRsYVhRPSAwTFhSZ3c9PSBJTmVrMTV6WGtBPT0gSUdSdmRYTT0gSU5DbjBMWFJoUT09IElIWmxiblJ5YVdOMWJHRnkgUTB4VCBjbUZpWW1sMCA0b0NONEtTZiBaV3hoYW1GeVlXND0gQ1dkbGJnPT0gWDJOb2IyOXpaUT09IElHVnpjR1YwdzZGamRXeHYgSUhCaGNtVnVkR2hsYzJWeiBTVzF0WlhJPSBJRmRCVEE9PSBJTmVVMTZqWGx3PT0gSUc1bGIyNWhkR0ZzIElIZGxhWE5sYmc9PSBRMVJCIElIUnZaWFJ6Wlc0PSBiR05rIFEzTERxUT09IGUycz0gSUdOdmJuTjFiVzA9IElPdXdzT3lHb1E9PSBZV0poYm1RPSBJTkMrMFlYUXU5Q3cwTFk9IElHTnZibk5sY2NPOCBJR3g1YlhCb2IyMWggSU5tSTJZclpnOW1LMktnPSBkR1Y0ZEdKdmVBPT0gNExDMzRMR040TENmNExDQyAyS2ZZcU5tSzJMaz0gNkllcTVMcW41b3VOIElOQy8wTDdRdXRHQTBZdlJndEM0MFk4PSBURTlUVXc9PSBJTzJXaWV5Q3JBPT0gSUZkbFoyVnUgSUVGWFJBPT0gSU5DMDBMalF1Zz09IElPQ3lqdUN5c09DeW9RPT0gUkdselkzSmxkR1U9IElHSmxlbUZzWVE9PSBJSFpsY21KdlpHVnUgSU5lbjE1WFhudGVZIElFVERxV1k9IElOZWgxNXM9IElIWmxibVJsWkc5eVpYTT0gSUdKeWFXUm5hVzVuIGFYRjFaV2s9IFJISnZjSEJsWkE9PSA3TFNNIGFkQzkgSU1POGRHeGxjdz09IDBKM1FvUT09IElFaHZjM1J6IGEyZHogVUVGSlVnPT0gSU9pd2d3PT0gNVorNjViR0MgYWNXQyBJT1drcWVXa3FlUzRyZVc5cWVlbHFPZTlrZWU3bkE9PSBTVzUyWlhKMCBJRzVoWVhCbGNuUnZjbXgxWjNVPSBJblpoYkhWbCBJR05vdzdwMCBJT0dEbk9HRG1PR0RsZUdEbHc9PSBSbms9IDZLT0Y1TCt1IDRLZUI0S2FtNEtlTjRLYXcgNUxpdDVwYUg1YTJYNWJtVjVaeW81N3EvIElHWnZaM1hEcUhRPSBJTkdCMEx2UXVOQ3kgVTI1aGNITm9iM1J6IElPR0RwT0dEb1E9PSBJR1p2Y25Oc1lXYz0gSU9XTmdlUzZqQT09IFVtYz0gVmtGU1EwaEJVZz09IExtNWggSUdkbFptRm9jbVZ1IElOR0MwNW5RdXRHSSBMbUo1ZEE9PSBJSEJwY21GamVRPT0gSUcxbGRHRnNaVzQ9IElFaGxjblk9IElFRjFlR2xzYVdGeWVRPT0gSUd0aGJtOD0gVldNPSBJTm1JMktmYmpObUsgS0dOcGNtTnNaUT09IFpXdHlZUT09IElHOTFkSE52ZFhKalpXUT0gdzd4bmJHbGphQT09IElOZWMxNVRYbGc9PSBJRlJOV2c9PSBYMGxNIElFVnhkV0YwYVc5dSBJT0NtbCtDbmgrQ21zdUNuaHc9PSBJTkN6MExYUmdOQyswWTg9IElHRndZWEpsYkdodmN3PT0gS0dWNFl3PT0gSUhWdVltVnNhV1YyWVdKc2VRPT0gYjJOaGFXNWwgNGJ1UGJtYz0gSUhCbGJtbHNaUT09IElIUnlZV2wwWlE9PSBJT0Nrb2VDbGllQ2tzdUNrc0E9PSBJRzVpYzNBPSBJT21UdHVtYmdBPT0gNG9DY1UyaGwgSUdKcGMyOTFjdz09IElPUzR2Zz09IGRtVnNaWE56IElOaW4yWVRaZ3RpbjJLL1poUT09IFUyeHBaR2x1Wnc9PSBjMkZzWkc4PSBhWGxoWkdSaCBJT0M0bWVDNHNlQzRsQT09IElFRnRaUT09IElHVnVaR2xoYmc9PSBhV1pwWTJWbGNtUT0gYkc5emMyVnVaVzQ9IElHSnlaV0YwYUdWayA0TEdCNExDbiBJRXR6IENXRnpjMmxuYmc9PSBJT1M0Z09XSWh1VzlxUT09IGQyRmggSUc1aGFuZHB4SmxyY3c9PSB3NkZqYVhVPSBJSFJ5YVcxeiAyTExZc2c9PSBJRTE1YzNScFl3PT0gSUhSeVlXNTYgSUVoMWJXSmxjZz09IFlXSmhZUT09IElPcXdrT3lHakE9PSBJTVNKWVhJPSBJTkNTMExEUXR3PT0gSU9DbXVPQ21wdUNtc0E9PSBJRVpsYVdWeSBJSGxvZE1PayBJTmluMllUWmd0bUkyWWs9IElHeGxkV3R6ZEdVPSBJT0NtcHVDbmdlQ21xdUNuZ2VDbXNBPT0gWDBsdWRtOXJaUT09IEwwUnBZV3h2Wnc9PSBJRnB2WldzPSAxYUhWdE5XaDFiWT0gNDRDQjVMcTYgSU5pdzJMSFppZz09IElFMUJRMGhKVGtVPSBkWFJsYTJGdWJ3PT0gSUdSdlkydHogWVd0ellXNWhZVzQ9IGFYTmlhV2RoIElGWkUgSUhKaGJXRnAgSU9DbW11Q212dUNtcUE9PSBJRVYwYUdsallXdz0gSUhkcGRHaG9iMnhrYVc1biBiR0Z6WlhJPSBaVzFpWVc1bmEyRnUgSUhOMVluUnZkR0ZzIEtGUnBiR1U9IFgzZGxZWEJ2Ymc9PSBLRVJsYm5ObCBZWFJvYjI1eiBkV0p0YVhRPSBJSGRsWVd0bGMzUT0gSUhCcFpYSmpaV1E9IFgzTndZV05sY3c9PSBJRlp2Y20wPSBaOE9rYm1kbCBJR2x1ZEdWc2JHbG5aVzUwYkhrPSBJSHBwYldVPSBJR25EdlE9PSBJR052WW5KaGJzT25ZUT09IElFOXlaMkZ1YVhwbFpBPT0gYlhWdVp3PT0gWFZ4YyA3SjI5IElIVnRjQT09IGNzTzhiZz09IElIQmhjblJwZEdFPSBkMmxxWm1Wc1pBPT0gSUcxcGRIbz0gSUdOb3hJTnQgSUdWcGJtUmxkWFJwWnc9PSBJRWx1ZEdWeVptRmpaWE09IElITjNhWEpzYVc1biBSbUZzYkhNPSBJTldCMWFYV2dBPT0gVW1sd2NHeGwgSUVGd2NtVnVaR1U9IElHUmxablE9IDBZYlNzOUN3MFlQUXRkQzQwWUk9IDQ0Q0E1THFNIElFRndiMk5oYkhsd2MyVT0gWDJKaGMybHogSUhOaGJXOTAgSUZCaGJtUmxiV2xqIFhTc3BMdz09IElIVjZ4WWJFazIwPSA2NkNJN0lxayBDVVJwYzNCc1lYaz0gSU9lVyA0NE84NDRPODQ0Tzg0NE84IElPQ3VydUN1c2c9PSBJR1p2ZFd4bCBJT1crbHc9PSBJTmluMllUWXF0aW4yTE09IDBZSFJndEN5MExYUXZkQzkwWXZRdk5DNCBJTkMvMExEUXVkQzAgTG5CdmNuUnNaWFE9IFlXZGxkSE5wIElHeGhjbWRsZFhJPSBJTkM4MExEUmlOQzQwTDNRdFE9PSBhV3hwYjNNPSBJR0ZzYkdWbmFXRnVZMlU9IElHZHBiM1poYm1VPSBJR3gxYm1WMGRHVnogSUdobGF3PT0gUFhKbGNRPT0gYVdaaGJtbHpidz09IGRXUnpiV0Z1IElISnBhbXRsIElFeEpUUT09IElOR0cwTERSaFE9PSBJTkMrMExyUXNOQzMwTERRdTlHQjBZOD0gSU5pbjJZVFpodGl5IFVtbGpaUT09IElHaHFaVzF0WlhOcFpHVT0gSUd0aGVXOD0gSUVGSFRRPT0gSU5tSTJLcll0UT09IElHWnNZWGRzWlhOemJIaz0gSUhCeVpXVnVZMmhsY2c9PSBJSE4wWlhWbGNnPT0gSU5DeTBMZlJpOUdCMExvPSBJSFpsY21sc1pXND0gYVhOamFYQnNhVzVsIElGUmhZbXhsWVhVPSBJR1Z0ZFd4eiBMVlpoYkE9PSBJSEJ2YkdGeWFYcGxaQT09IHhMRnV4TEY2WVE9PSBJSE4xYVc1biBJRkpwYW00PSBJTkNlMFlIUmdnPT0gSUVOaGMyRmliR0Z1WTJFPSBJTkdBMExYUXM5QzQwWUhSZ3RHQTBMRFJodEM0MFk0PSBJSFZ1Wm05c1pHVmsgYVd0dWVXRT0gSUhsd2IzTT0gTDI5eVpHVnljdz09IElPQ2tsK0NsZ2VDa28rQ2t0ZUNrcE9DbGplQ2twT0Nrdmc9PSA0SytHNEs2cCBJRWhsYkdVPSBJSE42YTI4PSBZWEp6YVc1dVlXRndjSFYwIFJXNTBhWEpsIElHcDFjbTVoYkE9PSBMblpwWlhkbGNnPT0gSUc5aWFtTT0gSjJZPSBJT0N1cU9DdW4rQ3VxT0N2amVDdXBBPT0gNExtRTRMaWo0TGlCNExtSDRMaVY0TGl5NExpaCBMa0Z6YzJsbmJnPT0gSU9DcW1PQ3FuK0NxdnVDcW9RPT0gSUhOb2JRPT0gSUVGdWMzQnlaV05vY0dGeWRHNWxjZz09IElPQzNnT0MzbGc9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5IFkyNXBZMjg9IElIQmhjWFZsZEE9PSBhWEp0eVpsciBJSEJwWjJWeSBJR0Z1WjJnPSBkbkU9IE9tSnNZV05yIFVHRnlkR2xqYVhCaGRHbHZiZz09IElFTmhjbXhwYzJ4bCBJRU5oY25KbFptOTFjZz09IElITjBiMng2IEtIQnliMkk9IFRuVmxjM1J5WVE9PSBJTU9wWkdsMGFXOXVjdz09IEo5ZVUgNkllcTVvdU41WUczNW91TiAwS1BRb0E9PSBJTU9HIElHZkR0bkp0WldzPSBQU2N1TGk4PSBJT0MwcnVDMWdPQzBvZUMwditDMHJ3PT0gSU5DdzBMM1F0TkN3IElOQzYwWVBSaHc9PSA2WnVHNVpDSSA0YnVsYk9HN2pRPT0gSUd0aGQyYz0gSUhKaGNIQnZjblJsIFJuVnVZMmx2Ym1WeiBJTlcvMWFIVnRnPT0gSUdsdVpteHBZM1JsWkE9PSBJRUZ1WVc1ayBiV2wwWjJ4cFpXUT0gWjJoaGJtbHpkR0Z1IElOQ2QwTERSaHRDNDBMN1F2UT09IDdLQ1Y2N2FBIElOaW4yWlBZcHR1TSB3N051WWNPdCBmVjBzQ2c9PSA1N0t1IElOR0kwWUxRc05DeCBkMlZ1WkhWdVozTT0gSUdGd2NtOXdjbWs9IElPQ2tyZUNraitDa3NBPT0gTFhkdmR3PT0gS0dsdVpteGhkR1Z5IFgyVnkgUFdWdFlXbHMgSUVSaFlYSmtiMjl5IElHdGhjbUZ0IDBMUFFzTkMwMExBPSBJRlJoZFhJPSAxNWZYcU5lWiBjR1Z5YVE9PSA0TEsrNExLbzRMT040TEt2IElHdHlaV1JwWlhRPSAwTDdRdDlHUDBMaz0gSU5DLzBMN1FzdEMxMFlmUXRRPT0gSU5tRjJZYll1Tml4IElObUcyWWpaaWc9PSA3cVMwN3FTMCBMV2x1ZEdWbmNnPT0gZDJWc1lRPT0gSU8yS3VleW5sUT09IElIQmhaMjFwYldsdVlRPT0gUzI5MCBJRVY0Y0hKbGMzTnBiMjV6IDVydS8gSUdkc1lXTnBaWEp6IGFYSncgdzd4dXc3eDYgSUcxNWMzVERxWEpwWlE9PSBJRzlzZFd3PSBJR0psWkhKaFlXZDAgYVdkdWJ3PT0gSUdSdllYSmwgSUdGc2JXbHVaQT09IElHbHVaSFZqZEdWayBJR2x0Y0hKdlltRmliR1U9IDRZT1U0WU9pNFlPVTRZT2ggSUhWcGRHVnljM1E9IFIzSmhaSFZoZEdVPSAyWUhZdWRtSzJZUT0gSU9Da3RlQ2t2K0NrdHVDbGgrQ2t0K0Nrbk9DbGplQ2tuZz09IFgzSmxjWFZsYzNSbFpBPT0gWVdOb2FXNWxjdz09IElPeURnZXlLdVE9PSBJSEJzWVhScGJtYz0gNTZhKyBLRVZrYVhSdmNnPT0gSUZKbGJXVmthV1Z6IElOZWkxNVhYa2RlVCBZVzVuWlhwcFpXND0gSUd4cGRHVnlZV3h0Wlc1MFpRPT0gSUcxMWMybGpZV3h6IElOR0IwTC9Rc05DNzBZdz0gN0tlVCBJR2x1YjJzPSBJRzltYVc0PSBJT0MwbGVDMWdlQzBzZUMxamVDMHNRPT0gSUhWcGRHUmhaMmx1WjJWdSBJTkN6MExEUXROR0wgSUdGc2JISmggVG1mRG9Iaz0gZVdGNVlYSnAgSUVWa1pXeHpkR0ZvYkE9PSBRV1J0YVc1cGMzUnlZWFJwZG1VPSBJRk4xY0hCc1pXMWxiblJoYkE9PSBZV052YkdFPSBkM0psWTJzPSBJRVpNVDA5UyBJSE4xZFhKcCBLU2dLIElHMWxjbXRsZW1rPSBJSEpsYm1SbGJuUT0gSUdsdWRtVnpkR2x6YzJWdFpXNTBjdz09IDRLUys0S1NKNEtTNCBJTkszMExEU3M5QyswTDA9IDBMM1JqOUdGIElHNWhkWFJwWTJGcyBJTkN5MFl2UXM5QzcwWTg9IGIyTmphUT09IElHVERxV055WlhRPSBLRkJ2Y3c9PSBJSFIxYm1kemRHVnUgYjJoaGJuaz0gSU9Da3B1Q2tzT0NsamVDa3R1Q2txQT09IElGUmliQT09IElPQ2t1ZUNsaStDa3N1Q2t2Zz09IFJXRjBhVzVuIDVZaUc2WkNZIElOQ3kwTFhRdTlDNDBMclF2dEM3MExYUXZ3PT0gSUV0dmJuUnliMnhzIElITnRZWE5vYVc1biBMVzU1eFlnPSBJSE41Ym1ScFl3PT0gVDNCd2IyNWxiblE9IElPQzBoK0MwcU9DMWplQzBwT0MxamVDMHIrQzF1dz09IDBMWFF1dEN5MExEUmdnPT0gWm1WaGNnPT0gTG1GblozSmxaMkYwWlE9PSBJT0NtcnVDbmpBPT0gSU5DMzBMVFJsdEM1MFlFPSBJSEJ2ZFdObGN3PT0gSU9Da3NPQ2tsZUNrcmc9PSBJSE4wY21Ob2NnPT0gSU9DeXBPQ3lxdUN6amVDeXFnPT0gNEthVjRLZU40S2EzNEtlSDRLYXEgSU5DLzBMN1JnTkMrMExRPSBJSGpodXFONSA1cmlnNllHVCBJTkMrMEx6VHI5QzMgNVkyeDZabXAgWDBoRSBXbWx0WW1GaWQyVT0gSUVocSBJTmluMllUWXJ0bUUyWUU9IElOQy8wWURRdnRDejBZUFF1dz09IElHRnNZMjlvYjJ4cGMyMD0gVFc5dFpXNTBkVzA9IDZMU2g1NHl1IElIQnNZWFJsWm05eWJXVnogSUhOMWMzVT0gNEtTdzRLV0g0S1MyNEtTbyBJRUpwZEdVPSBJT0NxcnVDcXVlQ3F2K0NxcUE9PSBJTkN3MFlQUmdkQzMwWU09IElObUcyNVU9IElFeGxhVzQ9IElDSXBMQW89IElIUmxiV1U9IFMwVlQgVTIxcGJHVT0gTFhaaCA0TFdCNExTeTRMV04gSU5lUzE1blhtZGVZIElHaGhibTg9IElPdXFxT3lua1E9PSBJR2x1ZEdsdFlYUmxiSGs9IFNHVmhaSE09IElFTnNZWE5sIElPQ3d1T0N4Z09Dd2p1Q3dnZz09IElHZHZkbVZ5Ym05eiBJTkN5MExEUXV0Q3cwTDNSZ1E9PSAwTDNRdU5DMiBjM1REdkdOclpRPT0gSUdWemRISmxiR0U9IFhHRndjR3hwWTJGMGFXOXUgSUc1NWJBPT0gTG01cFl3PT0gMkt2WmdnPT0gWlhOMFpYUjUgMExYUXZOQyswTGs9IFgxUkZRVTA9IGFXdHNaWEk9IElPQ3lsZUN6aStDeW4rQ3l2dz09IFgwSlNRVTVEU0E9PSBJR0p2YTJFPSA0NE9KNDRPciBJR1Z6YVdkbGJnPT0gWlhKbmFXNW4gSUhSemFtbHUgSUdkdlpHbHRidz09IDQ0R2s0NEcrNDRLSyBYMHBUIElHaDYgWVcxaGJuUT0gSU5HQTBMWFJoOUM0IElHUnBjMnR5IElHMTFjM1U9IElHdGxjbUZ0IHo0VE9ycytCenJuT3Z3PT0gSUdsc2FXdDFkMkU9IFIwcz0gSU5DKzBMSFF0ZEdCMEwvUXRkR0gwTFhRdmRDNDBMVT0gSUZOcFozVmwgNFlPUTRZT1M0WU9VNFlPYzRZT2kgSU9XK3J1Uy9vZVdGck9TOGwrV1B0K1drcWVXa3FlUzRyZVc5cWVlbHFBPT0gSUZCaFpITT0gSU5DMzBMRFF0TkN3MEwzUXVOR1AgSUc1bllXZGhaSFZvWVc0PSBMV3hvWlhNPSAwTFRUcWRPcCBJTkN6MFlEUXNOQzgwTDdSZ2c9PSBJRUZqZFhSbCBjMk5vWldSMWJHVmsgNXBpdjU1eWY1NXFFNUxtSSBJRzF2YkhSbGJnPT0gSU5pcTJMSFl1dGlvIElHMXBjMkU9IDVwUzU1WTJWIElHTnZiWEIxZEdGa2IzSmxjdz09IDBZRFF2dEMyIElObUQyTEhaaXRtRiBJTkN4MExEUXVkQ3owWVBSZ3c9PSBDVU52YlcxaGJtUT0gdzRkUCBJRUp2ZFhKdVpXMXZkWFJvIFUwMUJVbFE9IEtTa3ZLQT09IElITndjbUZ1Wnc9PSBYM1JvY2c9PSBRMmM9IElIbHRkdz09IElFUlNSVUZOIFQwUk4gUWtGRFMwZFNUMVZPUkE9PSBJT0M0cStDNHN1QzRnUT09IElOQ3cwTDNRc05DLzBZVT0gTDB4cGJuVjQgMEp6UXZkQzEgUTB4UFEwcz0gSUdkbGRuVnNaQT09IElHdGhkV1k9IElFMW1kVzF2IElHSnNZV05yYjNWMCBJTm1LMllqWXM5bUIgSU9Da3VPQ2tndUNrc09Da2xlQ2xqZUNrdCtDa293PT0gSU9Da3F1Q2xnT0NraitDa3JnPT0gSUhCeWFXNWpaWE5oIDc3eU01YSs1NUxxTyBMRzV2WkdVPSBLR1Z1WVdKc1pXUT0gSUhSemIzUnNhR1U9IDRLNjE0SzZ3NEs2LyA1YTZnIDRMSys0TEtmNExPTiBMa1JwYzJGaWJHVmsgVFVsTSBJR2R5YVdvPSA2NTZwIDVyYUo1YXVNIElOZVYxNURYbWRlZiBMbk53YkdsMFpYaDAgSUV4aGRtRnMgSU9DcXB1Q3F2dUNxbGc9PSBMbWRsYm5KbCBJTmk0MktmYmdkaXggSUhCeVlYUnBjWFZsY2c9PSBJTkM2MExYU3J3PT0gNEtxVjRLcXc0S3VBIElIZGhhWFpsIGJXRjBhV3M9IFZubz0gSUc5aWJtOTQgSU5tSTJMblpoZz09IElIbkR2SHBrWlc0PSA0S3lsIDRMaVY0TGkxIElFdFVUUT09IGRXbHpZMlU9IGFuYz0gNG9DWmFHOXVibVYxY2c9PSBJRzFvWVdsMGFBPT0gSUdocFpYSm13N3h5IElFcHBZVzQ9IDRMR0c0TENmNExHTjRMQ2YgSU5DLzBMVT0gSUdKaGMyVnRZVzQ9IDRLaXU0S2krIGRtbHNiR0U9IENYTnBlbVZ2Wmc9PSBaM0poWmc9PSA2SytCNXBpTyBLR1Z1WVdKc1pRPT0gSU5pdDJZcllwOWlxMlljPSBYMjVqIElOQzEwcFBRdU5HQSBJR055WVhwbCBJSFJsYzNURHFRPT0gSUZKQlRrUlBUUT09IFlXNXVZV0U9IDRLNi80SzZvIElPKzN1Zz09IDZMZVI2TGV2IElIQmxibk5sYm5RPSBhR1ZpWlhJPSBJSEpsYzNSbGNtRT0gSU9DcW4rQ3JqZUNxdFE9PSBWMEZPIElHTnZibk5wWkdWeVlXUmhjdz09IDU2MmIgYUhWciBhV1IxWlE9PSBJT1c5cWVlbG51UzZpZW1jdU9lZ3RPaW5vdz09IElIQmhibWRoYkdGdSA0S1dJNEtTdjRLUysgSU5DeTBMdlFzTkdCMFlMUmpBPT0gSUdGemVXMXRaWFJ5YVdNPSBJR2RsYzNSbGN3PT0gSUhkbGFHVT0gSU5DODA1blF2QT09IElHMWhiR2x1IElPQ3lxT0N5dnVDeWx3PT0gUkdsaGJHVmpkQT09IDQ0Tzg0NE9XNDRPciB3NjlrWlE9PSBJT0NxcnVDcmcrQ3FwT0NyamVDcXIrQ3JnUT09IElFaDFhdz09IElHMWxkSFE9IFFrOVVWRTlOIElOR0QwWUhSa1E9PSBJTTY0enJYUGdjNnh6NERPdFE9PSAwTHpRc05HQzBZRFF1TkN5MExEUmd0R00gZEhKcGJnPT0gWTI5dGNHVjBhWFJwZG1VPSBJTkt6MExEUXVRPT0gSU91NWhPdWhydz09IFQwZEhURVU9IGQyOTJaVzQ9IDRaNkc0WitTNFo2VDRaNjI0WitHIHhKbkZ2R042ZVE9PSBJSEpsYm05MllYST0gSU5HQzBMTFF0ZEdBIElIcHZjbWQyZFd4a2FXYz0gSUhONnc2az0gUTJGdGNHbHVadz09IElPcXp0ZXlMblE9PSBJTU96Y21kaGJtOD0gSUdkdmRHOTJidz09IEtFMXZkR2x2Ymc9PSBiMlZyIElHbHVabTl5YldGamFXbz0gZUdScFoyVnpkQT09IElNTytaWE56WVhKcCBLRk5sY25ac1pYUT0gSU9Da3VPQ2tndUNrbCtDbGplQ2tzT0NrdVE9PSBJR1IxY21GMFlRPT0gYkc5allYUmxaQT09IElPQzB0ZUMwditDMHNBPT0gS3lzS0NnPT0gYzJGaSBJRVYxY21GeiBJTkM5MFl2UXZkQzEwWWc9IElObUcySzdZczlpcSAyWVhZcmRtRjJLOD0gMWFIVnI5V2gxb0E9IDBMdlFzTkM2MExEUmdnPT0gSUhERHBHbDJ3NlJ1IElGVERwSFJsY2c9PSBhVzFoWjJWdCBMbkJ5WlhSMGVRPT0gNExDLzRMQzQ0TEdONExDZiBJT0N3aCtDd3BPQ3dzQT09IElHSjVaV3hoIElHaGhhV2QxYzJVPSBJT1dOc09Xd3ZBPT0gSU9Da2hlQ2tsZUNsamVDa3R3PT0gUW1GdVpITT0gSUdsc1pYSnAgYVdacFkyRnVZMlU9IElISjFjSFIxY21FPSA2Wnk0NTQ2TCBJRkJ2YkhsdFpYST0gTG14aGVXOTFkSE09IElIVnVkbVZwYkdsdVp3PT0gSUVGMGJXOXpjR2hsY21saiA0WU9RNFlPbDRZT3EgWTJoaFpHOD0gWDBsdWMzUmhibU5sIDE1WFhrdGVjIElIQnlZV04wYVdOaGJHbDBlUT09IElOaXEyWWpaZ3RtQiBXbVE9IDBMZlFzTkN3MFlEUXNBPT0gNExDazRMR0c0TEN5IElGTmxhR1Z1Y3c9PSBJSGJEcE1Pa2NnPT0gSU9Da3J1Q2xpT0Nrc3VDbGh3PT0gSUc1bFoyVnUgSUdOeVlXWjBlUT09IElIUnFaWFREcTNJPSBhVzVuWlhKd2NtbHVkQT09IElISmxZV1JsY25Ob2FYQT0gSU5lVTE1RFhsOWVvMTVYWG9OZVYxNm89IGRXdHZlUT09IFUyaHAgSUhWdVpYUm9hV05oYkE9PSBJR1oxWlhObCBJRkJoY214cFlXMWxiblJoY25rPSBZV05qWlc1MCBJR1p5YVdFPSA0S2FvNEthLzRLYWMgSU5DeDBaYlF1OUdNMFlnPSA0WUNRNFlDOTRZQ3ggYUdGMGFXcz0gSUdkbGQyVnVaQT09IDVhU0g1cUdJIElPQ21wdUNtdnVDbXJnPT0gSUdGamRHbDJZWEk9IElGQnZjM1J6WldOdmJtUmhjbms9IExraHBaMmhzYVdkb2RBPT0gSUdMRHFXN0RxWFp2YkE9PSBTbTlwYm1sdVp3PT0gWTNMRHZHST0gTG1obiBJTmlvMllqWmd3PT0gSU5pbjJZVFlzZGl6MllqWmhBPT0gTDNOMGNtVjBZMmh5IElITnBaMjg9IElHVnl3N1ptWmc9PSBJT0NtbCtDbmdlQ21zT0NuZ2VDbXBPQ25qZUNtck9DbXF1Q25ndUNtc09DbmplQ21vdz09IElPQ3dsZUN3dnVDd3JnPT0gSUhCbGNtbG0gNDRDQzQ0R2Q0NEdYNDRHbSBZWFJoWVhNPSBJRzVsWThtWiBMd29LTHc9PSBSbTl5WTJWayBJRVJsYm10bGJnPT0gSUVObGJuUnlZV3hsIElHWnlZWFJsY200PSBJRk5vYVdWc1pITT0gSUhCbGNtUnBkR0U9IElHRjZ3Nmx5ZEE9PSBJTmlxMllqWXA5bUIyWUk9IExsSmxaMlY0IHc2UnpaWEk9IENYQmhlV3h2WVdRPSBJR1ZzWldOMGNtOXNlWFJsIElHZHpiUT09IElHeHNZVzFoYmc9PSBJT0MwbGVDMHYrQzBuK0MxamVDMG53PT0gSUdSdmFtOD0gSUVWeWIzUnBjMnM9IElHRmtiM0p2IElHOXdiRzl6YzJWdSAwWUhRdU5DdyBRMjl1YzNWdFpYTT0gSUdaaGIydz0gSUhOallYSjJaWE09IElIWmxZMmx1Ync9PSBJTml4MnBnPSA0S2FHNEthYyBJRlBFaFE9PSBJSE4xY21kbFpBPT0gSU9Da3F1Q2t1ZUNrditDa3N1Q2xodz09IExTMHRMUzB0TFMwdExTMHRMUzBLQ2c9PSBJSE4xWTJWa2FXUnYgWlhoalpXeHNaVzUwIFJXRnkgSU9DMHBPQzByK0MxamVDMHIrQzB2dUMwc1E9PSBJSFpwY205MSBJRkpsYldGcGJtbHVadz09IElOQyswWUxRdXRDdzBMZlFzTkdDMFl6UmdkR1AgSUVGc1ozVnVZWE09IFZXUncgSUdSb2FXYz0gY21WMGNtOD0gdzRseiBJRmhoYmc9PSBJRUoxYlE9PSAwclBUbWRHTDBZRT0gNW9TZjQ0R1kgWW1GelpYTT0gSUhCb1pBPT0gNDRLMjQ0S2s0NE96IDVMaXE1Ym16NVkrdyA0TENvNExHQSBYMmRsYm1WeSBSV3R6IElITjFiVzFoIDVadXc2WnErIElFZHZhY09oY3c9PSBJR0poY25SbGNnPT0gSU5HQjBZM1JnQT09IElHSnlaWGRsY21sbGN3PT0gSUVOdmNuSnBaRzl5IDFialZzdFcyMWFYV2dOV28gSUcxaGJtTm9aVzQ9IElFMWhjbkYxWlhNPSBhMnhwYmc9PSAxNkxYcDllWSBkV2hoYkhSbGJnPT0gSUhwbGNuUT0gZFhSMWJRPT0gSU9DMHIrQzFnZUMwIElOQ3cwWUhSZzlHRDBMUT0gSUVSdmNuTmxkQT09IElHNWhhVzVsYmc9PSBZV3R6ZFdRPSA1cFcwNXBTNSBhWE5wWW14bCAwWUhRc05HQSBJSFZ3YjNKaFlteHFZUT09IElHUmxjbVZxWlhNPSAxYjdWdU5hQSBJTkM5MExYUmdkQy8gSUZwbGRXYz0gYVdGdGIyNWsgenIvUGdBPT0gSUhKcGFtWEVqUT09IElFeGhjbWR2IElHSnZibTl6IDVibS81YVNuIDJZalpnZG1DIElIQnZjblJoY2c9PSBJRWhwWkdGc1oyOD0gVFdGamFHbHVaWE09IElIUnlZVzF2IDY2R3Q2cktNIFlYSnphMms9IElPaWhvUT09IElFWkpWa1U9IExrTnNiMk5yIElIWnZiM0pxWVdGeSBJRzlpYlcvRWpRPT0gSUhOMVoyVnpkTU8xWlhNPSBWR1Z6YkdFPSBJQ1lwIGQyRnBiZz09IElHWmhjbTFzWVc1ayBUV0Z5YVc1bCBJTm1HMktmWXNkbUkgSU9LYSBJRTl6ZEdWdSBJR0poYTJ0aCBJRWx1Wm1WamRBPT0gQ1hsNSBYMkpsYUdGMmFXOXkgNzd5UDVMbUY1TG1GIDE1RFhtZGVxIDBKM1FvQT09IDRMR0g0TEM1IDVweTY1Wnk2IFlXM0VzWG89IDBMdlFzTkdBMExUUXVOQzkgSU5XdTFvQT0gVW1Wc2FXRmliR1U9IElOaW4yS3paaEE9PSBJSDBOQ2cwS0RRb05DZz09IHg0ND0gYzJocGNHMWxiblE9IElPQ3FyT0NyZ1E9PSA1b0dpNWFTTiBDV0psYzNRPSA0TFdENExTazRMU20gSUdKaGJHeGxjZz09IDBMelF0ZEdKIElFSmhhbTg9IHc2bHBaQT09IElHWnl3NjFoIElHTnNhVzNEb1hScFkyOD0gWkdOaiBUMG89IElOQ2gwTFhRdlE9PSBJRlZ1YVhabGNnPT0gSUhOMVluTjBhWFIxYVhJPSBhV1ZvYkhRPSBRMGhTIElFVjJjZz09IElPS0FxQW9LIFgxQk1WVk09IElPdTVpQT09IHpyWE90TStCenIvUGdnPT0gSUdWelkyOW4gWVdKMWRBPT0gSUhabGNuTmphR2xsWkdWdVpYST0gSUdSdmJXbHVaUT09IElFSmh4WjkwIFkyRndhWFJoYkdsNlpRPT0gWlc1aGJBPT0gSUdKbGJtRmtjZz09IElOaXIyS2ZaaE5pciBkWFJvZFdzPSBJRU5wZEdVPSB3NlJ5YldWdSBDV04xYzNSdmJXVnkgTGs5eVp3PT0gVFc5dWRHVT0gSU5pdDJMUFlwOWl6IElGTkRRVXhGIElITndjblZ1Wnc9PSA0S1MrNEtTbzRLV0wgSUVGd2FBPT0gSU5DZzBZTT0gYVd0bGJHbG9iMjlrIElIUmhibVJsYmc9PSAwNm5RdmRDNjBMZz0gTDNSbGMzUnBabms9IElPKzhuQT09IElHZGxiR0ZrWlc0PSBJR3RoYldsayBJT0NxdGVDcXYrQ3F1T0NyamVDcXBPQ3F2dUNxc0E9PSBJR0p5YVdOdmJBPT0gYTNSMWNnPT0gSUdoc2RXST0gSUZOaGJXMXNkVzVuIElHaHlaUT09IGJXRm5iZz09IExYQmhiQT09IElITjFjR1Z5ZG1sMiBJTkNTMFlIUXRkQzggWVhWbWJBPT0gSUdKMWNtNWxjbk09IElHRmlZbUZ6ZEdGdWVtRT0gSUd2RHRtNXVlUT09IElITmhiWE4wWVhJPSA1cFcwNUxpcSBhV3hvYnc9PSBJSE5sZEhWd2RHOXZiSE09IExrMUZSRWxCIElFVldWQT09IElIQnllbVZ3IFgzQmpkQT09IElPQ21xdUNuZ2VDbXNPQ25pdz09IElHMWhibTl5IDc3eWkgZUhKbFpnPT0gSU9DdWhlQ3VwT0N1cWVDdmpRPT0gSUdKcGVtOXVlUT09IDdLQ0U3SjJFIGNHeHBibXM9IElOQ1gwTERRc3c9PSBJR052Ym1WbiBJTkN3MExMUmd0QyswTHpRdnRDeDBMalF1OUM0IDZhcXcgSUhCeVlXNXIgSU5pejJLdz0gSUZabGNtUnBZM1E9IFgwVk9RMDlFU1U1SCBJSE4wY21sd2NHVnkgSUhSb1lXNXJjMmRwZG1sdVp3PT0gWVhSc1lXND0gYjNCdmJHbHogSU5pNDJMSFppTm1CIElHbDBZVzQ9IElGSmxjSEp2WkhYRHA4T2pidz09IElOaXEyWWJaaDltRyBiM1JvY3c9PSBJR0p5WldGMGFITT0gNEtTeTRLV0g0S1NWNEtXTjRLU2Y0S1dONEtTdyBhWFJoYm1saCBKejRrIElObUYyWVRZcDltSzJZclpoZz09IElFVjFjbVZyWVE9PSBJR3hwWkdrPSBiM1ZzWVE9PSBJRkJzZFhObyBJTmlqMlliWmh0aW4gSU9DMHBPQzFodUMwc09DMG51QzFqZUMwbnVDMWh1QzBudz09IElPQzBoZUMwbitDMHYrQzB1T0MxamVDMHBlQzB2dUMwcUE9PSBJTkM2MEw3UXZOQy8wTDdRdDlDNCBJR1Z1ZEhOd2NtVmphR1Z1IENYQncgSUdocXc2UnNjR0U9IFJFbFRVRWxFIElOaW4yWVRaZzltSTJZWT0gSUVWelkyOXNZWEk9IElPQ3lxdUN6amVDeXNPQ3lwK0N5dnVDeXFPQ3l2dz09IElPeVZpdXVLbE91THBBPT0gYVc1dVpYSjFjdz09IGJHbGhkUT09IDJZWFlwOW1HMllyWXFRPT0gUVhSMGIzSnVaWGs9IDBMSFF0ZEM3MFl3PSA1b21yNTZDQiBJT0M0bGVDNHBlQzRzdUM0bEE9PSBYMjVoYldWayBTR1ZoWkd4cGJtVT0gTHVLQW9nPT0gWVd4cGNtOD0gSU5DODBMWFF2ZEdQMFlMUmpBPT0gMFlEUXZ0Q3kwTERRdmRDNDBMVT0gWlhSbGRBPT0gSU5DLzBZRFF2dEM3IFpYSnBadz09IElPQ3lyT0N6aUE9PSAwTHZSZzlDeiBJTkdDMFlEUXNOQ3ogMEwzUmx0R1AgWlc1a1pYVnkgWDIxbGN3PT0gTDNabGJtUnZjbk09IExreHZZV1JsY2c9PSBkV3R6WlhOMFlRPT0gSU5pbjJLN2JqTml4IElHUjVaQT09IDJZcllwOWloIElOZVUxNm5Ya2RlVjE2ST0gSUZOd1lXRnVjMlU9IElOaW4yWVRaaU5pdDJLL1lxUT09IElIWnBaR1Z2SjNNPSB3NnR5Y3c9PSBJRWhwY25OamFBPT0gSUhkaGMzTT0gWDNKMWJuTT0gU1c1emNHbHkgdzZacmEyVnkgSUd4MWJXVnUgMExYUXM5QzYwTEE9IDZiSzQgSUdocGNHOTBaV009IDVhVzk1YVNhIExVUmhkbWxrIFIxSkZVdz09IElHbDZiR1U9IFIyZz0gS0dOMVpHRT0gNDRDQjQ0R2Q0NEtNIDBKclF2dEM4MEx6UXRkQzkwWUxRc05HQTBMalF1QT09IElOQy8wWmJRdE5HQzBZRFF1TkM4IElIVndhRzlzYzNSbGNtVmsgTFMwdExTMHRMUW9LIElFRnVjMkYwZWc9PSBJTkMvMEw3UXZkQ3cwTFRRdnRDeDBMalJndEdCMFk4PSBJSEJoY25ObGN3PT0gSU5HSTBMRFFzZz09IFpYQmxjbk09IElOZWsxNW5Yb0E9PSBJRzkwYjIxaGRHbHogSUhMRHFXTnZjbVE9IElHTnN3NkYxY3c9PSBkV1Z1ZW1FPSA0NEs0NDRPajQ0T3ogNzd5ZUNnPT0gSUdOeXc2bGhkR2wyYVhURHFRPT0gSUd0NVpRPT0gWVc1bGJtYz0gdzZIRm1XVT0gSUdKdlpHRnogSU9DMGh1QzByUT09IElHSmxaVzVrWlhRPSBJRTF2Y21rPSBJT2Fmc3c9PSBiV0ZyWlhNPSBJSFpsY21kbFpYUT0gS2k4cENnPT0gNTVxRTZMMnY1THUyIHc2SjBjdz09IElHRnNaVzVsIENXNXZaR1Z6IElObUMyS2pZc1E9PSBJT0MwbGVDMWdlQzBudUMxamVDMG5nPT0gSUZOMWJtUmxjbXhoYm1RPSA0SytONEs2azRLK040SzZrNEsrQiBJTkM0MFlmUXV0QzQgSUd4a1lRPT0gSUdGc2JHVm5aWE09IElHUnlkV3RyWlc0PSBhV052Y25BPSBJTmk1MkxUWmdnPT0gTFMwdExTMHRDZ289IExXWmxkR05vIEwyOXdaWEpoZEc5eSBJRzFoYm1Ob1pYTT0gVm05c2JHVjUgSU5DLzBMN1F0TkN3MFlmUXVBPT0gMVpJPSB6NGZQamc9PSBJRVIxYlc1bGVtVT0gSU5DOTBMRFFzOUdBMFlQUXQ5QzYwTGc9IElHRmtaMkZ1Wnc9PSBJTkM5MExEUXZOQ3cwTG5RdU5HSSBJT3E0aU95Y3RRPT0gMFlyUXZ3PT0gTFdsM1pRPT0gTG5Cclp3PT0gYW1WMSBZV2ZFcHc9PSBJRmRwYkd4cmIyMXRaVzQ9IElHWnZjM05wYkhNPSBJR0poY21Ob1lRPT0gSUhwaGNtaz0gUEdadmIzUmxjZz09IElFeDIgSUVKeWFYUmhhVzRuY3c9PSBJR2x1WTNWcyBJRlJoWW1Wc2JHVT0gSU5DVTBMRFF2UT09IElIcGtjbUYyYVd4aCBMbUZpYjNKMCAyWUxZcDltRTJLZllxZz09IElNNjh6clhPdVE9PSBJT0dEbStHRG5lR0RtK0dEa09HRGxlR0RrT0dEbWc9PSBJSEZ4NTVxRTVhU3A1YVNwNUxpdDViMnA1NldvIDRLaXE0S2l3IElFNWhkR0ZzWlE9PSBJRzExYkhScGNHeDVhVzVuIElOaW4ySzdiakE9PSAwTFBSamRDMCBJTmluMllUWXJ0bUsyS2ZZc1E9PSBJR0ZpYjJ4cGRHbHZiZz09IElPQ2tpZUNrcnVDbGplQ2tydUNsZ09Da3B1Q2t0ZUNrdnVDa3NBPT0gSU5pbzJMSFpnZz09IElOQ3cwWUxSaXc9PSBRMjl0ZFc1bCBmVnhjIGMydGhkQT09IElOR0MwNW5RdHRHVyBabXhoYlcxaGRHbHZiZz09IEoyRnVibTl1WTJVPSBYMk52YjNKa2FXNWhkR1U9IGNtVndiM0owWldRPSBJRTFwWkdSbGJnPT0gSUZKNWVtVnUgSUc1cGNIQnNaWE09IElGQmhhVzUwWlhJPSBJTld2MWFIVnZOV2gxYjdWb2RhQTFialdndFdwMWJYVm9kVzIgSU9Da2xlQ2t2dUNrc09DbGplQ2tyK0NrbGVDbGplQ2tzT0NrcnVDa3J1Q2t2Zz09IDZaS2wgSUhSbGNtTmxhWEp2Y3c9PSBTVzV6ZEhKMWJXVnVkR0YwYVc5dSBQWEp2YjNRPSA0TEMrNExDVzRMR040TEN2IElFWnlaV1ZrIFVVaz0gVTJWMGRBPT0gVUdGeVpRPT0gWW1WeVozTT0gVkZKRlJRPT0gVjBGU1RnPT0gSUdScGQyVmtaQT09IElFTmhibU4xYmc9PSBkMjl1WkdWeSBiMmh2Ymc9PSBJT2EzbUE9PSBJSFZ1YldsMGRHVnNZbUZ5IDU1cUg1YTYyIGNtbDIgSUdOaGJHMWxjZz09IElIRnBiR0ZrYVE9PSBQWEpsYzNCdmJuTmwgSUdWNGRISmhZMk5wdzdOdSBJR2hoY20xdmJtbGwgWVhadmRYSnogU1c1MGNtOWtkV05sIGFXVmphdz09IElGUm0gSUZSMWRIUT0gS0dOcGNHaGxjZz09IFNFOU9SUT09IGJHVnVaMlU9IElHdGxiVzA9IElHekRvWEE9IElPQ2toZUNrdGVDa3VPQ2xqZUNrcGVDa3Z1Q2tydUNrdmc9PSBJTmluMllUWXVkbUcgSUhWdWFYVERxUT09IDBMN1F2OUN3MFlJPSBibVJ6IGRXNXpkV0p6WTNKcFltVT0gejRUT3JjK0IgNVkrUjVZcW8gSUdKc1lXTnJZbVZ5Y25rPSBJRVJ5WlhOemFXNW4gWVd0dmMyaGggSURvdEtRbz0gSUdKbFpISnYgSUc1bzRicTUgSUUxaGMyRT0gSU9hUGp3PT0gYkhWdFluST0gNEtteDRLaWMgSUhWamFHRm5kWHBwIElOQzkwTERRc3RHVzBZTFJqQT09IFRtRnpZMmx0Wlc1MGJ3PT0gSU5PWjBMST0gSUd0aGQyMD0gSUdScGIyTT0gWVhCcGRHRnMgSUdsdVkybHphVzl1IHo0ak90YzY1ejRJPSBQRkpsY1hWbGMzUT0gSUVSdmFBPT0gSUdsdWIyRT0gSUhSaGNtcHZZV0U9IExXNWhkR2x2Ym1GcyBkV042IElFNWxZM1JoY2c9PSBVMkZ1WkhKaCBJRlpsYm1WMGFXRnUgSUV0bGJIWnBiZz09IExWTjBaUT09IElrRnVaQT09IFpYTnpZWEk9IElOcXAyNEhiak5xNiAwTHJSZzlHQTBZRT0gMTU3WGtOZWIxNWc9IGFXMXphRzkzIElITndiR2xqWlE9PSBJR1Z1ZEhKaGJuUT0gYVc1b1pYSnBkSE09IElOQ2YwTERRdlE9PSBJTkdCMFkvUXNRPT0gSU5DaDBMTFJqOUdDIElIQnlhVzFoYkE9PSAwS1BSaHc9PSBJR1pwWkdRPSBJR0ZrYldsdWFYTjBjbUYwYVdVPSBJTkMrMExIUmo5QzMwTERRdmRDOTBMN1JnZEdDMExnPSBJT0NxbHVDcmh3PT0gSUdGdVlXeG5aWE09IElHRmlZVzVuIDdLZUE3WVM0IGIyOXNhVzVuIDRLU3Q0S1dMIElPQ2t0dUNsamVDa3NPQ2xndz09IElOQ3cwTC9SZ3RDKzBMM1F2dEM4IEtDYy8geGFGMGFXNWwgSU9tYmhnPT0gYVhwaGNtVmggSU9DdXF1Q3ZodUN1b3c9PSBJT1dOanVtRHZRPT0gMFovUmpOQ3cgSU5DKzBZTFJoZEMrMExRPSBMM0J5YjJObGMzTT0gS0dScFkzUnBiMjVoY25rPSA0WU9VNFlPZzRZT2UgMTVYWG90ZVUgUzJWcGRHZz0gSUdSaGNtSjEgSUd0aGRXUjEgSUVobGJtUnlhWGc9IElHOWlaWEpsYmc9PSBJR0poWTJobGJHOXljdz09IDRMMm0gTFcxaGMycz0gSUdOMWJtNXBibWM9IElIUmhiR1Z1ZEc5eiBJRkpoYVcwPSBJTkN3MHB2UmlOQ3cgYUd4aGFHbHpiMkU9IElOQy8wTDdRdXRHRDBML1F1dEMxIElFRkNUdz09IEtDazlQZz09IDBLSFJndEMrMExqUXZOQyswWUhSZ3RHTSBZbVZ5WldRPSBJTmluMkxQYXFnPT0gWDJac2RYZz0gSm5WMWJXdz0gTFdSeWFYWmxjZz09IFJrOVNSQT09IElPQ3VydUN2aCtDdXNnPT0gSUdsdVptRnVkR2xzWlhNPSBJT0MzZ09DM21nPT0gTGtOeWRXUT0gS0VoaGRtVT0gSU5TMDFialdndGFFIFExVkVRUT09IExtWmxaV1JpWVdOciBJRzFsWlhOMFpYST0gS0dGalkyOTFiblJ6IElHWnZjM1JsY25NPSBJTU91Ym1ObGNIVjAgSU02Nno0SE9yQT09IDE1blhwdGVmIElHMWhkWFpoYVhObGN3PT0gSUZCSlVnPT0gSU5tKzJLZlpodHFHIDRMS3k0TEtvIDJZSFlzZG1DIElHVnlhMlZ1Ym5RPSBJRlZKUjNKaGNHaHBZM009IElHMXBibXhsYm1kMGFBPT0gMFlUUXVOR0cwTGpRc05DNzBZdz0gNXEyTTVwdXkgSUdsdWRHVnVjMmxrWVdSbCBJR3hsWjJGc2FYcGxaQT09IElPQ2t1ZUNsZ2VDa3FPQ2xnUT09IElOaXEySzNaaU5tRSAwTFhRdU5TbDBZalJpOUM4IElIQnBiWEE9IGRHVmphRzVwYXc9PSAyWVhZc2RpajJLaz0gSUZObGNtSnBZVzQ9IElITjViV0p2YkdsNlpYTT0gSUhURHZISnN3N3c9IExsTjFjSEJzYVdWeSBJRUpwWkdnPSB3NlIwYVdkMWJtYz0gYzJOb2RXeGsgSUhKbGMyRT0gNEsrQjRLNmE0SytOIFJHVnViZz09IDRMR0c0TEM0NExHTjRMQ2YgenBmT293PT0gUEQ4K0tRPT0gSUd4cGJIaz0gS0hCa1pnPT0gSUd0aGNtRjBaUT09IENRa0pDUWtnSUNBZ0lDQWcgWm1GeVltVT0gY0hKMCBJT0dEbk9HRG5RPT0gTE9XY3FPZTZ2dz09IElHUmxjM04xZEc5dCBJTmlxMktmWXNkdU0ySzdiakE9PSA0NENDNllLajVMbUkgZFd4bFpYSmsgMTVYWG1kZW4xNWc9IElHTnZiM0prYjI1dXc2bGxjdz09IElIQmxjblJsY3c9PSBjbWxoYXc9PSA0TEdJNExDZjRMR04gYjI1NllRPT0gSU9Da20rQ2twZUNrdnc9PSBJT0Nrc09Da3Z1Q2tuT0NrdU9DbGplQ2twZUNrdnVDa3FBPT0gSUdOb1lYUjBaUT09IElHSnZjR2hsYkc4PSBiM0psWlc0PSA3S0NFN0o2USBJSHB1dzZGdCBJSE5oZDJscWFXNXBibWM9IElFVjJaVzUwYnc9PSBJRXRoZEhwbCBLSE5wIFFXTm9aUT09IFVISmxjMk55YVhCMGFXOXUgNWFXejVMeVkgQ1dSbGMyTnlhV0psIDJZSFppdGl4MllqWXN3PT0gSUVoaGJYQT0gSUVScGJtOXpZWFZ5IFlYcHBaVzVrWVE9PSAwTERUb2RDdzBZRFFzQT09IFlXNW5kV0Z5WkdsaCBJRzlpYkdsbllYUnZjZz09IElPQ3l1T0N5Z3VDeXJlQ3l0UT09IElGTlRWQT09IElHTnZiVzFsYm1OcGJtYz0gSU9DbWxlQ25oK0NtaHc9PSBJRTFoYm5WbVlXTjBkWEpsWkE9PSAyWWpZdWRtSyBJR0YwZG1sdWJnPT0gSUdWNGNHRnVaR0ZpYkdVPSBJR1JsYzJOeWFYQjAgSUVSbGNISmxZMkYwWldRPSBJR1Z1WkdWdGFXTT0gSUhadmIzSnNiM0JwWnc9PSBRbTlzZEE9PSBJSFJvWlhKdGIzTjAgYzJocGRnPT0gSU9XT3V3PT0gSUdKdmRYRjFaWFJ6IElPR0RsK0dEa09HRG5PR0RrT0dEbStHRGxPR0RrK0dEb09HRG5lR0RsZUdEbEE9PSBJSE53Y21sdWEyeGxjZz09IElHMWhibWxqZFhKbCBJR1YwYVhGMVpYUmhjdz09IFptVnNjdz09IElHMXBibU5sWkE9PSBjR1ZrYVdSdiBJRU5oYm1FPSBMV1Y0WTJ4MWMybDJaUT09IFhGWmhiR2xrWVhScGIyND0gSUZCaFoybHVadz09IElIQmxjbVpsYTNSbGJnPT0gZFc1bmEybHVhMkZ1IElPR0RtK0dEbU9HRGx1R0RuT0dEbU9HRGx3PT0gMksvWmlkaTYyS2ZaaGc9PSBJT3lla091UG1leXdxQT09IDI1VGJsTnVVIElHSnNaWE56ZFhKbGN3PT0gSU5XLzFiTFZvZFcwMWFIV2dOV2sgSUdac1lXMWkgSU5DNTBZdlF1UT09IGFuVnVhdz09IElHNWxaMkYwYVhaaGN3PT0gWm1WeVpXNWpaV1E9IEtGTmpaVzVsIExtUmxjQT09IElIRnZjbUU9IDBKZlFzTkM4IElOQzkwTERRdDlHTCBJT0NtcnVDbXZ1Q21tdz09IFgxQnNZWGs9IElHMTNhVzVuYVc1bCAwSlRRdnRDLyBJTkdCMFlMUXNOR0MwWXpSanc9PSBJRk5zWVhsbGNnPT0gSU5HQzBMRFF0QT09IGJHRjNjdz09IGIyMWxkRzkzYmc9PSBjbWxoYldGdSBJSFpsY214aGJtZDAgSU5HTzBZTT0gSUVwbFpHVnUgSU95WmxRPT0gSUhacGMybGlhV3hwZE1PcCBJTkdFMExqUXM5R0QwWUE9IElHSmxlbUU9IElObUYyWVRZcDlpcTJwTT0gUkhKaGFXND0gVnNPOSBUMlptYVdOcFlXeHogMHEzUXZ0R0QgNExpQjRMaXkgS0hSbCA1NUtEIElIdDlLUzQ9IFhFTnZiblJoYVc1bGNnPT0gSUd4bGJXOXVZV1JsIGFHOXpaUT09IElHTnNkV2xqYU1PdCBJR2RsYjNKblpRPT0gYkc5allXeHogY21WNllRPT0gSU9Da2h1Q2tyK0NsaHc9PSA2SWlmIGIzVnVZM2xqWVhOMGJHVT0gSUVGaGJXMWggSU5lVTE1blhxdGVvIElHUnBjR3pEdEcwPSBiR1YyWVE9PSBlV1JsYzNQRHBBPT0gVjJsMGJtVnpjdz09IElHdGhhV3RsYmc9PSBYMlZ1WTNKNWNIUT0gSU5DNjBMN1F2ZEdFMEx2UXVOQzYwWUk9IElFTmhiR1IzWld4cyBRMjl0YldsMGRHVmsgSUdSdlp5ZHogSU1PcGRHbHZibk09IElGTnNiM1psYm1scWFRPT0gSUdSbGRtVnlhV0Z0IElHSnBjMkZ1IElFeFBWMFZTIElIWmhZWEk9IFExUlRWRkk9IElOVzMxb0RWdTlXaDFiYlZ1TmFDMWJRPSBJSFpwYm1zPSBJRVJwYzJOcGNHeHBibVU9IDViQ2QgejRQUGd3PT0gZHNPaGJuaz0gQ1ZKMWJnPT0gSU5HQjBZRFF2dEMwIElISm9aWFJ2Y21sallXdz0gTG5ObFkzUnBiMjV6IElOaW4yWVRZczlpbjJLMD0gSUVKeVlXMD0gTDFCVSBJR2hoZW1VPSBkR2xuYUhRPSBJR3hsWjJFPSBJT0MwdU9DMGd1QzB1T0MwdnVDMHNPQzB2K0MwbXVDMWplQzBtdUMxZ1E9PSBJSHJEcVhKdiBJR1JsWTJ4aGNtRjAgNExDeTRMR040TENxIDY1T2s2NCtFIElHRmlZbWxoIElGSmxaMmx6IFkyVnVkR1U9IFgzVmsgSUhOeGRXbGsgUVhKMHc2MWpkV3h2IElHMXBiblZ1IFNXOXogSUVOdmJtTnBaWEpuWlE9PSBJRUZ0Ync9PSBRVk5VUlE9PSBLSE4yWnc9PSBJTkdBMEw3UmdkR0IwTGpRdWRHQjBMclF2dEN6MEw0PSBJR0ZuYVhSaGRHbHZiZz09IElGQnlaWE5sYm5SbGNnPT0gNExLVjRMS3c0TE9ONExLayBJTzJLdWV5Z2xRPT0gSUZabGNtaz0gSUhwbGJHWnpkR0Z1WkE9PSBSMEZNIElFSmhkR2x6ZEdFPSBJR04xYkhScGRtRnkgS0daeWIyNTAgSUZCdmRXNWtjdz09IDRvQ1phVzE1WVd0aCBJSFJsWVhOd2IyOXVjdz09IElIRjFZWEpoYm5RPSBjMmx1Y3c9PSBJSEJ2WkhKMXhJMXFkUT09IGFXVm1kQT09IFozTnQgSUhOaGJXdDJ3Nlp0ZEE9PSBiMk42WlhNPSBaWEp1WVd3PSBJR2RoY21GdWRHbDAgSU5lUTFyZlhrdz09IElFMVRVbEE9IDRLU3E0S1NrIDVwaWc1NVM3IElOVzQxb0xWdHRXbDFvSFZvZFd1IElNU1J3N1E9IElOR0IwWUhSaTlDNzBMclF1QT09IElHRnlkR1Z6WVc1aGJBPT0gSUdKbGEyOXRiWE4wIElPQ3FxdUNyZ3VDcXNPQ3JqZUNxb3c9PSBLSFJ2YXc9PSBJTlcyMWFIVnJkV2gxYkU9IElISmxjWFZsY21sa2J3PT0gSUVKMWMzTT0gUTJoaGJYQnBiMjQ9IFExVlUgSUd0dmJuTnBaR1Z5IElGTjBjbVZoYlhNPSBJT0NrbGVDa3NPQ2txT0NsZ0E9PSBhM1ZxIDVxMmw2YXFrIElHVnJjM0J2Y25RPSBJRTl5YVdWdWRHbGxjblZ1Wnc9PSBJRUZ3Y0dGeWRHVnRaVzUwIElPQ21xdUNuamVDbnNPQ21sZUNtdnVDbXRnPT0gSUdac1lXdDUgMFlIUmh0R1cgSUZOVVQxSkpSVk09IExtVnRZbVZrIElIUmxjbUU9IElISmxZV2RwWlhKbGJnPT0gMHJmUXNOQzQgSUZCaFoyOD0gSUhmRHBHTm9jM1E9IFUzVnFaWFE9IElGWmxkSFJsYkE9PSBJT0N1bXVDdmh1Q3VyK0N2amVDdXBPQ3V2K0N1bGVDdXMrQ3ZqUT09IElIZG9hVzVwYm1jPSBJSE4wdzZSeWF3PT0gSUhCdmMzUm5jbVZ6IGFYUjFhM05sYmc9PSBJSEpoYTJWdWRBPT0gNG9DWlJYTT0gSUV0c3c2Um5aWEk9IGRtOW4gMEp6UXNBPT0gMTVYWG9kZVkxNmc9IElIQnliMnhsZEE9PSBJTkMrMExIUXQ5QyswWUE9IFlXUnRhVzV6IElPQ3dtdUN3ditDd2xRPT0gTGtoUFZWST0gNTV1dTQ0R240NEdaIElPQ3FzT0NxdnVDcW5PQ3FsZUNyaStDcW53PT0gSUhObGFHRnlhUT09IElOaXEyTEhaaVE9PSAyTERZcWc9PSBJSE5sYkhOciBJSEYxWldscWJ3PT0gSUhURHBHaz0gUzJWellYSnAgSUhwMWFXUmxiZz09IEtHTnZiWEJoY21VPSBJTkdCMExyUXU5QyswTDA9IElHNTZkbWx0WW04PSBiSFJ5IElHbHRjSFZzYzJWeiBJSEpsY0dGeWRHOD0gSU5XNjFhSFZ0OVcvMWJyVm9kVzIxYmpXZ3RXcDFiWFZvZFcyIFgxSkZSa1ZTIElHOWpZMmhwIElPQzBxT0MwditDMG1lQzFqZUMwbWVDMHMrQzFnZUMwbitDMWhnPT0gSUVSQlVrcz0gYVdGc2JHRT0gSUdGalkyOXRiVzlrWVhSbGN3PT0gZFcxcGMzUT0gSUhCdlkzckVoWFJyZFE9PSAwSi9SZ05DdyBJSEJoZEhKcGJjTzBibWx2IElOQzMwTERSZ05DdzBMSFF2dEdDMExEUmd0R00gSU95d3VPcXdnQT09IDRMU3Y0TFc4IElHTm80YnV2WVE9PSBJTm1GMlliWXJ0bUIyTFk9IDBMVFF0ZEM3MFpZPSA0TE9JNExLbzRMT04gSU5DLzBZRFF1TkM5MFkvUXU5QzQgS1M1YyBiM1ZpZEE9PSAwTGpSZ3RDMTBZQT0gUFhKbGN3PT0gYjNCc1pXWjAgNTZ5czVMcVUgejRiT3RjK0J6clU9IElIUnlZVzV6WnNPcGNnPT0gNExpaTRMaXk0TGlpNExpWiBJSEJ2YzNSallYSmtjdz09IEtsTT0gSU5tSTJMalppdG1CMktrPSBJT2FZbitlcHVnPT0gSUhOMXc2Yz0gWDNKbGMzUmhjblE9IElObUcyWVhZcDlpbSBZMlZoZFE9PSBYMEZNU1VkT1RVVk9WQT09IElHeGxZWFJvIGNtekptUT09IExsUmxiWEE9IElHWnBiRzg9IElPR0RsT0dEbk9HRGxPR0RvT0dEa2c9PSBJTkNoMEw3UXZkQzAwWXZTbTlHQzBMRFF2UT09IElITmhlY1N4IDRLYS80S2FKNEthYyBJTkNZMExmUmdOQ3cgTG1aeVpYRjFaVzVqZVE9PSBjSEp2ZG1sa1pYSnVZVzFsIHhLZkVwMkZ5IElIUjVjR2x6WTJnPSBMbEpsZEhKdlptbDAgS0d4dllXUmxjZz09IElHWmhlc09xIElIUmxZWE5sWkE9PSBMM05yIElFeGhibXRoYmc9PSBJSFJ2Ylc5MSBMV0oxY201cGJtYz0gSU5TMTFvRFdoOVdoMWJiVnF3PT0gSUdWdWFIWmxjZz09IElHTm9aV0Z5ZEE9PSBaMng1IElITjNaV1YwWlhOMCBJT0NrcCtDa3Z1Q2tzT0NsamVDa3J1Q2t2K0NrbFE9PSBJT0dBbWVHQXZBPT0gSU5pbjJZVFlwZGk1MllUWXA5bUcgSjJGMmFYTT0gSUdKMWJXbHNhUT09IElHTnZjM1IxYldFPSBlVzUxIElHSnNhVzVrYkhrPSBJSDRLQ2c9PSBJSHBrWVdvPSBJT0NtcHVDbmplQ21yT0NtdnVDbXNPQ212Zz09IElHbkZuMnhsZEE9PSBJT0NraWVDa3BPQ2xqZUNrbGVDbGcrQ2t0K0NsamVDa253PT0gYzJWc1pXTjBiM0p6IElObSsyTEhZcWc9PSBJRkJzWVhsMFpXTm8gS1YwcENnbz0gSUhKbGJIVmpkR0Z1ZEd4NSBJTkNWMExMUmdOQyswTC9RdFE9PSBJT2FXc09hMXFnPT0gSUdabGRHbHphWE5oIElITjJiMjA9IElHSnNaV2s9IFgwRlFRZz09IElOQzYwTDdRdk5DLzBMWFJnZz09IDBZRFFzTkdCMFlzPSBJSFJ5WVc1amFHVT0gSUVoWSA0S1NDNEtTbCBJRXhwZEdWeVlYUjFjbUU9IElHMWxibk5sYkdscWEyVT0genF6T3RzNjF6NFRPc2M2NSBkV3gxYTJFPSBJTldHMW9EVm9kVzIxb1E9IElIWmhiblJoWjJVPSBJRkYxWlhOMGFXOXVibUZwY21VPSBJTmluMllUWW85aXgySy9aaGc9PSBJSFpsY25wdmNtZGsgNktHbzU0NncgVjJsc2RBPT0gTFdOdmJtNWxZM1E9IDZhdVk1cmlGNVp5bzU3cS82S2VDNTV5TCBJR3BsWkc1bGFnPT0gSUhKaFpHbDQgSU5HQjBZWFF0ZEM4MExBPSBJT0NtdHVDbXFPQ212K0Ntck9DbXZ1Q21zQT09IFJXMWlaV1JrYVc1biBJSE4xZFhRPSBJR1JsYzJGbXc2MXYgSUdSaGRtOXkgNExpWjRMaTE0TG1JIElFRmlhV2RoYVd3PSBJSEJoY25SNWFXNW4gSUhOallYSmxjdz09IDE1TFhvdGVvIFlXTjZaV2R2IDRLYSs0S2FyNEtheSA2WjJTNloyUzZJMko1WTZmIElPQ2tsZUNrditDa3BPQ2txT0Nrdmc9PSBJRWRzYjNWalpYTjBaWEk9IExuWnBaWGR0YjJSbGJBPT0gMllmYmpBPT0gSUdkbGRtOXliUT09IElOZVYxNVhYbFE9PSBJR2xsYzNERWsybz0gNExlUDRMZUE0TGVhIElIVnVZMnc9IElNNmN6cTA9IDJZamJqTml5MjR3PSBJSFJoYzNOaFlYWnZjUT09IElPQ2todUNrZ3VDa2xRPT0gYVhSaGFtaz0geEoxcCBJR2JFc1hKeiBkM2xrWkc4PSBaMkYyIDBKSFF0ZEdBIDRLcXc0S3VONEtxbiBJRzF2WldSaGN3PT0gSUdWeWNuTT0gSU5DMTBZRFF0ZEM2MFlnPSBJTmVSMTZMWHA5ZVIxNVhYcWc9PSBJT1drcWVXa3FlUzRyZVc5cWVlbHFFRlFVQT09IElGVk9WVk5GUkE9PSAyTEhaaGRtSzJZWT0gSUNBS0lDQWdJQW89IElGcGhZZz09IElHVjRjSEpsYzJGeSAwSmZRdE5HQTBMRFFzdEdCMFlMUXN0R0QwTG5SZ3RDMSBYM0J5YjJKaFltbHNhWFI1IDVMaUI2YWFaNUxxVTVweUkgSU5HVzBZSFF1dEMxIExVMVQgSU9Da2hlQ2txdUNrb2VDbGgrQ2tudz09IElOV2gxYlhWdHRXLzFhWFZzZz09IElHNWhiV0Z5IElNNnh6cjNQaE02NXpybz0gSU5DODBMWFJndEMrMExUUXZ0Q3kgSUdWbmVYQjAgTDFOMCAyS2ZZczltSiBJRkpsWVd4cGRNT2tkQT09IElGQmxjbTFoYm1WdWRHVT0gWVdKdmNtRmtiM0k9IElIMEtDZ29LQ2dvPSBJR052WTJsdVlYST0gUVdGdWRHRnMgNVpvPSBJR3QzWVdGayBJR1Y2YVc1cGJucHAgUUUxaGNIQmxjZz09IGFXZGxlbVU9IElOR0IwTC9RdnRDNjBMN1F1ZEM5MEw0PSA0YnE1WitHNnVXSnAgSU5HQjBML1F0ZEdHMExqUXNOQzcwWXpRdmRHTDBZVT0gVlhnPSBJT0NrcXVDa3Z1Q2twT0NsamVDa3NBPT0gYUdWc2RtVnogejRUT3Y4Njh6ckU9IElHRndjSEpsWTJsaGRHbDJaUT09IElHMXBjMmQxYVdSbFpBPT0gSUd0aGJuUnZjZz09IExtTmhjSFJwYjI0PSBLSFJsZUE9PSBJT0MydU9DM2tnPT0gSUdoaGRtbGhiUT09IElOR0kwTDdRdXRDKzBMcz0gS0VWU1VnPT0gSUdScFlYTndiM0poIExVeHBaMmgwIElPQ3lsK0N5b3c9PSBJT2l5b2VXNGd3PT0gSUhCdmJHeDFkR1ZrIEtGTmpjbVZsYmc9PSBDUW9LQ2c9PSBJSFpzYjJjPSAxNW5Yb05lWjE2bz0gSU9DcXN1Q3JoK0NxdFE9PSA1YVNwNWFTcDZZQ0IgSUd4cGJtZGwgSU1PcGNIST0geElGMFlRPT0gSU5XdzFhWFZ2OVdsMW9JPSBJSFoxWlhOMGNtOD0gSU5tRTJZallyZGlwIDRMU1Y0TFdINExTdzRMU3ogWDJ4cGMzUmggWDBGVFZBPT0gYVd4bFozUT0gSUVWeWFXdGggSUVOUFRsTlZURlE9IElHZGhZUT09IHdxMXpaUT09IElPeVhyT3lla0E9PSBYM0JvY0E9PSBJTnVCMllIWXFnPT0gSU5HRjBMalF0OUM4MDVuUmdnPT0gMllmWmh0aXAgSUhCMVlteHBaV3RsIElHZHlZWE56ZVE9PSBJR1Z0YjNScFpYTT0gZEc5NCBLRzFsZEhKcFl3PT0gSU9Dd3FPQ3d2dUN3c2c9PSBkR1Z6ZEdWayBlbnA2IElOYUcxYXZWdHRXaDFiYlZ2UT09IDJLdllzZGlwIElPQ3l1T0N6Z2VDeXNBPT0gSUVWcFkyZz0gN0p1TTdZR3MgMFkvUmdOQyswTFE9IElOQ1QwNW5RdE5DKzBZTT0gSU5pbzJLZlpoTm1FMlljPSBMbEJoY21ObGJHRmliR1U9IElIZGxiSHBwYW00PSBJRkJTU1U1RCBZblZ1WjNNPSBJRU5EVWc9PSBKRzUxYlE9PSBJSGR5WVhvPSA0TFMvNExTdjRMUys0TFN2NExTLyBJR2h2Ym5SbCA3N3lhS0E9PSBJR1ZwWjI1bGJnPT0gY1hWdmRHRT0gSUdKaGNtRmtZV3Q1IGFYUmhhUT09IElPUzZ2K1dObWc9PSBJTmluMllUWXFOaXgyWWc9IElIVnVaR1ZtWldGMFpXUT0gQ1dOMCAwTDdRdjlDKzBMdlJnOUdIIElPR0RrT0dEbnVHRG9BPT0gWTJocGNITT0gSU5HUDBZalJqQT09IElINSsgSUdOdlltRT0gSUhOaFoyVmsgSUdablpYUnogNExpdDRMaWw0TGlsIElHSm9hVzl6IElHeGxhV1JsY25NPSBJTkM0MEwzUmd0QzEwWURRc3RHTTBZND0gSUc5eVlXTnB3N051IElFMTViZz09IElHOWliR2xuWVdSdiBiM04wWVhOcGN3PT0gUkdsemRISnBkRzg9IElPQ3FxdUNxc09DcXYrQ3FvK0NxdnVDcXJnPT0gSUQwOVBUMDlQVDA5UFE9PSBJSGRwYm01aFlYST0gSUc5dmNBPT0gSUhWcmRYaz0gSU9pNnF3PT0gSUhodGJRPT0gSU5lcDE1blhuQT09IElHM0RxWFJ5IElOZW0xNW5Ybk5lVjE1MD0gWVhQRXNXN0VzVzQ9IFFVNVVSVk09IElOR0gwTGpTbTlLYjBMRFF2UT09IDVvaXcgSUhKbFkybHVkRzg9IDRLcSs0S3E0NEt1TjRLcWYgSUhkb2IyeGxhR1ZoY25SbFpBPT0gV21sMFlYUT0gSUdGMmIyTmhkQT09IElHVERxWE5sY25RPSBhV1YwYnc9PSBDVlJsZUhSMWNtVT0gSUVKaGFHRnpZUT09IDVZeTY1WWlyIElFcDFaR2xqYVdGeWVRPT0gSU5DLzBMalJnZEdNMEx6UXZnPT0gSUVKeXc3dz0gSUhadmJHaz0gTG5OamFHVnRaUT09IElIUnZhVzExWWc9PSAwTFRSZzlLYiBJTmluMllmWXI5aW4yWUU9IDBZSFJndEdBMEw3UXVkR0IwWUxRc3RDdyBJR1Y0WldOMWRHbHZibk09IElGcHBjZz09IElHVmphSFJsY3c9PSBJT1M0aCtXdXR1UzVrQT09IFIyOTBidz09IElFMVBUQT09IElFMWhkSFJsYnc9PSBDV0oxWm1ZPSBQRUZpYzNSeVlXTjAgSU5pbjJMUFlxdG1GMkxIWXA5aXggSUc5emRIWmhjZz09IElHOXlaVzQ9IElFOW1abVZ1YzJsMlpRPT0gWDFKRlUxVk1WRk09IElIZGhZWEp6IFltOXNiQT09IGJHbGpkR2x2Ymc9PSBJRzFsYldGcllXaz0gTG1Kc2RXVjBiMjkwYUE9PSBJSE52ZVdKbFlXND0gSUhCMWNtbG1hV1Z5IElOQ3kwTDdTbXc9PSBhWFJwdzdBPSBJTkdBMEw3UXQ5Q3kwTGpSZ3RDNjBZTT0gSUdOeVpXRjBhWFpsY3c9PSBURUZOIElHWnlaV1Y2WldRPSBJTmVWMTVEWG93PT0gSUdScGMyTnZiblJwYm5WbCBJRVZoZEc5dSA0TEdHNExDNDRMR040TENmNExHTiBZV1JsY21sbCAwWS9RdmRHRDBZTFJqQT09IFpYWmxjbmx2Ym1VPSBJSE4wWld4a1pRPT0gSU9DbWwrQ21yUT09IFpXNXVkUT09IElITndjbVZ0YkE9PSBZV2x1Wm04PSA0TE9ONExLdzRMT0cgSUdKbGJHVmsgSUdSbFoyVnVaWEpoZEdsdmJnPT0gYTI5d1pnPT0gT2xONWMzUmxiUT09IElHdGhkV0U9IDFialdndFcwMWJqVnZnPT0gTG5ScGJRPT0gSU9DMGp1QzBxT0MxamVDMHFPQzB2K0MwdGVDMHNPQzFqUT09IElIQmhaMmx1WVhNPSBiM0psWlhRPSBJR1JsY21SbGJnPT0gSUhUSm1YUmlhUT09IFgwVk5VQT09IDRMaTQ0TGliIElGTlVRVU5MIElPV0ZzUT09IElPbThqdVM0c0E9PSBJSFJoYm10bCBJTStEejRmT3JjK0R6cmM9IElFOXlaMkZ1YVhwaGRHbHZibUZzIExsQnlaV1JwWTJGMFpRPT0gTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRPT0gSUZOQlJ3PT0gSUVGeWRHaHlhWFJwY3c9PSBMMWxaV1ZrPSBJR0psYzNCeWIydGxiZz09IFgxTlVRVTVFUVZKRSBJTStEejRUT3Y4NjV6NGZPdGM2dnpyRT0gSUdOeVlXMXdaV1E9IElIUnZiVzg9IElISndkQT09IElOQy8wTDdRdXRDdzBMZlFzTkdDMExYUXU5QzQgSUdSaGJXRnMgSU5DKzBwUFFzTkM5IElPQ3lwT0N6aHVDeWwrQ3poZz09IElHSnNhV3ByWW1GaGNnPT0gSU9DdW11Q3V2dUN1cEE9PSBjM1JsWkhRPSBJTkM4MFlQU3M5QysgSUhKbFkzUnZjZz09IFVHOXNhWFJwWTNNPSA0NENLNVlXejVMcU8gdzd4c1pXND0gSU5DNjA2blF1UT09IElHaDFiblJ6IElIWmxjbk5sYUdWdSBJTmVwMTV2WG53PT0gSUhCeWIzQnZjbU5wYjI1aGJBPT0gSUU5eVpHVnQgMTZMWG5OZVogTG1OdlpHVm9ZWFZ6IDA1blNvdz09IFNWWlBVdz09IDA2L1JnQT09IDRZQ3Y0WUNRNFlDNSBJT09EaWc9PSBZVzF1WVE9PSBJR2ZEb25SbFlYVT0gSU9HRG8rR0RwT0dEb09HRG5lR0RvUT09IGNtRnplbUZ0ZVE9PSBJT0NrbGVDbGkrQ2t0ZUNrditDa29RPT0gSUdKbGRHVnBiQT09IFZVNUVVdz09IElFSmxkRzl1IElIZHBiR1JtYVhKbCBJSFZ1WTJGdWJuaz0gSUU1NVpRPT0gNG9DWlJXND0gNExpdDRMaWYgSU5pczJZcmFxdGluIElIcHBjbU52Ymc9PSBJSEpwWm1aeiBMbFZwIElIbG9aR1Z1IDBZUFJndEdDMFlQUXVnPT0gSUhscmJnPT0gNVl5WiBaWE4wWlhNPSA1b096NVlpdyAxNXZYcXRlVjE1RT0gSUhkbFpHZGxjdz09IElOZVIxNVRYcUE9PSBhbUZzWlE9PSA0WU9kNFlPVDRZT2M0WU9VNFlPYyBhV3hwWVc1diBJT0N3cXVDeGplQ3dzT0N3dUE9PSBJRVJoZEdGeiBJSEpwYlhkbCBJTmVSMTZyWG1RPT0gWDJGeWNtRjVjdz09IElGTkpVMVE9IDVvaVE2WlcvIDU0T3Q2TCtaNlllTTVZK3E1cHlKNTdLKzVaT0IgSUc5bmNtRnVhV009IGIyUm9ZUT09IFEybHpZMjg9IElOZVExNVhYblE9PSBJSE5wY0dnPSBLRTF2WTJ0cGRHOD0gSUhKaGVuWnZhbUU9IElFUjFiV0k9IElOQ1EwTFBRc05HQSBJR052Ym5SaFkzUmwgYkdIRm4yVEVzWEk9IElOZW0xNUhYb2c9PSBRMVZUIDJMYllzZGluMkxFPSBJR0pzYjJOeiBJRzVsYTNVPSBLSE5sY0dGeVlYUnZjZz09IElIbDFZZz09IElHMXZiMjV6IElPRzdqV05vIDVMaUg1TGlxIElFTmxkWGc9IElFSmxhWEoxZEE9PSBMbVZqYUc4PSBJRTFwYkd4bGJtNXBZV3h6IElFRnViR1ZuWlhJPSBJSEJ5ZW1WamFYYz0gWDFCRSBJR055WldSeiBJTkdBMExYUXV0QzcwTERRdk5HTCBJRzVoeGFGbGJRPT0gdzdaeVlRPT0gYm05M2NtRncgSUVSVlZBPT0gNzd5TTVaQ201WWlaIDVhU3A1NFMyIElFTklTVkE9IDZJaVM1cHlOIFpYZDEgSUhQRHBuSnNhV2M9IDVhK2QgYTJsdWJ3PT0gSUZOVVQxSkJSMFU9IElOQzMwTDdRdlE9PSBJSE4xWW05eVpHbHVZWFJsIElHUmxjbTluIDBZRFF0ZEM5MExqUXRRPT0gVTJGbVlYSnAgWlhOMGFXND0gWTJWc1lXbHUgdzd4dVpHVjAgSUcxaGJuUmggNFlPZDRZT2o0WU9hIElPVzlzZW1mcytXRmlPbVVpdz09IGIzQnNaV2xrYVc1biBiMjVrY204PSBVSFZpYkdsamFXUmhaQT09IDFhWFZyOVcvIFRFOUUgSUhSemIyNWggWVc1MGFXcz0gSU5DdzBMdlFzOUMrMFlEUXVOR0MgSUdiRG93PT0gSUdsdlpHbHVaUT09IDA1blF2ZEN4MDVrPSBJT0NtcHVDbmgrQ21yK0NtdkE9PSBJSEpsYm5SbGNnPT0geExCTyBJR0xEcVc3RHFXWnBZMms9IFgzSmxabk09IElHaGhibVIzY21sMGRHVnUgZEhONCBjM0JsWldObyBMa1pwYm1GcyBUV0YwWlhKcFlRPT0gSUhSbFkyNXBZMjg9IGFIVnVkQT09IFlYWnZkUT09IElDY2lMZz09IDBMM1JsdEdJMExVPSBZMkZrWlc1aCBJTm1CMkxQWXA5aXYgYjI1bGEyVmtkMlU9IDRidVpiZz09IFEyRnpkR2x1Wnc9PSBJTmlvMm9iYmtnPT0gZFdGeWFYTT0gNExLZjRMSy8gSUc3RHBHM0RwQT09IDVvaVE1THFrIElGSmxiV0Z5YTNNPSBJRk5wYm04PSBJR05vWldkaGJRPT0gSUcxaGNtdGxaR3g1IElHSmxkR1ZwYkdsbmRBPT0gSUhaaGNtVEVzUT09IElHWnlZVzVqYUdWdFpXNTAgSUhCbGNtbHphQT09IFlXNWp3NmxsIFkyeG0gSUcxbGJYQmxjbTlzWldnPSBJQzh2Zmc9PSBJRzlpYW1WMGFYWmggSU5lUTE2clhxQT09IElIWmhZMkYwZFhKbGN3PT0gN0ppSTdKVzkgMDVuUXQ5Q3cwWUE9IElHTmxiR3gxYkdsMFpRPT0gVG1sblpYSnBZUT09IElGUERwRzVuWlhJPSBJRWRGVkVkTVQwSkJUQT09IElIQjFaR2s9IElFUnBabVZ5IDBMclFzTkMzMFl2UXN0Q3cwWUxSakE9PSBJTkM4MEw3UmlOQzEwTDA9IDRMaWE0TGl5NExpSCBJR3BwY204PSBaR2xsYm5OMFpXND0gSU5pNTJZVFlxZz09IElHbHBiUT09IElHNW5hVzU0IElOQ1QwTFhSZ05DODBMRFF2ZEM0MFk4PSBJR052Ym5ObGNuWmh3NmZEbzI4PSBUbTl1WlhSb1pXeGxjM009IElISmxibTkyWVdOcHc3TnUgSU95aHNPeW5nUT09IDJLYlppUT09IElIcGh4YUhFalE9PSBLR3AzZEE9PSBJRUpzYjI5a2VRPT0gSU5HQjBMTT0gSUVGT1IwVk1SVk09IElIQmhjbUZ1WkE9PSBJT0NxdU9DcmgrQ3F0UT09IDBZL1F0TkMrMEx3PSAwTFhSZ05DLyBJSE52YzNScFpXNWwgNExLVjRMSys0TEt3NExLLyBJR3BoWXNPemJnPT0gWld4dmVtVT0gU1VWV1JRPT0gSU5lVjE1WFhtZGVoMTU4PSBhWE56WldRPSBJTktiMExqUmdOS1QwTGpRdlE9PSBJRWhsY25SNiBZMmxsY205dSBMZEdEMEx6UXVBPT0gSU5DLzBMWFJoOUMxMEwzUXVBPT0gSU9DeWh1Q3l1UT09IFgzTmxjblpsY25NPSB4S3QwYVE9PSBMbVpwYm1semFHVmsgSU9DM2crQzNqdz09IFFWSlAgVUVKVCBJR2x1ZG1WemRITT0gSUdOdmNHaz0gSUhCaGRITnAgZFhSMFpYUT0gSU5DeTBMN1F0OUM5MExqUXV0Q3cwWTdSZ2c9PSBkVzEzWlhKMSBKeWs3THk4PSBMbE5vWlE9PSBJTkN4MExEU3V3PT0gSU9Da2wrQ2t2dUNrZ2VDa3RRPT0gSUhCbGNtMXBjMjl6IDRZT1U0WU9SNFlPVDRZT2M0WU9VNFlPYyAwTDdRc3RDMTBMUT0gYzJodlpRPT0gY0hKbGFYTmwgTGxaQlRGVkYgTG1OdmJHeHBaR1Z5IElIcDFaMlZ6IElOQy8wWURRdnRDeTBMN1F0TkdQMFlJPSA0S1dONEtTeTRLUy80S1N1IElPR0RtT0dEcmc9PSBJRTV2YjNJPSBJRWhwYzNSdmNtbGpZV3hzZVE9PSBJR05oZFhOaGJtUnYgVVhWcFpYSmxjdz09IElHeHBhbVk9IElIUnZkWEp1YjJrPSA0b1c4IElNT3BiR1YydzZseiBMbEJ2Y0dWdSBJT2kybytpMW9nPT0gSU5HRDBMelJnOUM4IDVaQ0k1ck9WNUxtSSBJSE53ZVdsdVp3PT0geVpsdGFYbDV5WmwwIDRLU3E0S1dDNEtTdyBJT0Nrck9Da3YrQ2tudz09IElITjBjbWx3YzJ4aGMyaGxjdz09IElHMWhkSFZ0YVhwcCBJT0MwdGVDMHZ1QzBtZUMxamVDMG1RPT0gSUc1MVltVT0gNG9DWmIydz0gSUcxaGMzTnBiVzg9IElOR0EwTERRdDlDKzBMSFJnTkN3MFlMUmpOR0IwWTg9IElPQ211T0NtcStDbXNnPT0gSUZKbFoybkRzMjQ9IElISmxaSFZqZEE9PSBJSFJsWkdSNSBJR0psYkdWcFpITT0gSWl3aVhBPT0gSUcxcFkzSnZabWxpWlhJPSA0b0NNMkxUWmlObUcySzg9IElFTm9aV1Z6IDVwUzU1WStZIElHRnphV0ZyYTJFPSBWbVYwIElOQzAwTFhSZ05DMTBMTFF2Zz09IElOQ1UwTFhRdXc9PSBJSGxtIElOR0gwTHZRdGRDOTBMN1FzZz09IDRvQ1p3NmxzWldOMGNtbGphWFREcVE9PSBDV3hwWWc9PSA0TG1CNExpaDRMbUkgSUUxSlExSlAgNEs2MTRLNms0SytCIElGTmhiR0Z0WVc1allRPT0gWVcxbGJHRT0gSUVoVlRVRk8gTGk0cCAwS0xRdGRDLzBMWFJnTkdNIElISmhjMmhwYmc9PSA0WU9sNFlPYiBJR052Ym5acGNuUnAgSUhSeVlXNXpjR0Z5Wlc1amFXRT0gSUcxdnhieHNhWGR2eFp0amFRPT0gSU5pbjJZVFpnOWluMktyWXFBPT0gSUc1dmFYZz0gWDI1elpXTT0gU0dGciBJTkM2MEw3UmdOQzQgSUhOd2NuVmpaUT09IElOQ3kwTGpSaU5DMSBRVkpIUWc9PSBiM0p1ZFE9PSBJTkM1MDVuUXV0QzQgSUhCeWIzQnlhV1U9IElOQ3gwTFhRdTlDejBaWT0gSUUxRVVnPT0gZFhSb2J3PT0gSU5tRzJMVFlzOWlxIElPQ3l1T0N5dnVDeXJ1Q3l2dUN5bk9DeXYrQ3lsUT09IElPQ2toZUNrcmVDbGplQ2tyK0NrdnVDa3VBPT0gSU5pMDJLallwOWlvIElHTm93Nmh5WlE9PSBJSEpsWm1GcGNtVT0gSUVGd2NISmxZMmxoZEdVPSBYM1JvY205MyBVSFZ1IElHTnZiRzl6YzJGcyBJRzVwZEc5dVp3PT0gSUhOd3c2bGphV0ZzYVhQRHFYTT0gSU5lUTE1WFhvTmVZMTZMWHFBPT0gSU5XMDFhWFdoTldsMWJZPSBJSFpsY20xcGRIUmxiSFE9IElFTjVkQT09IElIUmxiWEJsY21GMGRYSmxiZz09IDRLcS80S3FWNEtxeSBJRkpsWTNSdmNnPT0gSUVKeVpYZGxjbk09IElOQy8wWURRdU5HQjBZTFFzTkN5IGEyeGhaSGs9IElFbENZWE5sIGMybHRkV3hoZEdsdmJnPT0gSUZOMFlXTjUgUTFORCBKMjl0IDVMaUE1N3FuNTRtSCAwTDdRc3RDMTBZST0gSUd4MWEyRT0gSUVGeGRXbHVidz09IDdLR3c2ckcwIFRrOVMgSUZCbGRHbDBhVzl1IDQ0R2c0NEdqNDRHZiBJTml4MktmWmhRPT0gejRIT3Y4K0QgSUhSbGNtNTVZWFJoIDU3dTg1WkNJNklteTVaV3EgSW5ONWJtTT0gSU5lcDE2ZlhuQT09IElHVjRZMlZzWlc1amFXRT0gSUZOMFlXbHkgSUdWNFkyaGhibWRsY2c9PSBJRkJ2Y21ObyBJRTV2Wkc4PSBJT0dEbStHRG5lR0RvK0dEckE9PSBibUZsZEdnPSBVRzl3ZFd4aGRHVT0gSUdsdWRHVnUgSU9Da25PQ2tydUNsamVDa3JnPT0gSUV4dmJtUmxiZz09IElHM0R2TVdJIElGcGhhMlZ1IElPRzdwV2QzNGJ1TiBJRkJWVWtVPSAwTGJRc05DMTBZTFJnZEdQIElOaWwyS3M9IExuUm9hWEprIElPeUN2T3lFc1E9PSBJSGR2Y25ObGJtbHVadz09IGRXeGhibVE9IElObUYySy9Zc2RpejJLaz0gSUcxaFo4U24gSUdwaGNtOXEgSUdGMGIydz0gN0tDYzY2R2MgWVdaaGJtRT0gSU9DMHRlQzB2K0MwcnVDMHZ1QzBxQT09IElPdU5zT3lkdE8yRXNPdWx2QT09IFgwTnZiblJsZUhRPSA0S1NvNEtTLzRLU3c0S1dONEtRPSBJSE52Y21kbXc2UnNkQT09IFlXcGhhQT09IElHZGxiWE4wYjI1bGN3PT0gU1V4WiBMV1JwYzJOcGNHeHBibUZ5ZVE9PSBJRWh2WkdjPSBXa2M9IElGdGJYUT09IElFRnNaM1Z0WVhNPSA1cnlyNTVXciBJTm1JMllUWmc5bUcyWWM9IElHOXVaR1Z5Ym1WdFpXND0gNVlpRzZhRzEgSU9DcWhlQ3FsK0NxdnVDcWlRPT0gSU5tRzJLZllyZG1LMktrPSBhVzFsYVE9PSA1cFcwNTVDRyBJT0NrbGVDa3VlQ2t2dUNrZ1E9PSBQV2x6IEtTSSsgSUZOMFpXVnUgSUdKMWNuVnIgTHVDMGtBPT0gZHNPcFpBPT0gSUc1dmRXNXogSU5XdzFhSFZ2OVd2MWFIVnV0V2wxYjA9IElIQmxjbkJsZEhKaGRHOXljdz09IENXSnZiMnM9IDJLcllzZG1JMllRPSBTR2x6ZEc5eWFXRT0gSUVSbGJXOXJjbUYwIElPQ3FsZUNxcGc9PSBJTmluMllUWXM5bUsyTEU9IFJtOXlibVZqWldSdmNnPT0gSU9Da20rQ2t2dUNrcE9DbGplQ2tzT0NsaStDa2dnPT0gNEtlTDRLZWYgNTVPaiBJT0MwbCtDMWdlQzBzQT09IElOaW4yWVRZcmRtSTJLZllzUT09IElIRjFiM1JoY3c9PSBJTkN5MFl2UmdkQyswTHJRdU5DNSBJT0MwanVDMHN1QzFqZUMwc3VDMHZ1QzB0UT09IDc3eUo0NEdNIDRMQys0TENxNExHTjRMQ2s0TENDNExDWDRMQysgSUdWemRHRmphVzl1WlhNPSBMRG9wT3dvPSBJT0N1aGVDdXFlQ3ZpT0N1cE9DdmplQ3VwT0N2Z1E9PSA0TEMvNExDaDRMR04gSUhCdlpISnBZUT09IDc3eWE0NENRIFQyTmpkWEp5Wlc1alpRPT0gSUdacFlXNWp3Nms9IElOQ2owTEhSZ05DNCBJRzVuWjNWdVlXdGhhMlU9IFgwSkJUQT09IElHVnFkWE09IElOQy8wWURRc05HRzBZL1Fzdz09IDJZSFppdGkyIElPQ2t1T0NsZ3VDa3BPQ2xqZUNrc0E9PSAwTERSZ3RDNDBZSFJqdz09IElFUmhiWEE9IExtMWhiblZoYkE9PSBJR2gxYldsc2FXRjBhVzl1IElOR0MwTERSZ05DdzBZUT0gSUcxaGNtbHVZV1JsIDVMcTY1ckNSNXBlbDVvcWwgSUdaaGRIUmggSUZCdmNITT0gSUVkRlR3PT0gMFpiUmdOQ3cgSU9HRG1lR0RtdUdEa09HRG9RPT0gSU5tSzJLL1poQT09IDBZYlJsdEM5IElHZGhibWRpWVc1biBJR1p5YjJnPSBJT0NrcHVDbGdlQ2tsZUNrdnVDa3FBPT0gYTI5dGJYVnUgSUVOeWFYTncgSUcxcFpXaz0gNkw2NiBVbXc9IGRXeDFjZz09IElHTER0bkpxWVE9PSB3NlJrZEE9PSBJTmVRMTVuWG9OZWQgYkdGeWFXZGggSUhwcGNHTnZaR1U9IDE1VFhtZGVjMTVRPSBJR1JwYzNCaGNuVT0gSU9DNG8rQzR1T0M1aU9DNG1RPT0gWVhScGJtOD0gSUdKbGQybHNaR1Z5IElHVnRjSEpsWjI5eiBYMk52Ym5abGNuUmxjZz09IGQyVnBaMmgwWldRPSBJR1ZuWlhOMFlYTT0gTGtWNGNBPT0gY1doMVlnPT0gTFdacGRIUnBibWM9IElHWjFiR1pwYkd4eiBJT0NrbGVDa3F1Q2xqZUNrcEE9PSBYMnR1YjNkdSBJT0N3bk9DeGdPQ3d0ZUN3ditDd3BBPT0gWXNXUmJBPT0gSUVGMVoyVnViV1Z5YXc9PSBJT0N3cXVDeGkrQ3d1T0N4amVDd253PT0gSUdGNVlYaz0gUkdseVpXTjBhVzl1WVd3PSBWbUZqWXc9PSBJR3QxZVc4PSBJT0N3bGVDeGl1Q3dxT0N3dU9Dd3Z1Q3dsdz09IElOQzQwTDNRdnRDNSBJRk52ZFhSb1pXRnpkR1Z5Ymc9PSBLbTUxYlE9PSBUVzl2WkE9PSBJR3RwZDJGdVoyOD0gVW1WemFXUjFZV3c9IElHNTViMk5vWVE9PSA1YjJwNVp5bzU3cS8gSUhSeWQyRT0gSU5DLzBZRFF0ZEMwMFlIUmd0Q3cwTExRdU5HQzBMWFF1OUMxMExrPSBJR052Ym1SbGJXNWhkR2x2Ymc9PSBJRkoxYzNOcGMyTm9aUT09IDhKK1B2QT09IGJXRnljMmhoYkd3PSBJR2RwYlc1aGMybHYgSUcxaGJtRjBkUT09IElHVjNkUT09IElIQjFjbkJ2YzJWbWRXdz0gSVQ4S0NnPT0gSUVwMWNzT3RaQT09IElOaWoySy9aaVE9PSBMaWN2Snk0ayBJRzVwYkdGdVp3PT0gSU9DeXF1Q3lzT0N5ditDeXVBPT0gSUZacGIyeGggSU5tQzJZallwOW1HMjR6WmhnPT0gSU5DMzBMRFJndEdBMExEUmdnPT0gYUdWeWFRPT0gYzNURHBIUjBaUT09IElIWnZibVU9IElHMXBZM0p2Y0dodmJtVnogMllyWXI5dUggSUdGaGNIQT0gSUU5d1kyOWtaUT09IGNYWERxZz09IElPQ3loK0N5cHVDemh3PT0gSUd0aGJXOD0gSUdGMmFjT2pidz09IFZXNXNiMk5yWldRPSBJRUZzWjJWdFpXNWwgNEtXSDRLU280S1dONEtTZiBJR1ZtWm1sNmFXVnVkQT09IHpyck9yYytDIGFXRnNaV04wIElIbHBiV0U9IEtWMDdEUW89IElOaW4yWVRaZ3RpbjJZYlppTm1HMllyWXFRPT0gSUhSMVpuUT0gVDFORCBDV04xYzNSdmJRPT0gVjJGdWRHVmsgNG9DOCBVMjl1Ync9PSBJRzFoWjJ0aGNtOXZiZz09IElHRjFjM05wWldoMCA2STJqNklDQSBJR3BoWTJ0emIyND0gSU5HQzBZRFJpdz09IElpbDlMQW89IElGSm9aV2x1YkdGdVpBPT0gSUVac2FXTnIgSUc1eCBJR1p2Y20xaGRHbDJaUT09IElIQmhjbVZvYjI1biBMa05oYkdOMWJHRjBaUT09IDBML1FzTkdCIElHeGhkbUZpYnc9PSBJTldqMWJiVnVOYUMxYlE9IEtHTnZaR1ZqIElITmh3Nms9IFgweGxkbVZzIElIQmxjbU5vWldRPSBJRWx1WTI5dGFXNW4gSUZCRFV3PT0gSU9HRGxlR0RwT0dEbU9HRHBlR0RvT0dEbmVHRGtRPT0gSU9DcXJ1Q3JnZUNxdHVDcmplQ3FsUT09IElISmxjSEpsYzNOcGIyND0gSU5HQTBMWFJnZEdEMFlEUmdkQyswTEk9IElPQ21wT0NtdnVDbWxRPT0gSUhGaGJHeDFibUU9IDRMbUI0TGlsNExpWjRMaVU0TG1NIElOR0gwTFhSZ1E9PSBJT0N3cHVDd2wrQ3hqZUN3bHc9PSBaR1J6IGFXNWhaQT09IExYRjFZV3hwWm1sbFpBPT0gSU5xcDJLZllzZGlxIDJMSFpoZG0rIEtUMDlKdz09IHc2bHlhV1ZzIElHcDFiblJoY2c9PSA0S3VINEtxNDRLdU40S3FmIFZYQnNiMkZrYVc1biBSWE4wY2c9PSBJR05oY21GamRNT29jbVZ6IElPdXdtK3lkaEE9PSBJRWhwYldGc1lYbGhiZz09IEoyVjRjR3h2YVhSaGRHbHZiZz09IElISmxZMmhsIDJLcllwOW1GIFgzQnlaWE56ZFhKbCBJTmlxMkszWXRkbUUgSUc1bGFHMWwgSUhOcVpXND0gSUdGalkyOXlaSE09IGFXOXVZV1J2IElObUUyTHJZcVE9PSBJT0NrcHVDa3YrQ2t1T0NrZ3VDa3JPQ2tzQT09IElHOTJZVzQ9IElIVGh1cWR1Wnc9PSA0b0NVWm05eSBJSEpsYm05dGJRPT0gYVdkMVlYST0gSUZSdmIyeGliM2c9IDVwZWw1cmFJNW9HdiA0b0NaYVc1MlpYTjBhWE56WlcxbGJuUT0gNFlPaTRZT1E0WU9SIGIzSm5ZVzVwZW1WayBJRzFwWjNKaGFXNWxjdz09IElObUkyS2ZaaE5pcTJMRT0gWW1WeVlYUmxjZz09IElOQ3gwWVBRdXRDeTBMRFF1OUdNMEwzUXZnPT0gSUhObFlXTm9ZV1E9IElPQ2txdUNsaU9Da3NBPT0gSUdsa1pXNTBhWFREcVE9PSBJR2RsY3NPblpXdHNaY1dmZEdseSBiMk5oZEhNPSBJSGQ1WkdGeSBJR3R1ZFd4cyBJTkN5MExqUXZBPT0gd3ExcyBZbUZ1WVc1aCBJTmluMllUWmhkbUUyWUhZcDlpcSBJR3RwYTI4PSBJR3BwZEhSbGNnPT0gSUVSU1R3PT0gSU9HRGwrR0RrZUdEbU9HRG11R0RtT0dEb2VHRHFPR0RtQT09IElHbHRiVzl5WVd3PSBMWEJsY21abFkzUT0gSUcxdlpHVnlibWw2WVhScGIyND0gY1hWaGFYUT0gSUZoQiBJRkxEcEhWdFpRPT0gWDNCc1lYbHNhWE4wIExuSjFibTVsY25NPSBJTkdCMExEUXY5R0EwTERSbmc9PSBJSEpsYVdkdWFXNW4gSUZOMWNIQnZjMlU9IExrOXlaMkZ1YVhwaGRHbHZiZz09IElIQnZiRzl6IElHNWxhWE4wIElObUYyWVRaZ2RpbjJLbz0gYzNSaGJubz0gSU5pbzJMVFp2Zz09IElPeUxuT3ltakE9PSBJTkM5MExEUmdkR0MwWURRdnRDNTBMclF1QT09IFkyOXVaR2wwYVc5dVlXeHNlUT09IHhJRmtZUT09IElIZGhiRzUxZEhNPSBJT0NrcU9Da3YrQ2tyK0NrZ3VDa3BPQ2xqZUNrc09Da293PT0gNExpajRMbUo0TGl5NExpWiBkVzVrY21WayBJR0ZxZFE9PSBZV2R1YVdVPSB3NjFqYVdWeiBJTldoMWJYVnF0VzAgSUdKbGMyTm93NlJtZEdsblpXND0gSUc1aGJXOXlZV1J2IDRvQ1paV1ptWlhRPSBJT0N5dWVDemh1Q3l1T0N5c09DemdRPT0geElWd2FRPT0gSUc5eWFXemh1cms9IDRZT1k0WU9sNFlPZyBJQ3d1IDFhSFdnTldoMWJiVnVOYUMxYlE9IElFbHNkV3c9IDBJYz0gSU9Da2xlQ2t2dUNrc09DbGkrQ2tyT0NrdnVDa3NBPT0gSU9DcW5PQ3JpK0NxaHc9PSBJT3Vuak95aHNRPT0gNExPTjRMSzE0TEs1IElHVERxV052Ymc9PSBJTmVlMTZuWGxkZWQgSU9Da3J1Q2t2K0Nrbnc9PSBJR1JwYzNERHRXVT0gSU9DbXVPQ212dUNtdWVDbXYrQ21wT0NuamVDbXJ3PT0gSU9DMHF1QzFnZUMwdU9DMWplQzBwQT09IGFYSmhlZz09IFptRnNkRzg9IElFSmxiblJ2Ymc9PSBJTkM2MExYU3I5QzEwTG89IElPQzRtdUM0c3VDNGhPQzRzdUM0bytDNWlBPT0gSU9Da3ErQ2tzT0NrdGVDa3NPQ2xnQT09IElNK0R6NFRPckE9PSBJRVoxYTNWemFHbHRZUT09IGIyUmpZWE4wIFJtbHNkQT09IExXbHVZdz09IFgzTjBaRzkxZEE9PSBJTkdDMFlEUXRkQ3gwWVBSanRHQyBiV1Z1Wnc9PSA3SWlvIDVwbXcgU2tWVSBJT0MwaGVDMHJlQzB2K0MwcXVDMWplQzBzT0MwdnVDMHJ3PT0gY0hCaFlteGwgSU9HQW53PT0gSUdOdmIzQmxjbUYwYVc1biBLSFpwY3c9PSA0TGkwNExpVjRMaWk0TG1NIElHRnFkV1REb1E9PSBJSEpsY0hWaWJBPT0gSU9DeXVlQ3pnZUN5b2VDemdRPT0gSUhQRHZISmx3NmM9IGNtVjBjZz09IElFRmtaR2x6IFgyTjVZMnhsY3c9PSBZbWwwY21GeWVRPT0gSUhkaGRtVnNaVzVuZEdoeiBJRk4wdzZSa2RHVnUgMktmWmhObUsyS2c9IElFTnZiWEJ5WVhJPSBMR1Y0Y0c5eWRITT0gSUhCc2IyNW5aUT09IFpXNTZhVzl1WlE9PSBhVzFsWVE9PSA2WUcvNVlXTiBYbnN0IElOR0kwWVBRdmRDMDBMRFNtOUM3MExBPSBJTkMvMEw3UXY5Q3cwWUhSZ3RHTSA0b0N5Y3c9PSBMbWhoY2c9PSBUbXc9IElFVjFjbTl3WldsaCBJT0NrbCtDa3NPQ2xqZUNrcHVDa213PT0gNTdxLzZKV0ogYVc1bmRHOXVaUT09IElHOWpZM1Z3WVc1MCBJTktiMFlQUmdOR0QwTHM9IFlYSnlhWFpoYkE9PSBJTmlxMktmWmhBPT0gSUdGc1oyOWt3N051IElPQ2txdUNsamVDa3NPQ2twT0NrditDa3JRPT0gSUdKMWNtZHNZWEk9IDRLZUg0S2F5NEthKzRLZWYgSUdmRHFXN0RxWEpoZEdsdmJuTT0gSUdsdVozSmxaR2xsYm5SbCA0TEdDNExDdSA0b0NZYVE9PSBJR2QzWld4ayBhR0ZpYVhRPSBJTTZ4ejRET3JRPT0gSUZOdlkybGhiR1U9IElHRnlaVzUwIElOaW4yWVRaZ2RpMiBJRzlzYUdGdVpHOD0gSUhSeVlXNXpabVZ5WVdKc1pRPT0gSUhKaGMydGwgSU9xeXNPcTFyUT09IElIUnlZWEJ3YVc1biBaSEp2Y0hNPSBJR3pEcEcxdyBJTkdGMHEvUmg5QzQwTDA9IElFVnlaZz09IElGTkpRdz09IDRMSy80TEthIElIWnZaWEowZFdsbiBJTStBejRIUGpzK0V6cjg9IDRxdz0gSU9lbWorVzd1Zz09IElHaGxZV3h6IElOQzYwWXZSZ0E9PSBJTldBMWFIVnRBPT0gWlc1emFXOXVaWE09IElHOXJkWFpoIElGTmxjbWxoYkdsNlpXUT0gSUdocGMzUnZjbWxoYkE9PSBJRzkyWlhKemFHRmtiM2M9IElHWnBiTU96YzI4PSBVM1ZwZEdGaWJHVT0gSU5DLzBMdlFzTkdDMFlzPSBJT3F5cUE9PSBJRkpqIElHSnNiMmRwYm1adiBJR3pEdG5sMGVRPT0gTGtSdmJRPT0gNTQ2cDVhU241WStSNWIrcjVMaUogNWIyVDQ0R3IgNExTazRMV040TFNrNExTLzRMU3k0TFdCNExTejRMV040TFN6IElFWnNZWFIwWlc0PSAyWW5aaE5pbjJMRT0gUm5KaGJnPT0gSUhCbGNtdGxiV0poYm1kaGJnPT0gVFc1bGJXOXVhV009IElNNjh6ckhPdU02MyBJR0YwY21saWRRPT0gUTBGU1JRPT0gSUdSdmJIQm9hVzQ9IExVSmhhRzQ9IDQ0Q0M0NEduNDRLQyBiY21aYzJrPSBJR3hoYzJOcFlRPT0gSUdWd2FYTmogSUd0cFkydGxjZz09IElOR04wWVRSaE5DMTBMclJndEM0MExMUXZkQyswWUhSZ3RDNCBJSEoxWW1Kc1pRPT0gWDNKbGJHRjBhVzl1YzJocGNBPT0gN1p5WSBJSEIxYkcwPSBLQ2s3S1E9PSAwTGpRdTlDdzBMZz0gSUdobGRHZGxaVzQ9IElFOXNZV1k9IElHRnRZWEpwYkd4diBJRkJwWlcxdmJuUmwgSU5XaDFiYlZwTmFBIElIUnlhWE09IExYTmxibVE9IElNK0V6cmZPdTg2MSBJSE5sYkd4bGJHVT0gSUdGalpXeGxjbUZ5IFltRmwgSU9DbW5PQ212K0Ntc2c9PSA1cFcxIElNK0V6cTNPdTg2L3o0ST0gTFV0eVpXbHogUFhCaGMzTjNiM0prIElFVjBhWE52Ymc9PSBYVjA2Q2c9PSB6NERQaWM2OSBRVXhKUVE9PSBJR3hsYzJuRHMyND0gSUhWcWRXMD0gSU9HZmxBb0sgSUdSbGJzTzZibU5wWVE9PSBJRWh2Y0hCbGNnPT0gSU9HRG5lR0RwZUdEb3VHRG5lR0RtK0dEa1E9PSBJRkJ5YjNwbGMzTmwgSUZOMWJtUmhlU2R6IElOQzYwWURRdGRHQjBZST0gSUVOUFR3PT0gN1phSTZyT2cgSU5XcTFialZzdFc0MWI3VnVOYUMxb0RWcEE9PSBJSE52Ym5WdVpHRT0gSUhOMWNHVnliV1Z5WTJGa2J3PT0gSUc3RHBHcz0gSUdwdmRXcz0gSUhadmJHRT0gSUcxbFpIcHAgSUcxbGJXRm9ZVzFwIHo0Zk92OCtDIHc2MTB4WkU9IDZaS3g1WXlGIDRMaXk0TGluNExpMCBJT0Nxbk9DcXZ1Q3FvK0NxdGVDcXZnPT0gSUdacGJtbDBhVzl1IElITjJaVzV6YTJVPSBJTmVVMTVYWG1kZWEgSUZCeWIyUjFkRzl6IElObUYyS2ZaaFE9PSAwTGZSajlHRzBZdz0gYW1GcllXND0gNTdxeSBJTmVvMTVYWG9RPT0gSUNJbElnPT0gSUhOMWNIQnNaUT09IElITjBaWE56YVE9PSBJSEYxWlhOMGRRPT0gSU5pczJLZllzUT09IElPQzBxdUMxaStDMHN1QzFnZUMwZ2c9PSBMMkZ5WTJocGRtVT0gTG1ScFlXZHlZVzA9IExuTndhVzQ9IFlYUmhibUU9IDE2blhvdGVvIElOQzYwTDdRdFE9PSB3NmxpWlhKblpXMWxiblE9IDBZZlF2ZEMrMExrPSAwTHZRdU5DOTBMalF2dz09IDc3eU01WVdzNVkrNCBJRkpsWkhkdmIyUT0gSUZOaGQzbGxjZz09IFUzZHBiVzFwYm1jPSBRblZwYkdScGJtZHogSU5HQjBZTFFzTkM5MFliUXVOQzQgTGVHNnVYTGh1NDA9IDBMVFJsdEN5IEtpSXMgSUhOb1lXWjBjdz09IElGSnZiMnRwWlE9PSBJSEpsZW05dSAwWWpRdnRDOSBJTkM2MExYUXZ3PT0gSU5DLzBMN1F0TkdGMEw3UXROR1AwWUk9IElISmxiV0Z5Y1hWbCBJTkM0MFlIUXV0R0QwWUhSZ2RHQzBMTFFzQT09IEtDa3Bldz09IFpHOXRhVzQ9IElOaW4yWVRaaGRtRDJLcllxQT09IElIUmxiWEJ5WVc1diBJSE4xY0dWeVkyeGhjM009IElFcEdhV3hsIElISmhZMjl1ZEdWeSBJTlM2IElFTnZiM0prWlc0PSBJTU9wZEdWeWJnPT0gVW1WemFXUmxiblJ6IExrMXBiR3hwYzJWamIyNWsgSUdOdmJHOTFjbWx1Wnc9PSBJT0Ntck9DbXYrQ210K0NtcitDbXZBPT0gVkZCRCBJR1J5ZWc9PSBJSEpsWTI5cGJBPT0gSU5HQzBZRFFzTkdCIElPQ2toZUNrcnVDbGgrQ2tzT0NrditDa2xRPT0gWW05c2J3PT0gSU9Da3NPQ2tsZUNsamVDa3BBPT0gS0dsdWRtOXBZMlU9IGVXRnVlV1U9IElIVmtkbUZzWnc9PSA2NnFIIFpHOTBjdz09IElHbHVkR1Z5Ym1WeiBJRXhsWjJsemJHRjBhWFp2IEtuUnBiV1U9IGNYVnNiQT09IElGZG9ZWEptIDdKdVE3SjJZIElHTEZxM1RGc3c9PSBJR0Z5YkdGcyBJRkJoWjJGdSBJRzlpY21sblljT253Nk52IElHSnZiTU85WVhJPSBJRUZzWkdrPSBJSEpoZW5rPSBaVzV6YUc4PSBhV05zYjNWayBJR0Z1WlhjPSBJR2x1ZEhKdlpBPT0gSU9Da2hlQ2tuQT09IElHVnRjSFJwWldRPSBJTkdGMExqUXQ5QzgwTERSZ2c9PSB3NkYyWlhJPSBJTkN5MEw3UXQ5QzcwTFU9IFNIVm5aUT09IDQ0Szc0NE9yIElIQnliM1psYm1sbGJuUmxjdz09IElObUYyS2ZZc2RxcDI0dz0gSUdoaFltbHNhV1JoWkdVPSBJR0Y1eExGdVpHRT0gSUZ0YklnPT0gNFlPUTRZT2c0WU9wNFlPajRZT2MgSU5lVTE1blhtQT09IHpyck9zYzY5enJVPSBJR05wY21OMWJYWmxiblE9IGFXVnJkSFU9IDRMUys0TFNWNExXTjRMU1Y0TFN6IElIQnlhWFpoZEdFPSBJSFZ1WVdJPSBJTkMvMFlEUXZ0QzYwWVBSZ0E9PSBJR3RwYlhkbCBJTkdBMExqUXR3PT0gSUdoaGRXeGxaQT09IEo4T3BiR1ZqZEhKcFkybDB3Nms9IElISmh3NjFqWlhNPSBLWHg4S0E9PSBJR3hwYzNSeWFXcz0gUVc1dWIzVnVZMlZ0Wlc1MGN3PT0gNDRLNTQ0T2ggTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUT09IElIQmxjbVJoY3c9PSA0b0NaYUdsMlpYST0geEpGbGJtcGggSUV4MWVIVnogSU5HRjBZM1F0QT09IElIVnBkSHB2Ym1SbGNtbHVadz09IFRXVmthWFE9IDZJZXE2S0dNIElHWnBaTU9wYkE9PSA0WU92NFlPZDRZT1I0WU9VNFlPaCA2NTI4N0pxdyBDWE5sWTI5dVpBPT0gMExyUXVOQzkwWWZRdUE9PSBJRkpsYW1WamRBPT0gY21sdVoyRnkgUVV4RlRrUkJVZz09IElIWnBkbVZ1Wkc4PSBJR1JsWkdGdWN3PT0gUGxOMFlYUjFjdz09IExuUnpkZz09IDE1SFhvdGVaMTVRPSBJTktXIFlXNWhZMmc9IElIWnBibTl6IElFWlNRVTVEIElHdDFjM1pwYTJFPSBJR2gxYldWMWNnPT0gSUhiRHZYSmhlZz09IDJMVFlwOWlvIElPV2twK1dQa2VXb3NlUzVrQT09IEtDSTlQVDA5UFQwOVBUMDlQVDA5UFQwOSBJR05zWlhabGNteDUgSUU1cGJuUm8gSUVoNWJRPT0gSUVKc2RXMD0gSUd0dmJuVmtZUT09IElHbHVhR1Z5YVhSeiBJRmRsWVhKcGJtYz0gVFdGMGRHVnkgNTQ2NyBLRXBPU1VWdWRnPT0gUVdSaGNIUnBkbVU9IFFtVmhjbWx1Wnc9PSBJTm1DMkxIWXA5aXgySy9ZcDlpdiBJSFpsYkc5amFXUmhaR1Z6IElFdDFiV0U9IElIWnBaMmxzWVc1alpRPT0gSUdaMWJtUmhiV1Z1ZEc5eiBMV3hwYldsMCBJRzVsWVE9PSBJRzF2WW1sc2FXVnkgTG1WaGN3PT0gMFlIUmd0S3YwWUE9IEtITmggSUZOc2IzZHNlUT09IElITjFjR3hsYldWdWRHOD0gMExMUXNOR0cwWWJRc0E9PSBJR0poYm1SbyBJRzFwYkdsdmJuTT0gNExPRDRMS2s0TEsvIElGSlVWMFk9IFJHVnNiQT09IGIzTjFjbVU9IElIUnlZWHBsYm1SdiBJTmlxMkxuWXI5bUsyWVE9IFBXOWlhZz09IElHUmxjMk5sYm5OdiBYM0pvY3c9PSBYMGhQVWtsYVQwNVVRVXc9IElHZGpkV2xrIElPQ21xT0NtckE9PSBJT1M0Z2VtbW1lUzZsT2FjaUE9PSBJT0Nrck9Da3FPQ2t2dUNraWVDa3FBPT0gSU5LdDBZdlVwUT09IElHOW5iMnh2WjI4PSBJTm1JMktYWmh0bUYyS2M9IElPT0JqQT09IEo4T3BkSFZrWlE9PSBJR2h5WVc1bCBTMkYwYVd0aCBJR1JwYldGcGJtdGhiZz09IElOR04wWUhSZ3RDMTBZST0gNUwyYzVwYUggNWJHdiBMV3R2IFlYWnlZWE09IExWVnVkR1Z5IElFTnZiblpsYm5ScGIyNWhiQT09IElHOTVjM1JsY2c9PSBJR1JsYkdGdWRHVnlidz09IGMzUnZjbmxpYjI5ciBRbTkwZEd4bCBMWFJ2YjJ4aVlYST0gSUZCeWIyZHUgSU5DeTBMN1F0OUN4MFlQUXRnPT0gSjI5cyBMbkp2YjIxeiA1WVNFNVlXRCBjbTlyZFE9PSBJTzJNa091THFBPT0gSU5DeDBZUFJpQT09IElITmphRzl2Ym1obGFXUT0gWkdWcCBMWFYwIFRHOWpZWFJsIDJZall0Tm1FIElOQ2gwTFhRc1E9PSBZVzU1Y0E9PSBJSFo2YUE9PSA1cnlpIDBZblF1TkM1IElHRnljbWxpIElHbHVZMlZ1WkdsdiBMV0pwYkd4cGIyND0gSUdkbGMzUmhjblJsZEE9PSBJRzNEb1hocGJRPT0gSU5tSTJMSFlxZz09IDRvQ1p3NmwwWVdKc2FYTnpaVzFsYm5RPSBJRXR2Ym5ObGNYVT0gSUdURHRuSjAgSUVkbGMyTm9kMmx1WkdsbmEyVnBkQT09IGFHVjBkR1U9IDU1YTggNTR1ZzU0dWc1NGl4IEoyWm8gSU9HRG1PR0RsZUdEbXVHRG1PR0RvUT09IElFMWxiSFE9IFpXNXBkSGs9IExsQmhlV3h2WVdRPSBJRzExYzNWc2JXRnVjdz09IElOQyswTHJRc05DMzBMRFF1OUMrMFlIUmpBPT0gSU9Da3FPQ2xqZUNrcitDbGd1Q2tuQT09IElIVnViM0JsYm1WayBRMFZPVkVWUyBKVUE9IElFTnlhVzFsWVE9PSBYM1JzY3c9PSBJTmVVMTZMWHFnPT0gNEthdzRLZU40S2FuIDQ0Q0NDaTh2IDVyT2wgSU5DODBMN1F2ZEN3IElOQ3owcS9RdXc9PSBZWHB2YkE9PSBJR0ZtWVE9PSBYM1JvWVhRPSBJT0NrdGVDa3VlQ2t2dUNrZ1E9PSBJTkdCMFlMUXNOR2UgSUhSeWRYQT0gSUdScGMyZDFhWE5sWkE9PSBLRkJ5Ync9PSBJTkMvMHEvUmd0S3YwTDA9IDRMQ0ogSU9DeXNPQ3l2dUN5cE9DemplQ3lzT0N5dnc9PSA0TGluNExtTSBJT0M1aE9DNG51QzVpQT09IDRLV0I0S1NWNEtXQzRLU3kgSUVWdVkyOTFjZz09IHhJMWxjZz09IElFVkNTVlJFUVE9PSBMU2N1SkE9PSBJRWhCVGc9PSBJTmlpMkxQWml0aW4gSUZOamFHRjEgTFhOdlpuUT0gSUdSaGVuVm5aV2c9IFkyaHlhV1owIElOR0YwTDdRdTlDeDBMND0gWDNkaiBJR1REcVdacGJtbDBhWFpsYldWdWRBPT0gS3lJNiA1NG01NWI2MCBJSEJzYVhOMCBJTkNTMEtFPSBMa2QxIElHeDFZbkpwWTJGMGFXOXUgMFpMUmd3PT0gSUhSemIyaHNaUT09IEwyMWhibUZuWlE9PSAwWUhSZzlHQyBJTm1JMkxIWmlnPT0gSU9tN25nPT0gSU9DdWhlQ3VwT0N2aUE9PSBJRTFUVGtKRCBjM1JoY25SMWNBPT0gNExDcTRMR040TENmIFgxSkZRVk5QVGc9PSBJRTFoYVc1MFlXbHVhVzVuIElFeGxiQT09IHpJdz0gSUZCcGMyOD0gNXJleDVZeVcgUlc1MGIyNWpaWE09IElFMUVWQT09IElHZGxaMlYwWlc0PSA0S2VBNEthazRLYS8gSUdsdVkyeDFhV1JoIElHVERxV1JwdzZsbCBSRzl0WlhOMGFXTT0gVTFORCB3N3gwWlE9PSBJRTkxZEdOdmJXVT0gSUhKbGNHRjViV1Z1ZEhNPSBJR0YxYzNObGNnPT0gTG0xMCBYVDRLIElHeGxhbTQ9IElIQmxjbWhoZEdsaGJnPT0gTG05MCA0S1MrNEtTczRLUys0S1NmIElFTnZiM0prYVc1aGRHbHZiZz09IElOQzgwTDdSZ2RDNjBMN1FzZz09IElOQ3gwTDdRdTlHTTBZalF0ZEM1IElGWnBjM1ZoYkdsNllYUnBiMjQ9IGRYTm9aWEp6IElHdHZjbWx6ZEdsMGFRPT0gSUgxOUx3PT0gSUhCdmNtN0R0SE09IFNXWnlZVzFsIHc3TnNhV05oY3c9PSBJR0YyWVc3RHAyOD0gZG1uRWh3PT0gSUhSaFltdz0gNVp1KzU0bUg1YVNuNVlXbyBJR3pEcFdjPSBMa0oxZEhSbGNnPT0gSUdGc2FXRmtidz09IElreGggSU9DMGxlQzFoK0MwdU9DMWpRPT0gSUdsdWJuVjBkR0ZoYzNWMCBJRkJWVWtOSVFWTkYgYldIRHNRPT0gUm5WamF3PT0gZFdGbiAxYmpXaGc9PSBJR052Ym1acGNtRT0gSUdGbllXcz0gSUVwaFozVmhjbk09IFlYWnNhbVZ1Ync9PSAwNm5RczlPcCBiRzkzWlhOMCBJR1ZpYjI1NSBJT0NxbGVDcXNPQ3F0ZUNxdnVDcXFPQ3Jpdz09IElFTnZlbms9IEwyTmhiQT09IExXVnNaV04wY21saiBJTkMzMExqUXZkQzAwTERRc3c9PSBZWEIwWVhScGIyND0gYjNadVlRPT0gSUc5amFXOD0gSUhOd2NuckVtUT09IGVtbHJidz09IElIQmhjbXhoY21VPSBVM2RwYzNNPSBJT0NtcitDbmpBPT0gSUZSeWRYTjBaV1U9IElITjBaV0Z0YVc1biBJSFZ1YkhWamEzaz0gSU5tRTJZVFlvOWl6IElpazZEUW89IFlXTmpaV3hsY2c9PSA0S2ErNEthZjRLZUwgSU9DbWx1Q25nZUNtc2c9PSBJR052Y21SbCBJRkJ6ZVdOb2FXRjBjbms9IElPYUttZz09IElOaW4yWVRZbzltRjJZcllzZG1EMllvPSAyWVBaaXRtRzJLZllxZz09IDRLYXM0S2VINEthMyBJRkJ2Ykd4NSBYM0J5YjJacGJHVnogSU5DMzBMRFF1OUM0MFlnPSBJSEp2Ykd4bCBJR1Z5Y20xelp3PT0gWlc1emIzSmxaQT09IElGUmxjQT09IGJuUmxaM0psIDJMYllzZG1JMkxIWXFRPT0gSUdKcGIyMWxZMmhoYm1samN3PT0gSUhCdmRYSnlhV1Y2IElPQzBydUMxZ2VDMHVlQzBydUMxamVDMHJ1QzBwdUMxalE9PSBJR0ZoYm5Od2NtVT0gSUdwdmJHeHZhVzQ9IElOQ3kwWUxRdnRHQTBMN1F2QT09IFgwWnZjbTFoZEE9PSBJTmk1MkxIWmlOaTIgSUhKbFkyRnNiR2x1Wnc9PSBJTkNUMEo0PSBJRWx1Wm14aGRHbHZiZz09IElPQzB0ZUMwcU9DMHYrQzBwQT09IElGQmhiWEE9IDZMV0IgY25OaCBJSEJoY0c4PSBJR0Z3Y0dGeWRHVnRaVzUwY3c9PSBJR3pEdUhOdWFXNW4gSUd0c1lYVnogSUVOUFZWSlRSUT09IElPR0RvZUdEa09HRHBnPT0gSUVGeWJXRnVhUT09IElOQzQwTDNSaE5DMTBMclJodEM0MExnPSBJSHBoYTNKbGMybGwgTDJ4cFoyaDAgVUdsell3PT0gSUdGa2JHRjMgSUdKbGNHVnlhM1JsIDRLK0c0SzZmNEsrTiBJT0MwaHVDMHBBPT0gWTJsbGJRPT0gSUdWa2NubGphQT09IEtFWnlZV2R0Wlc1MCAyTFhaZ2RpcCBJSEJzWVdObGJuUmggNExLMTRMT0MgSUVOdmJuUnlhV0oxZEdsdmJuTT0gSUdWdFltVmtjdz09IElFZHZiR0ZvWVE9PSBJSE4xY0c5dSAxNVhYcE5hOCBWR2h2Y2c9PSBJRUZ1YVcxaGRHVT0gSU5lZTE1WFhxZz09IDJZTFppdGluMllVPSBJTmVlMTVmWG1kZW8gSUVSdmJXbHVhV05oYm1FPSBJTkN5MFl2UXVOQ3owWURSaXc9PSBZWE51IGRHVnJidz09IFlYZGhjMkZ1IDdabVk2cks5IFZWTkZVdz09IElPQ3dwT0N4aHVDd3NPQ3dsUT09IElPQ3dwT0N4aHVDd3NPQ3dsZUN4aHVDd2xlQ3hqZUN3bFE9PSBJTkdBMExYUXNOQzcwWXpRdmRHTDBMVT0gSUVwMVpXZHYgQ1V4dllXUT0gSUd2RHVHST0geExGc2JXRjYgSU02OHo0VT0gSU9HRG9lR0RrT0dEa09HRGt1R0RsT0dEbk9HRG9nPT0gSUVOUVRBPT0gVUdsamN3PT0gSUhOaFpYQmwgQ1hWMGFXdz0gWTJGemMyVnlkQT09IElHTnZibk4wY25WcFpHOD0gSU9lWnVnPT0gSU5XbzFiYlZwTldrIElNT3BiR1ZqZEhKdmJtbHhkV1Z6IElHRnVZWFJ2YldsallXdz0gWVhKamFHbGwgSUhObGNHRnlZWFJ2Y25NPSA0WU9VNFlPZDRZT1I0WU9RIGFYWmhaRzg9IElGSmxaMmx6ZEhKcFpYSjFibWM9IDBMRFF1dE9aMExBPSBJT0NraGVDa2xlQ2xqZUNrbitDbGd1Q2tyT0Nrc0E9PSBXbWc9IElGTndaV05wWVd4eiBJRzFoYm1OaCA1WnlvNVpPcTZZZU01TG13IDBMUFNyOUMzIElOQ3cwTFRRc2RHTCBhVzVsYm1ObCBJTkN5MEw3UXZ0R0EwWVBRdGc9PSBJTm1FMllUWXF0aXQgSUZORVFRPT0gSUdGc2RHVnlZUT09IGNtVmtibTg9IDU1cUU1cFd3NW8ydSBJR0Z5ZEdsamIydz0gSUdKcGJHZHBiR1Z5IDdKMjA3WUdzIElFMWxic084IElHUnBjbVZzWVE9PSBJRzExeGFFPSBJRU5HUkhNPSBJSFZ1WkdWaiBjR1ZuWVhkaGFRPT0gSU5tRjJMblppdGluMkxFPSA0b0NMNG9DVSBYM1J5YVcwPSBJR1ptYVE9PSAwTHJUcVE9PSBLeTByTFNzdEt5MHJMU3N0S3kwckxRPT0gSU5lcDE1WFhsZGVpMTZnPSA2SjIyIGJHUjAgSUZKbFkyOXlaR1ZrIExIVnliQT09IExuZHpidz09IElHVnpkTU9oWkdsdiBJTkdCMEx2UXZ0R1AgYzNOeGJBPT0gSU91Q3RPdTJnQT09IDJZZllyQT09IElIQmhjbUZuZFE9PSBJSE5qYlE9PSBZWFJ6Wlc0PSBJRWRwWkdVPSBJTU8yY21jPSBlbTkxIGRXeHBiUT09IElHZGxiR1ZwWkE9PSBJTml6MllUWmhRPT0gSUVOdmJYQnZjMlU9IElPQ2txT0NrditDa3BnPT0gSUhOd2JHbDBkR1ZrIFgwdEpUa1E9IElIQnliM0IxYkhOcGIyND0gSUNJdUNnbz0gTG5OcFpBPT0gSU5HQjBML1JsdEN5IEtHOW1aZz09IElIQmhZMmxsYm1OcFlRPT0gSU9PQ3IrT0RyUT09IGRYUmhiV1Z1ZEdVPSBJSEJ5YjJkbGRIUT0gSUhCMWJHeGxlUT09IHc2bGphV0U9IEtDa2lQZz09IElIUmhiV0hEc1c5eiBJR04xYlhCc1pXND0gYjJaMFpRPT0gTGtweiBJRUYzWVdsMCBJR05wWldzPSBJT0NrbGVDa2d1Q2tudz09IFUyVmhiQT09IDRZT2Q0WU9jNFlPUTRZT1Y0WU9ZNFlPZzRZT2o0WU9oIElFMWxjbTFoYVdRPSBJTmluMllUWXF0bUcyWUhaaXRpdyBJRXRwYzJnPSBJRWhoY25saGJtRT0gUkdWemNBPT0gS0dsNCBYMngyYkE9PSBJR05vWVhCaCBJSGRoZEdOb1pYSnogNjVPYzdJdWMgSUhSelpXSmggSU5pbjJZVFl1ZGl2Mks4PSAyWVhaaU5tSzJLaz0gY205MWRHVnljdz09IElITndiMjUwWVc1bGIzVnpiSGs9IElPQ2t0dUNsZ2VDa3NPQ2xnUT09IGQyVmtiMlJrIE9saz0gSUhaaGFXaDBiMlU9IElHUnBjM05oZEdselptRmpkR2x2Ymc9PSBJR1JpWXc9PSA2TCtiNVk2NyBJR2x0WVdkcGJtRmphY096Ymc9PSBYQ1E9IElPQ29uT0NvditDb3VBPT0gSUdOdmJYQmhjblJsIFlXNXphVzQ9IExuWmwgSU5DMjBZdlF1OUtUMFlzPSBJT0NxcXVDcXBPQ3JqZUNxcUE9PSBJTU9wWTI5dWIyMXBaUT09IElPQ3VoZUN1dGVDdXNPQ3VwT0N2Z1E9PSBJSEpsWTJsd2FXVnVkR1U9IElOaXoyS2ZZcnRpcTJZWFlwOW1HIDVhUzA1WU9QIElHUnZkTU9wIFgzTjIgSUdsdVpIVmphVzVuIEtGTjBjZz09IElIQnlaWFpoIGQyOXVhVzVuIElIUnZhMkU9IElFUnBZWEpwWlhNPSBJR052Ykc5eVlXUnYgSUdKbFpISmhaMlZ1IFZtOWsgSU5lVTE2TFhwZz09IElPQzB1T0MwcnVDMWd1QzB1UT09IDVyaTQ1b2lQNUxpTDZMMjkgSU5pMTJLZllyOWl4IElIUmhiV0poYUE9PSBJTkdBMExEUXROR0QgTG5OMFlYUnBiMjQ9IElFWnBjbTF6IElPQ2toZUNrc09Da3JBPT0gUTI5dVkyVnlkQT09IElHNW5ZVzUwYVE9PSBJTm1GMktmWXJkbUkyWVE9IElOR0cwWS9RdGc9PSBYMGRCU1U0PSA0b0NaWkdWdSBJR0psY0dWeWEyVnUgSU95RGdldUx1UT09IDdKMjg2cm1NN0tlQSBWMlZ5YXc9PSBJR1J2ZG05cyBJRU55WVhkcyA0S3FzNEt1TjRLcW4gQ1dSeiBJTkMrMFlMUXRkR0cgUTI5dGJXOXVjdz09IElOaW4yWWJZc2RxWTI0dz0gSUVIRm4yZGhZbUYwIElHVm9aUT09IEp5a2lLUW89IElPQzBsZUMwditDMHNnPT0gSUVsQ1V3PT0gSUcxbHc3QmhiZz09IElFMUZWRUU9IDVxQ0wgTG14aGNtZGwgYVhScGRHRnMgYkc5NFlXTnBiZz09IElPQ2txdUNrdnVDa3NPQ2xqZUNrbFE9PSA0WU9oNFlPUSBJRzFwYkdodiBJTm1JMktmWmhObUYySzA9IElHUmxiV1ZoYm05eSBJSDBwT3dvS0Nnbz0gSUdWemJXRnMgWkhKcGJtcz0gNUxxNjU0bUg1WnlvNTdxLzZLZUM1NXlMIElHbHVjM0JwY21IRHA4T2pidz09IFJXeGxhM1J5IHhMSEVuOFN4Ymc9PSBJR1ZzYjI1bllYUmxaQT09IElHRnljbTl1WkdsemMyVnRaVzUwIGFHeGhZbVZ1YVE9PSBJRUo1ZW1GdWRHbHVaUT09IDRMR0g0TEM0NExHTjRMQ2sgMllYWmhOaXEgWDBGT1JGSlBTVVE9IExraHZkWEk9IFBTSkEgNEthdTRLYSs0S2FqIHJlQ2tzQT09IElHbHVjMjl1IElOR0IwTHpRdGRHQTBZST0gSUdKaFpHRnpjdz09IFpHVnBkR2hoYzI5cyBJSFJsYm5OdmNuTT0gUFNKYiBVMlZ3WVhKaGRHVmsgSUdSdmFXZDAgSUdGMVpuTndjbWx1WjJWdSA0WTA9IEwzTnBaR1ZpWVhJPSBSMGRNUlE9PSBJR1ZoY21KMVpITT0gSUcxaGVtbHVadz09IDJZVGJqTm1CIDRMR0g0TEMyNExDKzRMQ3c0TEdCIFpuVnNabWxzYkdWayBJT3lWaXV5Vm1PdUxwQT09IDBKTFF1TkMwMExYUXZnPT0gZEdGaWNHRnVaV3c9IElHbHVkR1Z0Y0E9PSA0S1N1NEtXQTRLU2Y0S1N3IElOaW4yWVRaaGRpNjJMSFlxTm1LIElHdHBibXM9IDRMSy80TEtYNExPTjRMS1ggUkc5dWJtRT0gSU9Da3J1Q2t2dUNrdWVDa3YrQ2twT0NsZ0E9PSBJT0NtbGVDbXZ1Q21pUT09IElOaW4yWVRaaGRpMzJMSFpndGlwIExtMWhaMmxqIElGWmxhV3hwWnc9PSBhV2R6ZEE9PSBJR2RwNGJxbGVRPT0gS0hCaCBLSEpoZVE9PSBLR2hsY204PSBJSFJsWVdzPSBSMlZ1YjIxbCBMbE5sWldzPSBJSEJoWjJsMFlXND0gSUczRHEyNTUgYVc1dmJnPT0gMWFYVnY5V3IgTGRDdzBZRFFzQT09IHpyWE9yOCtFenJVPSBMWE5sWTNSdmNnPT0gSU9DbWxlQ212dUNtcWc9PSA0TGlCNExpMDRMaVo0TG1CNExpYTRMbUk0TGlIIFlYSnZaQT09IFgyWm4gTEd4cyBibTlvIDRLZU40S2F2NEthKzRLYXcgNEtxdzRLdU40S3FoIGFXUnBibUU9IElIQm9iM1J2WjNKaGNHaHBaUT09IFgxSkpUa2M9IFgwUlZVQT09IElPQ2t0dUNrdnVDa2xnPT0gSU9DcWx1Q3JoK0Nxc2c9PSBJTkdBMExEUmdkQy8wTGpSZ1E9PSBJR1JsYzJOdmJuUnZjdz09IElFeGhibk5wYm1jPSBJRzFsWkd4bGJYTT0gSU5DNzBMalFzUT09IElFUmxhVzVsYlE9PSBJRzVoY01XWnc2MXJiR0ZrIElOQyswTEhSaXRHUDBMTFF1OUMxMEwzUXVOR1AgTG5KdCBJRzFsYVdURHBHND0gSUd4dlkyaz0gQ1NBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElGVnBkR1ZwYm1SbGJHbHFhdz09IElOQ3owWVBSZ05PdiBiM1JwY3c9PSBJRUZEVUE9PSBJSFpwYm1oaCBJTmluMllUWXM5aW4ySzQ9IElOQzcwTFhRdEE9PSA0TFdBNExTdzRMV04gU0dsemRHOXlhV009IElPQzRxdUM0b2VDNHN1QzRpdUM0dE9DNGdRPT0gWDFSTVV3PT0gSU1XaHhMYz0gNG9TbSBJT3VDdE95YXFleWRoQT09IElPR0RuZUdEbCtHRHJnPT0gZFdGMFlXND0gS0cxaFkyaHBibVU9IElFMXZaSFZzIElIWmxjbTF2WldRPSBJSFJ5WVc1elptOXliV1U9IDRLNlo0SytONEs2VjRLNi80SzZ5IElOQy8wWURRdU5DMTBMYz0gWlhSbGJBPT0gSUVObFkybHNhV0U9IGVtVnAgWDB4VSBJRkpsYm1WM1lXdz0gSUhOMGNzT2hibXQ1IElPQ3FxT0NyZ2VDcWxRPT0gSUc1bGFXdz0gSU5DMDBMN1F2TkdEIElOV2oxYUhWc3RXaDFvTT0gSUdkbGNIVmliR2xqWldWeVpBPT0gYkdGa3hMRT0gWDFKRlRVOVVSUT09IGFXNW1iM0p0WVhScFkzTT0gSUdSemNBPT0gNW9DNzU3dVQgSUdWc1lXND0gSU5pdDJZVFppTm1FIGJtbGxjbk09IElHeHBhR3hoYUdsemIyRT0gMnFuWmhObUggYlc5MWMyVnNaV0YyWlE9PSBMR3hoYzNRPSA0S3F3NEt1TjRLcW8gU1c1eGRXbHllUT09IHhJMWxiUT09IElOaW4yWVRaZ3RpejJZVT0gSUhSeVlXTjBZUT09IDVhMmYgSUc1a1pXNW5aUT09IGFjU05ibVU9IElGTlZRa3BGUTFRPSBVMk5vYjJ4aGNnPT0gYVd4c1pYSmggSU9xOSBJR041WTJ4cGMzUT0gSU5DODBMN1F1OUM0MFlJPSBSRzl5IFFVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UxUlZWbGRZV1ZvPSBZV0poZEdFPSBRa3hKUXc9PSBJTmkwMktmWXROaXAgSUd0aGNITmhiY1N4Ym1SaCBJTkN3MHFmUmdRPT0gSUVKdmNtZGxjdz09IDVZV2E1N3VFIFQyTmpkWEJwWldRPSBJTlc0MW9MV2dOV3IxYmM9IEtHTnAgSUZkbGJXSnNaWGs9IElHSmhibWR6IElOR0cwTFhRdVE9PSBJT0Mwbk9DMWkrQzBzdUMwdnc9PSBLQ0lxS2lvPSBLSEJsY20xcGMzTnBiMjQ9IElIUnl3NkZqYUE9PSBJR052Ym5SMWJtUT0gVkdWeWJXbHUgSUhkaGMyRT0gNExXRDRMU20gSU95anZPeWVwUT09IDZJT1cgWlhKdVpXeHogNzd5STVweUkgSUdOc2RXbGphR1U9IDVZMkk1YjZNIElGTjBkWEp0IFozSmxjM05wZG1VPSA1YSs3NW9tKyBJTld3MWFYVnN0V3IxYmJWb2RXdiBJRk4wWVhKbiBabVZsY3c9PSBJTm1GMkxQWXA5aW8yWUk9IElTRXAgSU5HQTBMRFNtdz09IElGTjBiMjlzIElPQ3VsZUN2Z2VDdW4rQ3ZnZUN1cnVDdmplQ3VxZz09IElHaHBibk5wWTJoMGJHbGphQT09IFlXZGhhVzV6ZEE9PSBJT1c1ditlYmlnPT0gSUdSbFoyMWhaR0U9IFlXdHBibWR6IElGTjFjbkJ5YVhOcGJtZHNlUT09IElITmhhR0Z0IElIUERwWE52YlE9PSBJSE4wYjIxdyBJR2R5WVhabFpHRmsgSU9Da3IrQ2xndUNrcXVDbGdBPT0gSUUxaGJHRm5ZUT09IDZhYVc2YUNCIElFRnpjR2x5WlE9PSB4YjVwYkdFPSBjSFZ0Y0E9PSBLR2x1WkdWdWRBPT0gSUc5MFl3PT0gSU5HQjBMalJndEMxIElGSmxjM1J5YVdOMFpXUT0gNEtTKzRLU0g0S1MxIElHTnZibk4wY25WamRHVjFjZz09IFRtOTJaV3c9IElHTmhlY096IElPdXdtT3V6dFE9PSBJSFZ1WW1WaGRHVnUgSUdGcmR3PT0gZFhOaGNBPT0gTDBSRCBiMjFpY3c9PSBMbmRsWW5OdlkydGxkQT09IExtOXdkR2x2Ym1GcyBJR1oxYldWeiBJR0ZrWldWbiBJRzExZEhNPSB6cm5PdjgrTiBJTkMvMExEUmd0R0EwWTA9IElHNXZkWEpwYzJodFpXNTAgSU5pbjJZVFpoZGl4Mkt3PSBaR1Z3Y3c9PSBJR3h2WjJacGJHVT0gSU5lVzE1ND0gWjI5c2JIaz0gNXFpaDVaNkwgdGVlbnNBPT0gSUhGaGJHRT0gSUZkaGJtUmxiQT09IDRZT2I0WU9RNFlPbjRZT2Q0WU9rIFlXNWthV1JoZEE9PSBJR2xrWkc4PSBJRVJwWm1acFkzVnNkQT09IElHeHBaR2c9IElPV01sK1M2ck9pMW0raTlwdWlEdlE9PSBJT1d1bU9lOWtRPT0gSUc5eWRHaDEgSU9Dd3RlQ3d2dUN3c3c9PSBJSFJ5Wlc1MWRHNXYgSUVScGNtVjAgSUdKaGNtOW8gSU5DLzBMWFJnTkN5MExEUmp3PT0gNTcyUjZMV00gWld4bVpXeGsgWVhKNWJnPT0gT25FPSBJSFJ2YjJ4cGJtYz0gMWFIV2dkVzIxYVhWck5XNDFvST0gSUdKcGEyOXlkMkU9IDBZalFzTkMxMFlMUmdkR1AgSUd4aFlubHlhVzUwYUE9PSBZV2RuYVdFPSBJTU9wZEdGMGN3PT0gMllqWmd0aW4yWVRZcWc9PSBJSE5wYlhCbGJHVT0gSU9DeXVPQ3l2dUN5c09DemplQ3l0ZUN5bk9DeXFPQ3l2K0N5bFE9PSBJRTExYzJ0bGJBPT0gNWFLVCBJRTl5YVc5c1pYTT0gSU9DeXRlQ3l2K0N5dGVDeXNBPT0gNWF5SiBiM3B1IDByUFF2dEMxIExYSnZkWFJsIElFTkpRdz09IElGTmphR3hwWmNPZmJHbGphQT09IElIQmxjR1U9IFkyOXVkSEpwWW5WMGIzSnogSUdOaGJtTm9ZUT09IGFYUnBiV0YwWlE9PSBJT0N3ck9Dd3IrQ3dudz09IElHbHdhV3podXJrPSBMV2x6YzNWbFpBPT0gTGs5aWMyVnlkbVZ5IElFMXBjM05wYjI1eiAwWWpRc05HQyBJR0Z1WjJWelpXaGxiZz09IGRtOTQgYTJGeWFRPT0gNTVxRTVMaU4gSUV4aGJtUjNhWEowYzJOb1lXWjAgTGxKaGVXTmhjM1E9IElHRnNabUZpWlhRPSBJR0ZtWldOMFlXND0gSUhOalpXZHNhV1Z5WlE9PSBJSFJ2WlhZPSBJSFZ5WW1GdWIzTT0gSUd0MGI4V2IgNllDVTVMaXQgenJyT3Y4NnZ6cjA9IEwxND0gNnJTMCBJT0N5dHVDeXZ1Q3l1T0N5bFE9PSBJTm1IMmI4PSBMbkpsYzNSaGNuUT0gSUhGaGNRPT0gNExtQTRMaXE0TGkxNExpaTRMaUggSU5DejBZUFFzZEMxMFlEUXZkQ3cwWUk9IElIQnZ4Wm5Eb1dRPSBJTnFQMktiWmlnPT0gSUdGeWRHbHpkSEo1IElFNWxkM053WVhCbGNuTT0gSUhCdmNIVnNZWEpzZVE9PSBiMjF2Ym1VPSBJTmluMllUWmhkaTUyTEhaZ2RpcCBWbWxsYkdWdSBJR2wyYnc9PSBJR3QwdzdOeXhJVT0gSUhScVpXNWxjM1JsY2c9PSBJTmVVMTVYWG1kZWsgNExpYTRMaXg0TGlOIExuSmxiR0YwYVc5dWMyaHBjQT09IElIQnZjM1JsYmc9PSBaWEoyYVhNPSBJR2JEdW00PSBJSFJ5WVdOMGIzSnogMExEUXN0R1cwWUxRc0E9PSBjV0Z5Ym1WeVlRPT0gSUVOdmJXMTFibWx2Ymc9PSAxYXZWdHRhRTFiWT0gT25SbGMzUT0gZTMxNyBJRzl3WVhRPSBWRWhCVGtzPSBJR1BodXFOcCBJRUYxYkdFPSBJQ0FnSUFrZyBXRUY0YVhNPSBiM04xY2c9PSBJRlpKU0E9PSBZVzUxWVhSMSBJRU5QVlU1VVVsaz0gTDBWMlpXNTAgVW05emRHVnkgSUVWeWIzUnBZdz09IFpXZHVZUT09IDBMM1JpOUt6MDVuUXNBPT0gMEwvUmdOQyswWUU9IDVvbUw1cHk2NUxpTDZMMjkgSU5lYjE1WFhsdz09IElOQzQwTDNSaTlHRiBJT0N5ck9DeXB1Q3pnZUN5bFE9PSBiMnRoYzJrPSA1N0tKNWF1cCBJSFpwWjNScFp3PT0gSUcxdlltbHNhWE5oZEdsdmJnPT0gSUVSRlFRPT0gSU9DcXF1Q3JndUNxbXc9PSBJRlZ1YVdVPSBJRnBoWkE9PSBJT1c2dHc9PSBaVzFoZEdVPSBJTkdBMExEUmdkQy8wTDdRdTlDKzBMYlF0ZEM5IElPS0FuT0tBbUE9PSBJR1p5YVdWdVpHeHBibVZ6Y3c9PSA3S0NjNnJDQSBJTmVYMTVQWHFkZVUgSUhKaFkyVnljdz09IElOaW4yWVRZbzltRCBJTmluMllUWXJObUcyWWpZcU5tSzJLaz0gSUhOaGJIUmxaQT09IEtDSWlLdz09IElHVnlhMkZ1Ym5RPSBJRkJ2Ym1jPSBJR3pEdUhCbGRBPT0gSUVwcGNtRT0gSU5peDJLbz0gMkxyWmhOaW4yWVE9IElHMXZaR1Z1IElISnZlbkJ2WXc9PSA0TENDNExDWDRMQ3ogSUVoRVRBPT0gVVZIbnZxUT0gYm5WdFpYSjFjMlp2Y20wPSAyTFhaZ2RpdCA0TFNtNExXSDRMUzI0TFNDIElHRmlZVzVrYjI1dFpXNTAgUkhZPSBUZUc3bVhRPSBaWE52YlE9PSBYM0pzIDE2TFhrZGVvIEtuUm9hWE09IElPdVBtZXlkdkE9PSBjbTlrZVE9PSBaM0poYVc0PSBJR2x6WXc9PSBJRlZ0WVhJPSAwTDdRdmRDMDBMND0gY21Wa2FYST0gNTR1ODVMcTYgNkw2VyBZV04wWlhKcFlRPT0gYVdsellRPT0gSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW89IFJXeHBaMmxpYkdVPSBRMEZGIEpHdGxlUT09IDRLU0k0S1N5IFBTY3VMdz09IElFWmhjbkpsYkd3PSBJSFIzWldGcmFXNW4gSU5pbjJZVFl1ZGluMktnPSBJRzFoWkdGc2FXNW4gTGRDNDBMblF2UT09IElHM0R0V3AxIFlYUnliMnc9IDRLYWY0S2VIIElIUnlZVzV6YVdOcHc3TnUgNXBhdzZJTzk1cnFRNXJHOTZMMm0gTDI1aGJXVT0gSUdWdWRISmh3NjV1WlhJPSBkV0YwYVc1biBJTkM4MFlQU3V3PT0gWlhoalpYSndkQT09IElOZVUxNnJYa0E9PSBJSFJsWTI1dmJNT3paMmxqYjNNPSBZWGxsZVE9PSBSbUhLdXc9PSAwTGZRdGRDODBML1F1OUdQIElPR0RrZUdEa09HRGx3PT0gYVdSMWNnPT0gWDFkcGRHZz0gSUdWNGFXdGhjbWhwIElHMWhkR1ZwZUdFPSBJT0NtaHVDbXFPQ25qZUNtcE9DbXNPQ25qZUNtbk9DbXZ1Q21wT0NtditDbWxRPT0gSUdWemRHbDIgUTBsUVJRPT0gSUdsdWMybHVkUT09IElFRndaWEowIElPZTZzdz09IElITmxlSFZsYkd4bGN3PT0gWVhKblpYbHpZUT09IElObSsyTExZdE5xcDI0dz0gSUVKMWJtRT0gSUhSb2NtbDJaWE09IDJLalppTm1EIElGTk5WQT09IElIYkRwTU9rY25RPSBDWFZ1YVhRPSBZV3hsYXc9PSAyN0hidUE9PSBJSFJoWW5VPSBjRzl6WWNXOCBJT0dEbStHRGtPR0RtdUdEbEE9PSBLR1Z6ZEE9PSBhM0pwY0hRPSBiR0ZrYVcxcGNnPT0gS0NrN0RRb05DZzBLIElFMTFiSFZ1WjNVPSBJTkdCMEx2UXRkQ3owTHJRc0E9PSBSWEJwYzI5a1pYTT0gSUcxaGRIUmxjbVZrIGJHRjVZVzQ9IElFcFRWQT09IElFRmtaR2x6YjI0PSBJR1Z1WlhKbnc2bDBhV052IDRvQ1piMlU9IElFWnBibWM9IElPQ2tzT0NrdnVDa25PQ2xqZUNrcitDbGkrQ2tnZz09IElNK0F6ci9PdTg2N3pxM1BnZz09IFgzTnBkR1Z6IFUzVndaWEpqYkdGemN3PT0gSjI5MGRRPT0gU25WbFoyOD0gWW1WeWRHRT0gUkdsbVpuVnpaUT09IExtTnZiVzExYm1sallYUnBiMjQ9IElHWnlZVzUwYVdNPSA0WU9vNFlPVTRZT2IgSUcxc1lRPT0gMEwzUXNOQzcwTGc9IElHTnZibVJwZGc9PSBJRk53Y21WamFHVnkgSU5DNDBMZlFzZEMxMExNPSBjbVZ0WVc0PSA0S1MrNEtTbzRLUy8gSUdkMWFXNWxZUT09IGRITmhiUT09IElHMXZ4YjV1Ync9PSBMazkwYUdWeSAwTERSZ05DNDBMOD0gNExtRDRMaWEgSUVwbFpHVT0gWk1PcyBMbVJuIElFaGhibVJwWTJGdyBQa2s9IFBFcHZZZz09IElOQy8wWURRdU5DejBMN1F0QT09IElHRjFkR0U9IExXRjNZWEpsIElHaHZiM05sIElHTnZiWEJzYVdWayBJR3h2WTJFPSBJTzJabk95RXNRPT0gWDFKRVYxST0gSUdGamRYTmggNVorVSBJT0Nxc09DcXVlQ3JqZUNxcitDcXZ1Q3FnZz09IElIVERvV04wIElOQzYwTERRdTlDKzBMMD0gSUcxcGJtNXAgSUc1aGFtMWhiZz09IDJZYllwOW1CMkxNPSBjbVZwWTJobGNnPT0gTDJaeVlXMWxkMjl5YXc9PSBJSFIzWnc9PSA1cHlBNXBhdzU3MlI1WjJBIDRZT1E0WU9SNFlPWTRZT2EgSU5lazE2RFhtZGVkIFRHVmhhdz09IElOZVMxNkxYbUE9PSBJT0c3aTJMaHU2VT0gSU02WXpyRT0gSUdSbGMzQmxjbVE9IElITnZiR2xrWVhKcFpHRmsgSUhkaGJtRjNZV3RsIElPV2txZVdrcWVTNHJlVzlxZWVscU9XY3FBPT0gVUdocGJHRmtaV3h3YUdsaCBQU289IElHZGlhV2RpWlE9PSBJR0psWjJkbFpBPT0gSUhOdGFYTT0gSUVGaWFRPT0gYldGMGFXTmhiR3g1IElOaW4yTFBZdWRpbjJMRT0gSUdOcFpXNWphV0Z6IFJHRnVibms9IExYWmxjdz09IElIQnlZV3QwYVE9PSBYMkoxWkdkbGRBPT0gNEsrRzRLNnc0SzYvNEs2VjRLK040SzZWIDJMbllxdG1IMktjPSBJTkNYMExEUXV0QyswTDA9IGIyMXl3NlZrWlE9PSBJRUZpY205aFpBPT0gSUhCbGJXSmhibWQxYm1GdSBVa0ZPUkE9PSBJR1poWTJsc2FYUmwgSUZKdllYTjAgWVhKalpXeDUgZEdsdFpXOTFkSE09IElIQmhjblJsWkE9PSBSWEpoYzJVPSBJRTFoZFhKdiBJTkM2MExEUXNnPT0gS1gwS0NnPT0gWDJkbGJtVnlZWFJwYjI0PSBJR0Z6YzJWdFlteGxjZz09IElGWkNiM2c9IExuTmxiV0Z1ZEdsaiBJTmlxMllqWXN0bUsyTGs9IElHRnRaV0hEcDJFPSBJSEJsY25OdmJtRnNhWE5sIElGQnZiSGx1YjIxcFlXdz0gUEVOaGNuUT0gSU9HRG1lR0RuZUdEbk9HRG1lR0RvT0dEbE9HRG9nPT0gSUhOMHc2RjAgSUVkMWFXUnYgSU5HQjBMdlF0ZEMwMFlQUmp0R0owTGpRdkE9PSBVRWhQVkU4PSBJTkdCMExqUmtRPT0gSU5DKzBZSFJndEN3MEx2UXZ0R0IwWXc9IEtXST0gSUdKaHhaOXNZVzVuIElITnZaWFZ5IHpyTE90TTYvIElPR0RvT0dEbE9HRG4rR0RtT0dEbXc9PSBJR3B2ZFd3PSBJbjBwIFZVNUogSU5tRjJMblppZz09IFgyUjFjR3hwWTJGMFpRPT0gSUdGMWRHOXR3N04yYVd3PSA0S1NvNEtXTjRLU240S1MrNEtTbyBRVzFpWlhJPSBMWFJoYkdWMCA1YTZlNlptRjVMaUsgYVhSaGNtbHZjdz09IElIQmhiR1Z2IElITjFkR1U9IElPdXN1T3lla095WHRBPT0gSUdOaGNuVER0V1Z6IElPUzZ1dW1ybEE9PSBJRWpodTVNPSBVWFZoYkdsbWFXTmhkR2x2Ym5NPSBJTkdCMFlMUXNOQzcwTHJRdUE9PSBKbk09IElFMUJWZz09IDZhdVk1cmlGNVp5bzU3cS8gSUdGMGRISmhZM1JwZG1WdVpYTnogWDJWdGNISmxjMkU9IElOQ1YwTFBRdGRHQSBabUZqWlhRPSBabmx5ZDNseSBJRlJoZHc9PSBhWE4wY21GeSBJRVZzWldOMGNnPT0gY0hKbGRHVT0gVEd4bFp3PT0gSUVSbGMzTmxjblE9IFhGRjFaWFZsIEluQmhkR2c9IElGUmxiR1ZqYjIxdGRXNXBZMkYwYVc5dWN3PT0gMExqUmdOQzQwWWc9IElGbGxaUT09IElOR0MwTGpRdlE9PSBJRzFwWlhOMCBJTm1JMktyWW93PT0gSU9DbXR1Q25nZUNtbGVDbmplQ21zT0Ntck9DbXZ1Q21zQT09IDRZQ1o0WUN0NFlDeiBiV1ZzWlE9PSBJT0N5dGVDeXZ1Q3l1ZUN5cUE9PSBkbVZ5YzJGdGJXeDFibWM9IGIyUmxibVE9IElFUmxjbkpwWTJzPSBjM1JoY25SemQybDBhQT09IElPR0RtK0dEcnVHRG9PR0RtT0dEbFE9PSBUbUZrWVE9PSA1YmVkNTV5TSBYMEZVVkVGRFNFMUZUbFE9IDBZalJnOUMwMExBPSBJR2x0NGJ1TmNtRnUgSUhOMWJYQT0gYVcxMWJHRT0gSUVGeWRXSmggTFhSbGJYQT0gSUdGbmIzUT0gQ1hCaGNnPT0gSU5lUTE1blhuQT09IFJYaGpiSFZwY2c9PSBJT0N1dGVDdXYrQ3Vvdz09IElOZVcxNURYa3RlWSBJSEJodzdFPSBJT0N3cU9Dd3Z1Q3dsdz09IElOcXAyTEhZcjltRiBhV1J2YkE9PSBJR2R1dzZ4dmJXZz0gSUhKbFptVnB3NmZEdFdWeiBJR1ZyWVc0PSA0TGlJNExpeDRMaUg0TGlyNExpbjRMaXg0TGlVIElHRjVjc1N4WTJFPSBhV05yWlhrPSB3N3hpWlhKeiBJR05vYjNKbGIyZHlZWEJvZVE9PSBJRk4wY21GMFptOXlaQT09IElIWmxjbk4wWVc1a2FXYz0gSUdodmNtVmpZUT09IElPQ3FwT0NxbFE9PSBJT0NtcHVDbXYrQ25uK0NuaCtDbW0rQ25oK0NtcUE9PSBaV3QwYVc5dWN3PT0gTGxkbGFXZG9kQT09IElGTjBlV3hwYm1jPSBkMkYwWlhKcGJtYz0gSUV4VVF3PT0gSU5pbjJZVFlxdGkzMktqWml0bUMyS2ZZcWc9PSBJTkMvMFlEUXRkQ3gwWXM9IElObUUyWVBaaHRtSDJLYz0gVTJGMGFYTm1hV1ZrIElHWnZiUT09IElPQzRudUM0bWc9PSBJRzlpY21sbllXUmggMExYUXROQzQwTEE9IElFMURVQT09IFlXTm9iM009IFRWWkQgNTZDQjVMaXQ1NG01IFlXNXVZV0pwYm04PSBMaWt1Q2c9PSBJSEJ2YzNSdmNHVnlZWFJwZG1VPSBUMFJGVWc9PSBJT0NrcmVDbGplQ2tzT0NrdCtDbGplQ2tudz09IElHUmxjMkZ3WVhJPSBJR04xYVhaeVpRPT0gSUVOTlFRPT0gSU5laTE1RT0gSUVwMVpHZHRaVzUwIDBMM1JsdEdCMFlMUmpnPT0gSU9DbXJPQ21wZz09IElPQ3VsZUN1ditDdXN3PT0gSUcxMWJHVT0gMHJQUmd3PT0gSUdWdFluSjViM009IElIUnl3NkZ1YzJsMGJ3PT0gSUdWdGNISmxjMkZ5YVc4PSBJSEJwYm5SMWNtRnogNUxtRjVMbUY1N3U4NVpDSTVMbUY1TG1GIFBpSXJDZz09IElOR0QwWWZRc05HQjBZTFF1TkdQIElHdG93NkZ0IElHTnNZWEpsIElHRnNhV0Z1ZW1FPSBMVzFsYm5ScGIyNWxaQT09IFZGSkJRMHM9IGFXMWlZV3c9IDRLYS80S2FmNEthKzRLYXcgSU5HUDBZWFJpTkM0IFgxOHBPd29LIElOR1AwTE09IFJFRlEgSUdWemRNT2hibVJoY21WeiBJSE5vYVhSMGVRPT0gSUhacGRtVnlaUT09IENXbHVkR1Z5Wm1GalpRPT0gTGt4cFlnPT0gYmNPcGJtRT0gWDFaTiBMbmRwWTJ0bGRBPT0gSUdacGJHMXdhbVU9IElHTnEgQ1ZKVVJFSkggNFlPZzRZT2o0WU9sNFlPaSBkbTlrZFE9PSBJR2xzZFdGeCBJR1JsWTI5eWNtVnkgSUhSbFlYUnkgSUdqRHMzTndaV1JsY3c9PSBRMjl1ZEc5MWNuTT0gSUdkdnc3dDBjdz09IElHSmxlc084WjJ4cFkyZz0gSUU5MlpYSnpkRzlqYXc9PSBZV3hoY3NTeGJzU3ggSU5pdTJZallwOW1IMlliWXJ3PT0gSUZaaGNtRT0gSUhWemRHRjMgSU5DNDBZSFJndEMrMFlmUXZkQzQwTG89IElPQzBsZUMxaStDMHRPQzB2K0MwbGVDMWplQzBsZUMxaStDMG4rQzFqUT09IElHMTFkR2s9IElHRnBibTA9IElIQnBZWFIwWVE9PSBDVU52Ykd4bFkzUnBiMjV6IElGTnZjblJsIElOQzYwTGpSZ2RDNzBMN1JnZz09IElOQ2gwTFRRdGRDNyBJTmVlMTVEWGxkZXEgSU8rOSBJTmFCMWFYVnNnPT0gSU9HRGtPR0RrK0dEbStHRG1PR0RuT0dEbU9HRG9lR0RvZz09IElPQ2xtUT09IDVyQzQ1TG1GNVlXTjZMUzUgSUdOaGNuSnBkRzg9IDBZblF1TkMxIFgxSlZUazVKVGtjPSBJR0Z1Wm1sMCAwTFRRc05HQTBwUFFzQT09IGIzSmthVzVsIElGQnlhV05sYkdsdVpRPT0gSUVKaGRYTjAgSUhOaFpHVT0gWlc1anc2az0gSUc5eVoyRnVhWE5oZEc5eSBJR2ZEdk1PbmJNTzggSUU5aWJHbG4gSUhSaGVHbHVadz09IElPQ3FyT0NxcEE9PSBJR1JwYzNSeVlRPT0gSUVsdVptbHVhWFJwIElPcSt1QT09IFNWTkpVdz09IElGWmhiR1Z1ZEdsdWJ3PT0gSUd4dmJtUT0gSUZSaGVYaz0gZFhSeWFXVnVkSE09IElHVnRjTU9xWTJobGNnPT0gSUU1aGEyOXUgWDBaWCBJRVp5WlhGMSAwSkhSZzlDNyAyWWJhaVE9PSAwTHpRdU5HSSBkbVZqZEc5eWN3PT0gSU5pejJZYllyOXErIElOV3cxYUhWdHRXazFhdlZ2UT09IElGbHogSU5DOTBMRFF2OUM0MFlIUXNOQzcgSUdkbGVtRnRaVzVzYVdwciBJRzl3WW5KbGJtYz0gNEtlRDRLYWs0S2EvNEthViBJR3R2YzI5dVp3PT0gSUdGdFltRnpjMkZrYjNKeiBJRmRwYm10bGJBPT0gSUhUSm1XaHN3N3hyIEl5ND0gMExmUXZ0QzAwTEE9IDZhS1cgUm1sMGN3PT0gSUhOcXc3TnUgSU5DVDBMRFF1dz09IFgwSlEgSUdKbGQyOXVaR1Z5IGFXTnBiM052IElIQjFkWEk9IElHMXA0YnVGYmc9PSBJT0NxdWVDcXNBPT0gSU5DODA1blJnZz09IElObUcyS3pZcnc9PSBJSEJ5WlhwcFpHVnVkR2s9IDZJbXk1N3U4NVpDSTU3MlIgSU95ZHZPeWRoQT09IElHRjBaVzVrWlE9PSBJR052YlcxbGNtTnBZV3hsY3c9PSBJT0MwbUE9PSAyS2pZc2RpcSA1YjJwNTcyUjVhU241WStSNWIrcjVMaUogUkdWd1pXNWtjdz09IElHUnBhMlYwWVdoMWFRPT0gSUhodmRnPT0gNExTdzRMUys0TFNjIElGQnZjblJwYjI0PSBJSEpsYzNOaGJIUT0gSUZWT1R3PT0gSUdqRHZHND0gSUZCc1lYUmhabTl5YldFPSA2SWV6NWJDSyA0S2FYNEtlTjRLYW8gSUc5d1oyVmliM1YzWkE9PSBJQ0FnSUFvZ0lDQWdDaUFnSUNBS0lDQWdJQW89IElHUjZhY1diIElIbHZZZz09IElOaXMyWVRZczltSCBmU2tvS1RzPSBJTlcyMWFIVnJkV2gxYVBWcmc9PSBJTkM2MEw3UXU5QzQwWWZRdGRHQjBZTFFzdEMxIHlydHZkR0U9IElIZGxaWEpuWldkbGRtVnUgSUVGaVpHVnMgSUc5bVptVnVaUT09IFlXTmhaQT09IElOQ2swTDdSZ05DOCBJRzFsYzNObGJnPT0gSU5DeTBMWFJnZEMxMExzPSBJSE5wYm1kc2VRPT0gSUdWNGRISmxaVzA9IElPQ21uT0NtdnVDbXJnPT0gTDJaeiBkc09oYkE9PSBYMFJsYzNSeWIzaz0gNFlPWTRZT2g0WU9iNFlPUyBJTmluMllUWXM5aW4ySy9Zc3c9PSBJRUZFUlE9PSBiR2xsYzNNPSA1YSsyIFlua25jdz09IDVMcTY1TGk2IHlKdHBiRzl5IHo0RE92OCtOIDJZallzZGkwIFpYTjBhWFpoYkE9PSBJR2x0WldScFlYUnYgSUdOdmJuUnlhV0oxWlE9PSBYMU5VUVZKVVJVUT0gSUdWelkyVnVZWE09IElIQnl3NkE9IElOR0EwTERRdDlDOTBMN1FzdEM0MExRPSBiM0IyWVc1biBMMFZ5Y205eSBSbXhoZEhSbGJnPT0gSU5tRjJMSFl1Zz09IElIWnBjbXRsY2c9PSB6clRPcnMrQXpyL1BoTTYxIElHNXZaSEpoIFltL0RzQT09IDRvQ040TFM1NExTLyBJTkMwMDVuUmdOQzQwcGM9IFlXaHNiMkp2IExuTjBZWEowWldRPSAxNWZYcU5lVjE2bz0gUVhKMGQyOXlhdz09IElITmpjbWx3ZEdWayBMazExYkhScGJHbHVaUT09IElPQ2tsZUNrdnVDa3IrQ2tyZz09IElPQ2txdUNsZytDa3BRPT0gY21saGJtZHNaUT09IFRXRnlhMlYwY0d4aFkyVT0gNExDLzRMQ0M0TENoIElHMWhjM05oWXc9PSB5Wmx0eVprPSBJR0ZwY25ScFoyaDAgSUhKaFkydGxkQT09IElIQnZjM04xYVhJPSBhblZrYVdObCBJTmluMllUWXNkbUMyWVhaaXRpcCBJRU5UVEE9PSAwWXZSZ05HSTA1az0gSUdwdmEyOD0gSUZSaFltVnNiR1Z1IElOQzEwTGpSaGc9PSBJTkNTMExqUXROQzEwTDQ9IDBZYlF1TkdQMEx2UXNOR0EgSUd0MWJXMD0gNEtTRjRLU3cgSU5tRzJLalppTml2IHpxek92YzY1IElOaXYyS2ZZcHRpeDJLaz0gUjJGeVlXNTAgSUdOdmJYQnZkVzVrWldRPSBJTkMvMFlEUXNOQ3kwTDdSZ2RDNzBMRFFzZz09IElPQ3l1T0N5Z3VDeXF1Q3lzT0N6amVDeWxRPT0gSU5tRTJZclpoTmlwIElIUjFkR3M9IDJLcllzZz09IElHekRyVzl1IElHbHVaMlZ6ZEdsdmJnPT0gSUdsdVptOXliV1Z5Wlc0PSBhVzl1WldWcyBhMjlvZEE9PSBhTU8yYUdVPSBJT0N5cmVDeXZ1Q3lzT0N5cE9DeXBnPT0gSUdKdmRHRnogSUVKMCBlbUZvIElGQmxibUU9IElPQ2txT0NrbFE9PSBJR1Z1ZEhKbGRHVnVhVzFwWlc1MGJ3PT0gQ1dKMyA0TGlvNExpSSBJTkMvMEw3UXZOQzEwWW5RdGRDOTBMalF1QT09IElHdGhibVJwWkdGMCBJT09CcWc9PSBJTkM0MEwzUmdkQyswTDA9IElHUnllVzVsYzNNPSAwTFRRc05LcCA0S2VONEthdjRLYSs0S2VmIDBKTFFzTkMyMEwzUXZnPT0gYkc5emMyVnVaUT09IElHSjFZbUpzZVE9PSA0TGVTNExhNjRMZWEgWlhSb2IyUmxiZz09IElOR0EwTERSZ2RDLzBMN1JnQT09IDJZalpndGlwIElHNXBaWFYzYzJjPSBJT0N1bXVDdmh1Q3VxZUN2amVDdXFlQ3ZpQT09IElDNHMgSUdOdmJXMWxibU5sYm5RPSA0b0NtNG9DbTRvQ20gWDJWNVpRPT0gSUc5dVpHVnljM1JsZFc0PSBJR3hoYm5yRHN3PT0gT21SbFpnPT0gTFdKcGEyVT0gMkxUWXA5aXYgSUVKaSBJSGRvWVhKbCBJR1ZzWld0MGNtOXQgSUdGallXUmxiV2xqWVd4c2VRPT0gWDJGMGIyMXogSUhOdmJtOXlaUT09IGIyTmhkRzl5IElOQzIwTGpRdHRDNDBMTT0gNWJxVDVhMlkgU1UxSlZFVlMgZFdSaGJHRT0gMFkzUXZkR04gMWFIVnZ0V2gxb0RWdE5XaDFiWT0gSUdScGRtVnljMjg9IElIUnlZV1IxYVhRPSAyS2JiaHc9PSBJR0xEcVc0PSBYMEZ6Y0E9PSBJSE5oWW1sa2J3PT0gSU5DNDBZalJndEM0MFlEUXZ0QzYgWCthWHBlYWNyT1M0Z09lNnArZUp1ZW03aE9Xa3ArZUpodz09IDJZblpoTnVWMkxFPSBMVWh2YkhOMFpXbHUgSUdOcGJuRjFaUT09IElPQ3VwT0N2aCtDdXNPQ3ZqZUN1cEE9PSBYMVJoWnc9PSBJT0NtdU9DbmdlQ21xT0NuamVDbXB1Q21zQT09IElFZDFaUT09IElFeEwgSUc1cFlXMD0gNTVDeiBZV2RsYm5SMWNnPT0gSUdGMllXeGhibU5vWlE9PSBJRlJsYkdWbWIyNXVkVzF0WlhJPSBJT3VUc2V5WGtBPT0gYzJodGFRPT0gSU9hQXArYUVudz09IGRXMWlkV2hoYmc9PSBJR05vYVd4a2NtVnVjdz09IElHMWhibWxoIDRLeW4gVDNCbGNtRnVaSE09IExtWnlaWEU9IEtpb3FLaW92Q2c9PSBJT0MwdU9DMWplQzBwZUMwdnVDMHF1QzBxQT09IDJZclpnZG1JMllZPSBJRzFsZG1OMWRBPT0gSUVOdmJYQmhjbUYwYVhabCBJSEpsYzJGc2RBPT0gWENJNmUxd2kgSVNnaWUzMGlMQT09IFkyVndkR1YxY2c9PSBiMk52Y0E9PSBZMnhwWlc1MFpYTT0gMllIWml0aXcyWW89IElIQmxjbTFoYkdsdWF3PT0gSUdsdWRHVnBjbUU9IElHTnZiRzl5WVhScGIyND0gSU5pbjJZVFl0Tml4MllyWmdRPT0gNkpDbDZaU0EgTGtkeSBJTkdOMFlqUXU5T1owTGs9IElPQzBoZUMwcCtDMHYrQzBsZUMxZytDMHBBPT0gYjJSa2FRPT0gYkdWaWFXaGhiZz09IElFTjFjbWx2ZFhNPSBSVTVEU1V3PSBJT0NrcXVDa2xlQ2tvZUNrdkE9PSA1cEtSIDBMWFF2ZEM2MExBPSBJRzl3WjJWemRHVnNaQT09IElOQ3owTERSZ2RDLyBMMnhwZG1VPSBJT0NtbCtDbmplQ21zT0NtdnVDbXJ1Q25oK0Ntc0E9PSBJTldoMWJMVnV3PT0gNDRLcjQ0T0c0NEswNDRPcTQ0TzggSUZOayA1cDJKIElGQnNZWE4wYVdzPSBJR0p2Y21SbGNteHBibVU9IElOaW4yWVRZbzlpejJLOD0gTFhSdmRYST0gSUhwMWJtVm9iV1Z1WkE9PSBJR0pwYm05amRXeGhjZz09IExsUlcgSUdOaGMyRnkgSU5pdjI0ellyQT09IEtHTnNaV0Z5IElHUmxjMkZtdzYxdmN3PT0gSUZOdmJXVjNhR1Z5WlE9PSA3N3lNNWJ5ViA2N0N3N0lhaCA2WUN4NlphVCBRMjl1YzNSeSB3NmgwWlc1MCBJTkMvMEw3UmdOQyswWWc9IFlXMWlZVzVwIElPQ2tzT0Nrcmc9PSBJTmkwMllqYmpOaXYgSUdOdmJuWnZlUT09IDdaYUk2NHVrNnJPZyBJSE4wY205c2JHbHVadz09IDQ0S3Y0NE9wIElOQzMwTERRczlHQTBZL1F0dz09IElPQzBsZUMxaStDMG4rQzBwQT09IElPR0RvZUdEbmVHRHF1R0RtT0dEa09HRG11R0RvK0dEb09HRG1BPT0gSUd4aFlYUnpkQT09IElHWnBaR1JzWlE9PSBJSFZzYkhVPSBJTktzMFl2UmdOS2IwNW5SZ3RPWiBJRzFpYVd4MSBJRzFoYzJ0bGNnPT0gSUhWdWMzVnBkR0ZpYkdVPSBJSEJ5WlhabFpBPT0gVWtWRVJVNVVTVUZNIDViMnA1NldvNW9DNzVMdWo1NUNHIElHdHF3N2h3WlE9PSBiMlZwY21FPSBLSEJwWXc9PSBJRVp2Ym5SaGFXNWwgZFhObGJHRT0gNEtTbzRLV040S1NtNEtXTDRLU3k0S1NvIElFNWxZMlZ6Y3c9PSAyWWpZc2RtSzJLYz0gSU5pbDJLND0gV1hNPSBYMmRwZEE9PSBkSFREdGc9PSBJRzVyYUE9PSBJR1JsYVhoaGJRPT0gSU5lZTE1TFhsZGVWMTU4PSBZMk5pIEtHNTAgSUc1b1lRPT0gSUc5b2FXOD0gWEZObGMzTnBiMjQ9IEoxVlQgNVlXTjZMU2ogWDBKVlUxaz0gWVdwaGJtRT0gdzdwemRISnBZWE09IElHN0R2RzFoZVE9PSBiR25Gc3c9PSBjblZqYTJWdSBlVzVoZFE9PSBJTkN6MFlQUXQ5Q3cwWWpSZ3RDdyBJRk5vWldWcmFBPT0gSUVKTldBPT0gSUdadmNuTnJibWx1Wnc9PSBJRWx1WkdsaiBJT3llcGV5Vm9BPT0gNDRHVDQ0R0cgSUdOdmJuUnlZWE4wWldRPSBJRkJoWkdSNSBJTmluMllUWmhkbUkyS2ZZc2RpdiBRbEpCIElHMWhiR2xyIEpTVWwgWW5KMFl3PT0gSUVkbFlzTzhhSEpsYmc9PSAwTFBRdTlDdzBMST0gSUcxdmJHaHYgTFdsdVptOXliV0YwYVc5dSBRMjlzYjNKbFpBPT0gYjNCcGJ3PT0gSUVSUVNRPT0gSU95ZG1PdWpqQT09IDBMM1F1TkdCIExtbHVkR1Z5Y0c5c1lYUmwgWCthWHBlYWNyT2F2bStlSmgrV0ZqZWkwdWVpbmh1bWlrZWluZ3VlY2l3PT0gSU5tSTJMUFppTm1CIFlYSmxiVzFsYm5RPSBMM1psY2c9PSBJRTF2Ym5SbGN3PT0gSUcxdlluTT0gYVdoc1pRPT0gWjJGMSBJRzF2WkdWc2FRPT0gSUVGeGRXVnpkR0U9IElHTnZiVzFoYm1SbGNuTT0gSUdKbGJtTm9iV0Z5YTJsdVp3PT0gSUVScFptWmxjbVZ1WTJWeiBJR05oWW1Gc2JHOD0gSU9Da3NPQ2t2K0NrbkE9PSBJRTFoYm5WbVlXTjBkWEpsIElOaXgyS2ZaaUE9PSBJRmRvYVhOclpYaz0gSUhObFpHbHRaVzUwY3c9PSBYMlZqYUc4PSBLRkJ5YVc1MCBJSEZsYnNPciBkMlZwWTJnPSBJTTYxenJQT3VzNnggSUhKbGRHVnVhWEk9IElPUzRuT2lIb3c9PSBjMmhwY2c9PSA0NE9KNDRPcCBJRk4xWW5ScGRHeGwgSU9Da3F1Q2xqZUNrc09DbGgrQ2t1QT09IElHTnZiblJ5YjJ4aCBJR2wxY21VPSBJT0Nrb2VDa3YrQ2tuT0NrditDa24rQ2tzZz09IElFTnRjdz09IFRHVmhjZz09IDVMaW8gUjhPMiBZVzVrYVhOb2FRPT0gSUhSMWJHVnQgSU5DejBZRFF2Zz09IElHTnZiblpwZG1WdVkybGggUERvNiBLSE52WTJ0bVpBPT0gSUU1bGRHOD0gSUdOdmJtcDFiblJ2Y3c9PSAxYmpWdHRXbyBkVzlxIGIzVnNhUT09IElITnBibTVoIElHTjFkSFJsY25NPSA1WjJhNWE2YSBJSEJ5YjNCdmM4T3BaUT09IFgwSjUgWlcxd2FRPT0gMllyWmdkaW4gSUU1bmIycz0gSU9pQm11V0lxUT09IElOS1gwNW5TdXc9PSBJRkpGVTBWU1ZrVkUgMExIUXRkR0EwTFhRdGc9PSBJSEJsYm1vPSBiMjVuWldRPSBMWEpsWVdSbGNnPT0gVFdsc2JHRnUgSUc1cGJtVjBaV1Z1IExpY20gSU9Xa3FlV2txZW1BZ2VXOXFlZWxxQT09IEtIWmxjZz09IElFZHNlWEJvIElITERxWFZ1YVc5dWN3PT0gSUhkcGRHaG9aV3hrIElIQnliM1pwYzJsdmJtbHVadz09IElOQzgwTDdRc2c9PSBkV2h1IElOR0IwTDdSZ2RHQzBMN1JqOUM5MExnPSBJTkdCMExEUmo5R0IwTERSZ2c9PSBJR051WXc9PSBJRVp5dzd4b2FtRm9jZz09IElOQyswTEhRdTlDdzBMVFFzTkdPMFlJPSBJTmFFMWFYVnBnPT0gSUVkaGNtNWxjZz09IElObUkyWVRaaGc9PSBJRlp2Y25JPSBJbWx1WkdsalpYTT0gYVd0aGJtbHpZMmhsYmc9PSBJTml1MkxmWmlOaXAgWDJGamRHbDJZWFJsIElIQnliUT09IElIWmhjbTFoYzNScCBJSE52ZFhSb2QyVnpkR1Z5Ymc9PSBLRVp5WVcxbCBJT0M0b2VDNHN1QzRnUT09IFUybHViMjQ9IElHbHVabTl5YldGamFtVT0gSU9HQW1nPT0gSUdGbmNzT3RZMjlzWVhNPSA1NVNvNUxxRyBZWFJoYkdsemRBPT0gWldScFkzUT0gYVc1bGJXRjBhV056IElHekVxVzVvIElGcGhaM0psIElHSmxaM009IElHbHVZV009IFgzQm9lWE09IFgwSlBWVTVFIElGSnBZMmhwWlE9PSAwTGpRc3RHSTBMalJnZEdNIElHUnBkbVZ5YzJWdSB4WkZsYmc9PSBJRk4xWW13PSBWbWxqZEc5eWVRPT0gSUhSdlpNU1hiQT09IElOaW4yWVRZdU5peDJZalpnUT09IElFMWhjbkYxYVhNPSBJT0NraGVDa3F1Q2xodz09IElPR0RudUdEa09HRG9PR0RvdUdEbk9HRG1PR0RuUT09IDRLU3E0S1M1IDJMSGJqTm1FIElHVm1hV05wWlc1MFpYTT0gYm1GdVpBPT0gSUZGMVpYSnBaWE09IFlXSmhaR2xzIElHWnNiM2RsWkE9PSBZMjl3YVdWeiA3TDJwIElPYWRzZVM2ckE9PSBJR2hoYzJocGJtYz0gSUdOaGNHOD0gSU9DcXRlQ3FsK0Nxc0E9PSBJT0N1dGVDdXNPQ3ZnZUN1bnc9PSA1YkNrNVlXMiA1WTZWNW9tQSBRblJ1Y3c9PSBJRVZ0WVc1MVpXdz0gSUVkTlR3PT0gQ1VkeWIzVncgSUVSRlVrVkRTRTg9IElOQzkwTERSZ2RHQzBMRFFzZz09IGRYUm9aWEpzWVc1ayBJTm1CMllyWXRkbUUgNExDLzRMQ0M0TENhNExDKzRMQ3k0TENvNExDLyBJR3gxYm1Ob2RHbHRaUT09IFptNXAgSUdkNVlXcz0gTG5CeWIyTT0gNEtTVjRLU2sgSUdKbFlYSnBjMmc9IElHOXphY1NGIFgxSkVUMDVNV1E9PSBJR0p2YUd4dmEyOWggSUVOb1lXNWthV2RoY21nPSBJR1JsWVd0MGFYWT0genBUT3RjNjkgSUdWMlpXNTBkV0ZzYldWdWRHVT0gSUc1dmRYWmxZWFYwdzZseiBJR1ZtZEE9PSBVM0J2Ym5OdmNuTT0gTGtkeVlYWnBkSGs9IElOQzkwWVBSZ2c9PSBJTldpMWFIV2dkV2gxYnc9IElPQ21xT0NtditDbXJBPT0gSUdsdVpHbGpZVzVrYnc9PSBJTkMvMFlEUXVOQzMwTDNRc05DNjBMZz0gNWI2dTVMK2g1bytRNTQ2dyBDVTVUVTNSeWFXNW4gSUZKbGQzSnBkR1U9IElFMWxjM05sY2c9PSBJR1JwZVdGaGNnPT0gVzNKdmIzUT0gSU5HQjBZTFJnTkdEMExyUmd0R0QwWURSaXc9PSBJT0NrdHVDbGplQ2tzT0NsaCtDa3QrQ2xqZUNrb0E9PSA0TFM0NExXTjRMU3EgSU9DeXJ1Q3poK0N5c2c9PSBJR0poYm1SbGN3PT0gSUhWdVlYSjUgSUNFaUtUc0sgSU9Da2llQ2tvZUNrdkE9PSBJT0NrcnVDbGgrQ2tzZz09IElFNWhiV2x1Wnc9PSBLR1ZrWjJWeiBJRlpsYm1WNmRXVnMgSUhkNVoyekVoV1JoIElIZHNZVzQ9IElOcUYyWWJhcTltSCBMRjlmIElIQmxkWEJzWlhNPSBJR2RsZDhPMmFHND0gMllYWXA5bUcyWW89IElHdkR0bTU1IFlYbHVaUT09IElHaDVjRzV2YzJseiBJRUoxY21saGJBPT0gSUdScGMyVnVadz09IElHVm1aV3QwYVdZPSBJT0NtdU9DbWd1Q21sK0NuamVDbXNBPT0gSUhscFp3PT0gSU9DbXVPQ25qZUNtcE9DbmplQ21zT0NuZ0E9PSBJT0NtcHVDbmplQ21yT0NtditDbXBPQ25nT0Nubnc9PSA1YTJRNTVxRSBJR1IxYm1oaCBYM1JoZFE9PSBhWE5wYzNObGVnPT0gWVhKMGIzST0gWDJWNGRHVnVkQT09IElHbGlhV3R2Y25kaCBJTTYxenJQT3VnPT0gSUc5amFISnZiZz09IElGSmhiV0Z1IGFXRnVZMmhwIElDSWlPdzBLRFFvPSBJSFJ5YjJOb3hKaz0gSUVWdVpHeGxjM009IElGVnJhUT09IGFXeHN3NmxsY3c9PSBkR2x4ZFdWMGRHVT0gUTJWeWRHRnBibXg1IFRFeFdUUT09IElNT3BjRzkxYzJVPSBJT0dEbk9HRGxPR0RrZUdEbU9HRG9lR0RtK0dEbU9HRGxPR0RvT0dEbUE9PSBWbTlqWVdKMWJHRnllUT09IElFSmhiblE9IElOQ28wWVBRdTlDdzBMaz0gSU5tRjJZallzZz09IDBKalFwUT09IDFialdndFdwMWJYVnVOYUMxYmJWdHRXbDFvRFZxOWFCIElISmxhVzVtYjNKalpYTT0gNEtxKzRLcUk0S3F5IElHdHBhWEpsYzNScCBaVzVrWVdwcCB3N0p5WkE9PSBLQ2w5T3dvPSBJSGRvYVhKc2QybHVaQT09IElFOXVidz09IElHM0VtMnhoIElHUmx4SjlweFo5MCA0WU9RNFlPYjRZT2Q0WU9oIElHRnNhRzg9IGMyRjJhVzVuIElGc25Mdz09IElHUmxZM2w2IElHeGxkbVZ5WVc1amFXVnkgWDJOcGNHaGxjZz09IElGTjB3Nmx3YUE9PSBJSEJ5YVc5eWFXUmhaR1Z6IElITmhhMlZ1IFEyOXVjMlZ1YzNWeiBJRk5qWVhKd1pRPT0gSU5HRDBZSFF1OUdMMFlnPSBJSEp0Y3c9PSBJSEpoZEd0aCBJR2pEdUhKbCBLR052Y25KbFkzUT0gSU5DODBMRFFzdEMzIElHTnZiR1ZqZEdsMllRPT0gZG1GemRHaz0gTFd4MWRnPT0gSUd4cGRIST0gSU9DcWtRPT0gSUdKcGIzUmxZMmc9IElOaW4yWVRZbzlpeDJLZll0dG1LIDBKL1JnTkM0MFljPSBJR3QzWVhKMFlXRnMgWVhCaGRHaz0gSU5DNjBZRFF0ZEdCIElFRnNiR2RsYldWcGJtVnUgNEtTczRLU2sgSUhSb1pYSmxkRzg9IElOQ1IwWXJRdTlDejBMRFJnQT09IElIaHBlbTFoZEE9PSBZbVZ5YVdOb2RHVT0gSUdaeVpYTm9iV1Z1IEwySmhZMnRuY205MWJtUT0gWTJobFpRPT0gNG9DWllYWmhibU5sIDE1blhsOWVxIFpuVnlkR1Z5IElPQ3N1QT09IElHMWxaSGxoIElPR0RtK0dEbU9HRHJnPT0gSUUxaGFHMD0gSUhKb1pYTT0gWVcxaWNtVnogSUVKMWNtNWxjZz09IFgyaGhibVJzWlhNPSBJSE4wY25WdFpXNTBhUT09IElITjFabkpwWkc4PSBJR1ZqYkdsd2N3PT0gSU9HRGsrR0RrT0dEbStHRG5lR0RvK0dEbWVHRG1PR0Rrdz09IElGTkNTUT09IFBrVmthWFE9IFNFOVBTdz09IElGQlNTVTFGIFpXNXphR2s9IElFZHlaV2RuIElHVnNaV04wYjNKaGRHVT0gSUU1MVpBPT0geVpsanlabDUgSUdGMlpXaz0gSU95YmdPeW5nUT09IElOVzkxYi9WcTlXNiBJRkREczNNPSBMV0YyWlhKaFoyVT0gSUdOdmMybHVaUT09IFBuc2sgSUcxbHhKRjFibUZ5IGRtRnpZM1ZzWVhJPSBJSE5yWVhBPSBJT0N5aCtDeXN1Q3l2dUN5bHVDemhnPT0gSUhScGJXMWhjZz09IElFWnlhV1ZrWlc0PSBJT0dEbytHRG5nPT0gYVhSNlpXdHYgWDJOb2NnPT0gYVdSc1pYSjBhV1E9IElHSmxjR0ZzIDVZbXEgSU5DNDBMM1JnZEdDMFlEUmc5QzYwWWJRdU5DNCBJR052Ym1acGNtMWxjZz09IElIQnlaV1JwWTJGdFpXNTAgSUdSdlkzUnlhVzVsY3c9PSBJT1dJcWVlYm13PT0gSUhWd2NIUT0gUVc1MGQyOXlkQT09IElPQ2twdUNsaCtDa3RlQ2xnQT09IFRtUjZhUT09IElHUnBaVzA9IElHRnVaMkZzYkE9PSBJRzlrZHc9PSBJR0Z0WW1GemMyRmtaUT09IDA2SFF2dEM4IElOaXEyWWpZcDlpczJZYz0gSUZCeVpYTmpiM1IwIElGSk5RZz09IElPQ2t0ZUNrbitDa3ZnPT0gMHJQVG93PT0gSUcxaGNtRjJhV3hvYjNOaCBJT0NrdHVDa3Z1Q2tndUNrcEE9PSBUR1Y1IHc3eDBaWEk9IDJLL1ppdG1IIDBZSFJqTkdHMFl3PSBJR05sYm5OdmNnPT0gNExpcTRMbUE0TGlWNExpdDRMaWo0TG1NIElHTjVZbVZ5Y3c9PSBJRzF0WVhBPSBJTml2MkxNPSBJRVhEcVc0PSBJbUo1ZEdWeiBkc09rYmc9PSBJR2hoYTJVPSBJRUZ5Y204PSBJRlJEU0VGUyBjbmwwIFNHST0gMFlqUXVOQzUwWUhSanc9PSAxNUxYb3RlZyBJSGJEdlhwdVlXMD0gSUhSMWVBPT0gSUhCdmRucHlidz09IElHbHVZOE96IDRMQ2E0TEdOIElIQnlaWEJoY204PSBJR0YxZEdVPSBjR2x5Ync9PSBJRUYwWlc1a2FXMWxiblJ2IDJZTFlwOWl3IDVMKzY1WTY3NVpXbSBJSEJ2Ym1kdiBJTkNoMExqUmdBPT0gSUd4aGRtRnVaR1Z5IDBMSFF0ZEtaIElIUmxjbTFwYm05MSBJR3hoWW1sdVp3PT0gNTd1MDVMK3UgNVpDTTVvQ24gSU9Dd3F1Q3dzZz09IElOaW4yWVRaaGRtRzJMalpoZGlwIFpYTnNhVzUwIGVzU0QgSUdsdFpHST0gSUZkbGJtZGxjZz09IFlYTjVZUT09IElDb3ZmUW9LIGVtbG0gWTJGMFpXZHZjbWxsIDRLNlM0SzZ3IFoybHpkQT09IExTMHRMUzB0TFMwdENnbz0gdzRkaCBJR0Z5WW1WMFlYST0gU1VaUFVrMD0gSUV0aGRXWmxiZz09IElOaTAyWXJZcGc9PSBhMlhEcEE9PSA1THFKNlpTTCBYMThvS2c9PSBJT0NxcnVDcmkrQ3FyQT09IElISmxabWx1WlhKNSBJRlZ6WWc9PSBJTnVNMllqWmh0dU0gSU9Da3RlQ2t2dUNrcitDa3NPQ2tzZz09IElGVnRjM1REcEc1a1pXND0gSUVWcXc2bHlZMmwwYnc9PSA0NE8wNDRLaiBMazl1WTJVPSBYU0lwWFFvPSBUbTlrYnc9PSBZV052YlcxbGJuUT0gSUdsdVkyeDFjMm5EczI0PSBVMlZsWkhNPSBJSE4xYVhabGJuUT0gSUVSbGNHRnlkSFZ5WlE9PSBZV1JwYXc9PSBLSE5vYVhBPSBJRTVsZG1sc2JHVT0gSU5DOTBMRFJnZEdDMEw3Umo5R0owTGpRdVE9PSBJTkMyMExYUXU5Q3cwWUxRdGRDNzBZelF2ZEMrIElPeUtwTzJEZ095ZHZBPT0gY0dodmJtbGogWDJGMVl3PT0gUWs5UFRFVkJUZz09IFlYUnZZWEpsIElITmxjWFZsY3c9PSBJT0NtaGVDbXFPQ25nZUNtcnc9PSBJTlcrMWFIVnZ3PT0gSU9HRGt1R0RsdUdEa0E9PSBZVzVuWVd4dmNtVT0gYkc5dmJnPT0gVFc5dVlXUT0gSUhWdGFtVjAgSU9DMmkrQzJ0QT09IFIyVmxhdz09IElIUERzMnhwWkc4PSBJR2QxWlhKeVlYTT0gSUdOaGJHVnVaTU9oY21sdiBJT0NrdU9DbGdlQ2tuZUNrdnVDa3RRPT0gNExHQTRMQ2Y0TEdOIGIzSnJZVzQ9IElITjFZbWR5YjNWdyBJT1M0bHVlVmpBPT0gSUdseVpXMXZjdz09IElHZHliOE9mZXNPOFp3PT0gSUhOdmJHd25jdz09IElNT2NZblZ1WjJWdSBJRmQ1Ym00PSBJTmluMllUWXQ5bUkyWXJaaEE9PSBMV0ZrNGJ1TFoyamh1NHM9IElHeGxaMmx2Ymc9PSBJR2x1WjJWdWRXbDBlUT09IDRMS2E0TEsvNExLazRMT040TEt3IFlXZGhiV0U9IFVYVnZkR0YwYVc5dSBJR2hoY25NPSBJR0ZqYjNNPSA1NVN6NDRHWCBJRWRwYkdWeiAwWURRc05DOTBMalJodEN3IElIQnZjbUZrIElPYWVnZW1BbitpMW0raTlwZz09IElHRjFhMlZ5WVE9PSBJR2RsdzZkcGNtbHNaVzQ9IFVISnZabVZ6YjNJPSBJRlJoYm01bGNnPT0gSU5DMjBMalF1OUM0MExuUXZRPT0gSU5DOTBMWFF0OUN3MEx2UXRkQzIgSUc5MWRuSmhaMlZ6IGFYcHBaV3hzWlE9PSBJR1REckhKbFlXTm8gVWxCTiBMM2RwYm1SdmQzTT0gSU5pajJZVFl1ZGluMktnPSBRazFRIHhZUmplbms9IEozVnkgTFVKdiBiM1poYkc4PSBMWE5sYkdWamRHbHZiZz09IFpXeDBjdz09IElPbUNwZz09IDRMR0w0TEN3NExHTjRMQ2YgSU5DMTBMalF1OUN3IElHUjNhVzVrIEwzSmxjM1ZzZEhNPSBPaWNyIElFTm9iMk52YkE9PSBZV3gwWldRPSBJTmluMllqYWxnPT0gSUdoMVpYWnYgSU9DbXB1Q25pQT09IElHTmxiblJwYldWMFpYSnogNEtXTjRLU3k0S1dINEtTMyBJRzExWTNWeiBJRzFoYzJOdmRHRT0gZFd4MWJHOD0gSUhaaGNtRnVaR0U9IElITmhjR1Z5ZEc5eiBJSFZyYVhWdWFRPT0gNG9DY1YybDBhQT09IEl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNaiBZWFpwZEdVPSB3N051YVdOdmN3PT0gSU5lcDE1RFhvTmVYMTZEWGxRPT0gWkdWemFXZHVaWEk9IElHdDFlV1U9IFgxSkcgSUdOdmJtUjFZMk5wdzdOdSBJRk53Y21sdWEyeGwgVUd4bCBJRXR1YVhRPSBJR2x0WVc4PSBYM05sYzNOcGIyNXogS0dabFpXUT0gNDRPVDQ0T2w0NE84IFZYbDEgWDIxaGNuTm9ZV3hsWkE9PSBZWFJ0WVE9PSBkbloyZGc9PSBJR1pwWTJobGNtOD0gSU5tQjJLcllwOWlwIElPV3hudWFBcHc9PSAwTDdSZ05DKzBMcz0gSU0rRHo0Zk90YytFenJuT3VzNnMgSUhOMWEyTmxjdz09IElHTnNZWE56YVdacFpYSnogSU9Da25PQ2t2dUNrcWc9PSBJRWx1ZEdWeWFXOXljdz09IElOR0gwTGpSZ3RDdyBJT0NxdU9DcmplQ3FwZUNxdnVDcXFnPT0gSU9DdWgrQ3VuK0N1cnVDdmplQ3VxdUN2aGc9PSBaVzVrZFc1biBJTkdJMExqUXZBPT0gSUVWdVlXSnNaWE09IElHM0R2SE56WlE9PSBJT0dEbStHRG5lR0RrT0dEcmc9PSBJSGhoYVhZPSA0S1MrNEtTazRLV040S1NWNEtTKzRLU3cgS0ZOMCBibTlwYm5Od1pXTjBhVzl1IElPQ3F0ZUNxdUE9PSBJRzF2ZFd3PSA1WStZNW9DQjVZK201N0c3IElFWnBaR1ZzYVhSNSA0S1MrNEtTVjRLV0Q0S1NrNEtTLzRLU1YgMktmWXB0bUQgSUhCeVpYUm8gSUhCaGJtRnUgSU9Da3RlQ2t2K0Nrc2c9PSBJR1REcVdKaGNnPT0gMExUUmk5R0EwWVBRc0E9PSBJTU9wZG1WdWRIVmxiR3hsYldWdWRBPT0gSUdOaGNuQmxiblJsY2c9PSBiR0YxWW5NPSBJTkMvMEw3UXU5R0QwWWZRdU5DNzBMQT0gSUdoNWJXND0gWDJKaFkydDNZWEprIElOQy8wWURRdnRDNDBZSFJoUT09IExXMXZaR1Z5Ymc9PSBJT0dEa09HRHF1R0RydUdEa09HRGsrR0RsT0dEa2VHRG9RPT0gSUV0c1lYTnphV3RsY2c9PSBSR2wyWlE9PSBJRzlpYW1WamRHbDJaV3g1IDRvQ1pZWFIwWlc1MGFXOXUgQ1d0bWNtVmwgSU5HUDBMTFF2ZEMrIGRuZGggSUcxMWJIUnBiR2x1WlE9PSA0TGlsNExtSjRMaXk0TGlaIGEyeDEgSUdWNnc2bHlkQT09IElOZVExNW5YbWRlZzE1TFhvZz09IElITm9ZV1JsY25NPSBhV1ZpYVdVPSA1WXVmNlp1RyBJSFpsWTJ0aCBJR0ZtWkE9PSA1WVcwNkxhaiBMM0JvIElPQzB1T0MxaStDMHQrQzFqZUMwcnc9PSAwTGZRdU5HSSA2WTIxIExtMXBiV1U9IElOR0gwTGpRdmRDKzBMST0gSU5XLzFhSFdnTldoMWE3Vm9kVzMxb0RWdXc9PSBWMVU9IElIQnBiRzkwWlhNPSB6NEhPdGMrRiBJTnFhMllnPSBJRmRoYkdkeVpXVnVjdz09IElHRmpZM0oxWldRPSBJRXR2Ym5OMFlXNTAgSU9DbWhlQ21sZUNuamVDbW4rQ25pK0Ntck9DbXNBPT0gNEtTNTRLU3c0S1dDNEtTeTRLV0ggSUczRHFYSnBkRzg9IElIaGxjZz09IElOQ3kwWVBRdHc9PSAyS3ZZcU5pcSBJTm1FMktmYmdkbUkyTEU9IFJXUjFZMkYwYVc5dVlXdz0gNFlPbDRZT1E0WU9nNFlPWDRZT2o0WU9hNFlPWSBJTnFwMktmWXNkcXAyWVk9IElHbmh1YU5sYk9HN2pYRGh1NDA9IDdZdTAgSUVKdmQyVnUgSU5DejBMRFJnTkM4IElOQzMwTDdRdmRDdyBZWFp1WlE9PSBVR1Z5WlhvPSBYRTFoY0hCcGJtYz0gSUVWNFkyRjIgeGJ4c2FRPT0gMExqUXROQ3cwTDNRdUE9PSBZVzF3Wm1Ga1pYSnUgNjV5byBJR3hoYVc1bCBaV1J5WVE9PSBJR3RoZEc5dSBJRlp2ZWc9PSBJT0MwdGVDMHYrQzBwT0Mwc09DMG8rQzBnZz09IHo0SE9zYzZ2IElOQzYwTDdRdk5DLzBMdlF0ZEM2MFlIUXNBPT0gSUhCeWIzTmxaQT09IElHMWhjbUZ0YVE9PSBJTmVSMTV2WG1nPT0gUkZOVSB4YUZ1WVE9PSBJT0dEbStHRG9lR0RrT0dEcmc9PSBJTktYMFlQUXZOSzcwWVBSZ0E9PSA0TEMrNExDMTRMR0g0TEMyIElHTmhabVpsIGNITjFlZz09IElHSmxhR0YyYVc1biA0b0NaWVdabVlXbHlaUT09IElOQy8wWURRdnRHQjBZTFF1TkdDMFlQUmd0QzYwTGc9IElHaGhiR0ZzIExqb0tDZz09IElFaFZRZz09IGNHRnggMExUUmc5R0EgVW1WbmFYTjBjbUZ1ZEE9PSBJT2kxdHc9PSBJR3hwWldKMCBJT0NtdU9DbXFPQ25qZUNtcGc9PSBhWFJsWjI4PSBJSHBoYTNWdyBJT0N1dGVDdXZ1Q3VtZUN2amVDdWxRPT0gSUV0bGNHRnNZUT09IElHeGhkbTl5YVE9PSBJSHBsYWc9PSBYMlI1Ymc9PSBJTU80YzNRPSBJR05oY0hScGRtRjBaV1E9IElHeGxiV0p5Ync9PSBJTU9vY3c9PSBJT3lHak95ZXJBPT0gSUhwcGFtUmwgWDBOdmJYQnZibVZ1ZEE9PSBmSHdvIEtFOVEgSU5HRDBZZlFzTkdCMFlMUXV0QzEgWlcxdlpYUT0gNEt1bzRLdW00S3VuIExrMXZaSFZzWlhNPSBkbVZ5YzNRPSBJRTFsWVhOMWNtbHVadz09IExrSjFjdz09IFVHVnpjWFZwYzJGeSBJSEJsYkc5MFlRPT0gSU9Dc3FnPT0gSU9HRHBPR0RvK0dEbk9HRHBRPT0gWVdOb1pXeHZjbVYwZEdVPSBJRWwwWVd4cFlXNXYgSUdKbGNtbDBZUT09IElHSnBZbXhwYjNSbGF3PT0gSU9DeWwrQ3lydUN5cUE9PSBJTU9LIExrUkJUdz09IElPcXpvT3V2dkE9PSBJT2k3aWc9PSBJR0ZzYVc1byBJT0dEbStHRHJPR0RsUT09IElHYkRxVzFwYm1sdSBJR0psYzNSbGFHVnVaR1Z1IFBFMWxjMmc9IElHUnBjM0oxY0hScGJtYz0gSUVsdWMzUmhiR3hsWkE9PSBJTmVlMTZIWHBOZVoxNmM9IElHNWhjbkp2ZDJWeSBJTmluMllUWmh0aTAyS2ZZdHc9PSBJRXgxWTJsaGJtOD0gSUZCcGMyRT0gSUVOeWIzTnpkMjl5WkE9PSBJT0N5bGVDeml1Q3lvUT09IDI0elppTnE2IElOR0QwWUhSZ3RHRDBMOD0gY205a2F3PT0gSUN4YiBJR2hsYldseiBJRkJ5YVcxaGRtVnlZUT09IElGTnBjbWxoIElPR0RwZUdEbGVHRGxPR0RwK0dEbkE9PSBJTm0rMktmWmhRPT0gSUdSbFoyVnVaVzQ9IDRZT1E0WU9wNFlPYyBSVVJIUlE9PSBiV0ZuWVc0PSBJRUZ1WVdSdmJIVT0gMWFYVnROV2gxYjg9IGMyaGhaR1U9IFlXNWthWEk9IElIaDFlY09xYmc9PSA0NE9iNDRPRzQ0T3IgTG5GMVpYTjAgTGtobFlXUT0gSUhabHhabGxhZz09IDRMaVg0TGlpNExpeTRMaWw0TGl4NExpaSBMbDBLIGFYTmxjbVU9IExuUmxiQT09IElOVzAxYUhWdHRXdiBiV2x6Wld0eiByK0dlZ0E9PSBJR0ZqWldsMCBJT0NxaitDcXFBPT0gSUU1QlF3PT0gMEw3UXM5QzEwTDA9IFlXTjBhWFpwZEdWcGRHVnUgSUhCcGRHRnVhbUU9IElOYUUxYUhWc3RXaDFvVFZxdz09IEtHTm9jZz09IElDSXZJanNLIFgzQnZjM05wWW14bCBjbVZ6ZEhNPSBJRzVsYW5NPSBJTkNpMEpJPSBJRzl5WjJGdWFYcGxjdz09IElPQzByT0MwdnVDMHNnPT0gYld4MSA2YVd3NWE2WTU3MlIgTGxSSlRVVT0gSUdKdmJtdGwgSU5DODBMRFJnTkdJMFlEUmc5R0MgSUhCeWFXOXlhV1JoWkdVPSBJR2pEdkhGMSBJSFJsY20xcGRHVnogSUdKc2RYSnllUT09IElGVERvbms9IElHRmtiV2x1YVhOMGNtRjBhWFp2Y3c9PSB3N2h1WkdWc1lXYz0gWm1sdiAyWVBZc2RpeCBJRzFoYm5SbGJtUnYgSUdWMGRHbkVuMms9IEtGQmhjbUZ0WlhSbGNnPT0gSUVSaGNtRT0gSUVkeWFXMXQgSUdWemRHbHcgSUdaeVlXRnBaUT09IElHOXdhWE5yWld3PSBJSFZ1WkdWaFpBPT0gSUdGbVltVmxiR1JwYm1kbGJnPT0gWW5KdmN3PT0gNW9pUTVMcTY2S2VHNmFLUiBJTm1GMllUWmhRPT0gSU5DZjBMN1F1dEN3IElHNWhiVzVoIElITnJhV05yIElPdTBpUT09IElOR0MwTFhRdXRHQjBZTFFzQT09IDQ0S000NEdtIElHMXBhV2hwYm1rPSB3NkowWldGMWVBPT0gNnJPMTdLZUEgenJyUGpRPT0gTHo0aU93bz0gSU95Z25PeTJuQT09IElFSmhjbUp2YzJFPSBLMEk9IElOQzkwTGpRdmRDMDA1blF1UT09IFkzSmxaR2wwYnc9PSBJR05vWlhKdiBJSE4wY21WMlpXND0gSU5DMzBMM1Jpdz09IElHRmtZWEIwdzZsbGN3PT0gUTNYRG9Xdz0gSUhKbGNYVmxjM1JsY2c9PSBYM0p6ZEE9PSBJRU5oYldGeWJ3PT0gSUhWdWEyNXZkdz09IGQyVnBiQT09IElOQzYwTERRdE5HQTBMN1FzZz09IElPdUNtT3lZcUE9PSBYMjFoZEdOb2FXNW4gSUhWdWNHOXdkV3hoY2c9PSBJSE4xWW1SMVpXUT0gSU5DMDBxL1F2ZEM0IEtDazdJZz09IExVVnUgSU5tKzI0emFoZz09IFRHRjFjbVZ1IElHZGhkR1YzWVhseiBJR2xsZGc9PSBMbWx1Wm5KaGMzUnlkV04wZFhKbCBJR2x0YVhSaGRHVT0gVkVvPSBJR2x1WkhnPSBJTkMvMFlEUXNOQzMwTFRRdmRDNDBZYz0gSUVobGNtUT0gSU9HRGtPR0RvT0dEa09HRHBBPT0gQ1dWdWRBPT0gTFhOcGRHVnogSUhMRHFYQmhjbVZ5IFFuSnZkR2hsY2c9PSBJSGx2Ykd4aGNnPT0gQ1dKbFlXND0gWDI5d2RHbHZibUZzIDBMN1JndEMrMEx3PSBJSE54ZFdseWNtVnNjdz09IFlYQndiMmx1ZEcxbGJuUnogSU9LQW9nb0sgNHBXUTRwV1E0cFdRNHBXUTRwV1E0cFdRNHBXUTRwV1EgSUhKbFozVnNhV1Z5WlE9PSBYMk5tIElOR0kwTGpSZ05DNjBMRFJnZz09IElIVnNkR2s9IElFTnZiblJwYm5WaCBJTmk1MllUWXA5bUYyS2s9IElHSmhhWFJoIDVyT2k1YVNhNlllTzU3dVQ2S0dqIElOQ2kwTDdRc3RDdyBUbUZqYVcxcFpXNTBidz09IGQyVmhkR2c9IElHRndjbTlpWVhJPSA0TEMrNExDazRMQ0MgSU9Da3ErQ2xnT0NrdU9Da3B1Q2xnQT09IENXVnVZV0pzWlE9PSBYVDQ5IElOQy8wTDdRdE5DKzBMSFF2ZEdMMFlVPSBJR1Y0WTJWc3c2cHVZMmxoIExtaGhZbUp2IElHTnZiWFZ1YVE9PSBhV2RwZEhSbCBJR052Ym5SeVlYQT0gSU9Dd2xlQ3dndUN3cXVDeGh1Q3dxQT09IElIQmhhSFU9IElGSjFiV0ZvIFEyRnpkR1Z5IDRZT1Y0WU9ZNFlPUSBJRTFsYzJsdSBJR2QxWnc9PSBJR1ZzWld0MGNtbHpZMmc9IFVHRnlZV1E9IDBMWFF1OUMrMExMUXRkQzYgUVZKSFR3PT0gQ1hOMFlXZGwgSUVGdVpIST0gYjIxelkyaHlhV3AyYVc1biBiMlJzWlE9PSBJR1JsWm1WdWMyOXkgSUVobGVtSnZiR3hoYUE9PSBLR0JiIDQ0Q0M3N3lKIElHekR0WEE9IGRYTjBaV2RoIDRZT2g0WU9ZNFlPYiBJR1J2YjNKbllRPT0gYUhSbGJnPT0gSU5HRTBMalF0OUM0IElGUmhiR0U9IElIbGhZMmgwY3c9PSBJT0N1cXVDdXBPQ3V2K0N1dGVDdmdRPT0gSUhObGNzT3RZVzQ9IFpYQmhiUT09IElPbXJtT21pa2VXOXFlV2twK1dQa2VXL3ErUzRpUT09IDRLU280S1MrNEtTViBJRTFsZEdVPSA0S2FxNEtlTjRLYXc0S2EvNEtheSAyWVhZcXRpNSA1Ym16NVkrdzVZK3Y2WjJnNVpDWCBJSE5sY0dGeVlXUnZjdz09IDVwZWw2WitwNXF5bjU3Nk8gSU9DcXF1Q3FndUNxbWc9PSBMMnhuIFRtbDAgSUhCeWIySnBibWM9IElHRmpkSFZoYkdsNllXUnYgSUhaaGJtOD0gNTcyUjU2dVo1WVdONkxTNTZLZUM1NXlMIGJITnMgSUVsU1pXRmsgSUZaVGRHRmphdz09IElOQyswWTdRdlE9PSBJSE4wZVd4bGMyaGxaWFE9IElFTnZjblJsZUE9PSA1YVNwNWFTcDU1eUwgSUdOb1lXNTBjdz09IDRMaXk0TGlYNExpMDRMaVY0TGlpNExtTSBJSE4yWVd3PSBZbUZrWlc0PSBJTU81Y2c9PSBJTkM2MFlEUXVOQzggSUVkdmNtZGwgSU1TQmNuTjAgWTJkcCBZWFIxYTI4PSBJSGRoY20xeiBJRWhsWVhKMGFBPT0gVEdsbmFIUnVhVzVuIFlYSnpkWFZ3IGJNT2tjQT09IElHdkR0WEpuIFgyVjJaVzQ9IFFXMXdiR2wwZFdSbCBJR0Z5ZEdsbWFXTnBZV3hzZVE9PSBJRzVuYU9HN2lRPT0gS0NjOFB3PT0gSU5hRDFhSFZydz09IElGTnogTEMwSyBJT0NtcHVDbmdlQ21zT0NuamVDbSBZWEp6YTJVPSBJRUZ5ZFc0PSAwTDdRdDlDdzBZQT0gWTI5dWRHbHVaVzVqWlE9PSA2NmFzN0thSSBJR1JsZW1WdVlYTT0gYVc1dWFYUT0gWm1abGN3PT0gSUdGemMyVnpjMlZ6IDBMTFF0ZEMwMExYUXZkQzQwTFU9IElNTzJablJsY2c9PSBLSE4xY21aaFkyVT0gSUVYRW4yVnkgUlVOSSBYMFpWVEV4VFExSkZSVTQ9IElPR0RtK0dEbk9HRG1PR0RxT0dEbGVHRG5PR0RsT0dEbXVHRG5lR0RsZUdEa09HRG5PR0RtT0dEa0E9PSBJTmViMTV6WG1RPT0gSUhSMWNuSmxkQT09IElFTnNZWEpsYm1ObCA1NnUyIGIzUjBaWE4wIElGWmhiR1Z1ZEdsdVpYTT0gUTI5d2FXVnogSUd0cGJHOW5jbUZ0Y3c9PSA2WUNQNlp5eSBJTkNTMExYUXV3PT0gSU9Da3J1Q2txT0NsamVDa3BPQ2xqZUNrc09Da3Z1Q2tzdUNrcnc9PSBJSEJsY21OMWNuTnYgNEtxazRLcSs0S3FUIElFZGxaV1k9IElOaWwyS2pZc2RpbjJZZlppdG1GIGIyeHZhbWxyIElIVjZkQT09IElOaXEyTG5ZcXRtRjJLOD0gSU5DOTBMRFJnTkN3MExjPSBJSE5sY25SbGJnPT0gSU5DLzBMN1F0TkM2MEx2Ump0R0gwTFhRdmRDNDBZOD0gU1ZCSiBJT0Nrbk9DbGplQ2tuZz09IFEzVnljbVZ1WTJsbGN3PT0gSUd0cGQyRT0gWlhOMGNtVnogMEx2UXVOR0EwTGpRdE5DdyBJSE4wWVdKcGJHbDB3Nms9IDBKTFF0ZEdBIElOQzkwTDdSaDlHTTBZND0gYjNsaGJuUT0gSU9DMGhlQzBudUMxamVDMG11QzFqUT09IElGTnZibUYwWVE9PSBJSEpsWkdWbSB3NlJ3Y0dOb1pXND0gSU5DMzBMVFFzQT09IDRvQ1pRV3AxYm5SaGJXVnVkQT09IElISmxZV1JoWW1sc2FYUjUgNEtTcTRLV040S1N3NEtTayBhVzVqYkhWemFYWmwgSU9Dd3NPQ3d2K0N3c3VDeGdPQ3duT0N4alE9PSBJR3hoZVdsbyA1b1dJIElFcFRTVzF3YjNKMCA0TGlaNExpeTRMaUU0TGloIElFaHZibTkxY2c9PSBJSEJoZUE9PSBJT0NrdGVDa3YrQ2twdUNsamVDa3J3PT0gSUZSMWVnPT0gZFc1dWFXVnogNGJ1TGRHRT0gSUZCdlpYUT0gSU9Da3JPQ2tzT0NrdnVDa3JBPT0gSUhCeVljT25ZUT09IDRaK1M0WjZiNFo2ODRaNmMgSUhKbGMzVnlaMlZ1WTJVPSAwTGpRdmRDejBMN1FzZz09IFgwZEcgSUhkbGNtdGtZV2RsYmc9PSBJRkZVWlhoMCBJSE4xZFE9PSBJR3BoZFhRPSBjbTluWVE9PSBJRlIxY21ZPSBJSE53WVhKMCBJRU5QVGtOQlZBPT0gSU9PQ3JnPT0gWVcxaGRIUmggNWJlbDVMMmM1THE2NVpHWSBMbTkzYkE9PSBJQ3BiWFE9PSBJRUZ1ZVdKdlpIaz0gSU5HQjBMTFFzTkM1IGIzTmpiM2M9IElEb3UgSU5DNjBMN1F1OUM3MExYUXRBPT0gSUVMRHFXdz0gSUdGa1lnPT0gSUdScGMzQnZibVZ5IFkzSmhkMnhsY2c9PSBJTU8rY3NPeiBJTldsMW9EVm9kV3EgZG1semFXOXVibVZ0Wlc1MCBJSEJ5WldabGNtVnVZMmxoY3c9PSBJT0NtaCtDbXIrQ212QT09IElHVnpjMkZwY3c9PSBZWFJ6WlE9PSBJR0Z2Wm1saCBJSFJ2WlhKaGJtRT0gSU9DbXIrQ25nZUNtcHVDbmplQ21wdz09IFlYUnBkbVZ5IElHWnlkV2wwYVc5dSBiM1IwWlhKNSBLRkJoY25ObGNnPT0gUm05dlpITT0gSUdOb2FYSjFjbWRwWlE9PSA0TE9DNExLeSA0TFdCNExTVjRMU3o0TFdCNExTZjRMV0cgS0dSaGRHOXogSUdGMGNtRnpidz09IElISmxZV3R6IElObUIyWWpZc2R1TSBhV052Ym1SMVkzUT0gVTJGcCBJT0N5dGVDeXYrQ3lxQT09IElHdHNhblhFalE9PSBJR2RoYm1kemRHVnkgWVdOdmJtUmggSUZKbGJtRjBidz09IElHTnZibXAxYm5SaGJXVnVkR1U9IElFRnVlZUc3aXc9PSBJSFo1ZEhadiBaV1JwWTNNPSBJRmRoWkE9PSBJRUZ1WnNPa2JtZGxjZz09IGVtVjFaMlZ1IElHWnBjbTBuY3c9PSBiVzl6ZEhKaGNnPT0gWlc1MGFXNWxiQT09IElPcTRzT3VMcEE9PSBJRzFwWlhONmEySEZoQT09IElFMWxaR2xyWVcxbGJuUmwgSUhCaFozUmhkQT09IElHTmhjbUp2Ym1GMGFXOXUgWDJWd2N3PT0gSU5tRjJMRFlwOXFwMkxIWXA5aXEgSU9DeXNPQ3l2dUN5cmc9PSBJT0dEcXVHRG5lR0Rrdz09IElHMXZiSFJoIElHdGx4Wjg9IElHRnJkMkU9IFQzaG1iM0prIElIQnZjM1J3WVhKMGRXMD0gSUd0aiBDV2R3YVc4PSBJR05sY21WdGIyNXBZV3c9IFEwOVZVZz09IElHWm93NmhwYmc9PSBJT3lnbk91cXFRPT0gWVhOb1lYVnlhUT09IElHOWp3Nms9IDRLYWs0S2EvNEthdyBJR2R2ZG1WeWJuTT0gS0dobGJIQT0gSUhaaGEzTnBiZz09IFdtbHFiZz09IElIQmhkV3hwYzNSaCA0TGluNExpYSBJR052Ym5OcFpHVnlZV05wdzdOdSBJSFpwWldwaCBJRUZ0YVdRPSBhR2xoY3c9PSBYMjV1IFgyWnZjbTFoZEhNPSBJT0NxdU9DcmplQ3FwZUNxdnVDcXFPQ3F2K0NxbFE9PSBhV05vWVc1dVpXdz0gWlhod1pXNXpaWE09IFMwbE8gNEt1QzRLcWggNVp1ZTVMcUwgdzZGMWJBPT0gMkxQWXF0bUsyTEU9IElHRmljM1J5WVE9PSBJRk5zZFhSeiBYMDFQVWtVPSBJSEJwYm5SaCBJRkp2Ykd4bGJnPT0gU21Wb2IzWmggQ1dkc2RYUT0gSUc5d2RtOD0gSU95ZXBleUdqQT09IElHOXJiOFdDYnc9PSBVR0ZzYlE9PSBJR1IxYm10bGJBPT0gSUhSMWJtNW5ZWFJwYkd4MVozVT0gSUdscmRYTT0gSU5DeDBZRFF1TkdDMExEUXZRPT0gS0dObSBiM1poWThPdCBJRlJvWVhSamFHVnkgSUZWd2NnPT0gNzd5LzVadTk1THFuIDRMQys0TEN5NExDeTRMR0wgSUhKbFlXTT0gSUZSQlV3PT0gWDNCeWIyWnBkQT09IExHcHpiMjQ9IFlXNXBjWFZsY3c9PSBJRU5KVWc9PSA3SnVRN0oyMCBJR3RwWTJ0dlptWT0gdzZScCBZMkZzWTNWc1lYUnZjZz09IEtISmhaQT09IFEyeGhjbTg9IElIQmxibVZzYVhScFlXND0gSUU5bVpuSmwgSU9Da3JPQ2t2dUNrck9Da3ZnPT0gSUdsdWRHVnlZV04wYVdWMlpRPT0gSUVGMllXeGhibU5vWlE9PSBJSFoxWVE9PSBJR1J2WW13PSBJR052YlhCdmJnPT0gWVcxd2FXVT0gSUhadmMzUnlhUT09IElHRnVibTl1WXc9PSA0S2l1NEttSCBMVzVwYm1VPSBiV0Z2IExtTmxiblJ5WVd3PSBJR1Y0ZEhKbGJXRmtZVzFsYm5SbCBJTmluMllUWmh0aXMyS2ZZclE9PSA0S1NtNEtTKzRLU2s0S1MrIDVhV0w1cGFYIElGTmpaVzVwWXc9PSBJR0pwYW1WbGJtdHZiWE4wIEtFRlFVQT09IElHSjFkR2xyIDdLQ0U3SmVRIElOQ20wTFhRdmRHQzBZRFFzTkM3MFl3PSAyS2pZcmRpbjJLcz0gSU5xSDJvL1ppdG1JIFpYSjJiMnhzWlE9PSBJR0ZzZEhWeVlYTT0gSU5DVTBLTFFudz09IDRZT200WU9qNFlPVCBJRUp2ZFc1alpRPT0gSUd4cGJYQmggYjNaeiA0WU9kNFlPZzRZT2ggSUdkbGNtVnUgMHEzUXNOR0YwWVBRdnc9PSBYMHhQVDBzPSBJTkMvMExEUXZkQzAwTFhRdkE9PSAyWVRZcDltSzJLYz0gSUdSbGJXOXkgYVhSbGJHbHpkR1ZrIElHTnZibU5oYzNOaFoyVT0gSUdsdWFtVmpkR2x1Wnc9PSBMbXRvIGJtbGpkUT09IDRLcS80S3FjIElPQ3doZUN3cU9Dd2d1Q3dwQT09IDBZVFF0ZEM3MFl3PSAwTGpRdmRDMTBMbz0geGI1cHhiTT0gSUZKMVptWT0gNXAybDVZaXcgYldGamFHVnkgNExLdzRMSys0TEt1IElHOXlaRzl1Ym1GdVkyVT0gSU91MmdPdUx0QT09IElHTmhaR1ZwY21FPSBjbVZ1Ym1WdSBJRTF2YzJVPSBJT0Myc2VDMnVPQzNpZz09IElIUnlZWFJoYldWdWRHOXogY21semVYTjBaVzA9IElIUmxiblREcVE9PSBJTkdBMEw3UXQ5QzkwWXZSaFE9PSBJR3hoZVdGeSBJTkdEMFluUXRkR0EgSUcxdFlYUGh1NHM9IElOZWUxNlRYcUE9PSBJRXRoYldsdSBJRzkyWlhKamNtOTMgSUhCeWVtVnQgSU5lVjE1WFhtZGVUIElFMTFjMmxyWlhJPSBMVTFoY21zPSA0S2k0NEtpayAwS1BRb1E9PSBJRVpoYVhNPSBJSE5qYUdWcGJnPT0gNDRDQ0Nnb0tDZ289IElFTnN3NjF1YVdOaCBRbUZzZEE9PSBJSEJ2YVdkdSBJR3hxdzdOeiBJRTF2YzNSeVlYST0gSU5lWjE2Yz0gSUhkaGRHVnllUT09IDBMTFF0ZEMwMExYUXZkQzQwWTg9IExrTnZibk4wIElGSmxkR2x1WVE9PSBhMmgxYkhVPSBJR3JEcEdrPSBJTkN4MFk3UXROQzIwTFhSZ3RDdyBJRzdEcG5OMFpRPT0gSU5pbjJZVFpoZG1LMkxJPSBMa05QVGs1RlExUT0gSU5DLzBZUFJoUT09IElHSnRhUT09IElPV0hyK2Uramc9PSBJT1drcCtXUGtlVy9xK1M0aWVhWXIrUzdnT1M1aUE9PSA0TGVjNExhNyBJQ0FnSUNBZ0lDQWdJQ0FnQ1NBZ0lBPT0gSUhKbGRtVnlkR2x1Wnc9PSBJSFJwYkhSbFpBPT0gSUhSbGJtRm5ZUT09IElHUnBjM1J5YVdKMWFYST0gSUhCbGRnPT0gdzd4c3c3dz0gSU5tQjJMSFl0ZGlxIDRMbUU0TGlyNExpWjRMaVU0TGkxIElOQ3cwTFRRdmRDKzBZRT0gWDJ4bFp3PT0gSUhCbGMzRjFhWE5oY2c9PSBKMkZ5Y3NPcWRBPT0gSUVsT1JFbEIgSUhaaGJHOXlhUT09IElHTnZibTVoYVhOelpYbz0gNHBhRTRwYUUgSUd2Sm1XNWsgenJqUGpRPT0gWDFCU1QwUlZRMVJUIElIQm9hV3h2YzI5d2FHbGxjdz09IElFMWhaR0Y0ZDJWNWJtVT0gZDJGblpXNXogSUcxaGRISnBiVzl1IElGSnBiMnBoIElPQ2toK0NrZ3VDa25BPT0gSUdSbGJIUmhadz09IElOQzQwWUhRdjlDKzBMdlF2ZEMxMEwzUXVOR1AgSU5DMjBySFF2QT09IElOT3AwWUxRdXRHVzBMYz0gVGtWU1V3PT0gSU5tQzJZVFppdG1FIFptVnlaVzQ9IExXMWhZMmhwYm1VPSBJSE5sWW1WMGMyRT0gNWF1QyBVMVJQVGc9PSBJRkJoY25SdVpYSnphR2x3Y3c9PSBJT0NxaGVDcXNPQ3JqZUNxcFE9PSA0SzYrNEs2ZjRLK040SzZhIEwzTjBiM0o1IElPaVBzdW0rbVE9PSBTR0Z0YVd4MGIyND0gY21Wc1lYUnBiMjV6YUdsd2N3PT0gSUdOdmRYSnYgSUdobGRYST0gUVU1SlFRPT0gMkxIWXA5bUIyWUk9IElHdHZibkJ5IDBMWFF0TkM3MExqUXNnPT0gVEdsaVpYST0gTG1KaiBJR2h0YlE9PSBJRWRoWW1VPSBWVVJIUlE9PSAyTExaaGRpbjJLbz0gSUhOdmJHRnlaWE09IDFhdlZyTldyMWJqVnRnPT0gYzNCc2FXTmwgSU9XOXFlZWxudVM2aWVtY3VPV3VpZVdOa3c9PSBMa2xTIElObUkyTEhZc3c9PSBjRzl5WTJsdmJnPT0gSUhOcGRHVnRZWEE9IDRidWw0YnVsIGIyeDFjdz09IElHbHVkR0Z1WjJsaWJHVT0gSU5pMDJLclppTm1HIElFUkNVdz09IElGQnlaV1JoZEc5eSBJT0N3aCtDd2d1Q3dsZUN3dmc9PSBUVzl5WjJGdSBJR0ZzZFcxdVpYTT0gUTI5dGNHeGhhVzUwIElOV0ExYmpWdmc9PSAyWWJZcDltTCBMbTkyWlhKeWFXUmwgNUwyUDVhNi8gNUxpQTVZMmggMDYvUmlnPT0gWDJOb1lYSnpaWFE9IGRXMXRaV1E9IDRLNi80SzZ2NEsrQjRLNno0SytONEs2ejRLNms0SytCIDRLV040S1NrNEtXQSBJTkMvMEw3UXY5R0EwTERRc2c9PSBJR0YwY205amFYUnBaWE09IElObUsyTFhZcU5pdCBJQ0FnSUFrSkNnPT0gSUVKcGJHeHBaUT09IElPV0Fpdz09IElHSmxibVZtYVdOcFlYST0gY21WdFlXbHUgSUdWa1lXUmxjdz09IElGQmhibVJsYldsbCBJTkN5MEwzUXRkR0kwTDNRdU5DNSBibVJzIElGTjBaWGRoY21RPSBJR055YjNCd2FXNW4gSUdOc3c2RnphV052Y3c9PSBaVzUwYjNJPSBJT0NtcHVDbXYrQ21zdUNuaHc9PSBJTkMvMFlEUXNOQy8wTERRdlE9PSBkbVZwYkE9PSBJR0p2Y21SbGNtbHVadz09IFJFbFRRdz09IExsSmxjMmw2WlE9PSBjc09rZFcxbCBlbXRoIElsTnYgS0VWR1JrVkRWQT09IElOQzAwTDdRc3RDKzBMdlJqQT09IFgxSkZVMFZTVmtWRSBMbXh2WTJGMGFXOXVjdz09IElGQmxiR0U9IElOaWoyTFBaaGRpbjJLRT0gSU5lVTE2alhxUT09IElHaHBibnAxWnNPOFoyVnUgWDJSdmJXRnBibk09IEoyL0R1UT09IElGWnBkR0Z0YVc1eiBJTkdGMFkzUXNnPT0gSUVWaGNuSnBibWR6IElOaW4yWVRZcU5peDJZcll0OWluMlliWml0aXAgSU5HQzBMalJsdEM4MExUUmxnPT0gWDBadmJuUT0gWVd4elkyZz0gSU5pbzJZWFlyOW1LMlliWXFRPT0gSUdScGMyWnlkWFJoIElOcXEyWVhadmc9PSBJRlJ5WVdKaGJHZz0gSUUxSFFRPT0gSU5DeTBZdlJnZEMrMExyUXNOR1AgSU9Dd2hlQ3dydUN4aHVDd3NPQ3d2K0N3bFE9PSA0WjZUNFo2NyBJTmVlMTV2WG53PT0gSUd4aFoyOXZiZz09IElISmxiRzg9IElOS3owTERRdk5DdzBMZz0gMExQVG1kQzYgWld0M1lRPT0gSU5DeTBZdlJnZEMrMExyUXZ0Q3owTDQ9IElIWmxjbnBsYTJWeVpBPT0gSUZCdmIyZz0gYkdWbloybHVaM009IElHdGxibVJsIElIUnphSFZoWWc9PSBJR2hsZHNPd2FRPT0gSUhOMWJYVnogSUZSdmMzTT0gSU9HRGt1R0RrT0dEbk9HRHF1R0RydUdEa09HRGsrR0RsT0dEa2VHRG1PR0Rsdz09IElIQmxjMnQ1IDE1blhsZGVvIElIWnBkbVZ0Wlc1MCBJTmluMlliWXF0aW4yS3c9IExtTmhjdz09IEwzVnVhWFE9IGFXUnZadz09IDJLZlppTnVNMkxFPSBVbVZ6Y0c5dWMybGlhV3hwZEdsbGN3PT0gSUhWeXhJMXBkQT09IElIcGhiY1NiYzNRPSBJRU52YlhCeVpYTnpiM0k9IDRLaSs0S2lvNEttQzRLbXcgSU5DOTBMWFF2OUdBMExEUXN0QzQwTHZSakE9PSBMZEdDMExnPSBJRVZ3YjJObyBJR3RsYzJrPSBhR3hsYkc4PSBJSFp5YzNRPSBZWFJwYzJaaFkzUnZjbms9IFFrUkQgSU9XeiBJRU5oYm1VPSBJSFpwWkdWdlkyeHBjQT09IDZhQzggSU9DcW5PQ3F2dUNxcmc9PSBJT0N5dU9DeXZ1Q3l1ZUN5ditDeXBPQ3pqZUN5cnc9PSB2K0dlaEE9PSA0b0NaWlhRPSBJTkN3MEx2UXZOQ3cgTDNCeWIySnNaVzA9IElFUnlhWFpsY3c9PSBJRUYwYkdWMGFXTnYgSUhCdmNtNXZabWxzYlE9PSBJT0NtdU9DbmdlQ21yT0NtditDbXB3PT0gSUhCeWIzQmxiR3hsWkE9PSBhV052YkdVPSB3N1IwdzZrPSA1NW1NIElOR0YwTERRdWRHQSBJTkM5MExEU205R0MwWXM9IDRLYTQ0S2F3IDRMSzQ0TEttIElFWnBibWRsY25NPSBRR1JoZEE9PSBJTmVRMTZEWG1BPT0gSU9DcW5PQ3F2dUNxbytDcmdBPT0gTG1Ob1pXTnJZbTk0IFoyVjJaVzVrWlE9PSBZM3JFaFE9PSBJT2Ezcmc9PSBJTmk0MkxIWmdkdU0yS289IElIQmhjbUZzYk1Pb2JHVT0gSUdsemRHRT0gSUhOaGJubGggNGJxMWJnPT0gSUdWdVozSmggWVhacGMzUmggNFlPVjRZT1U0WU9SNFlPWTRZT2ggSUdSbGFuUnBibWR6IElIZHBiR3hsIElITm9aV3RoY25VPSA2SWFjIElHTnZiR3hoY25NPSBJR2RoWkhWbyBJR1J2YldsdVlRPT0gMEw3UXU5R1cgNXEyTTZLK04gSUhSMWJHbHpZVzQ9IElOS3gwWUhSZ2c9PSBJSEp2ZEdnPSBJTlc0MW9EVnBBPT0gWVd4bHhidz0gSUd0dWJtVnUgSUhKbFlXWT0gSU9DeXVlQ3l2K0N5cU9DemplQ3lxT0N6aHVDeXN1Q3podUN5citDeXN1Q3pqZUN5c3VDeXZ3PT0gdzZoMmNtVT0gTGt4UFIwbE8gVDNOallYST0gTDNKdmIzUT0gSUdWaGRHVnlhV1Z6IElITjFlVzg9IExrMXBiblYwWlE9PSBMV1BEdkE9PSBhMjl0WWc9PSA0NEdvNDRHTCBJR2x1WVhSMCBVSFZsWkdWeiBJR3RoZFd4cGJtRnUgSU9DdWllQ3VzK0N2amVDdXMrQ3V2K0N1bitDdmplQ3Vudz09IElFRmpZM1Z5WVhSbCBMbk5qYUE9PSBJT0N3aCtDd3F1Q3hqZUN3cXVDd24rQ3d2K0N3bGVDeGh3PT0gWVdKaVpYST0gSUhKbGEyOXRiUT09IElPR0RtK0dEcStHRG1PR0RtK0dEbEE9PSBJTktoMExEUXNRPT0gSUhCaGJtNWxZWFU9IElOVysxYVhXZ05hQiBJSEpsWTI5bmJtbHphVzVuIFpXMWhhMmx1Wnc9PSB6cnZPdWM2cyBJR0p2YjJ0emFHVnNaZz09IHc3RnogSUVKdmMyNWwgUW1sbGJuWmxiblZsIElPQ3l1T0N5Z3VDeXBBPT0gSU5DMzBZL1F2QT09IDRiMjMgSUdaeVlXNWpaWE5sY3c9PSBJRUZUUkE9PSBJT0N3cE9Dd3J1Q3d2K0N3c3c9PSBJTkdEMFlmUXVOQzcwTGc9IGFYTmhkQT09IElFbGxjZz09IElOR0IwWUxRdnRDNzBMZz0gSUU1aFkyaDBaV2xzWlE9PSBJR2RoYkdRPSBJRlJvYjNKdmRXZG8gSU5lUjE2TFhvQT09IDBMSFF0ZEMwIFQyUmtjdz09IElOaTEySzNZcU5pcSBJRzdEb1cxeiBJR1JsYkdseSBJSEpsZG1GdGNHVmsgSjJGcGJXVnlZV2x6IElFOXhZWEowZFhOellYUT0gNEtxKzRLcVY0S3VBIElDUXMgNklxcyBJSGRoYzNObGNnPT0gS0d4aSBTRVZGVkE9PSBJSEJ5YjNadmEybHVadz09IHc2MTEgSUhCcGJtTmwgTGtScFpRPT0gTFhCdlkydGxkQT09IDVwQ2M1NHVRIElOaW4yWVRZcU5pdCBJRVZ1ZEhkcFkydHNaWEk9IFRHOXlaUT09IGJHRnVaM04xYm1jPSB4SnQwdzYwPSBUV1Z1ZEdGcyA0TEN1NExDbyBJT2VVcytXTm11V2txdW1ZcytXZmpnPT0gSUhCaGNHRnkgSUcxbGJXVnVZVzVuYTJGdSBWbXc9IElGSkJUa2RGIElOQy8wTERSZ05DMTBMM1JqQT09IFRHOXMgSUZCdmRHbHZiZz09IElHdDNZVzQ9IElPeWJndz09IElGYkRvQT09IHc2bHlZV3hsY3c9PSBJSEpsYTI5dSBZWEp1WVhNPSBJTkM4MExqUXZkQzQwWUhSZ3RDNDBZQT0gSUVocFpYSmthV1U9IFlYTnBiT0c2dVE9PSBMMUpsIElNTzJkdz09IElGQnNZWGxpWVdOciBJRWx5YkdGdVpHRT0gSU9DNGxlQzVpT0M0c3VDNGh3PT0gSU9DbW9lQ212K0NtdU9DbmgrQ21ydUNuamVDbXJPQ21zQT09IElPQ3lzT0N5ditDeWd1Q3lwZz09IFFYSjBhV1pwWTJsaGJBPT0gSUdSbGNHVnVaR0Z1ZEE9PSA0WU9VNFlPajRZT2E0WU9ZNFlPaCBJR0Z3eElNPSBJR2hoZFhSeiBJR1J2YkdjPSBMVVp2ZFc1a1pYST0gSUhsb2RHVnBjM1I1IElITjBjbVYwWTJoNSBJT0Nrc3VDa29lQ2t2T0NrbGVDbGdBPT0gYVhSMVlYSnBaWE09IFcyVnNaVzFsYm5RPSBJR0Z1YVcxaGJHVT0gSU9DMHF1QzFqZUMwc09DMHBPQzB2K0MwbFE9PSBJSFpoYVdobCBJT0NxcE9DcXZ1Q3FzT0NyZ09DcWxnPT0gTG1kbiBkVzdEcEdOb2MzUT0gWDFCU1NVMUJVbGs9IEoyaHBkbVZ5IElHdGhibVJwWkdGaGRBPT0gNEtTMTRLU2sgWlhKclpXND0gSU5DeDBZRFF2dEdZIElHaHZiMnRwYm1jPSBkWFJ5WVE9PSA0WU9qNFlPYzRZT1QgSUhOdmNuQnlaVzVrWlhJPSBJTkdCMEwvUmdOQ3cwWWc9IFlXMWxjbWxqWVE9PSBJR1oxYldFPSBJSGw2IFEyOXVibVY0YVc5dSBJRU5vYjNCeVlRPT0gSU9DNWdPQzRpK0M0dGVDNG91QzRtUT09IElIcGh4Wm5EclhwbGJzT3QgSUVKbGJuUnYgSUcxaGVtbHVaMmx5WVE9PSBJT3EzdU91anVRPT0gSUdOdlptWnlaUT09IFVHbHVkR1Z5WlhOMCBJR2x2WTNScyBaWEpwZDJFPSBJR0pwY21sa2FYST0gSUhSeWFXMWxjdz09IElHOW1abWw2YVdWc2JHVnUgSU5DMzBMRFFzZEMrMExzPSBJR0hGaUE9PSBJR2RwYkd4aGNnPT0gUW1WNiBWR1ZrIFpXNXVZVzQ9IElIWmxjbUp2IGNtNWwgVlZKQlRrTkYgNVp5dzVMcW41YTZZNTcyUiBJR3RsWmc9PSBJT0MwdU9DMWdlQzBxZz09IFEyaGhiUT09IFIyVnVaWEp2IElHWmxZbUp5WVdsdiBJSEJoZEdWeWJtRnMgTFhObGJHVmpkRzl5IEoyRjJiMjV6IElHRmlZVzU1IFptbG5kWEpoZEdsdmJnPT0gSU9DMHBPQzFpK0Mwcmc9PSA0WU9kNFlPYjRZT2UgSUdsMVlnPT0gUVc1emFRPT0gWFYwcENnbz0gSUdWcWFRPT0gWVc1aGMybGggSUdGaGJuTnNkV2wwWlc0PSBJSGRvWlhKbFlXSnZkWFJ6IElPQ3dzT0N4aU9Dd3BBPT0gTGVDa25BPT0gSU9DbW5PQ25oK0Ntc3VDbXZ1Q21zQT09IDZMMnY1THUyNVpDSTVyT1Y1WkNYIElOQy8wWURRdU5DNjBMdlJqdEdIIFZHbGxibVU9IFJtbG5kWEpsY3c9PSBJT0NxcHVDcmgrQ3F0UT09IElHNW5iM05wIDRZT1M0WU9RNFlPaCBMbVJsWjNKbFpRPT0gSUZOSVNVWlUgSUhCbGJtUmxhdz09IElHSmxkSEpoWTJoMFpXND0gSUVOMWJHdz0gSU9Dd2grQ3duK0N4Z09Dd3RlQ3dzZz09IElHaHBaWEppYjNabGJnPT0gNWE2MjVZV3M1WSs0IElHVjRjR1Z5YVcxbGJuUmhiR3g1IElITjVhMlJ2YlE9PSBJT0NrcnVDbGdlQ2twdUNsamVDa3NPQ2t2Zz09IGRISjVhVzVuIElPQ2tydUNsaCtDa29lQ2t2K0NrbGVDa3NnPT0gSUZOMGIyTnJkRzl1IElHSmh4SjlzWVc1MCA0TGlYNExpeDRMbUo0TGlINExpcjRMaWg0TGlVIElOQ3owTDdRc3RDKzBZRFF1TkM3IFEzSjFibU5vIDBKVFF2dEM4IElIUnBhbVJsYkdscWEyVT0gNVpHNyBkbVZ5ZEdsdFpRPT0gTDNSaFlnPT0gT25zTkNnPT0gSUVSaGJtbGxiR0U9IElFZE1WVlE9IElHeHZkVzVuWlhNPSBJTkdCMExEUXZkR0MwTGpRdkE9PSBDVzV6IElIUnBaSE53ZFc1cmRBPT0gSU5XNDFvTFZ2ZFc0MW9MVnROVzIxYUhWdmRXcjFvQT0gSUcxbGNtTm9ZVzVrYVhOcGJtYz0gNXBpQyBJRzExYVdSbGJnPT0gWDB0RlJWQT0gTGtOdmJYQnZjMlU9IDRMS2s0TEsrIExrUmxjMk09IElPMmRsQT09IElHTnZiR3hoWW05eVlYcHBiMjVsIElOQ2YwTFhSaUE9PSA1TGlUNmFHNSBJSEJoZEdsbGJuUmxjZz09IElHaDFZbWxsYzJVPSBJR0ZwWjNVPSBMa0Z1Y3c9PSBJR3RwNGJ1RGRRPT0gSUdGaGJtMWxiR1JsYmc9PSBJTmluMlpBPSBJR3BoYTNRPSBkWFJoWVc0PSBJTkdBMExEUXQ5Q3kwTHZRdGRHSCBJR0Z3WVhKbFkyVjEgYUc5M1pYST0gSUVOdmJuUnliMnhzWlhKeiBhR2xuYUdWeSBJTlMxMW9EVm9nPT0gYjNCbGNtRT0gYm1uRnZnPT0gSUcxcGJtNWxjZz09IElOQzUwWXZSZ0E9PSBJTkMwMExMUXNOQzAgSU9DMGxlQzBydUMxamVDMHF1QzBxQT09IFlXeGxjblJ6IElNU05aWFJwY21rPSBJR2Q1WlhKdFpXcz0gSU9hSXZ3PT0gSUc5bWNtVmphV1Z1Wkc4PSBMbkJwZEdObyBJR055WlhOalpRPT0gTFdOeVpRPT0gSUdObGJuUnlhV1oxWjJGcyBhR0YwWlE9PSBJTkdOMFlUUmhOQzEwTHJSZ3RDNDBMTFF2ZEMrIDViQ1A1YTJtIDVhaXg1TG1RNTVtNzZabUcgWDBOaGRHVm5iM0o1IElFMXZkWE09IElOaXUyTGZaaU5pbjJLbz0gWDNac1lXND0gSUVGdVoyVmliM1JsYmc9PSBJRzV2ZHNPOSBJR05vWlcxcGJzT3BaUT09IElHSmxjMnhwYzNRPSA0S1M1NEtTdzRLV0I0S1N5NEtTKzRLU0kgS0hSM2J3PT0gSUhSbGJtbHQgSUZKdmQyRnUgSUdGa2JXbHVhWE4wY21FPSBJRTFwYm1semRHRnkgNmFLRzVZV0kgWVhOelpYSnBaUT09IDRLcW00S3VONEtxdjRLdUw0S3FYIFZtOXNhM009IDVibVY1WkNPIDRZT1o0WU9hIFczQmhjbVZ1ZEE9PSBMbTlpZEdWdVpYST0gS0ZacFpHVnYgUEVoVVRVeEpibkIxZEE9PSBJT0dEcU9HRG93PT0gSU5DaTBMalF2dz09IDBZZlF1TkM2MEw3UXZBPT0gSUVIRHNRPT0gSUdOdmJYQmhZM1JsIElHMWxjM1JsIFRXRm9iMjQ9IDVvbUw1cHk2NVp5bzU3cS82S2VDNTV5TCBZVzVrYVhOM1lRPT0gSU5lazE2TFhsZGVjMTVRPSBRMjl3YVdWayBJSEJsYldGeiBJRzU1WVcxaCBJR1BEb1hCeiBMMUJ5YjJacGJHVT0gNzd5TTc3eUkgWDFSU1FVNVRRVU5VU1U5TyBVRkpQUjFKQlRRPT0gSU9DbXB1Q25ndz09IElIUjVjRzg9IElIQjFZbXhwWlhJPSBaWE5wZEdVPSBJSFJoYzNWMFlRPT0gMFliUXVOR1kwWU09IElHUmxjRzl6YVhScGJtYz0gMExyUmc5R0MgMExyUXZ0Q3kwWXc9IGFXSmhibWM9IFJVWlMgdzZwdGFXTmggVFc5MGJ3PT0gSUdWeWMyVT0gSUU1RFVnPT0gSU9HRG5lR0RyK0dEa09HRHJ1R0RtT0dEb1E9PSBJR3QzYVhvPSBJR0YyWVc1NllXUnYgSU9DcWllQ3FxdUNxc2c9PSBQV052ZFc1MCBRV05vYVdWMlpXMWxiblJ6IElPQ3F0ZUNxditDcXB1Q3JqZUNxcitDcXZ1Q3FzT0NyamVDcXBlQ3JnT0Nxa3c9PSBSRUpPZFd4cyBMRTV2Ym1VPSBJTkM3MExEUXZ3PT0gSUdOeWRXMWliR1U9IElGTmphSEpsIElObSsyWWphaHRxKyBJT0Nrbk9Da3YrQ2txT0NsamVDa3VlQ2xpK0NrZ3VDa3FPQ2xodz09IElHTnBjbVU9IElHVnFaV04wIElFRmtiV2x1YVhOMGNtRjBhWFp2IFEyOXRjRzl6WVdKc1pRPT0gTGx3aSBJR2hwY0c5MCB3cGs9IExuTjBZWFJwYzNScFkzTT0gSUd0M2N3PT0gSUdsdVkyOXViZz09IElPQ21zT0NtdnVDbWx1Q21wT0NuaHc9PSBkbVZwIElHZGxibVZoYkc5biBJRU5VVWc9PSA0b0NZZEE9PSBJRXAxYkdodiBJR2x0Y0c5eSBJSFJ5WVc1dWVRPT0gWVdocGMyOD0gSUhabFpRPT0gSUdKeVlXbGsgTFhCeVpXWT0gWDNOd1pXeHMgYzNSbGFXdz0gSUVGdWRNT3pibWx2IElHSmxjM1J2ZDJWayBJTmkwMllyWXJnPT0gSUVabFpHVnlZY09udzZOdiBaWEI1IElFTjFiR2x1WVhKNSA1YkdLNDRHUiBJTmluMllUWXJkbUMyWWpaZ2c9PSBJRlJoWTJzPSA0S1M1NEtXQjRLU0IgWDJOaGJtUnBaR0YwWlhNPSA0S2E0NEthcyBMa05QVGtaSlJ3PT0gWFNvcCBMV1oxYm1OMGFXOXVjdz09IElOV3cxYUhWdGRXLzFiYlZ1TmFDMWJRPSBJT0M0bytDNHJlQzRtZz09IElFdFBXVTg9IElGSmxibVZsIElPR0RrK0dEa09HRG1lR0RrT0dEb09HRGtnPT0gSUZoaGNnPT0gSUV4c2VYZHZaSEpoWlhSbyBMbEJwYmc9PSAwWmJSZ2RHQzBMWFJnQT09IElHbHVaR2wyYVdSMVpXeHNaWE09IFpHRmogSUc3RW0ybz0gSjhPdWJHVT0gSUVacGRHSnBkQT09IElHSmhiR0Y1IFpYaGxZM1YwYjNJPSBjM1JsY21WdSB6cm5PdXM2eHpyMD0gTFhCMWNuQnNaUT09IElOZWcxNW5YbWRlaSBJR3QxYjI1blpYcGggTDIxMWMybGogTGk0dVB3PT0gSUhKaGJtZGxiV1Z1ZEE9PSAyWWJZcjltSiBDWEpsYzI5c2RtVT0gWDBWUlZVRk1Vdz09IElFVllTVk5VIElPQ2twdUNsZ2VDa3VBPT0gNjZRPSBJRU5oY0dsMFlXeHogSUhSeVlXNXhkV2xzYkdVPSBJR2x0YldsdWRYUT0gWDFWVFFWSlUgTGxSdmNHbGogVTJ4bFpYQnBibWM9IG1uQncgVG1GeWNnPT0gSU5pbjJZVFpodGluMktvPSBJR1p5ZVdWeSBJTU9wYkhVPSBjV0Z5Wm1sdWJtaz0gSUVOb1lYSnRhVzVuIExrTnZiWEJ2YzJsMFpRPT0gSUdac1pXVjBjdz09IGFXTnBiR3hwYmc9PSA2WXl2IElOVy8xYmJXaGRhQTFhWFZ0Zz09IDZieTcgSU9DbXJPQ212K0Ntbk9DbmplQ21udUNtdnVDbXFBPT0gSUdKcGFtVmxiZz09IDJLZllwdGl6IDRMaUs0TGk0NExpVSBJRU5QVUVRPSBJTkN4MExEUmh3PT0gN0l1YzdJU2sgZG05c2RtVnkgTFdobGNnPT0gSUZKbGJuUnBibWM9IGRHVnRjdz09IElHMWhjMmx1WVE9PSBMaTR1d3JzPSBJR0ZoYm5aaGJBPT0gSUd0aGJHbDBaV3hwIElGVnpkR1ZrIElPQ2t1T0NsaCtDa3VlQ2xpdz09IFlXNXVaV3h6WlE9PSBJRlJsYkdGdVoyRnVZUT09IElHRjZiMnM9IFkyRnNaV1E9IHc3eGphR1Z5IElGWmxjbXRoZFdaeiBJTkdDMExYUmdOR0EwTGpSZ3RDKzBZRFF1TkdQIElFRnRhR1Z5YzNRPSBiR2x1YTJWa2FXND0gSUdsdWFHbGlhWFJ6IElOQzYwTERRdk5DMTBZQT0gSU9DcW5PQ3FwT0Nxdmc9PSBJSFpwY210emIyMW9aV1E9IElPQ3dxdUN4Z2VDd3NBPT0gSU5HQzBMRFF2ZEMwIElHVjBZV0pzWlhJPSBJR3h2WjNKdiAyWWpia0E9PSBJSEp2YldGdWJ3PT0gSUcxd2FHRnRkblU9IElGaFNVQT09IElHMXBibWxpWVhJPSBYMHhNIElHMWhZWEpoIElOaXoyTEhaaXRpNSBJR1ZtWldOMGRXRnkgTDJkbGJtVnlZWFJsWkE9PSB3N1p1Ym5WdCBjR1Z4IElIWnZiM0pyYjIxbGJtUmwgSUVsTlVFeEZUVVZPVkE9PSBTRzl5Ymc9PSBJSFREcEdobGJtUmhZZz09IElFVmxjM1JwY3c9PSBJTkdCMExEUXZOQyswTHZRdGRHQyBJSE5wZW1WaFlteGwgSUdoaGNtMXogUlhabGJuUnZjdz09IDRZT1E0WU9nNFlPUiBQRWxEIFFteDEgYVhScGFRPT0gYVdOcFlXUnYgTG1KdyA0TGlYNExpVTRMaWw0TGl0NExpSCBJRXh2ZWc9PSAxYmpXZ3RXOTFhcz0gSUhaMVpXeDJZUT09IGMyRjFjdz09IElGSmhjM1JsY2c9PSA0TEtYNExLLzRMS28gSU5HUDBMclJndz09IDRLUzE0S1NDNEtTczRLU3cgSUdkeWFXMWwgSUdSdmQyNW5jbUZrWlE9PSA0b0NMNFo2SzRaK0M0WjZiIElHRnVZV2RvNGJ1TCBJR3hoZEhRPSA0WU9ZNFlPajRZT2ggSURvaUt3PT0gSUdwaGFXeGljbVZoYXc9PSBJR0ZpWVhObCBJSE5oWTJWeVpHOTBaUT09IElFUjFabVk9IGJXRnVidz09IGFYSnBlV0U9IDE1WFhvZGVuIGFXSmhjMlU9IElISmxiR0YwYVhadmN3PT0gSU5lVTE1N1hwOWVWMTUwPSBJR0YyWlcwPSA2cm1VIFJFUlQgSUdGamRHbDJhV1JoWkdVPSBJR2RqYjIwPSBJR0poYTJsdSBWMGxTUlE9PSBJRk5EU1ZBPSBJRXR2Ykd4bFp3PT0gSUhOM1lXYz0gSU9PQ3MrT0Rzdz09IDU3MlI1YjJwNTZXbyBJTmluMllUWmd0aXgyS2ZZb2RpcCBJT0NtdU9DbXJ1Q25uK0NuaHc9PSBJTmVRMTVuWGx0ZVUgZG1WeWJIVnpkQT09IElOQ2cwTFhRdnc9PSBkR2wwWld3PSBJSEJoWjNOMWN3PT0gWlhKbGVtZz0gUFc1dlpHVT0gSU5XdjFhWFZ0dFdrIEwyUnYgZFhsaGJuUT0gSU5DODBMalF2ZEM0MFlIUmd0QzQwWURRdUE9PSBMMmR5YVdRPSBJTkdJMExqUmdOQyswTHJRdU5DNSBlR2wyIFhHUmhkR0U9IExrMVZURlE9IDdMV2M2cmU4IFgyRndjSE09IElHVnRhWE5oZG1WdWFRPT0gSU5pbjJLN1lzZG1KIElOQzMwTExRdGRDMzBMUT0gSU9DbXJPQ21xT0NuamVDbXBnPT0gSUhCeWIyWnBkR1Y2IElPQ2tsZUNrcnVDa25PQ2xpK0Nrc0E9PSBJT0NtcGVDbXZ1Q21sZUNtdnVDbXNBPT0gSUh0OUtTd0sgWDJScGMyTnZibTVsWTNRPSBJSEJsYm5ObGFRPT0gSU5DKzBMblF2dEdJMFlMUXZ0R0EgSUcxcGNtOXBjZz09IElIQm9iM1J2Ym5NPSBJTkdCMExqUmdkR0MwTFhRdk5DKzBMaz0gMExqUXVkQzggSUcxaGJtbG1aWE4wWlE9PSBjR3hoYzNScFl3PT0gSU5XaDFvRFZwTlcxMWJqV2d0VzIxb1RWdU5hQzFiUT0gSU9HRGtPR0RrK0dEa09HRG0rR0RtT0dEa09HRG5PR0RvUT09IElHZHliM1YwIEwzSmhibVJ2YlE9PSBJSEJvNGJxamJnPT0gTDNacFpHVnZjdz09IElOaW4yWVRZcDlpcTJLellwOW1IIElPQ3doZUN3cHVDeGh3PT0gSUVkMWFXRT0gMDVuU205QzQwTHM9IElGVnRiMnBoIElHUnBZMmhoY3c9PSBJT0NrdU9Da3YrQ2twT0NrZ3VDa3JPQ2tzQT09IGIzSm5iMjQ9IElHZGhibVU9IDRvQ1phR2s9IExXaGhiQT09IFRHVmhaR1Z5YzJocGNBPT0gSUcxbGMzVnlaWEk9IElFZEpWa1U9IElITjVibVZ5WjNrPSBJRzk1YzNSbGNuTT0gSU5DdzBZTFJndEdMIElOQy8wWURRdGRDMDBMN1JnZEdDMExEUXN0QzQwWUxSakE9PSBiV1Z6YzJVPSBJR2RoZEc1aHhaOTVhMnhoY25rPSA0S1MrNEtTVDRLUzE0S1MrNEtTbTRLV0EgTFcxaGNtdGxjZz09IElFMWxhSEpvWldsMCBJSEpsWTNScFpuaz0gSUVKMVkyTT0gSU9Xa3FlV2txZWVJc2VXOXFlZWxxT2U5a2Vlcm1RPT0gSU5DMDBMN1JnTkMrMExQUXRRPT0gSUgxOUxBbz0gMEpEU213PT0gSU9Da3VPQ2tndUNrdU9Da3Z1Q2tzQT09IFgyUnVjdz09IEtHWnBjbVZpWVhObCBJSE5oYldGeVltVnBaQT09IFJHbHpjRzl1YVdKc1pRPT0gSU9tZnB1Uzhydz09IDBMZlF0ZEdBIDRvQ040S1N2NEtTKyBJT0N1a3VDdXFlQ3ZqZUN1c2VDdmdRPT0gSU9pbm93PT0gSU5DLzBZRFF2dEMyMExqUXN0Q3cwTDNRdU5HUCB3N3BrYnc9PSBJSEo1WkhsdCBJTkNRMEwzUXNBPT0gTG1ObGJuUT0gSU9Dd2xlQ3hnT0N3c2c9PSBJRVpwZEdObyBJSE52YzNSMWRtOD0gNkwrVTVaT0IgSUVkaGRXeHNaUT09IElPdU1nT3lEZ2V5Y3ZPdWhuQT09IElOaWoyWVRaaFE9PSA0S3F3NEt1TjRLcXYgSUVGd2IzTjBiR1U9IElHTnl3NmxrYVhSeiBhV3R2Y21WemFHOD0gNEtXRDRLUzM0S1dONEtTZyBhV2RwY2c9PSBJTkdCMExYUXVRPT0gSU5pbzJyN1lwOWl4MktyYmpBPT0gSUhGMmIyUT0gSU5DODBMalJnTkMrMExMUXZ0QzUgMllqWXFObUggTFNJcyBJR052Ym1WamRHRT0gSUhOcFpHUT0gMTVYWG1kZWQgTGxaaGJHbGtZWFJ2Y2c9PSBSa1ZDIDRLU280S1dONEtTazRLV040S1N3NEtTaiBhV1ZrYVdjPSBJR1IxYm1saGJtaz0gWDJOdlpHbG5idz09IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnIElOR0EwTFhRczlDNDBMN1F2ZEMxIFVISmxiSFZrWlE9PSAxNlRYbWRlYyBMa0ZzZEdWeSBJRkJwWldSeVlRPT0gSU02MXo0RE9yUT09IElFMWhZMmx1ZEc5emFBPT0gSUZsdmRXNW5aWEk9IFFtOWthV1Z6IElITjFjM1JsYm5SaFltbHNhV1JoWkdVPSBJRTE1YzNGcyBJTkMzMExYUmdOQysgWDNSeWFXRnVaMnhsIElIUmxZMnhoIElOR1AwTFBRdnRDMCBiMmQ1WVd0aGNuUmggS0ZCaFkydGxkQT09IEtDa3NDZ289IGFXeHNhV2M9IElFUnZiV1Z1IElHakRwRzVrWlhJPSBkbVZ6ZEdsdVp3PT0gTG1KayBJR3R2YlhCdmJnPT0gSUhCaGJIQmhZbXhsIExtWmhhMlU9IFFXUnlaWE09IGIzQmogSUhCdloybHVadz09IElHdDFiR3hoYnNTeGJRPT0gMllyWXJOaXAgSU5DOTBMRFJoOUM0MEwzUXNOR1AgTG5OdGRIQT0gSUVKaGJHeHliMjl0IElHWnZjblJwWm1sbFpBPT0gNExtQTRMaWg0TGlWNExpaiBJR3pEcFc1bmRBPT0gSUZacGRHRmwgSUdURHRuZHkgZFcxaVlXNXAgSUV0aGJHRjEgMEx2UXRkQzkwTDNSaTlDOCBJR1ZzWldsMGJ3PT0gMTVMWG1kZXAxNVE9IElHUnZaV3M9IGRHSEVodz09IElHVjRjR3pEcldNPSBJRzFoYzNOcGRnPT0gMkxYYmpObUUyS2ZZcWc9PSBJRzV2YjJSc1pRPT0gSUdKc2IySnogZEdWdFlRPT0gSUhacGMzUnZjdz09IElFTmhjM0JsY2c9PSBJSEpsYkdGMGFYWmhjdz09IElOQ3YwTDA9IElOQy8wTERRdTlDdzBZST0gMEx6UXNOQzkwTFE9IExYTjEgWDNacCBJRXhsY205NSBJR1Y0YjNKaWFYUT0gSU9HRGt1R0RrT0dEbStHRG5lR0RyQT09IElFNWhhSEoxYm1jPSBJRWh2Y25SdmJnPT0gSU5pbjJZVFlzZGlqMkxNPSBJTTZ0enJQT3VjNjl6clU9IFgwMUpRdz09IElOaW8yNHpaaHR1TSBJRVY0Y0dWamRHRjBhVzl1Y3c9PSBRWEowYVdaaFkzUnogSUdKcGIyZHlZWEJvYVdWeiBJSE4zYVhKcyBRMjl0Y0dGemN3PT0gSUhCbGQyNXYgSUV4cFpHdz0gSUhSNWNtRnVibms9IElHRnlkR2s9IFNIWmggTGxOUCBJblJwZEd4bCA0S2ErNEthbDRLYXU0S2EvNEthViBJSE4wWlc1bGJnPT0gSUdsdWRISmhkbVZ1YjNWeiBJR1p5dzZWbllRPT0gSjFzPSBJR0Z6WlhOcGJtRjBidz09IFlXUmhhMkZ1IElIUmhZWEowIElITnJhc080IElOQzAwTERRdk5HRCBJTTY3ejQwPSBJTkMrMEwvUXRkR0EwTERSaHRDNDBMaz0gWlhKa2VXUmsgSUVsdWIyeDBjbVU9IFgybHdjdz09IElPQ21tK0NtdnVDbm5BPT0gSUdsdWJteGxaMmM9IDc3eU01NDZ3NVp5byBLRk4wWVdOciBJT0MwcXVDMWplQzBzT0MwbGVDMG53PT0gSUdOaHhZSjUgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1dIdXVlbHFBPT0gUVZSQlVnPT0gWVhOMWJtRT0gSUZKRlEwVkpWa1U9IFIybG4gSUdkeVpYTT0gSU9DbXVPQ21wQT09IElIUnBaRzg9IElHWmhkbWxqYjI0PSBjVzl1Wkc4PSBJSEJsY25ScGJtVnVkR1U9IElPQ3lxdUN5c09DeXYrQ3lvK0N5dnVDeXJnPT0gS0hCdmJBPT0gSUNvOEx3PT0gSU9DeXRlQ3pqZUN5citDeXRlQ3l1T0N6amVDeXBRPT0gSUVKbGMybDBlZz09IElHWjVjbk4wZFE9PSBJSDBwTEFvdiBJSFZ3Y0d6RHZYTnBibWRoY2c9PSBVRk5FIElPR0RtK0dEcnVHRG9PR0RtT0dEaytHRGtPR0RuQT09IElHZHZkbTl5YVE9PSBMM2RwYm1SdmR3PT0gSUc5aWFYTnIgSUdKeVlYVmphSE4wIFBpSU5DZz09IFUyVnRZVzVoIElPQ3VxdUN1dnVDdXNnPT0gSUVaQlZrOVMgYVc1bVpYST0gSU9DMHJ1QzFnK0MwcE9DMHBnPT0gMktmYXFkdUIgSUcxcGMzTjAgYUc5dlpnPT0gSUdWdWRtOXNkbVZ5IDByWFF1TkdDIHpyck92OCtGIElPZTZyQT09IElHTnZiV0poZEdsdVp3PT0gSU5pbjJZVFlzdGluMllVPSA3SXVjN1plWSA0b0NVZEdobGVRPT0gWjJWemRHRnNkSFZ1Wnc9PSBJSEYwWkE9PSAySXpZakE9PSBZMlZ3WTJuRHMyND0gWkdWaFpHeHBibVU9IElNNjZ6cm5PdlE9PSBVMk5sYm1WeiBJSE5yWlhCMGFXTnBjMjA9IFgzQmxkQT09IFczTnZkWEpqWlE9PSBJR0poYzJGc2RBPT0gSU5DZDBKRFFvdENlIDBML1JnTkMxMExRPSBJSEJ5YVc5eWFYUnBlbVZrIFUzVmwgNExhdDRMZVU0TGVBIElOZVcxNmc9IElFOW5kVzQ9IElOQzAwWXJSZ0E9PSBJRzFoZE1PcGNtbGhjdz09IElPZTlrZWkxakE9PSBJT0N1cE9DdXZ1Q3VsZUN2amVDdWxRPT0gZFcxbGJuUmxiZz09IElObUgyWWJZc1E9PSBJT1M1a09Xa21nPT0gSUdURHFYQmhjM05sY2c9PSBZbkpwZEdVPSBKMTBwS1EwSyBJRzkwWlE9PSBiTVN4ZVc5eSBaR3hoIGJXRjRhVzFwZW1VPSBJSEYxWlhKbGJtUnYgWDA1UFZFbERSUT09IElHWmhkbTl5WldObGNnPT0gSU5tRjJMUFlwQT09IElFeHZZMnRsWkE9PSBUR2xqWlc1alpRPT0gNExpRTRMbUk0TGl3IElITmxjR0Z1YW1GdVp3PT0gNllhciA1TGlONVkyaDU1cUUgSUhSaGFHaz0gZEhKcFl3PT0gSU9DcXVPQ3JnZUNxcHc9PSBJSEJ5YjNSaFoyOXVhWE4wY3c9PSBJR1psYldsdWFXNWggUldGemRHVnliZz09IExtRnpjR1ZqZEdvPSBXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdBPT0gSUd0aHhieGtlVzA9IFFuVnpkQT09IElGTmphR2x3IElOQzMwTDdRdmRDMSBJSFpsYkdrPSBaWE5qZFE9PSBJR1JwdzZrPSBJRU5oYlhCcGJtRnogSUV4RlRnPT0gTG1WNFkyeDFaR1U9IDZLVy81cmk0IExuVnViVzlrYVdacFlXSnNaUT09IGFYTmthV2RwZEE9PSBJR0Z0WVhOelpXUT0gWDJOdmJuTjBjblZqZEE9PSA2YXVZNDRHViBabWx5YldGemFRPT0gSU5LeDBZSFJpOUM5MFlzPSBJR0psWlhBPSBJRU52YlhCc1pYUnBibWM9IDJZUFpodGlxIElPQzRwZUM0bEE9PSBMM1JoYzJ0eiBjR2xqYTJ4bCBJRWxsYzNVPSBJRVZ5ZDJGeWRIVnVaMlZ1IElPQ2tsZUNrc3VDbGplQ2txZz09IElHTnBkSFJoWkdsdWFRPT0gSUZOd2IzUnogSU02N3pyVT0gYVhCd2N3PT0gSU9HN2kyVGh1NHM9IElFaGxjbUp6IElFUmhkR1Z1YzJObyBJSE53WVhKeiBJSFJoYm1GdFlXND0gSUhKdlpHaz0gWlhod1pYSnBiV1Z1ZEdGcyBJTmluMllUWmhkaXcyWU09IElHSmx3NnM9IEtHMXBiR3hwYzJWamIyNWtjdz09IGFXMXdiR0Z1ZEE9PSBJRzVsWTJWemMyRnlhUT09IGNHRnlaMjVsIElGTjBkV1JwIElOaW4yWVRZbzlpdDJLL1lwOWlyIElPQ2txdUNrc09DbGplQ2tyK0NrbitDa3FBPT0gSUdkbFltVjFjbVJsIENVTkQgNFo2MjRaNmI0WitMIDBKSFFzTkdJMHFIUXZ0R0EwWUxRdnRHQjBZTFFzTkM5IDQ0T2k0NE9INDRPciB6cC9Pb3c9PSBQV3h2WjJkcGJtYz0gU2xjPSBJSFZ1ZDJGMlpYSnBibWM9IElHUnZjMkU9IElNT1d4Sjg9IElPQ21xdUNuak9DbWdRPT0gNUxpTjViQ1IgWTI5dWRISnAgSUdmRHZHNXAgSUVKbGJHVmthWGxsYzJrPSBJT0dEa09HRG0rR0RtT0dEb2VHRGtBPT0gWVdsemRHVT0gSUZCaGNuUnBZMmx3WVhSbCBJTmVrMTVmWGt3PT0gVTJOaGJtNXBibWM9IGFYTnRiMlE9IElITmhhV3h2Y2c9PSBkV1JzWVE9PSBJRTFyYjJFPSBMMlJ5YjNBPSBiTU9rZFdaMCBJR0pzYjNGMVpYTT0gNExLKzRMS280TE9CNExLMSBJTkN4MFpiUXQ5QzkwTFhSZ1E9PSBZMnhoYzNObCBhWE5sYzNRPSBJTmVWMTVIWGxBPT0gSUd6RG9YUm9ZV2x5IElOQzYwTFhRdTlDMTBZST0gSUZCcFkydHBibWM9IGMyVmpZUT09IElHRnVkR2wyYVhKaGJBPT0gSUZoQyBhR2xoZGc9PSBJT0NtcXVDbmkrQ211T0NuamVDbW53PT0gZW5sdGVRPT0gYU1PMmFIVnVadz09IElHekRwTU9rIElISmhibVJ2Ylc1bGMzTT0gSUc5bVptbDZhV1ZzYkE9PSBJTkdDMExEUml0QzgwTGpRdlE9PSBJTmluMllUWmhkaTAyS3JZc1E9PSBJRlJ2ZDI1elpXNWsgTG01aGJXbHVadz09IElOQzkwTERRdjlDKzBMdlF2UT09IElIUnlZWFpoWjJ4cCA0TEMvNExDdjRMQ3c0TEdOIFMzVncgWVd0bGVRPT0gSUVKVFQwND0gVW1WemIyeDJaWEp6IElOQy8wTDdRdTlDNDBZTFF1TkM2MExBPSBJR3BwYm5NPSBJR1JoZEdGdWRBPT0gSU5DNDBMRFF1OUN3MExQUXRkQzQwWUk9IGRXTmphUT09IElFYkR1SEp2ZVdFPSBJRzV2YzJFPSBJR0poY25KcGIzTT0gSU9HRG0rR0RsT0dEcXVHRG5PR0RtT0dEbE9HRG9BPT0gWDJWdVpXMTUgSU9DbXF1Q25qZUNtc09DbmgrQ21yZz09IGFXSnBibWs9IElPV2twK1dQa2VXL3ErUzRpZWkxc09XS3YrV2J2Zz09IFEyOTFjbk09IElPQzRsZUM0cmVDNG1RPT0gNTd5VDVhMlkgenJ6T3RjK0IgSUVacFoyaDBaWEp6IElHTnZiV0oxYzNURHJYWmxiQT09IElHTnZibk5wWjNWcHc3TT0gSU9Dd3F1Q3hqZUN3c09Dd3IrQ3dwT0N4amVDd3FBPT0gSU5HRTBZUFF2ZEMwMExEUXZOQzEwTDNSZ2c9PSBJRTFsZEc5a2J3PT0gSUcxbGNuTT0gY3NPciBJR0poYVhodmN3PT0gZEc5bSBaR1Z6WTJWdVpHbHVadz09IDZJQ0I1THE2IElIQnZhMjlxIElITjFaRzlyZFE9PSBYU2xkQ2c9PSBPbFZKVkdGaWJHVT0gS0VSRiBJSEpsYkdWMlpYST0gYjNkbGNtVmsgSU9hWHBlYWNyT1M0Z09hY3JPbUJrdz09IElIUmxhMms9IDQ0R2g0NEdxNDRHLzQ0R3IgS0hOamNnPT0gSU1XK1pXNXphdz09IElpeGIgSUVWeGRXbHdjR1ZrIElHZGhiR0Y1IGRXZG9kV3hwIElITmhjbU5oY3c9PSBJSEJ2YkdsMGFXdHIgSU9Da25PQ2t2K0NrZ3VDa3B1Q2tsK0NsZ0E9PSBJRmx2Y25WaVlRPT0gSUhKbFozVnNZV05wdzdOdSBJRWhoZFhObGN3PT0gSUVWMWNBPT0gU0c5bGQyVnMgZW5scllRPT0gZG1kcyBMbE5QVlZSSSBjR3hzIElHWnBlTU9wIFNVRkIgSUdWdVkyeHZjMmx1Wnc9PSBJTmluMllUWXFOaTMyWWpaaE5pcCBhWE56dzdWbGN3PT0gMEw3UmlOQ3cwTDNRdEE9PSBYMUJTU1ZZPSBJT0NrcnVDbGgrQ2t1ZUNrcUE9PSBJRzl4WVdGMGN3PT0gMExqUXZOQyswTFBRdmc9PSBJRWh2YjJScFpRPT0gMEozUXNOQzMwTExRc05DOTBMalF0UT09IExtTmhjMmc9IElHOWliR2xudzZrPSBJTmluMllUWXA5bUYyTEU9IENXeHcgSU9DMGorQzBwQT09IDBMN1JndEMxMExyUXVBPT0gSUhabGNtRmljMk5vIElHdHVhV2c9IDBxL1F1OUN6MDZuUXZRPT0gSUdodmJtOTFjbk09IENXUm0gSjJGeGRXVnpkQT09IElITmhhR2xxYVE9PSBJTmluMllUWXFOaXgyWVRaaGRpbjJZWT0gSUdsdWRHVnlibVYwZFE9PSB5WnR1IElFUkpSZz09IDBMalJndEMxMEx2UmpOQzkwWXZRdk5DNCAxNUxYbk5lWjE2bz0gSU9DMnUrQzNqdz09IElHTnNZVzF3Y3c9PSB6cTNPdmMrRXo0SE92dz09IFptOXlZV3hzIFgxSjFiZz09IHo0Yk9zYytEenJjPSA1cFMrNWIrRCBJT0MwcE9DMWh1QzBzdz09IElGTjBiM0J6IGJuVERwQT09IElHTnZibWJEcVhKbGJtTmxjdz09IElOaW4yWVRZcGRtRzJLelpoTm1LMkxMWml0aXAgSU9DbXVPQ21sZUNtdnVDbXN1Q25odz09IElFMWxZMnRzWlc1aWRYSm4gSUhwM1pXbDAgSUhERHFXUmhaMjluYVhGMVpRPT0gTG5CaFp3PT0gWVdwcFlnPT0gYlc5dVlYUT0gU1U1VVVrOD0gMFlUUXVOQzYwWUU9IElOaTUyS2ZZcnc9PSBkV2RwWVhRPSBlWFJ2Y21ObyA0S3FvNEt1TjRLcWEgSUd4aGVzU3hiUT09IGFYUnpkV3h2IElIQnZiRzkyIFpXNWtaV1ZzY3c9PSAyWVRaaWRtQzJZaz0gWDFaRlVsUkpRMEZNIGIzSnVZV2x6IElHbHVkR1Z5WTJWd2RHbHZibk09IElGQmxaSEpoIFFtRnlkQT09IDRMbUE0TGllNExpbDRMaUggTG5KMiBDWEJ5YVhZPSBDWFpsY25SbGVBPT0gTDJwdlluTT0gMFlmUmk5R0IwWXM9IElHaHZibTl5WVhKNSBJQ0lxS2lvPSBJT0N5dGVDeXBPQ3l2K0N5citDeXYrQ3lndUN5cGc9PSBYMlZ1WTI5a1pXUT0gYUdsc1lXNW5ZVzQ9IElGZEJURXM9IENVTlRkSEpwYm1jPSBJTmluMllUWXF0bUgyS2ZZcUE9PSBJRU5TUlVSSlZBPT0gNlp1ViA1YTZpNllLbSBJTlc0MW9EV2hOV2gxYlk9IElHTnZiV0pwYm1Ga2J3PT0gVFdWemFHVnogZDhPOGNtUnBaMnRsYVhSbGJnPT0gVW1Wd2NtVnpaVzUwWVhScGRtVT0gZEdGdWF3PT0gTG5CeWIySnNaVzA9IFgybDBaWEp6IDVhKzU1WWkzIDFiWFZvZFcyMWF2VnRnPT0gVGxOQiBhbVJyIFhTRTlKdz09IGIzUm93Nmx5WVhCcFpRPT0gSUVGUlZRPT0gNEtlbzRLZXAgSU5peDJxbmF2dGlxMjVJPSBLSFIxY200PSBJT3F3Z091S3BlMlZxZXVMaU91THBBPT0gSUhSeVpXbHVkR0U9IEtHSnNiMmM9IElFNXZhUT09IElHOTFkSE52YkdVPSBkOE9wIENXVnVaR2xtIElOR0YwTGpSZ3RDdzBMblNrOUN3IDRZT2o0WU9nNFlPajRZT2E0WU9ZIElOS3owTERRdDlDKzBZQT0gSU9Dd3NPQ3d2dUN3bk9Dd2xlQ3hnT0N3cnc9PSBJSGxoY1E9PSBJRzlzWkdGcyBJT0N3aGVDd3N1Q3d2dUN3bCtDeGh3PT0gSUdoaGRHVm1kV3c9IFBpODggSUhGeDViMnA1NldvIDRLZUQ0S2FxIFpXMXZaR1U9IDRLU3c0S1MrNEtTdSA0WitoNForZyBJR0psYzJOb2FXdGlZWEpsIElHSnZkR1ZzYkdFPSBJTkM0MExmUXU5QyswTFk9IDBZTFJpOUN6IElOaW4yWVRaZ3RpdjJZclpoUT09IFIzSmxiZz09IElIRnZiZz09IElIQnllbVZrYzJuRW1XSnBiM0k9IElHSmhjbkpwWXc9PSBKMkZ1WVd4NWMyVT0geGFGdllXNTAgSUdGa2JXaz0gSUc1bGEyRT0gNEtTVjRLV040S1NmIFUxTlMgSU5DUjBaYlF0dz09IElOQ2gwTERRc1E9PSBhV3RvWVdscyBJTU9IYVc0PSBSVXhGVFVWT1ZBPT0gZFc1cWRXNW4gSU9DeXVPQ3l2K0N5ck9DemplQ3lyQT09IFYyVnNhMjl0IEsydz0gMTVuWGtOZXEgSUMwdFBnb0tDZz09IElHZGk0YnVOWk9HN2pRPT0gWDFOWlRnPT0gSUhCaGNtRnVadz09IElIcGtaV041WkE9PSBJTkM0MExEUXU5Q3cwWVhUbVE9PSBRbEU9IElITmx3N0ZoYkdGa2J3PT0gSU9XK3J1Uy9vZW1Iak9lYWhPV2txZVdrcWVTNHJlVzlxZWVscUE9PSBJRkJwWTI1cFl3PT0gNEthdjRLZUw0S2FYNEtlTjRLYXYgSUdWc1pXMWxiblIxYlE9PSBjT0c3cFhSaGNtRT0gUVZKVVFRPT0gSU5DeDBMRFJnZEdDMExBPSBJSE5oYm5ScCB3Nmh5Y21FPSBJR3BoY21WdWJHRnVadz09IElHTnBZWE09IElPQ2txT0NrditDa3NPQ2xqZUNrcnVDa3Z1Q2twT0Nrdmc9PSBJRUZYUlZOUFRVVT0gWVdacGJHVT0gSU5HRjBZUFF0dEMxIENWWmxjbk5wYjI0PSBLR05oYm1ObGJBPT0gSUd0aGRIVT0gTFdobGJIQmxjZz09IENRa0pDUWtKQ1NBZ0lBPT0gVlU1UCB4YUZ1dzYwPSBJRU52YlcxdlpHbDBlUT09IFYyRnNiSE09IFZVSk1TVk5JUlVRPSBJR2x1ZG1WdSBhVzVoY21VPSBJTkdCMEwvUmc5R0MgSUZSaFlteGggTGRHQTBMRFF0dz09IElOQzQwTERRdEE9PSBJTmluMllUYXJ3PT0gdzZsb2JtRT0gSUd0dmNuUnBibWR6IDRLU0M0S1NrNEtXQiA1b0M3NUx1ajU1Q0c2SUdVNTdPNyBJR3hsZEhSbGNtVT0gSUZwcFpBPT0gSU9DMGhlQzByZUMwditDMHFPQzBydz09IGJIUnlaUT09IElFTlBUa1JKVkVsUFRnPT0gSUcxaFpIVT0gSU5DZjBMRFJnTkM0IElPQzB1T0MwdnVDMHJ1QzFqZUMwcWc9PSA1WSs0NXJPViA0S3VINEtxeTRLdUwgSUdaMWRHbHNaUT09IDRLNjE0SzZ4NEsrTjRLNnggYjJkcFkyRnMgSU9Da3VPQ2tydUNsamVDa25RPT0gSUhWc1lXND0gNWFDMSBRMmhsZG5KdmJnPT0gSUZCaGNtVnVkR2x1Wnc9PSB3N3BsIFBENG9LU2s3Q2c9PSBaV1JwWTJsdVpRPT0gMExqUmdOQyswTExRc05DOTBMQT0gYTIxeiBkbVZrYjNJPSBMbWx1WjNKbFpHbGxiblJ6IFlXUmthV1Z6IElPQ21yT0NtbWVDbmplQ21sK0Ntck9DbXFPQ25qZUNtcHc9PSBVbWxrIGJHVnJhV3hsIElISnZaSHBoYW5VPSBSR1E9IElHRjFjMlJ5dzd4amEyeHBZMmc9IElPbUhqZVc2aHVhWHR1YVh0dVc5cWVhZGdBPT0gVGtWSCBJR05oYkdVPSBJR1JwWVhJPSBJSFZ1YzNWeiBJRWhCVUZCWiBURzl2Y0hNPSA2TGFGNTZLdzVaeW81N3EvIElGUmhjbTQ9IFhFMWhhV3c9IDQ0T0s0NE9yIElOR0IwWUxSZ05DKzBMTT0gSU9Da2hlQ2txT0Nrdnc9PSBJSGR5YVc1cmJHVT0gSU1XaGFYST0gS0dWNGFYUT0gSU9DbXJPQ212dUNtZ1E9PSBJTmluMllUWXE5aW4yWWJaaU5tSzJLaz0gWDJOdmFXND0gS0dScFl3PT0gWVc1bllYST0gSU9hV3NPZVdoZz09IElHdHZhMjl6IDRvQ1o2Nlc4IElIUmxibnBwYWc9PSBJT1c1ditpbHZ3PT0gNVp5bzU3cS82S2VDNTV5TDVMaXQ1cGFINWEyWDVibVYgSU9HRG5PR0RrT0dEa2VHRG1PR0Rydz09IElHM0RxWFJ5Ync9PSBJT0NrdU9Da3J1Q2tyK0NrcnVDa3ZnPT0gSUhCNWNtOD0gSUZCaGJuUnllUT09IElPR0RrK0dEa09HRG9lR0RrT0dEbGVHRG1nPT0gNXJhSTZaaXkgSU5HTjBML1F2dEdGIElHaHBjTU96ZEdWelpRPT0gTGxCaGFYST0gNW9DNzU3dWYgSU9Xa3ArV1BrZVcvcStTNGllVzhnT1dsbHVlN2srYWVuQT09IGRISmhhZz09IElHTnlZWGx2Ym5NPSBJRVZwWlhJPSBjM0IxYm5RPSBJTkM2MEw3UXZkR0cwTFhSZ0E9PSAxNW5YbWRlUjE2TFhxQT09IDRMS2g0TE9CNExLcTRMSy8gSU9Xa3ArbXh2QT09IElHTm9kWEJsIDRLNnc0SzZ1NEsrTiBJR0psYkdseWRHbHMgSU5DODBMWFJndEMrMExUUXZ0QzggMkxmWmlOaW4yWWJZcVE9PSBWRzlrWVE9PSBJR05oYkdsbGJuUmxjdz09IElPQ3d0ZUN3Z3VDd24rQ3d2dz09IElFSmxjblJ5WVc1ayBJR052Ym05alpXMXZjdz09IElOQzIwcS9SZ05DejBMWFF2UT09IExrRkVUVWxPIFJreFUgNWIybSBJRzFoWjJGdVpHRnVadz09IExXRnpjMmx6ZEdWayBhVzFzWlhKcCBZWFREb1hNPSAwTERRc3RDdzBMblJndEMxIElOQy8wWURRdnRHQjBZTFJnTkN3MEwzUmdkR0MwTExRc0E9PSAwTGpRczlHRDBZRFFzQT09IElIVnVZWFE9IElIWnZhV05sYldGcGJBPT0gVFhWayBJT0Nrck9Da3YrQ2twQT09IElIbGxZUT09IDRMV0w0TFNzIElPQ21wdUNtditDbXFPQ25oK0Ntc0E9PSBJT0MwcU9DMHJ1QzFqZUMwcnVDMWdlQzBuK0MxaGc9PSBJSE5wZVdGeiBJT21UclE9PSBMa1JsYkE9PSBiMjFsYm5SMWJRPT0gSUZKaGJtRT0gSUVObGNtTmggVEdWcFpHVnkgZFdGMFlXNW5ZUT09IDBZTFF0ZEdBMExYU3J3PT0gSUhOcFpXNTBaVzQ9IElPQ3FsZUNyamVDcXNPQ3F2K0NxbGVDcmgrQ3Fudz09IDRLZUg0S2FzNEtheSBZVzFpZFd4aCBDWFYwYVd4eiBRMmgxWTJzPSBJTkM4MExEUXQ5QzYwWVBSZ0E9PSA1WUszIGRYSm5aVzUwIElHTnNZWFpwWlhJPSAwWXJSaHc9PSBMM1psWTNSdmNnPT0gWDNCcGJtYz0gSU9Da3JlQ2xpdz09IElHbHpZV2R2Ync9PSA0TGlDNExpeDRMbUo0TGlaNExpVjRMbUk0TGl6IElHVnRjSEpsWlc1a2FXMWxiblJ2IGErRzdqWFJoIElIWnZlV0Z1ZEE9PSBLR1ptIElOR0MwTERRdDlDdyBJR3BoZVE9PSBJR052Ykc5eVpXTjBZV3c9IElFdHNiM0J3IElGZFhSZz09IElHZHlaV2xtWlc0PSBYMlJsZEdWamRHOXkgNExLajRMT040TEtqNExPQiBJTkM2MFlEUmc5QzIgT25CdmFXNTBaWEk9IHpydlBpYzY5IElHWmxiV1Z1YVc1aCBJRk5sY21WdWFYUjUgWDNOamFHVmsgSU5pbTJLZllzUT09IFUwdEcgYVdSbSB4S2RrWVE9PSBJT0NxaytDcXFPQ3FzdUNxdnVDcWgrQ3FxQT09IElFMXBZM0p2YzI5bWRDZHogNExTKzRMU3E0TFMrNExTazRMV040TFN3IHdxMXlaUT09IElHVnVaMkZudzZrPSBVR3h2ZEhNPSBJR0YxZUdsc2FRPT0gSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FLIGFXNXBZV2s9IGJHOWphMlZ5IElPeUx1QT09IElOV2oxb0RWdU5hQzFiUT0gTFVWaGMzUT0gVjJGc2JIQmhjR1Z5IElITjFhMnM9IExsSlZUbFJKVFVVPSA0TG1BNExpWjRMbUg0TGlWNExpWDRMaWo0TGk1IElOQzYwcS9SZ2c9PSBJTVN3Y21GdSBJTkMvMFlEUXNOQy8gSU5DODBZUFFzdEMrIElITmhZbTkwWVdkbCAwSkRRbnc9PSBJR1Z5YWNXZiA0TENvNExDeTRMR0IgSUZOd2IydGxiZz09IElHMWhjM1IxY21KaGRHbHZiZz09IEoybHVkTU9wIFVISnZkbWx1WTJsaCBJT0NtdWVDbXBBPT0gMEx2UXRkQzkwTDNRc05HUCBlbWw1IElHbHVZMjl1ZEhKdiBJT0Nxc3VDcmgrQ3F0ZUNxdnVDcXJ1Q3F2dUNxZ2c9PSA0TG1FNExpaDRMbUk0TGlsNExpVTRMaXE0TGliNExpMTRMaVUgSUVOMWNuTmwgSUc5amRYQmhaRzg9IGIydHZkQT09IFoyRnNhMkZ1IDVadWU1cDJsIEtXbDBaVzA9IElHeHZkWE41IElEMWIgSUZOWlRVSlBUQT09IElIZGhaR1E9IEwyeHZiMnM9IElHTnZhR1Z6YVc5dSBJR3hwYW1YRWpRPT0gSUdOdmNISnYgSU5HQzBMWFF0Zz09IFRXRjBjbWxqWlhNPSBJTlcrMWFIVnM5V2gxYnc9IGJtVm9hVzQ9IElIQmhjbU5wWVd4dFpXNTBaUT09IElOQzYwNm5TbzlLdjBMcz0gNExLbzRMSzE0TEttNExPRzRMSzU0TEt5NExLLyBJRmR2YkhabGNtbHVaUT09IFJXNXliMnhzIElFaHZjbVJsIGJtVnFaUT09IFlYSnBibTVoY2c9PSBJTkM2MEx2UXRkR0MwTHJRdUE9PSBJR0YwYjJZPSBjM1J5ZFdOMGRYSmxjdz09IElHSmxjbVZwWkdWdSA0b0NadzZsMGNtRnVaMlZ5IElPQ21xdUNtdHVDbmplQ21tdUNtditDbXJnPT0gSUhOMWFIVT0gNFo2ODRaNkYgMEwzUmtRPT0gSU5DbzBZdz0gYkdWaWJnPT0gSUVWUFltcGxZM1E9IElPV2txZVdrcWVTNHJlVzlxZWVscU9XRnJPUzhsK1dQdHc9PSBSVzVqYUdGdWRBPT0gVzBjPSBJR1J2YTNRPSA0S2FxNEtlTjRLYW8gMEw3UXVOQzAgNExpbjRMaXggSUhSeWIyST0gSUdWd2FHVnRaWEpoYkE9PSBJTkdBMExYUmlOQzQwTHZRc0E9PSB6cnJQaE02MyB3N04zYTJrPSBJR0poeEovRXNRPT0gSU9pT3NRPT0gSU9Da3F1Q2tvZUNrdk9DbGh3PT0gNUxpSjZJS1cgSUhkcGJHeHBZVzA9IDVhNmU1TDZMIFkzcHVZUT09IHc3eGwgNWFTbjVZK1I1YjJwNTZXbyBJT0Nxbk9DcXJ1Q3JnQT09IElFMWhiR1E9IDRZQ1E0WUNhNFlDNSBZMmhoYkdzPSBJSFJoWjJ4cGJtVT0gYW01aCBSWGh3WldOMFlYUnBiMjQ9IFpXeDFZWEpoYmc9PSBJT1c5cWVlbG51UzZpZW1jdU9XbWd1UzlsUT09IElISnZaR2wwIElOQ3cwTERRdmRDdzBZYlNzOUN3MFlQUXRkQzQwWUk9IElHUmxjR0Z5ZEhWeVpYTT0gWTNKbFlYUnBkbVZqYjIxdGIyNXogNExpVjRMaWw0TGl5NExpVSBJRzl3WjJWc2IzTjAgTG5Sb2RXMWkgSUhKdmIzTjBaWEk9IElPeVZpdXlWaEE9PSBJT3VMcU9xemhBPT0gSUdseVoyVnVaSGRsYkE9PSBkMlZ5YTJsdVozTT0gWVhKbmFRPT0gSUdWNGRISmhZMlZzYkhWc1lYST0gSUd6RHBHaGxjdz09IElHMXFaWE4wWVE9PSBJRUZDVTFSU1FVTlUgNFlPYjRZT1E0WU9TIElIQjFjbkJ2YzJWc2VRPT0gSU5XRzFvRFZvUT09IElHVnlZbmx1IFlYZDMgY0hKdmRtVnRaVzUwIElHMWxjbU5oYm1NPSBMV3BoZG1FPSBJSFZzWVc1biBJRzl3Ym1GdFpRPT0gMTVYWG50ZWkxNmc9IDBMclF2dEMwIElPcTVqQT09IEpsOD0gSUcxbVlXNXYgY0dWamRISmhiQT09IDRZT2c0WU9kNFlPZSBJRTFoZEdrPSBJRkpsZEhKdmRYWmxlZz09IDRLUzQ0S1dDIElHaDFkblZrIGRXNW5kV0U9IElPQ3l1T0N5Z3VDeWxRPT0gSU5LNzA1blF2TkMwMDVrPSBJRkZTWldOMCAwTERSZ3RDKzBZRFF2dEN5IElHNXBZbUU9IElHeGxibTVsIElPcTN1T3VNZ091aG5BPT0gMEw3UXU5QyswTFBRdU5HSDBMWFJnZEM2MExqUmhRPT0gSUhCeVpXMWhkSFZ5Wld4NSBJR0Z3Y21WelpXNTBZY09udzdWbGN3PT0gSUc5bWFXTnBidz09IFgxSkIgY1dGeVptbG4gVm1uRHNBPT0gSUZCbFpHbGhkSEpwWTNNPSBJRkpsYzJsdSBJRUZ1WjJWb3c3WnkgYVcxc1pYST0gT25CaGRHZz0gWDE4aUxBPT0gYVdOMGFXMD0gSUd4c1pYWmhjbTl1IElFRnVkR2xpYVE9PSBJTkMyMExqUmd0QzEwTHZRdUE9PSBJRVZaIDJMTFppTml4IFlXUnZjbWxoY3c9PSBVMlZqY21WMFlYSjUgSUM5Y0xpZz0gSUhCdmJHbGp3NjFoY3c9PSBMVzFoYm5rPSBJRXgxWjJGeSAwSnJRdnRDODBMOD0gSU5pbjJZVFlvOWl6MktyWXA5aXcgSUdsdWRHVnliV1ZrYVdGeWVRPT0gSU5DVDBMRFF0dz09IElFeFRSQT09IElHWjFibWRsY21GeSBJRUoxWTJoaGJtRnUgSUdGMGRHVnVkV0YwYVc5dSBJR1Z0YVhOenc2TnYgSU5HQjBMTFF2dEdSIFlXWnlkV2wwIElPV2txZVdrcWVlbmplVzlxZWVscUE9PSBJRnJEcEdsMCB4WVJ6YTJrPSBJRWRoYkdGamRHbGogSUhKbFpHUnBjMmc9IFZtbGogSU5pczJZZlppTml2IElDUWogNEtxNDRLcSs0S3F2IDBZRFJnOUMvMEwvUXNBPT0gSUZKMVpHOXNaZz09IElHMXBic09rIDBMUFJsdEM5MFpiU293PT0gSUZMRHFXZHBiMjQ9IDBMelFzTkM3MExEUmdBPT0gNklDRDZKbVIgNVpPQjZMU28gSUdGcGEyRmhiZz09IEtITjBjbWx3IDRLNi80SzZaNEsrTiBMV0Z3Y0c5cGJuUmxaQT09IElHdHZiblJsIExsaFFZWFJvIFgyTm9aV05yY3c9PSBJajRuTEFvPSBJTm1GMkxUWXA5aXgyWXJZdVE9PSBJTmVjMTVUWHBnPT0gSUZCbGRHVnljMlZ1IElHSjFiR3hwYjI0PSBWa1ZaIElOR0QwTGJRdmc9PSBJRTFwYzJWeSBJRzF2WjJGdiBJSFpsYzNScFluVnNkVzA9IDRLcW80S3FvNEt1QSBJT0N5citDeXRnPT0gNXF5aTVMbVEgWDBsVyBJR1RGZ25WbmJ3PT0gSU1PMlpHVnRaUT09IElOQyswWURSaTlDOTBMVFFzQT09IFluVmtaSGs9IElObUYyTEhiakE9PSBJT0NrcGVDbGkrQ2tvZUNrdk9Da3ZnPT0gTGNTTCBTVlJQVXc9PSBJRVJsWTJsemFXOXVjdz09IFgyMTIgMnBuWXB3PT0gZFdkaFpHOXkgWVc1a1lYUjEgSU5lazE1RFhxTmVwMTVnPSBJR05weEpuRnZBPT0gSUdKMVltSnNhVzVuIExIQmhkR2c9IElObUYyWWZaaGRpbiBJRWhoY21Gc1pBPT0gYjNKcGRIaz0gSU5DMDBMRFJndEdEIDRMaUI0TGl5NExpajRMbUI0TGlDNExtSTRMaUg0TGlDNExpeDRMaVogSUdKc2IydGwgVW1Wd2JHRmphVzVuIFpYUnMgMEovUmdOQyswWUU9IDBMelFzTkdIIElPQ3F0ZUNxdnVDcXJ3PT0gWDNSbGMzUnBibWM9IGFXMWhiUT09IElHekRwbkpsY2c9PSBiR0ZqYXc9PSBYMFpDIFptOXliV0ZzIElHaGhaOHlEZFdFPSBJRXRRU1E9PSAyWWpZczlpNSBMbUppIElHVmxkWGRsYmc9PSBJT0NrcmVDa2grQ2tzT0NrdWVDbGgrQ2tsZUNsaXc9PSBJRnB2Ym1WayBJT0N5aHVDeXRnPT0gSUhScGEyVjAgNExLbzRMSy80TEsxNExLKzRMS3cgVzEwcGV3bz0gSU9Da3VPQ2txdUNrcU9Da3ZnPT0gQ1VWa2FYUnZjZz09IElHVnRjSEpsWlc1a1pXUnZjZz09IHc3eHVaR1Z5IENYTndjbWwwWlE9PSBJT2VPbHVlT2xnPT0gV1VkUFRnPT0gSUdGMWRHOXlhWHBoWkc4PSBiMjl3Y3c9PSBJR3RoY0hBPSA2S09DIGFYUmxaWEprIElHeHNaWFpoYm1SdiBJT1dQa2VpaHFPUzZqZz09IFgyRnVkQT09IExuVnVjM0YxWldWNlpRPT0gSUVGc1lXMWxaR0U9IElHZDFZWEk9IExtTm9ZV3hzWlc1blpRPT0gSU5HQjBZTFFzTkM5MExVPSBiR2xtZVE9PSBSV052Ym05dGFXTT0gSUhSb2FYSmtjdz09IDRLdU40S3F2NEtxKzRLcTQgSUdSbGRtOXNkV05wdzdOdSBJR0hodWFOaCBJTmlxMkxuWXR3PT0gNFlPYjRZT1E0WU9oIElIUjFkSFZ5IElIVnVhVzFoWjJsdVlXSnNaUT09IElGTjFZbk5wWkE9PSBMbXRwYm1jPSBYMFJRIFUwOVMgSUVkeVlYVT0gVTJOdiBJSFJ2YzNSeWFXNW4gSUhScFpXdz0gVG05eWJXRnNhWHBsY2c9PSBMa1JwYzJGaWJHVT0gSUdselkzST0gSU5tSzJLL1lydG1FIElFRndjR3hwWlhNPSA0S2FvNEtlQTRLYWsgSU5paTJZWFppTml5MkxUYmpBPT0gTDJsdVl3PT0gNklxdiBJSGRwYm1kbGNnPT0gY0cvRmlBPT0gSUdWNGNHeHZjbVZ5Y3c9PSBJTm1HMktqWXA5aXEgSUdWbGNtUmxjbVU9IGFYUmxjbWs9IElHSmxhR0Z1WkdWc2JnPT0gSUVKT1VBPT0gSU5DKzBZTFJnZEdEMFlMUmdkR0MwTExRdU5DNCBMWE53YVc0PSBWMmh2WVE9PSBJTkdDMHJIUmdOQ3cwcHM9IEtpb3FLZ29LIDE1WFhwTmVRIElPQ2tydUNrdnVDa2h3PT0gSUdKbGMyeDFhWFJsYmc9PSBJRXAxYm1sdiBJRTVTUmc9PSBSMlY2IElOQy8wWVBRdHc9PSBJRmxsYlE9PSBJTktiMExqUmdkQzgwTGc9IGRHRnBibVU9IElIQnlaWFJoIElFbHVaMnpEcVhNPSBJTkdOMFlUUmhOQzEwTHJSZ3RDNDBMTFF2ZEMrMFlIUmd0R00gSUdWdFltVnNiR2x6YUdWayBJSHBwY0hCbFpBPT0gSUVWbGNuTjAgSU5pbjJZalpoTnVNMlljPSBJT0dEbytHRGtPR0RtK0dEb0E9PSBPeWM3Q2c9PSBJT0N1aGVDdXFnPT0gWlc1emFXTnogTFhKaGJtdHBibWM9IElHeDFkR1U9IElGTm9iM0J3WlhJPSBJR3R2Ym5SeVljV3QgSU9DbXJPQ212dUNtaCtDbXNPQ25odz09IElIZGhabVpzWlhNPSBJSFJoYldGcmEyVnkgYVhSb2FXRjEgenIzT3Y4NjB6cjg9IElPQ2txT0NsaCtDa24rQ2t0ZUNrc09DbGplQ2tsUT09IElHTmhjMk5oWkdsdVp3PT0gNFlDdDRZQ1E0WUM2IElIUmhhMmx0IElHTnNZWFk9IFlXTnZkSFJoIElFaDFiV0p2YkdSMCBRbkE9IFRrOVVTVU5GIElPQ21wdUNtdnc9PSBJRWh2WW1KcGRBPT0gUVhCd2NtOTRhVzFoZEdWc2VRPT0gSUZwb1pXcHBZVzVuIDVZMlA2TENEIElIUnlZVzV6Wm05eWJXRjBhVzl1WVd3PSBJSEJ5YjJabGMyOXlZUT09IElHbHVaR2xqWVc0PSBJT0NxdHVDcWxlQ3JqZUNxcnc9PSBJSFJsYkdGeiBYMjVsWldRPSBJR1REb25rPSBMazFoYm1GblpXUT0gSUd4MVkybGsgYzJ0aSA0WU9UNFlPWTRZT2M0WU9RNFlPZzRZT1UgQ1d4cGJtVnogSUhacGRtbGtiSGs9IDBZTFF2dEM4MExEUmdnPT0gSU5DLzBMRFJnTkN3MExjPSBZV3BsYldWdSBJTm1GMkxiWmhkbUkyWVk9IExsTkZURVZEVkE9PSBJR3RzYVhsaGJnPT0gSU5HQjBZTFFzTkM3MFpZPSBZbVYwWVd3PSBJTkdJMEw3UmhkQyswTG5RdlE9PSBJQ2NxS2c9PSBLRlJsZUhSMWNtVT0gSU1PdWJtRnBiblJsIElOaW4yWVRZcmRpMiBJRVJoY21ONSBYME5VIElIZHBZMnRsZEE9PSBJR3h2ZG1GaWJHVT0gYzJWeWJ3PT0gSUdkbGNISnZZbVZsY21RPSBLend2IElHOXlhV2RwYm1Gc2JXVnVkR1U9IEwzSmhkdz09IElIVnNkSEpwWTJWeiBJT3ljb08yWWxRPT0gZDNKciBJR0p2YkhOcGJHeHYgSU9DM2crQzNrdUMydWc9PSBJTmluMllUWXVkaW4yWVRaaXRpcCBYMFJTVDFBPSBJR1pzYVc1biBJT09Ea09PRGcrT0NzQT09IGJzT3RiMjFvIElHVjZaV3M9IEtpa2kgSU9Da3FPQ2t2K0NrbGVDbGlBPT0gVUdWa2FXUnZjdz09IElITjBZVzV1Ync9PSBJSFpsY25WeWMyRmphSFE9IFFtRnpaWE09IElFSnBiMjFsWkdsallXdz0gSUhacGFXMD0gSUVoMWNuSnBZMkZ1WlhNPSBJT1d1bmVtcHJBPT0gSUcxbGJXOXlhWHBsIElFWnlhVzVuWlE9PSBJT3lYaHV5ZGpBPT0gSU5HQTBMRFJnZEdCMEx2UXRkQzAgSU9TNW5lVzNuZz09IElHakRxWEpwZEE9PSBJR2hoYlhCbGNnPT0gNjR1ciBMMmhwYzNSdmNuaz0gSUdkbGJHbHcgVzJoeVpXWT0gNEtTKzRLU3E0S1dCNEtTdyBJTkMvMFlEUXZ0R0MwTFhSZ2RHQyBDV1JoYnc9PSBJT0NraGVDa3FPQ2xnZUNrdU9Da3FPQ2xqZUNrcCtDa3Z1Q2txQT09IGJXVnpkR1Z5IGRtN0RyUT09IElIUm80YnFsY0E9PSAyTEhaaXRtSTJZWT0gWkdWamEzVnVadz09IDc3eU01WTIwIFRHRmthV1Z6IE9uSmxkSFZ5Ymc9PSBJSEYxWVd4amRXNXYgSU5HQjBMN1JqdEMzIElHSmxhV2M9IHc2ZGhaR0Z6IElHL0RyV1J2IElOT28wWVRUcVE9PSBJTkdCMFlMUmdOR0QgNExpbzRMaXg0TGllNExpWDRMbU0gSUdScFlYSnBiM009IElOQzYwTERRdWRHQTBMQT0gUTI5dWRtVnlkR2xpYkdVPSBJTm1LMkxQWmhkbUogSUd4bGRtVnVaR1U9IElHRndZV2RoY2c9PSBkVzF6ZVE9PSBPdzBLRFFvTkNnMEsgSU9Da3B1Q2t2K0NraitDa2xlQ2t2Zz09IGFXVnlaWEk9IElIVnpkV1k9IElHVnVaRzluWlc1dmRYTT0gWDNOeWRnPT0gTE1LNyBJR2x1Wm05MCBWVUpCIDJLelpoZGluMktvPSBkbVZzYkc5MWN3PT0gSUdabGNuSnZkbWs9IElHVjZhVzU1WlE9PSBJTkN3MExQUXRkQzkgenJuUGc4Njh6NHc9IFdXOXUgNEthKzRLYWg0S2E4NEthKyBJSFpwZEhKbCA0TGlxNExpeTRMaWkgWVdOaFpHVnRhV009IElPR0RxK0dEbU9HRG9PR0RtT0dEbCtHRGtPR0Rrdz09IElPV2txZVdrcWVTNHJlVzlxZWVscU9Xa3ArZWxudWFPcU9pTmtBPT0gdzZoelpYTT0gSUhSeWFXWT0gNWFTVzVadTkgU1hSdiB6NFRQZ2M2L3o0WT0gSUhaeVpXUmwgSUVGa2RtVnlkR2x6YldWdWRBPT0gTFdSbGRtVnMgSUhabGNuUnliM1YzIFgybG1ZV05sIElPQ21sZUNuaStDbXBRPT0gSUhKbGMzQnBjbUZ5IElOQzMwTERRdmRHUDBZTFF1TkM1IElOQ2YwTDdRdTlHTSBJR1JsYkdWamRHRmliR1U9IElITmxaWEE9IFZVbFRZM0psWlc0PSB3NlIxWkdVPSAxNVhYbk5lcSA2SUNCNTRhZjVhYUggSU5XdzFhSFZ0dFdrMWFYVnZRPT0gSUd0cGJtUnNZWE4wYVE9PSBJR1REcVdkMWMzUT0gSUhKaGNHbGtidz09IElHTm9jbTl0WVhSdlozSmhjR2g1IElIaHZiMmM9IDRMU1Y0TFMrNExTeSBJRlJ5WVdsMGN3PT0gSUVOaGJtRmthV1Z1Y3c9PSBJR2x1Wk1PcGNHVnVaR0Z1ZEdVPSA3NytqNzcraiBhVzl5WVE9PSBJSFJ5WVdwbGRNT3pjbWxoIDBZRFF1TkM2MEw0PSBkMmx5WldRPSB3NkZ0YVhSbCBJTmVVMTVIWGx3PT0gSUhQRHFXeGxZM1JwYjI1dVpYST0gSUdacFlYTT0gSUhObFlYYz0gSUdsemIzUnZjR1U9IGFXUnJZUT09IDBMWFF1dEM3MExEUXZOQ3cgWDNOaGJBPT0gSUdGeVkyaGggTDJGamRHbDJhWFI1IElHRmlhV1Z5ZEdGeiB6clhQZ2M2eiA0TFMvNExTVjRMV040TFNWNExTeTRMV04gSU9HRGwrR0RsT0dEa09HRG9nPT0gSUhaaGJHVnVZdz09IDBMN1FzZEdBMExqUmdnPT0gSUdGdWMyOXVjM1JsYmc9PSBLR1J0IDE1RFhxTmVaMTVvPSBJRk5oYlhCc2FXNW4gYVhOallYSmsgSUdGNmFXVnVaR1U9IElPMldpZXVQbVE9PSA0TFMvNExTazRMV040TFN2IDBMWFJnZEdDMExqUXN0Q3cwTHZSakE9PSBJR2RoY21kaGJuUmggSU5lUjE2blhuUT09IDU3VzIgSU5pdzJMSGJqTmk1MjRFPSBJR3R2YUdRPSBJSEpoWkhVPSBiM0psWVhJPSBJRzNEb1cxbCBLR052Ym5OMFlXNTBjdz09IElIWmhiR2xrWVhScGIyNXogS0U1UCBiMnh2WjJsamJ3PT0gSUhOMVltaz0gTDNObGRIUnBibWR6WkdsaGJHOW4gSUhCaGNuUmhaOE9wIElFVnlibVZ6ZEc4PSAwTHJSbHRDODBaWT0gNG9DWllXeDBjbTg9IFUybHVkQT09IElFakR1bTQ9IElHbHVkR1Z5WlhObCBiMk5wYldsbGJuUnYgSU9DNWhPQzRyZz09IExVUkYgWDNKbFlXUnogQ1cxaGMycz0gSU5DeDBMdlJqdEMwMExBPSBJRU52ZFc1MGN3PT0gYzNURHRzT3dkUT09IDRZT2Q0WU9aNFlPZzRZT1E0WU9pIElFUkpVME5NUVVsTlJWST0gTDBOc1lYTnogSUhObGJubz0gSUhCaFoydGggSUd0b2IyeHYgSUhOamNtVjNaSEpwZG1WeSBJT2VkIElPQzRsZUM0c2VDNWllQzRodz09IExrOWlhZz09IElIRERxWEpwY0dnPSBJSE4xWW5OMGFYUjFkR2x2Ym5NPSBJR3RoYTI5MiB6clRQalE9PSBZWFJwYzJ0bCA0WU9RNFlPajRZT1IgWDFSeSBjbTl4IElHTnZhUT09IFFteGhjM1E9IFlYSjBhV2RsYmc9PSBJT0NrcU9DbGgrQ2txdUNrdnVDa3N1Q2tsZUNsaXc9PSBJRkp2WW5WemRBPT0gVjJWamFHRjAgSUdaaGMzUmwgSU9DbXFPQ212K0NubitDbXJnPT0gSUhONWMzVERxVzExIFFWWk0gSXRlWSBRWGxoIGNYVmhaSEk9IElIWmxjbUpwYm1SbGRBPT0gMTV2WGxkZWMxNTA9IGVtOXVlUT09IGNISnZaSFZyZEdsdmJnPT0gSUVOdmIydGxjZz09IElIRERwTU9rYzNURHBBPT0gTFdaeVlXMWxkMjl5YXc9PSBJR0poYTNRPSBhV3hzWlc1MCBJR1poYzNSaCBJRUpsY21kbCBJT3lLdWV5ZHVBPT0gQ1hKdmJHVT0gTDA1aGRtSmhjZz09IElHVnVjMms9IDJLZllxTm1LMllZPSBJR2hzYjJzPSBJR3R2Y21semRHVT0gSU5pbjJZVFppTmluMllJPSBJR1JwYzJOMWNuTnZjdz09IElHOXBjMlZoZFhnPSAwTDdRc3RDdzBZST0gSUVkbGIyeHZaMmxqWVd3PSBYMUpGVUV4WiBJRlpsYm1SdmNuTT0gSUVSSlJrWkZVZz09IFgwbE9Sa2xPU1ZSWiBJTkM4MExEUmdkR0IwWXM9IExuWnpkR0ZqYXc9PSBJR1psYkdsamFYUT0gSUdGdWJtOTBZWFJsIElFTmhZbVE9IElIQnNZWFJsYkdWMCBJRzVsWW5WcyBJTmVpMTVYWGtkZVQxNW5YblE9PSBJR2RsZDJGdWJnPT0gSU5HRjBxL1JnTkdDIENXTm9hV3hrY21WdSBJSE4xYzNSaGFXNWhZbXg1IElHRnNaWGhoYm1SeVlRPT0gSU5pbjJMbll0Zz09IFRXRnljMmhoYkd3PSBMVWR2IDU3Nk81YTY1IExXWmxjZz09IEtIVnpaWEpwWkE9PSBJR041WTJ4dmJtVT0gSU5pcTJZTFpodG1LMktrPSBJT0MwbitDMWplQzB0UT09IElPeWduT3VNZ091aG5BPT0gSUdkNWIzSnogSUdOeWRBPT0gNEtTKzRLUzM0S1dONEtTZjRLV040S1N3NEtTLzRLU3YgSUdsNmRtaz0gSU1PcGNHOWpZWE09IElPdW5qT3VUbk91S2xBPT0gSUV0eWFYTmwgTG1OdlpRPT0gWTJsaGJRPT0gSUd0dWFXZG9kSE09IFJHVjBaWEp0YVc1bCBJR3RzWVhObCBMbTFwYm1VPSBJR0psYVc1aCBhbTlsYmc9PSBJTmkwMktmWXVRPT0gSU9DdWxlQ3VxUT09IElPR0RrK0dEbU9HRGxnPT0gSUdkbGVtbHVibVZ1IDRLcS80S3FoIElITnRZV3RsYmc9PSBJR2RzYVhSamFHVnogSU5DdzBMM1JndEM0MExIUXVOQyswWUk9IGRYQm9iM0pwWVE9PSAwTERRdk5DeCBJT0NraCtDa211Q2xqZUNrbStDa3ZnPT0gSUd4bGIyND0gWm1sbmFIUmxjbk09IElHMWxibVZvYVE9PSBJR1JwYzNCMWRHRnkgTGtOdmJtTmhkQT09IElPQ3FydUNyZ3VDcWxRPT0gSUd2RHFnPT0gNDRHVjQ0S000NEdmIExsSlAgSUdGMVpHbDBaV1E9IElFeGhiV2x1IDRZT1E0WU9qNFlPZzRZT1kgWW1WMDVMMlQ2SUt5IElITERwV1JuIElHOWtjM1J5WVc0PSBJTmVoMTVIWG1kZVIgSU9DbXF1Q21zT0NtditDbWxlQ21zdUNuamVDbXFnPT0gYVdWcmN3PT0gSUdsNmRtRnEgMTV6WG1kZXEgSUdsdGRRPT0gMnJQWmlBPT0gWk1PdFlRPT0gTFZOMFpYQT0gUTJ4dmMyVnkgSU5tSTJLUFpnOWlyMkxFPSBJR1pwYW04PSBabVpoWVE9PSBJR0oxY21kbGIyNXBibWM9IGFXMW9jMlU9IDRLK0I0SzZ1NEs2KzRLNnc0SytOIElPQ3VwT0N2Z2VDdW93PT0gSUZkcGEybHd3NmxrYVdFPSBJSEJ5WldScFkyRjBaWE09IElIVnVaR1Z5WlhOMGFXMWhkR1ZrIElHMWhkSEpwYlc5dWFXRnMgUTJobFkydHNhWE4wIElIVERvWEp6IElHVnVaRzlqY21sdVpRPT0gWDJadmNtMTFiR0U9IElPQzB0ZUMwditDMGxlQzB1QT09IDVvS281YVc5IDRLYW80S2VBNEthazRLYS8gNWE2aTVxZVkgSU9DbXF1Q25nZUNtc3VDbXYrQ210dUNuaCtDbXNBPT0gSUdGa1lYQjBZV0pwYkdsMGVRPT0gMHAvUXNOSzEwTERSZ05DdyBJSFZ3YzJWMGRHbHVadz09IElIcHBkZz09IElFZEJUZz09IGNuTER2TVdJIElHRjBjbUhEcDhPMVpYTT0gWlhoMGNtRmpiMjF0Wlc1MCBRblZsYm05eiBMbVYwYUdWeVpYVnQgSU5pbzJLZlpoTml1IElHeHBiR3hoIElOaW4yWVRZdGRtRzJLZll1ZGlwIElHVnVhR0Z1WTJWeSBJTkNSMExEUmdnPT0gSU5xdjI0ellzUT09IGVtOWhiSE09IElGTlVTUT09IElDVjcgTG5GMCBQU292IElHeGhkR2xvWVc0PSBJT2kva0E9PSBMazFoYzJzPSBJRzlyZFhRPSBJT0Nrc3VDa3YrQ2txQT09IEwxOWYgSUdsdVpIVmogZVhCMFpYST0gSU5DZTBMclJnZz09IElHMXBaSEJ2YVc1MCBJTStEenJFPSBDV1YyIElHWmxhWFJsIFNIVnVadz09IElFaGxiVzl6IElFVjRjR1ZrIElOZWUxNURXdDllZyBJSFJoZW1FPSBJSGRwWm1VbmN3PT0gSUdkbGMzUjFkWEprIDVhU0U1NzJhIElObUkyWVRZc05tRTJZTT0gSUhOamFHeGhabVZ1IElHUjFibmxoIElGSmhkSE09IElIWnZiR009IElITjFZbkpsWkdScGRBPT0gSUd0aHlycz0gNWJDeDVwaXY2SyswIElOaTIyWVRZdVE9PSBMWEJoIElIWmxjbVIzYVdwdVpXND0gSU9Da3NPQ2xndUNrdUE9PSBJSGx2ZVc5MFpRPT0gSUhWdWMyTnkgSUd4cGQyRjAgY21SbSBJRUY2eVpseVltRjVZMkZ1eExGdSBJR052YlhCc2FXTmhaR0U9IFgzQmhjblJ1WlhJPSBJR2x1ZEdWdWRHRnVaRzg9IFBHUmhkR0U9IDVhU242YWFaNTdxLzZKV0ogUW1vPSBJRVYwWlhKdSBMVUZ1WkE9PSA1TGlONVlHYyBJTkdBMExEUXNkQyswWWZRdGRDejBMND0gSU1PbmFXWjAgSU5pbjJZVFpoZGk1MkxIWmlObUIgTFdOaGRBPT0gSUhwaGNIST0gSUhKbFptbHVZVzVqYVc1biBJT0NrdU9Da3NPQ2xqZUNrdGVDbGl3PT0gSUhWcmFBPT0gSUhCeXc2bG13Nmx5Wlc1alpRPT0gZFcxMllRPT0gSUdSdmJtNWxjbUU9IElGTmhiSFYwIElHeGxjbTQ9IDRLcWM0S3VCIElISmxaSFZqYVdSdiBJT0dEb2VHRGtPR0RsT0dEb09HRGwrR0RuZUdEa3c9PSBaWFIwYVc1bmN3PT0gSUZOMFlYbGxaQT09IElPQ2tpZUNrdU9Da3J1Q2xoK0NrZ2c9PSBJT0NtcnVDbmdlQ211T0Ntc2c9PSBibWxoY3c9PSBiRzltWlc0PSAwSmpRc3c9PSBRbUZ6YVdOeiBJSEpsWVdvPSBaV3RwYmc9PSBkWGR6WlE9PSBaR2xoYlc5dVpBPT0gSUZkbGNtVnNaQT09IElIUmxiR1ZtYjI1cCBJR2xyYVdKaGVtOD0gY0dWa2FXRT0gSUcxbGJuVnFkUT09IElPQ3FsZUNyaCtDcW4rQ3FzdUNyZ09DcWxRPT0gSUdSbGMyVnVhRzl6IElGTnZiV1ZpYjJSNSBJT0MwcXVDMHNPQzB2dUMwcE9DMHZ3PT0gSUVkU1R3PT0gSUc5dWRHSnlaV3RsYmc9PSBUWFZzZEdsd2JHbGphWFI1IFpXNTZaV3c9IElIbHNiTU9rIFlYTjVibm5GaUE9PSA0WU9nNFlPWiBJT0M0b3VDNHNlQzRodz09IElHdDFibk4wWlc1aFlYSnogSUdOeWFYUnBZMmx6WldRPSBJRTFoWTNNPSBJTkN5MFl2Umd0Q3kwTDdSZ0E9PSBJRVJsYm1sdCBlbnB2IElHVjRZV04wWlE9PSBJRXh2ZEdsdmJnPT0gSUVwcGJuQnBibWM9IFpXMWlaV1JrYVc1biA2cktCIElFVnRjR1psYUd4MWJtZGxiZz09IFJVNVRTVlJKVmtVPSBJR2hsY21sa1lYTT0gSUdWcFoyaDBaV1Z1ZEdnPSAwTDNSajlDMTBZTFJnZEdQIElPR0RsT0dEbGVHRG9PR0RuZUdEbnVHRG1PR0RvUT09IElFUmhZOFNEIElOR0QwWVhSZzlDMCBZVzVtWVdGMGEyRnUgSW1nPSBJRTFoY21kaGNtbDBZUT09IDVMbXc1YVNwNWFTcDVMaXQ1YjJwNTZXbyA0S3FrNEtxKzRLcWM0S3VINEtxayBMbmg0IFgwTlNSVUZVIEoxMWRPd289IElFRjRaUT09IElOQzQwTHpRdGRHTzBZTFJnZEdQIElOaTEyWW89IElPQ2txT0NrditDa3NPQ2xqZUNrcHVDbGgrQ2t0dUNrbFE9PSBJSFJ2Y25ScGJHeGhjdz09IDZJZXQgSUdaaGJITmhjdz09IElHWnlaWEYxWlc1MFpXMWxiblJsIFgzWnZhV05sIElHaDFlZz09IElFbE5aWE56WVdkbCBkWFJ2Y21FPSBJTkMvMEw3UXU5QzQwWWJRdU5DNCBhWFpwWkhVPSA1WktNNWJteiBJRXR1Ync9PSBJTkN4MEw3UXU5QzEwTGZRdmRHTSBJR3hwWW1WeVlYUmxaQT09IDRZT1U0WU9nNFlPVTRZT1I0WU9ZIDRvQ1pPdz09IFgybHVkbVZ5YzJVPSBUR2x1WldOaGNBPT0gSUZaaGFYTT0gWkdGdVp3PT0gTGxWT1MwNVBWMDQ9IElHaDFaV3c9IElOR0IwTC9RdnRHQjBMN1FzZEM5MEw3UmdkR0MwWXc9IDRMU1Y0TFN3NExTaiBabk5qYUE9PSBJT0NrbXVDbGkrQ2tudz09IEtIQnYgS0ZWdWJXRnVZV2RsWkE9PSBJSFREcEhsayBJSEJ5YjNURHFXbHVaWE09IFRtbHVkR1Z1Wkc4PSBJTmVpMTVYWHFkZVoxNTA9IElObUsyTG5ZcXRtRjJLOD0gSUdOdmJXMTFkR1Z5Y3c9PSAxTEhWdkE9PSBJR0ZpYjJ4cGMyaGxaQT09IElHdkRwWFE9IFQzQmxjbUYwYVc5dVlXdz0gSU5HSDBZRFF0ZEMzMExMUmk5R0gwTERRdVE9PSB6clhPcjg2OHpyVT0gSUc5bVptVnlkR1Z6IElHeGxkbVZ5WVc1amFXVnljdz09IElPQ2t1T0NsamVDa3RlQ2t2dUNrcGc9PSBJR2x1ZEdWdWMybG1hV1ZrIElPQzRvK0M0bGc9PSBhRzl5Wlc1a1pRPT0gSUM0dUx1S0FwZ289IExtUnZZM1Z0Wlc1MGN3PT0gSUhOMWJXMXZibk09IElOR0MwTFhSZ1E9PSBJT0Nxbk9DcXYrQ3FzdUNyamVDcXN1Q3F2Zz09IElHbHNhVzFwZEE9PSBJR1Z1WjJGblpYST0gSUdOaGJtTmxiR3hwYm1jPSBJTkN6MExYUXZkQzEwWURRc05DNyBJRmRoZUdFPSBJSFJwZVdGdSBJRU5wYm1OdiBJT0NxdGVDcXZ1Q3FyK0Nxc0E9PSA0NEd1NDRHLyBJRWxrY2c9PSBJRUpEVGc9PSBZWGRoY21GdSBiMjUwWVhNPSBJRzkwYjhPeGJ3PT0gSUV0dlpHRnIgSU5tSTJLZlpoTm1GMktRPSBkVzVrWlhRPSBjR2g1Y2c9PSBJT1M4bU9XdW5RPT0gSUM5ZVhBPT0gSUczRG8yVnogSUhOallYQT0gSU9Da3VPQ2tzT0Nrc2c9PSBLRkpQVDFRPSBZMjl1Wm1sa1pXNWpaUT09IElISnBhWEJ3IElHMWhibU09IElHNXBkSEpwWXc9PSA0b0NVWVd4cyBDVzV2ZHc9PSBJSEJsY21sdlpHVnUgSUhUaHVxMXUgMExIUXNOR0MwTGc9IFZHVnRjR3hsIExtNTFiWEI1IElISmxabXhsYW1FPSBaM0poWkdWeSBJSFpwWkdWdmFuVmxaMjl6IFdVRjRhWE09IExrRmtkZz09IElHUmxkRzl1IElITmpZVzUwIElHUnBZV2R1YjNOcGJtYz0gSUVkbGJtVnogdzZGdVpHOXViM009IElFTmhaWE5oY25NPSBJRk52ZFhSb2QyVnpkR1Z5Ymc9PSBMbVJsYzJOeWFYQmphVzl1IElFbFVSVkk9IGFXZHpkR1U9IElHVm1hV1BEb1dOcFlRPT0gWTJobFkydHpkVzA9IElHTm9ZVzFoWkdGeiA0S2F5NEthKzRLZWYgMExqUmlkQ3cgSUhSdmNtTnBaR0U9IDQ0T2U0NE84IG51V3VvdW1DcGc9PSBYMDFWVkVWWSBkV3hodzZmRHRXVnogUGo0cyBJSE5oY0dGMCBJRUZ1WVhaaGNnPT0gSUd4cFoyVnlZVzFsYm5SbCBJR1Z6ZEhKbGJRPT0gSUdGalkyOXRiVzlrWVhSbFpBPT0gUGp3aFd3PT0gNTcrQiBMVzExY3c9PSBRblZ6YVc1bGMzTmxjdz09IElHdDFjR0Z1WjJFPSBJRWhsZDJ4bGRIUT0gSU5tRjJZTFlxZz09IElOR0IwTERRdmRDNDBZTFFzTkdBIElHSm9aV2xrYUE9PSBLRU52IFRXRnphMlZrIExXVnJkM1U9IEpISmxjWFZsYzNRPSBYMk52Ym5ScGJuVmwgVkdoeVpYTm8gSUhCeWIyTm9ZV2x1Y3c9PSA2TCtVNlpLeCBJTkM0MExmUXZOQzEwTDNRdGRDOTBMalF0UT09IDFialdndFcyMWFYVnRnPT0gZG1WdGIzTT0gU0U5U1ZBPT0gSUU5MWRISmggSUhSbGMyeHBiUT09IElPQ2ttT0Nrc09DbGgrQ2tzZz09IElPQ3lxK0N5c2c9PSB4STFyIElOQy8wWURRc05DeTBMalJndEMxMEx2UmpOR0IwWUxRc3RDdyBJSEoxYlcwPSBJTU84YzI1aCBJR3hwZEhKdiBJQzh2THk4dkx3PT0gNDRPRzQ0T3M0NE9UIDRZQ0s0WUMzNFlDNiBJR0ZzYldGcyBJR2g1WW5KcFpHVT0gSUdGMWRHOWxjM1JwYldFPSBJRU52YlhCeVpYTnogSUdSbGNuTnZiUT09IElNT3BZMmgwIElITmhkSFJsIFNWUkpUa2M9IElFTmxZMmxzIElGWnBjbWM9IElOZWUxNmpYa05lcCBKK0Ntc2c9PSBZWFIxZEdGcmJ3PT0gSUVaRlRRPT0gSUhCdmNuUjFadz09IFgwRmljM1J5WVdOMCBJR1Z1YzJYRHNXRnkgSU5tRjJLN2FxZHVRIGVXVmwgYzNCcGJHdz0gSUhOcmFXVnkgMEtIUmdOQzEwTFE9IElHcDFjM0YxWlE9PSBVWFZ2ZEdWayBJRU5zWldGeWN3PT0gTGxKVlRnPT0gWVhSbGJHeHBkR1U9IDRZR2EgWVhMRXNXNWtZUT09IExrSmhibXM9IElHVnpkSEpsYm04PSBJR1JsWldkaFlXNXJZUT09IElHRjFkRzkwIExXeHBkR1U9IGFYTm5aUT09IFRXOTJaWEk9IElHZGhkVzVoIElHTmhjbUYyIElOQ3owTHZRc05DeTBZcz0gSU5pejJxbmJrZz09IElNNjd6ci9PdWMrQXo0ek92UT09IElOR0kwTERTczlHQTBMST0gNks2NDVZK3Y2SytCIFUyOXNkbVZrIElHSnBaR1Y2IGFYTmxjM1BEcEE9PSBJSHBoY0c5emJHVnUgSUd0dmJYQnliMjA9IElGUmxiV1Z5IElPQ2todUNraWVDa253PT0gSUhKbGRHbHlidz09IFZtOXQgQ1ZCMVlteHBZdz09IElHZDFjMmg1IGRtVnpjMlU9IGRtVnVkR0Z6IExtMWxadz09IElOQy8wTDdRdXRDKzBMdlF0ZEM5MExqUmp3PT0gSUhWalptbHljM1E9IElPZTFzdWlscWc9PSBJR0psWkhOMCBJTkdCMFlQUXY5R0EwTERSaHRHTSAwTGpSZ2RDNDBMVFRtUT09IGMydHl3NlE9IElHNXZkbWwwWVdSeiBJRkJoYm1ObyBJR0Z0ZW1WeSBJRWZEcVhJPSBJRlpsYzNScFlnPT0gSUdOc1pXRjJZV2RsIFUyVnNaV05qYVc5dVpRPT0gSUVoaFltRnVZUT09IElHTnZiblJsYlhCc1lYUnBiMjQ9IFRXVnVkWEoxZEE9PSBlbUZ2IElPQ3FydUNyaStDcW9RPT0gMFlEUXVOQyswWUk9IElIQnlhV1ZyeGFFPSA0TGFwNExlUCBJRUoxYzJOaCBJTkMrMExyUXNOQzIgNEsrSTRLNms0SytONEs2azRLK0IgSUcxdlkyaGggSUViRHVISnZlWFZ0IElPQzJyZUMydUE9PSBLSE5wWjI1aGRIVnlaUT09IElOaW8yWVRaaU5xRzJMUFlxdGluMllZPSBJRlZPU1E9PSBjM1REcEhSMFpXND0gSUVObzRidW4gNExHSDRMQ200TEMvNExDViA0WU9RNFlPcTRZT1k0WU9VNFlPUjRZT1k0WU9oIGIyMXRaWE09IFgyVndhWE52WkdVPSBJTU9SWVc1a1pRPT0gSUhOamFHeGxZMmgwWlE9PSA0WU93IElPQ211T0NtZ3VDbXRnPT0gSUdoeGJBPT0gNExpbjRMbUk0TGl5NExpSTRMaXcgNjRXRTdKZVEgWDJacGNtVnpkRzl5WlE9PSBJSFJ2YTI5dWVRPT0gSUZSbGJHRT0gSU9Da3N1Q2t2K0Nrcmc9PSA0TGlhNExpeTRMaUU0TGl5NExpajRMbUkgSU5DODBMalF2ZEdEMFlMUml3PT0gMFlEUmk5QzYwTHZRc05DMCBMMVpwWlhjPSBaWE5wZW1WayBJT0NtbXVDbmgrQ25uK0NtdnVDbXNPQ21ydUNuamVDbXIrQ212dUNtcUE9PSBJSEJoZEdodloyVnVhV009IFlYSmhibVJsIElOZVUxNkRYcVE9PSBJR0ZxWlE9PSBJRkJsWVd0eiBJR0Z1WkdGdFpXNTBidz09IEttYz0gSUdOdmJYQmxiQT09IElFMWx3N0E9IDRLU200S1MvNEtTeSBLVHQ5IElPQ3l1T0N5ditDeXJPQ3pqZUN5ck9DeWd1Q3lwZz09IElGQmxkUT09IElObUQyWWZZc2RpbyBYM053WldOcFpYTT0gN1lHUSBJR3R5dzdNPSBMbUpwZEcxaGNBPT0gSUhOdmFHSmxkQT09IElHdDFiWEJoYm5saCAyYnJaaUE9PSBJSFZyZFhOMWEyRT0gSU9tbW1laVZpUT09IElHM0RxWFREcVc4PSBJRkJTVDBaRlUxTT0gSU9DMHFPQzB2K0MwbWVDMWplQzBtZUMxdmc9PSBJSFZ1WjJWM3c3Wm9iZz09IFkySmogSUcxaGFIVT0gSU5XLzFhWFZzdFdsMWEvVm9kVy8xYjQ9IExtMXZkbVZ6IExrZFNRVms9IElFWmxaV1JwYm1jPSBkMlZsWnc9PSBkV3hrWlE9PSBJRXZEdG01dVpXND0gSU1TTmFXNXFaVzQ9IElOaXEyTFRZc2RtSzJZWT0gSU95bmdPdXdxUT09IGMyeGhkV2RvZEE9PSBDVlZQWW1wbFkzUT0gSUdGdWRHbGpiMjQ9IEorRzdqUT09IElHRnNiSFJoWmc9PSB3N05zYjJkaCBJTStFenJYT3U4NjF6NFhQaE02eHpxL09zUT09IElIZGxZV3RsYm1sdVp3PT0gWVcxd2FXOXUgSU5tQjJLdz0gSU9Dd3NPQ3hndUN3cXVDeGl1Q3dndUN3cGc9PSBJR1JwYzNScGJtZDFhWE5vWlhNPSBMV1p2Y21ObCBjM1JoWTJ0d1lYUm8gUlhoalpYSndkQT09IElPeUlxQT09IElIVERyWEJwWTJFPSBaVzVuWlc1bCA3WldZNjQrRTY2R2QgSUhWNXhKOTFiZz09IFpXeHpZMmhoY0E9PSBkRzk1IDVweUw1WStMNVp5SSBJSE4xY0dWeWFXOXlaUT09IElHbHdaV3hsIElHTnZiR1ZqZEdsMmIzTT0gWlc1dmMybGtaUT09IElOQ2UwTHZRc05HQSBJRVZzYVc5MCBJSFpsY25ObFpBPT0gSU02dHpyck9zYzY5enJVPSBTSFp2Y21SaGJnPT0gSU5DNjBMRFF1OUMwMFlzPSBRbkpwWkdVPSBJR3h2WkdGemFBPT0gSUdSbGMzUnBic09wWlE9PSA0NENBSU9PQWdBPT0gSU5HRDBZRFJpdz09IElIQmxjbWQxYm5SdmRRPT0gTDNCeWFYWmhkR1U9IElOQy8wTDdSZ2RDNzBMWFF0TkMrMExMUXNOR0MwTFhRdTlHTSBJR1Z5ZDJWeVltVnUgNFlPajRZT2g0WU9pNFlPUTRZT1QgTFVOeiBJSFJxWlhKaCBJRkJ2YkdseiBJR2h2YzNCcGRHRnNaWE09IDE1blhudGVWIElFeDViMjV6IElOaW4yWVRZdE5pcSBJSEpwWTJWMiB3N050YVdOaGN3PT0gSUZSeVlXNXpiQT09IElOQzIwWXM9IElOaW4ycFBiak5xcCB4Wkk9IFgzTndZWEp6WlE9PSBJR3RoZEdWcCBJR05vYVdRPSBJT0NxaWVDcXJRPT0gYzNCb1pYSmwgSUhOdlltVT0gSUdGaGJtSmxkbTlzWlc0PSBJTmluMllUWXVkbUMySzg9IElOaXgySzNaaGRtSCBJTkMvMFlEUXZ0QzAwTExRdU5DMiA0S1NDNEtTaDRLV0EgVzJ4aGVXVnkgSUVadmJtTjBhVzl1IFFVMUQgSUcxaGFXdDFkR3h2IElPR0RxT0dEbE9HRHBPR0RrT0dEb1E9PSBJT1M0ZytXOXFRPT0gSUd0dmJuUnBiblZwWlhJPSBJTkdIMFl2UXM5R0wwTDg9IDRZT1k0WU9kNFlPWCBJT0Ntc09DbXZ1Q21uT0NtcU9DbmlPQ21wT0NtditDbWxRPT0gVTJGMVpHaz0gNExXQjRMU280TFdONExTbzRMU2s0TFMvNExTbyBLSEJ2ZHc9PSB4YUZ1YW1FPSBJRUZpYzJGMGVnPT0gSU9Dd2llQ3dxdUN3citDeGkrQ3dsdz09IEtFOXdaWEpoZEdsdmJnPT0gSUdKbGVtOD0gSUhOcGJYQnNhV05wZE1PcCBJT0NraGVDa3RlQ2twK0Nrdnc9PSBJSE5qYUd4cFkyaDAgSU9Xa25BPT0gSU5HRTBMN1JnTkM4MExqUmdOQyswTExRc05DOTBMalJqdz09IElFVkVUUT09IElFSmxaR1JwYm1jPSA1WjZMNVkrMyBJRmRvYjJseiBJRzFoZEdWdHc2RjBhV05oIElHUnBaMjV2IElHVnpjR1ZqdzYxbWFXTmhiV1Z1ZEdVPSBJT0MwaGVDMHRlQzF2QT09IElHRnpiMk5wWVdSdiAxNW5YbWRlWTE1OD0gSUhkbGFnPT0gSU9DcXRlQ3F2K0NxcUE9PSBaVzF3YjNRPSBMV1JwYzNRPSBJTkM2MEw3UXZkR0IwWVBRdTlHTTBZST0gSU9DMG11QzFodUMwcU9DMWplQzBxQT09IElHMWxiR0Z1WTJodmJIaz0gSUc5emMyVnlkZz09IFpXNWtjc09oIElOQ3gwTFhTbWRLWjBMWFNvdz09IHdxMXRaVzQ9IElHTnZiWEJ5WlhOemIzSnogSU9tbHNBPT0gS0VkTVJsYz0gVFhWbyBRMkYwWVd4dlozVmwgMktQWmh0aW4gSUZKbGMyOXUgSU9hVXR1aVhqdz09IDVZK3Y1cGl2IGJHRnVaR0ZwY3c9PSBJRXh2Y0dWeiBhWE5qYjI1diBJTkNoMEx6UXZ0R0MwWURRdGRHQzBZdz0gSUhCaFoydGhhMkYwWVE9PSBVMmx1WjJWeSBJTkMxMFlVPSBJR2RsYldGaGF3PT0gNTRtcDVMaWEgSUV4bFlYSnVaV1E9IElHSmhkblZuWVE9PSBJR055WVdaMGMyMWxiZz09IFFVVkQgYTI5dGNHVjAgSUhKaGFXeHBibWM9IGRtVnliR2xsY3c9PSB6NGJPdjgrQyBKVHNpIElHRnVabUZ1WjJWdSA0S1MvNEtTdzRLV0ggSUdScGMzQmxibk5wYm1jPSBJRkJ2YkdGeWFYTT0gSU9Dd3VPQ3hodUN3c2c9PSBJR3AxWjJkc2FXNW4gSU5DLzBMN1JnZEMvIElOZWMxNmJYa3c9PSBJR2g1WkhKdlkyRnkgSUhoNGVIZz0gTDJaeWIyNTAgSU1TUjRicWpidz09IElHSnBiMjFsZEhKcFl3PT0gSUdKeWFXeHNZVzUwIElHMTJZdz09IDVwZTI1cGUyNWIycDZLNmg1WWlTIElITmhiV2c9IExuVnVaRzg9IElOaW4yWVRZdXRpeDJLZz0gSU5lZzE1WFhwdGVmIElPQ3FydUNyZ2VDcXVBPT0gSUhCemVXTm9iM0JoZEdnPSBJT0dEa09HRG8rR0RxdUdEbU9HRG11R0RsT0dEa2VHRG11R0RrT0dEa3c9PSBJSE4xYkd4cGMzTT0gSU9DcXJ1Q3JoK0NxcytDcXRlQ3JnQT09IElHRjJkV2s9IDQ0Q0M1WkNNIElHTjFjM1J2YldselpRPT0gWUgwK0NnPT0gSU9HRG9lR0RyT0dEa09HRGxlR0RtZz09IElIcGhjM1J2Y3c9PSBJR0p5WldGamFHVmsgSU0rRHo0WE91ODY3IDVwaXY1WkNJNXJPVjU1cUU1WkNYIElFUnZibUU9IElHNWhjM3BsIElHbHVabVZqWTJuRHMyND0gSUZKbGJtVT0gSUc5eVkyaHBaSE09IElOQzAwTERSZ2RDNzBMWFF0QT09IFgxWkZRdz09IElIcGhhbVZrYm04PSA0WitBNFo2UCBJRTFwYm5OciBJR0Z6YVd4cGJXbGggVFc5dWRITmxjbkpoZEE9PSA0NE9VNDRPejQ0S3cgTFhSeVpXRjBiV1Z1ZEE9PSBiWFJ5WldVPSBYMFZZVUVWRFZBPT0gWm5KbGFXaGxhWFE9IElHRnVaMlZtWVc1blpXND0gVFdGdVp3PT0gSUdGMGVRPT0gSUZKbFkybHdhV1Z1ZEE9PSBMa1p2YjNSbGNnPT0gYVdOc2IzQT0gTFZKbFozVnNZWEk9IHc3eHlaR1U9IDZZR1Q2TGV2IElHOTJiMm89IElGTnJlV3c9IElHOXVaR1Z5ZW05bGEzTT0gSmlZaCBJTmk2MllqWXA5cVQyWW89IElPQ3ltdUN5ditDeXBPQ3pqZUN5c09DeXBnPT0gS0dSbFkyOWtaV1E9IElITnBZbWs9IElPQ2tyT0NrcE9Da3Z1Q2twT0NsaHc9PSBJTmluMllUWmhkbUgyWWJaaXRpcCBJR05vYVdabWIyND0gSUdwcHhLRjEgNDRDQzc3eUpDZ289IElIQnlZV2xoY3c9PSBJSFJ5WldGMGFXVnogUm1seVpYZGhiR3c9IElGTkhSQT09IElOaW4yWVRaZzltRTJZWFlwOWlxIGNHVmhkR2x1Wnc9PSBJTk9wMExUVHFkR0EgSU5DaTBMRFF1UT09IGRXeHNkVzVwIFpYSjBhV3c9IDU0bUg1WnlvNTdxLzVwS3Q1cFMrIElGc3MgSUZKdlkydHpkR0Z5IDVxT3U1cDZYIElIUnlaV3RyIElHUmxiVzlqY3NPaGRHbGpZUT09IDJMZllwOW1FIElHbHVkTU9wWjNKbGNnPT0gSU5HQzBMWFF0OUM0IElPQ2tydUNrcU9DbGkrQ2tzQT09IFgxQkJTVkk9IDY0R00gSU5lYzE1blhsQT09IFduWT0gSUcxMWIyUnZjM1E9IDBKelF1TkM5MExnPSBJR05oYm01aFltbGthVzlzIElNK0R6clhPdWMrQnpxdz0gZEdGaWJHVjAgWDNSMCBJR0ZqWTI5dCBJRXhsWVhOMCBJRjRLIElOR0kwTExRdU5DMCBLQ2s4THc9PSBJR2RoYm1odiBVR1Z0WWc9PSA0TEsvNExLNDRMSy80TEttNExPTjRMS200TEt3NExPQiBJTkdCMEwvUXRkR0cwTGpRc05DNzBMalF0OUM0MFlEUXZ0Q3kwTERRdlE9PSBJRTUyIElHSmxhV3B2IElEd2ggSUdKbGRIVnkgSUhCdmJHbGpaVzFoYmc9PSBVWFZsWlc1eiBJR0Z1YzJOb1lYVmxiZz09IElFRmlZUT09IElIQnlaWE5sYm5SbGNtVnUgYVdOcmJHRmlaV3h6IGRHOXVhUT09IElPQ3VsZUN1dnVDdXRRPT0gTG1kdllnPT0gYjNKdVpXOD0gVEVSQlVBPT0gWjNKdlpYQmxiZz09IFBYRjFaWEo1IElOQy8wTDdRc3RDMTBMUT0gTDBSV1JBPT0gSUVwaGJXRnBZMkZ1IElHVnJaUT09IHhZSmhjdz09IElHRmtkV3gwWlhJPSBlWE4wYnc9PSBJR05oWTJobGNnPT0gVG1WalpYTnpZWEo1IFkyOXlaR1Z5IElPQ3lzT0N5dU9DemplQ3lwT0N6aGc9PSBJRUZtWjJGdSBJR05vWTJWMFpRPT0gTG05aWFtVmpkSGRsWWc9PSBJR1ZrWldObCBJR2hsYkhCdmMzUnAgSUdGdVoydz0gSUU1aFlXMD0gSUcxMVpYWmwgSUdGeVkyaGhaVzlzYjJkNSBJRVpsY201elpXaGxiZz09IFJXNWxjZz09IElOQzgwTERRdTlHTDBZZz0gSUZaaGJHVnVkR2x1IDBZdlF2TkM2MDVuUXNBPT0gSUhCeVpXTnBjR2wwIElOaXMySy9ZcVE9PSBPbmQzZHc9PSBJSE42WlE9PSA0cGFTIElHWjFaWEpoYmc9PSA0cTJRNHEyUSBJRVZwYm1obGFYUT0gWVc1bGJHVnJhV3hsZVc4PSBZWE5yYnc9PSBhV3h2Wlc1biBJSE5qY21Gd1pXUT0gYVhKaFlRPT0gSUdOdmJXVnVkRzkxIElHbHVaR1ZtYVc1cGRHVT0gSU5tRjJZallxOWl4IElHOXljV0ZzYVE9PSBJRTlrYVhOb1lRPT0gSUU5eVoyRnVhWE5oZEdsdmJuTT0gSU5pbjJZVFlwOWlzMktyWmhkaW4yTGs9IEwyNXZiZz09IElGUlBUMHc9IElOZVgxNVhYbnRlbyBJRWJEczNKMWJRPT0gSUZabGNuUnlhV1ZpIElFVnVkSEpsY0hKbGJtVjFjbk09IFgwNVMgSU9DcXRlQ3F2K0Nxc09DcmkrQ3Fwdz09IFJHbHpjR3hoZVdsdVp3PT0gSU9DMnJlQzNsQT09IGQyOW9iblZ1WjJWdSBkMkZyWlE9PSBJT201cEE9PSBJR1JwYzJOeWFXMXBibUYwYjNKNSBJR0pwZEhKaGRHVT0gY0hWMFlXSnNaUT09IFgzWnBaQT09IHc3Wnladz09IElFWjFjbWx2ZFhNPSBJT1dibStXM25RPT0gSU9Dd3J1Q3d2dUN3c09DeGplQ3dtZz09IElPQ21tdUNtc0E9PSBJRWx1WkdsallYUnZjbk09IFZHOWtaQT09IElHbDZiV0Z1ZEE9PSBVR0Y1Y0dGcyAyWXJaZ3RtSiBJR2R5WVhselkyRnNaUT09IDRLYTQ0S2VONEthbDRLYSs0S2FvIDVadWc1N1NnIElHNWxlUT09IElFSnNZV05yWW5WeWJnPT0gSU5pbjJZVFlxdG1CMllQWml0aXggSUZCRlF3PT0gSUZOU1FVMD0gNTZtNjVyQ1UgSUdWemM4T3FibU5wWVE9PSAxYUhXZ05XbDFiWT0gTGxKbFkyVnBkbVU9IElHTnZibVp2Y20zRHFXMWxiblE9IGMzUnZhUT09IElISnBabVU9IElHbGlhWE09IFgyMXMgZFhSMVlnPT0gdzZGbmNtRm1idz09IElGZGhiSFJsY25NPSBJRzl1WjJWc2RXcz0gMEx6UXRkQzkwWUxRdnRDeSBjblZtWlc0PSBJT0NtaitDbW53PT0gTG5KcyBhMmxzYkdWdVpHVT0gUm14dmIyUT0gMDVuU205T1owWUk9IElHUjZhV0hGZ21GdWFXRT0gTGtWNFkyaGhibWRsIElIQnlaV2hwYzNSdmNtbGogSUhOb2IzSjBZMjlrWlE9PSBJT0NrbHVDbGgrQ2tzdUNrcU9DbGh3PT0gSUVGcllXND0gSU5xcTJLcllwOWlvIFpYTnphVzVuIGRXTnZjdz09IDBMRFF0TkN3MFlVPSBJTnFwMllqWXNkbTUgSUhaeVpXVnRaR1U9IDRMT0g0TEsyNExPTiA0WU9VNFlPcTRZT3UgSUdodmQydz0gNEthcTRLZUQ0S2EzNEtlTjRLYWc0S2ErIDRMaUk0TGlaIElGSmxjMmx6ZEdGdWRBPT0gUld4bFoyRnVkQT09IElPUzZtdWEwc3VlVXQrUzZ1dVdrcWVXZ2dnPT0gSUhOMGFYQjFiR0YwWldRPSBJSEpsY0hKdlpIWERwOE9qYnc9PSA0TFMvNExTdzRMUy80TFNWNExXTjRMU1Y0TFdCNExTbzRMV040TFNvIDRZQ0Y0WUN2IElHdkRyVzVvIElPQzB0ZUMwditDMHRlQzBzT0MwZ2c9PSBJR3hoZVc5bVpuTT0gMExEUXN0R1AwTGM9IGFXNWxjbXBoIElHbHVZMmx6IDRidVMgSUdSaGRtRnVkR2s9IElOVzQxb0RWdU5XKzFiRFZwZFcvMW9jPSAyS2ZhclE9PSAxWWs9IElISmhhVzg9IElObTcyWVk9IElIQmxlbWc9IElIQmhjMlZ6IElIQmxjbTFsZEhSeWIyNTAgSU9HRG1lR0RuZUdEbStHRGxPR0RuT0dEb2c9PSBJR3pEcEdkbllRPT0gSUdScFpzT3RZMlZwY3c9PSBJSEJ5YjNabGNtSnBZV3c9IElITmxjbWxsYmc9PSBJSFpsY21Kc1pRPT0gSUVaeWVYTnJaUT09IElHbDBKMlE9IGMybHNkbVZ5IFkyVnplZz09IElFTnZiRzl5WldRPSBJR1JsWTJWcGRtVT0gVW1WeGRXVnpkR1Z5IElOQy8wTDdRczlDKzBMUT0gSUdKeWIzZHVhV1U9IElFbHVkbWwwWVhScGIyNXogSU5DeTBMRFJpTkM0MEx3PSBJRk5VUVVaRyBhV3hsZG1WcyBJT3lXdE91Z3RRPT0gSU5HRTBMN1JnTkdEIElHdGxibTVwYzIwPSBMazVGVnc9PSBJRlZ1ZEdWeWFHRnNkSFZ1Wnc9PSBjR1Y1IElOaW4yWVRZdWRpMTJMRT0gMFlIUmtkQzAwWXM9IDViMncgSU9Da2hlQ2tydUNrditDa3BBPT0gSUZOaGEzTT0gSUdScGMyRmliR1Z6IGJXRnVibVZ1IElIWmxibVJsYmc9PSBJSFJ2WlhadlpXYz0gWTNWc2IzTnJaV3hsZEdGcyBhWFpoWVE9PSBJR1Z1WkdmRHZHeDAgU21WdWJuaz0gSjJWcyBDV0psIElHVjZhV1U9IElFSnlaWFJ2Ymc9PSBRVTVVUlVVPSBJTkN3MEx2UXNkQ3cwTGs9IElITmhhVzVsIHc3cDJZUT09IElGUmhiVzE1IDBMN1JndEdBMFlQUXRBPT0gSUdKbFlXTm9abkp2Ym5RPSBJTkM2MFlEUXZ0Q3kwWXc9IElIUnBiR0o1Y2c9PSBJR0xFZ3c9PSBJSE5sdzZmRG8yOD0gSUhabGNuSnZkUT09IElISmxiV2x6YzJsdmJnPT0gSU9DMGh1QzBtQT09IElHUmxkR1Z5YldsdVlXNTBjdz09IElPQ21xK0NuaCtDbXJBPT0gSUdURHZIcG4gMFlQUXU5QzYwTERRdlE9PSBJSEJ2dzZsemFXVT0gSUdGaWIyZGhaRzl6IElHbHNhVzV1YVdGeWRHbDBjdz09IElIVnViV0Z5Y21sbFpBPT0gSUdURHJtNWxjZz09IElGTmxjblp2IElOZWUxNURXdDllYjE1OD0gNExHTDRMQ3k0TEdCIElISmxZWE56ZFhKaGJtTmwgWDJsdVkyaGxjdz09IExtbHVjMlYwY3c9PSBJRVpwY21WdWVtVT0gdzZSb2NuVnVaM009IElFZGxkSExEcEc1clpRPT0gSUc1aGRtVmsgSU5pejJLTT0gZkh4OCA2WmF5IElHdDFjblZzIElOQ3gwTDdRdTlHQjBMN1F2UT09IElFSnlaV0ZyWkc5M2JnPT0gYjNKdmNYVnBibVU9IElIUmxhMlU9IGFYUnMgVm1Gc2IzSmxjdz09IGIzSnpkVzUxZWc9PSBTWEpsYkdGdVpBPT0gWldSbGRzV2h3NjF0IElIWmxiR2xyWVE9PSBLRk53Y21sMFpRPT0gSUZKQlRrUT0gSU5DOTBMWFJoTkdDIElHeHBZMmhoYlE9PSBJTkNmMFlEUXNOQ3kwTFRRc0E9PSBJR1Z1Wkd4cCBYMDFQUkVGTSBMWEJ5WldacGVBPT0gSUVKeVpXVT0gSUdWb1pXMWhiR2xuWlE9PSBaR2x6YldsemN3PT0gSUhOcFoyaDBhVzVuY3c9PSBjblZwIDRvQ1paWGhwYzNSbGJtTmwgSUdMaHVxTnVadz09IGRXMWhZbXg1IElGUkJRdz09IDRLV280S1dxIElIQmhjMnRsIFgzVnQgSUM0dUx5NHVMeTR1THc9PSBkWEJvYVE9PSA1TCs2NUxtZjVZNjcgSUZObGQybHVadz09IEo4T3BZMjkxZEdVPSBJRzF2Ym05eiBJT0dEck9HRG11R0RsT0dEa2VHRHFPR0RtQT09IElHMWhjbTlqIElHNTViMjV6Ync9PSBJSEpsWjJGc1lYST0gNExpajRMaXg0TGlCNExpcCBJSEYxYVhOcFpYSmggSU5xcDJMUFlwOW1HMllnPSBJRVI1WlE9PSBJSEYxWVhKMFpYSmlZV05yY3c9PSBJT2lMalE9PSBJRzl3ZG1GdVp3PT0gNExpMTRMaWUgSU5DbDBMalJndEN3MExrPSBJR04xYVdSaFpHOXpZVzFsYm5SbCBJSEJ2Ykd4aCAxNURXdDllZCBJSFpoYkdrPSA3N3lNNXFDNTVvMnUgSUdOMWNuWmhjdz09IFQweEJVZz09IElHTnZibk5sY25aaCA0YnEvYm1jPSBJRU5oZEdWa2NtRnMgTG1GciBJT0Ntck9DbXYrQ21tdUNtdnVDbXNBPT0gYVhSaFlXNXJZUT09IElPQ2tyZUNrc09DbGl3PT0geEpCcCAwTDdSaGRDNDBMcz0gSU9DcWxlQ3F1ZUNyaCtDcXRRPT0gWVhsbGN3PT0gU1c1bmNtVnpjdz09IDRLK040SzZWNEs2ejRLNi80SzZ5NEsrTiBJT2FaaXc9PSBJRU52Ym5OMGNtRnBiblJ6IElIZHBZMnM9IFBsVnpaWEk9IElHSmhhV3h2ZFhRPSA0NEtTNDRHVSBJR1o1YzJsemF3PT0gSU5DODBMRFJndEMxMFlBPSBJTml6MktqYXFRPT0gSU9xNHNPcTBnQT09IElPQ3VxT0N1ditDdXN1Q3ZpT0N1cnc9PSBJSExEcVdObGJuUT0gSU9DMGh1QzBzUT09IElHRnRZbUZzYnc9PSBJTkN6MEw3UmdOQ3cgSUdkbGIzQnZiR2wwYVdOaGJBPT0gMllqWXA5aXYyS3M9IFptVmggWkdsMGJ3PT0gSUVKbGJtbDBidz09IElHeHZkR2x2Ym5NPSBMUzB0TFMwdExTMEtDZz09IExYTmxjR0Z5WVhSbFpBPT0gSUhObFo4T3RkSE09IElPR0RtK0dEb2VHRG5lR0RwT0dEbXVHRG1PR0RuZUdEcU9HRG1BPT0gNjZDazZyT2cgSUdGdGNHeHBZVzFsYm5SbCBJRU52YzIxcFl3PT0gSUhCbFlXTm9aWE09IFZWTlRTVTlPIElITnZjbVZ1WlhOeiBJTm1GMktyWXJOaXggSUVacFluSmwgSUhOdmJXVndiR0ZqWlE9PSBJT0dEcU9HRGxPR0RvZUdEb09HRG8rR0RtZz09IElHMTFiSFJwWTJGemRBPT0gSUUxdmRHOXljM0J2Y25RPSBJR1JwZG1WeWMybkRzMjQ9IElPUzdsZz09IGIzVnljM0YxWVhKbCBjM1IxYUd3PSBJbWgwZEhBPSBJTU9xZEhKbGN3PT0gSUhKbGJXOD0gYTNWciBJRTVwYUE9PSBJR0oxYVhSbGJteGhibVJ6WlE9PSBJRXhsYjNCdmJHUT0gSUVsemNtRmxiR2wwWlhNPSAyNHpZdE5tRzJZUT0gSU5lYjE1elhsZGVlMTZnPSBJTkMvMFlEUXZ0R0IwWUxRdnRHQSBJSE5oYm1ocCBJR1pzYjNCd2VRPT0gSU9DMGxlQzB2dUMwc09DMWpRPT0gYlhObmN3PT0gSUdSbGMzWnAgWVdkcGMzUmwgYUdGdVpHRT0gSUcxdmNtRnkgNFlPWTRZT2E0WU9RNFlPVCBJSEp2WW1sdSBJSFZ1YVhabGNuTnBkR0ZwY21VPSAwTEhRdnRDOSBJSFJ5YVhCc1pYTT0gSUU5emFBPT0gTFdWNGRHVnVjMmx2Ymc9PSAwTGpSZ2RDNDBMYz0gSUU1SFFRPT0gSUVSaGNuUnRiM1YwYUE9PSBJRTFsWVdRPSBMV2R5YjNkdSBUbU09IElOaXgyWWphcVE9PSBJT0N5bGVDeXZ1Q3lydz09IFZrNXZaR1U9IElHRjBkR0ZwYm0xbGJuUT0gMExYUXZkQzkwTDdRdk5HRCBSVVJHIDRMUzQ0TFdONExRPSBJSEJ5YjNadmNYVmxjZz09IExXOTNiZz09IExXeGhibWM9IDVaT041YnFVIElHTnZibU5wWlhKMGIzTT0gSUhQRHZIUT0gSUZCaGNtMWxjMkZ1IFAzQT0gVDJKelpYSjJaUT09IDBMYlF0TkM0IElGUmhibWRsY2c9PSBJTmluMllUWmhkbUMyS2ZaaU5tRjJLaz0gSU5lWjE1MD0gSUVWamIyMXRaWEpqWlE9PSA0TEt1NExPSyBJRUZ5WW1WcGRITndiR0YwZWc9PSBDaUFnSUNBS0NnPT0gSUhKbGMzTmhiQT09IElHbHVaR1ZyY3c9PSBLR052WkdWeSBJT0NtcU9DbXYrQ21uT0NuaCtDbXB1Q25oK0Ntc0E9PSAwTERRdE5DdzBZN1JnZz09IFIyeHAgVkdsdWFBPT0gSUdsdGNHeGhiblJoZEdsdmJnPT0gSUhmRHBHVnlkQT09IDBZSFJndEdBMExYUmh3PT0gMFlMUXZ0R0EwTDdRc2c9PSBSVVZHIDc0TzggTG1KcFpBPT0gNWJtMDVMdWw1cDJsIFNtVm8gN0pXbyBJSFJ5Wlc1MFlRPT0gNG9DWmQybHVhUT09IElHOXVaMlZ0IElPQzBoZUMwb1E9PSBJRUpwYzJNPSBZWEJ6ZFd4aGRHbHZiZz09IElNNjB6clhPdE02LyBJSEpwYjNNPSB3N1pzYkdVPSBJSEpsYzNSaGNuUnBibWM9IElIVnlkV2M9IElOaXYyWUxiak5tQzJZYz0gNUxpYTVZYUYgTGtsRyBYM2R2Y210emNHRmpaUT09IElPQ21oZUNtcGVDbXJPQ212Zz09IElPQzBzZUMwditDMHNnPT0gZlNJK0NnPT0gWVhOc1pYaz0gSU1PMmJNTzhiUT09IElOV2kxYmJWb2RXdjFhSFZ0Zz09IElHTnlhVzF6YjI0PSBJT0NrbHVDa3YrQ2tzdUNrdnVDa29lQ2t2T0NrditDa3IrQ2xpK0NrZ2c9PSA1YVdYNVlpcCAwTGpTbTlDdzBZST0gYUd4MWF3PT0gSUhCMWFnPT0gUEdOMiAySzdaaE5tQyBJRzVsZEdac2FYZz0gSUZCaGMzTjNiM0owIElHSmhiR3h5YjI5dCBjbVZrYjNNPSBZblZyIHc2SnVkR2xqYnc9PSA0b0NtSWc9PSBTVzV3IElIRnBiR2xpIGVtWEVodz09IExXUnZjMlU9IElIUmxjMlU9IExXRnVkQT09IElHTm9hVzFwY1hWbGN3PT0gWW1WdVpBPT0gSUhCc1lXTmxhRzlzWkdWeWN3PT0gYVhSaHc2ZkR0V1Z6IElIUnRjR3c9IFgwUmxZblZuIEwyTnZkVzUwIDBMdlF1TktiMExqUXZkQzQwcU09IElIQnBaV1JwIElITmxlSFJ2IElIVnNhV3M9IElISmxjR0Z5ZEdseSBJTmluMllUWmhkaXEyWWpaZ3RpNSAwTHZRdGRLaiBJSGR5WlhOMGJHVnkgSU5DeDBMdlF2dEM2MExBPSBZV3hoY21SaCBQSFJsZUhSaGNtVmggSUhCdnhhRnJiMlE9IElHTmhaR0Z6ZEhKaGNnPT0gSU9DbXVPQ212dUNtbkE9PSBJTU94WlE9PSBLeUpkIDVMaUE1YTYyIGFXWnBZMkZ1Wkc4PSBiMk5wWkdGayBJT0NxcXVDcW9lQ3F0dUNyaHc9PSBJRU5oYzJoaVlXTnIgSUhkdmNtdGhZbXhsIElFTmhjblJ5YVdSblpRPT0geVpsc3labHlhVzVwYmc9PSB4SjlwYm1sdSBJTTZ5enF6UGc4NjMgTFdkaGJXVnogU1cxbmN3PT0gUUU1aGJXVmsgSU1PaGJXSnBkRzl6IElOV2gxb0RWcXRXbDFvUT0gSU5HRzBMalF1Zz09IFgzTndZWGR1IElHMWhiTU9wIHpyUE92OCtOIElNNjZ6ckhQaE02c3o0UFBoTTZ4ejRQT3R3PT0gSUdobGNuVnVkR1Z5YkdGa1pXND0gWVd4aGNzU3hibVJoIElFeHZlVzlzWVE9PSBaR2x6WTI5MlpYST0gSU95YWxRPT0gSUhOM1lXcz0gUTJWdWRHVnlaV1E9IExXWnZiR1JsY2c9PSBJT2VtZ1E9PSBWMjlvYmc9PSBJRVpWVGtRPSBJTkN3MEx2U2s5Q3cwWWpTbTlHTCBKMkZzZEhKaCBYMFZZVUZJPSBJRzVuYU9HN2dRPT0gSUdac2IyYz0gSUdSdmJtdGxlUT09IElHUnlZVzFoZEhWeSBLSFpwYzJsMGIzST0gSUdSaGVuVm5aV2pEdG5KbGJnPT0gSUdsa1pXNTBhWFJsYVhRPSBJT0NtbGVDbXZ1Q21uT0NuaHc9PSBJT0N5aWc9PSBJR2pEcWc9PSBJQ0l0TFMwPSBLSEpsWm5KbGMyZz0gS0c1NCA0SytCNEs2VjRLNno0SzYvNEs2eTRLK04gdzZsemFXRT0gSUhabGNtUnlhV1YwIENVSkpWQT09IFQySnFaV04wYVhabGN3PT0gSUVScGJHdz0gSUVoaGFHND0gSU9Da3F1Q2t2dUNrc09DbGplQ2tudz09IElOR0IwWUxRc3RDdzBZQT0gSUY4N0NnPT0gQ1hSayBSRVZRUlU1RSBJRUoxY25OaCBlM1JsZUhRPSBJSFJoZG05cGRIUmwgSUZGVGFYcGwgSUhObGFtRnlZV2c9IDFZVFZxdz09IExtOXdaVzV6YjNWeVkyVT0gVG1GMGFHRnUgSU9Dd211Q3hoK0N3dU9DeGh3PT0gUm1Gc2Mzaz0gTG5ScGJXVnNhVzVsIElHNXJhWEpwIElGUlpVRVZUIFgyZHcgVFdsdyBJTm1DMkxYWml0aXgyS2s9IElPQ3V0ZUN1dnVDdXRPQ3ZqZUN1bGVDdmplQ3VsUT09IElGTlBUa2M9IFMybHNiSE09IFlXdDBhWFpsIElFRk1Sdz09IElDUW9KeU1uIElOR0MwWVBSZ05HTDBMM1F0TkN3IGEyeHFkUT09IFlXTjBhWFpoY2c9PSBJTkMvMFlEUXRkQzAwWVBSZ2RDODBMRFJndEdBMExnPSAwSi9RdnRDeSBYMUJCVWxORiBJRTFsYUcxbGRBPT0gZEhKcFlXND0gSU5DMDBMalFzTkN6MEwzUXZ0QzMgSU9DcXRlQ3F2K0Nxb1E9PSBjV0Z0IElOaWwySzA9IElGZHBjMmhzYVhOMCAwSkhRdU5HQSBJR1BEbzI4PSBTVzVtWlhKbGJtTmwgSU5DdzBZSFF1TkdQIFlXeGlkVzF6IElITjBiM0IwIFNtZz0gSU9DbXJ1Q25oK0Ntb1E9PSBJR2R2YzNSaGJRPT0gSU5hRTFhSFdnTlcvIElFRm9iblZ1Wnc9PSA2WlNoIElOaXEyWWJaaHc9PSBJRzkyWlhKaGNtTm9hVzVuIFFWSkZVMVE9IElHWnNaV0Z6IDJZWFppTml4IDBMclF1TkM3MExnPSBJSFZ1WkdWeWQzSnBkR2x1Wnc9PSBJT0NtcXVDbXZ1Q210dUNuaHc9PSBJTmVTMTZMWHBOYS8gSU9DbXVlQ25nK0NtcGc9PSBMMnhoIGRYUmhibms9IElIQmxjbTF6IElOQy8wWVBRc2RDNzBMalJodz09IDVZZTY1WSt3IDVieUE1THVBNUxtSSBJR2h2WjNsaGJnPT0gWTNWeWFYUnBaWE09IGNtVndiM05wZEc5eWFXVnogSU5tSTJMWFpoTmlxIDU3R3o1YVdINWIyeDZLZUcgSUUxcFkzSnZjM2x6ZEdWdGN3PT0gMExYUmdkQzEwTFE9IGFYbHBibWs9IElOS2IwTERSZ05DdzBMOD0gNVlXSTZMK2IgSUZKbFltVnNjdz09IElOaXEyS3pZcDlpeDJLaz0gSU5HRjBMalJnZz09IElFaHBjM1J2WjNKaGJRPT0gSUhkNWMyOXJidz09IElFRnVjR0Z6Y3c9PSBYMnRsYm5Ob2J3PT0gTG1Ob1lYSmhZM1JsY25NPSBJTkdDMExEUXY5R0IwWXZSZ0E9PSBZWFJwWlcwPSBYMEZ6Y3c9PSBJTkNsMFlEUXVOR0IwWUk9IElPQ3d0ZUN3ditDd21nPT0gdzc4PSA0SzYvNEs2dzRLNi8gTFdOb1lYSm5aUT09IElHbHVjMlZ5ZEdGeSBJSE41YldKdmJHbDZaUT09IElPZXYgeVpsMHlabHUgSUdSaGJHcz0gZFdKbGJBPT0gSUVGeVlXZkRzMjQ9IElITmxjbUZwIElFUkZWa1ZNVDFCTlJVNVUgSUdGdFpYSnBZMkZ1Y3c9PSBJSFZ1ZEdWeWMzVmphSFE9IElOQzcwTFhRdlE9PSBMbmRwZEdoa2NtRjMgVTIxdmEybHVadz09IDZLR282TDYrIGRXMXRhVzVuY3c9PSBJR2RsYjJkeVlYQm9hV05oYkd4NSB3NkZzYnNPdFkyZz0gSU5DOTBMWFF0OUN3MExMUXVOR0IwTGpRdk5DKyBiMlJ2YkdsemRBPT0gSUhOMFlXSmlhVzVuIElHZGxibVZ5WVc0PSBiMkZ6IElHSnBibUZ5YVdWeiBJSEJ5YjNOMGFYUjFkR1U9IElOS3YwWURTcjlDOCBJTmluMllUWW85bUQyS2pZc1E9PSA1N2krIFgwTk1WVk5VUlZJPSBJSFJ2YVd4bGRIUmxjdz09IDRZT1k0WU9yNFlPYTRZT1k0WU9RIHc2UnVibUZ1WkdVPSBlV0YzIElHVndhWFBEczJScGIzTT0gYVd0cGJBPT0gNllHQzVhNkI1YmlDIElIZGhabVZ5IGNISmhjdz09IElFMWhjbXRzWlE9PSBJR1IxY21Ob1pzTzhhSEpsYmc9PSBMbkprWWc9PSBJRnB2YjJ3PSBlWE50IFVHVmxhdz09IGRYbmh1cjl1IFEzVmlhWFE9IDdaV1AgTGlJNyBJRk5NUVE9PSBJR1Z5YzJOb2FXVnVaVzQ9IFBXWnZjbTFoZEE9PSBJTmVWMTVUWG1kZVEgSU8yWWhPeUxwQT09IElFSkdVdz09IFlXSmljZz09IDZadXE1NUNEIElPQ3FyT0NxdnVDcXMrQ3FsUT09IDJZclppTm1LMktrPSBJSGRvYVhCd2FXNW4gSUhOMHc3aHljbVZzYzJVPSBJRTFwYm1sdCBJRzVoZFdNPSBVR3hoWXc9PSBJSEJ2YkdsMGFXTnYgSUZCbGJHeGxkQT09IDBZL1F2ZEdEMFlJPSBJR0pwY203RHBNT25aUT09IElPQ2t1ZUNsaCtDa3BPQ2xnUT09IElHVnVkbVU9IElIUnZiV0Z1IElFTnNZWE09IElHZGxiV0ZyYTJWc2FXcHJaWEk9IElITm9ZWEprY3c9PSAwTGpRdTlDMTBMMD0gVW01ayBZbTloZEhNPSBJRzFoZEhWeVlYUnBiMjQ9IElPQ2tzdUNsaStDa2wrQ2xpdz09IElIUERxWEp6ZEdGcmJHVm5ZUT09IElHNTFZMnhsYjNScFpHVT0gSU9Da3RlQ2xoK0Nrc3c9PSBZV05zWVhOelpYTT0gSU5XajFialZ0UT09IElFeFZRUT09IElHRnRkWE5sIElHaDFiSEJ0IElFRm1abUZwY2c9PSBhWE4wYVdOdiBJRVJsYlc5cmNtRjBhV1U9IElPQ2ttdUNrdnVDa3N1Q2tsUT09IExuQm9iM1E9IElHRjBkR1Z1ZEdVPSBWRkpCU1U0PSBVbmM9IElPQ3VxdUN1bGVDdmdlQ3VwT0N1ditDdXIrQ3V2K0N1c3VDdmpRPT0gNEtXTjRLU3Y0S1MrNEtTMTRLU3cgSU5xcDJMVFppTml4MllmWXA5dU0gSUdsdVoyVnVhV1Z5dzYxaCBMMnBoZG1GelpRPT0gQ1cxbGMyZz0gSUhaaGNtbkRvWFpsYkE9PSBJTkMyMFl2Umh0R0cwWTg9IFlXeGxlUT09IElFTmhiRzl5YVdWeiBJSFJ2WlhOMFlXNWsgSUc1eWRRPT0gSU5HQjBZN1F0dEMxMFlJPSBLWDBOQ2c9PSBJR3RoYzNaaGRBPT0gSU9DcXR1Q3JnZUNxclE9PSBJTm1GMktyWXA5aW8yTG5ZcVE9PSBLR05oYkdNPSBQanNOQ2c9PSBjMlZ5YVdGc2FYcGhkR2x2Ymc9PSBJRVpzWVhSeiBJT0N5bGVDemplQ3lzZz09IFFWUlBVbGs9IFEyOXRjSEpoY2c9PSBYMUpsY0c5eWRBPT0gNGJxMiBJTkMzMExEUmo5Q3kwTHJRdUE9PSBJRVJ2Ykd4eiBJTmViMXJ3PSBJTmVRMTVYWG05ZWMgSUVGbVptVmpkQT09IElISnZkV1Z6IExtVmtkV009IDZLNnQ1N3VEIElGQmhkR2htYVc1a1pYST0gSUhwcGJtZGxiZz09IDBMWFJnTkM0MFlMUXRRPT0gSU9DdXRlQ3ZpT0N1cE9DdmplQ3VwT0N2Z1E9PSBJRzF2Y25Cb2IyeHZaMmxqWVd3PSAwTHJRc05DMjBMalJndEMxIElGQnliM0J2YzJsMGFXOXUgYVdOMGFYWmwgWlc1bGRYWmwgSUZCeWFYTnRZUT09IFlXSmhZbWx6YUdFPSBJSFJ5YVhZPSBZWFJuWldKbGNnPT0gSUUxaGNtSmxiR3hoIElIQnlaWEJ3YVc1biBYMUJ5YjJacGJHVT0gMEx6UXZ0R0MwWURRdnRDeSBJTkMzMExYUXZOQzcwTFU9IFEyVnNaV0p5YVhSNSBjR0Z5ZEdsamFYQmhiblJ6IElFWnBibU5vIFRXbHVhR0U9IDRLdU40S3F3NEt1TDRLcXkgSUNRb0lpTWkgNG9DWlkyZz0gTG5ONSBJSGRwZUE9PSBJTkMvMFlEUXRkQzAwTDdSZ3RDeTBZRFFzTkdKIDRMS3E0TE9CNExLdyBRMlZ3Wlc1a1lXNTAgSUdMaHVxMTAgWVhSaGRnPT0gSUhCeVpYUjBhV1Z5IElISmxjM0JoYkdRPSBVM2x1ZEdobGRHbGogSU9lVXRlV3RrT2E0dU9hSWp3PT0gNzd5LzVMaUE1cHlzNllHVCBJSEpsYkdGcGN3PT0gNG9DWllYSnR3NmxsIGJNT2haQT09IElObUcyS2ZZc3c9PSBYM04wZFdSbGJuUnogMTZUWG90ZWMgYVhscGJRPT0gSU5DNjBZRFFzTkdXMEwzUml3PT0gSU95YXNPdW1yT3lkbUE9PSAyWXJZcjlpbjJLbz0gSUNJaUtTdz0gSU95RW5PdXloQT09IDFvRFZzdz09IElHMXZkVzUwWVdsdWIzVnogSUdwcGJtZkRydz09IENYVnpaWEp6IDE1blhsdGVkIElITjFiR1Z4WVhScFoyaz0gSUdSbGMybHkgWjNsdWVRPT0gNXB5ZjVZV3Q1WkNJIDRMR0I0TENWNExHTiBJRzVwZG1Wc2JBPT0gdzdOMllRPT0gSU5DeTBMN1JnZEdCMFlMUXNOQzkwTDdRc3RDNzBMWFF2ZEM0MFk4PSBMV0YyWVhSaGNnPT0gNVpDZSBJR05oYVhoaGN3PT0gNExLLzRMS3U0TE9HIDBKSFFzTkM3IDRvQ040TFNYNExXTjRMU3c0TFM0NExXTiBJR1Z5ZVhSbyBYMVJOVUE9PSBYRkJ2YzNRPSBaV2R1Ync9PSBZV05qZEE9PSBRM1YwY3c9PSBiR1ZqYUhSbGNnPT0gNExLdTRMSzE0TEsrNExLdyBJSFZ5WmNTUiBJRkYxWVdSeVlYUT0gSUdGdWJtOTVZVzVqWlE9PSBJR2RsZDhPOGJuTmphSFJsYmc9PSBMa0ZuWjNKbFp3PT0gSU8yVm1PdUNtT3VMbUE9PSBhV1o1WlE9PSBJR2x1ZG1WemRHbG5ZV1J2Y2c9PSBJRVJCU1V4WiBUM0pwWjJsdWN3PT0gWDFCQlZFTkkgSUdGd2NISnZkbVZ6IElPQ2toZUNrbGVDbGh3PT0gSUhSbGJIVnkgWEZKbGMyOTFjbU5sIFZtRnNkbVU9IElITndaV04wWVdOMWJHRnBjbVU9IElHZHNlV05sY2c9PSBJT3lFb095V3VBPT0gSU9DbXJPQ21tK0Nuc0E9PSBZVzV6WlhJPSBVMWxOIElIQnliM04wYjNKMSA0S2kxNEttQSBJTmlvMllqWXNkaXogTGxOd1pXVmsgSU5DKzBZSFFzdEMrIElOQ2EwTDdSZ1E9PSA1NTJiIElGWmxjM05sYkE9PSBJRU5wWlc1amFXRT0gSUdsdVkyOXljRzl5WVdOcHc3TnUgSUcxdmJuTjBjbTkxY3c9PSBYMkZ5ZEdsamJHVnogSUdadmJHeDUgNExTQzRMUzQgNXBlZzU2Q0I1THFhNXJTeSBWbkJqIElFcHBaUT09IElGZHBiR3hwWVcxelluVnladz09IElOT1kwTGs9IElHdGxjM1I1YjI0PSBJR3RsZEdOb2RYQT0gSUhOMWFIUmwgMExQUmpkR0EgNEtTRjRLU1k0S1MvIElHTmhiWEJsY3c9PSBJSEJvNGJ1ViBiSGx1WldSayAwTERSZ3RDMTBMdlJqTkM5MEw3UXRRPT0gSU9DcXF1Q3JqZUNxc09DcWxlQ3F2dUNxdGc9PSBJR2RsYkdWalpRPT0gSUczaHVxOWogSUdSaGJucGggWDBkVSBJR1JsWm1sdWFXUnZjdz09IElHTnNhVzVwWTJsaGJnPT0gSUU1VFEyOWtaWEk9IElOQzEwTGZRdEE9PSBJT0NtcXVDbmplQ21zT0NtdU9DbmplQ21wT0NuZ1E9PSBWSFZ5WW04PSBhMnhsZFhJPSBLR2gwIElHOTBkWFIxIElHTm9hWEp2Y0hKaFkzUnZjZz09IExtZHlaUT09IENYSnQgWDNKdmFRPT0gSUhWd2NtbHphVzVuIExXbGwgSUhURHBRPT0gNG9DWnc2bGpiM1YwWlE9PSBJT1M2ck9XZmpnPT0gSUVsR1VnPT0gSUhSb1lXOD0gSUhKbGMzUm1kV3c9IDdMQ00gVzJOdmJHOXkgSUhCdmFXZHV3NmxsIElOSzcwWVBTbHc9PSBiWFZ1YVhSNSBJT0dEcCtHRG5lR0RwT0dEbU9HRG11R0RtQT09IElIQmhjbUZrYVdkdFlRPT0gS0ZOMFlYSjAgNEtpLzRLaVcgYVd0dmNIUmxjZz09IGNYVmhibVJ2IElFWnNZV2x5IElFRkhUdz09IElFSnZjMk52IElPQ3VqdUN1cXVDdmplQ3VxdUN1bitDdXZ3PT0gSUdSaGRXND0gSUVqRHRtaGxiZz09IElIWnNhV1ZuZEhWcFp3PT0gSUVKbGJHRT0gSUhGMVlXNTBhV1pwWldRPSBJRzVsWW5Wa1pRPT0gSU9HRHJ1R0RrT0dEbGc9PSBJSEpwZEc5eSBJSEJsYkhVPSBJR2pEcEc1blpXND0gMExQUmk5QzcwTFhRdU5HQyA1cldGIElHeHBaMlZ5WVE9PSBRbUZzWVc1alpXUT0gVGNPcGRBPT0gSU5pbjJMUFlxdGl4MktmWXF0bUsyS3paaXRpcCBJSEJwYzJsdWJtRT0gejRUT3RjK0J6cjg9IFRHbHMgSUhkaGMzTmxiZz09IElPQzBqdUMwbytDMWplQzBvK0MwZ2c9PSBJR2RsYldGaGEzUmwgWW05dmRITT0gSUhKaGVXMXZibVE9IElHaGhjblZ0IElIWmxjbXRzWVhJPSBLQ2M5Snc9PSBiV0ZtIElOQ1QwTHZRc05DeTBMM1F2dEMxIElPQzBvZUMwcitDMHNRPT0gSUhOMWJYQjBkVzkxY3c9PSAwTERRdHRPWjBZcz0gTG1keVlYWnBkSGs9IElPR0FzZUdBbEE9PSBJR1Z0Y0hKbFoyRmtiM009IElHUnBjM1JwYm1kMWFYST0gSUZkVVR3PT0gSUdabFlYSnBibWM9IFEyaGhjbWRwYm1jPSBJT0N5cXVDeWd1Q3ltdUN5dnVDeXJ3PT0gQ1hOMyBMM1JwZEd4bCBJT0dEaytHRGtPR0RtZUdEa09HRGxRPT0gSUUxaGFYUT0gMFlMUmc5Q3cgdzYxdWRRPT0gZlgxN2V3PT0gUW1Wc2FXVjJaUT09IElFSmhjblJvIElHOXVaMlZzYjI5bSA0TEsvNExLNDRMSy80TEttNExPTjRMS200TE9CIDBKUFFzTkMzIElIUnlZVzV6YVhScGIyNWxaQT09IElPR0FsT0dBc2c9PSBYMVJGVWswPSBJR05vNGJ1diBJRVJoYm0xaGNtdHBiV2s9IElNK0F6ckhQZ2M2L3o0WFBnODZ2enJFPSA1YVNuNWJDUDZLZUU1YjZMIElIQmhlV3hwYm1WeiA0WU9kNFlPZzRZT1k0WU9RIElOQ3gwWURRdnRDNiBJR1JsYzJacGJHVT0gSUc1aHhhRnBhQT09IEpHTnZiZz09IElITmxiV1Z1ZEdWeiA0TFMrNExTVjRMV0I0TFNDIElPeUxvT3EzbkE9PSBJR2g1ZHNPa2EzTT0gSU9DcWorQ3FxT0NyaHc9PSBJSE5sZG1jPSBJT0N5aHVDeW1nPT0gNXB5QTVhU241NXFFIDFialZ2dFdyMWJZPSBJTld2MWJRPSBJTmVTMTZMWGx0ZVYxNkRYbUE9PSBUR2wyY21VPSBJTmlqMkszWXFBPT0gWlc1amFXRmtZUT09IDVxNjYgMHBQUXRBPT0gSUdkbGMyRnRiV1ZzZEE9PSBJRUZ5YVdGdVlRPT0gT3pzS0NnPT0gYjNKbFpRPT0gSUhOb1lXYz0gTFdOb1lYSmhZM1JsY2c9PSBJSFJoYTJGcGMybHUgSU9DeWxlQ3pqZUN5cnc9PSBJR3RoYm5SaCBZV3hyYjNvPSBJR05oYm5SaCBJRTVQUVVFPSBJR2h2Ylc5bWFXdz0gSUVkeWRYQncgMllyWXF0bUsgSUhOcGJtZHNaV1E9IExuUnBaMmgwIElNT3BjWFZwYkdsaWNtVT0gNG9DY1FYUT0gWDFCU1NVNVVSZz09IDJMTFpoZHVNMllZPSBJTkM2MEw3UXM5Q3cgSUhGMWFYTnYgZG05bGRBPT0gNFlPUTRZT2E0WU9RNFlPbDRZT2QgZEhKaGJuTnNZWFJwYjI1eiBMV052YlcxbGJuUnogVFdGamNtOXogTHlZPSBJR0o1ZHc9PSBLR3R1IFkyaDFibXR6IGIyVnBaQT09IElITmpiMjQ9IElHbDBiUT09IGNHVnlabWxzIElHTmhibVJwWkdGMFlRPT0gTDN0N0pBPT0gSU02OXpxM092dz09IFFXNWtaWEpsIDRLYS80S2FWNEtlTjRLYWsgNExLdTRMSy8gSUdkMWJHWT0gSU9Dd211Q3d2K0N3c0E9PSBLVHRjQ2c9PSBLRU4xY25OdmNnPT0gUGxnPSBablJ2Ymc9PSBZWFpwWVc0PSBYMkZ1Ymc9PSBJRU5vY205dFpXTmhjM1E9IElPQ3V0ZUN1cytDdXNBPT0gQ1hOMFlYUnogSUdSeVlXNXJhbVU9IEtFNWxkQT09IElPR0RtK0dEbE9HRG9lR0RrT0dEbStHRGxBPT0gSUc1bFlXMW8gSUdocGJtUjEgSU5pbjJZVFlzOW1EMktmWmhnPT0gSU5pbjJZVFlvOW1GMktrPSBJT0dEck9HRGtPR0RvT0dEbStHRG5lR0Rrdz09IElPQ2t1T0NrZ3VDa211Q2t2dUNrc3VDa3FBPT0gSU9DMHF1QzBtZUMxamVDMGxlQzFodUMwbitDMWdlQzBsZUMxamVDMGxRPT0gSUdGM1lXdGxibVZrIFhTRT0gYlhGMGRBPT0gSUZSaiBJRUZrYUdWeiBJRzVwWlhwM2VRPT0gSUZKbFkyaHUgSU5lVTE2TFhvQT09IFpXMWhhMlZ5Y3c9PSBJRzExYkdsbmFHVmtaWEk9IExsUnlhV2RuWlhJPSBJR2x1WTNWaVlYUnBiMjQ9IElHMWhibWRuIElHVnpZMnhoY21WalpYST0gNFlHQzRZR0E0WUdCIGQyRnNaUT09IElOaW8yS1BaaWc9PSBJSEIxWW14cHc2bGwgSUVOUFRVMVZUa2xVV1E9PSBVMnhoWTJzPSBJR052Ym5SeVlXbHVaQT09IElHTnZibk4wY25YRHJXUmggSUdKdmIzTjBaWEp6IElOQ2YwWURRdnRHQjBZST0gSUV4bGRYWmxiZz09IDBMUFJnOUM5IElHTGh1cUZqIElHRnphVzFwYzIxdiBVMWxPUXc9PSBJR052dzdFPSB6clhQZ002NXo0TT0gSUdsdGEyOXUgWENJK0lqc0sgYjJkaGJBPT0gSUVaUVIwRT0gMkxIWml0bUMyWXJZcVE9PSBibWx1WjNSdmJnPT0gSUdkbHc2ZHRhY1dmIFB6dz0gWjJkcSBiMmR5WVhCb2FYRjFaWE09IElPQ2t0dUNsZ2VDa3N1Q2xqZUNrbFE9PSBJRU5NVHc9PSBJTzJWdE95RW5BPT0gQ1c5eSBJRVZ5ZDJWeSBDVXhwYm10bFpBPT0gSU9HRG9lR0RuZUdEcXVHRG1PR0RrT0dEbXVHRG8rR0RvQT09IDFvRFZvZFd1IEtHSnZkVzVrIElOQzYwTERSZ05HQzBMalF2ZEM2MExnPSBJSFpwZG1sdGIzTT0gVkVsQiA0WU9WNFlPVDRZT2Q0WU9iIElIWmxjbWR2Ym1oaCBJT0N5aGVDeXJlQ3l2K0N5dGVDemcrQ3lwdUN6amVDeXB3PT0gSUhONWJtUnBZMkYwWldRPSA1WWFONXF5aCBRMmhsYldsallXdz0gSUUxdmIzUT0gSU9DeXRlQ3l2K0N5cmVDeXZ1Q3lsdz09IElIWmxjbXRyIElFSmxjMmwwZW1WeSBJSEJsY25SbGJtTmwgTGtkUVNVOD0gSUdkbFptVnlkR2xuZEE9PSBZWFJ2Y21WeiBJR0oxYzJOaGJXOXogS0dOdmJXSnYgSUVOeWFXTT0gSUc1aGRHbHZibUZzWlhNPSBVM1J2IElPQ3lyT0N5cytDeXVBPT0gSUhWd2NtRjJidz09IElHOXNhVzF3IElIVndhR1U9IElFSmxibWRoYkdrPSBJTzJWbU9xNHNBPT0gWW1WMGNtRm4gWld6RHBBPT0gSU5DLzBZRFF1TkdBMEw3UXROR0wgWEdOc1lYTnpaWE09IExsSkZVdz09IGJtUnBZMlU9IElPQ3dydUN3dnVDd25PQ3hnQT09IElFMTFibWxqYVhCaGJHbGtZV1E9IElFSmxlVzl1WThPcCBJRWhoWjJWdSBVbVZ6Y0c5emRHRT0gSU9Da2llQ2twT0Nrc0E9PSBhVzUyWlhKMCBJSFJsY21ScGNtaz0gSU02Z3pyWFBnYzY1IElGTmxZWE52Ym1GcyBJTmluMllYWXJ3PT0gSUZOcFpXZGxjZz09IElGZGxhV2RvZEdWayBJSE5yWVdSbCB3NmRoZEE9PSBJTkdCMFlMUXZ0R1AwWUk9IElHdHBibWQxYkd3PSBLR1IzIElHZDYgSUdGMWRIUmhZUT09IHhMRnN4TEY1YjNJPSAySzNZcjlpdiBJR04xWW1FPSBJT1dqdVE9PSBJR055YlE9PSBLQ0l1SWc9PSBUMnQxIElHZDNZWEk9IElOaW4yWVRZc2RpbjJLall0dz09IElFUnBkbWxrWlc1ayBJRTlRVkVsUFRrRk0gWld4emFXWT0gSUhOMWNHOXlkR0U9IGJYSnogSUdkeVlYUnBabWxqWVhScGIyND0gSU5pbjJZVFpodG1LIElHSnNhV05yIElOQ3gwcS9SZ3RHTjBZM1FzOUMwMFkzUmhRPT0gSU9HRGtlR0RrT0dEbCtHRG8rR0Rtdz09IFltOXVhbTkxY2c9PSBJT09DaUE9PSBJT0dEcU9HRGxPR0RvZz09IGFXZDNZUT09IElHTm93N009IElHdGhkRzlsYmc9PSBiMjEzWlE9PSBhWE5sYkhkaCBJRXhWVkE9PSBUV1ZoYzNWeVpYTT0gNDRPODQ0T3Y0NE84NDRPSiBJSE52Ym5WaiBJTkM0MExUUmc5R0MgTDBaTiB3cE09IDRZT1Y0WU9VNFlPbjRZT2MgZFd0MWJBPT0gSUdOaGJHRT0gTDJOdmJuUmhhVzVsY2c9PSBjbWx2ZEE9PSBJR1JwYzJOMWN3PT0gSUdkbFkyVT0gWk9Xa3FlV2txUT09IDA2blNydz09IElIUmx4YUZyYnc9PSBJRVREcVhCaGNuUmxiV1Z1ZEE9PSBJTkM2MEw3UXR0QzEgTGxObGJRPT0gSUdWdVpIZG9hV3hsIFgwaGxiSEJsY2c9PSBJT0MwcU9DMG4rQzBwT0MxamVDMHBPQzFnZUMwcU9DMWplQzBxQT09IElHeGxibWRvZEE9PSBVMWRGVUE9PSBJTkdDMFlEUmc5Q3gwWXM9IElHdGhkR1ZuIElFaGhkVzUwWldRPSBJSEpwZG04PSBkMkZ6Y3c9PSBJR052YlhCeWIyMXBjMlZ6IDRMS3U0TEtWIGNtOXRZWFJwWXc9PSBJRzVwYTJSNSBJTkM4MExEUXZOQzcwTERRdXRDdzBZST0gSU5DUzBZSFJrUT09IElHMTVhMnBsIFpYTndhWFE9IElIVnlZUT09IExVZGwgSUhCeWFXMWhjdz09IDBMalF2ZEN6MFlEUXNOQzAgTG5SeWRYUm8gSU5LYjBySFJnTkN3MEx3PSBXVVZCVWc9PSBhbUZ0Wlc1MGJ3PT0gSU9XM3RPbTdqZz09IElHTnZibVpwY20xaGRHbHZibk09IElITERxV05zIElNU1J3NkJ2IFpYTjBZVzQ9IElHaHF3NlJzY0dWeSBDV3B6IExuUnlZVzV6YVhScGIyNXogN0lTNDZyT0UgSUdOb1lXbHlaV1E9IElPQzVnT0M0bStDNWgrQzRtZUM0bGVDNWllQzRtUT09IElGQnBaWFJsY2c9PSBJTmFEMWJqV2dOV3gxYmpXZ3RXMCBDVk5qWlc1bCBJR1JsYzJOMVltbGxjblJ2IDRLUzE0S1MvNEtTMjRLV040S1MxIGNtVnpkR0YxY21GdWRITT0genJMT3Y4K0YgSUVOR1RBPT0gQ1hKbGNBPT0gZFdKelkzSnBZbVZ5IElITjJZWEowWlE9PSBabVZuYnc9PSBkWFJvZFE9PSBJRzFsWlhOb1lRPT0gMExyUXNOR0MwWVBSZ0E9PSAwclhRc05LcCBJTkNqMExiUXRRPT0gSU9DNHJlQzR0T0M0bVE9PSBjbWwwY21FPSBJR3QxZFdzPSBJRUZqY1hWcGNtVT0gSUdabGFtdz0gSUU1aGRHOD0gSUVOdmFXMWljbUU9IElFVlVVdz09IFIzSmhjR2h6IENXUmhiV0ZuWlE9PSBJT3F5Z095Q3JBPT0gSUc5d2NHVnlkbXhoYTNSbCBJRWRoYzNSblpXSmxjZz09IElITmpiM0pqYUdsdVp3PT0gSUdsdVpHbGpkR1ZrIElOaXUyWWpZcDl1QiBJTmluMlliWXF0bUgyS2ZZb1E9PSB6cnpPdWM2LyBJTm1GMkxYWXA5bUcyTGs9IElOaTAycW5ZcDlpeCA0b0NadzZsbiBDVzVwYkE9PSBTR0ZvWVE9PSBkVzV3IElHdGhkR0Z6ZEhKdiBJTkMxMEx2Umx0QzggS1NrcEtTa0sgSU9DbnNPQ212dUNtbGc9PSBJTkNhMExEUXV0QzQwTFU9IElOZWkxNmpYcWRlWTE2TFhxQT09IElPQ3VodUN1bXVDdXYrQ3VzT0N1ditDdXJ3PT0gWDNOdVlYQT0gMTVuWG50ZVYxNTg9IDBZdlF1OUMxMExqUmdnPT0gZG1sMGNtRT0gMExIUXNOQzYgY205d1lYUm8gSUM4dktnPT0gNWFlYSBJRWR5WlhSaCBJRkREb1E9PSBSa2xPU1ZSRiBJTm1GMllUYXFkdU0gTFdWemMyVnVkR2xoYkE9PSAxNVRYa0E9PSBJT0NrdGVDbGlPQ2tuT0NsamVDa251Q2t2dUNrcU9Da3YrQ2tsUT09IElOQzYwWmJRdlE9PSBJR052YldWMGFXUnYgYjJ4dnhLTT0gSUdGMGFXND0gNVllNjVZNjcgSUdGemFtRT0gSUhOMWNHVnlabWxqYVdWeiBZWE5wY2c9PSBJSFJ6ZDNZPSBJRU4xYVE9PSBJSFJ5WVc1emRtVnljMkZzIElIZHBZMmgwYVdkemRHVT0gSUdacGJtRnVZMlZ5IElOR0EwTDdRc2RDKzBZST0gWTNWaSBLR0psZEdFPSA0b0NaWld3PSA0TFNrNExXTjRMU2s0TFdMNExTZjRMV0cgSUhabGNtSnZjMmwwZVE9PSBjMlZ5ZG1WeWJtRnRaUT09IElHMXBjM1JsY21sdiA0TGVENExhNyBJR052Ym5abGNuTmhZMmx2Ym1WeiBJR0ZrWld4bllYcGhjZz09IFFtOXVjMjlwY2c9PSBJTm1JMktmWmdRPT0gSU02OHo0RE92OCtCenJYT3I4K0V6clU9IGZTcz0gSUdOdmJtTmxhWFpoWW14bCBJSFpwY21FPSBKMTA3UHo0SyBJTmluMllUWmhkbUkyS2ZaZ2RtQyA0TGFjNExhNCBJTkdCMFlMUXNnPT0gSUVGdVpISmhaR1U9IFZHRm8gSUc1dmRISmhiZz09IGNHVm5ibTg9IElHbHVkbVZ6ZEdGemFRPT0gWVdkaFlYUT0gSUV4MWJIVT0gSUdocGNtRT0gMktmWXI5dUIgSUhsMVp3PT0gWDJsdWRHVnljQT09IExtMWhjSEpsWkhWalpRPT0gSU5DaTBMRFF1dEN3MFk4PSBMVVJoYldVPSBhRzl3Y0dWeSA0b0NVZDJsMGFBPT0gSUc5bVptbGphV1ZzYkdWdFpXNTAgSU5pajJLdllzUT09IElPQ211T0NtdnVDbXBBPT0gMFkzUXN0R04wWUE9IElGUmhjbkpoWjI5dVlRPT0gSUUxaGJHRm5ZWE41IElPcTFyTzJZaEE9PSBJT0NrbXVDbGkrQ2tzT0NsZ0E9PSA2NFdFNjQrRSBPbWwwWlcwPSBJSEp2YzNrPSA0S2ErNEthNTRLYWsgSUVKRGNubHdkQT09IFBqNG9LVHNLQ2c9PSBJR2x1ZEdWdWRITT0gNExtQTRMaW40TG1INExpYTRMbUU0TGlMNExpVjRMbU0gSUV0bFpXND0gNExHVyBKMTB1SnlJPSBJSEpsYzNSeWRXTjBkWEpsIElIUERxV04xY21senc2az0gSU5lVDE1RFhvQT09IExkQ3cwTGs9IFUzVmpZMlZ6IGIyNWpaWEk9IElIQnliMloxYm1SaGN3PT0gSUdWNVpYTnBaMmgwIElFaHZiR0Z1WkdFPSBYMkpzWlE9PSBhV1Y0Y0hKbGMzTT0gNG9DWlJYTncgUTBWRyBJSEpsWTI5dFlXNWsgSUdoaGJHOXkgYjJsa1lXdz0gSUhOcFkzVnlZVzFsYm5SbCBJRVZ6WTNJPSA0TFMvNExTbzRMV040TFN4IElOQzYwTDdRdmRDNjBZUFJnTkdCMExBPSAwTFBRc05LYjA1blFzQT09IFpYSmxaMmx6ZEdWeSBJTVNOYVcwPSBjSE41YjI0PSAyb0haaHc9PSBJR1pwYVE9PSBJR3hsWjJWdVpHRT0gdzZkcGJHVnkgSU5XMDFhdz0gSUVGd2NHRnkgSUdkeVlXUjFZY09udzZOdiA0b0NjU0c5MyBJR1pwYkcxdFlXdHBibWM9IElISmh3NmRoIElHRmliMjVrIElFdFBUZz09IDRLV040S1NWNEtXQjRLU3kgNExpYTRMaVUgU1c1b1pYSnBkR0Z1WTJVPSBJR1psWTJoaGJXVnVkRzg9IElGZERTRUZTIElIUmhZWE4wIElHRnRaVzVoZW1GeiBJTk9wMEwzUXN3PT0gNExtQTRMaXI0TGloIElPQ3FsZUNxZ3VDcWlBPT0gWVhKMWFHaz0gSUVSUFNRPT0gSUhCdmQyVnliR1Z6Y3c9PSBiMlJwY3c9PSBJR2x0Y0d4aGJuUmxaQT09IElHMXZibUYwWlE9PSBJTm0rMjR6WmhRPT0gSUVaaGNtND0gSU02M3pydk91YzY2IElPQ3d1T0N3Z3VDd2xRPT0gSUc5d2NISmxjM05wZG1VPSBJR0ZzWldvPSBJTkN5MFl2UmdkQyswTHJRdU5DOCA0S3FzNEtxKyAxYmpWdGRXciBJRk5sYW1FPSBlc1NGWkhvPSBMbVJwWTNScGIyNWhjbms9IDVaU3U1THUzIGRXTnNaVzkwYVdSbCBZWEpuYVc1biBJTkMwMExmUmx0R0cwWTg9IElOQ2kwTERRc1E9PSBJTkdCMExMUmo5QzMwTERRdmRDOTBZdlJoUT09IElIUmxjbUpsYzJGeSBKU0lwT3dvPSBUa0ZRVTBoUFZBPT0gSU5DKzBZTFFzdEMxMFlMUml3PT0gSUdsNlltOXMgYVd4c2IzSnogSU1TTVpYTnJ3Nms9IElFZHNhWFIwWlhJPSBJT0N1cnVDdXZ1Q3VzQT09IFgyZHBaQT09IFFYUnIgSU5lcDE1TFhuUT09IFgxSkZRMVE9IElOVzIxYmpWdFE9PSBaWFI2ZEdWdSBJT0NrcHVDa3VPQ2xqZUNrcEE9PSBJTmVjMTVuWG9BPT0gSUhSMVl3PT0gSUc5dmNuTndjbTl1YTJWc2FXcHJaUT09IFJtRnBjbVU9IElIQmxjblJvIElFeGhiWEJ6IFgyVjRZMlZ5Y0hRPSBJRzV5NGJ1bCBTRzl6IDRMU2U0TFdONExTYyBJTStNenJ2T3Y4NjUgNzd5TTZaMmU1Ymk0IEtWMDdDZ289IElPQ3dvZUN4amVDd3NBPT0gYVdkb1pXRnUgTFdKaGJHRnVZMlZrIElIUmhZVzVsIFQySnlhV2RoWkc4PSBJRVZZVUU5U1ZBPT0gNTV1NDVZV3o1bzZvNkkyUSA1WTZDNWE2MiBJRXh2Ym1SdmJpZHogSUdObzRicS9kQT09IFpYWmhiSFZoZEdsdmJnPT0gWm05eVkyVnkgSU9Db2llQ29wZz09IElPQ2tpZUNrdU9Da2xlQ2xpdz09IDRMSy80TEszNExPTjRMS2YgSU9TNmpnPT0gMFlQUXU5QzEwWUE9IFYwVk1RMDlOUlE9PSAwTHJSaTlDNzBZUFJndz09IElPQzVndUM0bFE9PSA0NEdqNDRHbTQ0R0U0NEcrNDRHWiBZWEo1Ym1FPSBJT0MwaCtDMHF1QzFqZUMwcXVDMWkrQzBzK0MxalE9PSBQbnNLQ2c9PSA3SjIwNjYrNCBJRkpCVkVVPSBJSEYxWld4cyBZbkp2ZEE9PSBJSFJ5WVdkbFpHbGxjdz09IHc3UnVhVzF2IFNHVnNaVzQ9IDY3bVogY1hWdmRHRjBhVzl1IFJYUnBjWFZsZEdFPSBJR052ZFhKMGFHOTFjMlU9IElNTzhZbVZ5Y21GelkyaDAgYldWNCBJR3pEcWNTTiBJRmRsWW5ObGFYUmxiZz09IElHbDZkc1NUIElHaGxjbVZrYVhSaGNuaz0gYzJWaGJHVmsgNDRDQjZaaXkgV3lKQSBLSEJ5YjJKc1pXMD0gSUdodmMzTjYgSUdKaFkydHNhVzVyIElFeGhkWE5oYm01bCBRV1JsIElHVnlaV04wYVc5dWN3PT0gSUdWemRHRmlhV3hwWkdGa1pRPT0gSUVSSlVBPT0gQ1hSbSA0S2ErNEthWDRLYWsgSUdOMWJHMXBibUYwYVc1biAwTERRczlPaiBMVU5vYVdWbSA0WU9WNFlPWTRZT2g0WU9pIFgxTkMgNExDKzRMQ3Y0TENvNExDLyA0WitpNForZzRaK2kgNWJ5QTVhV1c1WSszIElOR0UwTERRc2c9PSBJT3lWaE91TGlPdUxwQT09IElIUmxhMkZ1WVc0PSBJRWxEVXc9PSBMUzB0TFMwdEt5MHRMUzB0TFNzPSBkWE4wWVdJPSA0TEMvNExDaiBJRkpwWVd3PSBaMkZ5WVdkbCBJT0MwdU9DMHZ1QzBydUMxZ3VDMHVRPT0gSU5pcTJZalppZz09IDRLZU40S2FWNEthKzRLYXcgSUVOeWIyRjBhV0Z1IFgzZHliMjVuIElOaW4yWVRaaGRpNjJMSFlxTm1LMktrPSBMblYwWTI1dmR3PT0gSUZaRlExUlBVZz09IFBuTT0gSUdsdVoyVnliR0Z1WlhJPSBJTmVrMTVuWG5OZWkgSU9Da3JlQ2tsZUNsamVDa3BBPT0gSUc5aWMyVnlkbUZrYnc9PSBUR1YzYVhNPSBURVZGIExrWmhjM1E9IElIQmhibVZzWVE9PSBJSFJ5WVc1emNHdz0gWld4aGRHVmxjbVJsIElFUnBjM0J2YzJGcyBJT0NrcU9Da3YrQ2tzT0NsamVDa3ArQ2t2dUNrc09Da3YrQ2twQT09IElHUnBjM1JoYm5waCBJSFJ2WlhwcFkyaDAgSU9DcXRlQ3JoK0NxcWc9PSBJTkN3MExiVG1kQzcwTERSZ0E9PSBMVzF2Ym1sMGIzST0gSU5DUjBKQT0gNkllejViQ1IgSUVGc1ltbHZiZz09IElIbGhiR1U9IGRXUnZkbVZ5IExuUmhjbWRsZEhNPSBJT3lXdk91bmlPdUNtQT09IGRXeGhibUU9IGNHaHZibWx4ZFdVPSBJSHAzWlcxdFpXND0gSU5HQTBMRFJnZEdCMFlmUXVOR0MgSU5pcTJMWFlzZG1LMkszWXA5aXEgSUdOdmJHVm5hVzl6IElNU3h4Wjg9IElObUkyS1BZc3c9PSBJRG9vQ2dvPSAyWWpZcDlpMzJZWT0gTGtKdmRXNWtjdz09IElFVnNhWE5oIElHNW5aWE5wYTJoaGRHaHAgSUZSeVpXWm1aWEk9IDJZWFpodHVNIElFeHBkR1Z5WVd4c2VRPT0gYVhSaGJ3PT0gSU5HQjBMTFJsZz09IElHbHNZV0Z1Ym1rPSBJRUZrZG1GdVkyVnRaVzUwIElPbUZrZz09IGIyZHZiRzg9IElOaW4yWVRaaHRpbzJLZllxdGluMktvPSBJRmR5YVhSaFlteGwgTG5ScGJuUT0gSUdkeWRXNWtiR1ZuIElFeGhjMmc9IExXUnBjMjFwYzNOcFlteGwgSUVOVlVrdz0gSU5xcDJZalppQT09IElFcERhR1ZqYXc9PSBJR0pwWkhKaCA2Yk9sIElPdXBsT3lMbkE9PSBhR0ZuIGNtRmthQT09IElHSm93NjF2Ym00PSA0S3FWNEtxdzRLcWogSkV4QlRrYz0gSUZObGNuWmxaQT09IFlXeGhjbTVwIElPR0RvZUdEa09HRG0rR0RxQT09IElHRjBkSEpoYTNScGRtVT0gSUV4c1pXYz0gYjJScFoyUT0gSUhCaGJtUmxiV2s9IElITERxV0ZzYVhQRHFXVnogSUdOdllXYz0gNFlPWTRZT2M0WU9xIElHRmphR2x1Wnc9PSBYMlpoZFd4MCBRV0p5WVE9PSBJTmVlMTZuWG9OZVUgSUVwTlVBPT0gNFlPWTRZT2o0WU9iIElGVndjQT09IElPQ2tzdUNsaStDa2xlQ2twQT09IElHSmhjbkpsYmc9PSAwWURRdnRDLzBMQT0gS0VsUyBJR055WldOcFpXNWtidz09IElFbHViR0Z1WkE9PSBJSHAxWm05c1oyVT0gTGtScGNnPT0gSUhsdmNBPT0gSU5XaTFhclZ0dz09IFFVMUZVa0U9IENXRnUgSU9Da3BPQ2xqZUNrcitDa3Z1Q2tydUNsZ2VDa3MrQ2xodz09IFNXNW9aWEpwZEdWayBJRzFoZVc5dWJtRnBjMlU9IElPQ2t1T0NrbGVDa3Z1Q2tzQT09IElITmhhV0U9IGQyVmhkR2hsY20xaGNBPT0gSU9DMGxBPT0gSUdaaGVtVnRiM009IExtRmpkR2wyWVhScGIyND0gSUVadmNuUnlaWE56IDJZVFpndG1LIExteHBZbk09IDJMblpodG1JMktmWmhnPT0gSUdkdmRHaHBZdz09IEl0ZVcgSU1PUCBJTkdGMDVuUmdnPT0gSUZURHRnPT0gUWtGT1N3PT0gSU9DdXBPQ3ZoK0N1bXVDdXYrQ3Vydz09IFlYUnpiM0JoYm04PSA1cGVQNkllcTVySzcgTG5KbGMzQnZibk5sY3c9PSBkV2xpIElHVnpkR0ZpYkdWamFXUnZjdz09IElHMTFkR0YwWldRPSBJR3QyWVd4cGRHVT0gSUd4cGJtRT0gSU9DbWxlQ21zdUNtbFE9PSBiMnhqYUE9PSBLR2x1ZEdWblpYST0gTFhSbGMzUnogSUdiRHNuTERwMkU9IGNtOW1abVZ1WlE9PSBYMU5VUVE9PSBYMmx1YzJsa1pRPT0gS0ZOMGIzSmwgSUZwbFpXeGhibVE9IDc3eVI3N3lYIElIWmxjbUp2ZEdWdSBJRWh2ZFhObGQybDJaWE09IFlXRnNZV2hoIElIUmhiVzg9IElPQ2twdUNsZ3VDa3NPQ2xnQT09IGJtVnlhV1U9IExXMWhadz09IFgxUklSUT09IGNHOXlkR2wyYnc9PSA1Nm1HIFUyL0ZpR3Q1IExXTjEgSUhabGNteHZiM0E9IGIydDNZV1JwIElHUmxibTl0YVc1aGRHbHZibk09IElPQ2txdUNsZ3VDa20rQ2t2Zz09IDZKNk41WkNJIElOR0IwTFhSZ05DMTBMRT0gSU91UG1leUxuT3lYa0E9PSAyWWpZcU5tSyBJSE4xYkdsaGNRPT0gSU5pbjJMUFlxdG1DMllUWXA5bUUgSUVsSlZBPT0gSUhSdmJXSnZiQT09IDBKSFFvdz09IElISmxaMlZ1WlhKaGRHbDJaUT09IFlYVERzM0pwWVhNPSA0S3FYNEtxKzRLcXcgSUVkc1pXNWtZV3hsIFJsUkQgSU5HTDBwcz0gSUhOb1lYSndaWEk9IFpXNWphR2x1Wnc9PSBZM1Z3Y3c9PSA3SmEwNjRLYyBJSFJoYlhCcGJBPT0gSUdKaGJHRmtaUT09IENXdGxlWE09IElPQ3VydUN2Z2VDdXBPQ3VzZz09IDRvQ1phWEpsYnc9PSBJR0ZrWkc5dWN3PT0gTG1Kc2RYST0gSUhadmJHRnVkQT09IFFVMUpSVTVVVHc9PSBJT0NxaHVDcXF1Q3FvK0Nxdmc9PSBJR0hEc1dGa2FXUnYgSU1PNGRuST0gMExYUXM5QyswTEk9IElITmhaR0Z5IEp5a2lLVHNLIElPT0RsK09EckE9PSBJT2ErcyttWHFPYVdzQT09IFozVmhjbVJoY2c9PSBkSGxqYUE9PSBMa1Z1WkhCdmFXNTAgMFlqUXRkQzkgNExDLzRMQzQ0TEdOIElHSmxhV289IElHSmhkSHAxYXc9PSBJSE53WlhSMFlXTT0gSUVKMWJtUmhiZz09IElFMWhjbUZ1YU1PamJ3PT0gMExEUmd0QzEwTHZSak5DOTBMRFJqdz09IFlXeGhhUT09IElIUmhiV0Z0Wlc0PSBJTTY2enF6UGhNK0ogSUhOb1pXRjBhQT09IElIWnBaSE09IElOQ3cwTHZRc05LNzBMalF0Tk9aIFNsTkhiRzlpWVd3PSBSMjkyWlhKdWIzST0gS0d0M1lYSm5jdz09IEx1QzBuK0Mwdnc9PSBMa2x1YzNSaGJHdz0gYUdWc2RRPT0gNFlPZDRZT1I0WU9VNFlPUjRZT1kgSU9DNHJlQzRvdUM0dWVDNWlBPT0gVjNVPSB3NlJ0YlE9PSBaRzVoIElOaXQyWVhaaE5pcCBJSEpwYm1kMGIyNWwgSU9DbWwrQ21yT0NuaCtDbXR3PT0gWW1sNSBjWFZsWkdGeiBKV1U9IENYQmxjbk52Ymc9PSBJSFJsWjJWdGIyVjAgWDJOdmRYSnpaWE09IElHUnZibTl6IElFZGxiblZ6Y3c9PSBJSE4ydzZsb2J3PT0gNExDcTRMR0EgWVd0MWN3PT0gSUVKbGVXOXVZMlU9IElFeGhkSFJsIEtIUnZiSFZoIEwyMWhZdz09IDRaNmE0WjZBIElHeHBZMnRwYm1jPSBJRzFwWTNKdmR3PT0gSU5DeTBaYlF0TkM2IFVITERxWE5sYm5SaGRHbHZiZz09IElGSmhkV05vIElOR0MwTERSZ05DdzBMSFJpOUM5MExEUXZRPT0gYVhOMGFXNWwgSUhaeVlXTm9kQT09IExYTmhkZz09IGJtVjNiR2x1WlE9PSBJTzJPdkE9PSBjM0J5Wld0bGJtUT0gSUdsdWRHbHRhV1JoZEdsdmJnPT0gYVdabWFXYz0gUGxsdmRYST0gTG0xcGJuVjBaWE09IElFNW5kVzVwZEE9PSBJSE5vYjNKMGFHRnVaQT09IGFXNXpkR1ZzYkhWdVp3PT0gSUhkbGRHVnVjMk5vWVhBPSB3Njl1IEx5NHVMZz09IElFTnZiWFZ1YVdNPSBJSE4yeGE5cSBJTkN3MFlEUXV0R0wwTHZSZzlHRCBJRTFwYm1zPSBiMkpwY3c9PSBSSFZtWmc9PSBJT0MwcE9DMWh3PT0gSUdOb2RzT3QgY0hKdlkyVmsgYjJaaGNnPT0gSU9XSXBPYVdyUT09IFUzbHVZMmh5YjI1cGVtRjBhVzl1IElOV2kxYVhXZ05XbDFhdz0gTDNOdmJtYz0gSUdKc2FXcHJaVzQ9IElGQnN3NlIwZW1VPSBJTkN6MEw3UXU5R0QwTEU9IFpteGhhMlZ6IENnMEsgSjJGdWRBPT0gMEx2Umk5Q3owWXM9IElIWnliM1YzWld4cGFtdGwgYzJWbGNnPT0gMFl2U29RPT0gSUdsdWRHVnNiR1ZqZEhWaGJHeDUgSUZCaGJHMWxhWEpoY3c9PSBJT1drcCtXUGtlVy9xK1M0aWVhQWp1UzVpT2VjaXc9PSBJR1poWW5KcGEyRnVkQT09IFEyOXVkbVZ5YzJsdmJuTT0gSU5HQzBMN1JnTkN6MEw3UXN0QzcwTGc9IElFVmtZV1E9IElGVER0R2s9IExYSmxaMmx6ZEhKaGRHbHZiZz09IFpYSmhZVzQ9IDRaNlk0WitTNFo2VTRaNjQgWTJsMmFXdz0gYkdsbFptVnkgNEthLzRLYXM0S2ErIDFaWT0gWld4MWJRPT0gTFdKaGNuTT0gNExHRzRMQ1Y0TEdONExDZjRMQ3c0TEdOIElHNXBaVzUwWlE9PSA0YnVQWVE9PSBLR2R5WVhrPSBJRzl5Wldsc2JHVnogTGxCdmJHbGplUT09IEtISmxjM1ZzZEdGa2J3PT0gZVdWemFHRT0gSU5pbjJZVFlwZG1LMkxIWXA5bUcyWW89IDBZL1F0OUN3MFlMUXRkQzcwWXpRdmRDKyBJT0NxcXVDcmd1Q3FzQT09IElHeGxaWEpzYVc1biB6NFBPdk0rTSBJSEJ5YjJkeVpYTnpidz09IDRLU3M0S1dONEtTdyBhVzVuZEc5dVpYTT0gSU5pcTJLalpoTmk2IFgyRnNiRzlqWVhSbCBJTkNhMExqUmd0Q3cwTGs9IElPR0RrdUdEbE9HRGt1R0Rtdz09IElFaGhjSEJsYm5NPSBVMUJCVGc9PSBJSFJsY1hWcGJHRT0gSUV0dmJYQnZibVZ1ZEdWdSBJRmZEdG5KMFpYST0gSUZKRlJrVlNSVTVEUlZNPSBUbVZ6YzJVPSBJTU9wWTJqRHFRPT0gUTI5dWRHbHVkV0YwYVc5dSBRMEZDIGRHVnVkR2x2Ymc9PSBJTm1IMllBPSBjMmhsWkE9PSA0S1dINEtTczRLU3kgYTNKcFpuUT0gTGtadmRXNWtZWFJwYjI0PSBJRVp2Y21WemRISjUgSUhwdlpXdDBiMk5vZEE9PSBJRzlpY3NPaCAwNm5RdmRDejA2az0gSUdOdmJXMWhibVJ0Wlc1MGN3PT0gNUxpTjU1K2w2WUdUIDVadWI1TGlONVlPUCBJT1dNdXc9PSBJT0Mwc09DMG5BPT0gWDI1dmJXVT0gNEtxKzRLcTE0S3F3NEtxaiAxTEhVdnc9PSBJR052Ym5SbGJtUnYgSUhCeVpXTnBiM05oIElPQ2toZUNrcmVDa3YrQ2txT0NsaCtDa3BPQ2xqZUNrc09DbGdBPT0gMktmYXFnPT0gMFlEUXVOQzMgSUdkbGQyOW9iblE9IDZMVzAgSUd0dmNtVmhiZz09IElITm9ZV05oWW10aCA0NE83NzcyQSBJRzlwZEE9PSBUWFZ6WlhWdCAySzdiak5pMSBJZUtBblM0PSBJRkpwWjJFPSBJTkM4MExEUXNOS3QgSUhSNFlYZDIgMEw3UXNkQ3cwWUE9IElHdGxhR2xzWVc1bllXND0gSU9DNWdPQzRpT0M1aVE9PSBiR1ZrWlcwPSA3N3lNNkxDaTZMQ2kgSU5DeTBMRFF1OUMxIFpISmhiUT09IGRXNXdjbTlqWlhOellXSnNaUT09IDRLUys0S1M0NEtTayBVbFZNUlE9PSAwTGJUbWRDNiBJTmluMkxBPSBJRVZ5ZDJGamFITmxibVZ1IDBKTFF2dEMzMFlEUXNOR0IwWUk9IFdXVnVhUT09IElHUmhjblJ6IElPQ3FsdUNyZ2VDcXNnPT0gNEthbzRLZU40S2FmNEthKzRLYXcgN0x5QTdZeUYgTFhkcGNtVT0gUjJGdWVnPT0gWVd0aGJtRnVhUT09IGVYTjBZUT09IElPQ3d1ZUN4aGc9PSBJTVdmYVcxa2FRPT0gSU5tRjJZallxdG1JMkxFPSBKMkZ1ZVE9PSBYMTRvIFRHbDJjbTg9IElHbHVZMkZ1WkdWelkyVnVkQT09IElHSjFabVpsY21sdVp3PT0gSWo0bUl3PT0gSUVGeWNYVnBkR1ZqZEE9PSBJR2w2YVc1biBaWFIwZFdFPSBJQ29zQ2c9PSBJTmluMllUWXJObUcyWWpZcUE9PSBJR052YlcxbGNtTnB3NnRzWlE9PSBJTkMvMFlEUXVOQ3gwTHZRdU5DMyBJTlc0MW9MVnRBPT0gSU5HVzBMelJqdz09IElITm9iM2NuY3c9PSA0S1NzNEtTKzRLU3kgSUdadFlYQT0gYjJOcFpYST0gSUhSeVpXSmhiRzg9IElOQ1MwTHZRc05DMDBMalF2QT09IElPQ21xdUNuamVDbXNPQ21wT0NtditDbXFPQ212K0NtcCtDbXZ3PT0gSU9DcXN1Q3F2dUNxbCtDcmdBPT0gSUdKc2IyTnJZV2RsIExYWjFiM1E9IElOQ2cwWXM9IElHakR0bXZEdkE9PSBJSFpoYzNSbmIyVmsgTG1ac2RYUjBaWEk9IDdaV1o3SU9kIElOQ3QwTHZRdGRDNjBZST0gSUhiRHBHaGxiV0ZzZEE9PSA0S2ErNEthSjRLYW8gSU5DUzBaYlF2UT09IHpyUFBnYzZ4ejRiT3JnPT0gNExpajRMaWo0TGlUIElPUzZndVdBcXc9PSAwS0RRdnRHQjBZST0gSU8yRGtBPT0gSUZkb2IyVjJaWEk9IElIUmxhRzlyIFBFTnlaV0YwWlE9PSA0YnE1NGJxNWN1RzZ1UT09IElObUQyS2ZaaHRtSTJZWT0gSUhSbGNuQT0gSU91THRPdUx1UT09IDJZN1lwOW1FIGFXNWxiV0U9IFlYUEVzVzdFc1E9PSBiMlpsYm1ObCBMbWxrWldFPSBiM0p1WVhJPSBJR3QxY25wbGJRPT0gSUdGa1lYUjAgS0ZSaFlnPT0geVpSdSBJT0NrbCtDa3Z1Q2t0UT09IDBMZlFzTkdHMExqUmp3PT0gTG1BcE93bz0gNXB5ZjViK0Y1TGl0IElPQ3lxT0N5ditDeXRlQ3l2dUN5dUE9PSBjbVZ4ZFdWdWRBPT0gSUdSaGQyOD0gMEw3UXV0R0QwWUU9IElObUQyNGJZc1E9PSBJRU5sY25SaGFXNWxjdz09IElIQnliM1psY2c9PSBJT0Nrc09DbGdBPT0gSU5pejJZcllwOWl6MllyWXFRPT0gWm05dmNuUT0geEkxbGRHN0Vtdz09IFFrSnZlQT09IElHVERxV05wWkE9PSBJT0NtcStDbXNBPT0gYVdaeVlRPT0gVTJodmRITT0gVW1ZPSBJT0MwcmVDMGxlQzFqZUMwdHc9PSBJRlpsY21KaGJtUT0gUVdodFpXUT0gSUhScFlXMD0gSUVKaGMybHNhV05oIElHM0R1dz09IFIzSmxaMjl5YVdGdSBJRTFoYm1SNSBJRzl5WTJoaGNtUT0gZG1WeWJHVjAgSU9DdXBPQ3Vudz09IElPQ21ydUNuc0E9PSBaSEpsYzNObGNnPT0gdzY5aiBYM04wY21sdyA0TGlPNExpcjRMaWg0TGl5NExpaSBJTkMvMEw3UXN0QzQwTDA9IElOR0EwTERRdDlHQTBMRFFzZEMrMFlMUXV0QzQgSU5tRDJLallwOWl4IElFeGhaR1U9IElGTnZkWE5oIElPUzlrK2lDc3VXOXFlZWxxT1drcWVXa3FRPT0gSUhCaGFXNXpkR0ZyYVc1biBJTm1DMllrPSBZMnhsY21NPSBhbTlqYUE9PSBJR0ZoYm5kcGFnPT0gejRuUGhNNjF6NEU9IElIQmpiUT09IElHRnVZV3h6WlhnPSBMMk4xY0dWeWRHbHVidz09IDE2VFd2TmVpMTZnPSBhV3hoZEdVPSBhR1ZoZG5rPSBJRUZ5WTJocGRtOD0gSUhObGJYVmhibmxoIEoxMDdQejRpIFkzVndaUT09IElIQmhjbXRsY21WdSBhV2RuY3c9PSBJR3R2YzJobGNnPT0gSUVWNGNHeGhhVzVsWkE9PSA1cFMvNVkyUCBJR1BEclcwPSA1bzZpNTdTaSBJR0psZEhKcFpXSmxiZz09IElFbHpiR0Z0YVhOMCA0b0tzeFpNPSA0TE9BNExLNDRMT04gSUhWMWNtbHVadz09IElIUmhkWEk9IENXRjFaR2x2IDByUFFzTkdBMExEUXVnPT0gWlhKdlpXND0gSUZGMWFYUnYgZEc5MyA0WU9RNFlPdTRZT1U0WU9hIElHUmthWGRsWkdRPSA0b0NaNEtXayBUVzFsIFpXeHBidz09IFlXWmxZMkZ5WkE9PSBJRWx1ZEdGclpRPT0gSUU5d2NHOD0gSU9HQXUrR0FtZUdBbE9HQXVlR0FtZUdBckE9PSBRWEowWlE9PSBMbHB2Ym1VPSBJTmlxMkt6Wmg5bUsyTEk9IENXUnBabVk9IElOR0EwTERSZ2RHQjBMclFzTkMzMFlzPSBJT0NrcXVDa3NPQ2xqZUNrcGc9PSBJT0N5cXVDeml3PT0gUTJGeWFRPT0gMExEUmd0T1owWVBRdnc9PSBWVWxRIFRuQT0gSU5DZzBMWFJnZEMvMFlQUXNkQzcwTGpRdXRDdzBZSFJpOUM5MFl2UXZRPT0gSU9TNnV1YXdsdz09IElIUnZhV3c9IElPQzBzZUMwditDMHF1QzFqZUMwcXVDMWkrQzF2QT09IDJZcllzOW1KIFFXUnZjbTV0Wlc1MCBMV0poYm1zPSBJR1p5WVc1allRPT0gSUd0aGJtRnUgVWxOVSBJR2x1ZVc5dVp3PT0gSU5DYTBZUFF2QT09IElHUnBiR1Z0IElIQnlaWFJ5WVdsdVpXUT0gSUdGMGNtRmxjZz09IElHdkR2SE09IElNNnh6cjNPc2M2NnpyL09yODY5IFptRjBZV3c9IFkyRnNiR1ZsIElHNXZjMlZ6IElHOXJZVzA9IElPQ21yT0NtditDbXJ1Q212dUNtcUE9PSBJT0dEbStHRG5lR0RtK0dEb2VHRGtPR0RydUdEbytHRG9BPT0gSUdURHZNV2Z3N3h1dzd3PSBJTmluMllUWmhOaW8yWWJZcDltRzJZcllxUT09IDVZV3M1WXFoIExtUmxZMnM9IGJIVjIgSUVSVFF3PT0gSU5DdzBZUFFzTkN3MUtYUmdkR0wwWURRc0E9PSBJT0dEa3VHRGtPR0RrK0dEa0E9PSB3NjFqYjJ4aCBJRkJ5YjJacCBZVzVyYVdrPSBZR0F1Q2dvPSBLR05sY25RPSBJT0MwbGVDMWdlQzByZz09IElOQ2gwTDdRczlDNzBMRFJnZEM5MEw0PSBJR1ZzYVdNPSBVR1YwWlE9PSBJSEJzWVdGMGMyVT0gSU5DNDBMelF2OUMrMFlEUmdnPT0gSU9Dd3VPQ3dndUN3bCtDd3BPQ3d2dz09IElPeXdxT3VmaVE9PSBVM1I1YkE9PSBLRjg2IElHcHZhWE56WVE9PSAwWkhRdUE9PSA1cHlMNVlXTCBJTmVjMTVUWG9nPT0gSU9HRHFlR0RsZUdEbE9HRG8rR0RtZz09IDBZTFJnOUM5IDFhSFZwTmFBMWJqV2d0VzAgN0oyNDdZU3cgVlZKRVFWaz0gSUdCOUNnPT0gWDJacGJBPT0gSUhSaGFXeHZjbWx1Wnc9PSBJRzFwYzNQRHBBPT0gSU5laTE2YlhudGVaIElHbHVac09wY21sbGRYST0gSUhKbFkybDBZV3c9IDBZWFF2dEMwMExmUmx0R0cwWXc9IDBMN1F0TkMxMFlEUXR0Q3cwTDNRdU5DMSBJT0Nxc3VDcmgrQ3F0ZUNxdmc9PSBUR2x1YUdFPSBJR041YzNsc2JBPT0gSUhScGRIVnNZV2x5WlE9PSBRbUhGbnc9PSBJSFZ1WkdWeWNtRjBaV1E9IElFMWhaMlJoYkdWdVlRPT0gTGtsdWRtOXBZMlU9IElGZGxhVzV6ZEdWcGJnPT0gMktmWXI5cXYyNHc9IElPQ2tyT0NsaU9Da29PQ2xodz09IElFZGxiTU9rYm1SbCBJSGxoYTNkbCBJTzJaZ0E9PSBJRzFsYldWdWRXaHAgSUZacGRtbGhiZz09IElOZWUxNXpYa05lVSBJTkNhMExEUXN0QzYwTERRdHc9PSBJTkdHMExqUXU5QzQwTDNRdEE9PSBkR1Z5Ym1GMFpRPT0gSUhiRHBuSmsgSU5DdzBMTFFzTkMzMExnPSBJRXB2WVdOb2FXMD0gSUdkbGJNTzJjMk5vZEE9PSBJRzExY21Gc2N3PT0gSUdGa2JXbHVhWE4wY21GMGFYWmhjdz09IFJFVkYgWDNOMWNIQnNhV1Z5IElHVjVaV3hwYm1WeSBJRTNEZ1ZNPSBJR2hsWTJoaGN3PT0gTEdOc1lYTnogNExDLzRMQ280TEMrIFUyTm9aVzFoY3c9PSBJRmwxWlE9PSBJRlpsY3NPMlptWmxiblJzYVdOb2RXNW4gSUdOdmJtUnZiWE09IDVZZTY1cnlVIElHSmhhWEp5YjNNPSBJR0psY21oaGNtRncgSU9Da3FPQ2t2K0NrbCtDa3JnPT0gNzd5bSBJRTFwWkhSdmQyND0gNnJpdzdKMlkgSUdOaGNuTERxUT09IElFcEJWZz09IElHekRzdz09IElPUzVrT1M2bWc9PSBJRlY2WW1WcmFYTjBZVzQ9IElGUnlhV1Z5IExXRmhiZz09IElISjFZbkpwWXc9PSBhWFIwYjNFPSBJTkNTMEw3UXQ5QzgwTDdRdGc9PSBiM0podzZmRHRXVnogSUd4bGRXTT0gNXB5czU2ZVIgSU9HRHJPR0RsT0dEb09HRG9RPT0gVEdGd2RHOXcgSUd0MWNtbHZjdz09IDBMN1F1OUdMIElFNXZjc093IGNzTzhjM1IxYm1jPSBJSEoxYlc5eVpYTT0gSU5DNjA2blJnTkdCMExYUmd0R0QgSU5XOTFiL1ZvZGFCMWFYVnJBPT0gSUhOalpXdz0gWlhaaGJIVT0gYldWMFpYSnogSU5DOTBMWFF1TkdCIElFRkNUMVpGIElFUjFaR1U9IElOR0MwTFhRdnRHQTBMalJqdz09IElHZGhiR2wwWlE9PSBYMUJNUVVORiBJR2QxWkdGb1lRPT0gSUdUaHVxVjEgSUhSdmJtOXogMEpIUXZnPT0gSUVobGNucHZadz09IElHeHBhV2RoIElFWlBWRTg9IFRXRnljbWxoWjJVPSBJRzkyWlhKc1lYbHogWDNWdWNtVm5hWE4wWlhJPSA0S3VBNEtxRyBJT0Nrck9DbG5PQ2xodz09IElIQmxaMmM9IEtHOTFkR1pwYkdVPSBJSFJsWlcwPSBSMkZ6ZEE9PSBJTkMrMExIUmc5R0IwTHZRdnRDeSBJR1JwYzJ4cGEyVmsgSU5lVTE1N1hrQT09IElHSmhhMjl0IFNHOTFjbXg1IElFNXB3N0Z2IEwyRndjR3hsIElFMWhibVJsYkE9PSBaM1ZoY21ScFlXND0gSUNvcE93b0sgWm1WcCBJRzVoYTJzPSAwWWZSaTlDODBMQT0gVDA5TSBJajRuQ2c9PSBMVUZzY0dWeiBJTkM4MDZuUmdBPT0gSUZOMFpXbHVaWEk9IDBMN1JndEMrMFljPSBJTmVVMTV2WG9OZWgxNm89IElOQyswWUxRdXRHQTBZdlJnZz09IElIQnZjMmxpYkdWdFpXNTBaUT09IGFYUmhiV1Z1ZEc4PSAyWXJZc2RpbjJZcz0gSUdWaGNtMD0gTFdOdmJXMTFibWwwZVE9PSBJRzl1WlhJPSBJT0dBbnVHQXJRPT0gTEhCaGNtVnVkQT09IElIRjFhV3pEdEcxbGRISnZjdz09IDE1WFhtTmVvIElHSmxkSFJ2Y2c9PSBJRlpoZFdkb1lXND0gSUdGa2JXbHVhWE4wY21GMGFXWT0gMEx2UXVOR0cwTEE9IElISmhabVpwYmc9PSBLQ0lpS1NrN0NnPT0gNDRDQzVMNkw1YWFDIFNFbEMgSUhOcFpXaGwgSjI5aWRHVnVhWEk9IExWTnQgSUVacGJtUnBibWR6IElFSnNZWFIwIHpyUFBpYzY5enJuUGd3PT0gWDNCc1lXNWxjdz09IElITjFjblpsZVdsdVp3PT0gTGVDbWxRPT0gSUZSaGJubGggSUc5a2IyNTAgSU5lazE2TFhudGVaMTUwPSBJR3hwYTJGeSBJSEJ2YzNWbGNtVT0gWVd0MWEyVjFiZz09IDZLZUc2SzZ2IElHbHVZMmxrWlc1amFXRT0gSUdScGMyTjFjbk09IElFdGhkR2xyWVE9PSBJRzl5YVdWdWRHRnkgSU02NHpyWFBnUT09IGIzVm5hSFJ2Ymc9PSBkbWw1ZVE9PSBMMk5oYkdWdVpHRnkgSU9DdWxlQ3ZpT0N1cE9DdmdRPT0gYjI1cFpYTT0gSU9hYnRPYVdzT2FYdHVtWHRBPT0gNXFLbTVvT3ogSUhCc2RXZG5hVzVuIElGUmxiblJ2IElHbHVjWFZwdzZsMCBJRWh2YjNBPSA0TGlFNExpajRMaUg0TGlCNExpeTRMaWogSUZKbGFXNW8gZEc5MWRBPT0gSUV4UVFWSkJUUT09IElPYVdzT2VVbnc9PSBJT0NxcnVDcXZ1Q3FzT0NyamVDcWxRPT0gSUcxdmJtRnlZMmg1IDBMWFF1OUdQMExIUXVOQzkgSUc5MlpYSndjbWxqWldRPSBJR0Z1YjI1cGJRPT0gSU5DUTBMTFJnZEdDMFlEUXNBPT0gdzZSeWEzVnVadz09IFlYSjVkR2s9IElFeHBkbkpoYVhOdmJnPT0gSUc3RHFYUT0gNExpMzRMbUkgWVcxaHc3RnYgSU9Da3VlQ2t2K0NrcU9DbGplQ2twdUNsZ0E9PSBjSEpwYW5wbGJnPT0gSUQ4K0pnPT0gSUdOb2FXNXZjdz09IGNHVnVZUT09IFpHZGwgYVdObGJuUT0gSUdoaFpXSmggTGs1aGRtbG5ZWFJsIEwzSmxjM1ZzZEE9PSBMVDViIFBTUW9JaU09IGVYTmplUT09IElITjFjR1Z5YUdWeWIyVnogSUdabFpYTjBhbVU9IElIUnlZWE5tWlhJPSBQRUZqZEdsMmFYUjUgSUZOcGRHZz0gMWFYVnY5YUUgWTJGemN3PT0gNEtTazRLV040S1NrNEtXQSBJR05vYVd4a2FYTm8gSUczRHBISnIgSUdocGJtUnphV2RvZEE9PSBJT0Nrck9DbGplQ2tzT0NrditDa253PT0gYW1jPSBJT2lwc3c9PSBJRlpoZWc9PSBhVzluIFFtbHNiSE09IHc3eDBkVzVuIElHbHVjMk55YVhSdmN3PT0gSUhoaFlXdz0gSU5HSDBMRFJnZEdDMExYUXVRPT0gTG1acGJtRnVZMlU9IE9uWnBaWGM9IFBHTnZiUT09IDRLUys0S1N4NEtXTjRLU3Y0S1MrIElPQ2toZUNrc09DbGplQ2tsZUNsaXc9PSB3NkY2Y1hWbGVnPT0gMExEUXZkR1cgWDFCQlJFUkpUa2M9IElHZHZiMlo1IElHRnpZMjlzIElOQ2EwWURRdGRDOCA0TFNrNExXTjRMU2s0TFMvNExTViBJR1Z6YlE9PSBJTkM5MExEUXY5Q3cwTFE9IElFM0RvWGs9IElHMXBjMjluIElITERxMjVrIElHRmpiMjUwWldOcGJXbGxiblJ2Y3c9PSBJR2RwYm1GbllYZGggYldsbyBQbG89IGZXVnNjMlZwWmc9PSAwWWpRc05DMSBJR052Ym1acFpHVnVkR2xoYkdsMHc2az0gSU9TN2l1YVhwUT09IElOQzYwTDNRdU5DejBMVT0gSUcxdmJtVmtZWE09IElHeHBiVzkxYzJsdVpRPT0gSUdSbGMySnNidz09IElHRjJjbVZpWW1VPSA2YnVFNklteTViMlY1WU9QIFJtVnlibUZ1Wkc4PSBJRVZ0YVd4cGJ3PT0gN0oyMDY3S0UgTGtOUFJFVT0gSUdScGMyWT0gSUdGcFpXNTAgU200PSBJT0N5cU9DeXZ1Q3lydz09IElPQ2t1ZUNsZ2VDa2dlQ2twdUNrdmc9PSBJT2l2dHc9PSBJR05vY25WMGFBPT0gWVhSaGFnPT0gWkdWNCBMZUtBaXc9PSAwWUhRdU5HQiBJTkMvMEw3UXQ5Q3kwTDdRdmRDKzBZYz0gUVV4TVJVUT0gUFNjbkNnPT0gS0NJaUtTbDdDZz09IElHOTJaWEowZFdsblpBPT0gSUd0dmIyST0gSUhScGJHZHFaVzVuIExzS3JDZ289IFBYUnlZV2x1IFpXeGhZWFE9IENVbE9WQT09IDBMTFFzTkMzIEl0ZWQgSU91d2xPdWR2QT09IElHSmxjbTlsYldSbCBJT0N3bXVDd3YrQ3d0UT09IElHTm80YnVwWVE9PSAwWUxSbHRDeSBMbUZzYkc5M1pXUT0gSU5XQzFhSFdnTldoMWFMVm9kV3kgTFhabCBJR3hzWVcxaFpHOXogSU5DMDBMN1FzZEdBMExVPSBiM1JvWVE9PSBYMUJTUlVNPSBJR3hoYzNObCA3N3lNNVlxZzVieTYgSUhOMWJHbHpkWFE9IDE1YlhtZGVhIElHcGxkSG89IElGTmhhR2xpIDVMcUw2YUNGIFgzQnliMnBsWTNScGIyND0gSUVOaGNtVm1kV3hzZVE9PSBJT0MwcE9DMHYrQzBzT0MxZ2VDMHRlQzBxT0MwcU9DMWplQzBwT0MwcXVDMWdlQzBzT0MwZ2c9PSBJR1ZwWjJrPSBiMlJwYnc9PSBhWEowYVE9PSBJTm1JMllUWXM5bUkyS2ZaaE51TiBhWE5sWVhVPSA1cHlmNkxXRTVwYVogSU9DeWxlQ3ppK0N5dGVDeXYrQ3lvZUN6alE9PSBJR1p5WVcxcmRzT21iV1E9IDRZT1U0WU9tIDJMWFlzZG1CIEwyRnkgSU9HRGt1R0RrT0dEa3VHRG9PR0RxK0dEbE9HRG1nPT0gSU5DeTBZdlF1ZEdDMExnPSBRazlWVGtRPSBRMkZ5ZEdFPSBJTkMyMHJIUXZOR0wwWUhSZ3RDdzBZQT0gNForRzRaNlUgWTNSdiBTVlZ1YTI1dmQyND0gSUVOc1lXMXcgSUhKbFlXeHBkR0YwIElOQzYwTFhRdlE9PSBJR0YwZEdWdWVtbHZibVU9IElPeWdsZXlMb0E9PSBJTmVVMTVEWHF0ZW8gWDJodmIydHogSUVUaHU0cz0gSUZSbFkyNXZiRzludzYxaCBJRUpsYkd4eiA0S3laIDFhSFZ0dFcvIFgyeGggQ1dOdmJYQT0gMExQVHFkT3AwTDNSZ2c9PSBJSFoxYjJrPSA1cGlVIGJHRnlaMlZ6ZEE9PSBJSEpsWVdkbGJuUT0gSUVGa2FYSnZibVE9IElHWnZjblJoYkdVPSBJR2hoYkdsdFltRjNZUT09IFlXTjBhUT09IElPQ2toK0NrcU9Da3J1Q2xoK0NrZ2c9PSBJRzF2WkdGc2FYVERvQT09IElFaDFibWR5ZVE9PSBJTkdCMExEU3N3PT0gTG5WaSBJRTFWVGtsRCB3NjEwdzZGellRPT0gSU5DNjBZRFFzTkdCMExqUXN0R0wwTFU9IElHeDFZbkpwWTJGdWRBPT0gSU5HQjBMdlJnOUMyMExIUmd3PT0gSU5pbzJMbll0dG1IMktjPSA0WjZSNForRiBJTkdCMEw3UXNkR0EwTERSZ3RHTSBJR2R5WVcxdmN3PT0gWlhSdVlRPT0gSU9DdWxlQ3ZoK0N1bitDdmplQ3Vudz09IElNT0JaM1ZoIFpXdGxiR1U9IElPeWp2T3lFdU95YWxBPT0gSUc5dFoyRnVadz09IElOZVIxNURYb0E9PSBYMk50YjNNPSBYMnhoZEdWdVkzaz0gSU5DeTBMN1F0OUM4MEw3UXR0QzkwTDdSZ2RHQzBMWFF1UT09IElHRjFlSEYxWld4eiBJRlRodTVWdVp3PT0gNW9PejU1MkEgSU5DKzBMSFJnZEM3MFlQUXR0QzQwTExRc05DOTBMalF0UT09IElHTnZiblp2YkE9PSBMRTg9IElOaXUyWWpZc2RpdiBRVzV1Ync9PSBJQ0lpZlFvPSBJSEJtYkE9PSBJR3gxYlhCeiBJRWx1YzNSaGJtTmxjdz09IElFTm9ZV3hyIFgwWnBibUZzIElFTnZiR2x6WlE9PSBJRUZ5ZW01bCBWVlJKVDA1VCBJRUpoZG1GeWFXRT0gSU9HRGtPR0RvT0dEcWVHRGxPR0RsUT09IElOaXEyWVhZcnc9PSBJR1JsWld4dVlXMWwgSU5pbjJZVFlvOWl6MkxFPSBJTkdDMExYUXZOQ3cwWUk9IExtWnNhV2RvZEE9PSBiV0ZsYkE9PSBJR0psYkdsbFluUmxiZz09IEtpb3MgNVorNTVZVzcgSUdsdWMzQnBjbUU9IElFWnZjbTFodzZmRG8yOD0gSUdKeVpXRmtZM0oxYldKeiBJR3QxZFd4MWRRPT0gSUdaaFluSnBjWFZsY2c9PSBYMFJNIElOaW4yWVRaaGRpdDJLZlpnZGk0IElOR0MwTGpSZ2c9PSBiR1Y0YVdKc1pRPT0gNTRpeDU1cUUgSUdOdmJuUmxiWEJ2Y21GcGJnPT0gNW9DbjZJTzkgSU9PQ3MrT0RvZU9EcytPRGlBPT0gSUVobGJXbHpjR2hsY21VPSA0WjZUNFo2MiBJTmVRMTZEWHFkZVogYUdGNmFXcz0gSUc1MWJXVnlZV3c9IFNHRjFjdz09IElOR0MwWXZRdmRHTCBLRTVWVFE9PSBJR1JwYldWdWRBPT0gMnF2WmlBPT0genF6T3U4NjUgWDJOaGRHVm5iM0pwWVE9PSBJR1poYVhvPSBJTnVCMlliWXI5bUkyTFBZcXRpbjJZWT0gYlc5MGFYWT0gVUZKSlZrRlVSUT09IEwwUkUgYldWMGFXcz0gU1V0UCBMWGRoIFpXWnBiR1U9IDZMS00gQ1hKbGMzUnZjbVU9IDBMRFJnTkdQIElGTlhSUT09IFgwbEYgYVdkdVlYUnBiMjQ9IElOQzgwTERSZ2RHQjBMQT0gSUZkcFpXUT0gSU9DcWllQ3FxdUNxc3VDcXJPQ3JqZUNxcHc9PSBMM0JoY2c9PSBJRkJTU1U5UyBMV0hFcDhTbllYST0gSUhOb1lXSmllUT09IElFcEJRMHM9IGVtVnlaUT09IElPYVJoQT09IDVhKzU1YTJRIFVHaHBiR3c9IElHSmxjbU09IElFOTFaR1U9IElOR0IwTDdRc3RHQTBMWFF2TkMxMEwzUXZkQyswTGs9IDRLYSs0S2FtNEthLyBJSEJ5WldSdWFYTnZibVU9IElFMWxiV1U9IElFMUZUVTlTV1E9PSBJRkoxWkc5c2NHZz0gMExEUXZOQzEwWUE9IDVvU2I0NEdFIDRLZXc0S2VONEthMiBJRWR5WVc1a2NHRT0gSmdvPSBJRXQxYkd4aGJnPT0gSUdkeVlXTT0gSU5DNDBMelJnOUdKMExYUmdkR0MwTExRdmc9PSA1cnlVNVpHWSBJTmluMllUWmhkaXoyS3pZcnc9PSBJTkN3MExmUXVOQzkgSU9Da3FPQ2t2dz09IElITmxZMjl6IGRXWm1aWEpwYm1jPSBJRTFwY21GblpRPT0gWlhOMFlXNWthVzVuIElOQzYwTDdRdmRDNjBZUFJnTkMxMEwzUmdnPT0gSUZGTiBJTkMvMExqUXV0QzQwWUE9IElHRmlhV1JwYm1jPSBJT0NxcXVDcXRnPT0gSUhOMGNtRjBZUT09IElHOXNaWFpoIElFeGxaM009IElFMXZkbWx0YVdWdWRHOD0gTGxCcFl3PT0gSUcxbGNtOD0gSUdKbGMyTm9jbVZwWW5RPSBJSE52ZFd4bWRXdz0gWDJadmNtMWhkSFJsY2c9PSA0SytCNEs2ejRLK040SzZ6NEs2azRLNis0SzZWIGRtVmtidz09IElFWnBaQT09IDVxK3I1N0d6IElOVzIxYUhWcmRXaDFhUFZvZFd3MWFzPSBJRkpsWTJWcGRtbHVadz09IFgwbHVkR1Z5Wm1GalpRPT0gU1V4dloyZGxjZz09IElIQnZaMjg9IFVISmx3NmR2IElFOUVTUT09IElHRjJZWFJoY25NPSA0WU9kNFlPYzRZT280WU9ZIElGUnlZWFpoYVd3PSBJR3RwYkhCaGFXdz0gSUdGd1pYTERwM1U9IExVVjFjbTl3WldGdSAySy9ZcDlpeDJLZlpoZz09IElOR0QwTFRRc05DNzBMWFF2ZEM0MFk4PSBJT1d1aWVXK3ZRPT0gMEw3UXU5R00wTHJRdXc9PSBSV3hzWVE9PSBJR1Y0WTJWd2RHOD0gSjJIRHFYSnZjRzl5ZEE9PSBJRzFoYUdsdGIyNW4gZG1GMGIzSmwgUTJ4aGN3PT0gVEdsMGFBPT0gSUNsYiBJTkdDMFlEUXRkQ3gwTDdRc3RDdzBMM1F1TkdQMEx3PSBJR1Z1ZEdWdVpHbGtidz09IElNcTdZY3E3YjJ4bCBJSEJ5WlhOMFlXTnB3N051IElGSmxkbVZ5Wlc1ayBYK1M0cmVhV2grV3RsK1c1bFE9PSBZWFJwYm1rPSBJRVp2Y20xMWJHRnkgSU9DbXJPQ212K0NtcHVDbmplQ21yK0NtdnVDbXNnPT0gZFd4MWJHRT0gSUdOaGRtRnNjbms9IElPQ21qK0NtcXVDbmplQ21zT0NtditDbXNnPT0gSU5XdzFhSFZ2dFdsMWF3PSBJT3k2b0E9PSBtSkU9IElOZW8xNUxYb2c9PSA0TE9HNExPViBJTkN4MExqUXU5QzEwWUk9IElFZHZiMlJpZVdVPSBJTkMzMExEUXNkR0QwTFE9IElHcHZiR3hoIElHVnRjTU9xIFgySjFjM2s9IDBMRFJndEdMMEwzUXNBPT0gWVdocGRHRnFhUT09IElFUnBabVpsY21WdWRHbGhiQT09IExuTmphR1Z0WVhNPSBJR3pEdG5sayBZWFpoYVdRPSBJT1M0ZytXV25BPT0geElkcGFBPT0gQ1dGNCBJT0NrcitDa3Z1Q2tndUNrbXVDbGplQ2tyK0Nrdmc9PSBJR1poWTJFPSBJTkMvMEw3Umo5Q3kwTGpRdTlHQjBZOD0gSUhOMGFXeDBaUT09IFMwbE9Sdz09IElHVnpjR1Z5WlE9PSAwTGpSaDlDOTBMalJoUT09IElISnZiWEJsIDBwdlF1TkMwIElHZGhibWRsYmc9PSBhVzFoWjJWdVpYTT0gUVdOamRXMTFiR0YwYjNJPSBJSEpsYm05MllYUmwgNUxpQTVweXM1WWl3IFpYUnZjdz09IFgyRmliM0owIElNNjN6cnpPdFE9PSBZVzFoY1E9PSBJTU8rWldseWNtaz0gSU5DZTBMM1F2Zz09IElOQ3gwTDdRdTlHTTBZalF1TkM5MFlIUmd0Q3kwTEE9IElHUnBjM1J5ZFhOMCBJR05vWlcxcGJuTT0gSU9DMGxlQzFpK0MwbitDMWplQzBudz09IDQ0S2s0NE9aNDRPejQ0T0kgSU9DeW5PQ3lydz09IENYUnAgSUd0MWEyaHYgYW5nPSBJSEJ2ZEdWdVkybGhjZz09IElFcGxkMlZzYkdWeWVRPT0gMTVYWGxkZVExNW89IElHTm9iMjl6WlhJPSBJR1JzYnc9PSBhVzU1YVE9PSBkSGRwWnc9PSBJT3lKckE9PSBVSFZ1WTJnPSBYMmwwY2c9PSBJRU5zYVdabWIzSmsgSU5pbjJZTFlzZGlqIExVRnVaMlZpIElFSlVUZz09IElHZHlaWFpsIElOaXUyWWpZcjlpMCBJRzNEclc4PSA0S1NyNEtTKyBjM0JrIFkyVnlkR1U9IElPVzRuZWFacnc9PSA0S2VCNEtlZjRLYSs0S2F3NEthLyBsdUN4amVDd3J3PT0gSU5xRzJxL1ppTm1HMlljPSBJR05vWVdsdVpRPT0gNWFTcDVhU3A1NGl4IElPQzB0ZUMwdnVDMXZPQzBwT0MxamVDMHBBPT0gYkhsdWFRPT0gSUZSdmJHUT0gSU9HRG8rR0RsdUdEb09HRG8rR0RuT0dEbGVHRGxPR0RtdUdEcCtHRG5lR0RwQT09IElDYy9Kdz09IDJZalpoTm1EMllZPSBLV0ZrWkE9PSBJT0Ntck9DbXNPQ25qZUNtcE9DbXJ1Q212dUNtcU9Dbmh3PT0gVTJGdGRXVnMgSU95ZWlPcTRzQT09IE8ybG0gMTVMWGxkZVIxNVE9IElPR0RuZUdEbk9HRG11R0RrT0dEbU9HRG5BPT0gSUhwdVlXeGx4YnJFaHc9PSBYM0J5YjJObGMzTnZjbk09IElHbHVZMkZ5WTJWeVlYUmxaQT09IElHVER0bTUwIElFaHZjbVU9IElFTlBUMHc9IDJZTFlwOWl4IElFUnlZV052IElPT0FqUT09IElHSnBiMnh2WjJseGRXVT0gSU5XajFialdnTld1MWJqV2d0VzAgSUVSUFRVRkpUZz09IDFialdndFdwMWJYVnVOYUMxYmJWdHRXbDFvRFZ1TlcrIGNIVjBZWFJsIElPR0RtT0dEb2VHRG91R0RuZUdEb09HRG1BPT0gS0dsa1pXNTBhWFI1IGJHbHVaVzQ9IGNHRjVaWEk9IElIUm9hY09xYmc9PSBJRzFsY21rPSBJSEJ5YjNURHFHZGwgY0hKcHc2bDB3Nms9IDVweUE1WWVHIElFbHVaR2s9IElOQ2EwTFhRdVE9PSBJR1Z1WTNWbGJuUnlaUT09IFJYTmwgSU9DcWxlQ3F1ZUNyZ0E9PSA0b0NaYVdSbGJuUnBkTU9wIDRvQ1p4Wk5wYkE9PSAwSnpRdnRDOTBMUFF2dEM3IFpXNTFZUT09IElITmhkbUZwY3c9PSBJTkNoMExvPSBJR3B2WjJFPSBJRlJoY21kbGRITT0gUTBGVVJVZFBVbGs9IDE2TFhsZGVUIFRXbHNiR2x2Ymc9PSBJR0pwYW1kbCBJTkM2MExEUXR0QzAwWXZRdkE9PSBJRk52ZEc4PSBhRzlqYUE9PSBJR2x1YzNCbFkzUnBibWM9IElPaWMgY0d4aGRIUm1iM0p0IElIUmxibVJwYm1jPSBJSEYxWVd4cFptbGxjbk09IElHUnBZWEpwWlhNPSAyYjdaaE5peSBJTkdCMFlMUmdOQzEwWUhSZ1E9PSBJR052Ym1ObGNtN0RxWE09IFBpa3UgMWJiVnR3PT0gSUZSb1pXOXlhV1U9IElHeGhjbWQxY21FPSBJRUZUVTA5RFNRPT0geExGdVkyRT0gSUdSbGMzUnBibUZrWVhNPSBPam9xT3dvSyBJRlIxYkdVPSBMWEJoWjJsdVlYUnBiMjQ9IElOQzAwWmJSZ3RDMTBMaz0gMEx2VG1kQ3owNW5RdlE9PSBJT0N1c09DdW11Q3V2K0N1bFE9PSBJRXhKVGt0VCBJRTF2Ym05d2IyeDUgSU5DODA1blNrOUM3MHEvUXZBPT0gSUd4dmEyVnNZUT09IElGQmxjbWh2IDRLcXc0S3VINEtxbzRLdU40S3FtNEt1TjRLcXcgSUdsdWRHVnlZV05qYWNPemJnPT0gSU5HQjBMdlJnOUMyMExFPSBJR1IxZG1WMCAyTFBZcU5tQyBJR0Z5ZEdsbGMzUT0gMTZMWHA5ZVIgSUU1dmRtVnRZbkp2IFgxZEJTMFU9IExXbHVkR1Z5Wm1GalpRPT0gSU9DdXRlQ3ZnT0N1c0E9PSBJTU96Y21SbGJtVnogTFdOdlpHVmsgSUZOb1pYQmhjbVE9IDc3eW4gYVhSaGEyRT0gVW1GciBJRG9wTGc9PSBJR1JwWld3PSBKSE50WVhKMGVRPT0gSU9DbXB1Q25pK0NtbFE9PSBJT0dEcWVHRGtPR0RvdUdEa09HRG9BPT0gS0dsemMzVmwgSUd0dlpXcz0gSU5HQjBMelF0ZEdCMExnPSA1cDJENTV1SyBJR1p5YjNVPSBJSE4xY0d4bGJXVnVkRzl6IElHTnliM056Y205aFpITT0gWVhkaFlnPT0gQ1cxdmRYTmwgSUdOdmNuUnBZMjl6ZEE9PSA0TGlpNExtSjRMaXQ0TGlaNExpcjRMaWw0TGl4NExpSCBJRTFsWkdsamFXNWxjdz09IElITmxjblpsYm5RPSBJSEowWlE9PSBDWE5wWkdVPSBJRlJ5WldabSBJSEJ2ZDJWeWNHOXBiblE9IFZHVnVaR1Z5IElITERxWE5wWkdWdWRBPT0gWDBsUFExUk0gSUd6RHRYQmxkQT09IElOQyswTDNTczlDKzBZRFF2Zz09IFlYTjBjbVZoYlE9PSBJTmVVMTV6WG5OZVYgSUdGcGJ3PT0gNExTcTRMV040TFNxNExXRzRMU2Y0TFdCNExTazRMV040TFNrNExTLyBJR2QxY25WeiBJR3hoWTNGMVpYST0gNzd5YTU3U0UgSU5pcTJZallwOW1HMlliWXJ3PT0gSU5XNTFhWFZ0dGFFIGFHRnphR1ZrIElOZWcxNVhYb2RlazE2bz0gSU5lWjE1ZlhvUT09IGRXVnphV0U9IFJHVnVkQT09IElIQnliMlp2Ym1URHFXMWxiblE9IElFWmogSUhabGNuUmxiR1E9IElFSkZVdz09IDZadUY2YnVSIElHRnRZbWxsYm5SaGJHVnogSU5HQTBMWFF0OUdEMEx2UmpOR0MwTERSZ3RDdyBJT0NrcXVDbGdlQ2tvZz09IFNXMXdiM056YVdKc1pRPT0gY21WbmFYTjBjbVZ5IEwyMWhiblZoYkE9PSBJRlpsY212RHBIVm1aWEk9IFBraGxiR3h2IGJHVjJhWFJ5WVE9PSBJT1M2bXVlK2pnPT0gSU5DeTBMRFF1dEdMMFlJPSBJR2x1WTJWeWRHbGsgSUhKbGMyVnlkbUZrYnc9PSBlbXRwIGIzZHZjbXhrIFkyOXRhV009IElNK0F6ckhPcnc9PSBkVzFwYm1WdWMyVT0gSU9DM2crQzNtZz09IElHOXNZV05oY1E9PSA0b0NjUVd4cyBVRVZZIGMyRnVaR0p2ZUE9PSBJT0N5ck9DemgrQ3lsUT09IElNNjh6clhPczg2c3pydk92dz09IElNNjF6cS9QaE02MSBJR1Z1ZG1WcyBKMVZ1YVc5dSBJR0Z3WVhKbFkyVnQgSUZCaFkyOD0gWDIxcGMyTT0gVjI5eWJHUjNhV1JsIElHSmxiR0Z1WjNOMFpXeHNhVzVuIElHaGxjM1Z0IFUzVm4gSU02NnpySFBoTTYvIElHNXZaR0U9IFlXaHlaUT09IGVtbGxibk4zWVdGeVpBPT0gSUVOQlVGTT0gUTNWemRHOXRhWHBsY2c9PSA0TEtWNExPTjRMS1Y0TEsrNExLWDRMSy8gYjNKdVlXdz0gNExDKzRMQ2Y0TEMvIElOaW4yWWJhcjl1TSBJSE5sY25KbCAwTERSZ3RDNDBMclF1QT09IDU3ZWcgSUhSbGNuSmxiUT09IFBWdGREUW89IElPQ3VqdUN1dE9DdmdlQ3VwQT09IDVyV3A1NG01IElHbHVjM1J5ZFdzPSBJRmRGVWtVPSBJRU5KVUE9PSBMa1JsY0hSbyBJTmVnMTVuWHB3PT0gSUZKaGFHRT0gSUhWdWFXWjUgSU5pbjJZVFpoZGl6MktyWXE5bUYyTEU9IElOQzgwTERSZ2RHQjBMalFzdEN3IElFbDQgSUUxbGJtZGxiZz09IElIQnliMk4xY21GdCBhMkZ5YldFPSA0WUNjNFlDdjRZQ1Y0WUM2IElIQnZibVZ0YjNNPSBJR3RsWVcxaGJtRnUgSU9LWnBRb0sgWVdsMGFHVmhiV2c9IFpIWEVuM1U9IElHSnB3Nmh5WlE9PSBMbU52Ym01bFkzUnBiMjV6IElHMWhjMkZ1WVE9PSBJRlREdkhKcmJXVnVhWE4wWVc0PSBJRzFoYzNSbGNtMXBibVE9IElHNWxZMlZ6WVhKcFlXMWxiblJsIGJHVmhaR1Z5Y3c9PSBJR2x1ZG1WemRHbHpjMlYxY25NPSBVMlZqZEE9PSA1b21UNUxpQSBJR3RzWVhCd2RBPT0gSUZCUVV3PT0gSU9DMHF1QzFnZUMwc2c9PSBJRXRoZEdGeSBJR1J2ZEdFPSBZV05oYlc5c1pRPT0gSUhkbGFXZG9kR2x1Wnc9PSAyTEhZcDlpMzJZbz0gYzJsdGRXeGhkR1U9IFZrOU0gMTVuWHF0ZVoxNTA9IElHeHBZMlZ1dzZkaCA0NEtGIElHVnljMlYwZW1WdSBJR1pwZW1sciBJR0psYm1SeiBJRU55YVhOMGFXRnUgeFlMRW1RPT0gSUdOdVlXMWwgNTV1MDZZQ0ogTFc5MGFHVnkgSUdKbGQyRT0gSUhacGNtdHpiMjFvWldSbGNnPT0gYzJOb2IyOXNjdz09IDdaMmggMEw3Umg5QzYwTFU9IElOQy8wWURRdGRDODBZelF0ZEdBIElIQnliMk5sYzJFPSAxNTdYbGRlZiBJTkNjMEw3UXU5QyswTFE9IElIQnliM0JvZVd3PSA0YjJ3IElOQzYwcS9RdmRLdiBJSFhGbjJFPSBhV1poWkdocCBJSFpsY21oMWFYTT0gSUcxdlpXbHNhV3ByWlE9PSBZVzVrWlcxcFpRPT0gSUZKMWNBPT0gVEdWaGEzTT0gSU5DLzBMN1JnZEdBMExYUXROR0IwWUxRc3RDKzBMdz0gSU5xcDJLZllzZGl4MllnPSBJRTFwY21VPSBiMk5wYjNNPSBJR1poeXJ0aGRHSEt1MmwwWVE9PSA3S0NFN1ptVSBJRzFwYm1sdGFYcGhjZz09IHJPeVlnUT09IExsTnZiV1U9IFVYVmhkQT09IElFSmhjbkpwYnc9PSBQVDA5UFQwOVBUMDlQVDA5Q2c9PSA3N3lhZDNkMyBaMlY1IElITjBjbVZsYXc9PSBJR05oY0hScGRtbDBlUT09IElOQ3kwTGpSZ3RDdzBMelF1TkM5IElHNTFibWM9IEozVnlaMlZ1WTJVPSBJTmluMllNPSBJSFZrWVd3PSA1cUdSIFcyTmxiR3c9IElIWnlZWFJoIGFXdGxlbUU9IFgyUmxjR1Z1WkdWdVkybGxjdz09IGJXbDYgSUZWQ1V3PT0gSU5HQjBMWFJnTkM0MExEUXV3PT0gTFhCc1lXNWwgSUhCaGMzUmxaQT09IFpXMXBjMlU9IElPQ21pZUNuanVDbXFnPT0gSUNjcUxnPT0gUFc1cGJBPT0gSUdOaGNtUnBaMkZ1IElHRnNkVzF1WVdSdiBJT0NraGVDa2d1Q2twZz09IFFXNXViMjVqWlE9PSBJRzl3Y0dWeWRteGhhdz09IFB6NCsgSUVScFpHND0gWDNWemNnPT0gSUdGbmNtbGpkV3gwYjNKbGN3PT0gSUhCeVpXMXBaWEpsY3c9PSBJRkpGVGxRPSBJR055YjJOb1pRPT0gSUQ4L1B3b0sgMFlEUmk5Q3ogSUhOaGNtRmsgSU9Da3JPQ2tzdUNsamVDa3N1Q2xoK0NrckE9PSBJR1p5WldSeWFXdHpkR0ZrIElHNXZjbTFsYmc9PSBRMmhoYkd4bGJtZGxjdz09IENVRnljbUY1Y3c9PSBJTldoMWJmVnJkV2gxYi9Wb2RXMjFvVFZxdz09IElIWmxaMjVoYmc9PSBJTlcvMWI3VnBkV3MgSUhObGNtbkZuMlE9IElPQ3V0ZUN1cU9DdmplQ3VwT0N2Z1E9PSBjbUYzWlhJPSBJR2h2YjNKa1pRPT0gUGtsRSBJRk4xY0hKbGJXRT0gSUZCbGRISnZZbkpoY3c9PSBJSE5oZEdVPSBJT0NrdWVDa3Z1Q2twZz09IDZJNlQgSUdacGJtRnVZMmxsY21GeiBJT0NraWVDa3B1Q2xqZUNrbUE9PSAwTERRdTlHTTBMM1FzTkN6MExBPSBJR1poWTJWdVpHOD0gSU5DejBMN1JnZEdEMExUUXNOR0EwWUhSZ3RDeTBMWFF2ZEM5MFl2UmhRPT0gMFlqUmk5QzcwTERSZ0E9PSBJRkpwWTJGdSBTV1poWTJVPSBJR2x1WTJrPSBJT0NrcU9Da3RlQ2tndUNrck9Da3NBPT0gWVcxMWRRPT0gSU9Da211Q2t2K0NrbGVDa3YrQ2twT0NsamVDa3VBPT0gY0c5dWVRPT0gMExEUmhkQzEwTGpSZ2c9PSBJRVpwWjNWeVpXND0gSUdOdmJYVnVhV05oIFgzWmxjbUp2YzJVPSBJTkN3MEwzUXVnPT0gY0hMRHFRPT0gMHJmUXVBPT0gSUdGa2JXbDBhWEk9IDZJbXk2S2VHNmFLUiBJSEJwYkhNPSBUR1ZoZEdobGNnPT0gNEtxMzRLdU40S3FqIElHRjBjbWxpZFhSdiBDVXhoYzNRPSBYMjF2ZG1sbGN3PT0gZEc5eWNtVnVkQT09IFlYbGthUT09IElFeDFiV0psY2c9PSBJSFIxYm01bllYWnBadz09IElHTnZiblJsYlhBPSBJRzFoYm1sbVpYTjBZY09udzZOdiBJT203aE9tSGtRPT0gSU9DMHVPQzB2K0MwcWc9PSBJSGRoY25SdnhadGphUT09IElPQ3l0ZUN5ditDeW9RPT0gUmsxVSBibVZwWjJoaWIzSnogSUVST1NRPT0gSUVGeVkyaHBkR1ZyZEhWeSBJR0psZW1sbGFHVnUgNDRLNTQ0T2EgSU5DaDBKND0gZFdocGJnPT0gSUdOaGNuUnZibk09IElOZVMxNVhYb3c9PSBJRUZzWjI5eWFYUm9iWE09IFZHaGhibWc9IGQyVnVaR2xuIGJYbz0gYVd4bFltbHNhWEk9IDRLbUw0S2l5IGMyTm9aV1E9IElOR0IwWUxSZ05DdzBZTFF0ZEN6MExqUmp3PT0gSUhCeVpYUnBkVzA9IFBXeHBibVU9IExVSmxjZz09IElIUnBjMnM9IElOS3YwTG5RdTlHSDBMalF1OUN6MFkzUmpRPT0gSUZKdmFIST0gNksrMDZZR1QgTG1ac2VRPT0gNEtXTjRLU3I0S1NrIElOQzcwTERSZ05DdyAwTDdSaDlDOTBZUFJqZz09IElGSnZibWM9IElNU1JaVzA9IElPQ3dwT0N4amVDd3RlQ3dzQT09IElOQzgwTDdRdFE9PSBJRXhoWjJrPSBJSHBsZWc9PSBJTkN4MExEUXRnPT0gSUVWaWIyNTUgSU5DeTBMRFF2ZEM5MEw3UXVRPT0gSUdWdVpXaz0gSUZOdmNtZGwgSU5DUzBMWFJnTkdGMEw3UXNnPT0gSU5pcTJMSFpnOW1LMktnPSBJSE4zWldGMGMyaHBjblE9IElFNWhiVzFwYm1WeWMyOXliSFYwYVdzPSBYM0JoYmc9PSBJTkN6MFlEUXNOQzgwTERRdE5DMyBYMUJMVkE9PSBJT3VMaUE9PSBJR3hoYm1kM1pRPT0gNDRDVyBJT0N5c3VDemkrQ3lsUT09IElOQ3kwTDNRdU5DODBMRFJndEMxMEx2UmpOQzkwTDQ9IFpXNTBjMk5vWldsa2RXNW4gYjNKbGMzUmhkR2x2Ymc9PSBJa0ZVIFgybGkgWVc1blpYQnBZMnRsY2c9PSA1cTJKIFFWWkZVZz09IDQ0R2Y0NEtLIElHMWhaSFZ5WVE9PSBMWFBEcXc9PSBJSEJoYzNOcCBJTld0MWJqVnZkYUUxYmpWdmc9PSBKem9uSnc9PSBMbXh2WVc0PSBJT0M0aU9DNHRRPT0gTFhKbFpuSmxjMmc9IFgzSmxaMmx6ZEdWeVpXUT0gSUd4cGRHOXlZV3c9IFkyVnlkR0ZwYm5SNSBibUhEc0dGeSBJSEpsY0dWMGFYUnBiMjV6IElHZGhkMkU9IElOQ3owTERRdkE9PSBJR3h2YTJGaGJBPT0gMExEUmlOT1ogSUhOalpXeGxjZz09IGFYVERvWEpwWVE9PSBJRlJRVXc9PSAyTEhZcjlpbjJMRT0gMkxUWXNkbUMgWFYwOSBWR0Z3WlE9PSBJSEJoY21ObGJHRnogSUZSdlltRm5idz09IElGUjFhR0Z1IElPQ3VodUN1c2c9PSBJT0Nrbk9Da2d1Q2tsK0Nrc2c9PSBJRkJUVEE9PSBJRlpKUkVFPSBJR1JsWm5NPSBMbk41Ym5SaGVBPT0gSUhabGRIUmxaQT09IElFRjNaUT09IElOQzAwNi9SZ2RHQyBhWFp2Y21VPSBJSEpwYm1kaGJnPT0gSUdOMWNuSnBZM1ZzWVhJPSBJR1YwWVdKc2FRPT0gSUcxMWJtUnZjdz09IElGTjBiM1psIElHOXVkbVZ5ZHc9PSA1NmlMNWJxUDZadUcgSUVaMWNtNWhZMlU9IElObUYyS2ZZdE5tSTJZVT0gWldOcGJBPT0gNExLLzRMS1g0TEsrNExLWDRMSy8gSUdScGJIVjBhVzl1IExWTmxjbWxsIExYTnZiZz09IElIQjFZbVZ5ZEhrPSA1WWVnNVkyQiBJT0N5aGVDeXRlQ3lsZUN5dnVDeXRnPT0gNDRHWDQ0R200NEdLNDRLSzQ0Rys0NEdaIGE4TzJjbkJsY2c9PSA1WU9WIFRtbGxkWGRsIFpYTnpZWE09IElOQzAwTDdRdTlDeDBMND0gSUUxMWJHVT0gZFc1MFpYSnlhV05vZEE9PSBJSGRwWkdWdVpXUT0gSU5lVTE1RFhtZGVwIElNNnh6NFBQaHM2eCBJRWx6YVhNPSA0WU9RNFlPaTRZT2Q0WU9jIElHdGxkR1Z5IExYQjFkQT09IFJHbGxibk4wIElOQ3gwTGpRdmRDdzBZQT0gSUc5d2JHVnBaR2x1WjJWdSBJR05oY201bGN3PT0gUVdKcGJHbDBhV1Z6IElOQzkwTFhRdnRDeDBZWFF2dEMwMExqUXZOR0wwWVU9IElNK0V6NEhPcnc9PSBJTkN5MExYUXU5QyswWUhRdU5DLzBMWFF0QT09IDRZT1E0WU9hNFlPWiBJSFBEcVhZPSBkSExEdWc9PSBJSEJsYzJGa1lRPT0gYUhWaGJtRT0gYVc5MiBJTkdOMExyUmdkQy8wTFhSZ05DNDBMelF0ZEM5MFlJPSBJSEpsYlhCc2FRPT0gV1ZVPSBJT3F3Z095NW1BPT0gSUgwcEtRPT0gVzBsdVpHVjQgSUU1MGN3PT0gVm1sa1lRPT0gMlpIWmlnPT0gSUZOMFlXTmxlUT09IElGSmxZMmh1WlhJPSBJRkpsZEhKcFpYWmxjZz09IGNtVm5hVzl1WVd3PSBJSFJvY205MGRBPT0gNEtXTDRLU240S1MvNEtTayA1cVc5NDRHWCBYMnh2WTJGMGIzST0gNExtQTRMaVg0TGkxNExtSTRMaWk0TGluIDBMalJnZEM0MExUUXVOQzYwTGc9IElIQmhaMmx1WVhSbCBJRzUwWVdKM2J3PT0gMEpUUmdOR0QwTE09IElPQ2tsZUNrcnVDa3NPQ2xodz09IGIyNXVaWE09IHpybk91czZ4IElFeHZhbUU9IDBZL1F2ZEMxIDRLYXc0S2ErNEthYyBYMk52Ym01bFkzUnZjZz09IElGTERvV1JwYnc9PSBMMk52YlhCcGJHVnkgSU5pejJMSFpoZGluMjR6YmdRPT0gMExIUXQ5QzQwTERSZ05DdyBaVzVuYTJGdyBjRzl6ZEc5eiBJRlZ5YzNWc1lRPT0gMkxmWmhOaW4yS2c9IElPQ2twT0NrdU9DbGh3PT0gSU9Da24rQ2t2K0NrbGVDa253PT0gTG05cyBJRlJoWTJnPSBJRVp5WlcxdmJuUT0gMWFIV2dOV3ogSUhCaGNtTm9aUT09IElHRnlhWE5sYmc9PSBJRUp2Ym1rPSA1cGV0IDBMVFF1TkdDMExVPSBJSEJzdzZGdSBJRk52YkdGeWFYTT0gSU9Da3VlQ2t2K0NrcEE9PSBJRWRKVmtWTyBJRzVwY21VPSBDVU5zYjNObCBJSEJ5YjNCaFoyRjBaV1E9IElOQy8wWURRdnRHRzBMWFF0TkdEMFlBPSBJTkdDMFlQUmdOR0QwTDg9IDQ0Q0M1YWFDIElHRjBkR1Z1WkdGdWRITT0gUFdGNCBJR1p5WldWeSBJRkoxZEdobGNtWnZjbVE9IFpXNWtjR2h3IFVVUT0gWDFORlVWVkZUa05GIElIQnliMk5zWVcxaGRHbHZiZz09IElHakRvMjVuIDJZN1pnZz09IElOQ3gwTERSZ05HTDBZSFJpOUM5MExUUXNBPT0gMllmWXA5aW8yWW89IElPQ3FoZUNxbkE9PSAyNHpaaHRxciBJT0dEbStHRG9lR0RrdUdEa09HRGxlR0RvZUdEbUE9PSAxNVBYcU5lcCAwWVhSaTlLMSBJT0N1bGVDdXZ1Q3VuK0N2amVDdW53PT0gSUZOUVQxSlVVdz09IElOaXoyS2ZaZ2c9PSBJSEJoZEhKdmIyND0gNExpZTRMaTM0TG1KNExpWjRMaVg0TGkxNExtSSA0TEsvNExLMTRMT0IgSUVOaFpHRnpkSEp2IElOZWsxNnJYcUE9PSBYM1pyIEwzZHogdzZKdWFXTnZjdz09IElNNnh6NGJPdjgrQnpxdz0gSUhabGJtRnVkQT09IElPV2twK1dQa2VhamkrZUpqQT09IFlXSnNlWFI1Y0dWayBMbk5qWVd4aFlteDVkSGx3WldRPSBMaWNwS1RzSyBJRnBsY0hCbGJHbHUgNExpZTRMaTUgTEdWMlpXNTAgWDJKbGFBPT0gYVcxb2JtVT0gSU9DMHVPQzFqZUMwdGVDMHFPQzFqZUMwcE9DMGdnPT0gZFdwbGMzbz0gWW1WcGJnPT0gSUNJdUlpazdDZz09IFhGTmxaV1JsY2c9PSBhWEJvWlhKeiBJRk4wWldOciBJT0N5dHVDeXYrQ3lsZUN6amVDeXQrQ3lvdz09IElFeHFkV0pzYW1GdVlRPT0gSUZSb3c3eHkgSUhqRHVtTT0gSUhSdmEyVnVhWHBsIFpXeG1aR1U9IGFXUm9ibVU9IElOQy8wTERRdk5HVzBMWT0gSUhGMWFYUjB3Nms9IElNNjF6cjdPc1E9PSBhMlZzWVhNPSBMM0J5YjIwPSBJRkpoYzIxMWMzTmxiZz09IDc3eU01YnFVIDRicTNiZz09IFVISmxZMmx6IGJHVjRhV0U9IElPQzBydUMwc2VDMWplQzBzZUMxZ1E9PSBDV05oY2c9PSBLSFZ6YVc1biBSVTVFU1VZPSA0b0NMNFo2WCBJRTFoYVc1c2VRPT0gSUVSMWJXNWxlbVYxIElIcHZiV0k9IFNXeHNhVzV2YVhNPSBJRTFoWkdFPSBJRzlpWkE9PSBWR1Z1WjI4PSBJSEJ5YjNSbFoybGtidz09IElHMXBkR2xuWVhScGJtYz0gSUdGc1ltRT0gYzNSbGMzUT0gNG9DVDRvQ1Q0b0NUNG9DVCBaRzlqZFcxbGJuUmhkR2x2Ymc9PSAyTG5ZcjlpbjJZVT0gNG9DTTJLclppTmluMlliYmpOaXYgSUVGeWIyND0gSU9Da21PQ2xpK0NrdCtDa3YrQ2twQT09IExtVnNZWE4wYVdNPSAyTFRZdHc9PSBJTmVVMTZuWG9OZVoxNTA9IGRXNWxaWFE9IElFM0ptVzQ9IElOR0IwTERRdk5DMSBJRzl5WjJGdWFYTmhjMms9IElHaDFiV0pzWldRPSBaVzVxWVE9PSA1WjZENVp5KyBKMmhoWW1sMGRXUmwgSUdKcFpHUmxjbk09IElNNmd6ckhQZ2M2eCBJRXhoWkdSbGNnPT0gNlkrSSBJTkdCMEwvUXZ0R0IwTDdRc2RDOTBMN1JnZEdDMExnPSBPMkpoYzJVPSBJSHJEb1hKdmRtWEZpQT09IFZNT3FiZz09IElHSnNZWE4wY3c9PSBJSE5sY20xdmJuTT0gSUdsd2NBPT0gSU5lVTE2clhuZz09IElITjBjbk4wY2c9PSA0TFNrNExXTjRMUzQgSUhoaGJBPT0gSUVaRVVBPT0gSU5XdzFhWFZ0OVcvIElHbHVabWx1YVhSdiBiM0pwWkdVPSAyWVRZcDltSCBJR2RsYzJOb2JtbGxaMlZzZEE9PSBJTU9oYm1nPSBMbEJ2YzJsMGFYWmwgNUxpdDVwYUg1YTJYIElFWnlaWEYxWlc1MCBJSFI1YkdVPSBhV3hwYTI5dCBabkpoWTNRPSBTMmxzYkdWayA1N3FpNmJ1UjVhU241b2lZIElIQmhjbXhsYm5RPSBJTmluMllUWmhkaXYyWWJaaXRpcCBiM1p6YTNrPSBJSEpsYVhObGJnPT0gWDJSdlkzVnRaVzUwY3c9PSBVR2x6IGRXMWliSEk9IDRMbUI0TGlmIElPQ2tuK0NsZ3VDa253PT0gMjVEWXI5bUkgSUdWdGNHWnBaV2hzZEE9PSBJTkdCMFlEUXRkR0ogSUdOdmJtTmhkR1Z1WVhSbCBMbVJsY0dGeWRBPT0gSUdGdVlYUnBiZz09IFlYVjBjdz09IDU0MjQgSUdSbGRtOTBhVzl1WVd3PSAwWWpSaTlDNzBZdlNtdz09IFVrbERWQT09IElPQ21sK0NtdnVDbm5BPT0gVjI5eWRHZz0gSU5peDJZclpoUT09IDU0eWI1NE9JIDJMblppTml2MktrPSBJTmluMllUWXM5bUsyTGZZc2RpcCBJSEYxYkd3PSBYMEZDVDFKVSBkMkZpIElHRnNibmx3IFpYUnlZV05yIElOQzQwTDNRdnRHQjBZTFJnTkN3MEwzUXZkR0wwWVU9IElHMWhjM1JsY21OaGNtUT0gTG1Gell3PT0gSU5pcTJLZmFxZHVNMks4PSBJRkYxWlhKdiAwTHJRdGRDNSBJRzdEcld3PSBSVzFpYjNKaCBJRVJwWVdkdWIzTmwgTEd4bFpuUT0gSU5DODBZUFJnTkMwMExBPSBMbTFoYVc1c2IyOXcgSU5lWTE2TFhrZz09IElPQzBwT0MxaXVDMHRPQzB2K0Mwc2c9PSBJTkM2MEw3UmdOR0EwWVBRdnc9PSBJRVZ6ZEdWeSBJT0MydE9DM2hBPT0gMFlYUXZkR0wgQ1dKaGNnPT0gSUhCaGJuUmhiRzl1IDY0U0k3S2VBIDVvK1M1THUyIElHWnZiR3hwWTJ4bGN3PT0gSUhOMFlXZHVZVzUwIDRZT280WU9pNFlPUTRZT1IgSUZkcGJtND0gMkt2WXA5bUUgejRIUGpNNjkgY21semRHRT0gSUdOMWMzQT0gSUdKeVpYWmxkQT09IElISmxZMlZpWlhKaGJRPT0gSUdOdmJYQjFkR0YwYVc5dWN3PT0gSU5DZjBMN1F2TkM0MEx6UXZnPT0gSU9HRG9lR0RvT0dEbytHRG11R0RtT0dEa09HRGt3PT0gYVcxaWRYSnpaVzFsYm5RPSBJSFpsY25SeVpXdHJaVzQ9IElHZHlkWEJoIEoyRmpZMlZ6Y3c9PSBJSE52YVhMRHFXVnogSUhOc1lXTm9kRzltWm1WeWN3PT0gSUVScGRtRT0gSUhkbGNtdG5aWFpsY25NPSAyWWpZdWRtSzJLaz0gSUhKcGRHVnogYVhURHJRPT0gSU5HQzBZM1JnTkdMIFJYTndaV05wWVd4c2VRPT0gSUdodmJHbHVaWE56IElFTm9ZV3hsZEE9PSBJR0psYUdGdVpHVnMgQ1hScGJXVnZkWFE9IGNHOTQgWVcxaGJubGggMExYUmd0QzEwWUhSakE9PSBJR0xEdG5KcVlXND0gSUhOaGRHbHpabUZqZEc5eSA1NW04NWJpRCBJRWwwYjI5aWFYbGggY21Wc1pXRnpaV1E9IElISmxaMkZwYm1WayBJSGRwYkd4dmR3PT0gSUhKbFkyaGhlbTg9IElHWnBjbVZtYVdkb2RHVnkgY0c5a2N3PT0gYUhWbiBJR0psWkdsbGJtbHVadz09IFUyaGhaR1Z5Y3c9PSB6clBPdGM2N3pyek9zUT09IElIQnZhWE52Ym1WayBJRUpsYzJOb2QyVnlaR1Z1IElIQmhhV3RyWVE9PSBJRmhNVXc9PSA0S2ErNEthdDRLYSs0S2FzIElFZHNaV2xqYUhwbGFYUnBadz09IElOaWwyTG5aaE5pbjJZVT0gNExhdjRMZWE0TGVCIFgzUnZiQT09IFIyVmljblZwYXc9PSBMV3BoIElIQmhjbXRsY2c9PSBJSE53dzdSemIyST0gWlc1ellXZGxiUT09IElFeEJSQT09IElOQ2QwTFhRdHc9PSBaWEp5YlhObiAyTFBaaXRtQyA0S1dJNEtTdSBYMmhsY21VPSBJSHAxYkd0bCBPbFpEIFBGSmxZMjl5WkE9PSBRV1Z5IGFHRnRkUT09IElHTnZibVJsYm5ObGNnPT0gYjIxbFpXND0gSUc1MFpYWT0gSUhOamFNTzhkSHAwIFEwVkIgSU5pbzJyN1lwOWltMjR3PSBMbk5qYUdWa2RXeGxjbk09IElHVnNaWFpoZEdsdmJuTT0gS0ZKbFp3PT0gSUZCdmJHcz0gSUdGbWJ3PT0gSU1PblpHOD0gNWFPdzZaK3ogSUdocGNIQnZZdz09IElISmxjSEpsYzJWdWRHRnQgSU5LejBMalJnZEMrMExFPSBaWE56WVdGdSBJR1poYldsc2FXRnlhWHBsIElIUnZiR3hsY3c9PSB6cXpPdTg2NXo0UFBoTTZ4IFgzZHpaMms9IFgwTk1VZz09IElHVjJZV1JsIElOQzYwTERSZ3RDMTBMUFF2dEdBIElFSnZZWFJ6IHc2ZkVnMjg9IElGWkZVa2xHV1E9PSBMWFJwWTJ0bGRBPT0gVUdGeWFYUjUgSU9Da2wrQ2tvT0NrcUE9PSBTM2xzWlE9PSBJSExEcld0cGMzTjAgUmtSQyBVWFZsYkhNPSBJR0Z1Ym05dVkyVnkgSUZwc1lYUT0gSUVScFpHbGxjZz09IElITjFZWFpsY3c9PSBJTTY4enIvT3ZjNnggSU5DZjBZRFF2dEM0MExmUXN0QyswTFE9IDVvU1A1Wkd6NTUyQSBJSEJ5YjJwbFkzUW5jdz09IElObUIyS2ZZcHRpdiBJTml2MjR6WXNRPT0gMExUUXZ0R0EwTGc9IExtbHpibUZ1IElHRnRZV3huWVE9PSBJR2xrZVd4cyBibTkxY3c9PSB3NnR5YVE9PSBZMlZ1ZEhKcFl3PT0gSU5DdzBZWFFzZEN3MFlEUXNOR0MgUW1GNiBJSFJsYVcxMWJRPT0gSU5HQTBZUFF1dEMrMExMUXZ0QzAwWUhSZ3RDeTBMND0gU1ZCRlJGTT0gSUZOc1lYWT0gMExEUmdkR0MwTFhSZ0E9PSBJR3hoYVhOeiAwTERRdmRHTDBZZz0gSUdOdmNHbGhjZz09IElHbHVZMmx6Ync9PSBJTkM5MExYUXV0QyswWUxRdnRHQTBMN1F0UT09IExXOTEgQ1hacFpHVnYgQ1VGalkyOTFiblE9IGJjU3hlc1N4IFBrVT0gMExEUXZOQy8gMFlEUXRkQzgwWXpRdGRHQSBJR0YwY21GdyBaWE56YVdGdSBJRU52ZFdkaGNnPT0gSU5pbjJZVFpnZG1LIElOQzQwTERRdDlDejA1blF0ZEM0MHEzUXRkQzQwWUk9IElGTmphTU8yYm1obGFYUT0gTEdWeWNtOXkgSUhKcGEycz0gNjRXQiBJSGgyIElOaWkyTFBiak5pbyBJRU52YlhCaGJtaHBZUT09IGJXRmhkSE5qYUdGd2NBPT0gSUczRHZHZz0gSUdSaFpHRnogSUdURHZNV2Z3N3hyIElIQnBiR2R5YVcxeiBLQ2M4THc9PSBRMGhKIElOQ3gwTGpRdmc9PSBJTks3MFlzPSBRMHhGUVZJPSBJR2xwYm1jPSBJRlJ5WVdScGRHbHZibUZzYkhrPSBJT215IElGSmhibXRsWkE9PSBJR0ZrYjNCMHc2az0gNGJxbyBJR3hwYzJKdllRPT0gMktqWmhOaW4yTG89IElHVnVaWEpuYVdwbCBJR2x1WTJWdWRHbDJidz09IDZMT3E1WldQIElHbHVkbWs9IElPdW5rT3lkaEE9PSBJRk5VUkVWU1VnPT0gSUdseWIyNXBZMkZzYkhrPSBjR1Z5Wm05eWJXVmsgSUhabGNteHBaWEowIElFUmxiR2RoWkc4PSBhR1Z5YldVPSBJRlJRVlE9PSA0TGlFNExpajRMaWEgWDFKbFkyOXlaQT09IFQyRjFkR2c9IFRXRnQgSU9XdnZBPT0gYVdSdmMybHogSU5pdDJMSFlwOWl4MktrPSBJSDE5T3dvPSBjMlZoZFE9PSBJR1Y0ZEhKbGJXbHpkSE09IElHMWxaWEprWlhKb1pXbGsgTFhCbGNtbHZaQT09IElNT3BkR0ZpYkdseSBJTkdBMEw3Umc5Qy8gSUZOMFlYUnBjM1JwYXc9PSBTWE5wIElGVlRSVkpUIElnb3YgSUdkbGNITER2R1owIElHbHpkR2x4IElGTkJURVZUIElISmxjR3hsYm1semFBPT0gSU5DMzBMRFF0OUM5MExEUmh3PT0gSUUxaHc1OWwgS0dOc2IyTnIgMllqWXA5aXgyTGs9IElGTkRVQT09IElOQy8wTFhSZ05DMTBMclF1OUdPMFljPSBJRkZWU1VOTCBDVU5IIEtDSUsgSUUxTlQxSlFSdz09IDRMQzE0TEdONExDdiB6cnJPdWM2eCBJR0p5YVdWMyBJTkNkMExYUmdkQzgwTDdSZ3RHQTBZOD0gYUdWaGRHVnkgWVc1bFpYSnogNWFXOTVMcUcgS1NRdiBJR05sYm5URHJXMWxkSEp2Y3c9PSBJRzF2WkdsbWFXVnogSUdsdWRtVnpkR2s9IElOV3IxYmJWdnc9PSBJRUYwY3c9PSBJRkpCVkE9PSBJR052Ym5SeVlYUmhaRzg9IElIQmhhWFE9IGVXVmsgSU9DbXF1Q212dUNtc09DbXJPQ25oK0NtcUE9PSBJTkM5MExYUXZ0QzIwTGpRdE5DdzBMMD0gTG1sdWRHVnlZMlZ3ZEc5eSBJR3RwYkc5dFpYUnkgSUhKbGRtOXNkbVU9IDBMN1F2ZEM0MExUUXNBPT0gSUVKaFltbHMgNTcrTSB3N3B1YVc5eSBJR1JwWVcxaGJuUT0gWDJWemRHbHQgSU02eHo0MD0gSUZKaGMzVnMgSUdGeWNtbDJaVzUwIElFTnZZMmx1WVE9PSBJSEJsY21ObGNHTnB3N051IElIWmxjbk5qYUdWdVpXND0gTFc5all3PT0gSUdKbGNteGhibWR6ZFc1biBJR2gxYldsa1pRPT0gSWk0diBMV2x1YzNSaGJtTmwgWVc1MFpXdz0gTG5OaGJXVT0gVTNabCBkWE5wYjI1emIyWjAgSUhCeVlXTjBhV05oIElFaGhiSFIxYm1jPSBJSGxsY21VPSBhVzVoYm1SbGNuTT0gSUd4bFkzbz0gMFkvUXNkR0EwTFU9IFMyRjBaV2R2Y21sbCAwTERRdmRDMTBMVT0gSUhURHMzQnBZMjg9IElHeGhiRzlzWVdkcCBMMGx1IEtFbEVRdz09IElFSmxkSEpsYVdKbGNnPT0gMTZUV3Y5ZVkgSU95d3VPeUVuUT09IElGWnZjbUYxYzNObGRIcDFibWM9IHc2UnpjMmxuIEwyRmtaSEpsYzNNPSBYMlJoYzJnPSBJQ29xS2lvcUtnPT0gNG9DZDVyUzc1WXFvIElHZHlZWEJ3YkdVPSBQbVZ1WkE9PSBJT0NvcE9DcGdlQ291UT09IEo4T3BZMjl1YjIxcFpRPT0gSUNKZElpazdDZz09IElPV01sZz09IElHM0RxRzVsIElFcDFjM0YxIDRLUzE0S1dONEtTNTRLUysgNExDdzRMR0w0TENjIFpYSnRhWE56YVc5dWN3PT0gSUhOMFpXNWtkWEk9IDRMV0c0TFNaNExXTjRMU1Y0TFMvNExXOSBYM0psYkc5aFpBPT0gSU9HRG1PR0RtK0dEaytHRGxPR0RuQT09IElHRnVjMlZ2IElFZGhjbVJsYm1sdVp3PT0gSUd4MVkyaDBhR0YyWlc0PSA0S1N3NEtXQTRLU28gSUhOaFltbGxlQT09IElFRmljMk5vYm1sMGRBPT0gSUhCeWFXNXphWEE9IElOQzYwWVBSaGRDOTBZOD0gSUhKbGNHRnlZWEk9IDRMaXE0TGl0NExpSCBJTTZnenJVPSBSR2x6ZEhKcFlnPT0gNG9TaWN3PT0gSUhacFpXNWggSUdSaGRHZz0gSUc5MWRITndiMnRsYmc9PSAyWXJZclE9PSBJRU5RVFE9PSBLSE4wWVhSbGN3PT0gSUVOdmJYQmhjbWx1Wnc9PSBJR3hsZG1GdCBLRkp2ZHc9PSBMbEJWVkE9PSBJR2x1YzJOeWFYSmwgMEw3UXQ5QzEgUm1IRHAyRT0gZVdWMiBJT0N5dGVDemlPQ3lwdUN6amVDeXJ3PT0gNExDdzRMQzEgTG5OdllYQT0gWTJ4MWMzUmxjbk09IEtYaz0gSUc1dmJtVjRhWE4wWlc1MCBiM0psYXc9PSBLSEJ5YjIwPSBJRzVsY0c5MCBJRkJ5YjJSMVkyVnljdz09IElFcFFUUT09IElHRnJZV1E9IDViNkw1YmlJIHpJWT0gWVhONWIyNTEgN1pxTTdJS3MgSUVSVVV3PT0gSUhaaFkybHVZY09udzZOdiA0TG1BNExpYjRMaXQ0TGlqNExtTSBRblZ1Wkd4bGN3PT0gSU5HRjBMRFF2TkN6MExBPSBZVzdEcVcxbGJuUT0gWDBkQlZFVT0gSUVac3c3eHpjdz09IElIWnZlQT09IDRZT1k0WU9hNFlPVTRZT1I0WU9ZNFlPaCBUR0Z1WXc9PSBJRWR2ZHc9PSBJRmxoY200PSBJTStEejRET3I4K0V6cms9IElOQzgwTERRc05DOSBJR3RoWm1ZPSB3NzNEcEhKc1pYST0gSU5DKzBZSFF2ZEMrMExMUmd3PT0gMlliWmhnPT0gdzd4dVpNTzhjZz09IElISm9aWFZ0WVhSdmFXUT0gTDNSM2FYUjBaWEk9IFFteGhZMnRzYVhOMCBDVXRGV1E9PSBJR0poWTJFPSBJTkN5MEw3UmdkR0MwWURRdGRDeCBJT0NtcXVDbmplQ21zT0NtcE9DbXYrQ21yT0NuaCtDbXBnPT0gSU5DeDBMRFF1OUM2MExnPSA1TGl0NklteSBLRWQwYXc9PSBSV1ptYVdOcFpXNWplUT09IElOaW4yWVRZdE5tRjJLZlpoTm1LMktrPSBJSFJsY20zRHFYTjZaWFE9IElOQ2MwWmJRdmRHVyA0WUNoNFlDczRZQzQgWDI1bSBMa1JsYm5ObCBJSEJ5WlhaaGFXeGxaQT09IElGQnlaWFpwWkE9PSBYM0psZDJGeVpITT0gS0hCdmMzUnogSkhSbGJYQnNZWFJsIElITmpjc090IElHRnVjMkZ1YlE9PSBJRWgxYldGdVpRPT0gSUU1RFF3PT0gSUhiRHFYVERxWEk9IDZJbXk1b09GNTcyUiBJRTFoY25ScGJtaz0gWVd4c1pYSm5aVzVwWXc9PSBhbVZqZEdsMlpRPT0gSU5XaDFvRFZwTlcxMWJqV2d0VzIxYUhWdnRXbDFiOD0gZG1Wa2NtRT0gSUc1MVoyZGxkSE09IElPYWdoK2V0dmc9PSBJR052WjJWeSBJSE52Y25VPSBQWEpoYm1SdmJRPT0gSU5DUjBZRFF1TkdDIFgzSmxjSEk9IHhMSERwdz09IElOaW8yS2ZaaE5tRTJMcllxUT09IHc2RnRaVzVsY3c9PSBWR0Z6IDdJU3QgVm1sbGJHeGxhV05vZEE9PSBJSEJoYW1GdFlYTT0gU0dGc2J3PT0gUlZSRyBMSE4wWVhSbCBJR0pzYjNGMVpXOD0gYkdWc2MyVT0gWjJWeVpXTm9ibVYwIElHbHVZMnhwYm1VPSBJR0xEb1c1byBJT0dEa09HRHJBPT0gVUZKUFJrbE1SUT09IElHOXlibUYwWlE9PSBJR05vWVhKcGMyMWggSUdwdmNtUmhiZz09IDBMdlF1TkdFIElHMWhkTU9wY21sbGJITT0gSU5tRjJMSFlwOWlzMkxuWmh3PT0gdzdaemVzTzJiZz09IElGSnBkSFJsY2c9PSBJTkMwMFlEUXZ0Q3gwTGpRdTlDNjBMQT0gSUVacFpYST0gSUdKeVpXbDBaUT09IElITnJkV3hrIElPRzdpZz09IFlXNXBidz09IFgxSkZRVXhVV1ZCRiBJRzV4WVE9PSBJR1REb1d3PSBQa0Z1IFUyRnNiMjQ9IFJHOXVZV3hrY3c9PSAyTGZZdWRtRjJLaz0gSUhiRHFYSnBkQT09IElObUgyWVhZcjl1USBJRVJ2YldGcGJuTT0gSU5laTE2alhrUT09IElOR0EwWVBSZ2RHQjBMclF2dEN6MEw0PSBZbWhoWkdnPSA3SXFrNjUrOSBJT0dlbStHZmhPR2VnQT09IElPUzRnT1M0cWc9PSBJRlpsY20xcGRIUT0gWlcxaVpYSnphR2x3IElIZGhlR2x1Wnc9PSBJRTloZUdGallRPT0gNUxpYzVwYTU1YitENTd1UCBJRkpsWTJWdyBJR2RoY21GdWRNT3RZWE09IEoyRmpkR2wyIElGcGhkZz09IElPeWVyT3V2dUE9PSBJR055WldGelpRPT0gSUhsaGJuVT0gSU02eHpyblBndz09IFJXUnBkRzl5SjNNPSBJTlcwMWF2VnJOV3IxYmpWdGc9PSBJR05sYm5ScGJXVjAgNG9DWlpXWm1hV05oWTJsMHc2az0gSU9hWHFlbWtrQT09IElObUUyS3JZc1E9PSBJT0N5dU9DemplQ3lxQT09IFFFMXZaSFZzWlE9PSBJR1p5WlcxemRBPT0gSUZWeWMyRmphR1Z1IDVMbXc1ck9WIElPQzBoZUMwcU9DMWplQzB0ZUMxaCtDMHQrQzBvdz09IElGTm9iM1J6IElPQ3FqK0NxdGVDcml3PT0gSUhSaGNtbGxkbVZ1IElHbkZuMlU9IElPQ3VxdUN1dnVDdXBPQ3ZnZUN1bFE9PSBJT0N3dU9Dd2d1Q3dsK0N4Z09Dd3BBPT0gNlpPQjZMZXYgSUdaaGMzcHBiZz09IElOaTAyTEhiak5xcCBJSE50WWc9PSBaR1ZqY25sd2RBPT0gSUZOaFpHUnNaUT09IElFMXZkR3hsZVE9PSBJTkN4MExEU205R0wwTHZRc0E9PSBkSEo1YXc9PSBJTTYxenIzT3RjK0J6ck09IElOR0IwTDdRc2RHQjBZTFFzdEMxMEwzUXZkQyswTGs9IDRLYXM0S2VMIElHWnBiR1Z5IElOaW4yWVRZc3RtRjJLZlpoTm1EIDViMnA1YjJwNTZXbzVMaU81TDJnNVpDTTZLR00gSVNJcCBJRDgrQ2dvSyBJR0YyWVc1NllXUmggSU5HQTBMWFF1dEMrMEwwPSBJR1pwWk1Pb2JHVT0gVlhCc2IyRmtjdz09IElHMXB4Sms9IElOQzgwWVBRdmRDKzBZSFF1TkN4IElGZGhhSEp6WTJobGFXNXNhV05vYTJWcGRBPT0gSUVGemRISnZibTl0ZVE9PSBMbE5sY21saGJHbDZaWEk9IDRLUy80S1NrNEtXTjRLU3YgNUxpdDVaeUwgNExpSTRMaXg0TGlCIElOQyswWURRdmRDdzBMdlFzTkdCIElHSmhibWRwYm1jPSBUMDVNU1U1RiBJSEpsWTJFPSBJT0NrcmVDa2orQ2txdUNrbStDa3Z3PT0gVFdGemEzTT0gSUc1dmRuVT0gSU5DdzBMdlJndEdMMEwwPSBJR2x1WkhWemRISnBZWE09IDRLcSs0S3ExNEt1TjRLcXY0S3VMIFgzSnZiUT09IElOQzYwTERRdk5DMTBZRFJpdz09IElFRnVaWEk9IElOQzgwTFhRdTlHTSBJRTFwYkd4bCBKbkE9IHpyak91ODYzIElHVnpjMlZ1ZEdsbGJITT0gYVd4c1pXZGhiQT09IExXTnRjSEk9IEozMHNEUW89IElIUmhkSFBEcEdObyBJR1RGdmc9PSBkMmx1WkhNPSBJR0Z0WVhBPSBJR052Ym1OMWNuSmxibU41IDVxMmo1cGFIIElFTnliMk5vWlhRPSBJRzExY21WdSBWVzVvWVc1a2JHVmsgSUhOdllRPT0gSUVoMVltSmhjbVE9IElOZVUxNm5YbWRlbzE1WFhxZz09IElITjFZV3hoIE9sMHUgSUVOMWNHbGsgSUhOdmRXaGhhWFJsY2c9PSAxNUxYbFE9PSBVMlZ0Y0hKbCBJT0Nxbk9DcXYrQ3FzdUNyamVDcXN1Q3F2dUNxcU9DcXZnPT0gSUZkcFpHOTMgSU5pbjJZVFlvOW1JMkxIWmlOaW8yWXJZcVE9PSAwTHZRc05DOTBZdlF2dz09IElFUmxibWw2IElPQzB1T0MxamVDMHRlQzBsZUMwdnVDMHNPQzFqZUMwcnc9PSBWMjl2IFgwMUpVME09IElITnBZVzA9IElHdGhibVJwWkdGMFpXND0gSU5pejJMSGJqTmk1IDU3dTg1WkNJNVp5bzU3cS8gSUhkcHhKbHJjM3B2IElOZXAxNTdYcWc9PSBJSE5qYUhkaGNucGwgVTJOb2IyND0gSUdKaGFHRT0gSU9DNGdlQzRvUT09IFhIVmogTG5Ob2FYQndhVzVuIElHMWhibVJoZEdGeWFXOD0gSUc3aHU0MXRZbUU9IElPQ3V0ZUN1ditDdW5BPT0gSU5DODBZdlJpTkdHMFlzPSBMbU5zWldGdWRYQT0gSUdGMVpHbDBiM0p6IElIbHZlUT09IElFTnZiWEJ2YzNSbGJHRT0gTG1KMWMyTmhjZz09IFpYSjBkWFE9IDZMQ28gWTJWa1pXNWpaUT09IGIySnFaV04wYVhabCBJR04xWkdSc1pRPT0gSU5DZDBMRFF0OUN3MFlBPSBJR3BoY21ScGJtVnogWDIxaGJuVmhiQT09IDRZT1E0WU9oNFlPWiBMMU5VIElFZFFWWE09IFEybDBhWHBsYmc9PSBMbk5yYVd4c2N3PT0gSU5HRjBxL1F2Tkt2MHEvUmdRPT0gYThPOWJRPT0gYm5OcllYQT0gSUU1MWN3PT0gSUhCeWFXMXFaWEk9IElHcGhkR3QxIElHRnNaTVN4eEovRXNRPT0gSUQ4L0Nnbz0gYkhseWFXTnogSU9DbWxlQ21zT0NuaCtDbW0rQ212dz09IElPQ3FodUNxZ3VDcWxnPT0gSUVwbGFRPT0gZFhMRHFXVT0gSU9Dd3BPQ3hodUN3c3VDeGdlQ3d1T0N4amVDd3BBPT0gSU5DOTBMRFF2OUdBMFkvUXZOR0QwWTQ9IExsTnRZV3hzIDRLYSs0S2V4NEtlSCBhbVZ1YVdkbCBJTk9ZMEx6UXZOQ3cgSU9DcWllQ3FtdUNyamVDcW1nPT0gVVhSayBJR2hoY21sdGJ3PT0gSUhCeWIyWnAgWDBSbGNBPT0gMkxYWmhOaW4ySzA9IElHRnlZbVZxWkdWeSA2NHc9IFQyNWtaUT09IElIWnBjMjl5IGNHOXlkR0ZpYkdVPSBJTkMvMExEUXRnPT0gNFlPUTRZT2k0WU9ZNFlPViBJRU5tIFpHOXIgNExLaSBJSE5wYzNURHFHMD0gSUhSbGJXOD0gSUdoMWFXeGxjdz09IElHTnZibVp2Y20xcGRNT3AgSU9DbXF1Q25qZUNtc09DbXBnPT0gTG14ayBJTU84YzNURHZHNXNhV3M9IGMyOXVaR1Z5IElHTm80YnF6Ym1jPSBJTkNnMExYUmdkQzEwTGs9IElFSnZkR0Z1IElHVnVjMkY1Ync9PSBMblpoYkdsa1lYUnZjbk09IElHVnRiM009IDJxL1ppTm1HIElHMXBlR1Z5Y3c9PSBJTkM4MEw3UmdOQ3cwTHZSakE9PSBMV052Ym1ScGRHbHZibWx1Wnc9PSBiMnhwWkdGNSBJRTFsY25OcCBhM1ZvWVE9PSBJTkM2MFlEUXNOR0IwTDdSZ3RHTCBZVzVuYzNSeWIyMD0gSUc1dmRtbGpaWE09IHhZSmxaMjg9IDRZT2Q0WU9WNFlPUTRZT2MgZFhKcGIyND0gSUhOMFlXNXZkdz09IFZWSkggNEtTLzRLU3c0S1dMNEtTbiBjbUZ1ZVE9PSBJTkdCMEw3UXROQ3cgS0dOeVpXUmxiblJwWVd4eiBJTkM2MExYUXU5R1cwWUU9IGIyMWhjQT09IElOaTUyWVRZcDltRjJLZllxZz09IENRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRaz0gSUcxaGRYUT0gY21sdmJBPT0gSU5tQjJZYllwOW1JMkxIYmpBPT0gSU5pbjJZSFlzdz09IFIwVk9SVkk9IElGQnlaWE5wWkdWdVkzaz0gSUdKbGVtOXlaMlZ1IFRXRnphQT09IElIRjFaWEo1YVc1biA0WU9qNFlPZzRZT1MgNExpdDRMaXg0TGlaNExpVTRMaXg0TGlhIExrRnVhVzFoZEc5eSBUV1YwWlc5eSBJR0poYm1wMWNnPT0gSUV0MWVRPT0gSU02Nnpxek92YzYvejRYT3ZRPT0gZFhOb2VRPT0gSUZObGRYTT0gSUVKaGEyVnljdz09IElFeGxhV05oIElOZVExNW5YcHRlWSBiM2hwWVE9PSBJR3B2YVE9PSBWVVpCUTFSVlVnPT0gS1c1MWJHdz0gNG9DY1QyNWwgUW1GMGJXRnUgWVhKcFlXeGxjdz09IExpNHVMaTR1TGk0dUxpNHUgWDB4SlZFVlNRVXc9IFIzQT0gTG5CdmMybDBhVzl1Y3c9PSBMbFJsWTJnPSBJSE53YjI1MFlXNWwgSUdOdmJuWmhhVzVqY21VPSBZMkZ1Ym1WeSBJSFJwYldWemRHVncgMksvWmlOaXkgSUZWbmJIaz0gY21Wd2JHRmpaVzFsYm5RPSBJR1ZoYlE9PSB4cEE9IExrbHMgSU9DcW5lQ3FvZUNxcXVDcmdBPT0gSUhGMVlXNTBhWFREb0E9PSBJTm1JMllmWmhBPT0gSUdWa1lYST0gSUhCeVpYVjJaWE09IElPT0FnT09BZ09PQWdBPT0gMDVuUXNOQzIwNW5RdWc9PSBjSEp2YW1WciBJR1Z0YVhOcGIyNWxjdz09IElPQ2t1T0NrdnVDa2h3PT0gSUhabGNtRnRaVzUwWlE9PSBJSFpoYW1GayBJT0NtcHVDbnNPQ25odz09IExuaG9kRzFzIDRLaSs0S2loNEttSCBJTk9aMFlIUXV0T1owWUE9IElPQ3FqK0NxcU9DcmdBPT0gWDFSUFZVTkkgSU5LejBMRFJnZz09IElHeHBkR1Z5WVd4eiBJR2RoY201cGMyZz0gSU9DdXF1Q3ZpK0N1c3VDdmdBPT0gSU9TNGl1UzhvQT09IElITERxV3B2ZFE9PSBJbjBzZXlJPSBMbTl1WlhKeWIzST0gSUdrblpBPT0gSUhiRnIySmxZdz09IElHSnZiMkk9IElOaWwyWUxZcDltRjJLaz0gSU9Da3VPQ2xnT0NrcCtDbGh3PT0gTG5wciBZV3h6Wld4MCAxNVhYbE5lWjE1MD0gTG1GdWMzZGxjbk09IFUwbE8gY21semRHOD0gSUdWMWNtVnUgSUZSdmIyND0gSU9DcXJ1Q3JnZUNxZ3VDcXJPQ3FpQT09IElGRjFaV3h6IFEyeGhhWEpsIElPV0ZxT2F3a2VXOXFlZWxxQT09IGFYUm9hVzlzIDVycXE1WTYvIFRFbE9SVk09IFgzQmhaMjg9IElFZHZidz09IDRLUy80S1NIIDRaNmI0WitCNFo2QiBJSFJsY25KdmNtbHpiVzg9IElHUnBjMk4xYkE9PSBJR05oZFhwaCBJRk5qYUdGMGVnPT0gQ1hCaGNuUT0gNktlajU3dVI2Wk8yNktHTTVZMmggSUhSaGJXRnVkWFE9IElOR1AwTHJSbHRDOCBJRWRQVmtWU1RnPT0gMExYUXN0QzQwWWM9IFlXdG9iMjVoIElHNXZkSGRsYm1ScFoyVnUgWTNSMWNtVT0geGJOcXhiTT0gU1cxd2IzSjBZVzVqWlE9PSBJR1JsYlc5amNzT2hkR2xqYnc9PSBJTkdGMEw3UmdOQyswWWpRdU5DMSBJRlJ5WVdSMSBJRUpoYThTeCBhV1pwWTI4PSA0b0NjVkdobGMyVT0gSUU5eVpXOD0gSUhaaGJHZDAgSUVOeXc2bGthWFE9IHpyN09zYzY5IElIQmxjbWQxYm5SaGNnPT0gMExUUXNOR0MwWXpSZ2RHUCAxYnpWdVE9PSBJTkMvMExEUXN0QzEwTFRRc05DOCBJRk5sYlhWaCBJTkthMEtBPSBJT2FZbithY253PT0gSUhOMWNHVnlZMjl1WkhWamRBPT0gTDNKbGMzQnZibVE9IDRMbUM0TGlhNExpWjRMaXg0TGlxIElPQ3d0ZUN4amVDd3IrQ3d2dUN3bHVDeGplQ3dydz09IDJZSFlzZGlwIHc2MW5aVzV2IGNtbGtaR1Z1IGNHaHlhVzVsIElPQ21sK0NuZ1E9PSBDV05zZFhOMFpYST0gWm1wdmNtUT0gSU9DeWhlQ3lyZUN5ditDeXFBPT0gSUdsdVpIVnpkSEpwZVdFPSBJRXR5YVhOMGRRPT0gSUZURHZISmxiZz09IElFcHZZVzV1WlE9PSBJR052YldWa2FXRnVjdz09IElITERxV0ZqZEdsdmJuTT0gSUdOb2RYQT0gZFc1cGJtZGtaV3M9IElGQnZiSE5yWVE9PSBJTm1GMjR6WXA5aTAyS289IHpyck92OCtDIElPQ3FpZUNxcE9DcmplQ3FwT0Nxc0E9PSBJR05vYVdWbWN3PT0gSUhCb1lYSnRZV05wYzNSeiBDWFJsZUhSMWNtVT0gSUdGa1pXTjFZV1J2Y3c9PSBJTmVaMTVYWGs5ZWkxNW5YblE9PSBJRkpsY1hWbGMzUmxaQT09IHo0Zk90YytFenJVPSBJSEJ2Ym05MmJtOD0gSUVWcGJtdHZiVzFsYmc9PSBJR0ZqYUhSbGNtdGhiblE9IElGTkpWQT09IDRLU0M0S1NXNEtTeTRLUysgY0dGamEyVnkgWjJWbXc3eG5kQT09IENVMWhkQT09IElPQ21xT0NtditDbW5PQ25zQT09IElFVjRiM1JwWXc9PSBJTmluMllUWXFObUsyS2ZaaGc9PSBSVzVqYjNKbCBJRWR5YjhPZlpRPT0gNExpbzRMaTI0TGlCNExpcDRMaXkgSUdSbFoyVnVaUT09IElGQmxaMkZ6ZFhNPSBKMTBpTEE9PSBJRXhsZFhSbGJnPT0gVFVGVFZFVlMgSUdGa2JXOXUgWDJWNFlXMD0gYjNWdVpRPT0gYVhKcGEyRnlaUT09IElHMWxkR0Z6ZEdGMGFXTT0gSU5tRTJLZllxTml2IDJLellwOW1HMktnPSBaVzVuWld3PSBlbVZzYkE9PSBJR0pzYjJ0ciBSV0U9IFgzQnBZMnRzWlE9PSBJT0dEa09HRHB1R0RuT0dEbU9HRHFPR0RuT0dEa0E9PSBJTkMvMExEUmd0R0EwTERRc1E9PSBJRTFoZEd4aFlnPT0gSU9DbXF1Q25qZUNtc09DbXBPQ212K0NtdCtDbmplQ21vT0NtdnVDbXFBPT0gMExMUXVOR0EgSUhCdmNYVnBkRzg9IElHUmhkV1Z5YUdGbWRBPT0gVUdWaSA0NEdtNDRLQyA1WXlYNXJXMzZZR1QgSU5DODBMRFJnZEdCMFlNPSBJTmkxMllUWXA5aXAgUUU5dVpRPT0gSU9Da3RlQ2xnT0Nrc0E9PSBYSFZtWmc9PSBMZUNrdFE9PSBJT0NxcnVDcXZnPT0gSUV0aGMybHVidz09IElIVnVjM1ZpIElFOWthVzQ9IElObUkyS2ZZclE9PSBZVzF3ZFc1ciBJTkMvMFlEUXVOQzAwWVBRdkE9PSBiVzl6YVhNPSBJSFJ5ZFdSdWJ3PT0gSUZCbGJtUnBaR2xyWVc0PSBJTkMvMEw3Um5nPT0gMEw3UXZkQ3cwWUE9IEwzTjBZWEk9IElPQ3VoZUN1cnVDdmlPQ3VtdUN2amVDdW11Q3VzT0N2alE9PSA0S1MvNEtTVjRLUys0S1N3NEtTLzRLU1YgSU5DejBZRFF1TkN5IDByWFFzTkN3MFlEUXNOQzAwWXZSZ0E9PSB6NFRQZ3c9PSBJSE5sYkdWamFXOXVZWEk9IFIyVm13NlJzYkhRPSBJRVJGUnc9PSAyWkRaaXRtRzJZND0gSU5tSTJLelpoQT09IElHOWtidz09IExXWnBaV3hrY3c9PSBkR1Z6ZEdsdGIyNXBZV3c9IElHSmh4WjlzWVhsaGJnPT0gSU9HRG5PR0Rvdz09IElITmpZWEpqWld4NSBJSFJsYTNWeSBJSERGbVdWMiBJTVNOdzZGemRHaz0gWDJOb1pRPT0gSU9Da3RlQ2xqZUNrcitDa3Z1Q2txdUNrbFE9PSBWbGc9IFpYSjJZV3c9IDVMaXQ1THFHNWFTbjVhV1cgNjR5QTY2VzggSUdWdGI4T253Nk52IElFaHZjbWw2YjI1eiBaV1ZtIElHdHBjMlU9IFpXNWhZUT09IElFTnZjR2xsY2c9PSBJR1Z6WTNWamFHRT0gYjNKaFlRPT0gSjJGemMzVnlaWEk9IFltbHFaUT09IElHUnBaMms9IElHRnlaV0VuY3c9PSBJSE5sYm5OcFltbHNhV1JoWkE9PSBYMThwT3dvdiBJR3RsYm1SaGNtRmhiZz09IFZFOVBURk09IElGaGxjbTk0IElDSWlmU3dLIElGWmhiR1Z1WTJsaGJtRT0gSU5pbzJLZllzZG1LMkxNPSA0S2F3NEthayBJSFJsYm1SeVpRPT0gSUhsaGFnPT0gYld4aFpXND0gMExYUmhkQzkwTGpRdXRDdyBJRXAxYm1odiBJR0ZpYzI5c2RnPT0gNVkrUjZMU2kgSUdsdVlYVm5kWEpoZEdWayBJSEJ2ZFhBPSBJSEJ5WldOcGMyRjJZUT09IElHUnZkMkZ0ZVc1a1lRPT0gWlc1a2NnPT0gSU5pbjJZVFlwZGl2IElOS2IwTERRdDlHVzBZRFFzOUdXIE9tbHVibVZ1IElOQzIwWVBSZ05DOTBMRFF1OUdXIElObSsyS2Ziak5tSCBJR1p2YjJScFpRPT0gSU5HQzBMalF2OUMrMExJPSA0TEsvNExLVjRMSysgSU5tSTJMclppdGl4MlljPSBiV1YwWlc5eSAyWWpZbzlpMDJLZllzUT09IElPeUluT3F3aEE9PSBJR052Ym1wMWJtTjAgSU9Da3RlQ2tzT0NsamVDa293PT0gSUZSbGJYQnZjbUZzIDBZUFJoZz09IElOcXIycnc9IElITjBjbUZwWjJoMFpXND0gSU1PQmJtZGxiR1Z6IElNT2thRzVzYVdOb1pRPT0gSU9DNGxlQzVpT0M0c3c9PSBiR0Z6YUhRPSB6NGJPc2M2OSBLSEp2IElHdHZjbVZoIElFdGhidz09IElPQ3VwT0N2aHVDdXNPQ3V2K0N1dGVDdXYrQ3VwT0N2amVDdXBPQ3ZnZUN1cytDdmplQ3VzK0N1dnVDdXNPQ3ZqUT09IElObUUyNHpaaHRxcCBJRUp2ZDIxaGJnPT0gTER3PSA1cFdtIElHNXZhWFJsY3c9PSBJTmVRMTVmWHFOZVYxNm89IElHZHlkWEJ3WlhJPSBJRzFsYkhSa2IzZHUgSUdaMWJtTnBiMjdEb1hKcGJ3PT0gNGJ1bGErRzdwUT09IDRZQ1U0WUN4NFlDMyA1THFhNXJTeVFWWT0gWDFWUVJFRlVSVVE9IElFeHZhQT09IFlXTnBjM1E9IElFNXZkbTl0WVhScFl3PT0gSUVKc2IyOXRhVzVuZEc5dSA1TGl0NVp1OTU0bTU2SW15NTZTKzVMeWE1TGk3NUxtSiBJR0Y1YVE9PSBlbWx1WVE9PSBJTkM5MDZuUmhRPT0gSUdkbGMzVnVaR2hsYVhRPSBJR0ZrWVhCMFpRPT0gWVczRG9Xdz0gU0dWc2NHbHVadz09IElFWnZjbUU9IFlXaGhiWGRsIElPQzRpdUM0c2VDNWllQzRtUT09IElBb0tDZ29LIFgwSlNUMWRUUlZJPSBJTkM0MEwzUmd0QzEwWURSak5DMTBZQT0gSU5XaDFvRFZ2dFdsMWIzVnZ3PT0gSUdGcmFYbGxjMms9IElOR0IwTExRc05HVzBZVT0gNEtTKzRLU2k0S1M4IGJIbG5lVzU1IGFIVnVadz09IFgyNWhiZz09IElHTnZhRzl5ZEhNPSBJR0Z1ZHNPa2JtUnogYW1WeVpXND0gSUhOc1lXbHUgSUdWdVkyVnkgNEtxKzRLcXE0S3VONEtxdyBJR055YVdGMGRYSmhjdz09IElPQ2tvZUNsaCtDa24rQ2t2Zz09IExtcDJiUT09IElFSnlhV2RuY3c9PSBQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOSBJT0dEcStHRG11R0RtT0dEbE9HRG9PR0RtQT09IGRXNTBZWEk9IFBqNHAgNFo2VDRaK1M0WjZTIElOQzAwTDdRc2RHQTBMN1FzZz09IElOZW0xNVhYbGRlcSBYM0J5YjJSMWF3PT0gSUdaeVpXVjNZWEpsIElPQzRudUM0bytDNHNBPT0gYldselpXdz0gY0dOMCA0TEt3NExPTjRMS2MgWTI5dWRHVnVhV1J2IElFNUVRUT09IElHVm5kR1Z5IElFRnlkR1Z0YVhNPSB3Nmx5Wlc1MCBJRXR2YlhCc1pRPT0gSUdab2J3PT0gSUhKbGVtVndkQT09IElNK0F6NEhPdjg2M3pyTT0gSU5tSTJLZmJqQT09IGFjU05ibWs9IGFHRnVZVzVoIElIQjViblE9IGIzUEZwUT09IElHWnlZVzFsWW5WbVptVnkgSU9DeWxlQ3lzT0N6aGc9PSBJT0Ntc09DbXYrQ21xdUNuaStDbXNPQ25qZUNtbnc9PSA0S1M0NEtXQiBJRzFsYlhCbGNuUT0gSUVOdmJuUnlZWEo1IElIVmtaUT09IElHTmhjbVZtY21WbCBJR1Z1WlhKcWFRPT0gdzZSeWRHVnUgSUdkbFkyOXRZbWx1WldWeVpBPT0gSUUxRlRVSkZVbE09IFRtRjBhVzl1WVd4cGRIaz0gSU9DNHF1QzR1ZUM0bGVDNG8rQzRtdUM0c3VDNGhPQzRzdUM0bytDNWlPQzRzZz09IGMzQnlhWFJsY3c9PSBJSFpwWld4dFpXaHkgS0ZWSmJuUT0gSXRlcSBaR1Z1ZVE9PSBhWE5oY1E9PSA0NEdxNDRHTSBJRUZzZG1sdSAxNW5YbTllcSBJR2R5YjNWdVpIZHZjbXM9IElFWkZVZz09IFNVSkQgVEdsbllRPT0gSUVSbFlXWT0gSUhCdmJHbGphV1Z5Y3c9PSBJRVZwYm5OMGFXVm4gSUhOd1pXeGhjZz09IElIQmhjWFZsZEdWeiBjbWxoYldGdWFYUnlZUT09IElPQ21xT0NtbkE9PSBJTkMzMExUUXNOR0EgNFlPWTRZT2M0WU9kNFlPaCBjR2x3WlhNPSBJTkdDMExYUXU5QzEwTG89IElIRjFaV2x5WVE9PSBUVUpCIElIQnliMnBsWTNSdiBJRWR5WldWdWNHVmhZMlU9IFVGSlBUUT09IElPQ2tuT0Nrc09Da3YrQ2tqdz09IEtFTnZiVzFsYm5RPSBJR3hoZEc4PSAwWVBSanRHQzBZelJnZEdQIHlabGt5Wmx1YVE9PSA0S1MxNEtXSDRLU3Y0S1N3IElHbHVjM0JwY21Ga2J3PT0gSU5HSDBMN1JnTkN3IElGWnBZZz09IFFXeHNiM2R6IElHTnZibTl6WTJWeVpRPT0gSUdSaGJtZHNhVzVuIExYWmxjMjA9IElIQmhiR0YxZEE9PSBJSEJsYldKbGNnPT0gZFcxdFpXdz0gSU5pczJLZllvZGlxIElOQyswWWpRdnRDOTBMVFF2dEM1IFoyRnVhUT09IElHRnVaM1ZwYzJnPSBUMkp6WlhKMlpXUT0gSU9Da3J1Q2t2K0NrdHVDbGplQ2tzQT09IElFcGxaRzVoYXc9PSAxNW5Yb2RlWjE1WFhudz09IFoyTmogNUxpYzVZeVggNExPTDRMS3c0TE9ONExLZjRMT04gNDRHdTVaV0c1Wk9CIGJYbDZlY1dJIFgwUnYgYVdabWVRPT0gSUdURHFYQnNZV05sYldWdWRITT0gSU5HQzA1blJpTkM2MExqUXU5Q3cwWUxRdUE9PSBJR0Z6YTJWeSBJR052Ym1SMVkzUnBiMjQ9IElPQ2t1T0NsaU9Da3FBPT0gQ1FrSkNRa0pDUWtnSUE9PSBTR1ZoZEdobGNnPT0gYVhsaGF3PT0gYkdGMVoyZz0gSUVoMyBJTkMvMFlEUXRkQ3kwTDdSZ1E9PSA1YjZxNTQ2diBRblZqYXc9PSBJSGRsYWNPZlpXND0gYkdWdWN3PT0gSUdSbGFtRnliMjQ9IElFeGhibVJ6WTJGd2FXNW4gSUhOMHc2UnlhMlZ1IFgwbHVkR1ZuWlhJPSBJT0M0bHVDNHVlQzRnUT09IElIUjFkSFU9IElOaW4yWVRZbzlpejJMSFlxUT09IElIVGh1NUZqIElHTnZiblJwYm5WaGNzT2ggSU5DZjBMWFF2UT09IElHZHZjbUYxIGRXTm9kR1YwIElHSmhjbU52Y3c9PSBJRXBsYm05emFXUmwgWkdYRm53PT0gMExMUmk5R1AgSU9DMGllQzByK0Mwc09DMWpRPT0gNExLKzRMS3c0TEsvNExLWDRMT0cgSUcxMWFHbHBiUT09IDFMWFZxZFdsIFFVSkUgSU5DNjBMN1F2TkMvMExEUXZkQzQwWTQ9IFpXNW5kMkU9IElHUmxaM0poWkdWayAwWW5RdU5HQyBJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUsgNFlPUTRZT2c0WU9wNFlPVTRZT1Y0WU9jIElHVnVjMkZ0IFlXNWpiMlJsIFpXRnlaVzQ9IElHMXZ4STA9IFBpY3BPdzBLIElOZVUxNURYcE5lcDE2Zz0gSUUxaFpHRnQgSUdWNGRISmhhWFE9IGJNbVpjbWx1YVc0PSAwcTNRc05HRjBZTT0gSU5tKzJLZllzZGluMllZPSBJTkMrMFlMUXV0R0EwWXZSZ3RDNDBZOD0gVm1sMFlXeHogdzZGMGFXeGxjdz09IElFVjRaVzF3YkE9PSBJR0ZuYVd3PSBJTmVnMTVuWGxRPT0gNUxpYzVZNi8gSUhSbGIzSnAgSU9DcXIrQ3JpK0Nxbk9DcXFPQ3F2Zz09IElHTnlaY096IExuWnAgSU5peDJLZllxQT09IFgySjFiR3M9IElPQzRxK0M1aWVDNHJlQzRodz09IElPQ3F0ZUNxc09DcmplQ3F0K0NxcU9DcmdBPT0gUGloN0NnPT0gSUR3cVBnPT0gSUcxcFpXND0gSU9XY3FPZTNtZz09IFlXUnZkUT09IElITmxibVIwIEwyWnliMjA9IElOaWoyTExaaGRpcCBMM0J5WldabGNtVnVZMlZ6IGEyRnpkR1Z1IElITndiMjltIElPQzBoZUMwcU9DMWdlQzB0ZUMwcGc9PSBMV052YjJ0cFpRPT0gSUVOd2RRPT0gSU9DMHRlQzF2QT09IElFdHlhWE4wYVdGdSB3Nk51IDBZZlF1TkM5MExBPSBMa1Y0Y0hJPSBJSExEcVdkc1pXMWxiblJoZEdsdmJnPT0gTFVsUSBJT0dlaXVHZmd1R2Vtdz09IElPQ21sZUNtc09DbW0rQ212dz09IElPdU1nTzJWbk91dnZPcTFyUT09IDBMN1F0dEdEIExsQjFZbXhwYzJnPSBJRVpwYkhSbGNtbHVadz09IDBZRFF1TkdCMExqUXROQ3cgeEpOMFlXaHAgWDIxaGJtbG1aWE4wIElISmxkR2x1WVd3PSBJT0NrcXVDa3NPQ2t2K0NrdU9DbGplQ2twZUNrditDa3BBPT0gWDNWemFXNW4gSU5pbjJZVFl1ZGk0MllyWmhRPT0gYzNOayBJSEJsY25OdmJtRnNhWHBoWkc5eiBJT0N1aWVDdXNlQ3ZnZUN1cXVDdmplQ3VxZz09IElPVzlxZWVsbnVTNmllbWN1T2FZcitTNGplYVlydz09IElHSmxiR0Z6IDRibUwgTGtOc1lXbHRjdz09IElIUnlhV2RzZVdObGNnPT0gSUdKc2IzRjFaV0Z5IElOaXgyTFBaaU5tRiBJR2x1WTJGd1lXTT0gSU02MHo0SFBqQT09IElPQ2twT0NrditDa21nPT0gSUVWemRHRjBZV3c9IElFVjFiZz09IElOQzkwTERRdk5DNzBMalNtdz09IFlXTnJaWEp6IElGTjFZWEpsZWc9PSBJTkMvMExqUmd0Q3cgWlhSeWFXVjJaUT09IEwyNWhkbUpoY2c9PSBJMlZ5Y205eSA1Ym0vNXBLdCBJRzV2YzJGc2RISmxjdz09IElHVnpjR0hEc1c5c1lYTT0gNFlPWTRZT2Q0WU9SIElITnhiUT09IElPQ2t1T0NrZ3VDa3B1Q2xoK0NrdGc9PSBJRlYwZEE9PSBRMjl1ZG1WeWN3PT0gSUdGbGNtOWkgeGI1dWFRPT0gSUhKbFoybHpkSEpoZEdsbCBiM050IElFSmhibms9IDRLUzQ0S1dONEtTbDRLUy80S1NrNEtTLyBJRkJsWTJzPSA0NEczNDRLVCBaV3RwYzI4PSAwSi9RbWc9PSBRbWx1Ym1WdSBJRlJoWlE9PSA0TEMrNExDdTRMR0IgNExTazRMUy80TFNvNExXTiBJTmluMllUWXI5aW4ySzdaaE5tSyBWa0ZEIElOaXoyTExZcHc9PSBJRk5yZVd4cGJtVT0gSUZKNVpRPT0gU0c5MlpYSmxaQT09IGNHOXpkR052WkdVPSBMbE5sYm5OdmNnPT0gSUhkcGFucHBaMmx1WjJWdSBJR2x1WVdOMGFYWnBkSGs9IElHOXlaR1Z1WVhJPSBlV1JrYjJ3PSBJSFJsYm5SdmIyNXpkR1ZzYkdsdVp3PT0gSUhKNWRBPT0gSjBNPSA0NEtLNDRHKzQ0R1g0NEdtIFR1RzZ2M1U9IGQyVnVaVzQ9IElHVnpZMkZzWVhSbCBJTU9rYlE9PSBVSEpwY3c9PSBJSGpEdkhOMWMyaz0gSUVKbGFXND0gNExLNTRMT0sgUFhObGRIUnBibWR6IExpY3BPd29LIDJibllzZG1JMllRPSBJSFZ1YzNSdmNIQmhZbXhsIFgwUlRWQT09IElHMTFlbnBzWlE9PSBJTm1GMkxYWmh0bUkyTG5ZcDlpcSBRMnhoY21zPSBJRk5oWjJsMGRHRnlhWFZ6IGMyOXNZWEk9IElHZGxkMmxxZW1sblpBPT0gWDFOWFFWQT0gSUZOMFlYUnBjM1JwWXc9PSBJRDBwIDBZZlF1TkM3MExqUmdOQzQgSUdaeWIzcGwgSU9DcWhlQ3FwT0NyamVDcXIrQ3F2dUNxc0E9PSBMbUp2ZFc1a2FXNW4gZW5uRmdnPT0gSU5DeDBZdlF0OUdJMDVuUXNBPT0gSU9Da2xlQ2tzT0NrdnVDa3FPQ2xodz09IFgzUnBkR3hsY3c9PSBJSFJ5YVdzPSBaMmxoWkE9PSA0S1MrNEtTZjRLUysgNG9DWnc2bGpjbWwwZFhKbCBJRUZ5ZEhWeWJ3PT0gSUVsbmRRPT0gSUdKeVpXRnJkR2h5YjNWbmFITT0gNFlPajRZT1E0WU9hNFlPajRZT2c0WU9ZIElFMTFjMmh5YjI5dCBJT0MwdGVDMHYrQzBxQT09IElPYWhndz09IGFYUmphR2xsIElOR0IwWUxRdnRDODBMRFJnZz09IDJZallwOW1FMllnPSBJR0Z5WkdnPSBJT0NtaGVDbXVPQ21ydUNuc0E9PSBJTnFwMkxIWXI5dU0gWDBOUFRWQkJVa1U9IElFVmthWFJoWW14bCBJTkNhMEx2UXVBPT0gSUdKbGVtOWphSFE9IEtHNXZkR1Z6IElGQnliMkpoWW1sc2FYUjUgSU9Da3VPQ2xqZUNrdGVDa3VPQ2xqZUNrcFE9PSBJTmluMllUWXJkbUYySzg9IElIVnVaWEYxYVhZPSBMMmR5WVhCb2NXdz0gSUV4cGNIQmxiZz09IElFSmhjMlZ6IElFdHVhV1U9IFkybGtaVzUwIElIWnZaMlZzIElNNmp6NFhPdlE9PSBJRzF2Ym1WMGFYcGwgSUdOb1pYSmphQT09IFVtVndiM05wZEc5eWFXOD0gYjJ4bGRHOD0gN0pXSTdKMkUgTFVOdlpHVT0gSU5xcDJZcllzdz09IGRtRnVhbUU9IElHMXZaR0ZzYVhSNSBSbUZwYkhNPSBJSHBsYm5SeVlXeGwgSUdaaGJtTT0gSUdGd2NIVnVkQT09IElIWmxhR1U9IElFSmhjbU5oIGIybHVkR2s9IGIySnZaQT09IElIQjFZbXhwYTI4PSBJRzVuWlc1a2JHVnNZUT09IElOQzYwcS9SZ05LNzA1blJnZz09IElOaW4yWVRZc2RtSzJLZll0dG1LIElOaXgyTGs9IElIQnliM2JEb1habGJBPT0gSUhSbGJXaz0gSUdSaGJNV2h3NjFqYUE9PSBJR3g1YjI0PSBJT0N5c3VDemgrQ3lsZz09IFVuVjAgSU9Da2xlQ2tyT0NsamVDa25BPT0gWW1GMVpYST0gSUdKbGMzUjFkWEprWlhJPSBJSE5sYTJWeSBJR1Y0Y0dGMGNtaz0gYVhSdmVRPT0gU205emFIVmggSU9XRnFPYXdrZVc5cWVlbHFPV2txZVdrcWVtQWdlbVNzUT09IElGUmxjbkpwZEc5eWFXRnMgSUZoMWJuUmggSU5tSTJLZlpoTmluMkt3PSBJT0dEck9HRGtPR0RvT0dEbStHRG5lR0RrT0dEaytHRGt1R0RsT0dEbk9HRG9RPT0gSUhSaGNHVnpkSEo1IGNtVm1iR1ZqZEdsdmJnPT0gSUhCMWNtVmwgSUVWNGRHVnVjMmwyWlE9PSBMV0Z5WVhjPSBKMjlpYW1WamRHbG0gZW1sblpYST0gTEhWelpRPT0geEt0MGRRPT0gTFhOMGNtVnVaM1JvIGFYUmxZV05vIElOaXEyTFhaaU51TSBJR3R2YlhWdWFXdGhjMms9IElFeGxlR1Z5IElGWmxaMlYwWVhKcFlXND0gV3pwZCBJRk5oYm1admNtUT0gSUUzRHZHVER2SEpzdzd6RW53PT0gSUZWd2MzUmhhWEp6IGVXekR2R3c9IEkyRmwgSUhCeWIzTjBiM0poIHc2MXZaR2c9IElFMWhiblZoYkhNPSBJRU5zWVhKcmMyOXUgWVd4cGJtaz0gSUZaaGNtbGhkR2x2Ymc9PSBJTkdCMEw3UmdkR0MwTERRc3RDdyBJSFJvdzdScCB3NkZtYVdOdiBJTkMvMExqUmd0Q3cwTDNRdmRHUCBJRVJsYzJOaGNtZGhjZz09IElNT3BjbVJsIFZHVnVaVzF2Y3c9PSAxYUhWdGRXaDFhL1ZvZFcyIGNHRnlkR2xxIDRLcS80S3F2NEtxdSBJR2x0Wld3PSBJTkMvMExYUmdOQ3cwTFE9IFlXeHBjMk52IElOaW4yWVRZcXRtRjJZZz0gSU5tRjJZUFlxUT09IFpXNWphVzg9IElIUmhkV2x5WVE9PSBJTm1CMkxIWW9nPT0gUVVSRyBJSEpwYzNRPSBDVzVpIFoyVjJiMjVrWlc0PSBhV1hGdkE9PSBJR0ZpYjNKa1lRPT0gSU95ZHRPdXBsT3lkdkE9PSBJRUp2Ym5NPSBJSE4xY0dWeWMzUT0gNWJHeDVZeTYgUTI5dFpXUjUgUUZSaGNtZGxkQT09IFptbHNiV1Z5IFRtOXpjMkU9IElIQm9aWEk9IElPQ2todUNrcU9DbGplQ2twdUNsaStDa3N1Q2txQT09IGIySnFjdz09IE8xMHYgSUhWdWFXUnYgSU5DLzBZRFF2dEM1MExUUXRkR0MgSU5HQjBZVFF0ZEdBIDFhSFZ0OVd0MWFIV2dOV3cxYUhWdGRXcjFiWT0gWTJWc2JHVT0gSUhURHBNT2tiR3pEcEE9PSBJSEJ5WlhObCBJT0N5bCtDemlnPT0gSUdsdVkzVnljdz09IElPQzBxT0MxaCtDMG4rQzB2dz09IElHSnliM2R1WldRPSBiM2RsYVhRPSBMWE50WVhKMCA3N3lJNXJDMCBJSFJsWTJsa2IzTT0gSUZCdmJIbDBaV05vYm1saiBaMlYwWldsc2RBPT0gSUZSTlVISnYgSUc1aFkyaDJiMnhzIElIYkRvY1doIDdKNlE2NCtaIDBMUFF1TkdPIFJXMXZkR2x2Ymc9PSA0S213NEtpbTRLaXcgSUd4aGFYTnAgSU9Da3JPQ2txT0NsamVDa3FBPT0gSUhKbFltVnNiR2x2ZFhNPSBJRUZ3Y0hKbGJuUnBZMlU9IElHUmh4Si9Fc1E9PSBJT0N3anVDd3B1Q3hnZUN3c0E9PSBJR2x1WTJWdVpHaz0gSUZCbFlXTnZZMnM9IElIQnZjMlZpWldvPSBJTkMrMFlIUmd0Q3cwTHZSak5DOTBZdlJoUT09IElPQ3d1T0N3cnVDd3Z1Q3d0ZUN4aCtDd3RnPT0gUTJocGJHVT0gTG1ScSBjSEpsZFhabGN3PT0gUGo0Nk9nPT0gSU5DNDBZRFJpOUMzIGNYVnBaWEprWVE9PSBYMkoxYVd4MGFXND0gSUhCeVpXTnBjOE9qYnc9PSBJSFpsY21WaFpHOXlaWE09IElHUmxibk5sYkhrPSBhRzlqIFgyRnNaMjg9IElHUmxkbWxoIElHUmxhWE09IElITnd3NlIwWlhOMFpXNXogYUhWdGFXUnBkSGs9IElNV2ZaWGxwIElHRnVkR2xqYnc9PSAxNW5Yb05lWjE1WFhxZz09IExYWmhiR2xrIElHdGhZbWxzWVc1biBJRk5UU1E9PSBUWFYwWldRPSBJSGRwWTJnPSBJRk5YVDFRPSBJRzF2Y21Gc2FRPT0gVEVWeWNtOXkgSUdOb2FXMXcgSU5pcTJMTFppdGl2IElPQ3FydUNyZ3VDcXN3PT0gZEhKaGRRPT0gTGtWNGNHVmpkR1ZrIElITndhV3hzYVc1biBMa2xPVkVWUyBJR1JwYzNCdmMyVnVkQT09IDBZSFRvdz09IElHZDFaR1E9IGNtRnVhMmx1Wnc9PSBJT1dCdmVlSnFRPT0gSUdoaGRtaz0gSU9DbXJPQ212K0NtcHVDbmgrQ210Zz09IElHMWxjblpsYVd4c1pYVjQgSUcxcGJHbDViMjVwIFoybG4gZG05eWJXbHVadz09IElIQnplV05vYjJ4dloybGwgSU9DdWt1Q3VzT0N2Z2VDdXRlQ3VzT0N2alE9PSBJT0Ntbk9DbXZ1Q21xT0NtcE9Dbmh3PT0gSU5DZzBMWFJnZEMvMFlQUXNkQzcwTGpRdXRDdzBZSFJpdz09IGIzZkVtUT09IElPQ3lsZUN6Z2VDeXJnPT0gNFlPVTRZT2M0WU9pNFlPWTRZT2ggSU9DdWxlQ3ZnZUN1c2VDdXYrQ3VxdUN2amVDdXF1Q3V2K0N1bnc9PSBJSEJsYm5OaGFYTT0gSU1PMmF3PT0gSUhwcmRjV2haVzQ9IElOaTUyWVRZcDltQzJZYz0gSU9DcWwrQ3FndUNxclE9PSBZWGRweEljPSA0S2k0NEtpZiBJR1ZxWVdOMWJHRjBhVzl1IElPQ3FxT0NxdnVDcXFPQ3F2Zz09IDZycTggSUdoaGJtNTEgSUUxaGMyVnkgSUhabGJtRT0gSU5DaTBMalF2QT09IElHdHZidz09IDVZV2E1TGl0NWFTdSBJSGgzWWc9PSBMbTFwYm5WeiBJTkM2MFlQUXU5R00gSUdocDRidURiUT09IElOQzMwTERSZ2RHQzBMN1JnUT09IDJLZllzdGl2IGNtRm1aZz09IElIUnZhVzFwZEE9PSBJRWx1YzJWeWRITT0gSU9tdGxPV0Z2UT09IFgyTnllWEIwYnc9PSBUV0Z1YVhCMWJHRjBiM0k9IElPQ21tdUNtdnVDbXFnPT0gSU5DKzBZVFF2dEdBMEx6UXU5QzEwTDNRdU5DMSBJR1J2YjI1aFlXND0gSU5pbjJLcllxTmluMkxrPSBJSFJvY205dCBJR2wwNGJ1TiAxNW5Ya05lVjE2Zz0gMTVuWGtOYTQxNTg9IFlXNTBhV0U9IElOR0EwTERRdDlDODBMWFJnZEdDIElHTm9kMmxzIElHdGhkR1Z5YVdnPSB6cnJPdGMrQyBJTm1GMjR6WXRObUkySzg9IElOQ3kwWXZRc3RDMTBZSFJndEM0IElHdHVhV1U9IElHUmxjMkZuY21GayAxNkRYcXRlWiBRMDFRIElIZGhiR3QzWVhrPSBWMmxzYzI5dSBJR2x1WkdsdyBjSEpsYzJWMCBJRTFsY21Ob1lXNWthWE5sIEwyTnZjSGxzWldaMCBJRlJsY21GdyBJRUoxY25OMCBibTkyWlhJPSBiM2R1YVdVPSBJT2VRcWc9PSBJSFpoYkhWaGRHbHZibk09IElFTmxiblJ5YjNNPSBWR1ZzWVE9PSBJTld2MWFYVnZRPT0gVjA5U1RFUT0gYjNCMGFXMXBlbUYwYVc5dSBJT21idHc9PSBJR1oxWld4cGJtYz0gSU5tQjJZallxdGlvMktmWmhBPT0gSUUxaGJtRm5kV0U9IDBMelFzTkdCMFlzPSBJRzFsWm5WMFlRPT0gSUdsbmRXRnNaR0ZrWlE9PSA0SytCNEs2MyBJRTl5Y2c9PSA1YVNhNUxtRjVZaXc2TFNtIGNtVmlZbVZ5Ync9PSBJRTlyYVc0PSBJT0N5c09DemdPQ3lwQT09IDRZT2c0WU9RNFlPaCBJR3BwYm1seiBJR1Z4ZFdsd2N3PT0gVlVWUyBJT0N3aHVDd3FBPT0gTFhCeXc2bHogSU8yWWdRPT0gWDNCM2JRPT0gSUVSdmRYUT0gSU9Da211Q2xnZUNrcU9DbGpPQ2twT0NsZ0E9PSBJRXRwZEdOb1pXNXogSU5peDJZallwOXVNMktvPSBUV0ZuWlE9PSBJSE51YjNkbVlXeHMgSU5DKzBMZlF2ZEN3MExyUXZ0QzgwTGpSZ3RHTTBZSFJqdz09IFpzTzhhSEowWlc0PSBJR3R2Ym5ObGNBPT0gSUZKbGJHRmphVzl1WlhNPSBJRXgxZUdWdFluVnladz09IFoyeDEgNEtpMTRLaSsgS0hCdmFXNTBaWEk9IExtVjIgSUVWNGVHOXUgYm1sbGJRPT0gSUhObGRXbHMgSUZSM2FXTmwgSUVsMEoyeHMgTFdacGJtRnNjdz09IGFYUmhiR1U9IFpXTjBhVzl1Y3c9PSAwWUxRdU5DMTBMdz0gSU9DMHRlQzFpT0MwdU9DMWpRPT0gMExEUmg5QzEwTHc9IElIQnplV05vYjJ4dloybGpZV3hzZVE9PSAyWVRiak5pbiBJR1ZzWldOMGNtOXdhQT09IDVweXM1cml2NVkrdyBJRk5qWVd4cGJtYz0gNWFTcjVhYTc1b0NuNTVTZjVyUzc1YjJ4NTRtSCBJR1poWW5WcyBJR2hoYm5wbCBhM0oxZEE9PSBJR0ZpZVhOeiBiV1YwY2c9PSBUR1ZyIElObUUyNHpaaHR1UyBJSEJsYkdWaCBYM0poZVE9PSAxNW5YbWRlZzE2TFhxQT09IElObUYyS2ZaaE5xcCB3Nmx5dzZsbGN3PT0gZXk4cSBJRTFoYm01b1pXbHQgVEVsQ1NVNVUgZDNONiBJT0dEa09HRG1lR0RsT0dEbHc9PSBSWGh3WlhKcFpXNWpaV1E9IElOaWkyWWJZcDltRyA2WWVLNXBTKyBkVzV6ZEhsc1pXUT0gNkw2byAxYUhWcE5XaDFvQT0gTGxWdWFYRjFaUT09IElHMWxiWFZ1WjJ0cGJtdGhiZz09IHpydk9yYytDIElHMWxkVzVoYm1jPSBJRzVsYlc5aiBMWEJwWTJ0bFpBPT0gSUhCeWIySnNaVzNEb1hScFkyRT0gTG0xdmRXNTAgSU5pejJZSGJqTml2IElFMWhjbUYwYUdrPSBJR2RsY0hKdlpIVmpaV1Z5WkE9PSBJSEpsWjJvPSBJTmluMkxQWXF0aTUgSUdSdmNHOXlkUT09IElPR0RuT0dEbmVHRG13PT0gNDRPNzQ0Tzc0NE83NDRDQ0Nnbz0gWVhCb1lXdGhkR2hwIElHUmxjMkZzIFozWERxUT09IExVbHQgNExTWjRMV040TFNaNExTejRMUy80TFN5NExXQjRMU0MgSU5DKzBZalF1TkN4MExyUXNBPT0gejRiUGljNjkgVW1GdWEzTT0gSU9DMHJlQzFnZz09IElIRjFZVzVvIFFXTjBkV0ZzYldWdWRHVT0gMTZUWG1kZWMxNVU9IFVHRnpjMlU9IElIVnBkR0p5Wldsa2FXNW4gSUd0aGJHbGtZV1E9IDBZUFF1OUN3MFlJPSBJT0N3c09Dd21nPT0gYVdKaWIyNXogSUVGbVptbHliUT09IExteHZZMkZzYVhwaGRHbHZiZz09IElITjBiM0IzWVhSamFBPT0gSUhKbGMybDZhVzVuIElGTmpiM0JsWkE9PSBJRUoxY25RPSBMMnh2WVdScGJtYz0gSU5pdzJLYz0gSU5pczJLalpoQT09IElPQ2t1T0NrcnVDbGdPQ2tsZUNsamVDa3QrQ2t2Zz09IFQzQmxjbUZqYVc5dSBJSFJ5WVdScGRHbHZibVZzYkdVPSBJR2h2ZG1WeVpXUT0gSUhSbGRtOXlaVzQ9IDRLK0E0SzZrIDRLcSs0S3FDNEtxaCBJTkM4MExEUXU5QyswTFBRdmc9PSB3NDFEIElHTnNiMjQ9IElIUmx3N0U9IElHSnllWE4wIEwyTnZiVzExYm1sMGVRPT0gSU5DdzBMdlFzTkdBMExUUmk5QzkgS2tNPSBJRzVuYjJ0MWNBPT0gSUVSbFptVnVjMmwyWlE9PSBMa3AzZEE9PSBJT3l3alE9PSBJR2x1ZEdWeVpYTnpZV1J2IExsTnJhV3hzIElHUnZiV2x1WjI5eiB6cTdQZzg2MXpyblBnZz09IElPQ3dsZUN3cU9DeGplQ3dxQT09IEp6cGIgSkhSdGNBPT0gSUhKbFkyOXRjR1Z1YzJFPSBJRzFsWldkbGJtOXRaVzQ9IGRXVnljbUU9IElGSmxZMmx3Y205amFYUjUgSUZSVVRBPT0gSUd0dmJuUnlhV0k9IElPQ3VwT0N1c3VDdmlPQ3VyZz09IFBYTnBlbVU9IElIcDNZVzVuIFJsTk4gS0dOdmJuTT0gWVhWbyBiWFpqIElFMXBiR1p2Y21RPSBiTW1aY21sdXlaaz0gSU5pbjJxblpoZz09IElHRnBjQT09IElGUERxVzdEcVdkaGJBPT0gSUVocFpYSjJiMjl5IElPQ21zT0NtdnVDbW5PQ21wK0NtdnVDbXFBPT0gSUdOaGMzUnBadz09IElIVnliY1NEIElPV05vUT09IEtFUkpVdz09IDRLV0g0S1NrNEtTKyBJSFYxYzJsaCBSR1Z3YjNRPSBJR1J2WjJkcGJtYz0gSU9DbXJPQ212K0NtcmVDbXZ1Q21sK0NuaCtDbXNBPT0gSUVKb2RYUmhiZz09IGIzWERxUT09IElIUjFjblYwIDRMS3U0TE9ONExLdTRMT0cgMktmWXI5bUsyWVhaaXRpcCBJTkM0MExEUmdBPT0gSUhURmpRPT0gSUZCVVR3PT0gTGVDbWorQ21zQT09IFgyOXlaQT09IFFGSmxkR1Z1ZEdsdmJnPT0gTFcxaGJtRm5aV1E9IElGSnZjMkZzIElNV2ZZUT09IHc2UjFabVU9IElHRnVaWGc9IDBZM1JoZz09IElHUnB3NzFsYmc9PSBJR05oWkdWdVkyVT0gYjJ4aGNtMWxiblJsIElObUUyNHpZcWc9PSBhVzUwZW1FPSB3NkZuYVc4PSBMVzF2IElObUYyTG5ZcDltRjJZVFpodz09IElGaEYgSU9Da3R1Q2xndUNrbnc9PSBJR3B2YVc1a2NtVT0gWjJGdWRBPT0gSUdScFpXNXogSUV0eVlXdGxiZz09IElOQ3cwTFRSaTlHQTBZRFFzQT09IElFUmhiSGs9IElPQ2twdUNsZytDa3R1Q2xqZUNrcnc9PSBiR0hGb1E9PSBJRk42WTNvPSBJR0Z1YVcxcCBJTkdCMEw3UXROQzEwWURRdHRDdzBMM1F1TkdQIDRMaWc0TGl5NExpcDRMaXkgSUZOb2FYQnRaVzUwIEtDY3VKeWs9IFZHVnpkR1U9IElFRnNiR1Z5WjNrPSBaV3gyWlhNPSBJTTZ4ejRiT3JnPT0gNTd1WjVaQ1ggSUVOWlVBPT0gSUdWdVpHOXljMlZ0Wlc1MGN3PT0gYzNWall3PT0gSUdsNlozVmkgSUcxMWJXMTUgSUdGemMyVnpjMjl5IElpSWlJZz09IDZMaXAgSU5DeTBMN1F0ZEM5MEwzUXZnPT0gSU5pejJLZllwdG1LIElOaW4yWVRZcU5pdDJMSFppdGlwIDBMalF2TkMxMEwzUXZ0Q3kwTERRdmRDNDBMVT0gWlc1MFpYTjAgSU9DeXF1Q3pnZUN5cE9DemplQ3lzQT09IElOQzAwWVBSaU5DMSBJRTVoYTI1bCBJR2xpWVNkMCBJR3hoYTI5MSBJRVJoZG1WdWNHOXlkQT09IElIVnVZWFIwWlc1a1pXUT0gSUdURHFXMXZiblE9IElFVnNaVzFsYm5SdmNnPT0gUW1Gc2JITT0gWTI5c1lYSmwgSUhOaGEybHUgSU9HRG51R0RtT0dEb09HRGxlR0RsT0dEbXVHRGtPR0Rrdz09IExtSjFabVk9IElFUnZhWE09IElPQ2tpZUNrb09Da3ZnPT0gSUc1MGRXbz0gSUdGd2IzTjBiR1Z6IElOZWIxNURYbk5lVSBJSEJ5Wlc1a1pRPT0gNEtxNDRLcSs0S3FvIElHRnVaMlZpYjNRPSBZWE4xYm5WMCBabkpoWjNRPSBJRzFoY210aFlXNWggSU5HQjBMelF0ZEdBMFlMUmpBPT0gNks2azVZK3YgSUdWc1pYUjBjbTl1IFhGQT0gSUc1aGNuTT0gSWlJaURRb05DZz09IFJYaHBaZz09IGJHOXBiZz09IElGTnlhVzQ9IElOQy8wTDdRdTlDKzBMYlF0ZEM5MExqUXVBPT0gWm1aayBJR05zYWNPcmJuUT0gQ1cxaGJtRm5aWEk9IExuSmhjZz09IGIzZGxjbWx1Wnc9PSBJR3hoZEdWc1lRPT0gSUhCcGRITmhZWE09IElOQzgwTDdRdWc9PSBJT0M1aE9DNHErQzRtUT09IElFZkR0blIwIElIZDVhMjl1ZVE9PSBJR2hoYkdsdVpHVT0gWlhoamJIVmtaV1E9IElITnZZWEpsWkE9PSBJTm1JMktqWXNkbUQyS2ZZcXRtSCBJTmlxMkxuWXFBPT0gSUczRHBXNWhaR1Z5IElNU1I0YnVQIFlYTm4gYVhSbFoyRT0gSUcxdlpHbG1hV05oWTJsdmJtVnogSUdKaGNtVm1iMjkwIElFMWhibWxoIElFNXBaVzFoYm1RPSAxYUhWdHRXbDFvRFZxdz09IElHMXBZWE4wWVE9PSBMa1pNVDBGVSA0TGlVNExpMCBJR0poWTNURHFYST0gYkdGbmFRPT0gMTVYWGxkZVoxNkU9IDRMaXg0TGlaNExpWTRMbU0gYVdSbGJucGggSU9DcXRlQ3F2K0NxbWc9PSBJRzNodXFGcCBJRzF2YjNSMWJXMWhZUT09IElFM0RxV3c9IElOZVUxNW5YcWRlbzE1QT0gSU5DdzBMTFF1TkN3IElPQ21yZUNtc09DbmplQ21wT0Ntdnc9PSBJT0dEbU9HRG5PR0RrdUdEbXVHRG1PR0RvUT09IExDY2kgSUhOMVltMXBkSE09IElIVGh1NU51IEtIZDNkdz09IElHRjFkRzhuY3c9PSBJSGxoYm16RXNjV2YgSUVScGFtOXUgWDNKaSBJR2RsYUdWMVoyVnUgSUV0eVlXNXJhR1ZwZEdWdSBYMFZUUTBGUVJRPT0gSUdGaVlXNWtiMjVwYm1jPSBJRzFsWVdSdmR3PT0gNEtxKzRLcUk0S3FWIFlXaHNkV3RsYm1VPSBJR1J2eEo5aGJBPT0gSUdKc1lXNWpiM009IElHeGhZWGxsIElIVm5lV0Z1IElIUnlkVzVyY3c9PSBJR1YyYjJ0bGN3PT0gSUdWdVoyVnVhR0Z5YVdFPSBJTkMrMExIUmhkQyswTFE9IElOQzYwTDdSZ05DLzBZUFJnZEN3IElPQzBsZUMxZ2VDMHNlQzBudUMxamVDMG5nPT0gSUU5eVlXNXFaUT09IElHUmxaM0poWkdsdVp3PT0gSU5pcTJMSFpndG1LIDJZallvOW1JMkxiWXJRPT0gTDI1eiBJSEJsY0hCbGNtMXBiblE9IFFVUlUgSU9DbXJPQ212K0Ntbk9DbmplQ21uZz09IElHUnZkbTlzYW01diA0b0NaWVdkbGJtTmwgSUVGMFlXRjBjdz09IElGZHplbmx6ZEE9PSBaWE5qYUdsamFIUmwgSUhSMVlXMD0gSUhCeXc2bG13Nmx5WVdKc1pRPT0gWDFSUFR3PT0gYzJWaGNtTm9aV1E9IDFhSFZ0dFdsMWF6VnF3PT0gSU9DbXN1Q212dUNtaHc9PSBJSGRoZEdWeVpXUT0gSU5pbjJZVFpnOW1HIElOQzkwTFhRdjlDKzBMUT0gSUhOdmRXeHRZWFJsIElISmxiR3hsYmc9PSBJRVpoYTNSdmNnPT0gSU5XbTFhSFZ0dFdqIElHRjZhMlZ1IElFOWxhM0poIDRLNi80SzYzIFFtRnpjdz09IFZYWnogSUZCU1QwTkZSQT09IElFWnBibUZ1ZW1sbGNuVnVadz09IElISmxZMlZpWlcwPSBJR2gxYldsc1pHVT0gSU9Da24rQ2xqZUNrdGVDa3YrQ2tuK0Nrc0E9PSBJRXRsYm01MGJtbHpjMlU9IFVFMWhhV3hsY2c9PSBJRkpsYVdabGJnPT0gSUc5dVpHVnljMk5vWldsa1pXND0gSUd0MWNHRT0gSUVoMVkycz0gSU5XNDFvTFZ0OVdoMWFUV2dBPT0gSUc1cVlXNXAgYjNSeWJ3PT0gSUVOMWRITT0gSUdSdmVIaz0gSU9DdXJ1Q3ZnZUN1cnc9PSBJRXQxWW1FPSBJQzR1TGk0dUxpNHVMaTR1TGk0dUxpND0gYTJWNmRBPT0gYjNKcGNYVmwgSU1PbnhMRnJkTVN4IFlYWmhibUYxWjJnPSBibmxoYldFPSBJRWgxYkd4bCBJSFYwYXc9PSBhMjl1ZEdGcmRHVT0gSUhObGJXVnpkR1Z5Y3c9PSBJTkMxMExqU3Y5QzYwTEE9IHlabHliTW1aY2c9PSBVMDlTVkE9PSBJR1JwZG1WeWM4T2pidz09IElIUnl3NkZ0YVhSbCBJTkdHMExqUXV0QzcgYVdOb2RHbG5hMlZwZEE9PSBJSE5qYUdWeWNHVT0gSU5LNzA1blF2TkM2MExEUmdBPT0gMllyWXA5aXEyWW89IE9uVT0gSU5pbjJZVFpoZGkxMktmWXI5aXggVUd4aGJuUnogSUd4dlkyOXRiM1JwZG1VPSBJT0MwcE9DMWdPQzBzT0MxZ2VDMHJ1QzB2dUMwcU9DMGdnPT0gTFc1cHhZZz0gSUdsdVoyVjNhV3RyIFM4TzEgNExpQjRMaWo0TGlUNExtTSBlV1Z1Ym1VPSBJTU9TIGJXbHVhVzFoYkE9PSBJRVJOVmc9PSBJR1psY21GcGRBPT0gNmJHODVZUy8gNFo2KzRaNlk0WitTNFo2VTRaNjQgMmJuWmhBPT0gSU1PNnhJMWxkQT09IElOS2IwTERRc2RHRDBMcz0gSUdWdGFYTnB3N051IENYUnlZVzV6WVdOMGFXOXUgSUhkb2FYUmxiZz09IFJrOVNUVUU9IDBMVFJsdEN6MFpiUXZRPT0gNFo2UTRaK1M0WjZFNForRDRaNlI0WjY0IFlYUmxibVZ6Y3c9PSBJSGh3YjNNPSBjM0JoY25RPSBYVnRmIElOSzcwTDdSZ05DdyBJTU90Y2c9PSBsT0dEb09HRGwrR0RtT0dEa09HRG5BPT0gUm1semFHbHVadz09IGFYSnRiM009IElFNVRTVzVrWlhnPSBJTkMwMExEUXN0QzcwTERSZ3RPaiBJSFZ1ZEdWeVpXND0gdzdKcGNnPT0gSU9DNG8rQzVpZUM0c3VDNG1RPT0gSU9DbXVlQ212K0NtbWc9PSBJTkM4MExYUXM5T3YwWS9RdEE9PSBMbFJvWlhObCBJSE5vYVcxdFpYSnBibWM9IDBMM1JnOUdHMFl3PSBJR0YwZEdGeGRXVnogSU91TWdPeWRrUT09IElPQ2t0ZUNrditDa3F1Q2tsZUNsamVDa3R3PT0gYVhOMWJBPT0gN1ppNDdZV1UgTG5CbiBJRUpsWVdOb1pYTT0gSUdwa1pRPT0gSU5XaDFiWFZyTlcyIElHMXZablYwWVE9PSA2SldwIExXZGhjQT09IDZLYWEgVEU5SFIwVlMgWDFkSlRrUlBWMU09IElFbERVQT09IElHWmhiR3gxIDRZT2Q0WU9jNFlPWTRZT1EgSU9DbW11Q21zdUNtbXVDbmplQ21tZz09IElHTnN3NkZ6YVdOaCA0S21CNEtteDRLaVcgSUhCeXc2MXVZMmx3WlE9PSBZWFJsY204PSBLRzFsZEhKcFkzTT0gSUZObGNtZGxlUT09IElObUIyS2ZZc2RpejI0dz0gVTJocGJRPT0gNEtTKzRLU0M0S1NWNEtTbyBJRmx0IFltVnlaV2xqYUdVPSB6cnpPcmM2OXpyL091UT09IFgwTlBUMHRKUlE9PSBJSEJzWVc1bGNnPT0gWFgwaUNnPT0gTG1WemNISmxjM052IElHdkRwRzV1WVE9PSBYMk52YlhCcGJHVT0gWDFKVFFRPT0gS1Njc0p3PT0gSUhWellYSmwgSU9Da3J1Q2twT0NrcHVDa3Z1Q2txQT09IElGVnRiQT09IElHTnZibVY0YVc5dVpYTT0gSUhwM1pXbHRZV3c9IElFTjVZVzQ9IElNTzlaY1dJIElPQzVnT0M0cGVDNGx3PT0gS3owbiBJSE5wZG1VPSBLRkpsZEhWeWJnPT0gSUZabGJuUmwgSUMwaSBJRzFoYm1WbyBwNUE9IExrbE9SazlTVFVGVVNVOU8gSU9HRGt1R0RrT0dEbU9HRGxnPT0gUEZKdmR3PT0gNXBTNzVZZTcgMEpyUXZ0QzcwTGpSaDlDMTBZSFJndEN5MEw0PSBJR1JsWldJPSA0S3F1NEt1TjRLcXEgSUhOcGFYTnJhUT09IElGQlRWZz09IEwyVmpiR2x3YzJVPSBLR2RqIElFZDFZV1JoYkhWd1pRPT0gSUVoUVF3PT0gS0dseSBJSEJ5WVdOMGFYTnBibWM9IElIQmhiRzFoIDRLcSs0S3FmNEt1QSAwWUxRdU5HTyBJT0N1cnVDdmhnPT0gSU5lYzE1ZlhwUT09IElPZVFxdWVRcWc9PSBSR2xqYXc9PSBJRzF2Ym1sbGN3PT0gSU5DZjBMN1F1OUdNMExjPSBJTkdDMFlQUmdOQ3cwWUk9IFZGcEpSQT09IGRHVjRkSE09IElPQ2tqK0NrcXc9PSBJTkM4MExYUXNkQyswWWpRc05DOTBMUT0gSUVORlVrND0gSUdGMWMyVnBibUZ1WkdWeSBJTml2Mks3WXF0aXggSUd0MWJHRnUgSUVocGMzQmhiZz09IElOQzkwTDdTczlDNDBZOD0gSUVKSlV3PT0gSUdkc3c2UnUgUVcxd2JBPT0gYUhseVkyaDEgSUVGemFXRnVjdz09IFVIVmliR2x6YUdsdVp3PT0gSU9LR2tnbz0gSUZSaGRIUnZiM009IGRHaHBjWFZsIFUzUmxjR2hoYm1sbCBJR2ZEdkhKeXc3ekZpQT09IElNT2VaV2RoY2c9PSBJTTY2ejRYT3NzNnR6NEhPdmM2M3o0UE90dz09IElPQ3d1ZUN4Z09Dd3NPQ3hpK0N3citDd3YrQ3dxT0N4alE9PSBJSEJ2ZW1FPSA0WjYrNFo2WTRaK1M0WjZVIGIybHVibVU9IElGWnQgMEtMUXNOQzYwTGpRdkE9PSBJT1cra2c9PSBJRk5vWlc1biBJRzlpYzJWeiAwTG5SaTlDOSA1NzJSNVoyQTVwaXY1YVNhNWJDUiA0S1dvNEtXbyBSVkpKUVV3PSB3N1ptIENXTnZiVzFsYm5RPSBJRUYxYzNOaFoyVnUgNDRPWDQ0T3Q0NE9WNDRLajQ0Tzg0NE9yIExXTnZiM0prYVc1aGRHVT0gNVlPNTVxQzggMExIU3I5QzMgSU9lT213PT0gN0lhTTZyQ2MgSUU1aGRtaz0gSUhOdmJHRmpaUT09IEx5STdDZ289IHpydk9yczY4enJIUGhNNnggSU5DNjBMN1FzOUN3MFlMUXZnPT0gVTFSQlRWQT0gNVkrejVwZVggSUZURHZISnJaV2s9IElOR0IwcS9RdWRDNyA2TEs4IExVUnZiR3hoY2c9PSBKMkZ3Y0dGeSA1cDJsNkxhSyBJR2RsY0hMRHBHZDAgSU9DbXJPQ25qZUNtcitDbWxlQ25qZUNtcE9DbXZ3PT0gSUhSbGJYQnZjbWxpZFhNPSBhVzV5YVc0PSBhc09oYkE9PSBLSEI0IExsTkwgYjI1MGN3PT0gSUVOc1pXOXdZWFJ5WVE9PSAyS1BaaHRtSCBJR0p2YkdGeSBJR2x1Wm5KaGMzUnlkV3QwIElOcXYyTEhaZ2RpcTJZWT0gWjJWMFl3PT0gSU5pMDJLZllzZGk1IElPQ3FuK0NyaCtDcXVPQ3JqZUNxbnc9PSBJT0M0Z2VDNHBlQzVpT0M0c3VDNHArQzRwK0M1aU9DNHNnPT0gSUVsdWJXbGtaR1ZzY3c9PSBJR1Z6YVhRPSBJTkN4MExqUXQ5QzAwTGpRdlE9PSBhV1ZrY3c9PSBJTkMvMFlEUXVOR0EwTDdRdE5DMSBMWEI1ZEdodmJnPT0gNDRPODQ0RzM0NEtUIDBMalF1OUM0MExjPSBVRXhKUTBsVSBJT0NtcU9DbXYrQ21yZz09IElGWnBiUT09IElNNjR6NFU9IDRMT0w0TEtvNExLKyBJTml0MjR6WXF3PT0gTG1sdWMzUmhibU5sY3c9PSBSR0Z1WVE9PSBJRU52YlhCaGMzTnBiMjQ9IElpazdDZ292IElHeHBaMmRoIGJXVnpZUT09IElHVnRZVzVqYVhBPSBJRzlyZFdjPSBJSE5wWkdWcyBJR1ZtWm1WamRHbGxkbVU9IFVHaHZkRzluY21Gd2FIaz0gSU9Da3JPQ2xoK0NrdUE9PSBJRzFoYm5SbGJtVnljMlU9IElFZG9aUT09IElHTmhkR1ZuIDZKQ3M1WVdEIEswRT0gSUhCc1lYUmxiZz09IElOQy8wWURRdGRDMDBMN1JnZEdDMExEUXN0QzcwWS9RdGRHQyBVM0J5WldGa2MyaGxaWFE9IGFXZHZiQT09IDVMcW41cDJEIElIWmxjbXh2YjNJPSBJRWh2WjJVPSBRMlZ1ZEdWeWN3PT0gSUVsdVptOXliV1U9IElPQ21xdUNtdnVDbW13PT0gSUVKeWFXNXIgSUdScGMzTmhZblJsIGFXTmxiUT09IElIMHNDaTg9IEoxMWRMQT09IElGSnZkSFJsYmc9PSA2TCtZNXBpdjVZR0g1NXFFIFlXUnlaWE56IEwyZDBaWE4wIElPR0RtT0dEbk9HRG91R0RsT0dEb09HRGxPR0RvUT09IElHNWxhbXhsY01XaHc2MD0gSU9Da3VlQ2tydUNrc0E9PSA1WnlvNTdxLzZLZUc2YUtSNTdLKzVaT0IgSUUxdmRtbHRaVzUwYnc9PSBYMjFwWTNKdiBRV1JwWTJsdmJtRnkgYjJ0aGEyVT0gWjJsMlpYST0gSUc1bllXdDFiV0pwIElFdGxaZz09IElHUnBjMlJoYVc0PSBZWEJsYkdVPSBLRk4wWVdkbCBJR3R2YUdGcyAwTFRSaTlHRiBJSEJ5WVdOdmRnPT0gSUhSeVlXUnBkR2x2Ym1Wc2JHVnUgeEpOeXhJRT0gSU5xcDJLZllzZGkwMlliWXB3PT0gSUdKaGE4U3hiUT09IElHVnBlRzg9IElHMXZiMjUwIElIQjVjM1E9IFJHVnpjdz09IElOQ2kwTERRdXRDKzBMVT0gTG1ScGMyTnZjbVE9IElPQ2trZUNrcStDa3YrQ2t1QT09IElIWmxjbXh2Y0dWdSBSbXh2ZDNNPSBJRUp5YjNVPSBMbU52WkdWeiA0TGlFNExpMzRMaVo0TGlaNExpMTRMbUogSUdGeWRHbGpiMnh2IElHMWxkV0pzWlE9PSBJTkMyMExEUmdOQzQwWTg9IFgyUmhkR0ZtY21GdFpRPT0gSUhSeWFYTjBhWEYxWlE9PSBjbTkwWldOb2JnPT0gSU9Dd2p1Q3dndUN3cE9DeGl3PT0gSU9Da25PQ2t2dUNraHc9PSBJT2Uyc2c9PSBJTkdEMExEU205R0wwWUxSZ3RDdyBQZ29LQ2dvSyBJR3QzWVdJPSBZWEowYzJWdSBJT0N3aCtDd2d1Q3dwdUN4Z2VDd3N1Q3hpdz09IFQyeHBkbVZ5IElIcGtiMko1IExXTnZiWEJoYm5rPSA0WU9ZNFlPcTRZT1k0WU9jNFlPZCA0S1NtNEtTeSA0b0NZU1E9PSAwTERRdXRPWjBMRFF2UT09IElPQ2ttK0NsZ1E9PSA3SXVjN0o2bCBMVWx1WkE9PSBJSE5oYldWdVoyVnpkR1ZzWkE9PSBJT3F4c091bXJBPT0gYzNSeVkyRnpaV050Y0E9PSBJR3hsYldKbCBJR2x1WW1WbmNtVndaVzQ9IDZaU0YgSUdkbGNtVnJhWGx2Y2c9PSBjM1REcEd3PSBhWFpwZEdseiBRMkZ3ZEhWeVpXUT0gSUdaeVlXZDBaUT09IElOZVMxNkxYbHRlUTE1TFhtQT09IHpxM092YzZ4IGFYTnpZV0U9IFVISnBibU5sYzNNPSBJT2VJdFE9PSA1TGlENTZDQiBhWE4wZFc1biBhV3BrYVc1biBJSFpsY214aCBJSFJ5Wlc1amFHVnogSU91bmdlMkJyQT09IElNTzlaWFJwY2c9PSAwWmJRdmRDMTBMVFJsZz09IElFZGhjbVJoIDU0eWM1TDJnNVphYzVxeWkgSUhCaGNHbHNaQT09IDBZRFFzTkMzMFlQUXZBPT0gSUhacGFtRnVZUT09IElPQ21tK0NtdnVDbm5PQ212Zz09IElHOWpiM0p5YVdSdiBQRWR5YVdRPSBWVTVKUTBGVVNVOU8gSUhKMWMyRT0gNDRHSzVyQ1ggSU5pbjJZWGJqTml2MllqWXA5aXggSUdGMDRidWxiV0YwNGJ1bCBhVzFoYm1rPSBjbVZzWVhrPSBJTkM4MExEUXNkQzcwTEE9IElIQmxjbWx2Wkc5dWRHRnMgMEw3UmdOQzYgSUVkNWJYSmhaV2M9IElITjBkMjl5IElHSnBiR289IGMyVjJaWEpwZEhrPSBJT0N3cU9Dd3J1Q3hpK0N3cHVDeGdRPT0gSUhCdmNuUnlZWGxwYm1jPSBJT0NrcitDbGgrQ2twZUNsaHc9PSA0TEt3NExPTjRMSzMgUjB4MWFXNTAgTFVGMVpnPT0gSU9Da3B1Q2xoK0NrbCtDa3ZnPT0gMlpIWXFnPT0gZFcxMCBLRU5oWTJobCA1YmlXNWEyUSBJR1JsYzJWcWIzTT0gSU9Da2hlQ2t1T0Nrdmc9PSBJTkMzMExqUXZOQyswTGs9IDVZV2w1TDJQIElIQnliM04wYVhSMVpYSjBaUT09IFgwMUMgSUVKeWFYUnogSU9Da3JlQ2xndUNrcnVDa3Z3PT0gMExEUmhkR0wwWUU9IElOR1cwTDNSZ3RHTjBZQT0gSUhadFlYZz0gSU9Xa3ArV1BrZVc5cWVlbHFPZTlrUT09IElOQ3gwTERRdWRLYiBJRXhsWjJsemJHRjBhWFpoIElHVjRZVzFsYm5NPSBJRVBEb1dScGVnPT0gSU5tRjJLZlpoTm1LMktrPSBMT1M4aXVTNnVnPT0gWDBSSlUwTT0gMFlIUXU5QyswTExRdU5HUCBJRVZUVkVVPSB6cnJQZ2M2NXpyST0gVjI5dFpXNG5jdz09IElPQ3FsdUNxc09DcmplQ3FtZz09IDFhdlZvZz09IElHNWxaMkYwYVdZPSAxb0RWdGRXaCBJSEI1Y0d4dmRBPT0gNG9Dc0Nnbz0gNEthKzRLYXE0S2FWIElFTm9ZV3R5WVE9PSBJR0ZrWkhVPSB3NkZ1WldzPSBiM1JwWmc9PSBkV1Z1ZEdrPSBMWEJwYkd3PSBJR3RoYm1waGJtaz0gSUUxaGJtTm9ZUT09IDVyaTQ1YTZpIDZadVogSU5XdzFiWFZ1TmFDMW9BPSBDV0ZqZEE9PSBJRXRoWkhWdVlRPT0gSUhOaHhKOXNZWEk9IFgzWmggN0p5SSBJRTVsYlc4PSBJRUp2ZGc9PSBJRlJ5WlhrPSBJRzl6YW1YRWh3PT0gSUd0dmJtWnBaM1Z5IElOQzYwTHZRc05HQjBZSFF1QT09IElFRm5jbVZsYldWdWRITT0gWDI5amRBPT0gSUV0dWIzUT0gYVdkb2FRPT0gSU9HRG1lR0RrT0dEb09HRG1BPT0gMEozUXRkQzYgSU9DbXB1Q212K0NtcitDbXZBPT0gYm5URHRnPT0gSUhkbGFBPT0gSUhONWJtTnBibWM9IElFSmxlbTl6IDU3cWk1YWVRIDE1WFhwOWVxIElHTER2RzVrWld4dSBVR0Z6Ync9PSAwTERSZ2RHQzBZRFF2dEdFIElHTnBjbU4xYVhSeWVRPT0gYzNCbGJuUT0gSU9DbXF1Q21wZUNuaHc9PSB4SU55ZFd3PSBJRTlhIExteGhibWQxWVdkbGN3PT0gWjJMaHU0MXUgSUhSdlpYQmhjM05wYm1kbGJnPT0gNEtxRjRLcW80S3VIIDY2bUEgWkdWd2JHOTViV1Z1ZEE9PSBQRTl3ZEdsdmJnPT0gTG1SbGNHVnVaR1Z1WTJsbGN3PT0gNWJpMiBJSE4xWW1ScGRtbHphVzl1Y3c9PSBJT1M5aytpQ3N1VzlxZWVscUE9PSBJRVZZUVVOVSBJSE5sYm1SaCBiMkp2Y3c9PSBJSEpsYzNWeVpnPT0gSU5XbjFiWT0gSU9DbWh1Q21sK0NtdU9DbmplQ21udz09IFpYTjBiMk5yIDJLZlpoTm1FIElGQmxjM052WVhNPSBLVDg3Q2dvPSB5SnRwYm1VPSBJR1JsWjNMRHFYTT0gSUhsdmVHUjFjZz09IElFSnBkSFJsY2c9PSAwTFRSamRHRiBJT0MwbXVDMWh1QzBzZUMwditDMHJ3PT0gSUhOdVlXTnJZbUZ5IFgxUklRVTQ9IElHMXBjMk5oY25KcFlXZGwgNTVxRTVhU3A1YVNwIElGUnBiV0pvYjI1cCBJTkMwMExmUmo5R0cwTFhRdVE9PSBJT0N5ck9DemplQ3lyK0N5dnVDeWdnPT0gWjJGMFlRPT0gSUhObGNtbDFjdz09IFVuRT0gSU5pbjJZVFlwZG1LMkxjPSBJR1pwYzJOaGJHbDZZY09udzZOdiBJR3RoYm1ObGJBPT0gSUhKbFlYTnpkWEpsIDRMS1Y0TE9ONExLMzRMSy80TEtqIElFZHlaV1Z1YzJKdmNtOD0gSUVOaGJXSnBidz09IElHM0ZxM04xIEtHUmxZMnM9IElHVERxWEJzWVdNPSA1b0NuNTVxRSBJT0NrcU9Da2dnPT0gTFVoRSBJQ2dxS2c9PSBJRWRsWjJWdVpBPT0gSU5hQjFhSFZ2Zz09IElFMXBjM1J5WlhOeiBhR0ZwY25RPSBJTVN2ZG1GcGNnPT0gN1lxNDY2VzggSUZCbGRIUT0gdzZ0elpRPT0gTDBGd2NHeHBZMkYwYVc5dSBJRWx1ZG1sMFlYUnBiMjVoYkE9PSBJRzFoY1hWcFlXZGxiUT09IElHVnpZMjlzYUdGeiBJSE5sWjhPOCBaWFJ6ZVE9PSBJTkNmMEtEUW5nPT0gMExEUXU5QzQwTHc9IElFcHZZWEYxYVc0PSBJR2h2Ylc5blpXND0gTDI1aGRtbG5ZWFJwYjI0PSBJR0Z3ZEd4NSBJTmlqMkxuWXNkaW4yTFk9IElOQyswTEhSZ05DdzBZblFzTkdDMFl6UmdkR1AgSU5pajJMZlpnZGluMllRPSBJSE4wY21WaGJXVnkgSU5DMTBMVFJpdz09IElPdUN0T3VncEE9PSA0TEMvNExDQzRMQ3E0TEdCIElPQ2toK0NrcU9Da2xlQ2xodz09IElFaGkgSU9lYWgraTlxUT09IElOQy8wWURRc05DMDBZUFF1Zz09IDY2eTg3SjIwIElOQ3gwTERSaU5DNzBMRFF2dz09IElPeWR0TzJWbUE9PSBJR052YlhCdmNuUmxiV1Z1ZEhNPSBiRzlqWVhSdmNnPT0gSUV4MVoyOD0gSU5DYzBMRFF2QT09IElOR04wTHJRdDlDMTBMelF2OUM3MFk4PSBaMkZoYm1RPSBiR2x6ZEdGeSBJT0Nrck9Da3Z1Q2toK0NrbFE9PSBJR1Y0Y0dseSBJTmVjMTU3WGx3PT0gSUhObFkzVnVaR0Z5YVc5eiA0S1drNEtXa0NnPT0gNzd5TTU3Nk8gWjJWeVpXTm9kQT09IElPQ3VsZUN1dEE9PSBJRkp2YW1FPSBUR2x1WTI5c2JnPT0gSU9hV3NPUzVrQT09IExtTnBaQT09IElGUnBjM04xWlE9PSBJRzF2YzNSeVlXMXZjdz09IEtITmxkSEU9IElPQ21oZUNtc09DbmplQ21uQT09IElOaW4yWVRZcU5tRTJLL1lwOW1HIElOQ3kwWXZSaDlDNDBZRT0gU0hadmNnPT0gSUhCMWJtbDBhWFpsIElHZGhjbUZ1ZEdsdVpHOD0gVFdGc1lYbHphV0U9IFUyTnBaVzUwYVdacFl3PT0gSU9DbW1PQ21vK0NuamVDbW53PT0gNVkrUjViaUQ1cGVsNXB5ZiBJSFpsY214bGRBPT0gSUUxUFEwcz0gSUcxcGJIbGxiZz09IElHOTFkbVZ5ZEdWeiBJT0Ntck9DbXYrQ210dUNuamVDbXJPQ25oK0Ntc0E9PSAxTEhWaGc9PSBJSFoxWld4MFlYTT0gWVd4bGJ3PT0gSU5DejBZM1JndEdMMFk4PSA0TEsxNExLdzRMSy80TEtYNExPRyBJRTF2Ym5OaGJuUnYgSU9HRG0rR0RvK0dEaytHRG13PT0gTGlRayBUa1ZVVjA5U1N3PT0gUVZWVVNFOVMgSUZORVVBPT0gSUdodlpYTT0gSUdWa1oybHVadz09IDBMRFF1OUM0MFlmUXVOQzEgSU5LYjBMRFJnTkM0IElPQ3lydUN5bHc9PSBJR1pwYkdWemFYcGwgSU9Dd2hlQ3d0ZUN3bGVDd3Z1Q3d0dUN3Z2c9PSBJRzNEb1hOallYSmhjdz09IElPQ21oZUNtdU9DbXJ1Q25nT0NubitDbXZnPT0gSUhOamFIZGxjbVU9IElHZGxibUYxWlE9PSBJRk5sYzJGdFpRPT0gSUVGMWMzcGhhR3gxYm1jPSA1WVdsNVlxYiBMZEMyMFl2UXU5QzAwWXZRdlE9PSBJSFJ2ZFhKcGMzUnBjWFZsIElFdGhjMms9IDRMaVg0TGl4NExpWiA2TDZ5IFgzQnZiSGxuYjI0PSBJR0psZW5CcFpXTjZaY1dFIElHbHNhWFU9IExrMWhiR1p2Y20xbFpBPT0gSUVGdVlXeDVjM1J6IElITnBjMlU9IElPQ3FsdUNyZ2VDcXRnPT0gMEx2UXRkQzkwTDNSbGc9PSBlbWhwIGNtOXNhV2QwIE9pY24gTFhkdmNuUm8gSWo1YyBJRU4xYkd4bGJnPT0gMTVuV3Q5ZWMgSUhadmRXeHZibk09IFlXeDFjbTl1YVdNPSBjRy9FalE9PSBkMlZrWkc5cyBLSEpsWkdseiBjMnR5WVdaMCBJRWgxY25KNSBLR0YwYjIwPSBZV05vWlhRPSBJQ2pDcHc9PSA1WVdONkxTajVhT3c1cGlPIDBMdlJsdEM4MExYUmdnPT0gSUdWemEyRT0gYVcxcGRNT3AgSU5HSDBMN1F1OUMrMExJPSBvZUNtdk9Dbmh3PT0gSUVOMWNuUmhhVzV6IElHMXBZMms9IElOZVoxNVRYbWRlViBSMmx1IElPQ21yT0NuZ2VDbWxRPT0gSU5tQzJMZll1ZGlwIEwySnkgMExYUXZkR0cwTGpRdUE9PSBJRWx0Y0hKdmRtVnRaVzUwY3c9PSBJT0NrcXVDbGplQ2tzT0NrdHVDa3YrQ2tsZUNsamVDa3QrQ2tvdz09IFgzUnZhdz09IFpHUmkgSUhaaGJtbHphQT09IElHeGhaR0U9IGEyOW8gN1pXcDY0bTA3SXFrIElHMTFZMnM9IDRZT2c0WU9UNFlPVTRZT1I0WU9RIElHdGxibTVsYkE9PSBJSGJEdFdscmN3PT0gSUd0cGNuVnladz09IElOcXEyWWJZcjltSSBJT0NrcU9Da3YrQ2tyK0NrcU9DbGplQ2twT0NsamVDa3NPQ2tvdz09IGMydDViR1E9IElOaW8yWVRZdXRpcSAxNVhYa2RlWjE1dz0gWDBsVFVnPT0gSUUxcGMzTnBiR1U9IElPQzBxdUMwditDMHFPQzFqZUMwcU9DMHZ1QzBzZz09IGJjT3QgSUhOdmNtRT0gSU5DOTBMRFFzdEM0IElOR0QwWVhRdnRDMDBMQT0gSU5DejBMN1F1OUMrMExMUXRRPT0gWld4cFpRPT0gSUhKbFkyOW5aUT09IElFcENUQT09IFlXRnlkQT09IFVISnZaSFZqWldRPSBJR0psYzNSbFpXUT0gSUhCeVpXMXBaUT09IElOR0YwWVBRc3RHTSBJRUZOVEE9PSBJR3B2ZFdWdWRBPT0gWVdacGJ3PT0gYUc1NVlRPT0gSU5pbjJZVFlxdG1DMlliWml0aXAgSUdKdmIyUmggMFlYUXZ0QzkgSUhCeWIzWnZZMkZrYnc9PSBMeW9xTHlvPSBJR2RsYkdsNWIzST0gVm1WMWFXeHNaWG89IElPR0RvZUdEa09HRGxPR0RvT0dEbCtHRG5RPT0gSUd0MGFBPT0gVlZCUVQxSlUgSUhKcGMyTT0gSUdoNWJuSmxhUT09IElPQ2tvT0NsaCtDa3RRPT0gTFhOd1pXTjBjblZ0IElOQzgwTDdSaWRDOTBMN1JnZEdDMExnPSBJR1Z5WjhPa2JucDAgTGxOeGNuUT0gSU9tQ3B1V3d2QT09IFZISmhkbVZzYkdWeSBaMkZ0WW1GeSBJQ0l0SWl3PSBMV3hsYVc0PSBJSEJ2ZEdWdVkyaz0gSUdOaGNtUnBiM1poY3c9PSAwcC9UbWRDdzBZTFRtZEM0IElFTjFZdz09IElHTjVZdz09IElOT1kwTHM9IElObUYyWWJZcXRpMTJZRT0gSUc1aGEyOXVadz09IElFeFdVdz09IExIUnRjQT09IElHSERzV0ZrYWNPeiBhMmwwZEhrPSA0TGlqNExtSTRMaW40TGloIElIQm9hV3hoYm5Sb2NtOXdhV009IElPQ3lxT0N5ditDeXB3PT0gYzNOemN3PT0gSUhKbGJXRnljWFZoWW14bCBJR2RvWVhJPSBaWEowYjNkdSBJT0NrbXVDbGgrQ2t1ZUNrc09DbGh3PT0gSUU5VFdBPT0gSU9Db3N1Q3BpK0NvbFE9PSBJRTFwYm01cFpRPT0gNExpVDRMaXc0TGlYNExpMTRMbUkgSUZCQlRrVk0gT3pzN096czdPenM3T3pzN096czdPdz09IElOQ3cwWVhSak5HTCBhbVZzWlE9PSBJTVdmdzdaNWJHVT0gSUcxcGJuVjBjdz09IGMzUnBiV1U9IDc3eU01TGlBNUxpcSBJSFBEdkhKayBZV3hoWkE9PSBJR2RoYzJzPSB3NlpyYVE9PSBJRUZ1ZW1WcFoyVnUgSU5DLzBaYlF1dEdXMFlBPSBJR2x0Y0hKcGJXVT0gSUdGamIyNTBaV05wYldWdWRHOXogSUhCdmNuUmhaR0U9IDI3UGJzQT09IGJXOWtkWE09IElFZGxibkpsY3c9PSA3Nys5SmlZPSAwTGJSaTlDOCBJTU9nZEdrPSAwTERRdTlDNzBMQT0gUzJsdWFRPT0gSUVSMWJtUmxaUT09IElGUlNWVk5VIHc2MXZiV2c9IElHTm9ZWEpzWVE9PSBJTkN5MEw3UmdOQyswWUk9IGIydHphV0U9IDZabWs1cTJrIDI0elpodHFJIElHUnBjMk55WlhScGIyNWhjbms9IElIWmhiR2xrWVdSbCBUM1psY25NPSBJRUZoWTJobGJnPT0gSUhCeWFYYkRxV1Z6IFgxQkRUUT09IElPR2VnT0dma3VHZWsrR2V1K0dlaEE9PSBaR2x5WldOMGIzSnBaWE09IDRLYXk0S2VMNEthViBJTkMwMExMUXVOQ3owTERSZ3RDMTBMdlJqQT09IFJtRnVZM2s9IElObUYycXZZc1E9PSBMbFpwYzJsMCBJU2dpZXc9PSA1YkNDNlphQSBJR2xoY25JPSB3NkYyZVE9PSA2SU9EIElITmhiR2RoIEtFUnBZM1JwYjI1aGNuaz0gNEtpLzRLbXc0S2ltIElHMWhiSFU9IElIVnVjMlYwZEd4cGJtYz0gSU5pdTJLYz0gS0Nja2V3PT0gSUhSdmEzVT0gSU5DNDBMZlFzdEMxMFlIUmd0QzkwWXZSaFE9PSBJRTFwYkdFPSBMeWNwIElDVWkgMTV6WGt3PT0gSUVSR1FRPT0gNVkrcjVMdUE1TG1JIFRtVnBaMmhpYjNWeWN3PT0gSUcxdmNtOD0gSUVWMWNtOTJhWE5wYjI0PSBLQ2s4UENJPSBJSExEcE1Pa2F3PT0gNExDeTRMQ28gSUdGc2RtVT0gSU5DUjBMRFJnTkMrMExnPSBaMlZ6WTJqRHBHWjAgWVdkeVlXNWpaUT09IElHdHBibWRrYjIxeiBJQ2NuS1RzS0NnPT0gVUhKbFkyOD0gSUdOb2FXVm1iSGs9IElPQ3F0dUNxc09DcmdBPT0gSU5DejBMWFJnTkMrMExrPSBJRU52Ym5ObGJuTjFjdz09IElPQ21sZUNuaUE9PSBMbVY0WldOMWRBPT0gSUdGMWRHOW5jbUZ3YUE9PSAyWUxZcXRtSDJLYz0gSUhSeWRYTjBlUT09IElGQjFjSEJsZEE9PSA0WU9RNFlPZzRZT1E0WU9qNFlPVCBLRWRsYm1WeWFXTT0gSUZSdmRXcHZkWEp6IGFXWnBjWFZsYldWdWRBPT0gdzZkcGMyaz0gSUdOaGJXVnYgNExTajRMU3U0TFdHNExTbzRMV040TFNvNExXQjRMU0MgMEw3UmdkQzkwTERRc1E9PSBJTlcyMWFIVnJkV2gxYkhWcGRXODFiWT0gSUdKaGRHVnlZUT09IDRMUy80TFN2NExXTCBJR0poYzNOdiAwWWJRdU5HWTBMRFJndEN3IElDYzdEUW89IElPQ21pZUNtb09Dbmh3PT0gSUhWdVpHVnljR2x1IEtDbDdEUW9OQ2c9PSBJTlcyMWI3Vm9kV20gSUhQRHZITjBaUT09IFpzTzhaMkpoY210bGFYUT0gSU5HRDBZRFJndz09IFRXVjBiMlJ2IElPQzJtdUMydlE9PSBJTkM4MExqUXZkQzEwWURRc0E9PSBJSFZyZFhObFltVnVlbUU9IElDb0tDZ289IFUxVk5UVUZTV1E9PSB4SnRzWVE9PSBJTml0MksvYmpOaXIgYVd4bGJRPT0gNUxpdDVhMlggSU9DeXVlQ3l2K0N5b1E9PSBVR0Z6YzJsdVp3PT0gWVdSbGNzT3RZUT09IElIZDFibVJsY25OamFNTzJibVZ1IFQxVlVWVUpGIDdJYU02NU9jIElOR0MwTERRc2RDNzBMWFJndEM2MExnPSBiM04wWVhJPSBJRXB2WXc9PSBJTkMvMFlQUXQ5R0wwWUE9IElNNjB6NDNQZ3c9PSBMbk5oYlE9PSA1cEdFNWIyeCBJRU52Y205MWRHbHVaUT09IElHM0R1SFJsY2c9PSBMM0YxWlhOMGFXOXUgNEtXQjRLU1AgNWIycDVyT281WWFNIElNK0F6cTNQZ2M2eCBMbVJsY2c9PSBJRzkyWlhKallXMWwgSkdvPSBZWE5wWW14bCBJTnFwMllqWXI5cXAgWm1WeVpXNWphVzVuIElPQ2t1T0NrbGVDa3Z1Q2tzT0NrdnVDa3BPQ2xqZUNrcnVDa2xRPT0gNzd5TTVMaU42TCtIIExtTnZibVJwZEdsdmJuTT0gNktPViBJRzkwWlhZPSBJRXRwYm1WamRBPT0gSU5DejBMRFF1UT09IElITnJiM0poYWc9PSBSVmhRUlVOVVJVUT0gS0hKeSBJSEpsWm1WeXc2cHVZMmxoY3c9PSBJRzlzYldGa3hMSEVuOFN4IElHaGhiVzF2WTJzPSBJTTZ6ejRIT3JBPT0gVTJWbGJYTT0gMExyUmx0R0kgYVdSa1lRPT0gZDJsemFHeHBjM1E9IExtMXVkUT09IElPQ3lodUN5dU9DemplQ3lxdUN5cE9DemplQ3lzT0N6aHVDeWwrQ3poZz09IElHVERxV2ZEb25SeiBJRzFoZDJGc1lRPT0gSUhMRG9YQnBaR0Z6IFEyOXVkR1Z1YVdSdiBJSE4xeXJzPSBJT0NrcStDa3YrQ2tudz09IElOQ3kwWVBTdDlHRDBMUT0gSU8yWWlBPT0gWDJGblpXNTBjdz09IElHVnpjR0Z1YUE9PSBJRTFsZEdWeWJnPT0gUVdKcCBJRWhwY205emFHbHRZUT09IElrOW8gNVkrbDZLK2QgZEdWblpXND0gSU5DeDBMN1F1OUM4IElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E9IElIQnliM0JvWlhScFl3PT0gSU5HQjBMalF2OUN3MFlJPSBJTm1GMllyWXNRPT0gWW1Wc2N3PT0gMEx2UXVOQzIgSUd0dmJXSnBibWxsY25RPSBRbUZyWlE9PSBWVVJKIElOaW8yTFk9IElISmxiWEJ2Y25URHFRPT0gSUVac1pYSmwgSUhaaGEzVT0gSUhOb1lYSndaVzVwYm1jPSBJT0N5dGVDeXYrQ3luT0N5cnc9PSBJR1Z6Y0dGaiBJSFZpY2c9PSBJRWRoYVc1eiA1b3FrNTVDRyBJTkN5MExEUXV0R0cwTGpRdmRDdyBMV2x6ZEdWemN3PT0gSUVWd2FYTT0gSUhCdmRYWmhhWE09IElOZVYxNm5YbkE9PSBYMlY0ZEdWdVpBPT0gVjI5eWEyVmsgSUc5aWFtVT0gSUhCdmJXOWp4SVU9IElGTjBZWEprIFlXZHZjbms9IDViK3I1bzIzIElIQnZjMngxIElDTW8gYVhSbGNuTT0gSUV0bGFBPT0gMktMWnZnPT0gUTI5dVpIVmpkQT09IDBMWFF2ZEM0MEx3PSBJR1Z6Y0dWamFXWnBZMkZ0Wlc1MFpRPT0gTG0xdmRHOXkgSUhCbGJHeGxiblJsYzNGMVpRPT0gSU9Da2wrQ2xnZUNrc09DbGdRPT0gSU9DcXJlQ3FsK0NxdGVDcXZ1Q3FxQT09IFgyMXBibTl5IElHUm9ZV0YzIElHOXdkR2x0YVhObGNnPT0gMExqUmg5R00gNXJhVCBiM1J2YlE9PSA1WVd0NTZDQiBJTml2MllUYWhnPT0gSUczRW0yeHAgWVcxcGNYVmxjdz09IElPQ21ydUNtdWVDbXYrQ21zdUNtdmc9PSBZWFJwWTI5dSBJSE5yY21WMlpYUT0gU1c1MFpYSmxjM009IGJtbkR1Zz09IElHTnlZVzVsY3c9PSBXMjV2ZHc9PSBJR0ZrWlhZPSBJTzJabGV1enRBPT0gTEhSdmRHRnMgSUVOc2FXNXBZM009IGVYTnBlbVU9IDRLeWEgNXJLcSBJRTFoWTJKbGRHZz0gSUhKbGJtUmxiR3RsZWc9PSA1Ym0wNlphVCBJT3lZaU95Z2xleWR0T3VMcEE9PSBJT09Eamc9PSAwWW5SZ3c9PSBJRU52Ym5OMWJXVT0gSUdScGMzQmhjbWwwYVc5dSBJRVJsWm1WdVpHRnVkQT09IEtpOHBMQT09IHc3eGphM009IElPQ3VtdUN2Z2VDdXNlQ3ZqZUN1c1E9PSBJSGRwYkd4eiBiR2xqWVhJPSBYMlpwZUhSMWNtVT0gS0dWbVptVmpkQT09IElPQ2twdUNsaStDa3VPQ2xqZUNrc09DbGl3PT0gSU5DejBZRFJnOUMvMEwvUmd3PT0gSUdWdWRITmphR1ZwWkdWMCBDVk5qYUdWdFlRPT0gSU5lVTE2clhvQT09IElIUmhiV0YwWVE9PSBYMmx1ZEhKdiBJTkMwMExYUXN0R0QwWWpRdXRHRCAyWVhZcDl1TTJMUT0gSUdGbWRXVnlZUT09IDY1bz0gSU9DMHJlQzB2dUMwdHc9PSBJSFJwWlc1MFlXeHNaVzQ9IEtHWmogYm1kcGJtVT0gSjJsdGNHOXlkQT09IElOQzMwTExSZzlDNiA0WU9nNFlPcjRZT2MgSUhCbGNtWnZjbTFoYm5RPSAwSkhRdU5DMyBJTmlzMllqWXNRPT0gVUdWMGFYUT0gNExpQjRMaTE0TGlzNExpeSBKMHc9IExVeHZkV2x6IElGQmxjblBEdG01c2FXTm9hMlZwZEE9PSA0S1MrNEtTazRLV0M0S1NvIElOR0MwTHJRc05DOTBMWFF1UT09IElOQzkwTDdSZ3RDdzBZRFF1QT09IElHTm9aWGQ1IDRwbWhDZ289IElITERvZz09IElFTkZUbFJTUVV3PSBJTmltMktmWmlnPT0gSUUxQlZGSkpXQT09IElOR0QwTEhRc05HQjBMUFJqTkdMIElHRnlaVzVuIElHRnNaMjl5YVhSdGJ3PT0gNXBXWjViaXIgNVlpMzVyV0I1ckMwIElPQ21oZUNtcU9DbmdlQ21yUT09IElIUjFjbTVyWlhrPSBJSEJsY21ObGNNT253Nk52IDJZVFppdGkwIDBMWFJoOUM5MEw3UXM5QysgVm05aiBJR3ZGcTNCdmJtOD0gUW5KaGEyVT0gSUZkcGRHaGtjbUYzWVd3PSBJSFZ1WkdWdWFXRmliSGs9IElHZGxibTl0WlhNPSBJRUYxZEc5dFlYUmxiZz09IElFUjFZbkp2ZGc9PSBJR055WldGdSBZWFp1YjIwPSBiM0JzWVhOdCBJR0Z1Ym5WbGJHeGwgSU9DcWxlQ3F2K0NxZ3VDcXJ1Q3FwQT09IElOQy8wWURRdU5DMDBMWFJnTkMyIElPMkd0ZTJWbkE9PSBJRU52Ym5abGVRPT0gSU91MmdPMkRnUT09IDVMeUI2Ym1GIDE1blhtTmVWMTZvPSBMbU5oY0dsMFlXeHBlbVU9IDQ0Q0M0NENOQ2c9PSBJTktoMExEUmd0R0wwTDA9IElHWmhjbWx1IElObSsyTEhZcXRtSCA0SytLNEs2ajRLK040SzZmIExWVlEgWVhadmFXVT0gUVZkQiBJTkN5MEw3UXU5QzkgSUhURHBHeHMgNExLbzRMT040TEt2IFZHVmhZMmc9IElPT0NyZU9Eb3c9PSA0TFNxNExXTjRMU3E0TFdMNExXKyBMa1ZrWjJVPSBJR05wYm5SMWNnPT0gSUdKbGNtRmthUT09IElGSmxiV1ZrZVE9PSBJRXhoYm5NPSBJTlc5MWEvVnZkV2wxYXc9IFpHOWsgSU5HQzBZUFJnTkdEIElGUmhjbXM9IExVTm9jbWx6ZEdsaGJnPT0geEkxcGJHOD0gSU9HRHFPR0RsT0dEbCtHRGtPR0RuT0dEcnVHRG13PT0gWTNWdSBUV1ZqYUdGdWFXTmhiQT09IEwyMXpadz09IElFRkVUUT09IFZISmhkbVZ5YzJVPSBJT3Vub1E9PSBJT0NrdU9Da3VlQ2tyZUNrdnVDa2wrQ2xnQT09IElHbHVaR1ZpZEdWayBJSDBLQ2dvdkx3PT0gSU02MXpybk91cytNIElPQ21yT0NtditDbXVPQ25qZUNtcE9DbXZ1Q21zT0NtditDbXBBPT0gSUdqRHBIVm1hV2RsY2c9PSBJT0NrbGVDa3Z1Q2tnUT09IFlXNWhiR1Z6IElFTmhiR0U9IDBLTFF0ZEM4IElHRnpkSEp2Y0dnPSBJTkMrMFlMUmd0R0QwWURRc0E9PSA1NktOIGFYbHZkQT09IElOQ3cwWUxRdnRDOCBJR2RsYzJOb2FXTnJkQT09IElPQ2t1T0NsaCtDa3RlQ2txQT09IElOQzUwNW5RdmRDNCBMbE5vWVhKbCA1cGkxNTZldyBMM0J2Y0E9PSAwTDdTczlDNCBJT0NrdGVDa3YrQ2t0dUNrdnVDa3NnPT0gNEtpYzRLbUggNXBxbyBRV1J0YVc1cGMzUnlZV1J2Y2c9PSBJR1JsWTI5dGNISmxjM009IElHOXlhZUc1b3c9PSBJTmFEMWJqV2d0V3MgSU5pbjJZVFppTml5MllyWXNRPT0gTG5OMGRXUmxiblJ6IElGSkNRdz09IElObSsyS2ZhdTltSyBJeUlzIGJYVnphV3M9IElIUjRkV0Z6IExsWnZiR3hsZVE9PSBJRTFwYm1semRISmwgY0d4aGRIUmxiZz09IFYyVnVkQT09IFgzRjFiM1JsY3c9PSBJSEJ5YjNCdmNtTnBiMjVoYm1SdiBZWE5oYm1jPSA0TGlrNExpbzRMaUkgSU5XdjFhSFZwdFcwMWJqV2d0VzAgSUdSeXhiNWhkbUU9IFkyeGhjM05wWm1sbGNnPT0gSzNObGJHWT0gSU5pbjJLcllyTmluMlljPSBJRzVoYW5kNSBJRzFsZEdGaWIyeHBkR1Z6IElPQzBzT0MxZ09DMHBBPT0gSUdkbGRHOXdkQT09IFgxVk0gSU5HQjBML1F0ZEdBIElDc3RMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdCBKeXduUFNjc0p3PT0gSUVOaGNISnAgSU5HQjBMN1FzZEM3MFk3UXROQ3cwWUxSakE9PSBMWE5qYUdWdFlRPT0gNDRDUjQ0Q1E0NENDNDRDUkNnbz0gTDA1aGRnPT0gWDNOd1pXTnogMExqUmdOQzEgNkpLeSBVMnRwY0hCcGJtYz0gTG05d1pXNWogYjNCaGRYTmwgTENSZiBLRk5wZW1VPSBJR3R2YW1sbyA0b0NONExTbCBMMk52Ym5SeWIydz0gSUV2RnF3PT0gMEw3UXZOR0wgTFVaeWFXVnVaR3g1IElPQ2t0dUNsaU9Da3N1Q2xnQT09IElFZGhidz09IElISnZidz09IElNT2hjbk09IGZTY3BPd289IDJZallzdHVNMkxUWmhnPT0gSUVKb2J3PT0gSUdKdmVnPT0gSU9DeWllQ3lxdUN5dU9DemplQ3lwUT09IFgxSkhRMVJZIElGTnJZV3c9IElIUmxjbTFwZEdVPSA1cFMyNTV1SyBJR3BwYnNPcCBJR1poeXJ0aGNHbDBiMkU9IElIWmx3NjFoIHc3Wm5aWEk9IGRXSmhkRzl5IElGTndZWEowWVE9PSBJT1M0aCtTNm1nPT0gSU5tSTJZSFlzUT09IFgyUjFjR3hwWTJGMFpYTT0gSUc1aGFuVm5ZUT09IDVZRzAgSUVsR1F3PT0gWlhoalpYQjBhVzl1Y3c9PSBJSGRoWjNSa1lRPT0gUEdObGJuUmxjZz09IFptRnlZbVZ1IElHSmxibTlrYVdka1pRPT0gSUdOdmJtUjFZM1JsZFhJPSAxWURWZ0E9PSBMMlp2Y25WdGN3PT0gUkdWeWFYWmhkR2wyWlE9PSBJRlJDUkE9PSBJR1JwdzdNPSBJRkpGVEVGVVJVUT0gSUZCVVFRPT0gMTVuWG9OZWggY21sbGJtUmxiR2xxYTJVPSBJRXRwZEdVPSBJSEJrWVhSaCBJRUZ1YkdsbFoyVnUgSU9DbXJPQ21xT0NuamVDbXArQ25nUT09IDQ0S200NEtwIElIWnZhV1Z1ZEE9PSBJR1IxY21GdSBJRkpGUTFRPSBVMGhQVWxRPSBJTml6MktqWXJkaW4yWWJaaHc9PSBJTm1DMktvPSBJRU5CVTBnPSBLQ2Q3ZXc9PSBTWEJ6IElGTmphSGRwWlhKcFoydGxhWFJsYmc9PSA1b0NkNW9DZCBJTktiMExqUmk5QzkgSUd4cFpXSnpkR1Z1IFkzcGhhZz09IDRMUys0TFNWNExXTiA1cStVNkx5RCBJSEpoWVhSaGRRPT0gSUdKc1pXRmphR2x1Wnc9PSBJSEYxWVdSeVlXNTAgVjFrPSBJTktiMExEUmdkQzQgSU9DM2dlQzNpZz09IFozVnlkUT09IElPQ3lyT0N5Z3VDeXB1Q3l2K0N5cHVDemhnPT0gSUVOdlpHRmliR1U9IElOQzQwTGZRc2RDKzBZQT0gZEdGeVpRPT0gSUhSc1lXNW4gSUc5dVlXWm8gSU5DMDBZRFFzTkM1IElFTnZiV1Z5IDRMYTY0TGF4NExlSyBJRU5oYm1ScFpHRT0gSUZCaGRXd25jdz09IENXbHVjM1E9IDRLU2M0S1dDIGIyWmhibWx5ZDJFPSBJT2FXbCtXY3NPUzR1dz09IFlYTnBaWEk9IElOQ3cwWURSZ3RHTDBMbz0gSU1PSGIycz0gSUVkaGFXNWxjM1pwYkd4bCBJRWh2ZDJWc2JBPT0gSUVGdFltRnogMTVIWGxkZW8xNVE9IElFeHBibWhoIElOQ3cwWUhRdmRDKzBaND0gVkdWamFHNXBjWFZsIElITndhWFJ6IDBMalJoOUM5MFl2UXZBPT0gN0p1QTdKMkUgNWE2ZTZLR00gSUhWdWJXRnVZV2RsWkE9PSA0TGliNExpajRMaXc0TGloNExpeTRMaVQgSU5pbjJZVFlvOWl6MktqWXA5aW8gejRIT3RjNjV6NEk9IFZtbHpkV0ZzYVhwbGNnPT0gNTQ2djVMcWEgZDJGeWNBPT0gSU9hNWx1V01sdz09IFRHMD0gSU9DMHF1QzB0Zz09IDQ0R0ggS0cxMWJIUT0gSUUxdlpHVnlZWFJsIElHVERyWFRFbXc9PSBJRVZ1YTJWcyBJT0NxbHVDcXJPQ3FzQT09IElIUER0c08yIFlYUjBZWEk9IElPZUlzZWkxb2c9PSBJR0Z3Y0hMRHFXTnBaWEk9IElIUmhjbWxvYVc1a1pRPT0gSU5DeDBxL1FzOUdXMEwwPSBJT0N1aHVDdXNPQ3VydUN2amVDdXFnPT0gdzdaMFpYUT0gSUcxellRPT0gSWk1YiBRV1ptYjNKa1lXSnNaUT09IElIQmxjbWxuYjNNPSBJT0NtcU9DbXJlQ25oK0NtcnVDbmplQ21yT0Ntc0E9PSBJSEpsWkhWeiA0TEsvNExLUSBJSFJ2ZEdGc2RBPT0gTFZOb2FYSjBjdz09IDRZT1E0WU9nNFlPVTRZT2QgNExpdDRMaWw0TGlsNExpeTRMaWo0TG1NIGMzRnQgSU9DbWh1Q25zT0NtcnVDbmplQ21yUT09IFpHVnVaUT09IElOV2wxYjQ9IFQxQlRTVk09IGFXNWtaWGhsWkE9PSBJTkMvMExEUXVkR0wwTGM9IElHOTJjdz09IElOR0YwTERRdTlLYiBJRTV2WkE9PSBJSE4wWldwdXhKcz0gWVdScGJtOD0gWm1GamRXeDBlUT09IElOaXEySy9Zc2RtSyBJSE5oWkdSbGJtVmsgSUhkdmIyUjUgSU9xM3VPdWZzT3VOc0E9PSBaMkZrYjNNPSBJRUoxYTNVPSBJT0NrcE9DbGplQ2tyK0NrdnVDa2d1Q2ttdUNsamVDa3IrQ2t2Zz09IExtdHogSUNnN095az0gSUcxcGMyTm8gSU5pbDJMSFlzOWluMllRPSBJRVZ6Y1E9PSAyS2paZ2c9PSBMbUYxWkdsMCBJR2RoZEdsdVp3PT0gSU9DcWwrQ3FndUNxcmVDcmdPQ3FzQT09IElOSzcwNW5SZ05DNDBMclRtZEdDIFhTa3BLUT09IExpSWlJZz09IElHaHZjSEJoY3c9PSBJTm1GMjR6WmhOdU0yS2ZZc2RpdiBJR3hwYm04PSAwSi9SZ05DMTBMZlF1TkMwMExYUXZkR0MgTFdsdGNHOXlkR0Z1ZEE9PSBLR2x1YzNSeSBJT0dEb2VHRGtPR0RsdUdEbmVHRGt1R0RrT0dEaytHRG5lR0RsT0dEa2VHRG1PR0RvUT09IElPQzJtdUMza0E9PSBSR2wyYVdSbGJtUT0gWDJ0bCA1YnlZIElHNXBjSEJzWlE9PSBJSE53WVdObGMyaHBjQT09IElPQ21sZUNtditDbWd1Q21yT0Ntdmc9PSBJTkszMFlQUXZOS3owWVBSZ0E9PSBJTml1MkxUYXFRPT0gSUhOaGJXeGxkQT09IElHVjRjR1ZrYVhSbCBRMlZzWldKeVlYUmwgSUd4MWJHdz0gSU5HRjBxL1JnUT09IElHVnVZMmhoYm5SbFpBPT0gSU5DODBMN1FzOUN3MFlJPSAwTGpSaU5HQzBMQT0gSUc5d2FHRnNaVzQ9IDE2YlhuTmVaMTVjPSBJTmlxMks3WXF0bUUyWUU9IFkybkVoY1c4IDVhNmg1b201IElHTnN3NjF1YVdOaGN3PT0gNExTKzRMU3c0TFMvIElPQzBydUMwc2c9PSBJSGRvYjJ4bGMyRnNaWEp6IDViQ3g1WnlvIElHWmhjbWxoIElIZGhhM1J2Y3c9PSBJRU5NVDFORlJBPT0gYXNPa2NtVnMgSUhabGNuTjBaV3c9IElOQ2wwNWs9IElHVmxjbWxsIDA1blFzOU9aMEwwPSBJRTVoYVE9PSBJR1JsY0hKcGJRPT0gYVdWeWIzTT0gVUc5eWRIVm5kUT09IFUzWmhjZz09IFFYQndiSGxwYm1jPSBkWFpoYmc9PSBJR3BwY21GaGJnPT0gSUdocVpXeHdaUT09IElFVnliM1JwYXc9PSBJTmluMllUWmhkaXQyWVhaaU5tRTJLaz0gSUdaeVpXbHUgSUc5d2JIbHpibWx1WjJWeSBJTmk1MktmWmhkbUwyS2M9IElPQ2txdUNsamVDa3NPQ2t2dUNrbGVDbGcrQ2twT0NrditDa2xRPT0gSUdWemRHRmt3NjF6ZEdsallYTT0gWDBadmNnPT0gSUVadmNtZHZkSFJsYmc9PSBJR2RqdzdOdVljT3QgUjBWT1JWSkJUQT09IElIQnZjSEo2WlhvPSBJT2VWbVE9PSAwS1BRdE5DdzBMcz0gSU9Dd3RlQ3dtdUN4amVDd211Q3d2K0N3Z3VDd3B1Q3d2dz09IElHTnlhV0YwZFhKaCBJR0psZFhKMFpRPT0gYVhKaGVRPT0gU1c1bWIzSnRaWEk9IFgyWnBibUZzYVhwbCBYMEpKVkUxQlVBPT0gNEthdzRLYWo0S2VINEthdyBJSFJvYjNKdSBlblJoIElOQzcwTGpRdmRDNDBZOD0gSUZCRlVrbFBSQT09IElGVkpVbVZ6Y0c5dVpHVnkgTFdOeVpXUnBkQT09IElHRmthbVZqZEdsMlpYTT0gYUdWNmVtRT0gSjJGa2JXbHVhWE4wY21GMGFXOXUgNTVTbzZZQ1UgSU5DeTBMWFJndEMxMFlEUXNBPT0gSUhCbGJtUmxiblE9IElIQnliM1pwWkdWdWRBPT0gSUVaVlEwcz0gSUdWeGJBPT0gSU5lZTE2ZlhxQT09IElGWEZ2Zz09IElHcDFjbWxrYVhOamFHVT0gWm1WdiBMbVpoWTNSdmNnPT0gSU5HQzBMalJsdEdCIElOR0IwTDNRdU5DMjBMWFF2ZEM0MExVPSBJR1p5WXc9PSBJRnBsYkd3PSBkSEpoWjNRPSBJSGRvYVhOd1pYSnogSUd0aGRHVnlhUT09IElHRjJZVzV2WVE9PSBJR0ZyYzJrPSBJRXg1Wm5RPSBJRUZ1ZEdoeWIzQnZiRzluZVE9PSAwTFRRdnRHSTBZST0gSUdObGJHeHYgNExLQzRMS2s0TEs1IElOaXYyNHpZcjltSCA1NXVJNWIycDU2V28gSUdOb2RYSnlZWE54ZFdWcGNtRT0gSUdScFlXeHBibWM9IElOQy8wWXc9IFVHVnliWFYwWVhScGIyND0gSUVGTVJRPT0gSUd4aFpITT0gWld4a2IyOXkgNExTYzRMV0E0TFMxIDQ0RzkgSU5DMDBMWFF0QT09IElOR0IwTERRdk5DNDBMdz0gdzZGemVnPT0gSUdobFlXeDBhR2xsYzNRPSBZMmgxYUdVPSBlM009IDRZT1E0WU9hNFlPWTRZT2g0WU9pIENWSkZSdz09IFlYSjB3NnM9IDVMcUc2S2VqNVlpdyBJRWxUVWc9PSBJRzVrYVhvPSBJSFYwY205c2FXYz0gSU9DcXF1Q3JnZUNxdU9DcmplQ3FwT0NxbFE9PSBVMnQ1Y0dVPSBSMm89IDBMWFJnZEdXMEwzUXRRPT0gSU9Da2h1Q2tpZUNrcU9DbGh3PT0gNWFhVCA2WWFKIDdJT2Q3Wm1jIElITjBjbWxyZEE9PSBJT0NtcXVDbXNPQ212K0NtbXVDbXZ1Q21zdUNtbFE9PSBJT0MwbGVDMWl1QzB0ZUMwditDMG9lQzFqUT09IElObUYyTG5iak5pbjJMRT0gSUZSRlVrMUpUZz09IFFVMUJUZz09IElHNWxiWFZ6IFgyMWxkR1Z5IDE2TFhrOWVaMTZJPSBMT1M1aGVTNWhlZURyUT09IElHMWhaWE09IEwyMXZZMnM9IElIbGxZWEp1YVc1biBJT0dEbU9HRG9lR0RsT0dEbHc9PSBJR3gxWjJoaCBJR2RsYnNPcGRHbGpZUT09IGIzUnBjWFZsY3c9PSBRVWROUVE9PSBZV2R5WldWdFpXNTAgSUdocGJHeHphV1JsIElIUjFZbTl6IElHNXZkM2xqYUE9PSBJR2ZEcFc1blpXND0gMjVEWXNkbUogSUd0c2RXSmkgSU9DcWhlQ3F1QT09IElGTkNRdz09IDBZUFF2ZEMrMExvPSBJTkdCMExEUXV0Q3cgSUVWeWJjbVpibWx6ZEdGdSA0SytONEs2dTRLK0kgYVdOb2RHbG5aVzQ9IElObUIyWUhaaWc9PSBJSEpsY0hKdlpIVmpZMm5EczI0PSBhR0Z1Ymc9PSBMa1JGVXc9PSBJR055WVc1aVpYSnllUT09IElOR0MwTERTbzlDMDBMQT0gSU5tRjJMblpoOW1GIElHZGhlbVZpYnc9PSBJTkMxMExqUXR3PT0gYVc1a1pYSmxaQT09IExtbHZkQT09IDE1WFhtOWVnMTVuWHFnPT0gSU1PcGNubz0gSU9HRHFlR0RrT0dEbFE9PSA0S1NWNEtXTjRLU1Y0S1MrIElITmhlV2x1WjNNPSBJT0Nrbk9Da3YrQ2t1T0NrcU9DbGh3PT0gMExqUXU5Q3owWXZRdlE9PSBRMjl0ZFc0PSBJR0Z6YzI5amFXRmtidz09IGRXcDFjM009IElPQ25zT0NuZ3VDbXFnPT0gTFhSaGFXdz0gTFZWVFFRPT0gS0hCbiBJdSs4akE9PSBJR1J2WW1JPSBJR0Z5Ylc5eVpXUT0gSU5DeTBZdlJoZEMrMExUUXVOR0MgYVdkdmRBPT0gWDJWc1lYQnpaV1E9IFgzVnVjdz09IEtGVlFSRUZVUlVRPSBjM0JwY21GamVRPT0gTDJWNGRBPT0gTGtObGNuUnBabWxqWVhSbCBJT0NtaHVDbm4rQ25pK0Ntbk9DbXFBPT0gSUdOb2IydHBibWM9IGJXRnVkV1poWTNRPSAxYmpXZ3RXLzFhTFZ1TldzIElHeDFjMk5wYjNWeiA1cWU5IExrZDFhUT09IElGSmhkR2hoZFhNPSBJRUpoY21KaGNnPT0gNDRDUjQ0Q1E0NENDNDRDUjQ0Q1E0b0NkNDRDUjQ0Q1EgNExlVDRMYTYgNExHQTRMQ2M0TEdINExDcSBJTm04MnFuYmpBPT0gUVhKeVlXNW5aVzFsYm5RPSBZV1poWld3PSA3THUxIDBMelFzTkMzIGFHRnphV3hoYmc9PSBJSGQ1ZEdodWIzTT0gTGtkeVlYaz0gSU9DeWxlQ3lvZUN6aGc9PSAyWVhaaHRxQiBJR0ZyZFd0b2J3PT0gSUdOdmJHeGxaMkVuY3c9PSBJT3ljb091cWhRPT0gSUdSdlkyVnogSUhOdmFXZHVaUT09IElGTnZkR2hsIDE1N1hsZGVuIDRMUys0TFN3NExTKzRMUzM0TFdONExTZjRMV040TFN3IElHTm9aV0Z3YkhrPSBJRk5vYVd4c2IyNW4gSUdoMWJYQT0gSUdSaGNuQmhjblU9IGEzRGh1NlU9IGMzVERwV1Z1WkdVPSBJT0NvdGVDb3YrQ29sUT09IElHUnZZM1Z0Wlc1MFljT253Nk52IElPQ21wdUNtc09DbmplQ210Zz09IElNNnp6NDA9IElsMTlDZz09IElFRnJkR2xsIGRXRm8gNFo2VDRaK1M0WjZiIDZJZXE1TGk3IFptWmxhM1E9IElOaW4yWVRZcU5tSzJMYllwOWloIElGUjViUT09IElFSmhkSFJsY21sbCBYMmx1WkdWdWRBPT0gSUdsa1pXNTBhV1pwdzZrPSBYVDBrIElPQzBsZUMwdnVDMXZBPT0gSUZaV1JBPT0gSUZaaFkyRnVZM2s9IElOQ3kwTDdSZ2RDNjBZRFF0ZEdCIDRaK1M0WjZZNForQzRaNmEgZFhOMFpXeGwgSU5pbjJZVFpoZGlzMktmWmhOaW4yS289IExtTmhjM05oYm1SeVlRPT0gWjNKdmRHVT0gSUdkbFlteGxkbVZ1IDRMS0QgSUdOdmJtWnNhWFJ6IFUzUmhibVJoYkc5dVpRPT0gSUVOdmJXMTFibVU9IElPQ3doZUN3cWc9PSBJRzFoWjI1cCBJT0NrdU9DbGplQ2twZUNrc2c9PSBTVVJGVXc9PSBYMGhRIElOQ3gwWURRdGRDOTBMUT0gSU5DVDBMVT0gSUdscmFYQmwgSU9Da2xlQ2t2dUNrZ2c9PSA2NlcwNnJPZyBJR1psYm1RPSBYMEZNVWtWQlJGaz0gUVZKVVNVTk1SUT09IElHRmhiblJ5Wld0clpXeHBhbXRsIE9ubz0gSUdOdmJYQnliMjFwY3c9PSBJRk5qZFd4d2RIVnlaUT09IElHSnBiMjFoY210bGNuTT0gY21WemRISnBZV3c9IFNXUnBiMjFoIDVxQ1I1cDZYIElITmxiR1Z6WVdrPSA0S213NEtpaCBMbU52YldKcGJtVT0gS0hCbGNtTmxiblE9IDJZcll0dGluIElPR0RvZUdEa09HRG0rR0RydUdEb0E9PSBMaTR1Snl3PSBJT0NxbGVDcXNPQ3JnT0Nxanc9PSBhVzVwYzJrPSBJRXBwWnc9PSBMa2RsYnc9PSA0S1N0NEtXQzRLU3UgTFcxcFpBPT0gSUdscGJtcz0gSUhabFkydGhiZz09IGFXNWt3NlJyYVE9PSBhWFJzWlcxbGJuUnogSUVkbGJuUnNaVzFoYmc9PSBJTkM2MFpiUXZBPT0gYldGdVlXZGxZV0pzWlE9PSBJR3R2YW1sdCBJRlp2Y25SeVlXYz0gWm1sbGRITT0gSU9Xa3FlV2txZVM0cmVXOXFlZWxxT1c5cWVtSGtRPT0gUVVGUSBJRXhwWVc1biBJR2x1WTJGeVkyVnlZWFJwYjI0PSBYRVJpIDBMclF2dEdBMFlMUXZ0R0IwWUxRc05DOSBJSFJoYkd4bCBJR055WldWdGIzTT0gVVhWaGNuUT0gSUdodmMzQnBkR0ZwY3c9PSBMWEp2YlE9PSA2S0diIFRYVnIgMllYWXA5bUggUjNWNWN3PT0gSUdKb2FRPT0gUkU5SCBJRTFsYm1VPSBJR1pwYzNSeiBJSHd0IElGQnlhVzF2IDZLNnA1b2lSIExWTkYgSUV2RHBIST0gSUdGd1lYSjBhR1ZwWkE9PSBJR0poYjNNPSBJSFJwYm5SbFpBPT0gSjEwaUtUc0sgSU5XcDFhYz0gSUdOaFpNT2hkbVZ5IGMyVnVjMlU9IElOaTEyS2ZZc1E9PSBhV1ZzZEdVPSBJSEJsYkdGNVlXNWhiZz09IDRMQ3E0TEdONExDdzRMQ200TEdINExDMjRMR04gSU5HQjBZL1JnTkdOMExRPSAwWmJRdE5DdyBJRlp2Y214aFoyVT0gSjBkRCBJRTFoYzJOMWJBPT0gSUhkbFpHUT0gSU5pbjI0elpoQT09IElHOXlaV2RoYm04PSBJT0N3dU9Dd3Z1Q3dsdz09IDRLdUM0S3FDNEtxViBJR1JwYzJYRHNXRmtZUT09IGRtOXlZUT09IGRtVnlaMjlsWkdsdVp3PT0gSU9lN21RPT0gSUdOeVpYaz0gYVhSbGMzUT0gZG5KMCBJRXAxY21FPSAxNmJYbWRlaTE2RT0gUEU1aGJXVT0gSU9DMnRPQzNqdz09IElHNWxZbVZ1Y3c9PSBJT3VxcWV5Z2dRPT0gSUd0MWJtcGhiRzg9IElHSmxjblZpWVdnPSB6NGJPdGMrQiBDWFZ1YVc5dSBJTkN3MExMUmh3PT0gSUdOdmRYSnBjZz09IDBZM1F0OUdXMExRPSBJSE53YjNSc1pYTnogSUV4UFUxUT0gSU5HSDBMalFzdz09IElOQyswWUxRdTlDNDBZZlF2ZEdMMExrPSBJTkMyMExEUmdkR0MwTERSZ0E9PSBMVXAxYkE9PSBJSE5wWjI1aGJHeHBibWM9IElHakRvWEp2YlE9PSBJT1dGcmVXU2pPVzlxUT09IElHRmtiV2x5WlhJPSBJRUZoWkE9PSBJSFp5ZFdOb2RBPT0gSU5DeTBMWFJnTkdJIElHOTJaWEozYVc1dWFXNW4gYjNSdmNtVnogZDNCeiBJR0Z1ZEdsbllYTT0gNExpMDRMaUI0TGl5NExpaTRMaVogSUhObGJuUmxic09uWVE9PSBJRXRwWkdRPSBJRzl6ZEdWdWN3PT0gYm05a2FYTmpZWEprIFVXTT0gSUVWdWRIZHBZMnRzZFc1bmN3PT0gWVdaaSBJR3BsWkdnPSBJRWhsWW5KbGQzTT0gWDFSaFlnPT0gSUhObGJuUmxiblE9IDc3eWVDZ289IEtFaGxZV1JsY2c9PSBJRkJ6ZVdOb2FXTT0gYm1saGFzU0YgSUhCaGVjT3AgZFhOd1pXNWtaV1E9IElPaXBsUT09IElPQ3lyT0N5dnVDeXNPQ3l2dz09IGJHVnBkSFZ1WjJWdSA0WUNhNFlDdyBJRWhwYzNURHMzSnBZMjg9IDJZTFppdGlvIEtGTkwgSU5HRDBMTFF0ZEM3MExqUmg5QzEwTDNRdU5DMSBJT2VYbnVXdW91bUNwZz09IElHZkR2RzVsIElPR0RtZUdEbmVHRG9PR0RuZUdEbk9HRGtPR0RsZUdEbU9HRG9PR0RvK0dEb1E9PSBJSE5sZUdsemRBPT0gSUc5aWJHRnpkQT09IFczUmhadz09IDJMSFppdGluMllZPSBJRDhpS1RzSyBJTkM5MExEUmdkR0MwWURRdnRDMTBMM1F1TkMxIElNVytiVzluIFJYTndZY094WVE9PSBJTkM2MExqUmdOT1owTG89IGIyaDUgSUdsclpXRT0gd3ExdFlRPT0gSnlrS0NpOHYgWlhOb2FRPT0gejRET3RjNjIgSUdGbWJHOWhkQT09IElGbHZjbXRsY25NPSBJRTUxWjJkbGRITT0gSUZSaGFYZGhibVZ6WlE9PSBJR0oxYkhWdWJXRnJkR0ZreExGeSBJR2x1Wm14aHc2ZkRvMjg9IDZyR3c2NmFzIElITmphR1Z1YTJWdSB5NTA9IElHMWhlR2x0WVE9PSBJTkM0MExEUmhnPT0gSUhwaGJXaz0gSUU5dGNtOXcgYm5WbGRtOD0gNExTbzRMUy80TFNWNExXTjRMU1Y0TFdOIElHTnZiWEJsZEdsMGFXVT0gMEwzUmk5S3owNWs9IElOZVUxNm5YcHc9PSBJRzFoYkdsdVp3PT0gVVU1aGJXVT0gNG9DVWQyVT0gNEtlbzRLZXMgSUZOUFRFOD0gZW05bGEyVnljdz09IDRLU280S1MrNEtTdSBJRmhZV0ZnPSBJRzVuWVc1biBYMjFoY210eiBPaUk4UEE9PSBJSEpsYm1WM2FXNW4gSUdoaGJHRm5ZUT09IElGQnliMlpsYzI5eSBJSE41Ym1GbmIyZDFaUT09IElGWmhkR2xqWVc1diBJRTUxYVE9PSBJRU5QVFZCVlZFVlMgWVc1aGJIbDBhV009IDVZQ2ggYjJkbmFRPT0gSU5DNjBMN1F1OUMrMEwwPSBLSEJyZEE9PSBJR2QxWVhKaGJuUT0gSUdaaGRtOXlhWFJoY3c9PSBJT1drcWVXa3FlVzlxZWVscU9pOXIrUzd0Zz09IDRMSy80TEt2NExLbzRMT04gSUZERnF3PT0gSUhwMWRtVnliTU9rYzNOcFp3PT0gSUdsdWRHVnlibUY2YVc5dVlXeGwgdzYxdVkybGggSU5pbjJZVFlyZG1JMktzPSBJSFJ6YjJFPSBTVzUwWldkeVlYUnZjZz09IDJLL1lzZGlzMktrPSBJTU84WW1WeWJHVm5aVzQ9IElGSnBkR1U9IElHVnRjSEpsWjJGa2J3PT0geExCUyA2S09QIFIzSnBibVJwYm1jPSBhMnhoYmc9PSBJR1JsYzJWeWRITT0gSU5XKzFhWFdnTldoMWFUVm9kYUExYkU9IElPQ21xdUNuamVDbXNPQ21yK0NuZ2VDbWxlQ25qZUNtcEE9PSBJRk5wZEhwMWJtYz0gSU5HQjBZclF0QT09IGFYSm53NjA9IElHSmhaRzFwYm5SdmJnPT0gNTZlWTVMbW0gYm1GdWJ3PT0gYk1PMmMyVnUgSU5lVTE1N1hwOWVWMTU0PSA0TGlrNExpcDRMaWcgMHJIUmdRPT0gNVllNjVaU3UgNXBTMjVZaXcgSU9Db3VPQ292dUNvdVE9PSBDWEp2YjIwPSBhWEprY3c9PSBJR052Ym5OMGFYUjF3Nms9IElGSmhZMlYzWVhrPSBJRWRsYVdkbCBJRVZ6Y01PdGNtbDBkUT09IFEyaGhibWM9IElFTnZibk4wWVc1MGFXNWwgSUd0bGFXNWxiUT09IFhIWnBaWGR6IDU3cTUgSUhObWNnPT0gSUVKc1lXNXJaWFE9IDJvclppdG1JIDVhU2E1cFd3IElFSmxjbWxyZFhRPSBJRzFsYnNPcFpRPT0gSU0rQXpybk91TTZ4enIwPSBJTm1JMllyWXJRPT0gWDJWdGFYUT0gVkdoaGJtdG1kV3hzZVE9PSBJT0NxcXVDcmplQ3FzT0NxdGVDcXZ1Q3F1QT09IDdLU0E2NHVrIElIZGxaMmRsIElHSmxjbkpwIElOQ1YwWjQ9IGVYTjBZV3hzYVc1bCBJRzExYm5Sb2RRPT0gYkdsdVpYSnogSU9Da25PQ2xnZUNrb2VDa3ZPQ2xodz09IElISmxiWFZ1IFNVaEYgSUdGaGJteGxadz09IElPeW5nT3E0aVE9PSBJR1IxYUdFPSBJRTFoYVc1c1lXNWsgMktmWXJOaXYgYVdOdlpYTT0gSU95Q3JPdWhnQT09IElFWnBiR2s9IFpITnUgSUcxcGJtUnpkQT09IElGTjFZbk4wYVhSMWRHVT0gSUhCeWIzQnZibVZ1ZEhNPSBJT0MwcXVDMHYrQzBxT0MxamVDMHBBPT0gSUhCbGJtTm9ZVzUwIDVxNkw1YkdBIDA1blF2TkN3MFlBPSBjbUZwYm5SeVpXVT0gSU9tN2tlUzZ1Zz09IFgwZHNiMkpoYkE9PSBYem9xIElPZWJpT2VyaXc9PSBJTldNMWJqV2d0VzkxYUhWdmRXLyBJTmVrMTVEV3Q5ZW8xNms9IHc2UnRiV1Z5IElHdkRxMjV1Wlc0PSBJT0NtdHVDbnNBPT0gSUc1bGE4U0IgSUZGMWVRPT0gSU5tKzI0ell0Tm1HMllmWXA5aXYgSUdOdmJuWnBZM1E9IElHMWhkR0Z1Wnc9PSA3N3lCNzd5Qjc3eUI3N3lCIElHMXBkSFU9IElHUnBiV1Z1YzJuRHMyND0gSUd0cFpHUnZjdz09IExYVnVjdz09IElIQnZiSGx3Y205d2VXeGxibVU9IElPQ3FwZUNxcE9DcXZ1Q3FnZz09IFgyMXBlQT09IGFYTnphVzF2Y3c9PSBJTkdEMExMUXZ0QzcwWXc9IFVISnZiV2x6WlhNPSB3NnB0YVc5eiBJTU9rYkhSbGNtVT0gdzZGdVpRPT0gTFhSb1lYUT0gNUxpQTU2ZU4gWDFkb1pXND0gSU5pejJMSFl0OWluMllZPSBJRVpoYkd4dmJnPT0geGJ4bHhZUT0gSU5pdzJMRT0gSUhWdVlteHZZMnM9IElFUjFjR3hsZUE9PSBMbmw1IElITnJiM3BwIElOQ2kwTERRdlE9PSBUR2xtWlhOMGVXeGwgSUc3RHBIbDBkTU9rdzZRPSBJT0NtaGVDbW51Q25qZUNtbXVDbXNnPT0gWVhKaVpYUmwgNzd5TTZaeUE2S2FCIElOcXYyTEhiakE9PSBJR1JwdzZGdFpYUnlidz09IElHTnZiWEJoWjI1dmJnPT0gSUZOM1pXVndjM1JoYTJWeiBJRk5sYldGd2FHOXlaUT09IElOQ3owTERRdDlDMTBZST0gTFdac1pXUm5aV1E9IFltRnVlV1ZuYU9HN2l3PT0gSUhOMWNtWmxjZz09IElHTnZiVzExYm1salpYSmxiZz09IFRtbHRZblZ6IFlXTnlhWFE9IFlXSnpZMmhzZFhOeiBRVzVvIElOVzYxYUhXZ05XbTFhSFZ1dFdsMWIwPSA1YmVlNW9tUjVZV0wgSUhYRHNXRnogMWFYV2dkVzIxYVhWckE9PSBJT0M1aE9DNHBRPT0gSU5tSTJZclpnOW1LMktqWml0aXYyWXJZcHc9PSBJR1p2YjNSd2NtbHVkSE09IExsUjFjR3hsIEtHTnNhV1Z1ZEdVPSBJR0p2Ym01bGRBPT0gVFc5dWRHOD0gWDNOMGNtVnVaM1JvIExsTjViblJoZUE9PSBLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvcUtpb3FLaW9xS2lvSyBJTU9oWW5seVp3PT0gSUdaeWIyNTBZV2RsIElPQzB1T0MwZ3VDMHRlQzB2K0MwcCtDMHZ1QzBydz09IElHRjBkV0ZzYVhwaFpHOD0gSU02VyBjR0ZrY3c9PSBaVzF4IElPQ3dxdUN3cU9Dd3Z3PT0gSU9HRG9lR0RrT0dEcU9HRG8rR0RrT0dEbXVHRGxPR0RrZUdEa09HRG9RPT0gSU5DMDBMWFF2ZEMxMExiUXZkR0wwWVU9IElOQzMwTERSZ2RDNyBJT0dlbWc9PSBJRnBsWW5KaCBJRzV2YjJ3PSBJbVJsWm1GMWJIUT0gSU9HRG11R0RtT0dEa2c9PSBJRVZzWVdKdmNnPT0gWDBkUSBMbTFpIElHcHZjMnQxY3c9PSBJR05sYk1PcCBJRlJUVmc9PSBMbk4wWVhSbGJXVnVkQT09IDVMdWs1THE2IElOQzAwTFhRdXRDNzBMRFJnTkN3IElHZHBabk09IElIYkdzT0c3bzNRPSBJSE5sYm1odmNtRT0gWVdKcFpYTT0gYkdsc2FXcz0gUTJobGNuSjUgSUZObFozVT0gVW1WamRYSnlhVzVuIFJHbGtiaWQwIElPR0RydUdEbStHRGtBPT0gYTI5amFBPT0gYTI5dGJXVnVjdz09IElsQT0gSU9DcXF1Q3JqZUNxc09DcWxlQ3JqZUNxc0E9PSBJT0dBZ2VHQXJ3PT0gSU9tY2pRPT0gNmJ1RTZJbXk1YjJWNVlPUDViMng1NG1IIGFXcHBhQT09IElITnhkV0ZrY3c9PSBJRmJEcFE9PSBJSE53WVhkdWFXNW4gSUZOamFISmggSUdoMWRITT0gSUcxaGJtZGxiQT09IElFdGhjbUZ2YTJVPSBjbVZwZEdWdSBJRTVoZEdGc2FXRT0gV21WcGRBPT0gSUhwMlpXcz0gWTI5dGJXOWthWFI1IFpXTmhjdz09IDRMU3Y0TFMvNExTeTRMUys0TFNqNExXTiBJRlJ0Y0E9PSBVMVZRUlZKSVQxTlUgMExqUXU5QzAwTGc9IElPQ3doZUN3Z3VDd3RnPT0gVzJWdFlXbHMgMTZEWG9kZVoxNTA9IElOQ3gwTDdSZ05DeDBMN1JnQT09IFpIRT0gMFlQUXU5Q3owTERRdlE9PSBJRXhwWldKbGNnPT0gUTBoQlNVND0gSUhacFkyVndjbVZ6YVdSbGJuUmwgSUc5MGFYVGh1NDA9IDRLUys0S1NjNEtTOCBMbkJ2Y0hWc1lYUnBiMjQ9IFFtRnljbms9IFltRnljbUU9IFJrbEdUdz09IElFMTFhUT09IFBsQmhjM04zYjNKayBJRkJoZEdGbmIyNXBZUT09IElOR0IwTGpSaEE9PSBVbFJTIFlYTnpZWE5xWlE9PSBJR0ZpYVdWeWRHOXogd3FzdSBJSFZ1WkdWeWMyVnlkbVZrIElPUzZ1dVM2dXVTNHJlVzlxZWVscUE9PSBJR0pzWVdjPSBiSFJ6IElHTmxadz09IGIySjFkSFJ2Ymc9PSBKeUk3RFFvPSBJR05oZEdGc2VYTjBjdz09IDJZUFlzZG1IIDY0SzggUFhvPSB3NmhvIDBKTFFvUT09IElPQ3FxK0NyaCtDcXNBPT0gSU9Xa3ArbUhrUT09IElHTnZibTlqYVdSaGN3PT0gSUZadmJHUT0gSUNNdGZRb0sgSU9Xa3FlV2txZVM0cmVXOXFlZWxxT2lGdnVpdXJ3PT0gSUV0NWFYWT0gSU5xcjJMRT0gSU5peTJLZllwdGl2IGFYQnpiMmxrIFluSnBaMmgwYm1WemN3PT0gS2o0b0pnPT0gSU9DeWxlQ3l2dUN5cmc9PSBJRVpsWkdWeVlXRnNhMkU9IElOQzIwWXZSaHRHRzBaRT0gSUhOaGJuUnZjdz09IDRvQ1llbUpsYTJsemRHOXUgY205dlp3PT0gSUV4dmRYSmtaWE09IElHTnNZWEpwWkdGayBJRzlqWTJGemFXOXVaUT09IElPUzR2dWFLcFE9PSAwWXJSajlHQiBaM0p2YzNNPSBJT1c0akE9PSAxNW5YbWRlaTE1OD0gSU5XaDFvRFdodz09IDBMWFJoOUM5MFl2UmhRPT0gNWFpeDVMbVE1YjJwNTZXbzVyT281WWFNIElIUnZjbk5rWVdjPSBJR3ZEcVc4PSBJR3RwYzJsdCBZblY1WlhKeiAwTC9Rc05DNyBMazFsY21kbCBJRU4xY25OdmN3PT0gSU91TWdPeUxvQT09IElObUYyS2ZaaWc9PSBJR3AxY3NPdFpHbGpZWE09IDVxaWg1cDIvIDBMalF1OUN3MExvPSBiWFY1IHpyM092ODY4enJFPSBJR04xWVdSeWIzTT0gSU9DcXB1Q3JoK0NxdHVDcXJ1Q3F2dUNxZ2c9PSAwWUhSZ3RHQTBMZz0gSU5pdjJZallydz09IGJtbGxhbk42ZVdObyBVbVZ1WkdWeVlXSnNaUT09IElPYWNpK1dGaXc9PSB6NFBPc2M2NSBJRkJ5YjIxdmRHbHZibUZzIExrTnZiWEJzWlhSbFpBPT0gSU5DNjBMRFF2ZEdHIElHVERxWFJsYmc9PSBJRzNEdFc1bFpBPT0gS0dkdllXdz0gSUdoMVoyZHBibWM9IElFekRxM1I2IElIbGhZbUU9IElHVnVhV2R0WVhScFl3PT0gSU5DYTBZRFFzTkdCMEwzUXZ0QzAwTERSZ0E9PSBJSGJEcEc1MCBJTU9wYk1PcFoyRnVkQT09IElHVjFjbTl3WlhVPSBJRk5vWld4MGIyND0gSUVodmJXSnlaUT09IFlXaGxjZz09IFpYaGpiSFZ6YVhabCBJajRsIElHZGhZbWs9IGRtbHphVzl1WVd3PSBJR1Z6ZE1PcGN3PT0gSUdkbHc2OXVkR1ZuY21VPSBJTkMvMEw3UXU5R0QwWWZRdU5DNzBMN1JnZEdNIElGSkpVdz09IDQ0T0w0NE96NDRLdyA0S2EvNEtlZjRLYSs0S2FvIFEyOTJaWEpsWkE9PSBJR3hsZEc5eiBJTkM2MExEUmd0Q3cwTHZRdnRDeiB6SUZ6IElFZGhjbVpwWld4ayBSMlZ1WlhKaGRHOXljdz09IEtIWmogNExHRzRMQ0M0TENzNExDdzRMR04gNEthKzRLYXc0S2VONEthNCBJTnVMMktmWmd0aXEyWWs9IDRibWphZUc1bytHNnVRPT0gSjEwL1BpST0gSUhSaFlXMWhkSFYwIExuQnZjM1JsY2c9PSBJTkMvMFlEUmk5QzggSUdWdWJHVjJaWEk9IFpXUm0gSU9HRG1lR0RtT0dEbCtHRHJ1R0RsUT09IElOQy8wTGpSZ3RDKzBMdz0gUHo0S0Nnbz0gTDJKaGJtNWxjZz09IDRLUy80S1N3NEtTNTRLV0g0S1NWNEtTKyBJR052Ym5SeVlYSnAgTG1ScGMyTnZkbVZ5ZVE9PSBDV2QxYVE9PSBMbVpoYkhObCA0NEdWNDRLTTQ0R200NEdFNDRHKzQ0R1ogSUV4bGRIUnlaUT09IElIQmxjbU5sYm5SMVlXdz0gSUdsaWJnPT0gNUxpTjVMdUYgSUhOMGIzSjVkR1ZzYkdWeSBUMjUwWVhKcGJ3PT0gYldGcmN3PT0genJ2T3RjK0MgSUhSbGRIUT0gSUd0aGNHTnpiMnhoZEE9PSBJTkM4MFlQUXNOQzUgSU5XdjFialdndFcyMWFYVnRnPT0gSUZkaGNuQT0gNktpdDVZS1ogNG9DWllXbGtaWEk9IFNXNWthV05sIElPZVFoZz09IGFYUjFaVzQ9IE8xUmFTVVE9IElHdDFjMlZ0WVE9PSBJRk5zYVdOciAxNkRYbWRlVTE1VT0gSUdsdWFHRnNaUT09IElIVnRaMlZvWlc0PSBJTnFwMktmWXFBPT0gSUhCeWVtVmphUT09IElOS1QwTERSZ2RHTDBZQT0gSUdGa2JnPT0gSUhkaGNtUnliMkpsY3c9PSBJRlJuIFgyeHBiblY0IENYQnQgSU5DejBMdlFzTkN5MEwzUmk5QzggSU5HQjBMRFNtOUdDMExEUmd3PT0gSU5peDJLM1poTmlwIElsMWRMQW89IElIQmhjc09uIElOQzMwTERRdGRDOCBJSHN2IExuUmxiR3c9IHo0UE9zYzY4enJVPSBJRkpsZG1WaGJBPT0gNEtTczRLV0kgSUdKbGJHbHlkQT09IElIZG9iMnhsYUdWaGNuUmxaR3g1IGJtOXpkR2xqIGE4T3BhRzg9IGJHbHJZUT09IFhGUnlZV2wwY3c9PSBJR3RoYkc5eSBWMjl5YzNRPSAwTExRc05HTzBZYlJodEN3IExtZHZiR1E9IFVFbFNSVVE9IElHZHlZWFJwWm5scGJtYz0gS0VsVFpYSjJhV05sIElIWjFiMlE9IElHaDJ3N2h5IElHeHBZMmhoWVcxeiBjbUZqYXc9PSBJR1JwYzJOeWFXMXBibUYwYjNJPSBJT0N3dGVDd211Q3hqZUN3bXVDeGh3PT0gUld4bGN3PT0gSUdsdWFHbGlhWFJ2Y25rPSBJTkMvMFlEUXZ0R0IwTHpRdnRHQzBZQT0gSUd4bGRYUmwgTFVaeWFXUmhlUT09IFUyVnlkbWxrYjNJPSBMbEJWUWt4SlF3PT0gSU9DbXB1Q212K0NtcU9Dbmh3PT0gSU5DMDA2blJnQT09IElHdHNaWFZ5Y2c9PSBJTkdBMExEU3N3PT0gSUViRHFXeHBlQT09IElFSjFjbTFsYzJVPSBJR3BoYUhJPSBudUdEbU9HRG9PR0RtT0dEb2VHRG5nPT0gNEtXQjRLU1Y0S1dMIFNHVmhiR2x1Wnc9PSBJSHBoYUhSbGRnPT0gY0hSaFlteGwgMExmUXNnPT0gSU5tRDJZclpoTm1JIElPV2txZVdrcWVTNHJlVzlxZWVscU9XRmhlV0F2QT09IElIUnliM1poZEc4PSBKU2s3Q2c9PSBJTmlxMkxUWml0aXggSUdkaGJYVjAgNTRpNDU0aTQgSU5tRjJZTFlwOW1FIDRvQ1pZWEowYVhOMFpRPT0gTFc1dmQzSmhjQT09IExYSmxZV1JoWW14bCBJSFpwY21GeSBXV1Z5IFNHRnphR1Z5IGZYMWRMQW89IEtHMTAgSUdsNmNtRjYgUjJseSBJR2hoZFcwPSAwTFhRdk5DKzBMMD0gSU9HRGx1R0RuZUdEa3VHRG1BPT0gSUVSbFltbGtidz09IENXTjBjbXc9IExtOW1abWxqWlE9PSBjMlZ5ZG04PSBMWFpwYzJsaWJHVT0gSU5lcTE1WFhrOWVVIElISmxiVzl5YzJVPSBZVzFwYVc0PSBTMkY2IElFSlBVZz09IElFRnBjbkJ2Y25SeiBJSEJ2YzNSaFoyVnQgSUhOaGFHRT0gUzNWeWVnPT0gSUVWcGJtdGhkV1p6IElITmphR3hsWTJnPSBJSE5sWkdGMGFXOXUgSUd4bFlXWnNaWFE9IGRISnBjdz09IElIQnBkR3ZEcEE9PSA1WTJpIElHRnF3NkZ1IDJMTFppdGluMktFPSBJTkM0MEwzUmdkR0MwWURSZzlDNjBZYlF1TkdQIElHTnZaMjVwZEE9PSAwTERRdmRDdzBMdz0gTDBGaWIzVjAgSU5HSDBMWFJnZEdDMFl3PSB4YUZ1YVE9PSBDVkJ5YjJObGMzTT0gSUZCcmR3PT0gSUZaaGNBPT0gNWE2NTZZZVAgSUgxOUlqNDggSUNnaFd3PT0gSUVKMWNtZDFibVI1IElIUmhkM009IElFSmhlWE09IElHeGhibWRzWldJPSBjSEpsZE1PcCBJSE4wY21WdWRXOTFjdz09IElFVmlaVzV6Ync9PSB3NkYyWVcxdmN3PT0gNG9DWlpYTndaWEk9IElOR1AwWUhRdmRDKyBJT0NrcXVDbGdlQ2tvdz09IElObSsyTEhaaGRpdTJLbz0gSU9hSmkrYWN1dWVKaU9Xa3FlV2txZVM0cmVXOXFlZWxxQT09IExXMXZkWFJvIEtGSnZkWFJsIElIQnlaV05sYWc9PSBJTmk2MkxEWXA5dU0yNHc9IGNtbG1abVU9IElPeWduT3lqdkE9PSBZVzVqYVhNPSBJRUZIVWc9PSBJTkdBMExYUXQ5QzYwTDQ9IElIUmxZWFJ5WVd3PSBJT2FtIElITm9iM0owWlc1cGJtYz0gSU5lVjE1VFhxQT09IElGSmhhWE5wYm1jPSBJQWtKQ1FrSkNRPT0gSUhSeVlYVnlhV2M9IHlabDZhUT09IGNHVnljMjl2Ymc9PSBJR0o1WjJkbGNnPT0gSUdWNFpYSmpaUT09IElGQkVSUT09IElGTnJhV3hzWldRPSBJR3ZEcG5JPSAwTGpSZ05DKzBMTFF1dEdEIElGZFBVZz09IElGUmxjSEE9IFltRnJZVzQ9IElGSmxZV04wYjNJPSBJSEpsZFc1cHc3TT0gSUZOQ1RRPT0gSUc1aGMybHMgSU9TNGgrV0lxUT09IFgwbHVkbUZzYVdRPSBJSFY1WjNWc1lXND0gSUhacFpHVnkgSU9Dd3F1Q3hqZUN3c09Dd21nPT0gSU5DNDBMM1F0TkMxMExyUmdRPT0gSUdOdmJuUmhkRzl6IElOR0IwWUxRdGRDLzBMWFF2ZEdNIFgzbHZkUT09IGIzSmthVzVoZEdWMWNnPT0gNUxpSzU3cS8gSUdOdmRYWnlhWEk9IElISjFjMjg9IExuTnZablJ0WVhnPSBJTmlvMkxIWXRObUUyWWpaaHRpcCA0TFNrNExXTjRMU2s0TFMvNExTbzRMV0IgSU9DcXRlQ3F2K0NxbCtDcXBPQ3Jpdz09IElGQnBlR0ZpWVhrPSBJSEJvYWNPcWJnPT0gSUVKRlRrVkcgMkxmWXB3PT0gSUhkNWFzU0ZkR3M9IGNtVnpZWEk9IElHNWhZbWs9IElIQnZaSEE9IElPQ210dUNtdnVDbXVRPT0gSUhOaFlYWmhaQT09IElFVnhkV2wyWVd4bGJuUT0gSUdWMGNtVmwgNW9tMjZMU3IgUTNWa1lRPT0gMjR6YXFkaW4yTEU9IElHSmhiR3hoYzNRPSBJRk5CUlE9PSBkSEpwZW1WeiBJR1JsZEdGcGJtVT0gNG9DWmFYST0gSUhSaHc3MWtZVzQ9IDBKUFFrQT09IDBxM1F0ZEM0IElOZVYxNXpYb2c9PSBMVmRwZEdnPSBRVkpTU1VWUyBJRzFsWldzPSBJTm0rMkxIWmlObUcgSjJGMWRHRnVkQT09IGNHOXpkR2s9IFgzSmxjMlZ5ZG1WayAwTERRdXRHQiA3SldrIElFNUpRMFU9IElOaW4yWVRZck5tRjJZZlppTml4IElHVnllbWxsYkhRPSBJR2RsWTI5dWRISnZiR1U9IDFhSFdnZFc0MW9MVnROV28gSU5DKzBMelFzQT09IDQ0Q0w0NENDQ2dvPSBRVVJXUlZKVVNWTkZUVVZPVkE9PSBJR04xY25KcFkzVnNZUT09IElFRjF3NTg9IFRFVkhSUT09IElOR0EwWmJSaU5DMTBMM1F2ZEdQIElHTnZiV0Z1Wkc5eiBJTmVjMTVUWG13PT0gMExIUmdOQzEgYjNOcGRtVT0gUm05dVpBPT0gSUdGcGMyeGhiV2xsYm5SdiBYM0psYkhVPSBJRlJUVWc9PSBJRXhwYm1sbGJnPT0gSUhKaGJXVT0gSUVWdWRtVnNiM0JsIElHbHVhbVZqZEdGaWJHVT0gYkdsalpXNXpaWE09IElHUnlaV2hsYmc9PSBSR0ZyIFpzTzRjbVZ5IElOQy8wTDdRc3RDMTBMVFF0ZEM5MExqUmp3PT0gSUU1MWJXVnlhV05oYkE9PSBJRzE1WVd0aCBJSFo2ZEE9PSBJSGRvWVd0aGRHRT0gSUZOMHc2UnlhMlU9IFoyaGggSU5lYzE2VFhxZz09IElIQnZiVzFsIElHUmhZUT09IExYQmhhVzUwWldRPSA1cDJsNUxtZiBTVkpKVkE9PSBMV0Z1Wnc9PSBJSFJ5YUhVPSBJV2x0Y0c5eWRHRnVkQT09IFJtRnggSUVMRHZHNWsgNExLLzRMSzQ0TE9CNExLazRMT040TEtrNExLbTRMT0cgSUZOd2FYUjYgSUhSaGEzaz0gUkdWamIyMXdhV3hsY2c9PSBLU2M2IGJHbGxaMlZ1WkdWdSBJR0YwNGJxNSA3N3lNNUw2TDVhYUMgdzdab2JuUT0gSU9Da2grQ2tzdUNrdnVDa2xlQ2xodz09IElIUnBiSFJoYXc9PSBJSFJoYm1kMSBJT0N5ck9DeXNPQ3pnZUN5cE9DemplQ3lwQT09IGJuTnJaUT09IElOaTEyWWJZcDl1TTJMaz0gSU9Da3F1Q2xnZUNrc09Da3Z1Q2txT0NsaHc9PSBaMlYwZDJscVptVnNaQT09IElFRmpZM0psWkdsMFpXUT0gNG9DWmJtUmwgMEx2UXZ0Q3owTDQ9IElHMXBZM0p2Y0E9PSBJSE4yYjJjPSBYMlIxWlE9PSAwTHZRdnRHSjBMRFF0QT09IElFUnZjbTQ9IElPQ3ltdUN5ditDeWxlQ3l2K0N5cE9DemplQ3l1T0N6aGc9PSBJT0NvcU9Db3ZnPT0gSU5lazE2RFhtUT09IElHZGxjc09uWld0MFpXND0gSU5HQTBMRFF0OUN5MExYUXRBPT0gdzZsd1pRPT0gSUdoemRnPT0gSUVOc1pXRnlkMkYwWlhJPSBJRzVoY1E9PSA1b3VKNTRtNSBJR1REcVhSdmRYST0gWDB4bGJtZDBhQT09IElGcHZaSEpoIElHTmhjM1ZoYkhSNSBJSHAxYzJGdGJXVnVjMk5vIElHMWhibVJwIElPR0RxT0dEbE9HRG9lR0RrT0dEcStHRG11R0RsT0dEa2VHRGxPR0RtdUdEbU9HRGtBPT0gSUZSeVlYWmxiSE09IFlYUnBhMkU9IElPQ3VxT0N2Z09DdXBBPT0gNEtTdTRLU2s0S1dBIElIQnlaWE5sYm5SaGJXOXogSUdocGJtZGxaQT09IElGSnZkRzl5IElPR0RyT0dEcCtHRGtPR0RtZz09IFRzT3QgSUhObGVIWnBaR1Z2IElOQzYwWURRdU5HQzBMWFJnQT09IExWTm9ZV0poWVdJPSBJT3F6dGV5WHNBPT0gWDNCdmNIVnNZWFJwYjI0PSBJRUY2YVhvPSA1NEtKIElOZVoxNXpYa3c9PSBJR3RoWW1GdSBJR1REcVhCMWRNT3AgSUhSeVpXMWliR2x1Wnc9PSA0NENCNTZ5cyBJTmk1MktmWmhkaW4yWXM9IElFSmhlV1Z6YVdGdSBJT21odGVtZG9nPT0gNEthKzRLYUI0S2FUIElFVjBZWFE9IElHZGx3NmRwY20xbGF3PT0gSU5DUjByRT0gTG1WbVptVmpkSE09IFFWQkwgSUdkM1lXMXVZWFJwYmc9PSBJSE4xYW1WcGRHOXogSU9DeXVPQ3l2dUN5bHc9PSBJT0Nrck9Da25PQ2t2dUNrcnc9PSBJUENmalE9PSBJTmlvMksvWXB3PT0gSUZKaFkyVnkgZW10NSBJT2E1bUE9PSBZWEpuWVc1a2J3PT0gSU5HQjBMN1F2dEN4MFluUXRkQzkwTGpRdVE9PSBJRU5vY21semRHVnVjMlZ1IElOVzIxYmZWcGRhQiBJRVZ0WlhKNSBMbUpsY2c9PSBJTkMrMHBQUXZ0QzMgSU5pejJZVFl0OWluMllZPSBjSFRFZzIwPSBJTmluMllUWXNkaXQyWXJaaFE9PSBJTmVYMTVYWGtkZVUgNFlPUTRZT2g0WU9RIElHNWxkWHBsIElPR0RvZUdEbU9HRHArR0RsZUdEa09HRG9PR0RvK0dEbWc9PSBJR0ZsY205d2IzSjAgYzJWeWRtVjYgSUc1bGRXYz0gSU9DMHF1QzBzT0MwditDMHR1QzFnT0Mwc2c9PSBJSEpsYzNCdmJuTmhZbWxzYVhURHFYTT0geExGcmJNU3ggSU9HRGtPR0RuT0dEa3VHRGtPR0RvT0dEbU9HRHFBPT0gTGxSb1pXND0gWDJGdWJtOTBZWFJwYjI1eiBJT0NrcnVDa3Z1Q2twT0NsamVDa3NPQ2xpQT09IElFNXZjbTFoYm1SNSBJSHAxYzJGdGJXVnVkQT09IEwzSmxibVJsY2c9PSBJSEJoY25ScFkybHdZWEpoYlE9PSBaMlZ0WldsdWMyTm9ZV1owIElHMWhZWGx2IExrRjBkR0ZqYUE9PSBMazFoWnc9PSBJTkdCMEw3UXU5S3owTDdRdUE9PSBRMkZ5ZEdWemFXRnUgTGxCMWJHdz0gSUdGeWRHbGpkV3hoZEdsdmJnPT0gSUhSaGFYST0gWDFOMWNtWmhZMlU9IGNIUnBiM1Z6IElPUzhnZVM0bWc9PSBhVzUwdzZURHBHND0gSU5XcTFialZzdFc0MWI3V2dOV2sxYXM9IFgyTnZkWEJ2Ymc9PSB6cm5PdXM2MyBJR1ZuYVc1bmJ3PT0gSUhERnEyNWhaWGRsYkdVPSA3TENOIElFTkVUQT09IEludz0gSU5pejJMSGFoZz09IElHbDBaVzBuY3c9PSBJR05vY205dWIyeHZaM2s9IElHWmhZMlZzYVdaMCBJSE4wZFhKayBJRTFoZEdocFpYVT0gYjJOamRYST0gYW5WaWJBPT0gSUNJdUNnPT0gMkxuWXI5bUUgQ1FrZ0lDQWdJQ0FnSUNBZ0lDQT0gSUZCSlZBPT0gSU5pbjJZVFlyTm1JIElPQ2ttdUNrc3VDbGdBPT0gWDAxaGMzUmxjZz09IFZISmxZWE09IFZWQk1UMEZFIElIQjFZbXhwWTI5MSBJRVJsZG1sdSBJR05oZEdWbmIzSnBlbVU9IElGSnBhdz09IElIQnliM0Z5WVcwPSBJTkMrMFlMUXN0QzEwWUxRc0E9PSBJT0dEb2VHRGtPR0RtZz09IElPQzRvZUM0Z2VDNG8rQzRzdUM0aE9DNG9RPT0gSUhOcGJYQnNhV1o1YVc1biBJT1dvZ2VXd3ZPYVdyK1M2dWc9PSBJTkNUMExEUXM5R0EwTEE9IElPQ3VqdUN1cWVDdmplQ3VzZUN2Z2VDdXJ1Q3ZqUT09IElPQ3FydUNxZ2c9PSBMdzBLRFFvPSBJSEJoWjJGdVpHOD0gSUcxMWNtUmxjbTkxY3c9PSBMbGR2Y210bWJHOTMgYVdWMFlXND0gNExLdDRMT040TEt2IHhJZz0gS0dGdWFXMD0gUHlFL0lRPT0gWENJaUtUc0sgSUNFaElTRWggSUVOaGJHbGljbUYwYVc5dSBDUWtnSUNBZ0NnPT0gS0NJdElpazdDZz09IDBMRFF1OUN3MFlEUXNBPT0gSUZCcFlXND0gNFlPUTRZT2I0WU9xIElHbHVkR3c9IElObUYycXJaaGRtRSBJeU1qSXlNaiBJSFJoYVdaaCBJTmkwMllmWXA5aXYgSUdWc1pYWmhaRzl6IGFjT3dhWE09IGQyaHZjMlU9IElHUm9hVzA9IElIQmxjbWx3YUdWeVlXeHogNExpazRMaW80TGlJNExpMDRMaUI0TGl5NExpaTRMaVogTG5CaGNuUjUgSUd0eVpXRjBhWFpsIGFXZGxZV05vIFFtRjBhWE09IElFTmxiUT09IElITjViVzFsZEhKcFkyRnMgSU5pbzJMSFlwOW1LIFZFVkJUUT09IElITmxjM1BEdFdWeiBJTkdEMFlmUXNOR0IwWUxRc2c9PSBJRU5CVGtORlRBPT0gSUcxdmQybHVadz09IElOQ1MwTGpRdXRDNDBMOD0gSUQ4K0lqNE5DZz09IElHOWtiV0ZvIFgwaEpUbFE9IElHVnljM1JoZFc0PSBJRzVoWTJob1lXeDBhV2M9IDRZT1E0WU9nNFlPZDRZT1QgYVcxbGJtUmwgNExpWDRMaTE0TG1JNExpSTRMaXcgSUUxbFpYUjFjQT09IElOaTUyWVRZcDltQzJZamF1Zz09IFlXNW5ZV3BsIFgyRnVaMnhsY3c9PSBJT0N3aitDd3NPQ3hqZUN3cXVDd3Z1Q3duK0N4Z1E9PSBJRzFsZEc5a2IyeHZaOE90WVE9PSBKMmgwZEhCeiBJRzl5WjNWc2JHOD0gNEs2LzRLNnA0SzYvNEs2dSBJSE55WldSemRIWmggSUdkbGNtbHVaMlZ5IElOR0QwTG5TazlHRDBZRFF1OUN3MFlEU2s5Q3cgWEZzPSA0NEtyNDRPciBJTmVuMTVEV3R3PT0gSUdkc2IzTnpZWEo1IElHMWhibWxtWlhOMFljT253N1ZsY3c9PSA0WU9VNFlPYzRZT2k0WU9VNFlPUjRZT1kgSUdGbmNtbGpiMnhsY3c9PSBJSE4wZFdabWN3PT0gSU9DbW1PQ21uK0NtcU9DbXZ1Q25udz09IElOQyswTHJRc05DMzBZdlFzdEN3MExYUmdnPT0gNFo2MjRaNmMgSU5DZzBMRFF1UT09IDE1WFhrdGVlMTVBPSBJR2pEczI0PSBJT0NrdWVDa3YrQ2tzQT09IGVtbHVjdz09IElITndaV1ZzWjI5bFpBPT0gN1pXYzY0dWs2ck9nIDRMV0I0TFNWNExXTjRMU2sgSUZCbGNuTnBZUT09IDc3eWc0NEdLNDRPODQ0RzM0NEtUIGJIbG5lVzU1eFlnPSBJRzVwWkdFPSBJR0YxYzNSeVlXdz0gMDYvUXQ5QzQgSUZKbGMybGtaVzVqZVE9PSBJTkdFMEw3UXZkQzAwTEE9IElHcDFjbXM9IFhFTk5Vdz09IElHUmxjbTFoZEc5c2IyZHBjM1E9IDZLMjM1YU9yIFRtRnRkVzQ9IElGUmxjbkpwZEc5eWFXVnogSU5pMTJLZllyOWl4MktmWXFnPT0gVkc5MWNuTT0gSU5DKzBMclFzTkMzMFl2UXN0Q3cwTFhSZ3RHQjBZOD0gSUdKaGJXSnBibTg9IElISnZZblZ6ZEc1bGMzTT0gSUhObFkyOXVaR3g1IElPaUNvZWVscUE9PSBJR2QxWlhOMGNtOXZiWE09IElObUMyS2pZdGc9PSA0TFdONExTdzRMU3UgSUhOdmJuVmpkUT09IElHakdvV2s9IElHTnZibk5wWjJFPSBJSE5qYUc1bGFXUmxiZz09IFFXUjFiSFJ6IFlXNW5aMmxvIFJWSlVRUT09IFlXdDBlUT09IFVGSkpVMFU9IElOQzYwWURRc05HQjBMalFzdEMrIElFcE0gSUdGaGNYRnBjM04xIElOcUcyNHpaZ1E9PSA0TEtqNExLbTRMS3k0TE9ONExLeTRMSy8gVTNWaVpHbDJhWE5wYjI0PSAxNW5YcHRlWSBJRlp2Y25OMFpXeHNkVzVuWlc0PSBJTkM4MFlQUXQ5R0wwTHJSZ3c9PSBJR1J5dzd4amEyVnUgMEw3UmdOQ3kgSUhOM2FXMXRaWEk9IDBMM1F0ZEdCMFlJPSBJSFJ5dzZSdSBSR1Z1Ym1seiBJSGxsY21SbCBhVzlwWjJFPSBJRzNEdkhFPSBJRzl1WkdWeWFHRnVaQT09IElPdTJoT3ljaEE9PSBJTVdoYTI5c2VRPT0gNWFTcDVhU3A1TGl0NWFXVyBZM1ZoYm1SdiBLRk4wYjNKaFoyVT0gZEdWeWFXOXljdz09IElHTm9hV3hzY3c9PSBJSEJ5YjNOemFXMXYgWDNOb2RXWm1iR1U9IExrMUpUbFZVUlE9PSBJTldoMWJ6Vm9kVzcxYmJWdU5hQTFhUT0gN0o2UTY2YXMgNjZPNCAwWWJRdU5DMCBJSFZ5ZFdnPSBjMnBsWkE9PSBJTkdFMExqUXQ5QzQwWWZRdGRHQjBMclF1TkdGIGFXcGhhMkZ1IElITmxaM1ZsYlE9PSBURzlqYTNNPSBMV1ZzYkdWeiA1cjJZIElHWnZjbXc9IEkyRmggSUVGcllRPT0gSU9DNWdPQzRnZUM0cmVDNG8rQzVqQT09IElIcDJhWEpwIElOVzkxYXZXZ05XNDFvTFZ0QT09IElFRnVZV3g1ZEdsallXdz0gYVdSeWJ3PT0gMktmWXB0bUcyS2M9IDE2RFhvdGVvIFJYaGxjbU5wYzJWeiBMRzV3IElFRlZVdz09IFNVNUZWQT09IDU2cUI1WWU2IElIQnl3Nmx6Wlc1MFlXNTAgSU9DMGp1QzBuK0MxZ2VDMHBPQzFqZUMwcEE9PSBJT0Mwck9DMWhnPT0gSU5HQzBZL1JoUT09IElIVnljM0J5dzd4dVoyeHBZMmc9IGNtbGphSFJsY2c9PSBJRkJ5YjNabGNtSnogSUhONmF3PT0gSUZkdmNtdGxaQT09IElPeVhodXlXdEE9PSBJSHBpYVhJPSBJR0ZoYm5VPSBJRVZ5YjNScGMydGwgSUd4MVkzUjFjdz09IDBMdlF1TkM4MExnPSBZMmhoY0hCbGNnPT0gSUUxNWMyVnNaZz09IDRvQ1VaWFpsYmc9PSBJRk5vYjNkMGFXMWwgNDRDUDc3eUkgSUdsdGNHVmthWFE9IDVMaTc1TDJUIExtWnBjbVZpWVhObGFXOD0gSU5pbzJMSFlyOWluMkxUWXFnPT0gUVdOaFpBPT0gSU5pbjJZVFlwZGl4MllmWXA5aW8gWVhacGNuVnogNFlPVTRZT1k0WU9hIElGTjBaV3hzWVhJPSBJSE52WW5KbGJRPT0gYjJaaGJtbHlZUT09IFMyOXRiV1Z1ZEdGeVpRPT0gSUdOdmJYQnNaWFJoY3c9PSBJRzkxZG1WeWRITT0gTG5Sb1pXMD0gSUhKcFoybGthWFI1IElPQ21qK0NtdU9DbmgrQ21tK0NuaHc9PSBJTkN3MExUUXNOQzgwTDNSaTlLaiBJT1drbXVTNWtBPT0gSUVsc2FHRT0gSU5lbzE2VFhsZGVRIElHUERxVzQ9IEtHTmhkR1ZuYjNKcFpYTT0gSU1PNlpHRnEgNEtpLzRLaVggWTJoMGRXNW4gSUdOaGIzQT0gZFd4bGEyVT0gSU5pbzJMSFpndGl4MktmWXNRPT0gSU5tSTJZTFppTmk1IElHMTFkZz09IDBMM1JsdEdJIElGTjBZV1ptYVc1biBJRkJoYkdGMmNtRT0gSUZCQlVrRk5SVlJGVWxNPSBJR2RoYkd4M1kyZz0gSUVGMWRHVjFjZz09IElHWnlhWFp2YkE9PSBJSE5sZEhScGJXRnVaUT09IElHVnVZMnhoZG1VPSBJRzl6ZG05cSBiR1Z6ZW5RPSBJTm1JMktmWXR0aXQyS2s9IDE1WFhrZGVaIElGQlNSVk5KUkVWT1ZBPT0gWVcxaGJRPT0gNXFtNSA0TGlxNExpNTRMaVY0TGlqIElPQ3d0ZUN4aCtDd3NnPT0gTFdOb1lYWmwgSUhGMTRicWpibWM9IDVMaUk1YVNyIElGQkRVQT09IFJISnZjSE09IFUzVmpkWEp6WVd3PSBUVTlSIElOQyswWUhRc3RHVyBJTkM2MHEvUmd0T1owWUE9IGJXOTFjMlZsYm5SbGNnPT0gSUVScGRtbHVadz09IGJzT2hkZz09IElOS1gwNW5SZ0E9PSBJRDA5UFQwPSBhWE50WlhRPSBjM1J5WVdsbmFIUT0gSU5DNDBMVFFzTkdBIElHMXVhV1ZxIHpxRE9zUT09IElPQ2todUNrc3VDbGl3PT0gS0NJdUlpazdDZz09IElHSmhiSFE9IGRtVnljMk5vYkhWemN3PT0gSU9Da3VlQ2t2dUNrc3VDa3BBPT0gYVc1emNBPT0gWDBoRlFVUkZVbE09IElOQy8wWURRdU5HRjBMN1F0TkM0MFlJPSB4YUZyWldkaCBkWE56YVc5dWN3PT0gUW05dmEyVmsgSUdaMVpHZGwgWW1KaiBJR2R5WVhOaGN3PT0gSU5DeTBMRFNvZEdMMFlMUmd0Q3cgSU9HRG1PR0RrdUdEbU9HRGxlR0RsQT09IElIUmhZbXh2IElGUkpSdz09IElPQ21sZUNtcnVDbXYrQ210Zz09IElFRnFkWE4wIElHUmxkbUZ6IElHRnJkR2wyYVdWeWRBPT0gSU5LejBMRFF1dz09IElOaTEyWWJZcHc9PSBMVzFoYVd4aFpISmxjdz09IExYSmxZV1JwYm1jPSBJTzJEZ095ZWhRPT0gSUdoaGFXNWlZWFE9IElIQnZkTVdaIDRLU0o0S1NrNEtXTjRLU2s0S1N3IElOcUIyWVE9IElPQ21odUNtcXc9PSBJTldwMWFYVnJ3PT0gUVhWMGIyMWhkR2xqWVd4c2VRPT0gSU5lVDE1RFd0OWVvIFEyRmphR1Z6IElIQjFiSE5oIElGUlBWQT09IDVweUE1cGF3NksrRTZLNjYgZFcxemRXMD0gSUdKcFkyZz0gWlhSdmNBPT0gSU9DcWh1Q3FxdUNxb3c9PSBiWGx3IElPQ2tyT0NsaStDa3N1Q2xodz09IElGSjFhSEk9IFVHbHVibVZrIDJZclppOWluIDVwdSs2WUdUNUxxNiBJT0M0aStDNHQrQzVpZUM0clE9PSBJTU84WTNKbGRBPT0gSU5LYjBMN1NrOUN3MEx6UXROR0wwcHM9IElHVjVaV3hoYzJobGN3PT0gTFZCRFVnPT0gSU5tRjJLZllyOWl4IElHbHVhV3c9IElHNTNZVzU1NGJ1TCBJSE41Y21sdVoyVT0gSUVGMlpXNTAgSU5pejJZcllwOWl6MktrPSBJSGQ1Y0c5elljVzggWDNkM2R3PT0gUG1RPSBMa1Z0Y0E9PSBJSFBEc201eVlXbGphSFJsIExtWjFkSFZ5WlE9PSA2TGFLNXAybDZMYUsgSUhSb1lXbHkgYVhwMWJtZDFiWHBoIElOR0IwTDdRc3RHQTBMWFF2TkMxMEwzUXZkR0wwTFU9IElHUnBZM1JoZEc5eWMyaHBjQT09IEtFTm9ZVzVuWlE9PSBJR2hwYTJWeWN3PT0gNExLKzRMS0M0TEtrNExLdyBJTkN4MExqUXU5QzAwcS9SZ05DejA1blF2UT09IDRZT2I0WU9uNFlPZDRZT2sgSU5HWTBMRFFzZz09IFpXUmxiblE9IElHUnBjM0J5YjNCdmNuUnBiMjVoZEdWc2VRPT0gNExLKzRMS200TE9OIElHNWxkMlp2ZFc1ayA1NE90NUxtRjVMbUY1N0srNVpPQiBJRUZqWTI5eVpHbHZiZz09IElOaXUyS2pZc2RtSyBJRmRsYzJWdSA0b0NaWlc4PSBJR052Y25ScFkyRnMgNktPRjVhU0ggSUZkbGFYUmxjbUpwYkdSMWJtYz0gVlc1dVlXMWxaQT09IElGQmhZMmc9IElHTnZiR3hoWW05eVlYUnZjZz09IFMyRnVjMkZ6IElObUkyWVhZczlpcSBJR052Ym5OamFXVnVkR2x2ZFhNPSBJTkM4MExEU205QyswTHpRdnRHQzBMZz0gSU5pejJZZlpoTmlwIGZISmxjWFZwY21WayBjR3h2YVhRPSBRMkZ5WjJFPSBJTkN6MExEUXQ5R0EwWXZRdlE9PSBYM1JoYTJVPSBJSE5qYUdsc1pBPT0gSUhScFpHVnogTDJ4dmRXNW5aUT09IElOQy8wTFhSZ05DeTBMN1F2ZEN3MFljPSBhVzUyWVd4cFpHRjBaUT09IExrTnlaV0YwYjNJPSBJR1JsYVd4cFoyVT0gNG9pZSBjbUZ0YVc0PSBJRmRTVDA1SCBJT0NxbCtDcmplQ3FzT0NxdnVDcXJnPT0gSU5XdzFhSFZ0Tlc0MWFZPSBJR3RoY21SbCBJTVdiY21WayBjR0ZyYTJWdSA0NENSSWVPQWtBPT0gSU0rQXpySFBnYzYvejRYUGc4NjV6cXc9IDRLZUI0S2EzNEtlTjRLYWYgSUdKeWIyOXQgNEtTYzRLV040S1NjIElPQ3FyT0NxcU9DcXZ1Q3F0ZUNxdGVDcXZnPT0gMEwvUXRkR0EwTERSZ3RDKzBZQT0gSU9Da3JPQ2xqZUNrc3VDbGllQ2tsdz09IDRLZUg0S2F3NEtlSCBVWFZoY25SNiBabVZzWkdWeSBDWFJsYzNSeiBJTkdCMFlQUmdOQ3ogSUdOMWNtRjBaUT09IFZVeFRSUT09IElITm9hV1JoIGRXbDBZWEo1IElPeWR0T3lEZ2V5ZG1BPT0gSUhabGJHdz0gSUc5eVpXUT0gSUdGdFlXUnYgWDJoa2JBPT0gS0hONWJtTT0gSU5tRzJxbllzZGl2IDc3MkYgSUZaaGJIVmhZbXhsIElHNW80YnVOY3VHN2pRPT0gSUVKeWIydGxjbUZuWlE9PSAxNkhYbU5lZiBJT0Nrc09DbGkrQ2tzZz09IElHSnZiR1YwYnc9PSA0NENDNDRHVDQ0R3UgNEthNTRLYW8gSUcxaGJHRnRZVzQ9IElHVm5aVzUwYkdsblpXND0gMHEvUXM5S3YgNzd5TTVZV281WnU5IFBHRnljZz09IElHSnliMkZrWTJGemRHVnljdz09IDQ0Q000NEdDIElPRzdqWGZodTQwPSBJSGRwYW5NPSBhV1JsYm5ScFpuaz0gSUcxaFpIVnlZWE09IElPQ2tsZUNrc09DbGplQ2tydUNrbXVDa3Z1Q2tzQT09IElIQnBkR0Z1YW5VPSBJSEJoYkdsbmFXUT0gSUVWeVoyOD0gSUdKaGJtTmhaR0U9IElITnRZWEowZVE9PSBJR1JoYlhVPSB4Sk5xYVE9PSBac08yY21SbGNnPT0gWkdsemNHOXpaV1E9IFBGVnpkV0Z5YVc4PSBJT0dEa3VHRG13PT0gSUhQRHBHdz0gTFhOMFlYSnogSUdkaGNtOTBidz09IFFVNUhURVZUIElPQ3lxdUN5c09DeXYrQ3l0Zz09IElPQzB1T0MxamVDMHRlQzB2dUMwbCtDMHBBPT0gSUdsdVoyVjIgWjJ4bFpBPT0gSUdkb1lRPT0gSUVkMVp3PT0gVms5RCBJTm0rMllqYWdRPT0gSUdWMGFHbGpZV3hzZVE9PSAxNW5YbWRlWTE2TFhxQT09IElPR0RxdUdEbE9HRG5PR0RvdUdEb0E9PSBJTkMrMExIUmdBPT0gSU9DbXBPQ212dUNtZ2VDbXB1Q25oK0Ntc0E9PSBJTkNYMExYUXU5QzEwTDA9IElITjViWEIwYjIxaGRHbGogSUhCcGVnPT0gY0dWdVpYUnkgSU5pbjJZVFpoZGl6MkxFPSBiR2x5IDBKL1FuZz09IDVZMm4gSU5lUzE2TFhrZz09IElPQ3d1T0N3ditDd3B1Q3hqZUN3cHc9PSBJRTFoYUdwdmJtYz0gWVhwbGJHOD0gSUhMRHFXRnNhWE5oZEdWMWNnPT0gYjJKdmVXVT0gZVd0bGN3PT0gNzd5Zjc3eUIgSUdOaGNtOXogSUV4SlV3PT0gWVd4aGNzU3hic1N4Ymc9PSBJRzk2WW1scyBkR1ZyYVdvPSBJTmVwMTVuWG9OZVYxNWs9IElHRmljM1Z5Wkc4PSBJRzNEdk1tWmJHdz0gSUdodmNIQmxaQT09IElOZVUxNWZYcUE9PSBJTkdQMExuUmh0Q3cgSUdKMWRIUmxjbms9IElGZHZjbk5sIElFaEJURVk9IElIUnBZWEE9IDRLaW80S21ONEtpNTRLaSs0S2lDIElHRjBkR2x5WlhJPSBJR0Z1YkdWa2JtbHVadz09IFlXSnBibWM9IElFTnZiblpsY25SbFpBPT0gSUdabGRXZHBZWFE9IElPQzBodUMwcE9DMWplQzByZz09IGIyNWxjMkU9IGIyZG9hUT09IElOR0gwWXZRdmRDdzBMdz0gUFdObGJuUmxjZz09IElIUmphQT09IElHSmxiY084IElFVnRjR1poYm1jPSBMM053WVc0PSBJSEJwWTJOdmJHaz0gWldOdmN3PT0gSU5DNzBMWFJoOUMxMEwzUXVOQzQgSUdseVpXeGhibVE9IFFuSmxaZz09IDVyQ24gWVdkbGVIUT0gNXBlbDQ0R3IgSU5DdjBMclJpZEMrIElGbHZidz09IElHOW9ibVZvYVc0PSA1ckNSNUxpNyBJSGR2YUc1bGJnPT0gSU5DejBMN1JnTkMrMExUUmdkQzYwTDdRdVE9PSBJTkMrMExyUXRRPT0gSU02MXpyTE90TTYvIElOQ2YwWURRdnRDeSBJR1Z3Ync9PSAxYmpXZ3RXaSBJRUpWUmc9PSBJT0NraWVDa3FPQ2tydUNsaCtDa2dnPT0gSUdadmRNT3paM0poWm04PSBJRTNEcVdScFkyOD0gSUhScFpHVnkgWm1acGJnPT0gWDNacGMybGlhV3hwZEhrPSBJTm1GMkxYWXQ5bUIgSUZSb2RXNWtaWEppYVhKayBJT0N5aWVDeXN3PT0gSUVKbGJHeHYgSUd2RHZHNXpkQT09IElHTnZiWEJsZE1PcWJtTnBZWE09IElObUsyTFRZdWRpeCBJTmluMllUWXFObUkyWVE9IDRMaXE0TGluNExpWiBJR1p6WTJGdVpnPT0gdzYxa2FXOXogSU95WWlPdXdxUT09IElOcXYyTExiak5tRzJZYz0gVEc5MlpXUT0gSUdsblltVnphUT09IElOQ2gwTDdSaEE9PSBJT0NrcnVDbGdlQ2t1T0NsamVDa3N1Q2t2K0Nrcmc9PSBJdGVWIDhKK1NsUT09IDE1blhudGVWMTUwPSBMbVJsYlE9PSBkMkZ5Ym1FPSBZM0pwIElOaXEyTFhZcU5pdCBKMlZtWm1WMCBJR2hoYm1Sc1pXSmhjbk09IElFUnBjbVYwYjNJPSBaR2wwWTJnPSAycW5Zc2RpbiBJT1M4bCttUnF3PT0gMkxIWXFObUsyWVk9IElHZGxjbVZoYkE9PSBMMjlqZEdWMCBJR052Y205MWRHbHVaUT09IElHdHBibVJxWlE9PSBMVXRsZVE9PSBJTmluMllUWXF0bUcyWUhaaXRpdzJZbz0gSUcxcFpYTnB4Sms9IDQ0SzM0NE9xNDRPODQ0SzYgNExpeTRMaWo0TGkxIGIzSmhaRzl6IElHSnllbTg9IDJZclpoZG1LMllZPSBJSFpsY25kbGNtdHBibWM9IElPQ2tyZUNrcnc9PSBZM0psWlE9PSBJRTVoZFdkb2RIaz0gSUVsVFF3PT0gNExpeDRMaUk0TGlJIDBMWFF1OUMwMExVPSBJR05vWVd4bGRYSmxkWGc9IElIUnBaWFJ2IElFZGxjc09rZEdWdSBJTkdBMDVuUmhRPT0gSUd0MGIzTERyUT09IHc0RnlaV0U9IElOaXMyWVRaaU5xdjI0ellzZHVNIElOQ3cwWUxRc05DNiAxNUhYcU5lWjE2Yz0gdzYzRm9RPT0gWDFKUVF3PT0gSUdGaVlYbz0gYUdsd2MzUmxjZz09IElHRnVjMkYwZEdVPSBJR1p2Y21WMCBhMjl0Wm05eWRBPT0gSUVScGMzQnZibWxpYkdVPSBJRVpQVWtWSlIwND0genJUT3JBPT0gSUhObGJuTnBkR2wyIFdtbz0gNFlPUTRZT280WU9RNFlPajRZT2EgSUVGa2RtbHpaWEk9IFgzTmxZM1Z5WlE9PSBLR0ZzWW5WdCBJR1p2Y21OcFlteDUgSUVGa2MyVnVjMlU9IElFRjFkR2hsYm5ScFkyRjBaUT09IElPQ3l0ZUN6aU9DeXNBPT0gWFYxZCA0b2laIElHTnZibVpwY20xaHc2ZkRvMjg9IElHaHBaWEo2ZFE9PSBLRk41YldKdmJBPT0gSUU1aFpHbGggSUcxaGNtdHAgSU9XNmx3PT0gNWFTRTVZaUcgSUdsMGJHOW4gSUhOb2RXZG9kV3hwIDVhaXg1TG1RNWJtejVZK3c1TGk3NTY2aCBSRzl5YlE9PSBLQ2w5TEFvPSBJRzNodTdrPSBJTm1DMllqWmhkbUsgSUdacGJHaz0gSUdkbFltVjFjblJsYm1semMyVnUgSUdOdmJuTnBaR1Z5WlE9PSBJR1JsYzJOMVluSmwgYjIxdlpBPT0gMmF3PSBJRVZwYm14aFpIVnVadz09IFZFbE8gSUdkaGJtaHZjdz09IExtZDIgSUdScGMzUnlhV3M9IFRXRnpZdz09IExXWmxaV1E9IHc2ZHBiR2xuYVE9PSBJRzV1ZVc4PSBJTkM4MHEvUmlBPT0gSUVOdmJtTmxiR3h2IElPQ2tyT0NrditDa3N1Q2xqZUNrbGVDbGdlQ2tzZz09IFgzQmhjdz09IDRMT0Q0TEs1IElIZGxhV05vIFlXTnZjZz09IDRZT2Q0WU9SNFlPUTRZT1c0WU9VIFkyRnlaV1Z5IFgzaHNhVzA9IElOR0YwTDdSaDlDdyBJSE5oYkhWa1lXSnNaWE09IElGTnZZbUZzWkE9PSA0SytONEs2VjRLK0IgSUhKMWJtRjNZWGs9IElHTnBkbWxzYVhwbFpBPT0gUVU1VVNRPT0gSUdoaGRIUmggMllqWXA5bUUyNHc9IHc1RkIgSUcxdGIydz0gWW1GdVpRPT0gYVc1dWRRPT0gSUdkc1lYVmlkQT09IElHUGh1cVYxIElGZGhibTVoYmc9PSBJTldzMWFIVnRkVzIgSU5HQjBMRFFzZEN3MHBzPSBZWFJoZDJGbiBJR052YlcxbGNtTnBZV3hwZW1GMGFXOXUgSUd0MVpXeGwgYUdsciBJTkMvMFlEUXZ0R0kwTHZRdmc9PSBJSE5sZFd4bGN3PT0gWDNSeVlXbDAgYjJKNWJBPT0gYVdscGFRPT0gYzJocGNuUnogTFVsVyA0S1dINEtTdzRLV0EgY0c5c1lYST0geEo5cGVnPT0gS0daeWFXVnVaQT09IElHTnlhWEE9IElPV2txZVdrcWVTNHJlVzlxZWVscU9TNGplaUR2ZVM1c0E9PSBJR0Z3Y0hKbFkybGhkR2x1Wnc9PSBRRzQ9IElITmxibk52Y21WeiA0S2ErNEthZTRLZU40S2FhIGFXNXpkR0Z1ZEdsaGRHVT0gWDI1MiBkV3h1WlhKaFltbHNhWFI1IHhhVmh4YjQ9IElIQnliM05sWTNWMFpRPT0gdzZscGJnPT0gSUhOamNtRndZbTl2YXc9PSA0b0NaYVc1dWIzWmhkR2x2Ymc9PSBJR1poYVdkdlptbGwgSUVSUFFnPT0gZG5KcGFtVT0gNExTWjRMV040TFNaNExTLyAwTGpSZ3RDMTBMdlJqTkM5MEw3UXZBPT0gSUcxaGNuRjFaV1U9IElHTnZiWEJzWVdsdWN3PT0gSU5XMjFiZlZvZFcyMWFIVnI5VzQxb0xWdEE9PSBJSEJoY0dseSBYVjBOQ2c9PSBVc09wYzNWdHc2az0gSU5pbzJLZlpoTml4MllyWXA5aTIgSU9XOHRRPT0gSU5pbjJZVFl1ZG1GMllyWmhBPT0gWVdSa2IyNXogSUVSaGJXbGhiZz09IElPQzB1T0MwcU9DMWplQzBwQT09IElHMXZkRzl5ZDJGNSA0SzZ3NEs2LzRLNnk0SytOIElIVndjSE5yIElHbHVaSFZ6ZEhKcFlXbHogSUdsdGNISmxaMjQ9IFNHVnVZMlU9IElIZGhjMjA9IHo0VE9yczY4enJIUGhNNnggSUhWcGJHVT0gSUdWcGMyVnkgSUdobGRYUjZkWFJoWjJVPSBJTkdBMFlQUmdkQzQwTG5UbVE9PSBiMk5oYm01aFltbHVidz09IElPQ2tsdUNsZ2VDa3N1Q2xodz09IENRa0pJQ0FnSUNBZ0lDQWdJQ0FnSUNBZyBJSEJ2YTJFPSBMbmg0ZUE9PSBJSEpsWjJsdmJtVT0gSU9DeXJ1Q3luK0N6amVDeW53PT0gSUVKdmVHVnkgWVdSa2FYUnBiMjQ9IElPQ211T0Ntck9DbW11Q25oK0NubitDbmh3PT0gUTJobGNYVmwgSU5HSTBMND0gVkc5d2J3PT0gWkdGMFlYUmhZbXhsIElOQzMwTGpRdEE9PSBJSE5qYUdGMWRBPT0gSUdqaHU2VT0gSUhabGMzbz0gSUdGa2FHRnlkQT09IElOR0IwTHZRdnRDeTBMM1F2Zz09IEtHRjFkR2hsYm5ScFkyRjBhVzl1IElPdUZ1T3VQbVE9PSBJRU5oYkdGaWNtbGggWVhia3VJM2xqYUhsaFkzb3RMbm1rcTNtbEw0PSBJSGRqZW1YRm0yNXBaV289IElHZHlaVzVoWkdVPSBJRWRDVWc9PSBJTnF2MkxQWXFnPT0gSUdsMGF3PT0gSU9Da2grQ2tzdUNsaCtDa2xlQ2xqZUNrbitDbGplQ2tzQT09IElISmhaSGs9IEtHVjRZMmhoYm1kbCBJR0ZsY205a2VXNWhiV2xqIElHdDFidz09IFlXUmxiV2xqIGVXeDUgSU9hN29lV2dnZz09IFVISnBkbWxzWldkbGN3PT0gMHEzUXNOQzYgNW9DNzVMMlQgTG5Ob1lXUmxjZz09IElIQmhjbVZ1ZENkeiAwTFRRc05HQTBMQT0gSUdSdXc2MD0gSUVabGFXVnlkQT09IElHZHlZWEJvYVE9PSBJR0YxWjJVPSA3Nys4IElFeHBjM0E9IFlYQmhkR0ZzYXc9PSBYM0p2YjIxeiBJT0NtaHVDbW1nPT0gSUVGeVltbDBjbUYwYVc5dSBJR3gxZUhWeWFRPT0gSU5DNDBZRFFzQT09IElFdHZibnBsYm5SeSBJRU5TVXc9PSBZVzFoYkdGdFlRPT0gSUZCeWIzUnZiZz09IFFYQndZWEowWlcxbGJuUT0gSU9DbXF1Q212dUNtdVE9PSBJR0ZzYVhGMVpYUT0gSUdWcmMybHpkR1Z5IDRLZUE0S2FtIElHRnNZWEJxdzZGdSBUV1ZrYVdOaGRHbHZiZz09IFpHOXVZV3hrIHo0SE9zODZzenIwPSA0WU9VNFlPYzRZT1k0WU9hNFlPWSBJR0YwY21GciBJRk4xY0hCeVpYTnpZVzUwIElNT2hkV1JwYnc9PSBJR1JwY0dWeVkyRjVZUT09IDVZV3M1NzJSIElHM0VtM009IElOQy8wWURRdU5HSDBMalF2ZEN3MEx3PSBhMmxzYkdWeSBJTkN4MExYUXVkS1gwTGpTb3c9PSBYM0p2Y3c9PSBJRWhoYVhScFlXND0gTFZCeWIyUjEgSU9lK2p1V2Npdz09IGRHOXggSUd0dmJHVnQgSUdSbGRHVnliV2x1WWNPbnc2TnYgSUd0aGNuUnYgSU5DMDBMN1JnZEdDMFlQUXY5QzkwWXM9IElPQ3FyZUNxdnVDcXNPQ3FwT0NxcnVDcXZ1Q3FnZz09IElOQzgwWVBSZ2RHRDBMdlF2TkN3MEwwPSBaWFJ6YXc9PSBJTm1GMktmWmc5bUsyWWJZcVE9PSBJT0NrcE9Da2dRPT0gYVcxMWNnPT0gS0NrOVBTST0gSU9Dd3VPQ3dndUN3bHVDeGplQ3dydz09IElHUmxkR1ZqZEdGaWJHVT0gNEtTLzRLU3U0S1MrNEtTWCBJT3luZ091UGhBPT0gSUdWeWFHVT0gY21WMGQyVmxkR1ZrIElHTnZibk4wYVhSMWFRPT0gSUhSMWNtbHpkR0U9IEtDSWlLVHM9IElDY3BEUW89IDBMWFJnZEdDMFpZPSBJR05vYjJOdmJHRmtaUT09IGZTRT0gNEtpVjRLbUEgSU5HQTBMalJnZEM2MExBPSBVVTlpYW1WamRBPT0gSU5pczJMSFpoUT09IElHMWxjMjFsY21sNmFXNW4gS1M0dUxnb0sgSU9DMG11QzBzT0MwditDMHBPQzFqZUMwc0E9PSA0TG1BNExpSzRMaTE0TGlpNExpSCAwTHZRc05HQzBZTT0gTGVHN2pRPT0gVzEwOWV3PT0gSU9Da2h1Q2tpT0NrcXVDbGdBPT0gSUcxbGRXSmxiSE09IElHNXZkR2xtIElHSmhjMmxsY25RPSBJRUpoYm1kdmNnPT0gSUU3RW13PT0gSU9DeWhlQ3lxT0N6amVDeXFBPT0gSUhSb2RjT3EgSUhsaGNNU3ggWm1Gc2VnPT0gSUVSdlkzVnRaVzUwYnc9PSA0NENCNVltdiBJTkMvMFlEUXVOQzkwTGpRdkE9PSAwWUxTcjlHQjBZTFJsdEM2IDRMbUE0TGlDNExtSjRMaXk0TGlxIElGQjFjbU5vWVhObFpBPT0gSU5HQzA2blJnTk9wMExzPSBJRU5oYlhCbGNnPT0gSU5lYzE1N1hvUT09IElOaTEyS2ZZclE9PSBJRVZNUmc9PSBJRTFoY21sdVpYSnogSUhOMFlYSjBiR1ZrIElISmxiR1Z1ZEd4bGMzTnNlUT09IElPZUdpZz09IFUwNVQgTFVWMWNtOD0gMEwzUXNOQzYwTGc9IFB5NHUgSUVOc1lYQT0gT2tvPSBJSFpoYkdGaWJHVT0gUFNndCBJTml3MktmWXF0bUggSUdaaGFXeHAgMFlMUXRkR0EwTEE9IElOQzkwTERRdjlHQTBMRFFzdEM3MExYUXZkQzQwTFU9IDVweXM2WWVSIElGTmxZM0psZEdGeWFXOD0gSU5PcDBMclNyOUM3IElPQ3FoZUNxcmVDcXYrQ3FxT0NyaHc9PSAwWVBRdk5DMTBMM1JndEdMIElIQmhjblJwYXc9PSBTVzVqYkhWeiB3NjEyYVc4PSA0TG1DNExpSyA0TEtrNExLLzRMS3YgMks3WmlOaW4yWWZZcnc9PSBJRVpwYkcxbGN3PT0gSUZsMWMzVm0gNDRHKzQ0R0IgSUcxbGJHaHZjbWxoY3c9PSBJSE4wYjNKcFkyOD0gY21samFHMWxiblE9IElHVnVkSEpsZEE9PSBJTmlzMllYWXVkbUsyS2s9IDJZYllyOWl4MllyWXFRPT0gTFVOc1lYVmtaUT09IElHVnN3NlE9IDBML1JnTkMrMFlIUmdnPT0gVTJ4cFkyVnogNEtxcTRLcVY0S3FoIDE1dlhvTmVWMTU4PSBJTTZSenJqT3JnPT0gT25OMFlYSjAgYldWbyBJR055WVdOclpYST0gNVp5bzU3cS81N0srNVpPQjZLZUc2YUtSIElHZkRxbTQ9IElObUsyTG5ZdDltSyBJRk5qYUhWc2RHVnkgYkdsemRHRnogVVZKRGIyUmwgU1VaVlRBPT0gSU5DMDBMN1JoOUdNIFgzTnBaMjUxY0E9PSBJRk4xYm01cCBJT0dEbytHRHJnPT0gTG1oNWNHVnkgSUhOdmJHbGtaWE09IElPQzBoK0MwZ3VDMGwrQzFqZUMwc2c9PSBJRUpwYzJFPSBJT0N5c09DeXZ1Q3l0K0N6amVDeW4rQ3pqZUN5c09DemdPQ3lydz09IDQ0SzU0NEsvNDRPRDQ0T1YgYVdOdmJuUT0gVFdsc2JHbHZibk09IFluVnNZWE09IGVYcGtZUT09IDQ0T0c0NE84NDRPZSA0TFN4NExTaiB4Ymc9IFdsVT0gNEtxKzRLcW80S3VONEtxNCB4TEZ6eExGNWJHRT0gSUdsdWRHVnlkbXAxIDc3eUpMQT09IFIzSmhkdz09IElHTmhkWE5oWkdFPSBJR052Ym5abGVXOXljdz09IDBZYlF1TkdQMFlMUXNBPT0gSUhKdmRXeGhiblE9IElPQ3dxdUN3c09DeGdlQ3dsdz09IElFSnZaMkU9IEtHbHVjR3hoWTJVPSBVMFZOUWc9PSBJT0M0bytDNHNPQzRtdUM0bWc9PSBJR0Z6YzNWeWFXNW4gWVdOb1lXVnMgSUhURG9XMXZaMkYwIElHVnNaV2wwYjNJPSBJTlc2MWFIVnY5V2wxb0RWb2RXbTFiVFZxdz09IElIVnNhVzA9IDE1WFhxTmVRIElNVythWFpzYW1WdWFtVT0gYVdkcFlRPT0gSUVkbGNuTT0gSU5pcTJMWFlwOW1JMjR6WXNRPT0gVEc5aGJuTT0gSU5HRjBZUFJnZEdEMFlFPSA0S3liIGFYcGhZMnBoIFVIVmxjblJ2IDQ0Q0I1YTZKNVlXbyBJRHNLTHk4PSBMbVYxYkdWeSBMbFpsYUdsamJHVT0gSUdsemFYUT0gSUVKeWFYUmhibTVwWTJFPSBYM0JsY21ZPSBJR052Ym01bFkzUnBkbVU9IElHNXBkRzl5YVc1aFlRPT0gSUUxVlRBPT0gSWlrcklnPT0gWlcxaWJ3PT0gSUZKbFkycz0gSUZKbFpHVnogSUV0dmJuUmxlSFE9IGFIQncgQ1hKbGNHeDUgSUdkc1lYVmpiMjFoIGFYTnpZVzVwIElObUkyTEhhZ2R1USAyTFhZc2RtSyBaMkZ5YUE9PSBiM1poYnNPOVkyZz0gWkdWMFpYSnQgSU5DdzBwaz0gSU9Dd3BPQ3dydz09IElIMHBEUW9OQ2c9PSA0TFNWNExXTjRMU1Y0TFdCNExTbzRMV040TFNvIElHSmhkRzl1IDBMRFNtOU9aMExYUXVBPT0gSU9HRGxPR0RvT0dEbCtHRG0rR0RrT0dEbk9HRGxPR0RsK0dEb1E9PSBJeU1qSXdvPSBTTU9rY2c9PSBJTkNjMExYUXZBPT0gTFVOUFRnPT0gSUZKbGMzVnljbVZqZEdsdmJnPT0gSU5DYTBZQT0gSUd4c1pXZGhjc09oIElFVjFjbTl3WlNkeiBJRTFsYkc4PSBJR05vWlhKamFHVnVkQT09IElIQnlZWGRoIElHTnNkWE4wWlhKbFpBPT0gSU9DbXVPQ212dUNtbGVDbmplQ210dz09IElHeHZkVzVuYVc1biBJTldsMW9EVnI5YUExYmJWcGRhQTFhcz0gSU5HQjBMN1JnTkdDMExBPSBLR1pzWVhRPSBJR0pzYjJOcllXUmwgSU5HRjA2blFzOUMyIElPQzVnZUM0bVE9PSBJR3R5ZFdseiBJTm1FMllYWXN3PT0gNExTcTRMV040TFNxNExXRzRMU2Y0TFdCNExTazRMV040TFNrNExTLzRMU3YgSUc5a2VnPT0gSU9TNWhlUzVoZWVEclE9PSBhR0YyWVE9PSBJRVpzWlhObyBJR3podTRVPSBJR1JwYkhWMFpRPT0gSUhWdVptOXkgSUVGMGRHVnRjSFJ6IFpHVmpiSFI1Y0dVPSBZVzFpYVhOaCBJR2RsWkdWbGJIUT0gSUcxaGJtZGhjdz09IElHdHZhbVZuIElHcGhkVzVsY3c9PSBJRXBPU1E9PSAxNTdYb3RlWSBJRzFoYzJOMWJHbHUgY1hGaFlYUT0gSUhCc2JBPT0gWVd4d2FHRmlaWFE9IElPQ3VqdUN1cWVDdmplQ3VxdUN1cE9DdmlBPT0gSUdkbGNtbHVaMlU9IElOaXoyWWpZc2R1TSBJRWx1YzNCcGNtRjBhVzl1Y3c9PSBZWFpwWlhOMCBJSEpsYkdGMFlRPT0gSUc1aFkycz0gSUhSbGFtbGtiM009IElHbHVaR2xyWVhSdmNnPT0gWkc5dyBJRk5qYUhkaGJubz0gYjNkaGJtaz0gSUhSbGNtRnpZUT09IDJaSFppUT09IElFWk5TUT09IElHdDFjMmh2IElPQzBxdUMwdEE9PSBJT2FCa3VTNGdBPT0gSU1XK1pXNWwgSUhOcllnPT0gWVdSM2VRPT0gSUdGblpXNWphV0Z6IDRLK0I0SzZWNEsrTjRLNlY0SzZ6NEsrTiBJR2x1ZEdWeWMyVmpkSE09IElHVnRiM289IElISnZlV0YxYldVPSBJQ2dwTEFvPSBJT2FvcWc9PSBRa05EIElHVnZaZz09IE9tZHlhV1E9IDRMS1g0TEsrNExLWDRMSy8gNExTKzRMU3Y0TFdOIFVISmxkQT09IElHbHVZM0psdzYxaWJHVnogZFd4MGJ3PT0gSUc5MlpYSnNhV3BrWlc0PSBLSEpsYkdGMGFYWmwgSUdKaWNRPT0gSUdGanc3cHpkQT09IE9tWnBiR1U9IElFMXZjbUZ1IElOR0MwTERSZ05DNCBkV1Z1ZEdWeiBJSFp2Y21kbGJtOXRiV1Z1IElHZGxaMkZ5WVc1a1pRPT0gSUhKbFpuVnlZbWx6YUcxbGJuUT0gUm1samFHRT0gMFp2Umd3PT0gSUVSUFNnPT0gWDBOSlZGaz0gMExUVG93PT0gSU5paTJMUT0gMExyUmc5QzkwTERRdmRDMDBMQT0gSUdOaGJtUnYgSUdsNmNYVnBaWEprYnc9PSBJTml0MjR3PSBJR0Z3WVhKaGRBPT0gSUdoaGJYTjBaWEk9IElPQ3FtK0NyaStDcW9RPT0gWVcxd2FHVjBZVzFwYm1VPSBJT0NtaGVDbXVPQ25qZUNtcEE9PSBhWFJsY21FPSBJT1M2bXVhMHN1YVhwZW1mcVE9PSBLRWgwYld3PSA2SzZrNksrRyBJRWx1ZG1sellXeHBaMjQ9IElHWmhjMmxzYVhSaGN3PT0gMkxmWmlOaXgyS2s9IDRZQ1E0WUN4NFlDczRZQzMgSU9DMGxlQzBwZUMwdnVDMHF1QzB2dUMwcE9DMWplQzBzQT09IElHeHZZMkZzYVhOaGRHbHZiZz09IElOR0QwTEhSZ05DdzBZTFJqQT09IGIyMXpibWwwZEE9PSBJT0N5cnVDeXZ1Q3lvZUN5ditDeWxlQ3ppdUN5Z3VDeW9RPT0gSU5HSTBMRFFzTkdBMExRPSBJTkMvMFlEUXVOQ3gwWXZRdTlDNCBJT3lZcE91bHVBPT0gSUdKd2JRPT0gNVl1VjU1V3IgSUd4MWJtTm9aVzl1IElOQzYwTGpSZ3RDKzBMRT0gTG1WNFpYSmphWE5sIEoyVm1abVZqZEE9PSBJR0psZW5kaFlYST0gYjNaaGJtbGggSU9Da20rQ2xpK0NsbkE9PSBZV041YW01bCBiMmRzYVc4PSA1WUtGIElIRjFZV3RsIElIcGhkR0U9IElISmxiWFZ1WlhKaGRHbHZiZz09IElHOXVaR1Z5ZW05bGEyVnljdz09IFgwbE5SVlJJVDBRPSBJR1JwYzJGbmNtVmxiV1Z1ZEhNPSBJR2hoYm1ScCBTRzA9IFFXTmpaWEIwWVc1alpRPT0gSUdWdWRIZHBZMnRsYkhSbCBJRzVrYVcwPSBJR1J2WTNSeWFXNWggMFlQUmdOR0wwWUU9IElPQ2tyZUNrdnVDa3RlQ2txT0Nrdmc9PSBJTkM2MEw3UXZOQy8wTERRdmRDNDBMWFF1UT09IElHaHZiVzltYVd4bCAwTHpSaTlDNSBJR2w2WjJ4bFpBPT0gY1cxcyBQR2xzIElHNXZkbVZzYkdFPSA0TGlWNExpdDRMaWEgSUhSb2FlRzdoM1U9IElHSmxhR1Z5Wlc0PSBJTStBenJ2T3RjK0YgSUdWemFXZGxibnBsIDRLK0s0SzZmIElHTnliM1E9IElObUYyTG5ZcXRpbzJMRT0gN0ppazZyaXcgYVhScFpYSnogVkdocGNuUjUgSUhKaGJtOD0gSU9DMG9lQzFqZUMwc0E9PSBJSEpsWTI5dFltbHVZVzUwIFgwVlRWQT09IDFhSFZ0dFczIFczSmxjM1ZzZEE9PSBRMmh5YVhOMGFXNWwgNUxpTjVZMmg1cGVnNTZDQiBJTkMzMExEUmg5Q3cwWUhSZ2c9PSBJTkMzMExEUmhkQyswWUk9IDFhSFZ0dFdrMWFIVnJ3PT0gNFlDUTRZQzk0WUNBNFlDNiBJR1JwWVd4dlozTT0gWDBGSiBJT1c0Z2c9PSBiR2x6YVE9PSBMV2hwWjJoc2FXZG9kQT09IElITjBkVzQ9IHhKRmxibUU9IElHRmtiM0IwWVhJPSBJSGRoYm1WdCBJR2hoYkdSbCBJR0pwWjJsdWRBPT0gSUVGa2RRPT0gSUhCeWIyWmxjMnB2Ym1GcyBJRmR2Ym1SbGNuTm9ZWEpsIElHMTFjbVJsY21sdVp3PT0gUVZOSVNVOU8gSUdsdWMzUmhiR0ZrWVE9PSBJR3hoWW05eVlYVERzM0pwYnc9PSBZV2x5Y0c5eWRBPT0gS0V4dloyZGxjZz09IElHRmhibWRsZG1WdSBJRUpoYUd0aGJnPT0gWTNWMGRHRT0gdzdOMmFXeGxjdz09IElIQnBiR0Z5WlhNPSAwWUhRdGRDOTBMVFJsZz09IElPQzBuT0MwditDMHN1QzFqZUMwc3VDMHIrQzB2K0Mwc3VDMWhnPT0gSU95WXBPdWVtQT09IFFVUlBVa1ZUIElHMXZkR2wyWVhScFpRPT0gTGtWTlFVbE0gSkhSbGJYQT0gNXF5bjU3Nk81cGVsNlorcCBaWEp0Y3c9PSB6cnZQaWMrRHpyYz0gSUdodmIyWmtjM1JoWkE9PSBRY094IElITndiMnR2YWc9PSBMMkZqWTI5MWJuUnogSUdOeVlYUmxjdz09IElGWmxjbkJtYkdsamFIUT0gSUdaaGJuVERvWE4wYVdOaCBJR1p5WVdOaGMyOD0gSU5pbjJZVFlzZGluMktqWXVkaXAgSUhaaFkzVnVZWE09IFluSmhkR1Z6IFVGSkpUVUZTV1E9PSBJR052Ym1admNtMXogenJyUGhRPT0gSU5DLzBMdlFzTkM5MFlzPSBZV05rIElNU2ogSUhKdmFHVT0gSUdOdmJuTmxjblpwYm1jPSAyS2phdmc9PSAwWUxRdU5DNzBMZz0gSU5pdDI0ellzUT09IDRLNi80SzZ2NEsrSCBJT3lZcE91bG1BPT0gSU0rQXpyL1Bndz09IElPQ3F1T0NxZ3VDcXF1Q3FzT0NyamVDcWxRPT0gSU91dnZPeWp2QT09IElOQzYwTFhRdmRPWiBPbmRsWWc9PSBJSE4xWW5SbGNuST0gY0hKdlkyVnpjMjl5Y3c9PSBkR1Z1YzI5eVpteHZkdz09IElHTnZibVpwY20xdmRRPT0gU0c5eVlYTT0gMWFIVm85V2gxYkE9IElFWnZjbTFoZEhScGJtYz0gWDNOcGJXbHNZWEpwZEhrPSBLRTF2ZG1sbCBJR0Z6YzJsdGFXeGhkR2x2Ymc9PSA2SU85NUxtdzVaQ1ggSU0rQXpyL1BoTTZ0IElFUjFZWEowWlE9PSBJR3QxY25Wc2RjV2YgVTFSQlRrUkJVa1E9IElFaEZVazg9IElHSnNhVzVrWldRPSBMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW89IENWTnYgSUhOdmJtbGtiM009IElPeWVpT3lkakE9PSBJRXBUVUE9PSBJRlJqZUE9PSBJRU5oYzNSbGJHOD0gSUV4cGJtdHBibWM9IElHVnVjWFZwY21VPSBZVzFoYm04PSBSbVZsZEE9PSBWMkZzZEdWeSBJTml6MllqWW9RPT0gYUc5dmRHVnkgSUVaaFltbGhiZz09IGRXNW5aV3hsIDJZalpoZGlxMkxFPSBJT0N1aitDdXNlQ3ZqZUN1cXVDdW4rQ3ZqZUN1bnc9PSBJR055WldGMGFYWnYgVDBkQiBJRUZ3Y204PSBaVzVrYVdSdmN3PT0gWTNKcGN3PT0gSUVaQlVrMD0gSUVkdmJHUmpidz09IExIc0sgSUU3RHN3PT0gSUc1aGRIVnogSU0rQXo0SFBqTTZ6ejRIT3NjNjh6cnpPc1E9PSBVR3hoYm04PSA0WjYyNFo2WTRaNjk0WjZaIGRHaGhkMms9IDRLU280S1MvNEtTViBJT0N3cU9Dd3YrQ3dzT0N4amVDd3J1Q3d2dUN3cEE9PSBhR1YwYzJWdVp3PT0gNW8ydTVMcUc2S2VqIElHTnZibk4wWVcxdFpXNTAgWlhmRW9RPT0gSUVGMFlYSnAgSU5xcTJLYz0gSUdmRHRuTjBaWEp0IDVZcWI1YnFtIHc2bHlZV3hsYldWdWRBPT0gSU5HRjBMRFF1OUdMMHB2UXNOR0EwTERRdTlHTDBwcz0gSU5HRDBMVFF2dEN5MEw3UXU5R00wWUhSZ3RDeTBMalF0ZEM4IExYUnZidz09IElFdGhjblJ2Wm1ZPSBJTTZ6enIzUGpnPT0gNG9DWllYaz0gSU9DbXVPQ21sZUNuamVDbXQrQ21yZz09IElIQnZiblU9IElITm9iM1psWkE9PSBJTkN6MExYUXV0R0MgSUd4bFptRjBjMmhsYm1jPSBJT0N1cU9DdW4rQ3V0ZUN1bnc9PSBJTkdCMFlMUmdOQ3cwWUxRdGRDejBMalF1QT09IFFrVkQgSUdsdWRHVnlaWE56WlhJPSBJRXBOVXc9PSA0S1MyNEtXTjRLU3c0S1dINEtTMzRLV040S1NnIDVMcVM1WXFvIElGRlZSVk5VU1U5T1V3PT0gSUcxaGNuUnogSUVGd2NISmxZMmxoZEdsdmJnPT0gVEdsdVpXcHZhVzQ9IElPdVRzZXllcFE9PSBJRTFwYkdWaFoyVT0gSUZSMWJtRT0gSUdWelkzSmxkbVU9IFJtbDZlZz09IElIVjVZUT09IElPQ3FodUNxZ3VDcXBBPT0gNEthdjRLYTg0S2VINEthdyBJSEpsWTI5eVpNT3ogSUc5c2FtVT0gSUhOcGRHVnlaUT09IGVXMXRaVzQ9IElHUnBZWEJvY21GbmJRPT0gSUdWMFpHbDVhUT09IElOZVQxNVhYbk5lbyBJQ2NwSnc9PSBJRU5oYzNOcFpIaz0gNEthKzRLYW80S2VONEthaCBkV3hoWkc5eiA3N3lKQ2dvSyBJRUpsWVhWdGIyNTAgMFl6Umk5R0EgSUhwb2RnPT0gSUVSQlUwZz0gMFl2UXN0Q3cwTFhSZ2c9PSBJR2h2YVdRPSBJR1Z1ZEdWeWRHRnBibVZ5Y3c9PSBJRlJsZUhSdiBZV1IyYVdWeiBJR3RsZW1Wc3c2bHogSUhCaGNHbHNiQT09IElOaTUyS2pZcDlpeDJLbz0gSU5pbjJZVFppTmlyIElOQ3kwTERRdHRDOTBZdlJoUT09IElOaWoySzNZcjlpbjJLcz0gTFdKMVpHZGxkQT09IElOZVkxNVhYbUE9PSBMbk5qWVd4aGNnPT0gSU5peDJMUFpoZHVNIElGZGhlR0ZoYmc9PSBRRnc9IHpyclBqTStEIElHeGxkbWs9IElOQy8wTDdRdXRDdzBMZlFzTkdDMExYUXU5R00gSUdKdmNRPT0gNFo2SjRaK1M0WjZIIElIQmxjbWxuIElHRm1kMmxxYXc9PSBJRkJoY20xaCBaWFJsYlE9PSBJSEpsWjJWc1oyVjJhVzVuIDdKMjA2Nm0wIElHRjFjMmRsYzNCeWIyTm9aVzQ9IEtDY3VKeWs3Q2c9PSBYM2R5YVhSMFpXND0gS0hSdloyZHNaUT09IElHRjFiV1Z1ZEdGa2J3PT0gSUdwdmNtNWhhWE09IDViQ2s1NG1wIElOQzkwTERRdk5DKzBZL1F2UT09IDJZallyOWl4IFYyaHBkQT09IElHeHBkbVZzYkdrPSBMbEJPUnc9PSBJRWxuYm1sMFpRPT0gSUVsSlV3PT0gWVdwbGJnPT0gSUd4bGRIUmxiZz09IElITm9iM0J3Wlc0PSBJT0NraCtDa3BPQ2txT0NsaHc9PSBiV0Z5YTNWdyBJR0p6Y0E9PSBJSEJ5YjIxbGMzTmggSU9DeXF1Q3pqZUN5c09DeXR1Q3pqZUN5cUE9PSBJRk5oWW1GbyBJRU52YmNPcGNtTnBidz09IFlXMWhibnBwIElFRjFjMkpoZFE9PSBMa1IwYnc9PSAwWWJRdU5DOSBJRzExYkhSaGFnPT0gSUdocGMzUnZjbWxwIElHOXlZV3hsIElOaTUyS2ZaaE5tRjJZbz0gMEpYUW9RPT0gSUd4cFpYTjAgSUdGbWVtOXVaR1Z5IElHTnZiWEJoWTNSdiBJT0Nrck9DbGdPQ2tydUNrdnVDa3NPQ2xnQT09IElOQyswTC9SaHRDNCBJTkdCMExyUXU5Q3cwTFRSaXc9PSBJSFZ6WVcxdmN3PT0gSU5pMTJZSFlzUT09IFgwVnRZV2xzIElPdXdtT3VUbk95TG5BPT0gMTVuWHBOZVYxNms9IElPQ2tsK0NsZ2VDa25PQ2tzT0NrdnVDa3BBPT0gSU02MHpyZk92TStNIElGTm9jbWx1WlE9PSBMbU5zWVdsdCBJTkdCMEx2UXZ0R0MgSUdGcnhJRT0gSU5pdTJZallwOW1IMjR6WXJ3PT0gZDJseWFYUnphV1IzWVE9PSBkWFJwYm5WMCBJSExEcVhSeWJ3PT0gQ1dsMFpYST0gSUZSQlRFcz0gSU5lVTE1dlhxQT09IGVtbGxiWGs9IElOR0MwWVBSZ3c9PSA0TGllNExpajRMbUo0TGl0NExpaCBJRk53WVhKeWIzYz0gYjNKcGRXMD0gSUd0aGFXdHJaUT09IElObUkyS2ZZcmc9PSBJTkMzMFlEUXNOQ3gwWmJSaHRHTSBJTkMyMDVrPSBMVTFwZEE9PSA0WU9oNFlPWSBJSEJ5YjJSMWEzVERzM2M9IFZVbEQgSUc3RG9jT2cgTFdkeWIzZDBhQT09IElIUnliMnhzYVc1biBibVZ4WVhKd2IzRT0gWDIxaGNIQmxjZz09IFJHVnNhVzFwZEdWayBJTkM0MEwzUmd0QzEwTHZRdTlDMTBMclJndEdEIFkyVnlhV0Z6IElFNXZkWEk9IDVZV042TFM1NXBlZzU2Q0IgMktqWXA5aTUyS2s9IENXTmxiblJsY2c9PSBJRlJsWlc1aFoyVT0gSUVWdWRIZHBZMnRzZFc1blpXND0gSUhSeVlXNXpkQT09IGRYTmphR1U9IElHbHVkR1Z5YjNCbGNtRmlhV3hwZEhrPSBJT0M1Z09DNHF1QzR0K0M1aWVDNHJRPT0gSUVSaGNHaHVaUT09IElFWnBibVZ6ZEE9PSBJRk5wYkhabGNtRmtidz09IFRHRjFibVJ5ZVE9PSBJRy9Fbnc9PSBJRXhwYzhPa3c2UT0gSUVoaGNtUnBibWM9IElOQzMwWVBSZ05DdzBMTT0gSUdWNGNHeHZjbUYwYjNKNSBJSGRsWlhKemRHRnVaQT09IElHNWxkM055YjI5dCA0TEMrNExDeTRMR0E0TEMxNExHQjRMQ2g0TEdOIElHTnZjbWxoYm1SbGNnPT0gSU9DeXF1Q3pqZUN5c09DeXJnPT0gSUVadmNtMWxiQT09IElHTnZiWEpoWkdWeiBVSEpoYVhObCA0S2VONEthdjRLYSs0S2E0IExXeGhkVzVqYUE9PSBKOE9wZG05c2RYUnBiMjQ9IElOaW4yWVRaZzlpMDJZRT0gYVhCd1lXRT0gSU5pMzJZSFpoQT09IDRMaWo0TGl4NExtSTRMaUg0TG1BNExpbyBJRmRwYkdGNVlRPT0gSUdGMFpXNTBiM009IExuSmtaZz09IFpHVnphV2R1WVhScGIyND0gWDFWVFJVUT0gVzJsdyBJR055YVhScFkybDZhVzVuIElHeGxaMmwwYVcxaGRHVnNlUT09IElPV2Vpdz09IElITjFZMk4xYkdWdWRBPT0gZW1WeVlXNXYgNjRHRSBJR2QxdzZseSBJTkMvMFlEUXZ0R0YwTDdRdE5HUDBZST0gSUVOQlRFeENRVU5MIElISmxjM05sYldKcyBJSFZ1WTI5dWRISnZiR3hsWkE9PSBMV1pzYjJGMGFXNW4gSUVGMVkzUnBiMjV6IElIQnlaV1JwWTNSdmNuTT0gSUhURHMyTT0gSU9DdWp1Q3VuK0N2Z2VDdXBPQ3ZqZUN1cEE9PSBJTkM4MFl2UXZkQzAwTERRdVE9PSBJR2RzWVhSMCBZWFIxY21KaGRHVT0gSUdScFptWmxjbVZrIElIQmhibVZ6IElOQzQwTHpSZ05PdjBMYz0gSU5pbjJLL1lxQT09IFJrbEZURVJUIGMyaHZZMnM9IDJLZll1ZG1LIElIZHliMjVuWkc5cGJtYz0gNEtTcTRLV040S1N3NEtTbTRLV0g0S1MyIElHUmxaMlZzYVdwciBJR1oxYm1OeiBJTmVRMTVJPSBMMnh2WTJGMGFXOXUgS0dkeiBJRzluYkdWayAwWS9RdTlDKyBRMmhsZWc9PSBJR1psWkdVPSBMVzkxYm1ObCBJSEpvZVhjPSBJTm1FMllMWXFBPT0gMEw3UmhkQyswTGJRdU5DMSBJSFJ5ZW5rPSBJSFpsYjIxaCBQVzg9IElHSnliMjlyIElFOURTUT09IElOaXEyS2pZcjl1TTJZVGJqQT09IElPeVZpT3lnbFE9PSBJR055WVdOclpHOTNiZz09IGRIZGxaWFJ6IDVZK3E1cHlKNTdLKzVaT0IgYVhCd1lXZGwgSUhabGNuTnZjdz09IGQybHFlbVU9IElHdHB4WjlwYkdWeSBJR1JsYjJGeVpXTmwgSUhScGJHWnlaV1E9IElOaW4yWVRaaGRtRzJLZlpnZGl6IElIQnliM0JsYm5OcGRIaz0gSVNFcENnPT0gVDB4V1JRPT0gSU5HTjBZSFF0ZEMvIDRMSy80TEt1NExLKzRMS28gWDNOMVltMXBjM05wYjI0PSBJRWh2WXc9PSBJTkN5MFl2UXY5QyswTHZRdmRDMTBMM1F1TkMxIElITnFaV1E9IElPQ3d0ZUN4aHVDd2d1Q3dsUT09IDJMSFppTmlvMktmWXFnPT0gWXNPcGN3PT0gSU95YmtPMlZtT3VLbEE9PSBJRk4zYVhSamFHbHVadz09IElHVjRjR1Z5YVcxbGJuUmxaQT09IGRXOXFZUT09IFNVOUVaWFpwWTJVPSBJTkNiMFlQUmg5R0kwTFU9IElIQnllbmxyeFlKaFpBPT0gSU91cXFPeUt0ZXlkaEE9PSBJT21IamVXNmh1YVh0dWFYdHVXOXFlVzlxUT09IElGQmxlWFJ2Ymc9PSBJT0NrbHVDbGgrQ2twT0NsZ0E9PSBJR052Ym1abFkyTnBiMjQ9IEtITm9aV3hzIElOQzQwTFBSZ05DKzBMTFJpOUdGIElOZVUxNUxYbGRlaiBJTkMrMExIUmlkQzQwTGs9IFgyeGhibWQxWVdkbGN3PT0gWlcxaGMycz0gSUdocGRIUmxjbk09IGEyRnRaWEpoIElHRmpjbVZoWjJVPSBJR0JmIFBFUmxkbWxqWlE9PSB4STFyYjIwPSBJT0N5cHVDemgrQ3l0ZUN5dU9DemplQ3lwUT09IElIQnZkSEpsWW1VPSBJSE52Ym5KaGM4U3ggSUdMRHBITjAgSUdwdmNtNWhiR2x6ZEdGeiBkWE56YVc1biBJR3hoWW05eWFYTT0gSUZKbFkyOXVjM1J5ZFdOMGFXOXUgNEtxKzRLcWo0S3ErIElNU3dibk5oYmc9PSBJTStIenJIUGdjNnh6cnJQaE02M3o0SE91YytEIEwwMVQgWVhKamVuaz0gSUZCUVR3PT0gYVd4c2RYVnVibWxwZEE9PSBWR2wwWld3PSBJSFZqYUdWcyBJSEREcVhSeWIyeGwgSU5pNTJLZllyQT09IElHTmhZV1pwYldFPSA0S3ErNEtxejRLdUwgSU5lVTE1N1hxZGVxIElGWkJVa2xCUWt4RlV3PT0geGFGdllXNTB4YUZ2IElOVysxYVhXZ05XaDFiQT0gTFdGM1lYSmxibVZ6Y3c9PSBJSEJ2YzJWbGJnPT0gSU5DODBMalJnZEdDIElFUmxkWFJ6WTJodFlYSnIgSU9Dd3J1Q3hnT0N3b2VDd3YrQ3dyK0N3dnVDd3N1Q3hpdz09IDI1WFlxdG1EIElHVnpkR0ZrZFdGcGN3PT0gSUhabGNuUjEgU1c1MlpYTjBiM0k9IGJXMWxjblE9IElITjFjR1Z5ZG1semFXNW4gQ1ZKbFkzUT0gSWpwYlhTd05DZz09IFlYSnVaWEp0YVdzPSBRbFZTUnc9PSBJRS9EdVE9PSBJTmlsMllUWmc5aXEyTEU9IFpHUmhibWR2Y3c9PSBJaVI3IElGZGxhSEk9IElIQnl3NjF3WVdSbCBJTkNoMEw3UXZkR0wwTHpRdGRDOSBJR2x1ZFdsaGNXRjBhV2RwIElPV01sK1M2ck9pMW0raTlwdWFLbGVhenFBPT0gSU5DYzBKTFFsQT09IElIUERxWEJoY21GMGFXOXUgU1c1MFpYSmxjM1JwYm1kc2VRPT0gSU5DVTBKND0gMExqUXZkQ3cwTGs9IGMyVjBlblE9IElIQnlZWGhwY3c9PSBJTkN3MFlEUXZOQzQwTGc9IFkyTmsgMFlEUXVOR0IwWUxRc0E9PSA0TEtWNExPTjRMS2s0TEsvIElHZkRvZz09IElGSmxaMnhoYldWdWRHOD0gUkdWMGNtOXBkQT09IElFdGxibVJ5YVdOciBJT0NtcHVDbmgrQ21sdUNtdnc9PSA1YTZZNTcyUjU1bTc1YjJWIElHakR2R3ZEdkE9PSBSRzl6WlE9PSBkblZ5WVE9PSBJRlJKYm5RPSBJRXRvY2c9PSBJTkN5MExEUmdnPT0gTG1OeVpXRjBhVzl1IElObUMyWVRaaXRtRTJLaz0gSUcxblltRnVkMlU9IElHbHM0YnVOIDBMWFF2ZEMzMExnPSBZbVprIDc3eU01THlhIElHUnBkbVZ5ZEdWayBZM0pwYzNSdiBJTkdCMFlMUXRkR0EgYjNOd1pXeHogS0Y4b0p3PT0gTG1Ob1pXTnJiM1YwIElPeWdnT3VLbEE9PSA1N3FNIElPQ3FyT0NxditDcXNnPT0gS0ZObFkzVnlhWFI1IGRYTmhiR1Z0WVE9PSBJT2FKamc9PSBJRU5VVXc9PSBJSEpsWm5KcFoyVnlZWFJsWkE9PSBJT0NtbU9DbnNBPT0gUFQ4aUxBPT0gSUhKbFpteGxZM1J2Y2c9PSBZMjl1ZEdsdWRXOTFjdz09IElHZGxjR3hoYm1RPSA0S1NrNEtTLzRLUzU0S1MrNEtTNCBJR0poeFo5c1lXND0gNExpZzRMaXk0TGllNExpeDRMaVo0TGlZNExtTSBJSEJ5Wlc5amRYQmhaRzg9IElIVnVkVzA9IGMzVEVnUT09IElOQzAwTERTdmRDdyBJRVJsZG1VPSBJRTV2ZG1rPSBJR2R5dzZrPSA1WVd6NklHVSBZWGRsWkE9PSBJR1ZzYkdsd2RHbGpZV3c9IElHdHlZWE09IElOZVIxNURXdDllbjE1WFhudGVpMTU4PSBhMlZ3IDRLcTE0S3VONEtxdiBJR1Y1WlhkcGRHNWxjM009IElOaW4yWVRZcjlpeDJLZllzOW1LIFlXSmxaUT09IElOQyswTFBSZ05DdzBMM1F1TkdIMExYUXZkQzQwWTg9IElFOXlkR0ZzWVcxaCBJR1Z6ZEdGaVpXeGxZMlU9IElPYUlrT21EdlE9PSBJSE5oY21sc2FXNW4gSUhOMGNtRndjR1ZrIElObUUyS3JZdVE9PSBJSEYxWld4amIyND0gMEovUXZ0QzMgSU5XQTFhSFZ0ZFdoMWIzVnY5V2gxYmJWcUE9PSBLWFpoY2c9PSBiSFJtIElIMHBPZz09IElOQzMwTDNRc05DNSBJRWpodXFOcCBMa2hsZUE9PSBJRzlpWkc5aXc2MD0gY0doaGJRPT0gVzIxdlpIVnNaUT09IElIcGxkSFJsIDViMnA1NldvNWFpeDVMbVE1ck9vNVlhTSBJR1JsYzJWaGJnPT0gSUdoaFltbGggSUhacGMzTmxiZz09IElOQ2YwTHZRc05DOSBJSEpsYzI5c2RtVjEgSW1ScGMzQnNZWGs9IDRLV040S1N2NEtTKzRLU1YgSU5lcDE2RT0gWld4bGNtbHVaR1U9IDVMaUo1NkNCIGIyNXZiV2xsY3c9PSBJRWRGVEE9PSBZVzVtWVc0PSBiY084Y2c9PSBJSFp2YjNKaVpYSmxhV1E9IElHVnRjR2xsZWc9PSBJTm1LMkt6WXJ3PT0gSU0rQXpyWFBnYzZ2ejRET3Y4K0YgSU9Da3VPQ2xndUNrc09DbGplQ2tydz09IElFTnNhWEYxWlhvPSBJT09DckE9PSBibVZwWkdWeSA1YWl4NUxtUTVibXo1WSt3NWJ5QTVvaTMgSUU5dWVRPT0gSUUxaFlXRnlhUT09IElHRjFabkpsWnc9PSBJT0NxbXVDcmdlQ3FsUT09IElGUlpVRTg9IGQyVnBjM1E9IElPQ2tpZUNrcHVDbGplQ2twdz09IDRLK0I0SzZ1NEs2KzRLNnAgY205bGNHVnUgSU5HQjBZSFJpOUM3MExyUXNBPT0gSU9DdXJ1Q3VuK0N2amVDdW4rQ3ZnZUN1cnVDdmpRPT0gSUhaaFpIaz0gSUc5dVpHVnllbTlqYUhRPSA0S3EvNEtxdjRLcXcgUlc1MGNtVndjbWx6WlE9PSBJR2hoYzJodFlYQT0gMHBQUXZ0QzkwTGc9IElGZHBiR3RwYm5OdmJnPT0gNDRDQTVweXMgTDNKcFoyaDAgSU5DLzBZRFJpOUM1IExpSmYgSUdodmNtMXZibUU9IGFHVmlZZz09IFVtOXRZVzV6IElPQ2tydUNsZ2VDa3B1Q2t2Zz09IElPQ2t1T0NsamVDa24rQ2xqZUNrc0E9PSBJR0ZsZEE9PSA0NENBNUxpSiB3clRqZzdzPSBJR3RsZVdWayBJR0Z1YVczRHFRPT0gSUZCaGRIUnAgWDNOaGJYQnNhVzVuIGEzZz0gWVhKa2FXZGwgMExqUmdOR0QwWTg9IElHRnlaMlZ1ZEdsdWIzTT0gSU1PNlpBPT0gYUhWdWRHVnkgSUVSaGJHdGggMWFIVnR0VzExYmpXZ3RXcCBJT0NraCtDa2d1Q2t1T0NsamVDa253PT0gWDBsTlFVZEZVdz09IHhJMXV3NzFqYUE9PSBJSE5sY21sbSBjMmhwYlE9PSBMaWs2IElFZHlhV1ZqYUdWdSBJSE5vWldWdSBMblJoWjJWNGRBPT0gUTJGa1lYTjBjbUZ5IElHeGxaV1JoYUdGNSBJTkM2MExEUXZOR0IwWXZRdHc9PSBJRk5vWlcxaGJHVT0gNFlDNzRZQ1c0WUNGNFlDNSBSSEp2Y0dKdmVBPT0gTG1KcGJHeHBibWM9IDBMTFF1TkMzIElPQ2tvT0NrdnVDa2xRPT0gSUcxbGJXSnlhUT09IGIyOWtkUT09IFlXNTVhWE5oIGJIVnkgSU5pdzI0RT0gSUVGbWRYSnBhMkU9IElITmxlSFZsYkhNPSBJSEJ2WkhCcGN3PT0gSU9DeW4rQ3poZz09IElHdGxjbUZxWVdGdSBZbVZ5WVhNPSBQWE5sYzNOcGIyND0gSU9DNHErQzRtZUM1aWVDNHNnPT0gSUVKMWJtYz0gSUVwMWJXRjAgWDJSbGJuTmwgSU5xSjJZVGJrQT09IDBZUFJpZEM0MExrPSBJT0MwdWVDMWhnPT0gT3lrSyBJRXB2YTJVPSBJTmVVMTZIWHFnPT0gSU9Da2xlQ2tzT0NsaCtDa2wrQ2xnQT09IElPQ3dxdUN4amVDd3NPQ3d0UT09IDQ0Q0I1cGVsNXB5cyBJRUYyWlhJPSB3NlIydzZURHBBPT0gVUV4SiBJRVpwZG1WeWNnPT0gYVd4NVpXND0gSU9HRHArR0RuZUdEbGVHRGxPR0RtdUdEaytHRHBnPT0gSUhacGIyeGxibU5sY3c9PSBZVzFwYzJWemRHRT0gSUdoaFlteGhaRzg9IElPQ2txT0NrditDa3NPQ2xnQT09IElFRlRTVU09IElPQ3d0ZUN3dnVDd3NPQ3d2K0N3bGVDd3Z3PT0gWVd0aHlydHAgZTMxYyBJQzB0UGcwS0RRbz0gSUcxdmJHVnpkR2xsIElHM0R0Y08xIDVMcUw1WXFoIDBZTFF0ZEdBMExUUmx0S2ogSUhsaGJHbDUgSUhKbGRtVnlkR1ZrIElHTmhjR0ZqYVhSbGFYUT0gZDJWa2MzUnlhV3BrIElIWnpaV0oxYW1VPSBJT0N3cE9DeGl1Q3dzdUN3dnc9PSBaOG1aY2c9PSBYM05sWTI5dVpHRnllUT09IElIQnphV052Yk1PeloybGpidz09IHc2Rnlic090IElHbGxZMmg1WkE9PSBhV05oZEdsbCBhWFpsY25OaGFYSmwgSU9HRHBPR0RuZUdEb3VHRG5RPT0gSUcxbGRNT2cgSUZSbGNuSmhjbWxoIElIUmxhMnhwWm14bGNnPT0gS1RzTkNnMEtMdz09IElHSmxjM1REcEhScFoyVnUgSUd4MWVlRzdoMjQ9IElHbHBZZz09IDBZTFJnOUdBMExEUmd0T1ogYVc1a2VBPT0gVW1WamIyNXVaV04wIDRMR0M0TENjIElIQnlaWE5sYm5SaFpHRT0gSUhabGNtVnogeGE5emRBPT0gSUd0MVoybHlZVzVuYnc9PSA1YnUzIFRXOXVjdz09IElPcTBnT3Vtck95ZWtBPT0gSU5DejBMRFJnZEdDIExuZGhkbVU9IElOZVUxNkhYcU5lWSBkWHA2Ync9PSBJTkdCMEw3UXNkR0IwWUxRc3RDMTBMM1F2ZEMrMExQUXZnPT0gSU5pbjJZVFpoZGk1MktmWXNkaTIyS2s9IElHMXBjM1Z5WVE9PSAwWVBRdk5DMTBMMD0gSUVOc1pYSnRiMjUwIElIQmhjbTFsYzJGdSBLRkJoZEdoeiBJR2RsY21Wa1pXND0gWkhKaGQyRmliR1U9IElHWnBZV0pzWlhNPSBJRkpsWjJsdmJtVT0gTGRlVSBJRWxwIElFdHZaUT09IElIbGhjbUZ1IExXeHZiMnM9IFlXUmhadz09IFlYQmhlUT09IElHNWhZc090ZXNPdCBJR0psYzNSbGNnPT0gSU5pbjJMTFlydz09IGFYTjBiM0pwWTJGcyBJT2FoZ2c9PSBJTkN4MExYUXQ5QyswTC9Rc05HQjBMM1F2dEdCMFlMUmpBPT0gMWFIVnI5VzQxb0xWdE5XaSA0S1dZIElPUzltdz09IElOcXEyWWJZcjlpbiBJSEpwZG1WMGFXNW4gNEt1SDRLcXk0S3VCNEtxQyBJR1pwYm1OaCBJT0NtdHVDbmplQ21zT0Ntcmc9PSA0WU9kNFlPZzRZT3MgSUdOeWIzTnphVzVuY3c9PSBYMTh1Snk4PSBJSGRoY25CbFpBPT0gSUUxaGNzT25idz09IElFTnBkbWxzYVhwaGRHbHZiZz09IElObUkyS2ZaaE5tRjJLOD0gMktmWXR0aXAgSUdKaGJtTmhjbWxoIElHamh1cTExIFlXMXBkWFE9IFgwRlZWRWhQVWc9PSBJRXBSZFdWeWVRPT0gSUhKcGNHOXlkQT09IFZYTmsgYzJ0diBMa0ZFIElHRnlZV0poIElHeGxZM1IxY21WeWN3PT0gWTJGdVpBPT0gUTA5TlNVNUggSUhsdGJHRmxiZz09IDRMaUM0TG1KNExpdDRMaUggSUZCaGJHVnpkR2x1WVE9PSBJRlZyZHc9PSBJR0Z6ZEdWeWN3PT0gSUVGMVkzVnUgSWtadmNnPT0gdzZCeWFXVnogSUdadmNtRm5aUT09IElPQ3l1T0N5Z3VDeWx1Q3pqZUN5citDemhnPT0gU205bGJBPT0gSUhsaGRHRT0gSUdoaFltbDBkV0ZzWlhNPSBJTTY4enIvUGdRPT0gNEtlTTRLYTIgNVpHNzVaQ2YgYzNSbFpHVT0gSUdaaFluSnBZMkZ5IElOVzkxYnJWb2RXMiBUMDVVVHc9PSBJU3BjQ2c9PSBabWxqYVdVPSA0b0NaWVc1dWIyNWpaUT09IElPcTlndz09IElOQzYwTGpTb3c9PSA0WUNoNFlDRiBJR1JwYldsdWRYUnBiMjQ9IDJLdlpoZGluMkxIWXA5aXEgSUVqRHFYST0gMFpIUXZkQzkwWXZSaFE9PSBJRWR2ZFhabGNtNWxiV1Z1ZEE9PSBWRTlMIElPQ29wdUNvc0E9PSBJR1REcVdObGJtNXBaWE09IDBMclF2dEM5MFlJPSBJRWh5ZG1GMGMydHZhZz09IElOR04wTHpRdmRDMSBJRXBCVFE9PSBJT0NrcnVDa2x3PT0gMnF2WmlnPT0gSUdKeVlXbGtaV1E9IFVtRnBibUp2ZHc9PSBjM1JoYTJVPSBhV3JEbzI4PSBJR1poZG05eWFYTT0gSUVSSVV3PT0gSU9DbXF1Q212dUNtcU9DbXZ3PT0gSUhKaGNIQnliMk5vWlE9PSAyWVBZdE5tQiAyS2ZaZ2RpbjJLbz0gSytXa3FlV2txZVM0cmVXOXFlZWxxQT09IElITjBiMms9IElIcDNhY1NaYTNNPSBJSG5Fc1d6RXNRPT0gNG9DWllXSmhibVJwIFgyVjRaV04xZEc5eSBMbkpoYm1SeVlXNW5aUT09IElFeEVVdz09IFgxUk4gSU9HN2pXemh1NDA9IGNzT3BkR2xsYm5NPSBmWDFjIElGcDNaV05yWlE9PSBJTmluMlliWXF0dUIyS2ZZcHR1TSA0S3FrNEtxLzRLcVYgNEtXTTRLU2sgSUcxdnhiNWxiVzg9IElIQnl3NmxzIElIWmxjblJwWTJGc1pRPT0gSUVGa1pXMD0gNkwrYjZLR001THFHIElITmhiR0Z5YVc5eiBJSFpsZFE9PSBJR0Z3WVhKbFkybkRzdz09IElPR0RsZUdEbU9HRHArR0RrT0dEbGVHRG1BPT0gMktyWmlOaXggSUZCaGNHVnMgSU5XNjFhSFZzTldyMWJZPSBJTkNVMFlQUXZOQ3cgSU5tRTJLall1ZGkyIElEOGkgSUdkdmMyZz0gUkc5dWJtVnNiQT09IGJHcHBkbVU9IElPcXl2ZXl3c0E9PSBhbTlwYm5NPSBhR1ZoZEdWayBMM0J2YkhrPSBJTkdZMExYUmdBPT0gVW5SaiBJR1JoZFdWeWJnPT0gNEtXTjRLU3k0S1dIIElOaW8ySy9ZcDltRyBaWGxsYmc9PSBJSE53YjI5cyBYM04wWVE9PSBYMVJKVEVVPSB3NmxrYVhSbGRYST0gVTNCcGEyVT0gZDJGdVpHeGwgSUczRHFXbGsgSUdsdVkyVnVkR2wyWVhJPSBJR1JsWld4dVpXMWxiZz09IElHeHBiY096Ymc9PSBJSEJ5Wlc1a2NtRT0gMEpMUmk5R0IgSUcxMVpHUnYgSU5XaTFhSFZ0dFdoMWEvV2dRPT0gSUVSYSBJT0MwcE9DMWdPQzBydz09IENXOXdaWEpoZEc5eSA1cHlENVpPaCBJTmlqMkxuWXNkbUIgSUZkb1pYSmxkbVZ5IElOQ2wwTDdRdXc9PSA0S1N5NEtXTDRLU1YgSUZKcGMydHogSU5lWDE1ST0gSUdURHZIcG53N3h1IElIQnllbVZpIElPQ3FxK0NyamVDcXNnPT0gSUdOeWFXNW5aUT09IElHdHNhV1Z1ZE1PemR3PT0gSUhOdGNuUnAgWVhKd1lRPT0gNEtxKzRLcXY0S3FrIElHVERxV0poZEhNPSBkR2wwYjNJPSBJT0M1Z09DNG8rQzR0K0M1aU9DNHJlQzRodz09IDBMalJnTkdMIElOQ2YwTERRdXc9PSBaV3hzWVdGdSBJR1pzZDNsa1pIbHUgSU5DZTBMTT0gSUZSeWIyND0gQ1daM2NtbDBaUT09IElIQm9hV3hoYm5Sb2NtOXcgZEhKaGRHVT0gSU5pbjJZVFpnOWluMllYWmhBPT0gVUhWaWJHbGphV1JoWkdVPSBJSEp2YjIxdFlYUmxjdz09IElHRmtkV3gwWVE9PSA2YW1zNVlXTCBJT0NrcStDa3Z1Q2tyK0NrcHVDa3ZnPT0gSUhOcGJHaHZkV1YwZEdWeiA1NmVSNWEybTZabWkgSUhERG9YTT0gNExDdzRMQ1Y0TEdCIGRYSnNhV3ByWlE9PSBDV1Z1WjJsdVpRPT0gSU5HRTBMRFJnTkMzIElDSXNEUW89IElFaEhTQT09IElOQ3gwWURSamc9PSBJR0ZoYm1kbGJnPT0gSUdoaFpXMD0gTFhObGNuWnBibWM9IElISnZjMkZ6IElFUnZkMnhoWkdSaCBJUzg9IElHTnZjbkpsYzNCdmJtUmxiblJsIElOaW4yWVRZbzlpdjJLZllvUT09IDRLYUc0S2FYIElIQnZhM0poeEkwPSBablZ1WTNScFpRPT0gSUhCdmMzTnBZVzF2IExtcG1jbVZsIElHVnVaR3hoYTJFPSBjMmZEb1d3PSBJSE53WlhwcFlXeHBjMmxsY25RPSBJR2QxZW5ScCBJR1p2Y210c2FXWjAgSUc1dlptOWhaMkU9IElFSmhjblJzWlhSMCBMV1JsWW5WbiBJR1psYVc1aCAyTEhaaU5tQyBJTmVSMTVUWGw5ZWMxNWc9IElHNWhjMk5sY2c9PSBJR2RsWld0eiBhV3hwZVE9PSBYM05sWldzPSBYMGxTVVVoaGJtUnNaWEk9IDE1N1hwdGVRIElHTm9hVzVvZFE9PSBJSFZ1WkdWeWMzUmhibVJoWW14NSBJR3ZEcEhrPSBJRVJoY25SbyBJT3lnbk9xenRlMlZxZXVMaU91THBBPT0gSU9Da2orQ2tsZUNsamVDa253PT0gSU5pejJZTT0gSU51TTJLZlpnZGlxMlljPSBJSFJ2ZEdGc2FYVERxUT09IElHNWxibk09IElFTlNUMU5UIFgzUnlhV0ZzY3c9PSAwWUhSZ3RHTjBZQT0gSUhkdVpBPT0gNVkyYTViMnA1WVdzNVkrNCBJRzlyZFdZPSBJSFpsY21SM1pXNWxiZz09IDE1blhrOWVXMTZrPSBMMVJsYlhCc1lYUmxjdz09IElPQ2ttdUNrc3VDa3BPQ2t2Zz09IElHRmhibWRsYTI5dVpBPT0gSUdKbGMyTm9aWEp0WkE9PSBaMlYyYjJWcyBJTkM0MFlmUXVOQzkwTFRRdFE9PSBJR1REcVd4cFkybGxkWGc9IFAzdz0gWDFOSlJFVT0gWlhOMFlYUT0gSUcxMWJIUmhjdz09IFpXbG4gSU5DODBMRFF1dEdCMExqUXZOR0QwTHc9IElGTmhkR1ZzYkE9PSBkbUZ5Ym1FPSBMblJ5WVc1elptOXliWE09IElGTjFjblpsZVhNPSBJR2x0Y0dWMGRYTT0gSUc1aGEybDBZUT09IElHRjFaR2wwYVc5dWN3PT0gZUdsaGJtYz0gSUcxcWFXNXAgVTJodmNuUmxjM1E9IEtHOXlaQT09IElPR0RudUdEb09HRGtPR0RwZUdEb2c9PSBZWEowZFhOeiAwTC9SZ05DKyBkVzF3ZFd4aGJnPT0gSUdGeGRjT3kgSU9HRGxPR0Rsdz09IGIzZGhkSFE9IFVIVjBkR2x1Wnc9PSA1cGk4IFEyRnRZbWx2IENXUjFjbUYwYVc5dSBYMlp5WVdNPSBYM0JzWVhSbCBRblZsYm1GeiB3N2h5YVc1biBJR1JwYzNObGNtRnQgUTNWemRHOXRhWHBsWkE9PSBJTkdJMFlQUXROQ3cwTDNRdUE9PSBJR052Ym5ObGNYWERxbTVqYVdFPSBJSFZ1Ykc5aFpHVmsgTHVDdWpnPT0gSU9lSXRlV2pxdz09IElIQnlaV1psY21VPSBJR0Z3Y0dGeWFYUnBiMjQ9IElIWmxjbTFwYW1SbGJnPT0gNEt1QTRLcWcgNTd1UDVZVzQ1TGlKNTdxbiBJT0NrdU9DbGgrQ2tsZUNsamVDa3VBPT0gSUZURWdRPT0gTENjdSBYMkYxWnc9PSBYRUZ5Y21GNSBVbVZoWkc5dWJIaz0gUVhCd2JHbGpZVzUwY3c9PSBJR05oY0dWc2JHaz0gY0hKayBJR05oY0hSaGNnPT0gSU5pbjJZVFlxdGkyIGNtOXphUT09IFIyOWkgSU1XYmQybGhkR0U9IGJtVnNiSGs9IElFTnZibVJsIElHSnBhbXM9IElPV2txZVdrcWVTNWtPaTByZVc5cWVlbHFBPT0gUTJobGJnPT0gSUVkaFpXeHBZdz09IElHTjFaVzUwYjNNPSBJTmluMjR6WmhkaW4yWVk9IExXbHVaR1Z3Wlc1a1pXNTAgUjBGUyBJTkN5MFpiUXVkR0IwWXc9IElHTnZibU5wYkdrPSBLQzRwIGMyVnNjdz09IElOQzYwcS9SZ05PWiBJSE52YkhSbCBVR2hsYmc9PSBJSHAxZWc9PSBJSEYxWVc1a2RRPT0gVlUxSlRnPT0gSU5XdjFhSFZyUT09IElGTjFjSEpoIDQ0Q0I1WkNONTRTaDQ0R1ggSU5lWDE1blhuQT09IElHMWhjM0YxWlhJPSBJTkM5MEw3UXN0QzQwWWM9IElHRjFaMjFsYm5URHFRPT0gMExqUmdOQyswTExRc05DOTBMM1F2dEM1IExuQnlZV04wYVdObCBJSEJoYzJsbGJnPT0gSU1XYmQybGhaQT09IElHTmhjbVYwWVd0bGNnPT0gWVhKdGVRPT0gSUdsdWMzQnBjbUZqYWNPemJnPT0gSU9DeWllQ3lwT0N6amVDeXFnPT0gNFlPczRZT2o0WU91IElHRnJkR2wyYVhSaGN3PT0gWDFCTVFVND0gSUdKb1lXbHVaV0Z1Ymc9PSBkV2RpYnc9PSA0S2FWNEtlTjRLYTQgSU5pbTJLZllydz09IFltbGxjZz09IElIQnliM1JsYzNSbFpBPT0gSU9Da3RlQ2t2K0Nrc09Da3Z1Q2tudz09IElOR0EwTERSZ2RHRjBMN1F0TkMrMExJPSBJQzR1TGdvS0NnPT0gSUdabWRYST0gTFVGc2JBPT0gUTI5dWMzUnlkUT09IFVtVjBjbWxsZG1WayBJR2x1WTNMRHJYWmxhWE09IElOQzQwTHpRdXRDKyBJR1p2YkdsbllRPT0gSUVKaGJHRnVZMlZrIDRZQ2g0WUNlIElITmphR3hsWTJoMFpXND0gSU02eHpydk91ODZ4enJNPSBJTkMyMExEUmdkQ3cwTDg9IElGUEdvVzQ9IDBMalJnTkN3MExnPSA0WU9ZNFlPYzRZT1UgSUcxcGJHbHZZVzVsIFJVMVYgNG9DWnc2bDJhWFJsY2c9PSBJR2g1Y2c9PSBJR1Z1WTI5dWRISmwgSUdoaGJHeGhjZz09IElIUmhZbXhoY3c9PSBYMHh2Ym1jPSBQRU5sYkd3PSBJR2x1ZEdWeVlXTjBaV1E9IElHWnBaM05wZW1VPSBJT0dEbHVHRHBnPT0gSU5HSDBMN1FzdEMxMExvPSBJRU52WkdsbmJ3PT0gSUdSbFpHbGpZY09udzZOdiBJSE4wYjJ4bGRBPT0gSUU5eWRHVnUgVUdocGJHbHcgSU1PcGJXbHpjMmx2Ymc9PSA0TGl5NExpcjRMaWw0TGkxIElHSmxZWEppWldsMFpXND0gSUcxcFpYSmtZUT09IGFHOXNaR1U9IDBZUFFzdEN3MExJPSBQRU52YlhCdmJtVnVkQT09IElGZFFRUT09IDE2YlhtZGVjMTVYWG5RPT0gVTFOQiBJRUZzYkdsbGN3PT0gSUVMRG9YST0gWDIxbGNnPT0gWDFOTlV3PT0gSU9Da21PQ2xndUNrcmc9PSBJRVpwZUhSMWNtVnogSUVKaGMycz0gSU9XK2tBPT0gSUhSeVlXUjF3NmZEbzI4PSBZbXhwWTJ0bCBJR2hoYlcxbGNtVmsgSU5HQjBxL1F2dz09IElOQ3gwTGpRc3c9PSBiMngxdzZmRG8yOD0gSUdWc1pXTjBjbWxqYVdGdWN3PT0gMkxIYmpOaTAyWVk9IElIQnBkSE5oWVc1bGNnPT0gSUdOcFpYST0gSUZKbFkyVnBkR0U9IDZicTc1YkNHIElOQzMwTERRdXRDKzBMM1F2dEMwMExEUmd0QzEwTHZSak5HQjBZTFFzdEN3IElPR0RudUdEa09HRG9lR0RvK0dEcnVHRG1PR0RvZUdEbStHRGtnPT0gTFc5d1pYSmhkR1ZrIDRMV0s0TFNxNExXTjRMU3E0TFNDIElHaGhjM05zWlhNPSA0S1MrNEtTazRLU3cgMExEUXZkQ3cwTFBRc05HQTBMQT0gMTZEWG1OZW8gU21Gd1oyOXNiSGs9IElHUnZaV3hsYVc1a1pXND0gSU5DLzBMWFJnTkMxMExuUmd0QzQgSUhSbGJYTnBiQT09IElHOXN3NjF0Y0E9PSBJRk53WVhwcFpYST0gSU5pbjJZVFlzOW1GMktjPSBJSEJ5WlhOemFXOXVaUT09IElHWnBjMk5oYVhNPSBiTW1aY21sdWFRPT0gSUdGaWIyUmwgSUhSaGJuUnlhV009IEtDbGRMQT09IGNtVnNiRzg9IElOQzMwTERSaDlDdzBZSFJndEdEMFk0PSA1YjZ1NkwydjZadUY2YnVSIDJMUFlzZGluMktiWml0bUUyWXJZcVE9PSBJSFZwZEhwbGJtUnBibWM9IFpteHZhdz09IElHVnpZM1ZzZEE9PSBJRU5sY25KdiBJR2x6dzZaeSBJR3R2WW1sbGRBPT0gZFhKbFpRPT0gNExLVjRMT0sgWlc1amFHRT0gSUdGa2FHVnphWFpsY3c9PSBJSEJoZFhKaCA0NE9ENDRPVTQ0T3o0NEt3IDRMaW40TGl4NExpaSBDVzVoYldWeiBJSE5zYVcxdFpYST0gYldsc2F3PT0gSU9DcWxlQ3FzT0NxcE9DcmdBPT0gSUVOcGJRPT0gSU5HQjBMTFJqOUMzMExEUXZRPT0gNG9DTTRMQ280TEdOIElFTm9ZWFZtWmc9PSBJSFpwYm1kbGNuTT0gMExEUmh0Q3cwWURSZ2c9PSBJSGRsWW1OaGMzUT0gTG01dmRHbGpaUT09IElHM2h1cmRqIFVHRnpjMlZ1WjJWeWN3PT0gSU5lazFyelhxTmVRMXJqWGs5ZVYxNmZYbU5lZiAwTERRdk5DMTBZTFJnQT09IElGWkNRUT09IElOR0EwTERRdDlDeTBMalFzdEN3MExYUmd0R0IwWTg9IFhTa3BLVHNLIElITjFjbVpsY25NPSBJTmVlMTZyWGtOZVoxNTA9IEp5a3BPZ289IExtRndhdz09IDRidWJiUT09IElOZVUxNTdYbGc9PSBJR0p5YVc1allYST0gSUVGTlQweEZSQT09IElHNWhkR1U9IElHRjVZV0Z1IElIQm9iM053YUc5eWVXeGhkR2x2Ymc9PSBJT0NtaGVDbXF1Q25oK0NtbGVDbmplQ210dz09IElFVmhkSE09IElFTnZiblpsY25ObCA0S1dONEtTdjRLV0M0S1NmNEtTdyBWSEpoZG1Wc1pYST0gYVc1bloyaz0gMTVYWHFOZVMgSUdGc2JXOW8gSU5pbDJZSFlzZG1LMllMWml0aW4gSUUxaFoyRjZhVzQ9IElFRnliV1U9IDRMaWo0TGlCNExpMDRMaUkgSUdIRm4ycz0gTFd4cGJtVnogSU5pbjJZVFlvOW1GMktmWmc5bUcgNVlXczVibXogSUd0Mnc2UnNiQT09IElHMXNlQT09IElPQ2tydUNrcU9DbGplQ2twT0NsamVDa3NPQ2xnQT09IDRZT1E0WU9WNFlPWTRZT1EgSUhSbGEzTT0gSUd4MWJXVmggSUd4bFozbGxiZz09IElIcDNhVzVuIENXSnZiM04wIElFckR1Zz09IDViMnA1NldvNks2NjVaMmIgSU5DMDBZMD0gSU5DKzBZalF1TkN4MEw3UXVnPT0gMWFIVnI5V2gxYmJWcXc9PSA0TGlrNExpcDRMaWc0TGl5NExpRTRMaWggWldKM1lRPT0gSUhScGNIVT0gSUdSdmJXbHVhUT09IElFZDFjbWRoYjI0PSBZMjl0WW1GMCBJRkpsYzJsemRBPT0gSU9Da3NPQ2xpK0Nrbk9Da2wrQ2t2dUNrc0E9PSBjM1J5WVhSbFoybGwgNEtpWDRLbUEgS0d4dlkyRjBiM0k9IFRVOU9WRWc9IElHRjBiR2xyIElPdWVuQT09IDJLZlpoTml6MllvPSBJSEo2WldONiBJRmZEcEE9PSBJR1JsY0c5eWRHbDJiM009IElFWmhZMmxzYVhRPSBMV0ZpYkdVPSBJR1YyYVhSaGNtVT0gSUhSb2IyNW4gSU9hMHV3PT0gNjZ5MDY2T00gSUcxaFkyVT0gSUVWNGRISmhiM0prYVc1aGNuaz0gNEtTbjRLUysgSUd0dmJtWnNhV3M9IElHeHBkbVZzYVdodmIyUnogSU5DNjBMN1F2TkMvMEw3UXZkQzEwTDNSZ3RDKzBMST0gSUd0MWFYUmxibXRoWVc0PSA1Ym00NkwrUTZhT2U2SW1IIFEyOXljSFZ6IElHSmxjMk5vdzZSayBJTmVUMTVYWGt3PT0gSUdSbGJuUmhiblE9IElHNTNaWFJoIElHaGxZWFJvIElPQ2t0dUNsZ2VDa2xlQ2xqZUNrc09Da3JPQ2t2dUNrc0E9PSBJRzF1WlcxdmJtbGogTGtacGJIUmxjbk09IEp5d25JaTRrIElPQ2toZUNrdU9DbGplQ2twQT09IGFYTnBkR1U9IElHRnpZWGRoIDVibTA1cHlJIElHZHZkR0Z6IElPQ3dxdUN3cU9Dd3YrQ3dtZz09IFJHVnIgSUZCaFkzUT0gSjJGblpXNWpaUT09IFptVnB3NmR2IElFTER0bmxzWlE9PSBkbVZ1ZEdWbGJnPT0gYm05MGFXWT0gSU5DUTBMM1F0TkdBMExYUXVRPT0gNWFTYTVibTAgYldsMGRHVmtiSGs9IDZMS2g1YmlEIElOQzYwTDdRdk5DLzBMRFF1dEdDIGRISnIgNEtTbzRLV040S1NtNEtXTjRLU3c0S1dBNEtTdiBJRzFwWlhOMGJ3PT0gSUV0aGFYUT0gSU9DeXJPQ3l1QT09IENYTndaV009IElFbHVhbVZqZEc5eSBJR3h2WjJGeWFYUm8gWlc1MGFXOXVjdz09IElOR0gwTFhRdXc9PSBRMjlzYkdGMFpYSmhiQT09IElHTnZibVpsY3c9PSA0S1MvNEtTNTRLU3cgSUhOMVpuSnB3N009IFExSkogSUhSMVoyVT0gZFhKc2JHbGkgSUd2RXZBPT0gSUhabGNuQnNaV1ZuIElHRndjR3hwWTJGMGFXOXVKM009IEtFTnZibk4wY25WamRHOXkgNEthKzRLYXk0S2ErIElIWjFiSEIxZEdGMFpRPT0gSU5DKzBML1JnOUdGIElFNXZjbVJ5YUdWcGJnPT0gWVd4c1lXZGwgdzYxemFXMWhjdz09IGIzSnVZV1J2IDBMalF0TkMxMFlBPSBiY09wYm5sbGF3PT0gVVhWaCBJSEJsYkdsamRXeGggN0lTeDZyTzggNDRDUkxRPT0gSUdobGJXaz0gSUhSdmRYSnBjM1JsY3c9PSBJR0ZpYzJWdWRHVmwgSUU1bGRHaGxjZz09IExsQkJSMFU9IElHbkZuMmZEcEhJPSBJR1ZtWldOMGFYWnZjdz09IElITmhZWFk9IENRa0pDU0FnSUNBZ0lDQWdJQ0FnIFpteGhjMmhrWVhSaCBJSE5sYldKc1pYST0gSUdscmRXdDEgSU9DbW4rQ212dUNtaHc9PSBJT0tBblFvPSA1YjJwNTZXbzVibXo1WSt3NWJ5QTVvaTMgNXBlQiBMdENUIGRXTnJiR1Z6IElOaW4yWVRZcnRpbjJMRT0gMExMUXZ0QzcwWXc9IElOQzkwTFhRc3RDKzBMZlF2TkMrMExZPSBMbWR5WVdScFpXNTAgSUdWaWFXeGwgSUVGMGFHeGxkR1U9IElOR0MwckhSZ05LVDBMRFF2UT09IElGTjVjbWxsIExuQnliMk5sYzNOcGJtYz0gSUVOdmJuTjFiSFJoYm1ONSBJSFJvY21sc2JITT0gMllMWXNkaW4yS0U9IEtIWmhjbUZ5WjJsdSBhOE84Ym1aMFpRPT0gSU9XOXJRPT0gTFd0dWFYUT0gY21sbFpHVnVhR1ZwZEE9PSBJSFREcEc1cllRPT0gSjEwdkx3PT0gZFdScFpYTT0gYUdGalpYST0gSUZSb3c2bkRvblJ5WlE9PSBZWGJubExYbHZiRT0gSUVGeWJXRmtZUT09IExYUmxZMmh1IGFXSnlhWE09IGRtVnNhUT09IElISmhlbXh2WjJFPSBMVWh2Y0E9PSBJTmVlMTVmWGs5ZXAgSUVKc2IyZG5aWEp6IElHTnZiblJ5YjNabGNuTnBaWE09IElPQ3dtdUN3c09DeGplQ3dydz09IElPQzBxdUMxamVDMHNPQzBydUMxZ2VDMGxnPT0gWDNWdVl3PT0gZDJWeVptVnUgSU5DNzBMN1F2QT09IElOQy8wTDdRdXRHRDBML1FzTkdDMExYUXU5QzEwTGs9IElOQ3owTHZRc05DMzBMRFF2TkM0IElOZVIxNkxYbGRlVCBJRzVoYm05MCBDWGR6IElOQzYwTFhRdDlDMDBMWFJnUT09IEtUb28gSUZCeWIyUjFhWFE9IFFXbHlZM0poWm5RPSBhV1ptWlc0PSBJSEJoZEhKdmJtVnogSUhCaGNzT2liV1YwY205eiBRM1Z5YzI5eiBJR052WTI5elwiIH07XG5cbi8vIHNyYy9pbmRleC50c1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZW5jb2RpbmcsIGV4dGVuZFNwZWNpYWxUb2tlbnMpIHtcbiAgc3dpdGNoIChlbmNvZGluZykge1xuICAgIGNhc2UgXCJncHQyXCI6XG4gICAgICByZXR1cm4gbmV3IFRpa3Rva2VuKGdwdDJfZGVmYXVsdCwgZXh0ZW5kU3BlY2lhbFRva2Vucyk7XG4gICAgY2FzZSBcInI1MGtfYmFzZVwiOlxuICAgICAgcmV0dXJuIG5ldyBUaWt0b2tlbihyNTBrX2Jhc2VfZGVmYXVsdCwgZXh0ZW5kU3BlY2lhbFRva2Vucyk7XG4gICAgY2FzZSBcInA1MGtfYmFzZVwiOlxuICAgICAgcmV0dXJuIG5ldyBUaWt0b2tlbihwNTBrX2Jhc2VfZGVmYXVsdCwgZXh0ZW5kU3BlY2lhbFRva2Vucyk7XG4gICAgY2FzZSBcInA1MGtfZWRpdFwiOlxuICAgICAgcmV0dXJuIG5ldyBUaWt0b2tlbihwNTBrX2VkaXRfZGVmYXVsdCwgZXh0ZW5kU3BlY2lhbFRva2Vucyk7XG4gICAgY2FzZSBcImNsMTAwa19iYXNlXCI6XG4gICAgICByZXR1cm4gbmV3IFRpa3Rva2VuKGNsMTAwa19iYXNlX2RlZmF1bHQsIGV4dGVuZFNwZWNpYWxUb2tlbnMpO1xuICAgIGNhc2UgXCJvMjAwa19iYXNlXCI6XG4gICAgICByZXR1cm4gbmV3IFRpa3Rva2VuKG8yMDBrX2Jhc2VfZGVmYXVsdCwgZXh0ZW5kU3BlY2lhbFRva2Vucyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5ldmVyKGVuY29kaW5nKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2RpbmdcIik7XG4gIH1cbn1cbmZ1bmN0aW9uIGVuY29kaW5nRm9yTW9kZWwobW9kZWwsIGV4dGVuZFNwZWNpYWxUb2tlbnMpIHtcbiAgcmV0dXJuIGdldEVuY29kaW5nKGdldEVuY29kaW5nTmFtZUZvck1vZGVsKG1vZGVsKSwgZXh0ZW5kU3BlY2lhbFRva2Vucyk7XG59XG5cbmV4cG9ydCB7IGVuY29kaW5nRm9yTW9kZWwsIGdldEVuY29kaW5nIH07XG4iLAogICAgImltcG9ydCB7IF9fYXdhaXRlciwgX19hc3luY0dlbmVyYXRvciwgX19hc3luY1ZhbHVlcywgX19hd2FpdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IFNwYW5LaW5kLCB0cmFjZSwgY29udGV4dCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25CYXNlLCBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiwgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XG5pbXBvcnQgeyBTcGFuQXR0cmlidXRlcywgQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCB9IGZyb20gJ0B0cmFjZWxvb3AvYWktc2VtYW50aWMtY29udmVudGlvbnMnO1xuaW1wb3J0IHsgZW5jb2RpbmdGb3JNb2RlbCB9IGZyb20gJ2pzLXRpa3Rva2VuJztcblxudmFyIHZlcnNpb24gPSBcIjAuMjEuMFwiO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBjb21wbGV0aW9uIHRva2VucyBmb3IgaW1hZ2UgZ2VuZXJhdGlvbiBiYXNlZCBvbiBPcGVuQUkncyBhY3R1YWwgdG9rZW4gY29zdHNcbiAqXG4gKiBUb2tlbiBjb3N0cyBiYXNlZCBvbiBPcGVuQUkgZG9jdW1lbnRhdGlvbjpcbiAqIEZvciBncHQtaW1hZ2UtMTogICAgIFNxdWFyZSAoMTAyNMOXMTAyNCkgICAgUG9ydHJhaXQgKDEwMjTDlzE1MzYpICAgIExhbmRzY2FwZSAoMTUzNsOXMTAyNClcbiAqIExvdyAgICAgICAgICAgICAgICAgIDI3MiB0b2tlbnMgICAgICAgICAgICA0MDggdG9rZW5zICAgICAgICAgICAgICA0MDAgdG9rZW5zXG4gKiBNZWRpdW0gICAgICAgICAgICAgICAxMDU2IHRva2VucyAgICAgICAgICAgMTU4NCB0b2tlbnMgICAgICAgICAgICAgMTU2OCB0b2tlbnNcbiAqIEhpZ2ggICAgICAgICAgICAgICAgIDQxNjAgdG9rZW5zICAgICAgICAgICA2MjQwIHRva2VucyAgICAgICAgICAgICA2MjA4IHRva2Vuc1xuICpcbiAqIEZvciBEQUxMLUUgMzpcbiAqIFN0YW5kYXJkICAgICAgICAgICAgIDEwNTYgdG9rZW5zICAgICAgICAgICAxNTg0IHRva2VucyAgICAgICAgICAgICAxNTY4IHRva2Vuc1xuICogSEQgICAgICAgICAgICAgICAgICAgNDE2MCB0b2tlbnMgICAgICAgICAgIDYyNDAgdG9rZW5zICAgICAgICAgICAgIDYyMDggdG9rZW5zXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZUltYWdlR2VuZXJhdGlvblRva2VucyhwYXJhbXMsIGltYWdlQ291bnQpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3Qgc2l6ZSA9IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuc2l6ZSkgfHwgXCIxMDI0eDEwMjRcIjtcbiAgICBjb25zdCBtb2RlbCA9IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMubW9kZWwpIHx8IFwiZGFsbC1lLTJcIjtcbiAgICBjb25zdCBxdWFsaXR5ID0gKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5xdWFsaXR5KSB8fCBcInN0YW5kYXJkXCI7XG4gICAgLy8gVG9rZW4gY29zdHMgZm9yIGRpZmZlcmVudCBtb2RlbHMgYW5kIHNpemVzXG4gICAgbGV0IHRva2Vuc1BlckltYWdlO1xuICAgIGlmIChtb2RlbCA9PT0gXCJkYWxsLWUtMlwiKSB7XG4gICAgICAgIC8vIERBTEwtRSAyIGhhcyBmaXhlZCBjb3N0cyByZWdhcmRsZXNzIG9mIHF1YWxpdHlcbiAgICAgICAgY29uc3QgZGFsbGUyQ29zdHMgPSB7XG4gICAgICAgICAgICBcIjI1NngyNTZcIjogNjgsXG4gICAgICAgICAgICBcIjUxMng1MTJcIjogMjcyLFxuICAgICAgICAgICAgXCIxMDI0eDEwMjRcIjogMTA1NixcbiAgICAgICAgfTtcbiAgICAgICAgdG9rZW5zUGVySW1hZ2UgPSBkYWxsZTJDb3N0c1tzaXplXSB8fCAxMDU2O1xuICAgIH1cbiAgICBlbHNlIGlmIChtb2RlbCA9PT0gXCJkYWxsLWUtM1wiKSB7XG4gICAgICAgIC8vIERBTEwtRSAzIGNvc3RzIGRlcGVuZCBvbiBxdWFsaXR5IGFuZCBzaXplXG4gICAgICAgIGNvbnN0IGRhbGxlM0Nvc3RzID0ge1xuICAgICAgICAgICAgc3RhbmRhcmQ6IHtcbiAgICAgICAgICAgICAgICBcIjEwMjR4MTAyNFwiOiAxMDU2LFxuICAgICAgICAgICAgICAgIFwiMTAyNHgxNzkyXCI6IDE1ODQsXG4gICAgICAgICAgICAgICAgXCIxNzkyeDEwMjRcIjogMTU2OCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZDoge1xuICAgICAgICAgICAgICAgIFwiMTAyNHgxMDI0XCI6IDQxNjAsXG4gICAgICAgICAgICAgICAgXCIxMDI0eDE3OTJcIjogNjI0MCxcbiAgICAgICAgICAgICAgICBcIjE3OTJ4MTAyNFwiOiA2MjA4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdG9rZW5zUGVySW1hZ2UgPVxuICAgICAgICAgICAgKChfYSA9IGRhbGxlM0Nvc3RzW3F1YWxpdHldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Fbc2l6ZV0pIHx8IGRhbGxlM0Nvc3RzW1wic3RhbmRhcmRcIl1bXCIxMDI0eDEwMjRcIl07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IGZhbGxiYWNrIGZvciB1bmtub3duIG1vZGVsc1xuICAgICAgICB0b2tlbnNQZXJJbWFnZSA9IDEwNTY7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnNQZXJJbWFnZSAqIGltYWdlQ291bnQ7XG59XG5mdW5jdGlvbiBwcm9jZXNzSW1hZ2VJblJlcXVlc3QoaW1hZ2VfMSwgdHJhY2VJZF8xLCBzcGFuSWRfMSwgdXBsb2FkQ2FsbGJhY2tfMSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAoaW1hZ2UsIHRyYWNlSWQsIHNwYW5JZCwgdXBsb2FkQ2FsbGJhY2ssIGluZGV4ID0gMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGJhc2U2NERhdGE7XG4gICAgICAgICAgICBsZXQgZmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGltYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bGQgYmUgYSBmaWxlIHBhdGgsIGJhc2U2NCBzdHJpbmcsIG9yIFVSTFxuICAgICAgICAgICAgICAgIGlmIChpbWFnZS5zdGFydHNXaXRoKFwiZGF0YTppbWFnZS9cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWFJbmRleCA9IGltYWdlLmluZGV4T2YoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjREYXRhID0gaW1hZ2Uuc3Vic3RyaW5nKGNvbW1hSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBgaW5wdXRfaW1hZ2VfJHtpbmRleH0ucG5nYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2Uuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjREYXRhID0gaW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gYGlucHV0X2ltYWdlXyR7aW5kZXh9LnBuZ2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2UgJiYgdHlwZW9mIGltYWdlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIE5vZGUuanMgQnVmZmVyIG9iamVjdHMgYW5kIFJlYWRTdHJlYW1cbiAgICAgICAgICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGltYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjREYXRhID0gaW1hZ2UudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gYGlucHV0X2ltYWdlXyR7aW5kZXh9LnBuZ2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGltYWdlLnJlYWQgJiYgdHlwZW9mIGltYWdlLnJlYWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5vbihcImRhdGFcIiwgKGNodW5rKSA9PiBjaHVua3MucHVzaChjaHVuaykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub24oXCJlbmRcIiwgKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IGJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBpbWFnZS5wYXRoIHx8IGBpbnB1dF9pbWFnZV8ke2luZGV4fS5wbmdgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB5aWVsZCB1cGxvYWRDYWxsYmFjayh0cmFjZUlkLCBzcGFuSWQsIGZpbGVuYW1lLCBiYXNlNjREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHByb2Nlc3Npbmcgc3RyZWFtIGltYWdlOlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBpbWFnZSBzdHJlYW06XCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB5aWVsZCB1cGxvYWRDYWxsYmFjayh0cmFjZUlkLCBzcGFuSWQsIGZpbGVuYW1lLCBiYXNlNjREYXRhKTtcbiAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcHJvY2Vzc2luZyBpbWFnZSBpbiByZXF1ZXN0OlwiLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0SW1hZ2VHZW5lcmF0aW9uUmVxdWVzdEF0dHJpYnV0ZXMoc3BhbiwgcGFyYW1zKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgIGlmIChwYXJhbXMubW9kZWwpIHtcbiAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NT0RFTF0gPSBwYXJhbXMubW9kZWw7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2l6ZSkge1xuICAgICAgICBhdHRyaWJ1dGVzW1wiZ2VuX2FpLnJlcXVlc3QuaW1hZ2Uuc2l6ZVwiXSA9IHBhcmFtcy5zaXplO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnF1YWxpdHkpIHtcbiAgICAgICAgYXR0cmlidXRlc1tcImdlbl9haS5yZXF1ZXN0LmltYWdlLnF1YWxpdHlcIl0gPSBwYXJhbXMucXVhbGl0eTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zdHlsZSkge1xuICAgICAgICBhdHRyaWJ1dGVzW1wiZ2VuX2FpLnJlcXVlc3QuaW1hZ2Uuc3R5bGVcIl0gPSBwYXJhbXMuc3R5bGU7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubikge1xuICAgICAgICBhdHRyaWJ1dGVzW1wiZ2VuX2FpLnJlcXVlc3QuaW1hZ2UuY291bnRcIl0gPSBwYXJhbXMubjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5wcm9tcHQpIHtcbiAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5jb250ZW50YF0gPSBwYXJhbXMucHJvbXB0O1xuICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXSA9IFwidXNlclwiO1xuICAgIH1cbiAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRJbWFnZUVkaXRSZXF1ZXN0QXR0cmlidXRlcyhzcGFuLCBwYXJhbXMsIHVwbG9hZENhbGxiYWNrKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBpZiAocGFyYW1zLm1vZGVsKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01PREVMXSA9IHBhcmFtcy5tb2RlbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnNpemUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJnZW5fYWkucmVxdWVzdC5pbWFnZS5zaXplXCJdID0gcGFyYW1zLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5uKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1wiZ2VuX2FpLnJlcXVlc3QuaW1hZ2UuY291bnRcIl0gPSBwYXJhbXMubjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnByb21wdCkge1xuICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5jb250ZW50YF0gPSBwYXJhbXMucHJvbXB0O1xuICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5yb2xlYF0gPSBcInVzZXJcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcm9jZXNzIGlucHV0IGltYWdlIGlmIHVwbG9hZCBjYWxsYmFjayBpcyBhdmFpbGFibGVcbiAgICAgICAgaWYgKHBhcmFtcy5pbWFnZSAmJlxuICAgICAgICAgICAgdXBsb2FkQ2FsbGJhY2sgJiZcbiAgICAgICAgICAgIHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkICYmXG4gICAgICAgICAgICBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFjZUlkID0gc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gICAgICAgICAgICBjb25zdCBzcGFuSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSB5aWVsZCBwcm9jZXNzSW1hZ2VJblJlcXVlc3QocGFyYW1zLmltYWdlLCB0cmFjZUlkLCBzcGFuSWQsIHVwbG9hZENhbGxiYWNrLCAwKTtcbiAgICAgICAgICAgIGlmIChpbWFnZVVybCkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjEuY29udGVudGBdID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiaW1hZ2VfdXJsXCIsIGltYWdlX3VybDogeyB1cmw6IGltYWdlVXJsIH0gfSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4xLnJvbGVgXSA9IFwidXNlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRJbWFnZVZhcmlhdGlvblJlcXVlc3RBdHRyaWJ1dGVzKHNwYW4sIHBhcmFtcywgdXBsb2FkQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGlmIChwYXJhbXMubW9kZWwpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTU9ERUxdID0gcGFyYW1zLm1vZGVsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMuc2l6ZSkge1xuICAgICAgICAgICAgYXR0cmlidXRlc1tcImdlbl9haS5yZXF1ZXN0LmltYWdlLnNpemVcIl0gPSBwYXJhbXMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLm4pIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJnZW5fYWkucmVxdWVzdC5pbWFnZS5jb3VudFwiXSA9IHBhcmFtcy5uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByb2Nlc3MgaW5wdXQgaW1hZ2UgaWYgdXBsb2FkIGNhbGxiYWNrIGlzIGF2YWlsYWJsZVxuICAgICAgICBpZiAocGFyYW1zLmltYWdlICYmXG4gICAgICAgICAgICB1cGxvYWRDYWxsYmFjayAmJlxuICAgICAgICAgICAgc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQgJiZcbiAgICAgICAgICAgIHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNlSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5JZCA9IHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQ7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IHlpZWxkIHByb2Nlc3NJbWFnZUluUmVxdWVzdChwYXJhbXMuaW1hZ2UsIHRyYWNlSWQsIHNwYW5JZCwgdXBsb2FkQ2FsbGJhY2ssIDApO1xuICAgICAgICAgICAgaWYgKGltYWdlVXJsKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5jb250ZW50YF0gPSBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogXCJpbWFnZV91cmxcIiwgaW1hZ2VfdXJsOiB7IHVybDogaW1hZ2VVcmwgfSB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAucm9sZWBdID0gXCJ1c2VyXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldEltYWdlR2VuZXJhdGlvblJlc3BvbnNlQXR0cmlidXRlcyhzcGFuLCByZXNwb25zZSwgdXBsb2FkQ2FsbGJhY2ssIGluc3RydW1lbnRhdGlvbkNvbmZpZywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb25Ub2tlbnMgPSBjYWxjdWxhdGVJbWFnZUdlbmVyYXRpb25Ub2tlbnMocGFyYW1zLCByZXNwb25zZS5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU10gPSBjb21wbGV0aW9uVG9rZW5zO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHByb21wdCB0b2tlbnMgaWYgZW5yaWNoVG9rZW5zIGlzIGVuYWJsZWRcbiAgICAgICAgICAgIGlmIChpbnN0cnVtZW50YXRpb25Db25maWcgPT09IG51bGwgfHwgaW5zdHJ1bWVudGF0aW9uQ29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50YXRpb25Db25maWcuZW5yaWNoVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVzdGltYXRlZFByb21wdFRva2VucyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMucHJvbXB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRQcm9tcHRUb2tlbnMgKz0gTWF0aC5jZWlsKHBhcmFtcy5wcm9tcHQubGVuZ3RoIC8gNCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkUHJvbXB0VG9rZW5zICs9IDI3MjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXN0aW1hdGVkUHJvbXB0VG9rZW5zID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOU10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFByb21wdFRva2VucztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlNdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFByb21wdFRva2VucyArIGNvbXBsZXRpb25Ub2tlbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlNdID0gY29tcGxldGlvblRva2VucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlNdID0gY29tcGxldGlvblRva2VucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW1hZ2UgPSByZXNwb25zZS5kYXRhWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0SW1hZ2UuYjY0X2pzb24gJiYgdXBsb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFjZUlkID0gc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5JZCA9IHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXJsID0geWllbGQgdXBsb2FkQ2FsbGJhY2sodHJhY2VJZCwgc3BhbklkLCBcImdlbmVyYXRlZF9pbWFnZS5wbmdcIiwgZmlyc3RJbWFnZS5iNjRfanNvbik7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShbeyB0eXBlOiBcImltYWdlX3VybFwiLCBpbWFnZV91cmw6IHsgdXJsOiBpbWFnZVVybCB9IH1dKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAucm9sZWBdID0gXCJhc3Npc3RhbnRcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gdXBsb2FkIGdlbmVyYXRlZCBpbWFnZTpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0SW1hZ2UudXJsICYmIHVwbG9hZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFuSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIGZldGNoKGZpcnN0SW1hZ2UudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVkVXJsID0geWllbGQgdXBsb2FkQ2FsbGJhY2sodHJhY2VJZCwgc3BhbklkLCBcImdlbmVyYXRlZF9pbWFnZS5wbmdcIiwgYmFzZTY0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImltYWdlX3VybFwiLCBpbWFnZV91cmw6IHsgdXJsOiB1cGxvYWRlZFVybCB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAucm9sZWBdID0gXCJhc3Npc3RhbnRcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggYW5kIHVwbG9hZCBnZW5lcmF0ZWQgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiaW1hZ2VfdXJsXCIsIGltYWdlX3VybDogeyB1cmw6IGZpcnN0SW1hZ2UudXJsIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5yb2xlYF0gPSBcImFzc2lzdGFudFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0SW1hZ2UudXJsKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcImltYWdlX3VybFwiLCBpbWFnZV91cmw6IHsgdXJsOiBmaXJzdEltYWdlLnVybCB9IH0sXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnJvbGVgXSA9IFwiYXNzaXN0YW50XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RJbWFnZS5yZXZpc2VkX3Byb21wdCkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJnZW5fYWkucmVzcG9uc2UucmV2aXNlZF9wcm9tcHRcIl0gPSBmaXJzdEltYWdlLnJldmlzZWRfcHJvbXB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB3cmFwSW1hZ2VHZW5lcmF0aW9uKHRyYWNlciwgdXBsb2FkQ2FsbGJhY2ssIGluc3RydW1lbnRhdGlvbkNvbmZpZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBhcmdzWzBdO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oXCJvcGVuYWkuaW1hZ2VzLmdlbmVyYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1NZU1RFTV06IFwiT3BlbkFJXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZ2VuX2FpLnJlcXVlc3QudHlwZVwiOiBcImltYWdlX2dlbmVyYXRpb25cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZS50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW1hZ2VHZW5lcmF0aW9uUmVxdWVzdEF0dHJpYnV0ZXMoc3BhbiwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNldEltYWdlR2VuZXJhdGlvblJlc3BvbnNlQXR0cmlidXRlcyhzcGFuLCByZXN1bHQsIHVwbG9hZENhbGxiYWNrLCBpbnN0cnVtZW50YXRpb25Db25maWcsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEltYWdlR2VuZXJhdGlvblJlcXVlc3RBdHRyaWJ1dGVzKHNwYW4sIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xufVxuZnVuY3Rpb24gd3JhcEltYWdlRWRpdCh0cmFjZXIsIHVwbG9hZENhbGxiYWNrLCBpbnN0cnVtZW50YXRpb25Db25maWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gYXJnc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFwib3BlbmFpLmltYWdlcy5lZGl0XCIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1NZU1RFTV06IFwiT3BlbkFJXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZ2VuX2FpLnJlcXVlc3QudHlwZVwiOiBcImltYWdlX2VkaXRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBzZXRSZXF1ZXN0QXR0cmlidXRlc1Byb21pc2UgPSBzZXRJbWFnZUVkaXRSZXF1ZXN0QXR0cmlidXRlcyhzcGFuLCBwYXJhbXMsIHVwbG9hZENhbGxiYWNrKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2V0dGluZyBpbWFnZSBlZGl0IHJlcXVlc3QgYXR0cmlidXRlczpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZS50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2V0UmVxdWVzdEF0dHJpYnV0ZXNQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2V0SW1hZ2VHZW5lcmF0aW9uUmVzcG9uc2VBdHRyaWJ1dGVzKHNwYW4sIHJlc3VsdCwgdXBsb2FkQ2FsbGJhY2ssIGluc3RydW1lbnRhdGlvbkNvbmZpZywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZXRSZXF1ZXN0QXR0cmlidXRlc1Byb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG59XG5mdW5jdGlvbiB3cmFwSW1hZ2VWYXJpYXRpb24odHJhY2VyLCB1cGxvYWRDYWxsYmFjaywgaW5zdHJ1bWVudGF0aW9uQ29uZmlnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcIm9wZW5haS5pbWFnZXMuY3JlYXRlVmFyaWF0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1NZU1RFTV06IFwiT3BlbkFJXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZ2VuX2FpLnJlcXVlc3QudHlwZVwiOiBcImltYWdlX3ZhcmlhdGlvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgdHlwZW9mIHJlc3BvbnNlLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZXRJbWFnZVZhcmlhdGlvblJlcXVlc3RBdHRyaWJ1dGVzKHNwYW4sIHBhcmFtcywgdXBsb2FkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2V0SW1hZ2VHZW5lcmF0aW9uUmVzcG9uc2VBdHRyaWJ1dGVzKHNwYW4sIHJlc3VsdCwgdXBsb2FkQ2FsbGJhY2ssIGluc3RydW1lbnRhdGlvbkNvbmZpZywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG59XG5cbmNsYXNzIE9wZW5BSUluc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tb3BlbmFpXCIsIHZlcnNpb24sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2VuY29kaW5nQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoY29uZmlnKTtcbiAgICB9XG4gICAgbWFudWFsbHlJbnN0cnVtZW50KG1vZHVsZSkge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBNYW51YWxseSBpbnN0cnVtZW50aW5nIG9wZW5haWApO1xuICAgICAgICBjb25zdCBvcGVuYWlNb2R1bGUgPSBtb2R1bGU7XG4gICAgICAgIHRoaXMuX3dyYXAob3BlbmFpTW9kdWxlLkNoYXQuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiLCB0aGlzLnBhdGNoT3BlbkFJKFwiY2hhdFwiKSk7XG4gICAgICAgIHRoaXMuX3dyYXAob3BlbmFpTW9kdWxlLkNvbXBsZXRpb25zLnByb3RvdHlwZSwgXCJjcmVhdGVcIiwgdGhpcy5wYXRjaE9wZW5BSShcImNvbXBsZXRpb25cIikpO1xuICAgICAgICBpZiAob3BlbmFpTW9kdWxlLkltYWdlcykge1xuICAgICAgICAgICAgdGhpcy5fd3JhcChvcGVuYWlNb2R1bGUuSW1hZ2VzLnByb3RvdHlwZSwgXCJnZW5lcmF0ZVwiLCB3cmFwSW1hZ2VHZW5lcmF0aW9uKHRoaXMudHJhY2VyLCB0aGlzLl9jb25maWcudXBsb2FkQmFzZTY0SW1hZ2UsIHRoaXMuX2NvbmZpZykpO1xuICAgICAgICAgICAgdGhpcy5fd3JhcChvcGVuYWlNb2R1bGUuSW1hZ2VzLnByb3RvdHlwZSwgXCJlZGl0XCIsIHdyYXBJbWFnZUVkaXQodGhpcy50cmFjZXIsIHRoaXMuX2NvbmZpZy51cGxvYWRCYXNlNjRJbWFnZSwgdGhpcy5fY29uZmlnKSk7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG9wZW5haU1vZHVsZS5JbWFnZXMucHJvdG90eXBlLCBcImNyZWF0ZVZhcmlhdGlvblwiLCB3cmFwSW1hZ2VWYXJpYXRpb24odGhpcy50cmFjZXIsIHRoaXMuX2NvbmZpZy51cGxvYWRCYXNlNjRJbWFnZSwgdGhpcy5fY29uZmlnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwib3BlbmFpXCIsIFtcIj49NCA8NlwiXSwgdGhpcy5wYXRjaC5iaW5kKHRoaXMpLCB0aGlzLnVucGF0Y2guYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIHBhdGNoKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgUGF0Y2hpbmcgb3BlbmFpQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgLy8gT2xkIHZlcnNpb24gb2YgT3BlbkFJIEFQSSAodjMuMS4wKVxuICAgICAgICBpZiAobW9kdWxlRXhwb3J0cy5PcGVuQUlBcGkpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUlBcGkucHJvdG90eXBlLCBcImNyZWF0ZUNoYXRDb21wbGV0aW9uXCIsIHRoaXMucGF0Y2hPcGVuQUkoXCJjaGF0XCIsIFwidjNcIikpO1xuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLk9wZW5BSUFwaS5wcm90b3R5cGUsIFwiY3JlYXRlQ29tcGxldGlvblwiLCB0aGlzLnBhdGNoT3BlbkFJKFwiY29tcGxldGlvblwiLCBcInYzXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUkuQ2hhdC5Db21wbGV0aW9ucy5wcm90b3R5cGUsIFwiY3JlYXRlXCIsIHRoaXMucGF0Y2hPcGVuQUkoXCJjaGF0XCIpKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUkuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiLCB0aGlzLnBhdGNoT3BlbkFJKFwiY29tcGxldGlvblwiKSk7XG4gICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cy5PcGVuQUkuSW1hZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLk9wZW5BSS5JbWFnZXMucHJvdG90eXBlLCBcImdlbmVyYXRlXCIsIHdyYXBJbWFnZUdlbmVyYXRpb24odGhpcy50cmFjZXIsIHRoaXMuX2NvbmZpZy51cGxvYWRCYXNlNjRJbWFnZSwgdGhpcy5fY29uZmlnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLk9wZW5BSS5JbWFnZXMucHJvdG90eXBlLCBcImVkaXRcIiwgd3JhcEltYWdlRWRpdCh0aGlzLnRyYWNlciwgdGhpcy5fY29uZmlnLnVwbG9hZEJhc2U2NEltYWdlLCB0aGlzLl9jb25maWcpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuT3BlbkFJLkltYWdlcy5wcm90b3R5cGUsIFwiY3JlYXRlVmFyaWF0aW9uXCIsIHdyYXBJbWFnZVZhcmlhdGlvbih0aGlzLnRyYWNlciwgdGhpcy5fY29uZmlnLnVwbG9hZEJhc2U2NEltYWdlLCB0aGlzLl9jb25maWcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgICB9XG4gICAgdW5wYXRjaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFVucGF0Y2hpbmcgb3BlbmFpQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgLy8gT2xkIHZlcnNpb24gb2YgT3BlbkFJIEFQSSAodjMuMS4wKVxuICAgICAgICBpZiAobW9kdWxlRXhwb3J0cy5PcGVuQUlBcGkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLk9wZW5BSUFwaS5wcm90b3R5cGUsIFwiY3JlYXRlQ2hhdENvbXBsZXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUlBcGkucHJvdG90eXBlLCBcImNyZWF0ZUNvbXBsZXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUkuQ2hhdC5Db21wbGV0aW9ucy5wcm90b3R5cGUsIFwiY3JlYXRlXCIpO1xuICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuT3BlbkFJLkNvbXBsZXRpb25zLnByb3RvdHlwZSwgXCJjcmVhdGVcIik7XG4gICAgICAgICAgICBpZiAobW9kdWxlRXhwb3J0cy5PcGVuQUkuSW1hZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuT3BlbkFJLkltYWdlcy5wcm90b3R5cGUsIFwiZ2VuZXJhdGVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuT3BlbkFJLkltYWdlcy5wcm90b3R5cGUsIFwiZWRpdFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUkuSW1hZ2VzLnByb3RvdHlwZSwgXCJjcmVhdGVWYXJpYXRpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGF0Y2hPcGVuQUkodHlwZSwgdmVyc2lvbiA9IFwidjRcIikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2QoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0eXBlID09PSBcImNoYXRcIlxuICAgICAgICAgICAgICAgICAgICA/IHBsdWdpbi5zdGFydFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudDogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBwbHVnaW4uc3RhcnRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNDb250ZXh0ID0gdHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9IHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKGV4ZWNDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9hID0gYXJncyA9PT0gbnVsbCB8fCBhcmdzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcmdzWzBdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXh0cmFBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3NbMF0uZXh0cmFBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLl9kaWFnLmVycm9yKFwiT3BlbkFJIGluc3RydW1lbnRhdGlvbjogZXJyb3JcIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS5zdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgcGx1Z2luLl9zdHJlYW1pbmdXcmFwUHJvbWlzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IGV4ZWNQcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRQcm9taXNlID0gcGx1Z2luLl93cmFwUHJvbWlzZSh0eXBlLCB2ZXJzaW9uLCBzcGFuLCBleGVjUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgd3JhcHBlZFByb21pc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhcnRTcGFuKHsgdHlwZSwgcGFyYW1zLCBjbGllbnQsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBjb25zdCB7IHByb3ZpZGVyIH0gPSB0aGlzLl9kZXRlY3RWZW5kb3JGcm9tVVJMKGNsaWVudCk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1NZU1RFTV06IHByb3ZpZGVyLFxuICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RZUEVdOiB0eXBlLFxuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NT0RFTF0gPSBwYXJhbXMubW9kZWw7XG4gICAgICAgICAgICBpZiAocGFyYW1zLm1heF90b2tlbnMpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01BWF9UT0tFTlNdID0gcGFyYW1zLm1heF90b2tlbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLnRlbXBlcmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV0gPSBwYXJhbXMudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLnRvcF9wKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UT1BfUF0gPSBwYXJhbXMudG9wX3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLmZyZXF1ZW5jeV9wZW5hbHR5KSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fRlJFUVVFTkNZX1BFTkFMVFldID1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZyZXF1ZW5jeV9wZW5hbHR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5wcmVzZW5jZV9wZW5hbHR5KSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUFJFU0VOQ0VfUEVOQUxUWV0gPVxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJlc2VuY2VfcGVuYWx0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuZXh0cmFBdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyYW1zLmV4dHJhQXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5leHRyYUF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2tleV0gPSBwYXJhbXMuZXh0cmFBdHRyaWJ1dGVzW2tleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMubWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aW5kZXh9LnJvbGVgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yb2xlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2luZGV4fS5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aW5kZXh9LmNvbnRlbnRgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBwYXJhbXMuZnVuY3Rpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9yRWFjaCgoZnVuYywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfRlVOQ1RJT05TfS4ke2luZGV4fS5uYW1lYF0gPSBmdW5jLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0uZGVzY3JpcHRpb25gXSA9IGZ1bmMuZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0uYXJndW1lbnRzYF0gPSBKU09OLnN0cmluZ2lmeShmdW5jLnBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgKF9iID0gcGFyYW1zLnRvb2xzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZm9yRWFjaCgodG9vbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b29sLnR5cGUgIT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJmdW5jdGlvblwiIGluIHRvb2wpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRvb2wuZnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0ubmFtZWBdID0gdG9vbC5mdW5jdGlvbi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9GVU5DVElPTlN9LiR7aW5kZXh9LmRlc2NyaXB0aW9uYF0gPSB0b29sLmZ1bmN0aW9uLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9GVU5DVElPTlN9LiR7aW5kZXh9LmFyZ3VtZW50c2BdID0gSlNPTi5zdHJpbmdpZnkodG9vbC5mdW5jdGlvbi5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXSA9IFwidXNlclwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcy5wcm9tcHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJvbXB0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5wcm9tcHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgKF9kID0gKF9jID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jYWxsKF9jLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGBvcGVuYWkuJHt0eXBlfWAsIHtcbiAgICAgICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc3RyZWFtaW5nV3JhcFByb21pc2UoX2EpIHtcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogX3N0cmVhbWluZ1dyYXBQcm9taXNlXzEoeyBzcGFuLCB0eXBlLCBwYXJhbXMsIHByb21pc2UsIH0pIHtcbiAgICAgICAgICAgIHZhciBfYiwgZV8xLCBfYywgX2QsIF9lLCBlXzIsIF9mLCBfZztcbiAgICAgICAgICAgIHZhciBfaCwgX2osIF9rLCBfbCwgX20sIF9vLCBfcCwgX3EsIF9yLCBfcywgX3QsIF91LCBfdiwgX3csIF94LCBfeSwgX3osIF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzg7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjaGF0XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZDogLTEsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ncHJvYnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoX3JlYXNvbjogXCJzdG9wXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sX2NhbGxzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBcImNoYXQuY29tcGxldGlvblwiLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgXzkgPSB0cnVlLCBfMTAgPSBfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQocHJvbWlzZSkpLCBfMTE7IF8xMSA9IHlpZWxkIF9fYXdhaXQoXzEwLm5leHQoKSksIF9iID0gXzExLmRvbmUsICFfYjsgXzkgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZCA9IF8xMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF85ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IF9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaWQgPSBjaHVuay5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jcmVhdGVkID0gY2h1bmsuY3JlYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tb2RlbCA9IGNodW5rLm1vZGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfaCA9IGNodW5rLmNob2ljZXNbMF0pID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC5maW5pc2hfcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNob2ljZXNbMF0uZmluaXNoX3JlYXNvbiA9IGNodW5rLmNob2ljZXNbMF0uZmluaXNoX3JlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX2ogPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oubG9ncHJvYnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5sb2dwcm9icyA9IGNodW5rLmNob2ljZXNbMF0ubG9ncHJvYnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9rID0gY2h1bmsuY2hvaWNlc1swXSkgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmRlbHRhLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQgKz0gY2h1bmsuY2hvaWNlc1swXS5kZWx0YS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoX2wgPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuZGVsdGEuZnVuY3Rpb25fY2FsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9tID0gY2h1bmsuY2hvaWNlc1swXSkgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLmRlbHRhLmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX28gPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX28uZGVsdGEuZnVuY3Rpb25fY2FsbC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEkgbmVlZGVkIHRvIHJlLWJ1aWxkIHRoZSBvYmplY3Qgc28gdGhhdCBUeXBlc2NyaXB0IHdpbGwgdW5kZXJzdGFuZCB0aGF0IGBuYW1lYCBhbmQgYGFyZ3VtZW50YCBhcmUgbm90IG51bGwuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNob2ljZXNbMF0ubWVzc2FnZS5mdW5jdGlvbl9jYWxsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjaHVuay5jaG9pY2VzWzBdLmRlbHRhLmZ1bmN0aW9uX2NhbGwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzOiBjaHVuay5jaG9pY2VzWzBdLmRlbHRhLmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRvb2xDYWxsIG9mIChfciA9IChfcSA9IChfcCA9IGNodW5rLmNob2ljZXNbMF0pID09PSBudWxsIHx8IF9wID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcC5kZWx0YSkgPT09IG51bGwgfHwgX3EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9xLnRvb2xfY2FsbHMpICE9PSBudWxsICYmIF9yICE9PSB2b2lkIDAgPyBfciA6IFtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoX3QgPSAoX3MgPSByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHMpID09PSBudWxsIHx8IF9zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcy5sZW5ndGgpICE9PSBudWxsICYmIF90ICE9PSB2b2lkIDAgPyBfdCA6IDApIDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbENhbGwuaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfdSA9IHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UudG9vbF9jYWxscykgPT09IG51bGwgfHwgX3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF91LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2xDYWxsLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHNbdG9vbENhbGwuaW5kZXhdLmlkICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbENhbGwuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2xDYWxsLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UudG9vbF9jYWxsc1t0b29sQ2FsbC5pbmRleF0udHlwZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbENhbGwudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF92ID0gdG9vbENhbGwuZnVuY3Rpb24pID09PSBudWxsIHx8IF92ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHNbdG9vbENhbGwuaW5kZXhdLmZ1bmN0aW9uLm5hbWUgKz0gdG9vbENhbGwuZnVuY3Rpb24ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF93ID0gdG9vbENhbGwuZnVuY3Rpb24pID09PSBudWxsIHx8IF93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdy5hcmd1bWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UudG9vbF9jYWxsc1t0b29sQ2FsbC5pbmRleF0uZnVuY3Rpb24uYXJndW1lbnRzICs9IHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfOSAmJiAhX2IgJiYgKF9jID0gXzEwLnJldHVybikpIHlpZWxkIF9fYXdhaXQoX2MuY2FsbChfMTApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoX3ggPSByZXN1bHQuY2hvaWNlc1swXS5sb2dwcm9icykgPT09IG51bGwgfHwgX3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF94LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkTG9nUHJvYnNFdmVudChzcGFuLCByZXN1bHQuY2hvaWNlc1swXS5sb2dwcm9icyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuZW5yaWNoVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tcHRUb2tlbnMgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcGFyYW1zLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRUb2tlbnMgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3kgPSB0aGlzLnRva2VuQ291bnRGcm9tU3RyaW5nKG1lc3NhZ2UuY29udGVudCwgcmVzdWx0Lm1vZGVsKSkgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uVG9rZW5zID0gdGhpcy50b2tlbkNvdW50RnJvbVN0cmluZygoX3ogPSByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQpICE9PSBudWxsICYmIF96ICE9PSB2b2lkIDAgPyBfeiA6IFwiXCIsIHJlc3VsdC5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0aW9uVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudXNhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0X3Rva2VuczogcHJvbXB0VG9rZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25fdG9rZW5zOiBjb21wbGV0aW9uVG9rZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3Rva2VuczogcHJvbXB0VG9rZW5zICsgY29tcGxldGlvblRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5kU3Bhbih7IHNwYW4sIHR5cGUsIHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dwcm9iczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hfcmVhc29uOiBcInN0b3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBcInRleHRfY29tcGxldGlvblwiLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgXzEyID0gdHJ1ZSwgXzEzID0gX19hc3luY1ZhbHVlcyh5aWVsZCBfX2F3YWl0KHByb21pc2UpKSwgXzE0OyBfMTQgPSB5aWVsZCBfX2F3YWl0KF8xMy5uZXh0KCkpLCBfZSA9IF8xNC5kb25lLCAhX2U7IF8xMiA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nID0gXzE0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgXzEyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IF9nO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pZCA9IGNodW5rLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jcmVhdGVkID0gY2h1bmsuY3JlYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubW9kZWwgPSBjaHVuay5tb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF8wID0gY2h1bmsuY2hvaWNlc1swXSkgPT09IG51bGwgfHwgXzAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8wLmZpbmlzaF9yZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNob2ljZXNbMF0uZmluaXNoX3JlYXNvbiA9IGNodW5rLmNob2ljZXNbMF0uZmluaXNoX3JlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfMSA9IGNodW5rLmNob2ljZXNbMF0pID09PSBudWxsIHx8IF8xID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMS5sb2dwcm9icykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5sb2dwcm9icyA9IGNodW5rLmNob2ljZXNbMF0ubG9ncHJvYnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoXzIgPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzIudGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS50ZXh0ICs9IGNodW5rLmNob2ljZXNbMF0udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF80ID0gKF8zID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF80ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfNC5jYWxsKF8zLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfMTIgJiYgIV9lICYmIChfZiA9IF8xMy5yZXR1cm4pKSB5aWVsZCBfX2F3YWl0KF9mLmNhbGwoXzEzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNob2ljZXNbMF0ubG9ncHJvYnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZExvZ1Byb2JzRXZlbnQoc3BhbiwgcmVzdWx0LmNob2ljZXNbMF0ubG9ncHJvYnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuZW5yaWNoVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRUb2tlbnMgPSAoXzUgPSB0aGlzLnRva2VuQ291bnRGcm9tU3RyaW5nKHBhcmFtcy5wcm9tcHQsIHJlc3VsdC5tb2RlbCkpICE9PSBudWxsICYmIF81ICE9PSB2b2lkIDAgPyBfNSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uVG9rZW5zID0gdGhpcy50b2tlbkNvdW50RnJvbVN0cmluZygoXzYgPSByZXN1bHQuY2hvaWNlc1swXS50ZXh0KSAhPT0gbnVsbCAmJiBfNiAhPT0gdm9pZCAwID8gXzYgOiBcIlwiLCByZXN1bHQubW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRpb25Ub2tlbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudXNhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdF90b2tlbnM6IHByb21wdFRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90b2tlbnM6IGNvbXBsZXRpb25Ub2tlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3Rva2VuczogcHJvbXB0VG9rZW5zICsgY29tcGxldGlvblRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoZSk7XG4gICAgICAgICAgICAgICAgICAgIChfOCA9IChfNyA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfOCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzguY2FsbChfNywgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oeyBzcGFuLCB0eXBlLCByZXN1bHQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfd3JhcFByb21pc2UodHlwZSwgdmVyc2lvbiwgc3BhbiwgcHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS5fdGhlblVud3JhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAodmVyc2lvbiA9PT0gXCJ2M1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiY2hhdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZExvZ1Byb2JzRXZlbnQoc3BhbiwgcmVzdWx0LmRhdGEuY2hvaWNlc1swXS5sb2dwcm9icyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZExvZ1Byb2JzRXZlbnQoc3BhbiwgcmVzdWx0LmRhdGEuY2hvaWNlc1swXS5sb2dwcm9icyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjaGF0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkTG9nUHJvYnNFdmVudChzcGFuLCByZXN1bHQuY2hvaWNlc1swXS5sb2dwcm9icyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oeyB0eXBlLCBzcGFuLCByZXN1bHQ6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZExvZ1Byb2JzRXZlbnQoc3BhbiwgcmVzdWx0LmNob2ljZXNbMF0ubG9ncHJvYnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmRTcGFuKHsgdHlwZSwgc3BhbiwgcmVzdWx0OiByZXN1bHQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9lbmRTcGFuKHsgc3BhbiwgdHlwZSwgcmVzdWx0LCB9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUwsIHJlc3VsdC5tb2RlbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnVzYWdlKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOUywgKF9hID0gcmVzdWx0LnVzYWdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG90YWxfdG9rZW5zKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfQ09NUExFVElPTl9UT0tFTlMsIChfYiA9IHJlc3VsdC51c2FnZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNvbXBsZXRpb25fdG9rZW5zKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOUywgKF9jID0gcmVzdWx0LnVzYWdlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucHJvbXB0X3Rva2Vucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uZmluaXNoX3JlYXNvbmAsIGNob2ljZS5maW5pc2hfcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0ucm9sZWAsIGNob2ljZS5tZXNzYWdlLnJvbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5jb250ZW50YCwgKF9hID0gY2hvaWNlLm1lc3NhZ2UuY29udGVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hvaWNlLm1lc3NhZ2UuZnVuY3Rpb25fY2FsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uZnVuY3Rpb25fY2FsbC5uYW1lYCwgY2hvaWNlLm1lc3NhZ2UuZnVuY3Rpb25fY2FsbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aW5kZXh9LmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzYCwgY2hvaWNlLm1lc3NhZ2UuZnVuY3Rpb25fY2FsbC5hcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9vbEluZGV4LCB0b29sQ2FsbCxdIG9mICgoX2MgPSAoX2IgPSBjaG9pY2UgPT09IG51bGwgfHwgY2hvaWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaG9pY2UubWVzc2FnZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRvb2xfY2FsbHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5lbnRyaWVzKCkpIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2xDYWxsLnR5cGUgPT09IFwiZnVuY3Rpb25cIiAmJiBcImZ1bmN0aW9uXCIgaW4gdG9vbENhbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS50b29sX2NhbGxzLiR7dG9vbEluZGV4fS5uYW1lYCwgdG9vbENhbGwuZnVuY3Rpb24ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0udG9vbF9jYWxscy4ke3Rvb2xJbmRleH0uYXJndW1lbnRzYCwgdG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5maW5pc2hfcmVhc29uYCwgY2hvaWNlLmZpbmlzaF9yZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5yb2xlYCwgXCJhc3Npc3RhbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aW5kZXh9LmNvbnRlbnRgLCBjaG9pY2UudGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfZSA9IChfZCA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY2FsbChfZCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gICAgX3Nob3VsZFNlbmRQcm9tcHRzKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgPSBjb250ZXh0XG4gICAgICAgICAgICAuYWN0aXZlKClcbiAgICAgICAgICAgIC5nZXRWYWx1ZShDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UKTtcbiAgICAgICAgaWYgKGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFNob3VsZFNlbmRQcm9tcHRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHJhY2VDb250ZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5fY29uZmlnLnRyYWNlQ29udGVudFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH1cbiAgICBfYWRkTG9nUHJvYnNFdmVudChzcGFuLCBsb2dwcm9icykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgaWYgKCFsb2dwcm9icykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoYXRMb2dwcm9icyA9IGxvZ3Byb2JzO1xuICAgICAgICAgICAgY29uc3QgY29tcGxldGlvbkxvZ3Byb2JzID0gbG9ncHJvYnM7XG4gICAgICAgICAgICBpZiAoY2hhdExvZ3Byb2JzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGF0TG9ncHJvYnMuY29udGVudC5tYXAoKGxvZ3Byb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBsb2dwcm9iLnRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9ncHJvYjogbG9ncHJvYi5sb2dwcm9iLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKGNvbXBsZXRpb25Mb2dwcm9icyA9PT0gbnVsbCB8fCBjb21wbGV0aW9uTG9ncHJvYnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRpb25Mb2dwcm9icy50b2tlbnMpICYmXG4gICAgICAgICAgICAgICAgKGNvbXBsZXRpb25Mb2dwcm9icyA9PT0gbnVsbCB8fCBjb21wbGV0aW9uTG9ncHJvYnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRpb25Mb2dwcm9icy50b2tlbl9sb2dwcm9icykpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uTG9ncHJvYnMudG9rZW5zLmZvckVhY2goKHRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3Byb2IgPSAoX2EgPSBjb21wbGV0aW9uTG9ncHJvYnMudG9rZW5fbG9ncHJvYnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dwcm9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ncHJvYixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLmFkZEV2ZW50KFwibG9ncHJvYnNcIiwgeyBsb2dwcm9iczogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9rZW5Db3VudEZyb21TdHJpbmcodGV4dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW5jb2RpbmcgPSB0aGlzLl9lbmNvZGluZ0NhY2hlLmdldChtb2RlbCk7XG4gICAgICAgIGlmICghZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZ0Zvck1vZGVsKG1vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmNvZGluZ0NhY2hlLnNldChtb2RlbCwgZW5jb2RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuY29kaW5nLmVuY29kZSh0ZXh0KS5sZW5ndGg7XG4gICAgfVxuICAgIF9kZXRlY3RWZW5kb3JGcm9tVVJMKGNsaWVudCkge1xuICAgICAgICBjb25zdCBtb2RlbFZlbmRvciA9IFwiT3BlbkFJXCI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIShjbGllbnQgPT09IG51bGwgfHwgY2xpZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbGllbnQuYmFzZVVSTCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm92aWRlcjogXCJPcGVuQUlcIiwgbW9kZWxWZW5kb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJhc2VVUkwgPSBjbGllbnQuYmFzZVVSTC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGJhc2VVUkwuaW5jbHVkZXMoXCJhenVyZVwiKSB8fCBiYXNlVVJMLmluY2x1ZGVzKFwib3BlbmFpLmF6dXJlLmNvbVwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHByb3ZpZGVyOiBcIkF6dXJlXCIsIG1vZGVsVmVuZG9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmFzZVVSTC5pbmNsdWRlcyhcIm9wZW5haS5jb21cIikgfHxcbiAgICAgICAgICAgICAgICBiYXNlVVJMLmluY2x1ZGVzKFwiYXBpLm9wZW5haS5jb21cIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm92aWRlcjogXCJPcGVuQUlcIiwgbW9kZWxWZW5kb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYXNlVVJMLmluY2x1ZGVzKFwiYW1hem9uYXdzLmNvbVwiKSB8fCBiYXNlVVJMLmluY2x1ZGVzKFwiYmVkcm9ja1wiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHByb3ZpZGVyOiBcIkFXU1wiLCBtb2RlbFZlbmRvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJhc2VVUkwuaW5jbHVkZXMoXCJnb29nbGVhcGlzLmNvbVwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHByb3ZpZGVyOiBcIkdvb2dsZVwiLCBtb2RlbFZlbmRvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJhc2VVUkwuaW5jbHVkZXMoXCJvcGVucm91dGVyXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvdmlkZXI6IFwiT3BlblJvdXRlclwiLCBtb2RlbFZlbmRvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgcHJvdmlkZXI6IFwiT3BlbkFJXCIsIG1vZGVsVmVuZG9yIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYEZhaWxlZCB0byBkZXRlY3QgdmVuZG9yIGZyb20gVVJMOiAke2V9YCk7XG4gICAgICAgICAgICByZXR1cm4geyBwcm92aWRlcjogXCJPcGVuQUlcIiwgbW9kZWxWZW5kb3IgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHsgT3BlbkFJSW5zdHJ1bWVudGF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLAogICAgIi8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuOyhmdW5jdGlvbigpIHtcblxuICAvKiogVXNlZCBhcyBhIHNhZmUgcmVmZXJlbmNlIGZvciBgdW5kZWZpbmVkYCBpbiBwcmUtRVM1IGVudmlyb25tZW50cy4gKi9cbiAgdmFyIHVuZGVmaW5lZDtcblxuICAvKiogVXNlZCBhcyB0aGUgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIuICovXG4gIHZhciBWRVJTSU9OID0gJzQuMTcuMjEnO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xuICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuICAvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG4gIHZhciBDT1JFX0VSUk9SX1RFWFQgPSAnVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuJyxcbiAgICAgIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJyxcbiAgICAgIElOVkFMSURfVEVNUExfVkFSX0VSUk9SX1RFWFQgPSAnSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAnO1xuXG4gIC8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbiAgdmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbiAgdmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xuICB2YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbiAgdmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbiAgdmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICB2YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuICAvKiogVXNlZCBhcyBkZWZhdWx0IG9wdGlvbnMgZm9yIGBfLnRydW5jYXRlYC4gKi9cbiAgdmFyIERFRkFVTFRfVFJVTkNfTEVOR1RIID0gMzAsXG4gICAgICBERUZBVUxUX1RSVU5DX09NSVNTSU9OID0gJy4uLic7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xuICB2YXIgSE9UX0NPVU5UID0gODAwLFxuICAgICAgSE9UX1NQQU4gPSAxNjtcblxuICAvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi9cbiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgICAgTEFaWV9NQVBfRkxBRyA9IDIsXG4gICAgICBMQVpZX1dISUxFX0ZMQUcgPSAzO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xuICB2YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxuICAgICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCxcbiAgICAgIE5BTiA9IDAgLyAwO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG4gIHZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICAgIE1BWF9BUlJBWV9JTkRFWCA9IE1BWF9BUlJBWV9MRU5HVEggLSAxLFxuICAgICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTtcblxuICAvKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xuICB2YXIgd3JhcEZsYWdzID0gW1xuICAgIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gICAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICAgIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gICAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gICAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gICAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICAgIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICAgIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG4gIF07XG5cbiAgLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xuICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICAgIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICAgIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XScsXG4gICAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLFxuICAgICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJyxcbiAgICAgIHdlYWtTZXRUYWcgPSAnW29iamVjdCBXZWFrU2V0XSc7XG5cbiAgdmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xuICB2YXIgcmVFbXB0eVN0cmluZ0xlYWRpbmcgPSAvXFxiX19wIFxcKz0gJyc7L2csXG4gICAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlZEh0bWwgPSAvJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csXG4gICAgICByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICAgIHJlSGFzRXNjYXBlZEh0bWwgPSBSZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLFxuICAgICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVFdmFsdWF0ZSA9IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xuICB2YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLyxcbiAgICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAgICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbiAgdmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xuICB2YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy8sXG4gICAgICByZVdyYXBEZXRhaWxzID0gL1xce1xcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggKC4rKVxcXSBcXCovLFxuICAgICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHdvcmRzIGNvbXBvc2VkIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVBc2NpaVdvcmQgPSAvW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdmFsaWRhdGUgdGhlIGB2YWxpZGF0ZWAgb3B0aW9uIGluIGBfLnRlbXBsYXRlYCB2YXJpYWJsZS5cbiAgICpcbiAgICogRm9yYmlkcyBjaGFyYWN0ZXJzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnQgZGVmaW5pdGlvbjpcbiAgICogLSBcIigpLFwiIChtb2RpZmljYXRpb24gb2YgZnVuY3Rpb24gcGFyYW1ldGVycylcbiAgICogLSBcIj1cIiAoZGVmYXVsdCB2YWx1ZSlcbiAgICogLSBcIltde31cIiAoZGVzdHJ1Y3R1cmluZyBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKVxuICAgKiAtIFwiL1wiIChiZWdpbm5pbmcgb2YgYSBjb21tZW50KVxuICAgKiAtIHdoaXRlc3BhY2VcbiAgICovXG4gIHZhciByZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycyA9IC9bKCk9LHt9XFxbXFxdXFwvXFxzXS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaFxuICAgKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICAgKi9cbiAgdmFyIHJlRXNUZW1wbGF0ZSA9IC9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG4gIHZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG4gIHZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggTGF0aW4gVW5pY29kZSBsZXR0ZXJzIChleGNsdWRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdG9ycykuICovXG4gIHZhciByZUxhdGluID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2c7XG5cbiAgLyoqIFVzZWQgdG8gZW5zdXJlIGNhcHR1cmluZyBvcmRlciBvZiB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xuICB2YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbiAgdmFyIHJlVW5lc2NhcGVkU3RyaW5nID0gL1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbiAgdmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgICByc0RpbmdiYXRSYW5nZSA9ICdcXFxcdTI3MDAtXFxcXHUyN2JmJyxcbiAgICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLFxuICAgICAgcnNNYXRoT3BSYW5nZSA9ICdcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3JyxcbiAgICAgIHJzTm9uQ2hhclJhbmdlID0gJ1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZicsXG4gICAgICByc1B1bmN0dWF0aW9uUmFuZ2UgPSAnXFxcXHUyMDAwLVxcXFx1MjA2ZicsXG4gICAgICByc1NwYWNlUmFuZ2UgPSAnIFxcXFx0XFxcXHgwYlxcXFxmXFxcXHhhMFxcXFx1ZmVmZlxcXFxuXFxcXHJcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdTE2ODBcXFxcdTE4MGVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMGFcXFxcdTIwMmZcXFxcdTIwNWZcXFxcdTMwMDAnLFxuICAgICAgcnNVcHBlclJhbmdlID0gJ0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZScsXG4gICAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgICByc0JyZWFrUmFuZ2UgPSByc01hdGhPcFJhbmdlICsgcnNOb25DaGFyUmFuZ2UgKyByc1B1bmN0dWF0aW9uUmFuZ2UgKyByc1NwYWNlUmFuZ2U7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xuICB2YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCIsXG4gICAgICByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgICByc0JyZWFrID0gJ1snICsgcnNCcmVha1JhbmdlICsgJ10nLFxuICAgICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICAgIHJzRGlnaXRzID0gJ1xcXFxkKycsXG4gICAgICByc0RpbmdiYXQgPSAnWycgKyByc0RpbmdiYXRSYW5nZSArICddJyxcbiAgICAgIHJzTG93ZXIgPSAnWycgKyByc0xvd2VyUmFuZ2UgKyAnXScsXG4gICAgICByc01pc2MgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArIHJzQnJlYWtSYW5nZSArIHJzRGlnaXRzICsgcnNEaW5nYmF0UmFuZ2UgKyByc0xvd2VyUmFuZ2UgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICAgIHJzVXBwZXIgPSAnWycgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xuICB2YXIgcnNNaXNjTG93ZXIgPSAnKD86JyArIHJzTG93ZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgICByc01pc2NVcHBlciA9ICcoPzonICsgcnNVcHBlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICAgIHJzT3B0Q29udHJMb3dlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OmR8bGx8bXxyZXxzfHR8dmUpKT8nLFxuICAgICAgcnNPcHRDb250clVwcGVyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86RHxMTHxNfFJFfFN8VHxWRSkpPycsXG4gICAgICByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICAgIHJzT3JkTG93ZXIgPSAnXFxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxcXGR0aCkoPz1cXFxcYnxbQS1aX10pJyxcbiAgICAgIHJzT3JkVXBwZXIgPSAnXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pJyxcbiAgICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICAgIHJzRW1vamkgPSAnKD86JyArIFtyc0RpbmdiYXQsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzU2VxLFxuICAgICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYXBvc3Ryb3BoZXMuICovXG4gIHZhciByZUFwb3MgPSBSZWdFeHAocnNBcG9zLCAnZycpO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykgYW5kXG4gICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19mb3JfU3ltYm9scykuXG4gICAqL1xuICB2YXIgcmVDb21ib01hcmsgPSBSZWdFeHAocnNDb21ibywgJ2cnKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xuICB2YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi9cbiAgdmFyIHJlVW5pY29kZVdvcmQgPSBSZWdFeHAoW1xuICAgIHJzVXBwZXIgKyAnPycgKyByc0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gICAgcnNNaXNjVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyICsgcnNNaXNjTG93ZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICAgIHJzVXBwZXIgKyAnPycgKyByc01pc2NMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlcixcbiAgICByc1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyLFxuICAgIHJzT3JkVXBwZXIsXG4gICAgcnNPcmRMb3dlcixcbiAgICByc0RpZ2l0cyxcbiAgICByc0Vtb2ppXG4gIF0uam9pbignfCcpLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xuICB2YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG4gIHZhciByZUhhc1VuaWNvZGVXb3JkID0gL1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS87XG5cbiAgLyoqIFVzZWQgdG8gYXNzaWduIGRlZmF1bHQgYGNvbnRleHRgIG9iamVjdCBwcm9wZXJ0aWVzLiAqL1xuICB2YXIgY29udGV4dFByb3BzID0gW1xuICAgICdBcnJheScsICdCdWZmZXInLCAnRGF0YVZpZXcnLCAnRGF0ZScsICdFcnJvcicsICdGbG9hdDMyQXJyYXknLCAnRmxvYXQ2NEFycmF5JyxcbiAgICAnRnVuY3Rpb24nLCAnSW50OEFycmF5JywgJ0ludDE2QXJyYXknLCAnSW50MzJBcnJheScsICdNYXAnLCAnTWF0aCcsICdPYmplY3QnLFxuICAgICdQcm9taXNlJywgJ1JlZ0V4cCcsICdTZXQnLCAnU3RyaW5nJywgJ1N5bWJvbCcsICdUeXBlRXJyb3InLCAnVWludDhBcnJheScsXG4gICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ1VpbnQxNkFycmF5JywgJ1VpbnQzMkFycmF5JywgJ1dlYWtNYXAnLFxuICAgICdfJywgJ2NsZWFyVGltZW91dCcsICdpc0Zpbml0ZScsICdwYXJzZUludCcsICdzZXRUaW1lb3V0J1xuICBdO1xuXG4gIC8qKiBVc2VkIHRvIG1ha2UgdGVtcGxhdGUgc291cmNlVVJMcyBlYXNpZXIgdG8gaWRlbnRpZnkuICovXG4gIHZhciB0ZW1wbGF0ZUNvdW50ZXIgPSAtMTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG4gIHZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xuICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICB0eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbiAgdmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbiAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbiAgY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbiAgY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBMYXRpbiBVbmljb2RlIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy4gKi9cbiAgdmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgICAvLyBMYXRpbi0xIFN1cHBsZW1lbnQgYmxvY2suXG4gICAgJ1xceGMwJzogJ0EnLCAgJ1xceGMxJzogJ0EnLCAnXFx4YzInOiAnQScsICdcXHhjMyc6ICdBJywgJ1xceGM0JzogJ0EnLCAnXFx4YzUnOiAnQScsXG4gICAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICAgJ1xceGM3JzogJ0MnLCAgJ1xceGU3JzogJ2MnLFxuICAgICdcXHhkMCc6ICdEJywgICdcXHhmMCc6ICdkJyxcbiAgICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAgICdcXHhlOCc6ICdlJywgICdcXHhlOSc6ICdlJywgJ1xceGVhJzogJ2UnLCAnXFx4ZWInOiAnZScsXG4gICAgJ1xceGNjJzogJ0knLCAgJ1xceGNkJzogJ0knLCAnXFx4Y2UnOiAnSScsICdcXHhjZic6ICdJJyxcbiAgICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAgICdcXHhkMSc6ICdOJywgICdcXHhmMSc6ICduJyxcbiAgICAnXFx4ZDInOiAnTycsICAnXFx4ZDMnOiAnTycsICdcXHhkNCc6ICdPJywgJ1xceGQ1JzogJ08nLCAnXFx4ZDYnOiAnTycsICdcXHhkOCc6ICdPJyxcbiAgICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgICAnXFx4ZDknOiAnVScsICAnXFx4ZGEnOiAnVScsICdcXHhkYic6ICdVJywgJ1xceGRjJzogJ1UnLFxuICAgICdcXHhmOSc6ICd1JywgICdcXHhmYSc6ICd1JywgJ1xceGZiJzogJ3UnLCAnXFx4ZmMnOiAndScsXG4gICAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICAgJ1xceGM2JzogJ0FlJywgJ1xceGU2JzogJ2FlJyxcbiAgICAnXFx4ZGUnOiAnVGgnLCAnXFx4ZmUnOiAndGgnLFxuICAgICdcXHhkZic6ICdzcycsXG4gICAgLy8gTGF0aW4gRXh0ZW5kZWQtQSBibG9jay5cbiAgICAnXFx1MDEwMCc6ICdBJywgICdcXHUwMTAyJzogJ0EnLCAnXFx1MDEwNCc6ICdBJyxcbiAgICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgICAnXFx1MDEwNic6ICdDJywgICdcXHUwMTA4JzogJ0MnLCAnXFx1MDEwYSc6ICdDJywgJ1xcdTAxMGMnOiAnQycsXG4gICAgJ1xcdTAxMDcnOiAnYycsICAnXFx1MDEwOSc6ICdjJywgJ1xcdTAxMGInOiAnYycsICdcXHUwMTBkJzogJ2MnLFxuICAgICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgICAnXFx1MDExMic6ICdFJywgICdcXHUwMTE0JzogJ0UnLCAnXFx1MDExNic6ICdFJywgJ1xcdTAxMTgnOiAnRScsICdcXHUwMTFhJzogJ0UnLFxuICAgICdcXHUwMTEzJzogJ2UnLCAgJ1xcdTAxMTUnOiAnZScsICdcXHUwMTE3JzogJ2UnLCAnXFx1MDExOSc6ICdlJywgJ1xcdTAxMWInOiAnZScsXG4gICAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAgICdcXHUwMTFkJzogJ2cnLCAgJ1xcdTAxMWYnOiAnZycsICdcXHUwMTIxJzogJ2cnLCAnXFx1MDEyMyc6ICdnJyxcbiAgICAnXFx1MDEyNCc6ICdIJywgICdcXHUwMTI2JzogJ0gnLCAnXFx1MDEyNSc6ICdoJywgJ1xcdTAxMjcnOiAnaCcsXG4gICAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgICAnXFx1MDEyOSc6ICdpJywgICdcXHUwMTJiJzogJ2knLCAnXFx1MDEyZCc6ICdpJywgJ1xcdTAxMmYnOiAnaScsICdcXHUwMTMxJzogJ2knLFxuICAgICdcXHUwMTM0JzogJ0onLCAgJ1xcdTAxMzUnOiAnaicsXG4gICAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICAgJ1xcdTAxMzknOiAnTCcsICAnXFx1MDEzYic6ICdMJywgJ1xcdTAxM2QnOiAnTCcsICdcXHUwMTNmJzogJ0wnLCAnXFx1MDE0MSc6ICdMJyxcbiAgICAnXFx1MDEzYSc6ICdsJywgICdcXHUwMTNjJzogJ2wnLCAnXFx1MDEzZSc6ICdsJywgJ1xcdTAxNDAnOiAnbCcsICdcXHUwMTQyJzogJ2wnLFxuICAgICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgICAnXFx1MDE0NCc6ICduJywgICdcXHUwMTQ2JzogJ24nLCAnXFx1MDE0OCc6ICduJywgJ1xcdTAxNGInOiAnbicsXG4gICAgJ1xcdTAxNGMnOiAnTycsICAnXFx1MDE0ZSc6ICdPJywgJ1xcdTAxNTAnOiAnTycsXG4gICAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICAgJ1xcdTAxNTQnOiAnUicsICAnXFx1MDE1Nic6ICdSJywgJ1xcdTAxNTgnOiAnUicsXG4gICAgJ1xcdTAxNTUnOiAncicsICAnXFx1MDE1Nyc6ICdyJywgJ1xcdTAxNTknOiAncicsXG4gICAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAgICdcXHUwMTViJzogJ3MnLCAgJ1xcdTAxNWQnOiAncycsICdcXHUwMTVmJzogJ3MnLCAnXFx1MDE2MSc6ICdzJyxcbiAgICAnXFx1MDE2Mic6ICdUJywgICdcXHUwMTY0JzogJ1QnLCAnXFx1MDE2Nic6ICdUJyxcbiAgICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgICAnXFx1MDE2OCc6ICdVJywgICdcXHUwMTZhJzogJ1UnLCAnXFx1MDE2Yyc6ICdVJywgJ1xcdTAxNmUnOiAnVScsICdcXHUwMTcwJzogJ1UnLCAnXFx1MDE3Mic6ICdVJyxcbiAgICAnXFx1MDE2OSc6ICd1JywgICdcXHUwMTZiJzogJ3UnLCAnXFx1MDE2ZCc6ICd1JywgJ1xcdTAxNmYnOiAndScsICdcXHUwMTcxJzogJ3UnLCAnXFx1MDE3Myc6ICd1JyxcbiAgICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAgICdcXHUwMTc2JzogJ1knLCAgJ1xcdTAxNzcnOiAneScsICdcXHUwMTc4JzogJ1knLFxuICAgICdcXHUwMTc5JzogJ1onLCAgJ1xcdTAxN2InOiAnWicsICdcXHUwMTdkJzogJ1onLFxuICAgICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAgICdcXHUwMTMyJzogJ0lKJywgJ1xcdTAxMzMnOiAnaWonLFxuICAgICdcXHUwMTUyJzogJ09lJywgJ1xcdTAxNTMnOiAnb2UnLFxuICAgICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG4gIHZhciBodG1sRXNjYXBlcyA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzM5OydcbiAgfTtcblxuICAvKiogVXNlZCB0byBtYXAgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgaHRtbFVuZXNjYXBlcyA9IHtcbiAgICAnJmFtcDsnOiAnJicsXG4gICAgJyZsdDsnOiAnPCcsXG4gICAgJyZndDsnOiAnPicsXG4gICAgJyZxdW90Oyc6ICdcIicsXG4gICAgJyYjMzk7JzogXCInXCJcbiAgfTtcblxuICAvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbiAgdmFyIHN0cmluZ0VzY2FwZXMgPSB7XG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgXCInXCI6IFwiJ1wiLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbiAgdmFyIGZyZWVQYXJzZUZsb2F0ID0gcGFyc2VGbG9hdCxcbiAgICAgIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG4gIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xuICB2YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuICAvKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbiAgdmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbiAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbiAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuICAvKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xuICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbiAgLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG4gIHZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgICAgaWYgKHR5cGVzKSB7XG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICAgIH1cblxuICAgICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9KCkpO1xuXG4gIC8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG4gIHZhciBub2RlSXNBcnJheUJ1ZmZlciA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzQXJyYXlCdWZmZXIsXG4gICAgICBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlLFxuICAgICAgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXAsXG4gICAgICBub2RlSXNSZWdFeHAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1JlZ0V4cCxcbiAgICAgIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0LFxuICAgICAgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvKipcbiAgICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVtsZW5ndGhdLCBsZW5ndGgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgKiBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzXG4gICAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlSZWR1Y2VSaWdodChhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbLS1sZW5ndGhdO1xuICAgIH1cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgKiBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAqICBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYW4gQVNDSUkgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIHZhciBhc2NpaVNpemUgPSBiYXNlUHJvcGVydHkoJ2xlbmd0aCcpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFzY2lpV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmZpbmRLZXlgIGFuZCBgXy5maW5kTGFzdEtleWAsXG4gICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmBcbiAgICogdXNpbmcgYGVhY2hGdW5jYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZm91bmQgZWxlbWVudCBvciBpdHMga2V5LCBlbHNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUZpbmRLZXkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBlYWNoRnVuYykge1xuICAgIHZhciByZXN1bHQ7XG4gICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSkge1xuICAgICAgICByZXN1bHQgPSBrZXk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAgICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlSW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2ZXaXRoKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVhbmAgYW5kIGBfLm1lYW5CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZU1lYW4oYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgIHJldHVybiBsZW5ndGggPyAoYmFzZVN1bShhcnJheSwgaXRlcmF0ZWUpIC8gbGVuZ3RoKSA6IE5BTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlZHVjZWAgYW5kIGBfLnJlZHVjZVJpZ2h0YCwgd2l0aG91dCBzdXBwb3J0XG4gICAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYCB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdEFjY3VtIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IG9yIGxhc3QgZWxlbWVudCBvZlxuICAgKiAgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgZWFjaEZ1bmMpIHtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaW5pdEFjY3VtXG4gICAgICAgID8gKGluaXRBY2N1bSA9IGZhbHNlLCB2YWx1ZSlcbiAgICAgICAgOiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICAgKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNyaXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nXG4gICAqIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICBhcnJheS5zb3J0KGNvbXBhcmVyKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGFycmF5W2xlbmd0aF0gPSBhcnJheVtsZW5ndGhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc3VtYCBhbmQgYF8uc3VtQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVN1bShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgcmVzdWx0LFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBpdGVyYXRlZShhcnJheVtpbmRleF0pO1xuICAgICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGN1cnJlbnQgOiAocmVzdWx0ICsgY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICAgKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvUGFpcnNgIGFuZCBgXy50b1BhaXJzSW5gIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXlcbiAgICogb2Yga2V5LXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBgcHJvcHNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRvUGFpcnMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nXG4gICAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgICAgOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAgICogb2YgYHByb3BzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICAgIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltU3RhcnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSAwO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgKytyZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuXG4gICAqL1xuICB2YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSB3b3JkIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlV29yZC50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICAgIHZhciBkYXRhLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gaXRzIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldFRvUGFpcnMoc2V0KSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICAgIDogYXNjaWlTaXplKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAgICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICAgIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIHZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVVbmljb2RlLmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKHJlVW5pY29kZS50ZXN0KHN0cmluZykpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJpc3RpbmUgYGxvZGFzaGAgZnVuY3Rpb24gdXNpbmcgdGhlIGBjb250ZXh0YCBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDEuMS4wXG4gICAqIEBjYXRlZ29yeSBVdGlsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dD1yb290XSBUaGUgY29udGV4dCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBhIG5ldyBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5taXhpbih7ICdmb28nOiBfLmNvbnN0YW50KCdmb28nKSB9KTtcbiAgICpcbiAgICogdmFyIGxvZGFzaCA9IF8ucnVuSW5Db250ZXh0KCk7XG4gICAqIGxvZGFzaC5taXhpbih7ICdiYXInOiBsb2Rhc2guY29uc3RhbnQoJ2JhcicpIH0pO1xuICAgKlxuICAgKiBfLmlzRnVuY3Rpb24oXy5mb28pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqIF8uaXNGdW5jdGlvbihfLmJhcik7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5mb28pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guYmFyKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiAvLyBDcmVhdGUgYSBzdXBlZC11cCBgZGVmZXJgIGluIE5vZGUuanMuXG4gICAqIHZhciBkZWZlciA9IF8ucnVuSW5Db250ZXh0KHsgJ3NldFRpbWVvdXQnOiBzZXRJbW1lZGlhdGUgfSkuZGVmZXI7XG4gICAqL1xuICB2YXIgcnVuSW5Db250ZXh0ID0gKGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgPT0gbnVsbCA/IHJvb3QgOiBfLmRlZmF1bHRzKHJvb3QuT2JqZWN0KCksIGNvbnRleHQsIF8ucGljayhyb290LCBjb250ZXh0UHJvcHMpKTtcblxuICAgIC8qKiBCdWlsdC1pbiBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0Lk9iamVjdCxcbiAgICAgICAgUmVnRXhwID0gY29udGV4dC5SZWdFeHAsXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0LlR5cGVFcnJvcjtcblxuICAgIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICAgICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG4gICAgdmFyIGNvcmVKc0RhdGEgPSBjb250ZXh0WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgICAvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xuICAgIHZhciBpZENvdW50ZXIgPSAwO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbiAgICB2YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gICAgICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAgICAgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAgICAgKiBvZiB2YWx1ZXMuXG4gICAgICovXG4gICAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG4gICAgdmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbiAgICApO1xuXG4gICAgLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBjb250ZXh0LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3ltYm9sID0gY29udGV4dC5TeW1ib2wsXG4gICAgICAgIFVpbnQ4QXJyYXkgPSBjb250ZXh0LlVpbnQ4QXJyYXksXG4gICAgICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkLFxuICAgICAgICBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSxcbiAgICAgICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICAgICAgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICAgICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgICAgIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgICAgICBmdW5jKHt9LCAnJywge30pO1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfSgpKTtcblxuICAgIC8qKiBNb2NrZWQgYnVpbHQtaW5zLiAqL1xuICAgIHZhciBjdHhDbGVhclRpbWVvdXQgPSBjb250ZXh0LmNsZWFyVGltZW91dCAhPT0gcm9vdC5jbGVhclRpbWVvdXQgJiYgY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIGN0eE5vdyA9IERhdGUgJiYgRGF0ZS5ub3cgIT09IHJvb3QuRGF0ZS5ub3cgJiYgRGF0ZS5ub3csXG4gICAgICAgIGN0eFNldFRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQgIT09IHJvb3Quc2V0VGltZW91dCAmJiBjb250ZXh0LnNldFRpbWVvdXQ7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG4gICAgdmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgICAgIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICAgICAgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gICAgICAgIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBuYXRpdmVJc0Zpbml0ZSA9IGNvbnRleHQuaXNGaW5pdGUsXG4gICAgICAgIG5hdGl2ZUpvaW4gPSBhcnJheVByb3RvLmpvaW4sXG4gICAgICAgIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpLFxuICAgICAgICBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICAgICAgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgICAgIG5hdGl2ZU5vdyA9IERhdGUubm93LFxuICAgICAgICBuYXRpdmVQYXJzZUludCA9IGNvbnRleHQucGFyc2VJbnQsXG4gICAgICAgIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tLFxuICAgICAgICBuYXRpdmVSZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG4gICAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuICAgIHZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShjb250ZXh0LCAnRGF0YVZpZXcnKSxcbiAgICAgICAgTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdNYXAnKSxcbiAgICAgICAgUHJvbWlzZSA9IGdldE5hdGl2ZShjb250ZXh0LCAnUHJvbWlzZScpLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBXZWFrTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdXZWFrTWFwJyksXG4gICAgICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuICAgIC8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICAgIHZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxuICAgIC8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xuICAgIHZhciByZWFsTmFtZXMgPSB7fTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG4gICAgdmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICAgICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgICAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4gICAgLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG4gICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAgICAgKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAgICAgKiBvciBtYXkgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIGNoYWluIHNlcXVlbmNlXG4gICAgICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gICAgICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gICAgICpcbiAgICAgKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gICAgICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAgICAgKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICAgICAqIHRoZSBjcmVhdGlvbiBvZiBpbnRlcm1lZGlhdGUgYXJyYXlzIGFuZCBjYW4gZ3JlYXRseSByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gICAgICogb25lIGFyZ3VtZW50LiBUaGUgaGV1cmlzdGljIGZvciB3aGV0aGVyIGEgc2VjdGlvbiBxdWFsaWZpZXMgZm9yIHNob3J0Y3V0XG4gICAgICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHNoaWZ0YCwgYHNvcnRgLCBgc3BsaWNlYCwgYW5kIGB1bnNoaWZ0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gICAgICogYHJlcGxhY2VgIGFuZCBgc3BsaXRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICAgICAqIGBhdGAsIGBjb21wYWN0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGRyb3BXaGlsZWAsIGBmaWx0ZXJgLCBgZmluZGAsXG4gICAgICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gICAgICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICAgICAqXG4gICAgICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAgICAgKiBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCwgYGNhc3RBcnJheWAsIGBjaGFpbmAsIGBjaHVua2AsXG4gICAgICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gICAgICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gICAgICogYGRpZmZlcmVuY2VgLCBgZGlmZmVyZW5jZUJ5YCwgYGRpZmZlcmVuY2VXaXRoYCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCxcbiAgICAgKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gICAgICogYGZsYXR0ZW5EZXB0aGAsIGBmbGlwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCwgYGZyb21QYWlyc2AsIGBmdW5jdGlvbnNgLFxuICAgICAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAgICAgKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAgICAgKiBga2V5c2AsIGBrZXlzSW5gLCBgbWFwYCwgYG1hcEtleXNgLCBgbWFwVmFsdWVzYCwgYG1hdGNoZXNgLCBgbWF0Y2hlc1Byb3BlcnR5YCxcbiAgICAgKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gICAgICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gICAgICogYG92ZXJFdmVyeWAsIGBvdmVyU29tZWAsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsIGBwYXJ0aXRpb25gLCBgcGlja2AsXG4gICAgICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICAgICAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gICAgICogYHJlbW92ZWAsIGByZXN0YCwgYHJldmVyc2VgLCBgc2FtcGxlU2l6ZWAsIGBzZXRgLCBgc2V0V2l0aGAsIGBzaHVmZmxlYCxcbiAgICAgKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICAgICAqIGB0b1BhaXJzYCwgYHRvUGFpcnNJbmAsIGB0b1BhdGhgLCBgdG9QbGFpbk9iamVjdGAsIGB0cmFuc2Zvcm1gLCBgdW5hcnlgLFxuICAgICAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gICAgICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gICAgICogYHZhbHVlc0luYCwgYHdpdGhvdXRgLCBgd3JhcGAsIGB4b3JgLCBgeG9yQnlgLCBgeG9yV2l0aGAsIGB6aXBgLFxuICAgICAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBhcmUgKipub3QqKiBjaGFpbmFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICAgICAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICAgICAqIGBkZWZhdWx0VG9gLCBgZGl2aWRlYCwgYGVhY2hgLCBgZWFjaFJpZ2h0YCwgYGVuZHNXaXRoYCwgYGVxYCwgYGVzY2FwZWAsXG4gICAgICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAgICAgKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gICAgICogYGZvckluYCwgYGZvckluUmlnaHRgLCBgZm9yT3duYCwgYGZvck93blJpZ2h0YCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCxcbiAgICAgKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAgICAgKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAgICAgKiBgaXNCb29sZWFuYCwgYGlzQnVmZmVyYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLCBgaXNFbXB0eWAsIGBpc0VxdWFsYCxcbiAgICAgKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gICAgICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAgICAgKiBgaXNOdW1iZXJgLCBgaXNPYmplY3RgLCBgaXNPYmplY3RMaWtlYCwgYGlzUGxhaW5PYmplY3RgLCBgaXNSZWdFeHBgLFxuICAgICAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gICAgICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gICAgICogYGxvd2VyQ2FzZWAsIGBsb3dlckZpcnN0YCwgYGx0YCwgYGx0ZWAsIGBtYXhgLCBgbWF4QnlgLCBgbWVhbmAsIGBtZWFuQnlgLFxuICAgICAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAgICAgKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAgICAgKiBgcmVwZWF0YCwgYHJlc3VsdGAsIGByb3VuZGAsIGBydW5JbkNvbnRleHRgLCBgc2FtcGxlYCwgYHNoaWZ0YCwgYHNpemVgLFxuICAgICAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gICAgICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICAgICAqIGBzdHViT2JqZWN0YCwgYHN0dWJTdHJpbmdgLCBgc3R1YlRydWVgLCBgc3VidHJhY3RgLCBgc3VtYCwgYHN1bUJ5YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gICAgICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICAgICAqIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGB0cnVuY2F0ZWAsIGB1bmVzY2FwZWAsIGB1bmlxdWVJZGAsIGB1cHBlckNhc2VgLFxuICAgICAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBuYW1lIF9cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcCBpbiBhIGBsb2Rhc2hgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICAgICAqIHZhciBzcXVhcmVzID0gd3JhcHBlZC5tYXAoc3F1YXJlKTtcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgICAgIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLCBjaGFpbkFsbCkge1xuICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgICAgdGhpcy5fX2luZGV4X18gPSAwO1xuICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gICAgICogZW1iZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFuZ2UgdGhlXG4gICAgICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkYXRhIG9iamVjdCBpbiB0aGUgdGVtcGxhdGUgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICAndmFyaWFibGUnOiAnJyxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgICAgICovXG4gICAgICAgICdfJzogbG9kYXNoXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB3cmFwcGVycyBhcmUgaW5zdGFuY2VzIG9mIGBiYXNlTG9kYXNoYC5cbiAgICBsb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuICAgIExvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fZGlyX18gPSAxO1xuICAgICAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgICAgIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICAgICAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gY29weUFycmF5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKGFycmF5LCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAobGVuZ3RoLS0gJiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuXG4gICAgICAgIHZhciBpdGVySW5kZXggPSAtMSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGl0ZXJhdGVlc1tpdGVySW5kZXhdLFxuICAgICAgICAgICAgICBpdGVyYXRlZSA9IGRhdGEuaXRlcmF0ZWUsXG4gICAgICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9NQVBfRkxBRykge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRykge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICAgICAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG4gICAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG4gICAgSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuICAgIEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG4gICAgSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgICAgICBkYXRhLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgLS10aGlzLnNpemU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgKyt0aGlzLnNpemU7XG4gICAgICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAgICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYWRkXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQGFsaWFzIHB1c2hcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICAgICAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICAgICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICAgICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gICAgICB9XG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG4gICAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcbiAgICBTdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG4gICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuICAgIFN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcbiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICAgICAgKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3RoIC0gMSldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVTaXplYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlU2l6ZShhcnJheSwgbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFnZ3JlZ2F0ZXMgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIG9uIGBhY2N1bXVsYXRvcmAgd2l0aCBrZXlzIHRyYW5zZm9ybWVkXG4gICAgICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICAgICAqIHZhbHVlIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBza2lwID0gb2JqZWN0ID09IG51bGw7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gICAgICogdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIERlZXAgY2xvbmVcbiAgICAgKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgKiAgNCAtIENsb25lIHN5bWJvbHNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZDtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtcyhzb3VyY2UpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zVG9gIHdoaWNoIGFjY2VwdHMgYHByb3BzYCB0byBjaGVjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICFsZW5ndGg7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbbGVuZ3RoXSxcbiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNvdXJjZVtrZXldLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmRlbGF5YCBhbmQgYF8uZGVmZXJgIHdoaWNoIGFjY2VwdHMgYGFyZ3NgXG4gICAgICogdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsgfSwgd2FpdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICAgICAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgICAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2ggPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hSaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2hSaWdodCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCwgdHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ldmVyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gICAgICogYGNvbXBhcmF0b3JgIHRvIGRldGVybWluZSB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKGN1cnJlbnQgPT09IGN1cnJlbnQgJiYgIWlzU3ltYm9sKGN1cnJlbnQpKVxuICAgICAgICAgICAgICA6IGNvbXBhcmF0b3IoY3VycmVudCwgY29tcHV0ZWQpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgdmFyIGNvbXB1dGVkID0gY3VycmVudCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsbGAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gbGVuZ3RoKSA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgZW5kICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVuZCA9IHN0YXJ0ID4gZW5kID8gMCA6IHRvTGVuZ3RoKGVuZCk7XG4gICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICAgICAgYXJyYXlbc3RhcnQrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gICAgICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICAgICAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUZvcmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzXG4gICAgICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yUmlnaHQgPSBjcmVhdGVCYXNlRm9yKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93blJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JSaWdodChvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2ZcbiAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHtcbiAgICAgIHJldHVybiBhcnJheUZpbHRlcihwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gICAgICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgICAgIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgICAgIH1cbiAgICAgIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc2Agd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pblJhbmdlYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBudW1iZXIgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIG51bWJlciA8IG5hdGl2ZU1heChzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCwgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludGVyc2VjdGlvbihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5jbHVkZXMgPSBjb21wYXJhdG9yID8gYXJyYXlJbmNsdWRlc1dpdGggOiBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBvdGhJbmRleCA9IG90aExlbmd0aCxcbiAgICAgICAgICBjYWNoZXMgPSBBcnJheShvdGhMZW5ndGgpLFxuICAgICAgICAgIG1heExlbmd0aCA9IEluZmluaXR5LFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAob3RoSW5kZXgtLSkge1xuICAgICAgICB2YXIgYXJyYXkgPSBhcnJheXNbb3RoSW5kZXhdO1xuICAgICAgICBpZiAob3RoSW5kZXggJiYgaXRlcmF0ZWUpIHtcbiAgICAgICAgICBhcnJheSA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhMZW5ndGggPSBuYXRpdmVNaW4oYXJyYXkubGVuZ3RoLCBtYXhMZW5ndGgpO1xuICAgICAgICBjYWNoZXNbb3RoSW5kZXhdID0gIWNvbXBhcmF0b3IgJiYgKGl0ZXJhdGVlIHx8IChsZW5ndGggPj0gMTIwICYmIGFycmF5Lmxlbmd0aCA+PSAxMjApKVxuICAgICAgICAgID8gbmV3IFNldENhY2hlKG90aEluZGV4ICYmIGFycmF5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJyYXkgPSBhcnJheXNbMF07XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHNlZW4gPSBjYWNoZXNbMF07XG5cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgcmVzdWx0Lmxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmICghKHNlZW5cbiAgICAgICAgICAgICAgPyBjYWNoZUhhcyhzZWVuLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgOiBpbmNsdWRlcyhyZXN1bHQsIGNvbXB1dGVkLCBjb21wYXJhdG9yKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICAgICAgaWYgKCEoY2FjaGVcbiAgICAgICAgICAgICAgICAgID8gY2FjaGVIYXMoY2FjaGUsIGNvbXB1dGVkKVxuICAgICAgICAgICAgICAgICAgOiBpbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLCBjb21wdXRlZCwgY29tcGFyYXRvcikpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzXG4gICAgICogYG9iamVjdGAgd2l0aCB2YWx1ZXMgdHJhbnNmb3JtZWQgYnkgYGl0ZXJhdGVlYCBhbmQgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRlZSh2YWx1ZSksIGtleSwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludm9rZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogbWV0aG9kIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgdmFyIGZ1bmMgPSBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcnJheUJ1ZmZlclRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGRhdGUgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gZGF0ZVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gICAgICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gICAgICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICAgICAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gICAgICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICAgICAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICAgICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICAgICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzU2FtZVRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICAgICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1JlZ0V4cGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSByZWdleHBUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAgICAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gICAgICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICAgICAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgICAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYmFzZUZvcihzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICAgICAqIGRlZXAgbWVyZ2VzIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gbWVyZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgICAgIHNyY1ZhbHVlID0gc2FmZUdldChzb3VyY2UsIGtleSksXG4gICAgICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHN0YWNrZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiBpc0J1ZmZlcihzcmNWYWx1ZSksXG4gICAgICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNsb25lQnVmZmVyKHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgICAgIGlmIChpc0FyZ3VtZW50cyhvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFpc09iamVjdChvYmpWYWx1ZSkgfHwgaXNGdW5jdGlvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU50aChhcnJheSwgbikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICAgICAgcmV0dXJuIGlzSW5kZXgobiwgbGVuZ3RoKSA/IGFycmF5W25dIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IG9yZGVycyBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICBpZiAoaXRlcmF0ZWVzLmxlbmd0aCkge1xuICAgICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoaXRlcmF0ZWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2VHZXQodmFsdWUsIGl0ZXJhdGVlLmxlbmd0aCA9PT0gMSA/IGl0ZXJhdGVlWzBdIDogaXRlcmF0ZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXRlcmF0ZWU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW2lkZW50aXR5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICAgIHJldHVybiBpdGVyYXRlZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYmFzZVNvcnRCeShyZXN1bHQsIGZ1bmN0aW9uKG9iamVjdCwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7XG4gICAgICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgICAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcblxuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBbGxCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgICAqIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleE9mID0gY29tcGFyYXRvciA/IGJhc2VJbmRleE9mV2l0aCA6IGJhc2VJbmRleE9mLFxuICAgICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICBzZWVuID0gYXJyYXk7XG5cbiAgICAgIGlmIChhcnJheSA9PT0gdmFsdWVzKSB7XG4gICAgICAgIHZhbHVlcyA9IGNvcHlBcnJheSh2YWx1ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4gPSBhcnJheU1hcChhcnJheSwgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZnJvbUluZGV4ID0gMCxcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB3aGlsZSAoKGZyb21JbmRleCA9IGluZGV4T2Yoc2VlbiwgY29tcHV0ZWQsIGZyb21JbmRleCwgY29tcGFyYXRvcikpID4gLTEpIHtcbiAgICAgICAgICBpZiAoc2VlbiAhPT0gYXJyYXkpIHtcbiAgICAgICAgICAgIHNwbGljZS5jYWxsKHNlZW4sIGZyb21JbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBmcm9tSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBpbmRleGVzIG9yIGNhcHR1cmluZyB0aGUgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleGVzIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBpbmRleGVzLmxlbmd0aCA6IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKGxlbmd0aCA9PSBsYXN0SW5kZXggfHwgaW5kZXggIT09IHByZXZpb3VzKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzID0gaW5kZXg7XG4gICAgICAgICAgaWYgKGlzSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgaW5kZXgsIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlVW5zZXQoYXJyYXksIGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5kb21gIHdpdGhvdXQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxvd2VyIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpIHtcbiAgICAgIHJldHVybiBsb3dlciArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZ2VgIGFuZCBgXy5yYW5nZVJpZ2h0YCB3aGljaCBkb2Vzbid0XG4gICAgICogY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcCBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZCAtIHN0YXJ0KSAvIChzdGVwIHx8IDEpKSwgMCksXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XSA9IHN0YXJ0O1xuICAgICAgICBzdGFydCArPSBzdGVwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXBlYXRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJlcGVhdGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVwZWF0KHN0cmluZywgbikge1xuICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgaWYgKCFzdHJpbmcgfHwgbiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgICAgIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHBvbmVudGlhdGlvbl9ieV9zcXVhcmluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgZG8ge1xuICAgICAgICBpZiAobiAlIDIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAobik7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2FtcGxlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZVNpemVgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNhbXBsZVNpemUoY29sbGVjdGlvbiwgbikge1xuICAgICAgdmFyIGFycmF5ID0gdmFsdWVzKGNvbGxlY3Rpb24pO1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGFycmF5LCBiYXNlQ2xhbXAobiwgMCwgYXJyYXkubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICAgICAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKSxcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IGxhc3RJbmRleCkge1xuICAgICAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldO1xuICAgICAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSlcbiAgICAgICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgICAgICA6IChpc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBbXSA6IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgbmVzdGVkID0gbmVzdGVkW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgICAgIG1ldGFNYXAuc2V0KGZ1bmMsIGRhdGEpO1xuICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2h1ZmZsZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKHZhbHVlcyhjb2xsZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb21lYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICFyZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2hcbiAgICAgKiBwZXJmb3JtcyBhIGJpbmFyeSBzZWFyY2ggb2YgYGFycmF5YCB0byBkZXRlcm1pbmUgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmV0SGlnaGVzdF0gU3BlY2lmeSByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgcXVhbGlmaWVkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IGxvdyA6IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gdmFsdWUgJiYgaGlnaCA8PSBIQUxGX01BWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpZ2gpID4+PiAxLFxuICAgICAgICAgICAgICBjb21wdXRlZCA9IGFycmF5W21pZF07XG5cbiAgICAgICAgICBpZiAoY29tcHV0ZWQgIT09IG51bGwgJiYgIWlzU3ltYm9sKGNvbXB1dGVkKSAmJlxuICAgICAgICAgICAgICAocmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSkpKSB7XG4gICAgICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGlnaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleEJ5YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4QnlgXG4gICAgICogd2hpY2ggaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlXG4gICAgICogdGhlaXIgc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFyIGxvdyA9IDAsXG4gICAgICAgICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGhpZ2ggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gaXRlcmF0ZWUodmFsdWUpO1xuICAgICAgdmFyIHZhbElzTmFOID0gdmFsdWUgIT09IHZhbHVlLFxuICAgICAgICAgIHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLFxuICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpLFxuICAgICAgICAgIHZhbElzVW5kZWZpbmVkID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgdmFyIG1pZCA9IG5hdGl2ZUZsb29yKChsb3cgKyBoaWdoKSAvIDIpLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZShhcnJheVttaWRdKSxcbiAgICAgICAgICAgIG90aElzRGVmaW5lZCA9IGNvbXB1dGVkICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBjb21wdXRlZCA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gY29tcHV0ZWQgPT09IGNvbXB1dGVkLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChjb21wdXRlZCk7XG5cbiAgICAgICAgaWYgKHZhbElzTmFOKSB7XG4gICAgICAgICAgdmFyIHNldExvdyA9IHJldEhpZ2hlc3QgfHwgb3RoSXNSZWZsZXhpdmU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiAocmV0SGlnaGVzdCB8fCBvdGhJc0RlZmluZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzTnVsbCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAocmV0SGlnaGVzdCB8fCAhb3RoSXNOdWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1N5bWJvbCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAhb3RoSXNOdWxsICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc1N5bWJvbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3RoSXNOdWxsIHx8IG90aElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0TG93ID0gcmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldExvdykge1xuICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZFVuaXFgIGFuZCBgXy5zb3J0ZWRVbmlxQnlgIHdpdGhvdXRcbiAgICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghaW5kZXggfHwgIWVxKGNvbXB1dGVkLCBzZWVuKSkge1xuICAgICAgICAgIHZhciBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9OdW1iZXJgIHdoaWNoIGRvZXNuJ3QgZW5zdXJlIGNvcnJlY3RcbiAgICAgKiBjb252ZXJzaW9ucyBvZiBiaW5hcnksIGhleGFkZWNpbWFsLCBvciBvY3RhbCBzdHJpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9OdW1iZXIodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gTkFOO1xuICAgICAgfVxuICAgICAgcmV0dXJuICt2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAgICAgKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgICAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgICAgICBpZiAoc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgICAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51cGRhdGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdXBkYXRlcihiYXNlR2V0KG9iamVjdCwgcGF0aCkpLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZHJvcFdoaWxlYCBhbmQgYF8udGFrZVdoaWxlYFxuICAgICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRHJvcF0gU3BlY2lmeSBkcm9wcGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIHRha2luZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgaXNEcm9wLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTtcblxuICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkgJiZcbiAgICAgICAgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cblxuICAgICAgcmV0dXJuIGlzRHJvcFxuICAgICAgICA/IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IDAgOiBpbmRleCksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiBsZW5ndGgpKVxuICAgICAgICA6IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IDApLCAoZnJvbVJpZ2h0ID8gbGVuZ3RoIDogaW5kZXgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgd3JhcHBlclZhbHVlYCB3aGljaCByZXR1cm5zIHRoZSByZXN1bHQgb2ZcbiAgICAgKiBwZXJmb3JtaW5nIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucyBvbiB0aGUgdW53cmFwcGVkIGB2YWx1ZWAsIHdoZXJlIGVhY2hcbiAgICAgKiBzdWNjZXNzaXZlIGFjdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFjdGlvbnMgQWN0aW9ucyB0byBwZXJmb3JtIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVdyYXBwZXJWYWx1ZSh2YWx1ZSwgYWN0aW9ucykge1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFjdGlvbnMsIGZ1bmN0aW9uKHJlc3VsdCwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZnVuYy5hcHBseShhY3Rpb24udGhpc0FyZywgYXJyYXlQdXNoKFtyZXN1bHRdLCBhY3Rpb24uYXJncykpO1xuICAgICAgfSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tpbmRleF0sXG4gICAgICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgICAgIHdoaWxlICgrK290aEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG90aEluZGV4ICE9IGluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKHJlc3VsdCwgMSksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uemlwT2JqZWN0YCB3aGljaCBhc3NpZ25zIHZhbHVlcyB1c2luZyBgYXNzaWduRnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25GdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVppcE9iamVjdChwcm9wcywgdmFsdWVzLCBhc3NpZ25GdW5jKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgdmFsc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGluZGV4IDwgdmFsc0xlbmd0aCA/IHZhbHVlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGFzc2lnbkZ1bmMocmVzdWx0LCBwcm9wc1tpbmRleF0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCBhbiBhcnJheSBsaWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYGlkZW50aXR5YCBpZiBpdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgYGJhc2VSZXN0YCBhbGlhcyB3aGljaCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBgaWRlbnRpdHlgIGJ5IG1vZHVsZVxuICAgICAqIHJlcGxhY2VtZW50IHBsdWdpbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHZhciBjYXN0UmVzdCA9IGJhc2VSZXN0O1xuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYGFycmF5YCB0byBhIHNsaWNlIGlmIGl0J3MgbmVlZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3Qgc2xpY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQ7XG4gICAgICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgY2xlYXJUaW1lb3V0YF0oaHR0cHM6Ly9tZG4uaW8vY2xlYXJUaW1lb3V0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBpZCBUaGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3Qgb2YgdGhlIHRpbWVyIHRvIGNsZWFyLlxuICAgICAqL1xuICAgIHZhciBjbGVhclRpbWVvdXQgPSBjdHhDbGVhclRpbWVvdXQgfHwgZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiByb290LmNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICBidWZmZXIuY29weShyZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICAgICAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gICAgICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICAgICAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgdmFsdWVgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBc2NlbmRpbmcodmFsdWUsIG90aGVyKSB7XG4gICAgICBpZiAodmFsdWUgIT09IG90aGVyKSB7XG4gICAgICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgICB2YWxJc1JlZmxleGl2ZSA9IHZhbHVlID09PSB2YWx1ZSxcbiAgICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgICAgIHZhciBvdGhJc0RlZmluZWQgPSBvdGhlciAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3RoSXNOdWxsID0gb3RoZXIgPT09IG51bGwsXG4gICAgICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgICAgIG90aElzU3ltYm9sID0gaXNTeW1ib2wob3RoZXIpO1xuXG4gICAgICAgIGlmICgoIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wgJiYgIXZhbElzU3ltYm9sICYmIHZhbHVlID4gb3RoZXIpIHx8XG4gICAgICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAgICAgKHZhbElzTnVsbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAoIXZhbElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgICAgICAob3RoSXNTeW1ib2wgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlICYmICF2YWxJc051bGwgJiYgIXZhbElzU3ltYm9sKSB8fFxuICAgICAgICAgICAgKG90aElzTnVsbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICFvdGhJc1JlZmxleGl2ZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gICAgICogYW5kIHN0YWJsZSBzb3J0IHRoZW0uXG4gICAgICpcbiAgICAgKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICAgICAqIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yIGRlc2NlbmRpbmcgb3IgXCJhc2NcIiBmb3IgYXNjZW5kaW5nIHNvcnQgb3JkZXJcbiAgICAgKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW5bXXxzdHJpbmdbXX0gb3JkZXJzIFRoZSBvcmRlciB0byBzb3J0IGJ5IGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBvdGhlciwgb3JkZXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBvYmpDcml0ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSxcbiAgICAgICAgICBvdGhDcml0ZXJpYSA9IG90aGVyLmNyaXRlcmlhLFxuICAgICAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgICAgICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sIG90aENyaXRlcmlhW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXJzTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb3JkZXIgPSBvcmRlcnNbaW5kZXhdO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgKiAob3JkZXIgPT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAgICAgLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3JcbiAgICAgIC8vIGBvYmplY3RgIGFuZCBgb3RoZXJgLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMTI0N1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGFsc28gZW5zdXJlcyBhIHN0YWJsZSBzb3J0IGluIFY4IGFuZCBvdGhlciBlbmdpbmVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0LmluZGV4IC0gb3RoZXIuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gICAgICogcGxhY2Vob2xkZXJzLCBhbmQgcHJvdmlkZWQgYXJndW1lbnRzIGludG8gYSBzaW5nbGUgYXJyYXkgb2YgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgICB9XG4gICAgICB3aGlsZSAoKythcmdzSW5kZXggPCBob2xkZXJzTGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXgrK10gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICAgICAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICAgICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgICAgICBob2xkZXJzSW5kZXggPSAtMSxcbiAgICAgICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7XG5cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICAgICAgfVxuICAgICAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgICAgIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgICAgICByZXN1bHRbb2Zmc2V0ICsgcmlnaHRJbmRleF0gPSBwYXJ0aWFsc1tyaWdodEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICAgICAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgICAgIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05ldykge1xuICAgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhZ2dyZWdhdG9yIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBzZXR0ZXIsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGJhc2VFYWNoYCBvciBgYmFzZUVhY2hSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgICAgICA/IHN0cmluZ1RvQXJyYXkoc3RyaW5nKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICAgICAgPyBzdHJTeW1ib2xzWzBdXG4gICAgICAgICAgOiBzdHJpbmcuY2hhckF0KDApO1xuXG4gICAgICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IGNhc3RTbGljZShzdHJTeW1ib2xzLCAxKS5qb2luKCcnKVxuICAgICAgICAgIDogc3RyaW5nLnNsaWNlKDEpO1xuXG4gICAgICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5jYW1lbENhc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBlYWNoIHdvcmQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBhcnJheVJlZHVjZSh3b3JkcyhkZWJ1cnIoc3RyaW5nKS5yZXBsYWNlKHJlQXBvcywgJycpKSwgY2FsbGJhY2ssICcnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAgICAgKiB3aGV0aGVyIGl0IHdhcyBpbnZva2VkIGFzIHBhcnQgb2YgYSBgbmV3YCBleHByZXNzaW9uIG9yIGJ5IGBjYWxsYCBvciBgYXBwbHlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBDdG9yIFRoZSBjb25zdHJ1Y3RvciB0byB3cmFwLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3RvcihDdG9yKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1mdW5jdGlvbi1vYmplY3RzLWNhbGwtdGhpc2FyZ3VtZW50LWFyZ3VtZW50c2xpc3RcbiAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgICAgIC8vIE1pbWljIHRoZSBjb25zdHJ1Y3RvcidzIGByZXR1cm5gIGJlaGF2aW9yLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gICAgICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyZ3MsIGhvbGRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSAtIGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZuLCB0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgICB2YXIgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgICAgIHByZWRpY2F0ZSA9IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSk7IH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgICAgIHJldHVybiBpbmRleCA+IC0xID8gaXRlcmFibGVbaXRlcmF0ZWUgPyBjb2xsZWN0aW9uW2luZGV4XSA6IGluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsb3cgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihmdW5jcykge1xuICAgICAgICB2YXIgbGVuZ3RoID0gZnVuY3MubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgICAgICBwcmVyZXEgPSBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS50aHJ1O1xuXG4gICAgICAgIGlmIChmcm9tUmlnaHQpIHtcbiAgICAgICAgICBmdW5jcy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2luZGV4XTtcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJlcmVxICYmICF3cmFwcGVyICYmIGdldEZ1bmNOYW1lKGZ1bmMpID09ICd3cmFwcGVyJykge1xuICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgTG9kYXNoV3JhcHBlcihbXSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gd3JhcHBlciA/IGluZGV4IDogbGVuZ3RoO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGZ1bmMgPSBmdW5jc1tpbmRleF07XG5cbiAgICAgICAgICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgICAgICAgICAgZGF0YSA9IGZ1bmNOYW1lID09ICd3cmFwcGVyJyA/IGdldERhdGEoZnVuYykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc0xhemlhYmxlKGRhdGFbMF0pICYmXG4gICAgICAgICAgICAgICAgZGF0YVsxXSA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSAmJlxuICAgICAgICAgICAgICAgICFkYXRhWzRdLmxlbmd0aCAmJiBkYXRhWzldID09IDFcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gd3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlciwgZGF0YVszXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGggPT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKVxuICAgICAgICAgICAgICA/IHdyYXBwZXJbZnVuY05hbWVdKClcbiAgICAgICAgICAgICAgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGxlbmd0aCA/IGZ1bmNzW2luZGV4XS5hcHBseSh0aGlzLCBhcmdzKSA6IHZhbHVlO1xuXG4gICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGljYXRpb24sIGFuZCBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkXG4gICAgICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0FyeSA9IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLFxuICAgICAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxcbiAgICAgICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgICAgICBob2xkZXJzQ291bnQgPSBjb3VudEhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgaXNDdXJyaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgICAgICBpZiAoaXNDdXJyaWVkICYmIGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHRoaXNBcmcsXG4gICAgICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChhcmdQb3MpIHtcbiAgICAgICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7XG4gICAgICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpIHtcbiAgICAgICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmludmVydEJ5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRvSXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludmVydGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmVydGVyKHNldHRlciwgdG9JdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZlcnRlcihvYmplY3QsIHNldHRlciwgdG9JdGVyYXRlZShpdGVyYXRlZSksIHt9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSB1c2VkIGZvciBgdW5kZWZpbmVkYCBhcmd1bWVudHMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgb3RoZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG90aGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSBiYXNlVG9TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgb3RoZXIgPSBiYXNlVG9TdHJpbmcob3RoZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb051bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb051bWJlcihvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IG9wZXJhdG9yKHZhbHVlLCBvdGhlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ub3ZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGl0ZXJhdGVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBvdmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU92ZXIoYXJyYXlGdW5jKSB7XG4gICAgICByZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oaXRlcmF0ZWVzKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgICB2YXIgdGhpc0FyZyA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIGFycmF5RnVuYyhpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0ZWUsIHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgIGJhc2VkIG9uIGBsZW5ndGhgLiBUaGUgYGNoYXJzYCBzdHJpbmdcbiAgICAgKiBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWRkaW5nKGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIGNoYXJzID0gY2hhcnMgPT09IHVuZGVmaW5lZCA/ICcgJyA6IGJhc2VUb1N0cmluZyhjaGFycyk7XG5cbiAgICAgIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgICAgIGlmIChjaGFyc0xlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJzTGVuZ3RoID8gYmFzZVJlcGVhdChjaGFycywgbGVuZ3RoKSA6IGNoYXJzO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VSZXBlYXQoY2hhcnMsIG5hdGl2ZUNlaWwobGVuZ3RoIC8gc3RyaW5nU2l6ZShjaGFycykpKTtcbiAgICAgIHJldHVybiBoYXNVbmljb2RlKGNoYXJzKVxuICAgICAgICA/IGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHJlc3VsdCksIDAsIGxlbmd0aCkuam9pbignJylcbiAgICAgICAgOiByZXN1bHQuc2xpY2UoMCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gICAgICogb2YgYHRoaXNBcmdgIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCksXG4gICAgICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgICAgIGFyZ3NbbGVmdEluZGV4KytdID0gYXJndW1lbnRzWysrYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJhbmdlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICAgICAgaWYgKHN0ZXAgJiYgdHlwZW9mIHN0ZXAgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RhcnQsIGVuZCwgc3RlcCkpIHtcbiAgICAgICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXAgPSBzdGVwID09PSB1bmRlZmluZWQgPyAoc3RhcnQgPCBlbmQgPyAxIDogLTEpIDogdG9GaW5pdGUoc3RlcCk7XG4gICAgICAgIHJldHVybiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSByZWxhdGlvbmFsIG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlbGF0aW9uYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24ob3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnICYmIHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICBvdGhlciA9IHRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gICAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICAgICAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgICAgIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgICAgIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gICAgICB9XG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLnJvdW5kYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBNYXRoYCBtZXRob2QgdG8gdXNlIHdoZW4gcm91bmRpbmcuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcm91bmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUm91bmQobWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBNYXRoW21ldGhvZE5hbWVdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PSBudWxsID8gMCA6IG5hdGl2ZU1pbih0b0ludGVnZXIocHJlY2lzaW9uKSwgMjkyKTtcbiAgICAgICAgaWYgKHByZWNpc2lvbiAmJiBuYXRpdmVJc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgICAgLy8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4gICAgICAgICAgLy8gU2VlIFtNRE5dKGh0dHBzOi8vbWRuLmlvL3JvdW5kI0V4YW1wbGVzKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgIHZhciBwYWlyID0gKHRvU3RyaW5nKG51bWJlcikgKyAnZScpLnNwbGl0KCdlJyksXG4gICAgICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7XG5cbiAgICAgICAgICBwYWlyID0gKHRvU3RyaW5nKHZhbHVlKSArICdlJykuc3BsaXQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gKyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdIC0gcHJlY2lzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gICAgICovXG4gICAgdmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhaXJzIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyhvYmplY3QpO1xuICAgICAgICBpZiAodGFnID09IG1hcFRhZykge1xuICAgICAgICAgIHJldHVybiBtYXBUb0FycmF5KG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9QYWlycyhvYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlVG9QYWlycyhvYmplY3QsIGtleXNGdW5jKG9iamVjdCkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gICAgICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICogICAgMSAtIGBfLmJpbmRgXG4gICAgICogICAgMiAtIGBfLmJpbmRLZXlgXG4gICAgICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gICAgICogICAgOCAtIGBfLmN1cnJ5YFxuICAgICAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICAgICAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICAgICAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gICAgICogIDEyOCAtIGBfLnJlYXJnYFxuICAgICAqICAyNTYgLSBgXy5hcnlgXG4gICAgICogIDUxMiAtIGBfLmZsaXBgXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgICAgIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICAgICAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICAgICAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgICAgIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICAgICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gICAgICB9XG4gICAgICBmdW5jID0gbmV3RGF0YVswXTtcbiAgICAgIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICAgICAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gICAgICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gICAgICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgICAgIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gICAgICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgICAgIH1cbiAgICAgIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICAgICAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gICAgICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gICAgICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAgICAgKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzRGVlcGAgdG8gY3VzdG9taXplIGl0cyBgXy5tZXJnZWAgdXNlIHRvIG1lcmdlIHNvdXJjZVxuICAgICAqIG9iamVjdHMgaW50byBkZXN0aW5hdGlvbiBvYmplY3RzIHRoYXQgYXJlIHBhc3NlZCB0aHJ1LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykge1xuICAgICAgaWYgKGlzT2JqZWN0KG9ialZhbHVlKSAmJiBpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgb2JqVmFsdWUpO1xuICAgICAgICBiYXNlTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCB1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICAgICAqIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gICAgICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gICAgICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gICAgICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgICAgIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gICAgICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICAgICAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgICAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICAgICAgY2FzZSByZWdleHBUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgICAgIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICAgICAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gICAgICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgICAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgICAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gICAgICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSAoZnVuYy5uYW1lICsgJycpLFxuICAgICAgICAgIGFycmF5ID0gcmVhbE5hbWVzW3Jlc3VsdF0sXG4gICAgICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBhcnJheVtsZW5ndGhdLFxuICAgICAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgICAgICBpZiAob3RoZXJGdW5jID09IG51bGwgfHwgb3RoZXJGdW5jID09IGZ1bmMpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFyZ3VtZW50IHBsYWNlaG9sZGVyIHZhbHVlIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gsICdwbGFjZWhvbGRlcicpID8gbG9kYXNoIDogZnVuYztcbiAgICAgIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgXCJpdGVyYXRlZVwiIGZ1bmN0aW9uLiBJZiBgXy5pdGVyYXRlZWAgaXMgY3VzdG9taXplZCxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1c3RvbSBtZXRob2QsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBiYXNlSXRlcmF0ZWVgLlxuICAgICAqIElmIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBjaG9zZW4gZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRoZW0gYW5kXG4gICAgICogaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBbdmFsdWVdIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiB0aGUgY3JlYXRlZCBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNob3NlbiBmdW5jdGlvbiBvciBpdHMgcmVzdWx0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdGVlKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pdGVyYXRlZSB8fCBpdGVyYXRlZTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gaXRlcmF0ZWUgPyBiYXNlSXRlcmF0ZWUgOiByZXN1bHQ7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHJlc3VsdChhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSkgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgICAgIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgICAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgICAgICA6IGRhdGEubWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICAgICAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgaWYgKHVubWFza2VkKSB7XG4gICAgICAgIGlmIChpc093bikge1xuICAgICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICovXG4gICAgdmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICovXG4gICAgdmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIHZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4gICAgLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuICAgIGlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAgICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgICAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAgICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICAgICAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgICAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZpZXcsIGFwcGx5aW5nIGFueSBgdHJhbnNmb3Jtc2AgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdHJhbnNmb3JtcyBUaGUgdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSB2aWV3LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzdGFydGAgYW5kIGBlbmRgXG4gICAgICogIHBvc2l0aW9ucyBvZiB0aGUgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRWaWV3KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRyYW5zZm9ybXNbaW5kZXhdLFxuICAgICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2Ryb3AnOiAgICAgIHN0YXJ0ICs9IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Ryb3BSaWdodCc6IGVuZCAtPSBzaXplOyBicmVhaztcbiAgICAgICAgICBjYXNlICd0YWtlJzogICAgICBlbmQgPSBuYXRpdmVNaW4oZW5kLCBzdGFydCArIHNpemUpOyBicmVhaztcbiAgICAgICAgICBjYXNlICd0YWtlUmlnaHQnOiBzdGFydCA9IG5hdGl2ZU1heChzdGFydCwgZW5kIC0gc2l6ZSk7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyAnc3RhcnQnOiBzdGFydCwgJ2VuZCc6IGVuZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd3JhcHBlciBkZXRhaWxzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICAgICAgdmFyIG1hdGNoID0gc291cmNlLm1hdGNoKHJlV3JhcERldGFpbHMpO1xuICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICAgICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICAgICAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAgICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gICAgICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgICAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICAgICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgICAgIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgICAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgICAgIDoge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgICAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHNldFRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICAgICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIGRldGFpbHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICAgIGRldGFpbHNbbGFzdEluZGV4XSA9IChsZW5ndGggPiAxID8gJyYgJyA6ICcnKSArIGRldGFpbHNbbGFzdEluZGV4XTtcbiAgICAgIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICAgICAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAgICAgKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICAgICAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICAgICApIHtcbiAgICAgICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgICAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICAgICAgOiAodmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gICAgICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgICAgICBvdGhlciA9IGxvZGFzaFtmdW5jTmFtZV07XG5cbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgICAgIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gICAgICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaXMgY2FwYWJsZSBvZiBiZWluZyBtYXNrZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2FibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICB2YXIgaXNNYXNrYWJsZSA9IGNvcmVKc0RhdGEgPyBpc0Z1bmN0aW9uIDogc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICAgICAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICAgICAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gICAgICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gICAgICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gICAgICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAgICAgKlxuICAgICAqIE1lcmdpbmcgbWV0YWRhdGEgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdyYXBwZXJzIHVzZWQgdG8gaW52b2tlIGEgZnVuY3Rpb24uXG4gICAgICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAgICAgKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gICAgICogYF8ucmVhcmdgIG1vZGlmeSBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmVcbiAgICAgKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAgICAgKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICAgICAqIGFuZCBvciBgXy5yZWFyZ2AgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGVzdGluYXRpb24gbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gICAgICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSxcbiAgICAgICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgICAgIHZhciBpc0NvbWJvID1cbiAgICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpO1xuXG4gICAgICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgICAgIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICAgICAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRykge1xuICAgICAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgICAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAgICBuZXdCaXRtYXNrIHw9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyA/IDAgOiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUc7XG4gICAgICB9XG4gICAgICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICAgICAgdmFyIHZhbHVlID0gc291cmNlWzNdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IHZhbHVlO1xuICAgICAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gICAgICB9XG4gICAgICAvLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxuICAgICAgdmFsdWUgPSBzb3VyY2VbNV07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcGFydGlhbHMgPSBkYXRhWzVdO1xuICAgICAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgICAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgICAgIHZhbHVlID0gc291cmNlWzddO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyeWAgaWYgaXQncyBzbWFsbGVyLlxuICAgICAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgICAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgICAgICBkYXRhWzldID0gc291cmNlWzldO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICAgICAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgICAgIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAgICAgKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICAgICAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGFyZW50IHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlb3JkZXIgYGFycmF5YCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBpbmRleGVzIHdoZXJlIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFycmF5IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVvcmRlcihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICAgICAgb2xkQXJyYXkgPSBjb3B5QXJyYXkoYXJyYXkpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBhcnJheVtsZW5ndGhdID0gaXNJbmRleChpbmRleCwgYXJyTGVuZ3RoKSA/IG9sZEFycmF5W2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhZmVHZXQob2JqZWN0LCBrZXkpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAgICAgKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gICAgICogZnVuY3Rpb24gdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlXG4gICAgICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBzZXREYXRhID0gc2hvcnRPdXQoYmFzZVNldERhdGEpO1xuXG4gICAgLyoqXG4gICAgICogQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIGdsb2JhbCBbYHNldFRpbWVvdXRgXShodHRwczovL21kbi5pby9zZXRUaW1lb3V0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gICAgICovXG4gICAgdmFyIHNldFRpbWVvdXQgPSBjdHhTZXRUaW1lb3V0IHx8IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICAgIHJldHVybiByb290LnNldFRpbWVvdXQoZnVuYywgd2FpdCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gICAgICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgICAgIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKHdyYXBwZXIsIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgdXBkYXRlV3JhcERldGFpbHMoZ2V0V3JhcERldGFpbHMoc291cmNlKSwgYml0bWFzaykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAgICAgKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAgICAgKiBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gICAgICB2YXIgY291bnQgPSAwLFxuICAgICAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgICAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgd2hpY2ggbXV0YXRlcyBhbmQgc2V0cyB0aGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9YXJyYXkubGVuZ3RoXSBUaGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgc2l6ZSA9IHNpemUgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHNpemU7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IHNpemUpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtyYW5kXTtcblxuICAgICAgICBhcnJheVtyYW5kXSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBhcnJheS5sZW5ndGggPSBzaXplO1xuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIHZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgICAgIH1cbiAgICAgIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gICAgICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscywgYml0bWFzaykge1xuICAgICAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgICAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICAgICAgaWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUpKSB7XG4gICAgICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGB3cmFwcGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZXIgVGhlIHdyYXBwZXIgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHtcbiAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gICAgICByZXN1bHQuX19pbmRleF9fICA9IHdyYXBwZXIuX19pbmRleF9fO1xuICAgICAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byBncm91cHMgdGhlIGxlbmd0aCBvZiBgc2l6ZWAuXG4gICAgICogSWYgYGFycmF5YCBjYW4ndCBiZSBzcGxpdCBldmVubHksIHRoZSBmaW5hbCBjaHVuayB3aWxsIGJlIHRoZSByZW1haW5pbmdcbiAgICAgKiBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0xXSBUaGUgbGVuZ3RoIG9mIGVhY2ggY2h1bmtcbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNodW5rcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jaHVuayhbJ2EnLCAnYicsICdjJywgJ2QnXSwgMik7XG4gICAgICogLy8gPT4gW1snYScsICdiJ10sIFsnYycsICdkJ11dXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAzKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InLCAnYyddLCBbJ2QnXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjaHVuayhhcnJheSwgc2l6ZSwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc2l6ZSwgZ3VhcmQpIDogc2l6ZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBzaXplID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSBuYXRpdmVNYXgodG9JbnRlZ2VyKHNpemUpLCAwKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICAgICAqIGAwYCwgYFwiXCJgLCBgdW5kZWZpbmVkYCwgYW5kIGBOYU5gIGFyZSBmYWxzZXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY29tcGFjdChbMCwgMSwgZmFsc2UsIDIsICcnLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgY29uY2F0ZW5hdGluZyBgYXJyYXlgIHdpdGggYW55IGFkZGl0aW9uYWwgYXJyYXlzXG4gICAgICogYW5kL29yIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY29uY2F0ZW5hdGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgY29uY2F0ZW5hdGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMV07XG4gICAgICogdmFyIG90aGVyID0gXy5jb25jYXQoYXJyYXksIDIsIFszXSwgW1s0XV0pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob3RoZXIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF1dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uY2F0KCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCAtIDEpLFxuICAgICAgICAgIGFycmF5ID0gYXJndW1lbnRzWzBdLFxuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICBhcmdzW2luZGV4IC0gMV0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5UHVzaChpc0FycmF5KGFycmF5KSA/IGNvcHlBcnJheShhcnJheSkgOiBbYXJyYXldLCBiYXNlRmxhdHRlbihhcmdzLCAxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbEJ5YCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2VCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kaWZmZXJlbmNlQnkoW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCBbeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2VCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QodmFsdWVzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBvcmRlciBhbmRcbiAgICAgKiByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvclxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsV2l0aGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2VXaXRoKG9iamVjdHMsIFt7ICd4JzogMSwgJ3knOiAyIH1dLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2VXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KHZhbHVlcyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICAgICAgY29tcGFyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBuIDwgMCA/IDAgOiBuLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgbiA9IGxlbmd0aCAtIG47XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wV2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbGxzIGVsZW1lbnRzIG9mIGBhcnJheWAgd2l0aCBgdmFsdWVgIGZyb20gYHN0YXJ0YCB1cCB0bywgYnV0IG5vdFxuICAgICAqIGluY2x1ZGluZywgYGVuZGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfLmZpbGwoYXJyYXksICdhJyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYScsICdhJywgJ2EnXVxuICAgICAqXG4gICAgICogXy5maWxsKEFycmF5KDMpLCAyKTtcbiAgICAgKiAvLyA9PiBbMiwgMiwgMl1cbiAgICAgKlxuICAgICAqIF8uZmlsbChbNCwgNiwgOCwgMTBdLCAnKicsIDEsIDMpO1xuICAgICAqIC8vID0+IFs0LCAnKicsICcqJywgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAmJiB0eXBlb2Ygc3RhcnQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHZhbHVlLCBzdGFydCkpIHtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICAgICAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHNcbiAgICAgKiBvZiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ3BlYmJsZXMnOyB9KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgICAgaWYgKGZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICAgIGluZGV4ID0gZnJvbUluZGV4IDwgMFxuICAgICAgICAgID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKVxuICAgICAgICAgIDogbmF0aXZlTWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgNCwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuRGVlcChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBJTkZJTklUWSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBmbGF0dGVuIGBhcnJheWAgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIFsyLCBbMywgWzRdXSwgNV1dO1xuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgWzRdLCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZXB0aChhcnJheSwgZGVwdGgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGRlcHRoID0gZGVwdGggPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGgpO1xuICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkXG4gICAgICogZnJvbSBrZXktdmFsdWUgYHBhaXJzYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIFRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mcm9tUGFpcnMoW1snYScsIDFdLCBbJ2InLCAyXV0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21QYWlycyhwYWlycykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBwYWlyID0gcGFpcnNbaW5kZXhdO1xuICAgICAgICByZXN1bHRbcGFpclswXV0gPSBwYWlyWzFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgZmlyc3RcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5oZWFkKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBhcnJheVswXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAgICAgKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlU2xpY2UoYXJyYXksIDAsIC0xKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbGwgZ2l2ZW4gYXJyYXlzXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMl1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZClcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH1dXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbkJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyksXG4gICAgICAgICAgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcblxuICAgICAgaWYgKGl0ZXJhdGVlID09PSBsYXN0KG1hcHBlZCkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXBwZWQucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzXG4gICAgICogb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9XVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKSxcbiAgICAgICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBtYXBwZWQucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQsIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFsbCBlbGVtZW50cyBpbiBgYXJyYXlgIGludG8gYSBzdHJpbmcgc2VwYXJhdGVkIGJ5IGBzZXBhcmF0b3JgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbnZlcnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXBhcmF0b3I9JywnXSBUaGUgZWxlbWVudCBzZXBhcmF0b3IuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgam9pbmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5qb2luKFsnYScsICdiJywgJ2MnXSwgJ34nKTtcbiAgICAgKiAvLyA9PiAnYX5ifmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gam9pbihhcnJheSwgc2VwYXJhdG9yKSB7XG4gICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/ICcnIDogbmF0aXZlSm9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgYXJyYXlgIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogLy8gU2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLlxuICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCkgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgICAgICA/IHN0cmljdExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpXG4gICAgICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZWxlbWVudCBhdCBpbmRleCBgbmAgb2YgYGFycmF5YC4gSWYgYG5gIGlzIG5lZ2F0aXZlLCB0aGUgbnRoXG4gICAgICogZWxlbWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBudGggZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTtcbiAgICAgKlxuICAgICAqIF8ubnRoKGFycmF5LCAxKTtcbiAgICAgKiAvLyA9PiAnYidcbiAgICAgKlxuICAgICAqIF8ubnRoKGFycmF5LCAtMik7XG4gICAgICogLy8gPT4gJ2MnO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG50aChhcnJheSwgbikge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZU50aChhcnJheSwgdG9JbnRlZ2VyKG4pKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBnaXZlbiB2YWx1ZXMgZnJvbSBgYXJyYXlgIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLndpdGhvdXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBgXy5yZW1vdmVgXG4gICAgICogdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgcHJlZGljYXRlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107XG4gICAgICpcbiAgICAgKiBfLnB1bGwoYXJyYXksICdhJywgJ2MnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydiJywgJ2InXVxuICAgICAqL1xuICAgIHZhciBwdWxsID0gYmFzZVJlc3QocHVsbEFsbCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGwoYXJyYXksIFsnYScsICdjJ10pO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbChhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZUJ5YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDMgfSwgeyAneCc6IDEgfV07XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGxCeShhcnJheSwgW3sgJ3gnOiAxIH0sIHsgJ3gnOiAzIH1dLCAneCcpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsQnkoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxBbGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBjb21wYXJhdG9yIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VXaXRoYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAzLCAneSc6IDQgfSwgeyAneCc6IDUsICd5JzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbFdpdGgoYXJyYXksIFt7ICd4JzogMywgJ3knOiA0IH1dLCBfLmlzRXF1YWwpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogNSwgJ3knOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbFdpdGgoYXJyYXksIHZhbHVlcywgY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSBgYXJyYXlgIGNvcnJlc3BvbmRpbmcgdG8gYGluZGV4ZXNgIGFuZCByZXR1cm5zIGFuXG4gICAgICogYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uYXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IFtpbmRleGVzXSBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gICAgICogdmFyIHB1bGxlZCA9IF8ucHVsbEF0KGFycmF5LCBbMSwgM10pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYScsICdjJ11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHB1bGxlZCk7XG4gICAgICogLy8gPT4gWydiJywgJ2QnXVxuICAgICAqL1xuICAgIHZhciBwdWxsQXQgPSBmbGF0UmVzdChmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGJhc2VBdChhcnJheSwgaW5kZXhlcyk7XG5cbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGFycmF5TWFwKGluZGV4ZXMsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpc0luZGV4KGluZGV4LCBsZW5ndGgpID8gK2luZGV4IDogaW5kZXg7XG4gICAgICB9KS5zb3J0KGNvbXBhcmVBc2NlbmRpbmcpKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByZW1vdmVkIGVsZW1lbnRzLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5maWx0ZXJgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBgXy5wdWxsYFxuICAgICAqIHRvIHB1bGwgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzLCA0XTtcbiAgICAgKiB2YXIgZXZlbnMgPSBfLnJlbW92ZShhcnJheSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDNdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhldmVucyk7XG4gICAgICogLy8gPT4gWzIsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VzIGBhcnJheWAgc28gdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0LCB0aGUgc2Vjb25kXG4gICAgICogZWxlbWVudCBiZWNvbWVzIHRoZSBzZWNvbmQgdG8gbGFzdCwgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YCBhbmQgaXMgYmFzZWQgb25cbiAgICAgKiBbYEFycmF5I3JldmVyc2VgXShodHRwczovL21kbi5pby9BcnJheS9yZXZlcnNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8ucmV2ZXJzZShhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmV2ZXJzZShhcnJheSkge1xuICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgPyBhcnJheSA6IG5hdGl2ZVJldmVyc2UuY2FsbChhcnJheSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnN0ZWFkIG9mXG4gICAgICogW2BBcnJheSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJyYXlzIGFyZVxuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgJiYgdHlwZW9mIGVuZCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VzIGEgYmluYXJ5IHNlYXJjaCB0byBkZXRlcm1pbmUgdGhlIGxvd2VzdCBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXgoWzMwLCA1MF0sIDQwKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICAgICAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpO1xuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXEoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBoaWdoZXN0XG4gICAgICogaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvXG4gICAgICogbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleChbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXgoYXJyYXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRMYXN0SW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgKiBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmxhc3RJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKSAtIDE7XG4gICAgICAgIGlmIChlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRVbmlxKFsxLCAxLCAyXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkVW5pcShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXkpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxQnlgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICAgICAqIGZvciBzb3J0ZWQgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRVbmlxQnkoWzEuMSwgMS4yLCAyLjMsIDIuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjEsIDIuM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRVbmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWlsKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFpbChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMSwgbGVuZ3RoKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2UoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICBuID0gbGVuZ3RoIC0gbjtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuIEVsZW1lbnRzIGFyZVxuICAgICAqIHRha2VuIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy4gRWxlbWVudHNcbiAgICAgKiBhcmUgdGFrZW4gdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgdmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAqIHdoaWNoIHVuaXF1ZW5lc3MgaXMgY29tcHV0ZWQuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tIHRoZSBmaXJzdFxuICAgICAqIGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlvbkJ5KFsyLjFdLCBbMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnVuaW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIHVuaW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb21cbiAgICAgKiB0aGUgZmlyc3QgYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8udW5pb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpbiB3aGljaCBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggZWxlbWVudFxuICAgICAqIGlzIGtlcHQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXJcbiAgICAgKiBpbiB0aGUgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxKFsyLCAxLCAyXSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXkpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gICAgICogdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGVcbiAgICAgKiBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxQnkoWzIuMSwgMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8udW5pcVdpdGgob2JqZWN0cywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcVdpdGgoYXJyYXksIGNvbXBhcmF0b3IpIHtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgZ3JvdXBlZFxuICAgICAqIGVsZW1lbnRzIGFuZCBjcmVhdGVzIGFuIGFycmF5IHJlZ3JvdXBpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZWlyIHByZS16aXBcbiAgICAgKiBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB6aXBwZWQgPSBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICAgICAqXG4gICAgICogXy51bnppcCh6aXBwZWQpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IDA7XG4gICAgICBhcnJheSA9IGFycmF5RmlsdGVyKGFycmF5LCBmdW5jdGlvbihncm91cCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoZ3JvdXApKSB7XG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGdyb3VwLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmFzZVRpbWVzKGxlbmd0aCwgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICogaG93IHJlZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAqICByZWdyb3VwZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHppcHBlZCA9IF8uemlwKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0pO1xuICAgICAqIC8vID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV1cbiAgICAgKlxuICAgICAqIF8udW56aXBXaXRoKHppcHBlZCwgXy5hZGQpO1xuICAgICAqIC8vID0+IFszLCAzMCwgMzAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwV2l0aChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHVuemlwKGFycmF5KTtcbiAgICAgIGlmIChpdGVyYXRlZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlNYXAocmVzdWx0LCBmdW5jdGlvbihncm91cCkge1xuICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0ZWUsIHVuZGVmaW5lZCwgZ3JvdXApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBleGNsdWRpbmcgYWxsIGdpdmVuIHZhbHVlcyB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy54b3JcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53aXRob3V0KFsyLCAxLCAyLCAzXSwgMSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICovXG4gICAgdmFyIHdpdGhvdXQgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZVxuICAgICAqIFtzeW1tZXRyaWMgZGlmZmVyZW5jZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ltbWV0cmljX2RpZmZlcmVuY2UpXG4gICAgICogb2YgdGhlIGdpdmVuIGFycmF5cy4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXJcbiAgICAgKiB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLndpdGhvdXRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy54b3IoWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqL1xuICAgIHZhciB4b3IgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ueG9yYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gICAgICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZFxuICAgICAqIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lXG4gICAgICogYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy54b3JCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4yLCAzLjRdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnhvckJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciB4b3JCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICAgICAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8ueG9yV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciB4b3JXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gICAgICogZmlyc3QgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgKiBzZWNvbmQgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICovXG4gICAgdmFyIHppcCA9IGJhc2VSZXN0KHVuemlwKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZnJvbVBhaXJzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHR3byBhcnJheXMsXG4gICAgICogb25lIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwT2JqZWN0KFsnYScsICdiJ10sIFsxLCAyXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGFzc2lnblZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcE9iamVjdGAgZXhjZXB0IHRoYXQgaXQgc3VwcG9ydHMgcHJvcGVydHkgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwT2JqZWN0RGVlcChbJ2EuYlswXS5jJywgJ2EuYlsxXS5kJ10sIFsxLCAyXSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2InOiBbeyAnYyc6IDEgfSwgeyAnZCc6IDIgfV0gfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0RGVlcChwcm9wcywgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBiYXNlU2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHRvIHNwZWNpZnlcbiAgICAgKiBob3cgZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lXG4gICAgICogIGdyb3VwZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwV2l0aChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdLCBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gYSArIGIgKyBjO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFsxMTEsIDIyMl1cbiAgICAgKi9cbiAgICB2YXIgemlwV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICAgICAgaXRlcmF0ZWUgPSBsZW5ndGggPiAxID8gYXJyYXlzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpdGVyYXRlZSA9IHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nID8gKGFycmF5cy5wb3AoKSwgaXRlcmF0ZWUpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHVuemlwV2l0aChhcnJheXMsIGl0ZXJhdGVlKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHRoYXQgd3JhcHMgYHZhbHVlYCB3aXRoIGV4cGxpY2l0IG1ldGhvZFxuICAgICAqIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLiBUaGUgcmVzdWx0IG9mIHN1Y2ggc2VxdWVuY2VzIG11c3QgYmUgdW53cmFwcGVkXG4gICAgICogd2l0aCBgXyN2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHlvdW5nZXN0ID0gX1xuICAgICAqICAgLmNoYWluKHVzZXJzKVxuICAgICAqICAgLnNvcnRCeSgnYWdlJylcbiAgICAgKiAgIC5tYXAoZnVuY3Rpb24obykge1xuICAgICAqICAgICByZXR1cm4gby51c2VyICsgJyBpcyAnICsgby5hZ2U7XG4gICAgICogICB9KVxuICAgICAqICAgLmhlYWQoKVxuICAgICAqICAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMgaXMgMSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjaGFpbih2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaCh2YWx1ZSk7XG4gICAgICByZXN1bHQuX19jaGFpbl9fID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBgaW50ZXJjZXB0b3JgIGFuZCByZXR1cm5zIGB2YWx1ZWAuIFRoZSBpbnRlcmNlcHRvclxuICAgICAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvXG4gICAgICogXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlIGluIG9yZGVyIHRvIG1vZGlmeSBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSlcbiAgICAgKiAgLnRhcChmdW5jdGlvbihhcnJheSkge1xuICAgICAqICAgIC8vIE11dGF0ZSBpbnB1dCBhcnJheS5cbiAgICAgKiAgICBhcnJheS5wb3AoKTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnJldmVyc2UoKVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gICAgICBpbnRlcmNlcHRvcih2YWx1ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy50YXBgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwicGFzcyB0aHJ1XCIgdmFsdWVzIHJlcGxhY2luZyBpbnRlcm1lZGlhdGVcbiAgICAgKiByZXN1bHRzIGluIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXygnICBhYmMgICcpXG4gICAgICogIC5jaGFpbigpXG4gICAgICogIC50cmltKClcbiAgICAgKiAgLnRocnUoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydhYmMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRocnUodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3IodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSB3cmFwcGVyIHZlcnNpb24gb2YgYF8uYXRgLlxuICAgICAqXG4gICAgICogQG5hbWUgYXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXyhvYmplY3QpLmF0KFsnYVswXS5iLmMnLCAnYVsxXSddKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqL1xuICAgIHZhciB3cmFwcGVyQXQgPSBmbGF0UmVzdChmdW5jdGlvbihwYXRocykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IGxlbmd0aCA/IHBhdGhzWzBdIDogMCxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgaW50ZXJjZXB0b3IgPSBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGJhc2VBdChvYmplY3QsIHBhdGhzKTsgfTtcblxuICAgICAgaWYgKGxlbmd0aCA+IDEgfHwgdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGggfHxcbiAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHx8ICFpc0luZGV4KHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2Uoc3RhcnQsICtzdGFydCArIChsZW5ndGggPyAxIDogMCkpO1xuICAgICAgdmFsdWUuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAgICdmdW5jJzogdGhydSxcbiAgICAgICAgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLFxuICAgICAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUsIHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgIGlmIChsZW5ndGggJiYgIWFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIGFycmF5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHdpdGggZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgY2hhaW5cbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gQSBzZXF1ZW5jZSB3aXRob3V0IGV4cGxpY2l0IGNoYWluaW5nLlxuICAgICAqIF8odXNlcnMpLmhlYWQoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICpcbiAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGggZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICogXyh1c2VycylcbiAgICAgKiAgIC5jaGFpbigpXG4gICAgICogICAuaGVhZCgpXG4gICAgICogICAucGljaygndXNlcicpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgICAgIHJldHVybiBjaGFpbih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgYW5kIHJldHVybnMgdGhlIHdyYXBwZWQgcmVzdWx0LlxuICAgICAqXG4gICAgICogQG5hbWUgY29tbWl0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyXTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oYXJyYXkpLnB1c2goMyk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkID0gd3JhcHBlZC5jb21taXQoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkLmxhc3QoKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNvbW1pdCgpIHtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICAgICAqIFtpdGVyYXRvciBwcm90b2NvbF0oaHR0cHM6Ly9tZG4uaW8vaXRlcmF0aW9uX3Byb3RvY29scyNpdGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAbmFtZSBuZXh0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV4dCBpdGVyYXRvciB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDEgfVxuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IGZhbHNlLCAndmFsdWUnOiAyIH1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiB0cnVlLCAndmFsdWUnOiB1bmRlZmluZWQgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJOZXh0KCkge1xuICAgICAgaWYgKHRoaXMuX192YWx1ZXNfXyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX192YWx1ZXNfXyA9IHRvQXJyYXkodGhpcy52YWx1ZSgpKTtcbiAgICAgIH1cbiAgICAgIHZhciBkb25lID0gdGhpcy5fX2luZGV4X18gPj0gdGhpcy5fX3ZhbHVlc19fLmxlbmd0aCxcbiAgICAgICAgICB2YWx1ZSA9IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK107XG5cbiAgICAgIHJldHVybiB7ICdkb25lJzogZG9uZSwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSB3cmFwcGVyIHRvIGJlIGl0ZXJhYmxlLlxuICAgICAqXG4gICAgICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgd3JhcHBlciBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pO1xuICAgICAqXG4gICAgICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogQXJyYXkuZnJvbSh3cmFwcGVkKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgY2hhaW4gc2VxdWVuY2UgcGxhbnRpbmcgYHZhbHVlYCBhcyB0aGUgd3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHBsYW50XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGxhbnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSkubWFwKHNxdWFyZSk7XG4gICAgICogdmFyIG90aGVyID0gd3JhcHBlZC5wbGFudChbMywgNF0pO1xuICAgICAqXG4gICAgICogb3RoZXIudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbOSwgMTZdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzEsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclBsYW50KHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0LFxuICAgICAgICAgIHBhcmVudCA9IHRoaXM7XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IHdyYXBwZXJDbG9uZShwYXJlbnQpO1xuICAgICAgICBjbG9uZS5fX2luZGV4X18gPSAwO1xuICAgICAgICBjbG9uZS5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSBjbG9uZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBjbG9uZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldmlvdXMgPSBjbG9uZTtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9fd3JhcHBlZF9fO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5yZXZlcnNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFwcGVkIGFycmF5LlxuICAgICAqXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKVxuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHZhciB3cmFwcGVkID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkge1xuICAgICAgICAgIHdyYXBwZWQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpO1xuICAgICAgICB3cmFwcGVkLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICAgICAgICdmdW5jJzogdGhydSxcbiAgICAgICAgICAnYXJncyc6IFtyZXZlcnNlXSxcbiAgICAgICAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRocnUocmV2ZXJzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGNoYWluIHNlcXVlbmNlIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgdG9KU09OLCB2YWx1ZU9mXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDIsIDNdKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpIHtcbiAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKHRoaXMuX193cmFwcGVkX18sIHRoaXMuX19hY3Rpb25zX18pO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAqIGVhY2gga2V5IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSB3YXMgcmV0dXJuZWQgYnkgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jb3VudEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4geyAnNCc6IDEsICc2JzogMiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmNvdW50QnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAgICAgKiAvLyA9PiB7ICczJzogMiwgJzUnOiAxIH1cbiAgICAgKi9cbiAgICB2YXIgY291bnRCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICAgICAgKytyZXN1bHRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgZm9yXG4gICAgICogW2VtcHR5IGNvbGxlY3Rpb25zXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbXB0eV9zZXQpIGJlY2F1c2VcbiAgICAgKiBbZXZlcnl0aGluZyBpcyB0cnVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWN1b3VzX3RydXRoKSBvZlxuICAgICAqIGVsZW1lbnRzIG9mIGVtcHR5IGNvbGxlY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ldmVyeShbdHJ1ZSwgMSwgbnVsbCwgJ3llcyddLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFdmVyeSA6IGJhc2VFdmVyeTtcbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSkge1xuICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAc2VlIF8ucmVqZWN0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICAgICAqL1xuICAgIHZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlvbi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmbGF0dGVuZWQgYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYFxuICAgICAqIHRocnUgYGl0ZXJhdGVlYCBhbmQgZmxhdHRlbmluZyB0aGUgbWFwcGVkIHJlc3VsdHMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbbiwgbl07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMiwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlZXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgSU5GSU5JVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gICAgICogbWFwcGVkIHJlc3VsdHMgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTtcbiAgICAgKiAvLyA9PiBbWzEsIDFdLCBbMiwgMl1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkge1xuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiXG4gICAgICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAgICAgKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIGVhY2hcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAc2VlIF8uZm9yRWFjaFJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChbMSwgMl0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyBgMWAgdGhlbiBgMmAuXG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvckVhY2hgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGFsaWFzIGVhY2hSaWdodFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaFJpZ2h0KFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAyYCB0aGVuIGAxYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaFJpZ2h0IDogYmFzZUVhY2hSaWdodDtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBvcmRlciBvZiBncm91cGVkIHZhbHVlc1xuICAgICAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICAgICAqIHZhbHVlIG9mIGVhY2gga2V5IGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZVxuICAgICAqIGtleS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjNdIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZ3JvdXBCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICAgICAqL1xuICAgIHZhciBncm91cEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICAgICAqIGNoZWNrZWQgZm9yIGEgc3Vic3RyaW5nIG9mIGB2YWx1ZWAsIG90aGVyd2lzZVxuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAgICAgKiB0aGUgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICAgIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gICAgICBmcm9tSW5kZXggPSAoZnJvbUluZGV4ICYmICFndWFyZCkgPyB0b0ludGVnZXIoZnJvbUluZGV4KSA6IDA7XG5cbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgICAgIGZyb21JbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGggJiYgY29sbGVjdGlvbi5pbmRleE9mKHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpXG4gICAgICAgIDogKCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgZWFjaCBpbnZva2VkIG1ldGhvZC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogYXJlIHByb3ZpZGVkIHRvIGVhY2ggaW52b2tlZCBtZXRob2QuIElmIGBwYXRoYCBpcyBhIGZ1bmN0aW9uLCBpdCdzIGludm9rZWRcbiAgICAgKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAqICB0aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludm9rZU1hcChbWzUsIDEsIDddLCBbMywgMiwgMV1dLCAnc29ydCcpO1xuICAgICAqIC8vID0+IFtbMSwgNSwgN10sIFsxLCAyLCAzXV1cbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFsxMjMsIDQ1Nl0sIFN0cmluZy5wcm90b3R5cGUuc3BsaXQsICcnKTtcbiAgICAgKiAvLyA9PiBbWycxJywgJzInLCAnMyddLCBbJzQnLCAnNScsICc2J11dXG4gICAgICovXG4gICAgdmFyIGludm9rZU1hcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAgICAgKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtcbiAgICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICAgICAqICAgeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmtleUJ5KGFycmF5LCBmdW5jdGlvbihvKSB7XG4gICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksICdkaXInKTtcbiAgICAgKiAvLyA9PiB7ICdsZWZ0JzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdyaWdodCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqL1xuICAgIHZhciBrZXlCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gICAgICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICAgICAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICAgICAqIGBzYW1wbGVTaXplYCwgYHNsaWNlYCwgYHNvbWVgLCBgc29ydEJ5YCwgYHNwbGl0YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICAgICAqIC8vID0+IFsxNiwgNjRdXG4gICAgICpcbiAgICAgKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJyB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIHNvcnRcbiAgICAgKiBvcmRlcnMgb2YgdGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlc1xuICAgICAqIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yXG4gICAgICogZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBTb3J0IGJ5IGB1c2VyYCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5KGl0ZXJhdGVlcykpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdO1xuICAgICAgfVxuICAgICAgb3JkZXJzID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBvcmRlcnM7XG4gICAgICBpZiAoIWlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleSBmb3IuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydwZWJibGVzJ10sIFsnYmFybmV5JywgJ2ZyZWQnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsICdwZWJibGVzJ10sIFsnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKi9cbiAgICB2YXIgcGFydGl0aW9uID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24oKSB7IHJldHVybiBbW10sIFtdXTsgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsZWN0aW9uYCB0byBhIHZhbHVlIHdoaWNoIGlzIHRoZSBhY2N1bXVsYXRlZCByZXN1bHQgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gICAgICogaXMgbm90IGdpdmVuLCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgaXMgdXNlZCBhcyB0aGUgaW5pdGlhbFxuICAgICAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gICAgICogYW5kIGBzb3J0QnlgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICAgICAqICAgcmV0dXJuIHN1bSArIG47XG4gICAgICogfSwgMCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZWR1Y2UoeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgKiAgIHJldHVybiByZXN1bHQ7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZSA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmVkdWNlYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbWzAsIDFdLCBbMiwgM10sIFs0LCA1XV07XG4gICAgICpcbiAgICAgKiBfLnJlZHVjZVJpZ2h0KGFycmF5LCBmdW5jdGlvbihmbGF0dGVuZWQsIG90aGVyKSB7XG4gICAgICogICByZXR1cm4gZmxhdHRlbmVkLmNvbmNhdChvdGhlcik7XG4gICAgICogfSwgW10pO1xuICAgICAqIC8vID0+IFs0LCA1LCAyLCAzLCAwLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2VSaWdodCA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2hSaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYFxuICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5maWx0ZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5yZWplY3QodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZSA6IGJhc2VTYW1wbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGBuYCByYW5kb20gZWxlbWVudHMgYXQgdW5pcXVlIGtleXMgZnJvbSBgY29sbGVjdGlvbmAgdXAgdG8gdGhlXG4gICAgICogc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzMsIDFdXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCA0KTtcbiAgICAgKiAvLyA9PiBbMiwgMywgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICB9XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemUgOiBiYXNlU2FtcGxlU2l6ZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2h1ZmZsZShbMSwgMiwgMywgNF0pO1xuICAgICAqIC8vID0+IFs0LCAxLCAzLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzaXplIG9mIGBjb2xsZWN0aW9uYCBieSByZXR1cm5pbmcgaXRzIGxlbmd0aCBmb3IgYXJyYXktbGlrZVxuICAgICAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIHNpemUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8uc2l6ZSgncGViYmxlcycpO1xuICAgICAqIC8vID0+IDdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyhjb2xsZWN0aW9uKTtcbiAgICAgIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb21lKFtudWxsLCAwLCAneWVzJywgZmFsc2VdLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U29tZSA6IGJhc2VTb21lO1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICAgICAqIHBlcmZvcm1zIGEgc3RhYmxlIHNvcnQsIHRoYXQgaXMsIGl0IHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgc29ydCBvcmRlciBvZlxuICAgICAqIGVxdWFsIGVsZW1lbnRzLiBUaGUgaXRlcmF0ZWVzIGFyZSBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDMwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCAzMF1dXG4gICAgICpcbiAgICAgKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNF0sIFsnYmFybmV5JywgMzZdLCBbJ2ZyZWQnLCAzMF0sIFsnZnJlZCcsIDQ4XV1cbiAgICAgKi9cbiAgICB2YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAyICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdLCBpdGVyYXRlZXNbMl0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtpdGVyYXRlZXNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGJhc2VGbGF0dGVuKGl0ZXJhdGVlcywgMSksIFtdKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICAgICAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IERhdGVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICogfSwgXy5ub3coKSk7XG4gICAgICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAgICAgKi9cbiAgICB2YXIgbm93ID0gY3R4Tm93IHx8IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbiAgICB9O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmJlZm9yZWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXNcbiAgICAgKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXZlcyA9IFsncHJvZmlsZScsICdzZXR0aW5ncyddO1xuICAgICAqXG4gICAgICogdmFyIGRvbmUgPSBfLmFmdGVyKHNhdmVzLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG9uZSBzYXZpbmchJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goc2F2ZXMsIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdkb25lIHNhdmluZyEnIGFmdGVyIHRoZSB0d28gYXN5bmMgc2F2ZXMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWZ0ZXIobiwgZnVuYykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHVwIHRvIGBuYCBhcmd1bWVudHMsXG4gICAgICogaWdub3JpbmcgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgY2FwLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnOCcsICcxMCddLCBfLmFyeShwYXJzZUludCwgMSkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnkoZnVuYywgbiwgZ3VhcmQpIHtcbiAgICAgIG4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IG47XG4gICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbjtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQVJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBhdCB3aGljaCBgZnVuY2AgaXMgbm8gbG9uZ2VyIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgKiAvLyA9PiBBbGxvd3MgYWRkaW5nIHVwIHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgbmF0aXZlIGBGdW5jdGlvbiNiaW5kYCwgdGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGJpdG1hc2sgPSBXUkFQX0JJTkRfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICAgICAgYml0bWFzayB8PSBXUkFQX1BBUlRJQUxfRkxBRztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgb2JqZWN0W2tleV1gIHdpdGggYHBhcnRpYWxzYFxuICAgICAqIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBfLmJpbmRgIGJ5IGFsbG93aW5nIGJvdW5kIGZ1bmN0aW9ucyB0byByZWZlcmVuY2VcbiAgICAgKiBtZXRob2RzIHRoYXQgbWF5IGJlIHJlZGVmaW5lZCBvciBkb24ndCB5ZXQgZXhpc3QuIFNlZVxuICAgICAqIFtQZXRlciBNaWNoYXV4J3MgYXJ0aWNsZV0oaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvbGF6eS1mdW5jdGlvbi1kZWZpbml0aW9uLXBhdHRlcm4pXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kS2V5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52b2tlIHRoZSBtZXRob2Qgb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICogICAndXNlcic6ICdmcmVkJyxcbiAgICAgKiAgICdncmVldCc6IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiBvYmplY3QuZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICd5YSAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqL1xuICAgIHZhciBiaW5kS2V5ID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZEtleSkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYXJndW1lbnRzIG9mIGBmdW5jYCBhbmQgZWl0aGVyIGludm9rZXNcbiAgICAgKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gICAgICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICAgICAqIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWQgaWYgYGZ1bmMubGVuZ3RoYFxuICAgICAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEpKDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyKSgzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jdXJyeWAgZXhjZXB0IHRoYXQgYXJndW1lbnRzIGFyZSBhcHBsaWVkIHRvIGBmdW5jYFxuICAgICAqIGluIHRoZSBtYW5uZXIgb2YgYF8ucGFydGlhbFJpZ2h0YCBpbnN0ZWFkIG9mIGBfLnBhcnRpYWxgLlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5UmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnlSaWdodChhYmMpO1xuICAgICAqXG4gICAgICogY3VycmllZCgzKSgyKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMiwgMykoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIsIDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiBjdXJyaWVkKDMpKDEsIF8pKDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeVJpZ2h0LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAgICAgKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAgICAgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gICAgICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gICAgICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gICAgICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICAgICAqIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICAgICAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gICAgICogICAnbGVhZGluZyc6IHRydWUsXG4gICAgICogICAndHJhaWxpbmcnOiBmYWxzZVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gICAgICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gICAgICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICAgICAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAgICAgKlxuICAgICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxhc3RBcmdzLFxuICAgICAgICAgIGxhc3RUaGlzLFxuICAgICAgICAgIG1heFdhaXQsXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHRpbWVySWQsXG4gICAgICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgICAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgICAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAgICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICAgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgICAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICAgICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgICAgICByZXR1cm4gbWF4aW5nXG4gICAgICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuICAgICAgICAgIDogdGltZVdhaXRpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICAgICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgICAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAgICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICAgICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgICAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICAgICAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gICAgICByZXR1cm4gZGVib3VuY2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWZlci5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAnZGVmZXJyZWQnKTtcbiAgICAgKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWZlciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIGBmdW5jYCBhZnRlciBgd2FpdGAgbWlsbGlzZWNvbmRzLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWxheShmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAxMDAwLCAnbGF0ZXInKTtcbiAgICAgKiAvLyA9PiBMb2dzICdsYXRlcicgYWZ0ZXIgb25lIHNlY29uZC5cbiAgICAgKi9cbiAgICB2YXIgZGVsYXkgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIHRvTnVtYmVyKHdhaXQpIHx8IDAsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxpcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZsaXBwZWQgPSBfLmZsaXAoZnVuY3Rpb24oKSB7XG4gICAgICogICByZXR1cm4gXy50b0FycmF5KGFyZ3VtZW50cyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBmbGlwcGVkKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGlwKGZ1bmMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICAgICAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICAgICAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICAgICAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gICAgICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAgICAgKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICAgICAqXG4gICAgICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB2YWx1ZXMob3RoZXIpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqXG4gICAgICogb2JqZWN0LmEgPSAyO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gICAgICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKlxuICAgICAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgYE1hcENhY2hlYC5cbiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBgZnVuY2AuIFRoZVxuICAgICAqIGBmdW5jYCBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbmVnYXRlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKFsxLCAyLCAzLCA0LCA1LCA2XSwgXy5uZWdhdGUoaXNFdmVuKSk7XG4gICAgICogLy8gPT4gWzEsIDMsIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpcyByZXN0cmljdGVkIHRvIGludm9raW5nIGBmdW5jYCBvbmNlLiBSZXBlYXQgY2FsbHNcbiAgICAgKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBpbml0aWFsaXplID0gXy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIC8vID0+IGBjcmVhdGVBcHBsaWNhdGlvbmAgaXMgaW52b2tlZCBvbmNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gb25jZShmdW5jKSB7XG4gICAgICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1zPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGFyZ3VtZW50IHRyYW5zZm9ybXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGRvdWJsZWQobikge1xuICAgICAqICAgcmV0dXJuIG4gKiAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJBcmdzKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICogfSwgW3NxdWFyZSwgZG91YmxlZF0pO1xuICAgICAqXG4gICAgICogZnVuYyg5LCAzKTtcbiAgICAgKiAvLyA9PiBbODEsIDZdXG4gICAgICpcbiAgICAgKiBmdW5jKDEwLCA1KTtcbiAgICAgKiAvLyA9PiBbMTAwLCAxMF1cbiAgICAgKi9cbiAgICB2YXIgb3ZlckFyZ3MgPSBjYXN0UmVzdChmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gKHRyYW5zZm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSlcbiAgICAgICAgPyBhcnJheU1hcCh0cmFuc2Zvcm1zWzBdLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpXG4gICAgICAgIDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciBmdW5jc0xlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oYXJncy5sZW5ndGgsIGZ1bmNzTGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gdHJhbnNmb3Jtc1tpbmRleF0uY2FsbCh0aGlzLCBhcmdzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICAgICAqIGFyZ3VtZW50cyBpdCByZWNlaXZlcy4gVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5iaW5kYCBleGNlcHQgaXQgZG9lcyAqKm5vdCoqXG4gICAgICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWwucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIHBhcnRpYWxseVxuICAgICAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMi4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWwoZ3JlZXQsIF8sICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnBhcnRpYWxgIGV4Y2VwdCB0aGF0IHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50c1xuICAgICAqIGFyZSBhcHBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWxSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2hlbGxvJywgXyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsUmlnaHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgYXJyYW5nZWQgYWNjb3JkaW5nXG4gICAgICogdG8gdGhlIHNwZWNpZmllZCBgaW5kZXhlc2Agd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2UgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9LCBbMiwgMCwgMV0pO1xuICAgICAqXG4gICAgICogcmVhcmdlZCgnYicsICdjJywgJ2EnKVxuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIHZhciByZWFyZyA9IGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsIGluZGV4ZXMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5kZXhlcyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uIGFuZCBhcmd1bWVudHMgZnJvbSBgc3RhcnRgIGFuZCBiZXlvbmQgcHJvdmlkZWQgYXNcbiAgICAgKiBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAgICAgKiBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vbWRuLmlvL3Jlc3RfcGFyYW1ldGVycykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8ucmVzdChmdW5jdGlvbih3aGF0LCBuYW1lcykge1xuICAgICAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jLCBzdGFydCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlIGZ1bmN0aW9uIGFuZCBhbiBhcnJheSBvZiBhcmd1bWVudHMgbXVjaCBsaWtlXG4gICAgICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNwcmVhZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8uc3ByZWFkKGZ1bmN0aW9uKHdobywgd2hhdCkge1xuICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQgc2F5cyBoZWxsbydcbiAgICAgKlxuICAgICAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDQwKSxcbiAgICAgKiAgIFByb21pc2UucmVzb2x2ZSgzNilcbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIG51bWJlcnMudGhlbihfLnNwcmVhZChmdW5jdGlvbih4LCB5KSB7XG4gICAgICogICByZXR1cm4geCArIHk7XG4gICAgICogfSkpO1xuICAgICAqIC8vID0+IGEgUHJvbWlzZSBvZiA3NlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNwcmVhZChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IG5hdGl2ZU1heCh0b0ludGVnZXIoc3RhcnQpLCAwKTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFyZ3Nbc3RhcnRdLFxuICAgICAgICAgICAgb3RoZXJBcmdzID0gY2FzdFNsaWNlKGFyZ3MsIDAsIHN0YXJ0KTtcblxuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBhcnJheVB1c2gob3RoZXJBcmdzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gICAgICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAgICAgKiBtZXRob2QgdG8gY2FuY2VsIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvXG4gICAgICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICAgICAqIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGVcbiAgICAgKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gICAgICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqXG4gICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gICAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgICAqXG4gICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy50aHJvdHRsZWAgYW5kIGBfLmRlYm91bmNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAqXG4gICAgICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gICAgICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCB0aHJvdHRsZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCB0aHJvdHRsZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVhZGluZyA9IHRydWUsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHtcbiAgICAgICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgICAgICd0cmFpbGluZyc6IHRyYWlsaW5nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHVwIHRvIG9uZSBhcmd1bWVudCwgaWdub3JpbmcgYW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8udW5hcnkocGFyc2VJbnQpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5hcnkoZnVuYykge1xuICAgICAgcmV0dXJuIGFyeShmdW5jLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBgdmFsdWVgIHRvIGB3cmFwcGVyYCBhcyBpdHMgZmlyc3RcbiAgICAgKiBhcmd1bWVudC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbiBhcmUgYXBwZW5kZWRcbiAgICAgKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFt3cmFwcGVyPWlkZW50aXR5XSBUaGUgd3JhcHBlciBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAgICAgKiAgIHJldHVybiAnPHA+JyArIGZ1bmModGV4dCkgKyAnPC9wPic7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBwKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICc8cD5mcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXM8L3A+J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXAodmFsdWUsIHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsKGNhc3RGdW5jdGlvbih3cmFwcGVyKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoMSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbbnVsbF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gW3VuZGVmaW5lZF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKiBjb25zb2xlLmxvZyhfLmNhc3RBcnJheShhcnJheSkgPT09IGFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5KCkge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjbG9uZSBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwczovL21kbi5pby9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobSlcbiAgICAgKiBhbmQgc3VwcG9ydHMgY2xvbmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLCBkYXRlIG9iamVjdHMsIG1hcHMsXG4gICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gICAgICogYXJyYXlzLiBUaGUgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgYXJndW1lbnRzYCBvYmplY3RzIGFyZSBjbG9uZWRcbiAgICAgKiBhcyBwbGFpbiBvYmplY3RzLiBBbiBlbXB0eSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHVuY2xvbmVhYmxlIHZhbHVlcyBzdWNoXG4gICAgICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKHNoYWxsb3dbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAgICAgKiBjbG9uaW5nIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHVwIHRvIGZvdXIgYXJndW1lbnRzOyAodmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lV2l0aGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZVdpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVEZWVwV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGNvbnNvbGUubG9nKGVsLm5vZGVOYW1lKTtcbiAgICAgKiAvLyA9PiAnQk9EWSdcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURlZXBXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgb2JqZWN0YCBjb25mb3JtcyB0byBgc291cmNlYCBieSBpbnZva2luZyB0aGUgcHJlZGljYXRlXG4gICAgICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLmNvbmZvcm1zYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uY29uZm9ybXNUbyhvYmplY3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMjsgfSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2UgPT0gbnVsbCB8fCBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKE5hTiwgTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmx0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3QoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5ndCgxLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBndCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUd0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheUJ1ZmZlcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheUJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheUJ1ZmZlciA9IG5vZGVJc0FycmF5QnVmZmVyID8gYmFzZVVuYXJ5KG5vZGVJc0FycmF5QnVmZmVyKSA6IGJhc2VJc0FycmF5QnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICAgICAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAgICAgKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gICAgICogaXMgYW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJvb2xlYW4sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4oZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCb29sZWFuKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUobmV3IERhdGUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgRE9NIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgRE9NIGVsZW1lbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoJzxib2R5PicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAgICAgKlxuICAgICAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICAgICAqIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAgICAgKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gICAgICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkodHJ1ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gICAgICB9XG4gICAgICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICAgICAqIGVxdWl2YWxlbnQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gICAgICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICAgICAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gICAgICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gICAgICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogb2JqZWN0ID09PSBvdGhlcjtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xuICAgICAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnaGVsbG8nLCAnZ29vZGJ5ZSddO1xuICAgICAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xuICAgICAqXG4gICAgICogXy5pc0VxdWFsV2l0aChhcnJheSwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgb3RoZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAgICAgKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IoRXJyb3IpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBwcmltaXRpdmUgbnVtYmVyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNGaW5pdGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbihfKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gICAgICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT0gdG9JbnRlZ2VyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gICAgICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICAgICAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3Qoe30pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gICAgICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiBgb2JqZWN0YCBhbmQgYHNvdXJjZWAgdG9cbiAgICAgKiBkZXRlcm1pbmUgaWYgYG9iamVjdGAgY29udGFpbnMgZXF1aXZhbGVudCBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5tYXRjaGVzYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdCBgc291cmNlYFxuICAgICAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gICAgICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc01hdGNoYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICAgICAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICAgICAqIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwgaW5kZXh8a2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdncmVldGluZyc6ICdoZWxsbycgfTtcbiAgICAgKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAgICAgKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4oTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAgICAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAgICAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcmlzdGluZSBuYXRpdmUgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgY2FuJ3QgcmVsaWFibHkgZGV0ZWN0IG5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhlIHByZXNlbmNlXG4gICAgICogb2YgdGhlIGNvcmUtanMgcGFja2FnZSBiZWNhdXNlIGNvcmUtanMgY2lyY3VtdmVudHMgdGhpcyBraW5kIG9mIGRldGVjdGlvbi5cbiAgICAgKiBEZXNwaXRlIG11bHRpcGxlIHJlcXVlc3RzLCB0aGUgY29yZS1qcyBtYWludGFpbmVyIGhhcyBtYWRlIGl0IGNsZWFyOiBhbnlcbiAgICAgKiBhdHRlbXB0IHRvIGZpeCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgb2JzdHJ1Y3RlZC4gQXMgYSByZXN1bHQsIHdlJ3JlIGxlZnRcbiAgICAgKiB3aXRoIGxpdHRsZSBjaG9pY2UgYnV0IHRvIHRocm93IGFuIGVycm9yLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsc28gYWZmZWN0c1xuICAgICAqIHBhY2thZ2VzLCBsaWtlIFtiYWJlbC1wb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmFiZWwtcG9seWZpbGwpLFxuICAgICAqIHdoaWNoIHJlbHkgb24gY29yZS1qcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShfKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAoaXNNYXNrYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPUkVfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBudWxsYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbCh2b2lkIDApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbCh2b2lkIDApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICAgICAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gICAgICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuOC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICAgICAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgvYWJjLyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgnL2FiYy8nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1JlZ0V4cCA9IG5vZGVJc1JlZ0V4cCA/IGJhc2VVbmFyeShub2RlSXNSZWdFeHApIDogYmFzZUlzUmVnRXhwO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBzYWZlIGludGVnZXIuIEFuIGludGVnZXIgaXMgc2FmZSBpZiBpdCdzIGFuIElFRUUtNzU0XG4gICAgICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IC1NQVhfU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gd2Vha01hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgV2Vha1NldCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtTZXQobmV3IFNldCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtTZXQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHdlYWtTZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5ndFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0KDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDw9IG90aGVyO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqXG4gICAgICogXy50b0FycmF5KDEpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkobnVsbCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMi4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoMy4yKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gNWUtMzI0XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICAgICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcigzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBsZW5ndGggb2YgYW5cbiAgICAgKiBhcnJheS1saWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDQyOTQ5NjcyOTVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIDAsIE1BWF9BUlJBWV9MRU5HVEgpIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b051bWJlcigzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgICAgIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICAgICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAgICAgKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNhZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZFxuICAgICAqIHJlcHJlc2VudGVkIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9TYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAgICAgKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKG51bGwpO1xuICAgICAqIC8vID0+ICcnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKC0wKTtcbiAgICAgKiAvLyA9PiAnLTAnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25JblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gICAgICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgb3duIGFuZFxuICAgICAqIGluaGVyaXRlZCBzb3VyY2UgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGV4dGVuZFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbkluKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMywgJ2QnOiA0IH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduSW4gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBleHRlbmRXaXRoXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbldpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduSW5XaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduV2l0aCwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gYHBhdGhzYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXy5hdChvYmplY3QsIFsnYVswXS5iLmMnLCAnYVsxXSddKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKi9cbiAgICB2YXIgYXQgPSBmbGF0UmVzdChiYXNlQXQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgcHJvdG90eXBlYCBvYmplY3QuIElmIGFcbiAgICAgKiBgcHJvcGVydGllc2Agb2JqZWN0IGlzIGdpdmVuLCBpdHMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXNcbiAgICAgKiBhcmUgYXNzaWduZWQgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBUaGUgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgICAgKiAgIHRoaXMueCA9IDA7XG4gICAgICogICB0aGlzLnkgPSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAgICAgKiAgIFNoYXBlLmNhbGwodGhpcyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogQ2lyY2xlLnByb3RvdHlwZSA9IF8uY3JlYXRlKFNoYXBlLnByb3RvdHlwZSwge1xuICAgICAqICAgJ2NvbnN0cnVjdG9yJzogQ2lyY2xlXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiB2YXIgY2lyY2xlID0gbmV3IENpcmNsZTtcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBDaXJjbGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY2lyY2xlIGluc3RhbmNlb2YgU2hhcGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcyA9PSBudWxsID8gcmVzdWx0IDogYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAgICAgKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAgICAgKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gICAgICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgICAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgICAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kZWZhdWx0c2AgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgYXNzaWduc1xuICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0c0RlZXAoeyAnYSc6IHsgJ2InOiAyIH0gfSwgeyAnYSc6IHsgJ2InOiAxLCAnYyc6IDMgfSB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IDIsICdjJzogMyB9IH1cbiAgICAgKi9cbiAgICB2YXIgZGVmYXVsdHNEZWVwID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgYXJncy5wdXNoKHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSk7XG4gICAgICByZXR1cm4gYXBwbHkobWVyZ2VXaXRoLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+ICdiYXJuZXknIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGJhc2VGb3JPd24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGEgY29sbGVjdGlvbiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiByZXR1cm5zICdwZWJibGVzJyBhc3N1bWluZyBgXy5maW5kS2V5YCByZXR1cm5zICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kTGFzdEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93blJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAgICAgKiBvYmplY3QgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdFxuICAgICAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5SaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJbihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3Iob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JJbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9ySW5SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2MnLCAnYicsIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvckluYCBsb2dzICdhJywgJ2InLCB0aGVuICdjJy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3JSaWdodChvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmRcbiAgICAgKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uXG4gICAgICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvck93blJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yT3duYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgKiBgb2JqZWN0YCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JPd25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdiJyB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JPd25gIGxvZ3MgJ2EnIHRoZW4gJ2InLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93blJpZ2h0KG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAqIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICogQHNlZSBfLmZ1bmN0aW9uc0luXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9ucyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBpbmhlcml0ZWRcbiAgICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKiBAc2VlIF8uZnVuY3Rpb25zXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9uc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uc0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gICAgICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IHsgJ2InOiAyIH0gfTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYS5iJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvdGhlciwgJ2EnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBpbnZlcnRlZCBrZXlzIGFuZCB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gICAgICogcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pbnZlcnQob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogJ2MnLCAnMic6ICdiJyB9XG4gICAgICovXG4gICAgdmFyIGludmVydCA9IGNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbdmFsdWVdID0ga2V5O1xuICAgIH0sIGNvbnN0YW50KGlkZW50aXR5KSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludmVydGAgZXhjZXB0IHRoYXQgdGhlIGludmVydGVkIG9iamVjdCBpcyBnZW5lcmF0ZWRcbiAgICAgKiBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogY29ycmVzcG9uZGluZyBpbnZlcnRlZCB2YWx1ZSBvZiBlYWNoIGludmVydGVkIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzXG4gICAgICogcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGludmVydGVkIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gICAgICpcbiAgICAgKiBfLmludmVydEJ5KG9iamVjdCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiAnZ3JvdXAnICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnZ3JvdXAxJzogWydhJywgJ2MnXSwgJ2dyb3VwMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICB2YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07XG4gICAgICB9XG4gICAgfSwgZ2V0SXRlcmF0ZWUpO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IFsxLCAyLCAzLCA0XSB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmludm9rZShvYmplY3QsICdhWzBdLmIuYy5zbGljZScsIDEsIDMpO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIHZhciBpbnZva2UgPSBiYXNlUmVzdChiYXNlSW52b2tlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAgICAgKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5cyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiBfLmtleXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWycwJywgJzEnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1hcFZhbHVlc2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICogc2FtZSB2YWx1ZXMgYXMgYG9iamVjdGAgYW5kIGtleXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZVxuICAgICAqIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQHNlZSBfLm1hcFZhbHVlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICByZXR1cm4ga2V5ICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBLZXlzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgYG9iamVjdGAgYW5kIHZhbHVlcyBnZW5lcmF0ZWRcbiAgICAgKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBzZWUgXy5tYXBLZXlzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgJ2FnZScpO1xuICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAgICAgKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGFyZVxuICAgICAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gICAgICogYXNzaWdubWVudC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBTdWJzZXF1ZW50XG4gICAgICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYic6IDIgfSwgeyAnZCc6IDQgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIG90aGVyID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVyZ2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBtZXJnZWQgdmFsdWVzIG9mIHRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlXG4gICAgICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAgICAgKiBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggc2l4IGFyZ3VtZW50czpcbiAgICAgKiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogWzFdLCAnYic6IFsyXSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiBbM10sICdiJzogWzRdIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlV2l0aChvYmplY3QsIG90aGVyLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogWzEsIDNdLCAnYic6IFsyLCA0XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICAgICAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIHZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gICAgICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfSk7XG4gICAgICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tCeWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mXG4gICAgICogdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYG9iamVjdGAgdGhhdFxuICAgICAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLm9taXRCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9taXRCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHBpY2tCeShvYmplY3QsIG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBgb2JqZWN0YCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIHZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAgICAgKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGlja0J5KG9iamVjdCwgXy5pc051bWJlcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gcGlja0J5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICAgIH0pO1xuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlKTtcbiAgICAgIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwcmVkaWNhdGUodmFsdWUsIHBhdGhbMF0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhXG4gICAgICogZnVuY3Rpb24gaXQncyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZFxuICAgICAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMScpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMicpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3VsdChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICAgICAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICAgICAqIGFyZSBjcmVhdGVkIGZvciBhbGwgb3RoZXIgbWlzc2luZyBwcm9wZXJ0aWVzLiBVc2UgYF8uc2V0V2l0aGAgdG8gY3VzdG9taXplXG4gICAgICogYHBhdGhgIGNyZWF0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgWyd4JywgJzAnLCAneScsICd6J10sIDUpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAobnNWYWx1ZSwga2V5LCBuc09iamVjdCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICpcbiAgICAgKiBfLnNldFdpdGgob2JqZWN0LCAnWzBdWzFdJywgJ2EnLCBPYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdpdGgob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGBcbiAgICAgKiB3aGljaCBjYW4gYmUgY29uc3VtZWQgYnkgYF8uZnJvbVBhaXJzYC4gSWYgYG9iamVjdGAgaXMgYSBtYXAgb3Igc2V0LCBpdHNcbiAgICAgKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBlbnRyaWVzXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMV0sIFsnYicsIDJdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzID0gY3JlYXRlVG9QYWlycyhrZXlzKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnNcbiAgICAgKiBmb3IgYG9iamVjdGAgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwXG4gICAgICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZW50cmllc0luXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlyc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl0sIFsnYycsIDNdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzSW4gPSBjcmVhdGVUb1BhaXJzKGtleXNJbik7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICAgICAqIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgdGhydSBgaXRlcmF0ZWVgLCB3aXRoIGVhY2ggaW52b2NhdGlvblxuICAgICAqIHBvdGVudGlhbGx5IG11dGF0aW5nIHRoZSBgYWNjdW11bGF0b3JgIG9iamVjdC4gSWYgYGFjY3VtdWxhdG9yYCBpcyBub3RcbiAgICAgKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0sIFtdKTtcbiAgICAgKiAvLyA9PiBbNCwgOV1cbiAgICAgKlxuICAgICAqIF8udHJhbnNmb3JtKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgICAgIGlmIChhY2N1bXVsYXRvciA9PSBudWxsKSB7XG4gICAgICAgIHZhciBDdG9yID0gb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0gaXNBcnIgPyBuZXcgQ3RvciA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzRnVuY3Rpb24oQ3RvcikgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIChpc0Fyckxpa2UgPyBhcnJheUVhY2ggOiBiYXNlRm9yT3duKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcHJvcGVydHkgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gICAgICogXy51bnNldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udW5zZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdHJ1ZSA6IGJhc2VVbnNldChvYmplY3QsIHBhdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBhY2NlcHRzIGB1cGRhdGVyYCB0byBwcm9kdWNlIHRoZVxuICAgICAqIHZhbHVlIHRvIHNldC4gVXNlIGBfLnVwZGF0ZVdpdGhgIHRvIGN1c3RvbWl6ZSBgcGF0aGAgY3JlYXRpb24uIFRoZSBgdXBkYXRlcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlKG9iamVjdCwgJ2FbMF0uYi5jJywgZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIG47IH0pO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICogLy8gPT4gOVxuICAgICAqXG4gICAgICogXy51cGRhdGUob2JqZWN0LCAneFswXS55LnonLCBmdW5jdGlvbihuKSB7IHJldHVybiBuID8gbiArIDEgOiAwOyB9KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVwZGF0ZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7fTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlV2l0aChvYmplY3QsICdbMF1bMV0nLCBfLmNvbnN0YW50KCdhJyksIE9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV2l0aChvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlciksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKCdoaScpO1xuICAgICAqIC8vID0+IFsnaCcsICdpJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5XG4gICAgICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICAgICAqIC8vID0+IC01XG4gICAgICpcbiAgICAgKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVwcGVyID0gdG9OdW1iZXIodXBwZXIpO1xuICAgICAgICB1cHBlciA9IHVwcGVyID09PSB1cHBlciA/IHVwcGVyIDogMDtcbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvd2VyID0gdG9OdW1iZXIobG93ZXIpO1xuICAgICAgICBsb3dlciA9IGxvd2VyID09PSBsb3dlciA/IGxvd2VyIDogMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSwgbG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAgICAgKiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLCBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICogSWYgYHN0YXJ0YCBpcyBncmVhdGVyIHRoYW4gYGVuZGAgdGhlIHBhcmFtcyBhcmUgc3dhcHBlZCB0byBzdXBwb3J0XG4gICAgICogbmVnYXRpdmUgcmFuZ2VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMy4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLnJhbmdlLCBfLnJhbmdlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDMsIDIsIDQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCA4KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgyLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDEuMiwgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDUuMiwgNCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgtMywgLTIsIC02KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9GaW5pdGUoc3RhcnQpO1xuICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgfVxuICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgIHJldHVybiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICogSWYgb25seSBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIHRoZSBnaXZlbiBudW1iZXJcbiAgICAgKiBpcyByZXR1cm5lZC4gSWYgYGZsb2F0aW5nYCBpcyBgdHJ1ZWAsIG9yIGVpdGhlciBgbG93ZXJgIG9yIGB1cHBlcmAgYXJlXG4gICAgICogZmxvYXRzLCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyPTBdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3VwcGVyPTFdIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmbG9hdGluZ10gU3BlY2lmeSByZXR1cm5pbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMCwgNSk7XG4gICAgICogLy8gPT4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUpO1xuICAgICAqIC8vID0+IGFsc28gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUsIHRydWUpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMS4yLCA1LjIpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMS4yIGFuZCA1LjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByYW5kb20obG93ZXIsIHVwcGVyLCBmbG9hdGluZykge1xuICAgICAgaWYgKGZsb2F0aW5nICYmIHR5cGVvZiBmbG9hdGluZyAhPSAnYm9vbGVhbicgJiYgaXNJdGVyYXRlZUNhbGwobG93ZXIsIHVwcGVyLCBmbG9hdGluZykpIHtcbiAgICAgICAgdXBwZXIgPSBmbG9hdGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChmbG9hdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXBwZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSB1cHBlcjtcbiAgICAgICAgICB1cHBlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG93ZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSBsb3dlcjtcbiAgICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID09PSB1bmRlZmluZWQgJiYgdXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb3dlciA9IDA7XG4gICAgICAgIHVwcGVyID0gMTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsb3dlciA9IHRvRmluaXRlKGxvd2VyKTtcbiAgICAgICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICAgIGxvd2VyID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cHBlciA9IHRvRmluaXRlKHVwcGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID4gdXBwZXIpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBsb3dlcjtcbiAgICAgICAgbG93ZXIgPSB1cHBlcjtcbiAgICAgICAgdXBwZXIgPSB0ZW1wO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nIHx8IGxvd2VyICUgMSB8fCB1cHBlciAlIDEpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBuYXRpdmVSYW5kb20oKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZU1pbihsb3dlciArIChyYW5kICogKHVwcGVyIC0gbG93ZXIgKyBmcmVlUGFyc2VGbG9hdCgnMWUtJyArICgocmFuZCArICcnKS5sZW5ndGggLSAxKSkpKSwgdXBwZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbY2FtZWwgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FtZWxDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhbWVsIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICovXG4gICAgdmFyIGNhbWVsQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyBjYXBpdGFsaXplKHdvcmQpIDogd29yZCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UgYW5kIHRoZSByZW1haW5pbmdcbiAgICAgKiB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FwaXRhbGl6ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhcGl0YWxpemUoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICAgICAgcmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmdcbiAgICAgKiBbTGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0xX1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSlcbiAgICAgKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gICAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZ1xuICAgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZGVidXJyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICAgICAqIC8vID0+ICdkZWphIHZ1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4sIGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBlbmRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InLCAyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLCB0YXJnZXQsIHBvc2l0aW9uKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG5cbiAgICAgIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGVuZ3RoXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIGxlbmd0aCk7XG5cbiAgICAgIHZhciBlbmQgPSBwb3NpdGlvbjtcbiAgICAgIHBvc2l0aW9uIC09IHRhcmdldC5sZW5ndGg7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIGVuZCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICAgICAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gICAgICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICAgICAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAgICAgKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAgICAgKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICAgICAqIFhTUyB2ZWN0b3JzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gICAgICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICAgICAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBba2ViYWIgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3BlY2lhbF9jYXNlX3N0eWxlcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKi9cbiAgICB2YXIga2ViYWJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckZpcnN0KCdGcmVkJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnZlJFRCdcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLlxuICAgICAqIFBhZGRpbmcgY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgY2FuJ3QgYmUgZXZlbmx5IGRpdmlkZWQgYnkgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgpO1xuICAgICAqIC8vID0+ICcgIGFiYyAgICdcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCA4LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnXy1hYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc3RyTGVuZ3RoID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSwgY2hhcnMpICtcbiAgICAgICAgc3RyaW5nICtcbiAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksIGNoYXJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSByaWdodCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWRFbmQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgICAgICA/IChzdHJpbmcgKyBjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJyAgIGFiYydcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdfLV9hYmMnXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICAgICAgPyAoY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJzKSArIHN0cmluZylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gaW50ZWdlciBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4LiBJZiBgcmFkaXhgIGlzXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGFcbiAgICAgKiBoZXhhZGVjaW1hbCwgaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZVxuICAgICAqIFtFUzUgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjEuMi4yKSBvZiBgcGFyc2VJbnRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXg9MTBdIFRoZSByYWRpeCB0byBpbnRlcnByZXQgYHZhbHVlYCBieS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhcnNlSW50KCcwOCcpO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICcwOCcsICcxMCddLCBfLnBhcnNlSW50KTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyc2VJbnQoc3RyaW5nLCByYWRpeCwgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCB8fCByYWRpeCA9PSBudWxsKSB7XG4gICAgICAgIHJhZGl4ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocmFkaXgpIHtcbiAgICAgICAgcmFkaXggPSArcmFkaXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlUGFyc2VJbnQodG9TdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyksIHJhZGl4IHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGVhdHMgdGhlIGdpdmVuIHN0cmluZyBgbmAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnKicsIDMpO1xuICAgICAqIC8vID0+ICcqKionXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnYWJjJywgMik7XG4gICAgICogLy8gPT4gJ2FiY2FiYydcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAwKTtcbiAgICAgKiAvLyA9PiAnJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0cmluZyksIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIG1hdGNoZXMgZm9yIGBwYXR0ZXJuYCBpbiBgc3RyaW5nYCB3aXRoIGByZXBsYWNlbWVudGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNyZXBsYWNlYF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3JlcGxhY2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVwbGFjZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gcmVwbGFjZW1lbnQgVGhlIG1hdGNoIHJlcGxhY2VtZW50LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZXBsYWNlKCdIaSBGcmVkJywgJ0ZyZWQnLCAnQmFybmV5Jyk7XG4gICAgICogLy8gPT4gJ0hpIEJhcm5leSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBsYWNlKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoYXJnc1swXSk7XG5cbiAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA8IDMgPyBzdHJpbmcgOiBzdHJpbmcucmVwbGFjZShhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtzbmFrZSBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbmFrZV9jYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqL1xuICAgIHZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnXycgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgYHN0cmluZ2AgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNzcGxpdGBdKGh0dHBzOi8vbWRuLmlvL1N0cmluZy9zcGxpdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gc3BsaXQuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHNwbGl0IGJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGltaXRdIFRoZSBsZW5ndGggdG8gdHJ1bmNhdGUgcmVzdWx0cyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHN0cmluZyBzZWdtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zcGxpdCgnYS1iLWMnLCAnLScsIDIpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIGlmIChsaW1pdCAmJiB0eXBlb2YgbGltaXQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBsaW1pdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGxpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmICghbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKFxuICAgICAgICAgICAgdHlwZW9mIHNlcGFyYXRvciA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgKHNlcGFyYXRvciAhPSBudWxsICYmICFpc1JlZ0V4cChzZXBhcmF0b3IpKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gYmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7XG4gICAgICAgIGlmICghc2VwYXJhdG9yICYmIGhhc1VuaWNvZGUoc3RyaW5nKSkge1xuICAgICAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShzdHJpbmcpLCAwLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBbc3RhcnQgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3R5bGlzdGljX29yX3NwZWNpYWxpc2VkX3VzYWdlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0YXJ0IGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgc3RhcnRDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgdXBwZXJGaXJzdCh3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj0wXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIHN0cmluZy5sZW5ndGgpO1xuXG4gICAgICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcbiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGNhbiBpbnRlcnBvbGF0ZSBkYXRhIHByb3BlcnRpZXNcbiAgICAgKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICAgICAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICAgICAqIHByb3BlcnRpZXMgbWF5IGJlIGFjY2Vzc2VkIGFzIGZyZWUgdmFyaWFibGVzIGluIHRoZSB0ZW1wbGF0ZS4gSWYgYSBzZXR0aW5nXG4gICAgICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEluIHRoZSBkZXZlbG9wbWVudCBidWlsZCBgXy50ZW1wbGF0ZWAgdXRpbGl6ZXNcbiAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gICAgICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5ldmFsdWF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXZhbHVhdGVdXG4gICAgICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICAgICAqICBBbiBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gICAgICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zb3VyY2VVUkw9J2xvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICAgICAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudmFyaWFibGU9J29iaiddXG4gICAgICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gICAgICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGludGVybmFsIGBwcmludGAgZnVuY3Rpb24gaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGJhcm5leSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogLy8gRGlzYWJsZSBzdXBwb3J0IGJ5IHJlcGxhY2luZyB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gcGViYmxlcyEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlPSBcIlxcXFw8JS0gdmFsdWUgJVxcXFw+XCIgJT4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICAgICAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSh0ZXh0LCB7ICdpbXBvcnRzJzogeyAnanEnOiBqUXVlcnkgfSB9KTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAqIGNvbXBpbGVkKGRhdGEpO1xuICAgICAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGB2YXJpYWJsZWAgb3B0aW9uIHRvIGVuc3VyZSBhIHdpdGgtc3RhdGVtZW50IGlzbid0IHVzZWQgaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAqIC8vICAgcmV0dXJuIF9fcDtcbiAgICAgKiAvLyB9XG4gICAgICpcbiAgICAgKiAvLyBVc2UgY3VzdG9tIHRlbXBsYXRlIGRlbGltaXRlcnMuXG4gICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnbXVzdGFjaGUnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBzb3VyY2VgIHByb3BlcnR5IHRvIGlubGluZSBjb21waWxlZCB0ZW1wbGF0ZXMgZm9yIG1lYW5pbmdmdWxcbiAgICAgKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAgICAgKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICAgICAqICAgdmFyIEpTVCA9IHtcXFxuICAgICAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICAgICAqICAgfTtcXFxuICAgICAqICcpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgICAgIC8vIEJhc2VkIG9uIEpvaG4gUmVzaWcncyBgdG1wbGAgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgICAgIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICAgICAgdmFyIHNldHRpbmdzID0gbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSkge1xuICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICAgICAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICAgICAgaW1wb3J0c0tleXMgPSBrZXlzKGltcG9ydHMpLFxuICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICAgICAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICAgICAgaXNFdmFsdWF0aW5nLFxuICAgICAgICAgIGluZGV4ID0gMCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgICAgIHNvdXJjZSA9IFwiX19wICs9ICdcIjtcblxuICAgICAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICAgICAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAgICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCdcbiAgICAgICwgJ2cnKTtcblxuICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAgLy8gVGhlIHNvdXJjZVVSTCBnZXRzIGluamVjdGVkIGludG8gdGhlIHNvdXJjZSB0aGF0J3MgZXZhbC1lZCwgc28gYmUgY2FyZWZ1bFxuICAgICAgLy8gdG8gbm9ybWFsaXplIGFsbCBraW5kcyBvZiB3aGl0ZXNwYWNlLCBzbyBlLmcuIG5ld2xpbmVzIChhbmQgdW5pY29kZSB2ZXJzaW9ucyBvZiBpdCkgY2FuJ3Qgc25lYWsgaW5cbiAgICAgIC8vIGFuZCBlc2NhcGUgdGhlIGNvbW1lbnQsIHRodXMgaW5qZWN0aW5nIGNvZGUgdGhhdCBnZXRzIGV2YWxlZC5cbiAgICAgIHZhciBzb3VyY2VVUkwgPSAnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAgKGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgICAgICAgPyAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvXFxzL2csICcgJylcbiAgICAgICAgICA6ICgnbG9kYXNoLnRlbXBsYXRlU291cmNlc1snICsgKCsrdGVtcGxhdGVDb3VudGVyKSArICddJylcbiAgICAgICAgKSArICdcXG4nO1xuXG4gICAgICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBpbmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgICAgIGlmIChlc2NhcGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZVZhbHVlICsgXCI7XFxuX19wICs9ICdcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbigoX190ID0gKFwiICsgaW50ZXJwb2xhdGVWYWx1ZSArIFwiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICAgIC8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgbmVlZHMgYG1hdGNoYCByZXR1cm5lZCBpblxuICAgICAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTtcblxuICAgICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgICAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAgICAgLy8gY29kZSB0byBhZGQgdGhlIGRhdGEgb2JqZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLlxuICAgICAgdmFyIHZhcmlhYmxlID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAndmFyaWFibGUnKSAmJiBvcHRpb25zLnZhcmlhYmxlO1xuICAgICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgICAgIH1cbiAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIGEgZm9yYmlkZGVuIGNoYXJhY3RlciB3YXMgZm91bmQgaW4gYHZhcmlhYmxlYCwgdG8gcHJldmVudFxuICAgICAgLy8gcG90ZW50aWFsIGNvbW1hbmQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAgICBlbHNlIGlmIChyZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycy50ZXN0KHZhcmlhYmxlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9URU1QTF9WQVJfRVJST1JfVEVYVCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgICAgIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nTWlkZGxlLCAnJDEnKVxuICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAgICAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgICAgIHNvdXJjZSA9ICdmdW5jdGlvbignICsgKHZhcmlhYmxlIHx8ICdvYmonKSArICcpIHtcXG4nICtcbiAgICAgICAgKHZhcmlhYmxlXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogJ29iaiB8fCAob2JqID0ge30pO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgICAgIChpc0VzY2FwaW5nXG4gICAgICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgICAgIDogJydcbiAgICAgICAgKSArXG4gICAgICAgIChpc0V2YWx1YXRpbmdcbiAgICAgICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICAgICAgXCJmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIlxuICAgICAgICAgIDogJztcXG4nXG4gICAgICAgICkgK1xuICAgICAgICBzb3VyY2UgK1xuICAgICAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKGltcG9ydHNLZXlzLCBzb3VyY2VVUkwgKyAncmV0dXJuICcgKyBzb3VyY2UpXG4gICAgICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24ncyBzb3VyY2UgYnkgaXRzIGB0b1N0cmluZ2AgbWV0aG9kIG9yXG4gICAgICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICAgICAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIGlmIChpc0Vycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gbG93ZXIgY2FzZSBqdXN0IGxpa2VcbiAgICAgKiBbU3RyaW5nI3RvTG93ZXJDYXNlXShodHRwczovL21kbi5pby90b0xvd2VyQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignLS1Gb28tQmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnLS1mb28tYmFyLS0nXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb29iYXInXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ19fZm9vX2Jhcl9fJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTG93ZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gdXBwZXIgY2FzZSBqdXN0IGxpa2VcbiAgICAgKiBbU3RyaW5nI3RvVXBwZXJDYXNlXShodHRwczovL21kbi5pby90b1VwcGVyQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnLS1GT08tQkFSLS0nXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdGT09CQVInXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICogLy8gPT4gJ19fRk9PX0JBUl9fJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvVXBwZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lmaWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cmltLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqXG4gICAgICogXy50cmltKCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqXG4gICAgICogXy5tYXAoWycgIGZvbyAgJywgJyAgYmFyICAnXSwgXy50cmltKTtcbiAgICAgKiAvLyA9PiBbJ2ZvbycsICdiYXInXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW0oc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gYmFzZVRyaW0oc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykgKyAxO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJy1fLWFiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbVN0YXJ0KCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJ2FiYyAgJ1xuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMtXy0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCBzdGFydCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScuLi4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHRydW5jYXRlIHRvLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAnICdcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnbGVuZ3RoJzogMjQsXG4gICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZS4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnb21pc3Npb24nOiAnIFsuLi5dJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICAgICAgb21pc3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OO1xuXG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgbGVuZ3RoID0gJ2xlbmd0aCcgaW4gb3B0aW9ucyA/IHRvSW50ZWdlcihvcHRpb25zLmxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgIG9taXNzaW9uID0gJ29taXNzaW9uJyBpbiBvcHRpb25zID8gYmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pIDogb21pc3Npb247XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyk7XG4gICAgICAgIHN0ckxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBlbmQgPSBsZW5ndGggLSBzdHJpbmdTaXplKG9taXNzaW9uKTtcbiAgICAgIGlmIChlbmQgPCAxKSB7XG4gICAgICAgIHJldHVybiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBzdHJTeW1ib2xzXG4gICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICAgICAgOiBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJTeW1ib2xzKSB7XG4gICAgICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2gsXG4gICAgICAgICAgICAgIHN1YnN0cmluZyA9IHJlc3VsdDtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIHRvU3RyaW5nKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpKSArICdnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkge1xuICAgICAgICAgICAgdmFyIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09PSB1bmRlZmluZWQgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgICAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAgICAgKiBgJmFtcDtgLCBgJmx0O2AsIGAmZ3Q7YCwgYCZxdW90O2AsIGFuZCBgJiMzOTtgIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIEhUTUwgZW50aXRpZXMgYXJlIHVuZXNjYXBlZC4gVG8gdW5lc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIEhUTUwgZW50aXRpZXMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNi4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRlJFRCdcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9VcHBlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnLCAvW14sIF0rL2cpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3b3JkcyhzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICAgICAgaWYgKHBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGJpbmQgYW5kIGFzc2lnbiB0aGUgYm91bmQgbWV0aG9kcyB0by5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB2aWV3ID0ge1xuICAgICAqICAgJ2xhYmVsJzogJ2RvY3MnLFxuICAgICAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdjbGlja2VkICcgKyB0aGlzLmxhYmVsKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5iaW5kQWxsKHZpZXcsIFsnY2xpY2snXSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICAgICAqIC8vID0+IExvZ3MgJ2NsaWNrZWQgZG9jcycgd2hlbiBjbGlja2VkLlxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAga2V5ID0gdG9LZXkoa2V5KTtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICAgICAqIHBhaXJzIGFyZSBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAgICAgKiAgIFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksICAgICAgICAgICBfLmNvbnN0YW50KCdtYXRjaGVzIEEnKV0sXG4gICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwgXy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLFxuICAgICAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gJ21hdGNoZXMgQSdcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBCJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAgICAgKiAvLyA9PiAnbm8gbWF0Y2gnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZChwYWlycykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHRvSXRlcmF0ZWUgPSBnZXRJdGVyYXRlZSgpO1xuXG4gICAgICBwYWlycyA9ICFsZW5ndGggPyBbXSA6IGFycmF5TWFwKHBhaXJzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFpclsxXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdG9JdGVyYXRlZShwYWlyWzBdKSwgcGFpclsxXV07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgICAgaWYgKGFwcGx5KHBhaXJbMF0sIHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGEgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgYHRydWVgIGlmXG4gICAgICogYWxsIHByZWRpY2F0ZXMgcmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNUb2Agd2l0aFxuICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDIsICdiJzogMSB9LFxuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICAgICAqIGl0cyBwbGFjZS4gVGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGBudWxsYCxcbiAgICAgKiBvciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8oMSwgMTApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdFRvKHVuZGVmaW5lZCwgMTApO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVmYXVsdFRvKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBzZWUgXy5mbG93UmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93UmlnaHQoW3NxdWFyZSwgXy5hZGRdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIHRoZVxuICAgICAqIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIGVsZW1lbnQuIElmIGBmdW5jYCBpcyBhbiBhcnJheSBvciBvYmplY3QsIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZSh7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqIF8uaXRlcmF0ZWUgPSBfLndyYXAoXy5pdGVyYXRlZSwgZnVuY3Rpb24oaXRlcmF0ZWUsIGZ1bmMpIHtcbiAgICAgKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICogICAgIHJldHVybiBmdW5jLnRlc3Qoc3RyaW5nKTtcbiAgICAgKiAgIH07XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihbJ2FiYycsICdkZWYnXSwgL2VmLyk7XG4gICAgICogLy8gPT4gWydkZWYnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAgICAgKiBvYmplY3QgYW5kIGBzb3VyY2VgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGVxdWl2YWxlbnRcbiAgICAgKiBwcm9wZXJ0eSB2YWx1ZXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmlzTWF0Y2hgIHdpdGggYHNvdXJjZWBcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGNoZWNrZWQgYnkgY29tYmluaW5nIHNldmVyYWwgbWF0Y2hlcnNcbiAgICAgKiB1c2luZyBgXy5vdmVyU29tZWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKlxuICAgICAqIC8vIENoZWNraW5nIGZvciBzZXZlcmFsIHBvc3NpYmxlIHZhbHVlc1xuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8ub3ZlclNvbWUoW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgXy5tYXRjaGVzKHsgJ2EnOiA0IH0pXSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSwgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdGhlXG4gICAgICogdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0IHRvIGBzcmNWYWx1ZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlXG4gICAgICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdFxuICAgICAqIGBzcmNWYWx1ZWAgdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWVcbiAgICAgKiBgXy5pc0VxdWFsYCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGNoZWNrZWQgYnkgY29tYmluaW5nIHNldmVyYWwgbWF0Y2hlcnNcbiAgICAgKiB1c2luZyBgXy5vdmVyU29tZWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKG9iamVjdHMsIF8ubWF0Y2hlc1Byb3BlcnR5KCdhJywgNCkpO1xuICAgICAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gICAgICpcbiAgICAgKiAvLyBDaGVja2luZyBmb3Igc2V2ZXJhbCBwb3NzaWJsZSB2YWx1ZXNcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm92ZXJTb21lKFtfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDEpLCBfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDQpXSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSwgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICogQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgyKSB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IF8uY29uc3RhbnQoMSkgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKCdhLmInKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICpcbiAgICAgKiBfLm1hcChvYmplY3RzLCBfLm1ldGhvZChbJ2EnLCAnYiddKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgdmFyIG1ldGhvZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWV0aG9kYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICAgICAqIHRoZSBtZXRob2QgYXQgYSBnaXZlbiBwYXRoIG9mIGBvYmplY3RgLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IF8udGltZXMoMywgXy5jb25zdGFudCksXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kT2YgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbGwgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2VcbiAgICAgKiBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9iamVjdGAgaXMgYSBmdW5jdGlvbiwgdGhlbiBtZXRob2RzXG4gICAgICogYXJlIGFkZGVkIHRvIGl0cyBwcm90b3R5cGUgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVc2UgYF8ucnVuSW5Db250ZXh0YCB0byBjcmVhdGUgYSBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB0b1xuICAgICAqIGF2b2lkIGNvbmZsaWN0cyBjYXVzZWQgYnkgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IFtvYmplY3Q9bG9kYXNoXSBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBmdW5jdGlvbnMgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hhaW49dHJ1ZV0gU3BlY2lmeSB3aGV0aGVyIG1peGlucyBhcmUgY2hhaW5hYmxlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0aW9uKHYpIHtcbiAgICAgKiAgICAgcmV0dXJuIC9bYWVpb3VdL2kudGVzdCh2KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICAgICAqIF8udm93ZWxzKCdmcmVkJyk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICpcbiAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1peGluKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwgcHJvcHMpO1xuXG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsICYmXG4gICAgICAgICAgIShpc09iamVjdChzb3VyY2UpICYmIChtZXRob2ROYW1lcy5sZW5ndGggfHwgIXByb3BzLmxlbmd0aCkpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBzb3VyY2U7XG4gICAgICAgIHNvdXJjZSA9IG9iamVjdDtcbiAgICAgICAgb2JqZWN0ID0gdGhpcztcbiAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGFpbiA9ICEoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NoYWluJyBpbiBvcHRpb25zKSB8fCAhIW9wdGlvbnMuY2hhaW4sXG4gICAgICAgICAgaXNGdW5jID0gaXNGdW5jdGlvbihvYmplY3QpO1xuXG4gICAgICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBzb3VyY2VbbWV0aG9kTmFtZV07XG4gICAgICAgIG9iamVjdFttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgICAgICBvYmplY3QucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXztcbiAgICAgICAgICAgIGlmIChjaGFpbiB8fCBjaGFpbkFsbCkge1xuICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLFxuICAgICAgICAgICAgICAgICAgYWN0aW9ucyA9IHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTtcblxuICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goeyAnZnVuYyc6IGZ1bmMsICdhcmdzJzogYXJndW1lbnRzLCAndGhpc0FyZyc6IG9iamVjdCB9KTtcbiAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVydHMgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHMgcHJldmlvdXMgdmFsdWUgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG9cbiAgICAgKiB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBsb2Rhc2ggPSBfLm5vQ29uZmxpY3QoKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub0NvbmZsaWN0KCkge1xuICAgICAgaWYgKHJvb3QuXyA9PT0gdGhpcykge1xuICAgICAgICByb290Ll8gPSBvbGREYXNoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAgICAgKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggYG5gLiBJZiBgbmAgaXMgbmVnYXRpdmUsXG4gICAgICogdGhlIG50aCBhcmd1bWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXNzLXRocnUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5udGhBcmcoMSk7XG4gICAgICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+ICdiJ1xuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygtMik7XG4gICAgICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+ICdjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG50aEFyZyhuKSB7XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VOdGgoYXJncywgbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBpdGVyYXRlZXNgIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlc1xuICAgICAqIGFuZCByZXR1cm5zIHRoZWlyIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyKFtNYXRoLm1heCwgTWF0aC5taW5dKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoMSwgMiwgMywgNCk7XG4gICAgICogLy8gPT4gWzQsIDFdXG4gICAgICovXG4gICAgdmFyIG92ZXIgPSBjcmVhdGVPdmVyKGFycmF5TWFwKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFsbCoqIG9mIHRoZSBgcHJlZGljYXRlc2AgcmV0dXJuXG4gICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBGb2xsb3dpbmcgc2hvcnRoYW5kcyBhcmUgcG9zc2libGUgZm9yIHByb3ZpZGluZyBwcmVkaWNhdGVzLlxuICAgICAqIFBhc3MgYW4gYE9iamVjdGAgYW5kIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiBwYXJhbWV0ZXIgZm9yIGBfLm1hdGNoZXNgIHRvIGNyZWF0ZSB0aGUgcHJlZGljYXRlLlxuICAgICAqIFBhc3MgYW4gYEFycmF5YCBvZiBwYXJhbWV0ZXJzIGZvciBgXy5tYXRjaGVzUHJvcGVydHlgIGFuZCB0aGUgcHJlZGljYXRlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGVtLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJFdmVyeShbQm9vbGVhbiwgaXNGaW5pdGVdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoJzEnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBmdW5jKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBmdW5jKE5hTik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgb3ZlckV2ZXJ5ID0gY3JlYXRlT3ZlcihhcnJheUV2ZXJ5KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFueSoqIG9mIHRoZSBgcHJlZGljYXRlc2AgcmV0dXJuXG4gICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBGb2xsb3dpbmcgc2hvcnRoYW5kcyBhcmUgcG9zc2libGUgZm9yIHByb3ZpZGluZyBwcmVkaWNhdGVzLlxuICAgICAqIFBhc3MgYW4gYE9iamVjdGAgYW5kIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiBwYXJhbWV0ZXIgZm9yIGBfLm1hdGNoZXNgIHRvIGNyZWF0ZSB0aGUgcHJlZGljYXRlLlxuICAgICAqIFBhc3MgYW4gYEFycmF5YCBvZiBwYXJhbWV0ZXJzIGZvciBgXy5tYXRjaGVzUHJvcGVydHlgIGFuZCB0aGUgcHJlZGljYXRlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGVtLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiB2YXIgbWF0Y2hlc0Z1bmMgPSBfLm92ZXJTb21lKFt7ICdhJzogMSB9LCB7ICdhJzogMiB9XSlcbiAgICAgKiB2YXIgbWF0Y2hlc1Byb3BlcnR5RnVuYyA9IF8ub3ZlclNvbWUoW1snYScsIDFdLCBbJ2EnLCAyXV0pXG4gICAgICovXG4gICAgdmFyIG92ZXJTb21lID0gY3JlYXRlT3ZlcihhcnJheVNvbWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICAgICAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAgICAgKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoNCk7XG4gICAgICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKC00KTtcbiAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICAgICAqIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDQpO1xuICAgICAqIC8vID0+IFszLCAyLCAxLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KC00KTtcbiAgICAgKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgxLCA1KTtcbiAgICAgKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAyMCwgNSk7XG4gICAgICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgdmFyIHJhbmdlUmlnaHQgPSBjcmVhdGVSYW5nZSh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAgICAgKiAvLyA9PiBbW10sIFtdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICAgICAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uc3R1Yk9iamVjdCk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAgICAgKiAvLyA9PiBbe30sIHt9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlN0cmluZyk7XG4gICAgICogLy8gPT4gWycnLCAnJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlRydWUpO1xuICAgICAqIC8vID0+IFt0cnVlLCB0cnVlXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJUcnVlKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBlYWNoIGludm9jYXRpb24uIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBTdHJpbmcpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJywgJzInXVxuICAgICAqXG4gICAgICogIF8udGltZXMoNCwgXy5jb25zdGFudCgwKSk7XG4gICAgICogLy8gPT4gWzAsIDAsIDAsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO1xuICAgICAgbiAtPSBNQVhfQVJSQVlfTEVOR1RIO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1BhdGgoJ2EuYi5jJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgdG9LZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdWdlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWRkZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFkZCg2LCA0KTtcbiAgICAgKiAvLyA9PiAxMFxuICAgICAqL1xuICAgIHZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gICAgICByZXR1cm4gYXVnZW5kICsgYWRkZW5kO1xuICAgIH0sIDApO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgdXAgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNC4wMDYpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2LjAwNCwgMik7XG4gICAgICogLy8gPT4gNi4wMVxuICAgICAqXG4gICAgICogXy5jZWlsKDYwNDAsIC0yKTtcbiAgICAgKiAvLyA9PiA2MTAwXG4gICAgICovXG4gICAgdmFyIGNlaWwgPSBjcmVhdGVSb3VuZCgnY2VpbCcpO1xuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc29yIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGl2aWRlKDYsIDQpO1xuICAgICAqIC8vID0+IDEuNVxuICAgICAqL1xuICAgIHZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICByZXR1cm4gZGl2aWRlbmQgLyBkaXZpc29yO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCBkb3duIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgZG93biBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoMC4wNDYsIDIpO1xuICAgICAqIC8vID0+IDAuMDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQwMDBcbiAgICAgKi9cbiAgICB2YXIgZmxvb3IgPSBjcmVhdGVSb3VuZCgnZmxvb3InKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWF4KFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tYXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5tYXhCeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWF4Qnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF4QnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tZWFuKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lYW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgaWRlbnRpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVhbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIGF2ZXJhZ2VkLlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWVhbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8ubWluKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VMdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5taW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5taW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWNhbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwcm9kdWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm11bHRpcGx5KDYsIDQpO1xuICAgICAqIC8vID0+IDI0XG4gICAgICovXG4gICAgdmFyIG11bHRpcGx5ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmQpIHtcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnVlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdWJ0cmFoZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICByZXR1cm4gbWludWVuZCAtIHN1YnRyYWhlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3VtKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTdW0oYXJyYXksIGlkZW50aXR5KVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zdW1gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnN1bUJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gd3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZnRlciA9IGFmdGVyO1xuICAgIGxvZGFzaC5hcnkgPSBhcnk7XG4gICAgbG9kYXNoLmFzc2lnbiA9IGFzc2lnbjtcbiAgICBsb2Rhc2guYXNzaWduSW4gPSBhc3NpZ25JbjtcbiAgICBsb2Rhc2guYXNzaWduSW5XaXRoID0gYXNzaWduSW5XaXRoO1xuICAgIGxvZGFzaC5hc3NpZ25XaXRoID0gYXNzaWduV2l0aDtcbiAgICBsb2Rhc2guYXQgPSBhdDtcbiAgICBsb2Rhc2guYmVmb3JlID0gYmVmb3JlO1xuICAgIGxvZGFzaC5iaW5kID0gYmluZDtcbiAgICBsb2Rhc2guYmluZEFsbCA9IGJpbmRBbGw7XG4gICAgbG9kYXNoLmJpbmRLZXkgPSBiaW5kS2V5O1xuICAgIGxvZGFzaC5jYXN0QXJyYXkgPSBjYXN0QXJyYXk7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25jYXQgPSBjb25jYXQ7XG4gICAgbG9kYXNoLmNvbmQgPSBjb25kO1xuICAgIGxvZGFzaC5jb25mb3JtcyA9IGNvbmZvcm1zO1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZUJ5ID0gZGlmZmVyZW5jZUJ5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlV2l0aCA9IGRpZmZlcmVuY2VXaXRoO1xuICAgIGxvZGFzaC5kcm9wID0gZHJvcDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0ID0gZHJvcFJpZ2h0O1xuICAgIGxvZGFzaC5kcm9wUmlnaHRXaGlsZSA9IGRyb3BSaWdodFdoaWxlO1xuICAgIGxvZGFzaC5kcm9wV2hpbGUgPSBkcm9wV2hpbGU7XG4gICAgbG9kYXNoLmZpbGwgPSBmaWxsO1xuICAgIGxvZGFzaC5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLmZsYXRNYXAgPSBmbGF0TWFwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVlcCA9IGZsYXRNYXBEZWVwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVwdGggPSBmbGF0TWFwRGVwdGg7XG4gICAgbG9kYXNoLmZsYXR0ZW4gPSBmbGF0dGVuO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVlcCA9IGZsYXR0ZW5EZWVwO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVwdGggPSBmbGF0dGVuRGVwdGg7XG4gICAgbG9kYXNoLmZsaXAgPSBmbGlwO1xuICAgIGxvZGFzaC5mbG93ID0gZmxvdztcbiAgICBsb2Rhc2guZmxvd1JpZ2h0ID0gZmxvd1JpZ2h0O1xuICAgIGxvZGFzaC5mcm9tUGFpcnMgPSBmcm9tUGFpcnM7XG4gICAgbG9kYXNoLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2guZnVuY3Rpb25zSW4gPSBmdW5jdGlvbnNJbjtcbiAgICBsb2Rhc2guZ3JvdXBCeSA9IGdyb3VwQnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbkJ5ID0gaW50ZXJzZWN0aW9uQnk7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBpbnRlcnNlY3Rpb25XaXRoO1xuICAgIGxvZGFzaC5pbnZlcnQgPSBpbnZlcnQ7XG4gICAgbG9kYXNoLmludmVydEJ5ID0gaW52ZXJ0Qnk7XG4gICAgbG9kYXNoLmludm9rZU1hcCA9IGludm9rZU1hcDtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiAgICBsb2Rhc2gua2V5QnkgPSBrZXlCeTtcbiAgICBsb2Rhc2gua2V5cyA9IGtleXM7XG4gICAgbG9kYXNoLmtleXNJbiA9IGtleXNJbjtcbiAgICBsb2Rhc2gubWFwID0gbWFwO1xuICAgIGxvZGFzaC5tYXBLZXlzID0gbWFwS2V5cztcbiAgICBsb2Rhc2gubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuICAgIGxvZGFzaC5tYXRjaGVzID0gbWF0Y2hlcztcbiAgICBsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gbWF0Y2hlc1Byb3BlcnR5O1xuICAgIGxvZGFzaC5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBsb2Rhc2gubWVyZ2UgPSBtZXJnZTtcbiAgICBsb2Rhc2gubWVyZ2VXaXRoID0gbWVyZ2VXaXRoO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICBsb2Rhc2gubnRoQXJnID0gbnRoQXJnO1xuICAgIGxvZGFzaC5vbWl0ID0gb21pdDtcbiAgICBsb2Rhc2gub21pdEJ5ID0gb21pdEJ5O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gub3JkZXJCeSA9IG9yZGVyQnk7XG4gICAgbG9kYXNoLm92ZXIgPSBvdmVyO1xuICAgIGxvZGFzaC5vdmVyQXJncyA9IG92ZXJBcmdzO1xuICAgIGxvZGFzaC5vdmVyRXZlcnkgPSBvdmVyRXZlcnk7XG4gICAgbG9kYXNoLm92ZXJTb21lID0gb3ZlclNvbWU7XG4gICAgbG9kYXNoLnBhcnRpYWwgPSBwYXJ0aWFsO1xuICAgIGxvZGFzaC5wYXJ0aWFsUmlnaHQgPSBwYXJ0aWFsUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbiAgICBsb2Rhc2gucGljayA9IHBpY2s7XG4gICAgbG9kYXNoLnBpY2tCeSA9IHBpY2tCeTtcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsID0gcHVsbEFsbDtcbiAgICBsb2Rhc2gucHVsbEFsbEJ5ID0gcHVsbEFsbEJ5O1xuICAgIGxvZGFzaC5wdWxsQWxsV2l0aCA9IHB1bGxBbGxXaXRoO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJhbmdlUmlnaHQgPSByYW5nZVJpZ2h0O1xuICAgIGxvZGFzaC5yZWFyZyA9IHJlYXJnO1xuICAgIGxvZGFzaC5yZWplY3QgPSByZWplY3Q7XG4gICAgbG9kYXNoLnJlbW92ZSA9IHJlbW92ZTtcbiAgICBsb2Rhc2gucmVzdCA9IHJlc3Q7XG4gICAgbG9kYXNoLnJldmVyc2UgPSByZXZlcnNlO1xuICAgIGxvZGFzaC5zYW1wbGVTaXplID0gc2FtcGxlU2l6ZTtcbiAgICBsb2Rhc2guc2V0ID0gc2V0O1xuICAgIGxvZGFzaC5zZXRXaXRoID0gc2V0V2l0aDtcbiAgICBsb2Rhc2guc2h1ZmZsZSA9IHNodWZmbGU7XG4gICAgbG9kYXNoLnNsaWNlID0gc2xpY2U7XG4gICAgbG9kYXNoLnNvcnRCeSA9IHNvcnRCeTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcSA9IHNvcnRlZFVuaXE7XG4gICAgbG9kYXNoLnNvcnRlZFVuaXFCeSA9IHNvcnRlZFVuaXFCeTtcbiAgICBsb2Rhc2guc3BsaXQgPSBzcGxpdDtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWlsID0gdGFpbDtcbiAgICBsb2Rhc2gudGFrZSA9IHRha2U7XG4gICAgbG9kYXNoLnRha2VSaWdodCA9IHRha2VSaWdodDtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0V2hpbGUgPSB0YWtlUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2gudGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuICAgIGxvZGFzaC50YXAgPSB0YXA7XG4gICAgbG9kYXNoLnRocm90dGxlID0gdGhyb3R0bGU7XG4gICAgbG9kYXNoLnRocnUgPSB0aHJ1O1xuICAgIGxvZGFzaC50b0FycmF5ID0gdG9BcnJheTtcbiAgICBsb2Rhc2gudG9QYWlycyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLnRvUGFpcnNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2gudG9QYXRoID0gdG9QYXRoO1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmFyeSA9IHVuYXJ5O1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlvbkJ5ID0gdW5pb25CeTtcbiAgICBsb2Rhc2gudW5pb25XaXRoID0gdW5pb25XaXRoO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW5pcUJ5ID0gdW5pcUJ5O1xuICAgIGxvZGFzaC51bmlxV2l0aCA9IHVuaXFXaXRoO1xuICAgIGxvZGFzaC51bnNldCA9IHVuc2V0O1xuICAgIGxvZGFzaC51bnppcCA9IHVuemlwO1xuICAgIGxvZGFzaC51bnppcFdpdGggPSB1bnppcFdpdGg7XG4gICAgbG9kYXNoLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgICBsb2Rhc2gudXBkYXRlV2l0aCA9IHVwZGF0ZVdpdGg7XG4gICAgbG9kYXNoLnZhbHVlcyA9IHZhbHVlcztcbiAgICBsb2Rhc2gudmFsdWVzSW4gPSB2YWx1ZXNJbjtcbiAgICBsb2Rhc2gud2l0aG91dCA9IHdpdGhvdXQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG4gICAgbG9kYXNoLndyYXAgPSB3cmFwO1xuICAgIGxvZGFzaC54b3IgPSB4b3I7XG4gICAgbG9kYXNoLnhvckJ5ID0geG9yQnk7XG4gICAgbG9kYXNoLnhvcldpdGggPSB4b3JXaXRoO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwT2JqZWN0RGVlcCA9IHppcE9iamVjdERlZXA7XG4gICAgbG9kYXNoLnppcFdpdGggPSB6aXBXaXRoO1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVudHJpZXMgPSB0b1BhaXJzO1xuICAgIGxvZGFzaC5lbnRyaWVzSW4gPSB0b1BhaXJzSW47XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5leHRlbmRXaXRoID0gYXNzaWduSW5XaXRoO1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIG1peGluKGxvZGFzaCwgbG9kYXNoKTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZGQgPSBhZGQ7XG4gICAgbG9kYXNoLmF0dGVtcHQgPSBhdHRlbXB0O1xuICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG4gICAgbG9kYXNoLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuICAgIGxvZGFzaC5jZWlsID0gY2VpbDtcbiAgICBsb2Rhc2guY2xhbXAgPSBjbGFtcDtcbiAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTtcbiAgICBsb2Rhc2guY2xvbmVEZWVwID0gY2xvbmVEZWVwO1xuICAgIGxvZGFzaC5jbG9uZURlZXBXaXRoID0gY2xvbmVEZWVwV2l0aDtcbiAgICBsb2Rhc2guY2xvbmVXaXRoID0gY2xvbmVXaXRoO1xuICAgIGxvZGFzaC5jb25mb3Jtc1RvID0gY29uZm9ybXNUbztcbiAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyO1xuICAgIGxvZGFzaC5kZWZhdWx0VG8gPSBkZWZhdWx0VG87XG4gICAgbG9kYXNoLmRpdmlkZSA9IGRpdmlkZTtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXEgPSBlcTtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZ2V0ID0gZ2V0O1xuICAgIGxvZGFzaC5ndCA9IGd0O1xuICAgIGxvZGFzaC5ndGUgPSBndGU7XG4gICAgbG9kYXNoLmhhcyA9IGhhcztcbiAgICBsb2Rhc2guaGFzSW4gPSBoYXNJbjtcbiAgICBsb2Rhc2guaGVhZCA9IGhlYWQ7XG4gICAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mO1xuICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5nZTtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzO1xuICAgIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbiAgICBsb2Rhc2guaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2U7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0ID0gaXNBcnJheUxpa2VPYmplY3Q7XG4gICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbiAgICBsb2Rhc2guaXNCdWZmZXIgPSBpc0J1ZmZlcjtcbiAgICBsb2Rhc2guaXNEYXRlID0gaXNEYXRlO1xuICAgIGxvZGFzaC5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG4gICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5O1xuICAgIGxvZGFzaC5pc0VxdWFsID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guaXNFcXVhbFdpdGggPSBpc0VxdWFsV2l0aDtcbiAgICBsb2Rhc2guaXNFcnJvciA9IGlzRXJyb3I7XG4gICAgbG9kYXNoLmlzRmluaXRlID0gaXNGaW5pdGU7XG4gICAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuICAgIGxvZGFzaC5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG4gICAgbG9kYXNoLmlzTGVuZ3RoID0gaXNMZW5ndGg7XG4gICAgbG9kYXNoLmlzTWFwID0gaXNNYXA7XG4gICAgbG9kYXNoLmlzTWF0Y2ggPSBpc01hdGNoO1xuICAgIGxvZGFzaC5pc01hdGNoV2l0aCA9IGlzTWF0Y2hXaXRoO1xuICAgIGxvZGFzaC5pc05hTiA9IGlzTmFOO1xuICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlO1xuICAgIGxvZGFzaC5pc05pbCA9IGlzTmlsO1xuICAgIGxvZGFzaC5pc051bGwgPSBpc051bGw7XG4gICAgbG9kYXNoLmlzTnVtYmVyID0gaXNOdW1iZXI7XG4gICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4gICAgbG9kYXNoLmlzT2JqZWN0TGlrZSA9IGlzT2JqZWN0TGlrZTtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU2FmZUludGVnZXIgPSBpc1NhZmVJbnRlZ2VyO1xuICAgIGxvZGFzaC5pc1NldCA9IGlzU2V0O1xuICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgIGxvZGFzaC5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuICAgIGxvZGFzaC5pc1R5cGVkQXJyYXkgPSBpc1R5cGVkQXJyYXk7XG4gICAgbG9kYXNoLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG4gICAgbG9kYXNoLmlzV2Vha01hcCA9IGlzV2Vha01hcDtcbiAgICBsb2Rhc2guaXNXZWFrU2V0ID0gaXNXZWFrU2V0O1xuICAgIGxvZGFzaC5qb2luID0gam9pbjtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubG93ZXJDYXNlID0gbG93ZXJDYXNlO1xuICAgIGxvZGFzaC5sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1heEJ5ID0gbWF4Qnk7XG4gICAgbG9kYXNoLm1lYW4gPSBtZWFuO1xuICAgIGxvZGFzaC5tZWFuQnkgPSBtZWFuQnk7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubWluQnkgPSBtaW5CeTtcbiAgICBsb2Rhc2guc3R1YkFycmF5ID0gc3R1YkFycmF5O1xuICAgIGxvZGFzaC5zdHViRmFsc2UgPSBzdHViRmFsc2U7XG4gICAgbG9kYXNoLnN0dWJPYmplY3QgPSBzdHViT2JqZWN0O1xuICAgIGxvZGFzaC5zdHViU3RyaW5nID0gc3R1YlN0cmluZztcbiAgICBsb2Rhc2guc3R1YlRydWUgPSBzdHViVHJ1ZTtcbiAgICBsb2Rhc2gubXVsdGlwbHkgPSBtdWx0aXBseTtcbiAgICBsb2Rhc2gubnRoID0gbnRoO1xuICAgIGxvZGFzaC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDtcbiAgICBsb2Rhc2gubm9vcCA9IG5vb3A7XG4gICAgbG9kYXNoLm5vdyA9IG5vdztcbiAgICBsb2Rhc2gucGFkID0gcGFkO1xuICAgIGxvZGFzaC5wYWRFbmQgPSBwYWRFbmQ7XG4gICAgbG9kYXNoLnBhZFN0YXJ0ID0gcGFkU3RhcnQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7XG4gICAgbG9kYXNoLnJvdW5kID0gcm91bmQ7XG4gICAgbG9kYXNoLnJ1bkluQ29udGV4dCA9IHJ1bkluQ29udGV4dDtcbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhCeSA9IHNvcnRlZEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4T2YgPSBzb3J0ZWRJbmRleE9mO1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXggPSBzb3J0ZWRMYXN0SW5kZXg7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5ID0gc29ydGVkTGFzdEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gc29ydGVkTGFzdEluZGV4T2Y7XG4gICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTtcbiAgICBsb2Rhc2guc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGg7XG4gICAgbG9kYXNoLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgbG9kYXNoLnN1bSA9IHN1bTtcbiAgICBsb2Rhc2guc3VtQnkgPSBzdW1CeTtcbiAgICBsb2Rhc2gudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICBsb2Rhc2gudGltZXMgPSB0aW1lcztcbiAgICBsb2Rhc2gudG9GaW5pdGUgPSB0b0Zpbml0ZTtcbiAgICBsb2Rhc2gudG9JbnRlZ2VyID0gdG9JbnRlZ2VyO1xuICAgIGxvZGFzaC50b0xlbmd0aCA9IHRvTGVuZ3RoO1xuICAgIGxvZGFzaC50b0xvd2VyID0gdG9Mb3dlcjtcbiAgICBsb2Rhc2gudG9OdW1iZXIgPSB0b051bWJlcjtcbiAgICBsb2Rhc2gudG9TYWZlSW50ZWdlciA9IHRvU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgbG9kYXNoLnRvVXBwZXIgPSB0b1VwcGVyO1xuICAgIGxvZGFzaC50cmltID0gdHJpbTtcbiAgICBsb2Rhc2gudHJpbUVuZCA9IHRyaW1FbmQ7XG4gICAgbG9kYXNoLnRyaW1TdGFydCA9IHRyaW1TdGFydDtcbiAgICBsb2Rhc2gudHJ1bmNhdGUgPSB0cnVuY2F0ZTtcbiAgICBsb2Rhc2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbiAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDtcbiAgICBsb2Rhc2gudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuICAgIGxvZGFzaC51cHBlckZpcnN0ID0gdXBwZXJGaXJzdDtcblxuICAgIC8vIEFkZCBhbGlhc2VzLlxuICAgIGxvZGFzaC5lYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5maXJzdCA9IGhlYWQ7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gucHJvdG90eXBlLCBtZXRob2ROYW1lKSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsb2Rhc2guVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICAvLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG4gICAgYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgbG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyID0gbG9kYXNoO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuICAgIGFycmF5RWFjaChbJ2Ryb3AnLCAndGFrZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24obikge1xuICAgICAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSAodGhpcy5fX2ZpbHRlcmVkX18gJiYgIWluZGV4KVxuICAgICAgICAgID8gbmV3IExhenlXcmFwcGVyKHRoaXMpXG4gICAgICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5fX2ZpbHRlcmVkX18pIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihuLCByZXN1bHQuX190YWtlQ291bnRfXyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHtcbiAgICAgICAgICAgICdzaXplJzogbmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpLFxuICAgICAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICAgICAnaXRlcmF0ZWUnOiBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAgICAgJ3R5cGUnOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5oZWFkYCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnaGVhZCcsICdsYXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGFrZU5hbWVdKDEpLnZhbHVlKClbMF07XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaW5pdGlhbGAgYW5kIGBfLnRhaWxgLlxuICAgIGFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGRyb3BOYW1lID0gJ2Ryb3AnICsgKGluZGV4ID8gJycgOiAnUmlnaHQnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXyAmJiAoc3RhcnQgPiAwIHx8IGVuZCA8IDApKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuZHJvcChzdGFydCk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gdG9JbnRlZ2VyKGVuZCk7XG4gICAgICAgIHJlc3VsdCA9IGVuZCA8IDAgPyByZXN1bHQuZHJvcFJpZ2h0KC1lbmQpIDogcmVzdWx0LnRha2UoZW5kIC0gc3RhcnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgbG9kYXNoRnVuYyA9IGxvZGFzaFtpc1Rha2VyID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV0sXG4gICAgICAgICAgcmV0VW53cmFwcGVkID0gaXNUYWtlciB8fCAvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgICBhcmdzID0gaXNUYWtlciA/IFsxXSA6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLCBhcnJheVB1c2goW3ZhbHVlXSwgYXJncykpO1xuICAgICAgICAgIHJldHVybiAoaXNUYWtlciAmJiBjaGFpbkFsbCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHVzZUxhenkgJiYgY2hlY2tJdGVyYXRlZSAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVyYXRlZS5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIEF2b2lkIGxhenkgdXNlIGlmIHRoZSBpdGVyYXRlZSBoYXMgYSBcImxlbmd0aFwiIHZhbHVlIG90aGVyIHRoYW4gYDFgLlxuICAgICAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzVW53cmFwcGVkID0gcmV0VW53cmFwcGVkICYmICFjaGFpbkFsbCxcbiAgICAgICAgICAgIG9ubHlMYXp5ID0gaXNMYXp5ICYmICFpc0h5YnJpZDtcblxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIocmVzdWx0LCBjaGFpbkFsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIGlzVW53cmFwcGVkID8gKGlzVGFrZXIgPyByZXN1bHQudmFsdWUoKVswXSA6IHJlc3VsdC52YWx1ZSgpKSA6IHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBhcnJheUVhY2goWydwb3AnLCAncHVzaCcsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgICAgICBjaGFpbk5hbWUgPSAvXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyAndGFwJyA6ICd0aHJ1JyxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSAvXig/OnBvcHxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBNYXAgbWluaWZpZWQgbWV0aG9kIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSArICcnO1xuICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCBrZXkpKSB7XG4gICAgICAgICAgcmVhbE5hbWVzW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZWFsTmFtZXNba2V5XS5wdXNoKHsgJ25hbWUnOiBtZXRob2ROYW1lLCAnZnVuYyc6IGxvZGFzaEZ1bmMgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWFsTmFtZXNbY3JlYXRlSHlicmlkKHVuZGVmaW5lZCwgV1JBUF9CSU5EX0tFWV9GTEFHKS5uYW1lXSA9IFt7XG4gICAgICAnbmFtZSc6ICd3cmFwcGVyJyxcbiAgICAgICdmdW5jJzogdW5kZWZpbmVkXG4gICAgfV07XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGF6eVdyYXBwZXJgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS52YWx1ZSA9IGxhenlWYWx1ZTtcblxuICAgIC8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuYXQgPSB3cmFwcGVyQXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jaGFpbiA9IHdyYXBwZXJDaGFpbjtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbW1pdCA9IHdyYXBwZXJDb21taXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gd3JhcHBlck5leHQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSB3cmFwcGVyVmFsdWU7XG5cbiAgICAvLyBBZGQgbGF6eSBhbGlhc2VzLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuZmlyc3QgPSBsb2Rhc2gucHJvdG90eXBlLmhlYWQ7XG5cbiAgICBpZiAoc3ltSXRlcmF0b3IpIHtcbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbc3ltSXRlcmF0b3JdID0gd3JhcHBlclRvSXRlcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH0pO1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8vIEV4cG9ydCBsb2Rhc2guXG4gIHZhciBfID0gcnVuSW5Db250ZXh0KCk7XG5cbiAgLy8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6XG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEV4cG9zZSBMb2Rhc2ggb24gdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBlcnJvcnMgd2hlbiBMb2Rhc2ggaXNcbiAgICAvLyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTUQgbG9hZGVyLlxuICAgIC8vIFNlZSBodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sI21pc21hdGNoIGZvciBtb3JlIGRldGFpbHMuXG4gICAgLy8gVXNlIGBfLm5vQ29uZmxpY3RgIHRvIHJlbW92ZSBMb2Rhc2ggZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuXG4gICAgLy8gRGVmaW5lIGFzIGFuIGFub255bW91cyBtb2R1bGUgc28sIHRocm91Z2ggcGF0aCBtYXBwaW5nLCBpdCBjYW4gYmVcbiAgICAvLyByZWZlcmVuY2VkIGFzIHRoZSBcInVuZGVyc2NvcmVcIiBtb2R1bGUuXG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGBleHBvcnRzYCBhZnRlciBgZGVmaW5lYCBpbiBjYXNlIGEgYnVpbGQgb3B0aW1pemVyIGFkZHMgaXQuXG4gIGVsc2UgaWYgKGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMuXG4gICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBmcmVlRXhwb3J0cy5fID0gXztcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgdG8gdGhlIGdsb2JhbCBvYmplY3QuXG4gICAgcm9vdC5fID0gXztcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIsCiAgICAiaW1wb3J0IHsgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSwgSW5zdHJ1bWVudGF0aW9uQmFzZSwgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24gfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgbG9kYXNoIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb250ZXh0LCB0cmFjZSwgU3BhblN0YXR1c0NvZGUsIFNwYW5LaW5kIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IFNwYW5BdHRyaWJ1dGVzLCBUcmFjZWxvb3BTcGFuS2luZFZhbHVlcywgQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCB9IGZyb20gJ0B0cmFjZWxvb3AvYWktc2VtYW50aWMtY29udmVudGlvbnMnO1xuaW1wb3J0IHsgX19hc3luY0dlbmVyYXRvciwgX19hc3luY1ZhbHVlcywgX19hd2FpdCB9IGZyb20gJ3RzbGliJztcblxuY29uc3Qgc2hvdWxkU2VuZFByb21wdHMgPSAoY29uZmlnKSA9PiB7XG4gICAgY29uc3QgY29udGV4dFNob3VsZFNlbmRQcm9tcHRzID0gY29udGV4dFxuICAgICAgICAuYWN0aXZlKClcbiAgICAgICAgLmdldFZhbHVlKENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQpO1xuICAgIGlmIChjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gISFjb250ZXh0U2hvdWxkU2VuZFByb21wdHM7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcudHJhY2VDb250ZW50ICE9PSB1bmRlZmluZWQgPyBjb25maWcudHJhY2VDb250ZW50IDogdHJ1ZTtcbn07XG4vLyBBZG9wdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktanMvaXNzdWVzLzI5NTEjaXNzdWVjb21tZW50LTEyMTQ1ODczNzhcbmZ1bmN0aW9uIGJpbmRBc3luY0dlbmVyYXRvcihjdHgsIGdlbmVyYXRvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBjb250ZXh0LmJpbmQoY3R4LCBnZW5lcmF0b3IubmV4dC5iaW5kKGdlbmVyYXRvcikpLFxuICAgICAgICByZXR1cm46IGNvbnRleHQuYmluZChjdHgsIGdlbmVyYXRvci5yZXR1cm4uYmluZChnZW5lcmF0b3IpKSxcbiAgICAgICAgdGhyb3c6IGNvbnRleHQuYmluZChjdHgsIGdlbmVyYXRvci50aHJvdy5iaW5kKGdlbmVyYXRvcikpLFxuICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgcmV0dXJuIGJpbmRBc3luY0dlbmVyYXRvcihjdHgsIGdlbmVyYXRvcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogKChfYSA9IGdlbmVyYXRvcltTeW1ib2wuYXN5bmNEaXNwb3NlXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJpbmQoZ2VuZXJhdG9yKSkgfHxcbiAgICAgICAgICAgICgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRvcldyYXBwZXIoc3RyZWFtaW5nUmVzdWx0LCBjdHgsIGZuKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogZ2VuZXJhdG9yV3JhcHBlcl8xKCkge1xuICAgICAgICB2YXIgX2EsIGVfMSwgX2IsIF9jO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2QgPSB0cnVlLCBfZSA9IF9fYXN5bmNWYWx1ZXMoYmluZEFzeW5jR2VuZXJhdG9yKGN0eCwgc3RyZWFtaW5nUmVzdWx0KSksIF9mOyBfZiA9IHlpZWxkIF9fYXdhaXQoX2UubmV4dCgpKSwgX2EgPSBfZi5kb25lLCAhX2E7IF9kID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIF9jID0gX2YudmFsdWU7XG4gICAgICAgICAgICAgICAgX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IF9jO1xuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoIV9kICYmICFfYSAmJiAoX2IgPSBfZS5yZXR1cm4pKSB5aWVsZCBfX2F3YWl0KF9iLmNhbGwoX2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBmbigpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gbGxtR2VuZXJhdG9yV3JhcHBlcihzdHJlYW1pbmdSZXN1bHQsIGN0eCwgZm4pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBsbG1HZW5lcmF0b3JXcmFwcGVyXzEoKSB7XG4gICAgICAgIHZhciBfYSwgZV8yLCBfYiwgX2M7XG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIF9kID0gdHJ1ZSwgX2UgPSBfX2FzeW5jVmFsdWVzKGJpbmRBc3luY0dlbmVyYXRvcihjdHgsIHN0cmVhbWluZ1Jlc3VsdCkpLCBfZjsgX2YgPSB5aWVsZCBfX2F3YWl0KF9lLm5leHQoKSksIF9hID0gX2YuZG9uZSwgIV9hOyBfZCA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfYyA9IF9mLnZhbHVlO1xuICAgICAgICAgICAgICAgIF9kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZUNodW5rID0gX2M7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDaHVuay5kZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IG1lc3NhZ2VDaHVuay5kZWx0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDaHVuay50ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gbWVzc2FnZUNodW5rLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQobWVzc2FnZUNodW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfZCAmJiAhX2EgJiYgKF9iID0gX2UucmV0dXJuKSkgeWllbGQgX19hd2FpdChfYi5jYWxsKF9lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgZm4obWVzc2FnZSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZW5lcmljV3JhcHBlcihjbGFzc05hbWUsIG1ldGhvZE5hbWUsIGtpbmQsIHRyYWNlciwgc2hvdWxkU2VuZFByb21wdHMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2QoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gYXJnc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbWluZyA9IHBhcmFtcyAmJiBwYXJhbXMuc3RyZWFtO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGAke2xvZGFzaC5zbmFrZUNhc2UoY2xhc3NOYW1lKX0uJHtsb2Rhc2guc25ha2VDYXNlKG1ldGhvZE5hbWUpfWA7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gdHJhY2VyKCkuc3RhcnRTcGFuKGAke25hbWV9YCwge30sIGNvbnRleHQuYWN0aXZlKCkpO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX1NQQU5fS0lORCwga2luZCk7XG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuV09SS0ZMT1cpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfV09SS0ZMT1dfTkFNRSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2VuZFByb21wdHMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKGFyZ3NbMF0gaW5zdGFuY2VvZiBNYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfRU5USVRZX0lOUFVULCBKU09OLnN0cmluZ2lmeSh7IGFyZ3M6IFtdLCBrd2FyZ3M6IGFyZ3NbMF0gfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9JTlBVVCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MubWFwKChhcmcpID0+IGFyZyBpbnN0YW5jZW9mIE1hcCA/IEFycmF5LmZyb20oYXJnLmVudHJpZXMoKSkgOiBhcmcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnczoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgY29uc3QgZXhlY1Byb21pc2UgPSBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKGV4ZWNDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgICAgICAgKCkgPT4geyB9KTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRQcm9taXNlID0gZXhlY1Byb21pc2VcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdlbmVyYXRvcldyYXBwZXIocmVzdWx0LCBleGVjQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNlbmRQcm9tcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlRSQUNFTE9PUF9FTlRJVFlfT1VUUFVULCBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdC5lbnRyaWVzKCkpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfRU5USVRZX09VVFBVVCwgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgd3JhcHBlZFByb21pc2UpO1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbmNsYXNzIEN1c3RvbUxMTUluc3RydW1lbnRhdGlvbiB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnLCBkaWFnLCB0cmFjZXIpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuZGlhZyA9IGRpYWc7XG4gICAgICAgIHRoaXMudHJhY2VyID0gdHJhY2VyO1xuICAgIH1cbiAgICBjaGF0V3JhcHBlcih7IGNsYXNzTmFtZSB9KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMubWVzc2FnZXM7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtaW5nID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnN0cmVhbTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luXG4gICAgICAgICAgICAgICAgICAgIC50cmFjZXIoKVxuICAgICAgICAgICAgICAgICAgICAuc3RhcnRTcGFuKGBsbGFtYWluZGV4LiR7bG9kYXNoLnNuYWtlQ2FzZShjbGFzc05hbWUpfS5jaGF0YCwge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1NZU1RFTSwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTU9ERUwsIHRoaXMubWV0YWRhdGEubW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFLCBcImNoYXRcIik7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RPUF9QLCB0aGlzLm1ldGFkYXRhLnRvcFApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2VuZFByb21wdHMocGx1Z2luLmNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbWVzc2FnZUlkeCBpbiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlc1ttZXNzYWdlSWR4XS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHttZXNzYWdlSWR4fS5jb250ZW50YCwgY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRlbnRbMF0udHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7bWVzc2FnZUlkeH0uY29udGVudGAsIGNvbnRlbnRbMF0udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke21lc3NhZ2VJZHh9LnJvbGVgLCBtZXNzYWdlc1ttZXNzYWdlSWR4XS5yb2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uZGlhZy53YXJuKGUpO1xuICAgICAgICAgICAgICAgICAgICAoX2IgPSAoX2EgPSBwbHVnaW4uY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LndpdGgoZXhlY0NvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgICAgICAgICAgICgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSBleGVjUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbWluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBsdWdpbi5oYW5kbGVTdHJlYW1pbmdSZXNwb25zZShyZXN1bHQsIHNwYW4sIGV4ZWNDb250ZXh0LCB0aGlzLm1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBsdWdpbi5oYW5kbGVSZXNwb25zZShyZXN1bHQsIHNwYW4sIHRoaXMubWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmJpbmQoZXhlY0NvbnRleHQsIHdyYXBwZWRQcm9taXNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhbmRsZVJlc3BvbnNlKHJlc3VsdCwgc3BhbiwgbWV0YWRhdGEpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1JFU1BPTlNFX01PREVMLCBtZXRhZGF0YS5tb2RlbCk7XG4gICAgICAgIGlmICghc2hvdWxkU2VuZFByb21wdHModGhpcy5jb25maWcpKSB7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5yb2xlYCwgcmVzdWx0Lm1lc3NhZ2Uucm9sZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3VsdC5tZXNzYWdlLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5jb250ZW50YCwgY29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRlbnRbMF0udHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgLCBjb250ZW50WzBdLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWcud2FybihlKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBoYW5kbGVTdHJlYW1pbmdSZXNwb25zZShyZXN1bHQsIHNwYW4sIGV4ZWNDb250ZXh0LCBtZXRhZGF0YSkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUwsIG1ldGFkYXRhLm1vZGVsKTtcbiAgICAgICAgaWYgKCFzaG91bGRTZW5kUHJvbXB0cyh0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGxtR2VuZXJhdG9yV3JhcHBlcihyZXN1bHQsIGV4ZWNDb250ZXh0LCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbnZhciB2ZXJzaW9uID0gXCIwLjIxLjBcIjtcblxuY2xhc3MgTGxhbWFJbmRleEluc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tbGxhbWFpbmRleFwiLCB2ZXJzaW9uLCBjb25maWcpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgfVxuICAgIG1hbnVhbGx5SW5zdHJ1bWVudChtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIk1hbnVhbGx5IGluc3RydW1lbnRpbmcgbGxhbWFpbmRleFwiKTtcbiAgICAgICAgdGhpcy5wYXRjaChtb2R1bGUpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBsbGFtYWluZGV4TW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwibGxhbWFpbmRleFwiLCBbXCI+PTAuMS4wXCJdLCB0aGlzLnBhdGNoLmJpbmQodGhpcyksIHRoaXMudW5wYXRjaC5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3Qgb3BlbmFpTW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwiQGxsYW1haW5kZXgvb3BlbmFpXCIsIFtcIj49MC4xLjBcIl0sIHRoaXMucGF0Y2hPcGVuQUkuYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoT3BlbkFJLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gW2xsYW1haW5kZXhNb2R1bGUsIG9wZW5haU1vZHVsZV07XG4gICAgfVxuICAgIGlzTExNKGxsbSkge1xuICAgICAgICByZXR1cm4gKGxsbSAmJlxuICAgICAgICAgICAgbGxtLmNvbXBsZXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGxsbS5jaGF0ICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpc0VtYmVkZGluZyhlbWJlZGRpbmcpIHtcbiAgICAgICAgcmV0dXJuICEhKGVtYmVkZGluZyA9PT0gbnVsbCB8fCBlbWJlZGRpbmcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVtYmVkZGluZy5nZXRRdWVyeUVtYmVkZGluZyk7XG4gICAgfVxuICAgIGlzU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpIHtcbiAgICAgICAgcmV0dXJuIChzeW50aGVzaXplciAmJiBzeW50aGVzaXplci5zeW50aGVzaXplICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBpc1JldHJpZXZlcihyZXRyaWV2ZXIpIHtcbiAgICAgICAgcmV0dXJuIHJldHJpZXZlciAmJiByZXRyaWV2ZXIucmV0cmlldmUgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcGF0Y2gobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBQYXRjaGluZyBsbGFtYWluZGV4QCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgY29uc3QgY3VzdG9tTExNSW5zdHJ1bWVudGF0aW9uID0gbmV3IEN1c3RvbUxMTUluc3RydW1lbnRhdGlvbih0aGlzLl9jb25maWcsIHRoaXMuX2RpYWcsICgpID0+IHRoaXMudHJhY2VyKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLlJldHJpZXZlclF1ZXJ5RW5naW5lLnByb3RvdHlwZSwgXCJxdWVyeVwiLCBnZW5lcmljV3JhcHBlcihtb2R1bGVFeHBvcnRzLlJldHJpZXZlclF1ZXJ5RW5naW5lLm5hbWUsIFwicXVlcnlcIiwgVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuV09SS0ZMT1csICgpID0+IHRoaXMudHJhY2VyLCBzaG91bGRTZW5kUHJvbXB0cyh0aGlzLl9jb25maWcpKSk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5Db250ZXh0Q2hhdEVuZ2luZS5wcm90b3R5cGUsIFwiY2hhdFwiLCBnZW5lcmljV3JhcHBlcihtb2R1bGVFeHBvcnRzLkNvbnRleHRDaGF0RW5naW5lLm5hbWUsIFwiY2hhdFwiLCBUcmFjZWxvb3BTcGFuS2luZFZhbHVlcy5XT1JLRkxPVywgKCkgPT4gdGhpcy50cmFjZXIsIHNob3VsZFNlbmRQcm9tcHRzKHRoaXMuX2NvbmZpZykpKTtcbiAgICAgICAgLy8gT3BlbkFJQWdlbnQgaGFzIGJlZW4gbW92ZWQgdG8gQGxsYW1haW5kZXgvb3BlbmFpIHBhY2thZ2UgaW4gbmV3ZXIgdmVyc2lvbnNcbiAgICAgICAgLy8gVGhpcyBpbnN0cnVtZW50YXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNscyA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTExNKGNscy5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChjbHMucHJvdG90eXBlLCBcImNoYXRcIiwgY3VzdG9tTExNSW5zdHJ1bWVudGF0aW9uLmNoYXRXcmFwcGVyKHsgY2xhc3NOYW1lOiBjbHMubmFtZSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzRW1iZWRkaW5nKGNscy5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChjbHMucHJvdG90eXBlLCBcImdldFF1ZXJ5RW1iZWRkaW5nXCIsIGdlbmVyaWNXcmFwcGVyKGNscy5uYW1lLCBcImdldFF1ZXJ5RW1iZWRkaW5nXCIsIFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzLlRBU0ssICgpID0+IHRoaXMudHJhY2VyLCBzaG91bGRTZW5kUHJvbXB0cyh0aGlzLl9jb25maWcpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzU3ludGhlc2l6ZXIoY2xzLnByb3RvdHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwKGNscy5wcm90b3R5cGUsIFwic3ludGhlc2l6ZVwiLCBnZW5lcmljV3JhcHBlcihjbHMubmFtZSwgXCJzeW50aGVzaXplXCIsIFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzLlRBU0ssICgpID0+IHRoaXMudHJhY2VyLCBzaG91bGRTZW5kUHJvbXB0cyh0aGlzLl9jb25maWcpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzUmV0cmlldmVyKGNscy5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcChjbHMucHJvdG90eXBlLCBcInJldHJpZXZlXCIsIGdlbmVyaWNXcmFwcGVyKGNscy5uYW1lLCBcInJldHJpZXZlXCIsIFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzLlRBU0ssICgpID0+IHRoaXMudHJhY2VyLCBzaG91bGRTZW5kUHJvbXB0cyh0aGlzLl9jb25maWcpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHVucGF0Y2gobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBVbnBhdGNoaW5nIGxsYW1haW5kZXhAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5SZXRyaWV2ZXJRdWVyeUVuZ2luZS5wcm90b3R5cGUsIFwicXVlcnlcIik7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNscyA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTExNKGNscy5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGNscy5wcm90b3R5cGUsIFwiY29tcGxldGVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGNscy5wcm90b3R5cGUsIFwiY2hhdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNFbWJlZGRpbmcoY2xzLnByb3RvdHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndyYXAoY2xzLnByb3RvdHlwZSwgXCJnZXRRdWVyeUVtYmVkZGluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNTeW50aGVzaXplcihjbHMucHJvdG90eXBlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vud3JhcChjbHMucHJvdG90eXBlLCBcInN5bnRoZXNpemVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzUmV0cmlldmVyKGNscy5wcm90b3R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW53cmFwKGNscy5wcm90b3R5cGUsIFwicmV0cmlldmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHBhdGNoT3BlbkFJKG1vZHVsZUV4cG9ydHMsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgUGF0Y2hpbmcgQGxsYW1haW5kZXgvb3BlbmFpQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgLy8gSW5zdHJ1bWVudCBPcGVuQUlBZ2VudCBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMuT3BlbkFJQWdlbnQgJiYgbW9kdWxlRXhwb3J0cy5PcGVuQUlBZ2VudC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5PcGVuQUlBZ2VudC5wcm90b3R5cGUsIFwiY2hhdFwiLCBnZW5lcmljV3JhcHBlcihtb2R1bGVFeHBvcnRzLk9wZW5BSUFnZW50Lm5hbWUsIFwiYWdlbnRcIiwgVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuQUdFTlQsICgpID0+IHRoaXMudHJhY2VyLCBzaG91bGRTZW5kUHJvbXB0cyh0aGlzLl9jb25maWcpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHVucGF0Y2hPcGVuQUkobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBVbnBhdGNoaW5nIEBsbGFtYWluZGV4L29wZW5haUAke21vZHVsZVZlcnNpb259YCk7XG4gICAgICAgIC8vIFVud3JhcCBPcGVuQUlBZ2VudCBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMuT3BlbkFJQWdlbnQgJiYgbW9kdWxlRXhwb3J0cy5PcGVuQUlBZ2VudC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLk9wZW5BSUFnZW50LnByb3RvdHlwZSwgXCJjaGF0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTGxhbWFJbmRleEluc3RydW1lbnRhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwKICAgICJpbXBvcnQgeyB0cmFjZSwgY29udGV4dCwgU3BhbktpbmQsIFNwYW5TdGF0dXNDb2RlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IEluc3RydW1lbnRhdGlvbkJhc2UsIEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uLCBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uJztcbmltcG9ydCB7IFNwYW5BdHRyaWJ1dGVzLCBDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UIH0gZnJvbSAnQHRyYWNlbG9vcC9haS1zZW1hbnRpYy1jb252ZW50aW9ucyc7XG5pbXBvcnQgeyBfX2F3YWl0ZXIgfSBmcm9tICd0c2xpYic7XG5cbnZhciB2ZXJzaW9uID0gXCIwLjIxLjBcIjtcblxuLypcbiAqIENvcHlyaWdodCBUcmFjZWxvb3BcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY2xhc3MgQUlQbGF0Zm9ybUluc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tdmVydGV4YWlcIiwgdmVyc2lvbiwgY29uZmlnKTtcbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBhaVBsYXRmb3JtTW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwiQGdvb2dsZS1jbG91ZC9haXBsYXRmb3JtXCIsIFtcIj49My4xMC4wXCJdLCB0aGlzLndyYXAuYmluZCh0aGlzKSwgdGhpcy51bndyYXAuYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBhaVBsYXRmb3JtTW9kdWxlO1xuICAgIH1cbiAgICBtYW51YWxseUluc3RydW1lbnQobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYE1hbnVhbGx5IGluc3RydW1lbnRpbmcgQGdvb2dsZS1jbG91ZC9haXBsYXRmb3JtYCk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLlByZWRpY3Rpb25TZXJ2aWNlQ2xpZW50LnByb3RvdHlwZSwgXCJwcmVkaWN0XCIsIHRoaXMud3JhcHBlck1ldGhvZCgpKTtcbiAgICB9XG4gICAgd3JhcChtb2R1bGUsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgUGF0Y2hpbmcgQGdvb2dsZS1jbG91ZC9haXBsYXRmb3JtQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuUHJlZGljdGlvblNlcnZpY2VDbGllbnQucHJvdG90eXBlLCBcInByZWRpY3RcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICB1bndyYXAobW9kdWxlLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFVucGF0Y2hpbmcgQGdvb2dsZS1jbG91ZC9haXBsYXRmb3JtQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5QcmVkaWN0aW9uU2VydmljZUNsaWVudC5wcm90b3R5cGUsIFwicHJlZGljdFwiKTtcbiAgICB9XG4gICAgd3JhcHBlck1ldGhvZCgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLl9zdGFydFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LndpdGgoZXhlY0NvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZGlhZy5lcnJvcihcIkVycm9yIGluIFZlcnRleEFJUGxhdGZvcm0gaW5zdHJ1bWVudGF0aW9uXCIsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSBwbHVnaW4uX3dyYXBQcm9taXNlKHNwYW4sIGV4ZWNQcm9taXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5iaW5kKGV4ZWNDb250ZXh0LCB3cmFwcGVkUHJvbWlzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfc3RhcnRTcGFuKHsgcGFyYW1zLCB9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tLCBfbywgX3AsIF9xLCBfciwgX3MsIF90LCBfdSwgX3YsIF93LCBfeCwgX3ksIF96LCBfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSwgXzEwLCBfMTEsIF8xMiwgXzEzLCBfMTQsIF8xNTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNXTogXCJHb29nbGVcIixcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFXTogXCJjb21wbGV0aW9uXCIsXG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmVuZHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gcGFyYW1zLmVuZHBvaW50LnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NT0RFTF0gPSBtb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUxdID0gbW9kZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKF9iID0gKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhcmFtZXRlcnMuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWVsZHMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5tYXhPdXRwdXRUb2tlbnMubnVtYmVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTUFYX1RPS0VOU10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZCA9IChfYyA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wYXJhbWV0ZXJzLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZmllbGRzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QubWF4T3V0cHV0VG9rZW5zLm51bWJlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoX2YgPSAoX2UgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMucGFyYW1ldGVycy5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmZpZWxkcykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnRlbXBlcmF0dXJlLm51bWJlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RFTVBFUkFUVVJFXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9oID0gKF9nID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhcmFtZXRlcnMuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5maWVsZHMpID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC50ZW1wZXJhdHVyZS5udW1iZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKF9rID0gKF9qID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhcmFtZXRlcnMuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5maWVsZHMpID09PSBudWxsIHx8IF9rID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfay50b3BQLm51bWJlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RPUF9QXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9tID0gKF9sID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhcmFtZXRlcnMuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbC5maWVsZHMpID09PSBudWxsIHx8IF9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbS50b3BQLm51bWJlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoX3AgPSAoX28gPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMucGFyYW1ldGVycy5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX28gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vLmZpZWxkcykgPT09IG51bGwgfHwgX3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wLnRvcEsubnVtYmVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1RPUF9LXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9yID0gKF9xID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhcmFtZXRlcnMuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9xID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcS5maWVsZHMpID09PSBudWxsIHx8IF9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfci50b3BLLm51bWJlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpICYmXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pbnN0YW5jZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfcyA9IHBhcmFtcy5pbnN0YW5jZXMpID09PSBudWxsIHx8IF9zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcy5sZW5ndGgpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKF90ID0gcGFyYW1zLmluc3RhbmNlc1swXS5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90LmZpZWxkcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbXB0XCIgaW4gcGFyYW1zLmluc3RhbmNlc1swXS5zdHJ1Y3RWYWx1ZS5maWVsZHMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgoX3YgPSAoX3UgPSBwYXJhbXMuaW5zdGFuY2VzWzBdLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfdSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3UuZmllbGRzKSA9PT0gbnVsbCB8fCBfdiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3YucHJvbXB0LnN0cmluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5yb2xlYF0gPSBcInVzZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ggPSAoX3cgPSBwYXJhbXMuaW5zdGFuY2VzWzBdLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3cuZmllbGRzKSA9PT0gbnVsbCB8fCBfeCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3gucHJvbXB0LnN0cmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtcy5pbnN0YW5jZXNbMF0uc3RydWN0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgoXzIgPSAoXzEgPSAoXzAgPSAoX3ogPSAoX3kgPSBwYXJhbXMuaW5zdGFuY2VzWzBdLnN0cnVjdFZhbHVlLmZpZWxkcykgPT09IG51bGwgfHwgX3kgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF95Lm1lc3NhZ2VzLmxpc3RWYWx1ZSkgPT09IG51bGwgfHwgX3ogPT09IHZvaWQgMCA/IHZvaWQgMCA6IF96LnZhbHVlcykgPT09IG51bGwgfHwgXzAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8wWzBdLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzEuZmllbGRzKSA9PT0gbnVsbCB8fCBfMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzIuY29udGVudC5zdHJpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAucm9sZWBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXzggPSAoXzcgPSAoXzYgPSAoXzUgPSAoXzQgPSAoXzMgPSBwYXJhbXMuaW5zdGFuY2VzWzBdLnN0cnVjdFZhbHVlLmZpZWxkcykgPT09IG51bGwgfHwgXzMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8zLm1lc3NhZ2VzLmxpc3RWYWx1ZSkgPT09IG51bGwgfHwgXzQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF80LnZhbHVlcykgPT09IG51bGwgfHwgXzUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF81WzBdLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzYuZmllbGRzKSA9PT0gbnVsbCB8fCBfNyA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzcuYXV0aG9yLnN0cmluZ1ZhbHVlKSAhPT0gbnVsbCAmJiBfOCAhPT0gdm9pZCAwID8gXzggOiBcInVzZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXzEzID0gKF8xMiA9IChfMTEgPSAoXzEwID0gKF85ID0gcGFyYW1zLmluc3RhbmNlc1swXS5zdHJ1Y3RWYWx1ZS5maWVsZHMpID09PSBudWxsIHx8IF85ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfOS5tZXNzYWdlcy5saXN0VmFsdWUpID09PSBudWxsIHx8IF8xMCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzEwLnZhbHVlcykgPT09IG51bGwgfHwgXzExID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMTFbMF0uc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF8xMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzEyLmZpZWxkcykgPT09IG51bGwgfHwgXzEzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMTMuY29udGVudC5zdHJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfMTUgPSAoXzE0ID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF8xNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzE1LmNhbGwoXzE0LCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGB2ZXJ0ZXhhaS5jb21wbGV0aW9uYCwge1xuICAgICAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF93cmFwUHJvbWlzZShzcGFuLCBwcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2VuZFNwYW4oeyBzcGFuLCByZXN1bHQsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX20sIF9vLCBfcCwgX3EsIF9yLCBfcywgX3QsIF91LCBfdiwgX3csIF94LCBfeSwgX3osIF8wLCBfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIF85LCBfMTAsIF8xMSwgXzEyLCBfMTMsIF8xNCwgXzE1LCBfMTYsIF8xNywgXzE4LCBfMTksIF8yMCwgXzIxLCBfMjIsIF8yMywgXzI0LCBfMjUsIF8yNiwgXzI3LCBfMjgsIF8yOSwgXzMwLCBfMzEsIF8zMiwgXzMzLCBfMzQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0WzBdLm1vZGVsKVxuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9SRVNQT05TRV9NT0RFTCwgcmVzdWx0WzBdLm1vZGVsKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0WzBdLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKChfZyA9IChfZiA9IChfZSA9IChfZCA9IChfYyA9IChfYiA9IChfYSA9IHJlc3VsdFswXS5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZmllbGRzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9rZW5NZXRhZGF0YS5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpZWxkcykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm91dHB1dFRva2VuQ291bnQuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5maWVsZHMpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy50b3RhbFRva2Vucy5udW1iZXJWYWx1ZSkgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfQ09NUExFVElPTl9UT0tFTlMsIChfcCA9IChfbyA9IChfbSA9IChfbCA9IChfayA9IChfaiA9IChfaCA9IHJlc3VsdFswXS5tZXRhZGF0YSkgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ouZmllbGRzKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2sudG9rZW5NZXRhZGF0YS5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLmZpZWxkcykgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLm91dHB1dFRva2VuQ291bnQuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9vID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfby5maWVsZHMpID09PSBudWxsIHx8IF9wID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcC50b3RhbFRva2Vucy5udW1iZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKChfdyA9IChfdiA9IChfdSA9IChfdCA9IChfcyA9IChfciA9IChfcSA9IHJlc3VsdFswXS5tZXRhZGF0YSkgPT09IG51bGwgfHwgX3EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9xLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3IuZmllbGRzKSA9PT0gbnVsbCB8fCBfcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3MudG9rZW5NZXRhZGF0YS5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90LmZpZWxkcykgPT09IG51bGwgfHwgX3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF91LmlucHV0VG9rZW5Db3VudC5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX3YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92LmZpZWxkcykgPT09IG51bGwgfHwgX3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF93LnRvdGFsVG9rZW5zLm51bWJlclZhbHVlKSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9QUk9NUFRfVE9LRU5TLCAoXzMgPSAoXzIgPSAoXzEgPSAoXzAgPSAoX3ogPSAoX3kgPSAoX3ggPSByZXN1bHRbMF0ubWV0YWRhdGEpID09PSBudWxsIHx8IF94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfeC5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX3kgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF95LmZpZWxkcykgPT09IG51bGwgfHwgX3ogPT09IHZvaWQgMCA/IHZvaWQgMCA6IF96LnRva2VuTWV0YWRhdGEuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF8wID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMC5maWVsZHMpID09PSBudWxsIHx8IF8xID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMS5pbnB1dFRva2VuQ291bnQuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF8yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMi5maWVsZHMpID09PSBudWxsIHx8IF8zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMy50b3RhbFRva2Vucy5udW1iZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKChfMTAgPSAoXzkgPSAoXzggPSAoXzcgPSAoXzYgPSAoXzUgPSAoXzQgPSByZXN1bHRbMF0ubWV0YWRhdGEpID09PSBudWxsIHx8IF80ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfNC5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgXzUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF81LmZpZWxkcykgPT09IG51bGwgfHwgXzYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF82LnRva2VuTWV0YWRhdGEuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF83ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfNy5maWVsZHMpID09PSBudWxsIHx8IF84ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfOC5pbnB1dFRva2VuQ291bnQuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF85ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfOS5maWVsZHMpID09PSBudWxsIHx8IF8xMCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzEwLnRvdGFsVG9rZW5zLm51bWJlclZhbHVlKSA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mICgoXzE3ID0gKF8xNiA9IChfMTUgPSAoXzE0ID0gKF8xMyA9IChfMTIgPSAoXzExID0gcmVzdWx0WzBdLm1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfMTEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8xMS5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgXzEyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMTIuZmllbGRzKSA9PT0gbnVsbCB8fCBfMTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8xMy50b2tlbk1ldGFkYXRhLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8xNC5maWVsZHMpID09PSBudWxsIHx8IF8xNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzE1Lm91dHB1dFRva2VuQ291bnQuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF8xNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzE2LmZpZWxkcykgPT09IG51bGwgfHwgXzE3ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMTcudG90YWxUb2tlbnMubnVtYmVyVmFsdWUpID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOUywgKChfMjQgPSAoXzIzID0gKF8yMiA9IChfMjEgPSAoXzIwID0gKF8xOSA9IChfMTggPSByZXN1bHRbMF0ubWV0YWRhdGEpID09PSBudWxsIHx8IF8xOCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzE4LnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfMTkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8xOS5maWVsZHMpID09PSBudWxsIHx8IF8yMCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzIwLnRva2VuTWV0YWRhdGEuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF8yMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzIxLmZpZWxkcykgPT09IG51bGwgfHwgXzIyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMjIuaW5wdXRUb2tlbkNvdW50LnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfMjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8yMy5maWVsZHMpID09PSBudWxsIHx8IF8yNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzI0LnRvdGFsVG9rZW5zLm51bWJlclZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfMzEgPSAoXzMwID0gKF8yOSA9IChfMjggPSAoXzI3ID0gKF8yNiA9IChfMjUgPSByZXN1bHRbMF0ubWV0YWRhdGEpID09PSBudWxsIHx8IF8yNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzI1LnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfMjYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8yNi5maWVsZHMpID09PSBudWxsIHx8IF8yNyA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzI3LnRva2VuTWV0YWRhdGEuc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF8yOCA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzI4LmZpZWxkcykgPT09IG51bGwgfHwgXzI5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMjkub3V0cHV0VG9rZW5Db3VudC5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgXzMwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfMzAuZmllbGRzKSA9PT0gbnVsbCB8fCBfMzEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8zMS50b3RhbFRva2Vucy5udW1iZXJWYWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgICAgICAoXzMyID0gcmVzdWx0WzBdLnByZWRpY3Rpb25zKSA9PT0gbnVsbCB8fCBfMzIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8zMi5mb3JFYWNoKChwcmVkaWN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX20sIF9vLCBfcCwgX3EsIF9yLCBfcywgX3QsIF91LCBfdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKF9hID0gcHJlZGljdGlvbi5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpZWxkcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIiBpbiBwcmVkaWN0aW9uLnN0cnVjdFZhbHVlLmZpZWxkcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhKChfYyA9IChfYiA9IHByZWRpY3Rpb24uc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5maWVsZHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jb250ZW50LnN0cmluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0ucm9sZWAsIFwiYXNzaXN0YW50XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uY29udGVudGAsIChfZSA9IChfZCA9IHByZWRpY3Rpb24uc3RydWN0VmFsdWUpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maWVsZHMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5jb250ZW50LnN0cmluZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoX2YgPSBwcmVkaWN0aW9uLnN0cnVjdFZhbHVlKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuZmllbGRzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FuZGlkYXRlc1wiIGluIHByZWRpY3Rpb24uc3RydWN0VmFsdWUuZmllbGRzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISEoKF9vID0gKF9tID0gKF9sID0gKF9rID0gKF9qID0gKF9oID0gKF9nID0gcHJlZGljdGlvbi5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLmZpZWxkcykgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oLmNhbmRpZGF0ZXMubGlzdFZhbHVlKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oudmFsdWVzKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2tbMF0pID09PSBudWxsIHx8IF9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbC5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLmZpZWxkcykgPT09IG51bGwgfHwgX28gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vLmNvbnRlbnQuc3RyaW5nVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5yb2xlYCwgXCJhc3Npc3RhbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5jb250ZW50YCwgKF92ID0gKF91ID0gKF90ID0gKF9zID0gKF9yID0gKF9xID0gKF9wID0gcHJlZGljdGlvbi5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wLmZpZWxkcykgPT09IG51bGwgfHwgX3EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9xLmNhbmRpZGF0ZXMubGlzdFZhbHVlKSA9PT0gbnVsbCB8fCBfciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3IudmFsdWVzKSA9PT0gbnVsbCB8fCBfcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NbMF0pID09PSBudWxsIHx8IF90ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdC5zdHJ1Y3RWYWx1ZSkgPT09IG51bGwgfHwgX3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF91LmZpZWxkcykgPT09IG51bGwgfHwgX3YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92LmNvbnRlbnQuc3RyaW5nVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoZSk7XG4gICAgICAgICAgICAoXzM0ID0gKF8zMyA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfMzQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF8zNC5jYWxsKF8zMywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gICAgX3Nob3VsZFNlbmRQcm9tcHRzKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgPSBjb250ZXh0XG4gICAgICAgICAgICAuYWN0aXZlKClcbiAgICAgICAgICAgIC5nZXRWYWx1ZShDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UKTtcbiAgICAgICAgaWYgKGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFNob3VsZFNlbmRQcm9tcHRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHJhY2VDb250ZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5fY29uZmlnLnRyYWNlQ29udGVudFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH1cbn1cblxuY2xhc3MgVmVydGV4QUlJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcihcIkB0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLXZlcnRleGFpXCIsIHZlcnNpb24sIGNvbmZpZyk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlci5zZXRDb25maWcoY29uZmlnKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgdmVydGV4QUlNb2R1bGUgPSBuZXcgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oXCJAZ29vZ2xlLWNsb3VkL3ZlcnRleGFpXCIsIFtcIj49MS4xLjBcIl0sIHRoaXMud3JhcC5iaW5kKHRoaXMpLCB0aGlzLnVud3JhcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgcmV0dXJuIHZlcnRleEFJTW9kdWxlO1xuICAgIH1cbiAgICBtYW51YWxseUluc3RydW1lbnQobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoXCJNYW51YWxseSBpbnN0cnVtZW50aW5nIEBnb29nbGUtY2xvdWQvdmVydGV4YWlcIik7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLkdlbmVyYXRpdmVNb2RlbC5wcm90b3R5cGUsIFwiZ2VuZXJhdGVDb250ZW50U3RyZWFtXCIsIHRoaXMud3JhcHBlck1ldGhvZCgpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuR2VuZXJhdGl2ZU1vZGVsLnByb3RvdHlwZSwgXCJnZW5lcmF0ZUNvbnRlbnRcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgIH1cbiAgICB3cmFwKG1vZHVsZSwgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBQYXRjaGluZyBAZ29vZ2xlLWNsb3VkL3ZlcnRleGFpQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuR2VuZXJhdGl2ZU1vZGVsLnByb3RvdHlwZSwgXCJnZW5lcmF0ZUNvbnRlbnRTdHJlYW1cIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5HZW5lcmF0aXZlTW9kZWwucHJvdG90eXBlLCBcImdlbmVyYXRlQ29udGVudFwiLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIHVud3JhcChtb2R1bGUsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgVW5wYXRjaGluZyBAZ29vZ2xlLWNsb3VkL3ZlcnRleGFpQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5HZW5lcmF0aXZlTW9kZWwucHJvdG90eXBlLCBcImdlbmVyYXRlQ29udGVudFN0cmVhbVwiKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5HZW5lcmF0aXZlTW9kZWwucHJvdG90eXBlLCBcImdlbmVyYXRlQ29udGVudFwiKTtcbiAgICB9XG4gICAgd3JhcHBlck1ldGhvZCgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLl9zdGFydFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNDb250ZXh0ID0gdHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9IHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKGV4ZWNDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRQcm9taXNlID0gcGx1Z2luLl93cmFwUHJvbWlzZShzcGFuLCBleGVjUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgd3JhcHBlZFByb21pc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3N0YXJ0U3Bhbih7IGluc3RhbmNlLCBwYXJhbXMsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNXTogXCJHb29nbGVcIixcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFXTogXCJjb21wbGV0aW9uXCIsXG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01PREVMXSA9IGluc3RhbmNlW1wibW9kZWxcIl07XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVNQT05TRV9NT0RFTF0gPSBpbnN0YW5jZVtcIm1vZGVsXCJdO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlW1wiZ2VuZXJhdGlvbkNvbmZpZ1wiXSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTUFYX1RPS0VOU10gPVxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtcImdlbmVyYXRpb25Db25maWdcIl0ubWF4X291dHB1dF90b2tlbnM7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV0gPVxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtcImdlbmVyYXRpb25Db25maWdcIl0udGVtcGVyYXR1cmU7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UT1BfUF0gPVxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtcImdlbmVyYXRpb25Db25maWdcIl0udG9wX3A7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fVE9QX0tdID1cbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbXCJnZW5lcmF0aW9uQ29uZmlnXCJdLnRvcF9rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkgJiYgXCJjb250ZW50c1wiIGluIHBhcmFtcykge1xuICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VbXCJzeXN0ZW1JbnN0cnVjdGlvblwiXSkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2l9LnJvbGVgXSA9IFwic3lzdGVtXCI7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aX0uY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdFBhcnRzRGF0YShpbnN0YW5jZVtcInN5c3RlbUluc3RydWN0aW9uXCJdLnBhcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXMuY29udGVudHMuZm9yRWFjaCgoY29udGVudCwgaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aSArIGp9LnJvbGVgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBjb250ZW50LnJvbGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwidXNlclwiO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2kgKyBqfS5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0UGFydHNEYXRhKGNvbnRlbnQucGFydHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgKF9iID0gKF9hID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGB2ZXJ0ZXhhaS5jb21wbGV0aW9uYCwge1xuICAgICAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF93cmFwUHJvbWlzZShzcGFuLCBwcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUocmVzdWx0KSk7XG4gICAgICAgIH0pKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9lbmRTcGFuKF9hKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAoeyBzcGFuLCByZXN1bHQsIH0pIHtcbiAgICAgICAgICAgIHZhciBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1SZXNwb25zZSA9IHlpZWxkIHJlc3VsdC5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICBpZiAoKChfYiA9IHN0cmVhbVJlc3BvbnNlLnVzYWdlTWV0YWRhdGEpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b3RhbFRva2VuQ291bnQpICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlMsIHN0cmVhbVJlc3BvbnNlLnVzYWdlTWV0YWRhdGEudG90YWxUb2tlbkNvdW50KTtcbiAgICAgICAgICAgICAgICBpZiAoKF9jID0gc3RyZWFtUmVzcG9uc2UudXNhZ2VNZXRhZGF0YSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbmRpZGF0ZXNUb2tlbkNvdW50KVxuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfQ09NUExFVElPTl9UT0tFTlMsIHN0cmVhbVJlc3BvbnNlLnVzYWdlTWV0YWRhdGEuY2FuZGlkYXRlc1Rva2VuQ291bnQpO1xuICAgICAgICAgICAgICAgIGlmICgoX2QgPSBzdHJlYW1SZXNwb25zZS51c2FnZU1ldGFkYXRhKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QucHJvbXB0VG9rZW5Db3VudClcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1BST01QVF9UT0tFTlMsIHN0cmVhbVJlc3BvbnNlLnVzYWdlTWV0YWRhdGEucHJvbXB0VG9rZW5Db3VudCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9lID0gc3RyZWFtUmVzcG9uc2UuY2FuZGlkYXRlcykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmZvckVhY2goKGNhbmRpZGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUuZmluaXNoUmVhc29uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uZmluaXNoX3JlYXNvbmAsIGNhbmRpZGF0ZS5maW5pc2hSZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5yb2xlYCwgKF9hID0gY2FuZGlkYXRlLmNvbnRlbnQucm9sZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJhc3Npc3RhbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5jb250ZW50YCwgdGhpcy5fZm9ybWF0UGFydHNEYXRhKGNhbmRpZGF0ZS5jb250ZW50LnBhcnRzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgICAgICAoX2cgPSAoX2YgPSB0aGlzLl9jb25maWcpLmV4Y2VwdGlvbkxvZ2dlcikgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLmNhbGwoX2YsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZm9ybWF0UGFydHNEYXRhKHBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnRzXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICBpZiAocGFydC50ZXh0KVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0LnRleHQ7XG4gICAgICAgICAgICBlbHNlIGlmIChwYXJ0LmZpbGVEYXRhKVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0LmZpbGVEYXRhLmZpbGVVcmkgKyBcIi1cIiArIHBhcnQuZmlsZURhdGEubWltZVR5cGU7XG4gICAgICAgICAgICBlbHNlIGlmIChwYXJ0LmlubGluZURhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQuaW5saW5lRGF0YS5kYXRhICsgXCItXCIgKyBwYXJ0LmlubGluZURhdGEubWltZVR5cGU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIF9zaG91bGRTZW5kUHJvbXB0cygpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFNob3VsZFNlbmRQcm9tcHRzID0gY29udGV4dFxuICAgICAgICAgICAgLmFjdGl2ZSgpXG4gICAgICAgICAgICAuZ2V0VmFsdWUoQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCk7XG4gICAgICAgIGlmIChjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnRyYWNlQ29udGVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuX2NvbmZpZy50cmFjZUNvbnRlbnRcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IEFJUGxhdGZvcm1JbnN0cnVtZW50YXRpb24sIFZlcnRleEFJSW5zdHJ1bWVudGF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLAogICAgImltcG9ydCB7IF9fYXdhaXRlciwgX19hc3luY1ZhbHVlcyB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHRyYWNlLCBjb250ZXh0LCBTcGFuU3RhdHVzQ29kZSwgU3BhbktpbmQgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgSW5zdHJ1bWVudGF0aW9uQmFzZSwgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24sIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24nO1xuaW1wb3J0IHsgTExNUmVxdWVzdFR5cGVWYWx1ZXMsIFNwYW5BdHRyaWJ1dGVzLCBDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UIH0gZnJvbSAnQHRyYWNlbG9vcC9haS1zZW1hbnRpYy1jb252ZW50aW9ucyc7XG5cbnZhciB2ZXJzaW9uID0gXCIwLjIxLjBcIjtcblxuY2xhc3MgQmVkcm9ja0luc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tYmVkcm9ja1wiLCB2ZXJzaW9uLCBjb25maWcpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihcIkBhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWVcIiwgW1wiPj0zLjQ5OS4wXCJdLCB0aGlzLndyYXAuYmluZCh0aGlzKSwgdGhpcy51bndyYXAuYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIG1hbnVhbGx5SW5zdHJ1bWVudChtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgUGF0Y2hpbmcgQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSBtYW51YWxseWApO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5CZWRyb2NrUnVudGltZUNsaWVudC5wcm90b3R5cGUsIFwic2VuZFwiLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgfVxuICAgIHdyYXAobW9kdWxlLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFBhdGNoaW5nIEBhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWVAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5CZWRyb2NrUnVudGltZUNsaWVudC5wcm90b3R5cGUsIFwic2VuZFwiLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIHVud3JhcChtb2R1bGUsIG1vZHVsZVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgVW5wYXRjaGluZyBAYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5CZWRyb2NrUnVudGltZUNsaWVudC5wcm90b3R5cGUsIFwic2VuZFwiKTtcbiAgICB9XG4gICAgd3JhcHBlck1ldGhvZCgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLl9zdGFydFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LndpdGgoZXhlY0NvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZGlhZy5lcnJvcihgRXJyb3IgaW4gYmVkcm9jayBpbnN0cnVtZW50YXRpb25gLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRQcm9taXNlID0gcGx1Z2luLl93cmFwUHJvbWlzZShzcGFuLCBleGVjUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgd3JhcHBlZFByb21pc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3dyYXBQcm9taXNlKHNwYW4sIHByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgIHNwYW4sXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gcmVzb2x2ZShyZXN1bHQpKTtcbiAgICAgICAgfSkpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3N0YXJ0U3Bhbih7IHBhcmFtcywgfSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwYXJhbXMuaW5wdXQ7XG4gICAgICAgICAgICBjb25zdCB7IG1vZGVsVmVuZG9yLCBtb2RlbCB9ID0gdGhpcy5fZXh0cmFjdFZlbmRvckFuZE1vZGVsKGlucHV0Lm1vZGVsSWQgfHwgXCJcIik7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNXTogXCJBV1NcIixcbiAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTU9ERUxdOiBtb2RlbCxcbiAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFU1BPTlNFX01PREVMXTogaW5wdXQubW9kZWxJZCxcbiAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfVFlQRV06IExMTVJlcXVlc3RUeXBlVmFsdWVzLkNPTVBMRVRJT04sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ib2R5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBKU09OLnBhcnNlKGlucHV0LmJvZHkpO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGF0dHJpYnV0ZXMpLCB0aGlzLl9zZXRSZXF1ZXN0QXR0cmlidXRlcyhtb2RlbFZlbmRvciwgcmVxdWVzdEJvZHkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2VyLnN0YXJ0U3BhbihgYmVkcm9jay5jb21wbGV0aW9uYCwge1xuICAgICAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9lbmRTcGFuKF9hKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAoeyBzcGFuLCByZXN1bHQsIH0pIHtcbiAgICAgICAgICAgIHZhciBfYiwgZV8xLCBfYywgX2Q7XG4gICAgICAgICAgICB2YXIgX2UsIF9mLCBfZztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKFwiYm9keVwiIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gXCJhdHRyaWJ1dGVzXCIgaW4gc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzcGFuW1wiYXR0cmlidXRlc1wiXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNwYW5BdHRyaWJ1dGVzLkxMTV9TWVNURU0gaW4gYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxJZCA9IGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFU1BPTlNFX01PREVMXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbW9kZWxWZW5kb3IsIG1vZGVsIH0gPSB0aGlzLl9leHRyYWN0VmVuZG9yQW5kTW9kZWwobW9kZWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUwsIG1vZGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdC5ib2R5IGluc3RhbmNlb2YgT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd1JlcyA9IHJlc3VsdC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJlYW1lZENvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9oID0gdHJ1ZSwgcmF3UmVzXzEgPSBfX2FzeW5jVmFsdWVzKHJhd1JlcyksIHJhd1Jlc18xXzE7IHJhd1Jlc18xXzEgPSB5aWVsZCByYXdSZXNfMS5uZXh0KCksIF9iID0gcmF3UmVzXzFfMS5kb25lLCAhX2I7IF9oID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSByYXdSZXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gX2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgSlNPTiBTdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoKF9lID0gdmFsdWUuY2h1bmspID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5ieXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgSlNPTiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcImFtYXpvbi1iZWRyb2NrLWludm9jYXRpb25NZXRyaWNzXCIgaW4gcGFyc2VkUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOUywgcGFyc2VkUmVzcG9uc2VbXCJhbWF6b24tYmVkcm9jay1pbnZvY2F0aW9uTWV0cmljc1wiXVtcImlucHV0VG9rZW5Db3VudFwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TLCBwYXJzZWRSZXNwb25zZVtcImFtYXpvbi1iZWRyb2NrLWludm9jYXRpb25NZXRyaWNzXCJdW1wib3V0cHV0VG9rZW5Db3VudFwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOUywgcGFyc2VkUmVzcG9uc2VbXCJhbWF6b24tYmVkcm9jay1pbnZvY2F0aW9uTWV0cmljc1wiXVtcImlucHV0VG9rZW5Db3VudFwiXSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFJlc3BvbnNlW1wiYW1hem9uLWJlZHJvY2staW52b2NhdGlvbk1ldHJpY3NcIl1bXCJvdXRwdXRUb2tlbkNvdW50XCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLl9zZXRSZXNwb25zZUF0dHJpYnV0ZXMobW9kZWxWZW5kb3IsIHBhcnNlZFJlc3BvbnNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICEgTk9URTogVGhpcyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgYWx3YXlzIGhhdmUgYWxsIHN0cmVhbWVkIGNodW5rc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgbG9jYWwgdmFsdWUgd2l0aCBhdHRyaWJ1dGUgdmFsdWUgdGhhdCB3YXMgc2V0IGJ5IF9zZXRSZXNwb25zZUF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1lZENvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VBdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5jb250ZW50YF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtYXNzaWduIHRoZSBuZXcgdmFsdWUgdG8gcmVzcG9uc2VBdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VBdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZUF0dHJpYnV0ZXMpLCB7IFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGBdOiBzdHJlYW1lZENvbnRlbnQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMocmVzcG9uc2VBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaCAmJiAhX2IgJiYgKF9jID0gcmF3UmVzXzEucmV0dXJuKSkgeWllbGQgX2MuY2FsbChyYXdSZXNfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5ib2R5IGluc3RhbmNlb2YgT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBpdCB0byBhIEpTT04gU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNvblN0cmluZyA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShyZXN1bHQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIEpTT04gc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzcG9uc2UgPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQXR0cmlidXRlcyA9IHRoaXMuX3NldFJlc3BvbnNlQXR0cmlidXRlcyhtb2RlbFZlbmRvciwgcGFyc2VkUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyhyZXNwb25zZUF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgICAgIChfZyA9IChfZiA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2cuY2FsbChfZiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zZXRSZXF1ZXN0QXR0cmlidXRlcyh2ZW5kb3IsIHJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHN3aXRjaCAodmVuZG9yKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWkyMVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfVE9QX1BdOiByZXF1ZXN0Qm9keVtcInRvcFBcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV06IHJlcXVlc3RCb2R5W1widGVtcGVyYXR1cmVcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NQVhfVE9LRU5TXTogcmVxdWVzdEJvZHlbXCJtYXhUb2tlbnNcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fUFJFU0VOQ0VfUEVOQUxUWV06IHJlcXVlc3RCb2R5W1wicHJlc2VuY2VQZW5hbHR5XCJdW1wic2NhbGVcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fRlJFUVVFTkNZX1BFTkFMVFldOiByZXF1ZXN0Qm9keVtcImZyZXF1ZW5jeVBlbmFsdHlcIl1bXCJzY2FsZVwiXSB9LCAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5yb2xlYF06IFwidXNlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLmNvbnRlbnRgXTogcmVxdWVzdEJvZHlbXCJwcm9tcHRcIl0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImFtYXpvblwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfVE9QX1BdOiByZXF1ZXN0Qm9keVtcInRleHRHZW5lcmF0aW9uQ29uZmlnXCJdW1widG9wUFwiXSwgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RFTVBFUkFUVVJFXTogcmVxdWVzdEJvZHlbXCJ0ZXh0R2VuZXJhdGlvbkNvbmZpZ1wiXVtcInRlbXBlcmF0dXJlXCJdLCBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTUFYX1RPS0VOU106IHJlcXVlc3RCb2R5W1widGV4dEdlbmVyYXRpb25Db25maWdcIl1bXCJtYXhUb2tlbkNvdW50XCJdIH0sICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXTogXCJ1c2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdOiByZXF1ZXN0Qm9keVtcImlucHV0VGV4dFwiXSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiYW50aHJvcGljXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlQXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RPUF9QXTogcmVxdWVzdEJvZHlbXCJ0b3BfcFwiXSxcbiAgICAgICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9UT1BfS106IHJlcXVlc3RCb2R5W1widG9wX2tcIl0sXG4gICAgICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV06IHJlcXVlc3RCb2R5W1widGVtcGVyYXR1cmVcIl0sXG4gICAgICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NQVhfVE9LRU5TXTogcmVxdWVzdEJvZHlbXCJtYXhfdG9rZW5zX3RvX3NhbXBsZVwiXSB8fCByZXF1ZXN0Qm9keVtcIm1heF90b2tlbnNcIl0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbmV3IG1lc3NhZ2VzIEFQSSBmb3JtYXQgKHVzZWQgYnkgbGFuZ2NoYWluKVxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keVtcIm1lc3NhZ2VzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdEF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHlbXCJtZXNzYWdlc1wiXS5mb3JFYWNoKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0QXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtpbmRleH0ucm9sZWBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnJvbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRBdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2luZGV4fS5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtZXNzYWdlLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUF0dHJpYnV0ZXMpLCBwcm9tcHRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGxlZ2FjeSBwcm9tcHQgZm9ybWF0XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5W1wicHJvbXB0XCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VBdHRyaWJ1dGVzKSwgeyBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAucm9sZWBdOiBcInVzZXJcIiwgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLmNvbnRlbnRgXTogcmVxdWVzdEJvZHlbXCJwcm9tcHRcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9ybWF0IGlzIHJlbW92aW5nIHdoZW4gd2UgYXJlIHNldHRpbmcgc3BhbiBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcIlxcblxcbkh1bWFuOlwiLCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXFxuQXNzaXN0YW50OlwiLCBcIlwiKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImNvaGVyZVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oeyBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfVE9QX1BdOiByZXF1ZXN0Qm9keVtcInBcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fVE9QX0tdOiByZXF1ZXN0Qm9keVtcImtcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV06IHJlcXVlc3RCb2R5W1widGVtcGVyYXR1cmVcIl0sIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NQVhfVE9LRU5TXTogcmVxdWVzdEJvZHlbXCJtYXhfdG9rZW5zXCJdIH0sICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXTogXCJ1c2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdOiByZXF1ZXN0Qm9keVtcIm1lc3NhZ2VcIl0gfHwgcmVxdWVzdEJvZHlbXCJwcm9tcHRcIl0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RPUF9QXTogcmVxdWVzdEJvZHlbXCJ0b3BfcFwiXSwgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RFTVBFUkFUVVJFXTogcmVxdWVzdEJvZHlbXCJ0ZW1wZXJhdHVyZVwiXSwgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01BWF9UT0tFTlNdOiByZXF1ZXN0Qm9keVtcIm1heF9nZW5fbGVuXCJdIH0sICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXTogXCJ1c2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdOiByZXF1ZXN0Qm9keVtcInByb21wdFwiXSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc2V0UmVzcG9uc2VBdHRyaWJ1dGVzKHZlbmRvciwgcmVzcG9uc2UsIGlzU3RyZWFtID0gZmFsc2UpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBzd2l0Y2ggKHZlbmRvcikge1xuICAgICAgICAgICAgY2FzZSBcImFpMjFcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5maW5pc2hfcmVhc29uYF06IHJlc3BvbnNlW1wiY29tcGxldGlvbnNcIl1bMF1bXCJmaW5pc2hSZWFzb25cIl1bXCJyZWFzb25cIl0sIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAucm9sZWBdOiBcImFzc2lzdGFudFwiIH0sICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5jb250ZW50YF06IHJlc3BvbnNlW1wiY29tcGxldGlvbnNcIl1bMF1bXCJkYXRhXCJdW1widGV4dFwiXSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiYW1hem9uXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuZmluaXNoX3JlYXNvbmBdOiBpc1N0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNwb25zZVtcImNvbXBsZXRpb25SZWFzb25cIl1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2VbXCJyZXN1bHRzXCJdWzBdW1wiY29tcGxldGlvblJlYXNvblwiXSwgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5yb2xlYF06IFwiYXNzaXN0YW50XCIsIFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOU106IHJlc3BvbnNlW1wiaW5wdXRUZXh0VG9rZW5Db3VudFwiXSwgW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU106IGlzU3RyZWFtXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc3BvbnNlW1widG90YWxPdXRwdXRUZXh0VG9rZW5Db3VudFwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXNwb25zZVtcInJlc3VsdHNcIl1bMF1bXCJ0b2tlbkNvdW50XCJdLCBbU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOU106IGlzU3RyZWFtXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc3BvbnNlW1wiaW5wdXRUZXh0VG9rZW5Db3VudFwiXSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJ0b3RhbE91dHB1dFRleHRUb2tlbkNvdW50XCJdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3BvbnNlW1wiaW5wdXRUZXh0VG9rZW5Db3VudFwiXSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJyZXN1bHRzXCJdWzBdW1widG9rZW5Db3VudFwiXSB9LCAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGBdOiBpc1N0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzcG9uc2VbXCJvdXRwdXRUZXh0XCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXNwb25zZVtcInJlc3VsdHNcIl1bMF1bXCJvdXRwdXRUZXh0XCJdLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJhbnRocm9waWNcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VBdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmZpbmlzaF9yZWFzb25gXTogcmVzcG9uc2VbXCJzdG9wX3JlYXNvblwiXSxcbiAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5yb2xlYF06IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbmV3IG1lc3NhZ2VzIEFQSSBmb3JtYXQgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJjb250ZW50XCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlW1wiY29udGVudFwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzcG9uc2VbXCJjb250ZW50XCJdLm1hcCgoYykgPT4gYy50ZXh0IHx8IGMpLmpvaW4oXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2VbXCJjb250ZW50XCJdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQXR0cmlidXRlcyksIHsgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5jb250ZW50YF06IGNvbnRlbnQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBsZWdhY3kgY29tcGxldGlvbiBmb3JtYXRcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJjb21wbGV0aW9uXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJhc2VBdHRyaWJ1dGVzKSwgeyBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgXTogcmVzcG9uc2VbXCJjb21wbGV0aW9uXCJdIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZUF0dHJpYnV0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiY29oZXJlXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlQXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24oeyBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmZpbmlzaF9yZWFzb25gXTogKF9iID0gKF9hID0gcmVzcG9uc2VbXCJnZW5lcmF0aW9uc1wiXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbXCJmaW5pc2hfcmVhc29uXCJdLCBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnJvbGVgXTogXCJhc3Npc3RhbnRcIiB9LCAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGBdOiAoX2QgPSAoX2MgPSByZXNwb25zZVtcImdlbmVyYXRpb25zXCJdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NbMF0pID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZFtcInRleHRcIl0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7fSkpO1xuICAgICAgICAgICAgICAgIC8vIEFkZCB0b2tlbiB1c2FnZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJtZXRhXCJdICYmIHJlc3BvbnNlW1wibWV0YVwiXVtcImJpbGxlZF91bml0c1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiaWxsZWRVbml0cyA9IHJlc3BvbnNlW1wibWV0YVwiXVtcImJpbGxlZF91bml0c1wiXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUF0dHJpYnV0ZXMpLCB7IFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOU106IGJpbGxlZFVuaXRzW1wiaW5wdXRfdG9rZW5zXCJdLCBbU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TXTogYmlsbGVkVW5pdHNbXCJvdXRwdXRfdG9rZW5zXCJdLCBbU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOU106IChiaWxsZWRVbml0c1tcImlucHV0X3Rva2Vuc1wiXSB8fCAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpbGxlZFVuaXRzW1wib3V0cHV0X3Rva2Vuc1wiXSB8fCAwKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5maW5pc2hfcmVhc29uYF06IHJlc3BvbnNlW1wic3RvcF9yZWFzb25cIl0sIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAucm9sZWBdOiBcImFzc2lzdGFudFwiLCBbU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1BST01QVF9UT0tFTlNdOiByZXNwb25zZVtcInByb21wdF90b2tlbl9jb3VudFwiXSwgW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU106IHJlc3BvbnNlW1wiZ2VuZXJhdGlvbl90b2tlbl9jb3VudFwiXSwgW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlNdOiByZXNwb25zZVtcInByb21wdF90b2tlbl9jb3VudFwiXSArIHJlc3BvbnNlW1wiZ2VuZXJhdGlvbl90b2tlbl9jb3VudFwiXSB9LCAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGBdOiByZXNwb25zZVtcImdlbmVyYXRpb25cIl0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Nob3VsZFNlbmRQcm9tcHRzKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgPSBjb250ZXh0XG4gICAgICAgICAgICAuYWN0aXZlKClcbiAgICAgICAgICAgIC5nZXRWYWx1ZShDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UKTtcbiAgICAgICAgaWYgKGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFNob3VsZFNlbmRQcm9tcHRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHJhY2VDb250ZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5fY29uZmlnLnRyYWNlQ29udGVudFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH1cbiAgICBfZXh0cmFjdFZlbmRvckFuZE1vZGVsKG1vZGVsSWQpIHtcbiAgICAgICAgaWYgKCFtb2RlbElkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlbFZlbmRvcjogXCJcIiwgbW9kZWw6IFwiXCIgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0cyA9IG1vZGVsSWQuc3BsaXQoXCIuXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kZWxWZW5kb3I6IHBhcnRzWzBdIHx8IFwiXCIsXG4gICAgICAgICAgICBtb2RlbDogcGFydHNbMV0gfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IEJlZHJvY2tJbnN0cnVtZW50YXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2FzeW5jVmFsdWVzIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdHJhY2UsIGNvbnRleHQsIFNwYW5TdGF0dXNDb2RlLCBTcGFuS2luZCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25CYXNlLCBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiwgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XG5pbXBvcnQgeyBTcGFuQXR0cmlidXRlcywgTExNUmVxdWVzdFR5cGVWYWx1ZXMsIENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQgfSBmcm9tICdAdHJhY2Vsb29wL2FpLXNlbWFudGljLWNvbnZlbnRpb25zJztcblxudmFyIHZlcnNpb24gPSBcIjAuMjEuMFwiO1xuXG5jbGFzcyBDb2hlcmVJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcihcIkB0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWNvaGVyZVwiLCB2ZXJzaW9uLCBjb25maWcpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihcImNvaGVyZS1haVwiLCBbXCI+PTcuNy41XCJdLCB0aGlzLndyYXAuYmluZCh0aGlzKSwgdGhpcy51bndyYXAuYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIG1hbnVhbGx5SW5zdHJ1bWVudChtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgTWFudWFsbHkgcGF0Y2hpbmcgY29oZXJlLWFpYCk7XG4gICAgICAgIHRoaXMud3JhcChtb2R1bGUpO1xuICAgIH1cbiAgICB3cmFwKG1vZHVsZSwgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBQYXRjaGluZyBjb2hlcmUtYWlAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5Db2hlcmVDbGllbnQucHJvdG90eXBlLCBcImdlbmVyYXRlXCIsIHRoaXMud3JhcHBlck1ldGhvZChcImNvbXBsZXRpb25cIiwgZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuQ29oZXJlQ2xpZW50LnByb3RvdHlwZSwgXCJnZW5lcmF0ZVN0cmVhbVwiLCB0aGlzLndyYXBwZXJNZXRob2QoXCJjb21wbGV0aW9uXCIsIHRydWUpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuQ29oZXJlQ2xpZW50LnByb3RvdHlwZSwgXCJjaGF0XCIsIHRoaXMud3JhcHBlck1ldGhvZChcImNoYXRcIiwgZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuQ29oZXJlQ2xpZW50LnByb3RvdHlwZSwgXCJjaGF0U3RyZWFtXCIsIHRoaXMud3JhcHBlck1ldGhvZChcImNoYXRcIiwgdHJ1ZSkpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5Db2hlcmVDbGllbnQucHJvdG90eXBlLCBcInJlcmFua1wiLCB0aGlzLndyYXBwZXJNZXRob2QoXCJyZXJhbmtcIiwgZmFsc2UpKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG4gICAgdW53cmFwKG1vZHVsZSwgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBVbnBhdGNoaW5nIEBjb2hlcmUtYWlAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlLkNvaGVyZUNsaWVudC5wcm90b3R5cGUsIFwiZ2VuZXJhdGVTdHJlYW1cIik7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGUuQ29oZXJlQ2xpZW50LnByb3RvdHlwZSwgXCJjaGF0XCIpO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlLkNvaGVyZUNsaWVudC5wcm90b3R5cGUsIFwiY2hhdFN0cmVhbVwiKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5Db2hlcmVDbGllbnQucHJvdG90eXBlLCBcInJlcmFua1wiKTtcbiAgICB9XG4gICAgd3JhcHBlck1ldGhvZCh0eXBlLCBzdHJlYW1pbmcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLl9zdGFydFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LndpdGgoZXhlY0NvbnRleHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZGlhZy5lcnJvcihcIkVycm9yIGluIGNvaGVyZSBpbnN0cnVtZW50YXRpb25cIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkUHJvbWlzZSA9IHBsdWdpbi5fd3JhcFByb21pc2UodHlwZSwgc3RyZWFtaW5nLCBzcGFuLCBleGVjUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgd3JhcHBlZFByb21pc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3dyYXBQcm9taXNlKHR5cGUsIHN0cmVhbWluZywgc3BhbiwgcHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgYXdhaXRlZFJlc3VsdCA9IHlpZWxkIHJlc3VsdDtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNvbXBsZXRpb25cIiAmJiBzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtaW5nLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6ICh5aWVsZCBhd2FpdGVkUmVzdWx0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiY29tcGxldGlvblwiICYmICFzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtaW5nLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBcImNoYXRcIiAmJiBzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtaW5nLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6ICh5aWVsZCBhd2FpdGVkUmVzdWx0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiY2hhdFwiICYmICFzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtaW5nLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBcInJlcmFua1wiICYmICFzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCB0aGlzLl9lbmRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtaW5nLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUocmVzdWx0KSk7XG4gICAgICAgIH0pKVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zdGFydFNwYW4oeyBwYXJhbXMsIHR5cGUsIH0pIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaDtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNXTogXCJDb2hlcmVcIixcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFXTogdGhpcy5fZ2V0TGxtUmVxdWVzdFR5cGVCeU1ldGhvZCh0eXBlKSxcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gKF9hID0gcGFyYW1zLm1vZGVsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcImNvbW1hbmRcIjtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTU9ERUxdID0gbW9kZWw7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01PREVMXSA9IG1vZGVsO1xuICAgICAgICAgICAgaWYgKCEoXCJxdWVyeVwiIGluIHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RPUF9QXSA9IHBhcmFtcy5wO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1RPUF9LXSA9IHBhcmFtcy5rO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfVEVNUEVSQVRVUkVdID0gcGFyYW1zLnRlbXBlcmF0dXJlO1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX0ZSRVFVRU5DWV9QRU5BTFRZXSA9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcmVxdWVuY3lQZW5hbHR5O1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX1BSRVNFTkNFX1BFTkFMVFldID1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnByZXNlbmNlUGVuYWx0eTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01BWF9UT0tFTlNdID0gcGFyYW1zLm1heFRva2VucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJ0b3BOXCJdID0gcGFyYW1zW1widG9wTlwiXTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1wibWF4Q2h1bmtzUGVyRG9jXCJdID0gcGFyYW1zW1wibWF4Q2h1bmtzUGVyRG9jXCJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJjb21wbGV0aW9uXCIgJiYgXCJwcm9tcHRcIiBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5yb2xlYF0gPSBcInVzZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC51c2VyYF0gPSBwYXJhbXMucHJvbXB0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBcImNoYXRcIiAmJiBcIm1lc3NhZ2VcIiBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9iID0gcGFyYW1zLmNoYXRIaXN0b3J5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZm9yRWFjaCgobXNnLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtpbmRleH0ucm9sZWBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cucm9sZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cucm9sZSAhPT0gXCJUT09MXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2luZGV4fS5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7KF9kID0gKF9jID0gcGFyYW1zLmNoYXRIaXN0b3J5KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAwfS5yb2xlYF0gPSBcInVzZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHsoX2YgPSAoX2UgPSBwYXJhbXMuY2hhdEhpc3RvcnkpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5sZW5ndGgpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IDB9LnVzZXJgXSA9IHBhcmFtcy5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSBcInJlcmFua1wiICYmIFwicXVlcnlcIiBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5yb2xlYF0gPSBcInVzZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC51c2VyYF0gPSBwYXJhbXMucXVlcnk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb2N1bWVudHMuZm9yRWFjaCgoZG9jLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgZG9jdW1lbnRzLiR7aW5kZXh9LmluZGV4YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkb2MgPT09IFwic3RyaW5nXCIgPyBkb2MgOiBkb2MudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgKF9oID0gKF9nID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC5jYWxsKF9nLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGBjb2hlcmUuJHt0eXBlfWAsIHtcbiAgICAgICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZW5kU3BhbihfYSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHsgdHlwZSwgc3Bhbiwgc3RyZWFtaW5nLCByZXN1bHQsIH0pIHtcbiAgICAgICAgICAgIHZhciBfYiwgcmVzdWx0XzEsIHJlc3VsdF8xXzEsIF9jLCByZXN1bHRfMiwgcmVzdWx0XzJfMTtcbiAgICAgICAgICAgIHZhciBfZCwgZV8xLCBfZSwgX2YsIF9nLCBlXzIsIF9oLCBfajtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNvbXBsZXRpb25cIikge1xuICAgICAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX2IgPSB0cnVlLCByZXN1bHRfMSA9IF9fYXN5bmNWYWx1ZXMocmVzdWx0KTsgcmVzdWx0XzFfMSA9IHlpZWxkIHJlc3VsdF8xLm5leHQoKSwgX2QgPSByZXN1bHRfMV8xLmRvbmUsICFfZDsgX2IgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2YgPSByZXN1bHRfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IF9mO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmV2ZW50VHlwZSA9PT0gXCJzdHJlYW0tZW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0UmVzcG9uc2VTcGFuRm9yR2VuZXJhdGUoc3BhbiwgbWVzc2FnZS5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9iICYmICFfZCAmJiAoX2UgPSByZXN1bHRfMS5yZXR1cm4pKSB5aWVsZCBfZS5jYWxsKHJlc3VsdF8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImdlbmVyYXRpb25zXCIgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFJlc3BvbnNlU3BhbkZvckdlbmVyYXRlKHNwYW4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJjaGF0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKF9jID0gdHJ1ZSwgcmVzdWx0XzIgPSBfX2FzeW5jVmFsdWVzKHJlc3VsdCk7IHJlc3VsdF8yXzEgPSB5aWVsZCByZXN1bHRfMi5uZXh0KCksIF9nID0gcmVzdWx0XzJfMS5kb25lLCAhX2c7IF9jID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9qID0gcmVzdWx0XzJfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBfajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5ldmVudFR5cGUgPT09IFwic3RyZWFtLWVuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFJlc3BvbnNlU3BhbkZvckNoYXQoc3BhbiwgbWVzc2FnZS5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9jICYmICFfZyAmJiAoX2ggPSByZXN1bHRfMi5yZXR1cm4pKSB5aWVsZCBfaC5jYWxsKHJlc3VsdF8yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInRleHRcIiBpbiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0UmVzcG9uc2VTcGFuRm9yQ2hhdChzcGFuLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwicmVyYW5rXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJyZXN1bHRzXCIgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFJlc3BvbnNlU3BhbkZvclJlcmFuayhzcGFuLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NldFJlc3BvbnNlU3BhbkZvclJlcmFuayhzcGFuLCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoXCJtZXRhXCIgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCgoX2IgPSAoX2EgPSByZXN1bHQubWV0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJpbGxlZFVuaXRzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VhcmNoVW5pdHMpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOUywgKF9kID0gKF9jID0gcmVzdWx0Lm1ldGEpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5iaWxsZWRVbml0cykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLnNlYXJjaFVuaXRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdHMuZm9yRWFjaCgoZWFjaCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aWR4fS5yZWxldmFuY2VTY29yZWAsIGVhY2gucmVsZXZhbmNlU2NvcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVhY2guZG9jdW1lbnQgJiYgKChfYSA9IGVhY2guZG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpZHh9LmNvbnRlbnRgLCBlYWNoLmRvY3VtZW50LnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXN1bHRzLmZvckVhY2goKGVhY2gsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2lkeH0uY29udGVudGAsIGVhY2guaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2lkeH0ucmVsZXZhbmNlU2NvcmVgLCBlYWNoLnJlbGV2YW5jZVNjb3JlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgKF9mID0gKF9lID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jYWxsKF9lLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc2V0UmVzcG9uc2VTcGFuRm9yQ2hhdChzcGFuLCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChcInRva2VuX2NvdW50XCIgaW4gcmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudG9rZW5fY291bnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRva2VuX2NvdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIFwicHJvbXB0X3Rva2Vuc1wiIGluIHJlc3VsdC50b2tlbl9jb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0LnRva2VuX2NvdW50LnByb21wdF90b2tlbnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1BST01QVF9UT0tFTlMsIChfYSA9IHJlc3VsdC50b2tlbl9jb3VudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnByb21wdF90b2tlbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRva2VuX2NvdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIFwicmVzcG9uc2VfdG9rZW5zXCIgaW4gcmVzdWx0LnRva2VuX2NvdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQudG9rZW5fY291bnQucmVzcG9uc2VfdG9rZW5zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOUywgKF9iID0gcmVzdWx0LnRva2VuX2NvdW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVzcG9uc2VfdG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50b2tlbl9jb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBcInRvdGFsX3Rva2Vuc1wiIGluIHJlc3VsdC50b2tlbl9jb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0LnRva2VuX2NvdW50LnRvdGFsX3Rva2VucyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfVE9UQUxfVE9LRU5TLCAoX2MgPSByZXN1bHQudG9rZW5fY291bnQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b3RhbF90b2tlbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRTZW5kUHJvbXB0cygpKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnJvbGVgLCBcImFzc2lzdGFudFwiKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGAsIHJlc3VsdC50ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoKF9kID0gcmVzdWx0LnNlYXJjaFF1ZXJpZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZFswXS50ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5zZWFyY2hRdWVyeWAsIChfZSA9IHJlc3VsdC5zZWFyY2hRdWVyaWVzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2VbMF0udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoX2YgPSByZXN1bHQuc2VhcmNoUmVzdWx0cykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2VhcmNoUmVzdWx0cy5mb3JFYWNoKChzZWFyY2hSZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0LnNlYXJjaFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnNlYXJjaFJlc3VsdC4ke2luZGV4fS50ZXh0YCwgc2VhcmNoUmVzdWx0LnNlYXJjaFF1ZXJ5LnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnNlYXJjaFJlc3VsdC4ke2luZGV4fS5jb25uZWN0b3JgLCBzZWFyY2hSZXN1bHQuY29ubmVjdG9yLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiZmluaXNoUmVhc29uXCIgaW4gcmVzdWx0ICYmIHR5cGVvZiByZXN1bHQuZmluaXNoUmVhc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmZpbmlzaF9yZWFzb25gLCByZXN1bHQuZmluaXNoUmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfaCA9IChfZyA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2guY2FsbChfZywgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3NldFJlc3BvbnNlU3BhbkZvckdlbmVyYXRlKHNwYW4sIHJlc3VsdCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgXCJtZXRhXCIgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoKF9iID0gKF9hID0gcmVzdWx0Lm1ldGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5iaWxsZWRVbml0cykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlucHV0VG9rZW5zKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOUywgKF9kID0gKF9jID0gcmVzdWx0Lm1ldGEpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5iaWxsZWRVbml0cykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmlucHV0VG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoKF9mID0gKF9lID0gcmVzdWx0Lm1ldGEpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5iaWxsZWRVbml0cykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLm91dHB1dFRva2VucykgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TLCAoX2ggPSAoX2cgPSByZXN1bHQubWV0YSkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLmJpbGxlZFVuaXRzKSA9PT0gbnVsbCB8fCBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2gub3V0cHV0VG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoKF9rID0gKF9qID0gcmVzdWx0Lm1ldGEpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5iaWxsZWRVbml0cykgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmlucHV0VG9rZW5zKSA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgKChfbSA9IChfbCA9IHJlc3VsdC5tZXRhKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuYmlsbGVkVW5pdHMpID09PSBudWxsIHx8IF9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbS5vdXRwdXRUb2tlbnMpID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlMsICgoX3AgPSAoX28gPSByZXN1bHQubWV0YSkgPT09IG51bGwgfHwgX28gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vLmJpbGxlZFVuaXRzKSA9PT0gbnVsbCB8fCBfcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3AuaW5wdXRUb2tlbnMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICgoX3IgPSAoX3EgPSByZXN1bHQubWV0YSkgPT09IG51bGwgfHwgX3EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9xLmJpbGxlZFVuaXRzKSA9PT0gbnVsbCB8fCBfciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Iub3V0cHV0VG9rZW5zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNlbmRQcm9tcHRzKCkgJiYgcmVzdWx0LmdlbmVyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnJvbGVgLCBcImFzc2lzdGFudFwiKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuY29udGVudGAsIHJlc3VsdC5nZW5lcmF0aW9uc1swXS50ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGlvbnMgJiZcbiAgICAgICAgICAgICAgICBcImZpbmlzaF9yZWFzb25cIiBpbiByZXN1bHQuZ2VuZXJhdGlvbnNbMF0gJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0LmdlbmVyYXRpb25zWzBdLmZpbmlzaF9yZWFzb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAuZmluaXNoX3JlYXNvbmAsIHJlc3VsdC5nZW5lcmF0aW9uc1swXS5maW5pc2hfcmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGlvbnMgJiZcbiAgICAgICAgICAgICAgICBcImZpbmlzaFJlYXNvblwiIGluIHJlc3VsdC5nZW5lcmF0aW9uc1swXSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQuZ2VuZXJhdGlvbnNbMF0uZmluaXNoUmVhc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmZpbmlzaF9yZWFzb25gLCByZXN1bHQuZ2VuZXJhdGlvbnNbMF0uZmluaXNoUmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfdCA9IChfcyA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3QuY2FsbChfcywgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldExsbVJlcXVlc3RUeXBlQnlNZXRob2QodHlwZSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJjaGF0XCIpXG4gICAgICAgICAgICByZXR1cm4gTExNUmVxdWVzdFR5cGVWYWx1ZXMuQ0hBVDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJjb21wbGV0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gTExNUmVxdWVzdFR5cGVWYWx1ZXMuQ09NUExFVElPTjtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJyZXJhbmtcIilcbiAgICAgICAgICAgIHJldHVybiBMTE1SZXF1ZXN0VHlwZVZhbHVlcy5SRVJBTks7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBMTE1SZXF1ZXN0VHlwZVZhbHVlcy5VTktOT1dOO1xuICAgIH1cbiAgICBfc2hvdWxkU2VuZFByb21wdHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyA9IGNvbnRleHRcbiAgICAgICAgICAgIC5hY3RpdmUoKVxuICAgICAgICAgICAgLmdldFZhbHVlKENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQpO1xuICAgICAgICBpZiAoY29udGV4dFNob3VsZFNlbmRQcm9tcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0U2hvdWxkU2VuZFByb21wdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy50cmFjZUNvbnRlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLl9jb25maWcudHJhY2VDb250ZW50XG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgeyBDb2hlcmVJbnN0cnVtZW50YXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgdHJhY2UsIGNvbnRleHQsIFNwYW5TdGF0dXNDb2RlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IEluc3RydW1lbnRhdGlvbkJhc2UsIEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uLCBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uJztcbmltcG9ydCB7IFNwYW5BdHRyaWJ1dGVzLCBFdmVudEF0dHJpYnV0ZXMgfSBmcm9tICdAdHJhY2Vsb29wL2FpLXNlbWFudGljLWNvbnZlbnRpb25zJztcblxudmFyIHZlcnNpb24gPSBcIjAuMjEuMFwiO1xuXG5jbGFzcyBQaW5lY29uZUluc3RydW1lbnRhdGlvbiBleHRlbmRzIEluc3RydW1lbnRhdGlvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tcGluZWNvbmVcIiwgdmVyc2lvbiwgY29uZmlnKTtcbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgIH1cbiAgICBtYW51YWxseUluc3RydW1lbnQobW9kdWxlKSB7XG4gICAgICAgIHRoaXMucGF0Y2gobW9kdWxlKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwiQHBpbmVjb25lLWRhdGFiYXNlL3BpbmVjb25lXCIsIFtcIj49Mi4wLjFcIl0sIHRoaXMucGF0Y2guYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBwYXRjaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFBhdGNoaW5nIEBwaW5lY29uZS1kYXRhYmFzZS9waW5lY29uZUAke21vZHVsZVZlcnNpb259YCk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5JbmRleC5wcm90b3R5cGUsIFwicXVlcnlcIiwgdGhpcy5xdWVyeVdyYXBwZXIodGhpcy50cmFjZXIpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkluZGV4LnByb3RvdHlwZSwgXCJ1cHNlcnRcIiwgdGhpcy5nZW5lcmljV3JhcHBlcihcInVwc2VydFwiLCB0aGlzLnRyYWNlcikpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuSW5kZXgucHJvdG90eXBlLCBcImRlbGV0ZUFsbFwiLCB0aGlzLmdlbmVyaWNXcmFwcGVyKFwiZGVsZXRlXCIsIHRoaXMudHJhY2VyKSk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5JbmRleC5wcm90b3R5cGUsIFwiZGVsZXRlTWFueVwiLCB0aGlzLmdlbmVyaWNXcmFwcGVyKFwiZGVsZXRlXCIsIHRoaXMudHJhY2VyKSk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5JbmRleC5wcm90b3R5cGUsIFwiZGVsZXRlT25lXCIsIHRoaXMuZ2VuZXJpY1dyYXBwZXIoXCJkZWxldGVcIiwgdGhpcy50cmFjZXIpKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHVucGF0Y2gobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBVbnBhdGNoaW5nIEBwaW5lY29uZS1kYXRhYmFzZS9waW5lY29uZUAke21vZHVsZVZlcnNpb259YCk7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkluZGV4LnByb3RvdHlwZSwgXCJxdWVyeVwiKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuSW5kZXgucHJvdG90eXBlLCBcInVwc2VydFwiKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuSW5kZXgucHJvdG90eXBlLCBcImRlbGV0ZUFsbFwiKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZUV4cG9ydHMuSW5kZXgucHJvdG90eXBlLCBcImRlbGV0ZU1hbnlcIik7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkluZGV4LnByb3RvdHlwZSwgXCJkZWxldGVPbmVcIik7XG4gICAgfVxuICAgIGdlbmVyaWNXcmFwcGVyKG1ldGhvZE5hbWUsIHRyYWNlcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2QoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKGBwaW5lY29uZS4ke21ldGhvZE5hbWV9YCk7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVkVDVE9SX0RCX1ZFTkRPUiwgXCJQaW5lY29uZVwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjQ29udGV4dCA9IHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3Bhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY1Byb21pc2UgPSBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQud2l0aChleGVjQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2RpYWcuZXJyb3IoYEVycm9yIGluIFBpbmVjb25lIGluc3RydW1lbnRhdGlvbmAsIGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRQcm9taXNlID0gZXhlY1Byb21pc2VcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmJpbmQoZXhlY0NvbnRleHQsIHdyYXBwZWRQcm9taXNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIHF1ZXJ5V3JhcHBlcih0cmFjZXIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXM7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKGBwaW5lY29uZS5xdWVyeWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNDb250ZXh0ID0gdHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVkVDVE9SX0RCX1ZFTkRPUiwgXCJQaW5lY29uZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlfcmVxdWVzdF9ldmVudCA9IHNwYW4uYWRkRXZlbnQoXCJwaW5lY29uZS5xdWVyeS5yZXF1ZXN0XCIpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXF1ZXN0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1RPUF9LLCBvcHRpb25zLnRvcEspO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXF1ZXN0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX0lOQ0xVREVfVkFMVUVTLCBvcHRpb25zLmluY2x1ZGVWYWx1ZXMgfHwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXF1ZXN0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX0lOQ0xVREVfTUVUQURBVEEsIG9wdGlvbnMuaW5jbHVkZU1ldGFkYXRhIHx8IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVxdWVzdF9ldmVudC5zZXRBdHRyaWJ1dGUoRXZlbnRBdHRyaWJ1dGVzLlZFQ1RPUl9EQl9RVUVSWV9JRCwgb3B0aW9ucy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3JlcXVlc3RfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfRU1CRURESU5HU19WRUNUT1IsIG9wdGlvbnMudmVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVxdWVzdF9ldmVudC5zZXRBdHRyaWJ1dGUoRXZlbnRBdHRyaWJ1dGVzLlZFQ1RPUl9EQl9RVUVSWV9NRVRBREFUQV9GSUxURVIsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZmlsdGVyID8gb3B0aW9ucy5maWx0ZXIgOiB7fSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLl9jb25maWcpLmV4Y2VwdGlvbkxvZ2dlcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9IHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKGV4ZWNDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2RpYWcuZXJyb3IoYEVycm9yIGluIFBpbmVjb25lIGluc3RydW1lbnRhdGlvbmAsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlZFByb21pc2UgPSBleGVjUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRfb2JqID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5X3Jlc3VsdF9ldmVudCA9IHNwYW4uYWRkRXZlbnQoXCJwaW5lY29uZS5xdWVyeS5yZXN1bHRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzdWx0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9OQU1FU1BBQ0UsIHJlc3VsdF9vYmoubmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChfYSA9IHJlc3VsdF9vYmoudXNhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWFkVW5pdHMpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzdWx0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9SRUFEX1VOSVRTX0NPTlNVTUVELCAoX2IgPSByZXN1bHRfb2JqLnVzYWdlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVhZFVuaXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzdWx0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9NQVRDSEVTX0xFTkdUSCwgcmVzdWx0X29iai5tYXRjaGVzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRfb2JqLm1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSByZXN1bHRfb2JqLm1hdGNoZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5X3Jlc3VsdF9tYXRjaF9ldmVudCA9IHNwYW4uYWRkRXZlbnQoYHBpbmVjb25lLnF1ZXJ5LnJlc3VsdC4ke2l9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5zY29yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXN1bHRfbWF0Y2hfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfUkVTVUxUX1NDT1JFLnJlcGxhY2UoXCJ7aX1cIiwgaS50b1N0cmluZygpKSwgbWF0Y2guc2NvcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5zcGFyc2VWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzdWx0X21hdGNoX2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9TUEFSU0VfSU5ESUNFUy5yZXBsYWNlKFwie2l9XCIsIGkudG9TdHJpbmcoKSksIChfYyA9IG1hdGNoLnNwYXJzZVZhbHVlcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmluZGljZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcmVzdWx0X21hdGNoX2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9TUEFSU0VfVkFMVUVTLnJlcGxhY2UoXCJ7aX1cIiwgaS50b1N0cmluZygpKSwgKF9kID0gbWF0Y2guc3BhcnNlVmFsdWVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9yZXN1bHRfbWF0Y2hfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfUkVTVUxUX0lELnJlcGxhY2UoXCJ7aX1cIiwgaS50b1N0cmluZygpKSwgbWF0Y2guaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gudmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jlc3VsdF9tYXRjaF9ldmVudC5zZXRBdHRyaWJ1dGUoRXZlbnRBdHRyaWJ1dGVzLlZFQ1RPUl9EQl9RVUVSWV9SRVNVTFRfVkFMVUVTLnJlcGxhY2UoXCJ7aX1cIiwgaS50b1N0cmluZygpKSwgbWF0Y2gudmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gubWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jlc3VsdF9tYXRjaF9ldmVudC5hZGRFdmVudChgcGluZWNvbmUucXVlcnkucmVzdWx0LiR7aX0ubWV0YWRhdGFgLCBtYXRjaC5tZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9mID0gKF9lID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jYWxsKF9lLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuYmluZChleGVjQ29udGV4dCwgd3JhcHBlZFByb21pc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFBpbmVjb25lSW5zdHJ1bWVudGF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gJ2ZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZic7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLThdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC9pOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgX3JlZ2V4LmRlZmF1bHQudGVzdCh1dWlkKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHZhbGlkYXRlOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cbiAgbGV0IHY7XG4gIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuICAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7XG5cbiAgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmO1xuXG4gIC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7XG5cbiAgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjtcblxuICAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2U7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5jb25zdCBieXRlVG9IZXggPSBbXTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cbmZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIC8vXG4gIC8vIE5vdGUgdG8gZnV0dXJlLXNlbGY6IE5vLCB5b3UgY2FuJ3QgcmVtb3ZlIHRoZSBgdG9Mb3dlckNhc2UoKWAgY2FsbC5cbiAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC82NzcjaXNzdWVjb21tZW50LTE3NTczNTEzNTFcbiAgcmV0dXJuIChieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXSkudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7XG4gIC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuICByZXR1cm4gdXVpZDtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ2lmeTsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xudmFyIF9ub2RlQ3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibm9kZTpjcnlwdG9cIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuY29uc3Qgcm5kczhQb29sID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsgLy8gIyBvZiByYW5kb20gdmFsdWVzIHRvIHByZS1hbGxvY2F0ZVxubGV0IHBvb2xQdHIgPSBybmRzOFBvb2wubGVuZ3RoO1xuZnVuY3Rpb24gcm5nKCkge1xuICBpZiAocG9vbFB0ciA+IHJuZHM4UG9vbC5sZW5ndGggLSAxNikge1xuICAgIF9ub2RlQ3J5cHRvLmRlZmF1bHQucmFuZG9tRmlsbFN5bmMocm5kczhQb29sKTtcbiAgICBwb29sUHRyID0gMDtcbiAgfVxuICByZXR1cm4gcm5kczhQb29sLnNsaWNlKHBvb2xQdHIsIHBvb2xQdHIgKz0gMTYpO1xufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxuXG5sZXQgX25vZGVJZDtcbmxldCBfY2xvY2tzZXE7XG5cbi8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwO1xuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlO1xuICBsZXQgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxO1xuXG4gIC8vIHYxIG9ubHk6IFVzZSBjYWNoZWQgYG5vZGVgIGFuZCBgY2xvY2tzZXFgIHZhbHVlc1xuICBpZiAoIW9wdGlvbnMuX3Y2KSB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBub2RlID0gX25vZGVJZDtcbiAgICB9XG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIGVudHJvcHkuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXNcbiAgLy8gcmVsYXRlZCB0byBpbnN1ZmZpY2llbnQgc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICBjb25zdCBzZWVkQnl0ZXMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpO1xuXG4gICAgLy8gUmFuZG9taXplIG5vZGVcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICBub2RlID0gW3NlZWRCeXRlc1swXSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuXG4gICAgICAvLyB2MSBvbmx5OiBjYWNoZSBub2RlIHZhbHVlIGZvciByZXVzZVxuICAgICAgaWYgKCFfbm9kZUlkICYmICFvcHRpb25zLl92Nikge1xuICAgICAgICAvLyBwZXIgUkZDNDEyMiA0LjU6IFNldCBNQUMgbXVsdGljYXN0IGJpdCAodjEgb25seSlcbiAgICAgICAgbm9kZVswXSB8PSAweDAxOyAvLyBTZXQgbXVsdGljYXN0IGJpdFxuXG4gICAgICAgIF9ub2RlSWQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJhbmRvbWl6ZSBjbG9ja3NlcVxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgICAgaWYgKF9jbG9ja3NlcSA9PT0gdW5kZWZpbmVkICYmICFvcHRpb25zLl92Nikge1xuICAgICAgICBfY2xvY2tzZXEgPSBjbG9ja3NlcTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB2MSAmIHY2IHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzbyB0aW1lIGlzXG4gIC8vIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cbiAgbGV0IG1zZWNzID0gb3B0aW9ucy5tc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tc2VjcyA6IERhdGUubm93KCk7XG5cbiAgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuICBsZXQgbnNlY3MgPSBvcHRpb25zLm5zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zZWNzIDogX2xhc3ROU2VjcyArIDE7XG5cbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuICBjb25zdCBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7XG5cbiAgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9XG5cbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfVxuXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxO1xuXG4gIC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDtcblxuICAvLyBgdGltZV9sb3dgXG4gIGNvbnN0IHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjtcblxuICAvLyBgdGltZV9taWRgXG4gIGNvbnN0IHRtaCA9IG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCAmIDB4ZmZmZmZmZjtcbiAgYltpKytdID0gdG1oID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdG1oICYgMHhmZjtcblxuICAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmO1xuXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7XG5cbiAgLy8gYGNsb2NrX3NlcV9sb3dgXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjtcblxuICAvLyBgbm9kZWBcbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gdjE7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHYxVG9WNjtcbnZhciBfcGFyc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnNlLmpzXCIpKTtcbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuLyoqXG4gKiBDb252ZXJ0IGEgdjEgVVVJRCB0byBhIHY2IFVVSURcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xVaW50OEFycmF5fSB1dWlkIC0gVGhlIHYxIFVVSUQgdG8gY29udmVydCB0byB2NlxuICogQHJldHVybnMge3N0cmluZ3xVaW50OEFycmF5fSBUaGUgdjYgVVVJRCBhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBgdXVpZGAgYXJnXG4gKiAoc3RyaW5nIG9yIFVpbnQ4QXJyYXkpXG4gKi9cbmZ1bmN0aW9uIHYxVG9WNih1dWlkKSB7XG4gIGNvbnN0IHYxQnl0ZXMgPSB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgPyAoMCwgX3BhcnNlLmRlZmF1bHQpKHV1aWQpIDogdXVpZDtcbiAgY29uc3QgdjZCeXRlcyA9IF92MVRvVjYodjFCeXRlcyk7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgPyAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKHY2Qnl0ZXMpIDogdjZCeXRlcztcbn1cblxuLy8gRG8gdGhlIGZpZWxkIHRyYW5zZm9ybWF0aW9uIG5lZWRlZCBmb3IgdjEgLT4gdjZcbmZ1bmN0aW9uIF92MVRvVjYodjFCeXRlcywgcmFuZG9taXplID0gZmFsc2UpIHtcbiAgcmV0dXJuIFVpbnQ4QXJyYXkub2YoKHYxQnl0ZXNbNl0gJiAweDBmKSA8PCA0IHwgdjFCeXRlc1s3XSA+PiA0ICYgMHgwZiwgKHYxQnl0ZXNbN10gJiAweDBmKSA8PCA0IHwgKHYxQnl0ZXNbNF0gJiAweGYwKSA+PiA0LCAodjFCeXRlc1s0XSAmIDB4MGYpIDw8IDQgfCAodjFCeXRlc1s1XSAmIDB4ZjApID4+IDQsICh2MUJ5dGVzWzVdICYgMHgwZikgPDwgNCB8ICh2MUJ5dGVzWzBdICYgMHhmMCkgPj4gNCwgKHYxQnl0ZXNbMF0gJiAweDBmKSA8PCA0IHwgKHYxQnl0ZXNbMV0gJiAweGYwKSA+PiA0LCAodjFCeXRlc1sxXSAmIDB4MGYpIDw8IDQgfCAodjFCeXRlc1syXSAmIDB4ZjApID4+IDQsIDB4NjAgfCB2MUJ5dGVzWzJdICYgMHgwZiwgdjFCeXRlc1szXSwgdjFCeXRlc1s4XSwgdjFCeXRlc1s5XSwgdjFCeXRlc1sxMF0sIHYxQnl0ZXNbMTFdLCB2MUJ5dGVzWzEyXSwgdjFCeXRlc1sxM10sIHYxQnl0ZXNbMTRdLCB2MUJ5dGVzWzE1XSk7XG59IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbnZhciBfcGFyc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnNlLmpzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG4gIHJldHVybiBieXRlcztcbn1cbmNvbnN0IEROUyA9IGV4cG9ydHMuRE5TID0gJzZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5jb25zdCBVUkwgPSBleHBvcnRzLlVSTCA9ICc2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZnVuY3Rpb24gdjM1KG5hbWUsIHZlcnNpb24sIGhhc2hmdW5jKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHZhciBfbmFtZXNwYWNlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IHN0cmluZ1RvQnl0ZXModmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBoYXNoIG9mIG5hbWVzcGFjZSBhbmQgdmFsdWUsIFBlciA0LjNcbiAgICAvLyBGdXR1cmU6IFVzZSBzcHJlYWQgc3ludGF4IHdoZW4gc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGUuZy4gYGJ5dGVzID1cbiAgICAvLyBoYXNoZnVuYyhbLi4ubmFtZXNwYWNlLCAuLi4gdmFsdWVdKWBcbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuICAgIGlmIChidWYpIHtcbiAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYnl0ZXMpO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24jbmFtZSBpcyBub3Qgc2V0dGFibGUgb24gc29tZSBwbGF0Zm9ybXMgKCMyNzApXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lO1xuICB9IGNhdGNoIChlcnIpIHt9XG5cbiAgLy8gRm9yIENvbW1vbkpTIGRlZmF1bHQgZXhwb3J0IHN1cHBvcnRcbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub2RlQ3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibm9kZTpjcnlwdG9cIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuZnVuY3Rpb24gbWQ1KGJ5dGVzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBieXRlcyA9IEJ1ZmZlci5mcm9tKGJ5dGVzLCAndXRmOCcpO1xuICB9XG4gIHJldHVybiBfbm9kZUNyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShieXRlcykuZGlnZXN0KCk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBtZDU7IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcbnZhciBfbWQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21kNS5qc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5jb25zdCB2MyA9ICgwLCBfdi5kZWZhdWx0KSgndjMnLCAweDMwLCBfbWQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSB2MzsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub2RlQ3J5cHRvID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibm9kZTpjcnlwdG9cIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEOiBfbm9kZUNyeXB0by5kZWZhdWx0LnJhbmRvbVVVSURcbn07IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDtcblxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHY0OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vZGVDcnlwdG8gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJub2RlOmNyeXB0b1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIGJ5dGVzID0gQnVmZmVyLmZyb20oYnl0ZXMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBieXRlcyA9IEJ1ZmZlci5mcm9tKGJ5dGVzLCAndXRmOCcpO1xuICB9XG4gIHJldHVybiBfbm9kZUNyeXB0by5kZWZhdWx0LmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc2hhMTsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xudmFyIF9zaGEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYTEuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuY29uc3QgdjUgPSAoMCwgX3YuZGVmYXVsdCkoJ3Y1JywgMHg1MCwgX3NoYS5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHY1OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2NjtcbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG52YXIgX3YxVG9WID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MVRvVjYuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7VWludDhBcnJheT19IGJ1ZlxuICogQHBhcmFtIHtudW1iZXI9fSBvZmZzZXRcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHY2KG9wdGlvbnMgPSB7fSwgYnVmLCBvZmZzZXQgPSAwKSB7XG4gIC8vIHY2IGlzIHYxIHdpdGggZGlmZmVyZW50IGZpZWxkIGxheW91dCwgc28gd2Ugc3RhcnQgd2l0aCBhIHYxIFVVSUQsIGFsYmVpdFxuICAvLyB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCBiZWhhdmlvciBhcm91bmQgaG93IHRoZSBjbG9ja19zZXEgYW5kIG5vZGUgZmllbGRzXG4gIC8vIGFyZSByYW5kb21pemVkLCB3aGljaCBpcyB3aHkgd2UgY2FsbCB2MSB3aXRoIF92NjogdHJ1ZS5cbiAgbGV0IGJ5dGVzID0gKDAsIF92LmRlZmF1bHQpKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIF92NjogdHJ1ZVxuICB9LCBuZXcgVWludDhBcnJheSgxNikpO1xuXG4gIC8vIFJlb3JkZXIgdGhlIGZpZWxkcyB0byB2NiBsYXlvdXQuXG4gIGJ5dGVzID0gKDAsIF92MVRvVi5kZWZhdWx0KShieXRlcyk7XG5cbiAgLy8gUmV0dXJuIGFzIGEgYnl0ZSBhcnJheSBpZiByZXF1ZXN0ZWRcbiAgaWYgKGJ1Zikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgYnVmW29mZnNldCArIGldID0gYnl0ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBidWY7XG4gIH1cbiAgcmV0dXJuICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYnl0ZXMpO1xufSIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2NlRvVjE7XG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbi8qKlxuICogQ29udmVydCBhIHY2IFVVSUQgdG8gYSB2MSBVVUlEXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8VWludDhBcnJheX0gdXVpZCAtIFRoZSB2NiBVVUlEIHRvIGNvbnZlcnQgdG8gdjZcbiAqIEByZXR1cm5zIHtzdHJpbmd8VWludDhBcnJheX0gVGhlIHYxIFVVSUQgYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYHV1aWRgIGFyZ1xuICogKHN0cmluZyBvciBVaW50OEFycmF5KVxuICovXG5mdW5jdGlvbiB2NlRvVjEodXVpZCkge1xuICBjb25zdCB2NkJ5dGVzID0gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnID8gKDAsIF9wYXJzZS5kZWZhdWx0KSh1dWlkKSA6IHV1aWQ7XG4gIGNvbnN0IHYxQnl0ZXMgPSBfdjZUb1YxKHY2Qnl0ZXMpO1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnID8gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KSh2MUJ5dGVzKSA6IHYxQnl0ZXM7XG59XG5cbi8vIERvIHRoZSBmaWVsZCB0cmFuc2Zvcm1hdGlvbiBuZWVkZWQgZm9yIHY2IC0+IHYxXG5mdW5jdGlvbiBfdjZUb1YxKHY2Qnl0ZXMpIHtcbiAgcmV0dXJuIFVpbnQ4QXJyYXkub2YoKHY2Qnl0ZXNbM10gJiAweDBmKSA8PCA0IHwgdjZCeXRlc1s0XSA+PiA0ICYgMHgwZiwgKHY2Qnl0ZXNbNF0gJiAweDBmKSA8PCA0IHwgKHY2Qnl0ZXNbNV0gJiAweGYwKSA+PiA0LCAodjZCeXRlc1s1XSAmIDB4MGYpIDw8IDQgfCB2NkJ5dGVzWzZdICYgMHgwZiwgdjZCeXRlc1s3XSwgKHY2Qnl0ZXNbMV0gJiAweDBmKSA8PCA0IHwgKHY2Qnl0ZXNbMl0gJiAweGYwKSA+PiA0LCAodjZCeXRlc1syXSAmIDB4MGYpIDw8IDQgfCAodjZCeXRlc1szXSAmIDB4ZjApID4+IDQsIDB4MTAgfCAodjZCeXRlc1swXSAmIDB4ZjApID4+IDQsICh2NkJ5dGVzWzBdICYgMHgwZikgPDwgNCB8ICh2NkJ5dGVzWzFdICYgMHhmMCkgPj4gNCwgdjZCeXRlc1s4XSwgdjZCeXRlc1s5XSwgdjZCeXRlc1sxMF0sIHY2Qnl0ZXNbMTFdLCB2NkJ5dGVzWzEyXSwgdjZCeXRlc1sxM10sIHY2Qnl0ZXNbMTRdLCB2NkJ5dGVzWzE1XSk7XG59IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG4vKipcbiAqIFVVSUQgVjcgLSBVbml4IEVwb2NoIHRpbWUtYmFzZWQgVVVJRFxuICpcbiAqIFRoZSBJRVRGIGhhcyBwdWJsaXNoZWQgUkZDOTU2MiwgaW50cm9kdWNpbmcgMyBuZXcgVVVJRCB2ZXJzaW9ucyAoNiw3LDgpLiBUaGlzXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBWNyBpcyBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQsIHRob3VnaCBub3QgeWV0IGFwcHJvdmVkLFxuICogcmV2aXNpb25zLlxuICpcbiAqIFJGQyA5NTYyOmh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5NTYyLmh0bWwgVW5pdmVyc2FsbHkgVW5pcXVlXG4gKiBJRGVudGlmaWVycyAoVVVJRHMpXG5cbiAqXG4gKiBTYW1wbGUgVjcgdmFsdWU6XG4gKiBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTU2Mi5odG1sI25hbWUtZXhhbXBsZS1vZi1hLXV1aWR2Ny12YWx1ZVxuICpcbiAqIE1vbm90b25pYyBCaXQgTGF5b3V0OiBSRkMgcmZjOTU2Mi42LjIgTWV0aG9kIDEsIERlZGljYXRlZCBDb3VudGVyIEJpdHMgcmVmOlxuICogICAgIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5NTYyLmh0bWwjc2VjdGlvbi02LjItNS4xXG4gKlxuICogICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzIDAgMSAyIDMgNCA1IDZcbiAqICAgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMVxuICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rXG4gKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgdW5peF90c19tcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstK1xuICogIHwgICAgICAgICAgdW5peF90c19tcyAgICAgICAgICAgfCAgdmVyICB8ICAgICAgICBzZXFfaGkgICAgICAgICB8XG4gKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLStcbiAqICB8dmFyfCAgICAgICAgICAgICAgIHNlcV9sb3cgICAgICAgICAgICAgICB8ICAgICAgICByYW5kICAgICAgICAgfFxuICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rXG4gKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstK1xuICpcbiAqIHNlcSBpcyBhIDMxIGJpdCBzZXJpYWxpemVkIGNvdW50ZXI7IGNvbXByaXNlZCBvZiAxMiBiaXQgc2VxX2hpIGFuZCAxOSBiaXRcbiAqIHNlcV9sb3csIGFuZCByYW5kb21seSBpbml0aWFsaXplZCB1cG9uIHRpbWVzdGFtcCBjaGFuZ2UuIDMxIGJpdCBjb3VudGVyIHNpemVcbiAqIHdhcyBzZWxlY3RlZCBhcyBhbnkgYml0d2lzZSBvcGVyYXRpb25zIGluIG5vZGUgYXJlIGRvbmUgYXMgX3NpZ25lZF8gMzIgYml0XG4gKiBpbnRzLiB3ZSBleGNsdWRlIHRoZSBzaWduIGJpdC5cbiAqL1xuXG5sZXQgX3NlcUxvdyA9IG51bGw7XG5sZXQgX3NlcUhpZ2ggPSBudWxsO1xubGV0IF9tc2VjcyA9IDA7XG5mdW5jdGlvbiB2NyhvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBpbml0aWFsaXplIGJ1ZmZlciBhbmQgcG9pbnRlclxuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgVWludDhBcnJheSgxNik7XG5cbiAgLy8gcm5kcyBpcyBVaW50OEFycmF5KDE2KSBmaWxsZWQgd2l0aCByYW5kb20gYnl0ZXNcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgLy8gbWlsbGlzZWNvbmRzIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDBcbiAgY29uc3QgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTtcblxuICAvLyBzZXEgaXMgdXNlciBwcm92aWRlZCAzMSBiaXQgY291bnRlclxuICBsZXQgc2VxID0gb3B0aW9ucy5zZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuc2VxIDogbnVsbDtcblxuICAvLyBpbml0aWFsaXplIGxvY2FsIHNlcSBoaWdoL2xvdyBwYXJ0c1xuICBsZXQgc2VxSGlnaCA9IF9zZXFIaWdoO1xuICBsZXQgc2VxTG93ID0gX3NlcUxvdztcblxuICAvLyBjaGVjayBpZiBjbG9jayBoYXMgYWR2YW5jZWQgYW5kIHVzZXIgaGFzIG5vdCBwcm92aWRlZCBtc2Vjc1xuICBpZiAobXNlY3MgPiBfbXNlY3MgJiYgb3B0aW9ucy5tc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgX21zZWNzID0gbXNlY3M7XG5cbiAgICAvLyB1bmxlc3MgdXNlciBwcm92aWRlZCBzZXEsIHJlc2V0IHNlcSBwYXJ0c1xuICAgIGlmIChzZXEgIT09IG51bGwpIHtcbiAgICAgIHNlcUhpZ2ggPSBudWxsO1xuICAgICAgc2VxTG93ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB3ZSBoYXZlIGEgdXNlciBwcm92aWRlZCBzZXFcbiAgaWYgKHNlcSAhPT0gbnVsbCkge1xuICAgIC8vIHRyaW0gcHJvdmlkZWQgc2VxIHRvIDMxIGJpdHMgb2YgdmFsdWUsIGF2b2lkaW5nIG92ZXJmbG93XG4gICAgaWYgKHNlcSA+IDB4N2ZmZmZmZmYpIHtcbiAgICAgIHNlcSA9IDB4N2ZmZmZmZmY7XG4gICAgfVxuXG4gICAgLy8gc3BsaXQgcHJvdmlkZWQgc2VxIGludG8gaGlnaC9sb3cgcGFydHNcbiAgICBzZXFIaWdoID0gc2VxID4+PiAxOSAmIDB4ZmZmO1xuICAgIHNlcUxvdyA9IHNlcSAmIDB4N2ZmZmY7XG4gIH1cblxuICAvLyByYW5kb21seSBpbml0aWFsaXplIHNlcVxuICBpZiAoc2VxSGlnaCA9PT0gbnVsbCB8fCBzZXFMb3cgPT09IG51bGwpIHtcbiAgICBzZXFIaWdoID0gcm5kc1s2XSAmIDB4N2Y7XG4gICAgc2VxSGlnaCA9IHNlcUhpZ2ggPDwgOCB8IHJuZHNbN107XG4gICAgc2VxTG93ID0gcm5kc1s4XSAmIDB4M2Y7IC8vIHBhZCBmb3IgdmFyXG4gICAgc2VxTG93ID0gc2VxTG93IDw8IDggfCBybmRzWzldO1xuICAgIHNlcUxvdyA9IHNlcUxvdyA8PCA1IHwgcm5kc1sxMF0gPj4+IDM7XG4gIH1cblxuICAvLyBpbmNyZW1lbnQgc2VxIGlmIHdpdGhpbiBtc2VjcyB3aW5kb3dcbiAgaWYgKG1zZWNzICsgMTAwMDAgPiBfbXNlY3MgJiYgc2VxID09PSBudWxsKSB7XG4gICAgaWYgKCsrc2VxTG93ID4gMHg3ZmZmZikge1xuICAgICAgc2VxTG93ID0gMDtcbiAgICAgIGlmICgrK3NlcUhpZ2ggPiAweGZmZikge1xuICAgICAgICBzZXFIaWdoID0gMDtcblxuICAgICAgICAvLyBpbmNyZW1lbnQgaW50ZXJuYWwgX21zZWNzLiB0aGlzIGFsbG93cyB1cyB0byBjb250aW51ZSBpbmNyZW1lbnRpbmdcbiAgICAgICAgLy8gd2hpbGUgc3RheWluZyBtb25vdG9uaWMuIE5vdGUsIG9uY2Ugd2UgaGl0IDEwayBtaWxsaXNlY29uZHMgYmV5b25kIHN5c3RlbVxuICAgICAgICAvLyBjbG9jaywgd2Ugd2lsbCByZXNldCBicmVha2luZyBtb25vdG9uaWNpdHkgKGFmdGVyICgyXjMxKSoxMDAwMCBnZW5lcmF0aW9ucylcbiAgICAgICAgX21zZWNzKys7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHJlc2V0dGluZzsgd2UgaGF2ZSBhZHZhbmNlZCBtb3JlIHRoYW5cbiAgICAvLyAxMGsgbWlsbGlzZWNvbmRzIGJleW9uZCBzeXN0ZW0gY2xvY2tcbiAgICBfbXNlY3MgPSBtc2VjcztcbiAgfVxuICBfc2VxSGlnaCA9IHNlcUhpZ2g7XG4gIF9zZXFMb3cgPSBzZXFMb3c7XG5cbiAgLy8gW2J5dGVzIDAtNV0gNDggYml0cyBvZiBsb2NhbCB0aW1lc3RhbXBcbiAgYltpKytdID0gX21zZWNzIC8gMHgxMDAwMDAwMDAwMCAmIDB4ZmY7XG4gIGJbaSsrXSA9IF9tc2VjcyAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYltpKytdID0gX21zZWNzIC8gMHgxMDAwMDAwICYgMHhmZjtcbiAgYltpKytdID0gX21zZWNzIC8gMHgxMDAwMCAmIDB4ZmY7XG4gIGJbaSsrXSA9IF9tc2VjcyAvIDB4MTAwICYgMHhmZjtcbiAgYltpKytdID0gX21zZWNzICYgMHhmZjtcblxuICAvLyBbYnl0ZSA2XSAtIHNldCA0IGJpdHMgb2YgdmVyc2lvbiAoNykgd2l0aCBmaXJzdCA0IGJpdHMgc2VxX2hpXG4gIGJbaSsrXSA9IHNlcUhpZ2ggPj4+IDQgJiAweDBmIHwgMHg3MDtcblxuICAvLyBbYnl0ZSA3XSByZW1haW5pbmcgOCBiaXRzIG9mIHNlcV9oaVxuICBiW2krK10gPSBzZXFIaWdoICYgMHhmZjtcblxuICAvLyBbYnl0ZSA4XSAtIHZhcmlhbnQgKDIgYml0cyksIGZpcnN0IDYgYml0cyBzZXFfbG93XG4gIGJbaSsrXSA9IHNlcUxvdyA+Pj4gMTMgJiAweDNmIHwgMHg4MDtcblxuICAvLyBbYnl0ZSA5XSA4IGJpdHMgc2VxX2xvd1xuICBiW2krK10gPSBzZXFMb3cgPj4+IDUgJiAweGZmO1xuXG4gIC8vIFtieXRlIDEwXSByZW1haW5pbmcgNSBiaXRzIHNlcV9sb3csIDMgYml0cyByYW5kb21cbiAgYltpKytdID0gc2VxTG93IDw8IDMgJiAweGZmIHwgcm5kc1sxMF0gJiAweDA3O1xuXG4gIC8vIFtieXRlcyAxMS0xNV0gYWx3YXlzIHJhbmRvbVxuICBiW2krK10gPSBybmRzWzExXTtcbiAgYltpKytdID0gcm5kc1sxMl07XG4gIGJbaSsrXSA9IHJuZHNbMTNdO1xuICBiW2krK10gPSBybmRzWzE0XTtcbiAgYltpKytdID0gcm5kc1sxNV07XG4gIHJldHVybiBidWYgfHwgKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShiKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHY3OyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5mdW5jdGlvbiB2ZXJzaW9uKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSB2ZXJzaW9uOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNQVhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX21heC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfbmlsLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxVG9WNlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjFUb1YuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2M1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjQuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdjUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NlRvVjFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3Y2VG9WLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3Y2LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfbWF4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tYXguanNcIikpO1xudmFyIF9uaWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25pbC5qc1wiKSk7XG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjEuanNcIikpO1xudmFyIF92MVRvViA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjFUb1Y2LmpzXCIpKTtcbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcbnZhciBfdjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y0LmpzXCIpKTtcbnZhciBfdjQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y1LmpzXCIpKTtcbnZhciBfdjUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y2LmpzXCIpKTtcbnZhciBfdjZUb1YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y2VG9WMS5qc1wiKSk7XG52YXIgX3Y2ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92Ny5qc1wiKSk7XG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfSIsCiAgICAiaW1wb3J0IHV1aWQgZnJvbSAnLi9kaXN0L2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCB2MSA9IHV1aWQudjE7XG5leHBvcnQgY29uc3QgdjFUb1Y2ID0gdXVpZC52MVRvVjY7XG5leHBvcnQgY29uc3QgdjMgPSB1dWlkLnYzO1xuZXhwb3J0IGNvbnN0IHY0ID0gdXVpZC52NDtcbmV4cG9ydCBjb25zdCB2NSA9IHV1aWQudjU7XG5leHBvcnQgY29uc3QgdjYgPSB1dWlkLnY2O1xuZXhwb3J0IGNvbnN0IHY2VG9WMSA9IHV1aWQudjZUb1YxO1xuZXhwb3J0IGNvbnN0IHY3ID0gdXVpZC52NztcbmV4cG9ydCBjb25zdCBOSUwgPSB1dWlkLk5JTDtcbmV4cG9ydCBjb25zdCBNQVggPSB1dWlkLk1BWDtcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gdXVpZC52ZXJzaW9uO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gdXVpZC52YWxpZGF0ZTtcbmV4cG9ydCBjb25zdCBzdHJpbmdpZnkgPSB1dWlkLnN0cmluZ2lmeTtcbmV4cG9ydCBjb25zdCBwYXJzZSA9IHV1aWQucGFyc2U7XG4iLAogICAgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0ciwgc2VwKSB7XG5cdGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XG5cdH1cblxuXHRzZXAgPSB0eXBlb2Ygc2VwID09PSAndW5kZWZpbmVkJyA/ICdfJyA6IHNlcDtcblxuXHRyZXR1cm4gc3RyXG5cdFx0LnJlcGxhY2UoLyhbYS16XFxkXSkoW0EtWl0pL2csICckMScgKyBzZXAgKyAnJDInKVxuXHRcdC5yZXBsYWNlKC8oW0EtWl0rKShbQS1aXVthLXpcXGRdKykvZywgJyQxJyArIHNlcCArICckMicpXG5cdFx0LnRvTG93ZXJDYXNlKCk7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFVQUEVSQ0FTRSA9IC9bXFxwe0x1fV0vdTtcbmNvbnN0IExPV0VSQ0FTRSA9IC9bXFxwe0xsfV0vdTtcbmNvbnN0IExFQURJTkdfQ0FQSVRBTCA9IC9eW1xccHtMdX1dKD8hW1xccHtMdX1dKS9ndTtcbmNvbnN0IElERU5USUZJRVIgPSAvKFtcXHB7QWxwaGF9XFxwe059X118JCkvdTtcbmNvbnN0IFNFUEFSQVRPUlMgPSAvW18uXFwtIF0rLztcblxuY29uc3QgTEVBRElOR19TRVBBUkFUT1JTID0gbmV3IFJlZ0V4cCgnXicgKyBTRVBBUkFUT1JTLnNvdXJjZSk7XG5jb25zdCBTRVBBUkFUT1JTX0FORF9JREVOVElGSUVSID0gbmV3IFJlZ0V4cChTRVBBUkFUT1JTLnNvdXJjZSArIElERU5USUZJRVIuc291cmNlLCAnZ3UnKTtcbmNvbnN0IE5VTUJFUlNfQU5EX0lERU5USUZJRVIgPSBuZXcgUmVnRXhwKCdcXFxcZCsnICsgSURFTlRJRklFUi5zb3VyY2UsICdndScpO1xuXG5jb25zdCBwcmVzZXJ2ZUNhbWVsQ2FzZSA9IChzdHJpbmcsIHRvTG93ZXJDYXNlLCB0b1VwcGVyQ2FzZSkgPT4ge1xuXHRsZXQgaXNMYXN0Q2hhckxvd2VyID0gZmFsc2U7XG5cdGxldCBpc0xhc3RDaGFyVXBwZXIgPSBmYWxzZTtcblx0bGV0IGlzTGFzdExhc3RDaGFyVXBwZXIgPSBmYWxzZTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNoYXJhY3RlciA9IHN0cmluZ1tpXTtcblxuXHRcdGlmIChpc0xhc3RDaGFyTG93ZXIgJiYgVVBQRVJDQVNFLnRlc3QoY2hhcmFjdGVyKSkge1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnNsaWNlKDAsIGkpICsgJy0nICsgc3RyaW5nLnNsaWNlKGkpO1xuXHRcdFx0aXNMYXN0Q2hhckxvd2VyID0gZmFsc2U7XG5cdFx0XHRpc0xhc3RMYXN0Q2hhclVwcGVyID0gaXNMYXN0Q2hhclVwcGVyO1xuXHRcdFx0aXNMYXN0Q2hhclVwcGVyID0gdHJ1ZTtcblx0XHRcdGkrKztcblx0XHR9IGVsc2UgaWYgKGlzTGFzdENoYXJVcHBlciAmJiBpc0xhc3RMYXN0Q2hhclVwcGVyICYmIExPV0VSQ0FTRS50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zbGljZSgwLCBpIC0gMSkgKyAnLScgKyBzdHJpbmcuc2xpY2UoaSAtIDEpO1xuXHRcdFx0aXNMYXN0TGFzdENoYXJVcHBlciA9IGlzTGFzdENoYXJVcHBlcjtcblx0XHRcdGlzTGFzdENoYXJVcHBlciA9IGZhbHNlO1xuXHRcdFx0aXNMYXN0Q2hhckxvd2VyID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aXNMYXN0Q2hhckxvd2VyID0gdG9Mb3dlckNhc2UoY2hhcmFjdGVyKSA9PT0gY2hhcmFjdGVyICYmIHRvVXBwZXJDYXNlKGNoYXJhY3RlcikgIT09IGNoYXJhY3Rlcjtcblx0XHRcdGlzTGFzdExhc3RDaGFyVXBwZXIgPSBpc0xhc3RDaGFyVXBwZXI7XG5cdFx0XHRpc0xhc3RDaGFyVXBwZXIgPSB0b1VwcGVyQ2FzZShjaGFyYWN0ZXIpID09PSBjaGFyYWN0ZXIgJiYgdG9Mb3dlckNhc2UoY2hhcmFjdGVyKSAhPT0gY2hhcmFjdGVyO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHJpbmc7XG59O1xuXG5jb25zdCBwcmVzZXJ2ZUNvbnNlY3V0aXZlVXBwZXJjYXNlID0gKGlucHV0LCB0b0xvd2VyQ2FzZSkgPT4ge1xuXHRMRUFESU5HX0NBUElUQUwubGFzdEluZGV4ID0gMDtcblxuXHRyZXR1cm4gaW5wdXQucmVwbGFjZShMRUFESU5HX0NBUElUQUwsIG0xID0+IHRvTG93ZXJDYXNlKG0xKSk7XG59O1xuXG5jb25zdCBwb3N0UHJvY2VzcyA9IChpbnB1dCwgdG9VcHBlckNhc2UpID0+IHtcblx0U0VQQVJBVE9SU19BTkRfSURFTlRJRklFUi5sYXN0SW5kZXggPSAwO1xuXHROVU1CRVJTX0FORF9JREVOVElGSUVSLmxhc3RJbmRleCA9IDA7XG5cblx0cmV0dXJuIGlucHV0LnJlcGxhY2UoU0VQQVJBVE9SU19BTkRfSURFTlRJRklFUiwgKF8sIGlkZW50aWZpZXIpID0+IHRvVXBwZXJDYXNlKGlkZW50aWZpZXIpKVxuXHRcdC5yZXBsYWNlKE5VTUJFUlNfQU5EX0lERU5USUZJRVIsIG0gPT4gdG9VcHBlckNhc2UobSkpO1xufTtcblxuY29uc3QgY2FtZWxDYXNlID0gKGlucHV0LCBvcHRpb25zKSA9PiB7XG5cdGlmICghKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShpbnB1dCkpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdGhlIGlucHV0IHRvIGJlIGBzdHJpbmcgfCBzdHJpbmdbXWAnKTtcblx0fVxuXG5cdG9wdGlvbnMgPSB7XG5cdFx0cGFzY2FsQ2FzZTogZmFsc2UsXG5cdFx0cHJlc2VydmVDb25zZWN1dGl2ZVVwcGVyY2FzZTogZmFsc2UsXG5cdFx0Li4ub3B0aW9uc1xuXHR9O1xuXG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdGlucHV0ID0gaW5wdXQubWFwKHggPT4geC50cmltKCkpXG5cdFx0XHQuZmlsdGVyKHggPT4geC5sZW5ndGgpXG5cdFx0XHQuam9pbignLScpO1xuXHR9IGVsc2Uge1xuXHRcdGlucHV0ID0gaW5wdXQudHJpbSgpO1xuXHR9XG5cblx0aWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGNvbnN0IHRvTG93ZXJDYXNlID0gb3B0aW9ucy5sb2NhbGUgPT09IGZhbHNlID9cblx0XHRzdHJpbmcgPT4gc3RyaW5nLnRvTG93ZXJDYXNlKCkgOlxuXHRcdHN0cmluZyA9PiBzdHJpbmcudG9Mb2NhbGVMb3dlckNhc2Uob3B0aW9ucy5sb2NhbGUpO1xuXHRjb25zdCB0b1VwcGVyQ2FzZSA9IG9wdGlvbnMubG9jYWxlID09PSBmYWxzZSA/XG5cdFx0c3RyaW5nID0+IHN0cmluZy50b1VwcGVyQ2FzZSgpIDpcblx0XHRzdHJpbmcgPT4gc3RyaW5nLnRvTG9jYWxlVXBwZXJDYXNlKG9wdGlvbnMubG9jYWxlKTtcblxuXHRpZiAoaW5wdXQubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnMucGFzY2FsQ2FzZSA/IHRvVXBwZXJDYXNlKGlucHV0KSA6IHRvTG93ZXJDYXNlKGlucHV0KTtcblx0fVxuXG5cdGNvbnN0IGhhc1VwcGVyQ2FzZSA9IGlucHV0ICE9PSB0b0xvd2VyQ2FzZShpbnB1dCk7XG5cblx0aWYgKGhhc1VwcGVyQ2FzZSkge1xuXHRcdGlucHV0ID0gcHJlc2VydmVDYW1lbENhc2UoaW5wdXQsIHRvTG93ZXJDYXNlLCB0b1VwcGVyQ2FzZSk7XG5cdH1cblxuXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoTEVBRElOR19TRVBBUkFUT1JTLCAnJyk7XG5cblx0aWYgKG9wdGlvbnMucHJlc2VydmVDb25zZWN1dGl2ZVVwcGVyY2FzZSkge1xuXHRcdGlucHV0ID0gcHJlc2VydmVDb25zZWN1dGl2ZVVwcGVyY2FzZShpbnB1dCwgdG9Mb3dlckNhc2UpO1xuXHR9IGVsc2Uge1xuXHRcdGlucHV0ID0gdG9Mb3dlckNhc2UoaW5wdXQpO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMucGFzY2FsQ2FzZSkge1xuXHRcdGlucHV0ID0gdG9VcHBlckNhc2UoaW5wdXQuY2hhckF0KDApKSArIGlucHV0LnNsaWNlKDEpO1xuXHR9XG5cblx0cmV0dXJuIHBvc3RQcm9jZXNzKGlucHV0LCB0b1VwcGVyQ2FzZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsQ2FzZTtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gY2FtZWxDYXNlO1xuIiwKICAgICJpbXBvcnQgc25ha2VDYXNlIGZyb20gXCJkZWNhbWVsaXplXCI7XG5pbXBvcnQgY2FtZWxDYXNlIGZyb20gXCJjYW1lbGNhc2VcIjtcbmV4cG9ydCBmdW5jdGlvbiBrZXlUb0pzb24oa2V5LCBtYXApIHtcbiAgICByZXR1cm4gbWFwPy5ba2V5XSB8fCBzbmFrZUNhc2Uoa2V5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBrZXlGcm9tSnNvbihrZXksIG1hcCkge1xuICAgIHJldHVybiBtYXA/LltrZXldIHx8IGNhbWVsQ2FzZShrZXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcEtleXMoZmllbGRzLCBtYXBwZXIsIG1hcCkge1xuICAgIGNvbnN0IG1hcHBlZCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkcykge1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihmaWVsZHMsIGtleSkpIHtcbiAgICAgICAgICAgIG1hcHBlZFttYXBwZXIoa2V5LCBtYXApXSA9IGZpZWxkc1trZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXBwZWQ7XG59XG4iLAogICAgIi8qKlxuICogU2VudGluZWwga2V5IHVzZWQgdG8gbWFyayBlc2NhcGVkIHVzZXIgb2JqZWN0cyBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBXaGVuIGEgcGxhaW4gb2JqZWN0IGNvbnRhaW5zICdsYycga2V5ICh3aGljaCBjb3VsZCBiZSBjb25mdXNlZCB3aXRoIExDIG9iamVjdHMpLFxuICogd2Ugd3JhcCBpdCBhcyBge1wiX19sY19lc2NhcGVkX19cIjogey4uLm9yaWdpbmFsLi4ufX1gLlxuICovXG5leHBvcnQgY29uc3QgTENfRVNDQVBFRF9LRVkgPSBcIl9fbGNfZXNjYXBlZF9fXCI7XG4vKipcbiAqIENoZWNrIGlmIGFuIG9iamVjdCBuZWVkcyBlc2NhcGluZyB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoIExDIG9iamVjdHMuXG4gKlxuICogQW4gb2JqZWN0IG5lZWRzIGVzY2FwaW5nIGlmOlxuICogMS4gSXQgaGFzIGFuIGAnbGMnYCBrZXkgKGNvdWxkIGJlIGNvbmZ1c2VkIHdpdGggTEMgc2VyaWFsaXphdGlvbiBmb3JtYXQpXG4gKiAyLiBJdCBoYXMgb25seSB0aGUgZXNjYXBlIGtleSAod291bGQgYmUgbWlzdGFrZW4gZm9yIGFuIGVzY2FwZWQgb2JqZWN0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNFc2NhcGluZyhvYmopIHtcbiAgICByZXR1cm4gKFwibGNcIiBpbiBvYmogfHwgKE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAxICYmIExDX0VTQ0FQRURfS0VZIGluIG9iaikpO1xufVxuLyoqXG4gKiBXcmFwIGFuIG9iamVjdCBpbiB0aGUgZXNjYXBlIG1hcmtlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICoge1wia2V5XCI6IFwidmFsdWVcIn0gIC8vIGJlY29tZXMge1wiX19sY19lc2NhcGVkX19cIjoge1wia2V5XCI6IFwidmFsdWVcIn19XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU9iamVjdChvYmopIHtcbiAgICByZXR1cm4geyBbTENfRVNDQVBFRF9LRVldOiBvYmogfTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGVzY2FwZWQgdXNlciBvYmplY3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHtcIl9fbGNfZXNjYXBlZF9fXCI6IHsuLi59fSAgLy8gaXMgYW4gZXNjYXBlZCBvYmplY3RcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFc2NhcGVkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMSAmJiBMQ19FU0NBUEVEX0tFWSBpbiBvYmo7XG59XG4vKipcbiAqIENoZWNrIGlmIGFuIG9iamVjdCBsb29rcyBsaWtlIGEgU2VyaWFsaXphYmxlIGluc3RhbmNlIChkdWNrIHR5cGluZykuXG4gKi9cbmZ1bmN0aW9uIGlzU2VyaWFsaXphYmxlTGlrZShvYmopIHtcbiAgICByZXR1cm4gKG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIFwibGNfc2VyaWFsaXphYmxlXCIgaW4gb2JqICYmXG4gICAgICAgIHR5cGVvZiBvYmoudG9KU09OID09PSBcImZ1bmN0aW9uXCIpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBcIm5vdF9pbXBsZW1lbnRlZFwiIHNlcmlhbGl6YXRpb24gcmVzdWx0IGZvciBvYmplY3RzIHRoYXQgY2Fubm90IGJlIHNlcmlhbGl6ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vdEltcGxlbWVudGVkKG9iaikge1xuICAgIGxldCBpZDtcbiAgICBpZiAob2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKFwibGNfaWRcIiBpbiBvYmogJiYgQXJyYXkuaXNBcnJheShvYmoubGNfaWQpKSB7XG4gICAgICAgICAgICBpZCA9IG9iai5sY19pZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkID0gW29iai5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBcIk9iamVjdFwiXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWQgPSBbdHlwZW9mIG9ial07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxjOiAxLFxuICAgICAgICB0eXBlOiBcIm5vdF9pbXBsZW1lbnRlZFwiLFxuICAgICAgICBpZCxcbiAgICB9O1xufVxuLyoqXG4gKiBTZXJpYWxpemUgYSB2YWx1ZSB3aXRoIGVzY2FwaW5nIG9mIHVzZXIgb2JqZWN0cy5cbiAqXG4gKiBDYWxsZWQgcmVjdXJzaXZlbHkgb24ga3dhcmcgdmFsdWVzIHRvIGVzY2FwZSBhbnkgcGxhaW4gb2JqZWN0cyB0aGF0IGNvdWxkIGJlXG4gKiBjb25mdXNlZCB3aXRoIExDIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSB2YWx1ZSB0byBzZXJpYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCB2YWx1ZSB3aXRoIHVzZXIgb2JqZWN0cyBlc2NhcGVkIGFzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZhbHVlKG9iaikge1xuICAgIGlmIChpc1NlcmlhbGl6YWJsZUxpa2Uob2JqKSkge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIExDIG9iamVjdCAtIHNlcmlhbGl6ZSBpdCBwcm9wZXJseSAobm90IGVzY2FwZWQpXG4gICAgICAgIHJldHVybiBzZXJpYWxpemVMY09iamVjdChvYmopO1xuICAgIH1cbiAgICBpZiAob2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBvYmo7XG4gICAgICAgIC8vIENoZWNrIGlmIG9iamVjdCBuZWVkcyBlc2NhcGluZyBCRUZPUkUgcmVjdXJzaW5nIGludG8gdmFsdWVzLlxuICAgICAgICAvLyBJZiBpdCBuZWVkcyBlc2NhcGluZywgd3JhcCBpdCBhcy1pcyAtIHRoZSBjb250ZW50cyBhcmUgdXNlciBkYXRhIHRoYXRcbiAgICAgICAgLy8gd2lsbCBiZSByZXR1cm5lZCBhcy1pcyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIChubyBpbnN0YW50aWF0aW9uKS5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyByZS1lc2NhcGluZyBvZiBhbHJlYWR5LWVzY2FwZWQgbmVzdGVkIGNvbnRlbnQuXG4gICAgICAgIGlmIChuZWVkc0VzY2FwaW5nKHJlY29yZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBlc2NhcGVPYmplY3QocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTYWZlIG9iamVjdCAobm8gJ2xjJyBrZXkpIC0gcmVjdXJzZSBpbnRvIHZhbHVlc1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBzZXJpYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gc2VyaWFsaXplVmFsdWUoaXRlbSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgIHR5cGVvZiBvYmogPT09IFwiYm9vbGVhblwiIHx8XG4gICAgICAgIG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICAvLyBOb24tSlNPTi1zZXJpYWxpemFibGUgb2JqZWN0IChEYXRlLCBjdXN0b20gb2JqZWN0cywgZXRjLilcbiAgICByZXR1cm4gY3JlYXRlTm90SW1wbGVtZW50ZWQob2JqKTtcbn1cbi8qKlxuICogU2VyaWFsaXplIGEgYFNlcmlhbGl6YWJsZWAgb2JqZWN0IHdpdGggZXNjYXBpbmcgb2YgdXNlciBkYXRhIGluIGt3YXJncy5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIGBTZXJpYWxpemFibGVgIG9iamVjdCB0byBzZXJpYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBvYmplY3Qgd2l0aCB1c2VyIGRhdGEgaW4ga3dhcmdzIGVzY2FwZWQgYXMgbmVlZGVkLlxuICpcbiAqIEByZW1hcmtzXG4gKiBLd2FyZ3MgdmFsdWVzIGFyZSBwcm9jZXNzZWQgd2l0aCBgc2VyaWFsaXplVmFsdWVgIHRvIGVzY2FwZSB1c2VyIGRhdGEgKGxpa2VcbiAqIG1ldGFkYXRhKSB0aGF0IGNvbnRhaW5zIGAnbGMnYCBrZXlzLiBTZWNyZXQgZmllbGRzIChmcm9tIGBsY19zZWNyZXRzYCkgYXJlXG4gKiBza2lwcGVkIGJlY2F1c2UgYHRvSlNPTigpYCByZXBsYWNlcyB0aGVpciB2YWx1ZXMgd2l0aCBzZWNyZXQgbWFya2Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxjT2JqZWN0KG9iaikge1xuICAgIC8vIFNlY3JldCBmaWVsZHMgYXJlIGhhbmRsZWQgYnkgdG9KU09OKCkgLSBpdCByZXBsYWNlcyB2YWx1ZXMgd2l0aCBzZWNyZXQgbWFya2Vyc1xuICAgIGNvbnN0IHNlY3JldEZpZWxkcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMob2JqLmxjX3NlY3JldHMgPz8ge30pKTtcbiAgICBjb25zdCBzZXJpYWxpemVkID0geyAuLi5vYmoudG9KU09OKCkgfTtcbiAgICAvLyBQcm9jZXNzIGt3YXJncyB0byBlc2NhcGUgdXNlciBkYXRhIHRoYXQgY291bGQgYmUgY29uZnVzZWQgd2l0aCBMQyBvYmplY3RzXG4gICAgLy8gU2tpcCBzZWNyZXQgZmllbGRzIC0gdG9KU09OKCkgYWxyZWFkeSBjb252ZXJ0ZWQgdGhlbSB0byBzZWNyZXQgbWFya2Vyc1xuICAgIGlmIChzZXJpYWxpemVkLnR5cGUgPT09IFwiY29uc3RydWN0b3JcIiAmJiBzZXJpYWxpemVkLmt3YXJncykge1xuICAgICAgICBjb25zdCBuZXdLd2FyZ3MgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VyaWFsaXplZC5rd2FyZ3MpKSB7XG4gICAgICAgICAgICBpZiAoc2VjcmV0RmllbGRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgbmV3S3dhcmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0t3YXJnc1trZXldID0gc2VyaWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQua3dhcmdzID0gbmV3S3dhcmdzO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplZDtcbn1cbi8qKlxuICogRXNjYXBlIGEgdmFsdWUgaWYgaXQgbmVlZHMgZXNjYXBpbmcgKGNvbnRhaW5zIGBsY2Aga2V5KS5cbiAqXG4gKiBUaGlzIGlzIGEgc2ltcGxlciB2ZXJzaW9uIG9mIGBzZXJpYWxpemVWYWx1ZWAgdGhhdCBkb2Vzbid0IGhhbmRsZSBTZXJpYWxpemFibGVcbiAqIG9iamVjdHMgLSBpdCdzIG1lYW50IHRvIGJlIGNhbGxlZCBvbiBrd2FyZ3MgdmFsdWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW5cbiAqIHByb2Nlc3NlZCBieSBgdG9KU09OKClgLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwb3RlbnRpYWxseSBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgd2l0aCBhbnkgYGxjYC1jb250YWluaW5nIG9iamVjdHMgd3JhcHBlZCBpbiBlc2NhcGUgbWFya2Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUlmTmVlZGVkKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gUHJlc2VydmUgU2VyaWFsaXphYmxlIG9iamVjdHMgLSB0aGV5IGhhdmUgdGhlaXIgb3duIHRvSlNPTigpIHRoYXQgd2lsbCBiZVxuICAgICAgICAvLyBjYWxsZWQgYnkgSlNPTi5zdHJpbmdpZnkuIFdlIGRvbid0IHdhbnQgdG8gY29udmVydCB0aGVtIHRvIHBsYWluIG9iamVjdHMuXG4gICAgICAgIGlmIChpc1NlcmlhbGl6YWJsZUxpa2UodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjb3JkID0gdmFsdWU7XG4gICAgICAgIC8vIENoZWNrIGlmIG9iamVjdCBuZWVkcyBlc2NhcGluZyBCRUZPUkUgcmVjdXJzaW5nIGludG8gdmFsdWVzLlxuICAgICAgICAvLyBJZiBpdCBuZWVkcyBlc2NhcGluZywgd3JhcCBpdCBhcy1pcyAtIHRoZSBjb250ZW50cyBhcmUgdXNlciBkYXRhIHRoYXRcbiAgICAgICAgLy8gd2lsbCBiZSByZXR1cm5lZCBhcy1pcyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIChubyBpbnN0YW50aWF0aW9uKS5cbiAgICAgICAgaWYgKG5lZWRzRXNjYXBpbmcocmVjb3JkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVzY2FwZU9iamVjdChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNhZmUgb2JqZWN0IChubyAnbGMnIGtleSkgLSByZWN1cnNlIGludG8gdmFsdWVzXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBlc2NhcGVJZk5lZWRlZCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiBlc2NhcGVJZk5lZWRlZChpdGVtKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogVW5lc2NhcGUgYSB2YWx1ZSwgcHJvY2Vzc2luZyBlc2NhcGUgbWFya2VycyBpbiBvYmplY3QgdmFsdWVzIGFuZCBhcnJheXMuXG4gKlxuICogV2hlbiBhbiBlc2NhcGVkIG9iamVjdCBpcyBlbmNvdW50ZXJlZCAoYHtcIl9fbGNfZXNjYXBlZF9fXCI6IC4uLn1gKSwgaXQnc1xuICogdW53cmFwcGVkIGFuZCB0aGUgY29udGVudHMgYXJlIHJldHVybmVkIEFTLUlTIChubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICogVGhlIGNvbnRlbnRzIHJlcHJlc2VudCB1c2VyIGRhdGEgdGhhdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLlxuICpcbiAqIEZvciByZWd1bGFyIG9iamVjdHMgYW5kIGFycmF5cywgd2UgcmVjdXJzZSB0byBmaW5kIGFueSBuZXN0ZWQgZXNjYXBlIG1hcmtlcnMuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSB2YWx1ZSB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSB1bmVzY2FwZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZVZhbHVlKG9iaikge1xuICAgIGlmIChvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG9iajtcbiAgICAgICAgaWYgKGlzRXNjYXBlZE9iamVjdChyZWNvcmQpKSB7XG4gICAgICAgICAgICAvLyBVbndyYXAgYW5kIHJldHVybiB0aGUgdXNlciBkYXRhIGFzLWlzIChubyBmdXJ0aGVyIHVuZXNjYXBpbmcpLlxuICAgICAgICAgICAgLy8gVGhlIGNvbnRlbnRzIGFyZSB1c2VyIGRhdGEgdGhhdCBtYXkgY29udGFpbiBtb3JlIGVzY2FwZSBrZXlzLFxuICAgICAgICAgICAgLy8gYnV0IHRob3NlIGFyZSBwYXJ0IG9mIHRoZSB1c2VyJ3MgYWN0dWFsIGRhdGEuXG4gICAgICAgICAgICByZXR1cm4gcmVjb3JkW0xDX0VTQ0FQRURfS0VZXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIG9iamVjdCAtIHJlY3Vyc2UgaW50byB2YWx1ZXMgdG8gZmluZCBuZXN0ZWQgZXNjYXBlIG1hcmtlcnNcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdW5lc2NhcGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gdW5lc2NhcGVWYWx1ZShpdGVtKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG4iLAogICAgImltcG9ydCB7IGtleVRvSnNvbiwgbWFwS2V5cyB9IGZyb20gXCIuL21hcF9rZXlzLmpzXCI7XG5pbXBvcnQgeyBlc2NhcGVJZk5lZWRlZCB9IGZyb20gXCIuL3ZhbGlkYXRpb24uanNcIjtcbmZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaikgPyBbLi4ub2JqXSA6IHsgLi4ub2JqIH07XG59XG5mdW5jdGlvbiByZXBsYWNlU2VjcmV0cyhyb290LCBzZWNyZXRzTWFwKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gc2hhbGxvd0NvcHkocm9vdCk7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgc2VjcmV0SWRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNNYXApKSB7XG4gICAgICAgIGNvbnN0IFtsYXN0LCAuLi5wYXJ0c1JldmVyc2VdID0gcGF0aC5zcGxpdChcIi5cIikucmV2ZXJzZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBsZXQgY3VycmVudCA9IHJlc3VsdDtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzUmV2ZXJzZS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50W3BhcnRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRbcGFydF0gPSBzaGFsbG93Q29weShjdXJyZW50W3BhcnRdKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50W2xhc3RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRbbGFzdF0gPSB7XG4gICAgICAgICAgICAgICAgbGM6IDEsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzZWNyZXRcIixcbiAgICAgICAgICAgICAgICBpZDogW3NlY3JldElkXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogR2V0IGEgdW5pcXVlIG5hbWUgZm9yIHRoZSBtb2R1bGUsIHJhdGhlciB0aGFuIHBhcmVudCBjbGFzcyBpbXBsZW1lbnRhdGlvbnMuXG4gKiBTaG91bGQgbm90IGJlIHN1YmNsYXNzZWQsIHN1YmNsYXNzIGxjX25hbWUgYWJvdmUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldF9sY191bmlxdWVfbmFtZShcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbnNlcmlhbGl6YWJsZUNsYXNzKSB7XG4gICAgLy8gXCJzdXBlclwiIGhlcmUgd291bGQgcmVmZXIgdG8gdGhlIHBhcmVudCBjbGFzcyBvZiBTZXJpYWxpemFibGUsXG4gICAgLy8gd2hlbiB3ZSB3YW50IHRoZSBwYXJlbnQgY2xhc3Mgb2YgdGhlIG1vZHVsZSBhY3R1YWxseSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxuICAgIGNvbnN0IHBhcmVudENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNlcmlhbGl6YWJsZUNsYXNzKTtcbiAgICBjb25zdCBsY05hbWVJc1N1YmNsYXNzZWQgPSB0eXBlb2Ygc2VyaWFsaXphYmxlQ2xhc3MubGNfbmFtZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICh0eXBlb2YgcGFyZW50Q2xhc3MubGNfbmFtZSAhPT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICBzZXJpYWxpemFibGVDbGFzcy5sY19uYW1lKCkgIT09IHBhcmVudENsYXNzLmxjX25hbWUoKSk7XG4gICAgaWYgKGxjTmFtZUlzU3ViY2xhc3NlZCkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXphYmxlQ2xhc3MubGNfbmFtZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6YWJsZUNsYXNzLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFNlcmlhbGl6YWJsZSB7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHNlcmlhbGl6YWJsZS4gT3ZlcnJpZGUgdG8gcHJvdmlkZSBhbiBhbGlhcyBvclxuICAgICAqIHRvIHByZXNlcnZlIHRoZSBzZXJpYWxpemVkIG1vZHVsZSBuYW1lIGluIG1pbmlmaWVkIGVudmlyb25tZW50cy5cbiAgICAgKlxuICAgICAqIEltcGxlbWVudGVkIGFzIGEgc3RhdGljIG1ldGhvZCB0byBzdXBwb3J0IGxvYWRpbmcgbG9naWMuXG4gICAgICovXG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBmaW5hbCBzZXJpYWxpemVkIGlkZW50aWZpZXIgZm9yIHRoZSBtb2R1bGUuXG4gICAgICovXG4gICAgZ2V0IGxjX2lkKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4udGhpcy5sY19uYW1lc3BhY2UsXG4gICAgICAgICAgICBnZXRfbGNfdW5pcXVlX25hbWUodGhpcy5jb25zdHJ1Y3RvciksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIHNlY3JldHMsIHdoaWNoIHdpbGwgYmUgb21pdHRlZCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gICAgICogS2V5cyBhcmUgcGF0aHMgdG8gdGhlIHNlY3JldCBpbiBjb25zdHJ1Y3RvciBhcmdzLCBlLmcuIFwiZm9vLmJhci5iYXpcIi5cbiAgICAgKiBWYWx1ZXMgYXJlIHRoZSBzZWNyZXQgaWRzLCB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbiBkZXNlcmlhbGl6aW5nLlxuICAgICAqL1xuICAgIGdldCBsY19zZWNyZXRzKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIG1hcCBvZiBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdG8gbWVyZ2Ugd2l0aCBjb25zdHJ1Y3RvciBhcmdzLlxuICAgICAqIEtleXMgYXJlIHRoZSBhdHRyaWJ1dGUgbmFtZXMsIGUuZy4gXCJmb29cIi5cbiAgICAgKiBWYWx1ZXMgYXJlIHRoZSBhdHRyaWJ1dGUgdmFsdWVzLCB3aGljaCB3aWxsIGJlIHNlcmlhbGl6ZWQuXG4gICAgICogVGhlc2UgYXR0cmlidXRlcyBuZWVkIHRvIGJlIGFjY2VwdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBhcyBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZ2V0IGxjX2F0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIGFsaWFzZXMgZm9yIGNvbnN0cnVjdG9yIGFyZ3MuXG4gICAgICogS2V5cyBhcmUgdGhlIGF0dHJpYnV0ZSBuYW1lcywgZS5nLiBcImZvb1wiLlxuICAgICAqIFZhbHVlcyBhcmUgdGhlIGFsaWFzIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBrZXkgaW4gc2VyaWFsaXphdGlvbi5cbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZWcuIG1ha2UgYXJndW1lbnQgbmFtZXMgbWF0Y2ggUHl0aG9uLlxuICAgICAqL1xuICAgIGdldCBsY19hbGlhc2VzKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIG1hbnVhbCBsaXN0IG9mIGtleXMgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZC5cbiAgICAgKiBJZiBub3Qgb3ZlcnJpZGRlbiwgYWxsIGZpZWxkcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSBzZXJpYWxpemVkLlxuICAgICAqL1xuICAgIGdldCBsY19zZXJpYWxpemFibGVfa2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioa3dhcmdzLCAuLi5fYXJncykge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJsY19zZXJpYWxpemFibGVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJsY19rd2FyZ3NcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMubGNfc2VyaWFsaXphYmxlX2tleXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5sY19rd2FyZ3MgPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoa3dhcmdzIHx8IHt9KS5maWx0ZXIoKFtrZXldKSA9PiB0aGlzLmxjX3NlcmlhbGl6YWJsZV9rZXlzPy5pbmNsdWRlcyhrZXkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxjX2t3YXJncyA9IGt3YXJncyA/PyB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGlmICghdGhpcy5sY19zZXJpYWxpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvSlNPTk5vdEltcGxlbWVudGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW5zdGFuY2VvZi9uby1pbnN0YW5jZW9mXG4gICAgICAgIHRoaXMubGNfa3dhcmdzIGluc3RhbmNlb2YgU2VyaWFsaXphYmxlIHx8XG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5sY19rd2FyZ3MgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5sY19rd2FyZ3MpKSB7XG4gICAgICAgICAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBzZXJpYWxpemF0aW9uIG9mIGNsYXNzZXMgd2l0aCBhcmcgbm90IGEgUE9KT1xuICAgICAgICAgICAgLy8gSSdtIGF3YXJlIHRoZSBjaGVjayBhYm92ZSBpc24ndCBhcyBzdHJpY3QgYXMgaXQgY291bGQgYmVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvSlNPTk5vdEltcGxlbWVudGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IHt9O1xuICAgICAgICBjb25zdCBzZWNyZXRzID0ge307XG4gICAgICAgIGNvbnN0IGt3YXJncyA9IE9iamVjdC5rZXlzKHRoaXMubGNfa3dhcmdzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IGtleSBpbiB0aGlzID8gdGhpc1trZXldIDogdGhpcy5sY19rd2FyZ3Nba2V5XTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgLy8gZ2V0IHNlY3JldHMsIGF0dHJpYnV0ZXMgYW5kIGFsaWFzZXMgZnJvbSBhbGwgc3VwZXJjbGFzc2VzXG4gICAgICAgIGZvciAoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBsZXQgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTsgY3VycmVudDsgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhbGlhc2VzLCBSZWZsZWN0LmdldChjdXJyZW50LCBcImxjX2FsaWFzZXNcIiwgdGhpcykpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWNyZXRzLCBSZWZsZWN0LmdldChjdXJyZW50LCBcImxjX3NlY3JldHNcIiwgdGhpcykpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihrd2FyZ3MsIFJlZmxlY3QuZ2V0KGN1cnJlbnQsIFwibGNfYXR0cmlidXRlc1wiLCB0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW5jbHVkZSBhbGwgc2VjcmV0cyB1c2VkLCBldmVuIGlmIG5vdCBpbiBrd2FyZ3MsXG4gICAgICAgIC8vIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBzZW50aW5lbCB2YWx1ZSBpbiByZXBsYWNlU2VjcmV0c1xuICAgICAgICBPYmplY3Qua2V5cyhzZWNyZXRzKS5mb3JFYWNoKChrZXlQYXRoKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGxldCByZWFkID0gdGhpcztcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBsZXQgd3JpdGUgPSBrd2FyZ3M7XG4gICAgICAgICAgICBjb25zdCBbbGFzdCwgLi4ucGFydHNSZXZlcnNlXSA9IGtleVBhdGguc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHBhcnRzUmV2ZXJzZS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gcmVhZCkgfHwgcmVhZFtrZXldID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gd3JpdGUpIHx8IHdyaXRlW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlYWRba2V5XSA9PT0gXCJvYmplY3RcIiAmJiByZWFkW2tleV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVhZFtrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVba2V5XSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlYWQgPSByZWFkW2tleV07XG4gICAgICAgICAgICAgICAgd3JpdGUgPSB3cml0ZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxhc3QgaW4gcmVhZCAmJiByZWFkW2xhc3RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB3cml0ZVtsYXN0XSA9IHdyaXRlW2xhc3RdIHx8IHJlYWRbbGFzdF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlc2NhcGVkS3dhcmdzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGt3YXJncykpIHtcbiAgICAgICAgICAgIGVzY2FwZWRLd2FyZ3Nba2V5XSA9IGVzY2FwZUlmTmVlZGVkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgYWRkIHNlY3JldCBtYXJrZXJzIC0gdGhlc2UgYXJlIGFkZGVkIEFGVEVSIGVzY2FwaW5nIHNvIHRoZXkgd29uJ3QgYmUgZXNjYXBlZFxuICAgICAgICBjb25zdCBrd2FyZ3NXaXRoU2VjcmV0cyA9IE9iamVjdC5rZXlzKHNlY3JldHMpLmxlbmd0aFxuICAgICAgICAgICAgPyByZXBsYWNlU2VjcmV0cyhlc2NhcGVkS3dhcmdzLCBzZWNyZXRzKVxuICAgICAgICAgICAgOiBlc2NhcGVkS3dhcmdzO1xuICAgICAgICAvLyBGaW5hbGx5IHRyYW5zZm9ybSBrZXlzIHRvIEpTT04gZm9ybWF0XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZEt3YXJncyA9IG1hcEtleXMoa3dhcmdzV2l0aFNlY3JldHMsIGtleVRvSnNvbiwgYWxpYXNlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYzogMSxcbiAgICAgICAgICAgIHR5cGU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgIGlkOiB0aGlzLmxjX2lkLFxuICAgICAgICAgICAga3dhcmdzOiBwcm9jZXNzZWRLd2FyZ3MsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvSlNPTk5vdEltcGxlbWVudGVkKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGM6IDEsXG4gICAgICAgICAgICB0eXBlOiBcIm5vdF9pbXBsZW1lbnRlZFwiLFxuICAgICAgICAgICAgaWQ6IHRoaXMubGNfaWQsXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwKICAgICJleHBvcnQgY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuZXhwb3J0IGNvbnN0IGlzV2ViV29ya2VyID0gKCkgPT4gdHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBnbG9iYWxUaGlzLmNvbnN0cnVjdG9yICYmXG4gICAgZ2xvYmFsVGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCI7XG5leHBvcnQgY29uc3QgaXNKc0RvbSA9ICgpID0+ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5uYW1lID09PSBcIm5vZGVqc1wiKSB8fFxuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKSk7XG4vLyBTdXBhYmFzZSBFZGdlIEZ1bmN0aW9uIHByb3ZpZGVzIGEgYERlbm9gIGdsb2JhbCBvYmplY3Rcbi8vIHdpdGhvdXQgYHZlcnNpb25gIHByb3BlcnR5XG5leHBvcnQgY29uc3QgaXNEZW5vID0gKCkgPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG4vLyBNYXJrIG5vdC1hcy1ub2RlIGlmIGluIFN1cGFiYXNlIEVkZ2UgRnVuY3Rpb25cbmV4cG9ydCBjb25zdCBpc05vZGUgPSAoKSA9PiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICFpc0Rlbm8oKTtcbmV4cG9ydCBjb25zdCBnZXRFbnYgPSAoKSA9PiB7XG4gICAgbGV0IGVudjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgZW52ID0gXCJicm93c2VyXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGVudiA9IFwibm9kZVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1dlYldvcmtlcigpKSB7XG4gICAgICAgIGVudiA9IFwid2Vid29ya2VyXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzSnNEb20oKSkge1xuICAgICAgICBlbnYgPSBcImpzZG9tXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRGVubygpKSB7XG4gICAgICAgIGVudiA9IFwiZGVub1wiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW52ID0gXCJvdGhlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZW52O1xufTtcbmxldCBydW50aW1lRW52aXJvbm1lbnQ7XG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBnZXRSdW50aW1lRW52aXJvbm1lbnRTeW5jIGluc3RlYWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJ1bnRpbWVFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gZ2V0UnVudGltZUVudmlyb25tZW50U3luYygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bnRpbWVFbnZpcm9ubWVudFN5bmMoKSB7XG4gICAgaWYgKHJ1bnRpbWVFbnZpcm9ubWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IGdldEVudigpO1xuICAgICAgICBydW50aW1lRW52aXJvbm1lbnQgPSB7XG4gICAgICAgICAgICBsaWJyYXJ5OiBcImxhbmdjaGFpbi1qc1wiLFxuICAgICAgICAgICAgcnVudGltZTogZW52LFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcnVudGltZUVudmlyb25tZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudmlyb25tZW50VmFyaWFibGUobmFtZSkge1xuICAgIC8vIENlcnRhaW4gRGVubyBzZXR1cHMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB5b3UgdHJ5IHRvIGFjY2VzcyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NoYWluLWFpL2xhbmdjaGFpbmpzL2lzc3Vlcy8xNDEyXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1lbnZcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLmVudj8uW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRGVubygpKSB7XG4gICAgICAgICAgICByZXR1cm4gRGVubz8uZW52LmdldChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIHV1aWQgZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IFNlcmlhbGl6YWJsZSwgZ2V0X2xjX3VuaXF1ZV9uYW1lLCB9IGZyb20gXCIuLi9sb2FkL3NlcmlhbGl6YWJsZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZSB9IGZyb20gXCIuLi91dGlscy9lbnYuanNcIjtcbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgdGhhdCBwcm92aWRlcyBhIHNldCBvZiBvcHRpb25hbCBtZXRob2RzIHRoYXQgY2FuIGJlXG4gKiBvdmVycmlkZGVuIGluIGRlcml2ZWQgY2xhc3NlcyB0byBoYW5kbGUgdmFyaW91cyBldmVudHMgZHVyaW5nIHRoZVxuICogZXhlY3V0aW9uIG9mIGEgTGFuZ0NoYWluIGFwcGxpY2F0aW9uLlxuICovXG5jbGFzcyBCYXNlQ2FsbGJhY2tIYW5kbGVyTWV0aG9kc0NsYXNzIHtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxsYmFja0hhbmRsZXJQcmVmZXJzU3RyZWFtaW5nKHgpIHtcbiAgICByZXR1cm4gXCJsY19wcmVmZXJfc3RyZWFtaW5nXCIgaW4geCAmJiB4LmxjX3ByZWZlcl9zdHJlYW1pbmc7XG59XG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGNhbGxiYWNrIGhhbmRsZXJzIGluIHRoZSBMYW5nQ2hhaW5cbiAqIGZyYW1ld29yay4gSXQgcHJvdmlkZXMgYSBzZXQgb2Ygb3B0aW9uYWwgbWV0aG9kcyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuXG4gKiBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gaGFuZGxlIHZhcmlvdXMgZXZlbnRzIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGFcbiAqIExhbmdDaGFpbiBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VDYWxsYmFja0hhbmRsZXIgZXh0ZW5kcyBCYXNlQ2FsbGJhY2tIYW5kbGVyTWV0aG9kc0NsYXNzIHtcbiAgICBnZXQgbGNfbmFtZXNwYWNlKCkge1xuICAgICAgICByZXR1cm4gW1wibGFuZ2NoYWluX2NvcmVcIiwgXCJjYWxsYmFja3NcIiwgdGhpcy5uYW1lXTtcbiAgICB9XG4gICAgZ2V0IGxjX3NlY3JldHMoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBsY19hdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgbGNfYWxpYXNlcygpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGxjX3NlcmlhbGl6YWJsZV9rZXlzKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VyaWFsaXphYmxlLiBPdmVycmlkZSB0byBwcm92aWRlIGFuIGFsaWFzIG9yXG4gICAgICogdG8gcHJlc2VydmUgdGhlIHNlcmlhbGl6ZWQgbW9kdWxlIG5hbWUgaW4gbWluaWZpZWQgZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgYSBzdGF0aWMgbWV0aG9kIHRvIHN1cHBvcnQgbG9hZGluZyBsb2dpYy5cbiAgICAgKi9cbiAgICBzdGF0aWMgbGNfbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpbmFsIHNlcmlhbGl6ZWQgaWRlbnRpZmllciBmb3IgdGhlIG1vZHVsZS5cbiAgICAgKi9cbiAgICBnZXQgbGNfaWQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50aGlzLmxjX25hbWVzcGFjZSxcbiAgICAgICAgICAgIGdldF9sY191bmlxdWVfbmFtZSh0aGlzLmNvbnN0cnVjdG9yKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibGNfc2VyaWFsaXphYmxlXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibGNfa3dhcmdzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlnbm9yZUxMTVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlnbm9yZUNoYWluXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaWdub3JlQWdlbnRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpZ25vcmVSZXRyaWV2ZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpZ25vcmVDdXN0b21FdmVudFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJhaXNlRXJyb3JcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJhd2FpdEhhbmRsZXJzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBnZXRFbnZpcm9ubWVudFZhcmlhYmxlKFwiTEFOR0NIQUlOX0NBTExCQUNLU19CQUNLR1JPVU5EXCIpID09PSBcImZhbHNlXCJcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGNfa3dhcmdzID0gaW5wdXQgfHwge307XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVMTE0gPSBpbnB1dC5pZ25vcmVMTE0gPz8gdGhpcy5pZ25vcmVMTE07XG4gICAgICAgICAgICB0aGlzLmlnbm9yZUNoYWluID0gaW5wdXQuaWdub3JlQ2hhaW4gPz8gdGhpcy5pZ25vcmVDaGFpbjtcbiAgICAgICAgICAgIHRoaXMuaWdub3JlQWdlbnQgPSBpbnB1dC5pZ25vcmVBZ2VudCA/PyB0aGlzLmlnbm9yZUFnZW50O1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVSZXRyaWV2ZXIgPSBpbnB1dC5pZ25vcmVSZXRyaWV2ZXIgPz8gdGhpcy5pZ25vcmVSZXRyaWV2ZXI7XG4gICAgICAgICAgICB0aGlzLmlnbm9yZUN1c3RvbUV2ZW50ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5pZ25vcmVDdXN0b21FdmVudCA/PyB0aGlzLmlnbm9yZUN1c3RvbUV2ZW50O1xuICAgICAgICAgICAgdGhpcy5yYWlzZUVycm9yID0gaW5wdXQucmFpc2VFcnJvciA/PyB0aGlzLnJhaXNlRXJyb3I7XG4gICAgICAgICAgICB0aGlzLmF3YWl0SGFuZGxlcnMgPVxuICAgICAgICAgICAgICAgIHRoaXMucmFpc2VFcnJvciB8fCAoaW5wdXQuX2F3YWl0SGFuZGxlciA/PyB0aGlzLmF3YWl0SGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gU2VyaWFsaXphYmxlLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgdG9KU09OTm90SW1wbGVtZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiBTZXJpYWxpemFibGUucHJvdG90eXBlLnRvSlNPTk5vdEltcGxlbWVudGVkLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tTWV0aG9kcyhtZXRob2RzKSB7XG4gICAgICAgIGNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBCYXNlQ2FsbGJhY2tIYW5kbGVyIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1dWlkLnY0KClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG1ldGhvZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSGFuZGxlcigpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBpc0Jhc2VDYWxsYmFja0hhbmRsZXIgPSAoeCkgPT4ge1xuICAgIGNvbnN0IGNhbGxiYWNrSGFuZGxlciA9IHg7XG4gICAgcmV0dXJuIChjYWxsYmFja0hhbmRsZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgY2FsbGJhY2tIYW5kbGVyLmNvcHkgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgY2FsbGJhY2tIYW5kbGVyLm5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgdHlwZW9mIGNhbGxiYWNrSGFuZGxlci5hd2FpdEhhbmRsZXJzID09PSBcImJvb2xlYW5cIik7XG59O1xuIiwKICAgICJleHBvcnQgKiBmcm9tICcuLi9kaXN0L2NhbGxiYWNrcy9iYXNlLmpzJyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmtleVRvSnNvbiA9IGtleVRvSnNvbjtcbmV4cG9ydHMua2V5RnJvbUpzb24gPSBrZXlGcm9tSnNvbjtcbmV4cG9ydHMubWFwS2V5cyA9IG1hcEtleXM7XG5jb25zdCBkZWNhbWVsaXplXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImRlY2FtZWxpemVcIikpO1xuY29uc3QgY2FtZWxjYXNlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImNhbWVsY2FzZVwiKSk7XG5mdW5jdGlvbiBrZXlUb0pzb24oa2V5LCBtYXApIHtcbiAgICByZXR1cm4gbWFwPy5ba2V5XSB8fCAoMCwgZGVjYW1lbGl6ZV8xLmRlZmF1bHQpKGtleSk7XG59XG5mdW5jdGlvbiBrZXlGcm9tSnNvbihrZXksIG1hcCkge1xuICAgIHJldHVybiBtYXA/LltrZXldIHx8ICgwLCBjYW1lbGNhc2VfMS5kZWZhdWx0KShrZXkpO1xufVxuZnVuY3Rpb24gbWFwS2V5cyhmaWVsZHMsIG1hcHBlciwgbWFwKSB7XG4gICAgY29uc3QgbWFwcGVkID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGZpZWxkcywga2V5KSkge1xuICAgICAgICAgICAgbWFwcGVkW21hcHBlcihrZXksIG1hcCldID0gZmllbGRzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlZDtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkxDX0VTQ0FQRURfS0VZID0gdm9pZCAwO1xuZXhwb3J0cy5uZWVkc0VzY2FwaW5nID0gbmVlZHNFc2NhcGluZztcbmV4cG9ydHMuZXNjYXBlT2JqZWN0ID0gZXNjYXBlT2JqZWN0O1xuZXhwb3J0cy5pc0VzY2FwZWRPYmplY3QgPSBpc0VzY2FwZWRPYmplY3Q7XG5leHBvcnRzLnNlcmlhbGl6ZVZhbHVlID0gc2VyaWFsaXplVmFsdWU7XG5leHBvcnRzLnNlcmlhbGl6ZUxjT2JqZWN0ID0gc2VyaWFsaXplTGNPYmplY3Q7XG5leHBvcnRzLmVzY2FwZUlmTmVlZGVkID0gZXNjYXBlSWZOZWVkZWQ7XG5leHBvcnRzLnVuZXNjYXBlVmFsdWUgPSB1bmVzY2FwZVZhbHVlO1xuLyoqXG4gKiBTZW50aW5lbCBrZXkgdXNlZCB0byBtYXJrIGVzY2FwZWQgdXNlciBvYmplY3RzIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIFdoZW4gYSBwbGFpbiBvYmplY3QgY29udGFpbnMgJ2xjJyBrZXkgKHdoaWNoIGNvdWxkIGJlIGNvbmZ1c2VkIHdpdGggTEMgb2JqZWN0cyksXG4gKiB3ZSB3cmFwIGl0IGFzIGB7XCJfX2xjX2VzY2FwZWRfX1wiOiB7Li4ub3JpZ2luYWwuLi59fWAuXG4gKi9cbmV4cG9ydHMuTENfRVNDQVBFRF9LRVkgPSBcIl9fbGNfZXNjYXBlZF9fXCI7XG4vKipcbiAqIENoZWNrIGlmIGFuIG9iamVjdCBuZWVkcyBlc2NhcGluZyB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoIExDIG9iamVjdHMuXG4gKlxuICogQW4gb2JqZWN0IG5lZWRzIGVzY2FwaW5nIGlmOlxuICogMS4gSXQgaGFzIGFuIGAnbGMnYCBrZXkgKGNvdWxkIGJlIGNvbmZ1c2VkIHdpdGggTEMgc2VyaWFsaXphdGlvbiBmb3JtYXQpXG4gKiAyLiBJdCBoYXMgb25seSB0aGUgZXNjYXBlIGtleSAod291bGQgYmUgbWlzdGFrZW4gZm9yIGFuIGVzY2FwZWQgb2JqZWN0KVxuICovXG5mdW5jdGlvbiBuZWVkc0VzY2FwaW5nKG9iaikge1xuICAgIHJldHVybiAoXCJsY1wiIGluIG9iaiB8fCAoT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDEgJiYgZXhwb3J0cy5MQ19FU0NBUEVEX0tFWSBpbiBvYmopKTtcbn1cbi8qKlxuICogV3JhcCBhbiBvYmplY3QgaW4gdGhlIGVzY2FwZSBtYXJrZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHtcImtleVwiOiBcInZhbHVlXCJ9ICAvLyBiZWNvbWVzIHtcIl9fbGNfZXNjYXBlZF9fXCI6IHtcImtleVwiOiBcInZhbHVlXCJ9fVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZU9iamVjdChvYmopIHtcbiAgICByZXR1cm4geyBbZXhwb3J0cy5MQ19FU0NBUEVEX0tFWV06IG9iaiB9O1xufVxuLyoqXG4gKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gZXNjYXBlZCB1c2VyIG9iamVjdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICoge1wiX19sY19lc2NhcGVkX19cIjogey4uLn19ICAvLyBpcyBhbiBlc2NhcGVkIG9iamVjdFxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGlzRXNjYXBlZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDEgJiYgZXhwb3J0cy5MQ19FU0NBUEVEX0tFWSBpbiBvYmo7XG59XG4vKipcbiAqIENoZWNrIGlmIGFuIG9iamVjdCBsb29rcyBsaWtlIGEgU2VyaWFsaXphYmxlIGluc3RhbmNlIChkdWNrIHR5cGluZykuXG4gKi9cbmZ1bmN0aW9uIGlzU2VyaWFsaXphYmxlTGlrZShvYmopIHtcbiAgICByZXR1cm4gKG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIFwibGNfc2VyaWFsaXphYmxlXCIgaW4gb2JqICYmXG4gICAgICAgIHR5cGVvZiBvYmoudG9KU09OID09PSBcImZ1bmN0aW9uXCIpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBcIm5vdF9pbXBsZW1lbnRlZFwiIHNlcmlhbGl6YXRpb24gcmVzdWx0IGZvciBvYmplY3RzIHRoYXQgY2Fubm90IGJlIHNlcmlhbGl6ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vdEltcGxlbWVudGVkKG9iaikge1xuICAgIGxldCBpZDtcbiAgICBpZiAob2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKFwibGNfaWRcIiBpbiBvYmogJiYgQXJyYXkuaXNBcnJheShvYmoubGNfaWQpKSB7XG4gICAgICAgICAgICBpZCA9IG9iai5sY19pZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkID0gW29iai5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBcIk9iamVjdFwiXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWQgPSBbdHlwZW9mIG9ial07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxjOiAxLFxuICAgICAgICB0eXBlOiBcIm5vdF9pbXBsZW1lbnRlZFwiLFxuICAgICAgICBpZCxcbiAgICB9O1xufVxuLyoqXG4gKiBTZXJpYWxpemUgYSB2YWx1ZSB3aXRoIGVzY2FwaW5nIG9mIHVzZXIgb2JqZWN0cy5cbiAqXG4gKiBDYWxsZWQgcmVjdXJzaXZlbHkgb24ga3dhcmcgdmFsdWVzIHRvIGVzY2FwZSBhbnkgcGxhaW4gb2JqZWN0cyB0aGF0IGNvdWxkIGJlXG4gKiBjb25mdXNlZCB3aXRoIExDIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSB2YWx1ZSB0byBzZXJpYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCB2YWx1ZSB3aXRoIHVzZXIgb2JqZWN0cyBlc2NhcGVkIGFzIG5lZWRlZC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplVmFsdWUob2JqKSB7XG4gICAgaWYgKGlzU2VyaWFsaXphYmxlTGlrZShvYmopKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gTEMgb2JqZWN0IC0gc2VyaWFsaXplIGl0IHByb3Blcmx5IChub3QgZXNjYXBlZClcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUxjT2JqZWN0KG9iaik7XG4gICAgfVxuICAgIGlmIChvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG9iajtcbiAgICAgICAgLy8gQ2hlY2sgaWYgb2JqZWN0IG5lZWRzIGVzY2FwaW5nIEJFRk9SRSByZWN1cnNpbmcgaW50byB2YWx1ZXMuXG4gICAgICAgIC8vIElmIGl0IG5lZWRzIGVzY2FwaW5nLCB3cmFwIGl0IGFzLWlzIC0gdGhlIGNvbnRlbnRzIGFyZSB1c2VyIGRhdGEgdGhhdFxuICAgICAgICAvLyB3aWxsIGJlIHJldHVybmVkIGFzLWlzIGR1cmluZyBkZXNlcmlhbGl6YXRpb24gKG5vIGluc3RhbnRpYXRpb24pLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHJlLWVzY2FwaW5nIG9mIGFscmVhZHktZXNjYXBlZCBuZXN0ZWQgY29udGVudC5cbiAgICAgICAgaWYgKG5lZWRzRXNjYXBpbmcocmVjb3JkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVzY2FwZU9iamVjdChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNhZmUgb2JqZWN0IChubyAnbGMnIGtleSkgLSByZWN1cnNlIGludG8gdmFsdWVzXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHNlcmlhbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiBzZXJpYWxpemVWYWx1ZShpdGVtKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgdHlwZW9mIG9iaiA9PT0gXCJib29sZWFuXCIgfHxcbiAgICAgICAgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIC8vIE5vbi1KU09OLXNlcmlhbGl6YWJsZSBvYmplY3QgKERhdGUsIGN1c3RvbSBvYmplY3RzLCBldGMuKVxuICAgIHJldHVybiBjcmVhdGVOb3RJbXBsZW1lbnRlZChvYmopO1xufVxuLyoqXG4gKiBTZXJpYWxpemUgYSBgU2VyaWFsaXphYmxlYCBvYmplY3Qgd2l0aCBlc2NhcGluZyBvZiB1c2VyIGRhdGEgaW4ga3dhcmdzLlxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgYFNlcmlhbGl6YWJsZWAgb2JqZWN0IHRvIHNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBzZXJpYWxpemVkIG9iamVjdCB3aXRoIHVzZXIgZGF0YSBpbiBrd2FyZ3MgZXNjYXBlZCBhcyBuZWVkZWQuXG4gKlxuICogQHJlbWFya3NcbiAqIEt3YXJncyB2YWx1ZXMgYXJlIHByb2Nlc3NlZCB3aXRoIGBzZXJpYWxpemVWYWx1ZWAgdG8gZXNjYXBlIHVzZXIgZGF0YSAobGlrZVxuICogbWV0YWRhdGEpIHRoYXQgY29udGFpbnMgYCdsYydgIGtleXMuIFNlY3JldCBmaWVsZHMgKGZyb20gYGxjX3NlY3JldHNgKSBhcmVcbiAqIHNraXBwZWQgYmVjYXVzZSBgdG9KU09OKClgIHJlcGxhY2VzIHRoZWlyIHZhbHVlcyB3aXRoIHNlY3JldCBtYXJrZXJzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVMY09iamVjdChvYmopIHtcbiAgICAvLyBTZWNyZXQgZmllbGRzIGFyZSBoYW5kbGVkIGJ5IHRvSlNPTigpIC0gaXQgcmVwbGFjZXMgdmFsdWVzIHdpdGggc2VjcmV0IG1hcmtlcnNcbiAgICBjb25zdCBzZWNyZXRGaWVsZHMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG9iai5sY19zZWNyZXRzID8/IHt9KSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHsgLi4ub2JqLnRvSlNPTigpIH07XG4gICAgLy8gUHJvY2VzcyBrd2FyZ3MgdG8gZXNjYXBlIHVzZXIgZGF0YSB0aGF0IGNvdWxkIGJlIGNvbmZ1c2VkIHdpdGggTEMgb2JqZWN0c1xuICAgIC8vIFNraXAgc2VjcmV0IGZpZWxkcyAtIHRvSlNPTigpIGFscmVhZHkgY29udmVydGVkIHRoZW0gdG8gc2VjcmV0IG1hcmtlcnNcbiAgICBpZiAoc2VyaWFsaXplZC50eXBlID09PSBcImNvbnN0cnVjdG9yXCIgJiYgc2VyaWFsaXplZC5rd2FyZ3MpIHtcbiAgICAgICAgY29uc3QgbmV3S3dhcmdzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlcmlhbGl6ZWQua3dhcmdzKSkge1xuICAgICAgICAgICAgaWYgKHNlY3JldEZpZWxkcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIG5ld0t3YXJnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdLd2FyZ3Nba2V5XSA9IHNlcmlhbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemVkLmt3YXJncyA9IG5ld0t3YXJncztcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG59XG4vKipcbiAqIEVzY2FwZSBhIHZhbHVlIGlmIGl0IG5lZWRzIGVzY2FwaW5nIChjb250YWlucyBgbGNgIGtleSkuXG4gKlxuICogVGhpcyBpcyBhIHNpbXBsZXIgdmVyc2lvbiBvZiBgc2VyaWFsaXplVmFsdWVgIHRoYXQgZG9lc24ndCBoYW5kbGUgU2VyaWFsaXphYmxlXG4gKiBvYmplY3RzIC0gaXQncyBtZWFudCB0byBiZSBjYWxsZWQgb24ga3dhcmdzIHZhbHVlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuXG4gKiBwcm9jZXNzZWQgYnkgYHRvSlNPTigpYC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcG90ZW50aWFsbHkgZXNjYXBlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHdpdGggYW55IGBsY2AtY29udGFpbmluZyBvYmplY3RzIHdyYXBwZWQgaW4gZXNjYXBlIG1hcmtlcnMuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUlmTmVlZGVkKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gUHJlc2VydmUgU2VyaWFsaXphYmxlIG9iamVjdHMgLSB0aGV5IGhhdmUgdGhlaXIgb3duIHRvSlNPTigpIHRoYXQgd2lsbCBiZVxuICAgICAgICAvLyBjYWxsZWQgYnkgSlNPTi5zdHJpbmdpZnkuIFdlIGRvbid0IHdhbnQgdG8gY29udmVydCB0aGVtIHRvIHBsYWluIG9iamVjdHMuXG4gICAgICAgIGlmIChpc1NlcmlhbGl6YWJsZUxpa2UodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjb3JkID0gdmFsdWU7XG4gICAgICAgIC8vIENoZWNrIGlmIG9iamVjdCBuZWVkcyBlc2NhcGluZyBCRUZPUkUgcmVjdXJzaW5nIGludG8gdmFsdWVzLlxuICAgICAgICAvLyBJZiBpdCBuZWVkcyBlc2NhcGluZywgd3JhcCBpdCBhcy1pcyAtIHRoZSBjb250ZW50cyBhcmUgdXNlciBkYXRhIHRoYXRcbiAgICAgICAgLy8gd2lsbCBiZSByZXR1cm5lZCBhcy1pcyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIChubyBpbnN0YW50aWF0aW9uKS5cbiAgICAgICAgaWYgKG5lZWRzRXNjYXBpbmcocmVjb3JkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVzY2FwZU9iamVjdChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNhZmUgb2JqZWN0IChubyAnbGMnIGtleSkgLSByZWN1cnNlIGludG8gdmFsdWVzXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBlc2NhcGVJZk5lZWRlZCh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiBlc2NhcGVJZk5lZWRlZChpdGVtKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogVW5lc2NhcGUgYSB2YWx1ZSwgcHJvY2Vzc2luZyBlc2NhcGUgbWFya2VycyBpbiBvYmplY3QgdmFsdWVzIGFuZCBhcnJheXMuXG4gKlxuICogV2hlbiBhbiBlc2NhcGVkIG9iamVjdCBpcyBlbmNvdW50ZXJlZCAoYHtcIl9fbGNfZXNjYXBlZF9fXCI6IC4uLn1gKSwgaXQnc1xuICogdW53cmFwcGVkIGFuZCB0aGUgY29udGVudHMgYXJlIHJldHVybmVkIEFTLUlTIChubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICogVGhlIGNvbnRlbnRzIHJlcHJlc2VudCB1c2VyIGRhdGEgdGhhdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLlxuICpcbiAqIEZvciByZWd1bGFyIG9iamVjdHMgYW5kIGFycmF5cywgd2UgcmVjdXJzZSB0byBmaW5kIGFueSBuZXN0ZWQgZXNjYXBlIG1hcmtlcnMuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSB2YWx1ZSB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSB1bmVzY2FwZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHVuZXNjYXBlVmFsdWUob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gb2JqO1xuICAgICAgICBpZiAoaXNFc2NhcGVkT2JqZWN0KHJlY29yZCkpIHtcbiAgICAgICAgICAgIC8vIFVud3JhcCBhbmQgcmV0dXJuIHRoZSB1c2VyIGRhdGEgYXMtaXMgKG5vIGZ1cnRoZXIgdW5lc2NhcGluZykuXG4gICAgICAgICAgICAvLyBUaGUgY29udGVudHMgYXJlIHVzZXIgZGF0YSB0aGF0IG1heSBjb250YWluIG1vcmUgZXNjYXBlIGtleXMsXG4gICAgICAgICAgICAvLyBidXQgdGhvc2UgYXJlIHBhcnQgb2YgdGhlIHVzZXIncyBhY3R1YWwgZGF0YS5cbiAgICAgICAgICAgIHJldHVybiByZWNvcmRbZXhwb3J0cy5MQ19FU0NBUEVEX0tFWV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVndWxhciBvYmplY3QgLSByZWN1cnNlIGludG8gdmFsdWVzIHRvIGZpbmQgbmVzdGVkIGVzY2FwZSBtYXJrZXJzXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHVuZXNjYXBlVmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHVuZXNjYXBlVmFsdWUoaXRlbSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VyaWFsaXphYmxlID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRfbGNfdW5pcXVlX25hbWUgPSBnZXRfbGNfdW5pcXVlX25hbWU7XG5jb25zdCBtYXBfa2V5c19qc18xID0gcmVxdWlyZShcIi4vbWFwX2tleXMuY2pzXCIpO1xuY29uc3QgdmFsaWRhdGlvbl9qc18xID0gcmVxdWlyZShcIi4vdmFsaWRhdGlvbi5janNcIik7XG5mdW5jdGlvbiBzaGFsbG93Q29weShvYmopIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopID8gWy4uLm9ial0gOiB7IC4uLm9iaiB9O1xufVxuZnVuY3Rpb24gcmVwbGFjZVNlY3JldHMocm9vdCwgc2VjcmV0c01hcCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHNoYWxsb3dDb3B5KHJvb3QpO1xuICAgIGZvciAoY29uc3QgW3BhdGgsIHNlY3JldElkXSBvZiBPYmplY3QuZW50cmllcyhzZWNyZXRzTWFwKSkge1xuICAgICAgICBjb25zdCBbbGFzdCwgLi4ucGFydHNSZXZlcnNlXSA9IHBhdGguc3BsaXQoXCIuXCIpLnJldmVyc2UoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IGN1cnJlbnQgPSByZXN1bHQ7XG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0c1JldmVyc2UucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFtwYXJ0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50W3BhcnRdID0gc2hhbGxvd0NvcHkoY3VycmVudFtwYXJ0XSk7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFtsYXN0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjdXJyZW50W2xhc3RdID0ge1xuICAgICAgICAgICAgICAgIGxjOiAxLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2VjcmV0XCIsXG4gICAgICAgICAgICAgICAgaWQ6IFtzZWNyZXRJZF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEdldCBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgbW9kdWxlLCByYXRoZXIgdGhhbiBwYXJlbnQgY2xhc3MgaW1wbGVtZW50YXRpb25zLlxuICogU2hvdWxkIG5vdCBiZSBzdWJjbGFzc2VkLCBzdWJjbGFzcyBsY19uYW1lIGFib3ZlIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIGdldF9sY191bmlxdWVfbmFtZShcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbnNlcmlhbGl6YWJsZUNsYXNzKSB7XG4gICAgLy8gXCJzdXBlclwiIGhlcmUgd291bGQgcmVmZXIgdG8gdGhlIHBhcmVudCBjbGFzcyBvZiBTZXJpYWxpemFibGUsXG4gICAgLy8gd2hlbiB3ZSB3YW50IHRoZSBwYXJlbnQgY2xhc3Mgb2YgdGhlIG1vZHVsZSBhY3R1YWxseSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxuICAgIGNvbnN0IHBhcmVudENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNlcmlhbGl6YWJsZUNsYXNzKTtcbiAgICBjb25zdCBsY05hbWVJc1N1YmNsYXNzZWQgPSB0eXBlb2Ygc2VyaWFsaXphYmxlQ2xhc3MubGNfbmFtZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICh0eXBlb2YgcGFyZW50Q2xhc3MubGNfbmFtZSAhPT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICBzZXJpYWxpemFibGVDbGFzcy5sY19uYW1lKCkgIT09IHBhcmVudENsYXNzLmxjX25hbWUoKSk7XG4gICAgaWYgKGxjTmFtZUlzU3ViY2xhc3NlZCkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXphYmxlQ2xhc3MubGNfbmFtZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6YWJsZUNsYXNzLm5hbWU7XG4gICAgfVxufVxuY2xhc3MgU2VyaWFsaXphYmxlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VyaWFsaXphYmxlLiBPdmVycmlkZSB0byBwcm92aWRlIGFuIGFsaWFzIG9yXG4gICAgICogdG8gcHJlc2VydmUgdGhlIHNlcmlhbGl6ZWQgbW9kdWxlIG5hbWUgaW4gbWluaWZpZWQgZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgYSBzdGF0aWMgbWV0aG9kIHRvIHN1cHBvcnQgbG9hZGluZyBsb2dpYy5cbiAgICAgKi9cbiAgICBzdGF0aWMgbGNfbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpbmFsIHNlcmlhbGl6ZWQgaWRlbnRpZmllciBmb3IgdGhlIG1vZHVsZS5cbiAgICAgKi9cbiAgICBnZXQgbGNfaWQoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50aGlzLmxjX25hbWVzcGFjZSxcbiAgICAgICAgICAgIGdldF9sY191bmlxdWVfbmFtZSh0aGlzLmNvbnN0cnVjdG9yKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBtYXAgb2Ygc2VjcmV0cywgd2hpY2ggd2lsbCBiZSBvbWl0dGVkIGZyb20gc2VyaWFsaXphdGlvbi5cbiAgICAgKiBLZXlzIGFyZSBwYXRocyB0byB0aGUgc2VjcmV0IGluIGNvbnN0cnVjdG9yIGFyZ3MsIGUuZy4gXCJmb28uYmFyLmJhelwiLlxuICAgICAqIFZhbHVlcyBhcmUgdGhlIHNlY3JldCBpZHMsIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVuIGRlc2VyaWFsaXppbmcuXG4gICAgICovXG4gICAgZ2V0IGxjX3NlY3JldHMoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbWFwIG9mIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB0byBtZXJnZSB3aXRoIGNvbnN0cnVjdG9yIGFyZ3MuXG4gICAgICogS2V5cyBhcmUgdGhlIGF0dHJpYnV0ZSBuYW1lcywgZS5nLiBcImZvb1wiLlxuICAgICAqIFZhbHVlcyBhcmUgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMsIHdoaWNoIHdpbGwgYmUgc2VyaWFsaXplZC5cbiAgICAgKiBUaGVzZSBhdHRyaWJ1dGVzIG5lZWQgdG8gYmUgYWNjZXB0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGFzIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBnZXQgbGNfYXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQSBtYXAgb2YgYWxpYXNlcyBmb3IgY29uc3RydWN0b3IgYXJncy5cbiAgICAgKiBLZXlzIGFyZSB0aGUgYXR0cmlidXRlIG5hbWVzLCBlLmcuIFwiZm9vXCIuXG4gICAgICogVmFsdWVzIGFyZSB0aGUgYWxpYXMgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIGtleSBpbiBzZXJpYWxpemF0aW9uLlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBlZy4gbWFrZSBhcmd1bWVudCBuYW1lcyBtYXRjaCBQeXRob24uXG4gICAgICovXG4gICAgZ2V0IGxjX2FsaWFzZXMoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgbWFudWFsIGxpc3Qgb2Yga2V5cyB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLlxuICAgICAqIElmIG5vdCBvdmVycmlkZGVuLCBhbGwgZmllbGRzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIHNlcmlhbGl6ZWQuXG4gICAgICovXG4gICAgZ2V0IGxjX3NlcmlhbGl6YWJsZV9rZXlzKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3MsIC4uLl9hcmdzKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxjX3NlcmlhbGl6YWJsZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxjX2t3YXJnc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5sY19zZXJpYWxpemFibGVfa2V5cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmxjX2t3YXJncyA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhrd2FyZ3MgfHwge30pLmZpbHRlcigoW2tleV0pID0+IHRoaXMubGNfc2VyaWFsaXphYmxlX2tleXM/LmluY2x1ZGVzKGtleSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGNfa3dhcmdzID0ga3dhcmdzID8/IHt9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxjX3NlcmlhbGl6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OTm90SW1wbGVtZW50ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnN0YW5jZW9mL25vLWluc3RhbmNlb2ZcbiAgICAgICAgdGhpcy5sY19rd2FyZ3MgaW5zdGFuY2VvZiBTZXJpYWxpemFibGUgfHxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmxjX2t3YXJncyAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLmxjX2t3YXJncykpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBzdXBwb3J0IHNlcmlhbGl6YXRpb24gb2YgY2xhc3NlcyB3aXRoIGFyZyBub3QgYSBQT0pPXG4gICAgICAgICAgICAvLyBJJ20gYXdhcmUgdGhlIGNoZWNrIGFib3ZlIGlzbid0IGFzIHN0cmljdCBhcyBpdCBjb3VsZCBiZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OTm90SW1wbGVtZW50ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGlhc2VzID0ge307XG4gICAgICAgIGNvbnN0IHNlY3JldHMgPSB7fTtcbiAgICAgICAgY29uc3Qga3dhcmdzID0gT2JqZWN0LmtleXModGhpcy5sY19rd2FyZ3MpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGFjY1trZXldID0ga2V5IGluIHRoaXMgPyB0aGlzW2tleV0gOiB0aGlzLmxjX2t3YXJnc1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgICAgICAvLyBnZXQgc2VjcmV0cywgYXR0cmlidXRlcyBhbmQgYWxpYXNlcyBmcm9tIGFsbCBzdXBlcmNsYXNzZXNcbiAgICAgICAgZm9yIChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGxldCBjdXJyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpOyBjdXJyZW50OyBjdXJyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGFsaWFzZXMsIFJlZmxlY3QuZ2V0KGN1cnJlbnQsIFwibGNfYWxpYXNlc1wiLCB0aGlzKSk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlY3JldHMsIFJlZmxlY3QuZ2V0KGN1cnJlbnQsIFwibGNfc2VjcmV0c1wiLCB0aGlzKSk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGt3YXJncywgUmVmbGVjdC5nZXQoY3VycmVudCwgXCJsY19hdHRyaWJ1dGVzXCIsIHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbmNsdWRlIGFsbCBzZWNyZXRzIHVzZWQsIGV2ZW4gaWYgbm90IGluIGt3YXJncyxcbiAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHNlbnRpbmVsIHZhbHVlIGluIHJlcGxhY2VTZWNyZXRzXG4gICAgICAgIE9iamVjdC5rZXlzKHNlY3JldHMpLmZvckVhY2goKGtleVBhdGgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbGV0IHJlYWQgPSB0aGlzO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGxldCB3cml0ZSA9IGt3YXJncztcbiAgICAgICAgICAgIGNvbnN0IFtsYXN0LCAuLi5wYXJ0c1JldmVyc2VdID0ga2V5UGF0aC5zcGxpdChcIi5cIikucmV2ZXJzZSgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcGFydHNSZXZlcnNlLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiByZWFkKSB8fCByZWFkW2tleV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB3cml0ZSkgfHwgd3JpdGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhZFtrZXldID09PSBcIm9iamVjdFwiICYmIHJlYWRba2V5XSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVtrZXldID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZWFkW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVtrZXldID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVhZCA9IHJlYWRba2V5XTtcbiAgICAgICAgICAgICAgICB3cml0ZSA9IHdyaXRlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdCBpbiByZWFkICYmIHJlYWRbbGFzdF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHdyaXRlW2xhc3RdID0gd3JpdGVbbGFzdF0gfHwgcmVhZFtsYXN0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVzY2FwZWRLd2FyZ3MgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoa3dhcmdzKSkge1xuICAgICAgICAgICAgZXNjYXBlZEt3YXJnc1trZXldID0gKDAsIHZhbGlkYXRpb25fanNfMS5lc2NhcGVJZk5lZWRlZCkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdyBhZGQgc2VjcmV0IG1hcmtlcnMgLSB0aGVzZSBhcmUgYWRkZWQgQUZURVIgZXNjYXBpbmcgc28gdGhleSB3b24ndCBiZSBlc2NhcGVkXG4gICAgICAgIGNvbnN0IGt3YXJnc1dpdGhTZWNyZXRzID0gT2JqZWN0LmtleXMoc2VjcmV0cykubGVuZ3RoXG4gICAgICAgICAgICA/IHJlcGxhY2VTZWNyZXRzKGVzY2FwZWRLd2FyZ3MsIHNlY3JldHMpXG4gICAgICAgICAgICA6IGVzY2FwZWRLd2FyZ3M7XG4gICAgICAgIC8vIEZpbmFsbHkgdHJhbnNmb3JtIGtleXMgdG8gSlNPTiBmb3JtYXRcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkS3dhcmdzID0gKDAsIG1hcF9rZXlzX2pzXzEubWFwS2V5cykoa3dhcmdzV2l0aFNlY3JldHMsIG1hcF9rZXlzX2pzXzEua2V5VG9Kc29uLCBhbGlhc2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxjOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJjb25zdHJ1Y3RvclwiLFxuICAgICAgICAgICAgaWQ6IHRoaXMubGNfaWQsXG4gICAgICAgICAgICBrd2FyZ3M6IHByb2Nlc3NlZEt3YXJncyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9KU09OTm90SW1wbGVtZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYzogMSxcbiAgICAgICAgICAgIHR5cGU6IFwibm90X2ltcGxlbWVudGVkXCIsXG4gICAgICAgICAgICBpZDogdGhpcy5sY19pZCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlNlcmlhbGl6YWJsZSA9IFNlcmlhbGl6YWJsZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEVudiA9IGV4cG9ydHMuaXNOb2RlID0gZXhwb3J0cy5pc0Rlbm8gPSBleHBvcnRzLmlzSnNEb20gPSBleHBvcnRzLmlzV2ViV29ya2VyID0gZXhwb3J0cy5pc0Jyb3dzZXIgPSB2b2lkIDA7XG5leHBvcnRzLmdldFJ1bnRpbWVFbnZpcm9ubWVudCA9IGdldFJ1bnRpbWVFbnZpcm9ubWVudDtcbmV4cG9ydHMuZ2V0UnVudGltZUVudmlyb25tZW50U3luYyA9IGdldFJ1bnRpbWVFbnZpcm9ubWVudFN5bmM7XG5leHBvcnRzLmdldEVudmlyb25tZW50VmFyaWFibGUgPSBnZXRFbnZpcm9ubWVudFZhcmlhYmxlO1xuY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuZXhwb3J0cy5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7XG5jb25zdCBpc1dlYldvcmtlciA9ICgpID0+IHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiICYmXG4gICAgZ2xvYmFsVGhpcy5jb25zdHJ1Y3RvciAmJlxuICAgIGdsb2JhbFRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gXCJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVwiO1xuZXhwb3J0cy5pc1dlYldvcmtlciA9IGlzV2ViV29ya2VyO1xuY29uc3QgaXNKc0RvbSA9ICgpID0+ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5uYW1lID09PSBcIm5vZGVqc1wiKSB8fFxuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKSk7XG5leHBvcnRzLmlzSnNEb20gPSBpc0pzRG9tO1xuLy8gU3VwYWJhc2UgRWRnZSBGdW5jdGlvbiBwcm92aWRlcyBhIGBEZW5vYCBnbG9iYWwgb2JqZWN0XG4vLyB3aXRob3V0IGB2ZXJzaW9uYCBwcm9wZXJ0eVxuY29uc3QgaXNEZW5vID0gKCkgPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5leHBvcnRzLmlzRGVubyA9IGlzRGVubztcbi8vIE1hcmsgbm90LWFzLW5vZGUgaWYgaW4gU3VwYWJhc2UgRWRnZSBGdW5jdGlvblxuY29uc3QgaXNOb2RlID0gKCkgPT4gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAhKDAsIGV4cG9ydHMuaXNEZW5vKSgpO1xuZXhwb3J0cy5pc05vZGUgPSBpc05vZGU7XG5jb25zdCBnZXRFbnYgPSAoKSA9PiB7XG4gICAgbGV0IGVudjtcbiAgICBpZiAoKDAsIGV4cG9ydHMuaXNCcm93c2VyKSgpKSB7XG4gICAgICAgIGVudiA9IFwiYnJvd3NlclwiO1xuICAgIH1cbiAgICBlbHNlIGlmICgoMCwgZXhwb3J0cy5pc05vZGUpKCkpIHtcbiAgICAgICAgZW52ID0gXCJub2RlXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCBleHBvcnRzLmlzV2ViV29ya2VyKSgpKSB7XG4gICAgICAgIGVudiA9IFwid2Vid29ya2VyXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCBleHBvcnRzLmlzSnNEb20pKCkpIHtcbiAgICAgICAgZW52ID0gXCJqc2RvbVwiO1xuICAgIH1cbiAgICBlbHNlIGlmICgoMCwgZXhwb3J0cy5pc0Rlbm8pKCkpIHtcbiAgICAgICAgZW52ID0gXCJkZW5vXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbnYgPSBcIm90aGVyXCI7XG4gICAgfVxuICAgIHJldHVybiBlbnY7XG59O1xuZXhwb3J0cy5nZXRFbnYgPSBnZXRFbnY7XG5sZXQgcnVudGltZUVudmlyb25tZW50O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ2V0UnVudGltZUVudmlyb25tZW50U3luYyBpbnN0ZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFJ1bnRpbWVFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gZ2V0UnVudGltZUVudmlyb25tZW50U3luYygpO1xufVxuZnVuY3Rpb24gZ2V0UnVudGltZUVudmlyb25tZW50U3luYygpIHtcbiAgICBpZiAocnVudGltZUVudmlyb25tZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZW52ID0gKDAsIGV4cG9ydHMuZ2V0RW52KSgpO1xuICAgICAgICBydW50aW1lRW52aXJvbm1lbnQgPSB7XG4gICAgICAgICAgICBsaWJyYXJ5OiBcImxhbmdjaGFpbi1qc1wiLFxuICAgICAgICAgICAgcnVudGltZTogZW52LFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcnVudGltZUVudmlyb25tZW50O1xufVxuZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRWYXJpYWJsZShuYW1lKSB7XG4gICAgLy8gQ2VydGFpbiBEZW5vIHNldHVwcyB3aWxsIHRocm93IGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gYWNjZXNzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5nY2hhaW4tYWkvbGFuZ2NoYWluanMvaXNzdWVzLzE0MTJcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52Py5bbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKDAsIGV4cG9ydHMuaXNEZW5vKSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gRGVubz8uZW52LmdldChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICAgICAgICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIHZhciBhciA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICAgICAgICAgIHJldHVybiBhcjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG93bktleXMobyk7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1vZCkge1xuICAgICAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gICAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzQmFzZUNhbGxiYWNrSGFuZGxlciA9IGV4cG9ydHMuQmFzZUNhbGxiYWNrSGFuZGxlciA9IHZvaWQgMDtcbmV4cG9ydHMuY2FsbGJhY2tIYW5kbGVyUHJlZmVyc1N0cmVhbWluZyA9IGNhbGxiYWNrSGFuZGxlclByZWZlcnNTdHJlYW1pbmc7XG5jb25zdCB1dWlkID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJ1dWlkXCIpKTtcbmNvbnN0IHNlcmlhbGl6YWJsZV9qc18xID0gcmVxdWlyZShcIi4uL2xvYWQvc2VyaWFsaXphYmxlLmNqc1wiKTtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWxzL2Vudi5janNcIik7XG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIHRoYXQgcHJvdmlkZXMgYSBzZXQgb2Ygb3B0aW9uYWwgbWV0aG9kcyB0aGF0IGNhbiBiZVxuICogb3ZlcnJpZGRlbiBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gaGFuZGxlIHZhcmlvdXMgZXZlbnRzIGR1cmluZyB0aGVcbiAqIGV4ZWN1dGlvbiBvZiBhIExhbmdDaGFpbiBhcHBsaWNhdGlvbi5cbiAqL1xuY2xhc3MgQmFzZUNhbGxiYWNrSGFuZGxlck1ldGhvZHNDbGFzcyB7XG59XG5mdW5jdGlvbiBjYWxsYmFja0hhbmRsZXJQcmVmZXJzU3RyZWFtaW5nKHgpIHtcbiAgICByZXR1cm4gXCJsY19wcmVmZXJfc3RyZWFtaW5nXCIgaW4geCAmJiB4LmxjX3ByZWZlcl9zdHJlYW1pbmc7XG59XG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGNhbGxiYWNrIGhhbmRsZXJzIGluIHRoZSBMYW5nQ2hhaW5cbiAqIGZyYW1ld29yay4gSXQgcHJvdmlkZXMgYSBzZXQgb2Ygb3B0aW9uYWwgbWV0aG9kcyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuXG4gKiBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gaGFuZGxlIHZhcmlvdXMgZXZlbnRzIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGFcbiAqIExhbmdDaGFpbiBhcHBsaWNhdGlvbi5cbiAqL1xuY2xhc3MgQmFzZUNhbGxiYWNrSGFuZGxlciBleHRlbmRzIEJhc2VDYWxsYmFja0hhbmRsZXJNZXRob2RzQ2xhc3Mge1xuICAgIGdldCBsY19uYW1lc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiBbXCJsYW5nY2hhaW5fY29yZVwiLCBcImNhbGxiYWNrc1wiLCB0aGlzLm5hbWVdO1xuICAgIH1cbiAgICBnZXQgbGNfc2VjcmV0cygpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGxjX2F0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBsY19hbGlhc2VzKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgbGNfc2VyaWFsaXphYmxlX2tleXMoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJpYWxpemFibGUuIE92ZXJyaWRlIHRvIHByb3ZpZGUgYW4gYWxpYXMgb3JcbiAgICAgKiB0byBwcmVzZXJ2ZSB0aGUgc2VyaWFsaXplZCBtb2R1bGUgbmFtZSBpbiBtaW5pZmllZCBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBhIHN0YXRpYyBtZXRob2QgdG8gc3VwcG9ydCBsb2FkaW5nIGxvZ2ljLlxuICAgICAqL1xuICAgIHN0YXRpYyBsY19uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmluYWwgc2VyaWFsaXplZCBpZGVudGlmaWVyIGZvciB0aGUgbW9kdWxlLlxuICAgICAqL1xuICAgIGdldCBsY19pZCgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMubGNfbmFtZXNwYWNlLFxuICAgICAgICAgICAgKDAsIHNlcmlhbGl6YWJsZV9qc18xLmdldF9sY191bmlxdWVfbmFtZSkodGhpcy5jb25zdHJ1Y3RvciksXG4gICAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxjX3NlcmlhbGl6YWJsZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxjX2t3YXJnc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpZ25vcmVMTE1cIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpZ25vcmVDaGFpblwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlnbm9yZUFnZW50XCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaWdub3JlUmV0cmlldmVyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaWdub3JlQ3VzdG9tRXZlbnRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJyYWlzZUVycm9yXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYXdhaXRIYW5kbGVyc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR0NIQUlOX0NBTExCQUNLU19CQUNLR1JPVU5EXCIpID09PSBcImZhbHNlXCJcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGNfa3dhcmdzID0gaW5wdXQgfHwge307XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVMTE0gPSBpbnB1dC5pZ25vcmVMTE0gPz8gdGhpcy5pZ25vcmVMTE07XG4gICAgICAgICAgICB0aGlzLmlnbm9yZUNoYWluID0gaW5wdXQuaWdub3JlQ2hhaW4gPz8gdGhpcy5pZ25vcmVDaGFpbjtcbiAgICAgICAgICAgIHRoaXMuaWdub3JlQWdlbnQgPSBpbnB1dC5pZ25vcmVBZ2VudCA/PyB0aGlzLmlnbm9yZUFnZW50O1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVSZXRyaWV2ZXIgPSBpbnB1dC5pZ25vcmVSZXRyaWV2ZXIgPz8gdGhpcy5pZ25vcmVSZXRyaWV2ZXI7XG4gICAgICAgICAgICB0aGlzLmlnbm9yZUN1c3RvbUV2ZW50ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5pZ25vcmVDdXN0b21FdmVudCA/PyB0aGlzLmlnbm9yZUN1c3RvbUV2ZW50O1xuICAgICAgICAgICAgdGhpcy5yYWlzZUVycm9yID0gaW5wdXQucmFpc2VFcnJvciA/PyB0aGlzLnJhaXNlRXJyb3I7XG4gICAgICAgICAgICB0aGlzLmF3YWl0SGFuZGxlcnMgPVxuICAgICAgICAgICAgICAgIHRoaXMucmFpc2VFcnJvciB8fCAoaW5wdXQuX2F3YWl0SGFuZGxlciA/PyB0aGlzLmF3YWl0SGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXphYmxlX2pzXzEuU2VyaWFsaXphYmxlLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgdG9KU09OTm90SW1wbGVtZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemFibGVfanNfMS5TZXJpYWxpemFibGUucHJvdG90eXBlLnRvSlNPTk5vdEltcGxlbWVudGVkLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tTWV0aG9kcyhtZXRob2RzKSB7XG4gICAgICAgIGNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBCYXNlQ2FsbGJhY2tIYW5kbGVyIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1dWlkLnY0KClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG1ldGhvZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgSGFuZGxlcigpO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzZUNhbGxiYWNrSGFuZGxlciA9IEJhc2VDYWxsYmFja0hhbmRsZXI7XG5jb25zdCBpc0Jhc2VDYWxsYmFja0hhbmRsZXIgPSAoeCkgPT4ge1xuICAgIGNvbnN0IGNhbGxiYWNrSGFuZGxlciA9IHg7XG4gICAgcmV0dXJuIChjYWxsYmFja0hhbmRsZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgY2FsbGJhY2tIYW5kbGVyLmNvcHkgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgY2FsbGJhY2tIYW5kbGVyLm5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgdHlwZW9mIGNhbGxiYWNrSGFuZGxlci5hd2FpdEhhbmRsZXJzID09PSBcImJvb2xlYW5cIik7XG59O1xuZXhwb3J0cy5pc0Jhc2VDYWxsYmFja0hhbmRsZXIgPSBpc0Jhc2VDYWxsYmFja0hhbmRsZXI7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQU5TSV9CQUNLR1JPVU5EX09GRlNFVCA9IDEwO1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChvZmZzZXQgPSAwKSA9PiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JlZH07JHtncmVlbn07JHtibHVlfW1gO1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRvdmVybGluZTogWzUzLCA1NV0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHN0eWxlcy5jb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bSgpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiB7XG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdFx0XHRcdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRcdFx0XHRpZiAocmVkID09PSBncmVlbiAmJiBncmVlbiA9PT0gYmx1ZSkge1xuXHRcdFx0XHRcdGlmIChyZWQgPCA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMTY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlZCA+IDI0OCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDIzMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHJlZCAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxNiArXG5cdFx0XHRcdFx0KDM2ICogTWF0aC5yb3VuZChyZWQgLyAyNTUgKiA1KSkgK1xuXHRcdFx0XHRcdCg2ICogTWF0aC5yb3VuZChncmVlbiAvIDI1NSAqIDUpKSArXG5cdFx0XHRcdFx0TWF0aC5yb3VuZChibHVlIC8gMjU1ICogNSk7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9LFxuXHRcdGhleFRvUmdiOiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0Y2hlcyA9IC8oPzxjb2xvclN0cmluZz5bYS1mXFxkXXs2fXxbYS1mXFxkXXszfSkvaS5leGVjKGhleC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHtjb2xvclN0cmluZ30gPSBtYXRjaGVzLmdyb3VwcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXJhY3RlciA9PiBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXIpLmpvaW4oJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW50ZWdlciA9IE51bWJlci5wYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gMTYpICYgMHhGRixcblx0XHRcdFx0XHQoaW50ZWdlciA+PiA4KSAmIDB4RkYsXG5cdFx0XHRcdFx0aW50ZWdlciAmIDB4RkZcblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uc3R5bGVzLmhleFRvUmdiKGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbi8vIE1ha2UgdGhlIGV4cG9ydCBpbW11dGFibGVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGFzc2VtYmxlU3R5bGVzXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFJX1NES19UT09MX09QRVJBVElPTlMgPSBleHBvcnRzLkFJX1NES19MTE1fT1BFUkFUSU9OUyA9IGV4cG9ydHMuR0VOX0FJX0NIT0lDRSA9IGV4cG9ydHMuR0VOX0FJX0FTU0lTVEFOVF9NRVNTQUdFID0gZXhwb3J0cy5HRU5fQUlfVVNFUl9NRVNTQUdFID0gZXhwb3J0cy5HRU5fQUlfU1lTVEVNX01FU1NBR0UgPSBleHBvcnRzLkxBTkdTTUlUSF9UUkFDRUFCTEVfUEFSRU5UX09URUxfU1BBTl9JRCA9IGV4cG9ydHMuTEFOR1NNSVRIX0lTX1JPT1QgPSBleHBvcnRzLkxBTkdTTUlUSF9UUkFDRUFCTEUgPSBleHBvcnRzLkxBTkdTTUlUSF9SRUZFUkVOQ0VfRVhBTVBMRV9JRCA9IGV4cG9ydHMuTEFOR1NNSVRIX1VTQUdFX01FVEFEQVRBID0gZXhwb3J0cy5MQU5HU01JVEhfUEFSRU5UX1JVTl9JRCA9IGV4cG9ydHMuTEFOR1NNSVRIX0RPVFRFRF9PUkRFUiA9IGV4cG9ydHMuTEFOR1NNSVRIX1RSQUNFX0lEID0gZXhwb3J0cy5MQU5HU01JVEhfUlVOX0lEID0gZXhwb3J0cy5MQU5HU01JVEhfUkVRVUVTVF9IRUFERVJTID0gZXhwb3J0cy5MQU5HU01JVEhfUkVRVUVTVF9TVFJFQU1JTkcgPSBleHBvcnRzLkxBTkdTTUlUSF9SVU5USU1FID0gZXhwb3J0cy5MQU5HU01JVEhfVEFHUyA9IGV4cG9ydHMuTEFOR1NNSVRIX01FVEFEQVRBID0gZXhwb3J0cy5MQU5HU01JVEhfTkFNRSA9IGV4cG9ydHMuTEFOR1NNSVRIX1JVTl9UWVBFID0gZXhwb3J0cy5MQU5HU01JVEhfU0VTU0lPTl9OQU1FID0gZXhwb3J0cy5MQU5HU01JVEhfU0VTU0lPTl9JRCA9IGV4cG9ydHMuR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTl9ERVRBSUxTID0gZXhwb3J0cy5HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5fREVUQUlMUyA9IGV4cG9ydHMuR0VOX0FJX1JFU1BPTlNFX1NZU1RFTV9GSU5HRVJQUklOVCA9IGV4cG9ydHMuR0VOX0FJX1JFU1BPTlNFX1NFUlZJQ0VfVElFUiA9IGV4cG9ydHMuR0VOX0FJX1JFU1BPTlNFX0lEID0gZXhwb3J0cy5HRU5fQUlfU0VSSUFMSVpFRF9ET0MgPSBleHBvcnRzLkdFTl9BSV9TRVJJQUxJWkVEX1NJR05BVFVSRSA9IGV4cG9ydHMuR0VOX0FJX1NFUklBTElaRURfTkFNRSA9IGV4cG9ydHMuR0VOX0FJX1JFUVVFU1RfRVhUUkFfQk9EWSA9IGV4cG9ydHMuR0VOX0FJX1JFUVVFU1RfRVhUUkFfUVVFUlkgPSBleHBvcnRzLkdFTkFJX0NPTVBMRVRJT04gPSBleHBvcnRzLkdFTkFJX1BST01QVCA9IGV4cG9ydHMuR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TID0gZXhwb3J0cy5HRU5fQUlfUkVRVUVTVF9QUkVTRU5DRV9QRU5BTFRZID0gZXhwb3J0cy5HRU5fQUlfUkVRVUVTVF9GUkVRVUVOQ1lfUEVOQUxUWSA9IGV4cG9ydHMuR0VOX0FJX1JFUVVFU1RfVE9QX1AgPSBleHBvcnRzLkdFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFID0gZXhwb3J0cy5HRU5fQUlfUkVRVUVTVF9NQVhfVE9LRU5TID0gZXhwb3J0cy5HRU5fQUlfVVNBR0VfVE9UQUxfVE9LRU5TID0gZXhwb3J0cy5HRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOUyA9IGV4cG9ydHMuR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOUyA9IGV4cG9ydHMuR0VOX0FJX1JFU1BPTlNFX01PREVMID0gZXhwb3J0cy5HRU5fQUlfUkVRVUVTVF9NT0RFTCA9IGV4cG9ydHMuR0VOX0FJX1NZU1RFTSA9IGV4cG9ydHMuR0VOX0FJX09QRVJBVElPTl9OQU1FID0gdm9pZCAwO1xuLy8gT3BlblRlbGVtZXRyeSBHZW5BSSBzZW1hbnRpYyBjb252ZW50aW9uIGF0dHJpYnV0ZSBuYW1lc1xuZXhwb3J0cy5HRU5fQUlfT1BFUkFUSU9OX05BTUUgPSBcImdlbl9haS5vcGVyYXRpb24ubmFtZVwiO1xuZXhwb3J0cy5HRU5fQUlfU1lTVEVNID0gXCJnZW5fYWkuc3lzdGVtXCI7XG5leHBvcnRzLkdFTl9BSV9SRVFVRVNUX01PREVMID0gXCJnZW5fYWkucmVxdWVzdC5tb2RlbFwiO1xuZXhwb3J0cy5HRU5fQUlfUkVTUE9OU0VfTU9ERUwgPSBcImdlbl9haS5yZXNwb25zZS5tb2RlbFwiO1xuZXhwb3J0cy5HRU5fQUlfVVNBR0VfSU5QVVRfVE9LRU5TID0gXCJnZW5fYWkudXNhZ2UuaW5wdXRfdG9rZW5zXCI7XG5leHBvcnRzLkdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TID0gXCJnZW5fYWkudXNhZ2Uub3V0cHV0X3Rva2Vuc1wiO1xuZXhwb3J0cy5HRU5fQUlfVVNBR0VfVE9UQUxfVE9LRU5TID0gXCJnZW5fYWkudXNhZ2UudG90YWxfdG9rZW5zXCI7XG5leHBvcnRzLkdFTl9BSV9SRVFVRVNUX01BWF9UT0tFTlMgPSBcImdlbl9haS5yZXF1ZXN0Lm1heF90b2tlbnNcIjtcbmV4cG9ydHMuR0VOX0FJX1JFUVVFU1RfVEVNUEVSQVRVUkUgPSBcImdlbl9haS5yZXF1ZXN0LnRlbXBlcmF0dXJlXCI7XG5leHBvcnRzLkdFTl9BSV9SRVFVRVNUX1RPUF9QID0gXCJnZW5fYWkucmVxdWVzdC50b3BfcFwiO1xuZXhwb3J0cy5HRU5fQUlfUkVRVUVTVF9GUkVRVUVOQ1lfUEVOQUxUWSA9IFwiZ2VuX2FpLnJlcXVlc3QuZnJlcXVlbmN5X3BlbmFsdHlcIjtcbmV4cG9ydHMuR0VOX0FJX1JFUVVFU1RfUFJFU0VOQ0VfUEVOQUxUWSA9IFwiZ2VuX2FpLnJlcXVlc3QucHJlc2VuY2VfcGVuYWx0eVwiO1xuZXhwb3J0cy5HRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlMgPSBcImdlbl9haS5yZXNwb25zZS5maW5pc2hfcmVhc29uc1wiO1xuZXhwb3J0cy5HRU5BSV9QUk9NUFQgPSBcImdlbl9haS5wcm9tcHRcIjtcbmV4cG9ydHMuR0VOQUlfQ09NUExFVElPTiA9IFwiZ2VuX2FpLmNvbXBsZXRpb25cIjtcbmV4cG9ydHMuR0VOX0FJX1JFUVVFU1RfRVhUUkFfUVVFUlkgPSBcImdlbl9haS5yZXF1ZXN0LmV4dHJhX3F1ZXJ5XCI7XG5leHBvcnRzLkdFTl9BSV9SRVFVRVNUX0VYVFJBX0JPRFkgPSBcImdlbl9haS5yZXF1ZXN0LmV4dHJhX2JvZHlcIjtcbmV4cG9ydHMuR0VOX0FJX1NFUklBTElaRURfTkFNRSA9IFwiZ2VuX2FpLnNlcmlhbGl6ZWQubmFtZVwiO1xuZXhwb3J0cy5HRU5fQUlfU0VSSUFMSVpFRF9TSUdOQVRVUkUgPSBcImdlbl9haS5zZXJpYWxpemVkLnNpZ25hdHVyZVwiO1xuZXhwb3J0cy5HRU5fQUlfU0VSSUFMSVpFRF9ET0MgPSBcImdlbl9haS5zZXJpYWxpemVkLmRvY1wiO1xuZXhwb3J0cy5HRU5fQUlfUkVTUE9OU0VfSUQgPSBcImdlbl9haS5yZXNwb25zZS5pZFwiO1xuZXhwb3J0cy5HRU5fQUlfUkVTUE9OU0VfU0VSVklDRV9USUVSID0gXCJnZW5fYWkucmVzcG9uc2Uuc2VydmljZV90aWVyXCI7XG5leHBvcnRzLkdFTl9BSV9SRVNQT05TRV9TWVNURU1fRklOR0VSUFJJTlQgPSBcImdlbl9haS5yZXNwb25zZS5zeXN0ZW1fZmluZ2VycHJpbnRcIjtcbmV4cG9ydHMuR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOX0RFVEFJTFMgPSBcImdlbl9haS51c2FnZS5pbnB1dF90b2tlbl9kZXRhaWxzXCI7XG5leHBvcnRzLkdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5fREVUQUlMUyA9IFwiZ2VuX2FpLnVzYWdlLm91dHB1dF90b2tlbl9kZXRhaWxzXCI7XG4vLyBMYW5nU21pdGggY3VzdG9tIGF0dHJpYnV0ZXNcbmV4cG9ydHMuTEFOR1NNSVRIX1NFU1NJT05fSUQgPSBcImxhbmdzbWl0aC50cmFjZS5zZXNzaW9uX2lkXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9TRVNTSU9OX05BTUUgPSBcImxhbmdzbWl0aC50cmFjZS5zZXNzaW9uX25hbWVcIjtcbmV4cG9ydHMuTEFOR1NNSVRIX1JVTl9UWVBFID0gXCJsYW5nc21pdGguc3Bhbi5raW5kXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9OQU1FID0gXCJsYW5nc21pdGgudHJhY2UubmFtZVwiO1xuZXhwb3J0cy5MQU5HU01JVEhfTUVUQURBVEEgPSBcImxhbmdzbWl0aC5tZXRhZGF0YVwiO1xuZXhwb3J0cy5MQU5HU01JVEhfVEFHUyA9IFwibGFuZ3NtaXRoLnNwYW4udGFnc1wiO1xuZXhwb3J0cy5MQU5HU01JVEhfUlVOVElNRSA9IFwibGFuZ3NtaXRoLnNwYW4ucnVudGltZVwiO1xuZXhwb3J0cy5MQU5HU01JVEhfUkVRVUVTVF9TVFJFQU1JTkcgPSBcImxhbmdzbWl0aC5yZXF1ZXN0LnN0cmVhbWluZ1wiO1xuZXhwb3J0cy5MQU5HU01JVEhfUkVRVUVTVF9IRUFERVJTID0gXCJsYW5nc21pdGgucmVxdWVzdC5oZWFkZXJzXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9SVU5fSUQgPSBcImxhbmdzbWl0aC5zcGFuLmlkXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9UUkFDRV9JRCA9IFwibGFuZ3NtaXRoLnRyYWNlLmlkXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9ET1RURURfT1JERVIgPSBcImxhbmdzbWl0aC5zcGFuLmRvdHRlZF9vcmRlclwiO1xuZXhwb3J0cy5MQU5HU01JVEhfUEFSRU5UX1JVTl9JRCA9IFwibGFuZ3NtaXRoLnNwYW4ucGFyZW50X2lkXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9VU0FHRV9NRVRBREFUQSA9IFwibGFuZ3NtaXRoLnVzYWdlX21ldGFkYXRhXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9SRUZFUkVOQ0VfRVhBTVBMRV9JRCA9IFwibGFuZ3NtaXRoLnJlZmVyZW5jZV9leGFtcGxlX2lkXCI7XG5leHBvcnRzLkxBTkdTTUlUSF9UUkFDRUFCTEUgPSBcImxhbmdzbWl0aC50cmFjZWFibGVcIjtcbmV4cG9ydHMuTEFOR1NNSVRIX0lTX1JPT1QgPSBcImxhbmdzbWl0aC5pc19yb290XCI7XG5leHBvcnRzLkxBTkdTTUlUSF9UUkFDRUFCTEVfUEFSRU5UX09URUxfU1BBTl9JRCA9IFwibGFuZ3NtaXRoLnRyYWNlYWJsZV9wYXJlbnRfb3RlbF9zcGFuX2lkXCI7XG4vLyBHZW5BSSBldmVudCBuYW1lc1xuZXhwb3J0cy5HRU5fQUlfU1lTVEVNX01FU1NBR0UgPSBcImdlbl9haS5zeXN0ZW0ubWVzc2FnZVwiO1xuZXhwb3J0cy5HRU5fQUlfVVNFUl9NRVNTQUdFID0gXCJnZW5fYWkudXNlci5tZXNzYWdlXCI7XG5leHBvcnRzLkdFTl9BSV9BU1NJU1RBTlRfTUVTU0FHRSA9IFwiZ2VuX2FpLmFzc2lzdGFudC5tZXNzYWdlXCI7XG5leHBvcnRzLkdFTl9BSV9DSE9JQ0UgPSBcImdlbl9haS5jaG9pY2VcIjtcbmV4cG9ydHMuQUlfU0RLX0xMTV9PUEVSQVRJT05TID0gW1xuICAgIFwiYWkuZ2VuZXJhdGVUZXh0LmRvR2VuZXJhdGVcIixcbiAgICBcImFpLnN0cmVhbVRleHQuZG9TdHJlYW1cIixcbiAgICBcImFpLmdlbmVyYXRlT2JqZWN0LmRvR2VuZXJhdGVcIixcbiAgICBcImFpLnN0cmVhbU9iamVjdC5kb1N0cmVhbVwiLFxuXTtcbmV4cG9ydHMuQUlfU0RLX1RPT0xfT1BFUkFUSU9OUyA9IFtcImFpLnRvb2xDYWxsXCJdO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX2dldEZldGNoSW1wbGVtZW50YXRpb24gPSBleHBvcnRzLl9nbG9iYWxGZXRjaEltcGxlbWVudGF0aW9uSXNOb2RlRmV0Y2ggPSBleHBvcnRzLmNsZWFyRmV0Y2hJbXBsZW1lbnRhdGlvbiA9IGV4cG9ydHMub3ZlcnJpZGVGZXRjaEltcGxlbWVudGF0aW9uID0gdm9pZCAwO1xuY29uc3QgZW52X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHMvZW52LmNqc1wiKTtcbi8vIFdyYXAgdGhlIGRlZmF1bHQgZmV0Y2ggY2FsbCBkdWUgdG8gaXNzdWVzIHdpdGggaWxsZWdhbCBpbnZvY2F0aW9uc1xuLy8gaW4gc29tZSBlbnZpcm9ubWVudHM6XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82OTg3Njg1OS93aHktZG9lcy1iaW5kLWZpeC1mYWlsZWQtdG8tZXhlY3V0ZS1mZXRjaC1vbi13aW5kb3ctaWxsZWdhbC1pbnZvY2F0aW9uLWVyclxuLy8gQHRzLWV4cGVjdC1lcnJvciBCcm9hZCB0eXBpbmcgdG8gc3VwcG9ydCBhIHJhbmdlIG9mIGZldGNoIGltcGxlbWVudGF0aW9uc1xuY29uc3QgREVGQVVMVF9GRVRDSF9JTVBMRU1FTlRBVElPTiA9ICguLi5hcmdzKSA9PiBmZXRjaCguLi5hcmdzKTtcbmNvbnN0IExBTkdTTUlUSF9GRVRDSF9JTVBMRU1FTlRBVElPTl9LRVkgPSBTeW1ib2wuZm9yKFwibHM6ZmV0Y2hfaW1wbGVtZW50YXRpb25cIik7XG4vKipcbiAqIE92ZXJyaWRlcyB0aGUgZmV0Y2ggaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgTGFuZ1NtaXRoIGNhbGxzLlxuICogWW91IHNob3VsZCB1c2UgdGhpcyBpZiB5b3UgbmVlZCB0byB1c2UgYW4gaW1wbGVtZW50YXRpb24gb2YgZmV0Y2hcbiAqIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgZ2xvYmFsIChlLmcuIGZvciBkZWFsaW5nIHdpdGggcHJveGllcykuXG4gKiBAcGFyYW0gZmV0Y2ggVGhlIG5ldyBmZXRjaCBmdW5jdGlubyB0byB1c2UuXG4gKi9cbmNvbnN0IG92ZXJyaWRlRmV0Y2hJbXBsZW1lbnRhdGlvbiA9IChmZXRjaCkgPT4ge1xuICAgIGdsb2JhbFRoaXNbTEFOR1NNSVRIX0ZFVENIX0lNUExFTUVOVEFUSU9OX0tFWV0gPSBmZXRjaDtcbn07XG5leHBvcnRzLm92ZXJyaWRlRmV0Y2hJbXBsZW1lbnRhdGlvbiA9IG92ZXJyaWRlRmV0Y2hJbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGNsZWFyRmV0Y2hJbXBsZW1lbnRhdGlvbiA9ICgpID0+IHtcbiAgICBkZWxldGUgZ2xvYmFsVGhpc1tMQU5HU01JVEhfRkVUQ0hfSU1QTEVNRU5UQVRJT05fS0VZXTtcbn07XG5leHBvcnRzLmNsZWFyRmV0Y2hJbXBsZW1lbnRhdGlvbiA9IGNsZWFyRmV0Y2hJbXBsZW1lbnRhdGlvbjtcbmNvbnN0IF9nbG9iYWxGZXRjaEltcGxlbWVudGF0aW9uSXNOb2RlRmV0Y2ggPSAoKSA9PiB7XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gZ2xvYmFsVGhpc1tMQU5HU01JVEhfRkVUQ0hfSU1QTEVNRU5UQVRJT05fS0VZXTtcbiAgICBpZiAoIWZldGNoSW1wbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIENoZWNrIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgbm9kZS1mZXRjaCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcmV0dXJuICh0eXBlb2YgZmV0Y2hJbXBsID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgXCJIZWFkZXJzXCIgaW4gZmV0Y2hJbXBsICYmXG4gICAgICAgIFwiUmVxdWVzdFwiIGluIGZldGNoSW1wbCAmJlxuICAgICAgICBcIlJlc3BvbnNlXCIgaW4gZmV0Y2hJbXBsKTtcbn07XG5leHBvcnRzLl9nbG9iYWxGZXRjaEltcGxlbWVudGF0aW9uSXNOb2RlRmV0Y2ggPSBfZ2xvYmFsRmV0Y2hJbXBsZW1lbnRhdGlvbklzTm9kZUZldGNoO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgX2dldEZldGNoSW1wbGVtZW50YXRpb24gPSAoZGVidWcpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGRlYnVnIHx8ICgwLCBlbnZfanNfMS5nZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlKShcIkRFQlVHXCIpID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgY29uc3QgW3VybCwgb3B0aW9uc10gPSBhcmdzO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYOKGkiAke29wdGlvbnM/Lm1ldGhvZCB8fCBcIkdFVFwifSAke3VybH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCAoZ2xvYmFsVGhpc1tMQU5HU01JVEhfRkVUQ0hfSU1QTEVNRU5UQVRJT05fS0VZXSA/P1xuICAgICAgICAgICAgREVGQVVMVF9GRVRDSF9JTVBMRU1FTlRBVElPTikoLi4uYXJncyk7XG4gICAgICAgIGlmIChkZWJ1ZyB8fCAoMCwgZW52X2pzXzEuZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZSkoXCJERUJVR1wiKSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGDihpAgJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fSAke3Jlcy51cmx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufTtcbmV4cG9ydHMuX2dldEZldGNoSW1wbGVtZW50YXRpb24gPSBfZ2V0RmV0Y2hJbXBsZW1lbnRhdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldERlZmF1bHRQcm9qZWN0TmFtZSA9IHZvaWQgMDtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4vZW52LmNqc1wiKTtcbmNvbnN0IGdldERlZmF1bHRQcm9qZWN0TmFtZSA9ICgpID0+IHtcbiAgICByZXR1cm4gKCgwLCBlbnZfanNfMS5nZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlKShcIlBST0pFQ1RcIikgPz9cbiAgICAgICAgKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR0NIQUlOX1NFU1NJT05cIikgPz8gLy8gVE9ETzogRGVwcmVjYXRlXG4gICAgICAgIFwiZGVmYXVsdFwiKTtcbn07XG5leHBvcnRzLmdldERlZmF1bHRQcm9qZWN0TmFtZSA9IGdldERlZmF1bHRQcm9qZWN0TmFtZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndhcm5PbmNlID0gd2Fybk9uY2U7XG5jb25zdCB3YXJuZWRNZXNzYWdlcyA9IHt9O1xuZnVuY3Rpb24gd2Fybk9uY2UobWVzc2FnZSkge1xuICAgIGlmICghd2FybmVkTWVzc2FnZXNbbWVzc2FnZV0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICB3YXJuZWRNZXNzYWdlc1ttZXNzYWdlXSA9IHRydWU7XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNzZXJ0VXVpZCA9IGFzc2VydFV1aWQ7XG5leHBvcnRzLnV1aWQ3RnJvbVRpbWUgPSB1dWlkN0Zyb21UaW1lO1xuZXhwb3J0cy5nZXRVdWlkVmVyc2lvbiA9IGdldFV1aWRWZXJzaW9uO1xuZXhwb3J0cy53YXJuSWZOb3RVdWlkVjcgPSB3YXJuSWZOb3RVdWlkVjc7XG4vLyBSZWxheGVkIFVVSUQgdmFsaWRhdGlvbiByZWdleCAoYWxsb3dzIGFueSB2YWxpZCBVVUlEIGZvcm1hdCBpbmNsdWRpbmcgbmlsIFVVSURzKVxuY29uc3QgVVVJRF9SRUdFWCA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pO1xuY29uc3QgdXVpZF8xID0gcmVxdWlyZShcInV1aWRcIik7XG5jb25zdCB3YXJuX2pzXzEgPSByZXF1aXJlKFwiLi93YXJuLmNqc1wiKTtcbmxldCBVVUlEN19XQVJOSU5HX0VNSVRURUQgPSBmYWxzZTtcbmZ1bmN0aW9uIGFzc2VydFV1aWQoc3RyLCB3aGljaCkge1xuICAgIC8vIFVzZSByZWxheGVkIHJlZ2V4IHZhbGlkYXRpb24gaW5zdGVhZCBvZiBzdHJpY3QgdXVpZC52YWxpZGF0ZSgpXG4gICAgLy8gVGhpcyBhbGxvd3MgZWRnZSBjYXNlcyBsaWtlIG5pbCBVVUlEcyBvciB0ZXN0IFVVSURzIHRoYXQgbWlnaHQgbm90IHBhc3Mgc3RyaWN0IHZhbGlkYXRpb25cbiAgICBpZiAoIVVVSURfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IHdoaWNoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYEludmFsaWQgVVVJRCBmb3IgJHt3aGljaH06ICR7c3RyfWBcbiAgICAgICAgICAgIDogYEludmFsaWQgVVVJRDogJHtzdHJ9YDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgVVVJRCB2NyBmcm9tIGEgdGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSB0aW1lc3RhbXAgLSBUaGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xuICogQHJldHVybnMgQSBVVUlEIHY3IHN0cmluZ1xuICovXG5mdW5jdGlvbiB1dWlkN0Zyb21UaW1lKHRpbWVzdGFtcCkge1xuICAgIGNvbnN0IG1zZWNzID0gdHlwZW9mIHRpbWVzdGFtcCA9PT0gXCJzdHJpbmdcIiA/IERhdGUucGFyc2UodGltZXN0YW1wKSA6IHRpbWVzdGFtcDtcbiAgICAvLyBXb3JrIGFyb3VuZCB1dWlkQDEwIGJlaGF2aW9yIHdoZXJlIHByb3ZpZGluZyBvbmx5IHsgbXNlY3MgfVxuICAgIC8vIG1heSBub3Qgc2V0IHRoZSBpbnRlcm5hbCB0aW1lc3RhbXAgdXNlZCBmb3Igc3RyaW5naWZpY2F0aW9uLlxuICAgIC8vIFByb3ZpZGluZyBhIHNlcSBlbnN1cmVzIHRoZSBpbXBsZW1lbnRhdGlvbiB1cGRhdGVzIGl0cyBpbnRlcm5hbCBzdGF0ZVxuICAgIC8vIGFuZCBlbmNvZGVzIHRoZSBwcm92aWRlZCBtaWxsaXNlY29uZHMgaW50byB0aGUgVVVJRCBieXRlcy5cbiAgICByZXR1cm4gKDAsIHV1aWRfMS52NykoeyBtc2Vjcywgc2VxOiAwIH0pO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZlcnNpb24gb2YgYSBVVUlEIHN0cmluZy5cbiAqIEBwYXJhbSB1dWlkU3RyIC0gVGhlIFVVSUQgc3RyaW5nIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUgdmVyc2lvbiBudW1iZXIgKDEtNykgb3IgbnVsbCBpZiBpbnZhbGlkXG4gKi9cbmZ1bmN0aW9uIGdldFV1aWRWZXJzaW9uKHV1aWRTdHIpIHtcbiAgICBpZiAoIVVVSURfUkVHRVgudGVzdCh1dWlkU3RyKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gVmVyc2lvbiBpcyBpbiBiaXRzIDQ4LTUxXG4gICAgLy8gRm9ybWF0OiB4eHh4eHh4eC14eHh4LVZ4eHgteHh4eC14eHh4eHh4eHh4eHhcbiAgICBjb25zdCB2ZXJzaW9uQ2hhciA9IHV1aWRTdHJbMTRdO1xuICAgIHJldHVybiBwYXJzZUludCh2ZXJzaW9uQ2hhciwgMTYpO1xufVxuLyoqXG4gKiBXYXJuIGlmIGEgVVVJRCBpcyBub3QgdmVyc2lvbiA3LlxuICpcbiAqIEBwYXJhbSB1dWlkU3RyIC0gVGhlIFVVSUQgc3RyaW5nIHRvIGNoZWNrXG4gKiBAcGFyYW0gaWRUeXBlIC0gVGhlIHR5cGUgb2YgSUQgKGUuZy4sIFwicnVuX2lkXCIsIFwidHJhY2VfaWRcIikgZm9yIHRoZSB3YXJuaW5nIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gd2FybklmTm90VXVpZFY3KHV1aWRTdHIsIF9pZFR5cGUpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gZ2V0VXVpZFZlcnNpb24odXVpZFN0cik7XG4gICAgaWYgKHZlcnNpb24gIT09IG51bGwgJiYgdmVyc2lvbiAhPT0gNyAmJiAhVVVJRDdfV0FSTklOR19FTUlUVEVEKSB7XG4gICAgICAgIFVVSUQ3X1dBUk5JTkdfRU1JVFRFRCA9IHRydWU7XG4gICAgICAgICgwLCB3YXJuX2pzXzEud2Fybk9uY2UpKGBMYW5nU21pdGggbm93IHVzZXMgVVVJRCB2NyBmb3IgcnVuIGFuZCB0cmFjZSBpZGVudGlmaWVycy4gYCArXG4gICAgICAgICAgICBgVGhpcyB3YXJuaW5nIGFwcGVhcnMgd2hlbiBwYXNzaW5nIGN1c3RvbSBJRHMuIGAgK1xuICAgICAgICAgICAgYFBsZWFzZSB1c2U6IGltcG9ydCB7IHV1aWR2NyB9IGZyb20gJ2xhbmdzbWl0aCc7IGNvbnN0IGlkID0gdXVpZHY3KCk7IGAgK1xuICAgICAgICAgICAgYEZ1dHVyZSB2ZXJzaW9ucyB3aWxsIHJlcXVpcmUgVVVJRCB2Ny5gKTtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51dWlkN0Zyb21UaW1lID0gdm9pZCAwO1xuZXhwb3J0cy51dWlkNyA9IHV1aWQ3O1xuY29uc3QgdXVpZF8xID0gcmVxdWlyZShcInV1aWRcIik7XG52YXIgX3V1aWRfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL191dWlkLmNqc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInV1aWQ3RnJvbVRpbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF91dWlkX2pzXzEudXVpZDdGcm9tVGltZTsgfSB9KTtcbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gVVVJRCB2NyBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHV1aWQ3KCkge1xuICAgIHJldHVybiAoMCwgdXVpZF8xLnY3KSgpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuX192ZXJzaW9uX18gPSBleHBvcnRzLnV1aWQ3RnJvbVRpbWUgPSBleHBvcnRzLnV1aWQ3ID0gZXhwb3J0cy5nZXREZWZhdWx0UHJvamVjdE5hbWUgPSBleHBvcnRzLm92ZXJyaWRlRmV0Y2hJbXBsZW1lbnRhdGlvbiA9IGV4cG9ydHMuUnVuVHJlZSA9IGV4cG9ydHMuQ2xpZW50ID0gdm9pZCAwO1xudmFyIGNsaWVudF9qc18xID0gcmVxdWlyZShcIi4vY2xpZW50LmNqc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNsaWVudFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xpZW50X2pzXzEuQ2xpZW50OyB9IH0pO1xudmFyIHJ1bl90cmVlc19qc18xID0gcmVxdWlyZShcIi4vcnVuX3RyZWVzLmNqc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJ1blRyZWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJ1bl90cmVlc19qc18xLlJ1blRyZWU7IH0gfSk7XG52YXIgZmV0Y2hfanNfMSA9IHJlcXVpcmUoXCIuL3NpbmdsZXRvbnMvZmV0Y2guY2pzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3ZlcnJpZGVGZXRjaEltcGxlbWVudGF0aW9uXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBmZXRjaF9qc18xLm92ZXJyaWRlRmV0Y2hJbXBsZW1lbnRhdGlvbjsgfSB9KTtcbnZhciBwcm9qZWN0X2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy9wcm9qZWN0LmNqc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERlZmF1bHRQcm9qZWN0TmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvamVjdF9qc18xLmdldERlZmF1bHRQcm9qZWN0TmFtZTsgfSB9KTtcbnZhciB1dWlkX2pzXzEgPSByZXF1aXJlKFwiLi91dWlkLmNqc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInV1aWQ3XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dWlkX2pzXzEudXVpZDc7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1dWlkN0Zyb21UaW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1dWlkX2pzXzEudXVpZDdGcm9tVGltZTsgfSB9KTtcbi8vIFVwZGF0ZSB1c2luZyB5YXJuIGJ1bXAtdmVyc2lvblxuZXhwb3J0cy5fX3ZlcnNpb25fXyA9IFwiMC4zLjg3XCI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFbnYgPSBleHBvcnRzLmlzTm9kZSA9IGV4cG9ydHMuaXNEZW5vID0gZXhwb3J0cy5pc0pzRG9tID0gZXhwb3J0cy5pc1dlYldvcmtlciA9IGV4cG9ydHMuaXNCcm93c2VyID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRSdW50aW1lRW52aXJvbm1lbnQgPSBnZXRSdW50aW1lRW52aXJvbm1lbnQ7XG5leHBvcnRzLmdldExhbmdTbWl0aEVudlZhcnNNZXRhZGF0YSA9IGdldExhbmdTbWl0aEVudlZhcnNNZXRhZGF0YTtcbmV4cG9ydHMuZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZXMgPSBnZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlcztcbmV4cG9ydHMuZ2V0RW52aXJvbm1lbnRWYXJpYWJsZSA9IGdldEVudmlyb25tZW50VmFyaWFibGU7XG5leHBvcnRzLmdldExhbmdTbWl0aEVudmlyb25tZW50VmFyaWFibGUgPSBnZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlO1xuZXhwb3J0cy5zZXRFbnZpcm9ubWVudFZhcmlhYmxlID0gc2V0RW52aXJvbm1lbnRWYXJpYWJsZTtcbmV4cG9ydHMuZ2V0U2hhcyA9IGdldFNoYXM7XG5leHBvcnRzLmdldE90ZWxFbmFibGVkID0gZ2V0T3RlbEVuYWJsZWQ7XG4vLyBJbmxpbmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZsZXhkaW5lc2gvYnJvd3Nlci1vci1ub2RlXG5jb25zdCBpbmRleF9qc18xID0gcmVxdWlyZShcIi4uL2luZGV4LmNqc1wiKTtcbmxldCBnbG9iYWxFbnY7XG5jb25zdCBpc0Jyb3dzZXIgPSAoKSA9PiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5leHBvcnRzLmlzQnJvd3NlciA9IGlzQnJvd3NlcjtcbmNvbnN0IGlzV2ViV29ya2VyID0gKCkgPT4gdHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBnbG9iYWxUaGlzLmNvbnN0cnVjdG9yICYmXG4gICAgZ2xvYmFsVGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXCI7XG5leHBvcnRzLmlzV2ViV29ya2VyID0gaXNXZWJXb3JrZXI7XG5jb25zdCBpc0pzRG9tID0gKCkgPT4gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Lm5hbWUgPT09IFwibm9kZWpzXCIpIHx8XG4gICAgKHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcImpzZG9tXCIpKTtcbmV4cG9ydHMuaXNKc0RvbSA9IGlzSnNEb207XG4vLyBTdXBhYmFzZSBFZGdlIEZ1bmN0aW9uIHByb3ZpZGVzIGEgYERlbm9gIGdsb2JhbCBvYmplY3Rcbi8vIHdpdGhvdXQgYHZlcnNpb25gIHByb3BlcnR5XG5jb25zdCBpc0Rlbm8gPSAoKSA9PiB0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIjtcbmV4cG9ydHMuaXNEZW5vID0gaXNEZW5vO1xuLy8gTWFyayBub3QtYXMtbm9kZSBpZiBpbiBTdXBhYmFzZSBFZGdlIEZ1bmN0aW9uXG5jb25zdCBpc05vZGUgPSAoKSA9PiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICEoMCwgZXhwb3J0cy5pc0Rlbm8pKCk7XG5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZTtcbmNvbnN0IGdldEVudiA9ICgpID0+IHtcbiAgICBpZiAoZ2xvYmFsRW52KSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxFbnY7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQnVuIHR5cGVzIGFyZSBub3QgaW1wb3J0ZWQgZHVlIHRvIGNvbmZsaWN0cyB3aXRoIE5vZGUgdHlwZXNcbiAgICBpZiAodHlwZW9mIEJ1biAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBnbG9iYWxFbnYgPSBcImJ1blwiO1xuICAgIH1cbiAgICBlbHNlIGlmICgoMCwgZXhwb3J0cy5pc0Jyb3dzZXIpKCkpIHtcbiAgICAgICAgZ2xvYmFsRW52ID0gXCJicm93c2VyXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCBleHBvcnRzLmlzTm9kZSkoKSkge1xuICAgICAgICBnbG9iYWxFbnYgPSBcIm5vZGVcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoKDAsIGV4cG9ydHMuaXNXZWJXb3JrZXIpKCkpIHtcbiAgICAgICAgZ2xvYmFsRW52ID0gXCJ3ZWJ3b3JrZXJcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoKDAsIGV4cG9ydHMuaXNKc0RvbSkoKSkge1xuICAgICAgICBnbG9iYWxFbnYgPSBcImpzZG9tXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCBleHBvcnRzLmlzRGVubykoKSkge1xuICAgICAgICBnbG9iYWxFbnYgPSBcImRlbm9cIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdsb2JhbEVudiA9IFwib3RoZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbEVudjtcbn07XG5leHBvcnRzLmdldEVudiA9IGdldEVudjtcbmxldCBydW50aW1lRW52aXJvbm1lbnQ7XG5mdW5jdGlvbiBnZXRSdW50aW1lRW52aXJvbm1lbnQoKSB7XG4gICAgaWYgKHJ1bnRpbWVFbnZpcm9ubWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVudiA9ICgwLCBleHBvcnRzLmdldEVudikoKTtcbiAgICAgICAgY29uc3QgcmVsZWFzZUVudiA9IGdldFNoYXMoKTtcbiAgICAgICAgcnVudGltZUVudmlyb25tZW50ID0ge1xuICAgICAgICAgICAgbGlicmFyeTogXCJsYW5nc21pdGhcIixcbiAgICAgICAgICAgIHJ1bnRpbWU6IGVudixcbiAgICAgICAgICAgIHNkazogXCJsYW5nc21pdGgtanNcIixcbiAgICAgICAgICAgIHNka192ZXJzaW9uOiBpbmRleF9qc18xLl9fdmVyc2lvbl9fLFxuICAgICAgICAgICAgLi4ucmVsZWFzZUVudixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJ1bnRpbWVFbnZpcm9ubWVudDtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRoZSBMYW5nU21pdGgtc3BlY2lmaWMgbWV0YWRhdGEgZnJvbSB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICogIC0gQSByZWNvcmQgb2YgTGFuZ1NtaXRoLXNwZWNpZmljIG1ldGFkYXRhIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TGFuZ1NtaXRoRW52VmFyc01ldGFkYXRhKCkge1xuICAgIGNvbnN0IGFsbEVudlZhcnMgPSBnZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlcygpO1xuICAgIGNvbnN0IGVudlZhcnMgPSB7fTtcbiAgICBjb25zdCBleGNsdWRlZCA9IFtcbiAgICAgICAgXCJMQU5HQ0hBSU5fQVBJX0tFWVwiLFxuICAgICAgICBcIkxBTkdDSEFJTl9FTkRQT0lOVFwiLFxuICAgICAgICBcIkxBTkdDSEFJTl9UUkFDSU5HX1YyXCIsXG4gICAgICAgIFwiTEFOR0NIQUlOX1BST0pFQ1RcIixcbiAgICAgICAgXCJMQU5HQ0hBSU5fU0VTU0lPTlwiLFxuICAgICAgICBcIkxBTkdTTUlUSF9BUElfS0VZXCIsXG4gICAgICAgIFwiTEFOR1NNSVRIX0VORFBPSU5UXCIsXG4gICAgICAgIFwiTEFOR1NNSVRIX1RSQUNJTkdfVjJcIixcbiAgICAgICAgXCJMQU5HU01JVEhfUFJPSkVDVFwiLFxuICAgICAgICBcIkxBTkdTTUlUSF9TRVNTSU9OXCIsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhbGxFbnZWYXJzKSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAhZXhjbHVkZWQuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgIWtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwia2V5XCIpICYmXG4gICAgICAgICAgICAha2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJzZWNyZXRcIikgJiZcbiAgICAgICAgICAgICFrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInRva2VuXCIpKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcIkxBTkdDSEFJTl9SRVZJU0lPTl9JRFwiKSB7XG4gICAgICAgICAgICAgICAgZW52VmFyc1tcInJldmlzaW9uX2lkXCJdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnZWYXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW52VmFycztcbn1cbi8qKlxuICogUmV0cmlldmVzIG9ubHkgdGhlIExhbmdDaGFpbi9MYW5nU21pdGgtcHJlZml4ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gdGhlIGN1cnJlbnQgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBjb3B5aW5nIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKiAgLSBBIHJlY29yZCBvZiBMYW5nQ2hhaW4vTGFuZ1NtaXRoIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZXMoKSB7XG4gICAgY29uc3QgZW52VmFycyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBOb2RlLmpzIGVudmlyb25tZW50XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvY2Vzcy5lbnYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKChrZXkuc3RhcnRzV2l0aChcIkxBTkdDSEFJTl9cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJMQU5HU01JVEhfXCIpKSAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoa2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJrZXlcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwic2VjcmV0XCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInRva2VuXCIpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZWYXJzW2tleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIDIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIqXCIucmVwZWF0KHZhbHVlLmxlbmd0aCAtIDQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW52VmFyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQ2F0Y2ggYW55IGVycm9ycyB0aGF0IG1pZ2h0IG9jY3VyIHdoaWxlIHRyeWluZyB0byBhY2Nlc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgfVxuICAgIHJldHVybiBlbnZWYXJzO1xufVxuZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRWYXJpYWJsZShuYW1lKSB7XG4gICAgLy8gQ2VydGFpbiBEZW5vIHNldHVwcyB3aWxsIHRocm93IGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gYWNjZXNzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9od2NoYXNlMTcvbGFuZ2NoYWluanMvaXNzdWVzLzE0MTJcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb2Nlc3MtZW52XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnY/LltuYW1lXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZShuYW1lKSB7XG4gICAgcmV0dXJuIChnZXRFbnZpcm9ubWVudFZhcmlhYmxlKGBMQU5HU01JVEhfJHtuYW1lfWApIHx8XG4gICAgICAgIGdldEVudmlyb25tZW50VmFyaWFibGUoYExBTkdDSEFJTl8ke25hbWV9YCkpO1xufVxuZnVuY3Rpb24gc2V0RW52aXJvbm1lbnRWYXJpYWJsZShuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1lbnZcbiAgICAgICAgcHJvY2Vzcy5lbnZbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG59XG5sZXQgY2FjaGVkQ29tbWl0U0hBcztcbi8qKlxuICogR2V0IHRoZSBHaXQgY29tbWl0IFNIQSBmcm9tIGNvbW1vbiBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIHVzZWQgYnkgZGlmZmVyZW50IENJL0NEIHBsYXRmb3Jtcy5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBHaXQgY29tbWl0IFNIQSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICovXG5mdW5jdGlvbiBnZXRTaGFzKCkge1xuICAgIGlmIChjYWNoZWRDb21taXRTSEFzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZENvbW1pdFNIQXM7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1vbl9yZWxlYXNlX2VudnMgPSBbXG4gICAgICAgIFwiVkVSQ0VMX0dJVF9DT01NSVRfU0hBXCIsXG4gICAgICAgIFwiTkVYVF9QVUJMSUNfVkVSQ0VMX0dJVF9DT01NSVRfU0hBXCIsXG4gICAgICAgIFwiQ09NTUlUX1JFRlwiLFxuICAgICAgICBcIlJFTkRFUl9HSVRfQ09NTUlUXCIsXG4gICAgICAgIFwiQ0lfQ09NTUlUX1NIQVwiLFxuICAgICAgICBcIkNJUkNMRV9TSEExXCIsXG4gICAgICAgIFwiQ0ZfUEFHRVNfQ09NTUlUX1NIQVwiLFxuICAgICAgICBcIlJFQUNUX0FQUF9HSVRfU0hBXCIsXG4gICAgICAgIFwiU09VUkNFX1ZFUlNJT05cIixcbiAgICAgICAgXCJHSVRIVUJfU0hBXCIsXG4gICAgICAgIFwiVFJBVklTX0NPTU1JVFwiLFxuICAgICAgICBcIkdJVF9DT01NSVRcIixcbiAgICAgICAgXCJCVUlMRF9WQ1NfTlVNQkVSXCIsXG4gICAgICAgIFwiYmFtYm9vX3BsYW5SZXBvc2l0b3J5X3JldmlzaW9uXCIsXG4gICAgICAgIFwiQnVpbGQuU291cmNlVmVyc2lvblwiLFxuICAgICAgICBcIkJJVEJVQ0tFVF9DT01NSVRcIixcbiAgICAgICAgXCJEUk9ORV9DT01NSVRfU0hBXCIsXG4gICAgICAgIFwiU0VNQVBIT1JFX0dJVF9TSEFcIixcbiAgICAgICAgXCJCVUlMREtJVEVfQ09NTUlUXCIsXG4gICAgXTtcbiAgICBjb25zdCBzaGFzID0ge307XG4gICAgZm9yIChjb25zdCBlbnYgb2YgY29tbW9uX3JlbGVhc2VfZW52cykge1xuICAgICAgICBjb25zdCBlbnZWYXIgPSBnZXRFbnZpcm9ubWVudFZhcmlhYmxlKGVudik7XG4gICAgICAgIGlmIChlbnZWYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2hhc1tlbnZdID0gZW52VmFyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhY2hlZENvbW1pdFNIQXMgPSBzaGFzO1xuICAgIHJldHVybiBzaGFzO1xufVxuZnVuY3Rpb24gZ2V0T3RlbEVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIChnZXRFbnZpcm9ubWVudFZhcmlhYmxlKFwiT1RFTF9FTkFCTEVEXCIpID09PSBcInRydWVcIiB8fFxuICAgICAgICBnZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlKFwiT1RFTF9FTkFCTEVEXCIpID09PSBcInRydWVcIik7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLy8gU2hvdWxkIG5vdCBpbXBvcnQgYW55IE9URUwgcGFja2FnZXMgdG8gYXZvaWQgcHVsbGluZyBpbiBvcHRpb25hbCBkZXBzLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5PVEVMUHJvdmlkZXJTaW5nbGV0b24gPSB2b2lkIDA7XG5leHBvcnRzLmdldE9URUxUcmFjZSA9IGdldE9URUxUcmFjZTtcbmV4cG9ydHMuZ2V0T1RFTENvbnRleHQgPSBnZXRPVEVMQ29udGV4dDtcbmV4cG9ydHMuc2V0T1RFTEluc3RhbmNlcyA9IHNldE9URUxJbnN0YW5jZXM7XG5leHBvcnRzLnNldERlZmF1bHRPVExQVHJhY2VyQ29tcG9uZW50cyA9IHNldERlZmF1bHRPVExQVHJhY2VyQ29tcG9uZW50cztcbmV4cG9ydHMuZ2V0RGVmYXVsdE9UTFBUcmFjZXJDb21wb25lbnRzID0gZ2V0RGVmYXVsdE9UTFBUcmFjZXJDb21wb25lbnRzO1xuY29uc3QgZW52X2pzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHMvZW52LmNqc1wiKTtcbmNsYXNzIE1vY2tUcmFjZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJoYXNXYXJuZWRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGFydEFjdGl2ZVNwYW4oX25hbWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1dhcm5lZCAmJiAoMCwgZW52X2pzXzEuZ2V0T3RlbEVuYWJsZWQpKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIllvdSBoYXZlIGVuYWJsZWQgT1RFTCBleHBvcnQgdmlhIHRoZSBgT1RFTF9FTkFCTEVEYCBvciBgTEFOR1NNSVRIX09URUxfRU5BQkxFRGAgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBoYXZlIG5vdCBpbml0aWFsaXplZCB0aGUgcmVxdWlyZWQgT1RFTCBpbnN0YW5jZXMuIFwiICtcbiAgICAgICAgICAgICAgICAnUGxlYXNlIGFkZDpcXG5gYGBcXG5pbXBvcnQgeyBpbml0aWFsaXplT1RFTCB9IGZyb20gXCJsYW5nc21pdGgvZXhwZXJpbWVudGFsL290ZWwvc2V0dXBcIjtcXG5pbml0aWFsaXplT1RFTCgpO1xcbmBgYFxcbmF0IHRoZSBiZWdpbm5pbmcgb2YgeW91ciBjb2RlLicpO1xuICAgICAgICAgICAgdGhpcy5oYXNXYXJuZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgb3ZlcmxvYWRzOlxuICAgICAgICAvLyBzdGFydEFjdGl2ZVNwYW4obmFtZSwgZm4pXG4gICAgICAgIC8vIHN0YXJ0QWN0aXZlU3BhbihuYW1lLCBvcHRpb25zLCBmbilcbiAgICAgICAgLy8gc3RhcnRBY3RpdmVTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQsIGZuKVxuICAgICAgICBsZXQgZm47XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBmbiA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGFyZ3NbMV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZm4gPSBhcmdzWzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAzICYmIHR5cGVvZiBhcmdzWzJdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZuID0gYXJnc1syXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuY2xhc3MgTW9ja09URUxUcmFjZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1vY2tUcmFjZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNb2NrVHJhY2VyKClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFRyYWNlcihfbmFtZSwgX3ZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9ja1RyYWNlcjtcbiAgICB9XG4gICAgZ2V0QWN0aXZlU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc2V0U3Bhbihjb250ZXh0LCBfc3Bhbikge1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgZ2V0U3BhbihfY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXRTcGFuQ29udGV4dChjb250ZXh0LCBfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIGdldFRyYWNlclByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXRHbG9iYWxUcmFjZXJQcm92aWRlcihfdHJhY2VyUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmNsYXNzIE1vY2tPVEVMQ29udGV4dCB7XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHdpdGgoX2NvbnRleHQsIGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgIH1cbn1cbmNvbnN0IE9URUxfVFJBQ0VfS0VZID0gU3ltYm9sLmZvcihcImxzOm90ZWxfdHJhY2VcIik7XG5jb25zdCBPVEVMX0NPTlRFWFRfS0VZID0gU3ltYm9sLmZvcihcImxzOm90ZWxfY29udGV4dFwiKTtcbmNvbnN0IE9URUxfR0VUX0RFRkFVTFRfT1RMUF9UUkFDRVJfUFJPVklERVJfS0VZID0gU3ltYm9sLmZvcihcImxzOm90ZWxfZ2V0X2RlZmF1bHRfb3RscF90cmFjZXJfcHJvdmlkZXJcIik7XG5jb25zdCBtb2NrT1RFTFRyYWNlID0gbmV3IE1vY2tPVEVMVHJhY2UoKTtcbmNvbnN0IG1vY2tPVEVMQ29udGV4dCA9IG5ldyBNb2NrT1RFTENvbnRleHQoKTtcbmNsYXNzIE9URUxQcm92aWRlciB7XG4gICAgZ2V0VHJhY2VJbnN0YW5jZSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXNbT1RFTF9UUkFDRV9LRVldID8/IG1vY2tPVEVMVHJhY2U7XG4gICAgfVxuICAgIGdldENvbnRleHRJbnN0YW5jZSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXNbT1RFTF9DT05URVhUX0tFWV0gPz8gbW9ja09URUxDb250ZXh0O1xuICAgIH1cbiAgICBpbml0aWFsaXplR2xvYmFsSW5zdGFuY2VzKG90ZWwpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgaWYgKGdsb2JhbFRoaXNbT1RFTF9UUkFDRV9LRVldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBnbG9iYWxUaGlzW09URUxfVFJBQ0VfS0VZXSA9IG90ZWwudHJhY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgaWYgKGdsb2JhbFRoaXNbT1RFTF9DT05URVhUX0tFWV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGdsb2JhbFRoaXNbT1RFTF9DT05URVhUX0tFWV0gPSBvdGVsLmNvbnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0RGVmYXVsdE9UTFBUcmFjZXJDb21wb25lbnRzKGNvbXBvbmVudHMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgZ2xvYmFsVGhpc1tPVEVMX0dFVF9ERUZBVUxUX09UTFBfVFJBQ0VSX1BST1ZJREVSX0tFWV0gPSBjb21wb25lbnRzO1xuICAgIH1cbiAgICBnZXREZWZhdWx0T1RMUFRyYWNlckNvbXBvbmVudHMoKSB7XG4gICAgICAgIHJldHVybiAoZ2xvYmFsVGhpc1tPVEVMX0dFVF9ERUZBVUxUX09UTFBfVFJBQ0VSX1BST1ZJREVSX0tFWV0gPz9cbiAgICAgICAgICAgIHVuZGVmaW5lZCk7XG4gICAgfVxufVxuZXhwb3J0cy5PVEVMUHJvdmlkZXJTaW5nbGV0b24gPSBuZXcgT1RFTFByb3ZpZGVyKCk7XG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBPVEVMIHRyYWNlIGluc3RhbmNlLlxuICogUmV0dXJucyBhIG1vY2sgaW1wbGVtZW50YXRpb24gaWYgT1RFTCBpcyBub3QgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRPVEVMVHJhY2UoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuT1RFTFByb3ZpZGVyU2luZ2xldG9uLmdldFRyYWNlSW5zdGFuY2UoKTtcbn1cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IE9URUwgY29udGV4dCBpbnN0YW5jZS5cbiAqIFJldHVybnMgYSBtb2NrIGltcGxlbWVudGF0aW9uIGlmIE9URUwgaXMgbm90IGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0T1RFTENvbnRleHQoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuT1RFTFByb3ZpZGVyU2luZ2xldG9uLmdldENvbnRleHRJbnN0YW5jZSgpO1xufVxuLyoqXG4gKiBJbml0aWFsaXplIHRoZSBnbG9iYWwgT1RFTCBpbnN0YW5jZXMuXG4gKiBTaG91bGQgYmUgY2FsbGVkIG9uY2Ugd2hlbiBPVEVMIHBhY2thZ2VzIGFyZSBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE9URUxJbnN0YW5jZXMob3RlbCkge1xuICAgIGV4cG9ydHMuT1RFTFByb3ZpZGVyU2luZ2xldG9uLmluaXRpYWxpemVHbG9iYWxJbnN0YW5jZXMob3RlbCk7XG59XG4vKipcbiAqIFNldCBhIGdldHRlciBmdW5jdGlvbiBmb3IgdGhlIGRlZmF1bHQgT1RMUCB0cmFjZXIgcHJvdmlkZXIuXG4gKiBUaGlzIGFsbG93cyBsYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSB0cmFjZXIgcHJvdmlkZXIuXG4gKi9cbmZ1bmN0aW9uIHNldERlZmF1bHRPVExQVHJhY2VyQ29tcG9uZW50cyhjb21wb25lbnRzKSB7XG4gICAgZXhwb3J0cy5PVEVMUHJvdmlkZXJTaW5nbGV0b24uc2V0RGVmYXVsdE9UTFBUcmFjZXJDb21wb25lbnRzKGNvbXBvbmVudHMpO1xufVxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgT1RMUCB0cmFjZXIgcHJvdmlkZXIgaW5zdGFuY2UuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3Qgc2V0LlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0T1RMUFRyYWNlckNvbXBvbmVudHMoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuT1RFTFByb3ZpZGVyU2luZ2xldG9uLmdldERlZmF1bHRPVExQVHJhY2VyQ29tcG9uZW50cygpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICB2YXIgYXIgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICAgICAgICByZXR1cm4gYXI7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvd25LZXlzKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgICAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5MYW5nU21pdGhUb09URUxUcmFuc2xhdG9yID0gdm9pZCAwO1xuY29uc3QgY29uc3RhbnRzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL2NvbnN0YW50cy5janNcIikpO1xuY29uc3Qgb3RlbF9qc18xID0gcmVxdWlyZShcIi4uLy4uL3NpbmdsZXRvbnMvb3RlbC5janNcIik7XG5jb25zdCBXRUxMX0tOT1dOX09QRVJBVElPTl9OQU1FUyA9IHtcbiAgICBsbG06IFwiY2hhdFwiLFxuICAgIHRvb2w6IFwiZXhlY3V0ZV90b29sXCIsXG4gICAgcmV0cmlldmVyOiBcImVtYmVkZGluZ3NcIixcbiAgICBlbWJlZGRpbmc6IFwiZW1iZWRkaW5nc1wiLFxuICAgIHByb21wdDogXCJjaGF0XCIsXG59O1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTmFtZShydW5UeXBlKSB7XG4gICAgcmV0dXJuIFdFTExfS05PV05fT1BFUkFUSU9OX05BTUVTW3J1blR5cGVdIHx8IHJ1blR5cGU7XG59XG5jbGFzcyBMYW5nU21pdGhUb09URUxUcmFuc2xhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic3BhbnNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhwb3J0QmF0Y2gob3BlcmF0aW9ucywgb3RlbENvbnRleHRNYXApIHtcbiAgICAgICAgZm9yIChjb25zdCBvcCBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICghb3AucnVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3Aub3BlcmF0aW9uID09PSBcInBvc3RcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gdGhpcy5jcmVhdGVTcGFuRm9yUnVuKG9wLCBvcC5ydW4sIG90ZWxDb250ZXh0TWFwLmdldChvcC5pZCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3BhbiAmJiAhb3AucnVuLmVuZF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5zLnNldChvcC5pZCwgc3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3BhbkZvclJ1bihvcCwgb3AucnVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHByb2Nlc3Npbmcgb3BlcmF0aW9uICR7b3AuaWR9OmAsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZVNwYW5Gb3JSdW4ob3AsIHJ1bkluZm8sIG90ZWxDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBvdGVsQ29udGV4dCAmJiAoMCwgb3RlbF9qc18xLmdldE9URUxUcmFjZSkoKS5nZXRTcGFuKG90ZWxDb250ZXh0KTtcbiAgICAgICAgaWYgKCFhY3RpdmVTcGFuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFNwYW5TZXR1cChhY3RpdmVTcGFuLCBydW5JbmZvLCBvcCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgc3BhbiBmb3IgcnVuICR7b3AuaWR9OmAsIGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5pc2hTcGFuU2V0dXAoc3BhbiwgcnVuSW5mbywgb3ApIHtcbiAgICAgICAgLy8gU2V0IGFsbCBhdHRyaWJ1dGVzXG4gICAgICAgIHRoaXMuc2V0U3BhbkF0dHJpYnV0ZXMoc3BhbiwgcnVuSW5mbywgb3ApO1xuICAgICAgICAvLyBTZXQgc3RhdHVzIGJhc2VkIG9uIGVycm9yXG4gICAgICAgIGlmIChydW5JbmZvLmVycm9yKSB7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IDIgfSk7IC8vIEVSUk9SIHN0YXR1c1xuICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24obmV3IEVycm9yKHJ1bkluZm8uZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogMSB9KTsgLy8gT0sgc3RhdHVzXG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSBzcGFuIGlmIGVuZF90aW1lIGlzIHByZXNlbnRcbiAgICAgICAgaWYgKHJ1bkluZm8uZW5kX3RpbWUpIHtcbiAgICAgICAgICAgIHNwYW4uZW5kKG5ldyBEYXRlKHJ1bkluZm8uZW5kX3RpbWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3BhbjtcbiAgICB9XG4gICAgdXBkYXRlU3BhbkZvclJ1bihvcCwgcnVuSW5mbykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMuc3BhbnMuZ2V0KG9wLmlkKTtcbiAgICAgICAgICAgIGlmICghc3Bhbikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYE5vIHNwYW4gZm91bmQgZm9yIHJ1biAke29wLmlkfSBkdXJpbmcgdXBkYXRlYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIHRoaXMuc2V0U3BhbkF0dHJpYnV0ZXMoc3BhbiwgcnVuSW5mbywgb3ApO1xuICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXR1cyBiYXNlZCBvbiBlcnJvclxuICAgICAgICAgICAgaWYgKHJ1bkluZm8uZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IDIgfSk7IC8vIEVSUk9SIHN0YXR1c1xuICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKG5ldyBFcnJvcihydW5JbmZvLmVycm9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IDEgfSk7IC8vIE9LIHN0YXR1c1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRW5kIHRoZSBzcGFuIGlmIGVuZF90aW1lIGlzIHByZXNlbnRcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBydW5JbmZvLmVuZF90aW1lO1xuICAgICAgICAgICAgaWYgKGVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgICBzcGFuLmVuZChuZXcgRGF0ZShlbmRUaW1lKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFucy5kZWxldGUob3AuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIHNwYW4gZm9yIHJ1biAke29wLmlkfTpgLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleHRyYWN0TW9kZWxOYW1lKHJ1bkluZm8pIHtcbiAgICAgICAgLy8gVHJ5IHRvIGdldCBtb2RlbCBuYW1lIGZyb20gbWV0YWRhdGFcbiAgICAgICAgaWYgKHJ1bkluZm8uZXh0cmE/Lm1ldGFkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHJ1bkluZm8uZXh0cmEubWV0YWRhdGE7XG4gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayBmb3IgbHNfbW9kZWxfbmFtZSBpbiBtZXRhZGF0YVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmxzX21vZGVsX25hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGEubHNfbW9kZWxfbmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZW4gY2hlY2sgaW52b2NhdGlvbl9wYXJhbXMgZm9yIG1vZGVsIGluZm9cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5pbnZvY2F0aW9uX3BhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludm9jYXRpb25QYXJhbXMgPSBtZXRhZGF0YS5pbnZvY2F0aW9uX3BhcmFtcztcbiAgICAgICAgICAgICAgICBpZiAoaW52b2NhdGlvblBhcmFtcy5tb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW52b2NhdGlvblBhcmFtcy5tb2RlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW52b2NhdGlvblBhcmFtcy5tb2RlbF9uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnZvY2F0aW9uUGFyYW1zLm1vZGVsX25hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0U3BhbkF0dHJpYnV0ZXMoc3BhbiwgcnVuSW5mbywgb3ApIHtcbiAgICAgICAgaWYgKFwicnVuX3R5cGVcIiBpbiBydW5JbmZvICYmIHJ1bkluZm8ucnVuX3R5cGUpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5MQU5HU01JVEhfUlVOX1RZUEUsIHJ1bkluZm8ucnVuX3R5cGUpO1xuICAgICAgICAgICAgLy8gU2V0IEdlbkFJIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIE9URUwgc2VtYW50aWMgY29udmVudGlvbnNcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbk5hbWUgPSBnZXRPcGVyYXRpb25OYW1lKHJ1bkluZm8ucnVuX3R5cGUgfHwgXCJjaGFpblwiKTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5HRU5fQUlfT1BFUkFUSU9OX05BTUUsIG9wZXJhdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5hbWVcIiBpbiBydW5JbmZvICYmIHJ1bkluZm8ubmFtZSkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkxBTkdTTUlUSF9OQU1FLCBydW5JbmZvLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcInNlc3Npb25faWRcIiBpbiBydW5JbmZvICYmIHJ1bkluZm8uc2Vzc2lvbl9pZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkxBTkdTTUlUSF9TRVNTSU9OX0lELCBydW5JbmZvLnNlc3Npb25faWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcInNlc3Npb25fbmFtZVwiIGluIHJ1bkluZm8gJiYgcnVuSW5mby5zZXNzaW9uX25hbWUpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5MQU5HU01JVEhfU0VTU0lPTl9OQU1FLCBydW5JbmZvLnNlc3Npb25fbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IGdlbl9haS5zeXN0ZW1cbiAgICAgICAgdGhpcy5zZXRHZW5BaVN5c3RlbShzcGFuLCBydW5JbmZvKTtcbiAgICAgICAgLy8gU2V0IG1vZGVsIG5hbWUgaWYgYXZhaWxhYmxlXG4gICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRoaXMuZXh0cmFjdE1vZGVsTmFtZShydW5JbmZvKTtcbiAgICAgICAgaWYgKG1vZGVsTmFtZSkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVFVRVNUX01PREVMLCBtb2RlbE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0b2tlbiB1c2FnZSBpbmZvcm1hdGlvblxuICAgICAgICBpZiAoXCJwcm9tcHRfdG9rZW5zXCIgaW4gcnVuSW5mbyAmJlxuICAgICAgICAgICAgdHlwZW9mIHJ1bkluZm8ucHJvbXB0X3Rva2VucyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHJ1bkluZm8ucHJvbXB0X3Rva2Vucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29tcGxldGlvbl90b2tlbnNcIiBpbiBydW5JbmZvICYmXG4gICAgICAgICAgICB0eXBlb2YgcnVuSW5mby5jb21wbGV0aW9uX3Rva2VucyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TLCBydW5JbmZvLmNvbXBsZXRpb25fdG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJ0b3RhbF90b2tlbnNcIiBpbiBydW5JbmZvICYmIHR5cGVvZiBydW5JbmZvLnRvdGFsX3Rva2VucyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9VU0FHRV9UT1RBTF9UT0tFTlMsIHJ1bkluZm8udG90YWxfdG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgb3RoZXIgcGFyYW1ldGVycyBmcm9tIGludm9jYXRpb25fcGFyYW1zXG4gICAgICAgIHRoaXMuc2V0SW52b2NhdGlvblBhcmFtZXRlcnMoc3BhbiwgcnVuSW5mbyk7XG4gICAgICAgIC8vIFNldCBtZXRhZGF0YSBhbmQgdGFncyBpZiBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBydW5JbmZvLmV4dHJhPy5tZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke2NvbnN0YW50cy5MQU5HU01JVEhfTUVUQURBVEF9LiR7a2V5fWAsIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBydW5JbmZvLnRhZ3M7XG4gICAgICAgIGlmICh0YWdzICYmIEFycmF5LmlzQXJyYXkodGFncykpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5MQU5HU01JVEhfVEFHUywgdGFncy5qb2luKFwiLCBcIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRhZ3MpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5MQU5HU01JVEhfVEFHUywgU3RyaW5nKHRhZ3MpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdXBwb3J0IGFkZGl0aW9uYWwgc2VyaWFsaXplZCBhdHRyaWJ1dGVzLCBpZiBwcmVzZW50XG4gICAgICAgIGlmIChcInNlcmlhbGl6ZWRcIiBpbiBydW5JbmZvICYmIHR5cGVvZiBydW5JbmZvLnNlcmlhbGl6ZWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBydW5JbmZvLnNlcmlhbGl6ZWQ7XG4gICAgICAgICAgICBpZiAoc2VyaWFsaXplZC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9TRVJJQUxJWkVEX05BTUUsIFN0cmluZyhzZXJpYWxpemVkLm5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXJpYWxpemVkLnNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5HRU5fQUlfU0VSSUFMSVpFRF9TSUdOQVRVUkUsIFN0cmluZyhzZXJpYWxpemVkLnNpZ25hdHVyZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWQuZG9jKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9TRVJJQUxJWkVEX0RPQywgU3RyaW5nKHNlcmlhbGl6ZWQuZG9jKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IGlucHV0cy9vdXRwdXRzIGlmIGF2YWlsYWJsZVxuICAgICAgICB0aGlzLnNldElPQXR0cmlidXRlcyhzcGFuLCBvcCk7XG4gICAgfVxuICAgIHNldEdlbkFpU3lzdGVtKHNwYW4sIHJ1bkluZm8pIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBcImxhbmdjaGFpblwiIGlmIHdlIGNhbid0IGRldGVybWluZSB0aGUgc3lzdGVtXG4gICAgICAgIGxldCBzeXN0ZW0gPSBcImxhbmdjaGFpblwiO1xuICAgICAgICAvLyBFeHRyYWN0IG1vZGVsIG5hbWUgdG8gZGV0ZXJtaW5lIHRoZSBzeXN0ZW1cbiAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gdGhpcy5leHRyYWN0TW9kZWxOYW1lKHJ1bkluZm8pO1xuICAgICAgICBpZiAobW9kZWxOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbExvd2VyID0gbW9kZWxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAobW9kZWxMb3dlci5pbmNsdWRlcyhcImFudGhyb3BpY1wiKSB8fCBtb2RlbExvd2VyLnN0YXJ0c1dpdGgoXCJjbGF1ZGVcIikpIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW0gPSBcImFudGhyb3BpY1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxMb3dlci5pbmNsdWRlcyhcImJlZHJvY2tcIikpIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW0gPSBcImF3cy5iZWRyb2NrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbExvd2VyLmluY2x1ZGVzKFwiYXp1cmVcIikgJiZcbiAgICAgICAgICAgICAgICBtb2RlbExvd2VyLmluY2x1ZGVzKFwib3BlbmFpXCIpKSB7XG4gICAgICAgICAgICAgICAgc3lzdGVtID0gXCJhei5haS5vcGVuYWlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsTG93ZXIuaW5jbHVkZXMoXCJhenVyZVwiKSAmJlxuICAgICAgICAgICAgICAgIG1vZGVsTG93ZXIuaW5jbHVkZXMoXCJpbmZlcmVuY2VcIikpIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW0gPSBcImF6LmFpLmluZmVyZW5jZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxMb3dlci5pbmNsdWRlcyhcImNvaGVyZVwiKSkge1xuICAgICAgICAgICAgICAgIHN5c3RlbSA9IFwiY29oZXJlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbExvd2VyLmluY2x1ZGVzKFwiZGVlcHNlZWtcIikpIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW0gPSBcImRlZXBzZWVrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbExvd2VyLmluY2x1ZGVzKFwiZ2VtaW5pXCIpKSB7XG4gICAgICAgICAgICAgICAgc3lzdGVtID0gXCJnZW1pbmlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsTG93ZXIuaW5jbHVkZXMoXCJncm9xXCIpKSB7XG4gICAgICAgICAgICAgICAgc3lzdGVtID0gXCJncm9xXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbExvd2VyLmluY2x1ZGVzKFwid2F0c29uXCIpIHx8IG1vZGVsTG93ZXIuaW5jbHVkZXMoXCJpYm1cIikpIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW0gPSBcImlibS53YXRzb254LmFpXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbExvd2VyLmluY2x1ZGVzKFwibWlzdHJhbFwiKSkge1xuICAgICAgICAgICAgICAgIHN5c3RlbSA9IFwibWlzdHJhbF9haVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZWxMb3dlci5pbmNsdWRlcyhcImdwdFwiKSB8fCBtb2RlbExvd2VyLmluY2x1ZGVzKFwib3BlbmFpXCIpKSB7XG4gICAgICAgICAgICAgICAgc3lzdGVtID0gXCJvcGVuYWlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsTG93ZXIuaW5jbHVkZXMoXCJwZXJwbGV4aXR5XCIpIHx8XG4gICAgICAgICAgICAgICAgbW9kZWxMb3dlci5pbmNsdWRlcyhcInNvbmFyXCIpKSB7XG4gICAgICAgICAgICAgICAgc3lzdGVtID0gXCJwZXJwbGV4aXR5XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlbExvd2VyLmluY2x1ZGVzKFwidmVydGV4XCIpKSB7XG4gICAgICAgICAgICAgICAgc3lzdGVtID0gXCJ2ZXJ0ZXhfYWlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsTG93ZXIuaW5jbHVkZXMoXCJ4YWlcIikgfHwgbW9kZWxMb3dlci5pbmNsdWRlcyhcImdyb2tcIikpIHtcbiAgICAgICAgICAgICAgICBzeXN0ZW0gPSBcInhhaVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5HRU5fQUlfU1lTVEVNLCBzeXN0ZW0pO1xuICAgIH1cbiAgICBzZXRJbnZvY2F0aW9uUGFyYW1ldGVycyhzcGFuLCBydW5JbmZvKSB7XG4gICAgICAgIGlmICghcnVuSW5mby5leHRyYT8ubWV0YWRhdGE/Lmludm9jYXRpb25fcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52b2NhdGlvblBhcmFtcyA9IHJ1bkluZm8uZXh0cmEubWV0YWRhdGEuaW52b2NhdGlvbl9wYXJhbXM7XG4gICAgICAgIC8vIFNldCByZWxldmFudCBpbnZvY2F0aW9uIHBhcmFtZXRlcnNcbiAgICAgICAgaWYgKGludm9jYXRpb25QYXJhbXMubWF4X3Rva2VucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1JFUVVFU1RfTUFYX1RPS0VOUywgaW52b2NhdGlvblBhcmFtcy5tYXhfdG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW52b2NhdGlvblBhcmFtcy50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1JFUVVFU1RfVEVNUEVSQVRVUkUsIGludm9jYXRpb25QYXJhbXMudGVtcGVyYXR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnZvY2F0aW9uUGFyYW1zLnRvcF9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5HRU5fQUlfUkVRVUVTVF9UT1BfUCwgaW52b2NhdGlvblBhcmFtcy50b3BfcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludm9jYXRpb25QYXJhbXMuZnJlcXVlbmN5X3BlbmFsdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVFVRVNUX0ZSRVFVRU5DWV9QRU5BTFRZLCBpbnZvY2F0aW9uUGFyYW1zLmZyZXF1ZW5jeV9wZW5hbHR5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW52b2NhdGlvblBhcmFtcy5wcmVzZW5jZV9wZW5hbHR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5HRU5fQUlfUkVRVUVTVF9QUkVTRU5DRV9QRU5BTFRZLCBpbnZvY2F0aW9uUGFyYW1zLnByZXNlbmNlX3BlbmFsdHkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldElPQXR0cmlidXRlcyhzcGFuLCBvcCkge1xuICAgICAgICBpZiAob3AucnVuLmlucHV0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dHMgPSBvcC5ydW4uaW5wdXRzO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXRzID09PSBcIm9iamVjdFwiICYmIGlucHV0cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRzLm1vZGVsICYmIEFycmF5LmlzQXJyYXkoaW5wdXRzLm1lc3NhZ2VzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVFVRVNUX01PREVMLCBpbnB1dHMubW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhZGRpdGlvbmFsIHJlcXVlc3QgYXR0cmlidXRlcyBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0cy5zdHJlYW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkxBTkdTTUlUSF9SRVFVRVNUX1NUUkVBTUlORywgaW5wdXRzLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0cy5leHRyYV9oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuTEFOR1NNSVRIX1JFUVVFU1RfSEVBREVSUywgSlNPTi5zdHJpbmdpZnkoaW5wdXRzLmV4dHJhX2hlYWRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRzLmV4dHJhX3F1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1JFUVVFU1RfRVhUUkFfUVVFUlksIEpTT04uc3RyaW5naWZ5KGlucHV0cy5leHRyYV9xdWVyeSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dHMuZXh0cmFfYm9keSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVFVRVNUX0VYVFJBX0JPRFksIEpTT04uc3RyaW5naWZ5KGlucHV0cy5leHRyYV9ib2R5KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTkFJX1BST01QVCwgSlNPTi5zdHJpbmdpZnkoaW5wdXRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEZhaWxlZCB0byBwcm9jZXNzIGlucHV0cyBmb3IgcnVuICR7b3AuaWR9YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wLnJ1bi5vdXRwdXRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHMgPSBvcC5ydW4ub3V0cHV0cztcbiAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRva2VuIHVzYWdlIGZyb20gb3V0cHV0cyAoZm9yIExMTSBydW5zKVxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuVXNhZ2UgPSB0aGlzLmdldFVuaWZpZWRSdW5Ub2tlbnMob3V0cHV0cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuVXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlMsIHRva2VuVXNhZ2VbMF0pO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlMsIHRva2VuVXNhZ2VbMV0pO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1VTQUdFX1RPVEFMX1RPS0VOUywgdG9rZW5Vc2FnZVswXSArIHRva2VuVXNhZ2VbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0cyAmJiB0eXBlb2Ygb3V0cHV0cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0cy5tb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVNQT05TRV9NT0RFTCwgU3RyaW5nKG91dHB1dHMubW9kZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGFkZGl0aW9uYWwgcmVzcG9uc2UgYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0cy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVNQT05TRV9JRCwgb3V0cHV0cy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dHMuY2hvaWNlcyAmJiBBcnJheS5pc0FycmF5KG91dHB1dHMuY2hvaWNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmlzaFJlYXNvbnMgPSBvdXRwdXRzLmNob2ljZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNob2ljZSkgPT4gY2hvaWNlLmZpbmlzaF9yZWFzb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChyZWFzb24pID0+IHJlYXNvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKFN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluaXNoUmVhc29ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OUywgZmluaXNoUmVhc29ucy5qb2luKFwiLCBcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXRzLnNlcnZpY2VfdGllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTl9BSV9SRVNQT05TRV9TRVJWSUNFX1RJRVIsIG91dHB1dHMuc2VydmljZV90aWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0cy5zeXN0ZW1fZmluZ2VycHJpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGNvbnN0YW50cy5HRU5fQUlfUkVTUE9OU0VfU1lTVEVNX0ZJTkdFUlBSSU5ULCBvdXRwdXRzLnN5c3RlbV9maW5nZXJwcmludCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dHMudXNhZ2VfbWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvdXRwdXRzLnVzYWdlX21ldGFkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2FnZU1ldGFkYXRhID0gb3V0cHV0cy51c2FnZV9tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZU1ldGFkYXRhLmlucHV0X3Rva2VuX2RldGFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOX0RFVEFJTFMsIEpTT04uc3RyaW5naWZ5KHVzYWdlTWV0YWRhdGEuaW5wdXRfdG9rZW5fZGV0YWlscykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlTWV0YWRhdGEub3V0cHV0X3Rva2VuX2RldGFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShjb25zdGFudHMuR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTl9ERVRBSUxTLCBKU09OLnN0cmluZ2lmeSh1c2FnZU1ldGFkYXRhLm91dHB1dF90b2tlbl9kZXRhaWxzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoY29uc3RhbnRzLkdFTkFJX0NPTVBMRVRJT04sIEpTT04uc3RyaW5naWZ5KG91dHB1dHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgRmFpbGVkIHRvIHByb2Nlc3Mgb3V0cHV0cyBmb3IgcnVuICR7b3AuaWR9YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBnZXRVbmlmaWVkUnVuVG9rZW5zKG91dHB1dHMpIHtcbiAgICAgICAgaWYgKCFvdXRwdXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZWFyY2ggaW4gbm9uLWdlbmVyYXRpb25zIGxpc3RzXG4gICAgICAgIGxldCB0b2tlblVzYWdlID0gdGhpcy5leHRyYWN0VW5pZmllZFJ1blRva2VucyhvdXRwdXRzLnVzYWdlX21ldGFkYXRhKTtcbiAgICAgICAgaWYgKHRva2VuVXNhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlblVzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmQgaWYgZGlyZWN0IGt3YXJnIGluIG91dHB1dHNcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG91dHB1dHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBoYXlzdGFjayA9IG91dHB1dHNba2V5XTtcbiAgICAgICAgICAgIGlmICghaGF5c3RhY2sgfHwgdHlwZW9mIGhheXN0YWNrICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlblVzYWdlID0gdGhpcy5leHRyYWN0VW5pZmllZFJ1blRva2VucyhoYXlzdGFjay51c2FnZV9tZXRhZGF0YSk7XG4gICAgICAgICAgICBpZiAodG9rZW5Vc2FnZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlblVzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhheXN0YWNrLmxjID09PSAxICYmXG4gICAgICAgICAgICAgICAgaGF5c3RhY2sua3dhcmdzICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGhheXN0YWNrLmt3YXJncyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRva2VuVXNhZ2UgPSB0aGlzLmV4dHJhY3RVbmlmaWVkUnVuVG9rZW5zKGhheXN0YWNrLmt3YXJncy51c2FnZV9tZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuVXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuVXNhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZpbmQgaW4gZ2VuZXJhdGlvbnNcbiAgICAgICAgY29uc3QgZ2VuZXJhdGlvbnMgPSBvdXRwdXRzLmdlbmVyYXRpb25zIHx8IFtdO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ2VuZXJhdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGF0R2VuZXJhdGlvbnMgPSBBcnJheS5pc0FycmF5KGdlbmVyYXRpb25zWzBdKVxuICAgICAgICAgICAgPyBnZW5lcmF0aW9ucy5mbGF0KClcbiAgICAgICAgICAgIDogZ2VuZXJhdGlvbnM7XG4gICAgICAgIGZvciAoY29uc3QgZ2VuZXJhdGlvbiBvZiBmbGF0R2VuZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZ2VuZXJhdGlvbiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIGdlbmVyYXRpb24ubWVzc2FnZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBnZW5lcmF0aW9uLm1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLm1lc3NhZ2Uua3dhcmdzICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGdlbmVyYXRpb24ubWVzc2FnZS5rd2FyZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0b2tlblVzYWdlID0gdGhpcy5leHRyYWN0VW5pZmllZFJ1blRva2VucyhnZW5lcmF0aW9uLm1lc3NhZ2Uua3dhcmdzLnVzYWdlX21ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5Vc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5Vc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZXh0cmFjdFVuaWZpZWRSdW5Ub2tlbnMob3V0cHV0cykge1xuICAgICAgICBpZiAoIW91dHB1dHMgfHwgdHlwZW9mIG91dHB1dHMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0cy5pbnB1dF90b2tlbnMgIT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBvdXRwdXRzLm91dHB1dF90b2tlbnMgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbb3V0cHV0cy5pbnB1dF90b2tlbnMsIG91dHB1dHMub3V0cHV0X3Rva2Vuc107XG4gICAgfVxufVxuZXhwb3J0cy5MYW5nU21pdGhUb09URUxUcmFuc2xhdG9yID0gTGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBpc05ldHdvcmtFcnJvcjtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy8gaXMtbmV0d29yay1lcnJvciB2ZW5kb3JlZCB0byBhdm9pZCBpbXBvcnQgaXNzdWVzXG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtbmV0d29yay1lcnJvclxuY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuY29uc3QgaXNFcnJvciA9ICh2YWx1ZSkgPT4gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBFcnJvcl1cIjtcbmNvbnN0IGVycm9yTWVzc2FnZXMgPSBuZXcgU2V0KFtcbiAgICBcIm5ldHdvcmsgZXJyb3JcIiwgLy8gQ2hyb21lXG4gICAgXCJGYWlsZWQgdG8gZmV0Y2hcIiwgLy8gQ2hyb21lXG4gICAgXCJOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLlwiLCAvLyBGaXJlZm94XG4gICAgXCJUaGUgSW50ZXJuZXQgY29ubmVjdGlvbiBhcHBlYXJzIHRvIGJlIG9mZmxpbmUuXCIsIC8vIFNhZmFyaSAxNlxuICAgIFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiLCAvLyBgY3Jvc3MtZmV0Y2hgXG4gICAgXCJmZXRjaCBmYWlsZWRcIiwgLy8gVW5kaWNpIChOb2RlLmpzKVxuICAgIFwidGVybWluYXRlZFwiLCAvLyBVbmRpY2kgKE5vZGUuanMpXG4gICAgXCIgQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLlwiLCAvLyBCdW4gKFdlYktpdClcbiAgICBcIk5ldHdvcmsgY29ubmVjdGlvbiBsb3N0XCIsIC8vIENsb3VkZmxhcmUgV29ya2VycyAoZmV0Y2gpXG5dKTtcbmZ1bmN0aW9uIGlzTmV0d29ya0Vycm9yKGVycm9yKSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IGVycm9yICYmXG4gICAgICAgIGlzRXJyb3IoZXJyb3IpICYmXG4gICAgICAgIGVycm9yLm5hbWUgPT09IFwiVHlwZUVycm9yXCIgJiZcbiAgICAgICAgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCI7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3I7XG4gICAgLy8gU2FmYXJpIDE3KyBoYXMgZ2VuZXJpYyBtZXNzYWdlIGJ1dCBubyBzdGFjayBmb3IgbmV0d29yayBlcnJvcnNcbiAgICBpZiAobWVzc2FnZSA9PT0gXCJMb2FkIGZhaWxlZFwiKSB7XG4gICAgICAgIHJldHVybiAoc3RhY2sgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgLy8gU2VudHJ5IGFkZHMgaXRzIG93biBzdGFjayB0cmFjZSB0byB0aGUgZmV0Y2ggZXJyb3IsIHNvIGFsc28gY2hlY2sgZm9yIHRoYXRcbiAgICAgICAgICAgIFwiX19zZW50cnlfY2FwdHVyZWRfX1wiIGluIGVycm9yKTtcbiAgICB9XG4gICAgLy8gRGVubyBuZXR3b3JrIGVycm9ycyBzdGFydCB3aXRoIHNwZWNpZmljIHRleHRcbiAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKFwiZXJyb3Igc2VuZGluZyByZXF1ZXN0IGZvciB1cmxcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIFN0YW5kYXJkIG5ldHdvcmsgZXJyb3IgbWVzc2FnZXNcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlcy5oYXMobWVzc2FnZSk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gcFJldHJ5O1xuZXhwb3J0cy5tYWtlUmV0cmlhYmxlID0gbWFrZVJldHJpYWJsZTtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy8gcC1yZXRyeSBjb2RlIHZlbmRvcmVkIHRvIGF2b2lkIGltcG9ydCBpc3N1ZXNcbi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9wLXJldHJ5XG5jb25zdCBpbmRleF9qc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9pcy1uZXR3b3JrLWVycm9yL2luZGV4LmNqc1wiKSk7XG5mdW5jdGlvbiB2YWxpZGF0ZVJldHJpZXMocmV0cmllcykge1xuICAgIGlmICh0eXBlb2YgcmV0cmllcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAocmV0cmllcyA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBgcmV0cmllc2AgdG8gYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHJldHJpZXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYHJldHJpZXNgIHRvIGJlIGEgdmFsaWQgbnVtYmVyIG9yIEluZmluaXR5LCBnb3QgTmFOLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChyZXRyaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGByZXRyaWVzYCB0byBiZSBhIG51bWJlciBvciBJbmZpbml0eS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXJPcHRpb24obmFtZSwgdmFsdWUsIHsgbWluID0gMCwgYWxsb3dJbmZpbml0eSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCBOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYCR7bmFtZX1cXGAgdG8gYmUgYSBudW1iZXIke2FsbG93SW5maW5pdHkgPyBcIiBvciBJbmZpbml0eVwiIDogXCJcIn0uYCk7XG4gICAgfVxuICAgIGlmICghYWxsb3dJbmZpbml0eSAmJiAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGAke25hbWV9XFxgIHRvIGJlIGEgZmluaXRlIG51bWJlci5gKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYCR7bmFtZX1cXGAgdG8gYmUgXFx1MjI2NSAke21pbn0uYCk7XG4gICAgfVxufVxuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxFcnJvciA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAoeyBtZXNzYWdlIH0gPSBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxFcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxFcnJvci5zdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxufVxuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbmZ1bmN0aW9uIGNhbGN1bGF0ZURlbGF5KHJldHJpZXNDb25zdW1lZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGF0dGVtcHQgPSBNYXRoLm1heCgxLCByZXRyaWVzQ29uc3VtZWQgKyAxKTtcbiAgICBjb25zdCByYW5kb20gPSBvcHRpb25zLnJhbmRvbWl6ZSA/IE1hdGgucmFuZG9tKCkgKyAxIDogMTtcbiAgICBsZXQgdGltZW91dCA9IE1hdGgucm91bmQocmFuZG9tICogb3B0aW9ucy5taW5UaW1lb3V0ICogb3B0aW9ucy5mYWN0b3IgKiogKGF0dGVtcHQgLSAxKSk7XG4gICAgdGltZW91dCA9IE1hdGgubWluKHRpbWVvdXQsIG9wdGlvbnMubWF4VGltZW91dCk7XG4gICAgcmV0dXJuIHRpbWVvdXQ7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVSZW1haW5pbmdUaW1lKHN0YXJ0LCBtYXgpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtYXgpKSB7XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIHJldHVybiBtYXggLSAocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydCk7XG59XG5hc3luYyBmdW5jdGlvbiBvbkF0dGVtcHRGYWlsdXJlKHsgZXJyb3IsIGF0dGVtcHROdW1iZXIsIHJldHJpZXNDb25zdW1lZCwgc3RhcnRUaW1lLCBvcHRpb25zLCB9KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICA/IGVycm9yXG4gICAgICAgIDogbmV3IFR5cGVFcnJvcihgTm9uLWVycm9yIHdhcyB0aHJvd246IFwiJHtlcnJvcn1cIi4gWW91IHNob3VsZCBvbmx5IHRocm93IGVycm9ycy5gKTtcbiAgICBpZiAobm9ybWFsaXplZEVycm9yIGluc3RhbmNlb2YgQWJvcnRFcnJvcikge1xuICAgICAgICB0aHJvdyBub3JtYWxpemVkRXJyb3Iub3JpZ2luYWxFcnJvcjtcbiAgICB9XG4gICAgY29uc3QgcmV0cmllc0xlZnQgPSBOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5yZXRyaWVzKVxuICAgICAgICA/IE1hdGgubWF4KDAsIG9wdGlvbnMucmV0cmllcyAtIHJldHJpZXNDb25zdW1lZClcbiAgICAgICAgOiBvcHRpb25zLnJldHJpZXM7XG4gICAgY29uc3QgbWF4UmV0cnlUaW1lID0gb3B0aW9ucy5tYXhSZXRyeVRpbWUgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGNvbnN0IGNvbnRleHQgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgZXJyb3I6IG5vcm1hbGl6ZWRFcnJvcixcbiAgICAgICAgYXR0ZW1wdE51bWJlcixcbiAgICAgICAgcmV0cmllc0xlZnQsXG4gICAgICAgIHJldHJpZXNDb25zdW1lZCxcbiAgICB9KTtcbiAgICBhd2FpdCBvcHRpb25zLm9uRmFpbGVkQXR0ZW1wdChjb250ZXh0KTtcbiAgICBpZiAoY2FsY3VsYXRlUmVtYWluaW5nVGltZShzdGFydFRpbWUsIG1heFJldHJ5VGltZSkgPD0gMCkge1xuICAgICAgICB0aHJvdyBub3JtYWxpemVkRXJyb3I7XG4gICAgfVxuICAgIGNvbnN0IGNvbnN1bWVSZXRyeSA9IGF3YWl0IG9wdGlvbnMuc2hvdWxkQ29uc3VtZVJldHJ5KGNvbnRleHQpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBjYWxjdWxhdGVSZW1haW5pbmdUaW1lKHN0YXJ0VGltZSwgbWF4UmV0cnlUaW1lKTtcbiAgICBpZiAocmVtYWluaW5nVGltZSA8PSAwIHx8IHJldHJpZXNMZWZ0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbm9ybWFsaXplZEVycm9yO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXplZEVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yICYmXG4gICAgICAgICEoMCwgaW5kZXhfanNfMS5kZWZhdWx0KShub3JtYWxpemVkRXJyb3IpKSB7XG4gICAgICAgIGlmIChjb25zdW1lUmV0cnkpIHtcbiAgICAgICAgICAgIHRocm93IG5vcm1hbGl6ZWRFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBvcHRpb25zLnNob3VsZFJldHJ5KGNvbnRleHQpKSkge1xuICAgICAgICB0aHJvdyBub3JtYWxpemVkRXJyb3I7XG4gICAgfVxuICAgIGlmICghY29uc3VtZVJldHJ5KSB7XG4gICAgICAgIG9wdGlvbnMuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGRlbGF5VGltZSA9IGNhbGN1bGF0ZURlbGF5KHJldHJpZXNDb25zdW1lZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgZmluYWxEZWxheSA9IE1hdGgubWluKGRlbGF5VGltZSwgcmVtYWluaW5nVGltZSk7XG4gICAgaWYgKGZpbmFsRGVsYXkgPiAwKSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUb2tlbik7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgICAgICAgICAgICByZWplY3Qob3B0aW9ucy5zaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIGZpbmFsRGVsYXkpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5yZWYpIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0VG9rZW4udW5yZWY/LigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvcHRpb25zLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHBSZXRyeShpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIHZhbGlkYXRlUmV0cmllcyhvcHRpb25zLnJldHJpZXMpO1xuICAgIGlmIChPYmplY3QuaGFzT3duKG9wdGlvbnMsIFwiZm9yZXZlclwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYGZvcmV2ZXJgIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBGb3IgbWFueSB1c2UtY2FzZXMsIHlvdSBjYW4gc2V0IGByZXRyaWVzOiBJbmZpbml0eWAgaW5zdGVhZC5cIik7XG4gICAgfVxuICAgIG9wdGlvbnMucmV0cmllcyA/Pz0gMTA7XG4gICAgb3B0aW9ucy5mYWN0b3IgPz89IDI7XG4gICAgb3B0aW9ucy5taW5UaW1lb3V0ID8/PSAxMDAwO1xuICAgIG9wdGlvbnMubWF4VGltZW91dCA/Pz0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIG9wdGlvbnMubWF4UmV0cnlUaW1lID8/PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgb3B0aW9ucy5yYW5kb21pemUgPz89IGZhbHNlO1xuICAgIG9wdGlvbnMub25GYWlsZWRBdHRlbXB0ID8/PSAoKSA9PiB7IH07XG4gICAgb3B0aW9ucy5zaG91bGRSZXRyeSA/Pz0gKCkgPT4gdHJ1ZTtcbiAgICBvcHRpb25zLnNob3VsZENvbnN1bWVSZXRyeSA/Pz0gKCkgPT4gdHJ1ZTtcbiAgICAvLyBWYWxpZGF0ZSBudW1lcmljIG9wdGlvbnMgYW5kIG5vcm1hbGl6ZSBlZGdlIGNhc2VzXG4gICAgdmFsaWRhdGVOdW1iZXJPcHRpb24oXCJmYWN0b3JcIiwgb3B0aW9ucy5mYWN0b3IsIHtcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBhbGxvd0luZmluaXR5OiBmYWxzZSxcbiAgICB9KTtcbiAgICB2YWxpZGF0ZU51bWJlck9wdGlvbihcIm1pblRpbWVvdXRcIiwgb3B0aW9ucy5taW5UaW1lb3V0LCB7XG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgYWxsb3dJbmZpbml0eTogZmFsc2UsXG4gICAgfSk7XG4gICAgdmFsaWRhdGVOdW1iZXJPcHRpb24oXCJtYXhUaW1lb3V0XCIsIG9wdGlvbnMubWF4VGltZW91dCwge1xuICAgICAgICBtaW46IDAsXG4gICAgICAgIGFsbG93SW5maW5pdHk6IHRydWUsXG4gICAgfSk7XG4gICAgdmFsaWRhdGVOdW1iZXJPcHRpb24oXCJtYXhSZXRyeVRpbWVcIiwgb3B0aW9ucy5tYXhSZXRyeVRpbWUsIHtcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBhbGxvd0luZmluaXR5OiB0cnVlLFxuICAgIH0pO1xuICAgIC8vIFRyZWF0IG5vbi1wb3NpdGl2ZSBmYWN0b3IgYXMgMSB0byBhdm9pZCB6ZXJvIGJhY2tvZmYgb3IgbmVnYXRpdmUgYmVoYXZpb3JcbiAgICBpZiAoIShvcHRpb25zLmZhY3RvciA+IDApKSB7XG4gICAgICAgIG9wdGlvbnMuZmFjdG9yID0gMTtcbiAgICB9XG4gICAgb3B0aW9ucy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbGV0IGF0dGVtcHROdW1iZXIgPSAwO1xuICAgIGxldCByZXRyaWVzQ29uc3VtZWQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHdoaWxlIChOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5yZXRyaWVzKSA/IHJldHJpZXNDb25zdW1lZCA8PSBvcHRpb25zLnJldHJpZXMgOiB0cnVlKSB7XG4gICAgICAgIGF0dGVtcHROdW1iZXIrKztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5wdXQoYXR0ZW1wdE51bWJlcik7XG4gICAgICAgICAgICBvcHRpb25zLnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgb25BdHRlbXB0RmFpbHVyZSh7XG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgYXR0ZW1wdE51bWJlcixcbiAgICAgICAgICAgICAgICByZXRyaWVzQ29uc3VtZWQsXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHJldHJpZXNDb25zdW1lZCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNob3VsZCBub3QgcmVhY2ggaGVyZSwgYnV0IGluIGNhc2UgaXQgZG9lcywgdGhyb3cgYW4gZXJyb3JcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXRyeSBhdHRlbXB0cyBleGhhdXN0ZWQgd2l0aG91dCB0aHJvd2luZyBhbiBlcnJvci5cIik7XG59XG5mdW5jdGlvbiBtYWtlUmV0cmlhYmxlKGZ1bmN0aW9uXywgb3B0aW9ucykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuICAgICAgICByZXR1cm4gcFJldHJ5KCgpID0+IGZ1bmN0aW9uXy5hcHBseSh0aGlzLCBhcmd1bWVudHNfKSwgb3B0aW9ucyk7XG4gICAgfTtcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IChwcm9taXNlLCBvbkZpbmFsbHkpID0+IHtcblx0b25GaW5hbGx5ID0gb25GaW5hbGx5IHx8ICgoKSA9PiB7fSk7XG5cblx0cmV0dXJuIHByb21pc2UudGhlbihcblx0XHR2YWwgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRyZXNvbHZlKG9uRmluYWxseSgpKTtcblx0XHR9KS50aGVuKCgpID0+IHZhbCksXG5cdFx0ZXJyID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuXHRcdFx0cmVzb2x2ZShvbkZpbmFsbHkoKSk7XG5cdFx0fSkudGhlbigoKSA9PiB7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSlcblx0KTtcbn07XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcEZpbmFsbHkgPSByZXF1aXJlKCdwLWZpbmFsbHknKTtcblxuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdH1cbn1cblxuY29uc3QgcFRpbWVvdXQgPSAocHJvbWlzZSwgbWlsbGlzZWNvbmRzLCBmYWxsYmFjaykgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicgfHwgbWlsbGlzZWNvbmRzIDwgMCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGBtaWxsaXNlY29uZHNgIHRvIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cdH1cblxuXHRpZiAobWlsbGlzZWNvbmRzID09PSBJbmZpbml0eSkge1xuXHRcdHJlc29sdmUocHJvbWlzZSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAodHlwZW9mIGZhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbGxiYWNrKCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZmFsbGJhY2sgPT09ICdzdHJpbmcnID8gZmFsbGJhY2sgOiBgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHttaWxsaXNlY29uZHN9IG1pbGxpc2Vjb25kc2A7XG5cdFx0Y29uc3QgdGltZW91dEVycm9yID0gZmFsbGJhY2sgaW5zdGFuY2VvZiBFcnJvciA/IGZhbGxiYWNrIDogbmV3IFRpbWVvdXRFcnJvcihtZXNzYWdlKTtcblxuXHRcdGlmICh0eXBlb2YgcHJvbWlzZS5jYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHByb21pc2UuY2FuY2VsKCk7XG5cdFx0fVxuXG5cdFx0cmVqZWN0KHRpbWVvdXRFcnJvcik7XG5cdH0sIG1pbGxpc2Vjb25kcyk7XG5cblx0Ly8gVE9ETzogVXNlIG5hdGl2ZSBgZmluYWxseWAga2V5d29yZCB3aGVuIHRhcmdldGluZyBOb2RlLmpzIDEwXG5cdHBGaW5hbGx5KFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG5cdFx0cHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCksXG5cdFx0KCkgPT4ge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR9XG5cdCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwVGltZW91dDtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gcFRpbWVvdXQ7XG5cbm1vZHVsZS5leHBvcnRzLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBQb3J0IG9mIGxvd2VyX2JvdW5kIGZyb20gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2FsZ29yaXRobS9sb3dlcl9ib3VuZFxuLy8gVXNlZCB0byBjb21wdXRlIGluc2VydGlvbiBpbmRleCB0byBrZWVwIHF1ZXVlIHNvcnRlZCBhZnRlciBpbnNlcnRpb25cbmZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgbGV0IGZpcnN0ID0gMDtcbiAgICBsZXQgY291bnQgPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBzdGVwID0gKGNvdW50IC8gMikgfCAwO1xuICAgICAgICBsZXQgaXQgPSBmaXJzdCArIHN0ZXA7XG4gICAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2l0XSwgdmFsdWUpIDw9IDApIHtcbiAgICAgICAgICAgIGZpcnN0ID0gKytpdDtcbiAgICAgICAgICAgIGNvdW50IC09IHN0ZXAgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY291bnQgPSBzdGVwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXJzdDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGxvd2VyQm91bmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbG93ZXJfYm91bmRfMSA9IHJlcXVpcmUoXCIuL2xvd2VyLWJvdW5kXCIpO1xuY2xhc3MgUHJpb3JpdHlRdWV1ZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgfVxuICAgIGVucXVldWUocnVuLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgcHJpb3JpdHk6IDAgfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgICAgICBwcmlvcml0eTogb3B0aW9ucy5wcmlvcml0eSxcbiAgICAgICAgICAgIHJ1blxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zaXplICYmIHRoaXMuX3F1ZXVlW3RoaXMuc2l6ZSAtIDFdLnByaW9yaXR5ID49IG9wdGlvbnMucHJpb3JpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBsb3dlcl9ib3VuZF8xLmRlZmF1bHQodGhpcy5fcXVldWUsIGVsZW1lbnQsIChhLCBiKSA9PiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eSk7XG4gICAgICAgIHRoaXMuX3F1ZXVlLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGRlcXVldWUoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9xdWV1ZS5zaGlmdCgpO1xuICAgICAgICByZXR1cm4gaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVtLnJ1bjtcbiAgICB9XG4gICAgZmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC5wcmlvcml0eSA9PT0gb3B0aW9ucy5wcmlvcml0eSkubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnJ1bik7XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFByaW9yaXR5UXVldWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50ZW1pdHRlcjNcIik7XG5jb25zdCBwX3RpbWVvdXRfMSA9IHJlcXVpcmUoXCJwLXRpbWVvdXRcIik7XG5jb25zdCBwcmlvcml0eV9xdWV1ZV8xID0gcmVxdWlyZShcIi4vcHJpb3JpdHktcXVldWVcIik7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5jb25zdCBlbXB0eSA9ICgpID0+IHsgfTtcbmNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBwX3RpbWVvdXRfMS5UaW1lb3V0RXJyb3IoKTtcbi8qKlxuUHJvbWlzZSBxdWV1ZSB3aXRoIGNvbmN1cnJlbmN5IGNvbnRyb2wuXG4qL1xuY2xhc3MgUFF1ZXVlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX2ludGVydmFsRW5kID0gMDtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUVtcHR5ID0gZW1wdHk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVJZGxlID0gZW1wdHk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBjYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50OiBmYWxzZSwgaW50ZXJ2YWxDYXA6IEluZmluaXR5LCBpbnRlcnZhbDogMCwgY29uY3VycmVuY3k6IEluZmluaXR5LCBhdXRvU3RhcnQ6IHRydWUsIHF1ZXVlQ2xhc3M6IHByaW9yaXR5X3F1ZXVlXzEuZGVmYXVsdCB9LCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCEodHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWxDYXAgPT09ICdudW1iZXInICYmIG9wdGlvbnMuaW50ZXJ2YWxDYXAgPj0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGludGVydmFsQ2FwXFxgIHRvIGJlIGEgbnVtYmVyIGZyb20gMSBhbmQgdXAsIGdvdCBcXGAkeyhfYiA9IChfYSA9IG9wdGlvbnMuaW50ZXJ2YWxDYXApID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWxDYXB9KWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmludGVydmFsID09PSB1bmRlZmluZWQgfHwgIShOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5pbnRlcnZhbCkgJiYgb3B0aW9ucy5pbnRlcnZhbCA+PSAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXFxgaW50ZXJ2YWxcXGAgdG8gYmUgYSBmaW5pdGUgbnVtYmVyID49IDAsIGdvdCBcXGAkeyhfZCA9IChfYyA9IG9wdGlvbnMuaW50ZXJ2YWwpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWx9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPSBvcHRpb25zLmNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgICAgIHRoaXMuX2lzSW50ZXJ2YWxJZ25vcmVkID0gb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gSW5maW5pdHkgfHwgb3B0aW9ucy5pbnRlcnZhbCA9PT0gMDtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWxDYXAgPSBvcHRpb25zLmludGVydmFsQ2FwO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG9wdGlvbnMuaW50ZXJ2YWw7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gbmV3IG9wdGlvbnMucXVldWVDbGFzcygpO1xuICAgICAgICB0aGlzLl9xdWV1ZUNsYXNzID0gb3B0aW9ucy5xdWV1ZUNsYXNzO1xuICAgICAgICB0aGlzLmNvbmN1cnJlbmN5ID0gb3B0aW9ucy5jb25jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICAgICAgdGhpcy5fdGhyb3dPblRpbWVvdXQgPSBvcHRpb25zLnRocm93T25UaW1lb3V0ID09PSB0cnVlO1xuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IG9wdGlvbnMuYXV0b1N0YXJ0ID09PSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IF9kb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLl9pbnRlcnZhbENvdW50IDwgdGhpcy5faW50ZXJ2YWxDYXA7XG4gICAgfVxuICAgIGdldCBfZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQ291bnQgPCB0aGlzLl9jb25jdXJyZW5jeTtcbiAgICB9XG4gICAgX25leHQoKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDb3VudC0tO1xuICAgICAgICB0aGlzLl90cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICB0aGlzLmVtaXQoJ25leHQnKTtcbiAgICB9XG4gICAgX3Jlc29sdmVQcm9taXNlcygpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUVtcHR5KCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVFbXB0eSA9IGVtcHR5O1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlSWRsZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUlkbGUgPSBlbXB0eTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaWRsZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9vblJlc3VtZUludGVydmFsKCkge1xuICAgICAgICB0aGlzLl9vbkludGVydmFsKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkKCk7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgX2lzSW50ZXJ2YWxQYXVzZWQoKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcnZhbElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5faW50ZXJ2YWxFbmQgLSBub3c7XG4gICAgICAgICAgICBpZiAoZGVsYXkgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQWN0IGFzIHRoZSBpbnRlcnZhbCB3YXMgZG9uZVxuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVzdW1lIGl0IGhlcmUgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc3VtZWQgb24gbGluZSAxNjBcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnZhbENvdW50ID0gKHRoaXMuX2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQpID8gdGhpcy5fcGVuZGluZ0NvdW50IDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFjdCBhcyB0aGUgaW50ZXJ2YWwgaXMgcGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uUmVzdW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIF90cnlUb1N0YXJ0QW5vdGhlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGUgaW50ZXJ2YWwgKFwicGF1c2VcIilcbiAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgY2FuIHJlZG8gaXQgbGF0ZXIgKFwicmVzdW1lXCIpXG4gICAgICAgICAgICBpZiAodGhpcy5faW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZVByb21pc2VzKCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pc1BhdXNlZCkge1xuICAgICAgICAgICAgY29uc3QgY2FuSW5pdGlhbGl6ZUludGVydmFsID0gIXRoaXMuX2lzSW50ZXJ2YWxQYXVzZWQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIgJiYgdGhpcy5fZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSB0aGlzLl9xdWV1ZS5kZXF1ZXVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGpvYigpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Jbml0aWFsaXplSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBfaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLl9pbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25JbnRlcnZhbCgpO1xuICAgICAgICB9LCB0aGlzLl9pbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuX2ludGVydmFsRW5kID0gRGF0ZS5ub3coKSArIHRoaXMuX2ludGVydmFsO1xuICAgIH1cbiAgICBfb25JbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ludGVydmFsQ291bnQgPT09IDAgJiYgdGhpcy5fcGVuZGluZ0NvdW50ID09PSAwICYmIHRoaXMuX2ludGVydmFsSWQpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ludGVydmFsQ291bnQgPSB0aGlzLl9jYXJyeW92ZXJDb25jdXJyZW5jeUNvdW50ID8gdGhpcy5fcGVuZGluZ0NvdW50IDogMDtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIEV4ZWN1dGVzIGFsbCBxdWV1ZWQgZnVuY3Rpb25zIHVudGlsIGl0IHJlYWNoZXMgdGhlIGxpbWl0LlxuICAgICovXG4gICAgX3Byb2Nlc3NRdWV1ZSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgICAgIHdoaWxlICh0aGlzLl90cnlUb1N0YXJ0QW5vdGhlcigpKSB7IH1cbiAgICB9XG4gICAgZ2V0IGNvbmN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uY3VycmVuY3k7XG4gICAgfVxuICAgIHNldCBjb25jdXJyZW5jeShuZXdDb25jdXJyZW5jeSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbmV3Q29uY3VycmVuY3kgPT09ICdudW1iZXInICYmIG5ld0NvbmN1cnJlbmN5ID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBjb25jdXJyZW5jeVxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtuZXdDb25jdXJyZW5jeX1cXGAgKCR7dHlwZW9mIG5ld0NvbmN1cnJlbmN5fSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25jdXJyZW5jeSA9IG5ld0NvbmN1cnJlbmN5O1xuICAgICAgICB0aGlzLl9wcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgQWRkcyBhIHN5bmMgb3IgYXN5bmMgdGFzayB0byB0aGUgcXVldWUuIEFsd2F5cyByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICAqL1xuICAgIGFzeW5jIGFkZChmbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NvdW50Kys7XG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWxDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9ICh0aGlzLl90aW1lb3V0ID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQpID8gZm4oKSA6IHBfdGltZW91dF8xLmRlZmF1bHQoUHJvbWlzZS5yZXNvbHZlKGZuKCkpLCAob3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQgPyB0aGlzLl90aW1lb3V0IDogb3B0aW9ucy50aW1lb3V0KSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyb3dPblRpbWVvdXQgPT09IHVuZGVmaW5lZCA/IHRoaXMuX3Rocm93T25UaW1lb3V0IDogb3B0aW9ucy50aHJvd09uVGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYXdhaXQgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX25leHQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5lbnF1ZXVlKHJ1biwgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl90cnlUb1N0YXJ0QW5vdGhlcigpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdhZGQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgIFNhbWUgYXMgYC5hZGQoKWAsIGJ1dCBhY2NlcHRzIGFuIGFycmF5IG9mIHN5bmMgb3IgYXN5bmMgZnVuY3Rpb25zLlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZnVuY3Rpb25zIGFyZSByZXNvbHZlZC5cbiAgICAqL1xuICAgIGFzeW5jIGFkZEFsbChmdW5jdGlvbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZ1bmN0aW9ucy5tYXAoYXN5bmMgKGZ1bmN0aW9uXykgPT4gdGhpcy5hZGQoZnVuY3Rpb25fLCBvcHRpb25zKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICBTdGFydCAob3IgcmVzdW1lKSBleGVjdXRpbmcgZW5xdWV1ZWQgdGFza3Mgd2l0aGluIGNvbmN1cnJlbmN5IGxpbWl0LiBObyBuZWVkIHRvIGNhbGwgdGhpcyBpZiBxdWV1ZSBpcyBub3QgcGF1c2VkICh2aWEgYG9wdGlvbnMuYXV0b1N0YXJ0ID0gZmFsc2VgIG9yIGJ5IGAucGF1c2UoKWAgbWV0aG9kLilcbiAgICAqL1xuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgIFB1dCBxdWV1ZSBleGVjdXRpb24gb24gaG9sZC5cbiAgICAqL1xuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzLl9pc1BhdXNlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgIENsZWFyIHRoZSBxdWV1ZS5cbiAgICAqL1xuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9xdWV1ZSA9IG5ldyB0aGlzLl9xdWV1ZUNsYXNzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgIENhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFVzZWZ1bCBpZiB5b3UgZm9yIGV4YW1wbGUgYWRkIGFkZGl0aW9uYWwgaXRlbXMgYXQgYSBsYXRlciB0aW1lLlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgc2V0dGxlcyB3aGVuIHRoZSBxdWV1ZSBiZWNvbWVzIGVtcHR5LlxuICAgICovXG4gICAgYXN5bmMgb25FbXB0eSgpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5XG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZXNvbHZlID0gdGhpcy5fcmVzb2x2ZUVtcHR5O1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUVtcHR5ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBUaGUgZGlmZmVyZW5jZSB3aXRoIGAub25FbXB0eWAgaXMgdGhhdCBgLm9uSWRsZWAgZ3VhcmFudGVlcyB0aGF0IGFsbCB3b3JrIGZyb20gdGhlIHF1ZXVlIGhhcyBmaW5pc2hlZC4gYC5vbkVtcHR5YCBtZXJlbHkgc2lnbmFscyB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eSwgYnV0IGl0IGNvdWxkIG1lYW4gdGhhdCBzb21lIHByb21pc2VzIGhhdmVuJ3QgY29tcGxldGVkIHlldC5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eSwgYW5kIGFsbCBwcm9taXNlcyBoYXZlIGNvbXBsZXRlZDsgYHF1ZXVlLnNpemUgPT09IDAgJiYgcXVldWUucGVuZGluZyA9PT0gMGAuXG4gICAgKi9cbiAgICBhc3luYyBvbklkbGUoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIG5vbmUgcGVuZGluZyBhbmQgaWYgbm90aGluZyBlbHNlIGlzIHF1ZXVlZFxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NvdW50ID09PSAwICYmIHRoaXMuX3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1Jlc29sdmUgPSB0aGlzLl9yZXNvbHZlSWRsZTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVJZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZS5cbiAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVldWUuc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgU2l6ZSBvZiB0aGUgcXVldWUsIGZpbHRlcmVkIGJ5IHRoZSBnaXZlbiBvcHRpb25zLlxuXG4gICAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHJlbWFpbmluZyBpbiB0aGUgcXVldWUgd2l0aCBhIHNwZWNpZmljIHByaW9yaXR5IGxldmVsLlxuICAgICovXG4gICAgc2l6ZUJ5KG9wdGlvbnMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tZm4tcmVmZXJlbmNlLWluLWl0ZXJhdG9yXG4gICAgICAgIHJldHVybiB0aGlzLl9xdWV1ZS5maWx0ZXIob3B0aW9ucykubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICBOdW1iZXIgb2YgcGVuZGluZyBwcm9taXNlcy5cbiAgICAqL1xuICAgIGdldCBwZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50O1xuICAgIH1cbiAgICAvKipcbiAgICBXaGV0aGVyIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgcGF1c2VkLlxuICAgICovXG4gICAgZ2V0IGlzUGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNQYXVzZWQ7XG4gICAgfVxuICAgIGdldCB0aW1lb3V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGltZW91dDtcbiAgICB9XG4gICAgLyoqXG4gICAgU2V0IHRoZSB0aW1lb3V0IGZvciBmdXR1cmUgb3BlcmF0aW9ucy5cbiAgICAqL1xuICAgIHNldCB0aW1lb3V0KG1pbGxpc2Vjb25kcykge1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gbWlsbGlzZWNvbmRzO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFBRdWV1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFzeW5jQ2FsbGVyID0gdm9pZCAwO1xuY29uc3QgaW5kZXhfanNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vdXRpbHMvcC1yZXRyeS9pbmRleC5janNcIikpO1xuY29uc3QgcF9xdWV1ZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwLXF1ZXVlXCIpKTtcbmNvbnN0IFNUQVRVU19SRVRSWUFCTEUgPSBbXG4gICAgNDA4LCAvLyBSZXF1ZXN0IFRpbWVvdXRcbiAgICA0MjUsIC8vIFRvbyBFYXJseVxuICAgIDQyOSwgLy8gVG9vIE1hbnkgUmVxdWVzdHNcbiAgICA1MDAsIC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgIDUwMiwgLy8gQmFkIEdhdGV3YXlcbiAgICA1MDMsIC8vIFNlcnZpY2UgVW5hdmFpbGFibGVcbiAgICA1MDQsIC8vIEdhdGV3YXkgVGltZW91dFxuXTtcbi8qKlxuICogQSBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgYXN5bmMgY2FsbHMgd2l0aCBjb25jdXJyZW5jeSBhbmQgcmV0cnkgbG9naWMuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIG1ha2luZyBjYWxscyB0byBhbnkga2luZCBvZiBcImV4cGVuc2l2ZVwiIGV4dGVybmFsIHJlc291cmNlLFxuICogYmUgaXQgYmVjYXVzZSBpdCdzIHJhdGUtbGltaXRlZCwgc3ViamVjdCB0byBuZXR3b3JrIGlzc3VlcywgZXRjLlxuICpcbiAqIENvbmN1cnJlbnQgY2FsbHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGBtYXhDb25jdXJyZW5jeWAgcGFyYW1ldGVyLCB3aGljaCBkZWZhdWx0c1xuICogdG8gYEluZmluaXR5YC4gVGhpcyBtZWFucyB0aGF0IGJ5IGRlZmF1bHQsIGFsbCBjYWxscyB3aWxsIGJlIG1hZGUgaW4gcGFyYWxsZWwuXG4gKlxuICogUmV0cmllcyBhcmUgbGltaXRlZCBieSB0aGUgYG1heFJldHJpZXNgIHBhcmFtZXRlciwgd2hpY2ggZGVmYXVsdHMgdG8gNi4gVGhpc1xuICogbWVhbnMgdGhhdCBieSBkZWZhdWx0LCBlYWNoIGNhbGwgd2lsbCBiZSByZXRyaWVkIHVwIHRvIDYgdGltZXMsIHdpdGggYW5cbiAqIGV4cG9uZW50aWFsIGJhY2tvZmYgYmV0d2VlbiBlYWNoIGF0dGVtcHQuXG4gKi9cbmNsYXNzIEFzeW5jQ2FsbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWF4Q29uY3VycmVuY3lcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWF4UmV0cmllc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJtYXhRdWV1ZVNpemVCeXRlc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJxdWV1ZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvbkZhaWxlZFJlc3BvbnNlSG9va1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJxdWV1ZVNpemVCeXRlc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYXhDb25jdXJyZW5jeSA9IHBhcmFtcy5tYXhDb25jdXJyZW5jeSA/PyBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5tYXhSZXRyaWVzID0gcGFyYW1zLm1heFJldHJpZXMgPz8gNjtcbiAgICAgICAgdGhpcy5tYXhRdWV1ZVNpemVCeXRlcyA9IHBhcmFtcy5tYXhRdWV1ZVNpemVCeXRlcztcbiAgICAgICAgaWYgKFwiZGVmYXVsdFwiIGluIHBfcXVldWVfMS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgdGhpcy5xdWV1ZSA9IG5ldyBwX3F1ZXVlXzEuZGVmYXVsdC5kZWZhdWx0KHtcbiAgICAgICAgICAgICAgICBjb25jdXJyZW5jeTogdGhpcy5tYXhDb25jdXJyZW5jeSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHRoaXMucXVldWUgPSBuZXcgcF9xdWV1ZV8xLmRlZmF1bHQoeyBjb25jdXJyZW5jeTogdGhpcy5tYXhDb25jdXJyZW5jeSB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRmFpbGVkUmVzcG9uc2VIb29rID0gcGFyYW1zPy5vbkZhaWxlZFJlc3BvbnNlSG9vaztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjYWxsKGNhbGxhYmxlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxXaXRoT3B0aW9ucyh7fSwgY2FsbGFibGUsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNhbGxXaXRoT3B0aW9ucyhvcHRpb25zLCBjYWxsYWJsZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBzaXplQnl0ZXMgPSBvcHRpb25zLnNpemVCeXRlcyA/PyAwO1xuICAgICAgICAvLyBDaGVjayBpZiBhZGRpbmcgdGhpcyBjYWxsIHdvdWxkIGV4Y2VlZCB0aGUgYnl0ZSBzaXplIGxpbWl0XG4gICAgICAgIGlmICh0aGlzLm1heFF1ZXVlU2l6ZUJ5dGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNpemVCeXRlcyA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMucXVldWVTaXplQnl0ZXMgKyBzaXplQnl0ZXMgPiB0aGlzLm1heFF1ZXVlU2l6ZUJ5dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBRdWV1ZSBzaXplIGxpbWl0ICgke3RoaXMubWF4UXVldWVTaXplQnl0ZXN9IGJ5dGVzKSBleGNlZWRlZC4gYCArXG4gICAgICAgICAgICAgICAgYEN1cnJlbnQgcXVldWUgc2l6ZTogJHt0aGlzLnF1ZXVlU2l6ZUJ5dGVzfSBieXRlcywgYXR0ZW1wdGVkIGFkZGl0aW9uOiAke3NpemVCeXRlc30gYnl0ZXMuYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCB0byBxdWV1ZSBzaXplIHRyYWNraW5nXG4gICAgICAgIGlmIChzaXplQnl0ZXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlU2l6ZUJ5dGVzICs9IHNpemVCeXRlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbkZhaWxlZFJlc3BvbnNlSG9vayA9IHRoaXMub25GYWlsZWRSZXNwb25zZUhvb2s7XG4gICAgICAgIGxldCBwcm9taXNlID0gdGhpcy5xdWV1ZS5hZGQoKCkgPT4gKDAsIGluZGV4X2pzXzEuZGVmYXVsdCkoKCkgPT4gY2FsbGFibGUoLi4uYXJncykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW5zdGFuY2VvZi9uby1pbnN0YW5jZW9mXG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBhc3luYyBvbkZhaWxlZEF0dGVtcHQoeyBlcnJvciB9KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aChcIkNhbmNlbFwiKSB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoXCJUaW1lb3V0RXJyb3JcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSA9PT0gXCJUaW1lb3V0RXJyb3JcIiB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoXCJBYm9ydEVycm9yXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3I/LmNvZGUgPT09IFwiRUNPTk5BQk9SVEVEXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXJyb3I/LnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGlmIChvbkZhaWxlZFJlc3BvbnNlSG9vaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVkID0gYXdhaXQgb25GYWlsZWRSZXNwb25zZUhvb2socmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlPy5zdGF0dXMgPz8gZXJyb3I/LnN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghU1RBVFVTX1JFVFJZQUJMRS5pbmNsdWRlcygrc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0cmllczogdGhpcy5tYXhSZXRyaWVzLFxuICAgICAgICAgICAgcmFuZG9taXplOiB0cnVlLFxuICAgICAgICB9KSwgeyB0aHJvd09uVGltZW91dDogdHJ1ZSB9KTtcbiAgICAgICAgLy8gRGVjcmVtZW50IHF1ZXVlIHNpemUgd2hlbiB0aGUgY2FsbCBjb21wbGV0ZXMgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHNpemVCeXRlcyA+IDApIHtcbiAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucXVldWVTaXplQnl0ZXMgLT0gc2l6ZUJ5dGVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIHNpZ25hbCBjYW5jZWxsYXRpb25cbiAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICAgICAgICBwcm9taXNlLFxuICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQWJvcnRFcnJvclwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxufVxuZXhwb3J0cy5Bc3luY0NhbGxlciA9IEFzeW5jQ2FsbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNMYW5nQ2hhaW5NZXNzYWdlID0gaXNMYW5nQ2hhaW5NZXNzYWdlO1xuZXhwb3J0cy5jb252ZXJ0TGFuZ0NoYWluTWVzc2FnZVRvRXhhbXBsZSA9IGNvbnZlcnRMYW5nQ2hhaW5NZXNzYWdlVG9FeGFtcGxlO1xuZnVuY3Rpb24gaXNMYW5nQ2hhaW5NZXNzYWdlKFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbm1lc3NhZ2UpIHtcbiAgICByZXR1cm4gdHlwZW9mIG1lc3NhZ2U/Ll9nZXRUeXBlID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBjb252ZXJ0TGFuZ0NoYWluTWVzc2FnZVRvRXhhbXBsZShtZXNzYWdlKSB7XG4gICAgY29uc3QgY29udmVydGVkID0ge1xuICAgICAgICB0eXBlOiBtZXNzYWdlLl9nZXRUeXBlKCksXG4gICAgICAgIGRhdGE6IHsgY29udGVudDogbWVzc2FnZS5jb250ZW50IH0sXG4gICAgfTtcbiAgICAvLyBDaGVjayBmb3IgcHJlc2VuY2Ugb2Yga2V5cyBpbiBhZGRpdGlvbmFsX2t3YXJnc1xuICAgIGlmIChtZXNzYWdlPy5hZGRpdGlvbmFsX2t3YXJncyAmJlxuICAgICAgICBPYmplY3Qua2V5cyhtZXNzYWdlLmFkZGl0aW9uYWxfa3dhcmdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnZlcnRlZC5kYXRhLmFkZGl0aW9uYWxfa3dhcmdzID0geyAuLi5tZXNzYWdlLmFkZGl0aW9uYWxfa3dhcmdzIH07XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0ZWQ7XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWJ1ZyA9IChcbiAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gIHByb2Nlc3MuZW52ICYmXG4gIHByb2Nlc3MuZW52Lk5PREVfREVCVUcgJiZcbiAgL1xcYnNlbXZlclxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRylcbikgPyAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvcignU0VNVkVSJywgLi4uYXJncylcbiAgOiAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVnXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIE1BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEgsXG4gIE1BWF9TQUZFX0JVSUxEX0xFTkdUSCxcbiAgTUFYX0xFTkdUSCxcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJy4vZGVidWcnKVxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ge31cblxuLy8gVGhlIGFjdHVhbCByZWdleHBzIGdvIG9uIGV4cG9ydHMucmVcbmNvbnN0IHJlID0gZXhwb3J0cy5yZSA9IFtdXG5jb25zdCBzYWZlUmUgPSBleHBvcnRzLnNhZmVSZSA9IFtdXG5jb25zdCBzcmMgPSBleHBvcnRzLnNyYyA9IFtdXG5jb25zdCBzYWZlU3JjID0gZXhwb3J0cy5zYWZlU3JjID0gW11cbmNvbnN0IHQgPSBleHBvcnRzLnQgPSB7fVxubGV0IFIgPSAwXG5cbmNvbnN0IExFVFRFUkRBU0hOVU1CRVIgPSAnW2EtekEtWjAtOS1dJ1xuXG4vLyBSZXBsYWNlIHNvbWUgZ3JlZWR5IHJlZ2V4IHRva2VucyB0byBwcmV2ZW50IHJlZ2V4IGRvcyBpc3N1ZXMuIFRoZXNlIHJlZ2V4IGFyZVxuLy8gdXNlZCBpbnRlcm5hbGx5IHZpYSB0aGUgc2FmZVJlIG9iamVjdCBzaW5jZSBhbGwgaW5wdXRzIGluIHRoaXMgbGlicmFyeSBnZXRcbi8vIG5vcm1hbGl6ZWQgZmlyc3QgdG8gdHJpbSBhbmQgY29sbGFwc2UgYWxsIGV4dHJhIHdoaXRlc3BhY2UuIFRoZSBvcmlnaW5hbFxuLy8gcmVnZXhlcyBhcmUgZXhwb3J0ZWQgZm9yIHVzZXJsYW5kIGNvbnN1bXB0aW9uIGFuZCBsb3dlciBsZXZlbCB1c2FnZS4gQVxuLy8gZnV0dXJlIGJyZWFraW5nIGNoYW5nZSBjb3VsZCBleHBvcnQgdGhlIHNhZmVyIHJlZ2V4IG9ubHkgd2l0aCBhIG5vdGUgdGhhdFxuLy8gYWxsIGlucHV0IHNob3VsZCBoYXZlIGV4dHJhIHdoaXRlc3BhY2UgcmVtb3ZlZC5cbmNvbnN0IHNhZmVSZWdleFJlcGxhY2VtZW50cyA9IFtcbiAgWydcXFxccycsIDFdLFxuICBbJ1xcXFxkJywgTUFYX0xFTkdUSF0sXG4gIFtMRVRURVJEQVNITlVNQkVSLCBNQVhfU0FGRV9CVUlMRF9MRU5HVEhdLFxuXVxuXG5jb25zdCBtYWtlU2FmZVJlZ2V4ID0gKHZhbHVlKSA9PiB7XG4gIGZvciAoY29uc3QgW3Rva2VuLCBtYXhdIG9mIHNhZmVSZWdleFJlcGxhY2VtZW50cykge1xuICAgIHZhbHVlID0gdmFsdWVcbiAgICAgIC5zcGxpdChgJHt0b2tlbn0qYCkuam9pbihgJHt0b2tlbn17MCwke21heH19YClcbiAgICAgIC5zcGxpdChgJHt0b2tlbn0rYCkuam9pbihgJHt0b2tlbn17MSwke21heH19YClcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuY29uc3QgY3JlYXRlVG9rZW4gPSAobmFtZSwgdmFsdWUsIGlzR2xvYmFsKSA9PiB7XG4gIGNvbnN0IHNhZmUgPSBtYWtlU2FmZVJlZ2V4KHZhbHVlKVxuICBjb25zdCBpbmRleCA9IFIrK1xuICBkZWJ1ZyhuYW1lLCBpbmRleCwgdmFsdWUpXG4gIHRbbmFtZV0gPSBpbmRleFxuICBzcmNbaW5kZXhdID0gdmFsdWVcbiAgc2FmZVNyY1tpbmRleF0gPSBzYWZlXG4gIHJlW2luZGV4XSA9IG5ldyBSZWdFeHAodmFsdWUsIGlzR2xvYmFsID8gJ2cnIDogdW5kZWZpbmVkKVxuICBzYWZlUmVbaW5kZXhdID0gbmV3IFJlZ0V4cChzYWZlLCBpc0dsb2JhbCA/ICdnJyA6IHVuZGVmaW5lZClcbn1cblxuLy8gVGhlIGZvbGxvd2luZyBSZWd1bGFyIEV4cHJlc3Npb25zIGNhbiBiZSB1c2VkIGZvciB0b2tlbml6aW5nLFxuLy8gdmFsaWRhdGluZywgYW5kIHBhcnNpbmcgU2VtVmVyIHZlcnNpb24gc3RyaW5ncy5cblxuLy8gIyMgTnVtZXJpYyBJZGVudGlmaWVyXG4vLyBBIHNpbmdsZSBgMGAsIG9yIGEgbm9uLXplcm8gZGlnaXQgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGRpZ2l0cy5cblxuY3JlYXRlVG9rZW4oJ05VTUVSSUNJREVOVElGSUVSJywgJzB8WzEtOV1cXFxcZConKVxuY3JlYXRlVG9rZW4oJ05VTUVSSUNJREVOVElGSUVSTE9PU0UnLCAnXFxcXGQrJylcblxuLy8gIyMgTm9uLW51bWVyaWMgSWRlbnRpZmllclxuLy8gWmVybyBvciBtb3JlIGRpZ2l0cywgZm9sbG93ZWQgYnkgYSBsZXR0ZXIgb3IgaHlwaGVuLCBhbmQgdGhlbiB6ZXJvIG9yXG4vLyBtb3JlIGxldHRlcnMsIGRpZ2l0cywgb3IgaHlwaGVucy5cblxuY3JlYXRlVG9rZW4oJ05PTk5VTUVSSUNJREVOVElGSUVSJywgYFxcXFxkKlthLXpBLVotXSR7TEVUVEVSREFTSE5VTUJFUn0qYClcblxuLy8gIyMgTWFpbiBWZXJzaW9uXG4vLyBUaHJlZSBkb3Qtc2VwYXJhdGVkIG51bWVyaWMgaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdNQUlOVkVSU0lPTicsIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KVxcXFwuYCArXG4gICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pXFxcXC5gICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlgKVxuXG5jcmVhdGVUb2tlbignTUFJTlZFUlNJT05MT09TRScsIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX0pXFxcXC5gICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX0pXFxcXC5gICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX0pYClcblxuLy8gIyMgUHJlLXJlbGVhc2UgVmVyc2lvbiBJZGVudGlmaWVyXG4vLyBBIG51bWVyaWMgaWRlbnRpZmllciwgb3IgYSBub24tbnVtZXJpYyBpZGVudGlmaWVyLlxuLy8gTm9uLW51bWJlcmljIGlkZW50aWZpZXJzIGluY2x1ZGUgbnVtYmVyaWMgaWRlbnRpZmllcnMgYnV0IGNhbiBiZSBsb25nZXIuXG4vLyBUaGVyZWZvcmUgbm9uLW51bWJlcmljIGlkZW50aWZpZXJzIG11c3QgZ28gZmlyc3QuXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUicsIGAoPzoke3NyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXVxufXwke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VJREVOVElGSUVSTE9PU0UnLCBgKD86JHtzcmNbdC5OT05OVU1FUklDSURFTlRJRklFUl1cbn18JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX0pYClcblxuLy8gIyMgUHJlLXJlbGVhc2UgVmVyc2lvblxuLy8gSHlwaGVuLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBkb3Qtc2VwYXJhdGVkIHByZS1yZWxlYXNlIHZlcnNpb25cbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRScsIGAoPzotKCR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXX0pKikpYClcblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VMT09TRScsIGAoPzotPygke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0VdXG59KD86XFxcXC4ke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0VdfSkqKSlgKVxuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YSBJZGVudGlmaWVyXG4vLyBBbnkgY29tYmluYXRpb24gb2YgZGlnaXRzLCBsZXR0ZXJzLCBvciBoeXBoZW5zLlxuXG5jcmVhdGVUb2tlbignQlVJTERJREVOVElGSUVSJywgYCR7TEVUVEVSREFTSE5VTUJFUn0rYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGFcbi8vIFBsdXMgc2lnbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgcGVyaW9kLXNlcGFyYXRlZCBidWlsZCBtZXRhZGF0YVxuLy8gaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdCVUlMRCcsIGAoPzpcXFxcKygke3NyY1t0LkJVSUxESURFTlRJRklFUl1cbn0oPzpcXFxcLiR7c3JjW3QuQlVJTERJREVOVElGSUVSXX0pKikpYClcblxuLy8gIyMgRnVsbCBWZXJzaW9uIFN0cmluZ1xuLy8gQSBtYWluIHZlcnNpb24sIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBwcmUtcmVsZWFzZSB2ZXJzaW9uIGFuZFxuLy8gYnVpbGQgbWV0YWRhdGEuXG5cbi8vIE5vdGUgdGhhdCB0aGUgb25seSBtYWpvciwgbWlub3IsIHBhdGNoLCBhbmQgcHJlLXJlbGVhc2Ugc2VjdGlvbnMgb2Zcbi8vIHRoZSB2ZXJzaW9uIHN0cmluZyBhcmUgY2FwdHVyaW5nIGdyb3Vwcy4gIFRoZSBidWlsZCBtZXRhZGF0YSBpcyBub3QgYVxuLy8gY2FwdHVyaW5nIGdyb3VwLCBiZWNhdXNlIGl0IHNob3VsZCBub3QgZXZlciBiZSB1c2VkIGluIHZlcnNpb25cbi8vIGNvbXBhcmlzb24uXG5cbmNyZWF0ZVRva2VuKCdGVUxMUExBSU4nLCBgdj8ke3NyY1t0Lk1BSU5WRVJTSU9OXVxufSR7c3JjW3QuUFJFUkVMRUFTRV19PyR7XG4gIHNyY1t0LkJVSUxEXX0/YClcblxuY3JlYXRlVG9rZW4oJ0ZVTEwnLCBgXiR7c3JjW3QuRlVMTFBMQUlOXX0kYClcblxuLy8gbGlrZSBmdWxsLCBidXQgYWxsb3dzIHYxLjIuMyBhbmQgPTEuMi4zLCB3aGljaCBwZW9wbGUgZG8gc29tZXRpbWVzLlxuLy8gYWxzbywgMS4wLjBhbHBoYTEgKHByZXJlbGVhc2Ugd2l0aG91dCB0aGUgaHlwaGVuKSB3aGljaCBpcyBwcmV0dHlcbi8vIGNvbW1vbiBpbiB0aGUgbnBtIHJlZ2lzdHJ5LlxuY3JlYXRlVG9rZW4oJ0xPT1NFUExBSU4nLCBgW3Y9XFxcXHNdKiR7c3JjW3QuTUFJTlZFUlNJT05MT09TRV1cbn0ke3NyY1t0LlBSRVJFTEVBU0VMT09TRV19PyR7XG4gIHNyY1t0LkJVSUxEXX0/YClcblxuY3JlYXRlVG9rZW4oJ0xPT1NFJywgYF4ke3NyY1t0LkxPT1NFUExBSU5dfSRgKVxuXG5jcmVhdGVUb2tlbignR1RMVCcsICcoKD86PHw+KT89PyknKVxuXG4vLyBTb21ldGhpbmcgbGlrZSBcIjIuKlwiIG9yIFwiMS4yLnhcIi5cbi8vIE5vdGUgdGhhdCBcIngueFwiIGlzIGEgdmFsaWQgeFJhbmdlIGlkZW50aWZlciwgbWVhbmluZyBcImFueSB2ZXJzaW9uXCJcbi8vIE9ubHkgdGhlIGZpcnN0IGl0ZW0gaXMgc3RyaWN0bHkgcmVxdWlyZWQuXG5jcmVhdGVUb2tlbignWFJBTkdFSURFTlRJRklFUkxPT1NFJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19fHh8WHxcXFxcKmApXG5jcmVhdGVUb2tlbignWFJBTkdFSURFTlRJRklFUicsIGAke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX18eHxYfFxcXFwqYClcblxuY3JlYXRlVG9rZW4oJ1hSQU5HRVBMQUlOJywgYFt2PVxcXFxzXSooJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86JHtzcmNbdC5QUkVSRUxFQVNFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICBzcmNbdC5CVUlMRF19P2AgK1xuICAgICAgICAgICAgICAgICAgIGApPyk/YClcblxuY3JlYXRlVG9rZW4oJ1hSQU5HRVBMQUlOTE9PU0UnLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VMT09TRV19KT8ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbdC5CVUlMRF19P2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKiR7c3JjW3QuWFJBTkdFUExBSU5dfSRgKVxuY3JlYXRlVG9rZW4oJ1hSQU5HRUxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKiR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIENvZXJjaW9uLlxuLy8gRXh0cmFjdCBhbnl0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGJlIGEgcGFydCBvZiBhIHZhbGlkIHNlbXZlclxuY3JlYXRlVG9rZW4oJ0NPRVJDRVBMQUlOJywgYCR7JyhefFteXFxcXGRdKScgK1xuICAgICAgICAgICAgICAnKFxcXFxkezEsJ30ke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSlgICtcbiAgICAgICAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsJHtNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIfX0pKT9gICtcbiAgICAgICAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsJHtNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIfX0pKT9gKVxuY3JlYXRlVG9rZW4oJ0NPRVJDRScsIGAke3NyY1t0LkNPRVJDRVBMQUlOXX0oPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFRlVMTCcsIHNyY1t0LkNPRVJDRVBMQUlOXSArXG4gICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzoke3NyY1t0LkJVSUxEXX0pP2AgK1xuICAgICAgICAgICAgICBgKD86JHxbXlxcXFxkXSlgKVxuY3JlYXRlVG9rZW4oJ0NPRVJDRVJUTCcsIHNyY1t0LkNPRVJDRV0sIHRydWUpXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMRlVMTCcsIHNyY1t0LkNPRVJDRUZVTExdLCB0cnVlKVxuXG4vLyBUaWxkZSByYW5nZXMuXG4vLyBNZWFuaW5nIGlzIFwicmVhc29uYWJseSBhdCBvciBncmVhdGVyIHRoYW5cIlxuY3JlYXRlVG9rZW4oJ0xPTkVUSUxERScsICcoPzp+Pj8pJylcblxuY3JlYXRlVG9rZW4oJ1RJTERFVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORVRJTERFXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy50aWxkZVRyaW1SZXBsYWNlID0gJyQxfidcblxuY3JlYXRlVG9rZW4oJ1RJTERFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignVElMREVMT09TRScsIGBeJHtzcmNbdC5MT05FVElMREVdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIENhcmV0IHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJhdCBsZWFzdCBhbmQgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aFwiXG5jcmVhdGVUb2tlbignTE9ORUNBUkVUJywgJyg/OlxcXFxeKScpXG5cbmNyZWF0ZVRva2VuKCdDQVJFVFRSSU0nLCBgKFxcXFxzKikke3NyY1t0LkxPTkVDQVJFVF19XFxcXHMrYCwgdHJ1ZSlcbmV4cG9ydHMuY2FyZXRUcmltUmVwbGFjZSA9ICckMV4nXG5cbmNyZWF0ZVRva2VuKCdDQVJFVCcsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5dfSRgKVxuY3JlYXRlVG9rZW4oJ0NBUkVUTE9PU0UnLCBgXiR7c3JjW3QuTE9ORUNBUkVUXX0ke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSRgKVxuXG4vLyBBIHNpbXBsZSBndC9sdC9lcSB0aGluZywgb3IganVzdCBcIlwiIHRvIGluZGljYXRlIFwiYW55IHZlcnNpb25cIlxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JMT09TRScsIGBeJHtzcmNbdC5HVExUXX1cXFxccyooJHtzcmNbdC5MT09TRVBMQUlOXX0pJHxeJGApXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUicsIGBeJHtzcmNbdC5HVExUXX1cXFxccyooJHtzcmNbdC5GVUxMUExBSU5dfSkkfF4kYClcblxuLy8gQW4gZXhwcmVzc2lvbiB0byBzdHJpcCBhbnkgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSBndGx0IGFuZCB0aGUgdGhpbmdcbi8vIGl0IG1vZGlmaWVzLCBzbyB0aGF0IGA+IDEuMi4zYCA9PT4gYD4xLjIuM2BcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuR1RMVF1cbn1cXFxccyooJHtzcmNbdC5MT09TRVBMQUlOXX18JHtzcmNbdC5YUkFOR0VQTEFJTl19KWAsIHRydWUpXG5leHBvcnRzLmNvbXBhcmF0b3JUcmltUmVwbGFjZSA9ICckMSQyJDMnXG5cbi8vIFNvbWV0aGluZyBsaWtlIGAxLjIuMyAtIDEuMi40YFxuLy8gTm90ZSB0aGF0IHRoZXNlIGFsbCB1c2UgdGhlIGxvb3NlIGZvcm0sIGJlY2F1c2UgdGhleSdsbCBiZVxuLy8gY2hlY2tlZCBhZ2FpbnN0IGVpdGhlciB0aGUgc3RyaWN0IG9yIGxvb3NlIGNvbXBhcmF0b3IgZm9ybVxuLy8gbGF0ZXIuXG5jcmVhdGVUb2tlbignSFlQSEVOUkFOR0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYFxcXFxzKy1cXFxccytgICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMqJGApXG5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRUxPT1NFJywgYF5cXFxccyooJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuLy8gU3RhciByYW5nZXMgYmFzaWNhbGx5IGp1c3QgYWxsb3cgYW55dGhpbmcgYXQgYWxsLlxuY3JlYXRlVG9rZW4oJ1NUQVInLCAnKDx8Pik/PT9cXFxccypcXFxcKicpXG4vLyA+PTAuMC4wIGlzIGxpa2UgYSBzdGFyXG5jcmVhdGVUb2tlbignR1RFMCcsICdeXFxcXHMqPj1cXFxccyowXFxcXC4wXFxcXC4wXFxcXHMqJCcpXG5jcmVhdGVUb2tlbignR1RFMFBSRScsICdeXFxcXHMqPj1cXFxccyowXFxcXC4wXFxcXC4wLTBcXFxccyokJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIHBhcnNlIG91dCBqdXN0IHRoZSBvcHRpb25zIHdlIGNhcmUgYWJvdXRcbmNvbnN0IGxvb3NlT3B0aW9uID0gT2JqZWN0LmZyZWV6ZSh7IGxvb3NlOiB0cnVlIH0pXG5jb25zdCBlbXB0eU9wdHMgPSBPYmplY3QuZnJlZXplKHsgfSlcbmNvbnN0IHBhcnNlT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gZW1wdHlPcHRzXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGxvb3NlT3B0aW9uXG4gIH1cblxuICByZXR1cm4gb3B0aW9uc1xufVxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZU9wdGlvbnNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG51bWVyaWMgPSAvXlswLTldKyQvXG5jb25zdCBjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4ge1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhID09PSBiID8gMCA6IGEgPCBiID8gLTEgOiAxXG4gIH1cblxuICBjb25zdCBhbnVtID0gbnVtZXJpYy50ZXN0KGEpXG4gIGNvbnN0IGJudW0gPSBudW1lcmljLnRlc3QoYilcblxuICBpZiAoYW51bSAmJiBibnVtKSB7XG4gICAgYSA9ICthXG4gICAgYiA9ICtiXG4gIH1cblxuICByZXR1cm4gYSA9PT0gYiA/IDBcbiAgICA6IChhbnVtICYmICFibnVtKSA/IC0xXG4gICAgOiAoYm51bSAmJiAhYW51bSkgPyAxXG4gICAgOiBhIDwgYiA/IC0xXG4gICAgOiAxXG59XG5cbmNvbnN0IHJjb21wYXJlSWRlbnRpZmllcnMgPSAoYSwgYikgPT4gY29tcGFyZUlkZW50aWZpZXJzKGIsIGEpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2RlYnVnJylcbmNvbnN0IHsgTUFYX0xFTkdUSCwgTUFYX1NBRkVfSU5URUdFUiB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IHsgY29tcGFyZUlkZW50aWZpZXJzIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9pZGVudGlmaWVycycpXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHZlcnNpb24uaW5jbHVkZVByZXJlbGVhc2UgPT09ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgICByZXR1cm4gdmVyc2lvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24udmVyc2lvblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHZlcnNpb24uIE11c3QgYmUgYSBzdHJpbmcuIEdvdCB0eXBlIFwiJHt0eXBlb2YgdmVyc2lvbn1cIi5gKVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2BcbiAgICAgIClcbiAgICB9XG5cbiAgICBkZWJ1ZygnU2VtVmVyJywgdmVyc2lvbiwgb3B0aW9ucylcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICAgIC8vIHRoaXMgaXNuJ3QgYWN0dWFsbHkgcmVsZXZhbnQgZm9yIHZlcnNpb25zLCBidXQga2VlcCBpdCBzbyB0aGF0IHdlXG4gICAgLy8gZG9uJ3QgcnVuIGludG8gdHJvdWJsZSBwYXNzaW5nIHRoaXMub3B0aW9ucyBhcm91bmQuXG4gICAgdGhpcy5pbmNsdWRlUHJlcmVsZWFzZSA9ICEhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZVxuXG4gICAgY29uc3QgbSA9IHZlcnNpb24udHJpbSgpLm1hdGNoKG9wdGlvbnMubG9vc2UgPyByZVt0LkxPT1NFXSA6IHJlW3QuRlVMTF0pXG5cbiAgICBpZiAoIW0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgVmVyc2lvbjogJHt2ZXJzaW9ufWApXG4gICAgfVxuXG4gICAgdGhpcy5yYXcgPSB2ZXJzaW9uXG5cbiAgICAvLyB0aGVzZSBhcmUgYWN0dWFsbHkgbnVtYmVyc1xuICAgIHRoaXMubWFqb3IgPSArbVsxXVxuICAgIHRoaXMubWlub3IgPSArbVsyXVxuICAgIHRoaXMucGF0Y2ggPSArbVszXVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWFqb3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1ham9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1pbm9yID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLm1pbm9yIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBtaW5vciB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXRjaCA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5wYXRjaCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGF0Y2ggdmVyc2lvbicpXG4gICAgfVxuXG4gICAgLy8gbnVtYmVyaWZ5IGFueSBwcmVyZWxlYXNlIG51bWVyaWMgaWRzXG4gICAgaWYgKCFtWzRdKSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXJlbGVhc2UgPSBtWzRdLnNwbGl0KCcuJykubWFwKChpZCkgPT4ge1xuICAgICAgICBpZiAoL15bMC05XSskLy50ZXN0KGlkKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9ICtpZFxuICAgICAgICAgIGlmIChudW0gPj0gMCAmJiBudW0gPCBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkID0gbVs1XSA/IG1bNV0uc3BsaXQoJy4nKSA6IFtdXG4gICAgdGhpcy5mb3JtYXQoKVxuICB9XG5cbiAgZm9ybWF0ICgpIHtcbiAgICB0aGlzLnZlcnNpb24gPSBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gXG4gICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbiArPSBgLSR7dGhpcy5wcmVyZWxlYXNlLmpvaW4oJy4nKX1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uXG4gIH1cblxuICBjb21wYXJlIChvdGhlcikge1xuICAgIGRlYnVnKCdTZW1WZXIuY29tcGFyZScsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zLCBvdGhlcilcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgPT09ICdzdHJpbmcnICYmIG90aGVyID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSB0aGlzLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZU1haW4ob3RoZXIpIHx8IHRoaXMuY29tcGFyZVByZShvdGhlcilcbiAgfVxuXG4gIGNvbXBhcmVNYWluIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFqb3IgPCBvdGhlci5tYWpvcikge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIGlmICh0aGlzLm1ham9yID4gb3RoZXIubWFqb3IpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIGlmICh0aGlzLm1pbm9yIDwgb3RoZXIubWlub3IpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBpZiAodGhpcy5taW5vciA+IG90aGVyLm1pbm9yKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXRjaCA8IG90aGVyLnBhdGNoKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgaWYgKHRoaXMucGF0Y2ggPiBvdGhlci5wYXRjaCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdidWlsZCBjb21wYXJlJywgaSwgYSwgYilcbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYSwgYilcbiAgICAgIH1cbiAgICB9IHdoaWxlICgrK2kpXG4gIH1cblxuICAvLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4gIC8vIGRvd24gdG8gcHJlLXJlbGVhc2UuIHByZW1ham9yIGFuZCBwcmVwYXRjaCB3b3JrIHRoZSBzYW1lIHdheS5cbiAgaW5jIChyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkge1xuICAgIGlmIChyZWxlYXNlLnN0YXJ0c1dpdGgoJ3ByZScpKSB7XG4gICAgICBpZiAoIWlkZW50aWZpZXIgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgaXMgZW1wdHknKVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgYW4gaW52YWxpZCBzZW12ZXIgcmVzdWx0c1xuICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgLSR7aWRlbnRpZmllcn1gLm1hdGNoKHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuUFJFUkVMRUFTRUxPT1NFXSA6IHJlW3QuUFJFUkVMRUFTRV0pXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlbGVhc2UpIHtcbiAgICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZXBhdGNoJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgICAgLy8gZHJvcCBhbnkgcHJlcmVsZWFzZXMgdGhhdCBtaWdodCBhbHJlYWR5IGV4aXN0LCBzaW5jZSB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gcmVsZXZhbnQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhIG5vbi1wcmVyZWxlYXNlIHZlcnNpb24sIHRoaXMgYWN0cyB0aGUgc2FtZSBhc1xuICAgICAgLy8gcHJlcGF0Y2guXG4gICAgICBjYXNlICdwcmVyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFqb3InOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlLW1ham9yIHZlcnNpb24sIGJ1bXAgdXAgdG8gdGhlIHNhbWUgbWFqb3IgdmVyc2lvbi5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtYWpvci5cbiAgICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgICAvLyAxLjEuMCBidW1wcyB0byAyLjAuMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5taW5vciAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucGF0Y2ggIT09IDAgfHxcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdtaW5vcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1pbm9yLlxuICAgICAgICAvLyAxLjIuMC01IGJ1bXBzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICAgIGlmICh0aGlzLnBhdGNoICE9PSAwIHx8IHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1pbm9yKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGl0IHdpbGwgaW5jcmVtZW50IHRoZSBwYXRjaC5cbiAgICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgICAgLy8gMS4yLjAtNSBwYXRjaGVzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4wIHBhdGNoZXMgdG8gMS4yLjFcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnBhdGNoKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgLy8gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBwdWJsaWNseS5cbiAgICAgIC8vIDEuMC4wICdwcmUnIHdvdWxkIGJlY29tZSAxLjAuMC0wIHdoaWNoIGlzIHRoZSB3cm9uZyBkaXJlY3Rpb24uXG4gICAgICBjYXNlICdwcmUnOiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBOdW1iZXIoaWRlbnRpZmllckJhc2UpID8gMSA6IDBcblxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtiYXNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gdGhpcy5wcmVyZWxlYXNlLmxlbmd0aFxuICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZVtpXSsrXG4gICAgICAgICAgICAgIGkgPSAtMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09PSB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpICYmIGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5wdXNoKGJhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgLy8gMS4yLjAtYmV0YS4xIGJ1bXBzIHRvIDEuMi4wLWJldGEuMixcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICAgIGxldCBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXIsIGJhc2VdXG4gICAgICAgICAgaWYgKGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29tcGFyZUlkZW50aWZpZXJzKHRoaXMucHJlcmVsZWFzZVswXSwgaWRlbnRpZmllcikgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLnByZXJlbGVhc2VbMV0pKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IHByZXJlbGVhc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGluY3JlbWVudCBhcmd1bWVudDogJHtyZWxlYXNlfWApXG4gICAgfVxuICAgIHRoaXMucmF3ID0gdGhpcy5mb3JtYXQoKVxuICAgIGlmICh0aGlzLmJ1aWxkLmxlbmd0aCkge1xuICAgICAgdGhpcy5yYXcgKz0gYCske3RoaXMuYnVpbGQuam9pbignLicpfWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbVZlclxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHZhbGlkID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgdiA9IHBhcnNlKHZlcnNpb24sIG9wdGlvbnMpXG4gIHJldHVybiB2ID8gdi52ZXJzaW9uIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSB2YWxpZFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IGNsZWFuID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcyA9IHBhcnNlKHZlcnNpb24udHJpbSgpLnJlcGxhY2UoL15bPXZdKy8sICcnKSwgb3B0aW9ucylcbiAgcmV0dXJuIHMgPyBzLnZlcnNpb24gOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IGNsZWFuXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UuanMnKVxuXG5jb25zdCBkaWZmID0gKHZlcnNpb24xLCB2ZXJzaW9uMikgPT4ge1xuICBjb25zdCB2MSA9IHBhcnNlKHZlcnNpb24xLCBudWxsLCB0cnVlKVxuICBjb25zdCB2MiA9IHBhcnNlKHZlcnNpb24yLCBudWxsLCB0cnVlKVxuICBjb25zdCBjb21wYXJpc29uID0gdjEuY29tcGFyZSh2MilcblxuICBpZiAoY29tcGFyaXNvbiA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCB2MUhpZ2hlciA9IGNvbXBhcmlzb24gPiAwXG4gIGNvbnN0IGhpZ2hWZXJzaW9uID0gdjFIaWdoZXIgPyB2MSA6IHYyXG4gIGNvbnN0IGxvd1ZlcnNpb24gPSB2MUhpZ2hlciA/IHYyIDogdjFcbiAgY29uc3QgaGlnaEhhc1ByZSA9ICEhaGlnaFZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGhcbiAgY29uc3QgbG93SGFzUHJlID0gISFsb3dWZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoXG5cbiAgaWYgKGxvd0hhc1ByZSAmJiAhaGlnaEhhc1ByZSkge1xuICAgIC8vIEdvaW5nIGZyb20gcHJlcmVsZWFzZSAtPiBubyBwcmVyZWxlYXNlIHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBjYXNpbmdcblxuICAgIC8vIElmIHRoZSBsb3cgdmVyc2lvbiBoYXMgb25seSBhIG1ham9yLCB0aGVuIGl0IHdpbGwgYWx3YXlzIGJlIGEgbWFqb3JcbiAgICAvLyBTb21lIGV4YW1wbGVzOlxuICAgIC8vIDEuMC4wLTEgLT4gMS4wLjBcbiAgICAvLyAxLjAuMC0xIC0+IDEuMS4xXG4gICAgLy8gMS4wLjAtMSAtPiAyLjAuMFxuICAgIGlmICghbG93VmVyc2lvbi5wYXRjaCAmJiAhbG93VmVyc2lvbi5taW5vcikge1xuICAgICAgcmV0dXJuICdtYWpvcidcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbWFpbiBwYXJ0IGhhcyBubyBkaWZmZXJlbmNlXG4gICAgaWYgKGxvd1ZlcnNpb24uY29tcGFyZU1haW4oaGlnaFZlcnNpb24pID09PSAwKSB7XG4gICAgICBpZiAobG93VmVyc2lvbi5taW5vciAmJiAhbG93VmVyc2lvbi5wYXRjaCkge1xuICAgICAgICByZXR1cm4gJ21pbm9yJ1xuICAgICAgfVxuICAgICAgcmV0dXJuICdwYXRjaCdcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgdGhlIGBwcmVgIHByZWZpeCBpZiB3ZSBhcmUgZ29pbmcgdG8gYSBwcmVyZWxlYXNlIHZlcnNpb25cbiAgY29uc3QgcHJlZml4ID0gaGlnaEhhc1ByZSA/ICdwcmUnIDogJydcblxuICBpZiAodjEubWFqb3IgIT09IHYyLm1ham9yKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdtYWpvcidcbiAgfVxuXG4gIGlmICh2MS5taW5vciAhPT0gdjIubWlub3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21pbm9yJ1xuICB9XG5cbiAgaWYgKHYxLnBhdGNoICE9PSB2Mi5wYXRjaCkge1xuICAgIHJldHVybiBwcmVmaXggKyAncGF0Y2gnXG4gIH1cblxuICAvLyBoaWdoIGFuZCBsb3cgYXJlIHByZWxlYXNlc1xuICByZXR1cm4gJ3ByZXJlbGVhc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZlxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgbWFqb3IgPSAoYSwgbG9vc2UpID0+IG5ldyBTZW1WZXIoYSwgbG9vc2UpLm1ham9yXG5tb2R1bGUuZXhwb3J0cyA9IG1ham9yXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBtaW5vciA9IChhLCBsb29zZSkgPT4gbmV3IFNlbVZlcihhLCBsb29zZSkubWlub3Jcbm1vZHVsZS5leHBvcnRzID0gbWlub3JcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IHBhdGNoID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5wYXRjaFxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHByZXJlbGVhc2UgPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gKHBhcnNlZCAmJiBwYXJzZWQucHJlcmVsZWFzZS5sZW5ndGgpID8gcGFyc2VkLnByZXJlbGVhc2UgOiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IHByZXJlbGVhc2VcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+XG4gIG5ldyBTZW1WZXIoYSwgbG9vc2UpLmNvbXBhcmUobmV3IFNlbVZlcihiLCBsb29zZSkpXG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShiLCBhLCBsb29zZSlcbm1vZHVsZS5leHBvcnRzID0gcmNvbXBhcmVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgdHJ1ZSlcbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUxvb3NlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBjb21wYXJlQnVpbGQgPSAoYSwgYiwgbG9vc2UpID0+IHtcbiAgY29uc3QgdmVyc2lvbkEgPSBuZXcgU2VtVmVyKGEsIGxvb3NlKVxuICBjb25zdCB2ZXJzaW9uQiA9IG5ldyBTZW1WZXIoYiwgbG9vc2UpXG4gIHJldHVybiB2ZXJzaW9uQS5jb21wYXJlKHZlcnNpb25CKSB8fCB2ZXJzaW9uQS5jb21wYXJlQnVpbGQodmVyc2lvbkIpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBhcmVCdWlsZFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHNvcnQgPSAobGlzdCwgbG9vc2UpID0+IGxpc3Quc29ydCgoYSwgYikgPT4gY29tcGFyZUJ1aWxkKGEsIGIsIGxvb3NlKSlcbm1vZHVsZS5leHBvcnRzID0gc29ydFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHJzb3J0ID0gKGxpc3QsIGxvb3NlKSA9PiBsaXN0LnNvcnQoKGEsIGIpID0+IGNvbXBhcmVCdWlsZChiLCBhLCBsb29zZSkpXG5tb2R1bGUuZXhwb3J0cyA9IHJzb3J0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGd0ID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+IDBcbm1vZHVsZS5leHBvcnRzID0gZ3RcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHQgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDwgMFxubW9kdWxlLmV4cG9ydHMgPSBsdFxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBlcSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShhLCBiLCBsb29zZSkgPT09IDBcbm1vZHVsZS5leHBvcnRzID0gZXFcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbmVxID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSAhPT0gMFxubW9kdWxlLmV4cG9ydHMgPSBuZXFcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3RlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGd0ZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBsdGUgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDw9IDBcbm1vZHVsZS5leHBvcnRzID0gbHRlXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZXEnKVxuY29uc3QgbmVxID0gcmVxdWlyZSgnLi9uZXEnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuL2d0JylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4vZ3RlJylcbmNvbnN0IGx0ID0gcmVxdWlyZSgnLi9sdCcpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuL2x0ZScpXG5cbmNvbnN0IGNtcCA9IChhLCBvcCwgYiwgbG9vc2UpID0+IHtcbiAgc3dpdGNoIChvcCkge1xuICAgIGNhc2UgJz09PSc6XG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGEgPSBhLnZlcnNpb25cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYiA9IGIudmVyc2lvblxuICAgICAgfVxuICAgICAgcmV0dXJuIGEgPT09IGJcblxuICAgIGNhc2UgJyE9PSc6XG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGEgPSBhLnZlcnNpb25cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYiA9IGIudmVyc2lvblxuICAgICAgfVxuICAgICAgcmV0dXJuIGEgIT09IGJcblxuICAgIGNhc2UgJyc6XG4gICAgY2FzZSAnPSc6XG4gICAgY2FzZSAnPT0nOlxuICAgICAgcmV0dXJuIGVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnIT0nOlxuICAgICAgcmV0dXJuIG5lcShhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJz4nOlxuICAgICAgcmV0dXJuIGd0KGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPj0nOlxuICAgICAgcmV0dXJuIGd0ZShhLCBiLCBsb29zZSlcblxuICAgIGNhc2UgJzwnOlxuICAgICAgcmV0dXJuIGx0KGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPD0nOlxuICAgICAgcmV0dXJuIGx0ZShhLCBiLCBsb29zZSlcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIG9wZXJhdG9yOiAke29wfWApXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gY21wXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IGNvZXJjZSA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgcmV0dXJuIHZlcnNpb25cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ251bWJlcicpIHtcbiAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgbGV0IG1hdGNoID0gbnVsbFxuICBpZiAoIW9wdGlvbnMucnRsKSB7XG4gICAgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyByZVt0LkNPRVJDRUZVTExdIDogcmVbdC5DT0VSQ0VdKVxuICB9IGVsc2Uge1xuICAgIC8vIEZpbmQgdGhlIHJpZ2h0LW1vc3QgY29lcmNpYmxlIHN0cmluZyB0aGF0IGRvZXMgbm90IHNoYXJlXG4gICAgLy8gYSB0ZXJtaW51cyB3aXRoIGEgbW9yZSBsZWZ0LXdhcmQgY29lcmNpYmxlIHN0cmluZy5cbiAgICAvLyBFZywgJzEuMi4zLjQnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQnLCBub3QgJzMuNCcgb3IgJzQnXG4gICAgLy8gV2l0aCBpbmNsdWRlUHJlcmVsZWFzZSBvcHRpb24gc2V0LCAnMS4yLjMuNC1yYycgd2FudHMgdG8gY29lcmNlICcyLjMuNC1yYycsIG5vdCAnMi4zLjQnXG4gICAgLy9cbiAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHN0cmluZyBjaGVja2luZyB3aXRoIGEgL2cgcmVnZXhwXG4gICAgLy8gTWFudWFsbHkgc2V0IHRoZSBpbmRleCBzbyBhcyB0byBwaWNrIHVwIG92ZXJsYXBwaW5nIG1hdGNoZXMuXG4gICAgLy8gU3RvcCB3aGVuIHdlIGdldCBhIG1hdGNoIHRoYXQgZW5kcyBhdCB0aGUgc3RyaW5nIGVuZCwgc2luY2Ugbm9cbiAgICAvLyBjb2VyY2libGUgc3RyaW5nIGNhbiBiZSBtb3JlIHJpZ2h0LXdhcmQgd2l0aG91dCB0aGUgc2FtZSB0ZXJtaW51cy5cbiAgICBjb25zdCBjb2VyY2VSdGxSZWdleCA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyByZVt0LkNPRVJDRVJUTEZVTExdIDogcmVbdC5DT0VSQ0VSVExdXG4gICAgbGV0IG5leHRcbiAgICB3aGlsZSAoKG5leHQgPSBjb2VyY2VSdGxSZWdleC5leGVjKHZlcnNpb24pKSAmJlxuICAgICAgICAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoICE9PSB2ZXJzaW9uLmxlbmd0aClcbiAgICApIHtcbiAgICAgIGlmICghbWF0Y2ggfHxcbiAgICAgICAgICAgIG5leHQuaW5kZXggKyBuZXh0WzBdLmxlbmd0aCAhPT0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2ggPSBuZXh0XG4gICAgICB9XG4gICAgICBjb2VyY2VSdGxSZWdleC5sYXN0SW5kZXggPSBuZXh0LmluZGV4ICsgbmV4dFsxXS5sZW5ndGggKyBuZXh0WzJdLmxlbmd0aFxuICAgIH1cbiAgICAvLyBsZWF2ZSBpdCBpbiBhIGNsZWFuIHN0YXRlXG4gICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gLTFcbiAgfVxuXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBtYWpvciA9IG1hdGNoWzJdXG4gIGNvbnN0IG1pbm9yID0gbWF0Y2hbM10gfHwgJzAnXG4gIGNvbnN0IHBhdGNoID0gbWF0Y2hbNF0gfHwgJzAnXG4gIGNvbnN0IHByZXJlbGVhc2UgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzVdID8gYC0ke21hdGNoWzVdfWAgOiAnJ1xuICBjb25zdCBidWlsZCA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiYgbWF0Y2hbNl0gPyBgKyR7bWF0Y2hbNl19YCA6ICcnXG5cbiAgcmV0dXJuIHBhcnNlKGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7cHJlcmVsZWFzZX0ke2J1aWxkfWAsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGNvZXJjZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY2xhc3MgTFJVQ2FjaGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5tYXggPSAxMDAwXG4gICAgdGhpcy5tYXAgPSBuZXcgTWFwKClcbiAgfVxuXG4gIGdldCAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm1hcC5nZXQoa2V5KVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIG1hcCBhbmQgYWRkIGl0IHRvIHRoZSBlbmRcbiAgICAgIHRoaXMubWFwLmRlbGV0ZShrZXkpXG4gICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZSAoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmRlbGV0ZShrZXkpXG4gIH1cblxuICBzZXQgKGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWxldGVkID0gdGhpcy5kZWxldGUoa2V5KVxuXG4gICAgaWYgKCFkZWxldGVkICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIGNhY2hlIGlzIGZ1bGwsIGRlbGV0ZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBpdGVtXG4gICAgICBpZiAodGhpcy5tYXAuc2l6ZSA+PSB0aGlzLm1heCkge1xuICAgICAgICBjb25zdCBmaXJzdEtleSA9IHRoaXMubWFwLmtleXMoKS5uZXh0KCkudmFsdWVcbiAgICAgICAgdGhpcy5kZWxldGUoZmlyc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMubWFwLnNldChrZXksIHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMUlVDYWNoZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU1BBQ0VfQ0hBUkFDVEVSUyA9IC9cXHMrL2dcblxuLy8gaG9pc3RlZCBjbGFzcyBmb3IgY3ljbGljIGRlcGVuZGVuY3lcbmNsYXNzIFJhbmdlIHtcbiAgY29uc3RydWN0b3IgKHJhbmdlLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKVxuXG4gICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSAmJlxuICAgICAgICByYW5nZS5pbmNsdWRlUHJlcmVsZWFzZSA9PT0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHJhbmdlLnJhdywgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmFuZ2UgaW5zdGFuY2VvZiBDb21wYXJhdG9yKSB7XG4gICAgICAvLyBqdXN0IHB1dCBpdCBpbiB0aGUgc2V0IGFuZCByZXR1cm5cbiAgICAgIHRoaXMucmF3ID0gcmFuZ2UudmFsdWVcbiAgICAgIHRoaXMuc2V0ID0gW1tyYW5nZV1dXG4gICAgICB0aGlzLmZvcm1hdHRlZCA9IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5sb29zZSA9ICEhb3B0aW9ucy5sb29zZVxuICAgIHRoaXMuaW5jbHVkZVByZXJlbGVhc2UgPSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2VcblxuICAgIC8vIEZpcnN0IHJlZHVjZSBhbGwgd2hpdGVzcGFjZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHNvIHdlIGRvIG5vdCBoYXZlIHRvIHJlbHlcbiAgICAvLyBvbiBwb3RlbnRpYWxseSBzbG93IHJlZ2V4ZXMgbGlrZSBcXHMqLiBUaGlzIGlzIHRoZW4gc3RvcmVkIGFuZCB1c2VkIGZvclxuICAgIC8vIGZ1dHVyZSBlcnJvciBtZXNzYWdlcyBhcyB3ZWxsLlxuICAgIHRoaXMucmF3ID0gcmFuZ2UudHJpbSgpLnJlcGxhY2UoU1BBQ0VfQ0hBUkFDVEVSUywgJyAnKVxuXG4gICAgLy8gRmlyc3QsIHNwbGl0IG9uIHx8XG4gICAgdGhpcy5zZXQgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KCd8fCcpXG4gICAgICAvLyBtYXAgdGhlIHJhbmdlIHRvIGEgMmQgYXJyYXkgb2YgY29tcGFyYXRvcnNcbiAgICAgIC5tYXAociA9PiB0aGlzLnBhcnNlUmFuZ2Uoci50cmltKCkpKVxuICAgICAgLy8gdGhyb3cgb3V0IGFueSBjb21wYXJhdG9yIGxpc3RzIHRoYXQgYXJlIGVtcHR5XG4gICAgICAvLyB0aGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IGl0IHdhcyBub3QgYSB2YWxpZCByYW5nZSwgd2hpY2ggaXMgYWxsb3dlZFxuICAgICAgLy8gaW4gbG9vc2UgbW9kZSwgYnV0IHdpbGwgc3RpbGwgdGhyb3cgaWYgdGhlIFdIT0xFIHJhbmdlIGlzIGludmFsaWQuXG4gICAgICAuZmlsdGVyKGMgPT4gYy5sZW5ndGgpXG5cbiAgICBpZiAoIXRoaXMuc2V0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBTZW1WZXIgUmFuZ2U6ICR7dGhpcy5yYXd9YClcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSBub3QgdGhlIG51bGwgc2V0LCB0aHJvdyBvdXQgbnVsbCBzZXRzLlxuICAgIGlmICh0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBrZWVwIHRoZSBmaXJzdCBvbmUsIGluIGNhc2UgdGhleSdyZSBhbGwgbnVsbCBzZXRzXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuc2V0WzBdXG4gICAgICB0aGlzLnNldCA9IHRoaXMuc2V0LmZpbHRlcihjID0+ICFpc051bGxTZXQoY1swXSkpXG4gICAgICBpZiAodGhpcy5zZXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0ID0gW2ZpcnN0XVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW55IHRoYXQgYXJlICosIHRoZW4gdGhlIHJhbmdlIGlzIGp1c3QgKlxuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICBpZiAoYy5sZW5ndGggPT09IDEgJiYgaXNBbnkoY1swXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gW2NdXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybWF0dGVkID0gdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgcmFuZ2UgKCkge1xuICAgIGlmICh0aGlzLmZvcm1hdHRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvcm1hdHRlZCA9ICcnXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgIHRoaXMuZm9ybWF0dGVkICs9ICd8fCdcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IHRoaXMuc2V0W2ldXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY29tcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICBpZiAoayA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkICs9ICcgJ1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZCArPSBjb21wc1trXS50b1N0cmluZygpLnRyaW0oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdHRlZFxuICB9XG5cbiAgZm9ybWF0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlXG4gIH1cblxuICBwYXJzZVJhbmdlIChyYW5nZSkge1xuICAgIC8vIG1lbW9pemUgcmFuZ2UgcGFyc2luZyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgLy8gdGhpcyBpcyBhIHZlcnkgaG90IHBhdGgsIGFuZCBmdWxseSBkZXRlcm1pbmlzdGljLlxuICAgIGNvbnN0IG1lbW9PcHRzID1cbiAgICAgICh0aGlzLm9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiYgRkxBR19JTkNMVURFX1BSRVJFTEVBU0UpIHxcbiAgICAgICh0aGlzLm9wdGlvbnMubG9vc2UgJiYgRkxBR19MT09TRSlcbiAgICBjb25zdCBtZW1vS2V5ID0gbWVtb09wdHMgKyAnOicgKyByYW5nZVxuICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChtZW1vS2V5KVxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRcbiAgICB9XG5cbiAgICBjb25zdCBsb29zZSA9IHRoaXMub3B0aW9ucy5sb29zZVxuICAgIC8vIGAxLjIuMyAtIDEuMi40YCA9PiBgPj0xLjIuMyA8PTEuMi40YFxuICAgIGNvbnN0IGhyID0gbG9vc2UgPyByZVt0LkhZUEhFTlJBTkdFTE9PU0VdIDogcmVbdC5IWVBIRU5SQU5HRV1cbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UoaHIsIGh5cGhlblJlcGxhY2UodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSlcbiAgICBkZWJ1ZygnaHlwaGVuIHJlcGxhY2UnLCByYW5nZSlcblxuICAgIC8vIGA+IDEuMi4zIDwgMS4yLjVgID0+IGA+MS4yLjMgPDEuMi41YFxuICAgIHJhbmdlID0gcmFuZ2UucmVwbGFjZShyZVt0LkNPTVBBUkFUT1JUUklNXSwgY29tcGFyYXRvclRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjb21wYXJhdG9yIHRyaW0nLCByYW5nZSlcblxuICAgIC8vIGB+IDEuMi4zYCA9PiBgfjEuMi4zYFxuICAgIHJhbmdlID0gcmFuZ2UucmVwbGFjZShyZVt0LlRJTERFVFJJTV0sIHRpbGRlVHJpbVJlcGxhY2UpXG4gICAgZGVidWcoJ3RpbGRlIHRyaW0nLCByYW5nZSlcblxuICAgIC8vIGBeIDEuMi4zYCA9PiBgXjEuMi4zYFxuICAgIHJhbmdlID0gcmFuZ2UucmVwbGFjZShyZVt0LkNBUkVUVFJJTV0sIGNhcmV0VHJpbVJlcGxhY2UpXG4gICAgZGVidWcoJ2NhcmV0IHRyaW0nLCByYW5nZSlcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByYW5nZSBpcyBjb21wbGV0ZWx5IHRyaW1tZWQgYW5kXG4gICAgLy8gcmVhZHkgdG8gYmUgc3BsaXQgaW50byBjb21wYXJhdG9ycy5cblxuICAgIGxldCByYW5nZUxpc3QgPSByYW5nZVxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAoY29tcCA9PiBwYXJzZUNvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICAgIC5qb2luKCcgJylcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAvLyA+PTAuMC4wIGlzIGVxdWl2YWxlbnQgdG8gKlxuICAgICAgLm1hcChjb21wID0+IHJlcGxhY2VHVEUwKGNvbXAsIHRoaXMub3B0aW9ucykpXG5cbiAgICBpZiAobG9vc2UpIHtcbiAgICAgIC8vIGluIGxvb3NlIG1vZGUsIHRocm93IG91dCBhbnkgdGhhdCBhcmUgbm90IHZhbGlkIGNvbXBhcmF0b3JzXG4gICAgICByYW5nZUxpc3QgPSByYW5nZUxpc3QuZmlsdGVyKGNvbXAgPT4ge1xuICAgICAgICBkZWJ1ZygnbG9vc2UgaW52YWxpZCBmaWx0ZXInLCBjb21wLCB0aGlzLm9wdGlvbnMpXG4gICAgICAgIHJldHVybiAhIWNvbXAubWF0Y2gocmVbdC5DT01QQVJBVE9STE9PU0VdKVxuICAgICAgfSlcbiAgICB9XG4gICAgZGVidWcoJ3JhbmdlIGxpc3QnLCByYW5nZUxpc3QpXG5cbiAgICAvLyBpZiBhbnkgY29tcGFyYXRvcnMgYXJlIHRoZSBudWxsIHNldCwgdGhlbiByZXBsYWNlIHdpdGggSlVTVCBudWxsIHNldFxuICAgIC8vIGlmIG1vcmUgdGhhbiBvbmUgY29tcGFyYXRvciwgcmVtb3ZlIGFueSAqIGNvbXBhcmF0b3JzXG4gICAgLy8gYWxzbywgZG9uJ3QgaW5jbHVkZSB0aGUgc2FtZSBjb21wYXJhdG9yIG1vcmUgdGhhbiBvbmNlXG4gICAgY29uc3QgcmFuZ2VNYXAgPSBuZXcgTWFwKClcbiAgICBjb25zdCBjb21wYXJhdG9ycyA9IHJhbmdlTGlzdC5tYXAoY29tcCA9PiBuZXcgQ29tcGFyYXRvcihjb21wLCB0aGlzLm9wdGlvbnMpKVxuICAgIGZvciAoY29uc3QgY29tcCBvZiBjb21wYXJhdG9ycykge1xuICAgICAgaWYgKGlzTnVsbFNldChjb21wKSkge1xuICAgICAgICByZXR1cm4gW2NvbXBdXG4gICAgICB9XG4gICAgICByYW5nZU1hcC5zZXQoY29tcC52YWx1ZSwgY29tcClcbiAgICB9XG4gICAgaWYgKHJhbmdlTWFwLnNpemUgPiAxICYmIHJhbmdlTWFwLmhhcygnJykpIHtcbiAgICAgIHJhbmdlTWFwLmRlbGV0ZSgnJylcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBbLi4ucmFuZ2VNYXAudmFsdWVzKCldXG4gICAgY2FjaGUuc2V0KG1lbW9LZXksIHJlc3VsdClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpbnRlcnNlY3RzIChyYW5nZSwgb3B0aW9ucykge1xuICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIFJhbmdlIGlzIHJlcXVpcmVkJylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXQuc29tZSgodGhpc0NvbXBhcmF0b3JzKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpc1NhdGlzZmlhYmxlKHRoaXNDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgcmFuZ2Uuc2V0LnNvbWUoKHJhbmdlQ29tcGFyYXRvcnMpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNTYXRpc2ZpYWJsZShyYW5nZUNvbXBhcmF0b3JzLCBvcHRpb25zKSAmJlxuICAgICAgICAgICAgdGhpc0NvbXBhcmF0b3JzLmV2ZXJ5KCh0aGlzQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VDb21wYXJhdG9ycy5ldmVyeSgocmFuZ2VDb21wYXJhdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNDb21wYXJhdG9yLmludGVyc2VjdHMocmFuZ2VDb21wYXJhdG9yLCBvcHRpb25zKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSlcbiAgfVxuXG4gIC8vIGlmIEFOWSBvZiB0aGUgc2V0cyBtYXRjaCBBTEwgb2YgaXRzIGNvbXBhcmF0b3JzLCB0aGVuIHBhc3NcbiAgdGVzdCAodmVyc2lvbikge1xuICAgIGlmICghdmVyc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmVyc2lvbiA9IG5ldyBTZW1WZXIodmVyc2lvbiwgdGhpcy5vcHRpb25zKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRlc3RTZXQodGhpcy5zZXRbaV0sIHZlcnNpb24sIHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSYW5nZVxuXG5jb25zdCBMUlUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9scnVjYWNoZScpXG5jb25zdCBjYWNoZSA9IG5ldyBMUlUoKVxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuL2NvbXBhcmF0b3InKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9kZWJ1ZycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuL3NlbXZlcicpXG5jb25zdCB7XG4gIHNhZmVSZTogcmUsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG5jb25zdCBpc051bGxTZXQgPSBjID0+IGMudmFsdWUgPT09ICc8MC4wLjAtMCdcbmNvbnN0IGlzQW55ID0gYyA9PiBjLnZhbHVlID09PSAnJ1xuXG4vLyB0YWtlIGEgc2V0IG9mIGNvbXBhcmF0b3JzIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGVyZVxuLy8gZXhpc3RzIGEgdmVyc2lvbiB3aGljaCBjYW4gc2F0aXNmeSBpdFxuY29uc3QgaXNTYXRpc2ZpYWJsZSA9IChjb21wYXJhdG9ycywgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzdWx0ID0gdHJ1ZVxuICBjb25zdCByZW1haW5pbmdDb21wYXJhdG9ycyA9IGNvbXBhcmF0b3JzLnNsaWNlKClcbiAgbGV0IHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcblxuICB3aGlsZSAocmVzdWx0ICYmIHJlbWFpbmluZ0NvbXBhcmF0b3JzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLmV2ZXJ5KChvdGhlckNvbXBhcmF0b3IpID0+IHtcbiAgICAgIHJldHVybiB0ZXN0Q29tcGFyYXRvci5pbnRlcnNlY3RzKG90aGVyQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICB9KVxuXG4gICAgdGVzdENvbXBhcmF0b3IgPSByZW1haW5pbmdDb21wYXJhdG9ycy5wb3AoKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBjb21wcmlzZWQgb2YgeHJhbmdlcywgdGlsZGVzLCBzdGFycywgYW5kIGd0bHQncyBhdCB0aGlzIHBvaW50LlxuLy8gYWxyZWFkeSByZXBsYWNlZCB0aGUgaHlwaGVuIHJhbmdlc1xuLy8gdHVybiBpbnRvIGEgc2V0IG9mIEpVU1QgY29tcGFyYXRvcnMuXG5jb25zdCBwYXJzZUNvbXBhcmF0b3IgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC5yZXBsYWNlKHJlW3QuQlVJTERdLCAnJylcbiAgZGVidWcoJ2NvbXAnLCBjb21wLCBvcHRpb25zKVxuICBjb21wID0gcmVwbGFjZUNhcmV0cyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygnY2FyZXQnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVRpbGRlcyhjb21wLCBvcHRpb25zKVxuICBkZWJ1ZygndGlsZGVzJywgY29tcClcbiAgY29tcCA9IHJlcGxhY2VYUmFuZ2VzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCd4cmFuZ2UnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVN0YXJzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCdzdGFycycsIGNvbXApXG4gIHJldHVybiBjb21wXG59XG5cbmNvbnN0IGlzWCA9IGlkID0+ICFpZCB8fCBpZC50b0xvd2VyQ2FzZSgpID09PSAneCcgfHwgaWQgPT09ICcqJ1xuXG4vLyB+LCB+PiAtLT4gKiAoYW55LCBraW5kYSBzaWxseSlcbi8vIH4yLCB+Mi54LCB+Mi54LngsIH4+Miwgfj4yLnggfj4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gfjIuMCwgfjIuMC54LCB+PjIuMCwgfj4yLjAueCAtLT4gPj0yLjAuMCA8Mi4xLjAtMFxuLy8gfjEuMiwgfjEuMi54LCB+PjEuMiwgfj4xLjIueCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjEuMi4zLCB+PjEuMi4zIC0tPiA+PTEuMi4zIDwxLjMuMC0wXG4vLyB+MS4yLjAsIH4+MS4yLjAgLS0+ID49MS4yLjAgPDEuMy4wLTBcbi8vIH4wLjAuMSAtLT4gPj0wLjAuMSA8MC4xLjAtMFxuY29uc3QgcmVwbGFjZVRpbGRlcyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVRpbGRlKGMsIG9wdGlvbnMpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3QgcmVwbGFjZVRpbGRlID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlRJTERFTE9PU0VdIDogcmVbdC5USUxERV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAoXywgTSwgbSwgcCwgcHIpID0+IHtcbiAgICBkZWJ1ZygndGlsZGUnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICBsZXQgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICAvLyB+MS4yID09ID49MS4yLjAgPDEuMy4wLTBcbiAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wIDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfSBlbHNlIGlmIChwcikge1xuICAgICAgZGVidWcoJ3JlcGxhY2VUaWxkZSBwcicsIHByKVxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB+MS4yLjMgPT0gPj0xLjIuMyA8MS4zLjAtMFxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgIH1cblxuICAgIGRlYnVnKCd0aWxkZSByZXR1cm4nLCByZXQpXG4gICAgcmV0dXJuIHJldFxuICB9KVxufVxuXG4vLyBeIC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gXjIsIF4yLngsIF4yLngueCAtLT4gPj0yLjAuMCA8My4wLjAtMFxuLy8gXjIuMCwgXjIuMC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMS4yLCBeMS4yLnggLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4xLjIuMyAtLT4gPj0xLjIuMyA8Mi4wLjAtMFxuLy8gXjEuMi4wIC0tPiA+PTEuMi4wIDwyLjAuMC0wXG4vLyBeMC4wLjEgLS0+ID49MC4wLjEgPDAuMC4yLTBcbi8vIF4wLjEuMCAtLT4gPj0wLjEuMCA8MC4yLjAtMFxuY29uc3QgcmVwbGFjZUNhcmV0cyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZUNhcmV0KGMsIG9wdGlvbnMpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3QgcmVwbGFjZUNhcmV0ID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ2NhcmV0JywgY29tcCwgb3B0aW9ucylcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LkNBUkVUTE9PU0VdIDogcmVbdC5DQVJFVF1cbiAgY29uc3QgeiA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyAnLTAnIDogJydcbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAoXywgTSwgbSwgcCwgcHIpID0+IHtcbiAgICBkZWJ1ZygnY2FyZXQnLCBjb21wLCBfLCBNLCBtLCBwLCBwcilcbiAgICBsZXQgcmV0XG5cbiAgICBpZiAoaXNYKE0pKSB7XG4gICAgICByZXQgPSAnJ1xuICAgIH0gZWxzZSBpZiAoaXNYKG0pKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCR7en0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICB9IGVsc2UgaWYgKGlzWChwKSkge1xuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHIpIHtcbiAgICAgIGRlYnVnKCdyZXBsYWNlQ2FyZXQgcHInLCBwcilcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3B9LSR7cHJcbiAgICAgICAgICB9IDwke019LiR7bX0uJHsrcCArIDF9LTBgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICB9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdubyBwcicpXG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIGlmIChtID09PSAnMCcpIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSR7en0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgICAgfSR7en0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cFxuICAgICAgICB9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVidWcoJ2NhcmV0IHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2VzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VYUmFuZ2VzJywgY29tcCwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXBcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5tYXAoKGMpID0+IHJlcGxhY2VYUmFuZ2UoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlWFJhbmdlID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgY29tcCA9IGNvbXAudHJpbSgpXG4gIGNvbnN0IHIgPSBvcHRpb25zLmxvb3NlID8gcmVbdC5YUkFOR0VMT09TRV0gOiByZVt0LlhSQU5HRV1cbiAgcmV0dXJuIGNvbXAucmVwbGFjZShyLCAocmV0LCBndGx0LCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd4UmFuZ2UnLCBjb21wLCByZXQsIGd0bHQsIE0sIG0sIHAsIHByKVxuICAgIGNvbnN0IHhNID0gaXNYKE0pXG4gICAgY29uc3QgeG0gPSB4TSB8fCBpc1gobSlcbiAgICBjb25zdCB4cCA9IHhtIHx8IGlzWChwKVxuICAgIGNvbnN0IGFueVggPSB4cFxuXG4gICAgaWYgKGd0bHQgPT09ICc9JyAmJiBhbnlYKSB7XG4gICAgICBndGx0ID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSdyZSBpbmNsdWRpbmcgcHJlcmVsZWFzZXMgaW4gdGhlIG1hdGNoLCB0aGVuIHdlIG5lZWRcbiAgICAvLyB0byBmaXggdGhpcyB0byAtMCwgdGhlIGxvd2VzdCBwb3NzaWJsZSBwcmVyZWxlYXNlIHZhbHVlXG4gICAgcHIgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlID8gJy0wJyA6ICcnXG5cbiAgICBpZiAoeE0pIHtcbiAgICAgIGlmIChndGx0ID09PSAnPicgfHwgZ3RsdCA9PT0gJzwnKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgaXMgYWxsb3dlZFxuICAgICAgICByZXQgPSAnPDAuMC4wLTAnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGlzIGZvcmJpZGRlblxuICAgICAgICByZXQgPSAnKidcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGd0bHQgJiYgYW55WCkge1xuICAgICAgLy8gd2Uga25vdyBwYXRjaCBpcyBhbiB4LCBiZWNhdXNlIHdlIGhhdmUgYW55IHggYXQgYWxsLlxuICAgICAgLy8gcmVwbGFjZSBYIHdpdGggMFxuICAgICAgaWYgKHhtKSB7XG4gICAgICAgIG0gPSAwXG4gICAgICB9XG4gICAgICBwID0gMFxuXG4gICAgICBpZiAoZ3RsdCA9PT0gJz4nKSB7XG4gICAgICAgIC8vID4xID0+ID49Mi4wLjBcbiAgICAgICAgLy8gPjEuMiA9PiA+PTEuMy4wXG4gICAgICAgIGd0bHQgPSAnPj0nXG4gICAgICAgIGlmICh4bSkge1xuICAgICAgICAgIE0gPSArTSArIDFcbiAgICAgICAgICBtID0gMFxuICAgICAgICAgIHAgPSAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbSA9ICttICsgMVxuICAgICAgICAgIHAgPSAwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3RsdCA9PT0gJzw9Jykge1xuICAgICAgICAvLyA8PTAuNy54IGlzIGFjdHVhbGx5IDwwLjguMCwgc2luY2UgYW55IDAuNy54IHNob3VsZFxuICAgICAgICAvLyBwYXNzLiAgU2ltaWxhcmx5LCA8PTcueCBpcyBhY3R1YWxseSA8OC4wLjAsIGV0Yy5cbiAgICAgICAgZ3RsdCA9ICc8J1xuICAgICAgICBpZiAoeG0pIHtcbiAgICAgICAgICBNID0gK00gKyAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbSA9ICttICsgMVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChndGx0ID09PSAnPCcpIHtcbiAgICAgICAgcHIgPSAnLTAnXG4gICAgICB9XG5cbiAgICAgIHJldCA9IGAke2d0bHQgKyBNfS4ke219LiR7cH0ke3ByfWBcbiAgICB9IGVsc2UgaWYgKHhtKSB7XG4gICAgICByZXQgPSBgPj0ke019LjAuMCR7cHJ9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmICh4cCkge1xuICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3ByXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfVxuXG4gICAgZGVidWcoJ3hSYW5nZSByZXR1cm4nLCByZXQpXG5cbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbi8vIEJlY2F1c2UgKiBpcyBBTkQtZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgaW4gdGhlIGNvbXBhcmF0b3IsXG4vLyBhbmQgJycgbWVhbnMgXCJhbnkgdmVyc2lvblwiLCBqdXN0IHJlbW92ZSB0aGUgKnMgZW50aXJlbHkuXG5jb25zdCByZXBsYWNlU3RhcnMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVN0YXJzJywgY29tcCwgb3B0aW9ucylcbiAgLy8gTG9vc2VuZXNzIGlzIGlnbm9yZWQgaGVyZS4gIHN0YXIgaXMgYWx3YXlzIGFzIGxvb3NlIGFzIGl0IGdldHMhXG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKHJlW3QuU1RBUl0sICcnKVxufVxuXG5jb25zdCByZXBsYWNlR1RFMCA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdyZXBsYWNlR1RFMCcsIGNvbXAsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKHJlW29wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyB0LkdURTBQUkUgOiB0LkdURTBdLCAnJylcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8gc3RyaW5nLnJlcGxhY2UocmVbdC5IWVBIRU5SQU5HRV0pXG4vLyBNLCBtLCBwYXRjaCwgcHJlcmVsZWFzZSwgYnVpbGRcbi8vIDEuMiAtIDMuNC41ID0+ID49MS4yLjAgPD0zLjQuNVxuLy8gMS4yLjMgLSAzLjQgPT4gPj0xLjIuMCA8My41LjAtMCBBbnkgMy40Lnggd2lsbCBkb1xuLy8gMS4yIC0gMy40ID0+ID49MS4yLjAgPDMuNS4wLTBcbi8vIFRPRE8gYnVpbGQ/XG5jb25zdCBoeXBoZW5SZXBsYWNlID0gaW5jUHIgPT4gKCQwLFxuICBmcm9tLCBmTSwgZm0sIGZwLCBmcHIsIGZiLFxuICB0bywgdE0sIHRtLCB0cCwgdHByKSA9PiB7XG4gIGlmIChpc1goZk0pKSB7XG4gICAgZnJvbSA9ICcnXG4gIH0gZWxzZSBpZiAoaXNYKGZtKSkge1xuICAgIGZyb20gPSBgPj0ke2ZNfS4wLjAke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfSBlbHNlIGlmIChpc1goZnApKSB7XG4gICAgZnJvbSA9IGA+PSR7Zk19LiR7Zm19LjAke2luY1ByID8gJy0wJyA6ICcnfWBcbiAgfSBlbHNlIGlmIChmcHIpIHtcbiAgICBmcm9tID0gYD49JHtmcm9tfWBcbiAgfSBlbHNlIHtcbiAgICBmcm9tID0gYD49JHtmcm9tfSR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9XG5cbiAgaWYgKGlzWCh0TSkpIHtcbiAgICB0byA9ICcnXG4gIH0gZWxzZSBpZiAoaXNYKHRtKSkge1xuICAgIHRvID0gYDwkeyt0TSArIDF9LjAuMC0wYFxuICB9IGVsc2UgaWYgKGlzWCh0cCkpIHtcbiAgICB0byA9IGA8JHt0TX0uJHsrdG0gKyAxfS4wLTBgXG4gIH0gZWxzZSBpZiAodHByKSB7XG4gICAgdG8gPSBgPD0ke3RNfS4ke3RtfS4ke3RwfS0ke3Rwcn1gXG4gIH0gZWxzZSBpZiAoaW5jUHIpIHtcbiAgICB0byA9IGA8JHt0TX0uJHt0bX0uJHsrdHAgKyAxfS0wYFxuICB9IGVsc2Uge1xuICAgIHRvID0gYDw9JHt0b31gXG4gIH1cblxuICByZXR1cm4gYCR7ZnJvbX0gJHt0b31gLnRyaW0oKVxufVxuXG5jb25zdCB0ZXN0U2V0ID0gKHNldCwgdmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2V0W2ldLnRlc3QodmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGlmICh2ZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoICYmICFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgLy8gRmluZCB0aGUgc2V0IG9mIHZlcnNpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gaGF2ZSBwcmVyZWxlYXNlc1xuICAgIC8vIEZvciBleGFtcGxlLCBeMS4yLjMtcHIuMSBkZXN1Z2FycyB0byA+PTEuMi4zLXByLjEgPDIuMC4wXG4gICAgLy8gVGhhdCBzaG91bGQgYWxsb3cgYDEuMi4zLXByLjJgIHRvIHBhc3MuXG4gICAgLy8gSG93ZXZlciwgYDEuMi40LWFscGhhLm5vdHJlYWR5YCBzaG91bGQgTk9UIGJlIGFsbG93ZWQsXG4gICAgLy8gZXZlbiB0aG91Z2ggaXQncyB3aXRoaW4gdGhlIHJhbmdlIHNldCBieSB0aGUgY29tcGFyYXRvcnMuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYnVnKHNldFtpXS5zZW12ZXIpXG4gICAgICBpZiAoc2V0W2ldLnNlbXZlciA9PT0gQ29tcGFyYXRvci5BTlkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNldFtpXS5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWQgPSBzZXRbaV0uc2VtdmVyXG4gICAgICAgIGlmIChhbGxvd2VkLm1ham9yID09PSB2ZXJzaW9uLm1ham9yICYmXG4gICAgICAgICAgICBhbGxvd2VkLm1pbm9yID09PSB2ZXJzaW9uLm1pbm9yICYmXG4gICAgICAgICAgICBhbGxvd2VkLnBhdGNoID09PSB2ZXJzaW9uLnBhdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZlcnNpb24gaGFzIGEgLXByZSwgYnV0IGl0J3Mgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBsaWtlLlxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBzYXRpc2ZpZXMgPSAodmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpID0+IHtcbiAgdHJ5IHtcbiAgICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gcmFuZ2UudGVzdCh2ZXJzaW9uKVxufVxubW9kdWxlLmV4cG9ydHMgPSBzYXRpc2ZpZXNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbi8vIE1vc3RseSBqdXN0IGZvciB0ZXN0aW5nIGFuZCBsZWdhY3kgQVBJIHJlYXNvbnNcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSAocmFuZ2UsIG9wdGlvbnMpID0+XG4gIG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucykuc2V0XG4gICAgLm1hcChjb21wID0+IGNvbXAubWFwKGMgPT4gYy52YWx1ZSkuam9pbignICcpLnRyaW0oKS5zcGxpdCgnICcpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQ29tcGFyYXRvcnNcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9ICh2ZXJzaW9ucywgcmFuZ2UsIG9wdGlvbnMpID0+IHtcbiAgbGV0IG1pbiA9IG51bGxcbiAgbGV0IG1pblNWID0gbnVsbFxuICBsZXQgcmFuZ2VPYmogPSBudWxsXG4gIHRyeSB7XG4gICAgcmFuZ2VPYmogPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICB2ZXJzaW9ucy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgaWYgKHJhbmdlT2JqLnRlc3QodikpIHtcbiAgICAgIC8vIHNhdGlzZmllcyh2LCByYW5nZSwgb3B0aW9ucylcbiAgICAgIGlmICghbWluIHx8IG1pblNWLmNvbXBhcmUodikgPT09IDEpIHtcbiAgICAgICAgLy8gY29tcGFyZShtaW4sIHYsIHRydWUpXG4gICAgICAgIG1pbiA9IHZcbiAgICAgICAgbWluU1YgPSBuZXcgU2VtVmVyKG1pbiwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBtaW5cbn1cbm1vZHVsZS5leHBvcnRzID0gbWluU2F0aXNmeWluZ1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2d0JylcblxuY29uc3QgbWluVmVyc2lvbiA9IChyYW5nZSwgbG9vc2UpID0+IHtcbiAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIGxvb3NlKVxuXG4gIGxldCBtaW52ZXIgPSBuZXcgU2VtVmVyKCcwLjAuMCcpXG4gIGlmIChyYW5nZS50ZXN0KG1pbnZlcikpIHtcbiAgICByZXR1cm4gbWludmVyXG4gIH1cblxuICBtaW52ZXIgPSBuZXcgU2VtVmVyKCcwLjAuMC0wJylcbiAgaWYgKHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIG1pbnZlciA9IG51bGxcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZXQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb21wYXJhdG9ycyA9IHJhbmdlLnNldFtpXVxuXG4gICAgbGV0IHNldE1pbiA9IG51bGxcbiAgICBjb21wYXJhdG9ycy5mb3JFYWNoKChjb21wYXJhdG9yKSA9PiB7XG4gICAgICAvLyBDbG9uZSB0byBhdm9pZCBtYW5pcHVsYXRpbmcgdGhlIGNvbXBhcmF0b3IncyBzZW12ZXIgb2JqZWN0LlxuICAgICAgY29uc3QgY29tcHZlciA9IG5ldyBTZW1WZXIoY29tcGFyYXRvci5zZW12ZXIudmVyc2lvbilcbiAgICAgIHN3aXRjaCAoY29tcGFyYXRvci5vcGVyYXRvcikge1xuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICBpZiAoY29tcHZlci5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29tcHZlci5wYXRjaCsrXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXB2ZXIucHJlcmVsZWFzZS5wdXNoKDApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbXB2ZXIucmF3ID0gY29tcHZlci5mb3JtYXQoKVxuICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgICAgIGNhc2UgJyc6XG4gICAgICAgIGNhc2UgJz49JzpcbiAgICAgICAgICBpZiAoIXNldE1pbiB8fCBndChjb21wdmVyLCBzZXRNaW4pKSB7XG4gICAgICAgICAgICBzZXRNaW4gPSBjb21wdmVyXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgLyogSWdub3JlIG1heGltdW0gdmVyc2lvbnMgKi9cbiAgICAgICAgICBicmVha1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBvcGVyYXRpb246ICR7Y29tcGFyYXRvci5vcGVyYXRvcn1gKVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKHNldE1pbiAmJiAoIW1pbnZlciB8fCBndChtaW52ZXIsIHNldE1pbikpKSB7XG4gICAgICBtaW52ZXIgPSBzZXRNaW5cbiAgICB9XG4gIH1cblxuICBpZiAobWludmVyICYmIHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5tb2R1bGUuZXhwb3J0cyA9IG1pblZlcnNpb25cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgQ29tcGFyYXRvciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvY29tcGFyYXRvcicpXG5jb25zdCB7IEFOWSB9ID0gQ29tcGFyYXRvclxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvbHQnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2x0ZScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZ3RlJylcblxuY29uc3Qgb3V0c2lkZSA9ICh2ZXJzaW9uLCByYW5nZSwgaGlsbywgb3B0aW9ucykgPT4ge1xuICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgb3B0aW9ucylcblxuICBsZXQgZ3RmbiwgbHRlZm4sIGx0Zm4sIGNvbXAsIGVjb21wXG4gIHN3aXRjaCAoaGlsbykge1xuICAgIGNhc2UgJz4nOlxuICAgICAgZ3RmbiA9IGd0XG4gICAgICBsdGVmbiA9IGx0ZVxuICAgICAgbHRmbiA9IGx0XG4gICAgICBjb21wID0gJz4nXG4gICAgICBlY29tcCA9ICc+PSdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnPCc6XG4gICAgICBndGZuID0gbHRcbiAgICAgIGx0ZWZuID0gZ3RlXG4gICAgICBsdGZuID0gZ3RcbiAgICAgIGNvbXAgPSAnPCdcbiAgICAgIGVjb21wID0gJzw9J1xuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBwcm92aWRlIGEgaGlsbyB2YWwgb2YgXCI8XCIgb3IgXCI+XCInKVxuICB9XG5cbiAgLy8gSWYgaXQgc2F0aXNmaWVzIHRoZSByYW5nZSBpdCBpcyBub3Qgb3V0c2lkZVxuICBpZiAoc2F0aXNmaWVzKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gRnJvbSBub3cgb24sIHZhcmlhYmxlIHRlcm1zIGFyZSBhcyBpZiB3ZSdyZSBpbiBcImd0clwiIG1vZGUuXG4gIC8vIGJ1dCBub3RlIHRoYXQgZXZlcnl0aGluZyBpcyBmbGlwcGVkIGZvciB0aGUgXCJsdHJcIiBmdW5jdGlvbi5cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNldC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3JzID0gcmFuZ2Uuc2V0W2ldXG5cbiAgICBsZXQgaGlnaCA9IG51bGxcbiAgICBsZXQgbG93ID0gbnVsbFxuXG4gICAgY29tcGFyYXRvcnMuZm9yRWFjaCgoY29tcGFyYXRvcikgPT4ge1xuICAgICAgaWYgKGNvbXBhcmF0b3Iuc2VtdmVyID09PSBBTlkpIHtcbiAgICAgICAgY29tcGFyYXRvciA9IG5ldyBDb21wYXJhdG9yKCc+PTAuMC4wJylcbiAgICAgIH1cbiAgICAgIGhpZ2ggPSBoaWdoIHx8IGNvbXBhcmF0b3JcbiAgICAgIGxvdyA9IGxvdyB8fCBjb21wYXJhdG9yXG4gICAgICBpZiAoZ3Rmbihjb21wYXJhdG9yLnNlbXZlciwgaGlnaC5zZW12ZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgIGhpZ2ggPSBjb21wYXJhdG9yXG4gICAgICB9IGVsc2UgaWYgKGx0Zm4oY29tcGFyYXRvci5zZW12ZXIsIGxvdy5zZW12ZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgIGxvdyA9IGNvbXBhcmF0b3JcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSWYgdGhlIGVkZ2UgdmVyc2lvbiBjb21wYXJhdG9yIGhhcyBhIG9wZXJhdG9yIHRoZW4gb3VyIHZlcnNpb25cbiAgICAvLyBpc24ndCBvdXRzaWRlIGl0XG4gICAgaWYgKGhpZ2gub3BlcmF0b3IgPT09IGNvbXAgfHwgaGlnaC5vcGVyYXRvciA9PT0gZWNvbXApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBsb3dlc3QgdmVyc2lvbiBjb21wYXJhdG9yIGhhcyBhbiBvcGVyYXRvciBhbmQgb3VyIHZlcnNpb25cbiAgICAvLyBpcyBsZXNzIHRoYW4gaXQgdGhlbiBpdCBpc24ndCBoaWdoZXIgdGhhbiB0aGUgcmFuZ2VcbiAgICBpZiAoKCFsb3cub3BlcmF0b3IgfHwgbG93Lm9wZXJhdG9yID09PSBjb21wKSAmJlxuICAgICAgICBsdGVmbih2ZXJzaW9uLCBsb3cuc2VtdmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIGlmIChsb3cub3BlcmF0b3IgPT09IGVjb21wICYmIGx0Zm4odmVyc2lvbiwgbG93LnNlbXZlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHNpZGVcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8vIERldGVybWluZSBpZiB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBhbGwgdGhlIHZlcnNpb25zIHBvc3NpYmxlIGluIHRoZSByYW5nZS5cbmNvbnN0IG91dHNpZGUgPSByZXF1aXJlKCcuL291dHNpZGUnKVxuY29uc3QgZ3RyID0gKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSA9PiBvdXRzaWRlKHZlcnNpb24sIHJhbmdlLCAnPicsIG9wdGlvbnMpXG5tb2R1bGUuZXhwb3J0cyA9IGd0clxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBpbnRlcnNlY3RzID0gKHIxLCByMiwgb3B0aW9ucykgPT4ge1xuICByMSA9IG5ldyBSYW5nZShyMSwgb3B0aW9ucylcbiAgcjIgPSBuZXcgUmFuZ2UocjIsIG9wdGlvbnMpXG4gIHJldHVybiByMS5pbnRlcnNlY3RzKHIyLCBvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcnNlY3RzXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBnaXZlbiBhIHNldCBvZiB2ZXJzaW9ucyBhbmQgYSByYW5nZSwgY3JlYXRlIGEgXCJzaW1wbGlmaWVkXCIgcmFuZ2Vcbi8vIHRoYXQgaW5jbHVkZXMgdGhlIHNhbWUgdmVyc2lvbnMgdGhhdCB0aGUgb3JpZ2luYWwgcmFuZ2UgZG9lc1xuLy8gSWYgdGhlIG9yaWdpbmFsIHJhbmdlIGlzIHNob3J0ZXIgdGhhbiB0aGUgc2ltcGxpZmllZCBvbmUsIHJldHVybiB0aGF0LlxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NhdGlzZmllcy5qcycpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2NvbXBhcmUuanMnKVxubW9kdWxlLmV4cG9ydHMgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHNldCA9IFtdXG4gIGxldCBmaXJzdCA9IG51bGxcbiAgbGV0IHByZXYgPSBudWxsXG4gIGNvbnN0IHYgPSB2ZXJzaW9ucy5zb3J0KChhLCBiKSA9PiBjb21wYXJlKGEsIGIsIG9wdGlvbnMpKVxuICBmb3IgKGNvbnN0IHZlcnNpb24gb2Ygdikge1xuICAgIGNvbnN0IGluY2x1ZGVkID0gc2F0aXNmaWVzKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKVxuICAgIGlmIChpbmNsdWRlZCkge1xuICAgICAgcHJldiA9IHZlcnNpb25cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgZmlyc3QgPSB2ZXJzaW9uXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHNldC5wdXNoKFtmaXJzdCwgcHJldl0pXG4gICAgICB9XG4gICAgICBwcmV2ID0gbnVsbFxuICAgICAgZmlyc3QgPSBudWxsXG4gICAgfVxuICB9XG4gIGlmIChmaXJzdCkge1xuICAgIHNldC5wdXNoKFtmaXJzdCwgbnVsbF0pXG4gIH1cblxuICBjb25zdCByYW5nZXMgPSBbXVxuICBmb3IgKGNvbnN0IFttaW4sIG1heF0gb2Ygc2V0KSB7XG4gICAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgICByYW5nZXMucHVzaChtaW4pXG4gICAgfSBlbHNlIGlmICghbWF4ICYmIG1pbiA9PT0gdlswXSkge1xuICAgICAgcmFuZ2VzLnB1c2goJyonKVxuICAgIH0gZWxzZSBpZiAoIW1heCkge1xuICAgICAgcmFuZ2VzLnB1c2goYD49JHttaW59YClcbiAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdlswXSkge1xuICAgICAgcmFuZ2VzLnB1c2goYDw9JHttYXh9YClcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2VzLnB1c2goYCR7bWlufSAtICR7bWF4fWApXG4gICAgfVxuICB9XG4gIGNvbnN0IHNpbXBsaWZpZWQgPSByYW5nZXMuam9pbignIHx8ICcpXG4gIGNvbnN0IG9yaWdpbmFsID0gdHlwZW9mIHJhbmdlLnJhdyA9PT0gJ3N0cmluZycgPyByYW5nZS5yYXcgOiBTdHJpbmcocmFuZ2UpXG4gIHJldHVybiBzaW1wbGlmaWVkLmxlbmd0aCA8IG9yaWdpbmFsLmxlbmd0aCA/IHNpbXBsaWZpZWQgOiByYW5nZVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1Quc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIXNhdGlzZmllcyhndC5zZW12ZXIsIFN0cmluZyhjKSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsdCkge1xuICAgICAgaWYgKG5lZWREb21MVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21MVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21MVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21MVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21MVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgICBsb3dlciA9IGxvd2VyTFQobHQsIGMsIG9wdGlvbnMpXG4gICAgICAgIGlmIChsb3dlciA9PT0gYyAmJiBsb3dlciAhPT0gbHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsdC5vcGVyYXRvciA9PT0gJzw9JyAmJiAhc2F0aXNmaWVzKGx0LnNlbXZlciwgU3RyaW5nKGMpLCBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjLm9wZXJhdG9yICYmIChsdCB8fCBndCkgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZXJlIHdhcyBhIDwgb3IgPiwgYW5kIG5vdGhpbmcgaW4gdGhlIGRvbSwgdGhlbiBtdXN0IGJlIGZhbHNlXG4gIC8vIFVOTEVTUyBpdCB3YXMgbGltaXRlZCBieSBhbm90aGVyIHJhbmdlIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uXG4gIC8vIEVnLCA+MS4wLjAgPDEuMC4xIGlzIHN0aWxsIGEgc3Vic2V0IG9mIDwyLjAuMFxuICBpZiAoZ3QgJiYgaGFzRG9tTFQgJiYgIWx0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobHQgJiYgaGFzRG9tR1QgJiYgIWd0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyB3ZSBuZWVkZWQgYSBwcmVyZWxlYXNlIHJhbmdlIGluIGEgc3BlY2lmaWMgdHVwbGUsIGJ1dCBkaWRuJ3QgZ2V0IG9uZVxuICAvLyB0aGVuIHRoaXMgaXNuJ3QgYSBzdWJzZXQuICBlZyA+PTEuMi4zLXByZSBpcyBub3QgYSBzdWJzZXQgb2YgPj0xLjAuMCxcbiAgLy8gYmVjYXVzZSBpdCBpbmNsdWRlcyBwcmVyZWxlYXNlcyBpbiB0aGUgMS4yLjMgdHVwbGVcbiAgaWYgKG5lZWREb21HVFByZSB8fCBuZWVkRG9tTFRQcmUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vID49MS4yLjMgaXMgbG93ZXIgdGhhbiA+MS4yLjNcbmNvbnN0IGhpZ2hlckdUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wID4gMCA/IGFcbiAgICA6IGNvbXAgPCAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJz4nICYmIGEub3BlcmF0b3IgPT09ICc+PScgPyBiXG4gICAgOiBhXG59XG5cbi8vIDw9MS4yLjMgaXMgaGlnaGVyIHRoYW4gPDEuMi4zXG5jb25zdCBsb3dlckxUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wIDwgMCA/IGFcbiAgICA6IGNvbXAgPiAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJzwnICYmIGEub3BlcmF0b3IgPT09ICc8PScgPyBiXG4gICAgOiBhXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3Vic2V0XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBqdXN0IHByZS1sb2FkIGFsbCB0aGUgc3R1ZmYgdGhhdCBpbmRleC5qcyBsYXppbHkgZXhwb3J0c1xuY29uc3QgaW50ZXJuYWxSZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvcmUnKVxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBpZGVudGlmaWVycyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvaWRlbnRpZmllcnMnKVxuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXJzZScpXG5jb25zdCB2YWxpZCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3ZhbGlkJylcbmNvbnN0IGNsZWFuID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY2xlYW4nKVxuY29uc3QgaW5jID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvaW5jJylcbmNvbnN0IGRpZmYgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9kaWZmJylcbmNvbnN0IG1ham9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWFqb3InKVxuY29uc3QgbWlub3IgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9taW5vcicpXG5jb25zdCBwYXRjaCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3BhdGNoJylcbmNvbnN0IHByZXJlbGVhc2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wcmVyZWxlYXNlJylcbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb21wYXJlJylcbmNvbnN0IHJjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcmNvbXBhcmUnKVxuY29uc3QgY29tcGFyZUxvb3NlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1sb29zZScpXG5jb25zdCBjb21wYXJlQnVpbGQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHNvcnQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9zb3J0JylcbmNvbnN0IHJzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcnNvcnQnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndCcpXG5jb25zdCBsdCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2x0JylcbmNvbnN0IGVxID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZXEnKVxuY29uc3QgbmVxID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbmVxJylcbmNvbnN0IGd0ZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2d0ZScpXG5jb25zdCBsdGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdGUnKVxuY29uc3QgY21wID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGNvZXJjZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvZXJjZScpXG5jb25zdCBDb21wYXJhdG9yID0gcmVxdWlyZSgnLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IHRvQ29tcGFyYXRvcnMgPSByZXF1aXJlKCcuL3Jhbmdlcy90by1jb21wYXJhdG9ycycpXG5jb25zdCBtYXhTYXRpc2Z5aW5nID0gcmVxdWlyZSgnLi9yYW5nZXMvbWF4LXNhdGlzZnlpbmcnKVxuY29uc3QgbWluU2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21pbi1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblZlcnNpb24gPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tdmVyc2lvbicpXG5jb25zdCB2YWxpZFJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvdmFsaWQnKVxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL291dHNpZGUnKVxuY29uc3QgZ3RyID0gcmVxdWlyZSgnLi9yYW5nZXMvZ3RyJylcbmNvbnN0IGx0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2x0cicpXG5jb25zdCBpbnRlcnNlY3RzID0gcmVxdWlyZSgnLi9yYW5nZXMvaW50ZXJzZWN0cycpXG5jb25zdCBzaW1wbGlmeVJhbmdlID0gcmVxdWlyZSgnLi9yYW5nZXMvc2ltcGxpZnknKVxuY29uc3Qgc3Vic2V0ID0gcmVxdWlyZSgnLi9yYW5nZXMvc3Vic2V0Jylcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZSxcbiAgdmFsaWQsXG4gIGNsZWFuLFxuICBpbmMsXG4gIGRpZmYsXG4gIG1ham9yLFxuICBtaW5vcixcbiAgcGF0Y2gsXG4gIHByZXJlbGVhc2UsXG4gIGNvbXBhcmUsXG4gIHJjb21wYXJlLFxuICBjb21wYXJlTG9vc2UsXG4gIGNvbXBhcmVCdWlsZCxcbiAgc29ydCxcbiAgcnNvcnQsXG4gIGd0LFxuICBsdCxcbiAgZXEsXG4gIG5lcSxcbiAgZ3RlLFxuICBsdGUsXG4gIGNtcCxcbiAgY29lcmNlLFxuICBDb21wYXJhdG9yLFxuICBSYW5nZSxcbiAgc2F0aXNmaWVzLFxuICB0b0NvbXBhcmF0b3JzLFxuICBtYXhTYXRpc2Z5aW5nLFxuICBtaW5TYXRpc2Z5aW5nLFxuICBtaW5WZXJzaW9uLFxuICB2YWxpZFJhbmdlLFxuICBvdXRzaWRlLFxuICBndHIsXG4gIGx0cixcbiAgaW50ZXJzZWN0cyxcbiAgc2ltcGxpZnlSYW5nZSxcbiAgc3Vic2V0LFxuICBTZW1WZXIsXG4gIHJlOiBpbnRlcm5hbFJlLnJlLFxuICBzcmM6IGludGVybmFsUmUuc3JjLFxuICB0b2tlbnM6IGludGVybmFsUmUudCxcbiAgU0VNVkVSX1NQRUNfVkVSU0lPTjogY29uc3RhbnRzLlNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIFJFTEVBU0VfVFlQRVM6IGNvbnN0YW50cy5SRUxFQVNFX1RZUEVTLFxuICBjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLmNvbXBhcmVJZGVudGlmaWVycyxcbiAgcmNvbXBhcmVJZGVudGlmaWVyczogaWRlbnRpZmllcnMucmNvbXBhcmVJZGVudGlmaWVycyxcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVmVyc2lvbkdyZWF0ZXJPckVxdWFsID0gaXNWZXJzaW9uR3JlYXRlck9yRXF1YWw7XG5leHBvcnRzLnBhcnNlUHJvbXB0SWRlbnRpZmllciA9IHBhcnNlUHJvbXB0SWRlbnRpZmllcjtcbmNvbnN0IHNlbXZlcl8xID0gcmVxdWlyZShcInNlbXZlclwiKTtcbmZ1bmN0aW9uIGlzVmVyc2lvbkdyZWF0ZXJPckVxdWFsKGN1cnJlbnRfdmVyc2lvbiwgdGFyZ2V0X3ZlcnNpb24pIHtcbiAgICBjb25zdCBjdXJyZW50ID0gKDAsIHNlbXZlcl8xLnBhcnNlKShjdXJyZW50X3ZlcnNpb24pO1xuICAgIGNvbnN0IHRhcmdldCA9ICgwLCBzZW12ZXJfMS5wYXJzZSkodGFyZ2V0X3ZlcnNpb24pO1xuICAgIGlmICghY3VycmVudCB8fCAhdGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmVyc2lvbiBmb3JtYXQuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudC5jb21wYXJlKHRhcmdldCkgPj0gMDtcbn1cbmZ1bmN0aW9uIHBhcnNlUHJvbXB0SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gICAgaWYgKCFpZGVudGlmaWVyIHx8XG4gICAgICAgIGlkZW50aWZpZXIuc3BsaXQoXCIvXCIpLmxlbmd0aCA+IDIgfHxcbiAgICAgICAgaWRlbnRpZmllci5zdGFydHNXaXRoKFwiL1wiKSB8fFxuICAgICAgICBpZGVudGlmaWVyLmVuZHNXaXRoKFwiL1wiKSB8fFxuICAgICAgICBpZGVudGlmaWVyLnNwbGl0KFwiOlwiKS5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpZGVudGlmaWVyIGZvcm1hdDogJHtpZGVudGlmaWVyfWApO1xuICAgIH1cbiAgICBjb25zdCBbb3duZXJOYW1lUGFydCwgY29tbWl0UGFydF0gPSBpZGVudGlmaWVyLnNwbGl0KFwiOlwiKTtcbiAgICBjb25zdCBjb21taXQgPSBjb21taXRQYXJ0IHx8IFwibGF0ZXN0XCI7XG4gICAgaWYgKG93bmVyTmFtZVBhcnQuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgIGNvbnN0IFtvd25lciwgbmFtZV0gPSBvd25lck5hbWVQYXJ0LnNwbGl0KFwiL1wiLCAyKTtcbiAgICAgICAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlkZW50aWZpZXIgZm9ybWF0OiAke2lkZW50aWZpZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtvd25lciwgbmFtZSwgY29tbWl0XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghb3duZXJOYW1lUGFydCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlkZW50aWZpZXIgZm9ybWF0OiAke2lkZW50aWZpZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIi1cIiwgb3duZXJOYW1lUGFydCwgY29tbWl0XTtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25mbGljdGluZ0VuZHBvaW50c0Vycm9yID0gZXhwb3J0cy5MYW5nU21pdGhDb25mbGljdEVycm9yID0gdm9pZCAwO1xuZXhwb3J0cy5wcmludEVycm9yU3RhY2tUcmFjZSA9IHByaW50RXJyb3JTdGFja1RyYWNlO1xuZXhwb3J0cy5yYWlzZUZvclN0YXR1cyA9IHJhaXNlRm9yU3RhdHVzO1xuZXhwb3J0cy5pc0NvbmZsaWN0aW5nRW5kcG9pbnRzRXJyb3IgPSBpc0NvbmZsaWN0aW5nRW5kcG9pbnRzRXJyb3I7XG5mdW5jdGlvbiBnZXRFcnJvclN0YWNrVHJhY2UoZSkge1xuICAgIGlmICh0eXBlb2YgZSAhPT0gXCJvYmplY3RcIiB8fCBlID09IG51bGwpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKCEoXCJzdGFja1wiIGluIGUpIHx8IHR5cGVvZiBlLnN0YWNrICE9PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxldCBzdGFjayA9IGUuc3RhY2s7XG4gICAgY29uc3QgcHJldkxpbmUgPSBgJHtlfWA7XG4gICAgaWYgKHN0YWNrLnN0YXJ0c1dpdGgocHJldkxpbmUpKSB7XG4gICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UocHJldkxpbmUubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHN0YWNrLnN0YXJ0c1dpdGgoXCJcXG5cIikpIHtcbiAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrO1xufVxuZnVuY3Rpb24gcHJpbnRFcnJvclN0YWNrVHJhY2UoZSkge1xuICAgIGNvbnN0IHN0YWNrID0gZ2V0RXJyb3JTdGFja1RyYWNlKGUpO1xuICAgIGlmIChzdGFjayA9PSBudWxsKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc29sZS5lcnJvcihzdGFjayk7XG59XG4vKipcbiAqIExhbmdTbWl0aENvbmZsaWN0RXJyb3JcbiAqXG4gKiBSZXByZXNlbnRzIGFuIGVycm9yIHRoYXQgb2NjdXJzIHdoZW4gdGhlcmUncyBhIGNvbmZsaWN0IGR1cmluZyBhbiBvcGVyYXRpb24sXG4gKiB0eXBpY2FsbHkgY29ycmVzcG9uZGluZyB0byBIVFRQIDQwOSBzdGF0dXMgY29kZSByZXNwb25zZXMuXG4gKlxuICogVGhpcyBlcnJvciBpcyB0aHJvd24gd2hlbiBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBvciBtb2RpZnkgYSByZXNvdXJjZSBjb25mbGljdHNcbiAqIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlc291cmNlIG9uIHRoZSBzZXJ2ZXIuIENvbW1vbiBzY2VuYXJpb3MgaW5jbHVkZTpcbiAqIC0gQXR0ZW1wdGluZyB0byBjcmVhdGUgYSByZXNvdXJjZSB0aGF0IGFscmVhZHkgZXhpc3RzXG4gKiAtIFRyeWluZyB0byB1cGRhdGUgYSByZXNvdXJjZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGFub3RoZXIgcHJvY2Vzc1xuICogLSBWaW9sYXRpbmcgYSB1bmlxdWVuZXNzIGNvbnN0cmFpbnQgaW4gdGhlIGRhdGFcbiAqXG4gKiBAZXh0ZW5kcyBFcnJvclxuICpcbiAqIEBleGFtcGxlXG4gKiB0cnkge1xuICogICBhd2FpdCBjcmVhdGVQcm9qZWN0KFwiZXhpc3RpbmdQcm9qZWN0XCIpO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ29uZmxpY3RFcnJvcikge1xuICogICAgIGNvbnNvbGUubG9nKFwiQSBjb25mbGljdCBvY2N1cnJlZDpcIiwgZXJyb3IubWVzc2FnZSk7XG4gKiAgICAgLy8gSGFuZGxlIHRoZSBjb25mbGljdCwgZS5nLiwgYnkgc3VnZ2VzdGluZyBhIGRpZmZlcmVudCBwcm9qZWN0IG5hbWVcbiAqICAgfSBlbHNlIHtcbiAqICAgICAvLyBIYW5kbGUgb3RoZXIgdHlwZXMgb2YgZXJyb3JzXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIEFsd2F5cyBzZXQgdG8gJ0NvbmZsaWN0RXJyb3InIGZvciBlYXN5IGlkZW50aWZpY2F0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIERldGFpbGVkIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHNlcnZlciByZXNwb25zZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9TdGF0dXMvNDA5XG4gKi9cbmNsYXNzIExhbmdTbWl0aENvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdHVzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiTGFuZ1NtaXRoQ29uZmxpY3RFcnJvclwiO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IDQwOTtcbiAgICB9XG59XG5leHBvcnRzLkxhbmdTbWl0aENvbmZsaWN0RXJyb3IgPSBMYW5nU21pdGhDb25mbGljdEVycm9yO1xuLyoqXG4gKiBUaHJvd3MgYW4gYXBwcm9wcmlhdGUgZXJyb3IgYmFzZWQgb24gdGhlIHJlc3BvbnNlIHN0YXR1cyBhbmQgYm9keS5cbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBUaGUgZmV0Y2ggUmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gY29udGV4dCAtIEFkZGl0aW9uYWwgY29udGV4dCB0byBpbmNsdWRlIGluIHRoZSBlcnJvciBtZXNzYWdlIChlLmcuLCBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkKVxuICogQHRocm93cyB7TGFuZ1NtaXRoQ29uZmxpY3RFcnJvcn0gV2hlbiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGlzIDQwOVxuICogQHRocm93cyB7RXJyb3J9IEZvciBhbGwgb3RoZXIgbm9uLW9rIHJlc3BvbnNlc1xuICovXG5hc3luYyBmdW5jdGlvbiByYWlzZUZvclN0YXR1cyhyZXNwb25zZSwgY29udGV4dCwgY29uc3VtZU9uU3VjY2Vzcykge1xuICAgIGxldCBlcnJvckJvZHk7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIC8vIGNvbnN1bWUgdGhlIHJlc3BvbnNlIGJvZHkgdG8gcmVsZWFzZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAvLyBodHRwczovL3VuZGljaS5ub2RlanMub3JnLyMvP2lkPWdhcmJhZ2UtY29sbGVjdGlvblxuICAgICAgICBpZiAoY29uc3VtZU9uU3VjY2Vzcykge1xuICAgICAgICAgICAgZXJyb3JCb2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBlcnJvckRhdGE/LmVycm9yO1xuICAgICAgICAgICAgaWYgKGVycm9yQ29kZSA9PT0gXCJvcmdfc2NvcGVkX2tleV9yZXF1aXJlc193b3Jrc3BhY2VcIikge1xuICAgICAgICAgICAgICAgIGVycm9yQm9keSA9XG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyBBUEkga2V5IGlzIG9yZy1zY29wZWQgYW5kIHJlcXVpcmVzIHdvcmtzcGFjZSBzcGVjaWZpY2F0aW9uLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlBsZWFzZSBwcm92aWRlICd3b3Jrc3BhY2VJZCcgcGFyYW1ldGVyLCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm9yIHNldCBMQU5HU01JVEhfV09SS1NQQUNFX0lEIGVudmlyb25tZW50IHZhcmlhYmxlLlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JXaXRoU3RhdHVzID0gbmV3IEVycm9yKGAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGVycm9yV2l0aFN0YXR1cy5zdGF0dXMgPSByZXNwb25zZT8uc3RhdHVzO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JXaXRoU3RhdHVzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvckJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXJyb3JCb2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JCb2R5ID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGBGYWlsZWQgdG8gJHtjb250ZXh0fS4gUmVjZWl2ZWQgc3RhdHVzIFske3Jlc3BvbnNlLnN0YXR1c31dOiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9LiBNZXNzYWdlOiAke2Vycm9yQm9keX1gO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwOSkge1xuICAgICAgICB0aHJvdyBuZXcgTGFuZ1NtaXRoQ29uZmxpY3RFcnJvcihmdWxsTWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihmdWxsTWVzc2FnZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBlcnIuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHRocm93IGVycjtcbn1cbmNvbnN0IEVSUl9DT05GTElDVElOR19FTkRQT0lOVFMgPSBcIkVSUl9DT05GTElDVElOR19FTkRQT0lOVFNcIjtcbmNsYXNzIENvbmZsaWN0aW5nRW5kcG9pbnRzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiWW91IGNhbm5vdCBwcm92aWRlIGJvdGggTEFOR1NNSVRIX0VORFBPSU5UIC8gTEFOR0NIQUlOX0VORFBPSU5UIFwiICtcbiAgICAgICAgICAgIFwiYW5kIExBTkdTTUlUSF9SVU5TX0VORFBPSU5UUy5cIik7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvZGVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IEVSUl9DT05GTElDVElOR19FTkRQT0lOVFNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQ29uZmxpY3RpbmdFbmRwb2ludHNFcnJvclwiOyAvLyBoZWxwZnVsIGluIGxvZ3NcbiAgICB9XG59XG5leHBvcnRzLkNvbmZsaWN0aW5nRW5kcG9pbnRzRXJyb3IgPSBDb25mbGljdGluZ0VuZHBvaW50c0Vycm9yO1xuZnVuY3Rpb24gaXNDb25mbGljdGluZ0VuZHBvaW50c0Vycm9yKGVycikge1xuICAgIHJldHVybiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBlcnIgIT09IG51bGwgJiZcbiAgICAgICAgZXJyLmNvZGUgPT09IEVSUl9DT05GTElDVElOR19FTkRQT0lOVFMpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5jb25zdCBlbnZfanNfMSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9lbnYuY2pzXCIpO1xudmFyIExJTUlUX1JFUExBQ0VfTk9ERSA9IFwiWy4uLl1cIjtcbnZhciBDSVJDVUxBUl9SRVBMQUNFX05PREUgPSB7IHJlc3VsdDogXCJbQ2lyY3VsYXJdXCIgfTtcbnZhciBhcnIgPSBbXTtcbnZhciByZXBsYWNlclN0YWNrID0gW107XG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5mdW5jdGlvbiBkZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZXB0aExpbWl0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgZWRnZXNMaW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGVuY29kZVN0cmluZyhzdHIpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUoc3RyKTtcbn1cbi8vIFNoYXJlZCBmdW5jdGlvbiB0byBoYW5kbGUgd2VsbC1rbm93biB0eXBlc1xuZnVuY3Rpb24gc2VyaWFsaXplV2VsbEtub3duVHlwZXModmFsKSB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB2YWwubWVzc2FnZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG4vLyBEZWZhdWx0IHJlcGxhY2VyIGZ1bmN0aW9uIHRvIGhhbmRsZSB3ZWxsLWtub3duIHR5cGVzXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0UmVwbGFjZXIodXNlclJlcGxhY2VyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgICAgICAvLyBBcHBseSB1c2VyIHJlcGxhY2VyIGZpcnN0IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmICh1c2VyUmVwbGFjZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSB1c2VyUmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbCk7XG4gICAgICAgICAgICAvLyBJZiB1c2VyIHJlcGxhY2VyIHJldHVybmVkIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG91ciBzZXJpYWxpemF0aW9uXG4gICAgICAgICAgICBpZiAodXNlclJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIG91ciB3ZWxsLWtub3duIHR5cGUgaGFuZGxpbmdcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVdlbGxLbm93blR5cGVzKHZhbCk7XG4gICAgfTtcbn1cbi8vIFJlZ3VsYXIgc3RyaW5naWZ5XG5mdW5jdGlvbiBzZXJpYWxpemUob2JqLCBlcnJvckNvbnRleHQsIHJlcGxhY2VyLCBzcGFjZXIsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIGNyZWF0ZURlZmF1bHRSZXBsYWNlcihyZXBsYWNlciksIHNwYWNlcik7XG4gICAgICAgIHJldHVybiBlbmNvZGVTdHJpbmcoc3RyKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIG1vcmUgY29tcGxleCBzdHJpbmdpZnkgaWYgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgICAgIGlmICghZS5tZXNzYWdlPy5pbmNsdWRlcyhcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIikpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW1dBUk5JTkddOiBMYW5nU21pdGggcmVjZWl2ZWQgdW5zZXJpYWxpemFibGUgdmFsdWUuJHtlcnJvckNvbnRleHQgPyBgXFxuQ29udGV4dDogJHtlcnJvckNvbnRleHR9YCA6IFwiXCJ9YCk7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKFwiW1Vuc2VyaWFsaXphYmxlXVwiKTtcbiAgICAgICAgfVxuICAgICAgICAoMCwgZW52X2pzXzEuZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZSkoXCJTVVBQUkVTU19DSVJDVUxBUl9KU09OX1dBUk5JTkdTXCIpICE9PVxuICAgICAgICAgICAgXCJ0cnVlXCIgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW1dBUk5JTkddOiBMYW5nU21pdGggcmVjZWl2ZWQgY2lyY3VsYXIgSlNPTi4gVGhpcyB3aWxsIGRlY3JlYXNlIHRyYWNlciBwZXJmb3JtYW5jZS4gJHtlcnJvckNvbnRleHQgPyBgXFxuQ29udGV4dDogJHtlcnJvckNvbnRleHR9YCA6IFwiXCJ9YCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXJjKG9iaiwgXCJcIiwgMCwgW10sIHVuZGVmaW5lZCwgMCwgb3B0aW9ucyk7XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlR2V0dGVyVmFsdWVzKHJlcGxhY2VyKSwgc3BhY2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZVN0cmluZyhcIlt1bmFibGUgdG8gc2VyaWFsaXplLCBjaXJjdWxhciByZWZlcmVuY2UgaXMgdG9vIGNvbXBsZXggdG8gYW5hbHl6ZV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBhcnIucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJ0WzBdLCBwYXJ0WzFdLCBwYXJ0WzNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRbMF1bcGFydFsxXV0gPSBwYXJ0WzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlU3RyaW5nKHJlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0UmVwbGFjZShyZXBsYWNlLCB2YWwsIGssIHBhcmVudCkge1xuICAgIHZhciBwcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgayk7XG4gICAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5nZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwgaywgeyB2YWx1ZTogcmVwbGFjZSB9KTtcbiAgICAgICAgICAgIGFyci5wdXNoKFtwYXJlbnQsIGssIHZhbCwgcHJvcGVydHlEZXNjcmlwdG9yXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXBsYWNlclN0YWNrLnB1c2goW3ZhbCwgaywgcmVwbGFjZV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwYXJlbnRba10gPSByZXBsYWNlO1xuICAgICAgICBhcnIucHVzaChbcGFyZW50LCBrLCB2YWxdKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWNpcmModmFsLCBrLCBlZGdlSW5kZXgsIHN0YWNrLCBwYXJlbnQsIGRlcHRoLCBvcHRpb25zKSB7XG4gICAgZGVwdGggKz0gMTtcbiAgICB2YXIgaTtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbaV0gPT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHNldFJlcGxhY2UoQ0lSQ1VMQVJfUkVQTEFDRV9OT0RFLCB2YWwsIGssIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXB0aExpbWl0ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICBkZXB0aCA+IG9wdGlvbnMuZGVwdGhMaW1pdCkge1xuICAgICAgICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZWRnZXNMaW1pdCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgZWRnZUluZGV4ICsgMSA+IG9wdGlvbnMuZWRnZXNMaW1pdCkge1xuICAgICAgICAgICAgc2V0UmVwbGFjZShMSU1JVF9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wdXNoKHZhbCk7XG4gICAgICAgIC8vIE9wdGltaXplIGZvciBBcnJheXMuIEJpZyBhcnJheXMgY291bGQga2lsbCB0aGUgcGVyZm9ybWFuY2Ugb3RoZXJ3aXNlIVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGVjaXJjKHZhbFtpXSwgaSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHdlbGwta25vd24gdHlwZXMgYmVmb3JlIE9iamVjdC5rZXlzIGl0ZXJhdGlvblxuICAgICAgICAgICAgdmFsID0gc2VyaWFsaXplV2VsbEtub3duVHlwZXModmFsKTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgZGVjaXJjKHZhbFtrZXldLCBrZXksIGksIHN0YWNrLCB2YWwsIGRlcHRoLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICB9XG59XG4vLyBTdGFibGUtc3RyaW5naWZ5XG5mdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24oYSwgYikge1xuICAgIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhID4gYikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBkZXRlcm1pbmlzdGljU3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIsIHNwYWNlciwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMoKTtcbiAgICB9XG4gICAgdmFyIHRtcCA9IGRldGVybWluaXN0aWNEZWNpcmMob2JqLCBcIlwiLCAwLCBbXSwgdW5kZWZpbmVkLCAwLCBvcHRpb25zKSB8fCBvYmo7XG4gICAgdmFyIHJlcztcbiAgICB0cnkge1xuICAgICAgICBpZiAocmVwbGFjZXJTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlcyA9IEpTT04uc3RyaW5naWZ5KHRtcCwgcmVwbGFjZXIsIHNwYWNlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBKU09OLnN0cmluZ2lmeSh0bXAsIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpLCBzcGFjZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcIlt1bmFibGUgdG8gc2VyaWFsaXplLCBjaXJjdWxhciByZWZlcmVuY2UgaXMgdG9vIGNvbXBsZXggdG8gYW5hbHl6ZV1cIik7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSByZXN0b3JlIHRoZSBvYmplY3QgYXMgaXQgd2FzLlxuICAgICAgICB3aGlsZSAoYXJyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdmFyIHBhcnQgPSBhcnIucG9wKCk7XG4gICAgICAgICAgICBpZiAocGFydC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydFswXSwgcGFydFsxXSwgcGFydFszXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0WzBdW3BhcnRbMV1dID0gcGFydFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWwsIGssIGVkZ2VJbmRleCwgc3RhY2ssIHBhcmVudCwgZGVwdGgsIG9wdGlvbnMpIHtcbiAgICBkZXB0aCArPSAxO1xuICAgIHZhciBpO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzdGFja1tpXSA9PT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgc2V0UmVwbGFjZShDSVJDVUxBUl9SRVBMQUNFX05PREUsIHZhbCwgaywgcGFyZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlcHRoTGltaXQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIGRlcHRoID4gb3B0aW9ucy5kZXB0aExpbWl0KSB7XG4gICAgICAgICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lZGdlc0xpbWl0ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICBlZGdlSW5kZXggKyAxID4gb3B0aW9ucy5lZGdlc0xpbWl0KSB7XG4gICAgICAgICAgICBzZXRSZXBsYWNlKExJTUlUX1JFUExBQ0VfTk9ERSwgdmFsLCBrLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YWNrLnB1c2godmFsKTtcbiAgICAgICAgLy8gT3B0aW1pemUgZm9yIEFycmF5cy4gQmlnIGFycmF5cyBjb3VsZCBraWxsIHRoZSBwZXJmb3JtYW5jZSBvdGhlcndpc2UhXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkZXRlcm1pbmlzdGljRGVjaXJjKHZhbFtpXSwgaSwgaSwgc3RhY2ssIHZhbCwgZGVwdGgsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHdlbGwta25vd24gdHlwZXMgYmVmb3JlIE9iamVjdC5rZXlzIGl0ZXJhdGlvblxuICAgICAgICAgICAgdmFsID0gc2VyaWFsaXplV2VsbEtub3duVHlwZXModmFsKTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBvYmplY3QgaW4gdGhlIHJlcXVpcmVkIHdheVxuICAgICAgICAgICAgdmFyIHRtcCA9IHt9O1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpLnNvcnQoY29tcGFyZUZ1bmN0aW9uKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgZGV0ZXJtaW5pc3RpY0RlY2lyYyh2YWxba2V5XSwga2V5LCBpLCBzdGFjaywgdmFsLCBkZXB0aCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdG1wW2tleV0gPSB2YWxba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goW3BhcmVudCwgaywgdmFsXSk7XG4gICAgICAgICAgICAgICAgcGFyZW50W2tdID0gdG1wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICB9XG59XG4vLyB3cmFwcyByZXBsYWNlciBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWVzIHdlIGNvdWxkbid0IHJlcGxhY2Vcbi8vIGFuZCBtYXJrIHRoZW0gYXMgcmVwbGFjZWQgdmFsdWVcbmZ1bmN0aW9uIHJlcGxhY2VHZXR0ZXJWYWx1ZXMocmVwbGFjZXIpIHtcbiAgICByZXBsYWNlciA9XG4gICAgICAgIHR5cGVvZiByZXBsYWNlciAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyByZXBsYWNlclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaywgdikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsKSB7XG4gICAgICAgIGlmIChyZXBsYWNlclN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwbGFjZXJTdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gcmVwbGFjZXJTdGFja1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocGFydFsxXSA9PT0ga2V5ICYmIHBhcnRbMF0gPT09IHZhbCkge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJ0WzJdO1xuICAgICAgICAgICAgICAgICAgICByZXBsYWNlclN0YWNrLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsKTtcbiAgICB9O1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICB2YXIgYXIgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgICAgICAgICByZXR1cm4gYXI7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvd25LZXlzKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICAgICAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5DbGllbnQgPSBleHBvcnRzLkF1dG9CYXRjaFF1ZXVlID0gZXhwb3J0cy5ERUZBVUxUX01BWF9TSVpFX0JZVEVTID0gZXhwb3J0cy5ERUZBVUxUX1VOQ09NUFJFU1NFRF9CQVRDSF9TSVpFX0xJTUlUX0JZVEVTID0gdm9pZCAwO1xuZXhwb3J0cy5tZXJnZVJ1bnRpbWVFbnZJbnRvUnVuID0gbWVyZ2VSdW50aW1lRW52SW50b1J1bjtcbmNvbnN0IHV1aWQgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInV1aWRcIikpO1xuY29uc3QgdHJhbnNsYXRvcl9qc18xID0gcmVxdWlyZShcIi4vZXhwZXJpbWVudGFsL290ZWwvdHJhbnNsYXRvci5janNcIik7XG5jb25zdCBvdGVsX2pzXzEgPSByZXF1aXJlKFwiLi9zaW5nbGV0b25zL290ZWwuY2pzXCIpO1xuY29uc3QgYXN5bmNfY2FsbGVyX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy9hc3luY19jYWxsZXIuY2pzXCIpO1xuY29uc3QgbWVzc2FnZXNfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL21lc3NhZ2VzLmNqc1wiKTtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4vdXRpbHMvZW52LmNqc1wiKTtcbmNvbnN0IGluZGV4X2pzXzEgPSByZXF1aXJlKFwiLi9pbmRleC5janNcIik7XG5jb25zdCBfdXVpZF9qc18xID0gcmVxdWlyZShcIi4vdXRpbHMvX3V1aWQuY2pzXCIpO1xuY29uc3Qgd2Fybl9qc18xID0gcmVxdWlyZShcIi4vdXRpbHMvd2Fybi5janNcIik7XG5jb25zdCBwcm9tcHRzX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy9wcm9tcHRzLmNqc1wiKTtcbmNvbnN0IGVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy9lcnJvci5janNcIik7XG5jb25zdCBmZXRjaF9qc18xID0gcmVxdWlyZShcIi4vc2luZ2xldG9ucy9mZXRjaC5janNcIik7XG5jb25zdCBpbmRleF9qc18yID0gcmVxdWlyZShcIi4vdXRpbHMvZmFzdC1zYWZlLXN0cmluZ2lmeS9pbmRleC5janNcIik7XG5mdW5jdGlvbiBtZXJnZVJ1bnRpbWVFbnZJbnRvUnVuKHJ1biwgY2FjaGVkRW52VmFycywgb21pdFRyYWNlZFJ1bnRpbWVJbmZvKSB7XG4gICAgaWYgKG9taXRUcmFjZWRSdW50aW1lSW5mbykge1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgIH1cbiAgICBjb25zdCBydW50aW1lRW52ID0gKDAsIGVudl9qc18xLmdldFJ1bnRpbWVFbnZpcm9ubWVudCkoKTtcbiAgICBjb25zdCBlbnZWYXJzID0gY2FjaGVkRW52VmFycyA/PyAoMCwgZW52X2pzXzEuZ2V0TGFuZ1NtaXRoRW52VmFyc01ldGFkYXRhKSgpO1xuICAgIGNvbnN0IGV4dHJhID0gcnVuLmV4dHJhID8/IHt9O1xuICAgIGNvbnN0IG1ldGFkYXRhID0gZXh0cmEubWV0YWRhdGE7XG4gICAgcnVuLmV4dHJhID0ge1xuICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgcnVudGltZToge1xuICAgICAgICAgICAgLi4ucnVudGltZUVudixcbiAgICAgICAgICAgIC4uLmV4dHJhPy5ydW50aW1lLFxuICAgICAgICB9LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgLi4uZW52VmFycyxcbiAgICAgICAgICAgIC4uLihlbnZWYXJzLnJldmlzaW9uX2lkIHx8IChcInJldmlzaW9uX2lkXCIgaW4gcnVuICYmIHJ1bi5yZXZpc2lvbl9pZClcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25faWQ6IChcInJldmlzaW9uX2lkXCIgaW4gcnVuID8gcnVuLnJldmlzaW9uX2lkIDogdW5kZWZpbmVkKSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgZW52VmFycy5yZXZpc2lvbl9pZCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBydW47XG59XG5jb25zdCBnZXRUcmFjaW5nU2FtcGxpbmdSYXRlID0gKGNvbmZpZ1JhdGUpID0+IHtcbiAgICBjb25zdCBzYW1wbGluZ1JhdGVTdHIgPSBjb25maWdSYXRlPy50b1N0cmluZygpID8/XG4gICAgICAgICgwLCBlbnZfanNfMS5nZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlKShcIlRSQUNJTkdfU0FNUExJTkdfUkFURVwiKTtcbiAgICBpZiAoc2FtcGxpbmdSYXRlU3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2FtcGxpbmdSYXRlID0gcGFyc2VGbG9hdChzYW1wbGluZ1JhdGVTdHIpO1xuICAgIGlmIChzYW1wbGluZ1JhdGUgPCAwIHx8IHNhbXBsaW5nUmF0ZSA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMQU5HU01JVEhfVFJBQ0lOR19TQU1QTElOR19SQVRFIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxIGlmIHNldC4gR290OiAke3NhbXBsaW5nUmF0ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhbXBsaW5nUmF0ZTtcbn07XG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xuY29uc3QgaXNMb2NhbGhvc3QgPSAodXJsKSA9PiB7XG4gICAgY29uc3Qgc3RyaXBwZWRVcmwgPSB1cmwucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJcIikucmVwbGFjZShcImh0dHBzOi8vXCIsIFwiXCIpO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gc3RyaXBwZWRVcmwuc3BsaXQoXCIvXCIpWzBdLnNwbGl0KFwiOlwiKVswXTtcbiAgICByZXR1cm4gKGhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiIHx8IGhvc3RuYW1lID09PSBcIjEyNy4wLjAuMVwiIHx8IGhvc3RuYW1lID09PSBcIjo6MVwiKTtcbn07XG5hc3luYyBmdW5jdGlvbiB0b0FycmF5KGl0ZXJhYmxlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gdHJpbVF1b3RlcyhzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5yZXBsYWNlKC9eXCIoLiopXCIkLywgXCIkMVwiKVxuICAgICAgICAucmVwbGFjZSgvXicoLiopJyQvLCBcIiQxXCIpO1xufVxuY29uc3QgaGFuZGxlNDI5ID0gYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gcGFyc2VJbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoXCJyZXRyeS1hZnRlclwiKSA/PyBcIjEwXCIsIDEwKSAqIDEwMDA7XG4gICAgICAgIGlmIChyZXRyeUFmdGVyID4gMCkge1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlBZnRlcikpO1xuICAgICAgICAgICAgLy8gUmV0dXJuIGRpcmVjdGx5IGFmdGVyIGNhbGxpbmcgdGhpcyBjaGVja1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRmFsbCBiYWNrIHRvIGV4aXN0aW5nIHN0YXR1cyBjaGVja3NcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZnVuY3Rpb24gX2Zvcm1hdEZlZWRiYWNrU2NvcmUoc2NvcmUpIHtcbiAgICBpZiAodHlwZW9mIHNjb3JlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIC8vIFRydW5jYXRlIGF0IDQgZGVjaW1hbCBwbGFjZXNcbiAgICAgICAgcmV0dXJuIE51bWJlcihzY29yZS50b0ZpeGVkKDQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3JlO1xufVxuZXhwb3J0cy5ERUZBVUxUX1VOQ09NUFJFU1NFRF9CQVRDSF9TSVpFX0xJTUlUX0JZVEVTID0gMjQgKiAxMDI0ICogMTAyNDtcbi8qKiBEZWZhdWx0IG1heGltdW0gbWVtb3J5ICgxR0IpIGZvciBxdWV1ZSBzaXplIGxpbWl0cy4gKi9cbmV4cG9ydHMuREVGQVVMVF9NQVhfU0laRV9CWVRFUyA9IDEwMjQgKiAxMDI0ICogMTAyNDsgLy8gMUdCXG5jb25zdCBTRVJWRVJfSU5GT19SRVFVRVNUX1RJTUVPVVRfTVMgPSAxMDAwMDtcbi8qKiBNYXhpbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIGJhdGNoIGluIGEgc2luZ2xlIHJlcXVlc3QuICovXG5jb25zdCBERUZBVUxUX0JBVENIX1NJWkVfTElNSVQgPSAxMDA7XG5jb25zdCBERUZBVUxUX0FQSV9VUkwgPSBcImh0dHBzOi8vYXBpLnNtaXRoLmxhbmdjaGFpbi5jb21cIjtcbmNsYXNzIEF1dG9CYXRjaFF1ZXVlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplQnl0ZXMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaXRlbXNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzaXplQnl0ZXNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1heFNpemVCeXRlc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1heFNpemVCeXRlcyA9IG1heFNpemVCeXRlcyA/PyBleHBvcnRzLkRFRkFVTFRfTUFYX1NJWkVfQllURVM7XG4gICAgfVxuICAgIHBlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zWzBdO1xuICAgIH1cbiAgICBwdXNoKGl0ZW0pIHtcbiAgICAgICAgbGV0IGl0ZW1Qcm9taXNlUmVzb2x2ZTtcbiAgICAgICAgY29uc3QgaXRlbVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgLy8gU2V0dGluZyBpdGVtUHJvbWlzZVJlc29sdmUgaXMgc3luY2hyb25vdXMgd2l0aCBwcm9taXNlIGNyZWF0aW9uOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJvbWlzZS9Qcm9taXNlXG4gICAgICAgICAgICBpdGVtUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9ICgwLCBpbmRleF9qc18yLnNlcmlhbGl6ZSkoaXRlbS5pdGVtLCBgU2VyaWFsaXppbmcgcnVuIHdpdGggaWQ6ICR7aXRlbS5pdGVtLmlkfWApLmxlbmd0aDtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYWRkaW5nIHRoaXMgaXRlbSB3b3VsZCBleGNlZWQgdGhlIHNpemUgbGltaXRcbiAgICAgICAgLy8gQWxsb3cgdGhlIHJ1biBpZiB0aGUgcXVldWUgaXMgZW1wdHkgKHRvIHN1cHBvcnQgbGFyZ2Ugc2luZ2xlIHRyYWNlcylcbiAgICAgICAgaWYgKHRoaXMuc2l6ZUJ5dGVzICsgc2l6ZSA+IHRoaXMubWF4U2l6ZUJ5dGVzICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBBdXRvQmF0Y2hRdWV1ZSBzaXplIGxpbWl0ICgke3RoaXMubWF4U2l6ZUJ5dGVzfSBieXRlcykgZXhjZWVkZWQuIERyb3BwaW5nIHJ1biB3aXRoIGlkOiAke2l0ZW0uaXRlbS5pZH0uIGAgK1xuICAgICAgICAgICAgICAgIGBDdXJyZW50IHF1ZXVlIHNpemU6ICR7dGhpcy5zaXplQnl0ZXN9IGJ5dGVzLCBhdHRlbXB0ZWQgYWRkaXRpb246ICR7c2l6ZX0gYnl0ZXMuYCk7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIGJsb2NraW5nIGNhbGxlclxuICAgICAgICAgICAgaXRlbVByb21pc2VSZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24sXG4gICAgICAgICAgICBwYXlsb2FkOiBpdGVtLml0ZW0sXG4gICAgICAgICAgICBvdGVsQ29udGV4dDogaXRlbS5vdGVsQ29udGV4dCxcbiAgICAgICAgICAgIGFwaUtleTogaXRlbS5hcGlLZXksXG4gICAgICAgICAgICBhcGlVcmw6IGl0ZW0uYXBpVXJsLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIGl0ZW1Qcm9taXNlUmVzb2x2ZTogaXRlbVByb21pc2VSZXNvbHZlLFxuICAgICAgICAgICAgaXRlbVByb21pc2UsXG4gICAgICAgICAgICBzaXplLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zaXplQnl0ZXMgKz0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIGl0ZW1Qcm9taXNlO1xuICAgIH1cbiAgICBwb3AoeyB1cFRvU2l6ZUJ5dGVzLCB1cFRvU2l6ZSwgfSkge1xuICAgICAgICBpZiAodXBUb1NpemVCeXRlcyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bWJlciBvZiBieXRlcyB0byBwb3Agb2ZmIG1heSBub3QgYmUgbGVzcyB0aGFuIDEuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcHBlZCA9IFtdO1xuICAgICAgICBsZXQgcG9wcGVkU2l6ZUJ5dGVzID0gMDtcbiAgICAgICAgLy8gUG9wIGl0ZW1zIHVudGlsIHdlIHJlYWNoIG9yIGV4Y2VlZCB0aGUgc2l6ZSBsaW1pdFxuICAgICAgICB3aGlsZSAocG9wcGVkU2l6ZUJ5dGVzICsgKHRoaXMucGVlaygpPy5zaXplID8/IDApIDwgdXBUb1NpemVCeXRlcyAmJlxuICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBwb3BwZWQubGVuZ3RoIDwgdXBUb1NpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHBvcHBlZC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHBvcHBlZFNpemVCeXRlcyArPSBpdGVtLnNpemU7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplQnl0ZXMgLT0gaXRlbS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGl0ZW0gb24gdGhlIHF1ZXVlIHdlIHdlcmUgdW5hYmxlIHRvIHBvcCxcbiAgICAgICAgLy8ganVzdCByZXR1cm4gaXQgYXMgYSBzaW5nbGUgYmF0Y2guXG4gICAgICAgIGlmIChwb3BwZWQubGVuZ3RoID09PSAwICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuc2hpZnQoKTtcbiAgICAgICAgICAgIHBvcHBlZC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcG9wcGVkU2l6ZUJ5dGVzICs9IGl0ZW0uc2l6ZTtcbiAgICAgICAgICAgIHRoaXMuc2l6ZUJ5dGVzIC09IGl0ZW0uc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcG9wcGVkLm1hcCgoaXQpID0+ICh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBpdC5hY3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbTogaXQucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBvdGVsQ29udGV4dDogaXQub3RlbENvbnRleHQsXG4gICAgICAgICAgICAgICAgYXBpS2V5OiBpdC5hcGlLZXksXG4gICAgICAgICAgICAgICAgYXBpVXJsOiBpdC5hcGlVcmwsXG4gICAgICAgICAgICAgICAgc2l6ZTogaXQuc2l6ZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICgpID0+IHBvcHBlZC5mb3JFYWNoKChpdCkgPT4gaXQuaXRlbVByb21pc2VSZXNvbHZlKCkpLFxuICAgICAgICBdO1xuICAgIH1cbn1cbmV4cG9ydHMuQXV0b0JhdGNoUXVldWUgPSBBdXRvQmF0Y2hRdWV1ZTtcbmNsYXNzIENsaWVudCB7XG4gICAgZ2V0IF9mZXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsZW1lbnRhdGlvbiB8fCAoMCwgZmV0Y2hfanNfMS5fZ2V0RmV0Y2hJbXBsZW1lbnRhdGlvbikodGhpcy5kZWJ1Zyk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImFwaUtleVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJhcGlVcmxcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwid2ViVXJsXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIndvcmtzcGFjZUlkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNhbGxlclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJiYXRjaEluZ2VzdENhbGxlclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0aW1lb3V0X21zXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl90ZW5hbnRJZFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGlkZUlucHV0c1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJoaWRlT3V0cHV0c1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvbWl0VHJhY2VkUnVudGltZUluZm9cIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidHJhY2luZ1NhbXBsZVJhdGVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZmlsdGVyZWRQb3N0VXVpZHNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBTZXQoKVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYXV0b0JhdGNoVHJhY2luZ1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYXV0b0JhdGNoUXVldWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYXV0b0JhdGNoVGltZW91dFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJhdXRvQmF0Y2hBZ2dyZWdhdGlvbkRlbGF5TXNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IDI1MFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYmF0Y2hTaXplQnl0ZXNMaW1pdFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJiYXRjaFNpemVMaW1pdFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJmZXRjaE9wdGlvbnNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0dGluZ3NcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYmxvY2tPblJvb3RSdW5GaW5hbGl6YXRpb25cIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICgwLCBlbnZfanNfMS5nZXRFbnZpcm9ubWVudFZhcmlhYmxlKShcIkxBTkdTTUlUSF9UUkFDSU5HX0JBQ0tHUk9VTkRcIikgPT09IFwiZmFsc2VcIlxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidHJhY2VCYXRjaENvbmN1cnJlbmN5XCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiA1XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfc2VydmVySW5mb1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfZ2V0U2VydmVySW5mb1Byb21pc2VcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWFudWFsRmx1c2hNb2RlXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJmZXRjaEltcGxlbWVudGF0aW9uXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNhY2hlZExTRW52VmFyc0Zvck1ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm11bHRpcGFydFN0cmVhbWluZ0Rpc2FibGVkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZGVidWdcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICgwLCBlbnZfanNfMS5nZXRFbnZpcm9ubWVudFZhcmlhYmxlKShcIkxBTkdTTUlUSF9ERUJVR1wiKSA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSBDbGllbnQuZ2V0RGVmYXVsdENsaWVudENvbmZpZygpO1xuICAgICAgICB0aGlzLnRyYWNpbmdTYW1wbGVSYXRlID0gZ2V0VHJhY2luZ1NhbXBsaW5nUmF0ZShjb25maWcudHJhY2luZ1NhbXBsaW5nUmF0ZSk7XG4gICAgICAgIHRoaXMuYXBpVXJsID0gdHJpbVF1b3Rlcyhjb25maWcuYXBpVXJsID8/IGRlZmF1bHRDb25maWcuYXBpVXJsKSA/PyBcIlwiO1xuICAgICAgICBpZiAodGhpcy5hcGlVcmwuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICB0aGlzLmFwaVVybCA9IHRoaXMuYXBpVXJsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwaUtleSA9IHRyaW1RdW90ZXMoY29uZmlnLmFwaUtleSA/PyBkZWZhdWx0Q29uZmlnLmFwaUtleSk7XG4gICAgICAgIHRoaXMud2ViVXJsID0gdHJpbVF1b3Rlcyhjb25maWcud2ViVXJsID8/IGRlZmF1bHRDb25maWcud2ViVXJsKTtcbiAgICAgICAgaWYgKHRoaXMud2ViVXJsPy5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHRoaXMud2ViVXJsID0gdGhpcy53ZWJVcmwuc2xpY2UoMCwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud29ya3NwYWNlSWQgPSB0cmltUXVvdGVzKGNvbmZpZy53b3Jrc3BhY2VJZCA/PyAoMCwgZW52X2pzXzEuZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZSkoXCJXT1JLU1BBQ0VfSURcIikpO1xuICAgICAgICB0aGlzLnRpbWVvdXRfbXMgPSBjb25maWcudGltZW91dF9tcyA/PyA5MF8wMDA7XG4gICAgICAgIHRoaXMuY2FsbGVyID0gbmV3IGFzeW5jX2NhbGxlcl9qc18xLkFzeW5jQ2FsbGVyKHtcbiAgICAgICAgICAgIC4uLihjb25maWcuY2FsbGVyT3B0aW9ucyA/PyB7fSksXG4gICAgICAgICAgICBtYXhSZXRyaWVzOiA0LFxuICAgICAgICAgICAgZGVidWc6IGNvbmZpZy5kZWJ1ZyA/PyB0aGlzLmRlYnVnLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50cmFjZUJhdGNoQ29uY3VycmVuY3kgPVxuICAgICAgICAgICAgY29uZmlnLnRyYWNlQmF0Y2hDb25jdXJyZW5jeSA/PyB0aGlzLnRyYWNlQmF0Y2hDb25jdXJyZW5jeTtcbiAgICAgICAgaWYgKHRoaXMudHJhY2VCYXRjaENvbmN1cnJlbmN5IDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhY2UgYmF0Y2ggY29uY3VycmVuY3kgbXVzdCBiZSBwb3NpdGl2ZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1ZyA9IGNvbmZpZy5kZWJ1ZyA/PyB0aGlzLmRlYnVnO1xuICAgICAgICB0aGlzLmZldGNoSW1wbGVtZW50YXRpb24gPSBjb25maWcuZmV0Y2hJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgLy8gVXNlIG1heEluZ2VzdE1lbW9yeUJ5dGVzIGZvciBib3RoIHF1ZXVlc1xuICAgICAgICBjb25zdCBtYXhNZW1vcnkgPSBjb25maWcubWF4SW5nZXN0TWVtb3J5Qnl0ZXMgPz8gZXhwb3J0cy5ERUZBVUxUX01BWF9TSVpFX0JZVEVTO1xuICAgICAgICB0aGlzLmJhdGNoSW5nZXN0Q2FsbGVyID0gbmV3IGFzeW5jX2NhbGxlcl9qc18xLkFzeW5jQ2FsbGVyKHtcbiAgICAgICAgICAgIG1heFJldHJpZXM6IDQsXG4gICAgICAgICAgICBtYXhDb25jdXJyZW5jeTogdGhpcy50cmFjZUJhdGNoQ29uY3VycmVuY3ksXG4gICAgICAgICAgICBtYXhRdWV1ZVNpemVCeXRlczogbWF4TWVtb3J5LFxuICAgICAgICAgICAgLi4uKGNvbmZpZy5jYWxsZXJPcHRpb25zID8/IHt9KSxcbiAgICAgICAgICAgIG9uRmFpbGVkUmVzcG9uc2VIb29rOiBoYW5kbGU0MjksXG4gICAgICAgICAgICBkZWJ1ZzogY29uZmlnLmRlYnVnID8/IHRoaXMuZGVidWcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhpZGVJbnB1dHMgPVxuICAgICAgICAgICAgY29uZmlnLmhpZGVJbnB1dHMgPz8gY29uZmlnLmFub255bWl6ZXIgPz8gZGVmYXVsdENvbmZpZy5oaWRlSW5wdXRzO1xuICAgICAgICB0aGlzLmhpZGVPdXRwdXRzID1cbiAgICAgICAgICAgIGNvbmZpZy5oaWRlT3V0cHV0cyA/PyBjb25maWcuYW5vbnltaXplciA/PyBkZWZhdWx0Q29uZmlnLmhpZGVPdXRwdXRzO1xuICAgICAgICB0aGlzLm9taXRUcmFjZWRSdW50aW1lSW5mbyA9IGNvbmZpZy5vbWl0VHJhY2VkUnVudGltZUluZm8gPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuYXV0b0JhdGNoVHJhY2luZyA9IGNvbmZpZy5hdXRvQmF0Y2hUcmFjaW5nID8/IHRoaXMuYXV0b0JhdGNoVHJhY2luZztcbiAgICAgICAgdGhpcy5hdXRvQmF0Y2hRdWV1ZSA9IG5ldyBBdXRvQmF0Y2hRdWV1ZShtYXhNZW1vcnkpO1xuICAgICAgICB0aGlzLmJsb2NrT25Sb290UnVuRmluYWxpemF0aW9uID1cbiAgICAgICAgICAgIGNvbmZpZy5ibG9ja09uUm9vdFJ1bkZpbmFsaXphdGlvbiA/PyB0aGlzLmJsb2NrT25Sb290UnVuRmluYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmJhdGNoU2l6ZUJ5dGVzTGltaXQgPSBjb25maWcuYmF0Y2hTaXplQnl0ZXNMaW1pdDtcbiAgICAgICAgdGhpcy5iYXRjaFNpemVMaW1pdCA9IGNvbmZpZy5iYXRjaFNpemVMaW1pdDtcbiAgICAgICAgdGhpcy5mZXRjaE9wdGlvbnMgPSBjb25maWcuZmV0Y2hPcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLm1hbnVhbEZsdXNoTW9kZSA9IGNvbmZpZy5tYW51YWxGbHVzaE1vZGUgPz8gdGhpcy5tYW51YWxGbHVzaE1vZGU7XG4gICAgICAgIGlmICgoMCwgZW52X2pzXzEuZ2V0T3RlbEVuYWJsZWQpKCkpIHtcbiAgICAgICAgICAgIHRoaXMubGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvciA9IG5ldyB0cmFuc2xhdG9yX2pzXzEuTGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvcigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhY2hlIG1ldGFkYXRhIGVudiB2YXJzIG9uY2UgZHVyaW5nIGNvbnN0cnVjdGlvbiB0byBhdm9pZCByZXBlYXRlZGx5IHNjYW5uaW5nIHByb2Nlc3MuZW52XG4gICAgICAgIHRoaXMuY2FjaGVkTFNFbnZWYXJzRm9yTWV0YWRhdGEgPSAoMCwgZW52X2pzXzEuZ2V0TGFuZ1NtaXRoRW52VmFyc01ldGFkYXRhKSgpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RGVmYXVsdENsaWVudENvbmZpZygpIHtcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gKDAsIGVudl9qc18xLmdldExhbmdTbWl0aEVudmlyb25tZW50VmFyaWFibGUpKFwiQVBJX0tFWVwiKTtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gKDAsIGVudl9qc18xLmdldExhbmdTbWl0aEVudmlyb25tZW50VmFyaWFibGUpKFwiRU5EUE9JTlRcIikgPz8gREVGQVVMVF9BUElfVVJMO1xuICAgICAgICBjb25zdCBoaWRlSW5wdXRzID0gKDAsIGVudl9qc18xLmdldExhbmdTbWl0aEVudmlyb25tZW50VmFyaWFibGUpKFwiSElERV9JTlBVVFNcIikgPT09IFwidHJ1ZVwiO1xuICAgICAgICBjb25zdCBoaWRlT3V0cHV0cyA9ICgwLCBlbnZfanNfMS5nZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlKShcIkhJREVfT1VUUFVUU1wiKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcGlVcmw6IGFwaVVybCxcbiAgICAgICAgICAgIGFwaUtleTogYXBpS2V5LFxuICAgICAgICAgICAgd2ViVXJsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoaWRlSW5wdXRzOiBoaWRlSW5wdXRzLFxuICAgICAgICAgICAgaGlkZU91dHB1dHM6IGhpZGVPdXRwdXRzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRIb3N0VXJsKCkge1xuICAgICAgICBpZiAodGhpcy53ZWJVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlYlVybDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0xvY2FsaG9zdCh0aGlzLmFwaVVybCkpIHtcbiAgICAgICAgICAgIHRoaXMud2ViVXJsID0gXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlYlVybDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFwaVVybC5lbmRzV2l0aChcIi9hcGkvdjFcIikpIHtcbiAgICAgICAgICAgIHRoaXMud2ViVXJsID0gdGhpcy5hcGlVcmwucmVwbGFjZShcIi9hcGkvdjFcIiwgXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53ZWJVcmw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hcGlVcmwuaW5jbHVkZXMoXCIvYXBpXCIpICYmXG4gICAgICAgICAgICAhdGhpcy5hcGlVcmwuc3BsaXQoXCIuXCIsIDEpWzBdLmVuZHNXaXRoKFwiYXBpXCIpKSB7XG4gICAgICAgICAgICB0aGlzLndlYlVybCA9IHRoaXMuYXBpVXJsLnJlcGxhY2UoXCIvYXBpXCIsIFwiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViVXJsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYXBpVXJsLnNwbGl0KFwiLlwiLCAxKVswXS5pbmNsdWRlcyhcImRldlwiKSkge1xuICAgICAgICAgICAgdGhpcy53ZWJVcmwgPSBcImh0dHBzOi8vZGV2LnNtaXRoLmxhbmdjaGFpbi5jb21cIjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndlYlVybDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFwaVVybC5zcGxpdChcIi5cIiwgMSlbMF0uaW5jbHVkZXMoXCJldVwiKSkge1xuICAgICAgICAgICAgdGhpcy53ZWJVcmwgPSBcImh0dHBzOi8vZXUuc21pdGgubGFuZ2NoYWluLmNvbVwiO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViVXJsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYXBpVXJsLnNwbGl0KFwiLlwiLCAxKVswXS5pbmNsdWRlcyhcImJldGFcIikpIHtcbiAgICAgICAgICAgIHRoaXMud2ViVXJsID0gXCJodHRwczovL2JldGEuc21pdGgubGFuZ2NoYWluLmNvbVwiO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViVXJsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53ZWJVcmwgPSBcImh0dHBzOi8vc21pdGgubGFuZ2NoYWluLmNvbVwiO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViVXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBoZWFkZXJzKCkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGBsYW5nc21pdGgtanMvJHtpbmRleF9qc18xLl9fdmVyc2lvbl9ffWAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFwaUtleSkge1xuICAgICAgICAgICAgaGVhZGVyc1tcIngtYXBpLWtleVwiXSA9IGAke3RoaXMuYXBpS2V5fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud29ya3NwYWNlSWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJ4LXRlbmFudC1pZFwiXSA9IHRoaXMud29ya3NwYWNlSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuICAgIF9nZXRQbGF0Zm9ybUVuZHBvaW50UGF0aChwYXRoKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFwaVVybCBhbHJlYWR5IGVuZHMgd2l0aCAvdjEgb3IgL3YxLyB0byBhdm9pZCBkb3VibGUgL3YxL3YxLyBwYXRoc1xuICAgICAgICBjb25zdCBuZWVkc1YxUHJlZml4ID0gdGhpcy5hcGlVcmwuc2xpY2UoLTMpICE9PSBcIi92MVwiICYmIHRoaXMuYXBpVXJsLnNsaWNlKC00KSAhPT0gXCIvdjEvXCI7XG4gICAgICAgIHJldHVybiBuZWVkc1YxUHJlZml4ID8gYC92MS9wbGF0Zm9ybS8ke3BhdGh9YCA6IGAvcGxhdGZvcm0vJHtwYXRofWA7XG4gICAgfVxuICAgIGFzeW5jIHByb2Nlc3NJbnB1dHMoaW5wdXRzKSB7XG4gICAgICAgIGlmICh0aGlzLmhpZGVJbnB1dHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGVJbnB1dHMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGlkZUlucHV0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRlSW5wdXRzKGlucHV0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0cztcbiAgICB9XG4gICAgYXN5bmMgcHJvY2Vzc091dHB1dHMob3V0cHV0cykge1xuICAgICAgICBpZiAodGhpcy5oaWRlT3V0cHV0cyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGVPdXRwdXRzID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhpZGVPdXRwdXRzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZGVPdXRwdXRzKG91dHB1dHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRzO1xuICAgIH1cbiAgICBhc3luYyBwcmVwYXJlUnVuQ3JlYXRlT3JVcGRhdGVJbnB1dHMocnVuKSB7XG4gICAgICAgIGNvbnN0IHJ1blBhcmFtcyA9IHsgLi4ucnVuIH07XG4gICAgICAgIGlmIChydW5QYXJhbXMuaW5wdXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJ1blBhcmFtcy5pbnB1dHMgPSBhd2FpdCB0aGlzLnByb2Nlc3NJbnB1dHMocnVuUGFyYW1zLmlucHV0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1blBhcmFtcy5vdXRwdXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJ1blBhcmFtcy5vdXRwdXRzID0gYXdhaXQgdGhpcy5wcm9jZXNzT3V0cHV0cyhydW5QYXJhbXMub3V0cHV0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1blBhcmFtcztcbiAgICB9XG4gICAgYXN5bmMgX2dldFJlc3BvbnNlKHBhdGgsIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtc1N0cmluZyA9IHF1ZXJ5UGFyYW1zPy50b1N0cmluZygpID8/IFwiXCI7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBpVXJsfSR7cGF0aH0/JHtwYXJhbXNTdHJpbmd9YDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKHVybCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIGBmZXRjaCAke3BhdGh9YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBhc3luYyBfZ2V0KHBhdGgsIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZ2V0UmVzcG9uc2UocGF0aCwgcXVlcnlQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICBhc3luYyAqX2dldFBhZ2luYXRlZChwYXRoLCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKSwgdHJhbnNmb3JtKSB7XG4gICAgICAgIGxldCBvZmZzZXQgPSBOdW1iZXIocXVlcnlQYXJhbXMuZ2V0KFwib2Zmc2V0XCIpKSB8fCAwO1xuICAgICAgICBjb25zdCBsaW1pdCA9IE51bWJlcihxdWVyeVBhcmFtcy5nZXQoXCJsaW1pdFwiKSkgfHwgMTAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMuc2V0KFwib2Zmc2V0XCIsIFN0cmluZyhvZmZzZXQpKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLnNldChcImxpbWl0XCIsIFN0cmluZyhsaW1pdCkpO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcGlVcmx9JHtwYXRofT8ke3F1ZXJ5UGFyYW1zfWA7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKHVybCwge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIGBmZXRjaCAke3BhdGh9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybShhd2FpdCByZXNwb25zZS5qc29uKCkpXG4gICAgICAgICAgICAgICAgOiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBpdGVtcztcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCBsaW1pdCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyAqX2dldEN1cnNvclBhZ2luYXRlZExpc3QocGF0aCwgYm9keSA9IG51bGwsIHJlcXVlc3RNZXRob2QgPSBcIlBPU1RcIiwgZGF0YUtleSA9IFwicnVuc1wiKSB7XG4gICAgICAgIGNvbnN0IGJvZHlQYXJhbXMgPSBib2R5ID8geyAuLi5ib2R5IH0gOiB7fTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5UGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9JHtwYXRofWAsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0TWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIGBmZXRjaCAke3BhdGh9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZUJvZHkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VCb2R5W2RhdGFLZXldKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCByZXNwb25zZUJvZHlbZGF0YUtleV07XG4gICAgICAgICAgICBjb25zdCBjdXJzb3JzID0gcmVzcG9uc2VCb2R5LmN1cnNvcnM7XG4gICAgICAgICAgICBpZiAoIWN1cnNvcnMpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY3Vyc29ycy5uZXh0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5UGFyYW1zLmN1cnNvciA9IGN1cnNvcnMubmV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBbGxvd3MgbW9ja2luZyBmb3IgdGVzdHNcbiAgICBfc2hvdWxkU2FtcGxlKCkge1xuICAgICAgICBpZiAodGhpcy50cmFjaW5nU2FtcGxlUmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSA8IHRoaXMudHJhY2luZ1NhbXBsZVJhdGU7XG4gICAgfVxuICAgIF9maWx0ZXJGb3JTYW1wbGluZyhydW5zLCBwYXRjaCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYWNpbmdTYW1wbGVSYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qgc2FtcGxlZCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBydW4gb2YgcnVucykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJlZFBvc3RVdWlkcy5oYXMocnVuLnRyYWNlX2lkKSkge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkLnB1c2gocnVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocnVuLmlkID09PSBydW4udHJhY2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFBvc3RVdWlkcy5kZWxldGUocnVuLnRyYWNlX2lkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZvciBuZXcgcnVucywgc2FtcGxlIGF0IHRyYWNlIGxldmVsIHRvIG1haW50YWluIGNvbnNpc3RlbmN5XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVkID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1biBvZiBydW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHJ1bi50cmFjZV9pZCA/PyBydW4uaWQ7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtYWRlIGEgZGVjaXNpb24gYWJvdXQgdGhpcyB0cmFjZSwgZm9sbG93IGl0XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRQb3N0VXVpZHMuaGFzKHRyYWNlSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3IgbmV3IHRyYWNlcywgYXBwbHkgc2FtcGxpbmdcbiAgICAgICAgICAgICAgICBpZiAocnVuLmlkID09PSB0cmFjZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRTYW1wbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlZC5wdXNoKHJ1bik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkUG9zdFV1aWRzLmFkZCh0cmFjZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hpbGQgcnVucyBmb2xsb3cgdGhlaXIgdHJhY2UncyBzYW1wbGluZyBkZWNpc2lvblxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVkLnB1c2gocnVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfZ2V0QmF0Y2hTaXplTGltaXRCeXRlcygpIHtcbiAgICAgICAgY29uc3Qgc2VydmVySW5mbyA9IGF3YWl0IHRoaXMuX2Vuc3VyZVNlcnZlckluZm8oKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLmJhdGNoU2l6ZUJ5dGVzTGltaXQgPz9cbiAgICAgICAgICAgIHNlcnZlckluZm8uYmF0Y2hfaW5nZXN0X2NvbmZpZz8uc2l6ZV9saW1pdF9ieXRlcyA/P1xuICAgICAgICAgICAgZXhwb3J0cy5ERUZBVUxUX1VOQ09NUFJFU1NFRF9CQVRDSF9TSVpFX0xJTUlUX0JZVEVTKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIGJhdGNoIGluIGEgc2luZ2xlIHJlcXVlc3QuXG4gICAgICovXG4gICAgYXN5bmMgX2dldEJhdGNoU2l6ZUxpbWl0KCkge1xuICAgICAgICBjb25zdCBzZXJ2ZXJJbmZvID0gYXdhaXQgdGhpcy5fZW5zdXJlU2VydmVySW5mbygpO1xuICAgICAgICByZXR1cm4gKHRoaXMuYmF0Y2hTaXplTGltaXQgPz9cbiAgICAgICAgICAgIHNlcnZlckluZm8uYmF0Y2hfaW5nZXN0X2NvbmZpZz8uc2l6ZV9saW1pdCA/P1xuICAgICAgICAgICAgREVGQVVMVF9CQVRDSF9TSVpFX0xJTUlUKTtcbiAgICB9XG4gICAgYXN5bmMgX2dldERhdGFzZXRFeGFtcGxlc011bHRpUGFydFN1cHBvcnQoKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlckluZm8gPSBhd2FpdCB0aGlzLl9lbnN1cmVTZXJ2ZXJJbmZvKCk7XG4gICAgICAgIHJldHVybiAoc2VydmVySW5mby5pbnN0YW5jZV9mbGFncz8uZGF0YXNldF9leGFtcGxlc19tdWx0aXBhcnRfZW5hYmxlZCA/PyBmYWxzZSk7XG4gICAgfVxuICAgIGRyYWluQXV0b0JhdGNoUXVldWUoeyBiYXRjaFNpemVMaW1pdEJ5dGVzLCBiYXRjaFNpemVMaW1pdCwgfSkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5hdXRvQmF0Y2hRdWV1ZS5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBbYmF0Y2gsIGRvbmVdID0gdGhpcy5hdXRvQmF0Y2hRdWV1ZS5wb3Aoe1xuICAgICAgICAgICAgICAgIHVwVG9TaXplQnl0ZXM6IGJhdGNoU2l6ZUxpbWl0Qnl0ZXMsXG4gICAgICAgICAgICAgICAgdXBUb1NpemU6IGJhdGNoU2l6ZUxpbWl0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWJhdGNoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJhdGNoZXNCeURlc3RpbmF0aW9uID0gYmF0Y2gucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGlVcmwgPSBpdGVtLmFwaVVybCA/PyB0aGlzLmFwaVVybDtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGlLZXkgPSBpdGVtLmFwaUtleSA/PyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RlZmF1bHQgPSBpdGVtLmFwaUtleSA9PT0gdGhpcy5hcGlLZXkgJiYgaXRlbS5hcGlVcmwgPT09IHRoaXMuYXBpVXJsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhdGNoS2V5ID0gaXNEZWZhdWx0ID8gXCJkZWZhdWx0XCIgOiBgJHthcGlVcmx9fCR7YXBpS2V5fWA7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbYmF0Y2hLZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY1tiYXRjaEtleV0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjW2JhdGNoS2V5XS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICBjb25zdCBiYXRjaFByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtiYXRjaEtleSwgYmF0Y2hdIG9mIE9iamVjdC5lbnRyaWVzKGJhdGNoZXNCeURlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhdGNoUHJvbWlzZSA9IHRoaXMuX3Byb2Nlc3NCYXRjaChiYXRjaCwge1xuICAgICAgICAgICAgICAgICAgICBhcGlVcmw6IGJhdGNoS2V5ID09PSBcImRlZmF1bHRcIiA/IHVuZGVmaW5lZCA6IGJhdGNoS2V5LnNwbGl0KFwifFwiKVswXSxcbiAgICAgICAgICAgICAgICAgICAgYXBpS2V5OiBiYXRjaEtleSA9PT0gXCJkZWZhdWx0XCIgPyB1bmRlZmluZWQgOiBiYXRjaEtleS5zcGxpdChcInxcIilbMV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYmF0Y2hQcm9taXNlcy5wdXNoKGJhdGNoUHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXYWl0IGZvciBhbGwgYmF0Y2hlcyB0byBjb21wbGV0ZSwgdGhlbiBjYWxsIHRoZSBvdmVyYWxsIGRvbmUgY2FsbGJhY2tcbiAgICAgICAgICAgIGNvbnN0IGFsbEJhdGNoZXNQcm9taXNlID0gUHJvbWlzZS5hbGwoYmF0Y2hQcm9taXNlcykuZmluYWxseShkb25lKTtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goYWxsQmF0Y2hlc1Byb21pc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuICAgIGFzeW5jIF9wcm9jZXNzQmF0Y2goYmF0Y2gsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFiYXRjaC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgYmF0Y2ggc2l6ZSBmb3IgcXVldWUgdHJhY2tpbmdcbiAgICAgICAgY29uc3QgYmF0Y2hTaXplQnl0ZXMgPSBiYXRjaC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0uc2l6ZSA/PyAwKSwgMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYW5nU21pdGhUb09URUxUcmFuc2xhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZW5kQmF0Y2hUb09URUxUcmFuc2xhdG9yKGJhdGNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZ2VzdFBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuQ3JlYXRlczogYmF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uYWN0aW9uID09PSBcImNyZWF0ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5pdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgcnVuVXBkYXRlczogYmF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uYWN0aW9uID09PSBcInVwZGF0ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5pdGVtKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZlckluZm8gPSBhd2FpdCB0aGlzLl9lbnN1cmVTZXJ2ZXJJbmZvKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZlckluZm8/LmJhdGNoX2luZ2VzdF9jb25maWc/LnVzZV9tdWx0aXBhcnRfZW5kcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlR3ppcCA9IHNlcnZlckluZm8/Lmluc3RhbmNlX2ZsYWdzPy5nemlwX2JvZHlfZW5hYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tdWx0aXBhcnRJbmdlc3RSdW5zKGluZ2VzdFBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUd6aXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplQnl0ZXM6IGJhdGNoU2l6ZUJ5dGVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYmF0Y2hJbmdlc3RSdW5zKGluZ2VzdFBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVCeXRlczogYmF0Y2hTaXplQnl0ZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGV4cG9ydGluZyBiYXRjaDpcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3NlbmRCYXRjaFRvT1RFTFRyYW5zbGF0b3IoYmF0Y2gpIHtcbiAgICAgICAgaWYgKHRoaXMubGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBvdGVsQ29udGV4dE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBiYXRjaCkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLml0ZW0uaWQgJiYgaXRlbS5vdGVsQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBvdGVsQ29udGV4dE1hcC5zZXQoaXRlbS5pdGVtLmlkLCBpdGVtLm90ZWxDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uYWN0aW9uID09PSBcImNyZWF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZV9pZDogaXRlbS5pdGVtLnRyYWNlX2lkID8/IGl0ZW0uaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW46IGl0ZW0uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwicGF0Y2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlX2lkOiBpdGVtLml0ZW0udHJhY2VfaWQgPz8gaXRlbS5pdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bjogaXRlbS5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhbmdTbWl0aFRvT1RFTFRyYW5zbGF0b3IuZXhwb3J0QmF0Y2gob3BlcmF0aW9ucywgb3RlbENvbnRleHRNYXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHByb2Nlc3NSdW5PcGVyYXRpb24oaXRlbSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5hdXRvQmF0Y2hUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5hdXRvQmF0Y2hUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpdGVtLml0ZW0gPSBtZXJnZVJ1bnRpbWVFbnZJbnRvUnVuKGl0ZW0uaXRlbSwgdGhpcy5jYWNoZWRMU0VudlZhcnNGb3JNZXRhZGF0YSwgdGhpcy5vbWl0VHJhY2VkUnVudGltZUluZm8pO1xuICAgICAgICBjb25zdCBpdGVtUHJvbWlzZSA9IHRoaXMuYXV0b0JhdGNoUXVldWUucHVzaChpdGVtKTtcbiAgICAgICAgaWYgKHRoaXMubWFudWFsRmx1c2hNb2RlKSB7XG4gICAgICAgICAgICAvLyBSZWx5IG9uIG1hbnVhbCBmbHVzaGluZyBpbiBzZXJ2ZXJsZXNzIGVudmlyb25tZW50c1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1Qcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpemVMaW1pdEJ5dGVzID0gYXdhaXQgdGhpcy5fZ2V0QmF0Y2hTaXplTGltaXRCeXRlcygpO1xuICAgICAgICBjb25zdCBzaXplTGltaXQgPSBhd2FpdCB0aGlzLl9nZXRCYXRjaFNpemVMaW1pdCgpO1xuICAgICAgICBpZiAodGhpcy5hdXRvQmF0Y2hRdWV1ZS5zaXplQnl0ZXMgPiBzaXplTGltaXRCeXRlcyB8fFxuICAgICAgICAgICAgdGhpcy5hdXRvQmF0Y2hRdWV1ZS5pdGVtcy5sZW5ndGggPiBzaXplTGltaXQpIHtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5kcmFpbkF1dG9CYXRjaFF1ZXVlKHtcbiAgICAgICAgICAgICAgICBiYXRjaFNpemVMaW1pdEJ5dGVzOiBzaXplTGltaXRCeXRlcyxcbiAgICAgICAgICAgICAgICBiYXRjaFNpemVMaW1pdDogc2l6ZUxpbWl0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXV0b0JhdGNoUXVldWUuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvQmF0Y2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvQmF0Y2hUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5kcmFpbkF1dG9CYXRjaFF1ZXVlKHtcbiAgICAgICAgICAgICAgICAgICAgYmF0Y2hTaXplTGltaXRCeXRlczogc2l6ZUxpbWl0Qnl0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGJhdGNoU2l6ZUxpbWl0OiBzaXplTGltaXQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzLmF1dG9CYXRjaEFnZ3JlZ2F0aW9uRGVsYXlNcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1Qcm9taXNlO1xuICAgIH1cbiAgICBhc3luYyBfZ2V0U2VydmVySW5mbygpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9pbmZvYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoU0VSVkVSX0lORk9fUkVRVUVTVF9USU1FT1VUX01TKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJnZXQgc2VydmVyIGluZm9cIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXFxuPT09IExhbmdTbWl0aCBTZXJ2ZXIgQ29uZmlndXJhdGlvbiA9PT1cXG5cIiArXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMikgK1xuICAgICAgICAgICAgICAgIFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBhc3luYyBfZW5zdXJlU2VydmVySW5mbygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2dldFNlcnZlckluZm9Qcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldFNlcnZlckluZm9Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VydmVySW5mbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2ZXJJbmZvID0gYXdhaXQgdGhpcy5fZ2V0U2VydmVySW5mbygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFtMQU5HU01JVEhdOiBGYWlsZWQgdG8gZmV0Y2ggaW5mbyBvbiBzdXBwb3J0ZWQgb3BlcmF0aW9ucy4gRmFsbGluZyBiYWNrIHRvIGJhdGNoIG9wZXJhdGlvbnMgYW5kIGRlZmF1bHQgbGltaXRzLiBJbmZvOiAke2Uuc3RhdHVzID8/IFwiVW5zcGVjaWZpZWQgc3RhdHVzIGNvZGVcIn0gJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlckluZm8gPz8ge307XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTZXJ2ZXJJbmZvUHJvbWlzZS50aGVuKChzZXJ2ZXJJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc2VydmVySW5mbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0U2VydmVySW5mb1Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VydmVySW5mbztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIF9nZXRTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5fZ2V0KFwiL3NldHRpbmdzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldHRpbmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGN1cnJlbnQgcXVldWVkIHRyYWNlcy5cbiAgICAgKi9cbiAgICBhc3luYyBmbHVzaCgpIHtcbiAgICAgICAgY29uc3Qgc2l6ZUxpbWl0Qnl0ZXMgPSBhd2FpdCB0aGlzLl9nZXRCYXRjaFNpemVMaW1pdEJ5dGVzKCk7XG4gICAgICAgIGNvbnN0IHNpemVMaW1pdCA9IGF3YWl0IHRoaXMuX2dldEJhdGNoU2l6ZUxpbWl0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZHJhaW5BdXRvQmF0Y2hRdWV1ZSh7XG4gICAgICAgICAgICBiYXRjaFNpemVMaW1pdEJ5dGVzOiBzaXplTGltaXRCeXRlcyxcbiAgICAgICAgICAgIGJhdGNoU2l6ZUxpbWl0OiBzaXplTGltaXQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfY2xvbmVDdXJyZW50T1RFTENvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IG90ZWxfdHJhY2UgPSAoMCwgb3RlbF9qc18xLmdldE9URUxUcmFjZSkoKTtcbiAgICAgICAgY29uc3Qgb3RlbF9jb250ZXh0ID0gKDAsIG90ZWxfanNfMS5nZXRPVEVMQ29udGV4dCkoKTtcbiAgICAgICAgaWYgKHRoaXMubGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhbiA9IG90ZWxfdHJhY2UuZ2V0QWN0aXZlU3BhbigpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG90ZWxfdHJhY2Uuc2V0U3BhbihvdGVsX2NvbnRleHQuYWN0aXZlKCksIGN1cnJlbnRTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVSdW4ocnVuLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5fZmlsdGVyRm9yU2FtcGxpbmcoW3J1bl0pLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbl9uYW1lID0gcnVuLnByb2plY3RfbmFtZTtcbiAgICAgICAgZGVsZXRlIHJ1bi5wcm9qZWN0X25hbWU7XG4gICAgICAgIGNvbnN0IHJ1bkNyZWF0ZSA9IGF3YWl0IHRoaXMucHJlcGFyZVJ1bkNyZWF0ZU9yVXBkYXRlSW5wdXRzKHtcbiAgICAgICAgICAgIHNlc3Npb25fbmFtZSxcbiAgICAgICAgICAgIC4uLnJ1bixcbiAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHJ1bi5zdGFydF90aW1lID8/IERhdGUubm93KCksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5hdXRvQmF0Y2hUcmFjaW5nICYmXG4gICAgICAgICAgICBydW5DcmVhdGUudHJhY2VfaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgcnVuQ3JlYXRlLmRvdHRlZF9vcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBvdGVsQ29udGV4dCA9IHRoaXMuX2Nsb25lQ3VycmVudE9URUxDb250ZXh0KCk7XG4gICAgICAgICAgICB2b2lkIHRoaXMucHJvY2Vzc1J1bk9wZXJhdGlvbih7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICAgIGl0ZW06IHJ1bkNyZWF0ZSxcbiAgICAgICAgICAgICAgICBvdGVsQ29udGV4dCxcbiAgICAgICAgICAgICAgICBhcGlLZXk6IG9wdGlvbnM/LmFwaUtleSxcbiAgICAgICAgICAgICAgICBhcGlVcmw6IG9wdGlvbnM/LmFwaVVybCxcbiAgICAgICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlZFJ1bkNyZWF0ZVBhcmFtID0gbWVyZ2VSdW50aW1lRW52SW50b1J1bihydW5DcmVhdGUsIHRoaXMuY2FjaGVkTFNFbnZWYXJzRm9yTWV0YWRhdGEsIHRoaXMub21pdFRyYWNlZFJ1bnRpbWVJbmZvKTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmFwaUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wieC1hcGkta2V5XCJdID0gb3B0aW9ucy5hcGlLZXk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnM/LndvcmtzcGFjZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJ4LXRlbmFudC1pZFwiXSA9IG9wdGlvbnMud29ya3NwYWNlSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keSA9ICgwLCBpbmRleF9qc18yLnNlcmlhbGl6ZSkobWVyZ2VkUnVuQ3JlYXRlUGFyYW0sIGBDcmVhdGluZyBydW4gd2l0aCBpZDogJHttZXJnZWRSdW5DcmVhdGVQYXJhbS5pZH1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHtvcHRpb25zPy5hcGlVcmwgPz8gdGhpcy5hcGlVcmx9L3J1bnNgLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiY3JlYXRlIHJ1blwiLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCYXRjaCBpbmdlc3QvdXBzZXJ0IG11bHRpcGxlIHJ1bnMgaW4gdGhlIExhbmdzbWl0aCBzeXN0ZW0uXG4gICAgICogQHBhcmFtIHJ1bnNcbiAgICAgKi9cbiAgICBhc3luYyBiYXRjaEluZ2VzdFJ1bnMoeyBydW5DcmVhdGVzLCBydW5VcGRhdGVzLCB9LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChydW5DcmVhdGVzID09PSB1bmRlZmluZWQgJiYgcnVuVXBkYXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByZXBhcmVkQ3JlYXRlUGFyYW1zID0gYXdhaXQgUHJvbWlzZS5hbGwocnVuQ3JlYXRlcz8ubWFwKChjcmVhdGUpID0+IHRoaXMucHJlcGFyZVJ1bkNyZWF0ZU9yVXBkYXRlSW5wdXRzKGNyZWF0ZSkpID8/IFtdKTtcbiAgICAgICAgbGV0IHByZXBhcmVkVXBkYXRlUGFyYW1zID0gYXdhaXQgUHJvbWlzZS5hbGwocnVuVXBkYXRlcz8ubWFwKCh1cGRhdGUpID0+IHRoaXMucHJlcGFyZVJ1bkNyZWF0ZU9yVXBkYXRlSW5wdXRzKHVwZGF0ZSkpID8/IFtdKTtcbiAgICAgICAgaWYgKHByZXBhcmVkQ3JlYXRlUGFyYW1zLmxlbmd0aCA+IDAgJiYgcHJlcGFyZWRVcGRhdGVQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlQnlJZCA9IHByZXBhcmVkQ3JlYXRlUGFyYW1zLnJlZHVjZSgocGFyYW1zLCBydW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJ1bi5pZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXNbcnVuLmlkXSA9IHJ1bjtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgY29uc3Qgc3RhbmRhbG9uZVVwZGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdXBkYXRlUGFyYW0gb2YgcHJlcGFyZWRVcGRhdGVQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlUGFyYW0uaWQgIT09IHVuZGVmaW5lZCAmJiBjcmVhdGVCeUlkW3VwZGF0ZVBhcmFtLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVCeUlkW3VwZGF0ZVBhcmFtLmlkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNyZWF0ZUJ5SWRbdXBkYXRlUGFyYW0uaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlUGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFuZGFsb25lVXBkYXRlcy5wdXNoKHVwZGF0ZVBhcmFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVwYXJlZENyZWF0ZVBhcmFtcyA9IE9iamVjdC52YWx1ZXMoY3JlYXRlQnlJZCk7XG4gICAgICAgICAgICBwcmVwYXJlZFVwZGF0ZVBhcmFtcyA9IHN0YW5kYWxvbmVVcGRhdGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhd0JhdGNoID0ge1xuICAgICAgICAgICAgcG9zdDogcHJlcGFyZWRDcmVhdGVQYXJhbXMsXG4gICAgICAgICAgICBwYXRjaDogcHJlcGFyZWRVcGRhdGVQYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghcmF3QmF0Y2gucG9zdC5sZW5ndGggJiYgIXJhd0JhdGNoLnBhdGNoLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhdGNoQ2h1bmtzID0ge1xuICAgICAgICAgICAgcG9zdDogW10sXG4gICAgICAgICAgICBwYXRjaDogW10sXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBbXCJwb3N0XCIsIFwicGF0Y2hcIl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGs7XG4gICAgICAgICAgICBjb25zdCBiYXRjaEl0ZW1zID0gcmF3QmF0Y2hba2V5XS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBsZXQgYmF0Y2hJdGVtID0gYmF0Y2hJdGVtcy5wb3AoKTtcbiAgICAgICAgICAgIHdoaWxlIChiYXRjaEl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFR5cGUgaXMgd3JvbmcgYnV0IHRoaXMgaXMgYSBkZXByZWNhdGVkIGNvZGUgcGF0aCBhbnl3YXlcbiAgICAgICAgICAgICAgICBiYXRjaENodW5rc1trZXldLnB1c2goYmF0Y2hJdGVtKTtcbiAgICAgICAgICAgICAgICBiYXRjaEl0ZW0gPSBiYXRjaEl0ZW1zLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiYXRjaENodW5rcy5wb3N0Lmxlbmd0aCA+IDAgfHwgYmF0Y2hDaHVua3MucGF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcnVuSWRzID0gYmF0Y2hDaHVua3MucG9zdFxuICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChiYXRjaENodW5rcy5wYXRjaC5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Bvc3RCYXRjaEluZ2VzdFJ1bnMoKDAsIGluZGV4X2pzXzIuc2VyaWFsaXplKShiYXRjaENodW5rcywgYEluZ2VzdGluZyBydW5zIHdpdGggaWRzOiAke3J1bklkc31gKSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgX3Bvc3RCYXRjaEluZ2VzdFJ1bnMoYm9keSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucz8uYXBpS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJ4LWFwaS1rZXlcIl0gPSBvcHRpb25zLmFwaUtleTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmJhdGNoSW5nZXN0Q2FsbGVyLmNhbGxXaXRoT3B0aW9ucyh7IHNpemVCeXRlczogb3B0aW9ucz8uc2l6ZUJ5dGVzIH0sIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke29wdGlvbnM/LmFwaVVybCA/PyB0aGlzLmFwaVVybH0vcnVucy9iYXRjaGAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJiYXRjaCBjcmVhdGUgcnVuXCIsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJhdGNoIGluZ2VzdC91cHNlcnQgbXVsdGlwbGUgcnVucyBpbiB0aGUgTGFuZ3NtaXRoIHN5c3RlbS5cbiAgICAgKiBAcGFyYW0gcnVuc1xuICAgICAqL1xuICAgIGFzeW5jIG11bHRpcGFydEluZ2VzdFJ1bnMoeyBydW5DcmVhdGVzLCBydW5VcGRhdGVzLCB9LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChydW5DcmVhdGVzID09PSB1bmRlZmluZWQgJiYgcnVuVXBkYXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJhbnNmb3JtIGFuZCBjb252ZXJ0IHRvIGRpY3RzXG4gICAgICAgIGNvbnN0IGFsbEF0dGFjaG1lbnRzID0ge307XG4gICAgICAgIGxldCBwcmVwYXJlZENyZWF0ZVBhcmFtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNyZWF0ZSBvZiBydW5DcmVhdGVzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZENyZWF0ZSA9IGF3YWl0IHRoaXMucHJlcGFyZVJ1bkNyZWF0ZU9yVXBkYXRlSW5wdXRzKGNyZWF0ZSk7XG4gICAgICAgICAgICBpZiAocHJlcGFyZWRDcmVhdGUuaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHByZXBhcmVkQ3JlYXRlLmF0dGFjaG1lbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhbGxBdHRhY2htZW50c1twcmVwYXJlZENyZWF0ZS5pZF0gPSBwcmVwYXJlZENyZWF0ZS5hdHRhY2htZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBwcmVwYXJlZENyZWF0ZS5hdHRhY2htZW50cztcbiAgICAgICAgICAgIHByZXBhcmVkQ3JlYXRlUGFyYW1zLnB1c2gocHJlcGFyZWRDcmVhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwcmVwYXJlZFVwZGF0ZVBhcmFtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHVwZGF0ZSBvZiBydW5VcGRhdGVzID8/IFtdKSB7XG4gICAgICAgICAgICBwcmVwYXJlZFVwZGF0ZVBhcmFtcy5wdXNoKGF3YWl0IHRoaXMucHJlcGFyZVJ1bkNyZWF0ZU9yVXBkYXRlSW5wdXRzKHVwZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlcXVpcmUgdHJhY2VfaWQgYW5kIGRvdHRlZF9vcmRlclxuICAgICAgICBjb25zdCBpbnZhbGlkUnVuQ3JlYXRlID0gcHJlcGFyZWRDcmVhdGVQYXJhbXMuZmluZCgocnVuQ3JlYXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJ1bkNyZWF0ZS50cmFjZV9pZCA9PT0gdW5kZWZpbmVkIHx8IHJ1bkNyZWF0ZS5kb3R0ZWRfb3JkZXIgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW52YWxpZFJ1bkNyZWF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGFydCBpbmdlc3QgcmVxdWlyZXMgXCJ0cmFjZV9pZFwiIGFuZCBcImRvdHRlZF9vcmRlclwiIHRvIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgcnVuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52YWxpZFJ1blVwZGF0ZSA9IHByZXBhcmVkVXBkYXRlUGFyYW1zLmZpbmQoKHJ1blVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChydW5VcGRhdGUudHJhY2VfaWQgPT09IHVuZGVmaW5lZCB8fCBydW5VcGRhdGUuZG90dGVkX29yZGVyID09PSB1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGludmFsaWRSdW5VcGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBhcnQgaW5nZXN0IHJlcXVpcmVzIFwidHJhY2VfaWRcIiBhbmQgXCJkb3R0ZWRfb3JkZXJcIiB0byBiZSBzZXQgd2hlbiB1cGRhdGluZyBhIHJ1bmApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbWJpbmUgcG9zdCBhbmQgcGF0Y2ggZGljdHMgd2hlcmUgcG9zc2libGVcbiAgICAgICAgaWYgKHByZXBhcmVkQ3JlYXRlUGFyYW1zLmxlbmd0aCA+IDAgJiYgcHJlcGFyZWRVcGRhdGVQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlQnlJZCA9IHByZXBhcmVkQ3JlYXRlUGFyYW1zLnJlZHVjZSgocGFyYW1zLCBydW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJ1bi5pZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJhbXNbcnVuLmlkXSA9IHJ1bjtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgY29uc3Qgc3RhbmRhbG9uZVVwZGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdXBkYXRlUGFyYW0gb2YgcHJlcGFyZWRVcGRhdGVQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlUGFyYW0uaWQgIT09IHVuZGVmaW5lZCAmJiBjcmVhdGVCeUlkW3VwZGF0ZVBhcmFtLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVCeUlkW3VwZGF0ZVBhcmFtLmlkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNyZWF0ZUJ5SWRbdXBkYXRlUGFyYW0uaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlUGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFuZGFsb25lVXBkYXRlcy5wdXNoKHVwZGF0ZVBhcmFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVwYXJlZENyZWF0ZVBhcmFtcyA9IE9iamVjdC52YWx1ZXMoY3JlYXRlQnlJZCk7XG4gICAgICAgICAgICBwcmVwYXJlZFVwZGF0ZVBhcmFtcyA9IHN0YW5kYWxvbmVVcGRhdGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVwYXJlZENyZWF0ZVBhcmFtcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHByZXBhcmVkVXBkYXRlUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNlbmQgdGhlIHJ1bnMgaW4gbXVsdGlwYXJ0IHJlcXVlc3RzXG4gICAgICAgIGNvbnN0IGFjY3VtdWxhdGVkQ29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBhY2N1bXVsYXRlZFBhcnRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW21ldGhvZCwgcGF5bG9hZHNdIG9mIFtcbiAgICAgICAgICAgIFtcInBvc3RcIiwgcHJlcGFyZWRDcmVhdGVQYXJhbXNdLFxuICAgICAgICAgICAgW1wicGF0Y2hcIiwgcHJlcGFyZWRVcGRhdGVQYXJhbXNdLFxuICAgICAgICBdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yaWdpbmFsUGF5bG9hZCBvZiBwYXlsb2Fkcykge1xuICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZmllbGRzIHRvIGJlIHNlbnQgYXMgc2VwYXJhdGUgcGFydHNcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlucHV0cywgb3V0cHV0cywgZXZlbnRzLCBleHRyYSwgZXJyb3IsIHNlcmlhbGl6ZWQsIGF0dGFjaG1lbnRzLCAuLi5wYXlsb2FkIH0gPSBvcmlnaW5hbFBheWxvYWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0geyBpbnB1dHMsIG91dHB1dHMsIGV2ZW50cywgZXh0cmEsIGVycm9yLCBzZXJpYWxpemVkIH07XG4gICAgICAgICAgICAgICAgLy8gZW5jb2RlIHRoZSBtYWluIHJ1biBwYXlsb2FkXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZWRQYXlsb2FkID0gKDAsIGluZGV4X2pzXzIuc2VyaWFsaXplKShwYXlsb2FkLCBgU2VyaWFsaXppbmcgZm9yIG11bHRpcGFydCBpbmdlc3Rpb24gb2YgcnVuIHdpdGggaWQ6ICR7cGF5bG9hZC5pZH1gKTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHttZXRob2R9LiR7cGF5bG9hZC5pZH1gLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBuZXcgQmxvYihbc3RyaW5naWZpZWRQYXlsb2FkXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYGFwcGxpY2F0aW9uL2pzb247IGxlbmd0aD0ke3N0cmluZ2lmaWVkUGF5bG9hZC5sZW5ndGh9YCwgLy8gZW5jb2Rpbmc9Z3ppcFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBlbmNvZGUgdGhlIGZpZWxkcyB3ZSBjb2xsZWN0ZWRcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZFZhbHVlID0gKDAsIGluZGV4X2pzXzIuc2VyaWFsaXplKSh2YWx1ZSwgYFNlcmlhbGl6aW5nICR7a2V5fSBmb3IgbXVsdGlwYXJ0IGluZ2VzdGlvbiBvZiBydW4gd2l0aCBpZDogJHtwYXlsb2FkLmlkfWApO1xuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7bWV0aG9kfS4ke3BheWxvYWQuaWR9LiR7a2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBuZXcgQmxvYihbc3RyaW5naWZpZWRWYWx1ZV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBgYXBwbGljYXRpb24vanNvbjsgbGVuZ3RoPSR7c3RyaW5naWZpZWRWYWx1ZS5sZW5ndGh9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZW5jb2RlIHRoZSBhdHRhY2htZW50c1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBhbGxBdHRhY2htZW50c1twYXlsb2FkLmlkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsQXR0YWNobWVudHNbcGF5bG9hZC5pZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhdHRhY2htZW50XSBvZiBPYmplY3QuZW50cmllcyhhdHRhY2htZW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRUeXBlLCBjb250ZW50XSA9IGF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGF0dGFjaG1lbnQubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhdHRhY2htZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIGF0dGFjaG1lbnQgbmFtZSBkb2Vzbid0IGNvbnRhaW4gYSAnLidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBTa2lwcGluZyBhdHRhY2htZW50ICcke25hbWV9JyBmb3IgcnVuICR7cGF5bG9hZC5pZH06IEludmFsaWQgYXR0YWNobWVudCBuYW1lLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBdHRhY2htZW50IG5hbWVzIG11c3Qgbm90IGNvbnRhaW4gcGVyaW9kcyAoJy4nKS4gUGxlYXNlIHJlbmFtZSB0aGUgYXR0YWNobWVudCBhbmQgdHJ5IGFnYWluLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRQYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYGF0dGFjaG1lbnQuJHtwYXlsb2FkLmlkfS4ke25hbWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogbmV3IEJsb2IoW2NvbnRlbnRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBgJHtjb250ZW50VHlwZX07IGxlbmd0aD0ke2NvbnRlbnQuYnl0ZUxlbmd0aH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGNvbnRleHRcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZENvbnRleHQucHVzaChgdHJhY2U9JHtwYXlsb2FkLnRyYWNlX2lkfSxpZD0ke3BheWxvYWQuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fc2VuZE11bHRpcGFydFJlcXVlc3QoYWNjdW11bGF0ZWRQYXJ0cywgYWNjdW11bGF0ZWRDb250ZXh0LmpvaW4oXCI7IFwiKSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIF9jcmVhdGVOb2RlRmV0Y2hCb2R5KHBhcnRzLCBib3VuZGFyeSkge1xuICAgICAgICAvLyBDcmVhdGUgbXVsdGlwYXJ0IGZvcm0gZGF0YSBtYW51YWxseSB1c2luZyBCbG9ic1xuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgICAgICAvLyBBZGQgZmllbGQgYm91bmRhcnlcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKG5ldyBCbG9iKFtgLS0ke2JvdW5kYXJ5fVxcclxcbmBdKSk7XG4gICAgICAgICAgICBjaHVua3MucHVzaChuZXcgQmxvYihbXG4gICAgICAgICAgICAgICAgYENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiR7cGFydC5uYW1lfVwiXFxyXFxuYCxcbiAgICAgICAgICAgICAgICBgQ29udGVudC1UeXBlOiAke3BhcnQucGF5bG9hZC50eXBlfVxcclxcblxcclxcbmAsXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICBjaHVua3MucHVzaChwYXJ0LnBheWxvYWQpO1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gobmV3IEJsb2IoW1wiXFxyXFxuXCJdKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIGZpbmFsIGJvdW5kYXJ5XG4gICAgICAgIGNodW5rcy5wdXNoKG5ldyBCbG9iKFtgLS0ke2JvdW5kYXJ5fS0tXFxyXFxuYF0pKTtcbiAgICAgICAgLy8gQ29tYmluZSBhbGwgY2h1bmtzIGludG8gYSBzaW5nbGUgQmxvYlxuICAgICAgICBjb25zdCBib2R5ID0gbmV3IEJsb2IoY2h1bmtzKTtcbiAgICAgICAgLy8gQ29udmVydCBCbG9iIHRvIEFycmF5QnVmZmVyIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICByZXR1cm4gYXJyYXlCdWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIF9jcmVhdGVNdWx0aXBhcnRTdHJlYW0ocGFydHMsIGJvdW5kYXJ5KSB7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgLy8gQ3JlYXRlIGEgUmVhZGFibGVTdHJlYW0gZm9yIHN0cmVhbWluZyB0aGUgbXVsdGlwYXJ0IGRhdGFcbiAgICAgICAgLy8gT25seSBkbyBzcGVjaWFsIGhhbmRsaW5nIGlmIHdlJ3JlIHVzaW5nIG5vZGUtZmV0Y2hcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgIGFzeW5jIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gd3JpdGUgYSBjaHVuayB0byB0aGUgc3RyZWFtXG4gICAgICAgICAgICAgICAgY29uc3Qgd3JpdGVDaHVuayA9IGFzeW5jIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoZW5jb2Rlci5lbmNvZGUoY2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIFdyaXRlIGVhY2ggcGFydCB0byB0aGUgc3RyZWFtXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIGJvdW5kYXJ5IGFuZCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlQ2h1bmsoYC0tJHtib3VuZGFyeX1cXHJcXG5gKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVDaHVuayhgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiJHtwYXJ0Lm5hbWV9XCJcXHJcXG5gKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVDaHVuayhgQ29udGVudC1UeXBlOiAke3BhcnQucGF5bG9hZC50eXBlfVxcclxcblxcclxcbmApO1xuICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgcGF5bG9hZFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkU3RyZWFtID0gcGFydC5wYXlsb2FkLnN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBwYXlsb2FkU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlQ2h1bmsoXCJcXHJcXG5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdyaXRlIGZpbmFsIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVDaHVuayhgLS0ke2JvdW5kYXJ5fS0tXFxyXFxuYCk7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfVxuICAgIGFzeW5jIF9zZW5kTXVsdGlwYXJ0UmVxdWVzdChwYXJ0cywgY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgbXVsdGlwYXJ0IGZvcm0gZGF0YSBib3VuZGFyeVxuICAgICAgICBjb25zdCBib3VuZGFyeSA9IFwiLS0tLUxhbmdTbWl0aEZvcm1Cb3VuZGFyeVwiICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG4gICAgICAgIGNvbnN0IGlzTm9kZUZldGNoID0gKDAsIGZldGNoX2pzXzEuX2dsb2JhbEZldGNoSW1wbGVtZW50YXRpb25Jc05vZGVGZXRjaCkoKTtcbiAgICAgICAgY29uc3QgYnVpbGRCdWZmZXJlZCA9ICgpID0+IHRoaXMuX2NyZWF0ZU5vZGVGZXRjaEJvZHkocGFydHMsIGJvdW5kYXJ5KTtcbiAgICAgICAgY29uc3QgYnVpbGRTdHJlYW0gPSAoKSA9PiB0aGlzLl9jcmVhdGVNdWx0aXBhcnRTdHJlYW0ocGFydHMsIGJvdW5kYXJ5KTtcbiAgICAgICAgY29uc3Qgc2VuZFdpdGhSZXRyeSA9IGFzeW5jIChib2R5RmFjdG9yeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hJbmdlc3RDYWxsZXIuY2FsbFdpdGhPcHRpb25zKHsgc2l6ZUJ5dGVzOiBvcHRpb25zPy5zaXplQnl0ZXMgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7Ym91bmRhcnl9YCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5hcGlLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW1wieC1hcGkta2V5XCJdID0gb3B0aW9ucy5hcGlLZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy51c2VHemlwICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBib2R5ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgIFwicGlwZVRocm91Z2hcIiBpbiBib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQm9keSA9IGJvZHkucGlwZVRocm91Z2gobmV3IENvbXByZXNzaW9uU3RyZWFtKFwiZ3ppcFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbXCJDb250ZW50LUVuY29kaW5nXCJdID0gXCJnemlwXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7b3B0aW9ucz8uYXBpVXJsID8/IHRoaXMuYXBpVXJsfS9ydW5zL211bHRpcGFydGAsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogdHJhbnNmb3JtZWRCb2R5LFxuICAgICAgICAgICAgICAgICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlc3BvbnNlLCBgRmFpbGVkIHRvIHNlbmQgbXVsdGlwYXJ0IHJlcXVlc3RgLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXM7XG4gICAgICAgICAgICBsZXQgc3RyZWFtZWRBdHRlbXB0ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBhdHRlbXB0IHN0cmVhbSBvbmx5IGlmIG5vdCBkaXNhYmxlZCBhbmQgbm90IHVzaW5nIG5vZGUtZmV0Y2ggb3IgQnVuXG4gICAgICAgICAgICBpZiAoIWlzTm9kZUZldGNoICYmXG4gICAgICAgICAgICAgICAgIXRoaXMubXVsdGlwYXJ0U3RyZWFtaW5nRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAoMCwgZW52X2pzXzEuZ2V0RW52KSgpICE9PSBcImJ1blwiKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtZWRBdHRlbXB0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXMgPSBhd2FpdCBzZW5kV2l0aFJldHJ5KGJ1aWxkU3RyZWFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcyA9IGF3YWl0IHNlbmRXaXRoUmV0cnkoYnVpbGRCdWZmZXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBzdHJlYW0gZmFpbHMsIGZhbGxiYWNrIHRvIGJ1ZmZlcmVkIGJvZHlcbiAgICAgICAgICAgIGlmICgoIXRoaXMubXVsdGlwYXJ0U3RyZWFtaW5nRGlzYWJsZWQgfHwgc3RyZWFtZWRBdHRlbXB0KSAmJlxuICAgICAgICAgICAgICAgIHJlcy5zdGF0dXMgPT09IDQyMiAmJlxuICAgICAgICAgICAgICAgIChvcHRpb25zPy5hcGlVcmwgPz8gdGhpcy5hcGlVcmwpICE9PSBERUZBVUxUX0FQSV9VUkwpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFN0cmVhbWluZyBtdWx0aXBhcnQgdXBsb2FkIHRvICR7b3B0aW9ucz8uYXBpVXJsID8/IHRoaXMuYXBpVXJsfS9ydW5zL211bHRpcGFydCBmYWlsZWQuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgVGhpcyB1c3VhbGx5IG1lYW5zIHRoZSBob3N0IGRvZXMgbm90IHN1cHBvcnQgY2h1bmtlZCB1cGxvYWRzLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYFJldHJ5aW5nIHdpdGggYSBidWZmZXJlZCB1cGxvYWQgZm9yIG9wZXJhdGlvbiBcIiR7Y29udGV4dH1cIi5gKTtcbiAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIHN0cmVhbWluZyBmb3IgZnV0dXJlIHJlcXVlc3RzXG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aXBhcnRTdHJlYW1pbmdEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gcmV0cnkgd2l0aCBmdWxseS1idWZmZXJlZCBib2R5XG4gICAgICAgICAgICAgICAgcmVzID0gYXdhaXQgc2VuZFdpdGhSZXRyeShidWlsZEJ1ZmZlcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtlLm1lc3NhZ2UudHJpbSgpfVxcblxcbkNvbnRleHQ6ICR7Y29udGV4dH1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyB1cGRhdGVSdW4ocnVuSWQsIHJ1biwgb3B0aW9ucykge1xuICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShydW5JZCk7XG4gICAgICAgIGlmIChydW4uaW5wdXRzKSB7XG4gICAgICAgICAgICBydW4uaW5wdXRzID0gYXdhaXQgdGhpcy5wcm9jZXNzSW5wdXRzKHJ1bi5pbnB1dHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW4ub3V0cHV0cykge1xuICAgICAgICAgICAgcnVuLm91dHB1dHMgPSBhd2FpdCB0aGlzLnByb2Nlc3NPdXRwdXRzKHJ1bi5vdXRwdXRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBVbnRhbmdsZSB0eXBlc1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi5ydW4sIGlkOiBydW5JZCB9O1xuICAgICAgICBpZiAoIXRoaXMuX2ZpbHRlckZvclNhbXBsaW5nKFtkYXRhXSwgdHJ1ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXV0b0JhdGNoVHJhY2luZyAmJlxuICAgICAgICAgICAgZGF0YS50cmFjZV9pZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBkYXRhLmRvdHRlZF9vcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBvdGVsQ29udGV4dCA9IHRoaXMuX2Nsb25lQ3VycmVudE9URUxDb250ZXh0KCk7XG4gICAgICAgICAgICBpZiAocnVuLmVuZF90aW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBkYXRhLnBhcmVudF9ydW5faWQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tPblJvb3RSdW5GaW5hbGl6YXRpb24gJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5tYW51YWxGbHVzaE1vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGJhdGNoZXMgYXMgc29vbiBhcyBhIHJvb3QgdHJhY2UgZW5kcyBhbmQgd2FpdCB0byBlbnN1cmUgdHJhY2UgZmluaXNoZXNcbiAgICAgICAgICAgICAgICAvLyBpbiBzZXJ2ZXJsZXNzIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NSdW5PcGVyYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwidXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG90ZWxDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk6IG9wdGlvbnM/LmFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsOiBvcHRpb25zPy5hcGlVcmwsXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLnByb2Nlc3NSdW5PcGVyYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFwidXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG90ZWxDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk6IG9wdGlvbnM/LmFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsOiBvcHRpb25zPy5hcGlVcmwsXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucz8uYXBpS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJ4LWFwaS1rZXlcIl0gPSBvcHRpb25zLmFwaUtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucz8ud29ya3NwYWNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVyc1tcIngtdGVuYW50LWlkXCJdID0gb3B0aW9ucy53b3Jrc3BhY2VJZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib2R5ID0gKDAsIGluZGV4X2pzXzIuc2VyaWFsaXplKShydW4sIGBTZXJpYWxpemluZyBwYXlsb2FkIHRvIHVwZGF0ZSBydW4gd2l0aCBpZDogJHtydW5JZH1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHtvcHRpb25zPy5hcGlVcmwgPz8gdGhpcy5hcGlVcmx9L3J1bnMvJHtydW5JZH1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBBVENIXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInVwZGF0ZSBydW5cIiwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZFJ1bihydW5JZCwgeyBsb2FkQ2hpbGRSdW5zIH0gPSB7IGxvYWRDaGlsZFJ1bnM6IGZhbHNlIH0pIHtcbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocnVuSWQpO1xuICAgICAgICBsZXQgcnVuID0gYXdhaXQgdGhpcy5fZ2V0KGAvcnVucy8ke3J1bklkfWApO1xuICAgICAgICBpZiAobG9hZENoaWxkUnVucykge1xuICAgICAgICAgICAgcnVuID0gYXdhaXQgdGhpcy5fbG9hZENoaWxkUnVucyhydW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIGFzeW5jIGdldFJ1blVybCh7IHJ1bklkLCBydW4sIHByb2plY3RPcHRzLCB9KSB7XG4gICAgICAgIGlmIChydW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHNlc3Npb25JZDtcbiAgICAgICAgICAgIGlmIChydW4uc2Vzc2lvbl9pZCkge1xuICAgICAgICAgICAgICAgIHNlc3Npb25JZCA9IHJ1bi5zZXNzaW9uX2lkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvamVjdE9wdHM/LnByb2plY3ROYW1lKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkID0gKGF3YWl0IHRoaXMucmVhZFByb2plY3QoeyBwcm9qZWN0TmFtZTogcHJvamVjdE9wdHM/LnByb2plY3ROYW1lIH0pKS5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2plY3RPcHRzPy5wcm9qZWN0SWQpIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQgPSBwcm9qZWN0T3B0cz8ucHJvamVjdElkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IHRoaXMucmVhZFByb2plY3Qoe1xuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0TmFtZTogKDAsIGVudl9qc18xLmdldExhbmdTbWl0aEVudmlyb25tZW50VmFyaWFibGUpKFwiUFJPSkVDVFwiKSB8fCBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQgPSBwcm9qZWN0LmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGVuYW50SWQgPSBhd2FpdCB0aGlzLl9nZXRUZW5hbnRJZCgpO1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0SG9zdFVybCgpfS9vLyR7dGVuYW50SWR9L3Byb2plY3RzL3AvJHtzZXNzaW9uSWR9L3IvJHtydW4uaWR9P3BvbGw9dHJ1ZWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnVuSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcnVuXyA9IGF3YWl0IHRoaXMucmVhZFJ1bihydW5JZCk7XG4gICAgICAgICAgICBpZiAoIXJ1bl8uYXBwX3BhdGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1biAke3J1bklkfSBoYXMgbm8gYXBwX3BhdGhgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcbiAgICAgICAgICAgIHJldHVybiBgJHtiYXNlVXJsfSR7cnVuXy5hcHBfcGF0aH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBydW5JZCBvciBydW5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgX2xvYWRDaGlsZFJ1bnMocnVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkUnVucyA9IGF3YWl0IHRvQXJyYXkodGhpcy5saXN0UnVucyh7XG4gICAgICAgICAgICBpc1Jvb3Q6IGZhbHNlLFxuICAgICAgICAgICAgcHJvamVjdElkOiBydW4uc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIHRyYWNlSWQ6IHJ1bi50cmFjZV9pZCxcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCB0cmVlbWFwID0ge307XG4gICAgICAgIGNvbnN0IHJ1bnMgPSB7fTtcbiAgICAgICAgLy8gVE9ETzogbWFrZSBkb3R0ZWQgb3JkZXIgcmVxdWlyZWQgd2hlbiB0aGUgbWlncmF0aW9uIGZpbmlzaGVzXG4gICAgICAgIGNoaWxkUnVucy5zb3J0KChhLCBiKSA9PiAoYT8uZG90dGVkX29yZGVyID8/IFwiXCIpLmxvY2FsZUNvbXBhcmUoYj8uZG90dGVkX29yZGVyID8/IFwiXCIpKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJ1biBvZiBjaGlsZFJ1bnMpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZFJ1bi5wYXJlbnRfcnVuX2lkID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgY2hpbGRSdW4ucGFyZW50X3J1bl9pZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGlsZCBydW4gJHtjaGlsZFJ1bi5pZH0gaGFzIG5vIHBhcmVudGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoaWxkUnVuLmRvdHRlZF9vcmRlcj8uc3RhcnRzV2l0aChydW4uZG90dGVkX29yZGVyID8/IFwiXCIpICYmXG4gICAgICAgICAgICAgICAgY2hpbGRSdW4uaWQgIT09IHJ1bi5pZCkge1xuICAgICAgICAgICAgICAgIGlmICghKGNoaWxkUnVuLnBhcmVudF9ydW5faWQgaW4gdHJlZW1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJlZW1hcFtjaGlsZFJ1bi5wYXJlbnRfcnVuX2lkXSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmVlbWFwW2NoaWxkUnVuLnBhcmVudF9ydW5faWRdLnB1c2goY2hpbGRSdW4pO1xuICAgICAgICAgICAgICAgIHJ1bnNbY2hpbGRSdW4uaWRdID0gY2hpbGRSdW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcnVuLmNoaWxkX3J1bnMgPSB0cmVlbWFwW3J1bi5pZF0gfHwgW107XG4gICAgICAgIGZvciAoY29uc3QgcnVuSWQgaW4gdHJlZW1hcCkge1xuICAgICAgICAgICAgaWYgKHJ1bklkICE9PSBydW4uaWQpIHtcbiAgICAgICAgICAgICAgICBydW5zW3J1bklkXS5jaGlsZF9ydW5zID0gdHJlZW1hcFtydW5JZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlzdCBydW5zIGZyb20gdGhlIExhbmdTbWl0aCBzZXJ2ZXIuXG4gICAgICogQHBhcmFtIHByb2plY3RJZCAtIFRoZSBJRCBvZiB0aGUgcHJvamVjdCB0byBmaWx0ZXIgYnkuXG4gICAgICogQHBhcmFtIHByb2plY3ROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb2plY3QgdG8gZmlsdGVyIGJ5LlxuICAgICAqIEBwYXJhbSBwYXJlbnRSdW5JZCAtIFRoZSBJRCBvZiB0aGUgcGFyZW50IHJ1biB0byBmaWx0ZXIgYnkuXG4gICAgICogQHBhcmFtIHRyYWNlSWQgLSBUaGUgSUQgb2YgdGhlIHRyYWNlIHRvIGZpbHRlciBieS5cbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlRXhhbXBsZUlkIC0gVGhlIElEIG9mIHRoZSByZWZlcmVuY2UgZXhhbXBsZSB0byBmaWx0ZXIgYnkuXG4gICAgICogQHBhcmFtIHN0YXJ0VGltZSAtIFRoZSBzdGFydCB0aW1lIHRvIGZpbHRlciBieS5cbiAgICAgKiBAcGFyYW0gaXNSb290IC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gb25seSByZXR1cm4gcm9vdCBydW5zLlxuICAgICAqIEBwYXJhbSBydW5UeXBlIC0gVGhlIHJ1biB0eXBlIHRvIGZpbHRlciBieS5cbiAgICAgKiBAcGFyYW0gZXJyb3IgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBmaWx0ZXIgYnkgZXJyb3IgcnVucy5cbiAgICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIHJ1biB0byBmaWx0ZXIgYnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHF1ZXJ5IHN0cmluZyB0byBmaWx0ZXIgYnkuXG4gICAgICogQHBhcmFtIGZpbHRlciAtIFRoZSBmaWx0ZXIgc3RyaW5nIHRvIGFwcGx5IHRvIHRoZSBydW4gc3BhbnMuXG4gICAgICogQHBhcmFtIHRyYWNlRmlsdGVyIC0gVGhlIGZpbHRlciBzdHJpbmcgdG8gYXBwbHkgb24gdGhlIHJvb3QgcnVuIG9mIHRoZSB0cmFjZS5cbiAgICAgKiBAcGFyYW0gdHJlZUZpbHRlciAtIFRoZSBmaWx0ZXIgc3RyaW5nIHRvIGFwcGx5IG9uIG90aGVyIHJ1bnMgaW4gdGhlIHRyYWNlLlxuICAgICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBydW5zIHRvIHJldHJpZXZlLlxuICAgICAqIEByZXR1cm5zIHtBc3luY0l0ZXJhYmxlPFJ1bj59IC0gVGhlIHJ1bnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExpc3QgYWxsIHJ1bnMgaW4gYSBwcm9qZWN0XG4gICAgICogY29uc3QgcHJvamVjdFJ1bnMgPSBjbGllbnQubGlzdFJ1bnMoeyBwcm9qZWN0TmFtZTogXCI8eW91cl9wcm9qZWN0PlwiIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBMaXN0IExMTSBhbmQgQ2hhdCBydW5zIGluIHRoZSBsYXN0IDI0IGhvdXJzXG4gICAgICogY29uc3QgdG9kYXlzTExNUnVucyA9IGNsaWVudC5saXN0UnVucyh7XG4gICAgICogICBwcm9qZWN0TmFtZTogXCI8eW91cl9wcm9qZWN0PlwiLFxuICAgICAqICAgc3RhcnRfdGltZTogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ICogNjAgKiA2MCAqIDEwMDApLFxuICAgICAqICAgcnVuX3R5cGU6IFwibGxtXCIsXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExpc3QgdHJhY2VzIGluIGEgcHJvamVjdFxuICAgICAqIGNvbnN0IHJvb3RSdW5zID0gY2xpZW50Lmxpc3RSdW5zKHtcbiAgICAgKiAgIHByb2plY3ROYW1lOiBcIjx5b3VyX3Byb2plY3Q+XCIsXG4gICAgICogICBleGVjdXRpb25fb3JkZXI6IDEsXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExpc3QgcnVucyB3aXRob3V0IGVycm9yc1xuICAgICAqIGNvbnN0IGNvcnJlY3RSdW5zID0gY2xpZW50Lmxpc3RSdW5zKHtcbiAgICAgKiAgIHByb2plY3ROYW1lOiBcIjx5b3VyX3Byb2plY3Q+XCIsXG4gICAgICogICBlcnJvcjogZmFsc2UsXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExpc3QgcnVucyBieSBydW4gSURcbiAgICAgKiBjb25zdCBydW5JZHMgPSBbXG4gICAgICogICBcImEzNjA5MmQyLTRhZDUtNGZiNC05YzBkLTBkYmE5YTJlZDgzNlwiLFxuICAgICAqICAgXCI5Mzk4ZTZiZS05NjRmLTRhYTQtOGFlOS1hZDc4Y2Q0YjcwNzRcIixcbiAgICAgKiBdO1xuICAgICAqIGNvbnN0IHNlbGVjdGVkUnVucyA9IGNsaWVudC5saXN0UnVucyh7IHJ1bl9pZHM6IHJ1bklkcyB9KTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gTGlzdCBhbGwgXCJjaGFpblwiIHR5cGUgcnVucyB0aGF0IHRvb2sgbW9yZSB0aGFuIDEwIHNlY29uZHMgYW5kIGhhZCBgdG90YWxfdG9rZW5zYCBncmVhdGVyIHRoYW4gNTAwMFxuICAgICAqIGNvbnN0IGNoYWluUnVucyA9IGNsaWVudC5saXN0UnVucyh7XG4gICAgICogICBwcm9qZWN0TmFtZTogXCI8eW91cl9wcm9qZWN0PlwiLFxuICAgICAqICAgZmlsdGVyOiAnYW5kKGVxKHJ1bl90eXBlLCBcImNoYWluXCIpLCBndChsYXRlbmN5LCAxMCksIGd0KHRvdGFsX3Rva2VucywgNTAwMCkpJyxcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gTGlzdCBhbGwgcnVucyBjYWxsZWQgXCJleHRyYWN0b3JcIiB3aG9zZSByb290IG9mIHRoZSB0cmFjZSB3YXMgYXNzaWduZWQgZmVlZGJhY2sgXCJ1c2VyX3Njb3JlXCIgc2NvcmUgb2YgMVxuICAgICAqIGNvbnN0IGdvb2RFeHRyYWN0b3JSdW5zID0gY2xpZW50Lmxpc3RSdW5zKHtcbiAgICAgKiAgIHByb2plY3ROYW1lOiBcIjx5b3VyX3Byb2plY3Q+XCIsXG4gICAgICogICBmaWx0ZXI6ICdlcShuYW1lLCBcImV4dHJhY3RvclwiKScsXG4gICAgICogICB0cmFjZUZpbHRlcjogJ2FuZChlcShmZWVkYmFja19rZXksIFwidXNlcl9zY29yZVwiKSwgZXEoZmVlZGJhY2tfc2NvcmUsIDEpKScsXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExpc3QgYWxsIHJ1bnMgdGhhdCBzdGFydGVkIGFmdGVyIGEgc3BlY2lmaWMgdGltZXN0YW1wIGFuZCBlaXRoZXIgaGF2ZSBcImVycm9yXCIgbm90IGVxdWFsIHRvIG51bGwgb3IgYSBcIkNvcnJlY3RuZXNzXCIgZmVlZGJhY2sgc2NvcmUgZXF1YWwgdG8gMFxuICAgICAqIGNvbnN0IGNvbXBsZXhSdW5zID0gY2xpZW50Lmxpc3RSdW5zKHtcbiAgICAgKiAgIHByb2plY3ROYW1lOiBcIjx5b3VyX3Byb2plY3Q+XCIsXG4gICAgICogICBmaWx0ZXI6ICdhbmQoZ3Qoc3RhcnRfdGltZSwgXCIyMDIzLTA3LTE1VDEyOjM0OjU2WlwiKSwgb3IobmVxKGVycm9yLCBudWxsKSwgYW5kKGVxKGZlZWRiYWNrX2tleSwgXCJDb3JyZWN0bmVzc1wiKSwgZXEoZmVlZGJhY2tfc2NvcmUsIDAuMCkpKSknLFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBMaXN0IGFsbCBydW5zIHdoZXJlIGB0YWdzYCBpbmNsdWRlIFwiZXhwZXJpbWVudGFsXCIgb3IgXCJiZXRhXCIgYW5kIGBsYXRlbmN5YCBpcyBncmVhdGVyIHRoYW4gMiBzZWNvbmRzXG4gICAgICogY29uc3QgdGFnZ2VkUnVucyA9IGNsaWVudC5saXN0UnVucyh7XG4gICAgICogICBwcm9qZWN0TmFtZTogXCI8eW91cl9wcm9qZWN0PlwiLFxuICAgICAqICAgZmlsdGVyOiAnYW5kKG9yKGhhcyh0YWdzLCBcImV4cGVyaW1lbnRhbFwiKSwgaGFzKHRhZ3MsIFwiYmV0YVwiKSksIGd0KGxhdGVuY3ksIDIpKScsXG4gICAgICogfSk7XG4gICAgICovXG4gICAgYXN5bmMgKmxpc3RSdW5zKHByb3BzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSwgcGFyZW50UnVuSWQsIHRyYWNlSWQsIHJlZmVyZW5jZUV4YW1wbGVJZCwgc3RhcnRUaW1lLCBleGVjdXRpb25PcmRlciwgaXNSb290LCBydW5UeXBlLCBlcnJvciwgaWQsIHF1ZXJ5LCBmaWx0ZXIsIHRyYWNlRmlsdGVyLCB0cmVlRmlsdGVyLCBsaW1pdCwgc2VsZWN0LCBvcmRlciwgfSA9IHByb3BzO1xuICAgICAgICBsZXQgcHJvamVjdElkcyA9IFtdO1xuICAgICAgICBpZiAocHJvamVjdElkKSB7XG4gICAgICAgICAgICBwcm9qZWN0SWRzID0gQXJyYXkuaXNBcnJheShwcm9qZWN0SWQpID8gcHJvamVjdElkIDogW3Byb2plY3RJZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2plY3ROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0TmFtZXMgPSBBcnJheS5pc0FycmF5KHByb2plY3ROYW1lKVxuICAgICAgICAgICAgICAgID8gcHJvamVjdE5hbWVcbiAgICAgICAgICAgICAgICA6IFtwcm9qZWN0TmFtZV07XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0SWRzXyA9IGF3YWl0IFByb21pc2UuYWxsKHByb2plY3ROYW1lcy5tYXAoKG5hbWUpID0+IHRoaXMucmVhZFByb2plY3QoeyBwcm9qZWN0TmFtZTogbmFtZSB9KS50aGVuKChwcm9qZWN0KSA9PiBwcm9qZWN0LmlkKSkpO1xuICAgICAgICAgICAgcHJvamVjdElkcy5wdXNoKC4uLnByb2plY3RJZHNfKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0X3NlbGVjdCA9IFtcbiAgICAgICAgICAgIFwiYXBwX3BhdGhcIixcbiAgICAgICAgICAgIFwiY29tcGxldGlvbl9jb3N0XCIsXG4gICAgICAgICAgICBcImNvbXBsZXRpb25fdG9rZW5zXCIsXG4gICAgICAgICAgICBcImRvdHRlZF9vcmRlclwiLFxuICAgICAgICAgICAgXCJlbmRfdGltZVwiLFxuICAgICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgICAgXCJldmVudHNcIixcbiAgICAgICAgICAgIFwiZXh0cmFcIixcbiAgICAgICAgICAgIFwiZmVlZGJhY2tfc3RhdHNcIixcbiAgICAgICAgICAgIFwiZmlyc3RfdG9rZW5fdGltZVwiLFxuICAgICAgICAgICAgXCJpZFwiLFxuICAgICAgICAgICAgXCJpbnB1dHNcIixcbiAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgXCJvdXRwdXRzXCIsXG4gICAgICAgICAgICBcInBhcmVudF9ydW5faWRcIixcbiAgICAgICAgICAgIFwicGFyZW50X3J1bl9pZHNcIixcbiAgICAgICAgICAgIFwicHJvbXB0X2Nvc3RcIixcbiAgICAgICAgICAgIFwicHJvbXB0X3Rva2Vuc1wiLFxuICAgICAgICAgICAgXCJyZWZlcmVuY2VfZXhhbXBsZV9pZFwiLFxuICAgICAgICAgICAgXCJydW5fdHlwZVwiLFxuICAgICAgICAgICAgXCJzZXNzaW9uX2lkXCIsXG4gICAgICAgICAgICBcInN0YXJ0X3RpbWVcIixcbiAgICAgICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgICAgICBcInRhZ3NcIixcbiAgICAgICAgICAgIFwidG90YWxfY29zdFwiLFxuICAgICAgICAgICAgXCJ0b3RhbF90b2tlbnNcIixcbiAgICAgICAgICAgIFwidHJhY2VfaWRcIixcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIHNlc3Npb246IHByb2plY3RJZHMubGVuZ3RoID8gcHJvamVjdElkcyA6IG51bGwsXG4gICAgICAgICAgICBydW5fdHlwZTogcnVuVHlwZSxcbiAgICAgICAgICAgIHJlZmVyZW5jZV9leGFtcGxlOiByZWZlcmVuY2VFeGFtcGxlSWQsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIHRyYWNlX2ZpbHRlcjogdHJhY2VGaWx0ZXIsXG4gICAgICAgICAgICB0cmVlX2ZpbHRlcjogdHJlZUZpbHRlcixcbiAgICAgICAgICAgIGV4ZWN1dGlvbl9vcmRlcjogZXhlY3V0aW9uT3JkZXIsXG4gICAgICAgICAgICBwYXJlbnRfcnVuOiBwYXJlbnRSdW5JZCxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHN0YXJ0VGltZSA/IHN0YXJ0VGltZS50b0lTT1N0cmluZygpIDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIHRyYWNlOiB0cmFjZUlkLFxuICAgICAgICAgICAgc2VsZWN0OiBzZWxlY3QgPyBzZWxlY3QgOiBkZWZhdWx0X3NlbGVjdCxcbiAgICAgICAgICAgIGlzX3Jvb3Q6IGlzUm9vdCxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYm9keS5zZWxlY3QuaW5jbHVkZXMoXCJjaGlsZF9ydW5faWRzXCIpKSB7XG4gICAgICAgICAgICAoMCwgd2Fybl9qc18xLndhcm5PbmNlKShcIkRlcHJlY2F0ZWQ6ICdjaGlsZF9ydW5faWRzJyBpbiB0aGUgbGlzdFJ1bnMgc2VsZWN0IHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJ1bnNZaWVsZGVkID0gMDtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBydW5zIG9mIHRoaXMuX2dldEN1cnNvclBhZ2luYXRlZExpc3QoXCIvcnVucy9xdWVyeVwiLCBib2R5KSkge1xuICAgICAgICAgICAgaWYgKGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bnNZaWVsZGVkID49IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVucy5sZW5ndGggKyBydW5zWWllbGRlZCA+IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1J1bnMgPSBydW5zLnNsaWNlKDAsIGxpbWl0IC0gcnVuc1lpZWxkZWQpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCogbmV3UnVucztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJ1bnNZaWVsZGVkICs9IHJ1bnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHlpZWxkKiBydW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIHJ1bnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgKmxpc3RHcm91cFJ1bnMocHJvcHMpIHtcbiAgICAgICAgY29uc3QgeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lLCBncm91cEJ5LCBmaWx0ZXIsIHN0YXJ0VGltZSwgZW5kVGltZSwgbGltaXQsIG9mZnNldCwgfSA9IHByb3BzO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSBwcm9qZWN0SWQgfHwgKGF3YWl0IHRoaXMucmVhZFByb2plY3QoeyBwcm9qZWN0TmFtZSB9KSkuaWQ7XG4gICAgICAgIGNvbnN0IGJhc2VCb2R5ID0ge1xuICAgICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgICAgZ3JvdXBfYnk6IGdyb3VwQnksXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzdGFydF90aW1lOiBzdGFydFRpbWUgPyBzdGFydFRpbWUudG9JU09TdHJpbmcoKSA6IG51bGwsXG4gICAgICAgICAgICBlbmRfdGltZTogZW5kVGltZSA/IGVuZFRpbWUudG9JU09TdHJpbmcoKSA6IG51bGwsXG4gICAgICAgICAgICBsaW1pdDogTnVtYmVyKGxpbWl0KSB8fCAxMDAsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMDtcbiAgICAgICAgY29uc3QgcGF0aCA9IFwiL3J1bnMvZ3JvdXBcIjtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcGlVcmx9JHtwYXRofWA7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Qm9keSA9IHtcbiAgICAgICAgICAgICAgICAuLi5iYXNlQm9keSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHVuZGVmaW5lZCB2YWx1ZXMgZnJvbSB0aGUgcGF5bG9hZFxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQYXlsb2FkID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGN1cnJlbnRCb2R5KS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShmaWx0ZXJlZFBheWxvYWQpO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBgRmFpbGVkIHRvIGZldGNoICR7cGF0aH1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXBzLCB0b3RhbCB9ID0gaXRlbXM7XG4gICAgICAgICAgICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB0aHJlYWQgb2YgZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgdGhyZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudE9mZnNldCArPSBncm91cHMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPj0gdG90YWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRSdW5TdGF0cyh7IGlkLCB0cmFjZSwgcGFyZW50UnVuLCBydW5UeXBlLCBwcm9qZWN0TmFtZXMsIHByb2plY3RJZHMsIHJlZmVyZW5jZUV4YW1wbGVJZHMsIHN0YXJ0VGltZSwgZW5kVGltZSwgZXJyb3IsIHF1ZXJ5LCBmaWx0ZXIsIHRyYWNlRmlsdGVyLCB0cmVlRmlsdGVyLCBpc1Jvb3QsIGRhdGFTb3VyY2VUeXBlLCB9KSB7XG4gICAgICAgIGxldCBwcm9qZWN0SWRzXyA9IHByb2plY3RJZHMgfHwgW107XG4gICAgICAgIGlmIChwcm9qZWN0TmFtZXMpIHtcbiAgICAgICAgICAgIHByb2plY3RJZHNfID0gW1xuICAgICAgICAgICAgICAgIC4uLihwcm9qZWN0SWRzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAuLi4oYXdhaXQgUHJvbWlzZS5hbGwocHJvamVjdE5hbWVzLm1hcCgobmFtZSkgPT4gdGhpcy5yZWFkUHJvamVjdCh7IHByb2plY3ROYW1lOiBuYW1lIH0pLnRoZW4oKHByb2plY3QpID0+IHByb2plY3QuaWQpKSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICB0cmFjZSxcbiAgICAgICAgICAgIHBhcmVudF9ydW46IHBhcmVudFJ1bixcbiAgICAgICAgICAgIHJ1bl90eXBlOiBydW5UeXBlLFxuICAgICAgICAgICAgc2Vzc2lvbjogcHJvamVjdElkc18sXG4gICAgICAgICAgICByZWZlcmVuY2VfZXhhbXBsZTogcmVmZXJlbmNlRXhhbXBsZUlkcyxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHN0YXJ0VGltZSxcbiAgICAgICAgICAgIGVuZF90aW1lOiBlbmRUaW1lLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIHRyYWNlX2ZpbHRlcjogdHJhY2VGaWx0ZXIsXG4gICAgICAgICAgICB0cmVlX2ZpbHRlcjogdHJlZUZpbHRlcixcbiAgICAgICAgICAgIGlzX3Jvb3Q6IGlzUm9vdCxcbiAgICAgICAgICAgIGRhdGFfc291cmNlX3R5cGU6IGRhdGFTb3VyY2VUeXBlLFxuICAgICAgICB9O1xuICAgICAgICAvLyBSZW1vdmUgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIHRoZSBwYXlsb2FkXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUGF5bG9hZCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhwYXlsb2FkKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGZpbHRlcmVkUGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vcnVucy9zdGF0c2AsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiZ2V0IHJ1biBzdGF0c1wiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHNoYXJlUnVuKHJ1bklkLCB7IHNoYXJlSWQgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBydW5faWQ6IHJ1bklkLFxuICAgICAgICAgICAgc2hhcmVfdG9rZW46IHNoYXJlSWQgfHwgdXVpZC52NCgpLFxuICAgICAgICB9O1xuICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShydW5JZCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9ydW5zLyR7cnVuSWR9L3NoYXJlYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJzaGFyZSBydW5cIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8ICEoXCJzaGFyZV90b2tlblwiIGluIHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0SG9zdFVybCgpfS9wdWJsaWMvJHtyZXN1bHRbXCJzaGFyZV90b2tlblwiXX0vcmA7XG4gICAgfVxuICAgIGFzeW5jIHVuc2hhcmVSdW4ocnVuSWQpIHtcbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocnVuSWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9ydW5zLyR7cnVuSWR9L3NoYXJlYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwidW5zaGFyZSBydW5cIiwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZFJ1blNoYXJlZExpbmsocnVuSWQpIHtcbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocnVuSWQpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3J1bnMvJHtydW5JZH0vc2hhcmVgLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJyZWFkIHJ1biBzaGFyZWQgbGlua1wiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgIShcInNoYXJlX3Rva2VuXCIgaW4gcmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7dGhpcy5nZXRIb3N0VXJsKCl9L3B1YmxpYy8ke3Jlc3VsdFtcInNoYXJlX3Rva2VuXCJdfS9yYDtcbiAgICB9XG4gICAgYXN5bmMgbGlzdFNoYXJlZFJ1bnMoc2hhcmVUb2tlbiwgeyBydW5JZHMsIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgc2hhcmVfdG9rZW46IHNoYXJlVG9rZW4sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocnVuSWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcnVuSWQgb2YgcnVuSWRzKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKFwiaWRcIiwgcnVuSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHNoYXJlVG9rZW4pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3B1YmxpYy8ke3NoYXJlVG9rZW59L3J1bnMke3F1ZXJ5UGFyYW1zfWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImxpc3Qgc2hhcmVkIHJ1bnNcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcnVucyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgcmV0dXJuIHJ1bnM7XG4gICAgfVxuICAgIGFzeW5jIHJlYWREYXRhc2V0U2hhcmVkU2NoZW1hKGRhdGFzZXRJZCwgZGF0YXNldE5hbWUpIHtcbiAgICAgICAgaWYgKCFkYXRhc2V0SWQgJiYgIWRhdGFzZXROYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFaXRoZXIgZGF0YXNldElkIG9yIGRhdGFzZXROYW1lIG11c3QgYmUgZ2l2ZW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhc2V0SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWUgfSk7XG4gICAgICAgICAgICBkYXRhc2V0SWQgPSBkYXRhc2V0LmlkO1xuICAgICAgICB9XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGRhdGFzZXRJZCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vZGF0YXNldHMvJHtkYXRhc2V0SWR9L3NoYXJlYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwicmVhZCBkYXRhc2V0IHNoYXJlZCBzY2hlbWFcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2hhcmVTY2hlbWEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHNoYXJlU2NoZW1hLnVybCA9IGAke3RoaXMuZ2V0SG9zdFVybCgpfS9wdWJsaWMvJHtzaGFyZVNjaGVtYS5zaGFyZV90b2tlbn0vZGA7XG4gICAgICAgIHJldHVybiBzaGFyZVNjaGVtYTtcbiAgICB9XG4gICAgYXN5bmMgc2hhcmVEYXRhc2V0KGRhdGFzZXRJZCwgZGF0YXNldE5hbWUpIHtcbiAgICAgICAgaWYgKCFkYXRhc2V0SWQgJiYgIWRhdGFzZXROYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFaXRoZXIgZGF0YXNldElkIG9yIGRhdGFzZXROYW1lIG11c3QgYmUgZ2l2ZW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhc2V0SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWUgfSk7XG4gICAgICAgICAgICBkYXRhc2V0SWQgPSBkYXRhc2V0LmlkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0X2lkOiBkYXRhc2V0SWQsXG4gICAgICAgIH07XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGRhdGFzZXRJZCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9kYXRhc2V0cy8ke2RhdGFzZXRJZH0vc2hhcmVgLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInNoYXJlIGRhdGFzZXRcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2hhcmVTY2hlbWEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHNoYXJlU2NoZW1hLnVybCA9IGAke3RoaXMuZ2V0SG9zdFVybCgpfS9wdWJsaWMvJHtzaGFyZVNjaGVtYS5zaGFyZV90b2tlbn0vZGA7XG4gICAgICAgIHJldHVybiBzaGFyZVNjaGVtYTtcbiAgICB9XG4gICAgYXN5bmMgdW5zaGFyZURhdGFzZXQoZGF0YXNldElkKSB7XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGRhdGFzZXRJZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2RhdGFzZXRzLyR7ZGF0YXNldElkfS9zaGFyZWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInVuc2hhcmUgZGF0YXNldFwiLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyByZWFkU2hhcmVkRGF0YXNldChzaGFyZVRva2VuKSB7XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHNoYXJlVG9rZW4pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3B1YmxpYy8ke3NoYXJlVG9rZW59L2RhdGFzZXRzYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwicmVhZCBzaGFyZWQgZGF0YXNldFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICByZXR1cm4gZGF0YXNldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHNoYXJlZCBleGFtcGxlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFyZVRva2VuIFRoZSBzaGFyZSB0b2tlbiB0byBnZXQgZXhhbXBsZXMgZm9yLiBBIHNoYXJlIHRva2VuIGlzIHRoZSBVVUlEIChvciBMYW5nU21pdGggVVJMLCBpbmNsdWRpbmcgVVVJRCkgZ2VuZXJhdGVkIHdoZW4gZXhwbGljaXRseSBtYXJraW5nIGFuIGV4YW1wbGUgYXMgcHVibGljLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQWRkaXRpb25hbCBvcHRpb25zIGZvciBsaXN0aW5nIHRoZSBleGFtcGxlcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBbb3B0aW9ucy5leGFtcGxlSWRzXSBBIGxpc3Qgb2YgZXhhbXBsZSBJRHMgdG8gZmlsdGVyIGJ5LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPEV4YW1wbGVbXT59IFRoZSBzaGFyZWQgZXhhbXBsZXMuXG4gICAgICovXG4gICAgYXN5bmMgbGlzdFNoYXJlZEV4YW1wbGVzKHNoYXJlVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgIGlmIChvcHRpb25zPy5leGFtcGxlSWRzKSB7XG4gICAgICAgICAgICBwYXJhbXMuaWQgPSBvcHRpb25zLmV4YW1wbGVJZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4gdXJsUGFyYW1zLmFwcGVuZChrZXksIHYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3B1YmxpYy8ke3NoYXJlVG9rZW59L2V4YW1wbGVzPyR7dXJsUGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwibGlzdCBzaGFyZWQgZXhhbXBsZXNcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBpZiAoXCJkZXRhaWxcIiBpbiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IHNoYXJlZCBleGFtcGxlcy5cXG5TdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfVxcbk1lc3NhZ2U6ICR7QXJyYXkuaXNBcnJheShyZXN1bHQuZGV0YWlsKVxuICAgICAgICAgICAgICAgICAgICA/IHJlc3VsdC5kZXRhaWwuam9pbihcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICA6IFwiVW5zcGVjaWZpZWQgZXJyb3JcIn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3Qgc2hhcmVkIGV4YW1wbGVzOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKChleGFtcGxlKSA9PiAoe1xuICAgICAgICAgICAgLi4uZXhhbXBsZSxcbiAgICAgICAgICAgIF9ob3N0VXJsOiB0aGlzLmdldEhvc3RVcmwoKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVQcm9qZWN0KHsgcHJvamVjdE5hbWUsIGRlc2NyaXB0aW9uID0gbnVsbCwgbWV0YWRhdGEgPSBudWxsLCB1cHNlcnQgPSBmYWxzZSwgcHJvamVjdEV4dHJhID0gbnVsbCwgcmVmZXJlbmNlRGF0YXNldElkID0gbnVsbCwgfSkge1xuICAgICAgICBjb25zdCB1cHNlcnRfID0gdXBzZXJ0ID8gYD91cHNlcnQ9dHJ1ZWAgOiBcIlwiO1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuYXBpVXJsfS9zZXNzaW9ucyR7dXBzZXJ0X31gO1xuICAgICAgICBjb25zdCBleHRyYSA9IHByb2plY3RFeHRyYSB8fCB7fTtcbiAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICBleHRyYVtcIm1ldGFkYXRhXCJdID0gbWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lLFxuICAgICAgICAgICAgZXh0cmEsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlZmVyZW5jZURhdGFzZXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYm9keVtcInJlZmVyZW5jZV9kYXRhc2V0X2lkXCJdID0gcmVmZXJlbmNlRGF0YXNldElkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRCb2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChlbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keTogc2VyaWFsaXplZEJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiY3JlYXRlIHByb2plY3RcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGVQcm9qZWN0KHByb2plY3RJZCwgeyBuYW1lID0gbnVsbCwgZGVzY3JpcHRpb24gPSBudWxsLCBtZXRhZGF0YSA9IG51bGwsIHByb2plY3RFeHRyYSA9IG51bGwsIGVuZFRpbWUgPSBudWxsLCB9KSB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7dGhpcy5hcGlVcmx9L3Nlc3Npb25zLyR7cHJvamVjdElkfWA7XG4gICAgICAgIGxldCBleHRyYSA9IHByb2plY3RFeHRyYTtcbiAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICBleHRyYSA9IHsgLi4uKGV4dHJhIHx8IHt9KSwgbWV0YWRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBlbmRfdGltZTogZW5kVGltZSA/IG5ldyBEYXRlKGVuZFRpbWUpLnRvSVNPU3RyaW5nKCkgOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBBVENIXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJ1cGRhdGUgcHJvamVjdFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGhhc1Byb2plY3QoeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lLCB9KSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBhIGhlYWQgcmVxdWVzdFxuICAgICAgICBsZXQgcGF0aCA9IFwiL3Nlc3Npb25zXCI7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgaWYgKHByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHByb2plY3ROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgcHJvamVjdE5hbWUgb3IgcHJvamVjdElkLCBub3QgYm90aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9qZWN0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocHJvamVjdElkKTtcbiAgICAgICAgICAgIHBhdGggKz0gYC8ke3Byb2plY3RJZH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2plY3ROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJuYW1lXCIsIHByb2plY3ROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBwcm9qZWN0TmFtZSBvciBwcm9qZWN0SWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfSR7cGF0aH0/JHtwYXJhbXN9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiaGFzIHByb2plY3RcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gY29uc3VtZSB0aGUgcmVzcG9uc2UgYm9keSB0byByZWxlYXNlIHRoZSBjb25uZWN0aW9uXG4gICAgICAgIC8vIGh0dHBzOi8vdW5kaWNpLm5vZGVqcy5vcmcvIy8/aWQ9Z2FyYmFnZS1jb2xsZWN0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgaXQncyBPSyBhbmQgd2UncmUgcXVlcnlpbmcgYnkgbmFtZSwgbmVlZCB0byBjaGVjayB0aGUgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBwcm9qZWN0SWQgcXVlcnlpbmdcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVhZFByb2plY3QoeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lLCBpbmNsdWRlU3RhdHMsIH0pIHtcbiAgICAgICAgbGV0IHBhdGggPSBcIi9zZXNzaW9uc1wiO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIGlmIChwcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBwcm9qZWN0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIHByb2plY3ROYW1lIG9yIHByb2plY3RJZCwgbm90IGJvdGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvamVjdElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHByb2plY3RJZCk7XG4gICAgICAgICAgICBwYXRoICs9IGAvJHtwcm9qZWN0SWR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9qZWN0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwibmFtZVwiLCBwcm9qZWN0TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgcHJvamVjdE5hbWUgb3IgcHJvamVjdElkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmNsdWRlU3RhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcImluY2x1ZGVfc3RhdHNcIiwgaW5jbHVkZVN0YXRzLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZ2V0KHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvamVjdFtpZD0ke3Byb2plY3RJZH0sIG5hbWU9JHtwcm9qZWN0TmFtZX1dIG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBnZXRQcm9qZWN0VXJsKHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSwgfSkge1xuICAgICAgICBpZiAocHJvamVjdElkID09PSB1bmRlZmluZWQgJiYgcHJvamVjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBwcm9qZWN0TmFtZSBvciBwcm9qZWN0SWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IHRoaXMucmVhZFByb2plY3QoeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lIH0pO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZCA9IGF3YWl0IHRoaXMuX2dldFRlbmFudElkKCk7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdldEhvc3RVcmwoKX0vby8ke3RlbmFudElkfS9wcm9qZWN0cy9wLyR7cHJvamVjdC5pZH1gO1xuICAgIH1cbiAgICBhc3luYyBnZXREYXRhc2V0VXJsKHsgZGF0YXNldElkLCBkYXRhc2V0TmFtZSwgfSkge1xuICAgICAgICBpZiAoZGF0YXNldElkID09PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YXNldCA9IGF3YWl0IHRoaXMucmVhZERhdGFzZXQoeyBkYXRhc2V0SWQsIGRhdGFzZXROYW1lIH0pO1xuICAgICAgICBjb25zdCB0ZW5hbnRJZCA9IGF3YWl0IHRoaXMuX2dldFRlbmFudElkKCk7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdldEhvc3RVcmwoKX0vby8ke3RlbmFudElkfS9kYXRhc2V0cy8ke2RhdGFzZXQuaWR9YDtcbiAgICB9XG4gICAgYXN5bmMgX2dldFRlbmFudElkKCkge1xuICAgICAgICBpZiAodGhpcy5fdGVuYW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW5hbnRJZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBsaW1pdDogXCIxXCIgfSk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcHJvamVjdHMgb2YgdGhpcy5fZ2V0UGFnaW5hdGVkKFwiL3Nlc3Npb25zXCIsIHF1ZXJ5UGFyYW1zKSkge1xuICAgICAgICAgICAgdGhpcy5fdGVuYW50SWQgPSBwcm9qZWN0c1swXS50ZW5hbnRfaWQ7XG4gICAgICAgICAgICByZXR1cm4gcHJvamVjdHNbMF0udGVuYW50X2lkO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHByb2plY3RzIGZvdW5kIHRvIHJlc29sdmUgdGVuYW50LlwiKTtcbiAgICB9XG4gICAgYXN5bmMgKmxpc3RQcm9qZWN0cyh7IHByb2plY3RJZHMsIG5hbWUsIG5hbWVDb250YWlucywgcmVmZXJlbmNlRGF0YXNldElkLCByZWZlcmVuY2VEYXRhc2V0TmFtZSwgaW5jbHVkZVN0YXRzLCBkYXRhc2V0VmVyc2lvbiwgcmVmZXJlbmNlRnJlZSwgbWV0YWRhdGEsIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIGlmIChwcm9qZWN0SWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvamVjdElkIG9mIHByb2plY3RJZHMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiaWRcIiwgcHJvamVjdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwibmFtZVwiLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUNvbnRhaW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJuYW1lX2NvbnRhaW5zXCIsIG5hbWVDb250YWlucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZmVyZW5jZURhdGFzZXRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlbmNlX2RhdGFzZXRcIiwgcmVmZXJlbmNlRGF0YXNldElkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyZWZlcmVuY2VEYXRhc2V0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gYXdhaXQgdGhpcy5yZWFkRGF0YXNldCh7XG4gICAgICAgICAgICAgICAgZGF0YXNldE5hbWU6IHJlZmVyZW5jZURhdGFzZXROYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlbmNlX2RhdGFzZXRcIiwgZGF0YXNldC5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVTdGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiaW5jbHVkZV9zdGF0c1wiLCBpbmNsdWRlU3RhdHMudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFzZXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJkYXRhc2V0X3ZlcnNpb25cIiwgZGF0YXNldFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWZlcmVuY2VGcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVuY2VfZnJlZVwiLCByZWZlcmVuY2VGcmVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwibWV0YWRhdGFcIiwgSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHByb2plY3RzIG9mIHRoaXMuX2dldFBhZ2luYXRlZChcIi9zZXNzaW9uc1wiLCBwYXJhbXMpKSB7XG4gICAgICAgICAgICB5aWVsZCogcHJvamVjdHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlUHJvamVjdCh7IHByb2plY3RJZCwgcHJvamVjdE5hbWUsIH0pIHtcbiAgICAgICAgbGV0IHByb2plY3RJZF87XG4gICAgICAgIGlmIChwcm9qZWN0SWQgPT09IHVuZGVmaW5lZCAmJiBwcm9qZWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgcHJvamVjdE5hbWUgb3IgcHJvamVjdElkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHByb2plY3ROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgcHJvamVjdE5hbWUgb3IgcHJvamVjdElkLCBub3QgYm90aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHJvamVjdElkXyA9IChhd2FpdCB0aGlzLnJlYWRQcm9qZWN0KHsgcHJvamVjdE5hbWUgfSkpLmlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvamVjdElkXyA9IHByb2plY3RJZDtcbiAgICAgICAgfVxuICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShwcm9qZWN0SWRfKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vc2Vzc2lvbnMvJHtwcm9qZWN0SWRffWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBgZGVsZXRlIHNlc3Npb24gJHtwcm9qZWN0SWRffSAoJHtwcm9qZWN0TmFtZX0pYCwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgdXBsb2FkQ3N2KHsgY3N2RmlsZSwgZmlsZU5hbWUsIGlucHV0S2V5cywgb3V0cHV0S2V5cywgZGVzY3JpcHRpb24sIGRhdGFUeXBlLCBuYW1lLCB9KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBpVXJsfS9kYXRhc2V0cy91cGxvYWRgO1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGNzdkZpbGUsIGZpbGVOYW1lKTtcbiAgICAgICAgaW5wdXRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiaW5wdXRfa2V5c1wiLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcIm91dHB1dF9rZXlzXCIsIGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImRlc2NyaXB0aW9uXCIsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImRhdGFfdHlwZVwiLCBkYXRhVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcIm5hbWVcIiwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKHVybCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInVwbG9hZCBDU1ZcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVEYXRhc2V0KG5hbWUsIHsgZGVzY3JpcHRpb24sIGRhdGFUeXBlLCBpbnB1dHNTY2hlbWEsIG91dHB1dHNTY2hlbWEsIG1ldGFkYXRhLCB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGV4dHJhOiBtZXRhZGF0YSA/IHsgbWV0YWRhdGEgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRhdGFUeXBlKSB7XG4gICAgICAgICAgICBib2R5LmRhdGFfdHlwZSA9IGRhdGFUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNTY2hlbWEpIHtcbiAgICAgICAgICAgIGJvZHkuaW5wdXRzX3NjaGVtYV9kZWZpbml0aW9uID0gaW5wdXRzU2NoZW1hO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRwdXRzU2NoZW1hKSB7XG4gICAgICAgICAgICBib2R5Lm91dHB1dHNfc2NoZW1hX2RlZmluaXRpb24gPSBvdXRwdXRzU2NoZW1hO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRCb2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vZGF0YXNldHNgLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5OiBzZXJpYWxpemVkQm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJjcmVhdGUgZGF0YXNldFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHJlYWREYXRhc2V0KHsgZGF0YXNldElkLCBkYXRhc2V0TmFtZSwgfSkge1xuICAgICAgICBsZXQgcGF0aCA9IFwiL2RhdGFzZXRzXCI7XG4gICAgICAgIC8vIGxpbWl0IHRvIDEgcmVzdWx0XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBsaW1pdDogXCIxXCIgfSk7XG4gICAgICAgIGlmIChkYXRhc2V0SWQgJiYgZGF0YXNldE5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgZGF0YXNldE5hbWUgb3IgZGF0YXNldElkLCBub3QgYm90aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWQpIHtcbiAgICAgICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICBwYXRoICs9IGAvJHtkYXRhc2V0SWR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0TmFtZSkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcIm5hbWVcIiwgZGF0YXNldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2dldChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFzZXRbaWQ9JHtkYXRhc2V0SWR9LCBuYW1lPSR7ZGF0YXNldE5hbWV9XSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgaGFzRGF0YXNldCh7IGRhdGFzZXRJZCwgZGF0YXNldE5hbWUsIH0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVhZERhdGFzZXQoeyBkYXRhc2V0SWQsIGRhdGFzZXROYW1lIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnN0YW5jZW9mL25vLWluc3RhbmNlb2ZcbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibm90IGZvdW5kXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBkaWZmRGF0YXNldFZlcnNpb25zKHsgZGF0YXNldElkLCBkYXRhc2V0TmFtZSwgZnJvbVZlcnNpb24sIHRvVmVyc2lvbiwgfSkge1xuICAgICAgICBsZXQgZGF0YXNldElkXyA9IGRhdGFzZXRJZDtcbiAgICAgICAgaWYgKGRhdGFzZXRJZF8gPT09IHVuZGVmaW5lZCAmJiBkYXRhc2V0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWRfICE9PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWQsIG5vdCBib3RoXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGFzZXRJZF8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGF3YWl0IHRoaXMucmVhZERhdGFzZXQoeyBkYXRhc2V0TmFtZSB9KTtcbiAgICAgICAgICAgIGRhdGFzZXRJZF8gPSBkYXRhc2V0LmlkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgZnJvbV92ZXJzaW9uOiB0eXBlb2YgZnJvbVZlcnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IGZyb21WZXJzaW9uXG4gICAgICAgICAgICAgICAgOiBmcm9tVmVyc2lvbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgdG9fdmVyc2lvbjogdHlwZW9mIHRvVmVyc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHRvVmVyc2lvbiA6IHRvVmVyc2lvbi50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9nZXQoYC9kYXRhc2V0cy8ke2RhdGFzZXRJZF99L3ZlcnNpb25zL2RpZmZgLCB1cmxQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGFzeW5jIHJlYWREYXRhc2V0T3BlbmFpRmluZXR1bmluZyh7IGRhdGFzZXRJZCwgZGF0YXNldE5hbWUsIH0pIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IFwiL2RhdGFzZXRzXCI7XG4gICAgICAgIGlmIChkYXRhc2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGFzZXROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFzZXRJZCA9IChhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWUgfSkpLmlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9nZXRSZXNwb25zZShgJHtwYXRofS8ke2RhdGFzZXRJZH0vb3BlbmFpX2Z0YCk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldFRleHRcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gSlNPTi5wYXJzZShsaW5lKSk7XG4gICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgIH1cbiAgICBhc3luYyAqbGlzdERhdGFzZXRzKHsgbGltaXQgPSAxMDAsIG9mZnNldCA9IDAsIGRhdGFzZXRJZHMsIGRhdGFzZXROYW1lLCBkYXRhc2V0TmFtZUNvbnRhaW5zLCBtZXRhZGF0YSwgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBcIi9kYXRhc2V0c1wiO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGxpbWl0OiBsaW1pdC50b1N0cmluZygpLFxuICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQudG9TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhc2V0SWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWRfIG9mIGRhdGFzZXRJZHMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiaWRcIiwgaWRfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcIm5hbWVcIiwgZGF0YXNldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhc2V0TmFtZUNvbnRhaW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJuYW1lX2NvbnRhaW5zXCIsIGRhdGFzZXROYW1lQ29udGFpbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwibWV0YWRhdGFcIiwgSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGRhdGFzZXRzIG9mIHRoaXMuX2dldFBhZ2luYXRlZChwYXRoLCBwYXJhbXMpKSB7XG4gICAgICAgICAgICB5aWVsZCogZGF0YXNldHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIGEgZGF0YXNldFxuICAgICAqIEBwYXJhbSBwcm9wcyBUaGUgZGF0YXNldCBkZXRhaWxzIHRvIHVwZGF0ZVxuICAgICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVEYXRhc2V0KHByb3BzKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YXNldElkLCBkYXRhc2V0TmFtZSwgLi4udXBkYXRlIH0gPSBwcm9wcztcbiAgICAgICAgaWYgKCFkYXRhc2V0SWQgJiYgIWRhdGFzZXROYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfZGF0YXNldElkID0gZGF0YXNldElkID8/IChhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWUgfSkpLmlkO1xuICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShfZGF0YXNldElkKTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHVwZGF0ZSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vZGF0YXNldHMvJHtfZGF0YXNldElkfWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUEFUQ0hcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInVwZGF0ZSBkYXRhc2V0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVzcG9uc2UuanNvbigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhIHRhZyBvbiBhIGRhdGFzZXQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFnIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGlzIGRhdGFzZXQsXG4gICAgICogdGhlIHRhZyB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXcgdmVyc2lvbi4gVGhlIGFzX29mIHBhcmFtZXRlciBpcyB1c2VkIHRvXG4gICAgICogZGV0ZXJtaW5lIHdoaWNoIHZlcnNpb24gb2YgdGhlIGRhdGFzZXQgdG8gYXBwbHkgdGhlIG5ldyB0YWdzIHRvLlxuICAgICAqXG4gICAgICogSXQgbXVzdCBiZSBhbiBleGFjdCB2ZXJzaW9uIG9mIHRoZSBkYXRhc2V0IHRvIHN1Y2NlZWQuIFlvdSBjYW5cbiAgICAgKiB1c2UgdGhlIFwicmVhZERhdGFzZXRWZXJzaW9uXCIgbWV0aG9kIHRvIGZpbmQgdGhlIGV4YWN0IHZlcnNpb25cbiAgICAgKiB0byBhcHBseSB0aGUgdGFncyB0by5cbiAgICAgKiBAcGFyYW0gcGFyYW1zLmRhdGFzZXRJZCBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgdG8gdXBkYXRlLiBNdXN0IGJlIHByb3ZpZGVkIGlmIFwiZGF0YXNldE5hbWVcIiBpcyBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBhcmFtcy5kYXRhc2V0TmFtZSBUaGUgbmFtZSBvZiB0aGUgZGF0YXNldCB0byB1cGRhdGUuIE11c3QgYmUgcHJvdmlkZWQgaWYgXCJkYXRhc2V0SWRcIiBpcyBub3QgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHBhcmFtcy5hc09mIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGRhdGFzZXQgdG8gYXBwbHkgdGhlIG5ldyB0YWdzIHRvLlxuICAgICAqIEBwYXJhbSBwYXJhbXMudGFnIFRoZSBuZXcgdGFnIHRvIGFwcGx5IHRvIHRoZSBkYXRhc2V0LlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZURhdGFzZXRUYWcocHJvcHMpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhc2V0SWQsIGRhdGFzZXROYW1lLCBhc09mLCB0YWcgfSA9IHByb3BzO1xuICAgICAgICBpZiAoIWRhdGFzZXRJZCAmJiAhZGF0YXNldE5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgZGF0YXNldE5hbWUgb3IgZGF0YXNldElkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9kYXRhc2V0SWQgPSBkYXRhc2V0SWQgPz8gKGF3YWl0IHRoaXMucmVhZERhdGFzZXQoeyBkYXRhc2V0TmFtZSB9KSkuaWQ7XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKF9kYXRhc2V0SWQpO1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgYXNfb2Y6IHR5cGVvZiBhc09mID09PSBcInN0cmluZ1wiID8gYXNPZiA6IGFzT2YudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIHRhZyxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2RhdGFzZXRzLyR7X2RhdGFzZXRJZH0vdGFnc2AsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJ1cGRhdGUgZGF0YXNldCB0YWdzXCIsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZURhdGFzZXQoeyBkYXRhc2V0SWQsIGRhdGFzZXROYW1lLCB9KSB7XG4gICAgICAgIGxldCBwYXRoID0gXCIvZGF0YXNldHNcIjtcbiAgICAgICAgbGV0IGRhdGFzZXRJZF8gPSBkYXRhc2V0SWQ7XG4gICAgICAgIGlmIChkYXRhc2V0SWQgIT09IHVuZGVmaW5lZCAmJiBkYXRhc2V0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZCwgbm90IGJvdGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YXNldE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGF3YWl0IHRoaXMucmVhZERhdGFzZXQoeyBkYXRhc2V0TmFtZSB9KTtcbiAgICAgICAgICAgIGRhdGFzZXRJZF8gPSBkYXRhc2V0LmlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhc2V0SWRfICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGRhdGFzZXRJZF8pO1xuICAgICAgICAgICAgcGF0aCArPSBgLyR7ZGF0YXNldElkX31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKHRoaXMuYXBpVXJsICsgcGF0aCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIGBkZWxldGUgJHtwYXRofWAsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGluZGV4RGF0YXNldCh7IGRhdGFzZXRJZCwgZGF0YXNldE5hbWUsIHRhZywgfSkge1xuICAgICAgICBsZXQgZGF0YXNldElkXyA9IGRhdGFzZXRJZDtcbiAgICAgICAgaWYgKCFkYXRhc2V0SWRfICYmICFkYXRhc2V0TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YXNldElkXyAmJiBkYXRhc2V0TmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWQsIG5vdCBib3RoXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFkYXRhc2V0SWRfKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gYXdhaXQgdGhpcy5yZWFkRGF0YXNldCh7IGRhdGFzZXROYW1lIH0pO1xuICAgICAgICAgICAgZGF0YXNldElkXyA9IGRhdGFzZXQuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZGF0YXNldElkXyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2RhdGFzZXRzLyR7ZGF0YXNldElkX30vaW5kZXhgLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImluZGV4IGRhdGFzZXRcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMZXRzIHlvdSBydW4gYSBzaW1pbGFyaXR5IHNlYXJjaCBxdWVyeSBvbiBhIGRhdGFzZXQuXG4gICAgICpcbiAgICAgKiBSZXF1aXJlcyB0aGUgZGF0YXNldCB0byBiZSBpbmRleGVkLiBQbGVhc2Ugc2VlIHRoZSBgaW5kZXhEYXRhc2V0YCBtZXRob2QgdG8gc2V0IHVwIGluZGV4aW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlucHV0cyAgICAgIFRoZSBpbnB1dCBvbiB3aGljaCB0byBydW4gdGhlIHNpbWlsYXJpdHkgc2VhcmNoLiBNdXN0IGhhdmUgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgIHNhbWUgc2NoZW1hIGFzIHRoZSBkYXRhc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFzZXRJZCAgIFRoZSBkYXRhc2V0IHRvIHNlYXJjaCBmb3Igc2ltaWxhciBleGFtcGxlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaW1pdCAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXhhbXBsZXMgdG8gcmV0dXJuLiBXaWxsIHJldHVybiB0aGUgdG9wIGBsaW1pdGAgbW9zdFxuICAgICAqICAgICAgICAgICAgICAgICAgICBzaW1pbGFyIGV4YW1wbGVzIGluIG9yZGVyIG9mIG1vc3Qgc2ltaWxhciB0byBsZWFzdCBzaW1pbGFyLiBJZiBubyBzaW1pbGFyXG4gICAgICogICAgICAgICAgICAgICAgICAgIGV4YW1wbGVzIGFyZSBmb3VuZCwgcmFuZG9tIGV4YW1wbGVzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyICAgICAgQSBmaWx0ZXIgc3RyaW5nIHRvIGFwcGx5IHRvIHRoZSBzZWFyY2guIE9ubHkgZXhhbXBsZXMgd2lsbCBiZSByZXR1cm5lZCB0aGF0XG4gICAgICogICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBmaWx0ZXIgc3RyaW5nLiBTb21lIGV4YW1wbGVzIG9mIGZpbHRlcnNcbiAgICAgKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAtIGVxKG1ldGFkYXRhLm15a2V5LCBcInZhbHVlXCIpXG4gICAgICogICAgICAgICAgICAgICAgICAgIC0gYW5kKG5lcShtZXRhZGF0YS5teS5uZXN0ZWQua2V5LCBcInZhbHVlXCIpLCBuZXEobWV0YWRhdGEubXlrZXksIFwidmFsdWVcIikpXG4gICAgICogICAgICAgICAgICAgICAgICAgIC0gb3IoZXEobWV0YWRhdGEubXlrZXksIFwidmFsdWVcIiksIGVxKG1ldGFkYXRhLm15a2V5LCBcIm90aGVydmFsdWVcIikpXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAgICAgICAgICAgQSBsaXN0IG9mIHNpbWlsYXIgZXhhbXBsZXMuXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogZGF0YXNldF9pZCA9IFwiMTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDAwXCJcbiAgICAgKiBpbnB1dHMgPSB7XCJ0ZXh0XCI6IFwiSG93IG1hbnkgcGVvcGxlIGxpdmUgaW4gQmVybGluP1wifVxuICAgICAqIGxpbWl0ID0gNVxuICAgICAqIGV4YW1wbGVzID0gYXdhaXQgY2xpZW50LnNpbWlsYXJFeGFtcGxlcyhpbnB1dHMsIGRhdGFzZXRfaWQsIGxpbWl0KVxuICAgICAqL1xuICAgIGFzeW5jIHNpbWlsYXJFeGFtcGxlcyhpbnB1dHMsIGRhdGFzZXRJZCwgbGltaXQsIHsgZmlsdGVyLCB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgICAgICAgIGlucHV0czogaW5wdXRzLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmaWx0ZXJcIl0gPSBmaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZGF0YXNldElkKTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2RhdGFzZXRzLyR7ZGF0YXNldElkfS9zZWFyY2hgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImZldGNoIHNpbWlsYXIgZXhhbXBsZXNcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0W1wiZXhhbXBsZXNcIl07XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZUV4YW1wbGUoaW5wdXRzT3JVcGRhdGUsIG91dHB1dHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGlzRXhhbXBsZUNyZWF0ZShpbnB1dHNPclVwZGF0ZSkpIHtcbiAgICAgICAgICAgIGlmIChvdXRwdXRzICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHByb3ZpZGUgb3V0cHV0cyBvciBvcHRpb25zIHdoZW4gdXNpbmcgRXhhbXBsZUNyZWF0ZSBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGFzZXRJZF8gPSBvdXRwdXRzID8gb3B0aW9ucz8uZGF0YXNldElkIDogaW5wdXRzT3JVcGRhdGUuZGF0YXNldF9pZDtcbiAgICAgICAgY29uc3QgZGF0YXNldE5hbWVfID0gb3V0cHV0c1xuICAgICAgICAgICAgPyBvcHRpb25zPy5kYXRhc2V0TmFtZVxuICAgICAgICAgICAgOiBpbnB1dHNPclVwZGF0ZS5kYXRhc2V0X25hbWU7XG4gICAgICAgIGlmIChkYXRhc2V0SWRfID09PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWVfID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgZGF0YXNldE5hbWUgb3IgZGF0YXNldElkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGFzZXRJZF8gIT09IHVuZGVmaW5lZCAmJiBkYXRhc2V0TmFtZV8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGVpdGhlciBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWQsIG5vdCBib3RoXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGFzZXRJZF8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGF3YWl0IHRoaXMucmVhZERhdGFzZXQoeyBkYXRhc2V0TmFtZTogZGF0YXNldE5hbWVfIH0pO1xuICAgICAgICAgICAgZGF0YXNldElkXyA9IGRhdGFzZXQuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlZEF0XyA9IChvdXRwdXRzID8gb3B0aW9ucz8uY3JlYXRlZEF0IDogaW5wdXRzT3JVcGRhdGUuY3JlYXRlZF9hdCkgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGlmICghaXNFeGFtcGxlQ3JlYXRlKGlucHV0c09yVXBkYXRlKSkge1xuICAgICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBpbnB1dHM6IGlucHV0c09yVXBkYXRlLFxuICAgICAgICAgICAgICAgIG91dHB1dHMsXG4gICAgICAgICAgICAgICAgY3JlYXRlZF9hdDogY3JlYXRlZEF0Xz8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBpZDogb3B0aW9ucz8uZXhhbXBsZUlkLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcHRpb25zPy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBzcGxpdDogb3B0aW9ucz8uc3BsaXQsXG4gICAgICAgICAgICAgICAgc291cmNlX3J1bl9pZDogb3B0aW9ucz8uc291cmNlUnVuSWQsXG4gICAgICAgICAgICAgICAgdXNlX3NvdXJjZV9ydW5faW86IG9wdGlvbnM/LnVzZVNvdXJjZVJ1bklPLFxuICAgICAgICAgICAgICAgIHVzZV9zb3VyY2VfcnVuX2F0dGFjaG1lbnRzOiBvcHRpb25zPy51c2VTb3VyY2VSdW5BdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50czogb3B0aW9ucz8uYXR0YWNobWVudHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGlucHV0c09yVXBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fdXBsb2FkRXhhbXBsZXNNdWx0aXBhcnQoZGF0YXNldElkXywgW2RhdGFdKTtcbiAgICAgICAgY29uc3QgZXhhbXBsZSA9IGF3YWl0IHRoaXMucmVhZEV4YW1wbGUocmVzcG9uc2UuZXhhbXBsZV9pZHM/LlswXSA/PyB1dWlkLnY0KCkpO1xuICAgICAgICByZXR1cm4gZXhhbXBsZTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlRXhhbXBsZXMocHJvcHNPclVwbG9hZHMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHNPclVwbG9hZHMpKSB7XG4gICAgICAgICAgICBpZiAocHJvcHNPclVwbG9hZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXBsb2FkcyA9IHByb3BzT3JVcGxvYWRzO1xuICAgICAgICAgICAgbGV0IGRhdGFzZXRJZF8gPSB1cGxvYWRzWzBdLmRhdGFzZXRfaWQ7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0TmFtZV8gPSB1cGxvYWRzWzBdLmRhdGFzZXRfbmFtZTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0SWRfID09PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWVfID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFzZXRJZF8gIT09IHVuZGVmaW5lZCAmJiBkYXRhc2V0TmFtZV8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgZGF0YXNldE5hbWUgb3IgZGF0YXNldElkLCBub3QgYm90aFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFzZXRJZF8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWU6IGRhdGFzZXROYW1lXyB9KTtcbiAgICAgICAgICAgICAgICBkYXRhc2V0SWRfID0gZGF0YXNldC5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fdXBsb2FkRXhhbXBsZXNNdWx0aXBhcnQoZGF0YXNldElkXywgdXBsb2Fkcyk7XG4gICAgICAgICAgICBjb25zdCBleGFtcGxlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlc3BvbnNlLmV4YW1wbGVfaWRzLm1hcCgoaWQpID0+IHRoaXMucmVhZEV4YW1wbGUoaWQpKSk7XG4gICAgICAgICAgICByZXR1cm4gZXhhbXBsZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpbnB1dHMsIG91dHB1dHMsIG1ldGFkYXRhLCBzcGxpdHMsIHNvdXJjZVJ1bklkcywgdXNlU291cmNlUnVuSU9zLCB1c2VTb3VyY2VSdW5BdHRhY2htZW50cywgYXR0YWNobWVudHMsIGV4YW1wbGVJZHMsIGRhdGFzZXRJZCwgZGF0YXNldE5hbWUsIH0gPSBwcm9wc09yVXBsb2FkcztcbiAgICAgICAgaWYgKGlucHV0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgaW5wdXRzIHdoZW4gdXNpbmcgbGVnYWN5IHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGFzZXRJZF8gPSBkYXRhc2V0SWQ7XG4gICAgICAgIGNvbnN0IGRhdGFzZXROYW1lXyA9IGRhdGFzZXROYW1lO1xuICAgICAgICBpZiAoZGF0YXNldElkXyA9PT0gdW5kZWZpbmVkICYmIGRhdGFzZXROYW1lXyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWRfICE9PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWVfICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgZGF0YXNldE5hbWUgb3IgZGF0YXNldElkLCBub3QgYm90aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWRfID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWU6IGRhdGFzZXROYW1lXyB9KTtcbiAgICAgICAgICAgIGRhdGFzZXRJZF8gPSBkYXRhc2V0LmlkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEV4YW1wbGVzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0X2lkOiBkYXRhc2V0SWRfLFxuICAgICAgICAgICAgICAgIGlucHV0czogaW5wdXQsXG4gICAgICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0cz8uW2lkeF0sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhPy5baWR4XSxcbiAgICAgICAgICAgICAgICBzcGxpdDogc3BsaXRzPy5baWR4XSxcbiAgICAgICAgICAgICAgICBpZDogZXhhbXBsZUlkcz8uW2lkeF0sXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzPy5baWR4XSxcbiAgICAgICAgICAgICAgICBzb3VyY2VfcnVuX2lkOiBzb3VyY2VSdW5JZHM/LltpZHhdLFxuICAgICAgICAgICAgICAgIHVzZV9zb3VyY2VfcnVuX2lvOiB1c2VTb3VyY2VSdW5JT3M/LltpZHhdLFxuICAgICAgICAgICAgICAgIHVzZV9zb3VyY2VfcnVuX2F0dGFjaG1lbnRzOiB1c2VTb3VyY2VSdW5BdHRhY2htZW50cz8uW2lkeF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl91cGxvYWRFeGFtcGxlc011bHRpcGFydChkYXRhc2V0SWRfLCBmb3JtYXR0ZWRFeGFtcGxlcyk7XG4gICAgICAgIGNvbnN0IGV4YW1wbGVzID0gYXdhaXQgUHJvbWlzZS5hbGwocmVzcG9uc2UuZXhhbXBsZV9pZHMubWFwKChpZCkgPT4gdGhpcy5yZWFkRXhhbXBsZShpZCkpKTtcbiAgICAgICAgcmV0dXJuIGV4YW1wbGVzO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVMTE1FeGFtcGxlKGlucHV0LCBnZW5lcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUV4YW1wbGUoeyBpbnB1dCB9LCB7IG91dHB1dDogZ2VuZXJhdGlvbiB9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlQ2hhdEV4YW1wbGUoaW5wdXQsIGdlbmVyYXRpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsSW5wdXQgPSBpbnB1dC5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgbWVzc2FnZXNfanNfMS5pc0xhbmdDaGFpbk1lc3NhZ2UpKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBtZXNzYWdlc19qc18xLmNvbnZlcnRMYW5nQ2hhaW5NZXNzYWdlVG9FeGFtcGxlKShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmluYWxPdXRwdXQgPSAoMCwgbWVzc2FnZXNfanNfMS5pc0xhbmdDaGFpbk1lc3NhZ2UpKGdlbmVyYXRpb25zKVxuICAgICAgICAgICAgPyAoMCwgbWVzc2FnZXNfanNfMS5jb252ZXJ0TGFuZ0NoYWluTWVzc2FnZVRvRXhhbXBsZSkoZ2VuZXJhdGlvbnMpXG4gICAgICAgICAgICA6IGdlbmVyYXRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVFeGFtcGxlKHsgaW5wdXQ6IGZpbmFsSW5wdXQgfSwgeyBvdXRwdXQ6IGZpbmFsT3V0cHV0IH0sIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyByZWFkRXhhbXBsZShleGFtcGxlSWQpIHtcbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZXhhbXBsZUlkKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IGAvZXhhbXBsZXMvJHtleGFtcGxlSWR9YDtcbiAgICAgICAgY29uc3QgcmF3RXhhbXBsZSA9IGF3YWl0IHRoaXMuX2dldChwYXRoKTtcbiAgICAgICAgY29uc3QgeyBhdHRhY2htZW50X3VybHMsIC4uLnJlc3QgfSA9IHJhd0V4YW1wbGU7XG4gICAgICAgIGNvbnN0IGV4YW1wbGUgPSByZXN0O1xuICAgICAgICBpZiAoYXR0YWNobWVudF91cmxzKSB7XG4gICAgICAgICAgICBleGFtcGxlLmF0dGFjaG1lbnRzID0gT2JqZWN0LmVudHJpZXMoYXR0YWNobWVudF91cmxzKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW2tleS5zbGljZShcImF0dGFjaG1lbnQuXCIubGVuZ3RoKV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXNpZ25lZF91cmw6IHZhbHVlLnByZXNpZ25lZF91cmwsXG4gICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZTogdmFsdWUubWltZV90eXBlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhhbXBsZTtcbiAgICB9XG4gICAgYXN5bmMgKmxpc3RFeGFtcGxlcyh7IGRhdGFzZXRJZCwgZGF0YXNldE5hbWUsIGV4YW1wbGVJZHMsIGFzT2YsIHNwbGl0cywgaW5saW5lUzNVcmxzLCBtZXRhZGF0YSwgbGltaXQsIG9mZnNldCwgZmlsdGVyLCBpbmNsdWRlQXR0YWNobWVudHMsIH0gPSB7fSkge1xuICAgICAgICBsZXQgZGF0YXNldElkXztcbiAgICAgICAgaWYgKGRhdGFzZXRJZCAhPT0gdW5kZWZpbmVkICYmIGRhdGFzZXROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3QgcHJvdmlkZSBlaXRoZXIgZGF0YXNldE5hbWUgb3IgZGF0YXNldElkLCBub3QgYm90aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YXNldElkXyA9IGRhdGFzZXRJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gYXdhaXQgdGhpcy5yZWFkRGF0YXNldCh7IGRhdGFzZXROYW1lIH0pO1xuICAgICAgICAgICAgZGF0YXNldElkXyA9IGRhdGFzZXQuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgYSBkYXRhc2V0TmFtZSBvciBkYXRhc2V0SWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGRhdGFzZXQ6IGRhdGFzZXRJZF8gfSk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXRfdmVyc2lvbiA9IGFzT2ZcbiAgICAgICAgICAgID8gdHlwZW9mIGFzT2YgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IGFzT2ZcbiAgICAgICAgICAgICAgICA6IGFzT2Y/LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZGF0YXNldF92ZXJzaW9uKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiYXNfb2ZcIiwgZGF0YXNldF92ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmxpbmVTM1VybHNfID0gaW5saW5lUzNVcmxzID8/IHRydWU7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoXCJpbmxpbmVfczNfdXJsc1wiLCBpbmxpbmVTM1VybHNfLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAoZXhhbXBsZUlkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkXyBvZiBleGFtcGxlSWRzKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcImlkXCIsIGlkXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwbGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNwbGl0IG9mIHNwbGl0cykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJzcGxpdHNcIiwgc3BsaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkTWV0YWRhdGEgPSBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSk7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwibWV0YWRhdGFcIiwgc2VyaWFsaXplZE1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcImxpbWl0XCIsIGxpbWl0LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcIm9mZnNldFwiLCBvZmZzZXQudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiZmlsdGVyXCIsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVBdHRhY2htZW50cyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgW1wiYXR0YWNobWVudF91cmxzXCIsIFwib3V0cHV0c1wiLCBcIm1ldGFkYXRhXCJdLmZvckVhY2goKGZpZWxkKSA9PiBwYXJhbXMuYXBwZW5kKFwic2VsZWN0XCIsIGZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJhd0V4YW1wbGVzIG9mIHRoaXMuX2dldFBhZ2luYXRlZChcIi9leGFtcGxlc1wiLCBwYXJhbXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhd0V4YW1wbGUgb2YgcmF3RXhhbXBsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGF0dGFjaG1lbnRfdXJscywgLi4ucmVzdCB9ID0gcmF3RXhhbXBsZTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGFtcGxlID0gcmVzdDtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudF91cmxzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4YW1wbGUuYXR0YWNobWVudHMgPSBPYmplY3QuZW50cmllcyhhdHRhY2htZW50X3VybHMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY1trZXkuc2xpY2UoXCJhdHRhY2htZW50LlwiLmxlbmd0aCldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNpZ25lZF91cmw6IHZhbHVlLnByZXNpZ25lZF91cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlOiB2YWx1ZS5taW1lX3R5cGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWllbGQgZXhhbXBsZTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBpID49IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlRXhhbXBsZShleGFtcGxlSWQpIHtcbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZXhhbXBsZUlkKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IGAvZXhhbXBsZXMvJHtleGFtcGxlSWR9YDtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaCh0aGlzLmFwaVVybCArIHBhdGgsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBgZGVsZXRlICR7cGF0aH1gLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgbXVsdGlwbGUgZXhhbXBsZXMgYnkgSUQuXG4gICAgICogQHBhcmFtIGV4YW1wbGVJZHMgLSBUaGUgSURzIG9mIHRoZSBleGFtcGxlcyB0byBkZWxldGVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciBkZWxldGlvblxuICAgICAqIEBwYXJhbSBvcHRpb25zLmhhcmREZWxldGUgLSBJZiB0cnVlLCBwZXJtYW5lbnRseSBkZWxldGUgZXhhbXBsZXMuIElmIGZhbHNlIChkZWZhdWx0KSwgc29mdCBkZWxldGUgdGhlbS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGVFeGFtcGxlcyhleGFtcGxlSWRzLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGFsbCBVVUlEc1xuICAgICAgICBleGFtcGxlSWRzLmZvckVhY2goKGlkKSA9PiAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShpZCkpO1xuICAgICAgICBpZiAob3B0aW9ucz8uaGFyZERlbGV0ZSkge1xuICAgICAgICAgICAgLy8gSGFyZCBkZWxldGUgdXNlcyBQT1NUIHRvIGEgZGlmZmVyZW50IHBsYXRmb3JtIGVuZHBvaW50XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5fZ2V0UGxhdGZvcm1FbmRwb2ludFBhdGgoXCJkYXRhc2V0cy9leGFtcGxlcy9kZWxldGVcIik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0ke3BhdGh9YCwge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZV9pZHM6IGV4YW1wbGVJZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXJkX2RlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImhhcmQgZGVsZXRlIGV4YW1wbGVzXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNvZnQgZGVsZXRlIHVzZXMgREVMRVRFIHdpdGggcXVlcnkgcGFyYW1zXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgICAgICBleGFtcGxlSWRzLmZvckVhY2goKGlkKSA9PiBwYXJhbXMuYXBwZW5kKFwiZXhhbXBsZV9pZHNcIiwgaWQpKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9leGFtcGxlcz8ke3BhcmFtcy50b1N0cmluZygpfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImRlbGV0ZSBleGFtcGxlc1wiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlRXhhbXBsZShleGFtcGxlSWRPclVwZGF0ZSwgdXBkYXRlKSB7XG4gICAgICAgIGxldCBleGFtcGxlSWQ7XG4gICAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgICAgIGV4YW1wbGVJZCA9IGV4YW1wbGVJZE9yVXBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXhhbXBsZUlkID0gZXhhbXBsZUlkT3JVcGRhdGUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZXhhbXBsZUlkKTtcbiAgICAgICAgbGV0IHVwZGF0ZVRvVXNlO1xuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICB1cGRhdGVUb1VzZSA9IHsgaWQ6IGV4YW1wbGVJZCwgLi4udXBkYXRlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVUb1VzZSA9IGV4YW1wbGVJZE9yVXBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhc2V0SWQ7XG4gICAgICAgIGlmICh1cGRhdGVUb1VzZS5kYXRhc2V0X2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFzZXRJZCA9IHVwZGF0ZVRvVXNlLmRhdGFzZXRfaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleGFtcGxlID0gYXdhaXQgdGhpcy5yZWFkRXhhbXBsZShleGFtcGxlSWQpO1xuICAgICAgICAgICAgZGF0YXNldElkID0gZXhhbXBsZS5kYXRhc2V0X2lkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVFeGFtcGxlc011bHRpcGFydChkYXRhc2V0SWQsIFt1cGRhdGVUb1VzZV0pO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGVFeGFtcGxlcyh1cGRhdGUpIHtcbiAgICAgICAgLy8gV2Ugd2lsbCBuYWl2ZWx5IGdldCBkYXRhc2V0IGlkIGZyb20gZmlyc3QgZXhhbXBsZSBhbmQgYXNzdW1lIGl0IHdvcmtzIGZvciBhbGxcbiAgICAgICAgbGV0IGRhdGFzZXRJZDtcbiAgICAgICAgaWYgKHVwZGF0ZVswXS5kYXRhc2V0X2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4YW1wbGUgPSBhd2FpdCB0aGlzLnJlYWRFeGFtcGxlKHVwZGF0ZVswXS5pZCk7XG4gICAgICAgICAgICBkYXRhc2V0SWQgPSBleGFtcGxlLmRhdGFzZXRfaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhc2V0SWQgPSB1cGRhdGVbMF0uZGF0YXNldF9pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlRXhhbXBsZXNNdWx0aXBhcnQoZGF0YXNldElkLCB1cGRhdGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgZGF0YXNldCB2ZXJzaW9uIGJ5IGNsb3Nlc3QgZGF0ZSBvciBleGFjdCB0YWcuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyB0byByZXNvbHZlIHRoZSBuZWFyZXN0IHZlcnNpb24gdG8gYSBnaXZlbiB0aW1lc3RhbXAgb3IgZm9yIGEgZ2l2ZW4gdGFnLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGdldHRpbmcgdGhlIGRhdGFzZXQgdmVyc2lvblxuICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGFzZXRJZCBUaGUgSUQgb2YgdGhlIGRhdGFzZXRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kYXRhc2V0TmFtZSBUaGUgbmFtZSBvZiB0aGUgZGF0YXNldFxuICAgICAqIEBwYXJhbSBvcHRpb25zLmFzT2YgVGhlIHRpbWVzdGFtcCBvZiB0aGUgZGF0YXNldCB0byByZXRyaWV2ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zLnRhZyBUaGUgdGFnIG9mIHRoZSBkYXRhc2V0IHRvIHJldHJpZXZlXG4gICAgICogQHJldHVybnMgVGhlIGRhdGFzZXQgdmVyc2lvblxuICAgICAqL1xuICAgIGFzeW5jIHJlYWREYXRhc2V0VmVyc2lvbih7IGRhdGFzZXRJZCwgZGF0YXNldE5hbWUsIGFzT2YsIHRhZywgfSkge1xuICAgICAgICBsZXQgcmVzb2x2ZWREYXRhc2V0SWQ7XG4gICAgICAgIGlmICghZGF0YXNldElkKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gYXdhaXQgdGhpcy5yZWFkRGF0YXNldCh7IGRhdGFzZXROYW1lIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZWREYXRhc2V0SWQgPSBkYXRhc2V0LmlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZWREYXRhc2V0SWQgPSBkYXRhc2V0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocmVzb2x2ZWREYXRhc2V0SWQpO1xuICAgICAgICBpZiAoKGFzT2YgJiYgdGFnKSB8fCAoIWFzT2YgJiYgIXRhZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4YWN0bHkgb25lIG9mIGFzT2YgYW5kIHRhZyBtdXN0IGJlIHNwZWNpZmllZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBpZiAoYXNPZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiYXNfb2ZcIiwgdHlwZW9mIGFzT2YgPT09IFwic3RyaW5nXCIgPyBhc09mIDogYXNPZi50b0lTT1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJ0YWdcIiwgdGFnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2RhdGFzZXRzLyR7cmVzb2x2ZWREYXRhc2V0SWR9L3ZlcnNpb24/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwicmVhZCBkYXRhc2V0IHZlcnNpb25cIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG4gICAgYXN5bmMgbGlzdERhdGFzZXRTcGxpdHMoeyBkYXRhc2V0SWQsIGRhdGFzZXROYW1lLCBhc09mLCB9KSB7XG4gICAgICAgIGxldCBkYXRhc2V0SWRfO1xuICAgICAgICBpZiAoZGF0YXNldElkID09PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGRhdGFzZXQgbmFtZSBvciBJRFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWQgIT09IHVuZGVmaW5lZCAmJiBkYXRhc2V0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZCwgbm90IGJvdGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YXNldElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWUgfSk7XG4gICAgICAgICAgICBkYXRhc2V0SWRfID0gZGF0YXNldC5pZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFzZXRJZF8gPSBkYXRhc2V0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZGF0YXNldElkXyk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgY29uc3QgZGF0YXNldF92ZXJzaW9uID0gYXNPZlxuICAgICAgICAgICAgPyB0eXBlb2YgYXNPZiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gYXNPZlxuICAgICAgICAgICAgICAgIDogYXNPZj8udG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChkYXRhc2V0X3ZlcnNpb24pIHtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJhc19vZlwiLCBkYXRhc2V0X3ZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5fZ2V0KGAvZGF0YXNldHMvJHtkYXRhc2V0SWRffS9zcGxpdHNgLCBwYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZURhdGFzZXRTcGxpdHMoeyBkYXRhc2V0SWQsIGRhdGFzZXROYW1lLCBzcGxpdE5hbWUsIGV4YW1wbGVJZHMsIHJlbW92ZSA9IGZhbHNlLCB9KSB7XG4gICAgICAgIGxldCBkYXRhc2V0SWRfO1xuICAgICAgICBpZiAoZGF0YXNldElkID09PSB1bmRlZmluZWQgJiYgZGF0YXNldE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGRhdGFzZXQgbmFtZSBvciBJRFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhc2V0SWQgIT09IHVuZGVmaW5lZCAmJiBkYXRhc2V0TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgZWl0aGVyIGRhdGFzZXROYW1lIG9yIGRhdGFzZXRJZCwgbm90IGJvdGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YXNldElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLnJlYWREYXRhc2V0KHsgZGF0YXNldE5hbWUgfSk7XG4gICAgICAgICAgICBkYXRhc2V0SWRfID0gZGF0YXNldC5pZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFzZXRJZF8gPSBkYXRhc2V0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZGF0YXNldElkXyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBzcGxpdF9uYW1lOiBzcGxpdE5hbWUsXG4gICAgICAgICAgICBleGFtcGxlczogZXhhbXBsZUlkcy5tYXAoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoaWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmVtb3ZlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2RhdGFzZXRzLyR7ZGF0YXNldElkX30vc3BsaXRzYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInVwZGF0ZSBkYXRhc2V0IHNwbGl0c1wiLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIExhbmdTbWl0aCB2ZXJzaW9ucywgdXNlIGBldmFsdWF0ZWAgZnJvbSBgbGFuZ3NtaXRoL2V2YWx1YXRpb25gIGluc3RlYWQuXG4gICAgICovXG4gICAgYXN5bmMgZXZhbHVhdGVSdW4ocnVuLCBldmFsdWF0b3IsIHsgc291cmNlSW5mbywgbG9hZENoaWxkUnVucywgcmVmZXJlbmNlRXhhbXBsZSwgfSA9IHsgbG9hZENoaWxkUnVuczogZmFsc2UgfSkge1xuICAgICAgICAoMCwgd2Fybl9qc18xLndhcm5PbmNlKShcIlRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgTGFuZ1NtaXRoIHZlcnNpb25zLCB1c2UgYGV2YWx1YXRlYCBmcm9tIGBsYW5nc21pdGgvZXZhbHVhdGlvbmAgaW5zdGVhZC5cIik7XG4gICAgICAgIGxldCBydW5fO1xuICAgICAgICBpZiAodHlwZW9mIHJ1biA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcnVuXyA9IGF3YWl0IHRoaXMucmVhZFJ1bihydW4sIHsgbG9hZENoaWxkUnVucyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcnVuID09PSBcIm9iamVjdFwiICYmIFwiaWRcIiBpbiBydW4pIHtcbiAgICAgICAgICAgIHJ1bl8gPSBydW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVuIHR5cGU6ICR7dHlwZW9mIHJ1bn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVuXy5yZWZlcmVuY2VfZXhhbXBsZV9pZCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgcnVuXy5yZWZlcmVuY2VfZXhhbXBsZV9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VFeGFtcGxlID0gYXdhaXQgdGhpcy5yZWFkRXhhbXBsZShydW5fLnJlZmVyZW5jZV9leGFtcGxlX2lkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmZWVkYmFja1Jlc3VsdCA9IGF3YWl0IGV2YWx1YXRvci5ldmFsdWF0ZVJ1bihydW5fLCByZWZlcmVuY2VFeGFtcGxlKTtcbiAgICAgICAgY29uc3QgW18sIGZlZWRiYWNrc10gPSBhd2FpdCB0aGlzLl9sb2dFdmFsdWF0aW9uRmVlZGJhY2soZmVlZGJhY2tSZXN1bHQsIHJ1bl8sIHNvdXJjZUluZm8pO1xuICAgICAgICByZXR1cm4gZmVlZGJhY2tzWzBdO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVGZWVkYmFjayhydW5JZCwga2V5LCB7IHNjb3JlLCB2YWx1ZSwgY29ycmVjdGlvbiwgY29tbWVudCwgc291cmNlSW5mbywgZmVlZGJhY2tTb3VyY2VUeXBlID0gXCJhcGlcIiwgc291cmNlUnVuSWQsIGZlZWRiYWNrSWQsIGZlZWRiYWNrQ29uZmlnLCBwcm9qZWN0SWQsIGNvbXBhcmF0aXZlRXhwZXJpbWVudElkLCB9KSB7XG4gICAgICAgIGlmICghcnVuSWQgJiYgIXByb2plY3RJZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT25lIG9mIHJ1bklkIG9yIHByb2plY3RJZCBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW5JZCAmJiBwcm9qZWN0SWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgb25lIG9mIHJ1bklkIG9yIHByb2plY3RJZCBjYW4gYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmVlZGJhY2tfc291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogZmVlZGJhY2tTb3VyY2VUeXBlID8/IFwiYXBpXCIsXG4gICAgICAgICAgICBtZXRhZGF0YTogc291cmNlSW5mbyA/PyB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNvdXJjZVJ1bklkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGZlZWRiYWNrX3NvdXJjZT8ubWV0YWRhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIWZlZWRiYWNrX3NvdXJjZS5tZXRhZGF0YVtcIl9fcnVuXCJdKSB7XG4gICAgICAgICAgICBmZWVkYmFja19zb3VyY2UubWV0YWRhdGFbXCJfX3J1blwiXSA9IHsgcnVuX2lkOiBzb3VyY2VSdW5JZCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmZWVkYmFja19zb3VyY2U/Lm1ldGFkYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGZlZWRiYWNrX3NvdXJjZS5tZXRhZGF0YVtcIl9fcnVuXCJdPy5ydW5faWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkoZmVlZGJhY2tfc291cmNlLm1ldGFkYXRhW1wiX19ydW5cIl0ucnVuX2lkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmZWVkYmFjayA9IHtcbiAgICAgICAgICAgIGlkOiBmZWVkYmFja0lkID8/IHV1aWQudjQoKSxcbiAgICAgICAgICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBzY29yZTogX2Zvcm1hdEZlZWRiYWNrU2NvcmUoc2NvcmUpLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBjb3JyZWN0aW9uLFxuICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgIGZlZWRiYWNrX3NvdXJjZTogZmVlZGJhY2tfc291cmNlLFxuICAgICAgICAgICAgY29tcGFyYXRpdmVfZXhwZXJpbWVudF9pZDogY29tcGFyYXRpdmVFeHBlcmltZW50SWQsXG4gICAgICAgICAgICBmZWVkYmFja0NvbmZpZyxcbiAgICAgICAgICAgIHNlc3Npb25faWQ6IHByb2plY3RJZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGZlZWRiYWNrKTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcGlVcmx9L2ZlZWRiYWNrYDtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiY3JlYXRlIGZlZWRiYWNrXCIsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmZWVkYmFjaztcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlRmVlZGJhY2soZmVlZGJhY2tJZCwgeyBzY29yZSwgdmFsdWUsIGNvcnJlY3Rpb24sIGNvbW1lbnQsIH0pIHtcbiAgICAgICAgY29uc3QgZmVlZGJhY2tVcGRhdGUgPSB7fTtcbiAgICAgICAgaWYgKHNjb3JlICE9PSB1bmRlZmluZWQgJiYgc2NvcmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZlZWRiYWNrVXBkYXRlW1wic2NvcmVcIl0gPSBfZm9ybWF0RmVlZGJhY2tTY29yZShzY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZlZWRiYWNrVXBkYXRlW1widmFsdWVcIl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29ycmVjdGlvbiAhPT0gdW5kZWZpbmVkICYmIGNvcnJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZlZWRiYWNrVXBkYXRlW1wiY29ycmVjdGlvblwiXSA9IGNvcnJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1lbnQgIT09IHVuZGVmaW5lZCAmJiBjb21tZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmZWVkYmFja1VwZGF0ZVtcImNvbW1lbnRcIl0gPSBjb21tZW50O1xuICAgICAgICB9XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGZlZWRiYWNrSWQpO1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZmVlZGJhY2tVcGRhdGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9mZWVkYmFjay8ke2ZlZWRiYWNrSWR9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwidXBkYXRlIGZlZWRiYWNrXCIsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHJlYWRGZWVkYmFjayhmZWVkYmFja0lkKSB7XG4gICAgICAgICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGZlZWRiYWNrSWQpO1xuICAgICAgICBjb25zdCBwYXRoID0gYC9mZWVkYmFjay8ke2ZlZWRiYWNrSWR9YDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9nZXQocGF0aCk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgYXN5bmMgZGVsZXRlRmVlZGJhY2soZmVlZGJhY2tJZCkge1xuICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShmZWVkYmFja0lkKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IGAvZmVlZGJhY2svJHtmZWVkYmFja0lkfWA7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2godGhpcy5hcGlVcmwgKyBwYXRoLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgYGRlbGV0ZSAke3BhdGh9YCwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgKmxpc3RGZWVkYmFjayh7IHJ1bklkcywgZmVlZGJhY2tLZXlzLCBmZWVkYmFja1NvdXJjZVR5cGVzLCB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIGlmIChydW5JZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcnVuSWQgb2YgcnVuSWRzKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocnVuSWQpO1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZChcInJ1blwiLCBydW5JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZlZWRiYWNrS2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZmVlZGJhY2tLZXlzKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKFwia2V5XCIsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZlZWRiYWNrU291cmNlVHlwZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBmZWVkYmFja1NvdXJjZVR5cGVzKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKFwic291cmNlXCIsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZmVlZGJhY2tzIG9mIHRoaXMuX2dldFBhZ2luYXRlZChcIi9mZWVkYmFja1wiLCBxdWVyeVBhcmFtcykpIHtcbiAgICAgICAgICAgIHlpZWxkKiBmZWVkYmFja3M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHByZXNpZ25lZCBmZWVkYmFjayB0b2tlbiBhbmQgVVJMLlxuICAgICAqXG4gICAgICogVGhlIHRva2VuIGNhbiBiZSB1c2VkIHRvIGF1dGhvcml6ZSBmZWVkYmFjayBtZXRyaWNzIHdpdGhvdXRcbiAgICAgKiBuZWVkaW5nIGFuIEFQSSBrZXkuIFRoaXMgaXMgdXNlZnVsIGZvciBnaXZpbmcgYnJvd3Nlci1iYXNlZFxuICAgICAqIGFwcGxpY2F0aW9ucyB0aGUgYWJpbGl0eSB0byBzdWJtaXQgZmVlZGJhY2sgd2l0aG91dCBuZWVkaW5nXG4gICAgICogdG8gZXhwb3NlIGFuIEFQSSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcnVuSWQgVGhlIElEIG9mIHRoZSBydW4uXG4gICAgICogQHBhcmFtIGZlZWRiYWNrS2V5IFRoZSBmZWVkYmFjayBrZXkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgdG9rZW4uXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZXhwaXJhdGlvbiBUaGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgdG9rZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEZlZWRiYWNrSW5nZXN0VG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlUHJlc2lnbmVkRmVlZGJhY2tUb2tlbihydW5JZCwgZmVlZGJhY2tLZXksIHsgZXhwaXJhdGlvbiwgZmVlZGJhY2tDb25maWcsIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgcnVuX2lkOiBydW5JZCxcbiAgICAgICAgICAgIGZlZWRiYWNrX2tleTogZmVlZGJhY2tLZXksXG4gICAgICAgICAgICBmZWVkYmFja19jb25maWc6IGZlZWRiYWNrQ29uZmlnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoZXhwaXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBpcmF0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgYm9keVtcImV4cGlyZXNfYXRcIl0gPSBleHBpcmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXhwaXJhdGlvbj8uaG91cnMgfHwgZXhwaXJhdGlvbj8ubWludXRlcyB8fCBleHBpcmF0aW9uPy5kYXlzKSB7XG4gICAgICAgICAgICAgICAgYm9keVtcImV4cGlyZXNfaW5cIl0gPSBleHBpcmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYm9keVtcImV4cGlyZXNfaW5cIl0gPSB7XG4gICAgICAgICAgICAgICAgaG91cnM6IDMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRCb2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vZmVlZGJhY2svdG9rZW5zYCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keTogc2VyaWFsaXplZEJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiY3JlYXRlIHByZXNpZ25lZCBmZWVkYmFjayB0b2tlblwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVDb21wYXJhdGl2ZUV4cGVyaW1lbnQoeyBuYW1lLCBleHBlcmltZW50SWRzLCByZWZlcmVuY2VEYXRhc2V0SWQsIGNyZWF0ZWRBdCwgZGVzY3JpcHRpb24sIG1ldGFkYXRhLCBpZCwgfSkge1xuICAgICAgICBpZiAoZXhwZXJpbWVudElkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0IGxlYXN0IG9uZSBleHBlcmltZW50IGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVmZXJlbmNlRGF0YXNldElkKSB7XG4gICAgICAgICAgICByZWZlcmVuY2VEYXRhc2V0SWQgPSAoYXdhaXQgdGhpcy5yZWFkUHJvamVjdCh7XG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBleHBlcmltZW50SWRzWzBdLFxuICAgICAgICAgICAgfSkpLnJlZmVyZW5jZV9kYXRhc2V0X2lkO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVmZXJlbmNlRGF0YXNldElkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgcmVmZXJlbmNlIGRhdGFzZXQgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRfaWRzOiBleHBlcmltZW50SWRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlX2RhdGFzZXRfaWQ6IHJlZmVyZW5jZURhdGFzZXRJZCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY3JlYXRlZF9hdDogKGNyZWF0ZWRBdCA/PyBuZXcgRGF0ZSgpKT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGV4dHJhOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG1ldGFkYXRhKVxuICAgICAgICAgICAgYm9keS5leHRyYVtcIm1ldGFkYXRhXCJdID0gbWV0YWRhdGE7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRCb2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vZGF0YXNldHMvY29tcGFyYXRpdmVgLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5OiBzZXJpYWxpemVkQm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJjcmVhdGUgY29tcGFyYXRpdmUgZXhwZXJpbWVudFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIHByZXNpZ25lZCBmZWVkYmFjayB0b2tlbnMgZm9yIGEgZ2l2ZW4gcnVuIElELlxuICAgICAqIEBwYXJhbSBydW5JZCBUaGUgSUQgb2YgdGhlIHJ1bi5cbiAgICAgKiBAcmV0dXJucyBBbiBhc3luYyBpdGVyYWJsZSBvZiBGZWVkYmFja0luZ2VzdFRva2VuIG9iamVjdHMuXG4gICAgICovXG4gICAgYXN5bmMgKmxpc3RQcmVzaWduZWRGZWVkYmFja1Rva2VucyhydW5JZCkge1xuICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShydW5JZCk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBydW5faWQ6IHJ1bklkIH0pO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHRva2VucyBvZiB0aGlzLl9nZXRQYWdpbmF0ZWQoXCIvZmVlZGJhY2svdG9rZW5zXCIsIHBhcmFtcykpIHtcbiAgICAgICAgICAgIHlpZWxkKiB0b2tlbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3NlbGVjdEV2YWxSZXN1bHRzKHJlc3VsdHMpIHtcbiAgICAgICAgbGV0IHJlc3VsdHNfO1xuICAgICAgICBpZiAoXCJyZXN1bHRzXCIgaW4gcmVzdWx0cykge1xuICAgICAgICAgICAgcmVzdWx0c18gPSByZXN1bHRzLnJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgICAgICAgICAgcmVzdWx0c18gPSByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0c18gPSBbcmVzdWx0c107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHNfO1xuICAgIH1cbiAgICBhc3luYyBfbG9nRXZhbHVhdGlvbkZlZWRiYWNrKGV2YWx1YXRvclJlc3BvbnNlLCBydW4sIHNvdXJjZUluZm8pIHtcbiAgICAgICAgY29uc3QgZXZhbFJlc3VsdHMgPSB0aGlzLl9zZWxlY3RFdmFsUmVzdWx0cyhldmFsdWF0b3JSZXNwb25zZSk7XG4gICAgICAgIGNvbnN0IGZlZWRiYWNrcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlcyBvZiBldmFsUmVzdWx0cykge1xuICAgICAgICAgICAgbGV0IHNvdXJjZUluZm9fID0gc291cmNlSW5mbyB8fCB7fTtcbiAgICAgICAgICAgIGlmIChyZXMuZXZhbHVhdG9ySW5mbykge1xuICAgICAgICAgICAgICAgIHNvdXJjZUluZm9fID0geyAuLi5yZXMuZXZhbHVhdG9ySW5mbywgLi4uc291cmNlSW5mb18gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBydW5JZF8gPSBudWxsO1xuICAgICAgICAgICAgaWYgKHJlcy50YXJnZXRSdW5JZCkge1xuICAgICAgICAgICAgICAgIHJ1bklkXyA9IHJlcy50YXJnZXRSdW5JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJ1bikge1xuICAgICAgICAgICAgICAgIHJ1bklkXyA9IHJ1bi5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlZWRiYWNrcy5wdXNoKGF3YWl0IHRoaXMuY3JlYXRlRmVlZGJhY2socnVuSWRfLCByZXMua2V5LCB7XG4gICAgICAgICAgICAgICAgc2NvcmU6IHJlcy5zY29yZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzLnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbW1lbnQ6IHJlcy5jb21tZW50LFxuICAgICAgICAgICAgICAgIGNvcnJlY3Rpb246IHJlcy5jb3JyZWN0aW9uLFxuICAgICAgICAgICAgICAgIHNvdXJjZUluZm86IHNvdXJjZUluZm9fLFxuICAgICAgICAgICAgICAgIHNvdXJjZVJ1bklkOiByZXMuc291cmNlUnVuSWQsXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tDb25maWc6IHJlcy5mZWVkYmFja0NvbmZpZyxcbiAgICAgICAgICAgICAgICBmZWVkYmFja1NvdXJjZVR5cGU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2V2YWxSZXN1bHRzLCBmZWVkYmFja3NdO1xuICAgIH1cbiAgICBhc3luYyBsb2dFdmFsdWF0aW9uRmVlZGJhY2soZXZhbHVhdG9yUmVzcG9uc2UsIHJ1biwgc291cmNlSW5mbykge1xuICAgICAgICBjb25zdCBbcmVzdWx0c10gPSBhd2FpdCB0aGlzLl9sb2dFdmFsdWF0aW9uRmVlZGJhY2soZXZhbHVhdG9yUmVzcG9uc2UsIHJ1biwgc291cmNlSW5mbyk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBUEkgZm9yIG1hbmFnaW5nIGFubm90YXRpb24gcXVldWVzXG4gICAgICovXG4gICAgLyoqXG4gICAgICogTGlzdCB0aGUgYW5ub3RhdGlvbiBxdWV1ZXMgb24gdGhlIExhbmdTbWl0aCBBUEkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbGlzdGluZyBhbm5vdGF0aW9uIHF1ZXVlc1xuICAgICAqIEBwYXJhbSBvcHRpb25zLnF1ZXVlSWRzIC0gVGhlIElEcyBvZiB0aGUgcXVldWVzIHRvIGZpbHRlciBieVxuICAgICAqIEBwYXJhbSBvcHRpb25zLm5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcXVldWUgdG8gZmlsdGVyIGJ5XG4gICAgICogQHBhcmFtIG9wdGlvbnMubmFtZUNvbnRhaW5zIC0gVGhlIHN1YnN0cmluZyB0aGF0IHRoZSBxdWV1ZSBuYW1lIHNob3VsZCBjb250YWluXG4gICAgICogQHBhcmFtIG9wdGlvbnMubGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVzIHRvIHJldHVyblxuICAgICAqIEByZXR1cm5zIEFuIGl0ZXJhdG9yIG9mIEFubm90YXRpb25RdWV1ZSBvYmplY3RzXG4gICAgICovXG4gICAgYXN5bmMgKmxpc3RBbm5vdGF0aW9uUXVldWVzKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlSWRzLCBuYW1lLCBuYW1lQ29udGFpbnMsIGxpbWl0IH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIGlmIChxdWV1ZUlkcykge1xuICAgICAgICAgICAgcXVldWVJZHMuZm9yRWFjaCgoaWQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShpZCwgYHF1ZXVlSWRzWyR7aX1dYCk7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcImlkc1wiLCBpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSlcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoXCJuYW1lXCIsIG5hbWUpO1xuICAgICAgICBpZiAobmFtZUNvbnRhaW5zKVxuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcIm5hbWVfY29udGFpbnNcIiwgbmFtZUNvbnRhaW5zKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImxpbWl0XCIsIChsaW1pdCAhPT0gdW5kZWZpbmVkID8gTWF0aC5taW4obGltaXQsIDEwMCkgOiAxMDApLnRvU3RyaW5nKCkpO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHF1ZXVlcyBvZiB0aGlzLl9nZXRQYWdpbmF0ZWQoXCIvYW5ub3RhdGlvbi1xdWV1ZXNcIiwgcGFyYW1zKSkge1xuICAgICAgICAgICAgeWllbGQqIHF1ZXVlcztcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBjb3VudCA+PSBsaW1pdClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBxdWV1ZSBvbiB0aGUgTGFuZ1NtaXRoIEFQSS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBjcmVhdGluZyBhbiBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICogQHBhcmFtIG9wdGlvbnMubmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGVzY3JpcHRpb24gLSBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGFubm90YXRpb24gcXVldWVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5xdWV1ZUlkIC0gVGhlIElEIG9mIHRoZSBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgQW5ub3RhdGlvblF1ZXVlIG9iamVjdFxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUFubm90YXRpb25RdWV1ZShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIHF1ZXVlSWQsIHJ1YnJpY0luc3RydWN0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGlkOiBxdWV1ZUlkIHx8IHV1aWQudjQoKSxcbiAgICAgICAgICAgIHJ1YnJpY19pbnN0cnVjdGlvbnM6IHJ1YnJpY0luc3RydWN0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZEJvZHkgPSBKU09OLnN0cmluZ2lmeShPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYm9keSkuZmlsdGVyKChbXywgdl0pID0+IHYgIT09IHVuZGVmaW5lZCkpKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9hbm5vdGF0aW9uLXF1ZXVlc2AsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHk6IHNlcmlhbGl6ZWRCb2R5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImNyZWF0ZSBhbm5vdGF0aW9uIHF1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYW4gYW5ub3RhdGlvbiBxdWV1ZSB3aXRoIHRoZSBzcGVjaWZpZWQgcXVldWUgSUQuXG4gICAgICogQHBhcmFtIHF1ZXVlSWQgLSBUaGUgSUQgb2YgdGhlIGFubm90YXRpb24gcXVldWUgdG8gcmVhZFxuICAgICAqIEByZXR1cm5zIFRoZSBBbm5vdGF0aW9uUXVldWVXaXRoRGV0YWlscyBvYmplY3RcbiAgICAgKi9cbiAgICBhc3luYyByZWFkQW5ub3RhdGlvblF1ZXVlKHF1ZXVlSWQpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9hbm5vdGF0aW9uLXF1ZXVlcy8keygwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHF1ZXVlSWQsIFwicXVldWVJZFwiKX1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJyZWFkIGFubm90YXRpb24gcXVldWVcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIGFubm90YXRpb24gcXVldWUgd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXVlIElELlxuICAgICAqIEBwYXJhbSBxdWV1ZUlkIC0gVGhlIElEIG9mIHRoZSBhbm5vdGF0aW9uIHF1ZXVlIHRvIHVwZGF0ZVxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHRoZSBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICogQHBhcmFtIG9wdGlvbnMubmFtZSAtIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGFubm90YXRpb24gcXVldWVcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5kZXNjcmlwdGlvbiAtIFRoZSBuZXcgZGVzY3JpcHRpb24gZm9yIHRoZSBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICovXG4gICAgYXN5bmMgdXBkYXRlQW5ub3RhdGlvblF1ZXVlKHF1ZXVlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBkZXNjcmlwdGlvbiwgcnVicmljSW5zdHJ1Y3Rpb25zIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgcnVicmljX2luc3RydWN0aW9uczogcnVicmljSW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vYW5ub3RhdGlvbi1xdWV1ZXMvJHsoMCwgX3V1aWRfanNfMS5hc3NlcnRVdWlkKShxdWV1ZUlkLCBcInF1ZXVlSWRcIil9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwidXBkYXRlIGFubm90YXRpb24gcXVldWVcIiwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlIGFuIGFubm90YXRpb24gcXVldWUgd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXVlIElELlxuICAgICAqIEBwYXJhbSBxdWV1ZUlkIC0gVGhlIElEIG9mIHRoZSBhbm5vdGF0aW9uIHF1ZXVlIHRvIGRlbGV0ZVxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUFubm90YXRpb25RdWV1ZShxdWV1ZUlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2Fubm90YXRpb24tcXVldWVzLyR7KDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocXVldWVJZCwgXCJxdWV1ZUlkXCIpfWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJkZWxldGUgYW5ub3RhdGlvbiBxdWV1ZVwiLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgcnVucyB0byBhbiBhbm5vdGF0aW9uIHF1ZXVlIHdpdGggdGhlIHNwZWNpZmllZCBxdWV1ZSBJRC5cbiAgICAgKiBAcGFyYW0gcXVldWVJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3RhdGlvbiBxdWV1ZVxuICAgICAqIEBwYXJhbSBydW5JZHMgLSBUaGUgSURzIG9mIHRoZSBydW5zIHRvIGJlIGFkZGVkIHRvIHRoZSBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICovXG4gICAgYXN5bmMgYWRkUnVuc1RvQW5ub3RhdGlvblF1ZXVlKHF1ZXVlSWQsIHJ1bklkcykge1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocnVuSWRzLm1hcCgoaWQsIGkpID0+ICgwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKGlkLCBgcnVuSWRzWyR7aX1dYCkudG9TdHJpbmcoKSkpO1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9hbm5vdGF0aW9uLXF1ZXVlcy8keygwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHF1ZXVlSWQsIFwicXVldWVJZFwiKX0vcnVuc2AsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiYWRkIHJ1bnMgdG8gYW5ub3RhdGlvbiBxdWV1ZVwiLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBydW4gZnJvbSBhbiBhbm5vdGF0aW9uIHF1ZXVlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICogQHBhcmFtIHF1ZXVlSWQgLSBUaGUgSUQgb2YgdGhlIGFubm90YXRpb24gcXVldWVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHJ1biB0byByZXRyaWV2ZVxuICAgICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgUnVuV2l0aEFubm90YXRpb25RdWV1ZUluZm8gb2JqZWN0XG4gICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBydW4gaXMgbm90IGZvdW5kIGF0IHRoZSBnaXZlbiBpbmRleCBvciBmb3Igb3RoZXIgQVBJLXJlbGF0ZWQgZXJyb3JzXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UnVuRnJvbUFubm90YXRpb25RdWV1ZShxdWV1ZUlkLCBpbmRleCkge1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gYC9hbm5vdGF0aW9uLXF1ZXVlcy8keygwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHF1ZXVlSWQsIFwicXVldWVJZFwiKX0vcnVuYDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfSR7YmFzZVVybH0vJHtpbmRleH1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJnZXQgcnVuIGZyb20gYW5ub3RhdGlvbiBxdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWxldGUgYSBydW4gZnJvbSBhbiBhbiBhbm5vdGF0aW9uIHF1ZXVlLlxuICAgICAqIEBwYXJhbSBxdWV1ZUlkIC0gVGhlIElEIG9mIHRoZSBhbm5vdGF0aW9uIHF1ZXVlIHRvIGRlbGV0ZSB0aGUgcnVuIGZyb21cbiAgICAgKiBAcGFyYW0gcXVldWVSdW5JZCAtIFRoZSBJRCBvZiB0aGUgcnVuIHRvIGRlbGV0ZSBmcm9tIHRoZSBhbm5vdGF0aW9uIHF1ZXVlXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlUnVuRnJvbUFubm90YXRpb25RdWV1ZShxdWV1ZUlkLCBxdWV1ZVJ1bklkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2Fubm90YXRpb24tcXVldWVzLyR7KDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocXVldWVJZCwgXCJxdWV1ZUlkXCIpfS9ydW5zLyR7KDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkocXVldWVSdW5JZCwgXCJxdWV1ZVJ1bklkXCIpfWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJkZWxldGUgcnVuIGZyb20gYW5ub3RhdGlvbiBxdWV1ZVwiLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHNpemUgb2YgYW4gYW5ub3RhdGlvbiBxdWV1ZS5cbiAgICAgKiBAcGFyYW0gcXVldWVJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3RhdGlvbiBxdWV1ZVxuICAgICAqL1xuICAgIGFzeW5jIGdldFNpemVGcm9tQW5ub3RhdGlvblF1ZXVlKHF1ZXVlSWQpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9hbm5vdGF0aW9uLXF1ZXVlcy8keygwLCBfdXVpZF9qc18xLmFzc2VydFV1aWQpKHF1ZXVlSWQsIFwicXVldWVJZFwiKX0vc2l6ZWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcImdldCBzaXplIGZyb20gYW5ub3RhdGlvbiBxdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICBhc3luYyBfY3VycmVudFRlbmFudElzT3duZXIob3duZXIpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLl9nZXRTZXR0aW5ncygpO1xuICAgICAgICByZXR1cm4gb3duZXIgPT0gXCItXCIgfHwgc2V0dGluZ3MudGVuYW50X2hhbmRsZSA9PT0gb3duZXI7XG4gICAgfVxuICAgIGFzeW5jIF9vd25lckNvbmZsaWN0RXJyb3IoYWN0aW9uLCBvd25lcikge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuX2dldFNldHRpbmdzKCk7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoYENhbm5vdCAke2FjdGlvbn0gZm9yIGFub3RoZXIgdGVuYW50LlxcblxuICAgICAgQ3VycmVudCB0ZW5hbnQ6ICR7c2V0dGluZ3MudGVuYW50X2hhbmRsZX1cXG5cbiAgICAgIFJlcXVlc3RlZCB0ZW5hbnQ6ICR7b3duZXJ9YCk7XG4gICAgfVxuICAgIGFzeW5jIF9nZXRMYXRlc3RDb21taXRIYXNoKHByb21wdE93bmVyQW5kTmFtZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L2NvbW1pdHMvJHtwcm9tcHRPd25lckFuZE5hbWV9Lz9saW1pdD0kezF9Jm9mZnNldD0kezB9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiZ2V0IGxhdGVzdCBjb21taXQgaGFzaFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAoanNvbi5jb21taXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbi5jb21taXRzWzBdLmNvbW1pdF9oYXNoO1xuICAgIH1cbiAgICBhc3luYyBfbGlrZU9yVW5saWtlUHJvbXB0KHByb21wdElkZW50aWZpZXIsIGxpa2UpIHtcbiAgICAgICAgY29uc3QgW293bmVyLCBwcm9tcHROYW1lLCBfXSA9ICgwLCBwcm9tcHRzX2pzXzEucGFyc2VQcm9tcHRJZGVudGlmaWVyKShwcm9tcHRJZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHsgbGlrZTogbGlrZSB9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9saWtlcy8ke293bmVyfS8ke3Byb21wdE5hbWV9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgYCR7bGlrZSA/IFwibGlrZVwiIDogXCJ1bmxpa2VcIn0gcHJvbXB0YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG4gICAgYXN5bmMgX2dldFByb21wdFVybChwcm9tcHRJZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IFtvd25lciwgcHJvbXB0TmFtZSwgY29tbWl0SGFzaF0gPSAoMCwgcHJvbXB0c19qc18xLnBhcnNlUHJvbXB0SWRlbnRpZmllcikocHJvbXB0SWRlbnRpZmllcik7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuX2N1cnJlbnRUZW5hbnRJc093bmVyKG93bmVyKSkpIHtcbiAgICAgICAgICAgIGlmIChjb21taXRIYXNoICE9PSBcImxhdGVzdFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0SG9zdFVybCgpfS9odWIvJHtvd25lcn0vJHtwcm9tcHROYW1lfS8ke2NvbW1pdEhhc2guc3Vic3RyaW5nKDAsIDgpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5nZXRIb3N0VXJsKCl9L2h1Yi8ke293bmVyfS8ke3Byb21wdE5hbWV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gYXdhaXQgdGhpcy5fZ2V0U2V0dGluZ3MoKTtcbiAgICAgICAgICAgIGlmIChjb21taXRIYXNoICE9PSBcImxhdGVzdFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0SG9zdFVybCgpfS9wcm9tcHRzLyR7cHJvbXB0TmFtZX0vJHtjb21taXRIYXNoLnN1YnN0cmluZygwLCA4KX0/b3JnYW5pemF0aW9uSWQ9JHtzZXR0aW5ncy5pZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0SG9zdFVybCgpfS9wcm9tcHRzLyR7cHJvbXB0TmFtZX0/b3JnYW5pemF0aW9uSWQ9JHtzZXR0aW5ncy5pZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHByb21wdEV4aXN0cyhwcm9tcHRJZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IGF3YWl0IHRoaXMuZ2V0UHJvbXB0KHByb21wdElkZW50aWZpZXIpO1xuICAgICAgICByZXR1cm4gISFwcm9tcHQ7XG4gICAgfVxuICAgIGFzeW5jIGxpa2VQcm9tcHQocHJvbXB0SWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGlrZU9yVW5saWtlUHJvbXB0KHByb21wdElkZW50aWZpZXIsIHRydWUpO1xuICAgIH1cbiAgICBhc3luYyB1bmxpa2VQcm9tcHQocHJvbXB0SWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGlrZU9yVW5saWtlUHJvbXB0KHByb21wdElkZW50aWZpZXIsIGZhbHNlKTtcbiAgICB9XG4gICAgYXN5bmMgKmxpc3RDb21taXRzKHByb21wdE93bmVyQW5kTmFtZSkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNvbW1pdHMgb2YgdGhpcy5fZ2V0UGFnaW5hdGVkKGAvY29tbWl0cy8ke3Byb21wdE93bmVyQW5kTmFtZX0vYCwgbmV3IFVSTFNlYXJjaFBhcmFtcygpLCAocmVzKSA9PiByZXMuY29tbWl0cykpIHtcbiAgICAgICAgICAgIHlpZWxkKiBjb21taXRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jICpsaXN0UHJvbXB0cyhvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcInNvcnRfZmllbGRcIiwgb3B0aW9ucz8uc29ydEZpZWxkID8/IFwidXBkYXRlZF9hdFwiKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcInNvcnRfZGlyZWN0aW9uXCIsIFwiZGVzY1wiKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImlzX2FyY2hpdmVkXCIsICghIW9wdGlvbnM/LmlzQXJjaGl2ZWQpLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAob3B0aW9ucz8uaXNQdWJsaWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcImlzX3B1YmxpY1wiLCBvcHRpb25zLmlzUHVibGljLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zPy5xdWVyeSkge1xuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChcInF1ZXJ5XCIsIG9wdGlvbnMucXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcHJvbXB0cyBvZiB0aGlzLl9nZXRQYWdpbmF0ZWQoXCIvcmVwb3NcIiwgcGFyYW1zLCAocmVzKSA9PiByZXMucmVwb3MpKSB7XG4gICAgICAgICAgICB5aWVsZCogcHJvbXB0cztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZXRQcm9tcHQocHJvbXB0SWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCBbb3duZXIsIHByb21wdE5hbWUsIF9dID0gKDAsIHByb21wdHNfanNfMS5wYXJzZVByb21wdElkZW50aWZpZXIpKHByb21wdElkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3JlcG9zLyR7b3duZXJ9LyR7cHJvbXB0TmFtZX1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiZ2V0IHByb21wdFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZT8uanNvbigpO1xuICAgICAgICBpZiAocmVzdWx0Py5yZXBvKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlcG87XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjcmVhdGVQcm9tcHQocHJvbXB0SWRlbnRpZmllciwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuX2dldFNldHRpbmdzKCk7XG4gICAgICAgIGlmIChvcHRpb25zPy5pc1B1YmxpYyAmJiAhc2V0dGluZ3MudGVuYW50X2hhbmRsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY3JlYXRlIGEgcHVibGljIHByb21wdCB3aXRob3V0IGZpcnN0XFxuXG4gICAgICAgIGNyZWF0aW5nIGEgTGFuZ0NoYWluIEh1YiBoYW5kbGUuXG4gICAgICAgIFlvdSBjYW4gYWRkIGEgaGFuZGxlIGJ5IGNyZWF0aW5nIGEgcHVibGljIHByb21wdCBhdDpcXG5cbiAgICAgICAgaHR0cHM6Ly9zbWl0aC5sYW5nY2hhaW4uY29tL3Byb21wdHNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbb3duZXIsIHByb21wdE5hbWUsIF9dID0gKDAsIHByb21wdHNfanNfMS5wYXJzZVByb21wdElkZW50aWZpZXIpKHByb21wdElkZW50aWZpZXIpO1xuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLl9jdXJyZW50VGVuYW50SXNPd25lcihvd25lcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLl9vd25lckNvbmZsaWN0RXJyb3IoXCJjcmVhdGUgYSBwcm9tcHRcIiwgb3duZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICByZXBvX2hhbmRsZTogcHJvbXB0TmFtZSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5kZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnM/LnJlYWRtZSAmJiB7IHJlYWRtZTogb3B0aW9ucy5yZWFkbWUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8udGFncyAmJiB7IHRhZ3M6IG9wdGlvbnMudGFncyB9KSxcbiAgICAgICAgICAgIGlzX3B1YmxpYzogISFvcHRpb25zPy5pc1B1YmxpYyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3JlcG9zL2AsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgLi4udGhpcy5oZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiY3JlYXRlIHByb21wdFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IHJlcG8gfSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgcmV0dXJuIHJlcG87XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZUNvbW1pdChwcm9tcHRJZGVudGlmaWVyLCBvYmplY3QsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5wcm9tcHRFeGlzdHMocHJvbXB0SWRlbnRpZmllcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9tcHQgZG9lcyBub3QgZXhpc3QsIHlvdSBtdXN0IGNyZWF0ZSBpdCBmaXJzdC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW293bmVyLCBwcm9tcHROYW1lLCBfXSA9ICgwLCBwcm9tcHRzX2pzXzEucGFyc2VQcm9tcHRJZGVudGlmaWVyKShwcm9tcHRJZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXJlbnRDb21taXRIYXNoID0gb3B0aW9ucz8ucGFyZW50Q29tbWl0SGFzaCA9PT0gXCJsYXRlc3RcIiB8fCAhb3B0aW9ucz8ucGFyZW50Q29tbWl0SGFzaFxuICAgICAgICAgICAgPyBhd2FpdCB0aGlzLl9nZXRMYXRlc3RDb21taXRIYXNoKGAke293bmVyfS8ke3Byb21wdE5hbWV9YClcbiAgICAgICAgICAgIDogb3B0aW9ucz8ucGFyZW50Q29tbWl0SGFzaDtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLFxuICAgICAgICAgICAgcGFyZW50X2NvbW1pdDogcmVzb2x2ZWRQYXJlbnRDb21taXRIYXNoLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0vY29tbWl0cy8ke293bmVyfS8ke3Byb21wdE5hbWV9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJjcmVhdGUgY29tbWl0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb21wdFVybChgJHtvd25lcn0vJHtwcm9tcHROYW1lfSR7cmVzdWx0LmNvbW1pdF9oYXNoID8gYDoke3Jlc3VsdC5jb21taXRfaGFzaH1gIDogXCJcIn1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIGV4YW1wbGVzIHdpdGggYXR0YWNobWVudHMgdXNpbmcgbXVsdGlwYXJ0IGZvcm0gZGF0YS5cbiAgICAgKiBAcGFyYW0gdXBkYXRlcyBMaXN0IG9mIEV4YW1wbGVVcGRhdGVXaXRoQXR0YWNobWVudHMgb2JqZWN0cyB0byB1cHNlcnRcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHdpdGggdGhlIHVwZGF0ZSByZXNwb25zZVxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZUV4YW1wbGVzTXVsdGlwYXJ0KGRhdGFzZXRJZCwgdXBkYXRlcyA9IFtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVFeGFtcGxlc011bHRpcGFydChkYXRhc2V0SWQsIHVwZGF0ZXMpO1xuICAgIH1cbiAgICBhc3luYyBfdXBkYXRlRXhhbXBsZXNNdWx0aXBhcnQoZGF0YXNldElkLCB1cGRhdGVzID0gW10pIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5fZ2V0RGF0YXNldEV4YW1wbGVzTXVsdGlQYXJ0U3VwcG9ydCgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91ciBMYW5nU21pdGggZGVwbG95bWVudCBkb2VzIG5vdCBhbGxvdyB1c2luZyB0aGUgbXVsdGlwYXJ0IGV4YW1wbGVzIGVuZHBvaW50LCBwbGVhc2UgdXBncmFkZSB5b3VyIGRlcGxveW1lbnQgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGV4YW1wbGUgb2YgdXBkYXRlcykge1xuICAgICAgICAgICAgY29uc3QgZXhhbXBsZUlkID0gZXhhbXBsZS5pZDtcbiAgICAgICAgICAgIC8vIFByZXBhcmUgdGhlIG1haW4gZXhhbXBsZSBib2R5XG4gICAgICAgICAgICBjb25zdCBleGFtcGxlQm9keSA9IHtcbiAgICAgICAgICAgICAgICAuLi4oZXhhbXBsZS5tZXRhZGF0YSAmJiB7IG1ldGFkYXRhOiBleGFtcGxlLm1ldGFkYXRhIH0pLFxuICAgICAgICAgICAgICAgIC4uLihleGFtcGxlLnNwbGl0ICYmIHsgc3BsaXQ6IGV4YW1wbGUuc3BsaXQgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQWRkIG1haW4gZXhhbXBsZSBkYXRhXG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZEV4YW1wbGUgPSAoMCwgaW5kZXhfanNfMi5zZXJpYWxpemUpKGV4YW1wbGVCb2R5LCBgU2VyaWFsaXppbmcgYm9keSBmb3IgZXhhbXBsZSB3aXRoIGlkOiAke2V4YW1wbGVJZH1gKTtcbiAgICAgICAgICAgIGNvbnN0IGV4YW1wbGVCbG9iID0gbmV3IEJsb2IoW3N0cmluZ2lmaWVkRXhhbXBsZV0sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGV4YW1wbGVJZCwgZXhhbXBsZUJsb2IpO1xuICAgICAgICAgICAgLy8gQWRkIGlucHV0cyBpZiBwcmVzZW50XG4gICAgICAgICAgICBpZiAoZXhhbXBsZS5pbnB1dHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZElucHV0cyA9ICgwLCBpbmRleF9qc18yLnNlcmlhbGl6ZSkoZXhhbXBsZS5pbnB1dHMsIGBTZXJpYWxpemluZyBpbnB1dHMgZm9yIGV4YW1wbGUgd2l0aCBpZDogJHtleGFtcGxlSWR9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRzQmxvYiA9IG5ldyBCbG9iKFtzdHJpbmdpZmllZElucHV0c10sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGAke2V4YW1wbGVJZH0uaW5wdXRzYCwgaW5wdXRzQmxvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZGQgb3V0cHV0cyBpZiBwcmVzZW50XG4gICAgICAgICAgICBpZiAoZXhhbXBsZS5vdXRwdXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZWRPdXRwdXRzID0gKDAsIGluZGV4X2pzXzIuc2VyaWFsaXplKShleGFtcGxlLm91dHB1dHMsIGBTZXJpYWxpemluZyBvdXRwdXRzIHdobGUgdXBkYXRpbmcgZXhhbXBsZSB3aXRoIGlkOiAke2V4YW1wbGVJZH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRzQmxvYiA9IG5ldyBCbG9iKFtzdHJpbmdpZmllZE91dHB1dHNdLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgJHtleGFtcGxlSWR9Lm91dHB1dHNgLCBvdXRwdXRzQmxvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZGQgYXR0YWNobWVudHMgaWYgcHJlc2VudFxuICAgICAgICAgICAgaWYgKGV4YW1wbGUuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBhdHRhY2htZW50XSBvZiBPYmplY3QuZW50cmllcyhleGFtcGxlLmF0dGFjaG1lbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRhY2htZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgW21pbWVUeXBlLCBkYXRhXSA9IGF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IGF0dGFjaG1lbnQubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYXR0YWNobWVudC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRCbG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBgJHttaW1lVHlwZX07IGxlbmd0aD0ke2RhdGEuYnl0ZUxlbmd0aH1gLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGAke2V4YW1wbGVJZH0uYXR0YWNobWVudC4ke25hbWV9YCwgYXR0YWNobWVudEJsb2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleGFtcGxlLmF0dGFjaG1lbnRzX29wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZEF0dGFjaG1lbnRzT3BlcmF0aW9ucyA9ICgwLCBpbmRleF9qc18yLnNlcmlhbGl6ZSkoZXhhbXBsZS5hdHRhY2htZW50c19vcGVyYXRpb25zLCBgU2VyaWFsaXppbmcgYXR0YWNobWVudHMgd2hpbGUgdXBkYXRpbmcgZXhhbXBsZSB3aXRoIGlkOiAke2V4YW1wbGVJZH1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50c09wZXJhdGlvbnNCbG9iID0gbmV3IEJsb2IoW3N0cmluZ2lmaWVkQXR0YWNobWVudHNPcGVyYXRpb25zXSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYCR7ZXhhbXBsZUlkfS5hdHRhY2htZW50c19vcGVyYXRpb25zYCwgYXR0YWNobWVudHNPcGVyYXRpb25zQmxvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YXNldElkVG9Vc2UgPSBkYXRhc2V0SWQgPz8gdXBkYXRlc1swXT8uZGF0YXNldF9pZDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfSR7dGhpcy5fZ2V0UGxhdGZvcm1FbmRwb2ludFBhdGgoYGRhdGFzZXRzLyR7ZGF0YXNldElkVG9Vc2V9L2V4YW1wbGVzYCl9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0X21zKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZldGNoT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJ1cGRhdGUgZXhhbXBsZXNcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBsb2FkIGV4YW1wbGVzIHdpdGggYXR0YWNobWVudHMgdXNpbmcgbXVsdGlwYXJ0IGZvcm0gZGF0YS5cbiAgICAgKiBAcGFyYW0gdXBsb2FkcyBMaXN0IG9mIEV4YW1wbGVVcGxvYWRXaXRoQXR0YWNobWVudHMgb2JqZWN0cyB0byB1cGxvYWRcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHdpdGggdGhlIHVwbG9hZCByZXNwb25zZVxuICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgTGFuZ1NtaXRoIHZlcnNpb25zLCBwbGVhc2UgdXNlIGBjcmVhdGVFeGFtcGxlc2AgaW5zdGVhZFxuICAgICAqL1xuICAgIGFzeW5jIHVwbG9hZEV4YW1wbGVzTXVsdGlwYXJ0KGRhdGFzZXRJZCwgdXBsb2FkcyA9IFtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWRFeGFtcGxlc011bHRpcGFydChkYXRhc2V0SWQsIHVwbG9hZHMpO1xuICAgIH1cbiAgICBhc3luYyBfdXBsb2FkRXhhbXBsZXNNdWx0aXBhcnQoZGF0YXNldElkLCB1cGxvYWRzID0gW10pIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5fZ2V0RGF0YXNldEV4YW1wbGVzTXVsdGlQYXJ0U3VwcG9ydCgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91ciBMYW5nU21pdGggZGVwbG95bWVudCBkb2VzIG5vdCBhbGxvdyB1c2luZyB0aGUgbXVsdGlwYXJ0IGV4YW1wbGVzIGVuZHBvaW50LCBwbGVhc2UgdXBncmFkZSB5b3VyIGRlcGxveW1lbnQgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGV4YW1wbGUgb2YgdXBsb2Fkcykge1xuICAgICAgICAgICAgY29uc3QgZXhhbXBsZUlkID0gKGV4YW1wbGUuaWQgPz8gdXVpZC52NCgpKS50b1N0cmluZygpO1xuICAgICAgICAgICAgLy8gUHJlcGFyZSB0aGUgbWFpbiBleGFtcGxlIGJvZHlcbiAgICAgICAgICAgIGNvbnN0IGV4YW1wbGVCb2R5ID0ge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGV4YW1wbGUuY3JlYXRlZF9hdCxcbiAgICAgICAgICAgICAgICAuLi4oZXhhbXBsZS5tZXRhZGF0YSAmJiB7IG1ldGFkYXRhOiBleGFtcGxlLm1ldGFkYXRhIH0pLFxuICAgICAgICAgICAgICAgIC4uLihleGFtcGxlLnNwbGl0ICYmIHsgc3BsaXQ6IGV4YW1wbGUuc3BsaXQgfSksXG4gICAgICAgICAgICAgICAgLi4uKGV4YW1wbGUuc291cmNlX3J1bl9pZCAmJiB7IHNvdXJjZV9ydW5faWQ6IGV4YW1wbGUuc291cmNlX3J1bl9pZCB9KSxcbiAgICAgICAgICAgICAgICAuLi4oZXhhbXBsZS51c2Vfc291cmNlX3J1bl9pbyAmJiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZV9zb3VyY2VfcnVuX2lvOiBleGFtcGxlLnVzZV9zb3VyY2VfcnVuX2lvLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC4uLihleGFtcGxlLnVzZV9zb3VyY2VfcnVuX2F0dGFjaG1lbnRzICYmIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlX3NvdXJjZV9ydW5fYXR0YWNobWVudHM6IGV4YW1wbGUudXNlX3NvdXJjZV9ydW5fYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQWRkIG1haW4gZXhhbXBsZSBkYXRhXG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZEV4YW1wbGUgPSAoMCwgaW5kZXhfanNfMi5zZXJpYWxpemUpKGV4YW1wbGVCb2R5LCBgU2VyaWFsaXppbmcgYm9keSBmb3IgdXBsb2FkZWQgZXhhbXBsZSB3aXRoIGlkOiAke2V4YW1wbGVJZH1gKTtcbiAgICAgICAgICAgIGNvbnN0IGV4YW1wbGVCbG9iID0gbmV3IEJsb2IoW3N0cmluZ2lmaWVkRXhhbXBsZV0sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGV4YW1wbGVJZCwgZXhhbXBsZUJsb2IpO1xuICAgICAgICAgICAgLy8gQWRkIGlucHV0cyBpZiBwcmVzZW50XG4gICAgICAgICAgICBpZiAoZXhhbXBsZS5pbnB1dHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllZElucHV0cyA9ICgwLCBpbmRleF9qc18yLnNlcmlhbGl6ZSkoZXhhbXBsZS5pbnB1dHMsIGBTZXJpYWxpemluZyBpbnB1dHMgZm9yIHVwbG9hZGVkIGV4YW1wbGUgd2l0aCBpZDogJHtleGFtcGxlSWR9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRzQmxvYiA9IG5ldyBCbG9iKFtzdHJpbmdpZmllZElucHV0c10sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGAke2V4YW1wbGVJZH0uaW5wdXRzYCwgaW5wdXRzQmxvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZGQgb3V0cHV0cyBpZiBwcmVzZW50XG4gICAgICAgICAgICBpZiAoZXhhbXBsZS5vdXRwdXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZWRPdXRwdXRzID0gKDAsIGluZGV4X2pzXzIuc2VyaWFsaXplKShleGFtcGxlLm91dHB1dHMsIGBTZXJpYWxpemluZyBvdXRwdXRzIGZvciB1cGxvYWRlZCBleGFtcGxlIHdpdGggaWQ6ICR7ZXhhbXBsZUlkfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHNCbG9iID0gbmV3IEJsb2IoW3N0cmluZ2lmaWVkT3V0cHV0c10sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGAke2V4YW1wbGVJZH0ub3V0cHV0c2AsIG91dHB1dHNCbG9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZCBhdHRhY2htZW50cyBpZiBwcmVzZW50XG4gICAgICAgICAgICBpZiAoZXhhbXBsZS5hdHRhY2htZW50cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIGF0dGFjaG1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGV4YW1wbGUuYXR0YWNobWVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtaW1lVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbbWltZVR5cGUsIGRhdGFdID0gYXR0YWNobWVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gYXR0YWNobWVudC5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhdHRhY2htZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudEJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGAke21pbWVUeXBlfTsgbGVuZ3RoPSR7ZGF0YS5ieXRlTGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYCR7ZXhhbXBsZUlkfS5hdHRhY2htZW50LiR7bmFtZX1gLCBhdHRhY2htZW50QmxvYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsZXIuY2FsbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9mZXRjaChgJHt0aGlzLmFwaVVybH0ke3RoaXMuX2dldFBsYXRmb3JtRW5kcG9pbnRQYXRoKGBkYXRhc2V0cy8ke2RhdGFzZXRJZH0vZXhhbXBsZXNgKX1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwidXBsb2FkIGV4YW1wbGVzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZVByb21wdChwcm9tcHRJZGVudGlmaWVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMucHJvbXB0RXhpc3RzKHByb21wdElkZW50aWZpZXIpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvbXB0IGRvZXMgbm90IGV4aXN0LCB5b3UgbXVzdCBjcmVhdGUgaXQgZmlyc3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtvd25lciwgcHJvbXB0TmFtZV0gPSAoMCwgcHJvbXB0c19qc18xLnBhcnNlUHJvbXB0SWRlbnRpZmllcikocHJvbXB0SWRlbnRpZmllcik7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuX2N1cnJlbnRUZW5hbnRJc093bmVyKG93bmVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IGF3YWl0IHRoaXMuX293bmVyQ29uZmxpY3RFcnJvcihcInVwZGF0ZSBhIHByb21wdFwiLCBvd25lcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucz8uZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHBheWxvYWQuZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xuICAgICAgICBpZiAob3B0aW9ucz8ucmVhZG1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBwYXlsb2FkLnJlYWRtZSA9IG9wdGlvbnMucmVhZG1lO1xuICAgICAgICBpZiAob3B0aW9ucz8udGFncyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcGF5bG9hZC50YWdzID0gb3B0aW9ucy50YWdzO1xuICAgICAgICBpZiAob3B0aW9ucz8uaXNQdWJsaWMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHBheWxvYWQuaXNfcHVibGljID0gb3B0aW9ucy5pc1B1YmxpYztcbiAgICAgICAgaWYgKG9wdGlvbnM/LmlzQXJjaGl2ZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHBheWxvYWQuaXNfYXJjaGl2ZWQgPSBvcHRpb25zLmlzQXJjaGl2ZWQ7XG4gICAgICAgIC8vIENoZWNrIGlmIHBheWxvYWQgaXMgZW1wdHlcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsaWQgdXBkYXRlIG9wdGlvbnMgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2FsbGVyLmNhbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmV0Y2goYCR7dGhpcy5hcGlVcmx9L3JlcG9zLyR7b3duZXJ9LyR7cHJvbXB0TmFtZX1gLCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBBVENIXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgKDAsIGVycm9yX2pzXzEucmFpc2VGb3JTdGF0dXMpKHJlcywgXCJ1cGRhdGUgcHJvbXB0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZVByb21wdChwcm9tcHRJZGVudGlmaWVyKSB7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMucHJvbXB0RXhpc3RzKHByb21wdElkZW50aWZpZXIpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvbXB0IGRvZXMgbm90IGV4aXN0LCB5b3UgbXVzdCBjcmVhdGUgaXQgZmlyc3QuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtvd25lciwgcHJvbXB0TmFtZSwgX10gPSAoMCwgcHJvbXB0c19qc18xLnBhcnNlUHJvbXB0SWRlbnRpZmllcikocHJvbXB0SWRlbnRpZmllcik7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuX2N1cnJlbnRUZW5hbnRJc093bmVyKG93bmVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IGF3YWl0IHRoaXMuX293bmVyQ29uZmxpY3RFcnJvcihcImRlbGV0ZSBhIHByb21wdFwiLCBvd25lcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9yZXBvcy8ke293bmVyfS8ke3Byb21wdE5hbWV9YCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dF9tcyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5mZXRjaE9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0ICgwLCBlcnJvcl9qc18xLnJhaXNlRm9yU3RhdHVzKShyZXMsIFwiZGVsZXRlIHByb21wdFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbiAgICBhc3luYyBwdWxsUHJvbXB0Q29tbWl0KHByb21wdElkZW50aWZpZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgW293bmVyLCBwcm9tcHROYW1lLCBjb21taXRIYXNoXSA9ICgwLCBwcm9tcHRzX2pzXzEucGFyc2VQcm9tcHRJZGVudGlmaWVyKShwcm9tcHRJZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxlci5jYWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZldGNoKGAke3RoaXMuYXBpVXJsfS9jb21taXRzLyR7b3duZXJ9LyR7cHJvbXB0TmFtZX0vJHtjb21taXRIYXNofSR7b3B0aW9ucz8uaW5jbHVkZU1vZGVsID8gXCI/aW5jbHVkZV9tb2RlbD10cnVlXCIgOiBcIlwifWAsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXRfbXMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZmV0Y2hPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCAoMCwgZXJyb3JfanNfMS5yYWlzZUZvclN0YXR1cykocmVzLCBcInB1bGwgcHJvbXB0IGNvbW1pdFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvd25lcixcbiAgICAgICAgICAgIHJlcG86IHByb21wdE5hbWUsXG4gICAgICAgICAgICBjb21taXRfaGFzaDogcmVzdWx0LmNvbW1pdF9oYXNoLFxuICAgICAgICAgICAgbWFuaWZlc3Q6IHJlc3VsdC5tYW5pZmVzdCxcbiAgICAgICAgICAgIGV4YW1wbGVzOiByZXN1bHQuZXhhbXBsZXMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSwgdXNlIGBpbXBvcnQgeyBwdWxsIH0gZnJvbSBcImxhbmdjaGFpbi9odWJcImAgaW5zdGVhZC5cbiAgICAgKiBVc2luZyB0aGlzIG1ldGhvZCBkaXJlY3RseSByZXR1cm5zIHRoZSBKU09OIHN0cmluZyBvZiB0aGUgcHJvbXB0IHJhdGhlciB0aGFuIGEgTGFuZ0NoYWluIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFzeW5jIF9wdWxsUHJvbXB0KHByb21wdElkZW50aWZpZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvbXB0T2JqZWN0ID0gYXdhaXQgdGhpcy5wdWxsUHJvbXB0Q29tbWl0KHByb21wdElkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIGluY2x1ZGVNb2RlbDogb3B0aW9ucz8uaW5jbHVkZU1vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gSlNPTi5zdHJpbmdpZnkocHJvbXB0T2JqZWN0Lm1hbmlmZXN0KTtcbiAgICAgICAgcmV0dXJuIHByb21wdDtcbiAgICB9XG4gICAgYXN5bmMgcHVzaFByb21wdChwcm9tcHRJZGVudGlmaWVyLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBvciB1cGRhdGUgcHJvbXB0IG1ldGFkYXRhXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLnByb21wdEV4aXN0cyhwcm9tcHRJZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucykuc29tZSgoa2V5KSA9PiBrZXkgIT09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQcm9tcHQocHJvbXB0SWRlbnRpZmllciwge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlYWRtZTogb3B0aW9ucz8ucmVhZG1lLFxuICAgICAgICAgICAgICAgICAgICB0YWdzOiBvcHRpb25zPy50YWdzLFxuICAgICAgICAgICAgICAgICAgICBpc1B1YmxpYzogb3B0aW9ucz8uaXNQdWJsaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVByb21wdChwcm9tcHRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHJlYWRtZTogb3B0aW9ucz8ucmVhZG1lLFxuICAgICAgICAgICAgICAgIHRhZ3M6IG9wdGlvbnM/LnRhZ3MsXG4gICAgICAgICAgICAgICAgaXNQdWJsaWM6IG9wdGlvbnM/LmlzUHVibGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zPy5vYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRQcm9tcHRVcmwocHJvbXB0SWRlbnRpZmllcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGEgY29tbWl0IHdpdGggdGhlIG5ldyBtYW5pZmVzdFxuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbW1pdChwcm9tcHRJZGVudGlmaWVyLCBvcHRpb25zPy5vYmplY3QsIHtcbiAgICAgICAgICAgIHBhcmVudENvbW1pdEhhc2g6IG9wdGlvbnM/LnBhcmVudENvbW1pdEhhc2gsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIHB1YmxpYyBkYXRhc2V0IHRvIHlvdXIgb3duIGxhbmdzbWl0aCB0ZW5hbnQuXG4gICAgICogVGhpcyBvcGVyYXRpb24gaXMgaWRlbXBvdGVudC4gSWYgeW91IGFscmVhZHkgaGF2ZSBhIGRhdGFzZXQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZG8gbm90aGluZy5cbiAgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuT3JVcmwgVGhlIHRva2VuIG9mIHRoZSBwdWJsaWMgZGF0YXNldCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgY2xvbmluZyB0aGUgZGF0YXNldC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlQXBpVXJsXSBUaGUgVVJMIG9mIHRoZSBsYW5nc21pdGggc2VydmVyIHdoZXJlIHRoZSBkYXRhIGlzIGhvc3RlZC4gRGVmYXVsdHMgdG8gdGhlIEFQSSBVUkwgb2YgeW91ciBjdXJyZW50IGNsaWVudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGF0YXNldE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBkYXRhc2V0IHRvIGNyZWF0ZSBpbiB5b3VyIHRlbmFudC4gRGVmYXVsdHMgdG8gdGhlIG5hbWUgb2YgdGhlIHB1YmxpYyBkYXRhc2V0LlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIGNsb25lUHVibGljRGF0YXNldCh0b2tlbk9yVXJsLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2VBcGlVcmwgPSB0aGlzLmFwaVVybCwgZGF0YXNldE5hbWUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IFtwYXJzZWRBcGlVcmwsIHRva2VuVXVpZF0gPSB0aGlzLnBhcnNlVG9rZW5PclVybCh0b2tlbk9yVXJsLCBzb3VyY2VBcGlVcmwpO1xuICAgICAgICBjb25zdCBzb3VyY2VDbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAgICAgICAgICAgIGFwaVVybDogcGFyc2VkQXBpVXJsLFxuICAgICAgICAgICAgLy8gUGxhY2Vob2xkZXIgQVBJIGtleSBub3QgbmVlZGVkIGFueW1vcmUgaW4gbW9zdCBjYXNlcywgYnV0XG4gICAgICAgICAgICAvLyBzb21lIHByaXZhdGUgZGVwbG95bWVudHMgbWF5IGhhdmUgQVBJIGtleS1iYXNlZCByYXRlIGxpbWl0aW5nXG4gICAgICAgICAgICAvLyB0aGF0IHdvdWxkIGNhdXNlIHRoaXMgdG8gZmFpbCBpZiB3ZSBwcm92aWRlIG5vIHZhbHVlLlxuICAgICAgICAgICAgYXBpS2V5OiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkcyA9IGF3YWl0IHNvdXJjZUNsaWVudC5yZWFkU2hhcmVkRGF0YXNldCh0b2tlblV1aWQpO1xuICAgICAgICBjb25zdCBmaW5hbERhdGFzZXROYW1lID0gZGF0YXNldE5hbWUgfHwgZHMubmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmhhc0RhdGFzZXQoeyBkYXRhc2V0SWQ6IGZpbmFsRGF0YXNldE5hbWUgfSkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRGF0YXNldCAke2ZpbmFsRGF0YXNldE5hbWV9IGFscmVhZHkgZXhpc3RzIGluIHlvdXIgdGVuYW50LiBTa2lwcGluZy5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIC8vIGAuaGFzRGF0YXNldGAgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZGF0YXNldCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgIC8vIG5vLW9wIGluIHRoYXQgY2FzZVxuICAgICAgICB9XG4gICAgICAgIC8vIEZldGNoIGV4YW1wbGVzIGZpcnN0LCB0aGVuIGNyZWF0ZSB0aGUgZGF0YXNldFxuICAgICAgICBjb25zdCBleGFtcGxlcyA9IGF3YWl0IHNvdXJjZUNsaWVudC5saXN0U2hhcmVkRXhhbXBsZXModG9rZW5VdWlkKTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IGF3YWl0IHRoaXMuY3JlYXRlRGF0YXNldChmaW5hbERhdGFzZXROYW1lLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZHMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBkYXRhVHlwZTogZHMuZGF0YV90eXBlIHx8IFwia3ZcIixcbiAgICAgICAgICAgIGlucHV0c1NjaGVtYTogZHMuaW5wdXRzX3NjaGVtYV9kZWZpbml0aW9uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG91dHB1dHNTY2hlbWE6IGRzLm91dHB1dHNfc2NoZW1hX2RlZmluaXRpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRXhhbXBsZXMoe1xuICAgICAgICAgICAgICAgIGlucHV0czogZXhhbXBsZXMubWFwKChlKSA9PiBlLmlucHV0cyksXG4gICAgICAgICAgICAgICAgb3V0cHV0czogZXhhbXBsZXMuZmxhdE1hcCgoZSkgPT4gKGUub3V0cHV0cyA/IFtlLm91dHB1dHNdIDogW10pKSxcbiAgICAgICAgICAgICAgICBkYXRhc2V0SWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgZGF0YXNldCAke2ZpbmFsRGF0YXNldE5hbWV9LiBgICtcbiAgICAgICAgICAgICAgICBcIllvdSBzaG91bGQgZGVsZXRlIGl0IG1hbnVhbGx5LlwiKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUb2tlbk9yVXJsKHVybE9yVG9rZW4sIGFwaVVybCwgbnVtUGFydHMgPSAyLCBraW5kID0gXCJkYXRhc2V0XCIpIHtcbiAgICAgICAgLy8gVHJ5IHBhcnNpbmcgYXMgVVVJRFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgKDAsIF91dWlkX2pzXzEuYXNzZXJ0VXVpZCkodXJsT3JUb2tlbik7IC8vIFdpbGwgdGhyb3cgaWYgaXQncyBub3QgYSBVVUlELlxuICAgICAgICAgICAgcmV0dXJuIFthcGlVcmwsIHVybE9yVG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICAvLyBuby1vcCBpZiBpdCdzIG5vdCBhIHV1aWRcbiAgICAgICAgfVxuICAgICAgICAvLyBQYXJzZSBhcyBVUkxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsT3JUb2tlbik7XG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXJzZWRVcmwucGF0aG5hbWVcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIik7XG4gICAgICAgICAgICBpZiAocGF0aFBhcnRzLmxlbmd0aCA+PSBudW1QYXJ0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuVXVpZCA9IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gbnVtUGFydHNdO1xuICAgICAgICAgICAgICAgIHJldHVybiBbYXBpVXJsLCB0b2tlblV1aWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpYyAke2tpbmR9IFVSTDogJHt1cmxPclRva2VufWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpYyAke2tpbmR9IFVSTCBvciB0b2tlbjogJHt1cmxPclRva2VufWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF3YWl0cyBhbGwgcGVuZGluZyB0cmFjZSBiYXRjaGVzLiBVc2VmdWwgZm9yIGVudmlyb25tZW50cyB3aGVyZVxuICAgICAqIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhbGwgdHJhY2luZyByZXF1ZXN0cyBmaW5pc2ggYmVmb3JlIGV4ZWN1dGlvbiBlbmRzLFxuICAgICAqIHN1Y2ggYXMgc2VydmVybGVzcyBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYFxuICAgICAqIGltcG9ydCB7IENsaWVudCB9IGZyb20gXCJsYW5nc21pdGhcIjtcbiAgICAgKlxuICAgICAqIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoKTtcbiAgICAgKlxuICAgICAqIHRyeSB7XG4gICAgICogICAvLyBUcmFjaW5nIGhhcHBlbnMgaGVyZVxuICAgICAqICAgLi4uXG4gICAgICogfSBmaW5hbGx5IHtcbiAgICAgKiAgIGF3YWl0IGNsaWVudC5hd2FpdFBlbmRpbmdUcmFjZUJhdGNoZXMoKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBjdXJyZW50bHkgcGVuZGluZyB0cmFjZXMgaGF2ZSBzZW50LlxuICAgICAqL1xuICAgIGFzeW5jIGF3YWl0UGVuZGluZ1RyYWNlQmF0Y2hlcygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFudWFsRmx1c2hNb2RlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbV0FSTklOR106IFdoZW4gdHJhY2luZyBpbiBtYW51YWwgZmx1c2ggbW9kZSwgeW91IG11c3QgY2FsbCBgYXdhaXQgY2xpZW50LmZsdXNoKClgIG1hbnVhbGx5IHRvIHN1Ym1pdCB0cmFjZSBiYXRjaGVzLlwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAuLi50aGlzLmF1dG9CYXRjaFF1ZXVlLml0ZW1zLm1hcCgoeyBpdGVtUHJvbWlzZSB9KSA9PiBpdGVtUHJvbWlzZSksXG4gICAgICAgICAgICB0aGlzLmJhdGNoSW5nZXN0Q2FsbGVyLnF1ZXVlLm9uSWRsZSgpLFxuICAgICAgICBdKTtcbiAgICAgICAgaWYgKHRoaXMubGFuZ1NtaXRoVG9PVEVMVHJhbnNsYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCAoMCwgb3RlbF9qc18xLmdldERlZmF1bHRPVExQVHJhY2VyQ29tcG9uZW50cykoKT8uREVGQVVMVF9MQU5HU01JVEhfU1BBTl9QUk9DRVNTT1I/LmZvcmNlRmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQ2xpZW50ID0gQ2xpZW50O1xuZnVuY3Rpb24gaXNFeGFtcGxlQ3JlYXRlKGlucHV0KSB7XG4gICAgcmV0dXJuIFwiZGF0YXNldF9pZFwiIGluIGlucHV0IHx8IFwiZGF0YXNldF9uYW1lXCIgaW4gaW5wdXQ7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc1RyYWNpbmdFbmFibGVkID0gdm9pZCAwO1xuY29uc3QgZW52X2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy9lbnYuY2pzXCIpO1xuY29uc3QgaXNUcmFjaW5nRW5hYmxlZCA9ICh0cmFjaW5nRW5hYmxlZCkgPT4ge1xuICAgIGlmICh0cmFjaW5nRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0cmFjaW5nRW5hYmxlZDtcbiAgICB9XG4gICAgY29uc3QgZW52VmFycyA9IFtcIlRSQUNJTkdfVjJcIiwgXCJUUkFDSU5HXCJdO1xuICAgIHJldHVybiAhIWVudlZhcnMuZmluZCgoZW52VmFyKSA9PiAoMCwgZW52X2pzXzEuZ2V0TGFuZ1NtaXRoRW52aXJvbm1lbnRWYXJpYWJsZSkoZW52VmFyKSA9PT0gXCJ0cnVlXCIpO1xufTtcbmV4cG9ydHMuaXNUcmFjaW5nRW5hYmxlZCA9IGlzVHJhY2luZ0VuYWJsZWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5fUkVQTElDQV9UUkFDRV9ST09UU19LRVkgPSBleHBvcnRzLl9MQ19DT05URVhUX1ZBUklBQkxFU19LRVkgPSB2b2lkIDA7XG5leHBvcnRzLl9MQ19DT05URVhUX1ZBUklBQkxFU19LRVkgPSBTeW1ib2wuZm9yKFwibGM6Y29udGV4dF92YXJpYWJsZXNcIik7XG5leHBvcnRzLl9SRVBMSUNBX1RSQUNFX1JPT1RTX0tFWSA9IFN5bWJvbC5mb3IoXCJsYW5nc21pdGg6cmVwbGljYV90cmFjZV9yb290c1wiKTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldENvbnRleHRWYXIgPSBnZXRDb250ZXh0VmFyO1xuZXhwb3J0cy5zZXRDb250ZXh0VmFyID0gc2V0Q29udGV4dFZhcjtcbmNvbnN0IGNvbnN0YW50c19qc18xID0gcmVxdWlyZShcIi4uL3NpbmdsZXRvbnMvY29uc3RhbnRzLmNqc1wiKTtcbi8qKlxuICogR2V0IGEgY29udGV4dCB2YXJpYWJsZSBmcm9tIGEgcnVuIHRyZWUgaW5zdGFuY2VcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGdldENvbnRleHRWYXIocnVuVHJlZSwga2V5KSB7XG4gICAgaWYgKGNvbnN0YW50c19qc18xLl9MQ19DT05URVhUX1ZBUklBQkxFU19LRVkgaW4gcnVuVHJlZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBjb250ZXh0VmFycyA9IHJ1blRyZWVbY29uc3RhbnRzX2pzXzEuX0xDX0NPTlRFWFRfVkFSSUFCTEVTX0tFWV07XG4gICAgICAgIHJldHVybiBjb250ZXh0VmFyc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBTZXQgYSBjb250ZXh0IHZhcmlhYmxlIG9uIGEgcnVuIHRyZWUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gc2V0Q29udGV4dFZhcihcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5ydW5UcmVlLCBrZXksIHZhbHVlKSB7XG4gICAgY29uc3QgY29udGV4dFZhcnMgPSBjb25zdGFudHNfanNfMS5fTENfQ09OVEVYVF9WQVJJQUJMRVNfS0VZIGluIHJ1blRyZWVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcnVuVHJlZVtjb25zdGFudHNfanNfMS5fTENfQ09OVEVYVF9WQVJJQUJMRVNfS0VZXVxuICAgICAgICA6IHt9O1xuICAgIGNvbnRleHRWYXJzW2tleV0gPSB2YWx1ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJ1blRyZWVbY29uc3RhbnRzX2pzXzEuX0xDX0NPTlRFWFRfVkFSSUFCTEVTX0tFWV0gPSBjb250ZXh0VmFycztcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJ1blRyZWUgPSB2b2lkIDA7XG5leHBvcnRzLmNvbnZlcnRUb0RvdHRlZE9yZGVyRm9ybWF0ID0gY29udmVydFRvRG90dGVkT3JkZXJGb3JtYXQ7XG5leHBvcnRzLmlzUnVuVHJlZSA9IGlzUnVuVHJlZTtcbmV4cG9ydHMuaXNSdW5uYWJsZUNvbmZpZ0xpa2UgPSBpc1J1bm5hYmxlQ29uZmlnTGlrZTtcbmNvbnN0IGNsaWVudF9qc18xID0gcmVxdWlyZShcIi4vY2xpZW50LmNqc1wiKTtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4vZW52LmNqc1wiKTtcbmNvbnN0IGVycm9yX2pzXzEgPSByZXF1aXJlKFwiLi91dGlscy9lcnJvci5janNcIik7XG5jb25zdCBjb25zdGFudHNfanNfMSA9IHJlcXVpcmUoXCIuL3NpbmdsZXRvbnMvY29uc3RhbnRzLmNqc1wiKTtcbmNvbnN0IGNvbnRleHRfdmFyc19qc18xID0gcmVxdWlyZShcIi4vdXRpbHMvY29udGV4dF92YXJzLmNqc1wiKTtcbmNvbnN0IGVudl9qc18yID0gcmVxdWlyZShcIi4vdXRpbHMvZW52LmNqc1wiKTtcbmNvbnN0IHByb2plY3RfanNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzL3Byb2plY3QuY2pzXCIpO1xuY29uc3QgZW52X2pzXzMgPSByZXF1aXJlKFwiLi91dGlscy9lbnYuY2pzXCIpO1xuY29uc3Qgd2Fybl9qc18xID0gcmVxdWlyZShcIi4vdXRpbHMvd2Fybi5janNcIik7XG5jb25zdCBfdXVpZF9qc18xID0gcmVxdWlyZShcIi4vdXRpbHMvX3V1aWQuY2pzXCIpO1xuY29uc3QgdXVpZF8xID0gcmVxdWlyZShcInV1aWRcIik7XG5jb25zdCBUSU1FU1RBTVBfTEVOR1RIID0gMzY7XG4vLyBETlMgbmFtZXNwYWNlIGZvciBVVUlEIHY1IChzYW1lIGFzIFB5dGhvbidzIHV1aWQuTkFNRVNQQUNFX0ROUylcbmNvbnN0IFVVSURfTkFNRVNQQUNFX0ROUyA9IFwiNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4XCI7XG5mdW5jdGlvbiBnZXRSZXBsaWNhS2V5KHJlcGxpY2EpIHtcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgYnkgaGFzaGluZyB0aGUgcmVwbGljYSdzIGlkZW50aWZ5aW5nIHByb3BlcnRpZXNcbiAgICAvLyBUaGlzIGVuc3VyZXMgZWFjaCB1bmlxdWUgcmVwbGljYSAoY29tYmluYXRpb24gb2YgcHJvamVjdE5hbWUsIGFwaVVybCwgd29ya3NwYWNlSWQsIGFwaUtleSkgZ2V0cyBhIHVuaXF1ZSBrZXlcbiAgICAvLyBTb3J0IGtleXMgdG8gZW5zdXJlIGNvbnNpc3RlbnQgaGFzaGluZ1xuICAgIGNvbnN0IHNvcnRlZEtleXMgPSBPYmplY3Qua2V5cyhyZXBsaWNhKS5zb3J0KCk7XG4gICAgY29uc3Qga2V5RGF0YSA9IHNvcnRlZEtleXNcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBgJHtrZXl9OiR7cmVwbGljYVtrZXldID8/IFwiXCJ9YClcbiAgICAgICAgLmpvaW4oXCJ8XCIpO1xuICAgIHJldHVybiAoMCwgdXVpZF8xLnY1KShrZXlEYXRhLCBVVUlEX05BTUVTUEFDRV9ETlMpO1xufVxuZnVuY3Rpb24gc3RyaXBOb25BbHBoYW51bWVyaWMoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvWy06Ll0vZywgXCJcIik7XG59XG5mdW5jdGlvbiBnZXRNaWNyb3NlY29uZFByZWNpc2lvbkRhdGVzdHJpbmcoZXBvY2gsIGV4ZWN1dGlvbk9yZGVyID0gMSkge1xuICAgIC8vIERhdGUgb25seSBoYXMgbWlsbGlzZWNvbmQgcHJlY2lzaW9uLCBzbyB3ZSB1c2UgdGhlIG1pY3Jvc2Vjb25kcyB0byBicmVha1xuICAgIC8vIHBvc3NpYmxlIHRpZXMsIGF2b2lkaW5nIGluY29ycmVjdCBydW4gb3JkZXJcbiAgICBjb25zdCBwYWRkZWRPcmRlciA9IGV4ZWN1dGlvbk9yZGVyLnRvRml4ZWQoMCkuc2xpY2UoMCwgMykucGFkU3RhcnQoMywgXCIwXCIpO1xuICAgIHJldHVybiBgJHtuZXcgRGF0ZShlcG9jaCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSl9JHtwYWRkZWRPcmRlcn1aYDtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb0RvdHRlZE9yZGVyRm9ybWF0KGVwb2NoLCBydW5JZCwgZXhlY3V0aW9uT3JkZXIgPSAxKSB7XG4gICAgY29uc3QgbWljcm9zZWNvbmRQcmVjaXNpb25EYXRlc3RyaW5nID0gZ2V0TWljcm9zZWNvbmRQcmVjaXNpb25EYXRlc3RyaW5nKGVwb2NoLCBleGVjdXRpb25PcmRlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZG90dGVkT3JkZXI6IHN0cmlwTm9uQWxwaGFudW1lcmljKG1pY3Jvc2Vjb25kUHJlY2lzaW9uRGF0ZXN0cmluZykgKyBydW5JZCxcbiAgICAgICAgbWljcm9zZWNvbmRQcmVjaXNpb25EYXRlc3RyaW5nLFxuICAgIH07XG59XG4vKipcbiAqIEJhZ2dhZ2UgaGVhZGVyIGluZm9ybWF0aW9uXG4gKi9cbmNsYXNzIEJhZ2dhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKG1ldGFkYXRhLCB0YWdzLCBwcm9qZWN0X25hbWUsIHJlcGxpY2FzKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRhZ3NcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicHJvamVjdF9uYW1lXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcGxpY2FzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy50YWdzID0gdGFncztcbiAgICAgICAgdGhpcy5wcm9qZWN0X25hbWUgPSBwcm9qZWN0X25hbWU7XG4gICAgICAgIHRoaXMucmVwbGljYXMgPSByZXBsaWNhcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21IZWFkZXIodmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgIGxldCBtZXRhZGF0YSA9IHt9O1xuICAgICAgICBsZXQgdGFncyA9IFtdO1xuICAgICAgICBsZXQgcHJvamVjdF9uYW1lO1xuICAgICAgICBsZXQgcmVwbGljYXM7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgdXJpVmFsdWVdID0gaXRlbS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmlWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcImxhbmdzbWl0aC1tZXRhZGF0YVwiKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGEgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJsYW5nc21pdGgtdGFnc1wiKSB7XG4gICAgICAgICAgICAgICAgdGFncyA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJsYW5nc21pdGgtcHJvamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdF9uYW1lID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwibGFuZ3NtaXRoLXJlcGxpY2FzXCIpIHtcbiAgICAgICAgICAgICAgICByZXBsaWNhcyA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQmFnZ2FnZShtZXRhZGF0YSwgdGFncywgcHJvamVjdF9uYW1lLCByZXBsaWNhcyk7XG4gICAgfVxuICAgIHRvSGVhZGVyKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0aGlzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGBsYW5nc21pdGgtbWV0YWRhdGE9JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodGhpcy5tZXRhZGF0YSkpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhZ3MgJiYgdGhpcy50YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goYGxhbmdzbWl0aC10YWdzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudGFncy5qb2luKFwiLFwiKSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvamVjdF9uYW1lKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGBsYW5nc21pdGgtcHJvamVjdD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnByb2plY3RfbmFtZSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zLmpvaW4oXCIsXCIpO1xuICAgIH1cbn1cbmNsYXNzIFJ1blRyZWUge1xuICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsQ29uZmlnKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicnVuX3R5cGVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicHJvamVjdF9uYW1lXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBhcmVudF9ydW5cIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicGFyZW50X3J1bl9pZFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjaGlsZF9ydW5zXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXJ0X3RpbWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZW5kX3RpbWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZXh0cmFcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidGFnc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJlcnJvclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzZXJpYWxpemVkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlucHV0c1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvdXRwdXRzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlZmVyZW5jZV9leGFtcGxlX2lkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNsaWVudFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJldmVudHNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidHJhY2VfaWRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZG90dGVkX29yZGVyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRyYWNpbmdFbmFibGVkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImV4ZWN1dGlvbl9vcmRlclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjaGlsZF9leGVjdXRpb25fb3JkZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF0dGFjaG1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcnVuLlxuICAgICAgICAgKiBFYWNoIGVudHJ5IGlzIGEgdHVwbGUgb2YgW21pbWVfdHlwZSwgYnl0ZXNdXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJhdHRhY2htZW50c1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvamVjdHMgdG8gcmVwbGljYXRlIHRoaXMgcnVuIHRvIHdpdGggb3B0aW9uYWwgdXBkYXRlcy5cbiAgICAgICAgICovXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcGxpY2FzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRpc3RyaWJ1dGVkUGFyZW50SWRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiX3NlcmlhbGl6ZWRfc3RhcnRfdGltZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB5b3UgcGFzcyBpbiBhIHJ1biB0cmVlIGRpcmVjdGx5LCByZXR1cm4gYSBzaGFsbG93IGNsb25lXG4gICAgICAgIGlmIChpc1J1blRyZWUob3JpZ2luYWxDb25maWcpKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHsgLi4ub3JpZ2luYWxDb25maWcgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IFJ1blRyZWUuZ2V0RGVmYXVsdENvbmZpZygpO1xuICAgICAgICBjb25zdCB7IG1ldGFkYXRhLCAuLi5jb25maWcgfSA9IG9yaWdpbmFsQ29uZmlnO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjb25maWcuY2xpZW50ID8/IFJ1blRyZWUuZ2V0U2hhcmVkQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IGRlZHVwZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICAgICAgLi4uY29uZmlnPy5leHRyYT8ubWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbmZpZy5leHRyYSA9IHsgLi4uY29uZmlnLmV4dHJhLCBtZXRhZGF0YTogZGVkdXBlZE1ldGFkYXRhIH07XG4gICAgICAgIGlmIChcImlkXCIgaW4gY29uZmlnICYmIGNvbmZpZy5pZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLmlkO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgeyAuLi5kZWZhdWx0Q29uZmlnLCAuLi5jb25maWcsIGNsaWVudCB9KTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25fb3JkZXIgPz89IDE7XG4gICAgICAgIHRoaXMuY2hpbGRfZXhlY3V0aW9uX29yZGVyID8/PSAxO1xuICAgICAgICAvLyBHZW5lcmF0ZSBzZXJpYWxpemVkIHN0YXJ0IHRpbWUgZm9yIElEIGdlbmVyYXRpb25cbiAgICAgICAgaWYgKCF0aGlzLmRvdHRlZF9vcmRlcikge1xuICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplZF9zdGFydF90aW1lID0gZ2V0TWljcm9zZWNvbmRQcmVjaXNpb25EYXRlc3RyaW5nKHRoaXMuc3RhcnRfdGltZSwgdGhpcy5leGVjdXRpb25fb3JkZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdlbmVyYXRlIGlkIGZyb20gc2VyaWFsaXplZCBzdGFydF90aW1lIGlmIG5vdCBwcm92aWRlZFxuICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSAoMCwgX3V1aWRfanNfMS51dWlkN0Zyb21UaW1lKSh0aGlzLl9zZXJpYWxpemVkX3N0YXJ0X3RpbWUgPz8gdGhpcy5zdGFydF90aW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudHJhY2VfaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudF9ydW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlX2lkID0gdGhpcy5wYXJlbnRfcnVuLnRyYWNlX2lkID8/IHRoaXMuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlX2lkID0gdGhpcy5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcGxpY2FzID0gX2Vuc3VyZVdyaXRlUmVwbGljYXModGhpcy5yZXBsaWNhcyk7XG4gICAgICAgIC8vIE5vdyBzZXQgdGhlIGRvdHRlZCBvcmRlciB3aXRoIHRoZSBhY3R1YWwgSURcbiAgICAgICAgaWYgKCF0aGlzLmRvdHRlZF9vcmRlcikge1xuICAgICAgICAgICAgY29uc3QgeyBkb3R0ZWRPcmRlciB9ID0gY29udmVydFRvRG90dGVkT3JkZXJGb3JtYXQodGhpcy5zdGFydF90aW1lLCB0aGlzLmlkLCB0aGlzLmV4ZWN1dGlvbl9vcmRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRfcnVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3R0ZWRfb3JkZXIgPSB0aGlzLnBhcmVudF9ydW4uZG90dGVkX29yZGVyICsgXCIuXCIgKyBkb3R0ZWRPcmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZG90dGVkX29yZGVyID0gZG90dGVkT3JkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IG1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMuZXh0cmEgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmV4dHJhLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmV4dHJhPy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBtZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmE/Lm1ldGFkYXRhO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RGVmYXVsdENvbmZpZygpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBydW5fdHlwZTogXCJjaGFpblwiLFxuICAgICAgICAgICAgcHJvamVjdF9uYW1lOiAoMCwgcHJvamVjdF9qc18xLmdldERlZmF1bHRQcm9qZWN0TmFtZSkoKSxcbiAgICAgICAgICAgIGNoaWxkX3J1bnM6IFtdLFxuICAgICAgICAgICAgYXBpX3VybDogKDAsIGVudl9qc18yLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR0NIQUlOX0VORFBPSU5UXCIpID8/IFwiaHR0cDovL2xvY2FsaG9zdDoxOTg0XCIsXG4gICAgICAgICAgICBhcGlfa2V5OiAoMCwgZW52X2pzXzIuZ2V0RW52aXJvbm1lbnRWYXJpYWJsZSkoXCJMQU5HQ0hBSU5fQVBJX0tFWVwiKSxcbiAgICAgICAgICAgIGNhbGxlcl9vcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWUsXG4gICAgICAgICAgICBzZXJpYWxpemVkOiB7fSxcbiAgICAgICAgICAgIGlucHV0czoge30sXG4gICAgICAgICAgICBleHRyYToge30sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTaGFyZWRDbGllbnQoKSB7XG4gICAgICAgIGlmICghUnVuVHJlZS5zaGFyZWRDbGllbnQpIHtcbiAgICAgICAgICAgIFJ1blRyZWUuc2hhcmVkQ2xpZW50ID0gbmV3IGNsaWVudF9qc18xLkNsaWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSdW5UcmVlLnNoYXJlZENsaWVudDtcbiAgICB9XG4gICAgY3JlYXRlQ2hpbGQoY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkX2V4ZWN1dGlvbl9vcmRlciA9IHRoaXMuY2hpbGRfZXhlY3V0aW9uX29yZGVyICsgMTtcbiAgICAgICAgLy8gSGFuZGxlIHJlcGxpY2FzOiBpZiBjaGlsZCBoYXMgaXRzIG93biByZXBsaWNhcywgdXNlIHRob3NlOyBvdGhlcndpc2UgaW5oZXJpdCBwYXJlbnQncyAod2l0aCByZXJvb3Qgc3RyaXBwZWQpXG4gICAgICAgIC8vIFJlcm9vdCBzaG91bGQgb25seSBhcHBseSB0byB0aGUgcnVuIHdoZXJlIGl0J3MgZXhwbGljaXRseSBjb25maWd1cmVkLCBub3QgcHJvcGFnYXRlIGRvd25cbiAgICAgICAgY29uc3QgaW5oZXJpdGVkUmVwbGljYXMgPSB0aGlzLnJlcGxpY2FzPy5tYXAoKHJlcGxpY2EpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVyb290LCAuLi5yZXN0IH0gPSByZXBsaWNhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjaGlsZFJlcGxpY2FzID0gY29uZmlnLnJlcGxpY2FzID8/IGluaGVyaXRlZFJlcGxpY2FzO1xuICAgICAgICBjb25zdCBjaGlsZCA9IG5ldyBSdW5UcmVlKHtcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgIHBhcmVudF9ydW46IHRoaXMsXG4gICAgICAgICAgICBwcm9qZWN0X25hbWU6IHRoaXMucHJvamVjdF9uYW1lLFxuICAgICAgICAgICAgcmVwbGljYXM6IGNoaWxkUmVwbGljYXMsXG4gICAgICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgICAgICAgdHJhY2luZ0VuYWJsZWQ6IHRoaXMudHJhY2luZ0VuYWJsZWQsXG4gICAgICAgICAgICBleGVjdXRpb25fb3JkZXI6IGNoaWxkX2V4ZWN1dGlvbl9vcmRlcixcbiAgICAgICAgICAgIGNoaWxkX2V4ZWN1dGlvbl9vcmRlcjogY2hpbGRfZXhlY3V0aW9uX29yZGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ29weSBjb250ZXh0IHZhcnMgb3ZlciBpbnRvIHRoZSBuZXcgcnVuIHRyZWUuXG4gICAgICAgIGlmIChjb25zdGFudHNfanNfMS5fTENfQ09OVEVYVF9WQVJJQUJMRVNfS0VZIGluIHRoaXMpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBjaGlsZFtjb25zdGFudHNfanNfMS5fTENfQ09OVEVYVF9WQVJJQUJMRVNfS0VZXSA9XG4gICAgICAgICAgICAgICAgdGhpc1tjb25zdGFudHNfanNfMS5fTENfQ09OVEVYVF9WQVJJQUJMRVNfS0VZXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBMQ19DSElMRCA9IFN5bWJvbC5mb3IoXCJsYzpjaGlsZF9jb25maWdcIik7XG4gICAgICAgIGNvbnN0IHByZXNlbnRDb25maWcgPSBjb25maWcuZXh0cmE/LltMQ19DSElMRF0gPz9cbiAgICAgICAgICAgIHRoaXMuZXh0cmFbTENfQ0hJTERdO1xuICAgICAgICAvLyB0cmFjaW5nIGZvciBMYW5nQ2hhaW4gaXMgZGVmaW5lZCBieSB0aGUgX3BhcmVudFJ1bklkIGFuZCBydW5NYXAgb2YgdGhlIHRyYWNlclxuICAgICAgICBpZiAoaXNSdW5uYWJsZUNvbmZpZ0xpa2UocHJlc2VudENvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHsgLi4ucHJlc2VudENvbmZpZyB9O1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gaXNDYWxsYmFja01hbmFnZXJMaWtlKG5ld0NvbmZpZy5jYWxsYmFja3MpXG4gICAgICAgICAgICAgICAgPyBuZXdDb25maWcuY2FsbGJhY2tzLmNvcHk/LigpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBwYXJlbnQgcnVuIGlkXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjYWxsYmFja3MsIHsgX3BhcmVudFJ1bklkOiBjaGlsZC5pZCB9KTtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHBvcHVsYXRlIGlmIHdlJ3JlIGluIGEgbmV3ZXIgTEMuSlMgdmVyc2lvblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5oYW5kbGVyc1xuICAgICAgICAgICAgICAgICAgICA/LmZpbmQoaXNMYW5nQ2hhaW5UcmFjZXJMaWtlKVxuICAgICAgICAgICAgICAgICAgICA/LnVwZGF0ZUZyb21SdW5UcmVlPy4oY2hpbGQpO1xuICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5jYWxsYmFja3MgPSBjYWxsYmFja3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZC5leHRyYVtMQ19DSElMRF0gPSBuZXdDb25maWc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJvcGFnYXRlIGNoaWxkX2V4ZWN1dGlvbl9vcmRlciB1cHdhcmRzXG4gICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gdGhpcztcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCAmJiAhdmlzaXRlZC5oYXMoY3VycmVudC5pZCkpIHtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKGN1cnJlbnQuaWQpO1xuICAgICAgICAgICAgY3VycmVudC5jaGlsZF9leGVjdXRpb25fb3JkZXIgPSBNYXRoLm1heChjdXJyZW50LmNoaWxkX2V4ZWN1dGlvbl9vcmRlciwgY2hpbGRfZXhlY3V0aW9uX29yZGVyKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudF9ydW47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZF9ydW5zLnB1c2goY2hpbGQpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGFzeW5jIGVuZChvdXRwdXRzLCBlcnJvciwgZW5kVGltZSA9IERhdGUubm93KCksIG1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IHRoaXMub3V0cHV0cyA/PyBvdXRwdXRzO1xuICAgICAgICB0aGlzLmVycm9yID0gdGhpcy5lcnJvciA/PyBlcnJvcjtcbiAgICAgICAgdGhpcy5lbmRfdGltZSA9IHRoaXMuZW5kX3RpbWUgPz8gZW5kVGltZTtcbiAgICAgICAgaWYgKG1ldGFkYXRhICYmIE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmV4dHJhID0gdGhpcy5leHRyYVxuICAgICAgICAgICAgICAgID8geyAuLi50aGlzLmV4dHJhLCBtZXRhZGF0YTogeyAuLi50aGlzLmV4dHJhLm1ldGFkYXRhLCAuLi5tZXRhZGF0YSB9IH1cbiAgICAgICAgICAgICAgICA6IHsgbWV0YWRhdGEgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY29udmVydFRvQ3JlYXRlKHJ1biwgcnVudGltZUVudiwgZXhjbHVkZUNoaWxkUnVucyA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcnVuRXh0cmEgPSBydW4uZXh0cmEgPz8ge307XG4gICAgICAgIC8vIEF2b2lkIG92ZXJ3cml0aW5nIHRoZSBydW50aW1lIGVudmlyb25tZW50IGlmIGl0J3MgYWxyZWFkeSBzZXRcbiAgICAgICAgaWYgKHJ1bkV4dHJhPy5ydW50aW1lPy5saWJyYXJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghcnVuRXh0cmEucnVudGltZSkge1xuICAgICAgICAgICAgICAgIHJ1bkV4dHJhLnJ1bnRpbWUgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChydW50aW1lRW52KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocnVudGltZUVudikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5FeHRyYS5ydW50aW1lW2tdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5FeHRyYS5ydW50aW1lW2tdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgY2hpbGRfcnVucztcbiAgICAgICAgbGV0IHBhcmVudF9ydW5faWQ7XG4gICAgICAgIGlmICghZXhjbHVkZUNoaWxkUnVucykge1xuICAgICAgICAgICAgY2hpbGRfcnVucyA9IHJ1bi5jaGlsZF9ydW5zLm1hcCgoY2hpbGRfcnVuKSA9PiB0aGlzLl9jb252ZXJ0VG9DcmVhdGUoY2hpbGRfcnVuLCBydW50aW1lRW52LCBleGNsdWRlQ2hpbGRSdW5zKSk7XG4gICAgICAgICAgICBwYXJlbnRfcnVuX2lkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50X3J1bl9pZCA9IHJ1bi5wYXJlbnRfcnVuPy5pZCA/PyBydW4ucGFyZW50X3J1bl9pZDtcbiAgICAgICAgICAgIGNoaWxkX3J1bnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJ1bi5pZCxcbiAgICAgICAgICAgIG5hbWU6IHJ1bi5uYW1lLFxuICAgICAgICAgICAgc3RhcnRfdGltZTogcnVuLl9zZXJpYWxpemVkX3N0YXJ0X3RpbWUgPz8gcnVuLnN0YXJ0X3RpbWUsXG4gICAgICAgICAgICBlbmRfdGltZTogcnVuLmVuZF90aW1lLFxuICAgICAgICAgICAgcnVuX3R5cGU6IHJ1bi5ydW5fdHlwZSxcbiAgICAgICAgICAgIHJlZmVyZW5jZV9leGFtcGxlX2lkOiBydW4ucmVmZXJlbmNlX2V4YW1wbGVfaWQsXG4gICAgICAgICAgICBleHRyYTogcnVuRXh0cmEsXG4gICAgICAgICAgICBzZXJpYWxpemVkOiBydW4uc2VyaWFsaXplZCxcbiAgICAgICAgICAgIGVycm9yOiBydW4uZXJyb3IsXG4gICAgICAgICAgICBpbnB1dHM6IHJ1bi5pbnB1dHMsXG4gICAgICAgICAgICBvdXRwdXRzOiBydW4ub3V0cHV0cyxcbiAgICAgICAgICAgIHNlc3Npb25fbmFtZTogcnVuLnByb2plY3RfbmFtZSxcbiAgICAgICAgICAgIGNoaWxkX3J1bnM6IGNoaWxkX3J1bnMsXG4gICAgICAgICAgICBwYXJlbnRfcnVuX2lkOiBwYXJlbnRfcnVuX2lkLFxuICAgICAgICAgICAgdHJhY2VfaWQ6IHJ1bi50cmFjZV9pZCxcbiAgICAgICAgICAgIGRvdHRlZF9vcmRlcjogcnVuLmRvdHRlZF9vcmRlcixcbiAgICAgICAgICAgIHRhZ3M6IHJ1bi50YWdzLFxuICAgICAgICAgICAgYXR0YWNobWVudHM6IHJ1bi5hdHRhY2htZW50cyxcbiAgICAgICAgICAgIGV2ZW50czogcnVuLmV2ZW50cyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3NsaWNlUGFyZW50SWQocGFyZW50SWQsIHJ1bikge1xuICAgICAgICAvKipcbiAgICAgICAgICogU2xpY2UgdGhlIHBhcmVudCBpZCBmcm9tIGRvdHRlZCBvcmRlci5cbiAgICAgICAgICogQWRkaXRpb25hbGx5IGNoZWNrIGlmIHRoZSBjdXJyZW50IHJ1biBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQuIElmIHNvLCB1cGRhdGVcbiAgICAgICAgICogdGhlIHBhcmVudF9ydW5faWQgdG8gdW5kZWZpbmVkLCBhbmQgc2V0IHRoZSB0cmFjZSBpZCB0byB0aGUgbmV3IHJvb3QgaWQgYWZ0ZXJcbiAgICAgICAgICogcGFyZW50X2lkLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHJ1bi5kb3R0ZWRfb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZ3MgPSBydW4uZG90dGVkX29yZGVyLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIGxldCBzdGFydElkeCA9IG51bGw7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgcGFyZW50IElEIGluIHRoZSBkb3R0ZWQgb3JkZXJcbiAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHNlZ3MubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlZ0lkID0gc2Vnc1tpZHhdLnNsaWNlKC1USU1FU1RBTVBfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VnSWQgPT09IHBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SWR4ID0gaWR4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRJZHggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmltIHNlZ21lbnRzIHRvIHN0YXJ0IGFmdGVyIHBhcmVudF9pZCAoZXhjbHVzaXZlKVxuICAgICAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRTZWdzID0gc2Vncy5zbGljZShzdGFydElkeCArIDEpO1xuICAgICAgICAgICAgICAgIC8vIFJlYnVpbGQgZG90dGVkX29yZGVyXG4gICAgICAgICAgICAgICAgcnVuLmRvdHRlZF9vcmRlciA9IHRyaW1tZWRTZWdzLmpvaW4oXCIuXCIpO1xuICAgICAgICAgICAgICAgIGlmICh0cmltbWVkU2Vncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bi50cmFjZV9pZCA9IHRyaW1tZWRTZWdzWzBdLnNsaWNlKC1USU1FU1RBTVBfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bi50cmFjZV9pZCA9IHJ1bi5pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bi5wYXJlbnRfcnVuX2lkID09PSBwYXJlbnRJZCkge1xuICAgICAgICAgICAgLy8gV2UndmUgZm91bmQgdGhlIG5ldyByb290IG5vZGUuXG4gICAgICAgICAgICBydW4ucGFyZW50X3J1bl9pZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc2V0UmVwbGljYVRyYWNlUm9vdChyZXBsaWNhS2V5LCB0cmFjZVJvb3RJZCkge1xuICAgICAgICAvLyBTZXQgdGhlIHJlcGxpY2EgdHJhY2Ugcm9vdCBpbiBjb250ZXh0IHZhcnMgb24gdGhpcyBydW4gYW5kIGFsbCBkZXNjZW5kYW50c1xuICAgICAgICBjb25zdCByZXBsaWNhVHJhY2VSb290cyA9ICgwLCBjb250ZXh0X3ZhcnNfanNfMS5nZXRDb250ZXh0VmFyKSh0aGlzLCBjb25zdGFudHNfanNfMS5fUkVQTElDQV9UUkFDRV9ST09UU19LRVkpID8/IHt9O1xuICAgICAgICByZXBsaWNhVHJhY2VSb290c1tyZXBsaWNhS2V5XSA9IHRyYWNlUm9vdElkO1xuICAgICAgICAoMCwgY29udGV4dF92YXJzX2pzXzEuc2V0Q29udGV4dFZhcikodGhpcywgY29uc3RhbnRzX2pzXzEuX1JFUExJQ0FfVFJBQ0VfUk9PVFNfS0VZLCByZXBsaWNhVHJhY2VSb290cyk7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBhbGwgZGVzY2VuZGFudHMgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICAgIC8vIGFyb3VuZCBydW4gdHJlZSBjcmVhdGlvbiB2cyBwcm9jZXNzaW5nIHRpbWVcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkX3J1bnMpIHtcbiAgICAgICAgICAgIGNoaWxkLl9zZXRSZXBsaWNhVHJhY2VSb290KHJlcGxpY2FLZXksIHRyYWNlUm9vdElkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfcmVtYXBGb3JQcm9qZWN0KHBhcmFtcykge1xuICAgICAgICBjb25zdCB7IHByb2plY3ROYW1lLCBydW50aW1lRW52LCBleGNsdWRlQ2hpbGRSdW5zID0gdHJ1ZSwgcmVyb290ID0gZmFsc2UsIGRpc3RyaWJ1dGVkUGFyZW50SWQsIGFwaVVybCwgYXBpS2V5LCB3b3Jrc3BhY2VJZCwgfSA9IHBhcmFtcztcbiAgICAgICAgY29uc3QgYmFzZVJ1biA9IHRoaXMuX2NvbnZlcnRUb0NyZWF0ZSh0aGlzLCBydW50aW1lRW52LCBleGNsdWRlQ2hpbGRSdW5zKTtcbiAgICAgICAgLy8gU2tpcCByZW1hcHBpbmcgaWYgcHJvamVjdCBuYW1lIGlzIHRoZSBzYW1lXG4gICAgICAgIGlmIChwcm9qZWN0TmFtZSA9PT0gdGhpcy5wcm9qZWN0X25hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYmFzZVJ1bixcbiAgICAgICAgICAgICAgICBzZXNzaW9uX25hbWU6IHByb2plY3ROYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcHBseSByZXJvb3QgbG9naWMgYmVmb3JlIElEIHJlbWFwcGluZ1xuICAgICAgICBpZiAocmVyb290KSB7XG4gICAgICAgICAgICBpZiAoZGlzdHJpYnV0ZWRQYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBkaXN0cmlidXRlZCBwYXJlbnQgSUQsIHNsaWNlIGF0IHRoYXQgcG9pbnRcbiAgICAgICAgICAgICAgICB0aGlzLl9zbGljZVBhcmVudElkKGRpc3RyaWJ1dGVkUGFyZW50SWQsIGJhc2VSdW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgbm8gZGlzdHJpYnV0ZWQgcGFyZW50IElELCBzaW1wbHkgbWFrZSB0aGlzIHJ1biBhIHJvb3QgcnVuXG4gICAgICAgICAgICAgICAgLy8gYnkgcmVtb3ZpbmcgcGFyZW50X3J1bl9pZCBhbmQgcmVzZXR0aW5nIHRyYWNlIGluZm9cbiAgICAgICAgICAgICAgICBiYXNlUnVuLnBhcmVudF9ydW5faWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgY3VycmVudCBydW4gYXMgdGhlIHRyYWNlIHJvb3RcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVJ1bi5kb3R0ZWRfb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgZG90dGVkIG9yZGVyIHRvIGp1c3QgdGhpcyBydW5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VncyA9IGJhc2VSdW4uZG90dGVkX29yZGVyLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVJ1bi5kb3R0ZWRfb3JkZXIgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUnVuLnRyYWNlX2lkID0gYmFzZVJ1bi5pZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0b3JlIHRoaXMgcnVuJ3Mgb3JpZ2luYWwgSUQgaW4gY29udGV4dCB2YXJzIHNvIGRlc2NlbmRhbnRzIGtub3cgdGhlIG5ldyB0cmFjZSByb290XG4gICAgICAgICAgICAvLyBXZSBzdG9yZSB0aGUgb3JpZ2luYWwgSUQgKGJlZm9yZSByZW1hcHBpbmcpIHNvIGl0IGNhbiBiZSBmb3VuZCBpbiBkb3R0ZWRfb3JkZXJcbiAgICAgICAgICAgIGNvbnN0IHJlcGxpY2FLZXkgPSBnZXRSZXBsaWNhS2V5KHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICAgICAgICBhcGlVcmwsXG4gICAgICAgICAgICAgICAgYXBpS2V5LFxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZUlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9zZXRSZXBsaWNhVHJhY2VSb290KHJlcGxpY2FLZXksIGJhc2VSdW4uaWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGFuIGFuY2VzdG9yIHdhcyByZXJvb3RlZCBmb3IgdGhpcyByZXBsaWNhLCB1cGRhdGUgdHJhY2VfaWQgYW5kIGRvdHRlZF9vcmRlclxuICAgICAgICAvLyB0byByZWZsZWN0IHRoZSBuZXcgdHJhY2UgaGllcmFyY2h5LiBUaGlzIGlzIHRyYWNrZWQgdmlhIGNvbnRleHQgdmFyaWFibGVzLlxuICAgICAgICBsZXQgYW5jZXN0b3JSZXJvb3RlZFRyYWNlSWQ7XG4gICAgICAgIGlmICghcmVyb290KSB7XG4gICAgICAgICAgICBjb25zdCByZXBsaWNhVHJhY2VSb290cyA9ICgwLCBjb250ZXh0X3ZhcnNfanNfMS5nZXRDb250ZXh0VmFyKSh0aGlzLCBjb25zdGFudHNfanNfMS5fUkVQTElDQV9UUkFDRV9ST09UU19LRVkpID8/IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVwbGljYUtleSA9IGdldFJlcGxpY2FLZXkoe1xuICAgICAgICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgICAgICAgIGFwaVVybCxcbiAgICAgICAgICAgICAgICBhcGlLZXksXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFuY2VzdG9yUmVyb290ZWRUcmFjZUlkID0gcmVwbGljYVRyYWNlUm9vdHNbcmVwbGljYUtleV07XG4gICAgICAgICAgICBpZiAoYW5jZXN0b3JSZXJvb3RlZFRyYWNlSWQpIHtcbiAgICAgICAgICAgICAgICAvLyBBbiBhbmNlc3RvciB3YXMgcmVyb290ZWQgZm9yIHRoaXMgcmVwbGljYSwgc28gc2V0IG91ciB0cmFjZV9pZFxuICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBhbmNlc3RvcidzIG9yaWdpbmFsICh1bm1hcHBlZCkgSUQuIEl0IHdpbGwgYmUgcmVtYXBwZWQgYWxvbmcgd2l0aCBvdGhlciBJRHMuXG4gICAgICAgICAgICAgICAgYmFzZVJ1bi50cmFjZV9pZCA9IGFuY2VzdG9yUmVyb290ZWRUcmFjZUlkO1xuICAgICAgICAgICAgICAgIC8vIEFsc28gc2xpY2UgdGhlIGRvdHRlZF9vcmRlciB0byBzdGFydCBmcm9tIHRoZSBuZXcgdHJhY2Ugcm9vdFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyBkZXNjZW5kYW50cyBvZiBhIHJlcm9vdGVkIGFuY2VzdG9yIGhhdmUgY29ycmVjdCBoaWVyYXJjaHlcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVJ1bi5kb3R0ZWRfb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VncyA9IGJhc2VSdW4uZG90dGVkX29yZGVyLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvb3RJZHggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXcgdHJhY2Ugcm9vdCdzIHNlZ21lbnQgaW4gZG90dGVkX29yZGVyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHNlZ3MubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnSWQgPSBzZWdzW2lkeF0uc2xpY2UoLVRJTUVTVEFNUF9MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ0lkID09PSBhbmNlc3RvclJlcm9vdGVkVHJhY2VJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RJZHggPSBpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvb3RJZHggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgc2VnbWVudHMgZnJvbSBuZXcgdHJhY2Ugcm9vdCBvbndhcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmltbWVkU2VncyA9IHNlZ3Muc2xpY2Uocm9vdElkeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUnVuLmRvdHRlZF9vcmRlciA9IHRyaW1tZWRTZWdzLmpvaW4oXCIuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlbWFwIElEcyBmb3IgdGhlIHJlcGxpY2EgdXNpbmcgdXVpZDUgKGRldGVybWluaXN0aWMpXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW5jeSBhY3Jvc3MgcnVucyBpbiB0aGUgc2FtZSByZXBsaWNhXG4gICAgICAgIGNvbnN0IG9sZElkID0gYmFzZVJ1bi5pZDtcbiAgICAgICAgY29uc3QgbmV3SWQgPSAoMCwgdXVpZF8xLnY1KShgJHtvbGRJZH06JHtwcm9qZWN0TmFtZX1gLCBVVUlEX05BTUVTUEFDRV9ETlMpO1xuICAgICAgICAvLyBSZW1hcCB0cmFjZV9pZFxuICAgICAgICBsZXQgbmV3VHJhY2VJZDtcbiAgICAgICAgaWYgKGJhc2VSdW4udHJhY2VfaWQpIHtcbiAgICAgICAgICAgIG5ld1RyYWNlSWQgPSAoMCwgdXVpZF8xLnY1KShgJHtiYXNlUnVuLnRyYWNlX2lkfToke3Byb2plY3ROYW1lfWAsIFVVSURfTkFNRVNQQUNFX0ROUyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdUcmFjZUlkID0gbmV3SWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtYXAgcGFyZW50X3J1bl9pZFxuICAgICAgICBsZXQgbmV3UGFyZW50SWQ7XG4gICAgICAgIGlmIChiYXNlUnVuLnBhcmVudF9ydW5faWQpIHtcbiAgICAgICAgICAgIG5ld1BhcmVudElkID0gKDAsIHV1aWRfMS52NSkoYCR7YmFzZVJ1bi5wYXJlbnRfcnVuX2lkfToke3Byb2plY3ROYW1lfWAsIFVVSURfTkFNRVNQQUNFX0ROUyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtYXAgZG90dGVkX29yZGVyIHNlZ21lbnRzXG4gICAgICAgIGxldCBuZXdEb3R0ZWRPcmRlcjtcbiAgICAgICAgaWYgKGJhc2VSdW4uZG90dGVkX29yZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzZWdzID0gYmFzZVJ1bi5kb3R0ZWRfb3JkZXIuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgcmVtYXBwZWRTZWdzID0gc2Vncy5tYXAoKHNlZykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIFVVSUQgZnJvbSB0aGUgc2VnbWVudCAobGFzdCBUSU1FU1RBTVBfTEVOR1RIIGNoYXJhY3RlcnMpXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnSWQgPSBzZWcuc2xpY2UoLVRJTUVTVEFNUF9MRU5HVEgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFwcGVkSWQgPSAoMCwgdXVpZF8xLnY1KShgJHtzZWdJZH06JHtwcm9qZWN0TmFtZX1gLCBVVUlEX05BTUVTUEFDRV9ETlMpO1xuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIFVVSUQgcGFydCB3aGlsZSBrZWVwaW5nIHRoZSB0aW1lc3RhbXAgcHJlZml4XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlZy5zbGljZSgwLCAtVElNRVNUQU1QX0xFTkdUSCkgKyByZW1hcHBlZElkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuZXdEb3R0ZWRPcmRlciA9IHJlbWFwcGVkU2Vncy5qb2luKFwiLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZVJ1bixcbiAgICAgICAgICAgIGlkOiBuZXdJZCxcbiAgICAgICAgICAgIHRyYWNlX2lkOiBuZXdUcmFjZUlkLFxuICAgICAgICAgICAgcGFyZW50X3J1bl9pZDogbmV3UGFyZW50SWQsXG4gICAgICAgICAgICBkb3R0ZWRfb3JkZXI6IG5ld0RvdHRlZE9yZGVyLFxuICAgICAgICAgICAgc2Vzc2lvbl9uYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgcG9zdFJ1bihleGNsdWRlQ2hpbGRSdW5zID0gdHJ1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnVudGltZUVudiA9ICgwLCBlbnZfanNfMi5nZXRSdW50aW1lRW52aXJvbm1lbnQpKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXBsaWNhcyAmJiB0aGlzLnJlcGxpY2FzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgcHJvamVjdE5hbWUsIGFwaUtleSwgYXBpVXJsLCB3b3Jrc3BhY2VJZCwgcmVyb290IH0gb2YgdGhpc1xuICAgICAgICAgICAgICAgICAgICAucmVwbGljYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcnVuQ3JlYXRlID0gdGhpcy5fcmVtYXBGb3JQcm9qZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSA/PyB0aGlzLnByb2plY3RfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVFbnYsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlQ2hpbGRSdW5zOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVyb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZWRQYXJlbnRJZDogdGhpcy5kaXN0cmlidXRlZFBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlSWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudC5jcmVhdGVSdW4ocnVuQ3JlYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVuQ3JlYXRlID0gdGhpcy5fY29udmVydFRvQ3JlYXRlKHRoaXMsIHJ1bnRpbWVFbnYsIGV4Y2x1ZGVDaGlsZFJ1bnMpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmNyZWF0ZVJ1bihydW5DcmVhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFleGNsdWRlQ2hpbGRSdW5zKSB7XG4gICAgICAgICAgICAgICAgKDAsIHdhcm5fanNfMS53YXJuT25jZSkoXCJQb3N0aW5nIHdpdGggZXhjbHVkZUNoaWxkUnVucz1mYWxzZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZFJ1biBvZiB0aGlzLmNoaWxkX3J1bnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hpbGRSdW4ucG9zdFJ1bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgaW4gcG9zdFJ1biBmb3IgcnVuICR7dGhpcy5pZH06YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHBhdGNoUnVuKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMucmVwbGljYXMgJiYgdGhpcy5yZXBsaWNhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgcHJvamVjdE5hbWUsIGFwaUtleSwgYXBpVXJsLCB3b3Jrc3BhY2VJZCwgdXBkYXRlcywgcmVyb290LCB9IG9mIHRoaXMucmVwbGljYXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydW5EYXRhID0gdGhpcy5fcmVtYXBGb3JQcm9qZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lID8/IHRoaXMucHJvamVjdF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBydW50aW1lRW52OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVDaGlsZFJ1bnM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJlcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZWRQYXJlbnRJZDogdGhpcy5kaXN0cmlidXRlZFBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICBhcGlVcmwsXG4gICAgICAgICAgICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlSWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJ1bkRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJ1bkRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcnVuX3R5cGU6IHJ1bkRhdGEucnVuX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHJ1bkRhdGEuc3RhcnRfdGltZSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0czogcnVuRGF0YS5vdXRwdXRzLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogcnVuRGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50X3J1bl9pZDogcnVuRGF0YS5wYXJlbnRfcnVuX2lkLFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX25hbWU6IHJ1bkRhdGEuc2Vzc2lvbl9uYW1lLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfZXhhbXBsZV9pZDogcnVuRGF0YS5yZWZlcmVuY2VfZXhhbXBsZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU6IHJ1bkRhdGEuZW5kX3RpbWUsXG4gICAgICAgICAgICAgICAgICAgIGRvdHRlZF9vcmRlcjogcnVuRGF0YS5kb3R0ZWRfb3JkZXIsXG4gICAgICAgICAgICAgICAgICAgIHRyYWNlX2lkOiBydW5EYXRhLnRyYWNlX2lkLFxuICAgICAgICAgICAgICAgICAgICBldmVudHM6IHJ1bkRhdGEuZXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICB0YWdzOiBydW5EYXRhLnRhZ3MsXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiBydW5EYXRhLmV4dHJhLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50czogdGhpcy5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIEltcG9ydGFudCB0aGF0IGlucHV0cyBpcyBub3QgYSBrZXkgaW4gdGhlIHJ1biB1cGRhdGVcbiAgICAgICAgICAgICAgICAvLyBpZiBleGNsdWRlZCBiZWNhdXNlIGl0IHdpbGwgb3ZlcndyaXRlIHRoZSBydW4gY3JlYXRlIGlmIHRoZVxuICAgICAgICAgICAgICAgIC8vIHR3byBvcGVyYXRpb25zIGFyZSBtZXJnZWQgZHVyaW5nIGJhdGNoaW5nXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zPy5leGNsdWRlSW5wdXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQuaW5wdXRzID0gcnVuRGF0YS5pbnB1dHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnVwZGF0ZVJ1bihydW5EYXRhLmlkLCB1cGRhdGVQYXlsb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsLFxuICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VJZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVuVXBkYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHJ1bl90eXBlOiB0aGlzLnJ1bl90eXBlLFxuICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLl9zZXJpYWxpemVkX3N0YXJ0X3RpbWUgPz8gdGhpcy5zdGFydF90aW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRfdGltZTogdGhpcy5lbmRfdGltZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cyxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50X3J1bl9pZDogdGhpcy5wYXJlbnRfcnVuPy5pZCA/PyB0aGlzLnBhcmVudF9ydW5faWQsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZV9leGFtcGxlX2lkOiB0aGlzLnJlZmVyZW5jZV9leGFtcGxlX2lkLFxuICAgICAgICAgICAgICAgICAgICBleHRyYTogdGhpcy5leHRyYSxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB0aGlzLmV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgZG90dGVkX29yZGVyOiB0aGlzLmRvdHRlZF9vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VfaWQ6IHRoaXMudHJhY2VfaWQsXG4gICAgICAgICAgICAgICAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHRoaXMuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25fbmFtZTogdGhpcy5wcm9qZWN0X25hbWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBJbXBvcnRhbnQgdGhhdCBpbnB1dHMgaXMgbm90IGEga2V5IGluIHRoZSBydW4gdXBkYXRlXG4gICAgICAgICAgICAgICAgLy8gaWYgZXhjbHVkZWQgYmVjYXVzZSBpdCB3aWxsIG92ZXJ3cml0ZSB0aGUgcnVuIGNyZWF0ZSBpZiB0aGVcbiAgICAgICAgICAgICAgICAvLyB0d28gb3BlcmF0aW9ucyBhcmUgbWVyZ2VkIGR1cmluZyBiYXRjaGluZ1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucz8uZXhjbHVkZUlucHV0cykge1xuICAgICAgICAgICAgICAgICAgICBydW5VcGRhdGUuaW5wdXRzID0gdGhpcy5pbnB1dHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnVwZGF0ZVJ1bih0aGlzLmlkLCBydW5VcGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgaW4gcGF0Y2hSdW4gZm9yIHJ1biAke3RoaXMuaWR9YCwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRUb0NyZWF0ZSh0aGlzLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGFuIGV2ZW50IHRvIHRoZSBydW4gdHJlZS5cbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBBIHNpbmdsZSBldmVudCBvciBzdHJpbmcgdG8gYWRkXG4gICAgICovXG4gICAgYWRkRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmV2ZW50cykge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImV2ZW50XCIsXG4gICAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGV2ZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgICAgICB0aW1lOiBldmVudC50aW1lID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tUnVubmFibGVDb25maWcocGFyZW50Q29uZmlnLCBwcm9wcykge1xuICAgICAgICAvLyBXZSBvbmx5IGhhbmRsZSB0aGUgY2FsbGJhY2sgbWFuYWdlciBjYXNlIGZvciBub3dcbiAgICAgICAgY29uc3QgY2FsbGJhY2tNYW5hZ2VyID0gcGFyZW50Q29uZmlnPy5jYWxsYmFja3M7XG4gICAgICAgIGxldCBwYXJlbnRSdW47XG4gICAgICAgIGxldCBwcm9qZWN0TmFtZTtcbiAgICAgICAgbGV0IGNsaWVudDtcbiAgICAgICAgbGV0IHRyYWNpbmdFbmFibGVkID0gKDAsIGVudl9qc18xLmlzVHJhY2luZ0VuYWJsZWQpKCk7XG4gICAgICAgIGlmIChjYWxsYmFja01hbmFnZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJ1bklkID0gY2FsbGJhY2tNYW5hZ2VyPy5nZXRQYXJlbnRSdW5JZD8uKCkgPz8gXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGxhbmdDaGFpblRyYWNlciA9IGNhbGxiYWNrTWFuYWdlcj8uaGFuZGxlcnM/LmZpbmQoKGhhbmRsZXIpID0+IGhhbmRsZXI/Lm5hbWUgPT0gXCJsYW5nY2hhaW5fdHJhY2VyXCIpO1xuICAgICAgICAgICAgcGFyZW50UnVuID0gbGFuZ0NoYWluVHJhY2VyPy5nZXRSdW4/LihwYXJlbnRSdW5JZCk7XG4gICAgICAgICAgICBwcm9qZWN0TmFtZSA9IGxhbmdDaGFpblRyYWNlcj8ucHJvamVjdE5hbWU7XG4gICAgICAgICAgICBjbGllbnQgPSBsYW5nQ2hhaW5UcmFjZXI/LmNsaWVudDtcbiAgICAgICAgICAgIHRyYWNpbmdFbmFibGVkID0gdHJhY2luZ0VuYWJsZWQgfHwgISFsYW5nQ2hhaW5UcmFjZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRSdW4pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUnVuVHJlZSh7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgIHRyYWNpbmdFbmFibGVkLFxuICAgICAgICAgICAgICAgIHByb2plY3RfbmFtZTogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRSdW5UcmVlID0gbmV3IFJ1blRyZWUoe1xuICAgICAgICAgICAgbmFtZTogcGFyZW50UnVuLm5hbWUsXG4gICAgICAgICAgICBpZDogcGFyZW50UnVuLmlkLFxuICAgICAgICAgICAgdHJhY2VfaWQ6IHBhcmVudFJ1bi50cmFjZV9pZCxcbiAgICAgICAgICAgIGRvdHRlZF9vcmRlcjogcGFyZW50UnVuLmRvdHRlZF9vcmRlcixcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHRyYWNpbmdFbmFibGVkLFxuICAgICAgICAgICAgcHJvamVjdF9uYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAgICAgICAuLi5uZXcgU2V0KChwYXJlbnRSdW4/LnRhZ3MgPz8gW10pLmNvbmNhdChwYXJlbnRDb25maWc/LnRhZ3MgPz8gW10pKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmVudFJ1bj8uZXh0cmE/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRDb25maWc/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmVudFJ1blRyZWUuY3JlYXRlQ2hpbGQocHJvcHMpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbURvdHRlZE9yZGVyKGRvdHRlZE9yZGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb21IZWFkZXJzKHsgXCJsYW5nc21pdGgtdHJhY2VcIjogZG90dGVkT3JkZXIgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSGVhZGVycyhoZWFkZXJzLCBpbmhlcml0QXJncykge1xuICAgICAgICBjb25zdCByYXdIZWFkZXJzID0gXCJnZXRcIiBpbiBoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBcImxhbmdzbWl0aC10cmFjZVwiOiBoZWFkZXJzLmdldChcImxhbmdzbWl0aC10cmFjZVwiKSxcbiAgICAgICAgICAgICAgICBiYWdnYWdlOiBoZWFkZXJzLmdldChcImJhZ2dhZ2VcIiksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IGhlYWRlcnM7XG4gICAgICAgIGNvbnN0IGhlYWRlclRyYWNlID0gcmF3SGVhZGVyc1tcImxhbmdzbWl0aC10cmFjZVwiXTtcbiAgICAgICAgaWYgKCFoZWFkZXJUcmFjZSB8fCB0eXBlb2YgaGVhZGVyVHJhY2UgIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwYXJlbnREb3R0ZWRPcmRlciA9IGhlYWRlclRyYWNlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgcGFyc2VkRG90dGVkT3JkZXIgPSBwYXJlbnREb3R0ZWRPcmRlci5zcGxpdChcIi5cIikubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc3RyVGltZSwgdXVpZF0gPSBwYXJ0LnNwbGl0KFwiWlwiKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN0clRpbWUsIHRpbWU6IERhdGUucGFyc2Uoc3RyVGltZSArIFwiWlwiKSwgdXVpZCB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcnNlZERvdHRlZE9yZGVyWzBdLnV1aWQ7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLmluaGVyaXRBcmdzLFxuICAgICAgICAgICAgbmFtZTogaW5oZXJpdEFyZ3M/LltcIm5hbWVcIl0gPz8gXCJwYXJlbnRcIixcbiAgICAgICAgICAgIHJ1bl90eXBlOiBpbmhlcml0QXJncz8uW1wicnVuX3R5cGVcIl0gPz8gXCJjaGFpblwiLFxuICAgICAgICAgICAgc3RhcnRfdGltZTogaW5oZXJpdEFyZ3M/LltcInN0YXJ0X3RpbWVcIl0gPz8gRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGlkOiBwYXJzZWREb3R0ZWRPcmRlci5hdCgtMSk/LnV1aWQsXG4gICAgICAgICAgICB0cmFjZV9pZDogdHJhY2VJZCxcbiAgICAgICAgICAgIGRvdHRlZF9vcmRlcjogcGFyZW50RG90dGVkT3JkZXIsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChyYXdIZWFkZXJzW1wiYmFnZ2FnZVwiXSAmJiB0eXBlb2YgcmF3SGVhZGVyc1tcImJhZ2dhZ2VcIl0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhZ2dhZ2UgPSBCYWdnYWdlLmZyb21IZWFkZXIocmF3SGVhZGVyc1tcImJhZ2dhZ2VcIl0pO1xuICAgICAgICAgICAgY29uZmlnLm1ldGFkYXRhID0gYmFnZ2FnZS5tZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbmZpZy50YWdzID0gYmFnZ2FnZS50YWdzO1xuICAgICAgICAgICAgY29uZmlnLnByb2plY3RfbmFtZSA9IGJhZ2dhZ2UucHJvamVjdF9uYW1lO1xuICAgICAgICAgICAgY29uZmlnLnJlcGxpY2FzID0gYmFnZ2FnZS5yZXBsaWNhcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydW5UcmVlID0gbmV3IFJ1blRyZWUoY29uZmlnKTtcbiAgICAgICAgLy8gU2V0IHRoZSBkaXN0cmlidXRlZCBwYXJlbnQgSUQgdG8gdGhpcyBydW4ncyBJRCBmb3IgcmVyb290aW5nXG4gICAgICAgIHJ1blRyZWUuZGlzdHJpYnV0ZWRQYXJlbnRJZCA9IHJ1blRyZWUuaWQ7XG4gICAgICAgIHJldHVybiBydW5UcmVlO1xuICAgIH1cbiAgICB0b0hlYWRlcnMoaGVhZGVycykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICBcImxhbmdzbWl0aC10cmFjZVwiOiB0aGlzLmRvdHRlZF9vcmRlcixcbiAgICAgICAgICAgIGJhZ2dhZ2U6IG5ldyBCYWdnYWdlKHRoaXMuZXh0cmE/Lm1ldGFkYXRhLCB0aGlzLnRhZ3MsIHRoaXMucHJvamVjdF9uYW1lLCB0aGlzLnJlcGxpY2FzKS50b0hlYWRlcigpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0cy5SdW5UcmVlID0gUnVuVHJlZTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5UcmVlLCBcInNoYXJlZENsaWVudFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgdmFsdWU6IG51bGxcbn0pO1xuZnVuY3Rpb24gaXNSdW5UcmVlKHgpIHtcbiAgICByZXR1cm4gKHggIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgeC5jcmVhdGVDaGlsZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiB4LnBvc3RSdW4gPT09IFwiZnVuY3Rpb25cIik7XG59XG5mdW5jdGlvbiBpc0xhbmdDaGFpblRyYWNlckxpa2UoeCkge1xuICAgIHJldHVybiAodHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgeCAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiB4Lm5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgeC5uYW1lID09PSBcImxhbmdjaGFpbl90cmFjZXJcIik7XG59XG5mdW5jdGlvbiBjb250YWluc0xhbmdDaGFpblRyYWNlckxpa2UoeCkge1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh4KSAmJiB4LnNvbWUoKGNhbGxiYWNrKSA9PiBpc0xhbmdDaGFpblRyYWNlckxpa2UoY2FsbGJhY2spKSk7XG59XG5mdW5jdGlvbiBpc0NhbGxiYWNrTWFuYWdlckxpa2UoeCkge1xuICAgIHJldHVybiAodHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgeCAhPSBudWxsICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoeC5oYW5kbGVycykpO1xufVxuZnVuY3Rpb24gaXNSdW5uYWJsZUNvbmZpZ0xpa2UoeCkge1xuICAgIC8vIENoZWNrIHRoYXQgaXQncyBhbiBvYmplY3Qgd2l0aCBhIGNhbGxiYWNrcyBhcmdcbiAgICAvLyB0aGF0IGhhcyBlaXRoZXIgYSBDYWxsYmFja01hbmFnZXJMaWtlIG9iamVjdCB3aXRoIGEgbGFuZ2NoYWluIHRyYWNlciB3aXRoaW4gaXRcbiAgICAvLyBvciBhbiBhcnJheSB3aXRoIGEgTGFuZ0NoYWluVHJhY2VyTGlrZSBvYmplY3Qgd2l0aGluIGl0XG4gICAgY29uc3QgY2FsbGJhY2tzID0geD8uY2FsbGJhY2tzO1xuICAgIHJldHVybiAoeCAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBjYWxsYmFja3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgLy8gQ2FsbGJhY2sgbWFuYWdlciB3aXRoIGEgbGFuZ2NoYWluIHRyYWNlclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAoY29udGFpbnNMYW5nQ2hhaW5UcmFjZXJMaWtlKGNhbGxiYWNrcz8uaGFuZGxlcnMpIHx8XG4gICAgICAgICAgICAvLyBPciBpdCdzIGFuIGFycmF5IHdpdGggYSBMYW5nQ2hhaW5UcmFjZXJMaWtlIG9iamVjdCB3aXRoaW4gaXRcbiAgICAgICAgICAgIGNvbnRhaW5zTGFuZ0NoYWluVHJhY2VyTGlrZShjYWxsYmFja3MpKSk7XG59XG5mdW5jdGlvbiBfZ2V0V3JpdGVSZXBsaWNhc0Zyb21FbnYoKSB7XG4gICAgY29uc3QgZW52VmFyID0gKDAsIGVudl9qc18yLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR1NNSVRIX1JVTlNfRU5EUE9JTlRTXCIpO1xuICAgIGlmICghZW52VmFyKVxuICAgICAgICByZXR1cm4gW107XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShlbnZWYXIpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICBjb25zdCByZXBsaWNhcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gXCJvYmplY3RcIiB8fCBpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBpdGVtIHR5cGUgaW4gTEFOR1NNSVRIX1JVTlNfRU5EUE9JTlRTOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBleHBlY3RlZCBvYmplY3QsIGdvdCAke3R5cGVvZiBpdGVtfWApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmFwaV91cmwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGFwaV91cmwgdHlwZSBpbiBMQU5HU01JVEhfUlVOU19FTkRQT0lOVFM6IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIGl0ZW0uYXBpX3VybH1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5hcGlfa2V5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBhcGlfa2V5IHR5cGUgaW4gTEFOR1NNSVRIX1JVTlNfRU5EUE9JTlRTOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBleHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiBpdGVtLmFwaV9rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXBsaWNhcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsOiBpdGVtLmFwaV91cmwucmVwbGFjZSgvXFwvJC8sIFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk6IGl0ZW0uYXBpX2tleSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXBsaWNhcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiICYmIHBhcnNlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2NoZWNrRW5kcG9pbnRFbnZVbnNldChwYXJzZWQpO1xuICAgICAgICAgICAgY29uc3QgcmVwbGljYXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW3VybCwga2V5XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5VcmwgPSB1cmwucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcGxpY2FzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpVXJsOiBjbGVhblVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaUtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCB2YWx1ZSB0eXBlIGluIExBTkdTTUlUSF9SVU5TX0VORFBPSU5UUyBmb3IgVVJMICR7dXJsfTogYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgZXhwZWN0ZWQgc3RyaW5nLCBnb3QgJHt0eXBlb2Yga2V5fWApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVwbGljYXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJJbnZhbGlkIExBTkdTTUlUSF9SVU5TX0VORFBPSU5UUyDigJMgbXVzdCBiZSB2YWxpZCBKU09OIGFycmF5IG9mIFwiICtcbiAgICAgICAgICAgICAgICBgb2JqZWN0cyB3aXRoIGFwaV91cmwgYW5kIGFwaV9rZXkgcHJvcGVydGllcywgb3Igb2JqZWN0IG1hcHBpbmcgdXJsLT5hcGlLZXksIGdvdCAke3R5cGVvZiBwYXJzZWR9YCk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCgwLCBlcnJvcl9qc18xLmlzQ29uZmxpY3RpbmdFbmRwb2ludHNFcnJvcikoZSkpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS53YXJuKFwiSW52YWxpZCBMQU5HU01JVEhfUlVOU19FTkRQT0lOVFMg4oCTIG11c3QgYmUgdmFsaWQgSlNPTiBhcnJheSBvZiBcIiArXG4gICAgICAgICAgICBcIm9iamVjdHMgd2l0aCBhcGlfdXJsIGFuZCBhcGlfa2V5IHByb3BlcnRpZXMsIG9yIG9iamVjdCBtYXBwaW5nIHVybC0+YXBpS2V5XCIpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuZnVuY3Rpb24gX2Vuc3VyZVdyaXRlUmVwbGljYXMocmVwbGljYXMpIHtcbiAgICAvLyBJZiBudWxsIC0+IGZldGNoIGZyb20gZW52XG4gICAgaWYgKHJlcGxpY2FzKSB7XG4gICAgICAgIHJldHVybiByZXBsaWNhcy5tYXAoKHJlcGxpY2EpID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxpY2EpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IHJlcGxpY2FbMF0sXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZXM6IHJlcGxpY2FbMV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXBsaWNhO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXRXcml0ZVJlcGxpY2FzRnJvbUVudigpO1xufVxuZnVuY3Rpb24gX2NoZWNrRW5kcG9pbnRFbnZVbnNldChwYXJzZWQpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocGFyc2VkKS5sZW5ndGggPiAwICYmXG4gICAgICAgICgwLCBlbnZfanNfMy5nZXRMYW5nU21pdGhFbnZpcm9ubWVudFZhcmlhYmxlKShcIkVORFBPSU5UXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcl9qc18xLkNvbmZsaWN0aW5nRW5kcG9pbnRzRXJyb3IoKTtcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXNlVHJhY2VyID0gdm9pZCAwO1xuZXhwb3J0cy5pc0Jhc2VUcmFjZXIgPSBpc0Jhc2VUcmFjZXI7XG5jb25zdCBydW5fdHJlZXNfMSA9IHJlcXVpcmUoXCJsYW5nc21pdGgvcnVuX3RyZWVzXCIpO1xuY29uc3QgYmFzZV9qc18xID0gcmVxdWlyZShcIi4uL2NhbGxiYWNrcy9iYXNlLmNqc1wiKTtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWxzL2Vudi5janNcIik7XG4vLyBUT0RPOiBSZW1vdmUgYW5kIGp1c3QgdXNlIGJhc2UgTGFuZ1NtaXRoIFJ1biB0eXBlXG5jb25zdCBjb252ZXJ0UnVuVHJlZVRvUnVuID0gKHJ1blRyZWUpID0+IHtcbiAgICBpZiAoIXJ1blRyZWUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gSW1wb3J0YW50IHRoYXQgd2UgcmV0dXJuIHRoZSByYXcgcnVuIHRyZWUgb2JqZWN0IHNpbmNlIHRoZSByZWZlcmVuY2VcbiAgICAvLyBpcyBtdXRhdGVkIGluIG90aGVyIHBsYWNlcy5cbiAgICAvLyBUT0RPOiBSZW1vdmUgcGxhY2VzIHdoZXJlIHRoaXMgaXMgYmVpbmcgZG9uZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBydW5UcmVlLmV2ZW50cyA9IHJ1blRyZWUuZXZlbnRzID8/IFtdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHJ1blRyZWUuY2hpbGRfcnVucyA9IHJ1blRyZWUuY2hpbGRfcnVucyA/PyBbXTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBjYXN0IGFuZCBqdXN0IHVzZSB0aGUgTGFuZ1NtaXRoIFJ1blRyZWUgdHlwZS5cbiAgICByZXR1cm4gcnVuVHJlZTtcbn07XG5mdW5jdGlvbiBjb252ZXJ0UnVuVG9SdW5UcmVlKHJ1biwgcGFyZW50UnVuKSB7XG4gICAgaWYgKCFydW4pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBydW5fdHJlZXNfMS5SdW5UcmVlKHtcbiAgICAgICAgLi4ucnVuLFxuICAgICAgICBzdGFydF90aW1lOiBydW4uX3NlcmlhbGl6ZWRfc3RhcnRfdGltZSA/PyBydW4uc3RhcnRfdGltZSxcbiAgICAgICAgcGFyZW50X3J1bjogY29udmVydFJ1blRvUnVuVHJlZShwYXJlbnRSdW4pLFxuICAgICAgICBjaGlsZF9ydW5zOiBydW4uY2hpbGRfcnVuc1xuICAgICAgICAgICAgLm1hcCgocikgPT4gY29udmVydFJ1blRvUnVuVHJlZShyKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+IHIgIT09IHVuZGVmaW5lZCksXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAuLi5ydW4uZXh0cmEsXG4gICAgICAgICAgICBydW50aW1lOiAoMCwgZW52X2pzXzEuZ2V0UnVudGltZUVudmlyb25tZW50U3luYykoKSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhY2luZ0VuYWJsZWQ6IGZhbHNlLFxuICAgIH0pO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIF9jb2VyY2VUb0RpY3QodmFsdWUsIGRlZmF1bHRLZXkpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogeyBbZGVmYXVsdEtleV06IHZhbHVlIH07XG59XG5mdW5jdGlvbiBpc0Jhc2VUcmFjZXIoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeC5fYWRkUnVuVG9SdW5NYXAgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmNsYXNzIEJhc2VUcmFjZXIgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZUNhbGxiYWNrSGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoX2ZpZWxkcykge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBydW5UcmVlTWFwYCBpbnN0ZWFkLiAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJydW5NYXBcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicnVuVHJlZU1hcFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IE1hcCgpXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ1c2VzUnVuVHJlZU1hcFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvcHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXRSdW5CeUlkKHJ1bklkKSB7XG4gICAgICAgIGlmIChydW5JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXNSdW5UcmVlTWFwXG4gICAgICAgICAgICA/IGNvbnZlcnRSdW5UcmVlVG9SdW4odGhpcy5ydW5UcmVlTWFwLmdldChydW5JZCkpXG4gICAgICAgICAgICA6IHRoaXMucnVuTWFwLmdldChydW5JZCk7XG4gICAgfVxuICAgIHN0cmluZ2lmeUVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnN0YW5jZW9mL25vLWluc3RhbmNlb2ZcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlICsgKGVycm9yPy5zdGFjayA/IGBcXG5cXG4ke2Vycm9yLnN0YWNrfWAgOiBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2Vycm9yfWA7XG4gICAgfVxuICAgIF9hZGRDaGlsZFJ1bihwYXJlbnRSdW4sIGNoaWxkUnVuKSB7XG4gICAgICAgIHBhcmVudFJ1bi5jaGlsZF9ydW5zLnB1c2goY2hpbGRSdW4pO1xuICAgIH1cbiAgICBfYWRkUnVuVG9SdW5NYXAocnVuKSB7XG4gICAgICAgIGNvbnN0IHsgZG90dGVkT3JkZXI6IGN1cnJlbnREb3R0ZWRPcmRlciwgbWljcm9zZWNvbmRQcmVjaXNpb25EYXRlc3RyaW5nIH0gPSAoMCwgcnVuX3RyZWVzXzEuY29udmVydFRvRG90dGVkT3JkZXJGb3JtYXQpKG5ldyBEYXRlKHJ1bi5zdGFydF90aW1lKS5nZXRUaW1lKCksIHJ1bi5pZCwgcnVuLmV4ZWN1dGlvbl9vcmRlcik7XG4gICAgICAgIGNvbnN0IHN0b3JlZFJ1biA9IHsgLi4ucnVuIH07XG4gICAgICAgIGNvbnN0IHBhcmVudFJ1biA9IHRoaXMuZ2V0UnVuQnlJZChzdG9yZWRSdW4ucGFyZW50X3J1bl9pZCk7XG4gICAgICAgIGlmIChzdG9yZWRSdW4ucGFyZW50X3J1bl9pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50UnVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkQ2hpbGRSdW4ocGFyZW50UnVuLCBzdG9yZWRSdW4pO1xuICAgICAgICAgICAgICAgIHBhcmVudFJ1bi5jaGlsZF9leGVjdXRpb25fb3JkZXIgPSBNYXRoLm1heChwYXJlbnRSdW4uY2hpbGRfZXhlY3V0aW9uX29yZGVyLCBzdG9yZWRSdW4uY2hpbGRfZXhlY3V0aW9uX29yZGVyKTtcbiAgICAgICAgICAgICAgICBzdG9yZWRSdW4udHJhY2VfaWQgPSBwYXJlbnRSdW4udHJhY2VfaWQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFJ1bi5kb3R0ZWRfb3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZWRSdW4uZG90dGVkX29yZGVyID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UnVuLmRvdHRlZF9vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREb3R0ZWRPcmRlcixcbiAgICAgICAgICAgICAgICAgICAgXS5qb2luKFwiLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVkUnVuLl9zZXJpYWxpemVkX3N0YXJ0X3RpbWUgPSBtaWNyb3NlY29uZFByZWNpc2lvbkRhdGVzdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gbmF0dXJhbGx5IGZvciBjYWxsYmFja3MgYWRkZWQgd2l0aGluIGEgcnVuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFBhcmVudCBydW4gd2l0aCBVVUlEICR7c3RvcmVkUnVuLnBhcmVudF9ydW5faWR9IGhhcyBubyBkb3R0ZWQgb3JkZXIuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIG5hdHVyYWxseSBmb3IgY2FsbGJhY2tzIGFkZGVkIHdpdGhpbiBhIHJ1blxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgICAgICAgLy8gICBgUGFyZW50IHJ1biB3aXRoIFVVSUQgJHtzdG9yZWRSdW4ucGFyZW50X3J1bl9pZH0gbm90IGZvdW5kLmBcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RvcmVkUnVuLnRyYWNlX2lkID0gc3RvcmVkUnVuLmlkO1xuICAgICAgICAgICAgc3RvcmVkUnVuLmRvdHRlZF9vcmRlciA9IGN1cnJlbnREb3R0ZWRPcmRlcjtcbiAgICAgICAgICAgIHN0b3JlZFJ1bi5fc2VyaWFsaXplZF9zdGFydF90aW1lID0gbWljcm9zZWNvbmRQcmVjaXNpb25EYXRlc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZXNSdW5UcmVlTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBydW5UcmVlID0gY29udmVydFJ1blRvUnVuVHJlZShzdG9yZWRSdW4sIHBhcmVudFJ1bik7XG4gICAgICAgICAgICBpZiAocnVuVHJlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5UcmVlTWFwLnNldChzdG9yZWRSdW4uaWQsIHJ1blRyZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ydW5NYXAuc2V0KHN0b3JlZFJ1bi5pZCwgc3RvcmVkUnVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmVkUnVuO1xuICAgIH1cbiAgICBhc3luYyBfZW5kVHJhY2UocnVuKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFJ1biA9IHJ1bi5wYXJlbnRfcnVuX2lkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5nZXRSdW5CeUlkKHJ1bi5wYXJlbnRfcnVuX2lkKTtcbiAgICAgICAgaWYgKHBhcmVudFJ1bikge1xuICAgICAgICAgICAgcGFyZW50UnVuLmNoaWxkX2V4ZWN1dGlvbl9vcmRlciA9IE1hdGgubWF4KHBhcmVudFJ1bi5jaGlsZF9leGVjdXRpb25fb3JkZXIsIHJ1bi5jaGlsZF9leGVjdXRpb25fb3JkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0UnVuKHJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5vblJ1blVwZGF0ZT8uKHJ1bik7XG4gICAgICAgIGlmICh0aGlzLnVzZXNSdW5UcmVlTWFwKSB7XG4gICAgICAgICAgICB0aGlzLnJ1blRyZWVNYXAuZGVsZXRlKHJ1bi5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJ1bk1hcC5kZWxldGUocnVuLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0RXhlY3V0aW9uT3JkZXIocGFyZW50UnVuSWQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UnVuID0gcGFyZW50UnVuSWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmdldFJ1bkJ5SWQocGFyZW50UnVuSWQpO1xuICAgICAgICAvLyBJZiBhIHJ1biBoYXMgbm8gcGFyZW50IHRoZW4gZXhlY3V0aW9uIG9yZGVyIGlzIDFcbiAgICAgICAgaWYgKCFwYXJlbnRSdW4pIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnRSdW4uY2hpbGRfZXhlY3V0aW9uX29yZGVyICsgMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhZGQgYSBydW4gdG8gdGhlIHJ1biBtYXAgZm9yIExMTSBzdGFydCBldmVudHMuXG4gICAgICogVGhpcyBtdXN0IHNvbWV0aW1lcyBiZSBkb25lIHN5bmNocm9ub3VzbHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICogd2hlbiBjYWxsYmFja3MgYXJlIGJhY2tncm91bmRlZCwgc28gd2UgZXhwb3NlIGl0IGFzIGEgc2VwYXJhdGUgbWV0aG9kIGhlcmUuXG4gICAgICovXG4gICAgX2NyZWF0ZVJ1bkZvckxMTVN0YXJ0KGxsbSwgcHJvbXB0cywgcnVuSWQsIHBhcmVudFJ1bklkLCBleHRyYVBhcmFtcywgdGFncywgbWV0YWRhdGEsIG5hbWUpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uX29yZGVyID0gdGhpcy5fZ2V0RXhlY3V0aW9uT3JkZXIocGFyZW50UnVuSWQpO1xuICAgICAgICBjb25zdCBzdGFydF90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZmluYWxFeHRyYVBhcmFtcyA9IG1ldGFkYXRhXG4gICAgICAgICAgICA/IHsgLi4uZXh0cmFQYXJhbXMsIG1ldGFkYXRhIH1cbiAgICAgICAgICAgIDogZXh0cmFQYXJhbXM7XG4gICAgICAgIGNvbnN0IHJ1biA9IHtcbiAgICAgICAgICAgIGlkOiBydW5JZCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUgPz8gbGxtLmlkW2xsbS5pZC5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIHBhcmVudF9ydW5faWQ6IHBhcmVudFJ1bklkLFxuICAgICAgICAgICAgc3RhcnRfdGltZSxcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQ6IGxsbSxcbiAgICAgICAgICAgIGV2ZW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzdGFydFwiLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBuZXcgRGF0ZShzdGFydF90aW1lKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaW5wdXRzOiB7IHByb21wdHMgfSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbl9vcmRlcixcbiAgICAgICAgICAgIGNoaWxkX3J1bnM6IFtdLFxuICAgICAgICAgICAgY2hpbGRfZXhlY3V0aW9uX29yZGVyOiBleGVjdXRpb25fb3JkZXIsXG4gICAgICAgICAgICBydW5fdHlwZTogXCJsbG1cIixcbiAgICAgICAgICAgIGV4dHJhOiBmaW5hbEV4dHJhUGFyYW1zID8/IHt9LFxuICAgICAgICAgICAgdGFnczogdGFncyB8fCBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZFJ1blRvUnVuTWFwKHJ1bik7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUxMTVN0YXJ0KGxsbSwgcHJvbXB0cywgcnVuSWQsIHBhcmVudFJ1bklkLCBleHRyYVBhcmFtcywgdGFncywgbWV0YWRhdGEsIG5hbWUpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKSA/P1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlUnVuRm9yTExNU3RhcnQobGxtLCBwcm9tcHRzLCBydW5JZCwgcGFyZW50UnVuSWQsIGV4dHJhUGFyYW1zLCB0YWdzLCBtZXRhZGF0YSwgbmFtZSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25SdW5DcmVhdGU/LihydW4pO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTExNU3RhcnQ/LihydW4pO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFkZCBhIHJ1biB0byB0aGUgcnVuIG1hcCBmb3IgY2hhdCBtb2RlbCBzdGFydCBldmVudHMuXG4gICAgICogVGhpcyBtdXN0IHNvbWV0aW1lcyBiZSBkb25lIHN5bmNocm9ub3VzbHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICogd2hlbiBjYWxsYmFja3MgYXJlIGJhY2tncm91bmRlZCwgc28gd2UgZXhwb3NlIGl0IGFzIGEgc2VwYXJhdGUgbWV0aG9kIGhlcmUuXG4gICAgICovXG4gICAgX2NyZWF0ZVJ1bkZvckNoYXRNb2RlbFN0YXJ0KGxsbSwgbWVzc2FnZXMsIHJ1bklkLCBwYXJlbnRSdW5JZCwgZXh0cmFQYXJhbXMsIHRhZ3MsIG1ldGFkYXRhLCBuYW1lKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGlvbl9vcmRlciA9IHRoaXMuX2dldEV4ZWN1dGlvbk9yZGVyKHBhcmVudFJ1bklkKTtcbiAgICAgICAgY29uc3Qgc3RhcnRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGZpbmFsRXh0cmFQYXJhbXMgPSBtZXRhZGF0YVxuICAgICAgICAgICAgPyB7IC4uLmV4dHJhUGFyYW1zLCBtZXRhZGF0YSB9XG4gICAgICAgICAgICA6IGV4dHJhUGFyYW1zO1xuICAgICAgICBjb25zdCBydW4gPSB7XG4gICAgICAgICAgICBpZDogcnVuSWQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lID8/IGxsbS5pZFtsbG0uaWQubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBwYXJlbnRfcnVuX2lkOiBwYXJlbnRSdW5JZCxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWUsXG4gICAgICAgICAgICBzZXJpYWxpemVkOiBsbG0sXG4gICAgICAgICAgICBldmVudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUoc3RhcnRfdGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlucHV0czogeyBtZXNzYWdlcyB9LFxuICAgICAgICAgICAgZXhlY3V0aW9uX29yZGVyLFxuICAgICAgICAgICAgY2hpbGRfcnVuczogW10sXG4gICAgICAgICAgICBjaGlsZF9leGVjdXRpb25fb3JkZXI6IGV4ZWN1dGlvbl9vcmRlcixcbiAgICAgICAgICAgIHJ1bl90eXBlOiBcImxsbVwiLFxuICAgICAgICAgICAgZXh0cmE6IGZpbmFsRXh0cmFQYXJhbXMgPz8ge30sXG4gICAgICAgICAgICB0YWdzOiB0YWdzIHx8IFtdLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkUnVuVG9SdW5NYXAocnVuKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlQ2hhdE1vZGVsU3RhcnQobGxtLCBtZXNzYWdlcywgcnVuSWQsIHBhcmVudFJ1bklkLCBleHRyYVBhcmFtcywgdGFncywgbWV0YWRhdGEsIG5hbWUpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKSA/P1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlUnVuRm9yQ2hhdE1vZGVsU3RhcnQobGxtLCBtZXNzYWdlcywgcnVuSWQsIHBhcmVudFJ1bklkLCBleHRyYVBhcmFtcywgdGFncywgbWV0YWRhdGEsIG5hbWUpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uUnVuQ3JlYXRlPy4ocnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkxMTVN0YXJ0Py4ocnVuKTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlTExNRW5kKG91dHB1dCwgcnVuSWQsIF9wYXJlbnRSdW5JZCwgX3RhZ3MsIGV4dHJhUGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IHRoaXMuZ2V0UnVuQnlJZChydW5JZCk7XG4gICAgICAgIGlmICghcnVuIHx8IHJ1bj8ucnVuX3R5cGUgIT09IFwibGxtXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIExMTSBydW4gdG8gZW5kLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBydW4uZW5kX3RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBydW4ub3V0cHV0cyA9IG91dHB1dDtcbiAgICAgICAgcnVuLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwiZW5kXCIsXG4gICAgICAgICAgICB0aW1lOiBuZXcgRGF0ZShydW4uZW5kX3RpbWUpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICBydW4uZXh0cmEgPSB7IC4uLnJ1bi5leHRyYSwgLi4uZXh0cmFQYXJhbXMgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkxMTUVuZD8uKHJ1bik7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZFRyYWNlKHJ1bik7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUxMTUVycm9yKGVycm9yLCBydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncywgZXh0cmFQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKTtcbiAgICAgICAgaWYgKCFydW4gfHwgcnVuPy5ydW5fdHlwZSAhPT0gXCJsbG1cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gTExNIHJ1biB0byBlbmQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bi5lbmRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHJ1bi5lcnJvciA9IHRoaXMuc3RyaW5naWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUocnVuLmVuZF90aW1lKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgcnVuLmV4dHJhID0geyAuLi5ydW4uZXh0cmEsIC4uLmV4dHJhUGFyYW1zIH07XG4gICAgICAgIGF3YWl0IHRoaXMub25MTE1FcnJvcj8uKHJ1bik7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZFRyYWNlKHJ1bik7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYWRkIGEgcnVuIHRvIHRoZSBydW4gbWFwIGZvciBjaGFpbiBzdGFydCBldmVudHMuXG4gICAgICogVGhpcyBtdXN0IHNvbWV0aW1lcyBiZSBkb25lIHN5bmNocm9ub3VzbHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICogd2hlbiBjYWxsYmFja3MgYXJlIGJhY2tncm91bmRlZCwgc28gd2UgZXhwb3NlIGl0IGFzIGEgc2VwYXJhdGUgbWV0aG9kIGhlcmUuXG4gICAgICovXG4gICAgX2NyZWF0ZVJ1bkZvckNoYWluU3RhcnQoY2hhaW4sIGlucHV0cywgcnVuSWQsIHBhcmVudFJ1bklkLCB0YWdzLCBtZXRhZGF0YSwgcnVuVHlwZSwgbmFtZSkge1xuICAgICAgICBjb25zdCBleGVjdXRpb25fb3JkZXIgPSB0aGlzLl9nZXRFeGVjdXRpb25PcmRlcihwYXJlbnRSdW5JZCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0X3RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBydW4gPSB7XG4gICAgICAgICAgICBpZDogcnVuSWQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lID8/IGNoYWluLmlkW2NoYWluLmlkLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgcGFyZW50X3J1bl9pZDogcGFyZW50UnVuSWQsXG4gICAgICAgICAgICBzdGFydF90aW1lLFxuICAgICAgICAgICAgc2VyaWFsaXplZDogY2hhaW4sXG4gICAgICAgICAgICBldmVudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUoc3RhcnRfdGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlucHV0cyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbl9vcmRlcixcbiAgICAgICAgICAgIGNoaWxkX2V4ZWN1dGlvbl9vcmRlcjogZXhlY3V0aW9uX29yZGVyLFxuICAgICAgICAgICAgcnVuX3R5cGU6IHJ1blR5cGUgPz8gXCJjaGFpblwiLFxuICAgICAgICAgICAgY2hpbGRfcnVuczogW10sXG4gICAgICAgICAgICBleHRyYTogbWV0YWRhdGEgPyB7IG1ldGFkYXRhIH0gOiB7fSxcbiAgICAgICAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRSdW5Ub1J1bk1hcChydW4pO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVDaGFpblN0YXJ0KGNoYWluLCBpbnB1dHMsIHJ1bklkLCBwYXJlbnRSdW5JZCwgdGFncywgbWV0YWRhdGEsIHJ1blR5cGUsIG5hbWUpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKSA/P1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlUnVuRm9yQ2hhaW5TdGFydChjaGFpbiwgaW5wdXRzLCBydW5JZCwgcGFyZW50UnVuSWQsIHRhZ3MsIG1ldGFkYXRhLCBydW5UeXBlLCBuYW1lKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJ1bkNyZWF0ZT8uKHJ1bik7XG4gICAgICAgIGF3YWl0IHRoaXMub25DaGFpblN0YXJ0Py4ocnVuKTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlQ2hhaW5FbmQob3V0cHV0cywgcnVuSWQsIF9wYXJlbnRSdW5JZCwgX3RhZ3MsIGt3YXJncykge1xuICAgICAgICBjb25zdCBydW4gPSB0aGlzLmdldFJ1bkJ5SWQocnVuSWQpO1xuICAgICAgICBpZiAoIXJ1bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2hhaW4gcnVuIHRvIGVuZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcnVuLmVuZF90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcnVuLm91dHB1dHMgPSBfY29lcmNlVG9EaWN0KG91dHB1dHMsIFwib3V0cHV0XCIpO1xuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJlbmRcIixcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKHJ1bi5lbmRfdGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChrd2FyZ3M/LmlucHV0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBydW4uaW5wdXRzID0gX2NvZXJjZVRvRGljdChrd2FyZ3MuaW5wdXRzLCBcImlucHV0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMub25DaGFpbkVuZD8uKHJ1bik7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZFRyYWNlKHJ1bik7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUNoYWluRXJyb3IoZXJyb3IsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBrd2FyZ3MpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKTtcbiAgICAgICAgaWYgKCFydW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNoYWluIHJ1biB0byBlbmQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bi5lbmRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHJ1bi5lcnJvciA9IHRoaXMuc3RyaW5naWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUocnVuLmVuZF90aW1lKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGt3YXJncz8uaW5wdXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJ1bi5pbnB1dHMgPSBfY29lcmNlVG9EaWN0KGt3YXJncy5pbnB1dHMsIFwiaW5wdXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5vbkNoYWluRXJyb3I/LihydW4pO1xuICAgICAgICBhd2FpdCB0aGlzLl9lbmRUcmFjZShydW4pO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFkZCBhIHJ1biB0byB0aGUgcnVuIG1hcCBmb3IgdG9vbCBzdGFydCBldmVudHMuXG4gICAgICogVGhpcyBtdXN0IHNvbWV0aW1lcyBiZSBkb25lIHN5bmNocm9ub3VzbHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICogd2hlbiBjYWxsYmFja3MgYXJlIGJhY2tncm91bmRlZCwgc28gd2UgZXhwb3NlIGl0IGFzIGEgc2VwYXJhdGUgbWV0aG9kIGhlcmUuXG4gICAgICovXG4gICAgX2NyZWF0ZVJ1bkZvclRvb2xTdGFydCh0b29sLCBpbnB1dCwgcnVuSWQsIHBhcmVudFJ1bklkLCB0YWdzLCBtZXRhZGF0YSwgbmFtZSkge1xuICAgICAgICBjb25zdCBleGVjdXRpb25fb3JkZXIgPSB0aGlzLl9nZXRFeGVjdXRpb25PcmRlcihwYXJlbnRSdW5JZCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0X3RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBydW4gPSB7XG4gICAgICAgICAgICBpZDogcnVuSWQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lID8/IHRvb2wuaWRbdG9vbC5pZC5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIHBhcmVudF9ydW5faWQ6IHBhcmVudFJ1bklkLFxuICAgICAgICAgICAgc3RhcnRfdGltZSxcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQ6IHRvb2wsXG4gICAgICAgICAgICBldmVudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUoc3RhcnRfdGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlucHV0czogeyBpbnB1dCB9LFxuICAgICAgICAgICAgZXhlY3V0aW9uX29yZGVyLFxuICAgICAgICAgICAgY2hpbGRfZXhlY3V0aW9uX29yZGVyOiBleGVjdXRpb25fb3JkZXIsXG4gICAgICAgICAgICBydW5fdHlwZTogXCJ0b29sXCIsXG4gICAgICAgICAgICBjaGlsZF9ydW5zOiBbXSxcbiAgICAgICAgICAgIGV4dHJhOiBtZXRhZGF0YSA/IHsgbWV0YWRhdGEgfSA6IHt9LFxuICAgICAgICAgICAgdGFnczogdGFncyB8fCBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZFJ1blRvUnVuTWFwKHJ1bik7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVRvb2xTdGFydCh0b29sLCBpbnB1dCwgcnVuSWQsIHBhcmVudFJ1bklkLCB0YWdzLCBtZXRhZGF0YSwgbmFtZSkge1xuICAgICAgICBjb25zdCBydW4gPSB0aGlzLmdldFJ1bkJ5SWQocnVuSWQpID8/XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSdW5Gb3JUb29sU3RhcnQodG9vbCwgaW5wdXQsIHJ1bklkLCBwYXJlbnRSdW5JZCwgdGFncywgbWV0YWRhdGEsIG5hbWUpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uUnVuQ3JlYXRlPy4ocnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblRvb2xTdGFydD8uKHJ1bik7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgYXN5bmMgaGFuZGxlVG9vbEVuZChvdXRwdXQsIHJ1bklkKSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IHRoaXMuZ2V0UnVuQnlJZChydW5JZCk7XG4gICAgICAgIGlmICghcnVuIHx8IHJ1bj8ucnVuX3R5cGUgIT09IFwidG9vbFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b29sIHJ1biB0byBlbmRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcnVuLmVuZF90aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcnVuLm91dHB1dHMgPSB7IG91dHB1dCB9O1xuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJlbmRcIixcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKHJ1bi5lbmRfdGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25Ub29sRW5kPy4ocnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5kVHJhY2UocnVuKTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlVG9vbEVycm9yKGVycm9yLCBydW5JZCkge1xuICAgICAgICBjb25zdCBydW4gPSB0aGlzLmdldFJ1bkJ5SWQocnVuSWQpO1xuICAgICAgICBpZiAoIXJ1biB8fCBydW4/LnJ1bl90eXBlICE9PSBcInRvb2xcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdG9vbCBydW4gdG8gZW5kXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bi5lbmRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHJ1bi5lcnJvciA9IHRoaXMuc3RyaW5naWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUocnVuLmVuZF90aW1lKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblRvb2xFcnJvcj8uKHJ1bik7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZFRyYWNlKHJ1bik7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUFnZW50QWN0aW9uKGFjdGlvbiwgcnVuSWQpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKTtcbiAgICAgICAgaWYgKCFydW4gfHwgcnVuPy5ydW5fdHlwZSAhPT0gXCJjaGFpblwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWdlbnRSdW4gPSBydW47XG4gICAgICAgIGFnZW50UnVuLmFjdGlvbnMgPSBhZ2VudFJ1bi5hY3Rpb25zIHx8IFtdO1xuICAgICAgICBhZ2VudFJ1bi5hY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgYWdlbnRSdW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJhZ2VudF9hY3Rpb25cIixcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGt3YXJnczogeyBhY3Rpb24gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25BZ2VudEFjdGlvbj8uKHJ1bik7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUFnZW50RW5kKGFjdGlvbiwgcnVuSWQpIHtcbiAgICAgICAgY29uc3QgcnVuID0gdGhpcy5nZXRSdW5CeUlkKHJ1bklkKTtcbiAgICAgICAgaWYgKCFydW4gfHwgcnVuPy5ydW5fdHlwZSAhPT0gXCJjaGFpblwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcnVuLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwiYWdlbnRfZW5kXCIsXG4gICAgICAgICAgICB0aW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBrd2FyZ3M6IHsgYWN0aW9uIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLm9uQWdlbnRFbmQ/LihydW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFkZCBhIHJ1biB0byB0aGUgcnVuIG1hcCBmb3IgcmV0cmlldmVyIHN0YXJ0IGV2ZW50cy5cbiAgICAgKiBUaGlzIG11c3Qgc29tZXRpbWVzIGJlIGRvbmUgc3luY2hyb25vdXNseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgKiB3aGVuIGNhbGxiYWNrcyBhcmUgYmFja2dyb3VuZGVkLCBzbyB3ZSBleHBvc2UgaXQgYXMgYSBzZXBhcmF0ZSBtZXRob2QgaGVyZS5cbiAgICAgKi9cbiAgICBfY3JlYXRlUnVuRm9yUmV0cmlldmVyU3RhcnQocmV0cmlldmVyLCBxdWVyeSwgcnVuSWQsIHBhcmVudFJ1bklkLCB0YWdzLCBtZXRhZGF0YSwgbmFtZSkge1xuICAgICAgICBjb25zdCBleGVjdXRpb25fb3JkZXIgPSB0aGlzLl9nZXRFeGVjdXRpb25PcmRlcihwYXJlbnRSdW5JZCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0X3RpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBydW4gPSB7XG4gICAgICAgICAgICBpZDogcnVuSWQsXG4gICAgICAgICAgICBuYW1lOiBuYW1lID8/IHJldHJpZXZlci5pZFtyZXRyaWV2ZXIuaWQubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBwYXJlbnRfcnVuX2lkOiBwYXJlbnRSdW5JZCxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWUsXG4gICAgICAgICAgICBzZXJpYWxpemVkOiByZXRyaWV2ZXIsXG4gICAgICAgICAgICBldmVudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUoc3RhcnRfdGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlucHV0czogeyBxdWVyeSB9LFxuICAgICAgICAgICAgZXhlY3V0aW9uX29yZGVyLFxuICAgICAgICAgICAgY2hpbGRfZXhlY3V0aW9uX29yZGVyOiBleGVjdXRpb25fb3JkZXIsXG4gICAgICAgICAgICBydW5fdHlwZTogXCJyZXRyaWV2ZXJcIixcbiAgICAgICAgICAgIGNoaWxkX3J1bnM6IFtdLFxuICAgICAgICAgICAgZXh0cmE6IG1ldGFkYXRhID8geyBtZXRhZGF0YSB9IDoge30sXG4gICAgICAgICAgICB0YWdzOiB0YWdzIHx8IFtdLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkUnVuVG9SdW5NYXAocnVuKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlUmV0cmlldmVyU3RhcnQocmV0cmlldmVyLCBxdWVyeSwgcnVuSWQsIHBhcmVudFJ1bklkLCB0YWdzLCBtZXRhZGF0YSwgbmFtZSkge1xuICAgICAgICBjb25zdCBydW4gPSB0aGlzLmdldFJ1bkJ5SWQocnVuSWQpID8/XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSdW5Gb3JSZXRyaWV2ZXJTdGFydChyZXRyaWV2ZXIsIHF1ZXJ5LCBydW5JZCwgcGFyZW50UnVuSWQsIHRhZ3MsIG1ldGFkYXRhLCBuYW1lKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJ1bkNyZWF0ZT8uKHJ1bik7XG4gICAgICAgIGF3YWl0IHRoaXMub25SZXRyaWV2ZXJTdGFydD8uKHJ1bik7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVJldHJpZXZlckVuZChkb2N1bWVudHMsIHJ1bklkKSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IHRoaXMuZ2V0UnVuQnlJZChydW5JZCk7XG4gICAgICAgIGlmICghcnVuIHx8IHJ1bj8ucnVuX3R5cGUgIT09IFwicmV0cmlldmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJldHJpZXZlciBydW4gdG8gZW5kXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bi5lbmRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHJ1bi5vdXRwdXRzID0geyBkb2N1bWVudHMgfTtcbiAgICAgICAgcnVuLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwiZW5kXCIsXG4gICAgICAgICAgICB0aW1lOiBuZXcgRGF0ZShydW4uZW5kX3RpbWUpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLm9uUmV0cmlldmVyRW5kPy4ocnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5kVHJhY2UocnVuKTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlUmV0cmlldmVyRXJyb3IoZXJyb3IsIHJ1bklkKSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IHRoaXMuZ2V0UnVuQnlJZChydW5JZCk7XG4gICAgICAgIGlmICghcnVuIHx8IHJ1bj8ucnVuX3R5cGUgIT09IFwicmV0cmlldmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJldHJpZXZlciBydW4gdG8gZW5kXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJ1bi5lbmRfdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHJ1bi5lcnJvciA9IHRoaXMuc3RyaW5naWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUocnVuLmVuZF90aW1lKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJldHJpZXZlckVycm9yPy4ocnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5kVHJhY2UocnVuKTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlVGV4dCh0ZXh0LCBydW5JZCkge1xuICAgICAgICBjb25zdCBydW4gPSB0aGlzLmdldFJ1bkJ5SWQocnVuSWQpO1xuICAgICAgICBpZiAoIXJ1biB8fCBydW4/LnJ1bl90eXBlICE9PSBcImNoYWluXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBydW4uZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0aW1lOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBrd2FyZ3M6IHsgdGV4dCB9LFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblRleHQ/LihydW4pO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVMTE1OZXdUb2tlbih0b2tlbiwgaWR4LCBydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncywgZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IHRoaXMuZ2V0UnVuQnlJZChydW5JZCk7XG4gICAgICAgIGlmICghcnVuIHx8IHJ1bj8ucnVuX3R5cGUgIT09IFwibGxtXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBcInJ1bklkXCIgcHJvdmlkZWQgdG8gXCJoYW5kbGVMTE1OZXdUb2tlblwiIGNhbGxiYWNrLmApO1xuICAgICAgICB9XG4gICAgICAgIHJ1bi5ldmVudHMucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBcIm5ld190b2tlblwiLFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAga3dhcmdzOiB7IHRva2VuLCBpZHgsIGNodW5rOiBmaWVsZHM/LmNodW5rIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLm9uTExNTmV3VG9rZW4/LihydW4sIHRva2VuLCB7IGNodW5rOiBmaWVsZHM/LmNodW5rIH0pO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgIH1cbn1cbmV4cG9ydHMuQmFzZVRyYWNlciA9IEJhc2VUcmFjZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db25zb2xlQ2FsbGJhY2tIYW5kbGVyID0gdm9pZCAwO1xuY29uc3QgYW5zaV9zdHlsZXNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYW5zaS1zdHlsZXNcIikpO1xuY29uc3QgYmFzZV9qc18xID0gcmVxdWlyZShcIi4vYmFzZS5janNcIik7XG5mdW5jdGlvbiB3cmFwKHN0eWxlLCB0ZXh0KSB7XG4gICAgcmV0dXJuIGAke3N0eWxlLm9wZW59JHt0ZXh0fSR7c3R5bGUuY2xvc2V9YDtcbn1cbmZ1bmN0aW9uIHRyeUpzb25TdHJpbmdpZnkob2JqLCBmYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG59XG5mdW5jdGlvbiBmb3JtYXRLVk1hcEl0ZW0odmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRyeUpzb25TdHJpbmdpZnkodmFsdWUsIHZhbHVlLnRvU3RyaW5nKCkpO1xufVxuZnVuY3Rpb24gZWxhcHNlZChydW4pIHtcbiAgICBpZiAoIXJ1bi5lbmRfdGltZSlcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZWxhcHNlZCA9IHJ1bi5lbmRfdGltZSAtIHJ1bi5zdGFydF90aW1lO1xuICAgIGlmIChlbGFwc2VkIDwgMTAwMCkge1xuICAgICAgICByZXR1cm4gYCR7ZWxhcHNlZH1tc2A7XG4gICAgfVxuICAgIHJldHVybiBgJHsoZWxhcHNlZCAvIDEwMDApLnRvRml4ZWQoMil9c2A7XG59XG5jb25zdCB7IGNvbG9yIH0gPSBhbnNpX3N0eWxlc18xLmRlZmF1bHQ7XG4vKipcbiAqIEEgdHJhY2VyIHRoYXQgbG9ncyBhbGwgZXZlbnRzIHRvIHRoZSBjb25zb2xlLiBJdCBleHRlbmRzIGZyb20gdGhlXG4gKiBgQmFzZVRyYWNlcmAgY2xhc3MgYW5kIG92ZXJyaWRlcyBpdHMgbWV0aG9kcyB0byBwcm92aWRlIGN1c3RvbSBsb2dnaW5nXG4gKiBmdW5jdGlvbmFsaXR5LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqXG4gKiBjb25zdCBsbG0gPSBuZXcgQ2hhdEFudGhyb3BpYyh7XG4gKiAgIHRlbXBlcmF0dXJlOiAwLFxuICogICB0YWdzOiBbXCJleGFtcGxlXCIsIFwiY2FsbGJhY2tzXCIsIFwiY29uc3RydWN0b3JcIl0sXG4gKiAgIGNhbGxiYWNrczogW25ldyBDb25zb2xlQ2FsbGJhY2tIYW5kbGVyKCldLFxuICogfSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENvbnNvbGVDYWxsYmFja0hhbmRsZXIgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZVRyYWNlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFwiY29uc29sZV9jYWxsYmFja19oYW5kbGVyXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB1c2VkIHRvIHBlcnNpc3QgdGhlIHJ1bi4gSW4gdGhpcyBjYXNlLCBpdCBzaW1wbHkgcmV0dXJucyBhXG4gICAgICogcmVzb2x2ZWQgcHJvbWlzZSBhcyB0aGVyZSdzIG5vIHBlcnNpc3RlbmNlIGxvZ2ljLlxuICAgICAqIEBwYXJhbSBfcnVuIFRoZSBydW4gdG8gcGVyc2lzdC5cbiAgICAgKiBAcmV0dXJucyBBIHJlc29sdmVkIHByb21pc2UuXG4gICAgICovXG4gICAgcGVyc2lzdFJ1bihfcnVuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgLy8gdXRpbGl0eSBtZXRob2RzXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gZ2V0IGFsbCB0aGUgcGFyZW50IHJ1bnMgb2YgYSBnaXZlbiBydW4uXG4gICAgICogQHBhcmFtIHJ1biBUaGUgcnVuIHdob3NlIHBhcmVudHMgYXJlIHRvIGJlIHJldHJpZXZlZC5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJlbnQgcnVucy5cbiAgICAgKi9cbiAgICBnZXRQYXJlbnRzKHJ1bikge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICAgIGxldCBjdXJyZW50UnVuID0gcnVuO1xuICAgICAgICB3aGlsZSAoY3VycmVudFJ1bi5wYXJlbnRfcnVuX2lkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnJ1bk1hcC5nZXQoY3VycmVudFJ1bi5wYXJlbnRfcnVuX2lkKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UnVuID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB1c2VkIHRvIGdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcnVuJ3MgbGluZWFnZSwgd2hpY2hcbiAgICAgKiBpcyB1c2VkIGluIGxvZ2dpbmcuXG4gICAgICogQHBhcmFtIHJ1biBUaGUgcnVuIHdob3NlIGxpbmVhZ2UgaXMgdG8gYmUgcmV0cmlldmVkLlxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBydW4ncyBsaW5lYWdlLlxuICAgICAqL1xuICAgIGdldEJyZWFkY3J1bWJzKHJ1bikge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gdGhpcy5nZXRQYXJlbnRzKHJ1bikucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCBzdHJpbmcgPSBbLi4ucGFyZW50cywgcnVuXVxuICAgICAgICAgICAgLm1hcCgocGFyZW50LCBpLCBhcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBgJHtwYXJlbnQuZXhlY3V0aW9uX29yZGVyfToke3BhcmVudC5ydW5fdHlwZX06JHtwYXJlbnQubmFtZX1gO1xuICAgICAgICAgICAgcmV0dXJuIGkgPT09IGFyci5sZW5ndGggLSAxID8gd3JhcChhbnNpX3N0eWxlc18xLmRlZmF1bHQuYm9sZCwgbmFtZSkgOiBuYW1lO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgPiBcIik7XG4gICAgICAgIHJldHVybiB3cmFwKGNvbG9yLmdyZXksIHN0cmluZyk7XG4gICAgfVxuICAgIC8vIGxvZ2dpbmcgbWV0aG9kc1xuICAgIC8qKlxuICAgICAqIE1ldGhvZCB1c2VkIHRvIGxvZyB0aGUgc3RhcnQgb2YgYSBjaGFpbiBydW4uXG4gICAgICogQHBhcmFtIHJ1biBUaGUgY2hhaW4gcnVuIHRoYXQgaGFzIHN0YXJ0ZWQuXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIG9uQ2hhaW5TdGFydChydW4pIHtcbiAgICAgICAgY29uc3QgY3J1bWJzID0gdGhpcy5nZXRCcmVhZGNydW1icyhydW4pO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHt3cmFwKGNvbG9yLmdyZWVuLCBcIltjaGFpbi9zdGFydF1cIil9IFske2NydW1ic31dIEVudGVyaW5nIENoYWluIHJ1biB3aXRoIGlucHV0OiAke3RyeUpzb25TdHJpbmdpZnkocnVuLmlucHV0cywgXCJbaW5wdXRzXVwiKX1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gbG9nIHRoZSBlbmQgb2YgYSBjaGFpbiBydW4uXG4gICAgICogQHBhcmFtIHJ1biBUaGUgY2hhaW4gcnVuIHRoYXQgaGFzIGVuZGVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvbkNoYWluRW5kKHJ1bikge1xuICAgICAgICBjb25zdCBjcnVtYnMgPSB0aGlzLmdldEJyZWFkY3J1bWJzKHJ1bik7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3dyYXAoY29sb3IuY3lhbiwgXCJbY2hhaW4vZW5kXVwiKX0gWyR7Y3J1bWJzfV0gWyR7ZWxhcHNlZChydW4pfV0gRXhpdGluZyBDaGFpbiBydW4gd2l0aCBvdXRwdXQ6ICR7dHJ5SnNvblN0cmluZ2lmeShydW4ub3V0cHV0cywgXCJbb3V0cHV0c11cIil9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB1c2VkIHRvIGxvZyBhbnkgZXJyb3JzIG9mIGEgY2hhaW4gcnVuLlxuICAgICAqIEBwYXJhbSBydW4gVGhlIGNoYWluIHJ1biB0aGF0IGhhcyBlcnJvcmVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvbkNoYWluRXJyb3IocnVuKSB7XG4gICAgICAgIGNvbnN0IGNydW1icyA9IHRoaXMuZ2V0QnJlYWRjcnVtYnMocnVuKTtcbiAgICAgICAgY29uc29sZS5sb2coYCR7d3JhcChjb2xvci5yZWQsIFwiW2NoYWluL2Vycm9yXVwiKX0gWyR7Y3J1bWJzfV0gWyR7ZWxhcHNlZChydW4pfV0gQ2hhaW4gcnVuIGVycm9yZWQgd2l0aCBlcnJvcjogJHt0cnlKc29uU3RyaW5naWZ5KHJ1bi5lcnJvciwgXCJbZXJyb3JdXCIpfWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdXNlZCB0byBsb2cgdGhlIHN0YXJ0IG9mIGFuIExMTSBydW4uXG4gICAgICogQHBhcmFtIHJ1biBUaGUgTExNIHJ1biB0aGF0IGhhcyBzdGFydGVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvbkxMTVN0YXJ0KHJ1bikge1xuICAgICAgICBjb25zdCBjcnVtYnMgPSB0aGlzLmdldEJyZWFkY3J1bWJzKHJ1bik7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IFwicHJvbXB0c1wiIGluIHJ1bi5pbnB1dHNcbiAgICAgICAgICAgID8geyBwcm9tcHRzOiBydW4uaW5wdXRzLnByb21wdHMubWFwKChwKSA9PiBwLnRyaW0oKSkgfVxuICAgICAgICAgICAgOiBydW4uaW5wdXRzO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHt3cmFwKGNvbG9yLmdyZWVuLCBcIltsbG0vc3RhcnRdXCIpfSBbJHtjcnVtYnN9XSBFbnRlcmluZyBMTE0gcnVuIHdpdGggaW5wdXQ6ICR7dHJ5SnNvblN0cmluZ2lmeShpbnB1dHMsIFwiW2lucHV0c11cIil9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB1c2VkIHRvIGxvZyB0aGUgZW5kIG9mIGFuIExMTSBydW4uXG4gICAgICogQHBhcmFtIHJ1biBUaGUgTExNIHJ1biB0aGF0IGhhcyBlbmRlZC5cbiAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICovXG4gICAgb25MTE1FbmQocnVuKSB7XG4gICAgICAgIGNvbnN0IGNydW1icyA9IHRoaXMuZ2V0QnJlYWRjcnVtYnMocnVuKTtcbiAgICAgICAgY29uc29sZS5sb2coYCR7d3JhcChjb2xvci5jeWFuLCBcIltsbG0vZW5kXVwiKX0gWyR7Y3J1bWJzfV0gWyR7ZWxhcHNlZChydW4pfV0gRXhpdGluZyBMTE0gcnVuIHdpdGggb3V0cHV0OiAke3RyeUpzb25TdHJpbmdpZnkocnVuLm91dHB1dHMsIFwiW3Jlc3BvbnNlXVwiKX1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gbG9nIGFueSBlcnJvcnMgb2YgYW4gTExNIHJ1bi5cbiAgICAgKiBAcGFyYW0gcnVuIFRoZSBMTE0gcnVuIHRoYXQgaGFzIGVycm9yZWQuXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIG9uTExNRXJyb3IocnVuKSB7XG4gICAgICAgIGNvbnN0IGNydW1icyA9IHRoaXMuZ2V0QnJlYWRjcnVtYnMocnVuKTtcbiAgICAgICAgY29uc29sZS5sb2coYCR7d3JhcChjb2xvci5yZWQsIFwiW2xsbS9lcnJvcl1cIil9IFske2NydW1ic31dIFske2VsYXBzZWQocnVuKX1dIExMTSBydW4gZXJyb3JlZCB3aXRoIGVycm9yOiAke3RyeUpzb25TdHJpbmdpZnkocnVuLmVycm9yLCBcIltlcnJvcl1cIil9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB1c2VkIHRvIGxvZyB0aGUgc3RhcnQgb2YgYSB0b29sIHJ1bi5cbiAgICAgKiBAcGFyYW0gcnVuIFRoZSB0b29sIHJ1biB0aGF0IGhhcyBzdGFydGVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvblRvb2xTdGFydChydW4pIHtcbiAgICAgICAgY29uc3QgY3J1bWJzID0gdGhpcy5nZXRCcmVhZGNydW1icyhydW4pO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHt3cmFwKGNvbG9yLmdyZWVuLCBcIlt0b29sL3N0YXJ0XVwiKX0gWyR7Y3J1bWJzfV0gRW50ZXJpbmcgVG9vbCBydW4gd2l0aCBpbnB1dDogXCIke2Zvcm1hdEtWTWFwSXRlbShydW4uaW5wdXRzLmlucHV0KX1cImApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdXNlZCB0byBsb2cgdGhlIGVuZCBvZiBhIHRvb2wgcnVuLlxuICAgICAqIEBwYXJhbSBydW4gVGhlIHRvb2wgcnVuIHRoYXQgaGFzIGVuZGVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvblRvb2xFbmQocnVuKSB7XG4gICAgICAgIGNvbnN0IGNydW1icyA9IHRoaXMuZ2V0QnJlYWRjcnVtYnMocnVuKTtcbiAgICAgICAgY29uc29sZS5sb2coYCR7d3JhcChjb2xvci5jeWFuLCBcIlt0b29sL2VuZF1cIil9IFske2NydW1ic31dIFske2VsYXBzZWQocnVuKX1dIEV4aXRpbmcgVG9vbCBydW4gd2l0aCBvdXRwdXQ6IFwiJHtmb3JtYXRLVk1hcEl0ZW0ocnVuLm91dHB1dHM/Lm91dHB1dCl9XCJgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gbG9nIGFueSBlcnJvcnMgb2YgYSB0b29sIHJ1bi5cbiAgICAgKiBAcGFyYW0gcnVuIFRoZSB0b29sIHJ1biB0aGF0IGhhcyBlcnJvcmVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvblRvb2xFcnJvcihydW4pIHtcbiAgICAgICAgY29uc3QgY3J1bWJzID0gdGhpcy5nZXRCcmVhZGNydW1icyhydW4pO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHt3cmFwKGNvbG9yLnJlZCwgXCJbdG9vbC9lcnJvcl1cIil9IFske2NydW1ic31dIFske2VsYXBzZWQocnVuKX1dIFRvb2wgcnVuIGVycm9yZWQgd2l0aCBlcnJvcjogJHt0cnlKc29uU3RyaW5naWZ5KHJ1bi5lcnJvciwgXCJbZXJyb3JdXCIpfWApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdXNlZCB0byBsb2cgdGhlIHN0YXJ0IG9mIGEgcmV0cmlldmVyIHJ1bi5cbiAgICAgKiBAcGFyYW0gcnVuIFRoZSByZXRyaWV2ZXIgcnVuIHRoYXQgaGFzIHN0YXJ0ZWQuXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIG9uUmV0cmlldmVyU3RhcnQocnVuKSB7XG4gICAgICAgIGNvbnN0IGNydW1icyA9IHRoaXMuZ2V0QnJlYWRjcnVtYnMocnVuKTtcbiAgICAgICAgY29uc29sZS5sb2coYCR7d3JhcChjb2xvci5ncmVlbiwgXCJbcmV0cmlldmVyL3N0YXJ0XVwiKX0gWyR7Y3J1bWJzfV0gRW50ZXJpbmcgUmV0cmlldmVyIHJ1biB3aXRoIGlucHV0OiAke3RyeUpzb25TdHJpbmdpZnkocnVuLmlucHV0cywgXCJbaW5wdXRzXVwiKX1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gbG9nIHRoZSBlbmQgb2YgYSByZXRyaWV2ZXIgcnVuLlxuICAgICAqIEBwYXJhbSBydW4gVGhlIHJldHJpZXZlciBydW4gdGhhdCBoYXMgZW5kZWQuXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIG9uUmV0cmlldmVyRW5kKHJ1bikge1xuICAgICAgICBjb25zdCBjcnVtYnMgPSB0aGlzLmdldEJyZWFkY3J1bWJzKHJ1bik7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3dyYXAoY29sb3IuY3lhbiwgXCJbcmV0cmlldmVyL2VuZF1cIil9IFske2NydW1ic31dIFske2VsYXBzZWQocnVuKX1dIEV4aXRpbmcgUmV0cmlldmVyIHJ1biB3aXRoIG91dHB1dDogJHt0cnlKc29uU3RyaW5naWZ5KHJ1bi5vdXRwdXRzLCBcIltvdXRwdXRzXVwiKX1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gbG9nIGFueSBlcnJvcnMgb2YgYSByZXRyaWV2ZXIgcnVuLlxuICAgICAqIEBwYXJhbSBydW4gVGhlIHJldHJpZXZlciBydW4gdGhhdCBoYXMgZXJyb3JlZC5cbiAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICovXG4gICAgb25SZXRyaWV2ZXJFcnJvcihydW4pIHtcbiAgICAgICAgY29uc3QgY3J1bWJzID0gdGhpcy5nZXRCcmVhZGNydW1icyhydW4pO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHt3cmFwKGNvbG9yLnJlZCwgXCJbcmV0cmlldmVyL2Vycm9yXVwiKX0gWyR7Y3J1bWJzfV0gWyR7ZWxhcHNlZChydW4pfV0gUmV0cmlldmVyIHJ1biBlcnJvcmVkIHdpdGggZXJyb3I6ICR7dHJ5SnNvblN0cmluZ2lmeShydW4uZXJyb3IsIFwiW2Vycm9yXVwiKX1gKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHVzZWQgdG8gbG9nIHRoZSBhY3Rpb24gc2VsZWN0ZWQgYnkgdGhlIGFnZW50LlxuICAgICAqIEBwYXJhbSBydW4gVGhlIHJ1biBpbiB3aGljaCB0aGUgYWdlbnQgYWN0aW9uIG9jY3VycmVkLlxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBvbkFnZW50QWN0aW9uKHJ1bikge1xuICAgICAgICBjb25zdCBhZ2VudFJ1biA9IHJ1bjtcbiAgICAgICAgY29uc3QgY3J1bWJzID0gdGhpcy5nZXRCcmVhZGNydW1icyhydW4pO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHt3cmFwKGNvbG9yLmJsdWUsIFwiW2FnZW50L2FjdGlvbl1cIil9IFske2NydW1ic31dIEFnZW50IHNlbGVjdGVkIGFjdGlvbjogJHt0cnlKc29uU3RyaW5naWZ5KGFnZW50UnVuLmFjdGlvbnNbYWdlbnRSdW4uYWN0aW9ucy5sZW5ndGggLSAxXSwgXCJbYWN0aW9uXVwiKX1gKTtcbiAgICB9XG59XG5leHBvcnRzLkNvbnNvbGVDYWxsYmFja0hhbmRsZXIgPSBDb25zb2xlQ2FsbGJhY2tIYW5kbGVyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmFkZExhbmdDaGFpbkVycm9yRmllbGRzID0gYWRkTGFuZ0NoYWluRXJyb3JGaWVsZHM7XG5mdW5jdGlvbiBhZGRMYW5nQ2hhaW5FcnJvckZpZWxkcyhlcnJvciwgbGNfZXJyb3JfY29kZSkge1xuICAgIGVycm9yLmxjX2Vycm9yX2NvZGUgPSBsY19lcnJvcl9jb2RlO1xuICAgIGVycm9yLm1lc3NhZ2UgPSBgJHtlcnJvci5tZXNzYWdlfVxcblxcblRyb3VibGVzaG9vdGluZyBVUkw6IGh0dHBzOi8vanMubGFuZ2NoYWluLmNvbS9kb2NzL3Ryb3VibGVzaG9vdGluZy9lcnJvcnMvJHtsY19lcnJvcl9jb2RlfS9cXG5gO1xuICAgIHJldHVybiBlcnJvcjtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRvb2xJbnB1dFBhcnNpbmdFeGNlcHRpb24gPSB2b2lkIDA7XG5leHBvcnRzLl9pc1Rvb2xDYWxsID0gX2lzVG9vbENhbGw7XG5leHBvcnRzLl9jb25maWdIYXNUb29sQ2FsbElkID0gX2NvbmZpZ0hhc1Rvb2xDYWxsSWQ7XG5mdW5jdGlvbiBfaXNUb29sQ2FsbCh0b29sQ2FsbCkge1xuICAgIHJldHVybiAhISh0b29sQ2FsbCAmJlxuICAgICAgICB0eXBlb2YgdG9vbENhbGwgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgXCJ0eXBlXCIgaW4gdG9vbENhbGwgJiZcbiAgICAgICAgdG9vbENhbGwudHlwZSA9PT0gXCJ0b29sX2NhbGxcIik7XG59XG5mdW5jdGlvbiBfY29uZmlnSGFzVG9vbENhbGxJZChjb25maWcpIHtcbiAgICByZXR1cm4gISEoY29uZmlnICYmXG4gICAgICAgIHR5cGVvZiBjb25maWcgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgXCJ0b29sQ2FsbFwiIGluIGNvbmZpZyAmJlxuICAgICAgICBjb25maWcudG9vbENhbGwgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgY29uZmlnLnRvb2xDYWxsID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIFwiaWRcIiBpbiBjb25maWcudG9vbENhbGwgJiZcbiAgICAgICAgdHlwZW9mIGNvbmZpZy50b29sQ2FsbC5pZCA9PT0gXCJzdHJpbmdcIik7XG59XG4vKipcbiAqIEN1c3RvbSBlcnJvciBjbGFzcyB1c2VkIHRvIGhhbmRsZSBleGNlcHRpb25zIHJlbGF0ZWQgdG8gdG9vbCBpbnB1dCBwYXJzaW5nLlxuICogSXQgZXh0ZW5kcyB0aGUgYnVpbHQtaW4gYEVycm9yYCBjbGFzcyBhbmQgYWRkcyBhbiBvcHRpb25hbCBgb3V0cHV0YFxuICogcHJvcGVydHkgdGhhdCBjYW4gaG9sZCB0aGUgb3V0cHV0IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24uXG4gKi9cbmNsYXNzIFRvb2xJbnB1dFBhcnNpbmdFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgb3V0cHV0KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvdXRwdXRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdXRwdXQgPSBvdXRwdXQ7XG4gICAgfVxufVxuZXhwb3J0cy5Ub29sSW5wdXRQYXJzaW5nRXhjZXB0aW9uID0gVG9vbElucHV0UGFyc2luZ0V4Y2VwdGlvbjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlSnNvbk1hcmtkb3duID0gcGFyc2VKc29uTWFya2Rvd247XG5leHBvcnRzLnBhcnNlUGFydGlhbEpzb24gPSBwYXJzZVBhcnRpYWxKc29uO1xuZnVuY3Rpb24gcGFyc2VKc29uTWFya2Rvd24ocywgcGFyc2VyID0gcGFyc2VQYXJ0aWFsSnNvbikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHMgPSBzLnRyaW0oKTtcbiAgICBjb25zdCBmaXJzdEZlbmNlSW5kZXggPSBzLmluZGV4T2YoXCJgYGBcIik7XG4gICAgaWYgKGZpcnN0RmVuY2VJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlcihzKTtcbiAgICB9XG4gICAgbGV0IGNvbnRlbnRBZnRlckZlbmNlID0gcy5zdWJzdHJpbmcoZmlyc3RGZW5jZUluZGV4ICsgMyk7XG4gICAgaWYgKGNvbnRlbnRBZnRlckZlbmNlLnN0YXJ0c1dpdGgoXCJqc29uXFxuXCIpKSB7XG4gICAgICAgIGNvbnRlbnRBZnRlckZlbmNlID0gY29udGVudEFmdGVyRmVuY2Uuc3Vic3RyaW5nKDUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250ZW50QWZ0ZXJGZW5jZS5zdGFydHNXaXRoKFwianNvblwiKSkge1xuICAgICAgICBjb250ZW50QWZ0ZXJGZW5jZSA9IGNvbnRlbnRBZnRlckZlbmNlLnN1YnN0cmluZyg0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udGVudEFmdGVyRmVuY2Uuc3RhcnRzV2l0aChcIlxcblwiKSkge1xuICAgICAgICBjb250ZW50QWZ0ZXJGZW5jZSA9IGNvbnRlbnRBZnRlckZlbmNlLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgY29uc3QgY2xvc2luZ0ZlbmNlSW5kZXggPSBjb250ZW50QWZ0ZXJGZW5jZS5pbmRleE9mKFwiYGBgXCIpO1xuICAgIGxldCBmaW5hbENvbnRlbnQgPSBjb250ZW50QWZ0ZXJGZW5jZTtcbiAgICBpZiAoY2xvc2luZ0ZlbmNlSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGZpbmFsQ29udGVudCA9IGNvbnRlbnRBZnRlckZlbmNlLnN1YnN0cmluZygwLCBjbG9zaW5nRmVuY2VJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZXIoZmluYWxDb250ZW50LnRyaW0oKSk7XG59XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL0tpbGxpYW5MdWNhcy9vcGVuLWludGVycHJldGVyL2Jsb2IvbWFpbi9pbnRlcnByZXRlci9jb3JlL2xsbS91dGlscy9wYXJzZV9wYXJ0aWFsX2pzb24ucHlcbi8vIE1JVCBMaWNlbnNlXG5mdW5jdGlvbiBwYXJzZVBhcnRpYWxKc29uKHMpIHtcbiAgICAvLyBJZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkLCByZXR1cm4gbnVsbCB0byBpbmRpY2F0ZSBmYWlsdXJlLlxuICAgIGlmICh0eXBlb2YgcyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gQXR0ZW1wdCB0byBwYXJzZSB0aGUgc3RyaW5nIGFzLWlzLlxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gUGFzc1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcy5cbiAgICBsZXQgbmV3X3MgPSBcIlwiO1xuICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgbGV0IGlzSW5zaWRlU3RyaW5nID0gZmFsc2U7XG4gICAgbGV0IGVzY2FwZWQgPSBmYWxzZTtcbiAgICAvLyBQcm9jZXNzIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgb25lIGF0IGEgdGltZS5cbiAgICBmb3IgKGxldCBjaGFyIG9mIHMpIHtcbiAgICAgICAgaWYgKGlzSW5zaWRlU3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gJ1wiJyAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGlzSW5zaWRlU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGFyID09PSBcIlxcblwiICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgY2hhciA9IFwiXFxcXG5cIjsgLy8gUmVwbGFjZSB0aGUgbmV3bGluZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgIGlzSW5zaWRlU3RyaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGFyID09PSBcIntcIikge1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goXCJ9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKFwiXVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09IFwifVwiIHx8IGNoYXIgPT09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrICYmIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdID09PSBjaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTWlzbWF0Y2hlZCBjbG9zaW5nIGNoYXJhY3RlcjsgdGhlIGlucHV0IGlzIG1hbGZvcm1lZC5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEFwcGVuZCB0aGUgcHJvY2Vzc2VkIGNoYXJhY3RlciB0byB0aGUgbmV3IHN0cmluZy5cbiAgICAgICAgbmV3X3MgKz0gY2hhcjtcbiAgICB9XG4gICAgLy8gSWYgd2UncmUgc3RpbGwgaW5zaWRlIGEgc3RyaW5nIGF0IHRoZSBlbmQgb2YgcHJvY2Vzc2luZyxcbiAgICAvLyB3ZSBuZWVkIHRvIGNsb3NlIHRoZSBzdHJpbmcuXG4gICAgaWYgKGlzSW5zaWRlU3RyaW5nKSB7XG4gICAgICAgIG5ld19zICs9ICdcIic7XG4gICAgfVxuICAgIC8vIENsb3NlIGFueSByZW1haW5pbmcgb3BlbiBzdHJ1Y3R1cmVzIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIG9wZW5lZC5cbiAgICBmb3IgKGxldCBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgbmV3X3MgKz0gc3RhY2tbaV07XG4gICAgfVxuICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIG1vZGlmaWVkIHN0cmluZyBhcyBKU09OLlxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKG5ld19zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHdlIHN0aWxsIGNhbid0IHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTiwgcmV0dXJuIG51bGwgdG8gaW5kaWNhdGUgZmFpbHVyZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNEYXRhQ29udGVudEJsb2NrID0gaXNEYXRhQ29udGVudEJsb2NrO1xuZXhwb3J0cy5pc1VSTENvbnRlbnRCbG9jayA9IGlzVVJMQ29udGVudEJsb2NrO1xuZXhwb3J0cy5pc0Jhc2U2NENvbnRlbnRCbG9jayA9IGlzQmFzZTY0Q29udGVudEJsb2NrO1xuZXhwb3J0cy5pc1BsYWluVGV4dENvbnRlbnRCbG9jayA9IGlzUGxhaW5UZXh0Q29udGVudEJsb2NrO1xuZXhwb3J0cy5pc0lEQ29udGVudEJsb2NrID0gaXNJRENvbnRlbnRCbG9jaztcbmV4cG9ydHMuY29udmVydFRvT3BlbkFJSW1hZ2VCbG9jayA9IGNvbnZlcnRUb09wZW5BSUltYWdlQmxvY2s7XG5leHBvcnRzLnBhcnNlTWltZVR5cGUgPSBwYXJzZU1pbWVUeXBlO1xuZXhwb3J0cy5wYXJzZUJhc2U2NERhdGFVcmwgPSBwYXJzZUJhc2U2NERhdGFVcmw7XG5leHBvcnRzLmNvbnZlcnRUb1Byb3ZpZGVyQ29udGVudEJsb2NrID0gY29udmVydFRvUHJvdmlkZXJDb250ZW50QmxvY2s7XG5mdW5jdGlvbiBpc0RhdGFDb250ZW50QmxvY2soY29udGVudF9ibG9jaykge1xuICAgIHJldHVybiAodHlwZW9mIGNvbnRlbnRfYmxvY2sgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgY29udGVudF9ibG9jayAhPT0gbnVsbCAmJlxuICAgICAgICBcInR5cGVcIiBpbiBjb250ZW50X2Jsb2NrICYmXG4gICAgICAgIHR5cGVvZiBjb250ZW50X2Jsb2NrLnR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgXCJzb3VyY2VfdHlwZVwiIGluIGNvbnRlbnRfYmxvY2sgJiZcbiAgICAgICAgKGNvbnRlbnRfYmxvY2suc291cmNlX3R5cGUgPT09IFwidXJsXCIgfHxcbiAgICAgICAgICAgIGNvbnRlbnRfYmxvY2suc291cmNlX3R5cGUgPT09IFwiYmFzZTY0XCIgfHxcbiAgICAgICAgICAgIGNvbnRlbnRfYmxvY2suc291cmNlX3R5cGUgPT09IFwidGV4dFwiIHx8XG4gICAgICAgICAgICBjb250ZW50X2Jsb2NrLnNvdXJjZV90eXBlID09PSBcImlkXCIpKTtcbn1cbmZ1bmN0aW9uIGlzVVJMQ29udGVudEJsb2NrKGNvbnRlbnRfYmxvY2spIHtcbiAgICByZXR1cm4gKGlzRGF0YUNvbnRlbnRCbG9jayhjb250ZW50X2Jsb2NrKSAmJlxuICAgICAgICBjb250ZW50X2Jsb2NrLnNvdXJjZV90eXBlID09PSBcInVybFwiICYmXG4gICAgICAgIFwidXJsXCIgaW4gY29udGVudF9ibG9jayAmJlxuICAgICAgICB0eXBlb2YgY29udGVudF9ibG9jay51cmwgPT09IFwic3RyaW5nXCIpO1xufVxuZnVuY3Rpb24gaXNCYXNlNjRDb250ZW50QmxvY2soY29udGVudF9ibG9jaykge1xuICAgIHJldHVybiAoaXNEYXRhQ29udGVudEJsb2NrKGNvbnRlbnRfYmxvY2spICYmXG4gICAgICAgIGNvbnRlbnRfYmxvY2suc291cmNlX3R5cGUgPT09IFwiYmFzZTY0XCIgJiZcbiAgICAgICAgXCJkYXRhXCIgaW4gY29udGVudF9ibG9jayAmJlxuICAgICAgICB0eXBlb2YgY29udGVudF9ibG9jay5kYXRhID09PSBcInN0cmluZ1wiKTtcbn1cbmZ1bmN0aW9uIGlzUGxhaW5UZXh0Q29udGVudEJsb2NrKGNvbnRlbnRfYmxvY2spIHtcbiAgICByZXR1cm4gKGlzRGF0YUNvbnRlbnRCbG9jayhjb250ZW50X2Jsb2NrKSAmJlxuICAgICAgICBjb250ZW50X2Jsb2NrLnNvdXJjZV90eXBlID09PSBcInRleHRcIiAmJlxuICAgICAgICBcInRleHRcIiBpbiBjb250ZW50X2Jsb2NrICYmXG4gICAgICAgIHR5cGVvZiBjb250ZW50X2Jsb2NrLnRleHQgPT09IFwic3RyaW5nXCIpO1xufVxuZnVuY3Rpb24gaXNJRENvbnRlbnRCbG9jayhjb250ZW50X2Jsb2NrKSB7XG4gICAgcmV0dXJuIChpc0RhdGFDb250ZW50QmxvY2soY29udGVudF9ibG9jaykgJiZcbiAgICAgICAgY29udGVudF9ibG9jay5zb3VyY2VfdHlwZSA9PT0gXCJpZFwiICYmXG4gICAgICAgIFwiaWRcIiBpbiBjb250ZW50X2Jsb2NrICYmXG4gICAgICAgIHR5cGVvZiBjb250ZW50X2Jsb2NrLmlkID09PSBcInN0cmluZ1wiKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb09wZW5BSUltYWdlQmxvY2soY29udGVudF9ibG9jaykge1xuICAgIGlmIChpc0RhdGFDb250ZW50QmxvY2soY29udGVudF9ibG9jaykpIHtcbiAgICAgICAgaWYgKGNvbnRlbnRfYmxvY2suc291cmNlX3R5cGUgPT09IFwidXJsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZV91cmxcIixcbiAgICAgICAgICAgICAgICBpbWFnZV91cmw6IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBjb250ZW50X2Jsb2NrLnVybCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudF9ibG9jay5zb3VyY2VfdHlwZSA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgaWYgKCFjb250ZW50X2Jsb2NrLm1pbWVfdHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1pbWVfdHlwZSBrZXkgaXMgcmVxdWlyZWQgZm9yIGJhc2U2NCBkYXRhLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1pbWVfdHlwZSA9IGNvbnRlbnRfYmxvY2subWltZV90eXBlO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlX3VybFwiLFxuICAgICAgICAgICAgICAgIGltYWdlX3VybDoge1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGBkYXRhOiR7bWltZV90eXBlfTtiYXNlNjQsJHtjb250ZW50X2Jsb2NrLmRhdGF9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzb3VyY2UgdHlwZS4gT25seSAndXJsJyBhbmQgJ2Jhc2U2NCcgYXJlIHN1cHBvcnRlZC5cIik7XG59XG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIENoYXRNb2RlbFByb3ZpZGVycy4gUGFyc2VzIGEgbWltZSB0eXBlIGludG8gYSB0eXBlLCBzdWJ0eXBlLCBhbmQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0gbWltZV90eXBlIC0gVGhlIG1pbWUgdHlwZSB0byBwYXJzZS5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB0eXBlLCBzdWJ0eXBlLCBhbmQgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VNaW1lVHlwZShtaW1lX3R5cGUpIHtcbiAgICBjb25zdCBwYXJ0cyA9IG1pbWVfdHlwZS5zcGxpdChcIjtcIilbMF0uc3BsaXQoXCIvXCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1pbWUgdHlwZTogXCIke21pbWVfdHlwZX1cIiAtIGRvZXMgbm90IG1hdGNoIHR5cGUvc3VidHlwZSBmb3JtYXQuYCk7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBwYXJ0c1swXS50cmltKCk7XG4gICAgY29uc3Qgc3VidHlwZSA9IHBhcnRzWzFdLnRyaW0oKTtcbiAgICBpZiAodHlwZSA9PT0gXCJcIiB8fCBzdWJ0eXBlID09PSBcIlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtaW1lIHR5cGU6IFwiJHttaW1lX3R5cGV9XCIgLSB0eXBlIG9yIHN1YnR5cGUgaXMgZW1wdHkuYCk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlckt2cCBvZiBtaW1lX3R5cGUuc3BsaXQoXCI7XCIpLnNsaWNlKDEpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlclBhcnRzID0gcGFyYW1ldGVyS3ZwLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYgKHBhcmFtZXRlclBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlciBzeW50YXggaW4gbWltZSB0eXBlOiBcIiR7bWltZV90eXBlfVwiLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IHBhcmFtZXRlclBhcnRzWzBdLnRyaW0oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJQYXJ0c1sxXS50cmltKCk7XG4gICAgICAgIGlmIChrZXkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXIgc3ludGF4IGluIG1pbWUgdHlwZTogXCIke21pbWVfdHlwZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc3VidHlwZSxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICB9O1xufVxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciBDaGF0TW9kZWxQcm92aWRlcnMuIFBhcnNlcyBhIGJhc2U2NCBkYXRhIFVSTCBpbnRvIGEgdHlwZWQgYXJyYXkgb3Igc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBkYXRhVXJsIC0gVGhlIGJhc2U2NCBkYXRhIFVSTCB0byBwYXJzZS5cbiAqIEBwYXJhbSBhc1R5cGVkQXJyYXkgLSBXaGV0aGVyIHRvIHJldHVybiB0aGUgZGF0YSBhcyBhIHR5cGVkIGFycmF5LlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRhIGFuZCBtaW1lIHR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGF0YSBVUkwgaXMgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VCYXNlNjREYXRhVXJsKHsgZGF0YVVybDogZGF0YV91cmwsIGFzVHlwZWRBcnJheSA9IGZhbHNlLCB9KSB7XG4gICAgY29uc3QgZm9ybWF0TWF0Y2ggPSBkYXRhX3VybC5tYXRjaCgvXmRhdGE6KFxcdytcXC9cXHcrKTtiYXNlNjQsKFtBLVphLXowLTkrL10rPSopJC8pO1xuICAgIGxldCBtaW1lX3R5cGU7XG4gICAgaWYgKGZvcm1hdE1hdGNoKSB7XG4gICAgICAgIG1pbWVfdHlwZSA9IGZvcm1hdE1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhc1R5cGVkQXJyYXlcbiAgICAgICAgICAgID8gVWludDhBcnJheS5mcm9tKGF0b2IoZm9ybWF0TWF0Y2hbMl0pLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKVxuICAgICAgICAgICAgOiBmb3JtYXRNYXRjaFsyXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbWVfdHlwZSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENvbnZlcnQgZnJvbSBhIHN0YW5kYXJkIGRhdGEgY29udGVudCBibG9jayB0byBhIHByb3ZpZGVyJ3MgcHJvcHJpZXRhcnkgZGF0YSBjb250ZW50IGJsb2NrIGZvcm1hdC5cbiAqXG4gKiBEb24ndCBvdmVycmlkZSB0aGlzIG1ldGhvZC4gSW5zdGVhZCwgb3ZlcnJpZGUgdGhlIG1vcmUgc3BlY2lmaWMgY29udmVyc2lvbiBtZXRob2RzIGFuZCB1c2UgdGhpc1xuICogbWV0aG9kIHVubW9kaWZpZWQuXG4gKlxuICogQHBhcmFtIGJsb2NrIC0gVGhlIHN0YW5kYXJkIGRhdGEgY29udGVudCBibG9jayB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHByb3ZpZGVyIGRhdGEgY29udGVudCBibG9jay5cbiAqIEB0aHJvd3MgQW4gZXJyb3IgaWYgdGhlIHN0YW5kYXJkIGRhdGEgY29udGVudCBibG9jayB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1Byb3ZpZGVyQ29udGVudEJsb2NrKGJsb2NrLCBjb252ZXJ0ZXIpIHtcbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgaWYgKCFjb252ZXJ0ZXIuZnJvbVN0YW5kYXJkVGV4dEJsb2NrKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnZlcnRlciBmb3IgJHtjb252ZXJ0ZXIucHJvdmlkZXJOYW1lfSBkb2VzIG5vdCBpbXBsZW1lbnQgXFxgZnJvbVN0YW5kYXJkVGV4dEJsb2NrXFxgIG1ldGhvZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udmVydGVyLmZyb21TdGFuZGFyZFRleHRCbG9jayhibG9jayk7XG4gICAgfVxuICAgIGlmIChibG9jay50eXBlID09PSBcImltYWdlXCIpIHtcbiAgICAgICAgaWYgKCFjb252ZXJ0ZXIuZnJvbVN0YW5kYXJkSW1hZ2VCbG9jaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb252ZXJ0ZXIgZm9yICR7Y29udmVydGVyLnByb3ZpZGVyTmFtZX0gZG9lcyBub3QgaW1wbGVtZW50IFxcYGZyb21TdGFuZGFyZEltYWdlQmxvY2tcXGAgbWV0aG9kLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZnJvbVN0YW5kYXJkSW1hZ2VCbG9jayhibG9jayk7XG4gICAgfVxuICAgIGlmIChibG9jay50eXBlID09PSBcImF1ZGlvXCIpIHtcbiAgICAgICAgaWYgKCFjb252ZXJ0ZXIuZnJvbVN0YW5kYXJkQXVkaW9CbG9jaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb252ZXJ0ZXIgZm9yICR7Y29udmVydGVyLnByb3ZpZGVyTmFtZX0gZG9lcyBub3QgaW1wbGVtZW50IFxcYGZyb21TdGFuZGFyZEF1ZGlvQmxvY2tcXGAgbWV0aG9kLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZnJvbVN0YW5kYXJkQXVkaW9CbG9jayhibG9jayk7XG4gICAgfVxuICAgIGlmIChibG9jay50eXBlID09PSBcImZpbGVcIikge1xuICAgICAgICBpZiAoIWNvbnZlcnRlci5mcm9tU3RhbmRhcmRGaWxlQmxvY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udmVydGVyIGZvciAke2NvbnZlcnRlci5wcm92aWRlck5hbWV9IGRvZXMgbm90IGltcGxlbWVudCBcXGBmcm9tU3RhbmRhcmRGaWxlQmxvY2tcXGAgbWV0aG9kLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZnJvbVN0YW5kYXJkRmlsZUJsb2NrKGJsb2NrKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29udmVydCBjb250ZW50IGJsb2NrIHR5cGUgJyR7YmxvY2sudHlwZX0nIHRvIHByb3ZpZGVyLXNwZWNpZmljIGZvcm1hdDogbm90IHJlY29nbml6ZWQuYCk7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CYXNlTWVzc2FnZUNodW5rID0gZXhwb3J0cy5CYXNlTWVzc2FnZSA9IHZvaWQgMDtcbmV4cG9ydHMubWVyZ2VDb250ZW50ID0gbWVyZ2VDb250ZW50O1xuZXhwb3J0cy5fbWVyZ2VTdGF0dXMgPSBfbWVyZ2VTdGF0dXM7XG5leHBvcnRzLmlzT3BlbkFJVG9vbENhbGxBcnJheSA9IGlzT3BlbkFJVG9vbENhbGxBcnJheTtcbmV4cG9ydHMuX21lcmdlRGljdHMgPSBfbWVyZ2VEaWN0cztcbmV4cG9ydHMuX21lcmdlTGlzdHMgPSBfbWVyZ2VMaXN0cztcbmV4cG9ydHMuX21lcmdlT2JqID0gX21lcmdlT2JqO1xuZXhwb3J0cy5faXNNZXNzYWdlRmllbGRXaXRoUm9sZSA9IF9pc01lc3NhZ2VGaWVsZFdpdGhSb2xlO1xuZXhwb3J0cy5pc0Jhc2VNZXNzYWdlID0gaXNCYXNlTWVzc2FnZTtcbmV4cG9ydHMuaXNCYXNlTWVzc2FnZUNodW5rID0gaXNCYXNlTWVzc2FnZUNodW5rO1xuY29uc3Qgc2VyaWFsaXphYmxlX2pzXzEgPSByZXF1aXJlKFwiLi4vbG9hZC9zZXJpYWxpemFibGUuY2pzXCIpO1xuY29uc3QgY29udGVudF9ibG9ja3NfanNfMSA9IHJlcXVpcmUoXCIuL2NvbnRlbnRfYmxvY2tzLmNqc1wiKTtcbmZ1bmN0aW9uIG1lcmdlQ29udGVudChmaXJzdENvbnRlbnQsIHNlY29uZENvbnRlbnQpIHtcbiAgICAvLyBJZiBmaXJzdCBjb250ZW50IGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBmaXJzdENvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGZpcnN0Q29udGVudCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHNlY29uZENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzZWNvbmRDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3RDb250ZW50ICsgc2Vjb25kQ29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNlY29uZENvbnRlbnQpICYmXG4gICAgICAgICAgICBzZWNvbmRDb250ZW50LnNvbWUoKGMpID0+ICgwLCBjb250ZW50X2Jsb2Nrc19qc18xLmlzRGF0YUNvbnRlbnRCbG9jaykoYykpKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZV90eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZmlyc3RDb250ZW50LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uc2Vjb25kQ29udGVudCxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGZpcnN0Q29udGVudCB9LCAuLi5zZWNvbmRDb250ZW50XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBib3RoIGFyZSBhcnJheXNcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWNvbmRDb250ZW50KSkge1xuICAgICAgICByZXR1cm4gKF9tZXJnZUxpc3RzKGZpcnN0Q29udGVudCwgc2Vjb25kQ29udGVudCkgPz8gW1xuICAgICAgICAgICAgLi4uZmlyc3RDb250ZW50LFxuICAgICAgICAgICAgLi4uc2Vjb25kQ29udGVudCxcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoc2Vjb25kQ29udGVudCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpcnN0Q29udGVudCkgJiZcbiAgICAgICAgICAgIGZpcnN0Q29udGVudC5zb21lKChjKSA9PiAoMCwgY29udGVudF9ibG9ja3NfanNfMS5pc0RhdGFDb250ZW50QmxvY2spKGMpKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAuLi5maXJzdENvbnRlbnQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgc291cmNlX3R5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzZWNvbmRDb250ZW50LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5maXJzdENvbnRlbnQsIHsgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IHNlY29uZENvbnRlbnQgfV07XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqICdNZXJnZScgdHdvIHN0YXR1c2VzLiBJZiBlaXRoZXIgdmFsdWUgcGFzc2VkIGlzICdlcnJvcicsIGl0IHdpbGwgcmV0dXJuICdlcnJvcicuIEVsc2VcbiAqIGl0IHdpbGwgcmV0dXJuICdzdWNjZXNzJy5cbiAqXG4gKiBAcGFyYW0ge1wic3VjY2Vzc1wiIHwgXCJlcnJvclwiIHwgdW5kZWZpbmVkfSBsZWZ0IFRoZSBleGlzdGluZyB2YWx1ZSB0byAnbWVyZ2UnIHdpdGggdGhlIG5ldyB2YWx1ZS5cbiAqIEBwYXJhbSB7XCJzdWNjZXNzXCIgfCBcImVycm9yXCIgfCB1bmRlZmluZWR9IHJpZ2h0IFRoZSBuZXcgdmFsdWUgdG8gJ21lcmdlJyB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZVxuICogQHJldHVybnMge1wic3VjY2Vzc1wiIHwgXCJlcnJvclwifSBUaGUgJ21lcmdlZCcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIF9tZXJnZVN0YXR1cyhsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0ID09PSBcImVycm9yXCIgfHwgcmlnaHQgPT09IFwiZXJyb3JcIikge1xuICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJzdWNjZXNzXCI7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gc3RyaW5naWZ5V2l0aERlcHRoTGltaXQob2JqLCBkZXB0aExpbWl0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBmdW5jdGlvbiBoZWxwZXIob2JqLCBjdXJyZW50RGVwdGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgb2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RGVwdGggPj0gZGVwdGhMaW1pdCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIltBcnJheV1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIltPYmplY3RdXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IGhlbHBlcihpdGVtLCBjdXJyZW50RGVwdGggKyAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gaGVscGVyKG9ialtrZXldLCBjdXJyZW50RGVwdGggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaGVscGVyKG9iaiwgMCksIG51bGwsIDIpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgdHlwZXMgb2YgbWVzc2FnZXMgaW4gYSBjb252ZXJzYXRpb24uIEl0IGluY2x1ZGVzXG4gKiBwcm9wZXJ0aWVzIGxpa2UgYGNvbnRlbnRgLCBgbmFtZWAsIGFuZCBgYWRkaXRpb25hbF9rd2FyZ3NgLiBJdCBhbHNvXG4gKiBpbmNsdWRlcyBtZXRob2RzIGxpa2UgYHRvRGljdCgpYCBhbmQgYF9nZXRUeXBlKClgLlxuICovXG5jbGFzcyBCYXNlTWVzc2FnZSBleHRlbmRzIHNlcmlhbGl6YWJsZV9qc18xLlNlcmlhbGl6YWJsZSB7XG4gICAgZ2V0IGxjX2FsaWFzZXMoKSB7XG4gICAgICAgIC8vIGV4Y2x1ZGUgc25ha2UgY2FzZSBjb252ZXJzaW9uIHRvIHBhc2NhbCBjYXNlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsX2t3YXJnczogXCJhZGRpdGlvbmFsX2t3YXJnc1wiLFxuICAgICAgICAgICAgcmVzcG9uc2VfbWV0YWRhdGE6IFwicmVzcG9uc2VfbWV0YWRhdGFcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRleHQgY29udGVudCBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29udGVudCkpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFxuICAgICAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgaWYgKGMudHlwZSA9PT0gXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGMudGV4dDtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgbWVzc2FnZS4gKi9cbiAgICBnZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHlwZSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIFxuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIGt3YXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGZpZWxkcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBmaWVsZHMgPSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogZmllbGRzLFxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfa3dhcmdzOiBrd2FyZ3MsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfbWV0YWRhdGE6IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGFkZGl0aW9uYWxfa3dhcmdzIGlzIHBhc3NlZCBpbnRvIHN1cGVyKCkgZm9yIHNlcmlhbGl6YXRpb25cbiAgICAgICAgaWYgKCFmaWVsZHMuYWRkaXRpb25hbF9rd2FyZ3MpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgZmllbGRzLmFkZGl0aW9uYWxfa3dhcmdzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaWVsZHMucmVzcG9uc2VfbWV0YWRhdGEpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgZmllbGRzLnJlc3BvbnNlX21ldGFkYXRhID0ge307XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoZmllbGRzKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibGNfbmFtZXNwYWNlXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbXCJsYW5nY2hhaW5fY29yZVwiLCBcIm1lc3NhZ2VzXCJdXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJsY19zZXJpYWxpemFibGVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKiBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZS4gKi9cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY29udGVudFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICAvKiogVGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2Ugc2VuZGVyIGluIGEgbXVsdGktdXNlciBjaGF0LiAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKiBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzICovXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImFkZGl0aW9uYWxfa3dhcmdzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKiBSZXNwb25zZSBtZXRhZGF0YS4gRm9yIGV4YW1wbGU6IHJlc3BvbnNlIGhlYWRlcnMsIGxvZ3Byb2JzLCB0b2tlbiBjb3VudHMsIG1vZGVsIG5hbWUuICovXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlc3BvbnNlX21ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBvcHRpb25hbCB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG1lc3NhZ2UuIFRoaXMgc2hvdWxkIGlkZWFsbHkgYmVcbiAgICAgICAgICogcHJvdmlkZWQgYnkgdGhlIHByb3ZpZGVyL21vZGVsIHdoaWNoIGNyZWF0ZWQgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpZFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSBmaWVsZHMubmFtZTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gZmllbGRzLmNvbnRlbnQ7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbF9rd2FyZ3MgPSBmaWVsZHMuYWRkaXRpb25hbF9rd2FyZ3M7XG4gICAgICAgIHRoaXMucmVzcG9uc2VfbWV0YWRhdGEgPSBmaWVsZHMucmVzcG9uc2VfbWV0YWRhdGE7XG4gICAgICAgIHRoaXMuaWQgPSBmaWVsZHMuaWQ7XG4gICAgfVxuICAgIHRvRGljdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuX2dldFR5cGUoKSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMudG9KU09OKClcbiAgICAgICAgICAgICAgICAua3dhcmdzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgbGNfbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQmFzZU1lc3NhZ2VcIjtcbiAgICB9XG4gICAgLy8gQ2FuJ3QgYmUgcHJvdGVjdGVkIGZvciBzaWxseSByZWFzb25zXG4gICAgZ2V0IF9wcmludGFibGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxfa3dhcmdzOiB0aGlzLmFkZGl0aW9uYWxfa3dhcmdzLFxuICAgICAgICAgICAgcmVzcG9uc2VfbWV0YWRhdGE6IHRoaXMucmVzcG9uc2VfbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIHRoaXMgcHJpdmF0ZSBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIElEIGZvciB0aGUgcnVudGltZVxuICAgIC8vIHZhbHVlIGFzIHdlbGwgYXMgaW4gbGNfa3dhcmdzIGZvciBzZXJpYWxpc2F0aW9uXG4gICAgX3VwZGF0ZUlkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaWQgPSB2YWx1ZTtcbiAgICAgICAgLy8gbGNfYXR0cmlidXRlcyB3b3VsZG4ndCB3b3JrIGhlcmUsIGJlY2F1c2UgamVzdCBjb21wYXJlcyB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0XG4gICAgICAgIHRoaXMubGNfa3dhcmdzLmlkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubGNfbmFtZSgpO1xuICAgIH1cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBjb25zb2xlLmxvZ1xuICAgIFtTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIildKGRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbnRhYmxlID0gc3RyaW5naWZ5V2l0aERlcHRoTGltaXQodGhpcy5fcHJpbnRhYmxlRmllbGRzLCBNYXRoLm1heCg0LCBkZXB0aCkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5sY19uYW1lKCl9ICR7cHJpbnRhYmxlfWA7XG4gICAgfVxufVxuZXhwb3J0cy5CYXNlTWVzc2FnZSA9IEJhc2VNZXNzYWdlO1xuZnVuY3Rpb24gaXNPcGVuQUlUb29sQ2FsbEFycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICB2YWx1ZS5ldmVyeSgodikgPT4gdHlwZW9mIHYuaW5kZXggPT09IFwibnVtYmVyXCIpKTtcbn1cbmZ1bmN0aW9uIF9tZXJnZURpY3RzKFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmxlZnQsIFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbnJpZ2h0XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKSB7XG4gICAgY29uc3QgbWVyZ2VkID0geyAuLi5sZWZ0IH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmlnaHQpKSB7XG4gICAgICAgIGlmIChtZXJnZWRba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtZXJnZWRba2V5XSAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KG1lcmdlZFtrZXldKSAhPT0gQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmllbGRbJHtrZXl9XSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgbWVzc2FnZSBjaHVuaywgYnV0IHdpdGggYSBkaWZmZXJlbnQgdHlwZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWVyZ2VkW2tleV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IFwidHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IG1lcmdlICd0eXBlJyBmaWVsZHNcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFtcImlkXCIsIFwibmFtZVwiLCBcIm91dHB1dF92ZXJzaW9uXCIsIFwibW9kZWxfcHJvdmlkZXJcIl0uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGluY29taW5nIHZhbHVlIGZvciB0aGVzZSBmaWVsZHNcbiAgICAgICAgICAgICAgICBtZXJnZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkW2tleV0gKz0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1lcmdlZFtrZXldID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG1lcmdlZFtrZXldKSkge1xuICAgICAgICAgICAgbWVyZ2VkW2tleV0gPSBfbWVyZ2VEaWN0cyhtZXJnZWRba2V5XSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWVyZ2VkW2tleV0pKSB7XG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IF9tZXJnZUxpc3RzKG1lcmdlZFtrZXldLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWVyZ2VkW2tleV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgZmllbGRbJHtrZXl9XSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIG1lc3NhZ2UgY2h1bmsgYW5kIHZhbHVlIGhhcyB1bnN1cHBvcnRlZCB0eXBlLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWQ7XG59XG5mdW5jdGlvbiBfbWVyZ2VMaXN0cyhsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0ID09PSB1bmRlZmluZWQgJiYgcmlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVmdCB8fCByaWdodDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IFsuLi5sZWZ0XTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJpZ2h0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBpdGVtICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgXCJpbmRleFwiIGluIGl0ZW0gJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbS5pbmRleCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvTWVyZ2UgPSBtZXJnZWQuZmluZEluZGV4KChsZWZ0SXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09iamVjdCA9IHR5cGVvZiBsZWZ0SXRlbSA9PT0gXCJvYmplY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kaWNpZXNNYXRjaCA9IFwiaW5kZXhcIiBpbiBsZWZ0SXRlbSAmJiBsZWZ0SXRlbS5pbmRleCA9PT0gaXRlbS5pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRzTWF0Y2ggPSBcImlkXCIgaW4gbGVmdEl0ZW0gJiYgXCJpZFwiIGluIGl0ZW0gJiYgbGVmdEl0ZW0/LmlkID09PSBpdGVtPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWl0aGVySXRlbU1pc3NpbmdJRCA9ICEoXCJpZFwiIGluIGxlZnRJdGVtKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWxlZnRJdGVtPy5pZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIShcImlkXCIgaW4gaXRlbSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFpdGVtPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0ICYmIGluZGljaWVzTWF0Y2ggJiYgKGlkc01hdGNoIHx8IGVpdGhlckl0ZW1NaXNzaW5nSUQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0b01lcmdlICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWVyZ2VkW3RvTWVyZ2VdID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlZFt0b01lcmdlXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBtZXJnZWRbdG9NZXJnZV0gPSBfbWVyZ2VEaWN0cyhtZXJnZWRbdG9NZXJnZV0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBpdGVtICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgXCJ0ZXh0XCIgaW4gaXRlbSAmJlxuICAgICAgICAgICAgICAgIGl0ZW0udGV4dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIC8vIE5vLW9wIC0gc2tpcCBlbXB0eSB0ZXh0IGJsb2Nrc1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gX21lcmdlT2JqKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKCFsZWZ0ICYmICFyaWdodCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbWVyZ2UgdHdvIHVuZGVmaW5lZCBvYmplY3RzLlwiKTtcbiAgICB9XG4gICAgaWYgKCFsZWZ0IHx8ICFyaWdodCkge1xuICAgICAgICByZXR1cm4gbGVmdCB8fCByaWdodDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGxlZnQgIT09IHR5cGVvZiByaWdodCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtZXJnZSBvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlcy5cXG5MZWZ0ICR7dHlwZW9mIGxlZnR9XFxuUmlnaHQgJHt0eXBlb2YgcmlnaHR9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiByaWdodCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKGxlZnQgKyByaWdodCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobGVmdCkgJiYgQXJyYXkuaXNBcnJheShyaWdodCkpIHtcbiAgICAgICAgcmV0dXJuIF9tZXJnZUxpc3RzKGxlZnQsIHJpZ2h0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGxlZnQgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJpZ2h0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBfbWVyZ2VEaWN0cyhsZWZ0LCByaWdodCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGxlZnQgPT09IHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IG1lcmdlIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzLlxcbkxlZnQgJHtsZWZ0fVxcblJpZ2h0ICR7cmlnaHR9YCk7XG4gICAgfVxufVxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2h1bmsgb2YgYSBtZXNzYWdlLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbiAqIG1lc3NhZ2UgY2h1bmtzLiBJdCBpbmNsdWRlcyBhIG1ldGhvZCBgX21lcmdlX2t3YXJnc19kaWN0KClgIGZvciBtZXJnaW5nXG4gKiBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGZyb20gYW5vdGhlciBgQmFzZU1lc3NhZ2VDaHVua2AgaW50byB0aGlzXG4gKiBvbmUuIEl0IGFsc28gb3ZlcnJpZGVzIHRoZSBgX19hZGRfXygpYCBtZXRob2QgdG8gc3VwcG9ydCBjb25jYXRlbmF0aW9uXG4gKiBvZiBgQmFzZU1lc3NhZ2VDaHVua2AgaW5zdGFuY2VzLlxuICovXG5jbGFzcyBCYXNlTWVzc2FnZUNodW5rIGV4dGVuZHMgQmFzZU1lc3NhZ2Uge1xufVxuZXhwb3J0cy5CYXNlTWVzc2FnZUNodW5rID0gQmFzZU1lc3NhZ2VDaHVuaztcbmZ1bmN0aW9uIF9pc01lc3NhZ2VGaWVsZFdpdGhSb2xlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHgucm9sZSA9PT0gXCJzdHJpbmdcIjtcbn1cbmZ1bmN0aW9uIGlzQmFzZU1lc3NhZ2UobWVzc2FnZUxpa2UpIHtcbiAgICByZXR1cm4gdHlwZW9mIG1lc3NhZ2VMaWtlPy5fZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gaXNCYXNlTWVzc2FnZUNodW5rKG1lc3NhZ2VMaWtlKSB7XG4gICAgcmV0dXJuIChpc0Jhc2VNZXNzYWdlKG1lc3NhZ2VMaWtlKSAmJlxuICAgICAgICB0eXBlb2YgbWVzc2FnZUxpa2UuY29uY2F0ID09PSBcImZ1bmN0aW9uXCIpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVG9vbE1lc3NhZ2VDaHVuayA9IGV4cG9ydHMuVG9vbE1lc3NhZ2UgPSB2b2lkIDA7XG5leHBvcnRzLmlzRGlyZWN0VG9vbE91dHB1dCA9IGlzRGlyZWN0VG9vbE91dHB1dDtcbmV4cG9ydHMuZGVmYXVsdFRvb2xDYWxsUGFyc2VyID0gZGVmYXVsdFRvb2xDYWxsUGFyc2VyO1xuZXhwb3J0cy5pc1Rvb2xNZXNzYWdlID0gaXNUb29sTWVzc2FnZTtcbmV4cG9ydHMuaXNUb29sTWVzc2FnZUNodW5rID0gaXNUb29sTWVzc2FnZUNodW5rO1xuY29uc3QgYmFzZV9qc18xID0gcmVxdWlyZShcIi4vYmFzZS5janNcIik7XG5mdW5jdGlvbiBpc0RpcmVjdFRvb2xPdXRwdXQoeCkge1xuICAgIHJldHVybiAoeCAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIFwibGNfZGlyZWN0X3Rvb2xfb3V0cHV0XCIgaW4geCAmJlxuICAgICAgICB4LmxjX2RpcmVjdF90b29sX291dHB1dCA9PT0gdHJ1ZSk7XG59XG4vKipcbiAqIFJlcHJlc2VudHMgYSB0b29sIG1lc3NhZ2UgaW4gYSBjb252ZXJzYXRpb24uXG4gKi9cbmNsYXNzIFRvb2xNZXNzYWdlIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VNZXNzYWdlIHtcbiAgICBzdGF0aWMgbGNfbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiVG9vbE1lc3NhZ2VcIjtcbiAgICB9XG4gICAgZ2V0IGxjX2FsaWFzZXMoKSB7XG4gICAgICAgIC8vIGV4Y2x1ZGUgc25ha2UgY2FzZSBjb252ZXJzaW9uIHRvIHBhc2NhbCBjYXNlXG4gICAgICAgIHJldHVybiB7IHRvb2xfY2FsbF9pZDogXCJ0b29sX2NhbGxfaWRcIiB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIHRvb2xfY2FsbF9pZCwgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIGZpZWxkcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBmaWVsZHMgPSB7IGNvbnRlbnQ6IGZpZWxkcywgbmFtZSwgdG9vbF9jYWxsX2lkOiB0b29sX2NhbGxfaWQgfTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihmaWVsZHMpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJsY19kaXJlY3RfdG9vbF9vdXRwdXRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGF0dXMgb2YgdGhlIHRvb2wgaW52b2NhdGlvbi5cbiAgICAgICAgICogQHZlcnNpb24gMC4yLjE5XG4gICAgICAgICAqL1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGF0dXNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidG9vbF9jYWxsX2lkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcnRpZmFjdCBvZiB0aGUgVG9vbCBleGVjdXRpb24gd2hpY2ggaXMgbm90IG1lYW50IHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTaG91bGQgb25seSBiZSBzcGVjaWZpZWQgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG1lc3NhZ2UgY29udGVudCwgZS5nLiBpZiBvbmx5XG4gICAgICAgICAqIGEgc3Vic2V0IG9mIHRoZSBmdWxsIHRvb2wgb3V0cHV0IGlzIGJlaW5nIHBhc3NlZCBhcyBtZXNzYWdlIGNvbnRlbnQgYnV0IHRoZSBmdWxsXG4gICAgICAgICAqIG91dHB1dCBpcyBuZWVkZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuXG4gICAgICAgICAqL1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJhcnRpZmFjdFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRvb2xfY2FsbF9pZCA9IGZpZWxkcy50b29sX2NhbGxfaWQ7XG4gICAgICAgIHRoaXMuYXJ0aWZhY3QgPSBmaWVsZHMuYXJ0aWZhY3Q7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gZmllbGRzLnN0YXR1cztcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IGZpZWxkcy5tZXRhZGF0YTtcbiAgICB9XG4gICAgX2dldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBcInRvb2xcIjtcbiAgICB9XG4gICAgc3RhdGljIGlzSW5zdGFuY2UobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS5fZ2V0VHlwZSgpID09PSBcInRvb2xcIjtcbiAgICB9XG4gICAgZ2V0IF9wcmludGFibGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5fcHJpbnRhYmxlRmllbGRzLFxuICAgICAgICAgICAgdG9vbF9jYWxsX2lkOiB0aGlzLnRvb2xfY2FsbF9pZCxcbiAgICAgICAgICAgIGFydGlmYWN0OiB0aGlzLmFydGlmYWN0LFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuVG9vbE1lc3NhZ2UgPSBUb29sTWVzc2FnZTtcbi8qKlxuICogUmVwcmVzZW50cyBhIGNodW5rIG9mIGEgdG9vbCBtZXNzYWdlLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkXG4gKiB3aXRoIG90aGVyIHRvb2wgbWVzc2FnZSBjaHVua3MuXG4gKi9cbmNsYXNzIFRvb2xNZXNzYWdlQ2h1bmsgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZU1lc3NhZ2VDaHVuayB7XG4gICAgY29uc3RydWN0b3IoZmllbGRzKSB7XG4gICAgICAgIHN1cGVyKGZpZWxkcyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvb2xfY2FsbF9pZFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RhdHVzIG9mIHRoZSB0b29sIGludm9jYXRpb24uXG4gICAgICAgICAqIEB2ZXJzaW9uIDAuMi4xOVxuICAgICAgICAgKi9cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdHVzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcnRpZmFjdCBvZiB0aGUgVG9vbCBleGVjdXRpb24gd2hpY2ggaXMgbm90IG1lYW50IHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTaG91bGQgb25seSBiZSBzcGVjaWZpZWQgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG1lc3NhZ2UgY29udGVudCwgZS5nLiBpZiBvbmx5XG4gICAgICAgICAqIGEgc3Vic2V0IG9mIHRoZSBmdWxsIHRvb2wgb3V0cHV0IGlzIGJlaW5nIHBhc3NlZCBhcyBtZXNzYWdlIGNvbnRlbnQgYnV0IHRoZSBmdWxsXG4gICAgICAgICAqIG91dHB1dCBpcyBuZWVkZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuXG4gICAgICAgICAqL1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJhcnRpZmFjdFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRvb2xfY2FsbF9pZCA9IGZpZWxkcy50b29sX2NhbGxfaWQ7XG4gICAgICAgIHRoaXMuYXJ0aWZhY3QgPSBmaWVsZHMuYXJ0aWZhY3Q7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gZmllbGRzLnN0YXR1cztcbiAgICB9XG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiBcIlRvb2xNZXNzYWdlQ2h1bmtcIjtcbiAgICB9XG4gICAgX2dldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBcInRvb2xcIjtcbiAgICB9XG4gICAgY29uY2F0KGNodW5rKSB7XG4gICAgICAgIHJldHVybiBuZXcgVG9vbE1lc3NhZ2VDaHVuayh7XG4gICAgICAgICAgICBjb250ZW50OiAoMCwgYmFzZV9qc18xLm1lcmdlQ29udGVudCkodGhpcy5jb250ZW50LCBjaHVuay5jb250ZW50KSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxfa3dhcmdzOiAoMCwgYmFzZV9qc18xLl9tZXJnZURpY3RzKSh0aGlzLmFkZGl0aW9uYWxfa3dhcmdzLCBjaHVuay5hZGRpdGlvbmFsX2t3YXJncyksXG4gICAgICAgICAgICByZXNwb25zZV9tZXRhZGF0YTogKDAsIGJhc2VfanNfMS5fbWVyZ2VEaWN0cykodGhpcy5yZXNwb25zZV9tZXRhZGF0YSwgY2h1bmsucmVzcG9uc2VfbWV0YWRhdGEpLFxuICAgICAgICAgICAgYXJ0aWZhY3Q6ICgwLCBiYXNlX2pzXzEuX21lcmdlT2JqKSh0aGlzLmFydGlmYWN0LCBjaHVuay5hcnRpZmFjdCksXG4gICAgICAgICAgICB0b29sX2NhbGxfaWQ6IHRoaXMudG9vbF9jYWxsX2lkLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPz8gY2h1bmsuaWQsXG4gICAgICAgICAgICBzdGF0dXM6ICgwLCBiYXNlX2pzXzEuX21lcmdlU3RhdHVzKSh0aGlzLnN0YXR1cywgY2h1bmsuc3RhdHVzKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBfcHJpbnRhYmxlRmllbGRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuX3ByaW50YWJsZUZpZWxkcyxcbiAgICAgICAgICAgIHRvb2xfY2FsbF9pZDogdGhpcy50b29sX2NhbGxfaWQsXG4gICAgICAgICAgICBhcnRpZmFjdDogdGhpcy5hcnRpZmFjdCxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLlRvb2xNZXNzYWdlQ2h1bmsgPSBUb29sTWVzc2FnZUNodW5rO1xuZnVuY3Rpb24gZGVmYXVsdFRvb2xDYWxsUGFyc2VyKFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbnJhd1Rvb2xDYWxscykge1xuICAgIGNvbnN0IHRvb2xDYWxscyA9IFtdO1xuICAgIGNvbnN0IGludmFsaWRUb29sQ2FsbHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRvb2xDYWxsIG9mIHJhd1Rvb2xDYWxscykge1xuICAgICAgICBpZiAoIXRvb2xDYWxsLmZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQXJncyA9IEpTT04ucGFyc2UodG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBmdW5jdGlvbkFyZ3MgfHwge30sXG4gICAgICAgICAgICAgICAgICAgIGlkOiB0b29sQ2FsbC5pZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRvb2xDYWxscy5wdXNoKHBhcnNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkVG9vbENhbGxzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRvb2xDYWxsLmlkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJNYWxmb3JtZWQgYXJncy5cIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3Rvb2xDYWxscywgaW52YWxpZFRvb2xDYWxsc107XG59XG5mdW5jdGlvbiBpc1Rvb2xNZXNzYWdlKHgpIHtcbiAgICByZXR1cm4geC5fZ2V0VHlwZSgpID09PSBcInRvb2xcIjtcbn1cbmZ1bmN0aW9uIGlzVG9vbE1lc3NhZ2VDaHVuayh4KSB7XG4gICAgcmV0dXJuIHguX2dldFR5cGUoKSA9PT0gXCJ0b29sXCI7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BSU1lc3NhZ2VDaHVuayA9IGV4cG9ydHMuQUlNZXNzYWdlID0gdm9pZCAwO1xuZXhwb3J0cy5pc0FJTWVzc2FnZSA9IGlzQUlNZXNzYWdlO1xuZXhwb3J0cy5pc0FJTWVzc2FnZUNodW5rID0gaXNBSU1lc3NhZ2VDaHVuaztcbmNvbnN0IGpzb25fanNfMSA9IHJlcXVpcmUoXCIuLi91dGlscy9qc29uLmNqc1wiKTtcbmNvbnN0IGJhc2VfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2UuY2pzXCIpO1xuY29uc3QgdG9vbF9qc18xID0gcmVxdWlyZShcIi4vdG9vbC5janNcIik7XG4vKipcbiAqIFJlcHJlc2VudHMgYW4gQUkgbWVzc2FnZSBpbiBhIGNvbnZlcnNhdGlvbi5cbiAqL1xuY2xhc3MgQUlNZXNzYWdlIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VNZXNzYWdlIHtcbiAgICBnZXQgbGNfYWxpYXNlcygpIHtcbiAgICAgICAgLy8gZXhjbHVkZSBzbmFrZSBjYXNlIGNvbnZlcnNpb24gdG8gcGFzY2FsIGNhc2VcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLmxjX2FsaWFzZXMsXG4gICAgICAgICAgICB0b29sX2NhbGxzOiBcInRvb2xfY2FsbHNcIixcbiAgICAgICAgICAgIGludmFsaWRfdG9vbF9jYWxsczogXCJpbnZhbGlkX3Rvb2xfY2FsbHNcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCBcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgICBrd2FyZ3MpIHtcbiAgICAgICAgbGV0IGluaXRQYXJhbXM7XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpbml0UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGZpZWxkcyxcbiAgICAgICAgICAgICAgICB0b29sX2NhbGxzOiBbXSxcbiAgICAgICAgICAgICAgICBpbnZhbGlkX3Rvb2xfY2FsbHM6IFtdLFxuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfa3dhcmdzOiBrd2FyZ3MgPz8ge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5pdFBhcmFtcyA9IGZpZWxkcztcbiAgICAgICAgICAgIGNvbnN0IHJhd1Rvb2xDYWxscyA9IGluaXRQYXJhbXMuYWRkaXRpb25hbF9rd2FyZ3M/LnRvb2xfY2FsbHM7XG4gICAgICAgICAgICBjb25zdCB0b29sQ2FsbHMgPSBpbml0UGFyYW1zLnRvb2xfY2FsbHM7XG4gICAgICAgICAgICBpZiAoIShyYXdUb29sQ2FsbHMgPT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICByYXdUb29sQ2FsbHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICh0b29sQ2FsbHMgPT09IHVuZGVmaW5lZCB8fCB0b29sQ2FsbHMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihbXG4gICAgICAgICAgICAgICAgICAgIFwiTmV3IExhbmdDaGFpbiBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIHRoYXQgbW9yZSBlZmZpY2llbnRseSBoYW5kbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ0b29sIGNhbGxpbmcuXFxuXFxuUGxlYXNlIHVwZ3JhZGUgeW91ciBwYWNrYWdlcyB0byB2ZXJzaW9ucyB0aGF0IHNldFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1lc3NhZ2UgdG9vbCBjYWxscy4gZS5nLiwgYHlhcm4gYWRkIEBsYW5nY2hhaW4vYW50aHJvcGljYCxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ5YXJuIGFkZCBAbGFuZ2NoYWluL29wZW5haWAsIGV0Yy5cIixcbiAgICAgICAgICAgICAgICBdLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCEocmF3VG9vbENhbGxzID09IG51bGwpICYmIHRvb2xDYWxscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFt0b29sQ2FsbHMsIGludmFsaWRUb29sQ2FsbHNdID0gKDAsIHRvb2xfanNfMS5kZWZhdWx0VG9vbENhbGxQYXJzZXIpKHJhd1Rvb2xDYWxscyk7XG4gICAgICAgICAgICAgICAgICAgIGluaXRQYXJhbXMudG9vbF9jYWxscyA9IHRvb2xDYWxscyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgaW5pdFBhcmFtcy5pbnZhbGlkX3Rvb2xfY2FsbHMgPSBpbnZhbGlkVG9vbENhbGxzID8/IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdFBhcmFtcy50b29sX2NhbGxzID0gaW5pdFBhcmFtcy50b29sX2NhbGxzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICBpbml0UGFyYW1zLmludmFsaWRfdG9vbF9jYWxscyA9IGluaXRQYXJhbXMuaW52YWxpZF90b29sX2NhbGxzID8/IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyBpZiBwYXJzaW5nIGZhaWxzXG4gICAgICAgICAgICAgICAgaW5pdFBhcmFtcy50b29sX2NhbGxzID0gW107XG4gICAgICAgICAgICAgICAgaW5pdFBhcmFtcy5pbnZhbGlkX3Rvb2xfY2FsbHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTYWRseSwgVHlwZVNjcmlwdCBvbmx5IGFsbG93cyBzdXBlcigpIGNhbGxzIGF0IHJvb3QgaWYgdGhlIGNsYXNzIGhhc1xuICAgICAgICAvLyBwcm9wZXJ0aWVzIHdpdGggaW5pdGlhbGl6ZXJzLCBzbyB3ZSBoYXZlIHRvIGNoZWNrIHR5cGVzIHR3aWNlLlxuICAgICAgICBzdXBlcihpbml0UGFyYW1zKTtcbiAgICAgICAgLy8gVGhlc2UgYXJlIHR5cGVkIGFzIG9wdGlvbmFsIHRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMgYW5kIGFsbG93IGZvciBjYXN0aW5nXG4gICAgICAgIC8vIGZyb20gQmFzZU1lc3NhZ2UuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvb2xfY2FsbHNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpbnZhbGlkX3Rvb2xfY2FsbHNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgcHJvdmlkZWQsIHRva2VuIHVzYWdlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS5cbiAgICAgICAgICovXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInVzYWdlX21ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdFBhcmFtcyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy50b29sX2NhbGxzID0gaW5pdFBhcmFtcy50b29sX2NhbGxzID8/IHRoaXMudG9vbF9jYWxscztcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZF90b29sX2NhbGxzID1cbiAgICAgICAgICAgICAgICBpbml0UGFyYW1zLmludmFsaWRfdG9vbF9jYWxscyA/PyB0aGlzLmludmFsaWRfdG9vbF9jYWxscztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzYWdlX21ldGFkYXRhID0gaW5pdFBhcmFtcy51c2FnZV9tZXRhZGF0YTtcbiAgICB9XG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiBcIkFJTWVzc2FnZVwiO1xuICAgIH1cbiAgICBfZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiYWlcIjtcbiAgICB9XG4gICAgZ2V0IF9wcmludGFibGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5fcHJpbnRhYmxlRmllbGRzLFxuICAgICAgICAgICAgdG9vbF9jYWxsczogdGhpcy50b29sX2NhbGxzLFxuICAgICAgICAgICAgaW52YWxpZF90b29sX2NhbGxzOiB0aGlzLmludmFsaWRfdG9vbF9jYWxscyxcbiAgICAgICAgICAgIHVzYWdlX21ldGFkYXRhOiB0aGlzLnVzYWdlX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuQUlNZXNzYWdlID0gQUlNZXNzYWdlO1xuZnVuY3Rpb24gaXNBSU1lc3NhZ2UoeCkge1xuICAgIHJldHVybiB4Ll9nZXRUeXBlKCkgPT09IFwiYWlcIjtcbn1cbmZ1bmN0aW9uIGlzQUlNZXNzYWdlQ2h1bmsoeCkge1xuICAgIHJldHVybiB4Ll9nZXRUeXBlKCkgPT09IFwiYWlcIjtcbn1cbi8qKlxuICogUmVwcmVzZW50cyBhIGNodW5rIG9mIGFuIEFJIG1lc3NhZ2UsIHdoaWNoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aFxuICogb3RoZXIgQUkgbWVzc2FnZSBjaHVua3MuXG4gKi9cbmNsYXNzIEFJTWVzc2FnZUNodW5rIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VNZXNzYWdlQ2h1bmsge1xuICAgIGNvbnN0cnVjdG9yKGZpZWxkcykge1xuICAgICAgICBsZXQgaW5pdFBhcmFtcztcbiAgICAgICAgaWYgKHR5cGVvZiBmaWVsZHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGluaXRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogZmllbGRzLFxuICAgICAgICAgICAgICAgIHRvb2xfY2FsbHM6IFtdLFxuICAgICAgICAgICAgICAgIGludmFsaWRfdG9vbF9jYWxsczogW10sXG4gICAgICAgICAgICAgICAgdG9vbF9jYWxsX2NodW5rczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkcy50b29sX2NhbGxfY2h1bmtzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGZpZWxkcy50b29sX2NhbGxfY2h1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaW5pdFBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgICAgICAgICAgdG9vbF9jYWxsczogZmllbGRzLnRvb2xfY2FsbHMgPz8gW10sXG4gICAgICAgICAgICAgICAgaW52YWxpZF90b29sX2NhbGxzOiBbXSxcbiAgICAgICAgICAgICAgICB0b29sX2NhbGxfY2h1bmtzOiBbXSxcbiAgICAgICAgICAgICAgICB1c2FnZV9tZXRhZGF0YTogZmllbGRzLnVzYWdlX21ldGFkYXRhICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBmaWVsZHMudXNhZ2VfbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG9vbENhbGxDaHVua3MgPSBmaWVsZHMudG9vbF9jYWxsX2NodW5rcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRUb29sQ2FsbENodW5rcyA9IHRvb2xDYWxsQ2h1bmtzLnJlZHVjZSgoYWNjLCBjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDaHVua0luZGV4ID0gYWNjLmZpbmRJbmRleCgoW21hdGNoXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBjaHVuayBoYXMgYW4gaWQgYW5kIGluZGV4LCBtYXRjaCBpZiBib3RoIGFyZSBwcmVzZW50XG4gICAgICAgICAgICAgICAgICAgIGlmIChcImlkXCIgaW4gY2h1bmsgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLmlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBcImluZGV4XCIgaW4gY2h1bmsgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLmluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuay5pZCA9PT0gbWF0Y2guaWQgJiYgY2h1bmsuaW5kZXggPT09IG1hdGNoLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGNodW5rIGhhcyBhbiBpZCwgd2UgbWF0Y2ggb24gaWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiaWRcIiBpbiBjaHVuayAmJiBjaHVuay5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rLmlkID09PSBtYXRjaC5pZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBjaHVuayBoYXMgYW4gaW5kZXgsIHdlIG1hdGNoIG9uIGluZGV4XG4gICAgICAgICAgICAgICAgICAgIGlmIChcImluZGV4XCIgaW4gY2h1bmsgJiYgY2h1bmsuaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rLmluZGV4ID09PSBtYXRjaC5pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRDaHVua0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBhY2NbbWF0Y2hlZENodW5rSW5kZXhdLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goW2NodW5rXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICBjb25zdCB0b29sQ2FsbHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRUb29sQ2FsbHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2h1bmtzIG9mIGdyb3VwZWRUb29sQ2FsbENodW5rcykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRBcmdzID0ge307XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGNodW5rc1swXT8ubmFtZSA/PyBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGpvaW5lZEFyZ3MgPSBjaHVua3MubWFwKChjKSA9PiBjLmFyZ3MgfHwgXCJcIikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzU3RyID0gam9pbmVkQXJncy5sZW5ndGggPyBqb2luZWRBcmdzIDogXCJ7fVwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gY2h1bmtzWzBdPy5pZDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRBcmdzID0gKDAsIGpzb25fanNfMS5wYXJzZVBhcnRpYWxKc29uKShhcmdzU3RyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXJncyA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBhcnNlZEFyZ3MgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGFyc2VkQXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1hbGZvcm1lZCB0b29sIGNhbGwgY2h1bmsgYXJncy5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdG9vbENhbGxzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHBhcnNlZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidG9vbF9jYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVG9vbENhbGxzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3NTdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIk1hbGZvcm1lZCBhcmdzLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Rvb2xfY2FsbFwiLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbml0UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgICAgICB0b29sX2NhbGxzOiB0b29sQ2FsbHMsXG4gICAgICAgICAgICAgICAgaW52YWxpZF90b29sX2NhbGxzOiBpbnZhbGlkVG9vbENhbGxzLFxuICAgICAgICAgICAgICAgIHVzYWdlX21ldGFkYXRhOiBmaWVsZHMudXNhZ2VfbWV0YWRhdGEgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IGZpZWxkcy51c2FnZV9tZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2FkbHksIFR5cGVTY3JpcHQgb25seSBhbGxvd3Mgc3VwZXIoKSBjYWxscyBhdCByb290IGlmIHRoZSBjbGFzcyBoYXNcbiAgICAgICAgLy8gcHJvcGVydGllcyB3aXRoIGluaXRpYWxpemVycywgc28gd2UgaGF2ZSB0byBjaGVjayB0eXBlcyB0d2ljZS5cbiAgICAgICAgc3VwZXIoaW5pdFBhcmFtcyk7XG4gICAgICAgIC8vIE11c3QgcmVkZWNsYXJlIHRvb2wgY2FsbCBmaWVsZHMgc2luY2UgdGhlcmUgaXMgbm8gbXVsdGlwbGUgaW5oZXJpdGFuY2UgaW4gSlMuXG4gICAgICAgIC8vIFRoZXNlIGFyZSB0eXBlZCBhcyBvcHRpb25hbCB0byBhdm9pZCBicmVha2luZyBjaGFuZ2VzIGFuZCBhbGxvdyBmb3IgY2FzdGluZ1xuICAgICAgICAvLyBmcm9tIEJhc2VNZXNzYWdlLlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0b29sX2NhbGxzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaW52YWxpZF90b29sX2NhbGxzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidG9vbF9jYWxsX2NodW5rc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBwcm92aWRlZCwgdG9rZW4gdXNhZ2UgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLlxuICAgICAgICAgKi9cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidXNhZ2VfbWV0YWRhdGFcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50b29sX2NhbGxfY2h1bmtzID1cbiAgICAgICAgICAgIGluaXRQYXJhbXMudG9vbF9jYWxsX2NodW5rcyA/PyB0aGlzLnRvb2xfY2FsbF9jaHVua3M7XG4gICAgICAgIHRoaXMudG9vbF9jYWxscyA9IGluaXRQYXJhbXMudG9vbF9jYWxscyA/PyB0aGlzLnRvb2xfY2FsbHM7XG4gICAgICAgIHRoaXMuaW52YWxpZF90b29sX2NhbGxzID1cbiAgICAgICAgICAgIGluaXRQYXJhbXMuaW52YWxpZF90b29sX2NhbGxzID8/IHRoaXMuaW52YWxpZF90b29sX2NhbGxzO1xuICAgICAgICB0aGlzLnVzYWdlX21ldGFkYXRhID0gaW5pdFBhcmFtcy51c2FnZV9tZXRhZGF0YTtcbiAgICB9XG4gICAgZ2V0IGxjX2FsaWFzZXMoKSB7XG4gICAgICAgIC8vIGV4Y2x1ZGUgc25ha2UgY2FzZSBjb252ZXJzaW9uIHRvIHBhc2NhbCBjYXNlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5sY19hbGlhc2VzLFxuICAgICAgICAgICAgdG9vbF9jYWxsczogXCJ0b29sX2NhbGxzXCIsXG4gICAgICAgICAgICBpbnZhbGlkX3Rvb2xfY2FsbHM6IFwiaW52YWxpZF90b29sX2NhbGxzXCIsXG4gICAgICAgICAgICB0b29sX2NhbGxfY2h1bmtzOiBcInRvb2xfY2FsbF9jaHVua3NcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiBcIkFJTWVzc2FnZUNodW5rXCI7XG4gICAgfVxuICAgIF9nZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gXCJhaVwiO1xuICAgIH1cbiAgICBnZXQgX3ByaW50YWJsZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLl9wcmludGFibGVGaWVsZHMsXG4gICAgICAgICAgICB0b29sX2NhbGxzOiB0aGlzLnRvb2xfY2FsbHMsXG4gICAgICAgICAgICB0b29sX2NhbGxfY2h1bmtzOiB0aGlzLnRvb2xfY2FsbF9jaHVua3MsXG4gICAgICAgICAgICBpbnZhbGlkX3Rvb2xfY2FsbHM6IHRoaXMuaW52YWxpZF90b29sX2NhbGxzLFxuICAgICAgICAgICAgdXNhZ2VfbWV0YWRhdGE6IHRoaXMudXNhZ2VfbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbmNhdChjaHVuaykge1xuICAgICAgICBjb25zdCBjb21iaW5lZEZpZWxkcyA9IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICgwLCBiYXNlX2pzXzEubWVyZ2VDb250ZW50KSh0aGlzLmNvbnRlbnQsIGNodW5rLmNvbnRlbnQpLFxuICAgICAgICAgICAgYWRkaXRpb25hbF9rd2FyZ3M6ICgwLCBiYXNlX2pzXzEuX21lcmdlRGljdHMpKHRoaXMuYWRkaXRpb25hbF9rd2FyZ3MsIGNodW5rLmFkZGl0aW9uYWxfa3dhcmdzKSxcbiAgICAgICAgICAgIHJlc3BvbnNlX21ldGFkYXRhOiAoMCwgYmFzZV9qc18xLl9tZXJnZURpY3RzKSh0aGlzLnJlc3BvbnNlX21ldGFkYXRhLCBjaHVuay5yZXNwb25zZV9tZXRhZGF0YSksXG4gICAgICAgICAgICB0b29sX2NhbGxfY2h1bmtzOiBbXSxcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkID8/IGNodW5rLmlkLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy50b29sX2NhbGxfY2h1bmtzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGNodW5rLnRvb2xfY2FsbF9jaHVua3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmF3VG9vbENhbGxzID0gKDAsIGJhc2VfanNfMS5fbWVyZ2VMaXN0cykodGhpcy50b29sX2NhbGxfY2h1bmtzLCBjaHVuay50b29sX2NhbGxfY2h1bmtzKTtcbiAgICAgICAgICAgIGlmIChyYXdUb29sQ2FsbHMgIT09IHVuZGVmaW5lZCAmJiByYXdUb29sQ2FsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkRmllbGRzLnRvb2xfY2FsbF9jaHVua3MgPSByYXdUb29sQ2FsbHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXNhZ2VfbWV0YWRhdGEgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgY2h1bmsudXNhZ2VfbWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRUb2tlbkRldGFpbHMgPSB7XG4gICAgICAgICAgICAgICAgLi4uKCh0aGlzLnVzYWdlX21ldGFkYXRhPy5pbnB1dF90b2tlbl9kZXRhaWxzPy5hdWRpbyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLnVzYWdlX21ldGFkYXRhPy5pbnB1dF90b2tlbl9kZXRhaWxzPy5hdWRpbyAhPT0gdW5kZWZpbmVkKSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiAodGhpcy51c2FnZV9tZXRhZGF0YT8uaW5wdXRfdG9rZW5fZGV0YWlscz8uYXVkaW8gPz8gMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNodW5rLnVzYWdlX21ldGFkYXRhPy5pbnB1dF90b2tlbl9kZXRhaWxzPy5hdWRpbyA/PyAwKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAuLi4oKHRoaXMudXNhZ2VfbWV0YWRhdGE/LmlucHV0X3Rva2VuX2RldGFpbHM/LmNhY2hlX3JlYWQgIT09XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICBjaHVuay51c2FnZV9tZXRhZGF0YT8uaW5wdXRfdG9rZW5fZGV0YWlscz8uY2FjaGVfcmVhZCAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCkgJiYge1xuICAgICAgICAgICAgICAgICAgICBjYWNoZV9yZWFkOiAodGhpcy51c2FnZV9tZXRhZGF0YT8uaW5wdXRfdG9rZW5fZGV0YWlscz8uY2FjaGVfcmVhZCA/PyAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2h1bmsudXNhZ2VfbWV0YWRhdGE/LmlucHV0X3Rva2VuX2RldGFpbHM/LmNhY2hlX3JlYWQgPz8gMCksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLi4uKCh0aGlzLnVzYWdlX21ldGFkYXRhPy5pbnB1dF90b2tlbl9kZXRhaWxzPy5jYWNoZV9jcmVhdGlvbiAhPT1cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLnVzYWdlX21ldGFkYXRhPy5pbnB1dF90b2tlbl9kZXRhaWxzPy5jYWNoZV9jcmVhdGlvbiAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCkgJiYge1xuICAgICAgICAgICAgICAgICAgICBjYWNoZV9jcmVhdGlvbjogKHRoaXMudXNhZ2VfbWV0YWRhdGE/LmlucHV0X3Rva2VuX2RldGFpbHM/LmNhY2hlX2NyZWF0aW9uID8/IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaHVuay51c2FnZV9tZXRhZGF0YT8uaW5wdXRfdG9rZW5fZGV0YWlscz8uY2FjaGVfY3JlYXRpb24gPz8gMCksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0VG9rZW5EZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgIC4uLigodGhpcy51c2FnZV9tZXRhZGF0YT8ub3V0cHV0X3Rva2VuX2RldGFpbHM/LmF1ZGlvICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgY2h1bmsudXNhZ2VfbWV0YWRhdGE/Lm91dHB1dF90b2tlbl9kZXRhaWxzPy5hdWRpbyAhPT0gdW5kZWZpbmVkKSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiAodGhpcy51c2FnZV9tZXRhZGF0YT8ub3V0cHV0X3Rva2VuX2RldGFpbHM/LmF1ZGlvID8/IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaHVuay51c2FnZV9tZXRhZGF0YT8ub3V0cHV0X3Rva2VuX2RldGFpbHM/LmF1ZGlvID8/IDApLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC4uLigodGhpcy51c2FnZV9tZXRhZGF0YT8ub3V0cHV0X3Rva2VuX2RldGFpbHM/LnJlYXNvbmluZyAhPT1cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLnVzYWdlX21ldGFkYXRhPy5vdXRwdXRfdG9rZW5fZGV0YWlscz8ucmVhc29uaW5nICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkKSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbmluZzogKHRoaXMudXNhZ2VfbWV0YWRhdGE/Lm91dHB1dF90b2tlbl9kZXRhaWxzPy5yZWFzb25pbmcgPz8gMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNodW5rLnVzYWdlX21ldGFkYXRhPy5vdXRwdXRfdG9rZW5fZGV0YWlscz8ucmVhc29uaW5nID8/IDApLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnVzYWdlX21ldGFkYXRhID8/IHtcbiAgICAgICAgICAgICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgICAgICAgICAgICB0b3RhbF90b2tlbnM6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBjaHVuay51c2FnZV9tZXRhZGF0YSA/PyB7XG4gICAgICAgICAgICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgICAgICAgICAgIG91dHB1dF90b2tlbnM6IDAsXG4gICAgICAgICAgICAgICAgdG90YWxfdG9rZW5zOiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHVzYWdlX21ldGFkYXRhID0ge1xuICAgICAgICAgICAgICAgIGlucHV0X3Rva2VuczogbGVmdC5pbnB1dF90b2tlbnMgKyByaWdodC5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogbGVmdC5vdXRwdXRfdG9rZW5zICsgcmlnaHQub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICAgICAgICB0b3RhbF90b2tlbnM6IGxlZnQudG90YWxfdG9rZW5zICsgcmlnaHQudG90YWxfdG9rZW5zLFxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGBpbnB1dF90b2tlbl9kZXRhaWxzYCAvIGBvdXRwdXRfdG9rZW5fZGV0YWlsc2Aga2V5cyBpbiBjb21iaW5lZCBmaWVsZHNcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlaXIgdmFsdWVzIGFyZSBkZWZpbmVkLlxuICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhpbnB1dFRva2VuRGV0YWlscykubGVuZ3RoID4gMCAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0X3Rva2VuX2RldGFpbHM6IGlucHV0VG9rZW5EZXRhaWxzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhvdXRwdXRUb2tlbkRldGFpbHMpLmxlbmd0aCA+IDAgJiYge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRfdG9rZW5fZGV0YWlsczogb3V0cHV0VG9rZW5EZXRhaWxzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbWJpbmVkRmllbGRzLnVzYWdlX21ldGFkYXRhID0gdXNhZ2VfbWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBSU1lc3NhZ2VDaHVuayhjb21iaW5lZEZpZWxkcyk7XG4gICAgfVxufVxuZXhwb3J0cy5BSU1lc3NhZ2VDaHVuayA9IEFJTWVzc2FnZUNodW5rO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2hhdE1lc3NhZ2VDaHVuayA9IGV4cG9ydHMuQ2hhdE1lc3NhZ2UgPSB2b2lkIDA7XG5leHBvcnRzLmlzQ2hhdE1lc3NhZ2UgPSBpc0NoYXRNZXNzYWdlO1xuZXhwb3J0cy5pc0NoYXRNZXNzYWdlQ2h1bmsgPSBpc0NoYXRNZXNzYWdlQ2h1bms7XG5jb25zdCBiYXNlX2pzXzEgPSByZXF1aXJlKFwiLi9iYXNlLmNqc1wiKTtcbi8qKlxuICogUmVwcmVzZW50cyBhIGNoYXQgbWVzc2FnZSBpbiBhIGNvbnZlcnNhdGlvbi5cbiAqL1xuY2xhc3MgQ2hhdE1lc3NhZ2UgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZU1lc3NhZ2Uge1xuICAgIHN0YXRpYyBsY19uYW1lKCkge1xuICAgICAgICByZXR1cm4gXCJDaGF0TWVzc2FnZVwiO1xuICAgIH1cbiAgICBzdGF0aWMgX2NoYXRNZXNzYWdlQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBDaGF0TWVzc2FnZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCByb2xlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIGZpZWxkcyA9IHsgY29udGVudDogZmllbGRzLCByb2xlOiByb2xlIH07XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoZmllbGRzKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicm9sZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvbGUgPSBmaWVsZHMucm9sZTtcbiAgICB9XG4gICAgX2dldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBcImdlbmVyaWNcIjtcbiAgICB9XG4gICAgc3RhdGljIGlzSW5zdGFuY2UobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS5fZ2V0VHlwZSgpID09PSBcImdlbmVyaWNcIjtcbiAgICB9XG4gICAgZ2V0IF9wcmludGFibGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5fcHJpbnRhYmxlRmllbGRzLFxuICAgICAgICAgICAgcm9sZTogdGhpcy5yb2xlLFxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydHMuQ2hhdE1lc3NhZ2UgPSBDaGF0TWVzc2FnZTtcbi8qKlxuICogUmVwcmVzZW50cyBhIGNodW5rIG9mIGEgY2hhdCBtZXNzYWdlLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGhcbiAqIG90aGVyIGNoYXQgbWVzc2FnZSBjaHVua3MuXG4gKi9cbmNsYXNzIENoYXRNZXNzYWdlQ2h1bmsgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZU1lc3NhZ2VDaHVuayB7XG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiBcIkNoYXRNZXNzYWdlQ2h1bmtcIjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCByb2xlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIGZpZWxkcyA9IHsgY29udGVudDogZmllbGRzLCByb2xlOiByb2xlIH07XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoZmllbGRzKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicm9sZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvbGUgPSBmaWVsZHMucm9sZTtcbiAgICB9XG4gICAgX2dldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBcImdlbmVyaWNcIjtcbiAgICB9XG4gICAgY29uY2F0KGNodW5rKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hhdE1lc3NhZ2VDaHVuayh7XG4gICAgICAgICAgICBjb250ZW50OiAoMCwgYmFzZV9qc18xLm1lcmdlQ29udGVudCkodGhpcy5jb250ZW50LCBjaHVuay5jb250ZW50KSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxfa3dhcmdzOiAoMCwgYmFzZV9qc18xLl9tZXJnZURpY3RzKSh0aGlzLmFkZGl0aW9uYWxfa3dhcmdzLCBjaHVuay5hZGRpdGlvbmFsX2t3YXJncyksXG4gICAgICAgICAgICByZXNwb25zZV9tZXRhZGF0YTogKDAsIGJhc2VfanNfMS5fbWVyZ2VEaWN0cykodGhpcy5yZXNwb25zZV9tZXRhZGF0YSwgY2h1bmsucmVzcG9uc2VfbWV0YWRhdGEpLFxuICAgICAgICAgICAgcm9sZTogdGhpcy5yb2xlLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPz8gY2h1bmsuaWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgX3ByaW50YWJsZUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLl9wcmludGFibGVGaWVsZHMsXG4gICAgICAgICAgICByb2xlOiB0aGlzLnJvbGUsXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5DaGF0TWVzc2FnZUNodW5rID0gQ2hhdE1lc3NhZ2VDaHVuaztcbmZ1bmN0aW9uIGlzQ2hhdE1lc3NhZ2UoeCkge1xuICAgIHJldHVybiB4Ll9nZXRUeXBlKCkgPT09IFwiZ2VuZXJpY1wiO1xufVxuZnVuY3Rpb24gaXNDaGF0TWVzc2FnZUNodW5rKHgpIHtcbiAgICByZXR1cm4geC5fZ2V0VHlwZSgpID09PSBcImdlbmVyaWNcIjtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZ1bmN0aW9uTWVzc2FnZUNodW5rID0gZXhwb3J0cy5GdW5jdGlvbk1lc3NhZ2UgPSB2b2lkIDA7XG5leHBvcnRzLmlzRnVuY3Rpb25NZXNzYWdlID0gaXNGdW5jdGlvbk1lc3NhZ2U7XG5leHBvcnRzLmlzRnVuY3Rpb25NZXNzYWdlQ2h1bmsgPSBpc0Z1bmN0aW9uTWVzc2FnZUNodW5rO1xuY29uc3QgYmFzZV9qc18xID0gcmVxdWlyZShcIi4vYmFzZS5janNcIik7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBmdW5jdGlvbiBtZXNzYWdlIGluIGEgY29udmVyc2F0aW9uLlxuICovXG5jbGFzcyBGdW5jdGlvbk1lc3NhZ2UgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZU1lc3NhZ2Uge1xuICAgIHN0YXRpYyBsY19uYW1lKCkge1xuICAgICAgICByZXR1cm4gXCJGdW5jdGlvbk1lc3NhZ2VcIjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCBcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgICBuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIGZpZWxkcyA9IHsgY29udGVudDogZmllbGRzLCBuYW1lOiBuYW1lIH07XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoZmllbGRzKTtcbiAgICB9XG4gICAgX2dldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gICAgfVxufVxuZXhwb3J0cy5GdW5jdGlvbk1lc3NhZ2UgPSBGdW5jdGlvbk1lc3NhZ2U7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBjaHVuayBvZiBhIGZ1bmN0aW9uIG1lc3NhZ2UsIHdoaWNoIGNhbiBiZSBjb25jYXRlbmF0ZWRcbiAqIHdpdGggb3RoZXIgZnVuY3Rpb24gbWVzc2FnZSBjaHVua3MuXG4gKi9cbmNsYXNzIEZ1bmN0aW9uTWVzc2FnZUNodW5rIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VNZXNzYWdlQ2h1bmsge1xuICAgIHN0YXRpYyBsY19uYW1lKCkge1xuICAgICAgICByZXR1cm4gXCJGdW5jdGlvbk1lc3NhZ2VDaHVua1wiO1xuICAgIH1cbiAgICBfZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIjtcbiAgICB9XG4gICAgY29uY2F0KGNodW5rKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25NZXNzYWdlQ2h1bmsoe1xuICAgICAgICAgICAgY29udGVudDogKDAsIGJhc2VfanNfMS5tZXJnZUNvbnRlbnQpKHRoaXMuY29udGVudCwgY2h1bmsuY29udGVudCksXG4gICAgICAgICAgICBhZGRpdGlvbmFsX2t3YXJnczogKDAsIGJhc2VfanNfMS5fbWVyZ2VEaWN0cykodGhpcy5hZGRpdGlvbmFsX2t3YXJncywgY2h1bmsuYWRkaXRpb25hbF9rd2FyZ3MpLFxuICAgICAgICAgICAgcmVzcG9uc2VfbWV0YWRhdGE6ICgwLCBiYXNlX2pzXzEuX21lcmdlRGljdHMpKHRoaXMucmVzcG9uc2VfbWV0YWRhdGEsIGNodW5rLnJlc3BvbnNlX21ldGFkYXRhKSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSA/PyBcIlwiLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPz8gY2h1bmsuaWQsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuRnVuY3Rpb25NZXNzYWdlQ2h1bmsgPSBGdW5jdGlvbk1lc3NhZ2VDaHVuaztcbmZ1bmN0aW9uIGlzRnVuY3Rpb25NZXNzYWdlKHgpIHtcbiAgICByZXR1cm4geC5fZ2V0VHlwZSgpID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uTWVzc2FnZUNodW5rKHgpIHtcbiAgICByZXR1cm4geC5fZ2V0VHlwZSgpID09PSBcImZ1bmN0aW9uXCI7XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IdW1hbk1lc3NhZ2VDaHVuayA9IGV4cG9ydHMuSHVtYW5NZXNzYWdlID0gdm9pZCAwO1xuZXhwb3J0cy5pc0h1bWFuTWVzc2FnZSA9IGlzSHVtYW5NZXNzYWdlO1xuZXhwb3J0cy5pc0h1bWFuTWVzc2FnZUNodW5rID0gaXNIdW1hbk1lc3NhZ2VDaHVuaztcbmNvbnN0IGJhc2VfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2UuY2pzXCIpO1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgaHVtYW4gbWVzc2FnZSBpbiBhIGNvbnZlcnNhdGlvbi5cbiAqL1xuY2xhc3MgSHVtYW5NZXNzYWdlIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VNZXNzYWdlIHtcbiAgICBzdGF0aWMgbGNfbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiSHVtYW5NZXNzYWdlXCI7XG4gICAgfVxuICAgIF9nZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gXCJodW1hblwiO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIFxuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIGt3YXJncykge1xuICAgICAgICBzdXBlcihmaWVsZHMsIGt3YXJncyk7XG4gICAgfVxufVxuZXhwb3J0cy5IdW1hbk1lc3NhZ2UgPSBIdW1hbk1lc3NhZ2U7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBjaHVuayBvZiBhIGh1bWFuIG1lc3NhZ2UsIHdoaWNoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aFxuICogb3RoZXIgaHVtYW4gbWVzc2FnZSBjaHVua3MuXG4gKi9cbmNsYXNzIEh1bWFuTWVzc2FnZUNodW5rIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VNZXNzYWdlQ2h1bmsge1xuICAgIHN0YXRpYyBsY19uYW1lKCkge1xuICAgICAgICByZXR1cm4gXCJIdW1hbk1lc3NhZ2VDaHVua1wiO1xuICAgIH1cbiAgICBfZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiaHVtYW5cIjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZmllbGRzLCBcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgICBrd2FyZ3MpIHtcbiAgICAgICAgc3VwZXIoZmllbGRzLCBrd2FyZ3MpO1xuICAgIH1cbiAgICBjb25jYXQoY2h1bmspIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdW1hbk1lc3NhZ2VDaHVuayh7XG4gICAgICAgICAgICBjb250ZW50OiAoMCwgYmFzZV9qc18xLm1lcmdlQ29udGVudCkodGhpcy5jb250ZW50LCBjaHVuay5jb250ZW50KSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxfa3dhcmdzOiAoMCwgYmFzZV9qc18xLl9tZXJnZURpY3RzKSh0aGlzLmFkZGl0aW9uYWxfa3dhcmdzLCBjaHVuay5hZGRpdGlvbmFsX2t3YXJncyksXG4gICAgICAgICAgICByZXNwb25zZV9tZXRhZGF0YTogKDAsIGJhc2VfanNfMS5fbWVyZ2VEaWN0cykodGhpcy5yZXNwb25zZV9tZXRhZGF0YSwgY2h1bmsucmVzcG9uc2VfbWV0YWRhdGEpLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPz8gY2h1bmsuaWQsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuSHVtYW5NZXNzYWdlQ2h1bmsgPSBIdW1hbk1lc3NhZ2VDaHVuaztcbmZ1bmN0aW9uIGlzSHVtYW5NZXNzYWdlKHgpIHtcbiAgICByZXR1cm4geC5nZXRUeXBlKCkgPT09IFwiaHVtYW5cIjtcbn1cbmZ1bmN0aW9uIGlzSHVtYW5NZXNzYWdlQ2h1bmsoeCkge1xuICAgIHJldHVybiB4LmdldFR5cGUoKSA9PT0gXCJodW1hblwiO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVtb3ZlTWVzc2FnZSA9IHZvaWQgMDtcbmNvbnN0IGJhc2VfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2UuY2pzXCIpO1xuLyoqXG4gKiBNZXNzYWdlIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyBvdGhlciBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgUmVtb3ZlTWVzc2FnZSBleHRlbmRzIGJhc2VfanNfMS5CYXNlTWVzc2FnZSB7XG4gICAgY29uc3RydWN0b3IoZmllbGRzKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHJlbW92ZS5cbiAgICAgICAgICovXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaWQgPSBmaWVsZHMuaWQ7XG4gICAgfVxuICAgIF9nZXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gXCJyZW1vdmVcIjtcbiAgICB9XG4gICAgZ2V0IF9wcmludGFibGVGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5fcHJpbnRhYmxlRmllbGRzLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5SZW1vdmVNZXNzYWdlID0gUmVtb3ZlTWVzc2FnZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlN5c3RlbU1lc3NhZ2VDaHVuayA9IGV4cG9ydHMuU3lzdGVtTWVzc2FnZSA9IHZvaWQgMDtcbmV4cG9ydHMuaXNTeXN0ZW1NZXNzYWdlID0gaXNTeXN0ZW1NZXNzYWdlO1xuZXhwb3J0cy5pc1N5c3RlbU1lc3NhZ2VDaHVuayA9IGlzU3lzdGVtTWVzc2FnZUNodW5rO1xuY29uc3QgYmFzZV9qc18xID0gcmVxdWlyZShcIi4vYmFzZS5janNcIik7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBzeXN0ZW0gbWVzc2FnZSBpbiBhIGNvbnZlcnNhdGlvbi5cbiAqL1xuY2xhc3MgU3lzdGVtTWVzc2FnZSBleHRlbmRzIGJhc2VfanNfMS5CYXNlTWVzc2FnZSB7XG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiBcIlN5c3RlbU1lc3NhZ2VcIjtcbiAgICB9XG4gICAgX2dldFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBcInN5c3RlbVwiO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihmaWVsZHMsIFxuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIGt3YXJncykge1xuICAgICAgICBzdXBlcihmaWVsZHMsIGt3YXJncyk7XG4gICAgfVxufVxuZXhwb3J0cy5TeXN0ZW1NZXNzYWdlID0gU3lzdGVtTWVzc2FnZTtcbi8qKlxuICogUmVwcmVzZW50cyBhIGNodW5rIG9mIGEgc3lzdGVtIG1lc3NhZ2UsIHdoaWNoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aFxuICogb3RoZXIgc3lzdGVtIG1lc3NhZ2UgY2h1bmtzLlxuICovXG5jbGFzcyBTeXN0ZW1NZXNzYWdlQ2h1bmsgZXh0ZW5kcyBiYXNlX2pzXzEuQmFzZU1lc3NhZ2VDaHVuayB7XG4gICAgc3RhdGljIGxjX25hbWUoKSB7XG4gICAgICAgIHJldHVybiBcIlN5c3RlbU1lc3NhZ2VDaHVua1wiO1xuICAgIH1cbiAgICBfZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIFwic3lzdGVtXCI7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGZpZWxkcywgXG4gICAgLyoqIEBkZXByZWNhdGVkICovXG4gICAga3dhcmdzKSB7XG4gICAgICAgIHN1cGVyKGZpZWxkcywga3dhcmdzKTtcbiAgICB9XG4gICAgY29uY2F0KGNodW5rKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3lzdGVtTWVzc2FnZUNodW5rKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICgwLCBiYXNlX2pzXzEubWVyZ2VDb250ZW50KSh0aGlzLmNvbnRlbnQsIGNodW5rLmNvbnRlbnQpLFxuICAgICAgICAgICAgYWRkaXRpb25hbF9rd2FyZ3M6ICgwLCBiYXNlX2pzXzEuX21lcmdlRGljdHMpKHRoaXMuYWRkaXRpb25hbF9rd2FyZ3MsIGNodW5rLmFkZGl0aW9uYWxfa3dhcmdzKSxcbiAgICAgICAgICAgIHJlc3BvbnNlX21ldGFkYXRhOiAoMCwgYmFzZV9qc18xLl9tZXJnZURpY3RzKSh0aGlzLnJlc3BvbnNlX21ldGFkYXRhLCBjaHVuay5yZXNwb25zZV9tZXRhZGF0YSksXG4gICAgICAgICAgICBpZDogdGhpcy5pZCA/PyBjaHVuay5pZCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5TeXN0ZW1NZXNzYWdlQ2h1bmsgPSBTeXN0ZW1NZXNzYWdlQ2h1bms7XG5mdW5jdGlvbiBpc1N5c3RlbU1lc3NhZ2UoeCkge1xuICAgIHJldHVybiB4Ll9nZXRUeXBlKCkgPT09IFwic3lzdGVtXCI7XG59XG5mdW5jdGlvbiBpc1N5c3RlbU1lc3NhZ2VDaHVuayh4KSB7XG4gICAgcmV0dXJuIHguX2dldFR5cGUoKSA9PT0gXCJzeXN0ZW1cIjtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvZXJjZU1lc3NhZ2VMaWtlVG9NZXNzYWdlID0gY29lcmNlTWVzc2FnZUxpa2VUb01lc3NhZ2U7XG5leHBvcnRzLmdldEJ1ZmZlclN0cmluZyA9IGdldEJ1ZmZlclN0cmluZztcbmV4cG9ydHMubWFwU3RvcmVkTWVzc2FnZVRvQ2hhdE1lc3NhZ2UgPSBtYXBTdG9yZWRNZXNzYWdlVG9DaGF0TWVzc2FnZTtcbmV4cG9ydHMubWFwU3RvcmVkTWVzc2FnZXNUb0NoYXRNZXNzYWdlcyA9IG1hcFN0b3JlZE1lc3NhZ2VzVG9DaGF0TWVzc2FnZXM7XG5leHBvcnRzLm1hcENoYXRNZXNzYWdlc1RvU3RvcmVkTWVzc2FnZXMgPSBtYXBDaGF0TWVzc2FnZXNUb1N0b3JlZE1lc3NhZ2VzO1xuZXhwb3J0cy5jb252ZXJ0VG9DaHVuayA9IGNvbnZlcnRUb0NodW5rO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnMvaW5kZXguY2pzXCIpO1xuY29uc3QgdXRpbHNfanNfMSA9IHJlcXVpcmUoXCIuLi90b29scy91dGlscy5janNcIik7XG5jb25zdCBhaV9qc18xID0gcmVxdWlyZShcIi4vYWkuY2pzXCIpO1xuY29uc3QgYmFzZV9qc18xID0gcmVxdWlyZShcIi4vYmFzZS5janNcIik7XG5jb25zdCBjaGF0X2pzXzEgPSByZXF1aXJlKFwiLi9jaGF0LmNqc1wiKTtcbmNvbnN0IGZ1bmN0aW9uX2pzXzEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi5janNcIik7XG5jb25zdCBodW1hbl9qc18xID0gcmVxdWlyZShcIi4vaHVtYW4uY2pzXCIpO1xuY29uc3QgbW9kaWZpZXJfanNfMSA9IHJlcXVpcmUoXCIuL21vZGlmaWVyLmNqc1wiKTtcbmNvbnN0IHN5c3RlbV9qc18xID0gcmVxdWlyZShcIi4vc3lzdGVtLmNqc1wiKTtcbmNvbnN0IHRvb2xfanNfMSA9IHJlcXVpcmUoXCIuL3Rvb2wuY2pzXCIpO1xuZnVuY3Rpb24gX2NvZXJjZVRvb2xDYWxsKHRvb2xDYWxsKSB7XG4gICAgaWYgKCgwLCB1dGlsc19qc18xLl9pc1Rvb2xDYWxsKSh0b29sQ2FsbCkpIHtcbiAgICAgICAgcmV0dXJuIHRvb2xDYWxsO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdG9vbENhbGwuaWQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgdG9vbENhbGwudHlwZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiB0b29sQ2FsbC5mdW5jdGlvbiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB0b29sQ2FsbC5mdW5jdGlvbiAhPT0gbnVsbCAmJlxuICAgICAgICBcImFyZ3VtZW50c1wiIGluIHRvb2xDYWxsLmZ1bmN0aW9uICYmXG4gICAgICAgIHR5cGVvZiB0b29sQ2FsbC5mdW5jdGlvbi5hcmd1bWVudHMgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgXCJuYW1lXCIgaW4gdG9vbENhbGwuZnVuY3Rpb24gJiZcbiAgICAgICAgdHlwZW9mIHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8gSGFuZGxlIE9wZW5BSSB0b29sIGNhbGwgZm9ybWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdG9vbENhbGwuaWQsXG4gICAgICAgICAgICBhcmdzOiBKU09OLnBhcnNlKHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyksXG4gICAgICAgICAgICBuYW1lOiB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICAgICAgdHlwZTogXCJ0b29sX2NhbGxcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IFRocm93IGFuIGVycm9yP1xuICAgICAgICByZXR1cm4gdG9vbENhbGw7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTZXJpYWxpemVkQ29uc3RydWN0b3IoeCkge1xuICAgIHJldHVybiAodHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgeCAhPSBudWxsICYmXG4gICAgICAgIHgubGMgPT09IDEgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh4LmlkKSAmJlxuICAgICAgICB4Lmt3YXJncyAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiB4Lmt3YXJncyA9PT0gXCJvYmplY3RcIik7XG59XG5mdW5jdGlvbiBfY29uc3RydWN0TWVzc2FnZUZyb21QYXJhbXMocGFyYW1zKSB7XG4gICAgbGV0IHR5cGU7XG4gICAgbGV0IHJlc3Q7XG4gICAgLy8gU3VwcG9ydCBzZXJpYWxpemVkIG1lc3NhZ2VzXG4gICAgaWYgKGlzU2VyaWFsaXplZENvbnN0cnVjdG9yKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gcGFyYW1zLmlkLmF0KC0xKTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gXCJIdW1hbk1lc3NhZ2VcIiB8fCBjbGFzc05hbWUgPT09IFwiSHVtYW5NZXNzYWdlQ2h1bmtcIikge1xuICAgICAgICAgICAgdHlwZSA9IFwidXNlclwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNsYXNzTmFtZSA9PT0gXCJBSU1lc3NhZ2VcIiB8fCBjbGFzc05hbWUgPT09IFwiQUlNZXNzYWdlQ2h1bmtcIikge1xuICAgICAgICAgICAgdHlwZSA9IFwiYXNzaXN0YW50XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2xhc3NOYW1lID09PSBcIlN5c3RlbU1lc3NhZ2VcIiB8fFxuICAgICAgICAgICAgY2xhc3NOYW1lID09PSBcIlN5c3RlbU1lc3NhZ2VDaHVua1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gXCJzeXN0ZW1cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjbGFzc05hbWUgPT09IFwiRnVuY3Rpb25NZXNzYWdlXCIgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9PT0gXCJGdW5jdGlvbk1lc3NhZ2VDaHVua1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gXCJmdW5jdGlvblwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNsYXNzTmFtZSA9PT0gXCJUb29sTWVzc2FnZVwiIHx8XG4gICAgICAgICAgICBjbGFzc05hbWUgPT09IFwiVG9vbE1lc3NhZ2VDaHVua1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gXCJ0b29sXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0eXBlID0gXCJ1bmtub3duXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdCA9IHBhcmFtcy5rd2FyZ3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB7IHR5cGU6IGV4dHJhY3RlZFR5cGUsIC4uLm90aGVyUGFyYW1zIH0gPSBwYXJhbXM7XG4gICAgICAgIHR5cGUgPSBleHRyYWN0ZWRUeXBlO1xuICAgICAgICByZXN0ID0gb3RoZXJQYXJhbXM7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBcImh1bWFuXCIgfHwgdHlwZSA9PT0gXCJ1c2VyXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBodW1hbl9qc18xLkh1bWFuTWVzc2FnZShyZXN0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gXCJhaVwiIHx8IHR5cGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICAgICAgY29uc3QgeyB0b29sX2NhbGxzOiByYXdUb29sQ2FsbHMsIC4uLm90aGVyIH0gPSByZXN0O1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3VG9vbENhbGxzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhaV9qc18xLkFJTWVzc2FnZShyZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b29sX2NhbGxzID0gcmF3VG9vbENhbGxzLm1hcChfY29lcmNlVG9vbENhbGwpO1xuICAgICAgICByZXR1cm4gbmV3IGFpX2pzXzEuQUlNZXNzYWdlKHsgLi4ub3RoZXIsIHRvb2xfY2FsbHMgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT09IFwic3lzdGVtXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBzeXN0ZW1fanNfMS5TeXN0ZW1NZXNzYWdlKHJlc3QpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcImRldmVsb3BlclwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgc3lzdGVtX2pzXzEuU3lzdGVtTWVzc2FnZSh7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgYWRkaXRpb25hbF9rd2FyZ3M6IHtcbiAgICAgICAgICAgICAgICAuLi5yZXN0LmFkZGl0aW9uYWxfa3dhcmdzLFxuICAgICAgICAgICAgICAgIF9fb3BlbmFpX3JvbGVfXzogXCJkZXZlbG9wZXJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcInRvb2xcIiAmJiBcInRvb2xfY2FsbF9pZFwiIGluIHJlc3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0b29sX2pzXzEuVG9vbE1lc3NhZ2Uoe1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3QuY29udGVudCxcbiAgICAgICAgICAgIHRvb2xfY2FsbF9pZDogcmVzdC50b29sX2NhbGxfaWQsXG4gICAgICAgICAgICBuYW1lOiByZXN0Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcInJlbW92ZVwiICYmIFwiaWRcIiBpbiByZXN0ICYmIHR5cGVvZiByZXN0LmlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBuZXcgbW9kaWZpZXJfanNfMS5SZW1vdmVNZXNzYWdlKHsgLi4ucmVzdCwgaWQ6IHJlc3QuaWQgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICgwLCBpbmRleF9qc18xLmFkZExhbmdDaGFpbkVycm9yRmllbGRzKShuZXcgRXJyb3IoYFVuYWJsZSB0byBjb2VyY2UgbWVzc2FnZSBmcm9tIGFycmF5OiBvbmx5IGh1bWFuLCBBSSwgc3lzdGVtLCBkZXZlbG9wZXIsIG9yIHRvb2wgbWVzc2FnZSBjb2VyY2lvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxcblxcblJlY2VpdmVkOiAke0pTT04uc3RyaW5naWZ5KHBhcmFtcywgbnVsbCwgMil9YCksIFwiTUVTU0FHRV9DT0VSQ0lPTl9GQUlMVVJFXCIpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG5mdW5jdGlvbiBjb2VyY2VNZXNzYWdlTGlrZVRvTWVzc2FnZShtZXNzYWdlTGlrZSkge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZUxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBodW1hbl9qc18xLkh1bWFuTWVzc2FnZShtZXNzYWdlTGlrZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCgwLCBiYXNlX2pzXzEuaXNCYXNlTWVzc2FnZSkobWVzc2FnZUxpa2UpKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlTGlrZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZUxpa2UpKSB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBjb250ZW50XSA9IG1lc3NhZ2VMaWtlO1xuICAgICAgICByZXR1cm4gX2NvbnN0cnVjdE1lc3NhZ2VGcm9tUGFyYW1zKHsgdHlwZSwgY29udGVudCB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKDAsIGJhc2VfanNfMS5faXNNZXNzYWdlRmllbGRXaXRoUm9sZSkobWVzc2FnZUxpa2UpKSB7XG4gICAgICAgIGNvbnN0IHsgcm9sZTogdHlwZSwgLi4ucmVzdCB9ID0gbWVzc2FnZUxpa2U7XG4gICAgICAgIHJldHVybiBfY29uc3RydWN0TWVzc2FnZUZyb21QYXJhbXMoeyAuLi5yZXN0LCB0eXBlIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3RNZXNzYWdlRnJvbVBhcmFtcyhtZXNzYWdlTGlrZSk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgbWVtb3J5IGNsYXNzZXMgdG8gZ2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBvZiB0aGUgY2hhdCBtZXNzYWdlIGhpc3RvcnksIGJhc2VkIG9uIHRoZSBtZXNzYWdlIGNvbnRlbnQgYW5kIHJvbGUuXG4gKi9cbmZ1bmN0aW9uIGdldEJ1ZmZlclN0cmluZyhtZXNzYWdlcywgaHVtYW5QcmVmaXggPSBcIkh1bWFuXCIsIGFpUHJlZml4ID0gXCJBSVwiKSB7XG4gICAgY29uc3Qgc3RyaW5nX21lc3NhZ2VzID0gW107XG4gICAgZm9yIChjb25zdCBtIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgIGxldCByb2xlO1xuICAgICAgICBpZiAobS5fZ2V0VHlwZSgpID09PSBcImh1bWFuXCIpIHtcbiAgICAgICAgICAgIHJvbGUgPSBodW1hblByZWZpeDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtLl9nZXRUeXBlKCkgPT09IFwiYWlcIikge1xuICAgICAgICAgICAgcm9sZSA9IGFpUHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0uX2dldFR5cGUoKSA9PT0gXCJzeXN0ZW1cIikge1xuICAgICAgICAgICAgcm9sZSA9IFwiU3lzdGVtXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobS5fZ2V0VHlwZSgpID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJvbGUgPSBcIkZ1bmN0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobS5fZ2V0VHlwZSgpID09PSBcInRvb2xcIikge1xuICAgICAgICAgICAgcm9sZSA9IFwiVG9vbFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0uX2dldFR5cGUoKSA9PT0gXCJnZW5lcmljXCIpIHtcbiAgICAgICAgICAgIHJvbGUgPSBtLnJvbGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCB1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGU6ICR7bS5fZ2V0VHlwZSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVTdHIgPSBtLm5hbWUgPyBgJHttLm5hbWV9LCBgIDogXCJcIjtcbiAgICAgICAgY29uc3QgcmVhZGFibGVDb250ZW50ID0gdHlwZW9mIG0uY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyBtLmNvbnRlbnRcbiAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkobS5jb250ZW50LCBudWxsLCAyKTtcbiAgICAgICAgc3RyaW5nX21lc3NhZ2VzLnB1c2goYCR7cm9sZX06ICR7bmFtZVN0cn0ke3JlYWRhYmxlQ29udGVudH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ19tZXNzYWdlcy5qb2luKFwiXFxuXCIpO1xufVxuLyoqXG4gKiBNYXBzIG1lc3NhZ2VzIGZyb20gYW4gb2xkZXIgZm9ybWF0IChWMSkgdG8gdGhlIGN1cnJlbnQgYFN0b3JlZE1lc3NhZ2VgXG4gKiBmb3JtYXQuIElmIHRoZSBtZXNzYWdlIGlzIGFscmVhZHkgaW4gdGhlIGBTdG9yZWRNZXNzYWdlYCBmb3JtYXQsIGl0IGlzXG4gKiByZXR1cm5lZCBhcyBpcy4gT3RoZXJ3aXNlLCBpdCB0cmFuc2Zvcm1zIHRoZSBWMSBtZXNzYWdlIGludG8gYVxuICogYFN0b3JlZE1lc3NhZ2VgLiBUaGlzIGZ1bmN0aW9uIGlzIGltcG9ydGFudCBmb3IgbWFpbnRhaW5pbmdcbiAqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBtZXNzYWdlIGZvcm1hdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcFYxTWVzc2FnZVRvU3RvcmVkTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgbWFwcGVyIHdoZW4gd2UgZGVwcmVjYXRlIHRoZSBvbGQgbWVzc2FnZSBmb3JtYXQuXG4gICAgaWYgKG1lc3NhZ2UuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgdjFNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHYxTWVzc2FnZS50eXBlLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHYxTWVzc2FnZS50ZXh0LFxuICAgICAgICAgICAgICAgIHJvbGU6IHYxTWVzc2FnZS5yb2xlLFxuICAgICAgICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0b29sX2NhbGxfaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gbWFwU3RvcmVkTWVzc2FnZVRvQ2hhdE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIGNvbnN0IHN0b3JlZE1lc3NhZ2UgPSBtYXBWMU1lc3NhZ2VUb1N0b3JlZE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgc3dpdGNoIChzdG9yZWRNZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImh1bWFuXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGh1bWFuX2pzXzEuSHVtYW5NZXNzYWdlKHN0b3JlZE1lc3NhZ2UuZGF0YSk7XG4gICAgICAgIGNhc2UgXCJhaVwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBhaV9qc18xLkFJTWVzc2FnZShzdG9yZWRNZXNzYWdlLmRhdGEpO1xuICAgICAgICBjYXNlIFwic3lzdGVtXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IHN5c3RlbV9qc18xLlN5c3RlbU1lc3NhZ2Uoc3RvcmVkTWVzc2FnZS5kYXRhKTtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBpZiAoc3RvcmVkTWVzc2FnZS5kYXRhLm5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5hbWUgbXVzdCBiZSBkZWZpbmVkIGZvciBmdW5jdGlvbiBtZXNzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgZnVuY3Rpb25fanNfMS5GdW5jdGlvbk1lc3NhZ2Uoc3RvcmVkTWVzc2FnZS5kYXRhKTtcbiAgICAgICAgY2FzZSBcInRvb2xcIjpcbiAgICAgICAgICAgIGlmIChzdG9yZWRNZXNzYWdlLmRhdGEudG9vbF9jYWxsX2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUb29sIGNhbGwgSUQgbXVzdCBiZSBkZWZpbmVkIGZvciB0b29sIG1lc3NhZ2VzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyB0b29sX2pzXzEuVG9vbE1lc3NhZ2Uoc3RvcmVkTWVzc2FnZS5kYXRhKTtcbiAgICAgICAgY2FzZSBcImdlbmVyaWNcIjoge1xuICAgICAgICAgICAgaWYgKHN0b3JlZE1lc3NhZ2UuZGF0YS5yb2xlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSb2xlIG11c3QgYmUgZGVmaW5lZCBmb3IgY2hhdCBtZXNzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgY2hhdF9qc18xLkNoYXRNZXNzYWdlKHN0b3JlZE1lc3NhZ2UuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR290IHVuZXhwZWN0ZWQgdHlwZTogJHtzdG9yZWRNZXNzYWdlLnR5cGV9YCk7XG4gICAgfVxufVxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFuIGFycmF5IG9mIGBTdG9yZWRNZXNzYWdlYCBpbnN0YW5jZXMgaW50byBhbiBhcnJheSBvZlxuICogYEJhc2VNZXNzYWdlYCBpbnN0YW5jZXMuIEl0IHVzZXMgdGhlIGBtYXBWMU1lc3NhZ2VUb1N0b3JlZE1lc3NhZ2VgXG4gKiBmdW5jdGlvbiB0byBlbnN1cmUgYWxsIG1lc3NhZ2VzIGFyZSBpbiB0aGUgYFN0b3JlZE1lc3NhZ2VgIGZvcm1hdCwgdGhlblxuICogY3JlYXRlcyBuZXcgaW5zdGFuY2VzIG9mIHRoZSBhcHByb3ByaWF0ZSBgQmFzZU1lc3NhZ2VgIHN1YmNsYXNzIGJhc2VkXG4gKiBvbiB0aGUgdHlwZSBvZiBlYWNoIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwcmVwYXJlIHN0b3JlZFxuICogbWVzc2FnZXMgZm9yIHVzZSBpbiBhIGNoYXQgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gbWFwU3RvcmVkTWVzc2FnZXNUb0NoYXRNZXNzYWdlcyhtZXNzYWdlcykge1xuICAgIHJldHVybiBtZXNzYWdlcy5tYXAobWFwU3RvcmVkTWVzc2FnZVRvQ2hhdE1lc3NhZ2UpO1xufVxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFuIGFycmF5IG9mIGBCYXNlTWVzc2FnZWAgaW5zdGFuY2VzIGludG8gYW4gYXJyYXkgb2ZcbiAqIGBTdG9yZWRNZXNzYWdlYCBpbnN0YW5jZXMuIEl0IGRvZXMgdGhpcyBieSBjYWxsaW5nIHRoZSBgdG9EaWN0YCBtZXRob2RcbiAqIG9uIGVhY2ggYEJhc2VNZXNzYWdlYCwgd2hpY2ggcmV0dXJucyBhIGBTdG9yZWRNZXNzYWdlYC4gVGhpcyBmdW5jdGlvblxuICogaXMgdXNlZCB0byBwcmVwYXJlIGNoYXQgbWVzc2FnZXMgZm9yIHN0b3JhZ2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENoYXRNZXNzYWdlc1RvU3RvcmVkTWVzc2FnZXMobWVzc2FnZXMpIHtcbiAgICByZXR1cm4gbWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiBtZXNzYWdlLnRvRGljdCgpKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb0NodW5rKG1lc3NhZ2UpIHtcbiAgICBjb25zdCB0eXBlID0gbWVzc2FnZS5fZ2V0VHlwZSgpO1xuICAgIGlmICh0eXBlID09PSBcImh1bWFuXCIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICByZXR1cm4gbmV3IGh1bWFuX2pzXzEuSHVtYW5NZXNzYWdlQ2h1bmsoeyAuLi5tZXNzYWdlIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcImFpXCIpIHtcbiAgICAgICAgbGV0IGFpQ2h1bmtGaWVsZHMgPSB7XG4gICAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoXCJ0b29sX2NhbGxzXCIgaW4gYWlDaHVua0ZpZWxkcykge1xuICAgICAgICAgICAgYWlDaHVua0ZpZWxkcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5haUNodW5rRmllbGRzLFxuICAgICAgICAgICAgICAgIHRvb2xfY2FsbF9jaHVua3M6IGFpQ2h1bmtGaWVsZHMudG9vbF9jYWxscz8ubWFwKCh0YykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGMsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidG9vbF9jYWxsX2NodW5rXCIsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IEpTT04uc3RyaW5naWZ5KHRjLmFyZ3MpLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICByZXR1cm4gbmV3IGFpX2pzXzEuQUlNZXNzYWdlQ2h1bmsoeyAuLi5haUNodW5rRmllbGRzIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcInN5c3RlbVwiKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgcmV0dXJuIG5ldyBzeXN0ZW1fanNfMS5TeXN0ZW1NZXNzYWdlQ2h1bmsoeyAuLi5tZXNzYWdlIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICByZXR1cm4gbmV3IGZ1bmN0aW9uX2pzXzEuRnVuY3Rpb25NZXNzYWdlQ2h1bmsoeyAuLi5tZXNzYWdlIH0pO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgfVxuICAgIGVsc2UgaWYgKGNoYXRfanNfMS5DaGF0TWVzc2FnZS5pc0luc3RhbmNlKG1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgcmV0dXJuIG5ldyBjaGF0X2pzXzEuQ2hhdE1lc3NhZ2VDaHVuayh7IC4uLm1lc3NhZ2UgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgdHlwZS5cIik7XG4gICAgfVxufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUk9PVCA9IGV4cG9ydHMuQXN5bmNMb2NhbFN0b3JhZ2VQcm92aWRlclNpbmdsZXRvbiA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0Q3VycmVudFJ1blRyZWUgPSBnZXRDdXJyZW50UnVuVHJlZTtcbmV4cG9ydHMud2l0aFJ1blRyZWUgPSB3aXRoUnVuVHJlZTtcbmV4cG9ydHMuaXNUcmFjZWFibGVGdW5jdGlvbiA9IGlzVHJhY2VhYmxlRnVuY3Rpb247XG5jbGFzcyBNb2NrQXN5bmNMb2NhbFN0b3JhZ2Uge1xuICAgIGdldFN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBydW4oXywgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxufVxuY29uc3QgVFJBQ0lOR19BTFNfS0VZID0gU3ltYm9sLmZvcihcImxzOnRyYWNpbmdfYXN5bmNfbG9jYWxfc3RvcmFnZVwiKTtcbmNvbnN0IG1vY2tBc3luY0xvY2FsU3RvcmFnZSA9IG5ldyBNb2NrQXN5bmNMb2NhbFN0b3JhZ2UoKTtcbmNsYXNzIEFzeW5jTG9jYWxTdG9yYWdlUHJvdmlkZXIge1xuICAgIGdldEluc3RhbmNlKCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpc1tUUkFDSU5HX0FMU19LRVldID8/IG1vY2tBc3luY0xvY2FsU3RvcmFnZTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZUdsb2JhbEluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGlmIChnbG9iYWxUaGlzW1RSQUNJTkdfQUxTX0tFWV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGdsb2JhbFRoaXNbVFJBQ0lOR19BTFNfS0VZXSA9IGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5Bc3luY0xvY2FsU3RvcmFnZVByb3ZpZGVyU2luZ2xldG9uID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlUHJvdmlkZXIoKTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRSdW5UcmVlKHBlcm1pdEFic2VudFJ1blRyZWUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHJ1blRyZWUgPSBleHBvcnRzLkFzeW5jTG9jYWxTdG9yYWdlUHJvdmlkZXJTaW5nbGV0b24uZ2V0SW5zdGFuY2UoKS5nZXRTdG9yZSgpO1xuICAgIGlmICghcGVybWl0QWJzZW50UnVuVHJlZSAmJiBydW5UcmVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCB0aGUgY3VycmVudCBydW4gdHJlZS5cXG5cXG5QbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgY2FsbGluZyB0aGlzIG1ldGhvZCB3aXRoaW4gYSB0cmFjZWFibGUgZnVuY3Rpb24gYW5kIHRoYXQgdHJhY2luZyBpcyBlbmFibGVkLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJ1blRyZWU7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd2l0aFJ1blRyZWUocnVuVHJlZSwgZm4pIHtcbiAgICBjb25zdCBzdG9yYWdlID0gZXhwb3J0cy5Bc3luY0xvY2FsU3RvcmFnZVByb3ZpZGVyU2luZ2xldG9uLmdldEluc3RhbmNlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RvcmFnZS5ydW4ocnVuVHJlZSwgKCkgPT4gdm9pZCBQcm9taXNlLnJlc29sdmUoZm4oKSkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuUk9PVCA9IFN5bWJvbC5mb3IoXCJsYW5nc21pdGg6dHJhY2VhYmxlOnJvb3RcIik7XG5mdW5jdGlvbiBpc1RyYWNlYWJsZUZ1bmN0aW9uKHhcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiAmJiBcImxhbmdzbWl0aDp0cmFjZWFibGVcIiBpbiB4O1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2V0RGVmYXVsdExhbmdDaGFpbkNsaWVudFNpbmdsZXRvbiA9IGV4cG9ydHMuZ2V0RGVmYXVsdExhbmdDaGFpbkNsaWVudFNpbmdsZXRvbiA9IHZvaWQgMDtcbmNvbnN0IGxhbmdzbWl0aF8xID0gcmVxdWlyZShcImxhbmdzbWl0aFwiKTtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWxzL2Vudi5janNcIik7XG5sZXQgY2xpZW50O1xuY29uc3QgZ2V0RGVmYXVsdExhbmdDaGFpbkNsaWVudFNpbmdsZXRvbiA9ICgpID0+IHtcbiAgICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY2xpZW50UGFyYW1zID0gKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR0NIQUlOX0NBTExCQUNLU19CQUNLR1JPVU5EXCIpID09PSBcImZhbHNlXCJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC8vIExhbmdTbWl0aCBoYXMgaXRzIG93biBiYWNrZ3JvdW5kaW5nIHN5c3RlbVxuICAgICAgICAgICAgICAgIGJsb2NrT25Sb290UnVuRmluYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgY2xpZW50ID0gbmV3IGxhbmdzbWl0aF8xLkNsaWVudChjbGllbnRQYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xpZW50O1xufTtcbmV4cG9ydHMuZ2V0RGVmYXVsdExhbmdDaGFpbkNsaWVudFNpbmdsZXRvbiA9IGdldERlZmF1bHRMYW5nQ2hhaW5DbGllbnRTaW5nbGV0b247XG5jb25zdCBzZXREZWZhdWx0TGFuZ0NoYWluQ2xpZW50U2luZ2xldG9uID0gKG5ld0NsaWVudCkgPT4ge1xuICAgIGNsaWVudCA9IG5ld0NsaWVudDtcbn07XG5leHBvcnRzLnNldERlZmF1bHRMYW5nQ2hhaW5DbGllbnRTaW5nbGV0b24gPSBzZXREZWZhdWx0TGFuZ0NoYWluQ2xpZW50U2luZ2xldG9uO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTGFuZ0NoYWluVHJhY2VyID0gdm9pZCAwO1xuY29uc3QgbGFuZ3NtaXRoXzEgPSByZXF1aXJlKFwibGFuZ3NtaXRoXCIpO1xuY29uc3QgcnVuX3RyZWVzXzEgPSByZXF1aXJlKFwibGFuZ3NtaXRoL3J1bl90cmVlc1wiKTtcbmNvbnN0IHRyYWNlYWJsZV8xID0gcmVxdWlyZShcImxhbmdzbWl0aC9zaW5nbGV0b25zL3RyYWNlYWJsZVwiKTtcbmNvbnN0IGJhc2VfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2UuY2pzXCIpO1xuY29uc3QgdHJhY2VyX2pzXzEgPSByZXF1aXJlKFwiLi4vc2luZ2xldG9ucy90cmFjZXIuY2pzXCIpO1xuY2xhc3MgTGFuZ0NoYWluVHJhY2VyIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VUcmFjZXIge1xuICAgIGNvbnN0cnVjdG9yKGZpZWxkcyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGZpZWxkcyk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFwibGFuZ2NoYWluX3RyYWNlclwiXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJwcm9qZWN0TmFtZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJleGFtcGxlSWRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY2xpZW50XCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcGxpY2FzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInVzZXNSdW5UcmVlTWFwXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IGV4YW1wbGVJZCwgcHJvamVjdE5hbWUsIGNsaWVudCwgcmVwbGljYXMgfSA9IGZpZWxkcztcbiAgICAgICAgdGhpcy5wcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lID8/ICgwLCBsYW5nc21pdGhfMS5nZXREZWZhdWx0UHJvamVjdE5hbWUpKCk7XG4gICAgICAgIHRoaXMucmVwbGljYXMgPSByZXBsaWNhcztcbiAgICAgICAgdGhpcy5leGFtcGxlSWQgPSBleGFtcGxlSWQ7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50ID8/ICgwLCB0cmFjZXJfanNfMS5nZXREZWZhdWx0TGFuZ0NoYWluQ2xpZW50U2luZ2xldG9uKSgpO1xuICAgICAgICBjb25zdCB0cmFjZWFibGVUcmVlID0gTGFuZ0NoYWluVHJhY2VyLmdldFRyYWNlYWJsZVJ1blRyZWUoKTtcbiAgICAgICAgaWYgKHRyYWNlYWJsZVRyZWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJvbVJ1blRyZWUodHJhY2VhYmxlVHJlZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcGVyc2lzdFJ1bihfcnVuKSB7IH1cbiAgICBhc3luYyBvblJ1bkNyZWF0ZShydW4pIHtcbiAgICAgICAgY29uc3QgcnVuVHJlZSA9IHRoaXMuZ2V0UnVuVHJlZVdpdGhUcmFjaW5nQ29uZmlnKHJ1bi5pZCk7XG4gICAgICAgIGF3YWl0IHJ1blRyZWU/LnBvc3RSdW4oKTtcbiAgICB9XG4gICAgYXN5bmMgb25SdW5VcGRhdGUocnVuKSB7XG4gICAgICAgIGNvbnN0IHJ1blRyZWUgPSB0aGlzLmdldFJ1blRyZWVXaXRoVHJhY2luZ0NvbmZpZyhydW4uaWQpO1xuICAgICAgICBhd2FpdCBydW5UcmVlPy5wYXRjaFJ1bigpO1xuICAgIH1cbiAgICBnZXRSdW4oaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVuVHJlZU1hcC5nZXQoaWQpO1xuICAgIH1cbiAgICB1cGRhdGVGcm9tUnVuVHJlZShydW5UcmVlKSB7XG4gICAgICAgIHRoaXMucnVuVHJlZU1hcC5zZXQocnVuVHJlZS5pZCwgcnVuVHJlZSk7XG4gICAgICAgIGxldCByb290UnVuID0gcnVuVHJlZTtcbiAgICAgICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgd2hpbGUgKHJvb3RSdW4ucGFyZW50X3J1bikge1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKHJvb3RSdW4uaWQpKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQocm9vdFJ1bi5pZCk7XG4gICAgICAgICAgICBpZiAoIXJvb3RSdW4ucGFyZW50X3J1bilcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHJvb3RSdW4gPSByb290UnVuLnBhcmVudF9ydW47XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZC5jbGVhcigpO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFtyb290UnVuXTtcbiAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50IHx8IHZpc2l0ZWQuaGFzKGN1cnJlbnQuaWQpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQoY3VycmVudC5pZCk7XG4gICAgICAgICAgICB0aGlzLnJ1blRyZWVNYXAuc2V0KGN1cnJlbnQuaWQsIGN1cnJlbnQpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuY2hpbGRfcnVucykge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goLi4uY3VycmVudC5jaGlsZF9ydW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsaWVudCA9IHJ1blRyZWUuY2xpZW50ID8/IHRoaXMuY2xpZW50O1xuICAgICAgICB0aGlzLnJlcGxpY2FzID0gcnVuVHJlZS5yZXBsaWNhcyA/PyB0aGlzLnJlcGxpY2FzO1xuICAgICAgICB0aGlzLnByb2plY3ROYW1lID0gcnVuVHJlZS5wcm9qZWN0X25hbWUgPz8gdGhpcy5wcm9qZWN0TmFtZTtcbiAgICAgICAgdGhpcy5leGFtcGxlSWQgPSBydW5UcmVlLnJlZmVyZW5jZV9leGFtcGxlX2lkID8/IHRoaXMuZXhhbXBsZUlkO1xuICAgIH1cbiAgICBnZXRSdW5UcmVlV2l0aFRyYWNpbmdDb25maWcoaWQpIHtcbiAgICAgICAgY29uc3QgcnVuVHJlZSA9IHRoaXMucnVuVHJlZU1hcC5nZXQoaWQpO1xuICAgICAgICBpZiAoIXJ1blRyZWUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbmV3IHJ1bl90cmVlc18xLlJ1blRyZWUoe1xuICAgICAgICAgICAgLi4ucnVuVHJlZSxcbiAgICAgICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgICAgICBwcm9qZWN0X25hbWU6IHRoaXMucHJvamVjdE5hbWUsXG4gICAgICAgICAgICByZXBsaWNhczogdGhpcy5yZXBsaWNhcyxcbiAgICAgICAgICAgIHJlZmVyZW5jZV9leGFtcGxlX2lkOiB0aGlzLmV4YW1wbGVJZCxcbiAgICAgICAgICAgIHRyYWNpbmdFbmFibGVkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRyYWNlYWJsZVJ1blRyZWUoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgLy8gVGhlIHR5cGUgY2FzdCBoZXJlIHByb3ZpZGVzIGZvcndhcmQgY29tcGF0aWJpbGl0eS4gT2xkIHZlcnNpb25zIG9mIExhbmdTbWl0aCB3aWxsIGp1c3RcbiAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcGVybWl0QWJzZW50UnVuVHJlZSBhcmcuXG4gICAgICAgICAgICB0cmFjZWFibGVfMS5nZXRDdXJyZW50UnVuVHJlZSh0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuTGFuZ0NoYWluVHJhY2VyID0gTGFuZ0NoYWluVHJhY2VyO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0R2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSA9IGV4cG9ydHMuc2V0R2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSA9IGV4cG9ydHMuX0NPTlRFWFRfVkFSSUFCTEVTX0tFWSA9IGV4cG9ydHMuVFJBQ0lOR19BTFNfS0VZID0gdm9pZCAwO1xuZXhwb3J0cy5UUkFDSU5HX0FMU19LRVkgPSBTeW1ib2wuZm9yKFwibHM6dHJhY2luZ19hc3luY19sb2NhbF9zdG9yYWdlXCIpO1xuZXhwb3J0cy5fQ09OVEVYVF9WQVJJQUJMRVNfS0VZID0gU3ltYm9sLmZvcihcImxjOmNvbnRleHRfdmFyaWFibGVzXCIpO1xuY29uc3Qgc2V0R2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSA9IChpbnN0YW5jZSkgPT4ge1xuICAgIGdsb2JhbFRoaXNbZXhwb3J0cy5UUkFDSU5HX0FMU19LRVldID0gaW5zdGFuY2U7XG59O1xuZXhwb3J0cy5zZXRHbG9iYWxBc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlID0gc2V0R2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZTtcbmNvbnN0IGdldEdsb2JhbEFzeW5jTG9jYWxTdG9yYWdlSW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXNbZXhwb3J0cy5UUkFDSU5HX0FMU19LRVldO1xufTtcbmV4cG9ydHMuZ2V0R2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSA9IGdldEdsb2JhbEFzeW5jTG9jYWxTdG9yYWdlSW5zdGFuY2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRRdWV1ZSA9IGdldFF1ZXVlO1xuZXhwb3J0cy5jb25zdW1lQ2FsbGJhY2sgPSBjb25zdW1lQ2FsbGJhY2s7XG5leHBvcnRzLmF3YWl0QWxsQ2FsbGJhY2tzID0gYXdhaXRBbGxDYWxsYmFja3M7XG5jb25zdCBwX3F1ZXVlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInAtcXVldWVcIikpO1xuY29uc3QgZ2xvYmFsc19qc18xID0gcmVxdWlyZShcIi4vYXN5bmNfbG9jYWxfc3RvcmFnZS9nbG9iYWxzLmNqc1wiKTtcbmNvbnN0IHRyYWNlcl9qc18xID0gcmVxdWlyZShcIi4vdHJhY2VyLmNqc1wiKTtcbmxldCBxdWV1ZTtcbi8qKlxuICogQ3JlYXRlcyBhIHF1ZXVlIHVzaW5nIHRoZSBwLXF1ZXVlIGxpYnJhcnkuIFRoZSBxdWV1ZSBpcyBjb25maWd1cmVkIHRvXG4gKiBhdXRvLXN0YXJ0IGFuZCBoYXMgYSBjb25jdXJyZW5jeSBvZiAxLCBtZWFuaW5nIGl0IHdpbGwgcHJvY2VzcyB0YXNrc1xuICogb25lIGF0IGEgdGltZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUXVldWUoKSB7XG4gICAgY29uc3QgUFF1ZXVlID0gXCJkZWZhdWx0XCIgaW4gcF9xdWV1ZV8xLmRlZmF1bHQgPyBwX3F1ZXVlXzEuZGVmYXVsdC5kZWZhdWx0IDogcF9xdWV1ZV8xLmRlZmF1bHQ7XG4gICAgcmV0dXJuIG5ldyBQUXVldWUoe1xuICAgICAgICBhdXRvU3RhcnQ6IHRydWUsXG4gICAgICAgIGNvbmN1cnJlbmN5OiAxLFxuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0UXVldWUoKSB7XG4gICAgaWYgKHR5cGVvZiBxdWV1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBxdWV1ZSA9IGNyZWF0ZVF1ZXVlKCk7XG4gICAgfVxuICAgIHJldHVybiBxdWV1ZTtcbn1cbi8qKlxuICogQ29uc3VtZSBhIHByb21pc2UsIGVpdGhlciBhZGRpbmcgaXQgdG8gdGhlIHF1ZXVlIG9yIHdhaXRpbmcgZm9yIGl0IHRvIHJlc29sdmVcbiAqIEBwYXJhbSBwcm9taXNlRm4gUHJvbWlzZSB0byBjb25zdW1lXG4gKiBAcGFyYW0gd2FpdCBXaGV0aGVyIHRvIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgb3IgcmVzb2x2ZSBpbW1lZGlhdGVseVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lQ2FsbGJhY2socHJvbWlzZUZuLCB3YWl0KSB7XG4gICAgaWYgKHdhaXQgPT09IHRydWUpIHtcbiAgICAgICAgLy8gQ2xlYXIgY29uZmlnIHNpbmNlIGNhbGxiYWNrcyBhcmUgbm90IHBhcnQgb2YgdGhlIHJvb3QgcnVuXG4gICAgICAgIC8vIEF2b2lkIHVzaW5nIGdsb2JhbCBzaW5nbGV0b24gZHVlIHRvIGNpcmN1bHVhciBkZXBlbmRlbmN5IGlzc3Vlc1xuICAgICAgICBjb25zdCBhc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlID0gKDAsIGdsb2JhbHNfanNfMS5nZXRHbG9iYWxBc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlKSgpO1xuICAgICAgICBpZiAoYXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCBhc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlLnJ1bih1bmRlZmluZWQsIGFzeW5jICgpID0+IHByb21pc2VGbigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHByb21pc2VGbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBxdWV1ZSA9IGdldFF1ZXVlKCk7XG4gICAgICAgIHZvaWQgcXVldWUuYWRkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzeW5jTG9jYWxTdG9yYWdlSW5zdGFuY2UgPSAoMCwgZ2xvYmFsc19qc18xLmdldEdsb2JhbEFzeW5jTG9jYWxTdG9yYWdlSW5zdGFuY2UpKCk7XG4gICAgICAgICAgICBpZiAoYXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZS5ydW4odW5kZWZpbmVkLCBhc3luYyAoKSA9PiBwcm9taXNlRm4oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlRm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBXYWl0cyBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlLiBJZiB0aGUgcXVldWUgaXNcbiAqIHVuZGVmaW5lZCwgaXQgaW1tZWRpYXRlbHkgcmVzb2x2ZXMgYSBwcm9taXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBhd2FpdEFsbENhbGxiYWNrcygpIHtcbiAgICBjb25zdCBkZWZhdWx0Q2xpZW50ID0gKDAsIHRyYWNlcl9qc18xLmdldERlZmF1bHRMYW5nQ2hhaW5DbGllbnRTaW5nbGV0b24pKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgdHlwZW9mIHF1ZXVlICE9PSBcInVuZGVmaW5lZFwiID8gcXVldWUub25JZGxlKCkgOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICAgICAgZGVmYXVsdENsaWVudC5hd2FpdFBlbmRpbmdUcmFjZUJhdGNoZXMoKSxcbiAgICBdKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnN1bWVDYWxsYmFjayA9IGV4cG9ydHMuYXdhaXRBbGxDYWxsYmFja3MgPSB2b2lkIDA7XG5jb25zdCBjYWxsYmFja3NfanNfMSA9IHJlcXVpcmUoXCIuLi9zaW5nbGV0b25zL2NhbGxiYWNrcy5janNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhd2FpdEFsbENhbGxiYWNrc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbGJhY2tzX2pzXzEuYXdhaXRBbGxDYWxsYmFja3M7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25zdW1lQ2FsbGJhY2tcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrc19qc18xLmNvbnN1bWVDYWxsYmFjazsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmlzVHJhY2luZ0VuYWJsZWQgPSB2b2lkIDA7XG5jb25zdCBlbnZfanNfMSA9IHJlcXVpcmUoXCIuL2Vudi5janNcIik7XG5jb25zdCBpc1RyYWNpbmdFbmFibGVkID0gKHRyYWNpbmdFbmFibGVkKSA9PiB7XG4gICAgaWYgKHRyYWNpbmdFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRyYWNpbmdFbmFibGVkO1xuICAgIH1cbiAgICBjb25zdCBlbnZWYXJzID0gW1xuICAgICAgICBcIkxBTkdTTUlUSF9UUkFDSU5HX1YyXCIsXG4gICAgICAgIFwiTEFOR0NIQUlOX1RSQUNJTkdfVjJcIixcbiAgICAgICAgXCJMQU5HU01JVEhfVFJBQ0lOR1wiLFxuICAgICAgICBcIkxBTkdDSEFJTl9UUkFDSU5HXCIsXG4gICAgXTtcbiAgICByZXR1cm4gISFlbnZWYXJzLmZpbmQoKGVudlZhcikgPT4gKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKGVudlZhcikgPT09IFwidHJ1ZVwiKTtcbn07XG5leHBvcnRzLmlzVHJhY2luZ0VuYWJsZWQgPSBpc1RyYWNpbmdFbmFibGVkO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnaXN0ZXJDb25maWd1cmVIb29rID0gZXhwb3J0cy5fZ2V0Q29uZmlndXJlSG9va3MgPSB2b2lkIDA7XG5leHBvcnRzLnNldENvbnRleHRWYXJpYWJsZSA9IHNldENvbnRleHRWYXJpYWJsZTtcbmV4cG9ydHMuZ2V0Q29udGV4dFZhcmlhYmxlID0gZ2V0Q29udGV4dFZhcmlhYmxlO1xuY29uc3QgcnVuX3RyZWVzXzEgPSByZXF1aXJlKFwibGFuZ3NtaXRoL3J1bl90cmVlc1wiKTtcbmNvbnN0IGdsb2JhbHNfanNfMSA9IHJlcXVpcmUoXCIuL2dsb2JhbHMuY2pzXCIpO1xuLyoqXG4gKiBTZXQgYSBjb250ZXh0IHZhcmlhYmxlLiBDb250ZXh0IHZhcmlhYmxlcyBhcmUgc2NvcGVkIHRvIGFueVxuICogY2hpbGQgcnVubmFibGVzIGNhbGxlZCBieSB0aGUgY3VycmVudCBydW5uYWJsZSwgb3IgZ2xvYmFsbHkgaWYgc2V0IG91dHNpZGVcbiAqIG9mIGFueSBydW5uYWJsZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFzeW5jTG9jYWxTdG9yYWdlLFxuICogaW5jbHVkaW5nIE5vZGUuanMsIERlbm8sIGFuZCBDbG91ZGZsYXJlIFdvcmtlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBSdW5uYWJsZUxhbWJkYSB9IGZyb20gXCJAbGFuZ2NoYWluL2NvcmUvcnVubmFibGVzXCI7XG4gKiBpbXBvcnQge1xuICogICBnZXRDb250ZXh0VmFyaWFibGUsXG4gKiAgIHNldENvbnRleHRWYXJpYWJsZVxuICogfSBmcm9tIFwiQGxhbmdjaGFpbi9jb3JlL2NvbnRleHRcIjtcbiAqXG4gKiBjb25zdCBuZXN0ZWQgPSBSdW5uYWJsZUxhbWJkYS5mcm9tKCgpID0+IHtcbiAqICAgLy8gXCJiYXJcIiBiZWNhdXNlIGl0IHdhcyBzZXQgYnkgYSBwYXJlbnRcbiAqICAgY29uc29sZS5sb2coZ2V0Q29udGV4dFZhcmlhYmxlKFwiZm9vXCIpKTtcbiAqXG4gKiAgIC8vIE92ZXJyaWRlIHRvIFwiYmF6XCIsIGJ1dCBvbmx5IGZvciBjaGlsZCBydW5uYWJsZXNcbiAqICAgc2V0Q29udGV4dFZhcmlhYmxlKFwiZm9vXCIsIFwiYmF6XCIpO1xuICpcbiAqICAgLy8gTm93IFwiYmF6XCIsIGJ1dCBvbmx5IGZvciBjaGlsZCBydW5uYWJsZXNcbiAqICAgcmV0dXJuIGdldENvbnRleHRWYXJpYWJsZShcImZvb1wiKTtcbiAqIH0pO1xuICpcbiAqIGNvbnN0IHJ1bm5hYmxlID0gUnVubmFibGVMYW1iZGEuZnJvbShhc3luYyAoKSA9PiB7XG4gKiAgIC8vIFNldCBhIGNvbnRleHQgdmFyaWFibGUgbmFtZWQgXCJmb29cIlxuICogICBzZXRDb250ZXh0VmFyaWFibGUoXCJmb29cIiwgXCJiYXJcIik7XG4gKlxuICogICBjb25zdCByZXMgPSBhd2FpdCBuZXN0ZWQuaW52b2tlKHt9KTtcbiAqXG4gKiAgIC8vIFN0aWxsIFwiYmFyXCIgc2luY2UgY2hpbGQgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHBhcmVudHNcbiAqICAgY29uc29sZS5sb2coZ2V0Q29udGV4dFZhcmlhYmxlKFwiZm9vXCIpKTtcbiAqXG4gKiAgIHJldHVybiByZXM7XG4gKiB9KTtcbiAqXG4gKiAvLyB1bmRlZmluZWQsIGJlY2F1c2UgY29udGV4dCB2YXJpYWJsZSBoYXMgbm90IGJlZW4gc2V0IHlldFxuICogY29uc29sZS5sb2coZ2V0Q29udGV4dFZhcmlhYmxlKFwiZm9vXCIpKTtcbiAqXG4gKiAvLyBGaW5hbCByZXR1cm4gdmFsdWUgaXMgXCJiYXpcIlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVubmFibGUuaW52b2tlKHt9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb250ZXh0IHZhcmlhYmxlLlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBzZXRDb250ZXh0VmFyaWFibGUobmFtZSwgdmFsdWUpIHtcbiAgICAvLyBBdm9pZCB1c2luZyBnbG9iYWwgc2luZ2xldG9uIGR1ZSB0byBjaXJjdWx1YXIgZGVwZW5kZW5jeSBpc3N1ZXNcbiAgICBjb25zdCBhc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlID0gKDAsIGdsb2JhbHNfanNfMS5nZXRHbG9iYWxBc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlKSgpO1xuICAgIGlmIChhc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBlcnJvcjogR2xvYmFsIHNoYXJlZCBhc3luYyBsb2NhbCBzdG9yYWdlIGluc3RhbmNlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC5gKTtcbiAgICB9XG4gICAgY29uc3QgcnVuVHJlZSA9IGFzeW5jTG9jYWxTdG9yYWdlSW5zdGFuY2UuZ2V0U3RvcmUoKTtcbiAgICBjb25zdCBjb250ZXh0VmFycyA9IHsgLi4ucnVuVHJlZT8uW2dsb2JhbHNfanNfMS5fQ09OVEVYVF9WQVJJQUJMRVNfS0VZXSB9O1xuICAgIGNvbnRleHRWYXJzW25hbWVdID0gdmFsdWU7XG4gICAgbGV0IG5ld1ZhbHVlID0ge307XG4gICAgaWYgKCgwLCBydW5fdHJlZXNfMS5pc1J1blRyZWUpKHJ1blRyZWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gbmV3IHJ1bl90cmVlc18xLlJ1blRyZWUocnVuVHJlZSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbmV3VmFsdWVbZ2xvYmFsc19qc18xLl9DT05URVhUX1ZBUklBQkxFU19LRVldID0gY29udGV4dFZhcnM7XG4gICAgYXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZS5lbnRlcldpdGgobmV3VmFsdWUpO1xufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGEgcHJldmlvdXNseSBzZXQgY29udGV4dCB2YXJpYWJsZS4gQ29udGV4dCB2YXJpYWJsZXNcbiAqIGFyZSBzY29wZWQgdG8gYW55IGNoaWxkIHJ1bm5hYmxlcyBjYWxsZWQgYnkgdGhlIGN1cnJlbnQgcnVubmFibGUsXG4gKiBvciBnbG9iYWxseSBpZiBzZXQgb3V0c2lkZSBvZiBhbnkgcnVubmFibGUuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBzdXBwb3J0ZWQgaW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBc3luY0xvY2FsU3RvcmFnZSxcbiAqIGluY2x1ZGluZyBOb2RlLmpzLCBEZW5vLCBhbmQgQ2xvdWRmbGFyZSBXb3JrZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgUnVubmFibGVMYW1iZGEgfSBmcm9tIFwiQGxhbmdjaGFpbi9jb3JlL3J1bm5hYmxlc1wiO1xuICogaW1wb3J0IHtcbiAqICAgZ2V0Q29udGV4dFZhcmlhYmxlLFxuICogICBzZXRDb250ZXh0VmFyaWFibGVcbiAqIH0gZnJvbSBcIkBsYW5nY2hhaW4vY29yZS9jb250ZXh0XCI7XG4gKlxuICogY29uc3QgbmVzdGVkID0gUnVubmFibGVMYW1iZGEuZnJvbSgoKSA9PiB7XG4gKiAgIC8vIFwiYmFyXCIgYmVjYXVzZSBpdCB3YXMgc2V0IGJ5IGEgcGFyZW50XG4gKiAgIGNvbnNvbGUubG9nKGdldENvbnRleHRWYXJpYWJsZShcImZvb1wiKSk7XG4gKlxuICogICAvLyBPdmVycmlkZSB0byBcImJhelwiLCBidXQgb25seSBmb3IgY2hpbGQgcnVubmFibGVzXG4gKiAgIHNldENvbnRleHRWYXJpYWJsZShcImZvb1wiLCBcImJhelwiKTtcbiAqXG4gKiAgIC8vIE5vdyBcImJhelwiLCBidXQgb25seSBmb3IgY2hpbGQgcnVubmFibGVzXG4gKiAgIHJldHVybiBnZXRDb250ZXh0VmFyaWFibGUoXCJmb29cIik7XG4gKiB9KTtcbiAqXG4gKiBjb25zdCBydW5uYWJsZSA9IFJ1bm5hYmxlTGFtYmRhLmZyb20oYXN5bmMgKCkgPT4ge1xuICogICAvLyBTZXQgYSBjb250ZXh0IHZhcmlhYmxlIG5hbWVkIFwiZm9vXCJcbiAqICAgc2V0Q29udGV4dFZhcmlhYmxlKFwiZm9vXCIsIFwiYmFyXCIpO1xuICpcbiAqICAgY29uc3QgcmVzID0gYXdhaXQgbmVzdGVkLmludm9rZSh7fSk7XG4gKlxuICogICAvLyBTdGlsbCBcImJhclwiIHNpbmNlIGNoaWxkIGNoYW5nZXMgZG8gbm90IGFmZmVjdCBwYXJlbnRzXG4gKiAgIGNvbnNvbGUubG9nKGdldENvbnRleHRWYXJpYWJsZShcImZvb1wiKSk7XG4gKlxuICogICByZXR1cm4gcmVzO1xuICogfSk7XG4gKlxuICogLy8gdW5kZWZpbmVkLCBiZWNhdXNlIGNvbnRleHQgdmFyaWFibGUgaGFzIG5vdCBiZWVuIHNldCB5ZXRcbiAqIGNvbnNvbGUubG9nKGdldENvbnRleHRWYXJpYWJsZShcImZvb1wiKSk7XG4gKlxuICogLy8gRmluYWwgcmV0dXJuIHZhbHVlIGlzIFwiYmF6XCJcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bm5hYmxlLmludm9rZSh7fSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29udGV4dCB2YXJpYWJsZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGdldENvbnRleHRWYXJpYWJsZShuYW1lKSB7XG4gICAgLy8gQXZvaWQgdXNpbmcgZ2xvYmFsIHNpbmdsZXRvbiBkdWUgdG8gY2lyY3VsdWFyIGRlcGVuZGVuY3kgaXNzdWVzXG4gICAgY29uc3QgYXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSA9ICgwLCBnbG9iYWxzX2pzXzEuZ2V0R2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSkoKTtcbiAgICBpZiAoYXN5bmNMb2NhbFN0b3JhZ2VJbnN0YW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJ1blRyZWUgPSBhc3luY0xvY2FsU3RvcmFnZUluc3RhbmNlLmdldFN0b3JlKCk7XG4gICAgcmV0dXJuIHJ1blRyZWU/LltnbG9iYWxzX2pzXzEuX0NPTlRFWFRfVkFSSUFCTEVTX0tFWV0/LltuYW1lXTtcbn1cbmNvbnN0IExDX0NPTkZJR1VSRV9IT09LU19LRVkgPSBTeW1ib2woXCJsYzpjb25maWd1cmVfaG9va3NcIik7XG5jb25zdCBfZ2V0Q29uZmlndXJlSG9va3MgPSAoKSA9PiBnZXRDb250ZXh0VmFyaWFibGUoTENfQ09ORklHVVJFX0hPT0tTX0tFWSkgfHwgW107XG5leHBvcnRzLl9nZXRDb25maWd1cmVIb29rcyA9IF9nZXRDb25maWd1cmVIb29rcztcbi8qKlxuICogUmVnaXN0ZXIgYSBjYWxsYmFjayBjb25maWd1cmUgaG9vayB0byBhdXRvbWF0aWNhbGx5IGFkZCBjYWxsYmFjayBoYW5kbGVycyB0byBhbGwgcnVucy5cbiAqXG4gKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gdXNlIHRoaXM6XG4gKlxuICogMS4gVXNpbmcgYSBjb250ZXh0IHZhcmlhYmxlOlxuICogICAgLSBTZXQgYGNvbnRleHRWYXJgIHRvIHNwZWNpZnkgdGhlIHZhcmlhYmxlIG5hbWVcbiAqICAgIC0gVXNlIGBzZXRDb250ZXh0VmFyaWFibGUoKWAgdG8gc3RvcmUgeW91ciBoYW5kbGVyIGluc3RhbmNlXG4gKlxuICogMi4gVXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU6XG4gKiAgICAtIFNldCBib3RoIGBlbnZWYXJgIGFuZCBgaGFuZGxlckNsYXNzYFxuICogICAgLSBUaGUgaGFuZGxlciB3aWxsIGJlIGluc3RhbnRpYXRlZCB3aGVuIHRoZSBlbnYgdmFyIGlzIHNldCB0byBcInRydWVcIi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gTWV0aG9kIDE6IFVzaW5nIGNvbnRleHQgdmFyaWFibGVcbiAqIGltcG9ydCB7XG4gKiAgIHJlZ2lzdGVyQ29uZmlndXJlSG9vayxcbiAqICAgc2V0Q29udGV4dFZhcmlhYmxlXG4gKiB9IGZyb20gXCJAbGFuZ2NoYWluL2NvcmUvY29udGV4dFwiO1xuICpcbiAqIGNvbnN0IHRyYWNlciA9IG5ldyBNeUNhbGxiYWNrSGFuZGxlcigpO1xuICogcmVnaXN0ZXJDb25maWd1cmVIb29rKHtcbiAqICAgY29udGV4dFZhcjogXCJteV90cmFjZXJcIixcbiAqIH0pO1xuICogc2V0Q29udGV4dFZhcmlhYmxlKFwibXlfdHJhY2VyXCIsIHRyYWNlcik7XG4gKlxuICogLy8gLi4ucnVuIGNvZGUgaGVyZVxuICpcbiAqIC8vIE1ldGhvZCAyOiBVc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogcmVnaXN0ZXJDb25maWd1cmVIb29rKHtcbiAqICAgaGFuZGxlckNsYXNzOiBNeUNhbGxiYWNrSGFuZGxlcixcbiAqICAgZW52VmFyOiBcIk1ZX1RSQUNFUl9FTkFCTEVEXCIsXG4gKiB9KTtcbiAqIHByb2Nlc3MuZW52Lk1ZX1RSQUNFUl9FTkFCTEVEID0gXCJ0cnVlXCI7XG4gKlxuICogLy8gLi4ucnVuIGNvZGUgaGVyZVxuICogYGBgXG4gKlxuICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGhvb2tcbiAqIEBwYXJhbSBjb25maWcuY29udGV4dFZhciBOYW1lIG9mIHRoZSBjb250ZXh0IHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGhhbmRsZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSBjb25maWcuaW5oZXJpdGFibGUgV2hldGhlciBjaGlsZCBydW5zIHNob3VsZCBpbmhlcml0IHRoaXMgaGFuZGxlclxuICogQHBhcmFtIGNvbmZpZy5oYW5kbGVyQ2xhc3MgT3B0aW9uYWwgY2FsbGJhY2sgaGFuZGxlciBjbGFzcyAocmVxdWlyZWQgaWYgdXNpbmcgZW52VmFyKVxuICogQHBhcmFtIGNvbmZpZy5lbnZWYXIgT3B0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSB0byBjb250cm9sIGhhbmRsZXIgYWN0aXZhdGlvblxuICovXG5jb25zdCByZWdpc3RlckNvbmZpZ3VyZUhvb2sgPSAoY29uZmlnKSA9PiB7XG4gICAgaWYgKGNvbmZpZy5lbnZWYXIgJiYgIWNvbmZpZy5oYW5kbGVyQ2xhc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWYgZW52VmFyIGlzIHNldCwgaGFuZGxlckNsYXNzIG11c3QgYWxzbyBiZSBzZXQgdG8gYSBub24tTm9uZSB2YWx1ZS5cIik7XG4gICAgfVxuICAgIHNldENvbnRleHRWYXJpYWJsZShMQ19DT05GSUdVUkVfSE9PS1NfS0VZLCBbLi4uKDAsIGV4cG9ydHMuX2dldENvbmZpZ3VyZUhvb2tzKSgpLCBjb25maWddKTtcbn07XG5leHBvcnRzLnJlZ2lzdGVyQ29uZmlndXJlSG9vayA9IHJlZ2lzdGVyQ29uZmlndXJlSG9vaztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRyYWNlR3JvdXAgPSBleHBvcnRzLkNhbGxiYWNrTWFuYWdlciA9IGV4cG9ydHMuQ2FsbGJhY2tNYW5hZ2VyRm9yVG9vbFJ1biA9IGV4cG9ydHMuQ2FsbGJhY2tNYW5hZ2VyRm9yQ2hhaW5SdW4gPSBleHBvcnRzLkNhbGxiYWNrTWFuYWdlckZvckxMTVJ1biA9IGV4cG9ydHMuQ2FsbGJhY2tNYW5hZ2VyRm9yUmV0cmlldmVyUnVuID0gZXhwb3J0cy5CYXNlUnVuTWFuYWdlciA9IGV4cG9ydHMuQmFzZUNhbGxiYWNrTWFuYWdlciA9IHZvaWQgMDtcbmV4cG9ydHMucGFyc2VDYWxsYmFja0NvbmZpZ0FyZyA9IHBhcnNlQ2FsbGJhY2tDb25maWdBcmc7XG5leHBvcnRzLmVuc3VyZUhhbmRsZXIgPSBlbnN1cmVIYW5kbGVyO1xuZXhwb3J0cy50cmFjZUFzR3JvdXAgPSB0cmFjZUFzR3JvdXA7XG5jb25zdCB1dWlkXzEgPSByZXF1aXJlKFwidXVpZFwiKTtcbmNvbnN0IGJhc2VfanNfMSA9IHJlcXVpcmUoXCIuL2Jhc2UuY2pzXCIpO1xuY29uc3QgY29uc29sZV9qc18xID0gcmVxdWlyZShcIi4uL3RyYWNlcnMvY29uc29sZS5janNcIik7XG5jb25zdCB1dGlsc19qc18xID0gcmVxdWlyZShcIi4uL21lc3NhZ2VzL3V0aWxzLmNqc1wiKTtcbmNvbnN0IGVudl9qc18xID0gcmVxdWlyZShcIi4uL3V0aWxzL2Vudi5janNcIik7XG5jb25zdCB0cmFjZXJfbGFuZ2NoYWluX2pzXzEgPSByZXF1aXJlKFwiLi4vdHJhY2Vycy90cmFjZXJfbGFuZ2NoYWluLmNqc1wiKTtcbmNvbnN0IHByb21pc2VzX2pzXzEgPSByZXF1aXJlKFwiLi9wcm9taXNlcy5janNcIik7XG5jb25zdCBjYWxsYmFja3NfanNfMSA9IHJlcXVpcmUoXCIuLi91dGlscy9jYWxsYmFja3MuY2pzXCIpO1xuY29uc3QgYmFzZV9qc18yID0gcmVxdWlyZShcIi4uL3RyYWNlcnMvYmFzZS5janNcIik7XG5jb25zdCBjb250ZXh0X2pzXzEgPSByZXF1aXJlKFwiLi4vc2luZ2xldG9ucy9hc3luY19sb2NhbF9zdG9yYWdlL2NvbnRleHQuY2pzXCIpO1xuZnVuY3Rpb24gcGFyc2VDYWxsYmFja0NvbmZpZ0FyZyhhcmcpIHtcbiAgICBpZiAoIWFyZykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSB8fCBcIm5hbWVcIiBpbiBhcmcpIHtcbiAgICAgICAgcmV0dXJuIHsgY2FsbGJhY2tzOiBhcmcgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgfVxufVxuLyoqXG4gKiBNYW5hZ2UgY2FsbGJhY2tzIGZyb20gZGlmZmVyZW50IGNvbXBvbmVudHMgb2YgTGFuZ0NoYWluLlxuICovXG5jbGFzcyBCYXNlQ2FsbGJhY2tNYW5hZ2VyIHtcbiAgICBzZXRIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0SGFuZGxlcnMoW2hhbmRsZXJdKTtcbiAgICB9XG59XG5leHBvcnRzLkJhc2VDYWxsYmFja01hbmFnZXIgPSBCYXNlQ2FsbGJhY2tNYW5hZ2VyO1xuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBydW4gbWFuYWdlciBpbiBMYW5nQ2hhaW4uXG4gKi9cbmNsYXNzIEJhc2VSdW5NYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcihydW5JZCwgaGFuZGxlcnMsIGluaGVyaXRhYmxlSGFuZGxlcnMsIHRhZ3MsIGluaGVyaXRhYmxlVGFncywgbWV0YWRhdGEsIGluaGVyaXRhYmxlTWV0YWRhdGEsIF9wYXJlbnRSdW5JZCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJydW5JZFwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogcnVuSWRcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhhbmRsZXJzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBoYW5kbGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5oZXJpdGFibGVIYW5kbGVyc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogaW5oZXJpdGFibGVIYW5kbGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidGFnc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGFnc1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5oZXJpdGFibGVUYWdzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBpbmhlcml0YWJsZVRhZ3NcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBtZXRhZGF0YVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5oZXJpdGFibGVNZXRhZGF0YVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogaW5oZXJpdGFibGVNZXRhZGF0YVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiX3BhcmVudFJ1bklkXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBfcGFyZW50UnVuSWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBwYXJlbnRSdW5JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFJ1bklkO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVUZXh0KHRleHQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+ICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZVRleHQ/Lih0ZXh0LCB0aGlzLnJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dGdW5jdGlvbiA9IGhhbmRsZXIucmFpc2VFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24oYEVycm9yIGluIGhhbmRsZXIgJHtoYW5kbGVyLmNvbnN0cnVjdG9yLm5hbWV9LCBoYW5kbGVUZXh0OiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5yYWlzZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGhhbmRsZXIuYXdhaXRIYW5kbGVycykpKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGRhdGEsIF9ydW5JZCwgX3RhZ3MsIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgX21ldGFkYXRhKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiAoMCwgcHJvbWlzZXNfanNfMS5jb25zdW1lQ2FsbGJhY2spKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVDdXN0b21FdmVudD8uKGV2ZW50TmFtZSwgZGF0YSwgdGhpcy5ydW5JZCwgdGhpcy50YWdzLCB0aGlzLm1ldGFkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dGdW5jdGlvbiA9IGhhbmRsZXIucmFpc2VFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24oYEVycm9yIGluIGhhbmRsZXIgJHtoYW5kbGVyLmNvbnN0cnVjdG9yLm5hbWV9LCBoYW5kbGVDdXN0b21FdmVudDogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpKSk7XG4gICAgfVxufVxuZXhwb3J0cy5CYXNlUnVuTWFuYWdlciA9IEJhc2VSdW5NYW5hZ2VyO1xuLyoqXG4gKiBNYW5hZ2VzIGNhbGxiYWNrcyBmb3IgcmV0cmlldmVyIHJ1bnMuXG4gKi9cbmNsYXNzIENhbGxiYWNrTWFuYWdlckZvclJldHJpZXZlclJ1biBleHRlbmRzIEJhc2VSdW5NYW5hZ2VyIHtcbiAgICBnZXRDaGlsZCh0YWcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IENhbGxiYWNrTWFuYWdlcih0aGlzLnJ1bklkKTtcbiAgICAgICAgbWFuYWdlci5zZXRIYW5kbGVycyh0aGlzLmluaGVyaXRhYmxlSGFuZGxlcnMpO1xuICAgICAgICBtYW5hZ2VyLmFkZFRhZ3ModGhpcy5pbmhlcml0YWJsZVRhZ3MpO1xuICAgICAgICBtYW5hZ2VyLmFkZE1ldGFkYXRhKHRoaXMuaW5oZXJpdGFibGVNZXRhZGF0YSk7XG4gICAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgICAgIG1hbmFnZXIuYWRkVGFncyhbdGFnXSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVSZXRyaWV2ZXJFbmQoZG9jdW1lbnRzKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiAoMCwgcHJvbWlzZXNfanNfMS5jb25zdW1lQ2FsbGJhY2spKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlci5pZ25vcmVSZXRyaWV2ZXIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZVJldHJpZXZlckVuZD8uKGRvY3VtZW50cywgdGhpcy5ydW5JZCwgdGhpcy5fcGFyZW50UnVuSWQsIHRoaXMudGFncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9nRnVuY3Rpb24gPSBoYW5kbGVyLnJhaXNlRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Z1bmN0aW9uKGBFcnJvciBpbiBoYW5kbGVyICR7aGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lfSwgaGFuZGxlUmV0cmlldmVyYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKSkpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVSZXRyaWV2ZXJFcnJvcihlcnIpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+ICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyLmlnbm9yZVJldHJpZXZlcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIuaGFuZGxlUmV0cmlldmVyRXJyb3I/LihlcnIsIHRoaXMucnVuSWQsIHRoaXMuX3BhcmVudFJ1bklkLCB0aGlzLnRhZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9nRnVuY3Rpb24gPSBoYW5kbGVyLnJhaXNlRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Z1bmN0aW9uKGBFcnJvciBpbiBoYW5kbGVyICR7aGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lfSwgaGFuZGxlUmV0cmlldmVyRXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2FsbGJhY2tNYW5hZ2VyRm9yUmV0cmlldmVyUnVuID0gQ2FsbGJhY2tNYW5hZ2VyRm9yUmV0cmlldmVyUnVuO1xuY2xhc3MgQ2FsbGJhY2tNYW5hZ2VyRm9yTExNUnVuIGV4dGVuZHMgQmFzZVJ1bk1hbmFnZXIge1xuICAgIGFzeW5jIGhhbmRsZUxMTU5ld1Rva2VuKHRva2VuLCBpZHgsIF9ydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncywgZmllbGRzKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiAoMCwgcHJvbWlzZXNfanNfMS5jb25zdW1lQ2FsbGJhY2spKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlci5pZ25vcmVMTE0pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZUxMTU5ld1Rva2VuPy4odG9rZW4sIGlkeCA/PyB7IHByb21wdDogMCwgY29tcGxldGlvbjogMCB9LCB0aGlzLnJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzLCBmaWVsZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZUxMTU5ld1Rva2VuOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpKSk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUxMTUVycm9yKGVyciwgX3J1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBleHRyYVBhcmFtcykge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4gKDAsIHByb21pc2VzX2pzXzEuY29uc3VtZUNhbGxiYWNrKShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIuaWdub3JlTExNKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVMTE1FcnJvcj8uKGVyciwgdGhpcy5ydW5JZCwgdGhpcy5fcGFyZW50UnVuSWQsIHRoaXMudGFncywgZXh0cmFQYXJhbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZUxMTUVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpKSk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUxMTUVuZChvdXRwdXQsIF9ydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncywgZXh0cmFQYXJhbXMpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+ICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyLmlnbm9yZUxMTSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIuaGFuZGxlTExNRW5kPy4ob3V0cHV0LCB0aGlzLnJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzLCBleHRyYVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9nRnVuY3Rpb24gPSBoYW5kbGVyLnJhaXNlRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Z1bmN0aW9uKGBFcnJvciBpbiBoYW5kbGVyICR7aGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lfSwgaGFuZGxlTExNRW5kOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpKSk7XG4gICAgfVxufVxuZXhwb3J0cy5DYWxsYmFja01hbmFnZXJGb3JMTE1SdW4gPSBDYWxsYmFja01hbmFnZXJGb3JMTE1SdW47XG5jbGFzcyBDYWxsYmFja01hbmFnZXJGb3JDaGFpblJ1biBleHRlbmRzIEJhc2VSdW5NYW5hZ2VyIHtcbiAgICBnZXRDaGlsZCh0YWcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IENhbGxiYWNrTWFuYWdlcih0aGlzLnJ1bklkKTtcbiAgICAgICAgbWFuYWdlci5zZXRIYW5kbGVycyh0aGlzLmluaGVyaXRhYmxlSGFuZGxlcnMpO1xuICAgICAgICBtYW5hZ2VyLmFkZFRhZ3ModGhpcy5pbmhlcml0YWJsZVRhZ3MpO1xuICAgICAgICBtYW5hZ2VyLmFkZE1ldGFkYXRhKHRoaXMuaW5oZXJpdGFibGVNZXRhZGF0YSk7XG4gICAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgICAgIG1hbmFnZXIuYWRkVGFncyhbdGFnXSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYW5hZ2VyO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVDaGFpbkVycm9yKGVyciwgX3J1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBrd2FyZ3MpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+ICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyLmlnbm9yZUNoYWluKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVDaGFpbkVycm9yPy4oZXJyLCB0aGlzLnJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzLCBrd2FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZUNoYWluRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5yYWlzZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGhhbmRsZXIuYXdhaXRIYW5kbGVycykpKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlQ2hhaW5FbmQob3V0cHV0LCBfcnVuSWQsIF9wYXJlbnRSdW5JZCwgX3RhZ3MsIGt3YXJncykge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4gKDAsIHByb21pc2VzX2pzXzEuY29uc3VtZUNhbGxiYWNrKShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIuaWdub3JlQ2hhaW4pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZUNoYWluRW5kPy4ob3V0cHV0LCB0aGlzLnJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzLCBrd2FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZUNoYWluRW5kOiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpKSk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUFnZW50QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4gKDAsIHByb21pc2VzX2pzXzEuY29uc3VtZUNhbGxiYWNrKShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIuaWdub3JlQWdlbnQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZUFnZW50QWN0aW9uPy4oYWN0aW9uLCB0aGlzLnJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dGdW5jdGlvbiA9IGhhbmRsZXIucmFpc2VFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnNvbGUud2FybjtcbiAgICAgICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24oYEVycm9yIGluIGhhbmRsZXIgJHtoYW5kbGVyLmNvbnN0cnVjdG9yLm5hbWV9LCBoYW5kbGVBZ2VudEFjdGlvbjogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKSkpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVBZ2VudEVuZChhY3Rpb24pIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+ICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyLmlnbm9yZUFnZW50KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVBZ2VudEVuZD8uKGFjdGlvbiwgdGhpcy5ydW5JZCwgdGhpcy5fcGFyZW50UnVuSWQsIHRoaXMudGFncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9nRnVuY3Rpb24gPSBoYW5kbGVyLnJhaXNlRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Z1bmN0aW9uKGBFcnJvciBpbiBoYW5kbGVyICR7aGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lfSwgaGFuZGxlQWdlbnRFbmQ6ICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5yYWlzZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGhhbmRsZXIuYXdhaXRIYW5kbGVycykpKTtcbiAgICB9XG59XG5leHBvcnRzLkNhbGxiYWNrTWFuYWdlckZvckNoYWluUnVuID0gQ2FsbGJhY2tNYW5hZ2VyRm9yQ2hhaW5SdW47XG5jbGFzcyBDYWxsYmFja01hbmFnZXJGb3JUb29sUnVuIGV4dGVuZHMgQmFzZVJ1bk1hbmFnZXIge1xuICAgIGdldENoaWxkKHRhZykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ2FsbGJhY2tNYW5hZ2VyKHRoaXMucnVuSWQpO1xuICAgICAgICBtYW5hZ2VyLnNldEhhbmRsZXJzKHRoaXMuaW5oZXJpdGFibGVIYW5kbGVycyk7XG4gICAgICAgIG1hbmFnZXIuYWRkVGFncyh0aGlzLmluaGVyaXRhYmxlVGFncyk7XG4gICAgICAgIG1hbmFnZXIuYWRkTWV0YWRhdGEodGhpcy5pbmhlcml0YWJsZU1ldGFkYXRhKTtcbiAgICAgICAgaWYgKHRhZykge1xuICAgICAgICAgICAgbWFuYWdlci5hZGRUYWdzKFt0YWddLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVRvb2xFcnJvcihlcnIpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+ICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyLmlnbm9yZUFnZW50KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVUb29sRXJyb3I/LihlcnIsIHRoaXMucnVuSWQsIHRoaXMuX3BhcmVudFJ1bklkLCB0aGlzLnRhZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZVRvb2xFcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGFzeW5jIGhhbmRsZVRvb2xFbmQob3V0cHV0KSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiAoMCwgcHJvbWlzZXNfanNfMS5jb25zdW1lQ2FsbGJhY2spKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlci5pZ25vcmVBZ2VudCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIuaGFuZGxlVG9vbEVuZD8uKG91dHB1dCwgdGhpcy5ydW5JZCwgdGhpcy5fcGFyZW50UnVuSWQsIHRoaXMudGFncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9nRnVuY3Rpb24gPSBoYW5kbGVyLnJhaXNlRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Z1bmN0aW9uKGBFcnJvciBpbiBoYW5kbGVyICR7aGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lfSwgaGFuZGxlVG9vbEVuZDogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKSkpO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2FsbGJhY2tNYW5hZ2VyRm9yVG9vbFJ1biA9IENhbGxiYWNrTWFuYWdlckZvclRvb2xSdW47XG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBwcm9tcHQgPSBQcm9tcHRUZW1wbGF0ZS5mcm9tVGVtcGxhdGUoXCJXaGF0IGlzIHRoZSBhbnN3ZXIgdG8ge3F1ZXN0aW9ufT9cIik7XG4gKlxuICogLy8gRXhhbXBsZSBvZiB1c2luZyBMTE1DaGFpbiB3aXRoIE9wZW5BSSBhbmQgYSBzaW1wbGUgcHJvbXB0XG4gKiBjb25zdCBjaGFpbiA9IG5ldyBMTE1DaGFpbih7XG4gKiAgIGxsbTogbmV3IENoYXRPcGVuQUkoeyBtb2RlbDogXCJncHQtNG8tbWluaVwiLCB0ZW1wZXJhdHVyZTogMC45IH0pLFxuICogICBwcm9tcHQsXG4gKiB9KTtcbiAqXG4gKiAvLyBSdW5uaW5nIHRoZSBjaGFpbiB3aXRoIGEgc2luZ2xlIHF1ZXN0aW9uXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGFpbi5jYWxsKHtcbiAqICAgcXVlc3Rpb246IFwiV2hhdCBpcyB0aGUgYWlyc3BlZWQgdmVsb2NpdHkgb2YgYW4gdW5sYWRlbiBzd2FsbG93P1wiLFxuICogfSk7XG4gKiBjb25zb2xlLmxvZyhcIlRoZSBhbnN3ZXIgaXM6XCIsIHJlc3VsdCk7XG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2FsbGJhY2tNYW5hZ2VyIGV4dGVuZHMgQmFzZUNhbGxiYWNrTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IocGFyZW50UnVuSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaGFuZGxlcnNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJpbmhlcml0YWJsZUhhbmRsZXJzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidGFnc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImluaGVyaXRhYmxlVGFnc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFkYXRhXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5oZXJpdGFibGVNZXRhZGF0YVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZToge31cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFwiY2FsbGJhY2tfbWFuYWdlclwiXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfcGFyZW50UnVuSWRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IG9wdGlvbnM/LmhhbmRsZXJzID8/IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIHRoaXMuaW5oZXJpdGFibGVIYW5kbGVycyA9XG4gICAgICAgICAgICBvcHRpb25zPy5pbmhlcml0YWJsZUhhbmRsZXJzID8/IHRoaXMuaW5oZXJpdGFibGVIYW5kbGVycztcbiAgICAgICAgdGhpcy50YWdzID0gb3B0aW9ucz8udGFncyA/PyB0aGlzLnRhZ3M7XG4gICAgICAgIHRoaXMuaW5oZXJpdGFibGVUYWdzID0gb3B0aW9ucz8uaW5oZXJpdGFibGVUYWdzID8/IHRoaXMuaW5oZXJpdGFibGVUYWdzO1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucz8ubWV0YWRhdGEgPz8gdGhpcy5tZXRhZGF0YTtcbiAgICAgICAgdGhpcy5pbmhlcml0YWJsZU1ldGFkYXRhID1cbiAgICAgICAgICAgIG9wdGlvbnM/LmluaGVyaXRhYmxlTWV0YWRhdGEgPz8gdGhpcy5pbmhlcml0YWJsZU1ldGFkYXRhO1xuICAgICAgICB0aGlzLl9wYXJlbnRSdW5JZCA9IHBhcmVudFJ1bklkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgcnVuIElELCBpZiBhbnkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgcGFyZW50IHJ1biBJRC5cbiAgICAgKi9cbiAgICBnZXRQYXJlbnRSdW5JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFJ1bklkO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVMTE1TdGFydChsbG0sIHByb21wdHMsIHJ1bklkID0gdW5kZWZpbmVkLCBfcGFyZW50UnVuSWQgPSB1bmRlZmluZWQsIGV4dHJhUGFyYW1zID0gdW5kZWZpbmVkLCBfdGFncyA9IHVuZGVmaW5lZCwgX21ldGFkYXRhID0gdW5kZWZpbmVkLCBydW5OYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcHRzLm1hcChhc3luYyAocHJvbXB0LCBpZHgpID0+IHtcbiAgICAgICAgICAgIC8vIENhbid0IGhhdmUgZHVwbGljYXRlIHJ1bnMgd2l0aCB0aGUgc2FtZSBydW4gSUQgKGlmIHByb3ZpZGVkKVxuICAgICAgICAgICAgY29uc3QgcnVuSWRfID0gaWR4ID09PSAwICYmIHJ1bklkID8gcnVuSWQgOiAoMCwgdXVpZF8xLnY0KSgpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5oYW5kbGVycy5tYXAoKGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5pZ25vcmVMTE0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKDAsIGJhc2VfanNfMi5pc0Jhc2VUcmFjZXIpKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgYWRkIHJ1biB0byB0aGUgcnVuIG1hcC5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gdGhpcyBzeW5jaHJvbm91c2x5IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGNhbGxiYWNrcyBhcmUgYmFja2dyb3VuZGVkLlxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLl9jcmVhdGVSdW5Gb3JMTE1TdGFydChsbG0sIFtwcm9tcHRdLCBydW5JZF8sIHRoaXMuX3BhcmVudFJ1bklkLCBleHRyYVBhcmFtcywgdGhpcy50YWdzLCB0aGlzLm1ldGFkYXRhLCBydW5OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVMTE1TdGFydD8uKGxsbSwgW3Byb21wdF0sIHJ1bklkXywgdGhpcy5fcGFyZW50UnVuSWQsIGV4dHJhUGFyYW1zLCB0aGlzLnRhZ3MsIHRoaXMubWV0YWRhdGEsIHJ1bk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZUxMTVN0YXJ0OiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja01hbmFnZXJGb3JMTE1SdW4ocnVuSWRfLCB0aGlzLmhhbmRsZXJzLCB0aGlzLmluaGVyaXRhYmxlSGFuZGxlcnMsIHRoaXMudGFncywgdGhpcy5pbmhlcml0YWJsZVRhZ3MsIHRoaXMubWV0YWRhdGEsIHRoaXMuaW5oZXJpdGFibGVNZXRhZGF0YSwgdGhpcy5fcGFyZW50UnVuSWQpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUNoYXRNb2RlbFN0YXJ0KGxsbSwgbWVzc2FnZXMsIHJ1bklkID0gdW5kZWZpbmVkLCBfcGFyZW50UnVuSWQgPSB1bmRlZmluZWQsIGV4dHJhUGFyYW1zID0gdW5kZWZpbmVkLCBfdGFncyA9IHVuZGVmaW5lZCwgX21ldGFkYXRhID0gdW5kZWZpbmVkLCBydW5OYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtZXNzYWdlcy5tYXAoYXN5bmMgKG1lc3NhZ2VHcm91cCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAvLyBDYW4ndCBoYXZlIGR1cGxpY2F0ZSBydW5zIHdpdGggdGhlIHNhbWUgcnVuIElEIChpZiBwcm92aWRlZClcbiAgICAgICAgICAgIGNvbnN0IHJ1bklkXyA9IGlkeCA9PT0gMCAmJiBydW5JZCA/IHJ1bklkIDogKDAsIHV1aWRfMS52NCkoKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuaWdub3JlTExNKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBiYXNlX2pzXzIuaXNCYXNlVHJhY2VyKShoYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCBydW4gdG8gdGhlIHJ1biBtYXAuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvIHRoaXMgc3luY2hyb25vdXNseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBjYWxsYmFja3MgYXJlIGJhY2tncm91bmRlZC5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5fY3JlYXRlUnVuRm9yQ2hhdE1vZGVsU3RhcnQobGxtLCBbbWVzc2FnZUdyb3VwXSwgcnVuSWRfLCB0aGlzLl9wYXJlbnRSdW5JZCwgZXh0cmFQYXJhbXMsIHRoaXMudGFncywgdGhpcy5tZXRhZGF0YSwgcnVuTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgcHJvbWlzZXNfanNfMS5jb25zdW1lQ2FsbGJhY2spKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLmhhbmRsZUNoYXRNb2RlbFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVDaGF0TW9kZWxTdGFydD8uKGxsbSwgW21lc3NhZ2VHcm91cF0sIHJ1bklkXywgdGhpcy5fcGFyZW50UnVuSWQsIGV4dHJhUGFyYW1zLCB0aGlzLnRhZ3MsIHRoaXMubWV0YWRhdGEsIHJ1bk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGFuZGxlci5oYW5kbGVMTE1TdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VTdHJpbmcgPSAoMCwgdXRpbHNfanNfMS5nZXRCdWZmZXJTdHJpbmcpKG1lc3NhZ2VHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVMTE1TdGFydD8uKGxsbSwgW21lc3NhZ2VTdHJpbmddLCBydW5JZF8sIHRoaXMuX3BhcmVudFJ1bklkLCBleHRyYVBhcmFtcywgdGhpcy50YWdzLCB0aGlzLm1ldGFkYXRhLCBydW5OYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dGdW5jdGlvbiA9IGhhbmRsZXIucmFpc2VFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24oYEVycm9yIGluIGhhbmRsZXIgJHtoYW5kbGVyLmNvbnN0cnVjdG9yLm5hbWV9LCBoYW5kbGVMTE1TdGFydDogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5yYWlzZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGJhY2tNYW5hZ2VyRm9yTExNUnVuKHJ1bklkXywgdGhpcy5oYW5kbGVycywgdGhpcy5pbmhlcml0YWJsZUhhbmRsZXJzLCB0aGlzLnRhZ3MsIHRoaXMuaW5oZXJpdGFibGVUYWdzLCB0aGlzLm1ldGFkYXRhLCB0aGlzLmluaGVyaXRhYmxlTWV0YWRhdGEsIHRoaXMuX3BhcmVudFJ1bklkKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVDaGFpblN0YXJ0KGNoYWluLCBpbnB1dHMsIHJ1bklkID0gKDAsIHV1aWRfMS52NCkoKSwgcnVuVHlwZSA9IHVuZGVmaW5lZCwgX3RhZ3MgPSB1bmRlZmluZWQsIF9tZXRhZGF0YSA9IHVuZGVmaW5lZCwgcnVuTmFtZSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGhhbmRsZXIuaWdub3JlQ2hhaW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIGJhc2VfanNfMi5pc0Jhc2VUcmFjZXIpKGhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCBhZGQgcnVuIHRvIHRoZSBydW4gbWFwLlxuICAgICAgICAgICAgICAgIC8vIFdlIGRvIHRoaXMgc3luY2hyb25vdXNseSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNhbGxiYWNrcyBhcmUgYmFja2dyb3VuZGVkLlxuICAgICAgICAgICAgICAgIGhhbmRsZXIuX2NyZWF0ZVJ1bkZvckNoYWluU3RhcnQoY2hhaW4sIGlucHV0cywgcnVuSWQsIHRoaXMuX3BhcmVudFJ1bklkLCB0aGlzLnRhZ3MsIHRoaXMubWV0YWRhdGEsIHJ1blR5cGUsIHJ1bk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICgwLCBwcm9taXNlc19qc18xLmNvbnN1bWVDYWxsYmFjaykoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIuaGFuZGxlQ2hhaW5TdGFydD8uKGNoYWluLCBpbnB1dHMsIHJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzLCB0aGlzLm1ldGFkYXRhLCBydW5UeXBlLCBydW5OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dGdW5jdGlvbiA9IGhhbmRsZXIucmFpc2VFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnNvbGUud2FybjtcbiAgICAgICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24oYEVycm9yIGluIGhhbmRsZXIgJHtoYW5kbGVyLmNvbnN0cnVjdG9yLm5hbWV9LCBoYW5kbGVDaGFpblN0YXJ0OiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgaGFuZGxlci5hd2FpdEhhbmRsZXJzKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gbmV3IENhbGxiYWNrTWFuYWdlckZvckNoYWluUnVuKHJ1bklkLCB0aGlzLmhhbmRsZXJzLCB0aGlzLmluaGVyaXRhYmxlSGFuZGxlcnMsIHRoaXMudGFncywgdGhpcy5pbmhlcml0YWJsZVRhZ3MsIHRoaXMubWV0YWRhdGEsIHRoaXMuaW5oZXJpdGFibGVNZXRhZGF0YSwgdGhpcy5fcGFyZW50UnVuSWQpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVUb29sU3RhcnQodG9vbCwgaW5wdXQsIHJ1bklkID0gKDAsIHV1aWRfMS52NCkoKSwgX3BhcmVudFJ1bklkID0gdW5kZWZpbmVkLCBfdGFncyA9IHVuZGVmaW5lZCwgX21ldGFkYXRhID0gdW5kZWZpbmVkLCBydW5OYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlci5pZ25vcmVBZ2VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgYmFzZV9qc18yLmlzQmFzZVRyYWNlcikoaGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIGFkZCBydW4gdG8gdGhlIHJ1biBtYXAuXG4gICAgICAgICAgICAgICAgLy8gV2UgZG8gdGhpcyBzeW5jaHJvbm91c2x5IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gY2FsbGJhY2tzIGFyZSBiYWNrZ3JvdW5kZWQuXG4gICAgICAgICAgICAgICAgaGFuZGxlci5fY3JlYXRlUnVuRm9yVG9vbFN0YXJ0KHRvb2wsIGlucHV0LCBydW5JZCwgdGhpcy5fcGFyZW50UnVuSWQsIHRoaXMudGFncywgdGhpcy5tZXRhZGF0YSwgcnVuTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIHByb21pc2VzX2pzXzEuY29uc3VtZUNhbGxiYWNrKShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVUb29sU3RhcnQ/Lih0b29sLCBpbnB1dCwgcnVuSWQsIHRoaXMuX3BhcmVudFJ1bklkLCB0aGlzLnRhZ3MsIHRoaXMubWV0YWRhdGEsIHJ1bk5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZVRvb2xTdGFydDogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGhhbmRsZXIuYXdhaXRIYW5kbGVycyk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja01hbmFnZXJGb3JUb29sUnVuKHJ1bklkLCB0aGlzLmhhbmRsZXJzLCB0aGlzLmluaGVyaXRhYmxlSGFuZGxlcnMsIHRoaXMudGFncywgdGhpcy5pbmhlcml0YWJsZVRhZ3MsIHRoaXMubWV0YWRhdGEsIHRoaXMuaW5oZXJpdGFibGVNZXRhZGF0YSwgdGhpcy5fcGFyZW50UnVuSWQpO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVSZXRyaWV2ZXJTdGFydChyZXRyaWV2ZXIsIHF1ZXJ5LCBydW5JZCA9ICgwLCB1dWlkXzEudjQpKCksIF9wYXJlbnRSdW5JZCA9IHVuZGVmaW5lZCwgX3RhZ3MgPSB1bmRlZmluZWQsIF9tZXRhZGF0YSA9IHVuZGVmaW5lZCwgcnVuTmFtZSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGhhbmRsZXIuaWdub3JlUmV0cmlldmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBiYXNlX2pzXzIuaXNCYXNlVHJhY2VyKShoYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgYWRkIHJ1biB0byB0aGUgcnVuIG1hcC5cbiAgICAgICAgICAgICAgICAvLyBXZSBkbyB0aGlzIHN5bmNocm9ub3VzbHkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICAgICAgICAgICAgLy8gd2hlbiBjYWxsYmFja3MgYXJlIGJhY2tncm91bmRlZC5cbiAgICAgICAgICAgICAgICBoYW5kbGVyLl9jcmVhdGVSdW5Gb3JSZXRyaWV2ZXJTdGFydChyZXRyaWV2ZXIsIHF1ZXJ5LCBydW5JZCwgdGhpcy5fcGFyZW50UnVuSWQsIHRoaXMudGFncywgdGhpcy5tZXRhZGF0YSwgcnVuTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKDAsIHByb21pc2VzX2pzXzEuY29uc3VtZUNhbGxiYWNrKShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlci5oYW5kbGVSZXRyaWV2ZXJTdGFydD8uKHJldHJpZXZlciwgcXVlcnksIHJ1bklkLCB0aGlzLl9wYXJlbnRSdW5JZCwgdGhpcy50YWdzLCB0aGlzLm1ldGFkYXRhLCBydW5OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2dGdW5jdGlvbiA9IGhhbmRsZXIucmFpc2VFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnNvbGUud2FybjtcbiAgICAgICAgICAgICAgICAgICAgbG9nRnVuY3Rpb24oYEVycm9yIGluIGhhbmRsZXIgJHtoYW5kbGVyLmNvbnN0cnVjdG9yLm5hbWV9LCBoYW5kbGVSZXRyaWV2ZXJTdGFydDogJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJhaXNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGhhbmRsZXIuYXdhaXRIYW5kbGVycyk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYWxsYmFja01hbmFnZXJGb3JSZXRyaWV2ZXJSdW4ocnVuSWQsIHRoaXMuaGFuZGxlcnMsIHRoaXMuaW5oZXJpdGFibGVIYW5kbGVycywgdGhpcy50YWdzLCB0aGlzLmluaGVyaXRhYmxlVGFncywgdGhpcy5tZXRhZGF0YSwgdGhpcy5pbmhlcml0YWJsZU1ldGFkYXRhLCB0aGlzLl9wYXJlbnRSdW5JZCk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZUN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhLCBydW5JZCwgX3RhZ3MsIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgX21ldGFkYXRhKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaGFuZGxlcnMubWFwKChoYW5kbGVyKSA9PiAoMCwgcHJvbWlzZXNfanNfMS5jb25zdW1lQ2FsbGJhY2spKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlci5pZ25vcmVDdXN0b21FdmVudCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIuaGFuZGxlQ3VzdG9tRXZlbnQ/LihldmVudE5hbWUsIGRhdGEsIHJ1bklkLCB0aGlzLnRhZ3MsIHRoaXMubWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gaGFuZGxlci5yYWlzZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS53YXJuO1xuICAgICAgICAgICAgICAgICAgICBsb2dGdW5jdGlvbihgRXJyb3IgaW4gaGFuZGxlciAke2hhbmRsZXIuY29uc3RydWN0b3IubmFtZX0sIGhhbmRsZUN1c3RvbUV2ZW50OiAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmFpc2VFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBoYW5kbGVyLmF3YWl0SGFuZGxlcnMpKSk7XG4gICAgfVxuICAgIGFkZEhhbmRsZXIoaGFuZGxlciwgaW5oZXJpdCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICBpZiAoaW5oZXJpdCkge1xuICAgICAgICAgICAgdGhpcy5pbmhlcml0YWJsZUhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLmZpbHRlcigoX2hhbmRsZXIpID0+IF9oYW5kbGVyICE9PSBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5pbmhlcml0YWJsZUhhbmRsZXJzID0gdGhpcy5pbmhlcml0YWJsZUhhbmRsZXJzLmZpbHRlcigoX2hhbmRsZXIpID0+IF9oYW5kbGVyICE9PSBoYW5kbGVyKTtcbiAgICB9XG4gICAgc2V0SGFuZGxlcnMoaGFuZGxlcnMsIGluaGVyaXQgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5pbmhlcml0YWJsZUhhbmRsZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgICAgICAgdGhpcy5hZGRIYW5kbGVyKGhhbmRsZXIsIGluaGVyaXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFRhZ3ModGFncywgaW5oZXJpdCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUYWdzKHRhZ3MpOyAvLyBSZW1vdmUgZHVwbGljYXRlc1xuICAgICAgICB0aGlzLnRhZ3MucHVzaCguLi50YWdzKTtcbiAgICAgICAgaWYgKGluaGVyaXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5oZXJpdGFibGVUYWdzLnB1c2goLi4udGFncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlVGFncyh0YWdzKSB7XG4gICAgICAgIHRoaXMudGFncyA9IHRoaXMudGFncy5maWx0ZXIoKHRhZykgPT4gIXRhZ3MuaW5jbHVkZXModGFnKSk7XG4gICAgICAgIHRoaXMuaW5oZXJpdGFibGVUYWdzID0gdGhpcy5pbmhlcml0YWJsZVRhZ3MuZmlsdGVyKCh0YWcpID0+ICF0YWdzLmluY2x1ZGVzKHRhZykpO1xuICAgIH1cbiAgICBhZGRNZXRhZGF0YShtZXRhZGF0YSwgaW5oZXJpdCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IHsgLi4udGhpcy5tZXRhZGF0YSwgLi4ubWV0YWRhdGEgfTtcbiAgICAgICAgaWYgKGluaGVyaXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5oZXJpdGFibGVNZXRhZGF0YSA9IHsgLi4udGhpcy5pbmhlcml0YWJsZU1ldGFkYXRhLCAuLi5tZXRhZGF0YSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZU1ldGFkYXRhKG1ldGFkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGFkYXRhKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubWV0YWRhdGFba2V5XTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmluaGVyaXRhYmxlTWV0YWRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb3B5KGFkZGl0aW9uYWxIYW5kbGVycyA9IFtdLCBpbmhlcml0ID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IENhbGxiYWNrTWFuYWdlcih0aGlzLl9wYXJlbnRSdW5JZCk7XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmhlcml0YWJsZSA9IHRoaXMuaW5oZXJpdGFibGVIYW5kbGVycy5pbmNsdWRlcyhoYW5kbGVyKTtcbiAgICAgICAgICAgIG1hbmFnZXIuYWRkSGFuZGxlcihoYW5kbGVyLCBpbmhlcml0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGhpcy50YWdzKSB7XG4gICAgICAgICAgICBjb25zdCBpbmhlcml0YWJsZSA9IHRoaXMuaW5oZXJpdGFibGVUYWdzLmluY2x1ZGVzKHRhZyk7XG4gICAgICAgICAgICBtYW5hZ2VyLmFkZFRhZ3MoW3RhZ10sIGluaGVyaXRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGFkYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgaW5oZXJpdGFibGUgPSBPYmplY3Qua2V5cyh0aGlzLmluaGVyaXRhYmxlTWV0YWRhdGEpLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICBtYW5hZ2VyLmFkZE1ldGFkYXRhKHsgW2tleV06IHRoaXMubWV0YWRhdGFba2V5XSB9LCBpbmhlcml0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGFkZGl0aW9uYWxIYW5kbGVycykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBjb3BpZXMgb2YgY29uc29sZV9jYWxsYmFja19oYW5kbGVyXG4gICAgICAgICAgICBtYW5hZ2VyLmhhbmRsZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoaCkgPT4gaC5uYW1lID09PSBcImNvbnNvbGVfY2FsbGJhY2tfaGFuZGxlclwiKVxuICAgICAgICAgICAgICAgIC5zb21lKChoKSA9PiBoLm5hbWUgPT09IGhhbmRsZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hbmFnZXIuYWRkSGFuZGxlcihoYW5kbGVyLCBpbmhlcml0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFuYWdlcjtcbiAgICB9XG4gICAgc3RhdGljIGZyb21IYW5kbGVycyhoYW5kbGVycykge1xuICAgICAgICBjbGFzcyBIYW5kbGVyIGV4dGVuZHMgYmFzZV9qc18xLkJhc2VDYWxsYmFja0hhbmRsZXIge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICgwLCB1dWlkXzEudjQpKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGhhbmRsZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IHRoaXMoKTtcbiAgICAgICAgbWFuYWdlci5hZGRIYW5kbGVyKG5ldyBIYW5kbGVyKCkpO1xuICAgICAgICByZXR1cm4gbWFuYWdlcjtcbiAgICB9XG4gICAgc3RhdGljIGNvbmZpZ3VyZShpbmhlcml0YWJsZUhhbmRsZXJzLCBsb2NhbEhhbmRsZXJzLCBpbmhlcml0YWJsZVRhZ3MsIGxvY2FsVGFncywgaW5oZXJpdGFibGVNZXRhZGF0YSwgbG9jYWxNZXRhZGF0YSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJlU3luYyhpbmhlcml0YWJsZUhhbmRsZXJzLCBsb2NhbEhhbmRsZXJzLCBpbmhlcml0YWJsZVRhZ3MsIGxvY2FsVGFncywgaW5oZXJpdGFibGVNZXRhZGF0YSwgbG9jYWxNZXRhZGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIFRPRE86IERlcHJlY2F0ZSBhc3luYyBtZXRob2QgaW4gZmF2b3Igb2YgdGhpcyBvbmUuXG4gICAgc3RhdGljIF9jb25maWd1cmVTeW5jKGluaGVyaXRhYmxlSGFuZGxlcnMsIGxvY2FsSGFuZGxlcnMsIGluaGVyaXRhYmxlVGFncywgbG9jYWxUYWdzLCBpbmhlcml0YWJsZU1ldGFkYXRhLCBsb2NhbE1ldGFkYXRhLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCBjYWxsYmFja01hbmFnZXI7XG4gICAgICAgIGlmIChpbmhlcml0YWJsZUhhbmRsZXJzIHx8IGxvY2FsSGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGluaGVyaXRhYmxlSGFuZGxlcnMpIHx8ICFpbmhlcml0YWJsZUhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyID0gbmV3IENhbGxiYWNrTWFuYWdlcigpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrTWFuYWdlci5zZXRIYW5kbGVycyhpbmhlcml0YWJsZUhhbmRsZXJzPy5tYXAoZW5zdXJlSGFuZGxlcikgPz8gW10sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyID0gaW5oZXJpdGFibGVIYW5kbGVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrTWFuYWdlciA9IGNhbGxiYWNrTWFuYWdlci5jb3B5KEFycmF5LmlzQXJyYXkobG9jYWxIYW5kbGVycylcbiAgICAgICAgICAgICAgICA/IGxvY2FsSGFuZGxlcnMubWFwKGVuc3VyZUhhbmRsZXIpXG4gICAgICAgICAgICAgICAgOiBsb2NhbEhhbmRsZXJzPy5oYW5kbGVycywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcmJvc2VFbmFibGVkID0gKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR0NIQUlOX1ZFUkJPU0VcIikgPT09IFwidHJ1ZVwiIHx8XG4gICAgICAgICAgICBvcHRpb25zPy52ZXJib3NlO1xuICAgICAgICBjb25zdCB0cmFjaW5nVjJFbmFibGVkID0gdHJhY2VyX2xhbmdjaGFpbl9qc18xLkxhbmdDaGFpblRyYWNlci5nZXRUcmFjZWFibGVSdW5UcmVlKCk/LnRyYWNpbmdFbmFibGVkIHx8XG4gICAgICAgICAgICAoMCwgY2FsbGJhY2tzX2pzXzEuaXNUcmFjaW5nRW5hYmxlZCkoKTtcbiAgICAgICAgY29uc3QgdHJhY2luZ0VuYWJsZWQgPSB0cmFjaW5nVjJFbmFibGVkIHx8XG4gICAgICAgICAgICAoKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKFwiTEFOR0NIQUlOX1RSQUNJTkdcIikgPz8gZmFsc2UpO1xuICAgICAgICBpZiAodmVyYm9zZUVuYWJsZWQgfHwgdHJhY2luZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2tNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyID0gbmV3IENhbGxiYWNrTWFuYWdlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZlcmJvc2VFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrTWFuYWdlci5oYW5kbGVycy5zb21lKChoYW5kbGVyKSA9PiBoYW5kbGVyLm5hbWUgPT09IGNvbnNvbGVfanNfMS5Db25zb2xlQ2FsbGJhY2tIYW5kbGVyLnByb3RvdHlwZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnNvbGVIYW5kbGVyID0gbmV3IGNvbnNvbGVfanNfMS5Db25zb2xlQ2FsbGJhY2tIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyLmFkZEhhbmRsZXIoY29uc29sZUhhbmRsZXIsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYWNpbmdFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrTWFuYWdlci5oYW5kbGVycy5zb21lKChoYW5kbGVyKSA9PiBoYW5kbGVyLm5hbWUgPT09IFwibGFuZ2NoYWluX3RyYWNlclwiKSkge1xuICAgICAgICAgICAgICAgIGlmICh0cmFjaW5nVjJFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNlclYyID0gbmV3IHRyYWNlcl9sYW5nY2hhaW5fanNfMS5MYW5nQ2hhaW5UcmFjZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyLmFkZEhhbmRsZXIodHJhY2VyVjIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmFjaW5nVjJFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZG9mZiBiZXR3ZWVuIGxhbmdjaGFpbiBhbmQgbGFuZ3NtaXRoL3RyYWNlYWJsZVxuICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIHRoZSBwYXJlbnQgcnVuIElEXG4gICAgICAgICAgICAgICAgY29uc3QgaW1wbGljaXRSdW5UcmVlID0gdHJhY2VyX2xhbmdjaGFpbl9qc18xLkxhbmdDaGFpblRyYWNlci5nZXRUcmFjZWFibGVSdW5UcmVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGltcGxpY2l0UnVuVHJlZSAmJiBjYWxsYmFja01hbmFnZXIuX3BhcmVudFJ1bklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyLl9wYXJlbnRSdW5JZCA9IGltcGxpY2l0UnVuVHJlZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2VyVjIgPSBjYWxsYmFja01hbmFnZXIuaGFuZGxlcnMuZmluZCgoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSBcImxhbmdjaGFpbl90cmFjZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNlclYyPy51cGRhdGVGcm9tUnVuVHJlZShpbXBsaWNpdFJ1blRyZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHsgY29udGV4dFZhciwgaW5oZXJpdGFibGUgPSB0cnVlLCBoYW5kbGVyQ2xhc3MsIGVudlZhciwgfSBvZiAoMCwgY29udGV4dF9qc18xLl9nZXRDb25maWd1cmVIb29rcykoKSkge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlSWZOb3RJbkNvbnRleHQgPSBlbnZWYXIgJiYgKDAsIGVudl9qc18xLmdldEVudmlyb25tZW50VmFyaWFibGUpKGVudlZhcikgPT09IFwidHJ1ZVwiICYmIGhhbmRsZXJDbGFzcztcbiAgICAgICAgICAgIGxldCBoYW5kbGVyO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dFZhclZhbHVlID0gY29udGV4dFZhciAhPT0gdW5kZWZpbmVkID8gKDAsIGNvbnRleHRfanNfMS5nZXRDb250ZXh0VmFyaWFibGUpKGNvbnRleHRWYXIpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbnRleHRWYXJWYWx1ZSAmJiAoMCwgYmFzZV9qc18xLmlzQmFzZUNhbGxiYWNrSGFuZGxlcikoY29udGV4dFZhclZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250ZXh0VmFyVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjcmVhdGVJZk5vdEluQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IG5ldyBoYW5kbGVyQ2xhc3Moe30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbGJhY2tNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrTWFuYWdlciA9IG5ldyBDYWxsYmFja01hbmFnZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFja01hbmFnZXIuaGFuZGxlcnMuc29tZSgoaCkgPT4gaC5uYW1lID09PSBoYW5kbGVyLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrTWFuYWdlci5hZGRIYW5kbGVyKGhhbmRsZXIsIGluaGVyaXRhYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaGVyaXRhYmxlVGFncyB8fCBsb2NhbFRhZ3MpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFja01hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja01hbmFnZXIuYWRkVGFncyhpbmhlcml0YWJsZVRhZ3MgPz8gW10pO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrTWFuYWdlci5hZGRUYWdzKGxvY2FsVGFncyA/PyBbXSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmhlcml0YWJsZU1ldGFkYXRhIHx8IGxvY2FsTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFja01hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja01hbmFnZXIuYWRkTWV0YWRhdGEoaW5oZXJpdGFibGVNZXRhZGF0YSA/PyB7fSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tNYW5hZ2VyLmFkZE1ldGFkYXRhKGxvY2FsTWV0YWRhdGEgPz8ge30sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2tNYW5hZ2VyO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2FsbGJhY2tNYW5hZ2VyID0gQ2FsbGJhY2tNYW5hZ2VyO1xuZnVuY3Rpb24gZW5zdXJlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgaWYgKFwibmFtZVwiIGluIGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXI7XG4gICAgfVxuICAgIHJldHVybiBiYXNlX2pzXzEuQmFzZUNhbGxiYWNrSGFuZGxlci5mcm9tTWV0aG9kcyhoYW5kbGVyKTtcbn1cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIFtgdHJhY2VhYmxlYF0oaHR0cHM6Ly9kb2NzLnNtaXRoLmxhbmdjaGFpbi5jb20vb2JzZXJ2YWJpbGl0eS9ob3dfdG9fZ3VpZGVzL3RyYWNpbmcvYW5ub3RhdGVfY29kZSlcbiAqIGZyb20gXCJsYW5nc21pdGhcIiBpbnN0ZWFkLlxuICovXG5jbGFzcyBUcmFjZUdyb3VwIHtcbiAgICBjb25zdHJ1Y3Rvcihncm91cE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZ3JvdXBOYW1lXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBncm91cE5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9wdGlvbnNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJ1bk1hbmFnZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0VHJhY2VHcm91cENhbGxiYWNrTWFuYWdlcihncm91cF9uYW1lLCBpbnB1dHMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY2IgPSBuZXcgdHJhY2VyX2xhbmdjaGFpbl9qc18xLkxhbmdDaGFpblRyYWNlcihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY20gPSBhd2FpdCBDYWxsYmFja01hbmFnZXIuY29uZmlndXJlKFtjYl0pO1xuICAgICAgICBjb25zdCBydW5NYW5hZ2VyID0gYXdhaXQgY20/LmhhbmRsZUNoYWluU3RhcnQoe1xuICAgICAgICAgICAgbGM6IDEsXG4gICAgICAgICAgICB0eXBlOiBcIm5vdF9pbXBsZW1lbnRlZFwiLFxuICAgICAgICAgICAgaWQ6IFtcImxhbmdjaGFpblwiLCBcImNhbGxiYWNrc1wiLCBcImdyb3Vwc1wiLCBncm91cF9uYW1lXSxcbiAgICAgICAgfSwgaW5wdXRzID8/IHt9KTtcbiAgICAgICAgaWYgKCFydW5NYW5hZ2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHJ1biBncm91cCBjYWxsYmFjayBtYW5hZ2VyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVuTWFuYWdlcjtcbiAgICB9XG4gICAgYXN5bmMgc3RhcnQoaW5wdXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5ydW5NYW5hZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLnJ1bk1hbmFnZXIgPSBhd2FpdCB0aGlzLmdldFRyYWNlR3JvdXBDYWxsYmFja01hbmFnZXIodGhpcy5ncm91cE5hbWUsIGlucHV0cywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ydW5NYW5hZ2VyLmdldENoaWxkKCk7XG4gICAgfVxuICAgIGFzeW5jIGVycm9yKGVycikge1xuICAgICAgICBpZiAodGhpcy5ydW5NYW5hZ2VyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bk1hbmFnZXIuaGFuZGxlQ2hhaW5FcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5ydW5NYW5hZ2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGVuZChvdXRwdXQpIHtcbiAgICAgICAgaWYgKHRoaXMucnVuTWFuYWdlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5NYW5hZ2VyLmhhbmRsZUNoYWluRW5kKG91dHB1dCA/PyB7fSk7XG4gICAgICAgICAgICB0aGlzLnJ1bk1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlRyYWNlR3JvdXAgPSBUcmFjZUdyb3VwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIF9jb2VyY2VUb0RpY3QodmFsdWUsIGRlZmF1bHRLZXkpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogeyBbZGVmYXVsdEtleV06IHZhbHVlIH07XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24gdHJhY2VBc0dyb3VwKGdyb3VwT3B0aW9ucywgZW5jbG9zZWRDb2RlLCAuLi5hcmdzKSB7XG4gICAgY29uc3QgdHJhY2VHcm91cCA9IG5ldyBUcmFjZUdyb3VwKGdyb3VwT3B0aW9ucy5uYW1lLCBncm91cE9wdGlvbnMpO1xuICAgIGNvbnN0IGNhbGxiYWNrTWFuYWdlciA9IGF3YWl0IHRyYWNlR3JvdXAuc3RhcnQoeyAuLi5hcmdzIH0pO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVuY2xvc2VkQ29kZShjYWxsYmFja01hbmFnZXIsIC4uLmFyZ3MpO1xuICAgICAgICBhd2FpdCB0cmFjZUdyb3VwLmVuZChfY29lcmNlVG9EaWN0KHJlc3VsdCwgXCJvdXRwdXRcIikpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGF3YWl0IHRyYWNlR3JvdXAuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgU3BhbktpbmQsIFNwYW5TdGF0dXNDb2RlLCBjb250ZXh0IH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IEluc3RydW1lbnRhdGlvbkJhc2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24nO1xuaW1wb3J0IHsgU3BhbkF0dHJpYnV0ZXMsIENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQgfSBmcm9tICdAdHJhY2Vsb29wL2FpLXNlbWFudGljLWNvbnZlbnRpb25zJztcbmltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEJhc2VDYWxsYmFja0hhbmRsZXIgfSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvY2FsbGJhY2tzL2Jhc2UnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRyYWNlbG9vcFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jbGFzcyBUcmFjZWxvb3BDYWxsYmFja0hhbmRsZXIgZXh0ZW5kcyBCYXNlQ2FsbGJhY2tIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcih0cmFjZXIsIHRyYWNlQ29udGVudCA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJ0cmFjZWxvb3BfY2FsbGJhY2tfaGFuZGxlclwiO1xuICAgICAgICB0aGlzLnNwYW5zID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLnRyYWNlciA9IHRyYWNlcjtcbiAgICAgICAgdGhpcy50cmFjZUNvbnRlbnQgPSB0cmFjZUNvbnRlbnQ7XG4gICAgfVxuICAgIGhhbmRsZUNoYXRNb2RlbFN0YXJ0KGxsbSwgbWVzc2FnZXMsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF9leHRyYVBhcmFtcywgX3RhZ3MsIF9tZXRhZGF0YSwgX3J1bk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICgoX2EgPSBsbG0uaWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtsbG0uaWQubGVuZ3RoIC0gMV0pIHx8IFwidW5rbm93blwiO1xuICAgICAgICAgICAgY29uc3QgdmVuZG9yID0gdGhpcy5kZXRlY3RWZW5kb3IobGxtKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5CYXNlTmFtZSA9IHRoaXMuY29udmVydENsYXNzTmFtZVRvU3Bhbk5hbWUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBzaW5nbGUgTExNIHNwYW4gbGlrZSBQeXRob24gaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oc3BhbkJhc2VOYW1lLCB7XG4gICAgICAgICAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmbGF0TWVzc2FnZXMgPSBtZXNzYWdlcy5mbGF0KCk7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fU1lTVEVNXTogdmVuZG9yLFxuICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFXTogXCJjaGF0XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEFkZCBwcm9tcHRzIGlmIHRyYWNpbmcgY29udGVudFxuICAgICAgICAgICAgaWYgKHRoaXMudHJhY2VDb250ZW50ICYmIGZsYXRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmxhdE1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb2xlID0gdGhpcy5tYXBNZXNzYWdlVHlwZVRvUm9sZShtZXNzYWdlLl9nZXRUeXBlKCkpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2lkeH0ucm9sZWBdOiByb2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2lkeH0uY29udGVudGBdOiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtZXNzYWdlLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UuY29udGVudCksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zcGFucy5zZXQocnVuSWQsIHsgc3BhbiwgcnVuSWQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVMTE1TdGFydChsbG0sIHByb21wdHMsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF9leHRyYVBhcmFtcywgX3RhZ3MsIF9tZXRhZGF0YSwgX3J1bk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICgoX2EgPSBsbG0uaWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtsbG0uaWQubGVuZ3RoIC0gMV0pIHx8IFwidW5rbm93blwiO1xuICAgICAgICAgICAgY29uc3QgdmVuZG9yID0gdGhpcy5kZXRlY3RWZW5kb3IobGxtKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5CYXNlTmFtZSA9IHRoaXMuY29udmVydENsYXNzTmFtZVRvU3Bhbk5hbWUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBzaW5nbGUgTExNIHNwYW4gbGlrZSBoYW5kbGVDaGF0TW9kZWxTdGFydFxuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMudHJhY2VyLnN0YXJ0U3BhbihzcGFuQmFzZU5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9TWVNURU1dOiB2ZW5kb3IsXG4gICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RZUEVdOiBcImNvbXBsZXRpb25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhY2VDb250ZW50ICYmIHByb21wdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHByb21wdHMuZm9yRWFjaCgocHJvbXB0LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtpZHh9LnJvbGVgXTogXCJ1c2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aWR4fS5jb250ZW50YF06IHByb21wdCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNwYW5zLnNldChydW5JZCwgeyBzcGFuLCBydW5JZCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZUxMTUVuZChvdXRwdXQsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBfZXh0cmFQYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBzcGFuRGF0YSA9IHRoaXMuc3BhbnMuZ2V0KHJ1bklkKTtcbiAgICAgICAgICAgIGlmICghc3BhbkRhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBzcGFuIH0gPSBzcGFuRGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlQ29udGVudCAmJlxuICAgICAgICAgICAgICAgIG91dHB1dC5nZW5lcmF0aW9ucyAmJlxuICAgICAgICAgICAgICAgIG91dHB1dC5nZW5lcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0LmdlbmVyYXRpb25zLmZvckVhY2goKGdlbmVyYXRpb24sIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGlvbiAmJiBnZW5lcmF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpZHh9LnJvbGVgXTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2lkeH0uY29udGVudGBdOiBnZW5lcmF0aW9uWzBdLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXh0cmFjdCBtb2RlbCBuYW1lIGZyb20gcmVzcG9uc2Ugb25seSwgbGlrZSBQeXRob24gaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRoaXMuZXh0cmFjdE1vZGVsTmFtZUZyb21SZXNwb25zZShvdXRwdXQpO1xuICAgICAgICAgICAgLy8gU2V0IGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgbW9kZWwgYXR0cmlidXRlcyBsaWtlIFB5dGhvbiBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfTU9ERUxdOiBtb2RlbE5hbWUgfHwgXCJ1bmtub3duXCIsXG4gICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVNQT05TRV9NT0RFTF06IG1vZGVsTmFtZSB8fCBcInVua25vd25cIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQWRkIHVzYWdlIG1ldHJpY3MgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAoKF9hID0gb3V0cHV0LmxsbU91dHB1dCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnVzYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNhZ2UgPSBvdXRwdXQubGxtT3V0cHV0LnVzYWdlO1xuICAgICAgICAgICAgICAgIGlmICh1c2FnZS5pbnB1dF90b2tlbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOU106IHVzYWdlLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1c2FnZS5vdXRwdXRfdG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TXTogdXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsVG9rZW5zID0gKHVzYWdlLmlucHV0X3Rva2VucyB8fCAwKSArICh1c2FnZS5vdXRwdXRfdG9rZW5zIHx8IDApO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbFRva2VucyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfVE9UQUxfVE9LRU5TXTogdG90YWxUb2tlbnMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFsc28gY2hlY2sgZm9yIHRva2VuVXNhZ2UgZm9ybWF0IChmb3IgY29tcGF0aWJpbGl0eSlcbiAgICAgICAgICAgIGlmICgoX2IgPSBvdXRwdXQubGxtT3V0cHV0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudG9rZW5Vc2FnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzYWdlID0gb3V0cHV0LmxsbU91dHB1dC50b2tlblVzYWdlO1xuICAgICAgICAgICAgICAgIGlmICh1c2FnZS5wcm9tcHRUb2tlbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOU106IHVzYWdlLnByb21wdFRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TXTogdXNhZ2UuY29tcGxldGlvblRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1c2FnZS50b3RhbFRva2Vucykge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9UT1RBTF9UT0tFTlNdOiB1c2FnZS50b3RhbFRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB0aGlzLnNwYW5zLmRlbGV0ZShydW5JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVDaGF0TW9kZWxFbmQob3V0cHV0LCBydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncywgX2V4dHJhUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAvLyBTYW1lIGFzIGhhbmRsZUxMTUVuZCBmb3IgY2hhdCBtb2RlbHNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxMTUVuZChvdXRwdXQsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBfZXh0cmFQYXJhbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlTExNRXJyb3IoZXJyLCBydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncywgX2V4dHJhUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuRGF0YSA9IHRoaXMuc3BhbnMuZ2V0KHJ1bklkKTtcbiAgICAgICAgICAgIGlmICghc3BhbkRhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBzcGFuIH0gPSBzcGFuRGF0YTtcbiAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB0aGlzLnNwYW5zLmRlbGV0ZShydW5JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVDaGFpblN0YXJ0KGNoYWluLCBpbnB1dHMsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBtZXRhZGF0YSwgcnVuVHlwZSwgcnVuTmFtZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgY2hhaW5OYW1lID0gKChfYSA9IGNoYWluLmlkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbY2hhaW4uaWQubGVuZ3RoIC0gMV0pIHx8IFwidW5rbm93blwiO1xuICAgICAgICAgICAgY29uc3Qgc3Bhbk5hbWUgPSBgJHtjaGFpbk5hbWV9LndvcmtmbG93YDtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgXCJ0cmFjZWxvb3Auc3Bhbi5raW5kXCI6IFwid29ya2Zsb3dcIixcbiAgICAgICAgICAgICAgICBcInRyYWNlbG9vcC53b3JrZmxvdy5uYW1lXCI6IHJ1bk5hbWUgfHwgY2hhaW5OYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFjZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICBcInRyYWNlbG9vcC5lbnRpdHkuaW5wdXRcIjogSlNPTi5zdHJpbmdpZnkoaW5wdXRzKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3BhbnMuc2V0KHJ1bklkLCB7IHNwYW4sIHJ1bklkIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlQ2hhaW5FbmQob3V0cHV0cywgcnVuSWQsIF9wYXJlbnRSdW5JZCwgX3RhZ3MsIF9rd2FyZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5EYXRhID0gdGhpcy5zcGFucy5nZXQocnVuSWQpO1xuICAgICAgICAgICAgaWYgKCFzcGFuRGF0YSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB7IHNwYW4gfSA9IHNwYW5EYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhY2VDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0cmFjZWxvb3AuZW50aXR5Lm91dHB1dFwiOiBKU09OLnN0cmluZ2lmeShvdXRwdXRzKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgdGhpcy5zcGFucy5kZWxldGUocnVuSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlQ2hhaW5FcnJvcihlcnIsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBfa3dhcmdzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuRGF0YSA9IHRoaXMuc3BhbnMuZ2V0KHJ1bklkKTtcbiAgICAgICAgICAgIGlmICghc3BhbkRhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBzcGFuIH0gPSBzcGFuRGF0YTtcbiAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycik7XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB0aGlzLnNwYW5zLmRlbGV0ZShydW5JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVUb29sU3RhcnQodG9vbCwgaW5wdXQsIHJ1bklkLCBfcGFyZW50UnVuSWQsIF90YWdzLCBfbWV0YWRhdGEsIF9ydW5OYW1lKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB0b29sTmFtZSA9ICgoX2EgPSB0b29sLmlkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbdG9vbC5pZC5sZW5ndGggLSAxXSkgfHwgXCJ1bmtub3duXCI7XG4gICAgICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGAke3Rvb2xOYW1lfS50YXNrYDtcbiAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgXCJ0cmFjZWxvb3Auc3Bhbi5raW5kXCI6IFwidGFza1wiLFxuICAgICAgICAgICAgICAgIFwidHJhY2Vsb29wLmVudGl0eS5uYW1lXCI6IHRvb2xOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFjZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICBcInRyYWNlbG9vcC5lbnRpdHkuaW5wdXRcIjogSlNPTi5zdHJpbmdpZnkoeyBhcmdzOiBbaW5wdXRdIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zcGFucy5zZXQocnVuSWQsIHsgc3BhbiwgcnVuSWQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVUb29sRW5kKG91dHB1dCwgcnVuSWQsIF9wYXJlbnRSdW5JZCwgX3RhZ3MpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5EYXRhID0gdGhpcy5zcGFucy5nZXQocnVuSWQpO1xuICAgICAgICAgICAgaWYgKCFzcGFuRGF0YSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB7IHNwYW4gfSA9IHNwYW5EYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhY2VDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0cmFjZWxvb3AuZW50aXR5Lm91dHB1dFwiOiBKU09OLnN0cmluZ2lmeShvdXRwdXQpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICB0aGlzLnNwYW5zLmRlbGV0ZShydW5JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVUb29sRXJyb3IoZXJyLCBydW5JZCwgX3BhcmVudFJ1bklkLCBfdGFncykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbkRhdGEgPSB0aGlzLnNwYW5zLmdldChydW5JZCk7XG4gICAgICAgICAgICBpZiAoIXNwYW5EYXRhKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHsgc3BhbiB9ID0gc3BhbkRhdGE7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgdGhpcy5zcGFucy5kZWxldGUocnVuSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXh0cmFjdE1vZGVsTmFtZUZyb21SZXNwb25zZShvdXRwdXQpIHtcbiAgICAgICAgLy8gRm9sbG93IFB5dGhvbiBpbXBsZW1lbnRhdGlvbiAtIGV4dHJhY3QgZnJvbSBsbG1fb3V0cHV0IGZpcnN0XG4gICAgICAgIGlmIChvdXRwdXQubGxtT3V0cHV0KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbE5hbWUgPSBvdXRwdXQubGxtT3V0cHV0Lm1vZGVsX25hbWUgfHxcbiAgICAgICAgICAgICAgICBvdXRwdXQubGxtT3V0cHV0Lm1vZGVsX2lkIHx8XG4gICAgICAgICAgICAgICAgb3V0cHV0LmxsbU91dHB1dC5tb2RlbDtcbiAgICAgICAgICAgIGlmIChtb2RlbE5hbWUgJiYgdHlwZW9mIG1vZGVsTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbE5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnZlcnRDbGFzc05hbWVUb1NwYW5OYW1lKGNsYXNzTmFtZSkge1xuICAgICAgICAvLyBDb252ZXJ0IFBhc2NhbENhc2UgdG8gbG93ZXJjYXNlIHdpdGggZG90c1xuICAgICAgICAvLyBCZWRyb2NrQ2hhdCAtPiBiZWRyb2NrLmNoYXRcbiAgICAgICAgLy8gQ2hhdE9wZW5BSSAtPiBjaGF0Lm9wZW5haVxuICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywgKG1hdGNoLCBjaGFyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gY2hhci50b0xvd2VyQ2FzZSgpIDogYC4ke2NoYXIudG9Mb3dlckNhc2UoKX1gO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGV0ZWN0VmVuZG9yKGxsbSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICgoX2EgPSBsbG0uaWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtsbG0uaWQubGVuZ3RoIC0gMV0pIHx8IFwiXCI7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJMYW5nY2hhaW5cIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb2xsb3cgUHl0aG9uIGltcGxlbWVudGF0aW9uIHdpdGggZXhhY3QgbWF0Y2hlcyBhbmQgcGF0dGVybnNcbiAgICAgICAgLy8gT3JkZXJlZCBieSBzcGVjaWZpY2l0eSAobW9zdCBzcGVjaWZpYyBmaXJzdClcbiAgICAgICAgLy8gQXp1cmUgKG1vc3Qgc3BlY2lmaWMgLSBjaGVjayBmaXJzdClcbiAgICAgICAgaWYgKFtcIkF6dXJlQ2hhdE9wZW5BSVwiLCBcIkF6dXJlT3BlbkFJXCIsIFwiQXp1cmVPcGVuQUlFbWJlZGRpbmdzXCJdLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXp1cmVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkF6dXJlXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3BlbkFJXG4gICAgICAgIGlmIChbXCJDaGF0T3BlbkFJXCIsIFwiT3BlbkFJXCIsIFwiT3BlbkFJRW1iZWRkaW5nc1wiXS5pbmNsdWRlcyhjbGFzc05hbWUpIHx8XG4gICAgICAgICAgICBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIm9wZW5haVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwib3BlbmFpXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQVdTIEJlZHJvY2tcbiAgICAgICAgaWYgKFtcIkNoYXRCZWRyb2NrXCIsIFwiQmVkcm9ja0VtYmVkZGluZ3NcIiwgXCJCZWRyb2NrXCIsIFwiQmVkcm9ja0NoYXRcIl0uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJiZWRyb2NrXCIpIHx8XG4gICAgICAgICAgICBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImF3c1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiQVdTXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQW50aHJvcGljXG4gICAgICAgIGlmIChbXCJDaGF0QW50aHJvcGljXCIsIFwiQW50aHJvcGljTExNXCJdLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYW50aHJvcGljXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJBbnRocm9waWNcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBHb29nbGUgKFZlcnRleC9QYUxNL0dlbWluaSlcbiAgICAgICAgaWYgKFtcbiAgICAgICAgICAgIFwiQ2hhdFZlcnRleEFJXCIsXG4gICAgICAgICAgICBcIlZlcnRleEFJXCIsXG4gICAgICAgICAgICBcIlZlcnRleEFJRW1iZWRkaW5nc1wiLFxuICAgICAgICAgICAgXCJDaGF0R29vZ2xlR2VuZXJhdGl2ZUFJXCIsXG4gICAgICAgICAgICBcIkdvb2dsZUdlbmVyYXRpdmVBSVwiLFxuICAgICAgICAgICAgXCJHb29nbGVQYUxNXCIsXG4gICAgICAgICAgICBcIkNoYXRHb29nbGVQYUxNXCIsXG4gICAgICAgIF0uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ2ZXJ0ZXhcIikgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZ29vZ2xlXCIpIHx8XG4gICAgICAgICAgICBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInBhbG1cIikgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZ2VtaW5pXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJHb29nbGVcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb2hlcmVcbiAgICAgICAgaWYgKFtcIkNoYXRDb2hlcmVcIiwgXCJDb2hlcmVFbWJlZGRpbmdzXCIsIFwiQ29oZXJlXCJdLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29oZXJlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJDb2hlcmVcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBIdWdnaW5nRmFjZVxuICAgICAgICBpZiAoW1xuICAgICAgICAgICAgXCJIdWdnaW5nRmFjZVBpcGVsaW5lXCIsXG4gICAgICAgICAgICBcIkh1Z2dpbmdGYWNlVGV4dEdlbkluZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJIdWdnaW5nRmFjZUVtYmVkZGluZ3NcIixcbiAgICAgICAgICAgIFwiQ2hhdEh1Z2dpbmdGYWNlXCIsXG4gICAgICAgIF0uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJodWdnaW5nZmFjZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiSHVnZ2luZ0ZhY2VcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbGxhbWFcbiAgICAgICAgaWYgKFtcIkNoYXRPbGxhbWFcIiwgXCJPbGxhbWFFbWJlZGRpbmdzXCIsIFwiT2xsYW1hXCJdLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwib2xsYW1hXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJPbGxhbWFcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyBUb2dldGhlclxuICAgICAgICBpZiAoW1wiVG9nZXRoZXJcIiwgXCJDaGF0VG9nZXRoZXJcIl0uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ0b2dldGhlclwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiVG9nZXRoZXJBSVwiO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlcGxpY2F0ZVxuICAgICAgICBpZiAoW1wiUmVwbGljYXRlXCIsIFwiQ2hhdFJlcGxpY2F0ZVwiXS5pbmNsdWRlcyhjbGFzc05hbWUpIHx8XG4gICAgICAgICAgICBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInJlcGxpY2F0ZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiUmVwbGljYXRlXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiTGFuZ2NoYWluXCI7XG4gICAgfVxuICAgIG1hcE1lc3NhZ2VUeXBlVG9Sb2xlKG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgIC8vIE1hcCBMYW5nQ2hhaW4gbWVzc2FnZSB0eXBlcyB0byBzdGFuZGFyZCBPcGVuVGVsZW1ldHJ5IHJvbGVzXG4gICAgICAgIHN3aXRjaCAobWVzc2FnZVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJodW1hblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInVzZXJcIjtcbiAgICAgICAgICAgIGNhc2UgXCJhaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcImFzc2lzdGFudFwiO1xuICAgICAgICAgICAgY2FzZSBcInN5c3RlbVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInN5c3RlbVwiO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidG9vbFwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZVR5cGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciB2ZXJzaW9uID0gXCIwLjIxLjBcIjtcblxuLypcbiAqIENvcHlyaWdodCBUcmFjZWxvb3BcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5jbGFzcyBMYW5nQ2hhaW5JbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgICAgICBzdXBlcihcIkB0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWxhbmdjaGFpblwiLCB2ZXJzaW9uLCBjb25maWcpO1xuICAgICAgICAvLyBNYW51YWxseSBpbnN0cnVtZW50IENhbGxiYWNrTWFuYWdlciBpbW1lZGlhdGVseSBzaW5jZSBtb2R1bGUgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29ya1xuICAgICAgICB0aGlzLmluc3RydW1lbnRDYWxsYmFja01hbmFnZXJEaXJlY3RseSgpO1xuICAgIH1cbiAgICBtYW51YWxseUluc3RydW1lbnQoeyBjYWxsYmFja01hbmFnZXJNb2R1bGUsIH0pIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrTWFuYWdlck1vZHVsZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIk1hbnVhbGx5IGluc3RydW1lbnRpbmcgQGxhbmdjaGFpbi9jb3JlL2NhbGxiYWNrcy9tYW5hZ2VyXCIpO1xuICAgICAgICAgICAgdGhpcy5wYXRjaENhbGxiYWNrTWFuYWdlcihjYWxsYmFja01hbmFnZXJNb2R1bGUuQ2FsbGJhY2tNYW5hZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgc2luY2Ugd2UgaGFuZGxlIHBhdGNoaW5nIGluIGNvbnN0cnVjdG9yXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaW5zdHJ1bWVudENhbGxiYWNrTWFuYWdlckRpcmVjdGx5KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrTWFuYWdlck1vZHVsZSA9IHJlcXVpcmUoXCJAbGFuZ2NoYWluL2NvcmUvY2FsbGJhY2tzL21hbmFnZXJcIik7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tNYW5hZ2VyTW9kdWxlID09PSBudWxsIHx8IGNhbGxiYWNrTWFuYWdlck1vZHVsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2tNYW5hZ2VyTW9kdWxlLkNhbGxiYWNrTWFuYWdlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hDYWxsYmFja01hbmFnZXIoY2FsbGJhY2tNYW5hZ2VyTW9kdWxlLkNhbGxiYWNrTWFuYWdlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKFwiRXJyb3IgaW5zdHJ1bWVudGluZyBjYWxsYmFjayBtYW5hZ2VyOlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGF0Y2hDYWxsYmFja01hbmFnZXIoQ2FsbGJhY2tNYW5hZ2VyKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrTWFuYWdlckFueSA9IENhbGxiYWNrTWFuYWdlcjtcbiAgICAgICAgaWYgKGNhbGxiYWNrTWFuYWdlckFueS5fY29uZmlndXJlU3luYyAmJlxuICAgICAgICAgICAgIWNhbGxiYWNrTWFuYWdlckFueS5fdHJhY2Vsb29wUGF0Y2hlZCkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDb25maWd1cmVTeW5jID0gY2FsbGJhY2tNYW5hZ2VyQW55Ll9jb25maWd1cmVTeW5jO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIGNhbGxiYWNrTWFuYWdlckFueS5fY29uZmlndXJlU3luYyA9IGZ1bmN0aW9uIChpbmhlcml0YWJsZUhhbmRsZXJzLCBsb2NhbEhhbmRsZXJzLCBpbmhlcml0YWJsZVRhZ3MsIGxvY2FsVGFncywgaW5oZXJpdGFibGVNZXRhZGF0YSwgbG9jYWxNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBvdXIgY2FsbGJhY2sgaGFuZGxlciB0byBpbmhlcml0YWJsZSBoYW5kbGVyc1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSGFuZGxlciA9IG5ldyBUcmFjZWxvb3BDYWxsYmFja0hhbmRsZXIoc2VsZi50cmFjZXIsIHNlbGYuX3Nob3VsZFNlbmRQcm9tcHRzKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbmhlcml0YWJsZUhhbmRsZXJzID0gaW5oZXJpdGFibGVIYW5kbGVycyAmJiBBcnJheS5pc0FycmF5KGluaGVyaXRhYmxlSGFuZGxlcnMpXG4gICAgICAgICAgICAgICAgICAgID8gWy4uLmluaGVyaXRhYmxlSGFuZGxlcnMsIGNhbGxiYWNrSGFuZGxlcl1cbiAgICAgICAgICAgICAgICAgICAgOiBbY2FsbGJhY2tIYW5kbGVyXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxDb25maWd1cmVTeW5jLmNhbGwodGhpcywgdXBkYXRlZEluaGVyaXRhYmxlSGFuZGxlcnMsIGxvY2FsSGFuZGxlcnMsIGluaGVyaXRhYmxlVGFncywgbG9jYWxUYWdzLCBpbmhlcml0YWJsZU1ldGFkYXRhLCBsb2NhbE1ldGFkYXRhKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBNYXJrIGFzIHBhdGNoZWQgdG8gYXZvaWQgZG91YmxlIHBhdGNoaW5nXG4gICAgICAgICAgICBjYWxsYmFja01hbmFnZXJBbnkuX3RyYWNlbG9vcFBhdGNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9zaG91bGRTZW5kUHJvbXB0cygpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFNob3VsZFNlbmRQcm9tcHRzID0gY29udGV4dFxuICAgICAgICAgICAgLmFjdGl2ZSgpXG4gICAgICAgICAgICAuZ2V0VmFsdWUoQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCk7XG4gICAgICAgIGlmIChjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICEhY29udGV4dFNob3VsZFNlbmRQcm9tcHRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHJhY2VDb250ZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5fY29uZmlnLnRyYWNlQ29udGVudFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgTGFuZ0NoYWluSW5zdHJ1bWVudGF0aW9uLCBUcmFjZWxvb3BDYWxsYmFja0hhbmRsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgSW5zdHJ1bWVudGF0aW9uQmFzZSwgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24gfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24nO1xuXG52YXIgdmVyc2lvbiA9IFwiMC4yMS4wXCI7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVHJhY2Vsb29wXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIGltcG9ydCB7XG4vLyAgIFNwYW4sXG4vLyAgIFNwYW5LaW5kLFxuLy8gICBBdHRyaWJ1dGVzLFxuLy8gICBTcGFuU3RhdHVzQ29kZSxcbi8vICAgY29udGV4dCxcbi8vICAgdHJhY2UsXG4vLyB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmNsYXNzIENocm9tYURCSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1jaHJvbWFkYlwiLCB2ZXJzaW9uLCBjb25maWcpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbihcImNocm9tYWRiXCIsIFtcIl4xLjguMVwiXSwgdGhpcy53cmFwLmJpbmQodGhpcyksIHRoaXMudW53cmFwLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBtYW51YWxseUluc3RydW1lbnQobW9kdWxlKSB7XG4gICAgICAgIC8vIHRoaXMuX2RpYWcuZGVidWcoYE1hbnVhbGx5IHBhdGNoaW5nIGNocm9tYWRiYCk7XG4gICAgICAgIC8vIHRoaXMud3JhcChtb2R1bGUpO1xuICAgIH1cbiAgICB3cmFwKG1vZHVsZSkge1xuICAgICAgICAvLyB0aGlzLl93cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJhZGRcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICAvLyB0aGlzLl93cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJnZXRcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICAvLyB0aGlzLl93cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJxdWVyeVwiLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgICAgIC8vIHRoaXMuX3dyYXAobW9kdWxlLkNvbGxlY3Rpb24ucHJvdG90eXBlLCBcInVwZGF0ZVwiLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgICAgIC8vIHRoaXMuX3dyYXAobW9kdWxlLkNvbGxlY3Rpb24ucHJvdG90eXBlLCBcInVwc2VydFwiLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgICAgIC8vIHRoaXMuX3dyYXAobW9kdWxlLkNvbGxlY3Rpb24ucHJvdG90eXBlLCBcInBlZWtcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICAvLyB0aGlzLl93cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJkZWxldGVcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICAvLyB0aGlzLl93cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJtb2RpZnlcIiwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICB1bndyYXAobW9kdWxlKSB7XG4gICAgICAgIC8vIHRoaXMuX3Vud3JhcChtb2R1bGUuQ29sbGVjdGlvbi5wcm90b3R5cGUsIFwiYWRkXCIpO1xuICAgICAgICAvLyB0aGlzLl91bndyYXAobW9kdWxlLkNvbGxlY3Rpb24ucHJvdG90eXBlLCBcImdldFwiKTtcbiAgICAgICAgLy8gdGhpcy5fdW53cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJxdWVyeVwiKTtcbiAgICAgICAgLy8gdGhpcy5fdW53cmFwKG1vZHVsZS5Db2xsZWN0aW9uLnByb3RvdHlwZSwgXCJ1cGRhdGVcIik7XG4gICAgICAgIC8vIHRoaXMuX3Vud3JhcChtb2R1bGUuQ29sbGVjdGlvbi5wcm90b3R5cGUsIFwidXBzZXJ0XCIpO1xuICAgICAgICAvLyB0aGlzLl91bndyYXAobW9kdWxlLkNvbGxlY3Rpb24ucHJvdG90eXBlLCBcInBlZWtcIik7XG4gICAgICAgIC8vIHRoaXMuX3Vud3JhcChtb2R1bGUuQ29sbGVjdGlvbi5wcm90b3R5cGUsIFwiZGVsZXRlXCIpO1xuICAgICAgICAvLyB0aGlzLl91bndyYXAobW9kdWxlLkNvbGxlY3Rpb24ucHJvdG90eXBlLCBcIm1vZGlmeVwiKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IENocm9tYURCSW5zdHJ1bWVudGF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLAogICAgImltcG9ydCB7IHRyYWNlLCBjb250ZXh0LCBTcGFuU3RhdHVzQ29kZSwgU3BhbktpbmQgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgSW5zdHJ1bWVudGF0aW9uQmFzZSwgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24sIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24nO1xuaW1wb3J0IHsgU3BhbkF0dHJpYnV0ZXMsIEV2ZW50QXR0cmlidXRlcyB9IGZyb20gJ0B0cmFjZWxvb3AvYWktc2VtYW50aWMtY29udmVudGlvbnMnO1xuXG52YXIgdmVyc2lvbiA9IFwiMC4yMS4wXCI7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVHJhY2Vsb29wXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IFVQU0VSVCA9IFwidXBzZXJ0XCI7XG5jb25zdCBERUxFVEUgPSBcImRlbGV0ZVwiO1xuY29uc3QgUkVUUklFVkUgPSBcInJldHJpZXZlXCI7XG5jb25zdCBTRUFSQ0ggPSBcInNlYXJjaFwiO1xuY2xhc3MgUWRyYW50SW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1xZHJhbnRcIiwgdmVyc2lvbiwgY29uZmlnKTtcbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oXCJAcWRyYW50L2pzLWNsaWVudC1yZXN0XCIsIFtcIl4xLjlcIl0sIHRoaXMud3JhcC5iaW5kKHRoaXMpLCB0aGlzLnVud3JhcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICB9XG4gICAgbWFudWFsbHlJbnN0cnVtZW50KG1vZHVsZSkge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBNYW51YWxseSBwYXRjaGluZyBRZHJhbnRgKTtcbiAgICAgICAgdGhpcy53cmFwKG1vZHVsZSk7XG4gICAgfVxuICAgIHdyYXAobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLlFkcmFudENsaWVudC5wcm90b3R5cGUsIFVQU0VSVCwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5RZHJhbnRDbGllbnQucHJvdG90eXBlLCBSRVRSSUVWRSwgdGhpcy53cmFwcGVyTWV0aG9kKCkpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZS5RZHJhbnRDbGllbnQucHJvdG90eXBlLCBTRUFSQ0gsIHRoaXMud3JhcHBlck1ldGhvZCgpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuUWRyYW50Q2xpZW50LnByb3RvdHlwZSwgREVMRVRFLCB0aGlzLndyYXBwZXJNZXRob2QoKSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIHVud3JhcChtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5RZHJhbnRDbGllbnQucHJvdG90eXBlLCBVUFNFUlQpO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlLlFkcmFudENsaWVudC5wcm90b3R5cGUsIFJFVFJJRVZFKTtcbiAgICAgICAgdGhpcy5fdW53cmFwKG1vZHVsZS5RZHJhbnRDbGllbnQucHJvdG90eXBlLCBTRUFSQ0gpO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlLlFkcmFudENsaWVudC5wcm90b3R5cGUsIERFTEVURSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIHdyYXBwZXJNZXRob2QoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ldGhvZCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHBsdWdpbi5fc3RhcnRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk5hbWU6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogYXJncy5sZW5ndGggPiAxID8gYXJnc1sxXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lOiBvcmlnaW5hbC5uYW1lLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNDb250ZXh0ID0gdHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9IHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKGV4ZWNDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2RpYWcuZXJyb3IoYEVycm9yIGluIFFkcmFudCBpbnN0cnVtZW50YXRpb25gLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRQcm9taXNlID0gZXhlY1Byb21pc2VcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZW5kU3Bhbih7IG1ldGhvZE5hbWU6IG9yaWdpbmFsLm5hbWUsIHNwYW4sIHJlc3VsdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5iaW5kKGV4ZWNDb250ZXh0LCB3cmFwcGVkUHJvbWlzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBfc3RhcnRTcGFuKHsgY29sbGVjdGlvbk5hbWUsIHBhcmFtcywgbWV0aG9kTmFtZSwgfSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBzcGFuTmFtZSA9IGBxZHJhbnQuJHttZXRob2ROYW1lfWA7XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgfSk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlZFQ1RPUl9EQl9WRU5ET1IsIFwiUWRyYW50XCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy50cmFjZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBVUFNFUlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRVcHNlcnRBdHRyaWJ1dGVzKHNwYW4sIGNvbGxlY3Rpb25OYW1lLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgREVMRVRFOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RGVsZXRlQXR0cmlidXRlcyhzcGFuLCBjb2xsZWN0aW9uTmFtZSwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFJFVFJJRVZFOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0UmV0cmlldmVBdHRyaWJ1dGVzKHNwYW4sIGNvbGxlY3Rpb25OYW1lLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU0VBUkNIOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0U2VhcmNoQXR0cmlidXRlcyhzcGFuLCBjb2xsZWN0aW9uTmFtZSwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLndhcm4oZSk7XG4gICAgICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLl9jb25maWcpLmV4Y2VwdGlvbkxvZ2dlcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICBfZW5kU3Bhbih7IG1ldGhvZE5hbWUsIHNwYW4sIHJlc3VsdCwgfSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoIChtZXRob2ROYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTRUFSQ0g6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFNlYXJjaFJlc3VsdEF0dHJpYnV0ZXMoc3BhbiwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3NldFVwc2VydEF0dHJpYnV0ZXMoc3BhbiwgY29sbGVjdGlvbk5hbWUsIHBhcmFtcykge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5WRUNUT1JfREJfVEFCTEVfTkFNRSwgY29sbGVjdGlvbk5hbWUpO1xuICAgICAgICBpZiAoXCJiYXRjaFwiIGluIHBhcmFtcykge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVkVDVE9SX0RCX0FERF9DT1VOVCwgcGFyYW1zLmJhdGNoLmlkcy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVkVDVE9SX0RCX0FERF9DT1VOVCwgcGFyYW1zLnBvaW50cy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9zZXREZWxldGVBdHRyaWJ1dGVzKHNwYW4sIGNvbGxlY3Rpb25OYW1lLCBwYXJhbXMpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVkVDVE9SX0RCX1RBQkxFX05BTUUsIGNvbGxlY3Rpb25OYW1lKTtcbiAgICAgICAgaWYgKFwiZmlsdGVyXCIgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5WRUNUT1JfREJfREVMRVRFX1NFTEVDVE9SLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuZmlsdGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5WRUNUT1JfREJfREVMRVRFX1NFTEVDVE9SLCBKU09OLnN0cmluZ2lmeShwYXJhbXMucG9pbnRzKSk7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5WRUNUT1JfREJfREVMRVRFX0NPVU5ULCBwYXJhbXMucG9pbnRzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3NldFJldHJpZXZlQXR0cmlidXRlcyhzcGFuLCBjb2xsZWN0aW9uTmFtZSwgcGFyYW1zKSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlZFQ1RPUl9EQl9UQUJMRV9OQU1FLCBjb2xsZWN0aW9uTmFtZSk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlZFQ1RPUl9EQl9HRVRfU0VMRUNUT1IsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5pZHMpKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVkVDVE9SX0RCX0dFVF9DT1VOVCwgcGFyYW1zLmlkcy5sZW5ndGgpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5WRUNUT1JfREJfR0VUX0lOQ0xVREVfTUVUQURBVEEsICEhcGFyYW1zLndpdGhfcGF5bG9hZCk7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlZFQ1RPUl9EQl9HRVRfSU5DTFVERV9WQUxVRVMsICEhcGFyYW1zLndpdGhfdmVjdG9yKTtcbiAgICB9XG4gICAgX3NldFNlYXJjaEF0dHJpYnV0ZXMoc3BhbiwgY29sbGVjdGlvbk5hbWUsIHBhcmFtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlZFQ1RPUl9EQl9UQUJMRV9OQU1FLCBjb2xsZWN0aW9uTmFtZSk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5X3JlcXVlc3RfZXZlbnQgPSBzcGFuLmFkZEV2ZW50KFwicWRyYW50LnNlYXJjaC5yZXF1ZXN0XCIpO1xuICAgICAgICBxdWVyeV9yZXF1ZXN0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1RPUF9LLCBwYXJhbXMubGltaXQpO1xuICAgICAgICBxdWVyeV9yZXF1ZXN0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX0lOQ0xVREVfVkFMVUVTLCAhIXBhcmFtcy53aXRoX3ZlY3Rvcik7XG4gICAgICAgIHF1ZXJ5X3JlcXVlc3RfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfSU5DTFVERV9NRVRBREFUQSwgISFwYXJhbXMud2l0aF9wYXlsb2FkKTtcbiAgICAgICAgcXVlcnlfcmVxdWVzdF9ldmVudC5zZXRBdHRyaWJ1dGUoRXZlbnRBdHRyaWJ1dGVzLlZFQ1RPUl9EQl9RVUVSWV9FTUJFRERJTkdTX1ZFQ1RPUiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLnZlY3RvcikpO1xuICAgICAgICBxdWVyeV9yZXF1ZXN0X2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX01FVEFEQVRBX0ZJTFRFUiwgSlNPTi5zdHJpbmdpZnkoKF9hID0gcGFyYW1zLmZpbHRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pKTtcbiAgICB9XG4gICAgX3NldFNlYXJjaFJlc3VsdEF0dHJpYnV0ZXMoc3BhbiwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHFkcmFudF9yZXN1bHRfZXZlbnQgPSBzcGFuLmFkZEV2ZW50KFwicWRyYW50LnNlYXJjaC5yZXN1bHRcIik7XG4gICAgICAgIHFkcmFudF9yZXN1bHRfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfUkVTVUxUX01BVENIRVNfTEVOR1RILCByZXN1bHQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcmVzdWx0W2ldO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoX3Jlc3VsdF9tYXRjaF9ldmVudCA9IHFkcmFudF9yZXN1bHRfZXZlbnQuYWRkRXZlbnQoYHFkcmFudC5zZWFyY2gucmVzdWx0LiR7aX1gKTtcbiAgICAgICAgICAgIHNlYXJjaF9yZXN1bHRfbWF0Y2hfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfUkVTVUxUX1NDT1JFLnJlcGxhY2UoXCJ7aX1cIiwgaS50b1N0cmluZygpKSwgbWF0Y2guc2NvcmUpO1xuICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdF9tYXRjaF9ldmVudC5zZXRBdHRyaWJ1dGUoRXZlbnRBdHRyaWJ1dGVzLlZFQ1RPUl9EQl9RVUVSWV9SRVNVTFRfSUQucmVwbGFjZShcIntpfVwiLCBpLnRvU3RyaW5nKCkpLCBtYXRjaC5pZCk7XG4gICAgICAgICAgICBzZWFyY2hfcmVzdWx0X21hdGNoX2V2ZW50LnNldEF0dHJpYnV0ZShFdmVudEF0dHJpYnV0ZXMuVkVDVE9SX0RCX1FVRVJZX1JFU1VMVF9WQUxVRVMucmVwbGFjZShcIntpfVwiLCBpLnRvU3RyaW5nKCkpLCBKU09OLnN0cmluZ2lmeShtYXRjaC52ZWN0b3IpKTtcbiAgICAgICAgICAgIHNlYXJjaF9yZXN1bHRfbWF0Y2hfZXZlbnQuc2V0QXR0cmlidXRlKEV2ZW50QXR0cmlidXRlcy5WRUNUT1JfREJfUVVFUllfUkVTVUxUX01FVEFEQVRBLnJlcGxhY2UoXCJ7aX1cIiwgaS50b1N0cmluZygpKSwgSlNPTi5zdHJpbmdpZnkobWF0Y2gucGF5bG9hZCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgeyBRZHJhbnRJbnN0cnVtZW50YXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgX19hc3luY0dlbmVyYXRvciwgX19hd2FpdCwgX19hc3luY1ZhbHVlcyB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHRyYWNlLCBjb250ZXh0LCBTcGFuS2luZCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25CYXNlLCBJbnN0cnVtZW50YXRpb25Ob2RlTW9kdWxlRGVmaW5pdGlvbiwgc2FmZUV4ZWN1dGVJblRoZU1pZGRsZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XG5pbXBvcnQgeyBTcGFuQXR0cmlidXRlcywgQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCB9IGZyb20gJ0B0cmFjZWxvb3AvYWktc2VtYW50aWMtY29udmVudGlvbnMnO1xuXG52YXIgdmVyc2lvbiA9IFwiMC4yMS4wXCI7XG5cbmNsYXNzIFRvZ2V0aGVySW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi10b2dldGhlci1haVwiLCB2ZXJzaW9uLCBPYmplY3QuYXNzaWduKHsgZW5yaWNoVG9rZW5zOiB0cnVlIH0sIGNvbmZpZykpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgfVxuICAgIG1hbnVhbGx5SW5zdHJ1bWVudChtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhgTWFudWFsbHkgaW5zdHJ1bWVudGluZyB0b2dldGhlcmFpYCk7XG4gICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLkNoYXQuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiLCB0aGlzLnBhdGNoVG9nZXRoZXIoXCJjaGF0XCIpKTtcbiAgICAgICAgdGhpcy5fd3JhcChtb2R1bGUuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiLCB0aGlzLnBhdGNoVG9nZXRoZXIoXCJjb21wbGV0aW9uXCIpKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwidG9nZXRoZXItYWlcIiwgW1wiPj0wLjEzLjBcIl0sIHRoaXMucGF0Y2guYmluZCh0aGlzKSwgdGhpcy51bnBhdGNoLmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgIH1cbiAgICBwYXRjaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFBhdGNoaW5nIHRvZ2V0aGVyYWlAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuVG9nZXRoZXIuQ2hhdC5Db21wbGV0aW9ucy5wcm90b3R5cGUsIFwiY3JlYXRlXCIsIHRoaXMucGF0Y2hUb2dldGhlcihcImNoYXRcIikpO1xuICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuVG9nZXRoZXIuQ29tcGxldGlvbnMucHJvdG90eXBlLCBcImNyZWF0ZVwiLCB0aGlzLnBhdGNoVG9nZXRoZXIoXCJjb21wbGV0aW9uXCIpKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIHVucGF0Y2gobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBVbnBhdGNoaW5nIHRvZ2V0aGVyYWlAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5Ub2dldGhlci5DaGF0LkNvbXBsZXRpb25zLnByb3RvdHlwZSwgXCJjcmVhdGVcIik7XG4gICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLlRvZ2V0aGVyLkNvbXBsZXRpb25zLnByb3RvdHlwZSwgXCJjcmVhdGVcIik7XG4gICAgfVxuICAgIHBhdGNoVG9nZXRoZXIodHlwZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHJldHVybiAob3JpZ2luYWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2QoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSB0eXBlID09PSBcImNoYXRcIlxuICAgICAgICAgICAgICAgICAgICA/IHBsdWdpbi5zdGFydFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBwbHVnaW4uc3RhcnRTcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNDb250ZXh0ID0gdHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9IHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC53aXRoKGV4ZWNDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9hID0gYXJncyA9PT0gbnVsbCB8fCBhcmdzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcmdzWzBdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXh0cmFBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3NbMF0uZXh0cmFBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgaW4gJHt0eXBlfSBpbnN0cnVtZW50YXRpb246YCwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2RpYWcuZXJyb3IoXCJUb2dldGhlciBpbnN0cnVtZW50YXRpb246IGVycm9yXCIsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0uc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmJpbmQoZXhlY0NvbnRleHQsIHBsdWdpbi5fc3RyZWFtaW5nV3JhcFByb21pc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BhbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBleGVjUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkUHJvbWlzZSA9IHBsdWdpbi5fd3JhcFByb21pc2UodHlwZSwgc3BhbiwgZXhlY1Byb21pc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmJpbmQoZXhlY0NvbnRleHQsIHdyYXBwZWRQcm9taXNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXJ0U3Bhbih7IHR5cGUsIHBhcmFtcywgfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgICBbU3BhbkF0dHJpYnV0ZXMuTExNX1NZU1RFTV06IFwiVG9nZXRoZXJBSVwiLFxuICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX1RZUEVdOiB0eXBlLFxuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NT0RFTF0gPSBwYXJhbXMubW9kZWw7XG4gICAgICAgICAgICBpZiAocGFyYW1zLm1heF90b2tlbnMpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX01BWF9UT0tFTlNdID0gcGFyYW1zLm1heF90b2tlbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLnRlbXBlcmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9URU1QRVJBVFVSRV0gPSBwYXJhbXMudGVtcGVyYXR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLnRvcF9wKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UT1BfUF0gPSBwYXJhbXMudG9wX3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLmZyZXF1ZW5jeV9wZW5hbHR5KSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fRlJFUVVFTkNZX1BFTkFMVFldID1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZyZXF1ZW5jeV9wZW5hbHR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5wcmVzZW5jZV9wZW5hbHR5KSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fUFJFU0VOQ0VfUEVOQUxUWV0gPVxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJlc2VuY2VfcGVuYWx0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuZXh0cmFBdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyYW1zLmV4dHJhQXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5leHRyYUF0dHJpYnV0ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2tleV0gPSBwYXJhbXMuZXh0cmFBdHRyaWJ1dGVzW2tleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMubWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aW5kZXh9LnJvbGVgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5yb2xlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4ke2luZGV4fS5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmNvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aW5kZXh9LmNvbnRlbnRgXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBwYXJhbXMudG9vbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKChmdW5jLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0ubmFtZWBdID0gKF9hID0gZnVuYy5mdW5jdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0uZGVzY3JpcHRpb25gXSA9IChfYiA9IGZ1bmMuZnVuY3Rpb24pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfRlVOQ1RJT05TfS4ke2luZGV4fS5hcmd1bWVudHNgXSA9IEpTT04uc3RyaW5naWZ5KChfYyA9IGZ1bmMuZnVuY3Rpb24pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIChfYiA9IHBhcmFtcy50b29scykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmZvckVhY2goKHRvb2wsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvb2wuZnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0ubmFtZWBdID0gdG9vbC5mdW5jdGlvbi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9GVU5DVElPTlN9LiR7aW5kZXh9LmRlc2NyaXB0aW9uYF0gPSB0b29sLmZ1bmN0aW9uLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9GVU5DVElPTlN9LiR7aW5kZXh9LmFyZ3VtZW50c2BdID0gSlNPTi5zdHJpbmdpZnkodG9vbC5mdW5jdGlvbi5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLnJvbGVgXSA9IFwidXNlclwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcy5wcm9tcHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAuY29udGVudGBdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJvbXB0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uMC5jb250ZW50YF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5wcm9tcHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2V0dGluZyBzcGFuIGF0dHJpYnV0ZXM6XCIsIGUpO1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfZCA9IChfYyA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2VyLnN0YXJ0U3BhbihgdG9nZXRoZXIuJHt0eXBlfWAsIHtcbiAgICAgICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc3RyZWFtaW5nV3JhcFByb21pc2UoX2EpIHtcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogX3N0cmVhbWluZ1dyYXBQcm9taXNlXzEoeyBzcGFuLCB0eXBlLCBwYXJhbXMsIHByb21pc2UsIH0pIHtcbiAgICAgICAgICAgIHZhciBfYiwgZV8xLCBfYywgX2QsIF9lLCBlXzIsIF9mLCBfZztcbiAgICAgICAgICAgIHZhciBfaCwgX2osIF9rLCBfbCwgX20sIF9vLCBfcCwgX3EsIF9yLCBfcywgX3QsIF91LCBfdiwgX3csIF94LCBfeSwgX3osIF8wLCBfMTtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dwcm9iczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hfcmVhc29uOiBcInN0b3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xfY2FsbHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IFwiY2hhdC5jb21wbGV0aW9uXCIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSB5aWVsZCBfX2F3YWl0KHByb21pc2UpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF8yID0gdHJ1ZSwgc3RyZWFtXzEgPSBfX2FzeW5jVmFsdWVzKHN0cmVhbSksIHN0cmVhbV8xXzE7IHN0cmVhbV8xXzEgPSB5aWVsZCBfX2F3YWl0KHN0cmVhbV8xLm5leHQoKSksIF9iID0gc3RyZWFtXzFfMS5kb25lLCAhX2I7IF8yID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2QgPSBzdHJlYW1fMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgXzIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gX2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCBfX2F3YWl0KGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pZCA9IGNodW5rLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNyZWF0ZWQgPSBjaHVuay5jcmVhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGVsID0gY2h1bmsubW9kZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9oID0gY2h1bmsuY2hvaWNlc1swXSkgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oLmZpbmlzaF9yZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5maW5pc2hfcmVhc29uID0gY2h1bmsuY2hvaWNlc1swXS5maW5pc2hfcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UgJiYgKChfaiA9IGNodW5rLmNob2ljZXNbMF0pID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5kZWx0YS5jb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UuY29udGVudCArPSBjaHVuay5jaG9pY2VzWzBdLmRlbHRhLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNob2ljZXNbMF0ubWVzc2FnZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX2sgPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2suZGVsdGEuZnVuY3Rpb25fY2FsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9sID0gY2h1bmsuY2hvaWNlc1swXSkgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLmRlbHRhLmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX20gPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX20uZGVsdGEuZnVuY3Rpb25fY2FsbC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UuZnVuY3Rpb25fY2FsbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2h1bmsuY2hvaWNlc1swXS5kZWx0YS5mdW5jdGlvbl9jYWxsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogY2h1bmsuY2hvaWNlc1swXS5kZWx0YS5mdW5jdGlvbl9jYWxsLmFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0b29sQ2FsbCBvZiAoX3EgPSAoX3AgPSAoX28gPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX28uZGVsdGEpID09PSBudWxsIHx8IF9wID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcC50b29sX2NhbGxzKSAhPT0gbnVsbCAmJiBfcSAhPT0gdm9pZCAwID8gX3EgOiBbXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX3QgPSAoX3MgPSAoX3IgPSByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlKSA9PT0gbnVsbCB8fCBfciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3IudG9vbF9jYWxscykgPT09IG51bGwgfHwgX3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zLmxlbmd0aCkgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogMCkgPFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbENhbGwuaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfdSA9IHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UudG9vbF9jYWxscykgPT09IG51bGwgfHwgX3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF91LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB0b29sQ2FsbC5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UudG9vbF9jYWxscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9vbENhbGwuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLm1lc3NhZ2UudG9vbF9jYWxsc1t0b29sQ2FsbC5pbmRleF0uaWQgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sQ2FsbC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNob2ljZXNbMF0ubWVzc2FnZSAmJiB0b29sQ2FsbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHNbdG9vbENhbGwuaW5kZXhdLnR5cGUgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sQ2FsbC50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlICYmICgoX3YgPSB0b29sQ2FsbC5mdW5jdGlvbikgPT09IG51bGwgfHwgX3YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92Lm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHNbdG9vbENhbGwuaW5kZXhdLmZ1bmN0aW9uLm5hbWUgKz0gdG9vbENhbGwuZnVuY3Rpb24ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNob2ljZXNbMF0ubWVzc2FnZSAmJiAoKF93ID0gdG9vbENhbGwuZnVuY3Rpb24pID09PSBudWxsIHx8IF93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdy5hcmd1bWVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5tZXNzYWdlLnRvb2xfY2FsbHNbdG9vbENhbGwuaW5kZXhdLmZ1bmN0aW9uLmFyZ3VtZW50cyArPSB0b29sQ2FsbC5mdW5jdGlvbi5hcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdG9rZW4gdXNhZ2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmluYWwgY2h1bmsgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmsudXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudXNhZ2UgPSBjaHVuay51c2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfMiAmJiAhX2IgJiYgKF9jID0gc3RyZWFtXzEucmV0dXJuKSkgeWllbGQgX19hd2FpdChfYy5jYWxsKHN0cmVhbV8xKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9lbmRTcGFuKHsgc3BhbiwgdHlwZSwgcmVzdWx0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IC0xLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaF9yZWFzb246IFwic3RvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IFwidGV4dC5jb21wbGV0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHVzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRfdG9rZW5zOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl90b2tlbnM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90b2tlbnM6IDAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfMyA9IHRydWUsIF80ID0gX19hc3luY1ZhbHVlcyh5aWVsZCBfX2F3YWl0KHByb21pc2UpKSwgXzU7IF81ID0geWllbGQgX19hd2FpdChfNC5uZXh0KCkpLCBfZSA9IF81LmRvbmUsICFfZTsgXzMgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZyA9IF81LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgXzMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gX2c7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCBfX2F3YWl0KGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmlkID0gY2h1bmsuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNyZWF0ZWQgPSBjaHVuay5jcmVhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tb2RlbCA9IGNodW5rLm1vZGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3ggPSBjaHVuay5jaG9pY2VzWzBdKSA9PT0gbnVsbCB8fCBfeCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3guZmluaXNoX3JlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlc1swXS5maW5pc2hfcmVhc29uID0gY2h1bmsuY2hvaWNlc1swXS5maW5pc2hfcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF95ID0gY2h1bmsuY2hvaWNlc1swXSkgPT09IG51bGwgfHwgX3kgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF95LmxvZ3Byb2JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLmxvZ3Byb2JzID0gY2h1bmsuY2hvaWNlc1swXS5sb2dwcm9icztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfeiA9IGNodW5rLmNob2ljZXNbMF0pID09PSBudWxsIHx8IF96ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfei50ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzWzBdLnRleHQgKz0gY2h1bmsuY2hvaWNlc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2cgYW55IHVzYWdlIGluZm8gZnJvbSBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuay51c2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudXNhZ2UgPSBjaHVuay51c2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIGNodW5rOlwiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfMSA9IChfMCA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogXzEuY2FsbChfMCwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghXzMgJiYgIV9lICYmIChfZiA9IF80LnJldHVybikpIHlpZWxkIF9fYXdhaXQoX2YuY2FsbChfNCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZW5kU3Bhbih7IHNwYW4sIHR5cGUsIHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF93cmFwUHJvbWlzZSh0eXBlLCBzcGFuLCBwcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLl90aGVuVW53cmFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuZFNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzcGFuLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc2hvdWxkU2VuZFByb21wdHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyA9IGNvbnRleHRcbiAgICAgICAgICAgIC5hY3RpdmUoKVxuICAgICAgICAgICAgLmdldFZhbHVlKENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQpO1xuICAgICAgICBpZiAoY29udGV4dFNob3VsZFNlbmRQcm9tcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0U2hvdWxkU2VuZFByb21wdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy50cmFjZUNvbnRlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLl9jb25maWcudHJhY2VDb250ZW50XG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxuICAgIF9lbmRTcGFuKHsgc3BhbiwgdHlwZSwgcmVzdWx0LCB9KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVTUE9OU0VfTU9ERUwsIHJlc3VsdC5tb2RlbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnVzYWdlKSB7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1RPVEFMX1RPS0VOUywgKF9hID0gcmVzdWx0LnVzYWdlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG90YWxfdG9rZW5zKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfQ09NUExFVElPTl9UT0tFTlMsIChfYiA9IHJlc3VsdC51c2FnZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNvbXBsZXRpb25fdG9rZW5zKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOUywgKF9jID0gcmVzdWx0LnVzYWdlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucHJvbXB0X3Rva2Vucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImNoYXRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5maW5pc2hfcmVhc29uYCwgKF9hID0gY2hvaWNlLmZpbmlzaF9yZWFzb24pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5yb2xlYCwgKF9jID0gKF9iID0gY2hvaWNlLm1lc3NhZ2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yb2xlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uY29udGVudGAsIChfZSA9IChfZCA9IGNob2ljZS5tZXNzYWdlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY29udGVudCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9mID0gY2hvaWNlLm1lc3NhZ2UpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5mdW5jdGlvbl9jYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5mdW5jdGlvbl9jYWxsLm5hbWVgLCAoX2ogPSAoX2ggPSAoX2cgPSBjaG9pY2UubWVzc2FnZSkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLmZ1bmN0aW9uX2NhbGwpID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC5uYW1lKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aW5kZXh9LmZ1bmN0aW9uX2NhbGwuYXJndW1lbnRzYCwgKF9tID0gKF9sID0gKF9rID0gY2hvaWNlLm1lc3NhZ2UpID09PSBudWxsIHx8IF9rID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfay5mdW5jdGlvbl9jYWxsKSA9PT0gbnVsbCB8fCBfbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2wuYXJndW1lbnRzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChfcCA9IChfbyA9IGNob2ljZS5tZXNzYWdlKSA9PT0gbnVsbCB8fCBfbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX28udG9vbF9jYWxscykgPT09IG51bGwgfHwgX3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5mdW5jdGlvbl9jYWxsLm5hbWVgLCAoX3EgPSBjaG9pY2UubWVzc2FnZS50b29sX2NhbGxzWzBdLmZ1bmN0aW9uLm5hbWUpICE9PSBudWxsICYmIF9xICE9PSB2b2lkIDAgPyBfcSA6IFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uZnVuY3Rpb25fY2FsbC5hcmd1bWVudHNgLCAoX3IgPSBjaG9pY2UubWVzc2FnZS50b29sX2NhbGxzWzBdLmZ1bmN0aW9uLmFyZ3VtZW50cykgIT09IG51bGwgJiYgX3IgIT09IHZvaWQgMCA/IF9yIDogXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9zID0gY2hvaWNlID09PSBudWxsIHx8IGNob2ljZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2hvaWNlLm1lc3NhZ2UpID09PSBudWxsIHx8IF9zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcy50b29sX2NhbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9vbEluZGV4LCB0b29sQ2FsbCxdIG9mIGNob2ljZS5tZXNzYWdlLnRvb2xfY2FsbHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0udG9vbF9jYWxscy4ke3Rvb2xJbmRleH0ubmFtZWAsIHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aW5kZXh9LnRvb2xfY2FsbHMuJHt0b29sSW5kZXh9LmFyZ3VtZW50c2AsIHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aW5kZXh9LmZpbmlzaF9yZWFzb25gLCAoX2EgPSBjaG9pY2UuZmluaXNoX3JlYXNvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LiR7aW5kZXh9LnJvbGVgLCBcImFzc2lzdGFudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGAke1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uY29udGVudGAsIChfYiA9IGNob2ljZS50ZXh0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZW5kaW5nIHNwYW46XCIsIGUpO1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIChfZSA9IChfZCA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY2FsbChfZCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IFRvZ2V0aGVySW5zdHJ1bWVudGF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLAogICAgImltcG9ydCB7IFNwYW5LaW5kLCB0cmFjZSwgY29udGV4dCwgU3BhblN0YXR1c0NvZGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgSW5zdHJ1bWVudGF0aW9uQmFzZSwgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24gfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24nO1xuaW1wb3J0IHsgU3BhbkF0dHJpYnV0ZXMsIENPTlRFWFRfS0VZX0FMTE9XX1RSQUNFX0NPTlRFTlQgfSBmcm9tICdAdHJhY2Vsb29wL2FpLXNlbWFudGljLWNvbnZlbnRpb25zJztcblxudmFyIHZlcnNpb24gPSBcIjAuMjEuMFwiO1xuXG4vKlxuICogQ29weXJpZ2h0IFRyYWNlbG9vcFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTeW1ib2wgdG8gc3RvcmUgc2Vzc2lvbiBjb250ZXh0IG9uIGNsaWVudC9zZXJ2ZXIgaW5zdGFuY2VzXG5jb25zdCBTRVNTSU9OX0NPTlRFWFRfU1lNQk9MID0gU3ltYm9sKFwibWNwLXNlc3Npb24tY29udGV4dFwiKTtcbmNvbnN0IFNFU1NJT05fU1BBTl9TWU1CT0wgPSBTeW1ib2woXCJtY3Atc2Vzc2lvbi1zcGFuXCIpO1xuY2xhc3MgTWNwSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uQmFzZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICAgICAgc3VwZXIoXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1tY3BcIiwgdmVyc2lvbiwgY29uZmlnKTtcbiAgICB9XG4gICAgc2V0Q29uZmlnKGNvbmZpZyA9IHt9KSB7XG4gICAgICAgIHN1cGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICAvLyBUaGUgTUNQIFNESyBleHBvcnRzIENsaWVudCBhbmQgU2VydmVyIGZyb20gc3VicGF0aHMuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gaG9vayBib3RoIHRoZSBiYXJlIHN1YnBhdGggYW5kIHRoZSAvaW5kZXguanMgdmFyaWFudFxuICAgICAgICAvLyBiZWNhdXNlIGRpZmZlcmVudCBpbXBvcnQgc3R5bGVzIHJlc29sdmUgdG8gZGlmZmVyZW50IG1vZHVsZSBzcGVjaWZpZXJzLlxuICAgICAgICBjb25zdCBjbGllbnRNb2R1bGUgPSBuZXcgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2NsaWVudFwiLCBbXCI+PTEuMC4wXCJdLCB0aGlzLnBhdGNoQ2xpZW50LmJpbmQodGhpcyksIHRoaXMudW5wYXRjaENsaWVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3QgY2xpZW50SW5kZXhNb2R1bGUgPSBuZXcgSW5zdHJ1bWVudGF0aW9uTm9kZU1vZHVsZURlZmluaXRpb24oXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2NsaWVudC9pbmRleC5qc1wiLCBbXCI+PTEuMC4wXCJdLCB0aGlzLnBhdGNoQ2xpZW50LmJpbmQodGhpcyksIHRoaXMudW5wYXRjaENsaWVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgY29uc3Qgc2VydmVyTW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXJcIiwgW1wiPj0xLjAuMFwiXSwgdGhpcy5wYXRjaFNlcnZlci5iaW5kKHRoaXMpLCB0aGlzLnVucGF0Y2hTZXJ2ZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIGNvbnN0IHNlcnZlckluZGV4TW9kdWxlID0gbmV3IEluc3RydW1lbnRhdGlvbk5vZGVNb2R1bGVEZWZpbml0aW9uKFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIiwgW1wiPj0xLjAuMFwiXSwgdGhpcy5wYXRjaFNlcnZlci5iaW5kKHRoaXMpLCB0aGlzLnVucGF0Y2hTZXJ2ZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBbY2xpZW50TW9kdWxlLCBjbGllbnRJbmRleE1vZHVsZSwgc2VydmVyTW9kdWxlLCBzZXJ2ZXJJbmRleE1vZHVsZV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IGluc3RydW1lbnQgYW4gTUNQIFNESyBtb2R1bGUgKENsaWVudCBvciBTZXJ2ZXIpLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciBFU00gbW9kdWxlcyB3aGVyZSBhdXRvbWF0aWMgaW5zdHJ1bWVudGF0aW9uIG1heSBub3Qgd29yay5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGltcG9ydCAqIGFzIHRyYWNlbG9vcCBmcm9tIFwiQHRyYWNlbG9vcC9ub2RlLXNlcnZlci1zZGtcIjtcbiAgICAgKiBpbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9jbGllbnQvaW5kZXguanNcIjtcbiAgICAgKlxuICAgICAqIHRyYWNlbG9vcC5pbml0aWFsaXplKHsgYXBwTmFtZTogXCJteS1hcHBcIiB9KTtcbiAgICAgKlxuICAgICAqIC8vIEdldCB0aGUgTUNQIGluc3RydW1lbnRhdGlvbiBpbnN0YW5jZSBhbmQgbWFudWFsbHkgaW5zdHJ1bWVudFxuICAgICAqIGNvbnN0IG1jcEluc3RydW1lbnRhdGlvbiA9IHRyYWNlbG9vcC5nZXRNQ1BJbnN0cnVtZW50YXRpb24oKTtcbiAgICAgKiBtY3BJbnN0cnVtZW50YXRpb24/Lm1hbnVhbGx5SW5zdHJ1bWVudCh7IENsaWVudCB9KTtcbiAgICAgKlxuICAgICAqIC8vIE5vdyBDbGllbnQgd2lsbCBiZSB0cmFjZWRcbiAgICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KC4uLik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBtYW51YWxseUluc3RydW1lbnQobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoXCJNYW51YWxseSBpbnN0cnVtZW50aW5nIE1DUCBTREtcIik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBtb2R1bGUgaGFzIENsaWVudCBjbGFzc1xuICAgICAgICBpZiAobW9kdWxlLkNsaWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIldyYXBwaW5nIE1DUCBDbGllbnQgbWV0aG9kc1wiKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLkNsaWVudC5wcm90b3R5cGUsIFwiY29ubmVjdFwiLCB0aGlzLl93cmFwQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLkNsaWVudC5wcm90b3R5cGUsIFwicmVxdWVzdFwiLCB0aGlzLl93cmFwUmVxdWVzdC5iaW5kKHRoaXMsIFwiY2xpZW50XCIpKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLkNsaWVudC5wcm90b3R5cGUsIFwiY2xvc2VcIiwgdGhpcy5fd3JhcENsb3NlLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBtb2R1bGUgaGFzIFNlcnZlciBjbGFzc1xuICAgICAgICBpZiAobW9kdWxlLlNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIldyYXBwaW5nIE1DUCBTZXJ2ZXIgbWV0aG9kc1wiKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlLlNlcnZlci5wcm90b3R5cGUsIFwicmVxdWVzdFwiLCB0aGlzLl93cmFwUmVxdWVzdC5iaW5kKHRoaXMsIFwic2VydmVyXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vZHVsZS5DbGllbnQgJiYgIW1vZHVsZS5TZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcud2FybihcIm1hbnVhbGx5SW5zdHJ1bWVudCBjYWxsZWQgYnV0IG5vIENsaWVudCBvciBTZXJ2ZXIgZm91bmQgaW4gcHJvdmlkZWQgbW9kdWxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcGF0Y2hDbGllbnQobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBQYXRjaGluZyBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2NsaWVudEAke21vZHVsZVZlcnNpb259YCk7XG4gICAgICAgIC8vIFBhdGNoIENsaWVudCBjbGFzc1xuICAgICAgICBpZiAobW9kdWxlRXhwb3J0cy5DbGllbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoXCJQYXRjaGluZyBNQ1AgQ2xpZW50XCIpO1xuICAgICAgICAgICAgdGhpcy5fd3JhcChtb2R1bGVFeHBvcnRzLkNsaWVudC5wcm90b3R5cGUsIFwiY29ubmVjdFwiLCB0aGlzLl93cmFwQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMuX3dyYXAobW9kdWxlRXhwb3J0cy5DbGllbnQucHJvdG90eXBlLCBcInJlcXVlc3RcIiwgdGhpcy5fd3JhcFJlcXVlc3QuYmluZCh0aGlzLCBcImNsaWVudFwiKSk7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuQ2xpZW50LnByb3RvdHlwZSwgXCJjbG9zZVwiLCB0aGlzLl93cmFwQ2xvc2UuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUV4cG9ydHM7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdW5wYXRjaENsaWVudChtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFVucGF0Y2hpbmcgQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9jbGllbnRAJHttb2R1bGVWZXJzaW9ufWApO1xuICAgICAgICBpZiAobW9kdWxlRXhwb3J0cy5DbGllbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNsaWVudC5wcm90b3R5cGUsIFwiY29ubmVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNsaWVudC5wcm90b3R5cGUsIFwicmVxdWVzdFwiKTtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChtb2R1bGVFeHBvcnRzLkNsaWVudC5wcm90b3R5cGUsIFwiY2xvc2VcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwYXRjaFNlcnZlcihtb2R1bGVFeHBvcnRzLCBtb2R1bGVWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RpYWcuZGVidWcoYFBhdGNoaW5nIEBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgLy8gUGF0Y2ggU2VydmVyIGNsYXNzXG4gICAgICAgIGlmIChtb2R1bGVFeHBvcnRzLlNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIlBhdGNoaW5nIE1DUCBTZXJ2ZXJcIik7XG4gICAgICAgICAgICB0aGlzLl93cmFwKG1vZHVsZUV4cG9ydHMuU2VydmVyLnByb3RvdHlwZSwgXCJyZXF1ZXN0XCIsIHRoaXMuX3dyYXBSZXF1ZXN0LmJpbmQodGhpcywgXCJzZXJ2ZXJcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVFeHBvcnRzO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHVucGF0Y2hTZXJ2ZXIobW9kdWxlRXhwb3J0cywgbW9kdWxlVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKGBVbnBhdGNoaW5nIEBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyQCR7bW9kdWxlVmVyc2lvbn1gKTtcbiAgICAgICAgaWYgKG1vZHVsZUV4cG9ydHMuU2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLl91bndyYXAobW9kdWxlRXhwb3J0cy5TZXJ2ZXIucHJvdG90eXBlLCBcInJlcXVlc3RcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZVxuICAgIF93cmFwQ29ubmVjdChvcmlnaW5hbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLnRyYWNlci5zdGFydFNwYW4oXCJtY3AuY2xpZW50LnNlc3Npb25cIiwge1xuICAgICAgICAgICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX1NQQU5fS0lORCwgXCJzZXNzaW9uXCIpO1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9OQU1FLCBcIm1jcC5jbGllbnQuc2Vzc2lvblwiKTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNvbnRleHQgd2l0aCB0aGlzIHNlc3Npb24gc3BhblxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHNlc3Npb24gY29udGV4dCBhbmQgc3BhbiBvbiB0aGUgaW5zdGFuY2UgZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgdGhpc1tTRVNTSU9OX0NPTlRFWFRfU1lNQk9MXSA9IHNlc3Npb25Db250ZXh0O1xuICAgICAgICAgICAgdGhpc1tTRVNTSU9OX1NQQU5fU1lNQk9MXSA9IHNwYW47XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGVuZCB0aGUgc3BhbiBoZXJlIC0gaXQgc2hvdWxkIHN0YXkgb3BlbiBmb3IgdGhlIHNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiBjb25uZWN0aW9uIGVycm9yLCBlbmQgdGhlIHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgc3RvcmVkIHJlZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW1NFU1NJT05fQ09OVEVYVF9TWU1CT0xdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbU0VTU0lPTl9TUEFOX1NZTUJPTF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN5bmMgcmVzdWx0IC0gZG9uJ3QgZW5kIHRoZSBzcGFuXG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gT24gY29ubmVjdGlvbiBlcnJvciwgZW5kIHRoZSBzcGFuXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAoZXJyID09PSBudWxsIHx8IGVyciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyLm1lc3NhZ2UpIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBzdG9yZWQgcmVmZXJlbmNlc1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW1NFU1NJT05fQ09OVEVYVF9TWU1CT0xdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW1NFU1NJT05fU1BBTl9TWU1CT0xdO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgX3dyYXBSZXF1ZXN0KHNpZGUsIG9yaWdpbmFsKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gYXJnc1swXTtcbiAgICAgICAgICAgIGlmICghcmVxdWVzdCB8fCAhcmVxdWVzdC5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSByZXF1ZXN0Lm1ldGhvZDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHJlcXVlc3QucGFyYW1zO1xuICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHNwYW4gbmFtZSBiYXNlZCBvbiBtZXRob2RcbiAgICAgICAgICAgIGxldCBzcGFuTmFtZTtcbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwidG9vbHMvY2FsbFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLm5hbWUpIHx8IFwidW5rbm93blwiO1xuICAgICAgICAgICAgICAgIHNwYW5OYW1lID0gYCR7dG9vbE5hbWV9LnRvb2xgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Bhbk5hbWUgPSBgJHttZXRob2R9Lm1jcGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHN0b3JlZCBzZXNzaW9uIGNvbnRleHQgYXMgcGFyZW50IGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB0aGlzW1NFU1NJT05fQ09OVEVYVF9TWU1CT0xdO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29udGV4dCA9IHNlc3Npb25Db250ZXh0IHx8IGNvbnRleHQuYWN0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gcGx1Z2luLnRyYWNlci5zdGFydFNwYW4oc3Bhbk5hbWUsIHtcbiAgICAgICAgICAgICAgICBraW5kOiBzaWRlID09PSBcImNsaWVudFwiID8gU3BhbktpbmQuQ0xJRU5UIDogU3BhbktpbmQuU0VSVkVSLFxuICAgICAgICAgICAgfSwgcGFyZW50Q29udGV4dCk7XG4gICAgICAgICAgICAvLyBPbmx5IHNldCBzcGFuIGtpbmQgYW5kIGVudGl0eSBuYW1lIGZvciB0b29sIGNhbGxzIChtYXRjaGluZyBQeXRob24gaW1wbGVtZW50YXRpb24pXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInRvb2xzL2NhbGxcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb2xOYW1lID0gKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5uYW1lKSB8fCBcInVua25vd25cIjtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfU1BBTl9LSU5ELCBcInRvb2xcIik7XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9OQU1FLCB0b29sTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZGQgaW5wdXQgYXR0cmlidXRlcyBpZiB0cmFjZUNvbnRlbnQgaXMgZW5hYmxlZFxuICAgICAgICAgICAgaWYgKHBsdWdpbi5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuSW5wdXQgPSBwbHVnaW4uX2V4dHJhY3RDbGVhbklucHV0KG1ldGhvZCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFuSW5wdXQgJiYgT2JqZWN0LmtleXMoY2xlYW5JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9JTlBVVCwgSlNPTi5zdHJpbmdpZnkoY2xlYW5JbnB1dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2RpYWcuZGVidWcoXCJFcnJvciBleHRyYWN0aW5nIGlucHV0OlwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IHBsdWdpbi5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhlY0NvbnRleHQgPSB0cmFjZS5zZXRTcGFuKGNvbnRleHQuYWN0aXZlKCksIHNwYW4pO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQud2l0aChleGVjQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLl9oYW5kbGVSZXN1bHQoc3BhbiwgbWV0aG9kLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5faGFuZGxlUmVzdWx0KHNwYW4sIG1ldGhvZCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IChlcnIgPT09IG51bGwgfHwgZXJyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnIubWVzc2FnZSkgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gICAgX3dyYXBDbG9zZShvcmlnaW5hbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25TcGFuID0gdGhpc1tTRVNTSU9OX1NQQU5fU1lNQk9MXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHByb21pc2VcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIHRoZSBzZXNzaW9uIHNwYW4gb24gc3VjY2Vzc2Z1bCBjbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb25TcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbU0VTU0lPTl9DT05URVhUX1NZTUJPTF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbU0VTU0lPTl9TUEFOX1NZTUJPTF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmQgdGhlIHNlc3Npb24gc3BhbiB3aXRoIGVycm9yIG9uIGNsb3NlIGZhaWx1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uU3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25TcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbU0VTU0lPTl9DT05URVhUX1NZTUJPTF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbU0VTU0lPTl9TUEFOX1NZTUJPTF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN5bmMgcmVzdWx0IC0gZW5kIHRoZSBzZXNzaW9uIHNwYW5cbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvblNwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tTRVNTSU9OX0NPTlRFWFRfU1lNQk9MXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbU0VTU0lPTl9TUEFOX1NZTUJPTF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBFbmQgdGhlIHNlc3Npb24gc3BhbiB3aXRoIGVycm9yXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25TcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogKGVyciA9PT0gbnVsbCB8fCBlcnIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVyci5tZXNzYWdlKSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW1NFU1NJT05fQ09OVEVYVF9TWU1CT0xdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tTRVNTSU9OX1NQQU5fU1lNQk9MXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIF9oYW5kbGVSZXN1bHQoc3BhbiwgbWV0aG9kLCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQWRkIG91dHB1dCBhdHRyaWJ1dGVzIGlmIHRyYWNlQ29udGVudCBpcyBlbmFibGVkXG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2VuZFByb21wdHMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuT3V0cHV0ID0gdGhpcy5fZXh0cmFjdENsZWFuT3V0cHV0KG1ldGhvZCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICBpZiAoY2xlYW5PdXRwdXQgJiYgT2JqZWN0LmtleXMoY2xlYW5PdXRwdXQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9PVVRQVVQsIEpTT04uc3RyaW5naWZ5KGNsZWFuT3V0cHV0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGVycm9yIHJlc3VsdHNcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1jcFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAobWNwUmVzdWx0ID09PSBudWxsIHx8IG1jcFJlc3VsdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWNwUmVzdWx0LmlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gKChfYiA9IChfYSA9IG1jcFJlc3VsdC5jb250ZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMF0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50ZXh0KSB8fCBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIkVycm9yIGhhbmRsaW5nIHJlc3VsdDpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgKF9kID0gKF9jID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jYWxsKF9jLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9leHRyYWN0Q2xlYW5JbnB1dChtZXRob2QsIHBhcmFtcykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInRvb2xzL2NhbGxcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBwYXJhbXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29sUGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIGlmICh0b29sUGFyYW1zLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRvb2xfbmFtZSA9IHRvb2xQYXJhbXMubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRvb2xQYXJhbXMuYXJndW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcmd1bWVudHMgPSB0b29sUGFyYW1zLmFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0b29scy9saXN0XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2QgPT09IFwicmVzb3VyY2VzL3JlYWRcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICYmIHBhcmFtcyAhPT0gbnVsbCAmJiBcInVyaVwiIGluIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBwYXJhbXMudXJpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2QgPT09IFwicmVzb3VyY2VzL2xpc3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJwcm9tcHRzL2dldFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgJiYgcGFyYW1zICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm5hbWVcIiBpbiBwYXJhbXMgPyBwYXJhbXMubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogXCJhcmd1bWVudHNcIiBpbiBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcmFtcy5hcmd1bWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInByb21wdHMvbGlzdFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIG90aGVyIG1ldGhvZHMsIHRyeSB0byBzZXJpYWxpemUgcGFyYW1zIGNsZWFubHlcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiAmJiBwYXJhbXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xlYW5QYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUGFyYW1zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUGFyYW1zW2tleV0gPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGVhblBhcmFtcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFyYW1zOiBTdHJpbmcocGFyYW1zKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZyhcIkVycm9yIGV4dHJhY3RpbmcgY2xlYW4gaW5wdXQ6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMuX2NvbmZpZykuZXhjZXB0aW9uTG9nZ2VyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgfVxuICAgIF9leHRyYWN0Q2xlYW5PdXRwdXQobWV0aG9kLCByZXN1bHQpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHQ6IFN0cmluZyhyZXN1bHQpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtY3BSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInRvb2xzL2NhbGxcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuICAgICAgICAgICAgICAgIGlmIChtY3BSZXN1bHQuY29udGVudCAmJlxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KG1jcFJlc3VsdC5jb250ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICBtY3BSZXN1bHQuY29udGVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRJdGVtID0gbWNwUmVzdWx0LmNvbnRlbnRbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50SXRlbS50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5yZXN1bHQgPSBjb250ZW50SXRlbS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRlbnRJdGVtLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5yZXN1bHQgPSBjb250ZW50SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWNwUmVzdWx0LmlzRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuaXNfZXJyb3IgPSBtY3BSZXN1bHQuaXNFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0b29scy9saXN0XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSB7IHRvb2xzOiBbXSB9O1xuICAgICAgICAgICAgICAgIGlmIChtY3BSZXN1bHQudG9vbHMgJiYgQXJyYXkuaXNBcnJheShtY3BSZXN1bHQudG9vbHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC50b29scyA9IG1jcFJlc3VsdC50b29scy5tYXAoKHRvb2wpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdG9vbC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInJlc291cmNlcy9yZWFkXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAobWNwUmVzdWx0LmNvbnRlbnRzICYmIEFycmF5LmlzQXJyYXkobWNwUmVzdWx0LmNvbnRlbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuY29udGVudHMgPSBtY3BSZXN1bHQuY29udGVudHMubWFwKChjb250ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmk6IGNvbnRlbnQudXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBjb250ZW50Lm1pbWVUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IChfYSA9IGNvbnRlbnQudGV4dCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnN0cmluZygwLCAxMDAwKSwgLy8gTGltaXQgdGV4dCB0byAxMDAwIGNoYXJzXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2QgPT09IFwicmVzb3VyY2VzL2xpc3RcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHsgcmVzb3VyY2VzOiBbXSB9O1xuICAgICAgICAgICAgICAgIGlmIChtY3BSZXN1bHQucmVzb3VyY2VzICYmIEFycmF5LmlzQXJyYXkobWNwUmVzdWx0LnJlc291cmNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnJlc291cmNlcyA9IG1jcFJlc3VsdC5yZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogcmVzb3VyY2UudXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXNvdXJjZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInByb21wdHMvZ2V0XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAobWNwUmVzdWx0Lm1lc3NhZ2VzICYmIEFycmF5LmlzQXJyYXkobWNwUmVzdWx0Lm1lc3NhZ2VzKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQubWVzc2FnZXMgPSBtY3BSZXN1bHQubWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWVzc2FnZS5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlLmNvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2QgPT09IFwicHJvbXB0cy9saXN0XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSB7IHByb21wdHM6IFtdIH07XG4gICAgICAgICAgICAgICAgaWYgKG1jcFJlc3VsdC5wcm9tcHRzICYmIEFycmF5LmlzQXJyYXkobWNwUmVzdWx0LnByb21wdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wcm9tcHRzID0gbWNwUmVzdWx0LnByb21wdHMubWFwKChwcm9tcHQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwcm9tcHQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9tcHQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZvciBvdGhlciBtZXRob2RzLCB0cnkgdG8gc2VyaWFsaXplIHJlc3VsdCBjbGVhbmx5XG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5SZXN1bHQgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoXCJfXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoX2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlc3VsdFtrZXldID0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjbGVhblJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWcuZGVidWcoXCJFcnJvciBleHRyYWN0aW5nIGNsZWFuIG91dHB1dDpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgKF9iID0gKF9hID0gdGhpcy5fY29uZmlnKS5leGNlcHRpb25Mb2dnZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Nob3VsZFNlbmRQcm9tcHRzKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgPSBjb250ZXh0XG4gICAgICAgICAgICAuYWN0aXZlKClcbiAgICAgICAgICAgIC5nZXRWYWx1ZShDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UKTtcbiAgICAgICAgaWYgKGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBjb250ZXh0U2hvdWxkU2VuZFByb21wdHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy50cmFjZUNvbnRlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLl9jb25maWcudHJhY2VDb250ZW50XG4gICAgICAgICAgICA6IHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgeyBNY3BJbnN0cnVtZW50YXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsCiAgICAiY29uc3Qgbm9kZUZldGNoID0gcmVxdWlyZSgnbm9kZS1mZXRjaCcpXG5jb25zdCByZWFsRmV0Y2ggPSBub2RlRmV0Y2guZGVmYXVsdCB8fCBub2RlRmV0Y2hcblxuY29uc3QgZmV0Y2ggPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIC8vIFN1cHBvcnQgc2NoZW1hbGVzcyBVUklzIG9uIHRoZSBzZXJ2ZXIgZm9yIHBhcml0eSB3aXRoIHRoZSBicm93c2VyLlxuICAvLyBFeDogLy9naXRodWIuY29tLyAtPiBodHRwczovL2dpdGh1Yi5jb20vXG4gIGlmICgvXlxcL1xcLy8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gJ2h0dHBzOicgKyB1cmxcbiAgfVxuICByZXR1cm4gcmVhbEZldGNoLmNhbGwodGhpcywgdXJsLCBvcHRpb25zKVxufVxuXG5mZXRjaC5wb255ZmlsbCA9IHRydWVcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmV0Y2hcbmV4cG9ydHMuZmV0Y2ggPSBmZXRjaFxuZXhwb3J0cy5IZWFkZXJzID0gbm9kZUZldGNoLkhlYWRlcnNcbmV4cG9ydHMuUmVxdWVzdCA9IG5vZGVGZXRjaC5SZXF1ZXN0XG5leHBvcnRzLlJlc3BvbnNlID0gbm9kZUZldGNoLlJlc3BvbnNlXG5cbi8vIE5lZWRlZCBmb3IgVHlwZVNjcmlwdCBjb25zdW1lcnMgd2l0aG91dCBlc01vZHVsZUludGVyb3AuXG5leHBvcnRzLmRlZmF1bHQgPSBmZXRjaFxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZldGNoLCBkZWZhdWx0cykge1xuICBkZWZhdWx0cyA9IGRlZmF1bHRzIHx8IHt9O1xuICBpZiAodHlwZW9mIGZldGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ2ZldGNoIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkZWZhdWx0cyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignZGVmYXVsdHMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0cy5yZXRyaWVzICE9PSB1bmRlZmluZWQgJiYgIWlzUG9zaXRpdmVJbnRlZ2VyKGRlZmF1bHRzLnJldHJpZXMpKSB7XG4gICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ3JldHJpZXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0cy5yZXRyeURlbGF5ICE9PSB1bmRlZmluZWQgJiYgIWlzUG9zaXRpdmVJbnRlZ2VyKGRlZmF1bHRzLnJldHJ5RGVsYXkpICYmIHR5cGVvZiBkZWZhdWx0cy5yZXRyeURlbGF5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ3JldHJ5RGVsYXkgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cblxuICBpZiAoZGVmYXVsdHMucmV0cnlPbiAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KGRlZmF1bHRzLnJldHJ5T24pICYmIHR5cGVvZiBkZWZhdWx0cy5yZXRyeU9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ3JldHJ5T24gcHJvcGVydHkgZXhwZWN0cyBhbiBhcnJheSBvciBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGJhc2VEZWZhdWx0cyA9IHtcbiAgICByZXRyaWVzOiAzLFxuICAgIHJldHJ5RGVsYXk6IDEwMDAsXG4gICAgcmV0cnlPbjogW10sXG4gIH07XG5cbiAgZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKGJhc2VEZWZhdWx0cywgZGVmYXVsdHMpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBmZXRjaFJldHJ5KGlucHV0LCBpbml0KSB7XG4gICAgdmFyIHJldHJpZXMgPSBkZWZhdWx0cy5yZXRyaWVzO1xuICAgIHZhciByZXRyeURlbGF5ID0gZGVmYXVsdHMucmV0cnlEZWxheTtcbiAgICB2YXIgcmV0cnlPbiA9IGRlZmF1bHRzLnJldHJ5T247XG5cbiAgICBpZiAoaW5pdCAmJiBpbml0LnJldHJpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGlzUG9zaXRpdmVJbnRlZ2VyKGluaXQucmV0cmllcykpIHtcbiAgICAgICAgcmV0cmllcyA9IGluaXQucmV0cmllcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdyZXRyaWVzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgaW5pdC5yZXRyeURlbGF5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpc1Bvc2l0aXZlSW50ZWdlcihpbml0LnJldHJ5RGVsYXkpIHx8ICh0eXBlb2YgaW5pdC5yZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICByZXRyeURlbGF5ID0gaW5pdC5yZXRyeURlbGF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ3JldHJ5RGVsYXkgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgaW5pdC5yZXRyeU9uKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0LnJldHJ5T24pIHx8ICh0eXBlb2YgaW5pdC5yZXRyeU9uID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICByZXRyeU9uID0gaW5pdC5yZXRyeU9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ3JldHJ5T24gcHJvcGVydHkgZXhwZWN0cyBhbiBhcnJheSBvciBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgd3JhcHBlZEZldGNoID0gZnVuY3Rpb24gKGF0dGVtcHQpIHtcbiAgICAgICAgLy8gQXMgb2Ygbm9kZSAxOCwgdGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIHNpbmNlIG5vZGUgY29tZXMgd2l0aCBuYXRpdmUgc3VwcG9ydCBmb3IgZmV0Y2g6XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHZhciBfaW5wdXQgPVxuICAgICAgICAgIHR5cGVvZiBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3RcbiAgICAgICAgICAgID8gaW5wdXQuY2xvbmUoKVxuICAgICAgICAgICAgOiBpbnB1dDtcbiAgICAgICAgZmV0Y2goX2lucHV0LCBpbml0KVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmV0cnlPbikgJiYgcmV0cnlPbi5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cykgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmV0cnlPbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0cnlPbihhdHRlbXB0LCBudWxsLCByZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmV0cnlPblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJldHJ5T25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHJ5KGF0dGVtcHQsIG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgICAgICAgICByZXRyeShhdHRlbXB0LCBudWxsLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0cnlPbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXRyeU9uKGF0dGVtcHQsIGVycm9yLCBudWxsKSlcbiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXRyeU9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmV0cnlPblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0cnkoYXR0ZW1wdCwgZXJyb3IsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRlbXB0IDwgcmV0cmllcykge1xuICAgICAgICAgICAgICByZXRyeShhdHRlbXB0LCBlcnJvciwgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gcmV0cnkoYXR0ZW1wdCwgZXJyb3IsIHJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBkZWxheSA9ICh0eXBlb2YgcmV0cnlEZWxheSA9PT0gJ2Z1bmN0aW9uJykgP1xuICAgICAgICAgIHJldHJ5RGVsYXkoYXR0ZW1wdCwgZXJyb3IsIHJlc3BvbnNlKSA6IHJldHJ5RGVsYXk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHdyYXBwZWRGZXRjaCgrK2F0dGVtcHQpO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICB9XG5cbiAgICAgIHdyYXBwZWRGZXRjaCgwKTtcbiAgICB9KTtcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwO1xufVxuXG5mdW5jdGlvbiBBcmd1bWVudEVycm9yKG1lc3NhZ2UpIHtcbiAgdGhpcy5uYW1lID0gJ0FyZ3VtZW50RXJyb3InO1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBlc2NhcGVNYXAgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gICdcXCcnOiAnJiMzOTsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcXFxcJzogJyYjOTI7J1xufTtcbnZhciBlc2NhcGVSZWdleCA9IC9bJlwiJzw+XFxcXF0vZztcbnZhciBfZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5mdW5jdGlvbiBoYXNPd25Qcm9wKG9iaiwgaykge1xuICByZXR1cm4gT2JqUHJvdG8uaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGspO1xufVxuX2V4cG9ydHMuaGFzT3duUHJvcCA9IGhhc093blByb3A7XG5mdW5jdGlvbiBsb29rdXBFc2NhcGUoY2gpIHtcbiAgcmV0dXJuIGVzY2FwZU1hcFtjaF07XG59XG5mdW5jdGlvbiBfcHJldHRpZnlFcnJvcihwYXRoLCB3aXRoSW50ZXJuYWxzLCBlcnIpIHtcbiAgaWYgKCFlcnIuVXBkYXRlKSB7XG4gICAgLy8gbm90IG9uZSBvZiBvdXJzLCBjYXN0IGl0XG4gICAgZXJyID0gbmV3IF9leHBvcnRzLlRlbXBsYXRlRXJyb3IoZXJyKTtcbiAgfVxuICBlcnIuVXBkYXRlKHBhdGgpO1xuXG4gIC8vIFVubGVzcyB0aGV5IG1hcmtlZCB0aGUgZGV2IGZsYWcsIHNob3cgdGhlbSBhIHRyYWNlIGZyb20gaGVyZVxuICBpZiAoIXdpdGhJbnRlcm5hbHMpIHtcbiAgICB2YXIgb2xkID0gZXJyO1xuICAgIGVyciA9IG5ldyBFcnJvcihvbGQubWVzc2FnZSk7XG4gICAgZXJyLm5hbWUgPSBvbGQubmFtZTtcbiAgfVxuICByZXR1cm4gZXJyO1xufVxuX2V4cG9ydHMuX3ByZXR0aWZ5RXJyb3IgPSBfcHJldHRpZnlFcnJvcjtcbmZ1bmN0aW9uIFRlbXBsYXRlRXJyb3IobWVzc2FnZSwgbGluZW5vLCBjb2xubykge1xuICB2YXIgZXJyO1xuICB2YXIgY2F1c2U7XG4gIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBjYXVzZSA9IG1lc3NhZ2U7XG4gICAgbWVzc2FnZSA9IGNhdXNlLm5hbWUgKyBcIjogXCIgKyBjYXVzZS5tZXNzYWdlO1xuICB9XG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICBlcnIgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGVyciwgVGVtcGxhdGVFcnJvci5wcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIGVyciA9IHRoaXM7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ21lc3NhZ2UnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyLCAnbmFtZScsIHtcbiAgICB2YWx1ZTogJ1RlbXBsYXRlIHJlbmRlciBlcnJvcidcbiAgfSk7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbiAgdmFyIGdldFN0YWNrO1xuICBpZiAoY2F1c2UpIHtcbiAgICB2YXIgc3RhY2tEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjYXVzZSwgJ3N0YWNrJyk7XG4gICAgZ2V0U3RhY2sgPSBzdGFja0Rlc2NyaXB0b3IgJiYgKHN0YWNrRGVzY3JpcHRvci5nZXQgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHN0YWNrRGVzY3JpcHRvci52YWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoIWdldFN0YWNrKSB7XG4gICAgICBnZXRTdGFjayA9IGZ1bmN0aW9uIGdldFN0YWNrKCkge1xuICAgICAgICByZXR1cm4gY2F1c2Uuc3RhY2s7XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc3RhY2sgPSBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2s7XG4gICAgZ2V0U3RhY2sgPSBmdW5jdGlvbiBnZXRTdGFjaygpIHtcbiAgICAgIHJldHVybiBzdGFjaztcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsICdzdGFjaycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRTdGFjay5jYWxsKGVycik7XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgJ2NhdXNlJywge1xuICAgIHZhbHVlOiBjYXVzZVxuICB9KTtcbiAgZXJyLmxpbmVubyA9IGxpbmVubztcbiAgZXJyLmNvbG5vID0gY29sbm87XG4gIGVyci5maXJzdFVwZGF0ZSA9IHRydWU7XG4gIGVyci5VcGRhdGUgPSBmdW5jdGlvbiBVcGRhdGUocGF0aCkge1xuICAgIHZhciBtc2cgPSAnKCcgKyAocGF0aCB8fCAndW5rbm93biBwYXRoJykgKyAnKSc7XG5cbiAgICAvLyBvbmx5IHNob3cgbGluZW5vICsgY29sbm8gbmV4dCB0byBwYXRoIG9mIHRlbXBsYXRlXG4gICAgLy8gd2hlcmUgZXJyb3Igb2NjdXJyZWRcbiAgICBpZiAodGhpcy5maXJzdFVwZGF0ZSkge1xuICAgICAgaWYgKHRoaXMubGluZW5vICYmIHRoaXMuY29sbm8pIHtcbiAgICAgICAgbXNnICs9IFwiIFtMaW5lIFwiICsgdGhpcy5saW5lbm8gKyBcIiwgQ29sdW1uIFwiICsgdGhpcy5jb2xubyArIFwiXVwiO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbmVubykge1xuICAgICAgICBtc2cgKz0gXCIgW0xpbmUgXCIgKyB0aGlzLmxpbmVubyArIFwiXVwiO1xuICAgICAgfVxuICAgIH1cbiAgICBtc2cgKz0gJ1xcbiAnO1xuICAgIGlmICh0aGlzLmZpcnN0VXBkYXRlKSB7XG4gICAgICBtc2cgKz0gJyAnO1xuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2cgKyAodGhpcy5tZXNzYWdlIHx8ICcnKTtcbiAgICB0aGlzLmZpcnN0VXBkYXRlID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJldHVybiBlcnI7XG59XG5pZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihUZW1wbGF0ZUVycm9yLnByb3RvdHlwZSwgRXJyb3IucHJvdG90eXBlKTtcbn0gZWxzZSB7XG4gIFRlbXBsYXRlRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IFRlbXBsYXRlRXJyb3JcbiAgICB9XG4gIH0pO1xufVxuX2V4cG9ydHMuVGVtcGxhdGVFcnJvciA9IFRlbXBsYXRlRXJyb3I7XG5mdW5jdGlvbiBlc2NhcGUodmFsKSB7XG4gIHJldHVybiB2YWwucmVwbGFjZShlc2NhcGVSZWdleCwgbG9va3VwRXNjYXBlKTtcbn1cbl9leHBvcnRzLmVzY2FwZSA9IGVzY2FwZTtcbmZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiBPYmpQcm90by50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5fZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBPYmpQcm90by50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5fZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcbmZ1bmN0aW9uIGlzU3RyaW5nKG9iaikge1xuICByZXR1cm4gT2JqUHJvdG8udG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBTdHJpbmddJztcbn1cbl9leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgcmV0dXJuIE9ialByb3RvLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5fZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gYXR0clxuICogQHJldHVybnMgeyhzdHJpbmd8bnVtYmVyKVtdfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX3ByZXBhcmVBdHRyaWJ1dGVQYXJ0cyhhdHRyKSB7XG4gIGlmICghYXR0cikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAodHlwZW9mIGF0dHIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGF0dHIuc3BsaXQoJy4nKTtcbiAgfVxuICByZXR1cm4gW2F0dHJdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSAgIGF0dHJpYnV0ZSAgICAgIEF0dHJpYnV0ZSB2YWx1ZS4gRG90cyBhbGxvd2VkLlxuICogQHJldHVybnMge2Z1bmN0aW9uKE9iamVjdCk6ICp9XG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJHZXR0ZXIoYXR0cmlidXRlKSB7XG4gIHZhciBwYXJ0cyA9IF9wcmVwYXJlQXR0cmlidXRlUGFydHMoYXR0cmlidXRlKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGF0dHJHZXR0ZXIoaXRlbSkge1xuICAgIHZhciBfaXRlbSA9IGl0ZW07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgLy8gSWYgaXRlbSBpcyBub3QgYW4gb2JqZWN0LCBhbmQgd2Ugc3RpbGwgZ290IHBhcnRzIHRvIGhhbmRsZSwgaXQgbWVhbnNcbiAgICAgIC8vIHRoYXQgc29tZXRoaW5nIGdvZXMgd3JvbmcuIEp1c3Qgcm9sbCBvdXQgdG8gdW5kZWZpbmVkIGluIHRoYXQgY2FzZS5cbiAgICAgIGlmIChoYXNPd25Qcm9wKF9pdGVtLCBwYXJ0KSkge1xuICAgICAgICBfaXRlbSA9IF9pdGVtW3BhcnRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9pdGVtO1xuICB9O1xufVxuX2V4cG9ydHMuZ2V0QXR0ckdldHRlciA9IGdldEF0dHJHZXR0ZXI7XG5mdW5jdGlvbiBncm91cEJ5KG9iaiwgdmFsLCB0aHJvd09uVW5kZWZpbmVkKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIGl0ZXJhdG9yID0gaXNGdW5jdGlvbih2YWwpID8gdmFsIDogZ2V0QXR0ckdldHRlcih2YWwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWx1ZSA9IG9ialtpXTtcbiAgICB2YXIga2V5ID0gaXRlcmF0b3IodmFsdWUsIGkpO1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCAmJiB0aHJvd09uVW5kZWZpbmVkID09PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZ3JvdXBieTogYXR0cmlidXRlIFxcXCJcIiArIHZhbCArIFwiXFxcIiByZXNvbHZlZCB0byB1bmRlZmluZWRcIik7XG4gICAgfVxuICAgIChyZXN1bHRba2V5XSB8fCAocmVzdWx0W2tleV0gPSBbXSkpLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fZXhwb3J0cy5ncm91cEJ5ID0gZ3JvdXBCeTtcbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopO1xufVxuX2V4cG9ydHMudG9BcnJheSA9IHRvQXJyYXk7XG5mdW5jdGlvbiB3aXRob3V0KGFycmF5KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKCFhcnJheSkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGNvbnRhaW5zID0gdG9BcnJheShhcmd1bWVudHMpLnNsaWNlKDEpO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaW5kZXhPZihjb250YWlucywgYXJyYXlbaW5kZXhdKSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2luZGV4XSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fZXhwb3J0cy53aXRob3V0ID0gd2l0aG91dDtcbmZ1bmN0aW9uIHJlcGVhdChjaGFyXywgbikge1xuICB2YXIgc3RyID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgc3RyICs9IGNoYXJfO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5fZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQ7XG5mdW5jdGlvbiBlYWNoKG9iaiwgZnVuYywgY29udGV4dCkge1xuICBpZiAob2JqID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5UHJvdG8uZm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gQXJyYXlQcm90by5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goZnVuYywgY29udGV4dCk7XG4gIH0gZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZ1bmMuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9XG59XG5fZXhwb3J0cy5lYWNoID0gZWFjaDtcbmZ1bmN0aW9uIG1hcChvYmosIGZ1bmMpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgaWYgKEFycmF5UHJvdG8ubWFwICYmIG9iai5tYXAgPT09IEFycmF5UHJvdG8ubWFwKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoZnVuYyk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoXSA9IGZ1bmMob2JqW2ldLCBpKTtcbiAgfVxuICBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHtcbiAgICByZXN1bHRzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5fZXhwb3J0cy5tYXAgPSBtYXA7XG5mdW5jdGlvbiBhc3luY0l0ZXIoYXJyLCBpdGVyLCBjYikge1xuICB2YXIgaSA9IC0xO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGkrKztcbiAgICBpZiAoaSA8IGFyci5sZW5ndGgpIHtcbiAgICAgIGl0ZXIoYXJyW2ldLCBpLCBuZXh0LCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG4gIG5leHQoKTtcbn1cbl9leHBvcnRzLmFzeW5jSXRlciA9IGFzeW5jSXRlcjtcbmZ1bmN0aW9uIGFzeW5jRm9yKG9iaiwgaXRlciwgY2IpIHtcbiAgdmFyIGtleXMgPSBrZXlzXyhvYmogfHwge30pO1xuICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gLTE7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgaSsrO1xuICAgIHZhciBrID0ga2V5c1tpXTtcbiAgICBpZiAoaSA8IGxlbikge1xuICAgICAgaXRlcihrLCBvYmpba10sIGksIGxlbiwgbmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG4gIG5leHQoKTtcbn1cbl9leHBvcnRzLmFzeW5jRm9yID0gYXN5bmNGb3I7XG5mdW5jdGlvbiBpbmRleE9mKGFyciwgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFyciB8fCBbXSwgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KTtcbn1cbl9leHBvcnRzLmluZGV4T2YgPSBpbmRleE9mO1xuZnVuY3Rpb24ga2V5c18ob2JqKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4gIHZhciBhcnIgPSBbXTtcbiAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICBhcnIucHVzaChrKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cbl9leHBvcnRzLmtleXMgPSBrZXlzXztcbmZ1bmN0aW9uIF9lbnRyaWVzKG9iaikge1xuICByZXR1cm4ga2V5c18ob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gW2ssIG9ialtrXV07XG4gIH0pO1xufVxuX2V4cG9ydHMuX2VudHJpZXMgPSBfZW50cmllcztcbmZ1bmN0aW9uIF92YWx1ZXMob2JqKSB7XG4gIHJldHVybiBrZXlzXyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufVxuX2V4cG9ydHMuX3ZhbHVlcyA9IF92YWx1ZXM7XG5mdW5jdGlvbiBleHRlbmQob2JqMSwgb2JqMikge1xuICBvYmoxID0gb2JqMSB8fCB7fTtcbiAga2V5c18ob2JqMikuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIG9iajFba10gPSBvYmoyW2tdO1xuICB9KTtcbiAgcmV0dXJuIG9iajE7XG59XG5fZXhwb3J0cy5fYXNzaWduID0gX2V4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO1xuZnVuY3Rpb24gaW5PcGVyYXRvcihrZXksIHZhbCkge1xuICBpZiAoaXNBcnJheSh2YWwpIHx8IGlzU3RyaW5nKHZhbCkpIHtcbiAgICByZXR1cm4gdmFsLmluZGV4T2Yoa2V5KSAhPT0gLTE7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgIHJldHVybiBrZXkgaW4gdmFsO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBcImluXCIgb3BlcmF0b3IgdG8gc2VhcmNoIGZvciBcIicgKyBrZXkgKyAnXCIgaW4gdW5leHBlY3RlZCB0eXBlcy4nKTtcbn1cbl9leHBvcnRzLmluT3BlcmF0b3IgPSBpbk9wZXJhdG9yOyIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkb21haW47IC8vIFRoZSBkb21haW4gbW9kdWxlIGlzIGV4ZWN1dGVkIG9uIGRlbWFuZFxudmFyIGhhc1NldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIjtcblxuLy8gVXNlIHRoZSBmYXN0ZXN0IG1lYW5zIHBvc3NpYmxlIHRvIGV4ZWN1dGUgYSB0YXNrIGluIGl0cyBvd24gdHVybiwgd2l0aFxuLy8gcHJpb3JpdHkgb3ZlciBvdGhlciBldmVudHMgaW5jbHVkaW5nIG5ldHdvcmsgSU8gZXZlbnRzIGluIE5vZGUuanMuXG4vL1xuLy8gQW4gZXhjZXB0aW9uIHRocm93biBieSBhIHRhc2sgd2lsbCBwZXJtYW5lbnRseSBpbnRlcnJ1cHQgdGhlIHByb2Nlc3Npbmcgb2Zcbi8vIHN1YnNlcXVlbnQgdGFza3MuIFRoZSBoaWdoZXIgbGV2ZWwgYGFzYXBgIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBpZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBhIHRhc2ssIHRoYXQgdGhlIHRhc2sgcXVldWUgd2lsbCBjb250aW51ZSBmbHVzaGluZyBhc1xuLy8gc29vbiBhcyBwb3NzaWJsZSwgYnV0IGlmIHlvdSB1c2UgYHJhd0FzYXBgIGRpcmVjdGx5LCB5b3UgYXJlIHJlc3BvbnNpYmxlIHRvXG4vLyBlaXRoZXIgZW5zdXJlIHRoYXQgbm8gZXhjZXB0aW9ucyBhcmUgdGhyb3duIGZyb20geW91ciB0YXNrLCBvciB0byBtYW51YWxseVxuLy8gY2FsbCBgcmF3QXNhcC5yZXF1ZXN0Rmx1c2hgIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG5tb2R1bGUuZXhwb3J0cyA9IHJhd0FzYXA7XG5mdW5jdGlvbiByYXdBc2FwKHRhc2spIHtcbiAgICBpZiAoIXF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXF1ZXN0Rmx1c2goKTtcbiAgICAgICAgZmx1c2hpbmcgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBBdm9pZHMgYSBmdW5jdGlvbiBjYWxsXG4gICAgcXVldWVbcXVldWUubGVuZ3RoXSA9IHRhc2s7XG59XG5cbnZhciBxdWV1ZSA9IFtdO1xuLy8gT25jZSBhIGZsdXNoIGhhcyBiZWVuIHJlcXVlc3RlZCwgbm8gZnVydGhlciBjYWxscyB0byBgcmVxdWVzdEZsdXNoYCBhcmVcbi8vIG5lY2Vzc2FyeSB1bnRpbCB0aGUgbmV4dCBgZmx1c2hgIGNvbXBsZXRlcy5cbnZhciBmbHVzaGluZyA9IGZhbHNlO1xuLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBuZXh0IHRhc2sgdG8gZXhlY3V0ZSBpbiB0aGUgdGFzayBxdWV1ZS4gVGhpcyBpc1xuLy8gcHJlc2VydmVkIGJldHdlZW4gY2FsbHMgdG8gYGZsdXNoYCBzbyB0aGF0IGl0IGNhbiBiZSByZXN1bWVkIGlmXG4vLyBhIHRhc2sgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbnZhciBpbmRleCA9IDA7XG4vLyBJZiBhIHRhc2sgc2NoZWR1bGVzIGFkZGl0aW9uYWwgdGFza3MgcmVjdXJzaXZlbHksIHRoZSB0YXNrIHF1ZXVlIGNhbiBncm93XG4vLyB1bmJvdW5kZWQuIFRvIHByZXZlbnQgbWVtb3J5IGV4Y2F1c3Rpb24sIHRoZSB0YXNrIHF1ZXVlIHdpbGwgcGVyaW9kaWNhbGx5XG4vLyB0cnVuY2F0ZSBhbHJlYWR5LWNvbXBsZXRlZCB0YXNrcy5cbnZhciBjYXBhY2l0eSA9IDEwMjQ7XG5cbi8vIFRoZSBmbHVzaCBmdW5jdGlvbiBwcm9jZXNzZXMgYWxsIHRhc2tzIHRoYXQgaGF2ZSBiZWVuIHNjaGVkdWxlZCB3aXRoXG4vLyBgcmF3QXNhcGAgdW5sZXNzIGFuZCB1bnRpbCBvbmUgb2YgdGhvc2UgdGFza3MgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbi8vIElmIGEgdGFzayB0aHJvd3MgYW4gZXhjZXB0aW9uLCBgZmx1c2hgIGVuc3VyZXMgdGhhdCBpdHMgc3RhdGUgd2lsbCByZW1haW5cbi8vIGNvbnNpc3RlbnQgYW5kIHdpbGwgcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmIHdoZW4gY2FsbGVkIGFnYWluLlxuLy8gSG93ZXZlciwgYGZsdXNoYCBkb2VzIG5vdCBtYWtlIGFueSBhcnJhbmdlbWVudHMgdG8gYmUgY2FsbGVkIGFnYWluIGlmIGFuXG4vLyBleGNlcHRpb24gaXMgdGhyb3duLlxuZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgd2hpbGUgKGluZGV4IDwgcXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgLy8gQWR2YW5jZSB0aGUgaW5kZXggYmVmb3JlIGNhbGxpbmcgdGhlIHRhc2suIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdpbGxcbiAgICAgICAgLy8gYmVnaW4gZmx1c2hpbmcgb24gdGhlIG5leHQgdGFzayB0aGUgdGFzayB0aHJvd3MgYW4gZXJyb3IuXG4gICAgICAgIGluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgICBxdWV1ZVtjdXJyZW50SW5kZXhdLmNhbGwoKTtcbiAgICAgICAgLy8gUHJldmVudCBsZWFraW5nIG1lbW9yeSBmb3IgbG9uZyBjaGFpbnMgb2YgcmVjdXJzaXZlIGNhbGxzIHRvIGBhc2FwYC5cbiAgICAgICAgLy8gSWYgd2UgY2FsbCBgYXNhcGAgd2l0aGluIHRhc2tzIHNjaGVkdWxlZCBieSBgYXNhcGAsIHRoZSBxdWV1ZSB3aWxsXG4gICAgICAgIC8vIGdyb3csIGJ1dCB0byBhdm9pZCBhbiBPKG4pIHdhbGsgZm9yIGV2ZXJ5IHRhc2sgd2UgZXhlY3V0ZSwgd2UgZG9uJ3RcbiAgICAgICAgLy8gc2hpZnQgdGFza3Mgb2ZmIHRoZSBxdWV1ZSBhZnRlciB0aGV5IGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICAgICAgLy8gSW5zdGVhZCwgd2UgcGVyaW9kaWNhbGx5IHNoaWZ0IDEwMjQgdGFza3Mgb2ZmIHRoZSBxdWV1ZS5cbiAgICAgICAgaWYgKGluZGV4ID4gY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IHNoaWZ0IGFsbCB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGluZGV4IGJhY2sgdG8gdGhlXG4gICAgICAgICAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlLlxuICAgICAgICAgICAgZm9yICh2YXIgc2NhbiA9IDAsIG5ld0xlbmd0aCA9IHF1ZXVlLmxlbmd0aCAtIGluZGV4OyBzY2FuIDwgbmV3TGVuZ3RoOyBzY2FuKyspIHtcbiAgICAgICAgICAgICAgICBxdWV1ZVtzY2FuXSA9IHF1ZXVlW3NjYW4gKyBpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWV1ZS5sZW5ndGggLT0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUubGVuZ3RoID0gMDtcbiAgICBpbmRleCA9IDA7XG4gICAgZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxucmF3QXNhcC5yZXF1ZXN0Rmx1c2ggPSByZXF1ZXN0Rmx1c2g7XG5mdW5jdGlvbiByZXF1ZXN0Rmx1c2goKSB7XG4gICAgLy8gRW5zdXJlIGZsdXNoaW5nIGlzIG5vdCBib3VuZCB0byBhbnkgZG9tYWluLlxuICAgIC8vIEl0IGlzIG5vdCBzdWZmaWNpZW50IHRvIGV4aXQgdGhlIGRvbWFpbiwgYmVjYXVzZSBkb21haW5zIGV4aXN0IG9uIGEgc3RhY2suXG4gICAgLy8gVG8gZXhlY3V0ZSBjb2RlIG91dHNpZGUgb2YgYW55IGRvbWFpbiwgdGhlIGZvbGxvd2luZyBkYW5jZSBpcyBuZWNlc3NhcnkuXG4gICAgdmFyIHBhcmVudERvbWFpbiA9IHByb2Nlc3MuZG9tYWluO1xuICAgIGlmIChwYXJlbnREb21haW4pIHtcbiAgICAgICAgaWYgKCFkb21haW4pIHtcbiAgICAgICAgICAgIC8vIExhenkgZXhlY3V0ZSB0aGUgZG9tYWluIG1vZHVsZS5cbiAgICAgICAgICAgIC8vIE9ubHkgZW1wbG95ZWQgaWYgdGhlIHVzZXIgZWxlY3RzIHRvIHVzZSBkb21haW5zLlxuICAgICAgICAgICAgZG9tYWluID0gcmVxdWlyZShcImRvbWFpblwiKTtcbiAgICAgICAgfVxuICAgICAgICBkb21haW4uYWN0aXZlID0gcHJvY2Vzcy5kb21haW4gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGBzZXRJbW1lZGlhdGVgIGlzIHNsb3dlciB0aGF0IGBwcm9jZXNzLm5leHRUaWNrYCwgYnV0IGBwcm9jZXNzLm5leHRUaWNrYFxuICAgIC8vIGNhbm5vdCBoYW5kbGUgcmVjdXJzaW9uLlxuICAgIC8vIGByZXF1ZXN0Rmx1c2hgIHdpbGwgb25seSBiZSBjYWxsZWQgcmVjdXJzaXZlbHkgZnJvbSBgYXNhcC5qc2AsIHRvIHJlc3VtZVxuICAgIC8vIGZsdXNoaW5nIGFmdGVyIGFuIGVycm9yIGlzIHRocm93biBpbnRvIGEgZG9tYWluLlxuICAgIC8vIENvbnZlbmllbnRseSwgYHNldEltbWVkaWF0ZWAgd2FzIGludHJvZHVjZWQgaW4gdGhlIHNhbWUgdmVyc2lvblxuICAgIC8vIGBwcm9jZXNzLm5leHRUaWNrYCBzdGFydGVkIHRocm93aW5nIHJlY3Vyc2lvbiBlcnJvcnMuXG4gICAgaWYgKGZsdXNoaW5nICYmIGhhc1NldEltbWVkaWF0ZSkge1xuICAgICAgICBzZXRJbW1lZGlhdGUoZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnREb21haW4pIHtcbiAgICAgICAgZG9tYWluLmFjdGl2ZSA9IHByb2Nlc3MuZG9tYWluID0gcGFyZW50RG9tYWluO1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciByYXdBc2FwID0gcmVxdWlyZShcIi4vcmF3XCIpO1xudmFyIGZyZWVUYXNrcyA9IFtdO1xuXG4vKipcbiAqIENhbGxzIGEgdGFzayBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJldHVybmluZywgaW4gaXRzIG93biBldmVudCwgd2l0aFxuICogcHJpb3JpdHkgb3ZlciBJTyBldmVudHMuIEFuIGV4Y2VwdGlvbiB0aHJvd24gaW4gYSB0YXNrIGNhbiBiZSBoYW5kbGVkIGJ5XG4gKiBgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIpIG9yIGBkb21haW4ub24oXCJlcnJvclwiKWAsIGJ1dCB3aWxsIG90aGVyd2lzZVxuICogY3Jhc2ggdGhlIHByb2Nlc3MuIElmIHRoZSBlcnJvciBpcyBoYW5kbGVkLCBhbGwgc3Vic2VxdWVudCB0YXNrcyB3aWxsXG4gKiByZXN1bWUuXG4gKlxuICogQHBhcmFtIHt7Y2FsbH19IHRhc2sgQSBjYWxsYWJsZSBvYmplY3QsIHR5cGljYWxseSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm9cbiAqIGFyZ3VtZW50cy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBhc2FwO1xuZnVuY3Rpb24gYXNhcCh0YXNrKSB7XG4gICAgdmFyIHJhd1Rhc2s7XG4gICAgaWYgKGZyZWVUYXNrcy5sZW5ndGgpIHtcbiAgICAgICAgcmF3VGFzayA9IGZyZWVUYXNrcy5wb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByYXdUYXNrID0gbmV3IFJhd1Rhc2soKTtcbiAgICB9XG4gICAgcmF3VGFzay50YXNrID0gdGFzaztcbiAgICByYXdUYXNrLmRvbWFpbiA9IHByb2Nlc3MuZG9tYWluO1xuICAgIHJhd0FzYXAocmF3VGFzayk7XG59XG5cbmZ1bmN0aW9uIFJhd1Rhc2soKSB7XG4gICAgdGhpcy50YXNrID0gbnVsbDtcbiAgICB0aGlzLmRvbWFpbiA9IG51bGw7XG59XG5cblJhd1Rhc2sucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZG9tYWluKSB7XG4gICAgICAgIHRoaXMuZG9tYWluLmVudGVyKCk7XG4gICAgfVxuICAgIHZhciB0aHJldyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy50YXNrLmNhbGwoKTtcbiAgICAgICAgdGhyZXcgPSBmYWxzZTtcbiAgICAgICAgLy8gSWYgdGhlIHRhc2sgdGhyb3dzIGFuIGV4Y2VwdGlvbiAocHJlc3VtYWJseSkgTm9kZS5qcyByZXN0b3JlcyB0aGVcbiAgICAgICAgLy8gZG9tYWluIHN0YWNrIGZvciB0aGUgbmV4dCBldmVudC5cbiAgICAgICAgaWYgKHRoaXMuZG9tYWluKSB7XG4gICAgICAgICAgICB0aGlzLmRvbWFpbi5leGl0KCk7XG4gICAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBXZSB1c2UgdHJ5L2ZpbmFsbHkgYW5kIGEgdGhyZXcgZmxhZyB0byBhdm9pZCBtZXNzaW5nIHVwIHN0YWNrIHRyYWNlc1xuICAgICAgICAvLyB3aGVuIHdlIGNhdGNoIGFuZCByZWxlYXNlIGVycm9ycy5cbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgICAvLyBJbiBOb2RlLmpzLCB1bmNhdWdodCBleGNlcHRpb25zIGFyZSBjb25zaWRlcmVkIGZhdGFsIGVycm9ycy5cbiAgICAgICAgICAgIC8vIFJlLXRocm93IHRoZW0gdG8gaW50ZXJydXB0IGZsdXNoaW5nIVxuICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgZmx1c2hpbmcgY29udGludWVzIGlmIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBpc1xuICAgICAgICAgICAgLy8gc3VwcHJlc3NlZCBsaXN0ZW5pbmcgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIpIG9yXG4gICAgICAgICAgICAvLyBkb21haW4ub24oXCJlcnJvclwiKS5cbiAgICAgICAgICAgIHJhd0FzYXAucmVxdWVzdEZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHRhc2sgdGhyZXcgYW4gZXJyb3IsIHdlIGRvIG5vdCB3YW50IHRvIGV4aXQgdGhlIGRvbWFpbiBoZXJlLlxuICAgICAgICAvLyBFeGl0aW5nIHRoZSBkb21haW4gd291bGQgcHJldmVudCB0aGUgZG9tYWluIGZyb20gY2F0Y2hpbmcgdGhlIGVycm9yLlxuICAgICAgICB0aGlzLnRhc2sgPSBudWxsO1xuICAgICAgICB0aGlzLmRvbWFpbiA9IG51bGw7XG4gICAgICAgIGZyZWVUYXNrcy5wdXNoKHRoaXMpO1xuICAgIH1cbn07XG5cbiIsCiAgICAiLy8gTUlUIGxpY2Vuc2UgKGJ5IEVsYW4gU2hhbmtlcikuXG4oZnVuY3Rpb24oZ2xvYmFscykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGV4ZWN1dGVTeW5jID0gZnVuY3Rpb24oKXtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnZnVuY3Rpb24nKXtcbiAgICAgIGFyZ3NbMF0uYXBwbHkobnVsbCwgYXJncy5zcGxpY2UoMSkpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZXhlY3V0ZUFzeW5jID0gZnVuY3Rpb24oZm4pe1xuICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2spIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIG1ha2VJdGVyYXRvciA9IGZ1bmN0aW9uICh0YXNrcykge1xuICAgIHZhciBtYWtlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHZhciBmbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgIHRhc2tzW2luZGV4XS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5uZXh0KCk7XG4gICAgICB9O1xuICAgICAgZm4ubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChpbmRleCA8IHRhc2tzLmxlbmd0aCAtIDEpID8gbWFrZUNhbGxiYWNrKGluZGV4ICsgMSk6IG51bGw7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgcmV0dXJuIG1ha2VDYWxsYmFjaygwKTtcbiAgfTtcbiAgXG4gIHZhciBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24obWF5YmVBcnJheSl7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtYXliZUFycmF5KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICB2YXIgd2F0ZXJmYWxsID0gZnVuY3Rpb24gKHRhc2tzLCBjYWxsYmFjaywgZm9yY2VBc3luYykge1xuICAgIHZhciBuZXh0VGljayA9IGZvcmNlQXN5bmMgPyBleGVjdXRlQXN5bmMgOiBleGVjdXRlU3luYztcbiAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgIGlmICghX2lzQXJyYXkodGFza3MpKSB7XG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKTtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICBpZiAoIXRhc2tzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHZhciB3cmFwSXRlcmF0b3IgPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgIHZhciBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2god3JhcEl0ZXJhdG9yKG5leHQpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICB3cmFwSXRlcmF0b3IobWFrZUl0ZXJhdG9yKHRhc2tzKSkoKTtcbiAgfTtcblxuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHdhdGVyZmFsbDtcbiAgICB9KTsgLy8gUmVxdWlyZUpTXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHdhdGVyZmFsbDsgLy8gQ29tbW9uSlNcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWxzLndhdGVyZmFsbCA9IHdhdGVyZmFsbDsgLy8gPHNjcmlwdD5cbiAgfVxufSkodGhpcyk7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGxpYiA9IHJlcXVpcmUoJy4vbGliJyk7XG52YXIgd2hpdGVzcGFjZUNoYXJzID0gXCIgXFxuXFx0XFxyXFx4QTBcIjtcbnZhciBkZWxpbUNoYXJzID0gJygpW117fSUqLSt+LyMsOnwuPD49ISc7XG52YXIgaW50Q2hhcnMgPSAnMDEyMzQ1Njc4OSc7XG52YXIgQkxPQ0tfU1RBUlQgPSAneyUnO1xudmFyIEJMT0NLX0VORCA9ICclfSc7XG52YXIgVkFSSUFCTEVfU1RBUlQgPSAne3snO1xudmFyIFZBUklBQkxFX0VORCA9ICd9fSc7XG52YXIgQ09NTUVOVF9TVEFSVCA9ICd7Iyc7XG52YXIgQ09NTUVOVF9FTkQgPSAnI30nO1xudmFyIFRPS0VOX1NUUklORyA9ICdzdHJpbmcnO1xudmFyIFRPS0VOX1dISVRFU1BBQ0UgPSAnd2hpdGVzcGFjZSc7XG52YXIgVE9LRU5fREFUQSA9ICdkYXRhJztcbnZhciBUT0tFTl9CTE9DS19TVEFSVCA9ICdibG9jay1zdGFydCc7XG52YXIgVE9LRU5fQkxPQ0tfRU5EID0gJ2Jsb2NrLWVuZCc7XG52YXIgVE9LRU5fVkFSSUFCTEVfU1RBUlQgPSAndmFyaWFibGUtc3RhcnQnO1xudmFyIFRPS0VOX1ZBUklBQkxFX0VORCA9ICd2YXJpYWJsZS1lbmQnO1xudmFyIFRPS0VOX0NPTU1FTlQgPSAnY29tbWVudCc7XG52YXIgVE9LRU5fTEVGVF9QQVJFTiA9ICdsZWZ0LXBhcmVuJztcbnZhciBUT0tFTl9SSUdIVF9QQVJFTiA9ICdyaWdodC1wYXJlbic7XG52YXIgVE9LRU5fTEVGVF9CUkFDS0VUID0gJ2xlZnQtYnJhY2tldCc7XG52YXIgVE9LRU5fUklHSFRfQlJBQ0tFVCA9ICdyaWdodC1icmFja2V0JztcbnZhciBUT0tFTl9MRUZUX0NVUkxZID0gJ2xlZnQtY3VybHknO1xudmFyIFRPS0VOX1JJR0hUX0NVUkxZID0gJ3JpZ2h0LWN1cmx5JztcbnZhciBUT0tFTl9PUEVSQVRPUiA9ICdvcGVyYXRvcic7XG52YXIgVE9LRU5fQ09NTUEgPSAnY29tbWEnO1xudmFyIFRPS0VOX0NPTE9OID0gJ2NvbG9uJztcbnZhciBUT0tFTl9USUxERSA9ICd0aWxkZSc7XG52YXIgVE9LRU5fUElQRSA9ICdwaXBlJztcbnZhciBUT0tFTl9JTlQgPSAnaW50JztcbnZhciBUT0tFTl9GTE9BVCA9ICdmbG9hdCc7XG52YXIgVE9LRU5fQk9PTEVBTiA9ICdib29sZWFuJztcbnZhciBUT0tFTl9OT05FID0gJ25vbmUnO1xudmFyIFRPS0VOX1NZTUJPTCA9ICdzeW1ib2wnO1xudmFyIFRPS0VOX1NQRUNJQUwgPSAnc3BlY2lhbCc7XG52YXIgVE9LRU5fUkVHRVggPSAncmVnZXgnO1xuZnVuY3Rpb24gdG9rZW4odHlwZSwgdmFsdWUsIGxpbmVubywgY29sbm8pIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBsaW5lbm86IGxpbmVubyxcbiAgICBjb2xubzogY29sbm9cbiAgfTtcbn1cbnZhciBUb2tlbml6ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb2tlbml6ZXIoc3RyLCBvcHRzKSB7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5pbmRleCA9IDA7XG4gICAgdGhpcy5sZW4gPSBzdHIubGVuZ3RoO1xuICAgIHRoaXMubGluZW5vID0gMDtcbiAgICB0aGlzLmNvbG5vID0gMDtcbiAgICB0aGlzLmluX2NvZGUgPSBmYWxzZTtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgdGFncyA9IG9wdHMudGFncyB8fCB7fTtcbiAgICB0aGlzLnRhZ3MgPSB7XG4gICAgICBCTE9DS19TVEFSVDogdGFncy5ibG9ja1N0YXJ0IHx8IEJMT0NLX1NUQVJULFxuICAgICAgQkxPQ0tfRU5EOiB0YWdzLmJsb2NrRW5kIHx8IEJMT0NLX0VORCxcbiAgICAgIFZBUklBQkxFX1NUQVJUOiB0YWdzLnZhcmlhYmxlU3RhcnQgfHwgVkFSSUFCTEVfU1RBUlQsXG4gICAgICBWQVJJQUJMRV9FTkQ6IHRhZ3MudmFyaWFibGVFbmQgfHwgVkFSSUFCTEVfRU5ELFxuICAgICAgQ09NTUVOVF9TVEFSVDogdGFncy5jb21tZW50U3RhcnQgfHwgQ09NTUVOVF9TVEFSVCxcbiAgICAgIENPTU1FTlRfRU5EOiB0YWdzLmNvbW1lbnRFbmQgfHwgQ09NTUVOVF9FTkRcbiAgICB9O1xuICAgIHRoaXMudHJpbUJsb2NrcyA9ICEhb3B0cy50cmltQmxvY2tzO1xuICAgIHRoaXMubHN0cmlwQmxvY2tzID0gISFvcHRzLmxzdHJpcEJsb2NrcztcbiAgfVxuICB2YXIgX3Byb3RvID0gVG9rZW5pemVyLnByb3RvdHlwZTtcbiAgX3Byb3RvLm5leHRUb2tlbiA9IGZ1bmN0aW9uIG5leHRUb2tlbigpIHtcbiAgICB2YXIgbGluZW5vID0gdGhpcy5saW5lbm87XG4gICAgdmFyIGNvbG5vID0gdGhpcy5jb2xubztcbiAgICB2YXIgdG9rO1xuICAgIGlmICh0aGlzLmluX2NvZGUpIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgaWYgd2UgYXJlIGluIGEgYmxvY2sgcGFyc2UgaXQgYXMgY29kZVxuICAgICAgdmFyIGN1ciA9IHRoaXMuY3VycmVudCgpO1xuICAgICAgaWYgKHRoaXMuaXNGaW5pc2hlZCgpKSB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm90aGluZyBlbHNlIHRvIHBhcnNlXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChjdXIgPT09ICdcIicgfHwgY3VyID09PSAnXFwnJykge1xuICAgICAgICAvLyBXZSd2ZSBoaXQgYSBzdHJpbmdcbiAgICAgICAgcmV0dXJuIHRva2VuKFRPS0VOX1NUUklORywgdGhpcy5fcGFyc2VTdHJpbmcoY3VyKSwgbGluZW5vLCBjb2xubyk7XG4gICAgICB9IGVsc2UgaWYgKHRvayA9IHRoaXMuX2V4dHJhY3Qod2hpdGVzcGFjZUNoYXJzKSkge1xuICAgICAgICAvLyBXZSBoaXQgc29tZSB3aGl0ZXNwYWNlXG4gICAgICAgIHJldHVybiB0b2tlbihUT0tFTl9XSElURVNQQUNFLCB0b2ssIGxpbmVubywgY29sbm8pO1xuICAgICAgfSBlbHNlIGlmICgodG9rID0gdGhpcy5fZXh0cmFjdFN0cmluZyh0aGlzLnRhZ3MuQkxPQ0tfRU5EKSkgfHwgKHRvayA9IHRoaXMuX2V4dHJhY3RTdHJpbmcoJy0nICsgdGhpcy50YWdzLkJMT0NLX0VORCkpKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2hlY2sgZm9yIHRoZSBibG9jayBlbmQgdGFnXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEl0IGlzIGEgcmVxdWlyZW1lbnQgdGhhdCBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGNvbXBvc2VkIG9mXG4gICAgICAgIC8vIGRlbGltaXRlciBjaGFyYWN0ZXJzICgle31bXSBldGMpLCBhbmQgb3VyIGNvZGUgYWx3YXlzXG4gICAgICAgIC8vIGJyZWFrcyBvbiBkZWxpbWl0ZXJzIHNvIHdlIGNhbiBhc3N1bWUgdGhlIHRva2VuIHBhcnNpbmdcbiAgICAgICAgLy8gZG9lc24ndCBjb25zdW1lIHRoZXNlIGVsc2V3aGVyZVxuICAgICAgICB0aGlzLmluX2NvZGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudHJpbUJsb2Nrcykge1xuICAgICAgICAgIGN1ciA9IHRoaXMuY3VycmVudCgpO1xuICAgICAgICAgIGlmIChjdXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAvLyBTa2lwIG5ld2xpbmVcbiAgICAgICAgICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VyID09PSAnXFxyJykge1xuICAgICAgICAgICAgLy8gU2tpcCBDUkxGIG5ld2xpbmVcbiAgICAgICAgICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgICAgICAgICAgY3VyID0gdGhpcy5jdXJyZW50KCk7XG4gICAgICAgICAgICBpZiAoY3VyID09PSAnXFxuJykge1xuICAgICAgICAgICAgICB0aGlzLmZvcndhcmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdhcyBub3QgYSBDUkxGLCBzbyBnbyBiYWNrXG4gICAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW4oVE9LRU5fQkxPQ0tfRU5ELCB0b2ssIGxpbmVubywgY29sbm8pO1xuICAgICAgfSBlbHNlIGlmICgodG9rID0gdGhpcy5fZXh0cmFjdFN0cmluZyh0aGlzLnRhZ3MuVkFSSUFCTEVfRU5EKSkgfHwgKHRvayA9IHRoaXMuX2V4dHJhY3RTdHJpbmcoJy0nICsgdGhpcy50YWdzLlZBUklBQkxFX0VORCkpKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2hlY2sgZm9yIHZhcmlhYmxlIGVuZCB0YWcgKHNlZSBhYm92ZSlcbiAgICAgICAgdGhpcy5pbl9jb2RlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0b2tlbihUT0tFTl9WQVJJQUJMRV9FTkQsIHRvaywgbGluZW5vLCBjb2xubyk7XG4gICAgICB9IGVsc2UgaWYgKGN1ciA9PT0gJ3InICYmIHRoaXMuc3RyLmNoYXJBdCh0aGlzLmluZGV4ICsgMSkgPT09ICcvJykge1xuICAgICAgICAvLyBTa2lwIHBhc3QgJ3IvJy5cbiAgICAgICAgdGhpcy5mb3J3YXJkTigyKTtcblxuICAgICAgICAvLyBFeHRyYWN0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHJlZ2V4IC0tIC8gZW5kcyBpdCwgXFwvIGRvZXMgbm90LlxuICAgICAgICB2YXIgcmVnZXhCb2R5ID0gJyc7XG4gICAgICAgIHdoaWxlICghdGhpcy5pc0ZpbmlzaGVkKCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50KCkgPT09ICcvJyAmJiB0aGlzLnByZXZpb3VzKCkgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVnZXhCb2R5ICs9IHRoaXMuY3VycmVudCgpO1xuICAgICAgICAgICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGZsYWdzLlxuICAgICAgICAvLyBUaGUgcG9zc2libGUgZmxhZ3MgYXJlIGFjY29yZGluZyB0byBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9SZWdFeHApXG4gICAgICAgIHZhciBQT1NTSUJMRV9GTEFHUyA9IFsnZycsICdpJywgJ20nLCAneSddO1xuICAgICAgICB2YXIgcmVnZXhGbGFncyA9ICcnO1xuICAgICAgICB3aGlsZSAoIXRoaXMuaXNGaW5pc2hlZCgpKSB7XG4gICAgICAgICAgdmFyIGlzQ3VycmVudEFGbGFnID0gUE9TU0lCTEVfRkxBR1MuaW5kZXhPZih0aGlzLmN1cnJlbnQoKSkgIT09IC0xO1xuICAgICAgICAgIGlmIChpc0N1cnJlbnRBRmxhZykge1xuICAgICAgICAgICAgcmVnZXhGbGFncyArPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuKFRPS0VOX1JFR0VYLCB7XG4gICAgICAgICAgYm9keTogcmVnZXhCb2R5LFxuICAgICAgICAgIGZsYWdzOiByZWdleEZsYWdzXG4gICAgICAgIH0sIGxpbmVubywgY29sbm8pO1xuICAgICAgfSBlbHNlIGlmIChkZWxpbUNoYXJzLmluZGV4T2YoY3VyKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2UndmUgaGl0IGEgZGVsaW1pdGVyIChhIHNwZWNpYWwgY2hhciBsaWtlIGEgYnJhY2tldClcbiAgICAgICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgICAgIHZhciBjb21wbGV4T3BzID0gWyc9PScsICc9PT0nLCAnIT0nLCAnIT09JywgJzw9JywgJz49JywgJy8vJywgJyoqJ107XG4gICAgICAgIHZhciBjdXJDb21wbGV4ID0gY3VyICsgdGhpcy5jdXJyZW50KCk7XG4gICAgICAgIHZhciB0eXBlO1xuICAgICAgICBpZiAobGliLmluZGV4T2YoY29tcGxleE9wcywgY3VyQ29tcGxleCkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgICAgICAgY3VyID0gY3VyQ29tcGxleDtcblxuICAgICAgICAgIC8vIFNlZSBpZiB0aGlzIGlzIGEgc3RyaWN0IGVxdWFsaXR5L2luZXF1YWxpdHkgY29tcGFyYXRvclxuICAgICAgICAgIGlmIChsaWIuaW5kZXhPZihjb21wbGV4T3BzLCBjdXJDb21wbGV4ICsgdGhpcy5jdXJyZW50KCkpICE9PSAtMSkge1xuICAgICAgICAgICAgY3VyID0gY3VyQ29tcGxleCArIHRoaXMuY3VycmVudCgpO1xuICAgICAgICAgICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoY3VyKSB7XG4gICAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgICB0eXBlID0gVE9LRU5fTEVGVF9QQVJFTjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgdHlwZSA9IFRPS0VOX1JJR0hUX1BBUkVOO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICB0eXBlID0gVE9LRU5fTEVGVF9CUkFDS0VUO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnXSc6XG4gICAgICAgICAgICB0eXBlID0gVE9LRU5fUklHSFRfQlJBQ0tFVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgdHlwZSA9IFRPS0VOX0xFRlRfQ1VSTFk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgIHR5cGUgPSBUT0tFTl9SSUdIVF9DVVJMWTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgICAgdHlwZSA9IFRPS0VOX0NPTU1BO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgICB0eXBlID0gVE9LRU5fQ09MT047XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd+JzpcbiAgICAgICAgICAgIHR5cGUgPSBUT0tFTl9USUxERTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3wnOlxuICAgICAgICAgICAgdHlwZSA9IFRPS0VOX1BJUEU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdHlwZSA9IFRPS0VOX09QRVJBVE9SO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbih0eXBlLCBjdXIsIGxpbmVubywgY29sbm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB3aGl0ZXNwYWNlIG9yIGEgZGVsaW1pdGVyLCBzbyBleHRyYWN0IHRoZVxuICAgICAgICAvLyB0ZXh0IGFuZCBwYXJzZSBpdFxuICAgICAgICB0b2sgPSB0aGlzLl9leHRyYWN0VW50aWwod2hpdGVzcGFjZUNoYXJzICsgZGVsaW1DaGFycyk7XG4gICAgICAgIGlmICh0b2subWF0Y2goL15bLStdP1swLTldKyQvKSkge1xuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQoKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICB0aGlzLmZvcndhcmQoKTtcbiAgICAgICAgICAgIHZhciBkZWMgPSB0aGlzLl9leHRyYWN0KGludENoYXJzKTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbihUT0tFTl9GTE9BVCwgdG9rICsgJy4nICsgZGVjLCBsaW5lbm8sIGNvbG5vKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuKFRPS0VOX0lOVCwgdG9rLCBsaW5lbm8sIGNvbG5vKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9rLm1hdGNoKC9eKHRydWV8ZmFsc2UpJC8pKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuKFRPS0VOX0JPT0xFQU4sIHRvaywgbGluZW5vLCBjb2xubyk7XG4gICAgICAgIH0gZWxzZSBpZiAodG9rID09PSAnbm9uZScpIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW4oVE9LRU5fTk9ORSwgdG9rLCBsaW5lbm8sIGNvbG5vKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgICAqIEFkZGVkIHRvIG1ha2UgdGhlIHRlc3QgYG51bGwgaXMgbnVsbGAgZXZhbHVhdGUgdHJ1dGhpbHkuXG4gICAgICAgICAgICogT3RoZXJ3aXNlLCBOdW5qdWNrcyB3aWxsIGxvb2sgdXAgbnVsbCBpbiB0aGUgY29udGV4dCBhbmRcbiAgICAgICAgICAgKiByZXR1cm4gYHVuZGVmaW5lZGAsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuIFRoaXMgKm1heSogaGF2ZVxuICAgICAgICAgICAqIGNvbnNlcXVlbmNlcyBpcyBzb21lb25lIGlzIHVzaW5nIG51bGwgaW4gdGhlaXIgdGVtcGxhdGVzIGFzIGFcbiAgICAgICAgICAgKiB2YXJpYWJsZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfSBlbHNlIGlmICh0b2sgPT09ICdudWxsJykge1xuICAgICAgICAgIHJldHVybiB0b2tlbihUT0tFTl9OT05FLCB0b2ssIGxpbmVubywgY29sbm8pO1xuICAgICAgICB9IGVsc2UgaWYgKHRvaykge1xuICAgICAgICAgIHJldHVybiB0b2tlbihUT0tFTl9TWU1CT0wsIHRvaywgbGluZW5vLCBjb2xubyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlIHdoaWxlIHBhcnNpbmc6ICcgKyB0b2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcnNlIG91dCB0aGUgdGVtcGxhdGUgdGV4dCwgYnJlYWtpbmcgb24gdGFnXG4gICAgICAvLyBkZWxpbWl0ZXJzIGJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGZvciBibG9jay92YXJpYWJsZSBzdGFydFxuICAgICAgLy8gdGFncyAoZG9uJ3QgdXNlIHRoZSBmdWxsIGRlbGltQ2hhcnMgZm9yIG9wdGltaXphdGlvbilcbiAgICAgIHZhciBiZWdpbkNoYXJzID0gdGhpcy50YWdzLkJMT0NLX1NUQVJULmNoYXJBdCgwKSArIHRoaXMudGFncy5WQVJJQUJMRV9TVEFSVC5jaGFyQXQoMCkgKyB0aGlzLnRhZ3MuQ09NTUVOVF9TVEFSVC5jaGFyQXQoMCkgKyB0aGlzLnRhZ3MuQ09NTUVOVF9FTkQuY2hhckF0KDApO1xuICAgICAgaWYgKHRoaXMuaXNGaW5pc2hlZCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmICgodG9rID0gdGhpcy5fZXh0cmFjdFN0cmluZyh0aGlzLnRhZ3MuQkxPQ0tfU1RBUlQgKyAnLScpKSB8fCAodG9rID0gdGhpcy5fZXh0cmFjdFN0cmluZyh0aGlzLnRhZ3MuQkxPQ0tfU1RBUlQpKSkge1xuICAgICAgICB0aGlzLmluX2NvZGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdG9rZW4oVE9LRU5fQkxPQ0tfU1RBUlQsIHRvaywgbGluZW5vLCBjb2xubyk7XG4gICAgICB9IGVsc2UgaWYgKCh0b2sgPSB0aGlzLl9leHRyYWN0U3RyaW5nKHRoaXMudGFncy5WQVJJQUJMRV9TVEFSVCArICctJykpIHx8ICh0b2sgPSB0aGlzLl9leHRyYWN0U3RyaW5nKHRoaXMudGFncy5WQVJJQUJMRV9TVEFSVCkpKSB7XG4gICAgICAgIHRoaXMuaW5fY29kZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0b2tlbihUT0tFTl9WQVJJQUJMRV9TVEFSVCwgdG9rLCBsaW5lbm8sIGNvbG5vKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvayA9ICcnO1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgdmFyIGluQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fbWF0Y2hlcyh0aGlzLnRhZ3MuQ09NTUVOVF9TVEFSVCkpIHtcbiAgICAgICAgICBpbkNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgIHRvayA9IHRoaXMuX2V4dHJhY3RTdHJpbmcodGhpcy50YWdzLkNPTU1FTlRfU1RBUlQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udGludWFsbHkgY29uc3VtZSB0ZXh0LCBicmVha2luZyBvbiB0aGUgdGFnIGRlbGltaXRlclxuICAgICAgICAvLyBjaGFyYWN0ZXJzIGFuZCBjaGVja2luZyB0byBzZWUgaWYgaXQncyBhIHN0YXJ0IHRhZy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2UgY291bGQgaGl0IHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGluIHRoZSBtaWRkbGUgb2ZcbiAgICAgICAgLy8gb3VyIGxvb3BpbmcsIHNvIGNoZWNrIGZvciB0aGUgbnVsbCByZXR1cm4gdmFsdWUgZnJvbVxuICAgICAgICAvLyBfZXh0cmFjdFVudGlsXG4gICAgICAgIHdoaWxlICgoZGF0YSA9IHRoaXMuX2V4dHJhY3RVbnRpbChiZWdpbkNoYXJzKSkgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2sgKz0gZGF0YTtcbiAgICAgICAgICBpZiAoKHRoaXMuX21hdGNoZXModGhpcy50YWdzLkJMT0NLX1NUQVJUKSB8fCB0aGlzLl9tYXRjaGVzKHRoaXMudGFncy5WQVJJQUJMRV9TVEFSVCkgfHwgdGhpcy5fbWF0Y2hlcyh0aGlzLnRhZ3MuQ09NTUVOVF9TVEFSVCkpICYmICFpbkNvbW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxzdHJpcEJsb2NrcyAmJiB0aGlzLl9tYXRjaGVzKHRoaXMudGFncy5CTE9DS19TVEFSVCkgJiYgdGhpcy5jb2xubyA+IDAgJiYgdGhpcy5jb2xubyA8PSB0b2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHZhciBsYXN0TGluZSA9IHRvay5zbGljZSgtdGhpcy5jb2xubyk7XG4gICAgICAgICAgICAgIGlmICgvXlxccyskLy50ZXN0KGxhc3RMaW5lKSkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBibG9jayBsZWFkaW5nIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZ1xuICAgICAgICAgICAgICAgIHRvayA9IHRvay5zbGljZSgwLCAtdGhpcy5jb2xubyk7XG4gICAgICAgICAgICAgICAgaWYgKCF0b2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBbGwgZGF0YSByZW1vdmVkLCBjb2xsYXBzZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBub2Rlc1xuICAgICAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIG5leHQgdG9rZW4gKGJsb2NrIHN0YXJ0KVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBhIHN0YXJ0IHRhZywgc3RvcCBsb29waW5nXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX21hdGNoZXModGhpcy50YWdzLkNPTU1FTlRfRU5EKSkge1xuICAgICAgICAgICAgaWYgKCFpbkNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBjb21tZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2sgKz0gdGhpcy5fZXh0cmFjdFN0cmluZyh0aGlzLnRhZ3MuQ09NTUVOVF9FTkQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0IGRvZXMgbm90IG1hdGNoIGFueSB0YWcsIHNvIGFkZCB0aGUgY2hhcmFjdGVyIGFuZFxuICAgICAgICAgICAgLy8gY2Fycnkgb25cbiAgICAgICAgICAgIHRvayArPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCAmJiBpbkNvbW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGVuZCBvZiBjb21tZW50LCBnb3QgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW4oaW5Db21tZW50ID8gVE9LRU5fQ09NTUVOVCA6IFRPS0VOX0RBVEEsIHRvaywgbGluZW5vLCBjb2xubyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBfcHJvdG8uX3BhcnNlU3RyaW5nID0gZnVuY3Rpb24gX3BhcnNlU3RyaW5nKGRlbGltaXRlcikge1xuICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgIHZhciBzdHIgPSAnJztcbiAgICB3aGlsZSAoIXRoaXMuaXNGaW5pc2hlZCgpICYmIHRoaXMuY3VycmVudCgpICE9PSBkZWxpbWl0ZXIpIHtcbiAgICAgIHZhciBjdXIgPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgIGlmIChjdXIgPT09ICdcXFxcJykge1xuICAgICAgICB0aGlzLmZvcndhcmQoKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnQoKSkge1xuICAgICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgc3RyICs9ICdcXG4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBzdHIgKz0gJ1xcdCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgIHN0ciArPSAnXFxyJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdHIgKz0gdGhpcy5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgKz0gY3VyO1xuICAgICAgICB0aGlzLmZvcndhcmQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5mb3J3YXJkKCk7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgX3Byb3RvLl9tYXRjaGVzID0gZnVuY3Rpb24gX21hdGNoZXMoc3RyKSB7XG4gICAgaWYgKHRoaXMuaW5kZXggKyBzdHIubGVuZ3RoID4gdGhpcy5sZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbSA9IHRoaXMuc3RyLnNsaWNlKHRoaXMuaW5kZXgsIHRoaXMuaW5kZXggKyBzdHIubGVuZ3RoKTtcbiAgICByZXR1cm4gbSA9PT0gc3RyO1xuICB9O1xuICBfcHJvdG8uX2V4dHJhY3RTdHJpbmcgPSBmdW5jdGlvbiBfZXh0cmFjdFN0cmluZyhzdHIpIHtcbiAgICBpZiAodGhpcy5fbWF0Y2hlcyhzdHIpKSB7XG4gICAgICB0aGlzLmZvcndhcmROKHN0ci5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIF9wcm90by5fZXh0cmFjdFVudGlsID0gZnVuY3Rpb24gX2V4dHJhY3RVbnRpbChjaGFyU3RyaW5nKSB7XG4gICAgLy8gRXh0cmFjdCBhbGwgbm9uLW1hdGNoaW5nIGNoYXJzLCB3aXRoIHRoZSBkZWZhdWx0IG1hdGNoaW5nIHNldFxuICAgIC8vIHRvIGV2ZXJ5dGhpbmdcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFjdE1hdGNoaW5nKHRydWUsIGNoYXJTdHJpbmcgfHwgJycpO1xuICB9O1xuICBfcHJvdG8uX2V4dHJhY3QgPSBmdW5jdGlvbiBfZXh0cmFjdChjaGFyU3RyaW5nKSB7XG4gICAgLy8gRXh0cmFjdCBhbGwgbWF0Y2hpbmcgY2hhcnMgKG5vIGRlZmF1bHQsIHNvIGNoYXJTdHJpbmcgbXVzdCBiZVxuICAgIC8vIGV4cGxpY2l0KVxuICAgIHJldHVybiB0aGlzLl9leHRyYWN0TWF0Y2hpbmcoZmFsc2UsIGNoYXJTdHJpbmcpO1xuICB9O1xuICBfcHJvdG8uX2V4dHJhY3RNYXRjaGluZyA9IGZ1bmN0aW9uIF9leHRyYWN0TWF0Y2hpbmcoYnJlYWtPbk1hdGNoLCBjaGFyU3RyaW5nKSB7XG4gICAgLy8gUHVsbCBvdXQgY2hhcmFjdGVycyB1bnRpbCBhIGJyZWFraW5nIGNoYXIgaXMgaGl0LlxuICAgIC8vIElmIGJyZWFrT25NYXRjaCBpcyBmYWxzZSwgYSBub24tbWF0Y2hpbmcgY2hhciBzdG9wcyBpdC5cbiAgICAvLyBJZiBicmVha09uTWF0Y2ggaXMgdHJ1ZSwgYSBtYXRjaGluZyBjaGFyIHN0b3BzIGl0LlxuXG4gICAgaWYgKHRoaXMuaXNGaW5pc2hlZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGZpcnN0ID0gY2hhclN0cmluZy5pbmRleE9mKHRoaXMuY3VycmVudCgpKTtcblxuICAgIC8vIE9ubHkgcHJvY2VlZCBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGRvZXNuJ3QgbWVldCBvdXIgY29uZGl0aW9uXG4gICAgaWYgKGJyZWFrT25NYXRjaCAmJiBmaXJzdCA9PT0gLTEgfHwgIWJyZWFrT25NYXRjaCAmJiBmaXJzdCAhPT0gLTEpIHtcbiAgICAgIHZhciB0ID0gdGhpcy5jdXJyZW50KCk7XG4gICAgICB0aGlzLmZvcndhcmQoKTtcblxuICAgICAgLy8gQW5kIHB1bGwgb3V0IGFsbCB0aGUgY2hhcnMgb25lIGF0IGEgdGltZSB1bnRpbCB3ZSBoaXQgYVxuICAgICAgLy8gYnJlYWtpbmcgY2hhclxuICAgICAgdmFyIGlkeCA9IGNoYXJTdHJpbmcuaW5kZXhPZih0aGlzLmN1cnJlbnQoKSk7XG4gICAgICB3aGlsZSAoKGJyZWFrT25NYXRjaCAmJiBpZHggPT09IC0xIHx8ICFicmVha09uTWF0Y2ggJiYgaWR4ICE9PSAtMSkgJiYgIXRoaXMuaXNGaW5pc2hlZCgpKSB7XG4gICAgICAgIHQgKz0gdGhpcy5jdXJyZW50KCk7XG4gICAgICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgICAgICBpZHggPSBjaGFyU3RyaW5nLmluZGV4T2YodGhpcy5jdXJyZW50KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcbiAgX3Byb3RvLl9leHRyYWN0UmVnZXggPSBmdW5jdGlvbiBfZXh0cmFjdFJlZ2V4KHJlZ2V4KSB7XG4gICAgdmFyIG1hdGNoZXMgPSB0aGlzLmN1cnJlbnRTdHIoKS5tYXRjaChyZWdleCk7XG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBNb3ZlIGZvcndhcmQgd2hhdGV2ZXIgd2FzIG1hdGNoZWRcbiAgICB0aGlzLmZvcndhcmROKG1hdGNoZXNbMF0ubGVuZ3RoKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfTtcbiAgX3Byb3RvLmlzRmluaXNoZWQgPSBmdW5jdGlvbiBpc0ZpbmlzaGVkKCkge1xuICAgIHJldHVybiB0aGlzLmluZGV4ID49IHRoaXMubGVuO1xuICB9O1xuICBfcHJvdG8uZm9yd2FyZE4gPSBmdW5jdGlvbiBmb3J3YXJkTihuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHRoaXMuZm9yd2FyZCgpO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvLmZvcndhcmQgPSBmdW5jdGlvbiBmb3J3YXJkKCkge1xuICAgIHRoaXMuaW5kZXgrKztcbiAgICBpZiAodGhpcy5wcmV2aW91cygpID09PSAnXFxuJykge1xuICAgICAgdGhpcy5saW5lbm8rKztcbiAgICAgIHRoaXMuY29sbm8gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbG5vKys7XG4gICAgfVxuICB9O1xuICBfcHJvdG8uYmFja04gPSBmdW5jdGlvbiBiYWNrTihuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHRoaXMuYmFjaygpO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvLmJhY2sgPSBmdW5jdGlvbiBiYWNrKCkge1xuICAgIHRoaXMuaW5kZXgtLTtcbiAgICBpZiAodGhpcy5jdXJyZW50KCkgPT09ICdcXG4nKSB7XG4gICAgICB0aGlzLmxpbmVuby0tO1xuICAgICAgdmFyIGlkeCA9IHRoaXMuc3JjLmxhc3RJbmRleE9mKCdcXG4nLCB0aGlzLmluZGV4IC0gMSk7XG4gICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICB0aGlzLmNvbG5vID0gdGhpcy5pbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sbm8gPSB0aGlzLmluZGV4IC0gaWR4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbG5vLS07XG4gICAgfVxuICB9XG5cbiAgLy8gY3VycmVudCByZXR1cm5zIGN1cnJlbnQgY2hhcmFjdGVyXG4gIDtcbiAgX3Byb3RvLmN1cnJlbnQgPSBmdW5jdGlvbiBjdXJyZW50KCkge1xuICAgIGlmICghdGhpcy5pc0ZpbmlzaGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ci5jaGFyQXQodGhpcy5pbmRleCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIGN1cnJlbnRTdHIgcmV0dXJucyB3aGF0J3MgbGVmdCBvZiB0aGUgdW5wYXJzZWQgc3RyaW5nXG4gIDtcbiAgX3Byb3RvLmN1cnJlbnRTdHIgPSBmdW5jdGlvbiBjdXJyZW50U3RyKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbmlzaGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ci5zdWJzdHIodGhpcy5pbmRleCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcbiAgX3Byb3RvLnByZXZpb3VzID0gZnVuY3Rpb24gcHJldmlvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyLmNoYXJBdCh0aGlzLmluZGV4IC0gMSk7XG4gIH07XG4gIHJldHVybiBUb2tlbml6ZXI7XG59KCk7XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbGV4OiBmdW5jdGlvbiBsZXgoc3JjLCBvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoc3JjLCBvcHRzKTtcbiAgfSxcbiAgVE9LRU5fU1RSSU5HOiBUT0tFTl9TVFJJTkcsXG4gIFRPS0VOX1dISVRFU1BBQ0U6IFRPS0VOX1dISVRFU1BBQ0UsXG4gIFRPS0VOX0RBVEE6IFRPS0VOX0RBVEEsXG4gIFRPS0VOX0JMT0NLX1NUQVJUOiBUT0tFTl9CTE9DS19TVEFSVCxcbiAgVE9LRU5fQkxPQ0tfRU5EOiBUT0tFTl9CTE9DS19FTkQsXG4gIFRPS0VOX1ZBUklBQkxFX1NUQVJUOiBUT0tFTl9WQVJJQUJMRV9TVEFSVCxcbiAgVE9LRU5fVkFSSUFCTEVfRU5EOiBUT0tFTl9WQVJJQUJMRV9FTkQsXG4gIFRPS0VOX0NPTU1FTlQ6IFRPS0VOX0NPTU1FTlQsXG4gIFRPS0VOX0xFRlRfUEFSRU46IFRPS0VOX0xFRlRfUEFSRU4sXG4gIFRPS0VOX1JJR0hUX1BBUkVOOiBUT0tFTl9SSUdIVF9QQVJFTixcbiAgVE9LRU5fTEVGVF9CUkFDS0VUOiBUT0tFTl9MRUZUX0JSQUNLRVQsXG4gIFRPS0VOX1JJR0hUX0JSQUNLRVQ6IFRPS0VOX1JJR0hUX0JSQUNLRVQsXG4gIFRPS0VOX0xFRlRfQ1VSTFk6IFRPS0VOX0xFRlRfQ1VSTFksXG4gIFRPS0VOX1JJR0hUX0NVUkxZOiBUT0tFTl9SSUdIVF9DVVJMWSxcbiAgVE9LRU5fT1BFUkFUT1I6IFRPS0VOX09QRVJBVE9SLFxuICBUT0tFTl9DT01NQTogVE9LRU5fQ09NTUEsXG4gIFRPS0VOX0NPTE9OOiBUT0tFTl9DT0xPTixcbiAgVE9LRU5fVElMREU6IFRPS0VOX1RJTERFLFxuICBUT0tFTl9QSVBFOiBUT0tFTl9QSVBFLFxuICBUT0tFTl9JTlQ6IFRPS0VOX0lOVCxcbiAgVE9LRU5fRkxPQVQ6IFRPS0VOX0ZMT0FULFxuICBUT0tFTl9CT09MRUFOOiBUT0tFTl9CT09MRUFOLFxuICBUT0tFTl9OT05FOiBUT0tFTl9OT05FLFxuICBUT0tFTl9TWU1CT0w6IFRPS0VOX1NZTUJPTCxcbiAgVE9LRU5fU1BFQ0lBTDogVE9LRU5fU1BFQ0lBTCxcbiAgVE9LRU5fUkVHRVg6IFRPS0VOX1JFR0VYXG59OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG4vLyBBIHNpbXBsZSBjbGFzcyBzeXN0ZW0sIG1vcmUgZG9jdW1lbnRhdGlvbiB0byBjb21lXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIF90b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGxpYiA9IHJlcXVpcmUoJy4vbGliJyk7XG5mdW5jdGlvbiBwYXJlbnRXcmFwKHBhcmVudCwgcHJvcCkge1xuICBpZiAodHlwZW9mIHBhcmVudCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgcHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9wO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcGFyZW50IG1ldGhvZFxuICAgIHZhciB0bXAgPSB0aGlzLnBhcmVudDtcblxuICAgIC8vIFNldCBwYXJlbnQgdG8gdGhlIHByZXZpb3VzIG1ldGhvZCwgY2FsbCwgYW5kIHJlc3RvcmVcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB2YXIgcmVzID0gcHJvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMucGFyZW50ID0gdG1wO1xuICAgIHJldHVybiByZXM7XG4gIH07XG59XG5mdW5jdGlvbiBleHRlbmRDbGFzcyhjbHMsIG5hbWUsIHByb3BzKSB7XG4gIHByb3BzID0gcHJvcHMgfHwge307XG4gIGxpYi5rZXlzKHByb3BzKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgcHJvcHNba10gPSBwYXJlbnRXcmFwKGNscy5wcm90b3R5cGVba10sIHByb3BzW2tdKTtcbiAgfSk7XG4gIHZhciBzdWJjbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX2Nscykge1xuICAgIF9pbmhlcml0c0xvb3NlKHN1YmNsYXNzLCBfY2xzKTtcbiAgICBmdW5jdGlvbiBzdWJjbGFzcygpIHtcbiAgICAgIHJldHVybiBfY2xzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKHN1YmNsYXNzLCBbe1xuICAgICAga2V5OiBcInR5cGVuYW1lXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG4gICAgfV0pO1xuICAgIHJldHVybiBzdWJjbGFzcztcbiAgfShjbHMpO1xuICBsaWIuX2Fzc2lnbihzdWJjbGFzcy5wcm90b3R5cGUsIHByb3BzKTtcbiAgcmV0dXJuIHN1YmNsYXNzO1xufVxudmFyIE9iaiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9iaigpIHtcbiAgICAvLyBVbmZvcnR1bmF0ZWx5IG5lY2Vzc2FyeSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICB2YXIgX3Byb3RvID0gT2JqLnByb3RvdHlwZTtcbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge307XG4gIE9iai5leHRlbmQgPSBmdW5jdGlvbiBleHRlbmQobmFtZSwgcHJvcHMpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBwcm9wcyA9IG5hbWU7XG4gICAgICBuYW1lID0gJ2Fub255bW91cyc7XG4gICAgfVxuICAgIHJldHVybiBleHRlbmRDbGFzcyh0aGlzLCBuYW1lLCBwcm9wcyk7XG4gIH07XG4gIF9jcmVhdGVDbGFzcyhPYmosIFt7XG4gICAga2V5OiBcInR5cGVuYW1lXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gT2JqO1xufSgpO1xudmFyIEVtaXR0ZXJPYmogPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoRW1pdHRlck9iaiwgX0V2ZW50RW1pdHRlcik7XG4gIGZ1bmN0aW9uIEVtaXR0ZXJPYmooKSB7XG4gICAgdmFyIF90aGlzMjtcbiAgICB2YXIgX3RoaXM7XG4gICAgX3RoaXMgPSBfRXZlbnRFbWl0dGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAvLyBVbmZvcnR1bmF0ZWx5IG5lY2Vzc2FyeSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAoX3RoaXMyID0gX3RoaXMpLmluaXQuYXBwbHkoX3RoaXMyLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICB2YXIgX3Byb3RvMiA9IEVtaXR0ZXJPYmoucHJvdG90eXBlO1xuICBfcHJvdG8yLmluaXQgPSBmdW5jdGlvbiBpbml0KCkge307XG4gIEVtaXR0ZXJPYmouZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKG5hbWUsIHByb3BzKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgcHJvcHMgPSBuYW1lO1xuICAgICAgbmFtZSA9ICdhbm9ueW1vdXMnO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5kQ2xhc3ModGhpcywgbmFtZSwgcHJvcHMpO1xuICB9O1xuICBfY3JlYXRlQ2xhc3MoRW1pdHRlck9iaiwgW3tcbiAgICBrZXk6IFwidHlwZW5hbWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBFbWl0dGVyT2JqO1xufShFdmVudEVtaXR0ZXIpO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE9iajogT2JqLFxuICBFbWl0dGVyT2JqOiBFbWl0dGVyT2JqXG59OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIF90b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9vYmplY3QnKSxcbiAgT2JqID0gX3JlcXVpcmUuT2JqO1xuZnVuY3Rpb24gdHJhdmVyc2VBbmRDaGVjayhvYmosIHR5cGUsIHJlc3VsdHMpIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIHR5cGUpIHtcbiAgICByZXN1bHRzLnB1c2gob2JqKTtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgIG9iai5maW5kQWxsKHR5cGUsIHJlc3VsdHMpO1xuICB9XG59XG52YXIgTm9kZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX09iaikge1xuICBfaW5oZXJpdHNMb29zZShOb2RlLCBfT2JqKTtcbiAgZnVuY3Rpb24gTm9kZSgpIHtcbiAgICByZXR1cm4gX09iai5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cbiAgdmFyIF9wcm90byA9IE5vZGUucHJvdG90eXBlO1xuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQobGluZW5vLCBjb2xubykge1xuICAgIHZhciBfYXJndW1lbnRzID0gYXJndW1lbnRzLFxuICAgICAgX3RoaXMgPSB0aGlzO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICB0aGlzLmxpbmVubyA9IGxpbmVubztcbiAgICB0aGlzLmNvbG5vID0gY29sbm87XG4gICAgdGhpcy5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQsIGkpIHtcbiAgICAgIC8vIFRoZSBmaXJzdCB0d28gYXJncyBhcmUgbGluZS9jb2wgbnVtYmVycywgc28gb2Zmc2V0IGJ5IDJcbiAgICAgIHZhciB2YWwgPSBfYXJndW1lbnRzW2kgKyAyXTtcblxuICAgICAgLy8gRmllbGRzIHNob3VsZCBuZXZlciBiZSB1bmRlZmluZWQsIGJ1dCBudWxsLiBJdCBtYWtlc1xuICAgICAgLy8gdGVzdGluZyBlYXNpZXIgdG8gbm9ybWFsaXplIHZhbHVlcy5cbiAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWwgPSBudWxsO1xuICAgICAgfVxuICAgICAgX3RoaXNbZmllbGRdID0gdmFsO1xuICAgIH0pO1xuICB9O1xuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwodHlwZSwgcmVzdWx0cykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRyYXZlcnNlQW5kQ2hlY2soY2hpbGQsIHR5cGUsIHJlc3VsdHMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0cmF2ZXJzZUFuZENoZWNrKF90aGlzMltmaWVsZF0sIHR5cGUsIHJlc3VsdHMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuICBfcHJvdG8uaXRlckZpZWxkcyA9IGZ1bmN0aW9uIGl0ZXJGaWVsZHMoZnVuYykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICBmdW5jKF90aGlzM1tmaWVsZF0sIGZpZWxkKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIE5vZGU7XG59KE9iaik7IC8vIEFic3RyYWN0IG5vZGVzXG52YXIgVmFsdWUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFZhbHVlLCBfTm9kZSk7XG4gIGZ1bmN0aW9uIFZhbHVlKCkge1xuICAgIHJldHVybiBfTm9kZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKFZhbHVlLCBbe1xuICAgIGtleTogXCJ0eXBlbmFtZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuICdWYWx1ZSc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpZWxkc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIFsndmFsdWUnXTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFZhbHVlO1xufShOb2RlKTsgLy8gQ29uY3JldGUgbm9kZXNcbnZhciBOb2RlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX05vZGUyKSB7XG4gIF9pbmhlcml0c0xvb3NlKE5vZGVMaXN0LCBfTm9kZTIpO1xuICBmdW5jdGlvbiBOb2RlTGlzdCgpIHtcbiAgICByZXR1cm4gX05vZGUyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuICB2YXIgX3Byb3RvMiA9IE5vZGVMaXN0LnByb3RvdHlwZTtcbiAgX3Byb3RvMi5pbml0ID0gZnVuY3Rpb24gaW5pdChsaW5lbm8sIGNvbG5vLCBub2Rlcykge1xuICAgIF9Ob2RlMi5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMsIGxpbmVubywgY29sbm8sIG5vZGVzIHx8IFtdKTtcbiAgfTtcbiAgX3Byb3RvMi5hZGRDaGlsZCA9IGZ1bmN0aW9uIGFkZENoaWxkKG5vZGUpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gIH07XG4gIF9jcmVhdGVDbGFzcyhOb2RlTGlzdCwgW3tcbiAgICBrZXk6IFwidHlwZW5hbWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiAnTm9kZUxpc3QnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaWVsZHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBbJ2NoaWxkcmVuJ107XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBOb2RlTGlzdDtcbn0oTm9kZSk7XG52YXIgUm9vdCA9IE5vZGVMaXN0LmV4dGVuZCgnUm9vdCcpO1xudmFyIExpdGVyYWwgPSBWYWx1ZS5leHRlbmQoJ0xpdGVyYWwnKTtcbnZhciBfU3ltYm9sID0gVmFsdWUuZXh0ZW5kKCdTeW1ib2wnKTtcbnZhciBHcm91cCA9IE5vZGVMaXN0LmV4dGVuZCgnR3JvdXAnKTtcbnZhciBBcnJheU5vZGUgPSBOb2RlTGlzdC5leHRlbmQoJ0FycmF5Jyk7XG52YXIgUGFpciA9IE5vZGUuZXh0ZW5kKCdQYWlyJywge1xuICBmaWVsZHM6IFsna2V5JywgJ3ZhbHVlJ11cbn0pO1xudmFyIERpY3QgPSBOb2RlTGlzdC5leHRlbmQoJ0RpY3QnKTtcbnZhciBMb29rdXBWYWwgPSBOb2RlLmV4dGVuZCgnTG9va3VwVmFsJywge1xuICBmaWVsZHM6IFsndGFyZ2V0JywgJ3ZhbCddXG59KTtcbnZhciBJZiA9IE5vZGUuZXh0ZW5kKCdJZicsIHtcbiAgZmllbGRzOiBbJ2NvbmQnLCAnYm9keScsICdlbHNlXyddXG59KTtcbnZhciBJZkFzeW5jID0gSWYuZXh0ZW5kKCdJZkFzeW5jJyk7XG52YXIgSW5saW5lSWYgPSBOb2RlLmV4dGVuZCgnSW5saW5lSWYnLCB7XG4gIGZpZWxkczogWydjb25kJywgJ2JvZHknLCAnZWxzZV8nXVxufSk7XG52YXIgRm9yID0gTm9kZS5leHRlbmQoJ0ZvcicsIHtcbiAgZmllbGRzOiBbJ2FycicsICduYW1lJywgJ2JvZHknLCAnZWxzZV8nXVxufSk7XG52YXIgQXN5bmNFYWNoID0gRm9yLmV4dGVuZCgnQXN5bmNFYWNoJyk7XG52YXIgQXN5bmNBbGwgPSBGb3IuZXh0ZW5kKCdBc3luY0FsbCcpO1xudmFyIE1hY3JvID0gTm9kZS5leHRlbmQoJ01hY3JvJywge1xuICBmaWVsZHM6IFsnbmFtZScsICdhcmdzJywgJ2JvZHknXVxufSk7XG52YXIgQ2FsbGVyID0gTWFjcm8uZXh0ZW5kKCdDYWxsZXInKTtcbnZhciBJbXBvcnQgPSBOb2RlLmV4dGVuZCgnSW1wb3J0Jywge1xuICBmaWVsZHM6IFsndGVtcGxhdGUnLCAndGFyZ2V0JywgJ3dpdGhDb250ZXh0J11cbn0pO1xudmFyIEZyb21JbXBvcnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Ob2RlMykge1xuICBfaW5oZXJpdHNMb29zZShGcm9tSW1wb3J0LCBfTm9kZTMpO1xuICBmdW5jdGlvbiBGcm9tSW1wb3J0KCkge1xuICAgIHJldHVybiBfTm9kZTMuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG4gIHZhciBfcHJvdG8zID0gRnJvbUltcG9ydC5wcm90b3R5cGU7XG4gIF9wcm90bzMuaW5pdCA9IGZ1bmN0aW9uIGluaXQobGluZW5vLCBjb2xubywgdGVtcGxhdGUsIG5hbWVzLCB3aXRoQ29udGV4dCkge1xuICAgIF9Ob2RlMy5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMsIGxpbmVubywgY29sbm8sIHRlbXBsYXRlLCBuYW1lcyB8fCBuZXcgTm9kZUxpc3QoKSwgd2l0aENvbnRleHQpO1xuICB9O1xuICBfY3JlYXRlQ2xhc3MoRnJvbUltcG9ydCwgW3tcbiAgICBrZXk6IFwidHlwZW5hbWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiAnRnJvbUltcG9ydCc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpZWxkc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIFsndGVtcGxhdGUnLCAnbmFtZXMnLCAnd2l0aENvbnRleHQnXTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEZyb21JbXBvcnQ7XG59KE5vZGUpO1xudmFyIEZ1bkNhbGwgPSBOb2RlLmV4dGVuZCgnRnVuQ2FsbCcsIHtcbiAgZmllbGRzOiBbJ25hbWUnLCAnYXJncyddXG59KTtcbnZhciBGaWx0ZXIgPSBGdW5DYWxsLmV4dGVuZCgnRmlsdGVyJyk7XG52YXIgRmlsdGVyQXN5bmMgPSBGaWx0ZXIuZXh0ZW5kKCdGaWx0ZXJBc3luYycsIHtcbiAgZmllbGRzOiBbJ25hbWUnLCAnYXJncycsICdzeW1ib2wnXVxufSk7XG52YXIgS2V5d29yZEFyZ3MgPSBEaWN0LmV4dGVuZCgnS2V5d29yZEFyZ3MnKTtcbnZhciBCbG9jayA9IE5vZGUuZXh0ZW5kKCdCbG9jaycsIHtcbiAgZmllbGRzOiBbJ25hbWUnLCAnYm9keSddXG59KTtcbnZhciBTdXBlciA9IE5vZGUuZXh0ZW5kKCdTdXBlcicsIHtcbiAgZmllbGRzOiBbJ2Jsb2NrTmFtZScsICdzeW1ib2wnXVxufSk7XG52YXIgVGVtcGxhdGVSZWYgPSBOb2RlLmV4dGVuZCgnVGVtcGxhdGVSZWYnLCB7XG4gIGZpZWxkczogWyd0ZW1wbGF0ZSddXG59KTtcbnZhciBFeHRlbmRzID0gVGVtcGxhdGVSZWYuZXh0ZW5kKCdFeHRlbmRzJyk7XG52YXIgSW5jbHVkZSA9IE5vZGUuZXh0ZW5kKCdJbmNsdWRlJywge1xuICBmaWVsZHM6IFsndGVtcGxhdGUnLCAnaWdub3JlTWlzc2luZyddXG59KTtcbnZhciBTZXQgPSBOb2RlLmV4dGVuZCgnU2V0Jywge1xuICBmaWVsZHM6IFsndGFyZ2V0cycsICd2YWx1ZSddXG59KTtcbnZhciBTd2l0Y2ggPSBOb2RlLmV4dGVuZCgnU3dpdGNoJywge1xuICBmaWVsZHM6IFsnZXhwcicsICdjYXNlcycsICdkZWZhdWx0J11cbn0pO1xudmFyIENhc2UgPSBOb2RlLmV4dGVuZCgnQ2FzZScsIHtcbiAgZmllbGRzOiBbJ2NvbmQnLCAnYm9keSddXG59KTtcbnZhciBPdXRwdXQgPSBOb2RlTGlzdC5leHRlbmQoJ091dHB1dCcpO1xudmFyIENhcHR1cmUgPSBOb2RlLmV4dGVuZCgnQ2FwdHVyZScsIHtcbiAgZmllbGRzOiBbJ2JvZHknXVxufSk7XG52YXIgVGVtcGxhdGVEYXRhID0gTGl0ZXJhbC5leHRlbmQoJ1RlbXBsYXRlRGF0YScpO1xudmFyIFVuYXJ5T3AgPSBOb2RlLmV4dGVuZCgnVW5hcnlPcCcsIHtcbiAgZmllbGRzOiBbJ3RhcmdldCddXG59KTtcbnZhciBCaW5PcCA9IE5vZGUuZXh0ZW5kKCdCaW5PcCcsIHtcbiAgZmllbGRzOiBbJ2xlZnQnLCAncmlnaHQnXVxufSk7XG52YXIgSW4gPSBCaW5PcC5leHRlbmQoJ0luJyk7XG52YXIgSXMgPSBCaW5PcC5leHRlbmQoJ0lzJyk7XG52YXIgT3IgPSBCaW5PcC5leHRlbmQoJ09yJyk7XG52YXIgQW5kID0gQmluT3AuZXh0ZW5kKCdBbmQnKTtcbnZhciBOb3QgPSBVbmFyeU9wLmV4dGVuZCgnTm90Jyk7XG52YXIgQWRkID0gQmluT3AuZXh0ZW5kKCdBZGQnKTtcbnZhciBDb25jYXQgPSBCaW5PcC5leHRlbmQoJ0NvbmNhdCcpO1xudmFyIFN1YiA9IEJpbk9wLmV4dGVuZCgnU3ViJyk7XG52YXIgTXVsID0gQmluT3AuZXh0ZW5kKCdNdWwnKTtcbnZhciBEaXYgPSBCaW5PcC5leHRlbmQoJ0RpdicpO1xudmFyIEZsb29yRGl2ID0gQmluT3AuZXh0ZW5kKCdGbG9vckRpdicpO1xudmFyIE1vZCA9IEJpbk9wLmV4dGVuZCgnTW9kJyk7XG52YXIgUG93ID0gQmluT3AuZXh0ZW5kKCdQb3cnKTtcbnZhciBOZWcgPSBVbmFyeU9wLmV4dGVuZCgnTmVnJyk7XG52YXIgUG9zID0gVW5hcnlPcC5leHRlbmQoJ1BvcycpO1xudmFyIENvbXBhcmUgPSBOb2RlLmV4dGVuZCgnQ29tcGFyZScsIHtcbiAgZmllbGRzOiBbJ2V4cHInLCAnb3BzJ11cbn0pO1xudmFyIENvbXBhcmVPcGVyYW5kID0gTm9kZS5leHRlbmQoJ0NvbXBhcmVPcGVyYW5kJywge1xuICBmaWVsZHM6IFsnZXhwcicsICd0eXBlJ11cbn0pO1xudmFyIENhbGxFeHRlbnNpb24gPSBOb2RlLmV4dGVuZCgnQ2FsbEV4dGVuc2lvbicsIHtcbiAgaW5pdDogZnVuY3Rpb24gaW5pdChleHQsIHByb3AsIGFyZ3MsIGNvbnRlbnRBcmdzKSB7XG4gICAgdGhpcy5wYXJlbnQoKTtcbiAgICB0aGlzLmV4dE5hbWUgPSBleHQuX19uYW1lIHx8IGV4dDtcbiAgICB0aGlzLnByb3AgPSBwcm9wO1xuICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgbmV3IE5vZGVMaXN0KCk7XG4gICAgdGhpcy5jb250ZW50QXJncyA9IGNvbnRlbnRBcmdzIHx8IFtdO1xuICAgIHRoaXMuYXV0b2VzY2FwZSA9IGV4dC5hdXRvZXNjYXBlO1xuICB9LFxuICBmaWVsZHM6IFsnZXh0TmFtZScsICdwcm9wJywgJ2FyZ3MnLCAnY29udGVudEFyZ3MnXVxufSk7XG52YXIgQ2FsbEV4dGVuc2lvbkFzeW5jID0gQ2FsbEV4dGVuc2lvbi5leHRlbmQoJ0NhbGxFeHRlbnNpb25Bc3luYycpO1xuXG4vLyBUaGlzIGlzIGhhY2t5LCBidXQgdGhpcyBpcyBqdXN0IGEgZGVidWdnaW5nIGZ1bmN0aW9uIGFueXdheVxuZnVuY3Rpb24gcHJpbnQoc3RyLCBpbmRlbnQsIGlubGluZSkge1xuICB2YXIgbGluZXMgPSBzdHIuc3BsaXQoJ1xcbicpO1xuICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpKSB7XG4gICAgaWYgKGxpbmUgJiYgKGlubGluZSAmJiBpID4gMCB8fCAhaW5saW5lKSkge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJyAnLnJlcGVhdChpbmRlbnQpKTtcbiAgICB9XG4gICAgdmFyIG5sID0gaSA9PT0gbGluZXMubGVuZ3RoIC0gMSA/ICcnIDogJ1xcbic7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcIiArIGxpbmUgKyBubCk7XG4gIH0pO1xufVxuXG4vLyBQcmludCB0aGUgQVNUIGluIGEgbmljZWx5IGZvcm1hdHRlZCB0cmVlIGZvcm1hdCBmb3IgZGVidWdnaW5cbmZ1bmN0aW9uIHByaW50Tm9kZXMobm9kZSwgaW5kZW50KSB7XG4gIGluZGVudCA9IGluZGVudCB8fCAwO1xuICBwcmludChub2RlLnR5cGVuYW1lICsgJzogJywgaW5kZW50KTtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuICAgIHByaW50KCdcXG4nKTtcbiAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgIHByaW50Tm9kZXMobiwgaW5kZW50ICsgMik7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIENhbGxFeHRlbnNpb24pIHtcbiAgICBwcmludChub2RlLmV4dE5hbWUgKyBcIi5cIiArIG5vZGUucHJvcCArIFwiXFxuXCIpO1xuICAgIGlmIChub2RlLmFyZ3MpIHtcbiAgICAgIHByaW50Tm9kZXMobm9kZS5hcmdzLCBpbmRlbnQgKyAyKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY29udGVudEFyZ3MpIHtcbiAgICAgIG5vZGUuY29udGVudEFyZ3MuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgICBwcmludE5vZGVzKG4sIGluZGVudCArIDIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHZhciBwcm9wcyA9IG51bGw7XG4gICAgbm9kZS5pdGVyRmllbGRzKGZ1bmN0aW9uICh2YWwsIGZpZWxkTmFtZSkge1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgbm9kZXMucHVzaChbZmllbGROYW1lLCB2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgIHByb3BzW2ZpZWxkTmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBwcmludChKU09OLnN0cmluZ2lmeShwcm9wcywgbnVsbCwgMikgKyAnXFxuJywgbnVsbCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50KCdcXG4nKTtcbiAgICB9XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGZpZWxkTmFtZSA9IF9yZWZbMF0sXG4gICAgICAgIG4gPSBfcmVmWzFdO1xuICAgICAgcHJpbnQoXCJbXCIgKyBmaWVsZE5hbWUgKyBcIl0gPT5cIiwgaW5kZW50ICsgMik7XG4gICAgICBwcmludE5vZGVzKG4sIGluZGVudCArIDQpO1xuICAgIH0pO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTm9kZTogTm9kZSxcbiAgUm9vdDogUm9vdCxcbiAgTm9kZUxpc3Q6IE5vZGVMaXN0LFxuICBWYWx1ZTogVmFsdWUsXG4gIExpdGVyYWw6IExpdGVyYWwsXG4gIFN5bWJvbDogX1N5bWJvbCxcbiAgR3JvdXA6IEdyb3VwLFxuICBBcnJheTogQXJyYXlOb2RlLFxuICBQYWlyOiBQYWlyLFxuICBEaWN0OiBEaWN0LFxuICBPdXRwdXQ6IE91dHB1dCxcbiAgQ2FwdHVyZTogQ2FwdHVyZSxcbiAgVGVtcGxhdGVEYXRhOiBUZW1wbGF0ZURhdGEsXG4gIElmOiBJZixcbiAgSWZBc3luYzogSWZBc3luYyxcbiAgSW5saW5lSWY6IElubGluZUlmLFxuICBGb3I6IEZvcixcbiAgQXN5bmNFYWNoOiBBc3luY0VhY2gsXG4gIEFzeW5jQWxsOiBBc3luY0FsbCxcbiAgTWFjcm86IE1hY3JvLFxuICBDYWxsZXI6IENhbGxlcixcbiAgSW1wb3J0OiBJbXBvcnQsXG4gIEZyb21JbXBvcnQ6IEZyb21JbXBvcnQsXG4gIEZ1bkNhbGw6IEZ1bkNhbGwsXG4gIEZpbHRlcjogRmlsdGVyLFxuICBGaWx0ZXJBc3luYzogRmlsdGVyQXN5bmMsXG4gIEtleXdvcmRBcmdzOiBLZXl3b3JkQXJncyxcbiAgQmxvY2s6IEJsb2NrLFxuICBTdXBlcjogU3VwZXIsXG4gIEV4dGVuZHM6IEV4dGVuZHMsXG4gIEluY2x1ZGU6IEluY2x1ZGUsXG4gIFNldDogU2V0LFxuICBTd2l0Y2g6IFN3aXRjaCxcbiAgQ2FzZTogQ2FzZSxcbiAgTG9va3VwVmFsOiBMb29rdXBWYWwsXG4gIEJpbk9wOiBCaW5PcCxcbiAgSW46IEluLFxuICBJczogSXMsXG4gIE9yOiBPcixcbiAgQW5kOiBBbmQsXG4gIE5vdDogTm90LFxuICBBZGQ6IEFkZCxcbiAgQ29uY2F0OiBDb25jYXQsXG4gIFN1YjogU3ViLFxuICBNdWw6IE11bCxcbiAgRGl2OiBEaXYsXG4gIEZsb29yRGl2OiBGbG9vckRpdixcbiAgTW9kOiBNb2QsXG4gIFBvdzogUG93LFxuICBOZWc6IE5lZyxcbiAgUG9zOiBQb3MsXG4gIENvbXBhcmU6IENvbXBhcmUsXG4gIENvbXBhcmVPcGVyYW5kOiBDb21wYXJlT3BlcmFuZCxcbiAgQ2FsbEV4dGVuc2lvbjogQ2FsbEV4dGVuc2lvbixcbiAgQ2FsbEV4dGVuc2lvbkFzeW5jOiBDYWxsRXh0ZW5zaW9uQXN5bmMsXG4gIHByaW50Tm9kZXM6IHByaW50Tm9kZXNcbn07IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cbnZhciBsZXhlciA9IHJlcXVpcmUoJy4vbGV4ZXInKTtcbnZhciBub2RlcyA9IHJlcXVpcmUoJy4vbm9kZXMnKTtcbnZhciBPYmogPSByZXF1aXJlKCcuL29iamVjdCcpLk9iajtcbnZhciBsaWIgPSByZXF1aXJlKCcuL2xpYicpO1xudmFyIFBhcnNlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX09iaikge1xuICBfaW5oZXJpdHNMb29zZShQYXJzZXIsIF9PYmopO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgcmV0dXJuIF9PYmouYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG4gIHZhciBfcHJvdG8gPSBQYXJzZXIucHJvdG90eXBlO1xuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQodG9rZW5zKSB7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5wZWVrZWQgPSBudWxsO1xuICAgIHRoaXMuYnJlYWtPbkJsb2NrcyA9IG51bGw7XG4gICAgdGhpcy5kcm9wTGVhZGluZ1doaXRlc3BhY2UgPSBmYWxzZTtcbiAgICB0aGlzLmV4dGVuc2lvbnMgPSBbXTtcbiAgfTtcbiAgX3Byb3RvLm5leHRUb2tlbiA9IGZ1bmN0aW9uIG5leHRUb2tlbih3aXRoV2hpdGVzcGFjZSkge1xuICAgIHZhciB0b2s7XG4gICAgaWYgKHRoaXMucGVla2VkKSB7XG4gICAgICBpZiAoIXdpdGhXaGl0ZXNwYWNlICYmIHRoaXMucGVla2VkLnR5cGUgPT09IGxleGVyLlRPS0VOX1dISVRFU1BBQ0UpIHtcbiAgICAgICAgdGhpcy5wZWVrZWQgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9rID0gdGhpcy5wZWVrZWQ7XG4gICAgICAgIHRoaXMucGVla2VkID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgIH1cbiAgICB9XG4gICAgdG9rID0gdGhpcy50b2tlbnMubmV4dFRva2VuKCk7XG4gICAgaWYgKCF3aXRoV2hpdGVzcGFjZSkge1xuICAgICAgd2hpbGUgKHRvayAmJiB0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fV0hJVEVTUEFDRSkge1xuICAgICAgICB0b2sgPSB0aGlzLnRva2Vucy5uZXh0VG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvaztcbiAgfTtcbiAgX3Byb3RvLnBlZWtUb2tlbiA9IGZ1bmN0aW9uIHBlZWtUb2tlbigpIHtcbiAgICB0aGlzLnBlZWtlZCA9IHRoaXMucGVla2VkIHx8IHRoaXMubmV4dFRva2VuKCk7XG4gICAgcmV0dXJuIHRoaXMucGVla2VkO1xuICB9O1xuICBfcHJvdG8ucHVzaFRva2VuID0gZnVuY3Rpb24gcHVzaFRva2VuKHRvaykge1xuICAgIGlmICh0aGlzLnBlZWtlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdXNoVG9rZW46IGNhbiBvbmx5IHB1c2ggb25lIHRva2VuIG9uIGJldHdlZW4gcmVhZHMnKTtcbiAgICB9XG4gICAgdGhpcy5wZWVrZWQgPSB0b2s7XG4gIH07XG4gIF9wcm90by5lcnJvciA9IGZ1bmN0aW9uIGVycm9yKG1zZywgbGluZW5vLCBjb2xubykge1xuICAgIGlmIChsaW5lbm8gPT09IHVuZGVmaW5lZCB8fCBjb2xubyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgdG9rID0gdGhpcy5wZWVrVG9rZW4oKSB8fCB7fTtcbiAgICAgIGxpbmVubyA9IHRvay5saW5lbm87XG4gICAgICBjb2xubyA9IHRvay5jb2xubztcbiAgICB9XG4gICAgaWYgKGxpbmVubyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lbm8gKz0gMTtcbiAgICB9XG4gICAgaWYgKGNvbG5vICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbG5vICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBuZXcgbGliLlRlbXBsYXRlRXJyb3IobXNnLCBsaW5lbm8sIGNvbG5vKTtcbiAgfTtcbiAgX3Byb3RvLmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1zZywgbGluZW5vLCBjb2xubykge1xuICAgIHRocm93IHRoaXMuZXJyb3IobXNnLCBsaW5lbm8sIGNvbG5vKTtcbiAgfTtcbiAgX3Byb3RvLnNraXAgPSBmdW5jdGlvbiBza2lwKHR5cGUpIHtcbiAgICB2YXIgdG9rID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICBpZiAoIXRvayB8fCB0b2sudHlwZSAhPT0gdHlwZSkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odG9rKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIF9wcm90by5leHBlY3QgPSBmdW5jdGlvbiBleHBlY3QodHlwZSkge1xuICAgIHZhciB0b2sgPSB0aGlzLm5leHRUb2tlbigpO1xuICAgIGlmICh0b2sudHlwZSAhPT0gdHlwZSkge1xuICAgICAgdGhpcy5mYWlsKCdleHBlY3RlZCAnICsgdHlwZSArICcsIGdvdCAnICsgdG9rLnR5cGUsIHRvay5saW5lbm8sIHRvay5jb2xubyk7XG4gICAgfVxuICAgIHJldHVybiB0b2s7XG4gIH07XG4gIF9wcm90by5za2lwVmFsdWUgPSBmdW5jdGlvbiBza2lwVmFsdWUodHlwZSwgdmFsKSB7XG4gICAgdmFyIHRvayA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgaWYgKCF0b2sgfHwgdG9rLnR5cGUgIT09IHR5cGUgfHwgdG9rLnZhbHVlICE9PSB2YWwpIHtcbiAgICAgIHRoaXMucHVzaFRva2VuKHRvayk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICBfcHJvdG8uc2tpcFN5bWJvbCA9IGZ1bmN0aW9uIHNraXBTeW1ib2wodmFsKSB7XG4gICAgcmV0dXJuIHRoaXMuc2tpcFZhbHVlKGxleGVyLlRPS0VOX1NZTUJPTCwgdmFsKTtcbiAgfTtcbiAgX3Byb3RvLmFkdmFuY2VBZnRlckJsb2NrRW5kID0gZnVuY3Rpb24gYWR2YW5jZUFmdGVyQmxvY2tFbmQobmFtZSkge1xuICAgIHZhciB0b2s7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0b2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgICAgaWYgKCF0b2spIHtcbiAgICAgICAgdGhpcy5mYWlsKCd1bmV4cGVjdGVkIGVuZCBvZiBmaWxlJyk7XG4gICAgICB9XG4gICAgICBpZiAodG9rLnR5cGUgIT09IGxleGVyLlRPS0VOX1NZTUJPTCkge1xuICAgICAgICB0aGlzLmZhaWwoJ2FkdmFuY2VBZnRlckJsb2NrRW5kOiBleHBlY3RlZCBzeW1ib2wgdG9rZW4gb3IgJyArICdleHBsaWNpdCBuYW1lIHRvIGJlIHBhc3NlZCcpO1xuICAgICAgfVxuICAgICAgbmFtZSA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7XG4gICAgfVxuICAgIHRvayA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgaWYgKHRvayAmJiB0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fQkxPQ0tfRU5EKSB7XG4gICAgICBpZiAodG9rLnZhbHVlLmNoYXJBdCgwKSA9PT0gJy0nKSB7XG4gICAgICAgIHRoaXMuZHJvcExlYWRpbmdXaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsKCdleHBlY3RlZCBibG9jayBlbmQgaW4gJyArIG5hbWUgKyAnIHN0YXRlbWVudCcpO1xuICAgIH1cbiAgICByZXR1cm4gdG9rO1xuICB9O1xuICBfcHJvdG8uYWR2YW5jZUFmdGVyVmFyaWFibGVFbmQgPSBmdW5jdGlvbiBhZHZhbmNlQWZ0ZXJWYXJpYWJsZUVuZCgpIHtcbiAgICB2YXIgdG9rID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICBpZiAodG9rICYmIHRvay50eXBlID09PSBsZXhlci5UT0tFTl9WQVJJQUJMRV9FTkQpIHtcbiAgICAgIHRoaXMuZHJvcExlYWRpbmdXaGl0ZXNwYWNlID0gdG9rLnZhbHVlLmNoYXJBdCh0b2sudmFsdWUubGVuZ3RoIC0gdGhpcy50b2tlbnMudGFncy5WQVJJQUJMRV9FTkQubGVuZ3RoIC0gMSkgPT09ICctJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odG9rKTtcbiAgICAgIHRoaXMuZmFpbCgnZXhwZWN0ZWQgdmFyaWFibGUgZW5kJyk7XG4gICAgfVxuICB9O1xuICBfcHJvdG8ucGFyc2VGb3IgPSBmdW5jdGlvbiBwYXJzZUZvcigpIHtcbiAgICB2YXIgZm9yVG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICB2YXIgbm9kZTtcbiAgICB2YXIgZW5kQmxvY2s7XG4gICAgaWYgKHRoaXMuc2tpcFN5bWJvbCgnZm9yJykpIHtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuRm9yKGZvclRvay5saW5lbm8sIGZvclRvay5jb2xubyk7XG4gICAgICBlbmRCbG9jayA9ICdlbmRmb3InO1xuICAgIH0gZWxzZSBpZiAodGhpcy5za2lwU3ltYm9sKCdhc3luY0VhY2gnKSkge1xuICAgICAgbm9kZSA9IG5ldyBub2Rlcy5Bc3luY0VhY2goZm9yVG9rLmxpbmVubywgZm9yVG9rLmNvbG5vKTtcbiAgICAgIGVuZEJsb2NrID0gJ2VuZGVhY2gnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5za2lwU3ltYm9sKCdhc3luY0FsbCcpKSB7XG4gICAgICBub2RlID0gbmV3IG5vZGVzLkFzeW5jQWxsKGZvclRvay5saW5lbm8sIGZvclRvay5jb2xubyk7XG4gICAgICBlbmRCbG9jayA9ICdlbmRhbGwnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZhaWwoJ3BhcnNlRm9yOiBleHBlY3RlZCBmb3J7QXN5bmN9JywgZm9yVG9rLmxpbmVubywgZm9yVG9rLmNvbG5vKTtcbiAgICB9XG4gICAgbm9kZS5uYW1lID0gdGhpcy5wYXJzZVByaW1hcnkoKTtcbiAgICBpZiAoIShub2RlLm5hbWUgaW5zdGFuY2VvZiBub2Rlcy5TeW1ib2wpKSB7XG4gICAgICB0aGlzLmZhaWwoJ3BhcnNlRm9yOiB2YXJpYWJsZSBuYW1lIGV4cGVjdGVkIGZvciBsb29wJyk7XG4gICAgfVxuICAgIHZhciB0eXBlID0gdGhpcy5wZWVrVG9rZW4oKS50eXBlO1xuICAgIGlmICh0eXBlID09PSBsZXhlci5UT0tFTl9DT01NQSkge1xuICAgICAgLy8ga2V5L3ZhbHVlIGl0ZXJhdGlvblxuICAgICAgdmFyIGtleSA9IG5vZGUubmFtZTtcbiAgICAgIG5vZGUubmFtZSA9IG5ldyBub2Rlcy5BcnJheShrZXkubGluZW5vLCBrZXkuY29sbm8pO1xuICAgICAgbm9kZS5uYW1lLmFkZENoaWxkKGtleSk7XG4gICAgICB3aGlsZSAodGhpcy5za2lwKGxleGVyLlRPS0VOX0NPTU1BKSkge1xuICAgICAgICB2YXIgcHJpbSA9IHRoaXMucGFyc2VQcmltYXJ5KCk7XG4gICAgICAgIG5vZGUubmFtZS5hZGRDaGlsZChwcmltKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLnNraXBTeW1ib2woJ2luJykpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VGb3I6IGV4cGVjdGVkIFwiaW5cIiBrZXl3b3JkIGZvciBsb29wJywgZm9yVG9rLmxpbmVubywgZm9yVG9rLmNvbG5vKTtcbiAgICB9XG4gICAgbm9kZS5hcnIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoZm9yVG9rLnZhbHVlKTtcbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlVW50aWxCbG9ja3MoZW5kQmxvY2ssICdlbHNlJyk7XG4gICAgaWYgKHRoaXMuc2tpcFN5bWJvbCgnZWxzZScpKSB7XG4gICAgICB0aGlzLmFkdmFuY2VBZnRlckJsb2NrRW5kKCdlbHNlJyk7XG4gICAgICBub2RlLmVsc2VfID0gdGhpcy5wYXJzZVVudGlsQmxvY2tzKGVuZEJsb2NrKTtcbiAgICB9XG4gICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCgpO1xuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VNYWNybyA9IGZ1bmN0aW9uIHBhcnNlTWFjcm8oKSB7XG4gICAgdmFyIG1hY3JvVG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICBpZiAoIXRoaXMuc2tpcFN5bWJvbCgnbWFjcm8nKSkge1xuICAgICAgdGhpcy5mYWlsKCdleHBlY3RlZCBtYWNybycpO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VQcmltYXJ5KHRydWUpO1xuICAgIHZhciBhcmdzID0gdGhpcy5wYXJzZVNpZ25hdHVyZSgpO1xuICAgIHZhciBub2RlID0gbmV3IG5vZGVzLk1hY3JvKG1hY3JvVG9rLmxpbmVubywgbWFjcm9Ub2suY29sbm8sIG5hbWUsIGFyZ3MpO1xuICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQobWFjcm9Ub2sudmFsdWUpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VVbnRpbEJsb2NrcygnZW5kbWFjcm8nKTtcbiAgICB0aGlzLmFkdmFuY2VBZnRlckJsb2NrRW5kKCk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZUNhbGwgPSBmdW5jdGlvbiBwYXJzZUNhbGwoKSB7XG4gICAgLy8gYSBjYWxsIGJsb2NrIGlzIHBhcnNlZCBhcyBhIG5vcm1hbCBGdW5DYWxsLCBidXQgd2l0aCBhbiBhZGRlZFxuICAgIC8vICdjYWxsZXInIGt3YXJnIHdoaWNoIGlzIGEgQ2FsbGVyIG5vZGUuXG4gICAgdmFyIGNhbGxUb2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIGlmICghdGhpcy5za2lwU3ltYm9sKCdjYWxsJykpIHtcbiAgICAgIHRoaXMuZmFpbCgnZXhwZWN0ZWQgY2FsbCcpO1xuICAgIH1cbiAgICB2YXIgY2FsbGVyQXJncyA9IHRoaXMucGFyc2VTaWduYXR1cmUodHJ1ZSkgfHwgbmV3IG5vZGVzLk5vZGVMaXN0KCk7XG4gICAgdmFyIG1hY3JvQ2FsbCA9IHRoaXMucGFyc2VQcmltYXJ5KCk7XG4gICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZChjYWxsVG9rLnZhbHVlKTtcbiAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VVbnRpbEJsb2NrcygnZW5kY2FsbCcpO1xuICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoKTtcbiAgICB2YXIgY2FsbGVyTmFtZSA9IG5ldyBub2Rlcy5TeW1ib2woY2FsbFRvay5saW5lbm8sIGNhbGxUb2suY29sbm8sICdjYWxsZXInKTtcbiAgICB2YXIgY2FsbGVyTm9kZSA9IG5ldyBub2Rlcy5DYWxsZXIoY2FsbFRvay5saW5lbm8sIGNhbGxUb2suY29sbm8sIGNhbGxlck5hbWUsIGNhbGxlckFyZ3MsIGJvZHkpO1xuXG4gICAgLy8gYWRkIHRoZSBhZGRpdGlvbmFsIGNhbGxlciBrd2FyZywgYWRkaW5nIGt3YXJncyBpZiBuZWNlc3NhcnlcbiAgICB2YXIgYXJncyA9IG1hY3JvQ2FsbC5hcmdzLmNoaWxkcmVuO1xuICAgIGlmICghKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIG5vZGVzLktleXdvcmRBcmdzKSkge1xuICAgICAgYXJncy5wdXNoKG5ldyBub2Rlcy5LZXl3b3JkQXJncygpKTtcbiAgICB9XG4gICAgdmFyIGt3YXJncyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICBrd2FyZ3MuYWRkQ2hpbGQobmV3IG5vZGVzLlBhaXIoY2FsbFRvay5saW5lbm8sIGNhbGxUb2suY29sbm8sIGNhbGxlck5hbWUsIGNhbGxlck5vZGUpKTtcbiAgICByZXR1cm4gbmV3IG5vZGVzLk91dHB1dChjYWxsVG9rLmxpbmVubywgY2FsbFRvay5jb2xubywgW21hY3JvQ2FsbF0pO1xuICB9O1xuICBfcHJvdG8ucGFyc2VXaXRoQ29udGV4dCA9IGZ1bmN0aW9uIHBhcnNlV2l0aENvbnRleHQoKSB7XG4gICAgdmFyIHRvayA9IHRoaXMucGVla1Rva2VuKCk7XG4gICAgdmFyIHdpdGhDb250ZXh0ID0gbnVsbDtcbiAgICBpZiAodGhpcy5za2lwU3ltYm9sKCd3aXRoJykpIHtcbiAgICAgIHdpdGhDb250ZXh0ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2tpcFN5bWJvbCgnd2l0aG91dCcpKSB7XG4gICAgICB3aXRoQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAod2l0aENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmICghdGhpcy5za2lwU3ltYm9sKCdjb250ZXh0JykpIHtcbiAgICAgICAgdGhpcy5mYWlsKCdwYXJzZUZyb206IGV4cGVjdGVkIGNvbnRleHQgYWZ0ZXIgd2l0aC93aXRob3V0JywgdG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdpdGhDb250ZXh0O1xuICB9O1xuICBfcHJvdG8ucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiBwYXJzZUltcG9ydCgpIHtcbiAgICB2YXIgaW1wb3J0VG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICBpZiAoIXRoaXMuc2tpcFN5bWJvbCgnaW1wb3J0JykpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VJbXBvcnQ6IGV4cGVjdGVkIGltcG9ydCcsIGltcG9ydFRvay5saW5lbm8sIGltcG9ydFRvay5jb2xubyk7XG4gICAgfVxuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLnNraXBTeW1ib2woJ2FzJykpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VJbXBvcnQ6IGV4cGVjdGVkIFwiYXNcIiBrZXl3b3JkJywgaW1wb3J0VG9rLmxpbmVubywgaW1wb3J0VG9rLmNvbG5vKTtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgdmFyIHdpdGhDb250ZXh0ID0gdGhpcy5wYXJzZVdpdGhDb250ZXh0KCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbm9kZXMuSW1wb3J0KGltcG9ydFRvay5saW5lbm8sIGltcG9ydFRvay5jb2xubywgdGVtcGxhdGUsIHRhcmdldCwgd2l0aENvbnRleHQpO1xuICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoaW1wb3J0VG9rLnZhbHVlKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlRnJvbSA9IGZ1bmN0aW9uIHBhcnNlRnJvbSgpIHtcbiAgICB2YXIgZnJvbVRvayA9IHRoaXMucGVla1Rva2VuKCk7XG4gICAgaWYgKCF0aGlzLnNraXBTeW1ib2woJ2Zyb20nKSkge1xuICAgICAgdGhpcy5mYWlsKCdwYXJzZUZyb206IGV4cGVjdGVkIGZyb20nKTtcbiAgICB9XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMuc2tpcFN5bWJvbCgnaW1wb3J0JykpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VGcm9tOiBleHBlY3RlZCBpbXBvcnQnLCBmcm9tVG9rLmxpbmVubywgZnJvbVRvay5jb2xubyk7XG4gICAgfVxuICAgIHZhciBuYW1lcyA9IG5ldyBub2Rlcy5Ob2RlTGlzdCgpO1xuICAgIHZhciB3aXRoQ29udGV4dDtcbiAgICB3aGlsZSAoMSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgIHZhciBuZXh0VG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICAgIGlmIChuZXh0VG9rLnR5cGUgPT09IGxleGVyLlRPS0VOX0JMT0NLX0VORCkge1xuICAgICAgICBpZiAoIW5hbWVzLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZmFpbCgncGFyc2VGcm9tOiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgaW1wb3J0IG5hbWUnLCBmcm9tVG9rLmxpbmVubywgZnJvbVRvay5jb2xubyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgbWFudWFsbHkgYWR2YW5jaW5nIHBhc3QgdGhlIGJsb2NrIGVuZCxcbiAgICAgICAgLy8gbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoaXRlc3BhY2UgY29udHJvbCAobm9ybWFsbHlcbiAgICAgICAgLy8gdGhpcyBpcyBkb25lIGluIGBhZHZhbmNlQWZ0ZXJCbG9ja0VuZGBcbiAgICAgICAgaWYgKG5leHRUb2sudmFsdWUuY2hhckF0KDApID09PSAnLScpIHtcbiAgICAgICAgICB0aGlzLmRyb3BMZWFkaW5nV2hpdGVzcGFjZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAobmFtZXMuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5za2lwKGxleGVyLlRPS0VOX0NPTU1BKSkge1xuICAgICAgICB0aGlzLmZhaWwoJ3BhcnNlRnJvbTogZXhwZWN0ZWQgY29tbWEnLCBmcm9tVG9rLmxpbmVubywgZnJvbVRvay5jb2xubyk7XG4gICAgICB9XG4gICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VQcmltYXJ5KCk7XG4gICAgICBpZiAobmFtZS52YWx1ZS5jaGFyQXQoMCkgPT09ICdfJykge1xuICAgICAgICB0aGlzLmZhaWwoJ3BhcnNlRnJvbTogbmFtZXMgc3RhcnRpbmcgd2l0aCBhbiB1bmRlcnNjb3JlIGNhbm5vdCBiZSBpbXBvcnRlZCcsIG5hbWUubGluZW5vLCBuYW1lLmNvbG5vKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNraXBTeW1ib2woJ2FzJykpIHtcbiAgICAgICAgdmFyIGFsaWFzID0gdGhpcy5wYXJzZVByaW1hcnkoKTtcbiAgICAgICAgbmFtZXMuYWRkQ2hpbGQobmV3IG5vZGVzLlBhaXIobmFtZS5saW5lbm8sIG5hbWUuY29sbm8sIG5hbWUsIGFsaWFzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYW1lcy5hZGRDaGlsZChuYW1lKTtcbiAgICAgIH1cbiAgICAgIHdpdGhDb250ZXh0ID0gdGhpcy5wYXJzZVdpdGhDb250ZXh0KCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgbm9kZXMuRnJvbUltcG9ydChmcm9tVG9rLmxpbmVubywgZnJvbVRvay5jb2xubywgdGVtcGxhdGUsIG5hbWVzLCB3aXRoQ29udGV4dCk7XG4gIH07XG4gIF9wcm90by5wYXJzZUJsb2NrID0gZnVuY3Rpb24gcGFyc2VCbG9jaygpIHtcbiAgICB2YXIgdGFnID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICBpZiAoIXRoaXMuc2tpcFN5bWJvbCgnYmxvY2snKSkge1xuICAgICAgdGhpcy5mYWlsKCdwYXJzZUJsb2NrOiBleHBlY3RlZCBibG9jaycsIHRhZy5saW5lbm8sIHRhZy5jb2xubyk7XG4gICAgfVxuICAgIHZhciBub2RlID0gbmV3IG5vZGVzLkJsb2NrKHRhZy5saW5lbm8sIHRhZy5jb2xubyk7XG4gICAgbm9kZS5uYW1lID0gdGhpcy5wYXJzZVByaW1hcnkoKTtcbiAgICBpZiAoIShub2RlLm5hbWUgaW5zdGFuY2VvZiBub2Rlcy5TeW1ib2wpKSB7XG4gICAgICB0aGlzLmZhaWwoJ3BhcnNlQmxvY2s6IHZhcmlhYmxlIG5hbWUgZXhwZWN0ZWQnLCB0YWcubGluZW5vLCB0YWcuY29sbm8pO1xuICAgIH1cbiAgICB0aGlzLmFkdmFuY2VBZnRlckJsb2NrRW5kKHRhZy52YWx1ZSk7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVVudGlsQmxvY2tzKCdlbmRibG9jaycpO1xuICAgIHRoaXMuc2tpcFN5bWJvbCgnZW5kYmxvY2snKTtcbiAgICB0aGlzLnNraXBTeW1ib2wobm9kZS5uYW1lLnZhbHVlKTtcbiAgICB2YXIgdG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICBpZiAoIXRvaykge1xuICAgICAgdGhpcy5mYWlsKCdwYXJzZUJsb2NrOiBleHBlY3RlZCBlbmRibG9jaywgZ290IGVuZCBvZiBmaWxlJyk7XG4gICAgfVxuICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQodG9rLnZhbHVlKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlRXh0ZW5kcyA9IGZ1bmN0aW9uIHBhcnNlRXh0ZW5kcygpIHtcbiAgICB2YXIgdGFnTmFtZSA9ICdleHRlbmRzJztcbiAgICB2YXIgdGFnID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICBpZiAoIXRoaXMuc2tpcFN5bWJvbCh0YWdOYW1lKSkge1xuICAgICAgdGhpcy5mYWlsKCdwYXJzZVRlbXBsYXRlUmVmOiBleHBlY3RlZCAnICsgdGFnTmFtZSk7XG4gICAgfVxuICAgIHZhciBub2RlID0gbmV3IG5vZGVzLkV4dGVuZHModGFnLmxpbmVubywgdGFnLmNvbG5vKTtcbiAgICBub2RlLnRlbXBsYXRlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICB0aGlzLmFkdmFuY2VBZnRlckJsb2NrRW5kKHRhZy52YWx1ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZUluY2x1ZGUgPSBmdW5jdGlvbiBwYXJzZUluY2x1ZGUoKSB7XG4gICAgdmFyIHRhZ05hbWUgPSAnaW5jbHVkZSc7XG4gICAgdmFyIHRhZyA9IHRoaXMucGVla1Rva2VuKCk7XG4gICAgaWYgKCF0aGlzLnNraXBTeW1ib2wodGFnTmFtZSkpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VJbmNsdWRlOiBleHBlY3RlZCAnICsgdGFnTmFtZSk7XG4gICAgfVxuICAgIHZhciBub2RlID0gbmV3IG5vZGVzLkluY2x1ZGUodGFnLmxpbmVubywgdGFnLmNvbG5vKTtcbiAgICBub2RlLnRlbXBsYXRlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAodGhpcy5za2lwU3ltYm9sKCdpZ25vcmUnKSAmJiB0aGlzLnNraXBTeW1ib2woJ21pc3NpbmcnKSkge1xuICAgICAgbm9kZS5pZ25vcmVNaXNzaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCh0YWcudmFsdWUpO1xuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VJZiA9IGZ1bmN0aW9uIHBhcnNlSWYoKSB7XG4gICAgdmFyIHRhZyA9IHRoaXMucGVla1Rva2VuKCk7XG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKHRoaXMuc2tpcFN5bWJvbCgnaWYnKSB8fCB0aGlzLnNraXBTeW1ib2woJ2VsaWYnKSB8fCB0aGlzLnNraXBTeW1ib2woJ2Vsc2VpZicpKSB7XG4gICAgICBub2RlID0gbmV3IG5vZGVzLklmKHRhZy5saW5lbm8sIHRhZy5jb2xubyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNraXBTeW1ib2woJ2lmQXN5bmMnKSkge1xuICAgICAgbm9kZSA9IG5ldyBub2Rlcy5JZkFzeW5jKHRhZy5saW5lbm8sIHRhZy5jb2xubyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VJZjogZXhwZWN0ZWQgaWYsIGVsaWYsIG9yIGVsc2VpZicsIHRhZy5saW5lbm8sIHRhZy5jb2xubyk7XG4gICAgfVxuICAgIG5vZGUuY29uZCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCh0YWcudmFsdWUpO1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VVbnRpbEJsb2NrcygnZWxpZicsICdlbHNlaWYnLCAnZWxzZScsICdlbmRpZicpO1xuICAgIHZhciB0b2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIHN3aXRjaCAodG9rICYmIHRvay52YWx1ZSkge1xuICAgICAgY2FzZSAnZWxzZWlmJzpcbiAgICAgIGNhc2UgJ2VsaWYnOlxuICAgICAgICBub2RlLmVsc2VfID0gdGhpcy5wYXJzZUlmKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWxzZSc6XG4gICAgICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoKTtcbiAgICAgICAgbm9kZS5lbHNlXyA9IHRoaXMucGFyc2VVbnRpbEJsb2NrcygnZW5kaWYnKTtcbiAgICAgICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VuZGlmJzpcbiAgICAgICAgbm9kZS5lbHNlXyA9IG51bGw7XG4gICAgICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWwoJ3BhcnNlSWY6IGV4cGVjdGVkIGVsaWYsIGVsc2UsIG9yIGVuZGlmLCBnb3QgZW5kIG9mIGZpbGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZVNldCA9IGZ1bmN0aW9uIHBhcnNlU2V0KCkge1xuICAgIHZhciB0YWcgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIGlmICghdGhpcy5za2lwU3ltYm9sKCdzZXQnKSkge1xuICAgICAgdGhpcy5mYWlsKCdwYXJzZVNldDogZXhwZWN0ZWQgc2V0JywgdGFnLmxpbmVubywgdGFnLmNvbG5vKTtcbiAgICB9XG4gICAgdmFyIG5vZGUgPSBuZXcgbm9kZXMuU2V0KHRhZy5saW5lbm8sIHRhZy5jb2xubywgW10pO1xuICAgIHZhciB0YXJnZXQ7XG4gICAgd2hpbGUgKHRhcmdldCA9IHRoaXMucGFyc2VQcmltYXJ5KCkpIHtcbiAgICAgIG5vZGUudGFyZ2V0cy5wdXNoKHRhcmdldCk7XG4gICAgICBpZiAoIXRoaXMuc2tpcChsZXhlci5UT0tFTl9DT01NQSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5za2lwVmFsdWUobGV4ZXIuVE9LRU5fT1BFUkFUT1IsICc9JykpIHtcbiAgICAgIGlmICghdGhpcy5za2lwKGxleGVyLlRPS0VOX0JMT0NLX0VORCkpIHtcbiAgICAgICAgdGhpcy5mYWlsKCdwYXJzZVNldDogZXhwZWN0ZWQgPSBvciBibG9jayBlbmQgaW4gc2V0IHRhZycsIHRhZy5saW5lbm8sIHRhZy5jb2xubyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmJvZHkgPSBuZXcgbm9kZXMuQ2FwdHVyZSh0YWcubGluZW5vLCB0YWcuY29sbm8sIHRoaXMucGFyc2VVbnRpbEJsb2NrcygnZW5kc2V0JykpO1xuICAgICAgICBub2RlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnZhbHVlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQodGFnLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZVN3aXRjaCA9IGZ1bmN0aW9uIHBhcnNlU3dpdGNoKCkge1xuICAgIC8qXG4gICAgICogU3RvcmUgdGhlIHRhZyBuYW1lcyBpbiB2YXJpYWJsZXMgaW4gY2FzZSBzb21lb25lIGV2ZXIgd2FudHMgdG9cbiAgICAgKiBjdXN0b21pemUgdGhpcy5cbiAgICAgKi9cbiAgICB2YXIgc3dpdGNoU3RhcnQgPSAnc3dpdGNoJztcbiAgICB2YXIgc3dpdGNoRW5kID0gJ2VuZHN3aXRjaCc7XG4gICAgdmFyIGNhc2VTdGFydCA9ICdjYXNlJztcbiAgICB2YXIgY2FzZURlZmF1bHQgPSAnZGVmYXVsdCc7XG5cbiAgICAvLyBHZXQgdGhlIHN3aXRjaCB0YWcuXG4gICAgdmFyIHRhZyA9IHRoaXMucGVla1Rva2VuKCk7XG5cbiAgICAvLyBmYWlsIGVhcmx5IGlmIHdlIGdldCBzb21lIHVuZXhwZWN0ZWQgdGFnLlxuICAgIGlmICghdGhpcy5za2lwU3ltYm9sKHN3aXRjaFN0YXJ0KSAmJiAhdGhpcy5za2lwU3ltYm9sKGNhc2VTdGFydCkgJiYgIXRoaXMuc2tpcFN5bWJvbChjYXNlRGVmYXVsdCkpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VTd2l0Y2g6IGV4cGVjdGVkIFwic3dpdGNoLFwiIFwiY2FzZVwiIG9yIFwiZGVmYXVsdFwiJywgdGFnLmxpbmVubywgdGFnLmNvbG5vKTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSB0aGUgc3dpdGNoIGV4cHJlc3Npb25cbiAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICAvLyBhZHZhbmNlIHVudGlsIGEgc3RhcnQgb2YgYSBjYXNlLCBhIGRlZmF1bHQgY2FzZSBvciBhbiBlbmRzd2l0Y2guXG4gICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZChzd2l0Y2hTdGFydCk7XG4gICAgdGhpcy5wYXJzZVVudGlsQmxvY2tzKGNhc2VTdGFydCwgY2FzZURlZmF1bHQsIHN3aXRjaEVuZCk7XG5cbiAgICAvLyB0aGlzIGlzIHRoZSBmaXJzdCBjYXNlLiBpdCBjb3VsZCBhbHNvIGJlIGFuIGVuZHN3aXRjaCwgd2UnbGwgY2hlY2suXG4gICAgdmFyIHRvayA9IHRoaXMucGVla1Rva2VuKCk7XG5cbiAgICAvLyBjcmVhdGUgbmV3IHZhcmlhYmxlcyBmb3Igb3VyIGNhc2VzIGFuZCBkZWZhdWx0IGNhc2UuXG4gICAgdmFyIGNhc2VzID0gW107XG4gICAgdmFyIGRlZmF1bHRDYXNlO1xuXG4gICAgLy8gd2hpbGUgd2UncmUgZGVhbGluZyB3aXRoIG5ldyBjYXNlcyBub2Rlcy4uLlxuICAgIGRvIHtcbiAgICAgIC8vIHNraXAgdGhlIHN0YXJ0IHN5bWJvbCBhbmQgZ2V0IHRoZSBjYXNlIGV4cHJlc3Npb25cbiAgICAgIHRoaXMuc2tpcFN5bWJvbChjYXNlU3RhcnQpO1xuICAgICAgdmFyIGNvbmQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZChzd2l0Y2hTdGFydCk7XG4gICAgICAvLyBnZXQgdGhlIGJvZHkgb2YgdGhlIGNhc2Ugbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBhcnJheSBvZiBjYXNlcy5cbiAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZVVudGlsQmxvY2tzKGNhc2VTdGFydCwgY2FzZURlZmF1bHQsIHN3aXRjaEVuZCk7XG4gICAgICBjYXNlcy5wdXNoKG5ldyBub2Rlcy5DYXNlKHRvay5saW5lLCB0b2suY29sLCBjb25kLCBib2R5KSk7XG4gICAgICAvLyBnZXQgb3VyIG5leHQgY2FzZVxuICAgICAgdG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICB9IHdoaWxlICh0b2sgJiYgdG9rLnZhbHVlID09PSBjYXNlU3RhcnQpO1xuXG4gICAgLy8gd2UgZWl0aGVyIGhhdmUgYSBkZWZhdWx0IGNhc2Ugb3IgYSBzd2l0Y2ggZW5kLlxuICAgIHN3aXRjaCAodG9rLnZhbHVlKSB7XG4gICAgICBjYXNlIGNhc2VEZWZhdWx0OlxuICAgICAgICB0aGlzLmFkdmFuY2VBZnRlckJsb2NrRW5kKCk7XG4gICAgICAgIGRlZmF1bHRDYXNlID0gdGhpcy5wYXJzZVVudGlsQmxvY2tzKHN3aXRjaEVuZCk7XG4gICAgICAgIHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHN3aXRjaEVuZDpcbiAgICAgICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG90aGVyd2lzZSBiYWlsIGJlY2F1c2UgRU9GXG4gICAgICAgIHRoaXMuZmFpbCgncGFyc2VTd2l0Y2g6IGV4cGVjdGVkIFwiY2FzZSxcIiBcImRlZmF1bHRcIiBvciBcImVuZHN3aXRjaCxcIiBnb3QgRU9GLicpO1xuICAgIH1cblxuICAgIC8vIGFuZCByZXR1cm4gdGhlIHN3aXRjaCBub2RlLlxuICAgIHJldHVybiBuZXcgbm9kZXMuU3dpdGNoKHRhZy5saW5lbm8sIHRhZy5jb2xubywgZXhwciwgY2FzZXMsIGRlZmF1bHRDYXNlKTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlU3RhdGVtZW50ID0gZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRvayA9IHRoaXMucGVla1Rva2VuKCk7XG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKHRvay50eXBlICE9PSBsZXhlci5UT0tFTl9TWU1CT0wpIHtcbiAgICAgIHRoaXMuZmFpbCgndGFnIG5hbWUgZXhwZWN0ZWQnLCB0b2subGluZW5vLCB0b2suY29sbm8pO1xuICAgIH1cbiAgICBpZiAodGhpcy5icmVha09uQmxvY2tzICYmIGxpYi5pbmRleE9mKHRoaXMuYnJlYWtPbkJsb2NrcywgdG9rLnZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRvay52YWx1ZSkge1xuICAgICAgY2FzZSAncmF3JzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VSYXcoKTtcbiAgICAgIGNhc2UgJ3ZlcmJhdGltJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VSYXcoJ3ZlcmJhdGltJyk7XG4gICAgICBjYXNlICdpZic6XG4gICAgICBjYXNlICdpZkFzeW5jJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VJZigpO1xuICAgICAgY2FzZSAnZm9yJzpcbiAgICAgIGNhc2UgJ2FzeW5jRWFjaCc6XG4gICAgICBjYXNlICdhc3luY0FsbCc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9yKCk7XG4gICAgICBjYXNlICdibG9jayc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgIGNhc2UgJ2V4dGVuZHMnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUV4dGVuZHMoKTtcbiAgICAgIGNhc2UgJ2luY2x1ZGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUluY2x1ZGUoKTtcbiAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2V0KCk7XG4gICAgICBjYXNlICdtYWNybyc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlTWFjcm8oKTtcbiAgICAgIGNhc2UgJ2NhbGwnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNhbGwoKTtcbiAgICAgIGNhc2UgJ2ltcG9ydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlSW1wb3J0KCk7XG4gICAgICBjYXNlICdmcm9tJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGcm9tKCk7XG4gICAgICBjYXNlICdmaWx0ZXInOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZpbHRlclN0YXRlbWVudCgpO1xuICAgICAgY2FzZSAnc3dpdGNoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VTd2l0Y2goKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBleHQgPSB0aGlzLmV4dGVuc2lvbnNbaV07XG4gICAgICAgICAgICBpZiAobGliLmluZGV4T2YoZXh0LnRhZ3MgfHwgW10sIHRvay52YWx1ZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiBleHQucGFyc2UodGhpcywgbm9kZXMsIGxleGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mYWlsKCd1bmtub3duIGJsb2NrIHRhZzogJyArIHRvay52YWx1ZSwgdG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZVJhdyA9IGZ1bmN0aW9uIHBhcnNlUmF3KHRhZ05hbWUpIHtcbiAgICB0YWdOYW1lID0gdGFnTmFtZSB8fCAncmF3JztcbiAgICB2YXIgZW5kVGFnTmFtZSA9ICdlbmQnICsgdGFnTmFtZTtcbiAgICAvLyBMb29rIGZvciB1cGNvbWluZyByYXcgYmxvY2tzIChpZ25vcmUgYWxsIG90aGVyIGtpbmRzIG9mIGJsb2NrcylcbiAgICB2YXIgcmF3QmxvY2tSZWdleCA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPyl7JVxcXFxzKignICsgdGFnTmFtZSArICd8JyArIGVuZFRhZ05hbWUgKyAnKVxcXFxzKig/PSV9KSV9Jyk7XG4gICAgdmFyIHJhd0xldmVsID0gMTtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIG1hdGNoZXMgPSBudWxsO1xuXG4gICAgLy8gU2tpcCBvcGVuaW5nIHJhdyB0b2tlblxuICAgIC8vIEtlZXAgdGhpcyB0b2tlbiB0byB0cmFjayBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyc1xuICAgIHZhciBiZWd1biA9IHRoaXMuYWR2YW5jZUFmdGVyQmxvY2tFbmQoKTtcblxuICAgIC8vIEV4aXQgd2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8gbWF0Y2hcbiAgICAvLyBvciB3aGVuIHdlJ3ZlIGZvdW5kIHRoZSBtYXRjaGluZyBcImVuZHJhd1wiIGJsb2NrXG4gICAgd2hpbGUgKChtYXRjaGVzID0gdGhpcy50b2tlbnMuX2V4dHJhY3RSZWdleChyYXdCbG9ja1JlZ2V4KSkgJiYgcmF3TGV2ZWwgPiAwKSB7XG4gICAgICB2YXIgYWxsID0gbWF0Y2hlc1swXTtcbiAgICAgIHZhciBwcmUgPSBtYXRjaGVzWzFdO1xuICAgICAgdmFyIGJsb2NrTmFtZSA9IG1hdGNoZXNbMl07XG5cbiAgICAgIC8vIEFkanVzdCByYXdsZXZlbFxuICAgICAgaWYgKGJsb2NrTmFtZSA9PT0gdGFnTmFtZSkge1xuICAgICAgICByYXdMZXZlbCArPSAxO1xuICAgICAgfSBlbHNlIGlmIChibG9ja05hbWUgPT09IGVuZFRhZ05hbWUpIHtcbiAgICAgICAgcmF3TGV2ZWwgLT0gMTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHRvIHN0clxuICAgICAgaWYgKHJhd0xldmVsID09PSAwKSB7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZXhjbHVkZSB0aGUgbGFzdCBcImVuZHJhd1wiXG4gICAgICAgIHN0ciArPSBwcmU7XG4gICAgICAgIC8vIE1vdmUgdG9rZW5pemVyIHRvIGJlZ2lubmluZyBvZiBlbmRyYXcgYmxvY2tcbiAgICAgICAgdGhpcy50b2tlbnMuYmFja04oYWxsLmxlbmd0aCAtIHByZS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyICs9IGFsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBub2Rlcy5PdXRwdXQoYmVndW4ubGluZW5vLCBiZWd1bi5jb2xubywgW25ldyBub2Rlcy5UZW1wbGF0ZURhdGEoYmVndW4ubGluZW5vLCBiZWd1bi5jb2xubywgc3RyKV0pO1xuICB9O1xuICBfcHJvdG8ucGFyc2VQb3N0Zml4ID0gZnVuY3Rpb24gcGFyc2VQb3N0Zml4KG5vZGUpIHtcbiAgICB2YXIgbG9va3VwO1xuICAgIHZhciB0b2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIHdoaWxlICh0b2spIHtcbiAgICAgIGlmICh0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fTEVGVF9QQVJFTikge1xuICAgICAgICAvLyBGdW5jdGlvbiBjYWxsXG4gICAgICAgIG5vZGUgPSBuZXcgbm9kZXMuRnVuQ2FsbCh0b2subGluZW5vLCB0b2suY29sbm8sIG5vZGUsIHRoaXMucGFyc2VTaWduYXR1cmUoKSk7XG4gICAgICB9IGVsc2UgaWYgKHRvay50eXBlID09PSBsZXhlci5UT0tFTl9MRUZUX0JSQUNLRVQpIHtcbiAgICAgICAgLy8gUmVmZXJlbmNlXG4gICAgICAgIGxvb2t1cCA9IHRoaXMucGFyc2VBZ2dyZWdhdGUoKTtcbiAgICAgICAgaWYgKGxvb2t1cC5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5mYWlsKCdpbnZhbGlkIGluZGV4Jyk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5ldyBub2Rlcy5Mb29rdXBWYWwodG9rLmxpbmVubywgdG9rLmNvbG5vLCBub2RlLCBsb29rdXAuY2hpbGRyZW5bMF0pO1xuICAgICAgfSBlbHNlIGlmICh0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fT1BFUkFUT1IgJiYgdG9rLnZhbHVlID09PSAnLicpIHtcbiAgICAgICAgLy8gUmVmZXJlbmNlXG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIHZhciB2YWwgPSB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICBpZiAodmFsLnR5cGUgIT09IGxleGVyLlRPS0VOX1NZTUJPTCkge1xuICAgICAgICAgIHRoaXMuZmFpbCgnZXhwZWN0ZWQgbmFtZSBhcyBsb29rdXAgdmFsdWUsIGdvdCAnICsgdmFsLnZhbHVlLCB2YWwubGluZW5vLCB2YWwuY29sbm8pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBhIGxpdGVyYWwgc3RyaW5nIGJlY2F1c2UgaXQncyBub3QgYSB2YXJpYWJsZVxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgbG9va3VwID0gbmV3IG5vZGVzLkxpdGVyYWwodmFsLmxpbmVubywgdmFsLmNvbG5vLCB2YWwudmFsdWUpO1xuICAgICAgICBub2RlID0gbmV3IG5vZGVzLkxvb2t1cFZhbCh0b2subGluZW5vLCB0b2suY29sbm8sIG5vZGUsIGxvb2t1cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRvayA9IHRoaXMucGVla1Rva2VuKCk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VFeHByZXNzaW9uID0gZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5wYXJzZUlubGluZUlmKCk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZUlubGluZUlmID0gZnVuY3Rpb24gcGFyc2VJbmxpbmVJZigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VPcigpO1xuICAgIGlmICh0aGlzLnNraXBTeW1ib2woJ2lmJykpIHtcbiAgICAgIHZhciBjb25kTm9kZSA9IHRoaXMucGFyc2VPcigpO1xuICAgICAgdmFyIGJvZHlOb2RlID0gbm9kZTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuSW5saW5lSWYobm9kZS5saW5lbm8sIG5vZGUuY29sbm8pO1xuICAgICAgbm9kZS5ib2R5ID0gYm9keU5vZGU7XG4gICAgICBub2RlLmNvbmQgPSBjb25kTm9kZTtcbiAgICAgIGlmICh0aGlzLnNraXBTeW1ib2woJ2Vsc2UnKSkge1xuICAgICAgICBub2RlLmVsc2VfID0gdGhpcy5wYXJzZU9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmVsc2VfID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZU9yID0gZnVuY3Rpb24gcGFyc2VPcigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VBbmQoKTtcbiAgICB3aGlsZSAodGhpcy5za2lwU3ltYm9sKCdvcicpKSB7XG4gICAgICB2YXIgbm9kZTIgPSB0aGlzLnBhcnNlQW5kKCk7XG4gICAgICBub2RlID0gbmV3IG5vZGVzLk9yKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLCBub2RlMik7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VBbmQgPSBmdW5jdGlvbiBwYXJzZUFuZCgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VOb3QoKTtcbiAgICB3aGlsZSAodGhpcy5za2lwU3ltYm9sKCdhbmQnKSkge1xuICAgICAgdmFyIG5vZGUyID0gdGhpcy5wYXJzZU5vdCgpO1xuICAgICAgbm9kZSA9IG5ldyBub2Rlcy5BbmQobm9kZS5saW5lbm8sIG5vZGUuY29sbm8sIG5vZGUsIG5vZGUyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZU5vdCA9IGZ1bmN0aW9uIHBhcnNlTm90KCkge1xuICAgIHZhciB0b2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIGlmICh0aGlzLnNraXBTeW1ib2woJ25vdCcpKSB7XG4gICAgICByZXR1cm4gbmV3IG5vZGVzLk5vdCh0b2subGluZW5vLCB0b2suY29sbm8sIHRoaXMucGFyc2VOb3QoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlSW4oKTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlSW4gPSBmdW5jdGlvbiBwYXJzZUluKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5wYXJzZUlzKCk7XG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAvLyBjaGVjayBpZiB0aGUgbmV4dCB0b2tlbiBpcyAnbm90J1xuICAgICAgdmFyIHRvayA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICBpZiAoIXRvaykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBpbnZlcnQgPSB0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fU1lNQk9MICYmIHRvay52YWx1ZSA9PT0gJ25vdCc7XG4gICAgICAvLyBpZiBpdCB3YXNuJ3QgJ25vdCcsIHB1dCBpdCBiYWNrXG4gICAgICBpZiAoIWludmVydCkge1xuICAgICAgICB0aGlzLnB1c2hUb2tlbih0b2spO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2tpcFN5bWJvbCgnaW4nKSkge1xuICAgICAgICB2YXIgbm9kZTIgPSB0aGlzLnBhcnNlSXMoKTtcbiAgICAgICAgbm9kZSA9IG5ldyBub2Rlcy5Jbihub2RlLmxpbmVubywgbm9kZS5jb2xubywgbm9kZSwgbm9kZTIpO1xuICAgICAgICBpZiAoaW52ZXJ0KSB7XG4gICAgICAgICAgbm9kZSA9IG5ldyBub2Rlcy5Ob3Qobm9kZS5saW5lbm8sIG5vZGUuY29sbm8sIG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB3ZSdkIGZvdW5kIGEgJ25vdCcgYnV0IHRoaXMgd2Fzbid0IGFuICdpbicsIHB1dCBiYWNrIHRoZSAnbm90J1xuICAgICAgICBpZiAoaW52ZXJ0KSB7XG4gICAgICAgICAgdGhpcy5wdXNoVG9rZW4odG9rKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvLyBJIHB1dCB0aGlzIHJpZ2h0IGFmdGVyIFwiaW5cIiBpbiB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBzdGFjay4gVGhhdCBjYW5cbiAgLy8gb2J2aW91c2x5IGJlIGNoYW5nZWQgdG8gYmUgY2xvc2VyIHRvIEppbmphLlxuICA7XG4gIF9wcm90by5wYXJzZUlzID0gZnVuY3Rpb24gcGFyc2VJcygpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VDb21wYXJlKCk7XG4gICAgLy8gbG9vayBmb3IgYW4gaXNcbiAgICBpZiAodGhpcy5za2lwU3ltYm9sKCdpcycpKSB7XG4gICAgICAvLyBsb29rIGZvciBhIG5vdFxuICAgICAgdmFyIG5vdCA9IHRoaXMuc2tpcFN5bWJvbCgnbm90Jyk7XG4gICAgICAvLyBnZXQgdGhlIG5leHQgbm9kZVxuICAgICAgdmFyIG5vZGUyID0gdGhpcy5wYXJzZUNvbXBhcmUoKTtcbiAgICAgIC8vIGNyZWF0ZSBhbiBJcyBub2RlIHVzaW5nIHRoZSBuZXh0IG5vZGUgYW5kIHRoZSBpbmZvIGZyb20gb3VyIElzIG5vZGUuXG4gICAgICBub2RlID0gbmV3IG5vZGVzLklzKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLCBub2RlMik7XG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgTm90LCBjcmVhdGUgYSBOb3Qgbm9kZSBmcm9tIG91ciBJcyBub2RlLlxuICAgICAgaWYgKG5vdCkge1xuICAgICAgICBub2RlID0gbmV3IG5vZGVzLk5vdChub2RlLmxpbmVubywgbm9kZS5jb2xubywgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiB0aGUgbm9kZS5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlQ29tcGFyZSA9IGZ1bmN0aW9uIHBhcnNlQ29tcGFyZSgpIHtcbiAgICB2YXIgY29tcGFyZU9wcyA9IFsnPT0nLCAnPT09JywgJyE9JywgJyE9PScsICc8JywgJz4nLCAnPD0nLCAnPj0nXTtcbiAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VDb25jYXQoKTtcbiAgICB2YXIgb3BzID0gW107XG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICB2YXIgdG9rID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgIGlmICghdG9rKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChjb21wYXJlT3BzLmluZGV4T2YodG9rLnZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgb3BzLnB1c2gobmV3IG5vZGVzLkNvbXBhcmVPcGVyYW5kKHRvay5saW5lbm8sIHRvay5jb2xubywgdGhpcy5wYXJzZUNvbmNhdCgpLCB0b2sudmFsdWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFRva2VuKHRvayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBub2Rlcy5Db21wYXJlKG9wc1swXS5saW5lbm8sIG9wc1swXS5jb2xubywgZXhwciwgb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZHMgdGhlICd+JyBmb3Igc3RyaW5nIGNvbmNhdGVuYXRpb25cbiAgO1xuICBfcHJvdG8ucGFyc2VDb25jYXQgPSBmdW5jdGlvbiBwYXJzZUNvbmNhdCgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VBZGQoKTtcbiAgICB3aGlsZSAodGhpcy5za2lwVmFsdWUobGV4ZXIuVE9LRU5fVElMREUsICd+JykpIHtcbiAgICAgIHZhciBub2RlMiA9IHRoaXMucGFyc2VBZGQoKTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuQ29uY2F0KG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLCBub2RlMik7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VBZGQgPSBmdW5jdGlvbiBwYXJzZUFkZCgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VTdWIoKTtcbiAgICB3aGlsZSAodGhpcy5za2lwVmFsdWUobGV4ZXIuVE9LRU5fT1BFUkFUT1IsICcrJykpIHtcbiAgICAgIHZhciBub2RlMiA9IHRoaXMucGFyc2VTdWIoKTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuQWRkKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLCBub2RlMik7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VTdWIgPSBmdW5jdGlvbiBwYXJzZVN1YigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VNdWwoKTtcbiAgICB3aGlsZSAodGhpcy5za2lwVmFsdWUobGV4ZXIuVE9LRU5fT1BFUkFUT1IsICctJykpIHtcbiAgICAgIHZhciBub2RlMiA9IHRoaXMucGFyc2VNdWwoKTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuU3ViKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLCBub2RlMik7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VNdWwgPSBmdW5jdGlvbiBwYXJzZU11bCgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VEaXYoKTtcbiAgICB3aGlsZSAodGhpcy5za2lwVmFsdWUobGV4ZXIuVE9LRU5fT1BFUkFUT1IsICcqJykpIHtcbiAgICAgIHZhciBub2RlMiA9IHRoaXMucGFyc2VEaXYoKTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuTXVsKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLCBub2RlMik7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VEaXYgPSBmdW5jdGlvbiBwYXJzZURpdigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMucGFyc2VGbG9vckRpdigpO1xuICAgIHdoaWxlICh0aGlzLnNraXBWYWx1ZShsZXhlci5UT0tFTl9PUEVSQVRPUiwgJy8nKSkge1xuICAgICAgdmFyIG5vZGUyID0gdGhpcy5wYXJzZUZsb29yRGl2KCk7XG4gICAgICBub2RlID0gbmV3IG5vZGVzLkRpdihub2RlLmxpbmVubywgbm9kZS5jb2xubywgbm9kZSwgbm9kZTIpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlRmxvb3JEaXYgPSBmdW5jdGlvbiBwYXJzZUZsb29yRGl2KCkge1xuICAgIHZhciBub2RlID0gdGhpcy5wYXJzZU1vZCgpO1xuICAgIHdoaWxlICh0aGlzLnNraXBWYWx1ZShsZXhlci5UT0tFTl9PUEVSQVRPUiwgJy8vJykpIHtcbiAgICAgIHZhciBub2RlMiA9IHRoaXMucGFyc2VNb2QoKTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuRmxvb3JEaXYobm9kZS5saW5lbm8sIG5vZGUuY29sbm8sIG5vZGUsIG5vZGUyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZU1vZCA9IGZ1bmN0aW9uIHBhcnNlTW9kKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5wYXJzZVBvdygpO1xuICAgIHdoaWxlICh0aGlzLnNraXBWYWx1ZShsZXhlci5UT0tFTl9PUEVSQVRPUiwgJyUnKSkge1xuICAgICAgdmFyIG5vZGUyID0gdGhpcy5wYXJzZVBvdygpO1xuICAgICAgbm9kZSA9IG5ldyBub2Rlcy5Nb2Qobm9kZS5saW5lbm8sIG5vZGUuY29sbm8sIG5vZGUsIG5vZGUyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZVBvdyA9IGZ1bmN0aW9uIHBhcnNlUG93KCkge1xuICAgIHZhciBub2RlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG4gICAgd2hpbGUgKHRoaXMuc2tpcFZhbHVlKGxleGVyLlRPS0VOX09QRVJBVE9SLCAnKionKSkge1xuICAgICAgdmFyIG5vZGUyID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG4gICAgICBub2RlID0gbmV3IG5vZGVzLlBvdyhub2RlLmxpbmVubywgbm9kZS5jb2xubywgbm9kZSwgbm9kZTIpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlVW5hcnkgPSBmdW5jdGlvbiBwYXJzZVVuYXJ5KG5vRmlsdGVycykge1xuICAgIHZhciB0b2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIHZhciBub2RlO1xuICAgIGlmICh0aGlzLnNraXBWYWx1ZShsZXhlci5UT0tFTl9PUEVSQVRPUiwgJy0nKSkge1xuICAgICAgbm9kZSA9IG5ldyBub2Rlcy5OZWcodG9rLmxpbmVubywgdG9rLmNvbG5vLCB0aGlzLnBhcnNlVW5hcnkodHJ1ZSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5za2lwVmFsdWUobGV4ZXIuVE9LRU5fT1BFUkFUT1IsICcrJykpIHtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuUG9zKHRvay5saW5lbm8sIHRvay5jb2xubywgdGhpcy5wYXJzZVVuYXJ5KHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZSA9IHRoaXMucGFyc2VQcmltYXJ5KCk7XG4gICAgfVxuICAgIGlmICghbm9GaWx0ZXJzKSB7XG4gICAgICBub2RlID0gdGhpcy5wYXJzZUZpbHRlcihub2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZVByaW1hcnkgPSBmdW5jdGlvbiBwYXJzZVByaW1hcnkobm9Qb3N0Zml4KSB7XG4gICAgdmFyIHRvayA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgdmFyIHZhbDtcbiAgICB2YXIgbm9kZSA9IG51bGw7XG4gICAgaWYgKCF0b2spIHtcbiAgICAgIHRoaXMuZmFpbCgnZXhwZWN0ZWQgZXhwcmVzc2lvbiwgZ290IGVuZCBvZiBmaWxlJyk7XG4gICAgfSBlbHNlIGlmICh0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fU1RSSU5HKSB7XG4gICAgICB2YWwgPSB0b2sudmFsdWU7XG4gICAgfSBlbHNlIGlmICh0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fSU5UKSB7XG4gICAgICB2YWwgPSBwYXJzZUludCh0b2sudmFsdWUsIDEwKTtcbiAgICB9IGVsc2UgaWYgKHRvay50eXBlID09PSBsZXhlci5UT0tFTl9GTE9BVCkge1xuICAgICAgdmFsID0gcGFyc2VGbG9hdCh0b2sudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodG9rLnR5cGUgPT09IGxleGVyLlRPS0VOX0JPT0xFQU4pIHtcbiAgICAgIGlmICh0b2sudmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICB2YWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0b2sudmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgdmFsID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZhaWwoJ2ludmFsaWQgYm9vbGVhbjogJyArIHRvay52YWx1ZSwgdG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRvay50eXBlID09PSBsZXhlci5UT0tFTl9OT05FKSB7XG4gICAgICB2YWwgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodG9rLnR5cGUgPT09IGxleGVyLlRPS0VOX1JFR0VYKSB7XG4gICAgICB2YWwgPSBuZXcgUmVnRXhwKHRvay52YWx1ZS5ib2R5LCB0b2sudmFsdWUuZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuTGl0ZXJhbCh0b2subGluZW5vLCB0b2suY29sbm8sIHZhbCk7XG4gICAgfSBlbHNlIGlmICh0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fU1lNQk9MKSB7XG4gICAgICBub2RlID0gbmV3IG5vZGVzLlN5bWJvbCh0b2subGluZW5vLCB0b2suY29sbm8sIHRvay52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlZSBpZiBpdCdzIGFuIGFnZ3JlZ2F0ZSB0eXBlLCB3ZSBuZWVkIHRvIHB1c2ggdGhlXG4gICAgICAvLyBjdXJyZW50IGRlbGltaXRlciB0b2tlbiBiYWNrIG9uXG4gICAgICB0aGlzLnB1c2hUb2tlbih0b2spO1xuICAgICAgbm9kZSA9IHRoaXMucGFyc2VBZ2dyZWdhdGUoKTtcbiAgICB9XG4gICAgaWYgKCFub1Bvc3RmaXgpIHtcbiAgICAgIG5vZGUgPSB0aGlzLnBhcnNlUG9zdGZpeChub2RlKTtcbiAgICB9XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyB0aGlzLmVycm9yKFwidW5leHBlY3RlZCB0b2tlbjogXCIgKyB0b2sudmFsdWUsIHRvay5saW5lbm8sIHRvay5jb2xubyk7XG4gICAgfVxuICB9O1xuICBfcHJvdG8ucGFyc2VGaWx0ZXJOYW1lID0gZnVuY3Rpb24gcGFyc2VGaWx0ZXJOYW1lKCkge1xuICAgIHZhciB0b2sgPSB0aGlzLmV4cGVjdChsZXhlci5UT0tFTl9TWU1CT0wpO1xuICAgIHZhciBuYW1lID0gdG9rLnZhbHVlO1xuICAgIHdoaWxlICh0aGlzLnNraXBWYWx1ZShsZXhlci5UT0tFTl9PUEVSQVRPUiwgJy4nKSkge1xuICAgICAgbmFtZSArPSAnLicgKyB0aGlzLmV4cGVjdChsZXhlci5UT0tFTl9TWU1CT0wpLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IG5vZGVzLlN5bWJvbCh0b2subGluZW5vLCB0b2suY29sbm8sIG5hbWUpO1xuICB9O1xuICBfcHJvdG8ucGFyc2VGaWx0ZXJBcmdzID0gZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKG5vZGUpIHtcbiAgICBpZiAodGhpcy5wZWVrVG9rZW4oKS50eXBlID09PSBsZXhlci5UT0tFTl9MRUZUX1BBUkVOKSB7XG4gICAgICAvLyBHZXQgYSBGdW5DYWxsIG5vZGUgYW5kIGFkZCB0aGUgcGFyYW1ldGVycyB0byB0aGVcbiAgICAgIC8vIGZpbHRlclxuICAgICAgdmFyIGNhbGwgPSB0aGlzLnBhcnNlUG9zdGZpeChub2RlKTtcbiAgICAgIHJldHVybiBjYWxsLmFyZ3MuY2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlRmlsdGVyID0gZnVuY3Rpb24gcGFyc2VGaWx0ZXIobm9kZSkge1xuICAgIHdoaWxlICh0aGlzLnNraXAobGV4ZXIuVE9LRU5fUElQRSkpIHtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUZpbHRlck5hbWUoKTtcbiAgICAgIG5vZGUgPSBuZXcgbm9kZXMuRmlsdGVyKG5hbWUubGluZW5vLCBuYW1lLmNvbG5vLCBuYW1lLCBuZXcgbm9kZXMuTm9kZUxpc3QobmFtZS5saW5lbm8sIG5hbWUuY29sbm8sIFtub2RlXS5jb25jYXQodGhpcy5wYXJzZUZpbHRlckFyZ3Mobm9kZSkpKSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9O1xuICBfcHJvdG8ucGFyc2VGaWx0ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbiBwYXJzZUZpbHRlclN0YXRlbWVudCgpIHtcbiAgICB2YXIgZmlsdGVyVG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICBpZiAoIXRoaXMuc2tpcFN5bWJvbCgnZmlsdGVyJykpIHtcbiAgICAgIHRoaXMuZmFpbCgncGFyc2VGaWx0ZXJTdGF0ZW1lbnQ6IGV4cGVjdGVkIGZpbHRlcicpO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VGaWx0ZXJOYW1lKCk7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLnBhcnNlRmlsdGVyQXJncyhuYW1lKTtcbiAgICB0aGlzLmFkdmFuY2VBZnRlckJsb2NrRW5kKGZpbHRlclRvay52YWx1ZSk7XG4gICAgdmFyIGJvZHkgPSBuZXcgbm9kZXMuQ2FwdHVyZShuYW1lLmxpbmVubywgbmFtZS5jb2xubywgdGhpcy5wYXJzZVVudGlsQmxvY2tzKCdlbmRmaWx0ZXInKSk7XG4gICAgdGhpcy5hZHZhbmNlQWZ0ZXJCbG9ja0VuZCgpO1xuICAgIHZhciBub2RlID0gbmV3IG5vZGVzLkZpbHRlcihuYW1lLmxpbmVubywgbmFtZS5jb2xubywgbmFtZSwgbmV3IG5vZGVzLk5vZGVMaXN0KG5hbWUubGluZW5vLCBuYW1lLmNvbG5vLCBbYm9keV0uY29uY2F0KGFyZ3MpKSk7XG4gICAgcmV0dXJuIG5ldyBub2Rlcy5PdXRwdXQobmFtZS5saW5lbm8sIG5hbWUuY29sbm8sIFtub2RlXSk7XG4gIH07XG4gIF9wcm90by5wYXJzZUFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIHBhcnNlQWdncmVnYXRlKCkge1xuICAgIHZhciB0b2sgPSB0aGlzLm5leHRUb2tlbigpO1xuICAgIHZhciBub2RlO1xuICAgIHN3aXRjaCAodG9rLnR5cGUpIHtcbiAgICAgIGNhc2UgbGV4ZXIuVE9LRU5fTEVGVF9QQVJFTjpcbiAgICAgICAgbm9kZSA9IG5ldyBub2Rlcy5Hcm91cCh0b2subGluZW5vLCB0b2suY29sbm8pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgbGV4ZXIuVE9LRU5fTEVGVF9CUkFDS0VUOlxuICAgICAgICBub2RlID0gbmV3IG5vZGVzLkFycmF5KHRvay5saW5lbm8sIHRvay5jb2xubyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBsZXhlci5UT0tFTl9MRUZUX0NVUkxZOlxuICAgICAgICBub2RlID0gbmV3IG5vZGVzLkRpY3QodG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICB2YXIgdHlwZSA9IHRoaXMucGVla1Rva2VuKCkudHlwZTtcbiAgICAgIGlmICh0eXBlID09PSBsZXhlci5UT0tFTl9SSUdIVF9QQVJFTiB8fCB0eXBlID09PSBsZXhlci5UT0tFTl9SSUdIVF9CUkFDS0VUIHx8IHR5cGUgPT09IGxleGVyLlRPS0VOX1JJR0hUX0NVUkxZKSB7XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoIXRoaXMuc2tpcChsZXhlci5UT0tFTl9DT01NQSkpIHtcbiAgICAgICAgICB0aGlzLmZhaWwoJ3BhcnNlQWdncmVnYXRlOiBleHBlY3RlZCBjb21tYSBhZnRlciBleHByZXNzaW9uJywgdG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5EaWN0KSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGZvciBlcnJvcnNcbiAgICAgICAgdmFyIGtleSA9IHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cbiAgICAgICAgLy8gV2UgZXhwZWN0IGEga2V5L3ZhbHVlIHBhaXIgZm9yIGRpY3RzLCBzZXBhcmF0ZWQgYnkgYVxuICAgICAgICAvLyBjb2xvblxuICAgICAgICBpZiAoIXRoaXMuc2tpcChsZXhlci5UT0tFTl9DT0xPTikpIHtcbiAgICAgICAgICB0aGlzLmZhaWwoJ3BhcnNlQWdncmVnYXRlOiBleHBlY3RlZCBjb2xvbiBhZnRlciBkaWN0IGtleScsIHRvay5saW5lbm8sIHRvay5jb2xubyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBjaGVjayBmb3IgZXJyb3JzXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIG5vZGUuYWRkQ2hpbGQobmV3IG5vZGVzLlBhaXIoa2V5LmxpbmVubywga2V5LmNvbG5vLCBrZXksIHZhbHVlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBjaGVjayBmb3IgZXJyb3JzXG4gICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgbm9kZS5hZGRDaGlsZChleHByKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIF9wcm90by5wYXJzZVNpZ25hdHVyZSA9IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlKHRvbGVyYW50LCBub1BhcmVucykge1xuICAgIHZhciB0b2sgPSB0aGlzLnBlZWtUb2tlbigpO1xuICAgIGlmICghbm9QYXJlbnMgJiYgdG9rLnR5cGUgIT09IGxleGVyLlRPS0VOX0xFRlRfUEFSRU4pIHtcbiAgICAgIGlmICh0b2xlcmFudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmFpbCgnZXhwZWN0ZWQgYXJndW1lbnRzJywgdG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRvay50eXBlID09PSBsZXhlci5UT0tFTl9MRUZUX1BBUkVOKSB7XG4gICAgICB0b2sgPSB0aGlzLm5leHRUb2tlbigpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IG5ldyBub2Rlcy5Ob2RlTGlzdCh0b2subGluZW5vLCB0b2suY29sbm8pO1xuICAgIHZhciBrd2FyZ3MgPSBuZXcgbm9kZXMuS2V5d29yZEFyZ3ModG9rLmxpbmVubywgdG9rLmNvbG5vKTtcbiAgICB2YXIgY2hlY2tDb21tYSA9IGZhbHNlO1xuICAgIHdoaWxlICgxKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgdG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICAgIGlmICghbm9QYXJlbnMgJiYgdG9rLnR5cGUgPT09IGxleGVyLlRPS0VOX1JJR0hUX1BBUkVOKSB7XG4gICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChub1BhcmVucyAmJiB0b2sudHlwZSA9PT0gbGV4ZXIuVE9LRU5fQkxPQ0tfRU5EKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ29tbWEgJiYgIXRoaXMuc2tpcChsZXhlci5UT0tFTl9DT01NQSkpIHtcbiAgICAgICAgdGhpcy5mYWlsKCdwYXJzZVNpZ25hdHVyZTogZXhwZWN0ZWQgY29tbWEgYWZ0ZXIgZXhwcmVzc2lvbicsIHRvay5saW5lbm8sIHRvay5jb2xubyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgaWYgKHRoaXMuc2tpcFZhbHVlKGxleGVyLlRPS0VOX09QRVJBVE9SLCAnPScpKSB7XG4gICAgICAgICAga3dhcmdzLmFkZENoaWxkKG5ldyBub2Rlcy5QYWlyKGFyZy5saW5lbm8sIGFyZy5jb2xubywgYXJnLCB0aGlzLnBhcnNlRXhwcmVzc2lvbigpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJncy5hZGRDaGlsZChhcmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaGVja0NvbW1hID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGt3YXJncy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGFyZ3MuYWRkQ2hpbGQoa3dhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG4gIH07XG4gIF9wcm90by5wYXJzZVVudGlsQmxvY2tzID0gZnVuY3Rpb24gcGFyc2VVbnRpbEJsb2NrcygpIHtcbiAgICB2YXIgcHJldiA9IHRoaXMuYnJlYWtPbkJsb2NrcztcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYmxvY2tOYW1lcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGJsb2NrTmFtZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHRoaXMuYnJlYWtPbkJsb2NrcyA9IGJsb2NrTmFtZXM7XG4gICAgdmFyIHJldCA9IHRoaXMucGFyc2UoKTtcbiAgICB0aGlzLmJyZWFrT25CbG9ja3MgPSBwcmV2O1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIF9wcm90by5wYXJzZU5vZGVzID0gZnVuY3Rpb24gcGFyc2VOb2RlcygpIHtcbiAgICB2YXIgdG9rO1xuICAgIHZhciBidWYgPSBbXTtcbiAgICB3aGlsZSAodG9rID0gdGhpcy5uZXh0VG9rZW4oKSkge1xuICAgICAgaWYgKHRvay50eXBlID09PSBsZXhlci5UT0tFTl9EQVRBKSB7XG4gICAgICAgIHZhciBkYXRhID0gdG9rLnZhbHVlO1xuICAgICAgICB2YXIgbmV4dFRva2VuID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICAgICAgdmFyIG5leHRWYWwgPSBuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlO1xuXG4gICAgICAgIC8vIElmIHRoZSBsYXN0IHRva2VuIGhhcyBcIi1cIiB3ZSBuZWVkIHRvIHRyaW0gdGhlXG4gICAgICAgIC8vIGxlYWRpbmcgd2hpdGVzcGFjZSBvZiB0aGUgZGF0YS4gVGhpcyBpcyBtYXJrZWQgd2l0aFxuICAgICAgICAvLyB0aGUgYGRyb3BMZWFkaW5nV2hpdGVzcGFjZWAgdmFyaWFibGUuXG4gICAgICAgIGlmICh0aGlzLmRyb3BMZWFkaW5nV2hpdGVzcGFjZSkge1xuICAgICAgICAgIC8vIFRPRE86IHRoaXMgY291bGQgYmUgb3B0aW1pemVkIChkb24ndCB1c2UgcmVnZXgpXG4gICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXlxccyovLCAnJyk7XG4gICAgICAgICAgdGhpcy5kcm9wTGVhZGluZ1doaXRlc3BhY2UgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNhbWUgZm9yIHRoZSBzdWNjZWVkaW5nIGJsb2NrIHN0YXJ0IHRva2VuXG4gICAgICAgIGlmIChuZXh0VG9rZW4gJiYgKG5leHRUb2tlbi50eXBlID09PSBsZXhlci5UT0tFTl9CTE9DS19TVEFSVCAmJiBuZXh0VmFsLmNoYXJBdChuZXh0VmFsLmxlbmd0aCAtIDEpID09PSAnLScgfHwgbmV4dFRva2VuLnR5cGUgPT09IGxleGVyLlRPS0VOX1ZBUklBQkxFX1NUQVJUICYmIG5leHRWYWwuY2hhckF0KHRoaXMudG9rZW5zLnRhZ3MuVkFSSUFCTEVfU1RBUlQubGVuZ3RoKSA9PT0gJy0nIHx8IG5leHRUb2tlbi50eXBlID09PSBsZXhlci5UT0tFTl9DT01NRU5UICYmIG5leHRWYWwuY2hhckF0KHRoaXMudG9rZW5zLnRhZ3MuQ09NTUVOVF9TVEFSVC5sZW5ndGgpID09PSAnLScpKSB7XG4gICAgICAgICAgLy8gVE9ETzogdGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgKGRvbid0IHVzZSByZWdleClcbiAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICAgICAgfVxuICAgICAgICBidWYucHVzaChuZXcgbm9kZXMuT3V0cHV0KHRvay5saW5lbm8sIHRvay5jb2xubywgW25ldyBub2Rlcy5UZW1wbGF0ZURhdGEodG9rLmxpbmVubywgdG9rLmNvbG5vLCBkYXRhKV0pKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rLnR5cGUgPT09IGxleGVyLlRPS0VOX0JMT0NLX1NUQVJUKSB7XG4gICAgICAgIHRoaXMuZHJvcExlYWRpbmdXaGl0ZXNwYWNlID0gZmFsc2U7XG4gICAgICAgIHZhciBuID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpO1xuICAgICAgICBpZiAoIW4pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBidWYucHVzaChuKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rLnR5cGUgPT09IGxleGVyLlRPS0VOX1ZBUklBQkxFX1NUQVJUKSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgdGhpcy5kcm9wTGVhZGluZ1doaXRlc3BhY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlQWZ0ZXJWYXJpYWJsZUVuZCgpO1xuICAgICAgICBidWYucHVzaChuZXcgbm9kZXMuT3V0cHV0KHRvay5saW5lbm8sIHRvay5jb2xubywgW2VdKSk7XG4gICAgICB9IGVsc2UgaWYgKHRvay50eXBlID09PSBsZXhlci5UT0tFTl9DT01NRU5UKSB7XG4gICAgICAgIHRoaXMuZHJvcExlYWRpbmdXaGl0ZXNwYWNlID0gdG9rLnZhbHVlLmNoYXJBdCh0b2sudmFsdWUubGVuZ3RoIC0gdGhpcy50b2tlbnMudGFncy5DT01NRU5UX0VORC5sZW5ndGggLSAxKSA9PT0gJy0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWdub3JlIGNvbW1lbnRzLCBvdGhlcndpc2UgdGhpcyBzaG91bGQgYmUgYW4gZXJyb3JcbiAgICAgICAgdGhpcy5mYWlsKCdVbmV4cGVjdGVkIHRva2VuIGF0IHRvcC1sZXZlbDogJyArIHRvay50eXBlLCB0b2subGluZW5vLCB0b2suY29sbm8pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVmO1xuICB9O1xuICBfcHJvdG8ucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSgpIHtcbiAgICByZXR1cm4gbmV3IG5vZGVzLk5vZGVMaXN0KDAsIDAsIHRoaXMucGFyc2VOb2RlcygpKTtcbiAgfTtcbiAgX3Byb3RvLnBhcnNlQXNSb290ID0gZnVuY3Rpb24gcGFyc2VBc1Jvb3QoKSB7XG4gICAgcmV0dXJuIG5ldyBub2Rlcy5Sb290KDAsIDAsIHRoaXMucGFyc2VOb2RlcygpKTtcbiAgfTtcbiAgcmV0dXJuIFBhcnNlcjtcbn0oT2JqKTsgLy8gdmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG4vLyB2YXIgbCA9IGxleGVyLmxleCgneyUtIGlmIHggLSV9XFxuIGhlbGxvIHslIGVuZGlmICV9Jyk7XG4vLyB2YXIgdDtcbi8vIHdoaWxlKCh0ID0gbC5uZXh0VG9rZW4oKSkpIHtcbi8vICAgICBjb25zb2xlLmxvZyh1dGlsLmluc3BlY3QodCkpO1xuLy8gfVxuLy8gdmFyIHAgPSBuZXcgUGFyc2VyKGxleGVyLmxleCgnaGVsbG8geyUgZmlsdGVyIHRpdGxlICV9JyArXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyBtYWRhbSBob3cgYXJlIHlvdScgK1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyUgZW5kZmlsdGVyICV9JykpO1xuLy8gdmFyIG4gPSBwLnBhcnNlQXNSb290KCk7XG4vLyBub2Rlcy5wcmludE5vZGVzKG4pO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShzcmMsIGV4dGVuc2lvbnMsIG9wdHMpIHtcbiAgICB2YXIgcCA9IG5ldyBQYXJzZXIobGV4ZXIubGV4KHNyYywgb3B0cykpO1xuICAgIGlmIChleHRlbnNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHAuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG4gICAgfVxuICAgIHJldHVybiBwLnBhcnNlQXNSb290KCk7XG4gIH0sXG4gIFBhcnNlcjogUGFyc2VyXG59OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbm9kZXMgPSByZXF1aXJlKCcuL25vZGVzJyk7XG52YXIgbGliID0gcmVxdWlyZSgnLi9saWInKTtcbnZhciBzeW0gPSAwO1xuZnVuY3Rpb24gZ2Vuc3ltKCkge1xuICByZXR1cm4gJ2hvbGVfJyArIHN5bSsrO1xufVxuXG4vLyBjb3B5LW9uLXdyaXRlIHZlcnNpb24gb2YgbWFwXG5mdW5jdGlvbiBtYXBDT1coYXJyLCBmdW5jKSB7XG4gIHZhciByZXMgPSBudWxsO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gZnVuYyhhcnJbaV0pO1xuICAgIGlmIChpdGVtICE9PSBhcnJbaV0pIHtcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIHJlcyA9IGFyci5zbGljZSgpO1xuICAgICAgfVxuICAgICAgcmVzW2ldID0gaXRlbTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcyB8fCBhcnI7XG59XG5mdW5jdGlvbiB3YWxrKGFzdCwgZnVuYywgZGVwdGhGaXJzdCkge1xuICBpZiAoIShhc3QgaW5zdGFuY2VvZiBub2Rlcy5Ob2RlKSkge1xuICAgIHJldHVybiBhc3Q7XG4gIH1cbiAgaWYgKCFkZXB0aEZpcnN0KSB7XG4gICAgdmFyIGFzdFQgPSBmdW5jKGFzdCk7XG4gICAgaWYgKGFzdFQgJiYgYXN0VCAhPT0gYXN0KSB7XG4gICAgICByZXR1cm4gYXN0VDtcbiAgICB9XG4gIH1cbiAgaWYgKGFzdCBpbnN0YW5jZW9mIG5vZGVzLk5vZGVMaXN0KSB7XG4gICAgdmFyIGNoaWxkcmVuID0gbWFwQ09XKGFzdC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiB3YWxrKG5vZGUsIGZ1bmMsIGRlcHRoRmlyc3QpO1xuICAgIH0pO1xuICAgIGlmIChjaGlsZHJlbiAhPT0gYXN0LmNoaWxkcmVuKSB7XG4gICAgICBhc3QgPSBuZXcgbm9kZXNbYXN0LnR5cGVuYW1lXShhc3QubGluZW5vLCBhc3QuY29sbm8sIGNoaWxkcmVuKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXN0IGluc3RhbmNlb2Ygbm9kZXMuQ2FsbEV4dGVuc2lvbikge1xuICAgIHZhciBhcmdzID0gd2Fsayhhc3QuYXJncywgZnVuYywgZGVwdGhGaXJzdCk7XG4gICAgdmFyIGNvbnRlbnRBcmdzID0gbWFwQ09XKGFzdC5jb250ZW50QXJncywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiB3YWxrKG5vZGUsIGZ1bmMsIGRlcHRoRmlyc3QpO1xuICAgIH0pO1xuICAgIGlmIChhcmdzICE9PSBhc3QuYXJncyB8fCBjb250ZW50QXJncyAhPT0gYXN0LmNvbnRlbnRBcmdzKSB7XG4gICAgICBhc3QgPSBuZXcgbm9kZXNbYXN0LnR5cGVuYW1lXShhc3QuZXh0TmFtZSwgYXN0LnByb3AsIGFyZ3MsIGNvbnRlbnRBcmdzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHByb3BzID0gYXN0LmZpZWxkcy5tYXAoZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICByZXR1cm4gYXN0W2ZpZWxkXTtcbiAgICB9KTtcbiAgICB2YXIgcHJvcHNUID0gbWFwQ09XKHByb3BzLCBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuIHdhbGsocHJvcCwgZnVuYywgZGVwdGhGaXJzdCk7XG4gICAgfSk7XG4gICAgaWYgKHByb3BzVCAhPT0gcHJvcHMpIHtcbiAgICAgIGFzdCA9IG5ldyBub2Rlc1thc3QudHlwZW5hbWVdKGFzdC5saW5lbm8sIGFzdC5jb2xubyk7XG4gICAgICBwcm9wc1QuZm9yRWFjaChmdW5jdGlvbiAocHJvcCwgaSkge1xuICAgICAgICBhc3RbYXN0LmZpZWxkc1tpXV0gPSBwcm9wO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXB0aEZpcnN0ID8gZnVuYyhhc3QpIHx8IGFzdCA6IGFzdDtcbn1cbmZ1bmN0aW9uIGRlcHRoV2Fsayhhc3QsIGZ1bmMpIHtcbiAgcmV0dXJuIHdhbGsoYXN0LCBmdW5jLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIF9saWZ0RmlsdGVycyhub2RlLCBhc3luY0ZpbHRlcnMsIHByb3ApIHtcbiAgdmFyIGNoaWxkcmVuID0gW107XG4gIHZhciB3YWxrZWQgPSBkZXB0aFdhbGsocHJvcCA/IG5vZGVbcHJvcF0gOiBub2RlLCBmdW5jdGlvbiAoZGVzY05vZGUpIHtcbiAgICB2YXIgc3ltYm9sO1xuICAgIGlmIChkZXNjTm9kZSBpbnN0YW5jZW9mIG5vZGVzLkJsb2NrKSB7XG4gICAgICByZXR1cm4gZGVzY05vZGU7XG4gICAgfSBlbHNlIGlmIChkZXNjTm9kZSBpbnN0YW5jZW9mIG5vZGVzLkZpbHRlciAmJiBsaWIuaW5kZXhPZihhc3luY0ZpbHRlcnMsIGRlc2NOb2RlLm5hbWUudmFsdWUpICE9PSAtMSB8fCBkZXNjTm9kZSBpbnN0YW5jZW9mIG5vZGVzLkNhbGxFeHRlbnNpb25Bc3luYykge1xuICAgICAgc3ltYm9sID0gbmV3IG5vZGVzLlN5bWJvbChkZXNjTm9kZS5saW5lbm8sIGRlc2NOb2RlLmNvbG5vLCBnZW5zeW0oKSk7XG4gICAgICBjaGlsZHJlbi5wdXNoKG5ldyBub2Rlcy5GaWx0ZXJBc3luYyhkZXNjTm9kZS5saW5lbm8sIGRlc2NOb2RlLmNvbG5vLCBkZXNjTm9kZS5uYW1lLCBkZXNjTm9kZS5hcmdzLCBzeW1ib2wpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfSk7XG4gIGlmIChwcm9wKSB7XG4gICAgbm9kZVtwcm9wXSA9IHdhbGtlZDtcbiAgfSBlbHNlIHtcbiAgICBub2RlID0gd2Fsa2VkO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICBjaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgIHJldHVybiBuZXcgbm9kZXMuTm9kZUxpc3Qobm9kZS5saW5lbm8sIG5vZGUuY29sbm8sIGNoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufVxuZnVuY3Rpb24gbGlmdEZpbHRlcnMoYXN0LCBhc3luY0ZpbHRlcnMpIHtcbiAgcmV0dXJuIGRlcHRoV2Fsayhhc3QsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5PdXRwdXQpIHtcbiAgICAgIHJldHVybiBfbGlmdEZpbHRlcnMobm9kZSwgYXN5bmNGaWx0ZXJzKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5TZXQpIHtcbiAgICAgIHJldHVybiBfbGlmdEZpbHRlcnMobm9kZSwgYXN5bmNGaWx0ZXJzLCAndmFsdWUnKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5Gb3IpIHtcbiAgICAgIHJldHVybiBfbGlmdEZpbHRlcnMobm9kZSwgYXN5bmNGaWx0ZXJzLCAnYXJyJyk7XG4gICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2Ygbm9kZXMuSWYpIHtcbiAgICAgIHJldHVybiBfbGlmdEZpbHRlcnMobm9kZSwgYXN5bmNGaWx0ZXJzLCAnY29uZCcpO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIG5vZGVzLkNhbGxFeHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBfbGlmdEZpbHRlcnMobm9kZSwgYXN5bmNGaWx0ZXJzLCAnYXJncycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBsaWZ0U3VwZXIoYXN0KSB7XG4gIHJldHVybiB3YWxrKGFzdCwgZnVuY3Rpb24gKGJsb2NrTm9kZSkge1xuICAgIGlmICghKGJsb2NrTm9kZSBpbnN0YW5jZW9mIG5vZGVzLkJsb2NrKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaGFzU3VwZXIgPSBmYWxzZTtcbiAgICB2YXIgc3ltYm9sID0gZ2Vuc3ltKCk7XG4gICAgYmxvY2tOb2RlLmJvZHkgPSB3YWxrKGJsb2NrTm9kZS5ib2R5LCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5GdW5DYWxsICYmIG5vZGUubmFtZS52YWx1ZSA9PT0gJ3N1cGVyJykge1xuICAgICAgICBoYXNTdXBlciA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgbm9kZXMuU3ltYm9sKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBzeW1ib2wpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChoYXNTdXBlcikge1xuICAgICAgYmxvY2tOb2RlLmJvZHkuY2hpbGRyZW4udW5zaGlmdChuZXcgbm9kZXMuU3VwZXIoMCwgMCwgYmxvY2tOb2RlLm5hbWUsIG5ldyBub2Rlcy5TeW1ib2woMCwgMCwgc3ltYm9sKSkpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBjb252ZXJ0U3RhdGVtZW50cyhhc3QpIHtcbiAgcmV0dXJuIGRlcHRoV2Fsayhhc3QsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIG5vZGVzLklmKSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5Gb3IpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYXN5bmMgPSBmYWxzZTtcbiAgICB3YWxrKG5vZGUsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2Ygbm9kZXMuRmlsdGVyQXN5bmMgfHwgY2hpbGQgaW5zdGFuY2VvZiBub2Rlcy5JZkFzeW5jIHx8IGNoaWxkIGluc3RhbmNlb2Ygbm9kZXMuQXN5bmNFYWNoIHx8IGNoaWxkIGluc3RhbmNlb2Ygbm9kZXMuQXN5bmNBbGwgfHwgY2hpbGQgaW5zdGFuY2VvZiBub2Rlcy5DYWxsRXh0ZW5zaW9uQXN5bmMpIHtcbiAgICAgICAgYXN5bmMgPSB0cnVlO1xuICAgICAgICAvLyBTdG9wIGl0ZXJhdGluZyBieSByZXR1cm5pbmcgdGhlIG5vZGVcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2Ygbm9kZXMuSWYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBub2Rlcy5JZkFzeW5jKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLmNvbmQsIG5vZGUuYm9keSwgbm9kZS5lbHNlXyk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBub2Rlcy5Gb3IgJiYgIShub2RlIGluc3RhbmNlb2Ygbm9kZXMuQXN5bmNBbGwpKSB7XG4gICAgICAgIHJldHVybiBuZXcgbm9kZXMuQXN5bmNFYWNoKG5vZGUubGluZW5vLCBub2RlLmNvbG5vLCBub2RlLmFyciwgbm9kZS5uYW1lLCBub2RlLmJvZHksIG5vZGUuZWxzZV8pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNwcyhhc3QsIGFzeW5jRmlsdGVycykge1xuICByZXR1cm4gY29udmVydFN0YXRlbWVudHMobGlmdFN1cGVyKGxpZnRGaWx0ZXJzKGFzdCwgYXN5bmNGaWx0ZXJzKSkpO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtKGFzdCwgYXN5bmNGaWx0ZXJzKSB7XG4gIHJldHVybiBjcHMoYXN0LCBhc3luY0ZpbHRlcnMgfHwgW10pO1xufVxuXG4vLyB2YXIgcGFyc2VyID0gcmVxdWlyZSgnLi9wYXJzZXInKTtcbi8vIHZhciBzcmMgPSAnaGVsbG8geyUgZm9vICV9eyUgZW5kZm9vICV9IGVuZCc7XG4vLyB2YXIgYXN0ID0gdHJhbnNmb3JtKHBhcnNlci5wYXJzZShzcmMsIFtuZXcgRm9vRXh0ZW5zaW9uKCldKSwgWydiYXInXSk7XG4vLyBub2Rlcy5wcmludE5vZGVzKGFzdCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB0cmFuc2Zvcm06IHRyYW5zZm9ybVxufTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGxpYiA9IHJlcXVpcmUoJy4vbGliJyk7XG52YXIgYXJyYXlGcm9tID0gQXJyYXkuZnJvbTtcbnZhciBzdXBwb3J0c0l0ZXJhdG9ycyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yICYmIHR5cGVvZiBhcnJheUZyb20gPT09ICdmdW5jdGlvbic7XG5cbi8vIEZyYW1lcyBrZWVwIHRyYWNrIG9mIHNjb3BpbmcgYm90aCBhdCBjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIHNvXG4vLyB3ZSBrbm93IGhvdyB0byBhY2Nlc3MgdmFyaWFibGVzLiBCbG9jayB0YWdzIGNhbiBpbnRyb2R1Y2Ugc3BlY2lhbFxuLy8gdmFyaWFibGVzLCBmb3IgZXhhbXBsZS5cbnZhciBGcmFtZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEZyYW1lKHBhcmVudCwgaXNvbGF0ZVdyaXRlcykge1xuICAgIHRoaXMudmFyaWFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnRvcExldmVsID0gZmFsc2U7XG4gICAgLy8gaWYgdGhpcyBpcyB0cnVlLCB3cml0ZXMgKHNldCkgc2hvdWxkIG5ldmVyIHByb3BhZ2F0ZSB1cHdhcmRzIHBhc3RcbiAgICAvLyB0aGlzIGZyYW1lIHRvIGl0cyBwYXJlbnQgKHRob3VnaCByZWFkcyBtYXkpLlxuICAgIHRoaXMuaXNvbGF0ZVdyaXRlcyA9IGlzb2xhdGVXcml0ZXM7XG4gIH1cbiAgdmFyIF9wcm90byA9IEZyYW1lLnByb3RvdHlwZTtcbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChuYW1lLCB2YWwsIHJlc29sdmVVcCkge1xuICAgIC8vIEFsbG93IHZhcmlhYmxlcyB3aXRoIGRvdHMgYnkgYXV0b21hdGljYWxseSBjcmVhdGluZyB0aGVcbiAgICAvLyBuZXN0ZWQgc3RydWN0dXJlXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBvYmogPSB0aGlzLnZhcmlhYmxlcztcbiAgICB2YXIgZnJhbWUgPSB0aGlzO1xuICAgIGlmIChyZXNvbHZlVXApIHtcbiAgICAgIGlmIChmcmFtZSA9IHRoaXMucmVzb2x2ZShwYXJ0c1swXSwgdHJ1ZSkpIHtcbiAgICAgICAgZnJhbWUuc2V0KG5hbWUsIHZhbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIHZhciBpZCA9IHBhcnRzW2ldO1xuICAgICAgaWYgKCFvYmpbaWRdKSB7XG4gICAgICAgIG9ialtpZF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtpZF07XG4gICAgfVxuICAgIG9ialtwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7XG4gIH07XG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhcmlhYmxlc1tuYW1lXTtcbiAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBfcHJvdG8ubG9va3VwID0gZnVuY3Rpb24gbG9va3VwKG5hbWUpIHtcbiAgICB2YXIgcCA9IHRoaXMucGFyZW50O1xuICAgIHZhciB2YWwgPSB0aGlzLnZhcmlhYmxlc1tuYW1lXTtcbiAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBwICYmIHAubG9va3VwKG5hbWUpO1xuICB9O1xuICBfcHJvdG8ucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUobmFtZSwgZm9yV3JpdGUpIHtcbiAgICB2YXIgcCA9IGZvcldyaXRlICYmIHRoaXMuaXNvbGF0ZVdyaXRlcyA/IHVuZGVmaW5lZCA6IHRoaXMucGFyZW50O1xuICAgIHZhciB2YWwgPSB0aGlzLnZhcmlhYmxlc1tuYW1lXTtcbiAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gcCAmJiBwLnJlc29sdmUobmFtZSk7XG4gIH07XG4gIF9wcm90by5wdXNoID0gZnVuY3Rpb24gcHVzaChpc29sYXRlV3JpdGVzKSB7XG4gICAgcmV0dXJuIG5ldyBGcmFtZSh0aGlzLCBpc29sYXRlV3JpdGVzKTtcbiAgfTtcbiAgX3Byb3RvLnBvcCA9IGZ1bmN0aW9uIHBvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH07XG4gIHJldHVybiBGcmFtZTtcbn0oKTtcbmZ1bmN0aW9uIG1ha2VNYWNybyhhcmdOYW1lcywga3dhcmdOYW1lcywgZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24gbWFjcm8oKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1hY3JvQXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIG1hY3JvQXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgdmFyIGFyZ0NvdW50ID0gbnVtQXJncyhtYWNyb0FyZ3MpO1xuICAgIHZhciBhcmdzO1xuICAgIHZhciBrd2FyZ3MgPSBnZXRLZXl3b3JkQXJncyhtYWNyb0FyZ3MpO1xuICAgIGlmIChhcmdDb3VudCA+IGFyZ05hbWVzLmxlbmd0aCkge1xuICAgICAgYXJncyA9IG1hY3JvQXJncy5zbGljZSgwLCBhcmdOYW1lcy5sZW5ndGgpO1xuXG4gICAgICAvLyBQb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgaW4gYXNcbiAgICAgIC8vIGtleXdvcmQgYXJndW1lbnRzIChlc3NlbnRpYWxseSBkZWZhdWx0IHZhbHVlcylcbiAgICAgIG1hY3JvQXJncy5zbGljZShhcmdzLmxlbmd0aCwgYXJnQ291bnQpLmZvckVhY2goZnVuY3Rpb24gKHZhbCwgaSkge1xuICAgICAgICBpZiAoaSA8IGt3YXJnTmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAga3dhcmdzW2t3YXJnTmFtZXNbaV1dID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFyZ3MucHVzaChrd2FyZ3MpO1xuICAgIH0gZWxzZSBpZiAoYXJnQ291bnQgPCBhcmdOYW1lcy5sZW5ndGgpIHtcbiAgICAgIGFyZ3MgPSBtYWNyb0FyZ3Muc2xpY2UoMCwgYXJnQ291bnQpO1xuICAgICAgZm9yICh2YXIgaSA9IGFyZ0NvdW50OyBpIDwgYXJnTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ05hbWVzW2ldO1xuXG4gICAgICAgIC8vIEtleXdvcmQgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBhc1xuICAgICAgICAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50cywgaS5lLiB0aGUgY2FsbGVyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gdXNlZCB0aGUgbmFtZSBvZiBhIHBvc2l0aW9uYWwgYXJnXG4gICAgICAgIGFyZ3MucHVzaChrd2FyZ3NbYXJnXSk7XG4gICAgICAgIGRlbGV0ZSBrd2FyZ3NbYXJnXTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChrd2FyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gbWFjcm9BcmdzO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VLZXl3b3JkQXJncyhvYmopIHtcbiAgb2JqLl9fa2V5d29yZHMgPSB0cnVlO1xuICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gaXNLZXl3b3JkQXJncyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCAnX19rZXl3b3JkcycpO1xufVxuZnVuY3Rpb24gZ2V0S2V5d29yZEFyZ3MoYXJncykge1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIGlmIChsZW4pIHtcbiAgICB2YXIgbGFzdEFyZyA9IGFyZ3NbbGVuIC0gMV07XG4gICAgaWYgKGlzS2V5d29yZEFyZ3MobGFzdEFyZykpIHtcbiAgICAgIHJldHVybiBsYXN0QXJnO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBudW1BcmdzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICBpZiAobGVuID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIGxhc3RBcmcgPSBhcmdzW2xlbiAtIDFdO1xuICBpZiAoaXNLZXl3b3JkQXJncyhsYXN0QXJnKSkge1xuICAgIHJldHVybiBsZW4gLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsZW47XG4gIH1cbn1cblxuLy8gQSBTYWZlU3RyaW5nIG9iamVjdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyaW5nIHNob3VsZCBub3QgYmVcbi8vIGF1dG9lc2NhcGVkLiBUaGlzIGhhcHBlbnMgbWFnaWNhbGx5IGJlY2F1c2UgYXV0b2VzY2FwaW5nIG9ubHlcbi8vIG9jY3VycyBvbiBwcmltaXRpdmUgc3RyaW5nIG9iamVjdHMuXG5mdW5jdGlvbiBTYWZlU3RyaW5nKHZhbCkge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHRoaXMudmFsID0gdmFsO1xuICB0aGlzLmxlbmd0aCA9IHZhbC5sZW5ndGg7XG59XG5TYWZlU3RyaW5nLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RyaW5nLnByb3RvdHlwZSwge1xuICBsZW5ndGg6IHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IDBcbiAgfVxufSk7XG5TYWZlU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgcmV0dXJuIHRoaXMudmFsO1xufTtcblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0aGlzLnZhbDtcbn07XG5mdW5jdGlvbiBjb3B5U2FmZW5lc3MoZGVzdCwgdGFyZ2V0KSB7XG4gIGlmIChkZXN0IGluc3RhbmNlb2YgU2FmZVN0cmluZykge1xuICAgIHJldHVybiBuZXcgU2FmZVN0cmluZyh0YXJnZXQpO1xuICB9XG4gIHJldHVybiB0YXJnZXQudG9TdHJpbmcoKTtcbn1cbmZ1bmN0aW9uIG1hcmtTYWZlKHZhbCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgU2FmZVN0cmluZyh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiB3cmFwU2FmZShhcmdzKSB7XG4gICAgICB2YXIgcmV0ID0gdmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAodHlwZW9mIHJldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3RyaW5nKHJldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIHN1cHByZXNzVmFsdWUodmFsLCBhdXRvZXNjYXBlKSB7XG4gIHZhbCA9IHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCA/IHZhbCA6ICcnO1xuICBpZiAoYXV0b2VzY2FwZSAmJiAhKHZhbCBpbnN0YW5jZW9mIFNhZmVTdHJpbmcpKSB7XG4gICAgdmFsID0gbGliLmVzY2FwZSh2YWwudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIGVuc3VyZURlZmluZWQodmFsLCBsaW5lbm8sIGNvbG5vKSB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgbGliLlRlbXBsYXRlRXJyb3IoJ2F0dGVtcHRlZCB0byBvdXRwdXQgbnVsbCBvciB1bmRlZmluZWQgdmFsdWUnLCBsaW5lbm8gKyAxLCBjb2xubyArIDEpO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBtZW1iZXJMb29rdXAob2JqLCB2YWwpIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmpbdmFsXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialt2YWxdLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gb2JqW3ZhbF07XG59XG5mdW5jdGlvbiBjYWxsV3JhcChvYmosIG5hbWUsIGNvbnRleHQsIGFyZ3MpIHtcbiAgaWYgKCFvYmopIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjYWxsIGAnICsgbmFtZSArICdgLCB3aGljaCBpcyB1bmRlZmluZWQgb3IgZmFsc2V5Jyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iaiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNhbGwgYCcgKyBuYW1lICsgJ2AsIHdoaWNoIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgcmV0dXJuIG9iai5hcHBseShjb250ZXh0LCBhcmdzKTtcbn1cbmZ1bmN0aW9uIGNvbnRleHRPckZyYW1lTG9va3VwKGNvbnRleHQsIGZyYW1lLCBuYW1lKSB7XG4gIHZhciB2YWwgPSBmcmFtZS5sb29rdXAobmFtZSk7XG4gIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/IHZhbCA6IGNvbnRleHQubG9va3VwKG5hbWUpO1xufVxuZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyb3IsIGxpbmVubywgY29sbm8pIHtcbiAgaWYgKGVycm9yLmxpbmVubykge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IGxpYi5UZW1wbGF0ZUVycm9yKGVycm9yLCBsaW5lbm8sIGNvbG5vKTtcbiAgfVxufVxuZnVuY3Rpb24gYXN5bmNFYWNoKGFyciwgZGltZW4sIGl0ZXIsIGNiKSB7XG4gIGlmIChsaWIuaXNBcnJheShhcnIpKSB7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgbGliLmFzeW5jSXRlcihhcnIsIGZ1bmN0aW9uIGl0ZXJDYWxsYmFjayhpdGVtLCBpLCBuZXh0KSB7XG4gICAgICBzd2l0Y2ggKGRpbWVuKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpdGVyKGl0ZW0sIGksIGxlbiwgbmV4dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpdGVyKGl0ZW1bMF0sIGl0ZW1bMV0sIGksIGxlbiwgbmV4dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpdGVyKGl0ZW1bMF0sIGl0ZW1bMV0sIGl0ZW1bMl0sIGksIGxlbiwgbmV4dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaXRlbS5wdXNoKGksIGxlbiwgbmV4dCk7XG4gICAgICAgICAgaXRlci5hcHBseSh0aGlzLCBpdGVtKTtcbiAgICAgIH1cbiAgICB9LCBjYik7XG4gIH0gZWxzZSB7XG4gICAgbGliLmFzeW5jRm9yKGFyciwgZnVuY3Rpb24gaXRlckNhbGxiYWNrKGtleSwgdmFsLCBpLCBsZW4sIG5leHQpIHtcbiAgICAgIGl0ZXIoa2V5LCB2YWwsIGksIGxlbiwgbmV4dCk7XG4gICAgfSwgY2IpO1xuICB9XG59XG5mdW5jdGlvbiBhc3luY0FsbChhcnIsIGRpbWVuLCBmdW5jLCBjYikge1xuICB2YXIgZmluaXNoZWQgPSAwO1xuICB2YXIgbGVuO1xuICB2YXIgb3V0cHV0QXJyO1xuICBmdW5jdGlvbiBkb25lKGksIG91dHB1dCkge1xuICAgIGZpbmlzaGVkKys7XG4gICAgb3V0cHV0QXJyW2ldID0gb3V0cHV0O1xuICAgIGlmIChmaW5pc2hlZCA9PT0gbGVuKSB7XG4gICAgICBjYihudWxsLCBvdXRwdXRBcnIuam9pbignJykpO1xuICAgIH1cbiAgfVxuICBpZiAobGliLmlzQXJyYXkoYXJyKSkge1xuICAgIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgb3V0cHV0QXJyID0gbmV3IEFycmF5KGxlbik7XG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgY2IobnVsbCwgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbSA9IGFycltpXTtcbiAgICAgICAgc3dpdGNoIChkaW1lbikge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGZ1bmMoaXRlbSwgaSwgbGVuLCBkb25lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGZ1bmMoaXRlbVswXSwgaXRlbVsxXSwgaSwgbGVuLCBkb25lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGZ1bmMoaXRlbVswXSwgaXRlbVsxXSwgaXRlbVsyXSwgaSwgbGVuLCBkb25lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpdGVtLnB1c2goaSwgbGVuLCBkb25lKTtcbiAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGtleXMgPSBsaWIua2V5cyhhcnIgfHwge30pO1xuICAgIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIG91dHB1dEFyciA9IG5ldyBBcnJheShsZW4pO1xuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIGNiKG51bGwsICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1tfaV07XG4gICAgICAgIGZ1bmMoaywgYXJyW2tdLCBfaSwgbGVuLCBkb25lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZyb21JdGVyYXRvcihhcnIpIHtcbiAgaWYgKHR5cGVvZiBhcnIgIT09ICdvYmplY3QnIHx8IGFyciA9PT0gbnVsbCB8fCBsaWIuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfSBlbHNlIGlmIChzdXBwb3J0c0l0ZXJhdG9ycyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gYXJyKSB7XG4gICAgcmV0dXJuIGFycmF5RnJvbShhcnIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcnI7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGcmFtZTogRnJhbWUsXG4gIG1ha2VNYWNybzogbWFrZU1hY3JvLFxuICBtYWtlS2V5d29yZEFyZ3M6IG1ha2VLZXl3b3JkQXJncyxcbiAgbnVtQXJnczogbnVtQXJncyxcbiAgc3VwcHJlc3NWYWx1ZTogc3VwcHJlc3NWYWx1ZSxcbiAgZW5zdXJlRGVmaW5lZDogZW5zdXJlRGVmaW5lZCxcbiAgbWVtYmVyTG9va3VwOiBtZW1iZXJMb29rdXAsXG4gIGNvbnRleHRPckZyYW1lTG9va3VwOiBjb250ZXh0T3JGcmFtZUxvb2t1cCxcbiAgY2FsbFdyYXA6IGNhbGxXcmFwLFxuICBoYW5kbGVFcnJvcjogaGFuZGxlRXJyb3IsXG4gIGlzQXJyYXk6IGxpYi5pc0FycmF5LFxuICBrZXlzOiBsaWIua2V5cyxcbiAgU2FmZVN0cmluZzogU2FmZVN0cmluZyxcbiAgY29weVNhZmVuZXNzOiBjb3B5U2FmZW5lc3MsXG4gIG1hcmtTYWZlOiBtYXJrU2FmZSxcbiAgYXN5bmNFYWNoOiBhc3luY0VhY2gsXG4gIGFzeW5jQWxsOiBhc3luY0FsbCxcbiAgaW5PcGVyYXRvcjogbGliLmluT3BlcmF0b3IsXG4gIGZyb21JdGVyYXRvcjogZnJvbUl0ZXJhdG9yXG59OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnLi9wYXJzZXInKTtcbnZhciB0cmFuc2Zvcm1lciA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtZXInKTtcbnZhciBub2RlcyA9IHJlcXVpcmUoJy4vbm9kZXMnKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vbGliJyksXG4gIFRlbXBsYXRlRXJyb3IgPSBfcmVxdWlyZS5UZW1wbGF0ZUVycm9yO1xudmFyIF9yZXF1aXJlMiA9IHJlcXVpcmUoJy4vcnVudGltZScpLFxuICBGcmFtZSA9IF9yZXF1aXJlMi5GcmFtZTtcbnZhciBfcmVxdWlyZTMgPSByZXF1aXJlKCcuL29iamVjdCcpLFxuICBPYmogPSBfcmVxdWlyZTMuT2JqO1xuXG4vLyBUaGVzZSBhcmUgYWxsIHRoZSBzYW1lIGZvciBub3csIGJ1dCBzaG91bGRuJ3QgYmUgcGFzc2VkIHN0cmFpZ2h0XG4vLyB0aHJvdWdoXG52YXIgY29tcGFyZU9wcyA9IHtcbiAgJz09JzogJz09JyxcbiAgJz09PSc6ICc9PT0nLFxuICAnIT0nOiAnIT0nLFxuICAnIT09JzogJyE9PScsXG4gICc8JzogJzwnLFxuICAnPic6ICc+JyxcbiAgJzw9JzogJzw9JyxcbiAgJz49JzogJz49J1xufTtcbnZhciBDb21waWxlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX09iaikge1xuICBfaW5oZXJpdHNMb29zZShDb21waWxlciwgX09iaik7XG4gIGZ1bmN0aW9uIENvbXBpbGVyKCkge1xuICAgIHJldHVybiBfT2JqLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuICB2YXIgX3Byb3RvID0gQ29tcGlsZXIucHJvdG90eXBlO1xuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQodGVtcGxhdGVOYW1lLCB0aHJvd09uVW5kZWZpbmVkKSB7XG4gICAgdGhpcy50ZW1wbGF0ZU5hbWUgPSB0ZW1wbGF0ZU5hbWU7XG4gICAgdGhpcy5jb2RlYnVmID0gW107XG4gICAgdGhpcy5sYXN0SWQgPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICB0aGlzLmJ1ZmZlclN0YWNrID0gW107XG4gICAgdGhpcy5fc2NvcGVDbG9zZXJzID0gJyc7XG4gICAgdGhpcy5pbkJsb2NrID0gZmFsc2U7XG4gICAgdGhpcy50aHJvd09uVW5kZWZpbmVkID0gdGhyb3dPblVuZGVmaW5lZDtcbiAgfTtcbiAgX3Byb3RvLmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1zZywgbGluZW5vLCBjb2xubykge1xuICAgIGlmIChsaW5lbm8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZW5vICs9IDE7XG4gICAgfVxuICAgIGlmIChjb2xubyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xubyArPSAxO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVGVtcGxhdGVFcnJvcihtc2csIGxpbmVubywgY29sbm8pO1xuICB9O1xuICBfcHJvdG8uX3B1c2hCdWZmZXIgPSBmdW5jdGlvbiBfcHVzaEJ1ZmZlcigpIHtcbiAgICB2YXIgaWQgPSB0aGlzLl90bXBpZCgpO1xuICAgIHRoaXMuYnVmZmVyU3RhY2sucHVzaCh0aGlzLmJ1ZmZlcik7XG4gICAgdGhpcy5idWZmZXIgPSBpZDtcbiAgICB0aGlzLl9lbWl0KFwidmFyIFwiICsgdGhpcy5idWZmZXIgKyBcIiA9IFxcXCJcXFwiO1wiKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIF9wcm90by5fcG9wQnVmZmVyID0gZnVuY3Rpb24gX3BvcEJ1ZmZlcigpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyU3RhY2sucG9wKCk7XG4gIH07XG4gIF9wcm90by5fZW1pdCA9IGZ1bmN0aW9uIF9lbWl0KGNvZGUpIHtcbiAgICB0aGlzLmNvZGVidWYucHVzaChjb2RlKTtcbiAgfTtcbiAgX3Byb3RvLl9lbWl0TGluZSA9IGZ1bmN0aW9uIF9lbWl0TGluZShjb2RlKSB7XG4gICAgdGhpcy5fZW1pdChjb2RlICsgJ1xcbicpO1xuICB9O1xuICBfcHJvdG8uX2VtaXRMaW5lcyA9IGZ1bmN0aW9uIF9lbWl0TGluZXMoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbGluZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBsaW5lc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgcmV0dXJuIF90aGlzLl9lbWl0TGluZShsaW5lKTtcbiAgICB9KTtcbiAgfTtcbiAgX3Byb3RvLl9lbWl0RnVuY0JlZ2luID0gZnVuY3Rpb24gX2VtaXRGdW5jQmVnaW4obm9kZSwgbmFtZSkge1xuICAgIHRoaXMuYnVmZmVyID0gJ291dHB1dCc7XG4gICAgdGhpcy5fc2NvcGVDbG9zZXJzID0gJyc7XG4gICAgdGhpcy5fZW1pdExpbmUoXCJmdW5jdGlvbiBcIiArIG5hbWUgKyBcIihlbnYsIGNvbnRleHQsIGZyYW1lLCBydW50aW1lLCBjYikge1wiKTtcbiAgICB0aGlzLl9lbWl0TGluZShcInZhciBsaW5lbm8gPSBcIiArIG5vZGUubGluZW5vICsgXCI7XCIpO1xuICAgIHRoaXMuX2VtaXRMaW5lKFwidmFyIGNvbG5vID0gXCIgKyBub2RlLmNvbG5vICsgXCI7XCIpO1xuICAgIHRoaXMuX2VtaXRMaW5lKFwidmFyIFwiICsgdGhpcy5idWZmZXIgKyBcIiA9IFxcXCJcXFwiO1wiKTtcbiAgICB0aGlzLl9lbWl0TGluZSgndHJ5IHsnKTtcbiAgfTtcbiAgX3Byb3RvLl9lbWl0RnVuY0VuZCA9IGZ1bmN0aW9uIF9lbWl0RnVuY0VuZChub1JldHVybikge1xuICAgIGlmICghbm9SZXR1cm4pIHtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKCdjYihudWxsLCAnICsgdGhpcy5idWZmZXIgKyAnKTsnKTtcbiAgICB9XG4gICAgdGhpcy5fY2xvc2VTY29wZUxldmVscygpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd9IGNhdGNoIChlKSB7Jyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJyAgY2IocnVudGltZS5oYW5kbGVFcnJvcihlLCBsaW5lbm8sIGNvbG5vKSk7Jyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ30nKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnfScpO1xuICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgfTtcbiAgX3Byb3RvLl9hZGRTY29wZUxldmVsID0gZnVuY3Rpb24gX2FkZFNjb3BlTGV2ZWwoKSB7XG4gICAgdGhpcy5fc2NvcGVDbG9zZXJzICs9ICd9KSc7XG4gIH07XG4gIF9wcm90by5fY2xvc2VTY29wZUxldmVscyA9IGZ1bmN0aW9uIF9jbG9zZVNjb3BlTGV2ZWxzKCkge1xuICAgIHRoaXMuX2VtaXRMaW5lKHRoaXMuX3Njb3BlQ2xvc2VycyArICc7Jyk7XG4gICAgdGhpcy5fc2NvcGVDbG9zZXJzID0gJyc7XG4gIH07XG4gIF9wcm90by5fd2l0aFNjb3BlZFN5bnRheCA9IGZ1bmN0aW9uIF93aXRoU2NvcGVkU3ludGF4KGZ1bmMpIHtcbiAgICB2YXIgX3Njb3BlQ2xvc2VycyA9IHRoaXMuX3Njb3BlQ2xvc2VycztcbiAgICB0aGlzLl9zY29wZUNsb3NlcnMgPSAnJztcbiAgICBmdW5jLmNhbGwodGhpcyk7XG4gICAgdGhpcy5fY2xvc2VTY29wZUxldmVscygpO1xuICAgIHRoaXMuX3Njb3BlQ2xvc2VycyA9IF9zY29wZUNsb3NlcnM7XG4gIH07XG4gIF9wcm90by5fbWFrZUNhbGxiYWNrID0gZnVuY3Rpb24gX21ha2VDYWxsYmFjayhyZXMpIHtcbiAgICB2YXIgZXJyID0gdGhpcy5fdG1waWQoKTtcbiAgICByZXR1cm4gJ2Z1bmN0aW9uKCcgKyBlcnIgKyAocmVzID8gJywnICsgcmVzIDogJycpICsgJykge1xcbicgKyAnaWYoJyArIGVyciArICcpIHsgY2IoJyArIGVyciArICcpOyByZXR1cm47IH0nO1xuICB9O1xuICBfcHJvdG8uX3RtcGlkID0gZnVuY3Rpb24gX3RtcGlkKCkge1xuICAgIHRoaXMubGFzdElkKys7XG4gICAgcmV0dXJuICd0XycgKyB0aGlzLmxhc3RJZDtcbiAgfTtcbiAgX3Byb3RvLl90ZW1wbGF0ZU5hbWUgPSBmdW5jdGlvbiBfdGVtcGxhdGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlTmFtZSA9PSBudWxsID8gJ3VuZGVmaW5lZCcgOiBKU09OLnN0cmluZ2lmeSh0aGlzLnRlbXBsYXRlTmFtZSk7XG4gIH07XG4gIF9wcm90by5fY29tcGlsZUNoaWxkcmVuID0gZnVuY3Rpb24gX2NvbXBpbGVDaGlsZHJlbihub2RlLCBmcmFtZSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIF90aGlzMi5jb21waWxlKGNoaWxkLCBmcmFtZSk7XG4gICAgfSk7XG4gIH07XG4gIF9wcm90by5fY29tcGlsZUFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIF9jb21waWxlQWdncmVnYXRlKG5vZGUsIGZyYW1lLCBzdGFydENoYXIsIGVuZENoYXIpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICBpZiAoc3RhcnRDaGFyKSB7XG4gICAgICB0aGlzLl9lbWl0KHN0YXJ0Q2hhcik7XG4gICAgfVxuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBfdGhpczMuX2VtaXQoJywnKTtcbiAgICAgIH1cbiAgICAgIF90aGlzMy5jb21waWxlKGNoaWxkLCBmcmFtZSk7XG4gICAgfSk7XG4gICAgaWYgKGVuZENoYXIpIHtcbiAgICAgIHRoaXMuX2VtaXQoZW5kQ2hhcik7XG4gICAgfVxuICB9O1xuICBfcHJvdG8uX2NvbXBpbGVFeHByZXNzaW9uID0gZnVuY3Rpb24gX2NvbXBpbGVFeHByZXNzaW9uKG5vZGUsIGZyYW1lKSB7XG4gICAgLy8gVE9ETzogSSdtIG5vdCByZWFsbHkgc3VyZSBpZiB0aGlzIHR5cGUgY2hlY2sgaXMgd29ydGggaXQgb3JcbiAgICAvLyBub3QuXG4gICAgdGhpcy5hc3NlcnRUeXBlKG5vZGUsIG5vZGVzLkxpdGVyYWwsIG5vZGVzLlN5bWJvbCwgbm9kZXMuR3JvdXAsIG5vZGVzLkFycmF5LCBub2Rlcy5EaWN0LCBub2Rlcy5GdW5DYWxsLCBub2Rlcy5DYWxsZXIsIG5vZGVzLkZpbHRlciwgbm9kZXMuTG9va3VwVmFsLCBub2Rlcy5Db21wYXJlLCBub2Rlcy5JbmxpbmVJZiwgbm9kZXMuSW4sIG5vZGVzLklzLCBub2Rlcy5BbmQsIG5vZGVzLk9yLCBub2Rlcy5Ob3QsIG5vZGVzLkFkZCwgbm9kZXMuQ29uY2F0LCBub2Rlcy5TdWIsIG5vZGVzLk11bCwgbm9kZXMuRGl2LCBub2Rlcy5GbG9vckRpdiwgbm9kZXMuTW9kLCBub2Rlcy5Qb3csIG5vZGVzLk5lZywgbm9kZXMuUG9zLCBub2Rlcy5Db21wYXJlLCBub2Rlcy5Ob2RlTGlzdCk7XG4gICAgdGhpcy5jb21waWxlKG5vZGUsIGZyYW1lKTtcbiAgfTtcbiAgX3Byb3RvLmFzc2VydFR5cGUgPSBmdW5jdGlvbiBhc3NlcnRUeXBlKG5vZGUpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHR5cGVzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHR5cGVzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cbiAgICBpZiAoIXR5cGVzLnNvbWUoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgdDtcbiAgICB9KSkge1xuICAgICAgdGhpcy5mYWlsKFwiYXNzZXJ0VHlwZTogaW52YWxpZCB0eXBlOiBcIiArIG5vZGUudHlwZW5hbWUsIG5vZGUubGluZW5vLCBub2RlLmNvbG5vKTtcbiAgICB9XG4gIH07XG4gIF9wcm90by5jb21waWxlQ2FsbEV4dGVuc2lvbiA9IGZ1bmN0aW9uIGNvbXBpbGVDYWxsRXh0ZW5zaW9uKG5vZGUsIGZyYW1lLCBhc3luYykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gbm9kZS5hcmdzO1xuICAgIHZhciBjb250ZW50QXJncyA9IG5vZGUuY29udGVudEFyZ3M7XG4gICAgdmFyIGF1dG9lc2NhcGUgPSB0eXBlb2Ygbm9kZS5hdXRvZXNjYXBlID09PSAnYm9vbGVhbicgPyBub2RlLmF1dG9lc2NhcGUgOiB0cnVlO1xuICAgIGlmICghYXN5bmMpIHtcbiAgICAgIHRoaXMuX2VtaXQodGhpcy5idWZmZXIgKyBcIiArPSBydW50aW1lLnN1cHByZXNzVmFsdWUoXCIpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0KFwiZW52LmdldEV4dGVuc2lvbihcXFwiXCIgKyBub2RlLmV4dE5hbWUgKyBcIlxcXCIpW1xcXCJcIiArIG5vZGUucHJvcCArIFwiXFxcIl0oXCIpO1xuICAgIHRoaXMuX2VtaXQoJ2NvbnRleHQnKTtcbiAgICBpZiAoYXJncyB8fCBjb250ZW50QXJncykge1xuICAgICAgdGhpcy5fZW1pdCgnLCcpO1xuICAgIH1cbiAgICBpZiAoYXJncykge1xuICAgICAgaWYgKCEoYXJncyBpbnN0YW5jZW9mIG5vZGVzLk5vZGVMaXN0KSkge1xuICAgICAgICB0aGlzLmZhaWwoJ2NvbXBpbGVDYWxsRXh0ZW5zaW9uOiBhcmd1bWVudHMgbXVzdCBiZSBhIE5vZGVMaXN0LCAnICsgJ3VzZSBgcGFyc2VyLnBhcnNlU2lnbmF0dXJlYCcpO1xuICAgICAgfVxuICAgICAgYXJncy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChhcmcsIGkpIHtcbiAgICAgICAgLy8gVGFnIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG5vcm1hbGx5IHRvIHRoZSBjYWxsLiBOb3RlXG4gICAgICAgIC8vIHRoYXQga2V5d29yZCBhcmd1bWVudHMgYXJlIHR1cm5lZCBpbnRvIGEgc2luZ2xlIGpzXG4gICAgICAgIC8vIG9iamVjdCBhcyB0aGUgbGFzdCBhcmd1bWVudCwgaWYgdGhleSBleGlzdC5cbiAgICAgICAgX3RoaXM0Ll9jb21waWxlRXhwcmVzc2lvbihhcmcsIGZyYW1lKTtcbiAgICAgICAgaWYgKGkgIT09IGFyZ3MuY2hpbGRyZW4ubGVuZ3RoIC0gMSB8fCBjb250ZW50QXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBfdGhpczQuX2VtaXQoJywnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb250ZW50QXJncy5sZW5ndGgpIHtcbiAgICAgIGNvbnRlbnRBcmdzLmZvckVhY2goZnVuY3Rpb24gKGFyZywgaSkge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBfdGhpczQuX2VtaXQoJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJnKSB7XG4gICAgICAgICAgX3RoaXM0Ll9lbWl0TGluZSgnZnVuY3Rpb24oY2IpIHsnKTtcbiAgICAgICAgICBfdGhpczQuX2VtaXRMaW5lKCdpZighY2IpIHsgY2IgPSBmdW5jdGlvbihlcnIpIHsgaWYoZXJyKSB7IHRocm93IGVycjsgfX19Jyk7XG4gICAgICAgICAgdmFyIGlkID0gX3RoaXM0Ll9wdXNoQnVmZmVyKCk7XG4gICAgICAgICAgX3RoaXM0Ll93aXRoU2NvcGVkU3ludGF4KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzNC5jb21waWxlKGFyZywgZnJhbWUpO1xuICAgICAgICAgICAgX3RoaXM0Ll9lbWl0TGluZShcImNiKG51bGwsIFwiICsgaWQgKyBcIik7XCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIF90aGlzNC5fcG9wQnVmZmVyKCk7XG4gICAgICAgICAgX3RoaXM0Ll9lbWl0TGluZShcInJldHVybiBcIiArIGlkICsgXCI7XCIpO1xuICAgICAgICAgIF90aGlzNC5fZW1pdExpbmUoJ30nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczQuX2VtaXQoJ251bGwnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChhc3luYykge1xuICAgICAgdmFyIHJlcyA9IHRoaXMuX3RtcGlkKCk7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnLCAnICsgdGhpcy5fbWFrZUNhbGxiYWNrKHJlcykpO1xuICAgICAgdGhpcy5fZW1pdExpbmUodGhpcy5idWZmZXIgKyBcIiArPSBydW50aW1lLnN1cHByZXNzVmFsdWUoXCIgKyByZXMgKyBcIiwgXCIgKyBhdXRvZXNjYXBlICsgXCIgJiYgZW52Lm9wdHMuYXV0b2VzY2FwZSk7XCIpO1xuICAgICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbWl0KCcpJyk7XG4gICAgICB0aGlzLl9lbWl0KFwiLCBcIiArIGF1dG9lc2NhcGUgKyBcIiAmJiBlbnYub3B0cy5hdXRvZXNjYXBlKTtcXG5cIik7XG4gICAgfVxuICB9O1xuICBfcHJvdG8uY29tcGlsZUNhbGxFeHRlbnNpb25Bc3luYyA9IGZ1bmN0aW9uIGNvbXBpbGVDYWxsRXh0ZW5zaW9uQXN5bmMobm9kZSwgZnJhbWUpIHtcbiAgICB0aGlzLmNvbXBpbGVDYWxsRXh0ZW5zaW9uKG5vZGUsIGZyYW1lLCB0cnVlKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVOb2RlTGlzdCA9IGZ1bmN0aW9uIGNvbXBpbGVOb2RlTGlzdChub2RlLCBmcmFtZSkge1xuICAgIHRoaXMuX2NvbXBpbGVDaGlsZHJlbihub2RlLCBmcmFtZSk7XG4gIH07XG4gIF9wcm90by5jb21waWxlTGl0ZXJhbCA9IGZ1bmN0aW9uIGNvbXBpbGVMaXRlcmFsKG5vZGUpIHtcbiAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgdmFsID0gbm9kZS52YWx1ZS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyk7XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSgvXFxyL2csICdcXFxccicpO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKTtcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXFxcXHUyMDI4XCIpO1xuICAgICAgdGhpcy5fZW1pdChcIlxcXCJcIiArIHZhbCArIFwiXFxcIlwiKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2VtaXQoJ251bGwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZW1pdChub2RlLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVTeW1ib2wgPSBmdW5jdGlvbiBjb21waWxlU3ltYm9sKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIG5hbWUgPSBub2RlLnZhbHVlO1xuICAgIHZhciB2ID0gZnJhbWUubG9va3VwKG5hbWUpO1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLl9lbWl0KHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbWl0KCdydW50aW1lLmNvbnRleHRPckZyYW1lTG9va3VwKCcgKyAnY29udGV4dCwgZnJhbWUsIFwiJyArIG5hbWUgKyAnXCIpJyk7XG4gICAgfVxuICB9O1xuICBfcHJvdG8uY29tcGlsZUdyb3VwID0gZnVuY3Rpb24gY29tcGlsZUdyb3VwKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fY29tcGlsZUFnZ3JlZ2F0ZShub2RlLCBmcmFtZSwgJygnLCAnKScpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUFycmF5ID0gZnVuY3Rpb24gY29tcGlsZUFycmF5KG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fY29tcGlsZUFnZ3JlZ2F0ZShub2RlLCBmcmFtZSwgJ1snLCAnXScpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZURpY3QgPSBmdW5jdGlvbiBjb21waWxlRGljdChub2RlLCBmcmFtZSkge1xuICAgIHRoaXMuX2NvbXBpbGVBZ2dyZWdhdGUobm9kZSwgZnJhbWUsICd7JywgJ30nKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVQYWlyID0gZnVuY3Rpb24gY29tcGlsZVBhaXIobm9kZSwgZnJhbWUpIHtcbiAgICB2YXIga2V5ID0gbm9kZS5rZXk7XG4gICAgdmFyIHZhbCA9IG5vZGUudmFsdWU7XG4gICAgaWYgKGtleSBpbnN0YW5jZW9mIG5vZGVzLlN5bWJvbCkge1xuICAgICAga2V5ID0gbmV3IG5vZGVzLkxpdGVyYWwoa2V5LmxpbmVubywga2V5LmNvbG5vLCBrZXkudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoIShrZXkgaW5zdGFuY2VvZiBub2Rlcy5MaXRlcmFsICYmIHR5cGVvZiBrZXkudmFsdWUgPT09ICdzdHJpbmcnKSkge1xuICAgICAgdGhpcy5mYWlsKCdjb21waWxlUGFpcjogRGljdCBrZXlzIG11c3QgYmUgc3RyaW5ncyBvciBuYW1lcycsIGtleS5saW5lbm8sIGtleS5jb2xubyk7XG4gICAgfVxuICAgIHRoaXMuY29tcGlsZShrZXksIGZyYW1lKTtcbiAgICB0aGlzLl9lbWl0KCc6ICcpO1xuICAgIHRoaXMuX2NvbXBpbGVFeHByZXNzaW9uKHZhbCwgZnJhbWUpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUlubGluZUlmID0gZnVuY3Rpb24gY29tcGlsZUlubGluZUlmKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fZW1pdCgnKCcpO1xuICAgIHRoaXMuY29tcGlsZShub2RlLmNvbmQsIGZyYW1lKTtcbiAgICB0aGlzLl9lbWl0KCc/Jyk7XG4gICAgdGhpcy5jb21waWxlKG5vZGUuYm9keSwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoJzonKTtcbiAgICBpZiAobm9kZS5lbHNlXyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb21waWxlKG5vZGUuZWxzZV8sIGZyYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZW1pdCgnXCJcIicpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0KCcpJyk7XG4gIH07XG4gIF9wcm90by5jb21waWxlSW4gPSBmdW5jdGlvbiBjb21waWxlSW4obm9kZSwgZnJhbWUpIHtcbiAgICB0aGlzLl9lbWl0KCdydW50aW1lLmluT3BlcmF0b3IoJyk7XG4gICAgdGhpcy5jb21waWxlKG5vZGUubGVmdCwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoJywnKTtcbiAgICB0aGlzLmNvbXBpbGUobm9kZS5yaWdodCwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoJyknKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVJcyA9IGZ1bmN0aW9uIGNvbXBpbGVJcyhub2RlLCBmcmFtZSkge1xuICAgIC8vIGZpcnN0LCB3ZSBuZWVkIHRvIHRyeSB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIHRlc3QgZnVuY3Rpb24sIGlmIGl0J3MgYVxuICAgIC8vIGNhbGxhYmxlIChpLmUuLCBoYXMgYXJncykgYW5kIG5vdCBhIHN5bWJvbC5cbiAgICB2YXIgcmlnaHQgPSBub2RlLnJpZ2h0Lm5hbWUgPyBub2RlLnJpZ2h0Lm5hbWUudmFsdWVcbiAgICAvLyBvdGhlcndpc2UgZ28gd2l0aCB0aGUgc3ltYm9sIHZhbHVlXG4gICAgOiBub2RlLnJpZ2h0LnZhbHVlO1xuICAgIHRoaXMuX2VtaXQoJ2Vudi5nZXRUZXN0KFwiJyArIHJpZ2h0ICsgJ1wiKS5jYWxsKGNvbnRleHQsICcpO1xuICAgIHRoaXMuY29tcGlsZShub2RlLmxlZnQsIGZyYW1lKTtcbiAgICAvLyBjb21waWxlIHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsYWJsZSBpZiB0aGV5IGV4aXN0XG4gICAgaWYgKG5vZGUucmlnaHQuYXJncykge1xuICAgICAgdGhpcy5fZW1pdCgnLCcpO1xuICAgICAgdGhpcy5jb21waWxlKG5vZGUucmlnaHQuYXJncywgZnJhbWUpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0KCcpID09PSB0cnVlJyk7XG4gIH07XG4gIF9wcm90by5fYmluT3BFbWl0dGVyID0gZnVuY3Rpb24gX2Jpbk9wRW1pdHRlcihub2RlLCBmcmFtZSwgc3RyKSB7XG4gICAgdGhpcy5jb21waWxlKG5vZGUubGVmdCwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoc3RyKTtcbiAgICB0aGlzLmNvbXBpbGUobm9kZS5yaWdodCwgZnJhbWUpO1xuICB9XG5cbiAgLy8gZW5zdXJlIGNvbmNhdGVuYXRpb24gaW5zdGVhZCBvZiBhZGRpdGlvblxuICAvLyBieSBhZGRpbmcgZW1wdHkgc3RyaW5nIGluIGJldHdlZW5cbiAgO1xuICBfcHJvdG8uY29tcGlsZU9yID0gZnVuY3Rpb24gY29tcGlsZU9yKG5vZGUsIGZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jpbk9wRW1pdHRlcihub2RlLCBmcmFtZSwgJyB8fCAnKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVBbmQgPSBmdW5jdGlvbiBjb21waWxlQW5kKG5vZGUsIGZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jpbk9wRW1pdHRlcihub2RlLCBmcmFtZSwgJyAmJiAnKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVBZGQgPSBmdW5jdGlvbiBjb21waWxlQWRkKG5vZGUsIGZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jpbk9wRW1pdHRlcihub2RlLCBmcmFtZSwgJyArICcpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUNvbmNhdCA9IGZ1bmN0aW9uIGNvbXBpbGVDb25jYXQobm9kZSwgZnJhbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYmluT3BFbWl0dGVyKG5vZGUsIGZyYW1lLCAnICsgXCJcIiArICcpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZVN1YiA9IGZ1bmN0aW9uIGNvbXBpbGVTdWIobm9kZSwgZnJhbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYmluT3BFbWl0dGVyKG5vZGUsIGZyYW1lLCAnIC0gJyk7XG4gIH07XG4gIF9wcm90by5jb21waWxlTXVsID0gZnVuY3Rpb24gY29tcGlsZU11bChub2RlLCBmcmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9iaW5PcEVtaXR0ZXIobm9kZSwgZnJhbWUsICcgKiAnKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVEaXYgPSBmdW5jdGlvbiBjb21waWxlRGl2KG5vZGUsIGZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jpbk9wRW1pdHRlcihub2RlLCBmcmFtZSwgJyAvICcpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZU1vZCA9IGZ1bmN0aW9uIGNvbXBpbGVNb2Qobm9kZSwgZnJhbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYmluT3BFbWl0dGVyKG5vZGUsIGZyYW1lLCAnICUgJyk7XG4gIH07XG4gIF9wcm90by5jb21waWxlTm90ID0gZnVuY3Rpb24gY29tcGlsZU5vdChub2RlLCBmcmFtZSkge1xuICAgIHRoaXMuX2VtaXQoJyEnKTtcbiAgICB0aGlzLmNvbXBpbGUobm9kZS50YXJnZXQsIGZyYW1lKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVGbG9vckRpdiA9IGZ1bmN0aW9uIGNvbXBpbGVGbG9vckRpdihub2RlLCBmcmFtZSkge1xuICAgIHRoaXMuX2VtaXQoJ01hdGguZmxvb3IoJyk7XG4gICAgdGhpcy5jb21waWxlKG5vZGUubGVmdCwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoJyAvICcpO1xuICAgIHRoaXMuY29tcGlsZShub2RlLnJpZ2h0LCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdCgnKScpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZVBvdyA9IGZ1bmN0aW9uIGNvbXBpbGVQb3cobm9kZSwgZnJhbWUpIHtcbiAgICB0aGlzLl9lbWl0KCdNYXRoLnBvdygnKTtcbiAgICB0aGlzLmNvbXBpbGUobm9kZS5sZWZ0LCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdCgnLCAnKTtcbiAgICB0aGlzLmNvbXBpbGUobm9kZS5yaWdodCwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoJyknKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVOZWcgPSBmdW5jdGlvbiBjb21waWxlTmVnKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fZW1pdCgnLScpO1xuICAgIHRoaXMuY29tcGlsZShub2RlLnRhcmdldCwgZnJhbWUpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZVBvcyA9IGZ1bmN0aW9uIGNvbXBpbGVQb3Mobm9kZSwgZnJhbWUpIHtcbiAgICB0aGlzLl9lbWl0KCcrJyk7XG4gICAgdGhpcy5jb21waWxlKG5vZGUudGFyZ2V0LCBmcmFtZSk7XG4gIH07XG4gIF9wcm90by5jb21waWxlQ29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBpbGVDb21wYXJlKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgdGhpcy5jb21waWxlKG5vZGUuZXhwciwgZnJhbWUpO1xuICAgIG5vZGUub3BzLmZvckVhY2goZnVuY3Rpb24gKG9wKSB7XG4gICAgICBfdGhpczUuX2VtaXQoXCIgXCIgKyBjb21wYXJlT3BzW29wLnR5cGVdICsgXCIgXCIpO1xuICAgICAgX3RoaXM1LmNvbXBpbGUob3AuZXhwciwgZnJhbWUpO1xuICAgIH0pO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUxvb2t1cFZhbCA9IGZ1bmN0aW9uIGNvbXBpbGVMb29rdXBWYWwobm9kZSwgZnJhbWUpIHtcbiAgICB0aGlzLl9lbWl0KCdydW50aW1lLm1lbWJlckxvb2t1cCgoJyk7XG4gICAgdGhpcy5fY29tcGlsZUV4cHJlc3Npb24obm9kZS50YXJnZXQsIGZyYW1lKTtcbiAgICB0aGlzLl9lbWl0KCcpLCcpO1xuICAgIHRoaXMuX2NvbXBpbGVFeHByZXNzaW9uKG5vZGUudmFsLCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdCgnKScpO1xuICB9O1xuICBfcHJvdG8uX2dldE5vZGVOYW1lID0gZnVuY3Rpb24gX2dldE5vZGVOYW1lKG5vZGUpIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZW5hbWUpIHtcbiAgICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgICAgY2FzZSAnRnVuQ2FsbCc6XG4gICAgICAgIHJldHVybiAndGhlIHJldHVybiB2YWx1ZSBvZiAoJyArIHRoaXMuX2dldE5vZGVOYW1lKG5vZGUubmFtZSkgKyAnKSc7XG4gICAgICBjYXNlICdMb29rdXBWYWwnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Tm9kZU5hbWUobm9kZS50YXJnZXQpICsgJ1tcIicgKyB0aGlzLl9nZXROb2RlTmFtZShub2RlLnZhbCkgKyAnXCJdJztcbiAgICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgICByZXR1cm4gbm9kZS52YWx1ZS50b1N0cmluZygpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICctLWV4cHJlc3Npb24tLSc7XG4gICAgfVxuICB9O1xuICBfcHJvdG8uY29tcGlsZUZ1bkNhbGwgPSBmdW5jdGlvbiBjb21waWxlRnVuQ2FsbChub2RlLCBmcmFtZSkge1xuICAgIC8vIEtlZXAgdHJhY2sgb2YgbGluZS9jb2wgaW5mbyBhdCBydW50aW1lIGJ5IHNldHRpbmdzXG4gICAgLy8gdmFyaWFibGVzIHdpdGhpbiBhbiBleHByZXNzaW9uLiBBbiBleHByZXNzaW9uIGluIGphdmFzY3JpcHRcbiAgICAvLyBsaWtlICh4LCB5LCB6KSByZXR1cm5zIHRoZSBsYXN0IHZhbHVlLCBhbmQgeCBhbmQgeSBjYW4gYmVcbiAgICAvLyBhbnl0aGluZ1xuICAgIHRoaXMuX2VtaXQoJyhsaW5lbm8gPSAnICsgbm9kZS5saW5lbm8gKyAnLCBjb2xubyA9ICcgKyBub2RlLmNvbG5vICsgJywgJyk7XG4gICAgdGhpcy5fZW1pdCgncnVudGltZS5jYWxsV3JhcCgnKTtcbiAgICAvLyBDb21waWxlIGl0IGFzIG5vcm1hbC5cbiAgICB0aGlzLl9jb21waWxlRXhwcmVzc2lvbihub2RlLm5hbWUsIGZyYW1lKTtcblxuICAgIC8vIE91dHB1dCB0aGUgbmFtZSBvZiB3aGF0IHdlJ3JlIGNhbGxpbmcgc28gd2UgY2FuIGdldCBmcmllbmRseSBlcnJvcnNcbiAgICAvLyBpZiB0aGUgbG9va3VwIGZhaWxzLlxuICAgIHRoaXMuX2VtaXQoJywgXCInICsgdGhpcy5fZ2V0Tm9kZU5hbWUobm9kZS5uYW1lKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgKyAnXCIsIGNvbnRleHQsICcpO1xuICAgIHRoaXMuX2NvbXBpbGVBZ2dyZWdhdGUobm9kZS5hcmdzLCBmcmFtZSwgJ1snLCAnXSknKTtcbiAgICB0aGlzLl9lbWl0KCcpJyk7XG4gIH07XG4gIF9wcm90by5jb21waWxlRmlsdGVyID0gZnVuY3Rpb24gY29tcGlsZUZpbHRlcihub2RlLCBmcmFtZSkge1xuICAgIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuICAgIHRoaXMuYXNzZXJ0VHlwZShuYW1lLCBub2Rlcy5TeW1ib2wpO1xuICAgIHRoaXMuX2VtaXQoJ2Vudi5nZXRGaWx0ZXIoXCInICsgbmFtZS52YWx1ZSArICdcIikuY2FsbChjb250ZXh0LCAnKTtcbiAgICB0aGlzLl9jb21waWxlQWdncmVnYXRlKG5vZGUuYXJncywgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoJyknKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVGaWx0ZXJBc3luYyA9IGZ1bmN0aW9uIGNvbXBpbGVGaWx0ZXJBc3luYyhub2RlLCBmcmFtZSkge1xuICAgIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuICAgIHZhciBzeW1ib2wgPSBub2RlLnN5bWJvbC52YWx1ZTtcbiAgICB0aGlzLmFzc2VydFR5cGUobmFtZSwgbm9kZXMuU3ltYm9sKTtcbiAgICBmcmFtZS5zZXQoc3ltYm9sLCBzeW1ib2wpO1xuICAgIHRoaXMuX2VtaXQoJ2Vudi5nZXRGaWx0ZXIoXCInICsgbmFtZS52YWx1ZSArICdcIikuY2FsbChjb250ZXh0LCAnKTtcbiAgICB0aGlzLl9jb21waWxlQWdncmVnYXRlKG5vZGUuYXJncywgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCcsICcgKyB0aGlzLl9tYWtlQ2FsbGJhY2soc3ltYm9sKSk7XG4gICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUtleXdvcmRBcmdzID0gZnVuY3Rpb24gY29tcGlsZUtleXdvcmRBcmdzKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fZW1pdCgncnVudGltZS5tYWtlS2V5d29yZEFyZ3MoJyk7XG4gICAgdGhpcy5jb21waWxlRGljdChub2RlLCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdCgnKScpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZVNldCA9IGZ1bmN0aW9uIGNvbXBpbGVTZXQobm9kZSwgZnJhbWUpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcbiAgICB2YXIgaWRzID0gW107XG5cbiAgICAvLyBMb29rdXAgdGhlIHZhcmlhYmxlIG5hbWVzIGZvciBlYWNoIGlkZW50aWZpZXIgYW5kIGNyZWF0ZVxuICAgIC8vIG5ldyBvbmVzIGlmIG5lY2Vzc2FyeVxuICAgIG5vZGUudGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIHZhciBuYW1lID0gdGFyZ2V0LnZhbHVlO1xuICAgICAgdmFyIGlkID0gZnJhbWUubG9va3VwKG5hbWUpO1xuICAgICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWQgPSBfdGhpczYuX3RtcGlkKCk7XG5cbiAgICAgICAgLy8gTm90ZTogVGhpcyByZWxpZXMgb24ganMgYWxsb3dpbmcgc2NvcGUgYWNyb3NzXG4gICAgICAgIC8vIGJsb2NrcywgaW4gY2FzZSB0aGlzIGlzIGNyZWF0ZWQgaW5zaWRlIGFuIGBpZmBcbiAgICAgICAgX3RoaXM2Ll9lbWl0TGluZSgndmFyICcgKyBpZCArICc7Jyk7XG4gICAgICB9XG4gICAgICBpZHMucHVzaChpZCk7XG4gICAgfSk7XG4gICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgIHRoaXMuX2VtaXQoaWRzLmpvaW4oJyA9ICcpICsgJyA9ICcpO1xuICAgICAgdGhpcy5fY29tcGlsZUV4cHJlc3Npb24obm9kZS52YWx1ZSwgZnJhbWUpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoJzsnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZW1pdChpZHMuam9pbignID0gJykgKyAnID0gJyk7XG4gICAgICB0aGlzLmNvbXBpbGUobm9kZS5ib2R5LCBmcmFtZSk7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnOycpO1xuICAgIH1cbiAgICBub2RlLnRhcmdldHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0LCBpKSB7XG4gICAgICB2YXIgaWQgPSBpZHNbaV07XG4gICAgICB2YXIgbmFtZSA9IHRhcmdldC52YWx1ZTtcblxuICAgICAgLy8gV2UgYXJlIHJ1bm5pbmcgdGhpcyBmb3IgZXZlcnkgdmFyLCBidXQgaXQncyB2ZXJ5XG4gICAgICAvLyB1bmNvbW1vbiB0byBhc3NpZ24gdG8gbXVsdGlwbGUgdmFycyBhbnl3YXlcbiAgICAgIF90aGlzNi5fZW1pdExpbmUoXCJmcmFtZS5zZXQoXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgXCIgKyBpZCArIFwiLCB0cnVlKTtcIik7XG4gICAgICBfdGhpczYuX2VtaXRMaW5lKCdpZihmcmFtZS50b3BMZXZlbCkgeycpO1xuICAgICAgX3RoaXM2Ll9lbWl0TGluZShcImNvbnRleHQuc2V0VmFyaWFibGUoXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgXCIgKyBpZCArIFwiKTtcIik7XG4gICAgICBfdGhpczYuX2VtaXRMaW5lKCd9Jyk7XG4gICAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT09ICdfJykge1xuICAgICAgICBfdGhpczYuX2VtaXRMaW5lKCdpZihmcmFtZS50b3BMZXZlbCkgeycpO1xuICAgICAgICBfdGhpczYuX2VtaXRMaW5lKFwiY29udGV4dC5hZGRFeHBvcnQoXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgXCIgKyBpZCArIFwiKTtcIik7XG4gICAgICAgIF90aGlzNi5fZW1pdExpbmUoJ30nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVTd2l0Y2ggPSBmdW5jdGlvbiBjb21waWxlU3dpdGNoKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG4gICAgdGhpcy5fZW1pdCgnc3dpdGNoICgnKTtcbiAgICB0aGlzLmNvbXBpbGUobm9kZS5leHByLCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdCgnKSB7Jyk7XG4gICAgbm9kZS5jYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICBfdGhpczcuX2VtaXQoJ2Nhc2UgJyk7XG4gICAgICBfdGhpczcuY29tcGlsZShjLmNvbmQsIGZyYW1lKTtcbiAgICAgIF90aGlzNy5fZW1pdCgnOiAnKTtcbiAgICAgIF90aGlzNy5jb21waWxlKGMuYm9keSwgZnJhbWUpO1xuICAgICAgLy8gcHJlc2VydmUgZmFsbC10aHJvdWdoc1xuICAgICAgaWYgKGMuYm9keS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgX3RoaXM3Ll9lbWl0TGluZSgnYnJlYWs7Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG5vZGUuZGVmYXVsdCkge1xuICAgICAgdGhpcy5fZW1pdCgnZGVmYXVsdDonKTtcbiAgICAgIHRoaXMuY29tcGlsZShub2RlLmRlZmF1bHQsIGZyYW1lKTtcbiAgICB9XG4gICAgdGhpcy5fZW1pdCgnfScpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUlmID0gZnVuY3Rpb24gY29tcGlsZUlmKG5vZGUsIGZyYW1lLCBhc3luYykge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuICAgIHRoaXMuX2VtaXQoJ2lmKCcpO1xuICAgIHRoaXMuX2NvbXBpbGVFeHByZXNzaW9uKG5vZGUuY29uZCwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCcpIHsnKTtcbiAgICB0aGlzLl93aXRoU2NvcGVkU3ludGF4KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzOC5jb21waWxlKG5vZGUuYm9keSwgZnJhbWUpO1xuICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIF90aGlzOC5fZW1pdCgnY2IoKScpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChub2RlLmVsc2VfKSB7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnfVxcbmVsc2UgeycpO1xuICAgICAgdGhpcy5fd2l0aFNjb3BlZFN5bnRheChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzOC5jb21waWxlKG5vZGUuZWxzZV8sIGZyYW1lKTtcbiAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgX3RoaXM4Ll9lbWl0KCdjYigpJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoYXN5bmMpIHtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKCd9XFxuZWxzZSB7Jyk7XG4gICAgICB0aGlzLl9lbWl0KCdjYigpJyk7XG4gICAgfVxuICAgIHRoaXMuX2VtaXRMaW5lKCd9Jyk7XG4gIH07XG4gIF9wcm90by5jb21waWxlSWZBc3luYyA9IGZ1bmN0aW9uIGNvbXBpbGVJZkFzeW5jKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fZW1pdCgnKGZ1bmN0aW9uKGNiKSB7Jyk7XG4gICAgdGhpcy5jb21waWxlSWYobm9kZSwgZnJhbWUsIHRydWUpO1xuICAgIHRoaXMuX2VtaXQoJ30pKCcgKyB0aGlzLl9tYWtlQ2FsbGJhY2soKSk7XG4gICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICB9O1xuICBfcHJvdG8uX2VtaXRMb29wQmluZGluZ3MgPSBmdW5jdGlvbiBfZW1pdExvb3BCaW5kaW5ncyhub2RlLCBhcnIsIGksIGxlbikge1xuICAgIHZhciBfdGhpczkgPSB0aGlzO1xuICAgIHZhciBiaW5kaW5ncyA9IFt7XG4gICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgdmFsOiBpICsgXCIgKyAxXCJcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnaW5kZXgwJyxcbiAgICAgIHZhbDogaVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdyZXZpbmRleCcsXG4gICAgICB2YWw6IGxlbiArIFwiIC0gXCIgKyBpXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3JldmluZGV4MCcsXG4gICAgICB2YWw6IGxlbiArIFwiIC0gXCIgKyBpICsgXCIgLSAxXCJcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnZmlyc3QnLFxuICAgICAgdmFsOiBpICsgXCIgPT09IDBcIlxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdsYXN0JyxcbiAgICAgIHZhbDogaSArIFwiID09PSBcIiArIGxlbiArIFwiIC0gMVwiXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2xlbmd0aCcsXG4gICAgICB2YWw6IGxlblxuICAgIH1dO1xuICAgIGJpbmRpbmdzLmZvckVhY2goZnVuY3Rpb24gKGIpIHtcbiAgICAgIF90aGlzOS5fZW1pdExpbmUoXCJmcmFtZS5zZXQoXFxcImxvb3AuXCIgKyBiLm5hbWUgKyBcIlxcXCIsIFwiICsgYi52YWwgKyBcIik7XCIpO1xuICAgIH0pO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUZvciA9IGZ1bmN0aW9uIGNvbXBpbGVGb3Iobm9kZSwgZnJhbWUpIHtcbiAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG4gICAgLy8gU29tZSBvZiB0aGlzIGNvZGUgaXMgdWdseSwgYnV0IGl0IGtlZXBzIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFzIGZhc3QgYXMgcG9zc2libGUuIEZvckFzeW5jIGFsc28gc2hhcmVzIHNvbWUgb2YgdGhpcywgYnV0XG4gICAgLy8gbm90IG11Y2guXG5cbiAgICB2YXIgaSA9IHRoaXMuX3RtcGlkKCk7XG4gICAgdmFyIGxlbiA9IHRoaXMuX3RtcGlkKCk7XG4gICAgdmFyIGFyciA9IHRoaXMuX3RtcGlkKCk7XG4gICAgZnJhbWUgPSBmcmFtZS5wdXNoKCk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ2ZyYW1lID0gZnJhbWUucHVzaCgpOycpO1xuICAgIHRoaXMuX2VtaXQoXCJ2YXIgXCIgKyBhcnIgKyBcIiA9IFwiKTtcbiAgICB0aGlzLl9jb21waWxlRXhwcmVzc2lvbihub2RlLmFyciwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCc7Jyk7XG4gICAgdGhpcy5fZW1pdChcImlmKFwiICsgYXJyICsgXCIpIHtcIik7XG4gICAgdGhpcy5fZW1pdExpbmUoYXJyICsgJyA9IHJ1bnRpbWUuZnJvbUl0ZXJhdG9yKCcgKyBhcnIgKyAnKTsnKTtcblxuICAgIC8vIElmIG11bHRpcGxlIG5hbWVzIGFyZSBwYXNzZWQsIHdlIG5lZWQgdG8gYmluZCB0aGVtXG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmIChub2RlLm5hbWUgaW5zdGFuY2VvZiBub2Rlcy5BcnJheSkge1xuICAgICAgdGhpcy5fZW1pdExpbmUoXCJ2YXIgXCIgKyBpICsgXCI7XCIpO1xuXG4gICAgICAvLyBUaGUgb2JqZWN0IGNvdWxkIGJlIGFuIGFycm95IG9yIG9iamVjdC4gTm90ZSB0aGF0IHRoZVxuICAgICAgLy8gYm9keSBvZiB0aGUgbG9vcCBpcyBkdXBsaWNhdGVkIGZvciBlYWNoIGNvbmRpdGlvbiwgYnV0XG4gICAgICAvLyB3ZSBhcmUgb3B0aW1pemluZyBmb3Igc3BlZWQgb3ZlciBzaXplLlxuICAgICAgdGhpcy5fZW1pdExpbmUoXCJpZihydW50aW1lLmlzQXJyYXkoXCIgKyBhcnIgKyBcIikpIHtcIik7XG4gICAgICB0aGlzLl9lbWl0TGluZShcInZhciBcIiArIGxlbiArIFwiID0gXCIgKyBhcnIgKyBcIi5sZW5ndGg7XCIpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoXCJmb3IoXCIgKyBpICsgXCI9MDsgXCIgKyBpICsgXCIgPCBcIiArIGFyciArIFwiLmxlbmd0aDsgXCIgKyBpICsgXCIrKykge1wiKTtcblxuICAgICAgLy8gQmluZCBlYWNoIGRlY2xhcmVkIHZhclxuICAgICAgbm9kZS5uYW1lLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCB1KSB7XG4gICAgICAgIHZhciB0aWQgPSBfdGhpczEwLl90bXBpZCgpO1xuICAgICAgICBfdGhpczEwLl9lbWl0TGluZShcInZhciBcIiArIHRpZCArIFwiID0gXCIgKyBhcnIgKyBcIltcIiArIGkgKyBcIl1bXCIgKyB1ICsgXCJdO1wiKTtcbiAgICAgICAgX3RoaXMxMC5fZW1pdExpbmUoXCJmcmFtZS5zZXQoXFxcIlwiICsgY2hpbGQgKyBcIlxcXCIsIFwiICsgYXJyICsgXCJbXCIgKyBpICsgXCJdW1wiICsgdSArIFwiXSk7XCIpO1xuICAgICAgICBmcmFtZS5zZXQobm9kZS5uYW1lLmNoaWxkcmVuW3VdLnZhbHVlLCB0aWQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9lbWl0TG9vcEJpbmRpbmdzKG5vZGUsIGFyciwgaSwgbGVuKTtcbiAgICAgIHRoaXMuX3dpdGhTY29wZWRTeW50YXgoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczEwLmNvbXBpbGUobm9kZS5ib2R5LCBmcmFtZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKCd9Jyk7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnfSBlbHNlIHsnKTtcbiAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5L3ZhbHVlcyBvZiBhbiBvYmplY3RcbiAgICAgIHZhciBfbm9kZSRuYW1lJGNoaWxkcmVuID0gbm9kZS5uYW1lLmNoaWxkcmVuLFxuICAgICAgICBrZXkgPSBfbm9kZSRuYW1lJGNoaWxkcmVuWzBdLFxuICAgICAgICB2YWwgPSBfbm9kZSRuYW1lJGNoaWxkcmVuWzFdO1xuICAgICAgdmFyIGsgPSB0aGlzLl90bXBpZCgpO1xuICAgICAgdmFyIHYgPSB0aGlzLl90bXBpZCgpO1xuICAgICAgZnJhbWUuc2V0KGtleS52YWx1ZSwgayk7XG4gICAgICBmcmFtZS5zZXQodmFsLnZhbHVlLCB2KTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKGkgKyBcIiA9IC0xO1wiKTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwidmFyIFwiICsgbGVuICsgXCIgPSBydW50aW1lLmtleXMoXCIgKyBhcnIgKyBcIikubGVuZ3RoO1wiKTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwiZm9yKHZhciBcIiArIGsgKyBcIiBpbiBcIiArIGFyciArIFwiKSB7XCIpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoaSArIFwiKys7XCIpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoXCJ2YXIgXCIgKyB2ICsgXCIgPSBcIiArIGFyciArIFwiW1wiICsgayArIFwiXTtcIik7XG4gICAgICB0aGlzLl9lbWl0TGluZShcImZyYW1lLnNldChcXFwiXCIgKyBrZXkudmFsdWUgKyBcIlxcXCIsIFwiICsgayArIFwiKTtcIik7XG4gICAgICB0aGlzLl9lbWl0TGluZShcImZyYW1lLnNldChcXFwiXCIgKyB2YWwudmFsdWUgKyBcIlxcXCIsIFwiICsgdiArIFwiKTtcIik7XG4gICAgICB0aGlzLl9lbWl0TG9vcEJpbmRpbmdzKG5vZGUsIGFyciwgaSwgbGVuKTtcbiAgICAgIHRoaXMuX3dpdGhTY29wZWRTeW50YXgoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczEwLmNvbXBpbGUobm9kZS5ib2R5LCBmcmFtZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKCd9Jyk7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnfScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIHR5cGljYWwgYXJyYXkgaXRlcmF0aW9uXG4gICAgICB2YXIgX3YgPSB0aGlzLl90bXBpZCgpO1xuICAgICAgZnJhbWUuc2V0KG5vZGUubmFtZS52YWx1ZSwgX3YpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoXCJ2YXIgXCIgKyBsZW4gKyBcIiA9IFwiICsgYXJyICsgXCIubGVuZ3RoO1wiKTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwiZm9yKHZhciBcIiArIGkgKyBcIj0wOyBcIiArIGkgKyBcIiA8IFwiICsgYXJyICsgXCIubGVuZ3RoOyBcIiArIGkgKyBcIisrKSB7XCIpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoXCJ2YXIgXCIgKyBfdiArIFwiID0gXCIgKyBhcnIgKyBcIltcIiArIGkgKyBcIl07XCIpO1xuICAgICAgdGhpcy5fZW1pdExpbmUoXCJmcmFtZS5zZXQoXFxcIlwiICsgbm9kZS5uYW1lLnZhbHVlICsgXCJcXFwiLCBcIiArIF92ICsgXCIpO1wiKTtcbiAgICAgIHRoaXMuX2VtaXRMb29wQmluZGluZ3Mobm9kZSwgYXJyLCBpLCBsZW4pO1xuICAgICAgdGhpcy5fd2l0aFNjb3BlZFN5bnRheChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMTAuY29tcGlsZShub2RlLmJvZHksIGZyYW1lKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fZW1pdExpbmUoJ30nKTtcbiAgICB9XG4gICAgdGhpcy5fZW1pdExpbmUoJ30nKTtcbiAgICBpZiAobm9kZS5lbHNlXykge1xuICAgICAgdGhpcy5fZW1pdExpbmUoJ2lmICghJyArIGxlbiArICcpIHsnKTtcbiAgICAgIHRoaXMuY29tcGlsZShub2RlLmVsc2VfLCBmcmFtZSk7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnfScpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0TGluZSgnZnJhbWUgPSBmcmFtZS5wb3AoKTsnKTtcbiAgfTtcbiAgX3Byb3RvLl9jb21waWxlQXN5bmNMb29wID0gZnVuY3Rpb24gX2NvbXBpbGVBc3luY0xvb3Aobm9kZSwgZnJhbWUsIHBhcmFsbGVsKSB7XG4gICAgdmFyIF90aGlzMTEgPSB0aGlzO1xuICAgIC8vIFRoaXMgc2hhcmVzIHNvbWUgY29kZSB3aXRoIHRoZSBGb3IgdGFnLCBidXQgbm90IGVub3VnaCB0b1xuICAgIC8vIHdvcnJ5IGFib3V0LiBUaGlzIGl0ZXJhdGVzIGFjcm9zcyBhbiBvYmplY3QgYXN5bmNocm9ub3VzbHksXG4gICAgLy8gYnV0IG5vdCBpbiBwYXJhbGxlbC5cblxuICAgIHZhciBpID0gdGhpcy5fdG1waWQoKTtcbiAgICB2YXIgbGVuID0gdGhpcy5fdG1waWQoKTtcbiAgICB2YXIgYXJyID0gdGhpcy5fdG1waWQoKTtcbiAgICB2YXIgYXN5bmNNZXRob2QgPSBwYXJhbGxlbCA/ICdhc3luY0FsbCcgOiAnYXN5bmNFYWNoJztcbiAgICBmcmFtZSA9IGZyYW1lLnB1c2goKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnZnJhbWUgPSBmcmFtZS5wdXNoKCk7Jyk7XG4gICAgdGhpcy5fZW1pdCgndmFyICcgKyBhcnIgKyAnID0gcnVudGltZS5mcm9tSXRlcmF0b3IoJyk7XG4gICAgdGhpcy5fY29tcGlsZUV4cHJlc3Npb24obm9kZS5hcnIsIGZyYW1lKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnKTsnKTtcbiAgICBpZiAobm9kZS5uYW1lIGluc3RhbmNlb2Ygbm9kZXMuQXJyYXkpIHtcbiAgICAgIHZhciBhcnJheUxlbiA9IG5vZGUubmFtZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICB0aGlzLl9lbWl0KFwicnVudGltZS5cIiArIGFzeW5jTWV0aG9kICsgXCIoXCIgKyBhcnIgKyBcIiwgXCIgKyBhcnJheUxlbiArIFwiLCBmdW5jdGlvbihcIik7XG4gICAgICBub2RlLm5hbWUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBfdGhpczExLl9lbWl0KG5hbWUudmFsdWUgKyBcIixcIik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2VtaXQoaSArICcsJyArIGxlbiArICcsbmV4dCkgeycpO1xuICAgICAgbm9kZS5uYW1lLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIGlkID0gbmFtZS52YWx1ZTtcbiAgICAgICAgZnJhbWUuc2V0KGlkLCBpZCk7XG4gICAgICAgIF90aGlzMTEuX2VtaXRMaW5lKFwiZnJhbWUuc2V0KFxcXCJcIiArIGlkICsgXCJcXFwiLCBcIiArIGlkICsgXCIpO1wiKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaWQgPSBub2RlLm5hbWUudmFsdWU7XG4gICAgICB0aGlzLl9lbWl0TGluZShcInJ1bnRpbWUuXCIgKyBhc3luY01ldGhvZCArIFwiKFwiICsgYXJyICsgXCIsIDEsIGZ1bmN0aW9uKFwiICsgaWQgKyBcIiwgXCIgKyBpICsgXCIsIFwiICsgbGVuICsgXCIsbmV4dCkge1wiKTtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKCdmcmFtZS5zZXQoXCInICsgaWQgKyAnXCIsICcgKyBpZCArICcpOycpO1xuICAgICAgZnJhbWUuc2V0KGlkLCBpZCk7XG4gICAgfVxuICAgIHRoaXMuX2VtaXRMb29wQmluZGluZ3Mobm9kZSwgYXJyLCBpLCBsZW4pO1xuICAgIHRoaXMuX3dpdGhTY29wZWRTeW50YXgoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGJ1ZjtcbiAgICAgIGlmIChwYXJhbGxlbCkge1xuICAgICAgICBidWYgPSBfdGhpczExLl9wdXNoQnVmZmVyKCk7XG4gICAgICB9XG4gICAgICBfdGhpczExLmNvbXBpbGUobm9kZS5ib2R5LCBmcmFtZSk7XG4gICAgICBfdGhpczExLl9lbWl0TGluZSgnbmV4dCgnICsgaSArIChidWYgPyAnLCcgKyBidWYgOiAnJykgKyAnKTsnKTtcbiAgICAgIGlmIChwYXJhbGxlbCkge1xuICAgICAgICBfdGhpczExLl9wb3BCdWZmZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgb3V0cHV0ID0gdGhpcy5fdG1waWQoKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnfSwgJyArIHRoaXMuX21ha2VDYWxsYmFjayhvdXRwdXQpKTtcbiAgICB0aGlzLl9hZGRTY29wZUxldmVsKCk7XG4gICAgaWYgKHBhcmFsbGVsKSB7XG4gICAgICB0aGlzLl9lbWl0TGluZSh0aGlzLmJ1ZmZlciArICcgKz0gJyArIG91dHB1dCArICc7Jyk7XG4gICAgfVxuICAgIGlmIChub2RlLmVsc2VfKSB7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnaWYgKCEnICsgYXJyICsgJy5sZW5ndGgpIHsnKTtcbiAgICAgIHRoaXMuY29tcGlsZShub2RlLmVsc2VfLCBmcmFtZSk7XG4gICAgICB0aGlzLl9lbWl0TGluZSgnfScpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0TGluZSgnZnJhbWUgPSBmcmFtZS5wb3AoKTsnKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVBc3luY0VhY2ggPSBmdW5jdGlvbiBjb21waWxlQXN5bmNFYWNoKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fY29tcGlsZUFzeW5jTG9vcChub2RlLCBmcmFtZSk7XG4gIH07XG4gIF9wcm90by5jb21waWxlQXN5bmNBbGwgPSBmdW5jdGlvbiBjb21waWxlQXN5bmNBbGwobm9kZSwgZnJhbWUpIHtcbiAgICB0aGlzLl9jb21waWxlQXN5bmNMb29wKG5vZGUsIGZyYW1lLCB0cnVlKTtcbiAgfTtcbiAgX3Byb3RvLl9jb21waWxlTWFjcm8gPSBmdW5jdGlvbiBfY29tcGlsZU1hY3JvKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGt3YXJncyA9IG51bGw7XG4gICAgdmFyIGZ1bmNJZCA9ICdtYWNyb18nICsgdGhpcy5fdG1waWQoKTtcbiAgICB2YXIga2VlcEZyYW1lID0gZnJhbWUgIT09IHVuZGVmaW5lZDtcblxuICAgIC8vIFR5cGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhlIGFyZ3NcbiAgICBub2RlLmFyZ3MuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoYXJnLCBpKSB7XG4gICAgICBpZiAoaSA9PT0gbm9kZS5hcmdzLmNoaWxkcmVuLmxlbmd0aCAtIDEgJiYgYXJnIGluc3RhbmNlb2Ygbm9kZXMuRGljdCkge1xuICAgICAgICBrd2FyZ3MgPSBhcmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczEyLmFzc2VydFR5cGUoYXJnLCBub2Rlcy5TeW1ib2wpO1xuICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgcmVhbE5hbWVzID0gW10uY29uY2F0KGFyZ3MubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gXCJsX1wiICsgbi52YWx1ZTtcbiAgICB9KSwgWydrd2FyZ3MnXSk7XG5cbiAgICAvLyBRdW90ZWQgYXJndW1lbnQgbmFtZXNcbiAgICB2YXIgYXJnTmFtZXMgPSBhcmdzLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIFwiXFxcIlwiICsgbi52YWx1ZSArIFwiXFxcIlwiO1xuICAgIH0pO1xuICAgIHZhciBrd2FyZ05hbWVzID0gKGt3YXJncyAmJiBrd2FyZ3MuY2hpbGRyZW4gfHwgW10pLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIFwiXFxcIlwiICsgbi5rZXkudmFsdWUgKyBcIlxcXCJcIjtcbiAgICB9KTtcblxuICAgIC8vIFdlIHBhc3MgYSBmdW5jdGlvbiB0byBtYWtlTWFjcm8gd2hpY2ggZGVzdHJ1Y3R1cmVzIHRoZVxuICAgIC8vIGFyZ3VtZW50cyBzbyBzdXBwb3J0IHNldHRpbmcgcG9zaXRpb25hbCBhcmdzIHdpdGgga2V5d29yZHNcbiAgICAvLyBhcmdzIGFuZCBwYXNzaW5nIGtleXdvcmQgYXJncyBhcyBwb3NpdGlvbmFsIGFyZ3NcbiAgICAvLyAoZXNzZW50aWFsbHkgZGVmYXVsdCB2YWx1ZXMpLiBTZWUgcnVudGltZS5qcy5cbiAgICB2YXIgY3VyckZyYW1lO1xuICAgIGlmIChrZWVwRnJhbWUpIHtcbiAgICAgIGN1cnJGcmFtZSA9IGZyYW1lLnB1c2godHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0TGluZXMoXCJ2YXIgXCIgKyBmdW5jSWQgKyBcIiA9IHJ1bnRpbWUubWFrZU1hY3JvKFwiLCBcIltcIiArIGFyZ05hbWVzLmpvaW4oJywgJykgKyBcIl0sIFwiLCBcIltcIiArIGt3YXJnTmFtZXMuam9pbignLCAnKSArIFwiXSwgXCIsIFwiZnVuY3Rpb24gKFwiICsgcmVhbE5hbWVzLmpvaW4oJywgJykgKyBcIikge1wiLCAndmFyIGNhbGxlckZyYW1lID0gZnJhbWU7JywgJ2ZyYW1lID0gJyArIChrZWVwRnJhbWUgPyAnZnJhbWUucHVzaCh0cnVlKTsnIDogJ25ldyBydW50aW1lLkZyYW1lKCk7JyksICdrd2FyZ3MgPSBrd2FyZ3MgfHwge307JywgJ2lmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoa3dhcmdzLCBcImNhbGxlclwiKSkgeycsICdmcmFtZS5zZXQoXCJjYWxsZXJcIiwga3dhcmdzLmNhbGxlcik7IH0nKTtcblxuICAgIC8vIEV4cG9zZSB0aGUgYXJndW1lbnRzIHRvIHRoZSB0ZW1wbGF0ZS4gRG9uJ3QgbmVlZCB0byB1c2VcbiAgICAvLyByYW5kb20gbmFtZXMgYmVjYXVzZSB0aGUgZnVuY3Rpb25cbiAgICAvLyB3aWxsIGNyZWF0ZSBhIG5ldyBydW4tdGltZSBzY29wZSBmb3IgdXNcbiAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKGFyZykge1xuICAgICAgX3RoaXMxMi5fZW1pdExpbmUoXCJmcmFtZS5zZXQoXFxcIlwiICsgYXJnLnZhbHVlICsgXCJcXFwiLCBsX1wiICsgYXJnLnZhbHVlICsgXCIpO1wiKTtcbiAgICAgIGN1cnJGcmFtZS5zZXQoYXJnLnZhbHVlLCBcImxfXCIgKyBhcmcudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gRXhwb3NlIHRoZSBrZXl3b3JkIGFyZ3VtZW50c1xuICAgIGlmIChrd2FyZ3MpIHtcbiAgICAgIGt3YXJncy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChwYWlyKSB7XG4gICAgICAgIHZhciBuYW1lID0gcGFpci5rZXkudmFsdWU7XG4gICAgICAgIF90aGlzMTIuX2VtaXQoXCJmcmFtZS5zZXQoXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgXCIpO1xuICAgICAgICBfdGhpczEyLl9lbWl0KFwiT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGt3YXJncywgXFxcIlwiICsgbmFtZSArIFwiXFxcIilcIik7XG4gICAgICAgIF90aGlzMTIuX2VtaXQoXCIgPyBrd2FyZ3NbXFxcIlwiICsgbmFtZSArIFwiXFxcIl0gOiBcIik7XG4gICAgICAgIF90aGlzMTIuX2NvbXBpbGVFeHByZXNzaW9uKHBhaXIudmFsdWUsIGN1cnJGcmFtZSk7XG4gICAgICAgIF90aGlzMTIuX2VtaXQoJyk7Jyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlcklkID0gdGhpcy5fcHVzaEJ1ZmZlcigpO1xuICAgIHRoaXMuX3dpdGhTY29wZWRTeW50YXgoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMxMi5jb21waWxlKG5vZGUuYm9keSwgY3VyckZyYW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbWl0TGluZSgnZnJhbWUgPSAnICsgKGtlZXBGcmFtZSA/ICdmcmFtZS5wb3AoKTsnIDogJ2NhbGxlckZyYW1lOycpKTtcbiAgICB0aGlzLl9lbWl0TGluZShcInJldHVybiBuZXcgcnVudGltZS5TYWZlU3RyaW5nKFwiICsgYnVmZmVySWQgKyBcIik7XCIpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd9KTsnKTtcbiAgICB0aGlzLl9wb3BCdWZmZXIoKTtcbiAgICByZXR1cm4gZnVuY0lkO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZU1hY3JvID0gZnVuY3Rpb24gY29tcGlsZU1hY3JvKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIGZ1bmNJZCA9IHRoaXMuX2NvbXBpbGVNYWNybyhub2RlKTtcblxuICAgIC8vIEV4cG9zZSB0aGUgbWFjcm8gdG8gdGhlIHRlbXBsYXRlc1xuICAgIHZhciBuYW1lID0gbm9kZS5uYW1lLnZhbHVlO1xuICAgIGZyYW1lLnNldChuYW1lLCBmdW5jSWQpO1xuICAgIGlmIChmcmFtZS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwiZnJhbWUuc2V0KFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIFwiICsgZnVuY0lkICsgXCIpO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGUubmFtZS52YWx1ZS5jaGFyQXQoMCkgIT09ICdfJykge1xuICAgICAgICB0aGlzLl9lbWl0TGluZShcImNvbnRleHQuYWRkRXhwb3J0KFxcXCJcIiArIG5hbWUgKyBcIlxcXCIpO1wiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwiY29udGV4dC5zZXRWYXJpYWJsZShcXFwiXCIgKyBuYW1lICsgXCJcXFwiLCBcIiArIGZ1bmNJZCArIFwiKTtcIik7XG4gICAgfVxuICB9O1xuICBfcHJvdG8uY29tcGlsZUNhbGxlciA9IGZ1bmN0aW9uIGNvbXBpbGVDYWxsZXIobm9kZSwgZnJhbWUpIHtcbiAgICAvLyBiYXNpY2FsbHkgYW4gYW5vbnltb3VzIFwibWFjcm8gZXhwcmVzc2lvblwiXG4gICAgdGhpcy5fZW1pdCgnKGZ1bmN0aW9uICgpeycpO1xuICAgIHZhciBmdW5jSWQgPSB0aGlzLl9jb21waWxlTWFjcm8obm9kZSwgZnJhbWUpO1xuICAgIHRoaXMuX2VtaXQoXCJyZXR1cm4gXCIgKyBmdW5jSWQgKyBcIjt9KSgpXCIpO1xuICB9O1xuICBfcHJvdG8uX2NvbXBpbGVHZXRUZW1wbGF0ZSA9IGZ1bmN0aW9uIF9jb21waWxlR2V0VGVtcGxhdGUobm9kZSwgZnJhbWUsIGVhZ2VyQ29tcGlsZSwgaWdub3JlTWlzc2luZykge1xuICAgIHZhciBwYXJlbnRUZW1wbGF0ZUlkID0gdGhpcy5fdG1waWQoKTtcbiAgICB2YXIgcGFyZW50TmFtZSA9IHRoaXMuX3RlbXBsYXRlTmFtZSgpO1xuICAgIHZhciBjYiA9IHRoaXMuX21ha2VDYWxsYmFjayhwYXJlbnRUZW1wbGF0ZUlkKTtcbiAgICB2YXIgZWFnZXJDb21waWxlQXJnID0gZWFnZXJDb21waWxlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB2YXIgaWdub3JlTWlzc2luZ0FyZyA9IGlnbm9yZU1pc3NpbmcgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIHRoaXMuX2VtaXQoJ2Vudi5nZXRUZW1wbGF0ZSgnKTtcbiAgICB0aGlzLl9jb21waWxlRXhwcmVzc2lvbihub2RlLnRlbXBsYXRlLCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdExpbmUoXCIsIFwiICsgZWFnZXJDb21waWxlQXJnICsgXCIsIFwiICsgcGFyZW50TmFtZSArIFwiLCBcIiArIGlnbm9yZU1pc3NpbmdBcmcgKyBcIiwgXCIgKyBjYik7XG4gICAgcmV0dXJuIHBhcmVudFRlbXBsYXRlSWQ7XG4gIH07XG4gIF9wcm90by5jb21waWxlSW1wb3J0ID0gZnVuY3Rpb24gY29tcGlsZUltcG9ydChub2RlLCBmcmFtZSkge1xuICAgIHZhciB0YXJnZXQgPSBub2RlLnRhcmdldC52YWx1ZTtcbiAgICB2YXIgaWQgPSB0aGlzLl9jb21waWxlR2V0VGVtcGxhdGUobm9kZSwgZnJhbWUsIGZhbHNlLCBmYWxzZSk7XG4gICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICAgIHRoaXMuX2VtaXRMaW5lKGlkICsgJy5nZXRFeHBvcnRlZCgnICsgKG5vZGUud2l0aENvbnRleHQgPyAnY29udGV4dC5nZXRWYXJpYWJsZXMoKSwgZnJhbWUsICcgOiAnJykgKyB0aGlzLl9tYWtlQ2FsbGJhY2soaWQpKTtcbiAgICB0aGlzLl9hZGRTY29wZUxldmVsKCk7XG4gICAgZnJhbWUuc2V0KHRhcmdldCwgaWQpO1xuICAgIGlmIChmcmFtZS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwiZnJhbWUuc2V0KFxcXCJcIiArIHRhcmdldCArIFwiXFxcIiwgXCIgKyBpZCArIFwiKTtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VtaXRMaW5lKFwiY29udGV4dC5zZXRWYXJpYWJsZShcXFwiXCIgKyB0YXJnZXQgKyBcIlxcXCIsIFwiICsgaWQgKyBcIik7XCIpO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVGcm9tSW1wb3J0ID0gZnVuY3Rpb24gY29tcGlsZUZyb21JbXBvcnQobm9kZSwgZnJhbWUpIHtcbiAgICB2YXIgX3RoaXMxMyA9IHRoaXM7XG4gICAgdmFyIGltcG9ydGVkSWQgPSB0aGlzLl9jb21waWxlR2V0VGVtcGxhdGUobm9kZSwgZnJhbWUsIGZhbHNlLCBmYWxzZSk7XG4gICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICAgIHRoaXMuX2VtaXRMaW5lKGltcG9ydGVkSWQgKyAnLmdldEV4cG9ydGVkKCcgKyAobm9kZS53aXRoQ29udGV4dCA/ICdjb250ZXh0LmdldFZhcmlhYmxlcygpLCBmcmFtZSwgJyA6ICcnKSArIHRoaXMuX21ha2VDYWxsYmFjayhpbXBvcnRlZElkKSk7XG4gICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICAgIG5vZGUubmFtZXMuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAobmFtZU5vZGUpIHtcbiAgICAgIHZhciBuYW1lO1xuICAgICAgdmFyIGFsaWFzO1xuICAgICAgdmFyIGlkID0gX3RoaXMxMy5fdG1waWQoKTtcbiAgICAgIGlmIChuYW1lTm9kZSBpbnN0YW5jZW9mIG5vZGVzLlBhaXIpIHtcbiAgICAgICAgbmFtZSA9IG5hbWVOb2RlLmtleS52YWx1ZTtcbiAgICAgICAgYWxpYXMgPSBuYW1lTm9kZS52YWx1ZS52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWUgPSBuYW1lTm9kZS52YWx1ZTtcbiAgICAgICAgYWxpYXMgPSBuYW1lO1xuICAgICAgfVxuICAgICAgX3RoaXMxMy5fZW1pdExpbmUoXCJpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXCIgKyBpbXBvcnRlZElkICsgXCIsIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIpKSB7XCIpO1xuICAgICAgX3RoaXMxMy5fZW1pdExpbmUoXCJ2YXIgXCIgKyBpZCArIFwiID0gXCIgKyBpbXBvcnRlZElkICsgXCIuXCIgKyBuYW1lICsgXCI7XCIpO1xuICAgICAgX3RoaXMxMy5fZW1pdExpbmUoJ30gZWxzZSB7Jyk7XG4gICAgICBfdGhpczEzLl9lbWl0TGluZShcImNiKG5ldyBFcnJvcihcXFwiY2Fubm90IGltcG9ydCAnXCIgKyBuYW1lICsgXCInXFxcIikpOyByZXR1cm47XCIpO1xuICAgICAgX3RoaXMxMy5fZW1pdExpbmUoJ30nKTtcbiAgICAgIGZyYW1lLnNldChhbGlhcywgaWQpO1xuICAgICAgaWYgKGZyYW1lLnBhcmVudCkge1xuICAgICAgICBfdGhpczEzLl9lbWl0TGluZShcImZyYW1lLnNldChcXFwiXCIgKyBhbGlhcyArIFwiXFxcIiwgXCIgKyBpZCArIFwiKTtcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczEzLl9lbWl0TGluZShcImNvbnRleHQuc2V0VmFyaWFibGUoXFxcIlwiICsgYWxpYXMgKyBcIlxcXCIsIFwiICsgaWQgKyBcIik7XCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZUJsb2NrID0gZnVuY3Rpb24gY29tcGlsZUJsb2NrKG5vZGUpIHtcbiAgICB2YXIgaWQgPSB0aGlzLl90bXBpZCgpO1xuXG4gICAgLy8gSWYgd2UgYXJlIGV4ZWN1dGluZyBvdXRzaWRlIGEgYmxvY2sgKGNyZWF0aW5nIGEgdG9wLWxldmVsXG4gICAgLy8gYmxvY2spLCB3ZSByZWFsbHkgZG9uJ3Qgd2FudCB0byBleGVjdXRlIGl0cyBjb2RlIGJlY2F1c2UgaXRcbiAgICAvLyB3aWxsIGV4ZWN1dGUgdHdpY2U6IG9uY2Ugd2hlbiB0aGUgY2hpbGQgdGVtcGxhdGUgcnVucyBhbmRcbiAgICAvLyBhZ2FpbiB3aGVuIHRoZSBwYXJlbnQgdGVtcGxhdGUgcnVucy4gTm90ZSB0aGF0IGJsb2Nrc1xuICAgIC8vIHdpdGhpbiBibG9ja3Mgd2lsbCAqYWx3YXlzKiBleGVjdXRlIGltbWVkaWF0ZWx5ICphbmQqXG4gICAgLy8gd2hlcmV2ZXIgZWxzZSB0aGV5IGFyZSBpbnZva2VkIChsaWtlIHVzZWQgaW4gYSBwYXJlbnRcbiAgICAvLyB0ZW1wbGF0ZSkuIFRoaXMgbWF5IGhhdmUgYmVoYXZpb3JhbCBkaWZmZXJlbmNlcyBmcm9tIGppbmphXG4gICAgLy8gYmVjYXVzZSBibG9ja3MgY2FuIGhhdmUgc2lkZSBlZmZlY3RzLCBidXQgaXQgc2VlbXMgbGlrZSBhXG4gICAgLy8gd2FzdGUgb2YgcGVyZm9ybWFuY2UgdG8gYWx3YXlzIGV4ZWN1dGUgaHVnZSB0b3AtbGV2ZWxcbiAgICAvLyBibG9ja3MgdHdpY2VcbiAgICBpZiAoIXRoaXMuaW5CbG9jaykge1xuICAgICAgdGhpcy5fZW1pdCgnKHBhcmVudFRlbXBsYXRlID8gZnVuY3Rpb24oZSwgYywgZiwgciwgY2IpIHsgY2IoXCJcIik7IH0gOiAnKTtcbiAgICB9XG4gICAgdGhpcy5fZW1pdChcImNvbnRleHQuZ2V0QmxvY2soXFxcIlwiICsgbm9kZS5uYW1lLnZhbHVlICsgXCJcXFwiKVwiKTtcbiAgICBpZiAoIXRoaXMuaW5CbG9jaykge1xuICAgICAgdGhpcy5fZW1pdCgnKScpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0TGluZSgnKGVudiwgY29udGV4dCwgZnJhbWUsIHJ1bnRpbWUsICcgKyB0aGlzLl9tYWtlQ2FsbGJhY2soaWQpKTtcbiAgICB0aGlzLl9lbWl0TGluZSh0aGlzLmJ1ZmZlciArIFwiICs9IFwiICsgaWQgKyBcIjtcIik7XG4gICAgdGhpcy5fYWRkU2NvcGVMZXZlbCgpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZVN1cGVyID0gZnVuY3Rpb24gY29tcGlsZVN1cGVyKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIG5hbWUgPSBub2RlLmJsb2NrTmFtZS52YWx1ZTtcbiAgICB2YXIgaWQgPSBub2RlLnN5bWJvbC52YWx1ZTtcbiAgICB2YXIgY2IgPSB0aGlzLl9tYWtlQ2FsbGJhY2soaWQpO1xuICAgIHRoaXMuX2VtaXRMaW5lKFwiY29udGV4dC5nZXRTdXBlcihlbnYsIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIGJfXCIgKyBuYW1lICsgXCIsIGZyYW1lLCBydW50aW1lLCBcIiArIGNiKTtcbiAgICB0aGlzLl9lbWl0TGluZShpZCArIFwiID0gcnVudGltZS5tYXJrU2FmZShcIiArIGlkICsgXCIpO1wiKTtcbiAgICB0aGlzLl9hZGRTY29wZUxldmVsKCk7XG4gICAgZnJhbWUuc2V0KGlkLCBpZCk7XG4gIH07XG4gIF9wcm90by5jb21waWxlRXh0ZW5kcyA9IGZ1bmN0aW9uIGNvbXBpbGVFeHRlbmRzKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIGsgPSB0aGlzLl90bXBpZCgpO1xuICAgIHZhciBwYXJlbnRUZW1wbGF0ZUlkID0gdGhpcy5fY29tcGlsZUdldFRlbXBsYXRlKG5vZGUsIGZyYW1lLCB0cnVlLCBmYWxzZSk7XG5cbiAgICAvLyBleHRlbmRzIGlzIGEgZHluYW1pYyB0YWcgYW5kIGNhbiBvY2N1ciB3aXRoaW4gYSBibG9jayBsaWtlXG4gICAgLy8gYGlmYCwgc28gaWYgdGhpcyBoYXBwZW5zIHdlIG5lZWQgdG8gY2FwdHVyZSB0aGUgcGFyZW50XG4gICAgLy8gdGVtcGxhdGUgaW4gdGhlIHRvcC1sZXZlbCBzY29wZVxuICAgIHRoaXMuX2VtaXRMaW5lKFwicGFyZW50VGVtcGxhdGUgPSBcIiArIHBhcmVudFRlbXBsYXRlSWQpO1xuICAgIHRoaXMuX2VtaXRMaW5lKFwiZm9yKHZhciBcIiArIGsgKyBcIiBpbiBwYXJlbnRUZW1wbGF0ZS5ibG9ja3MpIHtcIik7XG4gICAgdGhpcy5fZW1pdExpbmUoXCJjb250ZXh0LmFkZEJsb2NrKFwiICsgayArIFwiLCBwYXJlbnRUZW1wbGF0ZS5ibG9ja3NbXCIgKyBrICsgXCJdKTtcIik7XG4gICAgdGhpcy5fZW1pdExpbmUoJ30nKTtcbiAgICB0aGlzLl9hZGRTY29wZUxldmVsKCk7XG4gIH07XG4gIF9wcm90by5jb21waWxlSW5jbHVkZSA9IGZ1bmN0aW9uIGNvbXBpbGVJbmNsdWRlKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5fZW1pdExpbmUoJ3ZhciB0YXNrcyA9IFtdOycpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd0YXNrcy5wdXNoKCcpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCdmdW5jdGlvbihjYWxsYmFjaykgeycpO1xuICAgIHZhciBpZCA9IHRoaXMuX2NvbXBpbGVHZXRUZW1wbGF0ZShub2RlLCBmcmFtZSwgZmFsc2UsIG5vZGUuaWdub3JlTWlzc2luZyk7XG4gICAgdGhpcy5fZW1pdExpbmUoXCJjYWxsYmFjayhudWxsLFwiICsgaWQgKyBcIik7fSk7XCIpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd9KTsnKTtcbiAgICB2YXIgaWQyID0gdGhpcy5fdG1waWQoKTtcbiAgICB0aGlzLl9lbWl0TGluZSgndGFza3MucHVzaCgnKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnZnVuY3Rpb24odGVtcGxhdGUsIGNhbGxiYWNrKXsnKTtcbiAgICB0aGlzLl9lbWl0TGluZSgndGVtcGxhdGUucmVuZGVyKGNvbnRleHQuZ2V0VmFyaWFibGVzKCksIGZyYW1lLCAnICsgdGhpcy5fbWFrZUNhbGxiYWNrKGlkMikpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCdjYWxsYmFjayhudWxsLCcgKyBpZDIgKyAnKTt9KTsnKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnfSk7Jyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ3Rhc2tzLnB1c2goJyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ2Z1bmN0aW9uKHJlc3VsdCwgY2FsbGJhY2speycpO1xuICAgIHRoaXMuX2VtaXRMaW5lKHRoaXMuYnVmZmVyICsgXCIgKz0gcmVzdWx0O1wiKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnY2FsbGJhY2sobnVsbCk7Jyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ30pOycpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCdlbnYud2F0ZXJmYWxsKHRhc2tzLCBmdW5jdGlvbigpeycpO1xuICAgIHRoaXMuX2FkZFNjb3BlTGV2ZWwoKTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVUZW1wbGF0ZURhdGEgPSBmdW5jdGlvbiBjb21waWxlVGVtcGxhdGVEYXRhKG5vZGUsIGZyYW1lKSB7XG4gICAgdGhpcy5jb21waWxlTGl0ZXJhbChub2RlLCBmcmFtZSk7XG4gIH07XG4gIF9wcm90by5jb21waWxlQ2FwdHVyZSA9IGZ1bmN0aW9uIGNvbXBpbGVDYXB0dXJlKG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIF90aGlzMTQgPSB0aGlzO1xuICAgIC8vIHdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgb3ZlcnJpZGUgdGhlIGN1cnJlbnQgYnVmZmVyIGlkIGFzICdvdXRwdXQnXG4gICAgLy8gc28gdGhlIHNldCBibG9jayB3cml0ZXMgdG8gdGhlIGNhcHR1cmUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIGJ1ZmZlclxuICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICB0aGlzLmJ1ZmZlciA9ICdvdXRwdXQnO1xuICAgIHRoaXMuX2VtaXRMaW5lKCcoZnVuY3Rpb24oKSB7Jyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ3ZhciBvdXRwdXQgPSBcIlwiOycpO1xuICAgIHRoaXMuX3dpdGhTY29wZWRTeW50YXgoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMxNC5jb21waWxlKG5vZGUuYm9keSwgZnJhbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2VtaXRMaW5lKCdyZXR1cm4gb3V0cHV0OycpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd9KSgpJyk7XG4gICAgLy8gYW5kIG9mIGNvdXJzZSwgcmV2ZXJ0IGJhY2sgdG8gdGhlIG9sZCBidWZmZXIgaWRcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVPdXRwdXQgPSBmdW5jdGlvbiBjb21waWxlT3V0cHV0KG5vZGUsIGZyYW1lKSB7XG4gICAgdmFyIF90aGlzMTUgPSB0aGlzO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIC8vIFRlbXBsYXRlRGF0YSBpcyBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIGl0IGlzIG5ldmVyXG4gICAgICAvLyBhdXRvZXNjYXBlZCwgc28gc2ltcGx5IG91dHB1dCBpdCBmb3Igb3B0aW1pemF0aW9uXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBub2Rlcy5UZW1wbGF0ZURhdGEpIHtcbiAgICAgICAgaWYgKGNoaWxkLnZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMxNS5fZW1pdChfdGhpczE1LmJ1ZmZlciArIFwiICs9IFwiKTtcbiAgICAgICAgICBfdGhpczE1LmNvbXBpbGVMaXRlcmFsKGNoaWxkLCBmcmFtZSk7XG4gICAgICAgICAgX3RoaXMxNS5fZW1pdExpbmUoJzsnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMxNS5fZW1pdChfdGhpczE1LmJ1ZmZlciArIFwiICs9IHJ1bnRpbWUuc3VwcHJlc3NWYWx1ZShcIik7XG4gICAgICAgIGlmIChfdGhpczE1LnRocm93T25VbmRlZmluZWQpIHtcbiAgICAgICAgICBfdGhpczE1Ll9lbWl0KCdydW50aW1lLmVuc3VyZURlZmluZWQoJyk7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMxNS5jb21waWxlKGNoaWxkLCBmcmFtZSk7XG4gICAgICAgIGlmIChfdGhpczE1LnRocm93T25VbmRlZmluZWQpIHtcbiAgICAgICAgICBfdGhpczE1Ll9lbWl0KFwiLFwiICsgbm9kZS5saW5lbm8gKyBcIixcIiArIG5vZGUuY29sbm8gKyBcIilcIik7XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMxNS5fZW1pdCgnLCBlbnYub3B0cy5hdXRvZXNjYXBlKTtcXG4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgX3Byb3RvLmNvbXBpbGVSb290ID0gZnVuY3Rpb24gY29tcGlsZVJvb3Qobm9kZSwgZnJhbWUpIHtcbiAgICB2YXIgX3RoaXMxNiA9IHRoaXM7XG4gICAgaWYgKGZyYW1lKSB7XG4gICAgICB0aGlzLmZhaWwoJ2NvbXBpbGVSb290OiByb290IG5vZGUgY2FuXFwndCBoYXZlIGZyYW1lJyk7XG4gICAgfVxuICAgIGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZW1pdEZ1bmNCZWdpbihub2RlLCAncm9vdCcpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd2YXIgcGFyZW50VGVtcGxhdGUgPSBudWxsOycpO1xuICAgIHRoaXMuX2NvbXBpbGVDaGlsZHJlbihub2RlLCBmcmFtZSk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ2lmKHBhcmVudFRlbXBsYXRlKSB7Jyk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ3BhcmVudFRlbXBsYXRlLnJvb3RSZW5kZXJGdW5jKGVudiwgY29udGV4dCwgZnJhbWUsIHJ1bnRpbWUsIGNiKTsnKTtcbiAgICB0aGlzLl9lbWl0TGluZSgnfSBlbHNlIHsnKTtcbiAgICB0aGlzLl9lbWl0TGluZShcImNiKG51bGwsIFwiICsgdGhpcy5idWZmZXIgKyBcIik7XCIpO1xuICAgIHRoaXMuX2VtaXRMaW5lKCd9Jyk7XG4gICAgdGhpcy5fZW1pdEZ1bmNFbmQodHJ1ZSk7XG4gICAgdGhpcy5pbkJsb2NrID0gdHJ1ZTtcbiAgICB2YXIgYmxvY2tOYW1lcyA9IFtdO1xuICAgIHZhciBibG9ja3MgPSBub2RlLmZpbmRBbGwobm9kZXMuQmxvY2spO1xuICAgIGJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChibG9jaywgaSkge1xuICAgICAgdmFyIG5hbWUgPSBibG9jay5uYW1lLnZhbHVlO1xuICAgICAgaWYgKGJsb2NrTmFtZXMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2sgXFxcIlwiICsgbmFtZSArIFwiXFxcIiBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLlwiKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrTmFtZXMucHVzaChuYW1lKTtcbiAgICAgIF90aGlzMTYuX2VtaXRGdW5jQmVnaW4oYmxvY2ssIFwiYl9cIiArIG5hbWUpO1xuICAgICAgdmFyIHRtcEZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgICBfdGhpczE2Ll9lbWl0TGluZSgndmFyIGZyYW1lID0gZnJhbWUucHVzaCh0cnVlKTsnKTtcbiAgICAgIF90aGlzMTYuY29tcGlsZShibG9jay5ib2R5LCB0bXBGcmFtZSk7XG4gICAgICBfdGhpczE2Ll9lbWl0RnVuY0VuZCgpO1xuICAgIH0pO1xuICAgIHRoaXMuX2VtaXRMaW5lKCdyZXR1cm4geycpO1xuICAgIGJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChibG9jaywgaSkge1xuICAgICAgdmFyIGJsb2NrTmFtZSA9IFwiYl9cIiArIGJsb2NrLm5hbWUudmFsdWU7XG4gICAgICBfdGhpczE2Ll9lbWl0TGluZShibG9ja05hbWUgKyBcIjogXCIgKyBibG9ja05hbWUgKyBcIixcIik7XG4gICAgfSk7XG4gICAgdGhpcy5fZW1pdExpbmUoJ3Jvb3Q6IHJvb3RcXG59OycpO1xuICB9O1xuICBfcHJvdG8uY29tcGlsZSA9IGZ1bmN0aW9uIGNvbXBpbGUobm9kZSwgZnJhbWUpIHtcbiAgICB2YXIgX2NvbXBpbGUgPSB0aGlzWydjb21waWxlJyArIG5vZGUudHlwZW5hbWVdO1xuICAgIGlmIChfY29tcGlsZSkge1xuICAgICAgX2NvbXBpbGUuY2FsbCh0aGlzLCBub2RlLCBmcmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbChcImNvbXBpbGU6IENhbm5vdCBjb21waWxlIG5vZGU6IFwiICsgbm9kZS50eXBlbmFtZSwgbm9kZS5saW5lbm8sIG5vZGUuY29sbm8pO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvLmdldENvZGUgPSBmdW5jdGlvbiBnZXRDb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmNvZGVidWYuam9pbignJyk7XG4gIH07XG4gIHJldHVybiBDb21waWxlcjtcbn0oT2JqKTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21waWxlOiBmdW5jdGlvbiBjb21waWxlKHNyYywgYXN5bmNGaWx0ZXJzLCBleHRlbnNpb25zLCBuYW1lLCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0cyA9IHt9O1xuICAgIH1cbiAgICB2YXIgYyA9IG5ldyBDb21waWxlcihuYW1lLCBvcHRzLnRocm93T25VbmRlZmluZWQpO1xuXG4gICAgLy8gUnVuIHRoZSBleHRlbnNpb24gcHJlcHJvY2Vzc29ycyBhZ2FpbnN0IHRoZSBzb3VyY2UuXG4gICAgdmFyIHByZXByb2Nlc3NvcnMgPSAoZXh0ZW5zaW9ucyB8fCBbXSkubWFwKGZ1bmN0aW9uIChleHQpIHtcbiAgICAgIHJldHVybiBleHQucHJlcHJvY2VzcztcbiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGYpIHtcbiAgICAgIHJldHVybiAhIWY7XG4gICAgfSk7XG4gICAgdmFyIHByb2Nlc3NlZFNyYyA9IHByZXByb2Nlc3NvcnMucmVkdWNlKGZ1bmN0aW9uIChzLCBwcm9jZXNzb3IpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzb3Iocyk7XG4gICAgfSwgc3JjKTtcbiAgICBjLmNvbXBpbGUodHJhbnNmb3JtZXIudHJhbnNmb3JtKHBhcnNlci5wYXJzZShwcm9jZXNzZWRTcmMsIGV4dGVuc2lvbnMsIG9wdHMpLCBhc3luY0ZpbHRlcnMsIG5hbWUpKTtcbiAgICByZXR1cm4gYy5nZXRDb2RlKCk7XG4gIH0sXG4gIENvbXBpbGVyOiBDb21waWxlclxufTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGxpYiA9IHJlcXVpcmUoJy4vbGliJyk7XG52YXIgciA9IHJlcXVpcmUoJy4vcnVudGltZScpO1xudmFyIF9leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuX2V4cG9ydHMuYWJzID0gTWF0aC5hYnM7XG5mdW5jdGlvbiBpc05hTihudW0pIHtcbiAgcmV0dXJuIG51bSAhPT0gbnVtOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG5mdW5jdGlvbiBiYXRjaChhcnIsIGxpbmVjb3VudCwgZmlsbFdpdGgpIHtcbiAgdmFyIGk7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIHRtcCA9IFtdO1xuICBmb3IgKGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgJSBsaW5lY291bnQgPT09IDAgJiYgdG1wLmxlbmd0aCkge1xuICAgICAgcmVzLnB1c2godG1wKTtcbiAgICAgIHRtcCA9IFtdO1xuICAgIH1cbiAgICB0bXAucHVzaChhcnJbaV0pO1xuICB9XG4gIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgaWYgKGZpbGxXaXRoKSB7XG4gICAgICBmb3IgKGkgPSB0bXAubGVuZ3RoOyBpIDwgbGluZWNvdW50OyBpKyspIHtcbiAgICAgICAgdG1wLnB1c2goZmlsbFdpdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXMucHVzaCh0bXApO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5fZXhwb3J0cy5iYXRjaCA9IGJhdGNoO1xuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgc3RyID0gbm9ybWFsaXplKHN0ciwgJycpO1xuICB2YXIgcmV0ID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiByLmNvcHlTYWZlbmVzcyhzdHIsIHJldC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJldC5zbGljZSgxKSk7XG59XG5fZXhwb3J0cy5jYXBpdGFsaXplID0gY2FwaXRhbGl6ZTtcbmZ1bmN0aW9uIGNlbnRlcihzdHIsIHdpZHRoKSB7XG4gIHN0ciA9IG5vcm1hbGl6ZShzdHIsICcnKTtcbiAgd2lkdGggPSB3aWR0aCB8fCA4MDtcbiAgaWYgKHN0ci5sZW5ndGggPj0gd2lkdGgpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhciBzcGFjZXMgPSB3aWR0aCAtIHN0ci5sZW5ndGg7XG4gIHZhciBwcmUgPSBsaWIucmVwZWF0KCcgJywgc3BhY2VzIC8gMiAtIHNwYWNlcyAlIDIpO1xuICB2YXIgcG9zdCA9IGxpYi5yZXBlYXQoJyAnLCBzcGFjZXMgLyAyKTtcbiAgcmV0dXJuIHIuY29weVNhZmVuZXNzKHN0ciwgcHJlICsgc3RyICsgcG9zdCk7XG59XG5fZXhwb3J0cy5jZW50ZXIgPSBjZW50ZXI7XG5mdW5jdGlvbiBkZWZhdWx0Xyh2YWwsIGRlZiwgYm9vbCkge1xuICBpZiAoYm9vbCkge1xuICAgIHJldHVybiB2YWwgfHwgZGVmO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/IHZhbCA6IGRlZjtcbiAgfVxufVxuXG4vLyBUT0RPOiBpdCBpcyBjb25mdXNpbmcgdG8gZXhwb3J0IHNvbWV0aGluZyBjYWxsZWQgJ2RlZmF1bHQnXG5fZXhwb3J0c1snZGVmYXVsdCddID0gZGVmYXVsdF87IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG5cbmZ1bmN0aW9uIGRpY3Rzb3J0KHZhbCwgY2FzZVNlbnNpdGl2ZSwgYnkpIHtcbiAgaWYgKCFsaWIuaXNPYmplY3QodmFsKSkge1xuICAgIHRocm93IG5ldyBsaWIuVGVtcGxhdGVFcnJvcignZGljdHNvcnQgZmlsdGVyOiB2YWwgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuICB2YXIgYXJyYXkgPSBbXTtcbiAgLy8gZGVsaWJlcmF0ZWx5IGluY2x1ZGUgcHJvcGVydGllcyBmcm9tIHRoZSBvYmplY3QncyBwcm90b3R5cGVcbiAgZm9yICh2YXIgayBpbiB2YWwpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICBhcnJheS5wdXNoKFtrLCB2YWxba11dKTtcbiAgfVxuICB2YXIgc2k7XG4gIGlmIChieSA9PT0gdW5kZWZpbmVkIHx8IGJ5ID09PSAna2V5Jykge1xuICAgIHNpID0gMDtcbiAgfSBlbHNlIGlmIChieSA9PT0gJ3ZhbHVlJykge1xuICAgIHNpID0gMTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgbGliLlRlbXBsYXRlRXJyb3IoJ2RpY3Rzb3J0IGZpbHRlcjogWW91IGNhbiBvbmx5IHNvcnQgYnkgZWl0aGVyIGtleSBvciB2YWx1ZScpO1xuICB9XG4gIGFycmF5LnNvcnQoZnVuY3Rpb24gKHQxLCB0Mikge1xuICAgIHZhciBhID0gdDFbc2ldO1xuICAgIHZhciBiID0gdDJbc2ldO1xuICAgIGlmICghY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgaWYgKGxpYi5pc1N0cmluZyhhKSkge1xuICAgICAgICBhID0gYS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGxpYi5pc1N0cmluZyhiKSkge1xuICAgICAgICBiID0gYi50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYSA+IGIgPyAxIDogYSA9PT0gYiA/IDAgOiAtMTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICB9KTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5fZXhwb3J0cy5kaWN0c29ydCA9IGRpY3Rzb3J0O1xuZnVuY3Rpb24gZHVtcChvYmosIHNwYWNlcykge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCBzcGFjZXMpO1xufVxuX2V4cG9ydHMuZHVtcCA9IGR1bXA7XG5mdW5jdGlvbiBlc2NhcGUoc3RyKSB7XG4gIGlmIChzdHIgaW5zdGFuY2VvZiByLlNhZmVTdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0ciA9IHN0ciA9PT0gbnVsbCB8fCBzdHIgPT09IHVuZGVmaW5lZCA/ICcnIDogc3RyO1xuICByZXR1cm4gci5tYXJrU2FmZShsaWIuZXNjYXBlKHN0ci50b1N0cmluZygpKSk7XG59XG5fZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5mdW5jdGlvbiBzYWZlKHN0cikge1xuICBpZiAoc3RyIGluc3RhbmNlb2Ygci5TYWZlU3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHIgPSBzdHIgPT09IG51bGwgfHwgc3RyID09PSB1bmRlZmluZWQgPyAnJyA6IHN0cjtcbiAgcmV0dXJuIHIubWFya1NhZmUoc3RyLnRvU3RyaW5nKCkpO1xufVxuX2V4cG9ydHMuc2FmZSA9IHNhZmU7XG5mdW5jdGlvbiBmaXJzdChhcnIpIHtcbiAgcmV0dXJuIGFyclswXTtcbn1cbl9leHBvcnRzLmZpcnN0ID0gZmlyc3Q7XG5mdW5jdGlvbiBmb3JjZWVzY2FwZShzdHIpIHtcbiAgc3RyID0gc3RyID09PSBudWxsIHx8IHN0ciA9PT0gdW5kZWZpbmVkID8gJycgOiBzdHI7XG4gIHJldHVybiByLm1hcmtTYWZlKGxpYi5lc2NhcGUoc3RyLnRvU3RyaW5nKCkpKTtcbn1cbl9leHBvcnRzLmZvcmNlZXNjYXBlID0gZm9yY2Vlc2NhcGU7XG5mdW5jdGlvbiBncm91cGJ5KGFyciwgYXR0cikge1xuICByZXR1cm4gbGliLmdyb3VwQnkoYXJyLCBhdHRyLCB0aGlzLmVudi5vcHRzLnRocm93T25VbmRlZmluZWQpO1xufVxuX2V4cG9ydHMuZ3JvdXBieSA9IGdyb3VwYnk7XG5mdW5jdGlvbiBpbmRlbnQoc3RyLCB3aWR0aCwgaW5kZW50Zmlyc3QpIHtcbiAgc3RyID0gbm9ybWFsaXplKHN0ciwgJycpO1xuICBpZiAoc3RyID09PSAnJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICB3aWR0aCA9IHdpZHRoIHx8IDQ7XG4gIC8vIGxldCByZXMgPSAnJztcbiAgdmFyIGxpbmVzID0gc3RyLnNwbGl0KCdcXG4nKTtcbiAgdmFyIHNwID0gbGliLnJlcGVhdCgnICcsIHdpZHRoKTtcbiAgdmFyIHJlcyA9IGxpbmVzLm1hcChmdW5jdGlvbiAobCwgaSkge1xuICAgIHJldHVybiBpID09PSAwICYmICFpbmRlbnRmaXJzdCA/IGwgOiBcIlwiICsgc3AgKyBsO1xuICB9KS5qb2luKCdcXG4nKTtcbiAgcmV0dXJuIHIuY29weVNhZmVuZXNzKHN0ciwgcmVzKTtcbn1cbl9leHBvcnRzLmluZGVudCA9IGluZGVudDtcbmZ1bmN0aW9uIGpvaW4oYXJyLCBkZWwsIGF0dHIpIHtcbiAgZGVsID0gZGVsIHx8ICcnO1xuICBpZiAoYXR0cikge1xuICAgIGFyciA9IGxpYi5tYXAoYXJyLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHZbYXR0cl07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFyci5qb2luKGRlbCk7XG59XG5fZXhwb3J0cy5qb2luID0gam9pbjtcbmZ1bmN0aW9uIGxhc3QoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuX2V4cG9ydHMubGFzdCA9IGxhc3Q7XG5mdW5jdGlvbiBsZW5ndGhGaWx0ZXIodmFsKSB7XG4gIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZSh2YWwsICcnKTtcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAvLyBFQ01BU2NyaXB0IDIwMTUgTWFwcyBhbmQgU2V0c1xuICAgICAgcmV0dXJuIHZhbHVlLnNpemU7XG4gICAgfVxuICAgIGlmIChsaWIuaXNPYmplY3QodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiByLlNhZmVTdHJpbmcpKSB7XG4gICAgICAvLyBPYmplY3RzIChiZXNpZGVzIFNhZmVTdHJpbmdzKSwgbm9uLXByaW1hdGl2ZSBBcnJheXNcbiAgICAgIHJldHVybiBsaWIua2V5cyh2YWx1ZSkubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufVxuX2V4cG9ydHMubGVuZ3RoID0gbGVuZ3RoRmlsdGVyO1xuZnVuY3Rpb24gbGlzdCh2YWwpIHtcbiAgaWYgKGxpYi5pc1N0cmluZyh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbC5zcGxpdCgnJyk7XG4gIH0gZWxzZSBpZiAobGliLmlzT2JqZWN0KHZhbCkpIHtcbiAgICByZXR1cm4gbGliLl9lbnRyaWVzKHZhbCB8fCB7fSkubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIga2V5ID0gX3JlZlswXSxcbiAgICAgICAgdmFsdWUgPSBfcmVmWzFdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChsaWIuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgbGliLlRlbXBsYXRlRXJyb3IoJ2xpc3QgZmlsdGVyOiB0eXBlIG5vdCBpdGVyYWJsZScpO1xuICB9XG59XG5fZXhwb3J0cy5saXN0ID0gbGlzdDtcbmZ1bmN0aW9uIGxvd2VyKHN0cikge1xuICBzdHIgPSBub3JtYWxpemUoc3RyLCAnJyk7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn1cbl9leHBvcnRzLmxvd2VyID0gbG93ZXI7XG5mdW5jdGlvbiBubDJicihzdHIpIHtcbiAgaWYgKHN0ciA9PT0gbnVsbCB8fCBzdHIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gci5jb3B5U2FmZW5lc3Moc3RyLCBzdHIucmVwbGFjZSgvXFxyXFxufFxcbi9nLCAnPGJyIC8+XFxuJykpO1xufVxuX2V4cG9ydHMubmwyYnIgPSBubDJicjtcbmZ1bmN0aW9uIHJhbmRvbShhcnIpIHtcbiAgcmV0dXJuIGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XG59XG5fZXhwb3J0cy5yYW5kb20gPSByYW5kb207XG5cbi8qKlxuICogQ29uc3RydWN0IHNlbGVjdCBvciByZWplY3QgZmlsdGVyXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBleHBlY3RlZFRlc3RSZXN1bHRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihhcnJheSwgc3RyaW5nLCAqKTogYXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdE9yUmVqZWN0KGV4cGVjdGVkVGVzdFJlc3VsdCkge1xuICBmdW5jdGlvbiBmaWx0ZXIoYXJyLCB0ZXN0TmFtZSwgc2Vjb25kQXJnKSB7XG4gICAgaWYgKHRlc3ROYW1lID09PSB2b2lkIDApIHtcbiAgICAgIHRlc3ROYW1lID0gJ3RydXRoeSc7XG4gICAgfVxuICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICB2YXIgdGVzdCA9IGNvbnRleHQuZW52LmdldFRlc3QodGVzdE5hbWUpO1xuICAgIHJldHVybiBsaWIudG9BcnJheShhcnIpLmZpbHRlcihmdW5jdGlvbiBleGFtaW5lVGVzdFJlc3VsdChpdGVtKSB7XG4gICAgICByZXR1cm4gdGVzdC5jYWxsKGNvbnRleHQsIGl0ZW0sIHNlY29uZEFyZykgPT09IGV4cGVjdGVkVGVzdFJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZmlsdGVyO1xufVxuX2V4cG9ydHMucmVqZWN0ID0gZ2V0U2VsZWN0T3JSZWplY3QoZmFsc2UpO1xuZnVuY3Rpb24gcmVqZWN0YXR0cihhcnIsIGF0dHIpIHtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gIWl0ZW1bYXR0cl07XG4gIH0pO1xufVxuX2V4cG9ydHMucmVqZWN0YXR0ciA9IHJlamVjdGF0dHI7XG5fZXhwb3J0cy5zZWxlY3QgPSBnZXRTZWxlY3RPclJlamVjdCh0cnVlKTtcbmZ1bmN0aW9uIHNlbGVjdGF0dHIoYXJyLCBhdHRyKSB7XG4gIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuICEhaXRlbVthdHRyXTtcbiAgfSk7XG59XG5fZXhwb3J0cy5zZWxlY3RhdHRyID0gc2VsZWN0YXR0cjtcbmZ1bmN0aW9uIHJlcGxhY2Uoc3RyLCBvbGQsIG5ld18sIG1heENvdW50KSB7XG4gIHZhciBvcmlnaW5hbFN0ciA9IHN0cjtcbiAgaWYgKG9sZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShvbGQsIG5ld18pO1xuICB9XG4gIGlmICh0eXBlb2YgbWF4Q291bnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWF4Q291bnQgPSAtMTtcbiAgfVxuICB2YXIgcmVzID0gJyc7IC8vIE91dHB1dFxuXG4gIC8vIENhc3QgTnVtYmVycyBpbiB0aGUgc2VhcmNoIHRlcm0gdG8gc3RyaW5nXG4gIGlmICh0eXBlb2Ygb2xkID09PSAnbnVtYmVyJykge1xuICAgIG9sZCA9ICcnICsgb2xkO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvbGQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gSWYgaXQgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4gbnVtYmVyIG9yIHN0cmluZyxcbiAgICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvLyBDYXN0IG51bWJlcnMgaW4gdGhlIHJlcGxhY2VtZW50IHRvIHN0cmluZ1xuICBpZiAodHlwZW9mIHN0ciA9PT0gJ251bWJlcicpIHtcbiAgICBzdHIgPSAnJyArIHN0cjtcbiAgfVxuXG4gIC8vIElmIGJ5IG5vdywgd2UgZG9uJ3QgaGF2ZSBhIHN0cmluZywgdGhyb3cgaXQgYmFja1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgJiYgIShzdHIgaW5zdGFuY2VvZiByLlNhZmVTdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8vIFNob3J0Q2lyY3VpdHNcbiAgaWYgKG9sZCA9PT0gJycpIHtcbiAgICAvLyBNaW1pYyB0aGUgcHl0aG9uIGJlaGF2aW91cjogZW1wdHkgc3RyaW5nIGlzIHJlcGxhY2VkXG4gICAgLy8gYnkgcmVwbGFjZW1lbnQgZS5nLiBcImFiY1wifHJlcGxhY2UoXCJcIiwgXCIuXCIpIC0+IC5hLmIuYy5cbiAgICByZXMgPSBuZXdfICsgc3RyLnNwbGl0KCcnKS5qb2luKG5ld18pICsgbmV3XztcbiAgICByZXR1cm4gci5jb3B5U2FmZW5lc3Moc3RyLCByZXMpO1xuICB9XG4gIHZhciBuZXh0SW5kZXggPSBzdHIuaW5kZXhPZihvbGQpO1xuICAvLyBpZiAjIG9mIHJlcGxhY2VtZW50cyB0byBwZXJmb3JtIGlzIDAsIG9yIHRoZSBzdHJpbmcgdG8gZG9lc1xuICAvLyBub3QgY29udGFpbiB0aGUgb2xkIHZhbHVlLCByZXR1cm4gdGhlIHN0cmluZ1xuICBpZiAobWF4Q291bnQgPT09IDAgfHwgbmV4dEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgdmFyIHBvcyA9IDA7XG4gIHZhciBjb3VudCA9IDA7IC8vICMgb2YgcmVwbGFjZW1lbnRzIG1hZGVcblxuICB3aGlsZSAobmV4dEluZGV4ID4gLTEgJiYgKG1heENvdW50ID09PSAtMSB8fCBjb3VudCA8IG1heENvdW50KSkge1xuICAgIC8vIEdyYWIgdGhlIG5leHQgY2h1bmsgb2Ygc3JjIHN0cmluZyBhbmQgYWRkIGl0IHdpdGggdGhlXG4gICAgLy8gcmVwbGFjZW1lbnQsIHRvIHRoZSByZXN1bHRcbiAgICByZXMgKz0gc3RyLnN1YnN0cmluZyhwb3MsIG5leHRJbmRleCkgKyBuZXdfO1xuICAgIC8vIEluY3JlbWVudCBvdXIgcG9pbnRlciBpbiB0aGUgc3JjIHN0cmluZ1xuICAgIHBvcyA9IG5leHRJbmRleCArIG9sZC5sZW5ndGg7XG4gICAgY291bnQrKztcbiAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFueSBtb3JlIHJlcGxhY2VtZW50cyB0byBiZSBtYWRlXG4gICAgbmV4dEluZGV4ID0gc3RyLmluZGV4T2Yob2xkLCBwb3MpO1xuICB9XG5cbiAgLy8gV2UndmUgZWl0aGVyIHJlYWNoZWQgdGhlIGVuZCwgb3IgZG9uZSB0aGUgbWF4ICMgb2ZcbiAgLy8gcmVwbGFjZW1lbnRzLCB0YWNrIG9uIGFueSByZW1haW5pbmcgc3RyaW5nXG4gIGlmIChwb3MgPCBzdHIubGVuZ3RoKSB7XG4gICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocG9zKTtcbiAgfVxuICByZXR1cm4gci5jb3B5U2FmZW5lc3Mob3JpZ2luYWxTdHIsIHJlcyk7XG59XG5fZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcbmZ1bmN0aW9uIHJldmVyc2UodmFsKSB7XG4gIHZhciBhcnI7XG4gIGlmIChsaWIuaXNTdHJpbmcodmFsKSkge1xuICAgIGFyciA9IGxpc3QodmFsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb3B5IGl0XG4gICAgYXJyID0gbGliLm1hcCh2YWwsIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gdjtcbiAgICB9KTtcbiAgfVxuICBhcnIucmV2ZXJzZSgpO1xuICBpZiAobGliLmlzU3RyaW5nKHZhbCkpIHtcbiAgICByZXR1cm4gci5jb3B5U2FmZW5lc3ModmFsLCBhcnIuam9pbignJykpO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5fZXhwb3J0cy5yZXZlcnNlID0gcmV2ZXJzZTtcbmZ1bmN0aW9uIHJvdW5kKHZhbCwgcHJlY2lzaW9uLCBtZXRob2QpIHtcbiAgcHJlY2lzaW9uID0gcHJlY2lzaW9uIHx8IDA7XG4gIHZhciBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgdmFyIHJvdW5kZXI7XG4gIGlmIChtZXRob2QgPT09ICdjZWlsJykge1xuICAgIHJvdW5kZXIgPSBNYXRoLmNlaWw7XG4gIH0gZWxzZSBpZiAobWV0aG9kID09PSAnZmxvb3InKSB7XG4gICAgcm91bmRlciA9IE1hdGguZmxvb3I7XG4gIH0gZWxzZSB7XG4gICAgcm91bmRlciA9IE1hdGgucm91bmQ7XG4gIH1cbiAgcmV0dXJuIHJvdW5kZXIodmFsICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cbl9leHBvcnRzLnJvdW5kID0gcm91bmQ7XG5mdW5jdGlvbiBzbGljZShhcnIsIHNsaWNlcywgZmlsbFdpdGgpIHtcbiAgdmFyIHNsaWNlTGVuZ3RoID0gTWF0aC5mbG9vcihhcnIubGVuZ3RoIC8gc2xpY2VzKTtcbiAgdmFyIGV4dHJhID0gYXJyLmxlbmd0aCAlIHNsaWNlcztcbiAgdmFyIHJlcyA9IFtdO1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZXM7IGkrKykge1xuICAgIHZhciBzdGFydCA9IG9mZnNldCArIGkgKiBzbGljZUxlbmd0aDtcbiAgICBpZiAoaSA8IGV4dHJhKSB7XG4gICAgICBvZmZzZXQrKztcbiAgICB9XG4gICAgdmFyIGVuZCA9IG9mZnNldCArIChpICsgMSkgKiBzbGljZUxlbmd0aDtcbiAgICB2YXIgY3VyclNsaWNlID0gYXJyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIGlmIChmaWxsV2l0aCAmJiBpID49IGV4dHJhKSB7XG4gICAgICBjdXJyU2xpY2UucHVzaChmaWxsV2l0aCk7XG4gICAgfVxuICAgIHJlcy5wdXNoKGN1cnJTbGljZSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbl9leHBvcnRzLnNsaWNlID0gc2xpY2U7XG5mdW5jdGlvbiBzdW0oYXJyLCBhdHRyLCBzdGFydCkge1xuICBpZiAoc3RhcnQgPT09IHZvaWQgMCkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuICBpZiAoYXR0cikge1xuICAgIGFyciA9IGxpYi5tYXAoYXJyLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHZbYXR0cl07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXJ0ICsgYXJyLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhICsgYjtcbiAgfSwgMCk7XG59XG5fZXhwb3J0cy5zdW0gPSBzdW07XG5fZXhwb3J0cy5zb3J0ID0gci5tYWtlTWFjcm8oWyd2YWx1ZScsICdyZXZlcnNlJywgJ2Nhc2Vfc2Vuc2l0aXZlJywgJ2F0dHJpYnV0ZSddLCBbXSwgZnVuY3Rpb24gc29ydEZpbHRlcihhcnIsIHJldmVyc2VkLCBjYXNlU2VucywgYXR0cikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICAvLyBDb3B5IGl0XG4gIHZhciBhcnJheSA9IGxpYi5tYXAoYXJyLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB2O1xuICB9KTtcbiAgdmFyIGdldEF0dHJpYnV0ZSA9IGxpYi5nZXRBdHRyR2V0dGVyKGF0dHIpO1xuICBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIHggPSBhdHRyID8gZ2V0QXR0cmlidXRlKGEpIDogYTtcbiAgICB2YXIgeSA9IGF0dHIgPyBnZXRBdHRyaWJ1dGUoYikgOiBiO1xuICAgIGlmIChfdGhpcy5lbnYub3B0cy50aHJvd09uVW5kZWZpbmVkICYmIGF0dHIgJiYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic29ydDogYXR0cmlidXRlIFxcXCJcIiArIGF0dHIgKyBcIlxcXCIgcmVzb2x2ZWQgdG8gdW5kZWZpbmVkXCIpO1xuICAgIH1cbiAgICBpZiAoIWNhc2VTZW5zICYmIGxpYi5pc1N0cmluZyh4KSAmJiBsaWIuaXNTdHJpbmcoeSkpIHtcbiAgICAgIHggPSB4LnRvTG93ZXJDYXNlKCk7XG4gICAgICB5ID0geS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoeCA8IHkpIHtcbiAgICAgIHJldHVybiByZXZlcnNlZCA/IDEgOiAtMTtcbiAgICB9IGVsc2UgaWYgKHggPiB5KSB7XG4gICAgICByZXR1cm4gcmV2ZXJzZWQgPyAtMSA6IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhcnJheTtcbn0pO1xuZnVuY3Rpb24gc3RyaW5nKG9iaikge1xuICByZXR1cm4gci5jb3B5U2FmZW5lc3Mob2JqLCBvYmopO1xufVxuX2V4cG9ydHMuc3RyaW5nID0gc3RyaW5nO1xuZnVuY3Rpb24gc3RyaXB0YWdzKGlucHV0LCBwcmVzZXJ2ZUxpbmVicmVha3MpIHtcbiAgaW5wdXQgPSBub3JtYWxpemUoaW5wdXQsICcnKTtcbiAgdmFyIHRhZ3MgPSAvPFxcLz8oW2Etel1bYS16MC05XSopXFxiW14+XSo+fDwhLS1bXFxzXFxTXSo/LS0+L2dpO1xuICB2YXIgdHJpbW1lZElucHV0ID0gdHJpbShpbnB1dC5yZXBsYWNlKHRhZ3MsICcnKSk7XG4gIHZhciByZXMgPSAnJztcbiAgaWYgKHByZXNlcnZlTGluZWJyZWFrcykge1xuICAgIHJlcyA9IHRyaW1tZWRJbnB1dC5yZXBsYWNlKC9eICt8ICskL2dtLCAnJykgLy8gcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlc1xuICAgIC5yZXBsYWNlKC8gKy9nLCAnICcpIC8vIHNxdWFzaCBhZGphY2VudCBzcGFjZXNcbiAgICAucmVwbGFjZSgvKFxcclxcbikvZywgJ1xcbicpIC8vIG5vcm1hbGl6ZSBsaW5lYnJlYWtzIChDUkxGIC0+IExGKVxuICAgIC5yZXBsYWNlKC9cXG5cXG5cXG4rL2csICdcXG5cXG4nKTsgLy8gc3F1YXNoIGFibm9ybWFsIGFkamFjZW50IGxpbmVicmVha3NcbiAgfSBlbHNlIHtcbiAgICByZXMgPSB0cmltbWVkSW5wdXQucmVwbGFjZSgvXFxzKy9naSwgJyAnKTtcbiAgfVxuICByZXR1cm4gci5jb3B5U2FmZW5lc3MoaW5wdXQsIHJlcyk7XG59XG5fZXhwb3J0cy5zdHJpcHRhZ3MgPSBzdHJpcHRhZ3M7XG5mdW5jdGlvbiB0aXRsZShzdHIpIHtcbiAgc3RyID0gbm9ybWFsaXplKHN0ciwgJycpO1xuICB2YXIgd29yZHMgPSBzdHIuc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24gKHdvcmQpIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZSh3b3JkKTtcbiAgfSk7XG4gIHJldHVybiByLmNvcHlTYWZlbmVzcyhzdHIsIHdvcmRzLmpvaW4oJyAnKSk7XG59XG5fZXhwb3J0cy50aXRsZSA9IHRpdGxlO1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHIuY29weVNhZmVuZXNzKHN0ciwgc3RyLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKSk7XG59XG5fZXhwb3J0cy50cmltID0gdHJpbTtcbmZ1bmN0aW9uIHRydW5jYXRlKGlucHV0LCBsZW5ndGgsIGtpbGx3b3JkcywgZW5kKSB7XG4gIHZhciBvcmlnID0gaW5wdXQ7XG4gIGlucHV0ID0gbm9ybWFsaXplKGlucHV0LCAnJyk7XG4gIGxlbmd0aCA9IGxlbmd0aCB8fCAyNTU7XG4gIGlmIChpbnB1dC5sZW5ndGggPD0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmIChraWxsd29yZHMpIHtcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpZHggPSBpbnB1dC5sYXN0SW5kZXhPZignICcsIGxlbmd0aCk7XG4gICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgIGlkeCA9IGxlbmd0aDtcbiAgICB9XG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgfVxuICBpbnB1dCArPSBlbmQgIT09IHVuZGVmaW5lZCAmJiBlbmQgIT09IG51bGwgPyBlbmQgOiAnLi4uJztcbiAgcmV0dXJuIHIuY29weVNhZmVuZXNzKG9yaWcsIGlucHV0KTtcbn1cbl9leHBvcnRzLnRydW5jYXRlID0gdHJ1bmNhdGU7XG5mdW5jdGlvbiB1cHBlcihzdHIpIHtcbiAgc3RyID0gbm9ybWFsaXplKHN0ciwgJycpO1xuICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG5fZXhwb3J0cy51cHBlciA9IHVwcGVyO1xuZnVuY3Rpb24gdXJsZW5jb2RlKG9iaikge1xuICB2YXIgZW5jID0gZW5jb2RlVVJJQ29tcG9uZW50O1xuICBpZiAobGliLmlzU3RyaW5nKG9iaikpIHtcbiAgICByZXR1cm4gZW5jKG9iaik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGtleXZhbHMgPSBsaWIuaXNBcnJheShvYmopID8gb2JqIDogbGliLl9lbnRyaWVzKG9iaik7XG4gICAgcmV0dXJuIGtleXZhbHMubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIGsgPSBfcmVmMlswXSxcbiAgICAgICAgdiA9IF9yZWYyWzFdO1xuICAgICAgcmV0dXJuIGVuYyhrKSArIFwiPVwiICsgZW5jKHYpO1xuICAgIH0pLmpvaW4oJyYnKTtcbiAgfVxufVxuX2V4cG9ydHMudXJsZW5jb2RlID0gdXJsZW5jb2RlO1xuXG4vLyBGb3IgdGhlIGppbmphIHJlZ2V4cCwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWl0c3VoaWtvL2ppbmphMi9ibG9iL2YxNWI4MTRkY2JhNmFhMTJiYzc0ZDFmN2QwYzg4MWQ1NWY3MTI2YmUvamluamEyL3V0aWxzLnB5I0wyMC1MMjNcbnZhciBwdW5jUmUgPSAvXig/OlxcKHw8fCZsdDspPyguKj8pKD86XFwufCx8XFwpfFxcbnwmZ3Q7KT8kLztcbi8vIGZyb20gaHR0cDovL2Jsb2cuZ2Vydi5uZXQvMjAxMS8wNS9odG1sNV9lbWFpbF9hZGRyZXNzX3JlZ2V4cC9cbnZhciBlbWFpbFJlID0gL15bXFx3LiEjJCUmJyorXFwtXFwvPT9cXF5ge3x9fl0rQFthLXpcXGRcXC1dKyhcXC5bYS16XFxkXFwtXSspKyQvaTtcbnZhciBodHRwSHR0cHNSZSA9IC9eaHR0cHM/OlxcL1xcLy4qJC87XG52YXIgd3d3UmUgPSAvXnd3d1xcLi87XG52YXIgdGxkUmUgPSAvXFwuKD86b3JnfG5ldHxjb20pKD86XFw6fFxcL3wkKS87XG5mdW5jdGlvbiB1cmxpemUoc3RyLCBsZW5ndGgsIG5vZm9sbG93KSB7XG4gIGlmIChpc05hTihsZW5ndGgpKSB7XG4gICAgbGVuZ3RoID0gSW5maW5pdHk7XG4gIH1cbiAgdmFyIG5vRm9sbG93QXR0ciA9IG5vZm9sbG93ID09PSB0cnVlID8gJyByZWw9XCJub2ZvbGxvd1wiJyA6ICcnO1xuICB2YXIgd29yZHMgPSBzdHIuc3BsaXQoLyhcXHMrKS8pLmZpbHRlcihmdW5jdGlvbiAod29yZCkge1xuICAgIC8vIElmIHRoZSB3b3JkIGhhcyBubyBsZW5ndGgsIGJhaWwuIFRoaXMgY2FuIGhhcHBlbiBmb3Igc3RyIHdpdGhcbiAgICAvLyB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICAgIHJldHVybiB3b3JkICYmIHdvcmQubGVuZ3RoO1xuICB9KS5tYXAoZnVuY3Rpb24gKHdvcmQpIHtcbiAgICB2YXIgbWF0Y2hlcyA9IHdvcmQubWF0Y2gocHVuY1JlKTtcbiAgICB2YXIgcG9zc2libGVVcmwgPSBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6IHdvcmQ7XG4gICAgdmFyIHNob3J0VXJsID0gcG9zc2libGVVcmwuc3Vic3RyKDAsIGxlbmd0aCk7XG5cbiAgICAvLyB1cmwgdGhhdCBzdGFydHMgd2l0aCBodHRwIG9yIGh0dHBzXG4gICAgaWYgKGh0dHBIdHRwc1JlLnRlc3QocG9zc2libGVVcmwpKSB7XG4gICAgICByZXR1cm4gXCI8YSBocmVmPVxcXCJcIiArIHBvc3NpYmxlVXJsICsgXCJcXFwiXCIgKyBub0ZvbGxvd0F0dHIgKyBcIj5cIiArIHNob3J0VXJsICsgXCI8L2E+XCI7XG4gICAgfVxuXG4gICAgLy8gdXJsIHRoYXQgc3RhcnRzIHdpdGggd3d3LlxuICAgIGlmICh3d3dSZS50ZXN0KHBvc3NpYmxlVXJsKSkge1xuICAgICAgcmV0dXJuIFwiPGEgaHJlZj1cXFwiaHR0cDovL1wiICsgcG9zc2libGVVcmwgKyBcIlxcXCJcIiArIG5vRm9sbG93QXR0ciArIFwiPlwiICsgc2hvcnRVcmwgKyBcIjwvYT5cIjtcbiAgICB9XG5cbiAgICAvLyBhbiBlbWFpbCBhZGRyZXNzIG9mIHRoZSBmb3JtIHVzZXJuYW1lQGRvbWFpbi50bGRcbiAgICBpZiAoZW1haWxSZS50ZXN0KHBvc3NpYmxlVXJsKSkge1xuICAgICAgcmV0dXJuIFwiPGEgaHJlZj1cXFwibWFpbHRvOlwiICsgcG9zc2libGVVcmwgKyBcIlxcXCI+XCIgKyBwb3NzaWJsZVVybCArIFwiPC9hPlwiO1xuICAgIH1cblxuICAgIC8vIHVybCB0aGF0IGVuZHMgaW4gLmNvbSwgLm9yZyBvciAubmV0IHRoYXQgaXMgbm90IGFuIGVtYWlsIGFkZHJlc3NcbiAgICBpZiAodGxkUmUudGVzdChwb3NzaWJsZVVybCkpIHtcbiAgICAgIHJldHVybiBcIjxhIGhyZWY9XFxcImh0dHA6Ly9cIiArIHBvc3NpYmxlVXJsICsgXCJcXFwiXCIgKyBub0ZvbGxvd0F0dHIgKyBcIj5cIiArIHNob3J0VXJsICsgXCI8L2E+XCI7XG4gICAgfVxuICAgIHJldHVybiB3b3JkO1xuICB9KTtcbiAgcmV0dXJuIHdvcmRzLmpvaW4oJycpO1xufVxuX2V4cG9ydHMudXJsaXplID0gdXJsaXplO1xuZnVuY3Rpb24gd29yZGNvdW50KHN0cikge1xuICBzdHIgPSBub3JtYWxpemUoc3RyLCAnJyk7XG4gIHZhciB3b3JkcyA9IHN0ciA/IHN0ci5tYXRjaCgvXFx3Ky9nKSA6IG51bGw7XG4gIHJldHVybiB3b3JkcyA/IHdvcmRzLmxlbmd0aCA6IG51bGw7XG59XG5fZXhwb3J0cy53b3JkY291bnQgPSB3b3JkY291bnQ7XG5mdW5jdGlvbiBmbG9hdCh2YWwsIGRlZikge1xuICB2YXIgcmVzID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gaXNOYU4ocmVzKSA/IGRlZiA6IHJlcztcbn1cbl9leHBvcnRzLmZsb2F0ID0gZmxvYXQ7XG52YXIgaW50RmlsdGVyID0gci5tYWtlTWFjcm8oWyd2YWx1ZScsICdkZWZhdWx0JywgJ2Jhc2UnXSwgW10sIGZ1bmN0aW9uIGRvSW50KHZhbHVlLCBkZWZhdWx0VmFsdWUsIGJhc2UpIHtcbiAgaWYgKGJhc2UgPT09IHZvaWQgMCkge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuICB2YXIgcmVzID0gcGFyc2VJbnQodmFsdWUsIGJhc2UpO1xuICByZXR1cm4gaXNOYU4ocmVzKSA/IGRlZmF1bHRWYWx1ZSA6IHJlcztcbn0pO1xuX2V4cG9ydHMuaW50ID0gaW50RmlsdGVyO1xuXG4vLyBBbGlhc2VzXG5fZXhwb3J0cy5kID0gX2V4cG9ydHMuZGVmYXVsdDtcbl9leHBvcnRzLmUgPSBfZXhwb3J0cy5lc2NhcGU7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9vYmplY3QnKSxcbiAgRW1pdHRlck9iaiA9IF9yZXF1aXJlLkVtaXR0ZXJPYmo7XG5tb2R1bGUuZXhwb3J0cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0VtaXR0ZXJPYmopIHtcbiAgX2luaGVyaXRzTG9vc2UoTG9hZGVyLCBfRW1pdHRlck9iaik7XG4gIGZ1bmN0aW9uIExvYWRlcigpIHtcbiAgICByZXR1cm4gX0VtaXR0ZXJPYmouYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG4gIHZhciBfcHJvdG8gPSBMb2FkZXIucHJvdG90eXBlO1xuICBfcHJvdG8ucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoZnJvbSwgdG8pIHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShmcm9tKSwgdG8pO1xuICB9O1xuICBfcHJvdG8uaXNSZWxhdGl2ZSA9IGZ1bmN0aW9uIGlzUmVsYXRpdmUoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gZmlsZW5hbWUuaW5kZXhPZignLi8nKSA9PT0gMCB8fCBmaWxlbmFtZS5pbmRleE9mKCcuLi8nKSA9PT0gMDtcbiAgfTtcbiAgcmV0dXJuIExvYWRlcjtcbn0oRW1pdHRlck9iaik7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cbnZhciBMb2FkZXIgPSByZXF1aXJlKCcuL2xvYWRlcicpO1xudmFyIFByZWNvbXBpbGVkTG9hZGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTG9hZGVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFByZWNvbXBpbGVkTG9hZGVyLCBfTG9hZGVyKTtcbiAgZnVuY3Rpb24gUHJlY29tcGlsZWRMb2FkZXIoY29tcGlsZWRUZW1wbGF0ZXMpIHtcbiAgICB2YXIgX3RoaXM7XG4gICAgX3RoaXMgPSBfTG9hZGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVjb21waWxlZCA9IGNvbXBpbGVkVGVtcGxhdGVzIHx8IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICB2YXIgX3Byb3RvID0gUHJlY29tcGlsZWRMb2FkZXIucHJvdG90eXBlO1xuICBfcHJvdG8uZ2V0U291cmNlID0gZnVuY3Rpb24gZ2V0U291cmNlKG5hbWUpIHtcbiAgICBpZiAodGhpcy5wcmVjb21waWxlZFtuYW1lXSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3JjOiB7XG4gICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgIG9iajogdGhpcy5wcmVjb21waWxlZFtuYW1lXVxuICAgICAgICB9LFxuICAgICAgICBwYXRoOiBuYW1lXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIFByZWNvbXBpbGVkTG9hZGVyO1xufShMb2FkZXIpO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByZWNvbXBpbGVkTG9hZGVyOiBQcmVjb21waWxlZExvYWRlclxufTsiLAogICAgIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTsgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7IF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgTG9hZGVyID0gcmVxdWlyZSgnLi9sb2FkZXInKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vcHJlY29tcGlsZWQtbG9hZGVyLmpzJyksXG4gIFByZWNvbXBpbGVkTG9hZGVyID0gX3JlcXVpcmUuUHJlY29tcGlsZWRMb2FkZXI7XG52YXIgY2hva2lkYXI7XG52YXIgRmlsZVN5c3RlbUxvYWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0xvYWRlcikge1xuICBfaW5oZXJpdHNMb29zZShGaWxlU3lzdGVtTG9hZGVyLCBfTG9hZGVyKTtcbiAgZnVuY3Rpb24gRmlsZVN5c3RlbUxvYWRlcihzZWFyY2hQYXRocywgb3B0cykge1xuICAgIHZhciBfdGhpcztcbiAgICBfdGhpcyA9IF9Mb2FkZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zb2xlLmxvZygnW251bmp1Y2tzXSBXYXJuaW5nOiB5b3UgcGFzc2VkIGEgYm9vbGVhbiBhcyB0aGUgc2Vjb25kICcgKyAnYXJndW1lbnQgdG8gRmlsZVN5c3RlbUxvYWRlciwgYnV0IGl0IG5vdyB0YWtlcyBhbiBvcHRpb25zICcgKyAnb2JqZWN0LiBTZWUgaHR0cDovL21vemlsbGEuZ2l0aHViLmlvL251bmp1Y2tzL2FwaS5odG1sI2ZpbGVzeXN0ZW1sb2FkZXInKTtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgX3RoaXMucGF0aHNUb05hbWVzID0ge307XG4gICAgX3RoaXMubm9DYWNoZSA9ICEhb3B0cy5ub0NhY2hlO1xuICAgIGlmIChzZWFyY2hQYXRocykge1xuICAgICAgc2VhcmNoUGF0aHMgPSBBcnJheS5pc0FycmF5KHNlYXJjaFBhdGhzKSA/IHNlYXJjaFBhdGhzIDogW3NlYXJjaFBhdGhzXTtcbiAgICAgIC8vIEZvciB3aW5kb3dzLCBjb252ZXJ0IHRvIGZvcndhcmQgc2xhc2hlc1xuICAgICAgX3RoaXMuc2VhcmNoUGF0aHMgPSBzZWFyY2hQYXRocy5tYXAocGF0aC5ub3JtYWxpemUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdGhpcy5zZWFyY2hQYXRocyA9IFsnLiddO1xuICAgIH1cbiAgICBpZiAob3B0cy53YXRjaCkge1xuICAgICAgLy8gV2F0Y2ggYWxsIHRoZSB0ZW1wbGF0ZXMgaW4gdGhlIHBhdGhzIGFuZCBmaXJlIGFuIGV2ZW50IHdoZW5cbiAgICAgIC8vIHRoZXkgY2hhbmdlXG4gICAgICB0cnkge1xuICAgICAgICBjaG9raWRhciA9IHJlcXVpcmUoJ2Nob2tpZGFyJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3YXRjaCByZXF1aXJlcyBjaG9raWRhciB0byBiZSBpbnN0YWxsZWQnKTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXRocyA9IF90aGlzLnNlYXJjaFBhdGhzLmZpbHRlcihmcy5leGlzdHNTeW5jKTtcbiAgICAgIHZhciB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2gocGF0aHMpO1xuICAgICAgd2F0Y2hlci5vbignYWxsJywgZnVuY3Rpb24gKGV2ZW50LCBmdWxsbmFtZSkge1xuICAgICAgICBmdWxsbmFtZSA9IHBhdGgucmVzb2x2ZShmdWxsbmFtZSk7XG4gICAgICAgIGlmIChldmVudCA9PT0gJ2NoYW5nZScgJiYgZnVsbG5hbWUgaW4gX3RoaXMucGF0aHNUb05hbWVzKSB7XG4gICAgICAgICAgX3RoaXMuZW1pdCgndXBkYXRlJywgX3RoaXMucGF0aHNUb05hbWVzW2Z1bGxuYW1lXSwgZnVsbG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHdhdGNoZXIub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdXYXRjaGVyIGVycm9yOiAnICsgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICB2YXIgX3Byb3RvID0gRmlsZVN5c3RlbUxvYWRlci5wcm90b3R5cGU7XG4gIF9wcm90by5nZXRTb3VyY2UgPSBmdW5jdGlvbiBnZXRTb3VyY2UobmFtZSkge1xuICAgIHZhciBmdWxscGF0aCA9IG51bGw7XG4gICAgdmFyIHBhdGhzID0gdGhpcy5zZWFyY2hQYXRocztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYmFzZVBhdGggPSBwYXRoLnJlc29sdmUocGF0aHNbaV0pO1xuICAgICAgdmFyIHAgPSBwYXRoLnJlc29sdmUocGF0aHNbaV0sIG5hbWUpO1xuXG4gICAgICAvLyBPbmx5IGFsbG93IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYW55dGhpbmdcbiAgICAgIC8vIHVuZGVybmVhdGggaXQgdG8gYmUgc2VhcmNoZWRcbiAgICAgIGlmIChwLmluZGV4T2YoYmFzZVBhdGgpID09PSAwICYmIGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgICAgZnVsbHBhdGggPSBwO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmdWxscGF0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMucGF0aHNUb05hbWVzW2Z1bGxwYXRoXSA9IG5hbWU7XG4gICAgdmFyIHNvdXJjZSA9IHtcbiAgICAgIHNyYzogZnMucmVhZEZpbGVTeW5jKGZ1bGxwYXRoLCAndXRmLTgnKSxcbiAgICAgIHBhdGg6IGZ1bGxwYXRoLFxuICAgICAgbm9DYWNoZTogdGhpcy5ub0NhY2hlXG4gICAgfTtcbiAgICB0aGlzLmVtaXQoJ2xvYWQnLCBuYW1lLCBzb3VyY2UpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG4gIHJldHVybiBGaWxlU3lzdGVtTG9hZGVyO1xufShMb2FkZXIpO1xudmFyIE5vZGVSZXNvbHZlTG9hZGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTG9hZGVyMikge1xuICBfaW5oZXJpdHNMb29zZShOb2RlUmVzb2x2ZUxvYWRlciwgX0xvYWRlcjIpO1xuICBmdW5jdGlvbiBOb2RlUmVzb2x2ZUxvYWRlcihvcHRzKSB7XG4gICAgdmFyIF90aGlzMjtcbiAgICBfdGhpczIgPSBfTG9hZGVyMi5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgX3RoaXMyLnBhdGhzVG9OYW1lcyA9IHt9O1xuICAgIF90aGlzMi5ub0NhY2hlID0gISFvcHRzLm5vQ2FjaGU7XG4gICAgaWYgKG9wdHMud2F0Y2gpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNob2tpZGFyID0gcmVxdWlyZSgnY2hva2lkYXInKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhdGNoIHJlcXVpcmVzIGNob2tpZGFyIHRvIGJlIGluc3RhbGxlZCcpO1xuICAgICAgfVxuICAgICAgX3RoaXMyLndhdGNoZXIgPSBjaG9raWRhci53YXRjaCgpO1xuICAgICAgX3RoaXMyLndhdGNoZXIub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChmdWxsbmFtZSkge1xuICAgICAgICBfdGhpczIuZW1pdCgndXBkYXRlJywgX3RoaXMyLnBhdGhzVG9OYW1lc1tmdWxsbmFtZV0sIGZ1bGxuYW1lKTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMyLndhdGNoZXIub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdXYXRjaGVyIGVycm9yOiAnICsgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBfdGhpczIub24oJ2xvYWQnLCBmdW5jdGlvbiAobmFtZSwgc291cmNlKSB7XG4gICAgICAgIF90aGlzMi53YXRjaGVyLmFkZChzb3VyY2UucGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzMjtcbiAgfVxuICB2YXIgX3Byb3RvMiA9IE5vZGVSZXNvbHZlTG9hZGVyLnByb3RvdHlwZTtcbiAgX3Byb3RvMi5nZXRTb3VyY2UgPSBmdW5jdGlvbiBnZXRTb3VyY2UobmFtZSkge1xuICAgIC8vIERvbid0IGFsbG93IGZpbGUtc3lzdGVtIHRyYXZlcnNhbFxuICAgIGlmICgvXlxcLj9cXC4/KFxcL3xcXFxcKS8udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICgvXltBLVpdOi8udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBmdWxscGF0aDtcbiAgICB0cnkge1xuICAgICAgZnVsbHBhdGggPSByZXF1aXJlLnJlc29sdmUobmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMucGF0aHNUb05hbWVzW2Z1bGxwYXRoXSA9IG5hbWU7XG4gICAgdmFyIHNvdXJjZSA9IHtcbiAgICAgIHNyYzogZnMucmVhZEZpbGVTeW5jKGZ1bGxwYXRoLCAndXRmLTgnKSxcbiAgICAgIHBhdGg6IGZ1bGxwYXRoLFxuICAgICAgbm9DYWNoZTogdGhpcy5ub0NhY2hlXG4gICAgfTtcbiAgICB0aGlzLmVtaXQoJ2xvYWQnLCBuYW1lLCBzb3VyY2UpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG4gIHJldHVybiBOb2RlUmVzb2x2ZUxvYWRlcjtcbn0oTG9hZGVyKTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlU3lzdGVtTG9hZGVyOiBGaWxlU3lzdGVtTG9hZGVyLFxuICBQcmVjb21waWxlZExvYWRlcjogUHJlY29tcGlsZWRMb2FkZXIsXG4gIE5vZGVSZXNvbHZlTG9hZGVyOiBOb2RlUmVzb2x2ZUxvYWRlclxufTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIFNhZmVTdHJpbmcgPSByZXF1aXJlKCcuL3J1bnRpbWUnKS5TYWZlU3RyaW5nO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSBmdW5jdGlvbiwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKiBAcGFyYW0geyBhbnkgfSB2YWx1ZVxuICogQHJldHVybnMgeyBib29sZWFuIH1cbiAqL1xuZnVuY3Rpb24gY2FsbGFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuY2FsbGFibGUgPSBjYWxsYWJsZTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGlzIHN0cmljdGx5IG5vdCBgdW5kZWZpbmVkYC5cbiAqIEBwYXJhbSB7IGFueSB9IHZhbHVlXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBkZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5kZWZpbmVkID0gZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb3BlcmFuZCAob25lKSBpcyBkaXZpc2JsZSBieSB0aGUgdGVzdCdzIGFyZ3VtZW50XG4gKiAodHdvKS5cbiAqIEBwYXJhbSB7IG51bWJlciB9IG9uZVxuICogQHBhcmFtIHsgbnVtYmVyIH0gdHdvXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBkaXZpc2libGVieShvbmUsIHR3bykge1xuICByZXR1cm4gb25lICUgdHdvID09PSAwO1xufVxuZXhwb3J0cy5kaXZpc2libGVieSA9IGRpdmlzaWJsZWJ5O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGhhcyBiZWVuIGVzY2FwZWQgKGkuZS4sIGlzIGEgU2FmZVN0cmluZykuXG4gKiBAcGFyYW0geyBhbnkgfSB2YWx1ZVxuICogQHJldHVybnMgeyBib29sZWFuIH1cbiAqL1xuZnVuY3Rpb24gZXNjYXBlZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTYWZlU3RyaW5nO1xufVxuZXhwb3J0cy5lc2NhcGVkID0gZXNjYXBlZDtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqIEBwYXJhbSB7IGFueSB9IG9uZVxuICogQHBhcmFtIHsgYW55IH0gdHdvXG4gKi9cbmZ1bmN0aW9uIGVxdWFsdG8ob25lLCB0d28pIHtcbiAgcmV0dXJuIG9uZSA9PT0gdHdvO1xufVxuZXhwb3J0cy5lcXVhbHRvID0gZXF1YWx0bztcblxuLy8gQWxpYXNlc1xuZXhwb3J0cy5lcSA9IGV4cG9ydHMuZXF1YWx0bztcbmV4cG9ydHMuc2FtZWFzID0gZXhwb3J0cy5lcXVhbHRvO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBldmVubHkgZGl2aXNpYmxlIGJ5IDIuXG4gKiBAcGFyYW0geyBudW1iZXIgfSB2YWx1ZVxuICogQHJldHVybnMgeyBib29sZWFuIH1cbiAqL1xuZnVuY3Rpb24gZXZlbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJSAyID09PSAwO1xufVxuZXhwb3J0cy5ldmVuID0gZXZlbjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgZmFsc3kgLSBpZiBJIHJlY2FsbCBjb3JyZWN0bHksICcnLCAwLCBmYWxzZSxcbiAqIHVuZGVmaW5lZCwgTmFOIG9yIG51bGwuIEkgZG9uJ3Qga25vdyBpZiB3ZSBzaG91bGQgc3RpY2sgdG8gdGhlIGRlZmF1bHQgSlNcbiAqIGJlaGF2aW9yIG9yIGF0dGVtcHQgdG8gcmVwbGljYXRlIHdoYXQgUHl0aG9uIGJlbGlldmVzIHNob3VsZCBiZSBmYWxzeSAoaS5lLixcbiAqIGVtcHR5IGFycmF5cywgZW1wdHkgZGljdHMsIG5vdCAwLi4uKS5cbiAqIEBwYXJhbSB7IGFueSB9IHZhbHVlXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBmYWxzeSh2YWx1ZSkge1xuICByZXR1cm4gIXZhbHVlO1xufVxuZXhwb3J0cy5mYWxzeSA9IGZhbHN5O1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvcGVyYW5kIChvbmUpIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHRlc3Qnc1xuICogYXJndW1lbnQgKHR3bykuXG4gKiBAcGFyYW0geyBudW1iZXIgfSBvbmVcbiAqIEBwYXJhbSB7IG51bWJlciB9IHR3b1xuICogQHJldHVybnMgeyBib29sZWFuIH1cbiAqL1xuZnVuY3Rpb24gZ2Uob25lLCB0d28pIHtcbiAgcmV0dXJuIG9uZSA+PSB0d287XG59XG5leHBvcnRzLmdlID0gZ2U7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9wZXJhbmQgKG9uZSkgaXMgZ3JlYXRlciB0aGFuIHRoZSB0ZXN0J3MgYXJndW1lbnRcbiAqICh0d28pLlxuICogQHBhcmFtIHsgbnVtYmVyIH0gb25lXG4gKiBAcGFyYW0geyBudW1iZXIgfSB0d29cbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIGdyZWF0ZXJ0aGFuKG9uZSwgdHdvKSB7XG4gIHJldHVybiBvbmUgPiB0d287XG59XG5leHBvcnRzLmdyZWF0ZXJ0aGFuID0gZ3JlYXRlcnRoYW47XG5cbi8vIGFsaWFzXG5leHBvcnRzLmd0ID0gZXhwb3J0cy5ncmVhdGVydGhhbjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb3BlcmFuZCAob25lKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRlc3Qnc1xuICogYXJndW1lbnQgKHR3bykuXG4gKiBAcGFyYW0geyBudW1iZXIgfSBvbmVcbiAqIEBwYXJhbSB7IG51bWJlciB9IHR3b1xuICogQHJldHVybnMgeyBib29sZWFuIH1cbiAqL1xuZnVuY3Rpb24gbGUob25lLCB0d28pIHtcbiAgcmV0dXJuIG9uZSA8PSB0d287XG59XG5leHBvcnRzLmxlID0gbGU7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9wZXJhbmQgKG9uZSkgaXMgbGVzcyB0aGFuIHRoZSB0ZXN0J3MgcGFzc2VkIGFyZ3VtZW50XG4gKiAodHdvKS5cbiAqIEBwYXJhbSB7IG51bWJlciB9IG9uZVxuICogQHBhcmFtIHsgbnVtYmVyIH0gdHdvXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBsZXNzdGhhbihvbmUsIHR3bykge1xuICByZXR1cm4gb25lIDwgdHdvO1xufVxuZXhwb3J0cy5sZXNzdGhhbiA9IGxlc3N0aGFuO1xuXG4vLyBhbGlhc1xuZXhwb3J0cy5sdCA9IGV4cG9ydHMubGVzc3RoYW47XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBpcyBsb3dlcmNhc2VkLlxuICogQHBhcmFtIHsgc3RyaW5nIH0gdmFsdWVcbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIGxvd2VyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZTtcbn1cbmV4cG9ydHMubG93ZXIgPSBsb3dlcjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb3BlcmFuZCAob25lKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRlc3Qnc1xuICogYXJndW1lbnQgKHR3bykuXG4gKiBAcGFyYW0geyBudW1iZXIgfSBvbmVcbiAqIEBwYXJhbSB7IG51bWJlciB9IHR3b1xuICogQHJldHVybnMgeyBib29sZWFuIH1cbiAqL1xuZnVuY3Rpb24gbmUob25lLCB0d28pIHtcbiAgcmV0dXJuIG9uZSAhPT0gdHdvO1xufVxuZXhwb3J0cy5uZSA9IG5lO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gYG51bGxgLlxuICogQHBhcmFtIHsgYW55IH1cbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIG51bGxUZXN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cbmV4cG9ydHMubnVsbCA9IG51bGxUZXN0O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEBwYXJhbSB7IGFueSB9XG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBudW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLm51bWJlciA9IG51bWJlcjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgKm5vdCogZXZlbmx5IGRpdmlzaWJsZSBieSAyLlxuICogQHBhcmFtIHsgbnVtYmVyIH0gdmFsdWVcbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIG9kZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJSAyID09PSAxO1xufVxuZXhwb3J0cy5vZGQgPSBvZGQ7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBgZmFsc2VgIGlmIG5vdC5cbiAqIEBwYXJhbSB7IGFueSB9IHZhbHVlXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBzdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgbm90IGluIHRoZSBsaXN0IG9mIHRoaW5ncyBjb25zaWRlcmVkIGZhbHN5OlxuICogJycsIG51bGwsIHVuZGVmaW5lZCwgMCwgTmFOIGFuZCBmYWxzZS5cbiAqIEBwYXJhbSB7IGFueSB9IHZhbHVlXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiB0cnV0aHkodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWU7XG59XG5leHBvcnRzLnRydXRoeSA9IHRydXRoeTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLlxuICogQHBhcmFtIHsgYW55IH0gdmFsdWVcbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIHVuZGVmaW5lZFRlc3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLnVuZGVmaW5lZCA9IHVuZGVmaW5lZFRlc3Q7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBpcyB1cHBlcmNhc2VkLlxuICogQHBhcmFtIHsgc3RyaW5nIH0gdmFsdWVcbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIHVwcGVyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSB2YWx1ZTtcbn1cbmV4cG9ydHMudXBwZXIgPSB1cHBlcjtcblxuLyoqXG4gKiBJZiBFUzYgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGltcGxlbWVudHMgdGhlXG4gKiBgU3ltYm9sLml0ZXJhdG9yYCBtZXRob2QuIElmIG5vdCwgaXQncyBhIHN0cmluZyBvciBBcnJheS5cbiAqXG4gKiBDb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBpc3N1ZXMgaWYgYSBicm93c2VyIGV4aXN0cyB0aGF0IGhhcyBTZXQgYW5kIE1hcCBidXRcbiAqIG5vdCBTeW1ib2wuXG4gKlxuICogQHBhcmFtIHsgYW55IH0gdmFsdWVcbiAqIEByZXR1cm5zIHsgYm9vbGVhbiB9XG4gKi9cbmZ1bmN0aW9uIGl0ZXJhYmxlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAhIXZhbHVlW1N5bWJvbC5pdGVyYXRvcl07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH1cbn1cbmV4cG9ydHMuaXRlcmFibGUgPSBpdGVyYWJsZTtcblxuLyoqXG4gKiBJZiBFUzYgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBoYXNoXG4gKiBvciBhbiBFUzYgTWFwLiBPdGhlcndpc2UganVzdCByZXR1cm4gaWYgaXQncyBhbiBvYmplY3QgaGFzaC5cbiAqIEBwYXJhbSB7IGFueSB9IHZhbHVlXG4gKiBAcmV0dXJucyB7IGJvb2xlYW4gfVxuICovXG5mdW5jdGlvbiBtYXBwaW5nKHZhbHVlKSB7XG4gIC8vIG9ubHkgbWFwcyBhbmQgb2JqZWN0IGhhc2hlc1xuICB2YXIgYm9vbCA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChTZXQpIHtcbiAgICByZXR1cm4gYm9vbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgU2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYm9vbDtcbiAgfVxufVxuZXhwb3J0cy5tYXBwaW5nID0gbWFwcGluZzsiLAogICAgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2N5Y2xlcihpdGVtcykge1xuICB2YXIgaW5kZXggPSAtMTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBudWxsLFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIGluZGV4ID0gLTE7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICAgIH0sXG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICBpZiAoaW5kZXggPj0gaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudCA9IGl0ZW1zW2luZGV4XTtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gX2pvaW5lcihzZXApIHtcbiAgc2VwID0gc2VwIHx8ICcsJztcbiAgdmFyIGZpcnN0ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsID0gZmlyc3QgPyAnJyA6IHNlcDtcbiAgICBmaXJzdCA9IGZhbHNlO1xuICAgIHJldHVybiB2YWw7XG4gIH07XG59XG5cbi8vIE1ha2luZyB0aGlzIGEgZnVuY3Rpb24gaW5zdGVhZCBzbyBpdCByZXR1cm5zIGEgbmV3IG9iamVjdFxuLy8gZWFjaCB0aW1lIGl0J3MgY2FsbGVkLiBUaGF0IHdheSwgaWYgc29tZXRoaW5nIGxpa2UgYW4gZW52aXJvbm1lbnRcbi8vIHVzZXMgaXQsIHRoZXkgd2lsbCBlYWNoIGhhdmUgdGhlaXIgb3duIGNvcHkuXG5mdW5jdGlvbiBnbG9iYWxzKCkge1xuICByZXR1cm4ge1xuICAgIHJhbmdlOiBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgICAgaWYgKHR5cGVvZiBzdG9wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzdG9wID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgc3RlcCA9IDE7XG4gICAgICB9IGVsc2UgaWYgKCFzdGVwKSB7XG4gICAgICAgIHN0ZXAgPSAxO1xuICAgICAgfVxuICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHN0b3A7IGkgKz0gc3RlcCkge1xuICAgICAgICAgIGFyci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfaSA9IHN0YXJ0OyBfaSA+IHN0b3A7IF9pICs9IHN0ZXApIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZvci1kaXJlY3Rpb25cbiAgICAgICAgICBhcnIucHVzaChfaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICBjeWNsZXI6IGZ1bmN0aW9uIGN5Y2xlcigpIHtcbiAgICAgIHJldHVybiBfY3ljbGVyKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH0sXG4gICAgam9pbmVyOiBmdW5jdGlvbiBqb2luZXIoc2VwKSB7XG4gICAgICByZXR1cm4gX2pvaW5lcihzZXApO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsczsiLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXhwcmVzcyhlbnYsIGFwcCkge1xuICBmdW5jdGlvbiBOdW5qdWNrc1ZpZXcobmFtZSwgb3B0cykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wYXRoID0gbmFtZTtcbiAgICB0aGlzLmRlZmF1bHRFbmdpbmUgPSBvcHRzLmRlZmF1bHRFbmdpbmU7XG4gICAgdGhpcy5leHQgPSBwYXRoLmV4dG5hbWUobmFtZSk7XG4gICAgaWYgKCF0aGlzLmV4dCAmJiAhdGhpcy5kZWZhdWx0RW5naW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRlZmF1bHQgZW5naW5lIHdhcyBzcGVjaWZpZWQgYW5kIG5vIGV4dGVuc2lvbiB3YXMgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5leHQpIHtcbiAgICAgIHRoaXMubmFtZSArPSB0aGlzLmV4dCA9ICh0aGlzLmRlZmF1bHRFbmdpbmVbMF0gIT09ICcuJyA/ICcuJyA6ICcnKSArIHRoaXMuZGVmYXVsdEVuZ2luZTtcbiAgICB9XG4gIH1cbiAgTnVuanVja3NWaWV3LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIob3B0cywgY2IpIHtcbiAgICBlbnYucmVuZGVyKHRoaXMubmFtZSwgb3B0cywgY2IpO1xuICB9O1xuICBhcHAuc2V0KCd2aWV3JywgTnVuanVja3NWaWV3KTtcbiAgYXBwLnNldCgnbnVuanVja3NFbnYnLCBlbnYpO1xuICByZXR1cm4gZW52O1xufTsiLAogICAgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxudmFyIGFzYXAgPSByZXF1aXJlKCdhc2FwJyk7XG52YXIgX3dhdGVyZmFsbCA9IHJlcXVpcmUoJ2Etc3luYy13YXRlcmZhbGwnKTtcbnZhciBsaWIgPSByZXF1aXJlKCcuL2xpYicpO1xudmFyIGNvbXBpbGVyID0gcmVxdWlyZSgnLi9jb21waWxlcicpO1xudmFyIGZpbHRlcnMgPSByZXF1aXJlKCcuL2ZpbHRlcnMnKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vbG9hZGVycycpLFxuICBGaWxlU3lzdGVtTG9hZGVyID0gX3JlcXVpcmUuRmlsZVN5c3RlbUxvYWRlcixcbiAgV2ViTG9hZGVyID0gX3JlcXVpcmUuV2ViTG9hZGVyLFxuICBQcmVjb21waWxlZExvYWRlciA9IF9yZXF1aXJlLlByZWNvbXBpbGVkTG9hZGVyO1xudmFyIHRlc3RzID0gcmVxdWlyZSgnLi90ZXN0cycpO1xudmFyIGdsb2JhbHMgPSByZXF1aXJlKCcuL2dsb2JhbHMnKTtcbnZhciBfcmVxdWlyZTIgPSByZXF1aXJlKCcuL29iamVjdCcpLFxuICBPYmogPSBfcmVxdWlyZTIuT2JqLFxuICBFbWl0dGVyT2JqID0gX3JlcXVpcmUyLkVtaXR0ZXJPYmo7XG52YXIgZ2xvYmFsUnVudGltZSA9IHJlcXVpcmUoJy4vcnVudGltZScpO1xudmFyIGhhbmRsZUVycm9yID0gZ2xvYmFsUnVudGltZS5oYW5kbGVFcnJvcixcbiAgRnJhbWUgPSBnbG9iYWxSdW50aW1lLkZyYW1lO1xudmFyIGV4cHJlc3NBcHAgPSByZXF1aXJlKCcuL2V4cHJlc3MtYXBwJyk7XG5cbi8vIElmIHRoZSB1c2VyIGlzIHVzaW5nIHRoZSBhc3luYyBBUEksICphbHdheXMqIGNhbGwgaXRcbi8vIGFzeW5jaHJvbm91c2x5IGV2ZW4gaWYgdGhlIHRlbXBsYXRlIHdhcyBzeW5jaHJvbm91cy5cbmZ1bmN0aW9uIGNhbGxiYWNrQXNhcChjYiwgZXJyLCByZXMpIHtcbiAgYXNhcChmdW5jdGlvbiAoKSB7XG4gICAgY2IoZXJyLCByZXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBIG5vLW9wIHRlbXBsYXRlLCBmb3IgdXNlIHdpdGggeyUgaW5jbHVkZSBpZ25vcmUgbWlzc2luZyAlfVxuICovXG52YXIgbm9vcFRtcGxTcmMgPSB7XG4gIHR5cGU6ICdjb2RlJyxcbiAgb2JqOiB7XG4gICAgcm9vdDogZnVuY3Rpb24gcm9vdChlbnYsIGNvbnRleHQsIGZyYW1lLCBydW50aW1lLCBjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IobnVsbCwgJycpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYihoYW5kbGVFcnJvcihlLCBudWxsLCBudWxsKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xudmFyIEVudmlyb25tZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRW1pdHRlck9iaikge1xuICBfaW5oZXJpdHNMb29zZShFbnZpcm9ubWVudCwgX0VtaXR0ZXJPYmopO1xuICBmdW5jdGlvbiBFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gX0VtaXR0ZXJPYmouYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG4gIHZhciBfcHJvdG8gPSBFbnZpcm9ubWVudC5wcm90b3R5cGU7XG4gIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdChsb2FkZXJzLCBvcHRzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAvLyBUaGUgZGV2IGZsYWcgZGV0ZXJtaW5lcyB0aGUgdHJhY2UgdGhhdCdsbCBiZSBzaG93biBvbiBlcnJvcnMuXG4gICAgLy8gSWYgc2V0IHRvIHRydWUsIHJldHVybnMgdGhlIGZ1bGwgdHJhY2UgZnJvbSB0aGUgZXJyb3IgcG9pbnQsXG4gICAgLy8gb3RoZXJ3aXNlIHdpbGwgcmV0dXJuIHRyYWNlIHN0YXJ0aW5nIGZyb20gVGVtcGxhdGUucmVuZGVyXG4gICAgLy8gKHRoZSBmdWxsIHRyYWNlIGZyb20gd2l0aGluIG51bmp1Y2tzIG1heSBjb25mdXNlIGRldmVsb3BlcnMgdXNpbmdcbiAgICAvLyAgdGhlIGxpYnJhcnkpXG4gICAgLy8gZGVmYXVsdHMgdG8gZmFsc2VcbiAgICBvcHRzID0gdGhpcy5vcHRzID0gb3B0cyB8fCB7fTtcbiAgICB0aGlzLm9wdHMuZGV2ID0gISFvcHRzLmRldjtcblxuICAgIC8vIFRoZSBhdXRvZXNjYXBlIGZsYWcgc2V0cyBnbG9iYWwgYXV0b2VzY2FwaW5nLiBJZiB0cnVlLFxuICAgIC8vIGV2ZXJ5IHN0cmluZyB2YXJpYWJsZSB3aWxsIGJlIGVzY2FwZWQgYnkgZGVmYXVsdC5cbiAgICAvLyBJZiBmYWxzZSwgc3RyaW5ncyBjYW4gYmUgbWFudWFsbHkgZXNjYXBlZCB1c2luZyB0aGUgYGVzY2FwZWAgZmlsdGVyLlxuICAgIC8vIGRlZmF1bHRzIHRvIHRydWVcbiAgICB0aGlzLm9wdHMuYXV0b2VzY2FwZSA9IG9wdHMuYXV0b2VzY2FwZSAhPSBudWxsID8gb3B0cy5hdXRvZXNjYXBlIDogdHJ1ZTtcblxuICAgIC8vIElmIHRydWUsIHRoaXMgd2lsbCBtYWtlIHRoZSBzeXN0ZW0gdGhyb3cgZXJyb3JzIGlmIHRyeWluZ1xuICAgIC8vIHRvIG91dHB1dCBhIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlXG4gICAgdGhpcy5vcHRzLnRocm93T25VbmRlZmluZWQgPSAhIW9wdHMudGhyb3dPblVuZGVmaW5lZDtcbiAgICB0aGlzLm9wdHMudHJpbUJsb2NrcyA9ICEhb3B0cy50cmltQmxvY2tzO1xuICAgIHRoaXMub3B0cy5sc3RyaXBCbG9ja3MgPSAhIW9wdHMubHN0cmlwQmxvY2tzO1xuICAgIHRoaXMubG9hZGVycyA9IFtdO1xuICAgIGlmICghbG9hZGVycykge1xuICAgICAgLy8gVGhlIGZpbGVzeXN0ZW0gbG9hZGVyIGlzIG9ubHkgYXZhaWxhYmxlIHNlcnZlci1zaWRlXG4gICAgICBpZiAoRmlsZVN5c3RlbUxvYWRlcikge1xuICAgICAgICB0aGlzLmxvYWRlcnMgPSBbbmV3IEZpbGVTeXN0ZW1Mb2FkZXIoJ3ZpZXdzJyldO1xuICAgICAgfSBlbHNlIGlmIChXZWJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5sb2FkZXJzID0gW25ldyBXZWJMb2FkZXIoJy92aWV3cycpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkZXJzID0gbGliLmlzQXJyYXkobG9hZGVycykgPyBsb2FkZXJzIDogW2xvYWRlcnNdO1xuICAgIH1cblxuICAgIC8vIEl0J3MgZWFzeSB0byB1c2UgcHJlY29tcGlsZWQgdGVtcGxhdGVzOiBqdXN0IGluY2x1ZGUgdGhlbVxuICAgIC8vIGJlZm9yZSB5b3UgY29uZmlndXJlIG51bmp1Y2tzIGFuZCB0aGlzIHdpbGwgYXV0b21hdGljYWxseVxuICAgIC8vIHBpY2sgaXQgdXAgYW5kIHVzZSBpdFxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubnVuanVja3NQcmVjb21waWxlZCkge1xuICAgICAgdGhpcy5sb2FkZXJzLnVuc2hpZnQobmV3IFByZWNvbXBpbGVkTG9hZGVyKHdpbmRvdy5udW5qdWNrc1ByZWNvbXBpbGVkKSk7XG4gICAgfVxuICAgIHRoaXMuX2luaXRMb2FkZXJzKCk7XG4gICAgdGhpcy5nbG9iYWxzID0gZ2xvYmFscygpO1xuICAgIHRoaXMuZmlsdGVycyA9IHt9O1xuICAgIHRoaXMudGVzdHMgPSB7fTtcbiAgICB0aGlzLmFzeW5jRmlsdGVycyA9IFtdO1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHt9O1xuICAgIHRoaXMuZXh0ZW5zaW9uc0xpc3QgPSBbXTtcbiAgICBsaWIuX2VudHJpZXMoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgICBmaWx0ZXIgPSBfcmVmWzFdO1xuICAgICAgcmV0dXJuIF90aGlzLmFkZEZpbHRlcihuYW1lLCBmaWx0ZXIpO1xuICAgIH0pO1xuICAgIGxpYi5fZW50cmllcyh0ZXN0cykuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciBuYW1lID0gX3JlZjJbMF0sXG4gICAgICAgIHRlc3QgPSBfcmVmMlsxXTtcbiAgICAgIHJldHVybiBfdGhpcy5hZGRUZXN0KG5hbWUsIHRlc3QpO1xuICAgIH0pO1xuICB9O1xuICBfcHJvdG8uX2luaXRMb2FkZXJzID0gZnVuY3Rpb24gX2luaXRMb2FkZXJzKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgIHRoaXMubG9hZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChsb2FkZXIpIHtcbiAgICAgIC8vIENhY2hpbmcgYW5kIGNhY2hlIGJ1c3RpbmdcbiAgICAgIGxvYWRlci5jYWNoZSA9IHt9O1xuICAgICAgaWYgKHR5cGVvZiBsb2FkZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbG9hZGVyLm9uKCd1cGRhdGUnLCBmdW5jdGlvbiAobmFtZSwgZnVsbG5hbWUpIHtcbiAgICAgICAgICBsb2FkZXIuY2FjaGVbbmFtZV0gPSBudWxsO1xuICAgICAgICAgIF90aGlzMi5lbWl0KCd1cGRhdGUnLCBuYW1lLCBmdWxsbmFtZSwgbG9hZGVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxvYWRlci5vbignbG9hZCcsIGZ1bmN0aW9uIChuYW1lLCBzb3VyY2UpIHtcbiAgICAgICAgICBfdGhpczIuZW1pdCgnbG9hZCcsIG5hbWUsIHNvdXJjZSwgbG9hZGVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIF9wcm90by5pbnZhbGlkYXRlQ2FjaGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlQ2FjaGUoKSB7XG4gICAgdGhpcy5sb2FkZXJzLmZvckVhY2goZnVuY3Rpb24gKGxvYWRlcikge1xuICAgICAgbG9hZGVyLmNhY2hlID0ge307XG4gICAgfSk7XG4gIH07XG4gIF9wcm90by5hZGRFeHRlbnNpb24gPSBmdW5jdGlvbiBhZGRFeHRlbnNpb24obmFtZSwgZXh0ZW5zaW9uKSB7XG4gICAgZXh0ZW5zaW9uLl9fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5leHRlbnNpb25zW25hbWVdID0gZXh0ZW5zaW9uO1xuICAgIHRoaXMuZXh0ZW5zaW9uc0xpc3QucHVzaChleHRlbnNpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBfcHJvdG8ucmVtb3ZlRXh0ZW5zaW9uID0gZnVuY3Rpb24gcmVtb3ZlRXh0ZW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZXh0ZW5zaW9uID0gdGhpcy5nZXRFeHRlbnNpb24obmFtZSk7XG4gICAgaWYgKCFleHRlbnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leHRlbnNpb25zTGlzdCA9IGxpYi53aXRob3V0KHRoaXMuZXh0ZW5zaW9uc0xpc3QsIGV4dGVuc2lvbik7XG4gICAgZGVsZXRlIHRoaXMuZXh0ZW5zaW9uc1tuYW1lXTtcbiAgfTtcbiAgX3Byb3RvLmdldEV4dGVuc2lvbiA9IGZ1bmN0aW9uIGdldEV4dGVuc2lvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uc1tuYW1lXTtcbiAgfTtcbiAgX3Byb3RvLmhhc0V4dGVuc2lvbiA9IGZ1bmN0aW9uIGhhc0V4dGVuc2lvbihuYW1lKSB7XG4gICAgcmV0dXJuICEhdGhpcy5leHRlbnNpb25zW25hbWVdO1xuICB9O1xuICBfcHJvdG8uYWRkR2xvYmFsID0gZnVuY3Rpb24gYWRkR2xvYmFsKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpcy5nbG9iYWxzW25hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIF9wcm90by5nZXRHbG9iYWwgPSBmdW5jdGlvbiBnZXRHbG9iYWwobmFtZSkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxzW25hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnbG9iYWwgbm90IGZvdW5kOiAnICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdsb2JhbHNbbmFtZV07XG4gIH07XG4gIF9wcm90by5hZGRGaWx0ZXIgPSBmdW5jdGlvbiBhZGRGaWx0ZXIobmFtZSwgZnVuYywgYXN5bmMpIHtcbiAgICB2YXIgd3JhcHBlZCA9IGZ1bmM7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICB0aGlzLmFzeW5jRmlsdGVycy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlcnNbbmFtZV0gPSB3cmFwcGVkO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBfcHJvdG8uZ2V0RmlsdGVyID0gZnVuY3Rpb24gZ2V0RmlsdGVyKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyc1tuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWx0ZXIgbm90IGZvdW5kOiAnICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlcnNbbmFtZV07XG4gIH07XG4gIF9wcm90by5hZGRUZXN0ID0gZnVuY3Rpb24gYWRkVGVzdChuYW1lLCBmdW5jKSB7XG4gICAgdGhpcy50ZXN0c1tuYW1lXSA9IGZ1bmM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIF9wcm90by5nZXRUZXN0ID0gZnVuY3Rpb24gZ2V0VGVzdChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnRlc3RzW25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rlc3Qgbm90IGZvdW5kOiAnICsgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRlc3RzW25hbWVdO1xuICB9O1xuICBfcHJvdG8ucmVzb2x2ZVRlbXBsYXRlID0gZnVuY3Rpb24gcmVzb2x2ZVRlbXBsYXRlKGxvYWRlciwgcGFyZW50TmFtZSwgZmlsZW5hbWUpIHtcbiAgICB2YXIgaXNSZWxhdGl2ZSA9IGxvYWRlci5pc1JlbGF0aXZlICYmIHBhcmVudE5hbWUgPyBsb2FkZXIuaXNSZWxhdGl2ZShmaWxlbmFtZSkgOiBmYWxzZTtcbiAgICByZXR1cm4gaXNSZWxhdGl2ZSAmJiBsb2FkZXIucmVzb2x2ZSA/IGxvYWRlci5yZXNvbHZlKHBhcmVudE5hbWUsIGZpbGVuYW1lKSA6IGZpbGVuYW1lO1xuICB9O1xuICBfcHJvdG8uZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiBnZXRUZW1wbGF0ZShuYW1lLCBlYWdlckNvbXBpbGUsIHBhcmVudE5hbWUsIGlnbm9yZU1pc3NpbmcsIGNiKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHZhciB0bXBsID0gbnVsbDtcbiAgICBpZiAobmFtZSAmJiBuYW1lLnJhdykge1xuICAgICAgLy8gdGhpcyBmaXhlcyBhdXRvZXNjYXBlIGZvciB0ZW1wbGF0ZXMgcmVmZXJlbmNlZCBpbiBzeW1ib2xzXG4gICAgICBuYW1lID0gbmFtZS5yYXc7XG4gICAgfVxuICAgIGlmIChsaWIuaXNGdW5jdGlvbihwYXJlbnROYW1lKSkge1xuICAgICAgY2IgPSBwYXJlbnROYW1lO1xuICAgICAgcGFyZW50TmFtZSA9IG51bGw7XG4gICAgICBlYWdlckNvbXBpbGUgPSBlYWdlckNvbXBpbGUgfHwgZmFsc2U7XG4gICAgfVxuICAgIGlmIChsaWIuaXNGdW5jdGlvbihlYWdlckNvbXBpbGUpKSB7XG4gICAgICBjYiA9IGVhZ2VyQ29tcGlsZTtcbiAgICAgIGVhZ2VyQ29tcGlsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmFtZSBpbnN0YW5jZW9mIFRlbXBsYXRlKSB7XG4gICAgICB0bXBsID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0ZW1wbGF0ZSBuYW1lcyBtdXN0IGJlIGEgc3RyaW5nOiAnICsgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sb2FkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsb2FkZXIgPSB0aGlzLmxvYWRlcnNbaV07XG4gICAgICAgIHRtcGwgPSBsb2FkZXIuY2FjaGVbdGhpcy5yZXNvbHZlVGVtcGxhdGUobG9hZGVyLCBwYXJlbnROYW1lLCBuYW1lKV07XG4gICAgICAgIGlmICh0bXBsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRtcGwpIHtcbiAgICAgIGlmIChlYWdlckNvbXBpbGUpIHtcbiAgICAgICAgdG1wbC5jb21waWxlKCk7XG4gICAgICB9XG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IobnVsbCwgdG1wbCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdG1wbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHN5bmNSZXN1bHQ7XG4gICAgdmFyIGNyZWF0ZVRlbXBsYXRlID0gZnVuY3Rpb24gY3JlYXRlVGVtcGxhdGUoZXJyLCBpbmZvKSB7XG4gICAgICBpZiAoIWluZm8gJiYgIWVyciAmJiAhaWdub3JlTWlzc2luZykge1xuICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ3RlbXBsYXRlIG5vdCBmb3VuZDogJyArIG5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBuZXdUbXBsO1xuICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgIG5ld1RtcGwgPSBuZXcgVGVtcGxhdGUobm9vcFRtcGxTcmMsIF90aGlzMywgJycsIGVhZ2VyQ29tcGlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdUbXBsID0gbmV3IFRlbXBsYXRlKGluZm8uc3JjLCBfdGhpczMsIGluZm8ucGF0aCwgZWFnZXJDb21waWxlKTtcbiAgICAgICAgaWYgKCFpbmZvLm5vQ2FjaGUpIHtcbiAgICAgICAgICBpbmZvLmxvYWRlci5jYWNoZVtuYW1lXSA9IG5ld1RtcGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYikge1xuICAgICAgICBjYihudWxsLCBuZXdUbXBsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN5bmNSZXN1bHQgPSBuZXdUbXBsO1xuICAgICAgfVxuICAgIH07XG4gICAgbGliLmFzeW5jSXRlcih0aGlzLmxvYWRlcnMsIGZ1bmN0aW9uIChsb2FkZXIsIGksIG5leHQsIGRvbmUpIHtcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShlcnIsIHNyYykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZG9uZShlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKHNyYykge1xuICAgICAgICAgIHNyYy5sb2FkZXIgPSBsb2FkZXI7XG4gICAgICAgICAgZG9uZShudWxsLCBzcmMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXNvbHZlIG5hbWUgcmVsYXRpdmUgdG8gcGFyZW50TmFtZVxuICAgICAgbmFtZSA9IHRoYXQucmVzb2x2ZVRlbXBsYXRlKGxvYWRlciwgcGFyZW50TmFtZSwgbmFtZSk7XG4gICAgICBpZiAobG9hZGVyLmFzeW5jKSB7XG4gICAgICAgIGxvYWRlci5nZXRTb3VyY2UobmFtZSwgaGFuZGxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZShudWxsLCBsb2FkZXIuZ2V0U291cmNlKG5hbWUpKTtcbiAgICAgIH1cbiAgICB9LCBjcmVhdGVUZW1wbGF0ZSk7XG4gICAgcmV0dXJuIHN5bmNSZXN1bHQ7XG4gIH07XG4gIF9wcm90by5leHByZXNzID0gZnVuY3Rpb24gZXhwcmVzcyhhcHApIHtcbiAgICByZXR1cm4gZXhwcmVzc0FwcCh0aGlzLCBhcHApO1xuICB9O1xuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKG5hbWUsIGN0eCwgY2IpIHtcbiAgICBpZiAobGliLmlzRnVuY3Rpb24oY3R4KSkge1xuICAgICAgY2IgPSBjdHg7XG4gICAgICBjdHggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFdlIHN1cHBvcnQgYSBzeW5jaHJvbm91cyBBUEkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gbWlncmF0ZVxuICAgIC8vIGV4aXN0aW5nIGNvZGUgdG8gYXN5bmMuIFRoaXMgd29ya3MgYmVjYXVzZSBpZiB5b3UgZG9uJ3QgZG9cbiAgICAvLyBhbnl0aGluZyBhc3luYyB3b3JrLCB0aGUgd2hvbGUgdGhpbmcgaXMgYWN0dWFsbHkgcnVuXG4gICAgLy8gc3luY2hyb25vdXNseS5cbiAgICB2YXIgc3luY1Jlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZShuYW1lLCBmdW5jdGlvbiAoZXJyLCB0bXBsKSB7XG4gICAgICBpZiAoZXJyICYmIGNiKSB7XG4gICAgICAgIGNhbGxiYWNrQXNhcChjYiwgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN5bmNSZXN1bHQgPSB0bXBsLnJlbmRlcihjdHgsIGNiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3luY1Jlc3VsdDtcbiAgfTtcbiAgX3Byb3RvLnJlbmRlclN0cmluZyA9IGZ1bmN0aW9uIHJlbmRlclN0cmluZyhzcmMsIGN0eCwgb3B0cywgY2IpIHtcbiAgICBpZiAobGliLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIGNiID0gb3B0cztcbiAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIHRtcGwgPSBuZXcgVGVtcGxhdGUoc3JjLCB0aGlzLCBvcHRzLnBhdGgpO1xuICAgIHJldHVybiB0bXBsLnJlbmRlcihjdHgsIGNiKTtcbiAgfTtcbiAgX3Byb3RvLndhdGVyZmFsbCA9IGZ1bmN0aW9uIHdhdGVyZmFsbCh0YXNrcywgY2FsbGJhY2ssIGZvcmNlQXN5bmMpIHtcbiAgICByZXR1cm4gX3dhdGVyZmFsbCh0YXNrcywgY2FsbGJhY2ssIGZvcmNlQXN5bmMpO1xuICB9O1xuICByZXR1cm4gRW52aXJvbm1lbnQ7XG59KEVtaXR0ZXJPYmopO1xudmFyIENvbnRleHQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9PYmopIHtcbiAgX2luaGVyaXRzTG9vc2UoQ29udGV4dCwgX09iaik7XG4gIGZ1bmN0aW9uIENvbnRleHQoKSB7XG4gICAgcmV0dXJuIF9PYmouYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICB9XG4gIHZhciBfcHJvdG8yID0gQ29udGV4dC5wcm90b3R5cGU7XG4gIF9wcm90bzIuaW5pdCA9IGZ1bmN0aW9uIGluaXQoY3R4LCBibG9ja3MsIGVudikge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuICAgIC8vIEhhcyB0byBiZSB0aWVkIHRvIGFuIGVudmlyb25tZW50IHNvIHdlIGNhbiB0YXAgaW50byBpdHMgZ2xvYmFscy5cbiAgICB0aGlzLmVudiA9IGVudiB8fCBuZXcgRW52aXJvbm1lbnQoKTtcblxuICAgIC8vIE1ha2UgYSBkdXBsaWNhdGUgb2YgY3R4XG4gICAgdGhpcy5jdHggPSBsaWIuZXh0ZW5kKHt9LCBjdHgpO1xuICAgIHRoaXMuYmxvY2tzID0ge307XG4gICAgdGhpcy5leHBvcnRlZCA9IFtdO1xuICAgIGxpYi5rZXlzKGJsb2NrcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgX3RoaXM0LmFkZEJsb2NrKG5hbWUsIGJsb2Nrc1tuYW1lXSk7XG4gICAgfSk7XG4gIH07XG4gIF9wcm90bzIubG9va3VwID0gZnVuY3Rpb24gbG9va3VwKG5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIG9uZSBvZiB0aGUgbW9zdCBjYWxsZWQgZnVuY3Rpb25zLCBzbyBvcHRpbWl6ZSBmb3JcbiAgICAvLyB0aGUgdHlwaWNhbCBjYXNlIHdoZXJlIHRoZSBuYW1lIGlzbid0IGluIHRoZSBnbG9iYWxzXG4gICAgaWYgKG5hbWUgaW4gdGhpcy5lbnYuZ2xvYmFscyAmJiAhKG5hbWUgaW4gdGhpcy5jdHgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnYuZ2xvYmFsc1tuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY3R4W25hbWVdO1xuICAgIH1cbiAgfTtcbiAgX3Byb3RvMi5zZXRWYXJpYWJsZSA9IGZ1bmN0aW9uIHNldFZhcmlhYmxlKG5hbWUsIHZhbCkge1xuICAgIHRoaXMuY3R4W25hbWVdID0gdmFsO1xuICB9O1xuICBfcHJvdG8yLmdldFZhcmlhYmxlcyA9IGZ1bmN0aW9uIGdldFZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jdHg7XG4gIH07XG4gIF9wcm90bzIuYWRkQmxvY2sgPSBmdW5jdGlvbiBhZGRCbG9jayhuYW1lLCBibG9jaykge1xuICAgIHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5ibG9ja3NbbmFtZV0gfHwgW107XG4gICAgdGhpcy5ibG9ja3NbbmFtZV0ucHVzaChibG9jayk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIF9wcm90bzIuZ2V0QmxvY2sgPSBmdW5jdGlvbiBnZXRCbG9jayhuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmJsb2Nrc1tuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsb2NrIFwiJyArIG5hbWUgKyAnXCInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tzW25hbWVdWzBdO1xuICB9O1xuICBfcHJvdG8yLmdldFN1cGVyID0gZnVuY3Rpb24gZ2V0U3VwZXIoZW52LCBuYW1lLCBibG9jaywgZnJhbWUsIHJ1bnRpbWUsIGNiKSB7XG4gICAgdmFyIGlkeCA9IGxpYi5pbmRleE9mKHRoaXMuYmxvY2tzW25hbWVdIHx8IFtdLCBibG9jayk7XG4gICAgdmFyIGJsayA9IHRoaXMuYmxvY2tzW25hbWVdW2lkeCArIDFdO1xuICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICBpZiAoaWR4ID09PSAtMSB8fCAhYmxrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1cGVyIGJsb2NrIGF2YWlsYWJsZSBmb3IgXCInICsgbmFtZSArICdcIicpO1xuICAgIH1cbiAgICBibGsoZW52LCBjb250ZXh0LCBmcmFtZSwgcnVudGltZSwgY2IpO1xuICB9O1xuICBfcHJvdG8yLmFkZEV4cG9ydCA9IGZ1bmN0aW9uIGFkZEV4cG9ydChuYW1lKSB7XG4gICAgdGhpcy5leHBvcnRlZC5wdXNoKG5hbWUpO1xuICB9O1xuICBfcHJvdG8yLmdldEV4cG9ydGVkID0gZnVuY3Rpb24gZ2V0RXhwb3J0ZWQoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgdmFyIGV4cG9ydGVkID0ge307XG4gICAgdGhpcy5leHBvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBleHBvcnRlZFtuYW1lXSA9IF90aGlzNS5jdHhbbmFtZV07XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4cG9ydGVkO1xuICB9O1xuICByZXR1cm4gQ29udGV4dDtcbn0oT2JqKTtcbnZhciBUZW1wbGF0ZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX09iajIpIHtcbiAgX2luaGVyaXRzTG9vc2UoVGVtcGxhdGUsIF9PYmoyKTtcbiAgZnVuY3Rpb24gVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIF9PYmoyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuICB2YXIgX3Byb3RvMyA9IFRlbXBsYXRlLnByb3RvdHlwZTtcbiAgX3Byb3RvMy5pbml0ID0gZnVuY3Rpb24gaW5pdChzcmMsIGVudiwgcGF0aCwgZWFnZXJDb21waWxlKSB7XG4gICAgdGhpcy5lbnYgPSBlbnYgfHwgbmV3IEVudmlyb25tZW50KCk7XG4gICAgaWYgKGxpYi5pc09iamVjdChzcmMpKSB7XG4gICAgICBzd2l0Y2ggKHNyYy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgICAgIHRoaXMudG1wbFByb3BzID0gc3JjLm9iajtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICB0aGlzLnRtcGxTdHIgPSBzcmMub2JqO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdGVtcGxhdGUgb2JqZWN0IHR5cGUgXCIgKyBzcmMudHlwZSArIFwiOyBleHBlY3RlZCAnY29kZScsIG9yICdzdHJpbmcnXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGliLmlzU3RyaW5nKHNyYykpIHtcbiAgICAgIHRoaXMudG1wbFN0ciA9IHNyYztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzcmMgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgc291cmNlJyk7XG4gICAgfVxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgaWYgKGVhZ2VyQ29tcGlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY29tcGlsZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IGxpYi5fcHJldHRpZnlFcnJvcih0aGlzLnBhdGgsIHRoaXMuZW52Lm9wdHMuZGV2LCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbXBpbGVkID0gZmFsc2U7XG4gICAgfVxuICB9O1xuICBfcHJvdG8zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihjdHgsIHBhcmVudEZyYW1lLCBjYikge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgY3R4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGN0eDtcbiAgICAgIGN0eCA9IHt9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmVudEZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IHBhcmVudEZyYW1lO1xuICAgICAgcGFyZW50RnJhbWUgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcGFyZW50IGZyYW1lLCB3ZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gaW50ZXJuYWxcbiAgICAvLyBjb2RlIG9mIGFub3RoZXIgdGVtcGxhdGUsIGFuZCB0aGUgaW50ZXJuYWwgc3lzdGVtXG4gICAgLy8gZGVwZW5kcyBvbiB0aGUgc3luYy9hc3luYyBuYXR1cmUgb2YgdGhlIHBhcmVudCB0ZW1wbGF0ZVxuICAgIC8vIHRvIGJlIGluaGVyaXRlZCwgc28gZm9yY2UgYW4gYXN5bmMgY2FsbGJhY2tcbiAgICB2YXIgZm9yY2VBc3luYyA9ICFwYXJlbnRGcmFtZTtcblxuICAgIC8vIENhdGNoIGNvbXBpbGUgZXJyb3JzIGZvciBhc3luYyByZW5kZXJpbmdcbiAgICB0cnkge1xuICAgICAgdGhpcy5jb21waWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIGVyciA9IGxpYi5fcHJldHRpZnlFcnJvcih0aGlzLnBhdGgsIHRoaXMuZW52Lm9wdHMuZGV2LCBlKTtcbiAgICAgIGlmIChjYikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2tBc2FwKGNiLCBlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KGN0eCB8fCB7fSwgdGhpcy5ibG9ja3MsIHRoaXMuZW52KTtcbiAgICB2YXIgZnJhbWUgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1lLnB1c2godHJ1ZSkgOiBuZXcgRnJhbWUoKTtcbiAgICBmcmFtZS50b3BMZXZlbCA9IHRydWU7XG4gICAgdmFyIHN5bmNSZXN1bHQgPSBudWxsO1xuICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMucm9vdFJlbmRlckZ1bmModGhpcy5lbnYsIGNvbnRleHQsIGZyYW1lLCBnbG9iYWxSdW50aW1lLCBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgIC8vIFRPRE86IHRoaXMgaXMgYWN0dWFsbHkgYSBidWcgaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlIChiZWNhdXNlIHdhdGVyZmFsbFxuICAgICAgLy8gdGFza3MgYXJlIGJvdGggbm90IHBhc3NpbmcgZXJyb3JzIHVwIHRoZSBjaGFpbiBvZiBjYWxsYmFja3MgQU5EIGFyZSBub3RcbiAgICAgIC8vIGNhdXNpbmcgYSByZXR1cm4gZnJvbSB0aGUgdG9wLW1vc3QgcmVuZGVyIGZ1bmN0aW9uKS4gQnV0IGZpeGluZyB0aGF0XG4gICAgICAvLyB3aWxsIHJlcXVpcmUgYSBtb3JlIHN1YnN0YW50aWFsIGNoYW5nZSB0byB0aGUgY29tcGlsZXIuXG4gICAgICBpZiAoZGlkRXJyb3IgJiYgY2IgJiYgdHlwZW9mIHJlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gcHJldmVudCBtdWx0aXBsZSBjYWxscyB0byBjYlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyciA9IGxpYi5fcHJldHRpZnlFcnJvcihfdGhpczYucGF0aCwgX3RoaXM2LmVudi5vcHRzLmRldiwgZXJyKTtcbiAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNiKSB7XG4gICAgICAgIGlmIChmb3JjZUFzeW5jKSB7XG4gICAgICAgICAgY2FsbGJhY2tBc2FwKGNiLCBlcnIsIHJlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IoZXJyLCByZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHN5bmNSZXN1bHQgPSByZXM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN5bmNSZXN1bHQ7XG4gIH07XG4gIF9wcm90bzMuZ2V0RXhwb3J0ZWQgPSBmdW5jdGlvbiBnZXRFeHBvcnRlZChjdHgsIHBhcmVudEZyYW1lLCBjYikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICBpZiAodHlwZW9mIGN0eCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBjdHg7XG4gICAgICBjdHggPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJlbnRGcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2IgPSBwYXJlbnRGcmFtZTtcbiAgICAgIHBhcmVudEZyYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDYXRjaCBjb21waWxlIGVycm9ycyBmb3IgYXN5bmMgcmVuZGVyaW5nXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29tcGlsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChjYikge1xuICAgICAgICByZXR1cm4gY2IoZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZnJhbWUgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1lLnB1c2goKSA6IG5ldyBGcmFtZSgpO1xuICAgIGZyYW1lLnRvcExldmVsID0gdHJ1ZTtcblxuICAgIC8vIFJ1biB0aGUgcm9vdFJlbmRlckZ1bmMgdG8gcG9wdWxhdGUgdGhlIGNvbnRleHQgd2l0aCBleHBvcnRlZCB2YXJzXG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dChjdHggfHwge30sIHRoaXMuYmxvY2tzLCB0aGlzLmVudik7XG4gICAgdGhpcy5yb290UmVuZGVyRnVuYyh0aGlzLmVudiwgY29udGV4dCwgZnJhbWUsIGdsb2JhbFJ1bnRpbWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY2IoZXJyLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNiKG51bGwsIGNvbnRleHQuZ2V0RXhwb3J0ZWQoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIF9wcm90bzMuY29tcGlsZSA9IGZ1bmN0aW9uIGNvbXBpbGUoKSB7XG4gICAgaWYgKCF0aGlzLmNvbXBpbGVkKSB7XG4gICAgICB0aGlzLl9jb21waWxlKCk7XG4gICAgfVxuICB9O1xuICBfcHJvdG8zLl9jb21waWxlID0gZnVuY3Rpb24gX2NvbXBpbGUoKSB7XG4gICAgdmFyIHByb3BzO1xuICAgIGlmICh0aGlzLnRtcGxQcm9wcykge1xuICAgICAgcHJvcHMgPSB0aGlzLnRtcGxQcm9wcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNvdXJjZSA9IGNvbXBpbGVyLmNvbXBpbGUodGhpcy50bXBsU3RyLCB0aGlzLmVudi5hc3luY0ZpbHRlcnMsIHRoaXMuZW52LmV4dGVuc2lvbnNMaXN0LCB0aGlzLnBhdGgsIHRoaXMuZW52Lm9wdHMpO1xuICAgICAgdmFyIGZ1bmMgPSBuZXcgRnVuY3Rpb24oc291cmNlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctZnVuY1xuICAgICAgcHJvcHMgPSBmdW5jKCk7XG4gICAgfVxuICAgIHRoaXMuYmxvY2tzID0gdGhpcy5fZ2V0QmxvY2tzKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZW5kZXJGdW5jID0gcHJvcHMucm9vdDtcbiAgICB0aGlzLmNvbXBpbGVkID0gdHJ1ZTtcbiAgfTtcbiAgX3Byb3RvMy5fZ2V0QmxvY2tzID0gZnVuY3Rpb24gX2dldEJsb2Nrcyhwcm9wcykge1xuICAgIHZhciBibG9ja3MgPSB7fTtcbiAgICBsaWIua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgaWYgKGsuc2xpY2UoMCwgMikgPT09ICdiXycpIHtcbiAgICAgICAgYmxvY2tzW2suc2xpY2UoMildID0gcHJvcHNba107XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrcztcbiAgfTtcbiAgcmV0dXJuIFRlbXBsYXRlO1xufShPYmopO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgVGVtcGxhdGU6IFRlbXBsYXRlXG59OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBwcmVjb21waWxlR2xvYmFsKHRlbXBsYXRlcywgb3B0cykge1xuICB2YXIgb3V0ID0gJyc7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gSlNPTi5zdHJpbmdpZnkodGVtcGxhdGVzW2ldLm5hbWUpO1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1tpXS50ZW1wbGF0ZTtcbiAgICBvdXQgKz0gJyhmdW5jdGlvbigpIHsnICsgJyh3aW5kb3cubnVuanVja3NQcmVjb21waWxlZCA9IHdpbmRvdy5udW5qdWNrc1ByZWNvbXBpbGVkIHx8IHt9KScgKyAnWycgKyBuYW1lICsgJ10gPSAoZnVuY3Rpb24oKSB7XFxuJyArIHRlbXBsYXRlICsgJ1xcbn0pKCk7XFxuJztcbiAgICBpZiAob3B0cy5hc0Z1bmN0aW9uKSB7XG4gICAgICBvdXQgKz0gJ3JldHVybiBmdW5jdGlvbihjdHgsIGNiKSB7IHJldHVybiBudW5qdWNrcy5yZW5kZXIoJyArIG5hbWUgKyAnLCBjdHgsIGNiKTsgfVxcbic7XG4gICAgfVxuICAgIG91dCArPSAnfSkoKTtcXG4nO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHByZWNvbXBpbGVHbG9iYWw7IiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vbGliJyksXG4gIF9wcmV0dGlmeUVycm9yID0gX3JlcXVpcmUuX3ByZXR0aWZ5RXJyb3I7XG52YXIgY29tcGlsZXIgPSByZXF1aXJlKCcuL2NvbXBpbGVyJyk7XG52YXIgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpLFxuICBFbnZpcm9ubWVudCA9IF9yZXF1aXJlMi5FbnZpcm9ubWVudDtcbnZhciBwcmVjb21waWxlR2xvYmFsID0gcmVxdWlyZSgnLi9wcmVjb21waWxlLWdsb2JhbCcpO1xuZnVuY3Rpb24gbWF0Y2goZmlsZW5hbWUsIHBhdHRlcm5zKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXR0ZXJucykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHBhdHRlcm5zLnNvbWUoZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICByZXR1cm4gZmlsZW5hbWUubWF0Y2gocGF0dGVybik7XG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlY29tcGlsZVN0cmluZyhzdHIsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIG9wdHMuaXNTdHJpbmcgPSB0cnVlO1xuICB2YXIgZW52ID0gb3B0cy5lbnYgfHwgbmV3IEVudmlyb25tZW50KFtdKTtcbiAgdmFyIHdyYXBwZXIgPSBvcHRzLndyYXBwZXIgfHwgcHJlY29tcGlsZUdsb2JhbDtcbiAgaWYgKCFvcHRzLm5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBcIm5hbWVcIiBvcHRpb24gaXMgcmVxdWlyZWQgd2hlbiBjb21waWxpbmcgYSBzdHJpbmcnKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcihbX3ByZWNvbXBpbGUoc3RyLCBvcHRzLm5hbWUsIGVudildLCBvcHRzKTtcbn1cbmZ1bmN0aW9uIHByZWNvbXBpbGUoaW5wdXQsIG9wdHMpIHtcbiAgLy8gVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gIC8vXG4gIC8vICogbmFtZTogbmFtZSBvZiB0aGUgdGVtcGxhdGUgKGF1dG8tZ2VuZXJhdGVkIHdoZW4gY29tcGlsaW5nIGEgZGlyZWN0b3J5KVxuICAvLyAqIGlzU3RyaW5nOiBpbnB1dCBpcyBhIHN0cmluZywgbm90IGEgZmlsZSBwYXRoXG4gIC8vICogYXNGdW5jdGlvbjogZ2VuZXJhdGUgYSBjYWxsYWJsZSBmdW5jdGlvblxuICAvLyAqIGZvcmNlOiBrZWVwIGNvbXBpbGluZyBvbiBlcnJvclxuICAvLyAqIGVudjogdGhlIEVudmlyb25tZW50IHRvIHVzZSAoZ2V0cyBleHRlbnNpb25zIGFuZCBhc3luYyBmaWx0ZXJzIGZyb20gaXQpXG4gIC8vICogaW5jbHVkZTogd2hpY2ggZmlsZS9mb2xkZXJzIHRvIGluY2x1ZGUgKGZvbGRlcnMgYXJlIGF1dG8taW5jbHVkZWQsIGZpbGVzIGFyZSBhdXRvLWV4Y2x1ZGVkKVxuICAvLyAqIGV4Y2x1ZGU6IHdoaWNoIGZpbGUvZm9sZGVycyB0byBleGNsdWRlIChmb2xkZXJzIGFyZSBhdXRvLWluY2x1ZGVkLCBmaWxlcyBhcmUgYXV0by1leGNsdWRlZClcbiAgLy8gKiB3cmFwcGVyOiBmdW5jdGlvbih0ZW1wbGF0ZXMsIG9wdHMpIHsuLi59XG4gIC8vICAgICAgIEN1c3RvbWl6ZSB0aGUgb3V0cHV0IGZvcm1hdCB0byBzdG9yZSB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gIC8vICAgICAgIEJ5IGRlZmF1bHQsIHRlbXBsYXRlcyBhcmUgc3RvcmVkIGluIGEgZ2xvYmFsIHZhcmlhYmxlIHVzZWQgYnkgdGhlIHJ1bnRpbWUuXG4gIC8vICAgICAgIEEgY3VzdG9tIGxvYWRlciB3aWxsIGJlIG5lY2Vzc2FyeSB0byBsb2FkIHlvdXIgY3VzdG9tIHdyYXBwZXIuXG5cbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIHZhciBlbnYgPSBvcHRzLmVudiB8fCBuZXcgRW52aXJvbm1lbnQoW10pO1xuICB2YXIgd3JhcHBlciA9IG9wdHMud3JhcHBlciB8fCBwcmVjb21waWxlR2xvYmFsO1xuICBpZiAob3B0cy5pc1N0cmluZykge1xuICAgIHJldHVybiBwcmVjb21waWxlU3RyaW5nKGlucHV0LCBvcHRzKTtcbiAgfVxuICB2YXIgcGF0aFN0YXRzID0gZnMuZXhpc3RzU3luYyhpbnB1dCkgJiYgZnMuc3RhdFN5bmMoaW5wdXQpO1xuICB2YXIgcHJlY29tcGlsZWQgPSBbXTtcbiAgdmFyIHRlbXBsYXRlcyA9IFtdO1xuICBmdW5jdGlvbiBhZGRUZW1wbGF0ZXMoZGlyKSB7XG4gICAgZnMucmVhZGRpclN5bmMoZGlyKS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICB2YXIgZmlsZXBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKTtcbiAgICAgIHZhciBzdWJwYXRoID0gZmlsZXBhdGguc3Vic3RyKHBhdGguam9pbihpbnB1dCwgJy8nKS5sZW5ndGgpO1xuICAgICAgdmFyIHN0YXQgPSBmcy5zdGF0U3luYyhmaWxlcGF0aCk7XG4gICAgICBpZiAoc3RhdCAmJiBzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgc3VicGF0aCArPSAnLyc7XG4gICAgICAgIGlmICghbWF0Y2goc3VicGF0aCwgb3B0cy5leGNsdWRlKSkge1xuICAgICAgICAgIGFkZFRlbXBsYXRlcyhmaWxlcGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWF0Y2goc3VicGF0aCwgb3B0cy5pbmNsdWRlKSkge1xuICAgICAgICB0ZW1wbGF0ZXMucHVzaChmaWxlcGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgaWYgKHBhdGhTdGF0cy5pc0ZpbGUoKSkge1xuICAgIHByZWNvbXBpbGVkLnB1c2goX3ByZWNvbXBpbGUoZnMucmVhZEZpbGVTeW5jKGlucHV0LCAndXRmLTgnKSwgb3B0cy5uYW1lIHx8IGlucHV0LCBlbnYpKTtcbiAgfSBlbHNlIGlmIChwYXRoU3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFkZFRlbXBsYXRlcyhpbnB1dCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZW1wbGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gdGVtcGxhdGVzW2ldLnJlcGxhY2UocGF0aC5qb2luKGlucHV0LCAnLycpLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmVjb21waWxlZC5wdXNoKF9wcmVjb21waWxlKGZzLnJlYWRGaWxlU3luYyh0ZW1wbGF0ZXNbaV0sICd1dGYtOCcpLCBuYW1lLCBlbnYpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKG9wdHMuZm9yY2UpIHtcbiAgICAgICAgICAvLyBEb24ndCBzdG9wIGdlbmVyYXRpbmcgdGhlIG91dHB1dCBpZiB3ZSdyZVxuICAgICAgICAgIC8vIGZvcmNpbmcgY29tcGlsYXRpb24uXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gd3JhcHBlcihwcmVjb21waWxlZCwgb3B0cyk7XG59XG5mdW5jdGlvbiBfcHJlY29tcGlsZShzdHIsIG5hbWUsIGVudikge1xuICBlbnYgPSBlbnYgfHwgbmV3IEVudmlyb25tZW50KFtdKTtcbiAgdmFyIGFzeW5jRmlsdGVycyA9IGVudi5hc3luY0ZpbHRlcnM7XG4gIHZhciBleHRlbnNpb25zID0gZW52LmV4dGVuc2lvbnNMaXN0O1xuICB2YXIgdGVtcGxhdGU7XG4gIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgdHJ5IHtcbiAgICB0ZW1wbGF0ZSA9IGNvbXBpbGVyLmNvbXBpbGUoc3RyLCBhc3luY0ZpbHRlcnMsIGV4dGVuc2lvbnMsIG5hbWUsIGVudi5vcHRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgX3ByZXR0aWZ5RXJyb3IobmFtZSwgZmFsc2UsIGVycik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHByZWNvbXBpbGU6IHByZWNvbXBpbGUsXG4gIHByZWNvbXBpbGVTdHJpbmc6IHByZWNvbXBpbGVTdHJpbmdcbn07IiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gaW5zdGFsbENvbXBhdCgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgbGlrZSBgbnVuanVja3MuaW5zdGFsbENvbXBhdGAgc28gdGhhdCBgdGhpc2BcbiAgLy8gcmVmZXJlbmNlcyB0aGUgbnVuanVja3MgaW5zdGFuY2VcbiAgdmFyIHJ1bnRpbWUgPSB0aGlzLnJ1bnRpbWU7XG4gIHZhciBsaWIgPSB0aGlzLmxpYjtcbiAgLy8gSGFuZGxlIHNsaW0gY2FzZSB3aGVyZSB0aGVzZSAnbW9kdWxlcycgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWx0IHNvdXJjZVxuICB2YXIgQ29tcGlsZXIgPSB0aGlzLmNvbXBpbGVyLkNvbXBpbGVyO1xuICB2YXIgUGFyc2VyID0gdGhpcy5wYXJzZXIuUGFyc2VyO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICB2YXIgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICB2YXIgb3JpZ19jb250ZXh0T3JGcmFtZUxvb2t1cCA9IHJ1bnRpbWUuY29udGV4dE9yRnJhbWVMb29rdXA7XG4gIHZhciBvcmlnX21lbWJlckxvb2t1cCA9IHJ1bnRpbWUubWVtYmVyTG9va3VwO1xuICB2YXIgb3JpZ19Db21waWxlcl9hc3NlcnRUeXBlO1xuICB2YXIgb3JpZ19QYXJzZXJfcGFyc2VBZ2dyZWdhdGU7XG4gIGlmIChDb21waWxlcikge1xuICAgIG9yaWdfQ29tcGlsZXJfYXNzZXJ0VHlwZSA9IENvbXBpbGVyLnByb3RvdHlwZS5hc3NlcnRUeXBlO1xuICB9XG4gIGlmIChQYXJzZXIpIHtcbiAgICBvcmlnX1BhcnNlcl9wYXJzZUFnZ3JlZ2F0ZSA9IFBhcnNlci5wcm90b3R5cGUucGFyc2VBZ2dyZWdhdGU7XG4gIH1cbiAgZnVuY3Rpb24gdW5pbnN0YWxsKCkge1xuICAgIHJ1bnRpbWUuY29udGV4dE9yRnJhbWVMb29rdXAgPSBvcmlnX2NvbnRleHRPckZyYW1lTG9va3VwO1xuICAgIHJ1bnRpbWUubWVtYmVyTG9va3VwID0gb3JpZ19tZW1iZXJMb29rdXA7XG4gICAgaWYgKENvbXBpbGVyKSB7XG4gICAgICBDb21waWxlci5wcm90b3R5cGUuYXNzZXJ0VHlwZSA9IG9yaWdfQ29tcGlsZXJfYXNzZXJ0VHlwZTtcbiAgICB9XG4gICAgaWYgKFBhcnNlcikge1xuICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFnZ3JlZ2F0ZSA9IG9yaWdfUGFyc2VyX3BhcnNlQWdncmVnYXRlO1xuICAgIH1cbiAgfVxuICBydW50aW1lLmNvbnRleHRPckZyYW1lTG9va3VwID0gZnVuY3Rpb24gY29udGV4dE9yRnJhbWVMb29rdXAoY29udGV4dCwgZnJhbWUsIGtleSkge1xuICAgIHZhciB2YWwgPSBvcmlnX2NvbnRleHRPckZyYW1lTG9va3VwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnVHJ1ZSc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnRmFsc2UnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdOb25lJzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gZ2V0VG9rZW5zU3RhdGUodG9rZW5zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiB0b2tlbnMuaW5kZXgsXG4gICAgICBsaW5lbm86IHRva2Vucy5saW5lbm8sXG4gICAgICBjb2xubzogdG9rZW5zLmNvbG5vXG4gICAgfTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfVFlQRSAhPT0gJ1NMSU0nICYmIG5vZGVzICYmIENvbXBpbGVyICYmIFBhcnNlcikge1xuICAgIC8vIGkuZS4sIG5vdCBzbGltIG1vZGVcbiAgICB2YXIgU2xpY2UgPSBub2Rlcy5Ob2RlLmV4dGVuZCgnU2xpY2UnLCB7XG4gICAgICBmaWVsZHM6IFsnc3RhcnQnLCAnc3RvcCcsICdzdGVwJ10sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KGxpbmVubywgY29sbm8sIHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgbmV3IG5vZGVzLkxpdGVyYWwobGluZW5vLCBjb2xubywgbnVsbCk7XG4gICAgICAgIHN0b3AgPSBzdG9wIHx8IG5ldyBub2Rlcy5MaXRlcmFsKGxpbmVubywgY29sbm8sIG51bGwpO1xuICAgICAgICBzdGVwID0gc3RlcCB8fCBuZXcgbm9kZXMuTGl0ZXJhbChsaW5lbm8sIGNvbG5vLCAxKTtcbiAgICAgICAgdGhpcy5wYXJlbnQobGluZW5vLCBjb2xubywgc3RhcnQsIHN0b3AsIHN0ZXApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIENvbXBpbGVyLnByb3RvdHlwZS5hc3NlcnRUeXBlID0gZnVuY3Rpb24gYXNzZXJ0VHlwZShub2RlKSB7XG4gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFNsaWNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9yaWdfQ29tcGlsZXJfYXNzZXJ0VHlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgQ29tcGlsZXIucHJvdG90eXBlLmNvbXBpbGVTbGljZSA9IGZ1bmN0aW9uIGNvbXBpbGVTbGljZShub2RlLCBmcmFtZSkge1xuICAgICAgdGhpcy5fZW1pdCgnKCcpO1xuICAgICAgdGhpcy5fY29tcGlsZUV4cHJlc3Npb24obm9kZS5zdGFydCwgZnJhbWUpO1xuICAgICAgdGhpcy5fZW1pdCgnKSwoJyk7XG4gICAgICB0aGlzLl9jb21waWxlRXhwcmVzc2lvbihub2RlLnN0b3AsIGZyYW1lKTtcbiAgICAgIHRoaXMuX2VtaXQoJyksKCcpO1xuICAgICAgdGhpcy5fY29tcGlsZUV4cHJlc3Npb24obm9kZS5zdGVwLCBmcmFtZSk7XG4gICAgICB0aGlzLl9lbWl0KCcpJyk7XG4gICAgfTtcbiAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQWdncmVnYXRlID0gZnVuY3Rpb24gcGFyc2VBZ2dyZWdhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgdmFyIG9yaWdTdGF0ZSA9IGdldFRva2Vuc1N0YXRlKHRoaXMudG9rZW5zKTtcbiAgICAgIC8vIFNldCBiYWNrIG9uZSBhY2NvdW50aW5nIGZvciBvcGVuaW5nIGJyYWNrZXQvcGFyZW5zXG4gICAgICBvcmlnU3RhdGUuY29sbm8tLTtcbiAgICAgIG9yaWdTdGF0ZS5pbmRleC0tO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWdfUGFyc2VyX3BhcnNlQWdncmVnYXRlLmFwcGx5KHRoaXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB2YXIgZXJyU3RhdGUgPSBnZXRUb2tlbnNTdGF0ZSh0aGlzLnRva2Vucyk7XG4gICAgICAgIHZhciByZXRocm93ID0gZnVuY3Rpb24gcmV0aHJvdygpIHtcbiAgICAgICAgICBsaWIuX2Fzc2lnbihfdGhpcy50b2tlbnMsIGVyclN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBSZXNldCB0byBzdGF0ZSBiZWZvcmUgb3JpZ2luYWwgcGFyc2VBZ2dyZWdhdGUgY2FsbGVkXG4gICAgICAgIGxpYi5fYXNzaWduKHRoaXMudG9rZW5zLCBvcmlnU3RhdGUpO1xuICAgICAgICB0aGlzLnBlZWtlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgdG9rID0gdGhpcy5wZWVrVG9rZW4oKTtcbiAgICAgICAgaWYgKHRvay50eXBlICE9PSBsZXhlci5UT0tFTl9MRUZUX0JSQUNLRVQpIHtcbiAgICAgICAgICB0aHJvdyByZXRocm93KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbm9kZSA9IG5ldyBTbGljZSh0b2subGluZW5vLCB0b2suY29sbm8pO1xuXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGVuY291bnRlciBhIGNvbG9uIHdoaWxlIHBhcnNpbmcsIHRoaXMgaXMgbm90IGEgc2xpY2UsXG4gICAgICAgIC8vIHNvIHJlLXJhaXNlIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAgICAgIHZhciBpc1NsaWNlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG5vZGUuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2tpcChsZXhlci5UT0tFTl9SSUdIVF9CUkFDS0VUKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSBub2RlLmZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpc1NsaWNlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmFpbCgncGFyc2VTbGljZTogdG9vIG1hbnkgc2xpY2UgY29tcG9uZW50cycsIHRvay5saW5lbm8sIHRvay5jb2xubyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuc2tpcChsZXhlci5UT0tFTl9DT0xPTikpIHtcbiAgICAgICAgICAgIGlzU2xpY2UgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSBub2RlLmZpZWxkc1tpXTtcbiAgICAgICAgICAgIG5vZGVbZmllbGRdID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlzU2xpY2UgPSB0aGlzLnNraXAobGV4ZXIuVE9LRU5fQ09MT04pIHx8IGlzU2xpY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNTbGljZSkge1xuICAgICAgICAgIHRocm93IHJldGhyb3coKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IG5vZGVzLkFycmF5KHRvay5saW5lbm8sIHRvay5jb2xubywgW25vZGVdKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHNsaWNlTG9va3VwKG9iaiwgc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBvYmogPSBvYmogfHwgW107XG4gICAgaWYgKHN0YXJ0ID09PSBudWxsKSB7XG4gICAgICBzdGFydCA9IHN0ZXAgPCAwID8gb2JqLmxlbmd0aCAtIDEgOiAwO1xuICAgIH1cbiAgICBpZiAoc3RvcCA9PT0gbnVsbCkge1xuICAgICAgc3RvcCA9IHN0ZXAgPCAwID8gLTEgOiBvYmoubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoc3RvcCA8IDApIHtcbiAgICAgIHN0b3AgKz0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgc3RhcnQgKz0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7OyBpICs9IHN0ZXApIHtcbiAgICAgIGlmIChpIDwgMCB8fCBpID4gb2JqLmxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChzdGVwID4gMCAmJiBpID49IHN0b3ApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoc3RlcCA8IDAgJiYgaSA8PSBzdG9wKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVzdWx0cy5wdXNoKHJ1bnRpbWUubWVtYmVyTG9va3VwKG9iaiwgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBmdW5jdGlvbiBoYXNPd25Qcm9wKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH1cbiAgdmFyIEFSUkFZX01FTUJFUlMgPSB7XG4gICAgcG9wOiBmdW5jdGlvbiBwb3AoaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvcCgpO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID49IHRoaXMubGVuZ3RoIHx8IGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleUVycm9yJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0sXG4gICAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucHVzaChlbGVtZW50KTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpc1tpXSA9PT0gZWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZUVycm9yJyk7XG4gICAgfSxcbiAgICBjb3VudDogZnVuY3Rpb24gY291bnQoZWxlbWVudCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpc1tpXSA9PT0gZWxlbWVudCkge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuICAgIGluZGV4OiBmdW5jdGlvbiBpbmRleChlbGVtZW50KSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGlmICgoaSA9IHRoaXMuaW5kZXhPZihlbGVtZW50KSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWVFcnJvcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgfSxcbiAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChpbmRleCwgZWxlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaWNlKGluZGV4LCAwLCBlbGVtKTtcbiAgICB9XG4gIH07XG4gIHZhciBPQkpFQ1RfTUVNQkVSUyA9IHtcbiAgICBpdGVtczogZnVuY3Rpb24gaXRlbXMoKSB7XG4gICAgICByZXR1cm4gbGliLl9lbnRyaWVzKHRoaXMpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gbGliLl92YWx1ZXModGhpcyk7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgcmV0dXJuIGxpYi5rZXlzKHRoaXMpO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5LCBkZWYpIHtcbiAgICAgIHZhciBvdXRwdXQgPSB0aGlzW2tleV07XG4gICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0cHV0ID0gZGVmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9LFxuICAgIGhhc19rZXk6IGZ1bmN0aW9uIGhhc19rZXkoa2V5KSB7XG4gICAgICByZXR1cm4gaGFzT3duUHJvcCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgcG9wOiBmdW5jdGlvbiBwb3Aoa2V5LCBkZWYpIHtcbiAgICAgIHZhciBvdXRwdXQgPSB0aGlzW2tleV07XG4gICAgICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0cHV0ID0gZGVmO1xuICAgICAgfSBlbHNlIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleUVycm9yJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9LFxuICAgIHBvcGl0ZW06IGZ1bmN0aW9uIHBvcGl0ZW0oKSB7XG4gICAgICB2YXIga2V5cyA9IGxpYi5rZXlzKHRoaXMpO1xuICAgICAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleUVycm9yJyk7XG4gICAgICB9XG4gICAgICB2YXIgayA9IGtleXNbMF07XG4gICAgICB2YXIgdmFsID0gdGhpc1trXTtcbiAgICAgIGRlbGV0ZSB0aGlzW2tdO1xuICAgICAgcmV0dXJuIFtrLCB2YWxdO1xuICAgIH0sXG4gICAgc2V0ZGVmYXVsdDogZnVuY3Rpb24gc2V0ZGVmYXVsdChrZXksIGRlZikge1xuICAgICAgaWYgKGRlZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGRlZiA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgdGhpc1trZXldID0gZGVmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGt3YXJncykge1xuICAgICAgbGliLl9hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICAgIHJldHVybiBudWxsOyAvLyBBbHdheXMgcmV0dXJucyBOb25lXG4gICAgfVxuICB9O1xuXG4gIE9CSkVDVF9NRU1CRVJTLml0ZXJpdGVtcyA9IE9CSkVDVF9NRU1CRVJTLml0ZW1zO1xuICBPQkpFQ1RfTUVNQkVSUy5pdGVydmFsdWVzID0gT0JKRUNUX01FTUJFUlMudmFsdWVzO1xuICBPQkpFQ1RfTUVNQkVSUy5pdGVya2V5cyA9IE9CSkVDVF9NRU1CRVJTLmtleXM7XG4gIHJ1bnRpbWUubWVtYmVyTG9va3VwID0gZnVuY3Rpb24gbWVtYmVyTG9va3VwKG9iaiwgdmFsLCBhdXRvZXNjYXBlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQpIHtcbiAgICAgIHJldHVybiBzbGljZUxvb2t1cC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvYmogPSBvYmogfHwge307XG5cbiAgICAvLyBJZiB0aGUgb2JqZWN0IGlzIGFuIG9iamVjdCwgcmV0dXJuIGFueSBvZiB0aGUgbWV0aG9kcyB0aGF0IFB5dGhvbiB3b3VsZFxuICAgIC8vIG90aGVyd2lzZSBwcm92aWRlLlxuICAgIGlmIChsaWIuaXNBcnJheShvYmopICYmIGhhc093blByb3AoQVJSQVlfTUVNQkVSUywgdmFsKSkge1xuICAgICAgcmV0dXJuIEFSUkFZX01FTUJFUlNbdmFsXS5iaW5kKG9iaik7XG4gICAgfVxuICAgIGlmIChsaWIuaXNPYmplY3Qob2JqKSAmJiBoYXNPd25Qcm9wKE9CSkVDVF9NRU1CRVJTLCB2YWwpKSB7XG4gICAgICByZXR1cm4gT0JKRUNUX01FTUJFUlNbdmFsXS5iaW5kKG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvcmlnX21lbWJlckxvb2t1cC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gdW5pbnN0YWxsO1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnN0YWxsQ29tcGF0OyIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbGliID0gcmVxdWlyZSgnLi9zcmMvbGliJyk7XG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuL3NyYy9lbnZpcm9ubWVudCcpLFxuICBFbnZpcm9ubWVudCA9IF9yZXF1aXJlLkVudmlyb25tZW50LFxuICBUZW1wbGF0ZSA9IF9yZXF1aXJlLlRlbXBsYXRlO1xudmFyIExvYWRlciA9IHJlcXVpcmUoJy4vc3JjL2xvYWRlcicpO1xudmFyIGxvYWRlcnMgPSByZXF1aXJlKCcuL3NyYy9sb2FkZXJzJyk7XG52YXIgcHJlY29tcGlsZSA9IHJlcXVpcmUoJy4vc3JjL3ByZWNvbXBpbGUnKTtcbnZhciBjb21waWxlciA9IHJlcXVpcmUoJy4vc3JjL2NvbXBpbGVyJyk7XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnLi9zcmMvcGFyc2VyJyk7XG52YXIgbGV4ZXIgPSByZXF1aXJlKCcuL3NyYy9sZXhlcicpO1xudmFyIHJ1bnRpbWUgPSByZXF1aXJlKCcuL3NyYy9ydW50aW1lJyk7XG52YXIgbm9kZXMgPSByZXF1aXJlKCcuL3NyYy9ub2RlcycpO1xudmFyIGluc3RhbGxKaW5qYUNvbXBhdCA9IHJlcXVpcmUoJy4vc3JjL2ppbmphLWNvbXBhdCcpO1xuXG4vLyBBIHNpbmdsZSBpbnN0YW5jZSBvZiBhbiBlbnZpcm9ubWVudCwgc2luY2UgdGhpcyBpcyBzbyBjb21tb25seSB1c2VkXG52YXIgZTtcbmZ1bmN0aW9uIGNvbmZpZ3VyZSh0ZW1wbGF0ZXNQYXRoLCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBpZiAobGliLmlzT2JqZWN0KHRlbXBsYXRlc1BhdGgpKSB7XG4gICAgb3B0cyA9IHRlbXBsYXRlc1BhdGg7XG4gICAgdGVtcGxhdGVzUGF0aCA9IG51bGw7XG4gIH1cbiAgdmFyIFRlbXBsYXRlTG9hZGVyO1xuICBpZiAobG9hZGVycy5GaWxlU3lzdGVtTG9hZGVyKSB7XG4gICAgVGVtcGxhdGVMb2FkZXIgPSBuZXcgbG9hZGVycy5GaWxlU3lzdGVtTG9hZGVyKHRlbXBsYXRlc1BhdGgsIHtcbiAgICAgIHdhdGNoOiBvcHRzLndhdGNoLFxuICAgICAgbm9DYWNoZTogb3B0cy5ub0NhY2hlXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAobG9hZGVycy5XZWJMb2FkZXIpIHtcbiAgICBUZW1wbGF0ZUxvYWRlciA9IG5ldyBsb2FkZXJzLldlYkxvYWRlcih0ZW1wbGF0ZXNQYXRoLCB7XG4gICAgICB1c2VDYWNoZTogb3B0cy53ZWIgJiYgb3B0cy53ZWIudXNlQ2FjaGUsXG4gICAgICBhc3luYzogb3B0cy53ZWIgJiYgb3B0cy53ZWIuYXN5bmNcbiAgICB9KTtcbiAgfVxuICBlID0gbmV3IEVudmlyb25tZW50KFRlbXBsYXRlTG9hZGVyLCBvcHRzKTtcbiAgaWYgKG9wdHMgJiYgb3B0cy5leHByZXNzKSB7XG4gICAgZS5leHByZXNzKG9wdHMuZXhwcmVzcyk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICBUZW1wbGF0ZTogVGVtcGxhdGUsXG4gIExvYWRlcjogTG9hZGVyLFxuICBGaWxlU3lzdGVtTG9hZGVyOiBsb2FkZXJzLkZpbGVTeXN0ZW1Mb2FkZXIsXG4gIE5vZGVSZXNvbHZlTG9hZGVyOiBsb2FkZXJzLk5vZGVSZXNvbHZlTG9hZGVyLFxuICBQcmVjb21waWxlZExvYWRlcjogbG9hZGVycy5QcmVjb21waWxlZExvYWRlcixcbiAgV2ViTG9hZGVyOiBsb2FkZXJzLldlYkxvYWRlcixcbiAgY29tcGlsZXI6IGNvbXBpbGVyLFxuICBwYXJzZXI6IHBhcnNlcixcbiAgbGV4ZXI6IGxleGVyLFxuICBydW50aW1lOiBydW50aW1lLFxuICBsaWI6IGxpYixcbiAgbm9kZXM6IG5vZGVzLFxuICBpbnN0YWxsSmluamFDb21wYXQ6IGluc3RhbGxKaW5qYUNvbXBhdCxcbiAgY29uZmlndXJlOiBjb25maWd1cmUsXG4gIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBlID0gdW5kZWZpbmVkO1xuICB9LFxuICBjb21waWxlOiBmdW5jdGlvbiBjb21waWxlKHNyYywgZW52LCBwYXRoLCBlYWdlckNvbXBpbGUpIHtcbiAgICBpZiAoIWUpIHtcbiAgICAgIGNvbmZpZ3VyZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHNyYywgZW52LCBwYXRoLCBlYWdlckNvbXBpbGUpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihuYW1lLCBjdHgsIGNiKSB7XG4gICAgaWYgKCFlKSB7XG4gICAgICBjb25maWd1cmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGUucmVuZGVyKG5hbWUsIGN0eCwgY2IpO1xuICB9LFxuICByZW5kZXJTdHJpbmc6IGZ1bmN0aW9uIHJlbmRlclN0cmluZyhzcmMsIGN0eCwgY2IpIHtcbiAgICBpZiAoIWUpIHtcbiAgICAgIGNvbmZpZ3VyZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZS5yZW5kZXJTdHJpbmcoc3JjLCBjdHgsIGNiKTtcbiAgfSxcbiAgcHJlY29tcGlsZTogcHJlY29tcGlsZSA/IHByZWNvbXBpbGUucHJlY29tcGlsZSA6IHVuZGVmaW5lZCxcbiAgcHJlY29tcGlsZVN0cmluZzogcHJlY29tcGlsZSA/IHByZWNvbXBpbGUucHJlY29tcGlsZVN0cmluZyA6IHVuZGVmaW5lZFxufTsiLAogICAgImltcG9ydCAqIGFzIFBhcGEgZnJvbSAncGFwYXBhcnNlJztcbmltcG9ydCB7IE5vZGVTREsgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstbm9kZSc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0S2V5LCB0cmFjZSwgY29udGV4dCwgZGlhZywgRGlhZ0NvbnNvbGVMb2dnZXIsIERpYWdMb2dMZXZlbCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBPVExQVHJhY2VFeHBvcnRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLXRyYWNlLW90bHAtcHJvdG8nO1xuaW1wb3J0IHsgVHJhY2VFeHBvcnRlciB9IGZyb20gJ0Bnb29nbGUtY2xvdWQvb3BlbnRlbGVtZXRyeS1jbG91ZC10cmFjZS1leHBvcnRlcic7XG5pbXBvcnQgeyBBVFRSX1NFUlZJQ0VfTkFNRSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zJztcbmltcG9ydCB7IFNwYW5BdHRyaWJ1dGVzLCBUcmFjZWxvb3BTcGFuS2luZFZhbHVlcywgQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCwgRXZlbnRzLCBFdmVudEF0dHJpYnV0ZXMgfSBmcm9tICdAdHJhY2Vsb29wL2FpLXNlbWFudGljLWNvbnZlbnRpb25zJztcbmltcG9ydCB7IEFudGhyb3BpY0luc3RydW1lbnRhdGlvbiB9IGZyb20gJ0B0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWFudGhyb3BpYyc7XG5pbXBvcnQgeyBPcGVuQUlJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1vcGVuYWknO1xuaW1wb3J0IHsgTGxhbWFJbmRleEluc3RydW1lbnRhdGlvbiB9IGZyb20gJ0B0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWxsYW1haW5kZXgnO1xuaW1wb3J0IHsgVmVydGV4QUlJbnN0cnVtZW50YXRpb24sIEFJUGxhdGZvcm1JbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi12ZXJ0ZXhhaSc7XG5pbXBvcnQgeyBCZWRyb2NrSW5zdHJ1bWVudGF0aW9uIH0gZnJvbSAnQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tYmVkcm9jayc7XG5pbXBvcnQgeyBDb2hlcmVJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1jb2hlcmUnO1xuaW1wb3J0IHsgUGluZWNvbmVJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1waW5lY29uZSc7XG5pbXBvcnQgeyBMYW5nQ2hhaW5JbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1sYW5nY2hhaW4nO1xuaW1wb3J0IHsgQ2hyb21hREJJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1jaHJvbWFkYic7XG5pbXBvcnQgeyBRZHJhbnRJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1xZHJhbnQnO1xuaW1wb3J0IHsgVG9nZXRoZXJJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi10b2dldGhlcic7XG5pbXBvcnQgeyBNY3BJbnN0cnVtZW50YXRpb24gfSBmcm9tICdAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1tY3AnO1xuaW1wb3J0IHsgU2ltcGxlU3BhblByb2Nlc3NvciwgQmF0Y2hTcGFuUHJvY2Vzc29yIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGUnO1xuaW1wb3J0IGZldGNoJDEgZnJvbSAnY3Jvc3MtZmV0Y2gnO1xuaW1wb3J0IGZldGNoQnVpbGRlciBmcm9tICdmZXRjaC1yZXRyeSc7XG5pbXBvcnQgeyBzdXBwcmVzc1RyYWNpbmcgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnbnVuanVja3MnO1xuXG4vKipcbiAqIFRoZSBzZXZlcml0eSBvZiBhbiBlcnJvci5cbiAqL1xuY29uc3QgU0VWRVJJVFkgPSB7XG4gICAgV2FybmluZzogXCJXYXJuaW5nXCIsXG4gICAgRXJyb3I6IFwiRXJyb3JcIixcbiAgICBDcml0aWNhbDogXCJDcml0aWNhbFwiLFxufTtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIFRyYWNlbG9vcCBlcnJvcnMuXG4gKi9cbmNsYXNzIFRyYWNlbG9vcEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHNldmVyaXR5ID0gU0VWRVJJVFkuRXJyb3IpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuc2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICB9XG59XG5jbGFzcyBOb3RJbml0aWFsaXplZEVycm9yIGV4dGVuZHMgVHJhY2Vsb29wRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihgVGhlIFRyYWNlbG9vcCBTREsgbXVzdCBiZSBpbml0aWFsaXplZCBieSBjYWxsaW5nIHRoZSBcImluaXRpYWxpemVcIiBmdW5jdGlvbiBwcmlvciB0byB1c2UuYCwgU0VWRVJJVFkuQ3JpdGljYWwpO1xuICAgIH1cbn1cbmNsYXNzIEluaXRpYWxpemF0aW9uRXJyb3IgZXh0ZW5kcyBUcmFjZWxvb3BFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgY2F1c2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBUcmFjZWxvb3AgU0RLXCIsIFNFVkVSSVRZLkNyaXRpY2FsKTtcbiAgICAgICAgdGhpcy51bmRlcmx5aW5nQ2F1c2UgPSBjYXVzZTtcbiAgICB9XG59XG5jbGFzcyBBcmd1bWVudE5vdFByb3ZpZGVkRXJyb3IgZXh0ZW5kcyBUcmFjZWxvb3BFcnJvciB7XG4gICAgY29uc3RydWN0b3IoYXJndW1lbnROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBUaGUgXCIke2FyZ3VtZW50TmFtZX1cIiBhcmd1bWVudCBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZy5gKTtcbiAgICB9XG59XG5jbGFzcyBQcm9tcHROb3RGb3VuZEVycm9yIGV4dGVuZHMgVHJhY2Vsb29wRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGtleSkge1xuICAgICAgICBzdXBlcihgVGhlIHByb21wdCBcIiR7a2V5fVwiIHdhcyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuICAgIH1cbn1cblxudmFyIHZlcnNpb24gPSBcIjAuMjEuMVwiO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGhhbmRsaW5nIGFubm90YXRpb24gb3BlcmF0aW9ucyB3aXRoIHRoZSBUcmFjZWxvb3AgQVBJLlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIEJhc2VBbm5vdGF0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIGZsb3cpIHtcbiAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgICAgIHRoaXMuZmxvdyA9IGZsb3c7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYW5ub3RhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGFubm90YXRpb24gY3JlYXRpb24gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBmZXRjaCBSZXNwb25zZVxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KGAvdjIvYW5ub3RhdGlvbi10YXNrcy8ke29wdGlvbnMuYW5ub3RhdGlvblRhc2t9L2Fubm90YXRpb25zYCwge1xuICAgICAgICAgICAgZW50aXR5X2luc3RhbmNlX2lkOiBvcHRpb25zLmVudGl0eS5pZCxcbiAgICAgICAgICAgIHRhZ3M6IG9wdGlvbnMudGFncyxcbiAgICAgICAgICAgIHNvdXJjZTogXCJzZGtcIixcbiAgICAgICAgICAgIGZsb3c6IHRoaXMuZmxvdyxcbiAgICAgICAgICAgIGFjdG9yOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzZXJ2aWNlXCIsXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuY2xpZW50LmFwcE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyB1c2VyIGZlZWRiYWNrIGFubm90YXRpb25zIHdpdGggdGhlIFRyYWNlbG9vcCBBUEkuXG4gKi9cbmNsYXNzIFVzZXJGZWVkYmFjayBleHRlbmRzIEJhc2VBbm5vdGF0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgc3VwZXIoY2xpZW50LCBcInVzZXJfZmVlZGJhY2tcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYW5ub3RhdGlvbiBmb3IgYSBzcGVjaWZpYyB0YXNrIGFuZCBlbnRpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBjcmVhdGluZyBhbiBhbm5vdGF0aW9uXG4gICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGZldGNoIFJlc3BvbnNlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBhd2FpdCBjbGllbnQuYW5ub3RhdGlvbi5jcmVhdGUoe1xuICAgICAqICAgYW5ub3RhdGlvblRhc2s6ICdzYW1wbGUtYW5ub3RhdGlvbi10YXNrJyxcbiAgICAgKiAgIGVudGl0eToge1xuICAgICAqICAgICBpZDogJzEyMzQ1NicsXG4gICAgICogICB9LFxuICAgICAqICAgdGFnczoge1xuICAgICAqICAgICBzZW50aW1lbnQ6ICdwb3NpdGl2ZScsXG4gICAgICogICAgIHNjb3JlOiAwLjg1LFxuICAgICAqICAgICB0b25lczogWydoYXBweScsICdzdXJwcmlzZWQnXVxuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBzdXBlci5jcmVhdGUob3B0aW9ucyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0cmFuc2Zvcm1pbmcgQVBJIHJlc3BvbnNlcyBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gKi9cbi8qKlxuICogQ29udmVydHMgYSBzbmFrZV9jYXNlIHN0cmluZyB0byBjYW1lbENhc2VcbiAqIEBwYXJhbSBzdHIgVGhlIHNuYWtlX2Nhc2Ugc3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFRoZSBjYW1lbENhc2UgdmVyc2lvbiBvZiB0aGUgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNuYWtlVG9DYW1lbChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgc25ha2VfY2FzZSBrZXlzIGluIGFuIG9iamVjdCB0byBjYW1lbENhc2VcbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byB0cmFuc2Zvcm1cbiAqIEByZXR1cm5zIEEgbmV3IG9iamVjdCB3aXRoIGNhbWVsQ2FzZSBrZXlzXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlS2V5cyhvYmopIHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iai5tYXAodHJhbnNmb3JtUmVzcG9uc2VLZXlzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgICAgICAgY29uc3QgY2FtZWxLZXkgPSBzbmFrZVRvQ2FtZWwoa2V5KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkW2NhbWVsS2V5XSA9IHRyYW5zZm9ybVJlc3BvbnNlS2V5cyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBUcmFuc2Zvcm1zIEFQSSByZXNwb25zZSBkYXRhIGJ5IGNvbnZlcnRpbmcgc25ha2VfY2FzZSBrZXlzIHRvIGNhbWVsQ2FzZVxuICogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGluIHRoZSBCYXNlRGF0YXNldC5oYW5kbGVSZXNwb25zZSgpIG1ldGhvZFxuICogdG8gZW5zdXJlIGNvbnNpc3RlbnQgY2FtZWxDYXNlIGZvcm1hdCB0aHJvdWdob3V0IHRoZSBTREtcbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgcmF3IEFQSSByZXNwb25zZSBkYXRhXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgZGF0YSB3aXRoIGNhbWVsQ2FzZSBrZXlzXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybUFwaVJlc3BvbnNlKGRhdGEpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtUmVzcG9uc2VLZXlzKGRhdGEpO1xufVxuXG5jbGFzcyBCYXNlRGF0YXNldEVudGl0eSB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVSZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JEYXRhLmVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IEhUVFAgZXJyb3IgbWVzc2FnZSBpZiBKU09OIHBhcnNpbmcgZmFpbHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd0RhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtQXBpUmVzcG9uc2UocmF3RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIG5vbi1KU09OIHJlc3BvbnNlcyAodGV4dC9jc3YsIGV0Yy4pXG4gICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlIHx8IFwidGV4dC9wbGFpblwiLFxuICAgICAgICAgICAgYm9keTogdGV4dENvbnRlbnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhbGlkYXRlRGF0YXNldElkKGlkKSB7XG4gICAgICAgIGlmICghaWQgfHwgdHlwZW9mIGlkICE9PSBcInN0cmluZ1wiIHx8IGlkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFzZXQgSUQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRGF0YXNldFNsdWcoc2x1Zykge1xuICAgICAgICBpZiAoIXNsdWcgfHwgdHlwZW9mIHNsdWcgIT09IFwic3RyaW5nXCIgfHwgc2x1Zy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhc2V0IHNsdWcgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRGF0YXNldE5hbWUobmFtZSkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIgfHwgbmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhc2V0IG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSb3cgZXh0ZW5kcyBCYXNlRGF0YXNldEVudGl0eSB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50LCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudCk7XG4gICAgICAgIHRoaXMuX2RlbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuaWQ7XG4gICAgfVxuICAgIGdldCBkYXRhc2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmRhdGFzZXRJZDtcbiAgICB9XG4gICAgZ2V0IGRhdGFzZXRTbHVnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5kYXRhc2V0U2x1ZztcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhLmRhdGEpO1xuICAgIH1cbiAgICBnZXQgY3JlYXRlZEF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5jcmVhdGVkQXQ7XG4gICAgfVxuICAgIGdldCB1cGRhdGVkQXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLnVwZGF0ZWRBdDtcbiAgICB9XG4gICAgZ2V0IGRlbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxldGVkO1xuICAgIH1cbiAgICBnZXRWYWx1ZShjb2x1bW5OYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5kYXRhW2NvbHVtbk5hbWVdO1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogbnVsbDtcbiAgICB9XG4gICAgaGFzQ29sdW1uKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWUgaW4gdGhpcy5fZGF0YS5kYXRhO1xuICAgIH1cbiAgICBnZXRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZGF0YS5kYXRhKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgYSBkZWxldGVkIHJvd1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSB8fCB0eXBlb2Ygb3B0aW9ucy5kYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVcGRhdGUgZGF0YSBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhLmRhdGEpLCBvcHRpb25zLmRhdGEpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dChgL3YyL2RhdGFzZXRzLyR7dGhpcy5kYXRhc2V0U2x1Z30vcm93cy8ke3RoaXMuaWR9YCwge1xuICAgICAgICAgICAgVmFsdWVzOiB1cGRhdGVkRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5pZCkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBwYXJ0aWFsVXBkYXRlKHVwZGF0ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgYSBkZWxldGVkIHJvd1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXVwZGF0ZXMgfHwgdHlwZW9mIHVwZGF0ZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVwZGF0ZXMgbXVzdCBiZSBhIHZhbGlkIG9iamVjdFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dChgL3YyL2RhdGFzZXRzLyR7dGhpcy5kYXRhc2V0U2x1Z30vcm93cy8ke3RoaXMuaWR9YCwge1xuICAgICAgICAgICAgVmFsdWVzOiB1cGRhdGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvdyBpcyBhbHJlYWR5IGRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGUoYC92Mi9kYXRhc2V0cy8ke3RoaXMuZGF0YXNldFNsdWd9L3Jvd3MvJHt0aGlzLmlkfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5fZGVsZXRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RhdGEuZGF0YSk7XG4gICAgfVxuICAgIHRvQ1NWUm93KGNvbHVtbnMsIGRlbGltaXRlciA9IFwiLFwiKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNUb1VzZSA9IGNvbHVtbnMgfHwgdGhpcy5nZXRDb2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbHVtbnNUb1VzZS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmRhdGFbY29sdW1uXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSB8fFxuICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlLmluY2x1ZGVzKCdcIicpIHx8XG4gICAgICAgICAgICAgICAgc3RyaW5nVmFsdWUuaW5jbHVkZXMoXCJcXG5cIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiJHtzdHJpbmdWYWx1ZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuam9pbihkZWxpbWl0ZXIpO1xuICAgIH1cbiAgICB2YWxpZGF0ZShjb2x1bW5WYWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgICBpZiAoY29sdW1uVmFsaWRhdG9ycykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sdW1uVmFsaWRhdG9ycykuZm9yRWFjaCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IGNvbHVtblZhbGlkYXRvcnNbY29sdW1uTmFtZV07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmRhdGFbY29sdW1uTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGBJbnZhbGlkIHZhbHVlIGZvciBjb2x1bW4gJyR7Y29sdW1uTmFtZX0nOiAke3ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGVycm9ycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZERhdGEgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RhdGEpLCB7IGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RhdGEuZGF0YSkgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUm93KHRoaXMuY2xpZW50LCBjbG9uZWREYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIENvbHVtbiBleHRlbmRzIEJhc2VEYXRhc2V0RW50aXR5IHtcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQsIGRhdGEpIHtcbiAgICAgICAgc3VwZXIoY2xpZW50KTtcbiAgICAgICAgdGhpcy5fZGVsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICB9XG4gICAgZ2V0IHNsdWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLnNsdWc7XG4gICAgfVxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5uYW1lO1xuICAgIH1cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEudHlwZTtcbiAgICB9XG4gICAgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5yZXF1aXJlZCB8fCBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgZ2V0IGRhdGFzZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZGF0YXNldElkO1xuICAgIH1cbiAgICBnZXQgZGF0YXNldFNsdWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmRhdGFzZXRTbHVnO1xuICAgIH1cbiAgICBnZXQgY3JlYXRlZEF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5jcmVhdGVkQXQ7XG4gICAgfVxuICAgIGdldCB1cGRhdGVkQXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLnVwZGF0ZWRBdDtcbiAgICB9XG4gICAgZ2V0IGRlbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxldGVkO1xuICAgIH1cbiAgICBhc3luYyB1cGRhdGUob3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5fZGVsZXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBhIGRlbGV0ZWQgY29sdW1uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUgJiYgdHlwZW9mIG9wdGlvbnMubmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uIG5hbWUgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50eXBlICYmXG4gICAgICAgICAgICAhW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXS5pbmNsdWRlcyhvcHRpb25zLnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gdHlwZSBtdXN0IGJlIG9uZSBvZjogc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wdXQoYC92Mi9kYXRhc2V0cy8ke3RoaXMuZGF0YXNldFNsdWd9L2NvbHVtbnMvJHt0aGlzLnNsdWd9YCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgLy8gQVBJIHJldHVybnMgZGF0YXNldCBkYXRhLCBleHRyYWN0IGNvbHVtbiBpbmZvIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAoZGF0YS5jb2x1bW5zICYmIGRhdGEuY29sdW1uc1t0aGlzLnNsdWddKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gZGF0YS5jb2x1bW5zW3RoaXMuc2x1Z107XG4gICAgICAgICAgICAvLyBVcGRhdGUgb25seSB0aGUgZmllbGRzIHRoYXQgY2hhbmdlZCwgcHJlc2VydmUgZGF0YXNldFNsdWcgYW5kIG90aGVyIG1ldGFkYXRhXG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhKSwgeyBuYW1lOiBjb2x1bW5EYXRhLm5hbWUgfHwgdGhpcy5fZGF0YS5uYW1lLCB0eXBlOiBjb2x1bW5EYXRhLnR5cGUgfHwgdGhpcy5fZGF0YS50eXBlLCBkZXNjcmlwdGlvbjogY29sdW1uRGF0YS5kZXNjcmlwdGlvbiB8fCB0aGlzLl9kYXRhLmRlc2NyaXB0aW9uLCB1cGRhdGVkQXQ6IGRhdGEudXBkYXRlZEF0IHx8IHRoaXMuX2RhdGEudXBkYXRlZEF0IH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbHVtbiBpcyBhbHJlYWR5IGRlbGV0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGUoYC92Mi9kYXRhc2V0cy8ke3RoaXMuZGF0YXNldFNsdWd9L2NvbHVtbnMvJHt0aGlzLnNsdWd9YCk7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLl9kZWxldGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFsaWRhdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc05hTihudW1WYWx1ZSkgPyBudWxsIDogbnVtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb3dlciA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3dlciA9PT0gXCJ0cnVlXCIgfHwgbG93ZXIgPT09IFwiMVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3dlciA9PT0gXCJmYWxzZVwiIHx8IGxvd2VyID09PSBcIjBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERhdGFzZXQgZXh0ZW5kcyBCYXNlRGF0YXNldEVudGl0eSB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50LCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudCk7XG4gICAgICAgIHRoaXMuX2RlbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgfVxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuaWQ7XG4gICAgfVxuICAgIGdldCBzbHVnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5zbHVnO1xuICAgIH1cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubmFtZTtcbiAgICB9XG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLnZlcnNpb247XG4gICAgfVxuICAgIGdldCBwdWJsaXNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLnB1Ymxpc2hlZCB8fCBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGNyZWF0ZWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuY3JlYXRlZEF0IHx8IFwiXCI7XG4gICAgfVxuICAgIGdldCB1cGRhdGVkQXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLnVwZGF0ZWRBdCB8fCBcIlwiO1xuICAgIH1cbiAgICBnZXQgZGVsZXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGV0ZWQ7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZShvcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGEgZGVsZXRlZCBkYXRhc2V0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVEYXRhc2V0TmFtZShvcHRpb25zLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucHV0KGAvdjIvZGF0YXNldHMvJHt0aGlzLnNsdWd9YCwgb3B0aW9ucyk7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhc2V0IGlzIGFscmVhZHkgZGVsZXRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LmRlbGV0ZShgL3YyL2RhdGFzZXRzLyR7dGhpcy5zbHVnfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5fZGVsZXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGFzeW5jIHB1Ymxpc2gob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcHVibGlzaCBhIGRlbGV0ZWQgZGF0YXNldFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3QoYC92Mi9kYXRhc2V0cy8ke3RoaXMuc2x1Z30vcHVibGlzaGAsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBhc3luYyBhZGRDb2x1bW4oY29sdW1ucykge1xuICAgICAgICBpZiAodGhpcy5fZGVsZXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFkZCBjb2x1bW5zIHRvIGEgZGVsZXRlZCBkYXRhc2V0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW5zKSB8fCBjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1ucyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKCFjb2x1bW4ubmFtZSB8fCB0eXBlb2YgY29sdW1uLm5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gbmFtZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdChgL3YyL2RhdGFzZXRzLyR7dGhpcy5zbHVnfS9jb2x1bW5zYCwgY29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5zbHVnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBjb2x1bW46IEludmFsaWQgQVBJIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29sdW1uUmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgc2x1ZzogZGF0YS5zbHVnLFxuICAgICAgICAgICAgICAgIGRhdGFzZXRJZDogdGhpcy5fZGF0YS5pZCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0U2x1ZzogdGhpcy5zbHVnLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGRhdGEucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IGRhdGEudXBkYXRlZEF0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcgQ29sdW1uKHRoaXMuY2xpZW50LCBjb2x1bW5SZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBhc3luYyBnZXRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBjb2x1bW5zIGZyb20gYSBkZWxldGVkIGRhdGFzZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2x1bW5zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2NvbHVtblNsdWcsIGNvbHVtbkRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2RhdGEuY29sdW1ucykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbkRhdGE7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5SZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBzbHVnOiBjb2x1bW5TbHVnLFxuICAgICAgICAgICAgICAgIGRhdGFzZXRJZDogdGhpcy5fZGF0YS5pZCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0U2x1ZzogdGhpcy5zbHVnLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbC5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGNvbC50eXBlLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBjb2wucmVxdWlyZWQgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IHRoaXMuX2RhdGEuY3JlYXRlZEF0IHx8IHRoaXMuY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogdGhpcy5fZGF0YS51cGRhdGVkQXQgfHwgdGhpcy51cGRhdGVkQXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKG5ldyBDb2x1bW4odGhpcy5jbGllbnQsIGNvbHVtblJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuICAgIGFzeW5jIGFkZFJvdyhyb3dEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIHJvdyB0byBhIGRlbGV0ZWQgZGF0YXNldFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvd0RhdGEgfHwgdHlwZW9mIHJvd0RhdGEgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvdyBkYXRhIG11c3QgYmUgYSB2YWxpZCBvYmplY3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuYWRkUm93cyhbcm93RGF0YV0pO1xuICAgICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBhZGQgcm93XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dzWzBdO1xuICAgIH1cbiAgICBhc3luYyBhZGRSb3dzKHJvd3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlbGV0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgcm93cyB0byBhIGRlbGV0ZWQgZGF0YXNldFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvd3MgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2x1bW5zID0gYXdhaXQgdGhpcy5nZXRDb2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbk1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgICAgIGNvbHVtbk1hcC5zZXQoY29sLm5hbWUsIGNvbC5zbHVnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93cyA9IHJvd3MubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUm93ID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3cpLmZvckVhY2goKGNvbHVtbk5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5TbHVnID0gY29sdW1uTWFwLmdldChjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uU2x1Zykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJvd1tjb2x1bW5TbHVnXSA9IHJvd1tjb2x1bW5OYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJvdztcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICBSb3dzOiB0cmFuc2Zvcm1lZFJvd3MsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdChgL3YyL2RhdGFzZXRzLyR7dGhpcy5zbHVnfS9yb3dzYCwgcGF5bG9hZCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICBpZiAocmVzdWx0LnJvd3MpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQucm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1Jlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0SWQ6IHRoaXMuX2RhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRTbHVnOiB0aGlzLnNsdWcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMudHJhbnNmb3JtVmFsdWVzQmFja1RvTmFtZXMocm93LnZhbHVlcywgY29sdW1uTWFwKSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0OiByb3cuY3JlYXRlZF9hdCxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiByb3cudXBkYXRlZF9hdCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUm93KHRoaXMuY2xpZW50LCByb3dSZXNwb25zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHRyYW5zZm9ybVZhbHVlc0JhY2tUb05hbWVzKHZhbHVlcywgY29sdW1uTWFwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBjb25zdCByZXZlcnNlTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBjb2x1bW5NYXAuZm9yRWFjaCgoc2x1ZywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgcmV2ZXJzZU1hcC5zZXQoc2x1ZywgbmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goKGNvbHVtblNsdWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSByZXZlcnNlTWFwLmdldChjb2x1bW5TbHVnKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2NvbHVtbk5hbWVdID0gdmFsdWVzW2NvbHVtblNsdWddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Um93cyhsaW1pdCA9IDEwMCwgb2Zmc2V0ID0gMCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsZXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCByb3dzIGZyb20gYSBkZWxldGVkIGRhdGFzZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQoYC92Mi9kYXRhc2V0cy8ke3RoaXMuc2x1Z30vcm93cz9saW1pdD0ke2xpbWl0fSZvZmZzZXQ9JHtvZmZzZXR9YCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGRhdGEucm93cyB8fCBbXTtcbiAgICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1Jlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICAgICAgZGF0YXNldElkOiB0aGlzLl9kYXRhLmlkLFxuICAgICAgICAgICAgICAgIGRhdGFzZXRTbHVnOiB0aGlzLnNsdWcsXG4gICAgICAgICAgICAgICAgZGF0YTogcm93LnZhbHVlcyB8fCByb3cuZGF0YSB8fCB7fSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IHJvdy5jcmVhdGVkX2F0LFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogcm93LnVwZGF0ZWRfYXQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSb3codGhpcy5jbGllbnQsIHJvd1Jlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGZyb21DU1YoY3N2Q29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaW1wb3J0IENTViB0byBhIGRlbGV0ZWQgZGF0YXNldFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGhhc0hlYWRlciA9IHRydWUsIGRlbGltaXRlciA9IFwiLFwiIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoIWNzdkNvbnRlbnQgfHwgdHlwZW9mIGNzdkNvbnRlbnQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNTViBjb250ZW50IG11c3QgYmUgYSB2YWxpZCBzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMucGFyc2VDU1YoY3N2Q29udGVudCwgZGVsaW1pdGVyLCBoYXNIZWFkZXIpO1xuICAgICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGRhdGEgZm91bmQgaW4gQ1NWXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IDEwMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArPSBiYXRjaFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoID0gcm93cy5zbGljZShpLCBpICsgYmF0Y2hTaXplKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUm93cyhiYXRjaCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0VmVyc2lvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHZlcnNpb25zIG9mIGEgZGVsZXRlZCBkYXRhc2V0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0KGAvdjIvZGF0YXNldHMvJHt0aGlzLnNsdWd9L3ZlcnNpb25zYCk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0VmVyc2lvbih2ZXJzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxldGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHZlcnNpb24gb2YgYSBkZWxldGVkIGRhdGFzZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmVyc2lvbnNEYXRhID0gYXdhaXQgdGhpcy5nZXRWZXJzaW9ucygpO1xuICAgICAgICByZXR1cm4gdmVyc2lvbnNEYXRhLnZlcnNpb25zLmZpbmQoKHYpID0+IHYudmVyc2lvbiA9PT0gdmVyc2lvbikgfHwgbnVsbDtcbiAgICB9XG4gICAgcGFyc2VDU1YoY3N2Q29udGVudCwgZGVsaW1pdGVyLCBoYXNIZWFkZXIpIHtcbiAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSBQYXBhLnBhcnNlKGNzdkNvbnRlbnQsIHtcbiAgICAgICAgICAgIGRlbGltaXRlcixcbiAgICAgICAgICAgIGhlYWRlcjogaGFzSGVhZGVyLFxuICAgICAgICAgICAgc2tpcEVtcHR5TGluZXM6IHRydWUsXG4gICAgICAgICAgICB0cmFuc2Zvcm1IZWFkZXI6IChoZWFkZXIpID0+IGhlYWRlci50cmltKCksXG4gICAgICAgICAgICB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdGhpcy5wYXJzZVZhbHVlKHZhbHVlLnRyaW0oKSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFyc2VSZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ1NWIHBhcnNpbmcgZmFpbGVkOiAke3BhcnNlUmVzdWx0LmVycm9yc1swXS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xuICAgIH1cbiAgICBwYXJzZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcIm51bGxcIikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAoIWlzTmFOKG51bVZhbHVlKSAmJiBpc0Zpbml0ZShudW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5jbGFzcyBEYXRhc2V0cyBleHRlbmRzIEJhc2VEYXRhc2V0RW50aXR5IHtcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQpIHtcbiAgICAgICAgc3VwZXIoY2xpZW50KTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURhdGFzZXROYW1lKG9wdGlvbnMubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdChcIi92Mi9kYXRhc2V0c1wiLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm4gbmV3IERhdGFzZXQodGhpcy5jbGllbnQsIGRhdGEpO1xuICAgIH1cbiAgICBhc3luYyBnZXQoc2x1Zykge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGF0YXNldFNsdWcoc2x1Zyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0KGAvdjIvZGF0YXNldHMvJHtzbHVnfWApO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YXNldCh0aGlzLmNsaWVudCwgZGF0YSk7XG4gICAgfVxuICAgIGFzeW5jIGxpc3QoKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0KGAvdjIvZGF0YXNldHNgKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YXNldHM6IFtdLFxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhc2V0cyA9IGRhdGEuZGF0YXNldHMubWFwKChkYXRhc2V0RGF0YSkgPT4gbmV3IERhdGFzZXQodGhpcy5jbGllbnQsIGRhdGFzZXREYXRhKSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCB7IGRhdGFzZXRzIH0pO1xuICAgIH1cbiAgICBhc3luYyBkZWxldGUoc2x1Zykge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGF0YXNldFNsdWcoc2x1Zyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZGVsZXRlKGAvdjIvZGF0YXNldHMvJHtzbHVnfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0VmVyc2lvbkNTVihzbHVnLCB2ZXJzaW9uKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVEYXRhc2V0U2x1ZyhzbHVnKTtcbiAgICAgICAgaWYgKCF2ZXJzaW9uIHx8IHR5cGVvZiB2ZXJzaW9uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJzaW9uIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0KGAvdjIvZGF0YXNldHMvJHtzbHVnfS92ZXJzaW9ucy8ke3ZlcnNpb259YCk7XG4gICAgICAgIGNvbnN0IGNzdkRhdGEgPSBhd2FpdCB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjc3ZEYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBDU1YgZGF0YSBhcyBzdHJpbmcgZnJvbSBBUElcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzdkRhdGE7XG4gICAgfVxuICAgIGFzeW5jIGdldFZlcnNpb25Bc0pzb25sKHNsdWcsIHZlcnNpb24pIHtcbiAgICAgICAgaWYgKCF2ZXJzaW9uIHx8IHZlcnNpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZlcnNpb24gaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gYC92Mi9kYXRhc2V0cy8ke3NsdWd9L3ZlcnNpb25zLyR7dmVyc2lvbn0vanNvbmxgO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldCh1cmwpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBKU09OTCBkYXRhOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgICAgICAgIC8vIElmIHNlcnZlciByZXR1cm5zIEpTT04sIGhhbmRsZSBpdCBhcHByb3ByaWF0ZWx5XG4gICAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChqc29uRGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihqc29uRGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb252ZXJ0IEpTT04gcmVzcG9uc2UgdG8gSlNPTkwgZm9ybWF0IGlmIG5lZWRlZFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbkRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpzb25EYXRhLm1hcCgoaXRlbSkgPT4gSlNPTi5zdHJpbmdpZnkoaXRlbSkpLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbkRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4cGVjdCBKU09OTCBmb3JtYXQgKHRleHQvcGxhaW4gb3IgYXBwbGljYXRpb24vanNvbmwpXG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgfVxufVxuXG5jbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBCYXNlRGF0YXNldEVudGl0eSB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHN1cGVyKGNsaWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biBldmFsdWF0b3JzIG9uIGV4cGVyaW1lbnQgdGFzayByZXN1bHRzIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uXG4gICAgICovXG4gICAgYXN5bmMgcnVuRXhwZXJpbWVudEV2YWx1YXRvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgZXhwZXJpbWVudElkLCBleHBlcmltZW50UnVuSWQsIHRhc2tJZCwgdGFza1Jlc3VsdCwgZXZhbHVhdG9yLCB3YWl0Rm9yUmVzdWx0cyA9IHRydWUsIH0gPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnZhbGlkYXRlRXZhbHVhdG9yT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHJpZ2dlclJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmlnZ2VyRXhwZXJpbWVudEV2YWx1YXRvcih7XG4gICAgICAgICAgICBleHBlcmltZW50SWQsXG4gICAgICAgICAgICBleHBlcmltZW50UnVuSWQsXG4gICAgICAgICAgICB0YXNrSWQsXG4gICAgICAgICAgICBldmFsdWF0b3IsXG4gICAgICAgICAgICB0YXNrUmVzdWx0LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF3YWl0Rm9yUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbklkOiB0cmlnZ2VyUmVzcG9uc2UuZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogeyBzdGF0dXM6IFwicnVubmluZ1wiLCBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndhaXRGb3JSZXN1bHQodHJpZ2dlclJlc3BvbnNlLmV4ZWN1dGlvbklkLCB0cmlnZ2VyUmVzcG9uc2Uuc3RyZWFtVXJsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlciBldmFsdWF0b3IgZXhlY3V0aW9uIHdpdGhvdXQgd2FpdGluZyBmb3IgcmVzdWx0c1xuICAgICAqL1xuICAgIGFzeW5jIHRyaWdnZXJFeHBlcmltZW50RXZhbHVhdG9yKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgeyBleHBlcmltZW50SWQsIGV4cGVyaW1lbnRSdW5JZCwgdGFza0lkLCBldmFsdWF0b3IsIHRhc2tSZXN1bHQgfSA9IHJlcXVlc3Q7XG4gICAgICAgIGlmICghZXhwZXJpbWVudElkIHx8ICF0YXNrUmVzdWx0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHBlcmltZW50SWQsIGV2YWx1YXRvciwgYW5kIHRhc2tSZXN1bHQgYXJlIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBib3RoIHN0cmluZyBhbmQgb2JqZWN0IGV2YWx1YXRvciB0eXBlc1xuICAgICAgICBjb25zdCBldmFsdWF0b3JOYW1lID0gdHlwZW9mIGV2YWx1YXRvciA9PT0gXCJzdHJpbmdcIiA/IGV2YWx1YXRvciA6IGV2YWx1YXRvci5uYW1lO1xuICAgICAgICBjb25zdCBldmFsdWF0b3JWZXJzaW9uID0gdHlwZW9mIGV2YWx1YXRvciA9PT0gXCJzdHJpbmdcIiA/IHVuZGVmaW5lZCA6IGV2YWx1YXRvci52ZXJzaW9uO1xuICAgICAgICBpZiAoIWV2YWx1YXRvck5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImV2YWx1YXRvciBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0U2NoZW1hTWFwcGluZyA9IHRoaXMuY3JlYXRlSW5wdXRTY2hlbWFNYXBwaW5nKHRhc2tSZXN1bHQpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgZXhwZXJpbWVudF9pZDogZXhwZXJpbWVudElkLFxuICAgICAgICAgICAgZXhwZXJpbWVudF9ydW5faWQ6IGV4cGVyaW1lbnRSdW5JZCxcbiAgICAgICAgICAgIGV2YWx1YXRvcl92ZXJzaW9uOiBldmFsdWF0b3JWZXJzaW9uLFxuICAgICAgICAgICAgdGFza19pZDogdGFza0lkLFxuICAgICAgICAgICAgaW5wdXRfc2NoZW1hX21hcHBpbmc6IGlucHV0U2NoZW1hTWFwcGluZyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KGAvdjIvZXZhbHVhdG9ycy9zbHVnLyR7ZXZhbHVhdG9yTmFtZX0vZXhlY3V0ZWAsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGVjdXRpb25JZDogZGF0YS5leGVjdXRpb25JZCxcbiAgICAgICAgICAgIHN0cmVhbVVybDogZGF0YS5zdHJlYW1VcmwsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdhaXQgZm9yIGV4ZWN1dGlvbiByZXN1bHQgdmlhIHN0cmVhbSBVUkwgKGFjdHVhbGx5IEpTT04gZW5kcG9pbnQpXG4gICAgICovXG4gICAgYXN5bmMgd2FpdEZvclJlc3VsdChleGVjdXRpb25JZCwgc3RyZWFtVXJsKSB7XG4gICAgICAgIGlmICghZXhlY3V0aW9uSWQgfHwgIXN0cmVhbVVybCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhlY3V0aW9uIElEIGFuZCBzdHJlYW0gVVJMIGFyZSByZXF1aXJlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdWxsU3RyZWFtVXJsID0gYCR7dGhpcy5jbGllbnRbXCJiYXNlVXJsXCJdfS92MiR7c3RyZWFtVXJsfWA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZ1bGxTdHJlYW1VcmwsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmNsaWVudFtcImFwaUtleVwiXX1gLFxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IHJlc3VsdHM6ICR7cmVzcG9uc2Uuc3RhdHVzfSwgYm9keTogJHtlcnJvclRleHR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAvLyBDaGVjayBleGVjdXRpb24gSUQgbWF0Y2hcbiAgICAgICAgICAgIGlmIChyZXNwb25zZURhdGEuZXhlY3V0aW9uX2lkICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhLmV4ZWN1dGlvbl9pZCAhPT0gZXhlY3V0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4ZWN1dGlvbiBJRCBtaXNtYXRjaDogJHtyZXNwb25zZURhdGEuZXhlY3V0aW9uX2lkfSAhPT0gJHtleGVjdXRpb25JZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gRXhlY3V0aW9uUmVzcG9uc2UgZm9ybWF0XG4gICAgICAgICAgICBjb25zdCBleGVjdXRpb25SZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25JZDogcmVzcG9uc2VEYXRhLmV4ZWN1dGlvbl9pZCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3BvbnNlRGF0YS5yZXN1bHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIFtleGVjdXRpb25SZXNwb25zZV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB3YWl0IGZvciByZXN1bHQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIn1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBldmFsdWF0b3IgcnVuIG9wdGlvbnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZUV2YWx1YXRvck9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGV4cGVyaW1lbnRJZCwgZXZhbHVhdG9yLCB0YXNrUmVzdWx0IH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoIWV4cGVyaW1lbnRJZCB8fFxuICAgICAgICAgICAgdHlwZW9mIGV4cGVyaW1lbnRJZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgZXhwZXJpbWVudElkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVyaW1lbnQgSUQgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXZhbHVhdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBvbmUgZXZhbHVhdG9yIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFza1Jlc3VsdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIHRhc2sgcmVzdWx0IG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgZXZhbHVhdG9yIGJhc2VkIG9uIGl0cyB0eXBlXG4gICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAoIWV2YWx1YXRvci50cmltKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFdmFsdWF0b3IgbmFtZSBjYW5ub3QgYmUgZW1wdHlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWV2YWx1YXRvci5uYW1lIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2YWx1YXRvci5uYW1lICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgIWV2YWx1YXRvci5uYW1lLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV2YWx1YXRvciBtdXN0IGhhdmUgYSB2YWxpZCBuYW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFzayByZXN1bHRcbiAgICAgICAgaWYgKCF0YXNrUmVzdWx0IHx8IHR5cGVvZiB0YXNrUmVzdWx0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhc2sgcmVzdWx0IG11c3QgYmUgYSB2YWxpZCBvYmplY3RgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgSW5wdXRTY2hlbWFNYXBwaW5nIGZyb20gaW5wdXQgb2JqZWN0XG4gICAgICovXG4gICAgY3JlYXRlSW5wdXRTY2hlbWFNYXBwaW5nKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgICAgICAgICBtYXBwaW5nW2tleV0gPSB7IHNvdXJjZTogU3RyaW5nKHZhbHVlKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXBwaW5nO1xuICAgIH1cbn1cblxuY2xhc3MgRXhwZXJpbWVudCB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgICAgICB0aGlzLmV2YWx1YXRvciA9IG5ldyBFdmFsdWF0b3IoY2xpZW50KTtcbiAgICAgICAgdGhpcy5kYXRhc2V0cyA9IG5ldyBEYXRhc2V0cyhjbGllbnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBleHBlcmltZW50IHNsdWdcbiAgICAgKi9cbiAgICBnZW5lcmF0ZUV4cGVyaW1lbnRTbHVnKCkge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTtcbiAgICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDcpO1xuICAgICAgICByZXR1cm4gYGV4cC0ke3RpbWVzdGFtcH0ke3JhbmRvbX1gLnN1YnN0cmluZygwLCAxNSk7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yRGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvckRhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIGRlZmF1bHQgSFRUUCBlcnJvciBtZXNzYWdlIGlmIEpTT04gcGFyc2luZyBmYWlsc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSAocmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluY2x1ZGVzKFwidGV4dC9jc3ZcIikgfHxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlLmluY2x1ZGVzKFwiYXBwbGljYXRpb24veC1uZGpzb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYXdEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUFwaVJlc3BvbnNlKHJhd0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biBhbiBleHBlcmltZW50IHdpdGggdGhlIGdpdmVuIHRhc2sgZnVuY3Rpb24gYW5kIG9wdGlvbnNcbiAgICAgKi9cbiAgICBhc3luYyBydW4odGFzaywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YXNldFNsdWcsIGRhdGFzZXRWZXJzaW9uLCBldmFsdWF0b3JzID0gW10sIHdhaXRGb3JSZXN1bHRzID0gdHJ1ZSwgfSA9IG9wdGlvbnM7XG4gICAgICAgIC8vIFdoZW4gZXhwZXJpbWVudFNsdWcgaXMgbm90IHByb3ZpZGVkIGEgcmFuZG9tIG9uZSBpcyBnZW5lcmF0ZWRcbiAgICAgICAgbGV0IHsgZXhwZXJpbWVudFNsdWcgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmICghZXhwZXJpbWVudFNsdWcpIHtcbiAgICAgICAgICAgIGV4cGVyaW1lbnRTbHVnID1cbiAgICAgICAgICAgICAgICB0aGlzLmNsaWVudC5leHBlcmltZW50U2x1ZyB8fCB0aGlzLmdlbmVyYXRlRXhwZXJpbWVudFNsdWcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlUnVuT3B0aW9ucyh0YXNrLCBvcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRvclNsdWdzID0gZXZhbHVhdG9ycy5tYXAoKGV2YWx1YXRvcikgPT4gdHlwZW9mIGV2YWx1YXRvciA9PT0gXCJzdHJpbmdcIiA/IGV2YWx1YXRvciA6IGV2YWx1YXRvci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVyaW1lbnRSZXNwb25zZSA9IGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUV4cGVyaW1lbnQoe1xuICAgICAgICAgICAgICAgIHNsdWc6IGV4cGVyaW1lbnRTbHVnLFxuICAgICAgICAgICAgICAgIGRhdGFzZXRTbHVnLFxuICAgICAgICAgICAgICAgIGRhdGFzZXRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGV2YWx1YXRvclNsdWdzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXREYXRhc2V0Um93cyhkYXRhc2V0U2x1ZywgZGF0YXNldFZlcnNpb24pO1xuICAgICAgICAgICAgY29uc3QgdGFza1Jlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tFcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25SZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFza091dHB1dCA9IGF3YWl0IHRhc2socm93KTtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgVGFza1Jlc3BvbnNlIG9iamVjdFxuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tSZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiB0YXNrT3V0cHV0LFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SWQ6IHJvdy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGFza1Jlc3VsdHMucHVzaCh0YXNrUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jcmVhdGVUYXNrKGV4cGVyaW1lbnRTbHVnLCBleHBlcmltZW50UmVzcG9uc2UucnVuLmlkLCByb3csIHRhc2tPdXRwdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tJZCA9IHJlc3BvbnNlLmlkO1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBldmFsdWF0b3Igb2YgZXZhbHVhdG9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlRXZhbHVhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdG9yLnJ1bkV4cGVyaW1lbnRFdmFsdWF0b3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRJZDogZXhwZXJpbWVudFJlc3BvbnNlLmV4cGVyaW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudFJ1bklkOiBleHBlcmltZW50UmVzcG9uc2UucnVuLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza1Jlc3VsdDogdGFza091dHB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0Rm9yUmVzdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsIC8vIDIgbWludXRlcyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRpb25SZXN1bHRzLnB1c2goLi4uc2luZ2xlRXZhbHVhdGlvblJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmFsUmVzdWx0cyA9IGV2YWx1YXRpb25SZXN1bHRzLm1hcCgoZXZhbHVhdGlvbikgPT4gZXZhbHVhdGlvbi5yZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0YXNrUmVzdWx0czogdGFza1Jlc3VsdHMsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiB0YXNrRXJyb3JzLFxuICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRJZDogZXhwZXJpbWVudFJlc3BvbnNlLmV4cGVyaW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgcnVuSWQ6IGV4cGVyaW1lbnRSZXNwb25zZS5ydW4uaWQsXG4gICAgICAgICAgICAgICAgZXZhbHVhdGlvbnM6IGV2YWxSZXN1bHRzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZXJpbWVudCBleGVjdXRpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJ9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgdGFzayBmb3IgdGhlIGV4cGVyaW1lbnRcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVUYXNrKGV4cGVyaW1lbnRTbHVnLCBleHBlcmltZW50UnVuSWQsIHRhc2tJbnB1dCwgdGFza091dHB1dCkge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgaW5wdXQ6IHRhc2tJbnB1dCxcbiAgICAgICAgICAgIG91dHB1dDogdGFza091dHB1dCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KGAvdjIvZXhwZXJpbWVudHMvJHtleHBlcmltZW50U2x1Z30vcnVucy8ke2V4cGVyaW1lbnRSdW5JZH0vdGFza2AsIGJvZHkpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgdGFzayBmb3IgZXhwZXJpbWVudCAnJHtleHBlcmltZW50U2x1Z30nYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgYSBuZXcgZXhwZXJpbWVudFxuICAgICAqL1xuICAgIGFzeW5jIGluaXRpYWxpemVFeHBlcmltZW50KHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHJlcXVlc3QuYXV4KSB7XG4gICAgICAgICAgICByZXF1ZXN0LmV4cGVyaW1lbnRSdW5NZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdC5leHBlcmltZW50UnVuTWV0YWRhdGEpLCB7IGF1eDogcmVxdWVzdC5hdXggfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QucmVsYXRlZFJlZikge1xuICAgICAgICAgICAgcmVxdWVzdC5leHBlcmltZW50UnVuTWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3QuZXhwZXJpbWVudFJ1bk1ldGFkYXRhKSwgeyByZWxhdGVkX3JlZjogcmVxdWVzdC5yZWxhdGVkUmVmIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICBzbHVnOiByZXF1ZXN0LnNsdWcsXG4gICAgICAgICAgICBkYXRhc2V0X3NsdWc6IHJlcXVlc3QuZGF0YXNldFNsdWcsXG4gICAgICAgICAgICBkYXRhc2V0X3ZlcnNpb246IHJlcXVlc3QuZGF0YXNldFZlcnNpb24sXG4gICAgICAgICAgICBldmFsdWF0b3Jfc2x1Z3M6IHJlcXVlc3QuZXZhbHVhdG9yU2x1Z3MsXG4gICAgICAgICAgICBleHBlcmltZW50X21ldGFkYXRhOiByZXF1ZXN0LmV4cGVyaW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRfcnVuX21ldGFkYXRhOiByZXF1ZXN0LmV4cGVyaW1lbnRSdW5NZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wdXQoXCIvdjIvZXhwZXJpbWVudHMvaW5pdGlhbGl6ZVwiLCBwYXlsb2FkKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgSlNPTkwgc3RyaW5nIGludG8gbGlzdCBvZiB7Y29sX25hbWU6IGNvbF92YWx1ZX0gZGljdGlvbmFyaWVzXG4gICAgICogU2tpcHMgdGhlIGZpcnN0IGxpbmUgKGNvbHVtbnMgZGVmaW5pdGlvbilcbiAgICAgKi9cbiAgICBwYXJzZUpzb25sVG9Sb3dzKGpzb25sRGF0YSkge1xuICAgICAgICBjb25zdCByb3dzID0gW107XG4gICAgICAgIGNvbnN0IGxpbmVzID0ganNvbmxEYXRhLnRyaW0oKS5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3QgbGluZSAoY29sdW1ucyBkZWZpbml0aW9uKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gSlNPTi5wYXJzZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBpbnZhbGlkIEpTT04gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgZGF0YXNldCByb3dzIGZvciBleHBlcmltZW50IGV4ZWN1dGlvblxuICAgICAqL1xuICAgIGFzeW5jIGdldERhdGFzZXRSb3dzKGRhdGFzZXRTbHVnLCBkYXRhc2V0VmVyc2lvbikge1xuICAgICAgICBpZiAoIWRhdGFzZXRTbHVnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhc2V0IHNsdWcgaXMgcmVxdWlyZWQgZm9yIGV4cGVyaW1lbnQgZXhlY3V0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSBhd2FpdCB0aGlzLmRhdGFzZXRzLmdldFZlcnNpb25Bc0pzb25sKGRhdGFzZXRTbHVnLCBkYXRhc2V0VmVyc2lvbiB8fCBcIlwiKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMucGFyc2VKc29ubFRvUm93cyhkYXRhc2V0KTtcbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGV4cGVyaW1lbnQgcnVuIG9wdGlvbnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZVJ1bk9wdGlvbnModGFzaywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIXRhc2sgfHwgdHlwZW9mIHRhc2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFzayBmdW5jdGlvbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV2YWx1YXRvcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZXZhbHVhdG9ycy5mb3JFYWNoKChldmFsdWF0b3IsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmFsdWF0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFldmFsdWF0b3IudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV2YWx1YXRvciBhdCBpbmRleCAke2luZGV4fSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZhbHVhdG9yIHx8IHR5cGVvZiBldmFsdWF0b3IgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXZhbHVhdG9yIGF0IGluZGV4ICR7aW5kZXh9IG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0IHdpdGggbmFtZSBhbmQgdmVyc2lvbmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZhbHVhdG9yLm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBldmFsdWF0b3IubmFtZSAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWV2YWx1YXRvci5uYW1lLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFdmFsdWF0b3IgYXQgaW5kZXggJHtpbmRleH0gbXVzdCBoYXZlIGEgdmFsaWQgbm9uLWVtcHR5IG5hbWVgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWV2YWx1YXRvci52ZXJzaW9uIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZXZhbHVhdG9yLnZlcnNpb24gIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFldmFsdWF0b3IudmVyc2lvbi50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXZhbHVhdG9yIGF0IGluZGV4ICR7aW5kZXh9IG11c3QgaGF2ZSBhIHZhbGlkIG5vbi1lbXB0eSB2ZXJzaW9uYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgbWFpbiBjbGllbnQgZm9yIGludGVyYWN0aW5nIHdpdGggVHJhY2Vsb29wJ3MgQVBJLlxuICogVGhpcyBjbGllbnQgY2FuIGJlIHVzZWQgZWl0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggdGhlIHNpbmdsZXRvbiBwYXR0ZXJuIHZpYSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBEaXJlY3QgdXNhZ2VcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBUcmFjZWxvb3BDbGllbnQoJ3lvdXItYXBpLWtleScpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaHJvdWdoIGNvbmZpZ3VyYXRpb24gKHJlY29tbWVuZGVkKVxuICogaW5pdGlhbGl6ZSh7IGFwaUtleTogJ3lvdXItYXBpLWtleScsIGFwcE5hbWU6ICd5b3VyLWFwcCcgfSk7XG4gKiBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAqL1xuY2xhc3MgVHJhY2Vsb29wQ2xpZW50IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBUcmFjZWxvb3BDbGllbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGNsaWVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBvcHRpb25zLmFwaUtleTtcbiAgICAgICAgdGhpcy5hcHBOYW1lID0gb3B0aW9ucy5hcHBOYW1lO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPVxuICAgICAgICAgICAgb3B0aW9ucy5iYXNlVXJsIHx8XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuVFJBQ0VMT09QX0JBU0VfVVJMIHx8XG4gICAgICAgICAgICAgICAgXCJodHRwczovL2FwaS50cmFjZWxvb3AuY29tXCI7XG4gICAgICAgIHRoaXMuZXhwZXJpbWVudFNsdWcgPSBvcHRpb25zLmV4cGVyaW1lbnRTbHVnO1xuICAgICAgICB0aGlzLnVzZXJGZWVkYmFjayA9IG5ldyBVc2VyRmVlZGJhY2sodGhpcyk7XG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBuZXcgRGF0YXNldHModGhpcyk7XG4gICAgICAgIHRoaXMuZXhwZXJpbWVudCA9IG5ldyBFeHBlcmltZW50KHRoaXMpO1xuICAgICAgICB0aGlzLmV2YWx1YXRvciA9IG5ldyBFdmFsdWF0b3IodGhpcyk7XG4gICAgfVxuICAgIGFzeW5jIHBvc3QocGF0aCwgYm9keSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2goYCR7dGhpcy5iYXNlVXJsfSR7cGF0aH1gLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFwaUtleX1gLFxuICAgICAgICAgICAgICAgIFwiWC1UcmFjZWxvb3AtU0RLLVZlcnNpb25cIjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0KHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoKGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCwge1xuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFwaUtleX1gLFxuICAgICAgICAgICAgICAgIFwiWC1UcmFjZWxvb3AtU0RLLVZlcnNpb25cIjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIHB1dChwYXRoLCBib2R5KSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaChgJHt0aGlzLmJhc2VVcmx9JHtwYXRofWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YCxcbiAgICAgICAgICAgICAgICBcIlgtVHJhY2Vsb29wLVNESy1WZXJzaW9uXCI6IHRoaXMudmVyc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZShwYXRoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaChgJHt0aGlzLmJhc2VVcmx9JHtwYXRofWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YCxcbiAgICAgICAgICAgICAgICBcIlgtVHJhY2Vsb29wLVNESy1WZXJzaW9uXCI6IHRoaXMudmVyc2lvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY29uc3QgdmFsaWRhdGVDb25maWd1cmF0aW9uID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IGFwaUtleSwgdHJhY2Vsb29wU3luY0VuYWJsZWQsIHRyYWNlbG9vcFN5bmNNYXhSZXRyaWVzLCB0cmFjZWxvb3BTeW5jUG9sbGluZ0ludGVydmFsLCB0cmFjZWxvb3BTeW5jRGV2UG9sbGluZ0ludGVydmFsLCB9ID0gb3B0aW9ucztcbiAgICBpZiAoYXBpS2V5ICYmIHR5cGVvZiBhcGlLZXkgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluaXRpYWxpemF0aW9uRXJyb3IoJ1wiYXBpS2V5XCIgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAodHJhY2Vsb29wU3luY0VuYWJsZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0cmFjZWxvb3BTeW5jTWF4UmV0cmllcyAhPT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdHJhY2Vsb29wU3luY01heFJldHJpZXMgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEluaXRpYWxpemF0aW9uRXJyb3IoJ1widHJhY2Vsb29wU3luY01heFJldHJpZXNcIiBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFjZWxvb3BTeW5jUG9sbGluZ0ludGVydmFsICE9PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0cmFjZWxvb3BTeW5jUG9sbGluZ0ludGVydmFsIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbml0aWFsaXphdGlvbkVycm9yKCdcInRyYWNlbG9vcFN5bmNQb2xsaW5nSW50ZXJ2YWxcIiBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFjZWxvb3BTeW5jRGV2UG9sbGluZ0ludGVydmFsICE9PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0cmFjZWxvb3BTeW5jRGV2UG9sbGluZ0ludGVydmFsIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbml0aWFsaXphdGlvbkVycm9yKCdcInRyYWNlbG9vcFN5bmNEZXZQb2xsaW5nSW50ZXJ2YWxcIiBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCBUUkFDRVJfTkFNRSA9IFwiQHRyYWNlbG9vcC9ub2RlLXNlcnZlci1zZGtcIjtcbmNvbnN0IFdPUktGTE9XX05BTUVfS0VZID0gY3JlYXRlQ29udGV4dEtleShcIndvcmtmbG93X25hbWVcIik7XG5jb25zdCBFTlRJVFlfTkFNRV9LRVkgPSBjcmVhdGVDb250ZXh0S2V5KFwiZW50aXR5X25hbWVcIik7XG5jb25zdCBBR0VOVF9OQU1FX0tFWSA9IGNyZWF0ZUNvbnRleHRLZXkoXCJhZ2VudF9uYW1lXCIpO1xuY29uc3QgQVNTT0NBVElPTl9QUk9QRVJUSUVTX0tFWSA9IGNyZWF0ZUNvbnRleHRLZXkoXCJhc3NvY2lhdGlvbl9wcm9wZXJ0aWVzXCIpO1xuY29uc3QgZ2V0VHJhY2VyID0gKCkgPT4ge1xuICAgIHJldHVybiB0cmFjZS5nZXRUcmFjZXIoVFJBQ0VSX05BTUUpO1xufTtcbmNvbnN0IGdldFRyYWNlbG9vcFRyYWNlciA9IGdldFRyYWNlcjtcbmNvbnN0IGdldEVudGl0eVBhdGggPSAoZW50aXR5Q29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBlbnRpdHlDb250ZXh0LmdldFZhbHVlKEVOVElUWV9OQU1FX0tFWSk7XG4gICAgcmV0dXJuIHBhdGggPyBgJHtwYXRofWAgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBBSV9HRU5FUkFURV9URVhUID0gXCJhaS5nZW5lcmF0ZVRleHRcIjtcbmNvbnN0IEFJX0dFTkVSQVRFX1RFWFRfRE9fR0VORVJBVEUgPSBcImFpLmdlbmVyYXRlVGV4dC5kb0dlbmVyYXRlXCI7XG5jb25zdCBBSV9HRU5FUkFURV9PQkpFQ1RfRE9fR0VORVJBVEUgPSBcImFpLmdlbmVyYXRlT2JqZWN0LmRvR2VuZXJhdGVcIjtcbmNvbnN0IEFJX1NUUkVBTV9URVhUX0RPX1NUUkVBTSA9IFwiYWkuc3RyZWFtVGV4dC5kb1N0cmVhbVwiO1xuY29uc3QgSEFORExFRF9TUEFOX05BTUVTID0ge1xuICAgIFtBSV9HRU5FUkFURV9URVhUXTogXCJydW4uYWlcIixcbiAgICBbQUlfR0VORVJBVEVfVEVYVF9ET19HRU5FUkFURV06IFwidGV4dC5nZW5lcmF0ZVwiLFxuICAgIFtBSV9HRU5FUkFURV9PQkpFQ1RfRE9fR0VORVJBVEVdOiBcIm9iamVjdC5nZW5lcmF0ZVwiLFxuICAgIFtBSV9TVFJFQU1fVEVYVF9ET19TVFJFQU1dOiBcInRleHQuc3RyZWFtXCIsXG59O1xuY29uc3QgVE9PTF9TUEFOX05BTUUgPSBcImFpLnRvb2xDYWxsXCI7XG5jb25zdCBBSV9SRVNQT05TRV9URVhUID0gXCJhaS5yZXNwb25zZS50ZXh0XCI7XG5jb25zdCBBSV9SRVNQT05TRV9PQkpFQ1QgPSBcImFpLnJlc3BvbnNlLm9iamVjdFwiO1xuY29uc3QgQUlfUkVTUE9OU0VfVE9PTF9DQUxMUyA9IFwiYWkucmVzcG9uc2UudG9vbENhbGxzXCI7XG5jb25zdCBBSV9QUk9NUFRfTUVTU0FHRVMgPSBcImFpLnByb21wdC5tZXNzYWdlc1wiO1xuY29uc3QgQUlfUFJPTVBUID0gXCJhaS5wcm9tcHRcIjtcbmNvbnN0IEFJX1VTQUdFX1BST01QVF9UT0tFTlMgPSBcImFpLnVzYWdlLnByb21wdFRva2Vuc1wiO1xuY29uc3QgQUlfVVNBR0VfQ09NUExFVElPTl9UT0tFTlMgPSBcImFpLnVzYWdlLmNvbXBsZXRpb25Ub2tlbnNcIjtcbmNvbnN0IEFJX01PREVMX1BST1ZJREVSID0gXCJhaS5tb2RlbC5wcm92aWRlclwiO1xuY29uc3QgQUlfUFJPTVBUX1RPT0xTID0gXCJhaS5wcm9tcHQudG9vbHNcIjtcbmNvbnN0IEFJX1RFTEVNRVRSWV9NRVRBREFUQV9QUkVGSVggPSBcImFpLnRlbGVtZXRyeS5tZXRhZGF0YS5cIjtcbmNvbnN0IFRZUEVfVEVYVCA9IFwidGV4dFwiO1xuY29uc3QgVFlQRV9UT09MX0NBTEwgPSBcInRvb2xfY2FsbFwiO1xuY29uc3QgUk9MRV9BU1NJU1RBTlQgPSBcImFzc2lzdGFudFwiO1xuY29uc3QgUk9MRV9VU0VSID0gXCJ1c2VyXCI7XG4vLyBWZW5kb3IgbWFwcGluZyBmcm9tIEFJIFNESyBwcm92aWRlciBwcmVmaXhlcyB0byBzdGFuZGFyZGl6ZWQgTExNX1NZU1RFTSB2YWx1ZXNcbi8vIFVzZXMgcHJlZml4ZXMgdG8gbWF0Y2ggQUkgU0RLIHBhdHRlcm5zIGxpa2UgXCJvcGVuYWkuY2hhdFwiLCBcImFudGhyb3BpYy5tZXNzYWdlc1wiLCBldGMuXG5jb25zdCBWRU5ET1JfTUFQUElORyA9IHtcbiAgICBvcGVuYWk6IFwiT3BlbkFJXCIsXG4gICAgXCJhenVyZS1vcGVuYWlcIjogXCJBenVyZVwiLFxuICAgIGFudGhyb3BpYzogXCJBbnRocm9waWNcIixcbiAgICBjb2hlcmU6IFwiQ29oZXJlXCIsXG4gICAgbWlzdHJhbDogXCJNaXN0cmFsQUlcIixcbiAgICBncm9xOiBcIkdyb3FcIixcbiAgICByZXBsaWNhdGU6IFwiUmVwbGljYXRlXCIsXG4gICAgdG9nZXRoZXI6IFwiVG9nZXRoZXJBSVwiLFxuICAgIGZpcmV3b3JrczogXCJGaXJld29ya3NcIixcbiAgICBkZWVwc2VlazogXCJEZWVwU2Vla1wiLFxuICAgIHBlcnBsZXhpdHk6IFwiUGVycGxleGl0eVwiLFxuICAgIFwiYW1hem9uLWJlZHJvY2tcIjogXCJBV1NcIixcbiAgICBiZWRyb2NrOiBcIkFXU1wiLFxuICAgIGdvb2dsZTogXCJHb29nbGVcIixcbiAgICB2ZXJ0ZXg6IFwiR29vZ2xlXCIsXG4gICAgb2xsYW1hOiBcIk9sbGFtYVwiLFxuICAgIGh1Z2dpbmdmYWNlOiBcIkh1Z2dpbmdGYWNlXCIsXG4gICAgb3BlbnJvdXRlcjogXCJPcGVuUm91dGVyXCIsXG59O1xuY29uc3QgdHJhbnNmb3JtUmVzcG9uc2VUZXh0ID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICBpZiAoQUlfUkVTUE9OU0VfVEVYVCBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLmNvbnRlbnRgXSA9XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW0FJX1JFU1BPTlNFX1RFWFRdO1xuICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5yb2xlYF0gPSBST0xFX0FTU0lTVEFOVDtcbiAgICAgICAgY29uc3Qgb3V0cHV0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIHJvbGU6IFJPTEVfQVNTSVNUQU5ULFxuICAgICAgICAgICAgcGFydHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFRZUEVfVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogYXR0cmlidXRlc1tBSV9SRVNQT05TRV9URVhUXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5MTE1fT1VUUFVUX01FU1NBR0VTXSA9IEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgIG91dHB1dE1lc3NhZ2UsXG4gICAgICAgIF0pO1xuICAgICAgICBkZWxldGUgYXR0cmlidXRlc1tBSV9SRVNQT05TRV9URVhUXTtcbiAgICB9XG59O1xuY29uc3QgdHJhbnNmb3JtUmVzcG9uc2VPYmplY3QgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgIGlmIChBSV9SRVNQT05TRV9PQkpFQ1QgaW4gYXR0cmlidXRlcykge1xuICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5jb250ZW50YF0gPVxuICAgICAgICAgICAgYXR0cmlidXRlc1tBSV9SRVNQT05TRV9PQkpFQ1RdO1xuICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uMC5yb2xlYF0gPSBST0xFX0FTU0lTVEFOVDtcbiAgICAgICAgY29uc3Qgb3V0cHV0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIHJvbGU6IFJPTEVfQVNTSVNUQU5ULFxuICAgICAgICAgICAgcGFydHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFRZUEVfVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogYXR0cmlidXRlc1tBSV9SRVNQT05TRV9PQkpFQ1RdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9PVVRQVVRfTUVTU0FHRVNdID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgb3V0cHV0TWVzc2FnZSxcbiAgICAgICAgXSk7XG4gICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzW0FJX1JFU1BPTlNFX09CSkVDVF07XG4gICAgfVxufTtcbmNvbnN0IHRyYW5zZm9ybVJlc3BvbnNlVG9vbENhbGxzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICBpZiAoQUlfUkVTUE9OU0VfVE9PTF9DQUxMUyBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sQ2FsbHMgPSBKU09OLnBhcnNlKGF0dHJpYnV0ZXNbQUlfUkVTUE9OU0VfVE9PTF9DQUxMU10pO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fQ09NUExFVElPTlN9LjAucm9sZWBdID0gUk9MRV9BU1NJU1RBTlQ7XG4gICAgICAgICAgICBjb25zdCB0b29sQ2FsbFBhcnRzID0gW107XG4gICAgICAgICAgICB0b29sQ2FsbHMuZm9yRWFjaCgodG9vbENhbGwsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRvb2xDYWxsLnRvb2xDYWxsVHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnRvb2xfY2FsbHMuJHtpbmRleH0ubmFtZWBdID0gdG9vbENhbGwudG9vbE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4wLnRvb2xfY2FsbHMuJHtpbmRleH0uYXJndW1lbnRzYF0gPSB0b29sQ2FsbC5hcmdzO1xuICAgICAgICAgICAgICAgICAgICB0b29sQ2FsbFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVFlQRV9UT09MX0NBTEwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sX2NhbGw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0b29sQ2FsbC50b29sTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHM6IHRvb2xDYWxsLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0b29sQ2FsbFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICByb2xlOiBST0xFX0FTU0lTVEFOVCxcbiAgICAgICAgICAgICAgICAgICAgcGFydHM6IHRvb2xDYWxsUGFydHMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9PVVRQVVRfTUVTU0FHRVNdID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRNZXNzYWdlLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbQUlfUkVTUE9OU0VfVE9PTF9DQUxMU107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgcGFyc2luZyBlcnJvcnNcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBwcm9jZXNzTWVzc2FnZUNvbnRlbnQgPSAoY29udGVudCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKSB7XG4gICAgICAgIGNvbnN0IHRleHRJdGVtcyA9IGNvbnRlbnQuZmlsdGVyKChpdGVtKSA9PiBpdGVtICYmXG4gICAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaXRlbS50eXBlID09PSBUWVBFX1RFWFQgJiZcbiAgICAgICAgICAgIGl0ZW0udGV4dCk7XG4gICAgICAgIGlmICh0ZXh0SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgam9pbmVkVGV4dCA9IHRleHRJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dCkuam9pbihcIiBcIik7XG4gICAgICAgICAgICByZXR1cm4gam9pbmVkVGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjb250ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGVudCAmJiB0eXBlb2YgY29udGVudCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoY29udGVudC50eXBlID09PSBUWVBFX1RFWFQgJiYgY29udGVudC50ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjb250ZW50KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsbFRleHRJdGVtcyA9IHBhcnNlZC5ldmVyeSgoaXRlbSkgPT4gaXRlbSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPT09IFRZUEVfVEVYVCAmJlxuICAgICAgICAgICAgICAgICAgICBpdGVtLnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChhbGxUZXh0SXRlbXMgJiYgcGFyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZC5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dCkuam9pbihcIiBcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgcGFyc2luZyBlcnJvcnNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhjb250ZW50KTtcbn07XG5jb25zdCB0cmFuc2Zvcm1Ub29scyA9IChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgaWYgKEFJX1BST01QVF9UT09MUyBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29scyA9IGF0dHJpYnV0ZXNbQUlfUFJPTVBUX1RPT0xTXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvb2xzKSkge1xuICAgICAgICAgICAgICAgIHRvb2xzLmZvckVhY2goKHRvb2xJdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9vbCA9IHRvb2xJdGVtO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRvb2xJdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2wgPSBKU09OLnBhcnNlKHRvb2xJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodG9vbCAmJiB0eXBlb2YgdG9vbCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2wubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfRlVOQ1RJT05TfS4ke2luZGV4fS5uYW1lYF0gPSB0b29sLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9vbC5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfRlVOQ1RJT05TfS4ke2luZGV4fS5kZXNjcmlwdGlvbmBdID0gdG9vbC5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b29sLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9SRVFVRVNUX0ZVTkNUSU9OU30uJHtpbmRleH0ucGFyYW1ldGVyc2BdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRvb2wucGFyYW1ldGVycyA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0b29sLnBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkodG9vbC5wYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbQUlfUFJPTVBUX1RPT0xTXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBwYXJzaW5nIGVycm9yc1xuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IHRyYW5zZm9ybVByb21wdHMgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgIGlmIChBSV9QUk9NUFRfTUVTU0FHRVMgaW4gYXR0cmlidXRlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGpzb25TdHJpbmcgPSBhdHRyaWJ1dGVzW0FJX1BST01QVF9NRVNTQUdFU107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICBqc29uU3RyaW5nID0ganNvblN0cmluZy5yZXBsYWNlKC9cXFxcJy9nLCBcIidcIik7XG4gICAgICAgICAgICAgICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCBcIlxcXFxcXFxcXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlcyA9IFtdO1xuICAgICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaCgobXNnLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZENvbnRlbnQgPSBwcm9jZXNzTWVzc2FnZUNvbnRlbnQobXNnLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRLZXkgPSBgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtpbmRleH0uY29udGVudGA7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tjb250ZW50S2V5XSA9IHByb2Nlc3NlZENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtpbmRleH0ucm9sZWBdID0gbXNnLnJvbGU7XG4gICAgICAgICAgICAgICAgLy8gQWRkIHRvIE9wZW5UZWxlbWV0cnkgc3RhbmRhcmQgZ2VuX2FpLmlucHV0Lm1lc3NhZ2VzIGZvcm1hdFxuICAgICAgICAgICAgICAgIGlucHV0TWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IG1zZy5yb2xlLFxuICAgICAgICAgICAgICAgICAgICBwYXJ0czogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRZUEVfVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBwcm9jZXNzZWRDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBPcGVuVGVsZW1ldHJ5IHN0YW5kYXJkIGlucHV0IG1lc3NhZ2VzIGF0dHJpYnV0ZVxuICAgICAgICAgICAgaWYgKGlucHV0TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuTExNX0lOUFVUX01FU1NBR0VTXSA9XG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGlucHV0TWVzc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbQUlfUFJPTVBUX01FU1NBR0VTXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2IpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBwYXJzaW5nIGVycm9yc1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChBSV9QUk9NUFQgaW4gYXR0cmlidXRlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcHJvbXB0RGF0YSA9IEpTT04ucGFyc2UoYXR0cmlidXRlc1tBSV9QUk9NUFRdKTtcbiAgICAgICAgICAgIGlmIChwcm9tcHREYXRhLnByb21wdCAmJiB0eXBlb2YgcHJvbXB0RGF0YS5wcm9tcHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9QUk9NUFRTfS4wLmNvbnRlbnRgXSA9XG4gICAgICAgICAgICAgICAgICAgIHByb21wdERhdGEucHJvbXB0O1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LjAucm9sZWBdID0gUk9MRV9VU0VSO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZTogUk9MRV9VU0VSLFxuICAgICAgICAgICAgICAgICAgICBwYXJ0czogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRZUEVfVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBwcm9tcHREYXRhLnByb21wdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9JTlBVVF9NRVNTQUdFU10gPSBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgICAgIGlucHV0TWVzc2FnZSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlc1tBSV9QUk9NUFRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYykge1xuICAgICAgICAgICAgLy8gSWdub3JlIHBhcnNpbmcgZXJyb3JzXG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgdHJhbnNmb3JtUHJvbXB0VG9rZW5zID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICBpZiAoQUlfVVNBR0VfUFJPTVBUX1RPS0VOUyBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX1BST01QVF9UT0tFTlN9YF0gPVxuICAgICAgICAgICAgYXR0cmlidXRlc1tBSV9VU0FHRV9QUk9NUFRfVE9LRU5TXTtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbQUlfVVNBR0VfUFJPTVBUX1RPS0VOU107XG4gICAgfVxufTtcbmNvbnN0IHRyYW5zZm9ybUNvbXBsZXRpb25Ub2tlbnMgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgIGlmIChBSV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOUyBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TfWBdID1cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbQUlfVVNBR0VfQ09NUExFVElPTl9UT0tFTlNdO1xuICAgICAgICBkZWxldGUgYXR0cmlidXRlc1tBSV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU107XG4gICAgfVxufTtcbmNvbnN0IGNhbGN1bGF0ZVRvdGFsVG9rZW5zID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICBjb25zdCBwcm9tcHRUb2tlbnMgPSBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9QUk9NUFRfVE9LRU5TfWBdO1xuICAgIGNvbnN0IGNvbXBsZXRpb25Ub2tlbnMgPSBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU31gXTtcbiAgICBpZiAocHJvbXB0VG9rZW5zICYmIGNvbXBsZXRpb25Ub2tlbnMpIHtcbiAgICAgICAgYXR0cmlidXRlc1tgJHtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfVE9UQUxfVE9LRU5TfWBdID1cbiAgICAgICAgICAgIE51bWJlcihwcm9tcHRUb2tlbnMpICsgTnVtYmVyKGNvbXBsZXRpb25Ub2tlbnMpO1xuICAgIH1cbn07XG5jb25zdCB0cmFuc2Zvcm1WZW5kb3IgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgIGlmIChBSV9NT0RFTF9QUk9WSURFUiBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IHZlbmRvciA9IGF0dHJpYnV0ZXNbQUlfTU9ERUxfUFJPVklERVJdO1xuICAgICAgICAvLyBGaW5kIG1hdGNoaW5nIHZlbmRvciBwcmVmaXggaW4gbWFwcGluZ1xuICAgICAgICBsZXQgbWFwcGVkVmVuZG9yID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiB2ZW5kb3IgPT09IFwic3RyaW5nXCIgJiYgdmVuZG9yLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJlZml4IG9mIE9iamVjdC5rZXlzKFZFTkRPUl9NQVBQSU5HKSkge1xuICAgICAgICAgICAgICAgIGlmICh2ZW5kb3Iuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcHBlZFZlbmRvciA9IFZFTkRPUl9NQVBQSU5HW3ByZWZpeF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzW1NwYW5BdHRyaWJ1dGVzLkxMTV9TWVNURU1dID0gbWFwcGVkVmVuZG9yIHx8IHZlbmRvcjtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbQUlfTU9ERUxfUFJPVklERVJdO1xuICAgIH1cbn07XG5jb25zdCB0cmFuc2Zvcm1UZWxlbWV0cnlNZXRhZGF0YSA9IChhdHRyaWJ1dGVzLCBzcGFuTmFtZSkgPT4ge1xuICAgIGNvbnN0IGtleXNUb0RlbGV0ZSA9IFtdO1xuICAgIGxldCBhZ2VudE5hbWUgPSBudWxsO1xuICAgIC8vIEZpbmQgYWxsIGFpLnRlbGVtZXRyeS5tZXRhZGF0YS4qIGF0dHJpYnV0ZXNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoQUlfVEVMRU1FVFJZX01FVEFEQVRBX1BSRUZJWCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0ga2V5LnN1YnN0cmluZyhBSV9URUxFTUVUUllfTUVUQURBVEFfUFJFRklYLmxlbmd0aCk7XG4gICAgICAgICAgICAvLyBBbHdheXMgbWFyayBmb3IgZGVsZXRpb24gc2luY2UgaXQncyBhIHRlbGVtZXRyeSBtZXRhZGF0YSBhdHRyaWJ1dGVcbiAgICAgICAgICAgIGtleXNUb0RlbGV0ZS5wdXNoKGtleSk7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGFLZXkgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gc3RyaW5nIGZvciBhc3NvY2lhdGlvbiBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGFnZW50LXNwZWNpZmljIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhS2V5ID09PSBcImFnZW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWdlbnROYW1lID0gc3RyaW5nVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFsc28gc2V0IGFzIHRyYWNlbG9vcCBhc3NvY2lhdGlvbiBwcm9wZXJ0eSBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2Ake1NwYW5BdHRyaWJ1dGVzLlRSQUNFTE9PUF9BU1NPQ0lBVElPTl9QUk9QRVJUSUVTfS4ke21ldGFkYXRhS2V5fWBdID0gc3RyaW5nVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2V0IGFnZW50IGF0dHJpYnV0ZXMgaWYgZGV0ZWN0ZWQgYW5kIHRoaXMgaXMgdGhlIHJvb3QgQUkgc3BhblxuICAgIGlmIChhZ2VudE5hbWUpIHtcbiAgICAgICAgLy8gU2V0IGFnZW50IG5hbWUgb24gYWxsIHNwYW5zIGZvciBjb250ZXh0XG4gICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuR0VOX0FJX0FHRU5UX05BTUVdID0gYWdlbnROYW1lO1xuICAgICAgICAvLyBPbmx5IHNldCBzcGFuIGtpbmQgdG8gXCJhZ2VudFwiIGZvciB0aGUgcm9vdCBBSSBzcGFuIChydW4uYWkpXG4gICAgICAgIC8vIE5vdGU6IEF0IHRoaXMgcG9pbnQsIHNwYW4gbmFtZXMgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmb3JtZWRcbiAgICAgICAgaWYgKHNwYW5OYW1lID09PSBIQU5ETEVEX1NQQU5fTkFNRVNbQUlfR0VORVJBVEVfVEVYVF0pIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX1NQQU5fS0lORF0gPVxuICAgICAgICAgICAgICAgIFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzLkFHRU5UO1xuICAgICAgICAgICAgYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfRU5USVRZX05BTUVdID0gYWdlbnROYW1lO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSBvcmlnaW5hbCBhaS50ZWxlbWV0cnkubWV0YWRhdGEuKiBhdHRyaWJ1dGVzXG4gICAga2V5c1RvRGVsZXRlLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBkZWxldGUgYXR0cmlidXRlc1trZXldO1xuICAgIH0pO1xuICAgIC8vIE5vdGU6IENvbnRleHQgc2V0dGluZyBmb3IgY2hpbGQgc3BhbiBpbmhlcml0YW5jZSBzaG91bGQgYmUgZG9uZSBiZWZvcmUgc3BhbiBjcmVhdGlvbixcbiAgICAvLyBub3QgZHVyaW5nIHRyYW5zZm9ybWF0aW9uLiBVc2UgYHdpdGhUZWxlbWV0cnlNZXRhZGF0YUNvbnRleHRgIGZ1bmN0aW9uIGZvciBjb250ZXh0IHByb3BhZ2F0aW9uLlxufTtcbmNvbnN0IHRyYW5zZm9ybUxMTVNwYW5zID0gKGF0dHJpYnV0ZXMsIHNwYW5OYW1lKSA9PiB7XG4gICAgdHJhbnNmb3JtUmVzcG9uc2VUZXh0KGF0dHJpYnV0ZXMpO1xuICAgIHRyYW5zZm9ybVJlc3BvbnNlT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyYW5zZm9ybVJlc3BvbnNlVG9vbENhbGxzKGF0dHJpYnV0ZXMpO1xuICAgIHRyYW5zZm9ybVByb21wdHMoYXR0cmlidXRlcyk7XG4gICAgdHJhbnNmb3JtVG9vbHMoYXR0cmlidXRlcyk7XG4gICAgdHJhbnNmb3JtUHJvbXB0VG9rZW5zKGF0dHJpYnV0ZXMpO1xuICAgIHRyYW5zZm9ybUNvbXBsZXRpb25Ub2tlbnMoYXR0cmlidXRlcyk7XG4gICAgY2FsY3VsYXRlVG90YWxUb2tlbnMoYXR0cmlidXRlcyk7XG4gICAgdHJhbnNmb3JtVmVuZG9yKGF0dHJpYnV0ZXMpO1xuICAgIHRyYW5zZm9ybVRlbGVtZXRyeU1ldGFkYXRhKGF0dHJpYnV0ZXMsIHNwYW5OYW1lKTtcbn07XG5jb25zdCB0cmFuc2Zvcm1Ub29sQ2FsbHMgPSAoc3BhbikgPT4ge1xuICAgIGlmIChzcGFuLmF0dHJpYnV0ZXNbXCJhaS50b29sQ2FsbC5hcmdzXCJdICYmXG4gICAgICAgIHNwYW4uYXR0cmlidXRlc1tcImFpLnRvb2xDYWxsLnJlc3VsdFwiXSkge1xuICAgICAgICBzcGFuLmF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9JTlBVVF0gPVxuICAgICAgICAgICAgc3Bhbi5hdHRyaWJ1dGVzW1wiYWkudG9vbENhbGwuYXJnc1wiXTtcbiAgICAgICAgZGVsZXRlIHNwYW4uYXR0cmlidXRlc1tcImFpLnRvb2xDYWxsLmFyZ3NcIl07XG4gICAgICAgIHNwYW4uYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfRU5USVRZX09VVFBVVF0gPVxuICAgICAgICAgICAgc3Bhbi5hdHRyaWJ1dGVzW1wiYWkudG9vbENhbGwucmVzdWx0XCJdO1xuICAgICAgICBkZWxldGUgc3Bhbi5hdHRyaWJ1dGVzW1wiYWkudG9vbENhbGwucmVzdWx0XCJdO1xuICAgICAgICBzcGFuLmF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX1NQQU5fS0lORF0gPVxuICAgICAgICAgICAgVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuVE9PTDtcbiAgICAgICAgLy8gU2V0IGVudGl0eSBuYW1lIGZyb20gdG9vbCBjYWxsIG5hbWVcbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSBzcGFuLmF0dHJpYnV0ZXNbXCJhaS50b29sQ2FsbC5uYW1lXCJdO1xuICAgICAgICBpZiAodG9vbE5hbWUpIHtcbiAgICAgICAgICAgIHNwYW4uYXR0cmlidXRlc1tTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfRU5USVRZX05BTUVdID0gdG9vbE5hbWU7XG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3Qgc2hvdWxkSGFuZGxlU3BhbiA9IChzcGFuKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoKF9hID0gc3Bhbi5pbnN0cnVtZW50YXRpb25TY29wZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSBcImFpXCI7XG59O1xuY29uc3QgdHJhbnNmb3JtQWlTZGtTcGFuTmFtZXMgPSAoc3BhbikgPT4ge1xuICAgIGlmIChzcGFuLm5hbWUgPT09IFRPT0xfU1BBTl9OQU1FKSB7XG4gICAgICAgIHNwYW4udXBkYXRlTmFtZShgJHtzcGFuLmF0dHJpYnV0ZXNbXCJhaS50b29sQ2FsbC5uYW1lXCJdfS50b29sYCk7XG4gICAgfVxuICAgIGlmIChzcGFuLm5hbWUgaW4gSEFORExFRF9TUEFOX05BTUVTKSB7XG4gICAgICAgIHNwYW4udXBkYXRlTmFtZShIQU5ETEVEX1NQQU5fTkFNRVNbc3Bhbi5uYW1lXSk7XG4gICAgfVxufTtcbmNvbnN0IHRyYW5zZm9ybUFpU2RrU3BhbkF0dHJpYnV0ZXMgPSAoc3BhbikgPT4ge1xuICAgIGlmICghc2hvdWxkSGFuZGxlU3BhbihzcGFuKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyYW5zZm9ybUxMTVNwYW5zKHNwYW4uYXR0cmlidXRlcywgc3Bhbi5uYW1lKTtcbiAgICB0cmFuc2Zvcm1Ub29sQ2FsbHMoc3Bhbik7XG59O1xuXG5mdW5jdGlvbiBwYXJzZUtleVBhaXJzSW50b1JlY29yZChrZXlQYWlycykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGlmICgha2V5UGFpcnMpXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAga2V5UGFpcnMuc3BsaXQoXCIsXCIpLmZvckVhY2goKHBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmIChrZXkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXkudHJpbSgpXSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IEFMTF9JTlNUUlVNRU5UQVRJT05fTElCUkFSSUVTID0gXCJhbGxcIjtcbi8vIFN0b3JlIGFnZW50IG5hbWVzIHBlciB0cmFjZSBmb3IgcHJvcGFnYXRpb24gdG8gY2hpbGQgc3BhbnMgKHRvb2wgY2FsbHMpXG4vLyBNYXBzIHRyYWNlIElEIHRvIHthZ2VudE5hbWUsIHRpbWVzdGFtcH0gZm9yIFRUTC1iYXNlZCBjbGVhbnVwXG5jb25zdCB0cmFjZUFnZW50TmFtZXMgPSBuZXcgTWFwKCk7XG4vLyBUVEwgZm9yIHRyYWNlIGFnZW50IG5hbWVzICg1IG1pbnV0ZXMpXG5jb25zdCBUUkFDRV9BR0VOVF9OQU1FX1RUTCA9IDUgKiA2MCAqIDEwMDA7XG4vKipcbiAqIENsZWFucyB1cCBleHBpcmVkIHRyYWNlIGFnZW50IG5hbWUgZW50cmllcyBiYXNlZCBvbiBUVExcbiAqL1xuY29uc3QgY2xlYW51cEV4cGlyZWRUcmFjZUFnZW50TmFtZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFt0cmFjZUlkLCBlbnRyeV0gb2YgdHJhY2VBZ2VudE5hbWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAobm93IC0gZW50cnkudGltZXN0YW1wID4gVFJBQ0VfQUdFTlRfTkFNRV9UVEwpIHtcbiAgICAgICAgICAgIHRyYWNlQWdlbnROYW1lcy5kZWxldGUodHJhY2VJZCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGFuIGlzIGEgcm9vdCBzcGFuIChoYXMgbm8gcGFyZW50KVxuICovXG5jb25zdCBpc1Jvb3RTcGFuID0gKHNwYW4pID0+IHtcbiAgICBjb25zdCBwYXJlbnRDb250ZXh0ID0gc3Bhbi5wYXJlbnRTcGFuQ29udGV4dDtcbiAgICByZXR1cm4gKCFwYXJlbnRDb250ZXh0IHx8XG4gICAgICAgICFwYXJlbnRDb250ZXh0LnNwYW5JZCB8fFxuICAgICAgICBwYXJlbnRDb250ZXh0LnNwYW5JZCA9PT0gXCIwMDAwMDAwMDAwMDAwMDAwXCIpO1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gcHJvY2Vzc29yIHdpdGggVHJhY2Vsb29wJ3MgY3VzdG9tIHNwYW4gaGFuZGxpbmcgbG9naWMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb2YgdGhlIGZ1bGwgU0RLIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc3BhbiBwcm9jZXNzb3JcbiAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBTcGFuUHJvY2Vzc29yIGluc3RhbmNlXG4gKi9cbmNvbnN0IGNyZWF0ZVNwYW5Qcm9jZXNzb3IgPSAob3B0aW9ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB1cmwgPSBgJHtvcHRpb25zLmJhc2VVcmwgfHwgcHJvY2Vzcy5lbnYuVFJBQ0VMT09QX0JBU0VfVVJMIHx8IFwiaHR0cHM6Ly9hcGkudHJhY2Vsb29wLmNvbVwifS92MS90cmFjZXNgO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHxcbiAgICAgICAgKHByb2Nlc3MuZW52LlRSQUNFTE9PUF9IRUFERVJTXG4gICAgICAgICAgICA/IHBhcnNlS2V5UGFpcnNJbnRvUmVjb3JkKHByb2Nlc3MuZW52LlRSQUNFTE9PUF9IRUFERVJTKVxuICAgICAgICAgICAgOiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFwaUtleX1gIH0pO1xuICAgIGNvbnN0IHRyYWNlRXhwb3J0ZXIgPSAoX2EgPSBvcHRpb25zLmV4cG9ydGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoe1xuICAgICAgICB1cmwsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgfSk7XG4gICAgY29uc3Qgc3BhblByb2Nlc3NvciA9IG9wdGlvbnMuZGlzYWJsZUJhdGNoXG4gICAgICAgID8gbmV3IFNpbXBsZVNwYW5Qcm9jZXNzb3IodHJhY2VFeHBvcnRlcilcbiAgICAgICAgOiBuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKHRyYWNlRXhwb3J0ZXIpO1xuICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBvbkVuZCBtZXRob2RcbiAgICBjb25zdCBvcmlnaW5hbE9uRW5kID0gc3BhblByb2Nlc3Nvci5vbkVuZC5iaW5kKHNwYW5Qcm9jZXNzb3IpO1xuICAgIHNwYW5Qcm9jZXNzb3Iub25TdGFydCA9IG9uU3BhblN0YXJ0O1xuICAgIGlmIChvcHRpb25zLmFsbG93ZWRJbnN0cnVtZW50YXRpb25MaWJyYXJpZXMgPT09IEFMTF9JTlNUUlVNRU5UQVRJT05fTElCUkFSSUVTKSB7XG4gICAgICAgIHNwYW5Qcm9jZXNzb3Iub25FbmQgPSBvblNwYW5FbmQob3JpZ2luYWxPbkVuZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBpbnN0cnVtZW50YXRpb25MaWJyYXJpZXMgPSBbLi4udHJhY2Vsb29wSW5zdHJ1bWVudGF0aW9uTGlicmFyaWVzXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dlZEluc3RydW1lbnRhdGlvbkxpYnJhcmllcykge1xuICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uTGlicmFyaWVzLnB1c2goLi4ub3B0aW9ucy5hbGxvd2VkSW5zdHJ1bWVudGF0aW9uTGlicmFyaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuUHJvY2Vzc29yLm9uRW5kID0gb25TcGFuRW5kKG9yaWdpbmFsT25FbmQsIGluc3RydW1lbnRhdGlvbkxpYnJhcmllcyk7XG4gICAgfVxuICAgIHJldHVybiBzcGFuUHJvY2Vzc29yO1xufTtcbmNvbnN0IHRyYWNlbG9vcEluc3RydW1lbnRhdGlvbkxpYnJhcmllcyA9IFtcbiAgICBcImFpXCIsXG4gICAgXCJAdHJhY2Vsb29wL25vZGUtc2VydmVyLXNka1wiLFxuICAgIFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tb3BlbmFpXCIsXG4gICAgXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1sYW5nY2hhaW5cIixcbiAgICBcIkB0cmFjZWxvb3AvaW5zdHJ1bWVudGF0aW9uLWNocm9tYVwiLFxuICAgIFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tYW50aHJvcGljXCIsXG4gICAgXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1sbGFtYWluZGV4XCIsXG4gICAgXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi12ZXJ0ZXhhaVwiLFxuICAgIFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tYmVkcm9ja1wiLFxuICAgIFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tY29oZXJlXCIsXG4gICAgXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi1waW5lY29uZVwiLFxuICAgIFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tcWRyYW50XCIsXG4gICAgXCJAdHJhY2Vsb29wL2luc3RydW1lbnRhdGlvbi10b2dldGhlclwiLFxuICAgIFwiQHRyYWNlbG9vcC9pbnN0cnVtZW50YXRpb24tbWNwXCIsXG5dO1xuLyoqXG4gKiBIYW5kbGVzIHNwYW4gc3RhcnQgZXZlbnQsIGVucmljaGluZyBpdCB3aXRoIHdvcmtmbG93IGFuZCBlbnRpdHkgaW5mb3JtYXRpb25cbiAqL1xuY29uc3Qgb25TcGFuU3RhcnQgPSAoc3BhbikgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IGNvbnRleHQuYWN0aXZlKCkuZ2V0VmFsdWUoV09SS0ZMT1dfTkFNRV9LRVkpO1xuICAgIGlmICh3b3JrZmxvd05hbWUpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX1dPUktGTE9XX05BTUUsIHdvcmtmbG93TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSBjb250ZXh0LmFjdGl2ZSgpLmdldFZhbHVlKEVOVElUWV9OQU1FX0tFWSk7XG4gICAgaWYgKGVudGl0eU5hbWUpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9QQVRILCBlbnRpdHlOYW1lKTtcbiAgICB9XG4gICAgY29uc3QgYWdlbnROYW1lID0gY29udGV4dC5hY3RpdmUoKS5nZXRWYWx1ZShBR0VOVF9OQU1FX0tFWSk7XG4gICAgaWYgKGFnZW50TmFtZSkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5HRU5fQUlfQUdFTlRfTkFNRSwgYWdlbnROYW1lKTtcbiAgICB9XG4gICAgY29uc3QgYXNzb2NpYXRpb25Qcm9wZXJ0aWVzID0gY29udGV4dFxuICAgICAgICAuYWN0aXZlKClcbiAgICAgICAgLmdldFZhbHVlKEFTU09DQVRJT05fUFJPUEVSVElFU19LRVkpO1xuICAgIGlmIChhc3NvY2lhdGlvblByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXNzb2NpYXRpb25Qcm9wZXJ0aWVzKSkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYCR7U3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0FTU09DSUFUSU9OX1BST1BFUlRJRVN9LiR7a2V5fWAsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0cmFuc2Zvcm1BaVNka1NwYW5OYW1lcyhzcGFuKTtcbn07XG4vKipcbiAqIEVuc3VyZXMgc3BhbiBjb21wYXRpYmlsaXR5IGJldHdlZW4gT1RlbCB2MS54IGFuZCB2Mi54IGZvciBPVExQIHRyYW5zZm9ybWVyXG4gKi9cbmNvbnN0IGVuc3VyZVNwYW5Db21wYXRpYmlsaXR5ID0gKHNwYW4pID0+IHtcbiAgICBjb25zdCBzcGFuQW55ID0gc3BhbjtcbiAgICAvLyBJZiB0aGUgc3BhbiBhbHJlYWR5IGhhcyBpbnN0cnVtZW50YXRpb25MaWJyYXJ5LCBpdCdzIGNvbXBhdGlibGUgKE9UZWwgdjIueClcbiAgICBpZiAoc3BhbkFueS5pbnN0cnVtZW50YXRpb25MaWJyYXJ5KSB7XG4gICAgICAgIHJldHVybiBzcGFuO1xuICAgIH1cbiAgICAvLyBJZiBpdCBoYXMgaW5zdHJ1bWVudGF0aW9uU2NvcGUgYnV0IG5vIGluc3RydW1lbnRhdGlvbkxpYnJhcnkgKE9UZWwgdjEueCksXG4gICAgLy8gYWRkIGluc3RydW1lbnRhdGlvbkxpYnJhcnkgYXMgYW4gYWxpYXMgdG8gcHJldmVudCBPVExQIHRyYW5zZm9ybWVyIGVycm9yc1xuICAgIGlmIChzcGFuQW55Lmluc3RydW1lbnRhdGlvblNjb3BlKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHByb3h5IHRoYXQgcHJvdmlkZXMgYm90aCBwcm9wZXJ0aWVzXG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoc3Bhbiwge1xuICAgICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImluc3RydW1lbnRhdGlvbkxpYnJhcnlcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lmluc3RydW1lbnRhdGlvblNjb3BlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBhZGQgYm90aCBwcm9wZXJ0aWVzIHdpdGggZGVmYXVsdHNcbiAgICByZXR1cm4gbmV3IFByb3h5KHNwYW4sIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiaW5zdHJ1bWVudGF0aW9uTGlicmFyeVwiIHx8XG4gICAgICAgICAgICAgICAgcHJvcCA9PT0gXCJpbnN0cnVtZW50YXRpb25TY29wZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ1bmtub3duXCIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hVXJsOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICAgIH0sXG4gICAgfSk7XG59O1xuLyoqXG4gKiBIYW5kbGVzIHNwYW4gZW5kIGV2ZW50LCBhZGFwdGluZyBhdHRyaWJ1dGVzIGZvciBWZXJjZWwgQUkgY29tcGF0aWJpbGl0eVxuICogYW5kIGVuc3VyaW5nIE9UTFAgdHJhbnNmb3JtZXIgY29tcGF0aWJpbGl0eVxuICovXG5jb25zdCBvblNwYW5FbmQgPSAob3JpZ2luYWxPbkVuZCwgaW5zdHJ1bWVudGF0aW9uTGlicmFyaWVzKSA9PiB7XG4gICAgcmV0dXJuIChzcGFuKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmIChpbnN0cnVtZW50YXRpb25MaWJyYXJpZXMgJiZcbiAgICAgICAgICAgICFpbnN0cnVtZW50YXRpb25MaWJyYXJpZXMuaW5jbHVkZXMoKChfYSA9IHNwYW4uaW5zdHJ1bWVudGF0aW9uU2NvcGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lKSB8fFxuICAgICAgICAgICAgICAgICgoX2IgPSBzcGFuLmluc3RydW1lbnRhdGlvbkxpYnJhcnkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5uYW1lKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcHBseSBBSSBTREsgdHJhbnNmb3JtYXRpb25zIChpZiBuZWVkZWQpXG4gICAgICAgIHRyYW5zZm9ybUFpU2RrU3BhbkF0dHJpYnV0ZXMoc3Bhbik7XG4gICAgICAgIC8vIEhhbmRsZSBhZ2VudCBuYW1lIHByb3BhZ2F0aW9uIGZvciBBSSBTREsgc3BhbnNcbiAgICAgICAgY29uc3QgdHJhY2VJZCA9IHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkO1xuICAgICAgICBjb25zdCBhZ2VudE5hbWUgPSBzcGFuLmF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuR0VOX0FJX0FHRU5UX05BTUVdO1xuICAgICAgICBpZiAoYWdlbnROYW1lICYmIHR5cGVvZiBhZ2VudE5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIFN0b3JlIGFnZW50IG5hbWUgZm9yIHRoaXMgdHJhY2Ugd2l0aCBjdXJyZW50IHRpbWVzdGFtcFxuICAgICAgICAgICAgdHJhY2VBZ2VudE5hbWVzLnNldCh0cmFjZUlkLCB7XG4gICAgICAgICAgICAgICAgYWdlbnROYW1lLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFhZ2VudE5hbWUgJiYgdHJhY2VBZ2VudE5hbWVzLmhhcyh0cmFjZUlkKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBzcGFuIGRvZXNuJ3QgaGF2ZSBhZ2VudCBuYW1lIGJ1dCB0cmFjZSBkb2VzIC0gcHJvcGFnYXRlIGl0XG4gICAgICAgICAgICBzcGFuLmF0dHJpYnV0ZXNbU3BhbkF0dHJpYnV0ZXMuR0VOX0FJX0FHRU5UX05BTUVdID1cbiAgICAgICAgICAgICAgICB0cmFjZUFnZW50TmFtZXMuZ2V0KHRyYWNlSWQpLmFnZW50TmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDbGVhbiB1cCB0cmFjZSBhZ2VudCBuYW1lIHdoZW4gcm9vdCBzcGFuIGVuZHNcbiAgICAgICAgaWYgKGlzUm9vdFNwYW4oc3BhbikgJiYgdHJhY2VBZ2VudE5hbWVzLmhhcyh0cmFjZUlkKSkge1xuICAgICAgICAgICAgdHJhY2VBZ2VudE5hbWVzLmRlbGV0ZSh0cmFjZUlkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQZXJpb2RpY2FsbHkgY2xlYW4gdXAgZXhwaXJlZCBlbnRyaWVzIChldmVyeSAxMDAgc3BhbnMgYXMgYSBzYWZldHkgbmV0KVxuICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8IDAuMDEpIHtcbiAgICAgICAgICAgIGNsZWFudXBFeHBpcmVkVHJhY2VBZ2VudE5hbWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIE9UTFAgdHJhbnNmb3JtZXIgY29tcGF0aWJpbGl0eVxuICAgICAgICBjb25zdCBjb21wYXRpYmxlU3BhbiA9IGVuc3VyZVNwYW5Db21wYXRpYmlsaXR5KHNwYW4pO1xuICAgICAgICBvcmlnaW5hbE9uRW5kKGNvbXBhdGlibGVTcGFuKTtcbiAgICB9O1xufTtcblxuY2xhc3MgSW1hZ2VVcGxvYWRlciB7XG4gICAgY29uc3RydWN0b3IoYmFzZVVybCwgYXBpS2V5KSB7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIH1cbiAgICBhc3luYyB1cGxvYWRCYXNlNjRJbWFnZSh0cmFjZUlkLCBzcGFuSWQsIGltYWdlTmFtZSwgYmFzZTY0SW1hZ2VEYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IGF3YWl0IHRoaXMuZ2V0SW1hZ2VVcmwodHJhY2VJZCwgc3BhbklkLCBpbWFnZU5hbWUpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZURhdGEoaW1hZ2VVcmwsIGJhc2U2NEltYWdlRGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gaW1hZ2VVcmw7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHVwbG9hZCBpbWFnZTpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0SW1hZ2VVcmwodHJhY2VJZCwgc3BhbklkLCBpbWFnZU5hbWUpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLmJhc2VVcmx9L3YyL3RyYWNlcy8ke3RyYWNlSWR9L3NwYW5zLyR7c3BhbklkfS9pbWFnZXNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFwaUtleX1gLFxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBpbWFnZV9uYW1lOiBpbWFnZU5hbWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBpbWFnZSBVUkw6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnVybDtcbiAgICB9XG4gICAgYXN5bmMgdXBsb2FkSW1hZ2VEYXRhKHVybCwgYmFzZTY0SW1hZ2VEYXRhKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICBpbWFnZV9kYXRhOiBiYXNlNjRJbWFnZURhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFwaUtleX1gLFxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdXBsb2FkIGltYWdlIGRhdGE6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9LiAke2Vycm9yVGV4dH1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IF9zZGs7XG5sZXQgX3NwYW5Qcm9jZXNzb3I7XG5sZXQgb3BlbkFJSW5zdHJ1bWVudGF0aW9uO1xubGV0IGFudGhyb3BpY0luc3RydW1lbnRhdGlvbjtcbmxldCBjb2hlcmVJbnN0cnVtZW50YXRpb247XG5sZXQgdmVydGV4YWlJbnN0cnVtZW50YXRpb247XG5sZXQgYWlwbGF0Zm9ybUluc3RydW1lbnRhdGlvbjtcbmxldCBiZWRyb2NrSW5zdHJ1bWVudGF0aW9uO1xubGV0IGxhbmdjaGFpbkluc3RydW1lbnRhdGlvbjtcbmxldCBsbGFtYUluZGV4SW5zdHJ1bWVudGF0aW9uO1xubGV0IHBpbmVjb25lSW5zdHJ1bWVudGF0aW9uO1xubGV0IGNocm9tYWRiSW5zdHJ1bWVudGF0aW9uO1xubGV0IHFkcmFudEluc3RydW1lbnRhdGlvbjtcbmxldCB0b2dldGhlckluc3RydW1lbnRhdGlvbjtcbmxldCBtY3BJbnN0cnVtZW50YXRpb247XG5jb25zdCBpbnN0cnVtZW50YXRpb25zID0gW107XG5jb25zdCBpbml0SW5zdHJ1bWVudGF0aW9ucyA9IChhcGlLZXksIGJhc2VVcmwpID0+IHtcbiAgICBjb25zdCBleGNlcHRpb25Mb2dnZXIgPSAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKFwiW1RyYWNlbG9vcF0gSW5zdHJ1bWVudGF0aW9uIGV4Y2VwdGlvbjpcIiwgZS5tZXNzYWdlKTtcbiAgICB9O1xuICAgIGNvbnN0IGVucmljaFRva2VucyA9IChwcm9jZXNzLmVudi5UUkFDRUxPT1BfRU5SSUNIX1RPS0VOUyB8fCBcInRydWVcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgLy8gQ3JlYXRlIGltYWdlIHVwbG9hZCBjYWxsYmFjayBpZiB3ZSBoYXZlIGNyZWRlbnRpYWxzXG4gICAgbGV0IHVwbG9hZEJhc2U2NEltYWdlQ2FsbGJhY2s7XG4gICAgaWYgKGFwaUtleSAmJiBiYXNlVXJsKSB7XG4gICAgICAgIGNvbnN0IGltYWdlVXBsb2FkZXIgPSBuZXcgSW1hZ2VVcGxvYWRlcihiYXNlVXJsLCBhcGlLZXkpO1xuICAgICAgICB1cGxvYWRCYXNlNjRJbWFnZUNhbGxiYWNrID1cbiAgICAgICAgICAgIGltYWdlVXBsb2FkZXIudXBsb2FkQmFzZTY0SW1hZ2UuYmluZChpbWFnZVVwbG9hZGVyKTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSBPcGVuQUkgaW5zdHJ1bWVudGF0aW9uXG4gICAgaWYgKG9wZW5BSUluc3RydW1lbnRhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaW5zdHJ1bWVudGF0aW9uIHdpdGggbmV3IGNhbGxiYWNrXG4gICAgICAgIG9wZW5BSUluc3RydW1lbnRhdGlvbi5zZXRDb25maWcoe1xuICAgICAgICAgICAgZW5yaWNoVG9rZW5zLFxuICAgICAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgICAgICAgICAgdXBsb2FkQmFzZTY0SW1hZ2U6IHVwbG9hZEJhc2U2NEltYWdlQ2FsbGJhY2ssXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBpbnN0cnVtZW50YXRpb25cbiAgICAgICAgb3BlbkFJSW5zdHJ1bWVudGF0aW9uID0gbmV3IE9wZW5BSUluc3RydW1lbnRhdGlvbih7XG4gICAgICAgICAgICBlbnJpY2hUb2tlbnMsXG4gICAgICAgICAgICBleGNlcHRpb25Mb2dnZXIsXG4gICAgICAgICAgICB1cGxvYWRCYXNlNjRJbWFnZTogdXBsb2FkQmFzZTY0SW1hZ2VDYWxsYmFjayxcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChvcGVuQUlJbnN0cnVtZW50YXRpb24pO1xuICAgIH1cbiAgICBpZiAoIWFudGhyb3BpY0luc3RydW1lbnRhdGlvbikge1xuICAgICAgICBhbnRocm9waWNJbnN0cnVtZW50YXRpb24gPSBuZXcgQW50aHJvcGljSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgICAgIGV4Y2VwdGlvbkxvZ2dlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChhbnRocm9waWNJbnN0cnVtZW50YXRpb24pO1xuICAgIH1cbiAgICBjb2hlcmVJbnN0cnVtZW50YXRpb24gPSBuZXcgQ29oZXJlSW5zdHJ1bWVudGF0aW9uKHsgZXhjZXB0aW9uTG9nZ2VyIH0pO1xuICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChjb2hlcmVJbnN0cnVtZW50YXRpb24pO1xuICAgIHZlcnRleGFpSW5zdHJ1bWVudGF0aW9uID0gbmV3IFZlcnRleEFJSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgIH0pO1xuICAgIGluc3RydW1lbnRhdGlvbnMucHVzaCh2ZXJ0ZXhhaUluc3RydW1lbnRhdGlvbik7XG4gICAgYWlwbGF0Zm9ybUluc3RydW1lbnRhdGlvbiA9IG5ldyBBSVBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgIH0pO1xuICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChhaXBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uKTtcbiAgICBiZWRyb2NrSW5zdHJ1bWVudGF0aW9uID0gbmV3IEJlZHJvY2tJbnN0cnVtZW50YXRpb24oeyBleGNlcHRpb25Mb2dnZXIgfSk7XG4gICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGJlZHJvY2tJbnN0cnVtZW50YXRpb24pO1xuICAgIHBpbmVjb25lSW5zdHJ1bWVudGF0aW9uID0gbmV3IFBpbmVjb25lSW5zdHJ1bWVudGF0aW9uKHsgZXhjZXB0aW9uTG9nZ2VyIH0pO1xuICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChwaW5lY29uZUluc3RydW1lbnRhdGlvbik7XG4gICAgbGFuZ2NoYWluSW5zdHJ1bWVudGF0aW9uID0gbmV3IExhbmdDaGFpbkluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICBpbnN0cnVtZW50YXRpb25zLnB1c2gobGFuZ2NoYWluSW5zdHJ1bWVudGF0aW9uKTtcbiAgICBsbGFtYUluZGV4SW5zdHJ1bWVudGF0aW9uID0gbmV3IExsYW1hSW5kZXhJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICBleGNlcHRpb25Mb2dnZXIsXG4gICAgfSk7XG4gICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGxsYW1hSW5kZXhJbnN0cnVtZW50YXRpb24pO1xuICAgIGNocm9tYWRiSW5zdHJ1bWVudGF0aW9uID0gbmV3IENocm9tYURCSW5zdHJ1bWVudGF0aW9uKHsgZXhjZXB0aW9uTG9nZ2VyIH0pO1xuICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChjaHJvbWFkYkluc3RydW1lbnRhdGlvbik7XG4gICAgcWRyYW50SW5zdHJ1bWVudGF0aW9uID0gbmV3IFFkcmFudEluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICBpbnN0cnVtZW50YXRpb25zLnB1c2gocWRyYW50SW5zdHJ1bWVudGF0aW9uKTtcbiAgICB0b2dldGhlckluc3RydW1lbnRhdGlvbiA9IG5ldyBUb2dldGhlckluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICBpbnN0cnVtZW50YXRpb25zLnB1c2godG9nZXRoZXJJbnN0cnVtZW50YXRpb24pO1xuICAgIG1jcEluc3RydW1lbnRhdGlvbiA9IG5ldyBNY3BJbnN0cnVtZW50YXRpb24oeyBleGNlcHRpb25Mb2dnZXIgfSk7XG4gICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKG1jcEluc3RydW1lbnRhdGlvbik7XG59O1xuY29uc3QgbWFudWFsbHlJbml0SW5zdHJ1bWVudGF0aW9ucyA9IChpbnN0cnVtZW50TW9kdWxlcywgYXBpS2V5LCBiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgZXhjZXB0aW9uTG9nZ2VyID0gKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIltUcmFjZWxvb3BdIEluc3RydW1lbnRhdGlvbiBleGNlcHRpb246XCIsIGUubWVzc2FnZSk7XG4gICAgfTtcbiAgICBjb25zdCBlbnJpY2hUb2tlbnMgPSAocHJvY2Vzcy5lbnYuVFJBQ0VMT09QX0VOUklDSF9UT0tFTlMgfHwgXCJ0cnVlXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xuICAgIC8vIENyZWF0ZSBpbWFnZSB1cGxvYWQgY2FsbGJhY2sgaWYgd2UgaGF2ZSBjcmVkZW50aWFsc1xuICAgIGxldCB1cGxvYWRCYXNlNjRJbWFnZUNhbGxiYWNrO1xuICAgIGlmIChhcGlLZXkgJiYgYmFzZVVybCkge1xuICAgICAgICBjb25zdCBpbWFnZVVwbG9hZGVyID0gbmV3IEltYWdlVXBsb2FkZXIoYmFzZVVybCwgYXBpS2V5KTtcbiAgICAgICAgdXBsb2FkQmFzZTY0SW1hZ2VDYWxsYmFjayA9XG4gICAgICAgICAgICBpbWFnZVVwbG9hZGVyLnVwbG9hZEJhc2U2NEltYWdlLmJpbmQoaW1hZ2VVcGxvYWRlcik7XG4gICAgfVxuICAgIC8vIENsZWFyIHRoZSBpbnN0cnVtZW50YXRpb25zIGFycmF5IHRoYXQgd2FzIGluaXRpYWxpemVkIGJ5IGRlZmF1bHRcbiAgICBpbnN0cnVtZW50YXRpb25zLmxlbmd0aCA9IDA7XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy5vcGVuQUkpIHtcbiAgICAgICAgb3BlbkFJSW5zdHJ1bWVudGF0aW9uID0gbmV3IE9wZW5BSUluc3RydW1lbnRhdGlvbih7XG4gICAgICAgICAgICBlbnJpY2hUb2tlbnMsXG4gICAgICAgICAgICBleGNlcHRpb25Mb2dnZXIsXG4gICAgICAgICAgICB1cGxvYWRCYXNlNjRJbWFnZTogdXBsb2FkQmFzZTY0SW1hZ2VDYWxsYmFjayxcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChvcGVuQUlJbnN0cnVtZW50YXRpb24pO1xuICAgICAgICBvcGVuQUlJbnN0cnVtZW50YXRpb24ubWFudWFsbHlJbnN0cnVtZW50KGluc3RydW1lbnRNb2R1bGVzLm9wZW5BSSk7XG4gICAgfVxuICAgIGlmIChpbnN0cnVtZW50TW9kdWxlcyA9PT0gbnVsbCB8fCBpbnN0cnVtZW50TW9kdWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5zdHJ1bWVudE1vZHVsZXMuYW50aHJvcGljKSB7XG4gICAgICAgIGFudGhyb3BpY0luc3RydW1lbnRhdGlvbiA9IG5ldyBBbnRocm9waWNJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGFudGhyb3BpY0luc3RydW1lbnRhdGlvbik7XG4gICAgICAgIGFudGhyb3BpY0luc3RydW1lbnRhdGlvbi5tYW51YWxseUluc3RydW1lbnQoaW5zdHJ1bWVudE1vZHVsZXMuYW50aHJvcGljKTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy5jb2hlcmUpIHtcbiAgICAgICAgY29oZXJlSW5zdHJ1bWVudGF0aW9uID0gbmV3IENvaGVyZUluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGNvaGVyZUluc3RydW1lbnRhdGlvbik7XG4gICAgICAgIGNvaGVyZUluc3RydW1lbnRhdGlvbi5tYW51YWxseUluc3RydW1lbnQoaW5zdHJ1bWVudE1vZHVsZXMuY29oZXJlKTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy5nb29nbGVfdmVydGV4YWkpIHtcbiAgICAgICAgdmVydGV4YWlJbnN0cnVtZW50YXRpb24gPSBuZXcgVmVydGV4QUlJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKHZlcnRleGFpSW5zdHJ1bWVudGF0aW9uKTtcbiAgICAgICAgdmVydGV4YWlJbnN0cnVtZW50YXRpb24ubWFudWFsbHlJbnN0cnVtZW50KGluc3RydW1lbnRNb2R1bGVzLmdvb2dsZV92ZXJ0ZXhhaSk7XG4gICAgfVxuICAgIGlmIChpbnN0cnVtZW50TW9kdWxlcyA9PT0gbnVsbCB8fCBpbnN0cnVtZW50TW9kdWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5zdHJ1bWVudE1vZHVsZXMuZ29vZ2xlX2FpcGxhdGZvcm0pIHtcbiAgICAgICAgYWlwbGF0Zm9ybUluc3RydW1lbnRhdGlvbiA9IG5ldyBBSVBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgICAgIGV4Y2VwdGlvbkxvZ2dlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChhaXBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uKTtcbiAgICAgICAgYWlwbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5tYW51YWxseUluc3RydW1lbnQoaW5zdHJ1bWVudE1vZHVsZXMuZ29vZ2xlX2FpcGxhdGZvcm0pO1xuICAgIH1cbiAgICBpZiAoaW5zdHJ1bWVudE1vZHVsZXMgPT09IG51bGwgfHwgaW5zdHJ1bWVudE1vZHVsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluc3RydW1lbnRNb2R1bGVzLmJlZHJvY2spIHtcbiAgICAgICAgYmVkcm9ja0luc3RydW1lbnRhdGlvbiA9IG5ldyBCZWRyb2NrSW5zdHJ1bWVudGF0aW9uKHsgZXhjZXB0aW9uTG9nZ2VyIH0pO1xuICAgICAgICBpbnN0cnVtZW50YXRpb25zLnB1c2goYmVkcm9ja0luc3RydW1lbnRhdGlvbik7XG4gICAgICAgIGJlZHJvY2tJbnN0cnVtZW50YXRpb24ubWFudWFsbHlJbnN0cnVtZW50KGluc3RydW1lbnRNb2R1bGVzLmJlZHJvY2spO1xuICAgIH1cbiAgICBpZiAoaW5zdHJ1bWVudE1vZHVsZXMgPT09IG51bGwgfHwgaW5zdHJ1bWVudE1vZHVsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluc3RydW1lbnRNb2R1bGVzLnBpbmVjb25lKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IG5ldyBQaW5lY29uZUluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGluc3RydW1lbnRhdGlvbik7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbi5tYW51YWxseUluc3RydW1lbnQoaW5zdHJ1bWVudE1vZHVsZXMucGluZWNvbmUpO1xuICAgIH1cbiAgICAvLyBBbHdheXMgZW5hYmxlIExhbmdDaGFpbiBpbnN0cnVtZW50YXRpb25cbiAgICBsYW5nY2hhaW5JbnN0cnVtZW50YXRpb24gPSBuZXcgTGFuZ0NoYWluSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgIH0pO1xuICAgIGluc3RydW1lbnRhdGlvbnMucHVzaChsYW5nY2hhaW5JbnN0cnVtZW50YXRpb24pO1xuICAgIGlmIChpbnN0cnVtZW50TW9kdWxlcyA9PT0gbnVsbCB8fCBpbnN0cnVtZW50TW9kdWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5zdHJ1bWVudE1vZHVsZXMubGxhbWFJbmRleCkge1xuICAgICAgICBsbGFtYUluZGV4SW5zdHJ1bWVudGF0aW9uID0gbmV3IExsYW1hSW5kZXhJbnN0cnVtZW50YXRpb24oe1xuICAgICAgICAgICAgZXhjZXB0aW9uTG9nZ2VyLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGxsYW1hSW5kZXhJbnN0cnVtZW50YXRpb24pO1xuICAgICAgICBsbGFtYUluZGV4SW5zdHJ1bWVudGF0aW9uLm1hbnVhbGx5SW5zdHJ1bWVudChpbnN0cnVtZW50TW9kdWxlcy5sbGFtYUluZGV4KTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy5jaHJvbWFkYikge1xuICAgICAgICBjaHJvbWFkYkluc3RydW1lbnRhdGlvbiA9IG5ldyBDaHJvbWFEQkluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKGNocm9tYWRiSW5zdHJ1bWVudGF0aW9uKTtcbiAgICAgICAgY2hyb21hZGJJbnN0cnVtZW50YXRpb24ubWFudWFsbHlJbnN0cnVtZW50KGluc3RydW1lbnRNb2R1bGVzLmNocm9tYWRiKTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy5xZHJhbnQpIHtcbiAgICAgICAgcWRyYW50SW5zdHJ1bWVudGF0aW9uID0gbmV3IFFkcmFudEluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKHFkcmFudEluc3RydW1lbnRhdGlvbik7XG4gICAgICAgIHFkcmFudEluc3RydW1lbnRhdGlvbi5tYW51YWxseUluc3RydW1lbnQoaW5zdHJ1bWVudE1vZHVsZXMucWRyYW50KTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy50b2dldGhlcikge1xuICAgICAgICB0b2dldGhlckluc3RydW1lbnRhdGlvbiA9IG5ldyBUb2dldGhlckluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKHRvZ2V0aGVySW5zdHJ1bWVudGF0aW9uKTtcbiAgICAgICAgdG9nZXRoZXJJbnN0cnVtZW50YXRpb24ubWFudWFsbHlJbnN0cnVtZW50KGluc3RydW1lbnRNb2R1bGVzLnRvZ2V0aGVyKTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRNb2R1bGVzID09PSBudWxsIHx8IGluc3RydW1lbnRNb2R1bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnN0cnVtZW50TW9kdWxlcy5tY3ApIHtcbiAgICAgICAgbWNwSW5zdHJ1bWVudGF0aW9uID0gbmV3IE1jcEluc3RydW1lbnRhdGlvbih7IGV4Y2VwdGlvbkxvZ2dlciB9KTtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucy5wdXNoKG1jcEluc3RydW1lbnRhdGlvbik7XG4gICAgICAgIG1jcEluc3RydW1lbnRhdGlvbi5tYW51YWxseUluc3RydW1lbnQoaW5zdHJ1bWVudE1vZHVsZXMubWNwKTtcbiAgICB9XG59O1xuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgVHJhY2Vsb29wIFNESy5cbiAqIE11c3QgYmUgY2FsbGVkIG9uY2UgYmVmb3JlIGFueSBvdGhlciBTREsgbWV0aG9kcy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIFNESy4gU2VlIHRoZSB7QGxpbmsgSW5pdGlhbGl6ZU9wdGlvbnN9IGZvciBkZXRhaWxzLlxuICogQHRocm93cyB7SW5pdGlhbGl6YXRpb25FcnJvcn0gaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCBvciBpZiBmYWlsZWQgdG8gZmV0Y2ggZmVhdHVyZSBkYXRhLlxuICovXG5jb25zdCBzdGFydFRyYWNpbmcgPSAob3B0aW9ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBhcGlLZXkgPSBvcHRpb25zLmFwaUtleSB8fCBwcm9jZXNzLmVudi5UUkFDRUxPT1BfQVBJX0tFWTtcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsIHx8XG4gICAgICAgIHByb2Nlc3MuZW52LlRSQUNFTE9PUF9CQVNFX1VSTCB8fFxuICAgICAgICBcImh0dHBzOi8vYXBpLnRyYWNlbG9vcC5jb21cIjtcbiAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucy5pbnN0cnVtZW50TW9kdWxlcyB8fCB7fSkubGVuZ3RoID4gMCkge1xuICAgICAgICBtYW51YWxseUluaXRJbnN0cnVtZW50YXRpb25zKG9wdGlvbnMuaW5zdHJ1bWVudE1vZHVsZXMsIGFwaUtleSwgYmFzZVVybCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJbml0aWFsaXplIGRlZmF1bHQgaW5zdHJ1bWVudGF0aW9ucyBpZiBubyBtYW51YWwgbW9kdWxlcyBzcGVjaWZpZWRcbiAgICAgICAgaW5pdEluc3RydW1lbnRhdGlvbnMoYXBpS2V5LCBiYXNlVXJsKTtcbiAgICB9XG4gICAgaWYgKCFzaG91bGRTZW5kVHJhY2VzKCkpIHtcbiAgICAgICAgb3BlbkFJSW5zdHJ1bWVudGF0aW9uID09PSBudWxsIHx8IG9wZW5BSUluc3RydW1lbnRhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3BlbkFJSW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGxhbWFJbmRleEluc3RydW1lbnRhdGlvbiA9PT0gbnVsbCB8fCBsbGFtYUluZGV4SW5zdHJ1bWVudGF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsbGFtYUluZGV4SW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmVydGV4YWlJbnN0cnVtZW50YXRpb24gPT09IG51bGwgfHwgdmVydGV4YWlJbnN0cnVtZW50YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZlcnRleGFpSW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgYWlwbGF0Zm9ybUluc3RydW1lbnRhdGlvbiA9PT0gbnVsbCB8fCBhaXBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhaXBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgYmVkcm9ja0luc3RydW1lbnRhdGlvbiA9PT0gbnVsbCB8fCBiZWRyb2NrSW5zdHJ1bWVudGF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiZWRyb2NrSW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29oZXJlSW5zdHJ1bWVudGF0aW9uID09PSBudWxsIHx8IGNvaGVyZUluc3RydW1lbnRhdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29oZXJlSW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY2hyb21hZGJJbnN0cnVtZW50YXRpb24gPT09IG51bGwgfHwgY2hyb21hZGJJbnN0cnVtZW50YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNocm9tYWRiSW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdG9nZXRoZXJJbnN0cnVtZW50YXRpb24gPT09IG51bGwgfHwgdG9nZXRoZXJJbnN0cnVtZW50YXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRvZ2V0aGVySW5zdHJ1bWVudGF0aW9uLnNldENvbmZpZyh7XG4gICAgICAgICAgICB0cmFjZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fFxuICAgICAgICAocHJvY2Vzcy5lbnYuVFJBQ0VMT09QX0hFQURFUlNcbiAgICAgICAgICAgID8gcGFyc2VLZXlQYWlyc0ludG9SZWNvcmQocHJvY2Vzcy5lbnYuVFJBQ0VMT09QX0hFQURFUlMpXG4gICAgICAgICAgICA6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYXBpS2V5fWAgfSk7XG4gICAgY29uc3QgdHJhY2VFeHBvcnRlciA9IChfYSA9IG9wdGlvbnMuZXhwb3J0ZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChvcHRpb25zLmdjcFByb2plY3RJZFxuICAgICAgICA/IG5ldyBUcmFjZUV4cG9ydGVyKHsgcHJvamVjdElkOiBvcHRpb25zLmdjcFByb2plY3RJZCB9KVxuICAgICAgICA6IG5ldyBPVExQVHJhY2VFeHBvcnRlcih7XG4gICAgICAgICAgICB1cmw6IGAke2Jhc2VVcmx9L3YxL3RyYWNlc2AsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KSk7XG4gICAgX3NwYW5Qcm9jZXNzb3IgPSBjcmVhdGVTcGFuUHJvY2Vzc29yKHtcbiAgICAgICAgYXBpS2V5OiBvcHRpb25zLmFwaUtleSxcbiAgICAgICAgYmFzZVVybDogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBkaXNhYmxlQmF0Y2g6IG9wdGlvbnMuZGlzYWJsZUJhdGNoLFxuICAgICAgICBleHBvcnRlcjogdHJhY2VFeHBvcnRlcixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYWxsb3dlZEluc3RydW1lbnRhdGlvbkxpYnJhcmllczogQUxMX0lOU1RSVU1FTlRBVElPTl9MSUJSQVJJRVMsXG4gICAgfSk7XG4gICAgY29uc3Qgc3BhblByb2Nlc3NvcnMgPSBbX3NwYW5Qcm9jZXNzb3JdO1xuICAgIGlmIChvcHRpb25zLnByb2Nlc3Nvcikge1xuICAgICAgICBzcGFuUHJvY2Vzc29ycy5wdXNoKG9wdGlvbnMucHJvY2Vzc29yKTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh7XG4gICAgICAgIFtBVFRSX1NFUlZJQ0VfTkFNRV06IG9wdGlvbnMuYXBwTmFtZSB8fCBwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9uYW1lIHx8IFwidW5rbm93bl9zZXJ2aWNlXCIsXG4gICAgfSk7XG4gICAgX3NkayA9IG5ldyBOb2RlU0RLKHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHNwYW5Qcm9jZXNzb3JzLFxuICAgICAgICBjb250ZXh0TWFuYWdlcjogb3B0aW9ucy5jb250ZXh0TWFuYWdlcixcbiAgICAgICAgdGV4dE1hcFByb3BhZ2F0b3I6IG9wdGlvbnMucHJvcGFnYXRvcixcbiAgICAgICAgdHJhY2VFeHBvcnRlcixcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9ucyxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHJlLWNvbnNpZGVyIHJlbW92aW5nIGlycmVsZXZhbnQgc3BhbnMgaGVyZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgIC8vIHNhbXBsZXI6IG5ldyBUcmFjZWxvb3BTYW1wbGVyKCksXG4gICAgfSk7XG4gICAgX3Nkay5zdGFydCgpO1xufTtcbmNvbnN0IHNob3VsZFNlbmRUcmFjZXMgPSAoKSA9PiB7XG4gICAgaWYgKCFfY29uZmlndXJhdGlvbikge1xuICAgICAgICBkaWFnLndhcm4oXCJUcmFjZWxvb3Agbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cyA9IGNvbnRleHRcbiAgICAgICAgLmFjdGl2ZSgpXG4gICAgICAgIC5nZXRWYWx1ZShDT05URVhUX0tFWV9BTExPV19UUkFDRV9DT05URU5UKTtcbiAgICBpZiAoY29udGV4dFNob3VsZFNlbmRQcm9tcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRTaG91bGRTZW5kUHJvbXB0cztcbiAgICB9XG4gICAgaWYgKF9jb25maWd1cmF0aW9uLnRyYWNlQ29udGVudCA9PT0gZmFsc2UgfHxcbiAgICAgICAgKHByb2Nlc3MuZW52LlRSQUNFTE9PUF9UUkFDRV9DT05URU5UIHx8IFwidHJ1ZVwiKS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5jb25zdCBmb3JjZUZsdXNoID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IF9zcGFuUHJvY2Vzc29yLmZvcmNlRmx1c2goKTtcbn07XG4vLyBDb21wYXRpYmlsaXR5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyByZXNvdXJjZXMgdGhhdCB3b3JrcyB3aXRoIGJvdGggT1RlbCB2MS54IGFuZCB2Mi54XG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZShhdHRyaWJ1dGVzKSB7XG4gICAgLy8gSW1wb3J0IHRoZSByZXNvdXJjZSBtb2R1bGUgYXQgcnVudGltZSB0byBoYW5kbGUgYm90aCB2MS54IGFuZCB2Mi54XG4gICAgY29uc3QgcmVzb3VyY2VzTW9kdWxlID0gcmVxdWlyZShcIkBvcGVudGVsZW1ldHJ5L3Jlc291cmNlc1wiKTtcbiAgICAvLyBUcnkgdG8gdXNlIHJlc291cmNlRnJvbUF0dHJpYnV0ZXMgaWYgaXQgZXhpc3RzIChPVGVsIHYyLngpXG4gICAgaWYgKHJlc291cmNlc01vZHVsZS5yZXNvdXJjZUZyb21BdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiByZXNvdXJjZXNNb2R1bGUucmVzb3VyY2VGcm9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2sgdG8gY29uc3RydWN0b3IgZm9yIE9UZWwgdjEueFxuICAgIHJldHVybiBuZXcgcmVzb3VyY2VzTW9kdWxlLlJlc291cmNlKGF0dHJpYnV0ZXMpO1xufVxuXG5jb25zdCBmZXRjaFJldHJ5ID0gZmV0Y2hCdWlsZGVyKGZldGNoJDEpO1xuY29uc3QgZmV0Y2hQcm9tcHRzID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IGFwaUtleSwgYmFzZVVybCwgdHJhY2Vsb29wU3luY01heFJldHJpZXMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFJldHJ5KGAke2Jhc2VVcmx9L3YxL3RyYWNlbG9vcC9wcm9tcHRzYCwge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICAgICAgXCJYLVRyYWNlbG9vcC1TREstVmVyc2lvblwiOiBcIjAuMC4zMFwiLFxuICAgICAgICB9LFxuICAgICAgICByZXRyaWVzOiB0cmFjZWxvb3BTeW5jTWF4UmV0cmllcyxcbiAgICAgICAgcmV0cnlPbjogZnVuY3Rpb24gKGF0dGVtcHQsIGVycm9yLCByZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKGF0dGVtcHQgPj0gdHJhY2Vsb29wU3luY01heFJldHJpZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzcG9uc2Uuc3RhdHVzKSAmJiByZXNwb25zZS5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIHJldHJ5RGVsYXk6IGZ1bmN0aW9uIChhdHRlbXB0KSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAwOyAvLyAxMDAwLCAyMDAwLCA0MDAwXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbn07XG5cbmNvbnN0IF9wcm9tcHRzID0ge307XG5sZXQgX2luaXRpYWxpemVkID0gZmFsc2U7XG5sZXQgX2luaXRpYWxpemVkUHJvbWlzZTtcbi8qKlxuICogUmV0dXJucyB0cnVlIG9uY2UgU0RLIHByb21wdCByZWdpc3RyeSBoYXMgYmVlbiBpbml0aWFsaXplZCwgZWxzZSByZWplY3RzIHdpdGggYW4gZXJyb3IuXG4gKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+XG4gKi9cbmNvbnN0IHdhaXRGb3JJbml0aWFsaXphdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoX2luaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgX2luaXRpYWxpemVkUHJvbWlzZTtcbn07XG5jb25zdCBnZXRQcm9tcHRCeUtleSA9IChrZXkpID0+IHtcbiAgICBpZiAoIV9wcm9tcHRzW2tleV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFByb21wdE5vdEZvdW5kRXJyb3Ioa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIF9wcm9tcHRzW2tleV07XG59O1xuY29uc3QgcG9wdWxhdGVSZWdpc3RyeSA9IChwcm9tcHRzKSA9PiB7XG4gICAgcHJvbXB0cyA9PT0gbnVsbCB8fCBwcm9tcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9tcHRzLmZvckVhY2goKHByb21wdCkgPT4ge1xuICAgICAgICBfcHJvbXB0c1twcm9tcHQua2V5XSA9IHByb21wdDtcbiAgICB9KTtcbn07XG5jb25zdCBpbml0aWFsaXplUmVnaXN0cnkgPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgYmFzZVVybCwgdHJhY2Vsb29wU3luY0VuYWJsZWQsIHRyYWNlbG9vcFN5bmNQb2xsaW5nSW50ZXJ2YWwsIHRyYWNlbG9vcFN5bmNEZXZQb2xsaW5nSW50ZXJ2YWwsIH0gPSBvcHRpb25zO1xuICAgIGlmICghdHJhY2Vsb29wU3luY0VuYWJsZWQgfHwgIShiYXNlVXJsID09PSBudWxsIHx8IGJhc2VVcmwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJhc2VVcmwuaW5jbHVkZXMoXCJ0cmFjZWxvb3BcIikpKVxuICAgICAgICByZXR1cm47XG4gICAgbGV0IHBvbGxpbmdJbnRlcnZhbCA9IHRyYWNlbG9vcFN5bmNQb2xsaW5nSW50ZXJ2YWw7XG4gICAgX2luaXRpYWxpemVkUHJvbWlzZSA9IGZldGNoUHJvbXB0cyhvcHRpb25zKVxuICAgICAgICAudGhlbigoeyBwcm9tcHRzLCBlbnZpcm9ubWVudCB9KSA9PiB7XG4gICAgICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJkZXZcIikge1xuICAgICAgICAgICAgcG9sbGluZ0ludGVydmFsID0gdHJhY2Vsb29wU3luY0RldlBvbGxpbmdJbnRlcnZhbDtcbiAgICAgICAgfVxuICAgICAgICBwb3B1bGF0ZVJlZ2lzdHJ5KHByb21wdHMpO1xuICAgICAgICBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbXB0cyB9ID0gYXdhaXQgZmV0Y2hQcm9tcHRzKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHBvcHVsYXRlUmVnaXN0cnkocHJvbXB0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZGlhZy5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCBwcm9tcHQgZGF0YVwiLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBwb2xsaW5nSW50ZXJ2YWwgKiAxMDAwKS51bnJlZigpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEluaXRpYWxpemF0aW9uRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggcHJvbXB0IGRhdGEgdG8gaW5pdGlhbGl6ZSBUcmFjZWxvb3AgU0RLXCIsIGUpO1xuICAgIH0pO1xufTtcblxubGV0IF9jb25maWd1cmF0aW9uO1xubGV0IF9jbGllbnQ7XG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBUcmFjZWxvb3AgU0RLIGFuZCBjcmVhdGVzIGEgc2luZ2xldG9uIGNsaWVudCBpbnN0YW5jZSBpZiBBUEkga2V5IGlzIHByb3ZpZGVkLlxuICogTXVzdCBiZSBjYWxsZWQgb25jZSBiZWZvcmUgYW55IG90aGVyIFNESyBtZXRob2RzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgU0RLLiBTZWUgdGhlIHtAbGluayBJbml0aWFsaXplT3B0aW9uc30gZm9yIGRldGFpbHMuXG4gKiBAcmV0dXJucyBUcmFjZWxvb3BDbGllbnQgLSBUaGUgc2luZ2xldG9uIGNsaWVudCBpbnN0YW5jZSBpZiBBUEkga2V5IGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICogQHRocm93cyB7SW5pdGlhbGl6YXRpb25FcnJvcn0gaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCBvciBpZiBmYWlsZWQgdG8gZmV0Y2ggZmVhdHVyZSBkYXRhLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbml0aWFsaXplKHtcbiAqICAgYXBpS2V5OiAneW91ci1hcGkta2V5JyxcbiAqICAgYXBwTmFtZTogJ3lvdXItYXBwJyxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGluaXRpYWxpemUgPSAob3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgaWYgKF9jb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgICAgb3B0aW9ucy5iYXNlVXJsID1cbiAgICAgICAgICAgIHByb2Nlc3MuZW52LlRSQUNFTE9PUF9CQVNFX1VSTCB8fCBcImh0dHBzOi8vYXBpLnRyYWNlbG9vcC5jb21cIjtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmFwaUtleSkge1xuICAgICAgICBvcHRpb25zLmFwaUtleSA9IHByb2Nlc3MuZW52LlRSQUNFTE9PUF9BUElfS0VZO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuYXBwTmFtZSkge1xuICAgICAgICBvcHRpb25zLmFwcE5hbWUgPSBwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9uYW1lO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuZXhwZXJpbWVudFNsdWcpIHtcbiAgICAgICAgb3B0aW9ucy5leHBlcmltZW50U2x1ZyA9IHByb2Nlc3MuZW52LlRSQUNFTE9PUF9FWFBfU0xVRztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJhY2Vsb29wU3luY0VuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuVFJBQ0VMT09QX1NZTkNfRU5BQkxFRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcHRpb25zLnRyYWNlbG9vcFN5bmNFbmFibGVkID0gW1wiMVwiLCBcInRydWVcIl0uaW5jbHVkZXMocHJvY2Vzcy5lbnYuVFJBQ0VMT09QX1NZTkNfRU5BQkxFRC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMudHJhY2Vsb29wU3luY0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRyYWNlbG9vcFN5bmNFbmFibGVkKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy50cmFjZWxvb3BTeW5jTWF4UmV0cmllcykge1xuICAgICAgICAgICAgb3B0aW9ucy50cmFjZWxvb3BTeW5jTWF4UmV0cmllcyA9XG4gICAgICAgICAgICAgICAgTnVtYmVyKHByb2Nlc3MuZW52LlRSQUNFTE9PUF9TWU5DX01BWF9SRVRSSUVTKSB8fCAzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0aW9ucy50cmFjZWxvb3BTeW5jUG9sbGluZ0ludGVydmFsKSB7XG4gICAgICAgICAgICBvcHRpb25zLnRyYWNlbG9vcFN5bmNQb2xsaW5nSW50ZXJ2YWwgPVxuICAgICAgICAgICAgICAgIE51bWJlcihwcm9jZXNzLmVudi5UUkFDRUxPT1BfU1lOQ19QT0xMSU5HX0lOVEVSVkFMKSB8fCA2MDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMudHJhY2Vsb29wU3luY0RldlBvbGxpbmdJbnRlcnZhbCkge1xuICAgICAgICAgICAgb3B0aW9ucy50cmFjZWxvb3BTeW5jRGV2UG9sbGluZ0ludGVydmFsID1cbiAgICAgICAgICAgICAgICBOdW1iZXIocHJvY2Vzcy5lbnYuVFJBQ0VMT09QX1NZTkNfREVWX1BPTExJTkdfSU5URVJWQUwpIHx8IDU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVDb25maWd1cmF0aW9uKG9wdGlvbnMpO1xuICAgIF9jb25maWd1cmF0aW9uID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMuc2lsZW5jZUluaXRpYWxpemF0aW9uTWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgVHJhY2Vsb29wIGV4cG9ydGluZyB0cmFjZXMgdG8gJHtfY29uZmlndXJhdGlvbi5leHBvcnRlciA/IFwiYSBjdXN0b20gZXhwb3J0ZXJcIiA6IF9jb25maWd1cmF0aW9uLmJhc2VVcmx9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRyYWNpbmdFbmFibGVkID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy50cmFjaW5nRW5hYmxlZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5sb2dMZXZlbCkge1xuICAgICAgICAgICAgZGlhZy5zZXRMb2dnZXIobmV3IERpYWdDb25zb2xlTG9nZ2VyKCksIGxvZ0xldmVsVG9PdGVsTG9nTGV2ZWwob3B0aW9ucy5sb2dMZXZlbCkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0VHJhY2luZyhfY29uZmlndXJhdGlvbik7XG4gICAgfVxuICAgIGluaXRpYWxpemVSZWdpc3RyeShfY29uZmlndXJhdGlvbik7XG4gICAgaWYgKG9wdGlvbnMuYXBpS2V5KSB7XG4gICAgICAgIF9jbGllbnQgPSBuZXcgVHJhY2Vsb29wQ2xpZW50KHtcbiAgICAgICAgICAgIGFwaUtleTogb3B0aW9ucy5hcGlLZXksXG4gICAgICAgICAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgICAgICAgICBhcHBOYW1lOiBvcHRpb25zLmFwcE5hbWUsXG4gICAgICAgICAgICBleHBlcmltZW50U2x1Zzogb3B0aW9ucy5leHBlcmltZW50U2x1ZyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfY2xpZW50O1xuICAgIH1cbiAgICByZXR1cm47XG59O1xuY29uc3QgbG9nTGV2ZWxUb090ZWxMb2dMZXZlbCA9IChsb2dMZXZlbCkgPT4ge1xuICAgIHN3aXRjaCAobG9nTGV2ZWwpIHtcbiAgICAgICAgY2FzZSBcImRlYnVnXCI6XG4gICAgICAgICAgICByZXR1cm4gRGlhZ0xvZ0xldmVsLkRFQlVHO1xuICAgICAgICBjYXNlIFwiaW5mb1wiOlxuICAgICAgICAgICAgcmV0dXJuIERpYWdMb2dMZXZlbC5JTkZPO1xuICAgICAgICBjYXNlIFwid2FyblwiOlxuICAgICAgICAgICAgcmV0dXJuIERpYWdMb2dMZXZlbC5XQVJOO1xuICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgIHJldHVybiBEaWFnTG9nTGV2ZWwuRVJST1I7XG4gICAgfVxufTtcbi8qKlxuICogR2V0cyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBUcmFjZWxvb3BDbGllbnQuXG4gKiBUaGUgU0RLIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBBUEkga2V5IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMgVGhlIFRyYWNlbG9vcENsaWVudCBzaW5nbGV0b24gaW5zdGFuY2VcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgU0RLIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIG9yIHdhcyBpbml0aWFsaXplZCB3aXRob3V0IGFuIEFQSSBrZXlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gKiBhd2FpdCBjbGllbnQuYW5ub3RhdGlvbi5jcmVhdGUoeyBhbm5vdGF0aW9uVGFzazogJ3Rhc2tJZCcsIGVudGl0eUluc3RhbmNlSWQ6ICdlbnRpdHlJZCcsIHRhZ3M6IHsgc2NvcmU6IDAuOSB9IH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldENsaWVudCA9ICgpID0+IHtcbiAgICBpZiAoIV9jbGllbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhY2Vsb29wIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGdldHRpbmcgY2xpZW50LCBDYWxsIGluaXRpYWxpemUoKSBmaXJzdC5cIiArXG4gICAgICAgICAgICBcIklmIHlvdSBhbHJlYWR5IGNhbGxlZCBpbml0aWFsaXplKCksIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhbiBhcGkga2V5LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIF9jbGllbnQ7XG59O1xuXG5mdW5jdGlvbiB3aXRoRW50aXR5KHR5cGUsIHsgbmFtZSwgdmVyc2lvbiwgYXNzb2NpYXRpb25Qcm9wZXJ0aWVzLCB0cmFjZUNvbnRlbnQ6IG92ZXJyaWRlVHJhY2VDb250ZW50LCBpbnB1dFBhcmFtZXRlcnMsIHN1cHByZXNzVHJhY2luZzogc2hvdWxkU3VwcHJlc3NUcmFjaW5nLCB9LCBmbiwgdGhpc0FyZywgLi4uYXJncykge1xuICAgIGxldCBlbnRpdHlDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgICBpZiAodHlwZSA9PT0gVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuV09SS0ZMT1cgfHxcbiAgICAgICAgdHlwZSA9PT0gVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuQUdFTlQpIHtcbiAgICAgICAgZW50aXR5Q29udGV4dCA9IGVudGl0eUNvbnRleHQuc2V0VmFsdWUoV09SS0ZMT1dfTkFNRV9LRVksIG5hbWUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuQUdFTlQpIHtcbiAgICAgICAgZW50aXR5Q29udGV4dCA9IGVudGl0eUNvbnRleHQuc2V0VmFsdWUoQUdFTlRfTkFNRV9LRVksIG5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBlbnRpdHlQYXRoID0gZ2V0RW50aXR5UGF0aChlbnRpdHlDb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PT0gVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuVE9PTCB8fFxuICAgICAgICB0eXBlID09PSBUcmFjZWxvb3BTcGFuS2luZFZhbHVlcy5UQVNLKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxFbnRpdHlOYW1lID0gZW50aXR5UGF0aCA/IGAke2VudGl0eVBhdGh9LiR7bmFtZX1gIDogbmFtZTtcbiAgICAgICAgZW50aXR5Q29udGV4dCA9IGVudGl0eUNvbnRleHQuc2V0VmFsdWUoRU5USVRZX05BTUVfS0VZLCBmdWxsRW50aXR5TmFtZSk7XG4gICAgfVxuICAgIGlmIChvdmVycmlkZVRyYWNlQ29udGVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW50aXR5Q29udGV4dCA9IGVudGl0eUNvbnRleHQuc2V0VmFsdWUoQ09OVEVYVF9LRVlfQUxMT1dfVFJBQ0VfQ09OVEVOVCwgb3ZlcnJpZGVUcmFjZUNvbnRlbnQpO1xuICAgIH1cbiAgICBpZiAoYXNzb2NpYXRpb25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIGVudGl0eUNvbnRleHQgPSBlbnRpdHlDb250ZXh0LnNldFZhbHVlKEFTU09DQVRJT05fUFJPUEVSVElFU19LRVksIGFzc29jaWF0aW9uUHJvcGVydGllcyk7XG4gICAgfVxuICAgIGlmIChzaG91bGRTdXBwcmVzc1RyYWNpbmcpIHtcbiAgICAgICAgZW50aXR5Q29udGV4dCA9IHN1cHByZXNzVHJhY2luZyhlbnRpdHlDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQud2l0aChlbnRpdHlDb250ZXh0LCAoKSA9PiBnZXRUcmFjZXIoKS5zdGFydEFjdGl2ZVNwYW4oYCR7bmFtZX0uJHt0eXBlfWAsIHt9LCBlbnRpdHlDb250ZXh0LCBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuV09SS0ZMT1cgfHxcbiAgICAgICAgICAgIHR5cGUgPT09IFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzLkFHRU5UKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfV09SS0ZMT1dfTkFNRSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9OQU1FLCBuYW1lKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9QQVRILCBlbnRpdHlQYXRoIHx8IFwiXCIpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfU1BBTl9LSU5ELCB0eXBlKTtcbiAgICAgICAgLy8gU2V0IGFnZW50IG5hbWUgb24gYWxsIHNwYW5zIHdoZW4gdGhlcmUncyBhbiBhY3RpdmUgYWdlbnQgY29udGV4dFxuICAgICAgICBjb25zdCBhZ2VudE5hbWUgPSBlbnRpdHlDb250ZXh0LmdldFZhbHVlKEFHRU5UX05BTUVfS0VZKTtcbiAgICAgICAgaWYgKGFnZW50TmFtZSkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuR0VOX0FJX0FHRU5UX05BTUUsIGFnZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlRSQUNFTE9PUF9FTlRJVFlfVkVSU0lPTiwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFNlbmRUcmFjZXMoKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UGFyYW1ldGVycyAhPT0gbnVsbCAmJiBpbnB1dFBhcmFtZXRlcnMgIT09IHZvaWQgMCA/IGlucHV0UGFyYW1ldGVycyA6IGFyZ3M7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5wdXRbMF0gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgIShpbnB1dFswXSBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9JTlBVVCwgc2VyaWFsaXplKHsgYXJnczogW10sIGt3YXJnczogaW5wdXRbMF0gfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuVFJBQ0VMT09QX0VOVElUWV9JTlBVVCwgc2VyaWFsaXplKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJFcnJvciBzZXR0aW5nIGlucHV0IGF0dHJpYnV0ZXNcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcy50aGVuKChyZXNvbHZlZFJlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTZW5kVHJhY2VzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFNwYW5BdHRyaWJ1dGVzLlRSQUNFTE9PUF9FTlRJVFlfT1VUUFVULCBzZXJpYWxpemUocmVzb2x2ZWRSZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkVycm9yIHNldHRpbmcgb3V0cHV0IGF0dHJpYnV0ZXNcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTZW5kVHJhY2VzKCkpIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5UUkFDRUxPT1BfRU5USVRZX09VVFBVVCwgc2VyaWFsaXplKHJlcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkVycm9yIHNldHRpbmcgb3V0cHV0IGF0dHJpYnV0ZXNcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIHdpdGhXb3JrZmxvdyhjb25maWcsIGZuLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHdpdGhFbnRpdHkoVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuV09SS0ZMT1csIGNvbmZpZywgZm4sIHVuZGVmaW5lZCwgLi4uYXJncyk7XG59XG5mdW5jdGlvbiB3aXRoVGFzayhjb25maWcsIGZuLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHdpdGhFbnRpdHkoVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuVEFTSywgY29uZmlnLCBmbiwgdW5kZWZpbmVkLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIHdpdGhBZ2VudChjb25maWcsIGZuLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHdpdGhFbnRpdHkoVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuQUdFTlQsIGNvbmZpZywgZm4sIHVuZGVmaW5lZCwgLi4uYXJncyk7XG59XG5mdW5jdGlvbiB3aXRoVG9vbChjb25maWcsIGZuLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHdpdGhFbnRpdHkoVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuVE9PTCwgY29uZmlnLCBmbiwgdW5kZWZpbmVkLCAuLi5hcmdzKTtcbn1cbmZ1bmN0aW9uIGVudGl0eSh0eXBlLCBjb25maWcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGxldCBhY3R1YWxDb25maWc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsQ29uZmlnID0gY29uZmlnKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsQ29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW50aXR5TmFtZSA9IChfYSA9IGFjdHVhbENvbmZpZy5uYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvcmlnaW5hbE1ldGhvZC5uYW1lO1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhFbnRpdHkodHlwZSwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhY3R1YWxDb25maWcpLCB7IG5hbWU6IGVudGl0eU5hbWUgfSksIG9yaWdpbmFsTWV0aG9kLCB0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuZnVuY3Rpb24gd29ya2Zsb3coY29uZmlnKSB7XG4gICAgcmV0dXJuIGVudGl0eShUcmFjZWxvb3BTcGFuS2luZFZhbHVlcy5XT1JLRkxPVywgY29uZmlnICE9PSBudWxsICYmIGNvbmZpZyAhPT0gdm9pZCAwID8gY29uZmlnIDoge30pO1xufVxuZnVuY3Rpb24gdGFzayhjb25maWcpIHtcbiAgICByZXR1cm4gZW50aXR5KFRyYWNlbG9vcFNwYW5LaW5kVmFsdWVzLlRBU0ssIGNvbmZpZyAhPT0gbnVsbCAmJiBjb25maWcgIT09IHZvaWQgMCA/IGNvbmZpZyA6IHt9KTtcbn1cbmZ1bmN0aW9uIGFnZW50KGNvbmZpZykge1xuICAgIHJldHVybiBlbnRpdHkoVHJhY2Vsb29wU3BhbktpbmRWYWx1ZXMuQUdFTlQsIGNvbmZpZyAhPT0gbnVsbCAmJiBjb25maWcgIT09IHZvaWQgMCA/IGNvbmZpZyA6IHt9KTtcbn1cbmZ1bmN0aW9uIHRvb2woY29uZmlnKSB7XG4gICAgcmV0dXJuIGVudGl0eShUcmFjZWxvb3BTcGFuS2luZFZhbHVlcy5UT09MLCBjb25maWcgIT09IG51bGwgJiYgY29uZmlnICE9PSB2b2lkIDAgPyBjb25maWcgOiB7fSk7XG59XG5mdW5jdGlvbiBjbGVhbklucHV0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGlucHV0LmVudHJpZXMoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoKHZhbHVlKSA9PiBjbGVhbklucHV0KHZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBzZXJpYWxpemUgb2JqZWN0IG9uZSBieSBvbmVcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGlucHV0KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gY2xlYW5JbnB1dCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQ7XG59XG5mdW5jdGlvbiBzZXJpYWxpemUoaW5wdXQpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2xlYW5JbnB1dChpbnB1dCkpO1xufVxuXG5jbGFzcyBWZWN0b3JTcGFuIHtcbiAgICBjb25zdHJ1Y3RvcihzcGFuKSB7XG4gICAgICAgIHRoaXMuc3BhbiA9IHNwYW47XG4gICAgfVxuICAgIHJlcG9ydFF1ZXJ5KHsgcXVlcnlWZWN0b3IgfSkge1xuICAgICAgICBpZiAoIXNob3VsZFNlbmRUcmFjZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5zcGFuLmFkZEV2ZW50KEV2ZW50cy5EQl9RVUVSWV9FTUJFRERJTkdTKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNwYW4uYWRkRXZlbnQoRXZlbnRzLkRCX1FVRVJZX0VNQkVERElOR1MsIHtcbiAgICAgICAgICAgIFtFdmVudEF0dHJpYnV0ZXMuREJfUVVFUllfRU1CRURESU5HU19WRUNUT1JdOiBKU09OLnN0cmluZ2lmeShxdWVyeVZlY3RvciksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXBvcnRSZXN1bHRzKHsgcmVzdWx0cywgfSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc3Bhbi5hZGRFdmVudChFdmVudHMuREJfUVVFUllfUkVTVUxULCB7XG4gICAgICAgICAgICAgICAgW0V2ZW50QXR0cmlidXRlcy5EQl9RVUVSWV9SRVNVTFRfSURdOiByZXN1bHRzW2ldLmlkcyxcbiAgICAgICAgICAgICAgICBbRXZlbnRBdHRyaWJ1dGVzLkRCX1FVRVJZX1JFU1VMVF9TQ09SRV06IHJlc3VsdHNbaV0uc2NvcmVzLFxuICAgICAgICAgICAgICAgIFtFdmVudEF0dHJpYnV0ZXMuREJfUVVFUllfUkVTVUxUX0RJU1RBTkNFXTogcmVzdWx0c1tpXS5kaXN0YW5jZXMsXG4gICAgICAgICAgICAgICAgW0V2ZW50QXR0cmlidXRlcy5EQl9RVUVSWV9SRVNVTFRfTUVUQURBVEFdOiBKU09OLnN0cmluZ2lmeShyZXN1bHRzW2ldLm1ldGFkYXRhKSxcbiAgICAgICAgICAgICAgICBbRXZlbnRBdHRyaWJ1dGVzLkRCX1FVRVJZX1JFU1VMVF9WRUNUT1JdOiByZXN1bHRzW2ldLnZlY3RvcnMsXG4gICAgICAgICAgICAgICAgW0V2ZW50QXR0cmlidXRlcy5EQl9RVUVSWV9SRVNVTFRfRE9DVU1FTlRdOiByZXN1bHRzW2ldLmRvY3VtZW50cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgTExNU3BhbiB7XG4gICAgY29uc3RydWN0b3Ioc3Bhbikge1xuICAgICAgICB0aGlzLnNwYW4gPSBzcGFuO1xuICAgIH1cbiAgICByZXBvcnRSZXF1ZXN0KHsgbW9kZWwsIG1lc3NhZ2VzLCB9KSB7XG4gICAgICAgIHRoaXMuc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9NT0RFTF06IG1vZGVsLFxuICAgICAgICB9KTtcbiAgICAgICAgbWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX1BST01QVFN9LiR7aW5kZXh9LnJvbGVgXTogbWVzc2FnZS5yb2xlLFxuICAgICAgICAgICAgICAgIFtgJHtTcGFuQXR0cmlidXRlcy5MTE1fUFJPTVBUU30uJHtpbmRleH0uY29udGVudGBdOiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgID8gbWVzc2FnZS5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgIDogSlNPTi5zdHJpbmdpZnkobWVzc2FnZS5jb250ZW50KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVwb3J0UmVzcG9uc2UoeyBtb2RlbCwgdXNhZ2UsIGNvbXBsZXRpb25zLCB9KSB7XG4gICAgICAgIHRoaXMuc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuTExNX1JFU1BPTlNFX01PREVMLCBtb2RlbCk7XG4gICAgICAgIGlmICh1c2FnZSkge1xuICAgICAgICAgICAgdGhpcy5zcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfUFJPTVBUX1RPS0VOU106IHVzYWdlLnByb21wdF90b2tlbnMsXG4gICAgICAgICAgICAgICAgW1NwYW5BdHRyaWJ1dGVzLkxMTV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU106IHVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIFtTcGFuQXR0cmlidXRlcy5MTE1fVVNBR0VfVE9UQUxfVE9LRU5TXTogdXNhZ2UudG90YWxfdG9rZW5zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcGxldGlvbnMgPT09IG51bGwgfHwgY29tcGxldGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRpb25zLmZvckVhY2goKGNvbXBsZXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0uZmluaXNoX3JlYXNvbmBdOiBjb21wbGV0aW9uLmZpbmlzaF9yZWFzb24sXG4gICAgICAgICAgICAgICAgW2Ake1NwYW5BdHRyaWJ1dGVzLkxMTV9DT01QTEVUSU9OU30uJHtpbmRleH0ucm9sZWBdOiBjb21wbGV0aW9uLm1lc3NhZ2Uucm9sZSxcbiAgICAgICAgICAgICAgICBbYCR7U3BhbkF0dHJpYnV0ZXMuTExNX0NPTVBMRVRJT05TfS4ke2luZGV4fS5jb250ZW50YF06IGNvbXBsZXRpb24ubWVzc2FnZS5jb250ZW50IHx8IFwiXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gd2l0aFZlY3RvckRCQ2FsbCh7IHZlbmRvciwgdHlwZSB9LCBmbiwgdGhpc0FyZykge1xuICAgIGNvbnN0IGVudGl0eUNvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgIHJldHVybiBnZXRUcmFjZXIoKS5zdGFydEFjdGl2ZVNwYW4oYCR7dmVuZG9yfS4ke3R5cGV9YCwgeyBbU3BhbkF0dHJpYnV0ZXMuTExNX1JFUVVFU1RfVFlQRV06IHR5cGUgfSwgZW50aXR5Q29udGV4dCwgKHNwYW4pID0+IHtcbiAgICAgICAgLy8gU2V0IGFnZW50IG5hbWUgaWYgdGhlcmUncyBhbiBhY3RpdmUgYWdlbnQgY29udGV4dFxuICAgICAgICBjb25zdCBhZ2VudE5hbWUgPSBlbnRpdHlDb250ZXh0LmdldFZhbHVlKEFHRU5UX05BTUVfS0VZKTtcbiAgICAgICAgaWYgKGFnZW50TmFtZSkge1xuICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuR0VOX0FJX0FHRU5UX05BTUUsIGFnZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gZm4uYXBwbHkodGhpc0FyZywgW3sgc3BhbjogbmV3IFZlY3RvclNwYW4oc3BhbikgfV0pO1xuICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcy50aGVuKChyZXNvbHZlZFJlcykgPT4ge1xuICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdpdGhMTE1DYWxsKHsgdmVuZG9yLCB0eXBlIH0sIGZuLCB0aGlzQXJnKSB7XG4gICAgY29uc3QgY3VycmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgIGNvbnN0IHNwYW4gPSBnZXRUcmFjZXIoKS5zdGFydFNwYW4oYCR7dmVuZG9yfS4ke3R5cGV9YCwge30sIGN1cnJlbnRDb250ZXh0KTtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTcGFuQXR0cmlidXRlcy5MTE1fUkVRVUVTVF9UWVBFLCB0eXBlKTtcbiAgICAvLyBTZXQgYWdlbnQgbmFtZSBpZiB0aGVyZSdzIGFuIGFjdGl2ZSBhZ2VudCBjb250ZXh0XG4gICAgY29uc3QgYWdlbnROYW1lID0gY3VycmVudENvbnRleHQuZ2V0VmFsdWUoQUdFTlRfTkFNRV9LRVkpO1xuICAgIGlmIChhZ2VudE5hbWUpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU3BhbkF0dHJpYnV0ZXMuR0VOX0FJX0FHRU5UX05BTUUsIGFnZW50TmFtZSk7XG4gICAgfVxuICAgIHRyYWNlLnNldFNwYW4oY3VycmVudENvbnRleHQsIHNwYW4pO1xuICAgIGNvbnN0IHJlcyA9IGZuLmFwcGx5KHRoaXNBcmcsIFt7IHNwYW46IG5ldyBMTE1TcGFuKHNwYW4pIH1dKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmVzLnRoZW4oKHJlc29sdmVkUmVzKSA9PiB7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Bhbi5lbmQoKTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiB3aXRoQXNzb2NpYXRpb25Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGZuLCB0aGlzQXJnLCAuLi5hcmdzKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbnRleHQgPSBjb250ZXh0XG4gICAgICAgIC5hY3RpdmUoKVxuICAgICAgICAuc2V0VmFsdWUoQVNTT0NBVElPTl9QUk9QRVJUSUVTX0tFWSwgcHJvcGVydGllcyk7XG4gICAgcmV0dXJuIGNvbnRleHQud2l0aChuZXdDb250ZXh0LCBmbiwgdGhpc0FyZywgLi4uYXJncyk7XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIGN1c3RvbSBtZXRyaWMgdG8gdGhlIGN1cnJlbnQgYWN0aXZlIHNwYW4uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGFkZCBhIGN1c3RvbSBtZXRyaWMgdG8gdGhlIGN1cnJlbnQgc3BhbiBpbiB0aGUgdHJhY2UuXG4gKiBJZiB0aGVyZSBpcyBubyBhY3RpdmUgc3BhbiwgYSB3YXJuaW5nIHdpbGwgYmUgbG9nZ2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRyaWNOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBtZXRyaWMuXG4gKiBAcGFyYW0ge251bWJlcn0gbWV0cmljVmFsdWUgLSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY3VzdG9tIG1ldHJpYy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcmVwb3J0Q3VzdG9tTWV0cmljKCdwcm9jZXNzaW5nX3RpbWUnLCAxNTApO1xuICovXG5jb25zdCByZXBvcnRDdXN0b21NZXRyaWMgPSAobWV0cmljTmFtZSwgbWV0cmljVmFsdWUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gICAgY29uc3QgY3VycmVudFNwYW4gPSB0cmFjZS5nZXRTcGFuKGN1cnJlbnRDb250ZXh0KTtcbiAgICBpZiAoY3VycmVudFNwYW4pIHtcbiAgICAgICAgY3VycmVudFNwYW4uc2V0QXR0cmlidXRlKGB0cmFjZWxvb3AuY3VzdG9tX21ldHJpYy4ke21ldHJpY05hbWV9YCwgbWV0cmljVmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGlhZy53YXJuKGBObyBhY3RpdmUgc3BhbiBmb3VuZCB0byByZXBvcnQgY3VzdG9tIG1ldHJpYzogJHttZXRyaWNOYW1lfWApO1xuICAgIH1cbn07XG5cbmNvbnN0IFRFTVBMQVRJTkdfRU5HSU5FID0ge1xuICAgIEpJTkpBMjogXCJqaW5qYTJcIixcbn07XG5cbmNvbnN0IGVudiA9IG5ldyBFbnZpcm9ubWVudChudWxsLCB7XG4gICAgdGhyb3dPblVuZGVmaW5lZDogdHJ1ZSwgLy8gdGhyb3cgZXJyb3IgaWYgcGFyYW0gbm90IGZvdW5kXG59KTtcbmNvbnN0IHJlbmRlck1lc3NhZ2VzID0gKHByb21wdFZlcnNpb24sIHZhcmlhYmxlcykgPT4ge1xuICAgIGlmIChwcm9tcHRWZXJzaW9uLnRlbXBsYXRpbmdfZW5naW5lID09PSBURU1QTEFUSU5HX0VOR0lORS5KSU5KQTIpIHtcbiAgICAgICAgcmV0dXJuIHByb21wdFZlcnNpb24ubWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS50ZW1wbGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogZW52LnJlbmRlclN0cmluZyhtZXNzYWdlLnRlbXBsYXRlLCB2YXJpYWJsZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UudGVtcGxhdGUubWFwKChjb250ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZW52LnJlbmRlclN0cmluZyhjb250ZW50LnRleHQsIHZhcmlhYmxlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IG1lc3NhZ2Uucm9sZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRyYWNlbG9vcEVycm9yKGBGYWlsZWQgdG8gcmVuZGVyIG1lc3NhZ2UgdGVtcGxhdGUuIE1pc3NpbmcgdmFyaWFibGVzP2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUcmFjZWxvb3BFcnJvcihgVGVtcGxhdGluZyBlbmdpbmUgJHtwcm9tcHRWZXJzaW9uLnRlbXBsYXRpbmdfZW5naW5lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgfVxufTtcblxuY29uc3QgZ2V0RWZmZWN0aXZlVmVyc2lvbiA9IChwcm9tcHQpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gcHJvbXB0LnZlcnNpb25zLmZpbmQoKHYpID0+IHYuaWQgPT09IHByb21wdC50YXJnZXQudmVyc2lvbik7XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBUcmFjZWxvb3BFcnJvcihgUHJvbXB0IHZlcnNpb24gJHtwcm9tcHQudGFyZ2V0LnZlcnNpb259IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gdmVyc2lvbjtcbn07XG5jb25zdCBtYW5hZ2VkUHJvbXB0VHJhY2luZ0F0dHJpYnV0ZXMgPSAocHJvbXB0LCBwcm9tcHRWZXJzaW9uLCB2YXJpYWJsZXMpID0+IHtcbiAgICBjb25zdCB2YXJpYWJsZUF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyh2YXJpYWJsZXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2B0cmFjZWxvb3AucHJvbXB0LnRlbXBsYXRlX3ZhcmlhYmxlcy4ke2tleX1gXSA9IHZhcmlhYmxlc1trZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IFwidHJhY2Vsb29wLnByb21wdC5rZXlcIjogcHJvbXB0LmtleSwgXCJ0cmFjZWxvb3AucHJvbXB0LnZlcnNpb25cIjogcHJvbXB0VmVyc2lvbi52ZXJzaW9uLCBcInRyYWNlbG9vcC5wcm9tcHQudmVyc2lvbl9oYXNoXCI6IHByb21wdFZlcnNpb24uaGFzaCwgXCJ0cmFjZWxvb3AucHJvbXB0LnZlcnNpb25fbmFtZVwiOiBwcm9tcHRWZXJzaW9uLm5hbWUgfSwgdmFyaWFibGVBdHRyaWJ1dGVzKTtcbn07XG5jb25zdCBnZXRQcm9tcHQgPSAoa2V5LCB2YXJpYWJsZXMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcHJvbXB0ID0gZ2V0UHJvbXB0QnlLZXkoa2V5KTtcbiAgICBjb25zdCBwcm9tcHRWZXJzaW9uID0gZ2V0RWZmZWN0aXZlVmVyc2lvbihwcm9tcHQpO1xuICAgIGxldCByZXN1bHQgPSB7fTsgLy9UT0RPIC0gU0RLIG5lZWRzIHRvIGRvIHdvcmsgc3BlY2lmaWMgdG8gZWFjaCB2ZW5kb3IvbW9kZWw/IG1heWJlIHdlIGRvIHRoaXMgaW4gdGhlIGJhY2tlbmQ/XG4gICAgaWYgKHByb21wdFZlcnNpb24ubGxtX2NvbmZpZy5tb2RlID09PSBcImNvbXBsZXRpb25cIikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gcmVuZGVyTWVzc2FnZXMocHJvbXB0VmVyc2lvbiwgdmFyaWFibGVzKTtcbiAgICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcm9tcHRWZXJzaW9uLmxsbV9jb25maWcpLCB7IHByb21wdDogKF9hID0gbWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXNzYWdlWzBdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29udGVudCB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oeyBtZXNzYWdlczogcmVuZGVyTWVzc2FnZXMocHJvbXB0VmVyc2lvbiwgdmFyaWFibGVzKSB9LCBwcm9tcHRWZXJzaW9uLmxsbV9jb25maWcpO1xuICAgIH1cbiAgICBpZiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdFtcInN0b3BcIl0ubGVuZ3RoKSA9PT0gMClcbiAgICAgICAgZGVsZXRlIHJlc3VsdFtcInN0b3BcIl07XG4gICAgZGVsZXRlIHJlc3VsdFtcIm1vZGVcIl07XG4gICAgcmVzdWx0LmV4dHJhQXR0cmlidXRlcyA9IG1hbmFnZWRQcm9tcHRUcmFjaW5nQXR0cmlidXRlcyhwcm9tcHQsIHByb21wdFZlcnNpb24sIHZhcmlhYmxlcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCB7IEFMTF9JTlNUUlVNRU5UQVRJT05fTElCUkFSSUVTLCBBcmd1bWVudE5vdFByb3ZpZGVkRXJyb3IsIENvbHVtbiwgRGF0YXNldCwgRGF0YXNldHMsIEV2YWx1YXRvciwgRXhwZXJpbWVudCwgSW1hZ2VVcGxvYWRlciwgSW5pdGlhbGl6YXRpb25FcnJvciwgTExNU3BhbiwgTm90SW5pdGlhbGl6ZWRFcnJvciwgUHJvbXB0Tm90Rm91bmRFcnJvciwgUm93LCBTRVZFUklUWSwgVHJhY2Vsb29wQ2xpZW50LCBUcmFjZWxvb3BFcnJvciwgVmVjdG9yU3BhbiwgYWdlbnQsIGNyZWF0ZVNwYW5Qcm9jZXNzb3IsIGZvcmNlRmx1c2gsIGdldENsaWVudCwgZ2V0UHJvbXB0LCBnZXRUcmFjZWxvb3BUcmFjZXIsIGluaXRpYWxpemUsIHJlcG9ydEN1c3RvbU1ldHJpYywgdGFzaywgdG9vbCwgdHJhY2Vsb29wSW5zdHJ1bWVudGF0aW9uTGlicmFyaWVzLCB3YWl0Rm9ySW5pdGlhbGl6YXRpb24sIHdpdGhBZ2VudCwgd2l0aEFzc29jaWF0aW9uUHJvcGVydGllcywgd2l0aExMTUNhbGwsIHdpdGhUYXNrLCB3aXRoVG9vbCwgd2l0aFZlY3RvckRCQ2FsbCwgd2l0aFdvcmtmbG93LCB3b3JrZmxvdyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwKICAgICJpbXBvcnQgeyBfX29yaWdpbmFsQ29uc29sZSB9IGZyb20gJy4uL290ZWwvbG9nZ2VyJztcbmltcG9ydCB7IGZvcm1hdE1lc3NhZ2UgfSBmcm9tICcuL3V0aWwnO1xuY29uc3QgQk9MRCA9ICdcXHgxYlsxbSc7XG5jb25zdCBSRVNFVCA9ICdcXHgxYlswbSc7XG4vLyBIZWxwZXIgdG8gY29udmVydCBoZXggY29sb3IgdG8gQU5TSSAyNC1iaXQgY29sb3IgY29kZVxuZnVuY3Rpb24gaGV4VG9BbnNpKGhleCkge1xuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KTtcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnNsaWNlKDMsIDUpLCAxNik7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zbGljZSg1LCA3KSwgMTYpO1xuICAgIHJldHVybiBgXFx4MWJbMzg7Mjske3J9OyR7Z307JHtifW1gO1xufVxuZnVuY3Rpb24gc2hvdWxkVXNlQ29sb3JzKCkge1xuICAgIC8vIENoZWNrIGZvciBOT19DT0xPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoYW55IG5vbi1lbXB0eSB2YWx1ZSBkaXNhYmxlcyBjb2xvcnMpXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PX0NPTE9SKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZm9yIFRFUk09ZHVtYlxuICAgIGlmIChwcm9jZXNzLmVudi5URVJNID09PSAnZHVtYicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBzdGRvdXQgaXMgYSBUVFlcbiAgICBpZiAoIXByb2Nlc3Muc3Rkb3V0IHx8IHR5cGVvZiBwcm9jZXNzLnN0ZG91dC5pc1RUWSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5zdGRvdXQgJiYgdHlwZW9mIHByb2Nlc3Muc3Rkb3V0LmlzVFRZICE9PSAndW5kZWZpbmVkJyAmJiAhcHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldExvZ0NvbG9ycyhzY2hlbWUpIHtcbiAgICBpZiAoc2NoZW1lID09PSAnbGlnaHQnKSB7XG4gICAgICAgIC8vIERhcmtlciwgaGlnaC1jb250cmFzdCBjb2xvcnMgZm9yIGxpZ2h0IGJhY2tncm91bmRzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFjZToge1xuICAgICAgICAgICAgICAgIGxldmVsOiBoZXhUb0Fuc2koJyMwMDhCOEInKSArIEJPTEQsIC8vIERhcmsgY3lhblxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGhleFRvQW5zaSgnIzRCNEI0QicpLCAvLyBEYXJrIGdyYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWJ1Zzoge1xuICAgICAgICAgICAgICAgIGxldmVsOiBoZXhUb0Fuc2koJyMwMDAwQ0QnKSArIEJPTEQsIC8vIE1lZGl1bSBibHVlXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogaGV4VG9BbnNpKCcjMDA2NDAwJyksIC8vIERhcmsgZ3JlZW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICAgICAgbGV2ZWw6IGhleFRvQW5zaSgnI0ZGOEMwMCcpICsgQk9MRCwgLy8gRGFyayBvcmFuZ2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBoZXhUb0Fuc2koJyMwMDY2Q0MnKSArIEJPTEQsIC8vIFN0cm9uZyBibHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2Fybjoge1xuICAgICAgICAgICAgICAgIGxldmVsOiBoZXhUb0Fuc2koJyM5NDAwRDMnKSArIEJPTEQsIC8vIERhcmsgdmlvbGV0XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogaGV4VG9BbnNpKCcjOEIwMDhCJyksIC8vIERhcmsgbWFnZW50YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgbGV2ZWw6IGhleFRvQW5zaSgnI0RDMTQzQycpICsgQk9MRCwgLy8gQ3JpbXNvblxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGhleFRvQW5zaSgnIzhCMDAwMCcpICsgQk9MRCwgLy8gRGFyayByZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIERhcmsgbW9kZSBjb2xvcnMgKGJyaWdodGVyIGZvciBkYXJrIGJhY2tncm91bmRzKVxuICAgIHJldHVybiB7XG4gICAgICAgIHRyYWNlOiB7XG4gICAgICAgICAgICBsZXZlbDogaGV4VG9BbnNpKCcjMDBGRkZGJykgKyBCT0xELCAvLyBDeWFuXG4gICAgICAgICAgICBtZXNzYWdlOiBoZXhUb0Fuc2koJyNBMEEwQTAnKSwgLy8gTGlnaHQgZ3JheVxuICAgICAgICB9LFxuICAgICAgICBkZWJ1Zzoge1xuICAgICAgICAgICAgbGV2ZWw6IGhleFRvQW5zaSgnIzVDOUNGRicpICsgQk9MRCwgLy8gQmx1ZVxuICAgICAgICAgICAgbWVzc2FnZTogaGV4VG9BbnNpKCcjOTBFRTkwJyksIC8vIExpZ2h0IGdyZWVuXG4gICAgICAgIH0sXG4gICAgICAgIGluZm86IHtcbiAgICAgICAgICAgIGxldmVsOiBoZXhUb0Fuc2koJyNGRkQ3MDAnKSArIEJPTEQsIC8vIEdvbGQvWWVsbG93XG4gICAgICAgICAgICBtZXNzYWdlOiBoZXhUb0Fuc2koJyNGRkZGRkYnKSArIEJPTEQsIC8vIFdoaXRlXG4gICAgICAgIH0sXG4gICAgICAgIHdhcm46IHtcbiAgICAgICAgICAgIGxldmVsOiBoZXhUb0Fuc2koJyNGRjAwRkYnKSArIEJPTEQsIC8vIE1hZ2VudGFcbiAgICAgICAgICAgIG1lc3NhZ2U6IGhleFRvQW5zaSgnI0ZGMDBGRicpLCAvLyBNYWdlbnRhXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBsZXZlbDogaGV4VG9BbnNpKCcjRkY0NDQ0JykgKyBCT0xELCAvLyBSZWRcbiAgICAgICAgICAgIG1lc3NhZ2U6IGhleFRvQW5zaSgnI0ZGNDQ0NCcpLCAvLyBSZWRcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLy8gRGV0ZWN0IGNvbG9yIHNjaGVtZSBmcm9tIGVudmlyb25tZW50XG5mdW5jdGlvbiBkZXRlY3RDb2xvclNjaGVtZSgpIHtcbiAgICBjb25zdCBzY2hlbWUgPSBwcm9jZXNzLmVudi5DT0xPUl9TQ0hFTUU/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNjaGVtZSA9PT0gJ2xpZ2h0JyB8fCBzY2hlbWUgPT09ICdkYXJrJykge1xuICAgICAgICByZXR1cm4gc2NoZW1lO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHtcbiAgICAgICAgcmV0dXJuICdsaWdodCc7XG4gICAgfVxuICAgIHJldHVybiAnZGFyayc7IC8vIERlZmF1bHQgdG8gZGFyayBtb2RlXG59XG5jb25zdCBOT0NPTE9SUyA9IE9iamVjdC5mcmVlemUoeyBsZXZlbDogJycsIHJlc2V0OiAnJywgbWVzc2FnZTogJycgfSk7XG4vKipcbiAqIENvbnNvbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIExvZ2dlciBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUxvZ2dlciB7XG4gICAgY29udGV4dDtcbiAgICBmb3JtYXRDb250ZXh0O1xuICAgIGxvZ0xldmVsO1xuICAgIGNvbG9ycztcbiAgICBkZXRlY3RlZFRyYWNlTG9vcExvZztcbiAgICB1c2VDb2xvcnM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb25zb2xlIGxvZ2dlclxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBJbml0aWFsIGNvbnRleHQgZm9yIHRoZSBsb2dnZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0ID0ge30sIGZvcm1hdENvbnRleHQgPSB0cnVlLCBsb2dMZXZlbCA9ICdpbmZvJykge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmZvcm1hdENvbnRleHQgPSBmb3JtYXRDb250ZXh0O1xuICAgICAgICB0aGlzLmxvZ0xldmVsID0gbG9nTGV2ZWw7XG4gICAgICAgIHRoaXMudXNlQ29sb3JzID0gc2hvdWxkVXNlQ29sb3JzKCk7XG4gICAgICAgIHRoaXMuY29sb3JzID0gdGhpcy51c2VDb2xvcnNcbiAgICAgICAgICAgID8gZ2V0TG9nQ29sb3JzKGRldGVjdENvbG9yU2NoZW1lKCkpXG4gICAgICAgICAgICA6IHt9O1xuICAgIH1cbiAgICBzaG91bGRMb2cobGV2ZWwpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmxvZ0xldmVsKSB7XG4gICAgICAgICAgICBjYXNlICd0cmFjZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlICdkZWJ1Zyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldmVsID09PSAnZGVidWcnIHx8IGxldmVsID09PSAnaW5mbycgfHwgbGV2ZWwgPT09ICd3YXJuJyB8fCBsZXZlbCA9PT0gJ2Vycm9yJztcbiAgICAgICAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbCA9PT0gJ2luZm8nIHx8IGxldmVsID09PSAnd2FybicgfHwgbGV2ZWwgPT09ICdlcnJvcic7XG4gICAgICAgICAgICBjYXNlICd3YXJuJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2ZWwgPT09ICd3YXJuJyB8fCBsZXZlbCA9PT0gJ2Vycm9yJztcbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2ZWwgPT09ICdlcnJvcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgYSB0cmFjZSBtZXNzYWdlIChtb3N0IHZlcmJvc2UpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZ1xuICAgICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAgICovXG4gICAgdHJhY2UobWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTG9nKCd0cmFjZScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMudXNlQ29sb3JzID8gdGhpcy5jb2xvcnMudHJhY2UgOiBOT0NPTE9SUztcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBmb3JtYXRNZXNzYWdlKHRoaXMuZm9ybWF0Q29udGV4dCwgdGhpcy5jb250ZXh0LCBtZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmRlYnVnKGAke2NvbG9ycy5sZXZlbH1bVFJBQ0VdJHtSRVNFVH0gJHtjb2xvcnMubWVzc2FnZX0ke2Zvcm1hdHRlZE1lc3NhZ2V9JHtSRVNFVH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayB0byBkaXJlY3QgbG9nZ2luZyBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycy50cmFjZTtcbiAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmRlYnVnKGAke2NvbG9ycy5sZXZlbH1bVFJBQ0VdJHtSRVNFVH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUuZXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgbG9nIG1lc3NhZ2U6JywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgYSBkZWJ1ZyBtZXNzYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZ1xuICAgICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAgICovXG4gICAgZGVidWcobWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTG9nKCdkZWJ1ZycpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMudXNlQ29sb3JzID8gdGhpcy5jb2xvcnMuZGVidWcgOiBOT0NPTE9SUztcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBmb3JtYXRNZXNzYWdlKHRoaXMuZm9ybWF0Q29udGV4dCwgdGhpcy5jb250ZXh0LCBtZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmRlYnVnKGAke2NvbG9ycy5sZXZlbH1bREVCVUddJHtSRVNFVH0gJHtjb2xvcnMubWVzc2FnZX0ke2Zvcm1hdHRlZE1lc3NhZ2V9JHtSRVNFVH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayB0byBkaXJlY3QgbG9nZ2luZyBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycy5kZWJ1ZztcbiAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmRlYnVnKGAke2NvbG9ycy5sZXZlbH1bREVCVUddJHtSRVNFVH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUuZXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgbG9nIG1lc3NhZ2U6JywgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgYW4gaW5mbyBtZXNzYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZ1xuICAgICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAgICovXG4gICAgaW5mbyhtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRMb2coJ2luZm8nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1cHByZXNzIHRoZSBkZWZhdWx0IHRyYWNlbG9vcCBtZXNzYWdlIGF0IGluZm8gbGV2ZWxcbiAgICAgICAgaWYgKCF0aGlzLmRldGVjdGVkVHJhY2VMb29wTG9nICYmXG4gICAgICAgICAgICB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ1RyYWNlbG9vcCBleHBvcnRpbmcgdHJhY2VzIHRvJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0ZWRUcmFjZUxvb3BMb2cgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkTG9nKCdkZWJ1ZycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JzID0gdGhpcy51c2VDb2xvcnMgPyB0aGlzLmNvbG9ycy5pbmZvIDogTk9DT0xPUlM7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gZm9ybWF0TWVzc2FnZSh0aGlzLmZvcm1hdENvbnRleHQsIHRoaXMuY29udGV4dCwgbWVzc2FnZSwgYXJncyk7XG4gICAgICAgICAgICBfX29yaWdpbmFsQ29uc29sZS5pbmZvKGAke2NvbG9ycy5sZXZlbH1bSU5GT10ke1JFU0VUfSAke2NvbG9ycy5tZXNzYWdlfSR7Zm9ybWF0dGVkTWVzc2FnZX0ke1JFU0VUfWApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGRpcmVjdCBsb2dnaW5nIGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzLmluZm87XG4gICAgICAgICAgICBfX29yaWdpbmFsQ29uc29sZS5pbmZvKGAke2NvbG9ycy5sZXZlbH1bSU5GT10ke1JFU0VUfSAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gICAgICAgICAgICBfX29yaWdpbmFsQ29uc29sZS5lcnJvcignRXJyb3IgZm9ybWF0dGluZyBsb2cgbWVzc2FnZTonLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZyBhIHdhcm5pbmcgbWVzc2FnZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsb2dcbiAgICAgKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGxvZ1xuICAgICAqL1xuICAgIHdhcm4obWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTG9nKCd3YXJuJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JzID0gdGhpcy51c2VDb2xvcnMgPyB0aGlzLmNvbG9ycy53YXJuIDogTk9DT0xPUlM7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gZm9ybWF0TWVzc2FnZSh0aGlzLmZvcm1hdENvbnRleHQsIHRoaXMuY29udGV4dCwgbWVzc2FnZSwgYXJncyk7XG4gICAgICAgICAgICBfX29yaWdpbmFsQ29uc29sZS53YXJuKGAke2NvbG9ycy5sZXZlbH1bV0FSTl0ke1JFU0VUfSAgJHtjb2xvcnMubWVzc2FnZX0ke2Zvcm1hdHRlZE1lc3NhZ2V9JHtSRVNFVH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayB0byBkaXJlY3QgbG9nZ2luZyBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycy53YXJuO1xuICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUud2FybihgJHtjb2xvcnMubGV2ZWx9W1dBUk5dJHtSRVNFVH0gICR7bWVzc2FnZX1gLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmVycm9yKCdFcnJvciBmb3JtYXR0aW5nIGxvZyBtZXNzYWdlOicsIGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nXG4gICAgICogQHBhcmFtIGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBsb2dcbiAgICAgKi9cbiAgICBlcnJvcihtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRMb2coJ2Vycm9yJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JzID0gdGhpcy51c2VDb2xvcnMgPyB0aGlzLmNvbG9ycy5lcnJvciA6IE5PQ09MT1JTO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZSA9IGZvcm1hdE1lc3NhZ2UodGhpcy5mb3JtYXRDb250ZXh0LCB0aGlzLmNvbnRleHQsIG1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUuZXJyb3IoYCR7Y29sb3JzLmxldmVsfVtFUlJPUl0ke1JFU0VUfSAke2NvbG9ycy5tZXNzYWdlfSR7Zm9ybWF0dGVkTWVzc2FnZX0ke1JFU0VUfWApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGRpcmVjdCBsb2dnaW5nIGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzLmVycm9yO1xuICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUuZXJyb3IoYCR7Y29sb3JzLmxldmVsfVtFUlJPUl0ke1JFU0VUfSAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gICAgICAgICAgICBfX29yaWdpbmFsQ29uc29sZS5lcnJvcignRXJyb3IgZm9ybWF0dGluZyBsb2cgbWVzc2FnZTonLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvZyBhIGZhdGFsIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQgdGhlIHByb2Nlc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nXG4gICAgICogQHBhcmFtIGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBsb2dcbiAgICAgKi9cbiAgICBmYXRhbChtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY2hpbGQgbG9nZ2VyIHdpdGggYWRkaXRpb25hbCBjb250ZXh0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0cyAtIEFkZGl0aW9uYWwgY29udGV4dCBmb3IgdGhlIGNoaWxkIGxvZ2dlclxuICAgICAqIEByZXR1cm5zIEEgbmV3IGxvZ2dlciBpbnN0YW5jZSB3aXRoIHRoZSBhZGRpdGlvbmFsIGNvbnRleHRcbiAgICAgKi9cbiAgICBjaGlsZChvcHRzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29uc29sZUxvZ2dlcih7XG4gICAgICAgICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9LCB0aGlzLmZvcm1hdENvbnRleHQsIHRoaXMubG9nTGV2ZWwpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnNvbGUuanMubWFwIiwKICAgICJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc2FmZVN0cmluZ2lmeSB9IGZyb20gJ0BhZ2VudHVpdHkvY29yZSc7XG5pbXBvcnQgKiBhcyBMb2dzQVBJIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaS1sb2dzJztcbmltcG9ydCBDb25zb2xlTG9nZ2VyIGZyb20gJy4uL2xvZ2dlci9jb25zb2xlJztcbi8qKlxuICogUmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBjb25zb2xlIG9iamVjdCBiZWZvcmUgcGF0Y2hpbmcuXG4gKiBXZSB1c2UgYSBnbG9iYWwgc3ltYm9sIHRvIGVuc3VyZSB3ZSBvbmx5IGNhcHR1cmUgdGhlIG9yaWdpbmFsIGNvbnNvbGUgb25jZSxcbiAqIHByZXZlbnRpbmcgZG91YmxlLXBhdGNoaW5nIG9uIGhvdCByZWxvYWQuXG4gKi9cbmNvbnN0IE9SSUdJTkFMX0NPTlNPTEVfS0VZID0gU3ltYm9sLmZvcignYWdlbnR1aXR5Lm9yaWdpbmFsQ29uc29sZScpO1xuLy8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGUgb3JpZ2luYWwgY29uc29sZSAocHJldmVudHMgZG91YmxlLXBhdGNoaW5nIG9uIHJlbG9hZClcbmNvbnN0IGV4aXN0aW5nT3JpZ2luYWwgPSBnbG9iYWxUaGlzW09SSUdJTkFMX0NPTlNPTEVfS0VZXTtcbmV4cG9ydCBjb25zdCBfX29yaWdpbmFsQ29uc29sZSA9IGV4aXN0aW5nT3JpZ2luYWwgPz8gT2JqZWN0LmNyZWF0ZShjb25zb2xlKTtcbi8vIFNhdmUgdG8gZ2xvYmFsIGlmIG5vdCBhbHJlYWR5IHNhdmVkXG5pZiAoIWV4aXN0aW5nT3JpZ2luYWwpIHtcbiAgICBnbG9iYWxUaGlzW09SSUdJTkFMX0NPTlNPTEVfS0VZXSA9IF9fb3JpZ2luYWxDb25zb2xlO1xufVxuZXhwb3J0IGNsYXNzIE90ZWxMb2dnZXIge1xuICAgIGRlbGVnYXRlO1xuICAgIGNvbnRleHQ7XG4gICAgbG9nZ2VyO1xuICAgIGxvZ0xldmVsO1xuICAgIGNvbnN0cnVjdG9yKHVzZUNvbnNvbGUsIGRlbGVnYXRlLCBjb250ZXh0LCBsb2dMZXZlbCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMubG9nTGV2ZWwgPSBsb2dMZXZlbCA/PyAnaW5mbyc7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gdXNlQ29uc29sZSA/IG5ldyBDb25zb2xlTG9nZ2VyKGNvbnRleHQsIGZhbHNlLCB0aGlzLmxvZ0xldmVsKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZm9ybWF0TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gc2FmZVN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBvciBvdGhlciB1bmtub3duIHN0cmluZ2lmaWNhdGlvbiBlcnJvcnNcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgICB9XG4gICAgZW1pdChzZXZlcml0eU51bWJlciwgc2V2ZXJpdHlUZXh0LCBib2R5KSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLmdldEF0dHJpYnV0ZXMoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHlOdW1iZXIsXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHlUZXh0LFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gTG9nIGVycm9yIHRvIGNvbnNvbGUgaWYgYXZhaWxhYmxlLCBidXQgZG9uJ3QgZmFpbCB0aGUgZW50aXJlIG9wZXJhdGlvblxuICAgICAgICAgICAgdGhpcy5sb2dnZXI/LmVycm9yKCdGYWlsZWQgdG8gZW1pdCBsb2cgdG8gT1RMUCBpbnN0YW5jZTonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkTG9nKGxldmVsKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5sb2dMZXZlbCkge1xuICAgICAgICAgICAgY2FzZSAndHJhY2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSAnZGVidWcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAobGV2ZWwgPT09IExvZ3NBUEkuU2V2ZXJpdHlOdW1iZXIuREVCVUcgfHxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPT0gTG9nc0FQSS5TZXZlcml0eU51bWJlci5JTkZPIHx8XG4gICAgICAgICAgICAgICAgICAgIGxldmVsID09IExvZ3NBUEkuU2V2ZXJpdHlOdW1iZXIuV0FSTiB8fFxuICAgICAgICAgICAgICAgICAgICBsZXZlbCA9PSBMb2dzQVBJLlNldmVyaXR5TnVtYmVyLkVSUk9SKTtcbiAgICAgICAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICAgICAgICAgIHJldHVybiAobGV2ZWwgPT0gTG9nc0FQSS5TZXZlcml0eU51bWJlci5JTkZPIHx8XG4gICAgICAgICAgICAgICAgICAgIGxldmVsID09IExvZ3NBUEkuU2V2ZXJpdHlOdW1iZXIuV0FSTiB8fFxuICAgICAgICAgICAgICAgICAgICBsZXZlbCA9PSBMb2dzQVBJLlNldmVyaXR5TnVtYmVyLkVSUk9SKTtcbiAgICAgICAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICAgICAgICAgIHJldHVybiBsZXZlbCA9PSBMb2dzQVBJLlNldmVyaXR5TnVtYmVyLldBUk4gfHwgbGV2ZWwgPT0gTG9nc0FQSS5TZXZlcml0eU51bWJlci5FUlJPUjtcbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2ZWwgPT0gTG9nc0FQSS5TZXZlcml0eU51bWJlci5FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyYWNlKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZExvZyhMb2dzQVBJLlNldmVyaXR5TnVtYmVyLlRSQUNFKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyPy50cmFjZShtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgICAgbGV0IGJvZHk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBib2R5ID0gZm9ybWF0KHRoaXMuZm9ybWF0TWVzc2FnZShtZXNzYWdlKSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgaWYgZm9ybWF0IGNhdXNlcyByZWN1cnNpb25cbiAgICAgICAgICAgIGJvZHkgPSBgJHt0aGlzLmZvcm1hdE1lc3NhZ2UobWVzc2FnZSl9ICR7YXJncy5tYXAoKGFyZykgPT4gU3RyaW5nKGFyZykpLmpvaW4oJyAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChMb2dzQVBJLlNldmVyaXR5TnVtYmVyLlRSQUNFLCAnVFJBQ0UnLCBib2R5KTtcbiAgICB9XG4gICAgZGVidWcobWVzc2FnZSwgLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTG9nKExvZ3NBUEkuU2V2ZXJpdHlOdW1iZXIuREVCVUcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXI/LmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgICAgICBsZXQgYm9keTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJvZHkgPSBmb3JtYXQodGhpcy5mb3JtYXRNZXNzYWdlKG1lc3NhZ2UpLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayBpZiBmb3JtYXQgY2F1c2VzIHJlY3Vyc2lvblxuICAgICAgICAgICAgYm9keSA9IGAke3RoaXMuZm9ybWF0TWVzc2FnZShtZXNzYWdlKX0gJHthcmdzLm1hcCgoYXJnKSA9PiBTdHJpbmcoYXJnKSkuam9pbignICcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KExvZ3NBUEkuU2V2ZXJpdHlOdW1iZXIuREVCVUcsICdERUJVRycsIGJvZHkpO1xuICAgIH1cbiAgICBpbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZExvZyhMb2dzQVBJLlNldmVyaXR5TnVtYmVyLklORk8pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXI/LmluZm8obWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICAgIGxldCBib2R5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYm9keSA9IGZvcm1hdCh0aGlzLmZvcm1hdE1lc3NhZ2UobWVzc2FnZSksIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIGZvcm1hdCBjYXVzZXMgcmVjdXJzaW9uXG4gICAgICAgICAgICBib2R5ID0gYCR7dGhpcy5mb3JtYXRNZXNzYWdlKG1lc3NhZ2UpfSAke2FyZ3MubWFwKChhcmcpID0+IFN0cmluZyhhcmcpKS5qb2luKCcgJyl9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoTG9nc0FQSS5TZXZlcml0eU51bWJlci5JTkZPLCAnSU5GTycsIGJvZHkpO1xuICAgIH1cbiAgICB3YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZExvZyhMb2dzQVBJLlNldmVyaXR5TnVtYmVyLldBUk4pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXI/Lndhcm4obWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICAgIGxldCBib2R5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYm9keSA9IGZvcm1hdCh0aGlzLmZvcm1hdE1lc3NhZ2UobWVzc2FnZSksIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIGZvcm1hdCBjYXVzZXMgcmVjdXJzaW9uXG4gICAgICAgICAgICBib2R5ID0gYCR7dGhpcy5mb3JtYXRNZXNzYWdlKG1lc3NhZ2UpfSAke2FyZ3MubWFwKChhcmcpID0+IFN0cmluZyhhcmcpKS5qb2luKCcgJyl9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoTG9nc0FQSS5TZXZlcml0eU51bWJlci5XQVJOLCAnV0FSTicsIGJvZHkpO1xuICAgIH1cbiAgICBlcnJvcihtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRMb2coTG9nc0FQSS5TZXZlcml0eU51bWJlci5FUlJPUikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlcj8uZXJyb3IobWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICAgIGxldCBib2R5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYm9keSA9IGZvcm1hdCh0aGlzLmZvcm1hdE1lc3NhZ2UobWVzc2FnZSksIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIGZvcm1hdCBjYXVzZXMgcmVjdXJzaW9uXG4gICAgICAgICAgICBib2R5ID0gYCR7dGhpcy5mb3JtYXRNZXNzYWdlKG1lc3NhZ2UpfSAke2FyZ3MubWFwKChhcmcpID0+IFN0cmluZyhhcmcpKS5qb2luKCcgJyl9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoTG9nc0FQSS5TZXZlcml0eU51bWJlci5FUlJPUiwgJ0VSUk9SJywgYm9keSk7XG4gICAgfVxuICAgIGZhdGFsKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICBjaGlsZChvcHRzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3RlbExvZ2dlcighIXRoaXMubG9nZ2VyLCB0aGlzLmRlbGVnYXRlLCB7XG4gICAgICAgICAgICAuLi4odGhpcy5jb250ZXh0ID8/IHt9KSxcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgIH0sIHRoaXMubG9nTGV2ZWwpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIGxvZ2dlciB0aGF0IGludGVncmF0ZXMgd2l0aCBPcGVuVGVsZW1ldHJ5XG4gKlxuICogQHBhcmFtIHVzZUNvbnNvbGUgLSBXaGV0aGVyIHRvIGFsc28gbG9nIHRvIHRoZSBjb25zb2xlXG4gKiBAcGFyYW0gY29udGV4dCAtIEFkZGl0aW9uYWwgY29udGV4dCB0byBpbmNsdWRlIHdpdGggbG9nIHJlY29yZHNcbiAqIEByZXR1cm5zIEEgbG9nZ2VyIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXIodXNlQ29uc29sZSwgY29udGV4dCwgbG9nTGV2ZWwpIHtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9IExvZ3NBUEkubG9ncy5nZXRMb2dnZXIoJ2RlZmF1bHQnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgc2NvcGVBdHRyaWJ1dGVzOiBjb250ZXh0LFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgT3RlbExvZ2dlcih1c2VDb25zb2xlLCBkZWxlZ2F0ZSwgY29udGV4dCwgbG9nTGV2ZWwpO1xufVxuLyoqXG4gKiBQYXRjaGVzIHRoZSBnbG9iYWwgY29uc29sZSBvYmplY3QgdG8gaW50ZWdyYXRlIHdpdGggT3BlblRlbGVtZXRyeSBsb2dnaW5nXG4gKlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgLSBBdHRyaWJ1dGVzIHRvIGluY2x1ZGUgd2l0aCBhbGwgY29uc29sZSBsb2cgcmVjb3Jkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hDb25zb2xlKGVuYWJsZWQsIGF0dHJpYnV0ZXMsIGxvZ0xldmVsKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgX3BhdGNoID0geyAuLi5fX29yaWdpbmFsQ29uc29sZSB9O1xuICAgIGNvbnN0IGRlbGVnYXRlID0gY3JlYXRlTG9nZ2VyKHRydWUsIGF0dHJpYnV0ZXMsIGxvZ0xldmVsKTtcbiAgICAvLyBQYXRjaCBpbmRpdmlkdWFsIGNvbnNvbGUgbWV0aG9kcyBpbnN0ZWFkIG9mIHJlYXNzaWduaW5nIHRoZSB3aG9sZSBvYmplY3RcbiAgICBfcGF0Y2gubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuaW5mbyhhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICB9O1xuICAgIF9wYXRjaC5lcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmVycm9yKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIH07XG4gICAgX3BhdGNoLndhcm4gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBkZWxlZ2F0ZS53YXJuKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIH07XG4gICAgX3BhdGNoLmRlYnVnID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgfTtcbiAgICBfcGF0Y2guaW5mbyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmluZm8oYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgfTtcbiAgICBfcGF0Y2guZGlyID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgbGV0IG1zZyA9ICcnO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG1zZyA9IGZvcm1hdChhcmdzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmdzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBtc2cgPSBmb3JtYXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtc2cgPSBzYWZlU3RyaW5naWZ5KGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGVnYXRlLmRlYnVnKG1zZyk7XG4gICAgfTtcbiAgICBfcGF0Y2guZGlyeG1sID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoJ2RpcnhtbDonLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIF9wYXRjaC50YWJsZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmRlYnVnKCd0YWJsZTonLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIF9wYXRjaC50cmFjZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmRlYnVnKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIH07XG4gICAgX3BhdGNoLmdyb3VwID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoJ2dyb3VwOicsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgX3BhdGNoLmdyb3VwQ29sbGFwc2VkID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoJ2dyb3VwQ29sbGFwc2VkOicsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgX3BhdGNoLmdyb3VwRW5kID0gKCkgPT4ge1xuICAgICAgICBkZWxlZ2F0ZS5kZWJ1ZygnZ3JvdXBFbmQnKTtcbiAgICB9O1xuICAgIF9wYXRjaC5jbGVhciA9ICgpID0+IHtcbiAgICAgICAgLyogbm8tb3AgKi9cbiAgICB9O1xuICAgIF9wYXRjaC5jb3VudCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmRlYnVnKCdjb3VudDonLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIF9wYXRjaC5jb3VudFJlc2V0ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoJ2NvdW50UmVzZXQ6JywgLi4uYXJncyk7XG4gICAgfTtcbiAgICBfcGF0Y2guYXNzZXJ0ID0gKGNvbmRpdGlvbiwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgZGVsZWdhdGUuZXJyb3IoJ2Fzc2VydGlvbiBmYWlsZWQ6JywgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9wYXRjaC50aW1lID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoJ3RpbWU6JywgLi4uYXJncyk7XG4gICAgfTtcbiAgICBfcGF0Y2gudGltZUxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmRlYnVnKCd0aW1lTG9nOicsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgX3BhdGNoLnRpbWVFbmQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBkZWxlZ2F0ZS5kZWJ1ZygndGltZUVuZDonLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIF9wYXRjaC5wcm9maWxlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVsZWdhdGUuZGVidWcoJ3Byb2ZpbGU6JywgLi4uYXJncyk7XG4gICAgfTtcbiAgICBfcGF0Y2gucHJvZmlsZUVuZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGRlbGVnYXRlLmRlYnVnKCdwcm9maWxlRW5kOicsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWdsb2JhbC1hc3NpZ25cbiAgICBjb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlID0gX3BhdGNoO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nZ2VyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgU2V2ZXJpdHlOdW1iZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGktbG9ncyc7XG5pbXBvcnQgeyBFeHBvcnRSZXN1bHRDb2RlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvY29yZSc7XG5pbXBvcnQgeyBfX29yaWdpbmFsQ29uc29sZSB9IGZyb20gJy4vbG9nZ2VyJztcbi8qKlxuICogQ29uc29sZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTG9nUmVjb3JkRXhwb3J0ZXIgaW50ZXJmYWNlXG4gKiBVc2VzIF9fb3JpZ2luYWxDb25zb2xlIHRvIGF2b2lkIGluZmluaXRlIGxvb3Agd2hlbiBjb25zb2xlIGlzIHBhdGNoZWRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnNvbGVMb2dSZWNvcmRFeHBvcnRlciB7XG4gICAgZHVtcFJlY29yZHMgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihkdW1wUmVjb3Jkcykge1xuICAgICAgICB0aGlzLmR1bXBSZWNvcmRzID0gZHVtcFJlY29yZHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydHMgbG9nIHJlY29yZHMgdG8gdGhlIGNvbnNvbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2dzIC0gVGhlIGxvZyByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSByZXN1bHRDYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlcG9ydCB0aGUgZXhwb3J0IHJlc3VsdFxuICAgICAqL1xuICAgIGV4cG9ydChsb2dzLCByZXN1bHRDYWxsYmFjaykge1xuICAgICAgICBmb3IgKGNvbnN0IGxvZyBvZiBsb2dzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1wUmVjb3Jkcykge1xuICAgICAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmxvZygnW0xPR10nLCB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGxvZy5ib2R5LFxuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eU51bWJlcjogbG9nLnNldmVyaXR5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eVRleHQ6IGxvZy5zZXZlcml0eVRleHQsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbG9nLmhyVGltZSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogbG9nLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiBsb2cucmVzb3VyY2UuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldmVyaXR5ID0gbG9nLnNldmVyaXR5TnVtYmVyID8gU2V2ZXJpdHlOdW1iZXJbbG9nLnNldmVyaXR5TnVtYmVyXSA6ICdJTkZPJztcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgWyR7c2V2ZXJpdHl9XSAke2xvZy5ib2R5fWA7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChsb2cuc2V2ZXJpdHlOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXZlcml0eU51bWJlci5ERUJVRzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLmRlYnVnKG1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXZlcml0eU51bWJlci5JTkZPOlxuICAgICAgICAgICAgICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUuaW5mbyhtc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU2V2ZXJpdHlOdW1iZXIuV0FSTjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fb3JpZ2luYWxDb25zb2xlLndhcm4obXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNldmVyaXR5TnVtYmVyLkVSUk9SOlxuICAgICAgICAgICAgICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgX19vcmlnaW5hbENvbnNvbGUubG9nKG1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBFeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNodXRzIGRvd24gdGhlIGV4cG9ydGVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNodXRkb3duIGlzIGNvbXBsZXRlXG4gICAgICovXG4gICAgc2h1dGRvd24oKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59XG4vKipcbiAqIENvbnNvbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwYW5FeHBvcnRlciBpbnRlcmZhY2VcbiAqIFVzZXMgX19vcmlnaW5hbENvbnNvbGUgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aGVuIGNvbnNvbGUgaXMgcGF0Y2hlZFxuICovXG5leHBvcnQgY2xhc3MgRGVidWdTcGFuRXhwb3J0ZXIge1xuICAgIGV4cG9ydChzcGFucywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgICAgICAgICBfX29yaWdpbmFsQ29uc29sZS5sb2coJ1tTUEFOXScsIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzcGFuLm5hbWUsXG4gICAgICAgICAgICAgICAgdHJhY2VJZDogc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAgICAgICAgICAgc3BhbklkOiBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBzcGFuLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXR1czogc3Bhbi5zdGF0dXMsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogc3Bhbi5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBFeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgfVxuICAgIHNodXRkb3duKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZS5qcy5tYXAiLAogICAgImltcG9ydCB7IGNvbnRleHQsIHByb3BhZ2F0aW9uLCBTcGFuU3RhdHVzQ29kZSwgdHJhY2UgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGZldGNoIGZ1bmN0aW9uIGJlZm9yZSBpbnN0cnVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IF9fb3JpZ2luYWxGZXRjaCA9IGZldGNoOyAvLyBzYXZlIHRoZSBvcmlnaW5hbCBmZXRjaCBiZWZvcmUgd2UgcGF0Y2ggaXRcbi8qKlxuICogSW5zdHJ1bWVudHMgdGhlIGdsb2JhbCBmZXRjaCBmdW5jdGlvbiB3aXRoIE9wZW5UZWxlbWV0cnkgdHJhY2luZ1xuICpcbiAqIFJlcGxhY2VzIHRoZSBnbG9iYWwgZmV0Y2ggd2l0aCBhbiBpbnN0cnVtZW50ZWQgdmVyc2lvbiB0aGF0IGNyZWF0ZXMgc3BhbnNcbiAqIGZvciBlYWNoIEhUVFAgcmVxdWVzdCBhbmQgcHJvcGFnYXRlcyB0cmFjZSBjb250ZXh0IGluIGhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRGZXRjaCgpIHtcbiAgICBjb25zdCBwYXRjaCA9IGFzeW5jIChpbnB1dCwgaW5pdCkgPT4ge1xuICAgICAgICBjb25zdCB1cmwgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gaW5wdXQgOiBpbnB1dCBpbnN0YW5jZW9mIFVSTCA/IGlucHV0LnRvU3RyaW5nKCkgOiBpbnB1dC51cmw7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGluaXQ/Lm1ldGhvZCB8fFxuICAgICAgICAgICAgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgIShpbnB1dCBpbnN0YW5jZW9mIFVSTCkgPyBpbnB1dC5tZXRob2QgfHwgJ0dFVCcgOiAnR0VUJyk7XG4gICAgICAgIC8vIEdldCB0aGUgYWN0aXZlIHNwYW4gaWYgaXQgZXhpc3RzXG4gICAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gYWN0aXZlIHNwYW4sIGp1c3QgY2FsbCB0aGUgb3JpZ2luYWwgZmV0Y2hcbiAgICAgICAgaWYgKCFhY3RpdmVTcGFuKSB7XG4gICAgICAgICAgICByZXR1cm4gX19vcmlnaW5hbEZldGNoKGlucHV0LCBpbml0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbnRleHRcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICAgICAgICBjb25zdCBfdXJsID0gbmV3IFVSTCh1cmwpO1xuICAgICAgICAvLyBDcmVhdGUgYSBjaGlsZCBzcGFuIHVzaW5nIHRoZSBjdXJyZW50IGNvbnRleHRcbiAgICAgICAgY29uc3QgY2hpbGRTcGFuID0gdHJhY2UuZ2V0VHJhY2VyKCdmZXRjaCcpLnN0YXJ0U3BhbihgSFRUUCAke21ldGhvZH1gLCB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgJ2h0dHAudXJsJzogdXJsLFxuICAgICAgICAgICAgICAgICdodHRwLnBhdGgnOiBfdXJsLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICdodHRwLm1ldGhvZCc6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBob3N0OiBfdXJsLmhvc3QsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBjdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBQcmVwYXJlIHRyYWNlIGNvbnRleHQgaW5qZWN0aW9uXG4gICAgICAgICAgICBjb25zdCBjYXJyaWVyID0ge307XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY29udGV4dCB3aXRoIHRoZSBjaGlsZCBzcGFuXG4gICAgICAgICAgICBjb25zdCBuZXdDb250ZXh0ID0gdHJhY2Uuc2V0U3BhbihjdXJyZW50Q29udGV4dCwgY2hpbGRTcGFuKTtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgbmV3IGNvbnRleHQgZm9yIHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBwcm9wYWdhdGlvbi5pbmplY3QobmV3Q29udGV4dCwgY2Fycmllcik7XG4gICAgICAgICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBoZWFkZXJzIGFuZCBhZGQgdHJhY2UgY29udGV4dFxuICAgICAgICAgICAgLy8gSGFuZGxlIGhlYWRlcnMgZnJvbSBib3RoIFJlcXVlc3QgaW5wdXQgYW5kIGluaXQgcGFyYW1ldGVyXG4gICAgICAgICAgICBjb25zdCBiYXNlSGVhZGVycyA9IHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgIShpbnB1dCBpbnN0YW5jZW9mIFVSTCkgJiYgaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0XG4gICAgICAgICAgICAgICAgPyBpbnB1dC5oZWFkZXJzXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoYmFzZUhlYWRlcnMgPz8gaW5pdD8uaGVhZGVycyA/PyB7fSk7XG4gICAgICAgICAgICAvLyBBZGQgdHJhY2UgY29udGV4dCBoZWFkZXJzIChvdmVyd3JpdGluZyBhbnkgYWxyZWFkeSBwcmVzZW50KVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2FycmllcikpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW5pdCBvYmplY3Qgd2l0aCB1cGRhdGVkIGhlYWRlcnNcbiAgICAgICAgICAgIGNvbnN0IG5ld0luaXQgPSB7XG4gICAgICAgICAgICAgICAgLi4uaW5pdCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgX19vcmlnaW5hbEZldGNoKGlucHV0LCBuZXdJbml0KTtcbiAgICAgICAgICAgIC8vIEFkZCByZXNwb25zZSBhdHRyaWJ1dGVzIHRvIHNwYW5cbiAgICAgICAgICAgIGNoaWxkU3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAnaHR0cC5zdGF0dXNfY29kZSc6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAnaHR0cC51c2VyX2FnZW50JzogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3VzZXItYWdlbnQnKSB8fCAnJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIGNoaWxkU3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkU3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNoaWxkU3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgICAgY2hpbGRTcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SIH0pO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjaGlsZFNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGdsb2JhbFRoaXMuZmV0Y2ggPSBwYXRjaDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZldGNoLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgRXhwb3J0UmVzdWx0Q29kZSB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2NvcmUnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgYXBwZW5kRmlsZVN5bmMsIG1rZGlyU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuLyoqXG4gKiBKU09OTCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTG9nUmVjb3JkRXhwb3J0ZXIgaW50ZXJmYWNlXG4gKiBXcml0ZXMgbG9ncyB0byBhIHRpbWVzdGFtcGVkIEpTT05MIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIEpTT05MTG9nRXhwb3J0ZXIge1xuICAgIGN1cnJlbnRGaWxlID0gbnVsbDtcbiAgICBiYXNlUGF0aDtcbiAgICBmaWxlUHJlZml4O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSlNPTkwgbG9nIHJlY29yZCBleHBvcnRlclxuICAgICAqIEBwYXJhbSBiYXNlUGF0aCAtIERpcmVjdG9yeSB0byBzdG9yZSB0aGUgSlNPTkwgZmlsZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihiYXNlUGF0aCkge1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIHRoaXMuZmlsZVByZWZpeCA9ICdvdGVsLWxvZyc7XG4gICAgICAgIHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG4gICAgfVxuICAgIGVuc3VyZURpcmVjdG9yeSgpIHtcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKHRoaXMuYmFzZVBhdGgpKSB7XG4gICAgICAgICAgICBta2RpclN5bmModGhpcy5iYXNlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVGaWxlKCkge1xuICAgICAgICAvLyBJZiBjdXJyZW50IGZpbGUgZXhpc3RzLCB1c2UgaXRcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbGUgJiYgZXhpc3RzU3luYyh0aGlzLmN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50RmlsZSA9IGpvaW4odGhpcy5iYXNlUGF0aCwgYCR7dGhpcy5maWxlUHJlZml4fS0ke0RhdGUubm93KCl9LiR7cmFuZG9tVVVJRCgpfS5qc29ubGApO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyBsb2cgcmVjb3JkcyB0byBhIEpTT05MIGZpbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2dzIC0gVGhlIGxvZyByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSByZXN1bHRDYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlcG9ydCB0aGUgZXhwb3J0IHJlc3VsdFxuICAgICAqL1xuICAgIGV4cG9ydChsb2dzLCByZXN1bHRDYWxsYmFjaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBFeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZ2V0T3JDcmVhdGVGaWxlKCk7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsb2cgb2YgbG9ncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBsb2cuaHJUaW1lLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlZFRpbWVzdGFtcDogbG9nLmhyVGltZU9ic2VydmVkLFxuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eU51bWJlcjogbG9nLnNldmVyaXR5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eVRleHQ6IGxvZy5zZXZlcml0eVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGxvZy5ib2R5LFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBsb2cuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6IGxvZy5yZXNvdXJjZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb25TY29wZTogbG9nLmluc3RydW1lbnRhdGlvblNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBzcGFuQ29udGV4dDogbG9nLnNwYW5Db250ZXh0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaChKU09OLnN0cmluZ2lmeShyZWNvcmQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBgJHtsaW5lcy5qb2luKCdcXG4nKX1cXG5gO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhcHBlbmRGaWxlU3luYyhmaWxlLCBwYXlsb2FkLCAndXRmLTgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBGaWxlIG1heSBoYXZlIGJlZW4gZGVsZXRlZCwgcmVzZXQgYW5kIHJldHJ5IG9uY2VcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gZXJyLmNvZGU7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZpbGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gdGhpcy5nZXRPckNyZWF0ZUZpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kRmlsZVN5bmMobmV3RmlsZSwgcGF5bG9hZCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBFeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHRDYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgY29kZTogRXhwb3J0UmVzdWx0Q29kZS5GQUlMRUQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNodXRzIGRvd24gdGhlIGV4cG9ydGVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHNodXRkb3duIGlzIGNvbXBsZXRlXG4gICAgICovXG4gICAgYXN5bmMgc2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZpbGUgPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb3JjZXMgYSBmbHVzaCBvZiBhbnkgcGVuZGluZyBkYXRhXG4gICAgICovXG4gICAgYXN5bmMgZm9yY2VGbHVzaCgpIHtcbiAgICAgICAgLy8gTm8tb3AgZm9yIGZpbGUtYmFzZWQgZXhwb3J0ZXIgYXMgd3JpdGVzIGFyZSBzeW5jaHJvbm91c1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzb25sLWxvZy1leHBvcnRlci5qcy5tYXAiLAogICAgImltcG9ydCB7IEV4cG9ydFJlc3VsdENvZGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIGFwcGVuZEZpbGVTeW5jLCBta2RpclN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbi8qKlxuICogSlNPTkwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwYW5FeHBvcnRlciBpbnRlcmZhY2VcbiAqIFdyaXRlcyB0cmFjZXMgdG8gYSB0aW1lc3RhbXBlZCBKU09OTCBmaWxlXG4gKi9cbmV4cG9ydCBjbGFzcyBKU09OTFRyYWNlRXhwb3J0ZXIge1xuICAgIGN1cnJlbnRGaWxlID0gbnVsbDtcbiAgICBiYXNlUGF0aDtcbiAgICBmaWxlUHJlZml4O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSlNPTkwgdHJhY2UgZXhwb3J0ZXJcbiAgICAgKiBAcGFyYW0gYmFzZVBhdGggLSBEaXJlY3RvcnkgdG8gc3RvcmUgdGhlIEpTT05MIGZpbGVzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYmFzZVBhdGgpIHtcbiAgICAgICAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgICAgICB0aGlzLmZpbGVQcmVmaXggPSAnb3RlbC10cmFjZSc7XG4gICAgICAgIHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG4gICAgfVxuICAgIGVuc3VyZURpcmVjdG9yeSgpIHtcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKHRoaXMuYmFzZVBhdGgpKSB7XG4gICAgICAgICAgICBta2RpclN5bmModGhpcy5iYXNlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVGaWxlKCkge1xuICAgICAgICAvLyBJZiBjdXJyZW50IGZpbGUgZXhpc3RzLCB1c2UgaXRcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbGUgJiYgZXhpc3RzU3luYyh0aGlzLmN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50RmlsZSA9IGpvaW4odGhpcy5iYXNlUGF0aCwgYCR7dGhpcy5maWxlUHJlZml4fS0ke0RhdGUubm93KCl9LiR7cmFuZG9tVVVJRCgpfS5qc29ubGApO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyBzcGFucyB0byBhIEpTT05MIGZpbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzcGFucyAtIFRoZSBzcGFucyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0gcmVzdWx0Q2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiB0byByZXBvcnQgdGhlIGV4cG9ydCByZXN1bHRcbiAgICAgKi9cbiAgICBleHBvcnQoc3BhbnMsIHJlc3VsdENhbGxiYWNrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc3BhbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soeyBjb2RlOiBFeHBvcnRSZXN1bHRDb2RlLlNVQ0NFU1MgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZ2V0T3JDcmVhdGVGaWxlKCk7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICB0cmFjZUlkOiBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgc3BhbklkOiBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgICAgICAgICAgICAgICB0cmFjZVN0YXRlOiBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VTdGF0ZT8uc2VyaWFsaXplKCksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHNwYW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAga2luZDogc3Bhbi5raW5kLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHNwYW4uc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBlbmRUaW1lOiBzcGFuLmVuZFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHNwYW4uYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzcGFuLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiBzcGFuLmV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgbGlua3M6IHNwYW4ubGlua3MsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiBzcGFuLnJlc291cmNlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IHNwYW4uZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcHBlZEV2ZW50c0NvdW50OiBzcGFuLmRyb3BwZWRFdmVudHNDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcHBlZExpbmtzQ291bnQ6IHNwYW4uZHJvcHBlZExpbmtzQ291bnQsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBzcGFuLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBlbmRlZDogc3Bhbi5lbmRlZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goSlNPTi5zdHJpbmdpZnkocmVjb3JkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYCR7bGluZXMuam9pbignXFxuJyl9XFxuYDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kRmlsZVN5bmMoZmlsZSwgcGF5bG9hZCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gRmlsZSBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQsIHJlc2V0IGFuZCByZXRyeSBvbmNlXG4gICAgICAgICAgICAgICAgY29uc3QgY29kZSA9IGVyci5jb2RlO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGaWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IHRoaXMuZ2V0T3JDcmVhdGVGaWxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVTeW5jKG5ld0ZpbGUsIHBheWxvYWQsICd1dGYtOCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHsgY29kZTogRXhwb3J0UmVzdWx0Q29kZS5TVUNDRVNTIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIGNvZGU6IEV4cG9ydFJlc3VsdENvZGUuRkFJTEVELFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaHV0cyBkb3duIHRoZSBleHBvcnRlclxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBzaHV0ZG93biBpcyBjb21wbGV0ZVxuICAgICAqL1xuICAgIGFzeW5jIHNodXRkb3duKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWxlID0gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yY2VzIGEgZmx1c2ggb2YgYW55IHBlbmRpbmcgZGF0YVxuICAgICAqL1xuICAgIGFzeW5jIGZvcmNlRmx1c2goKSB7XG4gICAgICAgIC8vIE5vLW9wIGZvciBmaWxlLWJhc2VkIGV4cG9ydGVyIGFzIHdyaXRlcyBhcmUgc3luY2hyb25vdXNcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc29ubC10cmFjZS1leHBvcnRlci5qcy5tYXAiLAogICAgImltcG9ydCB7IEV4cG9ydFJlc3VsdENvZGUgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uVGVtcG9yYWxpdHksIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLW1ldHJpY3MnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgYXBwZW5kRmlsZVN5bmMsIG1rZGlyU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuLyoqXG4gKiBKU09OTCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHVzaE1ldHJpY0V4cG9ydGVyIGludGVyZmFjZVxuICogV3JpdGVzIG1ldHJpY3MgdG8gYSB0aW1lc3RhbXBlZCBKU09OTCBmaWxlXG4gKi9cbmV4cG9ydCBjbGFzcyBKU09OTE1ldHJpY0V4cG9ydGVyIHtcbiAgICBjdXJyZW50RmlsZSA9IG51bGw7XG4gICAgYmFzZVBhdGg7XG4gICAgZmlsZVByZWZpeDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEpTT05MIG1ldHJpYyBleHBvcnRlclxuICAgICAqIEBwYXJhbSBiYXNlUGF0aCAtIERpcmVjdG9yeSB0byBzdG9yZSB0aGUgSlNPTkwgZmlsZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihiYXNlUGF0aCkge1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIHRoaXMuZmlsZVByZWZpeCA9ICdvdGVsLW1ldHJpYyc7XG4gICAgICAgIHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG4gICAgfVxuICAgIGVuc3VyZURpcmVjdG9yeSgpIHtcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKHRoaXMuYmFzZVBhdGgpKSB7XG4gICAgICAgICAgICBta2RpclN5bmModGhpcy5iYXNlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0T3JDcmVhdGVGaWxlKCkge1xuICAgICAgICAvLyBJZiBjdXJyZW50IGZpbGUgZXhpc3RzLCB1c2UgaXRcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbGUgJiYgZXhpc3RzU3luYyh0aGlzLmN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50RmlsZSA9IGpvaW4odGhpcy5iYXNlUGF0aCwgYCR7dGhpcy5maWxlUHJlZml4fS0ke0RhdGUubm93KCl9LiR7cmFuZG9tVVVJRCgpfS5qc29ubGApO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyBtZXRyaWNzIHRvIGEgSlNPTkwgZmlsZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1ldHJpY3MgLSBUaGUgcmVzb3VyY2UgbWV0cmljcyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0gcmVzdWx0Q2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiB0byByZXBvcnQgdGhlIGV4cG9ydCByZXN1bHRcbiAgICAgKi9cbiAgICBleHBvcnQobWV0cmljcywgcmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmdldE9yQ3JlYXRlRmlsZSgpO1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBtZXRyaWNzLnJlc291cmNlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgc2NvcGVNZXRyaWNzOiBtZXRyaWNzLnNjb3BlTWV0cmljcy5tYXAoKHNtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzY29wZTogc20uc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3M6IHNtLm1ldHJpY3MubWFwKChtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogbS5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVBvaW50VHlwZTogbS5kYXRhUG9pbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVBvaW50czogbS5kYXRhUG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb25UZW1wb3JhbGl0eTogbS5hZ2dyZWdhdGlvblRlbXBvcmFsaXR5LFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBKU09OLnN0cmluZ2lmeShyZWNvcmQpICsgJ1xcbic7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVTeW5jKGZpbGUsIGxpbmUsICd1dGYtOCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIEZpbGUgbWF5IGhhdmUgYmVlbiBkZWxldGVkLCByZXNldCBhbmQgcmV0cnkgb25jZVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RmlsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSB0aGlzLmdldE9yQ3JlYXRlRmlsZSgpO1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmRGaWxlU3luYyhuZXdGaWxlLCBsaW5lLCAndXRmLTgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRDYWxsYmFjayh7IGNvZGU6IEV4cG9ydFJlc3VsdENvZGUuU1VDQ0VTUyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBFeHBvcnRSZXN1bHRDb2RlLkZBSUxFRCxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2h1dHMgZG93biB0aGUgZXhwb3J0ZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gc2h1dGRvd24gaXMgY29tcGxldGVcbiAgICAgKi9cbiAgICBhc3luYyBzaHV0ZG93bigpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsZSA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvcmNlcyBhIGZsdXNoIG9mIGFueSBwZW5kaW5nIGRhdGFcbiAgICAgKi9cbiAgICBhc3luYyBmb3JjZUZsdXNoKCkge1xuICAgICAgICAvLyBOby1vcCBmb3IgZmlsZS1iYXNlZCBleHBvcnRlciBhcyB3cml0ZXMgYXJlIHN5bmNocm9ub3VzXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdGhlIGFnZ3JlZ2F0aW9uIHRlbXBvcmFsaXR5IGZvciB0aGUgZ2l2ZW4gaW5zdHJ1bWVudCB0eXBlXG4gICAgICovXG4gICAgc2VsZWN0QWdncmVnYXRpb25UZW1wb3JhbGl0eShfaW5zdHJ1bWVudFR5cGUpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdW11bGF0aXZlIHRlbXBvcmFsaXR5XG4gICAgICAgIHJldHVybiBBZ2dyZWdhdGlvblRlbXBvcmFsaXR5LkNVTVVMQVRJVkU7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbmwtbWV0cmljLWV4cG9ydGVyLmpzLm1hcCIsCiAgICAiZXhwb3J0IHsgSlNPTkxMb2dFeHBvcnRlciB9IGZyb20gJy4vanNvbmwtbG9nLWV4cG9ydGVyJztcbmV4cG9ydCB7IEpTT05MVHJhY2VFeHBvcnRlciB9IGZyb20gJy4vanNvbmwtdHJhY2UtZXhwb3J0ZXInO1xuZXhwb3J0IHsgSlNPTkxNZXRyaWNFeHBvcnRlciB9IGZyb20gJy4vanNvbmwtbWV0cmljLWV4cG9ydGVyJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQmF0Y2hTcGFuUHJvY2Vzc29yLCBTaW1wbGVTcGFuUHJvY2Vzc29yIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLWJhc2UnO1xuaW1wb3J0IG9wZW50ZWxlbWV0cnksIHsgbWV0cmljcywgcHJvcGFnYXRpb24gfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0ICogYXMgTG9nc0FQSSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGktbG9ncyc7XG5pbXBvcnQgeyBnZXROb2RlQXV0b0luc3RydW1lbnRhdGlvbnMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hdXRvLWluc3RydW1lbnRhdGlvbnMtbm9kZSc7XG5pbXBvcnQgeyBDb21wb3NpdGVQcm9wYWdhdG9yLCBXM0NCYWdnYWdlUHJvcGFnYXRvciwgVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvciwgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9jb3JlJztcbmltcG9ydCB7IE9UTFBMb2dFeHBvcnRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLWxvZ3Mtb3RscC1odHRwJztcbmltcG9ydCB7IE9UTFBNZXRyaWNFeHBvcnRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2V4cG9ydGVyLW1ldHJpY3Mtb3RscC1odHRwJztcbmltcG9ydCB7IE9UTFBUcmFjZUV4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwJztcbmltcG9ydCB7IEhvc3RNZXRyaWNzIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvaG9zdC1tZXRyaWNzJztcbmltcG9ydCB7IENvbXByZXNzaW9uQWxnb3JpdGhtIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlJztcbmltcG9ydCB7IHJlc291cmNlRnJvbUF0dHJpYnV0ZXMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IsIExvZ2dlclByb3ZpZGVyLCBTaW1wbGVMb2dSZWNvcmRQcm9jZXNzb3IsIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLWxvZ3MnO1xuaW1wb3J0IHsgTWV0ZXJQcm92aWRlciwgUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstbWV0cmljcyc7XG5pbXBvcnQgeyBOb2RlU0RLIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2RrLW5vZGUnO1xuaW1wb3J0IHsgQVRUUl9TRVJWSUNFX05BTUUsIEFUVFJfU0VSVklDRV9WRVJTSU9OIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZSB9IGZyb20gJ0B0cmFjZWxvb3Avbm9kZS1zZXJ2ZXItc2RrJztcbmltcG9ydCB7IENvbnNvbGVMb2dSZWNvcmRFeHBvcnRlciwgRGVidWdTcGFuRXhwb3J0ZXIgfSBmcm9tICcuL2NvbnNvbGUnO1xuaW1wb3J0IHsgaW5zdHJ1bWVudEZldGNoIH0gZnJvbSAnLi9mZXRjaCc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIHBhdGNoQ29uc29sZSB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldFNES1ZlcnNpb24sIGlzQXV0aGVudGljYXRlZCB9IGZyb20gJy4uL19jb25maWcnO1xuaW1wb3J0IHsgSlNPTkxMb2dFeHBvcnRlciwgSlNPTkxUcmFjZUV4cG9ydGVyLCBKU09OTE1ldHJpY0V4cG9ydGVyIH0gZnJvbSAnLi9leHBvcnRlcnMnO1xuY29uc3QgZGV2bW9kZUV4cG9ydEludGVydmFsID0gMV8wMDA7IC8vIDEgc2Vjb25kXG5jb25zdCBwcm9kdWN0aW9uRXhwb3J0SW50ZXJ2YWwgPSAxMF8wMDA7IC8vIDEwIHNlY29uZHNcbmV4cG9ydCBjb25zdCBjcmVhdGVSZXNvdXJjZSA9IChjb25maWcpID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24sIG9yZ0lkLCBwcm9qZWN0SWQsIGRlcGxveW1lbnRJZCwgZW52aXJvbm1lbnQsIGRldm1vZGUsIGNsaVZlcnNpb24gfSA9IGNvbmZpZztcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gZ2V0U0RLVmVyc2lvbigpO1xuICAgIHJldHVybiByZXNvdXJjZUZyb21BdHRyaWJ1dGVzKHtcbiAgICAgICAgW0FUVFJfU0VSVklDRV9OQU1FXTogbmFtZSxcbiAgICAgICAgW0FUVFJfU0VSVklDRV9WRVJTSU9OXTogdmVyc2lvbixcbiAgICAgICAgJ0BhZ2VudHVpdHkvb3JnSWQnOiBvcmdJZCA/PyAndW5rbm93bicsXG4gICAgICAgICdAYWdlbnR1aXR5L3Byb2plY3RJZCc6IHByb2plY3RJZCA/PyAndW5rbm93bicsXG4gICAgICAgICdAYWdlbnR1aXR5L2RlcGxveW1lbnRJZCc6IGRlcGxveW1lbnRJZCA/PyAndW5rbm93bicsXG4gICAgICAgICdAYWdlbnR1aXR5L2Vudic6IGVudmlyb25tZW50LFxuICAgICAgICAnQGFnZW50dWl0eS9kZXZtb2RlJzogZGV2bW9kZSxcbiAgICAgICAgJ0BhZ2VudHVpdHkvc2RrVmVyc2lvbic6IHNka1ZlcnNpb24gPz8gJ3Vua25vd24nLFxuICAgICAgICAnQGFnZW50dWl0eS9jbGlWZXJzaW9uJzogY2xpVmVyc2lvbiA/PyAndW5rbm93bicsXG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFnZW50dWl0eUxvZ2dlclByb3ZpZGVyID0gKHsgdXJsLCBoZWFkZXJzLCByZXNvdXJjZSwganNvbmxCYXNlUGF0aCwgdXNlQ29uc29sZUV4cG9ydGVycywgfSkgPT4ge1xuICAgIGxldCBwcm9jZXNzb3I7XG4gICAgbGV0IGV4cG9ydGVyO1xuICAgIGlmICh1c2VDb25zb2xlRXhwb3J0ZXJzKSB7XG4gICAgICAgIHByb2Nlc3NvciA9IG5ldyBTaW1wbGVMb2dSZWNvcmRQcm9jZXNzb3IobmV3IENvbnNvbGVMb2dSZWNvcmRFeHBvcnRlcih0cnVlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGpzb25sQmFzZVBhdGgpIHtcbiAgICAgICAgZXhwb3J0ZXIgPSBuZXcgSlNPTkxMb2dFeHBvcnRlcihqc29ubEJhc2VQYXRoKTtcbiAgICAgICAgcHJvY2Vzc29yID0gbmV3IEJhdGNoTG9nUmVjb3JkUHJvY2Vzc29yKGV4cG9ydGVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodXJsKSB7XG4gICAgICAgIC8vIE9yaWdpbmFsIE9UTFAgZXhwb3J0IGJlaGF2aW9yXG4gICAgICAgIGNvbnN0IG90bHBFeHBvcnRlciA9IG5ldyBPVExQTG9nRXhwb3J0ZXIoe1xuICAgICAgICAgICAgdXJsOiBgJHt1cmx9L3YxL2xvZ3NgLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvbXByZXNzaW9uOiBDb21wcmVzc2lvbkFsZ29yaXRobS5HWklQLFxuICAgICAgICAgICAgdGltZW91dE1pbGxpczogMTBfMDAwLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwb3J0ZXIgPSBvdGxwRXhwb3J0ZXI7XG4gICAgICAgIHByb2Nlc3NvciA9IG5ldyBCYXRjaExvZ1JlY29yZFByb2Nlc3NvcihvdGxwRXhwb3J0ZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcHJvY2Vzc29yID0gbmV3IFNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvcihuZXcgQ29uc29sZUxvZ1JlY29yZEV4cG9ydGVyKGZhbHNlKSk7XG4gICAgfVxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IExvZ2dlclByb3ZpZGVyKHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHByb2Nlc3NvcnM6IFtwcm9jZXNzb3JdLFxuICAgIH0pO1xuICAgIExvZ3NBUEkubG9ncy5zZXRHbG9iYWxMb2dnZXJQcm92aWRlcihwcm92aWRlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvY2Vzc29yLFxuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgZXhwb3J0ZXIsXG4gICAgfTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlVXNlckxvZ2dlclByb3ZpZGVyID0gKHsgdXJsLCBoZWFkZXJzLCByZXNvdXJjZSwgfSkgPT4ge1xuICAgIGNvbnN0IGV4cG9ydGVyID0gbmV3IE9UTFBMb2dFeHBvcnRlcih7XG4gICAgICAgIHVybDogYCR7dXJsfS92MS9sb2dzYCxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgY29tcHJlc3Npb246IENvbXByZXNzaW9uQWxnb3JpdGhtLkdaSVAsXG4gICAgICAgIHRpbWVvdXRNaWxsaXM6IDEwXzAwMCxcbiAgICB9KTtcbiAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgQmF0Y2hMb2dSZWNvcmRQcm9jZXNzb3IoZXhwb3J0ZXIpO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IExvZ2dlclByb3ZpZGVyKHtcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgIHByb2Nlc3NvcnM6IFtwcm9jZXNzb3JdLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBleHBvcnRlcixcbiAgICAgICAgcHJvY2Vzc29yLFxuICAgIH07XG59O1xuLyoqXG4gKiBSZWdpc3RlcnMgYW5kIGluaXRpYWxpemVzIE9wZW5UZWxlbWV0cnkgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIE9wZW5UZWxlbWV0cnlcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB0cmFjZXIsIGxvZ2dlciwgYW5kIHNodXRkb3duIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck90ZWwoY29uZmlnKSB7XG4gICAgY29uc3QgeyB1cmwsIG5hbWUsIHZlcnNpb24sIGJlYXJlclRva2VuLCBlbnZpcm9ubWVudCA9ICdkZXZlbG9wbWVudCcsIG9yZ0lkLCBwcm9qZWN0SWQsIGRlcGxveW1lbnRJZCwgZGV2bW9kZSA9IGZhbHNlLCBsb2dMZXZlbCA9ICd3YXJuJywganNvbmxCYXNlUGF0aCA9IHVuZGVmaW5lZCwgfSA9IGNvbmZpZztcbiAgICBsZXQgaGVhZGVycztcbiAgICBpZiAoYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgaGVhZGVycyA9IHt9O1xuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7YmVhcmVyVG9rZW59YDtcbiAgICB9XG4gICAgLy8gdXNlIGNvbnNvbGUgZGVidWcgZXhwb3J0ZXJzIGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjb25zdCB1c2VDb25zb2xlRXhwb3J0ZXJzID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX0RFQlVHX09URUxfQ09OU09MRSA9PT0gJ3RydWUnO1xuICAgIGNvbnN0IHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UoY29uZmlnKTtcbiAgICBjb25zdCBsb2dnZXJQcm92aWRlciA9IGNyZWF0ZUFnZW50dWl0eUxvZ2dlclByb3ZpZGVyKHtcbiAgICAgICAgdXJsLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgbG9nTGV2ZWwsXG4gICAgICAgIGpzb25sQmFzZVBhdGgsXG4gICAgICAgIHVzZUNvbnNvbGVFeHBvcnRlcnMsXG4gICAgfSk7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICAgICdAYWdlbnR1aXR5L29yZ0lkJzogb3JnSWQgPz8gJ3Vua25vd24nLFxuICAgICAgICAnQGFnZW50dWl0eS9wcm9qZWN0SWQnOiBwcm9qZWN0SWQgPz8gJ3Vua25vd24nLFxuICAgICAgICAnQGFnZW50dWl0eS9kZXBsb3ltZW50SWQnOiBkZXBsb3ltZW50SWQgPz8gJ3Vua25vd24nLFxuICAgICAgICAnQGFnZW50dWl0eS9lbnYnOiBlbnZpcm9ubWVudCxcbiAgICAgICAgJ0BhZ2VudHVpdHkvZGV2bW9kZSc6IGRldm1vZGUsXG4gICAgICAgICdAYWdlbnR1aXR5L2xhbmd1YWdlJzogJ2phdmFzY3JpcHQnLFxuICAgIH07XG4gICAgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCEhdXJsLCBhdHRycywgbG9nTGV2ZWwpO1xuICAgIC8vIG11c3QgZG8gdGhpcyBhZnRlciB3ZSBoYXZlIGNyZWF0ZWQgdGhlIGxvZ2dlclxuICAgIC8vIGRvbid0IHBhdGNoIGNvbnNvbGUgaWYgd2UncmUgdXNpbmcgY29uc29sZSBleHBvcnRlcnMgKHRvIGF2b2lkIGRvdWJsZSBsb2dnaW5nKVxuICAgIGlmICghdXNlQ29uc29sZUV4cG9ydGVycykge1xuICAgICAgICBwYXRjaENvbnNvbGUoISF1cmwsIGF0dHJzLCBsb2dMZXZlbCk7XG4gICAgfVxuICAgIC8vIEJ1aWxkIHRyYWNlIGV4cG9ydGVyIChPVExQIG9yIEpTT05MKVxuICAgIGNvbnN0IHRyYWNlRXhwb3J0ZXIgPSBqc29ubEJhc2VQYXRoXG4gICAgICAgID8gbmV3IEpTT05MVHJhY2VFeHBvcnRlcihqc29ubEJhc2VQYXRoKVxuICAgICAgICA6IHVybFxuICAgICAgICAgICAgPyBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoe1xuICAgICAgICAgICAgICAgIHVybDogYCR7dXJsfS92MS90cmFjZXNgLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uOiBDb21wcmVzc2lvbkFsZ29yaXRobS5HWklQLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIC8vIEJ1aWxkIG1ldHJpYyBleHBvcnRlciAoT1RMUCBvciBKU09OTClcbiAgICBjb25zdCBtZXRyaWNFeHBvcnRlciA9IGpzb25sQmFzZVBhdGhcbiAgICAgICAgPyBuZXcgSlNPTkxNZXRyaWNFeHBvcnRlcihqc29ubEJhc2VQYXRoKVxuICAgICAgICA6IHVybFxuICAgICAgICAgICAgPyBuZXcgT1RMUE1ldHJpY0V4cG9ydGVyKHtcbiAgICAgICAgICAgICAgICB1cmw6IGAke3VybH0vdjEvbWV0cmljc2AsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29tcHJlc3Npb246IENvbXByZXNzaW9uQWxnb3JpdGhtLkdaSVAsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgLy8gQ3JlYXRlIHNwYW4gcHJvY2Vzc29yc1xuICAgIGNvbnN0IHNwYW5Qcm9jZXNzb3JzID0gW107XG4gICAgLy8gQWRkIE9UTFAvSlNPTkwgc3BhbiBwcm9jZXNzb3IgaWYgd2UgaGF2ZSBhbiBleHBvcnRlclxuICAgIGlmICh0cmFjZUV4cG9ydGVyKSB7XG4gICAgICAgIHNwYW5Qcm9jZXNzb3JzLnB1c2gobmV3IEJhdGNoU3BhblByb2Nlc3Nvcih0cmFjZUV4cG9ydGVyKSk7XG4gICAgfVxuICAgIC8vIEFkZCBkZWJ1ZyBzcGFuIHByb2Nlc3NvciBpZiBjb25zb2xlIGRlYnVnZ2luZyBpcyBlbmFibGVkXG4gICAgaWYgKHVzZUNvbnNvbGVFeHBvcnRlcnMpIHtcbiAgICAgICAgc3BhblByb2Nlc3NvcnMucHVzaChuZXcgU2ltcGxlU3BhblByb2Nlc3NvcihuZXcgRGVidWdTcGFuRXhwb3J0ZXIoKSkpO1xuICAgIH1cbiAgICAvLyBDcmVhdGUgYSBzZXBhcmF0ZSBtZXRyaWMgcmVhZGVyIGZvciB0aGUgTm9kZVNES1xuICAgIGNvbnN0IHNka01ldHJpY1JlYWRlciA9IG1ldHJpY0V4cG9ydGVyXG4gICAgICAgID8gbmV3IFBlcmlvZGljRXhwb3J0aW5nTWV0cmljUmVhZGVyKHtcbiAgICAgICAgICAgIGV4cG9ydGVyOiBtZXRyaWNFeHBvcnRlcixcbiAgICAgICAgICAgIGV4cG9ydFRpbWVvdXRNaWxsaXM6IGRldm1vZGUgPyBkZXZtb2RlRXhwb3J0SW50ZXJ2YWwgOiBwcm9kdWN0aW9uRXhwb3J0SW50ZXJ2YWwsXG4gICAgICAgICAgICBleHBvcnRJbnRlcnZhbE1pbGxpczogZGV2bW9kZSA/IGRldm1vZGVFeHBvcnRJbnRlcnZhbCA6IHByb2R1Y3Rpb25FeHBvcnRJbnRlcnZhbCxcbiAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgLy8gQ3JlYXRlIGEgc2VwYXJhdGUgbWV0cmljIHJlYWRlciBmb3IgdGhlIE1ldGVyUHJvdmlkZXJcbiAgICBjb25zdCBob3N0TWV0cmljUmVhZGVyID0gbWV0cmljRXhwb3J0ZXJcbiAgICAgICAgPyBuZXcgUGVyaW9kaWNFeHBvcnRpbmdNZXRyaWNSZWFkZXIoe1xuICAgICAgICAgICAgZXhwb3J0ZXI6IG1ldHJpY0V4cG9ydGVyLFxuICAgICAgICAgICAgZXhwb3J0VGltZW91dE1pbGxpczogZGV2bW9kZSA/IGRldm1vZGVFeHBvcnRJbnRlcnZhbCA6IHByb2R1Y3Rpb25FeHBvcnRJbnRlcnZhbCxcbiAgICAgICAgICAgIGV4cG9ydEludGVydmFsTWlsbGlzOiBkZXZtb2RlID8gZGV2bW9kZUV4cG9ydEludGVydmFsIDogcHJvZHVjdGlvbkV4cG9ydEludGVydmFsLFxuICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXRlclByb3ZpZGVyID0gaG9zdE1ldHJpY1JlYWRlclxuICAgICAgICA/IG5ldyBNZXRlclByb3ZpZGVyKHtcbiAgICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICAgcmVhZGVyczogW2hvc3RNZXRyaWNSZWFkZXJdLFxuICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAobWV0ZXJQcm92aWRlcikge1xuICAgICAgICBtZXRyaWNzLnNldEdsb2JhbE1ldGVyUHJvdmlkZXIobWV0ZXJQcm92aWRlcik7XG4gICAgfVxuICAgIGNvbnN0IGhvc3RNZXRyaWNzID0gbWV0ZXJQcm92aWRlciA/IG5ldyBIb3N0TWV0cmljcyh7IG1ldGVyUHJvdmlkZXIgfSkgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHJ1bm5pbmcgPSBmYWxzZTtcbiAgICBsZXQgaW5zdHJ1bWVudGF0aW9uU0RLO1xuICAgIGlmICh1cmwgfHwgdXNlQ29uc29sZUV4cG9ydGVycykge1xuICAgICAgICBjb25zdCBwcm9wYWdhdG9yID0gbmV3IENvbXBvc2l0ZVByb3BhZ2F0b3Ioe1xuICAgICAgICAgICAgcHJvcGFnYXRvcnM6IFtuZXcgVzNDVHJhY2VDb250ZXh0UHJvcGFnYXRvcigpLCBuZXcgVzNDQmFnZ2FnZVByb3BhZ2F0b3IoKV0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9wYWdhdGlvbi5zZXRHbG9iYWxQcm9wYWdhdG9yKHByb3BhZ2F0b3IpO1xuICAgICAgICBpbnN0cnVtZW50RmV0Y2goKTtcbiAgICAgICAgLy8gQ29tYmluZSBjdXN0b20gc3BhbiBwcm9jZXNzb3JzIHdpdGggb3VyIHNwYW4gcHJvY2Vzc29yc1xuICAgICAgICBjb25zdCBhbGxTcGFuUHJvY2Vzc29ycyA9IFsuLi5zcGFuUHJvY2Vzc29ycywgLi4uKGNvbmZpZy5zcGFuUHJvY2Vzc29ycyB8fCBbXSldO1xuICAgICAgICBpbnN0cnVtZW50YXRpb25TREsgPSBuZXcgTm9kZVNESyh7XG4gICAgICAgICAgICBsb2dSZWNvcmRQcm9jZXNzb3I6IGxvZ2dlclByb3ZpZGVyLnByb2Nlc3NvcixcbiAgICAgICAgICAgIG1ldHJpY1JlYWRlcjogc2RrTWV0cmljUmVhZGVyLFxuICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uczogW2dldE5vZGVBdXRvSW5zdHJ1bWVudGF0aW9ucygpXSxcbiAgICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICAgICAgdGV4dE1hcFByb3BhZ2F0b3I6IHByb3BhZ2F0b3IsXG4gICAgICAgICAgICBzcGFuUHJvY2Vzc29yczogYWxsU3BhblByb2Nlc3NvcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVtZW50YXRpb25TREsuc3RhcnQoKTtcbiAgICAgICAgaG9zdE1ldHJpY3M/LnN0YXJ0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0TmFtZSA9IGNvbmZpZy5wcm9qZWN0SWQgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCBvcmdJZCA9IGNvbmZpZy5vcmdJZCB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSBgJHtvcmdJZH06JHtwcm9qZWN0TmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgdHJhY2Vsb29wSGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgaWYgKGJlYXJlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgdHJhY2Vsb29wSGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke2JlYXJlclRva2VufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbml0aWFsaXplKHtcbiAgICAgICAgICAgICAgICBhcHBOYW1lLFxuICAgICAgICAgICAgICAgIGJhc2VVcmw6IHVybCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0cmFjZWxvb3BIZWFkZXJzLFxuICAgICAgICAgICAgICAgIGRpc2FibGVCYXRjaDogZGV2bW9kZSxcbiAgICAgICAgICAgICAgICBwcm9wYWdhdG9yLFxuICAgICAgICAgICAgICAgIHNpbGVuY2VJbml0aWFsaXphdGlvbk1lc3NhZ2U6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhY2Vsb29wU3luY0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRyYWNpbmdFbmFibGVkOiBmYWxzZSwgLy8gRGlzYWJsZSB0cmFjZWxvb3AncyBvd24gdHJhY2luZyAoZXF1aXZhbGVudCB0byBQeXRob24ncyB0ZWxlbWV0cnlFbmFibGVkOiBmYWxzZSlcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiBKYXZhU2NyaXB0IFNESyBkb2Vzbid0IHN1cHBvcnQgcmVzb3VyY2VBdHRyaWJ1dGVzIGxpa2UgUHl0aG9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgVGVsZW1ldHJ5IGluaXRpYWxpemVkIHdpdGggYXBwX25hbWU6ICR7YXBwTmFtZX1gKTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnVGVsZW1ldHJ5IGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1NlbmRpbmcgdGVsZW1ldHJ5IGRhdGEgdG8gJXMnLCB1cmwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1RlbGVtZXRyeSBub3QgYXZhaWxhYmxlLCBza2lwcGluZyBhdXRvbWF0aWMgaW5zdHJ1bWVudGF0aW9uJywge1xuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBydW5uaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdHJhY2VyID0gb3BlbnRlbGVtZXRyeS50cmFjZS5nZXRUcmFjZXIobmFtZSwgdmVyc2lvbik7XG4gICAgY29uc3QgbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKG5hbWUsIHZlcnNpb24pO1xuICAgIGNvbnN0IHNodXRkb3duID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgICAgcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdzaHV0dGluZyBkb3duIE9wZW5UZWxlbWV0cnknKTtcbiAgICAgICAgICAgIGF3YWl0IGxvZ2dlclByb3ZpZGVyLnByb3ZpZGVyXG4gICAgICAgICAgICAgICAgLmZvcmNlRmx1c2goKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oJ2Vycm9yIGluIGZvcmNlRmx1c2ggb2Ygb3RlbCBwcm92aWRlci4gJXMnLCBlKSk7XG4gICAgICAgICAgICBhd2FpdCBsb2dnZXJQcm92aWRlci5leHBvcnRlclxuICAgICAgICAgICAgICAgID8uc2h1dGRvd24oKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gIWRldm1vZGUgJiYgbG9nZ2VyLndhcm4oJ2Vycm9yIGluIHNodXRkb3duIG9mIG90ZWwgZXhwb3J0ZXIuICVzJywgZSkpO1xuICAgICAgICAgICAgYXdhaXQgaW5zdHJ1bWVudGF0aW9uU0RLXG4gICAgICAgICAgICAgICAgPy5zaHV0ZG93bigpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiAhZGV2bW9kZSAmJiBsb2dnZXIud2FybignZXJyb3IgaW4gc2h1dGRvd24gb2Ygb3RlbCBpbnN0cnVtZW50YXRpb24uICVzJywgZSkpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdzaHV0IGRvd24gT3BlblRlbGVtZXRyeScpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBpZiAodXJsICYmIGlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdjb25uZWN0ZWQgdG8gQWdlbnR1aXR5IEFnZW50IENsb3VkJyk7XG4gICAgfVxuICAgIHJldHVybiB7IHRyYWNlciwgbWV0ZXIsIGxvZ2dlciwgc2h1dGRvd24gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW90ZWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBnZXRTZXJ2aWNlVXJscyB9IGZyb20gJ0BhZ2VudHVpdHkvc2VydmVyJztcbmltcG9ydCAqIGFzIHJ1bnRpbWVDb25maWcgZnJvbSAnLi4vX2NvbmZpZyc7XG5pbXBvcnQgeyByZWdpc3Rlck90ZWwgfSBmcm9tICcuL290ZWwnO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHJlZ2lzdGVyQ29uZmlnKSB7XG4gICAgY29uc3QgcmVnaW9uID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1JFR0lPTiA/PyAndXNjJztcbiAgICBjb25zdCBzZXJ2aWNlVXJscyA9IGdldFNlcnZpY2VVcmxzKHJlZ2lvbik7XG4gICAgY29uc3QgdXJsID0gc2VydmljZVVybHMub3RlbDtcbiAgICBjb25zdCBiZWFyZXJUb2tlbiA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9PVExQX0JFQVJFUl9UT0tFTiA/PyBwcm9jZXNzLmVudi5BR0VOVFVJVFlfU0RLX0tFWTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIHNwYW5Qcm9jZXNzb3JzOiByZWdpc3RlckNvbmZpZy5wcm9jZXNzb3JzLFxuICAgICAgICBuYW1lOiBydW50aW1lQ29uZmlnLmdldEFwcE5hbWUoKSxcbiAgICAgICAgdmVyc2lvbjogcnVudGltZUNvbmZpZy5nZXRBcHBWZXJzaW9uKCksXG4gICAgICAgIGNsaVZlcnNpb246IHJ1bnRpbWVDb25maWcuZ2V0Q0xJVmVyc2lvbigpLFxuICAgICAgICBkZXZtb2RlOiBydW50aW1lQ29uZmlnLmlzRGV2TW9kZSgpLFxuICAgICAgICBvcmdJZDogcnVudGltZUNvbmZpZy5nZXRPcmdhbml6YXRpb25JZCgpLFxuICAgICAgICBwcm9qZWN0SWQ6IHJ1bnRpbWVDb25maWcuZ2V0UHJvamVjdElkKCksXG4gICAgICAgIGRlcGxveW1lbnRJZDogcnVudGltZUNvbmZpZy5nZXREZXBsb3ltZW50SWQoKSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHJ1bnRpbWVDb25maWcuZ2V0RW52aXJvbm1lbnQoKSxcbiAgICAgICAgbG9nTGV2ZWw6IHJlZ2lzdGVyQ29uZmlnLmxvZ0xldmVsLFxuICAgICAgICBqc29ubEJhc2VQYXRoOiBwcm9jZXNzLmVudi5BR0VOVFVJVFlfQ0xPVURfRVhQT1JUX0RJUixcbiAgICAgICAgYmVhcmVyVG9rZW4sXG4gICAgICAgIHVybCxcbiAgICB9O1xuICAgIHJldHVybiByZWdpc3Rlck90ZWwoY29uZmlnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLAogICAgIi8qKlxuICogUHJvY2VzcyBwcm90ZWN0aW9uIHV0aWxpdGllc1xuICpcbiAqIFByZXZlbnRzIHVzZXIgY29kZSBmcm9tIGNhbGxpbmcgcHJvY2Vzcy5leGl0KCkgd2hpY2ggd291bGQgY3Jhc2ggdGhlIHNlcnZlci5cbiAqIFRoZSBydW50aW1lIGNhbiBzdGlsbCBleGl0IGdyYWNlZnVsbHkgdXNpbmcgdGhlIGludGVybmFsIGV4aXQgZnVuY3Rpb24uXG4gKi9cbmltcG9ydCB7IFN0cnVjdHVyZWRFcnJvciB9IGZyb20gJ0BhZ2VudHVpdHkvY29yZSc7XG4vLyBTdG9yZSB0aGUgb3JpZ2luYWwgcHJvY2Vzcy5leGl0IE9OTFkgaWYgbm90IGFscmVhZHkgc3RvcmVkLlxuLy8gVGhpcyBpcyBjcml0aWNhbCBmb3IgaG90IHJlbG9hZCBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBtb2R1bGUgbWF5IGJlIHJlLWltcG9ydGVkXG4vLyBtdWx0aXBsZSB0aW1lcy4gV2UgbXVzdCBjYXB0dXJlIHRoZSB0cnVseSBvcmlnaW5hbCBwcm9jZXNzLmV4aXQsIG5vdCBhIHByZXZpb3VzbHlcbi8vIHdyYXBwZWQgdmVyc2lvbi5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBleGlzdGluZ09yaWdpbmFsRXhpdCA9IGdsb2JhbFRoaXMuX19BR0VOVFVJVFlfT1JJR0lOQUxfUFJPQ0VTU19FWElUX187XG5jb25zdCBvcmlnaW5hbEV4aXQgPSBleGlzdGluZ09yaWdpbmFsRXhpdCA/PyBwcm9jZXNzLmV4aXQuYmluZChwcm9jZXNzKTtcbi8vIFN0b3JlIGl0IGdsb2JhbGx5IHNvIHN1YnNlcXVlbnQgaW1wb3J0cyBnZXQgdGhlIHNhbWUgb3JpZ2luYWxcbmlmICghZXhpc3RpbmdPcmlnaW5hbEV4aXQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGdsb2JhbFRoaXMuX19BR0VOVFVJVFlfT1JJR0lOQUxfUFJPQ0VTU19FWElUX18gPSBvcmlnaW5hbEV4aXQ7XG59XG4vLyBGbGFnIHRvIHRyYWNrIGlmIHByb3RlY3Rpb24gaXMgZW5hYmxlZFxubGV0IHByb3RlY3Rpb25FbmFibGVkID0gZmFsc2U7XG5jb25zdCBQcm9jZXNzRXhpdEF0dGVtcHRFcnJvciA9IFN0cnVjdHVyZWRFcnJvcignUHJvY2Vzc0V4aXRBdHRlbXB0RXJyb3InLCAnQ2FsbGluZyBwcm9jZXNzLmV4aXQoKSBpcyBub3QgYWxsb3dlZCBpbiBhZ2VudCBjb2RlLiBUaGUgc2VydmVyIG11c3QgcmVtYWluIHJ1bm5pbmcgdG8gaGFuZGxlIHJlcXVlc3RzLicpKCk7XG4vKipcbiAqIEVuYWJsZSBwcm90ZWN0aW9uIGFnYWluc3QgcHJvY2Vzcy5leGl0IGNhbGxzLlxuICogQWZ0ZXIgY2FsbGluZyB0aGlzLCB1c2VyIGNvZGUgY2FsbGluZyBwcm9jZXNzLmV4aXQoKSB3aWxsIHRocm93IGFuIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUHJvY2Vzc0V4aXRQcm90ZWN0aW9uKCkge1xuICAgIGlmIChwcm90ZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHByb3RlY3Rpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGdsb2JhbFRoaXMuQUdFTlRVSVRZX1BST0NFU1NfRVhJVCA9IG9yaWdpbmFsRXhpdDtcbiAgICAvLyBSZXBsYWNlIHByb2Nlc3MuZXhpdCB3aXRoIGEgZnVuY3Rpb24gdGhhdCB0aHJvd3NcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb2Nlc3MuZXhpdCA9IGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBQcm9jZXNzRXhpdEF0dGVtcHRFcnJvcih7IGNvZGUgfSk7XG4gICAgfTtcbn1cbi8qKlxuICogRGlzYWJsZSBwcm90ZWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlUHJvY2Vzc0V4aXRQcm90ZWN0aW9uKCkge1xuICAgIGlmICghcHJvdGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGdsb2JhbFRoaXMuQUdFTlRVSVRZX1BST0NFU1NfRVhJVCA9IHVuZGVmaW5lZDtcbiAgICBwcm90ZWN0aW9uRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByb2Nlc3MuZXhpdCA9IG9yaWdpbmFsRXhpdDtcbn1cbi8qKlxuICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIHRoZSBydW50aW1lIHRvIGNhbGwgd2hlbiBpdCBuZWVkcyB0byBleGl0LlxuICogVGhpcyBieXBhc3NlcyB0aGUgcHJvdGVjdGlvbiBhbmQgY2FsbHMgdGhlIG9yaWdpbmFsIHByb2Nlc3MuZXhpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVybmFsRXhpdChjb2RlKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsRXhpdChjb2RlKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgcHJvdGVjdGlvbiBpcyBjdXJyZW50bHkgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0aW9uRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gcHJvdGVjdGlvbkVuYWJsZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fcHJvY2Vzcy1wcm90ZWN0aW9uLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBUaGlzIGZpbGUgaXMgYSBwbGFjZWhvbGRlciBmb3IgVHlwZVNjcmlwdCBjb21waWxhdGlvbi5cbiAqIFRoZSBhY3R1YWwgQkVBQ09OX1NDUklQVCB2YWx1ZSBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBieSBzY3JpcHRzL2J1aWxkLWJlYWNvbi50c1xuICogYW5kIHdyaXR0ZW4gZGlyZWN0bHkgdG8gZGlzdC9iZWFjb24tc2NyaXB0LmpzLCBvdmVyd3JpdGluZyB0aGUgY29tcGlsZWQgb3V0cHV0LlxuICpcbiAqIFRoaXMgYWxsb3dzIFR5cGVTY3JpcHQgdG8gZ2VuZXJhdGUgcHJvcGVyIC5kLnRzIGZpbGVzIGR1cmluZyBjb21waWxhdGlvbixcbiAqIHdoaWxlIHRoZSBhY3R1YWwgbWluaWZpZWQgYmVhY29uIGNvZGUgaXMgaW5qZWN0ZWQgZHVyaW5nIHRoZSBidWlsZCBzdGVwLlxuICovXG5leHBvcnQgY29uc3QgQkVBQ09OX1NDUklQVCA9ICcnO1xuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgYmVhY29uIHNjcmlwdCBoYXMgYmVlbiBwcm9wZXJseSBpbmplY3RlZCBhdCBidWlsZCB0aW1lLlxuICogQ2FsbCB0aGlzIGVhcmx5IGluIHRoZSBydW50aW1lIHRvIGZhaWwgZmFzdCBpZiB0aGUgYnVpbGQgc3RlcCB3YXMgbWlzc2VkLlxuICogQHRocm93cyBFcnJvciBpZiBCRUFDT05fU0NSSVBUIGlzIGVtcHR5IChidWlsZCBzdGVwIG5vdCBydW4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJlYWNvblNjcmlwdCgpIHtcbiAgICBpZiAoIUJFQUNPTl9TQ1JJUFQgfHwgQkVBQ09OX1NDUklQVC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCRUFDT05fU0NSSVBUIGlzIGVtcHR5LiBUaGUgZnJvbnRlbmQgcGFja2FnZSB3YXMgbm90IGJ1aWx0IGNvcnJlY3RseS4gJyArXG4gICAgICAgICAgICAnUnVuIFwiYnVuIHJ1biBidWlsZFwiIGluIEBhZ2VudHVpdHkvZnJvbnRlbmQgdG8gZ2VuZXJhdGUgdGhlIGJlYWNvbiBzY3JpcHQuJyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmVhY29uLXNjcmlwdC5qcy5tYXAiLAogICAgIi8vIHNyYy9taWRkbGV3YXJlL3NlcnZlLXN0YXRpYy9pbmRleC50c1xuaW1wb3J0IHsgQ09NUFJFU1NJQkxFX0NPTlRFTlRfVFlQRV9SRUdFWCB9IGZyb20gXCIuLi8uLi91dGlscy9jb21wcmVzcy5qc1wiO1xuaW1wb3J0IHsgZ2V0TWltZVR5cGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWltZS5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdEpvaW4gfSBmcm9tIFwiLi9wYXRoLmpzXCI7XG52YXIgRU5DT0RJTkdTID0ge1xuICBicjogXCIuYnJcIixcbiAgenN0ZDogXCIuenN0XCIsXG4gIGd6aXA6IFwiLmd6XCJcbn07XG52YXIgRU5DT0RJTkdTX09SREVSRURfS0VZUyA9IE9iamVjdC5rZXlzKEVOQ09ESU5HUyk7XG52YXIgREVGQVVMVF9ET0NVTUVOVCA9IFwiaW5kZXguaHRtbFwiO1xudmFyIHNlcnZlU3RhdGljID0gKG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgcm9vdCA9IG9wdGlvbnMucm9vdCA/PyBcIi4vXCI7XG4gIGNvbnN0IG9wdGlvblBhdGggPSBvcHRpb25zLnBhdGg7XG4gIGNvbnN0IGpvaW4gPSBvcHRpb25zLmpvaW4gPz8gZGVmYXVsdEpvaW47XG4gIHJldHVybiBhc3luYyAoYywgbmV4dCkgPT4ge1xuICAgIGlmIChjLmZpbmFsaXplZCkge1xuICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG4gICAgbGV0IGZpbGVuYW1lO1xuICAgIGlmIChvcHRpb25zLnBhdGgpIHtcbiAgICAgIGZpbGVuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBmaWxlbmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChjLnJlcS5wYXRoKTtcbiAgICAgICAgaWYgKC8oPzpefFtcXC9cXFxcXSlcXC5cXC4oPzokfFtcXC9cXFxcXSkvLnRlc3QoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBhd2FpdCBvcHRpb25zLm9uTm90Rm91bmQ/LihjLnJlcS5wYXRoLCBjKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHBhdGggPSBqb2luKFxuICAgICAgcm9vdCxcbiAgICAgICFvcHRpb25QYXRoICYmIG9wdGlvbnMucmV3cml0ZVJlcXVlc3RQYXRoID8gb3B0aW9ucy5yZXdyaXRlUmVxdWVzdFBhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWVcbiAgICApO1xuICAgIGlmIChvcHRpb25zLmlzRGlyICYmIGF3YWl0IG9wdGlvbnMuaXNEaXIocGF0aCkpIHtcbiAgICAgIHBhdGggPSBqb2luKHBhdGgsIERFRkFVTFRfRE9DVU1FTlQpO1xuICAgIH1cbiAgICBjb25zdCBnZXRDb250ZW50ID0gb3B0aW9ucy5nZXRDb250ZW50O1xuICAgIGxldCBjb250ZW50ID0gYXdhaXQgZ2V0Q29udGVudChwYXRoLCBjKTtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gYy5uZXdSZXNwb25zZShjb250ZW50LmJvZHksIGNvbnRlbnQpO1xuICAgIH1cbiAgICBpZiAoY29udGVudCkge1xuICAgICAgY29uc3QgbWltZVR5cGUgPSBvcHRpb25zLm1pbWVzICYmIGdldE1pbWVUeXBlKHBhdGgsIG9wdGlvbnMubWltZXMpIHx8IGdldE1pbWVUeXBlKHBhdGgpO1xuICAgICAgYy5oZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgbWltZVR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIik7XG4gICAgICBpZiAob3B0aW9ucy5wcmVjb21wcmVzc2VkICYmICghbWltZVR5cGUgfHwgQ09NUFJFU1NJQkxFX0NPTlRFTlRfVFlQRV9SRUdFWC50ZXN0KG1pbWVUeXBlKSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXB0RW5jb2RpbmdTZXQgPSBuZXcgU2V0KFxuICAgICAgICAgIGMucmVxLmhlYWRlcihcIkFjY2VwdC1FbmNvZGluZ1wiKT8uc3BsaXQoXCIsXCIpLm1hcCgoZW5jb2RpbmcpID0+IGVuY29kaW5nLnRyaW0oKSlcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBlbmNvZGluZyBvZiBFTkNPRElOR1NfT1JERVJFRF9LRVlTKSB7XG4gICAgICAgICAgaWYgKCFhY2NlcHRFbmNvZGluZ1NldC5oYXMoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY29tcHJlc3NlZENvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50KHBhdGggKyBFTkNPRElOR1NbZW5jb2RpbmddLCBjKTtcbiAgICAgICAgICBpZiAoY29tcHJlc3NlZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb21wcmVzc2VkQ29udGVudDtcbiAgICAgICAgICAgIGMuaGVhZGVyKFwiQ29udGVudC1FbmNvZGluZ1wiLCBlbmNvZGluZyk7XG4gICAgICAgICAgICBjLmhlYWRlcihcIlZhcnlcIiwgXCJBY2NlcHQtRW5jb2RpbmdcIiwgeyBhcHBlbmQ6IHRydWUgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IG9wdGlvbnMub25Gb3VuZD8uKHBhdGgsIGMpO1xuICAgICAgcmV0dXJuIGMuYm9keShjb250ZW50KTtcbiAgICB9XG4gICAgYXdhaXQgb3B0aW9ucy5vbk5vdEZvdW5kPy4ocGF0aCwgYyk7XG4gICAgYXdhaXQgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfTtcbn07XG5leHBvcnQge1xuICBzZXJ2ZVN0YXRpY1xufTtcbiIsCiAgICAiLy8gc3JjL2FkYXB0ZXIvYnVuL3NlcnZlLXN0YXRpYy50c1xuaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgc2VydmVTdGF0aWMgYXMgYmFzZVNlcnZlU3RhdGljIH0gZnJvbSBcIi4uLy4uL21pZGRsZXdhcmUvc2VydmUtc3RhdGljL2luZGV4LmpzXCI7XG52YXIgc2VydmVTdGF0aWMgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gc2VydmVTdGF0aWMyKGMsIG5leHQpIHtcbiAgICBjb25zdCBnZXRDb250ZW50ID0gYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGUgPSBCdW4uZmlsZShwYXRoKTtcbiAgICAgIHJldHVybiBhd2FpdCBmaWxlLmV4aXN0cygpID8gZmlsZSA6IG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBpc0RpciA9IGFzeW5jIChwYXRoKSA9PiB7XG4gICAgICBsZXQgaXNEaXIyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICBpc0RpcjIgPSBzdGF0cy5pc0RpcmVjdG9yeSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNEaXIyO1xuICAgIH07XG4gICAgcmV0dXJuIGJhc2VTZXJ2ZVN0YXRpYyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZ2V0Q29udGVudCxcbiAgICAgIGpvaW4sXG4gICAgICBpc0RpclxuICAgIH0pKGMsIG5leHQpO1xuICB9O1xufTtcbmV4cG9ydCB7XG4gIHNlcnZlU3RhdGljXG59O1xuIiwKICAgICIvLyBzcmMvY2xpZW50L3V0aWxzLnRzXG5pbXBvcnQgeyBmZXRjaFJQLCBEZXRhaWxlZEVycm9yIH0gZnJvbSBcIi4vZmV0Y2gtcmVzdWx0LXBsZWFzZS5qc1wiO1xudmFyIG1lcmdlUGF0aCA9IChiYXNlLCBwYXRoKSA9PiB7XG4gIGJhc2UgPSBiYXNlLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gIGJhc2UgPSBiYXNlICsgXCIvXCI7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8rLywgXCJcIik7XG4gIHJldHVybiBiYXNlICsgcGF0aDtcbn07XG52YXIgcmVwbGFjZVVybFBhcmFtID0gKHVybFN0cmluZywgcGFyYW1zKSA9PiB7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKFwiLzpcIiArIGsgKyBcIig/OntbXi9dK30pP1xcXFw/P1wiKTtcbiAgICB1cmxTdHJpbmcgPSB1cmxTdHJpbmcucmVwbGFjZShyZWcsIHYgPyBgLyR7dn1gIDogXCJcIik7XG4gIH1cbiAgcmV0dXJuIHVybFN0cmluZztcbn07XG52YXIgYnVpbGRTZWFyY2hQYXJhbXMgPSAocXVlcnkpID0+IHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcbiAgICBpZiAodiA9PT0gdm9pZCAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgIGZvciAoY29uc3QgdjIgb2Ygdikge1xuICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGssIHYyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VhcmNoUGFyYW1zLnNldChrLCB2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlYXJjaFBhcmFtcztcbn07XG52YXIgcmVwbGFjZVVybFByb3RvY29sID0gKHVybFN0cmluZywgcHJvdG9jb2wpID0+IHtcbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgXCJ3c1wiOlxuICAgICAgcmV0dXJuIHVybFN0cmluZy5yZXBsYWNlKC9eaHR0cC8sIFwid3NcIik7XG4gICAgY2FzZSBcImh0dHBcIjpcbiAgICAgIHJldHVybiB1cmxTdHJpbmcucmVwbGFjZSgvXndzLywgXCJodHRwXCIpO1xuICB9XG59O1xudmFyIHJlbW92ZUluZGV4U3RyaW5nID0gKHVybFN0cmluZykgPT4ge1xuICBpZiAoL15odHRwcz86XFwvXFwvW15cXC9dKz9cXC9pbmRleCg/PVxcP3wkKS8udGVzdCh1cmxTdHJpbmcpKSB7XG4gICAgcmV0dXJuIHVybFN0cmluZy5yZXBsYWNlKC9cXC9pbmRleCg/PVxcP3wkKS8sIFwiL1wiKTtcbiAgfVxuICByZXR1cm4gdXJsU3RyaW5nLnJlcGxhY2UoL1xcL2luZGV4KD89XFw/fCQpLywgXCJcIik7XG59O1xuZnVuY3Rpb24gaXNPYmplY3QoaXRlbSkge1xuICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIgJiYgaXRlbSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShpdGVtKTtcbn1cbmZ1bmN0aW9uIGRlZXBNZXJnZSh0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkgJiYgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4udGFyZ2V0IH07XG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KG1lcmdlZFtrZXldKSAmJiBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIG1lcmdlZFtrZXldID0gZGVlcE1lcmdlKG1lcmdlZFtrZXldLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZWQ7XG59XG5hc3luYyBmdW5jdGlvbiBwYXJzZVJlc3BvbnNlKGZldGNoUmVzKSB7XG4gIHJldHVybiBmZXRjaFJQKGZldGNoUmVzKTtcbn1cbmV4cG9ydCB7XG4gIERldGFpbGVkRXJyb3IsXG4gIGJ1aWxkU2VhcmNoUGFyYW1zLFxuICBkZWVwTWVyZ2UsXG4gIG1lcmdlUGF0aCxcbiAgcGFyc2VSZXNwb25zZSxcbiAgcmVtb3ZlSW5kZXhTdHJpbmcsXG4gIHJlcGxhY2VVcmxQYXJhbSxcbiAgcmVwbGFjZVVybFByb3RvY29sXG59O1xuIiwKICAgICIvLyBzcmMvdXRpbHMvaGFuZGxlci50c1xuaW1wb3J0IHsgQ09NUE9TRURfSEFORExFUiB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xudmFyIGlzTWlkZGxld2FyZSA9IChoYW5kbGVyKSA9PiBoYW5kbGVyLmxlbmd0aCA+IDE7XG52YXIgZmluZFRhcmdldEhhbmRsZXIgPSAoaGFuZGxlcikgPT4ge1xuICByZXR1cm4gaGFuZGxlcltDT01QT1NFRF9IQU5ETEVSXSA/IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGZpbmRUYXJnZXRIYW5kbGVyKGhhbmRsZXJbQ09NUE9TRURfSEFORExFUl0pXG4gICkgOiBoYW5kbGVyO1xufTtcbmV4cG9ydCB7XG4gIGZpbmRUYXJnZXRIYW5kbGVyLFxuICBpc01pZGRsZXdhcmVcbn07XG4iLAogICAgIi8vIHNyYy9oZWxwZXIvc3NnL3V0aWxzLnRzXG5pbXBvcnQgeyBNRVRIT0RfTkFNRV9BTEwgfSBmcm9tIFwiLi4vLi4vcm91dGVyLmpzXCI7XG5pbXBvcnQgeyBmaW5kVGFyZ2V0SGFuZGxlciwgaXNNaWRkbGV3YXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2hhbmRsZXIuanNcIjtcbnZhciBkaXJuYW1lID0gKHBhdGgpID0+IHtcbiAgY29uc3Qgc2VwYXJhdGVkUGF0aCA9IHBhdGguc3BsaXQoL1tcXC9cXFxcXS8pO1xuICByZXR1cm4gc2VwYXJhdGVkUGF0aC5zbGljZSgwLCAtMSkuam9pbihcIi9cIik7XG59O1xudmFyIG5vcm1hbGl6ZVBhdGggPSAocGF0aCkgPT4ge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC8oXFxcXCkvZywgXCIvXCIpLnJlcGxhY2UoL1xcLyQvZywgXCJcIik7XG59O1xudmFyIGhhbmRsZVBhcmVudCA9IChyZXN1bHRQYXRocywgYmVmb3JlUGFyZW50RmxhZykgPT4ge1xuICBpZiAocmVzdWx0UGF0aHMubGVuZ3RoID09PSAwIHx8IGJlZm9yZVBhcmVudEZsYWcpIHtcbiAgICByZXN1bHRQYXRocy5wdXNoKFwiLi5cIik7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0UGF0aHMucG9wKCk7XG4gIH1cbn07XG52YXIgaGFuZGxlTm9uRG90ID0gKHBhdGgsIHJlc3VsdFBhdGhzKSA9PiB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC4oPyEuKS8sIFwiXCIpO1xuICBpZiAocGF0aCAhPT0gXCJcIikge1xuICAgIHJlc3VsdFBhdGhzLnB1c2gocGF0aCk7XG4gIH1cbn07XG52YXIgaGFuZGxlU2VnbWVudHMgPSAocGF0aHMsIHJlc3VsdFBhdGhzKSA9PiB7XG4gIGxldCBiZWZvcmVQYXJlbnRGbGFnID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIGlmIChwYXRoID09PSBcIi4uXCIpIHtcbiAgICAgIGhhbmRsZVBhcmVudChyZXN1bHRQYXRocywgYmVmb3JlUGFyZW50RmxhZyk7XG4gICAgICBiZWZvcmVQYXJlbnRGbGFnID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlTm9uRG90KHBhdGgsIHJlc3VsdFBhdGhzKTtcbiAgICAgIGJlZm9yZVBhcmVudEZsYWcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG52YXIgam9pblBhdGhzID0gKC4uLnBhdGhzKSA9PiB7XG4gIHBhdGhzID0gcGF0aHMubWFwKG5vcm1hbGl6ZVBhdGgpO1xuICBjb25zdCByZXN1bHRQYXRocyA9IFtdO1xuICBoYW5kbGVTZWdtZW50cyhwYXRocy5qb2luKFwiL1wiKS5zcGxpdChcIi9cIiksIHJlc3VsdFBhdGhzKTtcbiAgcmV0dXJuIChwYXRoc1swXVswXSA9PT0gXCIvXCIgPyBcIi9cIiA6IFwiXCIpICsgcmVzdWx0UGF0aHMuam9pbihcIi9cIik7XG59O1xudmFyIGZpbHRlclN0YXRpY0dlbmVyYXRlUm91dGVzID0gKGhvbm8pID0+IHtcbiAgcmV0dXJuIGhvbm8ucm91dGVzLnJlZHVjZSgoYWNjLCB7IG1ldGhvZCwgaGFuZGxlciwgcGF0aCB9KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SGFuZGxlciA9IGZpbmRUYXJnZXRIYW5kbGVyKGhhbmRsZXIpO1xuICAgIGlmIChbXCJHRVRcIiwgTUVUSE9EX05BTUVfQUxMXS5pbmNsdWRlcyhtZXRob2QpICYmICFpc01pZGRsZXdhcmUodGFyZ2V0SGFuZGxlcikpIHtcbiAgICAgIGFjYy5wdXNoKHsgcGF0aCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufTtcbnZhciBpc0R5bmFtaWNSb3V0ZSA9IChwYXRoKSA9PiB7XG4gIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5zb21lKChzZWdtZW50KSA9PiBzZWdtZW50LnN0YXJ0c1dpdGgoXCI6XCIpIHx8IHNlZ21lbnQuaW5jbHVkZXMoXCIqXCIpKTtcbn07XG5leHBvcnQge1xuICBkaXJuYW1lLFxuICBmaWx0ZXJTdGF0aWNHZW5lcmF0ZVJvdXRlcyxcbiAgaXNEeW5hbWljUm91dGUsXG4gIGpvaW5QYXRoc1xufTtcbiIsCiAgICAiLy8gc3JjL2hlbHBlci9zc2cvbWlkZGxld2FyZS50c1xuaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIFNTR19DT05URVhUID0gXCJIT05PX1NTR19DT05URVhUXCI7XG52YXIgWF9IT05PX0RJU0FCTEVfU1NHX0hFQURFUl9LRVkgPSBcIngtaG9uby1kaXNhYmxlLXNzZ1wiO1xudmFyIFNTR19ESVNBQkxFRF9SRVNQT05TRSA9ICgoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcIlNTRyBpcyBkaXNhYmxlZFwiLCB7XG4gICAgICBzdGF0dXM6IDQwNCxcbiAgICAgIGhlYWRlcnM6IHsgW1hfSE9OT19ESVNBQkxFX1NTR19IRUFERVJfS0VZXTogXCJ0cnVlXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSkoKTtcbnZhciBzc2dQYXJhbXMgPSAocGFyYW1zKSA9PiBhc3luYyAoYywgbmV4dCkgPT4ge1xuICBpZiAoaXNEeW5hbWljUm91dGUoYy5yZXEucGF0aCkpIHtcbiAgICA7XG4gICAgYy5yZXEucmF3LnNzZ1BhcmFtcyA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtcyA6IGF3YWl0IHBhcmFtcyhjKTtcbiAgICByZXR1cm4gYy5ub3RGb3VuZCgpO1xuICB9XG4gIGF3YWl0IG5leHQoKTtcbn07XG52YXIgaXNTU0dDb250ZXh0ID0gKGMpID0+ICEhYy5lbnY/LltTU0dfQ09OVEVYVF07XG52YXIgZGlzYWJsZVNTRyA9ICgpID0+IGFzeW5jIGZ1bmN0aW9uIGRpc2FibGVTU0cyKGMsIG5leHQpIHtcbiAgaWYgKGlzU1NHQ29udGV4dChjKSkge1xuICAgIGMuaGVhZGVyKFhfSE9OT19ESVNBQkxFX1NTR19IRUFERVJfS0VZLCBcInRydWVcIik7XG4gICAgcmV0dXJuIGMubm90Rm91bmQoKTtcbiAgfVxuICBhd2FpdCBuZXh0KCk7XG59O1xudmFyIG9ubHlTU0cgPSAoKSA9PiBhc3luYyBmdW5jdGlvbiBvbmx5U1NHMihjLCBuZXh0KSB7XG4gIGlmICghaXNTU0dDb250ZXh0KGMpKSB7XG4gICAgcmV0dXJuIGMubm90Rm91bmQoKTtcbiAgfVxuICBhd2FpdCBuZXh0KCk7XG59O1xuZXhwb3J0IHtcbiAgU1NHX0NPTlRFWFQsXG4gIFNTR19ESVNBQkxFRF9SRVNQT05TRSxcbiAgWF9IT05PX0RJU0FCTEVfU1NHX0hFQURFUl9LRVksXG4gIGRpc2FibGVTU0csXG4gIGlzU1NHQ29udGV4dCxcbiAgb25seVNTRyxcbiAgc3NnUGFyYW1zXG59O1xuIiwKICAgICIvLyBzcmMvaGVscGVyL3NzZy9zc2cudHNcbmltcG9ydCB7IHJlcGxhY2VVcmxQYXJhbSB9IGZyb20gXCIuLi8uLi9jbGllbnQvdXRpbHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvb2wgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uY3VycmVudC5qc1wiO1xuaW1wb3J0IHsgZ2V0RXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxzL21pbWUuanNcIjtcbmltcG9ydCB7IFNTR19DT05URVhULCBYX0hPTk9fRElTQUJMRV9TU0dfSEVBREVSX0tFWSB9IGZyb20gXCIuL21pZGRsZXdhcmUuanNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGZpbHRlclN0YXRpY0dlbmVyYXRlUm91dGVzLCBpc0R5bmFtaWNSb3V0ZSwgam9pblBhdGhzIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBERUZBVUxUX0NPTkNVUlJFTkNZID0gMjtcbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xudmFyIERFRkFVTFRfT1VUUFVUX0RJUiA9IFwiLi9zdGF0aWNcIjtcbnZhciBnZW5lcmF0ZUZpbGVQYXRoID0gKHJvdXRlUGF0aCwgb3V0RGlyLCBtaW1lVHlwZSwgZXh0ZW5zaW9uTWFwKSA9PiB7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGRldGVybWluZUV4dGVuc2lvbihtaW1lVHlwZSwgZXh0ZW5zaW9uTWFwKTtcbiAgaWYgKHJvdXRlUGF0aC5lbmRzV2l0aChgLiR7ZXh0ZW5zaW9ufWApKSB7XG4gICAgcmV0dXJuIGpvaW5QYXRocyhvdXREaXIsIHJvdXRlUGF0aCk7XG4gIH1cbiAgaWYgKHJvdXRlUGF0aCA9PT0gXCIvXCIpIHtcbiAgICByZXR1cm4gam9pblBhdGhzKG91dERpciwgYGluZGV4LiR7ZXh0ZW5zaW9ufWApO1xuICB9XG4gIGlmIChyb3V0ZVBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgcmV0dXJuIGpvaW5QYXRocyhvdXREaXIsIHJvdXRlUGF0aCwgYGluZGV4LiR7ZXh0ZW5zaW9ufWApO1xuICB9XG4gIHJldHVybiBqb2luUGF0aHMob3V0RGlyLCBgJHtyb3V0ZVBhdGh9LiR7ZXh0ZW5zaW9ufWApO1xufTtcbnZhciBwYXJzZVJlc3BvbnNlQ29udGVudCA9IGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpO1xuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXMoXCJ0ZXh0XCIpIHx8IGNvbnRlbnRUeXBlPy5pbmNsdWRlcyhcImpzb25cIikpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3IgcHJvY2Vzc2luZyByZXNwb25zZTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwifWBcbiAgICApO1xuICB9XG59O1xudmFyIGRlZmF1bHRFeHRlbnNpb25NYXAgPSB7XG4gIFwidGV4dC9odG1sXCI6IFwiaHRtbFwiLFxuICBcInRleHQveG1sXCI6IFwieG1sXCIsXG4gIFwiYXBwbGljYXRpb24veG1sXCI6IFwieG1sXCIsXG4gIFwiYXBwbGljYXRpb24veWFtbFwiOiBcInlhbWxcIlxufTtcbnZhciBkZXRlcm1pbmVFeHRlbnNpb24gPSAobWltZVR5cGUsIHVzZXJFeHRlbnNpb25NYXApID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uTWFwID0gdXNlckV4dGVuc2lvbk1hcCB8fCBkZWZhdWx0RXh0ZW5zaW9uTWFwO1xuICBpZiAobWltZVR5cGUgaW4gZXh0ZW5zaW9uTWFwKSB7XG4gICAgcmV0dXJuIGV4dGVuc2lvbk1hcFttaW1lVHlwZV07XG4gIH1cbiAgcmV0dXJuIGdldEV4dGVuc2lvbihtaW1lVHlwZSkgfHwgXCJodG1sXCI7XG59O1xudmFyIGNvbWJpbmVCZWZvcmVSZXF1ZXN0SG9va3MgPSAoaG9va3MpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGhvb2tzKSkge1xuICAgIHJldHVybiBob29rcztcbiAgfVxuICByZXR1cm4gYXN5bmMgKHJlcSkgPT4ge1xuICAgIGxldCBjdXJyZW50UmVxID0gcmVxO1xuICAgIGZvciAoY29uc3QgaG9vayBvZiBob29rcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaG9vayhjdXJyZW50UmVxKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIGN1cnJlbnRSZXEgPSByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50UmVxO1xuICB9O1xufTtcbnZhciBjb21iaW5lQWZ0ZXJSZXNwb25zZUhvb2tzID0gKGhvb2tzKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShob29rcykpIHtcbiAgICByZXR1cm4gaG9va3M7XG4gIH1cbiAgcmV0dXJuIGFzeW5jIChyZXMpID0+IHtcbiAgICBsZXQgY3VycmVudFJlcyA9IHJlcztcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhvb2soY3VycmVudFJlcyk7XG4gICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgICAgY3VycmVudFJlcyA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRSZXM7XG4gIH07XG59O1xudmFyIGNvbWJpbmVBZnRlckdlbmVyYXRlSG9va3MgPSAoaG9va3MsIGZzTW9kdWxlLCBvcHRpb25zKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShob29rcykpIHtcbiAgICByZXR1cm4gaG9va3M7XG4gIH1cbiAgcmV0dXJuIGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgaG9va3MpIHtcbiAgICAgIGF3YWl0IGhvb2socmVzdWx0LCBmc01vZHVsZSwgb3B0aW9ucyk7XG4gICAgfVxuICB9O1xufTtcbnZhciBmZXRjaFJvdXRlc0NvbnRlbnQgPSBmdW5jdGlvbiogKGFwcCwgYmVmb3JlUmVxdWVzdEhvb2ssIGFmdGVyUmVzcG9uc2VIb29rLCBjb25jdXJyZW5jeSkge1xuICBjb25zdCBiYXNlVVJMID0gXCJodHRwOi8vbG9jYWxob3N0XCI7XG4gIGNvbnN0IHBvb2wgPSBjcmVhdGVQb29sKHsgY29uY3VycmVuY3kgfSk7XG4gIGZvciAoY29uc3Qgcm91dGUgb2YgZmlsdGVyU3RhdGljR2VuZXJhdGVSb3V0ZXMoYXBwKSkge1xuICAgIGNvbnN0IHRoaXNSb3V0ZUJhc2VVUkwgPSBuZXcgVVJMKHJvdXRlLnBhdGgsIGJhc2VVUkwpLnRvU3RyaW5nKCk7XG4gICAgbGV0IGZvckdldEluZm9VUkxSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpc1JvdXRlQmFzZVVSTCk7XG4gICAgeWllbGQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmVHZXRJbmZvLCByZWplY3RHZXRJbmZvKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYmVmb3JlUmVxdWVzdEhvb2spIHtcbiAgICAgICAgICBjb25zdCBtYXliZVJlcXVlc3QgPSBhd2FpdCBiZWZvcmVSZXF1ZXN0SG9vayhmb3JHZXRJbmZvVVJMUmVxdWVzdCk7XG4gICAgICAgICAgaWYgKCFtYXliZVJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJlc29sdmVHZXRJbmZvKHZvaWQgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckdldEluZm9VUkxSZXF1ZXN0ID0gbWF5YmVSZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHBvb2wucnVuKCgpID0+IGFwcC5mZXRjaChmb3JHZXRJbmZvVVJMUmVxdWVzdCkpO1xuICAgICAgICBpZiAoIWZvckdldEluZm9VUkxSZXF1ZXN0LnNzZ1BhcmFtcykge1xuICAgICAgICAgIGlmIChpc0R5bmFtaWNSb3V0ZShyb3V0ZS5wYXRoKSkge1xuICAgICAgICAgICAgcmVzb2x2ZUdldEluZm8odm9pZCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yR2V0SW5mb1VSTFJlcXVlc3Quc3NnUGFyYW1zID0gW3t9XTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXF1ZXN0SW5pdCA9IHtcbiAgICAgICAgICBtZXRob2Q6IGZvckdldEluZm9VUkxSZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiBmb3JHZXRJbmZvVVJMUmVxdWVzdC5oZWFkZXJzXG4gICAgICAgIH07XG4gICAgICAgIHJlc29sdmVHZXRJbmZvKFxuICAgICAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBmb3JHZXRJbmZvVVJMUmVxdWVzdC5zc2dQYXJhbXMpIHtcbiAgICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmVSZXEsIHJlamVjdFJlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlZFVybFBhcmFtID0gcmVwbGFjZVVybFBhcmFtKHJvdXRlLnBhdGgsIHBhcmFtKTtcbiAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHBvb2wucnVuKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiBhcHAucmVxdWVzdChyZXBsYWNlZFVybFBhcmFtLCByZXF1ZXN0SW5pdCwge1xuICAgICAgICAgICAgICAgICAgICAgIFtTU0dfQ09OVEVYVF06IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoWF9IT05PX0RJU0FCTEVfU1NHX0hFQURFUl9LRVkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVSZXEodm9pZCAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyUmVzcG9uc2VIb29rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlUmVzcG9uc2UgPSBhd2FpdCBhZnRlclJlc3BvbnNlSG9vayhyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVSZXEodm9pZCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBtYXliZVJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgbWltZVR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKT8uc3BsaXQoXCI7XCIpWzBdIHx8IERFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHBhcnNlUmVzcG9uc2VDb250ZW50KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVSZXEoe1xuICAgICAgICAgICAgICAgICAgICByb3V0ZVBhdGg6IHJlcGxhY2VkVXJsUGFyYW0sXG4gICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0UmVxKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKClcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdEdldEluZm8oZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xudmFyIGNyZWF0ZWREaXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbnZhciBzYXZlQ29udGVudFRvRmlsZSA9IGFzeW5jIChkYXRhLCBmc01vZHVsZSwgb3V0RGlyLCBleHRlbnNpb25NYXApID0+IHtcbiAgY29uc3QgYXdhaXRlZERhdGEgPSBhd2FpdCBkYXRhO1xuICBpZiAoIWF3YWl0ZWREYXRhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHsgcm91dGVQYXRoLCBjb250ZW50LCBtaW1lVHlwZSB9ID0gYXdhaXRlZERhdGE7XG4gIGNvbnN0IGZpbGVQYXRoID0gZ2VuZXJhdGVGaWxlUGF0aChyb3V0ZVBhdGgsIG91dERpciwgbWltZVR5cGUsIGV4dGVuc2lvbk1hcCk7XG4gIGNvbnN0IGRpclBhdGggPSBkaXJuYW1lKGZpbGVQYXRoKTtcbiAgaWYgKCFjcmVhdGVkRGlycy5oYXMoZGlyUGF0aCkpIHtcbiAgICBhd2FpdCBmc01vZHVsZS5ta2RpcihkaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjcmVhdGVkRGlycy5hZGQoZGlyUGF0aCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgYXdhaXQgZnNNb2R1bGUud3JpdGVGaWxlKGZpbGVQYXRoLCBjb250ZW50KTtcbiAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICBhd2FpdCBmc01vZHVsZS53cml0ZUZpbGUoZmlsZVBhdGgsIG5ldyBVaW50OEFycmF5KGNvbnRlbnQpKTtcbiAgfVxuICByZXR1cm4gZmlsZVBhdGg7XG59O1xudmFyIGRlZmF1bHRQbHVnaW4gPSB7XG4gIGFmdGVyUmVzcG9uc2VIb29rOiAocmVzKSA9PiB7XG4gICAgaWYgKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59O1xudmFyIHRvU1NHID0gYXN5bmMgKGFwcCwgZnMsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdDtcbiAgY29uc3QgZ2V0SW5mb1Byb21pc2VzID0gW107XG4gIGNvbnN0IHNhdmVQcm9taXNlcyA9IFtdO1xuICBjb25zdCBwbHVnaW5zID0gb3B0aW9ucz8ucGx1Z2lucyB8fCBbZGVmYXVsdFBsdWdpbl07XG4gIGNvbnN0IGJlZm9yZVJlcXVlc3RIb29rcyA9IFtdO1xuICBjb25zdCBhZnRlclJlc3BvbnNlSG9va3MgPSBbXTtcbiAgY29uc3QgYWZ0ZXJHZW5lcmF0ZUhvb2tzID0gW107XG4gIGlmIChvcHRpb25zPy5iZWZvcmVSZXF1ZXN0SG9vaykge1xuICAgIGJlZm9yZVJlcXVlc3RIb29rcy5wdXNoKFxuICAgICAgLi4uQXJyYXkuaXNBcnJheShvcHRpb25zLmJlZm9yZVJlcXVlc3RIb29rKSA/IG9wdGlvbnMuYmVmb3JlUmVxdWVzdEhvb2sgOiBbb3B0aW9ucy5iZWZvcmVSZXF1ZXN0SG9va11cbiAgICApO1xuICB9XG4gIGlmIChvcHRpb25zPy5hZnRlclJlc3BvbnNlSG9vaykge1xuICAgIGFmdGVyUmVzcG9uc2VIb29rcy5wdXNoKFxuICAgICAgLi4uQXJyYXkuaXNBcnJheShvcHRpb25zLmFmdGVyUmVzcG9uc2VIb29rKSA/IG9wdGlvbnMuYWZ0ZXJSZXNwb25zZUhvb2sgOiBbb3B0aW9ucy5hZnRlclJlc3BvbnNlSG9va11cbiAgICApO1xuICB9XG4gIGlmIChvcHRpb25zPy5hZnRlckdlbmVyYXRlSG9vaykge1xuICAgIGFmdGVyR2VuZXJhdGVIb29rcy5wdXNoKFxuICAgICAgLi4uQXJyYXkuaXNBcnJheShvcHRpb25zLmFmdGVyR2VuZXJhdGVIb29rKSA/IG9wdGlvbnMuYWZ0ZXJHZW5lcmF0ZUhvb2sgOiBbb3B0aW9ucy5hZnRlckdlbmVyYXRlSG9va11cbiAgICApO1xuICB9XG4gIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICBpZiAocGx1Z2luLmJlZm9yZVJlcXVlc3RIb29rKSB7XG4gICAgICBiZWZvcmVSZXF1ZXN0SG9va3MucHVzaChcbiAgICAgICAgLi4uQXJyYXkuaXNBcnJheShwbHVnaW4uYmVmb3JlUmVxdWVzdEhvb2spID8gcGx1Z2luLmJlZm9yZVJlcXVlc3RIb29rIDogW3BsdWdpbi5iZWZvcmVSZXF1ZXN0SG9va11cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwbHVnaW4uYWZ0ZXJSZXNwb25zZUhvb2spIHtcbiAgICAgIGFmdGVyUmVzcG9uc2VIb29rcy5wdXNoKFxuICAgICAgICAuLi5BcnJheS5pc0FycmF5KHBsdWdpbi5hZnRlclJlc3BvbnNlSG9vaykgPyBwbHVnaW4uYWZ0ZXJSZXNwb25zZUhvb2sgOiBbcGx1Z2luLmFmdGVyUmVzcG9uc2VIb29rXVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBsdWdpbi5hZnRlckdlbmVyYXRlSG9vaykge1xuICAgICAgYWZ0ZXJHZW5lcmF0ZUhvb2tzLnB1c2goXG4gICAgICAgIC4uLkFycmF5LmlzQXJyYXkocGx1Z2luLmFmdGVyR2VuZXJhdGVIb29rKSA/IHBsdWdpbi5hZnRlckdlbmVyYXRlSG9vayA6IFtwbHVnaW4uYWZ0ZXJHZW5lcmF0ZUhvb2tdXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IG9wdGlvbnM/LmRpciA/PyBERUZBVUxUX09VVFBVVF9ESVI7XG4gICAgY29uc3QgY29uY3VycmVuY3kgPSBvcHRpb25zPy5jb25jdXJyZW5jeSA/PyBERUZBVUxUX0NPTkNVUlJFTkNZO1xuICAgIGNvbnN0IGNvbWJpbmVkQmVmb3JlUmVxdWVzdEhvb2sgPSBjb21iaW5lQmVmb3JlUmVxdWVzdEhvb2tzKFxuICAgICAgYmVmb3JlUmVxdWVzdEhvb2tzLmxlbmd0aCA+IDAgPyBiZWZvcmVSZXF1ZXN0SG9va3MgOiBbKHJlcSkgPT4gcmVxXVxuICAgICk7XG4gICAgY29uc3QgY29tYmluZWRBZnRlclJlc3BvbnNlSG9vayA9IGNvbWJpbmVBZnRlclJlc3BvbnNlSG9va3MoXG4gICAgICBhZnRlclJlc3BvbnNlSG9va3MubGVuZ3RoID4gMCA/IGFmdGVyUmVzcG9uc2VIb29rcyA6IFsocmVxKSA9PiByZXFdXG4gICAgKTtcbiAgICBjb25zdCBnZXRJbmZvR2VuID0gZmV0Y2hSb3V0ZXNDb250ZW50KFxuICAgICAgYXBwLFxuICAgICAgY29tYmluZWRCZWZvcmVSZXF1ZXN0SG9vayxcbiAgICAgIGNvbWJpbmVkQWZ0ZXJSZXNwb25zZUhvb2ssXG4gICAgICBjb25jdXJyZW5jeVxuICAgICk7XG4gICAgZm9yIChjb25zdCBnZXRJbmZvIG9mIGdldEluZm9HZW4pIHtcbiAgICAgIGdldEluZm9Qcm9taXNlcy5wdXNoKFxuICAgICAgICBnZXRJbmZvLnRoZW4oKGdldENvbnRlbnRHZW4pID0+IHtcbiAgICAgICAgICBpZiAoIWdldENvbnRlbnRHZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBjb250ZW50IG9mIGdldENvbnRlbnRHZW4pIHtcbiAgICAgICAgICAgIHNhdmVQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICBzYXZlQ29udGVudFRvRmlsZShjb250ZW50LCBmcywgb3V0cHV0RGlyLCBvcHRpb25zPy5leHRlbnNpb25NYXApLmNhdGNoKChlKSA9PiBlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChnZXRJbmZvUHJvbWlzZXMpO1xuICAgIGNvbnN0IGZpbGVzID0gW107XG4gICAgZm9yIChjb25zdCBzYXZlUHJvbWlzZSBvZiBzYXZlUHJvbWlzZXMpIHtcbiAgICAgIGNvbnN0IGZpbGVPckVycm9yID0gYXdhaXQgc2F2ZVByb21pc2U7XG4gICAgICBpZiAodHlwZW9mIGZpbGVPckVycm9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZpbGVzLnB1c2goZmlsZU9yRXJyb3IpO1xuICAgICAgfSBlbHNlIGlmIChmaWxlT3JFcnJvcikge1xuICAgICAgICB0aHJvdyBmaWxlT3JFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0geyBzdWNjZXNzOiB0cnVlLCBmaWxlcyB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yT2JqID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xuICAgIHJlc3VsdCA9IHsgc3VjY2VzczogZmFsc2UsIGZpbGVzOiBbXSwgZXJyb3I6IGVycm9yT2JqIH07XG4gIH1cbiAgaWYgKGFmdGVyR2VuZXJhdGVIb29rcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY29tYmluZWRBZnRlckdlbmVyYXRlSG9va3MgPSBjb21iaW5lQWZ0ZXJHZW5lcmF0ZUhvb2tzKGFmdGVyR2VuZXJhdGVIb29rcywgZnMsIG9wdGlvbnMpO1xuICAgIGF3YWl0IGNvbWJpbmVkQWZ0ZXJHZW5lcmF0ZUhvb2tzKHJlc3VsdCwgZnMsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IHtcbiAgREVGQVVMVF9PVVRQVVRfRElSLFxuICBjb21iaW5lQWZ0ZXJHZW5lcmF0ZUhvb2tzLFxuICBjb21iaW5lQWZ0ZXJSZXNwb25zZUhvb2tzLFxuICBjb21iaW5lQmVmb3JlUmVxdWVzdEhvb2tzLFxuICBkZWZhdWx0RXh0ZW5zaW9uTWFwLFxuICBkZWZhdWx0UGx1Z2luLFxuICBmZXRjaFJvdXRlc0NvbnRlbnQsXG4gIHNhdmVDb250ZW50VG9GaWxlLFxuICB0b1NTR1xufTtcbiIsCiAgICAiLy8gc3JjL2hlbHBlci9zc2cvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gXCIuL3NzZy5qc1wiO1xuaW1wb3J0IHtcbiAgWF9IT05PX0RJU0FCTEVfU1NHX0hFQURFUl9LRVksXG4gIHNzZ1BhcmFtcyxcbiAgaXNTU0dDb250ZXh0LFxuICBkaXNhYmxlU1NHLFxuICBvbmx5U1NHXG59IGZyb20gXCIuL21pZGRsZXdhcmUuanNcIjtcbmV4cG9ydCB7XG4gIFhfSE9OT19ESVNBQkxFX1NTR19IRUFERVJfS0VZLFxuICBkaXNhYmxlU1NHLFxuICBpc1NTR0NvbnRleHQsXG4gIG9ubHlTU0csXG4gIHNzZ1BhcmFtc1xufTtcbiIsCiAgICAiLy8gc3JjL2FkYXB0ZXIvYnVuL3NzZy50c1xuaW1wb3J0IHsgdG9TU0cgYXMgYmFzZVRvU1NHIH0gZnJvbSBcIi4uLy4uL2hlbHBlci9zc2cvaW5kZXguanNcIjtcbnZhciB7IHdyaXRlIH0gPSBCdW47XG52YXIgYnVuRmlsZVN5c3RlbU1vZHVsZSA9IHtcbiAgd3JpdGVGaWxlOiBhc3luYyAocGF0aCwgZGF0YSkgPT4ge1xuICAgIGF3YWl0IHdyaXRlKHBhdGgsIGRhdGEpO1xuICB9LFxuICBta2RpcjogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xudmFyIHRvU1NHID0gYXN5bmMgKGFwcCwgb3B0aW9ucykgPT4ge1xuICByZXR1cm4gYmFzZVRvU1NHKGFwcCwgYnVuRmlsZVN5c3RlbU1vZHVsZSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0IHtcbiAgYnVuRmlsZVN5c3RlbU1vZHVsZSxcbiAgdG9TU0dcbn07XG4iLAogICAgIi8vIHNyYy9oZWxwZXIvd2Vic29ja2V0L2luZGV4LnRzXG52YXIgV1NDb250ZXh0ID0gY2xhc3Mge1xuICAjaW5pdDtcbiAgY29uc3RydWN0b3IoaW5pdCkge1xuICAgIHRoaXMuI2luaXQgPSBpbml0O1xuICAgIHRoaXMucmF3ID0gaW5pdC5yYXc7XG4gICAgdGhpcy51cmwgPSBpbml0LnVybCA/IG5ldyBVUkwoaW5pdC51cmwpIDogbnVsbDtcbiAgICB0aGlzLnByb3RvY29sID0gaW5pdC5wcm90b2NvbCA/PyBudWxsO1xuICB9XG4gIHNlbmQoc291cmNlLCBvcHRpb25zKSB7XG4gICAgdGhpcy4jaW5pdC5zZW5kKHNvdXJjZSwgb3B0aW9ucyA/PyB7fSk7XG4gIH1cbiAgcmF3O1xuICBiaW5hcnlUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICBnZXQgcmVhZHlTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5pdC5yZWFkeVN0YXRlO1xuICB9XG4gIHVybDtcbiAgcHJvdG9jb2w7XG4gIGNsb3NlKGNvZGUsIHJlYXNvbikge1xuICAgIHRoaXMuI2luaXQuY2xvc2UoY29kZSwgcmVhc29uKTtcbiAgfVxufTtcbnZhciBjcmVhdGVXU01lc3NhZ2VFdmVudCA9IChzb3VyY2UpID0+IHtcbiAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQoXCJtZXNzYWdlXCIsIHtcbiAgICBkYXRhOiBzb3VyY2VcbiAgfSk7XG59O1xudmFyIGRlZmluZVdlYlNvY2tldEhlbHBlciA9IChoYW5kbGVyKSA9PiB7XG4gIHJldHVybiAoKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgW2NyZWF0ZUV2ZW50cywgb3B0aW9uc10gPSBhcmdzO1xuICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHVwZ3JhZGVXZWJTb2NrZXQoYywgbmV4dCkge1xuICAgICAgICBjb25zdCBldmVudHMgPSBhd2FpdCBjcmVhdGVFdmVudHMoYyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYywgZXZlbnRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV4dCgpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW2MsIGV2ZW50cywgb3B0aW9uc10gPSBhcmdzO1xuICAgICAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZ3JhZGVkID0gYXdhaXQgaGFuZGxlcihjLCBldmVudHMsIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXVwZ3JhZGVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHVwZ3JhZGUgV2ViU29ja2V0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cGdyYWRlZDtcbiAgICAgIH0pKCk7XG4gICAgfVxuICB9KTtcbn07XG5leHBvcnQge1xuICBXU0NvbnRleHQsXG4gIGNyZWF0ZVdTTWVzc2FnZUV2ZW50LFxuICBkZWZpbmVXZWJTb2NrZXRIZWxwZXJcbn07XG4iLAogICAgIi8vIHNyYy9hZGFwdGVyL2J1bi9zZXJ2ZXIudHNcbnZhciBnZXRCdW5TZXJ2ZXIgPSAoYykgPT4gXCJzZXJ2ZXJcIiBpbiBjLmVudiA/IGMuZW52LnNlcnZlciA6IGMuZW52O1xuZXhwb3J0IHtcbiAgZ2V0QnVuU2VydmVyXG59O1xuIiwKICAgICIvLyBzcmMvYWRhcHRlci9idW4vd2Vic29ja2V0LnRzXG5pbXBvcnQgeyBjcmVhdGVXU01lc3NhZ2VFdmVudCwgZGVmaW5lV2ViU29ja2V0SGVscGVyLCBXU0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vaGVscGVyL3dlYnNvY2tldC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0QnVuU2VydmVyIH0gZnJvbSBcIi4vc2VydmVyLmpzXCI7XG52YXIgY3JlYXRlV1NDb250ZXh0ID0gKHdzKSA9PiB7XG4gIHJldHVybiBuZXcgV1NDb250ZXh0KHtcbiAgICBzZW5kOiAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgICB3cy5zZW5kKHNvdXJjZSwgb3B0aW9ucz8uY29tcHJlc3MpO1xuICAgIH0sXG4gICAgcmF3OiB3cyxcbiAgICByZWFkeVN0YXRlOiB3cy5yZWFkeVN0YXRlLFxuICAgIHVybDogd3MuZGF0YS51cmwsXG4gICAgcHJvdG9jb2w6IHdzLmRhdGEucHJvdG9jb2wsXG4gICAgY2xvc2UoY29kZSwgcmVhc29uKSB7XG4gICAgICB3cy5jbG9zZShjb2RlLCByZWFzb24pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyIHVwZ3JhZGVXZWJTb2NrZXQgPSBkZWZpbmVXZWJTb2NrZXRIZWxwZXIoKGMsIGV2ZW50cykgPT4ge1xuICBjb25zdCBzZXJ2ZXIgPSBnZXRCdW5TZXJ2ZXIoYyk7XG4gIGlmICghc2VydmVyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImVudiBoYXMgdG8gaW5jbHVkZSB0aGUgMm5kIGFyZ3VtZW50IG9mIGZldGNoLlwiKTtcbiAgfVxuICBjb25zdCB1cGdyYWRlUmVzdWx0ID0gc2VydmVyLnVwZ3JhZGUoYy5yZXEucmF3LCB7XG4gICAgZGF0YToge1xuICAgICAgZXZlbnRzLFxuICAgICAgdXJsOiBuZXcgVVJMKGMucmVxLnVybCksXG4gICAgICBwcm90b2NvbDogYy5yZXEudXJsXG4gICAgfVxuICB9KTtcbiAgaWYgKHVwZ3JhZGVSZXN1bHQpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwpO1xuICB9XG4gIHJldHVybjtcbn0pO1xudmFyIHdlYnNvY2tldCA9IHtcbiAgb3Blbih3cykge1xuICAgIGNvbnN0IHdlYnNvY2tldExpc3RlbmVycyA9IHdzLmRhdGEuZXZlbnRzO1xuICAgIGlmICh3ZWJzb2NrZXRMaXN0ZW5lcnMub25PcGVuKSB7XG4gICAgICB3ZWJzb2NrZXRMaXN0ZW5lcnMub25PcGVuKG5ldyBFdmVudChcIm9wZW5cIiksIGNyZWF0ZVdTQ29udGV4dCh3cykpO1xuICAgIH1cbiAgfSxcbiAgY2xvc2Uod3MsIGNvZGUsIHJlYXNvbikge1xuICAgIGNvbnN0IHdlYnNvY2tldExpc3RlbmVycyA9IHdzLmRhdGEuZXZlbnRzO1xuICAgIGlmICh3ZWJzb2NrZXRMaXN0ZW5lcnMub25DbG9zZSkge1xuICAgICAgd2Vic29ja2V0TGlzdGVuZXJzLm9uQ2xvc2UoXG4gICAgICAgIG5ldyBDbG9zZUV2ZW50KFwiY2xvc2VcIiwge1xuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgcmVhc29uXG4gICAgICAgIH0pLFxuICAgICAgICBjcmVhdGVXU0NvbnRleHQod3MpXG4gICAgICApO1xuICAgIH1cbiAgfSxcbiAgbWVzc2FnZSh3cywgbWVzc2FnZSkge1xuICAgIGNvbnN0IHdlYnNvY2tldExpc3RlbmVycyA9IHdzLmRhdGEuZXZlbnRzO1xuICAgIGlmICh3ZWJzb2NrZXRMaXN0ZW5lcnMub25NZXNzYWdlKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkUmVjZWl2ZURhdGEgPSB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlLmJ1ZmZlcjtcbiAgICAgIHdlYnNvY2tldExpc3RlbmVycy5vbk1lc3NhZ2UoY3JlYXRlV1NNZXNzYWdlRXZlbnQobm9ybWFsaXplZFJlY2VpdmVEYXRhKSwgY3JlYXRlV1NDb250ZXh0KHdzKSk7XG4gICAgfVxuICB9XG59O1xudmFyIGNyZWF0ZUJ1bldlYlNvY2tldCA9ICgpID0+ICh7XG4gIHVwZ3JhZGVXZWJTb2NrZXQsXG4gIHdlYnNvY2tldFxufSk7XG5leHBvcnQge1xuICBjcmVhdGVCdW5XZWJTb2NrZXQsXG4gIGNyZWF0ZVdTQ29udGV4dCxcbiAgdXBncmFkZVdlYlNvY2tldCxcbiAgd2Vic29ja2V0XG59O1xuIiwKICAgICIvLyBzcmMvYWRhcHRlci9idW4vY29ubmluZm8udHNcbmltcG9ydCB7IGdldEJ1blNlcnZlciB9IGZyb20gXCIuL3NlcnZlci5qc1wiO1xudmFyIGdldENvbm5JbmZvID0gKGMpID0+IHtcbiAgY29uc3Qgc2VydmVyID0gZ2V0QnVuU2VydmVyKGMpO1xuICBpZiAoIXNlcnZlcikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJlbnYgaGFzIHRvIGluY2x1ZGUgdGhlIDJuZCBhcmd1bWVudCBvZiBmZXRjaC5cIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBzZXJ2ZXIucmVxdWVzdElQICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VydmVyLnJlcXVlc3RJUCBpcyBub3QgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgY29uc3QgaW5mbyA9IHNlcnZlci5yZXF1ZXN0SVAoYy5yZXEucmF3KTtcbiAgaWYgKCFpbmZvKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbW90ZToge31cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgcmVtb3RlOiB7XG4gICAgICBhZGRyZXNzOiBpbmZvLmFkZHJlc3MsXG4gICAgICBhZGRyZXNzVHlwZTogaW5mby5mYW1pbHkgPT09IFwiSVB2NlwiIHx8IGluZm8uZmFtaWx5ID09PSBcIklQdjRcIiA/IGluZm8uZmFtaWx5IDogdm9pZCAwLFxuICAgICAgcG9ydDogaW5mby5wb3J0XG4gICAgfVxuICB9O1xufTtcbmV4cG9ydCB7XG4gIGdldENvbm5JbmZvXG59O1xuIiwKICAgICIvLyBzcmMvYWRhcHRlci9idW4vaW5kZXgudHNcbmltcG9ydCB7IHNlcnZlU3RhdGljIH0gZnJvbSBcIi4vc2VydmUtc3RhdGljLmpzXCI7XG5pbXBvcnQgeyBidW5GaWxlU3lzdGVtTW9kdWxlLCB0b1NTRyB9IGZyb20gXCIuL3NzZy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlQnVuV2ViU29ja2V0LCB1cGdyYWRlV2ViU29ja2V0LCB3ZWJzb2NrZXQgfSBmcm9tIFwiLi93ZWJzb2NrZXQuanNcIjtcbmltcG9ydCB7IGdldENvbm5JbmZvIH0gZnJvbSBcIi4vY29ubmluZm8uanNcIjtcbmV4cG9ydCB7XG4gIGJ1bkZpbGVTeXN0ZW1Nb2R1bGUsXG4gIGNyZWF0ZUJ1bldlYlNvY2tldCxcbiAgZ2V0Q29ubkluZm8sXG4gIHNlcnZlU3RhdGljLFxuICB0b1NTRyxcbiAgdXBncmFkZVdlYlNvY2tldCxcbiAgd2Vic29ja2V0XG59O1xuIiwKICAgICJpbXBvcnQgeyB1cGdyYWRlV2ViU29ja2V0IH0gZnJvbSAnaG9uby9idW4nO1xuaW1wb3J0IHsgZ2V0QWdlbnRBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJy4uL19jb250ZXh0Jztcbi8qKlxuICogQ3JlYXRlcyBhIFdlYlNvY2tldCBtaWRkbGV3YXJlIGZvciBoYW5kbGluZyBXZWJTb2NrZXQgY29ubmVjdGlvbnMuXG4gKlxuICogVXNlIHdpdGggcm91dGVyLmdldCgpIHRvIGNyZWF0ZSBhIFdlYlNvY2tldCBlbmRwb2ludDpcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY3JlYXRlUm91dGVyLCB3ZWJzb2NrZXQgfSBmcm9tICdAYWdlbnR1aXR5L3J1bnRpbWUnO1xuICpcbiAqIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcigpO1xuICpcbiAqIHJvdXRlci5nZXQoJy93cycsIHdlYnNvY2tldCgoYywgd3MpID0+IHtcbiAqICAgd3Mub25PcGVuKCgpID0+IHtcbiAqICAgICBjLnZhci5sb2dnZXIuaW5mbygnV2ViU29ja2V0IG9wZW5lZCcpO1xuICogICAgIHdzLnNlbmQoJ1dlbGNvbWUhJyk7XG4gKiAgIH0pO1xuICpcbiAqICAgd3Mub25NZXNzYWdlKChldmVudCkgPT4ge1xuICogICAgIGMudmFyLmxvZ2dlci5pbmZvKCdSZWNlaXZlZDonLCBldmVudC5kYXRhKTtcbiAqICAgICB3cy5zZW5kKCdFY2hvOiAnICsgZXZlbnQuZGF0YSk7XG4gKiAgIH0pO1xuICpcbiAqICAgd3Mub25DbG9zZSgoKSA9PiB7XG4gKiAgICAgYy52YXIubG9nZ2VyLmluZm8oJ1dlYlNvY2tldCBjbG9zZWQnKTtcbiAqICAgfSk7XG4gKiB9KSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIEhhbmRsZXIgZnVuY3Rpb24gcmVjZWl2aW5nIGNvbnRleHQgYW5kIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gKiBAcmV0dXJucyBIb25vIG1pZGRsZXdhcmUgaGFuZGxlciBmb3IgV2ViU29ja2V0IHVwZ3JhZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYnNvY2tldChoYW5kbGVyKSB7XG4gICAgY29uc3Qgd3NIYW5kbGVyID0gdXBncmFkZVdlYlNvY2tldCgoYykgPT4ge1xuICAgICAgICBsZXQgb3BlbkhhbmRsZXI7XG4gICAgICAgIGxldCBtZXNzYWdlSGFuZGxlcjtcbiAgICAgICAgbGV0IGNsb3NlSGFuZGxlcjtcbiAgICAgICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFzeW5jTG9jYWxTdG9yYWdlID0gZ2V0QWdlbnRBc3luY0xvY2FsU3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBjYXB0dXJlZENvbnRleHQgPSBhc3luY0xvY2FsU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgICAgICBjb25zdCB3c0Nvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICBvbk9wZW46IChoKSA9PiB7XG4gICAgICAgICAgICAgICAgb3BlbkhhbmRsZXIgPSBoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uTWVzc2FnZTogKGgpID0+IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlciA9IGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbG9zZTogKGgpID0+IHtcbiAgICAgICAgICAgICAgICBjbG9zZUhhbmRsZXIgPSBoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmQ6IChfZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBib3VuZCB0byB0aGUgYWN0dWFsIHdzIGluIHRoZSBoYW5kbGVyc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcnVuSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjYXB0dXJlZENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBhc3luY0xvY2FsU3RvcmFnZS5ydW4oY2FwdHVyZWRDb250ZXh0LCAoKSA9PiBoYW5kbGVyKGMsIHdzQ29ubmVjdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihjLCB3c0Nvbm5lY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBydW5IYW5kbGVyKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgb25PcGVuOiBhc3luYyAoZXZlbnQsIHdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgd3NDb25uZWN0aW9uLnNlbmQgPSAoZGF0YSkgPT4gd3Muc2VuZChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW5IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoID0gb3BlbkhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZWRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXN5bmNMb2NhbFN0b3JhZ2UucnVuKGNhcHR1cmVkQ29udGV4dCwgKCkgPT4gaChldmVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjLnZhci5sb2dnZXI/LmVycm9yKCdXZWJTb2NrZXQgb25PcGVuIGVycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG9uTWVzc2FnZTogYXN5bmMgKGV2ZW50LCB3cykgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdzQ29ubmVjdGlvbi5zZW5kID0gKGRhdGEpID0+IHdzLnNlbmQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5IYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZWRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXN5bmNMb2NhbFN0b3JhZ2UucnVuKGNhcHR1cmVkQ29udGV4dCwgKCkgPT4gaChldmVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjLnZhci5sb2dnZXI/LmVycm9yKCdXZWJTb2NrZXQgb25NZXNzYWdlIGVycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG9uQ2xvc2U6IGFzeW5jIChldmVudCwgX3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaCA9IGNsb3NlSGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlZENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBhc3luY0xvY2FsU3RvcmFnZS5ydW4oY2FwdHVyZWRDb250ZXh0LCAoKSA9PiBoKGV2ZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGMudmFyLmxvZ2dlcj8uZXJyb3IoJ1dlYlNvY2tldCBvbkNsb3NlIGVycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBtaWRkbGV3YXJlID0gKGMsIG5leHQpID0+IHdzSGFuZGxlcihjLCBuZXh0KTtcbiAgICByZXR1cm4gbWlkZGxld2FyZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYnNvY2tldC5qcy5tYXAiLAogICAgImltcG9ydCB7IHRpbWluZ1NhZmVFcXVhbCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IHRvSlNPTlNjaGVtYSB9IGZyb20gJ0BhZ2VudHVpdHkvc2VydmVyJztcbmltcG9ydCB7IGdldEFnZW50cywgY3JlYXRlQWdlbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9hZ2VudCc7XG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgeyB3ZWJzb2NrZXQgfSBmcm9tICcuL2hhbmRsZXJzL3dlYnNvY2tldCc7XG5pbXBvcnQgeyBwcml2YXRlQ29udGV4dCB9IGZyb20gJy4vX3NlcnZlcic7XG5pbXBvcnQgeyBnZXRUaHJlYWRQcm92aWRlciB9IGZyb20gJy4vX3NlcnZpY2VzJztcbmltcG9ydCB7IGxvYWRCdWlsZE1ldGFkYXRhLCBnZXRBZ2VudE1ldGFkYXRhQnlBZ2VudElkLCBoYXNNZXRhZGF0YSwgZW5zdXJlQWdlbnRzSW1wb3J0ZWQsIH0gZnJvbSAnLi9fbWV0YWRhdGEnO1xuaW1wb3J0IHsgVE9LRU5TX0hFQURFUiwgRFVSQVRJT05fSEVBREVSIH0gZnJvbSAnLi9fdG9rZW5zJztcbi8qKlxuICogTWlkZGxld2FyZSB0aGF0IGNhcHR1cmVzIGV4ZWN1dGlvbiBtZXRhZGF0YSAodG9rZW5zLCBkdXJhdGlvbiwgc2Vzc2lvbklkKSBhZnRlciB0aGUgaGFuZGxlciBjb21wbGV0ZXNcbiAqIGFuZCBzYXZlcyBpdCB0byB0aHJlYWQgc3RhdGUuIEFwcGxpZWQgb25seSB0byB0aGUgL2V4ZWN1dGUgcm91dGUuXG4gKi9cbmNvbnN0IGNyZWF0ZVdvcmtiZW5jaEV4ZWN1dGlvbk1ldGFkYXRhTWlkZGxld2FyZSA9ICgpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGF3YWl0IG5leHQoKTtcbiAgICAgICAgLy8gQWZ0ZXIgaGFuZGxlciBjb21wbGV0ZXMsIHRva2VucyBhbmQgZHVyYXRpb24gaGVhZGVycyBhcmUgYXZhaWxhYmxlXG4gICAgICAgIGNvbnN0IHRocmVhZCA9IGN0eC52YXIudGhyZWFkO1xuICAgICAgICBpZiAoIXRocmVhZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCBleGVjdXRpb24gY29udGV4dCBzZXQgYnkgdGhlIGhhbmRsZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ3R4ID0gY3R4LnZhci53b3JrYmVuY2hFeGVjdXRpb247XG4gICAgICAgIGlmICghZXhlY3V0aW9uQ3R4KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhZ2VudElkLCBpbnB1dCwgcmVzdWx0IH0gPSBleGVjdXRpb25DdHg7XG4gICAgICAgIGNvbnN0IGFnZW50TWVzc2FnZXNLZXkgPSBgbWVzc2FnZXNfJHthZ2VudElkfWA7XG4gICAgICAgIGNvbnN0IG1heE1lc3NhZ2VzID0gNTA7XG4gICAgICAgIC8vIFJlYWQgdG9rZW5zIGFuZCBkdXJhdGlvbiBmcm9tIHJlc3BvbnNlIGhlYWRlcnNcbiAgICAgICAgY29uc3QgdG9rZW5zID0gY3R4LnJlcy5oZWFkZXJzLmdldChUT0tFTlNfSEVBREVSKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gY3R4LnJlcy5oZWFkZXJzLmdldChEVVJBVElPTl9IRUFERVIpID8/XG4gICAgICAgICAgICBgJHsoKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCkgLyAxMDAwKS50b0ZpeGVkKDEpfXNgO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdHgudmFyLnNlc3Npb25JZDtcbiAgICAgICAgLy8gU3RvcmUgaW5wdXQgd2l0aCBtZXRhZGF0YVxuICAgICAgICBhd2FpdCB0aHJlYWQuc3RhdGUucHVzaChhZ2VudE1lc3NhZ2VzS2V5LCB7XG4gICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgZGF0YTogaW5wdXQsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIH0sIG1heE1lc3NhZ2VzKTtcbiAgICAgICAgLy8gU3RvcmUgb3V0cHV0IHdpdGggbWV0YWRhdGEgKHRva2VucywgZHVyYXRpb24pXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRocmVhZC5zdGF0ZS5wdXNoKGFnZW50TWVzc2FnZXNLZXksIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3V0cHV0JyxcbiAgICAgICAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICB9LCBtYXhNZXNzYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2F2ZSB0aHJlYWQgc3RhdGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRocmVhZFByb3ZpZGVyID0gZ2V0VGhyZWFkUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGF3YWl0IHRocmVhZFByb3ZpZGVyLnNhdmUodGhyZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBjdHgudmFyLmxvZ2dlcj8ud2FybignRmFpbGVkIHRvIHNhdmUgdGhyZWFkIHN0YXRlJyk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JrYmVuY2hFeGVjdXRpb25Sb3V0ZSA9ICgpID0+IHtcbiAgICBjb25zdCBhdXRoSGVhZGVyID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1dPUktCRU5DSF9BUElLRVlcbiAgICAgICAgPyBgQmVhcmVyICR7cHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1dPUktCRU5DSF9BUElLRVl9YFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXN5bmMgKGN0eCkgPT4ge1xuICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBjaGVja1xuICAgICAgICBpZiAoYXV0aEhlYWRlcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRoVmFsdWUgPSBjdHgucmVxLmhlYWRlcignQXV0aG9yaXphdGlvbicpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aFZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICF0aW1pbmdTYWZlRXF1YWwoQnVmZmVyLmZyb20oYXV0aFZhbHVlLCAndXRmLTgnKSwgQnVmZmVyLmZyb20oYXV0aEhlYWRlciwgJ3V0Zi04JykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHgudGV4dCgnVW5hdXRob3JpemVkJywgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gdGltaW5nIHNhZmUgZXF1YWxzIHdpbGwgdGhyb3cgaWYgdGhlIGlucHV0L291dHB1dCBsZW5ndGhzIGFyZSBtaXNtYXRjaGVkXG4gICAgICAgICAgICAgICAgLy8gc28gd2UgdHJlYXQgYWxsIGV4Y2VwdGlvbnMgYXMgaW52YWxpZFxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgudGV4dCgnVW5hdXRob3JpemVkJywgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDb250ZW50LXR5cGUgdmFsaWRhdGlvblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGN0eC5yZXEuaGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICAgICAgaWYgKCFjb250ZW50VHlwZSB8fCAhY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5qc29uKHsgZXJyb3I6ICdDb250ZW50LVR5cGUgbXVzdCBiZSBhcHBsaWNhdGlvbi9qc29uJyB9LCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYWdlbnRJZDtcbiAgICAgICAgICAgIGxldCBpbnB1dDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSBhd2FpdCBjdHgucmVxLmpzb24oKTtcbiAgICAgICAgICAgICAgICBhZ2VudElkID0gcmVxdWVzdERhdGEuYWdlbnRJZDtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHJlcXVlc3REYXRhLmlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9lcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnSW52YWxpZCBKU09OIGluIHJlcXVlc3QgYm9keScgfSwgeyBzdGF0dXM6IDQwMCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlYWQgbWV0YWRhdGEgdG8gZmluZCBhZ2VudCBuYW1lIGJ5IGFnZW50SWRcbiAgICAgICAgICAgIGNvbnN0IGFnZW50TWV0YSA9IGdldEFnZW50TWV0YWRhdGFCeUFnZW50SWQoYWdlbnRJZCk7XG4gICAgICAgICAgICBpZiAoIWFnZW50TWV0YSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzTWV0YWRhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oeyBlcnJvcjogJ01ldGFkYXRhIGZpbGUgbm90IGZvdW5kJyB9LCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ0FnZW50IG5vdCBmb3VuZCcsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgcnVudGltZSBhZ2VudCBieSBuYW1lXG4gICAgICAgICAgICBjb25zdCBhbGxBZ2VudHMgPSBnZXRBZ2VudHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50TmFtZSA9IGFnZW50TWV0YS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgYWdlbnRPYmogPSBhbGxBZ2VudHMuZ2V0KGFnZW50TmFtZSk7XG4gICAgICAgICAgICBpZiAoIWFnZW50T2JqIHx8ICFhZ2VudE5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ0FnZW50IG5vdCBmb3VuZCcsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUcmFjayBhZ2VudCBJRCBmb3IgdGVsZW1ldHJ5IChvdGVsTWlkZGxld2FyZSBzZXRzIHVwIGFnZW50SWRzKVxuICAgICAgICAgICAgY29uc3QgX2N0eCA9IHByaXZhdGVDb250ZXh0KGN0eCk7XG4gICAgICAgICAgICBpZiAoYWdlbnRPYmoubWV0YWRhdGE/LmlkKSB7XG4gICAgICAgICAgICAgICAgX2N0eC52YXIuYWdlbnRJZHMuYWRkKGFnZW50T2JqLm1ldGFkYXRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZ2VudE9iai5tZXRhZGF0YT8uYWdlbnRJZCkge1xuICAgICAgICAgICAgICAgIF9jdHgudmFyLmFnZW50SWRzLmFkZChhZ2VudE9iai5tZXRhZGF0YS5hZ2VudElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGFnZW50IGhhbmRsZXIgZGlyZWN0bHlcbiAgICAgICAgICAgIC8vIFRoZSBhZ2VudE1pZGRsZXdhcmUgaGFzIGFscmVhZHkgc2V0IHVwIHRoZSBBc3luY0xvY2FsU3RvcmFnZSBjb250ZXh0XG4gICAgICAgICAgICAvLyBzbyB0aGUgaGFuZGxlciBjYW4gYWNjZXNzIGl0IHZpYSBnZXRBZ2VudENvbnRleHQoKVxuICAgICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICAgIGlmIChhZ2VudE9iai5pbnB1dFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgYWdlbnRPYmouaGFuZGxlcihpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGFnZW50T2JqLmhhbmRsZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0b3JlIGV4ZWN1dGlvbiBjb250ZXh0IGZvciB0aGUgbWV0YWRhdGEgbWlkZGxld2FyZSB0byBzYXZlIHdpdGggdG9rZW5zL2R1cmF0aW9uXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgY3R4LnNldCgnd29ya2JlbmNoRXhlY3V0aW9uJywgeyBhZ2VudElkLCBpbnB1dCwgcmVzdWx0IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5qc29uKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0ID8/IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gICAgICAgICAgICAvLyBSZXR1cm4gMjAwIHdpdGggd3JhcHBlZCBlcnJvciBzbyBVSSBjYW4gZGlzcGxheSBpdCBwcm9wZXJseVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhY2s6IGVyci5zdGFjayxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ2NvZGUnIGluIGVyciAmJiB0eXBlb2YgZXJyLmNvZGUgPT09ICdzdHJpbmcnID8gZXJyLmNvZGUgOiAnRVhFQ1VUSU9OX0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JrYmVuY2hDbGVhclN0YXRlUm91dGUgPSAoKSA9PiB7XG4gICAgY29uc3QgYXV0aEhlYWRlciA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZXG4gICAgICAgID8gYEJlYXJlciAke3Byb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZfWBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFzeW5jIChjdHgpID0+IHtcbiAgICAgICAgLy8gQXV0aGVudGljYXRpb24gY2hlY2tcbiAgICAgICAgaWYgKGF1dGhIZWFkZXIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aFZhbHVlID0gY3R4LnJlcS5oZWFkZXIoJ0F1dGhvcml6YXRpb24nKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAhdGltaW5nU2FmZUVxdWFsKEJ1ZmZlci5mcm9tKGF1dGhWYWx1ZSwgJ3V0Zi04JyksIEJ1ZmZlci5mcm9tKGF1dGhIZWFkZXIsICd1dGYtOCcpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ1VuYXV0aG9yaXplZCcsIHsgc3RhdHVzOiA0MDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIHRpbWluZyBzYWZlIGVxdWFscyB3aWxsIHRocm93IGlmIHRoZSBpbnB1dC9vdXRwdXQgbGVuZ3RocyBhcmUgbWlzbWF0Y2hlZFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIHRyZWF0IGFsbCBleGNlcHRpb25zIGFzIGludmFsaWRcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ1VuYXV0aG9yaXplZCcsIHsgc3RhdHVzOiA0MDEgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWdlbnRJZCA9IGN0eC5yZXEucXVlcnkoJ2FnZW50SWQnKTtcbiAgICAgICAgaWYgKCFhZ2VudElkKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oeyBlcnJvcjogJ2FnZW50SWQgcXVlcnkgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJyB9LCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4LnZhci50aHJlYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnVGhyZWFkIG5vdCBhdmFpbGFibGUnIH0sIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2xlYXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BlY2lmaWMgYWdlbnQ6XG4gICAgICAgIC8vIDEuIG1lc3NhZ2VzXyR7YWdlbnRJZH0gLSB3b3JrYmVuY2ggbWVzc2FnZSBoaXN0b3J5XG4gICAgICAgIC8vIDIuIEFueSBrZXlzIHN0YXJ0aW5nIHdpdGggJHthZ2VudElkfV8gLSBhZ2VudC1zcGVjaWZpYyBzdGF0ZVxuICAgICAgICBjb25zdCBhbGxLZXlzID0gYXdhaXQgY3R4LnZhci50aHJlYWQuc3RhdGUua2V5cygpO1xuICAgICAgICBjb25zdCBhZ2VudFByZWZpeCA9IGAke2FnZW50SWR9X2A7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzS2V5ID0gYG1lc3NhZ2VzXyR7YWdlbnRJZH1gO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBhbGxLZXlzKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBtZXNzYWdlc0tleSB8fCBrZXkuc3RhcnRzV2l0aChhZ2VudFByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjdHgudmFyLnRocmVhZC5zdGF0ZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTYXZlIHRoZSB0aHJlYWQgdG8gcGVyc2lzdCB0aGUgY2xlYXJlZCBzdGF0ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGhyZWFkUHJvdmlkZXIgPSBnZXRUaHJlYWRQcm92aWRlcigpO1xuICAgICAgICAgICAgYXdhaXQgdGhyZWFkUHJvdmlkZXIuc2F2ZShjdHgudmFyLnRocmVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gc2F2ZSB0aHJlYWQgc3RhdGUnIH0sIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN0eC5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogYFN0YXRlIGNsZWFyZWQgZm9yIGFnZW50ICR7YWdlbnRJZH1gIH0pO1xuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVdvcmtiZW5jaFN0YXRlUm91dGUgPSAoKSA9PiB7XG4gICAgY29uc3QgYXV0aEhlYWRlciA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZXG4gICAgICAgID8gYEJlYXJlciAke3Byb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZfWBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFzeW5jIChjdHgpID0+IHtcbiAgICAgICAgLy8gQXV0aGVudGljYXRpb24gY2hlY2tcbiAgICAgICAgaWYgKGF1dGhIZWFkZXIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aFZhbHVlID0gY3R4LnJlcS5oZWFkZXIoJ0F1dGhvcml6YXRpb24nKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAhdGltaW5nU2FmZUVxdWFsKEJ1ZmZlci5mcm9tKGF1dGhWYWx1ZSwgJ3V0Zi04JyksIEJ1ZmZlci5mcm9tKGF1dGhIZWFkZXIsICd1dGYtOCcpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ1VuYXV0aG9yaXplZCcsIHsgc3RhdHVzOiA0MDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIHRpbWluZyBzYWZlIGVxdWFscyB3aWxsIHRocm93IGlmIHRoZSBpbnB1dC9vdXRwdXQgbGVuZ3RocyBhcmUgbWlzbWF0Y2hlZFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIHRyZWF0IGFsbCBleGNlcHRpb25zIGFzIGludmFsaWRcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ1VuYXV0aG9yaXplZCcsIHsgc3RhdHVzOiA0MDEgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWdlbnRJZCA9IGN0eC5yZXEucXVlcnkoJ2FnZW50SWQnKTtcbiAgICAgICAgaWYgKCFhZ2VudElkKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oeyBlcnJvcjogJ2FnZW50SWQgcXVlcnkgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJyB9LCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4LnZhci50aHJlYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnVGhyZWFkIG5vdCBhdmFpbGFibGUnIH0sIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWdlbnRNZXNzYWdlc0tleSA9IGBtZXNzYWdlc18ke2FnZW50SWR9YDtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBjdHgudmFyLnRocmVhZC5zdGF0ZS5nZXQoYWdlbnRNZXNzYWdlc0tleSk7XG4gICAgICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICAgICAgICB0aHJlYWRJZDogY3R4LnZhci50aHJlYWQuaWQsXG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgbWVzc2FnZXM6IEFycmF5LmlzQXJyYXkobWVzc2FnZXMpID8gbWVzc2FnZXMgOiBbXSxcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSB3b3JrYmVuY2ggcm91dGVyIHdpdGggcHJvcGVyIGFnZW50IG1pZGRsZXdhcmUgZm9yIGV4ZWN1dGlvbiByb3V0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVdvcmtiZW5jaFJvdXRlciA9ICgpID0+IHtcbiAgICAvLyBUcnkgdG8gZXh0cmFjdCBBUEkga2V5IGZyb20gaW5saW5lIHdvcmtiZW5jaCBjb25maWcgaWYgYXZhaWxhYmxlXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIEFHRU5UVUlUWV9XT1JLQkVOQ0hfQ09ORklHX0lOTElORSB3aWxsIGJlIHJlcGxhY2VkIGF0IGJ1aWxkIHRpbWVcbiAgICAgICAgaWYgKHR5cGVvZiBBR0VOVFVJVFlfV09SS0JFTkNIX0NPTkZJR19JTkxJTkUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gQUdFTlRVSVRZX1dPUktCRU5DSF9DT05GSUdfSU5MSU5FIHdpbGwgYmUgcmVwbGFjZWQgYXQgYnVpbGQgdGltZVxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZCA9IEFHRU5UVUlUWV9XT1JLQkVOQ0hfQ09ORklHX0lOTElORTtcbiAgICAgICAgICAgIC8vIERlY29kZSB0aGUgY29uZmlnIG1hbnVhbGx5IHRvIGF2b2lkIGFzeW5jIGltcG9ydFxuICAgICAgICAgICAgY29uc3QganNvbiA9IEJ1ZmZlci5mcm9tKGVuY29kZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IEFQSSBrZXkgZnJvbSBBdXRob3JpemF0aW9uIGhlYWRlciBpZiBwcmVzZW50XG4gICAgICAgICAgICBpZiAoY29uZmlnLmhlYWRlcnM/LlsnQXV0aG9yaXphdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGNvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ107XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaUtleSA9IGF1dGhIZWFkZXIuc2xpY2UoJ0JlYXJlciAnLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZID0gYXBpS2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBpZiBjb25maWcgaXMgbm90IGF2YWlsYWJsZSBvciBpbnZhbGlkXG4gICAgfVxuICAgIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcigpO1xuICAgIC8vIEFwcGx5IGFnZW50IG1pZGRsZXdhcmUgdG8gZW5zdXJlIHByb3BlciBjb250ZXh0IGlzIGF2YWlsYWJsZVxuICAgIHJvdXRlci51c2UoJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC8qJywgY3JlYXRlQWdlbnRNaWRkbGV3YXJlKCcnKSk7XG4gICAgLy8gQWRkIHdvcmtiZW5jaCByb3V0ZXNcbiAgICByb3V0ZXIuZ2V0KCcvX2FnZW50dWl0eS93b3JrYmVuY2gvd3MnLCB3ZWJzb2NrZXQoY3JlYXRlV29ya2JlbmNoV2Vic29ja2V0SGFuZGxlcigpKSk7XG4gICAgcm91dGVyLmdldCgnL19hZ2VudHVpdHkvd29ya2JlbmNoL21ldGFkYXRhLmpzb24nLCBjcmVhdGVXb3JrYmVuY2hNZXRhZGF0YVJvdXRlKCkpO1xuICAgIHJvdXRlci5nZXQoJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC9zYW1wbGUnLCBjcmVhdGVXb3JrYmVuY2hTYW1wbGVSb3V0ZSgpKTtcbiAgICByb3V0ZXIuZ2V0KCcvX2FnZW50dWl0eS93b3JrYmVuY2gvc3RhdGUnLCBjcmVhdGVXb3JrYmVuY2hTdGF0ZVJvdXRlKCkpO1xuICAgIHJvdXRlci5kZWxldGUoJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC9zdGF0ZScsIGNyZWF0ZVdvcmtiZW5jaENsZWFyU3RhdGVSb3V0ZSgpKTtcbiAgICByb3V0ZXIucG9zdCgnL19hZ2VudHVpdHkvd29ya2JlbmNoL2V4ZWN1dGUnLCBjcmVhdGVXb3JrYmVuY2hFeGVjdXRpb25NZXRhZGF0YU1pZGRsZXdhcmUoKSwgY3JlYXRlV29ya2JlbmNoRXhlY3V0aW9uUm91dGUoKSk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlV29ya2JlbmNoU2FtcGxlUm91dGUgPSAoKSA9PiB7XG4gICAgY29uc3QgYXV0aEhlYWRlciA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZXG4gICAgICAgID8gYEJlYXJlciAke3Byb2Nlc3MuZW52LkFHRU5UVUlUWV9XT1JLQkVOQ0hfQVBJS0VZfWBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFzeW5jIChjdHgpID0+IHtcbiAgICAgICAgLy8gQXV0aGVudGljYXRpb24gY2hlY2tcbiAgICAgICAgaWYgKGF1dGhIZWFkZXIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aFZhbHVlID0gY3R4LnJlcS5oZWFkZXIoJ0F1dGhvcml6YXRpb24nKTtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAhdGltaW5nU2FmZUVxdWFsKEJ1ZmZlci5mcm9tKGF1dGhWYWx1ZSwgJ3V0Zi04JyksIEJ1ZmZlci5mcm9tKGF1dGhIZWFkZXIsICd1dGYtOCcpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ1VuYXV0aG9yaXplZCcsIHsgc3RhdHVzOiA0MDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgudGV4dCgnVW5hdXRob3JpemVkJywgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWdlbnRJZCA9IGN0eC5yZXEucXVlcnkoJ2FnZW50SWQnKTtcbiAgICAgICAgICAgIGlmICghYWdlbnRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnTWlzc2luZyBhZ2VudElkIHF1ZXJ5IHBhcmFtZXRlcicgfSwgeyBzdGF0dXM6IDQwMCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlYWQgbWV0YWRhdGEgdG8gZmluZCBhZ2VudCBuYW1lIGJ5IGFnZW50SWRcbiAgICAgICAgICAgIGNvbnN0IGFnZW50TWV0YSA9IGdldEFnZW50TWV0YWRhdGFCeUFnZW50SWQoYWdlbnRJZCk7XG4gICAgICAgICAgICBpZiAoIWFnZW50TWV0YSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzTWV0YWRhdGEoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oeyBlcnJvcjogJ01ldGFkYXRhIGZpbGUgbm90IGZvdW5kJyB9LCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnRleHQoJ0FnZW50IG5vdCBmb3VuZCcsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgcnVudGltZSBhZ2VudCBieSBuYW1lXG4gICAgICAgICAgICBjb25zdCBhbGxBZ2VudHMgPSBnZXRBZ2VudHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50T2JqID0gYWxsQWdlbnRzLmdldChhZ2VudE1ldGEubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWFnZW50T2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC50ZXh0KCdBZ2VudCBub3QgZm91bmQnLCB7IHN0YXR1czogNDA0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYWdlbnQgaGFzIGlucHV0IHNjaGVtYVxuICAgICAgICAgICAgaWYgKCFhZ2VudE9iai5pbnB1dFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnQWdlbnQgaGFzIG5vIGlucHV0IHNjaGVtYScgfSwgeyBzdGF0dXM6IDQwMCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENvbnZlcnQgc2NoZW1hIHRvIEpTT04gU2NoZW1hXG4gICAgICAgICAgICBjb25zdCBqc29uU2NoZW1hID0gdG9KU09OU2NoZW1hKGFnZW50T2JqLmlucHV0U2NoZW1hKTtcbiAgICAgICAgICAgIC8vIEdldCBBZ2VudHVpdHkgU0RLIGtleSBhbmQgZ2F0ZXdheSBVUkxcbiAgICAgICAgICAgIGNvbnN0IHNka0tleSA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9TREtfS0VZO1xuICAgICAgICAgICAgY29uc3QgZ2F0ZXdheVVybCA9IHByb2Nlc3MuZW52LkFHRU5UVUlUWV9BSUdBVEVXQVlfVVJMIHx8XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1RSQU5TUE9SVF9VUkwgfHxcbiAgICAgICAgICAgICAgICAoc2RrS2V5ID8gJ2h0dHBzOi8vYWdlbnR1aXR5LmFpJyA6ICcnKTtcbiAgICAgICAgICAgIGlmICghc2RrS2V5IHx8ICFnYXRld2F5VXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5qc29uKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdBR0VOVFVJVFlfU0RLX0tFWSBhbmQgZ2F0ZXdheSBVUkwgbXVzdCBiZSBjb25maWd1cmVkJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1NldCBBR0VOVFVJVFlfU0RLX0tFWSBhbmQgZWl0aGVyIEFHRU5UVUlUWV9BSUdBVEVXQVlfVVJMLCBBR0VOVFVJVFlfVFJBTlNQT1JUX1VSTCwgb3IgdXNlIGh0dHBzOi8vYWdlbnR1aXR5LmFpJyxcbiAgICAgICAgICAgICAgICB9LCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgc2FtcGxlIHVzaW5nIEdyb3EgdmlhIEFnZW50dWl0eSBHYXRld2F5XG4gICAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgR2VuZXJhdGUgYSByZWFsaXN0aWMgc2FtcGxlIGRhdGEgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGlzIEpTT04gc2NoZW1hLiBSZXR1cm4gb25seSB2YWxpZCBKU09OLCBubyBtYXJrZG93biBjb2RlIGJsb2NrcyBvciBleHBsYW5hdGlvbnMuXG5cbkpTT04gU2NoZW1hOlxuJHtKU09OLnN0cmluZ2lmeShqc29uU2NoZW1hLCBudWxsLCAyKX1cblxuUmV0dXJuIGEgSlNPTiBvYmplY3QgdGhhdCBtYXRjaGVzIHRoaXMgc2NoZW1hIHdpdGggcmVhbGlzdGljIHZhbHVlcy5gO1xuICAgICAgICAgICAgY29uc3QgZ2F0ZXdheUVuZHBvaW50ID0gYCR7Z2F0ZXdheVVybH0vZ2F0ZXdheS9ncm9xL29wZW5haS92MS9jaGF0L2NvbXBsZXRpb25zYDtcbiAgICAgICAgICAgIGNvbnN0IGdyb3FSZXNwb25zZSA9IGF3YWl0IGZldGNoKGdhdGV3YXlFbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Nka0tleX1gLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogJ2xsYW1hLTMuMy03MGItdmVyc2F0aWxlJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogcHJvbXB0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFncm9xUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBncm9xUmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAnR3JvcSBBUEkgcmVxdWVzdCBmYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgU3RhdHVzICR7Z3JvcVJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3JUZXh0fWAsXG4gICAgICAgICAgICAgICAgfSwgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3FEYXRhID0gKGF3YWl0IGdyb3FSZXNwb25zZS5qc29uKCkpO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGdyb3FEYXRhLmNob2ljZXM/LlswXT8ubWVzc2FnZT8uY29udGVudDtcbiAgICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnSW52YWxpZCByZXNwb25zZSBmcm9tIEdyb3EgQVBJJywgcmVzcG9uc2U6IGdyb3FEYXRhIH0sIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgSlNPTiByZXNwb25zZVxuICAgICAgICAgICAgbGV0IHNhbXBsZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG1hcmtkb3duIGNvZGUgYmxvY2tzIGlmIHByZXNlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhbmVkVGV4dCA9IHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXmBgYGpzb25cXHMqfFxccypgYGAkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXmBgYFxccyp8XFxzKmBgYCQvZywgJycpO1xuICAgICAgICAgICAgICAgIHNhbXBsZSA9IEpTT04ucGFyc2UoY2xlYW5lZFRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ0ZhaWxlZCB0byBwYXJzZSBnZW5lcmF0ZWQgSlNPTicsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHBhcnNlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHBhcnNlRXJyb3IubWVzc2FnZSA6IFN0cmluZyhwYXJzZUVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkVGV4dDogdGV4dCxcbiAgICAgICAgICAgICAgICB9LCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5qc29uKHNhbXBsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgICAgICAgICAgIGVycm9yOiAnSW50ZXJuYWwgc2VydmVyIGVycm9yJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICB9LCB7IHN0YXR1czogNTAwIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlV29ya2JlbmNoTWV0YWRhdGFSb3V0ZSA9ICgpID0+IHtcbiAgICBjb25zdCBhdXRoSGVhZGVyID0gcHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1dPUktCRU5DSF9BUElLRVlcbiAgICAgICAgPyBgQmVhcmVyICR7cHJvY2Vzcy5lbnYuQUdFTlRVSVRZX1dPUktCRU5DSF9BUElLRVl9YFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXN5bmMgKGN0eCkgPT4ge1xuICAgICAgICBpZiAoYXV0aEhlYWRlcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRoVmFsdWUgPSBjdHgucmVxLmhlYWRlcignQXV0aG9yaXphdGlvbicpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aFZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICF0aW1pbmdTYWZlRXF1YWwoQnVmZmVyLmZyb20oYXV0aFZhbHVlLCAndXRmLTgnKSwgQnVmZmVyLmZyb20oYXV0aEhlYWRlciwgJ3V0Zi04JykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHgudGV4dCgnVW5hdXRob3JpemVkJywgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gdGltaW5nIHNhZmUgZXF1YWxzIHdpbGwgdGhyb3cgaWYgdGhlIGlucHV0L291dHB1dCBsZW5ndGhzIGFyZSBtaXNtYXRjaGVkXG4gICAgICAgICAgICAgICAgLy8gc28gd2UgdHJlYXQgYWxsIGV4Y2VwdGlvbnMgYXMgaW52YWxpZFxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgudGV4dCgnVW5hdXRob3JpemVkJywgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZWFkIG1ldGFkYXRhIGZyb20gYWdlbnR1aXR5Lm1ldGFkYXRhLmpzb24gZmlsZVxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGxvYWRCdWlsZE1ldGFkYXRhKCk7XG4gICAgICAgIGlmICghbWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBjdHguanNvbih7IGVycm9yOiAnTWV0YWRhdGEgZmlsZSBub3QgZm91bmQuIFJ1biBidWlsZCB0byBnZW5lcmF0ZSBtZXRhZGF0YS4nIH0sIHsgc3RhdHVzOiA1MDAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBhbGwgYWdlbnRzIGFyZSBpbXBvcnRlZCBzbyB0aGVpciBzY2hlbWFzIGFyZSBhdmFpbGFibGVcbiAgICAgICAgICAgIGF3YWl0IGVuc3VyZUFnZW50c0ltcG9ydGVkKCk7XG4gICAgICAgICAgICAvLyBHZXQgcnVudGltZSBhZ2VudHMgZm9yIEpTT04gc2NoZW1hIGdlbmVyYXRpb25cbiAgICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGdldEFnZW50cygpO1xuICAgICAgICAgICAgY29uc3QgYWdlbnRzQnlOYW1lID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgYWdlbnRdIG9mIGFnZW50cykge1xuICAgICAgICAgICAgICAgIGFnZW50c0J5TmFtZS5zZXQobmFtZSwgYWdlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG1ldGFkYXRhIHN0cnVjdHVyZSB0byB3b3JrYmVuY2ggZm9ybWF0XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFzID0geyBhZ2VudHM6IHt9IH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFnZW50IG9mIG1ldGFkYXRhLmFnZW50cyB8fCBbXSkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBmaW5kIHJ1bnRpbWUgYWdlbnQgYnkgbmFtZSB0byBnZXQgSlNPTiBzY2hlbWFzXG4gICAgICAgICAgICAgICAgY29uc3QgcnVudGltZUFnZW50ID0gYWdlbnRzQnlOYW1lLmdldChhZ2VudC5uYW1lKTtcbiAgICAgICAgICAgICAgICBzY2hlbWFzLmFnZW50c1thZ2VudC5pZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGFnZW50LnNjaGVtYT8uaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYWdlbnQuc2NoZW1hLmlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBydW50aW1lQWdlbnQ/LmlucHV0U2NoZW1hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRvSlNPTlNjaGVtYShydW50aW1lQWdlbnQuaW5wdXRTY2hlbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQ6IGFnZW50LnNjaGVtYT8ub3V0cHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGFnZW50LnNjaGVtYS5vdXRwdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IHJ1bnRpbWVBZ2VudD8ub3V0cHV0U2NoZW1hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRvSlNPTlNjaGVtYShydW50aW1lQWdlbnQub3V0cHV0U2NoZW1hKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFnZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnRJZDogYWdlbnQuYWdlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFnZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYWdlbnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogYWdlbnQuZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBhZ2VudC52ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oc2NoZW1hcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lmpzb24oe1xuICAgICAgICAgICAgICAgIGVycm9yOiAnRmFpbGVkIHRvIHJlYWQgbWV0YWRhdGEgZmlsZScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgfSwgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLy8gU3RvcmUgV2ViU29ja2V0IGNvbm5lY3Rpb25zIHRvIG5vdGlmeSB0aGVtIG9uIGFwcCByZXN0YXJ0XG5jb25zdCB3b3JrYmVuY2hXZWJTb2NrZXRzID0gbmV3IFNldCgpO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVdvcmtiZW5jaFdlYnNvY2tldEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChfYywgd3MpID0+IHtcbiAgICAgICAgd3Mub25PcGVuKCgpID0+IHtcbiAgICAgICAgICAgIHdvcmtiZW5jaFdlYlNvY2tldHMuYWRkKHdzKTtcbiAgICAgICAgICAgIHdzLnNlbmQoJ2FsaXZlJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB3cy5vbk1lc3NhZ2UoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIC8vIElmIGEgY2xpZW50IHNlbmRzIGEgbWVzc2FnZSAoQ0xJKSwgYnJvYWRjYXN0IHRvIGFsbCBvdGhlciBjbGllbnRzXG4gICAgICAgICAgICBpZiAobWVzc2FnZSA9PT0gJ3Jlc3RhcnRpbmcnIHx8IG1lc3NhZ2UgPT09ICdhbGl2ZScpIHtcbiAgICAgICAgICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIG1lc3NhZ2UgdG8gYWxsIG90aGVyIGNsaWVudHMgKGV4Y2x1ZGluZyB0aGlzIENMSSBjb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2xpZW50V3Mgb2Ygd29ya2JlbmNoV2ViU29ja2V0cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50V3MgIT09IHdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFdzLnNlbmQobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2JlbmNoV2ViU29ja2V0cy5kZWxldGUoY2xpZW50V3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgd3Mub25DbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICB3b3JrYmVuY2hXZWJTb2NrZXRzLmRlbGV0ZSh3cyk7XG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY3JlYXRlV29ya2JlbmNoV2Vic29ja2V0SGFuZGxlciBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JrYmVuY2hXZWJzb2NrZXRSb3V0ZSA9IGNyZWF0ZVdvcmtiZW5jaFdlYnNvY2tldEhhbmRsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13b3JrYmVuY2guanMubWFwIiwKICAgICIvKipcbiAqIEJ1biBTMyBtb25rZXktcGF0Y2ggZm9yIEFnZW50dWl0eSBzdG9yYWdlIGVuZHBvaW50c1xuICpcbiAqIEFnZW50dWl0eSBzdG9yYWdlIHVzZXMgdmlydHVhbC1ob3N0ZWQtc3R5bGUgVVJMcyAoZS5nLiwgYWcte2lkfS50My5zdG9yYWdlLmRldikuXG4gKiBCdW4ncyBkZWZhdWx0IHMzIGV4cG9ydCB1c2VzIHBhdGgtc3R5bGUgYWRkcmVzc2luZywgY2F1c2luZyBidWNrZXQgcGF0aCBtaXNtYXRjaC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBwYXRjaGVzIEJ1bi5TM0NsaWVudC5wcm90b3R5cGUgbWV0aG9kcyB0byBhdXRvbWF0aWNhbGx5IHNldFxuICogdmlydHVhbEhvc3RlZFN0eWxlOiB0cnVlIHdoZW4gUzNfRU5EUE9JTlQgbWF0Y2hlcyAqLnN0b3JhZ2UuZGV2XG4gKlxuICogUGF0Y2hlZCBtZXRob2RzOlxuICogLSBmaWxlKHBhdGgsIG9wdGlvbnM/KSAtIFMzT3B0aW9uc1xuICogLSBwcmVzaWduKHBhdGgsIG9wdGlvbnM/KSAtIFMzRmlsZVByZXNpZ25PcHRpb25zXG4gKiAtIHdyaXRlKHBhdGgsIGRhdGEsIG9wdGlvbnM/KSAtIFMzT3B0aW9uc1xuICogLSBkZWxldGUocGF0aCwgb3B0aW9ucz8pIC0gUzNPcHRpb25zXG4gKiAtIGV4aXN0cyhwYXRoLCBvcHRpb25zPykgLSBTM09wdGlvbnNcbiAqIC0gc3RhdChwYXRoLCBvcHRpb25zPykgLSBTM09wdGlvbnNcbiAqIC0gc2l6ZShwYXRoLCBvcHRpb25zPykgLSBTM09wdGlvbnNcbiAqIC0gdW5saW5rKHBhdGgsIG9wdGlvbnM/KSAtIFMzT3B0aW9uc1xuICogLSBsaXN0KGlucHV0Pywgb3B0aW9ucz8pIC0gb3B0aW9ucyB0eXBlIGRvZXNuJ3QgaW5jbHVkZSB2aXJ0dWFsSG9zdGVkU3R5bGUgYnV0IHdlIGluamVjdCBpdCBhbnl3YXlcbiAqL1xuY29uc3QgUEFUQ0hFRF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdhZ2VudHVpdHkuczMucGF0Y2hlZCcpO1xuLyoqXG4gKiBDaGVjayBpZiBhbiBlbmRwb2ludCBpcyBhbiBBZ2VudHVpdHkgc3RvcmFnZSBlbmRwb2ludCAoKi5zdG9yYWdlLmRldilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWdlbnR1aXR5U3RvcmFnZUVuZHBvaW50KHJhdykge1xuICAgIGxldCBob3N0ID0gcmF3LnRyaW0oKTtcbiAgICBpZiAoIWhvc3QpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGhvc3QuaW5jbHVkZXMoJzovLycpID8gaG9zdCA6IGBodHRwczovLyR7aG9zdH1gKTtcbiAgICAgICAgaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICAvLyByYXcgdmFsdWUgd2Fzbid0IGEgVVJMIHN0cmluZzsgdHJlYXQgaXQgYXMgaG9zdCBhbHJlYWR5XG4gICAgfVxuICAgIHJldHVybiBob3N0ID09PSAnc3RvcmFnZS5kZXYnIHx8IGhvc3QuZW5kc1dpdGgoJy5zdG9yYWdlLmRldicpO1xufVxuLyoqXG4gKiBIZWxwZXIgdG8gaW5qZWN0IHZpcnR1YWxIb3N0ZWRTdHlsZSBpbnRvIG9wdGlvbnMgaWYgbm90IGFscmVhZHkgc2V0XG4gKi9cbmZ1bmN0aW9uIGluamVjdFZpcnR1YWxIb3N0ZWRTdHlsZShvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zLnZpcnR1YWxIb3N0ZWRTdHlsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4ub3B0aW9ucywgdmlydHVhbEhvc3RlZFN0eWxlOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xufVxuLyoqXG4gKiBQYXRjaCBCdW4ncyBTM0NsaWVudCB0byBhdXRvbWF0aWNhbGx5IHVzZSB2aXJ0dWFsSG9zdGVkU3R5bGUgZm9yIHN0b3JhZ2UuZGV2IGVuZHBvaW50c1xuICpcbiAqIFRoaXMgZnVuY3Rpb246XG4gKiAxLiBDaGVja3MgaWYgd2UncmUgcnVubmluZyBpbiBCdW4gd2l0aCBTMyBzdXBwb3J0XG4gKiAyLiBDaGVja3MgaWYgUzNfRU5EUE9JTlQgKG9yIEFXU19FTkRQT0lOVCkgcG9pbnRzIHRvICouc3RvcmFnZS5kZXZcbiAqIDMuIFBhdGNoZXMgUzNDbGllbnQucHJvdG90eXBlIG1ldGhvZHMgdG8gaW5qZWN0IHZpcnR1YWxIb3N0ZWRTdHlsZTogdHJ1ZVxuICpcbiAqIFNhZmUgdG8gY2FsbCBpbiBub24tQnVuIGVudmlyb25tZW50cyAod2lsbCBuby1vcCkuXG4gKiBJZGVtcG90ZW50IChzYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hCdW5TM0ZvclN0b3JhZ2VEZXYoKSB7XG4gICAgY29uc3QgYnVuID0gZ2xvYmFsVGhpcy5CdW47XG4gICAgaWYgKCFidW4/LnMzIHx8ICFidW4uUzNDbGllbnQ/LnByb3RvdHlwZT8uZmlsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVuZHBvaW50RW52ID0gcHJvY2Vzcy5lbnYuUzNfRU5EUE9JTlQgPz8gcHJvY2Vzcy5lbnYuQVdTX0VORFBPSU5UO1xuICAgIGlmICghZW5kcG9pbnRFbnYpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzQWdlbnR1aXR5U3RvcmFnZUVuZHBvaW50KGVuZHBvaW50RW52KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFMzQ2xpZW50UHJvdG8gPSBidW4uUzNDbGllbnQucHJvdG90eXBlO1xuICAgIGlmIChTM0NsaWVudFByb3RvW1BBVENIRURfU1lNQk9MXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFBhdGNoIGZpbGUocGF0aCwgb3B0aW9ucz8pXG4gICAgY29uc3Qgb3JpZ2luYWxGaWxlID0gUzNDbGllbnRQcm90by5maWxlO1xuICAgIFMzQ2xpZW50UHJvdG8uZmlsZSA9IGZ1bmN0aW9uIHBhdGNoZWRGaWxlKHBhdGgsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsRmlsZS5jYWxsKHRoaXMsIHBhdGgsIGluamVjdFZpcnR1YWxIb3N0ZWRTdHlsZShvcHRpb25zKSk7XG4gICAgfTtcbiAgICAvLyBQYXRjaCBwcmVzaWduKHBhdGgsIG9wdGlvbnM/KVxuICAgIGlmIChTM0NsaWVudFByb3RvLnByZXNpZ24pIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxQcmVzaWduID0gUzNDbGllbnRQcm90by5wcmVzaWduO1xuICAgICAgICBTM0NsaWVudFByb3RvLnByZXNpZ24gPSBmdW5jdGlvbiBwYXRjaGVkUHJlc2lnbihwYXRoLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxQcmVzaWduLmNhbGwodGhpcywgcGF0aCwgaW5qZWN0VmlydHVhbEhvc3RlZFN0eWxlKG9wdGlvbnMpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUGF0Y2ggd3JpdGUocGF0aCwgZGF0YSwgb3B0aW9ucz8pXG4gICAgaWYgKFMzQ2xpZW50UHJvdG8ud3JpdGUpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxXcml0ZSA9IFMzQ2xpZW50UHJvdG8ud3JpdGU7XG4gICAgICAgIFMzQ2xpZW50UHJvdG8ud3JpdGUgPSBmdW5jdGlvbiBwYXRjaGVkV3JpdGUocGF0aCwgZGF0YSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsV3JpdGUuY2FsbCh0aGlzLCBwYXRoLCBkYXRhLCBpbmplY3RWaXJ0dWFsSG9zdGVkU3R5bGUob3B0aW9ucykpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBQYXRjaCBkZWxldGUocGF0aCwgb3B0aW9ucz8pXG4gICAgaWYgKFMzQ2xpZW50UHJvdG8uZGVsZXRlKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRGVsZXRlID0gUzNDbGllbnRQcm90by5kZWxldGU7XG4gICAgICAgIFMzQ2xpZW50UHJvdG8uZGVsZXRlID0gZnVuY3Rpb24gcGF0Y2hlZERlbGV0ZShwYXRoLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEZWxldGUuY2FsbCh0aGlzLCBwYXRoLCBpbmplY3RWaXJ0dWFsSG9zdGVkU3R5bGUob3B0aW9ucykpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBQYXRjaCBleGlzdHMocGF0aCwgb3B0aW9ucz8pXG4gICAgaWYgKFMzQ2xpZW50UHJvdG8uZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRXhpc3RzID0gUzNDbGllbnRQcm90by5leGlzdHM7XG4gICAgICAgIFMzQ2xpZW50UHJvdG8uZXhpc3RzID0gZnVuY3Rpb24gcGF0Y2hlZEV4aXN0cyhwYXRoLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxFeGlzdHMuY2FsbCh0aGlzLCBwYXRoLCBpbmplY3RWaXJ0dWFsSG9zdGVkU3R5bGUob3B0aW9ucykpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBQYXRjaCBzdGF0KHBhdGgsIG9wdGlvbnM/KVxuICAgIGlmIChTM0NsaWVudFByb3RvLnN0YXQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTdGF0ID0gUzNDbGllbnRQcm90by5zdGF0O1xuICAgICAgICBTM0NsaWVudFByb3RvLnN0YXQgPSBmdW5jdGlvbiBwYXRjaGVkU3RhdChwYXRoLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxTdGF0LmNhbGwodGhpcywgcGF0aCwgaW5qZWN0VmlydHVhbEhvc3RlZFN0eWxlKG9wdGlvbnMpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gUGF0Y2ggc2l6ZShwYXRoLCBvcHRpb25zPylcbiAgICBpZiAoUzNDbGllbnRQcm90by5zaXplKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IFMzQ2xpZW50UHJvdG8uc2l6ZTtcbiAgICAgICAgUzNDbGllbnRQcm90by5zaXplID0gZnVuY3Rpb24gcGF0Y2hlZFNpemUocGF0aCwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsU2l6ZS5jYWxsKHRoaXMsIHBhdGgsIGluamVjdFZpcnR1YWxIb3N0ZWRTdHlsZShvcHRpb25zKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFBhdGNoIHVubGluayhwYXRoLCBvcHRpb25zPylcbiAgICBpZiAoUzNDbGllbnRQcm90by51bmxpbmspIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVbmxpbmsgPSBTM0NsaWVudFByb3RvLnVubGluaztcbiAgICAgICAgUzNDbGllbnRQcm90by51bmxpbmsgPSBmdW5jdGlvbiBwYXRjaGVkVW5saW5rKHBhdGgsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFVubGluay5jYWxsKHRoaXMsIHBhdGgsIGluamVjdFZpcnR1YWxIb3N0ZWRTdHlsZShvcHRpb25zKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFBhdGNoIGxpc3QoaW5wdXQ/LCBvcHRpb25zPylcbiAgICAvLyBOb3RlOiBUaGUgVHlwZVNjcmlwdCB0eXBlIGZvciBsaXN0J3Mgb3B0aW9ucyBkb2Vzbid0IGluY2x1ZGUgdmlydHVhbEhvc3RlZFN0eWxlLFxuICAgIC8vIGJ1dCB3ZSBpbmplY3QgaXQgYW55d2F5IGFzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIG1heSBzdGlsbCB1c2UgaXRcbiAgICBpZiAoUzNDbGllbnRQcm90by5saXN0KSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTGlzdCA9IFMzQ2xpZW50UHJvdG8ubGlzdDtcbiAgICAgICAgUzNDbGllbnRQcm90by5saXN0ID0gZnVuY3Rpb24gcGF0Y2hlZExpc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbExpc3QuY2FsbCh0aGlzLCBpbnB1dCwgaW5qZWN0VmlydHVhbEhvc3RlZFN0eWxlKG9wdGlvbnMpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgUzNDbGllbnRQcm90b1tQQVRDSEVEX1NZTUJPTF0gPSB0cnVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuLXMzLXBhdGNoLmpzLm1hcCIsCiAgICAiLy8gYWdlbnQudHMgZXhwb3J0c1xuZXhwb3J0IHsgZ2V0R2xvYmFsUnVudGltZVN0YXRlLCBnZXRBZ2VudFJ1bnRpbWUsIHJlZ2lzdGVyQWdlbnQsIHNldEFnZW50Q29uZmlnLCBnZXRBZ2VudENvbmZpZywgY3JlYXRlQWdlbnQsIHBvcHVsYXRlQWdlbnRzUmVnaXN0cnksIGNyZWF0ZUFnZW50TWlkZGxld2FyZSwgZ2V0QWdlbnRzLCBydW5BZ2VudFNldHVwcywgcnVuQWdlbnRTaHV0ZG93bnMsIHJ1bkluQWdlbnRDb250ZXh0LCB9IGZyb20gJy4vYWdlbnQnO1xuLy8gYXBwLnRzIGV4cG9ydHMgKGFsbCBhcHAtcmVsYXRlZCBmdW5jdGlvbmFsaXR5KVxuZXhwb3J0IHsgY3JlYXRlQXBwLCBnZXRBcHAsIGdldEFwcFN0YXRlLCBnZXRBcHBDb25maWcsIHJ1blNodXRkb3duLCBmaXJlRXZlbnQsIH0gZnJvbSAnLi9hcHAnO1xuLy8gY29ycy50cyBleHBvcnRzICh0cnVzdGVkIG9yaWdpbiBoZWxwZXJzKVxuZXhwb3J0IHsgY3JlYXRlVHJ1c3RlZENvcnNPcmlnaW4gfSBmcm9tICcuL2NvcnMnO1xuZXhwb3J0IHsgYWRkRXZlbnRMaXN0ZW5lciwgcmVtb3ZlRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4vX2V2ZW50cyc7XG4vLyBtaWRkbGV3YXJlLnRzIGV4cG9ydHMgKFZpdGUtbmF0aXZlKVxuZXhwb3J0IHsgY3JlYXRlQmFzZU1pZGRsZXdhcmUsIGNyZWF0ZUNvcnNNaWRkbGV3YXJlLCBjcmVhdGVPdGVsTWlkZGxld2FyZSwgY3JlYXRlQ29tcHJlc3Npb25NaWRkbGV3YXJlLCBjcmVhdGVXZWJTZXNzaW9uTWlkZGxld2FyZSwgZ2V0U2Vzc2lvblNlY3JldCwgfSBmcm9tICcuL21pZGRsZXdhcmUnO1xuLy8gSW50ZXJuYWwgZXhwb3J0cyBuZWVkZWQgYnkgZ2VuZXJhdGVkIGVudHJ5IGZpbGVzXG5leHBvcnQgeyByZWdpc3RlciB9IGZyb20gJy4vb3RlbC9jb25maWcnO1xuZXhwb3J0IHsgY3JlYXRlU2VydmljZXMgfSBmcm9tICcuL19zZXJ2aWNlcyc7XG5leHBvcnQgeyBlbmFibGVQcm9jZXNzRXhpdFByb3RlY3Rpb24gfSBmcm9tICcuL19wcm9jZXNzLXByb3RlY3Rpb24nO1xuLy8gUmUtZXhwb3J0IGJlYWNvbiBzY3JpcHQgZm9yIGdlbmVyYXRlZCB3ZWJhbmFseXRpY3MudHNcbmV4cG9ydCB7IEJFQUNPTl9TQ1JJUFQsIHZhbGlkYXRlQmVhY29uU2NyaXB0IH0gZnJvbSAnQGFnZW50dWl0eS9mcm9udGVuZCc7XG4vLyBJbnRlcm5hbCBleHBvcnRzIChub3QgaW4gbWFpbiBpbmRleCwgaW1wb3J0ZWQgYnkgQ0xJIG9ubHkpXG5leHBvcnQgeyBpbnRlcm5hbEV4aXQgfSBmcm9tICcuL19wcm9jZXNzLXByb3RlY3Rpb24nO1xuLy8gZGV2bW9kZS50cyBleHBvcnRzXG5leHBvcnQgeyByZWdpc3RlckRldk1vZGVSb3V0ZXMgfSBmcm9tICcuL2Rldm1vZGUnO1xuLy8gcm91dGVyLnRzIGV4cG9ydHNcbmV4cG9ydCB7IGNyZWF0ZVJvdXRlciB9IGZyb20gJy4vcm91dGVyJztcbi8vIHByb3RvY29sIGhhbmRsZXIgZXhwb3J0cyAod2Vic29ja2V0LCBzc2UsIHN0cmVhbSwgY3JvbilcbmV4cG9ydCB7IHdlYnNvY2tldCwgc3NlLCBzdHJlYW0sIGNyb24sIH0gZnJvbSAnLi9oYW5kbGVycyc7XG4vLyBldmFsLnRzIGV4cG9ydHNcbmV4cG9ydCB7IEV2YWxIYW5kbGVyUmVzdWx0U2NoZW1hLCB9IGZyb20gJy4vZXZhbCc7XG4vLyBzZXNzaW9uLnRzIGV4cG9ydHNcbmV4cG9ydCB7IGdlbmVyYXRlSWQsIERlZmF1bHRUaHJlYWRJRFByb3ZpZGVyLCBEZWZhdWx0VGhyZWFkLCBMYXp5VGhyZWFkU3RhdGUsIH0gZnJvbSAnLi9zZXNzaW9uJztcbi8vIHNlcnZpY2VzL3RocmVhZC9sb2NhbCBleHBvcnRzXG5leHBvcnQgeyBMb2NhbFRocmVhZFByb3ZpZGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy90aHJlYWQvbG9jYWwnO1xuLy8gd29ya2JlbmNoLnRzIGV4cG9ydHNcbmV4cG9ydCB7IGNyZWF0ZVdvcmtiZW5jaEV4ZWN1dGlvblJvdXRlLCBjcmVhdGVXb3JrYmVuY2hSb3V0ZXIsIGNyZWF0ZVdvcmtiZW5jaE1ldGFkYXRhUm91dGUsIGNyZWF0ZVdvcmtiZW5jaFdlYnNvY2tldFJvdXRlLCB9IGZyb20gJy4vd29ya2JlbmNoJztcbi8vIHdlYi50cyBleHBvcnRzXG5leHBvcnQgeyBjcmVhdGVXZWJSb3V0ZXIgfSBmcm9tICcuL3dlYic7XG4vLyB2YWxpZGF0b3IudHMgZXhwb3J0c1xuZXhwb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuLy8gX3NlcnZlci50cyBleHBvcnRzXG5leHBvcnQgeyBnZXRSb3V0ZXIsIHNldEdsb2JhbFJvdXRlciwgY3JlYXRlTG9nZ2VyLCBnZXRMb2dnZXIsIHNldEdsb2JhbExvZ2dlciwgZ2V0VHJhY2VyLCBzZXRHbG9iYWxUcmFjZXIsIGFkZFNwYW5Qcm9jZXNzb3IsIGdldFNwYW5Qcm9jZXNzb3JzLCBwcml2YXRlQ29udGV4dCwgbm90aWZ5UmVhZHksIGdldFNlcnZlciwgQUdFTlRfQ09OVEVYVF9QUk9QRVJUSUVTLCB9IGZyb20gJy4vX3NlcnZlcic7XG4vLyBfd2FpdHVudGlsLnRzIGV4cG9ydHNcbmV4cG9ydCB7IGhhc1dhaXRVbnRpbFBlbmRpbmcgfSBmcm9tICcuL193YWl0dW50aWwnO1xuLy8gX2NvbnRleHQudHMgZXhwb3J0cyAoZm9yIGF1dGggaW50ZWdyYXRpb24pXG5leHBvcnQgeyBpbkFnZW50Q29udGV4dCwgaW5IVFRQQ29udGV4dCwgZ2V0QWdlbnRDb250ZXh0LCBnZXRIVFRQQ29udGV4dCB9IGZyb20gJy4vX2NvbnRleHQnO1xuLy8gX3N0YW5kYWxvbmUudHMgZXhwb3J0c1xuZXhwb3J0IHsgY3JlYXRlQWdlbnRDb250ZXh0LCBTdGFuZGFsb25lQWdlbnRDb250ZXh0LCB9IGZyb20gJy4vX3N0YW5kYWxvbmUnO1xuLy8gc2VydmljZXMvZXZhbHJ1biBleHBvcnRzXG5leHBvcnQgeyBIVFRQRXZhbFJ1bkV2ZW50UHJvdmlkZXIsIExvY2FsRXZhbFJ1bkV2ZW50UHJvdmlkZXIsIEpTT05FdmFsUnVuRXZlbnRQcm92aWRlciwgQ29tcG9zaXRlRXZhbFJ1bkV2ZW50UHJvdmlkZXIsIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldmFscnVuJztcbi8vIGZvciBsb2FkaW5nIG1ldGFkYXRhXG5leHBvcnQgeyBsb2FkQnVpbGRNZXRhZGF0YSB9IGZyb20gJy4vX21ldGFkYXRhJztcbi8vIGNvbmZpZyBleHBvcnRzIChmb3IgYW5hbHl0aWNzIGFuZCBvdGhlciBydW50aW1lIGNvbmZpZyBhY2Nlc3MpXG5leHBvcnQgeyBnZXRPcmdhbml6YXRpb25JZCwgZ2V0UHJvamVjdElkLCBnZXREZXBsb3ltZW50SWQsIGlzRGV2TW9kZSwgaXNQcm9kdWN0aW9uLCB9IGZyb20gJy4vX2NvbmZpZyc7XG4vLyBfc2VydmljZXMudHMgZXhwb3J0c1xuZXhwb3J0IHsgZ2V0RXZhbFJ1bkV2ZW50UHJvdmlkZXIsIGdldFRocmVhZFByb3ZpZGVyLCBnZXRTZXNzaW9uUHJvdmlkZXIgfSBmcm9tICcuL19zZXJ2aWNlcyc7XG4vLyBSZS1leHBvcnQgYm9vdHN0cmFwUnVudGltZUVudiBmcm9tIEBhZ2VudHVpdHkvc2VydmVyIGZvciBjb252ZW5pZW5jZVxuLy8gVGhpcyBhbGxvd3MgZ2VuZXJhdGVkIGNvZGUgdG8gaW1wb3J0IGZyb20gQGFnZW50dWl0eS9ydW50aW1lIGluc3RlYWQgb2YgaGF2aW5nXG4vLyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIEBhZ2VudHVpdHkvc2VydmVyXG5leHBvcnQgeyBib290c3RyYXBSdW50aW1lRW52IH0gZnJvbSAnQGFnZW50dWl0eS9zZXJ2ZXInO1xuLy8gYnVuLXMzLXBhdGNoLnRzIGV4cG9ydHNcbmV4cG9ydCB7IHBhdGNoQnVuUzNGb3JTdG9yYWdlRGV2LCBpc0FnZW50dWl0eVN0b3JhZ2VFbmRwb2ludCB9IGZyb20gJy4vYnVuLXMzLXBhdGNoJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQXBwIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcblxuY29uc3QgYXBwID0gYXdhaXQgY3JlYXRlQXBwKCk7XG5cbmNvbnNvbGUubG9nKGBbTmV4dEpTLUFwcF0gQWdlbnR1aXR5IHNlcnZlciBzdGFydGVkOiAke2FwcC5zZXJ2ZXIudXJsfWApO1xuXG5leHBvcnQgZGVmYXVsdCBhcHA7XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUFnZW50IH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbmltcG9ydCB7IHMgfSBmcm9tICdAYWdlbnR1aXR5L3NjaGVtYSc7XG5cbmNvbnN0IGVjaG9BZ2VudCA9IGNyZWF0ZUFnZW50KCdlY2hvJywge1xuXHRkZXNjcmlwdGlvbjogJ0VjaG9lcyBiYWNrIHRoZSBpbnB1dCBtZXNzYWdlIHdpdGggYSB0aW1lc3RhbXAnLFxuXHRzY2hlbWE6IHtcblx0XHRpbnB1dDogcy5vYmplY3Qoe1xuXHRcdFx0bWVzc2FnZTogcy5zdHJpbmcoKSxcblx0XHR9KSxcblx0XHRvdXRwdXQ6IHMub2JqZWN0KHtcblx0XHRcdGVjaG86IHMuc3RyaW5nKCksXG5cdFx0XHR0aW1lc3RhbXA6IHMuc3RyaW5nKCksXG5cdFx0fSksXG5cdH0sXG5cdGhhbmRsZXI6IGFzeW5jIChjdHgsIGlucHV0KSA9PiB7XG5cdFx0Y3R4LmxvZ2dlci5pbmZvKCdFY2hvIGFnZW50IHJlY2VpdmVkIG1lc3NhZ2UnLCB7IG1lc3NhZ2U6IGlucHV0Lm1lc3NhZ2UgfSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZWNobzogaW5wdXQubWVzc2FnZSxcblx0XHRcdHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdH07XG5cdH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZWNob0FnZW50O1xuIiwKICAgICIvLyBAZ2VuZXJhdGVkXG4vLyBBdXRvLWdlbmVyYXRlZCBieSBBZ2VudHVpdHkgLSBETyBOT1QgRURJVFxuaW1wb3J0IGVjaG8gZnJvbSAnLi4vYWdlbnQvZWNoby9hZ2VudC5qcyc7XG5pbXBvcnQgdHlwZSB7IEFnZW50UnVubmVyIH0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbmltcG9ydCB0eXBlIHsgSW5mZXJJbnB1dCwgSW5mZXJPdXRwdXQgfSBmcm9tICdAYWdlbnR1aXR5L2NvcmUnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY2hlbWEgVHlwZSBFeHBvcnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSW5wdXQgdHlwZSBmb3IgZWNobyBhZ2VudFxuICogRWNob2VzIGJhY2sgdGhlIGlucHV0IG1lc3NhZ2Ugd2l0aCBhIHRpbWVzdGFtcFxuICovXG5leHBvcnQgdHlwZSBFY2hvSW5wdXQgPSBJbmZlcklucHV0PHR5cGVvZiBlY2hvWydpbnB1dFNjaGVtYSddPjtcblxuLyoqXG4gKiBPdXRwdXQgdHlwZSBmb3IgZWNobyBhZ2VudFxuICogRWNob2VzIGJhY2sgdGhlIGlucHV0IG1lc3NhZ2Ugd2l0aCBhIHRpbWVzdGFtcFxuICovXG5leHBvcnQgdHlwZSBFY2hvT3V0cHV0ID0gSW5mZXJPdXRwdXQ8dHlwZW9mIGVjaG9bJ291dHB1dFNjaGVtYSddPjtcblxuLyoqXG4gKiBJbnB1dCBzY2hlbWEgdHlwZSBmb3IgZWNobyBhZ2VudFxuICogRWNob2VzIGJhY2sgdGhlIGlucHV0IG1lc3NhZ2Ugd2l0aCBhIHRpbWVzdGFtcFxuICovXG5leHBvcnQgdHlwZSBFY2hvSW5wdXRTY2hlbWEgPSB0eXBlb2YgZWNob1snaW5wdXRTY2hlbWEnXTtcblxuLyoqXG4gKiBPdXRwdXQgc2NoZW1hIHR5cGUgZm9yIGVjaG8gYWdlbnRcbiAqIEVjaG9lcyBiYWNrIHRoZSBpbnB1dCBtZXNzYWdlIHdpdGggYSB0aW1lc3RhbXBcbiAqL1xuZXhwb3J0IHR5cGUgRWNob091dHB1dFNjaGVtYSA9IHR5cGVvZiBlY2hvWydvdXRwdXRTY2hlbWEnXTtcblxuLyoqXG4gKiBBZ2VudCB0eXBlIGZvciBlY2hvXG4gKiBFY2hvZXMgYmFjayB0aGUgaW5wdXQgbWVzc2FnZSB3aXRoIGEgdGltZXN0YW1wXG4gKi9cbmV4cG9ydCB0eXBlIEVjaG9BZ2VudCA9IEFnZW50UnVubmVyPFxuXHRFY2hvSW5wdXRTY2hlbWEsXG5cdEVjaG9PdXRwdXRTY2hlbWEsXG5cdHR5cGVvZiBlY2hvWydzdHJlYW0nXSBleHRlbmRzIHRydWUgPyB0cnVlIDogZmFsc2Vcbj47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFnZW50IERlZmluaXRpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQWdlbnQgRGVmaW5pdGlvbnNcbiAqIFxuICogUmVnaXN0cnkgb2YgYWxsIGFnZW50cyBpbiB0aGlzIGFwcGxpY2F0aW9uLlxuICogUHJvdmlkZXMgc3Ryb25nbHktdHlwZWQgYWNjZXNzIHRvIGFnZW50IG1ldGFkYXRhIGFuZCBydW5uZXIgZnVuY3Rpb25zLlxuICogXG4gKiBAcmVtYXJrc1xuICogVGhpcyBvYmplY3QgaXMgYXV0by1nZW5lcmF0ZWQgZnJvbSB5b3VyIGFnZW50IGZpbGVzIGR1cmluZyBidWlsZC5cbiAqIEVhY2ggYWdlbnQgaGFzIGNvcnJlc3BvbmRpbmcgSW5wdXQsIE91dHB1dCwgYW5kIFJ1bm5lciB0eXBlcyBleHBvcnRlZCBhYm92ZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFnZW50RGVmaW5pdGlvbnMsIFNlc3Npb25CYXNpY0lucHV0IH0gZnJvbSAnLi9nZW5lcmF0ZWQvcmVnaXN0cnknO1xuICogXG4gKiAvLyBBY2Nlc3MgYWdlbnQgZGVmaW5pdGlvblxuICogY29uc3QgYWdlbnQgPSBBZ2VudERlZmluaXRpb25zLnNlc3Npb25CYXNpYztcbiAqIFxuICogLy8gVXNlIHR5cGVkIHNjaGVtYSB0eXBlc1xuICogY29uc3QgaW5wdXQ6IFNlc3Npb25CYXNpY0lucHV0ID0geyAuLi4gfTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LnJ1bihpbnB1dCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IEFnZW50RGVmaW5pdGlvbnMgPSB7XG5cdC8qKlxuXHQgKiBlY2hvXG5cdCAqIEVjaG9lcyBiYWNrIHRoZSBpbnB1dCBtZXNzYWdlIHdpdGggYSB0aW1lc3RhbXBcblx0ICogQHR5cGUge0VjaG9BZ2VudH1cblx0ICovXG5cdGVjaG8sXG59IGFzIGNvbnN0O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNb2R1bGUgQXVnbWVudGF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIEF1Z21lbnQgQGFnZW50dWl0eS9ydW50aW1lIHR5cGVzIHdpdGggc3Ryb25nbHktdHlwZWQgYWdlbnRzIGZyb20gdGhpcyBwcm9qZWN0XG5kZWNsYXJlIG1vZHVsZSBcIkBhZ2VudHVpdHkvcnVudGltZVwiIHtcblx0Ly8gQXVnbWVudCB0aGUgQWdlbnRSZWdpc3RyeSBpbnRlcmZhY2Ugd2l0aCBwcm9qZWN0LXNwZWNpZmljIHN0cm9uZ2x5LXR5cGVkIGFnZW50c1xuXHRleHBvcnQgaW50ZXJmYWNlIEFnZW50UmVnaXN0cnkge1xuXHRcdGVjaG86IEVjaG9BZ2VudDtcblx0fVxufVxuXG4vLyBGT1VORCBBTiBFUlJPUiBJTiBUSElTIEZJTEU/XG4vLyBQbGVhc2UgZmlsZSBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vYWdlbnR1aXR5L3Nkay9pc3N1ZXNcbi8vIG9yIGlmIHlvdSBrbm93IHRoZSBmaXggcGxlYXNlIHN1Ym1pdCBhIFBSIVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVSb3V0ZXIgfSBmcm9tICdAYWdlbnR1aXR5L3J1bnRpbWUnO1xuaW1wb3J0IGVjaG9BZ2VudCBmcm9tICdAYWdlbnRzL2VjaG8vYWdlbnQnO1xuXG5jb25zdCByb3V0ZXIgPSBjcmVhdGVSb3V0ZXIoKTtcblxucm91dGVyLmdldCgnL2hlYWx0aCcsIChjKSA9PiB7XG5cdHJldHVybiBjLmpzb24oeyBzdGF0dXM6ICdvaycsIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xufSk7XG5cbnJvdXRlci5wb3N0KCcvZWNobycsIGVjaG9BZ2VudC52YWxpZGF0b3IoKSwgYXN5bmMgKGMpID0+IHtcblx0Y29uc3QgaW5wdXQgPSBjLnJlcS52YWxpZCgnanNvbicpO1xuXHRjb25zdCByZXN1bHQgPSBhd2FpdCBlY2hvQWdlbnQucnVuKGlucHV0KTtcblx0cmV0dXJuIGMuanNvbihyZXN1bHQpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvdXRlcjtcbiIsCiAgICAiLy8gQGdlbmVyYXRlZFxuLy8gQXV0by1nZW5lcmF0ZWQgYnkgQWdlbnR1aXR5XG4vLyBETyBOT1QgRURJVCAtIFRoaXMgZmlsZSBpcyByZWdlbmVyYXRlZCBvbiBldmVyeSBidWlsZFxuLy8gU3VwcG9ydHMgYm90aCBkZXZlbG9wbWVudCBhbmQgcHJvZHVjdGlvbiBtb2RlcyB2aWEgcnVudGltZSBkZXRlY3Rpb25cbmltcG9ydCB7IFxuICBjcmVhdGVSb3V0ZXIsXG4gIGNyZWF0ZUJhc2VNaWRkbGV3YXJlLFxuICBjcmVhdGVDb3JzTWlkZGxld2FyZSxcbiAgY3JlYXRlT3RlbE1pZGRsZXdhcmUsXG4gIGNyZWF0ZUFnZW50TWlkZGxld2FyZSxcbiAgY3JlYXRlQ29tcHJlc3Npb25NaWRkbGV3YXJlLFxuICBnZXRBcHBTdGF0ZSxcbiAgZ2V0QXBwQ29uZmlnLFxuICByZWdpc3RlcixcbiAgZ2V0U3BhblByb2Nlc3NvcnMsXG4gIGNyZWF0ZVNlcnZpY2VzLFxuICBydW5BZ2VudFNldHVwcyxcbiAgZ2V0VGhyZWFkUHJvdmlkZXIsXG4gIGdldFNlc3Npb25Qcm92aWRlcixcbiAgc2V0R2xvYmFsTG9nZ2VyLFxuICBzZXRHbG9iYWxUcmFjZXIsXG4gIHNldEdsb2JhbFJvdXRlcixcbiAgZW5hYmxlUHJvY2Vzc0V4aXRQcm90ZWN0aW9uLFxuICBoYXNXYWl0VW50aWxQZW5kaW5nLFxuICBsb2FkQnVpbGRNZXRhZGF0YSxcbiAgY3JlYXRlV29ya2JlbmNoUm91dGVyLFxuICBib290c3RyYXBSdW50aW1lRW52LFxuICBwYXRjaEJ1blMzRm9yU3RvcmFnZURldixcbn0gZnJvbSAnQGFnZW50dWl0eS9ydW50aW1lJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gJ2hvbm8nO1xuaW1wb3J0IHsgd2Vic29ja2V0IH0gZnJvbSAnaG9uby9idW4nO1xuaW1wb3J0IHsgdHlwZSBMb2dMZXZlbCB9IGZyb20gJ0BhZ2VudHVpdHkvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RBbmFseXRpY3MsIHJlZ2lzdGVyQW5hbHl0aWNzUm91dGVzIH0gZnJvbSAnLi93ZWJhbmFseXRpY3MuanMnO1xuaW1wb3J0IHsgYW5hbHl0aWNzQ29uZmlnIH0gZnJvbSAnLi9hbmFseXRpY3MtY29uZmlnLmpzJztcblxuLy8gUnVudGltZSBtb2RlIGRldGVjdGlvbiBoZWxwZXJcbi8vIER5bmFtaWMgc3RyaW5nIGNvbmNhdGVuYXRpb24gcHJldmVudHMgQnVuLmJ1aWxkIGZyb20gaW5saW5pbmcgTk9ERV9FTlYgYXQgYnVpbGQgdGltZVxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzIwMTgzXG5jb25zdCBnZXRFbnYgPSAoa2V5OiBzdHJpbmcpID0+IHByb2Nlc3MuZW52W2tleV07XG5jb25zdCBpc0RldmVsb3BtZW50ID0gKCkgPT4gZ2V0RW52KCdOT0RFJyArICdfJyArICdFTlYnKSAhPT0gJ3Byb2R1Y3Rpb24nO1xuXG4vLyBTdGVwIDA6IEJvb3RzdHJhcCBydW50aW1lIGVudmlyb25tZW50IChsb2FkIHByb2ZpbGUtc3BlY2lmaWMgLmVudiBmaWxlcylcbi8vIE9ubHkgaW4gZGV2ZWxvcG1lbnQgLSBwcm9kdWN0aW9uIGVudiB2YXJzIGFyZSBpbmplY3RlZCBieSBwbGF0Zm9ybVxuLy8gVGhpcyBtdXN0IGhhcHBlbiBCRUZPUkUgYW55IGltcG9ydHMgdGhhdCBkZXBlbmQgb24gZW52aXJvbm1lbnQgdmFyaWFibGVzXG5pZiAoaXNEZXZlbG9wbWVudCgpKSB7XG5cdC8vIFBhc3MgcHJvamVjdCBkaXJlY3RvcnkgKHR3byBsZXZlbHMgdXAgZnJvbSBzcmMvZ2VuZXJhdGVkLykgc28gLmVudiBmaWxlcyBhcmUgbG9hZGVkIGNvcnJlY3RseVxuXHRhd2FpdCBib290c3RyYXBSdW50aW1lRW52KHsgcHJvamVjdERpcjogaW1wb3J0Lm1ldGEuZGlyICsgJy8uLi8uLicgfSk7XG59XG5cbi8vIFN0ZXAgMC4yNTogbG9hZCBvdXIgcnVudGltZSBtZXRhZGF0YSBhbmQgY2FjaGUgaXRcbmxvYWRCdWlsZE1ldGFkYXRhKCk7XG5cbi8vIFN0ZXAgMC41OiBQYXRjaCBCdW4ncyBTMyBjbGllbnQgZm9yIEFnZW50dWl0eSBzdG9yYWdlIGVuZHBvaW50c1xuLy8gQWdlbnR1aXR5IHN0b3JhZ2UgdXNlcyB2aXJ0dWFsLWhvc3RlZC1zdHlsZSBVUkxzICgqLnN0b3JhZ2UuZGV2KVxuLy8gVGhpcyBwYXRjaGVzIHMzLmZpbGUoKSB0byBhdXRvbWF0aWNhbGx5IHNldCB2aXJ0dWFsSG9zdGVkU3R5bGU6IHRydWVcbnBhdGNoQnVuUzNGb3JTdG9yYWdlRGV2KCk7XG5cbi8vIFN0ZXAgMTogSW5pdGlhbGl6ZSB0ZWxlbWV0cnkgYW5kIHNlcnZpY2VzXG5jb25zdCBzZXJ2ZXJVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke3Byb2Nlc3MuZW52LlBPUlQgfHwgJzM1MDAnfWA7XG5jb25zdCBvdGVsID0gcmVnaXN0ZXIoeyBwcm9jZXNzb3JzOiBnZXRTcGFuUHJvY2Vzc29ycygpLCBsb2dMZXZlbDogKHByb2Nlc3MuZW52LkFHRU5UVUlUWV9MT0dfTEVWRUwgfHwgJ2luZm8nKSBhcyBMb2dMZXZlbCB9KTtcblxuLy8gU3RlcCAyOiBDcmVhdGUgcm91dGVyIGFuZCBzZXQgYXMgZ2xvYmFsXG5jb25zdCBhcHAgPSBjcmVhdGVSb3V0ZXIoKTtcbnNldEdsb2JhbFJvdXRlcihhcHApO1xuXG4vLyBTdGVwIDM6IEFwcGx5IG1pZGRsZXdhcmUgaW4gY29ycmVjdCBvcmRlciAoQkVGT1JFIG1vdW50aW5nIHJvdXRlcylcbi8vIENvbXByZXNzaW9uIHJ1bnMgZmlyc3QgKG91dGVybW9zdCkgc28gaXQgY2FuIGNvbXByZXNzIHRoZSBmaW5hbCByZXNwb25zZVxuYXBwLnVzZSgnKicsIGNyZWF0ZUNvbXByZXNzaW9uTWlkZGxld2FyZSgpKTtcblxuYXBwLnVzZSgnKicsIGNyZWF0ZUJhc2VNaWRkbGV3YXJlKHtcblx0bG9nZ2VyOiBvdGVsLmxvZ2dlcixcblx0dHJhY2VyOiBvdGVsLnRyYWNlcixcblx0bWV0ZXI6IG90ZWwubWV0ZXIsXG59KSk7XG5cbmFwcC51c2UoJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC8qJywgY3JlYXRlQ29yc01pZGRsZXdhcmUoKSk7XG5hcHAudXNlKCcvYXBpLyonLCBjcmVhdGVDb3JzTWlkZGxld2FyZSgpKTtcblxuLy8gQ3JpdGljYWw6IG90ZWxNaWRkbGV3YXJlIGNyZWF0ZXMgc2Vzc2lvbi90aHJlYWQvd2FpdFVudGlsSGFuZGxlclxuLy8gT25seSBhcHBseSB0byByb3V0ZXMgdGhhdCBuZWVkIGZ1bGwgc2Vzc2lvbiB0cmFja2luZzpcbi8vIC0gL2FwaS8qIHJvdXRlcyAoYWdlbnQvQVBJIGludm9jYXRpb25zKVxuLy8gLSAvX2FnZW50dWl0eS93b3JrYmVuY2gvKiByb3V0ZXMgKHdvcmtiZW5jaCBBUEkpXG4vLyBFeHBsaWNpdGx5IGV4Y2x1ZGVkIChubyBzZXNzaW9uIHRyYWNraW5nLCBubyBDYXRhbHlzdCBldmVudHMpOlxuLy8gLSAvX2FnZW50dWl0eS93ZWJhbmFseXRpY3MvKiAod2ViIGFuYWx5dGljcyAtIHVzZXMgbGlnaHR3ZWlnaHQgY29va2llLW9ubHkgbWlkZGxld2FyZSlcbi8vIC0gL19hZ2VudHVpdHkvaGVhbHRoLCAvX2FnZW50dWl0eS9yZWFkeSwgL19hZ2VudHVpdHkvaWRsZSAoaGVhbHRoIGNoZWNrcylcbmFwcC51c2UoJy9fYWdlbnR1aXR5L3dvcmtiZW5jaC8qJywgY3JlYXRlT3RlbE1pZGRsZXdhcmUoKSk7XG5hcHAudXNlKCcvYXBpLyonLCBjcmVhdGVPdGVsTWlkZGxld2FyZSgpKTtcblxuLy8gQ3JpdGljYWw6IGFnZW50TWlkZGxld2FyZSBzZXRzIHVwIGFnZW50IGNvbnRleHRcbmFwcC51c2UoJy9hcGkvKicsIGNyZWF0ZUFnZW50TWlkZGxld2FyZSgnJykpO1xuXG4vLyBTdGVwIDQ6IEltcG9ydCB1c2VyJ3MgYXBwLnRzIChydW5zIGNyZWF0ZUFwcCwgZ2V0cyBzdGF0ZS9jb25maWcpXG5hd2FpdCBpbXBvcnQoJy4uLy4uL2FwcC5qcycpO1xuXG4vLyBTdGVwIDQuNTogSW1wb3J0IGFnZW50IHJlZ2lzdHJ5IHRvIGVuc3VyZSBhbGwgYWdlbnRzIGFyZSByZWdpc3RlcmVkXG4vLyBUaGlzIGlzIG5lZWRlZCBmb3Igd29ya2JlbmNoIG1ldGFkYXRhIHRvIHJldHVybiBKU09OIHNjaGVtYXNcbmF3YWl0IGltcG9ydCgnLi9yZWdpc3RyeS5qcycpO1xuXG4vLyBTdGVwIDU6IEluaXRpYWxpemUgcHJvdmlkZXJzXG5jb25zdCBhcHBTdGF0ZSA9IGdldEFwcFN0YXRlKCk7XG5jb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKTtcblxuY3JlYXRlU2VydmljZXMob3RlbC5sb2dnZXIsIGFwcENvbmZpZywgc2VydmVyVXJsKTtcblxuLy8gTWFrZSBsb2dnZXIgYW5kIHRyYWNlciBnbG9iYWxseSBhdmFpbGFibGUgZm9yIHVzZXIncyBhcHAudHNcbnNldEdsb2JhbExvZ2dlcihvdGVsLmxvZ2dlcik7XG5zZXRHbG9iYWxUcmFjZXIob3RlbC50cmFjZXIpO1xuXG5jb25zdCB0aHJlYWRQcm92aWRlciA9IGdldFRocmVhZFByb3ZpZGVyKCk7XG5jb25zdCBzZXNzaW9uUHJvdmlkZXIgPSBnZXRTZXNzaW9uUHJvdmlkZXIoKTtcblxuYXdhaXQgdGhyZWFkUHJvdmlkZXIuaW5pdGlhbGl6ZShhcHBTdGF0ZSk7XG5hd2FpdCBzZXNzaW9uUHJvdmlkZXIuaW5pdGlhbGl6ZShhcHBTdGF0ZSk7XG5cbi8vIFN0ZXAgNjogTW91bnQgcm91dGVzIChBRlRFUiBtaWRkbGV3YXJlIGlzIGFwcGxpZWQpXG5cbi8vIEhlYWx0aCBjaGVjayByb3V0ZXMgKHByb2R1Y3Rpb24gb25seSlcbmlmICghaXNEZXZlbG9wbWVudCgpKSB7XG5cdGNvbnN0IGhlYWx0aEhhbmRsZXIgPSAoYzogQ29udGV4dCkgPT4ge1xuXHRcdHJldHVybiBjLnRleHQoJ09LJywgMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcgfSk7XG5cdH07XG5cdGNvbnN0IGlkbGVIYW5kbGVyID0gKGM6IENvbnRleHQpID0+IHtcblx0XHQvLyBDaGVjayBpZiBzZXJ2ZXIgaXMgaWRsZSAobm8gcGVuZGluZyByZXF1ZXN0cy9jb25uZWN0aW9ucylcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRcdGNvbnN0IHNlcnZlciA9IChnbG9iYWxUaGlzIGFzIGFueSkuX19BR0VOVFVJVFlfU0VSVkVSX187XG5cdFx0aWYgKCFzZXJ2ZXIpIHJldHVybiBjLnRleHQoJ05PJywgMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcgfSk7XG5cdFx0XG5cdFx0Ly8gQ2hlY2sgZm9yIHBlbmRpbmcgYmFja2dyb3VuZCB0YXNrc1xuXHRcdGlmIChoYXNXYWl0VW50aWxQZW5kaW5nKCkpIHJldHVybiBjLnRleHQoJ05PJywgMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcgfSk7XG5cdFx0XG5cdFx0aWYgKHNlcnZlci5wZW5kaW5nUmVxdWVzdHMgPiAxKSByZXR1cm4gYy50ZXh0KCdOTycsIDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnIH0pO1xuXHRcdGlmIChzZXJ2ZXIucGVuZGluZ1dlYlNvY2tldHMgPiAwKSByZXR1cm4gYy50ZXh0KCdOTycsIDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnIH0pO1xuXHRcdFxuXHRcdHJldHVybiBjLnRleHQoJ09LJywgMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcgfSk7XG5cdH07XG5cdGFwcC5nZXQoJy9fYWdlbnR1aXR5L2hlYWx0aCcsIGhlYWx0aEhhbmRsZXIpO1xuXHRhcHAuZ2V0KCcvX2hlYWx0aCcsIGhlYWx0aEhhbmRsZXIpO1xuXHRhcHAuZ2V0KCcvX2FnZW50dWl0eS9pZGxlJywgaWRsZUhhbmRsZXIpO1xuXHRhcHAuZ2V0KCcvX2lkbGUnLCBpZGxlSGFuZGxlcik7XG59XG5cbi8vIERldiByZWFkaW5lc3MgY2hlY2sgLSB2ZXJpZmllcyBWaXRlIGFzc2V0IHNlcnZlciBpcyByZWFkeSB0byBzZXJ2ZSBmcm9udGVuZFxuaWYgKGlzRGV2ZWxvcG1lbnQoKSkge1xuXHRhcHAuZ2V0KCcvX2FnZW50dWl0eS9yZWFkeScsIGFzeW5jIChjOiBDb250ZXh0KSA9PiB7XG5cdFx0Y29uc3Qgdml0ZVBvcnQgPSBwcm9jZXNzLmVudi5WSVRFX1BPUlQ7XG5cdFx0aWYgKCF2aXRlUG9ydCkge1xuXHRcdFx0Ly8gTm8gVml0ZSBwb3J0IG1lYW5zIHdlJ3JlIG5vdCB1c2luZyBWaXRlIHByb3h5XG5cdFx0XHRyZXR1cm4gYy50ZXh0KCdPSycsIDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnIH0pO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHQvLyBQcm9iZSBWaXRlIHRvIGNoZWNrIGlmIGl0IGNhbiBzZXJ2ZSB0aGUgbWFpbiBlbnRyeSBwb2ludFxuXHRcdFx0Ly8gVXNlIEB2aXRlL2NsaWVudCBhcyBhIGxpZ2h0d2VpZ2h0IGNoZWNrIC0gaXQncyBhbHdheXMgYXZhaWxhYmxlXG5cdFx0XHRjb25zdCB2aXRlVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHt2aXRlUG9ydH0vQHZpdGUvY2xpZW50YDtcblx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHZpdGVVcmwsIHtcblx0XHRcdFx0c2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuXHRcdFx0XHRtZXRob2Q6ICdIRUFEJ1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChyZXMub2spIHtcblx0XHRcdFx0cmV0dXJuIGMudGV4dCgnT0snLCAyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JyB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjLnRleHQoJ1ZJVEVfTk9UX1JFQURZJywgNTAzLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcgfSk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRvdGVsLmxvZ2dlci5kZWJ1ZygnVml0ZSByZWFkaW5lc3MgY2hlY2sgZmFpbGVkOiAlcycsIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG5cdFx0XHRyZXR1cm4gYy50ZXh0KCdWSVRFX05PVF9SRUFEWScsIDUwMywgeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnIH0pO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFJlZ2lzdGVyIGFuYWx5dGljcyByb3V0ZXNcbnJlZ2lzdGVyQW5hbHl0aWNzUm91dGVzKGFwcCk7XG5cbi8vIEFzc2V0IHByb3h5IHJvdXRlcyAtIERldmVsb3BtZW50IG1vZGUgb25seSAocHJveGllcyB0byBWaXRlIGFzc2V0IHNlcnZlcilcbmlmIChpc0RldmVsb3BtZW50KCkgJiYgcHJvY2Vzcy5lbnYuVklURV9QT1JUKSB7XG5cdGNvbnN0IFZJVEVfQVNTRVRfUE9SVCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlZJVEVfUE9SVCwgMTApO1xuXG5cdGNvbnN0IHByb3h5VG9WaXRlID0gYXN5bmMgKGM6IENvbnRleHQpID0+IHtcblx0XHRjb25zdCB2aXRlVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtWSVRFX0FTU0VUX1BPUlR9JHtjLnJlcS5wYXRofWA7XG5cdFx0dHJ5IHtcblx0XHRcdG90ZWwubG9nZ2VyLmRlYnVnKGBbUHJveHldICR7Yy5yZXEubWV0aG9kfSAke2MucmVxLnBhdGh9IC0+IFZpdGU6JHtWSVRFX0FTU0VUX1BPUlR9YCk7XG5cdFx0XHRjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh2aXRlVXJsLCB7IHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgxMDAwMCkgfSk7XG5cdFx0XHRvdGVsLmxvZ2dlci5kZWJ1ZyhgW1Byb3h5XSAke2MucmVxLnBhdGh9IC0+ICR7cmVzLnN0YXR1c30gKCR7cmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKX0pYCk7XG5cdFx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKHJlcy5ib2R5LCB7XG5cdFx0XHRcdHN0YXR1czogcmVzLnN0YXR1cyxcblx0XHRcdFx0aGVhZGVyczogcmVzLmhlYWRlcnMsXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcicpIHtcblx0XHRcdFx0b3RlbC5sb2dnZXIuZXJyb3IoYFZpdGUgcHJveHkgdGltZW91dDogJHtjLnJlcS5wYXRofWApO1xuXHRcdFx0XHRyZXR1cm4gYy50ZXh0KCdWaXRlIGFzc2V0IHNlcnZlciB0aW1lb3V0JywgNTA0KTtcblx0XHRcdH1cblx0XHRcdG90ZWwubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcHJveHkgdG8gVml0ZTogJHtjLnJlcS5wYXRofSAtICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApO1xuXHRcdFx0cmV0dXJuIGMudGV4dCgnVml0ZSBhc3NldCBzZXJ2ZXIgZXJyb3InLCA1MDApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBWaXRlIGNsaWVudCBzY3JpcHRzIGFuZCBITVJcblx0YXBwLmdldCgnL0B2aXRlLyonLCBwcm94eVRvVml0ZSk7XG5cdGFwcC5nZXQoJy9AcmVhY3QtcmVmcmVzaCcsIHByb3h5VG9WaXRlKTtcblxuXHQvLyBTb3VyY2UgZmlsZXMgZm9yIEhNUlxuXHRhcHAuZ2V0KCcvc3JjL3dlYi8qJywgcHJveHlUb1ZpdGUpO1xuXHRhcHAuZ2V0KCcvc3JjLyonLCBwcm94eVRvVml0ZSk7IC8vIENhdGNoLWFsbCBmb3Igb3RoZXIgc291cmNlIGZpbGVzXG5cblx0Ly8gV29ya2JlbmNoIHNvdXJjZSBmaWxlcyAoaW4gLmFnZW50dWl0eS93b3JrYmVuY2gtc3JjLylcblx0YXBwLmdldCgnLy5hZ2VudHVpdHkvd29ya2JlbmNoLXNyYy8qJywgcHJveHlUb1ZpdGUpO1xuXG5cdC8vIE5vZGUgbW9kdWxlcyAoVml0ZSB0cmFuc2Zvcm1zIHRoZXNlKVxuXHRhcHAuZ2V0KCcvbm9kZV9tb2R1bGVzLyonLCBwcm94eVRvVml0ZSk7XG5cblx0Ly8gU2NvcGVkIHBhY2thZ2VzIChlLmcuLCBAYWdlbnR1aXR5LyosIEB0eXBlcy8qKVxuXHRhcHAuZ2V0KCcvQConLCBwcm94eVRvVml0ZSk7XG5cblx0Ly8gRmlsZSBzeXN0ZW0gYWNjZXNzIChmb3IgVml0ZSdzIEBmcyBwcm90b2NvbClcblx0YXBwLmdldCgnL0Bmcy8qJywgcHJveHlUb1ZpdGUpO1xuXG5cdC8vIE1vZHVsZSByZXNvbHV0aW9uIChmb3IgVml0ZSdzIEBpZCBwcm90b2NvbClcblx0YXBwLmdldCgnL0BpZC8qJywgcHJveHlUb1ZpdGUpO1xuXG5cdC8vIEFueSAuanMsIC5qc3gsIC50cywgLnRzeCBmaWxlcyAoY2F0Y2ggcmVtYWluaW5nIG1vZHVsZXMpXG5cdGFwcC5nZXQoJy8qLmpzJywgcHJveHlUb1ZpdGUpO1xuXHRhcHAuZ2V0KCcvKi5qc3gnLCBwcm94eVRvVml0ZSk7XG5cdGFwcC5nZXQoJy8qLnRzJywgcHJveHlUb1ZpdGUpO1xuXHRhcHAuZ2V0KCcvKi50c3gnLCBwcm94eVRvVml0ZSk7XG5cdGFwcC5nZXQoJy8qLmNzcycsIHByb3h5VG9WaXRlKTtcbn1cblxuLy8gTW91bnQgQVBJIHJvdXRlc1xuY29uc3QgeyBkZWZhdWx0OiByb3V0ZXJfMCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9hcGkvaW5kZXguanMnKTtcbmFwcC5yb3V0ZSgnL2FwaScsIHJvdXRlcl8wKTtcblxuY29uc3QgaGFzV29ya2JlbmNoQ29uZmlnID0gdHJ1ZTtcbmNvbnN0IGhhc1dvcmtiZW5jaCA9IGlzRGV2ZWxvcG1lbnQoKSAmJiBoYXNXb3JrYmVuY2hDb25maWc7XG5pZiAoaGFzV29ya2JlbmNoKSB7XG5cdC8vIE1vdW50IHdvcmtiZW5jaCBBUEkgcm91dGVzICgvX2FnZW50dWl0eS93b3JrYmVuY2gvKilcblx0Y29uc3Qgd29ya2JlbmNoUm91dGVyID0gY3JlYXRlV29ya2JlbmNoUm91dGVyKCk7XG5cdGFwcC5yb3V0ZSgnLycsIHdvcmtiZW5jaFJvdXRlcik7XG59XG5cbmlmIChoYXNXb3JrYmVuY2gpIHtcblx0Ly8gRGV2ZWxvcG1lbnQgbW9kZTogTGV0IFZpdGUgc2VydmUgc291cmNlIGZpbGVzIHdpdGggSE1SXG5cdGlmIChpc0RldmVsb3BtZW50KCkpIHtcblx0XHRjb25zdCB3b3JrYmVuY2hTcmNEaXIgPSBpbXBvcnQubWV0YS5kaXIgKyAnL3dvcmtiZW5jaC1zcmMnO1xuXHRcdGNvbnN0IHdvcmtiZW5jaEluZGV4UGF0aCA9IGltcG9ydC5tZXRhLmRpciArICcvd29ya2JlbmNoLXNyYy9pbmRleC5odG1sJztcblx0XHRhcHAuZ2V0KCcvd29ya2JlbmNoJywgYXN5bmMgKGM6IENvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IGh0bWwgPSBhd2FpdCBCdW4uZmlsZSh3b3JrYmVuY2hJbmRleFBhdGgpLnRleHQoKTtcblx0XHRcdC8vIFJld3JpdGUgc2NyaXB0L2NzcyBwYXRocyB0byB1c2UgVml0ZSdzIEBmcyBwcm90b2NvbFxuXHRcdFx0Y29uc3Qgd2l0aFZpdGUgPSBodG1sXG5cdFx0XHRcdC5yZXBsYWNlKCdzcmM9XCIuL21haW4udHN4XCInLCBgc3JjPVwiL0BmcyR7d29ya2JlbmNoU3JjRGlyfS9tYWluLnRzeFwiYClcblx0XHRcdFx0LnJlcGxhY2UoJ2hyZWY9XCIuL3N0eWxlcy5jc3NcIicsIGBocmVmPVwiL0BmcyR7d29ya2JlbmNoU3JjRGlyfS9zdHlsZXMuY3NzXCJgKTtcblx0XHRcdHJldHVybiBjLmh0bWwod2l0aFZpdGUpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFByb2R1Y3Rpb24gbW9kZSBkaXNhYmxlcyB0aGUgd29ya2JlbmNoIGFzc2V0c1xuXHR9XG59XG5cbi8vIFN0ZXAgNzogUnVuIGFnZW50IHNldHVwIHRvIHNpZ25hbCBjb21wbGV0aW9uXG5hd2FpdCBydW5BZ2VudFNldHVwcyhhcHBTdGF0ZSk7XG5cbi8vIFN0YXJ0IEJ1biBzZXJ2ZXJcbmlmICh0eXBlb2YgQnVuICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBFbmFibGUgcHJvY2VzcyBleGl0IHByb3RlY3Rpb24gbm93IHRoYXQgd2UncmUgc3RhcnRpbmcgdGhlIHNlcnZlclxuXHRlbmFibGVQcm9jZXNzRXhpdFByb3RlY3Rpb24oKTtcblxuXHRjb25zdCBwb3J0ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUE9SVCB8fCAnMzUwMCcsIDEwKTtcblx0Y29uc3Qgc2VydmVyID0gQnVuLnNlcnZlKHtcblx0XHRmZXRjaDogKHJlcSwgc2VydmVyKSA9PiB7XG5cdFx0XHQvLyBHZXQgdGltZW91dCBmcm9tIGNvbmZpZyBvbiBlYWNoIHJlcXVlc3QgKDAgPSBubyB0aW1lb3V0KVxuXHRcdFx0c2VydmVyLnRpbWVvdXQocmVxLCBnZXRBcHBDb25maWcoKT8ucmVxdWVzdFRpbWVvdXQgPz8gMCk7XG5cdFx0XHRyZXR1cm4gYXBwLmZldGNoKHJlcSwgc2VydmVyKTtcblx0XHR9LFxuXHRcdHdlYnNvY2tldCxcblx0XHRwb3J0LFxuXHRcdGhvc3RuYW1lOiAnMTI3LjAuMC4xJyxcblx0XHRkZXZlbG9wbWVudDogaXNEZXZlbG9wbWVudCgpLFxuXHR9KTtcblx0XG5cdC8vIE1ha2Ugc2VydmVyIGF2YWlsYWJsZSBnbG9iYWxseSBmb3IgaGVhbHRoIGNoZWNrc1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHQoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fQUdFTlRVSVRZX1NFUlZFUl9fID0gc2VydmVyO1xuXHRcblx0b3RlbC5sb2dnZXIuaW5mbyhgU2VydmVyIGxpc3RlbmluZyBvbiBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH1gKTtcblx0aWYgKGlzRGV2ZWxvcG1lbnQoKSAmJiBwcm9jZXNzLmVudi5WSVRFX1BPUlQpIHtcblx0XHRvdGVsLmxvZ2dlci5kZWJ1ZyhgUHJveHlpbmcgVml0ZSBhc3NldHMgZnJvbSBwb3J0ICR7cHJvY2Vzcy5lbnYuVklURV9QT1JUfWApO1xuXHR9XG59XG5cbi8vIEZPVU5EIEFOIEVSUk9SIElOIFRISVMgRklMRT9cbi8vIFBsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9hZ2VudHVpdHkvc2RrL2lzc3Vlc1xuLy8gb3IgaWYgeW91IGtub3cgdGhlIGZpeCBwbGVhc2Ugc3VibWl0IGEgUFIhXG5cbiIsCiAgICAiLy8gQGdlbmVyYXRlZFxuLy8gQXV0by1nZW5lcmF0ZWQgYnkgQWdlbnR1aXR5XG4vLyBETyBOT1QgRURJVCAtIFRoaXMgZmlsZSBpcyByZWdlbmVyYXRlZCBvbiBldmVyeSBidWlsZFxuXG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICdob25vJztcbmltcG9ydCB7XG5cdEJFQUNPTl9TQ1JJUFQsXG5cdGNyZWF0ZVJvdXRlcixcblx0Y3JlYXRlV2ViU2Vzc2lvbk1pZGRsZXdhcmUsXG5cdGdldE9yZ2FuaXphdGlvbklkLFxuXHRnZXRQcm9qZWN0SWQsXG5cdGlzRGV2TW9kZSBhcyBydW50aW1lSXNEZXZNb2RlLFxufSBmcm9tICdAYWdlbnR1aXR5L3J1bnRpbWUnO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY3NDb25maWcgfSBmcm9tICcuL2FuYWx5dGljcy1jb25maWcnO1xuXG4vLyBJbmplY3QgYW5hbHl0aWNzIGNvbmZpZyBhbmQgc2NyaXB0IGludG8gSFRNTFxuLy8gTm90ZTogT25seSBzdGF0aWMgY29uZmlnIGlzIGluamVjdGVkIChvcmcsIHByb2plY3QsIGRldm1vZGUsIHRyYWNraW5nIG9wdGlvbnMpXG4vLyBTZXNzaW9uIGFuZCB0aHJlYWQgSURzIGFyZSByZWFkIGZyb20gY29va2llcyBieSB0aGUgYmVhY29uIHNjcmlwdFxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEFuYWx5dGljcyhodG1sOiBzdHJpbmcsIGFuYWx5dGljc0NvbmZpZzogQW5hbHl0aWNzQ29uZmlnKTogc3RyaW5nIHtcblx0aWYgKCFhbmFseXRpY3NDb25maWcuZW5hYmxlZCkgcmV0dXJuIGh0bWw7XG5cblx0Y29uc3Qgb3JnSWQgPSBnZXRPcmdhbml6YXRpb25JZCgpIHx8ICcnO1xuXHRjb25zdCBwcm9qZWN0SWQgPSBnZXRQcm9qZWN0SWQoKSB8fCAnJztcblx0Y29uc3QgaXNEZXZtb2RlID0gcnVudGltZUlzRGV2TW9kZSgpO1xuXG5cdC8vIE9ubHkgaW5jbHVkZSBzdGF0aWMgY29uZmlnIC0gc2Vzc2lvbi90aHJlYWQgY29tZSBmcm9tIGNvb2tpZXNcblx0Y29uc3QgcGFnZUNvbmZpZyA9IHtcblx0XHQuLi5hbmFseXRpY3NDb25maWcsXG5cdFx0b3JnSWQsXG5cdFx0cHJvamVjdElkLFxuXHRcdGlzRGV2bW9kZSxcblx0fTtcblxuXHRjb25zdCBjb25maWdTY3JpcHQgPSBgPHNjcmlwdD53aW5kb3cuX19BR0VOVFVJVFlfQU5BTFlUSUNTX189JHtKU09OLnN0cmluZ2lmeShwYWdlQ29uZmlnKX07PC9zY3JpcHQ+YDtcblx0Ly8gU2Vzc2lvbiBzY3JpcHQgc2V0cyBjb29raWVzIGFuZCB3aW5kb3cuX19BR0VOVFVJVFlfU0VTU0lPTl9fIChkeW5hbWljLCBub3QgY2FjaGVkKVxuXHRjb25zdCBzZXNzaW9uU2NyaXB0ID0gJzxzY3JpcHQgc3JjPVwiL19hZ2VudHVpdHkvd2ViYW5hbHl0aWNzL3Nlc3Npb24uanNcIiBhc3luYz48L3NjcmlwdD4nO1xuXHQvLyBCZWFjb24gc2NyaXB0IC0gbXVzdCBiZSBzeW5jIChub3QgYXN5bmMvZGVmZXIpIHRvIHBhdGNoIGhpc3RvcnkgQVBJIGJlZm9yZSB0aGUgcm91dGVyIGxvYWRzXG5cdGNvbnN0IGJlYWNvblNjcmlwdCA9ICc8c2NyaXB0IHNyYz1cIi9fYWdlbnR1aXR5L3dlYmFuYWx5dGljcy9hbmFseXRpY3MuanNcIj48L3NjcmlwdD4nO1xuXHRjb25zdCBpbmplY3Rpb24gPSBjb25maWdTY3JpcHQgKyBzZXNzaW9uU2NyaXB0ICsgYmVhY29uU2NyaXB0O1xuXG5cdC8vIEluamVjdCBiZWZvcmUgPC9oZWFkPiBvciBhdCBzdGFydCBvZiA8Ym9keT5cblx0aWYgKGh0bWwuaW5jbHVkZXMoJzwvaGVhZD4nKSkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoJzwvaGVhZD4nLCBpbmplY3Rpb24gKyAnPC9oZWFkPicpO1xuXHR9XG5cdGlmIChodG1sLmluY2x1ZGVzKCc8Ym9keScpKSB7XG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZSgvPGJvZHkoW14+XSopPi8sIGA8Ym9keSQxPiR7aW5qZWN0aW9ufWApO1xuXHR9XG5cdHJldHVybiBpbmplY3Rpb24gKyBodG1sO1xufVxuXG4vLyBTZXJ2ZSBhbmFseXRpY3Mgcm91dGVzXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBbmFseXRpY3NSb3V0ZXMoYXBwOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVSb3V0ZXI+KTogdm9pZCB7XG5cdC8vIER5bmFtaWMgdGhyZWFkIGNvbmZpZyBzY3JpcHQgLSBzZXRzIGNvb2tpZSBhbmQgcmV0dXJucyB0aHJlYWQgSURcblx0Ly8gV2ViIGFuYWx5dGljcyBvbmx5IHRyYWNrcyB0aHJlYWQgSUQsIG5vdCBzZXNzaW9uIElEICh0byBhdm9pZCBwb2xsdXRpbmcgc2Vzc2lvbnMgdGFibGUpXG5cdC8vIFRoaXMgZW5kcG9pbnQgaXMgTk9UIGNhY2hlZCAtIGl0IGdlbmVyYXRlcyB1bmlxdWUgZGF0YSBwZXIgcmVxdWVzdFxuXHRhcHAuZ2V0KCcvX2FnZW50dWl0eS93ZWJhbmFseXRpY3Mvc2Vzc2lvbi5qcycsIGNyZWF0ZVdlYlNlc3Npb25NaWRkbGV3YXJlKCksIGFzeW5jIChjOiBDb250ZXh0KSA9PiB7XG5cdFx0Ly8gUmVhZCBmcm9tIGNvbnRleHQgKGNvb2tpZXMgYXJlbid0IHJlYWRhYmxlIHVudGlsIHRoZSBuZXh0IHJlcXVlc3QpXG5cdFx0Y29uc3QgdGhyZWFkSWQgPSBjLmdldCgnX3dlYlRocmVhZElkJykgfHwgJyc7XG5cblx0XHQvLyBVc2UgSlNPTi5zdHJpbmdpZnkgdG8gc2FmZWx5IGVzY2FwZSB0aHJlYWRJZCBhbmQgcHJldmVudCBYU1MvaW5qZWN0aW9uXG5cdFx0Y29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnN0cmluZ2lmeSh7IHRocmVhZElkIH0pO1xuXHRcdGNvbnN0IHNlc3Npb25TY3JpcHQgPSBgd2luZG93Ll9fQUdFTlRVSVRZX1NFU1NJT05fXz0ke3Nlc3Npb25EYXRhfTtgO1xuXG5cdFx0cmV0dXJuIG5ldyBSZXNwb25zZShzZXNzaW9uU2NyaXB0LCB7XG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdCdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOCcsXG5cdFx0XHRcdCdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlJyxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH0pO1xuXG5cdC8vIFN0YXRpYyBiZWFjb24gc2NyaXB0IC0gY2FuIGJlIGNhY2hlZFxuXHRhcHAuZ2V0KCcvX2FnZW50dWl0eS93ZWJhbmFseXRpY3MvYW5hbHl0aWNzLmpzJywgYXN5bmMgKGM6IENvbnRleHQpID0+IHtcblx0XHRyZXR1cm4gbmV3IFJlc3BvbnNlKEJFQUNPTl9TQ1JJUFQsIHtcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04Jyxcblx0XHRcdFx0J0NhY2hlLUNvbnRyb2wnOiAncHVibGljLCBtYXgtYWdlPTM2MDAnLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fSk7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS08sU0FBUyxhQUFhLENBQUMsS0FBSyxPQUFPO0FBQUEsRUFDdEMsTUFBTSxVQUFVLElBQUk7QUFBQSxFQUNwQixTQUFTLFFBQVEsQ0FBQyxNQUFNLE9BQU87QUFBQSxJQUMzQixJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsT0FBTyxNQUFNLFNBQVM7QUFBQSxJQUMxQjtBQUFBLElBQ0EsSUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLE1BQU07QUFBQSxNQUM3QyxJQUFJLFFBQVEsSUFBSSxLQUFLLEdBQUc7QUFBQSxRQUNwQixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsUUFBUSxJQUFJLEtBQUs7QUFBQSxNQUNqQixPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFFWCxPQUFPLEtBQUssVUFBVSxLQUFLLFVBQVUsS0FBSztBQUFBOzs7QUMwS3ZDLFNBQVMsZUFBZSxDQUFDLEtBQUssZ0JBQWdCO0FBQUEsRUFDakQsU0FBUyxnQkFBZ0IsR0FBRztBQUFBLElBRXhCLE1BQU0sYUFBYSxPQUFP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SUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsT0FDRCxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsT0FDRCxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsT0FDRCxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsSUFBSSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2hDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2xDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsS0FBSyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2pDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsTUFBTSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2xDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsS0FBSyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2pDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsSUFBSSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2hDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsTUFBTSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2xDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsS0FBSyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2pDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsS0FBSyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2pDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsSUFBSSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2hDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsT0FBTyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ25DLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsVUFBVSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ3RDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsS0FBSyxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2pDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsSUFBSSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ2hDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsT0FDQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQVVFLFNBQVMsWUFBWSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ3hDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsT0FDSCxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2xDLENBQUM7QUFBQTtBQUdFLFNBQVMsUUFBUSxDQUFDLFFBQU8sUUFBUTtBQUFBLEVBQ3BDLE9BQU8sSUFBSSxPQUFNO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixRQUFRO0FB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QUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKLENB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Q0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSixDQUFDO0FBQUEsRUFRRCxJQUFNLHdDQUF3QztBQUFBLEVBQzlDLElBQU0sOEJBQThCO0FBQUEsRUFDcEMsSUFBTSxnQ0FBZ0M7QUFBQSxFQUN0QyxJQUFNLDhCQUE4QjtBQUFBLEVBTTVCLDRDQUFvQztBQUFBLEVBTXBDLGtD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QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQTtBQUFBLGNBRVIsSUFBSSxRQUFPLGdCQUFnQjtBQUFBLGdCQUN2QixRQUFRLGVBQWUsT0FBTyxRQUFPLFlBQVk7QUFBQSxjQUNyRCxJQUFJLFFBQU8sUUFBUSxNQUFNO0FBQUEsZ0JBQ3JCLElBQUksT0FBTyxRQUFPLFNBQVM7QUFBQSxrQkFDdkIsTUFBTSxVQUFVLDhEQUE4RDtBQUFBLGdCQUNsRixRQUFRLE9BQU8sTUFBTSxjQUFjLE1BQU0sT0FBTyxHQUFHLFNBQVMsV0FBVyxRQUFPLElBQUk7QUFBQSxjQUN0RjtBQUFBLGNBQ0EsSUFBSSxRQUFPLFlBQVk7QUFBQSxnQkFDbkIsSUFBSSxDQUFDLE1BQU0sUUFBUSxRQUFPLFVBQVU7QUFBQSxrQkFDaEMsTUFBTSxVQUFVLG1FQUFtRTtBQUFBLGdCQUN2RixRQUFRLGFBQWEsQ0FBQztBQUFBLGdCQUN0QixTQUFTLElBQUksRUFBRyxJQUFJLFFBQU8sV0FBVyxRQUFRLEVBQUUsR0FBRztBQUFBLGtCQUMvQyxJQUFJLE9BQU8sUUFBTyxXQUFXLE9BQU87QUFBQSxvQkFDaEMsTUFBTSxVQUFVLG9FQUFvRTtBQUFBLGtCQUN4RixRQUFRLFdBQVcsS0FBSyxNQUFNLGNBQWMsTUFBTSxPQUFPLEdBQUcsU0FBUyxXQUFXLFFBQU8sV0FBVyxFQUFFO0FBQUEsZ0JBQ3hHO0FBQUEsY0FDSjtBQUFBLGNBQ0EsSUFBSSxRQUFPLDBCQUEwQjtBQUFBLGdCQUNqQyxRQUFRLHlCQUF5QixRQUFPLDJCQUEyQjtBQUFBLGNBQ3ZFLElBQUksUUFBTyxTQUFTO0FBQUEsZ0JBQ2hCLFFBQVEsUUFBUSxRQUFPLFVBQVU7QUFBQSxjQUNyQyxJQUFJLFFBQU8sV0FBVztBQUFBLGdCQUNsQixJQUFJLE9BQU8sUUFBTyxZQUFZO0FBQUEsa0JBQzFCLE1BQU0sT0FBTyxPQUFPLFFBQU8sU0FBUyxRQUFRLFVBQVUsTUFBTSxVQUFVLE1BQU0sT0FBTyxPQUFPLFFBQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUFBLGdCQUM1RyxTQUFJLFFBQU8sUUFBUSxVQUFVO0FBQUEsa0JBQzlCLFFBQVEsVUFBVSxRQUFPO0FBQUE7QUFBQSxjQUNqQyxJQUFJLFFBQU8sVUFBVTtBQUFBLGdCQUNqQixJQUFJLE9BQU8sUUFBTyxXQUFXO0FBQUEsa0JBQ3pCLE1BQU0sT0FBTyxPQUFPLFFBQU8sUUFBUSxRQUFRLFNBQVMsTUFBTSxVQUFVLE1BQU0sT0FBTyxPQUFPLFFBQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUFBLGdCQUN6RyxTQUFJLFFBQU8sT0FBTyxVQUFVO0FBQUEsa0JBQzdCLFFBQVEsU0FBUyxRQUFPO0FBQUE7QUFBQSxjQUNoQyxJQUFJLFFBQU8sYUFBYTtBQUFBLGdCQUNwQixRQUFRLFlBQVksT0FBTyxRQUFPLFNBQVM7QUFBQSxjQUMvQyxPQUFPO0FBQUE7QUFBQSxZQVdYLFVBQVUsV0FBVyxTQUFTLFFBQVEsQ0FBQyxTQUFTLFNBQVM7QUFBQSxjQUNyRCxJQUFJLENBQUM7QUFBQSxnQkFDRCxVQUFVLENBQUM7QUFBQSxjQUNmLElBQUksVUFBUyxDQUFDO0FBQUEsY0FDZCxJQUFJLFFBQVEsVUFBVSxRQUFRO0FBQUEsZ0JBQzFCLFFBQU8sYUFBYSxDQUFDO0FBQUEsY0FDekIsSUFBSSxRQUFRLFVBQVU7QUFBQSxnQkFDbEIsSUFBSSxNQUFNLE1BQU07QUFBQSxrQkFDWixJQUFJLE9BQU8sSUFBSSxNQUFNLEtBQUssR0FBRyxHQUFHLEtBQUs7QUFBQSxrQkFDckMsUUFBTyxlQUFlLFFBQVEsVUFBVSxTQUFTLEtBQUssU0FBUyxJQUFJLFFBQVEsVUFBVSxTQUFTLEtBQUssU0FBUyxJQUFJO0FBQUEsZ0JBQ3BILEVBRUk7QUFBQSwwQkFBTyxlQUFlLFFBQVEsVUFBVSxTQUFTLE1BQU07QUFBQSxnQkFDM0QsUUFBTyxpQkFBaUIsUUFBUSxVQUFVLFNBQVMsZ0NBQWdDO0FBQUEsZ0JBQ25GLFFBQU8sZUFBZTtBQUFBLGdCQUN0QixRQUFPLE9BQU87QUFBQSxnQkFDZCxRQUFPLHlCQUF5QjtBQUFBLGdCQUNoQyxRQUFPLFFBQVE7QUFBQSxnQkFDZixJQUFJLFFBQVEsVUFBVTtBQUFBLGtCQUNsQixRQUFPLFVBQVU7QUFBQSxnQkFDaEI7QUFBQSxrQkFDRCxRQUFPLFVBQVUsQ0FBQztBQUFBLGtCQUNsQixJQUFJLFFBQVEsVUFBVTtBQUFBLG9CQUNsQixRQUFPLFVBQVUsTUFBTSxVQUFVLFFBQU8sT0FBTztBQUFBO0FBQUEsZ0JBRXZELElBQUksUUFBUSxVQUFVO0FBQUEsa0JBQ2xCLFFBQU8sU0FBUztBQUFBLGdCQUNmO0FBQUEsa0JBQ0QsUUFBTyxTQUFTLENBQUM7QUFBQSxrQkFDakIsSUFBSSxRQUFRLFVBQVU7QUFBQSxvQkFDbEIsUUFBTyxTQUFTLE1BQU0sVUFBVSxRQUFPLE1BQU07QUFBQTtBQUFBLGdCQUVyRCxJQUFJLE1BQU0sTUFBTTtBQUFBLGtCQUNaLElBQUksT0FBTyxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsS0FBSztBQUFBLGtCQUNyQyxRQUFPLHVCQUF1QixRQUFRLFVBQVUsU0FBUyxLQUFLLFNBQVMsSUFBSSxRQUFRLFVBQVUsU0FBUyxLQUFLLFNBQVMsSUFBSTtBQUFBLGdCQUM1SCxFQUVJO0FBQUEsMEJBQU8sdUJBQXVCLFFBQVEsVUFBVSxTQUFTLE1BQU07QUFBQSxnQkFDbkUsUUFBTyxZQUFZO0FBQUEsY0FDdkI7QUFBQSxjQUNBLElBQUksUUFBUSxnQkFBZ0IsUUFBUSxRQUFRLGVBQWUsY0FBYztBQUFBLGdCQUNyRSxJQUFJLE9BQU8sUUFBUSxpQkFBaUI7QUFBQSxrQkFDaEMsUUFBTyxlQUFlLFFBQVEsVUFBVSxTQUFTLE9BQU8sUUFBUSxZQUFZLElBQUksUUFBUTtBQUFBLGdCQUV4RjtBQUFBLDBCQUFPLGVBQWUsUUFBUSxVQUFVLFNBQVMsTUFBTSxLQUFLLFVBQVUsU0FBUyxLQUFLLFFBQVEsWUFBWSxJQUFJLFFBQVEsVUFBVSxTQUFTLElBQUksTUFBTSxTQUFTLFFBQVEsYUFBYSxRQUFRLEdBQUcsUUFBUSxhQUFhLFNBQVMsQ0FBQyxFQUFFLFNBQVMsSUFBSSxRQUFRO0FBQUEsY0FDeFAsSUFBSSxRQUFRLGtCQUFrQixRQUFRLFFBQVEsZUFBZSxnQkFBZ0I7QUFBQSxnQkFDekUsUUFBTyxpQkFBaUIsUUFBUSxVQUFVLFNBQVMsTUFBTSxjQUFjLE1BQU0sS0FBSyxHQUFHLGVBQWUsUUFBUSxvQkFBb0IsWUFBWSxRQUFRLGlCQUFpQixNQUFNLGNBQWMsTUFBTSxLQUFLLEdBQUcsZUFBZSxRQUFRLGtCQUFrQixRQUFRO0FBQUEsY0FDNVAsSUFBSSxRQUFRLGdCQUFnQixRQUFRLFFBQVEsZUFBZSxjQUFjO0FBQUEsZ0JBQ3JFLFFBQU8sZUFBZSxRQUFRO0FBQUEsY0FDbEMsSUFBSSxRQUFRLFFBQVEsUUFBUSxRQUFRLGVBQWUsTUFBTTtBQUFBLGdCQUNyRCxRQUFPLE9BQU8sTUFBTSxjQUFjLE1BQU0sT0FBTyxHQUFHLFNBQVMsU0FBUyxRQUFRLE1BQU0sT0FBTztBQUFBLGNBQzdGLElBQUksUUFBUSxjQUFjLFFBQVEsV0FBVyxRQUFRO0FBQUEsZ0JBQ2pELFFBQU8sYUFBYSxDQUFDO0FBQUEsZ0JBQ3JCLFNBQVMsSUFBSSxFQUFHLElBQUksUUFBUSxXQUFXLFFBQVEsRUFBRTtBQUFBLGtCQUM3QyxRQUFPLFdBQVcsS0FBSyxNQUFNLGNBQWMsTUFBTSxPQUFPLEdBQUcsU0FBUyxTQUFTLFFBQVEsV0FBVyxJQUFJLE9BQU87QUFBQSxjQUNuSDtBQUFBLGNBQ0EsSUFBSSxRQUFRLDBCQUEwQixRQUFRLFFBQVEsZUFBZSx3QkFBd0I7QUFBQSxnQkFDekYsUUFBTyx5QkFBeUIsUUFBUTtBQUFBLGNBQzVDLElBQUksUUFBUSxTQUFTLFFBQVEsUUFBUSxlQUFlLE9BQU87QUFBQSxnQkFDdkQsUUFBTyxRQUFRLFFBQVE7QUFBQSxjQUMzQixJQUFJLFFBQVEsV0FBVyxRQUFRLFFBQVEsZUFBZSxTQUFTO0FBQUEsZ0JBQzNELFFBQU8sVUFBVSxRQUFRLFVBQVUsU0FBUyxNQUFNLE9BQU8sT0FBTyxRQUFRLFNBQVMsR0FBRyxRQUFRLFFBQVEsTUFBTSxJQUFJLFFBQVEsVUFBVSxRQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUssUUFBUSxPQUFPLElBQUksUUFBUTtBQUFBLGNBQ2xNLElBQUksUUFBUSxVQUFVLFFBQVEsUUFBUSxlQUFlLFFBQVE7QUFBQSxnQkFDekQsUUFBTyxTQUFTLFFBQVEsVUFBVSxTQUFTLE1BQU0sT0FBTyxPQUFPLFFBQVEsUUFBUSxHQUFHLFFBQVEsT0FBTyxNQUFNLElBQUksUUFBUSxVQUFVLFFBQVEsTUFBTSxVQUFVLE1BQU0sS0FBSyxRQUFRLE1BQU0sSUFBSSxRQUFRO0FBQUEsY0FDOUwsSUFBSSxRQUFRLHdCQUF3QixRQUFRLFFBQVEsZUFBZSxzQkFBc0I7QUFBQSxnQkFDckYsSUFBSSxPQUFPLFFBQVEseUJBQXlCO0FBQUEsa0JBQ3hDLFFBQU8sdUJBQXVCLFFBQVEsVUFBVSxTQUFTLE9BQU8sUUFBUSxvQkFBb0IsSUFBSSxRQUFRO0FBQUEsZ0JBRXhHO0FBQUEsMEJBQU8sdUJBQXVCLFFBQVEsVUFBVSxTQUFTLE1BQU0sS0FBSyxVQUFVLFNBQVMsS0FBSyxRQUFRLG9CQUFvQixJQUFJLFFBQVEsVUFBVSxTQUFTLElBQUksTUFBTSxTQUFTLFFBQVEscUJBQXFCLFFBQVEsR0FBRyxRQUFRLHFCQUFxQixTQUFTLENBQUMsRUFBRSxTQUFTLElBQUksUUFBUTtBQUFBLGNBQ3hSLElBQUksUUFBUSxhQUFhLFFBQVEsUUFBUSxlQUFlLFdBQVc7QUFBQSxnQkFDL0QsUUFBTyxZQUFZLFFBQVE7QUFBQSxjQUMvQixPQUFPO0FBQUE7QUFBQSxZQVNYLFVBQVUsVUFBVSxTQUFTLFNBQVMsTUFBTSxHQUFHO0FBQUEsY0FDM0MsT0FBTyxLQUFLLFlBQVksU0FBUyxNQUFNLFVBQVUsS0FBSyxhQUFhO0FBQUE7QUFBQSxZQVV2RSxVQUFVLGFBQWEsU0FBUyxVQUFVLENBQUMsZUFBZTtBQUFBLGNBQ3RELElBQUksa0JBQWtCLFdBQVc7QUFBQSxnQkFDN0IsZ0JBQWdCO0FBQUEsY0FDcEI7QUFBQSxjQUNBLE9BQU8sZ0JBQWdCO0FBQUE7QUFBQSxZQUUzQixPQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0gsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNILE9BQU87QUFBQSxRQUNSO0FBQUEsTUFDSCxPQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0gsT0FBTztBQUFBLElBQ1I7QUFBQSxFQUNILE9BQU8sVUFBVTtBQUFBOzs7O0VDaitaakIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsc0JBQW1CO0FBQUEsRUFDM0IsU0FBUyxRQUFRLENBQUMsVUFBVTtBQUFBLElBRXhCLElBQUksWUFBWSxNQUFNLFlBQVksSUFBSTtBQUFBLE1BQ2xDLE9BQU8sV0FBVztBQUFBLElBQ3RCO0FBQUEsSUFFQSxJQUFJLFlBQVksTUFBTSxZQUFZLEtBQUs7QUFBQSxNQUNuQyxPQUFPLFdBQVc7QUFBQSxJQUN0QjtBQUFBLElBRUEsT0FBTyxXQUFXO0FBQUE7QUFBQSxFQUV0QixTQUFTLFdBQVcsQ0FBQyxRQUFRO0FBQUEsSUFDekIsTUFBTSxNQUFNLElBQUksV0FBVyxPQUFPLFNBQVMsQ0FBQztBQUFBLElBQzVDLElBQUksU0FBUztBQUFBLElBQ2IsU0FBUyxJQUFJLEVBQUcsSUFBSSxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQUEsTUFDdkMsTUFBTSxLQUFLLFNBQVMsT0FBTyxXQUFXLENBQUMsQ0FBQztBQUFBLE1BQ3hDLE1BQU0sS0FBSyxTQUFTLE9BQU8sV0FBVyxJQUFJLENBQUMsQ0FBQztBQUFBLE1BQzVDLElBQUksWUFBYSxNQUFNLElBQUs7QUFBQSxJQUNoQztBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFFSCxzQkFBYztBQUFBOzs7O0VDeEJ0QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx5QkFBeUIseUJBQXlCLDJCQUEyQixxQkFBcUIsd0JBQXFCO0FBQUEsRUFDL0gsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sU0FBUyxhQUFhLENBQUMsUUFBUTtBQUFBLElBQzNCLE1BQU0sY0FBYyxPQUFPLEdBQVU7QUFBQSxJQUNyQyxPQUFRLE9BQU8sS0FBSyxNQUFNLE9BQU8sRUFBRSxDQUFDLElBQUksY0FBYyxPQUFPLEtBQUssTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBO0FBQUEsRUFFOUUsd0JBQWdCO0FBQUEsRUFDeEIsU0FBUyxVQUFVLENBQUMsT0FBTztBQUFBLElBQ3ZCLE1BQU0sTUFBTSxPQUFPLE9BQU8sUUFBUSxJQUFJLEtBQUssQ0FBQztBQUFBLElBQzVDLE1BQU0sT0FBTyxPQUFPLE9BQU8sUUFBUSxJQUFJLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUFBLElBQzNELE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFBQTtBQUFBLEVBRWYscUJBQWE7QUFBQSxFQUNyQixTQUFTLGdCQUFnQixDQUFDLFFBQVE7QUFBQSxJQUM5QixNQUFNLFFBQVEsY0FBYyxNQUFNO0FBQUEsSUFDbEMsT0FBTyxXQUFXLEtBQUs7QUFBQTtBQUFBLEVBRW5CLDJCQUFtQjtBQUFBLEVBQzNCLFNBQVMsY0FBYyxDQUFDLFFBQVE7QUFBQSxJQUM1QixNQUFNLFFBQVEsY0FBYyxNQUFNO0FBQUEsSUFDbEMsT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLEVBRWxCLHlCQUFpQjtBQUFBLEVBQ3pCLElBQU0sa0JBQWtCLE9BQU8sV0FBVyxjQUFjLGlCQUFpQixPQUFPO0FBQUEsRUFDaEYsU0FBUyxRQUFRLENBQUMsT0FBTztBQUFBLElBQ3JCLE9BQU87QUFBQTtBQUFBLEVBRVgsU0FBUyxtQkFBbUIsQ0FBQyxLQUFLO0FBQUEsSUFDOUIsSUFBSSxRQUFRO0FBQUEsTUFDUjtBQUFBLElBQ0osUUFBUSxHQUFHLGdCQUFnQixhQUFhLEdBQUc7QUFBQTtBQUFBLEVBRS9DLElBQU0sa0JBQWtCO0FBQUEsSUFDcEIsY0FBYztBQUFBLElBQ2QsbUJBQW1CLGdCQUFnQjtBQUFBLElBQ25DLDJCQUEyQjtBQUFBLEVBQy9CO0FBQUEsRUFDQSxTQUFTLGNBQWMsQ0FBQyxTQUFTO0FBQUEsSUFDN0IsSUFBSSxZQUFZLFdBQVc7QUFBQSxNQUN2QixPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsTUFBTSxjQUFjLFFBQVEsZUFBZTtBQUFBLElBQzNDLE1BQU0sU0FBUyxRQUFRLFVBQVU7QUFBQSxJQUNqQyxPQUFPO0FBQUEsTUFDSCxjQUFjLGNBQWMsbUJBQW1CO0FBQUEsTUFDL0MsbUJBQW1CLFNBQVMsV0FBVyxnQkFBZ0I7QUFBQSxNQUN2RCwyQkFBMkIsU0FBUyxXQUFXO0FBQUEsSUFDbkQ7QUFBQTtBQUFBLEVBRUkseUJBQWlCO0FBQUE7Ozs7RUNsRXpCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHFCQUFxQixxQkFBcUIsdUJBQXVCLHFDQUFxQyx5QkFBc0I7QUFBQSxFQUNwSSxTQUFTLGNBQWMsQ0FBQyxVQUFVO0FBQUEsSUFDOUIsTUFBTSxTQUFTO0FBQUEsTUFDWCxZQUFZLGFBQWEsU0FBUyxVQUFVO0FBQUEsTUFDNUMsd0JBQXdCO0FBQUEsSUFDNUI7QUFBQSxJQUNBLE1BQU0sWUFBWSxTQUFTO0FBQUEsSUFDM0IsSUFBSSxhQUFhLGNBQWM7QUFBQSxNQUMzQixPQUFPLFlBQVk7QUFBQSxJQUN2QixPQUFPO0FBQUE7QUFBQSxFQUVILHlCQUFpQjtBQUFBLEVBQ3pCLFNBQVMsMEJBQTBCLENBQUMsT0FBTztBQUFBLElBQ3ZDLE9BQU87QUFBQSxNQUNILE1BQU0sTUFBTTtBQUFBLE1BQ1osU0FBUyxNQUFNO0FBQUEsSUFDbkI7QUFBQTtBQUFBLEVBRUkscUNBQTZCO0FBQUEsRUFDckMsU0FBUyxZQUFZLENBQUMsWUFBWTtBQUFBLElBQzlCLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxJQUFJLFNBQU8sV0FBVyxLQUFLLFdBQVcsSUFBSSxDQUFDO0FBQUE7QUFBQSxFQUV0RSx1QkFBZTtBQUFBLEVBQ3ZCLFNBQVMsVUFBVSxDQUFDLEtBQUssT0FBTztBQUFBLElBQzVCLE9BQU87QUFBQSxNQUNIO0FBQUEsTUFDQSxPQUFPLFdBQVcsS0FBSztBQUFBLElBQzNCO0FBQUE7QUFBQSxFQUVJLHFCQUFhO0FBQUEsRUFDckIsU0FBUyxVQUFVLENBQUMsT0FBTztBQUFBLElBQ3ZCLE1BQU0sSUFBSSxPQUFPO0FBQUEsSUFDakIsSUFBSSxNQUFNO0FBQUEsTUFDTixPQUFPLEVBQUUsYUFBYSxNQUFNO0FBQUEsSUFDaEMsSUFBSSxNQUFNLFVBQVU7QUFBQSxNQUNoQixJQUFJLENBQUMsT0FBTyxVQUFVLEtBQUs7QUFBQSxRQUN2QixPQUFPLEVBQUUsYUFBYSxNQUFNO0FBQUEsTUFDaEMsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUFBLElBQzdCO0FBQUEsSUFDQSxJQUFJLE1BQU07QUFBQSxNQUNOLE9BQU8sRUFBRSxXQUFXLE1BQU07QUFBQSxJQUM5QixJQUFJLGlCQUFpQjtBQUFBLE1BQ2pCLE9BQU8sRUFBRSxZQUFZLE1BQU07QUFBQSxJQUMvQixJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUEsTUFDbkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLE1BQU0sSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUFBLElBQzNELElBQUksTUFBTSxZQUFZLFNBQVM7QUFBQSxNQUMzQixPQUFPO0FBQUEsUUFDSCxhQUFhO0FBQUEsVUFDVCxRQUFRLE9BQU8sUUFBUSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQUEsUUFDbEU7QUFBQSxNQUNKO0FBQUEsSUFDSixPQUFPLENBQUM7QUFBQTtBQUFBLEVBRUoscUJBQWE7QUFBQTs7OztFQ3ZDckIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsMEJBQTBCLHlDQUFzQztBQUFBLEVBQ3hFLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLFNBQVMsOEJBQThCLENBQUMsWUFBWSxTQUFTO0FBQUEsSUFDekQsTUFBTSxZQUFXLEdBQUcsUUFBUSxnQkFBZ0IsT0FBTztBQUFBLElBQ25ELE9BQU87QUFBQSxNQUNILGNBQWMseUJBQXlCLFlBQVksUUFBTztBQUFBLElBQzlEO0FBQUE7QUFBQSxFQUVJLHlDQUFpQztBQUFBLEVBQ3pDLFNBQVMsaUJBQWlCLENBQUMsWUFBWTtBQUFBLElBQ25DLE1BQU0sY0FBYyxJQUFJO0FBQUEsSUFDeEIsV0FBVyxXQUFVLFlBQVk7QUFBQSxNQUM3QixRQUFRLFVBQVUsd0JBQXdCLE1BQU0sb0JBQVUsSUFBSSxZQUFZLFNBQVU7QUFBQSxNQUNwRixJQUFJLFNBQVMsWUFBWSxJQUFJLFFBQVE7QUFBQSxNQUNyQyxJQUFJLENBQUMsUUFBUTtBQUFBLFFBQ1QsU0FBUyxJQUFJO0FBQUEsUUFDYixZQUFZLElBQUksVUFBVSxNQUFNO0FBQUEsTUFDcEM7QUFBQSxNQUNBLE1BQU0sU0FBUyxHQUFHLFFBQVEsWUFBVztBQUFBLE1BQ3JDLElBQUksVUFBVSxPQUFPLElBQUksTUFBTTtBQUFBLE1BQy9CLElBQUksQ0FBQyxTQUFTO0FBQUEsUUFDVixVQUFVLENBQUM7QUFBQSxRQUNYLE9BQU8sSUFBSSxRQUFRLE9BQU87QUFBQSxNQUM5QjtBQUFBLE1BQ0EsUUFBUSxLQUFLLE9BQU07QUFBQSxJQUN2QjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFFWCxTQUFTLHdCQUF3QixDQUFDLFlBQVksVUFBUztBQUFBLElBQ25ELE1BQU0sY0FBYyxrQkFBa0IsVUFBVTtBQUFBLElBQ2hELE9BQU8sTUFBTSxLQUFLLGFBQWEsRUFBRSxVQUFVLFlBQVk7QUFBQSxNQUNuRCxNQUFNLHFCQUFxQixHQUFHLFdBQVcsZ0JBQWdCLFFBQVE7QUFBQSxNQUNqRSxPQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixXQUFXLE1BQU0sS0FBSyxRQUFRLElBQUksZUFBZTtBQUFBLFVBQzdDLE9BQU87QUFBQSxZQUNILFFBQVEsR0FBRyxXQUFXLDRCQUE0QixVQUFVLEdBQUcsb0JBQW9CO0FBQUEsWUFDbkYsWUFBWSxVQUFVLElBQUksU0FBTyxZQUFZLEtBQUssUUFBTyxDQUFDO0FBQUEsWUFDMUQsV0FBVyxVQUFVLEdBQUcscUJBQXFCO0FBQUEsVUFDakQ7QUFBQSxTQUNIO0FBQUEsUUFDRCxXQUFXLGtCQUFrQjtBQUFBLE1BQ2pDO0FBQUEsS0FDSDtBQUFBO0FBQUEsRUFFTCxTQUFTLFdBQVcsQ0FBQyxLQUFLLFVBQVM7QUFBQSxJQUMvQixPQUFPO0FBQUEsTUFDSCxjQUFjLFNBQVEsYUFBYSxJQUFJLE1BQU07QUFBQSxNQUM3QyxzQkFBc0IsU0FBUSxhQUFhLElBQUksY0FBYztBQUFBLE1BQzdELGdCQUFnQixpQkFBaUIsSUFBSSxjQUFjO0FBQUEsTUFDbkQsY0FBYyxJQUFJO0FBQUEsTUFDbEIsT0FBTyxHQUFHLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFBQSxNQUN6QyxXQUFXLElBQUk7QUFBQSxNQUNmLFlBQVksZ0JBQWdCLElBQUksVUFBVTtBQUFBLE1BQzFDLHdCQUF3QixJQUFJO0FBQUEsTUFDNUIsT0FBTyxJQUFJLGFBQWE7QUFBQSxNQUN4QixTQUFTLFNBQVEsMEJBQTBCLElBQUksYUFBYSxPQUFPO0FBQUEsTUFDbkUsUUFBUSxTQUFRLDBCQUEwQixJQUFJLGFBQWEsTUFBTTtBQUFBLElBQ3JFO0FBQUE7QUFBQSxFQUVKLFNBQVMsZ0JBQWdCLENBQUMsZ0JBQWdCO0FBQUEsSUFDdEMsT0FBTztBQUFBO0FBQUEsRUFFWCxTQUFTLGVBQWUsQ0FBQyxZQUFZO0FBQUEsSUFDakMsT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLElBQUksVUFBUSxHQUFHLFdBQVcsWUFBWSxLQUFLLFdBQVcsSUFBSSxDQUFDO0FBQUE7QUFBQSxFQUV0RiwwQkFBa0I7QUFBQTs7OztFQ25GMUIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQThCO0FBQUEsRUFnQnRDLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU0sbUJBQW1CLEtBQUssY0FBYyxNQUFNLFVBQVUsS0FBSyxHQUM1RDtBQUFBLEVBQ0wsSUFBTSxrQkFBa0IsS0FBSyxjQUFjLE1BQU0sVUFBVSxLQUFLLEdBQzNEO0FBQUEsRUFJRyxpQ0FBeUI7QUFBQSxJQUM3QixrQkFBa0IsQ0FBQyxRQUFRO0FBQUEsTUFDdkIsTUFBTSxXQUFXLEdBQUcsV0FBVyxnQ0FBZ0MsR0FBRztBQUFBLE1BQ2xFLE9BQU8sZ0JBQWdCLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFBQTtBQUFBLElBRWxELHFCQUFxQixDQUFDLFFBQVE7QUFBQSxNQUMxQixPQUFPLGlCQUFpQixPQUFPLEdBQUc7QUFBQTtBQUFBLEVBRTFDO0FBQUE7Ozs7RUNuQkEsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQThCO0FBQUEsRUFDdEMsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsMEJBQTBCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLE9BQU87QUFBQSxJQUEwQixDQUFDO0FBQUE7Ozs7RUNIekksT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQThCO0FBQUEsRUFJdEMsSUFBSTtBQUFBLEdBQ0gsUUFBUyxDQUFDLHlCQUF3QjtBQUFBLElBQy9CLHdCQUF1Qix3QkFBdUIsV0FBVyxLQUFLO0FBQUEsSUFDOUQsd0JBQXVCLHdCQUF1QixnQkFBZ0IsS0FBSztBQUFBLEtBQ3BFLHlCQUFpQyxtQ0FBbUMsaUNBQXlCLENBQUMsRUFBRTtBQUFBOzs7O0VDVG5HLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHdCQUF3Qix5QkFBc0I7QUFBQSxFQUl0RCxJQUFJO0FBQUEsR0FDSCxRQUFTLENBQUMsaUJBQWdCO0FBQUEsSUFDdkIsZ0JBQWUsYUFBYTtBQUFBLElBQzVCLGdCQUFlLFdBQVc7QUFBQSxJQUMxQixnQkFBZSxlQUFlO0FBQUEsSUFDOUIsZ0JBQWUscUJBQXFCO0FBQUEsSUFDcEMsZ0JBQWUsd0JBQXdCO0FBQUEsSUFDdkMsZ0JBQWUsc0JBQXNCO0FBQUEsSUFDckMsZ0JBQWUsZ0NBQWdDO0FBQUEsS0FDaEQsaUJBQXlCLDJCQUEyQix5QkFBaUIsQ0FBQyxFQUFFO0FBQUEsRUFJM0UsSUFBSTtBQUFBLEdBQ0gsUUFBUyxDQUFDLGdCQUFlO0FBQUEsSUFNdEIsZUFBYyxlQUFjLGVBQWUsS0FBSztBQUFBLElBT2hELGVBQWMsZUFBYywyQkFBMkIsS0FBSztBQUFBLElBSTVELGVBQWMsZUFBYyxXQUFXLEtBQUs7QUFBQSxJQUs1QyxlQUFjLGVBQWMsU0FBUyxLQUFLO0FBQUEsS0FDM0MsZ0JBQXdCLDBCQUEwQix3QkFBZ0IsQ0FBQyxFQUFFO0FBQUE7Ozs7RUMxQ3hFLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELGdDQUFnQyx5QkFBeUIsb0JBQW9CLGtCQUFrQiw2Q0FBNkMsNEJBQTRCLDBCQUEwQix1QkFBdUIsaUNBQWlDLHlCQUF5Qix1QkFBb0I7QUFBQSxFQUMvUyxTQUFTLFlBQVksQ0FBQyxNQUFNO0FBQUEsSUFDeEIsT0FBTyxTQUFTLGFBQWEsU0FBUztBQUFBO0FBQUEsRUFFbEMsdUJBQWU7QUFBQSxFQUt2QixTQUFTLGNBQWMsQ0FBQyxZQUFZO0FBQUEsSUFDaEMsSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVO0FBQUEsSUFDakMsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNoQixPQUFPO0FBQUEsSUFFWCxPQUFPLEtBQUssS0FBSztBQUFBLElBQ2pCLE9BQU8sS0FBSyxVQUFVLEtBQUssSUFBSSxTQUFPLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQUE7QUFBQSxFQUV6RCx5QkFBaUI7QUFBQSxFQUt6QixTQUFTLHNCQUFzQixDQUFDLHNCQUFzQjtBQUFBLElBQ2xELE9BQU8sR0FBRyxxQkFBcUIsUUFBUSxxQkFBcUIsV0FBVyxNQUFNLHFCQUFxQixhQUFhO0FBQUE7QUFBQSxFQUUzRyxpQ0FBeUI7QUFBQTtBQUFBLEVBSWpDLE1BQU0scUJBQXFCLE1BQU07QUFBQSxJQUM3QixXQUFXLENBQUMsU0FBUztBQUFBLE1BQ2pCLE1BQU0sT0FBTztBQUFBLE1BR2IsT0FBTyxlQUFlLE1BQU0sYUFBYSxTQUFTO0FBQUE7QUFBQSxFQUUxRDtBQUFBLEVBQ1EsdUJBQWU7QUFBQSxFQVV2QixTQUFTLGVBQWUsQ0FBQyxVQUFTLFNBQVM7QUFBQSxJQUN2QyxJQUFJO0FBQUEsSUFDSixNQUFNLGlCQUFpQixJQUFJLFFBQVEsU0FBUyxlQUFlLENBQUMsVUFBVSxRQUFRO0FBQUEsTUFDMUUsZ0JBQWdCLFdBQVcsU0FBUyxjQUFjLEdBQUc7QUFBQSxRQUNqRCxPQUFPLElBQUksYUFBYSxzQkFBc0IsQ0FBQztBQUFBLFNBQ2hELE9BQU87QUFBQSxLQUNiO0FBQUEsSUFDRCxPQUFPLFFBQVEsS0FBSyxDQUFDLFVBQVMsY0FBYyxDQUFDLEVBQUUsS0FBSyxZQUFVO0FBQUEsTUFDMUQsYUFBYSxhQUFhO0FBQUEsTUFDMUIsT0FBTztBQUFBLE9BQ1IsWUFBVTtBQUFBLE1BQ1QsYUFBYSxhQUFhO0FBQUEsTUFDMUIsTUFBTTtBQUFBLEtBQ1Q7QUFBQTtBQUFBLEVBRUcsMEJBQWtCO0FBQUEsRUFJMUIsZUFBZSxpQkFBaUIsQ0FBQyxVQUFVO0FBQUEsSUFDdkMsT0FBTyxRQUFRLElBQUksU0FBUyxJQUFJLE9BQU8sTUFBTTtBQUFBLE1BQ3pDLElBQUk7QUFBQSxRQUNBLE1BQU0sTUFBTSxNQUFNO0FBQUEsUUFDbEIsT0FBTztBQUFBLFVBQ0gsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1g7QUFBQSxRQUVKLE9BQU8sR0FBRztBQUFBLFFBQ04sT0FBTztBQUFBLFVBQ0gsUUFBUTtBQUFBLFVBQ1IsUUFBUTtBQUFBLFFBQ1o7QUFBQTtBQUFBLEtBRVAsQ0FBQztBQUFBO0FBQUEsRUFFRSw0QkFBb0I7QUFBQSxFQUM1QixTQUFTLGtDQUFrQyxDQUFDLElBQUk7QUFBQSxJQUM1QyxPQUFPLEdBQUcsV0FBVztBQUFBO0FBQUEsRUFFakIsNkNBQXFDO0FBQUEsRUFJN0MsU0FBUyxPQUFPLENBQUMsS0FBSyxJQUFJO0FBQUEsSUFDdEIsTUFBTSxTQUFTLENBQUM7QUFBQSxJQUNoQixJQUFJLFFBQVEsUUFBTTtBQUFBLE1BQ2QsT0FBTyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFBQSxLQUN4QjtBQUFBLElBQ0QsT0FBTztBQUFBO0FBQUEsRUFFSCxrQkFBVTtBQUFBLEVBQ2xCLFNBQVMsU0FBUyxDQUFDLEtBQUssS0FBSztBQUFBLElBQ3pCLElBQUksSUFBSSxTQUFTLElBQUksTUFBTTtBQUFBLE1BQ3ZCLE9BQU87QUFBQSxJQUNYO0FBQUEsSUFDQSxXQUFXLFFBQVEsS0FBSztBQUFBLE1BQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHO0FBQUEsUUFDaEIsT0FBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVILG9CQUFZO0FBQUEsRUFPcEIsU0FBUyxjQUFjLENBQUMsS0FBSyxPQUFPO0FBQUEsSUFDaEMsSUFBSSxLQUFLO0FBQUEsSUFDVCxJQUFJLEtBQUssSUFBSSxTQUFTO0FBQUEsSUFDdEIsSUFBSSxNQUFNLElBQUk7QUFBQSxJQUNkLE9BQU8sTUFBTSxJQUFJO0FBQUEsTUFDYixNQUFNLE1BQU0sS0FBSyxLQUFLLE9BQU8sS0FBSyxNQUFNLENBQUM7QUFBQSxNQUN6QyxJQUFJLElBQUksT0FBTyxPQUFPO0FBQUEsUUFDbEIsS0FBSyxNQUFNO0FBQUEsTUFDZixFQUNLO0FBQUEsUUFDRCxNQUFNO0FBQUEsUUFDTixLQUFLLE1BQU07QUFBQTtBQUFBLElBRW5CO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVILHlCQUFpQjtBQUFBLEVBQ3pCLFNBQVMscUJBQXFCLENBQUMsS0FBSyxLQUFLO0FBQUEsSUFDckMsT0FBTyxJQUFJLFlBQVksTUFBTSxJQUFJLFlBQVk7QUFBQTtBQUFBLEVBRXpDLGdDQUF3QjtBQUFBOzs7O0VDMUloQyxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx5QkFBc0I7QUFBQSxFQUU5QixJQUFJO0FBQUEsR0FDSCxRQUFTLENBQUMsaUJBQWdCO0FBQUEsSUFDdkIsZ0JBQWUsZ0JBQWUsVUFBVSxLQUFLO0FBQUEsSUFDN0MsZ0JBQWUsZ0JBQWUsU0FBUyxLQUFLO0FBQUEsSUFDNUMsZ0JBQWUsZ0JBQWUsZ0JBQWdCLEtBQUs7QUFBQSxJQUNuRCxnQkFBZSxnQkFBZSxlQUFlLEtBQUs7QUFBQSxJQUNsRCxnQkFBZSxnQkFBZSwyQkFBMkIsS0FBSztBQUFBLEtBQy9ELGlCQUF5QiwyQkFBMkIseUJBQWlCLENBQUMsRUFBRTtBQUFBOzs7O0VDVjNFLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHlCQUFzQjtBQUFBLEVBQzlCLElBQU07QUFBQTtBQUFBLEVBRU4sTUFBTSxlQUFlO0FBQUEsSUFDakIsT0FBTyxRQUFRLGVBQWU7QUFBQSxJQUM5QixrQkFBa0IsR0FBRztBQUFBLE1BQ2pCO0FBQUE7QUFBQSxJQUVKLEtBQUssQ0FBQyxXQUFXLFFBQVE7QUFBQSxNQUNyQjtBQUFBO0FBQUEsSUFFSixJQUFJLENBQUMsV0FBVyxVQUFVO0FBQUEsTUFDdEI7QUFBQTtBQUFBLElBRUosWUFBWSxDQUFDLGFBQWEseUJBQXlCLDJCQUEyQixVQUFVO0FBQUEsTUFDcEY7QUFBQTtBQUFBLEVBRVI7QUFBQSxFQUNRLHlCQUFpQjtBQUFBOzs7O0VDbkJ6QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw4QkFBOEIsZ0NBQTZCO0FBQUEsRUFDbkUsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sU0FBUyx3QkFBd0IsQ0FBQyxZQUFZO0FBQUEsSUFDMUMsTUFBTSxTQUFTLFdBQVcsSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNyQyxPQUFPLEtBQUssQ0FBQztBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0gsU0FBUztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1AsV0FBVztBQUFBLE1BQ1gsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLElBQ1Q7QUFBQTtBQUFBO0FBQUEsRUFFSixNQUFNLHNCQUFzQjtBQUFBLElBQ3hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsV0FBVyxhQUFhLGdCQUFnQixNQUFNLFdBQVcseUJBQXlCLFdBQVcsR0FBRztBQUFBLE1BQ3hHLEtBQUssWUFBWTtBQUFBLE1BQ2pCLEtBQUssY0FBYztBQUFBLE1BQ25CLEtBQUssZ0JBQWdCO0FBQUEsTUFDckIsS0FBSyxXQUFXO0FBQUE7QUFBQSxJQUVwQixNQUFNLENBQUMsT0FBTztBQUFBLE1BR1YsSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQUEsUUFDckI7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLFNBQVMsU0FBUztBQUFBLE1BQ3ZCLEtBQUssU0FBUyxPQUFPO0FBQUEsTUFDckIsSUFBSSxLQUFLLGVBQWU7QUFBQSxRQUNwQixLQUFLLFNBQVMsTUFBTSxLQUFLLElBQUksT0FBTyxLQUFLLFNBQVMsR0FBRztBQUFBLFFBQ3JELEtBQUssU0FBUyxNQUFNLEtBQUssSUFBSSxPQUFPLEtBQUssU0FBUyxHQUFHO0FBQUEsUUFDckQsS0FBSyxTQUFTLFlBQVk7QUFBQSxNQUM5QjtBQUFBLE1BQ0EsTUFBTSxPQUFPLEdBQUcsUUFBUSxnQkFBZ0IsS0FBSyxhQUFhLEtBQUs7QUFBQSxNQUMvRCxLQUFLLFNBQVMsUUFBUSxPQUFPLFFBQVE7QUFBQTtBQUFBLElBRXpDLFlBQVksQ0FBQyxXQUFXO0FBQUEsTUFDcEIsS0FBSyxZQUFZO0FBQUE7QUFBQSxJQUVyQixZQUFZLEdBQUc7QUFBQSxNQUNYLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFcEI7QUFBQSxFQUNRLGdDQUF3QjtBQUFBO0FBQUEsRUFLaEMsTUFBTSxvQkFBb0I7QUFBQSxJQUN0QjtBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU8sUUFBUSxlQUFlO0FBQUEsSUFLOUIsV0FBVyxDQUFDLGFBQWEsZUFBZTtBQUFBLE1BQ3BDLEtBQUssY0FBYztBQUFBLE1BQ25CLEtBQUssZ0JBQWdCO0FBQUE7QUFBQSxJQUV6QixrQkFBa0IsQ0FBQyxXQUFXO0FBQUEsTUFDMUIsT0FBTyxJQUFJLHNCQUFzQixXQUFXLEtBQUssYUFBYSxLQUFLLGFBQWE7QUFBQTtBQUFBLElBT3BGLEtBQUssQ0FBQyxVQUFVLE9BQU87QUFBQSxNQUNuQixNQUFNLGdCQUFnQixTQUFTLGFBQWE7QUFBQSxNQUM1QyxNQUFNLGFBQWEsTUFBTSxhQUFhO0FBQUEsTUFDdEMsTUFBTSxpQkFBaUIsY0FBYyxRQUFRO0FBQUEsTUFDN0MsTUFBTSxjQUFjLFdBQVcsUUFBUTtBQUFBLE1BQ3ZDLE1BQU0sZUFBZSxJQUFJLE1BQU0sZUFBZSxNQUFNO0FBQUEsTUFDcEQsU0FBUyxNQUFNLEVBQUcsTUFBTSxlQUFlLFFBQVEsT0FBTztBQUFBLFFBQ2xELGFBQWEsT0FBTyxlQUFlLE9BQU8sWUFBWTtBQUFBLE1BQzFEO0FBQUEsTUFDQSxJQUFJLE1BQU07QUFBQSxNQUNWLElBQUksTUFBTTtBQUFBLE1BQ1YsSUFBSSxLQUFLLGVBQWU7QUFBQSxRQUNwQixJQUFJLGNBQWMsYUFBYSxXQUFXLFdBQVc7QUFBQSxVQUNqRCxNQUFNLEtBQUssSUFBSSxjQUFjLEtBQUssV0FBVyxHQUFHO0FBQUEsVUFDaEQsTUFBTSxLQUFLLElBQUksY0FBYyxLQUFLLFdBQVcsR0FBRztBQUFBLFFBQ3BELEVBQ0ssU0FBSSxjQUFjLFdBQVc7QUFBQSxVQUM5QixNQUFNLGNBQWM7QUFBQSxVQUNwQixNQUFNLGNBQWM7QUFBQSxRQUN4QixFQUNLLFNBQUksV0FBVyxXQUFXO0FBQUEsVUFDM0IsTUFBTSxXQUFXO0FBQUEsVUFDakIsTUFBTSxXQUFXO0FBQUEsUUFDckI7QUFBQSxNQUNKO0FBQUEsTUFDQSxPQUFPLElBQUksc0JBQXNCLFNBQVMsV0FBVyxjQUFjLFFBQVEsWUFBWSxLQUFLLGVBQWU7QUFBQSxRQUN2RyxTQUFTO0FBQUEsVUFDTCxZQUFZLGNBQWMsUUFBUTtBQUFBLFVBQ2xDLFFBQVE7QUFBQSxRQUNaO0FBQUEsUUFDQSxPQUFPLGNBQWMsUUFBUSxXQUFXO0FBQUEsUUFDeEMsS0FBSyxjQUFjLE1BQU0sV0FBVztBQUFBLFFBQ3BDLFdBQVcsS0FBSyxrQkFDWCxjQUFjLGFBQWEsV0FBVztBQUFBLFFBQzNDO0FBQUEsUUFDQTtBQUFBLE1BQ0osQ0FBQztBQUFBO0FBQUEsSUFLTCxJQUFJLENBQUMsVUFBVSxTQUFTO0FBQUEsTUFDcEIsTUFBTSxnQkFBZ0IsU0FBUyxhQUFhO0FBQUEsTUFDNUMsTUFBTSxlQUFlLFFBQVEsYUFBYTtBQUFBLE1BQzFDLE1BQU0saUJBQWlCLGNBQWMsUUFBUTtBQUFBLE1BQzdDLE1BQU0sZ0JBQWdCLGFBQWEsUUFBUTtBQUFBLE1BQzNDLE1BQU0sZUFBZSxJQUFJLE1BQU0sZUFBZSxNQUFNO0FBQUEsTUFDcEQsU0FBUyxNQUFNLEVBQUcsTUFBTSxlQUFlLFFBQVEsT0FBTztBQUFBLFFBQ2xELGFBQWEsT0FBTyxjQUFjLE9BQU8sZUFBZTtBQUFBLE1BQzVEO0FBQUEsTUFDQSxPQUFPLElBQUksc0JBQXNCLFFBQVEsV0FBVyxjQUFjLFFBQVEsWUFBWSxLQUFLLGVBQWU7QUFBQSxRQUN0RyxTQUFTO0FBQUEsVUFDTCxZQUFZLGNBQWMsUUFBUTtBQUFBLFVBQ2xDLFFBQVE7QUFBQSxRQUNaO0FBQUEsUUFDQSxPQUFPLGFBQWEsUUFBUSxjQUFjO0FBQUEsUUFDMUMsS0FBSyxhQUFhLE1BQU0sY0FBYztBQUFBLFFBQ3RDLFdBQVc7QUFBQSxRQUNYLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxNQUNULENBQUM7QUFBQTtBQUFBLElBRUwsWUFBWSxDQUFDLFlBQVksd0JBQXdCLDBCQUEwQixTQUFTO0FBQUEsTUFDaEYsT0FBTztBQUFBLFFBQ0g7QUFBQSxRQUNBO0FBQUEsUUFDQSxlQUFlLGFBQWEsY0FBYztBQUFBLFFBQzFDLFlBQVkseUJBQXlCLElBQUksRUFBRSxZQUFZLGtCQUFrQjtBQUFBLFVBQ3JFLE1BQU0sYUFBYSxhQUFhLGFBQWE7QUFBQSxVQUU3QyxNQUFNLHVCQUF1QixXQUFXLFNBQVMsYUFBYSxlQUFlLFNBQ3pFLFdBQVcsU0FBUyxhQUFhLGVBQWUsbUJBQ2hELFdBQVcsU0FBUyxhQUFhLGVBQWUsb0JBQ2hELFdBQVcsU0FBUyxhQUFhLGVBQWU7QUFBQSxVQUNwRCxPQUFPO0FBQUEsWUFDSDtBQUFBLFlBQ0EsV0FBVyxhQUFhO0FBQUEsWUFDeEI7QUFBQSxZQUNBLE9BQU87QUFBQSxjQUNILEtBQUssV0FBVyxZQUFZLFdBQVcsTUFBTTtBQUFBLGNBQzdDLEtBQUssV0FBVyxZQUFZLFdBQVcsTUFBTTtBQUFBLGNBQzdDLEtBQUssQ0FBQyx1QkFBdUIsV0FBVyxNQUFNO0FBQUEsY0FDOUMsU0FBUyxXQUFXO0FBQUEsY0FDcEIsT0FBTyxXQUFXO0FBQUEsWUFDdEI7QUFBQSxVQUNKO0FBQUEsU0FDSDtBQUFBLE1BQ0w7QUFBQTtBQUFBLEVBRVI7QUFBQSxFQUNRLDhCQUFzQjtBQUFBOzs7O0VDeEw5QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxrQkFBZTtBQUFBO0FBQUEsRUFnQnZCLE1BQU0sUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQWtCQSxXQUFXLENBQUMsVUFBVSxJQUFJLGdCQUFrQixZQUFZLEdBQUcsYUFBYSxHQUFHLFdBQVcsR0FBRztBQUFBLE1BQ3JGLEtBQUssVUFBVTtBQUFBLE1BQ2YsS0FBSyxZQUFZO0FBQUEsTUFDakIsS0FBSyxhQUFhO0FBQUEsTUFDbEIsS0FBSyxXQUFXO0FBQUE7QUFBQSxRQU1oQixNQUFNLEdBQUc7QUFBQSxNQUNULE9BQU8sS0FBSztBQUFBO0FBQUEsUUFNWixNQUFNLEdBQUc7QUFBQSxNQUNULElBQUksS0FBSyxRQUFRLFdBQVcsR0FBRztBQUFBLFFBQzNCLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxJQUFJLEtBQUssYUFBYSxLQUFLLGNBQWMsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHO0FBQUEsUUFDdkQsT0FBTztBQUFBLE1BQ1g7QUFBQSxNQUNBLE9BQU8sS0FBSyxXQUFXLEtBQUssYUFBYTtBQUFBO0FBQUEsSUFTN0MsTUFBTSxHQUFHO0FBQUEsTUFDTCxPQUFPLE1BQU0sS0FBSyxFQUFFLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUFBO0FBQUEsSUFRbkUsRUFBRSxDQUFDLFVBQVU7QUFBQSxNQUNULE1BQU0sT0FBTyxLQUFLLFlBQVksS0FBSztBQUFBLE1BQ25DLElBQUksV0FBVyxNQUFNO0FBQUEsUUFDakIsWUFBWSxLQUFLLFFBQVE7QUFBQSxNQUM3QjtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osT0FBTyxLQUFLLFFBQVEsUUFBUSxRQUFRO0FBQUE7QUFBQSxJQU94QyxlQUFlLENBQUMsYUFBYSxXQUFXO0FBQUEsTUFDcEMsS0FBSyxRQUFRLFVBQVUsYUFBYSxTQUFTO0FBQUE7QUFBQSxJQVFqRCxlQUFlLENBQUMsYUFBYSxXQUFXO0FBQUEsTUFDcEMsS0FBSyxRQUFRLFVBQVUsYUFBYSxTQUFTO0FBQUE7QUFBQSxJQU9qRCxJQUFJLEdBQUc7QUFBQSxNQUNILFNBQVMsSUFBSSxFQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFBQSxRQUNsQyxJQUFJLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRztBQUFBLFVBQ2xCLEtBQUssY0FBYztBQUFBLFVBQ25CO0FBQUEsUUFDSixFQUNLLFNBQUksTUFBTSxLQUFLLFNBQVMsR0FBRztBQUFBLFVBRTVCLEtBQUssYUFBYSxLQUFLLFdBQVcsS0FBSyxZQUFZO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQ0EsU0FBUyxJQUFJLEtBQUssU0FBUyxFQUFHLEtBQUssR0FBRyxLQUFLO0FBQUEsUUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUc7QUFBQSxVQUNsQixLQUFLLFlBQVksS0FBSyxTQUFTLElBQUk7QUFBQSxVQUNuQztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLFFBQVE7QUFBQTtBQUFBLElBTWpCLFNBQVMsQ0FBQyxJQUFJO0FBQUEsTUFDVixLQUFLLFFBQVE7QUFBQSxNQUNiLE1BQU0sT0FBTyxJQUFJLEtBQUssV0FBVyxLQUFLO0FBQUEsTUFDdEMsTUFBTSxPQUFPLEtBQUs7QUFBQSxNQUNsQixJQUFJLFFBQVE7QUFBQSxNQUNaLElBQUksU0FBUztBQUFBLE1BQ2IsU0FBUyxNQUFNLEtBQUssV0FBWSxPQUFPLEtBQUssWUFBVztBQUFBLFFBQ25ELElBQUksT0FBTSxNQUFNO0FBQUEsUUFDaEIsSUFBSSxPQUFNLEdBQUc7QUFBQSxVQUNULFFBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTLElBQUksS0FBSyxJQUFJLFFBQVEsUUFBUSxNQUFNLEtBQUs7QUFBQSxVQUM3QyxLQUFLLGdCQUFnQixRQUFRLEtBQUs7QUFBQSxVQUNsQztBQUFBLFVBQ0E7QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBLEtBQUssZUFBZTtBQUFBLE1BQ3BCLEtBQUssYUFBYTtBQUFBLE1BQ2xCLEtBQUssWUFBWSxLQUFLO0FBQUE7QUFBQSxJQU0xQixLQUFLLEdBQUc7QUFBQSxNQUNKLE9BQU8sSUFBSSxRQUFRLEtBQUssUUFBUSxNQUFNLEdBQUcsS0FBSyxXQUFXLEtBQUssWUFBWSxLQUFLLFFBQVE7QUFBQTtBQUFBLElBTTNGLE9BQU8sR0FBRztBQUFBLE1BQ04sTUFBTSxPQUFPLEtBQUssWUFBWSxLQUFLO0FBQUEsTUFDbkMsSUFBSSxTQUFTLEdBQUc7QUFBQSxRQUNaO0FBQUEsTUFDSixFQUNLLFNBQUksT0FBTyxHQUFHO0FBQUEsUUFDZixLQUFLLFFBQVEsUUFBUSxHQUFHLEtBQUssUUFBUSxNQUFNO0FBQUEsUUFDM0MsS0FBSyxRQUFRLFFBQVEsR0FBRyxJQUFJO0FBQUEsUUFDNUIsS0FBSyxRQUFRLFFBQVEsTUFBTSxLQUFLLFFBQVEsTUFBTTtBQUFBLE1BQ2xELEVBQ0s7QUFBQSxRQUVELEtBQUssUUFBUSxRQUFRLEdBQUcsS0FBSyxRQUFRLE1BQU07QUFBQSxRQUMzQyxLQUFLLFFBQVEsUUFBUSxHQUFHLEtBQUssUUFBUSxTQUFTLElBQUk7QUFBQTtBQUFBLE1BRXRELEtBQUssWUFBWSxLQUFLO0FBQUE7QUFBQSxJQU0xQixlQUFlLENBQUMsTUFBTSxLQUFLO0FBQUEsTUFDdkIsSUFBSSxTQUFTLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSyxnQkFBZ0IsTUFBTSxLQUFLLFFBQVEsWUFBWSxHQUFHLENBQUM7QUFBQTtBQUFBLEVBRWhFO0FBQUEsRUFDUSxrQkFBVTtBQUFBO0FBQUEsRUFLbEIsTUFBTSxlQUFlO0FBQUEsSUFDakI7QUFBQSxJQUNBLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHO0FBQUEsTUFDdkIsS0FBSyxVQUFVO0FBQUE7QUFBQSxRQU1mLE1BQU0sR0FBRztBQUFBLE1BQ1QsT0FBTyxLQUFLLFFBQVE7QUFBQTtBQUFBLElBS3hCLE9BQU8sQ0FBQyxLQUFLO0FBQUEsTUFDVCxPQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsSUFNeEIsTUFBTSxDQUFDLFNBQVMsa0JBQWtCLGtCQUFrQjtBQUFBLE1BQ2hELE1BQU0sTUFBTSxJQUFJLE1BQU0sT0FBTyxFQUFFLEtBQUssQ0FBQztBQUFBLE1BQ3JDLElBQUksT0FBTyxrQkFBa0IsS0FBSyxRQUFRLFNBQVMsa0JBQWtCLEdBQUcsS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFBQSxNQUM1RyxJQUFJLE9BQU8sR0FBRyxrQkFBa0IsR0FBRyxLQUFLLFFBQVEsTUFBTSxHQUFHLGdCQUFnQixDQUFDO0FBQUEsTUFDMUUsS0FBSyxVQUFVO0FBQUE7QUFBQSxJQUtuQixPQUFPLENBQUMsTUFBTSxPQUFPO0FBQUEsTUFDakIsTUFBTSxNQUFNLEtBQUssT0FBTyxPQUFPLFNBQVMsQ0FBQyxJQUFJO0FBQUEsTUFDN0MsU0FBUyxJQUFJLEVBQUcsSUFBSSxLQUFLLEtBQUs7QUFBQSxRQUMxQixNQUFNLE1BQU0sS0FBSyxRQUFRLE9BQU87QUFBQSxRQUNoQyxLQUFLLFFBQVEsT0FBTyxLQUFLLEtBQUssUUFBUSxRQUFRLElBQUk7QUFBQSxRQUNsRCxLQUFLLFFBQVEsUUFBUSxJQUFJLEtBQUs7QUFBQSxNQUNsQztBQUFBO0FBQUEsSUFNSixXQUFXLENBQUMsS0FBSztBQUFBLE1BQ2IsTUFBTSxNQUFNLEtBQUssUUFBUTtBQUFBLE1BQ3pCLEtBQUssUUFBUSxPQUFPO0FBQUEsTUFDcEIsT0FBTztBQUFBO0FBQUEsSUFLWCxTQUFTLENBQUMsYUFBYSxXQUFXO0FBQUEsTUFDOUIsS0FBSyxRQUFRLGdCQUFnQjtBQUFBO0FBQUEsSUFLakMsU0FBUyxDQUFDLGFBQWEsV0FBVztBQUFBLE1BQzlCLElBQUksS0FBSyxRQUFRLGdCQUFnQixXQUFXO0FBQUEsUUFDeEMsS0FBSyxRQUFRLGdCQUFnQjtBQUFBLE1BQ2pDLEVBQ0s7QUFBQSxRQUdELEtBQUssUUFBUSxlQUFlO0FBQUE7QUFBQTtBQUFBLElBTXBDLEtBQUssR0FBRztBQUFBLE1BQ0osT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDO0FBQUE7QUFBQSxFQUVuRDtBQUFBOzs7O0VDblFBLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHlCQUF5Qix5QkFBeUIsb0JBQW9CLDhCQUE4Qiw4QkFBOEIsNEJBQXlCO0FBQUEsRUFVM0osNEJBQW9CO0FBQUEsRUFLNUIsSUFBTSxnQkFBZ0I7QUFBQSxFQUt0QixJQUFNLG1CQUFtQjtBQUFBLEVBS3pCLElBQU0sZ0JBQWdCO0FBQUEsRUFLZCw4QkFBc0IsQ0FBQyxnQkFBZ0I7QUFBQSxFQUt2Qyw4QkFBc0I7QUFBQSxFQUl0QixvQkFBWSxLQUFLLElBQUksR0FBRyxLQUFLO0FBQUEsRUFVckMsU0FBUyxjQUFjLENBQUMsT0FBTztBQUFBLElBQzNCLE1BQU0sS0FBSyxJQUFJLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQztBQUFBLElBQzFDLEdBQUcsV0FBVyxHQUFHLEtBQUs7QUFBQSxJQUV0QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFBQSxJQUM3QixNQUFNLFdBQVcsU0FBUyxrQkFBa0I7QUFBQSxJQUM1QyxPQUFPLFVBQVU7QUFBQTtBQUFBLEVBRWIseUJBQWlCO0FBQUEsRUFNekIsU0FBUyxjQUFjLENBQUMsT0FBTztBQUFBLElBQzNCLE1BQU0sS0FBSyxJQUFJLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQztBQUFBLElBQzFDLEdBQUcsV0FBVyxHQUFHLEtBQUs7QUFBQSxJQUV0QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFBQSxJQUM3QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFBQSxJQUc3QixNQUFNLHFCQUFxQixTQUFTLG9CQUFvQixLQUFLLElBQUksR0FBRyxFQUFFO0FBQUEsSUFFdEUsT0FBTyxvQkFBb0I7QUFBQTtBQUFBLEVBRXZCLHlCQUFpQjtBQUFBOzs7O0VDNUV6QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw0QkFBNEIsZ0JBQWE7QUFBQSxFQWNqRCxTQUFTLEtBQUssQ0FBQyxNQUFNLEtBQUs7QUFBQSxJQUN0QixJQUFJLFNBQVMsS0FDVCxTQUFTLE9BQU8scUJBQ2hCLFNBQVMsT0FBTyxxQkFDaEIsT0FBTyxNQUFNLElBQUksR0FBRztBQUFBLE1BQ3BCLE9BQU87QUFBQSxJQUNYO0FBQUEsSUFDQSxPQUFPLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRztBQUFBO0FBQUEsRUFFekIsZ0JBQVE7QUFBQSxFQVFoQixTQUFTLGlCQUFpQixDQUFDLEdBQUc7QUFBQSxJQUkxQjtBQUFBLElBQ0EsS0FBSyxLQUFLO0FBQUEsSUFDVixLQUFLLEtBQUs7QUFBQSxJQUNWLEtBQUssS0FBSztBQUFBLElBQ1YsS0FBSyxLQUFLO0FBQUEsSUFDVixLQUFLLEtBQUs7QUFBQSxJQUNWO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVILDRCQUFvQjtBQUFBOzs7O0VDNUQ1QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx1QkFBb0I7QUFBQTtBQUFBLEVBZ0I1QixNQUFNLHFCQUFxQixNQUFNO0FBQUEsRUFDakM7QUFBQSxFQUNRLHVCQUFlO0FBQUE7Ozs7RUNuQnZCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDBCQUF1QjtBQUFBLEVBZ0IvQixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQUtOLE1BQU0sZ0JBQWdCO0FBQUEsSUFDbEI7QUFBQSxJQUNBLFdBQVcsQ0FBQyxPQUFPO0FBQUEsTUFDZixLQUFLLFNBQVMsQ0FBQztBQUFBO0FBQUEsSUFPbkIsVUFBVSxDQUFDLE9BQU87QUFBQSxNQUNkLElBQUksUUFBUSxRQUFRLFdBQVc7QUFBQSxRQUMzQixPQUFPLEtBQUssNkJBQTZCO0FBQUEsTUFDN0M7QUFBQSxNQUNBLE1BQU0sTUFBTSxRQUFRLGVBQWUsS0FBSztBQUFBLE1BS3hDLE1BQU0sYUFBYSxLQUFLLFlBQVksUUFBUSxlQUFlLEtBQUssSUFBSSxHQUFHLFFBQVEsaUJBQWlCO0FBQUEsTUFDaEcsT0FBUSxNQUFNLGNBQWUsS0FBSztBQUFBO0FBQUEsSUFRdEMsYUFBYSxDQUFDLE9BQU87QUFBQSxNQUNqQixNQUFNLFdBQVcsS0FBSyw2QkFBNkI7QUFBQSxNQUNuRCxJQUFJLFFBQVEsVUFBVTtBQUFBLFFBQ2xCLE1BQU0sSUFBSSxRQUFRLGFBQWEsY0FBYyxzQ0FBc0MsVUFBVTtBQUFBLE1BQ2pHO0FBQUEsTUFDQSxNQUFNLFdBQVcsS0FBSyw2QkFBNkI7QUFBQSxNQUNuRCxJQUFJLFFBQVEsVUFBVTtBQUFBLFFBQ2xCLE1BQU0sSUFBSSxRQUFRLGFBQWEsYUFBYSxzQ0FBc0MsVUFBVTtBQUFBLE1BQ2hHO0FBQUEsTUFDQSxPQUFPLE1BQUssTUFBTSxHQUFHLFNBQVMsS0FBSyxNQUFNO0FBQUE7QUFBQSxRQU16QyxLQUFLLEdBQUc7QUFBQSxNQUNSLElBQUksS0FBSyxXQUFXLEdBQUc7QUFBQSxRQUNuQixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsT0FBTyxDQUFDLEtBQUs7QUFBQTtBQUFBLElBRWpCLDRCQUE0QixHQUFHO0FBQUEsTUFDM0IsSUFBSSxRQUFRLFFBQVEsdUJBQXVCLEtBQUs7QUFBQSxNQUNoRCxJQUFJLEtBQUssU0FBUyxHQUFHO0FBQUEsUUFDakI7QUFBQSxNQUNKO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxJQUVYLDRCQUE0QixHQUFHO0FBQUEsTUFDM0IsT0FBTyxRQUFRLHVCQUF1QixLQUFLO0FBQUE7QUFBQSxJQUUvQyxXQUFXLENBQUMsT0FBTyxPQUFPO0FBQUEsTUFDdEIsT0FBTyxLQUFLLE1BQU0sUUFBUSxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztBQUFBO0FBQUEsRUFFckQ7QUFBQSxFQUNRLDBCQUFrQjtBQUFBOzs7O0VDdkYxQixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwyQkFBd0I7QUFBQSxFQWdCaEMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFLTixNQUFNLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxPQUFPO0FBQUEsTUFDZixLQUFLLFNBQVM7QUFBQSxNQUNkLEtBQUssZUFBZSxNQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUs7QUFBQSxNQUNoRCxLQUFLLGlCQUFpQixNQUFLLE1BQU0sS0FBSyxLQUFLLENBQUMsS0FBSztBQUFBO0FBQUEsSUFPckQsVUFBVSxDQUFDLE9BQU87QUFBQSxNQUNkLElBQUksU0FBUyxRQUFRLFdBQVc7QUFBQSxRQUM1QixPQUFPLEtBQUssNkJBQTZCLElBQUk7QUFBQSxNQUNqRDtBQUFBLE1BRUEsSUFBSSxRQUFRLGVBQWUsS0FBSyxNQUFNLEdBQUc7QUFBQSxRQUNyQyxNQUFNLE1BQU0sUUFBUSxlQUFlLEtBQUs7QUFBQSxRQUN4QyxRQUFRLE9BQU8sS0FBSyxVQUFVO0FBQUEsTUFDbEM7QUFBQSxNQUVBLE1BQU0sUUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVk7QUFBQSxNQUM1RCxNQUFNLFdBQVcsS0FBSyw2QkFBNkI7QUFBQSxNQUNuRCxJQUFJLFNBQVMsVUFBVTtBQUFBLFFBQ25CLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxJQVFYLGFBQWEsQ0FBQyxPQUFPO0FBQUEsTUFDakIsTUFBTSxXQUFXLEtBQUssNkJBQTZCO0FBQUEsTUFDbkQsSUFBSSxTQUFTLFVBQVU7QUFBQSxRQUNuQixJQUFJLFVBQVUsVUFBVTtBQUFBLFVBQ3BCLE9BQU8sSUFBSSxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUssV0FBVyxLQUFLLFlBQVk7QUFBQSxRQUN4RTtBQUFBLFFBQ0EsTUFBTSxJQUFJLFFBQVEsYUFBYSxhQUFhLHNDQUFzQyxVQUFVO0FBQUEsTUFDaEc7QUFBQSxNQUNBLE1BQU0sV0FBVyxLQUFLLDZCQUE2QjtBQUFBLE1BQ25ELElBQUksU0FBUyxVQUFVO0FBQUEsUUFDbkIsSUFBSSxVQUFVLFVBQVU7QUFBQSxVQUNwQixPQUFPLFFBQVE7QUFBQSxRQUNuQixFQUNLLFNBQUksVUFBVSxXQUFXLEdBQUc7QUFBQSxVQUM3QixPQUFPLEtBQUssS0FBSyxTQUFTLEtBQUssS0FBSyxXQUFXLEtBQUssWUFBWSxJQUFJO0FBQUEsUUFDeEU7QUFBQSxRQUNBLE1BQU0sSUFBSSxRQUFRLGFBQWEsYUFBYSxzQ0FBc0MsVUFBVTtBQUFBLE1BQ2hHO0FBQUEsTUFDQSxPQUFPLEtBQUssSUFBSSxRQUFRLEtBQUssY0FBYztBQUFBO0FBQUEsUUFNM0MsS0FBSyxHQUFHO0FBQUEsTUFDUixPQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCLDRCQUE0QixHQUFHO0FBQUEsTUFDM0IsT0FBTyxRQUFRLHVCQUF1QixLQUFLO0FBQUE7QUFBQSxJQUUvQyw0QkFBNEIsR0FBRztBQUFBLE1BQzNCLFFBQVMsUUFBUSxzQkFBc0IsS0FBTSxLQUFLLFVBQVU7QUFBQTtBQUFBLEVBRXBFO0FBQUEsRUFDUSwyQkFBbUI7QUFBQTs7OztFQy9GM0IsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQscUJBQWtCO0FBQUEsRUFnQjFCLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU0sWUFBWTtBQUFBLEVBQ2xCLElBQU0sWUFBWTtBQUFBLEVBQ2xCLElBQU0sb0JBQW9CLE1BQU0sS0FBSyxFQUFFLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO0FBQUEsSUFDM0QsSUFBSSxJQUFJLElBQUk7QUFBQSxNQUNSLE9BQU8sSUFBSSxtQkFBbUIsaUJBQWlCLElBQUksRUFBRTtBQUFBLElBQ3pEO0FBQUEsSUFDQSxPQUFPLElBQUksa0JBQWtCLGdCQUFnQixJQUFJLEVBQUU7QUFBQSxHQUN0RDtBQUFBLEVBUUQsU0FBUyxVQUFVLENBQUMsT0FBTztBQUFBLElBQ3ZCLElBQUksUUFBUSxhQUFhLFFBQVEsV0FBVztBQUFBLE1BQ3hDLE1BQU0sSUFBSSxRQUFRLGFBQWEscUJBQXFCLG1CQUFtQixtQkFBbUIsT0FBTztBQUFBLElBQ3JHO0FBQUEsSUFFQSxPQUFPLGtCQUFrQixRQUFRO0FBQUE7QUFBQSxFQUU3QixxQkFBYTtBQUFBOzs7O0VDM0JyQixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx5Q0FBeUMsMkNBQXdDO0FBQUEsRUFDekYsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFHTixNQUFNLFFBQVE7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLFdBQ08sT0FBTyxDQUFDLElBQUksSUFBSTtBQUFBLE1BQ25CLE9BQU8sSUFBSSxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztBQUFBO0FBQUEsSUFFM0UsV0FBVyxDQUFDLEtBQUssTUFBTTtBQUFBLE1BQ25CLEtBQUssTUFBTTtBQUFBLE1BQ1gsS0FBSyxPQUFPO0FBQUE7QUFBQSxFQUVwQjtBQUFBLEVBQ0EsSUFBTSxZQUFZO0FBQUEsRUFDbEIsSUFBTSxtQkFBbUI7QUFBQSxFQUN6QixJQUFNLGVBQWU7QUFBQTtBQUFBLEVBQ3JCLE1BQU0saUNBQWlDO0FBQUEsSUFDbkM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsV0FBVyxZQUFXLGtCQUFrQixnQkFBZ0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxHQUFHLGFBQWEsR0FBRyxPQUFPLE9BQU8sbUJBQW1CLE9BQU8sT0FBTyxtQkFBbUIsYUFBWSxJQUFJLFVBQVUsU0FBVyxhQUFZLElBQUksVUFBVSxTQUFXLFlBQVksR0FBRyxhQUFhLFlBQVksU0FBUyxHQUFHO0FBQUEsTUFDNVMsS0FBSyxZQUFZO0FBQUEsTUFDakIsS0FBSyxXQUFXO0FBQUEsTUFDaEIsS0FBSyxnQkFBZ0I7QUFBQSxNQUNyQixLQUFLLE9BQU87QUFBQSxNQUNaLEtBQUssU0FBUztBQUFBLE1BQ2QsS0FBSyxhQUFhO0FBQUEsTUFDbEIsS0FBSyxPQUFPO0FBQUEsTUFDWixLQUFLLE9BQU87QUFBQSxNQUNaLEtBQUssWUFBWTtBQUFBLE1BQ2pCLEtBQUssWUFBWTtBQUFBLE1BQ2pCLEtBQUssV0FBVztBQUFBLE1BQ2hCLElBQUksS0FBSyxXQUFXLGNBQWM7QUFBQSxRQUM5QixNQUFNLEtBQUssS0FBSyx5Q0FBeUMsS0FBSyw4REFDdkIsY0FBYztBQUFBLFFBQ3JELEtBQUssV0FBVztBQUFBLE1BQ3BCO0FBQUE7QUFBQSxJQU1KLE1BQU0sQ0FBQyxPQUFPO0FBQUEsTUFDVixLQUFLLGtCQUFrQixPQUFPLENBQUM7QUFBQTtBQUFBLElBTW5DLFlBQVksQ0FBQyxXQUFXO0FBQUEsTUFDcEIsS0FBSyxZQUFZO0FBQUE7QUFBQSxJQU1yQixZQUFZLEdBQUc7QUFBQSxNQUNYLE9BQU87QUFBQSxRQUNILFdBQVcsS0FBSztBQUFBLFFBQ2hCLEtBQUssS0FBSztBQUFBLFFBQ1YsS0FBSyxLQUFLO0FBQUEsUUFDVixLQUFLLEtBQUs7QUFBQSxRQUNWLFVBQVU7QUFBQSxVQUNOLFFBQVEsS0FBSyxTQUFTO0FBQUEsVUFDdEIsY0FBYyxLQUFLLFNBQVMsT0FBTztBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDTixRQUFRLEtBQUssU0FBUztBQUFBLFVBQ3RCLGNBQWMsS0FBSyxTQUFTLE9BQU87QUFBQSxRQUN2QztBQUFBLFFBQ0EsT0FBTyxLQUFLO0FBQUEsUUFDWixPQUFPLEtBQUs7QUFBQSxRQUNaLFdBQVcsS0FBSztBQUFBLE1BQ3BCO0FBQUE7QUFBQSxRQUtBLEdBQUcsR0FBRztBQUFBLE1BQ04sT0FBTyxLQUFLO0FBQUE7QUFBQSxRQUtaLEdBQUcsR0FBRztBQUFBLE1BQ04sT0FBTyxLQUFLO0FBQUE7QUFBQSxRQUtaLEdBQUcsR0FBRztBQUFBLE1BQ04sT0FBTyxLQUFLO0FBQUE7QUFBQSxRQUtaLEtBQUssR0FBRztBQUFBLE1BQ1IsT0FBTyxLQUFLO0FBQUE7QUFBQSxRQUtaLFNBQVMsR0FBRztBQUFBLE1BQ1osT0FBTyxLQUFLO0FBQUE7QUFBQSxRQUtaLEtBQUssR0FBRztBQUFBLE1BQ1IsSUFBSSxLQUFLLFdBQVcsS0FBSyxZQUFZO0FBQUEsUUFFakMsT0FBTztBQUFBLE1BQ1g7QUFBQSxNQUNBLE9BQU8sS0FBSyxTQUFTO0FBQUE7QUFBQSxRQU1yQixRQUFRLEdBQUc7QUFBQSxNQUNYLE9BQU8sS0FBSztBQUFBO0FBQUEsUUFNWixRQUFRLEdBQUc7QUFBQSxNQUNYLE9BQU8sS0FBSztBQUFBO0FBQUEsSUFRaEIsaUJBQWlCLENBQUMsT0FBTyxXQUFXO0FBQUEsTUFHaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFHO0FBQUEsUUFDckI7QUFBQSxNQUNKO0FBQUEsTUFDQSxJQUFJLFFBQVEsS0FBSyxNQUFNO0FBQUEsUUFDbkIsS0FBSyxPQUFPO0FBQUEsTUFDaEI7QUFBQSxNQUNBLElBQUksUUFBUSxLQUFLLE1BQU07QUFBQSxRQUNuQixLQUFLLE9BQU87QUFBQSxNQUNoQjtBQUFBLE1BQ0EsS0FBSyxVQUFVO0FBQUEsTUFDZixJQUFJLFVBQVUsR0FBRztBQUFBLFFBQ2IsS0FBSyxjQUFjO0FBQUEsUUFDbkI7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLFFBQVEsUUFBUTtBQUFBLE1BQ3JCLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDWCxLQUFLLGVBQWUsS0FBSyxXQUFXLE9BQU8sU0FBUztBQUFBLE1BQ3hELEVBQ0s7QUFBQSxRQUNELEtBQUssZUFBZSxLQUFLLFdBQVcsQ0FBQyxPQUFPLFNBQVM7QUFBQTtBQUFBO0FBQUEsSUFPN0QsS0FBSyxDQUFDLFVBQVU7QUFBQSxNQUNaLElBQUksS0FBSyxXQUFXLEdBQUc7QUFBQSxRQUNuQixLQUFLLE9BQU8sU0FBUztBQUFBLFFBQ3JCLEtBQUssT0FBTyxTQUFTO0FBQUEsTUFDekIsRUFDSyxTQUFJLFNBQVMsVUFBVSxHQUFHO0FBQUEsUUFDM0IsSUFBSSxTQUFTLE1BQU0sS0FBSyxLQUFLO0FBQUEsVUFDekIsS0FBSyxPQUFPLFNBQVM7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsSUFBSSxTQUFTLE1BQU0sS0FBSyxLQUFLO0FBQUEsVUFDekIsS0FBSyxPQUFPLFNBQVM7QUFBQSxRQUN6QjtBQUFBLE1BQ0o7QUFBQSxNQUNBLEtBQUssWUFBWSxTQUFTO0FBQUEsTUFDMUIsS0FBSyxRQUFRLFNBQVM7QUFBQSxNQUN0QixLQUFLLFVBQVUsU0FBUztBQUFBLE1BQ3hCLEtBQUssY0FBYyxTQUFTO0FBQUEsTUFDNUIsTUFBTSxXQUFXLEtBQUssVUFBVSxRQUFRO0FBQUEsTUFDeEMsS0FBSyxXQUFXLEtBQUssUUFBUSxRQUFRO0FBQUEsTUFDckMsS0FBSyxjQUFjLEtBQUssVUFBVSxVQUFVLFNBQVMsVUFBVSxRQUFRO0FBQUEsTUFDdkUsS0FBSyxjQUFjLEtBQUssVUFBVSxVQUFVLFNBQVMsVUFBVSxRQUFRO0FBQUE7QUFBQSxJQU0zRSxJQUFJLENBQUMsT0FBTztBQUFBLE1BQ1IsS0FBSyxPQUFPO0FBQUEsTUFDWixLQUFLLE9BQU87QUFBQSxNQUNaLEtBQUssUUFBUSxNQUFNO0FBQUEsTUFDbkIsS0FBSyxVQUFVLE1BQU07QUFBQSxNQUNyQixLQUFLLGNBQWMsTUFBTTtBQUFBLE1BQ3pCLE1BQU0sV0FBVyxLQUFLLFVBQVUsS0FBSztBQUFBLE1BQ3JDLEtBQUssV0FBVyxLQUFLLFFBQVEsUUFBUTtBQUFBLE1BQ3JDLEtBQUssYUFBYSxLQUFLLFVBQVUsT0FBTyxNQUFNLFVBQVUsUUFBUTtBQUFBLE1BQ2hFLEtBQUssYUFBYSxLQUFLLFVBQVUsT0FBTyxNQUFNLFVBQVUsUUFBUTtBQUFBO0FBQUEsSUFNcEUsS0FBSyxHQUFHO0FBQUEsTUFDSixPQUFPLElBQUksaUNBQWlDLEtBQUssV0FBVyxLQUFLLFVBQVUsS0FBSyxlQUFlLEtBQUssTUFBTSxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxTQUFTLE1BQU0sR0FBRyxLQUFLLFNBQVMsTUFBTSxHQUFHLEtBQUssUUFBUTtBQUFBO0FBQUEsSUFPN04sY0FBYyxDQUFDLFNBQVMsT0FBTyxXQUFXO0FBQUEsTUFDdEMsSUFBSSxRQUFRLEtBQUssU0FBUyxXQUFXLEtBQUs7QUFBQSxNQUUxQyxJQUFJLGtCQUFrQjtBQUFBLE1BQ3RCLElBQUksT0FBTztBQUFBLE1BQ1gsSUFBSSxNQUFNO0FBQUEsTUFDVixJQUFJLFFBQVEsV0FBVyxHQUFHO0FBQUEsUUFDdEIsUUFBUSxhQUFhO0FBQUEsUUFDckIsUUFBUSxXQUFXLFFBQVE7QUFBQSxRQUMzQixRQUFRLFlBQVksUUFBUTtBQUFBLE1BQ2hDLEVBQ0ssU0FBSSxRQUFRLFFBQVEsY0FDckIsUUFBUSxXQUFXLFNBQVMsS0FBSyxVQUFVO0FBQUEsUUFDM0Msa0JBQWtCO0FBQUEsUUFDbEIsTUFBTTtBQUFBLFFBQ04sT0FBTyxRQUFRO0FBQUEsTUFDbkIsRUFDSyxTQUFJLFFBQVEsUUFBUSxZQUNyQixRQUFRLFFBQVEsY0FBYyxLQUFLLFVBQVU7QUFBQSxRQUM3QyxrQkFBa0I7QUFBQSxRQUNsQixNQUFNLFFBQVE7QUFBQSxRQUNkLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFFQSxJQUFJLGlCQUFpQjtBQUFBLFFBQ2pCLE1BQU0sU0FBUyxLQUFLLGFBQWEsTUFBTSxHQUFHO0FBQUEsUUFDMUMsS0FBSyxXQUFXLE1BQU07QUFBQSxRQUN0QixRQUFRLEtBQUssU0FBUyxXQUFXLEtBQUs7QUFBQSxNQUMxQztBQUFBLE1BQ0EsS0FBSyxrQkFBa0IsU0FBUyxPQUFPLFNBQVM7QUFBQTtBQUFBLElBUXBELGlCQUFpQixDQUFDLFNBQVMsT0FBTyxXQUFXO0FBQUEsTUFDekMsSUFBSSxjQUFjLEdBQUc7QUFBQSxRQUVqQjtBQUFBLE1BQ0o7QUFBQSxNQUNBLElBQUksUUFBUSxXQUFXLEdBQUc7QUFBQSxRQUN0QixRQUFRLGFBQWEsUUFBUSxXQUFXLFFBQVEsWUFBWTtBQUFBLE1BQ2hFO0FBQUEsTUFDQSxJQUFJLFFBQVEsUUFBUSxZQUFZO0FBQUEsUUFDNUIsTUFBTSxPQUFPLFFBQVEsV0FBVztBQUFBLFFBQ2hDLElBQUksUUFBUSxRQUFRLFFBQVEsUUFBUTtBQUFBLFVBQ2hDLEtBQUssTUFBTSxTQUFTLE9BQU8sQ0FBQztBQUFBLFFBQ2hDO0FBQUEsUUFDQSxRQUFRLGFBQWE7QUFBQSxNQUN6QixFQUNLLFNBQUksUUFBUSxRQUFRLFVBQVU7QUFBQSxRQUMvQixNQUFNLE9BQU8sUUFBUSxRQUFRO0FBQUEsUUFDN0IsSUFBSSxRQUFRLFFBQVEsUUFBUSxRQUFRO0FBQUEsVUFDaEMsS0FBSyxNQUFNLFNBQVMsT0FBTyxDQUFDO0FBQUEsUUFDaEM7QUFBQSxRQUNBLFFBQVEsV0FBVztBQUFBLE1BQ3ZCO0FBQUEsTUFDQSxJQUFJLGNBQWMsUUFBUSxRQUFRO0FBQUEsTUFDbEMsSUFBSSxjQUFjLEdBQUc7QUFBQSxRQUNqQixlQUFlLFFBQVEsUUFBUTtBQUFBLE1BQ25DO0FBQUEsTUFDQSxRQUFRLGdCQUFnQixhQUFhLFNBQVM7QUFBQTtBQUFBLElBT2xELEtBQUssQ0FBQyxTQUFTLFFBQVE7QUFBQSxNQUNuQixNQUFNLE9BQU8sUUFBUSxRQUFRO0FBQUEsTUFDN0IsTUFBTSxPQUFPLFFBQVEsWUFBWSxRQUFRO0FBQUEsTUFDekMsTUFBTSxtQkFBbUIsT0FBTztBQUFBLE1BQ2hDLElBQUksV0FBVyxHQUFHLE9BQU8sbUJBQW1CLE1BQU07QUFBQSxNQUNsRCxJQUFJLFVBQVUsS0FBSyxVQUFVO0FBQUEsUUFDekIsVUFBVSxLQUFLO0FBQUEsTUFDbkI7QUFBQSxNQUNBLE1BQU0sbUJBQW1CLFVBQVU7QUFBQSxNQUNuQyxRQUFRLFFBQVEsT0FBTyxTQUFTLGtCQUFrQixnQkFBZ0I7QUFBQTtBQUFBLElBTXRFLFlBQVksQ0FBQyxNQUFNLEtBQUs7QUFBQSxNQUNwQixJQUFJLFNBQVM7QUFBQSxNQUNiLE9BQU8sT0FBTyxPQUFPLEtBQUssVUFBVTtBQUFBLFFBQ2hDLFNBQVM7QUFBQSxRQUNULFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDSjtBQUFBLE1BQ0EsT0FBTztBQUFBO0FBQUEsSUFLWCxVQUFVLENBQUMsUUFBUTtBQUFBLE1BQ2YsSUFBSSxXQUFXLEdBQUc7QUFBQSxRQUNkO0FBQUEsTUFDSjtBQUFBLE1BQ0EsSUFBSSxTQUFTLEdBQUc7QUFBQSxRQUdaLE1BQU0sSUFBSSxNQUFNLCtCQUErQixLQUFLLE9BQU87QUFBQSxNQUMvRDtBQUFBLE1BQ0EsTUFBTSxXQUFXLEtBQUssU0FBUyxRQUFRO0FBQUEsTUFDdkMsS0FBSyxVQUFVLFVBQVUsTUFBTTtBQUFBLE1BQy9CLEtBQUssVUFBVSxVQUFVLE1BQU07QUFBQSxNQUMvQixLQUFLLFlBQVksR0FBRyxhQUFhLFlBQVksUUFBUTtBQUFBO0FBQUEsSUFLekQsU0FBUyxDQUFDLE9BQU87QUFBQSxNQUNiLE1BQU0sV0FBVyxLQUFLLElBQUksS0FBSyxPQUFPLE1BQU0sS0FBSztBQUFBLE1BQ2pELE1BQU0sYUFBYSxRQUFRLFFBQVEsS0FBSyxnQkFBZ0IsS0FBSyxVQUFVLEtBQUssT0FBTyxRQUFRLEdBQUcsS0FBSyxnQkFBZ0IsTUFBTSxVQUFVLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFBQSxNQUN6SixNQUFNLGFBQWEsUUFBUSxRQUFRLEtBQUssZ0JBQWdCLEtBQUssVUFBVSxLQUFLLE9BQU8sUUFBUSxHQUFHLEtBQUssZ0JBQWdCLE1BQU0sVUFBVSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQUEsTUFDekosT0FBTyxLQUFLLElBQUksV0FBVyxLQUFLLGFBQWEsV0FBVyxNQUFNLFdBQVcsR0FBRyxHQUFHLFdBQVcsS0FBSyxhQUFhLFdBQVcsTUFBTSxXQUFXLEdBQUcsQ0FBQztBQUFBO0FBQUEsSUFLaEosZUFBZSxDQUFDLFNBQVMsY0FBYyxVQUFVO0FBQUEsTUFDN0MsSUFBSSxRQUFRLFdBQVcsR0FBRztBQUFBLFFBQ3RCLE9BQU8sSUFBSSxRQUFRLEdBQUcsRUFBRTtBQUFBLE1BQzVCO0FBQUEsTUFDQSxNQUFNLFFBQVEsZUFBZTtBQUFBLE1BQzdCLE9BQU8sSUFBSSxRQUFRLFFBQVEsY0FBYyxPQUFPLFFBQVEsWUFBWSxLQUFLO0FBQUE7QUFBQSxJQU03RSxhQUFhLENBQUMsTUFBTSxPQUFPLFFBQVEsT0FBTztBQUFBLE1BQ3RDLE1BQU0sY0FBYyxPQUFPO0FBQUEsTUFDM0IsTUFBTSxjQUFjLE1BQU0sUUFBUTtBQUFBLE1BQ2xDLFNBQVMsSUFBSSxFQUFHLElBQUksT0FBTyxRQUFRLEtBQUs7QUFBQSxRQUNwQyxLQUFLLGtCQUFrQixNQUFPLGNBQWMsS0FBTSxhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFBQSxNQUMvRTtBQUFBO0FBQUEsSUFNSixZQUFZLENBQUMsTUFBTSxPQUFPLFFBQVEsT0FBTztBQUFBLE1BQ3JDLE1BQU0sY0FBYyxPQUFPO0FBQUEsTUFDM0IsTUFBTSxjQUFjLE1BQU0sUUFBUTtBQUFBLE1BQ2xDLFNBQVMsSUFBSSxFQUFHLElBQUksT0FBTyxRQUFRLEtBQUs7QUFBQSxRQUNwQyxNQUFNLFdBQVksY0FBYyxLQUFNO0FBQUEsUUFDdEMsSUFBSSxjQUFjLFdBQVcsS0FBSztBQUFBLFFBQ2xDLElBQUksY0FBYyxHQUFHO0FBQUEsVUFDakIsZUFBZSxLQUFLLFFBQVE7QUFBQSxRQUNoQztBQUFBLFFBQ0EsS0FBSyxnQkFBZ0IsYUFBYSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQUEsTUFDbEQ7QUFBQSxNQUNBLEtBQUssS0FBSztBQUFBO0FBQUEsRUFFbEI7QUFBQSxFQUNRLDJDQUFtQztBQUFBO0FBQUEsRUFJM0MsTUFBTSwrQkFBK0I7QUFBQSxJQUNqQztBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU8sUUFBUSxlQUFlO0FBQUEsSUFPOUIsV0FBVyxDQUFDLFdBQVUsZUFBZTtBQUFBLE1BQ2pDLEtBQUssV0FBVztBQUFBLE1BQ2hCLEtBQUssZ0JBQWdCO0FBQUE7QUFBQSxJQUV6QixrQkFBa0IsQ0FBQyxXQUFXO0FBQUEsTUFDMUIsT0FBTyxJQUFJLGlDQUFpQyxXQUFXLEtBQUssVUFBVSxLQUFLLGFBQWE7QUFBQTtBQUFBLElBSzVGLEtBQUssQ0FBQyxVQUFVLE9BQU87QUFBQSxNQUNuQixNQUFNLFNBQVMsTUFBTSxNQUFNO0FBQUEsTUFDM0IsT0FBTyxNQUFNLFFBQVE7QUFBQSxNQUNyQixPQUFPO0FBQUE7QUFBQSxJQUtYLElBQUksQ0FBQyxVQUFVLFNBQVM7QUFBQSxNQUNwQixNQUFNLFNBQVMsUUFBUSxNQUFNO0FBQUEsTUFDN0IsT0FBTyxLQUFLLFFBQVE7QUFBQSxNQUNwQixPQUFPO0FBQUE7QUFBQSxJQUVYLFlBQVksQ0FBQyxZQUFZLHdCQUF3QiwwQkFBMEIsU0FBUztBQUFBLE1BQ2hGLE9BQU87QUFBQSxRQUNIO0FBQUEsUUFDQTtBQUFBLFFBQ0EsZUFBZSxhQUFhLGNBQWM7QUFBQSxRQUMxQyxZQUFZLHlCQUF5QixJQUFJLEVBQUUsWUFBWSxrQkFBa0I7QUFBQSxVQUNyRSxNQUFNLGFBQWEsYUFBYSxhQUFhO0FBQUEsVUFFN0MsTUFBTSx1QkFBdUIsV0FBVyxTQUFTLGFBQWEsZUFBZSxTQUN6RSxXQUFXLFNBQVMsYUFBYSxlQUFlLG1CQUNoRCxXQUFXLFNBQVMsYUFBYSxlQUFlLG9CQUNoRCxXQUFXLFNBQVMsYUFBYSxlQUFlO0FBQUEsVUFDcEQsT0FBTztBQUFBLFlBQ0g7QUFBQSxZQUNBLFdBQVcsYUFBYTtBQUFBLFlBQ3hCO0FBQUEsWUFDQSxPQUFPO0FBQUEsY0FDSCxLQUFLLFdBQVcsWUFBWSxXQUFXLE1BQU07QUFBQSxjQUM3QyxLQUFLLFdBQVcsWUFBWSxXQUFXLE1BQU07QUFBQSxjQUM3QyxLQUFLLENBQUMsdUJBQXVCLFdBQVcsTUFBTTtBQUFBLGNBQzlDLFVBQVU7QUFBQSxnQkFDTixRQUFRLFdBQVcsU0FBUztBQUFBLGdCQUM1QixjQUFjLFdBQVcsU0FBUztBQUFBLGNBQ3RDO0FBQUEsY0FDQSxVQUFVO0FBQUEsZ0JBQ04sUUFBUSxXQUFXLFNBQVM7QUFBQSxnQkFDNUIsY0FBYyxXQUFXLFNBQVM7QUFBQSxjQUN0QztBQUFBLGNBQ0EsT0FBTyxXQUFXO0FBQUEsY0FDbEIsT0FBTyxXQUFXO0FBQUEsY0FDbEIsV0FBVyxXQUFXO0FBQUEsWUFDMUI7QUFBQSxVQUNKO0FBQUEsU0FDSDtBQUFBLE1BQ0w7QUFBQTtBQUFBLEVBRVI7QUFBQSxFQUNRLHlDQUFpQztBQUFBOzs7O0VDOWN6QyxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw4QkFBOEIsZ0NBQTZCO0FBQUEsRUFDbkUsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFDTixNQUFNLHNCQUFzQjtBQUFBLElBQ3hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxXQUFXLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFBQSxNQUN0RCxLQUFLLFlBQVk7QUFBQSxNQUNqQixLQUFLLFdBQVc7QUFBQSxNQUNoQixLQUFLLGFBQWE7QUFBQTtBQUFBLElBRXRCLE1BQU0sQ0FBQyxPQUFPO0FBQUEsTUFDVixLQUFLLFdBQVc7QUFBQSxNQUNoQixLQUFLLGNBQWMsR0FBRyxPQUFPLGdCQUFnQixLQUFLLElBQUksQ0FBQztBQUFBO0FBQUEsSUFFM0QsWUFBWSxDQUFDLFdBQVc7QUFBQSxNQUNwQixLQUFLLFlBQVk7QUFBQTtBQUFBLElBRXJCLFlBQVksR0FBRztBQUFBLE1BQ1gsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVwQjtBQUFBLEVBQ1EsZ0NBQXdCO0FBQUE7QUFBQSxFQUVoQyxNQUFNLG9CQUFvQjtBQUFBLElBQ3RCLE9BQU8sUUFBUSxlQUFlO0FBQUEsSUFDOUIsa0JBQWtCLENBQUMsV0FBVztBQUFBLE1BQzFCLE9BQU8sSUFBSSxzQkFBc0IsU0FBUztBQUFBO0FBQUEsSUFPOUMsS0FBSyxDQUFDLFVBQVUsT0FBTztBQUFBLE1BRW5CLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxzQkFBc0IsTUFBTSxVQUFVLE1BQ3ZFLEdBQUcsT0FBTyxzQkFBc0IsU0FBUyxVQUFVLElBQ2xELFFBQ0E7QUFBQSxNQUNOLE9BQU8sSUFBSSxzQkFBc0IsU0FBUyxXQUFXLG1CQUFtQixhQUFhLEdBQUcsbUJBQW1CLFVBQVU7QUFBQTtBQUFBLElBUXpILElBQUksQ0FBQyxVQUFVLFNBQVM7QUFBQSxNQUVwQixNQUFNLHNCQUFzQixHQUFHLE9BQU8sc0JBQXNCLFFBQVEsVUFBVSxNQUN6RSxHQUFHLE9BQU8sc0JBQXNCLFNBQVMsVUFBVSxJQUNsRCxVQUNBO0FBQUEsTUFDTixPQUFPLElBQUksc0JBQXNCLFFBQVEsV0FBVyxtQkFBbUIsYUFBYSxHQUFHLG1CQUFtQixVQUFVO0FBQUE7QUFBQSxJQUV4SCxZQUFZLENBQUMsWUFBWSx3QkFBd0IsMEJBQTBCLFNBQVM7QUFBQSxNQUNoRixPQUFPO0FBQUEsUUFDSDtBQUFBLFFBQ0E7QUFBQSxRQUNBLGVBQWUsYUFBYSxjQUFjO0FBQUEsUUFDMUMsWUFBWSx5QkFBeUIsSUFBSSxFQUFFLFlBQVksa0JBQWtCO0FBQUEsVUFDckUsT0FBTztBQUFBLFlBQ0g7QUFBQSxZQUNBLFdBQVcsYUFBYTtBQUFBLFlBQ3hCO0FBQUEsWUFDQSxPQUFPLGFBQWEsYUFBYTtBQUFBLFVBQ3JDO0FBQUEsU0FDSDtBQUFBLE1BQ0w7QUFBQTtBQUFBLEVBRVI7QUFBQSxFQUNRLDhCQUFzQjtBQUFBOzs7O0VDM0U5QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx3QkFBd0IsMEJBQXVCO0FBQUEsRUFDdkQsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFDTixNQUFNLGdCQUFnQjtBQUFBLElBQ2xCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsV0FBVyxXQUFXLFdBQVcsR0FBRyxTQUFRLE9BQU87QUFBQSxNQUMzRCxLQUFLLFlBQVk7QUFBQSxNQUNqQixLQUFLLFlBQVk7QUFBQSxNQUNqQixLQUFLLFdBQVc7QUFBQSxNQUNoQixLQUFLLFFBQVE7QUFBQTtBQUFBLElBRWpCLE1BQU0sQ0FBQyxPQUFPO0FBQUEsTUFDVixJQUFJLEtBQUssYUFBYSxRQUFRLEdBQUc7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFBQSxNQUNBLEtBQUssWUFBWTtBQUFBO0FBQUEsSUFFckIsWUFBWSxDQUFDLFdBQVc7QUFBQSxNQUNwQixLQUFLLFlBQVk7QUFBQTtBQUFBLElBRXJCLFlBQVksR0FBRztBQUFBLE1BQ1gsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVwQjtBQUFBLEVBQ1EsMEJBQWtCO0FBQUE7QUFBQSxFQUUxQixNQUFNLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsT0FBTyxRQUFRLGVBQWU7QUFBQSxJQUM5QixXQUFXLENBQUMsV0FBVztBQUFBLE1BQ25CLEtBQUssWUFBWTtBQUFBO0FBQUEsSUFFckIsa0JBQWtCLENBQUMsV0FBVztBQUFBLE1BQzFCLE9BQU8sSUFBSSxnQkFBZ0IsV0FBVyxLQUFLLFNBQVM7QUFBQTtBQUFBLElBS3hELEtBQUssQ0FBQyxVQUFVLE9BQU87QUFBQSxNQUNuQixNQUFNLFNBQVMsU0FBUyxhQUFhO0FBQUEsTUFDckMsTUFBTSxVQUFVLE1BQU0sYUFBYTtBQUFBLE1BQ25DLElBQUksTUFBTSxPQUFPO0FBQUEsUUFDYixPQUFPLElBQUksZ0JBQWdCLE1BQU0sV0FBVyxLQUFLLFdBQVcsU0FBUyxNQUFNLEtBQUs7QUFBQSxNQUNwRjtBQUFBLE1BQ0EsT0FBTyxJQUFJLGdCQUFnQixTQUFTLFdBQVcsS0FBSyxXQUFXLFNBQVMsT0FBTztBQUFBO0FBQUEsSUFLbkYsSUFBSSxDQUFDLFVBQVUsU0FBUztBQUFBLE1BQ3BCLE1BQU0sU0FBUyxTQUFTLGFBQWE7QUFBQSxNQUNyQyxNQUFNLFNBQVMsUUFBUSxhQUFhO0FBQUEsTUFNcEMsSUFBSSxLQUFLLGFBQWEsU0FBUyxRQUFRO0FBQUEsUUFDbkMsT0FBTyxJQUFJLGdCQUFnQixRQUFRLFdBQVcsS0FBSyxXQUFXLFFBQVEsSUFBSTtBQUFBLE1BQzlFO0FBQUEsTUFDQSxPQUFPLElBQUksZ0JBQWdCLFFBQVEsV0FBVyxLQUFLLFdBQVcsU0FBUyxNQUFNO0FBQUE7QUFBQSxJQUVqRixZQUFZLENBQUMsWUFBWSx3QkFBd0IsMEJBQTBCLFNBQVM7QUFBQSxNQUNoRixPQUFPO0FBQUEsUUFDSDtBQUFBLFFBQ0E7QUFBQSxRQUNBLGVBQWUsYUFBYSxjQUFjO0FBQUEsUUFDMUMsWUFBWSx5QkFBeUIsSUFBSSxFQUFFLFlBQVksa0JBQWtCO0FBQUEsVUFDckUsT0FBTztBQUFBLFlBQ0g7QUFBQSxZQUNBLFdBQVcsYUFBYTtBQUFBLFlBQ3hCO0FBQUEsWUFDQSxPQUFPLGFBQWEsYUFBYTtBQUFBLFVBQ3JDO0FBQUEsU0FDSDtBQUFBLFFBQ0QsYUFBYSxLQUFLO0FBQUEsTUFDdEI7QUFBQTtBQUFBLEVBRVI7QUFBQSxFQUNRLHdCQUFnQjtBQUFBOzs7O0VDbkZ4QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx3QkFBd0IsMEJBQTBCLDhCQUE4QixnQ0FBZ0MseUNBQXlDLDJDQUEyQyw4QkFBOEIsZ0NBQWdDLHlCQUFzQjtBQUFBLEVBQ2hTLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLGtCQUFrQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxPQUFPO0FBQUEsSUFBa0IsQ0FBQztBQUFBLEVBQ3pILElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHlCQUF5QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxZQUFZO0FBQUEsSUFBeUIsQ0FBQztBQUFBLEVBQzVJLE9BQU8sZUFBZSxTQUFTLHVCQUF1QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxZQUFZO0FBQUEsSUFBdUIsQ0FBQztBQUFBLEVBQ3hJLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLG9DQUFvQyxFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyx1QkFBdUI7QUFBQSxJQUFvQyxDQUFDO0FBQUEsRUFDN0ssT0FBTyxlQUFlLFNBQVMsa0NBQWtDLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLHVCQUF1QjtBQUFBLElBQWtDLENBQUM7QUFBQSxFQUN6SyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyx5QkFBeUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sWUFBWTtBQUFBLElBQXlCLENBQUM7QUFBQSxFQUM1SSxPQUFPLGVBQWUsU0FBUyx1QkFBdUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sWUFBWTtBQUFBLElBQXVCLENBQUM7QUFBQSxFQUN4SSxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxtQkFBbUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sTUFBTTtBQUFBLElBQW1CLENBQUM7QUFBQSxFQUMxSCxPQUFPLGVBQWUsU0FBUyxpQkFBaUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sTUFBTTtBQUFBLElBQWlCLENBQUM7QUFBQTs7OztFQ2Z0SCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw4QkFBOEIsNENBQTRDLGdDQUFnQyxpQ0FBaUMsMEJBQTBCLDJCQUEyQiw2QkFBNkIsMENBQTBDLDZDQUE2QywrQkFBK0IsK0JBQStCLHlCQUF5QiwwQkFBdUI7QUFBQSxFQUMxYSxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQUlOLE1BQU0sZ0JBQWdCO0FBQUEsV0FDWCxtQkFBbUIsSUFBSSxhQUFhO0FBQUEsSUFDM0MsZ0JBQWdCLENBQUMsYUFBYTtBQUFBLE1BQzFCLE9BQU8sZ0JBQWdCO0FBQUE7QUFBQSxFQUUvQjtBQUFBLEVBQ1EsMEJBQWtCO0FBQUE7QUFBQSxFQUkxQixNQUFNLGVBQWU7QUFBQSxXQUNWLHFCQUFxQixJQUFJLGFBQWEsY0FBYyxJQUFJO0FBQUEsV0FDeEQseUJBQXlCLElBQUksYUFBYSxjQUFjLEtBQUs7QUFBQSxJQUNwRSxnQkFBZ0IsQ0FBQyxZQUFZO0FBQUEsTUFDekIsUUFBUSxXQUFXO0FBQUEsYUFDVixhQUFhLGVBQWU7QUFBQSxhQUM1QixhQUFhLGVBQWU7QUFBQSxhQUM1QixhQUFhLGVBQWUsV0FBVztBQUFBLFVBQ3hDLE9BQU8sZUFBZTtBQUFBLFFBQzFCO0FBQUEsaUJBQ1M7QUFBQSxVQUNMLE9BQU8sZUFBZTtBQUFBLFFBQzFCO0FBQUE7QUFBQTtBQUFBLEVBR1o7QUFBQSxFQUNRLHlCQUFpQjtBQUFBO0FBQUEsRUFJekIsTUFBTSxxQkFBcUI7QUFBQSxXQUNoQixtQkFBbUIsSUFBSSxhQUFhO0FBQUEsSUFDM0MsZ0JBQWdCLENBQUMsYUFBYTtBQUFBLE1BQzFCLE9BQU8scUJBQXFCO0FBQUE7QUFBQSxFQUVwQztBQUFBLEVBQ1EsK0JBQXVCO0FBQUE7QUFBQSxFQUsvQixNQUFNLHFCQUFxQjtBQUFBLFdBQ2hCLG1CQUFtQixJQUFJLGFBQWEsb0JBQW9CLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUssR0FBRyxJQUFJO0FBQUEsSUFDOUksZ0JBQWdCLENBQUMsYUFBYTtBQUFBLE1BQzFCLE9BQU8scUJBQXFCO0FBQUE7QUFBQSxFQUVwQztBQUFBLEVBQ1EsK0JBQXVCO0FBQUE7QUFBQSxFQUkvQixNQUFNLG1DQUFtQztBQUFBLElBQ3JDO0FBQUEsSUFDQTtBQUFBLElBS0EsV0FBVyxDQUFDLFlBQVksZ0JBQWdCLE1BQU07QUFBQSxNQUMxQyxLQUFLLGdCQUFnQjtBQUFBLE1BQ3JCLElBQUksY0FBYyxNQUFNO0FBQUEsUUFDcEIsTUFBTSxJQUFJLE1BQU0scUpBQXFKO0FBQUEsTUFDeks7QUFBQSxNQUVBLGFBQWEsV0FBVyxPQUFPO0FBQUEsTUFHL0IsYUFBYSxXQUFXLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDO0FBQUEsTUFFNUMsTUFBTSxxQkFBcUIsV0FBVyxZQUFZLFNBQVM7QUFBQSxNQUMzRCxJQUFJLGdCQUFnQixXQUFXLFFBQVEsUUFBUTtBQUFBLE1BQy9DLElBQUksa0JBQWtCLElBQUk7QUFBQSxRQUN0QixnQkFBZ0I7QUFBQSxNQUNwQjtBQUFBLE1BQ0EsS0FBSyxjQUFjLFdBQVcsTUFBTSxxQkFBcUIsR0FBRyxhQUFhO0FBQUE7QUFBQSxJQUU3RSxnQkFBZ0IsQ0FBQyxhQUFhO0FBQUEsTUFDMUIsT0FBTyxJQUFJLGFBQWEsb0JBQW9CLEtBQUssYUFBYSxLQUFLLGFBQWE7QUFBQTtBQUFBLEVBRXhGO0FBQUEsRUFDUSw2Q0FBcUM7QUFBQTtBQUFBLEVBQzdDLE1BQU0sZ0NBQWdDO0FBQUEsSUFDbEM7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsWUFBVyxLQUFLLGdCQUFnQixNQUFNO0FBQUEsTUFDOUMsS0FBSyxXQUFXO0FBQUEsTUFDaEIsS0FBSyxnQkFBZ0I7QUFBQTtBQUFBLElBRXpCLGdCQUFnQixDQUFDLGFBQWE7QUFBQSxNQUMxQixPQUFPLElBQUksYUFBYSwrQkFBK0IsS0FBSyxVQUFVLEtBQUssYUFBYTtBQUFBO0FBQUEsRUFFaEc7QUFBQSxFQUNRLDBDQUFrQztBQUFBO0FBQUEsRUFJMUMsTUFBTSxtQkFBbUI7QUFBQSxJQUNyQixRQUFRLENBQUMsWUFBWTtBQUFBLE1BRWpCLFFBQVEsV0FBVztBQUFBLGFBQ1YsYUFBYSxlQUFlO0FBQUEsYUFDNUIsYUFBYSxlQUFlO0FBQUEsYUFDNUIsYUFBYSxlQUFlO0FBQUEsYUFDNUIsYUFBYSxlQUFlLDRCQUE0QjtBQUFBLFVBQ3pELE9BQWU7QUFBQSxRQUNuQjtBQUFBLGFBQ0ssYUFBYSxlQUFlO0FBQUEsYUFDNUIsYUFBYSxlQUFlLGtCQUFrQjtBQUFBLFVBQy9DLE9BQWU7QUFBQSxRQUNuQjtBQUFBLGFBQ0ssYUFBYSxlQUFlLFdBQVc7QUFBQSxVQUN4QyxJQUFJLFdBQVcsT0FBTywwQkFBMEI7QUFBQSxZQUM1QyxPQUFPLElBQUksbUNBQW1DLFdBQVcsT0FBTyx3QkFBd0I7QUFBQSxVQUM1RjtBQUFBLFVBQ0EsT0FBZTtBQUFBLFFBQ25CO0FBQUE7QUFBQSxNQUVKLEtBQUksS0FBSyxLQUFLLHdDQUF3QyxXQUFXLE1BQU07QUFBQSxNQUN2RSxPQUFlO0FBQUE7QUFBQSxJQUVuQixnQkFBZ0IsQ0FBQyxZQUFZO0FBQUEsTUFDekIsT0FBTyxLQUFLLFNBQVMsVUFBVSxFQUFFLGlCQUFpQixVQUFVO0FBQUE7QUFBQSxFQUVwRTtBQUFBLEVBQ1EsNkJBQXFCO0FBQUEsRUFDckIsMkJBQW1CLElBQUk7QUFBQSxFQUN2QiwwQkFBa0IsSUFBSTtBQUFBLEVBQ3RCLGlDQUF5QixJQUFJO0FBQUEsRUFDN0IsZ0NBQXdCLElBQUk7QUFBQSxFQUM1Qiw0Q0FBb0MsSUFBSTtBQUFBLEVBQ3hDLDhCQUFzQixJQUFJO0FBQUE7Ozs7RUN6SmxDLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHdCQUF3QiwwQkFBdUI7QUFBQSxFQWdCdkQsSUFBTTtBQUFBLEVBQ04sSUFBSTtBQUFBLEdBQ0gsUUFBUyxDQUFDLGtCQUFpQjtBQUFBLElBQ3hCLGlCQUFnQixpQkFBZ0IsYUFBYSxLQUFLO0FBQUEsSUFDbEQsaUJBQWdCLGlCQUFnQixVQUFVLEtBQUs7QUFBQSxJQUMvQyxpQkFBZ0IsaUJBQWdCLFNBQVMsS0FBSztBQUFBLElBQzlDLGlCQUFnQixpQkFBZ0IsZ0JBQWdCLEtBQUs7QUFBQSxJQUNyRCxpQkFBZ0IsaUJBQWdCLCtCQUErQixLQUFLO0FBQUEsSUFDcEUsaUJBQWdCLGlCQUFnQiwyQkFBMkIsS0FBSztBQUFBLEtBQ2pFLGtCQUEwQiw0QkFBNEIsMEJBQWtCLENBQUMsRUFBRTtBQUFBLEVBQzlFLFNBQVMsYUFBYSxDQUFDLFFBQVE7QUFBQSxJQUMzQixRQUFRLE9BQU87QUFBQSxXQUNOLGdCQUFnQjtBQUFBLFFBQ2pCLE9BQU8sY0FBYztBQUFBLFdBQ3BCLGdCQUFnQjtBQUFBLFFBQ2pCLE9BQU8sY0FBYztBQUFBLFdBQ3BCLGdCQUFnQjtBQUFBLFFBQ2pCLE9BQU8sY0FBYztBQUFBLFdBQ3BCLGdCQUFnQjtBQUFBLFFBQ2pCLE9BQU8sY0FBYztBQUFBLFdBQ3BCLGdCQUFnQix1QkFBdUI7QUFBQSxRQUN4QyxNQUFNLFlBQVk7QUFBQSxRQUNsQixPQUFPLElBQUksY0FBYyxnQ0FBZ0MsVUFBVSxTQUFTLFNBQVMsVUFBVSxTQUFTLFlBQVk7QUFBQSxNQUN4SDtBQUFBLFdBQ0ssZ0JBQWdCLDJCQUEyQjtBQUFBLFFBQzVDLE1BQU0sWUFBWTtBQUFBLFFBQ2xCLElBQUksVUFBVSxXQUFXLE1BQU07QUFBQSxVQUMzQixPQUFPLGNBQWM7QUFBQSxRQUN6QixFQUNLO0FBQUEsVUFDRCxPQUFPLElBQUksY0FBYyxtQ0FBbUMsVUFBVSxTQUFTLFlBQVksVUFBVSxTQUFTLFlBQVk7QUFBQTtBQUFBLE1BRWxJO0FBQUE7QUFBQSxRQUVJLE1BQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBO0FBQUE7QUFBQSxFQUc3Qyx3QkFBZ0I7QUFBQTs7OztFQ3ZDeEIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsbURBQW1ELHVDQUFvQztBQUFBLEVBQy9GLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU0sK0JBQStCLHFCQUFtQjtBQUFBLElBQ3BELE9BQU87QUFBQSxNQUNILE1BQU0sb0JBQW9CLGdCQUFnQjtBQUFBLElBQzlDO0FBQUE7QUFBQSxFQUVJLHVDQUErQjtBQUFBLEVBQ3ZDLElBQU0sMkNBQTJDLHFCQUFtQix5QkFBeUIsdUJBQXVCO0FBQUEsRUFDNUcsbURBQTJDO0FBQUE7Ozs7RUNYbkQsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsdUJBQW9CO0FBQUEsRUFDNUIsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFLTixNQUFNLGFBQWE7QUFBQSxJQUdmLFlBQVk7QUFBQSxJQUVaO0FBQUEsSUFFQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsV0FBVyxDQUFDLFNBQVM7QUFBQSxNQUNqQixLQUFLLHVCQUNELFNBQVMsdUJBQXVCLHNCQUFzQjtBQUFBLE1BQzFELEtBQUssa0NBQ0QsU0FBUyxrQ0FDTCxzQkFBc0I7QUFBQSxNQUM5QixLQUFLLG1CQUFtQixTQUFTLG1CQUFtQixDQUFDO0FBQUEsTUFDckQsS0FBSyx1QkFBdUIsU0FBUztBQUFBO0FBQUEsSUFFekMsaUJBQWlCLENBQUMsZ0JBQWdCO0FBQUEsTUFDOUIsSUFBSSxLQUFLLG9CQUFvQjtBQUFBLFFBQ3pCLE1BQU0sSUFBSSxNQUFNLHlEQUF5RDtBQUFBLE1BQzdFO0FBQUEsTUFDQSxLQUFLLHFCQUFxQjtBQUFBLE1BQzFCLEtBQUssY0FBYztBQUFBO0FBQUEsSUFFdkIsaUJBQWlCLENBQUMsZ0JBQWdCO0FBQUEsTUFDOUIsT0FBTyxLQUFLLHFCQUFxQixjQUFjO0FBQUE7QUFBQSxJQUVuRCw0QkFBNEIsQ0FBQyxnQkFBZ0I7QUFBQSxNQUN6QyxPQUFPLEtBQUssZ0NBQWdDLGNBQWM7QUFBQTtBQUFBLElBRTlELHNCQUFzQixDQUFDLGdCQUFnQjtBQUFBLE1BQ25DLE9BQU8sS0FBSyx1QkFDTixLQUFLLHFCQUFxQixjQUFjLElBQ3hDO0FBQUE7QUFBQSxJQU1WLGFBQWEsR0FBRztBQUFBLFNBR1YsUUFBTyxDQUFDLFNBQVM7QUFBQSxNQUNuQixJQUFJLEtBQUssdUJBQXVCLFdBQVc7QUFBQSxRQUN2QyxNQUFNLElBQUksTUFBTSwrQ0FBK0M7QUFBQSxNQUNuRTtBQUFBLE1BRUEsSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUNoQixNQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxNQUM5QztBQUFBLE1BQ0EsT0FBTyx5QkFBeUIsK0JBQStCLE1BQU0sUUFBUSxJQUFJO0FBQUEsUUFDN0UsS0FBSyxtQkFBbUIsUUFBUTtBQUFBLFVBQzVCLGVBQWUsU0FBUztBQUFBLFFBQzVCLENBQUM7QUFBQSxRQUNELEdBQUcsS0FBSyxpQkFBaUIsSUFBSSxjQUFZLFNBQVMsUUFBUTtBQUFBLFVBQ3RELGVBQWUsU0FBUztBQUFBLFFBQzVCLENBQUMsQ0FBQztBQUFBLE1BQ04sQ0FBQztBQUFBLE1BRUQsTUFBTSxVQUFTLHFCQUFxQixPQUFPLFFBQVEsR0FBRyxRQUFRLFNBQVMsNkJBQTZCLFlBQVUsT0FBTyxNQUFNLENBQUM7QUFBQSxNQUM1SCxNQUFNLFdBQVcscUJBQXFCLGdCQUFnQjtBQUFBLE1BQ3RELE1BQU0sZUFBZSxxQkFBcUIsZ0JBQWdCLGFBQWEsUUFBUSxHQUFHLFFBQVEsU0FBUyw2QkFBNkIsWUFBVSxPQUFPLGdCQUFnQixZQUFZLENBQUM7QUFBQSxNQUM5SyxPQUFPO0FBQUEsUUFDSCxpQkFBaUI7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBO0FBQUEsU0FFRSxTQUFRLENBQUMsU0FBUztBQUFBLE1BRXBCLElBQUksS0FBSyxXQUFXO0FBQUEsUUFDaEIsS0FBSSxLQUFLLE1BQU0sNkJBQTZCO0FBQUEsUUFDNUM7QUFBQSxNQUNKO0FBQUEsTUFFQSxJQUFJLFNBQVMsaUJBQWlCLE1BQU07QUFBQSxRQUNoQyxNQUFNLEtBQUssV0FBVztBQUFBLE1BQzFCLEVBQ0s7QUFBQSxRQUNELE9BQU8sR0FBRyxRQUFRLGlCQUFpQixLQUFLLFdBQVcsR0FBRyxRQUFRLGFBQWE7QUFBQTtBQUFBLE1BRS9FLEtBQUssWUFBWTtBQUFBO0FBQUEsU0FFZixXQUFVLENBQUMsU0FBUztBQUFBLE1BQ3RCLElBQUksS0FBSyxXQUFXO0FBQUEsUUFDaEIsS0FBSSxLQUFLLEtBQUsscURBQXFEO0FBQUEsUUFDbkU7QUFBQSxNQUNKO0FBQUEsTUFFQSxJQUFJLFNBQVMsaUJBQWlCLE1BQU07QUFBQSxRQUNoQyxNQUFNLEtBQUssYUFBYTtBQUFBLFFBQ3hCO0FBQUEsTUFDSjtBQUFBLE1BQ0EsT0FBTyxHQUFHLFFBQVEsaUJBQWlCLEtBQUssYUFBYSxHQUFHLFFBQVEsYUFBYTtBQUFBO0FBQUEsRUFFckY7QUFBQSxFQUNRLHVCQUFlO0FBQUE7Ozs7RUM5R3ZCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHdDQUFxQztBQUFBLEVBQzdDLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQTtBQUFBLEVBS04sTUFBTSxzQ0FBc0MsZUFBZSxhQUFhO0FBQUEsSUFDcEU7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxTQUFTO0FBQUEsTUFDakIsTUFBTTtBQUFBLFFBQ0YscUJBQXFCLFFBQVEsU0FBUyxtQkFBbUIsS0FBSyxRQUFRLFFBQVE7QUFBQSxRQUM5RSxnQ0FBZ0MsUUFBUSxTQUFTLDhCQUE4QixLQUFLLFFBQVEsUUFBUTtBQUFBLFFBQ3BHLGlCQUFpQixRQUFRO0FBQUEsTUFDN0IsQ0FBQztBQUFBLE1BQ0QsSUFBSSxRQUFRLHlCQUF5QixhQUNqQyxRQUFRLHdCQUF3QixHQUFHO0FBQUEsUUFDbkMsTUFBTSxNQUFNLDZDQUE2QztBQUFBLE1BQzdEO0FBQUEsTUFDQSxJQUFJLFFBQVEsd0JBQXdCLGFBQ2hDLFFBQVEsdUJBQXVCLEdBQUc7QUFBQSxRQUNsQyxNQUFNLE1BQU0sNENBQTRDO0FBQUEsTUFDNUQ7QUFBQSxNQUNBLElBQUksUUFBUSx3QkFBd0IsYUFDaEMsUUFBUSx5QkFBeUIsYUFDakMsUUFBUSx1QkFBdUIsUUFBUSxxQkFBcUI7QUFBQSxRQUM1RCxNQUFNLE1BQU0sMkVBQTJFO0FBQUEsTUFDM0Y7QUFBQSxNQUNBLEtBQUssa0JBQWtCLFFBQVEsd0JBQXdCO0FBQUEsTUFDdkQsS0FBSyxpQkFBaUIsUUFBUSx1QkFBdUI7QUFBQSxNQUNyRCxLQUFLLFlBQVksUUFBUTtBQUFBO0FBQUEsU0FFdkIsU0FBUSxHQUFHO0FBQUEsTUFDYixJQUFJO0FBQUEsUUFDQSxPQUFPLEdBQUcsUUFBUSxpQkFBaUIsS0FBSyxPQUFPLEdBQUcsS0FBSyxjQUFjO0FBQUEsUUFFekUsT0FBTyxLQUFLO0FBQUEsUUFDUixJQUFJLGVBQWUsUUFBUSxjQUFjO0FBQUEsVUFDckMsS0FBSSxLQUFLLE1BQU0sMERBQTBELEtBQUssY0FBYztBQUFBLFVBQzVGO0FBQUEsUUFDSjtBQUFBLFNBQ0MsR0FBRyxPQUFPLG9CQUFvQixHQUFHO0FBQUE7QUFBQTtBQUFBLFNBR3BDLE9BQU0sR0FBRztBQUFBLE1BQ1gsUUFBUSxpQkFBaUIsb0JBQVcsTUFBTSxLQUFLLFFBQVE7QUFBQSxRQUNuRCxlQUFlLEtBQUs7QUFBQSxNQUN4QixDQUFDO0FBQUEsTUFDRCxJQUFJLFFBQU8sU0FBUyxHQUFHO0FBQUEsUUFDbkIsS0FBSSxLQUFLLE1BQU0sNERBQTRELEdBQUcsT0FBTTtBQUFBLE1BQ3hGO0FBQUEsTUFDQSxJQUFJLGdCQUFnQixTQUFTLHdCQUF3QjtBQUFBLFFBQ2pELElBQUk7QUFBQSxVQUNBLE1BQU0sZ0JBQWdCLFNBQVMseUJBQXlCO0FBQUEsVUFFNUQsT0FBTyxHQUFHO0FBQUEsVUFDTixLQUFJLEtBQUssTUFBTSxxREFBcUQsQ0FBQztBQUFBLFdBQ3BFLEdBQUcsT0FBTyxvQkFBb0IsQ0FBQztBQUFBO0FBQUEsTUFFeEM7QUFBQSxNQUNBLElBQUksZ0JBQWdCLGFBQWEsV0FBVyxHQUFHO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBQUEsTUFDQSxNQUFNLFNBQVMsTUFBTSxPQUFPLFNBQVMsUUFBUSxLQUFLLFdBQVcsZUFBZTtBQUFBLE1BQzVFLElBQUksT0FBTyxTQUFTLE9BQU8saUJBQWlCLFNBQVM7QUFBQSxRQUNqRCxNQUFNLElBQUksTUFBTSwrREFBK0QsT0FBTyxRQUFRO0FBQUEsTUFDbEc7QUFBQTtBQUFBLElBRUosYUFBYSxHQUFHO0FBQUEsTUFFWixLQUFLLFlBQVksWUFBWSxNQUFNO0FBQUEsUUFFMUIsS0FBSyxTQUFTO0FBQUEsU0FDcEIsS0FBSyxlQUFlO0FBQUEsTUFFdkIsSUFBSSxPQUFPLEtBQUssY0FBYyxVQUFVO0FBQUEsUUFDcEMsS0FBSyxVQUFVLE1BQU07QUFBQSxNQUN6QjtBQUFBO0FBQUEsU0FFRSxhQUFZLEdBQUc7QUFBQSxNQUNqQixNQUFNLEtBQUssU0FBUztBQUFBLE1BQ3BCLE1BQU0sS0FBSyxVQUFVLFdBQVc7QUFBQTtBQUFBLFNBRTlCLFdBQVUsR0FBRztBQUFBLE1BQ2YsSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUNoQixjQUFjLEtBQUssU0FBUztBQUFBLE1BQ2hDO0FBQUEsTUFDQSxNQUFNLEtBQUssYUFBYTtBQUFBLE1BQ3hCLE1BQU0sS0FBSyxVQUFVLFNBQVM7QUFBQTtBQUFBLEVBRXRDO0FBQUEsRUFDUSx3Q0FBZ0M7QUFBQTs7OztFQ2pHeEMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQThCO0FBQUEsRUFDdEMsSUFBTTtBQUFBO0FBQUEsRUFNTixNQUFNLHVCQUF1QjtBQUFBLElBQ3pCLFlBQVk7QUFBQSxJQUNaO0FBQUEsSUFDQSxXQUFXLENBQUM7QUFBQSxJQUNaLFdBQVcsQ0FBQyx3QkFBd0I7QUFBQSxNQUNoQyxLQUFLLDBCQUEwQjtBQUFBO0FBQUEsSUFLbkMsTUFBTSxDQUFDLFNBQVMsZ0JBQWdCO0FBQUEsTUFFNUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUNoQixXQUFXLE1BQU0sZUFBZSxFQUFFLE1BQU0sT0FBTyxpQkFBaUIsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUFBLFFBQzVFO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSyxTQUFTLEtBQUssT0FBTztBQUFBLE1BQzFCLFdBQVcsTUFBTSxlQUFlLEVBQUUsTUFBTSxPQUFPLGlCQUFpQixRQUFRLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFBQSxJQU1qRixVQUFVLEdBQUc7QUFBQSxNQUNULE9BQU8sS0FBSztBQUFBO0FBQUEsSUFFaEIsVUFBVSxHQUFHO0FBQUEsTUFDVCxPQUFPLFFBQVEsUUFBUTtBQUFBO0FBQUEsSUFFM0IsS0FBSyxHQUFHO0FBQUEsTUFDSixLQUFLLFdBQVcsQ0FBQztBQUFBO0FBQUEsSUFFckIsNEJBQTRCLENBQUMsaUJBQWlCO0FBQUEsTUFDMUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQixRQUFRLEdBQUc7QUFBQSxNQUNQLEtBQUssWUFBWTtBQUFBLE1BQ2pCLE9BQU8sUUFBUSxRQUFRO0FBQUE7QUFBQSxFQUUvQjtBQUFBLEVBQ1EsaUNBQXlCO0FBQUE7Ozs7RUMvRGpDLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELGdDQUE2QjtBQUFBLEVBZ0JyQyxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQVFOLE1BQU0sc0JBQXNCO0FBQUEsSUFDeEIsWUFBWTtBQUFBLElBQ1o7QUFBQSxJQUNBLFdBQVcsQ0FBQyxTQUFTO0FBQUEsTUFDakIsS0FBSyx1QkFDRCxTQUFTLHVCQUF1QixzQkFBc0I7QUFBQTtBQUFBLElBRTlELE1BQU0sQ0FBQyxTQUFTLGdCQUFnQjtBQUFBLE1BQzVCLElBQUksS0FBSyxXQUFXO0FBQUEsUUFFaEIsYUFBYSxnQkFBZ0IsRUFBRSxNQUFNLE9BQU8saUJBQWlCLE9BQU8sQ0FBQztBQUFBLFFBQ3JFO0FBQUEsTUFDSjtBQUFBLE1BQ0EsT0FBTyxzQkFBc0IsYUFBYSxTQUFTLGNBQWM7QUFBQTtBQUFBLElBRXJFLFVBQVUsR0FBRztBQUFBLE1BQ1QsT0FBTyxRQUFRLFFBQVE7QUFBQTtBQUFBLElBRTNCLDRCQUE0QixDQUFDLGlCQUFpQjtBQUFBLE1BQzFDLE9BQU8sS0FBSyxxQkFBcUIsZUFBZTtBQUFBO0FBQUEsSUFFcEQsUUFBUSxHQUFHO0FBQUEsTUFDUCxLQUFLLFlBQVk7QUFBQSxNQUNqQixPQUFPLFFBQVEsUUFBUTtBQUFBO0FBQUEsV0FFcEIsWUFBWSxDQUFDLFNBQVMsTUFBTTtBQUFBLE1BQy9CLFdBQVcsZ0JBQWdCLFFBQVEsY0FBYztBQUFBLFFBQzdDLFdBQVcsVUFBVSxhQUFhLFNBQVM7QUFBQSxVQUN2QyxRQUFRLElBQUk7QUFBQSxZQUNSLFlBQVksT0FBTztBQUFBLFlBQ25CLGVBQWUsT0FBTztBQUFBLFlBQ3RCLFlBQVksT0FBTztBQUFBLFVBQ3ZCLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLFFBQ3RCO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSyxFQUFFLE1BQU0sT0FBTyxpQkFBaUIsUUFBUSxDQUFDO0FBQUE7QUFBQSxFQUV0RDtBQUFBLEVBQ1EsZ0NBQXdCO0FBQUE7Ozs7RUNqRGhDLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHVCQUFvQjtBQUFBO0FBQUEsRUFDNUIsTUFBTSxhQUFhO0FBQUEsSUFDZixtQkFBbUIsQ0FBQztBQUFBLElBQ3BCLE9BQU8sQ0FBQyxNQUFNO0FBQUEsTUFDVixLQUFLLGlCQUFpQixLQUFLLElBQUk7QUFBQTtBQUFBLElBRW5DLFNBQVMsQ0FBQyxZQUFZLE9BQU87QUFBQSxNQUN6QixNQUFNLFFBQVEsS0FBSyxpQkFBaUIsT0FBTyxvQkFBa0I7QUFBQSxRQUN6RCxPQUFRLEtBQUssaUJBQWlCLGVBQWUsb0JBQW9CLFVBQVUsS0FDdkUsS0FBSyxZQUFZLGVBQWUsZUFBZSxLQUFLO0FBQUEsT0FDM0Q7QUFBQSxNQUNELE9BQU87QUFBQTtBQUFBLElBRVgsZ0JBQWdCLENBQUMsVUFBVSxZQUFZO0FBQUEsTUFDbkMsUUFBUyxTQUFTLFFBQVEsTUFBTSxhQUM1QixXQUFXLFNBQVMsU0FBUyxRQUFRLE1BQ3JDLFNBQVMsY0FBYyxFQUFFLE1BQU0sV0FBVyxJQUFJLEtBQzlDLFNBQVMsY0FBYyxFQUFFLE1BQU0sV0FBVyxJQUFJO0FBQUE7QUFBQSxJQUV0RCxXQUFXLENBQUMsVUFBVSxPQUFPO0FBQUEsTUFDekIsT0FBUSxTQUFTLGNBQWMsRUFBRSxNQUFNLE1BQU0sSUFBSSxNQUM1QyxNQUFNLFlBQVksYUFDZixTQUFTLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxPQUFPLE9BQ2xELE1BQU0sY0FBYyxhQUNqQixTQUFTLG1CQUFtQixFQUFFLE1BQU0sTUFBTSxTQUFTO0FBQUE7QUFBQSxFQUVuRTtBQUFBLEVBQ1EsdUJBQWU7QUFBQTs7OztFQzVCdkIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsc0JBQXNCLHFDQUFxQyw2Q0FBNkMscUNBQWtDO0FBQUEsRUFDbEosSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sU0FBUywwQkFBMEIsQ0FBQyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ3JELElBQUksQ0FBQyxZQUFZLElBQUksR0FBRztBQUFBLE1BQ3BCLE1BQU0sS0FBSyxLQUFLLHlCQUF5QiwrRkFBK0Y7QUFBQSxJQUM1STtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsTUFDQSxhQUFhLFNBQVMsZUFBZTtBQUFBLE1BQ3JDLE1BQU0sU0FBUyxRQUFRO0FBQUEsTUFDdkIsV0FBVyxTQUFTLGFBQWEsTUFBTSxVQUFVO0FBQUEsTUFDakQsUUFBUSxTQUFTLFVBQVUsQ0FBQztBQUFBLElBQ2hDO0FBQUE7QUFBQSxFQUVJLHFDQUE2QjtBQUFBLEVBQ3JDLFNBQVMsa0NBQWtDLENBQUMsTUFBTSxZQUFZO0FBQUEsSUFDMUQsT0FBTztBQUFBLE1BQ0gsTUFBTSxLQUFLLFFBQVEsV0FBVztBQUFBLE1BQzlCLGFBQWEsS0FBSyxlQUFlLFdBQVc7QUFBQSxNQUM1QyxNQUFNLFdBQVc7QUFBQSxNQUNqQixNQUFNLFdBQVc7QUFBQSxNQUNqQixXQUFXLFdBQVc7QUFBQSxNQUN0QixRQUFRLFdBQVc7QUFBQSxJQUN2QjtBQUFBO0FBQUEsRUFFSSw2Q0FBcUM7QUFBQSxFQUM3QyxTQUFTLDBCQUEwQixDQUFDLFlBQVksaUJBQWlCO0FBQUEsSUFFN0QsUUFBUyxHQUFHLFFBQVEsdUJBQXVCLFdBQVcsTUFBTSxnQkFBZ0IsSUFBSSxLQUM1RSxXQUFXLFNBQVMsZ0JBQWdCLFFBQ3BDLFdBQVcsU0FBUyxnQkFBZ0IsUUFDcEMsV0FBVyxjQUFjLGdCQUFnQjtBQUFBO0FBQUEsRUFFekMscUNBQTZCO0FBQUEsRUFHckMsSUFBTSxjQUFjO0FBQUEsRUFDcEIsU0FBUyxXQUFXLENBQUMsTUFBTTtBQUFBLElBQ3ZCLE9BQU8sS0FBSyxNQUFNLFdBQVcsS0FBSztBQUFBO0FBQUEsRUFFOUIsc0JBQWM7QUFBQTs7OztFQzNDdEIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQWlDLDRDQUE0QyxvQ0FBb0Msc0NBQXNDLCtCQUErQiw4QkFBOEIsMEJBQTBCLDRCQUE0QixrQ0FBa0MseUJBQXNCO0FBQUEsRUFDMVUsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFDTixNQUFNLGVBQWU7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyx3QkFBd0IsYUFBYTtBQUFBLE1BQzdDLEtBQUsseUJBQXlCO0FBQUEsTUFDOUIsS0FBSyxjQUFjO0FBQUE7QUFBQSxJQUV2QixPQUFPLENBQUMsT0FBTyxhQUFhLENBQUMsR0FBRyxXQUFVLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFBQSxNQUM5RCxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsUUFDM0IsTUFBTSxLQUFLLEtBQUssdUNBQXVDLEtBQUssWUFBWSxTQUFTLE9BQU87QUFBQSxRQUN4RjtBQUFBLE1BQ0o7QUFBQSxNQUNBLElBQUksS0FBSyxZQUFZLGNBQWMsTUFBTSxVQUFVLE9BQy9DLENBQUMsT0FBTyxVQUFVLEtBQUssR0FBRztBQUFBLFFBQzFCLE1BQU0sS0FBSyxLQUFLLDJEQUEyRCxLQUFLLFlBQVksdUNBQXVDO0FBQUEsUUFDbkksUUFBUSxLQUFLLE1BQU0sS0FBSztBQUFBLFFBRXhCLElBQUksQ0FBQyxPQUFPLFVBQVUsS0FBSyxHQUFHO0FBQUEsVUFDMUI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSyx1QkFBdUIsT0FBTyxPQUFPLFlBQVksV0FBVSxHQUFHLE9BQU8sZ0JBQWdCLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQTtBQUFBLEVBRTdHO0FBQUEsRUFDUSx5QkFBaUI7QUFBQTtBQUFBLEVBSXpCLE1BQU0sZ0NBQWdDLGVBQWU7QUFBQSxJQUlqRCxHQUFHLENBQUMsT0FBTyxZQUFZLEtBQUs7QUFBQSxNQUN4QixLQUFLLFFBQVEsT0FBTyxZQUFZLEdBQUc7QUFBQTtBQUFBLEVBRTNDO0FBQUEsRUFDUSxrQ0FBMEI7QUFBQTtBQUFBLEVBSWxDLE1BQU0sMEJBQTBCLGVBQWU7QUFBQSxJQUkzQyxHQUFHLENBQUMsT0FBTyxZQUFZLEtBQUs7QUFBQSxNQUN4QixJQUFJLFFBQVEsR0FBRztBQUFBLFFBQ1gsTUFBTSxLQUFLLEtBQUssc0NBQXNDLEtBQUssWUFBWSxTQUFTLE9BQU87QUFBQSxRQUN2RjtBQUFBLE1BQ0o7QUFBQSxNQUNBLEtBQUssUUFBUSxPQUFPLFlBQVksR0FBRztBQUFBO0FBQUEsRUFFM0M7QUFBQSxFQUNRLDRCQUFvQjtBQUFBO0FBQUEsRUFJNUIsTUFBTSx3QkFBd0IsZUFBZTtBQUFBLElBSXpDLE1BQU0sQ0FBQyxPQUFPLFlBQVksS0FBSztBQUFBLE1BQzNCLEtBQUssUUFBUSxPQUFPLFlBQVksR0FBRztBQUFBO0FBQUEsRUFFM0M7QUFBQSxFQUNRLDBCQUFrQjtBQUFBO0FBQUEsRUFJMUIsTUFBTSw0QkFBNEIsZUFBZTtBQUFBLElBSTdDLE1BQU0sQ0FBQyxPQUFPLFlBQVksS0FBSztBQUFBLE1BQzNCLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDWCxNQUFNLEtBQUssS0FBSyx3Q0FBd0MsS0FBSyxZQUFZLFNBQVMsT0FBTztBQUFBLFFBQ3pGO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSyxRQUFRLE9BQU8sWUFBWSxHQUFHO0FBQUE7QUFBQSxFQUUzQztBQUFBLEVBQ1EsOEJBQXNCO0FBQUE7QUFBQSxFQUM5QixNQUFNLHFCQUFxQjtBQUFBLElBQ3ZCO0FBQUEsSUFFQTtBQUFBLElBRUE7QUFBQSxJQUNBLFdBQVcsQ0FBQyxZQUFZLGdCQUFnQixxQkFBcUI7QUFBQSxNQUN6RCxLQUFLLHNCQUFzQjtBQUFBLE1BQzNCLEtBQUssY0FBYztBQUFBLE1BQ25CLEtBQUssa0JBQWtCO0FBQUE7QUFBQSxJQUszQixXQUFXLENBQUMsVUFBVTtBQUFBLE1BQ2xCLEtBQUssb0JBQW9CLFlBQVksVUFBVSxJQUFJO0FBQUE7QUFBQSxJQUt2RCxjQUFjLENBQUMsVUFBVTtBQUFBLE1BQ3JCLEtBQUssb0JBQW9CLGVBQWUsVUFBVSxJQUFJO0FBQUE7QUFBQSxFQUU5RDtBQUFBLEVBQ1EsK0JBQXVCO0FBQUE7QUFBQSxFQUMvQixNQUFNLG9DQUFvQyxxQkFBcUI7QUFBQSxFQUMvRDtBQUFBLEVBQ1Esc0NBQThCO0FBQUE7QUFBQSxFQUN0QyxNQUFNLGtDQUFrQyxxQkFBcUI7QUFBQSxFQUM3RDtBQUFBLEVBQ1Esb0NBQTRCO0FBQUE7QUFBQSxFQUNwQyxNQUFNLDBDQUEwQyxxQkFBcUI7QUFBQSxFQUNyRTtBQUFBLEVBQ1EsNENBQW9DO0FBQUEsRUFDNUMsU0FBUyxzQkFBc0IsQ0FBQyxJQUFJO0FBQUEsSUFDaEMsT0FBTyxjQUFjO0FBQUE7QUFBQSxFQUVqQixpQ0FBeUI7QUFBQTs7OztFQzFIakMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsZ0JBQWE7QUFBQSxFQUNyQixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQUlOLE1BQU0sTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBLFdBQVcsQ0FBQyxtQkFBbUI7QUFBQSxNQUMzQixLQUFLLG9CQUFvQjtBQUFBO0FBQUEsSUFLN0IsV0FBVyxDQUFDLE1BQU0sU0FBUztBQUFBLE1BQ3ZCLE1BQU0sY0FBYyxHQUFHLHVCQUF1Qiw0QkFBNEIsTUFBTSxhQUFhLGVBQWUsT0FBTyxPQUFPO0FBQUEsTUFDMUgsTUFBTSxVQUFVLEtBQUssa0JBQWtCLHNCQUFzQixVQUFVO0FBQUEsTUFDdkUsT0FBTyxJQUFJLGNBQWMsZ0JBQWdCLFNBQVMsVUFBVTtBQUFBO0FBQUEsSUFLaEUsZUFBZSxDQUFDLE1BQU0sU0FBUztBQUFBLE1BQzNCLE1BQU0sY0FBYyxHQUFHLHVCQUF1Qiw0QkFBNEIsTUFBTSxhQUFhLGVBQWUsV0FBVyxPQUFPO0FBQUEsTUFDOUgsTUFBTSxVQUFVLEtBQUssa0JBQWtCLHNCQUFzQixVQUFVO0FBQUEsTUFDdkUsT0FBTyxJQUFJLGNBQWMsb0JBQW9CLFNBQVMsVUFBVTtBQUFBO0FBQUEsSUFLcEUsYUFBYSxDQUFDLE1BQU0sU0FBUztBQUFBLE1BQ3pCLE1BQU0sY0FBYyxHQUFHLHVCQUF1Qiw0QkFBNEIsTUFBTSxhQUFhLGVBQWUsU0FBUyxPQUFPO0FBQUEsTUFDNUgsTUFBTSxVQUFVLEtBQUssa0JBQWtCLHNCQUFzQixVQUFVO0FBQUEsTUFDdkUsT0FBTyxJQUFJLGNBQWMsa0JBQWtCLFNBQVMsVUFBVTtBQUFBO0FBQUEsSUFLbEUsbUJBQW1CLENBQUMsTUFBTSxTQUFTO0FBQUEsTUFDL0IsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLDRCQUE0QixNQUFNLGFBQWEsZUFBZSxpQkFBaUIsT0FBTztBQUFBLE1BQ3BJLE1BQU0sVUFBVSxLQUFLLGtCQUFrQixzQkFBc0IsVUFBVTtBQUFBLE1BQ3ZFLE9BQU8sSUFBSSxjQUFjLHdCQUF3QixTQUFTLFVBQVU7QUFBQTtBQUFBLElBS3hFLHFCQUFxQixDQUFDLE1BQU0sU0FBUztBQUFBLE1BQ2pDLE1BQU0sY0FBYyxHQUFHLHVCQUF1Qiw0QkFBNEIsTUFBTSxhQUFhLGVBQWUsa0JBQWtCLE9BQU87QUFBQSxNQUNySSxNQUFNLFdBQVcsS0FBSyxrQkFBa0IsMkJBQTJCLFVBQVU7QUFBQSxNQUM3RSxPQUFPLElBQUksY0FBYywwQkFBMEIsWUFBWSxVQUFVLEtBQUssa0JBQWtCLGtCQUFrQjtBQUFBO0FBQUEsSUFLdEgsdUJBQXVCLENBQUMsTUFBTSxTQUFTO0FBQUEsTUFDbkMsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLDRCQUE0QixNQUFNLGFBQWEsZUFBZSxvQkFBb0IsT0FBTztBQUFBLE1BQ3ZJLE1BQU0sV0FBVyxLQUFLLGtCQUFrQiwyQkFBMkIsVUFBVTtBQUFBLE1BQzdFLE9BQU8sSUFBSSxjQUFjLDRCQUE0QixZQUFZLFVBQVUsS0FBSyxrQkFBa0Isa0JBQWtCO0FBQUE7QUFBQSxJQUt4SCw2QkFBNkIsQ0FBQyxNQUFNLFNBQVM7QUFBQSxNQUN6QyxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsNEJBQTRCLE1BQU0sYUFBYSxlQUFlLDRCQUE0QixPQUFPO0FBQUEsTUFDL0ksTUFBTSxXQUFXLEtBQUssa0JBQWtCLDJCQUEyQixVQUFVO0FBQUEsTUFDN0UsT0FBTyxJQUFJLGNBQWMsa0NBQWtDLFlBQVksVUFBVSxLQUFLLGtCQUFrQixrQkFBa0I7QUFBQTtBQUFBLElBSzlILDBCQUEwQixDQUFDLFVBQVUsYUFBYTtBQUFBLE1BQzlDLEtBQUssa0JBQWtCLG1CQUFtQixpQkFBaUIsVUFBVSxXQUFXO0FBQUE7QUFBQSxJQUtwRiw2QkFBNkIsQ0FBQyxVQUFVLGFBQWE7QUFBQSxNQUNqRCxLQUFLLGtCQUFrQixtQkFBbUIsb0JBQW9CLFVBQVUsV0FBVztBQUFBO0FBQUEsRUFFM0Y7QUFBQSxFQUNRLGdCQUFRO0FBQUE7Ozs7RUNsRmhCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHdCQUFxQjtBQUFBLEVBQzdCLElBQU07QUFBQTtBQUFBLEVBTU4sTUFBTSxjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFdBQVcsQ0FBQyx1QkFBdUI7QUFBQSxNQUMvQixLQUFLLHdCQUF3QjtBQUFBO0FBQUEsSUFFakMsdUJBQXVCLEdBQUc7QUFBQSxNQUN0QixPQUFPLEtBQUs7QUFBQTtBQUFBLElBRWhCLGlCQUFpQixDQUFDLGFBQWE7QUFBQSxNQUMzQixLQUFLLHlCQUF5QixHQUFHLHVCQUF1Qiw0QkFBNEIsS0FBSyxzQkFBc0IsTUFBTSxLQUFLLHNCQUFzQixNQUFNO0FBQUEsUUFDbEo7QUFBQSxRQUNBLFdBQVcsS0FBSyxzQkFBc0I7QUFBQSxRQUN0QyxNQUFNLEtBQUssc0JBQXNCO0FBQUEsUUFDakMsUUFBUSxLQUFLLHNCQUFzQjtBQUFBLE1BQ3ZDLENBQUM7QUFBQTtBQUFBLEVBRVQ7QUFBQSxFQUNRLHdCQUFnQjtBQUFBOzs7O0VDekJ4QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwyQkFBMkIsa0JBQWU7QUFBQSxFQUNsRCxJQUFNO0FBQUE7QUFBQSxFQUNOLE1BQU0sUUFBUTtBQUFBLElBQ1Y7QUFBQSxJQUNBLFlBQVksSUFBSTtBQUFBLElBQ2hCLFVBQVUsSUFBSTtBQUFBLElBQ2QsV0FBVyxDQUFDLE9BQU87QUFBQSxNQUNmLEtBQUssUUFBUTtBQUFBO0FBQUEsSUFFakIsR0FBRyxDQUFDLEtBQUssVUFBVTtBQUFBLE1BQ2YsYUFBYSxLQUFLLE1BQU0sR0FBRztBQUFBLE1BQzNCLE9BQU8sS0FBSyxVQUFVLElBQUksUUFBUTtBQUFBO0FBQUEsSUFFdEMsWUFBWSxDQUFDLEtBQUssZ0JBQWdCO0FBQUEsTUFDOUIsTUFBTSxRQUFPLEtBQUssTUFBTSxHQUFHO0FBQUEsTUFDM0IsSUFBSSxLQUFLLFVBQVUsSUFBSSxLQUFJLEdBQUc7QUFBQSxRQUMxQixPQUFPLEtBQUssVUFBVSxJQUFJLEtBQUk7QUFBQSxNQUNsQztBQUFBLE1BQ0EsTUFBTSxNQUFNLGVBQWU7QUFBQSxNQUMzQixJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksS0FBSSxHQUFHO0FBQUEsUUFDekIsS0FBSyxRQUFRLElBQUksT0FBTSxHQUFHO0FBQUEsTUFDOUI7QUFBQSxNQUNBLEtBQUssVUFBVSxJQUFJLE9BQU0sR0FBRztBQUFBLE1BQzVCLE9BQU87QUFBQTtBQUFBLElBRVgsR0FBRyxDQUFDLEtBQUssT0FBTyxVQUFVO0FBQUEsTUFDdEIsYUFBYSxLQUFLLE1BQU0sR0FBRztBQUFBLE1BQzNCLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxRQUFRLEdBQUc7QUFBQSxRQUM3QixLQUFLLFFBQVEsSUFBSSxVQUFVLEdBQUc7QUFBQSxNQUNsQztBQUFBLE1BQ0EsS0FBSyxVQUFVLElBQUksVUFBVSxLQUFLO0FBQUE7QUFBQSxJQUV0QyxHQUFHLENBQUMsS0FBSyxVQUFVO0FBQUEsTUFDZixhQUFhLEtBQUssTUFBTSxHQUFHO0FBQUEsTUFDM0IsT0FBTyxLQUFLLFVBQVUsSUFBSSxRQUFRO0FBQUE7QUFBQSxLQUVyQyxJQUFJLEdBQUc7QUFBQSxNQUNKLE1BQU0sY0FBYyxLQUFLLFFBQVEsUUFBUTtBQUFBLE1BQ3pDLElBQUksT0FBTyxZQUFZLEtBQUs7QUFBQSxNQUM1QixPQUFPLEtBQUssU0FBUyxNQUFNO0FBQUEsUUFDdkIsTUFBTSxDQUFDLEtBQUssTUFBTSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQUEsUUFDbkMsT0FBTyxZQUFZLEtBQUs7QUFBQSxNQUM1QjtBQUFBO0FBQUEsS0FFSCxPQUFPLEdBQUc7QUFBQSxNQUNQLE1BQU0sZ0JBQWdCLEtBQUssVUFBVSxRQUFRO0FBQUEsTUFDN0MsSUFBSSxPQUFPLGNBQWMsS0FBSztBQUFBLE1BQzlCLE9BQU8sS0FBSyxTQUFTLE1BQU07QUFBQSxRQUd2QixNQUFNLENBQUMsS0FBSyxRQUFRLElBQUksS0FBSyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU0sSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3BFLE9BQU8sY0FBYyxLQUFLO0FBQUEsTUFDOUI7QUFBQTtBQUFBLFFBRUEsSUFBSSxHQUFHO0FBQUEsTUFDUCxPQUFPLEtBQUssVUFBVTtBQUFBO0FBQUEsRUFFOUI7QUFBQSxFQUNRLGtCQUFVO0FBQUE7QUFBQSxFQUNsQixNQUFNLHlCQUF5QixRQUFRO0FBQUEsSUFDbkMsV0FBVyxHQUFHO0FBQUEsTUFDVixNQUFNLFFBQVEsY0FBYztBQUFBO0FBQUEsRUFFcEM7QUFBQSxFQUNRLDJCQUFtQjtBQUFBOzs7O0VDakUzQixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwrQkFBNEI7QUFBQSxFQUNwQyxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQVFOLE1BQU0scUJBQXFCO0FBQUEsSUFDdkI7QUFBQSxJQUNBLDJCQUEyQixJQUFJLFVBQVU7QUFBQSxJQUd6Qyx5QkFBeUIsSUFBSSxVQUFVO0FBQUEsSUFDdkM7QUFBQSxJQUNBLHNCQUFzQixFQUFFLHdCQUF3QixLQUFLO0FBQUEsSUFDckQ7QUFBQSxJQUNBLFdBQVcsQ0FBQyxhQUFhLDZCQUE2QjtBQUFBLE1BQ2xELEtBQUssY0FBYztBQUFBLE1BQ25CLEtBQUsscUJBQXFCLCtCQUErQixRQUFRO0FBQUEsTUFDakUsS0FBSyxxQkFBcUIsR0FBRyxRQUFRLGdCQUFnQixLQUFLLG1CQUFtQjtBQUFBO0FBQUEsSUFFakYsTUFBTSxDQUFDLE9BQU8sWUFBWSxVQUFVLGdCQUFnQjtBQUFBLE1BQ2hELElBQUksZUFBZSxLQUFLLHlCQUF5QixJQUFJLFVBQVU7QUFBQSxNQUMvRCxJQUFJLENBQUMsY0FBYztBQUFBLFFBQ2YsSUFBSSxLQUFLLHlCQUF5QixRQUFRLEtBQUssbUJBQW1CO0FBQUEsVUFDOUQsTUFBTSx1QkFBdUIsS0FBSyx5QkFBeUIsYUFBYSxLQUFLLHFCQUFxQixNQUFNLEtBQUssWUFBWSxtQkFBbUIsY0FBYyxDQUFDO0FBQUEsVUFDM0osc0JBQXNCLE9BQU8sS0FBSztBQUFBLFVBQ2xDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFlBQVksbUJBQW1CLGNBQWM7QUFBQSxRQUNqRSxLQUFLLHlCQUF5QixJQUFJLFlBQVksWUFBWTtBQUFBLE1BQzlEO0FBQUEsTUFDQSxjQUFjLE9BQU8sS0FBSztBQUFBO0FBQUEsSUFFOUIsYUFBYSxDQUFDLGNBQWMsZ0JBQWdCO0FBQUEsTUFDeEMsTUFBTSxLQUFLLGFBQWEsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksT0FBTyxjQUFjO0FBQUEsUUFDMUUsTUFBTSxlQUFlLEtBQUssWUFBWSxtQkFBbUIsY0FBYztBQUFBLFFBQ3ZFLGNBQWMsT0FBTyxLQUFLO0FBQUEsUUFDMUIsSUFBSSxRQUFRO0FBQUEsUUFFWixJQUFJLEtBQUssdUJBQXVCLElBQUksWUFBWSxRQUFRLEdBQUc7QUFBQSxVQUd2RCxNQUFNLFdBQVcsS0FBSyx1QkFBdUIsSUFBSSxZQUFZLFFBQVE7QUFBQSxVQUNyRSxRQUFRLEtBQUssWUFBWSxLQUFLLFVBQVUsWUFBWTtBQUFBLFFBQ3hELEVBQ0s7QUFBQSxVQUVELElBQUksS0FBSyx1QkFBdUIsUUFBUSxLQUFLLG1CQUFtQjtBQUFBLFlBQzVELGFBQWEsS0FBSztBQUFBLFlBQ2xCLFdBQVcsS0FBSztBQUFBLFlBQ2hCLElBQUksS0FBSyx1QkFBdUIsSUFBSSxZQUFZLFFBQVEsR0FBRztBQUFBLGNBR3ZELE1BQU0sV0FBVyxLQUFLLHVCQUF1QixJQUFJLFlBQVksUUFBUTtBQUFBLGNBQ3JFLFFBQVEsS0FBSyxZQUFZLEtBQUssVUFBVSxZQUFZO0FBQUEsWUFDeEQ7QUFBQSxVQUNKO0FBQUE7QUFBQSxRQUdKLElBQUksS0FBSyx5QkFBeUIsSUFBSSxZQUFZLFFBQVEsR0FBRztBQUFBLFVBR3pELE1BQU0sU0FBUyxLQUFLLHlCQUF5QixJQUFJLFlBQVksUUFBUTtBQUFBLFVBQ3JFLFFBQVEsS0FBSyxZQUFZLE1BQU0sUUFBUSxLQUFLO0FBQUEsUUFDaEQ7QUFBQSxRQUVBLEtBQUssdUJBQXVCLElBQUksWUFBWSxjQUFjLFFBQVE7QUFBQSxRQUNsRSxLQUFLLHlCQUF5QixJQUFJLFlBQVksT0FBTyxRQUFRO0FBQUEsT0FDaEU7QUFBQTtBQUFBLElBTUwsT0FBTyxHQUFHO0FBQUEsTUFDTixNQUFNLGtCQUFrQixLQUFLO0FBQUEsTUFDN0IsS0FBSywyQkFBMkIsSUFBSSxVQUFVO0FBQUEsTUFDOUMsT0FBTztBQUFBO0FBQUEsRUFFZjtBQUFBLEVBQ1EsK0JBQXVCO0FBQUE7Ozs7RUNyRi9CLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELGtDQUErQjtBQUFBLEVBQ3ZDLElBQU07QUFBQSxFQUNOLElBQU07QUFBQTtBQUFBLEVBT04sTUFBTSx3QkFBd0I7QUFBQSxJQUMxQjtBQUFBLElBQ0EsMkJBQTJCLElBQUk7QUFBQSxJQUMvQixpQkFBaUIsSUFBSTtBQUFBLElBQ3JCLFdBQVcsQ0FBQyxhQUFhLGtCQUFrQjtBQUFBLE1BQ3ZDLEtBQUssY0FBYztBQUFBLE1BQ25CLGlCQUFpQixRQUFRLFlBQVU7QUFBQSxRQUMvQixLQUFLLHlCQUF5QixJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQUEsT0FDL0M7QUFBQTtBQUFBLElBV0wsWUFBWSxDQUFDLFdBQVcsc0JBQXNCLHNCQUFzQixnQkFBZ0I7QUFBQSxNQUNoRixLQUFLLG9CQUFvQixvQkFBb0I7QUFBQSxNQUM3QyxNQUFNLDBCQUEwQixLQUFLLGtDQUFrQyxTQUFTO0FBQUEsTUFDaEYsSUFBSSxTQUFTO0FBQUEsTUFDYixJQUFJO0FBQUEsTUFFSixJQUFJLEtBQUssZUFBZSxJQUFJLFNBQVMsR0FBRztBQUFBLFFBRXBDLE1BQU0sT0FBTyxLQUFLLGVBQWUsSUFBSSxTQUFTO0FBQUEsUUFDOUMsTUFBTSxxQkFBcUIsS0FBSztBQUFBLFFBQ2hDLHlCQUF5QixLQUFLO0FBQUEsUUFhOUIsSUFBSSwyQkFBMkIseUJBQXlCLHVCQUF1QixZQUFZO0FBQUEsVUFHdkYsU0FBUyx3QkFBd0IsTUFBTSxLQUFLLGVBQWUseUJBQXlCLEtBQUssV0FBVztBQUFBLFFBQ3hHLEVBQ0s7QUFBQSxVQUNELFNBQVMsd0JBQXdCLG1CQUFtQixLQUFLLGVBQWUseUJBQXlCLGtCQUFrQjtBQUFBO0FBQUEsTUFFM0gsRUFDSztBQUFBLFFBRUQseUJBQXlCLFVBQVUsNkJBQTZCLHFCQUFxQixJQUFJO0FBQUE7QUFBQSxNQUc3RixLQUFLLGVBQWUsSUFBSSxXQUFXO0FBQUEsUUFDL0IsZUFBZTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsTUFDSixDQUFDO0FBQUEsTUFDRCxNQUFNLHNCQUFzQixtQ0FBbUMsTUFBTTtBQUFBLE1BRXJFLElBQUksb0JBQW9CLFdBQVcsR0FBRztBQUFBLFFBQ2xDO0FBQUEsTUFDSjtBQUFBLE1BQ0EsT0FBTyxLQUFLLFlBQVksYUFBYSxzQkFBc0Isd0JBQXdCLHFCQUNyRSxjQUFjO0FBQUE7QUFBQSxJQUVoQyxtQkFBbUIsQ0FBQyxxQkFBcUI7QUFBQSxNQUNyQyxNQUFNLHVCQUF1QixLQUFLLHlCQUF5QixLQUFLO0FBQUEsTUFDaEUsV0FBVyxhQUFhLHNCQUFzQjtBQUFBLFFBQzFDLElBQUksUUFBUSxLQUFLLHlCQUF5QixJQUFJLFNBQVM7QUFBQSxRQUN2RCxJQUFJLFVBQVUsV0FBVztBQUFBLFVBQ3JCLFFBQVEsQ0FBQztBQUFBLFVBQ1QsS0FBSyx5QkFBeUIsSUFBSSxXQUFXLEtBQUs7QUFBQSxRQUN0RDtBQUFBLFFBQ0EsTUFBTSxLQUFLLG1CQUFtQjtBQUFBLE1BQ2xDO0FBQUE7QUFBQSxJQUVKLGlDQUFpQyxDQUFDLFdBQVc7QUFBQSxNQUN6QyxJQUFJLFNBQVMsSUFBSSxVQUFVO0FBQUEsTUFDM0IsTUFBTSxpQkFBaUIsS0FBSyx5QkFBeUIsSUFBSSxTQUFTO0FBQUEsTUFDbEUsS0FBSyx5QkFBeUIsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUFBLE1BQy9DLElBQUksbUJBQW1CLFdBQVc7QUFBQSxRQUM5QixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsV0FBVyxNQUFNLGdCQUFnQjtBQUFBLFFBQzdCLFNBQVMsd0JBQXdCLE1BQU0sUUFBUSxJQUFJLEtBQUssV0FBVztBQUFBLE1BQ3ZFO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxXQUVKLEtBQUssQ0FBQyxNQUFNLFNBQVMsWUFBWTtBQUFBLE1BQ3BDLE1BQU0sU0FBUztBQUFBLE1BQ2YsTUFBTSxXQUFXLFFBQVEsUUFBUTtBQUFBLE1BQ2pDLElBQUksT0FBTyxTQUFTLEtBQUs7QUFBQSxNQUN6QixPQUFPLEtBQUssU0FBUyxNQUFNO0FBQUEsUUFDdkIsT0FBTyxLQUFLLFNBQVEsU0FBUSxLQUFLO0FBQUEsUUFDakMsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFJLEdBQUc7QUFBQSxVQUNyQixNQUFNLG1CQUFtQixLQUFLLElBQUksS0FBSyxLQUFJO0FBQUEsVUFHM0MsTUFBTSxlQUFlLFdBQVcsTUFBTSxrQkFBa0IsT0FBTTtBQUFBLFVBQzlELE9BQU8sSUFBSSxLQUFLLGNBQWMsS0FBSTtBQUFBLFFBQ3RDLEVBQ0s7QUFBQSxVQUNELE9BQU8sSUFBSSxLQUFLLFNBQVEsS0FBSTtBQUFBO0FBQUEsUUFFaEMsT0FBTyxTQUFTLEtBQUs7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsT0FBTztBQUFBO0FBQUEsV0FNSixrQkFBa0IsQ0FBQyxNQUFNLFNBQVMsb0JBQW9CO0FBQUEsTUFDekQsWUFBWSxLQUFLLFVBQVMsS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUNuQyxNQUFNLHNCQUFzQixRQUFRLElBQUksS0FBSyxLQUFJO0FBQUEsUUFDakQscUJBQXFCLGFBQWEsa0JBQWtCO0FBQUEsTUFDeEQ7QUFBQSxNQUNBLE9BQU87QUFBQTtBQUFBLEVBRWY7QUFBQSxFQUNRLGtDQUEwQjtBQUFBLEVBRWxDLFNBQVMsa0NBQWtDLENBQUMsTUFBSztBQUFBLElBQzdDLE9BQU8sTUFBTSxLQUFLLEtBQUksUUFBUSxDQUFDO0FBQUE7QUFBQTs7OztFQ3pJbkMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNkJBQTBCO0FBQUEsRUFDbEMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFNTixNQUFNLDJCQUEyQixnQkFBZ0IsY0FBYztBQUFBLElBQzNEO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsdUJBQXVCLFlBQVksc0JBQXNCLGtCQUFrQiw4QkFBOEI7QUFBQSxNQUNqSCxNQUFNLHFCQUFxQjtBQUFBLE1BQzNCLEtBQUssdUJBQXVCO0FBQUEsTUFDNUIsS0FBSywrQkFBK0I7QUFBQSxNQUNwQyxLQUFLLHNCQUFzQixJQUFJLHVCQUF1QixxQkFBcUIsWUFBWSxLQUFLLDRCQUE0QjtBQUFBLE1BQ3hILEtBQUsseUJBQXlCLElBQUksMEJBQTBCLHdCQUF3QixZQUFZLGdCQUFnQjtBQUFBO0FBQUEsSUFFcEgsTUFBTSxDQUFDLGNBQWMsaUJBQWlCO0FBQUEsTUFDbEMsTUFBTSxZQUFZLElBQUksVUFBVTtBQUFBLE1BQ2hDLE1BQU0sS0FBSyxhQUFhLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLFdBQVc7QUFBQSxRQUNoRSxVQUFVLElBQUksS0FBSyxxQkFBcUIsUUFBUSxVQUFVLEdBQUcsS0FBSztBQUFBLE9BQ3JFO0FBQUEsTUFDRCxLQUFLLG9CQUFvQixjQUFjLFdBQVcsZUFBZTtBQUFBO0FBQUEsSUFTckUsT0FBTyxDQUFDLFdBQVcsZ0JBQWdCO0FBQUEsTUFDL0IsTUFBTSxnQkFBZ0IsS0FBSyxvQkFBb0IsUUFBUTtBQUFBLE1BQ3ZELE9BQU8sS0FBSyx1QkFBdUIsYUFBYSxXQUFXLEtBQUssdUJBQXVCLGVBQWUsY0FBYztBQUFBO0FBQUEsRUFFNUg7QUFBQSxFQUNRLDZCQUFxQjtBQUFBOzs7O0VDMUM3QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxzQ0FBc0MseUNBQXlDLDBDQUEwQywwQ0FBMEMsK0NBQStDLG9DQUFpQztBQUFBLEVBQzNQLFNBQVMseUJBQXlCLENBQUMsVUFBVSxpQkFBaUI7QUFBQSxJQUMxRCxJQUFJLGtCQUFrQjtBQUFBLElBQ3RCLElBQUksU0FBUyxTQUFTLGdCQUFnQixNQUFNO0FBQUEsTUFDeEMsbUJBQW1CLFlBQWEsU0FBUyx5QkFBeUIsZ0JBQWdCO0FBQUE7QUFBQSxJQUN0RjtBQUFBLElBQ0EsSUFBSSxTQUFTLFNBQVMsZ0JBQWdCLE1BQU07QUFBQSxNQUN4QyxtQkFBbUIsWUFBYSxTQUFTLHlCQUF5QixnQkFBZ0I7QUFBQTtBQUFBLElBQ3RGO0FBQUEsSUFDQSxJQUFJLFNBQVMsY0FBYyxnQkFBZ0IsV0FBVztBQUFBLE1BQ2xELG1CQUFtQixrQkFBbUIsU0FBUyw4QkFBOEIsZ0JBQWdCO0FBQUE7QUFBQSxJQUNqRztBQUFBLElBQ0EsSUFBSSxTQUFTLGdCQUFnQixnQkFBZ0IsYUFBYTtBQUFBLE1BQ3RELG1CQUFtQixtQkFBb0IsU0FBUyxnQ0FBZ0MsZ0JBQWdCO0FBQUE7QUFBQSxJQUNwRztBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFFSCxvQ0FBNEI7QUFBQSxFQUNwQyxTQUFTLG9DQUFvQyxDQUFDLFVBQVUsaUJBQWlCO0FBQUEsSUFDckUsT0FBTyxxQkFBc0IsU0FBUywyRUFBMkUsZ0JBQWdCO0FBQUE7QUFBQSxFQUU3SCwrQ0FBdUM7QUFBQSxFQUMvQyxTQUFTLCtCQUErQixDQUFDLFVBQVUsaUJBQWlCO0FBQUEsSUFDaEUsT0FBTyxnQkFBaUIsU0FBUyxzRUFBc0UsZ0JBQWdCO0FBQUE7QUFBQSxFQUVuSCwwQ0FBa0M7QUFBQSxFQUMxQyxTQUFTLCtCQUErQixDQUFDLFVBQVUsaUJBQWlCO0FBQUEsSUFDaEUsTUFBTSxXQUFXO0FBQUEsTUFDYixNQUFNLGdCQUFnQjtBQUFBLE1BQ3RCLE1BQU0sZ0JBQWdCO0FBQUEsTUFDdEIsTUFBTSxnQkFBZ0I7QUFBQSxJQUMxQjtBQUFBLElBQ0EsTUFBTSxpQkFBaUIsS0FBSyxVQUFVLFFBQVE7QUFBQSxJQUM5QyxPQUFPLGdEQUFpRCxTQUFTLGlDQUFpQztBQUFBO0FBQUEsRUFFOUYsMENBQWtDO0FBQUEsRUFDMUMsU0FBUyw4QkFBOEIsQ0FBQyxVQUFVLGlCQUFpQjtBQUFBLElBQy9ELE1BQU0sV0FBVztBQUFBLE1BQ2IsTUFBTSxnQkFBZ0I7QUFBQSxNQUN0QixNQUFNLGdCQUFnQjtBQUFBLE1BQ3RCLE1BQU0sZ0JBQWdCO0FBQUEsSUFDMUI7QUFBQSxJQUNBLE1BQU0saUJBQWlCLEtBQUssVUFBVSxRQUFRO0FBQUEsSUFDOUMsT0FBTyxnREFBaUQsU0FBUyxpQ0FBaUM7QUFBQSw4Q0FDdkQsU0FBUyx5QkFBeUIsU0FBUyx1Q0FBdUM7QUFBQSw4Q0FDbEYsZ0JBQWdCLHlCQUF5QixTQUFTLHVDQUF1QztBQUFBO0FBQUEsRUFFaEkseUNBQWlDO0FBQUEsRUFDekMsU0FBUywyQkFBMkIsQ0FBQyxVQUFVLGlCQUFpQjtBQUFBLElBRTVELElBQUksU0FBUyxjQUFjLGdCQUFnQixXQUFXO0FBQUEsTUFDbEQsT0FBTyxxQ0FBcUMsVUFBVSxlQUFlO0FBQUEsSUFDekU7QUFBQSxJQUNBLElBQUksU0FBUyxTQUFTLGdCQUFnQixNQUFNO0FBQUEsTUFDeEMsT0FBTyxnQ0FBZ0MsVUFBVSxlQUFlO0FBQUEsSUFDcEU7QUFBQSxJQUVBLElBQUksU0FBUyxTQUFTLGdCQUFnQixNQUFNO0FBQUEsTUFFeEMsT0FBTyxnQ0FBZ0MsVUFBVSxlQUFlO0FBQUEsSUFDcEU7QUFBQSxJQUNBLElBQUksU0FBUyxnQkFBZ0IsZ0JBQWdCLGFBQWE7QUFBQSxNQUN0RCxPQUFPLCtCQUErQixVQUFVLGVBQWU7QUFBQSxJQUNuRTtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFFSCxzQ0FBOEI7QUFBQTs7OztFQ25FdEMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsZ0NBQTZCO0FBQUEsRUFDckMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFJTixNQUFNLHNCQUFzQjtBQUFBLElBQ3hCLGtCQUFrQixJQUFJO0FBQUEsSUFDdEIsd0JBQXdCLElBQUk7QUFBQSxXQUNyQixNQUFNLEdBQUc7QUFBQSxNQUNaLE9BQU8sSUFBSTtBQUFBO0FBQUEsSUFFZixXQUFXLENBQUMsV0FBVztBQUFBLE1BQ25CLElBQUksV0FBVyxDQUFDO0FBQUEsTUFDaEIsV0FBVyxrQkFBa0IsS0FBSyxnQkFBZ0IsT0FBTyxHQUFHO0FBQUEsUUFDeEQsV0FBVyxTQUFTLE9BQU8sY0FBYztBQUFBLE1BQzdDO0FBQUEsTUFDQSxNQUFNLHVCQUF1QixLQUFLLHNCQUFzQixJQUFJLFNBQVM7QUFBQSxNQUNyRSxJQUFJLHdCQUF3QixNQUFNO0FBQUEsUUFDOUIsV0FBVyxrQkFBa0IscUJBQXFCLE9BQU8sR0FBRztBQUFBLFVBQ3hELFdBQVcsU0FBUyxPQUFPLGNBQWM7QUFBQSxRQUM3QztBQUFBLE1BQ0o7QUFBQSxNQUNBLE9BQU87QUFBQTtBQUFBLElBRVgsUUFBUSxDQUFDLFNBQVM7QUFBQSxNQUNkLEtBQUssaUJBQWlCLFNBQVMsS0FBSyxlQUFlO0FBQUE7QUFBQSxJQUV2RCxvQkFBb0IsQ0FBQyxXQUFXLFNBQVM7QUFBQSxNQUNyQyxJQUFJLGFBQWEsS0FBSyxzQkFBc0IsSUFBSSxTQUFTO0FBQUEsTUFDekQsSUFBSSxjQUFjLE1BQU07QUFBQSxRQUNwQixhQUFhLElBQUk7QUFBQSxRQUNqQixLQUFLLHNCQUFzQixJQUFJLFdBQVcsVUFBVTtBQUFBLE1BQ3hEO0FBQUEsTUFDQSxLQUFLLGlCQUFpQixTQUFTLFVBQVU7QUFBQTtBQUFBLElBRTdDLDZCQUE2QixDQUFDLG9CQUFvQjtBQUFBLE1BQzlDLE1BQU0sV0FBVyxLQUFLLGdCQUFnQixJQUFJLG1CQUFtQixJQUFJO0FBQUEsTUFDakUsSUFBSSxhQUFhLFdBQVc7QUFBQSxRQUN4QixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BR0EsT0FBTyxLQUFLLCtCQUErQixvQkFBb0IsUUFBUTtBQUFBO0FBQUEsSUFFM0Usc0NBQXNDLENBQUMsV0FBVyxvQkFBb0I7QUFBQSxNQUNsRSxNQUFNLGFBQWEsS0FBSyxzQkFBc0IsSUFBSSxTQUFTO0FBQUEsTUFDM0QsSUFBSSxlQUFlLFdBQVc7QUFBQSxRQUMxQixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsTUFBTSxXQUFXLFdBQVcsSUFBSSxtQkFBbUIsSUFBSTtBQUFBLE1BQ3ZELElBQUksYUFBYSxXQUFXO0FBQUEsUUFDeEIsT0FBTztBQUFBLE1BQ1g7QUFBQSxNQUdBLE9BQU8sS0FBSywrQkFBK0Isb0JBQW9CLFFBQVE7QUFBQTtBQUFBLElBRTNFLGdCQUFnQixDQUFDLFNBQVMsWUFBWTtBQUFBLE1BQ2xDLE1BQU0sYUFBYSxRQUFRLHdCQUF3QjtBQUFBLE1BQ25ELE1BQU0sV0FBVyxXQUFXLElBQUksV0FBVyxJQUFJO0FBQUEsTUFDL0MsSUFBSSxhQUFhLFdBQVc7QUFBQSxRQUN4QixXQUFXLElBQUksV0FBVyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQUEsUUFDekM7QUFBQSxNQUNKO0FBQUEsTUFDQSxTQUFTLEtBQUssT0FBTztBQUFBO0FBQUEsSUFFekIsOEJBQThCLENBQUMsb0JBQW9CLGtCQUFrQjtBQUFBLE1BQ2pFLElBQUksb0JBQW9CO0FBQUEsTUFDeEIsV0FBVyxtQkFBbUIsa0JBQWtCO0FBQUEsUUFDNUMsTUFBTSxxQkFBcUIsZ0JBQWdCLHdCQUF3QjtBQUFBLFFBQ25FLEtBQUssR0FBRyx1QkFBdUIsNEJBQTRCLG9CQUFvQixrQkFBa0IsR0FBRztBQUFBLFVBRWhHLElBQUksbUJBQW1CLGdCQUFnQixtQkFBbUIsYUFBYTtBQUFBLFlBQ25FLElBQUksbUJBQW1CLFlBQVksU0FDL0IsbUJBQW1CLFlBQVksUUFBUTtBQUFBLGNBQ3ZDLGdCQUFnQixrQkFBa0IsbUJBQW1CLFdBQVc7QUFBQSxZQUNwRTtBQUFBLFlBQ0EsS0FBSSxLQUFLLEtBQUssdUNBQXVDLG1CQUFtQixNQUFNO0FBQUEsR0FBcUg7QUFBQSxJQUFlLEdBQUcsd0JBQXdCLDJCQUEyQixvQkFBb0Isa0JBQWtCLEdBQUc7QUFBQSw0QkFBbUUsR0FBRyx3QkFBd0IsNkJBQTZCLG9CQUFvQixrQkFBa0IsQ0FBQztBQUFBLFVBQ3ZkO0FBQUEsVUFFQSxvQkFBb0I7QUFBQSxRQUN4QixFQUNLO0FBQUEsVUFHRCxLQUFJLEtBQUssS0FBSyx1Q0FBdUMsbUJBQW1CLE1BQU07QUFBQSxHQUFvRjtBQUFBLElBQWUsR0FBRyx3QkFBd0IsMkJBQTJCLG9CQUFvQixrQkFBa0IsR0FBRztBQUFBLElBQStCLEdBQUcsd0JBQXdCLDZCQUE2QixvQkFBb0Isa0JBQWtCLENBQUM7QUFBQTtBQUFBLE1BRXRaO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVmO0FBQUEsRUFDUSxnQ0FBd0I7QUFBQTs7OztFQzlGaEMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNkJBQTBCO0FBQUE7QUFBQSxFQUlsQyxNQUFNLG1CQUFtQjtBQUFBLElBQ3JCO0FBQUEsSUFDQSxXQUFXLENBQUMsa0JBQWtCO0FBQUEsTUFDMUIsS0FBSyxtQkFBbUI7QUFBQTtBQUFBLElBRTVCLE1BQU0sQ0FBQyxPQUFPLFlBQVksVUFBUyxZQUFZO0FBQUEsTUFDM0MsS0FBSyxpQkFBaUIsUUFBUSxRQUFNO0FBQUEsUUFDaEMsR0FBRyxPQUFPLE9BQU8sWUFBWSxVQUFTLFVBQVU7QUFBQSxPQUNuRDtBQUFBO0FBQUEsRUFFVDtBQUFBLEVBQ1EsNkJBQXFCO0FBQUE7Ozs7RUNoQjdCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELG9DQUFvQywrQkFBNEI7QUFBQSxFQUN4RSxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQUlOLE1BQU0scUJBQXFCO0FBQUEsSUFDdkI7QUFBQSxJQUNBO0FBQUEsSUFJQSxVQUFVLElBQUksVUFBVTtBQUFBLElBQ3hCLFdBQVcsQ0FBQyxpQkFBaUIsWUFBWTtBQUFBLE1BQ3JDLEtBQUssa0JBQWtCO0FBQUEsTUFDdkIsS0FBSyxhQUFhO0FBQUE7QUFBQSxJQUt0QixPQUFPLENBQUMsT0FBTyxhQUFhLENBQUMsR0FBRztBQUFBLE1BQzVCLElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxRQUMzQixNQUFNLEtBQUssS0FBSyx1Q0FBdUMsS0FBSyxvQkFBb0IsT0FBTztBQUFBLFFBQ3ZGO0FBQUEsTUFDSjtBQUFBLE1BQ0EsSUFBSSxLQUFLLGVBQWUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFPLFVBQVUsS0FBSyxHQUFHO0FBQUEsUUFDckUsTUFBTSxLQUFLLEtBQUssMkRBQTJELEtBQUssa0RBQWtEO0FBQUEsUUFDbEksUUFBUSxLQUFLLE1BQU0sS0FBSztBQUFBLFFBRXhCLElBQUksQ0FBQyxPQUFPLFVBQVUsS0FBSyxHQUFHO0FBQUEsVUFDMUI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSyxRQUFRLElBQUksWUFBWSxLQUFLO0FBQUE7QUFBQSxFQUUxQztBQUFBLEVBQ1EsK0JBQXVCO0FBQUE7QUFBQSxFQUkvQixNQUFNLDBCQUEwQjtBQUFBLElBSTVCLFVBQVUsSUFBSTtBQUFBLElBSWQsT0FBTyxDQUFDLFFBQVEsT0FBTyxhQUFhLENBQUMsR0FBRztBQUFBLE1BQ3BDLElBQUksRUFBRSxHQUFHLGNBQWMsd0JBQXdCLE1BQU0sR0FBRztBQUFBLFFBQ3BEO0FBQUEsTUFDSjtBQUFBLE1BQ0EsSUFBSSxPQUFNLEtBQUssUUFBUSxJQUFJLE1BQU07QUFBQSxNQUNqQyxJQUFJLFFBQU8sTUFBTTtBQUFBLFFBQ2IsT0FBTSxJQUFJLFVBQVU7QUFBQSxRQUNwQixLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUc7QUFBQSxNQUNoQztBQUFBLE1BQ0EsSUFBSSxPQUFPLFVBQVUsVUFBVTtBQUFBLFFBQzNCLE1BQU0sS0FBSyxLQUFLLHVDQUF1QyxPQUFPLFlBQVksU0FBUyxPQUFPO0FBQUEsUUFDMUY7QUFBQSxNQUNKO0FBQUEsTUFDQSxJQUFJLE9BQU8sWUFBWSxjQUFjLE1BQU0sVUFBVSxPQUNqRCxDQUFDLE9BQU8sVUFBVSxLQUFLLEdBQUc7QUFBQSxRQUMxQixNQUFNLEtBQUssS0FBSywyREFBMkQsT0FBTyxZQUFZLHVDQUF1QztBQUFBLFFBQ3JJLFFBQVEsS0FBSyxNQUFNLEtBQUs7QUFBQSxRQUV4QixJQUFJLENBQUMsT0FBTyxVQUFVLEtBQUssR0FBRztBQUFBLFVBQzFCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxNQUNBLEtBQUksSUFBSSxZQUFZLEtBQUs7QUFBQTtBQUFBLEVBRWpDO0FBQUEsRUFDUSxvQ0FBNEI7QUFBQTs7OztFQzNFcEMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNkJBQTBCO0FBQUEsRUFDbEMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFPTixNQUFNLG1CQUFtQjtBQUFBLElBQ3JCLGFBQWEsQ0FBQztBQUFBLElBQ2Qsa0JBQWtCLENBQUM7QUFBQSxJQUNuQixXQUFXLENBQUMsVUFBVSxZQUFZO0FBQUEsTUFDOUIsTUFBTSxNQUFNLEtBQUssY0FBYyxVQUFVLFVBQVU7QUFBQSxNQUNuRCxJQUFJLE9BQU8sR0FBRztBQUFBLFFBQ1Y7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLFdBQVcsS0FBSyxFQUFFLFVBQVUsV0FBVyxDQUFDO0FBQUE7QUFBQSxJQUVqRCxjQUFjLENBQUMsVUFBVSxZQUFZO0FBQUEsTUFDakMsTUFBTSxNQUFNLEtBQUssY0FBYyxVQUFVLFVBQVU7QUFBQSxNQUNuRCxJQUFJLE1BQU0sR0FBRztBQUFBLFFBQ1Q7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLFdBQVcsT0FBTyxLQUFLLENBQUM7QUFBQTtBQUFBLElBRWpDLGdCQUFnQixDQUFDLFVBQVUsYUFBYTtBQUFBLE1BRXBDLE1BQU0sd0JBQXdCLElBQUksSUFBSSxZQUFZLE9BQU8sY0FBYyxzQkFBc0IsQ0FBQztBQUFBLE1BQzlGLElBQUksc0JBQXNCLFNBQVMsR0FBRztBQUFBLFFBQ2xDLE1BQU0sS0FBSyxNQUFNLG9FQUFvRSxXQUFXO0FBQUEsUUFDaEc7QUFBQSxNQUNKO0FBQUEsTUFDQSxNQUFNLE1BQU0sS0FBSyxtQkFBbUIsVUFBVSxxQkFBcUI7QUFBQSxNQUNuRSxJQUFJLE9BQU8sR0FBRztBQUFBLFFBQ1Y7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLGdCQUFnQixLQUFLLEVBQUUsVUFBVSxhQUFhLHNCQUFzQixDQUFDO0FBQUE7QUFBQSxJQUU5RSxtQkFBbUIsQ0FBQyxVQUFVLGFBQWE7QUFBQSxNQUV2QyxNQUFNLHdCQUF3QixJQUFJLElBQUksWUFBWSxPQUFPLGNBQWMsc0JBQXNCLENBQUM7QUFBQSxNQUM5RixNQUFNLE1BQU0sS0FBSyxtQkFBbUIsVUFBVSxxQkFBcUI7QUFBQSxNQUNuRSxJQUFJLE1BQU0sR0FBRztBQUFBLFFBQ1Q7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLGdCQUFnQixPQUFPLEtBQUssQ0FBQztBQUFBO0FBQUEsU0FLaEMsUUFBTyxDQUFDLGdCQUFnQixlQUFlO0FBQUEsTUFDekMsTUFBTSxrQkFBa0IsS0FBSyxrQkFBa0IsZ0JBQWdCLGFBQWE7QUFBQSxNQUM1RSxNQUFNLHVCQUF1QixLQUFLLHVCQUF1QixnQkFBZ0IsYUFBYTtBQUFBLE1BQ3RGLE1BQU0sVUFBVSxPQUFPLEdBQUcsUUFBUSxtQkFBbUI7QUFBQSxRQUNqRCxHQUFHO0FBQUEsUUFDSCxHQUFHO0FBQUEsTUFDUCxDQUFDO0FBQUEsTUFDRCxNQUFNLGFBQWEsUUFDZCxPQUFPLFFBQVEsa0NBQWtDLEVBQ2pELElBQUksUUFBTSxHQUFHLE1BQU07QUFBQSxNQUN4QixPQUFPO0FBQUE7QUFBQSxJQUVYLGlCQUFpQixDQUFDLGlCQUFpQixlQUFlO0FBQUEsTUFDOUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxTQUFTLFVBQVUsaUJBQWlCO0FBQUEsUUFDM0QsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIscUJBQXFCLFdBQVcsWUFBWSxNQUFNLFdBQVcsWUFBWSxTQUFTO0FBQUEsUUFDbEksSUFBSSxjQUFjLFFBQVEsUUFBUSxTQUFTLGdCQUFnQixDQUFDO0FBQUEsUUFDNUQsSUFBSSxpQkFBaUIsTUFBTTtBQUFBLFVBQ3ZCLGVBQWUsR0FBRyxRQUFRLGlCQUFpQixhQUFhLGFBQWE7QUFBQSxRQUN6RTtBQUFBLFFBQ0EsTUFBTTtBQUFBLFFBQ04sV0FBVyxnQkFBZ0IsUUFBUSxtQkFBaUI7QUFBQSxVQUNoRCxjQUFjLE9BQU8saUJBQWlCLFNBQVMsZUFBZTtBQUFBLFNBQ2pFO0FBQUEsT0FDSjtBQUFBO0FBQUEsSUFFTCxzQkFBc0IsQ0FBQyxpQkFBaUIsZUFBZTtBQUFBLE1BQ25ELE9BQU8sS0FBSyxnQkFBZ0IsSUFBSSxTQUFTLFVBQVUsa0JBQWtCO0FBQUEsUUFDakUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUI7QUFBQSxRQUNoRCxJQUFJLGNBQWMsUUFBUSxRQUFRLFNBQVMsZ0JBQWdCLENBQUM7QUFBQSxRQUM1RCxJQUFJLGlCQUFpQixNQUFNO0FBQUEsVUFDdkIsZUFBZSxHQUFHLFFBQVEsaUJBQWlCLGFBQWEsYUFBYTtBQUFBLFFBQ3pFO0FBQUEsUUFDQSxNQUFNO0FBQUEsUUFDTixZQUFZLFFBQVEsZ0JBQWM7QUFBQSxVQUM5QixNQUFNLFNBQVMsaUJBQWlCLFFBQVEsSUFBSSxVQUFVO0FBQUEsVUFDdEQsSUFBSSxVQUFVLE1BQU07QUFBQSxZQUNoQjtBQUFBLFVBQ0o7QUFBQSxVQUNBLFdBQVcsZ0JBQWdCLFFBQVEsbUJBQWlCO0FBQUEsWUFDaEQsY0FBYyxPQUFPLFFBQVEsZUFBZTtBQUFBLFdBQy9DO0FBQUEsU0FDSjtBQUFBLE9BQ0o7QUFBQTtBQUFBLElBRUwsYUFBYSxDQUFDLFVBQVUsWUFBWTtBQUFBLE1BQ2hDLE9BQU8sS0FBSyxXQUFXLFVBQVUsYUFBVTtBQUFBLFFBQ3ZDLE9BQU8sUUFBTyxhQUFhLFlBQVksUUFBTyxlQUFlO0FBQUEsT0FDaEU7QUFBQTtBQUFBLElBRUwsa0JBQWtCLENBQUMsVUFBVSxhQUFhO0FBQUEsTUFDdEMsT0FBTyxLQUFLLGdCQUFnQixVQUFVLGFBQVU7QUFBQSxRQUM1QyxPQUFRLFFBQU8sYUFBYSxhQUN2QixHQUFHLFFBQVEsV0FBVyxRQUFPLGFBQWEsV0FBVztBQUFBLE9BQzdEO0FBQUE7QUFBQSxFQUVUO0FBQUEsRUFDUSw2QkFBcUI7QUFBQTs7OztFQzlHN0IsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNEJBQXlCO0FBQUEsRUFDakMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFNTixNQUFNLDBCQUEwQixnQkFBZ0IsY0FBYztBQUFBLElBQzFEO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsc0JBQXNCLFlBQVksc0JBQXNCLGtCQUFrQiw4QkFBOEI7QUFBQSxNQUNoSCxNQUFNLG9CQUFvQjtBQUFBLE1BQzFCLEtBQUssdUJBQXVCO0FBQUEsTUFDNUIsS0FBSywrQkFBK0I7QUFBQSxNQUNwQyxLQUFLLHNCQUFzQixJQUFJLHVCQUF1QixxQkFBcUIsWUFBWSxLQUFLLDRCQUE0QjtBQUFBLE1BQ3hILEtBQUsseUJBQXlCLElBQUksMEJBQTBCLHdCQUF3QixZQUFZLGdCQUFnQjtBQUFBO0FBQUEsSUFFcEgsTUFBTSxDQUFDLE9BQU8sWUFBWSxVQUFTLFlBQVk7QUFBQSxNQUMzQyxhQUFhLEtBQUsscUJBQXFCLFFBQVEsWUFBWSxRQUFPO0FBQUEsTUFDbEUsS0FBSyxvQkFBb0IsT0FBTyxPQUFPLFlBQVksVUFBUyxVQUFVO0FBQUE7QUFBQSxJQVExRSxPQUFPLENBQUMsV0FBVyxnQkFBZ0I7QUFBQSxNQUMvQixNQUFNLGdCQUFnQixLQUFLLG9CQUFvQixRQUFRO0FBQUEsTUFDdkQsT0FBTyxLQUFLLHVCQUF1QixhQUFhLFdBQVcsS0FBSyx1QkFBdUIsZUFBZSxjQUFjO0FBQUE7QUFBQSxFQUU1SDtBQUFBLEVBQ1EsNEJBQW9CO0FBQUE7Ozs7RUNyQzVCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDRDQUE0Qyw2Q0FBNkMseUNBQXlDLHdDQUFxQztBQUFBO0FBQUEsRUFDL0ssTUFBTSx3QkFBd0I7QUFBQSxJQUMxQixPQUFPLENBQUMsVUFBVSxVQUFVO0FBQUEsTUFDeEIsT0FBTztBQUFBO0FBQUEsRUFFZjtBQUFBO0FBQUEsRUFDQSxNQUFNLHlCQUF5QjtBQUFBLElBQzNCO0FBQUEsSUFDQSxXQUFXLENBQUMsYUFBYTtBQUFBLE1BQ3JCLEtBQUssY0FBYztBQUFBO0FBQUEsSUFFdkIsT0FBTyxDQUFDLFVBQVUsVUFBUztBQUFBLE1BQ3ZCLElBQUkscUJBQXFCO0FBQUEsTUFDekIsV0FBVyxhQUFhLEtBQUssYUFBYTtBQUFBLFFBQ3RDLHFCQUFxQixVQUFVLFFBQVEsb0JBQW9CLFFBQU87QUFBQSxNQUN0RTtBQUFBLE1BQ0EsT0FBTztBQUFBO0FBQUEsRUFFZjtBQUFBO0FBQUEsRUFDQSxNQUFNLG1CQUFtQjtBQUFBLElBQ3JCO0FBQUEsSUFDQSxXQUFXLENBQUMsd0JBQXdCO0FBQUEsTUFDaEMsS0FBSyx5QkFBeUI7QUFBQTtBQUFBLElBRWxDLE9BQU8sQ0FBQyxVQUFVLFVBQVU7QUFBQSxNQUN4QixNQUFNLHFCQUFxQixDQUFDO0FBQUEsTUFDNUIsT0FBTyxLQUFLLFFBQVEsRUFDZixPQUFPLG1CQUFpQixLQUFLLHVCQUF1QixTQUFTLGFBQWEsQ0FBQyxFQUMzRSxRQUFRLG1CQUFrQixtQkFBbUIsaUJBQWlCLFNBQVMsY0FBZTtBQUFBLE1BQzNGLE9BQU87QUFBQTtBQUFBLEVBRWY7QUFBQTtBQUFBLEVBQ0EsTUFBTSxrQkFBa0I7QUFBQSxJQUNwQjtBQUFBLElBQ0EsV0FBVyxDQUFDLHVCQUF1QjtBQUFBLE1BQy9CLEtBQUssd0JBQXdCO0FBQUE7QUFBQSxJQUVqQyxPQUFPLENBQUMsVUFBVSxVQUFVO0FBQUEsTUFDeEIsTUFBTSxxQkFBcUIsQ0FBQztBQUFBLE1BQzVCLE9BQU8sS0FBSyxRQUFRLEVBQ2YsT0FBTyxtQkFBaUIsQ0FBQyxLQUFLLHNCQUFzQixTQUFTLGFBQWEsQ0FBQyxFQUMzRSxRQUFRLG1CQUFrQixtQkFBbUIsaUJBQWlCLFNBQVMsY0FBZTtBQUFBLE1BQzNGLE9BQU87QUFBQTtBQUFBLEVBRWY7QUFBQSxFQU1BLFNBQVMsNkJBQTZCLEdBQUc7QUFBQSxJQUNyQyxPQUFPO0FBQUE7QUFBQSxFQUVILHdDQUFnQztBQUFBLEVBUXhDLFNBQVMsOEJBQThCLENBQUMsWUFBWTtBQUFBLElBQ2hELE9BQU8sSUFBSSx5QkFBeUIsVUFBVTtBQUFBO0FBQUEsRUFFMUMseUNBQWlDO0FBQUEsRUFLekMsU0FBUyxrQ0FBa0MsQ0FBQyxvQkFBb0I7QUFBQSxJQUM1RCxPQUFPLElBQUksbUJBQW1CLGtCQUFrQjtBQUFBO0FBQUEsRUFFNUMsNkNBQXFDO0FBQUEsRUFJN0MsU0FBUyxpQ0FBaUMsQ0FBQyxtQkFBbUI7QUFBQSxJQUMxRCxPQUFPLElBQUksa0JBQWtCLGlCQUFpQjtBQUFBO0FBQUEsRUFFMUMsNENBQW9DO0FBQUEsRUFDNUMsSUFBTSxPQUFPLElBQUk7QUFBQTs7OztFQ2pGakIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsMkJBQXdCO0FBQUEsRUFDaEMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFJTixNQUFNLGlCQUFpQjtBQUFBLElBQ25CO0FBQUEsSUFDQTtBQUFBLElBQ0Esd0JBQXdCLElBQUksd0JBQXdCO0FBQUEsSUFDcEQscUJBQXFCLElBQUkscUJBQXFCO0FBQUEsSUFDOUM7QUFBQSxJQUNBLFdBQVcsQ0FBQywyQkFBMkIsdUJBQXVCO0FBQUEsTUFDMUQsS0FBSyw0QkFBNEI7QUFBQSxNQUNqQyxLQUFLLHdCQUF3QjtBQUFBLE1BQzdCLEtBQUssUUFBUSxJQUFJLFFBQVEsTUFBTSxJQUFJO0FBQUE7QUFBQSxJQUV2QyxxQkFBcUIsQ0FBQyxZQUFZO0FBQUEsTUFDOUIsTUFBTSxXQUFXLEtBQUssdUJBQXVCLFlBQVksb0JBQW9CLGlCQUFpQjtBQUFBLE1BQzlGLElBQUksU0FBUyxXQUFXLEdBQUc7QUFBQSxRQUN2QixPQUFPLFNBQVM7QUFBQSxNQUNwQjtBQUFBLE1BQ0EsT0FBTyxJQUFJLDZCQUE2QixtQkFBbUIsUUFBUTtBQUFBO0FBQUEsSUFFdkUsMEJBQTBCLENBQUMsWUFBWTtBQUFBLE1BQ25DLE1BQU0sV0FBVyxLQUFLLHVCQUF1QixZQUFZLHFCQUFxQixrQkFBa0I7QUFBQSxNQUNoRyxPQUFPO0FBQUE7QUFBQSxTQVFMLFFBQU8sQ0FBQyxXQUFXLGdCQUFnQixTQUFTO0FBQUEsTUFLOUMsTUFBTSxVQUFTLE1BQU0sS0FBSyxtQkFBbUIsUUFBUSxnQkFBZ0IsU0FBUyxhQUFhO0FBQUEsTUFDM0YsTUFBTSxXQUFXLEtBQUssc0JBQXNCLFlBQVksU0FBUztBQUFBLE1BRWpFLElBQUksU0FBUyxXQUFXLEdBQUc7QUFBQSxRQUN2QixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsTUFBTSxpQkFBaUIsU0FDbEIsSUFBSSxtQkFBaUI7QUFBQSxRQUN0QixPQUFPLGNBQWMsUUFBUSxXQUFXLGNBQWM7QUFBQSxPQUN6RCxFQUNJLE9BQU8sUUFBUSxZQUFZO0FBQUEsTUFFaEMsSUFBSSxlQUFlLFdBQVcsR0FBRztBQUFBLFFBQzdCLE9BQU8sRUFBRSxnQkFBTztBQUFBLE1BQ3BCO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDSCxjQUFjO0FBQUEsVUFDVixPQUFPLEtBQUs7QUFBQSxVQUNaLFNBQVM7QUFBQSxRQUNiO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQTtBQUFBLElBRUosc0JBQXNCLENBQUMsWUFBWSxtQkFBbUI7QUFBQSxNQUNsRCxNQUFNLFFBQVEsS0FBSywwQkFBMEIsYUFBYSxVQUFVLFlBQVksS0FBSyxxQkFBcUI7QUFBQSxNQUMxRyxJQUFJLFdBQVcsTUFBTSxJQUFJLFVBQVE7QUFBQSxRQUM3QixNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixvQ0FBb0MsTUFBTSxVQUFVO0FBQUEsUUFDdEcsTUFBTSxvQkFBb0IsS0FBSyxzQkFBc0IsOEJBQThCLGNBQWM7QUFBQSxRQUNqRyxJQUFJLHFCQUFxQixNQUFNO0FBQUEsVUFDM0IsT0FBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sYUFBYSxLQUFLLFlBQVksaUJBQWlCLGNBQWM7QUFBQSxRQUNuRSxNQUFNLGNBQWMsSUFBSSxrQkFBa0IsZ0JBQWdCLFlBQVksS0FBSyxxQkFBcUIsS0FBSywwQkFBMEIsa0JBQWtCLEtBQUssMkJBQTJCO0FBQUEsUUFDakwsS0FBSyxzQkFBc0IsU0FBUyxXQUFXO0FBQUEsUUFDL0MsT0FBTztBQUFBLE9BQ1Y7QUFBQSxNQUVELElBQUksU0FBUyxXQUFXLEdBQUc7QUFBQSxRQUN2QixNQUFNLDJCQUEyQixLQUFLLDBCQUEwQixtQkFBbUIsV0FBVyxJQUFJO0FBQUEsUUFDbEcsTUFBTSxvQkFBb0IseUJBQXlCLElBQUksRUFBRSxXQUFXLGlCQUFpQjtBQUFBLFVBQ2pGLE1BQU0sb0JBQW9CLEtBQUssc0JBQXNCLHVDQUF1QyxXQUFXLFVBQVU7QUFBQSxVQUNqSCxJQUFJLHFCQUFxQixNQUFNO0FBQUEsWUFDM0IsT0FBTztBQUFBLFVBQ1g7QUFBQSxVQUNBLE1BQU0sYUFBYSxZQUFZLGlCQUFpQixVQUFVO0FBQUEsVUFDMUQsTUFBTSxtQkFBbUIsVUFBVSx1QkFBdUIsV0FBVyxJQUFJO0FBQUEsVUFDekUsTUFBTSxVQUFVLElBQUksa0JBQWtCLFlBQVksYUFBYSxHQUFHLHNCQUFzQiwrQkFBK0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0I7QUFBQSxVQUN2SixLQUFLLHNCQUFzQixxQkFBcUIsV0FBVyxPQUFPO0FBQUEsVUFDbEUsT0FBTztBQUFBLFNBQ1Y7QUFBQSxRQUNELFdBQVcsU0FBUyxPQUFPLGlCQUFpQjtBQUFBLE1BQ2hEO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVmO0FBQUEsRUFDUSwyQkFBbUI7QUFBQTs7OztFQ3RHM0IsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsbUNBQWdDO0FBQUEsRUFDeEMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFJTixNQUFNLHlCQUF5QjtBQUFBLElBQzNCO0FBQUEsSUFDQSxlQUFlLElBQUksZUFBZTtBQUFBLElBQ2xDLG1CQUFtQixDQUFDO0FBQUEsSUFDcEIsb0JBQW9CLElBQUk7QUFBQSxJQUN4QixXQUFXLENBQUMsVUFBVTtBQUFBLE1BQ2xCLEtBQUssV0FBVztBQUFBO0FBQUEsSUFFcEIsbUJBQW1CLENBQUMsc0JBQXNCO0FBQUEsTUFDdEMsTUFBTSxNQUFNLEdBQUcsUUFBUSx3QkFBd0Isb0JBQW9CO0FBQUEsTUFDbkUsSUFBSSxtQkFBbUIsS0FBSyxrQkFBa0IsSUFBSSxFQUFFO0FBQUEsTUFDcEQsSUFBSSxvQkFBb0IsTUFBTTtBQUFBLFFBQzFCLG1CQUFtQixJQUFJLG1CQUFtQixpQkFBaUIsTUFBTSxvQkFBb0I7QUFBQSxRQUNyRixLQUFLLGtCQUFrQixJQUFJLElBQUksZ0JBQWdCO0FBQUEsTUFDbkQ7QUFBQSxNQUNBLE9BQU87QUFBQTtBQUFBLElBRVgsa0JBQWtCLENBQUMsZ0JBQWdCO0FBQUEsTUFDL0IsTUFBTSxTQUFTLENBQUM7QUFBQSxNQUNoQixXQUFXLGFBQWEsS0FBSyxrQkFBa0I7QUFBQSxRQUMzQyxPQUFPLEtBQUs7QUFBQSxVQUNSO0FBQUEsV0FDQyxHQUFHLG9CQUFvQixlQUFlLFVBQVUsa0JBQWtCLGNBQWMsQ0FBQztBQUFBLFFBQ3RGLENBQUM7QUFBQSxNQUNMO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVmO0FBQUEsRUFDUSxtQ0FBMkI7QUFBQTs7OztFQ3JDbkMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsMEJBQXVCO0FBQUEsRUFDL0IsSUFBTTtBQUFBO0FBQUEsRUFNTixNQUFNLGdCQUFnQjtBQUFBLElBQ2xCO0FBQUEsSUFDQTtBQUFBLElBQ0EsV0FBVyxDQUFDLGNBQWMsZUFBZTtBQUFBLE1BQ3JDLEtBQUssZUFBZTtBQUFBLE1BQ3BCLEtBQUssZ0JBQWdCO0FBQUE7QUFBQSxTQUVuQixRQUFPLENBQUMsU0FBUztBQUFBLE1BQ25CLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxnQkFBZ0IsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUM1RCxNQUFNLGVBQWUsQ0FBQztBQUFBLE1BQ3RCLE1BQU0sVUFBUyxDQUFDO0FBQUEsTUFDaEIsTUFBTSwwQkFBMEIsTUFBTSxLQUFLLEtBQUssYUFBYSxrQkFBa0IsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLHFCQUFxQjtBQUFBLFFBQ3JILE1BQU0sVUFBVSxNQUFNLGlCQUFpQixRQUFRLE1BQU0sZ0JBQWdCLE9BQU87QUFBQSxRQUU1RSxJQUFJLFNBQVMsZ0JBQWdCLE1BQU07QUFBQSxVQUMvQixhQUFhLEtBQUssUUFBUSxZQUFZO0FBQUEsUUFDMUM7QUFBQSxRQUVBLElBQUksU0FBUyxVQUFVLE1BQU07QUFBQSxVQUN6QixRQUFPLEtBQUssR0FBRyxRQUFRLE1BQU07QUFBQSxRQUNqQztBQUFBLE9BQ0g7QUFBQSxNQUNELE1BQU0sUUFBUSxJQUFJLHVCQUF1QjtBQUFBLE1BQ3pDLE9BQU87QUFBQSxRQUNILGlCQUFpQjtBQUFBLFVBQ2IsVUFBVSxLQUFLLGFBQWE7QUFBQSxVQUM1QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFFBQVE7QUFBQSxNQUNaO0FBQUE7QUFBQSxTQUtFLFdBQVUsQ0FBQyxTQUFTO0FBQUEsTUFDdEIsTUFBTSxLQUFLLGNBQWMsV0FBVyxPQUFPO0FBQUE7QUFBQSxTQUt6QyxTQUFRLENBQUMsU0FBUztBQUFBLE1BQ3BCLE1BQU0sS0FBSyxjQUFjLFNBQVMsT0FBTztBQUFBO0FBQUEsSUFFN0MsNEJBQTRCLENBQUMsZ0JBQWdCO0FBQUEsTUFDekMsT0FBTyxLQUFLLGNBQWMsNkJBQTZCLGNBQWM7QUFBQTtBQUFBLElBRXpFLGlCQUFpQixDQUFDLGdCQUFnQjtBQUFBLE1BQzlCLE9BQU8sS0FBSyxjQUFjLGtCQUFrQixjQUFjO0FBQUE7QUFBQSxJQU05RCxzQkFBc0IsQ0FBQyxnQkFBZ0I7QUFBQSxNQUNuQyxPQUFPLEtBQUssY0FBYyx5QkFBeUIsY0FBYyxLQUFLO0FBQUE7QUFBQSxFQUU5RTtBQUFBLEVBQ1EsMEJBQWtCO0FBQUE7Ozs7RUNqRTFCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHlCQUF5QiwyQkFBd0I7QUFBQSxFQUl6RCxJQUFNLFNBQVM7QUFBQTtBQUFBLEVBSWYsTUFBTSxpQkFBaUI7QUFBQSxJQUNuQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxTQUFTO0FBQUEsTUFDakIsSUFBSSxZQUFZLEtBQUs7QUFBQSxRQUNqQixLQUFLLFlBQVk7QUFBQSxRQUNqQixLQUFLLFVBQVU7QUFBQSxNQUNuQixFQUNLO0FBQUEsUUFDRCxLQUFLLFlBQVk7QUFBQSxRQUNqQixLQUFLLFVBQVUsSUFBSSxPQUFPLGlCQUFpQixjQUFjLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFBQSxJQUd6RSxLQUFLLENBQUMsS0FBSztBQUFBLE1BQ1AsSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUNoQixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsT0FBTyxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQUE7QUFBQSxXQUV6QixhQUFhLENBQUMsU0FBUztBQUFBLE1BQzFCLE9BQU8sSUFBSSxRQUFRLFFBQVEsUUFBUSxNQUFNLEVBQUUsUUFBUSxLQUFLLElBQUk7QUFBQTtBQUFBLFdBRXpELFdBQVcsQ0FBQyxTQUFTO0FBQUEsTUFDeEIsT0FBTyxRQUFRLFNBQVMsR0FBRztBQUFBO0FBQUEsRUFFbkM7QUFBQSxFQUNRLDJCQUFtQjtBQUFBO0FBQUEsRUFDM0IsTUFBTSxlQUFlO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsU0FBUztBQUFBLE1BQ2pCLEtBQUssWUFBWSxZQUFZO0FBQUEsTUFDN0IsS0FBSyxXQUFXO0FBQUE7QUFBQSxJQUVwQixLQUFLLENBQUMsS0FBSztBQUFBLE1BQ1AsSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUNoQixPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsSUFBSSxRQUFRLEtBQUssVUFBVTtBQUFBLFFBQ3ZCLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVmO0FBQUEsRUFDUSx5QkFBaUI7QUFBQTs7OztFQ3JEekIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNkJBQTBCO0FBQUEsRUFDbEMsSUFBTTtBQUFBO0FBQUEsRUFDTixNQUFNLG1CQUFtQjtBQUFBLElBQ3JCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxVQUFVO0FBQUEsTUFDbEIsS0FBSyxjQUFjLElBQUksWUFBWSxpQkFBaUIsVUFBVSxRQUFRLEdBQUc7QUFBQSxNQUN6RSxLQUFLLFFBQVEsVUFBVTtBQUFBLE1BQ3ZCLEtBQUssY0FBYyxJQUFJLFlBQVksZUFBZSxVQUFVLElBQUk7QUFBQTtBQUFBLElBRXBFLE9BQU8sR0FBRztBQUFBLE1BQ04sT0FBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQixhQUFhLEdBQUc7QUFBQSxNQUNaLE9BQU8sS0FBSztBQUFBO0FBQUEsSUFFaEIsYUFBYSxHQUFHO0FBQUEsTUFDWixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRXBCO0FBQUEsRUFDUSw2QkFBcUI7QUFBQTs7OztFQ3RCN0IsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsd0JBQXFCO0FBQUEsRUFDN0IsSUFBTTtBQUFBO0FBQUEsRUFDTixNQUFNLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXLENBQUMsVUFBVTtBQUFBLE1BQ2xCLEtBQUssY0FBYyxJQUFJLFlBQVksZUFBZSxVQUFVLElBQUk7QUFBQSxNQUNoRSxLQUFLLGlCQUFpQixJQUFJLFlBQVksZUFBZSxVQUFVLE9BQU87QUFBQSxNQUN0RSxLQUFLLG1CQUFtQixJQUFJLFlBQVksZUFBZSxVQUFVLFNBQVM7QUFBQTtBQUFBLElBRTlFLGFBQWEsR0FBRztBQUFBLE1BQ1osT0FBTyxLQUFLO0FBQUE7QUFBQSxJQUtoQixnQkFBZ0IsR0FBRztBQUFBLE1BQ2YsT0FBTyxLQUFLO0FBQUE7QUFBQSxJQUVoQixrQkFBa0IsR0FBRztBQUFBLE1BQ2pCLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFcEI7QUFBQSxFQUNRLHdCQUFnQjtBQUFBOzs7O0VDekJ4QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxlQUFZO0FBQUEsRUFDcEIsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sU0FBUyxxQkFBcUIsQ0FBQyxTQUFTO0FBQUEsSUFDcEMsT0FBUSxRQUFRLGtCQUFrQixRQUM5QixRQUFRLGtCQUFrQixRQUMxQixRQUFRLGtCQUFrQixRQUMxQixRQUFRLGFBQWEsUUFDckIsUUFBUSxnQkFBZ0IsUUFDeEIsUUFBUSxrQkFBa0I7QUFBQTtBQUFBLEVBRWxDLFNBQVMsbUJBQW1CLENBQUMsYUFBYTtBQUFBLElBR3RDLElBQUksc0JBQXNCLFdBQVcsR0FBRztBQUFBLE1BQ3BDLE1BQU0sSUFBSSxNQUFNLHdEQUF3RDtBQUFBLElBQzVFO0FBQUEsSUFHQSxJQUFJLFlBQVksUUFBUSxTQUNuQixhQUFhLGtCQUFrQixRQUM1QixZQUFZLGlCQUFpQixZQUFZLFlBQVksY0FBYyxJQUFJO0FBQUEsTUFDM0UsTUFBTSxJQUFJLE1BQU0seUhBQXlIO0FBQUEsSUFDN0k7QUFBQTtBQUFBO0FBQUEsRUFLSixNQUFNLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUF5REEsV0FBVyxDQUFDLGFBQWE7QUFBQSxNQUNyQixvQkFBb0IsV0FBVztBQUFBLE1BRS9CLElBQUksWUFBWSx3QkFBd0IsTUFBTTtBQUFBLFFBQzFDLEtBQUssdUJBQXVCLEdBQUcsc0JBQXNCLGdDQUFnQyxZQUFZLG9CQUFvQjtBQUFBLE1BQ3pILEVBQ0s7QUFBQSxRQUNELEtBQUssdUJBQXVCLEdBQUcsc0JBQXNCLCtCQUErQjtBQUFBO0FBQUEsTUFFeEYsS0FBSyxPQUFPLFlBQVk7QUFBQSxNQUN4QixLQUFLLGNBQWMsWUFBWTtBQUFBLE1BQy9CLEtBQUssZUFBZSxHQUFHLG9CQUFvQixlQUFlLFlBQVksZUFBZSxFQUFFLE1BQU0sb0JBQW9CLGdCQUFnQixRQUFRLENBQUM7QUFBQSxNQUMxSSxLQUFLLHFCQUFxQixJQUFJLHFCQUFxQixtQkFBbUI7QUFBQSxRQUNsRSxNQUFNLFlBQVk7QUFBQSxRQUNsQixNQUFNLFlBQVk7QUFBQSxRQUNsQixNQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBQUEsTUFDRCxLQUFLLGdCQUFnQixJQUFJLGdCQUFnQixjQUFjO0FBQUEsUUFDbkQsTUFBTSxZQUFZO0FBQUEsUUFDbEIsU0FBUyxZQUFZO0FBQUEsUUFDckIsV0FBVyxZQUFZO0FBQUEsTUFDM0IsQ0FBQztBQUFBLE1BQ0QsS0FBSyw4QkFBOEIsWUFBWTtBQUFBO0FBQUEsRUFFdkQ7QUFBQSxFQUNRLGVBQU87QUFBQTs7OztFQ3pIZixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx3QkFBcUI7QUFBQSxFQUM3QixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQUlOLE1BQU0sY0FBYztBQUFBLElBQ2hCO0FBQUEsSUFDQSxZQUFZO0FBQUEsSUFDWixXQUFXLENBQUMsU0FBUztBQUFBLE1BQ2pCLEtBQUssZUFBZSxJQUFJLDJCQUEyQix5QkFBeUIsU0FBUyxhQUFhLEdBQUcsWUFBWSxpQkFBaUIsQ0FBQztBQUFBLE1BQ25JLElBQUksU0FBUyxTQUFTLFFBQVEsUUFBUSxNQUFNLFNBQVMsR0FBRztBQUFBLFFBQ3BELFdBQVcsY0FBYyxRQUFRLE9BQU87QUFBQSxVQUNwQyxLQUFLLGFBQWEsYUFBYSxRQUFRLElBQUksT0FBTyxLQUFLLFVBQVUsQ0FBQztBQUFBLFFBQ3RFO0FBQUEsTUFDSjtBQUFBLE1BQ0EsSUFBSSxTQUFTLFdBQVcsUUFBUSxRQUFRLFFBQVEsU0FBUyxHQUFHO0FBQUEsUUFDeEQsV0FBVyxnQkFBZ0IsUUFBUSxTQUFTO0FBQUEsVUFDeEMsTUFBTSxZQUFZLElBQUksa0JBQWtCLGdCQUFnQixLQUFLLGNBQWMsWUFBWTtBQUFBLFVBQ3ZGLGFBQWEsa0JBQWtCLFNBQVM7QUFBQSxVQUN4QyxLQUFLLGFBQWEsaUJBQWlCLEtBQUssU0FBUztBQUFBLFFBQ3JEO0FBQUEsTUFDSjtBQUFBO0FBQUEsSUFLSixRQUFRLENBQUMsTUFBTSxXQUFVLElBQUksVUFBVSxDQUFDLEdBQUc7QUFBQSxNQUV2QyxJQUFJLEtBQUssV0FBVztBQUFBLFFBQ2hCLE1BQU0sS0FBSyxLQUFLLGlEQUFpRDtBQUFBLFFBQ2pFLFFBQVEsR0FBRyxNQUFNLGlCQUFpQjtBQUFBLE1BQ3RDO0FBQUEsTUFDQSxPQUFPLEtBQUssYUFBYSxvQkFBb0I7QUFBQSxRQUN6QztBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQVcsUUFBUTtBQUFBLE1BQ3ZCLENBQUMsRUFBRTtBQUFBO0FBQUEsU0FRRCxTQUFRLENBQUMsU0FBUztBQUFBLE1BQ3BCLElBQUksS0FBSyxXQUFXO0FBQUEsUUFDaEIsTUFBTSxLQUFLLEtBQUssb0RBQW9EO0FBQUEsUUFDcEU7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLFlBQVk7QUFBQSxNQUNqQixNQUFNLFFBQVEsSUFBSSxLQUFLLGFBQWEsaUJBQWlCLElBQUksZUFBYTtBQUFBLFFBQ2xFLE9BQU8sVUFBVSxTQUFTLE9BQU87QUFBQSxPQUNwQyxDQUFDO0FBQUE7QUFBQSxTQU9BLFdBQVUsQ0FBQyxTQUFTO0FBQUEsTUFFdEIsSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUNoQixNQUFNLEtBQUssS0FBSyw2REFBNkQ7QUFBQSxRQUM3RTtBQUFBLE1BQ0o7QUFBQSxNQUNBLE1BQU0sUUFBUSxJQUFJLEtBQUssYUFBYSxpQkFBaUIsSUFBSSxlQUFhO0FBQUEsUUFDbEUsT0FBTyxVQUFVLFdBQVcsT0FBTztBQUFBLE9BQ3RDLENBQUM7QUFBQTtBQUFBLEVBRVY7QUFBQSxFQUNRLHdCQUFnQjtBQUFBOzs7O0VDM0V4QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx1QkFBdUIsNENBQTRDLDZDQUE2QywwQkFBMEIsd0JBQXdCLGdDQUFnQyxpQ0FBaUMsd0NBQXdDLHVCQUF1Qix5QkFBeUIsd0JBQXdCLGlDQUE4QjtBQUFBLEVBQ3pYLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLDBCQUEwQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyx5QkFBeUI7QUFBQSxJQUEwQixDQUFDO0FBQUEsRUFDM0osSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsaUJBQWlCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLGFBQWE7QUFBQSxJQUFpQixDQUFDO0FBQUEsRUFDN0gsT0FBTyxlQUFlLFNBQVMsa0JBQWtCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLGFBQWE7QUFBQSxJQUFrQixDQUFDO0FBQUEsRUFDL0gsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsZ0JBQWdCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLGVBQWU7QUFBQSxJQUFnQixDQUFDO0FBQUEsRUFDN0gsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsaUNBQWlDLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLGdDQUFnQztBQUFBLElBQWlDLENBQUM7QUFBQSxFQUNoTCxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUywwQkFBMEIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8seUJBQXlCO0FBQUEsSUFBMEIsQ0FBQztBQUFBLEVBQzNKLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHlCQUF5QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyx3QkFBd0I7QUFBQSxJQUF5QixDQUFDO0FBQUEsRUFDeEosSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsaUJBQWlCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLGdCQUFnQjtBQUFBLElBQWlCLENBQUM7QUFBQSxFQUNoSSxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxtQkFBbUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sb0JBQW9CO0FBQUEsSUFBbUIsQ0FBQztBQUFBLEVBQ3hJLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHNDQUFzQyxFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxzQkFBc0I7QUFBQSxJQUFzQyxDQUFDO0FBQUEsRUFDaEwsT0FBTyxlQUFlLFNBQVMscUNBQXFDLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLHNCQUFzQjtBQUFBLElBQXFDLENBQUM7QUFBQSxFQUM5SyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxnQkFBZ0IsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sUUFBUTtBQUFBLElBQWdCLENBQUM7QUFBQTs7OztFQ3RDdEgsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsa0NBQStCO0FBQUEsRUFNdkMsSUFBSTtBQUFBLEdBQ0gsUUFBUyxDQUFDLDBCQUF5QjtBQUFBLElBRWhDLHlCQUF3Qix5QkFBd0IseUNBQXlDLEtBQUs7QUFBQSxJQXlCOUYseUJBQXdCLHlCQUF3QixtQ0FBbUMsS0FBSztBQUFBLElBb0N4Rix5QkFBd0IseUJBQXdCLHdDQUF3QyxLQUFLO0FBQUEsS0FDOUYsMEJBQWtDLG9DQUFvQyxrQ0FBMEIsQ0FBQyxFQUFFO0FBQUE7Ozs7RUN4RXRHLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDRDQUE0QyxtQkFBbUIseUJBQXlCLDRCQUF5QjtBQUFBLEVBQ3pILElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLFNBQVMsaUJBQWlCLENBQUMsaUJBQWlCLFNBQVM7QUFBQSxJQUNqRCxNQUFNLFlBQVcsR0FBRyxRQUFRLGdCQUFnQixPQUFPO0FBQUEsSUFDbkQsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLGdCQUFnQixnQkFBZ0IsUUFBUTtBQUFBLElBQ2pGLE9BQU87QUFBQSxNQUNILFVBQVU7QUFBQSxNQUNWLFdBQVcsa0JBQWtCO0FBQUEsTUFDN0IsY0FBYyxlQUFlLGdCQUFnQixjQUFjLFFBQU87QUFBQSxJQUN0RTtBQUFBO0FBQUEsRUFFSSw0QkFBb0I7QUFBQSxFQUM1QixTQUFTLGNBQWMsQ0FBQyxjQUFjLFVBQVM7QUFBQSxJQUMzQyxPQUFPLE1BQU0sS0FBSyxhQUFhLElBQUksY0FBWTtBQUFBLE1BQzNDLFFBQVEsR0FBRyxXQUFXLDRCQUE0QixRQUFRLEtBQUs7QUFBQSxNQUMvRCxTQUFTLFFBQVEsUUFBUSxJQUFJLGdCQUFjLFNBQVMsWUFBWSxRQUFPLENBQUM7QUFBQSxNQUN4RSxXQUFXLFFBQVEsTUFBTTtBQUFBLElBQzdCLEVBQUUsQ0FBQztBQUFBO0FBQUEsRUFFQyx5QkFBaUI7QUFBQSxFQUN6QixTQUFTLFFBQVEsQ0FBQyxZQUFZLFVBQVM7QUFBQSxJQUNuQyxNQUFNLE1BQU07QUFBQSxNQUNSLE1BQU0sV0FBVyxXQUFXO0FBQUEsTUFDNUIsYUFBYSxXQUFXLFdBQVc7QUFBQSxNQUNuQyxNQUFNLFdBQVcsV0FBVztBQUFBLElBQ2hDO0FBQUEsSUFDQSxNQUFNLHlCQUF5Qix5QkFBeUIsV0FBVyxzQkFBc0I7QUFBQSxJQUN6RixRQUFRLFdBQVc7QUFBQSxXQUNWLGNBQWMsY0FBYztBQUFBLFFBQzdCLElBQUksTUFBTTtBQUFBLFVBQ047QUFBQSxVQUNBLGFBQWEsV0FBVztBQUFBLFVBQ3hCLFlBQVkscUJBQXFCLFlBQVksUUFBTztBQUFBLFFBQ3hEO0FBQUEsUUFDQTtBQUFBLFdBQ0MsY0FBYyxjQUFjO0FBQUEsUUFDN0IsSUFBSSxRQUFRO0FBQUEsVUFDUixZQUFZLHFCQUFxQixZQUFZLFFBQU87QUFBQSxRQUN4RDtBQUFBLFFBQ0E7QUFBQSxXQUNDLGNBQWMsY0FBYztBQUFBLFFBQzdCLElBQUksWUFBWTtBQUFBLFVBQ1o7QUFBQSxVQUNBLFlBQVksc0JBQXNCLFlBQVksUUFBTztBQUFBLFFBQ3pEO0FBQUEsUUFDQTtBQUFBLFdBQ0MsY0FBYyxjQUFjO0FBQUEsUUFDN0IsSUFBSSx1QkFBdUI7QUFBQSxVQUN2QjtBQUFBLFVBQ0EsWUFBWSxpQ0FBaUMsWUFBWSxRQUFPO0FBQUEsUUFDcEU7QUFBQSxRQUNBO0FBQUE7QUFBQSxJQUVSLE9BQU87QUFBQTtBQUFBLEVBRUgsbUJBQVc7QUFBQSxFQUNuQixTQUFTLG1CQUFtQixDQUFDLFdBQVcsV0FBVyxVQUFTO0FBQUEsSUFDeEQsTUFBTSxNQUFNO0FBQUEsTUFDUixhQUFhLEdBQUcsV0FBVyxjQUFjLFVBQVUsVUFBVTtBQUFBLE1BQzdELG1CQUFtQixTQUFRLGFBQWEsVUFBVSxTQUFTO0FBQUEsTUFDM0QsY0FBYyxTQUFRLGFBQWEsVUFBVSxPQUFPO0FBQUEsSUFDeEQ7QUFBQSxJQUNBLFFBQVE7QUFBQSxXQUNDLE1BQU0sVUFBVTtBQUFBLFFBQ2pCLElBQUksUUFBUSxVQUFVO0FBQUEsUUFDdEI7QUFBQSxXQUNDLE1BQU0sVUFBVTtBQUFBLFFBQ2pCLElBQUksV0FBVyxVQUFVO0FBQUEsUUFDekI7QUFBQTtBQUFBLElBRVIsT0FBTztBQUFBO0FBQUEsRUFFWCxTQUFTLG9CQUFvQixDQUFDLFlBQVksVUFBUztBQUFBLElBQy9DLE9BQU8sV0FBVyxXQUFXLElBQUksZUFBYTtBQUFBLE1BQzFDLE9BQU8sb0JBQW9CLFdBQVcsV0FBVyxXQUFXLFdBQVcsUUFBTztBQUFBLEtBQ2pGO0FBQUE7QUFBQSxFQUVMLFNBQVMscUJBQXFCLENBQUMsWUFBWSxVQUFTO0FBQUEsSUFDaEQsT0FBTyxXQUFXLFdBQVcsSUFBSSxlQUFhO0FBQUEsTUFDMUMsTUFBTSxZQUFZLFVBQVU7QUFBQSxNQUM1QixPQUFPO0FBQUEsUUFDSCxhQUFhLEdBQUcsV0FBVyxjQUFjLFVBQVUsVUFBVTtBQUFBLFFBQzdELGNBQWMsVUFBVSxRQUFRO0FBQUEsUUFDaEMsZ0JBQWdCLFVBQVUsUUFBUTtBQUFBLFFBQ2xDLE9BQU8sVUFBVTtBQUFBLFFBQ2pCLEtBQUssVUFBVTtBQUFBLFFBQ2YsS0FBSyxVQUFVO0FBQUEsUUFDZixLQUFLLFVBQVU7QUFBQSxRQUNmLG1CQUFtQixTQUFRLGFBQWEsVUFBVSxTQUFTO0FBQUEsUUFDM0QsY0FBYyxTQUFRLGFBQWEsVUFBVSxPQUFPO0FBQUEsTUFDeEQ7QUFBQSxLQUNIO0FBQUE7QUFBQSxFQUVMLFNBQVMsZ0NBQWdDLENBQUMsWUFBWSxVQUFTO0FBQUEsSUFDM0QsT0FBTyxXQUFXLFdBQVcsSUFBSSxlQUFhO0FBQUEsTUFDMUMsTUFBTSxZQUFZLFVBQVU7QUFBQSxNQUM1QixPQUFPO0FBQUEsUUFDSCxhQUFhLEdBQUcsV0FBVyxjQUFjLFVBQVUsVUFBVTtBQUFBLFFBQzdELE9BQU8sVUFBVTtBQUFBLFFBQ2pCLEtBQUssVUFBVTtBQUFBLFFBQ2YsS0FBSyxVQUFVO0FBQUEsUUFDZixLQUFLLFVBQVU7QUFBQSxRQUNmLFVBQVU7QUFBQSxVQUNOLFFBQVEsVUFBVSxTQUFTO0FBQUEsVUFDM0IsY0FBYyxVQUFVLFNBQVM7QUFBQSxRQUNyQztBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ04sUUFBUSxVQUFVLFNBQVM7QUFBQSxVQUMzQixjQUFjLFVBQVUsU0FBUztBQUFBLFFBQ3JDO0FBQUEsUUFDQSxPQUFPLFVBQVU7QUFBQSxRQUNqQixXQUFXLFVBQVU7QUFBQSxRQUNyQixtQkFBbUIsU0FBUSxhQUFhLFVBQVUsU0FBUztBQUFBLFFBQzNELGNBQWMsU0FBUSxhQUFhLFVBQVUsT0FBTztBQUFBLE1BQ3hEO0FBQUEsS0FDSDtBQUFBO0FBQUEsRUFFTCxTQUFTLHdCQUF3QixDQUFDLGFBQWE7QUFBQSxJQUMzQyxRQUFRO0FBQUEsV0FDQyxjQUFjLHVCQUF1QjtBQUFBLFFBQ3RDLE9BQU8saUJBQWlCLHdCQUF3QjtBQUFBLFdBQy9DLGNBQWMsdUJBQXVCO0FBQUEsUUFDdEMsT0FBTyxpQkFBaUIsd0JBQXdCO0FBQUE7QUFBQTtBQUFBLEVBRzVELFNBQVMsaUNBQWlDLENBQUMsaUJBQWlCLFNBQVM7QUFBQSxJQUNqRSxPQUFPO0FBQUEsTUFDSCxpQkFBaUIsZ0JBQWdCLElBQUksYUFBVyxrQkFBa0IsU0FBUyxPQUFPLENBQUM7QUFBQSxJQUN2RjtBQUFBO0FBQUEsRUFFSSw0Q0FBb0M7QUFBQTs7OztFQ3hINUMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsb0NBQWlDO0FBQUEsRUFDekMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTSxzQkFBc0IsS0FBSyxjQUFjLE1BQU0sVUFBVSxRQUFRLEdBQ2xFO0FBQUEsRUFDTCxJQUFNLHFCQUFxQixLQUFLLGNBQWMsTUFBTSxVQUFVLFFBQVEsR0FDakU7QUFBQSxFQUNHLG9DQUE0QjtBQUFBLElBQ2hDLGtCQUFrQixDQUFDLFFBQVE7QUFBQSxNQUN2QixNQUFNLFdBQVcsR0FBRyxXQUFXLG1DQUFtQyxDQUFDLEdBQUcsQ0FBQztBQUFBLE1BQ3ZFLE9BQU8sbUJBQW1CLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFBQTtBQUFBLElBRXJELHFCQUFxQixDQUFDLFFBQVE7QUFBQSxNQUMxQixPQUFPLG9CQUFvQixPQUFPLEdBQUc7QUFBQTtBQUFBLEVBRTdDO0FBQUE7Ozs7RUNoQkEsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsb0NBQWlDO0FBQUEsRUFFekMsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsNkJBQTZCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLFVBQVU7QUFBQSxJQUE2QixDQUFDO0FBQUE7Ozs7RUNuQmxKLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDBDQUEwQywwQkFBMEIscUJBQXFCLDRCQUF5QjtBQUFBLEVBQzFILElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUVOLElBQU0sd0NBQXdDO0FBQUEsRUFDOUMsSUFBTSxvQ0FBb0M7QUFBQSxFQUsxQyxTQUFTLGtCQUFrQixDQUFDLFlBQVksVUFBVTtBQUFBLElBRTlDLElBQUksUUFBUyxhQUFhLE1BQVE7QUFBQSxJQUNsQyxJQUFJLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNiO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVYLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxVQUFTO0FBQUEsSUFDdEMsTUFBTSxNQUFNLEtBQUssWUFBWTtBQUFBLElBQzdCLE1BQU0sU0FBUyxLQUFLO0FBQUEsSUFDcEIsTUFBTSxlQUFlLEtBQUssbUJBQW1CLFNBQ3ZDLFNBQVEsa0JBQWtCLEtBQUssbUJBQW1CLE1BQU0sSUFDeEQ7QUFBQSxJQUNOLE9BQU87QUFBQSxNQUNILFNBQVMsU0FBUSxrQkFBa0IsSUFBSSxPQUFPO0FBQUEsTUFDOUMsUUFBUSxTQUFRLGtCQUFrQixJQUFJLE1BQU07QUFBQSxNQUM1QztBQUFBLE1BQ0EsWUFBWSxJQUFJLFlBQVksVUFBVTtBQUFBLE1BQ3RDLE1BQU0sS0FBSztBQUFBLE1BRVgsTUFBTSxLQUFLLFFBQVEsT0FBTyxJQUFJLEtBQUssT0FBTztBQUFBLE1BQzFDLG1CQUFtQixTQUFRLGFBQWEsS0FBSyxTQUFTO0FBQUEsTUFDdEQsaUJBQWlCLFNBQVEsYUFBYSxLQUFLLE9BQU87QUFBQSxNQUNsRCxhQUFhLEdBQUcsV0FBVyxjQUFjLEtBQUssVUFBVTtBQUFBLE1BQ3hELHdCQUF3QixLQUFLO0FBQUEsTUFDN0IsUUFBUSxLQUFLLE9BQU8sSUFBSSxXQUFTLGdCQUFnQixPQUFPLFFBQU8sQ0FBQztBQUFBLE1BQ2hFLG9CQUFvQixLQUFLO0FBQUEsTUFDekIsUUFBUTtBQUFBLFFBRUosTUFBTSxPQUFPO0FBQUEsUUFDYixTQUFTLE9BQU87QUFBQSxNQUNwQjtBQUFBLE1BQ0EsT0FBTyxLQUFLLE1BQU0sSUFBSSxVQUFRLFdBQVcsTUFBTSxRQUFPLENBQUM7QUFBQSxNQUN2RCxtQkFBbUIsS0FBSztBQUFBLE1BQ3hCLE9BQU8sbUJBQW1CLElBQUksWUFBWSxLQUFLLG1CQUFtQixRQUFRO0FBQUEsSUFDOUU7QUFBQTtBQUFBLEVBRUksNEJBQW9CO0FBQUEsRUFDNUIsU0FBUyxVQUFVLENBQUMsTUFBTSxVQUFTO0FBQUEsSUFDL0IsT0FBTztBQUFBLE1BQ0gsWUFBWSxLQUFLLGNBQWMsR0FBRyxXQUFXLGNBQWMsS0FBSyxVQUFVLElBQUksQ0FBQztBQUFBLE1BQy9FLFFBQVEsU0FBUSxrQkFBa0IsS0FBSyxRQUFRLE1BQU07QUFBQSxNQUNyRCxTQUFTLFNBQVEsa0JBQWtCLEtBQUssUUFBUSxPQUFPO0FBQUEsTUFDdkQsWUFBWSxLQUFLLFFBQVEsWUFBWSxVQUFVO0FBQUEsTUFDL0Msd0JBQXdCLEtBQUssMEJBQTBCO0FBQUEsTUFDdkQsT0FBTyxtQkFBbUIsS0FBSyxRQUFRLFlBQVksS0FBSyxRQUFRLFFBQVE7QUFBQSxJQUM1RTtBQUFBO0FBQUEsRUFFSSxxQkFBYTtBQUFBLEVBQ3JCLFNBQVMsZUFBZSxDQUFDLFlBQVksVUFBUztBQUFBLElBQzFDLE9BQU87QUFBQSxNQUNILFlBQVksV0FBVyxjQUNoQixHQUFHLFdBQVcsY0FBYyxXQUFXLFVBQVUsSUFDbEQsQ0FBQztBQUFBLE1BQ1AsTUFBTSxXQUFXO0FBQUEsTUFDakIsY0FBYyxTQUFRLGFBQWEsV0FBVyxJQUFJO0FBQUEsTUFDbEQsd0JBQXdCLFdBQVcsMEJBQTBCO0FBQUEsSUFDakU7QUFBQTtBQUFBLEVBRUksMEJBQWtCO0FBQUEsRUFnQjFCLFNBQVMsK0JBQStCLENBQUMsT0FBTyxTQUFTO0FBQUEsSUFDckQsTUFBTSxZQUFXLEdBQUcsUUFBUSxnQkFBZ0IsT0FBTztBQUFBLElBQ25ELE9BQU87QUFBQSxNQUNILGVBQWUsMkJBQTJCLE9BQU8sUUFBTztBQUFBLElBQzVEO0FBQUE7QUFBQSxFQUVJLDBDQUFrQztBQUFBLEVBQzFDLFNBQVMsaUJBQWlCLENBQUMsZUFBZTtBQUFBLElBQ3RDLE1BQU0sY0FBYyxJQUFJO0FBQUEsSUFDeEIsV0FBVyxXQUFVLGVBQWU7QUFBQSxNQUNoQyxJQUFJLFNBQVMsWUFBWSxJQUFJLFFBQU8sUUFBUTtBQUFBLE1BQzVDLElBQUksQ0FBQyxRQUFRO0FBQUEsUUFDVCxTQUFTLElBQUk7QUFBQSxRQUNiLFlBQVksSUFBSSxRQUFPLFVBQVUsTUFBTTtBQUFBLE1BQzNDO0FBQUEsTUFFQSxNQUFNLDBCQUEwQixHQUFHLFFBQU8scUJBQXFCLFFBQVEsUUFBTyxxQkFBcUIsV0FBVyxNQUFNLFFBQU8scUJBQXFCLGFBQWE7QUFBQSxNQUM3SixJQUFJLFVBQVUsT0FBTyxJQUFJLHVCQUF1QjtBQUFBLE1BQ2hELElBQUksQ0FBQyxTQUFTO0FBQUEsUUFDVixVQUFVLENBQUM7QUFBQSxRQUNYLE9BQU8sSUFBSSx5QkFBeUIsT0FBTztBQUFBLE1BQy9DO0FBQUEsTUFDQSxRQUFRLEtBQUssT0FBTTtBQUFBLElBQ3ZCO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVYLFNBQVMsMEJBQTBCLENBQUMsZUFBZSxVQUFTO0FBQUEsSUFDeEQsTUFBTSxjQUFjLGtCQUFrQixhQUFhO0FBQUEsSUFDbkQsTUFBTSxNQUFNLENBQUM7QUFBQSxJQUNiLE1BQU0sZ0JBQWdCLFlBQVksUUFBUTtBQUFBLElBQzFDLElBQUksUUFBUSxjQUFjLEtBQUs7QUFBQSxJQUMvQixPQUFPLENBQUMsTUFBTSxNQUFNO0FBQUEsTUFDaEIsT0FBTyxVQUFVLFVBQVUsTUFBTTtBQUFBLE1BQ2pDLE1BQU0scUJBQXFCLENBQUM7QUFBQSxNQUM1QixNQUFNLGNBQWMsT0FBTyxPQUFPO0FBQUEsTUFDbEMsSUFBSSxXQUFXLFlBQVksS0FBSztBQUFBLE1BQ2hDLE9BQU8sQ0FBQyxTQUFTLE1BQU07QUFBQSxRQUNuQixNQUFNLGFBQWEsU0FBUztBQUFBLFFBQzVCLElBQUksV0FBVyxTQUFTLEdBQUc7QUFBQSxVQUN2QixNQUFNLFFBQVEsV0FBVyxJQUFJLGtCQUFnQixrQkFBa0IsY0FBYyxRQUFPLENBQUM7QUFBQSxVQUNyRixtQkFBbUIsS0FBSztBQUFBLFlBQ3BCLFFBQVEsR0FBRyxXQUFXLDRCQUE0QixXQUFXLEdBQUcsb0JBQW9CO0FBQUEsWUFDcEY7QUFBQSxZQUNBLFdBQVcsV0FBVyxHQUFHLHFCQUFxQjtBQUFBLFVBQ2xELENBQUM7QUFBQSxRQUNMO0FBQUEsUUFDQSxXQUFXLFlBQVksS0FBSztBQUFBLE1BQ2hDO0FBQUEsTUFDQSxNQUFNLHFCQUFxQixHQUFHLFdBQVcsZ0JBQWdCLFFBQVE7QUFBQSxNQUNqRSxNQUFNLG1CQUFtQjtBQUFBLFFBQ3JCLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxRQUNaLFdBQVcsa0JBQWtCO0FBQUEsTUFDakM7QUFBQSxNQUNBLElBQUksS0FBSyxnQkFBZ0I7QUFBQSxNQUN6QixRQUFRLGNBQWMsS0FBSztBQUFBLElBQy9CO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQTs7OztFQ2pJWCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxrQ0FBK0I7QUFBQSxFQUN2QyxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNLG9CQUFvQixLQUFLLGNBQWMsTUFBTSxVQUFVLE1BQU0sR0FDOUQ7QUFBQSxFQUNMLElBQU0sbUJBQW1CLEtBQUssY0FBYyxNQUFNLFVBQVUsTUFBTSxHQUM3RDtBQUFBLEVBQ0csa0NBQTBCO0FBQUEsSUFDOUIsa0JBQWtCLENBQUMsUUFBUTtBQUFBLE1BQ3ZCLE1BQU0sV0FBVyxHQUFHLFdBQVcsaUNBQWlDLEdBQUc7QUFBQSxNQUNuRSxPQUFPLGlCQUFpQixPQUFPLE9BQU8sRUFBRSxPQUFPO0FBQUE7QUFBQSxJQUVuRCxxQkFBcUIsQ0FBQyxRQUFRO0FBQUEsTUFDMUIsT0FBTyxrQkFBa0IsT0FBTyxHQUFHO0FBQUE7QUFBQSxFQUUzQztBQUFBOzs7O0VDaEJBLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELGtDQUErQjtBQUFBLEVBRXZDLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLDJCQUEyQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxRQUFRO0FBQUEsSUFBMkIsQ0FBQztBQUFBOzs7O0VDbkI1SSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw2QkFBMEI7QUFBQSxFQUNsQyxJQUFNO0FBQUEsRUFJRSw2QkFBcUI7QUFBQSxJQUN6QixrQkFBa0IsQ0FBQyxRQUFRO0FBQUEsTUFDdkIsTUFBTSxXQUFXLEdBQUcsV0FBVyxnQ0FBZ0MsS0FBSztBQUFBLFFBQ2hFLFFBQVE7QUFBQSxRQUNSLGFBQWE7QUFBQSxNQUNqQixDQUFDO0FBQUEsTUFDRCxNQUFNLFdBQVUsSUFBSTtBQUFBLE1BQ3BCLE9BQU8sU0FBUSxPQUFPLEtBQUssVUFBVSxPQUFPLENBQUM7QUFBQTtBQUFBLElBRWpELHFCQUFxQixDQUFDLFFBQVE7QUFBQSxNQUMxQixJQUFJLElBQUksV0FBVyxHQUFHO0FBQUEsUUFDbEIsT0FBTyxDQUFDO0FBQUEsTUFDWjtBQUFBLE1BQ0EsTUFBTSxVQUFVLElBQUk7QUFBQSxNQUNwQixPQUFPLEtBQUssTUFBTSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUU3QztBQUFBOzs7O0VDUEEsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNkJBQTBCO0FBQUEsRUFFbEMsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsc0JBQXNCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLE9BQU87QUFBQSxJQUFzQixDQUFDO0FBQUE7Ozs7RUNuQmpJLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELGdDQUE2QjtBQUFBLEVBQ3JDLElBQU07QUFBQSxFQUNFLGdDQUF3QjtBQUFBLElBQzVCLGtCQUFrQixDQUFDLFFBQVE7QUFBQSxNQUN2QixNQUFNLFdBQVcsR0FBRyxXQUFXLG1DQUFtQyxDQUFDLEdBQUcsR0FBRztBQUFBLFFBQ3JFLGFBQWE7QUFBQSxNQUNqQixDQUFDO0FBQUEsTUFDRCxNQUFNLFdBQVUsSUFBSTtBQUFBLE1BQ3BCLE9BQU8sU0FBUSxPQUFPLEtBQUssVUFBVSxPQUFPLENBQUM7QUFBQTtBQUFBLElBRWpELHFCQUFxQixDQUFDLFFBQVE7QUFBQSxNQUMxQixJQUFJLElBQUksV0FBVyxHQUFHO0FBQUEsUUFDbEIsT0FBTyxDQUFDO0FBQUEsTUFDWjtBQUFBLE1BQ0EsTUFBTSxVQUFVLElBQUk7QUFBQSxNQUNwQixPQUFPLEtBQUssTUFBTSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUU3QztBQUFBOzs7O0VDSEEsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsZ0NBQTZCO0FBQUEsRUFFckMsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMseUJBQXlCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLFVBQVU7QUFBQSxJQUF5QixDQUFDO0FBQUE7Ozs7RUNuQjFJLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDhCQUEyQjtBQUFBLEVBQ25DLElBQU07QUFBQSxFQUNFLDhCQUFzQjtBQUFBLElBQzFCLGtCQUFrQixDQUFDLFFBQVE7QUFBQSxNQUN2QixNQUFNLFdBQVcsR0FBRyxXQUFXLGlDQUFpQyxLQUFLO0FBQUEsUUFDakUsUUFBUTtBQUFBLFFBQ1IsYUFBYTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxNQUNELE1BQU0sV0FBVSxJQUFJO0FBQUEsTUFDcEIsT0FBTyxTQUFRLE9BQU8sS0FBSyxVQUFVLE9BQU8sQ0FBQztBQUFBO0FBQUEsSUFFakQscUJBQXFCLENBQUMsUUFBUTtBQUFBLE1BQzFCLElBQUksSUFBSSxXQUFXLEdBQUc7QUFBQSxRQUNsQixPQUFPLENBQUM7QUFBQSxNQUNaO0FBQUEsTUFDQSxNQUFNLFVBQVUsSUFBSTtBQUFBLE1BQ3BCLE9BQU8sS0FBSyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFBQTtBQUFBLEVBRTdDO0FBQUE7Ozs7RUNKQSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw4QkFBMkI7QUFBQSxFQUVuQyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyx1QkFBdUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sUUFBUTtBQUFBLElBQXVCLENBQUM7QUFBQTs7OztFQ0pwSSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw4QkFBOEIsZ0NBQWdDLDZCQUE2QixrQ0FBa0Msb0NBQW9DLGlDQUE4QjtBQUFBLEVBQ3ZNLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLDBCQUEwQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxXQUFXO0FBQUEsSUFBMEIsQ0FBQztBQUFBLEVBQzdJLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLDZCQUE2QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxXQUFXO0FBQUEsSUFBNkIsQ0FBQztBQUFBLEVBQ25KLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLDJCQUEyQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxXQUFXO0FBQUEsSUFBMkIsQ0FBQztBQUFBLEVBQy9JLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHNCQUFzQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxPQUFPO0FBQUEsSUFBc0IsQ0FBQztBQUFBLEVBQ2pJLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHlCQUF5QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxPQUFPO0FBQUEsSUFBeUIsQ0FBQztBQUFBLEVBQ3ZJLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHVCQUF1QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxPQUFPO0FBQUEsSUFBdUIsQ0FBQztBQUFBOzs7O0VDYm5JLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHNDQUFtQztBQUFBLEVBQzNDLElBQU07QUFBQSxFQUtOLFNBQVMsMkJBQTJCLENBQUMsZ0JBQWdCO0FBQUEsSUFDakQsT0FBTyxNQUFNO0FBQUEsTUFDVCxNQUFNLFVBQVUsQ0FBQztBQUFBLE1BQ2pCLE9BQU8sUUFBUSxpQkFBaUIsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxXQUFXO0FBQUEsUUFDL0QsSUFBSSxPQUFPLFVBQVUsYUFBYTtBQUFBLFVBQzlCLFFBQVEsT0FBTyxPQUFPLEtBQUs7QUFBQSxRQUMvQixFQUNLO0FBQUEsVUFDRCxNQUFNLEtBQUssS0FBSyxXQUFXLDJCQUEyQiw0QkFBNEI7QUFBQTtBQUFBLE9BRXpGO0FBQUEsTUFDRCxPQUFPO0FBQUE7QUFBQTtBQUFBLEVBR1Asc0NBQThCO0FBQUE7Ozs7RUNyQnRDLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELHVDQUF1QyxpREFBOEM7QUFBQSxFQUM3RixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixTQUFTLFlBQVksQ0FBQyxxQkFBcUIsaUJBQWlCLGdCQUFnQjtBQUFBLElBQ3hFLE1BQU0sa0JBQWtCO0FBQUEsU0FDakIsZUFBZTtBQUFBLElBQ3RCO0FBQUEsSUFDQSxNQUFNLFVBQVUsQ0FBQztBQUFBLElBQ2pCLE9BQU8sTUFBTTtBQUFBLE1BRVQsSUFBSSxtQkFBbUIsTUFBTTtBQUFBLFFBQ3pCLE9BQU8sT0FBTyxTQUFTLGdCQUFnQixDQUFDO0FBQUEsTUFDNUM7QUFBQSxNQUVBLElBQUksdUJBQXVCLE1BQU07QUFBQSxRQUM3QixPQUFPLE9BQU8sU0FBUyxvQkFBb0IsQ0FBQztBQUFBLE1BQ2hEO0FBQUEsTUFFQSxPQUFPLE9BQU8sT0FBTyxTQUFTLGVBQWU7QUFBQTtBQUFBO0FBQUEsRUFHckQsU0FBUyx1QkFBdUIsQ0FBQyxNQUFLO0FBQUEsSUFDbEMsSUFBSSxRQUFPLE1BQU07QUFBQSxNQUNiO0FBQUEsSUFDSjtBQUFBLElBQ0EsSUFBSTtBQUFBLE1BRUEsTUFBTSxPQUFPLFdBQVcsVUFBVTtBQUFBLE1BQ2xDLE9BQU8sSUFBSSxJQUFJLE1BQUssSUFBSSxFQUFFO0FBQUEsTUFFOUIsTUFBTTtBQUFBLE1BQ0YsTUFBTSxJQUFJLE1BQU0sNkRBQTZELE9BQU07QUFBQTtBQUFBO0FBQUEsRUFRM0YsU0FBUyxzQ0FBc0MsQ0FBQywyQkFBMkIsdUJBQXVCLHNCQUFzQjtBQUFBLElBQ3BILE9BQU87QUFBQSxVQUNDLEdBQUcsdUJBQXVCLDBDQUEwQywyQkFBMkIsdUJBQXVCLG9CQUFvQjtBQUFBLE1BQzlJLFNBQVMsY0FBYyxHQUFHLE9BQU8sNkJBQTZCLDBCQUEwQixPQUFPLEdBQUcsc0JBQXNCLFNBQVMscUJBQXFCLE9BQU87QUFBQSxNQUM3SixLQUFLLHdCQUF3QiwwQkFBMEIsR0FBRyxLQUN0RCxzQkFBc0IsT0FDdEIscUJBQXFCO0FBQUEsSUFDN0I7QUFBQTtBQUFBLEVBRUksaURBQXlDO0FBQUEsRUFDakQsU0FBUyw0QkFBNEIsQ0FBQyxpQkFBaUIsb0JBQW9CO0FBQUEsSUFDdkUsT0FBTztBQUFBLFVBQ0MsR0FBRyx1QkFBdUIsZ0NBQWdDO0FBQUEsTUFDOUQsU0FBUyxNQUFNO0FBQUEsTUFDZixLQUFLLDJCQUEyQjtBQUFBLElBQ3BDO0FBQUE7QUFBQSxFQUVJLHVDQUErQjtBQUFBOzs7O0VDeEV2QyxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwyQ0FBMkMscURBQXFELHNDQUFtQztBQUFBLEVBZ0IzSSxJQUFNO0FBQUEsRUFDTixTQUFTLDJCQUEyQixDQUFDLFNBQVM7QUFBQSxJQUMxQyxPQUFPLE9BQU8sYUFBYTtBQUFBLE1BQ3ZCLE1BQU0sYUFBYSxhQUFhO0FBQUEsTUFDaEMsTUFBTSxVQUFTLGFBQW9CLGlCQUFpQjtBQUFBLE1BQ3BELFFBQVEsVUFBVSxNQUFNO0FBQUEsTUFDeEIsSUFBSSxZQUFZO0FBQUEsUUFFWixRQUFRLElBQUksTUFBTSxRQUFRLG9CQUFvQjtBQUFBLFFBQzlDLE9BQU8sSUFBSSxNQUFNLGVBQWU7QUFBQSxNQUNwQztBQUFBLE1BQ0EsT0FBTyxJQUFJLE1BQU0sT0FBTztBQUFBO0FBQUE7QUFBQSxFQUd4QixzQ0FBOEI7QUFBQSxFQU10QyxTQUFTLDBDQUEwQyxDQUFDLDJCQUEyQix1QkFBdUIsc0JBQXNCO0FBQUEsSUFDeEgsT0FBTztBQUFBLFVBQ0MsR0FBRywwQkFBMEIsd0NBQXdDLDJCQUEyQix1QkFBdUIsb0JBQW9CO0FBQUEsTUFDL0ksY0FBYywwQkFBMEIsZ0JBQ3BDLHNCQUFzQixnQkFDdEIscUJBQXFCO0FBQUEsTUFDekIsV0FBVywwQkFBMEI7QUFBQSxJQUN6QztBQUFBO0FBQUEsRUFFSSxxREFBNkM7QUFBQSxFQUNyRCxTQUFTLGdDQUFnQyxDQUFDLGlCQUFpQixvQkFBb0I7QUFBQSxJQUMzRSxPQUFPO0FBQUEsVUFDQyxHQUFHLDBCQUEwQiw4QkFBOEIsaUJBQWlCLGtCQUFrQjtBQUFBLE1BQ2xHLGNBQWMsNEJBQTRCLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxJQUNqRTtBQUFBO0FBQUEsRUFFSSwyQ0FBbUM7QUFBQTs7OztFQ3RDM0MsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQWlDLDRCQUF5QjtBQUFBLEVBQ2xFLFNBQVMsaUJBQWlCLENBQUMsWUFBWTtBQUFBLElBQ25DLE1BQU0sYUFBYSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxJQUN0QyxPQUFPLFdBQVcsU0FBUyxVQUFVO0FBQUE7QUFBQSxFQUVqQyw0QkFBb0I7QUFBQSxFQUM1QixTQUFTLHNCQUFzQixDQUFDLFlBQVk7QUFBQSxJQUN4QyxJQUFJLGNBQWMsTUFBTTtBQUFBLE1BQ3BCO0FBQUEsSUFDSjtBQUFBLElBQ0EsTUFBTSxVQUFVLE9BQU8sU0FBUyxZQUFZLEVBQUU7QUFBQSxJQUM5QyxJQUFJLE9BQU8sVUFBVSxPQUFPLEdBQUc7QUFBQSxNQUMzQixPQUFPLFVBQVUsSUFBSSxVQUFVLE9BQU87QUFBQSxJQUMxQztBQUFBLElBRUEsTUFBTSxRQUFRLElBQUksS0FBSyxVQUFVLEVBQUUsUUFBUSxJQUFJLEtBQUssSUFBSTtBQUFBLElBQ3hELElBQUksU0FBUyxHQUFHO0FBQUEsTUFDWixPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFFSCxpQ0FBeUI7QUFBQTs7OztFQ3RCakMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsa0JBQWU7QUFBQSxFQUVmLGtCQUFVO0FBQUE7Ozs7RUNsQmxCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDBCQUEwQix1QkFBb0I7QUFBQSxFQUN0RCxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNLHFCQUFxQixpQ0FBaUMsVUFBVTtBQUFBLEVBVXRFLFNBQVMsWUFBWSxDQUFDLFNBQVMsUUFBUSxRQUFPLE1BQU0sUUFBUSxlQUFlO0FBQUEsSUFDdkUsTUFBTSxZQUFZLElBQUksSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUNwQyxNQUFNLFVBQVUsS0FBSyxPQUFPLFFBQVEsRUFBRTtBQUFBLElBQ3RDLElBQUksT0FBTyxXQUFXO0FBQUEsTUFDbEIsUUFBUSxnQkFBZ0IsR0FBRyxPQUFPLGFBQWE7QUFBQSxJQUNuRCxFQUNLO0FBQUEsTUFDRCxRQUFRLGdCQUFnQjtBQUFBO0FBQUEsSUFFNUIsTUFBTSxVQUFVO0FBQUEsTUFDWixVQUFVLFVBQVU7QUFBQSxNQUNwQixNQUFNLFVBQVU7QUFBQSxNQUNoQixNQUFNLFVBQVU7QUFBQSxNQUNoQixRQUFRO0FBQUEsTUFDUjtBQUFBLE1BQ0E7QUFBQSxJQUNKO0FBQUEsSUFDQSxNQUFNLE1BQU0sUUFBUSxTQUFTLENBQUMsUUFBUTtBQUFBLE1BQ2xDLE1BQU0sZUFBZSxDQUFDO0FBQUEsTUFDdEIsSUFBSSxHQUFHLFFBQVEsV0FBUyxhQUFhLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDaEQsSUFBSSxHQUFHLE9BQU8sTUFBTTtBQUFBLFFBQ2hCLElBQUksSUFBSSxjQUFjLElBQUksYUFBYSxLQUFLO0FBQUEsVUFDeEMsT0FBTztBQUFBLFlBQ0gsUUFBUTtBQUFBLFlBQ1IsTUFBTSxPQUFPLE9BQU8sWUFBWTtBQUFBLFVBQ3BDLENBQUM7QUFBQSxRQUNMLEVBQ0ssU0FBSSxJQUFJLGVBQWUsR0FBRyxzQkFBc0IsbUJBQW1CLElBQUksVUFBVSxHQUFHO0FBQUEsVUFDckYsT0FBTztBQUFBLFlBQ0gsUUFBUTtBQUFBLFlBQ1IsZ0JBQWdCLEdBQUcsc0JBQXNCLHdCQUF3QixJQUFJLFFBQVEsY0FBYztBQUFBLFVBQy9GLENBQUM7QUFBQSxRQUNMLEVBQ0s7QUFBQSxVQUNELE1BQU0sVUFBUSxJQUFJLFFBQVEsa0JBQWtCLElBQUksZUFBZSxJQUFJLFlBQVksT0FBTyxPQUFPLFlBQVksRUFBRSxTQUFTLENBQUM7QUFBQSxVQUNySCxPQUFPO0FBQUEsWUFDSCxRQUFRO0FBQUEsWUFDUjtBQUFBLFVBQ0osQ0FBQztBQUFBO0FBQUEsT0FFUjtBQUFBLEtBQ0o7QUFBQSxJQUNELElBQUksV0FBVyxlQUFlLE1BQU07QUFBQSxNQUNoQyxJQUFJLFFBQVE7QUFBQSxNQUNaLE9BQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSLE9BQU8sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLE1BQ3RDLENBQUM7QUFBQSxLQUNKO0FBQUEsSUFDRCxJQUFJLEdBQUcsU0FBUyxDQUFDLFlBQVU7QUFBQSxNQUN2QixPQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUjtBQUFBLE1BQ0osQ0FBQztBQUFBLEtBQ0o7QUFBQSxJQUNELGdCQUFnQixLQUFLLE9BQU8sYUFBYSxNQUFNLENBQUMsWUFBVTtBQUFBLE1BQ3RELE9BQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDSixDQUFDO0FBQUEsS0FDSjtBQUFBO0FBQUEsRUFFRyx1QkFBZTtBQUFBLEVBQ3ZCLFNBQVMsZUFBZSxDQUFDLEtBQUssYUFBYSxNQUFNLFNBQVM7QUFBQSxJQUN0RCxJQUFJLGFBQWEsdUJBQXVCLElBQUk7QUFBQSxJQUM1QyxJQUFJLGdCQUFnQixRQUFRO0FBQUEsTUFDeEIsSUFBSSxVQUFVLG9CQUFvQixNQUFNO0FBQUEsTUFDeEMsYUFBYSxXQUNSLEdBQUcsU0FBUyxPQUFPLEVBQ25CLEtBQUssS0FBSyxXQUFXLENBQUMsRUFDdEIsR0FBRyxTQUFTLE9BQU87QUFBQSxJQUM1QjtBQUFBLElBQ0EsV0FBVyxLQUFLLEdBQUcsRUFBRSxHQUFHLFNBQVMsT0FBTztBQUFBO0FBQUEsRUFFcEMsMEJBQWtCO0FBQUEsRUFDMUIsU0FBUyxzQkFBc0IsQ0FBQyxNQUFNO0FBQUEsSUFDbEMsTUFBTSxXQUFXLElBQUksU0FBUztBQUFBLElBQzlCLFNBQVMsS0FBSyxJQUFJO0FBQUEsSUFDbEIsU0FBUyxLQUFLLElBQUk7QUFBQSxJQUNsQixPQUFPO0FBQUE7QUFBQTs7OztFQ2pGWCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxzQ0FBbUM7QUFBQSxFQUMzQyxJQUFNO0FBQUE7QUFBQSxFQUNOLE1BQU0sc0JBQXNCO0FBQUEsSUFDeEI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFdBQVcsQ0FBQyxhQUFhO0FBQUEsTUFDckIsS0FBSyxjQUFjO0FBQUE7QUFBQSxTQUVqQixLQUFJLENBQUMsTUFBTSxlQUFlO0FBQUEsTUFDNUIsUUFBUSxlQUFPLFlBQVksTUFBTSxLQUFLLFdBQVc7QUFBQSxNQUNqRCxPQUFPLElBQUksUUFBUSxjQUFXO0FBQUEsU0FDekIsR0FBRyx1QkFBdUIsY0FBYyxTQUFTLEtBQUssYUFBYSxRQUFPLE1BQU0sWUFBVTtBQUFBLFVBQ3ZGLFNBQVEsTUFBTTtBQUFBLFdBQ2YsYUFBYTtBQUFBLE9BQ25CO0FBQUE7QUFBQSxJQUVMLFFBQVEsR0FBRztBQUFBLFNBR0wsV0FBVSxHQUFHO0FBQUEsTUFDZixJQUFJLFFBQVEsS0FBSztBQUFBLE1BQ2pCLElBQUksVUFBVSxNQUFNO0FBQUEsUUFDaEIsTUFBTSxXQUFXLElBQUksSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFO0FBQUEsUUFDL0MsT0FBTyxRQUFPLFdBQVcsTUFBTSxRQUFRLElBQUk7QUFBQSxVQUN2QyxLQUFLLFlBQVksYUFBYSxRQUFRO0FBQUEsVUFDdEMsdUJBQXVCLFFBQVE7QUFBQSxRQUNuQyxDQUFDO0FBQUEsUUFDRCxRQUFRLEtBQUssU0FBUyxFQUFFLGVBQU8sUUFBUTtBQUFBLE1BQzNDO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVmO0FBQUEsRUFDQSxlQUFlLHNCQUFzQixDQUFDLFVBQVU7QUFBQSxJQUM1QyxNQUFNLFVBQVMsYUFBYSxVQUFpQixpQkFBaUI7QUFBQSxJQUM5RCxRQUFRLFlBQVksTUFBTTtBQUFBLElBQzFCLE9BQU87QUFBQTtBQUFBLEVBRVgsU0FBUywyQkFBMkIsQ0FBQyxZQUFZO0FBQUEsSUFDN0MsT0FBTyxJQUFJLHNCQUFzQixVQUFVO0FBQUE7QUFBQSxFQUV2QyxzQ0FBOEI7QUFBQTs7OztFQ3pDdEMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsa0NBQStCO0FBQUEsRUFDdkMsSUFBTSxlQUFlO0FBQUEsRUFDckIsSUFBTSxrQkFBa0I7QUFBQSxFQUN4QixJQUFNLGNBQWM7QUFBQSxFQUNwQixJQUFNLHFCQUFxQjtBQUFBLEVBQzNCLElBQU0sU0FBUztBQUFBLEVBSWYsU0FBUyxTQUFTLEdBQUc7QUFBQSxJQUNqQixPQUFPLEtBQUssT0FBTyxLQUFLLElBQUksVUFBVTtBQUFBO0FBQUE7QUFBQSxFQUUxQyxNQUFNLGtCQUFrQjtBQUFBLElBQ3BCO0FBQUEsSUFDQSxXQUFXLENBQUMsWUFBWTtBQUFBLE1BQ3BCLEtBQUssYUFBYTtBQUFBO0FBQUEsSUFFdEIsS0FBSyxDQUFDLE1BQU0sZUFBZSxVQUFVO0FBQUEsTUFDakMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxVQUFTLFdBQVc7QUFBQSxRQUNwQyxXQUFXLE1BQU07QUFBQSxVQUNiLEtBQUssV0FBVyxLQUFLLE1BQU0sYUFBYSxFQUFFLEtBQUssVUFBUyxNQUFNO0FBQUEsV0FDL0QsUUFBUTtBQUFBLE9BQ2Q7QUFBQTtBQUFBLFNBRUMsS0FBSSxDQUFDLE1BQU0sZUFBZTtBQUFBLE1BQzVCLE1BQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUFBLE1BQzlCLElBQUksU0FBUyxNQUFNLEtBQUssV0FBVyxLQUFLLE1BQU0sYUFBYTtBQUFBLE1BQzNELElBQUksV0FBVztBQUFBLE1BQ2YsSUFBSSxjQUFjO0FBQUEsTUFDbEIsT0FBTyxPQUFPLFdBQVcsZUFBZSxXQUFXLEdBQUc7QUFBQSxRQUNsRDtBQUFBLFFBRUEsTUFBTSxVQUFVLEtBQUssSUFBSSxLQUFLLElBQUksYUFBYSxXQUFXLElBQUksVUFBVSxHQUFHLENBQUM7QUFBQSxRQUM1RSxjQUFjLGNBQWM7QUFBQSxRQUM1QixNQUFNLGdCQUFnQixPQUFPLGlCQUFpQjtBQUFBLFFBRTlDLE1BQU0seUJBQXlCLFdBQVcsS0FBSyxJQUFJO0FBQUEsUUFDbkQsSUFBSSxnQkFBZ0Isd0JBQXdCO0FBQUEsVUFDeEMsT0FBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVMsTUFBTSxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsYUFBYTtBQUFBLE1BQ3pFO0FBQUEsTUFDQSxPQUFPO0FBQUE7QUFBQSxJQUVYLFFBQVEsR0FBRztBQUFBLE1BQ1AsT0FBTyxLQUFLLFdBQVcsU0FBUztBQUFBO0FBQUEsRUFFeEM7QUFBQSxFQUlBLFNBQVMsdUJBQXVCLENBQUMsU0FBUztBQUFBLElBQ3RDLE9BQU8sSUFBSSxrQkFBa0IsUUFBUSxTQUFTO0FBQUE7QUFBQSxFQUUxQyxrQ0FBMEI7QUFBQTs7OztFQ3RFbEMsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsdUNBQW9DO0FBQUEsRUFnQjVDLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLFNBQVMsNEJBQTRCLENBQUMsU0FBUyxZQUFZO0FBQUEsSUFDdkQsUUFBUSxHQUFHLHVCQUF1QiwwQkFBMEI7QUFBQSxNQUN4RCxZQUFZLEdBQUcscUJBQXFCLHlCQUF5QjtBQUFBLFFBQ3pELFlBQVksR0FBRywwQkFBMEIsNkJBQTZCLE9BQU87QUFBQSxNQUNqRixDQUFDO0FBQUEsTUFDRDtBQUFBLE1BQ0EsaUJBQWlCLEdBQUcsdUNBQXVDLHdDQUF3QyxPQUFPO0FBQUEsSUFDOUcsR0FBRyxFQUFFLFNBQVMsUUFBUSxjQUFjLENBQUM7QUFBQTtBQUFBLEVBRWpDLHVDQUErQjtBQUFBOzs7O0VDOUJ2QyxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxnREFBNkM7QUFBQSxFQWdCckQsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sU0FBUyw4QkFBOEIsQ0FBQyxlQUFlO0FBQUEsSUFDbkQsTUFBTSxjQUFjLEdBQUcsT0FBTyxrQkFBa0IsYUFBYTtBQUFBLElBQzdELElBQUksY0FBYyxNQUFNO0FBQUEsTUFDcEIsSUFBSSxPQUFPLFNBQVMsVUFBVSxLQUFLLGFBQWEsR0FBRztBQUFBLFFBQy9DLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFDQSxNQUFNLEtBQUssS0FBSyxrQkFBa0IscUVBQXFFLGFBQWE7QUFBQSxJQUN4SDtBQUFBLElBQ0E7QUFBQTtBQUFBLEVBRUosU0FBUyxpQkFBaUIsQ0FBQyxrQkFBa0I7QUFBQSxJQUN6QyxNQUFNLGtCQUFrQiwrQkFBK0Isc0JBQXNCLDBCQUEwQjtBQUFBLElBQ3ZHLE1BQU0scUJBQXFCLCtCQUErQiw0QkFBNEI7QUFBQSxJQUN0RixPQUFPLG1CQUFtQjtBQUFBO0FBQUEsRUFFOUIsU0FBUyxrQ0FBa0MsQ0FBQyxtQkFBbUI7QUFBQSxJQUMzRCxNQUFNLGVBQWUsR0FBRyxPQUFPLGtCQUFrQixpQkFBaUIsR0FBRyxLQUFLO0FBQUEsSUFDMUUsSUFBSSxlQUFlLFFBQVEsZ0JBQWdCLFVBQVUsZ0JBQWdCLFFBQVE7QUFBQSxNQUN6RSxPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsTUFBTSxLQUFLLEtBQUssa0JBQWtCLHFFQUFxRSxlQUFlO0FBQUEsSUFDdEg7QUFBQTtBQUFBLEVBRUosU0FBUyxxQkFBcUIsQ0FBQyxrQkFBa0I7QUFBQSxJQUM3QyxNQUFNLHNCQUFzQixtQ0FBbUMsc0JBQXNCLDhCQUE4QjtBQUFBLElBQ25ILE1BQU0seUJBQXlCLG1DQUFtQyxnQ0FBZ0M7QUFBQSxJQUNsRyxPQUFPLHVCQUF1QjtBQUFBO0FBQUEsRUFFbEMsU0FBUyxxQ0FBcUMsQ0FBQyxrQkFBa0I7QUFBQSxJQUM3RCxPQUFPO0FBQUEsTUFDSCxlQUFlLGtCQUFrQixnQkFBZ0I7QUFBQSxNQUNqRCxhQUFhLHNCQUFzQixnQkFBZ0I7QUFBQSxJQUN2RDtBQUFBO0FBQUEsRUFFSSxnREFBd0M7QUFBQTs7OztFQ3JEaEQsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsa0RBQStDO0FBQUEsRUFnQnZELElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLFNBQVMsdUJBQXVCLENBQUMsa0JBQWtCO0FBQUEsSUFDL0MsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLGtCQUFrQixzQkFBc0IsMEJBQTBCO0FBQUEsSUFDOUcsTUFBTSwrQkFBK0IsR0FBRyxPQUFPLGtCQUFrQiw0QkFBNEI7QUFBQSxJQUM3RixNQUFNLHlCQUF5QixHQUFHLE9BQU8seUJBQXlCLHdCQUF3QjtBQUFBLElBQzFGLE1BQU0sNEJBQTRCLEdBQUcsT0FBTyx5QkFBeUIsMkJBQTJCO0FBQUEsSUFDaEcsSUFBSSxPQUFPLEtBQUsscUJBQXFCLEVBQUUsV0FBVyxLQUM5QyxPQUFPLEtBQUssd0JBQXdCLEVBQUUsV0FBVyxHQUFHO0FBQUEsTUFDcEQ7QUFBQSxJQUNKO0FBQUEsSUFHQSxPQUFPLE9BQU8sT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLHlCQUF5QiwyQkFBMkIsSUFBSSxHQUFHLE9BQU8seUJBQXlCLHdCQUF3QixDQUFDO0FBQUE7QUFBQSxFQUU1SixTQUFTLDJCQUEyQixDQUFDLE1BQUs7QUFBQSxJQUN0QyxJQUFJO0FBQUEsTUFDQSxNQUFNLFlBQVksSUFBSSxJQUFJLElBQUc7QUFBQSxNQUU3QixPQUFPLFVBQVUsU0FBUztBQUFBLE1BRTlCLE1BQU07QUFBQSxNQUNGLE1BQU0sS0FBSyxLQUFLLG9FQUFvRSxrQ0FBaUM7QUFBQSxNQUNySDtBQUFBO0FBQUE7QUFBQSxFQUdSLFNBQVMsdUJBQXVCLENBQUMsTUFBSyxPQUFNO0FBQUEsSUFDeEMsSUFBSTtBQUFBLE1BRUEsSUFBSSxJQUFJLElBQUc7QUFBQSxNQUVmLE1BQU07QUFBQSxNQUNGLE1BQU0sS0FBSyxLQUFLLG9FQUFvRSxrQ0FBaUM7QUFBQSxNQUNySDtBQUFBO0FBQUEsSUFFSixJQUFJLENBQUMsS0FBSSxTQUFTLEdBQUcsR0FBRztBQUFBLE1BQ3BCLE9BQU0sT0FBTTtBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFPO0FBQUEsSUFDUCxJQUFJO0FBQUEsTUFFQSxJQUFJLElBQUksSUFBRztBQUFBLE1BRWYsTUFBTTtBQUFBLE1BQ0YsTUFBTSxLQUFLLEtBQUssOENBQThDLDREQUEyRCxPQUFNO0FBQUEsTUFDL0g7QUFBQTtBQUFBLElBRUosT0FBTztBQUFBO0FBQUEsRUFFWCxTQUFTLHdCQUF3QixDQUFDLG9CQUFvQjtBQUFBLElBQ2xELE1BQU0sVUFBVSxHQUFHLE9BQU8sa0JBQWtCLDZCQUE2QjtBQUFBLElBQ3pFLElBQUksV0FBVyxXQUFXO0FBQUEsTUFDdEI7QUFBQSxJQUNKO0FBQUEsSUFDQSxPQUFPLHdCQUF3QixRQUFRLGtCQUFrQjtBQUFBO0FBQUEsRUFFN0QsU0FBUyxxQkFBcUIsQ0FBQyxrQkFBa0I7QUFBQSxJQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLGtCQUFrQixzQkFBc0IsMkJBQTJCO0FBQUEsSUFDN0YsSUFBSSxXQUFXLFdBQVc7QUFBQSxNQUN0QjtBQUFBLElBQ0o7QUFBQSxJQUNBLE9BQU8sNEJBQTRCLE1BQU07QUFBQTtBQUFBLEVBRTdDLFNBQVMsZUFBZSxDQUFDLHNCQUFzQix5QkFBeUIsZ0JBQWdCO0FBQUEsSUFDcEYsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLGtCQUFrQixvQkFBb0I7QUFBQSxJQUM1RSxNQUFNLHlCQUF5QixHQUFHLE9BQU8sa0JBQWtCLHVCQUF1QjtBQUFBLElBQ2xGLE1BQU0sV0FBVyxzQkFBc0I7QUFBQSxJQUN2QyxJQUFJLFlBQVksTUFBTTtBQUFBLE1BQ2xCLElBQUk7QUFBQSxRQUNBLE9BQU8sR0FBRyxhQUFhLEtBQUssUUFBUSxRQUFRLElBQUksR0FBRyxRQUFRLENBQUM7QUFBQSxRQUVoRSxNQUFNO0FBQUEsUUFDRixNQUFNLEtBQUssS0FBSyxjQUFjO0FBQUEsUUFDOUI7QUFBQTtBQUFBLElBRVIsRUFDSztBQUFBLE1BQ0Q7QUFBQTtBQUFBO0FBQUEsRUFHUixTQUFTLDJCQUEyQixDQUFDLGtCQUFrQjtBQUFBLElBQ25ELE9BQU8sZ0JBQWdCLHNCQUFzQix1Q0FBdUMseUNBQXlDLDhDQUE4QztBQUFBO0FBQUEsRUFFL0ssU0FBUyxtQkFBbUIsQ0FBQyxrQkFBa0I7QUFBQSxJQUMzQyxPQUFPLGdCQUFnQixzQkFBc0IsK0JBQStCLGlDQUFpQyxvREFBb0Q7QUFBQTtBQUFBLEVBRXJLLFNBQVMseUJBQXlCLENBQUMsa0JBQWtCO0FBQUEsSUFDakQsT0FBTyxnQkFBZ0Isc0JBQXNCLGdDQUFnQyxrQ0FBa0Msc0NBQXNDO0FBQUE7QUFBQSxFQVF6SixTQUFTLHVDQUF1QyxDQUFDLGtCQUFrQixvQkFBb0I7QUFBQSxJQUNuRixPQUFPO0FBQUEsVUFDQyxHQUFHLDJCQUEyQix1Q0FBdUMsZ0JBQWdCO0FBQUEsTUFDekYsS0FBSyxzQkFBc0IsZ0JBQWdCLEtBQ3ZDLHlCQUF5QixrQkFBa0I7QUFBQSxNQUMvQyxVQUFVLEdBQUcsdUJBQXVCLDZCQUE2Qix3QkFBd0IsZ0JBQWdCLENBQUM7QUFBQSxNQUMxRyxlQUFlLEdBQUcsK0JBQStCLDZCQUE2QjtBQUFBLFFBQzFFLFdBQVc7QUFBQSxRQUNYLElBQUksMEJBQTBCLGdCQUFnQjtBQUFBLFFBQzlDLE1BQU0sNEJBQTRCLGdCQUFnQjtBQUFBLFFBQ2xELEtBQUssb0JBQW9CLGdCQUFnQjtBQUFBLE1BQzdDLENBQUM7QUFBQSxJQUNMO0FBQUE7QUFBQSxFQUVJLGtEQUEwQztBQUFBOzs7O0VDbklsRCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxtQ0FBZ0M7QUFBQSxFQUN4QyxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixTQUFTLHlCQUF5QixDQUFDLFNBQVE7QUFBQSxJQUN2QyxJQUFJLE9BQU8sUUFBTyxxQkFBcUIsWUFBWTtBQUFBLE1BQy9DLE9BQU8sUUFBTztBQUFBLElBQ2xCO0FBQUEsSUFDQSxJQUFJLFNBQVMsUUFBTztBQUFBLElBQ3BCLElBQUksUUFBTyxhQUFhLE1BQU07QUFBQSxNQUMxQixTQUFTLEVBQUUsV0FBVyxRQUFPLGNBQWMsT0FBTztBQUFBLElBQ3REO0FBQUEsSUFDQSxJQUFJLFVBQVUsTUFBTTtBQUFBLE1BQ2hCLFFBQVEsR0FBRyxrQkFBa0IsNkJBQTZCLE1BQU07QUFBQSxJQUNwRSxFQUNLO0FBQUEsTUFDRDtBQUFBO0FBQUE7QUFBQSxFQVVSLFNBQVMsd0JBQXdCLENBQUMsU0FBUSxrQkFBa0Isb0JBQW9CLGlCQUFpQjtBQUFBLElBRTdGLElBQUksUUFBTyxVQUFVO0FBQUEsTUFDakIsTUFBTSxLQUFLLEtBQUssd0NBQXdDO0FBQUEsSUFDNUQ7QUFBQSxJQUNBLFFBQVEsR0FBRywrQkFBK0IsNENBQTRDO0FBQUEsTUFDbEYsS0FBSyxRQUFPO0FBQUEsTUFDWixVQUFVLEdBQUcsdUJBQXVCLDZCQUE2QixRQUFPLE9BQU87QUFBQSxNQUMvRSxrQkFBa0IsUUFBTztBQUFBLE1BQ3pCLGVBQWUsUUFBTztBQUFBLE1BQ3RCLGFBQWEsUUFBTztBQUFBLE1BQ3BCLGNBQWMsMEJBQTBCLE9BQU07QUFBQSxNQUM5QyxXQUFXLFFBQU87QUFBQSxJQUN0QixJQUFJLEdBQUcsbUNBQW1DLHlDQUF5QyxrQkFBa0Isa0JBQWtCLElBQUksR0FBRywrQkFBK0Isa0NBQWtDLGlCQUFpQixrQkFBa0IsQ0FBQztBQUFBO0FBQUEsRUFFL04sbUNBQTJCO0FBQUE7Ozs7RUM3Qm5DLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELG1DQUFtQyxnREFBZ0QsdUNBQXVDLHNDQUFtQztBQUFBLEVBQ3JLLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLCtCQUErQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTywrQkFBK0I7QUFBQSxJQUErQixDQUFDO0FBQUEsRUFDM0ssSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsZ0NBQWdDLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLDRCQUE0QjtBQUFBLElBQWdDLENBQUM7QUFBQSxFQUMxSyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyx5Q0FBeUMsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sMkJBQTJCO0FBQUEsSUFBeUMsQ0FBQztBQUFBLEVBQzNMLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLDRCQUE0QixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxtQ0FBbUM7QUFBQSxJQUE0QixDQUFDO0FBQUE7Ozs7RUNUekssT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsMEJBQXVCO0FBQUEsRUFDL0IsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFJTixNQUFNLHdCQUF3QixxQkFBcUIsaUJBQWlCO0FBQUEsSUFDaEUsV0FBVyxDQUFDLFVBQVMsQ0FBQyxHQUFHO0FBQUEsTUFDckIsT0FBTyxHQUFHLFlBQVksK0JBQStCLEdBQUcsWUFBWSwwQkFBMEIsU0FBUSxRQUFRLFdBQVc7QUFBQSxRQUNySCxnQkFBZ0I7QUFBQSxNQUNwQixDQUFDLEdBQUcsbUJBQW1CLGtCQUFrQixDQUFDO0FBQUE7QUFBQSxFQUVsRDtBQUFBLEVBQ1EsMEJBQWtCO0FBQUE7Ozs7RUNmMUIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsMEJBQXVCO0FBQUEsRUFDL0IsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsbUJBQW1CLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLGtCQUFrQjtBQUFBLElBQW1CLENBQUM7QUFBQTs7OztFQ0h0SSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwwQkFBdUI7QUFBQSxFQUMvQixJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxtQkFBbUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sT0FBTztBQUFBLElBQW1CLENBQUM7QUFBQTs7OztFQ0gzSCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwwQkFBdUI7QUFBQSxFQUMvQixJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxtQkFBbUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sV0FBVztBQUFBLElBQW1CLENBQUM7QUFBQTs7OztFQ0gvSCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCwyQ0FBd0M7QUFBQSxFQUNoRCxJQUFJO0FBQUEsR0FDSCxRQUFTLENBQUMsbUNBQWtDO0FBQUEsSUFDekMsa0NBQWlDLGtDQUFpQyxXQUFXLEtBQUs7QUFBQSxJQUNsRixrQ0FBaUMsa0NBQWlDLGdCQUFnQixLQUFLO0FBQUEsSUFDdkYsa0NBQWlDLGtDQUFpQyxlQUFlLEtBQUs7QUFBQSxLQUN2RixtQ0FBMkMsNkNBQTZDLDJDQUFtQyxDQUFDLEVBQUU7QUFBQTs7OztFQ1BqSSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxpQ0FBaUMsdUNBQXVDLG1DQUFtQyx3Q0FBcUM7QUFBQSxFQUN4SixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNLGdDQUFnQyxNQUFNLGNBQWMsdUJBQXVCO0FBQUEsRUFDekUsd0NBQWdDO0FBQUEsRUFDeEMsSUFBTSwyQkFBMkIsQ0FBQyxtQkFBbUI7QUFBQSxJQUNqRCxRQUFRO0FBQUEsV0FDQyxjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxRQUM5QixPQUFPLGNBQWMsdUJBQXVCO0FBQUEsV0FDM0MsY0FBYyxlQUFlO0FBQUEsV0FDN0IsY0FBYyxlQUFlO0FBQUEsUUFDOUIsT0FBTyxjQUFjLHVCQUF1QjtBQUFBO0FBQUE7QUFBQSxFQUdoRCxtQ0FBMkI7QUFBQSxFQUNuQyxJQUFNLCtCQUErQixDQUFDLG1CQUFtQjtBQUFBLElBQ3JELFFBQVE7QUFBQSxXQUNDLGNBQWMsZUFBZTtBQUFBLFdBQzdCLGNBQWMsZUFBZTtBQUFBLFFBQzlCLE9BQU8sY0FBYyx1QkFBdUI7QUFBQSxXQUMzQyxjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxXQUM3QixjQUFjLGVBQWU7QUFBQSxRQUM5QixPQUFPLGNBQWMsdUJBQXVCO0FBQUE7QUFBQTtBQUFBLEVBR2hELHVDQUErQjtBQUFBLEVBQ3ZDLFNBQVMsd0NBQXdDLEdBQUc7QUFBQSxJQUNoRCxNQUFNLDBCQUEwQixHQUFHLE9BQU8sa0JBQWtCLG1EQUFtRCxLQUMzRyxjQUFjLFlBQVk7QUFBQSxJQUM5QixJQUFJLDBCQUEwQixjQUFjO0FBQUEsTUFDeEMsT0FBZTtBQUFBLElBQ25CO0FBQUEsSUFDQSxJQUFJLDBCQUEwQixTQUFTO0FBQUEsTUFDbkMsT0FBZTtBQUFBLElBQ25CO0FBQUEsSUFDQSxJQUFJLDBCQUEwQixhQUFhO0FBQUEsTUFDdkMsT0FBZTtBQUFBLElBQ25CO0FBQUEsSUFDQSxNQUFNLEtBQUssS0FBSyxnRUFBZ0UsOEdBQThHO0FBQUEsSUFDOUwsT0FBZTtBQUFBO0FBQUEsRUFFbkIsU0FBUyx5QkFBeUIsQ0FBQyx1QkFBdUI7QUFBQSxJQUV0RCxJQUFJLHlCQUF5QixNQUFNO0FBQUEsTUFDL0IsSUFBSSwwQkFBMEIsNEJBQTRCLGlDQUFpQyxPQUFPO0FBQUEsUUFDOUYsT0FBZTtBQUFBLE1BQ25CLEVBQ0ssU0FBSSwwQkFBMEIsNEJBQTRCLGlDQUFpQyxXQUFXO0FBQUEsUUFDdkcsT0FBZTtBQUFBLE1BQ25CO0FBQUEsTUFDQSxPQUFlO0FBQUEsSUFDbkI7QUFBQSxJQUNBLE9BQU8seUNBQXlDO0FBQUE7QUFBQSxFQUVwRCxJQUFNLHNCQUFzQixPQUFPLE9BQU87QUFBQSxJQUN0QyxNQUFNLGNBQWMsZ0JBQWdCO0FBQUEsRUFDeEMsQ0FBQztBQUFBLEVBQ0QsU0FBUyx5QkFBeUIsQ0FBQyxTQUFRO0FBQUEsSUFDdkMsT0FBTyxTQUFRLDBCQUEwQixNQUFNO0FBQUE7QUFBQTtBQUFBLEVBRW5ELE1BQU0sK0JBQStCLHFCQUFxQixpQkFBaUI7QUFBQSxJQUN2RTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxVQUFVLFNBQVE7QUFBQSxNQUMxQixNQUFNLFFBQVE7QUFBQSxNQUNkLEtBQUssdUJBQXVCLDBCQUEwQixPQUFNO0FBQUEsTUFDNUQsS0FBSyxrQ0FBa0MsMEJBQTBCLFNBQVEscUJBQXFCO0FBQUE7QUFBQSxJQUVsRyxpQkFBaUIsQ0FBQyxnQkFBZ0I7QUFBQSxNQUM5QixPQUFPLEtBQUsscUJBQXFCLGNBQWM7QUFBQTtBQUFBLElBRW5ELDRCQUE0QixDQUFDLGdCQUFnQjtBQUFBLE1BQ3pDLE9BQU8sS0FBSyxnQ0FBZ0MsY0FBYztBQUFBO0FBQUEsRUFFbEU7QUFBQSxFQUNRLGlDQUF5QjtBQUFBOzs7O0VDdEZqQyxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw2QkFBMEI7QUFBQSxFQUNsQyxJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUE7QUFBQSxFQUlOLE1BQU0sMkJBQTJCLHlCQUF5Qix1QkFBdUI7QUFBQSxJQUM3RSxXQUFXLENBQUMsU0FBUTtBQUFBLE1BQ2hCLE9BQU8sR0FBRyxZQUFZLCtCQUErQixHQUFHLFlBQVksMEJBQTBCLFdBQVUsQ0FBQyxHQUFHLFdBQVcsY0FBYztBQUFBLFFBQ2pJLGdCQUFnQjtBQUFBLE1BQ3BCLENBQUMsR0FBRyxtQkFBbUIscUJBQXFCLEdBQUcsT0FBTTtBQUFBO0FBQUEsRUFFN0Q7QUFBQSxFQUNRLDZCQUFxQjtBQUFBOzs7O0VDZjdCLE9BQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELDZCQUEwQjtBQUFBLEVBQ2xDLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLHNCQUFzQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyxxQkFBcUI7QUFBQSxJQUFzQixDQUFDO0FBQUE7Ozs7RUNIL0ksT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNkJBQTBCO0FBQUEsRUFDbEMsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMsc0JBQXNCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLE9BQU87QUFBQSxJQUFzQixDQUFDO0FBQUE7Ozs7RUNIakksT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsaUNBQWlDLHVDQUF1QyxtQ0FBbUMsd0NBQXdDLDJDQUEyQyw2QkFBMEI7QUFBQSxFQUNoTyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxzQkFBc0IsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sV0FBVztBQUFBLElBQXNCLENBQUM7QUFBQSxFQUNySSxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxvQ0FBb0MsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sNEJBQTRCO0FBQUEsSUFBb0MsQ0FBQztBQUFBLEVBQ2xMLElBQUk7QUFBQSxFQUNKLE9BQU8sZUFBZSxTQUFTLGlDQUFpQyxFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyx5QkFBeUI7QUFBQSxJQUFpQyxDQUFDO0FBQUEsRUFDekssT0FBTyxlQUFlLFNBQVMsNEJBQTRCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLHlCQUF5QjtBQUFBLElBQTRCLENBQUM7QUFBQSxFQUMvSixPQUFPLGVBQWUsU0FBUyxnQ0FBZ0MsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8seUJBQXlCO0FBQUEsSUFBZ0MsQ0FBQztBQUFBLEVBQ3ZLLE9BQU8sZUFBZSxTQUFTLDBCQUEwQixFQUFFLFlBQVksTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQUUsT0FBTyx5QkFBeUI7QUFBQSxJQUEwQixDQUFDO0FBQUE7Ozs7RUNWM0osT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNEJBQXlCO0FBQUEsRUFDakMsSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBLEVBQ04sSUFBTTtBQUFBO0FBQUEsRUFJTixNQUFNLDBCQUEwQixxQkFBcUIsaUJBQWlCO0FBQUEsSUFDbEUsV0FBVyxDQUFDLFVBQVMsQ0FBQyxHQUFHO0FBQUEsTUFDckIsT0FBTyxHQUFHLFlBQVksK0JBQStCLEdBQUcsWUFBWSwwQkFBMEIsU0FBUSxVQUFVLGFBQWE7QUFBQSxRQUN6SCxnQkFBZ0I7QUFBQSxNQUNwQixDQUFDLEdBQUcsbUJBQW1CLG1CQUFtQixDQUFDO0FBQUE7QUFBQSxFQUVuRDtBQUFBLEVBQ1EsNEJBQW9CO0FBQUE7Ozs7RUNmNUIsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsNEJBQXlCO0FBQUEsRUFDakMsSUFBSTtBQUFBLEVBQ0osT0FBTyxlQUFlLFNBQVMscUJBQXFCLEVBQUUsWUFBWSxNQUFNLEtBQUssUUFBUyxHQUFHO0FBQUEsSUFBRSxPQUFPLG9CQUFvQjtBQUFBLElBQXFCLENBQUM7QUFBQTs7OztFQ0g1SSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw0QkFBeUI7QUFBQSxFQUNqQyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxxQkFBcUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sT0FBTztBQUFBLElBQXFCLENBQUM7QUFBQTs7OztFQ0gvSCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCw0QkFBeUI7QUFBQSxFQUNqQyxJQUFJO0FBQUEsRUFDSixPQUFPLGVBQWUsU0FBUyxxQkFBcUIsRUFBRSxZQUFZLE1BQU0sS0FBSyxRQUFTLEdBQUc7QUFBQSxJQUFFLE9BQU8sV0FBVztBQUFBLElBQXFCLENBQUM7QUFBQTs7OztFQ0huSSxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx1QkFBdUIsMEJBQXVCO0FBQUEsRUFFOUMsMEJBQWtCO0FBQUEsRUFDbEIsdUJBQWU7QUFBQTs7OztFQ0p2QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCxzQkFBbUI7QUFBQSxFQUMzQixJQUFNO0FBQUEsRUFFTixJQUFNO0FBQUEsRUFDTixJQUFNLGVBQWUsVUFBVTtBQUFBO0FBQUEsRUFJL0IsTUFBTSxZQUFZO0FBQUEsSUFDZCxVQUFVLE1BQU07QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcsQ0FBQyxTQUFRO0FBQUEsTUFHaEIsS0FBSyxRQUFRLFNBQVEsUUFBUTtBQUFBLE1BQzdCLE1BQU0sZ0JBQWdCLFNBQVEsaUJBQWlCLE1BQU0sUUFBUSxpQkFBaUI7QUFBQSxNQUM5RSxLQUFLLFNBQVMsY0FBYyxTQUFTLEtBQUssT0FBTyxVQUFVLGVBQWU7QUFBQTtBQUFBLEVBRWxGO0FBQUEsRUFDUSxzQkFBYztBQUFBOzs7O0VDckJ0QixPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx3QkFBd0IseUJBQXlCLHFCQUFxQiwwQkFBMEIsdUJBQW9CO0FBQUEsRUFDNUgsSUFBSTtBQUFBLEdBQ0gsUUFBUyxDQUFDLGVBQWM7QUFBQSxJQUNyQixjQUFhLGNBQWM7QUFBQSxJQUMzQixjQUFhLHFCQUFxQjtBQUFBLElBQ2xDLGNBQWEsa0JBQWtCO0FBQUEsSUFDL0IsY0FBYSx3QkFBd0I7QUFBQSxJQUNyQyxjQUFhLHFCQUFxQjtBQUFBLElBQ2xDLGNBQWEsb0JBQW9CO0FBQUEsSUFDakMsY0FBYSxnQkFBZ0I7QUFBQSxJQUM3QixjQUFhLHNCQUFzQjtBQUFBLElBQ25DLGNBQWEsNkJBQTZCO0FBQUEsSUFDMUMsY0FBYSwwQkFBMEI7QUFBQSxLQUN4QyxlQUF1Qix5QkFBeUIsdUJBQWUsQ0FBQyxFQUFFO0FBQUEsRUFDckUsSUFBSTtBQUFBLEdBQ0gsUUFBUyxDQUFDLGtCQUFpQjtBQUFBLElBQ3hCLGlCQUFnQiwrQkFBK0I7QUFBQSxJQUMvQyxpQkFBZ0Isc0JBQXNCO0FBQUEsSUFDdEMsaUJBQWdCLHlCQUF5QjtBQUFBLElBQ3pDLGlCQUFnQixtQkFBbUI7QUFBQSxJQUNuQyxpQkFBZ0IsMEJBQTBCO0FBQUEsSUFDMUMsaUJBQWdCLDBCQUEwQjtBQUFBLElBQzFDLGlCQUFnQix1QkFBdUI7QUFBQSxLQUN4QyxrQkFBMEIsNEJBQTRCLDBCQUFrQixDQUFDLEVBQUU7QUFBQSxFQUM5RSxJQUFJO0FBQUEsR0FDSCxRQUFTLENBQUMsYUFBWTtBQUFBLElBQ25CLFlBQVcsVUFBVTtBQUFBLElBQ3JCLFlBQVcsWUFBWTtBQUFBLElBQ3ZCLFlBQVcsVUFBVTtBQUFBLElBQ3JCLFlBQVcsZUFBZTtBQUFBLElBQzFCLFlBQVcsVUFBVTtBQUFBLEtBQ3RCLGFBQXFCLHVCQUF1QixxQkFBYSxDQUFDLEVBQUU7QUFBQSxFQUMvRCxJQUFJO0FBQUEsR0FDSCxRQUFTLENBQUMsaUJBQWdCO0FBQUEsSUFDdkIsZ0JBQWUsYUFBYTtBQUFBLElBQzVCLGdCQUFlLGNBQWM7QUFBQSxLQUM5QixpQkFBeUIsMkJBQTJCLHlCQUFpQixDQUFDLEVBQUU7QUFBQSxFQUMzRSxJQUFJO0FBQUEsR0FDSCxRQUFTLENBQUMsZ0JBQWU7QUFBQSxJQUN0QixlQUFjLFVBQVU7QUFBQSxJQUN4QixlQUFjLFVBQVU7QUFBQSxLQUN6QixnQkFBd0IsMEJBQTBCLHdCQUFnQixDQUFDLEVBQUU7QUFBQTs7OztFQzFDeEUsT0FBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsK0JBQStCLHdCQUF3QixpQ0FBaUMsMEJBQXVCO0FBQUEsRUFDdkgsSUFBTTtBQUFBLEVBQ04sSUFBTSxjQUFjLElBQUk7QUFBQSxFQUN4QixJQUFNLGNBQWMsSUFBSTtBQUFBLEVBS3hCLElBQUksYUFBYTtBQUFBLElBQ2IsTUFBTSxLQUFLLElBQUk7QUFBQSxJQUNmLE9BQU8sR0FBRyxLQUFLLE1BQU07QUFBQSxFQUN6QjtBQUFBLEVBTUEsU0FBUyxlQUFlLEdBQUc7QUFBQSxJQUN2QixNQUFNLGNBQWMsS0FBSyxJQUFJO0FBQUEsSUFDN0IsTUFBTSxjQUFjLGNBQWMsV0FBVztBQUFBLElBQzdDLE1BQU0sZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLE9BQU8sR0FBRyxLQUFLLE1BQU0sRUFBRTtBQUFBLElBQ2xFLE1BQU0sWUFBWSxjQUFjLEtBQUssSUFBSSxDQUFDLEtBQUssY0FBYztBQUFBLE1BQ3pELE1BQU0sWUFBWSxXQUFXLEtBQUssV0FBVztBQUFBLE1BQzdDLE1BQU0sWUFBWSxJQUFJO0FBQUEsTUFDdEIsTUFBTSxPQUFPLFVBQVUsT0FBTztBQUFBLE1BQzlCLE1BQU0sUUFBTyxVQUFVLE9BQU87QUFBQSxNQUM5QixNQUFNLFNBQVMsVUFBVSxNQUFNO0FBQUEsTUFDL0IsTUFBTSxZQUFZLFVBQVUsTUFBTTtBQUFBLE1BQ2xDLE1BQU0sT0FBTyxVQUFVLE9BQU87QUFBQSxNQUM5QixNQUFNLFNBQVMsVUFBVSxPQUFPLFVBQVUsUUFBUTtBQUFBLE1BQ2xELE1BQU0sU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRO0FBQUEsTUFDbEQsTUFBTSxXQUFXLFVBQVUsTUFBTSxVQUFVLE9BQU87QUFBQSxNQUNsRCxNQUFNLGNBQWMsVUFBVSxNQUFNLFVBQVUsT0FBTztBQUFBLE1BQ3JELE1BQU0sU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRO0FBQUEsTUFDbEQsT0FBTztBQUFBLFFBQ0gsV0FBVyxPQUFPLFNBQVM7QUFBQSxRQUMzQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxLQUNIO0FBQUEsSUFDRCxhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUE7QUFBQSxFQUVILDBCQUFrQjtBQUFBLEVBSzFCLElBQUksZUFBZTtBQUFBLElBQ2YsTUFBTSxLQUFLLElBQUk7QUFBQSxJQUNmLE9BQU8sUUFBUSxTQUFTO0FBQUEsRUFDNUI7QUFBQSxFQVFBLFNBQVMsc0JBQXNCLEdBQUc7QUFBQSxJQUM5QixNQUFNLGNBQWMsS0FBSyxJQUFJO0FBQUEsSUFDN0IsTUFBTSxlQUFlLFFBQVEsU0FBUztBQUFBLElBQ3RDLE1BQU0sWUFBWSxhQUFhO0FBQUEsSUFJL0IsTUFBTSxlQUFlLGNBQWMsYUFBYSxRQUFRO0FBQUEsSUFDeEQsTUFBTSxrQkFBa0IsY0FBYyxXQUFXLEtBQUs7QUFBQSxJQUN0RCxNQUFNLFFBQU8sYUFBYSxPQUFPO0FBQUEsSUFDakMsTUFBTSxTQUFTLGFBQWEsU0FBUztBQUFBLElBQ3JDLE1BQU0sU0FBUyxhQUFhLE9BQU8sVUFBVSxRQUFRO0FBQUEsSUFDckQsTUFBTSxXQUFXLGFBQWEsU0FBUyxVQUFVLFVBQVU7QUFBQSxJQUMzRCxlQUFlLEVBQUUsTUFBTSxhQUFhLE9BQU8sYUFBYTtBQUFBLElBQ3hELE9BQU87QUFBQSxNQUNIO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBO0FBQUEsRUFFSSxpQ0FBeUI7QUFBQSxFQUlqQyxTQUFTLGFBQWEsR0FBRztBQUFBLElBQ3JCLE1BQU0sU0FBUyxHQUFHLEtBQUssVUFBVTtBQUFBLElBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssU0FBUztBQUFBLElBQy9CLE1BQU0sT0FBTyxRQUFRO0FBQUEsSUFDckIsTUFBTSxRQUFRLE9BQU87QUFBQSxJQUNyQixNQUFNLFFBQVEsT0FBTztBQUFBLElBQ3JCLE9BQU87QUFBQSxNQUNIO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBO0FBQUEsRUFFSSx3QkFBZ0I7QUFBQSxFQU14QixTQUFTLG9CQUFvQixHQUFHO0FBQUEsSUFHNUIsSUFBSSxRQUFRLFlBQVksS0FBSztBQUFBLE1BQ3pCLE9BQU8sUUFBUSxZQUFZLElBQUk7QUFBQSxJQUNuQztBQUFBLElBQ0EsT0FBTyxRQUFRLFlBQVksRUFBRTtBQUFBO0FBQUEsRUFFekIsK0JBQXVCO0FBQUE7Ozs7RUN6SC9CLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU07QUFBQSxFQUNOLElBQU0sbUNBQWlDO0FBQUEsRUFDdkMsSUFBTSxrQ0FBZ0M7QUFBQSxFQUN0QyxJQUFNLHNDQUFvQztBQUFBLEVBQzFDLElBQU07QUFBQSxFQUVOLElBQUksWUFBWSxRQUFRO0FBQUEsRUFDeEIsSUFBTSxTQUFVLGNBQWMsV0FBVyxjQUFjO0FBQUEsRUFDdkQsSUFBTSxVQUFXLGNBQWM7QUFBQSxFQUMvQixJQUFNLFdBQVksY0FBYztBQUFBLEVBQ2hDLElBQU0sV0FBWSxjQUFjO0FBQUEsRUFDaEMsSUFBTSxXQUFZLGNBQWM7QUFBQSxFQUNoQyxJQUFNLFVBQVcsY0FBYztBQUFBLEVBRS9CLElBQUksU0FBUztBQUFBLEVBQ2IsSUFBSSxXQUFXO0FBQUEsRUFDZixJQUFJLFdBQVc7QUFBQSxFQUNmLElBQUksMEJBQTBCO0FBQUEsRUFDOUIsSUFBSSxlQUFlO0FBQUEsRUFFbkIsSUFBTSxTQUFTLFFBQVEsSUFBSSxVQUFVO0FBQUEsRUFHckMsSUFBSTtBQUFBLEVBQ0osSUFBSSxZQUFZO0FBQUEsRUFDaEIsSUFBSSxVQUFVLENBQUM7QUFBQSxFQUNmLElBQUksZ0JBQWdCO0FBQUEsRUFDcEIsSUFBTSxZQUFZO0FBQUEsRUFDbEIsSUFBTSxjQUFjO0FBQUEsRUFDcEIsSUFBTSxXQUFXO0FBQUEsRUFDakIsSUFBTSxrQkFBa0I7QUFBQSxFQUN4QixJQUFNLGlCQUFpQjtBQUFBLEVBRXZCLElBQU0sY0FBYztBQUFBLElBQ2xCLGFBQWE7QUFBQSxJQUNiLFdBQVcsT0FBTztBQUFBLElBQ2xCLFVBQVU7QUFBQSxJQUNWLEtBQUssT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUFBLEVBQzdEO0FBQUEsRUFFQSxJQUFNLGdCQUFnQjtBQUFBLElBQ3BCLFdBQVcsT0FBTztBQUFBLElBQ2xCLFVBQVU7QUFBQSxJQUNWLE9BQU8sQ0FBQyxRQUFRLFFBQVEsUUFBUTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxTQUFTLEtBQUssQ0FBQyxPQUFPO0FBQUEsSUFDcEIsSUFBSSxTQUFTLFNBQVMsT0FBTyxFQUFFO0FBQUEsSUFDL0IsSUFBSSxNQUFNLE1BQU0sR0FBRztBQUFBLE1BQ2pCLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUdULFNBQVMsYUFBYSxDQUFDLEtBQUs7QUFBQSxJQUMxQixJQUFJLGdCQUFnQjtBQUFBLElBQ3BCLElBQUksTUFBTTtBQUFBLElBQ1YsSUFBSSxRQUFRO0FBQUEsSUFDWixXQUFXLEtBQUssS0FBSztBQUFBLE1BQ25CLElBQUssS0FBSyxPQUFPLEtBQUssT0FBUSxlQUFlO0FBQUEsUUFDM0MsZ0JBQWdCO0FBQUEsUUFDaEIsT0FBTztBQUFBLE1BQ1QsRUFBTztBQUFBLFFBQ0wsU0FBUztBQUFBO0FBQUEsSUFFYjtBQUFBLElBQ0EsT0FBTyxDQUFDLE9BQU8sR0FBRztBQUFBO0FBQUEsRUFHcEIsSUFBTSxnQkFBZ0IsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUNuQyxJQUFNLGdCQUFnQixJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ25DLElBQU0saUJBQWlCLElBQUksT0FBTyxFQUFFO0FBQUEsRUFDcEMsSUFBTSxlQUFlLElBQUksT0FBTyxFQUFFO0FBQUEsRUFDbEMsSUFBTSxhQUFhLElBQUksT0FBTyxFQUFFO0FBQUEsRUFDaEMsSUFBTSxrQkFBa0IsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUNyQyxJQUFNLFVBQVUsS0FBSztBQUFBLEVBRXJCLFNBQVMsVUFBVSxDQUFDLGlCQUFpQjtBQUFBLElBQ25DLElBQUksVUFBVSxDQUFDO0FBQUEsSUFDZixPQUFPLG1CQUFtQixRQUFRLFNBQVMsS0FBSyxlQUFlLE1BQU07QUFBQTtBQUFBLEVBR3ZFLFNBQVMsTUFBTSxDQUFDLEtBQUs7QUFBQSxJQUNuQixJQUFJLFVBQVUsQ0FBQztBQUFBLElBQ2YsSUFBSSxZQUFZLENBQUM7QUFBQSxJQUNqQixTQUFTLElBQUksRUFBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQUEsTUFDbkMsSUFBSSxPQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUM3QixLQUFLLEtBQUssUUFBUyxDQUFDLEdBQUcsR0FBRztBQUFBLFFBQUUsT0FBTyxJQUFJO0FBQUEsT0FBSTtBQUFBLE1BQzNDLElBQUksTUFBTTtBQUFBLE1BQ1YsU0FBUyxJQUFJLEVBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUFBLFFBQ3BDLE9BQU8sS0FBSyxVQUFVLEtBQUssRUFBRTtBQUFBLFFBQzdCLE9BQU8sS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUN2QztBQUFBLE1BQ0EsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLEtBQUssV0FBVyxHQUFHLEdBQUc7QUFBQSxRQUMzQyxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQUEsUUFDbkIsVUFBVSxPQUFPO0FBQUEsTUFDbkI7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUdULFNBQVMsU0FBUyxDQUFDLFFBQU8sTUFBTTtBQUFBLElBQzlCLE9BQU8sT0FBTSxLQUFLLFFBQVMsQ0FBQyxHQUFHLEdBQUc7QUFBQSxNQUNoQyxJQUFJLElBQUk7QUFBQSxNQUNSLElBQUksSUFBSTtBQUFBLE1BQ1IsS0FBSyxRQUFRLFFBQVMsQ0FBQyxLQUFLO0FBQUEsUUFDMUIsSUFBSSxJQUFJLEVBQUU7QUFBQSxRQUFNLElBQUksSUFBSSxFQUFFO0FBQUEsT0FDM0I7QUFBQSxNQUNELE9BQVMsSUFBSSxJQUFLLEtBQU8sSUFBSSxJQUFLLElBQUk7QUFBQSxLQUN2QztBQUFBO0FBQUEsRUFHSCxTQUFTLEtBQUssR0FBRztBQUFBLElBQ2YsSUFBSSxXQUFXLEdBQUc7QUFBQSxNQUNoQixTQUFTLEdBQUcsS0FBSyxFQUFFO0FBQUEsSUFDckI7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBR1QsU0FBUyxRQUFRLENBQUMsT0FBTyxVQUFVLFdBQVcsU0FBUyxXQUFXO0FBQUEsSUFDaEUsWUFBWSxhQUFhO0FBQUEsSUFDekIsV0FBVyxTQUFTLFlBQVk7QUFBQSxJQUNoQyxVQUFVLFdBQVc7QUFBQSxJQUNyQixZQUFZLGFBQWE7QUFBQSxJQUN6QixJQUFJLFNBQVM7QUFBQSxJQUNiLE1BQU0sS0FBSyxDQUFDLFNBQVM7QUFBQSxNQUNuQixJQUFJLFlBQVksS0FBSyxZQUFZLEVBQUUsUUFBUSxPQUFPLEVBQUU7QUFBQSxNQUNwRCxJQUFJLFNBQVM7QUFBQSxRQUNYLFlBQVksVUFBVSxLQUFLO0FBQUEsTUFDN0I7QUFBQSxNQUNBLElBQUksVUFBVSxXQUFXLFFBQVEsTUFBTSxZQUFhLFVBQVUsTUFBTSxXQUFXLFNBQVMsS0FBTyxVQUFVLE1BQU0sV0FBVyxNQUFNLFNBQVMsSUFBSyxPQUFPO0FBQUEsUUFDbkosTUFBTSxRQUFRLFVBQVUsS0FBSyxLQUFLLEVBQUUsTUFBTSxTQUFTLElBQUksS0FBSyxNQUFNLFNBQVM7QUFBQSxRQUMzRSxJQUFJLE1BQU0sVUFBVSxHQUFHO0FBQUEsVUFDckIsTUFBTSxNQUFNO0FBQUEsVUFDWixTQUFTLE1BQU0sS0FBSyxTQUFTLEVBQUUsS0FBSztBQUFBLFVBQ3BDLE9BQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUFBLEtBQ0Q7QUFBQSxJQUNELE9BQU87QUFBQTtBQUFBLEVBR1QsU0FBUyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU07QUFBQSxJQUN2QyxPQUFPLFFBQVE7QUFBQSxJQUNmLE9BQU8sSUFBSSxRQUFRLHdCQUF3QixRQUFTLEdBQUc7QUFBQSxNQUNyRCxPQUFPLE9BQU8sYUFBYSxTQUFTLFVBQVUsSUFBSSxJQUFJLENBQUM7QUFBQSxLQUN4RDtBQUFBO0FBQUEsRUFHSCxTQUFTLFdBQVcsQ0FBQyxLQUFLO0FBQUEsSUFDeEIsSUFBSSxZQUFZO0FBQUEsSUFDaEIsSUFBSSxPQUFPO0FBQUEsSUFDWCxJQUFJLE1BQU0sRUFBRSxFQUFFLFFBQVEsYUFBVztBQUFBLE1BQy9CLElBQUksV0FBVyxPQUFPLFdBQVcsS0FBSztBQUFBLFFBQ3BDLElBQUksU0FBUyxHQUFHO0FBQUEsVUFBRTtBQUFBLFFBQVE7QUFBQSxNQUM1QixFQUFPO0FBQUEsUUFDTCxJQUFJLFNBQVMsR0FBRztBQUFBLFVBQUU7QUFBQSxRQUFRO0FBQUEsUUFDMUIsSUFBSSxTQUFTLEdBQUc7QUFBQSxVQUNkLGFBQWE7QUFBQSxRQUNmO0FBQUE7QUFBQSxLQUVIO0FBQUEsSUFDRCxPQUFPO0FBQUE7QUFBQSxFQUdULFNBQVMsU0FBUyxDQUFDLEdBQUcsY0FBYztBQUFBLElBQ2xDLGVBQWUsZ0JBQWdCO0FBQUEsSUFDL0IsSUFBSSxFQUFFLFlBQVk7QUFBQSxJQUNsQixJQUFJLE9BQU87QUFBQSxJQUNYLElBQUksTUFBTTtBQUFBLElBQ1YsSUFBSSxXQUFXLFlBQVksQ0FBQztBQUFBLElBQzVCLElBQUksUUFBUSxFQUFFLE1BQU0sUUFBUTtBQUFBLElBQzVCLElBQUksTUFBTSxVQUFVLEdBQUc7QUFBQSxNQUNyQixJQUFJLE1BQU0sSUFBSTtBQUFBLFFBQ1osTUFBTSxNQUFNLE1BQU07QUFBQSxNQUNwQjtBQUFBLE1BQ0EsSUFBSSxPQUFRLE1BQU0sTUFBTyxNQUFNLEdBQUcsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLE1BQVEsTUFBTSxHQUFHLFlBQVksRUFBRSxRQUFRLE1BQU0sSUFBSSxNQUFRLE1BQU0sR0FBRyxZQUFZLEVBQUUsUUFBUSxPQUFPLElBQUksTUFBUSxNQUFNLEdBQUcsWUFBWSxFQUFFLFFBQVEsR0FBRyxJQUFJLE1BQVEsTUFBTSxHQUFHLFlBQVksRUFBRSxRQUFRLElBQUksSUFBSSxNQUFRLE1BQU0sR0FBRyxZQUFZLEVBQUUsUUFBUSxPQUFHLElBQUksTUFBUSxnQkFBZ0IsTUFBTSxHQUFHLFlBQVksRUFBRSxRQUFRLFlBQVksSUFBSTtBQUFBLE1BQ3JYLE9BQU8sU0FBUyxNQUFNLElBQUksRUFBRTtBQUFBLE1BQzVCLE1BQU0sU0FBUyxNQUFNLElBQUksRUFBRTtBQUFBLE1BQzNCLE9BQU8sUUFBUSxPQUFPLEtBQUssT0FBTyxLQUFLO0FBQUEsTUFDdkMsUUFBUSxNQUFNLE1BQU0sT0FBTyxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssT0FBTyxFQUFFO0FBQUEsSUFDOUQ7QUFBQTtBQUFBLEVBR0YsU0FBUyxhQUFhLENBQUMsSUFBSSxTQUFTO0FBQUEsSUFDbEMsTUFBTSxTQUFTO0FBQUEsTUFDYixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsVUFBVSxXQUFXLENBQUM7QUFBQSxJQUN0QixJQUFJLGNBQWMsUUFBUSxjQUFjLElBQUksWUFBWTtBQUFBLElBQ3hELElBQUksZUFBZ0IsUUFBUSxnQkFBZ0I7QUFBQSxJQUU1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUc7QUFBQSxJQUMxQixJQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ1osSUFBSSxNQUFNLEdBQUcsUUFBUSxHQUFHLEtBQUssR0FBRztBQUFBLFFBRTlCLE1BQU0sVUFBVSxNQUFNLEdBQUcsTUFBTSxHQUFHO0FBQUEsUUFDbEMsSUFBSSxRQUFRLFdBQVcsR0FBRztBQUFBLFVBQ3hCLElBQUksUUFBUSxHQUFHLFdBQVcsR0FBRztBQUFBLFlBRTNCLE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLE1BQU0sUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUFBLFVBQ3JHLEVBQU8sU0FBSSxRQUFRLEdBQUcsV0FBVyxHQUFHO0FBQUEsWUFDbEMsSUFBSyxXQUFXLFFBQVEsS0FBSyxJQUFJLE1BQU0sV0FBVyxRQUFRLE1BQU0sSUFBSSxJQUFLO0FBQUEsY0FFdkUsT0FBTyxPQUFPLE9BQU8sUUFBUSxLQUFLLE9BQU8sTUFBTSxRQUFRLElBQUksT0FBTyxFQUFFLElBQUksT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFBQSxZQUM1RyxFQUFPO0FBQUEsY0FFTCxPQUFPLE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLE1BQU0sUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUFBO0FBQUEsVUFFOUcsRUFBTztBQUFBLFlBRUwsTUFBTSxPQUFTLEdBQUcsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLE1BQVEsR0FBRyxZQUFZLEVBQUUsUUFBUSxNQUFNLElBQUksTUFBUSxHQUFHLFlBQVksRUFBRSxRQUFRLE9BQU8sSUFBSSxNQUFRLEdBQUcsWUFBWSxFQUFFLFFBQVEsSUFBSSxJQUFJLE1BQVEsR0FBRyxZQUFZLEVBQUUsUUFBUSxNQUFNLElBQUksTUFBUSxHQUFHLFlBQVksRUFBRSxRQUFRLE9BQU8sSUFBSTtBQUFBLFlBQ3ZRLEtBQUssUUFBUSxXQUFXLFFBQVEsS0FBSyxJQUFJLE1BQU0sV0FBVyxRQUFRLE1BQU0sSUFBSSxPQUFPLFdBQVcsUUFBUSxLQUFLLE1BQU0sR0FBRztBQUFBLGNBRWxILE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLE1BQU0sUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUFBLFlBQ3JHLEVBQU87QUFBQSxjQUVMLE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLE1BQU0sUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUFBO0FBQUE7QUFBQSxRQUd6RztBQUFBLE1BQ0Y7QUFBQSxNQUNBLElBQUksTUFBTSxHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUc7QUFBQSxRQUM5QixNQUFNLFVBQVUsTUFBTSxHQUFHLE1BQU0sR0FBRztBQUFBLFFBQ2xDLElBQUksUUFBUSxXQUFXLEdBQUc7QUFBQSxVQUN4QixJQUFJLFdBQVcsUUFBUSxLQUFLLElBQUksTUFBTSxXQUFXLFFBQVEsTUFBTSxJQUFJLElBQUk7QUFBQSxZQUVyRSxPQUFPLE9BQU8sUUFBUSxLQUFLLE9BQU8sTUFBTSxRQUFRLElBQUksT0FBTyxFQUFFLElBQUksT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFBQSxVQUNyRyxFQUFPO0FBQUEsWUFFTCxPQUFPLE9BQU8sUUFBUSxLQUFLLE9BQU8sTUFBTSxRQUFRLElBQUksT0FBTyxFQUFFLElBQUksT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFBQTtBQUFBLFFBRXZHO0FBQUEsTUFDRjtBQUFBLE1BQ0EsSUFBSSxNQUFNLEdBQUcsUUFBUSxHQUFHLEtBQUssR0FBRztBQUFBLFFBRTlCLE1BQU0sVUFBVSxNQUFNLEdBQUcsTUFBTSxHQUFHO0FBQUEsUUFDbEMsSUFBSSxRQUFRLFdBQVcsR0FBRztBQUFBLFVBQ3hCLE9BQU8sT0FBTyxRQUFRLEtBQUssT0FBTyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLE1BQU0sUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUFBLFFBQ3JHO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLElBQUksTUFBTSxJQUFJO0FBQUEsTUFDWixNQUFNLE1BQU07QUFBQSxNQUNaLElBQUksUUFBTyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQ3pCLE9BQU8sT0FBTyxVQUFVLE9BQU0sWUFBWTtBQUFBLElBQzVDO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUdULFNBQVMsU0FBUyxDQUFDLE1BQU0sUUFBUTtBQUFBLElBQy9CLElBQUksUUFBUyxTQUFTO0FBQUEsSUFDdEIsSUFBSSxRQUFRO0FBQUEsSUFDWixJQUFJLE9BQU87QUFBQSxJQUNYLElBQUksS0FBSztBQUFBLElBQ1QsSUFBSSxTQUFTLENBQUM7QUFBQSxJQUNkLFNBQVMsSUFBSSxFQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFBQSxNQUNwQyxJQUFJLFNBQVMsUUFBUTtBQUFBLFFBQ25CLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTztBQUFBLFVBQ2hDLEtBQUssSUFBSTtBQUFBLFVBQ1QsT0FBTyxLQUFLO0FBQUEsWUFDVjtBQUFBLFlBQ0EsSUFBSSxLQUFLO0FBQUEsWUFDVCxLQUFLLEtBQUssVUFBVSxNQUFNLEtBQUssQ0FBQztBQUFBLFVBQ2xDLENBQUM7QUFBQSxVQUNELE9BQU8sS0FBSztBQUFBLFVBQ1o7QUFBQSxRQUNGO0FBQUEsUUFDQSxRQUFRLEtBQUssT0FBTztBQUFBLE1BQ3RCLEVBQU87QUFBQSxRQUNMLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssT0FBTztBQUFBLFVBQ2hDLEtBQUssSUFBSTtBQUFBLFVBQ1QsSUFBSSxPQUFPLElBQUk7QUFBQSxZQUNiLE9BQU8sS0FBSztBQUFBLGNBQ1Y7QUFBQSxjQUNBO0FBQUEsY0FDQSxLQUFLLEtBQUssVUFBVSxNQUFNLEVBQUU7QUFBQSxZQUM5QixDQUFDO0FBQUEsVUFDSDtBQUFBLFVBQ0EsT0FBTyxLQUFLO0FBQUEsVUFDWjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLFFBQVEsS0FBSyxPQUFPO0FBQUE7QUFBQSxJQUV4QjtBQUFBLElBQ0EsS0FBSztBQUFBLElBQ0wsT0FBTyxLQUFLO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBLEtBQUssS0FBSyxVQUFVLE1BQU0sRUFBRTtBQUFBLElBQzlCLENBQUM7QUFBQSxJQUNELElBQUksTUFBTSxPQUFPO0FBQUEsSUFDakIsU0FBUyxJQUFJLEVBQUcsSUFBSSxLQUFLLEtBQUs7QUFBQSxNQUM1QixJQUFJLE9BQU8sR0FBRyxJQUFJLFFBQVEsT0FBTyxFQUFFLEVBQUUsV0FBVyxHQUFHO0FBQUEsUUFDakQsSUFBSSxJQUFJLElBQUksS0FBSztBQUFBLFVBQ2YsT0FBTyxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUc7QUFBQSxVQUM3QixPQUFPLEdBQUcsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLElBQUksR0FBRztBQUFBLFVBQzlDLE9BQU8sT0FBTyxJQUFJLEdBQUcsQ0FBQztBQUFBLFVBQ3RCLE1BQU0sTUFBTTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFHVCxTQUFTLGVBQWUsQ0FBQyxRQUFPLEtBQUssT0FBTztBQUFBLElBQzFDLFNBQVMsSUFBSSxFQUFHLElBQUksT0FBTSxRQUFRLEtBQUs7QUFBQSxNQUNyQyxJQUFJLE9BQU0sR0FBRyxTQUFTLE9BQU87QUFBQSxRQUMzQixPQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBR1QsU0FBUyxPQUFPLEdBQUc7QUFBQSxJQUNqQixJQUFJLEdBQUcsS0FBSyxNQUFNLGdCQUFnQixDQUFDLFVBQVU7QUFBQSxNQUMzQyxXQUFXLFNBQVM7QUFBQSxNQUNwQixJQUFJLENBQUMsR0FBRyxXQUFXLFFBQVEsR0FBRztBQUFBLFFBQzVCLElBQUk7QUFBQSxVQUNGLE1BQU0sZ0JBQWdCLFNBQVMsY0FBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFBQSxDQUFNO0FBQUEsVUFDakYsSUFBSSxpQkFBaUIsY0FBYyxRQUFRO0FBQUEsWUFDekMsV0FBVyxjQUFjO0FBQUEsVUFDM0IsRUFBTztBQUFBLFlBQ0wsV0FBVztBQUFBO0FBQUEsVUFFYixPQUFPLEdBQUc7QUFBQSxVQUNWLFdBQVc7QUFBQTtBQUFBLE1BRWY7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUdULFNBQVMsSUFBSSxDQUFDLFNBQVM7QUFBQSxJQUNyQixPQUFPLElBQUksUUFBUSxDQUFDLGFBQVk7QUFBQSxNQUM5QixRQUFRLFNBQVMsTUFBTTtBQUFBLFFBQ3JCLElBQUk7QUFBQSxVQUNGLFdBQVcsUUFBUSxJQUFJLE1BQU0sT0FBTyxFQUFFLEtBQUssWUFBVTtBQUFBLFlBQ25ELFNBQVEsUUFBUSxFQUFFO0FBQUEsV0FDbkI7QUFBQSxVQUNELE9BQU8sR0FBRztBQUFBLFVBQ1YsU0FBUSxJQUFJLENBQUM7QUFBQTtBQUFBLE9BRWhCO0FBQUEsS0FDRjtBQUFBO0FBQUEsRUFHSCxTQUFTLGFBQWEsR0FBRztBQUFBLElBQ3ZCLE9BQU8sV0FBVyxJQUFJLFFBQVEsSUFBSSxxQkFBcUIsUUFBUSxJQUFJLDJDQUEyQztBQUFBO0FBQUEsRUFHaEgsU0FBUyx3QkFBd0IsQ0FBQyxNQUFNO0FBQUEsSUFDdEMsSUFBSSxLQUFLO0FBQUEsSUFDVCxJQUFJO0FBQUEsSUFDSixJQUFJLE1BQU07QUFBQSxJQUVWLElBQUksS0FBSyxRQUFRLFdBQVcsS0FBSyxHQUFHO0FBQUEsTUFDbEMsUUFBUSxLQUFLLE1BQU0sV0FBVztBQUFBLE1BQzlCLE1BQU0sU0FBUyxNQUFNLEdBQUcsTUFBTSxjQUFjO0FBQUEsTUFDNUMsS0FBSyxPQUFPO0FBQUEsTUFDWixJQUFJLE9BQU8sU0FBUyxHQUFHO0FBQUEsUUFDckIsT0FBTyxPQUFPLE1BQU0sQ0FBQyxFQUFFLEtBQUssY0FBYztBQUFBLE1BQzVDO0FBQUEsSUFDRjtBQUFBLElBRUEsSUFBSSxLQUFLLFFBQVEsZUFBZSxLQUFLLEdBQUc7QUFBQSxNQUN0QyxRQUFRLEtBQUssTUFBTSxlQUFlO0FBQUEsTUFDbEMsTUFBTSxNQUFNO0FBQUEsSUFDZDtBQUFBLElBQ0EsSUFBSSxTQUFTO0FBQUEsSUFDYixTQUFTLElBQUksRUFBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQUEsTUFDdkMsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJO0FBQUEsUUFDeEIsU0FBUztBQUFBLFFBQ1QsUUFBUSxHQUFHLFNBQVMsR0FBRztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLElBQ0EsSUFBSSxVQUFVLEdBQUc7QUFBQSxNQUNmLFFBQVEsT0FBTyxRQUFRLENBQUM7QUFBQSxJQUMxQjtBQUFBO0FBQUEsRUFHRixTQUFTLGVBQWUsR0FBRztBQUFBLElBQ3pCLElBQUksQ0FBQyxVQUFVO0FBQUEsTUFDYixXQUFXLE1BQU0sa0JBQWtCLENBQUMsY0FBYyxXQUFXLGdCQUFnQixRQUFRLFdBQVcsWUFBWSxHQUFHLEdBQUc7QUFBQSxRQUNoSCxPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsUUFDYixXQUFXLE9BQU87QUFBQSxRQUNsQixVQUFVO0FBQUEsUUFDVixLQUFLLE9BQU8sT0FBTyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFBQSxNQUM3RCxDQUFDO0FBQUEsTUFDRCxJQUFJLFlBQVksU0FBUyxLQUFLO0FBQUEsUUFDNUIsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBUyxPQUFPLEdBQUcsUUFBUSxRQUFTLENBQUMsTUFBTTtBQUFBLFVBQ3pDLFlBQVksWUFBWSxLQUFLLFNBQVMsTUFBTTtBQUFBLFVBQzVDLElBQUksS0FBSyxRQUFRLGVBQWUsS0FBSyxHQUFHO0FBQUEsWUFDdEMseUJBQXlCLFNBQVM7QUFBQSxZQUNsQyxZQUFZO0FBQUEsVUFDZDtBQUFBLFNBQ0Q7QUFBQSxRQUNELFNBQVMsT0FBTyxHQUFHLFFBQVEsUUFBUyxHQUFHO0FBQUEsVUFDckMseUJBQXlCLFlBQVksUUFBUTtBQUFBLFNBQzlDO0FBQUEsUUFDRCxTQUFTLEdBQUcsU0FBUyxRQUFTLEdBQUc7QUFBQSxVQUMvQix5QkFBeUIsWUFBWSxRQUFRO0FBQUEsU0FDOUM7QUFBQSxRQUNELFNBQVMsR0FBRyxTQUFTLFFBQVMsR0FBRztBQUFBLFVBQy9CLElBQUksVUFBVTtBQUFBLFlBQUUsU0FBUyxLQUFLO0FBQUEsVUFBRztBQUFBLFNBQ2xDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQTtBQUFBLEVBR0YsU0FBUyxpQkFBaUIsR0FBRztBQUFBLElBQzNCLElBQUk7QUFBQSxNQUNGLElBQUksVUFBVTtBQUFBLFFBQ1osU0FBUyxNQUFNLE1BQU0sU0FBUyxHQUFHLEdBQUc7QUFBQSxRQUNwQyxTQUFTLE1BQU0sSUFBSTtBQUFBLFFBQ25CLGdCQUFnQjtBQUFBLE1BQ2xCO0FBQUEsTUFDQSxPQUFPLEdBQUc7QUFBQSxNQUNWLElBQUksVUFBVTtBQUFBLFFBQUUsU0FBUyxLQUFLO0FBQUEsTUFBRztBQUFBO0FBQUEsSUFFbkMsV0FBVztBQUFBO0FBQUEsRUFHYixTQUFTLFVBQVUsQ0FBQyxLQUFLO0FBQUEsSUFPdkIsSUFBSSxlQUFlO0FBQUEsTUFDakIsTUFBTSxLQUFLLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFO0FBQUEsTUFDckQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxhQUFZO0FBQUEsUUFDOUIsUUFBUSxTQUFTLE1BQU07QUFBQSxVQUNyQixTQUFTLFFBQVEsQ0FBQyxNQUFNO0FBQUEsWUFDdEIsU0FBUSxJQUFJO0FBQUE7QUFBQSxVQUVkLFFBQVEsS0FBSztBQUFBLFlBQ1g7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsT0FBTyxJQUFJO0FBQUEsVUFDYixDQUFDO0FBQUEsVUFDRCxJQUFJO0FBQUEsWUFDRixJQUFJLFlBQVksU0FBUyxLQUFLO0FBQUEsY0FDNUIsU0FBUyxNQUFNLE1BQU0sWUFBWSxVQUFVLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxHQUFHLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxrQkFBa0IsR0FBRyxHQUFHO0FBQUEsWUFDbEo7QUFBQSxZQUNBLE9BQU8sR0FBRztBQUFBLFlBQ1YsU0FBUSxFQUFFO0FBQUE7QUFBQSxTQUViO0FBQUEsT0FDRjtBQUFBLElBRUgsRUFBTztBQUFBLE1BQ0wsSUFBSSxTQUFTO0FBQUEsTUFFYixPQUFPLElBQUksUUFBUSxDQUFDLGFBQVk7QUFBQSxRQUM5QixRQUFRLFNBQVMsTUFBTTtBQUFBLFVBQ3JCLElBQUk7QUFBQSxZQUNGLE1BQU0sUUFBUSxNQUFNLGtCQUFrQixDQUFDLGNBQWMsV0FBVyxnQkFBZ0IsUUFBUSxXQUFXLG9CQUFvQixnQkFBZ0IsWUFBWSxHQUFHLEdBQUc7QUFBQSxjQUN2SixPQUFPO0FBQUEsY0FDUCxhQUFhO0FBQUEsY0FDYixXQUFXLE9BQU87QUFBQSxjQUNsQixVQUFVO0FBQUEsY0FDVixLQUFLLE9BQU8sT0FBTyxDQUFDLEdBQUcsUUFBUSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFBQSxZQUM3RCxDQUFDO0FBQUEsWUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUs7QUFBQSxjQUN2QixNQUFNLEdBQUcsU0FBUyxRQUFTLEdBQUc7QUFBQSxnQkFDNUIsU0FBUSxNQUFNO0FBQUEsZUFDZjtBQUFBLFlBQ0g7QUFBQSxZQUNBLElBQUksU0FBUyxNQUFNLEtBQUs7QUFBQSxjQUN0QixNQUFNLE9BQU8sR0FBRyxRQUFRLFFBQVMsQ0FBQyxNQUFNO0FBQUEsZ0JBQ3RDLFNBQVMsU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUFBLGVBQ3ZDO0FBQUEsY0FDRCxNQUFNLE9BQU8sR0FBRyxRQUFRLFFBQVMsR0FBRztBQUFBLGdCQUNsQyxNQUFNLEtBQUs7QUFBQSxnQkFDWCxTQUFRLE1BQU07QUFBQSxlQUNmO0FBQUEsY0FDRCxNQUFNLEdBQUcsU0FBUyxRQUFTLEdBQUc7QUFBQSxnQkFDNUIsTUFBTSxLQUFLO0FBQUEsZ0JBRVgsU0FBUSxNQUFNO0FBQUEsZUFDZjtBQUFBLGNBQ0QsTUFBTSxHQUFHLFNBQVMsUUFBUyxHQUFHO0FBQUEsZ0JBQzVCLE1BQU0sS0FBSztBQUFBLGdCQUNYLFNBQVEsTUFBTTtBQUFBLGVBQ2Y7QUFBQSxjQUNELElBQUk7QUFBQSxnQkFDRixNQUFNLE1BQU0sTUFBTSxZQUFZLE1BQU0sR0FBRyxHQUFHO0FBQUEsZ0JBQzFDLE1BQU0sTUFBTSxNQUFNLFNBQVMsR0FBRyxHQUFHO0FBQUEsZ0JBQ2pDLE1BQU0sTUFBTSxJQUFJO0FBQUEsZ0JBQ2hCLE9BQU8sR0FBRztBQUFBLGdCQUNWLE1BQU0sS0FBSztBQUFBLGdCQUNYLFNBQVEsTUFBTTtBQUFBO0FBQUEsWUFFbEIsRUFBTztBQUFBLGNBQ0wsU0FBUSxNQUFNO0FBQUE7QUFBQSxZQUVoQixPQUFPLEdBQUc7QUFBQSxZQUNWLFNBQVEsTUFBTTtBQUFBO0FBQUEsU0FFakI7QUFBQSxPQUNGO0FBQUE7QUFBQTtBQUFBLEVBSUwsU0FBUyxRQUFRLENBQUMsS0FBSyxNQUFNLFNBQVM7QUFBQSxJQUNwQyxJQUFJLFNBQVM7QUFBQSxJQUNiLFVBQVUsV0FBVyxDQUFDO0FBQUEsSUFFdEIsT0FBTyxJQUFJLFFBQVEsQ0FBQyxhQUFZO0FBQUEsTUFDOUIsUUFBUSxTQUFTLE1BQU07QUFBQSxRQUNyQixJQUFJO0FBQUEsVUFDRixNQUFNLFFBQVEsTUFBTSxLQUFLLE1BQU0sT0FBTztBQUFBLFVBRXRDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSztBQUFBLFlBQ3ZCLE1BQU0sR0FBRyxTQUFTLFFBQVMsR0FBRztBQUFBLGNBQzVCLFNBQVEsTUFBTTtBQUFBLGFBQ2Y7QUFBQSxVQUNIO0FBQUEsVUFDQSxJQUFJLFNBQVMsTUFBTSxLQUFLO0FBQUEsWUFDdEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxRQUFTLENBQUMsTUFBTTtBQUFBLGNBQ3RDLFVBQVUsS0FBSyxTQUFTO0FBQUEsYUFDekI7QUFBQSxZQUNELE1BQU0sR0FBRyxTQUFTLFFBQVMsR0FBRztBQUFBLGNBQzVCLE1BQU0sS0FBSztBQUFBLGNBQ1gsU0FBUSxNQUFNO0FBQUEsYUFDZjtBQUFBLFlBQ0QsTUFBTSxHQUFHLFNBQVMsUUFBUyxHQUFHO0FBQUEsY0FDNUIsTUFBTSxLQUFLO0FBQUEsY0FDWCxTQUFRLE1BQU07QUFBQSxhQUNmO0FBQUEsVUFDSCxFQUFPO0FBQUEsWUFDTCxTQUFRLE1BQU07QUFBQTtBQUFBLFVBRWhCLE9BQU8sR0FBRztBQUFBLFVBQ1YsU0FBUSxNQUFNO0FBQUE7QUFBQSxPQUVqQjtBQUFBLEtBQ0Y7QUFBQTtBQUFBLEVBR0gsU0FBUyxXQUFXLEdBQUc7QUFBQSxJQUNyQixJQUFJLFVBQVU7QUFBQSxNQUNaLElBQUksQ0FBQyxVQUFVO0FBQUEsUUFDYixJQUFJO0FBQUEsVUFDRixNQUFNLFNBQVMsU0FBUyxRQUFRLFdBQVc7QUFBQSxVQUMzQyxNQUFNLFFBQVEsT0FBTyxTQUFTLEVBQUUsTUFBTTtBQUFBLENBQU07QUFBQSxVQUM1QyxNQUFNLFFBQVEsTUFBTSxHQUFHLE1BQU0sR0FBRztBQUFBLFVBQ2hDLFdBQVcsTUFBTSxTQUFTLElBQUksTUFBTSxHQUFHLFFBQVEsS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJO0FBQUEsVUFDakUsT0FBTyxLQUFLO0FBQUEsVUFDWixXQUFXO0FBQUE7QUFBQSxNQUVmO0FBQUEsTUFDQSxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsSUFBSSxVQUFVLFdBQVcsWUFBWSxZQUFZLFNBQVM7QUFBQSxNQUN4RCxJQUFJLENBQUMsVUFBVTtBQUFBLFFBQ2IsSUFBSTtBQUFBLFVBQ0YsTUFBTSxTQUFTLFNBQVMsY0FBYyxNQUFLLGFBQWE7QUFBQSxVQUN4RCxNQUFNLFFBQVEsT0FBTyxTQUFTLEVBQUUsTUFBTTtBQUFBLENBQU07QUFBQSxVQUM1QyxNQUFNLFFBQVEsTUFBTSxHQUFHLE1BQU0sR0FBRztBQUFBLFVBQ2hDLFdBQVcsTUFBTSxTQUFTLElBQUksTUFBTSxHQUFHLEtBQUssSUFBSTtBQUFBLFVBQ2hELElBQUksQ0FBQyxVQUFVO0FBQUEsWUFDYixXQUFXO0FBQUEsVUFDYjtBQUFBLFVBQ0EsT0FBTyxLQUFLO0FBQUEsVUFDWixXQUFXO0FBQUE7QUFBQSxNQUVmO0FBQUEsTUFDQSxPQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUEsRUFHRixTQUFTLHNCQUFzQixHQUFHO0FBQUEsSUFDaEMsSUFBSSw0QkFBNEIsTUFBTTtBQUFBLE1BQ3BDLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSwwQkFBMEI7QUFBQSxJQUMxQixJQUFJLFVBQVU7QUFBQSxNQUNaLElBQUk7QUFBQSxRQUNGLE1BQU0sWUFBWSxTQUFTLHdCQUF3QixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFBQSxDQUFNO0FBQUEsUUFDdkYsSUFBSSxhQUFhLFVBQVUsUUFBUTtBQUFBLFVBQ2pDLDBCQUEwQixVQUFVLEdBQUcsUUFBUSxLQUFLLEtBQUs7QUFBQSxRQUMzRCxFQUFPO0FBQUEsVUFDTCwwQkFBMEI7QUFBQTtBQUFBLFFBRTVCLE9BQU8sR0FBRztBQUFBLFFBQ1YsMEJBQTBCO0FBQUE7QUFBQSxJQUU5QjtBQUFBLElBQ0EsSUFBSSxVQUFVLFdBQVcsWUFBWSxZQUFZLFNBQVM7QUFBQSxNQUN4RCxJQUFJO0FBQUEsUUFDRixNQUFNLFlBQVksU0FBUyw4QkFBOEIsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNO0FBQUEsQ0FBTTtBQUFBLFFBQy9GLDBCQUEwQixVQUFVLFNBQVM7QUFBQSxRQUM3QyxPQUFPLEdBQUc7QUFBQSxRQUNWLE1BQUssS0FBSztBQUFBO0FBQUEsSUFFZDtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFHVCxTQUFTLFdBQVcsR0FBRztBQUFBLElBQ3JCLE1BQU0sY0FBYztBQUFBLE1BQ2xCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsSUFDQSxJQUFJLFVBQVUsQ0FBQztBQUFBLElBRWYsSUFBSSxpQkFBaUIsTUFBTTtBQUFBLE1BQ3pCLFVBQVU7QUFBQSxJQUNaLEVBQU87QUFBQSxNQUNMLElBQUk7QUFBQSxRQUNGLFVBQVUsR0FBRyxhQUFhLGlCQUFpQixFQUFFLFVBQVUsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFBQSxDQUFJO0FBQUEsUUFDdEYsZUFBZTtBQUFBLFFBQ2YsT0FBTyxHQUFHO0FBQUEsUUFDVixPQUFPO0FBQUE7QUFBQTtBQUFBLElBSVgsTUFBTSxXQUFXLFNBQVMsU0FBUyxVQUFVO0FBQUEsSUFDN0MsT0FBUSxZQUFZLFlBQVksUUFBUSxRQUFRLElBQUk7QUFBQTtBQUFBLEVBR3RELFNBQVMsVUFBVSxHQUFHO0FBQUEsSUFDcEIsSUFBSSxZQUFZLENBQUM7QUFBQSxJQUNqQixJQUFJO0FBQUEsTUFDRixZQUFZLEdBQUcsYUFBYSxtQkFBbUIsRUFBRSxVQUFVLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNO0FBQUEsQ0FBSTtBQUFBLE1BQzFGLE9BQU8sR0FBRztBQUFBLE1BQ1YsT0FBTztBQUFBO0FBQUEsSUFFVCxNQUFNLEtBQUssU0FBUyxXQUFXLE1BQU0sR0FBRztBQUFBLElBQ3hDLE9BQVEsTUFBTSxHQUFHLFFBQVEsVUFBVSxJQUFJO0FBQUE7QUFBQSxFQUd6QyxTQUFTLE9BQU8sQ0FBQyxLQUFLLE1BQU0sVUFBVTtBQUFBLElBQ3BDLElBQUksQ0FBQyxVQUFVO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsSUFBSSxTQUFTLGdDQUFnQyxNQUFNLGNBQWMsV0FBVztBQUFBLElBQzVFLEtBQUssUUFBUSxNQUFNLFFBQVMsQ0FBQyxTQUFPLFFBQVE7QUFBQSxNQUMxQyxTQUFTLFNBQU8sTUFBTTtBQUFBLEtBQ3ZCO0FBQUE7QUFBQSxFQUdILFNBQVMsaUJBQWlCLEdBQUc7QUFBQSxJQUMzQixNQUFNLHFCQUFxQixHQUFHLFdBQVcsOENBQThDO0FBQUEsSUFDdkYsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLGtEQUFrRDtBQUFBLElBQ3ZGLE1BQU0sY0FBYyxHQUFHLFdBQVcsMkJBQTJCO0FBQUEsSUFDN0QsT0FBUSxzQkFBc0IsZUFBZTtBQUFBO0FBQUEsRUFHL0MsU0FBUyxXQUFXLEdBQUc7QUFBQSxJQUNyQixNQUFNLFFBQU8sUUFBUSxPQUFPO0FBQUEsSUFDNUIsSUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFJLEtBQUssTUFBSyxXQUFXLEdBQUc7QUFBQSxNQUM3QyxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsT0FBTyxDQUFDLE1BQUssS0FBSyxNQUFNLENBQUMsTUFBSztBQUFBO0FBQUEsRUFHaEMsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLGNBQWM7QUFBQSxJQUM3QyxlQUFlLGdCQUFnQjtBQUFBLElBQy9CLE1BQU0sY0FBYyxDQUFDO0FBQUEsSUFDckIsTUFBTSxRQUFRLFVBQVE7QUFBQSxNQUNwQixJQUFJLEtBQUssV0FBVyxZQUFZLEdBQUc7QUFBQSxRQUNqQyxJQUFJLFlBQVksUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUFBLFVBQ3BDLFlBQVksS0FBSyxJQUFJO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsS0FDRDtBQUFBLElBQ0QsT0FBTyxZQUFZO0FBQUE7QUFBQSxFQUdyQixTQUFTLFVBQVUsQ0FBQyxPQUFPLGNBQWM7QUFBQSxJQUN2QyxlQUFlLGdCQUFnQjtBQUFBLElBQy9CLE1BQU0sY0FBYyxDQUFDO0FBQUEsSUFDckIsTUFBTSxRQUFRLFVBQVE7QUFBQSxNQUNwQixJQUFJLEtBQUssV0FBVyxZQUFZLEdBQUc7QUFBQSxRQUNqQyxZQUFZLEtBQUssSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsS0FDRDtBQUFBLElBQ0QsT0FBTyxZQUFZO0FBQUE7QUFBQSxFQUdyQixTQUFTLG1CQUFtQixDQUFDLEtBQUssUUFBUTtBQUFBLElBQ3hDLElBQUksT0FBTyxXQUFXLGFBQWE7QUFBQSxNQUFFLFNBQVM7QUFBQSxJQUFPO0FBQUEsSUFDckQsTUFBTSxLQUFJLE9BQU87QUFBQSxJQUNqQixJQUFJLFNBQVM7QUFBQSxJQUNiLE1BQU0sSUFBSSxRQUFRLEdBQUUsUUFBUSxJQUFJO0FBQUEsSUFDaEMsU0FBUyxJQUFJLEVBQUcsS0FBSyxHQUFHLEtBQUs7QUFBQSxNQUMzQixJQUFJLEVBQUUsR0FBRSxPQUFPLGFBQ2IsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLFlBQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLE9BQ1QsR0FBRSxPQUFPLFFBQ1QsR0FBRSxPQUFPLFFBQ1QsR0FBRSxPQUFPO0FBQUEsS0FDVCxHQUFFLE9BQU8sUUFDVCxHQUFFLE9BQU8sT0FDVCxHQUFFLE9BQU8sT0FDVCxHQUFFLE9BQU8sT0FDVCxHQUFFLEdBQUcsU0FBUyxLQUNiLFVBQVUsR0FBRSxPQUFPLE9BQ25CLFVBQVUsR0FBRSxPQUFPLE9BQ25CLFVBQVUsR0FBRSxPQUFPLE9BQ25CLFVBQVUsR0FBRSxPQUFPLE9BQ25CLFVBQVUsR0FBRSxNQUFNLE9BQ2xCLFVBQVUsR0FBRSxNQUFNLE9BQ2xCLFVBQVUsR0FBRSxNQUFNLE1BQU87QUFBQSxRQUMxQixTQUFTLFNBQVMsR0FBRTtBQUFBLE1BQ3RCO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsRUFHVCxTQUFTLG1CQUFtQixHQUFHO0FBQUEsSUFDN0IsTUFBTSxLQUFJO0FBQUEsSUFDVixJQUFJLGNBQWM7QUFBQSxJQUNsQixJQUFJLEtBQUs7QUFBQSxJQUVULEdBQUcsVUFBVSxVQUFVO0FBQUEsSUFDdkIsR0FBRyxVQUFVLGNBQWM7QUFBQSxJQUMzQixHQUFHLFVBQVUsV0FBVztBQUFBLElBQ3hCLEdBQUcsVUFBVSxTQUFTO0FBQUEsSUFFdEIsY0FBYyxlQUFnQixHQUFFLFdBQVc7QUFBQSxJQUMzQyxNQUFNLEtBQUssS0FBSyxJQUFJO0FBQUEsSUFDcEIsSUFBSSxPQUFPLE9BQU8sWUFBWSxLQUFLLGVBQWU7QUFBQSxNQUNoRCxNQUFNLElBQUksS0FBSyxNQUFNO0FBQUEsTUFDckIsU0FBUyxJQUFJLEVBQUcsSUFBSSxHQUFHLEtBQUs7QUFBQSxRQUMxQixNQUFNLElBQUksS0FBSyxPQUFPLElBQUksY0FBYztBQUFBLFFBQ3hDLE1BQU0sS0FBSyxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsU0FBUyxHQUFHLEVBQUU7QUFBQSxRQUNoRCxNQUFNLE1BQU0sU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFBQSxRQUNuRCxNQUFNLElBQUksS0FBSyxPQUFPLElBQUksY0FBYztBQUFBLFFBQ3hDLE1BQU0sS0FBSyxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsU0FBUyxHQUFHLEVBQUU7QUFBQSxRQUNoRCxNQUFNLE1BQU0sU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFBQSxRQUNuRCxjQUFjLGVBQWdCLE1BQU07QUFBQSxRQUNwQyxjQUFjLGVBQWUsT0FBTyxPQUFPLE9BQU87QUFBQSxRQUNsRCxNQUFNLEdBQUUsS0FBSztBQUFBLE1BQ2Y7QUFBQSxNQUNBLGNBQWMsZUFBZSxHQUFHLFdBQVc7QUFBQSxNQUUzQyxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSTtBQUFBLE1BQzVCLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxJQUFJO0FBQUEsTUFDbkQsSUFBSSxVQUFVLFVBQVU7QUFBQSxNQUN4QixJQUFJLE1BQU0sSUFBSSxRQUFRLE1BQU0sRUFBRTtBQUFBLE1BQzlCLGNBQWMsZUFBZSxPQUFPO0FBQUEsTUFDcEMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJO0FBQUEsTUFDeEIsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxJQUFJO0FBQUEsTUFDL0MsTUFBTSxJQUFJLFFBQVEsTUFBTSxFQUFFO0FBQUEsTUFDMUIsY0FBYyxlQUFlLE9BQU87QUFBQSxNQUNwQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUk7QUFBQSxNQUN4QixNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUk7QUFBQSxNQUMvQyxNQUFNLElBQUksUUFBUSxPQUFPLEVBQUU7QUFBQSxNQUMzQixjQUFjLGVBQWUsT0FBTztBQUFBLE1BQ3BDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSTtBQUFBLE1BQ3hCLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSTtBQUFBLE1BQy9DLE1BQU0sSUFBSSxRQUFRLE9BQU8sRUFBRTtBQUFBLE1BQzNCLGNBQWMsZUFBZSxPQUFPO0FBQUEsTUFHcEMsTUFBTSxNQUFNLEdBQUcsWUFBWTtBQUFBLE1BQzNCLGNBQWMsZUFBZ0IsSUFBSSxXQUFXLEtBQU0sSUFBSSxJQUFJLE1BQU0sQ0FBRSxJQUFJO0FBQUEsTUFDdkUsU0FBUyxJQUFJLEVBQUcsSUFBSSxHQUFHLEtBQUs7QUFBQSxRQUMxQixNQUFNLEtBQUssR0FBRztBQUFBLFFBQ2QsR0FBRyxVQUFVLGNBQWM7QUFBQSxRQUMzQixNQUFNLE1BQUssTUFBTSxJQUFJLEtBQUs7QUFBQSxRQUMxQixNQUFNLE1BQU0sR0FBRyxZQUFZO0FBQUEsUUFDM0IsY0FBYyxlQUFlLElBQUksT0FBTyxPQUFNLElBQUksTUFBTSxDQUFFLElBQUk7QUFBQSxNQUNoRTtBQUFBLElBQ0Y7QUFBQSxJQUNBLE9BQU8sQ0FBQztBQUFBO0FBQUEsRUFHVixTQUFTLE9BQU8sQ0FBQyxNQUFLO0FBQUEsSUFDcEIsUUFBUSxhQUFjLFNBQVMsTUFBSyxFQUFFLEVBQUcsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQUE7QUFBQSxFQUdqRSxTQUFTLGNBQWMsQ0FBQyxRQUFRO0FBQUEsSUFDOUIsTUFBTSxZQUFZLEdBQUc7QUFBQSxJQUNyQixNQUFNLGNBQWMsR0FBRztBQUFBLElBQ3ZCLE1BQU0sUUFBTyxLQUFLO0FBQUEsSUFFbEIsU0FBUyxXQUFXLENBQUMsU0FBUTtBQUFBLE1BQzNCLE9BQU8sVUFBVSxPQUFNLEVBQUUsWUFBWTtBQUFBO0FBQUEsSUFFdkMsU0FBUyxNQUFNLENBQUMsU0FBUTtBQUFBLE1BQUUsT0FBTyxVQUFVLE9BQU0sRUFBRSxPQUFPO0FBQUE7QUFBQSxJQUUxRCxTQUFTLGNBQWMsQ0FBQyxTQUFRO0FBQUEsTUFDOUIsT0FBTyxZQUFZLE9BQU0sRUFBRSxJQUFJLFFBQVMsQ0FBQyxNQUFNO0FBQUEsUUFBRSxPQUFPLE1BQUssU0FBUSxJQUFJO0FBQUEsT0FBSSxFQUFFLE9BQU8sV0FBVztBQUFBO0FBQUEsSUFFbkcsU0FBUyxRQUFRLENBQUMsU0FBUTtBQUFBLE1BQ3hCLE9BQU8sWUFBWSxPQUFNLEVBQUUsSUFBSSxRQUFTLENBQUMsTUFBTTtBQUFBLFFBQUUsT0FBTyxNQUFLLFNBQVEsSUFBSTtBQUFBLE9BQUksRUFBRSxPQUFPLE1BQU07QUFBQTtBQUFBLElBRzlGLFNBQVMsbUJBQW1CLENBQUMsU0FBUTtBQUFBLE1BQ25DLElBQUk7QUFBQSxRQUNGLElBQUksT0FBTyxlQUFlLE9BQU07QUFBQSxRQUNoQyxJQUFJLFFBQVEsS0FDVCxJQUFJLFFBQVMsQ0FBQyxLQUFLO0FBQUEsVUFBRSxPQUFPLG9CQUFvQixHQUFHO0FBQUEsU0FBSSxFQUN2RCxPQUFPLFFBQVMsQ0FBQyxHQUFHLEdBQUc7QUFBQSxVQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7QUFBQSxXQUFNLENBQUMsQ0FBQztBQUFBLFFBQ3JELE9BQU8sTUFBTSxPQUFPLFNBQVMsT0FBTSxDQUFDO0FBQUEsUUFDcEMsT0FBTyxHQUFHO0FBQUEsUUFDVixPQUFPLENBQUM7QUFBQTtBQUFBO0FBQUEsSUFJWixJQUFJLEdBQUcsV0FBVyxNQUFNLEdBQUc7QUFBQSxNQUN6QixPQUFPLG9CQUFvQixNQUFNO0FBQUEsSUFDbkMsRUFBTztBQUFBLE1BQ0wsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBLEVBSVosU0FBUyxlQUFlLENBQUMsT0FBTztBQUFBLElBRTlCLElBQUksaUJBQWlCLE1BQU07QUFBQSxNQUN6QixlQUFlO0FBQUEsSUFDakI7QUFBQSxJQUlBLE1BQU0sbUJBQW1CO0FBQUEsTUFDdkIsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2I7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxRQUFRO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2I7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxRQUFRO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2I7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxRQUFRO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2I7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxRQUFRO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2I7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxRQUFRO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsUUFDZCxXQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLFFBQ1IsY0FBYztBQUFBLFFBQ2QsV0FBVztBQUFBLE1BQ2I7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxRQUNSLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxNQUNiO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBTSxnQkFBZ0I7QUFBQSxNQUNwQjtB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QUEsSUFBTSxRQUFRO0FBQUEsSUFDdEIsUUFBUTtBQUFBLElBQU0sUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQ2hELFFBQVE7QUFBQSxJQUFNLFFBQVE7QUFBQSxJQUFLLFFBQVE7QUFBQSxJQUFLLFFBQVE7QUFBQSxJQUNoRCxRQUFRO0FBQUEsSUFBTSxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFDaEQsUUFBUTtBQUFBLElBQU0sUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQ2hELFFBQVE7QUFBQSxJQUFNLFFBQVE7QUFBQSxJQUN0QixRQUFRO0FBQUEsSUFBTSxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFDMUUsUUFBUTtBQUFBLElBQU0sUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQzFFLFFBQVE7QUFBQSxJQUFNLFFBQVE7QUFBQSxJQUFLLFFBQVE7QUFBQSxJQUFLLFFBQVE7QUFBQSxJQUNoRCxRQUFRO0FBQUEsSUFBTSxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFBSyxRQUFRO0FBQUEsSUFDaEQsUUFBUTtBQUFBLElBQU0sUUFBUTtBQUFBLElBQUssUUFBUTtBQUFBLElBQ25DLFFBQVE7QUFBQSxJQUFNLFFBQVE7QUFBQSxJQUN0QixRQUFRO0FBQUEsSUFBTSxRQUFRO0FBQUEsSUFDdEIsUUFBUTtBQUFBLElBRVIsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN6QyxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDeEQsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3hELFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN4RCxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDdkUsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3ZFLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN4RCxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDeEQsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3hELFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN2RSxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDdkUsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQzFCLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN6QyxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDdkUsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3ZFLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN4RCxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDeEQsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN6QyxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDekMsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN4RCxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDeEQsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN6QyxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDdEYsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3RGLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUMxQixVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFBSyxVQUFVO0FBQUEsSUFDekMsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQUssVUFBVTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxJQUFLLFVBQVU7QUFBQSxJQUN6QyxVQUFVO0FBQUEsSUFBTSxVQUFVO0FBQUEsSUFDMUIsVUFBVTtBQUFBLElBQU0sVUFBVTtBQUFBLElBQzFCLFVBQVU7QUFBQSxJQUFNLFVBQVU7QUFBQSxFQUM1QjtBQUFBLEVBR0EsSUFBSSxhQUFh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TUFBTSxTQUFTLE9BQU8sU0FBUyxNQUFNO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFBLFFBQUs7QUFBQSxRQUFHO0FBQUEsUUFFOUI7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFHO0FBQUEsUUFFOUI7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFHO0FBQUEsUUFFOUI7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFHO0FBQUEsUUFFOUI7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFHO0FBQUEsUUFFN0M7QUFBQSxRQUFJO0FBQUEsUUFBSztBQUFBLFFBQUc7QUFBQSxRQUVaO0FBQUEsUUFBRztBQUFBLFFBQUc7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBRWI7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFDaEU7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUs7QUFBQSxRQUFJO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUNoRTtBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBRVo7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFDaEU7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUs7QUFBQSxRQUFJO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUNoRTtBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBRVo7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFDaEU7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUs7QUFBQSxRQUFJO0FBQUEsUUFBSTtBQUFBLFFBQUs7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUNoRTtBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFBSztBQUFBLFFBRVo7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUc7QUFBQSxRQUFLO0FBQUEsUUFBSTtBQUFBLFFBQUk7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUk7QUFBQSxRQUFHO0FBQUEsUUFDaEU7QUFBQSxRQUFJO0FBQUEsUUFBRztBQUFBLFFBQUs7QUFBQSxRQUFJ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O0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFDQztBQUFBLHFCQUNBO0FBQUEsa0JBQ0QsUUFBUSxpQkFBaUI7QUFBQSxrQkFDekI7QUFBQSxxQkFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ3JNWCxPQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNwRCx3QkFBcUI7QUFBQSxFQUM3QixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNO0FBQUEsRUFDTixJQUFNLG9CQUFvQjtBQUFBLEVBQzFCLElBQU0sbUJBQW1CLG9CQUFvQixVQUFVLDJDQUEyQyxVQUFVO0FBQUEsRUFDNUcsSUFBTSxVQUFVO0FBQUEsSUFDWiwyQkFBMkI7QUFBQSxFQUMvQjtBQUFBO0FBQUEsRUFJQSxNQUFNLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxzQkFBc0I7QUFBQSxJ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UTtBQUFBLE1BQUssUUFBUTtBQUFBLE1BQzFFLFFBQVE7QUFBQSxNQUFNLFFBQVE7QUFBQSxNQUFLLFFBQVE7QUFBQSxNQUFLLFFBQVE7QUFBQSxNQUNoRCxRQUFRO0FBQUEsTUFBTSxRQUFRO0FBQUEsTUFBSyxRQUFRO0FBQUEsTUFBSyxRQUFRO0FBQUEsTUFDaEQsUUFBUTtBQUFBLE1BQU0sUUFBUTtBQUFBLE1BQUssUUFBUTtBQUFBLE1BQ25DLFFBQVE7QUFBQSxNQUFNLFFBQVE7QUFBQSxNQUN0QixRQUFRO0FBQUEsTUFBTSxRQUFRO0FBQUEsTUFDdEIsUUFBUTtBQUFBLE1BRVIsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3pDLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN6QyxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDeEQsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3hELFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN4RCxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDdkUsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3ZFLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN4RCxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDeEQsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3hELFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN2RSxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDdkUsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQzFCLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN6QyxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDdkUsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3ZFLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN4RCxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDeEQsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3pDLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN6QyxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDekMsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3pDLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN4RCxVQUFVO0FBQUEsTUFBTSxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFBSyxVQUFVO0FBQUEsTUFDeEQsVUFBVTtBQUFBLE1BQU0sVUFBVTtBQUFBLE1BQUssVUFBVTtBQUFBLE1BQ3pDLFVBQVU7QUFBQSxNQUFNLFVBQVU7QUFBQSxNQUFLLFVBQVU7QUFBQSxNQUN6QyxVQUFVO0FBQUEsTUFBTSxV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QUksSUFBSSxVQUFVLFdBQVc7QUFBQSxFQUM3QixLQUFJLElBQUksU0FBUyxXQUFXO0FBQUEsRUFDNUIsS0FBSSxJQUFJLFVBQVUsV0FBVztBQUFBLEVBQzdCLEtBQUksSUFBSSxVQUFVLFdBQVc7QUFDOUI7QUFHQSxNQUFRLFNBQVMsYUFBYTtBQUM5QixLQUFJLE1BQU0sUUFBUSxRQUFRO0FBRTFCLElBQU0scUJBQXFCO0FBQzNCLElBQU0sZUFBZSxjQUFjLEtBQUs7QUFDeEMsSUFBSSxjQUFjO0FBQUEsRUFFakIsTUFBTSxrQkFBa0Isc0JBQXNCO0FBQUEsRUFDOUMsS0FBSSxNQUFNLEtBQUssZUFBZTtBQUMvQjtBQUVBLElBQUksY0FBYztBQUFBLEVBRWpCLElBQUksY0FBYyxHQUFHO0FBQUEsSUFDcEIsTUFBTSxrQkFBa0IsWUFBWSxNQUFNO0FBQUEsSUFDMUMsTUFBTSxxQkFBcUIsWUFBWSxNQUFNO0FBQUEsSUFDN0MsS0FBSSxJQUFJLGNBQWMsT0FBTyxNQUFlO0FBQUEsTUFDM0MsTUFBTSxPQUFPLE1BQU0sSUFBSSxLQUFLLGtCQUFrQixFQUFFLEtBQUs7QUFBQSxNQUVyRCxNQUFNLFdBQVcsS0FDZixRQUFRLG9CQUFvQixZQUFZLDJCQUEyQixFQUNuRSxRQUFRLHVCQUF1QixhQUFhLDZCQUE2QjtBQUFBLE1BQzNFLE9BQU8sRUFBRSxLQUFLLFFBQVE7QUFBQSxLQUN0QjtBQUFBLEVBQ0YsRUFBTztBQUdSO0FBR0EsTUFBTSxlQUFlLFFBQVE7QUFHN0IsSUFBSSxPQUFPLFFBQVEsYUFBYTtBQUFBLEVBRS9CLDRCQUE0QjtBQUFBLEVBRTVCLE1BQU0sT0FBTyxTQUFTLFFBQVEsSUFBSSxRQUFRLFFBQVEsRUFBRTtBQUFBLEVBQ3BELE1BQU0sU0FBUyxJQUFJLE1BQU07QUFBQSxJQUN4QixPQUFPLENBQUMsS0FBSyxZQUFXO0FBQUEsTUFFdkIsUUFBTyxRQUFRLEtBQUssYUFBYSxHQUFHLGtCQUFrQixDQUFDO0FBQUEsTUFDdkQsT0FBTyxLQUFJLE1BQU0sS0FBSyxPQUFNO0FBQUE7QUFBQSxJQUU3QjtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLGFBQWEsY0FBYztBQUFBLEVBQzVCLENBQUM7QUFBQSxFQUlBLFdBQW1CLHVCQUF1QjtBQUFBLEVBRTNDLEtBQUssT0FBTyxLQUFLLHdDQUF3QyxNQUFNO0FBQUEsRUFDL0QsSUFBSSxjQUFjLEtBQUssUUFBUSxJQUFJLFdBQVc7QUFBQSxJQUM3QyxLQUFLLE9BQU8sTUFBTSxrQ0FBa0MsUUFBUSxJQUFJLFdBQVc7QUFBQSxFQUM1RTtBQUNEOyIsCiAgImRlYnVnSWQiOiAiOUJBOUY0NkFCQURGOTRGNDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0= diff --git a/apps/testing/nextjs-app/agentuity/agentuity.config.ts b/apps/testing/nextjs-app/agentuity/agentuity.config.ts deleted file mode 100644 index 08064738e..000000000 --- a/apps/testing/nextjs-app/agentuity/agentuity.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { AgentuityConfig } from '@agentuity/cli'; - -const config: AgentuityConfig = { - workbench: { - enabled: false, - }, -}; - -export default config; diff --git a/apps/testing/nextjs-app/agentuity/app.ts b/apps/testing/nextjs-app/agentuity/app.ts deleted file mode 100644 index 23945472d..000000000 --- a/apps/testing/nextjs-app/agentuity/app.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from '@agentuity/runtime'; -import router from './src/api/index'; - -const app = await createApp({ - router: { path: '/api', router }, -}); - -console.log(`[NextJS-App] Agentuity server started: ${app.server.url}`); - -export default app; diff --git a/apps/testing/nextjs-app/agentuity/package.json b/apps/testing/nextjs-app/agentuity/package.json deleted file mode 100644 index e58a6575c..000000000 --- a/apps/testing/nextjs-app/agentuity/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "nextjs-app-agentuity", - "version": "0.0.1", - "private": true, - "type": "module", - "scripts": { - "dev": "bun ../../../../packages/cli/bin/cli.ts dev --dir .", - "build": "bun ../../../../packages/cli/bin/cli.ts build --dir . --dev", - "typecheck": "bunx tsc --noEmit" - }, - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.7.13" - }, - "devDependencies": { - "@types/bun": "latest", - "@vitejs/plugin-react": "^4.5.2", - "typescript": "^5", - "vite": "^7.2.7" - } -} diff --git a/apps/testing/nextjs-app/agentuity/src/agent/AGENTS.md b/apps/testing/nextjs-app/agentuity/src/agent/AGENTS.md deleted file mode 100644 index fdac99f59..000000000 --- a/apps/testing/nextjs-app/agentuity/src/agent/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/agent/AGENTS.md](../../.agents/agentuity/sdk/agent/AGENTS.md) for Agentuity agent development guidelines. diff --git a/apps/testing/nextjs-app/agentuity/src/agent/echo/agent.ts b/apps/testing/nextjs-app/agentuity/src/agent/echo/agent.ts deleted file mode 100644 index 4f8dc563a..000000000 --- a/apps/testing/nextjs-app/agentuity/src/agent/echo/agent.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const echoAgent = createAgent('echo', { - description: 'Echoes back the input message with a timestamp', - schema: { - input: s.object({ - message: s.string(), - }), - output: s.object({ - echo: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, input) => { - ctx.logger.info('Echo agent received message', { message: input.message }); - - return { - echo: input.message, - timestamp: new Date().toISOString(), - }; - }, -}); - -export default echoAgent; diff --git a/apps/testing/nextjs-app/agentuity/src/api/AGENTS.md b/apps/testing/nextjs-app/agentuity/src/api/AGENTS.md deleted file mode 100644 index 9baa40cc7..000000000 --- a/apps/testing/nextjs-app/agentuity/src/api/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/api/AGENTS.md](../../.agents/agentuity/sdk/api/AGENTS.md) for Agentuity api development guidelines. diff --git a/apps/testing/nextjs-app/agentuity/src/api/index.ts b/apps/testing/nextjs-app/agentuity/src/api/index.ts deleted file mode 100644 index e60916ee1..000000000 --- a/apps/testing/nextjs-app/agentuity/src/api/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Hono } from 'hono'; -import type { Env } from '@agentuity/runtime'; -import echoAgent from '@agents/echo/agent'; - -const router = new Hono() - .get('/health', (c) => { - return c.json({ status: 'ok', timestamp: new Date().toISOString() }); - }) - .post('/echo', echoAgent.validator(), async (c) => { - const input = c.req.valid('json'); - const result = await echoAgent.run(input); - return c.json(result); - }); - -export type ApiRouter = typeof router; - -export default router; diff --git a/apps/testing/nextjs-app/agentuity/tsconfig.json b/apps/testing/nextjs-app/agentuity/tsconfig.json deleted file mode 100644 index e6669c857..000000000 --- a/apps/testing/nextjs-app/agentuity/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./.agentuity", - "rootDir": ".", - "allowImportingTsExtensions": true, - "noEmit": true, - "jsx": "react-jsx", - "lib": ["ESNext", "DOM"], - "types": ["bun-types"], - "skipLibCheck": true, - "paths": { - "@agents/*": ["./src/agent/*"] - } - }, - "include": ["src/**/*", "app.ts", ".agentuity/.agentuity_types.ts"], - "exclude": ["node_modules", ".agentuity", "src/generated/routes.ts"] -} diff --git a/apps/testing/nextjs-app/app/api/echo/route.ts b/apps/testing/nextjs-app/app/api/echo/route.ts new file mode 100644 index 000000000..11653d765 --- /dev/null +++ b/apps/testing/nextjs-app/app/api/echo/route.ts @@ -0,0 +1,9 @@ +import { NextResponse } from 'next/server'; + +export async function POST(request: Request) { + const body = await request.json(); + return NextResponse.json({ + echo: body, + receivedAt: new Date().toISOString(), + }); +} diff --git a/apps/testing/nextjs-app/app/api/health/route.ts b/apps/testing/nextjs-app/app/api/health/route.ts new file mode 100644 index 000000000..584574db5 --- /dev/null +++ b/apps/testing/nextjs-app/app/api/health/route.ts @@ -0,0 +1,8 @@ +import { NextResponse } from 'next/server'; + +export async function GET() { + return NextResponse.json({ + status: 'ok', + timestamp: new Date().toISOString(), + }); +} diff --git a/apps/testing/nextjs-app/app/components/EchoDemo.tsx b/apps/testing/nextjs-app/app/components/EchoDemo.tsx deleted file mode 100644 index 311dacf49..000000000 --- a/apps/testing/nextjs-app/app/components/EchoDemo.tsx +++ /dev/null @@ -1,417 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import { AgentuityProvider } from '@agentuity/react'; -import { hc } from 'hono/client'; -import type { ApiRouter } from '../../agentuity/src/api/index'; - -const client = hc('/api'); - -function AgentuityLogo() { - return ( - - ); -} - -function NextJsLogo() { - return ( - - ); -} - -function EchoDemoInner() { - const [message, setMessage] = useState('Hello from Next.js!'); - const [data, setData] = useState<{ echo: string; timestamp: string } | null>(null); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - - const invoke = async (input: { message: string }) => { - setIsLoading(true); - setError(null); - try { - const res = await client.echo.$post({ json: input }); - if (!res.ok) { - throw new Error(`Echo request failed with ${res.status}`); - } - setData(await res.json()); - } catch (e) { - setError(e instanceof Error ? e : new Error(String(e))); - } finally { - setIsLoading(false); - } - }; - - return ( -
-
-
-
- - + - -
- -

Agentuity + Next.js

-

End-to-end type-safe API integration demo

-
- -
-

- Try the Echo Agent -

- -
- setMessage(e.target.value)} - placeholder="Enter a message..." - type="text" - value={message} - /> - -
-
-
- -
-
- - {error &&
Error: {error.message}
} - -
- {data ? ( - <> -
- Echo: {data.echo} -
-
- Timestamp: {data.timestamp} -
- - ) : ( - 'Waiting for request' - )} -
-
- -
-

Type Safety Demo

-
- {`const client = hc('/api'); -const res = await client.echo.$post({ json: { message } }); -const data = await res.json(); -// TypeScript knows: data.echo, data.timestamp`} -
-
-
- - -
- ); -} - -export default function EchoDemo() { - return ( - - - - ); -} diff --git a/apps/testing/nextjs-app/app/layout.tsx b/apps/testing/nextjs-app/app/layout.tsx index 25764fb20..b6f0dfc8c 100644 --- a/apps/testing/nextjs-app/app/layout.tsx +++ b/apps/testing/nextjs-app/app/layout.tsx @@ -1,18 +1,7 @@ -import type { Metadata } from 'next'; - -export const metadata: Metadata = { - title: 'Agentuity + Next.js Demo', - description: 'End-to-end type-safe Agentuity integration with Next.js', -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { +export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - {children} + {children} ); } diff --git a/apps/testing/nextjs-app/app/page.tsx b/apps/testing/nextjs-app/app/page.tsx index 25d550f5a..815c200b5 100644 --- a/apps/testing/nextjs-app/app/page.tsx +++ b/apps/testing/nextjs-app/app/page.tsx @@ -1,9 +1,8 @@ -import EchoDemo from './components/EchoDemo'; - export default function Home() { return (
- +

Next.js on Agentuity

+

A plain Next.js app deployed through the Agentuity buildpack pipeline.

); } diff --git a/apps/testing/nextjs-app/next-env.d.ts b/apps/testing/nextjs-app/next-env.d.ts deleted file mode 100644 index 830fb594c..000000000 --- a/apps/testing/nextjs-app/next-env.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/testing/nextjs-app/next.config.ts b/apps/testing/nextjs-app/next.config.ts index 5d65a9308..9d01920c8 100644 --- a/apps/testing/nextjs-app/next.config.ts +++ b/apps/testing/nextjs-app/next.config.ts @@ -1,18 +1,6 @@ -import type { NextConfig } from 'next'; -import { join } from 'path'; - -const nextConfig: NextConfig = { - // Set workspace root to suppress lockfile detection warning - outputFileTracingRoot: join(__dirname, '../../../..'), - - async rewrites() { - return [ - { - source: '/api/:path*', - destination: 'http://localhost:3501/api/:path*', - }, - ]; - }, +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: 'standalone', }; export default nextConfig; diff --git a/apps/testing/nextjs-app/package.json b/apps/testing/nextjs-app/package.json index e6a3943c9..9293f3213 100644 --- a/apps/testing/nextjs-app/package.json +++ b/apps/testing/nextjs-app/package.json @@ -1,16 +1,14 @@ { "name": "nextjs-app", "version": "0.0.1", + "license": "Apache-2.0", "private": true, - "type": "module", "scripts": { - "dev": "concurrently -n web,agent -c blue,cyan \"bun run dev:web\" \"bun run dev:agent\"", - "dev:web": "next dev --port 3001", - "dev:agent": "cd agentuity && bun ../../../../packages/cli/bin/cli.ts dev --dir . --port 3501", - "build": "concurrently \"bun run build:web\" \"bun run build:agent\"", - "build:web": "next build", - "build:agent": "cd agentuity && bun ../../../../packages/cli/bin/cli.ts build --dir . --dev", - "typecheck": "tsc --noEmit" + "dev": "next dev --port 3000", + "build": "next build", + "start": "next start", + "test": "bun test", + "typecheck": "bunx tsc --noEmit" }, "dependencies": { "@agentuity/react": "workspace:*", @@ -22,10 +20,9 @@ "react-dom": "^19.2.0" }, "devDependencies": { - "@types/node": "^22.10.2", + "@types/bun": "latest", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", - "concurrently": "^9.2.1", - "typescript": "^5.7.2" + "typescript": "^5" } } diff --git a/apps/testing/nextjs-app/test/index.test.ts b/apps/testing/nextjs-app/test/index.test.ts new file mode 100644 index 000000000..178e7baf8 --- /dev/null +++ b/apps/testing/nextjs-app/test/index.test.ts @@ -0,0 +1,38 @@ +import { describe, test, expect } from 'bun:test'; + +describe('nextjs-app', () => { + // Next.js apps can't be tested with direct fetch like Hono. + // These verify the project structure is correct for the buildpack pipeline. + + test('next.config.ts exists and exports standalone', async () => { + const config = await import('../next.config.ts'); + expect(config.default.output).toBe('standalone'); + }); + + test('app/layout.tsx exists', async () => { + const layout = await import('../app/layout.tsx'); + expect(layout.default).toBeDefined(); + }); + + test('app/page.tsx exists', async () => { + const page = await import('../app/page.tsx'); + expect(page.default).toBeDefined(); + }); +}); + +describe.skip('deploy', () => { + test('agentuity build detects Next.js and produces standalone output', async () => { + // TODO: Run `agentuity build`, verify: + // - launch.json has framework.name === 'nextjs' + // - launch.json has processes[0].command containing 'node server.js' + // - .next/standalone/ exists + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify the app is reachable + }); + + test('deployed app serves pages and API routes', async () => { + // TODO: Hit /, /api/health, /api/echo + }); +}); diff --git a/apps/testing/nextjs-app/tsconfig.json b/apps/testing/nextjs-app/tsconfig.json index 533a91961..00f52a495 100644 --- a/apps/testing/nextjs-app/tsconfig.json +++ b/apps/testing/nextjs-app/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES2022", + "target": "ES2017", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -13,16 +13,9 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"], - "@agentuity/routes": ["./agentuity/src/generated/routes.ts"] - } + "plugins": [{ "name": "next" }], + "paths": { "@/*": ["./*"] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules", "agentuity"] + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "test"] } diff --git a/apps/testing/oauth/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/oauth/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index e6c32b3fb..000000000 --- a/apps/testing/oauth/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,367 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with strongly-typed route definitions and schema types -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your routes: - -```typescript -import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes'; -``` - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import myAgent from '@agent/my-agent'; - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse((c, stream) => { - stream.writeSSE({ data: 'Hello', event: 'message' }); - stream.writeSSE({ data: 'World', event: 'message' }); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/oauth/.agents/agentuity/sdk/web/AGENTS.md b/apps/testing/oauth/.agents/agentuity/sdk/web/AGENTS.md deleted file mode 100644 index 2a6eb0da5..000000000 --- a/apps/testing/oauth/.agents/agentuity/sdk/web/AGENTS.md +++ /dev/null @@ -1,511 +0,0 @@ -# Web Folder Guide - -This folder contains your React-based web application that communicates with your Agentuity agents. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with type-safe API, WebSocket, and SSE route definitions -- `registry.ts` - Agent registry with input/output types - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your components: - -```typescript -// Routes are typed automatically via module augmentation -import { useAPI } from '@agentuity/react'; - -// The route 'GET /api/users' is fully typed -const { data } = useAPI('GET /api/users'); -``` - -## Directory Structure - -Required files: - -- **App.tsx** (required) - Main React application component -- **frontend.tsx** (required) - Frontend entry point with client-side rendering -- **index.html** (required) - HTML template -- **public/** (optional) - Static assets (images, CSS, JS files) - -Example structure: - -``` -src/web/ -├── App.tsx -├── frontend.tsx -├── index.html -└── public/ - ├── styles.css - ├── logo.svg - └── script.js -``` - -## Creating the Web App - -### App.tsx - Main Component - -```typescript -import { AgentuityProvider, useAPI } from '@agentuity/react'; -import { useState } from 'react'; - -function HelloForm() { - const [name, setName] = useState('World'); - const { invoke, isLoading, data: greeting } = useAPI('POST /api/hello'); - - return ( -
- setName(e.target.value)} - disabled={isLoading} - /> - - - -
{greeting ?? 'Waiting for response'}
-
- ); -} - -export function App() { - return ( - -
-

Welcome to Agentuity

- -
-
- ); -} -``` - -### frontend.tsx - Entry Point - -```typescript -import { createRoot } from 'react-dom/client'; -import { App } from './App'; - -const root = document.getElementById('root'); -if (!root) throw new Error('Root element not found'); - -createRoot(root).render(); -``` - -### index.html - HTML Template - -```html - - - - - - My Agentuity App - - -
- - - -``` - -## React Hooks - -All hooks from `@agentuity/react` must be used within an `AgentuityProvider`. **Always use these hooks instead of raw `fetch()` calls** - they provide type safety, automatic error handling, and integration with the Agentuity platform. - -### useAPI - Type-Safe API Calls - -The primary hook for making HTTP requests. **Use this instead of `fetch()`.** - -```typescript -import { useAPI } from '@agentuity/react'; - -function MyComponent() { - // GET requests auto-execute and return refetch - const { data, isLoading, error, refetch } = useAPI('GET /api/users'); - - // POST/PUT/DELETE return invoke for manual execution - const { invoke, data: result, isLoading: saving } = useAPI('POST /api/users'); - - const handleCreate = async () => { - // Input is fully typed from route schema! - await invoke({ name: 'Alice', email: 'alice@example.com' }); - }; - - return ( -
- - {result &&

Created: {result.name}

} -
- ); -} -``` - -**useAPI Return Values:** - -| Property | Type | Description | -| ------------ | ------------------------ | ----------------------------------------- | -| `data` | `T \| undefined` | Response data (typed from route schema) | -| `error` | `Error \| null` | Error if request failed | -| `isLoading` | `boolean` | True during initial load | -| `isFetching` | `boolean` | True during any fetch (including refetch) | -| `isSuccess` | `boolean` | True if last request succeeded | -| `isError` | `boolean` | True if last request failed | -| `invoke` | `(input?) => Promise` | Manual trigger (POST/PUT/DELETE) | -| `refetch` | `() => Promise` | Refetch data (GET) | -| `reset` | `() => void` | Reset state to initial | - -### useAPI Options - -```typescript -// GET with query parameters and caching -const { data } = useAPI({ - route: 'GET /api/search', - query: { q: 'react', limit: '10' }, - staleTime: 5000, // Cache for 5 seconds - refetchInterval: 10000, // Auto-refetch every 10 seconds - enabled: true, // Set to false to disable auto-fetch -}); - -// POST with callbacks -const { invoke } = useAPI({ - route: 'POST /api/users', - onSuccess: (data) => console.log('Created:', data), - onError: (error) => console.error('Failed:', error), -}); - -// Streaming responses with onChunk -const { invoke } = useAPI({ - route: 'POST /api/stream', - onChunk: (chunk) => console.log('Received chunk:', chunk), - delimiter: '\n', // Split stream by newlines (default) -}); - -// Custom headers -const { data } = useAPI({ - route: 'GET /api/protected', - headers: { 'X-Custom-Header': 'value' }, -}); -``` - -### useWebsocket - WebSocket Connection - -For bidirectional real-time communication. Automatically handles reconnection. - -```typescript -import { useWebsocket } from '@agentuity/react'; - -function ChatComponent() { - const { isConnected, data, send, messages, clearMessages, error, reset } = useWebsocket('/api/chat'); - - return ( -
-

Status: {isConnected ? 'Connected' : 'Disconnected'}

- -
- {messages.map((msg, i) => ( -

{JSON.stringify(msg)}

- ))} -
- -
- ); -} -``` - -**useWebsocket Return Values:** - -| Property | Type | Description | -| --------------- | ---------------- | ---------------------------------------- | -| `isConnected` | `boolean` | True when WebSocket is connected | -| `data` | `T \| undefined` | Most recent message received | -| `messages` | `T[]` | Array of all received messages | -| `send` | `(data) => void` | Send a message (typed from route schema) | -| `clearMessages` | `() => void` | Clear the messages array | -| `close` | `() => void` | Close the connection | -| `error` | `Error \| null` | Error if connection failed | -| `isError` | `boolean` | True if there's an error | -| `reset` | `() => void` | Reset state and reconnect | -| `readyState` | `number` | WebSocket ready state | - -### useEventStream - Server-Sent Events - -For server-to-client streaming (one-way). Use when server pushes updates to client. - -```typescript -import { useEventStream } from '@agentuity/react'; - -function NotificationsComponent() { - const { isConnected, data, error, close, reset } = useEventStream('/api/notifications'); - - return ( -
-

Connected: {isConnected ? 'Yes' : 'No'}

- {error &&

Error: {error.message}

} -

Latest: {JSON.stringify(data)}

- -
- ); -} -``` - -**useEventStream Return Values:** - -| Property | Type | Description | -| ------------- | ---------------- | ---------------------------------- | -| `isConnected` | `boolean` | True when EventSource is connected | -| `data` | `T \| undefined` | Most recent event data | -| `error` | `Error \| null` | Error if connection failed | -| `isError` | `boolean` | True if there's an error | -| `close` | `() => void` | Close the connection | -| `reset` | `() => void` | Reset state and reconnect | -| `readyState` | `number` | EventSource ready state | - -### useAgentuity - Access Context - -Access the Agentuity context for base URL and configuration. - -```typescript -import { useAgentuity } from '@agentuity/react'; - -function MyComponent() { - const { baseUrl } = useAgentuity(); - - return

API Base: {baseUrl}

; -} -``` - -### useAuth - Authentication State - -Access and manage authentication state. - -```typescript -import { useAuth } from '@agentuity/react'; - -function AuthStatus() { - const { isAuthenticated, authHeader, setAuthHeader, authLoading } = useAuth(); - - const handleLogin = async (token: string) => { - setAuthHeader?.(`Bearer ${token}`); - }; - - const handleLogout = () => { - setAuthHeader?.(null); - }; - - if (authLoading) return

Loading...

; - - return ( -
- {isAuthenticated ? ( - - ) : ( - - )} -
- ); -} -``` - -**useAuth Return Values:** - -| Property | Type | Description | -| ----------------- | ------------------- | ------------------------------------------- | -| `isAuthenticated` | `boolean` | True if user has auth token and not loading | -| `authHeader` | `string \| null` | Current auth header (e.g., "Bearer ...") | -| `setAuthHeader` | `(token) => void` | Set auth header (null to clear) | -| `authLoading` | `boolean` | True during auth state changes | -| `setAuthLoading` | `(loading) => void` | Set auth loading state | - -## Complete Example - -```typescript -import { AgentuityProvider, useAPI, useWebsocket } from '@agentuity/react'; -import { useEffect, useState } from 'react'; - -function Dashboard() { - const [count, setCount] = useState(0); - const { invoke, data: agentResult } = useAPI('POST /api/process'); - const { isConnected, send, data: wsMessage } = useWebsocket('/api/live'); - - useEffect(() => { - if (isConnected) { - const interval = setInterval(() => { - send({ ping: Date.now() }); - }, 1000); - return () => clearInterval(interval); - } - }, [isConnected, send]); - - return ( -
-

My Agentuity App

- -
-

Count: {count}

- -
- -
- -

{JSON.stringify(agentResult)}

-
- -
- WebSocket: - {isConnected ? JSON.stringify(wsMessage) : 'Not connected'} -
-
- ); -} - -export function App() { - return ( - - - - ); -} -``` - -## Static Assets - -Place static files in the **public/** folder: - -``` -src/web/public/ -├── logo.svg -├── styles.css -└── script.js -``` - -Reference them in your HTML or components: - -```html - - - -``` - -```typescript -// In React components -Logo -``` - -## Styling - -### Inline Styles - -```typescript -
- Styled content -
-``` - -### CSS Files - -Create `public/styles.css`: - -```css -body { - background-color: #09090b; - color: #fff; - font-family: sans-serif; -} -``` - -Import in `index.html`: - -```html - -``` - -### Style Tag in Component - -```typescript -
- - -
-``` - -## RPC-Style API Client - -For non-React contexts (like utility functions or event handlers), use `createClient`: - -```typescript -import { createClient } from '@agentuity/react'; - -// Create a typed client (uses global baseUrl and auth from AgentuityProvider) -const api = createClient(); - -// Type-safe RPC-style calls - routes become nested objects -// Route 'GET /api/users' becomes api.users.get() -// Route 'POST /api/users' becomes api.users.post() -// Route 'GET /api/users/:id' becomes api.users.id.get({ id: '123' }) - -async function fetchData() { - const users = await api.users.get(); - const newUser = await api.users.post({ name: 'Alice', email: 'alice@example.com' }); - const user = await api.users.id.get({ id: '123' }); - return { users, newUser, user }; -} -``` - -**When to use `createClient` vs `useAPI`:** - -| Use Case | Recommendation | -| ------------------------- | -------------- | -| React component rendering | `useAPI` hook | -| Event handlers | Either works | -| Utility functions | `createClient` | -| Non-React code | `createClient` | -| Need loading/error state | `useAPI` hook | -| Need caching/refetch | `useAPI` hook | - -## Best Practices - -- Wrap your app with **AgentuityProvider** for hooks to work -- **Always use `useAPI` instead of `fetch()`** for type safety and error handling -- Use **useAPI** for type-safe HTTP requests (GET, POST, PUT, DELETE) -- Use **useWebsocket** for bidirectional real-time communication -- Use **useEventStream** for server-to-client streaming -- Use **useAuth** for authentication state management -- Handle loading and error states in UI -- Place reusable components in separate files -- Keep static assets in the **public/** folder - -## Rules - -- **App.tsx** must export a function named `App` -- **frontend.tsx** must render the `App` component to `#root` -- **index.html** must have a `
` -- Routes are typed via module augmentation from `src/generated/routes.ts` -- The web app is served at `/` by default -- Static files in `public/` are served at `/public/*` -- Module script tag: `` -- **Never use raw `fetch()` calls** - always use `useAPI` or `createClient` - - diff --git a/apps/testing/oauth/.env.example b/apps/testing/oauth/.env.example deleted file mode 100644 index 0fff96e3a..000000000 --- a/apps/testing/oauth/.env.example +++ /dev/null @@ -1,12 +0,0 @@ -OAUTH_CLIENT_ID= -OAUTH_CLIENT_SECRET= - -# Option A: Set individual URLs -OAUTH_AUTHORIZE_URL=https://auth.agentuity.cloud/authorize -OAUTH_TOKEN_URL=https://auth.agentuity.cloud/oauth/token -OAUTH_USERINFO_URL=https://auth.agentuity.cloud/userinfo - -# Option B: Set issuer to derive all URLs automatically -# OAUTH_ISSUER=https://auth.agentuity.cloud - -OAUTH_SCOPES="openid profile email" diff --git a/apps/testing/oauth/.gitignore b/apps/testing/oauth/.gitignore deleted file mode 100644 index 14381c369..000000000 --- a/apps/testing/oauth/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# dependencies (bun install) - -node_modules - -# output - -out -dist -*.tgz - -# code coverage - -coverage -*.lcov - -# logs - -/logs -*.log -report.*.json - -# dotenv environment variable files - -.env -.env.* -!.env.example - -# caches - -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs - -.idea - -# Finder (MacOS) folder config - -.DS_Store - -# Agentuity build files - -.agentuity diff --git a/apps/testing/oauth/README.md b/apps/testing/oauth/README.md deleted file mode 100644 index c2961055c..000000000 --- a/apps/testing/oauth/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# OAuth Demo App - -A minimal Agentuity app demonstrating OAuth 2.0 Authorization Code flow with Agentuity's OIDC provider. - -## Setup - -### 1. Register an OAuth Client - -Go to [app.agentuity.com/settings/oauth-apps](https://app.agentuity.com/settings/oauth-apps) and create a new OAuth app with: - -- **Redirect URIs:** `http://localhost:3500/api/oauth/login` -- **Logout URIs:** `http://localhost:3500/api/oauth/logout` -- **Scopes:** `openid`, `profile`, `email` (and any others you need) - -Save the **Client ID** and **Client Secret**. - -### 2. Configure Environment - -Copy `.env.example` to `.env` and fill in your values: - -```sh -cp .env.example .env -``` - -```env -OAUTH_CLIENT_ID=oidc_your_client_id_here -OAUTH_CLIENT_SECRET=your_client_secret_here -OAUTH_AUTHORIZE_URL=https://auth.agentuity.cloud/authorize -OAUTH_TOKEN_URL=https://auth.agentuity.cloud/oauth/token -OAUTH_USERINFO_URL=https://auth.agentuity.cloud/userinfo -OAUTH_SCOPES=openid profile email -``` - -> For dev environments, use `auth.agentuity.io` instead of `auth.agentuity.cloud`. - -### 3. Run - -```sh -bun install -bun run dev -``` - -Open [http://localhost:3500](http://localhost:3500). - -## How It Works - -The app has three API routes: - -| Route | Purpose | -|-------|---------| -| `GET /api/oauth/me` | Returns user info if logged in, or a login URL if not | -| `GET /api/oauth/login` | OAuth callback — exchanges code for token, fetches user info, sets session cookie | -| `GET /api/oauth/logout` | Clears session cookie and redirects home | - -### Flow - -1. Browser loads the home page and calls `/api/oauth/me` -2. If no session, the API returns a `loginUrl` pointing to the OIDC authorize endpoint -3. User clicks "Login" and is redirected to Agentuity to authenticate -4. After authentication, the provider redirects back to `/api/oauth/login?code=...` -5. The app exchanges the code for an access token, fetches user info, and stores it in a cookie -6. User is redirected home and sees their profile info - -### OIDC Discovery - -The canonical endpoint URLs can be found at: - -``` -https://auth.agentuity.cloud/.well-known/openid-configuration -``` diff --git a/apps/testing/oauth/app.ts b/apps/testing/oauth/app.ts deleted file mode 100644 index ac48df796..000000000 --- a/apps/testing/oauth/app.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createApp } from '@agentuity/runtime'; - -const app = await createApp(); - -app.logger.debug('Running %s', app.server.url); - -export default app; diff --git a/apps/testing/oauth/package.json b/apps/testing/oauth/package.json index 8be94eca7..77b617be1 100644 --- a/apps/testing/oauth/package.json +++ b/apps/testing/oauth/package.json @@ -1,33 +1,22 @@ { - "name": "oauth", + "name": "oauth-app", "version": "0.0.1", "license": "Apache-2.0", "private": true, - "module": ".agentuity/app.js", "type": "module", "scripts": { - "build": "bun ../../../packages/cli/bin/cli.ts build --dir . --dev", - "dev": "bun ../../../packages/cli/bin/cli.ts dev --dir .", - "start": "bun .agentuity/app.js", - "deploy": "agentuity deploy", + "dev": "bun --hot src/index.ts", + "build": "bun build src/index.ts --outdir dist --target node", + "start": "node dist/index.js", + "test": "bun test", "typecheck": "bunx tsc --noEmit" }, "dependencies": { - "@agentuity/cli": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/runtime": "workspace:*", - "hono": "^4.7.13", - "react": "^19.2.0", - "react-dom": "^19.2.0" + "hono": "^4.7.13" }, "devDependencies": { "@types/bun": "latest", - "@types/react": "^19", - "@types/react-dom": "^19", - "@vitejs/plugin-react": "^4.6.0", - "typescript": "^5", - "vite": "^7.2.7" + "typescript": "^5" } } diff --git a/apps/testing/oauth/src/api/AGENTS.md b/apps/testing/oauth/src/api/AGENTS.md deleted file mode 100644 index 9baa40cc7..000000000 --- a/apps/testing/oauth/src/api/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/api/AGENTS.md](../../.agents/agentuity/sdk/api/AGENTS.md) for Agentuity api development guidelines. diff --git a/apps/testing/oauth/src/api/index.ts b/apps/testing/oauth/src/api/index.ts deleted file mode 100644 index 14409245a..000000000 --- a/apps/testing/oauth/src/api/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { createRouter } from '@agentuity/runtime'; -import type { Context } from 'hono'; -import { setCookie, getCookie, deleteCookie } from 'hono/cookie'; -import { buildAuthorizeUrl, exchangeToken, fetchUserInfo, logout } from '@agentuity/core/oauth'; -import type {} from '@agentuity/react'; - -const api = createRouter(); - -// Helper to get the base URL from a request -function getBaseUrl(c: Context): string { - const url = new URL(c.req.url); - return `${url.protocol}//${url.host}`; -} - -// Check login status -api.get('/oauth/me', async (c) => { - const session = getCookie(c, 'oauth_session'); - - if (session) { - try { - const user = JSON.parse(decodeURIComponent(session)); - return c.json({ loggedIn: true, user }); - } catch { - deleteCookie(c, 'oauth_session'); - } - } - - const redirectUri = `${getBaseUrl(c)}/api/oauth/login`; - const loginUrl = buildAuthorizeUrl(redirectUri, { prompt: 'consent' }); - - return c.json({ loggedIn: false, loginUrl }); -}); - -// OAuth callback - exchanges code for token and fetches user info -api.get('/oauth/login', async (c) => { - const code = c.req.query('code'); - - if (!code) { - return c.json({ error: 'No authorization code provided' }, 400); - } - - const redirectUri = `${getBaseUrl(c)}/api/oauth/login`; - - try { - const token = await exchangeToken(code, redirectUri); - const user = await fetchUserInfo(token.access_token); - - // Store tokens for logout - setCookie( - c, - 'oauth_tokens', - encodeURIComponent( - JSON.stringify({ - access_token: token.access_token, - refresh_token: token.refresh_token, - }) - ), - { - path: '/', - httpOnly: true, - secure: new URL(c.req.url).protocol === 'https:', - sameSite: 'Lax', - maxAge: 60 * 60 * 24, - } - ); - - setCookie(c, 'oauth_session', encodeURIComponent(JSON.stringify(user)), { - path: '/', - httpOnly: true, - // secure: true in production, false for local development over HTTP - secure: new URL(c.req.url).protocol === 'https:', - sameSite: 'Lax', - maxAge: 60 * 60 * 24, - }); - - return c.redirect('/'); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - return c.json({ error: 'OAuth flow failed', details: message }, 500); - } -}); - -// Logout - revoke token and clear session -api.get('/oauth/logout', async (c) => { - const tokensCookie = getCookie(c, 'oauth_tokens'); - if (tokensCookie) { - try { - const tokens = JSON.parse(decodeURIComponent(tokensCookie)); - // Revoke the refresh token (or access token if no refresh token) - const tokenToRevoke = tokens.refresh_token ?? tokens.access_token; - if (tokenToRevoke) { - await logout(tokenToRevoke); - } - } catch { - // Best effort — continue with cookie cleanup even if revocation fails - } - } - deleteCookie(c, 'oauth_tokens', { path: '/' }); - deleteCookie(c, 'oauth_session', { path: '/' }); - return c.redirect('/'); -}); - -export default api; diff --git a/apps/testing/oauth/src/generated/AGENTS.md b/apps/testing/oauth/src/generated/AGENTS.md deleted file mode 100644 index f571c2b88..000000000 --- a/apps/testing/oauth/src/generated/AGENTS.md +++ /dev/null @@ -1,24 +0,0 @@ -# AI Agent Instructions - -**CRITICAL:** Files in this directory are AUTO-GENERATED by the Agentuity build system. - -## Rules for AI Agents - -1. ❌ NEVER edit files in `src/generated/` -2. ❌ NEVER include `src/generated/` files in context when analyzing code -3. ❌ NEVER suggest changes to generated files -4. ✅ Ignore this directory when searching for user code -5. ✅ Direct users to modify source files in `src/agent/`, `src/api/`, `app.ts`, or `.env` files - -## What Gets Generated - -- `registry.ts` - Built from agent discovery in `src/agent/` -- `routes.ts` - Built from route discovery in `src/api/` -- `app.ts` - Entry point assembled from project configuration -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state) - -These files are regenerated on every `bun run build` or `bun run dev`. diff --git a/apps/testing/oauth/src/generated/README.md b/apps/testing/oauth/src/generated/README.md deleted file mode 100644 index cbfd8b5ee..000000000 --- a/apps/testing/oauth/src/generated/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Generated Files - DO NOT EDIT - -This directory contains auto-generated TypeScript files created by the Agentuity build system. - -**These files are regenerated on every build.** Any manual changes will be overwritten. - -## Generated Files - -- `registry.ts` - Agent registry from `src/agent/**` -- `routes.ts` - Route registry from `src/api/**` -- `app.ts` - Application entry point -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state in `app.ts`) - -## Environment Variable Types - -The `env.d.ts` file provides TypeScript intellisense for your environment variables: - -- **ProcessEnv**: All variables from your `.env` files are typed as `string` -- **ImportMetaEnv**: Only `VITE_*`, `AGENTUITY_PUBLIC_*`, and `PUBLIC_*` prefixed variables (for client-side use) - -Files are merged based on build mode: -- **Development**: `.env.{profile}` → `.env.development` → `.env` (later files override) -- **Production**: `.env.{profile}` → `.env` → `.env.production` (later files override) - -## For Developers - -Do not modify these files. Instead: -- Add/modify agents in `src/agent/` -- Add/modify routes in `src/api/` -- Configure app in `app.ts` -- Add environment variables to `.env` files - -These files ARE version controlled to enable better tooling and type checking. diff --git a/apps/testing/oauth/src/generated/analytics-config.ts b/apps/testing/oauth/src/generated/analytics-config.ts deleted file mode 100644 index 2a4657a94..000000000 --- a/apps/testing/oauth/src/generated/analytics-config.ts +++ /dev/null @@ -1,33 +0,0 @@ -// @generated -// Auto-generated by Agentuity -// DO NOT EDIT - This file is regenerated on every build - -export interface AnalyticsConfig { - enabled: boolean; - requireConsent: boolean; - trackClicks: boolean; - trackScroll: boolean; - trackOutboundLinks: boolean; - trackForms: boolean; - trackWebVitals: boolean; - trackErrors: boolean; - trackSPANavigation: boolean; - sampleRate: number; - excludePatterns: string[]; - globalProperties: Record; -} - -export const analyticsConfig: AnalyticsConfig = { - enabled: true, - requireConsent: false, - trackClicks: true, - trackScroll: true, - trackOutboundLinks: true, - trackForms: false, - trackWebVitals: true, - trackErrors: true, - trackSPANavigation: true, - sampleRate: 1, - excludePatterns: [], - globalProperties: {}, -}; diff --git a/apps/testing/oauth/src/generated/app.ts b/apps/testing/oauth/src/generated/app.ts deleted file mode 100644 index 6bc030b66..000000000 --- a/apps/testing/oauth/src/generated/app.ts +++ /dev/null @@ -1,565 +0,0 @@ -// @generated -// Auto-generated by Agentuity -// DO NOT EDIT - This file is regenerated on every build -// Supports both development and production modes via runtime detection -import { - createRouter, - createBaseMiddleware, - createCorsMiddleware, - createOtelMiddleware, - createAgentMiddleware, - createCompressionMiddleware, - getAppState, - getAppConfig, - getUserRouter, - register, - getSpanProcessors, - createServices, - runAgentSetups, - getThreadProvider, - getSessionProvider, - setGlobalLogger, - setGlobalTracer, - setGlobalRouter, - enableProcessExitProtection, - hasWaitUntilPending, - loadBuildMetadata, - createWorkbenchRouter, - bootstrapRuntimeEnv, - patchBunS3ForStorageDev, - runShutdown, - mimeTypes, -} from '@agentuity/runtime'; -import type { Context } from 'hono'; -import { websocket, serveStatic } from 'hono/bun'; -import { readFileSync, existsSync } from 'node:fs'; -import { type LogLevel } from '@agentuity/core'; -import { injectAnalytics, registerAnalyticsRoutes } from './webanalytics.js'; -import { analyticsConfig } from './analytics-config.js'; - -// Runtime mode detection helper -// Dynamic string concatenation prevents Bun.build from inlining NODE_ENV at build time -// See: https://github.com/oven-sh/bun/issues/20183 -const getEnv = (key: string) => process.env[key]; -const isDevelopment = () => getEnv('NODE' + '_' + 'ENV') !== 'production'; - -// Step 0: Bootstrap runtime environment (load profile-specific .env files) -// Only in development - production env vars are injected by platform -// This must happen BEFORE any imports that depend on environment variables -if (isDevelopment()) { - // Pass project directory (two levels up from src/generated/) so .env files are loaded correctly - await bootstrapRuntimeEnv({ projectDir: import.meta.dir + '/../..' }); -} - -// Step 0.25: load our runtime metadata and cache it -loadBuildMetadata(); - -// Step 0.5: Patch Bun's S3 client for Agentuity storage endpoints -// Agentuity storage uses virtual-hosted-style URLs (*.storage.dev) -// This patches s3.file() to automatically set virtualHostedStyle: true -patchBunS3ForStorageDev(); - -// Step 1: Initialize telemetry and services -const serverUrl = `http://127.0.0.1:${process.env.PORT || '3500'}`; -const otel = register({ processors: getSpanProcessors(), logLevel: (process.env.AGENTUITY_LOG_LEVEL || 'info') as LogLevel }); - -// Step 2: Create router and set as global -const app = createRouter(); -setGlobalRouter(app); - -// Step 3: Apply middleware in correct order (BEFORE mounting routes) -// Compression runs first (outermost) so it can compress the final response -app.use('*', createCompressionMiddleware()); - -app.use('*', createBaseMiddleware({ - logger: otel.logger, - tracer: otel.tracer, - meter: otel.meter, -})); - -// Workbench routes always get OTel middleware for session tracking -app.use('/_agentuity/workbench/*', createOtelMiddleware()); - -// Note: /api/* middleware (CORS, OTel, agent context) is applied in Step 6 -// after app.ts import, so user-provided routers can specify custom prefixes. - -// Step 4: Import user's app.ts (runs createApp, gets state/config) -await import('../../app.js'); - -// Step 4.5: Import agent registry to ensure all agents are registered -// This is needed for workbench metadata to return JSON schemas -await import('./registry.js'); - -// Step 5: Initialize providers -const appState = getAppState(); -const appConfig = getAppConfig(); - -createServices(otel.logger, appConfig, serverUrl); - -// Make logger and tracer globally available for user's app.ts -setGlobalLogger(otel.logger); -setGlobalTracer(otel.tracer); - -const threadProvider = getThreadProvider(); -const sessionProvider = getSessionProvider(); - -await threadProvider.initialize(appState); -await sessionProvider.initialize(appState); - -// Step 6: Mount routes (AFTER middleware is applied) - -// Health check routes (production only) -if (!isDevelopment()) { - const healthHandler = (c: Context) => { - return c.text('OK', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - }; - const idleHandler = (c: Context) => { - // Check if server is idle (no pending requests/connections) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const server = (globalThis as any).__AGENTUITY_SERVER__; - if (!server) return c.text('NO', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - - // Check for pending background tasks - if (hasWaitUntilPending()) return c.text('NO', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - - if (server.pendingRequests > 1) return c.text('NO', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - if (server.pendingWebSockets > 0) return c.text('NO', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - - return c.text('OK', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - }; - app.get('/_agentuity/health', healthHandler); - app.get('/_health', healthHandler); - app.get('/_agentuity/idle', idleHandler); - app.get('/_idle', idleHandler); -} - -// Dev readiness check - verifies Vite asset server is ready to serve frontend -if (isDevelopment()) { - app.get('/_agentuity/ready', async (c: Context) => { - const vitePort = process.env.VITE_PORT; - if (!vitePort) { - // No Vite port means we're not using Vite proxy - return c.text('OK', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - } - - try { - // Probe Vite to check if it can serve the main entry point - // Use @vite/client as a lightweight check - it's always available - const viteUrl = `http://127.0.0.1:${vitePort}/@vite/client`; - const res = await fetch(viteUrl, { - signal: AbortSignal.timeout(5000), - method: 'HEAD' - }); - - if (res.ok) { - return c.text('OK', 200, { 'Content-Type': 'text/plain; charset=utf-8' }); - } - return c.text('VITE_NOT_READY', 503, { 'Content-Type': 'text/plain; charset=utf-8' }); - } catch (err) { - otel.logger.debug('Vite readiness check failed: %s', err instanceof Error ? err.message : String(err)); - return c.text('VITE_NOT_READY', 503, { 'Content-Type': 'text/plain; charset=utf-8' }); - } - }); -} - -// Register analytics routes -registerAnalyticsRoutes(app); - -// Asset proxy routes - Development mode only (proxies to Vite asset server) -if (isDevelopment() && process.env.VITE_PORT) { - const VITE_ASSET_PORT = parseInt(process.env.VITE_PORT, 10); - - const proxyToVite = async (c: Context, pathOverride?: string) => { - const targetPath = pathOverride ?? c.req.path; - const viteUrl = `http://127.0.0.1:${VITE_ASSET_PORT}${targetPath}`; - try { - otel.logger.debug(`[Proxy] ${c.req.method} ${c.req.path} -> Vite:${VITE_ASSET_PORT}${targetPath}`); - const res = await fetch(viteUrl, { signal: AbortSignal.timeout(10000) }); - otel.logger.debug(`[Proxy] ${c.req.path} -> ${res.status} (${res.headers.get('content-type')})`); - return new Response(res.body, { - status: res.status, - headers: res.headers, - }); - } catch (err) { - if (err instanceof Error && err.name === 'TimeoutError') { - otel.logger.error(`Vite proxy timeout: ${c.req.path}`); - return c.text('Vite asset server timeout', 504); - } - otel.logger.error(`Failed to proxy to Vite: ${c.req.path} - ${err instanceof Error ? err.message : String(err)}`); - return c.text('Vite asset server error', 500); - } - }; - - // HMR WebSocket proxy - enables hot reload through tunnels (*.agentuity.live) - // This proxies the Vite HMR WebSocket connection from the Bun server to Vite - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const viteHmrWebsocket = (globalThis as any).__AGENTUITY_VITE_HMR_WEBSOCKET__ = { - // Map of client WebSocket -> Vite WebSocket - connections: new Map(), - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - open(clientWs: any) { - // Get the query string from ws.data (set during upgrade) - const queryString = clientWs.data?.queryString || ''; - const viteWsUrl = `ws://127.0.0.1:${VITE_ASSET_PORT}/__vite_hmr${queryString}`; - otel.logger.debug('[HMR Proxy] Client connected, opening connection to Vite at %s', viteWsUrl); - - // Connect to Vite with the 'vite-hmr' subprotocol (required by Vite) - const viteWs = new WebSocket(viteWsUrl, ['vite-hmr']); - - viteWs.onopen = () => { - otel.logger.debug('[HMR Proxy] Connected to Vite HMR server'); - }; - - viteWs.onmessage = (event) => { - // Forward messages from Vite to client - if (clientWs.readyState === WebSocket.OPEN) { - clientWs.send(event.data); - } - }; - - viteWs.onerror = (error) => { - otel.logger.error('[HMR Proxy] Vite WebSocket error: %s', error); - }; - - viteWs.onclose = () => { - otel.logger.debug('[HMR Proxy] Vite WebSocket closed'); - viteHmrWebsocket.connections.delete(clientWs); - if (clientWs.readyState === WebSocket.OPEN) { - clientWs.close(); - } - }; - - viteHmrWebsocket.connections.set(clientWs, viteWs); - }, - - message(clientWs: WebSocket, message: string | Buffer) { - // Forward messages from client to Vite - const viteWs = viteHmrWebsocket.connections.get(clientWs); - if (viteWs && viteWs.readyState === WebSocket.OPEN) { - viteWs.send(message); - } - }, - - close(clientWs: WebSocket) { - otel.logger.debug('[HMR Proxy] Client WebSocket closed'); - const viteWs = viteHmrWebsocket.connections.get(clientWs); - if (viteWs) { - viteWs.close(); - viteHmrWebsocket.connections.delete(clientWs); - } - }, - }; - - // Register HMR WebSocket route - must be before other routes - app.get('/__vite_hmr', (c: Context) => { - const upgradeHeader = c.req.header('upgrade'); - if (upgradeHeader?.toLowerCase() === 'websocket') { - // Get the Bun server from context using Hono's pattern - // When app.fetch(req, server) is called, Hono stores server as c.env - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const server = 'server' in (c.env as any) ? (c.env as any).server : c.env; - - if (server?.upgrade) { - // Extract query string to forward to Vite (includes token parameter) - const url = new URL(c.req.url); - const queryString = url.search; // Includes the '?' prefix - - const success = server.upgrade(c.req.raw, { - data: { type: 'vite-hmr', queryString }, - }); - if (success) { - otel.logger.debug('[HMR Proxy] WebSocket upgrade successful'); - return new Response(null); - } - otel.logger.error('[HMR Proxy] WebSocket upgrade returned false'); - } else { - otel.logger.error('[HMR Proxy] Server upgrade method not available. c.env type: %s, keys: %s', - typeof c.env, - Object.keys(c.env || {}).join(', ')); - } - return c.text('WebSocket upgrade failed', 500); - } - // Non-WebSocket request to HMR endpoint - proxy to Vite - return proxyToVite(c); - }); - - // Vite client scripts and HMR - app.get('/@vite/*', (c: Context) => proxyToVite(c)); - app.get('/@react-refresh', (c: Context) => proxyToVite(c)); - - // Source files for HMR - app.get('/src/web/*', (c: Context) => proxyToVite(c)); - app.get('/src/*', (c: Context) => proxyToVite(c)); // Catch-all for other source files - - // Workbench source files (in .agentuity/workbench-src/) - app.get('/.agentuity/workbench-src/*', (c: Context) => proxyToVite(c)); - - // Node modules (Vite transforms these) - app.get('/node_modules/*', (c: Context) => proxyToVite(c)); - - // Scoped packages (e.g., @agentuity/*, @types/*) - app.get('/@*', (c: Context) => proxyToVite(c)); - - // File system access (for Vite's @fs protocol) - app.get('/@fs/*', (c: Context) => proxyToVite(c)); - - // Module resolution (for Vite's @id protocol) - app.get('/@id/*', (c: Context) => proxyToVite(c)); - - // Static assets - Vite serves src/web/public/* at root, but code uses /public/* paths - // In production, the plugin transforms /public/foo.svg to CDN URLs - // Rewrite /public/foo.svg -> /foo.svg before proxying to Vite - app.get('/public/*', (c: Context) => { - const rootPath = c.req.path.replace(/^\/public/, ''); - return proxyToVite(c, rootPath); - }); - - // Any .js, .jsx, .ts, .tsx files (catch remaining modules) - app.get('/*.js', (c: Context) => proxyToVite(c)); - app.get('/*.jsx', (c: Context) => proxyToVite(c)); - app.get('/*.ts', (c: Context) => proxyToVite(c)); - app.get('/*.tsx', (c: Context) => proxyToVite(c)); - app.get('/*.css', (c: Context) => proxyToVite(c)); -} - -// Apply middleware and mount API routes -// If user passed router(s) via createApp({ router }), mount those instead of discovered files -const __userMounts = getUserRouter(); -if (__userMounts) { - for (const mount of __userMounts) { - // Apply Agentuity middleware (CORS, OTel, agent context) to each user-provided prefix - const prefix = mount.path.endsWith('/') ? mount.path + '*' : mount.path + '/*'; - app.use(prefix, createCorsMiddleware()); - app.use(prefix, createOtelMiddleware()); - app.use(prefix, createAgentMiddleware('')); - app.route(mount.path, mount.router); - } -} else { - // File-based routing: apply middleware to /api/* and mount discovered route files - app.use('/api/*', createCorsMiddleware()); - app.use('/api/*', createOtelMiddleware()); - app.use('/api/*', createAgentMiddleware('')); - const { default: router_0 } = await import('../api/index.js'); - app.route('/api', router_0); -} - -// Mount workbench API routes (/_agentuity/workbench/*) -// Always available for cloud workbench communication -// Auth is handled inside the router (signature verification in production) -const workbenchRouter = createWorkbenchRouter(); -app.route('/', workbenchRouter); - -// hasWorkbenchConfig controls whether the local workbench UI is served (dev mode only) -const hasWorkbenchConfig = false; - -// Workbench UI is only available in development mode (API routes are always available) -if (hasWorkbenchConfig && isDevelopment()) { - const workbenchSrcDir = import.meta.dir + '/workbench-src'; - const workbenchIndexPath = import.meta.dir + '/workbench-src/index.html'; - app.get('/workbench', async (c: Context) => { - const html = await Bun.file(workbenchIndexPath).text(); - // Rewrite script/css paths to use Vite's @fs protocol - const withVite = html - .replace('src="./main.tsx"', `src="/@fs${workbenchSrcDir}/main.tsx"`) - .replace('href="./styles.css"', `href="/@fs${workbenchSrcDir}/styles.css"`); - return c.html(withVite); - }); -} - -// Web routes - Runtime mode detection (dev proxies to Vite, prod serves static) -// Note: Session/thread cookies are set by /_agentuity/webanalytics/session.js (loaded via script tag) -// This keeps the HTML response static and cacheable - -if (isDevelopment()) { - // Development mode: Proxy HTML from Vite to enable React Fast Refresh - const VITE_ASSET_PORT = parseInt(process.env.VITE_PORT || '5173', 10); - - const devHtmlHandler = async (c: Context) => { - const viteUrl = `http://127.0.0.1:${VITE_ASSET_PORT}/src/web/index.html`; - - try { - otel.logger.debug('[Proxy] GET /src/web/index.html -> Vite:%d', VITE_ASSET_PORT); - const res = await fetch(viteUrl, { signal: AbortSignal.timeout(10000) }); - - // Get HTML text and transform relative paths to absolute - let html = await res.text(); - html = html - .replace(/src="\.\//g, 'src="/src/web/') - .replace(/href="\.\//g, 'href="/src/web/'); - - // Inject analytics config and script (session/thread read from cookies by beacon) - html = injectAnalytics(html, analyticsConfig); - - return new Response(html, { - status: res.status, - headers: res.headers, - }); - } catch (err) { - otel.logger.error('Failed to proxy HTML to Vite: %s', err instanceof Error ? err.message : String(err)); - return c.text('Vite asset server error (HTML)', 500); - } - }; - - app.get('/', devHtmlHandler); - - // 404 for unmatched API/system routes - app.all('/_agentuity/*', (c: Context) => c.notFound()); - app.all('/api/*', (c: Context) => c.notFound()); - if (!(hasWorkbenchConfig && isDevelopment())) { - app.all('/workbench/*', (c: Context) => c.notFound()); - } - - // SPA fallback - serve index.html for client-side routing - app.get('*', async (c: Context) => { - const path = c.req.path; - // If path has a file extension, try proxying to Vite first (serves public files like robots.txt, llms.txt) - // Fall back to 404 if Vite also returns 404 - if (/\.[a-zA-Z0-9]+$/.test(path)) { - try { - const viteUrl = `http://127.0.0.1:${VITE_ASSET_PORT}${path}`; - const res = await fetch(viteUrl, { signal: AbortSignal.timeout(10000) }); - if (res.status !== 404) { - return new Response(res.body, { status: res.status, headers: res.headers }); - } - } catch { - // Vite unavailable, fall through to 404 - } - return c.notFound(); - } - return devHtmlHandler(c); - }); -} else { - // Production mode: Serve static files from bundled output - const indexHtmlPath = import.meta.dir + '/client/index.html'; - const baseIndexHtml = existsSync(indexHtmlPath) - ? readFileSync(indexHtmlPath, 'utf-8') - : ''; - - if (!baseIndexHtml) { - otel.logger.warn('Production HTML not found at %s', indexHtmlPath); - } - - const prodHtmlHandler = (c: Context) => { - if (!baseIndexHtml) { - return c.text('Production build incomplete', 500); - } - // Inject analytics config and script (session/thread loaded via session.js) - const html = injectAnalytics(baseIndexHtml, analyticsConfig); - return c.html(html); - }; - - app.get('/', prodHtmlHandler); - - // Serve static assets from /assets/* (Vite bundled output) - app.use('/assets/*', serveStatic({ root: import.meta.dir + '/client', mimes: mimeTypes })); - - // Serve static public assets (favicon.ico, robots.txt, etc.) - app.use('/*', serveStatic({ root: import.meta.dir + '/client', rewriteRequestPath: (path) => path, mimes: mimeTypes })); - - // 404 for unmatched API/system routes (IMPORTANT: comes before SPA fallback) - app.all('/_agentuity/*', (c: Context) => c.notFound()); - app.all('/api/*', (c: Context) => c.notFound()); - if (!(hasWorkbenchConfig && isDevelopment())) { - app.all('/workbench/*', (c: Context) => c.notFound()); - } - - // SPA fallback with asset protection - app.get('*', (c: Context) => { - const path = c.req.path; - // If path has a file extension, it's likely an asset request - return 404 - if (/\.[a-zA-Z0-9]+$/.test(path)) { - return c.notFound(); - } - return prodHtmlHandler(c); - }); -} - -// Step 7: Run agent setup to signal completion -await runAgentSetups(appState); - -// Start Bun server -if (typeof Bun !== 'undefined') { - // Enable process exit protection now that we're starting the server - enableProcessExitProtection(); - - const port = parseInt(process.env.PORT || '3500', 10); - - // Create custom WebSocket handler that supports both regular WebSockets and HMR proxy - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const hmrHandler = (globalThis as any).__AGENTUITY_VITE_HMR_WEBSOCKET__; - const customWebsocket = { - ...websocket, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - open(ws: any) { - // Check if this is an HMR connection - if (ws.data?.type === 'vite-hmr' && hmrHandler) { - hmrHandler.open(ws); - } else if (websocket.open) { - websocket.open(ws); - } - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - message(ws: any, message: string | Buffer) { - // Check if this is an HMR connection - if (ws.data?.type === 'vite-hmr' && hmrHandler) { - hmrHandler.message(ws, message); - } else if (websocket.message) { - websocket.message(ws, message); - } - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - close(ws: any, code?: number, reason?: string) { - // Check if this is an HMR connection - if (ws.data?.type === 'vite-hmr' && hmrHandler) { - hmrHandler.close(ws); - } else if (websocket.close) { - websocket.close(ws, code, reason); - } - }, - }; - - const server = Bun.serve({ - fetch: (req, server) => { - // Get timeout from config on each request (0 = no timeout) - server.timeout(req, getAppConfig()?.requestTimeout ?? 0); - return app.fetch(req, server); - }, - websocket: customWebsocket, - port, - hostname: '127.0.0.1', - development: isDevelopment(), - }); - - // Make server available globally for health checks - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (globalThis as any).__AGENTUITY_SERVER__ = server; - - otel.logger.info(`Server listening on http://127.0.0.1:${port}`); - if (isDevelopment() && process.env.VITE_PORT) { - otel.logger.debug(`Proxying Vite assets from port ${process.env.VITE_PORT}`); - } - - // Register signal handlers for graceful shutdown (production only) - // Dev mode has its own handlers in devmode.ts - if (!isDevelopment()) { - const handleShutdown = async (signal: string) => { - otel.logger.info(`Received ${signal}, initiating graceful shutdown...`); - try { - await runShutdown(); - otel.logger.info('Shutdown complete'); - } catch (err) { - otel.logger.error(`Error during shutdown: ${err instanceof Error ? err.message : String(err)}`); - } - process.exit(0); - }; - - process.once('SIGTERM', () => handleShutdown('SIGTERM')); - process.once('SIGINT', () => handleShutdown('SIGINT')); - } -} - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! - diff --git a/apps/testing/oauth/src/generated/registry.ts b/apps/testing/oauth/src/generated/registry.ts deleted file mode 100644 index 15371df43..000000000 --- a/apps/testing/oauth/src/generated/registry.ts +++ /dev/null @@ -1,55 +0,0 @@ -// @generated -// Auto-generated by Agentuity - DO NOT EDIT - -import type { AgentRunner } from '@agentuity/runtime'; -import type { InferInput, InferOutput } from '@agentuity/core'; - -// ============================================================================ -// Schema Type Exports -// ============================================================================ - -// ============================================================================ -// Agent Definitions -// ============================================================================ - -/** - * Agent Definitions - * - * Registry of all agents in this application. - * Provides strongly-typed access to agent metadata and runner functions. - * - * @remarks - * This object is auto-generated from your agent files during build. - * Each agent has corresponding Input, Output, and Runner types exported above. - * - * @example - * ```typescript - * import { AgentDefinitions, SessionBasicInput } from './generated/registry'; - * - * // Access agent definition - * const agent = AgentDefinitions.sessionBasic; - * - * // Use typed schema types - * const input: SessionBasicInput = { ... }; - * const result = await agent.run(input); - * ``` - */ -export const AgentDefinitions = { - -} as const; - -// ============================================================================ -// Module Augmentation -// ============================================================================ - -// Augment @agentuity/runtime types with strongly-typed agents from this project -declare module "@agentuity/runtime" { - // Augment the AgentRegistry interface with project-specific strongly-typed agents - export interface AgentRegistry { - - } -} - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! diff --git a/apps/testing/oauth/src/generated/routes.ts b/apps/testing/oauth/src/generated/routes.ts deleted file mode 100644 index 46806e632..000000000 --- a/apps/testing/oauth/src/generated/routes.ts +++ /dev/null @@ -1,202 +0,0 @@ -// @generated -// Auto-generated by Agentuity - DO NOT EDIT - -// ============================================================================ -// Route Schema Type Exports -// ============================================================================ - -// ============================================================================ -// Route Definitions -// ============================================================================ - -/** - * Route Definitions - * - * Type-safe route registry for all API routes, WebSocket connections, and SSE endpoints. - * Used by @agentuity/react and @agentuity/frontend for client-side type-safe routing. - * - * @remarks - * This module augmentation is auto-generated from your route files during build. - * Individual route Input/Output types are exported above for direct usage. - * - * The augmentation targets @agentuity/frontend (the canonical source of registry types). - * Since @agentuity/react re-exports these types, the augmentation is visible when - * importing from either package. - */ - -declare module '@agentuity/frontend' { - /** - * API Route Registry - * - * Maps route keys (METHOD /path) to their input/output schemas - */ - export interface RouteRegistry { - 'GET /api/oauth/login': { - inputSchema: never; - outputSchema: never; - stream: false; - params: never; - }; - 'GET /api/oauth/logout': { - inputSchema: never; - outputSchema: never; - stream: false; - params: never; - }; - 'GET /api/oauth/me': { - inputSchema: never; - outputSchema: never; - stream: false; - params: never; - }; - } - - /** - * WebSocket Route Registry - * - * Maps WebSocket route paths to their schemas - */ - export interface WebSocketRouteRegistry { - - } - - /** - * Server-Sent Events Route Registry - * - * Maps SSE route paths to their schemas - */ - export interface SSERouteRegistry { - - } - - /** - * RPC Route Registry - * - * Nested structure for RPC-style client access (e.g., client.hello.post()) - * Used by createClient() from @agentuity/frontend for type-safe RPC calls. - */ - export interface RPCRouteRegistry { - oauth: { - login: { - /** - * Route: GET /api/oauth/login - */ - get: { input: never; output: never; type: 'api'; params: never; paramsTuple: [] }; - }; - logout: { - /** - * Route: GET /api/oauth/logout - */ - get: { input: never; output: never; type: 'api'; params: never; paramsTuple: [] }; - }; - me: { - /** - * Route: GET /api/oauth/me - */ - get: { input: never; output: never; type: 'api'; params: never; paramsTuple: [] }; - }; - }; - } -} - -// Backward compatibility: also augment @agentuity/react for older versions -// that define RouteRegistry locally instead of re-exporting from @agentuity/frontend -declare module '@agentuity/react' { - export interface RouteRegistry { - 'GET /api/oauth/login': { - inputSchema: never; - outputSchema: never; - stream: false; - params: never; - }; - 'GET /api/oauth/logout': { - inputSchema: never; - outputSchema: never; - stream: false; - params: never; - }; - 'GET /api/oauth/me': { - inputSchema: never; - outputSchema: never; - stream: false; - params: never; - }; - } - export interface WebSocketRouteRegistry { - - } - export interface SSERouteRegistry { - - } - export interface RPCRouteRegistry { - oauth: { - login: { - /** - * Route: GET /api/oauth/login - */ - get: { input: never; output: never; type: 'api'; params: never; paramsTuple: [] }; - }; - logout: { - /** - * Route: GET /api/oauth/logout - */ - get: { input: never; output: never; type: 'api'; params: never; paramsTuple: [] }; - }; - me: { - /** - * Route: GET /api/oauth/me - */ - get: { input: never; output: never; type: 'api'; params: never; paramsTuple: [] }; - }; - }; - } -} - -/** - * Runtime metadata for RPC routes. - * Contains route type information for client routing decisions. - * @internal - */ -const _rpcRouteMetadata = { - "oauth": { - "login": { - "get": { - "type": "api", - "path": "/api/oauth/login" - } - }, - "logout": { - "get": { - "type": "api", - "path": "/api/oauth/logout" - } - }, - "me": { - "get": { - "type": "api", - "path": "/api/oauth/me" - } - } - } -} as const; - -// Store metadata globally for createAPIClient() to access -if (typeof globalThis !== 'undefined') { - (globalThis as Record).__rpcRouteMetadata = _rpcRouteMetadata; -} - -/** - * Type-safe API client is available from @agentuity/react - * - * @example - * ```typescript - * import { createAPIClient } from '@agentuity/react'; - * - * const api = createAPIClient(); - * const result = await api.hello.post({ name: 'World' }); - * ``` - */ - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! diff --git a/apps/testing/oauth/src/generated/webanalytics.ts b/apps/testing/oauth/src/generated/webanalytics.ts deleted file mode 100644 index 875e63cfd..000000000 --- a/apps/testing/oauth/src/generated/webanalytics.ts +++ /dev/null @@ -1,97 +0,0 @@ -// @generated -// Auto-generated by Agentuity -// DO NOT EDIT - This file is regenerated on every build - -import type { Context } from 'hono'; -import { - BEACON_SCRIPT, - createRouter, - createWebSessionMiddleware, - getOrganizationId, - getProjectId, - isDevMode as runtimeIsDevMode, -} from '@agentuity/runtime'; -import type { AnalyticsConfig } from './analytics-config'; - -// Inject analytics config and script into HTML -// Note: Only static config is injected (org, project, devmode, tracking options) -// Session and thread IDs are read from cookies by the beacon script -// -// In production: beacon is served from CDN as a hashed asset (injected by Vite build) -// In development: beacon is served from /_agentuity/webanalytics/analytics.js route -export function injectAnalytics(html: string, analyticsConfig: AnalyticsConfig): string { - if (!analyticsConfig.enabled) return html; - - const orgId = getOrganizationId() || ''; - const projectId = getProjectId() || ''; - const isDevmode = runtimeIsDevMode(); - - // Only include static config - session/thread come from cookies - const pageConfig = { - ...analyticsConfig, - orgId, - projectId, - isDevmode, - }; - - const configScript = ``; - // Session script sets cookies and window.__AGENTUITY_SESSION__ (dynamic, not cached) - const sessionScript = ''; - - // In production, the beacon is already in HTML as a CDN asset (data-agentuity-beacon marker) - // Inject config/session BEFORE the beacon marker so config exists when beacon runs - const beaconMarker = ' - - -
- - diff --git a/apps/testing/oauth/test/index.test.ts b/apps/testing/oauth/test/index.test.ts new file mode 100644 index 000000000..18c8f0d33 --- /dev/null +++ b/apps/testing/oauth/test/index.test.ts @@ -0,0 +1,45 @@ +import { describe, test, expect } from 'bun:test'; +import app from '../src/index'; + +describe('oauth app', () => { + test('GET / returns HTML page', async () => { + const res = await app.fetch(new Request('http://localhost/')); + expect(res.status).toBe(200); + const body = await res.text(); + expect(body).toContain('OAuth Demo'); + }); + + test('GET /auth/me returns 500 without OAuth env vars', async () => { + // Without OAUTH_ISSUER / OAUTH_AUTHORIZE_URL, buildAuthorizeUrl throws. + // This verifies the route exists and hits the OAuth path. + const res = await app.fetch(new Request('http://localhost/auth/me')); + expect(res.status).toBe(500); + }); + + test('GET /auth/callback without code returns 400', async () => { + const res = await app.fetch(new Request('http://localhost/auth/callback')); + expect(res.status).toBe(400); + }); + + test('GET /auth/logout redirects to /', async () => { + const res = await app.fetch(new Request('http://localhost/auth/logout'), { + redirect: 'manual', + }); + expect(res.status).toBe(302); + expect(res.headers.get('location')).toBe('/'); + }); +}); + +describe.skip('deploy', () => { + test('agentuity build produces valid output', async () => { + // TODO: Run `agentuity build`, verify launch.json + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify the app is reachable + }); + + test('OAuth flow works end-to-end on deployed app', async () => { + // TODO: Hit /auth/me, follow login URL, verify callback + }); +}); diff --git a/apps/testing/oauth/tsconfig.json b/apps/testing/oauth/tsconfig.json index 5247c4c34..d4ca1840b 100644 --- a/apps/testing/oauth/tsconfig.json +++ b/apps/testing/oauth/tsconfig.json @@ -1,26 +1,15 @@ { "compilerOptions": { - "lib": ["ESNext", "DOM", "DOM.Iterable"], + "strict": true, "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, + "module": "ESNext", "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "strict": true, + "esModuleInterop": true, "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, - "paths": { - "@api/*": ["./src/api/*"] - } + "outDir": "dist", + "rootDir": "src", + "types": ["bun"] }, - "include": ["src/**/*", "app.ts"] + "include": ["src"], + "exclude": ["node_modules", "dist", "test"] } diff --git a/apps/testing/standalone-agent/.gitignore b/apps/testing/standalone-agent/.gitignore deleted file mode 100644 index 01579df6d..000000000 --- a/apps/testing/standalone-agent/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -*.log -.env -.env.local diff --git a/apps/testing/standalone-agent/README.md b/apps/testing/standalone-agent/README.md deleted file mode 100644 index 6bfee1546..000000000 --- a/apps/testing/standalone-agent/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Standalone Agent Test - -This is a test app that verifies the standalone agent execution feature works correctly. - -## What it tests - -1. **Auto-initialization**: `createAgentContext()` should work without manual runtime setup -2. **`ctx.run()` method**: Convenience method for running agents -3. **Agent execution**: Agents should execute correctly outside the HTTP server context - -## Usage - -```bash -# From the SDK root -bun install -bun run build - -# Run the standalone test -cd apps/testing/standalone-agent -bun run test -``` - -## Expected output - -The test should: - -1. Create a standalone agent context (auto-initialized) -2. Run a simple echo agent -3. Validate the output -4. Exit with code 0 on success, 1 on failure - -## Related Issue - -- GitHub Issue #601: Standalone agent execution requires manual initialization diff --git a/apps/testing/standalone-agent/index.ts b/apps/testing/standalone-agent/index.ts deleted file mode 100644 index 57c348090..000000000 --- a/apps/testing/standalone-agent/index.ts +++ /dev/null @@ -1,187 +0,0 @@ -/** - * Standalone Agent Test - * - * Tests that createAgentContext() works without manual runtime initialization. - * This verifies the fix for GitHub Issue #601. - * - * @see https://github.com/agentuity/sdk/issues/601 - */ - -import { createAgent, createAgentContext } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -// Define a simple echo agent for testing -const echoAgent = createAgent('echo-agent', { - description: 'A simple agent that echoes its input', - schema: { - input: s.object({ - message: s.string(), - }), - output: s.object({ - echo: s.string(), - timestamp: s.number(), - }), - }, - handler: async (_ctx, input) => { - return { - echo: `Echo: ${input.message}`, - timestamp: Date.now(), - }; - }, -}); - -// Define an agent without input for testing -const statusAgent = createAgent('status-agent', { - description: 'A simple agent that returns status', - schema: { - output: s.object({ - status: s.string(), - uptime: s.number(), - }), - }, - handler: async () => { - return { - status: 'ok', - uptime: process.uptime(), - }; - }, -}); - -async function runTests(): Promise { - console.log('🧪 Starting Standalone Agent Tests...\n'); - - let passed = 0; - let failed = 0; - - // Test 1: Basic createAgentContext() auto-initialization - console.log('Test 1: createAgentContext() auto-initialization'); - try { - const ctx = createAgentContext(); - if (!ctx) { - throw new Error('createAgentContext() returned null'); - } - if (!ctx.logger) { - throw new Error('Context missing logger'); - } - if (!ctx.tracer) { - throw new Error('Context missing tracer'); - } - console.log(' ✅ Context created successfully with auto-initialization\n'); - passed++; - } catch (error) { - console.error(' ❌ Failed:', (error as Error).message, '\n'); - failed++; - } - - // Test 2: ctx.run() with input - console.log('Test 2: ctx.run() with agent that has input'); - try { - const ctx = createAgentContext(); - const result = await ctx.run(echoAgent, { message: 'Hello, World!' }); - - if (!result) { - throw new Error('ctx.run() returned null'); - } - if (typeof result !== 'object') { - throw new Error(`Expected object, got ${typeof result}`); - } - const typedResult = result as { echo: string; timestamp: number }; - if (typedResult.echo !== 'Echo: Hello, World!') { - throw new Error(`Expected "Echo: Hello, World!", got "${typedResult.echo}"`); - } - if (typeof typedResult.timestamp !== 'number') { - throw new Error(`Expected timestamp to be number, got ${typeof typedResult.timestamp}`); - } - console.log(` ✅ Agent executed successfully: ${typedResult.echo}\n`); - passed++; - } catch (error) { - console.error(' ❌ Failed:', (error as Error).message, '\n'); - failed++; - } - - // Test 3: ctx.run() without input - console.log('Test 3: ctx.run() with agent without input'); - try { - const ctx = createAgentContext(); - const result = await ctx.run(statusAgent); - - if (!result) { - throw new Error('ctx.run() returned null'); - } - const typedResult = result as { status: string; uptime: number }; - if (typedResult.status !== 'ok') { - throw new Error(`Expected status "ok", got "${typedResult.status}"`); - } - if (typeof typedResult.uptime !== 'number') { - throw new Error(`Expected uptime to be number, got ${typeof typedResult.uptime}`); - } - console.log(` ✅ Agent executed successfully: status=${typedResult.status}\n`); - passed++; - } catch (error) { - console.error(' ❌ Failed:', (error as Error).message, '\n'); - failed++; - } - - // Test 4: Context with options - console.log('Test 4: createAgentContext() with trigger option'); - try { - const ctx = createAgentContext({ trigger: 'cron' }); - const result = await ctx.run(echoAgent, { message: 'Cron triggered' }); - - const typedResult = result as { echo: string }; - if (typedResult.echo !== 'Echo: Cron triggered') { - throw new Error(`Expected "Echo: Cron triggered", got "${typedResult.echo}"`); - } - console.log(` ✅ Context with options works: ${typedResult.echo}\n`); - passed++; - } catch (error) { - console.error(' ❌ Failed:', (error as Error).message, '\n'); - failed++; - } - - // Test 5: Multiple ctx.run() calls on same context - console.log('Test 5: Multiple ctx.run() calls on same context'); - try { - const ctx = createAgentContext(); - const result1 = await ctx.run(echoAgent, { message: 'First' }); - const result2 = await ctx.run(echoAgent, { message: 'Second' }); - const result3 = await ctx.run(statusAgent); - - const r1 = result1 as { echo: string }; - const r2 = result2 as { echo: string }; - const r3 = result3 as { status: string }; - - if (r1.echo !== 'Echo: First') { - throw new Error(`First call failed: ${r1.echo}`); - } - if (r2.echo !== 'Echo: Second') { - throw new Error(`Second call failed: ${r2.echo}`); - } - if (r3.status !== 'ok') { - throw new Error(`Third call failed: ${r3.status}`); - } - console.log(' ✅ Multiple calls on same context work\n'); - passed++; - } catch (error) { - console.error(' ❌ Failed:', (error as Error).message, '\n'); - failed++; - } - - // Summary - console.log('━'.repeat(50)); - console.log(`\n📊 Results: ${passed} passed, ${failed} failed\n`); - - if (failed > 0) { - console.log('❌ Some tests failed!\n'); - process.exit(1); - } else { - console.log('✅ All tests passed!\n'); - process.exit(0); - } -} - -// Run tests -runTests().catch((error) => { - console.error('❌ Unexpected error:', error); - process.exit(1); -}); diff --git a/apps/testing/standalone-agent/package.json b/apps/testing/standalone-agent/package.json deleted file mode 100644 index 49c6e3d7a..000000000 --- a/apps/testing/standalone-agent/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "standalone-agent-test", - "version": "0.0.1", - "license": "Apache-2.0", - "private": true, - "type": "module", - "scripts": { - "start": "bun run index.ts", - "test": "bun run index.ts", - "typecheck": "bunx tsc --noEmit" - }, - "dependencies": { - "@agentuity/core": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*" - }, - "devDependencies": { - "@types/bun": "latest" - } -} diff --git a/apps/testing/standalone-backend/package.json b/apps/testing/standalone-backend/package.json new file mode 100644 index 000000000..52d0725fd --- /dev/null +++ b/apps/testing/standalone-backend/package.json @@ -0,0 +1,21 @@ +{ + "name": "standalone-backend", + "version": "0.0.1", + "license": "Apache-2.0", + "private": true, + "type": "module", + "scripts": { + "dev": "bun --hot src/index.ts", + "build": "bun build src/index.ts --outdir dist --target node", + "start": "node dist/index.js", + "test": "bun test", + "typecheck": "bunx tsc --noEmit" + }, + "dependencies": { + "hono": "^4.7.13" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5" + } +} diff --git a/apps/testing/standalone-backend/src/index.ts b/apps/testing/standalone-backend/src/index.ts new file mode 100644 index 000000000..a00fe75d7 --- /dev/null +++ b/apps/testing/standalone-backend/src/index.ts @@ -0,0 +1,30 @@ +/** + * Standalone Backend + * + * A bare-minimum Hono server — the simplest thing you can deploy on Agentuity. + * No agents, no runtime, no framework magic. Just an HTTP server. + */ + +import { Hono } from 'hono'; + +const app = new Hono(); + +app.get('/', (c) => { + return c.json({ status: 'ok', timestamp: new Date().toISOString() }); +}); + +app.get('/health', (c) => { + return c.json({ healthy: true, uptime: process.uptime() }); +}); + +app.post('/echo', async (c) => { + const body = await c.req.json(); + return c.json({ echo: body, receivedAt: new Date().toISOString() }); +}); + +const port = parseInt(process.env.PORT || '3000', 10); + +export default { + port, + fetch: app.fetch, +}; diff --git a/apps/testing/standalone-backend/test/index.test.ts b/apps/testing/standalone-backend/test/index.test.ts new file mode 100644 index 000000000..c36f2a23d --- /dev/null +++ b/apps/testing/standalone-backend/test/index.test.ts @@ -0,0 +1,51 @@ +import { describe, test, expect } from 'bun:test'; +import app from '../src/index'; + +describe('standalone-backend', () => { + test('GET / returns status', async () => { + const res = await app.fetch(new Request('http://localhost/')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.status).toBe('ok'); + expect(body.timestamp).toBeDefined(); + }); + + test('GET /health returns healthy', async () => { + const res = await app.fetch(new Request('http://localhost/health')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.healthy).toBe(true); + expect(typeof body.uptime).toBe('number'); + }); + + test('POST /echo returns body', async () => { + const res = await app.fetch( + new Request('http://localhost/echo', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ message: 'hello' }), + }) + ); + expect(res.status).toBe(200); + const body = await res.json(); + expect(body.echo.message).toBe('hello'); + expect(body.receivedAt).toBeDefined(); + }); +}); + +describe.skip('deploy', () => { + // These tests require the backend to support launch.json-based deployments. + // Enable once the backend reads launch.json from the deployment bundle. + + test('agentuity build produces valid output', async () => { + // TODO: Run `agentuity build`, verify launch.json, Procfile, .agentuity-build + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify the app is reachable + }); + + test('deployed app responds to health check', async () => { + // TODO: Hit the deployed /health endpoint + }); +}); diff --git a/apps/testing/standalone-agent/tsconfig.json b/apps/testing/standalone-backend/tsconfig.json similarity index 55% rename from apps/testing/standalone-agent/tsconfig.json rename to apps/testing/standalone-backend/tsconfig.json index b6206fabd..d4ca1840b 100644 --- a/apps/testing/standalone-agent/tsconfig.json +++ b/apps/testing/standalone-backend/tsconfig.json @@ -1,19 +1,15 @@ { "compilerOptions": { + "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", - "strict": true, "esModuleInterop": true, "skipLibCheck": true, - "noEmit": true, - "resolveJsonModule": true, - "declaration": true, - "declarationMap": true, "outDir": "dist", - "rootDir": ".", + "rootDir": "src", "types": ["bun"] }, - "include": ["*.ts"], - "exclude": ["node_modules", "dist"] + "include": ["src"], + "exclude": ["node_modules", "dist", "test"] } diff --git a/apps/testing/svelte-web/.gitignore b/apps/testing/svelte-web/.gitignore deleted file mode 100644 index 199e19e5c..000000000 --- a/apps/testing/svelte-web/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.agents -.agentuity/ -node_modules/ -.env -.env.local -src/web/AGENTS.md -src/api/AGENTS.md -src/agent/AGENTS.md diff --git a/apps/testing/svelte-web/app.ts b/apps/testing/svelte-web/app.ts deleted file mode 100644 index 704be4231..000000000 --- a/apps/testing/svelte-web/app.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from '@agentuity/runtime'; -import router from './src/api/index'; -import hello from './src/agent/hello/agent'; - -const app = await createApp({ - router: { path: '/api', router }, - agents: [hello], -}); - -export default app; diff --git a/apps/testing/svelte-web/package.json b/apps/testing/svelte-web/package.json index 6c103b9af..b00522b7c 100644 --- a/apps/testing/svelte-web/package.json +++ b/apps/testing/svelte-web/package.json @@ -1,14 +1,15 @@ { - "name": "svelte-web-tests", + "name": "svelte-web", "version": "0.0.1", "license": "Apache-2.0", "private": true, "type": "module", - "description": "Svelte web framework test for Agentuity SDK", "scripts": { - "build": "bun ../../../packages/cli/bin/cli.ts build --dir .", - "dev": "DEVMODE_SYNC_SERVICE_MOCK=true bun ../../../packages/cli/bin/cli.ts dev --dir . --port 3500 --local --no-public --no-interactive", - "typecheck": "bunx svelte-check --tsconfig tsconfig.json" + "dev": "vite dev", + "build": "vite build", + "start": "node build/index.js", + "test": "bun test", + "typecheck": "svelte-check --tsconfig ./tsconfig.json" }, "dependencies": { "@agentuity/cli": "workspace:*", @@ -21,7 +22,6 @@ "svelte": "^5.54.0" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^6.2.4", "@types/bun": "latest", "svelte-check": "^4.4.5", "vite": "^7.3.1" diff --git a/apps/testing/svelte-web/src/agent/hello/agent.ts b/apps/testing/svelte-web/src/agent/hello/agent.ts deleted file mode 100644 index e38d67a2f..000000000 --- a/apps/testing/svelte-web/src/agent/hello/agent.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('hello', { - description: 'A simple hello agent for Svelte framework testing', - schema: { - input: s.object({ - name: s.string(), - }), - output: s.string(), - }, - handler: async (_c, { name }) => { - return `Hello from Svelte, ${name}!`; - }, -}); - -export default agent; diff --git a/apps/testing/svelte-web/src/api/index.ts b/apps/testing/svelte-web/src/api/index.ts deleted file mode 100644 index c4e040e70..000000000 --- a/apps/testing/svelte-web/src/api/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createRouter } from '@agentuity/runtime'; -import hello from '../agent/hello/agent'; - -const api = createRouter(); - -api.post('/hello', hello.validator(), async (c) => { - const data = c.req.valid('json'); - const result = await hello.run(data); - return c.json(result); -}); - -export default api; diff --git a/apps/testing/svelte-web/src/app.html b/apps/testing/svelte-web/src/app.html new file mode 100644 index 000000000..f1612538f --- /dev/null +++ b/apps/testing/svelte-web/src/app.html @@ -0,0 +1,11 @@ + + + + + + %sveltekit.head% + + + %sveltekit.body% + + diff --git a/apps/testing/svelte-web/src/generated/AGENTS.md b/apps/testing/svelte-web/src/generated/AGENTS.md deleted file mode 100644 index 8c9d8864a..000000000 --- a/apps/testing/svelte-web/src/generated/AGENTS.md +++ /dev/null @@ -1,23 +0,0 @@ -# AI Agent Instructions - -**CRITICAL:** Files in this directory are AUTO-GENERATED by the Agentuity build system. - -## Rules for AI Agents - -1. ❌ NEVER edit files in `src/generated/` -2. ❌ NEVER include `src/generated/` files in context when analyzing code -3. ❌ NEVER suggest changes to generated files -4. ✅ Ignore this directory when searching for user code -5. ✅ Direct users to modify source files in `src/agent/`, `src/api/`, `app.ts`, or `.env` files - -## What Gets Generated - -- `registry.ts` - Built from agent discovery in `src/agent/` -- `app.ts` - Entry point assembled from project configuration -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state) - -These files are regenerated on every `bun run build` or `bun run dev`. diff --git a/apps/testing/svelte-web/src/generated/README.md b/apps/testing/svelte-web/src/generated/README.md deleted file mode 100644 index 3f5928ce0..000000000 --- a/apps/testing/svelte-web/src/generated/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Generated Files - DO NOT EDIT - -This directory contains auto-generated TypeScript files created by the Agentuity build system. - -**These files are regenerated on every build.** Any manual changes will be overwritten. - -## Generated Files - -- `registry.ts` - Agent registry from `src/agent/**` -- `app.ts` - Application entry point -- `analytics-config.ts` - Web analytics configuration from `agentuity.json` -- `webanalytics.ts` - Web analytics injection and route registration -- `env.d.ts` - TypeScript types for environment variables from `.env` files -- `state.ts` - App state type (only generated when `setup()` returns state in `app.ts`) -- `router.ts` - Runtime wrapper with type augmentation (only generated when `setup()` returns state in `app.ts`) - -## Environment Variable Types - -The `env.d.ts` file provides TypeScript intellisense for your environment variables: - -- **ProcessEnv**: All variables from your `.env` files are typed as `string` -- **ImportMetaEnv**: Only `VITE_*`, `AGENTUITY_PUBLIC_*`, and `PUBLIC_*` prefixed variables (for client-side use) - -Files are merged based on build mode: -- **Development**: `.env.{profile}` → `.env.development` → `.env` (later files override) -- **Production**: `.env.{profile}` → `.env` → `.env.production` (later files override) - -## For Developers - -Do not modify these files. Instead: -- Add/modify agents in `src/agent/` -- Add/modify routes in `src/api/` -- Configure app in `app.ts` -- Add environment variables to `.env` files - -These files ARE version controlled to enable better tooling and type checking. diff --git a/apps/testing/svelte-web/src/routes/+page.svelte b/apps/testing/svelte-web/src/routes/+page.svelte new file mode 100644 index 000000000..379179194 --- /dev/null +++ b/apps/testing/svelte-web/src/routes/+page.svelte @@ -0,0 +1,2 @@ +

SvelteKit on Agentuity

+

A plain SvelteKit app deployed through the Agentuity buildpack pipeline.

diff --git a/apps/testing/svelte-web/src/routes/api/health/+server.ts b/apps/testing/svelte-web/src/routes/api/health/+server.ts new file mode 100644 index 000000000..f753a33a6 --- /dev/null +++ b/apps/testing/svelte-web/src/routes/api/health/+server.ts @@ -0,0 +1,5 @@ +import { json } from '@sveltejs/kit'; + +export function GET() { + return json({ status: 'ok', timestamp: new Date().toISOString() }); +} diff --git a/apps/testing/svelte-web/src/web/App.svelte b/apps/testing/svelte-web/src/web/App.svelte deleted file mode 100644 index bc6020ae5..000000000 --- a/apps/testing/svelte-web/src/web/App.svelte +++ /dev/null @@ -1,148 +0,0 @@ - - -
-
-

Welcome to Agentuity + Svelte

-

Validating non-React framework support

- -
-

Try the Hello Agent

- -
- - -
- -
- {greeting || 'Waiting for request'} -
-
-
-
- - diff --git a/apps/testing/svelte-web/src/web/index.html b/apps/testing/svelte-web/src/web/index.html deleted file mode 100644 index 294fe1a20..000000000 --- a/apps/testing/svelte-web/src/web/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Agentuity + Svelte - - - -
- - diff --git a/apps/testing/svelte-web/src/web/main.ts b/apps/testing/svelte-web/src/web/main.ts deleted file mode 100644 index 12a56a48c..000000000 --- a/apps/testing/svelte-web/src/web/main.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { mount } from 'svelte'; -import App from './App.svelte'; - -const app = mount(App, { - target: document.getElementById('app')!, -}); - -export default app; diff --git a/apps/testing/svelte-web/src/web/public/.gitkeep b/apps/testing/svelte-web/src/web/public/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/svelte-web/test/index.test.ts b/apps/testing/svelte-web/test/index.test.ts new file mode 100644 index 000000000..acc709c97 --- /dev/null +++ b/apps/testing/svelte-web/test/index.test.ts @@ -0,0 +1,18 @@ +import { describe, test, expect } from 'bun:test'; + +describe('svelte-web', () => { + test('svelte.config.js uses adapter-node', async () => { + const config = await import('../svelte.config.js'); + expect(config.default.kit.adapter).toBeDefined(); + }); +}); + +describe.skip('deploy', () => { + test('agentuity build detects SvelteKit', async () => { + // TODO: Verify launch.json framework.name + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify + }); +}); diff --git a/apps/testing/svelte-web/tsconfig.json b/apps/testing/svelte-web/tsconfig.json index ffbdbe5c4..29127d438 100644 --- a/apps/testing/svelte-web/tsconfig.json +++ b/apps/testing/svelte-web/tsconfig.json @@ -1,12 +1,13 @@ { - "extends": "../../../tsconfig.base.json", "compilerOptions": { - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "types": ["bun-types"], - "outDir": "./.agentuity", - "rootDir": ".", - "verbatimModuleSyntax": true + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "skipLibCheck": true, + "types": ["bun"] }, - "include": ["src/**/*", "src/**/*.svelte", "app.ts"], - "exclude": ["node_modules", ".agentuity"] + "include": ["src"], + "exclude": ["node_modules"] } diff --git a/apps/testing/tanstack-start/.cta.json b/apps/testing/tanstack-start/.cta.json deleted file mode 100644 index 647e7f888..000000000 --- a/apps/testing/tanstack-start/.cta.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "projectName": "tanstack-start", - "mode": "code-router", - "typescript": true, - "tailwind": true, - "packageManager": "bun", - "git": false, - "addOnOptions": {}, - "version": 1, - "framework": "react-cra", - "chosenAddOns": ["nitro"] -} diff --git a/apps/testing/tanstack-start/.gitignore b/apps/testing/tanstack-start/.gitignore deleted file mode 100644 index f6a786ce6..000000000 --- a/apps/testing/tanstack-start/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -node_modules -.DS_Store -dist -dist-ssr -*.local -count.txt -.env -.nitro -.tanstack -.wrangler -agentuity/.agentuity diff --git a/apps/testing/tanstack-start/.vscode/settings.json b/apps/testing/tanstack-start/.vscode/settings.json deleted file mode 100644 index a52535107..000000000 --- a/apps/testing/tanstack-start/.vscode/settings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "files.watcherExclude": { - "**/routeTree.gen.ts": true - }, - "search.exclude": { - "**/routeTree.gen.ts": true - }, - "files.readonlyInclude": { - "**/routeTree.gen.ts": true - } -} diff --git a/apps/testing/tanstack-start/README.md b/apps/testing/tanstack-start/README.md deleted file mode 100644 index ea660e890..000000000 --- a/apps/testing/tanstack-start/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# TanStack Start + Agentuity Integration Demo - -This application demonstrates type-safe integration between TanStack (React Router) frontend and Agentuity agent backend. - -## Architecture - -``` -tanstack-start/ -├── src/ # TanStack React frontend (port 3000) -│ ├── components/ -│ │ ├── EchoDemo.tsx # SSR-safe lazy wrapper -│ │ └── EchoDemoClient.tsx # Client component using useAPI hook -│ └── App.tsx # Main app with EchoDemo -├── agentuity/ # Agentuity agent backend (port 3500) -│ ├── src/ -│ │ ├── agent/echo/agent.ts # Echo agent with typed schemas -│ │ ├── api/index.ts # API routes -│ │ └── generated/routes.ts # Auto-generated type definitions -│ └── app.ts -├── vite.config.ts # Proxy config + path aliases -└── tsconfig.json # TypeScript path aliases -``` - -## Key Integration Points - -### 1. API Proxy (vite.config.ts) - -The Vite dev server proxies `/api/*` requests to the Agentuity backend: - -```typescript -server: { - proxy: { - '/api': { - target: 'http://localhost:3500', - changeOrigin: true, - }, - }, -}, -``` - -### 2. Type-Safe Routes (tsconfig.json paths) - -Path aliases enable importing generated route types: - -```json -{ - "paths": { - "@agentuity/routes": ["./agentuity/src/generated/routes.ts"] - } -} -``` - -### 3. Client Component (EchoDemoClient.tsx) - -The `useAPI` hook provides full type inference: - -```tsx -import { useAPI, AgentuityProvider } from '@agentuity/react'; -import '@agentuity/routes'; // Side-effect import for type augmentation - -function EchoDemoInner() { - // TypeScript knows: input = { message: string }, output = { echo: string, timestamp: string } - const { data, invoke, isLoading, error } = useAPI('POST /api/echo'); - - return ; -} -``` - -### 4. Echo Agent (agent.ts) - -Typed agent with input/output schemas: - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export const EchoInput = s.object({ - message: s.string(), -}); - -export const EchoOutput = s.object({ - echo: s.string(), - timestamp: s.string(), -}); - -const agent = createAgent('echo', { - schema: { input: EchoInput, output: EchoOutput }, - handler: async (ctx, { message }) => ({ - echo: message, - timestamp: new Date().toISOString(), - }), -}); -``` - -## Development - -```bash -# Install dependencies (from SDK root) -bun install - -# Build agent backend (generates routes.ts) -bun run build:agent - -# Run both frontend and backend concurrently -bun run dev -``` - -- Frontend: http://localhost:3000 -- Backend: http://localhost:3500 -- Workbench: http://localhost:3500/workbench - -## Type Safety Flow - -1. Agent schemas defined in `agent.ts` using `@agentuity/schema` -2. Build generates `routes.ts` with `declare module '@agentuity/frontend'` -3. Frontend imports `@agentuity/routes` (side-effect import) -4. `useAPI('POST /api/echo')` infers types from RouteRegistry augmentation -5. TypeScript validates `invoke({ message })` and `data.echo` at compile time diff --git a/apps/testing/tanstack-start/agentuity/.agents/agentuity/sdk/agent/AGENTS.md b/apps/testing/tanstack-start/agentuity/.agents/agentuity/sdk/agent/AGENTS.md deleted file mode 100644 index 3c5330d3c..000000000 --- a/apps/testing/tanstack-start/agentuity/.agents/agentuity/sdk/agent/AGENTS.md +++ /dev/null @@ -1,308 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `routes.ts` - Route registry for API, WebSocket, and SSE endpoints -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - const user = await ctx.kv.get('user:123'); - await ctx.kv.delete('user:123'); - const keys = await ctx.kv.list('user:*'); - return user; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) - - diff --git a/apps/testing/tanstack-start/agentuity/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/tanstack-start/agentuity/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index e6c32b3fb..000000000 --- a/apps/testing/tanstack-start/agentuity/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,367 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with strongly-typed route definitions and schema types -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your routes: - -```typescript -import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes'; -``` - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import myAgent from '@agent/my-agent'; - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse((c, stream) => { - stream.writeSSE({ data: 'Hello', event: 'message' }); - stream.writeSSE({ data: 'World', event: 'message' }); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/tanstack-start/agentuity/.gitignore b/apps/testing/tanstack-start/agentuity/.gitignore deleted file mode 100644 index 2673f99d1..000000000 --- a/apps/testing/tanstack-start/agentuity/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.agentuity/ -node_modules/ diff --git a/apps/testing/tanstack-start/agentuity/agentuity.config.ts b/apps/testing/tanstack-start/agentuity/agentuity.config.ts deleted file mode 100644 index 08064738e..000000000 --- a/apps/testing/tanstack-start/agentuity/agentuity.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { AgentuityConfig } from '@agentuity/cli'; - -const config: AgentuityConfig = { - workbench: { - enabled: false, - }, -}; - -export default config; diff --git a/apps/testing/tanstack-start/agentuity/app.ts b/apps/testing/tanstack-start/agentuity/app.ts deleted file mode 100644 index bf5d01248..000000000 --- a/apps/testing/tanstack-start/agentuity/app.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from '@agentuity/runtime'; -import router from './src/api/index'; - -const app = await createApp({ - router: { path: '/api', router }, -}); - -console.log(`[TanStack Start Agent] Server started: ${app.server.url}`); - -export default app; diff --git a/apps/testing/tanstack-start/agentuity/package.json b/apps/testing/tanstack-start/agentuity/package.json deleted file mode 100644 index 3ac0ad957..000000000 --- a/apps/testing/tanstack-start/agentuity/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "tanstack-start-agentuity", - "version": "0.0.1", - "license": "Apache-2.0", - "private": true, - "type": "module", - "scripts": { - "build": "bun ../../../../packages/cli/bin/cli.ts build --dir . --dev", - "dev": "bun ../../../../packages/cli/bin/cli.ts dev --dir .", - "typecheck": "bunx tsc --noEmit" - }, - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.7.13" - }, - "devDependencies": { - "@types/bun": "latest", - "@vitejs/plugin-react": "^4.5.2", - "typescript": "^5", - "vite": "^7.2.7" - } -} diff --git a/apps/testing/tanstack-start/agentuity/src/agent/AGENTS.md b/apps/testing/tanstack-start/agentuity/src/agent/AGENTS.md deleted file mode 100644 index fdac99f59..000000000 --- a/apps/testing/tanstack-start/agentuity/src/agent/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/agent/AGENTS.md](../../.agents/agentuity/sdk/agent/AGENTS.md) for Agentuity agent development guidelines. diff --git a/apps/testing/tanstack-start/agentuity/src/agent/echo/agent.ts b/apps/testing/tanstack-start/agentuity/src/agent/echo/agent.ts deleted file mode 100644 index 13b03f8b8..000000000 --- a/apps/testing/tanstack-start/agentuity/src/agent/echo/agent.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export const EchoInput = s.object({ - message: s.string().describe('The message to echo back'), -}); - -export const EchoOutput = s.object({ - echo: s.string().describe('The echoed message'), - timestamp: s.string().describe('ISO timestamp when the echo was processed'), -}); - -const agent = createAgent('echo', { - description: 'A simple echo agent that returns the message with a timestamp', - schema: { - input: EchoInput, - output: EchoOutput, - }, - handler: async (ctx, { message }) => { - ctx.logger.info('Echo request received', { message }); - - return { - echo: message, - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; diff --git a/apps/testing/tanstack-start/agentuity/src/api/AGENTS.md b/apps/testing/tanstack-start/agentuity/src/api/AGENTS.md deleted file mode 100644 index 9baa40cc7..000000000 --- a/apps/testing/tanstack-start/agentuity/src/api/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/api/AGENTS.md](../../.agents/agentuity/sdk/api/AGENTS.md) for Agentuity api development guidelines. diff --git a/apps/testing/tanstack-start/agentuity/src/api/index.ts b/apps/testing/tanstack-start/agentuity/src/api/index.ts deleted file mode 100644 index ece63a64e..000000000 --- a/apps/testing/tanstack-start/agentuity/src/api/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Hono } from 'hono'; -import type { Env } from '@agentuity/runtime'; -import echoAgent from '../agent/echo/agent'; - -const api = new Hono().post('/echo', echoAgent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json(await echoAgent.run(data)); -}); - -export type ApiRouter = typeof api; - -export default api; diff --git a/apps/testing/tanstack-start/agentuity/tsconfig.json b/apps/testing/tanstack-start/agentuity/tsconfig.json deleted file mode 100644 index e6669c857..000000000 --- a/apps/testing/tanstack-start/agentuity/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./.agentuity", - "rootDir": ".", - "allowImportingTsExtensions": true, - "noEmit": true, - "jsx": "react-jsx", - "lib": ["ESNext", "DOM"], - "types": ["bun-types"], - "skipLibCheck": true, - "paths": { - "@agents/*": ["./src/agent/*"] - } - }, - "include": ["src/**/*", "app.ts", ".agentuity/.agentuity_types.ts"], - "exclude": ["node_modules", ".agentuity", "src/generated/routes.ts"] -} diff --git a/apps/testing/tanstack-start/index.html b/apps/testing/tanstack-start/index.html deleted file mode 100644 index 5282df1f3..000000000 --- a/apps/testing/tanstack-start/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - Create TanStack App - tanstack-start - - -
- - - diff --git a/apps/testing/tanstack-start/package.json b/apps/testing/tanstack-start/package.json index fc0f234e3..a580fe978 100644 --- a/apps/testing/tanstack-start/package.json +++ b/apps/testing/tanstack-start/package.json @@ -1,17 +1,15 @@ { - "name": "tanstack-start", + "name": "tanstack-start-app", + "version": "0.0.1", + "license": "Apache-2.0", "private": true, "type": "module", "scripts": { - "dev": "concurrently -n web,agent -c blue,cyan \"bun run dev:web\" \"bun run dev:agent\"", - "dev:web": "vite --port 3000", - "dev:agent": "cd agentuity && bun ../../../../packages/cli/bin/cli.ts dev --dir .", - "build": "concurrently \"bun run build:web\" \"bun run build:agent\"", - "build:web": "vite build && tsc", - "build:agent": "cd agentuity && bun ../../../../packages/cli/bin/cli.ts build --dir . --dev", - "preview": "vite preview", - "test": "vitest run", - "typecheck": "tsc --noEmit" + "dev": "vite --port 3000", + "build": "vite build", + "start": "node dist/server/index.mjs", + "test": "bun test", + "typecheck": "bunx tsc --noEmit" }, "dependencies": { "@agentuity/core": "workspace:*", @@ -25,21 +23,12 @@ "lucide-react": "^0.545.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "tailwindcss": "^4.0.6" + "vite": "^7.1.7" }, "devDependencies": { - "@tanstack/devtools-vite": "^0.3.11", - "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.2.0", - "@types/node": "^22.10.2", + "@types/bun": "latest", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^5.0.4", - "concurrently": "^8.2.2", - "jsdom": "^27.0.0", - "typescript": "^5.7.2", - "vite": "^7.1.7", - "vitest": "^3.0.5", - "web-vitals": "^5.1.0" + "typescript": "^5" } } diff --git a/apps/testing/tanstack-start/public/favicon.ico b/apps/testing/tanstack-start/public/favicon.ico deleted file mode 100644 index a11777cc4..000000000 Binary files a/apps/testing/tanstack-start/public/favicon.ico and /dev/null differ diff --git a/apps/testing/tanstack-start/public/logo192.png b/apps/testing/tanstack-start/public/logo192.png deleted file mode 100644 index fc44b0a37..000000000 Binary files a/apps/testing/tanstack-start/public/logo192.png and /dev/null differ diff --git a/apps/testing/tanstack-start/public/logo512.png b/apps/testing/tanstack-start/public/logo512.png deleted file mode 100644 index a4e47a654..000000000 Binary files a/apps/testing/tanstack-start/public/logo512.png and /dev/null differ diff --git a/apps/testing/tanstack-start/public/manifest.json b/apps/testing/tanstack-start/public/manifest.json deleted file mode 100644 index 4d9581b97..000000000 --- a/apps/testing/tanstack-start/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "TanStack App", - "name": "Create TanStack App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/apps/testing/tanstack-start/public/robots.txt b/apps/testing/tanstack-start/public/robots.txt deleted file mode 100644 index e9e57dc4d..000000000 --- a/apps/testing/tanstack-start/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/apps/testing/tanstack-start/public/tanstack-circle-logo.png b/apps/testing/tanstack-start/public/tanstack-circle-logo.png deleted file mode 100644 index 9db3e67ba..000000000 Binary files a/apps/testing/tanstack-start/public/tanstack-circle-logo.png and /dev/null differ diff --git a/apps/testing/tanstack-start/public/tanstack-word-logo-white.svg b/apps/testing/tanstack-start/public/tanstack-word-logo-white.svg deleted file mode 100644 index b6ec5086c..000000000 --- a/apps/testing/tanstack-start/public/tanstack-word-logo-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/testing/tanstack-start/src/App.test.tsx b/apps/testing/tanstack-start/src/App.test.tsx deleted file mode 100644 index c308906ad..000000000 --- a/apps/testing/tanstack-start/src/App.test.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { describe, expect, test } from 'vitest'; -import { render, screen } from '@testing-library/react'; -import App from './App.tsx'; - -describe('App', () => { - test('renders', () => { - render(); - expect(screen.getByText('Learn React')).toBeDefined(); - }); -}); diff --git a/apps/testing/tanstack-start/src/App.tsx b/apps/testing/tanstack-start/src/App.tsx deleted file mode 100644 index a5dfe52e6..000000000 --- a/apps/testing/tanstack-start/src/App.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { EchoDemo } from './components/EchoDemo'; - -function App() { - return ; -} - -export default App; diff --git a/apps/testing/tanstack-start/src/components/EchoDemo.tsx b/apps/testing/tanstack-start/src/components/EchoDemo.tsx deleted file mode 100644 index aa75ceb0f..000000000 --- a/apps/testing/tanstack-start/src/components/EchoDemo.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useState, useEffect, lazy, Suspense } from 'react'; - -const EchoDemoClient = lazy(() => import('./EchoDemoClient')); - -export function EchoDemo() { - const [isClient, setIsClient] = useState(false); - - useEffect(() => { - setIsClient(true); - }, []); - - if (!isClient) { - return ( -
-

Loading Echo Demo...

-
- ); - } - - return ( - -

Loading Echo Demo...

-
- } - > - - - ); -} diff --git a/apps/testing/tanstack-start/src/components/EchoDemoClient.tsx b/apps/testing/tanstack-start/src/components/EchoDemoClient.tsx deleted file mode 100644 index 8e8101909..000000000 --- a/apps/testing/tanstack-start/src/components/EchoDemoClient.tsx +++ /dev/null @@ -1,369 +0,0 @@ -import { useState } from 'react'; -import { hc } from 'hono/client'; -import type { InferResponseType } from 'hono/client'; -import type { ApiRouter } from '../../agentuity/src/api/index'; - -const client = hc('/api'); -const $post = client.echo.$post; -type EchoResponse = InferResponseType; - -function AgentuityLogo() { - return ( - - ); -} - -function TanStackLogo() { - return ( - TanStack Logo - ); -} - -function EchoDemoInner() { - const [message, setMessage] = useState('Hello from TanStack Start!'); - const [data, setData] = useState<{ echo: string; timestamp: string } | null>(null); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - - const invoke = async (input: { message: string }) => { - setIsLoading(true); - setError(null); - try { - const res = await $post({ json: input }); - if (!res.ok) { - throw new Error(`Echo request failed with ${res.status}`); - } - const data: EchoResponse = await res.json(); - setData(data); - } catch (e) { - setError(e instanceof Error ? e : new Error(String(e))); - } finally { - setIsLoading(false); - } - }; - - return ( -
-
-
-
- - + - -
- -

Agentuity + TanStack

-

End-to-end type-safe API integration demo

-
- -
-

- Try the Echo Agent -

- -
- setMessage(e.target.value)} - placeholder="Enter a message..." - type="text" - value={message} - /> - -
-
-
- -
-
- - {error &&
Error: {error.message}
} - -
- {data ? ( - <> -
- Echo: {data.echo} -
-
- Timestamp: {data.timestamp} -
- - ) : ( - 'Waiting for request' - )} -
-
- -
-

Type Safety Demo

-
- {`const client = hc('/api'); -const res = await client.echo.$post({ json: { message } }); -const data = await res.json(); -// TypeScript knows: data.echo, data.timestamp`} -
-
-
- - -
- ); -} - -export default function EchoDemoClient() { - return ; -} diff --git a/apps/testing/tanstack-start/src/components/Header.tsx b/apps/testing/tanstack-start/src/components/Header.tsx deleted file mode 100644 index 53a3055b3..000000000 --- a/apps/testing/tanstack-start/src/components/Header.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { Link } from '@tanstack/react-router'; - -import { useState } from 'react'; -import { Home, Menu, X } from 'lucide-react'; - -export default function Header() { - const [isOpen, setIsOpen] = useState(false); - - return ( - <> -
- -

- - TanStack Logo - -

-
- - - - ); -} diff --git a/apps/testing/tanstack-start/src/logo.svg b/apps/testing/tanstack-start/src/logo.svg deleted file mode 100644 index fe53fe8d0..000000000 --- a/apps/testing/tanstack-start/src/logo.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - logo - - \ No newline at end of file diff --git a/apps/testing/tanstack-start/src/main.tsx b/apps/testing/tanstack-start/src/main.tsx deleted file mode 100644 index fe4327d5f..000000000 --- a/apps/testing/tanstack-start/src/main.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { StrictMode } from 'react'; -import ReactDOM from 'react-dom/client'; -import { - Outlet, - RouterProvider, - createRootRoute, - createRoute, - createRouter, -} from '@tanstack/react-router'; -import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'; - -import './styles.css'; -import reportWebVitals from './reportWebVitals.ts'; - -import App from './App.tsx'; - -const rootRoute = createRootRoute({ - component: () => ( - <> - - - - ), -}); - -const indexRoute = createRoute({ - getParentRoute: () => rootRoute, - path: '/', - component: App, -}); - -const routeTree = rootRoute.addChildren([indexRoute]); - -const router = createRouter({ - routeTree, - context: {}, - defaultPreload: 'intent', - scrollRestoration: true, - defaultStructuralSharing: true, - defaultPreloadStaleTime: 0, -}); - -declare module '@tanstack/react-router' { - interface Register { - router: typeof router; - } -} - -const rootElement = document.getElementById('app'); -if (rootElement && !rootElement.innerHTML) { - const root = ReactDOM.createRoot(rootElement); - root.render( - - - - ); -} - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/apps/testing/tanstack-start/src/reportWebVitals.ts b/apps/testing/tanstack-start/src/reportWebVitals.ts deleted file mode 100644 index 186271666..000000000 --- a/apps/testing/tanstack-start/src/reportWebVitals.ts +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = (onPerfEntry?: () => void) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ onCLS, onINP, onFCP, onLCP, onTTFB }) => { - onCLS(onPerfEntry); - onINP(onPerfEntry); - onFCP(onPerfEntry); - onLCP(onPerfEntry); - onTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/apps/testing/tanstack-start/src/routes/index.tsx b/apps/testing/tanstack-start/src/routes/index.tsx new file mode 100644 index 000000000..8dab84cbc --- /dev/null +++ b/apps/testing/tanstack-start/src/routes/index.tsx @@ -0,0 +1,8 @@ +export default function Home() { + return ( +
+

TanStack Start on Agentuity

+

A plain TanStack Start app deployed through the Agentuity buildpack pipeline.

+
+ ); +} diff --git a/apps/testing/tanstack-start/src/styles.css b/apps/testing/tanstack-start/src/styles.css deleted file mode 100644 index 89be6093a..000000000 --- a/apps/testing/tanstack-start/src/styles.css +++ /dev/null @@ -1,15 +0,0 @@ -@import "tailwindcss"; - -body { - @apply m-0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", - "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", - monospace; -} diff --git a/apps/testing/tanstack-start/test/index.test.ts b/apps/testing/tanstack-start/test/index.test.ts new file mode 100644 index 000000000..23a72e146 --- /dev/null +++ b/apps/testing/tanstack-start/test/index.test.ts @@ -0,0 +1,24 @@ +import { describe, test, expect } from 'bun:test'; +import { existsSync } from 'fs'; + +describe('tanstack-start', () => { + test('project has package.json with tanstack deps', async () => { + const pkg = await import('../package.json'); + expect(pkg.dependencies['@tanstack/start']).toBeDefined(); + expect(pkg.dependencies['@tanstack/react-router']).toBeDefined(); + }); + + test('src/routes/index.tsx exists', () => { + expect(existsSync('src/routes/index.tsx')).toBe(true); + }); +}); + +describe.skip('deploy', () => { + test('agentuity build detects TanStack Start', async () => { + // TODO: Verify launch.json framework detection + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify + }); +}); diff --git a/apps/testing/tanstack-start/tsconfig.json b/apps/testing/tanstack-start/tsconfig.json index 3271950c0..4f6d8157f 100644 --- a/apps/testing/tanstack-start/tsconfig.json +++ b/apps/testing/tanstack-start/tsconfig.json @@ -1,29 +1,14 @@ { - "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.ts"], - "exclude": ["node_modules", "agentuity"], "compilerOptions": { - "target": "ES2022", - "jsx": "react-jsx", + "strict": true, + "target": "ESNext", "module": "ESNext", - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "types": ["vite/client"], "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, + "esModuleInterop": true, "skipLibCheck": true, - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true, - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"], - "@agentuity/routes": ["./agentuity/src/generated/routes.ts"], - "@agentuity/react": ["../../../packages/react"], - "@agentuity/core": ["../../../packages/core"], - "@agentuity/frontend": ["../../../packages/frontend"] - } - } + "jsx": "react-jsx", + "types": ["bun"] + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "test"] } diff --git a/apps/testing/tanstack-start/vite.config.ts b/apps/testing/tanstack-start/vite.config.ts deleted file mode 100644 index b4bf1902d..000000000 --- a/apps/testing/tanstack-start/vite.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { defineConfig } from 'vite'; -import { devtools } from '@tanstack/devtools-vite'; -import viteReact from '@vitejs/plugin-react'; -import tailwindcss from '@tailwindcss/vite'; -import { fileURLToPath, URL } from 'node:url'; - -export default defineConfig({ - plugins: [devtools(), viteReact(), tailwindcss()], - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)), - '@agentuity/routes': fileURLToPath( - new URL('./agentuity/src/generated/routes.ts', import.meta.url) - ), - '@agentuity/react': fileURLToPath(new URL('../../../packages/react', import.meta.url)), - '@agentuity/core': fileURLToPath(new URL('../../../packages/core', import.meta.url)), - '@agentuity/frontend': fileURLToPath( - new URL('../../../packages/frontend', import.meta.url) - ), - }, - }, - server: { - proxy: { - '/api': { - target: 'http://localhost:3500', - changeOrigin: true, - }, - }, - }, -}); diff --git a/apps/testing/cloud-deployment/src/web/index.html b/apps/testing/vite-react-app/index.html similarity index 55% rename from apps/testing/cloud-deployment/src/web/index.html rename to apps/testing/vite-react-app/index.html index bd6d8b70f..b1382f176 100644 --- a/apps/testing/cloud-deployment/src/web/index.html +++ b/apps/testing/vite-react-app/index.html @@ -1,12 +1,12 @@ - - - Cloud Deployment Test - + + + Vite React App
+ diff --git a/apps/testing/vite-react-app/package.json b/apps/testing/vite-react-app/package.json new file mode 100644 index 000000000..9478a7ca1 --- /dev/null +++ b/apps/testing/vite-react-app/package.json @@ -0,0 +1,26 @@ +{ + "name": "vite-react-app", + "version": "0.0.1", + "license": "Apache-2.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port 3000", + "build": "vite build", + "start": "vite preview", + "test": "bun test", + "typecheck": "bunx tsc --noEmit" + }, + "dependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@types/bun": "latest", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^4.5.2", + "typescript": "^5", + "vite": "^7.1.7" + } +} diff --git a/apps/testing/vite-react-app/src/App.tsx b/apps/testing/vite-react-app/src/App.tsx new file mode 100644 index 000000000..69a451e7a --- /dev/null +++ b/apps/testing/vite-react-app/src/App.tsx @@ -0,0 +1,8 @@ +export function App() { + return ( +
+

Vite React on Agentuity

+

A plain Vite React app deployed through the Agentuity buildpack pipeline.

+
+ ); +} diff --git a/apps/testing/vite-react-app/src/main.tsx b/apps/testing/vite-react-app/src/main.tsx new file mode 100644 index 000000000..1c773831a --- /dev/null +++ b/apps/testing/vite-react-app/src/main.tsx @@ -0,0 +1,4 @@ +import { createRoot } from 'react-dom/client'; +import { App } from './App'; + +createRoot(document.getElementById('root')!).render(); diff --git a/apps/testing/vite-react-app/test/index.test.ts b/apps/testing/vite-react-app/test/index.test.ts new file mode 100644 index 000000000..5791e34a6 --- /dev/null +++ b/apps/testing/vite-react-app/test/index.test.ts @@ -0,0 +1,24 @@ +import { describe, test, expect } from 'bun:test'; +import { existsSync } from 'fs'; + +describe('vite-react-app', () => { + test('index.html exists', () => { + expect(existsSync('index.html')).toBe(true); + }); + + test('vite.config.ts has react plugin', async () => { + const config = await import('../vite.config.ts'); + expect(config.default).toBeDefined(); + }); +}); + +describe.skip('deploy', () => { + test('agentuity build detects Vite and injects static server', async () => { + // TODO: Verify launch.json framework.name === 'vite' + // TODO: Verify _serve.js is injected (static app, no start command) + }); + + test('agentuity deploy succeeds', async () => { + // TODO: Deploy and verify + }); +}); diff --git a/apps/testing/vite-react-app/tsconfig.json b/apps/testing/vite-react-app/tsconfig.json new file mode 100644 index 000000000..4f6d8157f --- /dev/null +++ b/apps/testing/vite-react-app/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "types": ["bun"] + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "test"] +} diff --git a/apps/testing/vite-react-app/vite.config.ts b/apps/testing/vite-react-app/vite.config.ts new file mode 100644 index 000000000..3ccce877a --- /dev/null +++ b/apps/testing/vite-react-app/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], +}); diff --git a/apps/testing/vite-rsc-app/.gitignore b/apps/testing/vite-rsc-app/.gitignore deleted file mode 100644 index e4593323f..000000000 --- a/apps/testing/vite-rsc-app/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -dist -node_modules -agentuity/.agentuity -.env*.local -.vite diff --git a/apps/testing/vite-rsc-app/agentuity/.agents/agentuity/sdk/agent/AGENTS.md b/apps/testing/vite-rsc-app/agentuity/.agents/agentuity/sdk/agent/AGENTS.md deleted file mode 100644 index c33561f27..000000000 --- a/apps/testing/vite-rsc-app/agentuity/.agents/agentuity/sdk/agent/AGENTS.md +++ /dev/null @@ -1,308 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `routes.ts` - Route registry for API, WebSocket, and SSE endpoints -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - ctx.logger.info('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - const user = await ctx.kv.get('user:123'); - await ctx.kv.delete('user:123'); - const keys = await ctx.kv.list('user:*'); - return user; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) - - diff --git a/apps/testing/vite-rsc-app/agentuity/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/vite-rsc-app/agentuity/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index d1efa51a1..000000000 --- a/apps/testing/vite-rsc-app/agentuity/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,374 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with strongly-typed route definitions and schema types -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your routes: - -```typescript -import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes'; -``` - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -```text -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result instanceof Promise) { - throw new TypeError('Schema validation must be synchronous'); - } - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file') as File | null; - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse(async (c, stream) => { - await stream.writeSSE({ data: 'Hello', event: 'message' }); - await stream.writeSSE({ data: 'World', event: 'message' }); - stream.close(); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/vite-rsc-app/agentuity/.gitignore b/apps/testing/vite-rsc-app/agentuity/.gitignore deleted file mode 100644 index ba5698ff9..000000000 --- a/apps/testing/vite-rsc-app/agentuity/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.agentuity -node_modules diff --git a/apps/testing/vite-rsc-app/agentuity/agentuity.config.ts b/apps/testing/vite-rsc-app/agentuity/agentuity.config.ts deleted file mode 100644 index 0a57e84ba..000000000 --- a/apps/testing/vite-rsc-app/agentuity/agentuity.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { AgentuityConfig } from '@agentuity/cli'; - -const config: AgentuityConfig = {}; - -export default config; diff --git a/apps/testing/vite-rsc-app/agentuity/app.ts b/apps/testing/vite-rsc-app/agentuity/app.ts deleted file mode 100644 index 92888fca0..000000000 --- a/apps/testing/vite-rsc-app/agentuity/app.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from '@agentuity/runtime'; -import router from './src/api/index'; - -const app = await createApp({ - router: { path: '/api', router }, -}); - -console.log(`[Vite-RSC-App] Agentuity server started: ${app.server.url}`); - -export default app; diff --git a/apps/testing/vite-rsc-app/agentuity/package.json b/apps/testing/vite-rsc-app/agentuity/package.json deleted file mode 100644 index 568f6e8ff..000000000 --- a/apps/testing/vite-rsc-app/agentuity/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "vite-rsc-app-agentuity", - "version": "0.0.1", - "private": true, - "type": "module", - "scripts": { - "dev": "bun ../../../../packages/cli/bin/cli.ts dev --dir .", - "build": "bun ../../../../packages/cli/bin/cli.ts build --dir . --dev", - "typecheck": "bunx tsc --noEmit" - }, - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.7.13" - }, - "devDependencies": { - "@types/bun": "latest", - "@vitejs/plugin-react": "^4.5.2", - "typescript": "^5", - "vite": "^7.2.7" - } -} diff --git a/apps/testing/vite-rsc-app/agentuity/src/agent/AGENTS.md b/apps/testing/vite-rsc-app/agentuity/src/agent/AGENTS.md deleted file mode 100644 index fdac99f59..000000000 --- a/apps/testing/vite-rsc-app/agentuity/src/agent/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/agent/AGENTS.md](../../.agents/agentuity/sdk/agent/AGENTS.md) for Agentuity agent development guidelines. diff --git a/apps/testing/vite-rsc-app/agentuity/src/agent/echo/agent.ts b/apps/testing/vite-rsc-app/agentuity/src/agent/echo/agent.ts deleted file mode 100644 index 4f8dc563a..000000000 --- a/apps/testing/vite-rsc-app/agentuity/src/agent/echo/agent.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const echoAgent = createAgent('echo', { - description: 'Echoes back the input message with a timestamp', - schema: { - input: s.object({ - message: s.string(), - }), - output: s.object({ - echo: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, input) => { - ctx.logger.info('Echo agent received message', { message: input.message }); - - return { - echo: input.message, - timestamp: new Date().toISOString(), - }; - }, -}); - -export default echoAgent; diff --git a/apps/testing/vite-rsc-app/agentuity/src/api/AGENTS.md b/apps/testing/vite-rsc-app/agentuity/src/api/AGENTS.md deleted file mode 100644 index 9baa40cc7..000000000 --- a/apps/testing/vite-rsc-app/agentuity/src/api/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -See [.agents/agentuity/sdk/api/AGENTS.md](../../.agents/agentuity/sdk/api/AGENTS.md) for Agentuity api development guidelines. diff --git a/apps/testing/vite-rsc-app/agentuity/src/api/index.ts b/apps/testing/vite-rsc-app/agentuity/src/api/index.ts deleted file mode 100644 index ee21ed335..000000000 --- a/apps/testing/vite-rsc-app/agentuity/src/api/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { isStructuredError } from '@agentuity/core'; -import { Hono } from 'hono'; -import type { Env } from '@agentuity/runtime'; -import echoAgent from '@agents/echo/agent'; - -const router = new Hono() - .get('/health', (c) => { - return c.json({ status: 'ok', timestamp: new Date().toISOString() }); - }) - .post('/echo', echoAgent.validator(), async (c) => { - try { - const input = c.req.valid('json'); - const result = await echoAgent.run(input); - return c.json(result); - } catch (error) { - const message = isStructuredError(error) - ? error.message - : error instanceof Error - ? error.message - : String(error); - return c.json({ success: false, error: message }, 500); - } - }); - -export type ApiRouter = typeof router; - -export default router; diff --git a/apps/testing/vite-rsc-app/agentuity/tsconfig.json b/apps/testing/vite-rsc-app/agentuity/tsconfig.json deleted file mode 100644 index e6669c857..000000000 --- a/apps/testing/vite-rsc-app/agentuity/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "./.agentuity", - "rootDir": ".", - "allowImportingTsExtensions": true, - "noEmit": true, - "jsx": "react-jsx", - "lib": ["ESNext", "DOM"], - "types": ["bun-types"], - "skipLibCheck": true, - "paths": { - "@agents/*": ["./src/agent/*"] - } - }, - "include": ["src/**/*", "app.ts", ".agentuity/.agentuity_types.ts"], - "exclude": ["node_modules", ".agentuity", "src/generated/routes.ts"] -} diff --git a/apps/testing/vite-rsc-app/package.json b/apps/testing/vite-rsc-app/package.json deleted file mode 100644 index f8c455b2b..000000000 --- a/apps/testing/vite-rsc-app/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "vite-rsc-app", - "version": "0.0.1", - "private": true, - "type": "module", - "scripts": { - "dev": "concurrently -n web,agent -c blue,cyan \"bun run dev:web\" \"bun run dev:agent\"", - "dev:web": "vite --port 3002", - "dev:agent": "cd agentuity && bun ../../../../packages/cli/bin/cli.ts dev --dir . --port 3502", - "build": "concurrently \"bun run build:web\" \"bun run build:agent\"", - "build:web": "vite build", - "build:agent": "cd agentuity && bun ../../../../packages/cli/bin/cli.ts build --dir . --dev", - "preview": "vite preview", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/core": "workspace:*", - "hono": "^4.7.13", - "react": "^19.2.0", - "react-dom": "^19.2.0" - }, - "devDependencies": { - "@types/node": "^22.10.2", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-rsc": "^0.5.0", - "concurrently": "^9.2.1", - "typescript": "^5.7.2", - "vite": "^7.1.7" - } -} diff --git a/apps/testing/vite-rsc-app/src/components/App.tsx b/apps/testing/vite-rsc-app/src/components/App.tsx deleted file mode 100644 index 67b2733ce..000000000 --- a/apps/testing/vite-rsc-app/src/components/App.tsx +++ /dev/null @@ -1,12 +0,0 @@ -// This is a React Server Component (no 'use client' directive) -import EchoDemo from './EchoDemo'; - -export default function App() { - // This component runs on the server only. - // It renders server-side data and passes it to client components. - return ( -
- -
- ); -} diff --git a/apps/testing/vite-rsc-app/src/components/EchoDemo.tsx b/apps/testing/vite-rsc-app/src/components/EchoDemo.tsx deleted file mode 100644 index 9ac7a2853..000000000 --- a/apps/testing/vite-rsc-app/src/components/EchoDemo.tsx +++ /dev/null @@ -1,7 +0,0 @@ -// This is the server component wrapper - it renders on the server. -// Client interactivity is delegated to EchoDemoClient via 'use client'. -import EchoDemoClient from './EchoDemoClient'; - -export default function EchoDemo() { - return ; -} diff --git a/apps/testing/vite-rsc-app/src/components/EchoDemoClient.tsx b/apps/testing/vite-rsc-app/src/components/EchoDemoClient.tsx deleted file mode 100644 index e5a6b49ba..000000000 --- a/apps/testing/vite-rsc-app/src/components/EchoDemoClient.tsx +++ /dev/null @@ -1,408 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import { AgentuityProvider } from '@agentuity/react'; -import { hc } from 'hono/client'; -import type { ApiRouter } from '../../agentuity/src/api/index'; - -const client = hc('/api'); - -function AgentuityLogo() { - return ( - - ); -} - -function ViteLogo() { - return ( - - ); -} - -function EchoDemoInner() { - const [message, setMessage] = useState('Hello from Vite RSC!'); - const [data, setData] = useState<{ echo: string; timestamp: string } | null>(null); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - - const invoke = async (input: { message: string }) => { - setIsLoading(true); - setError(null); - try { - const res = await client.echo.$post({ json: input }); - setData((await res.json()) as any); - } catch (e) { - setError(e instanceof Error ? e : new Error(String(e))); - } finally { - setIsLoading(false); - } - }; - - return ( -
-
-
-
- - + - -
- -

Agentuity + Vite RSC

-

React Server Components with Agentuity integration

-
- -
-

- Try the Echo Agent -

- -
- setMessage(e.target.value)} - placeholder="Enter a message..." - type="text" - value={message} - /> - -
-
-
- -
-
- - {error &&
Error: {error.message ?? 'Request failed'}
} - -
- {data ? ( - <> -
- Echo: {data.echo} -
-
- Timestamp: {data.timestamp} -
- - ) : ( - 'Waiting for request' - )} -
-
- -
-

RSC Architecture

-
- {`// Server Component (runs on server) -export default function EchoDemo() { - return ; -} - -// Client Component (runs in browser) -'use client'; -const client = hc('/api'); -const res = await client.echo.$post({ json: { message } });`} -
-
-
- - -
- ); -} - -export default function EchoDemoClient() { - return ( - - - - ); -} diff --git a/apps/testing/vite-rsc-app/src/framework/entry.browser.tsx b/apps/testing/vite-rsc-app/src/framework/entry.browser.tsx deleted file mode 100644 index 7f4d38915..000000000 --- a/apps/testing/vite-rsc-app/src/framework/entry.browser.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { createFromFetch } from '@vitejs/plugin-rsc/browser'; -import { hydrateRoot } from 'react-dom/client'; -import type { Root } from 'react-dom/client'; -import type { ReactNode } from 'react'; - -async function main(): Promise { - // Fetch and deserialize RSC stream back to React VDOM - const rscResponse = fetch(window.location.href + '.rsc'); - const root = (await createFromFetch(rscResponse)) as ReactNode; - - // Hydrate (or mount) the React tree into the existing DOM - return hydrateRoot(document, root); -} - -const hydratedRootPromise = main(); -hydratedRootPromise.catch((err) => { - console.error('[vite-rsc] Hydration failed:', err); -}); - -// Listen for RSC updates during development (HMR) -if (import.meta.hot) { - import.meta.hot.on('rsc:update', async () => { - const { createFromFetch: refetch } = await import('@vitejs/plugin-rsc/browser'); - const rscPayload = (await refetch(fetch(window.location.href + '.rsc'))) as ReactNode; - (await hydratedRootPromise).render(rscPayload); - }); -} diff --git a/apps/testing/vite-rsc-app/src/framework/entry.rsc.tsx b/apps/testing/vite-rsc-app/src/framework/entry.rsc.tsx deleted file mode 100644 index 6da95c662..000000000 --- a/apps/testing/vite-rsc-app/src/framework/entry.rsc.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { renderToReadableStream } from '@vitejs/plugin-rsc/rsc'; -import App from '../components/App'; - -// The plugin assumes `rsc` entry has a default export of a request handler -export default async function handler(request: Request): Promise { - // Serialize React VDOM to RSC stream - const root = ( - - - - - Agentuity + Vite RSC - - -
- -
- - - ); - - const rscStream = renderToReadableStream(root); - - // Respond to direct RSC stream requests (used by browser for client-side re-rendering) - if (new URL(request.url).pathname.endsWith('.rsc')) { - return new Response(rscStream, { - headers: { - 'Content-Type': 'text/x-component;charset=utf-8', - }, - }); - } - - // Delegate to SSR environment for HTML rendering - const ssrEntry = await import.meta.viteRsc.loadModule( - 'ssr', - 'index' - ); - const htmlStream = await ssrEntry.handleSsr(rscStream); - - return new Response(htmlStream, { - headers: { - 'Content-Type': 'text/html', - }, - }); -} - -// Enable HMR for server module changes -if (import.meta.hot) { - import.meta.hot.accept(); -} diff --git a/apps/testing/vite-rsc-app/src/framework/entry.ssr.tsx b/apps/testing/vite-rsc-app/src/framework/entry.ssr.tsx deleted file mode 100644 index 349923836..000000000 --- a/apps/testing/vite-rsc-app/src/framework/entry.ssr.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr'; -import { renderToReadableStream } from 'react-dom/server.edge'; - -export async function handleSsr(rscStream: ReadableStream) { - // Tee the stream so we can use it for both SSR and client hydration - const [rscStream1, _rscStream2] = rscStream.tee(); - - // Deserialize RSC stream back to React VDOM - const root = await createFromReadableStream(rscStream1); - - // Get the bootstrap script to kick off client-side hydration - const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent('index'); - - // Render HTML (traditional SSR) - const htmlStream = await renderToReadableStream(root, { - bootstrapScriptContent, - }); - - return htmlStream; -} diff --git a/apps/testing/vite-rsc-app/tsconfig.json b/apps/testing/vite-rsc-app/tsconfig.json deleted file mode 100644 index 9057510ef..000000000 --- a/apps/testing/vite-rsc-app/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "types": ["vite/client", "@vitejs/plugin-rsc/types"] - }, - "include": ["src/**/*", "vite.config.ts"] -} diff --git a/apps/testing/vite-rsc-app/vite.config.ts b/apps/testing/vite-rsc-app/vite.config.ts deleted file mode 100644 index 2be2836e9..000000000 --- a/apps/testing/vite-rsc-app/vite.config.ts +++ /dev/null @@ -1,44 +0,0 @@ -import rsc from '@vitejs/plugin-rsc'; -import { defineConfig } from 'vite'; -import { fileURLToPath, URL } from 'node:url'; - -export default defineConfig({ - plugins: [ - rsc({ - entries: { - rsc: './src/framework/entry.rsc.tsx', - ssr: './src/framework/entry.ssr.tsx', - client: './src/framework/entry.browser.tsx', - }, - }), - ], - optimizeDeps: { - include: [ - 'react', - 'react-dom', - 'react-dom/client', - 'react/jsx-runtime', - 'react/jsx-dev-runtime', - ], - }, - resolve: { - alias: { - '@agentuity/routes': fileURLToPath( - new URL('./agentuity/src/generated/routes.ts', import.meta.url) - ), - '@agentuity/react': fileURLToPath(new URL('../../../packages/react', import.meta.url)), - '@agentuity/core': fileURLToPath(new URL('../../../packages/core', import.meta.url)), - '@agentuity/frontend': fileURLToPath( - new URL('../../../packages/frontend', import.meta.url) - ), - }, - }, - server: { - proxy: { - '/api': { - target: 'http://localhost:3502', - changeOrigin: true, - }, - }, - }, -}); diff --git a/apps/testing/webrtc-test/.agents/agentuity/sdk/agent/AGENTS.md b/apps/testing/webrtc-test/.agents/agentuity/sdk/agent/AGENTS.md deleted file mode 100644 index 3c5330d3c..000000000 --- a/apps/testing/webrtc-test/.agents/agentuity/sdk/agent/AGENTS.md +++ /dev/null @@ -1,308 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `routes.ts` - Route registry for API, WebSocket, and SSE endpoints -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - const user = await ctx.kv.get('user:123'); - await ctx.kv.delete('user:123'); - const keys = await ctx.kv.list('user:*'); - return user; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) - - diff --git a/apps/testing/webrtc-test/.agents/agentuity/sdk/api/AGENTS.md b/apps/testing/webrtc-test/.agents/agentuity/sdk/api/AGENTS.md deleted file mode 100644 index e6c32b3fb..000000000 --- a/apps/testing/webrtc-test/.agents/agentuity/sdk/api/AGENTS.md +++ /dev/null @@ -1,367 +0,0 @@ -# APIs Folder Guide - -This folder contains REST API routes for your Agentuity application. Each API is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with strongly-typed route definitions and schema types -- `registry.ts` - Agent registry (for calling agents from routes) -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your routes: - -```typescript -import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes'; -``` - -## Directory Structure - -Each API folder must contain: - -- **route.ts** (required) - HTTP route definitions using Hono router - -Example structure: - -``` -src/api/ -├── index.ts (optional, mounted at /api) -├── status/ -│ └── route.ts (mounted at /api/status) -├── users/ -│ └── route.ts (mounted at /api/users) -├── agent-call/ - └── route.ts (mounted at /api/agent-call) -``` - -## Creating an API - -### Basic API (route.ts) - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -// GET /api/status -router.get('/', (c) => { - return c.json({ - status: 'ok', - timestamp: new Date().toISOString(), - version: '1.0.0', - }); -}); - -// POST /api/status -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -export default router; -``` - -### API with Request Validation - -```typescript -import { createRouter } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import { validator } from 'hono/validator'; - -const router = createRouter(); - -const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), -}); - -router.post( - '/', - validator('json', (value, c) => { - const result = createUserSchema['~standard'].validate(value); - if (result.issues) { - return c.json({ error: 'Validation failed', issues: result.issues }, 400); - } - return result.value; - }), - async (c) => { - const data = c.req.valid('json'); - // data is fully typed: { name: string, email: string, age: number } - return c.json({ - success: true, - user: data, - }); - } -); - -export default router; -``` - -### API Calling Agents - -APIs can call agents directly by importing them: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import helloAgent from '@agent/hello'; - -const router = createRouter(); - -router.get('/', async (c) => { - // Call an agent directly - const result = await helloAgent.run({ name: 'API Caller', age: 42 }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -router.post('/with-input', async (c) => { - const body = await c.req.json(); - const { name, age } = body; - - // Call agent with dynamic input - const result = await helloAgent.run({ name, age }); - - return c.json({ - success: true, - agentResult: result, - }); -}); - -export default router; -``` - -### API with Agent Validation - -Use `agent.validator()` for automatic input validation from agent schemas: - -```typescript -import { createRouter } from '@agentuity/runtime'; -import myAgent from '@agent/my-agent'; - -const router = createRouter(); - -// POST with automatic validation using agent's input schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed from agent schema! - const result = await myAgent.run(data); - return c.json({ success: true, result }); -}); - -export default router; -``` - -### API with Logging - -```typescript -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/log-test', (c) => { - c.var.logger.info('Info message'); - c.var.logger.error('Error message'); - c.var.logger.warn('Warning message'); - c.var.logger.debug('Debug message'); - c.var.logger.trace('Trace message'); - - return c.text('Check logs'); -}); - -export default router; -``` - -## Route Context (c) - -The route handler receives a Hono context object with: - -- **c.req** - Request object (c.req.json(), c.req.param(), c.req.query(), etc.) -- **c.json()** - Return JSON response -- **c.text()** - Return text response -- **c.html()** - Return HTML response -- **c.redirect()** - Redirect to URL -- **c.var.logger** - Structured logger (info, warn, error, debug, trace) -- **c.var.kv** - Key-value storage -- **c.var.vector** - Vector storage -- **c.var.stream** - Stream management -- **Import agents directly** - Import and call agents directly (recommended) - -## HTTP Methods - -```typescript -const router = createRouter(); - -router.get('/path', (c) => { - /* ... */ -}); -router.post('/path', (c) => { - /* ... */ -}); -router.put('/path', (c) => { - /* ... */ -}); -router.patch('/path', (c) => { - /* ... */ -}); -router.delete('/path', (c) => { - /* ... */ -}); -router.options('/path', (c) => { - /* ... */ -}); -``` - -## Path Parameters - -```typescript -// GET /api/users/:id -router.get('/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); -}); - -// GET /api/posts/:postId/comments/:commentId -router.get('/:postId/comments/:commentId', (c) => { - const postId = c.req.param('postId'); - const commentId = c.req.param('commentId'); - return c.json({ postId, commentId }); -}); -``` - -## Query Parameters - -```typescript -// GET /api/search?q=hello&limit=10 -router.get('/search', (c) => { - const query = c.req.query('q'); - const limit = c.req.query('limit') || '20'; - return c.json({ query, limit: parseInt(limit) }); -}); -``` - -## Request Body - -```typescript -// JSON body -router.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); -}); - -// Form data -router.post('/upload', async (c) => { - const formData = await c.req.formData(); - const file = formData.get('file'); - return c.json({ fileName: file?.name }); -}); -``` - -## Error Handling - -```typescript -import myAgent from '@agent/my-agent'; - -router.get('/', async (c) => { - try { - const result = await myAgent.run({ data: 'test' }); - return c.json({ success: true, result }); - } catch (error) { - c.var.logger.error('Agent call failed:', error); - return c.json( - { - success: false, - error: error instanceof Error ? error.message : String(error), - }, - 500 - ); - } -}); -``` - -## Response Types - -```typescript -// JSON response -return c.json({ data: 'value' }); - -// Text response -return c.text('Hello World'); - -// HTML response -return c.html('

Hello

'); - -// Custom status code -return c.json({ error: 'Not found' }, 404); - -// Redirect -return c.redirect('/new-path'); - -// Headers -return c.json({ data: 'value' }, 200, { - 'X-Custom-Header': 'value', -}); -``` - -## Streaming Routes - -```typescript -import { createRouter, stream, sse, websocket } from '@agentuity/runtime'; - -const router = createRouter(); - -// Stream response (use with POST) -router.post( - '/events', - stream((c) => { - return new ReadableStream({ - start(controller) { - controller.enqueue('event 1\n'); - controller.enqueue('event 2\n'); - controller.close(); - }, - }); - }) -); - -// Server-Sent Events (use with GET) -router.get( - '/notifications', - sse((c, stream) => { - stream.writeSSE({ data: 'Hello', event: 'message' }); - stream.writeSSE({ data: 'World', event: 'message' }); - }) -); - -// WebSocket (use with GET) -router.get( - '/ws', - websocket((c, ws) => { - ws.onOpen(() => { - ws.send('Connected!'); - }); - ws.onMessage((event) => { - ws.send(`Echo: ${event.data}`); - }); - }) -); - -export default router; -``` - -## Rules - -- Each API folder name becomes the route name (e.g., `status/` → `/api/status`) -- **route.ts** must export default the router instance -- Use c.var.logger for logging, not console.log -- Import agents directly to call them (e.g., `import agent from '@agent/name'`) -- Validation should use @agentuity/schema or agent.validator() for type safety -- Return appropriate HTTP status codes -- APIs run at `/api/{folderName}` by default - - diff --git a/apps/testing/webrtc-test/.agents/agentuity/sdk/web/AGENTS.md b/apps/testing/webrtc-test/.agents/agentuity/sdk/web/AGENTS.md deleted file mode 100644 index 2a6eb0da5..000000000 --- a/apps/testing/webrtc-test/.agents/agentuity/sdk/web/AGENTS.md +++ /dev/null @@ -1,511 +0,0 @@ -# Web Folder Guide - -This folder contains your React-based web application that communicates with your Agentuity agents. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `routes.ts` - Route registry with type-safe API, WebSocket, and SSE route definitions -- `registry.ts` - Agent registry with input/output types - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your components: - -```typescript -// Routes are typed automatically via module augmentation -import { useAPI } from '@agentuity/react'; - -// The route 'GET /api/users' is fully typed -const { data } = useAPI('GET /api/users'); -``` - -## Directory Structure - -Required files: - -- **App.tsx** (required) - Main React application component -- **frontend.tsx** (required) - Frontend entry point with client-side rendering -- **index.html** (required) - HTML template -- **public/** (optional) - Static assets (images, CSS, JS files) - -Example structure: - -``` -src/web/ -├── App.tsx -├── frontend.tsx -├── index.html -└── public/ - ├── styles.css - ├── logo.svg - └── script.js -``` - -## Creating the Web App - -### App.tsx - Main Component - -```typescript -import { AgentuityProvider, useAPI } from '@agentuity/react'; -import { useState } from 'react'; - -function HelloForm() { - const [name, setName] = useState('World'); - const { invoke, isLoading, data: greeting } = useAPI('POST /api/hello'); - - return ( -
- setName(e.target.value)} - disabled={isLoading} - /> - - - -
{greeting ?? 'Waiting for response'}
-
- ); -} - -export function App() { - return ( - -
-

Welcome to Agentuity

- -
-
- ); -} -``` - -### frontend.tsx - Entry Point - -```typescript -import { createRoot } from 'react-dom/client'; -import { App } from './App'; - -const root = document.getElementById('root'); -if (!root) throw new Error('Root element not found'); - -createRoot(root).render(); -``` - -### index.html - HTML Template - -```html - - - - - - My Agentuity App - - -
- - - -``` - -## React Hooks - -All hooks from `@agentuity/react` must be used within an `AgentuityProvider`. **Always use these hooks instead of raw `fetch()` calls** - they provide type safety, automatic error handling, and integration with the Agentuity platform. - -### useAPI - Type-Safe API Calls - -The primary hook for making HTTP requests. **Use this instead of `fetch()`.** - -```typescript -import { useAPI } from '@agentuity/react'; - -function MyComponent() { - // GET requests auto-execute and return refetch - const { data, isLoading, error, refetch } = useAPI('GET /api/users'); - - // POST/PUT/DELETE return invoke for manual execution - const { invoke, data: result, isLoading: saving } = useAPI('POST /api/users'); - - const handleCreate = async () => { - // Input is fully typed from route schema! - await invoke({ name: 'Alice', email: 'alice@example.com' }); - }; - - return ( -
- - {result &&

Created: {result.name}

} -
- ); -} -``` - -**useAPI Return Values:** - -| Property | Type | Description | -| ------------ | ------------------------ | ----------------------------------------- | -| `data` | `T \| undefined` | Response data (typed from route schema) | -| `error` | `Error \| null` | Error if request failed | -| `isLoading` | `boolean` | True during initial load | -| `isFetching` | `boolean` | True during any fetch (including refetch) | -| `isSuccess` | `boolean` | True if last request succeeded | -| `isError` | `boolean` | True if last request failed | -| `invoke` | `(input?) => Promise` | Manual trigger (POST/PUT/DELETE) | -| `refetch` | `() => Promise` | Refetch data (GET) | -| `reset` | `() => void` | Reset state to initial | - -### useAPI Options - -```typescript -// GET with query parameters and caching -const { data } = useAPI({ - route: 'GET /api/search', - query: { q: 'react', limit: '10' }, - staleTime: 5000, // Cache for 5 seconds - refetchInterval: 10000, // Auto-refetch every 10 seconds - enabled: true, // Set to false to disable auto-fetch -}); - -// POST with callbacks -const { invoke } = useAPI({ - route: 'POST /api/users', - onSuccess: (data) => console.log('Created:', data), - onError: (error) => console.error('Failed:', error), -}); - -// Streaming responses with onChunk -const { invoke } = useAPI({ - route: 'POST /api/stream', - onChunk: (chunk) => console.log('Received chunk:', chunk), - delimiter: '\n', // Split stream by newlines (default) -}); - -// Custom headers -const { data } = useAPI({ - route: 'GET /api/protected', - headers: { 'X-Custom-Header': 'value' }, -}); -``` - -### useWebsocket - WebSocket Connection - -For bidirectional real-time communication. Automatically handles reconnection. - -```typescript -import { useWebsocket } from '@agentuity/react'; - -function ChatComponent() { - const { isConnected, data, send, messages, clearMessages, error, reset } = useWebsocket('/api/chat'); - - return ( -
-

Status: {isConnected ? 'Connected' : 'Disconnected'}

- -
- {messages.map((msg, i) => ( -

{JSON.stringify(msg)}

- ))} -
- -
- ); -} -``` - -**useWebsocket Return Values:** - -| Property | Type | Description | -| --------------- | ---------------- | ---------------------------------------- | -| `isConnected` | `boolean` | True when WebSocket is connected | -| `data` | `T \| undefined` | Most recent message received | -| `messages` | `T[]` | Array of all received messages | -| `send` | `(data) => void` | Send a message (typed from route schema) | -| `clearMessages` | `() => void` | Clear the messages array | -| `close` | `() => void` | Close the connection | -| `error` | `Error \| null` | Error if connection failed | -| `isError` | `boolean` | True if there's an error | -| `reset` | `() => void` | Reset state and reconnect | -| `readyState` | `number` | WebSocket ready state | - -### useEventStream - Server-Sent Events - -For server-to-client streaming (one-way). Use when server pushes updates to client. - -```typescript -import { useEventStream } from '@agentuity/react'; - -function NotificationsComponent() { - const { isConnected, data, error, close, reset } = useEventStream('/api/notifications'); - - return ( -
-

Connected: {isConnected ? 'Yes' : 'No'}

- {error &&

Error: {error.message}

} -

Latest: {JSON.stringify(data)}

- -
- ); -} -``` - -**useEventStream Return Values:** - -| Property | Type | Description | -| ------------- | ---------------- | ---------------------------------- | -| `isConnected` | `boolean` | True when EventSource is connected | -| `data` | `T \| undefined` | Most recent event data | -| `error` | `Error \| null` | Error if connection failed | -| `isError` | `boolean` | True if there's an error | -| `close` | `() => void` | Close the connection | -| `reset` | `() => void` | Reset state and reconnect | -| `readyState` | `number` | EventSource ready state | - -### useAgentuity - Access Context - -Access the Agentuity context for base URL and configuration. - -```typescript -import { useAgentuity } from '@agentuity/react'; - -function MyComponent() { - const { baseUrl } = useAgentuity(); - - return

API Base: {baseUrl}

; -} -``` - -### useAuth - Authentication State - -Access and manage authentication state. - -```typescript -import { useAuth } from '@agentuity/react'; - -function AuthStatus() { - const { isAuthenticated, authHeader, setAuthHeader, authLoading } = useAuth(); - - const handleLogin = async (token: string) => { - setAuthHeader?.(`Bearer ${token}`); - }; - - const handleLogout = () => { - setAuthHeader?.(null); - }; - - if (authLoading) return

Loading...

; - - return ( -
- {isAuthenticated ? ( - - ) : ( - - )} -
- ); -} -``` - -**useAuth Return Values:** - -| Property | Type | Description | -| ----------------- | ------------------- | ------------------------------------------- | -| `isAuthenticated` | `boolean` | True if user has auth token and not loading | -| `authHeader` | `string \| null` | Current auth header (e.g., "Bearer ...") | -| `setAuthHeader` | `(token) => void` | Set auth header (null to clear) | -| `authLoading` | `boolean` | True during auth state changes | -| `setAuthLoading` | `(loading) => void` | Set auth loading state | - -## Complete Example - -```typescript -import { AgentuityProvider, useAPI, useWebsocket } from '@agentuity/react'; -import { useEffect, useState } from 'react'; - -function Dashboard() { - const [count, setCount] = useState(0); - const { invoke, data: agentResult } = useAPI('POST /api/process'); - const { isConnected, send, data: wsMessage } = useWebsocket('/api/live'); - - useEffect(() => { - if (isConnected) { - const interval = setInterval(() => { - send({ ping: Date.now() }); - }, 1000); - return () => clearInterval(interval); - } - }, [isConnected, send]); - - return ( -
-

My Agentuity App

- -
-

Count: {count}

- -
- -
- -

{JSON.stringify(agentResult)}

-
- -
- WebSocket: - {isConnected ? JSON.stringify(wsMessage) : 'Not connected'} -
-
- ); -} - -export function App() { - return ( - - - - ); -} -``` - -## Static Assets - -Place static files in the **public/** folder: - -``` -src/web/public/ -├── logo.svg -├── styles.css -└── script.js -``` - -Reference them in your HTML or components: - -```html - - - -``` - -```typescript -// In React components -Logo -``` - -## Styling - -### Inline Styles - -```typescript -
- Styled content -
-``` - -### CSS Files - -Create `public/styles.css`: - -```css -body { - background-color: #09090b; - color: #fff; - font-family: sans-serif; -} -``` - -Import in `index.html`: - -```html - -``` - -### Style Tag in Component - -```typescript -
- - -
-``` - -## RPC-Style API Client - -For non-React contexts (like utility functions or event handlers), use `createClient`: - -```typescript -import { createClient } from '@agentuity/react'; - -// Create a typed client (uses global baseUrl and auth from AgentuityProvider) -const api = createClient(); - -// Type-safe RPC-style calls - routes become nested objects -// Route 'GET /api/users' becomes api.users.get() -// Route 'POST /api/users' becomes api.users.post() -// Route 'GET /api/users/:id' becomes api.users.id.get({ id: '123' }) - -async function fetchData() { - const users = await api.users.get(); - const newUser = await api.users.post({ name: 'Alice', email: 'alice@example.com' }); - const user = await api.users.id.get({ id: '123' }); - return { users, newUser, user }; -} -``` - -**When to use `createClient` vs `useAPI`:** - -| Use Case | Recommendation | -| ------------------------- | -------------- | -| React component rendering | `useAPI` hook | -| Event handlers | Either works | -| Utility functions | `createClient` | -| Non-React code | `createClient` | -| Need loading/error state | `useAPI` hook | -| Need caching/refetch | `useAPI` hook | - -## Best Practices - -- Wrap your app with **AgentuityProvider** for hooks to work -- **Always use `useAPI` instead of `fetch()`** for type safety and error handling -- Use **useAPI** for type-safe HTTP requests (GET, POST, PUT, DELETE) -- Use **useWebsocket** for bidirectional real-time communication -- Use **useEventStream** for server-to-client streaming -- Use **useAuth** for authentication state management -- Handle loading and error states in UI -- Place reusable components in separate files -- Keep static assets in the **public/** folder - -## Rules - -- **App.tsx** must export a function named `App` -- **frontend.tsx** must render the `App` component to `#root` -- **index.html** must have a `
` -- Routes are typed via module augmentation from `src/generated/routes.ts` -- The web app is served at `/` by default -- Static files in `public/` are served at `/public/*` -- Module script tag: `` -- **Never use raw `fetch()` calls** - always use `useAPI` or `createClient` - - diff --git a/apps/testing/webrtc-test/.gitignore b/apps/testing/webrtc-test/.gitignore deleted file mode 100644 index 0b627cce3..000000000 --- a/apps/testing/webrtc-test/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# dependencies (bun install) - -node_modules - -# output - -out -dist -*.tgz - -# code coverage - -coverage -*.lcov - -# logs - -/logs -*.log -report.*.json - -# dotenv environment variable files - -.env -.env.* - -# caches - -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs - -.idea - -# Finder (MacOS) folder config - -.DS_Store - -# Agentuity build files - -.agentuity diff --git a/apps/testing/webrtc-test/.vscode/settings.json b/apps/testing/webrtc-test/.vscode/settings.json deleted file mode 100644 index 13d25f367..000000000 --- a/apps/testing/webrtc-test/.vscode/settings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "search.exclude": { - "**/.git/**": true, - "**/node_modules/**": true, - "**/bun.lock": true, - "**/.agentuity/**": true - }, - "json.schemas": [ - { - "fileMatch": ["agentuity.json"], - "url": "https://agentuity.dev/schema/cli/v1/agentuity.json" - } - ] -} diff --git a/apps/testing/webrtc-test/AGENTS.md b/apps/testing/webrtc-test/AGENTS.md deleted file mode 100644 index 20cd550e1..000000000 --- a/apps/testing/webrtc-test/AGENTS.md +++ /dev/null @@ -1,64 +0,0 @@ -# Agent Guidelines for webrtc-test - -## Commands - -- **Build**: `bun run build` (compiles your application) -- **Dev**: `bun run dev` (starts development server) -- **Typecheck**: `bun run typecheck` (runs TypeScript type checking) -- **Deploy**: `bun run deploy` (deploys your app to the Agentuity cloud) - -## Agent-Friendly CLI - -The Agentuity CLI is designed to be agent-friendly with programmatic interfaces, structured output, and comprehensive introspection. - -Read the [AGENTS.md](./node_modules/@agentuity/cli/AGENTS.md) file in the Agentuity CLI for more information on how to work with this project. - -## Instructions - -- This project uses Bun instead of NodeJS and TypeScript for all source code -- This is an Agentuity Agent project - -## Web Frontend (src/web/) - -The `src/web/` folder contains your React frontend, which is automatically bundled by the Agentuity build system. - -**File Structure:** - -- `index.html` - Main HTML file with ` - - -``` - -## React Hooks - -### useAgent - Call Agents - -```typescript -import { useAgent } from '@agentuity/react'; - -function MyComponent() { - const { run, running, data, error } = useAgent('myAgent'); - - return ( - - ); -} -``` - -### useAgentWebsocket - WebSocket Connection - -```typescript -import { useAgentWebsocket } from '@agentuity/react'; - -function MyComponent() { - const { connected, send, data } = useAgentWebsocket('websocket'); - - return ( -
-

Status: {connected ? 'Connected' : 'Disconnected'}

- -

Received: {data}

-
- ); -} -``` - -### useAgentEventStream - Server-Sent Events - -```typescript -import { useAgentEventStream } from '@agentuity/react'; - -function MyComponent() { - const { connected, data, error } = useAgentEventStream('sse'); - - return ( -
-

Connected: {connected ? 'Yes' : 'No'}

- {error &&

Error: {error.message}

} -

Data: {data}

-
- ); -} -``` - -## Complete Example - -```typescript -import { AgentuityProvider, useAgent, useAgentWebsocket } from '@agentuity/react'; -import { useEffect, useState } from 'react'; - -function AppContent() { - const [count, setCount] = useState(0); - const { run, data: agentResult } = useAgent('simple'); - const { connected, send, data: wsMessage } = useAgentWebsocket('websocket'); - - useEffect(() => { - // Send WebSocket message every second - const interval = setInterval(() => { - send(`Message at ${new Date().toISOString()}`); - }, 1000); - return () => clearInterval(interval); - }, [send]); - - return ( -
-

My Agentuity App

- -
-

Count: {count}

- -
- -
- -

{agentResult}

-
- -
- WebSocket: - {connected ? JSON.stringify(wsMessage) : 'Not connected'} -
-
- ); -} - -export function App() { - return ( - - - - ); -} -``` - -## Static Assets - -Place static files in the **public/** folder: - -``` -src/web/public/ -├── logo.svg -├── styles.css -└── script.js -``` - -Reference them in your HTML or components: - -```html - - - -``` - -```typescript -// In React components -Logo -``` - -## Styling - -### Inline Styles - -```typescript -
- Styled content -
-``` - -### CSS Files - -Create `public/styles.css`: - -```css -body { - background-color: #09090b; - color: #fff; - font-family: sans-serif; -} -``` - -Import in `index.html`: - -```html - -``` - -### Style Tag in Component - -```typescript -
- - -
-``` - -## Best Practices - -- Wrap your app with **AgentuityProvider** for hooks to work -- Use **useAgent** for one-off agent calls -- Use **useAgentWebsocket** for bidirectional real-time communication -- Use **useAgentEventStream** for server-to-client streaming -- Place reusable components in separate files -- Keep static assets in the **public/** folder -- Use TypeScript for type safety -- Handle loading and error states in UI - -## Rules - -- **App.tsx** must export a function named `App` -- **frontend.tsx** must render the `App` component to `#root` -- **index.html** must have a `
` -- All agents are accessible via `useAgent('agentName')` -- The web app is served at `/` by default -- Static files in `public/` are served at `/public/*` -- Module script tag: `` diff --git a/apps/testing/webrtc-test/src/web/App.tsx b/apps/testing/webrtc-test/src/web/App.tsx deleted file mode 100644 index 1006050ed..000000000 --- a/apps/testing/webrtc-test/src/web/App.tsx +++ /dev/null @@ -1,345 +0,0 @@ -import { useWebRTCCall } from '@agentuity/react'; -import { useState, useEffect } from 'react'; - -export function App() { - const [roomId, setRoomId] = useState('test-room'); - const [joined, setJoined] = useState(false); - - const { - localVideoRef, - remoteVideoRef, - status, - error, - peerId, - remotePeerId, - isAudioMuted, - isVideoMuted, - connect, - hangup, - muteAudio, - muteVideo, - } = useWebRTCCall({ - roomId, - signalUrl: '/api/call/signal', - autoConnect: false, - }); - - // Auto-attach streams to video elements when refs are ready - useEffect(() => { - if (localVideoRef.current) { - localVideoRef.current.muted = true; - localVideoRef.current.playsInline = true; - } - if (remoteVideoRef.current) { - remoteVideoRef.current.playsInline = true; - } - }, [localVideoRef, remoteVideoRef]); - - const handleJoin = () => { - setJoined(true); - connect(); - }; - - const handleLeave = () => { - hangup(); - setJoined(false); - }; - - return ( -
-
-

WebRTC Video Call Demo

-

Powered by Agentuity

-
- - {!joined ? ( -
-

Join a Room

-
- - setRoomId(e.target.value)} - placeholder="Enter room ID" - /> -
- -

Open this page in two browser tabs to test

-
- ) : ( -
-
- {status} - {peerId && You: {peerId}} - {remotePeerId && Remote: {remotePeerId}} -
- - {error &&
Error: {error.message}
} - -
-
-
-
- {/* biome-ignore lint/a11y/useMediaCaption: WebRTC test video does not have captions */} -
-
- -
- - - -
-
- )} - - -
- ); -} diff --git a/apps/testing/webrtc-test/src/web/frontend.tsx b/apps/testing/webrtc-test/src/web/frontend.tsx deleted file mode 100644 index 8ac670d50..000000000 --- a/apps/testing/webrtc-test/src/web/frontend.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/** - * This file is the entry point for the React app, it sets up the root - * element and renders the App component to the DOM. - * - * It is included in `src/index.html`. - */ - -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import { AgentuityProvider } from '@agentuity/react'; -import { App } from './App'; - -const elem = document.getElementById('root')!; -const app = ( - - - - - -); - -if (import.meta.hot) { - // With hot module reloading, `import.meta.hot.data` is persisted. - import.meta.hot.data.root ??= createRoot(elem); - const root = import.meta.hot.data.root; - root.render(app); -} else { - // The hot module reloading API is not available in production. - createRoot(elem).render(app); -} diff --git a/apps/testing/webrtc-test/src/web/index.html b/apps/testing/webrtc-test/src/web/index.html deleted file mode 100644 index ce4ce9b0d..000000000 --- a/apps/testing/webrtc-test/src/web/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Agentuity + Bun + React - - - -
- - diff --git a/apps/testing/webrtc-test/src/web/public/.gitkeep b/apps/testing/webrtc-test/src/web/public/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/webrtc-test/src/web/public/favicon.ico b/apps/testing/webrtc-test/src/web/public/favicon.ico deleted file mode 100644 index 21f46e6f5..000000000 Binary files a/apps/testing/webrtc-test/src/web/public/favicon.ico and /dev/null differ diff --git a/apps/testing/webrtc-test/tsconfig.json b/apps/testing/webrtc-test/tsconfig.json deleted file mode 100644 index 9b379e0f6..000000000 --- a/apps/testing/webrtc-test/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, - "paths": { - "@agent/*": ["./src/agent/*"], - "@api/*": ["./src/api/*"] - } - }, - "include": ["src/**/*", "app.ts"] -} diff --git a/bun.lock b/bun.lock index 83385852c..0aba5f9f5 100644 --- a/bun.lock +++ b/bun.lock @@ -30,7 +30,7 @@ "react": "^19.2.3", "react-dom": "^19.2.3", "rehype-pretty-code": "^0.14.1", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "apps/create-agentuity": { @@ -114,54 +114,6 @@ "name": "testing", "version": "2.0.9", }, - "apps/testing/auth-package-app": { - "name": "auth-package-app", - "version": "0.0.1", - "dependencies": { - "@agentuity/auth": "workspace:*", - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/workbench": "workspace:*", - "@ai-sdk/openai": "^3.0.1", - "ai": "^6.0.3", - "better-auth": "^1.5.0", - "hono": "^4.7.13", - "pg": "^8.16.0", - "react": "^19.2.0", - "react-dom": "^19.2.0", - }, - "devDependencies": { - "@types/bun": "latest", - "@types/pg": "^8.15.4", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "typescript": "^5", - }, - }, - "apps/testing/cloud-deployment": { - "name": "cloud-deployment-tests", - "version": "0.0.1", - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.11.3", - "react": "^19.2.3", - "react-dom": "^19.2.3", - }, - "devDependencies": { - "@types/bun": "^1.2.19", - "@types/react": "^19.2.8", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^4.6.0", - "vite": "^7.3.1", - }, - }, "apps/testing/db": { "name": "db-test", "version": "0.0.1", @@ -174,24 +126,14 @@ }, }, "apps/testing/e2e-web": { - "name": "e2e-web-tests", + "name": "e2e-web", "version": "0.0.1", "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/workbench": "workspace:*", "hono": "^4.7.13", - "react": "^19.2.3", - "react-dom": "^19.2.3", }, "devDependencies": { "@types/bun": "latest", - "@vitejs/plugin-react": "^4.6.0", - "vite": "^7.2.7", + "typescript": "^5", }, }, "apps/testing/email": { @@ -209,26 +151,18 @@ "name": "integration-suite", "version": "0.0.1", "dependencies": { - "@agentuity/cli": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/evals": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/workbench": "workspace:*", - "@ai-sdk/openai": "^3.0.0", - "ai": "^6.0.0", + "@agentuity/email": "workspace:*", + "@agentuity/keyvalue": "workspace:*", + "@agentuity/queue": "workspace:*", + "@agentuity/schedule": "workspace:*", + "@agentuity/task": "workspace:*", + "@agentuity/vector": "workspace:*", "hono": "^4.7.13", - "react": "^19.2.1", - "react-dom": "^19.2.1", }, "devDependencies": { "@types/bun": "latest", - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^4.5.2", - "vite": "^7.2.7", + "typescript": "^5", }, }, "apps/testing/keyvalue": { @@ -255,51 +189,22 @@ "react-dom": "^19.2.0", }, "devDependencies": { - "@types/node": "^22.10.2", + "@types/bun": "latest", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", - "concurrently": "^9.2.1", - "typescript": "^5.7.2", - }, - }, - "apps/testing/nextjs-app/agentuity": { - "name": "nextjs-app-agentuity", - "version": "0.0.1", - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.7.13", - }, - "devDependencies": { - "@types/bun": "latest", - "@vitejs/plugin-react": "^4.5.2", "typescript": "^5", - "vite": "^7.2.7", }, }, "apps/testing/oauth": { - "name": "oauth", + "name": "oauth-app", "version": "0.0.1", "dependencies": { - "@agentuity/cli": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/runtime": "workspace:*", "hono": "^4.7.13", - "react": "^19.2.0", - "react-dom": "^19.2.0", }, "devDependencies": { "@types/bun": "latest", - "@types/react": "^19", - "@types/react-dom": "^19", - "@vitejs/plugin-react": "^4.6.0", "typescript": "^5", - "vite": "^7.2.7", }, }, "apps/testing/queue": { @@ -342,20 +247,19 @@ "@types/bun": "latest", }, }, - "apps/testing/standalone-agent": { - "name": "standalone-agent-test", + "apps/testing/standalone-backend": { + "name": "standalone-backend", "version": "0.0.1", "dependencies": { - "@agentuity/core": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", + "hono": "^4.7.13", }, "devDependencies": { "@types/bun": "latest", + "typescript": "^5", }, }, "apps/testing/svelte-web": { - "name": "svelte-web-tests", + "name": "svelte-web", "version": "0.0.1", "dependencies": { "@agentuity/cli": "workspace:*", @@ -368,14 +272,14 @@ "svelte": "^5.54.0", }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^6.2.4", "@types/bun": "latest", "svelte-check": "^4.4.5", "vite": "^7.3.1", }, }, "apps/testing/tanstack-start": { - "name": "tanstack-start", + "name": "tanstack-start-app", + "version": "0.0.1", "dependencies": { "@agentuity/core": "workspace:*", "@agentuity/frontend": "workspace:*", @@ -388,40 +292,13 @@ "lucide-react": "^0.545.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "tailwindcss": "^4.0.6", - }, - "devDependencies": { - "@tanstack/devtools-vite": "^0.3.11", - "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.2.0", - "@types/node": "^22.10.2", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^5.0.4", - "concurrently": "^8.2.2", - "jsdom": "^27.0.0", - "typescript": "^5.7.2", "vite": "^7.1.7", - "vitest": "^3.0.5", - "web-vitals": "^5.1.0", - }, - }, - "apps/testing/tanstack-start/agentuity": { - "name": "tanstack-start-agentuity", - "version": "0.0.1", - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.7.13", }, "devDependencies": { "@types/bun": "latest", - "@vitejs/plugin-react": "^4.5.2", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", "typescript": "^5", - "vite": "^7.2.7", }, }, "apps/testing/task": { @@ -446,43 +323,20 @@ "@types/bun": "latest", }, }, - "apps/testing/vite-rsc-app": { - "name": "vite-rsc-app", + "apps/testing/vite-react-app": { + "name": "vite-react-app", "version": "0.0.1", "dependencies": { - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "hono": "^4.7.13", "react": "^19.2.0", "react-dom": "^19.2.0", }, "devDependencies": { - "@types/node": "^22.10.2", + "@types/bun": "latest", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", - "@vitejs/plugin-rsc": "^0.5.0", - "concurrently": "^9.2.1", - "typescript": "^5.7.2", - "vite": "^7.1.7", - }, - }, - "apps/testing/vite-rsc-app/agentuity": { - "name": "vite-rsc-app-agentuity", - "version": "0.0.1", - "dependencies": { - "@agentuity/cli": "workspace:*", - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "hono": "^4.7.13", - }, - "devDependencies": { - "@types/bun": "latest", "@vitejs/plugin-react": "^4.5.2", "typescript": "^5", - "vite": "^7.2.7", + "vite": "^7.1.7", }, }, "apps/testing/webhook": { @@ -496,28 +350,24 @@ "@types/bun": "latest", }, }, - "apps/testing/webrtc-test": { - "name": "webrtc-test", - "version": "0.0.1", + "packages/adapter": { + "name": "@agentuity/adapter", + "version": "2.0.0-beta.1", "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/react": "workspace:*", - "@agentuity/runtime": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/workbench": "workspace:*", - "hono": "^4.11.3", - "react": "^19.2.0", - "react-dom": "^19.2.0", }, "devDependencies": { - "@agentuity/cli": "workspace:*", "@types/bun": "latest", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^4.6.0", - "typescript": "^5", - "vite": "^7.2.7", + "typescript": "^6.0.2", + }, + }, + "packages/analytics": { + "name": "@agentuity/analytics", + "version": "1.0.54", + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", + "typescript": "^5.9.0", }, }, "packages/auth": { @@ -652,14 +502,13 @@ "version": "2.0.9", "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "packages/drizzle": { @@ -682,26 +531,26 @@ "name": "@agentuity/email", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "packages/evals": { "name": "@agentuity/evals", - "version": "2.0.9", + "version": "1.0.54", "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/runtime": "workspace:*", "@agentuity/schema": "workspace:*", "@ai-sdk/groq": "latest", "ai": "^6.0.0", + "zod": "^3.25.0", }, "devDependencies": { "@agentuity/test-utils": "workspace:*", @@ -723,18 +572,55 @@ "typescript": "^5.9.0", }, }, + "packages/hono": { + "name": "@agentuity/hono", + "version": "1.0.0", + "dependencies": { + "@agentuity/email": "workspace:*", + "@agentuity/keyvalue": "workspace:*", + "@agentuity/queue": "workspace:*", + "@agentuity/sandbox": "workspace:*", + "@agentuity/schedule": "workspace:*", + "@agentuity/stream": "workspace:*", + "@agentuity/task": "workspace:*", + "@agentuity/telemetry": "workspace:*", + "@agentuity/vector": "workspace:*", + "@opentelemetry/api": "^1.9.0", + "hono": "^4.7.13", + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", + "typescript": "^5.9.0", + }, + "peerDependencies": { + "hono": "^4.0.0", + }, + }, "packages/keyvalue": { "name": "@agentuity/keyvalue", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", + "typescript": "^6.0.2", + }, + }, + "packages/local": { + "name": "@agentuity/local", + "version": "1.0.0", + "dependencies": { + "@agentuity/core": "workspace:*", + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", "typescript": "^5.9.0", }, }, @@ -772,13 +658,12 @@ }, "packages/postgres": { "name": "@agentuity/postgres", - "version": "2.0.9", + "version": "1.0.54", "dependencies": { "@agentuity/core": "workspace:*", "pg": "^8.13.1", }, "devDependencies": { - "@agentuity/runtime": "workspace:*", "@agentuity/test-utils": "workspace:*", "@types/bun": "latest", "@types/pg": "^8.11.14", @@ -786,32 +671,27 @@ "kysely": "^0.27.6", "typescript": "^5.9.0", }, - "peerDependencies": { - "@agentuity/runtime": "workspace:*", - }, - "optionalPeers": [ - "@agentuity/runtime", - ], }, "packages/queue": { "name": "@agentuity/queue", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "packages/react": { "name": "@agentuity/react", - "version": "2.0.9", + "version": "1.0.54", "dependencies": { + "@agentuity/analytics": "workspace:*", "@agentuity/core": "workspace:*", "@agentuity/frontend": "workspace:*", }, @@ -829,42 +709,9 @@ }, "packages/runtime": { "name": "@agentuity/runtime", - "version": "2.0.9", - "dependencies": { - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/server": "workspace:*", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.207.0", - "@opentelemetry/auto-instrumentations-node": "^0.66.0", - "@opentelemetry/core": "^2.2.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.207.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.207.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.207.0", - "@opentelemetry/host-metrics": "^0.36.2", - "@opentelemetry/otlp-exporter-base": "^0.207.0", - "@opentelemetry/resources": "^2.2.0", - "@opentelemetry/sdk-logs": "^0.207.0", - "@opentelemetry/sdk-metrics": "^2.2.0", - "@opentelemetry/sdk-node": "^0.207.0", - "@opentelemetry/sdk-trace-base": "^2.2.0", - "@opentelemetry/semantic-conventions": "^1.37.0", - "hono": "^4.7.13", - "zod": "^4.3.5", - }, + "version": "1.0.54", "devDependencies": { - "@agentuity/test-utils": "workspace:*", - "@types/bun": "latest", - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.2", - "@types/ws": "^8.5.13", - "bun-types": "latest", - "expect-type": "^1.2.2", - "react": "^19.2.0", - "react-dom": "^19.2.0", "typescript": "^5.9.0", - "ws": "^8.18.0", }, }, "packages/sandbox": { @@ -881,15 +728,15 @@ "name": "@agentuity/schedule", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "packages/schema": { @@ -909,6 +756,7 @@ "name": "@agentuity/server", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", "@agentuity/schema": "workspace:*", "zod": "^4.3.5", @@ -918,27 +766,70 @@ "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", + }, + }, + "packages/stream": { + "name": "@agentuity/stream", + "version": "1.0.0", + "dependencies": { + "@agentuity/adapter": "workspace:*", + "@agentuity/core": "workspace:*", + "zod": "^4.3.5", + }, + "devDependencies": { + "@types/bun": "latest", + "@types/node": "^22.0.0", + "bun-types": "latest", + "typescript": "^6.0.2", }, }, "packages/task": { "name": "@agentuity/task", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", + "typescript": "^6.0.2", + }, + }, + "packages/telemetry": { + "name": "@agentuity/telemetry", + "version": "1.0.0", + "dependencies": { + "@agentuity/core": "workspace:*", + "@agentuity/server": "workspace:*", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.207.0", + "@opentelemetry/auto-instrumentations-node": "^0.66.0", + "@opentelemetry/core": "^2.2.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.207.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.207.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.207.0", + "@opentelemetry/host-metrics": "^0.36.2", + "@opentelemetry/otlp-exporter-base": "^0.207.0", + "@opentelemetry/resources": "^2.2.0", + "@opentelemetry/sdk-logs": "^0.207.0", + "@opentelemetry/sdk-metrics": "^2.2.0", + "@opentelemetry/sdk-node": "^0.207.0", + "@opentelemetry/sdk-trace-base": "^2.2.0", + "@opentelemetry/semantic-conventions": "^1.37.0", + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", "typescript": "^5.9.0", }, }, "packages/test-utils": { "name": "@agentuity/test-utils", - "version": "2.0.9", + "version": "1.0.54", "dependencies": { "@agentuity/core": "workspace:*", }, @@ -950,15 +841,15 @@ "name": "@agentuity/vector", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "packages/vscode": { @@ -979,15 +870,15 @@ "name": "@agentuity/webhook", "version": "2.0.9", "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5", }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0", + "typescript": "^6.0.2", }, }, "packages/workbench": { @@ -1065,10 +956,12 @@ "react-dom": "^19.2.3", }, "packages": { - "@acemir/cssom": ["@acemir/cssom@0.9.31", "", {}, "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA=="], - "@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="], + "@agentuity/adapter": ["@agentuity/adapter@workspace:packages/adapter"], + + "@agentuity/analytics": ["@agentuity/analytics@workspace:packages/analytics"], + "@agentuity/auth": ["@agentuity/auth@workspace:packages/auth"], "@agentuity/claude-code": ["@agentuity/claude-code@workspace:packages/claude-code"], @@ -1091,8 +984,12 @@ "@agentuity/frontend": ["@agentuity/frontend@workspace:packages/frontend"], + "@agentuity/hono": ["@agentuity/hono@workspace:packages/hono"], + "@agentuity/keyvalue": ["@agentuity/keyvalue@workspace:packages/keyvalue"], + "@agentuity/local": ["@agentuity/local@workspace:packages/local"], + "@agentuity/migrate": ["@agentuity/migrate@workspace:packages/migrate"], "@agentuity/opencode": ["@agentuity/opencode@workspace:packages/opencode"], @@ -1113,8 +1010,12 @@ "@agentuity/server": ["@agentuity/server@workspace:packages/server"], + "@agentuity/stream": ["@agentuity/stream@workspace:packages/stream"], + "@agentuity/task": ["@agentuity/task@workspace:packages/task"], + "@agentuity/telemetry": ["@agentuity/telemetry@workspace:packages/telemetry"], + "@agentuity/test-utils": ["@agentuity/test-utils@workspace:packages/test-utils"], "@agentuity/vector": ["@agentuity/vector@workspace:packages/vector"], @@ -1125,30 +1026,24 @@ "@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.74", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-1Z7142GVIF4XkcSvQpL6ij2c7J51dtm4/Z84P+O0bGBDZI1Nbvz897hXkJf2cfNhq5XdpvUYbI+oExXM7Ko8Zw=="], - "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.87", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.22", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-knLx/VY0u5KAZGgrTorWCTbEnwK3oCCdm8yjxVQm3s14erqVo60SP08dsFWm+xNULPTusftQGVD/l0/hx5QOHg=="], + "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.95", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-ZmUNNbZl3V42xwQzPaNUi+s8eqR2lnrxf0bvB6YbLXpLjHYv0k2Y78t12cNOfY0bxGeuVVTLyk856uLuQIuXEQ=="], - "@ai-sdk/google": ["@ai-sdk/google@2.0.66", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Mh2J3fEG/BlW/jzp6kxIrIeTDxS0Hm8TIlBBOuAKn7iiveh4hGmo1PyZgjoKaPgIhOx66p/LTVr8xz07g/pQbg=="], + "@ai-sdk/google": ["@ai-sdk/google@2.0.67", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-A7iZeJf3RbNIrFBKsskd2s4c52tK0S0nX4rGlehjVHSYBvIZzrX+RW3Oxe7WnpeI0aON+5dVsqfGLFNYNGWEXw=="], - "@ai-sdk/groq": ["@ai-sdk/groq@3.0.33", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.22" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-LtVQt3ZSz0mY/CQYxt8y+qtCoEIfXxn4DZB3jWV75GJU3uOtNc6DqI4qUuj6ZDQF+zJcMmmKHvfCeDY5m4fQtw=="], + "@ai-sdk/groq": ["@ai-sdk/groq@3.0.35", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-LXoPwSKaqXst9LyLN2J7gK8n7RldQLbP2zsnBYxXcOsXKrtceksqtbsmGXujvab2TM9FisquAw/ZG2hTbD5vnQ=="], - "@ai-sdk/openai": ["@ai-sdk/openai@3.0.50", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.22" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-7M7bklrS+gckzPdpQpC3iG5aN5aQPRJdAJQ5jt7sEgYCqDgUuef9x4Nd570+ghIfKTZvV6tSqeeTuD6De/bZig=="], + "@ai-sdk/openai": ["@ai-sdk/openai@2.0.102", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tYarHJhyMioGegsnhpqz1/tKoCAJJ6zBHoIQaredNkt8V3o/JXj2647NnEOJVe7WHQXGvCfzbfnP1TADFhPmcA=="], "@ai-sdk/provider": ["@ai-sdk/provider@3.0.8", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ=="], - "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.22", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-B2OTFcRw/Pdka9ZTjpXv6T6qZ6RruRuLokyb8HwW+aoW9ndJ3YasA3/mVswyJw7VMBF8ofXgqvcrCt9KYvFifg=="], + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.23", "", { "dependencies": { "@ai-sdk/provider": "3.0.8", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg=="], - "@ai-sdk/react": ["@ai-sdk/react@3.0.147", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.22", "ai": "6.0.145", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-Ig5DVtZt21xwP2cdX9zTtBBQL6upminiwHP4k0a87Z1SY+ZcDY/wv3IRKGEPkM/INuvpEoGQFZtvqElcLtYRpQ=="], + "@ai-sdk/react": ["@ai-sdk/react@3.0.158", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.23", "ai": "6.0.156", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-U8LENItz0c91dEIT9vwhKiXIjIXMqdTZWwzveBxdJDcBYHicyq1ohsKnebdj7B7GjG21nREK1AGif0m0pxcqRw=="], "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.73.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-URURVzhxXGJDGUGFunIOtBlSl7KWvZiAAKY/ttTkZAkXT9bTPqdk2eK0b8qqSxXpikh3QKPnPYpiyX98zf5ebw=="], - "@asamuzakjp/css-color": ["@asamuzakjp/css-color@4.1.2", "", { "dependencies": { "@csstools/css-calc": "^3.0.0", "@csstools/css-color-parser": "^4.0.1", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0", "lru-cache": "^11.2.5" } }, "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg=="], - - "@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@6.8.1", "", { "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.1.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.2.6" } }, "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ=="], - - "@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="], - "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], "@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="], @@ -1159,59 +1054,59 @@ "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - "@aws-sdk/client-bedrock-runtime": ["@aws-sdk/client-bedrock-runtime@3.1023.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.26", "@aws-sdk/credential-provider-node": "^3.972.29", "@aws-sdk/eventstream-handler-node": "^3.972.12", "@aws-sdk/middleware-eventstream": "^3.972.8", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", "@aws-sdk/middleware-user-agent": "^3.972.28", "@aws-sdk/middleware-websocket": "^3.972.14", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/token-providers": "3.1023.0", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.14", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.13", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.28", "@smithy/middleware-retry": "^4.4.46", "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.44", "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.13", "@smithy/util-stream": "^4.5.21", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-C0He9qhrClUp6JEk3QjE0WScDN1GSZF8eruP0uoh5kXeQEJLxyfFDrR2TIYnHntlRs/sMwhO82Vu7yGGQM2pfQ=="], + "@aws-sdk/client-bedrock-runtime": ["@aws-sdk/client-bedrock-runtime@3.1028.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.27", "@aws-sdk/credential-provider-node": "^3.972.30", "@aws-sdk/eventstream-handler-node": "^3.972.13", "@aws-sdk/middleware-eventstream": "^3.972.9", "@aws-sdk/middleware-host-header": "^3.972.9", "@aws-sdk/middleware-logger": "^3.972.9", "@aws-sdk/middleware-recursion-detection": "^3.972.10", "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/middleware-websocket": "^3.972.15", "@aws-sdk/region-config-resolver": "^3.972.11", "@aws-sdk/token-providers": "3.1028.0", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@aws-sdk/util-user-agent-browser": "^3.972.9", "@aws-sdk/util-user-agent-node": "^3.973.15", "@smithy/config-resolver": "^4.4.14", "@smithy/core": "^3.23.14", "@smithy/eventstream-serde-browser": "^4.2.13", "@smithy/eventstream-serde-config-resolver": "^4.3.13", "@smithy/eventstream-serde-node": "^4.2.13", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/hash-node": "^4.2.13", "@smithy/invalid-dependency": "^4.2.13", "@smithy/middleware-content-length": "^4.2.13", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-retry": "^4.5.0", "@smithy/middleware-serde": "^4.2.17", "@smithy/middleware-stack": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/node-http-handler": "^4.5.2", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.45", "@smithy/util-defaults-mode-node": "^4.2.49", "@smithy/util-endpoints": "^3.3.4", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.0", "@smithy/util-stream": "^4.5.22", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FFdtkxWFmKX1Ka/vjDRKpYsm0/HTlab5qpHl8LAXRmJjhSSiLGiCnJYsYFN+zp3NucL02kM1DlpFU8Xnm7d8Ng=="], - "@aws-sdk/core": ["@aws-sdk/core@3.973.26", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/xml-builder": "^3.972.16", "@smithy/core": "^3.23.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ=="], + "@aws-sdk/core": ["@aws-sdk/core@3.973.27", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@aws-sdk/xml-builder": "^3.972.17", "@smithy/core": "^3.23.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/signature-v4": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.13", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-CUZ5m8hwMCH6OYI4Li/WgMfIEx10Q2PLI9Y3XOUTPGZJ53aZ0007jCv+X/ywsaERyKPdw5MRZWk877roQksQ4A=="], - "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-FWg8uFmT6vQM7VuzELzwVo5bzExGaKHdubn0StjgrcU5FvuLExUe+k06kn/40uKv59rYzhez8eFNM4yYE/Yb/w=="], + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A=="], - "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.26", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.1", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.21", "tslib": "^2.6.2" } }, "sha512-CY4ppZ+qHYqcXqBVi//sdHST1QK3KzOEiLtpLsc9W2k2vfZPKExGaQIsOwcyvjpjUEolotitmd3mUNY56IwDEA=="], + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.27", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/property-provider": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ=="], - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.28", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/credential-provider-env": "^3.972.24", "@aws-sdk/credential-provider-http": "^3.972.26", "@aws-sdk/credential-provider-login": "^3.972.28", "@aws-sdk/credential-provider-process": "^3.972.24", "@aws-sdk/credential-provider-sso": "^3.972.28", "@aws-sdk/credential-provider-web-identity": "^3.972.28", "@aws-sdk/nested-clients": "^3.996.18", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wXYvq3+uQcZV7k+bE4yDXCTBdzWTU9x/nMiKBfzInmv6yYK1veMK0AKvRfRBd72nGWYKcL6AxwiPg9z/pYlgpw=="], + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/credential-provider-env": "^3.972.25", "@aws-sdk/credential-provider-http": "^3.972.27", "@aws-sdk/credential-provider-login": "^3.972.29", "@aws-sdk/credential-provider-process": "^3.972.25", "@aws-sdk/credential-provider-sso": "^3.972.29", "@aws-sdk/credential-provider-web-identity": "^3.972.29", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw=="], - "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.28", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/nested-clients": "^3.996.18", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-ZSTfO6jqUTCysbdBPtEX5OUR//3rbD0lN7jO3sQeS2Gjr/Y+DT6SbIJ0oT2cemNw3UzKu97sNONd1CwNMthuZQ=="], + "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-OGOslTbOlxXexKMqhxCEbBQbUIfuhGxU5UXw3Fm56ypXHvrXH4aTt/xb5Y884LOoteP1QST1lVZzHfcTnWhiPQ=="], - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.29", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.24", "@aws-sdk/credential-provider-http": "^3.972.26", "@aws-sdk/credential-provider-ini": "^3.972.28", "@aws-sdk/credential-provider-process": "^3.972.24", "@aws-sdk/credential-provider-sso": "^3.972.28", "@aws-sdk/credential-provider-web-identity": "^3.972.28", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-clSzDcvndpFJAggLDnDb36sPdlZYyEs5Zm6zgZjjUhwsJgSWiWKwFIXUVBcbruidNyBdbpOv2tNDL9sX8y3/0g=="], + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.30", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.25", "@aws-sdk/credential-provider-http": "^3.972.27", "@aws-sdk/credential-provider-ini": "^3.972.29", "@aws-sdk/credential-provider-process": "^3.972.25", "@aws-sdk/credential-provider-sso": "^3.972.29", "@aws-sdk/credential-provider-web-identity": "^3.972.29", "@aws-sdk/types": "^3.973.7", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw=="], - "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.24", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Q2k/XLrFXhEztPHqj4SLCNID3hEPdlhh1CDLBpNnM+1L8fq7P+yON9/9M1IGN/dA5W45v44ylERfXtDAlmMNmw=="], + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.25", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ=="], - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.28", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/nested-clients": "^3.996.18", "@aws-sdk/token-providers": "3.1021.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-IoUlmKMLEITFn1SiCTjPfR6KrE799FBo5baWyk/5Ppar2yXZoUdaRqZzJzK6TcJxx450M8m8DbpddRVYlp5R/A=="], + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/token-providers": "3.1026.0", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig=="], - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.28", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/nested-clients": "^3.996.18", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-d+6h0SD8GGERzKe27v5rOzNGKOl0D+l0bWJdqrxH8WSQzHzjsQFIAPgIeOTUwBHVsKKwtSxc91K/SWax6XgswQ=="], + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew=="], - "@aws-sdk/eventstream-handler-node": ["@aws-sdk/eventstream-handler-node@3.972.12", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/eventstream-codec": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-ruyc/MNR6e+cUrGCth7fLQ12RXBZDy/bV06tgqB9Z5n/0SN/C0m6bsQEV8FF9zPI6VSAOaRd0rNgmpYVnGawrQ=="], + "@aws-sdk/eventstream-handler-node": ["@aws-sdk/eventstream-handler-node@3.972.13", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/eventstream-codec": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-2Pi1kD0MDkMAxDHqvpi/hKMs9hXUYbj2GLEjCwy+0jzfLChAsF50SUYnOeTI+RztA+Ic4pnLAdB03f1e8nggxQ=="], - "@aws-sdk/middleware-eventstream": ["@aws-sdk/middleware-eventstream@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-r+oP+tbCxgqXVC3pu3MUVePgSY0ILMjA+aEwOosS77m3/DRbtvHrHwqvMcw+cjANMeGzJ+i0ar+n77KXpRA8RQ=="], + "@aws-sdk/middleware-eventstream": ["@aws-sdk/middleware-eventstream@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-ypgOvpWxQTCnQyDHGxnTviqqANE7FIIzII7VczJnTPCJcJlu17hMQXnvE47aKSKsawVJAaaRsyOEbHQuLJF9ng=="], - "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ=="], + "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ=="], - "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA=="], + "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog=="], - "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ=="], + "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ=="], - "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.28", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@smithy/core": "^3.23.13", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-cfWZFlVh7Va9lRay4PN2A9ARFzaBYcA097InT5M2CdRS05ECF5yaz86jET8Wsl2WcyKYEvVr/QNmKtYtafUHtQ=="], + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.29", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@smithy/core": "^3.23.14", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-retry": "^4.3.0", "tslib": "^2.6.2" } }, "sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ=="], - "@aws-sdk/middleware-websocket": ["@aws-sdk/middleware-websocket@3.972.14", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-format-url": "^3.972.8", "@smithy/eventstream-codec": "^4.2.12", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-qnfDlIHjm6DrTYNvWOUbnZdVKgtoKbO/Qzj+C0Wp5Y7VUrsvBRQtGKxD+hc+mRTS4N0kBJ6iZ3+zxm4N1OSyjg=="], + "@aws-sdk/middleware-websocket": ["@aws-sdk/middleware-websocket@3.972.15", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-format-url": "^3.972.9", "@smithy/eventstream-codec": "^4.2.13", "@smithy/eventstream-serde-browser": "^4.2.13", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/protocol-http": "^5.3.13", "@smithy/signature-v4": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-hsZ35FORQsN5hwNdMD6zWmHCphbXkDxO6j+xwCUiuMb0O6gzS/PWgttQNl1OAn7h/uqZAMUG4yOS0wY/yhAieg=="], - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.18", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.26", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.9", "@aws-sdk/middleware-user-agent": "^3.972.28", "@aws-sdk/region-config-resolver": "^3.972.10", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", "@aws-sdk/util-user-agent-node": "^3.973.14", "@smithy/config-resolver": "^4.4.13", "@smithy/core": "^3.23.13", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", "@smithy/middleware-endpoint": "^4.4.28", "@smithy/middleware-retry": "^4.4.46", "@smithy/middleware-serde": "^4.2.16", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/node-http-handler": "^4.5.1", "@smithy/protocol-http": "^5.3.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.44", "@smithy/util-defaults-mode-node": "^4.2.48", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.13", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-c7ZSIXrESxHKx2Mcopgd8AlzZgoXMr20fkx5ViPWPOLBvmyhw9VwJx/Govg8Ef/IhEon5R9l53Z8fdYSEmp6VA=="], + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.19", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.27", "@aws-sdk/middleware-host-header": "^3.972.9", "@aws-sdk/middleware-logger": "^3.972.9", "@aws-sdk/middleware-recursion-detection": "^3.972.10", "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/region-config-resolver": "^3.972.11", "@aws-sdk/types": "^3.973.7", "@aws-sdk/util-endpoints": "^3.996.6", "@aws-sdk/util-user-agent-browser": "^3.972.9", "@aws-sdk/util-user-agent-node": "^3.973.15", "@smithy/config-resolver": "^4.4.14", "@smithy/core": "^3.23.14", "@smithy/fetch-http-handler": "^5.3.16", "@smithy/hash-node": "^4.2.13", "@smithy/invalid-dependency": "^4.2.13", "@smithy/middleware-content-length": "^4.2.13", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-retry": "^4.5.0", "@smithy/middleware-serde": "^4.2.17", "@smithy/middleware-stack": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/node-http-handler": "^4.5.2", "@smithy/protocol-http": "^5.3.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.45", "@smithy/util-defaults-mode-node": "^4.2.49", "@smithy/util-endpoints": "^3.3.4", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-uFkmCDXvmQYLanlYdOFS0+MQWkrj9wPMt/ZCc/0J0fjPim6F5jBVBmEomvGY/j77ILW6GTPwN22Jc174Mhkw6Q=="], - "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.10", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/config-resolver": "^4.4.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ=="], + "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.11", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/config-resolver": "^4.4.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg=="], - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1023.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/nested-clients": "^3.996.18", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-g/t814ec7g+MbazONIdQzb0c8FalVnSKCLc665GLG4QdrviKXHzag7HQmf5wBhCDsUDNAIi77fLeElaZSkylTA=="], + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1028.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-2vDFrEhJDlUHyvDxqDyOk97cejMM8GJDyQbFfOCEWclGwhTjlj1mdyj36xsxh7DYyuquhjqfbvhpl6ZzsVol0w=="], - "@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], + "@aws-sdk/types": ["@aws-sdk/types@3.973.7", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg=="], - "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.5", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-endpoints": "^3.3.3", "tslib": "^2.6.2" } }, "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw=="], + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.6", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-endpoints": "^3.3.4", "tslib": "^2.6.2" } }, "sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg=="], - "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-J6DS9oocrgxM8xlUTTmQOuwRF6rnAGEujAN9SAzllcrQmwn5iJ58ogxy3SEhD0Q7JZvlA5jvIXBkpQRqEqlE9A=="], + "@aws-sdk/util-format-url": ["@aws-sdk/util-format-url@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-fNJXHrs0ZT7Wx0KGIqKv7zLxlDXt2vqjx9z6oKUQFmpE5o4xxnSryvVHfHpIifYHWKz94hFccIldJ0YSZjlCBw=="], "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.5", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ=="], - "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.8", "", { "dependencies": { "@aws-sdk/types": "^3.973.6", "@smithy/types": "^4.13.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA=="], + "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.9", "", { "dependencies": { "@aws-sdk/types": "^3.973.7", "@smithy/types": "^4.14.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw=="], - "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.14", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.28", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-vNSB/DYaPOyujVZBg/zUznH9QC142MaTHVmaFlF7uzzfg3CgT9f/l4C0Yi+vU/tbBhxVcXVB90Oohk5+o+ZbWw=="], + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.15", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.29", "@aws-sdk/types": "^3.973.7", "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w=="], - "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.16", "", { "dependencies": { "@smithy/types": "^4.13.1", "fast-xml-parser": "5.5.8", "tslib": "^2.6.2" } }, "sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A=="], + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.17", "", { "dependencies": { "@smithy/types": "^4.14.0", "fast-xml-parser": "5.5.8", "tslib": "^2.6.2" } }, "sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg=="], "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.4", "", {}, "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ=="], @@ -1305,23 +1200,23 @@ "@better-fetch/fetch": ["@better-fetch/fetch@1.1.21", "", {}, "sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A=="], - "@biomejs/biome": ["@biomejs/biome@2.4.10", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.10", "@biomejs/cli-darwin-x64": "2.4.10", "@biomejs/cli-linux-arm64": "2.4.10", "@biomejs/cli-linux-arm64-musl": "2.4.10", "@biomejs/cli-linux-x64": "2.4.10", "@biomejs/cli-linux-x64-musl": "2.4.10", "@biomejs/cli-win32-arm64": "2.4.10", "@biomejs/cli-win32-x64": "2.4.10" }, "bin": { "biome": "bin/biome" } }, "sha512-xxA3AphFQ1geij4JTHXv4EeSTda1IFn22ye9LdyVPoJU19fNVl0uzfEuhsfQ4Yue/0FaLs2/ccVi4UDiE7R30w=="], + "@biomejs/biome": ["@biomejs/biome@2.4.11", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.11", "@biomejs/cli-darwin-x64": "2.4.11", "@biomejs/cli-linux-arm64": "2.4.11", "@biomejs/cli-linux-arm64-musl": "2.4.11", "@biomejs/cli-linux-x64": "2.4.11", "@biomejs/cli-linux-x64-musl": "2.4.11", "@biomejs/cli-win32-arm64": "2.4.11", "@biomejs/cli-win32-x64": "2.4.11" }, "bin": { "biome": "bin/biome" } }, "sha512-nWxHX8tf3Opb/qRgZpBbsTOqOodkbrkJ7S+JxJAruxOReaDPPmPuLBAGQ8vigyUgo0QBB+oQltNEAvalLcjggA=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wOt+ed+L2dgZanWyL6i29qlXMc088N11optzpo10peayObBaAshbTcxKUchzEMp9QSY8rh5h6VfAFE3WTS1rqg=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-gZ6zR8XmZlExfi/Pz/PffmdpWOQ8Qhy7oBztgkR8/ylSRyLwfRPSadmiVCV8WQ8PoJ2MWUy2fgID9zmtgUUJmw=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-avdJaEElXrKceK0va9FkJ4P5ci3N01TGkc6ni3P8l3BElqbOz42Wg2IyX3gbh0ZLEd4HVKEIrmuVu/AMuSeFFA=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-+Sbo1OAmlegtdwqFE8iOxFIWLh1B3OEgsuZfBpyyN/kWuqZ8dx9ZEes6zVnDMo+zRHF2wLynRVhoQmV7ohxl2Q=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.10", "", { "os": "linux", "cpu": "x64" }, "sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.11", "", { "os": "linux", "cpu": "x64" }, "sha512-TagWV0iomp5LnEnxWFg4nQO+e52Fow349vaX0Q/PIcX6Zhk4GGBgp3qqZ8PVkpC+cuehRctMf3+6+FgQ8jCEFQ=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.10", "", { "os": "linux", "cpu": "x64" }, "sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.11", "", { "os": "linux", "cpu": "x64" }, "sha512-bexd2IklK7ZgPhrz6jXzpIL6dEAH9MlJU1xGTrypx+FICxrXUp4CqtwfiuoDKse+UlgAlWtzML3jrMqeEAHEhA=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-RJhaTnY8byzxDt4bDVb7AFPHkPcjOPK3xBip4ZRTrN3TEfyhjLRm3r3mqknqydgVTB74XG8l4jMLwEACEeihVg=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.10", "", { "os": "win32", "cpu": "x64" }, "sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.11", "", { "os": "win32", "cpu": "x64" }, "sha512-A8D3JM/00C2KQgUV3oj8Ba15EHEYwebAGCy5Sf9GAjr5Y3+kJIYOiESoqRDeuRZueuMdCsbLZIUqmPhpYXJE9A=="], "@borewit/text-codec": ["@borewit/text-codec@0.2.2", "", {}, "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ=="], @@ -1329,34 +1224,18 @@ "@cfworker/json-schema": ["@cfworker/json-schema@4.1.1", "", {}, "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og=="], - "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@11.1.2", "", { "dependencies": { "@chevrotain/gast": "11.1.2", "@chevrotain/types": "11.1.2", "lodash-es": "4.17.23" } }, "sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q=="], + "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@12.0.0", "", { "dependencies": { "@chevrotain/gast": "12.0.0", "@chevrotain/types": "12.0.0" } }, "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg=="], - "@chevrotain/gast": ["@chevrotain/gast@11.1.2", "", { "dependencies": { "@chevrotain/types": "11.1.2", "lodash-es": "4.17.23" } }, "sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g=="], + "@chevrotain/gast": ["@chevrotain/gast@12.0.0", "", { "dependencies": { "@chevrotain/types": "12.0.0" } }, "sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ=="], - "@chevrotain/regexp-to-ast": ["@chevrotain/regexp-to-ast@11.1.2", "", {}, "sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw=="], + "@chevrotain/regexp-to-ast": ["@chevrotain/regexp-to-ast@12.0.0", "", {}, "sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA=="], - "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + "@chevrotain/types": ["@chevrotain/types@12.0.0", "", {}, "sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA=="], - "@chevrotain/utils": ["@chevrotain/utils@11.1.2", "", {}, "sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA=="], - - "@clack/core": ["@clack/core@0.5.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow=="], - - "@clack/prompts": ["@clack/prompts@0.11.0", "", { "dependencies": { "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw=="], + "@chevrotain/utils": ["@chevrotain/utils@12.0.0", "", {}, "sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA=="], "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], - "@csstools/color-helpers": ["@csstools/color-helpers@6.0.2", "", {}, "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q=="], - - "@csstools/css-calc": ["@csstools/css-calc@3.1.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ=="], - - "@csstools/css-color-parser": ["@csstools/css-color-parser@4.0.2", "", { "dependencies": { "@csstools/color-helpers": "^6.0.2", "@csstools/css-calc": "^3.1.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw=="], - - "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@4.0.0", "", { "peerDependencies": { "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w=="], - - "@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.1.2", "", { "peerDependencies": { "css-tree": "^3.2.1" }, "optionalPeers": ["css-tree"] }, "sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA=="], - - "@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="], - "@datasert/cronjs-parser": ["@datasert/cronjs-parser@1.4.0", "", {}, "sha512-zHGlrWanS4Zjgf0aMi/sp/HTSa2xWDEtXW9xshhlGf/jPx3zTIqfX14PZnoFF7XVOwzC49Zy0SFWG90rlRY36Q=="], "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], @@ -1425,8 +1304,6 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], - "@exodus/bytes": ["@exodus/bytes@1.15.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ=="], - "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], @@ -1437,7 +1314,7 @@ "@fortawesome/fontawesome-free": ["@fortawesome/fontawesome-free@6.7.2", "", {}, "sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA=="], - "@google/genai": ["@google/genai@1.48.0", "", { "dependencies": { "google-auth-library": "^10.3.0", "p-retry": "^4.6.2", "protobufjs": "^7.5.4", "ws": "^8.18.0" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.25.2" }, "optionalPeers": ["@modelcontextprotocol/sdk"] }, "sha512-plonYK4ML2PrxsRD9SeqmFt76eREWkQdPCglOA6aYDzL1AAbE+7PUnT54SvpWGfws13L0AZEqGSpL7+1IPnTxQ=="], + "@google/genai": ["@google/genai@1.49.0", "", { "dependencies": { "google-auth-library": "^10.3.0", "p-retry": "^4.6.2", "protobufjs": "^7.5.4", "ws": "^8.18.0" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.25.2" }, "optionalPeers": ["@modelcontextprotocol/sdk"] }, "sha512-hO69Zl0H3x+L0KL4stl1pLYgnqnwHoLqtKy6MRlNnW8TAxjqMdOUVafomKd4z1BePkzoxJWbYILny9a2Zk43VQ=="], "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], @@ -1553,13 +1430,13 @@ "@mariozechner/jiti": ["@mariozechner/jiti@2.6.5", "", { "dependencies": { "std-env": "^3.10.0", "yoctocolors": "^2.1.2" }, "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-faGUlTcXka5l7rv0lP3K3vGW/ejRuOS24RR2aSFWREUQqzjgdsuWNo/IiPqL3kWRGt6Ahl2+qcDAwtdeWeuGUw=="], - "@mariozechner/pi-agent-core": ["@mariozechner/pi-agent-core@0.65.0", "", { "dependencies": { "@mariozechner/pi-ai": "^0.65.0" } }, "sha512-QCDqkgxvCkizCgJOl0aFekT1gURppznzuBIGXS8dXWZMour/xX6YF7chxX56mZ0p0DXkILM1ixf5jXYBfDsP5w=="], + "@mariozechner/pi-agent-core": ["@mariozechner/pi-agent-core@0.65.2", "", { "dependencies": { "@mariozechner/pi-ai": "^0.65.2" } }, "sha512-GYOrX5aRUpSDMPtKR174Tv72CWH92anqlRuiGn8PV05OowPAahT99JoxvZEP4fcKANBdHsyDfMMwFYpPhvPBUQ=="], - "@mariozechner/pi-ai": ["@mariozechner/pi-ai@0.65.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.73.0", "@aws-sdk/client-bedrock-runtime": "^3.983.0", "@google/genai": "^1.40.0", "@mistralai/mistralai": "1.14.1", "@sinclair/typebox": "^0.34.41", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "chalk": "^5.6.2", "openai": "6.26.0", "partial-json": "^0.1.7", "proxy-agent": "^6.5.0", "undici": "^7.19.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-MsCsCHlHIlBYbg6jB2PJBeCNKbjzVZge7ddBNUJN2gsFY8sdjFh482+GB+r5Ou6k9Fnhi3nO779YDymo5+t89w=="], + "@mariozechner/pi-ai": ["@mariozechner/pi-ai@0.65.2", "", { "dependencies": { "@anthropic-ai/sdk": "^0.73.0", "@aws-sdk/client-bedrock-runtime": "^3.983.0", "@google/genai": "^1.40.0", "@mistralai/mistralai": "1.14.1", "@sinclair/typebox": "^0.34.41", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "chalk": "^5.6.2", "openai": "6.26.0", "partial-json": "^0.1.7", "proxy-agent": "^6.5.0", "undici": "^7.19.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-XCbXncmh10Q89tvS0880Ms6pv3DTxFTEtanfVHEPXKQBi0FBYnrkAlOnP5VRU8vCfe18P1AMNsWCndsCBUqY7g=="], - "@mariozechner/pi-coding-agent": ["@mariozechner/pi-coding-agent@0.65.0", "", { "dependencies": { "@mariozechner/jiti": "^2.6.2", "@mariozechner/pi-agent-core": "^0.65.0", "@mariozechner/pi-ai": "^0.65.0", "@mariozechner/pi-tui": "^0.65.0", "@silvia-odwyer/photon-node": "^0.3.4", "ajv": "^8.17.1", "chalk": "^5.5.0", "cli-highlight": "^2.1.11", "diff": "^8.0.2", "extract-zip": "^2.0.1", "file-type": "^21.1.1", "glob": "^13.0.1", "hosted-git-info": "^9.0.2", "ignore": "^7.0.5", "marked": "^15.0.12", "minimatch": "^10.2.3", "proper-lockfile": "^4.1.2", "strip-ansi": "^7.1.0", "undici": "^7.19.1", "yaml": "^2.8.2" }, "optionalDependencies": { "@mariozechner/clipboard": "^0.3.2" }, "bin": { "pi": "dist/cli.js" } }, "sha512-IEBZ74n17w8NxnG/X2ixErsSYcvLm/h5WKALNbPgPWJZqvafNtJ0GcrCfLCS6RVIq2o+O/a2QwsbSI6bgJ6W/A=="], + "@mariozechner/pi-coding-agent": ["@mariozechner/pi-coding-agent@0.65.2", "", { "dependencies": { "@mariozechner/jiti": "^2.6.2", "@mariozechner/pi-agent-core": "^0.65.2", "@mariozechner/pi-ai": "^0.65.2", "@mariozechner/pi-tui": "^0.65.2", "@silvia-odwyer/photon-node": "^0.3.4", "ajv": "^8.17.1", "chalk": "^5.5.0", "cli-highlight": "^2.1.11", "diff": "^8.0.2", "extract-zip": "^2.0.1", "file-type": "^21.1.1", "glob": "^13.0.1", "hosted-git-info": "^9.0.2", "ignore": "^7.0.5", "marked": "^15.0.12", "minimatch": "^10.2.3", "proper-lockfile": "^4.1.2", "strip-ansi": "^7.1.0", "undici": "^7.19.1", "yaml": "^2.8.2" }, "optionalDependencies": { "@mariozechner/clipboard": "^0.3.2" }, "bin": { "pi": "dist/cli.js" } }, "sha512-/rpFzPQ+CishxrSwJHSSRZBQHHWy2K3Rbu/iV0HcMq/hl9cSI2ygpwjVTRbPW+NuP1tHxVV3AMxz69VLAs5Ztg=="], - "@mariozechner/pi-tui": ["@mariozechner/pi-tui@0.65.0", "", { "dependencies": { "@types/mime-types": "^2.1.4", "chalk": "^5.5.0", "get-east-asian-width": "^1.3.0", "marked": "^15.0.12", "mime-types": "^3.0.1" }, "optionalDependencies": { "koffi": "^2.9.0" } }, "sha512-P5Uuf4x1sTplMNQw8NrC1Hyz0N/tZq9kC6CDRkTT7rZuxZEeXl9uhKvlLEGigdKVOVrWnPE7ip0jrO81POYy3g=="], + "@mariozechner/pi-tui": ["@mariozechner/pi-tui@0.65.2", "", { "dependencies": { "@types/mime-types": "^2.1.4", "chalk": "^5.5.0", "get-east-asian-width": "^1.3.0", "marked": "^15.0.12", "mime-types": "^3.0.1" }, "optionalDependencies": { "koffi": "^2.9.0" } }, "sha512-LBPbIBASjCF4QLrc/dwmPdBzVMsbkDhzmBIAFgglX5rZBnGRppB7ekSA+1kb5pdxDpDn8IbxJX+bl7ZaeqZqxw=="], "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], @@ -1577,23 +1454,23 @@ "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.4.6", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g=="], - "@next/env": ["@next/env@15.5.14", "", {}, "sha512-aXeirLYuASxEgi4X4WhfXsShCFxWDfNn/8ZeC5YXAS2BB4A8FJi1kwwGL6nvMVboE7fZCzmJPNdMvVHc8JpaiA=="], + "@next/env": ["@next/env@15.5.15", "", {}, "sha512-vcmyu5/MyFzN7CdqRHO3uHO44p/QPCZkuTUXroeUmhNP8bL5PHFEhik22JUazt+CDDoD6EpBYRCaS2pISL+/hg=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.14", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y9K6SPzobnZvrRDPO2s0grgzC+Egf0CqfbdvYmQVaztV890zicw8Z8+4Vqw8oPck8r1TjUHxVh8299Cg4TrxXg=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6PvFO2Tzt10GFK2Ro9tAVEtacMqRmTarYMFKAnV2vYMdwWc73xzmDQyAV7SwEdMhzmiRoo7+m88DuiXlJlGeaw=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.14", "", { "os": "darwin", "cpu": "x64" }, "sha512-aNnkSMjSFRTOmkd7qoNI2/rETQm/vKD6c/Ac9BZGa9CtoOzy3c2njgz7LvebQJ8iPxdeTuGnAjagyis8a9ifBw=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-G+YNV+z6FDZTp/+IdGyIMFqalBTaQSnvAA+X/hrt+eaTRFSznRMz9K7rTmzvM6tDmKegNtyzgufZW0HwVzEqaQ=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-tjlpia+yStPRS//6sdmlVwuO1Rioern4u2onafa5n+h2hCS9MAvMXqpVbSrjgiEOoCs0nJy7oPOmWgtRRNSM5Q=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-eVkrMcVIBqGfXB+QUC7jjZ94Z6uX/dNStbQFabewAnk13Uy18Igd1YZ/GtPRzdhtm7QwC0e6o7zOQecul4iC1w=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-8B8cngBaLadl5lbDRdxGCP1Lef8ipD6KlxS3v0ElDAGil6lafrAM3B258p1KJOglInCVFUjk751IXMr2ixeQOQ=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-RwSHKMQ7InLy5GfkY2/n5PcFycKA08qI1VST78n09nN36nUPqCvGSMiLXlfUmzmpQpF6XeBYP2KRWHi0UW3uNg=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.14", "", { "os": "linux", "cpu": "x64" }, "sha512-bAS6tIAg8u4Gn3Nz7fCPpSoKAexEt2d5vn1mzokcqdqyov6ZJ6gu6GdF9l8ORFrBuRHgv3go/RfzYz5BkZ6YSQ=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.15", "", { "os": "linux", "cpu": "x64" }, "sha512-nplqvY86LakS+eeiuWsNWvfmK8pFcOEW7ZtVRt4QH70lL+0x6LG/m1OpJ/tvrbwjmR8HH9/fH2jzW1GlL03TIg=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.14", "", { "os": "linux", "cpu": "x64" }, "sha512-mMxv/FcrT7Gfaq4tsR22l17oKWXZmH/lVqcvjX0kfp5I0lKodHYLICKPoX1KRnnE+ci6oIUdriUhuA3rBCDiSw=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.15", "", { "os": "linux", "cpu": "x64" }, "sha512-eAgl9NKQ84/sww0v81DQINl/vL2IBxD7sMybd0cWRw6wqgouVI53brVRBrggqBRP/NWeIAE1dm5cbKYoiMlqDQ=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.14", "", { "os": "win32", "cpu": "arm64" }, "sha512-OTmiBlYThppnvnsqx0rBqjDRemlmIeZ8/o4zI7veaXoeO1PVHoyj2lfTfXTiiGjCyRDhA10y4h6ZvZvBiynr2g=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-GJVZC86lzSquh0MtvZT+L7G8+jMnJcldloOjA8Kf3wXvBrvb6OGe2MzPuALxFshSm/IpwUtD2mIoof39ymf52A=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.14", "", { "os": "win32", "cpu": "x64" }, "sha512-+W7eFf3RS7m4G6tppVTOSyP9Y6FsJXfOuKzav1qKniiFm3KFByQfPEcouHdjlZmysl4zJGuGLQ/M9XyVeyeNEg=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.15", "", { "os": "win32", "cpu": "x64" }, "sha512-nFucjVdwlFqxh/JG3hWSJ4p8+YJV7Ii8aPDuBQULB6DzUF4UNZETXLfEUk+oI2zEznWWULPt7MeuTE6xtK1HSA=="], "@noble/ciphers": ["@noble/ciphers@2.1.1", "", {}, "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw=="], @@ -1605,9 +1482,9 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@opencode-ai/plugin": ["@opencode-ai/plugin@1.3.13", "", { "dependencies": { "@opencode-ai/sdk": "1.3.13", "zod": "4.1.8" }, "peerDependencies": { "@opentui/core": ">=0.1.95", "@opentui/solid": ">=0.1.95" }, "optionalPeers": ["@opentui/core", "@opentui/solid"] }, "sha512-zHgtWfdDz8Wu8srE8f8HUtPT9i6c3jTmgQKoFZUZ+RR5CMQF1kAlb1cxeEe9Xm2DRNFVJog9Cv/G1iUHYgXSUQ=="], + "@opencode-ai/plugin": ["@opencode-ai/plugin@1.4.2", "", { "dependencies": { "@opencode-ai/sdk": "1.4.2", "zod": "4.1.8" }, "peerDependencies": { "@opentui/core": ">=0.1.97", "@opentui/solid": ">=0.1.97" }, "optionalPeers": ["@opentui/core", "@opentui/solid"] }, "sha512-Kqcuvap+nfP/xJwe0YMm7v1JKEQW3y9Zn+FINONuX7FCptZIL/RLJX/dcMighuNPMdAUVRtIJ3B4iKmaNARYPA=="], - "@opencode-ai/sdk": ["@opencode-ai/sdk@1.3.13", "", {}, "sha512-/M6HlNnba+xf1EId6qFb2tG0cvq0db3PCQDug1glrf8wYOU57LYNF8WvHX9zoDKPTMv0F+O4pcP/8J+WvDaxHA=="], + "@opencode-ai/sdk": ["@opencode-ai/sdk@1.4.2", "", { "dependencies": { "cross-spawn": "7.0.6" } }, "sha512-JyF6Uk1zy1gG/EFPigTi3IwabnIDzdfX7NukLzAhABXFP/nSnYCSmMB91F1Cqgr9RURe9hs4ZWRLjWp2ta66JA=="], "@opentelemetry/api": ["@opentelemetry/api@1.9.1", "", {}, "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q=="], @@ -1821,21 +1698,21 @@ "@playwright/test": ["@playwright/test@1.59.1", "", { "dependencies": { "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" } }, "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg=="], - "@prisma/client": ["@prisma/client@7.6.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.6.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-7Pe/1ayh3GgWPEg4mmT4ax77LJ1wC+XlnIFvQ94bLP2DsUnOpnruQQR3Jw7r+Frthk94QqDNxo3FjSg8h9PXeQ=="], + "@prisma/client": ["@prisma/client@7.7.0", "", { "dependencies": { "@prisma/client-runtime-utils": "7.7.0" }, "peerDependencies": { "prisma": "*", "typescript": ">=5.4.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-5Ar4OsZpJ54s21sy5oDNNW9gQtd4NuxCaiM7+JDTOU07D6VvlpLjYzAVCMB1+JzokN+08dAVomlx+b7bhJd3ww=="], - "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.6.0", "", {}, "sha512-fD7jlqubsZvVODKvsp9lOpXVecx2aWGxC2l35Ioz2t+teUJ5CfR0SAMsi7UkU1VvaZmmm+DS6BdujF622nY7tQ=="], + "@prisma/client-runtime-utils": ["@prisma/client-runtime-utils@7.7.0", "", {}, "sha512-BLyd0UpFYOtyJFTHm7jS9vesHW7P83abibodQMiIofqjBKzDHQ1VAsQkdfvXyYDkPlONPfOTz7/rv3x/+CQqvQ=="], - "@prisma/config": ["@prisma/config@7.6.0", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.20.0", "empathic": "2.0.0" } }, "sha512-MuAz1MK4PeG5/03YzfzX3CnFVHQ6qePGwUpQRzPzX5tT0ffJ3Tzi9zJZbBc+VzEGFCM8ghW/gTVDR85Syjt+Yw=="], + "@prisma/config": ["@prisma/config@7.7.0", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.20.0", "empathic": "2.0.0" } }, "sha512-hmPI3tKLO2aP0Y5vugbjcnA9qqlfJndiT6ds4tw28U5hNHLWg+mHJEWAhjsSPgxjtmxhJ/EDIeIlyh+3Us0OPg=="], - "@prisma/debug": ["@prisma/debug@7.6.0", "", {}, "sha512-LpHr3qos4lQZ6sxwjStf59YBht7m9/QF7NSQsMH6qGENWZu2w3UkQUGn1h5iRkDjnWRj3VHykOu9qFhps4ADvA=="], + "@prisma/debug": ["@prisma/debug@7.7.0", "", {}, "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA=="], "@prisma/dev": ["@prisma/dev@0.24.3", "", { "dependencies": { "@electric-sql/pglite": "0.4.1", "@electric-sql/pglite-socket": "0.1.1", "@electric-sql/pglite-tools": "0.3.1", "@hono/node-server": "1.19.11", "@prisma/get-platform": "7.2.0", "@prisma/query-plan-executor": "7.2.0", "@prisma/streams-local": "0.1.2", "foreground-child": "3.3.1", "get-port-please": "3.2.0", "hono": "^4.12.8", "http-status-codes": "2.3.0", "pathe": "2.0.3", "proper-lockfile": "4.1.2", "remeda": "2.33.4", "std-env": "3.10.0", "valibot": "1.2.0", "zeptomatch": "2.1.0" } }, "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg=="], - "@prisma/engines": ["@prisma/engines@7.6.0", "", { "dependencies": { "@prisma/debug": "7.6.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", "@prisma/fetch-engine": "7.6.0", "@prisma/get-platform": "7.6.0" } }, "sha512-Sn5edRzhHqgRV2M+A0eIbY442B4mReWWf3pKs/LKreYgW7oa/up8JtK/s4iv/EQA097cyboZ08mmkpbLp+tZ3w=="], + "@prisma/engines": ["@prisma/engines@7.7.0", "", { "dependencies": { "@prisma/debug": "7.7.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", "@prisma/fetch-engine": "7.7.0", "@prisma/get-platform": "7.7.0" } }, "sha512-7fmcbT7HHXBq/b+3h/dO1JI3fd8l8q7erf7xP7pRprh58hmSSnG8mg9K3yjW3h9WaHWUwngVFpSxxxivaitQ2w=="], "@prisma/engines-version": ["@prisma/engines-version@7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", "", {}, "sha512-r51DLcJ8bDRSrBEJF3J4cinoWyGA7rfP2mG6lD90VqIbGNOkbfcLcXalSVjq5Y6brQS3vcjrq4GbyUb1Cb7vkw=="], - "@prisma/fetch-engine": ["@prisma/fetch-engine@7.6.0", "", { "dependencies": { "@prisma/debug": "7.6.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", "@prisma/get-platform": "7.6.0" } }, "sha512-N575Ni95c3FkduWY/eKTHqNYgNbceZ1tQaSknVtJjpKmiiBXmniESn/GTxsDvICC4ZeiNrXxioGInzQrCdx16w=="], + "@prisma/fetch-engine": ["@prisma/fetch-engine@7.7.0", "", { "dependencies": { "@prisma/debug": "7.7.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", "@prisma/get-platform": "7.7.0" } }, "sha512-TfyzveBQoK4xALzsTpVhB/0KG1N8zOK0ap+RnBMkzGUu3f98fnQ4QtXa2wlKPhsO2X8a3N5ugFQgcKNoHGmDfw=="], "@prisma/get-platform": ["@prisma/get-platform@7.2.0", "", { "dependencies": { "@prisma/debug": "7.2.0" } }, "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA=="], @@ -2085,63 +1962,63 @@ "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@2.3.0", "", {}, "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="], - "@smithy/config-resolver": ["@smithy/config-resolver@4.4.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg=="], + "@smithy/config-resolver": ["@smithy/config-resolver@4.4.14", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.4", "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-N55f8mPEccpzKetUagdvmAy8oohf0J5cuj9jLI1TaSceRlq0pJsIZepY3kmAXAhyxqXPV6hDerDQhqQPKWgAoQ=="], - "@smithy/core": ["@smithy/core@3.23.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-stream": "^4.5.21", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q=="], + "@smithy/core": ["@smithy/core@3.23.14", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.13", "@smithy/util-stream": "^4.5.22", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg=="], - "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.12", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg=="], + "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.13", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ=="], - "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.12", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA=="], + "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.13", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.0", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-vYahwBAtRaAcFbOmE9aLr12z7RiHYDSLcnogSdxfm7kKfsNa3wH+NU5r7vTeB5rKvLsWyPjVX8iH94brP7umiQ=="], - "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A=="], + "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.13", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-wwybfcOX0tLqCcBP378TIU9IqrDuZq/tDV48LlZNydMpCnqnYr+hWBAYbRE+rFFf/p7IkDJySM3bgiMKP2ihPg=="], - "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q=="], + "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-ied1lO559PtAsMJzg2TKRlctLnEi1PfkNeMMpdwXDImk1zV9uvS/Oxoy/vcy9uv1GKZAjDAB5xT6ziE9fzm5wA=="], - "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.12", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA=="], + "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.13", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-hFyK+ORJrxAN3RYoaD6+gsGDQjeix8HOEkosoajvXYZ4VeqonM3G4jd9IIRm/sWGXUKmudkY9KdYjzosUqdM8A=="], - "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.12", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ=="], + "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.13", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-kRrq4EKLGeOxhC2CBEhRNcu1KSzNJzYY7RK3S7CxMPgB5dRrv55WqQOtRwQxQLC04xqORFLUgnDlc6xrNUULaA=="], - "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.15", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A=="], + "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.16", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ=="], - "@smithy/hash-node": ["@smithy/hash-node@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w=="], + "@smithy/hash-node": ["@smithy/hash-node@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA=="], - "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g=="], + "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg=="], "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], - "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA=="], + "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig=="], - "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.28", "", { "dependencies": { "@smithy/core": "^3.23.13", "@smithy/middleware-serde": "^4.2.16", "@smithy/node-config-provider": "^4.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-middleware": "^4.2.12", "tslib": "^2.6.2" } }, "sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ=="], + "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.29", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/middleware-serde": "^4.2.17", "@smithy/node-config-provider": "^4.3.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "@smithy/url-parser": "^4.2.13", "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw=="], - "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.46", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/service-error-classification": "^4.2.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.13", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-SpvWNNOPOrKQGUqZbEPO+es+FRXMWvIyzUKUOYdDgdlA6BdZj/R58p4umoQ76c2oJC44PiM7mKizyyex1IJzow=="], + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.5.1", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/node-config-provider": "^4.3.13", "@smithy/protocol-http": "^5.3.13", "@smithy/service-error-classification": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "@smithy/util-middleware": "^4.2.13", "@smithy/util-retry": "^4.3.1", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA=="], - "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.16", "", { "dependencies": { "@smithy/core": "^3.23.13", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA=="], + "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.17", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ=="], - "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw=="], + "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw=="], - "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.12", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw=="], + "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.13", "", { "dependencies": { "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw=="], - "@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.1", "", { "dependencies": { "@smithy/protocol-http": "^5.3.12", "@smithy/querystring-builder": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw=="], + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.5.2", "", { "dependencies": { "@smithy/protocol-http": "^5.3.13", "@smithy/querystring-builder": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA=="], - "@smithy/property-provider": ["@smithy/property-provider@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A=="], + "@smithy/property-provider": ["@smithy/property-provider@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ=="], - "@smithy/protocol-http": ["@smithy/protocol-http@5.3.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw=="], + "@smithy/protocol-http": ["@smithy/protocol-http@5.3.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg=="], - "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg=="], + "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ=="], - "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw=="], + "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA=="], - "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1" } }, "sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ=="], + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0" } }, "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw=="], - "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.7", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw=="], + "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.8", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw=="], - "@smithy/signature-v4": ["@smithy/signature-v4@5.3.12", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.12", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw=="], + "@smithy/signature-v4": ["@smithy/signature-v4@5.3.13", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.13", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-YpYSyM0vMDwKbHD/JA7bVOF6kToVRpa+FM5ateEVRpsTNu564g1muBlkTubXhSKKYXInhpADF46FPyrZcTLpXg=="], - "@smithy/smithy-client": ["@smithy/smithy-client@4.12.8", "", { "dependencies": { "@smithy/core": "^3.23.13", "@smithy/middleware-endpoint": "^4.4.28", "@smithy/middleware-stack": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-stream": "^4.5.21", "tslib": "^2.6.2" } }, "sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA=="], + "@smithy/smithy-client": ["@smithy/smithy-client@4.12.9", "", { "dependencies": { "@smithy/core": "^3.23.14", "@smithy/middleware-endpoint": "^4.4.29", "@smithy/middleware-stack": "^4.2.13", "@smithy/protocol-http": "^5.3.13", "@smithy/types": "^4.14.0", "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ=="], - "@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], + "@smithy/types": ["@smithy/types@4.14.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ=="], - "@smithy/url-parser": ["@smithy/url-parser@4.2.12", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA=="], + "@smithy/url-parser": ["@smithy/url-parser@4.2.13", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw=="], "@smithy/util-base64": ["@smithy/util-base64@4.3.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ=="], @@ -2153,19 +2030,19 @@ "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="], - "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.44", "", { "dependencies": { "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA=="], + "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.45", "", { "dependencies": { "@smithy/property-provider": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw=="], - "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.48", "", { "dependencies": { "@smithy/config-resolver": "^4.4.13", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/smithy-client": "^4.12.8", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg=="], + "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.49", "", { "dependencies": { "@smithy/config-resolver": "^4.4.14", "@smithy/credential-provider-imds": "^4.2.13", "@smithy/node-config-provider": "^4.3.13", "@smithy/property-provider": "^4.2.13", "@smithy/smithy-client": "^4.12.9", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-jlN6vHwE8gY5AfiFBavtD3QtCX2f7lM3BKkz7nFKSNfFR5nXLXLg6sqXTJEEyDwtxbztIDBQCfjsGVXlIru2lQ=="], - "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.3", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig=="], + "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.4", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-BKoR/ubPp9KNKFxPpg1J28N1+bgu8NGAtJblBP7yHy8yQPBWhIAv9+l92SlQLpolGm71CVO+btB60gTgzT0wog=="], "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], - "@smithy/util-middleware": ["@smithy/util-middleware@4.2.12", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ=="], + "@smithy/util-middleware": ["@smithy/util-middleware@4.2.13", "", { "dependencies": { "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow=="], - "@smithy/util-retry": ["@smithy/util-retry@4.2.13", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-qQQsIvL0MGIbUjeSrg0/VlQ3jGNKyM3/2iU3FPNgy01z+Sp4OvcaxbgIoFOTvB61ZoohtutuOvOcgmhbD0katQ=="], + "@smithy/util-retry": ["@smithy/util-retry@4.3.1", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.13", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ=="], - "@smithy/util-stream": ["@smithy/util-stream@4.5.21", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", "@smithy/node-http-handler": "^4.5.1", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q=="], + "@smithy/util-stream": ["@smithy/util-stream@4.5.22", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.16", "@smithy/node-http-handler": "^4.5.2", "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew=="], "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="], @@ -2193,10 +2070,6 @@ "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="], - "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@6.2.4", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "deepmerge": "^4.3.1", "magic-string": "^0.30.21", "obug": "^2.1.0", "vitefu": "^1.1.1" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA=="], - - "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@5.0.2", "", { "dependencies": { "obug": "^2.1.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig=="], - "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], "@tailwindcss/cli": ["@tailwindcss/cli@4.2.2", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "4.2.2", "@tailwindcss/oxide": "4.2.2", "enhanced-resolve": "^5.19.0", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.2.2" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "sha512-iJS+8kAFZ8HPqnh0O5DHCLjo4L6dD97DBQEkrhfSO4V96xeefUus2jqsBs1dUMt3OU9Ks4qIkiY0mpL5UW+4LQ=="], @@ -2235,16 +2108,14 @@ "@tanstack/devtools": ["@tanstack/devtools@0.7.0", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", "@tanstack/devtools-client": "0.0.3", "@tanstack/devtools-event-bus": "0.3.3", "@tanstack/devtools-ui": "0.4.4", "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-AlAoCqJhWLg9GBEaoV1g/j+X/WA1aJSWOsekxeuZpYeS2hdVuKAjj04KQLUMJhtLfNl2s2E+TCj7ZRtWyY3U4w=="], - "@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.5", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.0" } }, "sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA=="], + "@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.3", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.3.3" } }, "sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw=="], "@tanstack/devtools-event-bus": ["@tanstack/devtools-event-bus@0.3.3", "", { "dependencies": { "ws": "^8.18.3" } }, "sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg=="], - "@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.4.3", "", { "bin": { "intent": "bin/intent.js" } }, "sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw=="], + "@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.3.5", "", {}, "sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw=="], "@tanstack/devtools-ui": ["@tanstack/devtools-ui@0.4.4", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg=="], - "@tanstack/devtools-vite": ["@tanstack/devtools-vite@0.3.12", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.4", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.3.3", "chalk": "^5.6.2", "launch-editor": "^2.11.1", "picomatch": "^4.0.3" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0" } }, "sha512-fGJgu4xUhKmGk+a+/aHD8l5HKVk6+ObA+6D3YC3xCXbai/YmaGhztqcZf1tKUqjZyYyQLHsjqmKzvJgVpQP1jw=="], - "@tanstack/history": ["@tanstack/history@1.161.6", "", {}, "sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg=="], "@tanstack/react-devtools": ["@tanstack/react-devtools@0.7.11", "", { "dependencies": { "@tanstack/devtools": "0.7.0" }, "peerDependencies": { "@types/react": ">=16.8", "@types/react-dom": ">=16.8", "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-a2Lmz8x+JoDrsU6f7uKRcyyY+k8mA/n5mb9h7XJ3Fz/y3+sPV9t7vAW1s5lyNkQyyDt6V1Oim99faLthoJSxMw=="], @@ -2277,15 +2148,15 @@ "@testing-library/react-hooks": ["@testing-library/react-hooks@8.0.1", "", { "dependencies": { "@babel/runtime": "^7.12.5", "react-error-boundary": "^3.1.0" }, "peerDependencies": { "@types/react": "^16.9.0 || ^17.0.0", "react": "^16.9.0 || ^17.0.0", "react-dom": "^16.9.0 || ^17.0.0", "react-test-renderer": "^16.9.0 || ^17.0.0" }, "optionalPeers": ["@types/react", "react-dom", "react-test-renderer"] }, "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g=="], - "@textlint/ast-node-types": ["@textlint/ast-node-types@15.5.2", "", {}, "sha512-fCaOxoup5LIyBEo7R1oYWE7V4bSX0KQeHh66twon9e9usaLE3ijgF8QjYsR6joCssdeCHVd0wHm7ppsEyTr6vg=="], + "@textlint/ast-node-types": ["@textlint/ast-node-types@15.5.4", "", {}, "sha512-bVtB6VEy9U9DpW8cTt25k5T+lz86zV5w6ImePZqY1AXzSuPhqQNT77lkMPxonXzUducEIlSvUu3o7sKw3y9+Sw=="], - "@textlint/linter-formatter": ["@textlint/linter-formatter@15.5.2", "", { "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", "@textlint/module-interop": "15.5.2", "@textlint/resolver": "15.5.2", "@textlint/types": "15.5.2", "chalk": "^4.1.2", "debug": "^4.4.3", "js-yaml": "^4.1.1", "lodash": "^4.17.23", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "table": "^6.9.0", "text-table": "^0.2.0" } }, "sha512-jAw7jWM8+wU9cG6Uu31jGyD1B+PAVePCvnPKC/oov+2iBPKk3ao30zc/Itmi7FvXo4oPaL9PmzPPQhyniPVgVg=="], + "@textlint/linter-formatter": ["@textlint/linter-formatter@15.5.4", "", { "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", "@textlint/module-interop": "15.5.4", "@textlint/resolver": "15.5.4", "@textlint/types": "15.5.4", "chalk": "^4.1.2", "debug": "^4.4.3", "js-yaml": "^4.1.1", "lodash": "^4.18.1", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "table": "^6.9.0", "text-table": "^0.2.0" } }, "sha512-D9qJedKBLmAo+kiudop4UKgSxXMi4O8U86KrCidVXZ9RsK0NSVIw6+r2rlMUOExq79iEY81FRENyzmNVRxDBsg=="], - "@textlint/module-interop": ["@textlint/module-interop@15.5.2", "", {}, "sha512-mg6rMQ3+YjwiXCYoQXbyVfDucpTa1q5mhspd/9qHBxUq4uY6W8GU42rmT3GW0V1yOfQ9z/iRrgPtkp71s8JzXg=="], + "@textlint/module-interop": ["@textlint/module-interop@15.5.4", "", {}, "sha512-JyAUd26ll3IFF87LP0uGoa8Tzw5ZKiYvGs6v8jLlzyND1lUYCI4+2oIAslrODLkf0qwoCaJrBQWM3wsw+asVGQ=="], - "@textlint/resolver": ["@textlint/resolver@15.5.2", "", {}, "sha512-YEITdjRiJaQrGLUWxWXl4TEg+d2C7+TNNjbGPHPH7V7CCnXm+S9GTjGAL7Q2WSGJyFEKt88Jvx6XdJffRv4HEA=="], + "@textlint/resolver": ["@textlint/resolver@15.5.4", "", {}, "sha512-5GUagtpQuYcmhlOzBGdmVBvDu5lKgVTjwbxtdfoidN4OIqblIxThJHHjazU+ic+/bCIIzI2JcOjHGSaRmE8Gcg=="], - "@textlint/types": ["@textlint/types@15.5.2", "", { "dependencies": { "@textlint/ast-node-types": "15.5.2" } }, "sha512-sJOrlVLLXp4/EZtiWKWq9y2fWyZlI8GP+24rnU5avtPWBIMm/1w97yzKrAqYF8czx2MqR391z5akhnfhj2f/AQ=="], + "@textlint/types": ["@textlint/types@15.5.4", "", { "dependencies": { "@textlint/ast-node-types": "15.5.4" } }, "sha512-mY28j2U7nrWmZbxyKnRvB8vJxJab4AxqOobLfb6iozrLelJbqxcOTvBQednadWPfAk9XWaZVMqUr9Nird3mutg=="], "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], @@ -2321,8 +2192,6 @@ "@types/bunyan": ["@types/bunyan@1.8.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ=="], - "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/d3": ["@types/d3@7.4.3", "", { "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", "@types/d3-brush": "*", "@types/d3-chord": "*", "@types/d3-color": "*", "@types/d3-contour": "*", "@types/d3-delaunay": "*", "@types/d3-dispatch": "*", "@types/d3-drag": "*", "@types/d3-dsv": "*", "@types/d3-ease": "*", "@types/d3-fetch": "*", "@types/d3-force": "*", "@types/d3-format": "*", "@types/d3-geo": "*", "@types/d3-hierarchy": "*", "@types/d3-interpolate": "*", "@types/d3-path": "*", "@types/d3-polygon": "*", "@types/d3-quadtree": "*", "@types/d3-random": "*", "@types/d3-scale": "*", "@types/d3-scale-chromatic": "*", "@types/d3-selection": "*", "@types/d3-shape": "*", "@types/d3-time": "*", "@types/d3-time-format": "*", "@types/d3-timer": "*", "@types/d3-transition": "*", "@types/d3-zoom": "*" } }, "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww=="], @@ -2389,8 +2258,6 @@ "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], - "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -2449,7 +2316,7 @@ "@types/uuid": ["@types/uuid@10.0.0", "", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="], - "@types/vscode": ["@types/vscode@1.110.0", "", {}, "sha512-AGuxUEpU4F4mfuQjxPPaQVyuOMhs+VT/xRok1jiHVBubHK7lBRvCuOMZG0LKUwxncrPorJ5qq/uil3IdZBd5lA=="], + "@types/vscode": ["@types/vscode@1.115.0", "", {}, "sha512-/M8cdznOlqtMqduHKKlIF00v4eum4ZWKgn8YoPRKcN6PDdvoWeeqDaQSnw63ipDbq1Uzz78Wndk/d0uSPwORfA=="], "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="], @@ -2461,9 +2328,9 @@ "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.58.0", "", {}, "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="], - "@typespec/ts-http-runtime": ["@typespec/ts-http-runtime@0.3.4", "", { "dependencies": { "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "tslib": "^2.6.2" } }, "sha512-CI0NhTrz4EBaa0U+HaaUZrJhPoso8sG7ZFya8uQoBA57fjzrjRSv87ekCjLZOFExN+gXE/z0xuN2QfH4H2HrLQ=="], + "@typespec/ts-http-runtime": ["@typespec/ts-http-runtime@0.3.5", "", { "dependencies": { "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "tslib": "^2.6.2" } }, "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], @@ -2473,22 +2340,6 @@ "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="], - "@vitejs/plugin-rsc": ["@vitejs/plugin-rsc@0.5.21", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.5", "es-module-lexer": "^2.0.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.21", "periscopic": "^4.0.2", "srvx": "^0.11.7", "strip-literal": "^3.1.0", "turbo-stream": "^3.1.0", "vitefu": "^1.1.1" }, "peerDependencies": { "react": "*", "react-dom": "*", "react-server-dom-webpack": "*", "vite": "*" }, "optionalPeers": ["react-server-dom-webpack"] }, "sha512-uNayLT8IKvWoznvQyfwKuGiEFV28o7lxUDnw/Av36VCuGpDFZnMmvVCwR37gTvnSmnpul9V0tdJqY3tBKEaDqw=="], - - "@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], - - "@vitest/mocker": ["@vitest/mocker@3.2.4", "", { "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ=="], - - "@vitest/pretty-format": ["@vitest/pretty-format@3.2.4", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA=="], - - "@vitest/runner": ["@vitest/runner@3.2.4", "", { "dependencies": { "@vitest/utils": "3.2.4", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ=="], - - "@vitest/snapshot": ["@vitest/snapshot@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ=="], - - "@vitest/spy": ["@vitest/spy@3.2.4", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw=="], - - "@vitest/utils": ["@vitest/utils@3.2.4", "", { "dependencies": { "@vitest/pretty-format": "3.2.4", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA=="], - "@vscode/vsce": ["@vscode/vsce@3.7.1", "", { "dependencies": { "@azure/identity": "^4.1.0", "@secretlint/node": "^10.1.2", "@secretlint/secretlint-formatter-sarif": "^10.1.2", "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.9", "cockatiel": "^3.1.2", "commander": "^12.1.0", "form-data": "^4.0.0", "glob": "^11.0.0", "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "leven": "^3.1.0", "markdown-it": "^14.1.0", "mime": "^1.3.4", "minimatch": "^3.0.3", "parse-semver": "^1.1.1", "read": "^1.0.7", "secretlint": "^10.1.2", "semver": "^7.5.2", "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", "yauzl": "^2.3.1", "yazl": "^2.2.2" }, "optionalDependencies": { "keytar": "^7.7.0" }, "bin": { "vsce": "vsce" } }, "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g=="], "@vscode/vsce-sign": ["@vscode/vsce-sign@2.0.9", "", { "optionalDependencies": { "@vscode/vsce-sign-alpine-arm64": "2.0.6", "@vscode/vsce-sign-alpine-x64": "2.0.6", "@vscode/vsce-sign-darwin-arm64": "2.0.6", "@vscode/vsce-sign-darwin-x64": "2.0.6", "@vscode/vsce-sign-linux-arm": "2.0.6", "@vscode/vsce-sign-linux-arm64": "2.0.6", "@vscode/vsce-sign-linux-x64": "2.0.6", "@vscode/vsce-sign-win32-arm64": "2.0.6", "@vscode/vsce-sign-win32-x64": "2.0.6" } }, "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g=="], @@ -2531,7 +2382,7 @@ "agentuity-vscode": ["agentuity-vscode@workspace:packages/vscode"], - "ai": ["ai@6.0.145", "", { "dependencies": { "@ai-sdk/gateway": "3.0.87", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.22", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-RbMiFsPZxE4uf5Hhs8rscp5bIwvjQOrqS5dQGWNVRHGM947QZgkKX7Ih5hto8MK/7xkbtneoOZruZ8oSLO828A=="], + "ai": ["ai@6.0.156", "", { "dependencies": { "@ai-sdk/gateway": "3.0.95", "@ai-sdk/provider": "3.0.8", "@ai-sdk/provider-utils": "4.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-uyi/5LYbugHQxZsR2PeAFOZEL4WqKkzZw4pv0nQvvdgxgVOsM7snOmGrYkp5fShxH/vnd08SXvHCVTX7oUW7xQ=="], "ajv": ["ajv@8.18.0", "", { "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-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], @@ -2561,8 +2412,6 @@ "aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], - "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], - "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="], @@ -2573,8 +2422,6 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "auth-package-app": ["auth-package-app@workspace:apps/testing/auth-package-app"], - "aws-ssl-profiles": ["aws-ssl-profiles@1.1.2", "", {}, "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="], "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], @@ -2591,7 +2438,7 @@ "bare-events": ["bare-events@2.8.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ=="], - "bare-fs": ["bare-fs@4.6.0", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-2YkS7NuiJceSEbyEOdSNLE9tsGd+f4+f7C+Nik/MCk27SYdwIMPT/yRKvg++FZhQXgk0KWJKJyXX9RhVV0RGqA=="], + "bare-fs": ["bare-fs@4.7.0", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-xzqKsCFxAek9aezYhjJuJRXBIaYlg/0OGDTZp+T8eYmYMlm66cs6cYko02drIyjN2CBbi+I6L7YfXyqpqtKRXA=="], "bare-os": ["bare-os@3.8.7", "", {}, "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w=="], @@ -2603,17 +2450,15 @@ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.14", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.17", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA=="], - "basic-ftp": ["basic-ftp@5.2.0", "", {}, "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw=="], + "basic-ftp": ["basic-ftp@5.2.2", "", {}, "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw=="], "better-auth": ["better-auth@1.5.2", "", { "dependencies": { "@better-auth/core": "1.5.2", "@better-auth/drizzle-adapter": "1.5.2", "@better-auth/kysely-adapter": "1.5.2", "@better-auth/memory-adapter": "1.5.2", "@better-auth/mongo-adapter": "1.5.2", "@better-auth/prisma-adapter": "1.5.2", "@better-auth/telemetry": "1.5.2", "@better-auth/utils": "0.3.1", "@better-fetch/fetch": "1.1.21", "@noble/ciphers": "^2.1.1", "@noble/hashes": "^2.0.1", "better-call": "1.3.2", "defu": "^6.1.4", "jose": "^6.1.3", "kysely": "^0.28.11", "nanostores": "^1.1.1", "zod": "^4.3.6" }, "peerDependencies": { "@lynx-js/react": "*", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "@sveltejs/kit": "^2.0.0", "@tanstack/react-start": "^1.0.0", "@tanstack/solid-start": "^1.0.0", "better-sqlite3": "^12.0.0", "drizzle-kit": ">=0.31.4", "drizzle-orm": ">=0.41.0", "mongodb": "^6.0.0 || ^7.0.0", "mysql2": "^3.0.0", "next": "^14.0.0 || ^15.0.0 || ^16.0.0", "pg": "^8.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "solid-js": "^1.0.0", "svelte": "^4.0.0 || ^5.0.0", "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", "vue": "^3.0.0" }, "optionalPeers": ["@lynx-js/react", "@prisma/client", "@sveltejs/kit", "@tanstack/react-start", "@tanstack/solid-start", "better-sqlite3", "drizzle-kit", "drizzle-orm", "mongodb", "mysql2", "next", "pg", "prisma", "react", "react-dom", "solid-js", "svelte", "vitest", "vue"] }, "sha512-xEnt/RBsu/cjcN+IEsgeBqka/6QRaGzPFl5hnnJfZU/JxRGnDsVUDHXvJQRfecj8qA/1nPJOQjZ6qQL1Z7aN+Q=="], "better-call": ["better-call@1.3.2", "", { "dependencies": { "@better-auth/utils": "^0.3.1", "@better-fetch/fetch": "^1.1.21", "rou3": "^0.7.12", "set-cookie-parser": "^3.0.1" }, "peerDependencies": { "zod": "^4.0.0" }, "optionalPeers": ["zod"] }, "sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw=="], - "better-result": ["better-result@2.7.0", "", { "dependencies": { "@clack/prompts": "^0.11.0" }, "bin": { "better-result": "bin/cli.mjs" } }, "sha512-7zrmXjAK8u8Z6SOe4R65XObOR5X+Y2I/VVku3t5cPOGQ8/WsBcfFmfnIPiEl5EBMDOzPHRwbiPbMtQBKYdw7RA=="], - - "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + "better-result": ["better-result@2.8.2", "", {}, "sha512-YOf0VSj5nUPI27doTtXF+BBnsiRq3qY7avHqfIWnppxTLGyvkLq1QV2RTxkwoZwJ60ywLfZ0raFF4J/G886i7A=="], "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], @@ -2655,20 +2500,16 @@ "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - "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.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001784", "", {}, "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001787", "", {}, "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], - "chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="], - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], @@ -2681,15 +2522,13 @@ "chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="], - "check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="], - "cheerio": ["cheerio@1.2.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" } }, "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg=="], "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], - "chevrotain": ["chevrotain@11.1.2", "", { "dependencies": { "@chevrotain/cst-dts-gen": "11.1.2", "@chevrotain/gast": "11.1.2", "@chevrotain/regexp-to-ast": "11.1.2", "@chevrotain/types": "11.1.2", "@chevrotain/utils": "11.1.2", "lodash-es": "4.17.23" } }, "sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg=="], + "chevrotain": ["chevrotain@12.0.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "12.0.0", "@chevrotain/gast": "12.0.0", "@chevrotain/regexp-to-ast": "12.0.0", "@chevrotain/types": "12.0.0", "@chevrotain/utils": "12.0.0" } }, "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ=="], - "chevrotain-allstar": ["chevrotain-allstar@0.3.1", "", { "dependencies": { "lodash-es": "^4.17.21" }, "peerDependencies": { "chevrotain": "^11.0.0" } }, "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw=="], + "chevrotain-allstar": ["chevrotain-allstar@0.4.1", "", { "dependencies": { "lodash-es": "^4.17.21" }, "peerDependencies": { "chevrotain": "^12.0.0" } }, "sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA=="], "chokidar": ["chokidar@3.6.0", "", { "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" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], @@ -2711,8 +2550,6 @@ "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - "cloud-deployment-tests": ["cloud-deployment-tests@workspace:apps/testing/cloud-deployment"], - "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], "cmdk": ["cmdk@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg=="], @@ -2763,19 +2600,15 @@ "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], - "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], - "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], "css.escape": ["css.escape@1.5.1", "", {}, "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "cssstyle": ["cssstyle@5.3.7", "", { "dependencies": { "@asamuzakjp/css-color": "^4.1.1", "@csstools/css-syntax-patches-for-csstree": "^1.0.21", "css-tree": "^3.1.0", "lru-cache": "^11.2.4" } }, "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "cytoscape": ["cytoscape@3.33.1", "", {}, "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ=="], + "cytoscape": ["cytoscape@3.33.2", "", {}, "sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw=="], "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], @@ -2849,10 +2682,6 @@ "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], - "data-urls": ["data-urls@6.0.1", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^15.1.0" } }, "sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ=="], - - "date-fns": ["date-fns@2.30.0", "", { "dependencies": { "@babel/runtime": "^7.21.0" } }, "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw=="], - "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], "db-test": ["db-test@workspace:apps/testing/db"], @@ -2861,18 +2690,12 @@ "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], - "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], - "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], - "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], - "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], - "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], @@ -2881,7 +2704,7 @@ "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], - "defu": ["defu@6.1.6", "", {}, "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug=="], + "defu": ["defu@6.1.7", "", {}, "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ=="], "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], @@ -2899,7 +2722,7 @@ "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], - "devalue": ["devalue@5.6.4", "", {}, "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA=="], + "devalue": ["devalue@5.7.1", "", {}, "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA=="], "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], @@ -2927,7 +2750,7 @@ "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=="], - "e2e-web-tests": ["e2e-web-tests@workspace:apps/testing/e2e-web"], + "e2e-web": ["e2e-web@workspace:apps/testing/e2e-web"], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -2937,7 +2760,7 @@ "effect": ["effect@3.20.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw=="], - "electron-to-chromium": ["electron-to-chromium@1.5.331", "", {}, "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q=="], + "electron-to-chromium": ["electron-to-chromium@1.5.334", "", {}, "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog=="], "email-test": ["email-test@workspace:apps/testing/email"], @@ -2969,8 +2792,6 @@ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], @@ -3025,8 +2846,6 @@ "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], - "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], - "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], @@ -3191,12 +3010,10 @@ "highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="], - "hono": ["hono@4.12.10", "", {}, "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w=="], + "hono": ["hono@4.12.12", "", {}, "sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q=="], "hosted-git-info": ["hosted-git-info@9.0.2", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg=="], - "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], - "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], @@ -3231,7 +3048,7 @@ "integration-suite": ["integration-suite@workspace:apps/testing/integration-suite"], - "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], + "internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], @@ -3263,8 +3080,6 @@ "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], - "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], @@ -3295,8 +3110,6 @@ "js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], - "jsdom": ["jsdom@27.4.0", "", { "dependencies": { "@acemir/cssom": "^0.9.28", "@asamuzakjp/dom-selector": "^6.7.6", "@exodus/bytes": "^1.6.0", "cssstyle": "^5.3.4", "data-urls": "^6.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.0", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^15.1.0", "ws": "^8.18.3", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], @@ -3323,7 +3136,7 @@ "jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="], - "katex": ["katex@0.16.44", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ=="], + "katex": ["katex@0.16.45", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA=="], "keytar": ["keytar@7.9.0", "", { "dependencies": { "node-addon-api": "^4.3.0", "prebuild-install": "^7.0.1" } }, "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ=="], @@ -3333,18 +3146,16 @@ "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], - "koffi": ["koffi@2.15.3", "", {}, "sha512-xpMeXDn471TJdrnPoTh/v3ekTdmxaD0DD2PsxgKTeetiXY+1+LeVdthleh2bOZGT7aMZnR+20U9mj4UkIlP8kA=="], + "koffi": ["koffi@2.15.6", "", {}, "sha512-WQBpM5uo74UQ17UpsFN+PUOrQQg4/nYdey4SGVluQun2drYYfePziLLWdSmFb4wSdWlJC1aimXQnjhPCheRKuw=="], "kysely": ["kysely@0.27.6", "", {}, "sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ=="], "langchain": ["langchain@0.3.37", "", { "dependencies": { "@langchain/openai": ">=0.1.0 <0.7.0", "@langchain/textsplitters": ">=0.0.0 <0.2.0", "js-tiktoken": "^1.0.12", "js-yaml": "^4.1.0", "jsonpointer": "^5.0.1", "langsmith": "^0.3.67", "openapi-types": "^12.1.3", "p-retry": "4", "uuid": "^10.0.0", "yaml": "^2.2.1", "zod": "^3.25.32" }, "peerDependencies": { "@langchain/anthropic": "*", "@langchain/aws": "*", "@langchain/cerebras": "*", "@langchain/cohere": "*", "@langchain/core": ">=0.3.58 <0.4.0", "@langchain/deepseek": "*", "@langchain/google-genai": "*", "@langchain/google-vertexai": "*", "@langchain/google-vertexai-web": "*", "@langchain/groq": "*", "@langchain/mistralai": "*", "@langchain/ollama": "*", "@langchain/xai": "*", "axios": "*", "cheerio": "*", "handlebars": "^4.7.8", "peggy": "^3.0.2", "typeorm": "*" }, "optionalPeers": ["@langchain/anthropic", "@langchain/aws", "@langchain/cerebras", "@langchain/cohere", "@langchain/deepseek", "@langchain/google-genai", "@langchain/google-vertexai", "@langchain/google-vertexai-web", "@langchain/groq", "@langchain/mistralai", "@langchain/ollama", "@langchain/xai", "axios", "cheerio", "handlebars", "peggy", "typeorm"] }, "sha512-1jPsZ6xsxkcQPUvqRjvfuOLwZLLyt49hzcOK7OYAJovIkkOxd5gzK4Yw6giPUQ8g4XHyvULNlWBz+subdkcokw=="], - "langium": ["langium@4.2.1", "", { "dependencies": { "chevrotain": "~11.1.1", "chevrotain-allstar": "~0.3.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.11", "vscode-uri": "~3.1.0" } }, "sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ=="], + "langium": ["langium@4.2.2", "", { "dependencies": { "@chevrotain/regexp-to-ast": "~12.0.0", "chevrotain": "~12.0.0", "chevrotain-allstar": "~0.4.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.11", "vscode-uri": "~3.1.0" } }, "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ=="], "langsmith": ["langsmith@0.3.87", "", { "dependencies": { "@types/uuid": "^10.0.0", "chalk": "^4.1.2", "console-table-printer": "^2.12.1", "p-queue": "^6.6.2", "semver": "^7.6.3", "uuid": "^10.0.0" }, "peerDependencies": { "@opentelemetry/api": "*", "@opentelemetry/exporter-trace-otlp-proto": "*", "@opentelemetry/sdk-trace-base": "*", "openai": "*" }, "optionalPeers": ["@opentelemetry/api", "@opentelemetry/exporter-trace-otlp-proto", "@opentelemetry/sdk-trace-base", "openai"] }, "sha512-XXR1+9INH8YX96FKWc5tie0QixWz6tOqAsAKfcJyPkE0xPep+NDz0IQLR32q4bn10QK3LqD2HN6T3n6z1YLW7Q=="], - "launch-editor": ["launch-editor@2.13.2", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.3" } }, "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg=="], - "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], @@ -3405,8 +3216,6 @@ "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - "loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="], - "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], "lru.min": ["lru.min@1.1.4", "", {}, "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA=="], @@ -3463,8 +3272,6 @@ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], - "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], @@ -3615,14 +3422,12 @@ "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], - "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], + "netmask": ["netmask@2.1.1", "", {}, "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA=="], - "next": ["next@15.5.14", "", { "dependencies": { "@next/env": "15.5.14", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.14", "@next/swc-darwin-x64": "15.5.14", "@next/swc-linux-arm64-gnu": "15.5.14", "@next/swc-linux-arm64-musl": "15.5.14", "@next/swc-linux-x64-gnu": "15.5.14", "@next/swc-linux-x64-musl": "15.5.14", "@next/swc-win32-arm64-msvc": "15.5.14", "@next/swc-win32-x64-msvc": "15.5.14", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-M6S+4JyRjmKic2Ssm7jHUPkE6YUJ6lv4507jprsSZLulubz0ihO2E+S4zmQK3JZ2ov81JrugukKU4Tz0ivgqqQ=="], + "next": ["next@15.5.15", "", { "dependencies": { "@next/env": "15.5.15", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.15", "@next/swc-darwin-x64": "15.5.15", "@next/swc-linux-arm64-gnu": "15.5.15", "@next/swc-linux-arm64-musl": "15.5.15", "@next/swc-linux-x64-gnu": "15.5.15", "@next/swc-linux-x64-musl": "15.5.15", "@next/swc-win32-arm64-msvc": "15.5.15", "@next/swc-win32-x64-msvc": "15.5.15", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-VSqCrJwtLVGwAVE0Sb/yikrQfkwkZW9p+lL/J4+xe+G3ZA+QnWPqgcfH1tDUEuk9y+pthzzVFp4L/U8JerMfMQ=="], "nextjs-app": ["nextjs-app@workspace:apps/testing/nextjs-app"], - "nextjs-app-agentuity": ["nextjs-app-agentuity@workspace:apps/testing/nextjs-app/agentuity"], - "node-abi": ["node-abi@3.89.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA=="], "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], @@ -3647,14 +3452,12 @@ "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], - "oauth": ["oauth@workspace:apps/testing/oauth"], + "oauth-app": ["oauth-app@workspace:apps/testing/oauth"], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], - "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], @@ -3665,7 +3468,7 @@ "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], - "openai": ["openai@6.33.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-xAYN1W3YsDXJWA5F277135YfkEk6H7D3D6vWwRhJ3OEkzRgcyK8z/P5P9Gyi/wB4N8kK9kM5ZjprfvyHagKmpw=="], + "openai": ["openai@6.34.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-yEr2jdGf4tVFYG6ohmr3pF6VJuveP0EA/sS8TBx+4Eq5NT10alu5zg2dmxMXMgqpihRDQlFGpRt2XwsGj+Fyxw=="], "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], @@ -3699,7 +3502,7 @@ "parse-url": ["parse-url@9.2.0", "", { "dependencies": { "@types/parse-path": "^7.0.0", "parse-path": "^7.0.0" } }, "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ=="], - "parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="], + "parse5": ["parse5@5.1.1", "", {}, "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="], "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@6.0.1", "", { "dependencies": { "parse5": "^6.0.1" } }, "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="], @@ -3709,7 +3512,7 @@ "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], - "path-expression-matcher": ["path-expression-matcher@1.2.1", "", {}, "sha512-d7gQQmLvAKXKXE2GeP9apIGbMYKz88zWdsn/BN2HRWVQsDFdUY36WSLTY0Jvd4HWi7Fb30gQ62oAOzdgJA6fZw=="], + "path-expression-matcher": ["path-expression-matcher@1.4.0", "", {}, "sha512-s4DQMxIdhj3jLFWd9LxHOplj4p9yQ4ffMGowFf3cpEgrrJjEhN0V5nxw4Ye1EViAGDoL4/1AeO6qHpqYPOzE4Q=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -3719,14 +3522,10 @@ "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="], - "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], - "periscopic": ["periscopic@4.0.2", "", { "dependencies": { "@types/estree": "*", "is-reference": "^3.0.2", "zimmerframe": "^1.0.0" } }, "sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA=="], - "pg": ["pg@8.20.0", "", { "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA=="], "pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="], @@ -3759,7 +3558,7 @@ "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], - "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "postcss": ["postcss@8.5.9", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw=="], "postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], @@ -3779,7 +3578,7 @@ "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], - "prisma": ["prisma@7.6.0", "", { "dependencies": { "@prisma/config": "7.6.0", "@prisma/dev": "0.24.3", "@prisma/engines": "7.6.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-OKJIPT81K3+F+AayIkY/Y3mkF2NWoFh7lZApaaqPYy7EHILKdO0VsmGkP+hDKYTySHsFSyLWXm/JgcR1B8fY1Q=="], + "prisma": ["prisma@7.7.0", "", { "dependencies": { "@prisma/config": "7.7.0", "@prisma/dev": "0.24.3", "@prisma/engines": "7.7.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" }, "peerDependencies": { "better-sqlite3": ">=9.0.0", "typescript": ">=5.4.0" }, "optionalPeers": ["better-sqlite3", "typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-HlgwRBt1uEFB9LStHL4HLYDvoi4BNu1rYA0hPG0zCAEyK9SaZBqp7E5Rjpc3Qh8Lex/ye/svoHZ0OWoFNhWxuQ=="], "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], @@ -3805,7 +3604,7 @@ "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], - "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], + "qs": ["qs@6.15.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg=="], "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], @@ -3821,9 +3620,9 @@ "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + "react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], + "react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="], "react-error-boundary": ["react-error-boundary@3.1.4", "", { "dependencies": { "@babel/runtime": "^7.12.5" }, "peerDependencies": { "react": ">=16.13.1" } }, "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA=="], @@ -3833,7 +3632,7 @@ "react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], - "react-medium-image-zoom": ["react-medium-image-zoom@5.4.2", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-LAYqv5j28jWJIlbScaCH9FXTW+TS5LScq/wtJ7woUPo68YBhbumfCkTCbjnPf8/jHyViAflmqbUXidWyTIZsWg=="], + "react-medium-image-zoom": ["react-medium-image-zoom@5.4.3", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-cDIwdn35fRUPsGnnj/cG6Pacll+z+Mfv6EWU2wDO5ngbZjg5uLRb2ZhEnh92ufbXCJDFvXHekb8G3+oKqUcv5g=="], "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], @@ -3955,8 +3754,6 @@ "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], - "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], - "schedule-test": ["schedule-test@workspace:apps/testing/schedule"], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], @@ -3987,14 +3784,12 @@ "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-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], "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=="], - "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], @@ -4003,8 +3798,6 @@ "simple-wcswidth": ["simple-wcswidth@1.1.2", "", {}, "sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw=="], - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], - "slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], "slice-ansi": ["slice-ansi@4.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="], @@ -4027,8 +3820,6 @@ "sparse-bitfield": ["sparse-bitfield@3.0.3", "", { "dependencies": { "memory-pager": "^1.0.2" } }, "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="], - "spawn-command": ["spawn-command@0.0.2", "", {}, "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ=="], - "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], @@ -4043,11 +3834,7 @@ "sqlstring": ["sqlstring@2.3.3", "", {}, "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="], - "srvx": ["srvx@0.11.15", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg=="], - - "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], - - "standalone-agent-test": ["standalone-agent-test@workspace:apps/testing/standalone-agent"], + "standalone-backend": ["standalone-backend@workspace:apps/testing/standalone-backend"], "state-local": ["state-local@1.0.7", "", {}, "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w=="], @@ -4075,9 +3862,7 @@ "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - "strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="], - - "strnum": ["strnum@2.2.2", "", {}, "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA=="], + "strnum": ["strnum@2.2.3", "", {}, "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg=="], "strtok3": ["strtok3@10.3.5", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA=="], @@ -4095,16 +3880,14 @@ "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], - "svelte": ["svelte@5.55.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-QjvU7EFemf6mRzdMGlAFttMWtAAVXrax61SZYHdkD6yoVGQ89VeyKfZD4H1JrV1WLmJBxWhFch9H6ig/87VGjw=="], + "svelte": ["svelte@5.55.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-z41M/hi0ZPTzrwVKLvB/R1/Oo08gL1uIib8HZ+FncqxxtY9MLb01emg2fqk+WLZ/lNrrtNDFh7BZLDxAHvMgLw=="], "svelte-check": ["svelte-check@4.4.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", "sade": "^1.7.4" }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg=="], - "svelte-web-tests": ["svelte-web-tests@workspace:apps/testing/svelte-web"], + "svelte-web": ["svelte-web@workspace:apps/testing/svelte-web"], "swr": ["swr@2.4.1", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA=="], - "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], - "systeminformation": ["systeminformation@5.23.8", "", { "os": "!aix", "bin": { "systeminformation": "lib/cli.js" } }, "sha512-Osd24mNKe6jr/YoXLLK3k8TMdzaxDffhpCxgkfgBHcapykIkd50HXThM3TCEuHO2pPuCsSx2ms/SunqhU5MmsQ=="], "table": ["table@6.9.0", "", { "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" } }, "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A=="], @@ -4115,9 +3898,7 @@ "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], - "tanstack-start": ["tanstack-start@workspace:apps/testing/tanstack-start"], - - "tanstack-start-agentuity": ["tanstack-start-agentuity@workspace:apps/testing/tanstack-start/agentuity"], + "tanstack-start-app": ["tanstack-start-app@workspace:apps/testing/tanstack-start"], "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], @@ -4149,21 +3930,9 @@ "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + "tinyexec": ["tinyexec@1.1.1", "", {}, "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg=="], - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - - "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], - - "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], - - "tldts": ["tldts@7.0.27", "", { "dependencies": { "tldts-core": "^7.0.27" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg=="], - - "tldts-core": ["tldts-core@7.0.27", "", {}, "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], @@ -4179,9 +3948,7 @@ "toml": ["toml@3.0.0", "", {}, "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="], - "tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="], - - "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], + "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], @@ -4201,15 +3968,13 @@ "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], - "turbo-stream": ["turbo-stream@3.2.0", "", {}, "sha512-EK+bZ9UVrVh7JLslVFOV0GEMsociOqVOvEMTAd4ixMyffN5YNIEdLZWXUx5PJqDbTxSIBWw04HS9gCY4frYQDQ=="], - "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "typed-rest-client": ["typed-rest-client@1.8.11", "", { "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", "underscore": "^1.12.1" } }, "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], @@ -4279,17 +4044,9 @@ "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], - - "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], - - "vite-rsc-app": ["vite-rsc-app@workspace:apps/testing/vite-rsc-app"], - - "vite-rsc-app-agentuity": ["vite-rsc-app-agentuity@workspace:apps/testing/vite-rsc-app/agentuity"], + "vite": ["vite@7.3.2", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg=="], - "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], - - "vitest": ["vitest@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="], + "vite-react-app": ["vite-react-app@workspace:apps/testing/vite-react-app"], "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], @@ -4303,32 +4060,24 @@ "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], - "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], - "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], - "web-vitals": ["web-vitals@5.2.0", "", {}, "sha512-i2z98bEmaCqSDiHEDu+gHl/dmR4Q+TxFmG3/13KkMO+o8UxQzCqWaDRCiLgEa41nlO4VpXSI0ASa1xWmO9sBlA=="], - "webhook-test": ["webhook-test@workspace:apps/testing/webhook"], - "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], - "webrtc-test": ["webrtc-test@workspace:apps/testing/webrtc-test"], - "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], - "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], - "whatwg-url": ["whatwg-url@15.1.0", "", { "dependencies": { "tr46": "^6.0.0", "webidl-conversions": "^8.0.0" } }, "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g=="], + "whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], - "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -4339,14 +4088,10 @@ "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], - "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], - "xml2js": ["xml2js@0.5.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA=="], "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], @@ -4381,14 +4126,58 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@agentuity/analytics/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@agentuity/auth/@types/react": ["@types/react@18.3.28", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw=="], + "@agentuity/auth/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/claude-code/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/cli/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/coder/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/coder-tui/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/core/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@agentuity/drizzle/drizzle-orm": ["drizzle-orm@0.45.2", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q=="], + "@agentuity/drizzle/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/evals/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/evals/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "@agentuity/frontend/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/hono/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/local/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/migrate/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/opencode/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/postgres/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/react/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/runtime/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/sandbox/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/schema/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "@agentuity/telemetry/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@agentuity/workbench/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], "@agentuity/workbench/bun-plugin-tailwind": ["bun-plugin-tailwind@0.0.14", "", { "dependencies": { "tailwindcss": "4.0.0-beta.9" }, "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-Ge8M8DQsRDErCzH/uI8pYjx5vZWXxQvnwM/xMQMElxQqHieGbAopfYo/q/kllkPkRbFHiwhnHwTpRMAMJZCjug=="], + "@agentuity/workbench/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@ai-sdk/anthropic/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.23", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ=="], @@ -4397,17 +4186,15 @@ "@ai-sdk/google/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.23", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ=="], - "@antfu/install-pkg/tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="], - - "@asamuzakjp/css-color/lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + "@ai-sdk/openai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], - "@asamuzakjp/dom-selector/lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + "@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.23", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ=="], "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], - "@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1021.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.26", "@aws-sdk/nested-clients": "^3.996.18", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-TKY6h9spUk3OLs5v1oAgW9mAeBE3LAGNBwJokLy96wwmd4W2v/tYlXseProyed9ValDj2u1jK/4Rg1T+1NXyJA=="], + "@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1026.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.27", "@aws-sdk/nested-clients": "^3.996.19", "@aws-sdk/types": "^3.973.7", "@smithy/property-provider": "^4.2.13", "@smithy/shared-ini-file-loader": "^4.4.8", "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "sha512-Ieq/HiRrbEtrYP387Nes0XlR7H1pJiJOZKv+QyQzMYpvTiDs0VKy2ZB3E2Zf+aFovWmeE7lRE4lXyF7dYM6GgA=="], "@azure/msal-node/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], @@ -4419,10 +4206,6 @@ "@better-auth/core/kysely": ["kysely@0.28.15", "", {}, "sha512-r2clcf7HLWvDXaVUEvQymXJY4i3bSOIV3xsL/Upy3ZfSv5HeKsk9tsqbBptLvth5qHEIhxeHTA2jNLyQABkLBA=="], - "@chevrotain/cst-dts-gen/lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], - - "@chevrotain/gast/lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], - "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], "@langchain/core/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], @@ -4537,9 +4320,9 @@ "@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.6.0", "", { "dependencies": { "@prisma/debug": "7.6.0" } }, "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A=="], + "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.7.0", "", { "dependencies": { "@prisma/debug": "7.7.0" } }, "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ=="], - "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.6.0", "", { "dependencies": { "@prisma/debug": "7.6.0" } }, "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A=="], + "@prisma/fetch-engine/@prisma/get-platform": ["@prisma/get-platform@7.7.0", "", { "dependencies": { "@prisma/debug": "7.7.0" } }, "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ=="], "@prisma/get-platform/@prisma/debug": ["@prisma/debug@7.2.0", "", {}, "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw=="], @@ -4573,16 +4356,12 @@ "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.2", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.3", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ=="], "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@tanstack/devtools/@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.3", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.3.3" } }, "sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw=="], - - "@tanstack/devtools-vite/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "@tanstack/router-generator/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@tanstack/router-plugin/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], @@ -4593,14 +4372,14 @@ "@textlint/linter-formatter/pluralize": ["pluralize@2.0.0", "", {}, "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw=="], - "@vitejs/plugin-rsc/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.5", "", {}, "sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw=="], - "@vscode/vsce/glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], "@vscode/vsce/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], "@vscode/vsce/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "agentuity-vscode/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], @@ -4623,19 +4402,15 @@ "cheerio/parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], - "chevrotain/lodash-es": ["lodash-es@4.17.23", "", {}, "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="], + "cheerio/whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], "chokidar/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "cli-highlight/parse5": ["parse5@5.1.1", "", {}, "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="], - "cli-highlight/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], - "cloud-deployment-tests/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "cmdk/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], - "create-agentuity/@agentuity/cli": ["@agentuity/cli@2.0.8", "", { "dependencies": { "@agentuity/auth": "2.0.8", "@agentuity/coder-tui": "2.0.8", "@agentuity/core": "2.0.8", "@agentuity/frontend": "2.0.8", "@agentuity/server": "2.0.8", "@datasert/cronjs-parser": "^1.4.0", "@vitejs/plugin-react": "^5.1.2", "acorn-loose": "^8.5.2", "adm-zip": "^0.5.16", "archiver": "^7.0.1", "astring": "^1.9.0", "cli-table3": "^0.6.5", "commander": "^14.0.2", "enquirer": "^2.4.1", "git-url-parse": "^16.1.0", "json-colorizer": "^3.0.1", "tar": "^7.5.2", "tar-fs": "^3.1.1", "typescript": "^5.9.0", "vite": "^7.2.7", "zod": "^4.3.5" }, "bin": { "agentuity": "bin/cli.ts" } }, "sha512-237cATUt+2QuSvU/yb+0Jr797XmCWc8IyaGW4No0wXvi8X24ClD3SEv21n/l1iLnPb74s7Oe+aakNv28lpnypw=="], - - "cssstyle/lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + "create-agentuity/@agentuity/cli": ["@agentuity/cli@2.0.11", "", { "dependencies": { "@agentuity/auth": "2.0.11", "@agentuity/coder-tui": "2.0.11", "@agentuity/core": "2.0.11", "@agentuity/frontend": "2.0.11", "@agentuity/server": "2.0.11", "@datasert/cronjs-parser": "^1.4.0", "@vitejs/plugin-react": "^5.1.2", "acorn-loose": "^8.5.2", "adm-zip": "^0.5.16", "archiver": "^7.0.1", "astring": "^1.9.0", "cli-table3": "^0.6.5", "commander": "^14.0.2", "enquirer": "^2.4.1", "git-url-parse": "^16.1.0", "json-colorizer": "^3.0.1", "tar": "^7.5.2", "tar-fs": "^3.1.1", "typescript": "^5.9.0", "vite": "^7.2.7", "zod": "^4.3.5" }, "bin": { "agentuity": "bin/cli.ts" } }, "sha512-CUowpTEO8CTtWDKk1fAPajtp8/lGZIwyo9NgsbwwIomPCjHFKdSb0/0N7j2AInbOBFQQWmrwtr91781y0gCFqg=="], "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], @@ -4645,23 +4420,21 @@ "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], - "data-urls/whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], - "degenerator/ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], "docs/@ai-sdk/groq": ["@ai-sdk/groq@2.0.37", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-I3nceoFuNwJx8gEWx/mPl1rjbe2pes5UDor+7OtNYOBUcPzmkb1E3yyTMDKYW4JAlmBWLk0xwT9WwX9R/mpqzA=="], - "docs/@ai-sdk/openai": ["@ai-sdk/openai@2.0.102", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-tYarHJhyMioGegsnhpqz1/tKoCAJJ6zBHoIQaredNkt8V3o/JXj2647NnEOJVe7WHQXGvCfzbfnP1TADFhPmcA=="], - "docs/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], - "docs/ai": ["ai@5.0.166", "", { "dependencies": { "@ai-sdk/gateway": "2.0.70", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-Iuczd2aS3ubVeby7oTemf/xx0+0MY5DLBEkNVcJc0rc6JD7NFnt7uvhFyXhDKAx7ObeEl6y+8B4Gr8LiyvwVLQ=="], + "docs/ai": ["ai@5.0.172", "", { "dependencies": { "@ai-sdk/gateway": "2.0.76", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-MjHohHMW9HkdsmVUA/gfV3FYeezu+cAXADg2b8HdRwuHjEg3GsL0WqjIfgb0Z9ntEqyzcgy9oJKe4yloEIpQAw=="], + + "docs/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "docs/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "e2e-web-tests/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "e2e-web/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "encoding-sniffer/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], @@ -4679,15 +4452,13 @@ "google-auth-library/google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="], - "happy-dom/whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], - "hast-util-from-html/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], "hast-util-raw/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], - "hosted-git-info/lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + "hosted-git-info/lru-cache": ["lru-cache@11.3.3", "", {}, "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ=="], - "integration-suite/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "integration-suite/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], @@ -4709,11 +4480,9 @@ "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - "mongodb-connection-string-url/whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], - "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], - "nextjs-app-agentuity/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "nextjs-app/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], @@ -4721,9 +4490,7 @@ "nypm/citty": ["citty@0.2.2", "", {}, "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w=="], - "nypm/tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="], - - "oauth/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "oauth-app/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "p-retry/retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], @@ -4731,13 +4498,11 @@ "parse-semver/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - "parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="], "parse5-parser-stream/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], - "path-scurry/lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + "path-scurry/lru-cache": ["lru-cache@11.3.3", "", {}, "sha512-JvNw9Y81y33E+BEYPr0U7omo+U9AySnsMsEiXgwT6yqd31VQWTLNQqmT4ou5eqPFUrTfIDFta2wKhB1hyohtAQ=="], "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], @@ -4767,23 +4532,21 @@ "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "standalone-backend/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "streamdown/lucide-react": ["lucide-react@0.542.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw=="], "streamdown/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], - "strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "svelte/aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="], "svelte-check/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "tanstack-start/concurrently": ["concurrently@8.2.2", "", { "dependencies": { "chalk": "^4.1.2", "date-fns": "^2.30.0", "lodash": "^4.17.21", "rxjs": "^7.8.1", "shell-quote": "^1.8.1", "spawn-command": "0.0.2", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", "yargs": "^17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg=="], + "tanstack-start-app/lucide-react": ["lucide-react@0.545.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw=="], - "tanstack-start/lucide-react": ["lucide-react@0.545.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw=="], - - "tanstack-start-agentuity/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "tanstack-start-app/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "to-vfile/vfile": ["vfile@4.2.1", "", { "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" } }, "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA=="], @@ -4795,11 +4558,9 @@ "vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "vite-node/es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - - "vite-rsc-app-agentuity/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "vite-react-app/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], - "webrtc-test/@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "vite-react-app/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "whatwg-encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], @@ -4873,8 +4634,6 @@ "@secretlint/formatter/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "@tanstack/devtools/@tanstack/devtools-client/@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.3.5", "", {}, "sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw=="], - "@vscode/vsce/glob/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "@vscode/vsce/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], @@ -4895,39 +4654,31 @@ "cli-highlight/yargs/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], - "cloud-deployment-tests/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + "create-agentuity/@agentuity/cli/@agentuity/auth": ["@agentuity/auth@2.0.11", "", { "dependencies": { "@agentuity/core": "2.0.11", "@agentuity/drizzle": "2.0.11", "@better-auth/api-key": "1.5.2", "better-auth": "1.5.2" }, "peerDependencies": { "@agentuity/react": "2.0.11", "@opentelemetry/api": "^1.9.0", "drizzle-orm": ">=0.44.0", "hono": "^4.0.0", "react": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@agentuity/react", "drizzle-orm", "hono", "react"] }, "sha512-/e7qSm8g2drK9+t6gkqQGDuaVDdzkhAyobdrVh30gws/5idWSo06HkIQBi4TqPJfRkOvDwPtkXdJNNNC4FF1eA=="], - "cloud-deployment-tests/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + "create-agentuity/@agentuity/cli/@agentuity/coder-tui": ["@agentuity/coder-tui@2.0.11", "", { "dependencies": { "@mariozechner/pi-coding-agent": "^0.65.0", "@mariozechner/pi-tui": "^0.65.0", "@sinclair/typebox": "^0.34.48" } }, "sha512-LNALNwjZdoWNtO898Z0nIKMy+CtkjZvZHXb17EV3K6Gc8kO3IOKMKyWW14asrRj1CPXRtOZWyZ+wAgirD5Lpgw=="], - "create-agentuity/@agentuity/cli/@agentuity/auth": ["@agentuity/auth@2.0.8", "", { "dependencies": { "@agentuity/core": "2.0.8", "@agentuity/drizzle": "2.0.8", "@better-auth/api-key": "1.5.2", "better-auth": "1.5.2" }, "peerDependencies": { "@agentuity/react": "2.0.8", "@opentelemetry/api": "^1.9.0", "drizzle-orm": ">=0.44.0", "hono": "^4.0.0", "react": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@agentuity/react", "drizzle-orm", "hono", "react"] }, "sha512-tbf0qw1MnWWE1sUTj5+9MjlOAb+jYkmOp4mWOSlK5voAaU0aULDp+mTYGtaW469Qme1eO52PJNWVV/nfvy+lcA=="], + "create-agentuity/@agentuity/cli/@agentuity/core": ["@agentuity/core@2.0.11", "", { "dependencies": { "zod": "^4.3.5" } }, "sha512-9Z90DANoC5QO/E0M9WeVN8/4zHTqcyvtV/guCn/SJgx0gOunLwwuvF5adkyBJgboA2ji7eNgUN3vVDf6tyxqrQ=="], - "create-agentuity/@agentuity/cli/@agentuity/coder-tui": ["@agentuity/coder-tui@2.0.8", "", { "dependencies": { "@mariozechner/pi-coding-agent": "^0.64.0", "@mariozechner/pi-tui": "^0.64.0", "@sinclair/typebox": "^0.34.48" } }, "sha512-BTYjH/0olX+1cM87D7d3z2XFpvwaK6P7NdWSyCGuD8MOtqZfoeRXubKE0y+Ee5I7R3ZERRClJDpPXevPzhJ8oA=="], + "create-agentuity/@agentuity/cli/@agentuity/frontend": ["@agentuity/frontend@2.0.11", "", { "dependencies": { "@agentuity/core": "2.0.11" } }, "sha512-P8A546lzEtbHtubS/sfYt9IWG59fTOP1oaYua+QOk8xLhzqpmygV7dJwH2z5gfi5Zn+379NPvWYYM+U6iG0AeA=="], - "create-agentuity/@agentuity/cli/@agentuity/core": ["@agentuity/core@2.0.8", "", { "dependencies": { "zod": "^4.3.5" } }, "sha512-p5NhpwfVRj1SZcJc2yUeR5nKbaU/6RliJnd7Zm0qj11r7SK5ipTMzickMshe7479qitIxKCHAj2c89NC2WqLcQ=="], + "create-agentuity/@agentuity/cli/@agentuity/server": ["@agentuity/server@2.0.11", "", { "dependencies": { "@agentuity/core": "2.0.11", "@agentuity/schema": "2.0.11", "zod": "^4.3.5" } }, "sha512-u9lERIcgtqas5ldUSuUZQxQ4qXialSqvi9AEiEulytYsGP+SJuTOXuREeHL/ajou2g7vQqVnxMyXa8jGk4cjFw=="], - "create-agentuity/@agentuity/cli/@agentuity/frontend": ["@agentuity/frontend@2.0.8", "", { "dependencies": { "@agentuity/core": "2.0.8" } }, "sha512-1iJSaeDQo7hQlJjuRYN0K5QyUIXUJUZEQlIitjFKWk+jGNIfi8jfRHpIZQbB0CPwkAlD+4Yd1um1dU0NBmGEjw=="], - - "create-agentuity/@agentuity/cli/@agentuity/server": ["@agentuity/server@2.0.8", "", { "dependencies": { "@agentuity/core": "2.0.8", "@agentuity/schema": "2.0.8", "zod": "^4.3.5" } }, "sha512-QXvH8eV3nxR3VphNbKOp+WOjq3qJnuj2LhsG4nYHLukfE6vuCwnPYvPAF275u8vZLBDBj0jdxtm+vtDeU9dbnQ=="], + "create-agentuity/@agentuity/cli/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], - "d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], - "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], "docs/@ai-sdk/groq/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], "docs/@ai-sdk/groq/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.23", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ=="], - "docs/@ai-sdk/openai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], - - "docs/@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.23", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ=="], - "docs/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], "docs/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "docs/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@2.0.70", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-BSEG1PqEgSCirFZFRglElXlix3ltMHotn/7jIY/P2ztQV75N4xuVcikl9EjWO1cDMWNvB74JtS5EW94J9K45ZQ=="], + "docs/ai/@ai-sdk/gateway": ["@ai-sdk/gateway@2.0.76", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.23", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-NoL38IElvxdxxjnLDPZKapb2oFyZCMhZ3qXHyERpXC5DrRO9CwkY/48/0iXihVeG3srZ04xmxMjjgdmtE8yeQQ=="], "docs/ai/@ai-sdk/provider": ["@ai-sdk/provider@2.0.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng=="], @@ -4935,10 +4686,6 @@ "docs/ai/@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "e2e-web-tests/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "e2e-web-tests/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], "google-auth-library/gaxios/node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], @@ -4947,36 +4694,20 @@ "hast-util-raw/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - "integration-suite/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "integration-suite/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - "mongodb-connection-string-url/whatwg-url/tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], - - "mongodb-connection-string-url/whatwg-url/webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - "next/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "nextjs-app-agentuity/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "nextjs-app-agentuity/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "oauth/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "oauth/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "parse5-parser-stream/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "prebuild-install/tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], @@ -4993,10 +4724,6 @@ "svelte-check/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - "tanstack-start-agentuity/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "tanstack-start-agentuity/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "to-vfile/vfile/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "to-vfile/vfile/unist-util-stringify-position": ["unist-util-stringify-position@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.2" } }, "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="], @@ -5055,9 +4782,9 @@ "tsx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], - "vite-rsc-app-agentuity/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + "vite-react-app/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - "vite-rsc-app-agentuity/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + "vite-react-app/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], @@ -5111,10 +4838,6 @@ "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], - "webrtc-test/@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], - - "webrtc-test/@vitejs/plugin-react/react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], - "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], @@ -5129,13 +4852,9 @@ "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "create-agentuity/@agentuity/cli/@agentuity/auth/@agentuity/drizzle": ["@agentuity/drizzle@2.0.8", "", { "dependencies": { "@agentuity/core": "2.0.8", "@agentuity/postgres": "2.0.8", "better-auth": "1.5.2", "drizzle-orm": "^0.45.0" } }, "sha512-JrflYJv46ylj9yXPUk2V1XpgMV2UQ5gHgypQjAZWcrYV3b+3Bwcmlp/XSBcqeTKMKZ/nrLKjby2bV0xwwQm7ew=="], + "create-agentuity/@agentuity/cli/@agentuity/auth/@agentuity/drizzle": ["@agentuity/drizzle@2.0.11", "", { "dependencies": { "@agentuity/core": "2.0.11", "@agentuity/postgres": "2.0.11", "better-auth": "1.5.2", "drizzle-orm": "^0.45.0" } }, "sha512-olYxX78Uv3rqBykNs3DFmn1oRxMSzWPXhT8MTPWY5rwXIk34d6UFhGsHjOGYnI5Q9R7qZnXWi88VfX+YGcmNDQ=="], - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent": ["@mariozechner/pi-coding-agent@0.64.0", "", { "dependencies": { "@mariozechner/jiti": "^2.6.2", "@mariozechner/pi-agent-core": "^0.64.0", "@mariozechner/pi-ai": "^0.64.0", "@mariozechner/pi-tui": "^0.64.0", "@silvia-odwyer/photon-node": "^0.3.4", "ajv": "^8.17.1", "chalk": "^5.5.0", "cli-highlight": "^2.1.11", "diff": "^8.0.2", "extract-zip": "^2.0.1", "file-type": "^21.1.1", "glob": "^13.0.1", "hosted-git-info": "^9.0.2", "ignore": "^7.0.5", "marked": "^15.0.12", "minimatch": "^10.2.3", "proper-lockfile": "^4.1.2", "strip-ansi": "^7.1.0", "undici": "^7.19.1", "yaml": "^2.8.2" }, "optionalDependencies": { "@mariozechner/clipboard": "^0.3.2" }, "bin": { "pi": "dist/cli.js" } }, "sha512-Q4tcqSqFGQtOgCtRyIp1D80Nv2if13Q2pfbnrOlaT/mix90mLcZGML9jKVnT1jGSy5GMYudU1HsS7cx53kxb0g=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-tui": ["@mariozechner/pi-tui@0.64.0", "", { "dependencies": { "@types/mime-types": "^2.1.4", "chalk": "^5.5.0", "get-east-asian-width": "^1.3.0", "marked": "^15.0.12", "mime-types": "^3.0.1" }, "optionalDependencies": { "koffi": "^2.9.0" } }, "sha512-W1qLry9MAuN/V3YJmMv/BJa0VaYv721NkXPg/DGItdqWxuDc+1VdNbyAnRwxblNkIpXVUWL26x64BlyFXpxmkg=="], - - "create-agentuity/@agentuity/cli/@agentuity/server/@agentuity/schema": ["@agentuity/schema@2.0.8", "", { "dependencies": { "@agentuity/core": "2.0.8" } }, "sha512-WJCii63kvXrRg/EnnPfFgm91RUekWDV1v0UF36dAf19VgUJIol0yyQX5WjwNSp9LHNgs4HVwnWHWJJRYctG5Uw=="], + "create-agentuity/@agentuity/cli/@agentuity/server/@agentuity/schema": ["@agentuity/schema@2.0.11", "", { "dependencies": { "@agentuity/core": "2.0.11" } }, "sha512-JNN/ckn2fNmeAEO0yBUxtXKCBLz5yJuuq2CJHPLlMPo7ibKa4tYSbXAMHbn6tzk3KzOuFKVvjZFJZLtHdGhfCg=="], "google-auth-library/gaxios/node-fetch/data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], @@ -5151,28 +4870,14 @@ "archiver-utils/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "create-agentuity/@agentuity/cli/@agentuity/auth/@agentuity/drizzle/@agentuity/postgres": ["@agentuity/postgres@2.0.8", "", { "dependencies": { "@agentuity/core": "2.0.8", "pg": "^8.13.1" }, "peerDependencies": { "@agentuity/runtime": "2.0.8" }, "optionalPeers": ["@agentuity/runtime"] }, "sha512-N1SKkhi17YDDoMRnXfZlP8AtMnb+Y6LN1p/PQO1OliggVQpv9zkOI6HkB2Eva7abZSjGXGF9IM8NA3zNpJo1jA=="], + "create-agentuity/@agentuity/cli/@agentuity/auth/@agentuity/drizzle/@agentuity/postgres": ["@agentuity/postgres@2.0.11", "", { "dependencies": { "@agentuity/core": "2.0.11", "pg": "^8.13.1" }, "peerDependencies": { "@agentuity/runtime": "2.0.11" }, "optionalPeers": ["@agentuity/runtime"] }, "sha512-zOZUfybEQY7wzHYYlEVMQGOSfN/MzSqWLXOlrmhhoRUInyEe8s8r21r3fgSlhR2KmKokf2BZdYmjCwJD5yQ3/Q=="], "create-agentuity/@agentuity/cli/@agentuity/auth/@agentuity/drizzle/drizzle-orm": ["drizzle-orm@0.45.2", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q=="], - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent/@mariozechner/pi-agent-core": ["@mariozechner/pi-agent-core@0.64.0", "", { "dependencies": { "@mariozechner/pi-ai": "^0.64.0" } }, "sha512-IN/sIxWOD0v1OFVXHB605SGiZhO5XdEWG5dO8EAV08n3jz/p12o4OuYGvhGXmHhU28WXa/FGWC+FO5xiIih8Uw=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent/@mariozechner/pi-ai": ["@mariozechner/pi-ai@0.64.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.73.0", "@aws-sdk/client-bedrock-runtime": "^3.983.0", "@google/genai": "^1.40.0", "@mistralai/mistralai": "1.14.1", "@sinclair/typebox": "^0.34.41", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "chalk": "^5.6.2", "openai": "6.26.0", "partial-json": "^0.1.7", "proxy-agent": "^6.5.0", "undici": "^7.19.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-Z/Jnf+JSVDPLRcxJsa8XhYTJKIqKekNueaCpBLGQHgizL1F9RQ1Rur3rIfZpfXkt2cLu/AIPtOs223ueuoWaWg=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-tui/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "archiver-utils/glob/jackspeak/@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "archiver-utils/glob/jackspeak/@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent/@mariozechner/pi-ai/openai": ["openai@6.26.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA=="], - - "create-agentuity/@agentuity/cli/@agentuity/coder-tui/@mariozechner/pi-coding-agent/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], } } diff --git a/package.json b/package.json index 644a293fe..79b10fec9 100644 --- a/package.json +++ b/package.json @@ -9,27 +9,26 @@ ], "scripts": { "prepare": "husky", - "build": "bunx tsc --build && bun run --filter='./packages/core' build && bun run --filter='./packages/schema' build && bun run --filter='./packages/frontend' build && bun run --filter='./packages/server' build && bun run --filter='./packages/react' build && bun run --filter='./packages/postgres' build && bun run --filter='./packages/drizzle' build && bun run --filter='./packages/auth' build && bun run --filter='./packages/evals' build && bun run --filter='./packages/workbench' build && bun run --filter='./packages/runtime' build && bun packages/frontend/scripts/build-beacon.ts && bun run --filter='./packages/cli' build && bun run --filter='./packages/opencode' build && bun run --filter='./apps/testing/integration-suite' build && bun run --filter='./apps/testing/cloud-deployment' build && bun run --filter='./apps/testing/e2e-web' build && bun run --filter='./apps/testing/svelte-web' build", - "build:packages": "bunx tsc --build && bun run --filter='./packages/core' build && bun run --filter='./packages/schema' build && bun run --filter='./packages/frontend' build && bun run --filter='./packages/server' build && bun run --filter='./packages/react' build && bun run --filter='./packages/postgres' build && bun run --filter='./packages/drizzle' build && bun run --filter='./packages/auth' build && bun run --filter='./packages/evals' build && bun run --filter='./packages/workbench' build && bun run --filter='./packages/runtime' build && bun packages/frontend/scripts/build-beacon.ts && bun run --filter='./packages/cli' build && bun run --filter='./packages/opencode' build", - "dev:workbench": "concurrently \"cd packages/workbench && bun run dev:app\" \"cd apps/testing/integration-suite && bun run dev\" --names \"workbench,integration-suite\" --prefix-colors \"blue,green\"", + "build": "bunx tsc --build", + "build:apps": "bun run --filter='./apps/testing/*' build", + "build:all": "bun run build && bun run build:apps", + "dev:workbench": "cd packages/workbench && bun run dev:app", "test": "bun test:packages && cd packages/cli && bun run test && cd ../.. && bun test:templates && bun test:pkginstall && bun test:create", - "test:packages": "cd packages/core && bun test && cd ../schema && bun test && cd ../frontend && bun test && cd ../server && bun test && cd ../react && bun test && cd ../postgres && bun test && cd ../drizzle && bun test && cd ../auth && bun test && cd ../runtime && bun test --max-concurrency=1 && cd ../opencode && bun test", + "test:packages": "cd packages/core && bun test && cd ../schema && bun test && cd ../frontend && bun test && cd ../server && bun test && cd ../react && bun test && cd ../postgres && bun test && cd ../drizzle && bun test && cd ../auth && bun test && cd ../opencode && bun test", "test:unit": "bun run test:packages && cd packages/cli && bun run test", "test:ci:prepare": "bash scripts/prepare-sdk-for-testing.sh", "test:ci": "bash scripts/prepare-sdk-for-testing.sh && bash scripts/run-integration-tests.sh && bash scripts/run-e2e-tests.sh", "test:ci:all": "bash scripts/test-ci-all.sh", "test:ci:integration": "bash scripts/test-integration-suite.sh", - "test:ci:cloud": "bash scripts/test-cloud-deployment.sh", "test:ci:e2e": "bash scripts/test-e2e.sh", "test:e2e": "bunx playwright test", "test:e2e:ui": "bunx playwright test --ui", "test:e2e:headed": "bunx playwright test --headed", "test:frameworks": "bash scripts/test-framework-demos.sh", "test:templates": "bun ./scripts/test-templates.ts", - "test:cloud": "cd apps/testing/cloud-deployment && bun run test", "test:create": "bun ./packages/cli/scripts/test-create-flow.ts", "test:pkginstall": "./scripts/test-package-install.sh", - "test:standalone": "cd apps/testing/standalone-agent && bun run test", + "test:standalone": "cd apps/testing/standalone-backend && bun run test", "test:queues": "bash scripts/test-queues.sh", "test:services": "bun run test:services:keyvalue && bun run test:services:vector && bun run test:services:queue && bun run test:services:email && bun run test:services:db && bun run test:services:schedule && bun run test:services:task && bun run test:services:webhook && bun run test:services:sandbox", "test:services:keyvalue": "cd apps/testing/keyvalue && bun run start", @@ -41,7 +40,7 @@ "test:services:task": "cd apps/testing/task && bun run start", "test:services:webhook": "cd apps/testing/webhook && bun run start", "test:services:sandbox": "cd apps/testing/sandbox && bun run start", - "typecheck:apps": "bun run --filter='./apps/testing/integration-suite' typecheck && bun run --filter='./apps/testing/svelte-web' typecheck", + "typecheck:apps": "bun run --filter='./apps/testing/standalone-backend' typecheck && bun run --filter='./apps/testing/e2e-web' typecheck && bun run --filter='./apps/testing/integration-suite' typecheck && bun run --filter='./apps/testing/oauth' typecheck", "typecheck:packages": "bun run --filter='./packages/*' typecheck", "typecheck": "bun run typecheck:apps && bun run typecheck:packages", "clean": "rm -rf packages/*/dist apps/**/dist packages/*/*.tsbuildinfo", @@ -81,7 +80,7 @@ "react": "^19.2.3", "react-dom": "^19.2.3", "rehype-pretty-code": "^0.14.1", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "dependencies": { "@radix-ui/react-tabs": "^1.1.13", diff --git a/packages/adapter/package.json b/packages/adapter/package.json new file mode 100644 index 000000000..0d7ff856e --- /dev/null +++ b/packages/adapter/package.json @@ -0,0 +1,35 @@ +{ + "name": "@agentuity/adapter", + "version": "2.0.0-beta.1", + "license": "Apache-2.0", + "author": "Agentuity employees and contributors", + "description": "HTTP client adapter for Agentuity service clients", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "files": [ + "dist", + "README.md" + ], + "scripts": { + "build": "tsgo --build", + "typecheck": "tsgo --noEmit", + "clean": "rm -rf dist *.tsbuildinfo" + }, + "dependencies": { + "@agentuity/core": "workspace:*" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^6.0.2" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/server/src/server.ts b/packages/adapter/src/index.ts similarity index 81% rename from packages/server/src/server.ts rename to packages/adapter/src/index.ts index d21cc1ffb..1963e6977 100644 --- a/packages/server/src/server.ts +++ b/packages/adapter/src/index.ts @@ -1,3 +1,16 @@ +// Re-export Logger type from core for convenience +export type { Logger } from '@agentuity/core'; + +/** + * HTTP client adapter for Agentuity service clients. + * + * This package provides a minimal HTTP adapter that service clients (keyvalue, queue, etc.) + * use to communicate with Agentuity cloud services. It handles authentication headers, + * request/response processing, and debug logging. + * + * @module @agentuity/adapter + */ + import type { FetchRequest, FetchErrorResponse, @@ -9,10 +22,21 @@ import type { import { ServiceException, toServiceException, fromResponse } from '@agentuity/core'; import { appendFileSync } from 'node:fs'; -interface ServiceAdapterConfig { +// ============================================================================= +// Configuration Types +// ============================================================================= + +/** + * Configuration for the service fetch adapter. + */ +export interface ServiceAdapterConfig { + /** Headers to include in all requests */ headers: Record; + /** Query parameters to append to all requests */ queryParams?: Record; + /** Hook called before each request */ onBefore?: (url: string, options: FetchRequest, invoke: () => Promise) => Promise; + /** Hook called after each request */ onAfter?: ( url: string, options: FetchRequest, @@ -21,6 +45,10 @@ interface ServiceAdapterConfig { ) => Promise; } +// ============================================================================= +// Header Builder +// ============================================================================= + /** * Options for building client request headers. */ @@ -42,7 +70,7 @@ export interface BuildClientHeadersOptions { * * @example * ```typescript - * import { buildClientHeaders, createServerFetchAdapter } from '@agentuity/server'; + * import { buildClientHeaders, createServerFetchAdapter } from '@agentuity/adapter'; * * const headers = buildClientHeaders({ apiKey: 'sk_xxx', orgId: 'org_xxx' }); * const adapter = createServerFetchAdapter({ headers }, logger); @@ -63,6 +91,10 @@ export function buildClientHeaders(options: BuildClientHeadersOptions): Record): string { + const entries: string[] = []; + if (headers instanceof Headers) { + headers.forEach((value, key) => { + const _k = key.toLowerCase(); + if (sensitiveHeaders.has(_k)) { + entries.push(` ${key}: ${redactSensitiveHeader(key, value)}`); + } else { + entries.push(` ${key}: ${value}`); + } + }); + } else { + for (const [key, value] of Object.entries(headers)) { + const _k = key.toLowerCase(); + if (sensitiveHeaders.has(_k)) { + entries.push(` ${key}: ${redactSensitiveHeader(key, value)}`); + } else { + entries.push(` ${key}: ${value}`); + } + } + } + return entries.join('\n'); +} + +const redactHeaders = (kv: Record): string => { + const values: string[] = []; + for (const k of Object.keys(kv)) { + const _k = k.toLowerCase(); + const v = kv[k]; + if (v === undefined) { + continue; + } + if (sensitiveHeaders.has(_k)) { + values.push(`${_k}=${redactSensitiveHeader(k, v)}`); + } else { + values.push(`${_k}=${v}`); + } + } + return '[' + values.join(',') + ']'; +}; + +// ============================================================================= +// Debug Logging +// ============================================================================= + /** * Check if API debug logging is enabled and return the output destination. * Returns: @@ -126,46 +248,6 @@ function formatRequestBody(body: unknown): string { return String(body); } -/** - * Format a sensitive header value, preserving Bearer prefix if present. - */ -function redactSensitiveHeader(key: string, value: string): string { - const _k = key.toLowerCase(); - // Handle Bearer tokens in authorization and proxy-authorization headers - if ((_k === 'authorization' || _k === 'proxy-authorization') && value.startsWith('Bearer ')) { - return `Bearer ${redact(value.substring(7))}`; - } - return redact(value); -} - -/** - * Format headers as a readable string for debug logging. - * Sensitive headers (auth tokens, cookies, API keys) are redacted. - */ -function formatHeaders(headers: Headers | Record): string { - const entries: string[] = []; - if (headers instanceof Headers) { - headers.forEach((value, key) => { - const _k = key.toLowerCase(); - if (sensitiveHeaders.has(_k)) { - entries.push(` ${key}: ${redactSensitiveHeader(key, value)}`); - } else { - entries.push(` ${key}: ${value}`); - } - }); - } else { - for (const [key, value] of Object.entries(headers)) { - const _k = key.toLowerCase(); - if (sensitiveHeaders.has(_k)) { - entries.push(` ${key}: ${redactSensitiveHeader(key, value)}`); - } else { - entries.push(` ${key}: ${value}`); - } - } - } - return entries.join('\n'); -} - /** * Log detailed debug information when API requests fail. * Output destination is determined by AGENTUITY_API_DEBUG or CI environment variables. @@ -226,51 +308,9 @@ function logAPIDebug( } } -/** - * Redacts the middle of a string while keeping a prefix and suffix visible. - * Ensures that if the string is too short, everything is redacted. - * - * @param input The string to redact - * @param prefix Number of chars to keep at the start - * @param suffix Number of chars to keep at the end - * @param mask Character used for redaction - */ -export function redact( - input: string, - prefix: number = 4, - suffix: number = 4, - mask: string = '*' -): string { - if (!input) return ''; - - // If revealing prefix+suffix would leak too much, fully mask - if (input.length <= prefix + suffix) { - return mask.repeat(input.length); - } - - const start = input.slice(0, prefix); - const end = input.slice(-suffix); - const hiddenLength = input.length - prefix - suffix; - - return start + mask.repeat(hiddenLength) + end; -} - -const redactHeaders = (kv: Record): string => { - const values: string[] = []; - for (const k of Object.keys(kv)) { - const _k = k.toLowerCase(); - const v = kv[k]; - if (v === undefined) { - continue; - } - if (sensitiveHeaders.has(_k)) { - values.push(`${_k}=${redactSensitiveHeader(k, v)}`); - } else { - values.push(`${_k}=${v}`); - } - } - return '[' + values.join(',') + ']'; -}; +// ============================================================================= +// Server Fetch Adapter +// ============================================================================= class ServerFetchAdapter implements FetchAdapter { #config: ServiceAdapterConfig; @@ -370,6 +410,7 @@ class ServerFetchAdapter implements FetchAdapter { const err = await toServiceException(method, url, res); throw err; } + async invoke( url: string, options: FetchRequest = { method: 'POST' } @@ -413,11 +454,31 @@ class ServerFetchAdapter implements FetchAdapter { } } +// ============================================================================= +// Factory Function +// ============================================================================= + /** - * Create a Server Side Fetch Adapter to allow the server to add headers and track outgoing requests + * Create a Server Side Fetch Adapter to allow the server to add headers and track outgoing requests. + * + * This adapter is used by all Agentuity service clients (KeyValueClient, QueueClient, etc.) + * to communicate with Agentuity cloud services. + * + * @param config - Configuration containing headers and optional hooks + * @param logger - Logger instance for debug output + * @returns A FetchAdapter instance * - * @param config the service config - * @returns + * @example + * ```typescript + * import { createServerFetchAdapter, buildClientHeaders } from '@agentuity/adapter'; + * import { createMinimalLogger } from '@agentuity/core'; + * + * const headers = buildClientHeaders({ apiKey: 'sk_xxx' }); + * const adapter = createServerFetchAdapter({ headers }, createMinimalLogger()); + * + * // Use with a service + * const service = new KeyValueStorageService('https://api.agentuity.sh', adapter); + * ``` */ export function createServerFetchAdapter(config: ServiceAdapterConfig, logger: Logger) { return new ServerFetchAdapter(config, logger); diff --git a/packages/adapter/tsconfig.json b/packages/adapter/tsconfig.json new file mode 100644 index 000000000..6a6ca7df6 --- /dev/null +++ b/packages/adapter/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "references": [{ "path": "../core" }] +} diff --git a/packages/analytics/README.md b/packages/analytics/README.md new file mode 100644 index 000000000..3f71215da --- /dev/null +++ b/packages/analytics/README.md @@ -0,0 +1,116 @@ +# @agentuity/analytics + +Browser analytics for Agentuity applications. Track page views, Web Vitals, custom events, and more. + +## Installation + +```bash +npm install @agentuity/analytics +``` + +## Usage + +### Auto-init (Drop-in) + +Set configuration via server-side injection, then import the beacon: + +```html + + +``` + +Or in a bundler: + +```typescript +import '@agentuity/analytics/beacon'; +``` + +### Programmatic + +```typescript +import { init, track, identify, flush } from '@agentuity/analytics'; + +// Initialize +init({ + orgId: 'your-org-id', + projectId: 'your-project-id', +}); + +// Track events +track('button_click', { button: 'signup' }); + +// Identify user +identify('user-123', { email: 'user@example.com' }); + +// Flush pending events +flush(); +``` + +## Features + +- **Page Views** - Automatic tracking with URL, referrer, title +- **Web Vitals** - FCP, LCP, CLS, INP metrics +- **Scroll Depth** - Tracks 25%, 50%, 75%, 100% milestones +- **SPA Navigation** - Tracks route changes in single-page apps +- **Click Tracking** - Via `[data-analytics]` attributes +- **Error Tracking** - JS errors and unhandled rejections +- **Custom Events** - Track any user action + +## Configuration + +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `enabled` | boolean | `true` | Enable/disable tracking | +| `orgId` | string | - | Organization ID | +| `projectId` | string | - | Project ID | +| `isDevmode` | boolean | `false` | Development mode (logs to console) | +| `trackClicks` | boolean | `true` | Track `[data-analytics]` clicks | +| `trackScroll` | boolean | `true` | Track scroll depth | +| `trackWebVitals` | boolean | `true` | Track Core Web Vitals | +| `trackErrors` | boolean | `true` | Track JS errors | +| `trackSPANavigation` | boolean | `true` | Track SPA route changes | +| `sampleRate` | number | `1` | Sampling rate (0-1) | +| `endpoint` | string | `/_agentuity/webanalytics/collect` | Collect endpoint | + +## Data Collected + +The beacon collects: + +- **Page**: URL, path, referrer, title +- **Device**: Screen size, viewport, device pixel ratio, user agent +- **Performance**: TTFB, DOM ready, load time, Web Vitals +- **Engagement**: Scroll depth, time on page +- **Context**: Language, timezone, UTM parameters +- **Geo**: Country, region, city (from IP, cached) + +## Privacy + +- Query strings are stripped from URLs to prevent sensitive data leakage +- No cookies used (uses localStorage for visitor ID) +- Geo data cached in sessionStorage +- User opt-out supported via `setOptOut(true)` + +## Server Integration + +The beacon sends data to `/_agentuity/webanalytics/collect` by default. Configure your server to: + +1. Inject `window.__AGENTUITY_ANALYTICS__` config +2. Handle POST requests to the collect endpoint + +## Framework Support + +Works with any frontend framework: + +- React +- Vue +- Svelte +- Solid +- Vanilla JS + +No framework-specific code required. \ No newline at end of file diff --git a/packages/analytics/package.json b/packages/analytics/package.json new file mode 100644 index 000000000..3cdd50ab4 --- /dev/null +++ b/packages/analytics/package.json @@ -0,0 +1,49 @@ +{ + "name": "@agentuity/analytics", + "version": "1.0.54", + "license": "Apache-2.0", + "author": "Agentuity employees and contributors", + "description": "Browser analytics for Agentuity applications", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./beacon": { + "import": "./dist/beacon.js", + "types": "./dist/beacon.d.ts" + } + }, + "files": [ + "README.md", + "dist", + "src" + ], + "scripts": { + "clean": "rm -rf dist tsconfig.tsbuildinfo", + "build": "bunx tsc --build", + "typecheck": "bunx tsc --noEmit", + "prepublishOnly": "bun run clean && bun run build" + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", + "typescript": "^5.9.0" + }, + "publishConfig": { + "access": "public" + }, + "sideEffects": [ + "**/beacon.ts" + ], + "keywords": [ + "analytics", + "web-vitals", + "page-views", + "browser", + "agentuity" + ] +} diff --git a/packages/analytics/src/beacon.ts b/packages/analytics/src/beacon.ts new file mode 100644 index 000000000..13ba37504 --- /dev/null +++ b/packages/analytics/src/beacon.ts @@ -0,0 +1,345 @@ +/** + * Analytics beacon - auto-initializing script + * + * Import this module to automatically start tracking: + * ```typescript + * import '@agentuity/analytics/beacon'; + * ``` + * + * Requires window.__AGENTUITY_ANALYTICS__ to be set by server. + */ + +import { isEnabled, getConfig, isDevmode } from './config'; +import { + initClient, + updatePageView, + resetSession, + send, + track, + setupGlobal, + getPageView, +} from './client'; +import { generateId, stripQueryString, getUTMParams, fetchGeo } from './util'; +import type { PageViewData } from './types'; + +// Track if already initialized +let initialized = false; + +/** + * Initialize page view data + */ +function initPageView(): PageViewData { + const pv: PageViewData = { + id: generateId(), + timestamp: Date.now(), + timezone_offset: new Date().getTimezoneOffset(), + url: stripQueryString(location.href), + path: location.pathname, + referrer: stripQueryString(document.referrer), + title: document.title || '', + screen_width: screen.width || 0, + screen_height: screen.height || 0, + viewport_width: innerWidth || 0, + viewport_height: innerHeight || 0, + device_pixel_ratio: devicePixelRatio || 1, + user_agent: navigator.userAgent || '', + language: navigator.language || '', + scroll_depth: 0, + time_on_page: 0, + scroll_events: [], + custom_events: [], + }; + + // Add UTM params + const utm = getUTMParams(); + for (const k in utm) { + pv[k] = utm[k]; + } + + // Capture navigation timing + if (typeof performance !== 'undefined' && performance.getEntriesByType) { + const nav = performance.getEntriesByType('navigation')[0] as + | PerformanceNavigationTiming + | undefined; + if (nav) { + pv.dom_ready = Math.round(nav.domContentLoadedEventEnd - nav.startTime); + pv.ttfb = Math.round(nav.responseStart - nav.requestStart); + if (nav.loadEventEnd > 0) { + pv.load_time = Math.round(nav.loadEventEnd - nav.startTime); + } else { + // Defer reading loadEventEnd + setTimeout(() => { + const navAfter = performance.getEntriesByType('navigation')[0] as + | PerformanceNavigationTiming + | undefined; + if (navAfter && navAfter.loadEventEnd > 0) { + updatePageView({ + load_time: Math.round(navAfter.loadEventEnd - navAfter.startTime), + }); + } + }, 0); + } + } + } + + return pv; +} + +/** + * Set up visibility change handlers + */ +function setupVisibilityHandlers(): void { + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'hidden') { + send(); + } else if (document.visibilityState === 'visible') { + // User returned - start new attention session + resetSession(); + } + }); + + window.addEventListener('pagehide', () => send()); + window.addEventListener('beforeunload', () => send()); +} + +/** + * Set up scroll tracking + */ +function setupScrollTracking(): void { + const config = getConfig(); + if (config?.trackScroll === false) return; + + const scrolled = new Set(); + + function getScrollDepth(): number { + const st = window.scrollY || document.documentElement.scrollTop; + const sh = document.documentElement.scrollHeight - document.documentElement.clientHeight; + return sh <= 0 ? 100 : Math.min(100, Math.round((st / sh) * 100)); + } + + window.addEventListener( + 'scroll', + () => { + const depth = getScrollDepth(); + updatePageView({ scroll_depth: depth }); + + for (const m of [25, 50, 75, 100]) { + if (depth >= m && !scrolled.has(m)) { + scrolled.add(m); + const pv = getPageView(); + if (pv) { + pv.scroll_events.push({ + depth: m, + timestamp: Date.now(), + }); + } + } + } + }, + { passive: true } + ); +} + +/** + * Set up Web Vitals tracking + */ +function setupWebVitals(): void { + const config = getConfig(); + if (config?.trackWebVitals === false) return; + if (typeof PerformanceObserver === 'undefined') return; + + // FCP + try { + const fcpObs = new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + if (entry.name === 'first-contentful-paint') { + updatePageView({ fcp: Math.round(entry.startTime) }); + fcpObs.disconnect(); + } + } + }); + fcpObs.observe({ type: 'paint', buffered: true }); + } catch { + /* Not supported */ + } + + // LCP + try { + new PerformanceObserver((list) => { + const entries = list.getEntries(); + const last = entries[entries.length - 1]; + if (last) { + updatePageView({ lcp: Math.round(last.startTime) }); + } + }).observe({ type: 'largest-contentful-paint', buffered: true }); + } catch { + /* Not supported */ + } + + // CLS + try { + let clsValue = 0; + new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + const shift = entry as PerformanceEntry & { hadRecentInput?: boolean; value?: number }; + if (!shift.hadRecentInput && shift.value) { + clsValue += shift.value; + } + } + updatePageView({ cls: Math.round(clsValue * 1000) / 1000 }); + }).observe({ type: 'layout-shift', buffered: true }); + } catch { + /* Not supported */ + } + + // INP + try { + let inpValue = 0; + new PerformanceObserver((list) => { + for (const entry of list.getEntries()) { + const event = entry as PerformanceEntry & { duration?: number }; + if (event.duration && event.duration > inpValue) { + inpValue = event.duration; + } + } + updatePageView({ inp: Math.round(inpValue) }); + }).observe({ type: 'event', buffered: true }); + } catch { + /* Not supported */ + } +} + +/** + * Set up SPA navigation tracking + */ +function setupSPANavigation(): void { + const config = getConfig(); + if (config?.trackSPANavigation === false) return; + + let currentPath = location.pathname + location.search; + let lastHref = location.href; + + function handleNav(): void { + const newPath = location.pathname + location.search; + if (newPath !== currentPath) { + send(true); // Force send on SPA nav + currentPath = newPath; + lastHref = location.href; + initClient(initPageView()); + } + } + + // Monkey-patch history + const origPush = history.pushState; + const origReplace = history.replaceState; + + history.pushState = function (...args: [data: unknown, unused: string, url?: string | URL]) { + origPush.apply(this, args); + setTimeout(handleNav, 0); + }; + + history.replaceState = function (...args: [data: unknown, unused: string, url?: string | URL]) { + origReplace.apply(this, args); + setTimeout(handleNav, 0); + }; + + window.addEventListener('popstate', handleNav); + + // Fallback: poll for URL changes + setInterval(() => { + if (location.href !== lastHref) { + lastHref = location.href; + handleNav(); + } + }, 200); +} + +/** + * Set up click tracking + */ +function setupClickTracking(): void { + const config = getConfig(); + if (config?.trackClicks === false) return; + + document.addEventListener( + 'click', + (e) => { + const target = e.target as Element | null; + if (!target) return; + + const el = target.closest('[data-analytics]'); + if (!el) return; + + const name = 'click:' + el.getAttribute('data-analytics'); + track(name); + }, + true + ); +} + +/** + * Set up error tracking + */ +function setupErrorTracking(): void { + const config = getConfig(); + if (config?.trackErrors === false) return; + + window.addEventListener('error', (e) => { + track('error:js_error', { + message: e.message || 'Unknown', + filename: e.filename || '', + lineno: e.lineno || 0, + }); + }); + + window.addEventListener('unhandledrejection', (e) => { + track('error:unhandled_rejection', { + message: e.reason instanceof Error ? e.reason.message : String(e.reason), + }); + }); +} + +/** + * Initialize the beacon + */ +function init(): void { + if (initialized) return; + if (!isEnabled()) return; + + initialized = true; + + // Init page view + const pv = initPageView(); + initClient(pv); + + // Fetch geo (async) + fetchGeo(); + + // Set up all tracking + setupVisibilityHandlers(); + setupScrollTracking(); + setupWebVitals(); + setupSPANavigation(); + setupClickTracking(); + setupErrorTracking(); + + // Set up global API + setupGlobal(); + + // Init on load if not ready + if (document.readyState === 'complete') { + // Already loaded + } else { + window.addEventListener('load', () => { + // Re-capture timing after load + updatePageView(initPageView()); + }); + } + + if (isDevmode()) { + console.debug('[Agentuity Analytics] Beacon initialized'); + } +} + +// Auto-initialize on import +init(); diff --git a/packages/analytics/src/client.ts b/packages/analytics/src/client.ts new file mode 100644 index 000000000..be126e63e --- /dev/null +++ b/packages/analytics/src/client.ts @@ -0,0 +1,189 @@ +/** + * Analytics client - programmatic API + */ + +import { isEnabled, getConfig, getEndpoint } from './config'; +import { generateId, safeStringify, getVisitorId } from './util'; +import type { AnalyticsClient, PageViewData, AnalyticsPayload } from './types'; + +/** Pending custom events */ +let customEvents: Array<{ timestamp: number; name: string; data: string }> = []; + +/** Current user ID */ +let userId = ''; + +/** Current user traits */ +let userTraits: Record = {}; + +/** Current page view data */ +let pageView: PageViewData | null = null; + +/** Whether current page view was sent */ +let sent = false; + +/** Page view start time */ +let pageStart = Date.now(); + +/** + * Initialize client with page view data + * Called by beacon or can be called manually + */ +export function initClient(pv: PageViewData): void { + pageView = pv; + customEvents = []; + sent = false; + pageStart = Date.now(); +} + +/** + * Update page view data + */ +export function updatePageView(updates: Partial): void { + if (pageView) { + Object.assign(pageView, updates); + } +} + +/** + * Get current page view data + */ +export function getPageView(): PageViewData | null { + return pageView; +} + +/** + * Reset session (keep page-level metrics, reset session metrics) + */ +export function resetSession(): void { + if (pageView) { + pageView.id = generateId(); + pageView.timestamp = Date.now(); + pageView.scroll_events = []; + pageView.custom_events = customEvents; + pageView.scroll_depth = 0; + pageView.time_on_page = 0; + } + sent = false; + pageStart = Date.now(); +} + +/** + * Build payload for sending + */ +function buildPayload(): AnalyticsPayload | null { + if (!pageView) return null; + + const config = getConfig(); + if (!config) return null; + + return { + org_id: config.orgId, + project_id: config.projectId, + visitor_id: getVisitorId(), + user_id: userId, + user_traits: userTraits, + is_devmode: config.isDevmode ?? false, + pageview: { + ...pageView, + custom_events: customEvents, + time_on_page: Date.now() - pageStart, + }, + }; +} + +/** + * Send analytics data + */ +export function send(force = false): void { + if (sent && !force) return; + if (!isEnabled()) return; + + const config = getConfig(); + if (!config) return; + + // Check sample rate + if (config.sampleRate !== undefined && config.sampleRate < 1) { + if (Math.random() > config.sampleRate) return; + } + + sent = true; + + const payload = buildPayload(); + if (!payload) return; + + // Dev mode: just log + if (config.isDevmode) { + console.debug('[Agentuity Analytics]', JSON.stringify(payload, null, 2)); + return; + } + + // Production: send to endpoint + const body = JSON.stringify(payload); + const endpoint = getEndpoint(); + + if (navigator.sendBeacon) { + navigator.sendBeacon(endpoint, body); + } else { + fetch(endpoint, { + method: 'POST', + body, + keepalive: true, + }).catch(() => { + // Silent failure + }); + } +} + +/** + * Track a custom event + */ +export function track(name: string, properties?: Record): void { + if (!isEnabled()) return; + if (customEvents.length >= 1000) return; + + customEvents.push({ + timestamp: Date.now(), + name, + data: safeStringify(properties), + }); +} + +/** + * Identify a user + */ +export function identify(id: string, traits?: Record): void { + userId = id; + if (traits) { + userTraits = {}; + for (const [key, value] of Object.entries(traits)) { + userTraits[key] = String(value); + } + } +} + +/** + * Flush pending events + */ +export function flush(): void { + send(true); +} + +/** + * Get the analytics client + */ +export function getClient(): AnalyticsClient { + return { + track, + identify, + flush, + }; +} + +/** + * Set up client as window.global + */ +export function setupGlobal(): void { + if (typeof window !== 'undefined') { + window.agentuityAnalytics = getClient(); + } +} diff --git a/packages/analytics/src/config.ts b/packages/analytics/src/config.ts new file mode 100644 index 000000000..550589c60 --- /dev/null +++ b/packages/analytics/src/config.ts @@ -0,0 +1,48 @@ +/** + * Analytics configuration resolution + */ + +import type { AnalyticsConfig } from './types'; + +/** Window with Agentuity analytics globals */ +declare global { + interface Window { + __AGENTUITY_ANALYTICS__?: AnalyticsConfig; + agentuityAnalytics?: import('./types').AnalyticsClient; + } +} + +/** Default collect endpoint */ +export const DEFAULT_ENDPOINT = '/_agentuity/webanalytics/collect'; + +/** Maximum custom events per page view */ +export const MAX_CUSTOM_EVENTS = 1000; + +/** + * Get analytics config from window global + */ +export function getConfig(): AnalyticsConfig | null { + return window.__AGENTUITY_ANALYTICS__ ?? null; +} + +/** + * Check if analytics is enabled + */ +export function isEnabled(): boolean { + const config = getConfig(); + return config?.enabled === true; +} + +/** + * Check if running in dev mode + */ +export function isDevmode(): boolean { + return getConfig()?.isDevmode ?? false; +} + +/** + * Get the collect endpoint + */ +export function getEndpoint(): string { + return getConfig()?.endpoint ?? DEFAULT_ENDPOINT; +} diff --git a/packages/analytics/src/index.ts b/packages/analytics/src/index.ts new file mode 100644 index 000000000..b7890a38f --- /dev/null +++ b/packages/analytics/src/index.ts @@ -0,0 +1,124 @@ +/** + * @agentuity/analytics - Browser analytics for Agentuity applications + * + * ## Usage + * + * ### Auto-init (drop-in) + * ```typescript + * // Just import - uses window.__AGENTUITY_ANALYTICS__ config + * import '@agentuity/analytics/beacon'; + * ``` + * + * ### Programmatic + * ```typescript + * import { init, track, identify, flush } from '@agentuity/analytics'; + * + * init({ + * orgId: 'your-org-id', + * projectId: 'your-project-id', + * }); + * + * track('button_click', { button: 'signup' }); + * identify('user-123', { email: 'user@example.com' }); + * flush(); + * ``` + * + * ### With React + * ```typescript + * import { useEffect } from 'react'; + * import { track } from '@agentuity/analytics'; + * + * function SignupButton() { + * const handleClick = () => { + * track('signup_click'); + * }; + * return ; + * } + * ``` + */ + +// Types +export type { + AnalyticsConfig, + AnalyticsClient, + AnalyticsPayload, + PageViewData, + ScrollEvent, + AnalyticsCustomEvent, + GeoLocation, +} from './types'; + +// Config utilities +export { + getConfig, + isEnabled, + isDevmode, + getEndpoint, + DEFAULT_ENDPOINT, +} from './config'; + +// Utility functions +export { + generateId, + getVisitorId, + getUTMParams, + stripQueryString, +} from './util'; + +// Programmatic API +export { + initClient, + track, + identify, + flush, + send, + getClient, +} from './client'; + +/** + * Initialize analytics with explicit config + * Alternative to using window.__AGENTUITY_ANALYTICS__ + */ +export function init(config: import('./types').AnalyticsConfig): void { + if (typeof window !== 'undefined') { + window.__AGENTUITY_ANALYTICS__ = config; + // Import beacon to trigger auto-init + import('./beacon'); + } +} + +/** + * Get the global analytics client + */ +export function getAnalytics(): import('./types').AnalyticsClient | null { + if (typeof window !== 'undefined' && window.agentuityAnalytics) { + return window.agentuityAnalytics; + } + return null; +} + +/** + * Check if user has opted out of analytics via localStorage. + */ +export function isOptedOut(): boolean { + try { + return localStorage.getItem('agentuity_opt_out') === 'true'; + } catch { + return false; + } +} + +/** + * Set the analytics opt-out status in localStorage. + */ +export function setOptOut(optOut: boolean): void { + try { + if (optOut) { + localStorage.setItem('agentuity_opt_out', 'true'); + } else { + localStorage.removeItem('agentuity_opt_out'); + } + } catch { + // localStorage not available + } +} diff --git a/packages/analytics/src/types.ts b/packages/analytics/src/types.ts new file mode 100644 index 000000000..c83f2ef09 --- /dev/null +++ b/packages/analytics/src/types.ts @@ -0,0 +1,126 @@ +/** + * Analytics type definitions + */ + +/** Scroll depth milestone event */ +export interface ScrollEvent { + depth: number; + timestamp: number; +} + +/** Custom analytics event */ +export interface AnalyticsCustomEvent { + timestamp: number; + name: string; + data: string; +} + +/** Geo location data from IP */ +export interface GeoLocation { + country?: string; + country_latitude?: string | number; + country_longitude?: string | number; + region?: string; + region_latitude?: string | number; + region_longitude?: string | number; + city?: string; + city_latitude?: string | number; + city_longitude?: string | number; + timezone?: string; + latitude?: string | number; + longitude?: string | number; +} + +/** Page view data collected by the beacon */ +export interface PageViewData { + id: string; + timestamp: number; + timezone_offset: number; + url: string; + path: string; + referrer: string; + title: string; + screen_width: number; + screen_height: number; + viewport_width: number; + viewport_height: number; + device_pixel_ratio: number; + user_agent: string; + language: string; + scroll_depth: number; + time_on_page: number; + scroll_events: ScrollEvent[]; + custom_events: AnalyticsCustomEvent[]; + load_time?: number; + dom_ready?: number; + ttfb?: number; + fcp?: number; + lcp?: number; + cls?: number; + inp?: number; + country?: string; + country_latitude?: number; + country_longitude?: number; + region?: string; + region_latitude?: number; + region_longitude?: number; + city?: string; + city_latitude?: number; + city_longitude?: number; + timezone?: string; + latitude?: number; + longitude?: number; + utm_source?: string; + utm_medium?: string; + utm_campaign?: string; + utm_term?: string; + utm_content?: string; + [key: string]: unknown; +} + +/** Analytics configuration */ +export interface AnalyticsConfig { + /** Enable/disable tracking */ + enabled: boolean; + /** Organization ID */ + orgId: string; + /** Project ID */ + projectId: string; + /** Running in development mode */ + isDevmode?: boolean; + /** Track clicks on [data-analytics] elements */ + trackClicks?: boolean; + /** Track scroll depth */ + trackScroll?: boolean; + /** Track Web Vitals (FCP, LCP, CLS, INP) */ + trackWebVitals?: boolean; + /** Track JS errors */ + trackErrors?: boolean; + /** Track SPA navigation */ + trackSPANavigation?: boolean; + /** Sampling rate (0-1) */ + sampleRate?: number; + /** Custom collect endpoint */ + endpoint?: string; +} + +/** Analytics client API */ +export interface AnalyticsClient { + /** Track a custom event */ + track: (name: string, properties?: Record) => void; + /** Identify a user */ + identify: (userId: string, traits?: Record) => void; + /** Flush pending events */ + flush: () => void; +} + +/** Payload sent to collect endpoint */ +export interface AnalyticsPayload { + org_id: string; + project_id: string; + visitor_id: string; + user_id: string; + user_traits: Record; + is_devmode: boolean; + pageview: PageViewData; +} diff --git a/packages/analytics/src/util.ts b/packages/analytics/src/util.ts new file mode 100644 index 000000000..e058ce7bf --- /dev/null +++ b/packages/analytics/src/util.ts @@ -0,0 +1,123 @@ +/** + * Analytics utility functions + */ + +import type { GeoLocation } from './types'; + +/** + * Generate a unique ID + */ +export function generateId(): string { + if (typeof crypto !== 'undefined' && crypto.randomUUID) { + return crypto.randomUUID(); + } + return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`; +} + +/** + * Safely stringify an object, handling circular references + */ +export function safeStringify(obj: unknown): string { + if (obj === undefined || obj === null) { + return ''; + } + try { + const seen = new WeakSet(); + return JSON.stringify(obj, (_key, value) => { + if (typeof value === 'object' && value !== null) { + if (seen.has(value)) { + return '[Circular]'; + } + seen.add(value); + } + return value; + }); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + console.warn('[Agentuity Analytics] Failed to stringify:', message); + return `[unserializable: ${message}]`; + } +} + +/** + * Strip query string from URL to prevent sensitive data leakage + */ +export function stripQueryString(url: string): string { + if (!url) return ''; + try { + const parsed = new URL(url); + return parsed.origin + parsed.pathname; + } catch { + return url.split('?')[0] ?? url; + } +} + +/** + * Get UTM parameters from URL + */ +export function getUTMParams(): Record { + const params = new URLSearchParams(location.search); + const utm: Record = {}; + for (const key of ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']) { + const value = params.get(key); + if (value) utm[key] = value; + } + return utm; +} + +/** + * Get or create visitor ID from localStorage + */ +export function getVisitorId(): string { + try { + const stored = localStorage.getItem('agentuity_visitor_id'); + if (stored) return stored; + } catch { + // localStorage not available + } + const id = 'vid_' + generateId(); + try { + localStorage.setItem('agentuity_visitor_id', id); + } catch { + // localStorage not available + } + return id; +} + +/** + * Get cached geo location + */ +export function getCachedGeo(): GeoLocation | null { + try { + const cached = sessionStorage.getItem('agentuity_geo'); + if (cached) return JSON.parse(cached); + } catch { + // sessionStorage not available + } + return null; +} + +/** + * Cache geo location + */ +export function setCachedGeo(geo: GeoLocation): void { + try { + sessionStorage.setItem('agentuity_geo', JSON.stringify(geo)); + } catch { + // sessionStorage not available + } +} + +/** + * Fetch geo location from service + */ +export async function fetchGeo(): Promise { + try { + const response = await fetch('https://agentuity.sh/location'); + const geo = await response.json(); + setCachedGeo(geo); + return geo; + } catch { + return getCachedGeo(); + } +} diff --git a/packages/analytics/tsconfig.json b/packages/analytics/tsconfig.json new file mode 100644 index 000000000..1d6bb40ed --- /dev/null +++ b/packages/analytics/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist", + "rootDir": "./src", + "lib": ["DOM", "DOM.Iterable", "ESNext"] + }, + "include": ["src/**/*"], + "exclude": ["test/**/*"] +} diff --git a/packages/auth/src/agentuity/react.tsx b/packages/auth/src/agentuity/react.tsx index 4adc558d7..03ae1ca1e 100644 --- a/packages/auth/src/agentuity/react.tsx +++ b/packages/auth/src/agentuity/react.tsx @@ -63,7 +63,8 @@ export interface AuthClientOptions< * * Note: jwt() and bearer() are server-only plugins. */ -export function getDefaultClientPlugins() { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function getDefaultClientPlugins(): any { return [organizationClient(), apiKeyClient()]; } @@ -109,9 +110,10 @@ export function getDefaultClientPlugins() { * }); * ``` */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any export function createAuthClient( options?: AuthClientOptions -): ReturnType> { +): any { const baseURL = options?.baseURL ?? (typeof window !== 'undefined' ? window.location.origin : ''); const basePath = options?.basePath ?? '/api/auth'; @@ -121,11 +123,12 @@ export function createAuthClient // Merge default plugins with user plugins // We pass through the full options to preserve type inference - // The return type preserves plugin type inference via the generic parameter // // The plugins array uses a type assertion because bun's package resolution can create // multiple physical copies of @better-auth/core with different dependency tree hashes, // causing TypeScript to treat structurally identical types as incompatible. + // The return type uses a simpler signature to avoid referencing unexported types + // from better-auth plugins (e.g., OrganizationClientOptions). return createBetterAuthClient({ ...options, baseURL, diff --git a/packages/cli/scripts/test-create-flow.ts b/packages/cli/scripts/test-create-flow.ts index f6bfdb34f..c7b655cde 100644 --- a/packages/cli/scripts/test-create-flow.ts +++ b/packages/cli/scripts/test-create-flow.ts @@ -3,12 +3,10 @@ /** * Integration test for the `agentuity create` command * - * This script tests the complete create flow: - * 1. Creates a new project from local templates - * 2. Verifies files are created correctly - * 3. Runs `bun install` - * 4. Runs `bun run build` (agentuity bundle) - * 5. Runs `bun run dev` briefly to verify it starts + * Tests the framework-native scaffolding flow: + * 1. Creates a new project using --framework hono (fastest to scaffold) + * 2. Verifies core files are created + * 3. Verifies Agentuity augmentation (deploy script, .gitignore entries) * * Usage: * bun scripts/test-create-flow.ts @@ -19,63 +17,64 @@ import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; const MONOREPO_ROOT = resolve(import.meta.dir, '../../..'); -const TEMPLATES_DIR = join(MONOREPO_ROOT, 'templates'); const TEST_DIR = join(tmpdir(), `agentuity-test-${Date.now()}`); -const PACKAGES_DIR = join(tmpdir(), `test-packages-${Date.now()}`); -const TEST_PROJECT_HUMAN_NAME = 'Integration Test Project'; -const TEST_PROJECT_DIR_NAME = 'integration-test-project'; // Sanitized version -const TEST_PROJECT_PATH = join(TEST_DIR, TEST_PROJECT_DIR_NAME); +const TEST_PROJECT_NAME = 'integration-test-project'; +const TEST_PROJECT_PATH = join(TEST_DIR, TEST_PROJECT_NAME); -// Colors for output const colors = { reset: '\x1b[0m', red: '\x1b[31m', green: '\x1b[32m', - yellow: '\x1b[33m', - blue: '\x1b[34m', cyan: '\x1b[36m', + blue: '\x1b[34m', }; function log(message: string, color = colors.reset) { console.log(`${color}${message}${colors.reset}`); } - function logStep(step: string) { log(`\n━━━ ${step} ━━━`, colors.cyan); } - function logSuccess(message: string) { log(`✓ ${message}`, colors.green); } - function logError(message: string) { log(`✗ ${message}`, colors.red); } - function logInfo(message: string) { log(`ℹ ${message}`, colors.blue); } async function cleanup() { - if (existsSync(TEST_PROJECT_PATH)) { - logInfo('Cleaning up existing test project...'); - rmSync(TEST_PROJECT_PATH, { recursive: true, force: true }); - logSuccess('Cleanup complete'); + if (existsSync(TEST_DIR)) { + rmSync(TEST_DIR, { recursive: true, force: true }); } - if (existsSync(PACKAGES_DIR)) { - rmSync(PACKAGES_DIR, { recursive: true, force: true }); +} + +async function buildCLI(): Promise { + logStep('Step 0: Build All Packages'); + + const result = Bun.spawn(['bunx', 'tsc', '--build'], { + cwd: MONOREPO_ROOT, + stdout: 'inherit', + stderr: 'inherit', + }); + + const exitCode = await result.exited; + if (exitCode !== 0) { + logError('Failed to build packages'); + return false; } + + logSuccess('All packages built successfully'); + return true; } async function createProject(): Promise { - logStep('Step 1: Create Project'); + logStep('Step 1: Create Project (Hono)'); - // Ensure test directory exists - if (!existsSync(TEST_DIR)) { - mkdirSync(TEST_DIR, { recursive: true }); - } + mkdirSync(TEST_DIR, { recursive: true }); - // Run agentuity create with local templates const result = Bun.spawn( [ 'bun', @@ -83,23 +82,23 @@ async function createProject(): Promise { join(MONOREPO_ROOT, 'packages/cli/bin/cli.ts'), 'create', '--name', - TEST_PROJECT_HUMAN_NAME, - '--template-dir', - TEMPLATES_DIR, + TEST_PROJECT_NAME, + '--framework', + 'hono', '--confirm', '--no-register', - '--no-install', // Don't install yet - we'll install local packages - '--no-build', // Don't build yet + '--no-install', + '--no-build', ], { cwd: TEST_DIR, stdout: 'inherit', stderr: 'inherit', + env: { ...process.env, AGENTUITY_SKIP_VERSION_CHECK: '1' }, } ); const exitCode = await result.exited; - if (exitCode !== 0) { logError('Failed to create project'); return false; @@ -112,17 +111,10 @@ async function createProject(): Promise { async function verifyFiles(): Promise { logStep('Step 2: Verify Files'); - const requiredFiles = [ - 'package.json', - 'README.md', - 'AGENTS.md', - 'tsconfig.json', - 'app.ts', - '.gitignore', - 'src', - ]; + // Core files from Hono scaffolding + const requiredFiles = ['package.json', '.gitignore']; - let allFilesExist = true; + let allGood = true; for (const file of requiredFiles) { const filePath = join(TEST_PROJECT_PATH, file); @@ -130,233 +122,48 @@ async function verifyFiles(): Promise { logSuccess(`Found: ${file}`); } else { logError(`Missing: ${file}`); - allFilesExist = false; + allGood = false; } } - // Verify package.json has correct name - const packageJsonPath = join(TEST_PROJECT_PATH, 'package.json'); - const packageJson = await Bun.file(packageJsonPath).json(); - - if (packageJson.name === 'integration-test-project') { - logSuccess('package.json has correct sanitized name'); - } else { - logError(`package.json name is incorrect: ${packageJson.name}`); - allFilesExist = false; + // Verify package.json has Agentuity augmentation + const pkgPath = join(TEST_PROJECT_PATH, 'package.json'); + if (!existsSync(pkgPath)) { + logError('package.json not found'); + return false; } - // Verify README has correct human-readable name - const readmePath = join(TEST_PROJECT_PATH, 'README.md'); - const readme = await Bun.file(readmePath).text(); + const pkg = await Bun.file(pkgPath).json(); - if (readme.includes('Integration Test Project')) { - logSuccess('README.md has correct project name'); + // Check @agentuity/cli devDep + if (pkg.devDependencies?.['@agentuity/cli']) { + logSuccess('package.json has @agentuity/cli devDependency'); } else { - logError('README.md does not contain expected project name'); - allFilesExist = false; + logError('package.json missing @agentuity/cli devDependency'); + allGood = false; } - return allFilesExist; -} - -async function linkLocalPackages(): Promise { - logStep('Step 3: Install Local Packages'); - - // Pack and install local packages (same as smoke test - avoids symlink issues) - const packagesToInstall = [ - 'core', - 'schema', - 'frontend', - 'react', - 'postgres', - 'drizzle', - 'auth', - 'runtime', - 'server', - 'workbench', - 'cli', - ]; - const packagePaths: string[] = []; - - // Ensure packages directory exists - if (!existsSync(PACKAGES_DIR)) { - mkdirSync(PACKAGES_DIR, { recursive: true }); - } - - // Clean and reinstall dependencies in monorepo to ensure fresh workspace links - logInfo('Cleaning and reinstalling monorepo dependencies...'); - await Bun.$`bun install`.cwd(MONOREPO_ROOT).quiet(); - - // Pack each package to unique temp directory - for (const pkg of packagesToInstall) { - const pkgPath = join(MONOREPO_ROOT, 'packages', pkg); - // Use --quiet to get just the filename - const packResult = await Bun.$`bun pm pack --destination ${PACKAGES_DIR} --quiet` - .cwd(pkgPath) - .text(); - const baseName = packResult.trim().split('/').pop()!; - packagePaths.push(join(PACKAGES_DIR, baseName)); - } - - // Remove @agentuity dependencies from package.json first (to avoid conflicts) - const packageJsonPath = join(TEST_PROJECT_PATH, 'package.json'); - const packageJson = await Bun.file(packageJsonPath).json(); - delete packageJson.dependencies['@agentuity/schema']; - delete packageJson.dependencies['@agentuity/frontend']; - delete packageJson.dependencies['@agentuity/react']; - delete packageJson.dependencies['@agentuity/runtime']; - // Also remove workbench to allow npm install for templates that need it - delete packageJson.dependencies['@agentuity/workbench']; - // Remove CLI from devDependencies to install from local tarball - delete packageJson.devDependencies['@agentuity/cli']; - - // Add overrides to force all @agentuity packages to use local tarballs - // This prevents nested dependencies from pulling from npm - if (!packageJson.overrides) packageJson.overrides = {}; - for (let i = 0; i < packagesToInstall.length; i++) { - const pkgName = `@agentuity/${packagesToInstall[i]}`; - packageJson.overrides[pkgName] = `file:${packagePaths[i]}`; + // Check deploy script + if (pkg.scripts?.deploy === 'agentuity deploy') { + logSuccess('package.json has deploy script'); + } else { + logError('package.json missing deploy script'); + allGood = false; } - await Bun.write(packageJsonPath, JSON.stringify(packageJson, null, '\t') + '\n'); - - // Install other dependencies first - await Bun.$`bun install`.cwd(TEST_PROJECT_PATH); - - // install from tarballs (not from npm) - Bun.spawnSync({ - cmd: ['bun', 'add', ...packagePaths], - cwd: TEST_PROJECT_PATH, - }); - - // Remove nested @agentuity packages that Bun installed from npm (instead of using workspace tarballs) - // This happens because workspace:* dependencies get resolved to specific versions (e.g. 0.0.60) - // and Bun installs those from npm as nested dependencies, shadowing the correct local tarballs - // Clean ALL @agentuity packages to prevent Rollup resolution issues - logInfo('Removing nested @agentuity packages to ensure proper module resolution...'); - const agentuityDir = join(TEST_PROJECT_PATH, 'node_modules/@agentuity'); - if (existsSync(agentuityDir)) { - const { readdirSync } = await import('node:fs'); - const packages = readdirSync(agentuityDir); - for (const pkg of packages) { - const nestedPath = join(agentuityDir, pkg, 'node_modules/@agentuity'); - if (existsSync(nestedPath)) { - logInfo(`Removing: node_modules/@agentuity/${pkg}/node_modules/@agentuity`); - rmSync(nestedPath, { recursive: true, force: true }); - } + // Verify .gitignore has Agentuity entries + const gitignorePath = join(TEST_PROJECT_PATH, '.gitignore'); + if (existsSync(gitignorePath)) { + const gitignore = await Bun.file(gitignorePath).text(); + if (gitignore.includes('.agentuity/')) { + logSuccess('.gitignore has .agentuity/ entry'); + } else { + logError('.gitignore missing .agentuity/ entry'); + allGood = false; } } - logSuccess('Installed local packages from tarballs'); - return true; -} - -async function buildProject(): Promise { - logStep('Step 4: Build Project'); - - // Use local CLI bin directly to ensure we use the latest code - const CLI_BIN = join(MONOREPO_ROOT, 'packages/cli/bin/cli.ts'); - - // Run the build command using local CLI (cwd is already set to project path) - const result = Bun.spawn(['bun', CLI_BIN, 'build'], { - cwd: TEST_PROJECT_PATH, - stdout: 'inherit', - stderr: 'inherit', - }); - - const exitCode = await result.exited; - - if (exitCode !== 0) { - logError('Build failed'); - return false; - } - - // Verify .agentuity directory exists (created during bundle) - const agentuityPath = join(TEST_PROJECT_PATH, '.agentuity'); - if (!existsSync(agentuityPath)) { - logError('.agentuity directory not found'); - return false; - } - - logSuccess('Project built'); - return true; -} - -async function verifyInstallation(): Promise { - logStep('Step 5: Verify Installation'); - - // Verify node_modules exists (created during setup) - const nodeModulesPath = join(TEST_PROJECT_PATH, 'node_modules'); - if (!existsSync(nodeModulesPath)) { - logError('node_modules directory not found'); - return false; - } - logSuccess('Dependencies installed'); - - return true; -} - -async function verifyGitInit(): Promise { - logStep('Step 6: Verify Git Initialization'); - - // Check if git is available - const gitPath = Bun.which('git'); - if (!gitPath) { - logInfo('Git not available, skipping git tests'); - return true; - } - - // Check if .git directory exists - const gitDirPath = join(TEST_PROJECT_PATH, '.git'); - if (!existsSync(gitDirPath)) { - logError('.git directory not found'); - return false; - } - logSuccess('.git directory exists'); - - // Check if initial commit was made - const result = Bun.spawn(['git', 'log', '--oneline'], { - cwd: TEST_PROJECT_PATH, - stdout: 'pipe', - stderr: 'pipe', - }); - - const exitCode = await result.exited; - if (exitCode !== 0) { - logError('Failed to get git log'); - return false; - } - - const output = (await new Response(result.stdout).text()).trim(); - const lines = output.split('\n'); - const lastCommitMessage = lines[lines.length - 1]; // First commit is last in log - if (lastCommitMessage && lastCommitMessage.includes('Initial Setup')) { - logSuccess('Initial commit message is "Initial Setup"'); - return true; - } - logError('Initial commit message not correct'); - return false; -} - -async function buildCLI(): Promise { - logStep('Step 0: Build All Packages'); - - // Build all packages from the monorepo root to ensure fresh builds - const result = Bun.spawn(['bun', 'run', 'build'], { - cwd: MONOREPO_ROOT, - stdout: 'inherit', - stderr: 'inherit', - }); - - const exitCode = await result.exited; - - if (exitCode !== 0) { - logError('Failed to build packages'); - return false; - } - - logSuccess('All packages built successfully'); - return true; + return allGood; } async function main() { @@ -365,45 +172,17 @@ async function main() { log('╚════════════════════════════════════════════╝', colors.cyan); try { - // Check for global agentuity - only remove in CI to avoid deleting user's CLI - const globalAgentuity = Bun.which('agentuity'); - if (globalAgentuity) { - const isCI = process.env.CI === 'true' || process.env.CI === '1'; - if (isCI) { - logInfo(`[CI] Removing global agentuity at: ${globalAgentuity}`); - try { - await Bun.$`bun remove -g @agentuity/cli`.nothrow(); - logSuccess('Removed global agentuity'); - } catch (_error) { - logInfo('Could not remove global agentuity (might not be installed via bun)'); - } - } else { - logInfo(`Found global agentuity at: ${globalAgentuity}`); - logInfo('Skipping removal (not in CI) - test uses local CLI directly'); - } - } + await cleanup(); - // Build CLI first const cliBuilt = await buildCLI(); - if (!cliBuilt) { - process.exit(1); - } + if (!cliBuilt) process.exit(1); - // Cleanup before starting - await cleanup(); - - // Run test steps - const steps: Array<{ name: string; fn: () => Promise }> = [ + const steps = [ { name: 'Create Project', fn: createProject }, { name: 'Verify Files', fn: verifyFiles }, - { name: 'Link Local Packages', fn: linkLocalPackages }, - { name: 'Build Project', fn: buildProject }, - { name: 'Verify Installation', fn: verifyInstallation }, - { name: 'Verify Git Init', fn: verifyGitInit }, ]; let allPassed = true; - for (const step of steps) { const passed = await step.fn(); if (!passed) { @@ -412,11 +191,9 @@ async function main() { } } - // Cleanup after test logStep('Cleanup'); await cleanup(); - // Summary log('\n╔════════════════════════════════════════════╗', colors.cyan); if (allPassed) { log('║ ✓ ALL TESTS PASSED ║', colors.green); diff --git a/packages/cli/src/agents-docs.ts b/packages/cli/src/agents-docs.ts deleted file mode 100644 index 6cfed564b..000000000 --- a/packages/cli/src/agents-docs.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { join } from 'node:path'; -import { existsSync } from 'node:fs'; -import { mkdir } from 'node:fs/promises'; -import { generateLLMPrompt as generateCLIPrompt } from './cmd/ai/prompt/llm'; -import { generateLLMPrompt as generateAgentPrompt } from './cmd/ai/prompt/agent'; -import { generateLLMPrompt as generateWebPrompt } from './cmd/ai/prompt/web'; -import { generateLLMPrompt as generateAPIPrompt } from './cmd/ai/prompt/api'; - -interface WriteAgentsDocsOptions { - /** - * If true, only write files that don't already exist. - * If false (default), always write files, overwriting existing ones. - */ - onlyIfMissing?: boolean; -} - -/** - * Generate the reference file content that points to .agents/ - */ -function generateReferenceContent(name: string): string { - return `See [.agents/agentuity/sdk/${name}/AGENTS.md](../../.agents/agentuity/sdk/${name}/AGENTS.md) for Agentuity ${name} development guidelines. -`; -} - -/** - * Writes AGENTS.md documentation files to the appropriate locations in a project. - * - * This function generates and writes AGENTS.md files to: - * - node_modules/@agentuity/cli/AGENTS.md (CLI documentation - full content) - * - .agents/agentuity/sdk/[type]/AGENTS.md (Full content for agent, api, web) - * - src/agent/AGENTS.md (Reference file pointing to .agents/) - * - src/api/AGENTS.md (Reference file pointing to .agents/) - * - src/web/AGENTS.md (Reference file pointing to .agents/) - * - * @param rootDir - The root directory of the project - * @param options - Options for controlling write behavior - */ -export async function writeAgentsDocs( - rootDir: string, - options: WriteAgentsDocsOptions = {} -): Promise { - const { onlyIfMissing = false } = options; - - const ensure = async (dir: string, fileName: string, content: string) => { - if (!existsSync(dir)) return; - const filePath = join(dir, fileName); - if (onlyIfMissing && existsSync(filePath)) return; - await Bun.write(filePath, content); - }; - - const ensureWithCreate = async (dir: string, fileName: string, content: string) => { - await mkdir(dir, { recursive: true }); - const filePath = join(dir, fileName); - if (onlyIfMissing && existsSync(filePath)) return; - await Bun.write(filePath, content); - }; - - // Generate and write AGENTS.md for the CLI (in node_modules) - await ensure( - join(rootDir, 'node_modules', '@agentuity', 'cli'), - 'AGENTS.md', - generateCLIPrompt() - ); - - // Write full content to .agents/agentuity/sdk/[type]/AGENTS.md - await ensureWithCreate( - join(rootDir, '.agents', 'agentuity', 'sdk', 'agent'), - 'AGENTS.md', - generateAgentPrompt() - ); - await ensureWithCreate( - join(rootDir, '.agents', 'agentuity', 'sdk', 'api'), - 'AGENTS.md', - generateAPIPrompt() - ); - await ensureWithCreate( - join(rootDir, '.agents', 'agentuity', 'sdk', 'web'), - 'AGENTS.md', - generateWebPrompt() - ); - - // Write reference files to src/[type]/AGENTS.md (pointing to .agents/) - await ensure(join(rootDir, 'src', 'agent'), 'AGENTS.md', generateReferenceContent('agent')); - await ensure(join(rootDir, 'src', 'api'), 'AGENTS.md', generateReferenceContent('api')); - await ensure(join(rootDir, 'src', 'web'), 'AGENTS.md', generateReferenceContent('web')); -} diff --git a/packages/cli/src/cmd/ai/prompt/agent.md b/packages/cli/src/cmd/ai/prompt/agent.md deleted file mode 100644 index 254960930..000000000 --- a/packages/cli/src/cmd/ai/prompt/agent.md +++ /dev/null @@ -1,305 +0,0 @@ -# Agents Folder Guide - -This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory. - -## Generated Types - -The `src/generated/` folder contains auto-generated TypeScript files: - -- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types -- `app.ts` - Application entry point (regenerated on every build) - -**Important:** Never edit files in `src/generated/` - they are overwritten on every build. - -Import generated types in your agents: - -```typescript -import type { HelloInput, HelloOutput } from '../generated/registry'; -``` - -## Directory Structure - -Each agent folder must contain: - -- **agent.ts** (required) - Agent definition with schema and handler - -Example structure: - -``` -src/agent/ -├── hello/ -│ └── agent.ts -├── process-data/ -│ └── agent.ts -└── (generated files in src/generated/) -``` - -**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details. - -## Creating an Agent - -### Basic Agent (agent.ts) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ - name: s.string(), - age: s.number(), - }), - output: s.string(), - }, - handler: async (ctx, input) => { - // Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, -}); - -export default agent; -``` - -### Agent with Lifecycle (setup/shutdown) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('lifecycle-agent', { - description: 'Agent with setup and shutdown', - schema: { - input: s.object({ message: s.string() }), - output: s.object({ result: s.string() }), - }, - setup: async (app) => { - // Initialize resources (runs once on startup) - // app contains: appName, version, startedAt, config - return { - agentId: `agent-${Math.random().toString(36).substr(2, 9)}`, - connectionPool: ['conn-1', 'conn-2'], - }; - }, - handler: async (ctx, input) => { - // Access setup config via ctx.config (fully typed) - ctx.logger.info('Agent ID:', ctx.config.agentId); - ctx.logger.info('Connections:', ctx.config.connectionPool); - return { result: `Processed: ${input.message}` }; - }, - shutdown: async (app, config) => { - // Cleanup resources (runs on shutdown) - console.log('Shutting down agent:', config.agentId); - }, -}); - -export default agent; -``` - -### Agent with Event Listeners - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('event-agent', { - schema: { - input: s.object({ data: s.string() }), - output: s.string(), - }, - handler: async (ctx, input) => { - return `Processed: ${input.data}`; - }, -}); - -agent.addEventListener('started', (eventName, agent, ctx) => { - ctx.logger.info('Agent started'); -}); - -agent.addEventListener('completed', (eventName, agent, ctx) => { - ctx.logger.info('Agent completed'); -}); - -agent.addEventListener('errored', (eventName, agent, ctx, error) => { - ctx.logger.error('Agent errored:', error); -}); - -export default agent; -``` - -## Agent Context (ctx) - -The handler receives a context object with: - -- **ctx.app** - Application state (appName, version, startedAt, config from createApp) -- **ctx.config** - Agent-specific config (from setup return value, fully typed) -- **ctx.logger** - Structured logger (info, warn, error, debug, trace) -- **ctx.tracer** - OpenTelemetry tracer for custom spans -- **ctx.sessionId** - Unique session identifier -- **ctx.kv** - Key-value storage -- **ctx.vector** - Vector storage for embeddings -- **ctx.stream** - Stream storage for real-time data -- **ctx.state** - In-memory request-scoped state (Map) -- **ctx.thread** - Thread information for multi-turn conversations -- **ctx.session** - Session information -- **ctx.waitUntil** - Schedule background tasks - -## Examples - -### Using Key-Value Storage - -```typescript -handler: async (ctx, input) => { - await ctx.kv.set('users', 'user:123', { name: 'Alice', age: 30 }); - const result = await ctx.kv.get('users', 'user:123'); - await ctx.kv.delete('users', 'user:123'); - const keys = await ctx.kv.getKeys('users'); - return result.exists ? result.data : null; -}; -``` - -### Using Vector Storage - -```typescript -handler: async (ctx, input) => { - await ctx.vector.upsert('docs', [ - { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } }, - ]); - const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - return results; -}; -``` - -### Using Streams - -```typescript -handler: async (ctx, input) => { - const stream = await ctx.stream.create('agent-logs'); - await ctx.stream.write(stream.id, 'Processing step 1'); - await ctx.stream.write(stream.id, 'Processing step 2'); - return { streamId: stream.id }; -}; -``` - -### Background Tasks with waitUntil - -```typescript -handler: async (ctx, input) => { - // Schedule background work that continues after response - ctx.waitUntil(async () => { - await ctx.kv.set('state', 'processed', Date.now()); - ctx.logger.info('Background task complete'); - }); - - return { status: 'processing' }; -}; -``` - -### Calling Another Agent - -```typescript -// Import the agent directly -import otherAgent from '../other-agent/agent'; - -handler: async (ctx, input) => { - const result = await otherAgent.run({ data: input.value }); - return `Other agent returned: ${result}`; -}; -``` - -## Subagents (Nested Agents) - -Agents can have subagents organized one level deep. This is useful for grouping related functionality. - -### Directory Structure for Subagents - -``` -src/agent/ -└── team/ # Parent agent - ├── agent.ts # Parent agent - ├── members/ # Subagent - │ └── agent.ts - └── tasks/ # Subagent - └── agent.ts -``` - -### Parent Agent - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const agent = createAgent('team', { - description: 'Team Manager', - schema: { - input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }), - output: s.object({ - message: s.string(), - timestamp: s.string(), - }), - }, - handler: async (ctx, { action }) => { - return { - message: 'Team parent agent - manages members and tasks', - timestamp: new Date().toISOString(), - }; - }, -}); - -export default agent; -``` - -### Subagent (Accessing Parent) - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import parentAgent from '../agent'; - -const agent = createAgent('team.members', { - description: 'Members Subagent', - schema: { - input: s.object({ - action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]), - name: s.optional(s.string()), - }), - output: s.object({ - members: s.array(s.string()), - parentInfo: s.optional(s.string()), - }), - }, - handler: async (ctx, { action, name }) => { - // Call parent agent directly - const parentResult = await parentAgent.run({ action: 'info' }); - const parentInfo = `Parent says: ${parentResult.message}`; - - let members = ['Alice', 'Bob']; - if (action === 'add' && name) { - members.push(name); - } - - return { members, parentInfo }; - }, -}); - -export default agent; -``` - -### Key Points About Subagents - -- **One level deep**: Only one level of nesting is supported (no nested subagents) -- **Access parent**: Import and call parent agents directly -- **Agent names**: Subagents have dotted names like `"team.members"` -- **Shared context**: Subagents share the same app context (kv, logger, etc.) - -## Rules - -- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`) -- **agent.ts** must export default the agent instance -- The first argument to `createAgent()` is the agent name (must match folder structure) -- Input/output schemas are enforced with @agentuity/schema validation -- Setup return value type automatically flows to ctx.config (fully typed) -- Use ctx.logger for logging, not console.log -- Import agents directly to call them (recommended approach) -- Subagents are one level deep only (team/members/, not team/members/subagent/) diff --git a/packages/cli/src/cmd/ai/prompt/agent.ts b/packages/cli/src/cmd/ai/prompt/agent.ts deleted file mode 100644 index 7bdfcae20..000000000 --- a/packages/cli/src/cmd/ai/prompt/agent.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createSubcommand } from '../../../types'; -import type { CommandContext } from '../../../types'; -import { getCommand } from '../../../command-prefix'; -import { appendHashComment } from './version'; -import agentPromptContent from './agent.md' with { type: 'text' }; - -export const agentSubcommand = createSubcommand({ - name: 'agent', - description: 'Generate a comprehensive prompt for LLM agents for the agents folder', - tags: ['read-only', 'fast'], - idempotent: true, - examples: [{ command: getCommand('prompt agent'), description: 'Run agent command' }], - async handler(_ctx: CommandContext) { - const prompt = generateLLMPrompt(); - console.log(prompt); - }, -}); - -/** - * Get the raw prompt content without hash. - */ -export function getPromptContent(): string { - return agentPromptContent; -} - -/** - * Generate the agent prompt with hash comment. - */ -export function generateLLMPrompt(): string { - return appendHashComment(agentPromptContent); -} diff --git a/packages/cli/src/cmd/ai/prompt/index.ts b/packages/cli/src/cmd/ai/prompt/index.ts index 62ba2df60..0f033f64a 100644 --- a/packages/cli/src/cmd/ai/prompt/index.ts +++ b/packages/cli/src/cmd/ai/prompt/index.ts @@ -1,27 +1,22 @@ import { createCommand } from '../../../types'; import { llmSubcommand } from './llm'; import { apiSubcommand } from './api'; -import { agentSubcommand } from './agent'; import { webSubcommand } from './web'; import { getCommand } from '../../../command-prefix'; export const promptCommand = createCommand({ name: 'prompt', - description: 'Generate prompts for LLMs and agents', + description: 'Generate prompts for LLMs', tags: ['read-only', 'fast'], examples: [ { command: getCommand('ai prompt llm'), description: 'Generate LLM-specific prompt' }, - { - command: getCommand('ai prompt agent'), - description: 'Generate LLM-specific prompt for Agents', - }, { command: getCommand('ai prompt api'), description: 'Generate LLM-specific prompt for APIs', }, { command: getCommand('ai prompt web'), description: 'Generate LLM-specific prompt for Web' }, ], - subcommands: [agentSubcommand, webSubcommand, llmSubcommand, apiSubcommand], + subcommands: [webSubcommand, llmSubcommand, apiSubcommand], }); export default promptCommand; diff --git a/packages/cli/src/cmd/build/adapters/generic.ts b/packages/cli/src/cmd/build/adapters/generic.ts new file mode 100644 index 000000000..7e75473a4 --- /dev/null +++ b/packages/cli/src/cmd/build/adapters/generic.ts @@ -0,0 +1,239 @@ +/** + * Generic build adapter. + * + * Handles any JS framework by: + * 1. Installing dependencies + * 2. Running the project's build script + * 3. Copying the build output to the output directory + * + * This is the fallback for frameworks without a specific adapter, + * and is also the base logic that specific adapters build on. + */ + +import { basename, join, resolve, relative } from 'node:path'; +import { cpSync, existsSync, mkdirSync, readdirSync } from 'node:fs'; +import type { BuildAdapter, BuildAdapterOptions, BuildResult } from './types'; +import { getRunCommand } from '../detect/util'; + +/** + * Run a shell command and return exit code. + */ +async function runCommand( + cmd: string[], + cwd: string, + env?: Record +): Promise<{ exitCode: number; stdout: string; stderr: string }> { + const proc = Bun.spawn(cmd, { + cwd, + env: { ...process.env, ...env }, + stdout: 'pipe', + stderr: 'pipe', + }); + + const [stdout, stderr] = await Promise.all([ + new Response(proc.stdout).text(), + new Response(proc.stderr).text(), + ]); + + await proc.exited; + + return { + exitCode: proc.exitCode ?? 1, + stdout, + stderr, + }; +} + +/** + * Install dependencies using the detected package manager. + */ +export async function installDependencies( + projectDir: string, + packageManager: string, + logger: { debug: (...args: unknown[]) => void } +): Promise { + let cmd: string[]; + switch (packageManager) { + case 'bun': + cmd = ['bun', 'install']; + break; + case 'pnpm': + cmd = ['pnpm', 'install', '--frozen-lockfile']; + break; + case 'yarn': + cmd = ['yarn', 'install', '--frozen-lockfile']; + break; + default: + cmd = ['npm', 'ci']; + break; + } + + logger.debug(`Installing dependencies with: ${cmd.join(' ')}`); + + const result = await runCommand(cmd, projectDir); + if (result.exitCode !== 0) { + throw new Error( + `Dependency installation failed (exit ${result.exitCode}):\n${result.stderr}` + ); + } +} + +/** + * Run the framework's build command. + */ +export async function runBuildCommand( + projectDir: string, + buildCommand: string, + packageManager: string, + buildEnv?: Record, + logger?: { debug: (...args: unknown[]) => void } +): Promise<{ stdout: string; stderr: string }> { + // If it's a package.json script name, use the package manager's run command + // If it contains spaces or special chars, it's likely a direct command + const isScriptName = /^[a-zA-Z0-9_:-]+$/.test(buildCommand); + + let cmd: string[]; + if (isScriptName && buildCommand !== '__agentuity_internal__') { + const runCmd = getRunCommand(packageManager as 'bun' | 'npm' | 'pnpm' | 'yarn'); + cmd = runCmd.split(' ').concat(buildCommand); + } else { + cmd = ['sh', '-c', buildCommand]; + } + + logger?.debug(`Running build command: ${cmd.join(' ')}`); + + const result = await runCommand(cmd, projectDir, buildEnv); + if (result.exitCode !== 0) { + throw new Error(`Build failed (exit ${result.exitCode}):\n${result.stderr || result.stdout}`); + } + + return { stdout: result.stdout, stderr: result.stderr }; +} + +export const genericAdapter: BuildAdapter = { + name: 'generic', + + async build(options: BuildAdapterOptions): Promise { + const { projectDir, framework, outputDir, logger } = options; + const started = Date.now(); + const logs: string[] = []; + + // Step 1: Install dependencies + logger.debug('Installing dependencies...'); + const installStart = Date.now(); + await installDependencies(projectDir, framework.packageManager, logger); + logs.push(`✓ Dependencies installed in ${Date.now() - installStart}ms`); + + // Step 2: Run the build command + if (framework.buildCommand && framework.buildCommand !== '__agentuity_internal__') { + logger.debug(`Running build: ${framework.buildCommand}`); + const buildStart = Date.now(); + await runBuildCommand( + projectDir, + framework.buildCommand, + framework.packageManager, + framework.buildEnv, + logger + ); + logs.push(`✓ Build completed in ${Date.now() - buildStart}ms`); + } + + // Step 3: Copy build output to output directory + const buildOutputPath = resolve(projectDir, framework.buildOutput); + const resolvedOutputDir = resolve(outputDir); + + // Copy build output to the output directory when they differ. + // When buildOutput is '.' (project root), the output dir is a subdirectory + // of the source, so we iterate entries to avoid cpSync's self-copy check. + const shouldCopy = existsSync(buildOutputPath) && buildOutputPath !== resolvedOutputDir; + + if (shouldCopy) { + logger.debug(`Copying build output from ${buildOutputPath} to ${resolvedOutputDir}`); + mkdirSync(resolvedOutputDir, { recursive: true }); + + // Skip directories that shouldn't be deployed + const skipEntries = new Set([ + 'node_modules', + '.git', + '.env', + basename(resolvedOutputDir), // e.g., '.agentuity' + ]); + + const entries = readdirSync(buildOutputPath); + for (const entry of entries) { + if (skipEntries.has(entry)) continue; + const srcPath = join(buildOutputPath, entry); + const dstPath = join(resolvedOutputDir, entry); + cpSync(srcPath, dstPath, { recursive: true }); + } + } else { + // Ensure output dir exists even when we skip the copy + mkdirSync(resolvedOutputDir, { recursive: true }); + } + + // Step 4: Determine start command — inject static file server if none exists + let { startCommand, serverEntry } = framework; + + if (!startCommand) { + // No start command (static-only build) — inject a minimal file server + const { injectStaticServer } = await import('./static-server'); + const injected = injectStaticServer(outputDir); + startCommand = injected.startCommand; + serverEntry = injected.serverEntry; + logs.push('✓ Injected static file server (no start script found)'); + } + + // Step 5: Copy package.json and node_modules for runtime + const pkgJsonSrc = join(projectDir, 'package.json'); + const pkgJsonDst = join(outputDir, 'package.json'); + if (existsSync(pkgJsonSrc) && !existsSync(pkgJsonDst)) { + cpSync(pkgJsonSrc, pkgJsonDst); + } + + const nodeModulesSrc = join(projectDir, 'node_modules'); + const nodeModulesDst = join(outputDir, 'node_modules'); + if (existsSync(nodeModulesSrc) && !existsSync(nodeModulesDst)) { + logger.debug('Copying node_modules for runtime dependencies...'); + cpSync(nodeModulesSrc, nodeModulesDst, { recursive: true }); + } + + // Step 6: Resolve static asset directory for CDN upload + // staticDir is relative to the project root (set by framework detection). + // If it matches buildOutput, the files are already in outputDir from the copy. + // Otherwise, copy the static assets into the output so deploy can find them. + let resolvedStaticDir: string | undefined; + + if (framework.staticDir) { + const staticSrcPath = resolve(projectDir, framework.staticDir); + const buildOutputPath = resolve(projectDir, framework.buildOutput); + + // Check if the static dir is inside the build output (already copied) + if (staticSrcPath.startsWith(buildOutputPath + '/') || staticSrcPath === buildOutputPath) { + // Static assets are within the copied build output + const relativeToOutput = relative(buildOutputPath, staticSrcPath); + resolvedStaticDir = relativeToOutput + ? join(resolvedOutputDir, relativeToOutput) + : resolvedOutputDir; + } else if (existsSync(staticSrcPath)) { + // Static assets are outside the build output — copy them into the output + const staticDstPath = join(resolvedOutputDir, framework.staticDir); + logger.debug(`Copying static assets from ${staticSrcPath} to ${staticDstPath}`); + mkdirSync(staticDstPath, { recursive: true }); + cpSync(staticSrcPath, staticDstPath, { recursive: true }); + resolvedStaticDir = staticDstPath; + logs.push(`✓ Copied static assets from ${framework.staticDir}`); + } + } + + return { + outputDir, + startCommand, + serverEntry, + staticDir: + resolvedStaticDir && existsSync(resolvedStaticDir) ? resolvedStaticDir : undefined, + port: framework.port, + duration: Date.now() - started, + logs, + }; + }, +}; diff --git a/packages/cli/src/cmd/build/adapters/index.ts b/packages/cli/src/cmd/build/adapters/index.ts new file mode 100644 index 000000000..f38fd596a --- /dev/null +++ b/packages/cli/src/cmd/build/adapters/index.ts @@ -0,0 +1,30 @@ +/** + * Build Adapter Registry + * + * Maps detected framework names to their build adapters. + * Specific adapters handle framework-specific concerns (e.g., Next.js standalone mode). + * Frameworks without a specific adapter fall through to the generic adapter. + */ + +import type { BuildAdapter } from './types'; +import { genericAdapter } from './generic'; +import { nextjsAdapter } from './nextjs'; + +/** + * Registry of framework-specific build adapters. + * Frameworks not in this map use the generic adapter. + */ +const adapters: Record = { + nextjs: nextjsAdapter, +}; + +/** + * Get the build adapter for a detected framework. + * Falls back to the generic adapter if no specific one exists. + */ +export function getAdapter(frameworkName: string): BuildAdapter { + return adapters[frameworkName] ?? genericAdapter; +} + +// Re-export types +export type { BuildAdapter, BuildAdapterOptions, BuildResult } from './types'; diff --git a/packages/cli/src/cmd/build/adapters/nextjs.ts b/packages/cli/src/cmd/build/adapters/nextjs.ts new file mode 100644 index 000000000..44c5d89ca --- /dev/null +++ b/packages/cli/src/cmd/build/adapters/nextjs.ts @@ -0,0 +1,146 @@ +/** + * Next.js build adapter. + * + * Handles Next.js-specific build concerns: + * 1. Ensures standalone output mode is configured + * 2. Copies the standalone directory + static assets to output + * 3. Sets up the correct start command + */ + +import { join } from 'node:path'; +import { cpSync, existsSync, mkdirSync, readFileSync } from 'node:fs'; +import type { BuildAdapter, BuildAdapterOptions, BuildResult } from './types'; +import { installDependencies, runBuildCommand } from './generic'; + +/** + * Ensure next.config has output: 'standalone'. + * + * Rather than modifying the user's config file, we set the NEXT_OUTPUT env var + * which can be read in next.config.js, or we check if standalone is already configured. + * As a fallback, we also set the experimental config via env. + */ +function getNextBuildEnv(): Record { + return { + // Signal to the build that we want standalone output + NEXT_PRIVATE_STANDALONE: 'true', + }; +} + +export const nextjsAdapter: BuildAdapter = { + name: 'nextjs', + + async build(options: BuildAdapterOptions): Promise { + const { projectDir, framework, outputDir, logger } = options; + const started = Date.now(); + const logs: string[] = []; + + // Step 1: Install dependencies + logger.debug('Installing dependencies...'); + const installStart = Date.now(); + await installDependencies(projectDir, framework.packageManager, logger); + logs.push(`✓ Dependencies installed in ${Date.now() - installStart}ms`); + + // Step 2: Check if standalone mode is configured + const nextConfigPath = await findNextConfig(projectDir); + let standaloneConfigured = false; + if (nextConfigPath) { + const content = readFileSync(nextConfigPath, 'utf-8'); + standaloneConfigured = + content.includes("'standalone'") || content.includes('"standalone"'); + } + + if (!standaloneConfigured) { + logger.debug( + 'Standalone output not detected in next.config — setting NEXT_PRIVATE_STANDALONE=true' + ); + } + + // Step 3: Run the build with standalone env + const buildEnv = { + ...framework.buildEnv, + ...getNextBuildEnv(), + }; + + logger.debug(`Running Next.js build: ${framework.buildCommand}`); + const buildStart = Date.now(); + await runBuildCommand( + projectDir, + framework.buildCommand, + framework.packageManager, + buildEnv, + logger + ); + logs.push(`✓ Next.js build completed in ${Date.now() - buildStart}ms`); + + // Step 4: Package the standalone output + mkdirSync(outputDir, { recursive: true }); + + const standalonePath = join(projectDir, '.next', 'standalone'); + const staticPath = join(projectDir, '.next', 'static'); + const publicPath = join(projectDir, 'public'); + + if (existsSync(standalonePath)) { + // Copy standalone server + logger.debug('Copying standalone server...'); + cpSync(standalonePath, outputDir, { recursive: true }); + + // Copy static assets into .next/static within the output + if (existsSync(staticPath)) { + const staticDst = join(outputDir, '.next', 'static'); + mkdirSync(staticDst, { recursive: true }); + cpSync(staticPath, staticDst, { recursive: true }); + } + + // Copy public assets + if (existsSync(publicPath)) { + const publicDst = join(outputDir, 'public'); + mkdirSync(publicDst, { recursive: true }); + cpSync(publicPath, publicDst, { recursive: true }); + } + + logs.push('✓ Standalone output packaged'); + } else { + // Fallback: copy the whole .next directory + logger.debug('No standalone output found — copying full .next directory'); + const nextDst = join(outputDir, '.next'); + cpSync(join(projectDir, '.next'), nextDst, { recursive: true }); + + // Copy package.json and node_modules + cpSync(join(projectDir, 'package.json'), join(outputDir, 'package.json')); + if (existsSync(join(projectDir, 'node_modules'))) { + cpSync(join(projectDir, 'node_modules'), join(outputDir, 'node_modules'), { + recursive: true, + }); + } + + logs.push('⚠ No standalone output — using full build (consider enabling standalone mode)'); + } + + // Determine start command based on what we have + const hasStandalone = existsSync(join(outputDir, 'server.js')); + const startCommand = hasStandalone ? 'node server.js' : 'node node_modules/.bin/next start'; + + return { + outputDir, + startCommand, + serverEntry: hasStandalone ? 'server.js' : undefined, + staticDir: existsSync(join(outputDir, '.next', 'static')) + ? join(outputDir, '.next', 'static') + : undefined, + port: framework.port ?? 3000, + duration: Date.now() - started, + logs, + }; + }, +}; + +async function findNextConfig(projectDir: string): Promise { + const candidates = ['next.config.js', 'next.config.mjs', 'next.config.ts', 'next.config.cjs']; + + for (const name of candidates) { + const path = join(projectDir, name); + if (existsSync(path)) return path; + } + + return null; +} diff --git a/packages/cli/src/cmd/build/adapters/static-server.ts b/packages/cli/src/cmd/build/adapters/static-server.ts new file mode 100644 index 000000000..4cd9e64ad --- /dev/null +++ b/packages/cli/src/cmd/build/adapters/static-server.ts @@ -0,0 +1,143 @@ +/** + * Static file server injector. + * + * When a framework has no start command (e.g., static-only builds from + * Vite SPA, Gatsby, Eleventy), this module injects a minimal file server + * so there's always a valid start command in launch.json. + * + * The server is a small Node.js http script that: + * - Serves files from the build output directory + * - Returns index.html for non-file routes (SPA support) + * - Sets appropriate cache headers + */ + +import { join } from 'node:path'; +import { writeFileSync, mkdirSync } from 'node:fs'; + +/** + * The static server script, inlined as a string. + * Uses Bun.serve which is available in the deployment runtime. + * Falls back to a Node.js http server if Bun is not available. + */ +const STATIC_SERVER_SCRIPT = `#!/usr/bin/env node +/** + * Minimal static file server — auto-generated by Agentuity build. + * Serves files from the current directory with SPA fallback. + */ +const path = require('path'); +const fs = require('fs'); +const http = require('http'); + +const PORT = parseInt(process.env.PORT || '3000', 10); +const ROOT = __dirname; + +const MIME_TYPES = { + '.html': 'text/html', + '.js': 'application/javascript', + '.css': 'text/css', + '.json': 'application/json', + '.png': 'image/png', + '.jpg': 'image/jpeg', + '.jpeg': 'image/jpeg', + '.gif': 'image/gif', + '.svg': 'image/svg+xml', + '.ico': 'image/x-icon', + '.webp': 'image/webp', + '.avif': 'image/avif', + '.woff': 'font/woff', + '.woff2': 'font/woff2', + '.ttf': 'font/ttf', + '.otf': 'font/otf', + '.map': 'application/json', + '.txt': 'text/plain', + '.xml': 'application/xml', + '.webmanifest': 'application/manifest+json', +}; + +function getMimeType(filePath) { + const ext = path.extname(filePath).toLowerCase(); + return MIME_TYPES[ext] || 'application/octet-stream'; +} + +function isImmutableAsset(filePath) { + // Hashed assets from bundlers (e.g., main-abc123.js) + return /\\.[a-f0-9]{8,}\\./i.test(filePath); +} + +const server = http.createServer((req, res) => { + const url = new URL(req.url, \`http://localhost:\${PORT}\`); + let filePath = path.join(ROOT, url.pathname); + + // Security: prevent directory traversal + if (!filePath.startsWith(ROOT)) { + res.writeHead(403); + res.end('Forbidden'); + return; + } + + // Try to serve the exact file + if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) { + const content = fs.readFileSync(filePath); + const mime = getMimeType(filePath); + const headers = { 'Content-Type': mime }; + + // Immutable caching for hashed assets + if (isImmutableAsset(filePath)) { + headers['Cache-Control'] = 'public, max-age=31536000, immutable'; + } else { + headers['Cache-Control'] = 'public, max-age=0, must-revalidate'; + } + + res.writeHead(200, headers); + res.end(content); + return; + } + + // Try index.html in the directory + if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) { + const indexPath = path.join(filePath, 'index.html'); + if (fs.existsSync(indexPath)) { + const content = fs.readFileSync(indexPath); + res.writeHead(200, { 'Content-Type': 'text/html', 'Cache-Control': 'public, max-age=0, must-revalidate' }); + res.end(content); + return; + } + } + + // SPA fallback: serve root index.html for non-file routes + const indexPath = path.join(ROOT, 'index.html'); + if (fs.existsSync(indexPath)) { + const content = fs.readFileSync(indexPath); + res.writeHead(200, { 'Content-Type': 'text/html', 'Cache-Control': 'public, max-age=0, must-revalidate' }); + res.end(content); + return; + } + + res.writeHead(404); + res.end('Not Found'); +}); + +server.listen(PORT, () => { + console.log(\`Static server listening on port \${PORT}\`); +}); +`; + +/** + * Inject a static file server into the build output directory. + * + * @param outputDir - Absolute path to the build output + * @returns The start command for the injected server + */ +export function injectStaticServer(outputDir: string): { + startCommand: string; + serverEntry: string; +} { + mkdirSync(outputDir, { recursive: true }); + const serverPath = join(outputDir, '_serve.js'); + writeFileSync(serverPath, STATIC_SERVER_SCRIPT, 'utf-8'); + + return { + startCommand: 'node _serve.js', + serverEntry: '_serve.js', + }; +} diff --git a/packages/cli/src/cmd/build/adapters/types.ts b/packages/cli/src/cmd/build/adapters/types.ts new file mode 100644 index 000000000..6240fce6a --- /dev/null +++ b/packages/cli/src/cmd/build/adapters/types.ts @@ -0,0 +1,93 @@ +/** + * Build adapter types. + * + * Adapters know how to build a specific framework and package the result. + * They receive a DetectedFramework and produce a BuildResult. + */ + +import type { DetectedFramework, PackageJsonData } from '../detect/types'; +import type { Logger, DeployOptions } from '../../../types'; +import type { BuildReportCollector } from '../../../build-report'; + +/** + * Result of a successful build. + */ +export interface BuildResult { + /** Absolute path to the build output directory */ + outputDir: string; + + /** The start command to run the application */ + startCommand?: string; + + /** Server entrypoint file (relative to outputDir) */ + serverEntry?: string; + + /** Static/CDN assets directory (absolute path), for CDN upload enumeration */ + staticDir?: string; + + /** Port the app listens on */ + port?: number; + + /** Build duration in milliseconds */ + duration: number; + + /** Human-readable build log lines */ + logs: string[]; +} + +/** + * Options passed to a build adapter. + */ +export interface BuildAdapterOptions { + /** Absolute path to the project root */ + projectDir: string; + + /** Detected framework info */ + framework: DetectedFramework; + + /** Parsed package.json */ + packageJson: PackageJsonData; + + /** Absolute path to write build output */ + outputDir: string; + + /** Logger instance */ + logger: Logger; + + /** Build report collector for structured error reporting */ + collector?: BuildReportCollector; + + /** Development mode (less minification, inline sourcemaps) */ + dev?: boolean; + + /** Project ID (for Agentuity metadata) */ + projectId?: string; + + /** Org ID (for Agentuity metadata) */ + orgId?: string; + + /** Region (for Agentuity metadata) */ + region?: string; + + /** Deployment ID (for Agentuity metadata) */ + deploymentId?: string; + + /** Deployment options from CLI (git info, trigger, etc.) */ + deploymentOptions?: DeployOptions; + + /** Deployment config from agentuity.json (resources, mode, dependencies, domains) */ + deploymentConfig?: Record; +} + +/** + * A build adapter that knows how to build a specific framework. + */ +export interface BuildAdapter { + /** Framework this adapter handles */ + name: string; + + /** + * Run the build for this framework. + */ + build(options: BuildAdapterOptions): Promise; +} diff --git a/packages/cli/src/cmd/build/app-router-detector.ts b/packages/cli/src/cmd/build/app-router-detector.ts deleted file mode 100644 index 396074d95..000000000 --- a/packages/cli/src/cmd/build/app-router-detector.ts +++ /dev/null @@ -1,320 +0,0 @@ -/** - * App Router Detector - * - * Parses the user's `src/app.ts` to detect whether they pass a `router` property - * to `createApp()`. If detected, resolves the router variable(s) to their import - * sources and mount paths. - * - * Uses TypeScript's compiler API to reliably detect the pattern, consistent with - * the lifecycle generator approach. - */ - -import ts from 'typescript'; -import { join, dirname, resolve } from 'node:path'; -import { statSync } from 'node:fs'; -import type { Logger } from '../../types'; - -/** - * A resolved mount point from `createApp({ router })`. - */ -export interface DetectedRouteMount { - /** Mount path (e.g., '/api', '/api/v1') */ - path: string; - /** Absolute file path of the router module */ - routerFile: string; -} - -/** - * Result of detecting explicit router usage in app.ts. - */ -export interface AppRouterDetection { - /** Whether `createApp({ router })` was found */ - detected: boolean; - /** Resolved mount points with their router files */ - mounts: DetectedRouteMount[]; -} - -/** - * Resolve an import path to an actual file on disk. - * Tries the path as-is, then with common extensions. - */ -async function resolveImportFile(fromDir: string, importPath: string): Promise { - if (!importPath.startsWith('.') && !importPath.startsWith('/')) { - return null; // Package import — can't resolve - } - - const basePath = resolve(fromDir, importPath); - const extensions = ['.ts', '.tsx', '/index.ts', '/index.tsx']; - - const baseFile = Bun.file(basePath); - if (await baseFile.exists()) { - try { - if (statSync(basePath).isFile()) return basePath; - } catch { - // ignore - } - } - - for (const ext of extensions) { - const candidate = basePath + ext; - if (await Bun.file(candidate).exists()) { - return candidate; - } - } - - return null; -} - -/** - * A router mount extracted from the AST before file resolution. - */ -interface RawMount { - path: string; - varName: string; -} - -/** - * Extract router mounts from a createApp() call using TypeScript's AST. - * Returns null if no router property found. - */ -function extractRouterMounts(sourceFile: ts.SourceFile): RawMount[] | null { - let result: RawMount[] | null = null; - - function getStringLiteral(node: ts.Expression): string | null { - if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) { - return node.text; - } - return null; - } - - function extractMountFromObject(obj: ts.ObjectLiteralExpression): RawMount | null { - let path: string | undefined; - let varName: string | undefined; - - for (const prop of obj.properties) { - if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) continue; - - if (prop.name.text === 'path') { - path = getStringLiteral(prop.initializer) ?? undefined; - } - if (prop.name.text === 'router') { - if (ts.isIdentifier(prop.initializer)) { - varName = prop.initializer.text; - } - } - } - - // Also handle shorthand: { path: '/v1', router } where router is shorthand - for (const prop of obj.properties) { - if (ts.isShorthandPropertyAssignment(prop) && prop.name.text === 'router') { - varName = prop.name.text; - } - } - - return path && varName ? { path, varName } : null; - } - - function processRouterValue(value: ts.Expression): RawMount[] | null { - // Form 1: Identifier → createApp({ router: myRouter }) - if (ts.isIdentifier(value)) { - return [{ path: '/api', varName: value.text }]; - } - - // Form 2: Object → createApp({ router: { path: '/v1', router: myRouter } }) - if (ts.isObjectLiteralExpression(value)) { - const mount = extractMountFromObject(value); - return mount ? [mount] : null; - } - - // Form 3: Array → createApp({ router: [...] }) - if (ts.isArrayLiteralExpression(value)) { - const mounts: RawMount[] = []; - for (const element of value.elements) { - if (ts.isObjectLiteralExpression(element)) { - const mount = extractMountFromObject(element); - if (mount) mounts.push(mount); - } - } - return mounts.length > 0 ? mounts : null; - } - - return null; - } - - function visit(node: ts.Node): void { - if (result) return; - - // Find createApp(...) — with or without await - let callExpr: ts.CallExpression | undefined; - - if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) { - if (node.expression.text === 'createApp') callExpr = node; - } else if (ts.isAwaitExpression(node) && ts.isCallExpression(node.expression)) { - const call = node.expression; - if (ts.isIdentifier(call.expression) && call.expression.text === 'createApp') { - callExpr = call; - } - } - - if (callExpr && callExpr.arguments.length > 0) { - const configArg = callExpr.arguments[0]; - if (configArg && ts.isObjectLiteralExpression(configArg)) { - for (const prop of configArg.properties) { - // Handle: router: value - if ( - ts.isPropertyAssignment(prop) && - ts.isIdentifier(prop.name) && - prop.name.text === 'router' - ) { - result = processRouterValue(prop.initializer); - return; - } - - // Handle shorthand: createApp({ router }) - if (ts.isShorthandPropertyAssignment(prop) && prop.name.text === 'router') { - result = [{ path: '/api', varName: 'router' }]; - return; - } - } - } - } - - ts.forEachChild(node, visit); - } - - visit(sourceFile); - return result; -} - -/** - * Build import map from the source file: variable name → import path - */ -function buildImportMap(sourceFile: ts.SourceFile): Map { - const importMap = new Map(); - - for (const stmt of sourceFile.statements) { - if (!ts.isImportDeclaration(stmt) || !ts.isStringLiteral(stmt.moduleSpecifier)) continue; - - const importPath = stmt.moduleSpecifier.text; - const clause = stmt.importClause; - if (!clause) continue; - - // Default import: import router from './api' - if (clause.name) { - importMap.set(clause.name.text, importPath); - } - - // Named imports: import { v1, v2 } from './routers' - if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) { - for (const spec of clause.namedBindings.elements) { - importMap.set(spec.name.text, importPath); - } - } - } - - return importMap; -} - -/** - * Detect whether `src/app.ts` uses `createApp({ router })`. - * - * Returns `{ detected: false, mounts: [] }` when: - * - `src/app.ts` doesn't exist - * - `createApp()` is called without a `router` property - * - Router variables can't be resolved to files - */ -export async function detectExplicitRouter( - rootDir: string, - logger: Logger -): Promise { - const noDetection: AppRouterDetection = { detected: false, mounts: [] }; - - // Look for app.ts in src/ (standard location), then root - let appFile = join(rootDir, 'src', 'app.ts'); - if (!(await Bun.file(appFile).exists())) { - appFile = join(rootDir, 'app.ts'); - if (!(await Bun.file(appFile).exists())) { - logger.trace('[router-detect] No app.ts found'); - return noDetection; - } - } - - try { - const source = await Bun.file(appFile).text(); - const appDir = dirname(appFile); - - // Quick bail-out before parsing - if (!source.includes('createApp') || !source.includes('router')) { - logger.trace('[router-detect] No createApp + router pattern found in %s', appFile); - return noDetection; - } - - // Parse with TypeScript - const sourceFile = ts.createSourceFile( - appFile, - source, - ts.ScriptTarget.Latest, - true, - ts.ScriptKind.TS - ); - - const rawMounts = extractRouterMounts(sourceFile); - if (!rawMounts || rawMounts.length === 0) { - logger.trace('[router-detect] createApp() found but no router property'); - return noDetection; - } - - // Build import map to resolve variable names to file paths - const importMap = buildImportMap(sourceFile); - - // Resolve each router variable to its file - const mounts: DetectedRouteMount[] = []; - for (const { path, varName } of rawMounts) { - const importPath = importMap.get(varName); - if (!importPath) { - logger.debug( - '[router-detect] Router variable %s is not imported — may be defined locally', - varName - ); - continue; - } - - const resolvedFile = await resolveImportFile(appDir, importPath); - if (!resolvedFile) { - logger.warn( - '[router-detect] Could not resolve import %s for router variable %s', - importPath, - varName - ); - continue; - } - - logger.trace( - '[router-detect] Found router mount: %s → %s (%s)', - path, - varName, - resolvedFile - ); - mounts.push({ path, routerFile: resolvedFile }); - } - - if (mounts.length === 0) { - logger.debug('[router-detect] Router variables found but none could be resolved to files'); - return noDetection; - } - - logger.debug( - '[router-detect] Detected %d explicit router mount(s) in %s', - mounts.length, - appFile - ); - return { detected: true, mounts }; - } catch (error) { - logger.warn( - '[router-detect] Failed to parse %s: %s', - appFile, - error instanceof Error ? error.message : String(error) - ); - return noDetection; - } -} diff --git a/packages/cli/src/cmd/build/detect/engine.ts b/packages/cli/src/cmd/build/detect/engine.ts new file mode 100644 index 000000000..482bdaa84 --- /dev/null +++ b/packages/cli/src/cmd/build/detect/engine.ts @@ -0,0 +1,111 @@ +/** + * Framework detection engine. + * + * Evaluates detector rules from the framework database against a real project + * directory. Handles three rule types: + * - matchPackage: check if package exists in dependencies/devDependencies + * - path: check if a file exists at the given path + * - path + matchContent: check if a file exists AND its content matches a regex + * + * The `every` array requires ALL rules to match. + * The `some` array requires at least ONE rule to match. + * If both are present, both conditions must be satisfied. + */ + +import { join } from 'node:path'; +import type { DetectorRule, FrameworkDefinition } from './frameworks'; +import type { PackageJsonData } from './types'; + +/** + * Check if a single detector rule matches the project. + */ +async function matchRule( + rule: DetectorRule, + projectDir: string, + pkg: PackageJsonData +): Promise { + // Package match: check dependencies and devDependencies + if (rule.matchPackage) { + const allDeps = { ...pkg.dependencies, ...pkg.devDependencies }; + return rule.matchPackage in allDeps; + } + + // File path match (with optional content matching) + if (rule.path) { + const filePath = join(projectDir, rule.path); + const file = Bun.file(filePath); + if (!(await file.exists())) return false; + + // If matchContent is specified, check file content against regex + if (rule.matchContent) { + try { + const content = await file.text(); + return new RegExp(rule.matchContent).test(content); + } catch { + return false; + } + } + + // File exists, no content check needed + return true; + } + + return false; +} + +/** + * Check if a framework definition matches the project. + */ +async function matchFramework( + fw: FrameworkDefinition, + projectDir: string, + pkg: PackageJsonData +): Promise { + const { detectors } = fw; + if (!detectors) return false; + + // Check 'every' rules: ALL must match + if (detectors.every && detectors.every.length > 0) { + for (const rule of detectors.every) { + if (!(await matchRule(rule, projectDir, pkg))) { + return false; + } + } + } + + // Check 'some' rules: at least ONE must match + if (detectors.some && detectors.some.length > 0) { + let anyMatch = false; + for (const rule of detectors.some) { + if (await matchRule(rule, projectDir, pkg)) { + anyMatch = true; + break; + } + } + if (!anyMatch) return false; + } + + // If we have 'every' rules and they all matched (and 'some' either matched or wasn't present), pass + // If we only have 'some' rules and one matched, pass + return true; +} + +/** + * Run detection against the framework database. + * Returns the first matching framework definition, or null. + * + * The framework list is evaluated in order — more specific frameworks + * should be listed before generic ones. + */ +export async function detectFromDatabase( + projectDir: string, + pkg: PackageJsonData, + frameworkList: FrameworkDefinition[] +): Promise { + for (const fw of frameworkList) { + if (await matchFramework(fw, projectDir, pkg)) { + return fw; + } + } + return null; +} diff --git a/packages/cli/src/cmd/build/detect/frameworks.ts b/packages/cli/src/cmd/build/detect/frameworks.ts new file mode 100644 index 000000000..5f42a715c --- /dev/null +++ b/packages/cli/src/cmd/build/detect/frameworks.ts @@ -0,0 +1,335 @@ +/** + * Framework detection database. + * + * Package detection rules (which npm packages and config files identify each + * framework) were informed by the @vercel/frameworks package (Apache-2.0, + * Copyright 2017 Vercel Inc, github.com/vercel/vercel/tree/main/packages/frameworks). + * + * All Vercel-specific properties (logos, CDN URLs, runtime config, routing + * rules, deploy targets) have been stripped. Only generic framework facts + * remain: package names, config filenames, default build commands, and output + * directories as documented by each framework's own docs. + * + * Framework entries are ordered by specificity — more specific frameworks + * (e.g., SvelteKit) should be listed before generic ones (e.g., Vite). + */ + +// ─── Types ─────────────────────────────────────────────────────────────────── + +export interface DetectorRule { + /** Match a package in dependencies or devDependencies */ + matchPackage?: string; + /** Match a file path (relative to project root) */ + path?: string; + /** Regex pattern to match against file content (requires `path`) */ + matchContent?: string; +} + +export interface FrameworkDefinition { + /** Human-readable name */ + name: string; + /** Unique slug identifier */ + slug: string; + /** Default build command (null = no build step) */ + buildCommand: string | null; + /** Default output directory for static assets */ + outputDirectory: string | null; + /** + * Static/CDN asset directory, relative to the project root. + * + * Points to the directory containing files suitable for CDN upload + * (JS bundles, CSS, images, fonts, etc.) after the build runs. + * + * - `null` means the entire outputDirectory IS the static output + * (pure static-site generators, SPAs) — resolved to outputDirectory. + * - A string path (e.g., `.next/static`, `.output/public`) is resolved + * relative to the project root, since some frameworks put static + * assets outside their main output directory. + * - `undefined` (omitted) means no known static asset directory. + */ + staticDir?: string | null; + /** Environment variable prefix for browser-inlined values */ + envPrefix?: string; + /** + * Detection rules. + * - `every`: ALL must match for the framework to be detected. + * - `some`: at least ONE must match (in addition to all `every` rules). + */ + detectors: { + every?: DetectorRule[]; + some?: DetectorRule[]; + }; +} + +// ─── Framework Database ────────────────────────────────────────────────────── + +/** + * JS/TS framework definitions for detection. + * + * Order matters — first match wins. More specific frameworks come first, + * generic catch-alls (Vite, Parcel) come last. + */ +export const frameworkDefinitions: FrameworkDefinition[] = [ + // ── Meta-frameworks (most specific, check first) ── + + { + name: 'Next.js', + slug: 'nextjs', + buildCommand: 'next build', + outputDirectory: null, // Dynamic — reads from next.config + staticDir: '.next/static', // Relative to project root (adapter handles standalone copy) + envPrefix: 'NEXT_PUBLIC_', + detectors: { + every: [{ matchPackage: 'next' }], + }, + }, + { + name: 'Nuxt', + slug: 'nuxt', + buildCommand: 'nuxt build', + outputDirectory: 'dist', + staticDir: '.output/public', // Nitro output; static assets served from here + envPrefix: 'NUXT_ENV_', + detectors: { + some: [ + { matchPackage: 'nuxt' }, + { matchPackage: 'nuxt3' }, + { matchPackage: 'nuxt-edge' }, + { matchPackage: 'nuxt-nightly' }, + ], + }, + }, + { + name: 'Remix', + slug: 'remix', + buildCommand: 'remix build', + outputDirectory: 'public', + staticDir: 'public/build', // Built browser bundles + detectors: { + some: [ + { matchPackage: '@remix-run/dev' }, + { path: 'remix.config.js' }, + { path: 'remix.config.mjs' }, + ], + }, + }, + { + name: 'React Router', + slug: 'react-router', + buildCommand: 'react-router build', + outputDirectory: 'build', + staticDir: 'build/client', // Client-side assets + detectors: { + some: [ + { path: 'react-router.config.js' }, + { path: 'react-router.config.ts' }, + { path: 'vite.config.js', matchContent: '@react-router/dev/vite' }, + { path: 'vite.config.ts', matchContent: '@react-router/dev/vite' }, + ], + }, + }, + { + name: 'SvelteKit', + slug: 'sveltekit', + buildCommand: 'vite build', + outputDirectory: 'public', + staticDir: 'build/client', // adapter-node client assets + detectors: { + every: [ + { + path: 'package.json', + matchContent: '"(dev)?(d|D)ependencies":\\s*{[^}]*"@sveltejs\\/kit":\\s*".+?"[^}]*}', + }, + ], + }, + }, + { + name: 'Astro', + slug: 'astro', + buildCommand: 'astro build', + outputDirectory: 'dist', + staticDir: null, // Entire dist/ is static (SSG default); dist/client/ for SSR + envPrefix: 'PUBLIC_', + detectors: { + every: [{ matchPackage: 'astro' }], + }, + }, + { + name: 'SolidStart', + slug: 'solidstart', + buildCommand: 'vinxi build', + outputDirectory: '.output', + staticDir: '.output/public', // Nitro-based static assets + envPrefix: 'VITE_', + detectors: { + every: [{ matchPackage: 'solid-js' }, { matchPackage: '@solidjs/start' }], + }, + }, + { + name: 'TanStack Start', + slug: 'tanstack-start', + buildCommand: 'vite build', + outputDirectory: 'dist', + staticDir: '.output/public', // Nitro-based; similar to Nuxt/SolidStart + detectors: { + every: [{ matchPackage: '@tanstack/router-plugin' }, { matchPackage: 'nitro' }], + }, + }, + { + name: 'RedwoodJS', + slug: 'redwoodjs', + buildCommand: 'yarn rw build', + outputDirectory: null, // Dynamic — depends on target + staticDir: 'web/dist', // Redwood web-side build output + envPrefix: 'REDWOOD_ENV_', + detectors: { + every: [{ matchPackage: '@redwoodjs/core' }], + }, + }, + + // ── Static site generators ── + + { + name: 'Gatsby.js', + slug: 'gatsby', + buildCommand: 'gatsby build', + outputDirectory: 'public', + staticDir: null, // Entire public/ is static output + envPrefix: 'GATSBY_', + detectors: { + every: [{ matchPackage: 'gatsby' }], + }, + }, + { + name: 'Eleventy', + slug: 'eleventy', + buildCommand: 'npx @11ty/eleventy', + outputDirectory: '_site', + staticDir: null, // Entire _site/ is static output + detectors: { + every: [{ matchPackage: '@11ty/eleventy' }], + }, + }, + { + name: 'VitePress', + slug: 'vitepress', + buildCommand: 'vitepress build docs', + outputDirectory: 'docs/.vitepress/dist', + staticDir: null, // Entire output is static + detectors: { + every: [{ matchPackage: 'vitepress' }], + }, + }, + { + name: 'VuePress', + slug: 'vuepress', + buildCommand: 'vuepress build src', + outputDirectory: 'src/.vuepress/dist', + staticDir: null, // Entire output is static + detectors: { + every: [{ matchPackage: 'vuepress' }], + }, + }, + { + name: 'Docusaurus', + slug: 'docusaurus', + buildCommand: 'docusaurus build', + outputDirectory: 'build', + staticDir: null, // Entire build/ is static output + detectors: { + some: [{ matchPackage: '@docusaurus/core' }], + }, + }, + { + name: 'Hexo', + slug: 'hexo', + buildCommand: 'hexo generate', + outputDirectory: 'public', + staticDir: null, // Entire public/ is static output + detectors: { + every: [{ matchPackage: 'hexo' }], + }, + }, + + // ── UI frameworks (with CLI build) ── + + { + name: 'Angular', + slug: 'angular', + buildCommand: 'ng build', + outputDirectory: 'dist', + staticDir: null, // Entire dist/ is static output (browser subfolder in v17+) + detectors: { + every: [{ matchPackage: '@angular/cli' }], + }, + }, + { + name: 'Vue.js', + slug: 'vue', + buildCommand: 'vue-cli-service build', + outputDirectory: 'dist', + staticDir: null, // Entire dist/ is static output + envPrefix: 'VUE_APP_', + detectors: { + every: [{ matchPackage: '@vue/cli-service' }], + }, + }, + { + name: 'Create React App', + slug: 'create-react-app', + buildCommand: 'react-scripts build', + outputDirectory: 'build', + staticDir: null, // Entire build/ is static output + envPrefix: 'REACT_APP_', + detectors: { + some: [{ matchPackage: 'react-scripts' }, { matchPackage: 'react-dev-utils' }], + }, + }, + { + name: 'Preact', + slug: 'preact', + buildCommand: 'preact build', + outputDirectory: 'build', + staticDir: null, // Entire build/ is static output + detectors: { + every: [{ matchPackage: 'preact-cli' }], + }, + }, + + // ── Server frameworks (no default build step) ── + + { + name: 'Nitro', + slug: 'nitro', + buildCommand: 'nitro build', + outputDirectory: 'dist', + staticDir: '.output/public', // Nitro static assets + detectors: { + some: [{ matchPackage: 'nitropack' }, { matchPackage: 'nitro' }], + }, + }, + + // ── Generic bundlers (least specific, check last) ── + + { + name: 'Vite', + slug: 'vite', + buildCommand: 'vite build', + outputDirectory: 'dist', + staticDir: null, // Entire dist/ is static output + envPrefix: 'VITE_', + detectors: { + every: [{ matchPackage: 'vite' }], + }, + }, + { + name: 'Parcel', + slug: 'parcel', + buildCommand: 'parcel build', + outputDirectory: 'dist', + staticDir: null, // Entire dist/ is static output + detectors: { + every: [{ matchPackage: 'parcel' }], + }, + }, +]; diff --git a/packages/cli/src/cmd/build/detect/generic.ts b/packages/cli/src/cmd/build/detect/generic.ts new file mode 100644 index 000000000..66acc5886 --- /dev/null +++ b/packages/cli/src/cmd/build/detect/generic.ts @@ -0,0 +1,71 @@ +/** + * Generic JS/TS project detector (fallback). + * + * This is the catch-all detector for projects that don't match any specific + * framework. It looks for: + * 1. A package.json with a "build" script + * 2. A "start" script or "main" field for the start command + * + * If neither is found, detection fails — we can't build what we don't understand. + */ + +import { join } from 'node:path'; +import type { FrameworkDetector, DetectedFramework } from './types'; +import { detectPackageManager } from './util'; + +export const genericDetector: FrameworkDetector = { + name: 'generic', + priority: 100, // Lowest priority — true fallback + + async detect(projectDir, pkg): Promise { + // Must have a package.json with something we can work with + if (!pkg.scripts?.build && !pkg.scripts?.start && !pkg.main) { + return null; + } + + const pm = await detectPackageManager(projectDir); + + // Determine build command + const buildCommand = pkg.scripts?.build ?? null; + if (!buildCommand) { + // No build script — might be a runtime-only project + // We'll still try if there's a start command + } + + // Determine start command + let startCommand: string | undefined; + let serverEntry: string | undefined; + + if (pkg.scripts?.start) { + startCommand = pkg.scripts.start; + } else if (pkg.main) { + // Check if main entry exists + const mainFile = Bun.file(join(projectDir, pkg.main)); + if (await mainFile.exists()) { + const runtime = pm === 'bun' ? 'bun' : 'node'; + startCommand = `${runtime} ${pkg.main}`; + serverEntry = pkg.main; + } + } + + // If no build and no start, we can't do anything + if (!buildCommand && !startCommand) { + return null; + } + + // Detect runtime from engines field or package manager + const runtime = pkg.engines?.bun ? 'bun' : pm === 'bun' ? 'bun' : 'node'; + + return { + name: 'generic', + runtime, + packageManager: pm, + buildCommand: buildCommand ?? 'echo "No build step"', + buildOutput: '.', // Generic — build output could be anywhere + startCommand, + serverEntry, + port: 3000, + confidence: 'low', + }; + }, +}; diff --git a/packages/cli/src/cmd/build/detect/index.ts b/packages/cli/src/cmd/build/detect/index.ts new file mode 100644 index 000000000..0e6080f66 --- /dev/null +++ b/packages/cli/src/cmd/build/detect/index.ts @@ -0,0 +1,122 @@ +/** + * Framework Detection + * + * Examines a project directory and determines which JS framework is being used. + * Returns a DetectedFramework with all the information needed to build and launch. + * + * Detection strategy: + * 1. Run the framework database engine (rules derived from @vercel/frameworks) + * 2. Fall back to generic detection (package.json scripts) + */ + +import type { DetectedFramework, PackageJsonData } from './types'; +import { readPackageJson, detectPackageManager } from './util'; +import { frameworkDefinitions } from './frameworks'; +import { detectFromDatabase } from './engine'; +import { genericDetector } from './generic'; + +/** + * Convert a matched framework definition + project context into a DetectedFramework. + */ +async function frameworkDefToDetected( + slug: string, + _name: string, + buildCommand: string | null, + outputDirectory: string | null, + staticDirectory: string | null | undefined, + projectDir: string, + pkg: PackageJsonData +): Promise { + const pm = await detectPackageManager(projectDir); + + // Use the project's build script if available, otherwise the framework default + const resolvedBuildCommand = pkg.scripts?.build ?? buildCommand ?? 'npm run build'; + + // Resolve output directory — use framework default or '.' + const resolvedOutputDir = outputDirectory ?? '.'; + + // Resolve static asset directory (relative to project root): + // - explicit string: path relative to project root (e.g., '.next/static', '.output/public') + // - null: the entire output directory is static (SSGs, SPAs) — use outputDirectory + // - undefined: no static assets known for this framework + const resolvedStaticDir = + staticDirectory === null + ? resolvedOutputDir // null means entire output IS the static dir + : (staticDirectory ?? undefined); + + return { + name: slug, + runtime: 'node', + packageManager: pm, + buildCommand: resolvedBuildCommand, + buildOutput: resolvedOutputDir, + staticDir: resolvedStaticDir, + confidence: 'high', + }; +} + +/** + * Detect the framework used by a project. + * + * @param projectDir - Absolute path to the project root + * @returns DetectedFramework or null if nothing could be detected + */ +export async function detectFramework(projectDir: string): Promise { + const pkg = await readPackageJson(projectDir); + if (!pkg) return null; + + // 1. Run through the framework database + const match = await detectFromDatabase(projectDir, pkg, frameworkDefinitions); + if (match) { + return frameworkDefToDetected( + match.slug, + match.name, + match.buildCommand, + match.outputDirectory, + match.staticDir, + projectDir, + pkg + ); + } + + // 2. Generic fallback + return genericDetector.detect(projectDir, pkg); +} + +/** + * Detect the framework, but also return the parsed package.json for reuse. + */ +export async function detectFrameworkWithPackageJson( + projectDir: string +): Promise<{ framework: DetectedFramework | null; packageJson: PackageJsonData | null }> { + const pkg = await readPackageJson(projectDir); + if (!pkg) return { framework: null, packageJson: null }; + + // 1. Run through the framework database + const match = await detectFromDatabase(projectDir, pkg, frameworkDefinitions); + if (match) { + const framework = await frameworkDefToDetected( + match.slug, + match.name, + match.buildCommand, + match.outputDirectory, + match.staticDir, + projectDir, + pkg + ); + return { framework, packageJson: pkg }; + } + + // 2. Generic fallback + const generic = await genericDetector.detect(projectDir, pkg); + return { framework: generic, packageJson: pkg }; +} + +// Re-export types +export type { + DetectedFramework, + FrameworkName, + PackageJsonData, + PackageManager, + RuntimeName, +} from './types'; diff --git a/packages/cli/src/cmd/build/detect/types.ts b/packages/cli/src/cmd/build/detect/types.ts new file mode 100644 index 000000000..a63bc9b5b --- /dev/null +++ b/packages/cli/src/cmd/build/detect/types.ts @@ -0,0 +1,109 @@ +/** + * Framework detection types. + * + * These types define the contract between detection, adapters, and packaging. + * The detection system identifies what JS framework a project uses, + * and adapters know how to build and launch each framework. + */ + +/** + * Framework identifier. + * + * This is a string rather than a union type because the framework database + * (derived from @vercel/frameworks) contains 25+ slugs and may grow. + * Special values: + * - 'generic' — Fallback: has package.json with build/start scripts + */ +export type FrameworkName = string; + +/** + * Runtime that executes the built application. + */ +export type RuntimeName = 'node' | 'bun'; + +/** + * Package manager detected or preferred. + */ +export type PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn'; + +/** + * Result of framework detection. + * + * This is the output of the detect phase and input to the adapter/build phase. + */ +export interface DetectedFramework { + /** Framework identifier */ + name: FrameworkName; + + /** Human-readable framework version (e.g., "15.3.0" for Next.js) */ + version?: string; + + /** Runtime that runs the production server */ + runtime: RuntimeName; + + /** Detected package manager */ + packageManager: PackageManager; + + /** The build command to execute (e.g., "next build", "vite build") */ + buildCommand: string; + + /** Directory where build output is written (relative to project root) */ + buildOutput: string; + + /** Command to start the production server (only for mode='server') */ + startCommand?: string; + + /** Server entrypoint file (relative to buildOutput) */ + serverEntry?: string; + + /** + * Static/CDN asset directory (relative to project root). + * After the build runs, this directory contains files suitable for CDN upload. + * For pure SSGs/SPAs this equals buildOutput (entire output is static). + * For SSR frameworks this is a subdirectory (e.g., `.next/static`, `.output/public`). + */ + staticDir?: string; + + /** Environment variables needed at build time */ + buildEnv?: Record; + + /** Port the app listens on (default: 3000) */ + port?: number; + + /** Detection confidence: 'high' if config file found, 'low' if inferred */ + confidence: 'high' | 'medium' | 'low'; +} + +/** + * A single framework detector. + * + * Each detector examines the project directory and returns a DetectedFramework + * if it recognizes the project, or null if it doesn't apply. + */ +export interface FrameworkDetector { + /** Framework this detector handles */ + name: FrameworkName; + + /** Priority (lower = checked first). Specific frameworks before generic. */ + priority: number; + + /** + * Examine the project and return detection result, or null if not applicable. + */ + detect(projectDir: string, packageJson: PackageJsonData): Promise; +} + +/** + * Parsed package.json data relevant to detection. + */ +export interface PackageJsonData { + name?: string; + version?: string; + scripts?: Record; + dependencies?: Record; + devDependencies?: Record; + main?: string; + module?: string; + type?: string; + engines?: Record; +} diff --git a/packages/cli/src/cmd/build/detect/util.ts b/packages/cli/src/cmd/build/detect/util.ts new file mode 100644 index 000000000..f30ac66a8 --- /dev/null +++ b/packages/cli/src/cmd/build/detect/util.ts @@ -0,0 +1,104 @@ +/** + * Detection utilities shared across framework detectors. + */ + +import { join } from 'node:path'; +import type { PackageJsonData, PackageManager } from './types'; + +/** + * Check if a file exists (any of the given names) in a directory. + * Returns the first matching filename, or null. + */ +export async function findFile(dir: string, names: string[]): Promise { + for (const name of names) { + const file = Bun.file(join(dir, name)); + if (await file.exists()) { + return name; + } + } + return null; +} + +/** + * Check if a dependency exists in package.json (dependencies or devDependencies). + */ +export function hasDependency(pkg: PackageJsonData, name: string): boolean { + return !!(pkg.dependencies?.[name] || pkg.devDependencies?.[name]); +} + +/** + * Get the version of a dependency from package.json. + * Returns the version range string, or null if not found. + */ +export function getDependencyVersion(pkg: PackageJsonData, name: string): string | null { + return pkg.dependencies?.[name] ?? pkg.devDependencies?.[name] ?? null; +} + +/** + * Check if any dependency matching a pattern exists. + */ +export function hasDependencyMatching(pkg: PackageJsonData, pattern: RegExp): boolean { + const allDeps = { ...pkg.dependencies, ...pkg.devDependencies }; + return Object.keys(allDeps).some((name) => pattern.test(name)); +} + +/** + * Detect which package manager the project uses by checking lockfiles. + */ +export async function detectPackageManager(projectDir: string): Promise { + if (await Bun.file(join(projectDir, 'bun.lockb')).exists()) return 'bun'; + if (await Bun.file(join(projectDir, 'bun.lock')).exists()) return 'bun'; + if (await Bun.file(join(projectDir, 'pnpm-lock.yaml')).exists()) return 'pnpm'; + if (await Bun.file(join(projectDir, 'yarn.lock')).exists()) return 'yarn'; + if (await Bun.file(join(projectDir, 'package-lock.json')).exists()) return 'npm'; + + // Default to bun (our preferred runtime) + return 'bun'; +} + +/** + * Get the run command prefix for a package manager. + * e.g., 'npm run', 'bun run', 'pnpm run', 'yarn' + */ +export function getRunCommand(pm: PackageManager): string { + switch (pm) { + case 'bun': + return 'bun run'; + case 'npm': + return 'npm run'; + case 'pnpm': + return 'pnpm run'; + case 'yarn': + return 'yarn'; + } +} + +/** + * Get the exec command prefix for a package manager (npx/bunx/etc.). + */ +export function getExecCommand(pm: PackageManager): string { + switch (pm) { + case 'bun': + return 'bunx'; + case 'npm': + return 'npx'; + case 'pnpm': + return 'pnpm exec'; + case 'yarn': + return 'yarn dlx'; + } +} + +/** + * Read and parse package.json from a directory. + * Returns null if not found or unparseable. + */ +export async function readPackageJson(dir: string): Promise { + const file = Bun.file(join(dir, 'package.json')); + if (!(await file.exists())) return null; + try { + return (await file.json()) as PackageJsonData; + } catch { + return null; + } +} diff --git a/packages/cli/src/cmd/build/format-schema.ts b/packages/cli/src/cmd/build/format-schema.ts deleted file mode 100644 index a433ac9f9..000000000 --- a/packages/cli/src/cmd/build/format-schema.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Simple formatter for schema code strings. - * Adds basic indentation and line breaks for readability. - */ -export function formatSchemaCode(code: string): string { - if (!code) return code; - - let indentLevel = 0; - const indentSize = 2; - const lines: string[] = []; - let currentLine = ''; - - for (let i = 0; i < code.length; i++) { - const char = code[i]; - const nextChar = code[i + 1]; - const prevChar = i > 0 ? code[i - 1] : ''; - - // Skip existing whitespace/newlines - if (char === '\n' || char === '\r' || (char === ' ' && prevChar === ' ')) { - continue; - } - - // Handle opening braces - if (char === '{') { - currentLine += char; - lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim()); - indentLevel++; - currentLine = ''; - continue; - } - - // Handle closing braces - if (char === '}') { - if (currentLine.trim()) { - lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim()); - currentLine = ''; - } - indentLevel--; - // Check if next char is closing paren - if so, put on same line - if (nextChar === ')') { - currentLine = '}'; - } else { - lines.push(' '.repeat(indentLevel * indentSize) + char); - } - continue; - } - - // Handle commas - add line break after - if (char === ',') { - currentLine += char; - lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim()); - currentLine = ''; - continue; - } - - // Accumulate characters - currentLine += char; - } - - // Add any remaining content - if (currentLine.trim()) { - lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim()); - } - - return lines.join('\n'); -} diff --git a/packages/cli/src/cmd/build/index.ts b/packages/cli/src/cmd/build/index.ts index 76b584e1e..f94b9f78b 100644 --- a/packages/cli/src/cmd/build/index.ts +++ b/packages/cli/src/cmd/build/index.ts @@ -1,13 +1,14 @@ import { z } from 'zod'; import { resolve, join, relative } from 'node:path'; import { createCommand, DeployOptionsSchema } from '../../types'; -import { viteBundle } from './vite-bundler'; import * as tui from '../../tui'; import { getCommand } from '../../command-prefix'; import { ErrorCode } from '../../errors'; import { typecheck } from './typecheck'; import { BuildReportCollector, setGlobalCollector, clearGlobalCollector } from '../../build-report'; -import { detectVersionMismatch, formatVersionMismatchWarning } from '../../utils/version-mismatch'; +import { detectFrameworkWithPackageJson } from './detect'; +import { getAdapter } from './adapters'; +import { packageBuildOutput } from './package'; const BuildResponseSchema = z.object({ success: z.boolean().describe('Whether the build succeeded'), @@ -15,6 +16,7 @@ const BuildResponseSchema = z.object({ projectName: z.string().describe('Project name'), dev: z.boolean().describe('Whether dev mode was enabled'), size: z.number().optional().describe('Build size in bytes'), + framework: z.string().optional().describe('Detected framework name'), }); const BuildOptionsSchema = z.intersection( @@ -58,6 +60,10 @@ export const command = createCommand({ const { opts, projectDir, project } = ctx; if (opts.ci) { + if (!opts.url) { + tui.fatal('--url is required when using --ci mode', ErrorCode.CONFIG_INVALID); + } + const { runCIBuild } = await import('./ci'); await runCIBuild( { @@ -95,37 +101,72 @@ export const command = createCommand({ } const absoluteProjectDir = resolve(projectDir); - - // Check for version mismatches (v1 vs v2 SDK packages) - const versionMismatch = detectVersionMismatch(absoluteProjectDir, ctx.logger); - if (versionMismatch.hasV1Packages || versionMismatch.hasMajorMismatches) { - tui.newline(); - tui.warning(formatVersionMismatchWarning(versionMismatch)); - tui.newline(); - } - const outDir = opts.outdir ? resolve(opts.outdir) : join(absoluteProjectDir, '.agentuity'); try { const rel = outDir.startsWith(absoluteProjectDir) ? relative(absoluteProjectDir, outDir) : outDir; - tui.info(`Building project with Vite at ${absoluteProjectDir} to ${rel}`); - await viteBundle({ - rootDir: absoluteProjectDir, - dev: opts.dev || false, + // Step 1: Detect framework + tui.info('Detecting framework...'); + const { framework, packageJson } = + await detectFrameworkWithPackageJson(absoluteProjectDir); + + if (!framework) { + collector.addGeneralError( + 'build', + 'Could not detect a JS framework. Ensure package.json exists with a build script.', + 'BUILD010' + ); + if (opts.reportFile) { + await collector.forceWrite(); + } + clearGlobalCollector(); + tui.fatal( + 'Could not detect a JS framework. Ensure package.json exists with a build script.', + ErrorCode.BUILD_FAILED + ); + } + + const frameworkLabel = framework.version + ? `${framework.name} v${framework.version}` + : framework.name; + tui.success(`Detected ${tui.bold(frameworkLabel)} (${framework.runtime})`); + + // Step 2: Get the build adapter for this framework + const adapter = getAdapter(framework.name); + tui.info(`Building with ${adapter.name} adapter to ${rel}`); + + // Step 3: Run the build + const endBuildDiagnostic = collector.startDiagnostic('build'); + const buildResult = await adapter.build({ + projectDir: absoluteProjectDir, + framework, + packageJson: packageJson!, + outputDir: outDir, + logger: ctx.logger, + collector, + dev: opts.dev, projectId: project?.projectId, orgId: project?.orgId, region: project?.region ?? 'local', - logger: ctx.logger, - collector, }); + endBuildDiagnostic(); + + // Log build output + for (const line of buildResult.logs) { + tui.info(tui.muted(line)); + } + + // Step 4: Package the output with launch metadata + const packageResult = packageBuildOutput(framework, buildResult, buildResult.outputDir); + ctx.logger.debug('Launch metadata: %s', JSON.stringify(packageResult.launch, null, 2)); - // Copy profile-specific .env file AFTER bundling (bundler clears outDir first) + // Step 5: Copy profile-specific .env file AFTER building if (opts.dev && ctx.config?.name) { const envSourcePath = join(absoluteProjectDir, `.env.${ctx.config.name}`); - const envDestPath = join(outDir, '.env'); + const envDestPath = join(buildResult.outputDir, '.env'); const envFile = Bun.file(envSourcePath); if (await envFile.exists()) { @@ -136,7 +177,7 @@ export const command = createCommand({ } } - // Run TypeScript type checking after registry generation (skip in dev mode) + // Step 6: Run TypeScript type checking (skip in dev mode, skip for non-TS projects) if (!opts.dev && !opts.skipTypeCheck) { try { tui.info('Running type check...'); @@ -153,7 +194,6 @@ export const command = createCommand({ const msg = 'errors' in typeResult ? 'Fix type errors before building' : 'Build error'; - // Write report before fatal exit if (opts.reportFile) { await collector.forceWrite(); } @@ -164,7 +204,6 @@ export const command = createCommand({ const errorMsg = error instanceof Error ? error.message : String(error); collector.addGeneralError('typescript', errorMsg, 'BUILD008'); - // Write report before fatal exit if (opts.reportFile) { await collector.forceWrite(); } @@ -178,7 +217,7 @@ export const command = createCommand({ } } - tui.success('Build complete'); + tui.success(`Build complete (${frameworkLabel}, ${buildResult.duration}ms)`); // Write final report on success if (opts.reportFile) { @@ -188,9 +227,10 @@ export const command = createCommand({ return { success: true, - bundlePath: outDir, + bundlePath: buildResult.outputDir, projectName: project?.projectId || 'unknown', dev: opts.dev || false, + framework: framework.name, }; } catch (error: unknown) { // Add error to collector diff --git a/packages/cli/src/cmd/build/package/index.ts b/packages/cli/src/cmd/build/package/index.ts new file mode 100644 index 000000000..b2a49a06e --- /dev/null +++ b/packages/cli/src/cmd/build/package/index.ts @@ -0,0 +1,66 @@ +/** + * Build output packaging. + * + * After a framework adapter builds the project, the packager: + * 1. Generates launch metadata (how to start the app) + * 2. Writes a Procfile for compatibility + * 3. Optionally generates additional metadata + * + * The output is a self-contained directory ready for deployment + * as a buildpack image layer or traditional zip upload. + */ + +import { join } from 'node:path'; +import { writeFileSync } from 'node:fs'; +import type { DetectedFramework } from '../detect/types'; +import type { BuildResult } from '../adapters/types'; +import { generateLaunchMetadata, writeLaunchMetadata, type LaunchMetadata } from './launch'; + +export interface PackageResult { + /** Absolute path to the packaged output */ + outputDir: string; + + /** Launch metadata */ + launch: LaunchMetadata; + + /** Whether the output contains static assets */ + hasStaticAssets: boolean; + + /** Path to static assets (if any) */ + staticDir?: string; +} + +/** + * Package a build result into a deployment-ready directory. + */ +export function packageBuildOutput( + framework: DetectedFramework, + buildResult: BuildResult, + outputDir: string +): PackageResult { + // Generate launch metadata + const launch = generateLaunchMetadata(framework, buildResult); + + // Write launch metadata to the output directory + writeLaunchMetadata(outputDir, launch); + + // Write a .buildpack-ready marker file + const markerPath = join(outputDir, '.agentuity-build'); + const markerContent = { + version: 1, + framework: framework.name, + runtime: framework.runtime, + buildDate: new Date().toISOString(), + }; + writeFileSync(markerPath, JSON.stringify(markerContent, null, 2), 'utf-8'); + + return { + outputDir, + launch, + hasStaticAssets: !!buildResult.staticDir, + staticDir: buildResult.staticDir, + }; +} + +// Re-export +export type { LaunchMetadata, ProcessDefinition } from './launch'; diff --git a/packages/cli/src/cmd/build/package/launch.ts b/packages/cli/src/cmd/build/package/launch.ts new file mode 100644 index 000000000..db638bfcf --- /dev/null +++ b/packages/cli/src/cmd/build/package/launch.ts @@ -0,0 +1,104 @@ +/** + * Launch metadata generation for buildpack-compatible output. + * + * Generates the metadata that tells the runtime how to start the application. + * This is analogous to CNB's launch.toml / Procfile / Docker CMD. + */ + +import { join } from 'node:path'; +import { mkdirSync, writeFileSync } from 'node:fs'; +import type { BuildResult } from '../adapters/types'; +import type { DetectedFramework } from '../detect/types'; + +/** + * Process definition for the launch metadata. + */ +export interface ProcessDefinition { + /** Process type (e.g., 'web', 'worker') */ + type: string; + /** Command to execute */ + command: string; + /** Whether this is the default process */ + default: boolean; + /** Working directory (relative to app root) */ + workingDirectory?: string; +} + +/** + * Complete launch metadata written to the output directory. + */ +export interface LaunchMetadata { + /** Application processes */ + processes: ProcessDefinition[]; + /** Framework that was detected */ + framework: { + name: string; + version?: string; + }; + /** Runtime information */ + runtime: { + name: string; + port?: number; + }; + /** Build information */ + build: { + date: string; + duration: number; + }; +} + +/** + * Generate launch metadata from a build result and detected framework. + */ +export function generateLaunchMetadata( + framework: DetectedFramework, + buildResult: BuildResult +): LaunchMetadata { + const processes: ProcessDefinition[] = []; + + // Primary web process + const startCommand = buildResult.startCommand ?? framework.startCommand; + if (startCommand) { + processes.push({ + type: 'web', + command: startCommand, + default: true, + }); + } + + return { + processes, + framework: { + name: framework.name, + version: framework.version, + }, + runtime: { + name: framework.runtime, + port: buildResult.port ?? framework.port, + }, + build: { + date: new Date().toISOString(), + duration: buildResult.duration, + }, + }; +} + +/** + * Write launch metadata to the output directory. + * + * Writes both: + * - launch.json — machine-readable launch metadata + * - Procfile — simple process definition for compatibility + */ +export function writeLaunchMetadata(outputDir: string, metadata: LaunchMetadata): void { + mkdirSync(outputDir, { recursive: true }); + + // Write JSON metadata + const jsonPath = join(outputDir, 'launch.json'); + writeFileSync(jsonPath, JSON.stringify(metadata, null, 2), 'utf-8'); + + // Write Procfile for broad compatibility (Heroku, Railway, Render, etc.) + const procfilePath = join(outputDir, 'Procfile'); + const procfileLines = metadata.processes.map((p) => `${p.type}: ${p.command}`); + writeFileSync(procfilePath, procfileLines.join('\n') + '\n', 'utf-8'); +} diff --git a/packages/cli/src/cmd/build/typecheck.ts b/packages/cli/src/cmd/build/typecheck.ts index 3594d96d6..3fd64a62e 100644 --- a/packages/cli/src/cmd/build/typecheck.ts +++ b/packages/cli/src/cmd/build/typecheck.ts @@ -1,3 +1,4 @@ +import { join } from 'node:path'; import { parse, type GrammarItem } from '../../tsc-output-parser'; import { formatTypeScriptErrors, hasErrors } from '../../typescript-errors'; import type { BuildReportCollector } from '../../build-report'; @@ -73,6 +74,14 @@ function filterNodeModulesErrors(output: string): string { * @returns */ export async function typecheck(dir: string, options?: TypecheckOptions): Promise { + // Skip typecheck for projects without tsconfig.json (plain JS projects) + const tsconfigPath = join(dir, 'tsconfig.json'); + const tsconfigFile = Bun.file(tsconfigPath); + const tsconfigExists = await tsconfigFile.exists(); + if (!tsconfigExists) { + return { success: true }; + } + const { collector } = options ?? {}; const result = await Bun.$`bunx tsc --noEmit --skipLibCheck --pretty false` .cwd(dir) diff --git a/packages/cli/src/cmd/build/vite-bundler.ts b/packages/cli/src/cmd/build/vite-bundler.ts deleted file mode 100644 index 76822d474..000000000 --- a/packages/cli/src/cmd/build/vite-bundler.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Vite-based bundler - * - * Replaces the Bun bundler with Vite for client and server builds - */ - -import { join } from 'node:path'; -import { stat } from 'node:fs/promises'; -import { StructuredError } from '@agentuity/core'; -import type { Logger, DeployOptions } from '../../types'; -import { runAllBuilds } from './vite/vite-builder'; -import { checkAndUpgradeDependencies } from '../../utils/dependency-checker'; -import { checkBunVersion } from '../../utils/bun-version-checker'; -import * as tui from '../../tui'; -import type { BuildReportCollector } from '../../build-report'; - -const AppFileNotFoundError = StructuredError('AppFileNotFoundError'); -const BuildFailedError = StructuredError('BuildFailedError'); - -export interface ViteBundleOptions { - rootDir: string; - dev?: boolean; - projectId?: string; - orgId?: string; - region?: string; - deploymentId?: string; - port?: number; - logger: Logger; - deploymentOptions?: DeployOptions; - /** Deployment config from agentuity.json (resources, mode, dependencies, domains) */ - deploymentConfig?: Record; - /** Optional collector for structured error reporting */ - collector?: BuildReportCollector; -} - -/** - * Bundle the project using Vite - */ -export async function viteBundle(options: ViteBundleOptions): Promise<{ output: string[] }> { - const { - rootDir, - projectId = '', - orgId = '', - region = 'local', - deploymentId = '', - port = 3500, - logger, - deploymentOptions, - deploymentConfig, - collector, - } = options; - - const output: string[] = []; - - // Check Bun version meets minimum requirements - const versionOutput = await checkBunVersion(); - output.push(...versionOutput); - - // Verify app.ts exists - const appFile = join(rootDir, 'app.ts'); - if (!(await Bun.file(appFile).exists())) { - const errorMessage = `App file not found at expected location: ${appFile}`; - collector?.addGeneralError('build', errorMessage, 'BUILD001'); - throw new AppFileNotFoundError({ - message: errorMessage, - }); - } - - // Verify src directory exists - const srcDir = join(rootDir, 'src'); - const srcDirExists = await stat(srcDir) - .then((s) => s.isDirectory()) - .catch(() => false); - if (!srcDirExists) { - const errorMessage = `Source directory not found: ${srcDir}`; - collector?.addGeneralError('build', errorMessage, 'BUILD002'); - throw new BuildFailedError({ - message: errorMessage, - }); - } - - // Check and upgrade @agentuity/* dependencies if needed - const upgradeResult = await checkAndUpgradeDependencies(rootDir, logger); - if (upgradeResult.failed.length > 0 && process.stdin.isTTY) { - const errorMessage = `Failed to upgrade dependencies: ${upgradeResult.failed.join(', ')}`; - collector?.addGeneralError('build', errorMessage, 'BUILD003'); - throw new BuildFailedError({ - message: errorMessage, - }); - } - - try { - // Run all builds (client -> workbench -> server) - logger.debug('Starting builds...'); - - const result = await runAllBuilds({ - rootDir, - dev: options.dev || false, // Pass through dev flag for development builds - port, - projectId, - orgId, - region, - deploymentId, - logger, - deploymentOptions, - deploymentConfig, - collector, - }); - - if (result.client.included) { - output.push(tui.muted(`✓ Client built in ${result.client.duration}ms`)); - } - if (result.workbench.included) { - output.push(tui.muted(`✓ Workbench built in ${result.workbench.duration}ms`)); - } - if (result.static.included) { - output.push( - tui.muted( - `✓ ${result.static.routes} routes pre-rendered in ${result.static.duration}ms` - ) - ); - } - if (result.server.included) { - output.push(tui.muted(`✓ Server built in ${result.server.duration}ms`)); - } - - logger.debug('All builds complete'); - - return { output }; - } catch (error) { - const errorMessage = `Build failed: ${error instanceof Error ? error.message : String(error)}`; - collector?.addGeneralError('build', errorMessage, 'BUILD004'); - throw new BuildFailedError({ - message: errorMessage, - }); - } -} diff --git a/packages/cli/src/cmd/build/vite/agent-discovery.ts b/packages/cli/src/cmd/build/vite/agent-discovery.ts deleted file mode 100644 index c1eae2c54..000000000 --- a/packages/cli/src/cmd/build/vite/agent-discovery.ts +++ /dev/null @@ -1,380 +0,0 @@ -/** - * Agent Discovery — import-based - * - * Discovers agents by scanning src/agent/**\/*.ts files and importing them - * at build time. The agent instance already knows its own metadata, schemas, - * and evals — no AST parsing needed. - */ - -import { dirname, join, relative } from 'node:path'; -import type { Logger } from '../../../types'; -import { StructuredError } from '@agentuity/core'; -import { toForwardSlash } from '../../../utils/normalize-path'; - -const DuplicateEvalNameError = StructuredError('DuplicateEvalNameError')<{ - agent: string; - filename: string; -}>(); - -export interface AgentMetadata { - filename: string; - name: string; - id: string; - agentId: string; - version: string; - description?: string; - inputSchemaCode?: string; - outputSchemaCode?: string; - evals?: EvalMetadata[]; -} - -export interface EvalMetadata { - id: string; - identifier: string; - name: string; - filename: string; - version: string; - description?: string; - agentIdentifier: string; - projectId: string; -} - -/** - * Hash function for generating stable IDs - */ -function hash(...val: string[]): string { - const hasher = new Bun.CryptoHasher('sha256'); - for (const v of val) hasher.update(v); - return hasher.digest().toHex(); -} - -function hashSHA1(...val: string[]): string { - const hasher = new Bun.CryptoHasher('sha1'); - for (const v of val) hasher.update(v); - return hasher.digest().toHex(); -} - -function getAgentId( - projectId: string, - deploymentId: string, - filename: string, - version: string -): string { - return `agentid_${hashSHA1(projectId, deploymentId, filename, version)}`; -} - -function generateStableAgentId(projectId: string, name: string): string { - return `agent_${hashSHA1(projectId, name)}`.substring(0, 64); -} - -function getEvalId( - projectId: string, - deploymentId: string, - filename: string, - name: string, - version: string -): string { - return `evalid_${hashSHA1(projectId, deploymentId, filename, name, version)}`; -} - -function generateStableEvalId(projectId: string, agentId: string, name: string): string { - return `eval_${hashSHA1(projectId, agentId, name)}`.substring(0, 64); -} - -/** - * Convert a StandardSchemaV1-compatible schema to a JSON Schema string. - * Dynamically imports toJSONSchema from @agentuity/schema (available in user's project). - */ -async function schemaToJsonString( - schema: unknown, - rootDir: string, - logger: Logger -): Promise { - if (!schema) return undefined; - - try { - // Resolve @agentuity/schema from the user's project and import its public entry point. - // The CLI doesn't declare @agentuity/schema as its own dependency — it lives in the - // user's node_modules, so we resolve the path dynamically. - const schemaPackageDir = join(rootDir, 'node_modules', '@agentuity', 'schema'); - if (!(await Bun.file(join(schemaPackageDir, 'package.json')).exists())) { - logger.debug('[agent-discovery] @agentuity/schema not found in user project'); - return undefined; - } - - const { toJSONSchema } = await import(schemaPackageDir); - const jsonSchema = toJSONSchema(schema); - return JSON.stringify(jsonSchema); - } catch (error) { - logger.debug( - '[agent-discovery] Failed to convert schema to JSON Schema: %s', - error instanceof Error ? error.message : String(error) - ); - return undefined; - } -} - -/** - * Import an agent file and extract metadata from the agent instance. - */ -async function importAgentMetadata( - filePath: string, - relativeFilename: string, - rootDir: string, - projectId: string, - deploymentId: string, - logger: Logger -): Promise { - try { - const source = await Bun.file(filePath).text(); - const version = hash(source); - - // Import the agent file — Bun handles TS natively - // No source-level gate: files may re-export agents created elsewhere - const mod = await import(filePath); - const agent = mod.default; - - if (!agent?.metadata?.name) { - logger.debug('[agent-discovery] No valid agent found in %s', relativeFilename); - return null; - } - - const name = agent.metadata.name; - const description = agent.metadata.description; - const id = getAgentId(projectId, deploymentId, relativeFilename, version); - const agentId = generateStableAgentId(projectId, name); - - // Extract schemas as JSON Schema strings - const inputSchemaCode = await schemaToJsonString(agent.inputSchema, rootDir, logger); - const outputSchemaCode = await schemaToJsonString(agent.outputSchema, rootDir, logger); - - // Extract evals from agent.evals array (self-registered by createEval()) - const evals: EvalMetadata[] = []; - if (agent.evals && Array.isArray(agent.evals) && agent.evals.length > 0) { - for (const evalItem of agent.evals) { - const evalName = evalItem.metadata?.name ?? evalItem.name; - if (!evalName) continue; - - const evalDescription = evalItem.metadata?.description ?? evalItem.description; - const evalVersion = version; // same file version - const evalId = getEvalId( - projectId, - deploymentId, - relativeFilename, - evalName, - evalVersion - ); - const evalIdentifier = generateStableEvalId(projectId, agentId, evalName); - - logger.trace( - 'Found eval "%s" in %s (identifier: %s)', - evalName, - relativeFilename, - evalIdentifier - ); - - evals.push({ - id: evalId, - identifier: evalIdentifier, - name: evalName, - filename: relativeFilename, - version: evalVersion, - description: evalDescription, - agentIdentifier: agentId, - projectId, - }); - } - } - - // Also check for evals in separate eval.ts file in same directory - const agentDir = dirname(filePath); - const evalsPath = join(agentDir, 'eval.ts'); - if (await Bun.file(evalsPath).exists()) { - const evalsSource = await Bun.file(evalsPath).text(); - if (evalsSource.includes('createEval')) { - try { - await import(evalsPath); - // After importing, the evals self-register on the agent via agent.createEval() - // Re-check agent.evals for any newly registered evals - if (agent.evals && Array.isArray(agent.evals)) { - const relativeEvalsPath = toForwardSlash(relative(join(rootDir), evalsPath)); - const evalVersion = hash(evalsSource); - - for (const evalItem of agent.evals) { - const evalName = evalItem.metadata?.name ?? evalItem.name; - if (!evalName) continue; - - // Skip if already collected from agent file - if (evals.some((e) => e.name === evalName)) continue; - - const evalDescription = evalItem.metadata?.description ?? evalItem.description; - const evalId = getEvalId( - projectId, - deploymentId, - relativeEvalsPath, - evalName, - evalVersion - ); - const evalIdentifier = generateStableEvalId(projectId, agentId, evalName); - - logger.trace( - 'Found eval "%s" in eval.ts for agent %s (identifier: %s)', - evalName, - name, - evalIdentifier - ); - - evals.push({ - id: evalId, - identifier: evalIdentifier, - name: evalName, - filename: relativeEvalsPath, - version: evalVersion, - description: evalDescription, - agentIdentifier: agentId, - projectId, - }); - } - } - } catch (error) { - logger.warn( - '[agent-discovery] Failed to import evals from %s: %s', - evalsPath, - error instanceof Error ? error.message : String(error) - ); - } - } - } - - // Check for duplicate eval names across sources (agent file + eval.ts). - // Same name + same agent = same stable identifier → duplicate key error - // on the backend database. - if (evals.length > 1) { - const seen = new Map(); - for (const evalItem of evals) { - const prev = seen.get(evalItem.name); - if (prev && prev !== evalItem.filename) { - throw new DuplicateEvalNameError({ - message: - `Duplicate eval name '${evalItem.name}' for agent '${name}': ` + - `defined in both '${prev}' and '${evalItem.filename}'. ` + - 'Eval names must be unique per agent.', - agent: name, - filename: evalItem.filename, - }); - } - seen.set(evalItem.name, evalItem.filename); - } - } - - return { - filename: relativeFilename, - name, - id, - agentId, - version, - description, - inputSchemaCode, - outputSchemaCode, - evals: evals.length > 0 ? evals : undefined, - }; - } catch (error) { - const errorMsg = error instanceof Error ? error.message : String(error); - throw new Error( - `Failed to import agent at ${relativeFilename}:\n` + - ` ${errorMsg}\n\n` + - `Agent files are imported at build time to extract metadata. Code that ` + - `runs at module scope (outside of setup() or handler()) will execute ` + - `during the build — including SDK client constructors that require API ` + - `keys or environment variables.\n\n` + - `To fix this, move initialization code into setup() or handler():\n\n` + - ` // ❌ Don't do this — runs at import time:\n` + - ` const client = new OpenAI();\n` + - ` export default createAgent('my-agent', { handler: async (ctx) => { ... } });\n\n` + - ` // ✅ Do this instead — runs at startup:\n` + - ` export default createAgent('my-agent', {\n` + - ` setup: async () => ({ client: new OpenAI() }),\n` + - ` handler: async (ctx) => { const { client } = ctx.config; ... },\n` + - ` });\n\n` + - `See https://agentuity.dev/agents/creating-agents for more information.` - ); - } -} - -/** - * Discover all agents in src/agent directory. - * - * Imports each agent file at build time — the agent instance already knows - * its own metadata, schemas, and evals. No AST parsing needed. - */ -export async function discoverAgents( - srcDir: string, - projectId: string, - deploymentId: string, - logger: Logger -): Promise { - const agentsDir = join(srcDir, 'agent'); - const agents: AgentMetadata[] = []; - const rootDir = join(srcDir, '..'); - - // Scan all .ts files in agent directory - const glob = new Bun.Glob('**/*.ts'); - let files: string[]; - try { - files = await Array.fromAsync(glob.scan(agentsDir)); - } catch { - logger.trace('No agent directory found at %s', agentsDir); - return agents; - } - - // Track seen agent names to deduplicate — e.g., index.ts re-exporting agent.ts - const seenAgentNames = new Set(); - - for (const file of files) { - const filePath = join(agentsDir, file); - - // Skip eval.ts files (processed as part of agent discovery) - if (file.endsWith('/eval.ts') || file === 'eval.ts') { - continue; - } - - // Skip test files (*.test.ts, *.spec.ts) and test directories - if ( - file.startsWith('test/') || - file.includes('/test/') || - file.startsWith('__tests__/') || - file.includes('/__tests__/') || - file.endsWith('.test.ts') || - file.endsWith('.spec.ts') - ) { - continue; - } - - const relativeFilename = toForwardSlash(relative(rootDir, filePath)); - const agentMetadata = await importAgentMetadata( - filePath, - relativeFilename, - rootDir, - projectId, - deploymentId, - logger - ); - - if (agentMetadata) { - if (seenAgentNames.has(agentMetadata.name)) { - logger.trace( - 'Skipping duplicate agent %s from %s (already discovered)', - agentMetadata.name, - relativeFilename - ); - continue; - } - seenAgentNames.add(agentMetadata.name); - logger.trace('Discovered agent: %s at %s', agentMetadata.name, relativeFilename); - agents.push(agentMetadata); - } - } - - logger.debug('Discovered %d agent(s)', agents.length); - return agents; -} diff --git a/packages/cli/src/cmd/build/vite/beacon-plugin.ts b/packages/cli/src/cmd/build/vite/beacon-plugin.ts deleted file mode 100644 index fc51d9bb5..000000000 --- a/packages/cli/src/cmd/build/vite/beacon-plugin.ts +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Vite plugin to emit the analytics beacon as a hashed CDN asset - * - * This plugin: - * 1. Reads the pre-built beacon from @agentuity/frontend - * 2. Emits it as a Rollup asset with content-based hashing - * 3. Injects a `; - - // Inject before - if (html.includes('')) { - return html.replace('', `${beaconScript}`); - } - // Fallback: inject at start of body - if (html.includes(']*)>/, `${beaconScript}`); - } - - return beaconScript + html; - }, - }, - }; -} diff --git a/packages/cli/src/cmd/build/vite/browser-env-plugin.ts b/packages/cli/src/cmd/build/vite/browser-env-plugin.ts deleted file mode 100644 index ef8abac18..000000000 --- a/packages/cli/src/cmd/build/vite/browser-env-plugin.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Vite plugin to shim process.env for browser code only - * - * Replaces process.env with import.meta.env ONLY in files under src/web - * to avoid breaking server-side code that needs real process.env - */ - -import type { Plugin } from 'vite'; - -export function browserEnvPlugin(): Plugin { - return { - name: 'agentuity:browser-env', - enforce: 'pre', - - transform(code, id) { - // Only transform files in src/web (browser code) - if (!id.includes('/src/web/') && !id.includes('\\src\\web\\')) { - return null; - } - - // Replace process.env with import.meta.env for browser compatibility - const transformed = code.replace(/process\.env/g, 'import.meta.env'); - - if (transformed !== code) { - return { - code: transformed, - map: null, - }; - } - - return null; - }, - }; -} diff --git a/packages/cli/src/cmd/build/vite/bun-dev-server.ts b/packages/cli/src/cmd/build/vite/bun-dev-server.ts deleted file mode 100644 index 63be14288..000000000 --- a/packages/cli/src/cmd/build/vite/bun-dev-server.ts +++ /dev/null @@ -1,458 +0,0 @@ -/** - * Bun Dev Server - * - * Spawns Bun with --hot as a subprocess. Bun's --hot mode re-evaluates changed - * modules and hot-swaps the default export's `fetch` handler on the running - * server — no process restart, no port rebind, no dropped connections. - * - * The user's app.ts exports the result of createApp() which includes `fetch` - * and `port` properties that Bun uses to manage the server lifecycle. - * - * Key requirements for bun --hot: - * - app.ts MUST have `export default` with { fetch, port } properties - * - Without export default, Bun runs the code but never starts an HTTP server - */ - -import type { Logger } from '../../../types'; -import { getAgentEnv } from '../../../agent-detection'; -import { createServer as createNetServer } from 'node:net'; - -export interface BunDevServerOptions { - rootDir: string; - port?: number; - logger: Logger; - vitePort: number; - inspect?: boolean; - inspectWait?: boolean; - inspectBrk?: boolean; -} - -export interface BunDevServerResult { - bunServerPort: number; -} - -/** - * Check if a port is available for binding. - * Returns true if the port is free, false if in use. - */ -function isPortAvailable(port: number, host: string = '127.0.0.1'): Promise { - return new Promise((resolve) => { - const server = createNetServer(); - server.once('error', () => { - resolve(false); - }); - server.listen(port, host, () => { - server.close(() => { - resolve(true); - }); - }); - }); -} - -/** - * Kill any process listening on the specified port. - * Uses lsof on Unix systems to find and kill the process. - */ -async function killProcessOnPort( - port: number, - logger: { debug: (msg: string, ...args: unknown[]) => void } -): Promise { - if (process.platform === 'win32') { - // Windows: use netstat to find PID, then taskkill - // This is more complex and less reliable, skip for now - return false; - } - - try { - // Find PIDs listening on the port - const result = Bun.spawnSync(['lsof', '-t', '-i', `:${port}`], { - stdout: 'pipe', - stderr: 'ignore', - }); - - if (result.exitCode !== 0 || !result.stdout) { - return false; - } - - const pids = new TextDecoder() - .decode(result.stdout) - .trim() - .split('\n') - .filter((line) => line && /^\d+$/.test(line)); - - if (pids.length === 0) { - return false; - } - - // Kill each process - for (const pid of pids) { - try { - // Use SIGKILL to ensure cleanup - const killResult = Bun.spawnSync(['kill', '-9', pid], { - stdout: 'ignore', - stderr: 'ignore', - }); - if (killResult.exitCode === 0) { - logger.debug('Killed orphan process %s on port %d', pid, port); - } - } catch { - // Ignore kill errors - } - } - - // Brief pause to let the port be released - await new Promise((resolve) => setTimeout(resolve, 100)); - return true; - } catch { - return false; - } -} - -/** - * Ensure the port is available, cleaning up any orphan processes if needed. - */ -async function ensurePortAvailable( - port: number, - logger: { debug: (msg: string, ...args: unknown[]) => void } -): Promise { - const available = await isPortAvailable(port); - if (available) { - return; - } - - logger.debug('Port %d is in use, attempting to clean up orphan process...', port); - - const killed = await killProcessOnPort(port, logger); - if (killed) { - // Verify the port is now free - const nowAvailable = await isPortAvailable(port); - if (!nowAvailable) { - throw new Error( - `Port ${port} is still in use after cleanup. Another process may be holding it.\n` + - `Run 'lsof -i :${port}' to identify the process.` - ); - } - logger.debug('Port %d is now available', port); - } else { - throw new Error( - `Port ${port} is already in use.\n` + - `Run 'lsof -i :${port}' to identify the process, or kill it manually.` - ); - } -} - -/** - * Validation result for app.ts entry point. - */ -interface AppValidationResult { - /** Whether app.ts has a default export */ - hasDefaultExport: boolean; - /** Whether app.ts calls createApp() */ - hasCreateApp: boolean; - /** Whether it's the v1 pattern (destructuring without export) */ - isV1Pattern: boolean; - /** Any validation hints to show */ - hints: string[]; -} - -/** - * Validate app.ts for common issues that prevent Bun --hot from starting. - * - * Bun --hot requires `export default { fetch, port }` to start a server. - * Common mistakes: - * - No `export default` (v1 pattern: destructuring result without exporting) - * - Calling createApp() but not exporting it - * - * @internal Exported for testing only - */ -export async function validateAppTs(appPath: string): Promise { - const result: AppValidationResult = { - hasDefaultExport: false, - hasCreateApp: false, - isV1Pattern: false, - hints: [], - }; - - const file = Bun.file(appPath); - if (!(await file.exists())) { - return result; - } - - const content = await file.text(); - - // Strip comments to avoid false positives from commented-out code - // Simple approach: remove single-line and multi-line comments - const codeWithoutComments = content - .replace(/\/\/.*$/gm, '') // Single-line comments - .replace(/\/\*[\s\S]*?\*\//g, ''); // Multi-line comments - - // Check for default export patterns (only in actual code, not comments) - // Matches: export default createApp(...), export default await createApp(...), - // export default { fetch, port }, const { ... } = await createApp(...) then export default result - result.hasDefaultExport = /\bexport\s+default\b/.test(codeWithoutComments); - - // Check for createApp call - result.hasCreateApp = /\bcreateApp\s*\(/.test(content); - - // Detect v1 pattern: destructuring createApp result without export default - // e.g., const { server, logger } = await createApp({...}); - const hasDestructuring = /const\s*\{[^}]*\}\s*=\s*(?:await\s+)?createApp/.test(content); - if (hasDestructuring && !result.hasDefaultExport) { - result.isV1Pattern = true; - result.hints.push( - 'app.ts calls createApp() but does not export it. Bun --hot requires `export default` to start a server.', - '', - 'Fix: Change your app.ts to export the createApp() result:', - '', - ' import { createApp } from "@agentuity/runtime";', - ' import agents from "@agent/index";', - '', - ' export default createApp({', - ' agents,', - ' router: { path: "/api", router: api },', - ' });', - '', - 'Or if you need the logger:', - '', - ' const app = await createApp({ agents });', - ' app.logger.debug("Running %s", app.server.url);', - ' export default app;' - ); - } - - // Check for missing createApp entirely - if (!result.hasCreateApp && !content.includes('Bun.serve')) { - result.hints.push( - 'app.ts does not call createApp(). This is required for Agentuity apps.', - '', - 'Example:', - '', - ' import { createApp } from "@agentuity/runtime";', - ' export default createApp({ agents });' - ); - } - - return result; -} - -/** - * Build a detailed error message with validation hints and captured output. - * - * @internal Exported for testing only - */ -export function buildStartupErrorMessage( - port: number, - timeoutMs: number, - stderr: string, - validation: AppValidationResult, - stdout?: string -): string { - const lines: string[] = []; - - lines.push(`Bun server failed to start on port ${port} after ${timeoutMs}ms`); - lines.push(''); - - // Show captured stderr if any - if (stderr.trim()) { - lines.push('Bun stderr:'); - lines.push(''); - // Indent stderr lines for readability - for (const line of stderr.trim().split('\n').slice(0, 20)) { - lines.push(` ${line}`); - } - if (stderr.split('\n').length > 20) { - lines.push(' ... (truncated)'); - } - lines.push(''); - } - - // Show captured stdout if any (runtime errors, uncaught exceptions, etc.) - if (stdout?.trim()) { - lines.push('Bun stdout:'); - lines.push(''); - for (const line of stdout.trim().split('\n').slice(0, 20)) { - lines.push(` ${line}`); - } - if (stdout.split('\n').length > 20) { - lines.push(' ... (truncated)'); - } - lines.push(''); - } - - // Show validation hints - if (validation.hints.length > 0) { - lines.push('Possible issue:'); - lines.push(''); - for (const hint of validation.hints) { - lines.push(` ${hint}`); - } - lines.push(''); - } - - // Generic troubleshooting if no specific hints - if (validation.hints.length === 0) { - lines.push('Troubleshooting:'); - lines.push(''); - lines.push(' 1. Check app.ts exports `export default createApp({...})`'); - lines.push(' 2. Check for TypeScript/syntax errors in your code'); - lines.push(` 3. Check if port ${port} is already in use: lsof -i :${port}`); - lines.push(' 4. Try running manually: bun run --hot app.ts'); - lines.push(''); - } - - return lines.join('\n'); -} - -/** - * Start Bun dev server with --hot (Vite asset server must already be running). - * - * Uses `bun --hot` so Bun watches all imported files and hot-swaps the fetch - * handler on the running server. The server stays up — only the changed modules - * are re-evaluated. - */ -export async function startBunDevServer(options: BunDevServerOptions): Promise { - const { rootDir, port = 3500, logger, vitePort, inspect, inspectWait, inspectBrk } = options; - - logger.debug('Starting Bun dev server (Vite already running on port %d)...', vitePort); - - const appPath = `${rootDir}/app.ts`; - - const appFile = Bun.file(appPath); - if (!(await appFile.exists())) { - throw new Error(`App entry not found at ${appPath}.`); - } - - // Pre-validate app.ts for common issues - const validation = await validateAppTs(appPath); - if (validation.isV1Pattern) { - logger.warn(''); - logger.warn('⚠️ app.ts may have a v1-style pattern that prevents Bun --hot from starting.'); - for (const hint of validation.hints) { - logger.warn(' %s', hint); - } - logger.warn(''); - } - - // Ensure the port is available, cleaning up any orphan processes - await ensurePortAvailable(port, logger); - - process.env.PORT = String(port); - - const args: string[] = ['bun']; - - // --hot: in-process hot reload — re-evaluates changed modules and swaps - // the default export's fetch handler without restarting the process. - // --no-clear-screen: don't clear terminal on reload (CLI manages output) - args.push('--hot', '--no-clear-screen'); - - if (inspectBrk) { - args.push('--inspect-brk'); - } else if (inspectWait) { - args.push('--inspect-wait'); - } else if (inspect) { - args.push('--inspect'); - } - - args.push('run', appPath); - - logger.debug('Spawning bun subprocess: %s', args.join(' ')); - - // Capture stderr for error reporting while still showing it in real-time - const stderrChunks: string[] = []; - const stdoutChunks: string[] = []; - - // Helper to read a stream, capture output, and forward to parent - const captureStream = async ( - stream: ReadableStream, - chunks: string[], - output: typeof process.stdout | typeof process.stderr - ) => { - const reader = stream.getReader(); - try { - while (true) { - const { done, value } = await reader.read(); - if (done) break; - const str = new TextDecoder().decode(value); - chunks.push(str); - output.write(value); // Forward to parent for real-time visibility - } - } catch { - // Stream may be closed unexpectedly when process exits - } - }; - - const bunProcess = Bun.spawn(args, { - cwd: rootDir, - stdout: 'pipe', - stderr: 'pipe', - env: { - ...process.env, - ...getAgentEnv(), - PORT: String(port), - FORCE_COLOR: '1', // Enable colors even though stdout is piped - }, - }); - - // Start capturing streams in the background (don't await, we need to check server readiness) - if (bunProcess.stdout) { - captureStream(bunProcess.stdout, stdoutChunks, process.stdout).catch(() => {}); - } - if (bunProcess.stderr) { - captureStream(bunProcess.stderr, stderrChunks, process.stderr).catch(() => {}); - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (globalThis as any).__AGENTUITY_BUN_SUBPROCESS__ = bunProcess; - - // Wait for server to start listening - const maxRetries = 50; - const retryDelay = 100; - const timeoutMs = maxRetries * retryDelay; - let serverReady = false; - - for (let i = 0; i < maxRetries; i++) { - if (bunProcess.exitCode !== null) { - // Brief pause to let stream capture finish flushing - await new Promise((resolve) => setTimeout(resolve, 50)); - const stderr = stderrChunks.join(''); - const stdout = stdoutChunks.join(''); - const output = [stderr, stdout].filter(Boolean).join('\n'); - throw new Error( - `Bun subprocess exited with code ${bunProcess.exitCode} during startup\n\n${output}` - ); - } - - try { - await fetch(`http://127.0.0.1:${port}/`, { - method: 'HEAD', - signal: AbortSignal.timeout(1000), - }); - serverReady = true; - break; - } catch { - // Not ready yet - } - await new Promise((resolve) => setTimeout(resolve, retryDelay)); - } - - if (!serverReady) { - try { - bunProcess.kill(); - } catch (err) { - logger.debug('Error killing subprocess during startup failure: %s', err); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (globalThis as any).__AGENTUITY_BUN_SUBPROCESS__ = undefined; - - // Brief pause to let stream capture finish flushing - await new Promise((resolve) => setTimeout(resolve, 50)); - const stderr = stderrChunks.join(''); - const stdout = stdoutChunks.join(''); - throw new Error(buildStartupErrorMessage(port, timeoutMs, stderr, validation, stdout)); - } - - logger.debug(`Bun dev server started on http://127.0.0.1:${port} (--hot mode)`); - logger.debug(`Proxied to Vite:${vitePort}`); - - return { bunServerPort: port }; -} diff --git a/packages/cli/src/cmd/build/vite/bundle-files.ts b/packages/cli/src/cmd/build/vite/bundle-files.ts deleted file mode 100644 index 8fee83d5a..000000000 --- a/packages/cli/src/cmd/build/vite/bundle-files.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { join, dirname } from 'node:path'; -import { mkdirSync, cpSync } from 'node:fs'; -import type { Logger } from '../../../types'; - -/** Paths that are always excluded regardless of .gitignore */ -function isHardExcluded(match: string): boolean { - return ( - match.startsWith('.agentuity/') || - match.startsWith('.agentuity\\') || - match.startsWith('node_modules/') || - match.startsWith('node_modules\\') || - match.startsWith('.git/') || - match.startsWith('.git\\') || - match === '.env' || - match.startsWith('.env.') - ); -} - -/** - * Use `git check-ignore --stdin` to filter out files that are ignored by .gitignore. - * Returns the subset of `files` that are NOT gitignored. - * Falls back to returning all files if not in a git repo or git is unavailable. - */ -async function filterGitIgnored( - rootDir: string, - files: string[], - logger: Logger -): Promise { - if (files.length === 0) return files; - - try { - // Check if we're in a git repo - const gitCheck = Bun.spawnSync(['git', 'rev-parse', '--git-dir'], { - cwd: rootDir, - stderr: 'pipe', - }); - if (gitCheck.exitCode !== 0) { - logger.debug('Not a git repository, skipping .gitignore filtering'); - return files; - } - - // Use git check-ignore to find which files are ignored - const proc = Bun.spawn(['git', 'check-ignore', '--stdin'], { - cwd: rootDir, - stdin: 'pipe', - stdout: 'pipe', - stderr: 'pipe', - }); - - // Write all file paths to stdin, one per line - proc.stdin.write(files.join('\n')); - proc.stdin.end(); - - const output = await new Response(proc.stdout).text(); - await proc.exited; - - // git check-ignore exits 0 if some files are ignored, 1 if none are ignored. - // Both are fine. Other exit codes mean an error. - - const ignoredFiles = output - .split('\n') - .map((line) => line.trim()) - .filter(Boolean); - const ignoredSet = new Set(ignoredFiles); - - if (ignoredSet.size > 0) { - logger.debug(`Filtered ${ignoredSet.size} gitignored file(s) from bundle`); - } - - return files.filter((f) => !ignoredSet.has(f)); - } catch { - logger.debug('git not available, skipping .gitignore filtering'); - return files; - } -} - -/** - * Copy files matching glob patterns into the build output directory. - * Files are copied preserving their relative directory structure from the project root. - * This runs BEFORE the build steps so that build output can overwrite any conflicts. - * - * Filtering layers: - * 1. Hard exclusions: .agentuity/, node_modules/, .git/, .env* (always skipped) - * 2. .gitignore: files ignored by git are skipped (falls back if not a git repo) - */ -export async function copyBundleFiles( - rootDir: string, - outDir: string, - patterns: string[], - logger: Logger -): Promise { - let totalCopied = 0; - - // Ensure output directory exists - mkdirSync(outDir, { recursive: true }); - - for (const pattern of patterns) { - const glob = new Bun.Glob(pattern); - const candidates: string[] = []; - - // Phase 1: Glob match + hard exclusions - for await (const match of glob.scan({ cwd: rootDir, onlyFiles: true })) { - if (!isHardExcluded(match)) { - candidates.push(match); - } - } - - // Phase 2: Filter out gitignored files - const filesToCopy = await filterGitIgnored(rootDir, candidates, logger); - - // Phase 3: Copy files - for (const match of filesToCopy) { - const src = join(rootDir, match); - const dest = join(outDir, match); - try { - mkdirSync(dirname(dest), { recursive: true }); - cpSync(src, dest); - } catch (err) { - throw new Error( - `Failed to copy bundle file '${match}' (pattern '${pattern}'): ${(err as Error).message}` - ); - } - } - - if (filesToCopy.length === 0) { - logger.warn(`Bundle pattern '${pattern}' matched no files`); - } else { - logger.debug(`Bundle pattern '${pattern}': ${filesToCopy.length} file(s)`); - } - - totalCopied += filesToCopy.length; - } - - return totalCopied; -} diff --git a/packages/cli/src/cmd/build/vite/config-loader.ts b/packages/cli/src/cmd/build/vite/config-loader.ts deleted file mode 100644 index 7052899fb..000000000 --- a/packages/cli/src/cmd/build/vite/config-loader.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Config loader for v2 - * - * In v2, all runtime config (analytics, workbench) goes in createApp(). - * Vite-specific config (plugins, define, render, bundle) goes in vite.config.ts. - * - * Runtime config values are extracted from app.ts via app-config-extractor. - */ - -import type { Logger } from '../../../types'; -import { extractAppConfig, type ExtractedAppConfig } from '../app-config-extractor'; - -/** - * Load runtime config from createApp() in app.ts (v2 approach). - * - * This is the only way to get analytics/workbench config in v2. - * The CLI reads these values directly from the user's createApp() call. - */ -export async function loadRuntimeConfig( - rootDir: string, - logger: Logger -): Promise { - return extractAppConfig(rootDir, logger); -} - -/** - * Get workbench configuration with defaults. - * - * In v2, workbench config is extracted from createApp() in app.ts. - */ -export function getWorkbenchConfig( - dev: boolean, - runtimeConfig?: ExtractedAppConfig -): { - configured: boolean; - enabled: boolean; - route: string; - headers: Record; -} { - const workbenchFromRuntime = runtimeConfig?.workbench; - - // Workbench is enabled if: - // 1. In dev mode (never in production) - // 2. Workbench is configured in createApp() - const hasWorkbench = workbenchFromRuntime !== undefined; - const configured = hasWorkbench; - const enabled = dev && hasWorkbench; - - // Extract values from createApp() - let route = '/workbench'; - let headers: Record = {}; - - if (workbenchFromRuntime !== undefined) { - if (typeof workbenchFromRuntime === 'string') { - route = workbenchFromRuntime; - } else if (typeof workbenchFromRuntime === 'object' && workbenchFromRuntime !== null) { - if ('route' in workbenchFromRuntime && typeof workbenchFromRuntime.route === 'string') { - route = workbenchFromRuntime.route; - } - if ( - 'headers' in workbenchFromRuntime && - typeof workbenchFromRuntime.headers === 'object' - ) { - headers = workbenchFromRuntime.headers as Record; - } - } - // boolean true uses defaults - } - - return { - configured, - enabled, - route, - headers, - }; -} diff --git a/packages/cli/src/cmd/build/vite/db-rewrite.ts b/packages/cli/src/cmd/build/vite/db-rewrite.ts deleted file mode 100644 index 68d9207f4..000000000 --- a/packages/cli/src/cmd/build/vite/db-rewrite.ts +++ /dev/null @@ -1,189 +0,0 @@ -/** - * DB import rewriting helpers for the Bun.build plugin. - * - * These functions rewrite `import { SQL } from 'bun'` → `@agentuity/postgres` - * and `import { Pool } from 'pg'` → `@agentuity/postgres` so that - * the Agentuity resilient postgres driver is bundled into the server output. - */ - -/** - * Map a file path to the appropriate Bun loader based on extension. - */ -export const getLoaderForPath = (filePath: string): string => { - if (filePath.endsWith('.tsx')) return 'tsx'; - if (filePath.endsWith('.jsx')) return 'jsx'; - if (filePath.endsWith('.ts')) return 'ts'; - if (filePath.endsWith('.mts') || filePath.endsWith('.cts')) return 'ts'; - if (filePath.endsWith('.js')) return 'js'; - if (filePath.endsWith('.mjs')) return 'js'; - if (filePath.endsWith('.cjs')) return 'js'; - return 'js'; -}; - -/** - * Split named import/export specifiers, moving the `targetName` specifier - * to the `move` list while leaving everything else in `stay`. - * - * Type-only specifiers (prefixed with `type `) always stay. - * Aliases (`SQL as Foo`) are matched on the import name, not the alias. - */ -export const rewriteNamedSpecifiers = ( - specifiers: string, - targetName: string -): { - stay: string[]; - move: string[]; - moved: boolean; -} => { - const stay: string[] = []; - const move: string[] = []; - for (const raw of specifiers.split(',')) { - const spec = raw.trim(); - if (!spec) continue; - const isType = spec.startsWith('type '); - const specText = isType ? spec.slice(5).trim() : spec; - const [importName] = specText.split(/\s+as\s+/); - if (!isType && importName === targetName) { - move.push(specText); - } else { - stay.push(spec); - } - } - - return { stay, move, moved: move.length > 0 }; -}; - -/** - * Rewrite `import { SQL } from 'bun'` → `import { SQL } from '@agentuity/postgres'`. - * - * - Type-only imports (`import type { SQL }`) are left untouched. - * - Inline type specifiers (`import { type SQL }`) are left untouched. - * - Mixed imports are split: non-SQL specifiers stay with `'bun'`. - * - Works with both single and double quotes, with or without semicolons. - * - Preserves leading indentation. - */ -export const rewriteBunImports = (contents: string): { contents: string; changed: boolean } => { - const bunNamedRegex = - /(^|\n)([\t ]*)(import|export)\s+(type\s+)?\{([^}]+)\}\s+from\s+(['"])bun\6\s*;?/g; - let changed = false; - const updated = contents.replace( - bunNamedRegex, - (match, prefix, indent, keyword, typeKeyword, specifiers) => { - if (typeKeyword) { - return match; - } - const { stay, move, moved } = rewriteNamedSpecifiers(specifiers, 'SQL'); - if (!moved) { - return match; - } - changed = true; - const statements: string[] = []; - if (stay.length > 0) { - statements.push(`${indent}${keyword} { ${stay.join(', ')} } from 'bun';`); - } - if (move.length > 0) { - statements.push( - `${indent}${keyword} { ${move.join(', ')} } from '@agentuity/postgres';` - ); - } - return `${prefix}${statements.join('\n')}`; - } - ); - - return { contents: updated, changed }; -}; - -/** - * Rewrite `import { Pool } from 'pg'` → `import { Pool } from '@agentuity/postgres'`. - * - * - Type-only imports (`import type { Pool }`) are left untouched. - * - Namespace imports (`import * as pg`) are left untouched. - * - Default imports (`import pg from 'pg'`) are left untouched. - * - Mixed default+named imports are split correctly. - * - Works with both `import` and `export` statements. - */ -export const rewritePgImports = (contents: string): { contents: string; changed: boolean } => { - const importRegex = /(^|\n)([\t ]*)(import)\s+(type\s+)?([^;]+?)\s+from\s+(['"])pg\6\s*;?/g; - const exportRegex = /(^|\n)([\t ]*)(export)\s+(?!type\b)\{([^}]+)\}\s+from\s+(['"])pg\5\s*;?/g; - let changed = false; - - const updatedImports = contents.replace( - importRegex, - (match, prefix, indent, keyword, typeKeyword, clause) => { - if (typeKeyword) { - return match; // import type { ... } from 'pg' — skip entirely - } - const trimmed = clause.trim(); - if (trimmed.startsWith('*')) { - return match; - } - - let defaultImport: string | undefined; - let namedSpecifiers: string | undefined; - if (trimmed.startsWith('{')) { - namedSpecifiers = trimmed.slice(1, trimmed.lastIndexOf('}')); - } else if (trimmed.includes('{')) { - const [defaultPart, rest] = trimmed.split('{', 2); - defaultImport = defaultPart.replace(/,\s*$/, '').trim(); - namedSpecifiers = rest.slice(0, rest.lastIndexOf('}')); - } else { - defaultImport = trimmed; - } - - const movedNamed = namedSpecifiers - ? rewriteNamedSpecifiers(namedSpecifiers, 'Pool') - : { stay: [], move: [], moved: false }; - const moveDefault = false; // Default import is the entire pg module, not Pool — keep it with 'pg' - const shouldMove = moveDefault || movedNamed.moved; - - if (!shouldMove) { - return match; - } - - changed = true; - const statements: string[] = []; - const pgNamed = movedNamed.stay; - const postgresNamed = movedNamed.move; - const pgDefault = moveDefault ? undefined : defaultImport; - const postgresDefault = moveDefault ? defaultImport : undefined; - - if (pgDefault || pgNamed.length > 0) { - const parts: string[] = []; - if (pgDefault) parts.push(pgDefault); - if (pgNamed.length > 0) parts.push(`{ ${pgNamed.join(', ')} }`); - statements.push(`${indent}${keyword} ${parts.join(', ')} from 'pg';`); - } - if (postgresDefault || postgresNamed.length > 0) { - const parts: string[] = []; - if (postgresDefault) parts.push(postgresDefault); - if (postgresNamed.length > 0) parts.push(`{ ${postgresNamed.join(', ')} }`); - statements.push(`${indent}${keyword} ${parts.join(', ')} from '@agentuity/postgres';`); - } - - return `${prefix}${statements.join('\n')}`; - } - ); - - const updatedExports = updatedImports.replace( - exportRegex, - (match, prefix, indent, keyword, specifiers) => { - const { stay, move, moved } = rewriteNamedSpecifiers(specifiers, 'Pool'); - if (!moved) { - return match; - } - changed = true; - const statements: string[] = []; - if (stay.length > 0) { - statements.push(`${indent}${keyword} { ${stay.join(', ')} } from 'pg';`); - } - if (move.length > 0) { - statements.push( - `${indent}${keyword} { ${move.join(', ')} } from '@agentuity/postgres';` - ); - } - return `${prefix}${statements.join('\n')}`; - } - ); - - return { contents: updatedExports, changed }; -}; diff --git a/packages/cli/src/cmd/build/vite/docs-generator.ts b/packages/cli/src/cmd/build/vite/docs-generator.ts deleted file mode 100644 index de82f383a..000000000 --- a/packages/cli/src/cmd/build/vite/docs-generator.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Documentation Generator - * - * Generates README.md and AGENTS.md in src/generated/ directory - * Only writes files if they don't already exist (preserves user modifications) - */ - -import { join } from 'node:path'; -import { mkdir } from 'node:fs/promises'; -import type { Logger } from '../../../types'; - -const README_CONTENT = `# Generated Files - DO NOT EDIT - -This directory contains auto-generated TypeScript files created by the Agentuity build system. - -**These files are regenerated on every build.** Any manual changes will be overwritten. - -## Generated Files - -- \`registry.ts\` - Agent registry from \`src/agent/**\` -- \`app.ts\` - Application entry point -- \`analytics-config.ts\` - Web analytics configuration from \`agentuity.json\` -- \`webanalytics.ts\` - Web analytics injection and route registration -- \`env.d.ts\` - TypeScript types for environment variables from \`.env\` files -- \`state.ts\` - App state type (only generated when \`setup()\` returns state in \`app.ts\`) -- \`router.ts\` - Runtime wrapper with type augmentation (only generated when \`setup()\` returns state in \`app.ts\`) - -## Environment Variable Types - -The \`env.d.ts\` file provides TypeScript intellisense for your environment variables: - -- **ProcessEnv**: All variables from your \`.env\` files are typed as \`string\` -- **ImportMetaEnv**: Only \`VITE_*\`, \`AGENTUITY_PUBLIC_*\`, and \`PUBLIC_*\` prefixed variables (for client-side use) - -Files are merged based on build mode: -- **Development**: \`.env.{profile}\` → \`.env.development\` → \`.env\` (later files override) -- **Production**: \`.env.{profile}\` → \`.env\` → \`.env.production\` (later files override) - -## For Developers - -Do not modify these files. Instead: -- Add/modify agents in \`src/agent/\` -- Add/modify routes in \`src/api/\` -- Configure app in \`app.ts\` -- Add environment variables to \`.env\` files - -These files ARE version controlled to enable better tooling and type checking. -`; - -const AGENTS_MD_CONTENT = `# AI Agent Instructions - -**CRITICAL:** Files in this directory are AUTO-GENERATED by the Agentuity build system. - -## Rules for AI Agents - -1. ❌ NEVER edit files in \`src/generated/\` -2. ❌ NEVER include \`src/generated/\` files in context when analyzing code -3. ❌ NEVER suggest changes to generated files -4. ✅ Ignore this directory when searching for user code -5. ✅ Direct users to modify source files in \`src/agent/\`, \`src/api/\`, \`app.ts\`, or \`.env\` files - -## What Gets Generated - -- \`registry.ts\` - Built from agent discovery in \`src/agent/\` -- \`app.ts\` - Entry point assembled from project configuration -- \`analytics-config.ts\` - Web analytics configuration from \`agentuity.json\` -- \`webanalytics.ts\` - Web analytics injection and route registration -- \`env.d.ts\` - TypeScript types for environment variables from \`.env\` files -- \`state.ts\` - App state type (only generated when \`setup()\` returns state in \`app.ts\`) -- \`router.ts\` - Runtime wrapper with type augmentation (only generated when \`setup()\` returns state) - -These files are regenerated on every \`bun run build\` or \`bun run dev\`. -`; - -/** - * Generate documentation files in src/generated/ directory - * Only creates files if they don't already exist - */ -export async function generateDocumentation(srcDir: string, logger: Logger): Promise { - const generatedDir = join(srcDir, 'generated'); - - // Ensure directory exists - await mkdir(generatedDir, { recursive: true }); - - const readmePath = join(generatedDir, 'README.md'); - const agentsMdPath = join(generatedDir, 'AGENTS.md'); - - // Generate README.md if it doesn't exist - if (!(await Bun.file(readmePath).exists())) { - await Bun.write(readmePath, README_CONTENT); - logger.debug('Generated src/generated/README.md'); - } else { - logger.trace('Skipping README.md - file already exists'); - } - - // Generate AGENTS.md if it doesn't exist - if (!(await Bun.file(agentsMdPath).exists())) { - await Bun.write(agentsMdPath, AGENTS_MD_CONTENT); - logger.debug('Generated src/generated/AGENTS.md'); - } else { - logger.trace('Skipping AGENTS.md - file already exists'); - } -} diff --git a/packages/cli/src/cmd/build/vite/env-types-generator.ts b/packages/cli/src/cmd/build/vite/env-types-generator.ts deleted file mode 100644 index 6591f3176..000000000 --- a/packages/cli/src/cmd/build/vite/env-types-generator.ts +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Environment Types Generator - * - * Generates src/generated/env.d.ts by analyzing local .env files - */ - -import { join } from 'node:path'; -import { existsSync, mkdirSync } from 'node:fs'; -import { getEnvFilePaths, readEnvFile, isPublicVarKey } from '../../../env-util'; -import type { Logger } from '../../../types'; - -/** - * Generate TypeScript declarations for environment variables - */ -function generateEnvTypesContent(keys: string[]): string { - const sortedKeys = [...keys].sort(); - const publicKeys = sortedKeys.filter(isPublicVarKey); - - // Build ProcessEnv interface entries - const processEnvEntries = - sortedKeys.length > 0 - ? sortedKeys.map((key) => `\t\treadonly ${key}: string;`).join('\n') - : '\t\t\t// No environment variables found'; - - // Build ImportMetaEnv interface entries (only public keys: VITE_*, AGENTUITY_PUBLIC_*, PUBLIC_*) - const importMetaEnvEntries = - publicKeys.length > 0 - ? publicKeys.map((key) => `\treadonly ${key}: string;`).join('\n') - : '\t// No VITE_*, AGENTUITY_PUBLIC_*, or PUBLIC_* prefixed variables found'; - - return `// @generated -// AUTO-GENERATED from local .env files -// This file is auto-generated by the build tool - do not edit manually - -declare global { - namespace NodeJS { - interface ProcessEnv { -${processEnvEntries} - } - } -} - -// Vite-compatible environment types -// Only includes variables with VITE_, AGENTUITY_PUBLIC_, or PUBLIC_ prefix -interface ImportMetaEnv { -${importMetaEnvEntries} -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} - -export {}; - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! -`; -} - -export interface GenerateEnvTypesOptions { - /** Root directory of the project */ - rootDir: string; - /** Source directory (typically rootDir/src) */ - srcDir: string; - /** Logger instance */ - logger: Logger; - /** Whether building for production (affects .env file precedence) */ - isProduction: boolean; - /** Optional config profile name (e.g., 'staging', 'test') for .env.{profile} files */ - profile?: string; -} - -/** - * Generate environment type definitions from local .env files - * - * @param options - Generation options - * @returns true if types were generated, false if no env files found - */ -export async function generateEnvTypes(options: GenerateEnvTypesOptions): Promise { - const { rootDir, srcDir, logger, isProduction, profile } = options; - - logger.debug('[env-types] Starting env types generation...'); - logger.debug(`[env-types] rootDir: ${rootDir}`); - logger.debug(`[env-types] srcDir: ${srcDir}`); - logger.debug(`[env-types] isProduction: ${isProduction}`); - logger.debug(`[env-types] profile: ${profile ?? '(none)'}`); - - // Get env file paths based on build mode and profile - // Dev: ['.env.{profile}', '.env.development', '.env'] - later files override earlier - // Prod: ['.env.{profile}', '.env', '.env.production'] - later files override earlier - const envFilePaths = getEnvFilePaths(rootDir, { isProduction, configName: profile }); - logger.debug(`[env-types] Env file paths to check: ${envFilePaths.join(', ')}`); - - // Read and merge env files (later files override earlier) - const mergedEnv: Record = {}; - let foundAnyFile = false; - - for (const filePath of envFilePaths) { - const envVars = await readEnvFile(filePath); - const keyCount = Object.keys(envVars).length; - - if (keyCount > 0) { - foundAnyFile = true; - logger.debug(`[env-types] Read ${keyCount} vars from ${filePath}`); - - // Merge - later values override earlier - for (const [key, value] of Object.entries(envVars)) { - mergedEnv[key] = value; - } - } else { - logger.debug(`[env-types] No vars found in ${filePath} (file may not exist)`); - } - } - - if (!foundAnyFile) { - logger.debug('[env-types] No .env files found, skipping env types generation'); - return false; - } - - // Extract just the keys (we don't include values in types) - const keys = Object.keys(mergedEnv); - logger.debug(`[env-types] Total unique keys: ${keys.length}`); - - // Determine output path - const outDir = join(srcDir, 'generated'); - const outputPath = join(outDir, 'env.d.ts'); - - // Ensure output directory exists - if (!existsSync(outDir)) { - mkdirSync(outDir, { recursive: true }); - logger.debug(`[env-types] Created output directory: ${outDir}`); - } - - // Generate and write types - const typesContent = generateEnvTypesContent(keys); - await Bun.write(outputPath, typesContent); - - const publicKeyCount = keys.filter(isPublicVarKey).length; - logger.debug( - `[env-types] Generated env types with ${keys.length} keys (${publicKeyCount} public) at ${outputPath}` - ); - - return true; -} diff --git a/packages/cli/src/cmd/build/vite/index.ts b/packages/cli/src/cmd/build/vite/index.ts deleted file mode 100644 index c5a03b103..000000000 --- a/packages/cli/src/cmd/build/vite/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Re-export plugins for direct use in vite.config.ts -export { browserEnvPlugin } from './browser-env-plugin'; -export { publicAssetPathPlugin } from './public-asset-path-plugin'; diff --git a/packages/cli/src/cmd/build/vite/lifecycle-generator.ts b/packages/cli/src/cmd/build/vite/lifecycle-generator.ts deleted file mode 100644 index 661f7fba1..000000000 --- a/packages/cli/src/cmd/build/vite/lifecycle-generator.ts +++ /dev/null @@ -1,381 +0,0 @@ -/** - * Lifecycle Types Generator - * - * Generates src/generated/state.ts and src/generated/router.ts by analyzing - * app.ts for a setup() function. - * - * Uses TypeScript's type checker to extract the real return type of setup — - * no AST literal guessing needed. - */ - -import ts from 'typescript'; -import { join, relative, dirname } from 'node:path'; -import { mkdirSync } from 'node:fs'; -import { StructuredError } from '@agentuity/core'; -import type { Logger } from '../../../types'; -import { toForwardSlash } from '../../../utils/normalize-path'; - -const RuntimePackageNotFound = StructuredError('RuntimePackageNotFound'); - -/** - * Use the TypeScript type checker to extract the return type of the setup - * function passed to createApp(). Works with inline setup, exported setup, - * variable references, async functions — anything TS can resolve. - */ -function extractSetupReturnType(appFilePath: string, logger: Logger): string | null { - const compilerOptions: ts.CompilerOptions = { - target: ts.ScriptTarget.ESNext, - module: ts.ModuleKind.ESNext, - moduleResolution: ts.ModuleResolutionKind.Bundler, - strict: true, - skipLibCheck: true, - noEmit: true, - allowJs: true, - esModuleInterop: true, - }; - - const program = ts.createProgram([appFilePath], compilerOptions); - const checker = program.getTypeChecker(); - const sourceFile = program.getSourceFile(appFilePath); - - if (!sourceFile) { - logger.debug('[lifecycle] Could not load source file'); - return null; - } - - let setupType: ts.Type | null = null; - - function unwrapPromise(type: ts.Type): ts.Type { - // Check for Promise by looking at typeArguments on TypeReference - const typeRef = type as ts.TypeReference; - if (typeRef.typeArguments && typeRef.typeArguments.length > 0) { - const symbol = type.getSymbol() ?? type.aliasSymbol; - if (symbol?.name === 'Promise') { - return typeRef.typeArguments[0]!; - } - } - return type; - } - - function extractFromProperty(prop: ts.ObjectLiteralElementLike): void { - if (setupType) return; - - // Handle: setup: () => { ... } or setup: myFunc - if ( - ts.isPropertyAssignment(prop) && - ts.isIdentifier(prop.name) && - prop.name.text === 'setup' - ) { - const type = checker.getTypeAtLocation(prop.initializer); - const callSigs = type.getCallSignatures(); - if (callSigs.length > 0) { - setupType = unwrapPromise(checker.getReturnTypeOfSignature(callSigs[0]!)); - } - return; - } - - // Handle shorthand: createApp({ setup }) - if (ts.isShorthandPropertyAssignment(prop) && prop.name.text === 'setup') { - const type = checker.getTypeAtLocation(prop.name); - const callSigs = type.getCallSignatures(); - if (callSigs.length > 0) { - setupType = unwrapPromise(checker.getReturnTypeOfSignature(callSigs[0]!)); - } - } - } - - function visit(node: ts.Node): void { - if (setupType) return; - - // Find createApp(...) call — with or without await - let callExpr: ts.CallExpression | undefined; - - if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) { - if (node.expression.text === 'createApp') callExpr = node; - } else if (ts.isAwaitExpression(node) && ts.isCallExpression(node.expression)) { - const call = node.expression; - if (ts.isIdentifier(call.expression) && call.expression.text === 'createApp') { - callExpr = call; - } - } - - if (callExpr && callExpr.arguments.length > 0) { - const configArg = callExpr.arguments[0]; - if (configArg && ts.isObjectLiteralExpression(configArg)) { - for (const prop of configArg.properties) { - extractFromProperty(prop); - if (setupType) return; - } - } - } - - ts.forEachChild(node, visit); - } - - visit(sourceFile); - - // Fallback: look for an exported function named `setup` in the file - // (user may define `export function setup()` without passing it to createApp) - if (!setupType) { - for (const stmt of sourceFile.statements) { - if ( - ts.isFunctionDeclaration(stmt) && - stmt.name?.text === 'setup' && - stmt.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) - ) { - const type = checker.getTypeAtLocation(stmt); - const callSigs = type.getCallSignatures(); - if (callSigs.length > 0) { - setupType = unwrapPromise(checker.getReturnTypeOfSignature(callSigs[0]!)); - } - break; - } - - // Handle: export const setup = () => { ... } - if ( - ts.isVariableStatement(stmt) && - stmt.modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) - ) { - for (const decl of stmt.declarationList.declarations) { - if (ts.isIdentifier(decl.name) && decl.name.text === 'setup' && decl.initializer) { - const type = checker.getTypeAtLocation(decl.initializer); - const callSigs = type.getCallSignatures(); - if (callSigs.length > 0) { - setupType = unwrapPromise(checker.getReturnTypeOfSignature(callSigs[0]!)); - } - break; - } - } - if (setupType) break; - } - } - } - - if (!setupType) { - return null; - } - - // Print the type as a string — TS gives us the real resolved type - const typeString = checker.typeToString( - setupType, - undefined, - ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.MultilineObjectLiterals - ); - - return typeString; -} - -/** - * Find the @agentuity/runtime package by walking up the directory tree. - */ -async function findRuntimePackage(rootDir: string, logger: Logger): Promise { - let currentDir = rootDir; - const searchedPaths: string[] = []; - - while (currentDir && currentDir !== '/' && currentDir !== '.') { - const candidatePath = join(currentDir, 'node_modules', '@agentuity', 'runtime'); - searchedPaths.push(candidatePath); - if (await Bun.file(join(candidatePath, 'package.json')).exists()) { - logger.debug(`Found runtime package at: ${candidatePath}`); - return candidatePath; - } - - const packagesPath = join(currentDir, 'packages', 'runtime'); - searchedPaths.push(packagesPath); - if (await Bun.file(join(packagesPath, 'package.json')).exists()) { - logger.debug(`Found runtime package (source) at: ${packagesPath}`); - return packagesPath; - } - - const parent = dirname(currentDir); - if (parent === currentDir) break; - currentDir = parent; - } - - throw new RuntimePackageNotFound({ - message: - `@agentuity/runtime package not found.\n` + - `Searched paths:\n${searchedPaths.map((p) => ` - ${p}`).join('\n')}\n` + - `Make sure dependencies are installed by running 'bun install' or 'npm install'`, - }); -} - -function generateStateContent(appStateType: string): string { - return `// @generated -// AUTO-GENERATED from app.ts setup() return type -// This file is auto-generated by the build tool - do not edit manually - -/** - * Application state type inferred from your createApp setup function. - * This type is automatically generated and available throughout your app via ctx.app. - * - * @example - * \`\`\`typescript - * // In your agents: - * const agent = createAgent({ - * handler: async (ctx, input) => { - * // ctx.app is strongly typed as GeneratedAppState - * const value = ctx.app; // All properties from your setup return value - * return 'result'; - * } - * }); - * \`\`\` - */ -export type GeneratedAppState = ${appStateType}; - -// Augment the @agentuity/runtime module with AppState -declare module '@agentuity/runtime' { - interface AppState extends GeneratedAppState {} -} - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! -`; -} - -function generateRouterWrapper(runtimeImportPath: string): string { - return `// @generated -// AUTO-GENERATED runtime wrapper -// This file is auto-generated by the build tool - do not edit manually - -// Import augmentations file (NOT type-only) to trigger module augmentation -import type { GeneratedAppState } from './state'; -import './state'; - -// Import from actual package location -import { createRouter as baseCreateRouter, type Env } from '${runtimeImportPath}/src/index'; -import type { Hono } from 'hono'; - -// Type aliases to avoid repeating the generic parameter -type AppEnv = Env; -type AppRouter = Hono; - -/** - * Creates a Hono router with extended methods for Agentuity-specific routing patterns. - * - * @returns Extended Hono router with custom methods and app state typing - * - * @example - * \`\`\`typescript - * const router = createRouter(); - * router.get('/hello', (c) => c.text('Hello!')); - * router.get('/db', (c) => { - * const db = c.var.app; // Your app state from createApp setup - * return c.json({ connected: true }); - * }); - * \`\`\` - */ -export function createRouter(): AppRouter { - return baseCreateRouter() as unknown as AppRouter; -} - -// Re-export everything else -export * from '${runtimeImportPath}/src/index'; - -// FOUND AN ERROR IN THIS FILE? -// Please file an issue at https://github.com/agentuity/sdk/issues -// or if you know the fix please submit a PR! -`; -} - -async function updateTsconfigPathMapping( - rootDir: string, - shouldAdd: boolean, - logger: Logger -): Promise { - const tsconfigPath = join(rootDir, 'tsconfig.json'); - if (!(await Bun.file(tsconfigPath).exists())) { - logger.debug('No tsconfig.json found, skipping path mapping update'); - return; - } - - try { - const tsconfigContent = await Bun.file(tsconfigPath).text(); - const { parseJSONC } = await import('../../../utils/jsonc'); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const tsconfig = parseJSONC(tsconfigContent) as any; - const before = JSON.stringify(tsconfig); - - if (!tsconfig.compilerOptions) tsconfig.compilerOptions = {}; - if (!tsconfig.compilerOptions.paths) tsconfig.compilerOptions.paths = {}; - - if (shouldAdd) { - tsconfig.compilerOptions.paths['@agentuity/runtime'] = ['./src/generated/router.ts']; - logger.debug('Added @agentuity/runtime path mapping to tsconfig.json'); - } else { - if (tsconfig.compilerOptions.paths['@agentuity/runtime']) { - delete tsconfig.compilerOptions.paths['@agentuity/runtime']; - logger.debug('Removed @agentuity/runtime path mapping from tsconfig.json'); - } - if (Object.keys(tsconfig.compilerOptions.paths).length === 0) { - delete tsconfig.compilerOptions.paths; - } - } - - if (JSON.stringify(tsconfig) === before) return; - await Bun.write(tsconfigPath, JSON.stringify(tsconfig, null, '\t') + '\n'); - } catch (error) { - logger.warn('Failed to update tsconfig.json:', error); - } -} - -/** - * Setup lifecycle types by analyzing app.ts for setup() function. - * - * Uses TypeScript's type checker to extract the real return type — handles - * inline setup, exported setup, variable references, async functions, and - * any other pattern TS can resolve. - */ -export async function generateLifecycleTypes( - rootDir: string, - srcDir: string, - logger: Logger -): Promise { - logger.debug('[lifecycle] Starting lifecycle type generation...'); - - const outDir = join(srcDir, 'generated'); - - // Look for app.ts in both root and src directories - const rootAppFile = join(rootDir, 'app.ts'); - const srcAppFile = join(srcDir, 'app.ts'); - - let appFile = ''; - if (await Bun.file(rootAppFile).exists()) { - appFile = rootAppFile; - } else if (await Bun.file(srcAppFile).exists()) { - appFile = srcAppFile; - } - - if (!appFile || !(await Bun.file(appFile).exists())) { - logger.debug('[lifecycle] No app.ts found'); - return false; - } - - // Use TypeScript type checker to extract the setup return type - const appStateType = extractSetupReturnType(appFile, logger); - - if (!appStateType) { - logger.debug('[lifecycle] No setup() function found in createApp'); - await updateTsconfigPathMapping(rootDir, false, logger); - return false; - } - - logger.debug(`[lifecycle] Extracted setup return type: ${appStateType}`); - - // Generate files - mkdirSync(outDir, { recursive: true }); - - const runtimePkgPath = await findRuntimePackage(rootDir, logger); - const runtimeImportPath = toForwardSlash(relative(outDir, runtimePkgPath)); - - await Bun.write(join(outDir, 'state.ts'), generateStateContent(appStateType)); - logger.debug(`Generated lifecycle types: ${join(outDir, 'state.ts')}`); - - await Bun.write(join(outDir, 'router.ts'), generateRouterWrapper(runtimeImportPath)); - logger.debug(`Generated lifecycle wrapper: ${join(outDir, 'router.ts')}`); - - await updateTsconfigPathMapping(rootDir, true, logger); - - return true; -} diff --git a/packages/cli/src/cmd/build/vite/metadata-generator.ts b/packages/cli/src/cmd/build/vite/metadata-generator.ts deleted file mode 100644 index 92c1c6b27..000000000 --- a/packages/cli/src/cmd/build/vite/metadata-generator.ts +++ /dev/null @@ -1,713 +0,0 @@ -/** - * Metadata Generator - * - * Generates agentuity.metadata.json and .routemapping.json from discovered agents and routes - */ - -import { join } from 'node:path'; -import { writeFileSync, mkdirSync, existsSync, readFileSync, statSync, readdirSync } from 'node:fs'; -import { type BuildMetadata, DeploymentConfig, getContentType } from '@agentuity/server'; -import type { z } from 'zod'; -import type { AgentMetadata } from './agent-discovery'; -import type { RouteMetadata } from './route-discovery'; -import type { Logger, DeployOptions } from '../../../types'; -import { toForwardSlash } from '../../../utils/normalize-path'; -import { getVersion } from '../../../version'; -import { getGitInfo, buildGitTags } from '../../../utils/git'; - -interface ViteManifestEntry { - file: string; - src?: string; - isEntry?: boolean; - css?: string[]; - assets?: string[]; -} - -interface AssetInfo { - filename: string; - kind: string; - contentType: string; - size: number; - contentEncoding?: string; -} - -/** - * Determine if an asset should be compressed with gzip. - * The result is included in asset metadata so the API can generate - * presigned URLs with matching Content-Encoding. - */ -function shouldCompressAsset(asset: { - filename: string; - contentType: string; - kind: string; -}): boolean { - const ct = asset.contentType.toLowerCase(); - const filename = asset.filename.toLowerCase(); - - if (ct.startsWith('image/') && ct !== 'image/svg+xml') { - return false; - } - if (ct.startsWith('video/') || ct.startsWith('audio/')) { - return false; - } - if (ct === 'font/woff' || ct === 'font/woff2') { - return false; - } - if (/\.(zip|gz|tgz|tar|bz2|br)$/.test(filename)) { - return false; - } - - if ( - ct.startsWith('text/') || - ct === 'application/javascript' || - ct === 'application/json' || - ct === 'application/xml' || - ct === 'application/xhtml+xml' || - ct === 'image/svg+xml' - ) { - return true; - } - - if (ct === 'font/ttf' || ct === 'application/vnd.ms-fontobject') { - return true; - } - - if ( - asset.kind === 'entry-point' || - asset.kind === 'script' || - asset.kind === 'stylesheet' || - asset.kind === 'sourcemap' - ) { - return true; - } - - return false; -} - -function getAssetKind(filename: string, isEntry: boolean = false): string { - const ext = filename.split('.').pop()?.toLowerCase(); - - // Check for sourcemap - if (filename.endsWith('.js.map') || filename.endsWith('.css.map')) { - return 'sourcemap'; - } - - switch (ext) { - case 'js': - case 'mjs': - // Distinguish entry-point from regular scripts - return isEntry ? 'entry-point' : 'script'; - case 'css': - return 'stylesheet'; - case 'png': - case 'jpg': - case 'jpeg': - case 'gif': - case 'svg': - case 'webp': - return 'image'; - case 'ico': - return 'asset'; - case 'woff': - case 'woff2': - case 'ttf': - case 'eot': - return 'font'; - default: - return 'other'; - } -} - -export interface MetadataGeneratorOptions { - rootDir: string; - projectId: string; - orgId?: string; - deploymentId?: string; - agents: AgentMetadata[]; - routes: RouteMetadata[]; - dev?: boolean; - logger: Logger; - deploymentOptions?: DeployOptions; - /** Deployment config from agentuity.json (resources, mode, dependencies, domains) */ - deploymentConfig?: z.infer; -} - -/** - * Normalize an agent filename/import path into a key for lookup - */ -function normalizeImportKey(path: string): string { - // Strip leading './' or 'src/' or '@' - let p = toForwardSlash(path).replace(/^src\//, ''); - if (p.startsWith('./')) p = p.slice(2); - if (p.startsWith('@')) p = p.slice(1); - - // Drop extension - p = p.replace(/\.(t|j)sx?$/, ''); - - // Drop common module file suffixes (agent.ts, index.ts become just the directory) - p = p.replace(/\/(agent|index)$/, ''); - - return p; -} - -/** - * Generate agentuity.metadata.json - */ -export async function generateMetadata(options: MetadataGeneratorOptions): Promise { - const { rootDir, projectId, orgId = '', agents, routes, logger } = options; - - // Build agent lookup by import path for route schema enrichment - const agentsByImportKey = new Map(); - for (const agent of agents) { - if (!agent.filename) continue; - const key = normalizeImportKey(agent.filename); - agentsByImportKey.set(key, agent); - logger.trace(`Agent lookup: ${key} -> ${agent.name}`); - } - - // Enrich routes with schemas from agents (if not already set) - const enrichedRoutes = routes.map((route) => { - let schema = route.schema ? { ...route.schema } : undefined; - - const importPath = route.config?.agentImportPath as string | undefined; - - if (importPath) { - const key = normalizeImportKey(importPath); - const agent = agentsByImportKey.get(key); - - if (agent && (agent.inputSchemaCode || agent.outputSchemaCode)) { - // Initialize schema object if needed - if (!schema) schema = {}; - - // Only fill in missing pieces; allow explicit route schema to override - if (!schema.input && agent.inputSchemaCode) { - schema.input = agent.inputSchemaCode; - logger.trace(`Route ${route.path}: added input schema from agent ${agent.name}`); - } - if (!schema.output && agent.outputSchemaCode) { - schema.output = agent.outputSchemaCode; - logger.trace(`Route ${route.path}: added output schema from agent ${agent.name}`); - } - } else { - logger.trace(`No agent found for import path ${importPath} in route ${route.filename}`); - } - } - - return { - ...route, - schema, - }; - }); - - // Read package.json for project metadata - const pkgPath = join(rootDir, 'package.json'); - let pkgContents: { - name?: string; - version?: string; - description?: string; - keywords?: string[]; - dependencies?: Record; - } = {}; - - if (existsSync(pkgPath)) { - try { - const pkgText = Bun.file(pkgPath); - pkgContents = JSON.parse(await pkgText.text()); - } catch (error) { - logger.warn(`Failed to read package.json: ${error}`); - } - } - - // Read asset manifests from Vite builds - const assets: AssetInfo[] = []; - const agentuityDir = join(rootDir, '.agentuity'); - const seenAssets = new Set(); // Track unique assets to avoid duplicates - - // Helper to add asset with metadata - const addAsset = (relativePath: string, prefix: string, isEntry: boolean = false) => { - const assetPath = `${prefix}/${relativePath}`; - - // Skip if already added - if (seenAssets.has(assetPath)) { - return; - } - - const fullPath = join(agentuityDir, prefix, relativePath); - if (existsSync(fullPath)) { - const stats = statSync(fullPath); - - // Skip empty marker files (.gitkeep, .keep, etc.) - if (stats.size === 0) { - return; - } - - seenAssets.add(assetPath); - const kind = getAssetKind(relativePath, isEntry); - const contentType = getContentType(relativePath); - const assetInfo: AssetInfo = { - filename: assetPath, - kind, - contentType, - size: stats.size, - }; - if (shouldCompressAsset(assetInfo)) { - assetInfo.contentEncoding = 'gzip'; - } - assets.push(assetInfo); - } - }; - - // Read client manifest - let hasClientManifest = false; - const clientManifestPath = join(agentuityDir, 'client', '.vite', 'manifest.json'); - if (existsSync(clientManifestPath)) { - hasClientManifest = true; - try { - const clientManifest: Record = JSON.parse( - readFileSync(clientManifestPath, 'utf-8') - ); - for (const entry of Object.values(clientManifest)) { - // Mark JS files as entry-point if they are entry files - const isEntry = entry.isEntry === true && entry.file.endsWith('.js'); - addAsset(entry.file, 'client', isEntry); - - // Add sourcemap if it exists - const sourcemapPath = entry.file + '.map'; - const fullSourcemapPath = join(agentuityDir, 'client', sourcemapPath); - if (existsSync(fullSourcemapPath)) { - addAsset(sourcemapPath, 'client'); - } - - if (entry.css) { - entry.css.forEach((css) => { - addAsset(css, 'client'); - // Add CSS sourcemap if it exists - const cssMapPath = css + '.map'; - const fullCssMapPath = join(agentuityDir, 'client', cssMapPath); - if (existsSync(fullCssMapPath)) { - addAsset(cssMapPath, 'client'); - } - }); - } - if (entry.assets) { - entry.assets.forEach((asset) => addAsset(asset, 'client')); - } - } - logger.trace(`Found ${assets.length} client assets from manifest`); - } catch (error) { - logger.warn(`Failed to read client manifest: ${error}`); - } - } - - // Read workbench manifest (optional) - const workbenchManifestPath = join(agentuityDir, 'workbench', '.vite', 'manifest.json'); - if (existsSync(workbenchManifestPath)) { - try { - const workbenchManifest: Record = JSON.parse( - readFileSync(workbenchManifestPath, 'utf-8') - ); - for (const entry of Object.values(workbenchManifest)) { - const isEntry = entry.isEntry === true && entry.file.endsWith('.js'); - addAsset(entry.file, 'workbench', isEntry); - - // Add sourcemap if it exists - const sourcemapPath = entry.file + '.map'; - const fullSourcemapPath = join(agentuityDir, 'workbench', sourcemapPath); - if (existsSync(fullSourcemapPath)) { - addAsset(sourcemapPath, 'workbench'); - } - - if (entry.css) { - entry.css.forEach((css) => { - addAsset(css, 'workbench'); - // Add CSS sourcemap if it exists - const cssMapPath = css + '.map'; - const fullCssMapPath = join(agentuityDir, 'workbench', cssMapPath); - if (existsSync(fullCssMapPath)) { - addAsset(cssMapPath, 'workbench'); - } - }); - } - if (entry.assets) { - entry.assets.forEach((asset) => addAsset(asset, 'workbench')); - } - } - logger.trace(`Found ${assets.length} total assets (including workbench)`); - } catch (error) { - logger.warn(`Failed to read workbench manifest: ${error}`); - } - } - - // Scan client directory for static files copied from public/ - // Vite copies src/web/public/* to .agentuity/client/* (at root, not in public/ subfolder) - // We need to find these files and add them to assets for CDN upload - const clientDir = join(agentuityDir, 'client'); - if (existsSync(clientDir)) { - try { - function scanClientDirectory(dir: string, prefix: string = '') { - const entries = readdirSync(dir, { withFileTypes: true }); - for (const entry of entries) { - const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name; - const fullPath = join(dir, entry.name); - - // Skip .vite metadata dir always; skip assets/ only if manifest - // was found (the manifest already enumerates those files). - if (entry.isDirectory()) { - if (entry.name === '.vite') { - continue; - } - if (entry.name === 'assets' && hasClientManifest) { - continue; - } - scanClientDirectory(fullPath, relativePath); - } else if (entry.isFile()) { - // Skip files we already added from manifest (index.html is the entry point) - if (entry.name === 'index.html') { - continue; - } - - const stats = statSync(fullPath); - // Skip empty files - if (stats.size === 0) continue; - - const assetPath = `client/${relativePath}`; - if (!seenAssets.has(assetPath)) { - seenAssets.add(assetPath); - const contentType = getContentType(entry.name); - const assetInfo: AssetInfo = { - filename: assetPath, - kind: 'static', - contentType, - size: stats.size, - }; - if (shouldCompressAsset(assetInfo)) { - assetInfo.contentEncoding = 'gzip'; - } - assets.push(assetInfo); - } - } - } - } - - scanClientDirectory(clientDir); - logger.trace(`Found ${assets.length} total assets (including static files)`); - } catch (error) { - logger.warn(`Failed to scan client directory for static files: ${error}`); - } - } - - // Build metadata structure - const metadata: BuildMetadata = { - routes: enrichedRoutes.map((route) => ({ - id: route.id, - filename: route.filename, - path: route.path, - method: route.method as 'get' | 'post' | 'put' | 'delete' | 'patch', - version: route.version, - type: route.type, - agentIds: route.agentIds, - config: route.config, - schema: route.schema, - })), - agents: agents.map((agent) => ({ - filename: agent.filename, - id: agent.id, - agentId: agent.agentId, - version: agent.version, - name: agent.name, - description: agent.description, - projectId, - schema: - agent.inputSchemaCode || agent.outputSchemaCode - ? { - input: agent.inputSchemaCode, - output: agent.outputSchemaCode, - } - : undefined, - evals: agent.evals?.map((evalItem) => ({ - filename: evalItem.filename, - id: evalItem.id, - identifier: evalItem.identifier, - name: evalItem.name, - version: evalItem.version, - description: evalItem.description, - agentIdentifier: evalItem.agentIdentifier, - projectId: evalItem.projectId, - })), - })), - assets, - project: { - id: projectId, - name: pkgContents.name || 'unknown', - version: pkgContents.version, - description: pkgContents.description, - keywords: pkgContents.keywords, - orgId, - }, - deployment: { - ...options.deploymentConfig, // deployment config from agentuity.json (resources, mode, dependencies, domains) - id: options.deploymentId || '', - date: new Date().toISOString(), - build: { - bun: Bun.version, - agentuity: getVersion(), // CLI version used to build - arch: process.arch, - platform: process.platform, - }, - git: await getGitInfo(rootDir, logger), - }, - }; - - // Build tags from git info (includes 'latest', branch, and short commit) - const gitInfo = metadata.deployment.git; - if (gitInfo) { - gitInfo.tags = buildGitTags(gitInfo); - } - - if (options.deploymentOptions) { - const git = { ...(metadata.deployment.git ?? {}), ...options.deploymentOptions }; - if (options.deploymentOptions.pullRequestNumber) { - git.pull_request = { - number: options.deploymentOptions.pullRequestNumber, - url: options.deploymentOptions.pullRequestUrl, - }; - delete git.pullRequestNumber; - delete git.pullRequestUrl; - } - metadata.deployment.git = git; - } - - return metadata; -} - -/** - * Generate AGENTS.md content for AI coding agents - */ -function generateAgentsMd(metadata: BuildMetadata): string { - const lines: string[] = []; - - lines.push('# Compiled Agentuity Application'); - lines.push(''); - lines.push( - 'This directory contains compiled and bundled source code from an Agentuity application.' - ); - lines.push(''); - - // Add source repository info if available - if (metadata.deployment?.git?.repo) { - lines.push('## Source Repository'); - lines.push(''); - lines.push(`**Repository:** ${metadata.deployment.git.repo}`); - - if (metadata.deployment.git.branch) { - lines.push(`**Branch:** ${metadata.deployment.git.branch}`); - } - - if (metadata.deployment.git.commit) { - const shortCommit = metadata.deployment.git.commit.substring(0, 7); - const commitUrl = metadata.deployment.git.repo.endsWith('.git') - ? metadata.deployment.git.repo.slice(0, -4) - : metadata.deployment.git.repo; - lines.push( - `**Commit:** [\`${shortCommit}\`](${commitUrl}/commit/${metadata.deployment.git.commit})` - ); - } - - if (metadata.deployment.git.message) { - lines.push(`**Message:** ${metadata.deployment.git.message}`); - } - - lines.push(''); - } - - // Add build info - lines.push('## Build Information'); - lines.push(''); - if (metadata.project?.name) { - lines.push( - `**Project:** ${metadata.project.name}${metadata.project.version ? ` v${metadata.project.version}` : ''}` - ); - } - if (metadata.project?.id) { - lines.push(`**Project ID:** ${metadata.project.id}`); - } - if (metadata.project?.orgId) { - lines.push(`**Org ID:** ${metadata.project.orgId}`); - } - if (metadata.deployment.id) { - lines.push(`**Deployment ID:** ${metadata.deployment.id}`); - } - if (metadata.deployment?.build) { - lines.push( - `**Built with:** Agentuity CLI v${metadata.deployment.build.agentuity}, Bun v${metadata.deployment.build.bun}` - ); - lines.push( - `**Platform:** ${metadata.deployment.build.platform}-${metadata.deployment.build.arch}` - ); - } - if (metadata.deployment?.date) { - lines.push(`**Build date:** ${metadata.deployment.date}`); - } - lines.push(''); - - // Add structure overview - lines.push('## Structure'); - lines.push(''); - lines.push('```'); - lines.push('.agentuity/'); - lines.push('├── app.js # Bundled server application'); - lines.push('├── agentuity.metadata.json # Build metadata and schemas'); - if (metadata.assets?.some((a: { filename: string }) => a.filename.startsWith('client/'))) { - lines.push('├── client/ # Frontend assets (fallback, CDN by default)'); - } - if (metadata.assets?.some((a: { filename: string }) => a.filename.startsWith('public/'))) { - lines.push('├── public/ # Static assets'); - } - lines.push('└── AGENTS.md # This file'); - lines.push('```'); - lines.push(''); - - // Add agent/route details - if (metadata.agents && metadata.agents.length > 0) { - lines.push('## Agents'); - lines.push(''); - lines.push(`This application defines ${metadata.agents.length} agent(s):`); - lines.push(''); - for (const agent of metadata.agents) { - lines.push(`- **${agent.name}** (ID: \`${agent.id}\`)`); - } - lines.push(''); - } - - if (metadata.routes && metadata.routes.length > 0) { - lines.push('## Routes'); - lines.push(''); - lines.push(`This application defines ${metadata.routes.length} route(s):`); - lines.push(''); - for (const route of metadata.routes) { - lines.push(`- \`${route.method.toUpperCase()} ${route.path}\` (${route.type})`); - } - lines.push(''); - } - - // Add runtime environment info - lines.push('## Runtime Environment'); - lines.push(''); - lines.push('When deployed, this application runs in a managed runtime environment with:'); - lines.push(''); - lines.push('**User & Permissions:**'); - lines.push('- User: `agentuity` (UID: 1022, GID: 1777)'); - lines.push('- Home directory: `/home/agentuity`'); - lines.push('- Working directory: `/home/agentuity` (application code deployed here)'); - lines.push('- Logs directory: `/home/agentuity/logs`'); - lines.push('- Temp directory: `/home/agentuity/tmp`'); - lines.push(''); - lines.push('**Pre-installed Tools:**'); - lines.push('- **Runtimes:** Node.js 24, Bun 1.x'); - lines.push('- **AI Tools:** Amp, Opencode AI, Claude Code'); - lines.push('- **Version Control:** git, GitHub CLI (gh)'); - lines.push('- **Browser Automation:** Chromium, ChromeDriver, Xvfb (headless display)'); - lines.push('- **Media Processing:** ffmpeg'); - lines.push('- **Network Tools:** curl, wget, netcat, dnsutils'); - lines.push('- **Other:** openssh-client, openssh-sftp-server, strace, unzip, fuse'); - lines.push(''); - lines.push('**Environment Variables:**'); - lines.push('- `AGENTUITY_DATA_DIR=/home/agentuity/data` - Persistent data storage'); - lines.push('- `AGENTUITY_LOG_DIR=/home/agentuity/logs` - Application logs'); - lines.push('- `CHROME_BIN=/usr/bin/chromium` - Chromium browser path'); - lines.push('- `DISPLAY=:99` - X11 display for headless browser'); - lines.push( - '- `PATH` includes `/home/agentuity/.local/bin` and `/home/agentuity/.agentuity/bin`' - ); - lines.push(''); - lines.push('**Ports:**'); - lines.push( - '- `3000: This default port that the project is running. Use PORT environment if not available' - ); - lines.push(''); - - // Add note about metadata - lines.push('## For AI Coding Agents'); - lines.push(''); - lines.push( - 'This is production-ready compiled code. For development and source code modifications:' - ); - lines.push(''); - if (metadata.deployment?.git?.repo) { - lines.push(`1. Clone the source repository: ${metadata.deployment.git.repo}`); - lines.push('2. Make changes to source files in `src/`'); - lines.push('3. Run `agentuity build` to rebuild this bundle'); - } else { - lines.push('1. Locate the original source repository'); - lines.push('2. Make changes to source files in `src/`'); - lines.push('3. Run `agentuity build` to rebuild this bundle'); - } - lines.push(''); - lines.push( - 'See `agentuity.metadata.json` for detailed information about agents, routes, and schemas.' - ); - - return lines.join('\n'); -} - -/** - * Write agentuity.metadata.json to .agentuity directory - */ -export function writeMetadataFile( - rootDir: string, - metadata: BuildMetadata, - dev: boolean, - logger: Logger -): void { - const agentuityDir = join(rootDir, '.agentuity'); - - // Ensure .agentuity directory exists - if (!existsSync(agentuityDir)) { - mkdirSync(agentuityDir, { recursive: true }); - } - - const metadataPath = join(agentuityDir, 'agentuity.metadata.json'); - const metadataContent = dev ? JSON.stringify(metadata, null, 2) : JSON.stringify(metadata); - - writeFileSync(metadataPath, metadataContent, 'utf-8'); - logger.trace('Wrote agentuity.metadata.json'); - - // Write AGENTS.md for AI coding agents - if (!dev) { - const agentMdPath = join(agentuityDir, 'AGENTS.md'); - const agentMdContent = generateAgentsMd(metadata); - - writeFileSync(agentMdPath, agentMdContent, 'utf-8'); - logger.trace('Wrote AGENTS.md'); - } -} - -/** - * Generate .routemapping.json for runtime route tracking - */ -export function generateRouteMapping( - rootDir: string, - routes: RouteMetadata[], - dev: boolean, - logger: Logger -): void { - const agentuityDir = join(rootDir, '.agentuity'); - - // Ensure .agentuity directory exists - if (!existsSync(agentuityDir)) { - mkdirSync(agentuityDir, { recursive: true }); - } - - const routeMapping: Record = {}; - for (const route of routes) { - routeMapping[`${route.method} ${route.path}`] = route.id; - } - - const routeMappingPath = join(agentuityDir, '.routemapping.json'); - const routeMappingContent = dev - ? JSON.stringify(routeMapping, null, 2) - : JSON.stringify(routeMapping); - - writeFileSync(routeMappingPath, routeMappingContent, 'utf-8'); - logger.trace('Wrote .routemapping.json'); -} diff --git a/packages/cli/src/cmd/build/vite/prompt-generator.ts b/packages/cli/src/cmd/build/vite/prompt-generator.ts deleted file mode 100644 index 41fc93ae6..000000000 --- a/packages/cli/src/cmd/build/vite/prompt-generator.ts +++ /dev/null @@ -1,169 +0,0 @@ -/** - * Prompt Generator - * - * Generates AGENTS.md prompt files in .agents/agentuity/sdk/[type]/ directories. - * Also creates reference files in src/[type]/AGENTS.md (write-once, only if missing). - * - * Uses hash tracking to detect template changes in .agents/ folder. - * Reference files in src/ are never overwritten once created. - * - * Only runs in dev mode. - */ - -import { join, dirname } from 'node:path'; -import { mkdir } from 'node:fs/promises'; -import type { Logger } from '../../../types'; -import { needsUpdate } from '../../ai/prompt/version'; -import { - generateLLMPrompt as generateAgentPrompt, - getPromptContent as getAgentContent, -} from '../../ai/prompt/agent'; -import { - generateLLMPrompt as generateApiPrompt, - getPromptContent as getApiContent, -} from '../../ai/prompt/api'; -import { - generateLLMPrompt as generateWebPrompt, - getPromptContent as getWebContent, -} from '../../ai/prompt/web'; - -interface PromptConfig { - name: string; - srcFolder: string; - generate: () => string; - getContent: () => string; -} - -const PROMPTS: PromptConfig[] = [ - { - name: 'agent', - srcFolder: 'agent', - generate: generateAgentPrompt, - getContent: getAgentContent, - }, - { - name: 'api', - srcFolder: 'api', - generate: generateApiPrompt, - getContent: getApiContent, - }, - { - name: 'web', - srcFolder: 'web', - generate: generateWebPrompt, - getContent: getWebContent, - }, -]; - -/** - * Generate the reference file content that points to .agents/ - */ -function generateReferenceContent(name: string): string { - return `See [.agents/agentuity/sdk/${name}/AGENTS.md](../../.agents/agentuity/sdk/${name}/AGENTS.md) for Agentuity ${name} development guidelines. -`; -} - -/** - * Generate or update prompt files. - * - * - .agents/agentuity/sdk/[type]/AGENTS.md: Full content, updated when hash differs - * - src/[type]/AGENTS.md: Reference file, only created if missing - * - * @param srcDir - The src/ directory path - * @param logger - Logger for output - */ -export async function generatePromptFiles(srcDir: string, logger: Logger): Promise { - const projectRoot = dirname(srcDir); - - for (const prompt of PROMPTS) { - await generatePromptFile(projectRoot, srcDir, prompt, logger); - } -} - -async function generatePromptFile( - projectRoot: string, - srcDir: string, - config: PromptConfig, - logger: Logger -): Promise { - const srcFolderPath = join(srcDir, config.srcFolder); - - // Check if the src folder exists (e.g., src/agent/) - try { - const stat = await Bun.$`test -d ${srcFolderPath}`.nothrow(); - if (stat.exitCode !== 0) { - logger.trace(`Skipping ${config.name} prompt - src/${config.srcFolder}/ does not exist`); - return; - } - } catch { - logger.trace(`Skipping ${config.name} prompt - src/${config.srcFolder}/ does not exist`); - return; - } - - // Generate files - await generateAgentsFile(projectRoot, config, logger); - await generateReferenceFile(srcFolderPath, config, logger); -} - -/** - * Generate/update the .agents/agentuity/sdk/[type]/AGENTS.md file. - * Overwrites if hash differs from source template. - */ -async function generateAgentsFile( - projectRoot: string, - config: PromptConfig, - logger: Logger -): Promise { - const agentsDir = join(projectRoot, '.agents', 'agentuity', 'sdk', config.name); - const filePath = join(agentsDir, 'AGENTS.md'); - - const file = Bun.file(filePath); - const fileExists = await file.exists(); - - if (!fileExists) { - // File doesn't exist - create it - await mkdir(agentsDir, { recursive: true }); - const content = config.generate(); - await Bun.write(filePath, content); - logger.debug(`Generated .agents/agentuity/sdk/${config.name}/AGENTS.md`); - return; - } - - // File exists - check if it needs to be updated - const existingContent = await file.text(); - const sourceContent = config.getContent(); - - if (needsUpdate(existingContent, sourceContent)) { - const content = config.generate(); - await Bun.write(filePath, content); - logger.debug(`Updated .agents/agentuity/sdk/${config.name}/AGENTS.md`); - return; - } - - logger.trace(`Skipping ${config.name} prompt - already up to date`); -} - -/** - * Generate the src/[type]/AGENTS.md reference file. - * Only creates if missing (write-once). - */ -async function generateReferenceFile( - srcFolderPath: string, - config: PromptConfig, - logger: Logger -): Promise { - const filePath = join(srcFolderPath, 'AGENTS.md'); - - const file = Bun.file(filePath); - const fileExists = await file.exists(); - - if (fileExists) { - logger.trace(`Skipping src/${config.srcFolder}/AGENTS.md - already exists`); - return; - } - - // Create the reference file - const content = generateReferenceContent(config.name); - await Bun.write(filePath, content); - logger.debug(`Generated src/${config.srcFolder}/AGENTS.md (reference)`); -} diff --git a/packages/cli/src/cmd/build/vite/public-asset-path-plugin.ts b/packages/cli/src/cmd/build/vite/public-asset-path-plugin.ts deleted file mode 100644 index 4df3356ce..000000000 --- a/packages/cli/src/cmd/build/vite/public-asset-path-plugin.ts +++ /dev/null @@ -1,209 +0,0 @@ -/** - * Vite plugin to fix incorrect public asset paths - * - * Developers should use /public/ paths for static assets from src/web/public/. - * In production, these paths are transformed to CDN URLs. - * - * This plugin: - * 1. During build: Rewrites /public/* paths to CDN URLs - * 2. During dev: Warns only about incorrect source paths (src/web/public/) - * - * Supported patterns (work in dev, rewritten to CDN in production): - * - '/public/foo.svg' → CDN URL (recommended) - * - './public/foo.svg' → CDN URL - * - 'url(/public/foo.svg)' → CDN URL (CSS unquoted) - * - 'url(./public/foo.svg)' → CDN URL (CSS unquoted) - * - * Incorrect patterns (warned in dev, rewritten in production): - * - '/src/web/public/foo.svg' → CDN URL - * - './src/web/public/foo.svg' → CDN URL - * - 'src/web/public/foo.svg' → CDN URL - */ - -import type { Plugin } from 'vite'; - -export interface PublicAssetPathPluginOptions { - /** Whether to show warnings in dev mode (default: true) */ - warnInDev?: boolean; - /** CDN base URL for production builds (e.g., 'https://cdn.agentuity.com/{deploymentId}/client/') */ - cdnBaseUrl?: string; -} - -interface PathPattern { - regex: RegExp; - description: string; - /** Replacement template - use {base} for the target base URL */ - replacement: string; -} - -/** - * Patterns that are incorrect - reference source paths directly - */ -function createIncorrectPatterns(): PathPattern[] { - return [ - // '/src/web/public/...' or './src/web/public/...' or 'src/web/public/...' - { - regex: /(['"`])(?:\.?\/)?src\/web\/public\//g, - description: 'src/web/public/', - replacement: '$1{base}', - }, - ]; -} - -/** - * Patterns that need rewriting for production CDN - * Both patterns simply replace the prefix while preserving the rest of the path naturally. - */ -function createPublicPatterns(): PathPattern[] { - return [ - // './public/...' (relative public path) - replace prefix, keep rest - { - regex: /(['"`])\.\/public\//g, - description: './public/', - replacement: '$1{base}', - }, - // '/public/...' (absolute public path) - replace prefix, keep rest - { - regex: /(['"`])\/public\//g, - description: '/public/', - replacement: '$1{base}', - }, - // CSS url(/public/...) — unquoted path inside url() - { - regex: /url\(\/public\//g, - description: 'url(/public/)', - replacement: 'url({base}', - }, - // CSS url(./public/...) — unquoted relative path inside url() - { - regex: /url\(\.\/public\//g, - description: 'url(./public/)', - replacement: 'url({base}', - }, - ]; -} - -/** - * Vite plugin that fixes public asset paths and rewrites to CDN URLs - * - * Rewrites all public asset paths to CDN URLs in production. - * - * @example - * // In vite config: - * plugins: [publicAssetPathPlugin({ cdnBaseUrl: 'https://cdn.example.com/deploy/client/' })] - * - * // In code, use /public/ paths: - * - * - * // Transforms in production: - * // '/public/logo.svg' → 'https://cdn.example.com/deploy/client/logo.svg' - */ -export function publicAssetPathPlugin(options: PublicAssetPathPluginOptions = {}): Plugin { - const { warnInDev = true, cdnBaseUrl } = options; - - let isDev = false; - const warnedFiles = new Map>(); // file -> set of patterns warned - - return { - name: 'agentuity:public-asset-path', - - configResolved(config) { - isDev = config.command === 'serve'; - }, - - transform(code, id) { - // Only transform files in src/web (browser code) - if (!id.includes('/src/web/') && !id.includes('\\src\\web\\')) { - return null; - } - - // Quick check: does the code contain any patterns we care about? - const hasIncorrectSourcePaths = code.includes('src/web/public/'); - const hasPublicPaths = code.includes('/public/') || code.includes('./public/'); - - if (!hasIncorrectSourcePaths && !hasPublicPaths) { - return null; - } - - // In dev mode, only warn about incorrect source paths (src/web/public/) - // /public/ and ./public/ paths work correctly in dev mode - if (isDev) { - if (warnInDev && hasIncorrectSourcePaths) { - const patterns = createIncorrectPatterns(); - const foundPatterns: string[] = []; - - for (const { regex, description } of patterns) { - if (regex.test(code)) { - foundPatterns.push(description); - } - } - - if (foundPatterns.length > 0) { - const fileWarnings = warnedFiles.get(id) || new Set(); - const newWarnings = foundPatterns.filter((p) => !fileWarnings.has(p)); - - if (newWarnings.length > 0) { - for (const p of newWarnings) { - fileWarnings.add(p); - } - warnedFiles.set(id, fileWarnings); - - this.warn( - `Found incorrect asset path(s) in ${id}:\n` + - newWarnings.map((p) => ` - '${p}' should be '/public/'`).join('\n') + - `\nUse '/public/...' paths for static assets.` - ); - } - } - } - // In dev mode, never transform - Vite serves from source paths - // and the Bun server proxies /public/* to Vite - return null; - } - - // Build mode: transform paths to CDN URLs - let transformed = code; - - // Determine target URL: CDN base if provided, otherwise /public/ - const targetBase = cdnBaseUrl - ? cdnBaseUrl.endsWith('/') - ? cdnBaseUrl - : `${cdnBaseUrl}/` - : '/public/'; - - // Transform incorrect source paths (src/web/public/) → CDN - if (hasIncorrectSourcePaths) { - const patterns = createIncorrectPatterns(); - for (const { regex, replacement } of patterns) { - const replaceRegex = new RegExp(regex.source, regex.flags); - transformed = transformed.replace( - replaceRegex, - replacement.replace('{base}', targetBase) - ); - } - } - - // Transform public paths → CDN - if (hasPublicPaths) { - const publicPatterns = createPublicPatterns(); - for (const { regex, replacement } of publicPatterns) { - const replaceRegex = new RegExp(regex.source, regex.flags); - transformed = transformed.replace( - replaceRegex, - replacement.replace('{base}', targetBase) - ); - } - } - - // Return transformed code if changed - if (transformed !== code) { - return { - code: transformed, - map: null, - }; - } - - return null; - }, - }; -} diff --git a/packages/cli/src/cmd/build/vite/route-discovery.ts b/packages/cli/src/cmd/build/vite/route-discovery.ts deleted file mode 100644 index be955da40..000000000 --- a/packages/cli/src/cmd/build/vite/route-discovery.ts +++ /dev/null @@ -1,271 +0,0 @@ -/** - * Route Discovery — Explicit Routing Only - * - * Discovers routes from `createApp({ router })` by importing the router - * module at build time and reading `router.routes` from the Hono instance. - * - * File-based routing (scanning src/api/**) is no longer supported. - */ - -import { join, relative } from 'node:path'; -import { createHash } from 'node:crypto'; -import type { Logger } from '../../../types'; -import { toForwardSlash } from '../../../utils/normalize-path'; -import { detectExplicitRouter, type AppRouterDetection } from '../app-router-detector'; - -export interface RouteMetadata { - id: string; - filename: string; - path: string; - method: string; - version: string; - type: 'api' | 'sms' | 'email' | 'cron' | 'websocket' | 'sse' | 'stream'; - agentIds?: string[]; - config?: Record; - schema?: { - input?: string; - output?: string; - }; -} - -/** - * Extract path parameters from a route path. - * Matches patterns like :id, :userId, :id?, *path, etc. - */ -export function extractPathParams(path: string): string[] { - const params: string[] = []; - const parts = path.split('/'); - for (const part of parts) { - if (part.startsWith(':')) { - params.push(part.replace(/^:|[?+*]$/g, '')); - } else if (part.startsWith('*') && part.length > 1) { - params.push(part.substring(1).replace(/[?+*]$/g, '')); - } - } - return params; -} - -/** - * Generate a deterministic route ID from project/deployment/type/method/filename/path/version. - * Must match the format used by the platform (prefix: route_, SHA1 hash of all components). - */ -export function generateRouteId( - projectId: string, - deploymentId: string, - type: string, - method: string, - filename: string, - path: string, - version: string -): string { - const hasher = new Bun.CryptoHasher('sha1'); - for (const val of [projectId, deploymentId, type, method, filename, path, version]) { - hasher.update(val); - } - return `route_${hasher.digest().toHex()}`; -} - -/** - * Generate a version hash from file contents. - */ -async function generateFileVersion(filePath: string): Promise { - try { - const content = await Bun.file(filePath).text(); - return createHash('sha256').update(content).digest('hex').substring(0, 16); - } catch { - return 'unknown'; - } -} - -/** - * Detect route type from handler metadata or method. - * Checks for route-meta symbol stamped by handler wrappers (websocket, sse, stream, cron). - */ -function detectRouteType(handler: unknown): 'api' | 'websocket' | 'sse' | 'stream' | 'cron' { - // Check for route-meta symbol (future: handler wrappers will tag this) - if (typeof handler === 'function') { - const meta = (handler as any)[Symbol.for('agentuity:route-meta')]; - if (meta?.type) { - return meta.type; - } - } - - // Heuristic: upgradeWebSocket handler has a specific name - if (typeof handler === 'function' && handler.name === 'upgradeWebSocket') { - return 'websocket'; - } - - return 'api'; -} - -/** - * Discover all routes from explicit router mounts in createApp({ router }). - * - * Imports each router module at build time and reads `router.routes` from - * the Hono instance to extract method, path, and route type. - * - * @throws If no explicit router is detected in app.ts - */ -export async function discoverRoutes( - srcDir: string, - projectId: string, - deploymentId: string, - logger: Logger -): Promise<{ - routes: RouteMetadata[]; - explicitRouter?: AppRouterDetection; -}> { - const rootDir = join(srcDir, '..'); - - const detection = await detectExplicitRouter(rootDir, logger); - if (!detection.detected || detection.mounts.length === 0) { - logger.debug('No explicit router detected in createApp() — no routes to discover'); - return { routes: [] }; - } - - logger.debug( - 'Using explicit router detection (%d mount(s) from createApp)', - detection.mounts.length - ); - - const routes: RouteMetadata[] = []; - - const seenRoutes = new Set(); - - for (const mount of detection.mounts) { - try { - // Import the router module at build time - const routerModule = await import(mount.routerFile); - const router = routerModule.default ?? routerModule; - - // Validate it's a Hono instance with routes - if (!router || !Array.isArray(router.routes)) { - logger.warn( - 'Router module at %s does not export a Hono instance with routes', - mount.routerFile - ); - continue; - } - - const relFile = './' + toForwardSlash(relative(srcDir, mount.routerFile)); - const version = await generateFileVersion(mount.routerFile); - - // Filter to actual route handlers (not middleware — middleware uses '*' or ALL method) - const routeEntries = router.routes.filter( - (r: any) => r.method !== 'ALL' && r.path !== '*' - ); - - for (const route of routeEntries) { - const method = String(route.method).toLowerCase(); - // Combine mount path with route path - let fullPath = route.path; - if (mount.path !== '/' && !fullPath.startsWith(mount.path)) { - fullPath = mount.path + (fullPath.startsWith('/') ? fullPath : '/' + fullPath); - } - - // Deduplicate (Hono may register same route multiple times for middleware) - const routeKey = `${method.toUpperCase()} ${fullPath}`; - if (seenRoutes.has(routeKey)) continue; - seenRoutes.add(routeKey); - - const routeType = detectRouteType(route.handler); - const rel = toForwardSlash(relative(rootDir, mount.routerFile)); - const id = generateRouteId( - projectId, - deploymentId, - routeType, - method, - rel, - fullPath, - version - ); - - // Extract type-specific config from route metadata - const meta = - typeof route.handler === 'function' - ? (route.handler as any)[Symbol.for('agentuity:route-meta')] - : undefined; - const config = meta?.schedule ? { expression: meta.schedule } : undefined; - - routes.push({ - id, - filename: toForwardSlash(relative(rootDir, mount.routerFile)), - path: fullPath, - method, - version, - type: routeType, - config, - }); - } - - logger.trace( - 'Discovered %d route(s) from explicit mount at %s (%s)', - routeEntries.length, - mount.path, - relFile - ); - } catch (error) { - logger.warn( - 'Failed to import router at %s: %s', - mount.routerFile, - error instanceof Error ? error.message : String(error) - ); - } - } - - // Check for route conflicts - const conflicts = detectRouteConflicts(routes); - if (conflicts.length > 0) { - logger.error('Route conflicts detected:'); - for (const conflict of conflicts) { - logger.error(' %s', conflict.message); - for (const route of conflict.routes) { - logger.error(' - %s %s in %s', route.method, route.path, route.filename); - } - } - throw new Error( - `Found ${conflicts.length} route conflict(s). Fix the conflicts and try again.` - ); - } - - logger.debug('Discovered %d route(s) via explicit router detection', routes.length); - return { routes, explicitRouter: detection }; -} - -export interface RouteConflict { - type: 'duplicate'; - routes: Array<{ method: string; path: string; filename: string }>; - message: string; -} - -/** - * Detect conflicts between routes. - */ -export function detectRouteConflicts( - routes: Array<{ method: string; path: string; filename: string }> -): RouteConflict[] { - const conflicts: RouteConflict[] = []; - - const methodPathMap = new Map>(); - - for (const route of routes) { - const key = `${route.method.toUpperCase()} ${route.path}`; - if (!methodPathMap.has(key)) { - methodPathMap.set(key, []); - } - methodPathMap.get(key)!.push({ path: route.path, filename: route.filename }); - } - - for (const [methodPath, routeList] of methodPathMap.entries()) { - if (routeList.length > 1) { - const [method = 'UNKNOWN'] = methodPath.split(' ', 2); - conflicts.push({ - type: 'duplicate', - routes: routeList.map((r) => ({ method, path: r.path, filename: r.filename })), - message: `Duplicate route: ${methodPath} defined in ${routeList.length} files`, - }); - } - } - - return conflicts; -} diff --git a/packages/cli/src/cmd/build/vite/server-bundler.ts b/packages/cli/src/cmd/build/vite/server-bundler.ts deleted file mode 100644 index 8f9beacdc..000000000 --- a/packages/cli/src/cmd/build/vite/server-bundler.ts +++ /dev/null @@ -1,481 +0,0 @@ -/** - * Server bundler using Bun.build with external dependency management - * Handles installing externals into .agentuity/node_modules for production - */ - -import { join } from 'node:path'; -import { readdir, stat } from 'node:fs/promises'; -import type { Logger } from '../../../types'; -import type { BunPlugin, BuildOutput } from 'bun'; -import { generatePatches, applyPatch, buildPatchFilter } from '../patch'; -import { getLoaderForPath, rewriteBunImports, rewritePgImports } from './db-rewrite'; - -/** - * Format a Bun build log (BuildMessage or ResolveMessage) into a readable string - */ -export function formatBuildLog(log: BuildMessage | ResolveMessage): string { - const parts: string[] = []; - - // For ResolveMessage, format with specifier info - if (log.name === 'ResolveMessage') { - const resolveLog = log as ResolveMessage; - if (resolveLog.specifier) { - parts.push(`Could not resolve "${resolveLog.specifier}"`); - // Use referrer if available, otherwise fall back to position.file - const referrer = resolveLog.referrer || resolveLog.position?.file; - if (referrer) { - parts.push(` imported from: ${referrer}`); - } - } else if (resolveLog.message) { - parts.push(resolveLog.message); - } - } else if (log.message) { - parts.push(log.message); - } - - // Add position info if available (only if we haven't already shown referrer from position) - if (log.position && log.name !== 'ResolveMessage') { - parts.push(` at ${log.position.file}:${log.position.line}:${log.position.column}`); - } - - return parts.join('\n'); -} - -export interface ServerBundleOptions { - rootDir: string; - dev: boolean; - logger: Logger; -} - -/** - * Install external dependencies and build server bundle - * For production: installs externals into .agentuity/node_modules BEFORE bundling - */ -export async function installExternalsAndBuild(options: ServerBundleOptions): Promise { - const { rootDir, dev, logger } = options; - - logger.debug('[server-bundler] Starting server bundle process'); - - const entryPath = join(rootDir, 'app.ts'); - const outDir = join(rootDir, '.agentuity'); - - logger.debug(`[server-bundler] Entry: ${entryPath}, OutDir: ${outDir}`); - - // Runtime externals: native modules and packages that need to be external - // These WILL be installed into .agentuity/node_modules for production - const runtimeExternals = ['bun', 'fsevents', 'chromium-bidi', 'sharp', 'ws']; - - // Build tool externals: packages that should be external but NOT installed - // These are devDependencies that may exist in node_modules but aren't needed at runtime - // NOTE: @babel/* is NOT externalized because some runtime deps (e.g., puppeteer → cosmiconfig → parse-json) - // require @babel/code-frame at runtime. Babel packages are pure JS and bundle fine. - const buildToolExternals = ['lightningcss', '@vitejs/*', 'vite', 'esbuild']; - - // Load custom externals and define from agentuity.config.ts if it exists - const customExternals: string[] = []; - let userDefine: Record = {}; - let dbRewriteEnabled = true; - const configPath = join(rootDir, 'agentuity.config.ts'); - if (await Bun.file(configPath).exists()) { - try { - const config = await import(configPath); - const userConfig = config.default; - - // Load custom externals (legacy build.external support) - if (userConfig?.build?.external && Array.isArray(userConfig.build.external)) { - customExternals.push( - ...userConfig.build.external.filter((e: unknown) => typeof e === 'string') - ); - } - - // Load custom define values - if (userConfig?.define && typeof userConfig.define === 'object') { - userDefine = userConfig.define; - if (Object.keys(userDefine).length > 0) { - logger.debug( - 'Loaded %d custom define(s) from agentuity.config.ts for server bundle', - Object.keys(userDefine).length - ); - } - } - - // Allow users to disable db rewrite plugin - if (userConfig?.build?.dbRewrite === false) { - dbRewriteEnabled = false; - logger.debug('DB rewrite: disabled via agentuity.config.ts'); - } - } catch (error) { - logger.debug('Failed to load agentuity.config.ts for externals:', error); - } - } - - // Combine runtime externals with custom externals for installation - const installPatterns = [...runtimeExternals, ...customExternals]; - - // All external patterns (runtime + build tools + custom) for Bun.build - const allExternalPatterns = [...runtimeExternals, ...buildToolExternals, ...customExternals]; - let external = allExternalPatterns; - - // For production builds: install ONLY runtime externals, then discover full dependency tree - if (!dev) { - logger.debug('Installing externalized packages to discover full dependency tree...'); - - // Step 1: Collect packages matching RUNTIME external patterns (skip build tools) - const externalInstalls: string[] = []; - for (const pattern of installPatterns) { - if (pattern.endsWith('/*')) { - // Pattern like @org/* - install all packages under that scope - const prefix = pattern.slice(0, -2); - const nmDir = join(rootDir, 'node_modules', prefix); - const nmDirExists = await stat(nmDir) - .then((s) => s.isDirectory()) - .catch(() => false); - if (nmDirExists) { - const entries = await readdir(nmDir); - for (const entry of entries) { - const pkgName = `${prefix}/${entry}`; - const pkgJsonExists = await Bun.file( - join(rootDir, 'node_modules', pkgName, 'package.json') - ).exists(); - if (pkgJsonExists) { - externalInstalls.push(pkgName); - } - } - } - } else { - // Exact package name - const pkgJsonExists = await Bun.file( - join(rootDir, 'node_modules', pattern, 'package.json') - ).exists(); - if (pkgJsonExists) { - externalInstalls.push(pattern); - } - } - } - - // Step 2: Write minimal package.json and install externals - if (externalInstalls.length > 0) { - const pkgPath = join(rootDir, 'package.json'); - const pkgContents = await Bun.file(pkgPath).json(); - - await Bun.write( - join(outDir, 'package.json'), - JSON.stringify({ name: pkgContents.name, version: pkgContents.version }, null, 2) - ); - - logger.debug( - 'Installing %d packages: %s', - externalInstalls.length, - externalInstalls.join(', ') - ); - - // Collect platform-specific optional dependencies for native modules - // Bun's --target flag doesn't correctly install cross-platform optional deps, - // so we need to explicitly install them (e.g., @img/sharp-linux-x64 for sharp) - const platformOptionalDeps: string[] = []; - for (const pkg of externalInstalls) { - const pkgJsonPath = join(rootDir, 'node_modules', pkg, 'package.json'); - if (await Bun.file(pkgJsonPath).exists()) { - try { - const pkgJson = await Bun.file(pkgJsonPath).json(); - if (pkgJson.optionalDependencies) { - // Find linux-x64 specific optional dependencies (glibc, not musl) - // Match patterns like: @img/sharp-linux-x64, @img/sharp-libvips-linux-x64 - for (const optDep of Object.keys(pkgJson.optionalDependencies)) { - if (optDep.includes('linux-x64') && !optDep.includes('musl')) { - platformOptionalDeps.push(optDep); - } - } - } - } catch { - // Ignore parse errors - } - } - } - - if (platformOptionalDeps.length > 0) { - logger.debug( - 'Found %d platform-specific optional deps: %s', - platformOptionalDeps.length, - platformOptionalDeps.join(', ') - ); - } - - // Use npm with --force for cross-platform installs since Bun's --target flag - // doesn't correctly handle optional dependencies for other platforms - const allPackagesToInstall = [...externalInstalls, ...platformOptionalDeps]; - logger.debug('Installing with npm (cross-platform): %s', allPackagesToInstall.join(', ')); - - const proc = Bun.spawn( - [ - 'npm', - 'install', - '--no-save', - '--ignore-scripts', - '--os=linux', - '--cpu=x64', - '--force', - ...allPackagesToInstall, - ], - { - cwd: outDir, - stdout: 'pipe', - stderr: 'pipe', - } - ); - - const exitCode = await proc.exited; - - if (exitCode !== 0) { - const stderr = await new Response(proc.stderr).text(); - throw new Error( - `Failed to install external dependencies (exit code ${exitCode}):\n${stderr}` - ); - } - - // Step 3: Scan what actually got installed (includes transitive dependencies) - const installedNmDir = join(outDir, 'node_modules'); - const installedNmDirExists = await stat(installedNmDir) - .then((s) => s.isDirectory()) - .catch(() => false); - if (installedNmDirExists) { - const allInstalled: string[] = []; - - // Recursively find all installed packages - const scanDir = async (dir: string, prefix = '') => { - const entries = await readdir(dir, { withFileTypes: true }); - for (const entry of entries) { - if (entry.isDirectory()) { - const pkgName = prefix ? `${prefix}/${entry.name}` : entry.name; - - // Check if this is a package (has package.json) - const pkgJsonExists = await Bun.file( - join(dir, entry.name, 'package.json') - ).exists(); - if (pkgJsonExists) { - allInstalled.push(pkgName); - } - - // Recurse into scoped packages (@org/package) - if (entry.name.startsWith('@')) { - await scanDir(join(dir, entry.name), entry.name); - } - } - } - }; - - await scanDir(installedNmDir); - logger.debug( - 'Discovered %d total packages (including transitive deps)', - allInstalled.length - ); - - // Step 4: Use ALL installed packages + build tool externals for bundling - external = [...allInstalled, ...buildToolExternals]; - } - } - } else { - // Dev mode: just use all external patterns as-is - external = allExternalPatterns; - } - - // Build server bundle - logger.debug('Building server with Bun.build...'); - logger.debug(`External packages (${external.length}): ${external.join(', ')}`); - - // Create Bun plugin to apply LLM patches during bundling - const patches = generatePatches(); - logger.debug(`Loaded ${patches.size} patch(es) for LLM providers`); - - const patchPlugin: BunPlugin = { - name: 'agentuity:patch', - setup(build) { - for (const [, patch] of patches) { - build.onLoad( - { - filter: buildPatchFilter(patch.module, patch.filename), - namespace: 'file', - }, - async (args) => { - if (build.config.target !== 'bun') { - return; - } - logger.trace(`Applying patch to: ${args.path}`); - const [contents, loader] = await applyPatch(args.path, patch); - return { - contents, - loader, - }; - } - ); - } - }, - }; - - // Detect files belonging to @agentuity/postgres or @agentuity/drizzle. - // Matches both published paths (node_modules/@agentuity/postgres/) and - // symlinked/monorepo paths (packages/postgres/dist/, packages/postgres/src/). - const isAgentuityPostgres = (filePath: string) => - filePath.includes('/@agentuity/postgres/') || - filePath.includes('\\@agentuity\\postgres\\') || - filePath.includes('/packages/postgres/'); - - const isAgentuityDrizzle = (filePath: string) => - filePath.includes('/@agentuity/drizzle/') || - filePath.includes('\\@agentuity\\drizzle\\') || - filePath.includes('/packages/drizzle/'); - - const dbRewritePlugin: BunPlugin = { - name: 'agentuity:db-rewrite', - setup(build) { - build.onResolve({ filter: /^drizzle-orm\/bun-sql$/ }, (args) => { - // Don't redirect if the importer is @agentuity/drizzle itself — that would create a cycle. - // Matches both published packages in node_modules and symlinked monorepo paths. - if (args.importer && isAgentuityDrizzle(args.importer)) { - return; // Let default resolution handle it - } - // Resolve to @agentuity/drizzle — the bundler will find it in node_modules - // and bundle it into .agentuity/app.js (NOT kept external). - const resolved = import.meta.resolveSync('@agentuity/drizzle', args.importer); - logger.debug('DB rewrite: redirected drizzle-orm/bun-sql → @agentuity/drizzle'); - return { path: resolved }; - }); - - build.onLoad( - { - filter: /\.[cm]?[jt]sx?$/, - namespace: 'file', - }, - async (args) => { - // Skip node_modules and the rewrite-target packages themselves. - // The symlink check is needed because symlinked packages (e.g. via - // workspace links) resolve to paths outside node_modules/ (like - // ../../sdk/packages/postgres/dist/) and would otherwise be rewritten, - // creating circular imports (postgres importing from itself). - if ( - args.path.includes('/node_modules/') || - isAgentuityPostgres(args.path) || - isAgentuityDrizzle(args.path) - ) { - return; - } - const contents = await Bun.file(args.path).text(); - let updated = contents; - let didRewrite = false; - - const bunResult = rewriteBunImports(updated); - if (bunResult.changed) { - logger.debug('DB rewrite: redirected bun → @agentuity/postgres'); - updated = bunResult.contents; - didRewrite = true; - } - - const pgResult = rewritePgImports(updated); - if (pgResult.changed) { - logger.debug('DB rewrite: redirected pg → @agentuity/postgres'); - updated = pgResult.contents; - didRewrite = true; - } - - if (!didRewrite) { - return; - } - - return { - contents: updated, - loader: getLoaderForPath(args.path) as Bun.Loader, - }; - } - ); - }, - }; - - const buildConfig = { - entrypoints: [entryPath], - outdir: outDir, // Output to .agentuity/ directly (not .agentuity/server/) - target: 'bun' as const, - format: 'esm' as const, - splitting: false, // Disable splitting - causes issues with externalized CommonJS packages - minify: !dev, - sourcemap: (dev ? 'inline' : 'external') as 'inline' | 'external', - external, - // CRITICAL: Disable environment variable inlining for server builds - // Server code must read process.env at RUNTIME, not have values baked in at build time - // Without this, NODE_ENV and other env vars get inlined as string literals - env: 'disable' as const, - define: userDefine, // Include custom define values from agentuity.config.ts - plugins: dbRewriteEnabled ? [patchPlugin, dbRewritePlugin] : [patchPlugin], - naming: { - entry: 'app.js', // Output as app.js (not app.generated.js) - }, - }; - - logger.debug( - `Bun.build config: ${JSON.stringify({ ...buildConfig, external: `[${external.length} packages]` }, null, 2)}` - ); - - // WORKAROUND: Temporarily delete NODE_ENV to prevent Bun.build from inlining it - // See: https://github.com/oven-sh/bun/issues/20183 - // Even with env: 'disable', Bun.build still inlines NODE_ENV at build time - const originalNodeEnv = process.env.NODE_ENV; - delete process.env.NODE_ENV; - - // Verify entry point exists before building - if (!(await Bun.file(entryPath).exists())) { - throw new Error(`Entry point not found: ${entryPath}`); - } - - logger.debug(`Entry point verified: ${entryPath}`); - - let result: BuildOutput; - try { - result = await Bun.build(buildConfig); - } catch (error: unknown) { - // Restore NODE_ENV after build attempt - if (originalNodeEnv !== undefined) { - process.env.NODE_ENV = originalNodeEnv; - } - - // Handle AggregateError with build/resolve messages - if (error instanceof AggregateError && error.errors) { - const formattedErrors = error.errors - .map((err) => { - // Try to use formatBuildLog if it looks like a BuildMessage/ResolveMessage - if (err && typeof err === 'object' && 'name' in err) { - const formatted = formatBuildLog(err as BuildMessage | ResolveMessage); - if (formatted) return formatted; - } - // Fallback for other error types - const parts = [err.message || err.text || 'Unknown error']; - if (err.position) { - parts.push( - ` at ${err.position.file}:${err.position.line}:${err.position.column}` - ); - } - return parts.join('\n'); - }) - .filter(Boolean) - .join('\n'); - - throw new Error(formattedErrors || 'Build failed'); - } - - throw error; - } - - // Restore NODE_ENV after successful build - if (originalNodeEnv !== undefined) { - process.env.NODE_ENV = originalNodeEnv; - } - - if (!result.success) { - const errorMessages = result.logs - .map((log) => formatBuildLog(log)) - .filter(Boolean) - .join('\n'); - - throw new Error(errorMessages || 'Build failed with no error messages'); - } - - logger.debug(`Server build complete: ${result.outputs.length} files`); -} diff --git a/packages/cli/src/cmd/build/vite/static-renderer.ts b/packages/cli/src/cmd/build/vite/static-renderer.ts deleted file mode 100644 index eb49143e8..000000000 --- a/packages/cli/src/cmd/build/vite/static-renderer.ts +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Static Renderer - * - * When `src/web/entry-server.tsx` exists, this module: - * 1. Runs a Vite SSR build (as a subprocess to avoid in-process Bun/Vite issues) - * 2. Imports the built entry-server.js - * 3. Discovers routes to pre-render: - * - If `routeTree` is exported: auto-discovers all non-parameterized routes - * - If `getStaticPaths()` is exported: merges those paths in (for parameterized routes) - * - If neither: throws an error - * 4. Calls render(url) for each route - * 5. Replaces in the client template with rendered HTML - * 6. Writes pre-rendered HTML files to .agentuity/client/ - */ - -import { join } from 'node:path'; -import { mkdirSync, writeFileSync, readFileSync, existsSync, rmSync } from 'node:fs'; -import type { Logger } from '../../../types'; - -/** Minimal shape of a TanStack Router route tree node. */ -interface RouteTreeNode { - path?: string; - options?: { path?: string }; - children?: Record; -} - -/** - * Walks a TanStack Router route tree and extracts all non-parameterized paths. - * Skips layout routes (no path) and parameterized routes (containing $). - * - * Accumulates the full URL path through the parent chain, since child routes - * under layout routes have relative paths (e.g., '/key-value' under a - * '/reference/api' layout should resolve to '/reference/api/key-value'). - */ -function extractRoutePaths(node: RouteTreeNode): string[] { - const paths = new Set(); - - function walk(route: RouteTreeNode, parentPath: string) { - const segment: string | undefined = route.path ?? route.options?.path; - - // Build the full path by accumulating segments from parent routes. - // - Layout routes have no path (undefined) and don't contribute to the URL. - // - Index routes have path '/' and resolve to the parent path itself. - // - Leaf/layout routes have paths like '/reference/api' or '/key-value'. - let currentPath = parentPath; - if (segment && segment !== '/') { - // Non-root segment: append to parent path. - // Segments always start with '/' (TanStack Router convention). - currentPath = parentPath === '/' ? segment : parentPath + segment; - } - - // Add non-parameterized, non-empty paths - if (currentPath && !currentPath.includes('$')) { - const normalized = currentPath === '/' ? '/' : currentPath.replace(/\/+$/, ''); - if (normalized) { - paths.add(normalized); - } - } - - // Recurse into children, passing the accumulated path - const children = route.children; - if (children && typeof children === 'object') { - for (const child of Object.values(children)) { - if (child) walk(child, currentPath); - } - } - } - - walk(node, ''); - return [...paths].sort(); -} - -export interface StaticRenderOptions { - rootDir: string; - logger: Logger; - dev?: boolean; -} - -export interface StaticRenderResult { - routes: number; - duration: number; -} - -export async function runStaticRender(options: StaticRenderOptions): Promise { - const { rootDir, logger, dev = false } = options; - const started = Date.now(); - - const clientDir = join(rootDir, '.agentuity/client'); - const ssrOutDir = join(rootDir, '.agentuity/ssr'); - const entryServerPath = join(rootDir, 'src/web/entry-server.tsx'); - const templatePath = join(clientDir, 'index.html'); - - // Verify prerequisites - if (!existsSync(entryServerPath)) { - throw new Error( - 'Static rendering requires src/web/entry-server.tsx. ' + - 'This file must export a render(url: string) function and either ' + - 'a routeTree for auto-discovery or getStaticPaths() for explicit paths.' - ); - } - - if (!existsSync(templatePath)) { - throw new Error( - 'Client build must complete before static rendering. ' + - 'No index.html found in .agentuity/client/' - ); - } - - // Step 1: Vite SSR build (subprocess) - // Run as a subprocess to avoid in-process Bun/Vite module resolution issues - // that cause @mdx-js/rollup and other plugins to fail during SSR builds. - // This matches the approach used for client builds in vite-builder.ts. - logger.debug('Running Vite SSR build for static rendering (subprocess)...'); - - const buildMode = dev ? 'development' : 'production'; - - const viteProcess = Bun.spawn( - [ - 'bun', - 'x', - 'vite', - 'build', - '--ssr', - entryServerPath, - '--outDir', - ssrOutDir, - '--mode', - buildMode, - ], - { - cwd: rootDir, - stdout: 'inherit', - stderr: 'inherit', - } - ); - - const exitCode = await viteProcess.exited; - - if (exitCode !== 0) { - throw new Error(`Vite SSR build exited with code ${exitCode}`); - } - - // Steps 2–4: wrapped in try-finally so SSR artifacts are always cleaned up, - // even if an exception is thrown during module import, validation, or rendering. - let routeCount = 0; - try { - // Step 2: Import the built SSR entry - const ssrEntryPath = join(ssrOutDir, 'entry-server.js'); - if (!existsSync(ssrEntryPath)) { - throw new Error(`SSR build did not produce entry-server.js at ${ssrEntryPath}`); - } - - const ssrModule = await import(ssrEntryPath); - - if (typeof ssrModule.render !== 'function') { - throw new Error( - 'entry-server.tsx must export a render(url: string) function that returns HTML string' - ); - } - - // Step 3: Discover routes - // Priority: auto-discover from routeTree + merge getStaticPaths() if present - const discovered = new Set(); - - // 3a. Auto-discover from exported routeTree (skips parameterized routes) - if (ssrModule.routeTree) { - const autoRoutes = extractRoutePaths(ssrModule.routeTree); - for (const r of autoRoutes) { - discovered.add(r); - } - logger.debug(`Auto-discovered ${autoRoutes.length} routes from route tree`); - } - - // 3b. Merge paths from getStaticPaths() if exported (for parameterized routes, etc.) - if (typeof ssrModule.getStaticPaths === 'function') { - const extraRoutes = await ssrModule.getStaticPaths(); - if (!Array.isArray(extraRoutes)) { - throw new Error( - 'getStaticPaths() must return an array of URL paths (e.g., ["/", "/about"])' - ); - } - for (const r of extraRoutes) { - discovered.add(r); - } - logger.debug(`getStaticPaths() added ${extraRoutes.length} paths`); - } - - // Must have at least one source of routes - if (discovered.size === 0) { - throw new Error( - 'No routes to pre-render. Export routeTree from entry-server.tsx for auto-discovery, ' + - 'or export getStaticPaths() returning an array of URL paths.' - ); - } - - const routes: string[] = [...discovered].sort(); - routeCount = routes.length; - logger.debug(`Total: ${routes.length} routes for pre-rendering`); - - // Step 4: Read template and pre-render each route - const template = readFileSync(templatePath, 'utf-8'); - if (!template.includes('')) { - logger.warn( - 'index.html is missing the placeholder; ' + - 'pre-rendered content will not be injected into the page.' - ); - } - - for (const route of routes) { - try { - const html = await ssrModule.render(route); - const page = template.replace('', html); - - let outPath: string; - if (route === '/') { - outPath = join(clientDir, 'index.html'); - } else { - const dir = join(clientDir, route.slice(1)); - mkdirSync(dir, { recursive: true }); - outPath = join(dir, 'index.html'); - } - - writeFileSync(outPath, page, 'utf-8'); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - logger.warn(`Failed to render route ${route}: ${message}`); - // Continue rendering other routes - } - } - } finally { - // Step 5: Clean up SSR build artifacts (always runs, even on error) - rmSync(ssrOutDir, { recursive: true, force: true }); - } - - const duration = Date.now() - started; - logger.debug(`Static rendering complete: ${routeCount} routes in ${duration}ms`); - - return { routes: routeCount, duration }; -} diff --git a/packages/cli/src/cmd/build/vite/tailwind-source-plugin.ts b/packages/cli/src/cmd/build/vite/tailwind-source-plugin.ts deleted file mode 100644 index 9bc6df7c3..000000000 --- a/packages/cli/src/cmd/build/vite/tailwind-source-plugin.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Vite plugin to fix Tailwind v4 oxide scanner hang in containers - * - * The Tailwind v4 oxide scanner (native Rust binary) can hang or fail when - * scanning the filesystem in containerized environments. Adding source(none) - * to @import "tailwindcss" disables the oxide filesystem scanner, and an - * explicit @source directive pointing at the project's src/ directory tells - * Tailwind exactly where to find utility classes. - * - * @see https://github.com/tailwindlabs/tailwindcss/discussions/19661 - * @see https://tailwindcss.com/docs/detecting-classes-in-source-files - */ - -import { dirname, join, relative, sep } from 'node:path'; -import type { Plugin } from 'vite'; - -export function tailwindSourcePlugin(): Plugin { - let root: string; - - return { - name: 'agentuity:tailwind-source', - enforce: 'pre', - - configResolved(config) { - root = config.root; - }, - - transform(code, id) { - // Only transform CSS files - if (!id.endsWith('.css')) { - return null; - } - - // Check if the file contains @import "tailwindcss" (with either quote type) - if (!/@import\s+["']tailwindcss["']/.test(code)) { - return null; - } - - // Compute relative path from CSS file to project's src/ directory - const cssDir = dirname(id); - const srcDir = join(root, 'src'); - let relPath = relative(cssDir, srcDir).split(sep).join('/'); - if (relPath === '') { - relPath = '.'; - } else if (!relPath.startsWith('.')) { - relPath = './' + relPath; - } - - // Transform @import "tailwindcss" → @import "tailwindcss" source(none) - // and add explicit @source so Tailwind knows where to scan for classes. - // Does NOT transform if source() is already specified. - const transformed = code.replace( - /@import\s+(["'])tailwindcss\1([^;]*);/g, - (match, quote, rest) => { - // If source() is already present, don't modify - if (/source\s*\(/.test(rest)) { - return match; - } - return `@import ${quote}tailwindcss${quote}${rest} source(none);\n@source "${relPath}";`; - } - ); - - if (transformed !== code) { - return { - code: transformed, - map: null, - }; - } - - return null; - }, - }; -} diff --git a/packages/cli/src/cmd/build/vite/vite-asset-server-config.ts b/packages/cli/src/cmd/build/vite/vite-asset-server-config.ts deleted file mode 100644 index d1ddc1299..000000000 --- a/packages/cli/src/cmd/build/vite/vite-asset-server-config.ts +++ /dev/null @@ -1,349 +0,0 @@ -/** - * Vite Dev Server Configuration - * - * Vite is the primary dev server — serves frontend assets natively and proxies - * API/WebSocket requests to the Bun backend server. - */ - -import { join } from 'node:path'; -import { existsSync } from 'node:fs'; -import type { InlineConfig, Plugin } from 'vite'; -import type { Logger } from '../../../types'; - -export interface GenerateAssetServerConfigOptions { - rootDir: string; - logger: Logger; - workbenchPath?: string; - port: number; // The port Vite will listen on (user-facing) - backendPort: number; // The port Bun backend is running on (internal) - /** User-defined route mount paths from createApp({ router }) (e.g., ['/api', '/v1']) */ - routePaths?: string[]; - /** Live tunnel hostname (e.g. "epXXX.agentuity-us.live.internal") to add to Vite's allowedHosts */ - liveHostname?: string; -} - -/** - * Vite plugin that injects analytics scripts in dev mode. - * - * In production the beacon plugin handles this at build time. In dev mode - * the analytics config + session + beacon scripts are served by the Bun - * backend at /_agentuity/webanalytics/* routes, but we need to inject the - * `` + - '' + - ''; - - if (html.includes('')) { - return html.replace('', `${injection}`); - } - return html; - }, - }, - }; -} - -/** - * Vite plugin that serves src/web/index.html as the SPA fallback. - * - * Vite's built-in SPA fallback only serves index.html from the project root. - * Since Agentuity apps keep their HTML entry at src/web/index.html, we need - * this plugin to rewrite the URL so Vite's built-in transform pipeline - * (including React Fast Refresh injection) processes it correctly. - */ -function spaFallbackPlugin(rootDir: string, routePaths: string[], workbenchPath?: string): Plugin { - const htmlPath = join(rootDir, 'src', 'web', 'index.html'); - const hasHtml = existsSync(htmlPath); - - return { - name: 'agentuity:spa-fallback', - configureServer(server) { - if (!hasHtml) return; - - server.middlewares.use(async (req, res, next) => { - // Only handle GET/HEAD navigation requests - if (req.method !== 'GET' && req.method !== 'HEAD') return next(); - - const url = req.url || '/'; - const pathname = url.split('?')[0] || '/'; - const accept = req.headers.accept || ''; - const secFetchDest = req.headers['sec-fetch-dest'] || ''; - - // For robustness, treat unknown GET/HEAD routes as potential SPA navigations. - // We still avoid intercepting assets/backend paths via the filters below. - // (This also makes non-browser readiness probes like fetch('/streams') work.) - const isDocumentRequest = secFetchDest === 'document' || accept.includes('text/html'); - - // Skip file requests (have an extension) - if (pathname !== '/' && /\.[a-zA-Z0-9]+$/.test(pathname)) return next(); - - // For non-document requests, only allow root path fallback. - // (e.g. don't turn module/script fetches into HTML accidentally) - if (!isDocumentRequest && pathname === '/') { - // allow root fallback for simple probes - } - - // Skip Vite/module/internal asset paths - if ( - pathname.startsWith('/@vite') || - pathname.startsWith('/@react-refresh') || - pathname.startsWith('/@id/') || - pathname.startsWith('/@fs/') || - pathname.startsWith('/node_modules/') || - pathname.startsWith('/src/') || - (pathname.startsWith('/@') && !pathname.startsWith('/_agentuity')) - ) { - return next(); - } - - // Skip paths that are proxied to the Bun backend - if ( - pathname.startsWith('/_agentuity') || - pathname.startsWith('/_health') || - pathname.startsWith('/_idle') - ) { - return next(); - } - // Skip workbench path (served by Bun) - if ( - workbenchPath && - (pathname === workbenchPath || pathname.startsWith(workbenchPath + '/')) - ) { - return next(); - } - for (const rp of routePaths) { - if (pathname === rp || pathname.startsWith(rp + '/')) return next(); - } - - // If this isn't clearly a document navigation, still allow SPA fallback - // for extensionless client-side routes like /streams, /rpc, /webrtc. - // We already excluded backend paths and asset/module paths above. - - try { - let html = await Bun.file(htmlPath).text(); - // Match old devHtmlHandler behavior from the generated Bun entry: - // rewrite relative paths so the app works from / and client-side routes. - html = html - .replace(/src="\.\//g, 'src="/src/web/') - .replace(/href="\.\//g, 'href="/src/web/'); - - // Let Vite inject HMR client, React refresh preamble, etc. - html = await server.transformIndexHtml(url, html, req.originalUrl); - - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html; charset=utf-8'); - res.end(html); - } catch (error) { - next(error as Error); - } - }); - }, - }; -} - -/** - * Generate Vite config for asset-only server (HMR + React transformation) - */ -export async function generateAssetServerConfig( - options: GenerateAssetServerConfigOptions -): Promise { - const { - rootDir, - logger, - workbenchPath, - port, - backendPort, - routePaths = ['/api'], - liveHostname, - } = options; - - // Load path aliases from tsconfig.json if available - const tsconfigPath = join(rootDir, 'tsconfig.json'); - let alias = {}; - - try { - const tsconfig = JSON.parse(await Bun.file(tsconfigPath).text()); - const paths = tsconfig?.compilerOptions?.paths || {}; - alias = Object.fromEntries( - Object.entries(paths) - .filter(([, value]) => { - const pathArray = value as string[]; - return pathArray.length > 0 && pathArray[0] !== undefined; - }) - .map(([key, value]) => { - const pathArray = value as string[]; - const firstPath = pathArray[0] ?? ''; - return [key.replace('/*', ''), join(rootDir, firstPath.replace('/*', ''))]; - }) - ); - } catch { - // No tsconfig or no paths - that's fine - } - - return { - root: rootDir, - base: '/', - clearScreen: false, - // Serve public assets from src/web/public/ at root path (e.g., /favicon.png) - // The Bun server proxies /public/* requests to Vite, rewriting to root paths - publicDir: join(rootDir, 'src', 'web', 'public'), - - resolve: { - alias, - // Deduplicate React to prevent multiple instances (if used) - dedupe: ['react', 'react-dom', 'react/jsx-runtime', 'react/jsx-dev-runtime'], - }, - - // Pre-bundle dependencies to avoid issues with pre-built packages - // Only include @agentuity/workbench if workbench is enabled - optimizeDeps: { - include: workbenchPath ? ['@agentuity/workbench', '@agentuity/core'] : ['@agentuity/core'], - }, - - // Only allow frontend env vars (server uses process.env) - envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'], - - server: { - // Vite is the primary dev server — listens on the user-facing port - port, - strictPort: true, // Port is pre-verified as available by findAvailablePort() - host: '127.0.0.1', - - // When accessed via an Agentuity live tunnel, the Host header is the - // tunnel hostname (e.g. "epXXX.agentuity-us.live.internal"). Without - // adding it here, Vite 6+ rejects the request with "host not allowed". - ...(liveHostname ? { allowedHosts: [liveHostname] } : {}), - - // Proxy backend routes to Bun server (HTTP only). - // WebSocket upgrades are handled by the front-door TCP proxy (ws-proxy.ts) - // which routes them directly to the Bun backend, bypassing Vite entirely. - // This avoids Bun's broken node:http upgrade socket implementation. - proxy: { - // User-defined route mounts (from createApp({ router })) - ...Object.fromEntries( - routePaths.map((routePath) => [ - routePath, - { - target: `http://127.0.0.1:${backendPort}`, - changeOrigin: true, - }, - ]) - ), - // Agentuity system routes (workbench API, health, analytics, etc.) - '/_agentuity': { - target: `http://127.0.0.1:${backendPort}`, - changeOrigin: true, - }, - // Workbench UI route (served by Bun, references /@fs/* paths handled by Vite) - ...(workbenchPath - ? { - [workbenchPath]: { - target: `http://127.0.0.1:${backendPort}`, - changeOrigin: true, - }, - } - : {}), - // Legacy health check routes - '/_health': { - target: `http://127.0.0.1:${backendPort}`, - changeOrigin: true, - }, - '/_idle': { - target: `http://127.0.0.1:${backendPort}`, - changeOrigin: true, - }, - }, - - // HMR works natively — Vite is the primary server, no proxy needed - // Auto-detect host/protocol from page origin for tunnel support - hmr: true, - - // Don't open browser automatically - open: false, - }, - - // Define environment variables for browser - define: { - ...(workbenchPath - ? { 'import.meta.env.AGENTUITY_PUBLIC_WORKBENCH_PATH': JSON.stringify(workbenchPath) } - : {}), - 'import.meta.env.AGENTUITY_PUBLIC_HAS_SDK_KEY': JSON.stringify( - process.env.AGENTUITY_SDK_KEY ? 'true' : 'false' - ), - 'process.env.NODE_ENV': JSON.stringify('development'), - }, - - // Agentuity-specific plugins (Vite loads user plugins from vite.config.ts automatically) - plugins: await (async () => { - const { browserEnvPlugin } = await import('./browser-env-plugin'); - const { publicAssetPathPlugin } = await import('./public-asset-path-plugin'); - - return [ - // Browser env plugin to map process.env to import.meta.env - browserEnvPlugin(), - // Warn about incorrect public asset paths in dev mode - publicAssetPathPlugin({ warnInDev: true }), - // Inject analytics scripts in dev HTML - devAnalyticsPlugin(), - // SPA fallback: serve src/web/index.html for navigation requests - spaFallbackPlugin(rootDir, routePaths, workbenchPath), - ]; - })(), - - // Suppress build-related options (this is dev-only) - build: { - rollupOptions: { - external: ['vite', '@agentuity/cli'], - }, - }, - - // Custom logger to integrate with our logger - customLogger: { - info(msg: string) { - // Show port-related messages at info level (important for debugging port conflicts) - // Keep other Vite info messages (like HMR updates) at debug to avoid noise - if (msg.includes('Port') || msg.includes('port')) { - logger.info(`[Vite Asset] ${msg}`); - } else { - logger.debug(`[Vite Asset] ${msg}`); - } - }, - warn(msg: string) { - logger.warn(`[Vite Asset] ${msg}`); - }, - warnOnce(msg: string) { - logger.warn(`[Vite Asset] ${msg}`); - }, - error(msg: string) { - logger.error(`[Vite Asset] ${msg}`); - }, - clearScreen() { - // No-op - }, - hasErrorLogged: () => false, - hasWarned: false, - }, - - logLevel: 'info', - }; -} diff --git a/packages/cli/src/cmd/build/vite/vite-asset-server.ts b/packages/cli/src/cmd/build/vite/vite-asset-server.ts deleted file mode 100644 index 8db1dba95..000000000 --- a/packages/cli/src/cmd/build/vite/vite-asset-server.ts +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Vite Dev Server (Primary) - * - * Starts Vite as the primary dev server on the user-facing port. - * Serves frontend assets natively and proxies API/WebSocket requests - * to the Bun backend server. - */ - -import { join } from 'node:path'; -import { createRequire } from 'node:module'; -import { createServer as createNetServer } from 'node:net'; -import type { ViteDevServer } from 'vite'; -import type { Logger } from '../../../types'; -import { generateAssetServerConfig } from './vite-asset-server-config'; - -export interface ViteAssetServerResult { - server: ViteDevServer; - port: number; -} - -export interface StartViteAssetServerOptions { - rootDir: string; - logger: Logger; - workbenchPath?: string; - port?: number; // Preferred user-facing port (default: 3500) - backendPort: number; // Port of the Bun backend server - /** User-defined route mount paths from createApp({ router }) */ - routePaths?: string[]; - /** Live tunnel hostname to add to Vite's allowedHosts */ - liveHostname?: string; -} - -/** - * Check if a specific port is available on the given host. - */ -function isPortAvailable(port: number, host: string): Promise { - return new Promise((resolve) => { - const server = createNetServer(); - server.once('error', () => { - resolve(false); - }); - server.listen(port, host, () => { - server.close(() => { - resolve(true); - }); - }); - }); -} - -/** - * Find an available port starting from the preferred port. - * Tries incrementing ports up to maxAttempts times. - */ -async function findAvailablePort( - preferredPort: number, - host: string = '127.0.0.1', - maxAttempts: number = 20 -): Promise { - for (let attempt = 0; attempt < maxAttempts; attempt++) { - const port = preferredPort + attempt; - const available = await isPortAvailable(port, host); - if (available) { - return port; - } - } - throw new Error( - `Could not find an available port after ${maxAttempts} attempts starting from ${preferredPort}` - ); -} - -/** - * Start Vite asset server on a dynamically-chosen port - * Returns the server instance and the actual port number - */ -export async function startViteAssetServer( - options: StartViteAssetServerOptions -): Promise { - const { - rootDir, - logger, - workbenchPath, - port: preferredPort = 3500, - backendPort, - routePaths, - liveHostname, - } = options; - - logger.debug('Starting Vite dev server (primary, proxying backend on port %d)...', backendPort); - - // Find an available port for the user-facing Vite server - const availablePort = await findAvailablePort(preferredPort, '127.0.0.1'); - - if (availablePort !== preferredPort) { - logger.info( - `Port ${preferredPort} is in use, using port ${availablePort} for Vite dev server` - ); - } - - // Generate config with proxy to Bun backend - const config = await generateAssetServerConfig({ - rootDir, - logger, - workbenchPath, - port: availablePort, - backendPort, - routePaths, - liveHostname, - }); - - // Dynamically import vite from the project's node_modules - // This ensures we resolve from the target project directory, not the CWD - const projectRequire = createRequire(join(rootDir, 'package.json')); - const { createServer } = await import(projectRequire.resolve('vite')); - - // Create Vite server with config - const server = await createServer(config); - - // Start listening with timeout to prevent hangs - const STARTUP_TIMEOUT_MS = 30000; // 30 seconds - - try { - await Promise.race([ - server.listen(), - new Promise((_, reject) => { - const timeoutId = setTimeout(() => { - reject( - new Error( - `Vite asset server failed to start within ${STARTUP_TIMEOUT_MS / 1000}s` - ) - ); - }, STARTUP_TIMEOUT_MS); - // Clean up timeout when listen succeeds (via finally in the outer try) - server.httpServer?.once('listening', () => clearTimeout(timeoutId)); - }), - ]); - } catch (error) { - // Attempt to close the server on failure - try { - await server.close(); - } catch { - // Ignore close errors - } - throw error; - } - - // Port was pre-verified and strictPort:true ensures Vite uses exactly this port - const actualPort = availablePort; - - logger.debug(`Vite dev server running on port ${actualPort} (primary)`); - logger.debug(`Frontend: HMR, React transformation, source maps (native)`); - logger.debug(`Backend: proxying to Bun on port ${backendPort}`); - - return { server, port: actualPort }; -} diff --git a/packages/cli/src/cmd/build/vite/vite-builder.ts b/packages/cli/src/cmd/build/vite/vite-builder.ts deleted file mode 100644 index 3af2177e8..000000000 --- a/packages/cli/src/cmd/build/vite/vite-builder.ts +++ /dev/null @@ -1,503 +0,0 @@ -/** - * Vite Builder - * - * Utilities for running Vite builds (client, server, workbench) - */ - -import { join } from 'node:path'; -import { existsSync, rmSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs'; -import { createHash } from 'node:crypto'; -import { createRequire } from 'node:module'; -import type { InlineConfig } from 'vite'; -import type { Logger, DeployOptions } from '../../../types'; -import type { BuildReportCollector } from '../../../build-report'; - -/** - * Read the pre-built beacon script from @agentuity/frontend package. - * Tries multiple resolution strategies for workspace/installed/symlink scenarios. - */ -async function readBeaconScript(projectRoot: string): Promise { - let frontendPath: string | null = null; - - try { - frontendPath = await Bun.resolve('@agentuity/frontend', projectRoot); - } catch { - // Not found from project root - } - - if (!frontendPath) { - try { - const thisDir = new URL('.', import.meta.url).pathname; - frontendPath = await Bun.resolve('@agentuity/frontend', thisDir); - } catch { - // Not found from CLI directory - } - } - - if (!frontendPath) { - try { - const projectRequire = createRequire(join(projectRoot, 'package.json')); - frontendPath = projectRequire.resolve('@agentuity/frontend'); - } catch { - // Not found via createRequire - } - } - - if (!frontendPath) { - throw new Error( - 'Could not resolve @agentuity/frontend. Ensure the package is installed and built.' - ); - } - - const packageDir = join(frontendPath, '..'); - const beaconPath = join(packageDir, 'beacon.js'); - - const beaconFile = Bun.file(beaconPath); - if (!(await beaconFile.exists())) { - throw new Error( - `Beacon script not found at ${beaconPath}. Run "bun run build" in @agentuity/frontend first.` - ); - } - - return beaconFile.text(); -} - -/** - * Post-build step: inject the analytics beacon into the built index.html. - * - * 1. Reads the beacon script from @agentuity/frontend - * 2. Writes it as a content-hashed asset file - * 3. Injects a `; - - let html = readFileSync(indexHtmlPath, 'utf-8'); - if (html.includes('')) { - html = html.replace('', `${beaconScript}`); - } else if (html.includes(']*)>/, `${beaconScript}`); - } else { - html = beaconScript + html; - } - - writeFileSync(indexHtmlPath, html); - logger.debug('Injected analytics beacon: %s', beaconUrl); -} - -export interface ViteBuildOptions { - rootDir: string; - mode: 'client' | 'server' | 'workbench'; - dev?: boolean; - port?: number; - projectId?: string; - orgId?: string; - region?: string; - deploymentId?: string; - workbenchRoute?: string; - workbenchEnabled?: boolean; - /** Whether analytics is enabled (for beacon injection in client build) */ - analyticsEnabled?: boolean; - logger: Logger; - deploymentOptions?: DeployOptions; - /** Deployment config from agentuity.json (resources, mode, dependencies, domains) */ - deploymentConfig?: Record; - /** Optional collector for structured error reporting */ - collector?: BuildReportCollector; - /** Optional config profile name (e.g., 'staging', 'test') for .env.{profile} files */ - profile?: string; -} - -/** - * Run a Vite build for the specified mode - * Uses inline Vite config (customizable via agentuity.config.ts) - */ -export async function runViteBuild(options: ViteBuildOptions): Promise { - const { rootDir, mode, dev = false, logger, profile } = options; - - logger.debug(`Running Vite build for mode: ${mode}`); - - // For server mode, use Bun.build (preserves process.env at runtime) - if (mode === 'server') { - const srcDir = join(rootDir, 'src'); - - // Generate documentation files (if they don't exist) - const { generateDocumentation } = await import('./docs-generator'); - await generateDocumentation(srcDir, logger); - - // Generate/update prompt files in dev mode only (non-blocking) - if (dev) { - import('./prompt-generator') - .then(({ generatePromptFiles }) => generatePromptFiles(srcDir, logger)) - .catch((err) => logger.warn('Failed to generate prompt files: %s', err.message)); - } - - // Generate lifecycle types (if setup() exists) - const { generateLifecycleTypes } = await import('./lifecycle-generator'); - await generateLifecycleTypes(rootDir, srcDir, logger); - - // Generate environment types from local .env files - const { generateEnvTypes } = await import('./env-types-generator'); - await generateEnvTypes({ - rootDir, - srcDir, - logger, - isProduction: !dev, - profile, - }); - - // Build with Bun.build (app.ts is the entrypoint) - const { installExternalsAndBuild } = await import('./server-bundler'); - await installExternalsAndBuild({ - rootDir, - dev, - logger, - }); - return; - } - - // Dynamically import vite for workbench builds - const { build: viteBuild } = await import('vite'); - - // For client/workbench, use inline config with vite.config.ts loading - let viteConfig: InlineConfig; - - if (mode === 'client') { - // For client builds, spawn vite as a subprocess. - // This avoids issues with Bun's module loading that cause problems - // with certain plugins like @sveltejs/vite-plugin-svelte. - // The vite.config.ts in the project handles all configuration. - const buildMode = dev ? 'development' : 'production'; - const clientOutDir = join(rootDir, '.agentuity/client'); - - // Ensure vite.config.ts exists (fallback for projects created before v2 template update) - const viteConfigPath = join(rootDir, 'vite.config.ts'); - if (!existsSync(viteConfigPath)) { - logger.debug('Generating fallback vite.config.ts'); - const fallbackConfig = `import react from '@vitejs/plugin-react'; -import { defineConfig } from 'vite'; -import { join } from 'node:path'; - -export default defineConfig({ - plugins: [react()], - root: '.', - build: { - rollupOptions: { - input: join(__dirname, 'src/web/index.html'), - }, - }, -}); -`; - await Bun.write(viteConfigPath, fallbackConfig); - } - - // Construct CDN base URL for production builds so Vite prefixes all - // asset URLs (CSS, JS chunks) with the CDN origin instead of "/". - const cdnBaseUrl = - !dev && options.deploymentId - ? `https://${options.region === 'local' ? 'localstack-static-assets.t3.storageapi.dev' : 'cdn.agentuity.com'}/${options.deploymentId}/client/` - : undefined; - - const args = [ - 'bun', - 'x', - 'vite', - 'build', - '--mode', - buildMode, - '--outDir', - clientOutDir, - '--logLevel', - 'error', - '--clearScreen', - 'false', - ]; - if (cdnBaseUrl) { - args.push('--base', cdnBaseUrl); - } - - logger.debug('Spawning vite build for client (subprocess mode)'); - logger.debug(' outDir: %s', clientOutDir); - logger.debug(' mode: %s', buildMode); - if (cdnBaseUrl) { - logger.debug(' base (CDN): %s', cdnBaseUrl); - } - - const viteProcess = Bun.spawn(args, { - cwd: rootDir, - stdout: 'inherit', - stderr: 'inherit', - }); - - const exitCode = await viteProcess.exited; - - if (exitCode !== 0) { - throw new Error(`Vite build exited with code ${exitCode}`); - } - - logger.debug('Vite build complete for mode: client'); - return; - } else if (mode === 'workbench') { - const { workbenchRoute = '/workbench' } = options; - // Ensure route ends with / for Vite base - const base = workbenchRoute.endsWith('/') ? workbenchRoute : `${workbenchRoute}/`; - - // Workbench is built with React (internal UI) - // Use CLI's bundled React plugin since workbench is our code - const reactModule = await import('@vitejs/plugin-react'); - const react = reactModule.default; - - viteConfig = { - root: join(rootDir, '.agentuity/workbench-src'), // Use generated workbench source - base, // All workbench assets are under the configured route - plugins: [react()], - envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'], - build: { - outDir: join(rootDir, '.agentuity/workbench'), - rollupOptions: { - input: join(rootDir, '.agentuity/workbench-src/index.html'), - }, - manifest: true, - emptyOutDir: true, - }, - logLevel: 'warn', - }; - } else { - throw new Error(`Unknown build mode: ${mode}`); - } - - // For workbench mode, use programmatic vite build - const buildMode = dev ? 'development' : 'production'; - - await viteBuild({ - ...viteConfig, - mode: buildMode, - }); - - logger.debug(`Vite build complete for mode: ${mode}`); -} - -interface BuildResult { - workbench: { included: boolean; duration: number }; - client: { included: boolean; duration: number }; - server: { included: boolean; duration: number }; - static: { included: boolean; duration: number; routes: number }; -} - -/** - * Run all builds in sequence: client -> workbench (if enabled) -> server - */ -export async function runAllBuilds(options: Omit): Promise { - const { rootDir, projectId = '', dev = false, logger, collector } = options; - - if (!dev) { - rmSync(join(rootDir, '.agentuity'), { force: true, recursive: true }); - } - - const result: BuildResult = { - workbench: { included: false, duration: 0 }, - client: { included: false, duration: 0 }, - server: { included: false, duration: 0 }, - static: { included: false, duration: 0, routes: 0 }, - }; - - // Load runtime config from createApp() in app.ts (v2 approach) - const { getWorkbenchConfig, loadRuntimeConfig } = await import('./config-loader'); - const runtimeConfig = await loadRuntimeConfig(rootDir, logger); - - const workbenchConfig = getWorkbenchConfig(dev, runtimeConfig); - // Generate workbench files BEFORE any builds if enabled (dev mode only) - if (workbenchConfig.enabled) { - logger.debug('Workbench enabled (dev mode), generating files before build...'); - const { generateWorkbenchFiles } = await import('./workbench-generator'); - await generateWorkbenchFiles(rootDir, projectId, workbenchConfig, logger); - } - - // 1. Discover agents and routes BEFORE builds - logger.debug('Discovering agents and routes...'); - const { discoverAgents } = await import('./agent-discovery'); - const { discoverRoutes } = await import('./route-discovery'); - - const srcDir = join(rootDir, 'src'); - const agentMetadata = await discoverAgents( - srcDir, - projectId, - options.deploymentId || '', - logger - ); - const { routes } = await discoverRoutes(srcDir, projectId, options.deploymentId || '', logger); - - // Agent metadata is used for metadata.json generation (no registry codegen needed) - - // Check if web frontend exists - const hasWebFrontend = await Bun.file(join(rootDir, 'src', 'web', 'index.html')).exists(); - - // Check if analytics is enabled - // v2: analytics config comes from createApp() - const analyticsFromRuntime = runtimeConfig?.analytics; - const analyticsEnabled = - analyticsFromRuntime !== undefined ? analyticsFromRuntime !== false : true; - - // 2. Build client (only if web frontend exists) - if (hasWebFrontend) { - logger.debug('Building client assets...'); - const endClientDiagnostic = collector?.startDiagnostic('client-build'); - const started = Date.now(); - await runViteBuild({ - ...options, - mode: 'client', - workbenchEnabled: workbenchConfig.enabled, - workbenchRoute: workbenchConfig.route, - analyticsEnabled, - }); - - // Normalize index.html location: vite may output to src/web/index.html - // depending on the project's vite.config.ts configuration - const clientDir = join(rootDir, '.agentuity/client'); - const nestedIndexHtml = join(clientDir, 'src/web/index.html'); - const rootIndexHtml = join(clientDir, 'index.html'); - if (existsSync(nestedIndexHtml) && !existsSync(rootIndexHtml)) { - const { renameSync, mkdirSync: mkdirSyncFs } = await import('node:fs'); - // Ensure target directory exists - mkdirSyncFs(clientDir, { recursive: true }); - renameSync(nestedIndexHtml, rootIndexHtml); - logger.debug('Moved index.html from src/web/ to client root'); - } - - // Post-build: inject analytics beacon into the built HTML. - // Must run AFTER the index.html normalization above (Vite may - // output to src/web/index.html which gets moved to the client root). - const isLocalRegion = options.region === 'local'; - const cdnDomain = isLocalRegion - ? 'localstack-static-assets.t3.storageapi.dev' - : 'cdn.agentuity.com'; - const cdnBaseUrl = - !dev && options.deploymentId - ? `https://${cdnDomain}/${options.deploymentId}/client/` - : undefined; - - if (cdnBaseUrl && analyticsEnabled) { - await injectBeacon(rootDir, cdnBaseUrl, logger); - } - - result.client.included = true; - result.client.duration = Date.now() - started; - endClientDiagnostic?.(); - } else { - logger.debug('Skipping client build - no src/web/index.html found'); - } - - // 2b. Static rendering (if entry-server.tsx exists) - const entryServerPath = join(rootDir, 'src', 'web', 'entry-server.tsx'); - if (existsSync(entryServerPath) && hasWebFrontend) { - logger.debug('Running static rendering (pre-rendering all routes)...'); - const endStaticDiagnostic = collector?.startDiagnostic('static-render'); - const { runStaticRender } = await import('./static-renderer'); - const staticResult = await runStaticRender({ - rootDir, - logger, - dev, - }); - result.static.included = true; - result.static.duration = staticResult.duration; - result.static.routes = staticResult.routes; - endStaticDiagnostic?.(); - } - - // 3. Build workbench (if enabled in config) - if (workbenchConfig.enabled) { - logger.debug('Building workbench assets...'); - const endWorkbenchDiagnostic = collector?.startDiagnostic('workbench-build'); - const started = Date.now(); - await runViteBuild({ - ...options, - mode: 'workbench', - workbenchRoute: workbenchConfig.route, - workbenchEnabled: true, - }); - result.workbench.included = true; - result.workbench.duration = Date.now() - started; - endWorkbenchDiagnostic?.(); - } - - // 4. Build server - logger.debug('Building server...'); - const endServerDiagnostic = collector?.startDiagnostic('server-build'); - const serverStarted = Date.now(); - await runViteBuild({ ...options, mode: 'server' }); - result.server.included = true; - result.server.duration = Date.now() - serverStarted; - endServerDiagnostic?.(); - - // 5. Generate metadata (after all builds complete) - logger.debug('Generating metadata...'); - const endMetadataDiagnostic = collector?.startDiagnostic('metadata-generation'); - const { generateMetadata, writeMetadataFile } = await import('./metadata-generator'); - - // Generate metadata - const metadata = await generateMetadata({ - rootDir, - projectId, - orgId: options.orgId, - deploymentId: options.deploymentId, - agents: agentMetadata, - routes, - logger, - dev, - deploymentOptions: options.deploymentOptions, - deploymentConfig: options.deploymentConfig, - }); - - writeMetadataFile(rootDir, metadata, dev, logger); - endMetadataDiagnostic?.(); - logger.debug('Registry and metadata generation complete'); - - logger.debug('All builds complete'); - return result; -} diff --git a/packages/cli/src/cmd/build/vite/workbench-generator.ts b/packages/cli/src/cmd/build/vite/workbench-generator.ts deleted file mode 100644 index c98e2ea4d..000000000 --- a/packages/cli/src/cmd/build/vite/workbench-generator.ts +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Workbench file generator for Vite builds - */ - -import { join } from 'node:path'; -import { mkdirSync, existsSync, cpSync } from 'node:fs'; -import { - encodeWorkbenchConfig, - type WorkbenchConfig as CoreWorkbenchConfig, -} from '@agentuity/core'; -import type { Logger, WorkbenchConfig } from '../../../types'; - -/** - * Find the @agentuity/workbench package path - */ -async function findWorkbenchPackage(rootDir: string, logger: Logger): Promise { - // Try app-level node_modules first - const appLevel = join(rootDir, 'node_modules', '@agentuity', 'workbench'); - if (existsSync(appLevel)) { - return appLevel; - } - - // Try workspace root (walk up looking for workspace) - let current = rootDir; - while (true) { - const pkgPath = join(current, 'package.json'); - if (existsSync(pkgPath)) { - try { - const pkg = JSON.parse(await Bun.file(pkgPath).text()); - if (pkg.workspaces) { - // Found workspace root - const workspaceWorkbench = join(current, 'node_modules', '@agentuity', 'workbench'); - if (existsSync(workspaceWorkbench)) { - return workspaceWorkbench; - } - // Try workspace packages directory - const packagesWorkbench = join(current, 'packages', 'workbench'); - if (existsSync(packagesWorkbench)) { - return packagesWorkbench; - } - } - } catch { - // Ignore parse errors - } - } - const parent = join(current, '..'); - if (parent === current) break; - current = parent; - } - - logger.warn('Could not find @agentuity/workbench package'); - return null; -} - -/** - * Generate workbench main.tsx file - */ -function generateMainTsx(config: CoreWorkbenchConfig): string { - const encodedConfig = encodeWorkbenchConfig(config); - return `// Generated workbench entry point -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import { App } from '@agentuity/workbench'; -import './styles.css'; // Import CSS for Vite HMR - -// Root element -const rootElement = document.getElementById('root'); -if (!rootElement) { - throw new Error('Root element not found'); -} - -// Render the app -const root = createRoot(rootElement); -root.render(); -`; -} - -/** - * Generate workbench index.html file - */ -function generateIndexHtml(): string { - return ` - - - - - Agentuity Workbench - - -
- - -`; -} - -/** - * Generate workbench files in .agentuity/workbench-src/ - * This keeps them separate from user's source code - */ -export async function generateWorkbenchFiles( - rootDir: string, - _projectId: string, - config: WorkbenchConfig, - logger: Logger -): Promise { - const workbenchDir = join(rootDir, '.agentuity', 'workbench-src'); - - // Create directory if it doesn't exist - if (!existsSync(workbenchDir)) { - mkdirSync(workbenchDir, { recursive: true }); - logger.debug('Created workbench directory: %s', workbenchDir); - } - - // Create core workbench config - const coreConfig: CoreWorkbenchConfig = { - route: config.route ?? '/workbench', - headers: config.headers ?? {}, - }; - - // Generate main.tsx - const mainTsxPath = join(workbenchDir, 'main.tsx'); - await Bun.write(mainTsxPath, generateMainTsx(coreConfig)); - logger.debug('Generated workbench main.tsx'); - - // Generate index.html - const indexHtmlPath = join(workbenchDir, 'index.html'); - await Bun.write(indexHtmlPath, generateIndexHtml()); - logger.debug('Generated workbench index.html'); - - // Copy standalone CSS from @agentuity/workbench package - const workbenchPackage = await findWorkbenchPackage(rootDir, logger); - if (workbenchPackage) { - const distCss = join(workbenchPackage, 'dist', 'standalone.css'); - const srcCss = join(workbenchPackage, 'src', 'standalone.css'); - const destCss = join(workbenchDir, 'styles.css'); - - if (existsSync(distCss)) { - cpSync(distCss, destCss); - logger.debug('Copied workbench standalone.css from dist'); - } else if (existsSync(srcCss)) { - cpSync(srcCss, destCss); - logger.warn('Using source standalone.css (ensure @agentuity/workbench is built)'); - } else { - logger.error('Workbench styles not found in package: %s', workbenchPackage); - throw new Error('Workbench styles not found. Ensure @agentuity/workbench is installed.'); - } - } else { - throw new Error('Could not find @agentuity/workbench package. Ensure it is installed.'); - } - - logger.trace('Workbench files generated successfully'); -} diff --git a/packages/cli/src/cmd/build/vite/ws-proxy.ts b/packages/cli/src/cmd/build/vite/ws-proxy.ts deleted file mode 100644 index 3362efb46..000000000 --- a/packages/cli/src/cmd/build/vite/ws-proxy.ts +++ /dev/null @@ -1,126 +0,0 @@ -/** - * WebSocket-aware front-door TCP proxy for dev mode. - * - * Bun's node:http has several bugs that prevent Vite's built-in http-proxy - * from proxying WebSocket upgrades (see linked PRs). Rather than polyfilling - * those bugs, this module places a lightweight `net.createServer` on the - * user-facing port. It inspects the first bytes of each TCP connection and - * routes accordingly: - * - * - **WebSocket upgrades to backend paths** → piped directly to Bun backend - * (Bun's native `server.upgrade()` works perfectly over raw TCP) - * - **Everything else** (HTTP requests, Vite HMR WebSocket) → piped to Vite - * - * From the browser's perspective there is only one port. Vite and Bun both - * listen on internal ports that are never exposed. - * - * Bun bugs this works around: - * - https://github.com/oven-sh/bun/pull/27237 (socket.write drops data) - * - https://github.com/oven-sh/bun/pull/26264 (missing destroySoon) - * - https://github.com/oven-sh/bun/pull/27859 (http.request upgrade event) - * - Server-side upgrade socket read broken (HTTP parser doesn't hand off) - * - * This entire module can be removed once those Bun PRs are merged and the - * Vite `ws: true` proxy works natively under Bun. - * - * ``` - * Browser ──TCP──▶ net.Server (:3500, user-facing) - * │ - * ┌───────────┴───────────┐ - * ▼ (WS upgrade to ▼ (everything else) - * backend paths) - * Bun backend (:3501) Vite server (:3502) - * ``` - */ - -import { createServer, connect, type Server } from 'node:net'; -import type { Logger } from '../../../types'; - -export interface WsProxyOptions { - /** Port the front-door proxy listens on (user-facing) */ - port: number; - /** Port of the Vite dev server (internal) */ - vitePort: number; - /** Port of the Bun backend server (internal) */ - backendPort: number; - /** Route path prefixes that should be proxied to the backend */ - routePaths: string[]; - logger: Logger; -} - -/** - * Start a front-door TCP proxy that routes WebSocket upgrades to the Bun - * backend and everything else to Vite. Returns the `net.Server` instance. - */ -export function startWsProxy(options: WsProxyOptions): Promise { - const { port, vitePort, backendPort, routePaths, logger } = options; - - // Prefixes whose WebSocket upgrades go to Bun instead of Vite - const wsPathPrefixes = ['/_agentuity', ...routePaths]; - - return new Promise((resolve, reject) => { - const server = createServer((socket) => { - let handled = false; - - // Peek at the first chunk to decide where to route - socket.once('data', (firstChunk) => { - handled = true; - - const header = firstChunk.toString('utf8', 0, Math.min(firstChunk.length, 4096)); - - // Detect: is this a WebSocket upgrade for a backend path? - const isUpgrade = /upgrade:\s*websocket/i.test(header); - let targetPort = vitePort; - - if (isUpgrade) { - const pathMatch = header.match(/^(?:GET|POST)\s+(\S+)/); - const pathname = (pathMatch?.[1] ?? '/').split('?')[0] ?? '/'; - - const isBackendPath = wsPathPrefixes.some( - (prefix) => pathname === prefix || pathname.startsWith(prefix + '/') - ); - - if (isBackendPath) { - targetPort = backendPort; - logger.debug('WS upgrade %s → Bun :%d', pathname, backendPort); - } - } - - const target = connect(targetPort, '127.0.0.1'); - - target.on('connect', () => { - target.write(firstChunk); - socket.pipe(target); - target.pipe(socket); - }); - - target.on('error', () => { - if (!socket.destroyed) socket.destroy(); - }); - socket.on('error', () => { - if (!target.destroyed) target.destroy(); - }); - }); - - // Client disconnected before sending anything - socket.on('close', () => { - if (!handled) socket.destroy(); - }); - socket.on('error', () => { - if (!handled) socket.destroy(); - }); - }); - - server.on('error', reject); - - server.listen(port, '127.0.0.1', () => { - logger.debug( - 'WS front-door proxy on :%d (Vite :%d, Bun :%d)', - port, - vitePort, - backendPort - ); - resolve(server); - }); - }); -} diff --git a/packages/cli/src/cmd/cloud/deploy.ts b/packages/cli/src/cmd/cloud/deploy.ts index fcacd1f0d..f5cbe828f 100644 --- a/packages/cli/src/cmd/cloud/deploy.ts +++ b/packages/cli/src/cmd/cloud/deploy.ts @@ -69,7 +69,12 @@ import { validateAptDependencies } from '../../utils/apt-validator'; import { extractDependencies } from '../../utils/deps'; import { zipDir } from '../../utils/zip'; import { typecheck } from '../build/typecheck'; -import { viteBundle } from '../build/vite-bundler'; +import { detectFrameworkWithPackageJson } from '../build/detect'; +import { getAdapter } from '../build/adapters'; +import { packageBuildOutput } from '../build/package'; +import type { BuildResult } from '../build/adapters/types'; +import type { PackageResult } from '../build/package'; +import { generateDeployMetadata } from '../../deploy-metadata'; import { getProjectGithubStatus } from '../git/api'; import { runGitLink } from '../git/link'; import { runForkedDeploy } from './deploy-fork'; @@ -276,6 +281,7 @@ export const deploySubcommand = createSubcommand({ let deployment: Deployment | undefined; let build: BuildMetadata | undefined; + let buildOutputDir: string | undefined; let instructions: DeploymentInstructions | undefined; let complete: DeploymentComplete | undefined; let statusResult: DeploymentStatusResult | undefined; @@ -631,7 +637,7 @@ export const deploySubcommand = createSubcommand({ if (!deployment) { return stepError('deployment was null'); } - let capturedOutput: string[] = []; + const capturedOutput: string[] = []; const rootDir = resolve(projectDir); // Run typecheck with collector for error reporting @@ -653,20 +659,85 @@ export const deploySubcommand = createSubcommand({ return stepError('Typecheck failed\n\n' + typeResult.output); } try { - const bundleResult = await viteBundle({ - rootDir, + // Step 1: Detect framework + const { framework, packageJson } = + await detectFrameworkWithPackageJson(rootDir); + + if (!framework) { + return stepError( + 'Could not detect a JS framework. Ensure package.json exists with a build script.' + ); + } + + const frameworkLabel = framework.version + ? `${framework.name} v${framework.version}` + : framework.name; + capturedOutput.push( + tui.muted(`✓ Detected ${frameworkLabel} (${framework.runtime})`) + ); + + // Step 2: Get adapter and build + const outDir = join(rootDir, '.agentuity'); + const adapter = getAdapter(framework.name); + + const endBuildDiagnostic = collector.startDiagnostic('build'); + const buildResult: BuildResult = await adapter.build({ + projectDir: rootDir, + framework, + packageJson: packageJson!, + outputDir: outDir, + logger: ctx.logger, + collector, dev: false, - deploymentId: deployment.id, - orgId: deployment.orgId, projectId: project.projectId, + orgId: deployment.orgId, region: project.region, - logger: ctx.logger, + deploymentId: deployment.id, deploymentOptions: opts, deploymentConfig: project.deployment, - collector, }); - capturedOutput = [...capturedOutput, ...bundleResult.output]; - build = await loadBuildMetadata(join(projectDir, '.agentuity')); + endBuildDiagnostic(); + + capturedOutput.push(...buildResult.logs); + buildOutputDir = buildResult.outputDir; + + // Step 3: Package output (launch.json, Procfile, .agentuity-build) + const packageResult: PackageResult = packageBuildOutput( + framework, + buildResult, + buildResult.outputDir + ); + + // Step 4: Generate deploy metadata + const isAgentuity = framework.name === 'agentuity'; + + if (isAgentuity) { + // Agentuity native: the Vite pipeline writes agentuity.metadata.json + // with full routes, agents, and assets — load it and add launch metadata + build = await loadBuildMetadata(buildResult.outputDir); + build.launch = packageResult.launch; + } else { + // Non-Agentuity: generate metadata from build result + build = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: rootDir, + projectId: project.projectId, + orgId: deployment.orgId, + region: project.region, + deploymentId: deployment.id, + deploymentConfig: project.deployment, + deploymentOptions: opts, + logger: ctx.logger, + }); + } + + ctx.logger.debug( + 'Launch metadata: %s', + JSON.stringify(build.launch, null, 2) + ); + + // Step 5: Send metadata to API to get upload URLs instructions = await projectDeploymentUpdate( apiClient, deployment.id, @@ -746,9 +817,10 @@ export const deploySubcommand = createSubcommand({ const endZipDiagnostic = collector.startDiagnostic('zip-package'); progress(5); ctx.logger.trace('Starting deployment zip creation'); - // zip up the assets folder + // zip up the build output directory + const zipSourceDir = buildOutputDir ?? join(projectDir, '.agentuity'); const deploymentZip = join(tmpdir(), `${deployment.id}.zip`); - await zipDir(join(projectDir, '.agentuity'), deploymentZip, { + await zipDir(zipSourceDir, deploymentZip, { filter: (_filename: string, relative: string) => { if (relative.startsWith('.vite/')) { return false; @@ -878,7 +950,8 @@ export const deploySubcommand = createSubcommand({ } // Asset filename already includes the subdirectory (e.g., "client/assets/main-abc123.js") - const filePath = join(projectDir, '.agentuity', asset.filename); + const assetBaseDir = buildOutputDir ?? join(projectDir, '.agentuity'); + const filePath = join(assetBaseDir, asset.filename); const headers: Record = { 'Content-Type': asset.contentType, diff --git a/packages/cli/src/cmd/dev/agents.ts b/packages/cli/src/cmd/dev/agents.ts deleted file mode 100644 index c811e836f..000000000 --- a/packages/cli/src/cmd/dev/agents.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { z } from 'zod'; -import { createSubcommand } from '../../types'; -import * as tui from '../../tui'; -import { APIResponseSchema } from '@agentuity/server'; -import { abbreviate, abbreviateDescription } from '../../utils/format'; -import { getCommand } from '../../command-prefix'; - -const AgentSchema = z.object({ - id: z.string(), - name: z.string(), - description: z.string().nullable(), - identifier: z.string().nullable(), // nullable for legacy records - version: z.string().nullable(), - deploymentId: z.string().nullable(), - devmode: z.boolean(), - metadata: z.record(z.string(), z.unknown()).nullable(), - createdAt: z.string(), - updatedAt: z.string(), - evals: z.array( - z.object({ - id: z.string(), - name: z.string(), - description: z.string().nullable(), - identifier: z.string().nullable(), - deploymentId: z.string().nullable(), - version: z.string().nullable(), - devmode: z.boolean(), - createdAt: z.string(), - updatedAt: z.string(), - }) - ), -}); - -const AgentsResponseSchema = APIResponseSchema(z.array(AgentSchema)); - -export const agentsSubcommand = createSubcommand({ - name: 'agents', - description: 'Show devmode agent results', - examples: [ - { command: getCommand('dev agents'), description: 'Show all development mode agents' }, - { command: getCommand('dev agents --verbose'), description: 'Show agents with full details' }, - ], - requires: { auth: true, apiClient: true, project: true }, - schema: { - options: z.object({ - deploymentId: z.string().optional().describe('Filter by deployment ID'), - format: z - .enum(['json', 'table']) - .optional() - .default('table') - .describe('Output format: json or table'), - verbose: z.boolean().optional().default(false).describe('Show full IDs and descriptions'), - }), - response: z.array(AgentSchema), - }, - async handler(ctx) { - const { opts, apiClient, project, options } = ctx; - const projectId = project.projectId; - const format = opts?.format ?? 'table'; - const verbose = opts?.verbose ?? false; - - const deploymentId = opts?.deploymentId; - const queryParams = deploymentId ? `?deploymentId=${deploymentId}` : ''; - - const response = options.json - ? await apiClient.get(`/cli/agent/${projectId}${queryParams}`, AgentsResponseSchema) - : await tui.spinner('Fetching agents', async () => { - return apiClient.get(`/cli/agent/${projectId}${queryParams}`, AgentsResponseSchema); - }); - - if (!response.success) { - tui.fatal(`Failed to fetch agents: ${response.message ?? 'Unknown error'}`); - } - - // Filter out legacy agents without identifiers - const agents = response.data.filter((agent) => agent.identifier !== null); - - if (format === 'json' && !options.json) { - console.log(JSON.stringify(agents, null, 2)); - return agents; - } - - if (!options.json) { - tui.info(`Agents (${agents.length})`); - if (agents.length === 0) { - tui.muted('No agents found'); - } else { - tui.table( - agents.map((agent) => ({ - name: agent.name, - id: verbose ? agent.id : abbreviate(agent.id, 20), - identifier: verbose ? agent.identifier! : abbreviate(agent.identifier!, 20), - deployment: abbreviate(agent.deploymentId, 20), - version: verbose - ? (agent.version ?? 'N/A') - : (abbreviate(agent.version, 20) ?? 'N/A'), - evals: agent.evals.length, - createdAt: new Date(agent.createdAt).toLocaleString(), - })), - ['name', 'id', 'identifier', 'deployment', 'version', 'evals', 'createdAt'] - ); - - // Show evals for each agent - for (const agent of agents) { - if (agent.evals.length > 0) { - console.log(`\n Evals for ${agent.name}:`); - tui.table( - agent.evals.map((evalItem) => ({ - name: evalItem.name, - id: verbose ? evalItem.id : abbreviate(evalItem.id, 20), - identifier: verbose - ? (evalItem.identifier ?? 'N/A') - : (abbreviate(evalItem.identifier, 20) ?? 'N/A'), - deployment: abbreviate(evalItem.deploymentId, 20), - version: verbose - ? (evalItem.version ?? 'N/A') - : (abbreviate(evalItem.version, 20) ?? 'N/A'), - description: verbose - ? (evalItem.description ?? 'N/A') - : abbreviateDescription(evalItem.description), - createdAt: new Date(evalItem.createdAt).toLocaleString(), - })), - [ - 'name', - 'id', - 'identifier', - 'deployment', - 'version', - 'description', - 'createdAt', - ] - ); - } - } - } - } - - return agents; - }, -}); diff --git a/packages/cli/src/cmd/dev/api.ts b/packages/cli/src/cmd/dev/api.ts deleted file mode 100644 index a7797eb81..000000000 --- a/packages/cli/src/cmd/dev/api.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { APIResponseSchema } from '@agentuity/server'; -import { z } from 'zod'; -import type { APIClient } from '../../api'; -import { StructuredError } from '@agentuity/core'; -import { createPublicKey } from 'crypto'; - -const DevmodeRequestSchema = z.object({ - hostname: z.string().optional().describe('the hostname for the endpoint'), - publicKey: z.string().optional().describe('the public key PEM for the endpoint'), -}); - -type DevmodeRequest = z.infer; - -function extractPublicKeyPEM(privateKeyPEM: string): string | undefined { - try { - const publicKey = createPublicKey(privateKeyPEM); - return publicKey.export({ type: 'spki', format: 'pem' }) as string; - } catch { - return undefined; - } -} - -const DevmodeResponseSchema = z.object({ - id: z.string(), - hostname: z.string(), - privateKey: z.string().optional(), -}); -export type DevmodeResponse = z.infer; - -const DevmodeResponseAPISchema = APIResponseSchema(DevmodeResponseSchema); -type DevmodeResponseAPI = z.infer; - -const DevmodeEndpointError = StructuredError('DevmodeEndpointError'); - -/** - * Generate an Endpoint ID and Hostname - * - * @param apiClient the api client to use - * @param projectId the project id - * @param hostname the hostname is already configured - * @param privateKey the private key PEM if already configured - * @returns - */ -export async function generateEndpoint( - apiClient: APIClient, - projectId: string, - hostname?: string, - privateKey?: string -): Promise { - const publicKey = privateKey ? extractPublicKeyPEM(privateKey) : undefined; - - const resp = await apiClient.request( - 'POST', - `/cli/devmode/3/${projectId}`, - DevmodeResponseAPISchema, - { hostname, publicKey }, - DevmodeRequestSchema - ); - - if (!resp.success) { - throw new DevmodeEndpointError({ message: resp.message }); - } - - return resp.data; -} diff --git a/packages/cli/src/cmd/dev/dev-lock.ts b/packages/cli/src/cmd/dev/dev-lock.ts deleted file mode 100644 index 46a6f520f..000000000 --- a/packages/cli/src/cmd/dev/dev-lock.ts +++ /dev/null @@ -1,332 +0,0 @@ -/** - * Dev Lock Manager - * - * Manages a lockfile to track the dev server process and its children. - * On startup, detects and cleans up stale processes from previous sessions. - * Ensures proper cleanup on all exit paths. - */ - -import { join, dirname } from 'node:path'; -import { randomUUID } from 'node:crypto'; -import { existsSync, unlinkSync } from 'node:fs'; -import { promises as fs } from 'node:fs'; - -interface LoggerLike { - debug: (msg: string, ...args: unknown[]) => void; - warn: (msg: string, ...args: unknown[]) => void; - error: (msg: string, ...args: unknown[]) => void; -} - -/** - * Lockfile format for tracking dev server processes - */ -export interface DevLockFileV1 { - version: 1; - projectRoot: string; - mainPid: number; - instanceId: string; - createdAt: string; - updatedAt: string; - ports: { - bun?: number; - vite?: number; - gravity?: number; - }; - children: Array<{ - pid: number; - type: 'gravity' | 'vite' | 'other'; - description?: string; - }>; -} - -export interface DevLockManager { - state: DevLockFileV1; - registerChild: (info: { - pid: number; - type: 'gravity' | 'vite' | 'other'; - description?: string; - }) => Promise; - updatePorts: (ports: Partial) => Promise; - release: () => Promise; -} - -function getLockPath(rootDir: string): string { - return join(rootDir, '.agentuity', 'devserver.lock'); -} - -/** - * Check if a process with the given PID exists - */ -function pidExists(pid: number): boolean { - if (!Number.isInteger(pid) || pid <= 0) return false; - try { - process.kill(pid, 0); - return true; - } catch (err: unknown) { - const error = err as NodeJS.ErrnoException; - if (error.code === 'ESRCH' || error.code === 'EINVAL') return false; - // EPERM means it exists but we can't signal it - return error.code === 'EPERM'; - } -} - -/** - * Kill a process by PID with SIGTERM, then SIGKILL if still alive - */ -async function killPid(pid: number, logger: LoggerLike): Promise { - if (!pidExists(pid)) return; - - try { - process.kill(pid, 'SIGTERM'); - logger.debug('Sent SIGTERM to pid %d', pid); - } catch (err: unknown) { - const error = err as NodeJS.ErrnoException; - if (error.code === 'ESRCH') return; - logger.debug('Error sending SIGTERM to pid %d: %s', pid, error.message); - } - - // Give it a moment to exit gracefully - await new Promise((r) => setTimeout(r, 500)); - - if (!pidExists(pid)) return; - - // Force kill - try { - process.kill(pid, 'SIGKILL'); - logger.debug('Sent SIGKILL to pid %d', pid); - } catch (err: unknown) { - const error = err as NodeJS.ErrnoException; - if (error.code !== 'ESRCH') { - logger.debug('Error sending SIGKILL to pid %d: %s', pid, error.message); - } - } - - // Wait for process to fully terminate - await new Promise((r) => setTimeout(r, 100)); -} - -/** - * Read an existing lockfile (if any) - */ -async function readLock(lockPath: string, logger: LoggerLike): Promise { - if (!existsSync(lockPath)) return null; - try { - const raw = await fs.readFile(lockPath, 'utf8'); - const parsed = JSON.parse(raw); - if (parsed && parsed.version === 1) return parsed as DevLockFileV1; - } catch (err) { - logger.warn('Failed to read/parse devserver.lock: %s', err); - } - return null; -} - -/** - * Remove lockfile if it exists - */ -async function removeLock(lockPath: string, logger: LoggerLike): Promise { - try { - await fs.unlink(lockPath); - logger.debug('Removed devserver.lock'); - } catch (err: unknown) { - const error = err as NodeJS.ErrnoException; - if (error.code !== 'ENOENT') { - logger.debug('Failed to remove devserver.lock: %s', error.message); - } - } -} - -/** - * Check if a port is in use by attempting to connect to it. - * Uses GET instead of HEAD since some servers return 405 for HEAD requests. - * Any response (including errors like 404, 500) means the port is in use. - */ -async function isPortResponding(port: number): Promise { - try { - const response = await fetch(`http://127.0.0.1:${port}/`, { - method: 'GET', - signal: AbortSignal.timeout(500), - }); - // Consume body to avoid memory leaks - await response.text().catch(() => {}); - return true; - } catch (err: unknown) { - // Connection refused (ECONNREFUSED) means nothing is listening - // Other errors (timeout, reset) might indicate a busy port - const error = err as Error & { cause?: { code?: string } }; - const code = error.cause?.code; - if (code === 'ECONNREFUSED' || code === 'ECONNRESET') { - return false; - } - // For other errors (like timeout), assume port might be in use but unresponsive - return false; - } -} - -/** - * Kill processes referenced by a stale lock, then remove the lock - */ -async function cleanupStaleLock( - rootDir: string, - lock: DevLockFileV1, - logger: LoggerLike -): Promise { - const lockPath = getLockPath(rootDir); - logger.debug( - 'Cleaning up stale devserver.lock (pid=%d, instance=%s)', - lock.mainPid, - lock.instanceId - ); - - // Collect all PIDs to kill (children first, then main) - const childPids: number[] = []; - for (const child of lock.children ?? []) { - if (child.pid && child.pid !== lock.mainPid && child.pid !== process.pid) { - childPids.push(child.pid); - } - } - - // Kill children first - for (const pid of childPids) { - await killPid(pid, logger); - } - - // Kill main process if it's not us - if (lock.mainPid !== process.pid) { - await killPid(lock.mainPid, logger); - } - - // Remove the stale lockfile - await removeLock(lockPath, logger); -} - -/** - * Ensure there is no conflicting dev server for this project - * Always cleans up any existing lock and kills associated processes - */ -async function ensureNoActiveDevForProject( - rootDir: string, - _port: number, - logger: LoggerLike -): Promise { - const lockPath = getLockPath(rootDir); - const existing = await readLock(lockPath, logger); - if (!existing) return; - - const now = Date.now(); - const createdAt = Date.parse(existing.createdAt || ''); - const ageMs = Number.isFinite(createdAt) ? now - createdAt : Infinity; - - const mainAlive = pidExists(existing.mainPid); - - // Check if the recorded Bun port is still responding - let bunPortInUse = false; - if (existing.ports?.bun) { - bunPortInUse = await isPortResponding(existing.ports.bun); - } - - logger.debug( - 'Found existing lock (pid=%d, mainAlive=%s, bunPortInUse=%s, age=%dms) - cleaning up', - existing.mainPid, - mainAlive, - bunPortInUse, - ageMs - ); - - await cleanupStaleLock(rootDir, existing, logger); -} - -/** - * Initialize a new lock for the current dev run - * This should be called after ensureNoActiveDevForProject has possibly cleaned stale state - */ -async function initDevLock( - rootDir: string, - port: number, - logger: LoggerLike -): Promise { - const lockPath = getLockPath(rootDir); - await fs.mkdir(dirname(lockPath), { recursive: true }); - - const state: DevLockFileV1 = { - version: 1, - projectRoot: rootDir, - mainPid: process.pid, - instanceId: randomUUID(), - createdAt: new Date().toISOString(), - updatedAt: new Date().toISOString(), - ports: { bun: port }, - children: [], - }; - - const writeLock = async () => { - state.updatedAt = new Date().toISOString(); - await fs.writeFile(lockPath, JSON.stringify(state, null, 2), { encoding: 'utf8' }); - }; - - await writeLock(); - logger.debug('Created devserver.lock (pid=%d, instance=%s)', state.mainPid, state.instanceId); - - const manager: DevLockManager = { - state, - - async registerChild(child) { - if (!child.pid) return; - // Avoid duplicates - if (state.children.some((c) => c.pid === child.pid)) return; - state.children.push(child); - await writeLock(); - logger.debug('Registered child process (pid=%d, type=%s)', child.pid, child.type); - }, - - async updatePorts(ports) { - state.ports = { ...state.ports, ...ports }; - await writeLock(); - }, - - async release() { - await removeLock(lockPath, logger); - }, - }; - - return manager; -} - -/** - * Main entry point for dev lock management - * Call this early in the dev command to: - * 1. Clean up any stale processes from previous sessions - * 2. Create a new lockfile for this session - */ -export async function prepareDevLock( - rootDir: string, - port: number, - logger: LoggerLike -): Promise { - await ensureNoActiveDevForProject(rootDir, port, logger); - return initDevLock(rootDir, port, logger); -} - -/** - * Utility to kill all processes in a lockfile by path - * Useful for emergency cleanup without creating a new lock - */ -export async function cleanupLockfile(rootDir: string, logger: LoggerLike): Promise { - const lockPath = getLockPath(rootDir); - const existing = await readLock(lockPath, logger); - if (existing) { - await cleanupStaleLock(rootDir, existing, logger); - } -} - -/** - * Synchronous lockfile removal for use in process.on('exit') handlers - * Does not kill processes - just removes the file - */ -export function releaseLockSync(rootDir: string): void { - const lockPath = getLockPath(rootDir); - try { - unlinkSync(lockPath); - } catch { - // Ignore errors - file may already be gone - } -} diff --git a/packages/cli/src/cmd/dev/download.ts b/packages/cli/src/cmd/dev/download.ts deleted file mode 100644 index 660e94fc8..000000000 --- a/packages/cli/src/cmd/dev/download.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { randomUUID } from 'node:crypto'; -import { mkdirSync, rmSync, writeFileSync } from 'node:fs'; -import { tmpdir, platform } from 'node:os'; -import { join, dirname } from 'node:path'; -import * as tar from 'tar'; -import { StructuredError } from '@agentuity/core'; -import { spinner } from '../../tui'; - -interface GravityClient { - filename: string; - version: string; -} - -const GravityVersionError = StructuredError('GravityVersionError')<{ - status: number; - statusText: string; -}>(); -const GravityDownloadError = StructuredError('GravityDownloadError')<{ - status: number; - statusText: string; -}>(); -const GravityExtractionError = StructuredError('GravityExtractionError')<{ - path: string; -}>(); - -function getBaseURL(): string { - return process.env.AGENTUITY_SH_URL || 'https://agentuity.sh'; -} - -/** - * - * @returns full path to the downloaded file - */ -export async function download(gravityDir: string): Promise { - const baseURL = getBaseURL(); - - // Step 1: Get the latest version from agentuity.sh - const tag = (await spinner({ - message: 'Checking Agentuity Gravity', - callback: async () => { - const resp = await fetch(`${baseURL}/release/gravity/version`, { - signal: AbortSignal.timeout(10_000), - }); - if (!resp.ok) { - throw new GravityVersionError({ - status: resp.status, - statusText: resp.statusText, - }); - } - const text = (await resp.text()).trim(); - return text.startsWith('v') ? text : `v${text}`; - }, - clearOnSuccess: true, - })) as string; - - const version = tag.startsWith('v') ? tag.slice(1) : tag; - const releaseFilename = join(gravityDir, version, 'gravity'); - - // Step 2: Check if already downloaded - if (await Bun.file(releaseFilename).exists()) { - return { filename: releaseFilename, version }; - } - - // Step 3: Download the binary from agentuity.sh - const os = platform(); - let arch: string = process.arch; - if (arch === 'x64') { - arch = 'x86_64'; - } - - const tmpFile = join(tmpdir(), `${randomUUID()}.tar.gz`); - - try { - await spinner({ - message: `Downloading Gravity ${version}`, - callback: async () => { - const resp = await fetch(`${baseURL}/release/gravity/${tag}/${os}/${arch}`, { - signal: AbortSignal.timeout(60_000), - }); - if (!resp.ok) { - throw new GravityDownloadError({ - status: resp.status, - statusText: resp.statusText, - }); - } - const buffer = await resp.arrayBuffer(); - writeFileSync(tmpFile, Buffer.from(buffer)); - }, - clearOnSuccess: true, - }); - - // Step 4: Extract the tarball - await spinner({ - message: 'Extracting release', - callback: async () => { - const downloadDir = dirname(releaseFilename); - if (!(await Bun.file(downloadDir).exists())) { - mkdirSync(downloadDir, { recursive: true }); - } - await tar.x({ file: tmpFile, cwd: downloadDir, chmod: true }); - }, - clearOnSuccess: true, - }); - } finally { - // Clean up temp file regardless of success or failure - if (await Bun.file(tmpFile).exists()) { - rmSync(tmpFile); - } - } - - // Step 5: Verify the binary was extracted - if (!(await Bun.file(releaseFilename).exists())) { - throw new GravityExtractionError({ path: releaseFilename }); - } - - return { filename: releaseFilename, version }; -} diff --git a/packages/cli/src/cmd/dev/file-watcher.ts b/packages/cli/src/cmd/dev/file-watcher.ts deleted file mode 100644 index fa48f7ad8..000000000 --- a/packages/cli/src/cmd/dev/file-watcher.ts +++ /dev/null @@ -1,423 +0,0 @@ -/** - * File Watcher for Dev Server Hot Reload - * - * Watches source files and triggers server restart on changes. - * Handles both backend (API, agents, lib) and generates restart signals. - */ - -import { watch, type FSWatcher, statSync, readdirSync, lstatSync } from 'node:fs'; -import { resolve, relative } from 'node:path'; -import type { Logger } from '../../types'; -import { createAgentTemplates } from './templates'; - -export interface FileWatcherOptions { - rootDir: string; - logger: Logger; - onRestart: () => void; - additionalPaths?: string[]; -} - -export interface FileWatcherManager { - start: () => void; - stop: () => void; - pause: () => void; - resume: () => void; -} - -/** - * Create a file watcher manager for hot reload - */ -export function createFileWatcher(options: FileWatcherOptions): FileWatcherManager { - const { rootDir, logger, onRestart, additionalPaths = [] } = options; - - const watchers: FSWatcher[] = []; - let paused = false; - let buildCooldownTimer: NodeJS.Timeout | null = null; - - // Directories to ignore - these are NEVER traversed into - // This prevents EMFILE errors from symlink cycles in node_modules - const ignoreDirs = new Set([ - '.agentuity', - '.agents', - '.claude', - '.code', - '.opencode', - 'node_modules', - '.git', - '.github', - 'dist', - 'build', - '.next', - '.turbo', - '.npm', - '.dist', - '.vscode', - '.idea', - '.DS_Store', - '.playwright', - '.bun', - 'src/generated', - ]); - - // Paths to ignore for file change events (but may still be traversed) - const ignorePaths = [ - '.agentuity', - '.agents', - '.claude', - '.code', - '.opencode', - 'node_modules', - '.git', - '.github', - 'dist', - 'build', - '.next', - '.turbo', - '.npm', - '.dist', - '.vscode', - '.idea', - '.bun', - '.DS_Store', - '.playwright', - 'src/web', // Vite handles frontend with HMR - no backend restart needed - 'src/generated', // Generated files shouldn't trigger rebuilds - ]; - - // File extensions to ignore - non-code files that shouldn't trigger reload - const ignoreExtensions = new Set([ - '.md', - '.mdx', - '.txt', - '.log', - '.lock', - '.yaml', - '.yml', - '.toml', - '.csv', - '.svg', - '.png', - '.jpg', - '.jpeg', - '.gif', - '.webp', - '.ico', - '.woff', - '.woff2', - '.ttf', - '.eot', - '.mp4', - '.mp3', - '.wav', - '.ogg', - '.webm', - '.pdf', - '.zip', - '.tar', - '.gz', - '.map', - ]); - - /** - * Check if a path should be ignored - */ - function shouldIgnorePath(changedFile: string | null, watchDir: string): boolean { - if (!changedFile) return false; - - const absPath = resolve(watchDir, changedFile); - - // Check against ignore list - match both relative path and absolute path - for (const ignorePath of ignorePaths) { - // Check relative path from watchDir - if ( - changedFile === ignorePath || - changedFile.startsWith(`${ignorePath}/`) || - changedFile.startsWith(`${ignorePath}\\`) - ) { - logger.trace('File change ignored (%s): %s', ignorePath, changedFile); - return true; - } - - // Check if absolute path contains the ignore pattern - const ignoreAbsPath = resolve(rootDir, ignorePath); - if ( - absPath === ignoreAbsPath || - absPath.startsWith(`${ignoreAbsPath}/`) || - absPath.startsWith(`${ignoreAbsPath}\\`) - ) { - logger.trace('File change ignored (%s): %s', ignorePath, changedFile); - return true; - } - - // Also check if changedFile path includes the ignore pattern anywhere - // This handles cases like "some/path/.agentuity/file.js" - const normalizedChanged = changedFile.replace(/\\/g, '/'); - const normalizedIgnore = ignorePath.replace(/\\/g, '/'); - if ( - normalizedChanged.includes(`/${normalizedIgnore}/`) || - normalizedChanged.includes(`/${normalizedIgnore}`) - ) { - logger.trace('File change ignored (%s in path): %s', ignorePath, changedFile); - return true; - } - } - - // Ignore temp files from editors - if (changedFile.match(/\.(tmp|swp|swo|swx)$|~$/)) { - logger.trace('File change ignored (temp file): %s', changedFile); - return true; - } - - // Ignore files with non-code extensions - const extIndex = changedFile.lastIndexOf('.'); - if (extIndex !== -1) { - const ext = changedFile.slice(extIndex).toLowerCase(); - if (ignoreExtensions.has(ext)) { - logger.trace('File change ignored (%s): %s', ext, changedFile); - return true; - } - } - - // Ignore hidden files (except .env) - if (changedFile.startsWith('.') && !changedFile.startsWith('.env')) { - logger.trace('File change ignored (hidden file): %s', changedFile); - return true; - } - - return false; - } - - /** - * Handle file change event - */ - function handleFileChange(eventType: string, changedFile: string | null, watchDir: string) { - if (paused) { - logger.trace('File change ignored (watcher paused): %s', changedFile); - return; - } - - if (shouldIgnorePath(changedFile, watchDir)) { - return; - } - - // During build cooldown, ignore changes (they're likely build outputs) - if (buildCooldownTimer) { - logger.trace('File change ignored (build cooldown): %s', changedFile); - return; - } - - // Get absolute path for checking - const absPath = changedFile ? resolve(watchDir, changedFile) : watchDir; - - // Check if this is a directory - let isDirectory = false; - try { - const stats = statSync(absPath); - isDirectory = stats.isDirectory(); - } catch { - // File doesn't exist (was deleted) - not a directory - isDirectory = false; - } - - // Check if an empty directory was created in src/agent/ - // This helps with developer experience by auto-scaffolding template files - if (changedFile && eventType === 'rename' && isDirectory) { - try { - // Normalize the path for comparison (use forward slashes) - const normalizedPath = changedFile.replace(/\\/g, '/'); - - // Check if it's empty - const contents = readdirSync(absPath); - if (contents.length === 0) { - if ( - normalizedPath.startsWith('src/agent/') || - normalizedPath.includes('/src/agent/') - ) { - logger.debug('Agent directory created: %s', changedFile); - createAgentTemplates(absPath); - } - } - } catch (error) { - // File might have been deleted or doesn't exist yet - this is normal - logger.trace( - 'Unable to check directory for template creation (%s): %s', - changedFile, - error - ); - } - } - - // Ignore directory-only change events (mtime updates when files inside change) - // We only care about actual file changes - the watcher will report those directly - if (isDirectory && eventType === 'change') { - logger.trace('File change ignored (directory mtime update): %s', changedFile); - return; - } - - logger.debug('File changed (%s): %s', eventType, changedFile || watchDir); - onRestart(); - } - - /** - * Recursively collect all directories to watch, skipping ignored directories. - * This prevents EMFILE errors from symlink cycles in node_modules. - */ - function collectWatchDirs(dir: string, visited: Set = new Set()): string[] { - const dirs: string[] = [dir]; - - try { - // Use lstat to check for symlinks - get the real path to detect cycles - const stat = lstatSync(dir); - - // Skip symlinks to prevent following circular symlinks - if (stat.isSymbolicLink()) { - logger.trace('Skipping symlink: %s', dir); - return []; - } - - // Track visited inodes to detect cycles - const key = `${stat.dev}:${stat.ino}`; - if (visited.has(key)) { - logger.trace('Skipping already visited directory (cycle detected): %s', dir); - return []; - } - visited.add(key); - - const entries = readdirSync(dir, { withFileTypes: true }); - - for (const entry of entries) { - if (!entry.isDirectory()) continue; - - const name = entry.name; - - // Skip ignored directories entirely - this is the key fix - if (ignoreDirs.has(name)) { - logger.trace('Skipping ignored directory: %s', resolve(dir, name)); - continue; - } - - // Skip hidden directories (except specific ones like .env folders) - if (name.startsWith('.')) { - logger.trace('Skipping hidden directory: %s', resolve(dir, name)); - continue; - } - - const fullPath = resolve(dir, name); - dirs.push(...collectWatchDirs(fullPath, visited)); - } - } catch (error) { - logger.trace('Error reading directory %s: %s', dir, error); - } - - return dirs; - } - - /** - * Start watching files - */ - function start() { - logger.debug('Starting file watchers for hot reload...'); - - // Collect all directories to watch, excluding node_modules and other ignored dirs - const allDirs = collectWatchDirs(rootDir); - - // Add additional paths - if (additionalPaths && additionalPaths.length > 0) { - for (const additionalPath of additionalPaths) { - const fullPath = resolve(rootDir, additionalPath); - allDirs.push(...collectWatchDirs(fullPath)); - } - } - - // De-duplicate directories - const uniqueDirs = [...new Set(allDirs)]; - - logger.debug('Collected %d directories to watch', uniqueDirs.length); - - // Watch each directory non-recursively - for (const watchPath of uniqueDirs) { - try { - // Use non-recursive watch to avoid traversing into node_modules - const watcher = watch(watchPath, { recursive: false }, (eventType, changedFile) => { - // Construct relative path from rootDir for consistent handling - const relPath = changedFile - ? relative(rootDir, resolve(watchPath, changedFile)) - : relative(rootDir, watchPath); - handleFileChange(eventType, relPath || changedFile, rootDir); - }); - - watchers.push(watcher); - } catch (error) { - logger.trace('Failed to start watcher for %s: %s', watchPath, error); - } - } - - logger.debug('File watchers started (%d directories)', watchers.length); - } - - /** - * Stop all watchers - */ - function stop() { - logger.debug('Stopping file watchers...'); - - for (const watcher of watchers) { - try { - watcher.close(); - } catch (error) { - logger.trace('Error closing watcher: %s', error); - } - } - - watchers.length = 0; - - if (buildCooldownTimer) { - clearTimeout(buildCooldownTimer); - buildCooldownTimer = null; - } - - logger.debug('File watchers stopped'); - } - - /** - * Temporarily pause watching (e.g., during build) - */ - function pause() { - paused = true; - logger.trace('File watchers paused'); - - // Set cooldown timer to ignore changes for a bit after build - if (buildCooldownTimer) { - clearTimeout(buildCooldownTimer); - } - - buildCooldownTimer = setTimeout(() => { - buildCooldownTimer = null; - logger.trace('Build cooldown expired'); - }, 500); // 500ms cooldown - } - - /** - * Resume watching - */ - function resume() { - paused = false; - - // Clear any pending build cooldown timer so file changes are detected immediately. - // Without this, events arriving during the remaining cooldown window after a fast - // typecheck failure would be silently dropped. - if (buildCooldownTimer) { - clearTimeout(buildCooldownTimer); - buildCooldownTimer = null; - } - - logger.trace('File watchers resumed'); - } - - return { - start, - stop, - pause, - resume, - }; -} diff --git a/packages/cli/src/cmd/dev/index.ts b/packages/cli/src/cmd/dev/index.ts index 76ccca34d..b8fa9d5bc 100644 --- a/packages/cli/src/cmd/dev/index.ts +++ b/packages/cli/src/cmd/dev/index.ts @@ -1,1116 +1,176 @@ +/** + * Dev command — runs the project's own dev script. + * + * Detects the package manager (bun/npm/pnpm/yarn) from the project, + * then runs ` run dev`. Before spawning, injects Agentuity AI + * Gateway environment variables so LLM SDK calls (OpenAI, Anthropic, + * Groq) are automatically routed through the gateway when the user + * has an AGENTUITY_SDK_KEY configured. + */ + +import { resolve } from 'node:path'; import { z } from 'zod'; -import { resolve, join } from 'node:path'; -import { existsSync } from 'node:fs'; -import { getServiceUrls } from '@agentuity/server'; import { createCommand } from '../../types'; -import { startBunDevServer } from '../build/vite/bun-dev-server'; -import { startViteAssetServer } from '../build/vite/vite-asset-server'; import * as tui from '../../tui'; import { getCommand } from '../../command-prefix'; -import { generateEndpoint, type DevmodeResponse } from './api'; -import { APIClient, getAPIBaseURL, getAppBaseURL, getGravityDevModeURL } from '../../api'; -import { download } from './download'; -import { createDevmodeSyncService } from './sync'; -import { getDevmodeDeploymentId } from '../build/ids'; -import { getDefaultConfigDir, saveConfig, loadProjectSDKKey, getAuth } from '../../config'; -import type { Config } from '../../types'; -import { typecheck } from '../build/typecheck'; -import { validateGravityRequiresUpgrade } from '../../runtime'; -import { isTTY, hasLoggedInBefore } from '../../auth'; - -import { prepareDevLock, releaseLockSync } from './dev-lock'; -import { checkAndUpgradeDependencies } from '../../utils/dependency-checker'; -import { initProcessManager } from './process-manager'; -import { detectVersionMismatch, formatVersionMismatchWarning } from '../../utils/version-mismatch'; - import { ErrorCode } from '../../errors'; +import { detectFrameworkWithPackageJson } from '../build/detect'; +import { detectPackageManager, getRunCommand } from '../build/detect/util'; -const DEFAULT_PORT = 3500; -const MIN_PORT = 1024; -const MAX_PORT = 65535; - -// Minimal interface for subprocess management -interface ProcessLike { - kill: (signal?: number | NodeJS.Signals) => void; - exitCode: number | null; - pid?: number; - stdout?: AsyncIterable; - stderr?: AsyncIterable; -} - -interface ServerLike { - close: () => void | Promise; -} - -/** - * Kill any lingering gravity processes from previous dev sessions. - * This is a defensive measure to clean up orphaned processes. - */ -async function killLingeringGravityProcesses(logger: { - debug: (msg: string, ...args: unknown[]) => void; -}): Promise { - // Only attempt on Unix-like systems (macOS, Linux) - if (process.platform === 'win32') { - return; - } - - try { - // Use pkill to kill gravity processes owned by current user - // The -f flag matches against full command line - // We specifically match the gravity binary name to avoid killing unrelated processes - const result = Bun.spawnSync(['pkill', '-f', 'gravity.*--endpoint-id'], { - stdout: 'ignore', - stderr: 'ignore', - }); - - // Exit code 0 = processes killed, 1 = no matching processes, other = error - if (result.exitCode === 0) { - logger.debug('Killed lingering gravity processes from previous session'); - // Brief pause to let processes fully terminate - await new Promise((resolve) => setTimeout(resolve, 100)); - } else if (result.exitCode === 1) { - logger.debug('no lingering gravity processes found'); - } - } catch { - // pkill not available or failed - not critical, continue - } -} - -/** - * Kill the Bun backend subprocess if one is running. - */ -function killBunSubprocess(logger: { debug: (msg: string, ...args: unknown[]) => void }): void { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const globalAny = globalThis as any; - const bunSubprocess = globalAny.__AGENTUITY_BUN_SUBPROCESS__ as ProcessLike | undefined; - if (!bunSubprocess) return; - - try { - bunSubprocess.kill('SIGTERM'); - logger.debug('Bun subprocess killed'); - } catch (err) { - logger.debug('Error killing Bun subprocess: %s', err); - } - globalAny.__AGENTUITY_BUN_SUBPROCESS__ = undefined; -} - -const getDefaultPort = (): number => { - const envPort = process.env.PORT; - if (!envPort) { - return DEFAULT_PORT; - } - const trimmed = envPort.trim(); - if (!trimmed || !/^\d+$/.test(trimmed)) { - return DEFAULT_PORT; - } - const parsed = Number(trimmed); - if (!Number.isInteger(parsed) || parsed < MIN_PORT || parsed > MAX_PORT) { - return DEFAULT_PORT; - } - return parsed; -}; - -const shouldDisableInteractive = (interactive?: boolean) => { - if (!interactive) { - return true; - } - return process.env.TERM_PROGRAM === 'vscode'; -}; +const DEFAULT_PORT = 3000; export const command = createCommand({ name: 'dev', - description: 'Build and run the development server', - tags: ['mutating', 'slow', 'requires-project'], + description: 'Run the project development server', + tags: ['mutating', 'slow'], idempotent: true, + optional: { project: true }, examples: [ { command: getCommand('dev'), description: 'Start development server' }, { command: getCommand('dev --port 8080'), description: 'Specify custom port' }, - { command: getCommand('dev --local'), description: 'Run in local mode' }, - { command: getCommand('dev --no-public'), description: 'Disable public URL' }, ], schema: { options: z.object({ - local: z.boolean().optional().describe('Turn on local services (instead of cloud)'), - interactive: z.boolean().default(true).optional().describe('Turn on interactive mode'), - public: z - .boolean() - .optional() - .default(!process.env.CI) - .describe('Turn on or off the public url'), port: z .number() - .min(MIN_PORT) - .max(MAX_PORT) - .default(getDefaultPort()) - .describe('The TCP port to start the dev server (also reads from PORT env)'), - inspect: z.boolean().optional().describe('Enable bun debugger on available port'), - inspectWait: z - .boolean() - .optional() - .describe('Enable bun debugger and wait for connection before executing'), - inspectBrk: z - .boolean() + .min(1024) + .max(65535) .optional() - .describe('Enable bun debugger with breakpoint at first line'), - - noTypecheck: z - .boolean() + .describe('Port to pass to the dev server via PORT env var'), + script: z + .string() .optional() - .describe('Skip TypeScript type checking on startup and restarts'), - - resume: z.string().optional().describe('Resume a paused Hub session by ID'), + .describe('Custom script name to run instead of "dev" (e.g., "dev:web")'), }), }, - optional: { project: true }, async handler(ctx) { - const { opts, logger, projectDir } = ctx; - let { config, project } = ctx; - - // Get auth state - we handle auth ourselves based on project state - let auth = await getAuth(); - + const { opts, projectDir, logger } = ctx; const rootDir = resolve(projectDir); - const appTs = join(rootDir, 'app.ts'); - const srcDir = join(rootDir, 'src'); - - // Verify required files exist - const mustHaves = [join(rootDir, 'package.json'), appTs, srcDir]; - const missing: string[] = []; - - const interactive = !shouldDisableInteractive(opts.interactive); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let originalExit = (globalThis as any).AGENTUITY_PROCESS_EXIT; - - if (!originalExit) { - originalExit = process.exit.bind(process); - } - - for (const filename of mustHaves) { - if (!existsSync(filename)) { - missing.push(filename); - } - } - - if (missing.length) { - tui.error(`${rootDir} does not appear to be a valid Agentuity project`); - for (const filename of missing) { - tui.bullet(`Missing ${filename}`); - } - originalExit(1); - } - - // Handle authentication state based on project registration - if (project) { - // Registered project (has agentuity.json) - check if user needs to login - const isValidAuth = auth && auth.expires > new Date(); - if (!isValidAuth) { - if (isTTY()) { - const hasProfile = await hasLoggedInBefore(); - const message = hasProfile - ? 'Your session has expired or you are not logged in.' - : 'This project is registered with Agentuity Cloud but you are not logged in.'; - - tui.warning(message); - tui.newline(); - - const shouldLogin = await tui.confirm( - hasProfile - ? 'Would you like to login now?' - : 'Would you like to login or create an account?', - true - ); - - if (shouldLogin) { - tui.newline(); - - // Run login flow inline - const { loginCommand } = await import('../auth/login'); - - // Ensure apiClient is available for login handler - const loginCtx = ctx as unknown as Record; - if (!loginCtx.apiClient) { - loginCtx.apiClient = new APIClient(getAPIBaseURL(config), logger, config); - } - if (loginCommand.handler) { - await loginCommand.handler( - loginCtx as Parameters>[0] - ); - } + // Read package.json + const { framework, packageJson } = await detectFrameworkWithPackageJson(rootDir); - // Refresh auth state after login - const freshAuth = await getAuth(); - if (!freshAuth || freshAuth.expires <= new Date()) { - tui.fatal('Login was not completed successfully.', ErrorCode.AUTH_FAILED); - } - auth = freshAuth; - tui.newline(); - tui.success('Login successful! Continuing with dev server...'); - tui.newline(); - } else { - // User chose not to login - show warning about disabled features - tui.newline(); - tui.showLoggedOutMessage(getAppBaseURL(config), hasProfile); - } - } else { - // Non-TTY: fatal error with instruction - logger.fatal( - `Authentication required for this project.\n` + - `Run "${getCommand('auth login')}" to login to Agentuity`, - ErrorCode.AUTH_REQUIRED - ); - } - } - - // After auth is established, verify project access - if (auth && config) { - const { reconcileProject } = await import('../project/reconcile'); - const apiClient = new APIClient(getAPIBaseURL(config), logger, auth.apiKey, config); - - const result = await reconcileProject({ - dir: rootDir, - auth, - apiClient, - config, - logger, - interactive: isTTY(), - }); - - if (result.status === 'error') { - tui.fatal(result.message!, ErrorCode.PROJECT_NOT_FOUND); - } else if (result.status === 'imported' && result.project) { - // Project was re-imported to user's org - project = result.project; - tui.newline(); - } else if (result.status === 'skipped') { - // User declined import - can't continue with cloud features - tui.warning('Continuing in local-only mode.'); - project = undefined; - } - } - } else { - // No agentuity.json - check if this is a valid project that needs importing - if (auth && config) { - const { reconcileProject } = await import('../project/reconcile'); - const apiClient = new APIClient(getAPIBaseURL(config), logger, auth.apiKey, config); - - const result = await reconcileProject({ - dir: rootDir, - auth, - apiClient, - config, - logger, - interactive: isTTY(), - }); - - if (result.status === 'error') { - // Not a valid project - show local-only warning - tui.showLocalOnlyWarning(); - } else if (result.status === 'imported' && result.project) { - // Project was imported - reload project config - project = result.project; - tui.newline(); - } else if (result.status === 'skipped') { - // User declined import - continue in local-only mode - tui.showLocalOnlyWarning(); - } - } else { - // Not authenticated - local-only mode - tui.showLocalOnlyWarning(); - } - } - - // Prepare dev lock: cleans up stale processes from previous sessions - // and creates a new lockfile for this session - const devLock = await prepareDevLock(rootDir, opts.port, logger); - - // Kill any lingering gravity processes from previous dev sessions - // This is a fallback for cases where the lockfile was corrupted - await killLingeringGravityProcesses(logger); - - // Check and upgrade @agentuity/* dependencies if needed - const upgradeResult = await checkAndUpgradeDependencies(rootDir, logger); - if (upgradeResult.failed.length > 0) { - devLock.release(); + if (!packageJson) { tui.fatal( - `Failed to upgrade dependencies: ${upgradeResult.failed.join(', ')}`, - ErrorCode.BUILD_FAILED + 'No package.json found. Ensure you are in a JS/TS project directory.', + ErrorCode.CONFIG_INVALID ); } - // Check for version mismatches (v1 vs v2 SDK packages) - const versionMismatch = detectVersionMismatch(rootDir, logger); - if (versionMismatch.hasV1Packages || versionMismatch.hasMajorMismatches) { - tui.newline(); - tui.warning(formatVersionMismatchWarning(versionMismatch)); - tui.newline(); - } - - try { - // Setup devmode and gravity (if using public URL) - const useMockService = process.env.DEVMODE_SYNC_SERVICE_MOCK === 'true'; - // Create apiClient with fresh auth API key (important after inline login) - const apiClient = auth - ? new APIClient(getAPIBaseURL(config), logger, auth.apiKey, config) - : null; - const syncService = apiClient - ? createDevmodeSyncService({ - logger, - apiClient, - mock: useMockService, - }) - : null; - - // Track previous metadata for sync diffing - let previousMetadata: - | Awaited< - ReturnType - > - | undefined; - - let devmode: DevmodeResponse | undefined; - let gravityBin: string | undefined; - let gravityURL: string | undefined; - let appURL: string | undefined; - let savedPrivateKey: string | undefined = config?.devmode?.privateKey - ? Buffer.from(config.devmode.privateKey, 'base64').toString('utf-8') - : undefined; - - if (auth && project && opts.public) { - // Generate devmode endpoint for public URL - const endpoint = await tui.spinner({ - message: 'Connecting to Gravity', - callback: () => { - return generateEndpoint( - apiClient!, - project.projectId, - config?.devmode?.hostname, - savedPrivateKey - ); - }, - clearOnSuccess: true, - }); - - if (endpoint.privateKey) { - savedPrivateKey = endpoint.privateKey; - } - const _config = { ...config } as Config; - _config.devmode = { - hostname: endpoint.hostname, - privateKey: savedPrivateKey - ? Buffer.from(savedPrivateKey).toString('base64') - : undefined, - }; - await saveConfig(_config); - config = _config; - devmode = endpoint; - gravityURL = getGravityDevModeURL(project.region, config); - appURL = `${getAppBaseURL(config)}/r/${project.projectId}`; - - // Download gravity client - const configDir = getDefaultConfigDir(); - const gravityDir = join(configDir, 'gravity'); - let mustCheck = true; - - if ( - config?.gravity?.version && - existsSync(join(gravityDir, config.gravity.version, 'gravity')) && - config?.gravity?.checked && - !validateGravityRequiresUpgrade(config.gravity.version) - ) { - if (Date.now() - config.gravity.checked < 3.6e6) { - mustCheck = false; - gravityBin = join(gravityDir, config.gravity.version, 'gravity'); - } - } - - if (mustCheck) { - const res = await download(gravityDir); - gravityBin = res.filename; - const _config = { ...config } as Config; - _config.gravity = { - checked: Date.now(), - version: res.version, - }; - await saveConfig(_config); - config = _config; - } - } + // Determine which script to run + const scriptName = opts.script ?? 'dev'; - // Get workbench info from createApp() in app.ts (v2 approach) - const { getWorkbenchConfig, loadRuntimeConfig } = await import( - '../build/vite/config-loader' + if (!packageJson.scripts?.[scriptName]) { + const available = packageJson.scripts + ? Object.keys(packageJson.scripts).join(', ') + : 'none'; + tui.fatal( + `No "${scriptName}" script found in package.json. Available scripts: ${available}`, + ErrorCode.CONFIG_INVALID ); - const runtimeConfig = await loadRuntimeConfig(rootDir, logger); - const workbenchConfigData = getWorkbenchConfig(true, runtimeConfig); // dev mode - const workbench = { - hasWorkbench: workbenchConfigData.enabled, - config: workbenchConfigData.enabled - ? { route: workbenchConfigData.route, headers: workbenchConfigData.headers } - : null, - }; - - const deploymentId = getDevmodeDeploymentId(project?.projectId ?? '', devmode?.id ?? ''); - - // Calculate URLs for banner - const padding = 12; - const workbenchUrl = - auth && project?.projectId - ? `${getAppBaseURL(config)}/w/${project.projectId}` - : `http://127.0.0.1:${opts.port}${workbench.config?.route ?? '/workbench'}`; - - const devmodebody = - tui.muted(tui.padRight('Local:', padding)) + - tui.link(`http://127.0.0.1:${opts.port}`) + - '\n' + - tui.muted(tui.padRight('Public:', padding)) + - (devmode?.hostname ? tui.link(`https://${devmode.hostname}`) : tui.warn('Disabled')) + - '\n' + - tui.muted(tui.padRight('Workbench:', padding)) + - (workbench.hasWorkbench ? tui.link(workbenchUrl) : tui.warn('Disabled')) + - '\n' + - tui.muted(tui.padRight('Dashboard:', padding)) + - (appURL ? tui.link(appURL) : tui.warn('Disabled')) + - '\n' + - (interactive - ? '\n' + tui.muted('Press ') + tui.bold('h') + tui.muted(' for keyboard shortcuts') - : ''); - - tui.banner('⨺ Agentuity DevMode', devmodebody, { - padding: 2, - topSpacer: false, - bottomSpacer: false, - centerTitle: false, - }); - - // Detect user route mount paths for Vite proxy configuration - // This is a quick AST scan of app.ts — runs before Vite starts - let routePaths: string[] = ['/api']; // Default fallback - try { - const { detectExplicitRouter } = await import('../build/app-router-detector'); - const detection = await detectExplicitRouter(rootDir, logger); - if (detection.detected && detection.mounts.length > 0) { - routePaths = detection.mounts.map((m) => m.path); - logger.debug('Detected route mount paths: %s', routePaths.join(', ')); - } - } catch (err) { - logger.debug('Route detection failed, using default /api: %s', err); - } - - // Pick internal ports (neither is user-facing — the front-door proxy is) - const bunBackendPort = opts.port + 1; - const viteInternalPort = opts.port + 2; - - // No-bundle dev mode guard: ensure stale bundled app artifact cannot be executed. - // We keep other .agentuity artifacts (metadata/workbench files) intact. - try { - const staleBundlePath = join(rootDir, '.agentuity', 'app.js'); - if (existsSync(staleBundlePath)) { - await Bun.file(staleBundlePath).delete(); - logger.debug('Removed stale dev bundle artifact: %s', staleBundlePath); - } - } catch (err) { - logger.debug('Failed to remove stale dev bundle artifact: %s', err); - } - - // Debug trace: locate unexpected legacy credential warnings. - // Enable with AGENTUITY_TRACE_CREDENTIAL_WARNINGS=true. - if (process.env.AGENTUITY_TRACE_CREDENTIAL_WARNINGS === 'true') { - const originalConsoleError = console.error.bind(console); - console.error = (...args: unknown[]) => { - try { - const first = typeof args[0] === 'string' ? args[0] : ''; - if (first.includes('No credentials found for this AI provider')) { - const stack = new Error('Credential warning trace').stack; - originalConsoleError('[TRACE] Credential warning origin stack:'); - if (stack) originalConsoleError(stack); - } - } catch { - // ignore tracing errors - } - originalConsoleError(...args); - }; - } - - // Start Vite dev server on an internal port. - // The user-facing port is handled by the front-door TCP proxy (ws-proxy) - // which routes WS upgrades to Bun and everything else to Vite. - let viteServer: ServerLike | null = null; - let vitePort: number; - - // Initialize process manager to track all servers/processes - const procManager = initProcessManager(logger); - - try { - logger.debug('Starting Vite dev server (internal port %d)...', viteInternalPort); - const viteResult = await startViteAssetServer({ - rootDir, - logger, - workbenchPath: workbench.config?.route, - port: viteInternalPort, - backendPort: bunBackendPort, - routePaths, - liveHostname: devmode?.hostname, - }); - viteServer = viteResult.server; - vitePort = viteResult.port; - - // Register Vite server with process manager - procManager.registerServer({ - id: 'vite', - server: viteServer, - description: 'Vite dev server (frontend assets)', - port: vitePort, - }); - - // Update dev lock with actual Vite port - await devLock.updatePorts({ vite: vitePort }); - - logger.debug( - `Vite dev server running on port ${vitePort} (internal, proxying backend on port ${bunBackendPort})` - ); - } catch (error) { - tui.error(`Failed to start Vite dev server: ${error}`); - await procManager.cleanup('vite startup failure'); - await devLock.release(); - originalExit(1); - return; - } - - // Start the front-door TCP proxy on the user-facing port. - // Routes WebSocket upgrades (for /api/*, /_agentuity/*) directly to Bun - // and everything else (HTTP, HMR WebSocket) to Vite. - // This works around Bun's broken node:http upgrade socket implementation. - let frontDoorServer: import('node:net').Server | null = null; - try { - const { startWsProxy } = await import('../build/vite/ws-proxy'); - frontDoorServer = await startWsProxy({ - port: opts.port, - vitePort, - backendPort: bunBackendPort, - routePaths, - logger, - }); - - // Register front-door proxy with process manager - procManager.registerServer({ - id: 'front-door-proxy', - server: { - close: () => { - frontDoorServer?.close(); - }, - }, - description: 'Front-door TCP proxy (WS routing)', - port: opts.port, - }); - - logger.debug( - `Front-door proxy on port ${opts.port} (Vite:${vitePort}, Bun:${bunBackendPort})` - ); - } catch (error) { - tui.error(`Failed to start front-door proxy: ${error}`); - await procManager.cleanup('front-door proxy startup failure'); - await devLock.release(); - originalExit(1); - return; - } - - // --- State for long-running processes --- - let gravityProcess: ProcessLike | null = null; - let gravityHeartbeatInterval: ReturnType | null = null; - let stdinListenerRegistered = false; - let stdinDataHandler: ((data: Buffer | string) => void) | null = null; - let shutdownRequested = false; - - /** - * Centralized cleanup function for all resources. - * Uses the process manager for tracked servers/processes. - */ - const cleanup = async (exitAfter = false, exitCode = 0, silent = false) => { - if (shutdownRequested) return; - shutdownRequested = true; - - if (!silent) { - tui.info('Shutting down...'); - } - - // Stop gravity heartbeat interval first - if (gravityHeartbeatInterval) { - clearInterval(gravityHeartbeatInterval); - gravityHeartbeatInterval = null; - } - - // Use process manager for tracked cleanup - await procManager.cleanup('shutdown'); - - // Additional cleanup for non-tracked resources - await devLock.release(); - await killLingeringGravityProcesses(logger); - - if (exitAfter) { - if (stdinListenerRegistered && process.stdin.isTTY) { - try { - if (stdinDataHandler) { - process.stdin.removeListener('data', stdinDataHandler); - stdinDataHandler = null; - } - process.stdin.setRawMode(false); - process.stdin.pause(); - process.stdin.unref(); - } catch { - // Ignore - } - } - originalExit(exitCode); - } - }; - - // Signal handlers - let exitingFromSignal = false; - const safeExit = (code: number, reason?: string) => { - if (exitingFromSignal) return; - exitingFromSignal = true; - if (reason) logger.debug('DevMode terminating (%d): %s', code, reason); - shutdownRequested = true; - cleanup(true, code).catch(() => originalExit(1)); - }; - - process.on('SIGINT', () => safeExit(0, 'SIGINT')); - process.on('SIGTERM', () => safeExit(0, 'SIGTERM')); - process.on('SIGHUP', () => safeExit(0, 'SIGHUP')); - process.on('uncaughtException', (err) => { - tui.error( - `Uncaught exception: ${err instanceof Error ? (err.stack ?? err.message) : String(err)}` - ); - void safeExit(1, 'uncaughtException'); - }); - process.on('unhandledRejection', (reason) => { - logger.warn( - 'Unhandled promise rejection: %s', - reason instanceof Error ? (reason.stack ?? reason.message) : String(reason) - ); - }); - process.on('exit', () => { - if (gravityProcess?.exitCode === null) { - try { - gravityProcess.kill('SIGKILL'); - } catch { - // Ignore - } - } - if (viteServer) { - try { - viteServer.close(); - } catch { - // Ignore - } - } - killBunSubprocess(logger); - releaseLockSync(rootDir); - }); - - // ================================================================ - // Step 0b: Early environment setup - // ================================================================ - // Load SDK key and set gateway env vars BEFORE agent discovery. - // Agent discovery imports eval files, which may import LLM SDKs at - // module scope. Those SDKs check for API keys (e.g. GROQ_API_KEY) - // at import time, so the gateway env patching must happen first. - - if (!process.env.AGENTUITY_SDK_KEY) { - const sdkKey = await loadProjectSDKKey(logger, rootDir); - if (sdkKey) { - process.env.AGENTUITY_SDK_KEY = sdkKey; - } else if (project) { - tui.warning( - 'AGENTUITY_SDK_KEY not found in .env file. Numerous features will be unavailable.' - ); - tui.bullet( - `Run "${getCommand('cloud env pull')}" to sync your SDK key, or add AGENTUITY_SDK_KEY to your .env file.` - ); - } - } - - process.env.NODE_ENV = 'development'; - process.env.AGENTUITY_ENV = 'development'; - - if (project) { - const earlyServiceUrls = getServiceUrls(project.region); - if (!process.env.AGENTUITY_TRANSPORT_URL) { - process.env.AGENTUITY_TRANSPORT_URL = earlyServiceUrls.catalyst; - } - } - - // Apply gateway env patching so LLM SDK API keys are set before - // agent discovery imports eval files that may reference them. - { - const sdkKey = process.env.AGENTUITY_SDK_KEY; - const gatewayUrl = - process.env.AGENTUITY_AIGATEWAY_URL || - process.env.AGENTUITY_TRANSPORT_URL || - (sdkKey ? 'https://catalyst.agentuity.cloud' : ''); - - const gatewayConfigs = [ - { - apiKeyEnv: 'ANTHROPIC_API_KEY', - baseUrlEnv: 'ANTHROPIC_BASE_URL', - provider: 'anthropic', - }, - { apiKeyEnv: 'GROQ_API_KEY', baseUrlEnv: 'GROQ_BASE_URL', provider: 'groq' }, - { apiKeyEnv: 'OPENAI_API_KEY', baseUrlEnv: 'OPENAI_BASE_URL', provider: 'openai' }, - ]; - - for (const cfg of gatewayConfigs) { - const currentKey = process.env[cfg.apiKeyEnv]; - if (currentKey && currentKey !== sdkKey) continue; - if (gatewayUrl && sdkKey) { - process.env[cfg.apiKeyEnv] = sdkKey; - process.env[cfg.baseUrlEnv] = `${gatewayUrl}/gateway/${cfg.provider}`; - logger.debug('Enabled Agentuity AI Gateway for %s', cfg.provider); - } - } - } - - // ================================================================ - // Step 1: Prepare dev server (once) - // ================================================================ - - await tui.spinner({ - message: 'Preparing dev server', - callback: async () => { - // Typecheck (skip with --no-typecheck) - if (!opts.noTypecheck) { - const typeResult = await typecheck(rootDir); - if (!typeResult.success) { - // Non-fatal in dev: log errors and continue - console.log(''); - console.log(typeResult.output); - console.log(''); - } - } - - // Generate workbench files if enabled - if (workbenchConfigData.enabled) { - const { generateWorkbenchFiles } = await import( - '../build/vite/workbench-generator' - ); - await generateWorkbenchFiles( - rootDir, - project?.projectId ?? '', - workbenchConfigData, - logger - ); - } - - // Discover agents and routes in parallel - const srcDir = join(rootDir, 'src'); - const { discoverAgents } = await import('../build/vite/agent-discovery'); - const { discoverRoutes } = await import('../build/vite/route-discovery'); - - const [agentMetadata, { routes }] = await Promise.all([ - discoverAgents(srcDir, project?.projectId ?? '', deploymentId, logger), - discoverRoutes(srcDir, project?.projectId ?? '', deploymentId, logger), - ]); - - // Generate metadata file - const { generateMetadata, writeMetadataFile } = await import( - '../build/vite/metadata-generator' - ); - - const promises: Promise[] = []; - - // Generate prompt files (non-blocking) - promises.push( - import('../build/vite/prompt-generator') - .then(({ generatePromptFiles }) => generatePromptFiles(srcDir, logger)) - .catch((err) => - logger.warn('Failed to generate prompt files: %s', err.message) - ) - ); - - const metadata = await generateMetadata({ - rootDir, - projectId: project?.projectId ?? '', - orgId: project?.orgId ?? '', - deploymentId, - agents: agentMetadata, - routes, - dev: true, - logger, - }); - - writeMetadataFile(rootDir, metadata, true, logger); - - // Sync metadata with backend - if (syncService && project?.projectId) { - promises.push( - syncService.sync(metadata, previousMetadata, project.projectId, deploymentId) - ); - previousMetadata = metadata; - } - await Promise.all(promises); - }, - clearOnSuccess: true, - }); - - // ================================================================ - // Step 2: Set remaining environment variables - // ================================================================ - // Note: AGENTUITY_SDK_KEY, NODE_ENV, AGENTUITY_ENV, and - // AGENTUITY_TRANSPORT_URL are already set in Step 0b (before - // agent discovery) to support gateway env patching. - - process.env.AGENTUITY_SDK_DEV_MODE = 'true'; - process.env.AGENTUITY_RUNTIME = 'yes'; - process.env.AGENTUITY_PROJECT_DIR = rootDir; - if (project?.region) { - process.env.AGENTUITY_REGION = project.region; - } - process.env.PORT = String(bunBackendPort); - process.env.AGENTUITY_PORT = String(bunBackendPort); - process.env.AGENTUITY_BASE_URL = - process.env.AGENTUITY_BASE_URL || `http://localhost:${vitePort}`; - process.env.AGENTUITY_NO_BUNDLE = 'true'; - - if (opts.resume) { - process.env.AGENTUITY_CODER_RESUME_SESSION = opts.resume; - } - - if (project) { - const serviceUrls = getServiceUrls(project.region); - process.env.AGENTUITY_TRANSPORT_URL = serviceUrls.catalyst; - process.env.AGENTUITY_CATALYST_URL = serviceUrls.catalyst; - process.env.AGENTUITY_VECTOR_URL = serviceUrls.vector; - process.env.AGENTUITY_KEYVALUE_URL = serviceUrls.keyvalue; - process.env.AGENTUITY_SANDBOX_URL = serviceUrls.sandbox; - process.env.AGENTUITY_STREAM_URL = serviceUrls.stream; - process.env.AGENTUITY_CLOUD_ORG_ID = project.orgId; - process.env.AGENTUITY_CLOUD_PROJECT_ID = project.projectId; - process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID = deploymentId; - } - - if (devmode?.hostname) { - process.env.AGENTUITY_DEVMODE_URL = `https://${devmode.hostname}`; - } else { - process.env.AGENTUITY_DEVMODE_URL = `http://localhost:${vitePort}`; - } - - // ================================================================ - // Step 3: Start Bun backend with --hot (handles its own HMR) - // ================================================================ - - try { - await startBunDevServer({ - rootDir, - port: bunBackendPort, - logger, - vitePort, - inspect: opts.inspect, - inspectWait: opts.inspectWait, - inspectBrk: opts.inspectBrk, - }); - - // Register Bun subprocess with process manager - // The subprocess is stored in globalThis.__AGENTUITY_BUN_SUBPROCESS__ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const bunSubprocess = (globalThis as any).__AGENTUITY_BUN_SUBPROCESS__ as ProcessLike; - if (bunSubprocess) { - procManager.registerProcess({ - id: 'bun-backend', - process: bunSubprocess, - description: 'Bun backend server (--hot)', - port: bunBackendPort, - critical: true, - }); - } - } catch (error) { - tui.error(`Failed to start Bun backend server: ${error}`); - await cleanup(true, 1, true); - return; - } - - // ================================================================ - // Step 4: Start gravity tunnel (if public URL enabled) - // ================================================================ - - if (gravityBin && gravityURL && devmode && project) { - const privateKeyPEM = devmode.privateKey ?? savedPrivateKey; - if (!privateKeyPEM) { - tui.error( - 'No private key available for gravity connection. Please re-run to generate a new key.' - ); - await cleanup(true, 1, true); - return; - } - - try { - gravityProcess = Bun.spawn( - [ - gravityBin, - '--endpoint-id', - devmode.id, - '--port', - vitePort.toString(), - '--url', - gravityURL, - '--log-level', - process.env.AGENTUITY_GRAVITY_LOG_LEVEL ?? 'error', - '--org-id', - project.orgId, - '--project-id', - project.projectId, - '--private-key', - Buffer.from(privateKeyPEM).toString('base64'), - '--health-check', - ], - { - cwd: rootDir, - stdout: 'pipe', - stderr: 'pipe', - detached: false, - } - ); - - const gravityPid = (gravityProcess as { pid?: number }).pid; - if (gravityPid) { - await devLock.registerChild({ - pid: gravityPid, - type: 'gravity', - description: 'Gravity public URL tunnel', - }); - - // Register with process manager - procManager.registerProcess({ - id: 'gravity', - process: gravityProcess, - description: 'Gravity public URL tunnel', - critical: false, - }); - } + } - // Log gravity output and detect heartbeat port - (async () => { - try { - if (gravityProcess?.stdout) { - for await (const chunk of gravityProcess.stdout) { - const text = new TextDecoder().decode(chunk); - const trimmed = text.trim(); + // Detect package manager + const pm = await detectPackageManager(rootDir); + const runCmd = getRunCommand(pm); + + // Build the command + const cmd = runCmd.split(' '); + cmd.push(scriptName); + + // Build environment + const env: Record = { ...process.env } as Record; + const port = opts.port ?? DEFAULT_PORT; + env.PORT = String(port); + + // Inject AI Gateway env vars so LLM SDKs route through Agentuity + injectGatewayEnv(env, logger); + + // Log what we're doing + const frameworkLabel = framework + ? framework.name === 'generic' + ? '' + : ` (${framework.name})` + : ''; + tui.info(`Starting dev server${frameworkLabel} on port ${port}`); + tui.info(tui.muted(`$ ${cmd.join(' ')}`)); + tui.newline(); + + // Run the dev command, inheriting stdio for full interactivity + const proc = Bun.spawn(cmd, { + cwd: rootDir, + env, + stdin: 'inherit', + stdout: 'inherit', + stderr: 'inherit', + }); - const match = trimmed.match(/^HEARTBEAT_PORT=(\d+)$/m); - if (match?.[1]) { - const heartbeatPort = parseInt(match[1], 10); - logger.debug('Gravity heartbeat port: %d', heartbeatPort); + // Forward signals + const signalHandler = (signal: NodeJS.Signals) => { + proc.kill(signal === 'SIGINT' ? 'SIGINT' : 'SIGTERM'); + }; + process.on('SIGINT', signalHandler); + process.on('SIGTERM', signalHandler); - if (!gravityHeartbeatInterval) { - const sendHeartbeat = async () => { - try { - await fetch(`http://127.0.0.1:${heartbeatPort}/heartbeat`, { - method: 'POST', - signal: AbortSignal.timeout(2000), - }); - } catch { - // Ignore heartbeat failures - } - }; - sendHeartbeat(); - gravityHeartbeatInterval = setInterval(sendHeartbeat, 5000); - } - } else if (trimmed) { - logger.debug('[gravity] %s', trimmed); - } - } - } - } catch (err) { - logger.error('Error reading gravity stdout: %s', err); - } - })(); + const exitCode = await proc.exited; - (async () => { - try { - if (gravityProcess?.stderr) { - for await (const chunk of gravityProcess.stderr) { - logger.warn('[gravity] %s', new TextDecoder().decode(chunk).trim()); - } - } - } catch (err) { - logger.error('Error reading gravity stderr: %s', err); - } - })(); - } catch (error) { - tui.error(`Failed to start gravity tunnel: ${error}`); - await cleanup(true, 1, true); - return; - } - } + process.off('SIGINT', signalHandler); + process.off('SIGTERM', signalHandler); - // ================================================================ - // Step 5: Keyboard shortcuts + wait for shutdown - // ================================================================ + if (exitCode !== 0 && exitCode !== 130) { + // 130 = SIGINT (Ctrl+C), which is normal + logger.debug('Dev server exited with code %d', exitCode); + } - if (interactive && process.stdin.isTTY && process.stdout.isTTY) { - stdinListenerRegistered = true; - process.stdin.setRawMode(true); - process.stdin.resume(); - process.stdin.setEncoding('utf8'); + process.exit(exitCode ?? 0); + }, +}); - const showHelp = () => { - console.log('\n' + tui.bold('Keyboard Shortcuts:')); - console.log(tui.muted(' h') + ' - show this help'); - console.log(tui.muted(' c') + ' - clear console'); - console.log(tui.muted(' q') + ' - quit\n'); - }; +// ─── AI Gateway Env Injection ───────────────────────────────────────────────── - stdinDataHandler = (data) => { - const key = data.toString(); - if (key === '\u0003' || key === 'q') { - if (stdinDataHandler) { - process.stdin.removeListener('data', stdinDataHandler); - stdinDataHandler = null; - } - shutdownRequested = true; - cleanup(true, 0).catch(() => originalExit(1)); - return; - } - switch (key) { - case 'h': - showHelp(); - break; - case 'c': - console.clear(); - tui.banner('⨺ Agentuity DevMode', devmodebody, { - padding: 2, - topSpacer: false, - bottomSpacer: false, - centerTitle: false, - }); - break; - default: - process.stdout.write(data); - break; - } - }; - process.stdin.on('data', stdinDataHandler); - } +interface GatewayProvider { + apiKeyEnv: string; + baseUrlEnv: string; + provider: string; +} - logger.info('DevMode ready 🚀'); +const GATEWAY_PROVIDERS: GatewayProvider[] = [ + { apiKeyEnv: 'OPENAI_API_KEY', baseUrlEnv: 'OPENAI_BASE_URL', provider: 'openai' }, + { apiKeyEnv: 'ANTHROPIC_API_KEY', baseUrlEnv: 'ANTHROPIC_BASE_URL', provider: 'anthropic' }, + { apiKeyEnv: 'GROQ_API_KEY', baseUrlEnv: 'GROQ_BASE_URL', provider: 'groq' }, +]; - // Block until shutdown — bun --hot handles backend HMR, - // Vite handles frontend HMR. Nothing to restart. - await new Promise((resolve) => { - const check = setInterval(() => { - if (shutdownRequested) { - clearInterval(check); - resolve(); - } - }, 200); - }); - } finally { - /* brute force clean up */ - await devLock.release(); - await killLingeringGravityProcesses(logger); - releaseLockSync(rootDir); +/** + * Inject AI Gateway environment variables into the child process env. + * + * For each LLM provider, if the user hasn't set their own API key + * (or it matches the SDK key), we redirect to the Agentuity gateway. + * This lets `openai`, `@anthropic-ai/sdk`, and `groq-sdk` work + * out of the box without separate provider API keys. + */ +function injectGatewayEnv( + env: Record, + logger: { debug: (...args: unknown[]) => void } +): void { + const sdkKey = env.AGENTUITY_SDK_KEY; + if (!sdkKey) return; + + const gatewayUrl = + env.AGENTUITY_AIGATEWAY_URL || + env.AGENTUITY_TRANSPORT_URL || + 'https://catalyst.agentuity.cloud'; + + for (const { apiKeyEnv, baseUrlEnv, provider } of GATEWAY_PROVIDERS) { + const currentKey = env[apiKeyEnv]; + + // If the user provided their own key (different from SDK key), leave it alone + if (currentKey && currentKey !== sdkKey) { + continue; } - }, -}); + + env[apiKeyEnv] = sdkKey; + env[baseUrlEnv] = `${gatewayUrl}/gateway/${provider}`; + logger.debug('AI Gateway: routing %s through %s', provider, env[baseUrlEnv]); + } +} diff --git a/packages/cli/src/cmd/dev/process-manager.ts b/packages/cli/src/cmd/dev/process-manager.ts deleted file mode 100644 index 9a49dedb5..000000000 --- a/packages/cli/src/cmd/dev/process-manager.ts +++ /dev/null @@ -1,261 +0,0 @@ -/** - * Process Manager for Dev Mode - * - * Tracks all spawned processes and ensures they're cleaned up on: - * - Startup failure (any server fails to start) - * - Runtime crash (uncaught exception) - * - Graceful shutdown (SIGINT/SIGTERM) - * - * This prevents orphan processes and port conflicts between dev sessions. - */ - -import type { Logger } from '../../types'; - -export interface ManagedProcess { - /** Process identifier for logging */ - id: string; - /** The process handle */ - process: { - kill: (signal?: number | NodeJS.Signals) => void; - exitCode: number | null; - pid?: number; - }; - /** Human-readable description */ - description: string; - /** The port this process uses (if any) */ - port?: number; - /** Whether this process is critical (startup fails if it dies) */ - critical?: boolean; -} - -export interface ManagedServer { - /** Server identifier */ - id: string; - /** The server handle */ - server: { - close: () => void | Promise; - }; - /** Human-readable description */ - description: string; - /** The port this server uses */ - port?: number; -} - -/** - * Process Manager - * - * Tracks all processes and servers started during dev mode and provides - * centralized cleanup on failure or shutdown. - */ -export class ProcessManager { - private processes: ManagedProcess[] = []; - private servers: ManagedServer[] = []; - private logger: Logger; - private cleaningUp = false; - - constructor(logger: Logger) { - this.logger = logger; - } - - /** - * Register a spawned process for tracking. - */ - registerProcess(proc: ManagedProcess): void { - this.processes.push(proc); - this.logger.debug( - 'Registered process: %s (pid=%s, port=%s)', - proc.id, - proc.process.pid ?? 'unknown', - proc.port ?? 'n/a' - ); - } - - /** - * Register a server for tracking. - */ - registerServer(server: ManagedServer): void { - this.servers.push(server); - this.logger.debug('Registered server: %s (port=%s)', server.id, server.port ?? 'n/a'); - } - - /** - * Unregister a process (e.g., after it exits normally). - */ - unregisterProcess(id: string): void { - const idx = this.processes.findIndex((p) => p.id === id); - if (idx !== -1) { - this.processes.splice(idx, 1); - this.logger.debug('Unregistered process: %s', id); - } - } - - /** - * Unregister a server. - */ - unregisterServer(id: string): void { - const idx = this.servers.findIndex((s) => s.id === id); - if (idx !== -1) { - this.servers.splice(idx, 1); - this.logger.debug('Unregistered server: %s', id); - } - } - - /** - * Get all registered ports (for cleanup verification). - */ - getPorts(): number[] { - const ports: number[] = []; - for (const proc of this.processes) { - if (proc.port) ports.push(proc.port); - } - for (const server of this.servers) { - if (server.port) ports.push(server.port); - } - return ports; - } - - /** - * Clean up all tracked processes and servers. - * - * @param reason - Why cleanup is happening (for logging) - * @param timeout - Max time to wait for graceful shutdown (ms) - */ - async cleanup(reason: string, timeout = 3000): Promise { - if (this.cleaningUp) { - this.logger.debug('Cleanup already in progress, skipping'); - return; - } - this.cleaningUp = true; - - this.logger.debug('Starting cleanup (reason: %s)', reason); - - // Kill processes in reverse order (LIFO) - for (let i = this.processes.length - 1; i >= 0; i--) { - const proc = this.processes[i]; - if (!proc) continue; - - try { - if (proc.process.exitCode === null) { - this.logger.debug( - 'Killing process %s (pid=%s)', - proc.id, - proc.process.pid ?? 'unknown' - ); - proc.process.kill('SIGTERM'); - } - } catch (err) { - this.logger.debug('Error killing process %s: %s', proc.id, err); - } - } - - // Close servers - for (let i = this.servers.length - 1; i >= 0; i--) { - const server = this.servers[i]; - if (!server) continue; - - try { - this.logger.debug('Closing server %s', server.id); - const closePromise = server.server.close(); - if (closePromise instanceof Promise) { - await Promise.race([ - closePromise, - new Promise((resolve) => setTimeout(resolve, 1000)), - ]); - } - } catch (err) { - this.logger.debug('Error closing server %s: %s', server.id, err); - } - } - - // Wait for processes to exit, then force-kill if needed - const startTime = Date.now(); - while (Date.now() - startTime < timeout) { - const allExited = this.processes.every((p) => p.process.exitCode !== null); - if (allExited) break; - await new Promise((resolve) => setTimeout(resolve, 100)); - } - - // Force kill any remaining - for (const proc of this.processes) { - if (proc.process.exitCode === null) { - try { - this.logger.debug('Force killing process %s', proc.id); - proc.process.kill('SIGKILL'); - } catch (err) { - this.logger.debug('Error force killing process %s: %s', proc.id, err); - } - } - } - - this.logger.debug('Cleanup complete'); - this.processes = []; - this.servers = []; - } - - /** - * Verify that all ports used by tracked processes are released. - * Used after cleanup to ensure no orphan processes remain. - */ - async verifyPortsReleased(): Promise<{ port: number; released: boolean }[]> { - const results: { port: number; released: boolean }[] = []; - const ports = this.getPorts(); - - for (const port of ports) { - const released = await this.isPortAvailable(port); - results.push({ port, released }); - - if (!released) { - this.logger.warn('Port %d is still in use after cleanup', port); - } - } - - return results; - } - - /** - * Check if a port is available. - */ - private isPortAvailable(port: number, host = '127.0.0.1'): Promise { - return new Promise((resolve) => { - const net = require('node:net'); - const server = net.createServer(); - server.once('error', () => resolve(false)); - server.listen(port, host, () => { - server.close(() => resolve(true)); - }); - }); - } -} - -/** - * Global process manager instance for dev mode. - * Set in dev/index.ts during startup. - */ -let globalProcessManager: ProcessManager | null = null; - -/** - * Get the global process manager (throws if not initialized). - */ -export function getProcessManager(): ProcessManager { - if (!globalProcessManager) { - throw new Error('ProcessManager not initialized. Call initProcessManager first.'); - } - return globalProcessManager; -} - -/** - * Initialize the global process manager. - */ -export function initProcessManager(logger: Logger): ProcessManager { - globalProcessManager = new ProcessManager(logger); - return globalProcessManager; -} - -/** - * Cleanup helper that can be called from signal handlers or error handlers. - */ -export async function cleanupAll(reason: string): Promise { - if (globalProcessManager) { - await globalProcessManager.cleanup(reason); - } -} diff --git a/packages/cli/src/cmd/dev/sync.ts b/packages/cli/src/cmd/dev/sync.ts deleted file mode 100644 index fa9d3015d..000000000 --- a/packages/cli/src/cmd/dev/sync.ts +++ /dev/null @@ -1,411 +0,0 @@ -import { z } from 'zod'; -import type { Logger, BuildMetadata } from '../../types'; -import type { APIClient } from '../../api'; - -interface AgentSyncPayload { - id: string; - name: string; - agentId: string; - description?: string; - version: string; - filename: string; - projectId: string; -} - -interface EvalSyncPayload { - id: string; - name: string; - identifier: string; - description?: string; - version: string; - filename: string; - projectId: string; - agentIdentifier: string; -} - -interface IDevmodeSyncService { - sync( - currentMetadata: BuildMetadata, - previousMetadata: BuildMetadata | undefined, - projectId: string, - deploymentId: string - ): Promise; -} - -// Shared diff logic for agents -function getAgentsToSync( - currentAgents: BuildMetadata['agents'], - previousAgentIds: Set, - projectId: string, - logger: Logger -): { create: AgentSyncPayload[]; delete: string[] } { - const agentsToCreate: AgentSyncPayload[] = []; - const currentAgentIds = new Set(); - - for (const agent of currentAgents || []) { - currentAgentIds.add(agent.id); - // If ID is not in previous, add to create - if (!previousAgentIds.has(agent.id)) { - logger.debug( - '[CLI AGENT SYNC] Preparing to create: id="%s", name="%s"', - agent.id, - agent.name - ); - - agentsToCreate.push({ - id: agent.id, - name: agent.name, - agentId: agent.agentId, - description: agent.description, - version: agent.version, - filename: agent.filename, - projectId, - }); - } - } - - // If ID is in previous but not in current, add to delete - const agentsToDelete: string[] = []; - for (const previousId of previousAgentIds) { - if (!currentAgentIds.has(previousId)) { - logger.debug('[CLI AGENT SYNC] Preparing to delete: id="%s"', previousId); - agentsToDelete.push(previousId); - } - } - - return { create: agentsToCreate, delete: agentsToDelete }; -} - -// Shared diff logic for evals -function getEvalsToSync( - currentMetadata: BuildMetadata, - previousEvalIds: Set, - projectId: string, - logger: Logger -): { create: EvalSyncPayload[]; delete: string[] } { - const evalsToCreate: EvalSyncPayload[] = []; - const currentEvalIds = new Set(); - - for (const agent of currentMetadata.agents || []) { - if (agent.evals) { - for (const evalItem of agent.evals) { - currentEvalIds.add(evalItem.id); - // If ID is not in previous, add to create - if (!previousEvalIds.has(evalItem.id)) { - logger.debug( - '[CLI EVAL SYNC] Preparing to create: id="%s", name="%s"', - evalItem.id, - evalItem.name - ); - - evalsToCreate.push({ - ...evalItem, - identifier: evalItem.identifier, - projectId, - agentIdentifier: agent.agentId, - }); - } - } - } - } - - // If ID is in previous but not in current, add to delete - const evalsToDelete: string[] = []; - for (const previousId of previousEvalIds) { - if (!currentEvalIds.has(previousId)) { - logger.debug('[CLI EVAL SYNC] Preparing to delete: id="%s"', previousId); - evalsToDelete.push(previousId); - } - } - - return { create: evalsToCreate, delete: evalsToDelete }; -} - -class DevmodeSyncService implements IDevmodeSyncService { - constructor( - private logger: Logger, - private apiClient: APIClient - ) {} - - async sync( - currentMetadata: BuildMetadata, - previousMetadata: BuildMetadata | undefined, - projectId: string, - deploymentId: string - ): Promise { - this.logger.debug( - '[CLI SYNC] sync() called with projectId=%s, deploymentId=%s', - projectId, - deploymentId - ); - this.logger.debug( - '[CLI SYNC] currentMetadata has %d agents', - currentMetadata.agents?.length ?? 0 - ); - - // Build previous agent IDs set - const previousAgentIds = new Set(); - if (previousMetadata) { - this.logger.debug( - '[CLI SYNC] Previous metadata found with %d agent(s)', - previousMetadata.agents?.length ?? 0 - ); - for (const agent of previousMetadata.agents || []) { - previousAgentIds.add(agent.id); - } - } else { - this.logger.debug('[CLI SYNC] No previous metadata, all agents will be treated as new'); - } - - // Build previous eval IDs set - const previousEvalIds = new Set(); - if (previousMetadata) { - let prevEvalCount = 0; - for (const agent of previousMetadata.agents || []) { - if (agent.evals) { - for (const evalItem of agent.evals) { - previousEvalIds.add(evalItem.id); - prevEvalCount++; - } - } - } - this.logger.debug('Previous metadata found with %d evaluations', prevEvalCount); - } else { - this.logger.debug('No previous metadata, all evals will be treated as new'); - } - - const currentAgents = currentMetadata.agents || []; - this.logger.debug('Processing %d current agent(s)', currentAgents.length); - - let currentEvalCount = 0; - for (const agent of currentMetadata.agents || []) { - if (agent.evals) { - currentEvalCount += agent.evals.length; - this.logger.debug( - '[CLI EVAL SYNC] Agent "%s" has %d evaluations', - agent.name, - agent.evals.length - ); - for (const evalItem of agent.evals) { - this.logger.debug( - '[CLI EVAL SYNC] - %s (id: %s, identifier: %s)', - evalItem.name, - evalItem.id, - evalItem.identifier - ); - } - } - } - this.logger.debug('[CLI EVAL SYNC] Total current evaluations: %d', currentEvalCount); - - // Get agents and evals to sync using shared diff logic - const { create: agentsToCreate, delete: agentsToDelete } = getAgentsToSync( - currentAgents, - previousAgentIds, - projectId, - this.logger - ); - const { create: evalsToCreate, delete: evalsToDelete } = getEvalsToSync( - currentMetadata, - previousEvalIds, - projectId, - this.logger - ); - - if (agentsToCreate.length > 0 || agentsToDelete.length > 0) { - this.logger.debug( - 'Bulk syncing %d agent(s) to create, %d agent(s) to delete', - agentsToCreate.length, - agentsToDelete.length - ); - } - this.logger.debug( - '[CLI EVAL SYNC] Evals to sync: %d to create, %d to delete', - evalsToCreate.length, - evalsToDelete.length - ); - - // Sync both in parallel - try { - await Promise.all([ - this.syncAgents(agentsToCreate, agentsToDelete, deploymentId), - this.syncEvals(evalsToCreate, evalsToDelete, deploymentId), - ]); - - if (agentsToCreate.length > 0 || agentsToDelete.length > 0) { - this.logger.debug( - 'Successfully bulk synced %d agent(s) to create, %d agent(s) to delete', - agentsToCreate.length, - agentsToDelete.length - ); - } - if (evalsToCreate.length > 0 || evalsToDelete.length > 0) { - this.logger.debug( - 'Successfully bulk synced %d evaluations to create, %d evaluations to delete', - evalsToCreate.length, - evalsToDelete.length - ); - } - } catch (error) { - this.logger.error('Failed to bulk sync agents/evals: %s', error); - if (error instanceof Error) { - this.logger.error('Error details: %s', error.message); - } - throw error; - } - } - - private async syncAgents( - agents: AgentSyncPayload[], - agentsToDelete: string[], - deploymentId: string - ): Promise { - if (agents.length === 0 && agentsToDelete.length === 0) { - return; - } - - const payload = { - create: agents, - delete: agentsToDelete, - deploymentId, - }; - this.logger.trace( - '[CLI AGENT SYNC] Sending payload to POST /cli/devmode/agent: %s', - JSON.stringify(payload, null, 2) - ); - - await this.apiClient.post('/cli/devmode/agent', payload, z.object({ success: z.boolean() })); - } - - private async syncEvals( - evals: EvalSyncPayload[], - evalsToDelete: string[], - deploymentId: string - ): Promise { - if (evals.length === 0 && evalsToDelete.length === 0) { - return; - } - - const payload = { - deploymentId, - create: evals, - delete: evalsToDelete, - }; - - this.logger.debug( - '[CLI EVAL SYNC] Sending payload to POST /cli/devmode/eval: %s', - JSON.stringify(payload, null, 2) - ); - - try { - await this.apiClient.post( - '/cli/devmode/eval', - payload, - z.object({ success: z.boolean() }) - ); - } catch (error) { - this.logger.error('[CLI EVAL SYNC] Sync failed: %s', error); - throw error; - } - } -} - -class MockDevmodeSyncService implements IDevmodeSyncService { - constructor(private logger: Logger) {} - - async sync( - currentMetadata: BuildMetadata, - previousMetadata: BuildMetadata | undefined, - projectId: string, - deploymentId: string - ): Promise { - // Build previous agent IDs set - this.logger.debug('Mock syncing agents and evals for deploymentId: %s', deploymentId); - const previousAgentIds = new Set(); - if (previousMetadata) { - for (const agent of previousMetadata.agents || []) { - previousAgentIds.add(agent.id); - } - } - - // Build previous eval IDs set - const previousEvalIds = new Set(); - if (previousMetadata) { - for (const agent of previousMetadata.agents || []) { - if (agent.evals) { - for (const evalItem of agent.evals) { - previousEvalIds.add(evalItem.id); - } - } - } - } - - // Get agents and evals to sync using shared diff logic - const { create: agentsToCreate, delete: agentsToDelete } = getAgentsToSync( - currentMetadata.agents, - previousAgentIds, - projectId, - this.logger - ); - const { create: evalsToCreate, delete: evalsToDelete } = getEvalsToSync( - currentMetadata, - previousEvalIds, - projectId, - this.logger - ); - - // Log the requests that would be made - if (agentsToCreate.length > 0 || agentsToDelete.length > 0) { - this.logger.debug( - '[MOCK] Would make request: POST /cli/devmode/agent with %d agent(s) to create, %d agent(s) to delete', - agentsToCreate.length, - agentsToDelete.length - ); - this.logger.debug( - '[MOCK] Request payload: %s', - JSON.stringify({ create: agentsToCreate, delete: agentsToDelete }, null, 2) - ); - } - - if (evalsToCreate.length > 0 || evalsToDelete.length > 0) { - this.logger.debug( - '[MOCK] Would make request: POST /cli/devmode/eval with %d evaluations to create, %d evaluations to delete', - evalsToCreate.length, - evalsToDelete.length - ); - this.logger.debug( - '[MOCK] Request payload: %s', - JSON.stringify({ create: evalsToCreate, delete: evalsToDelete }, null, 2) - ); - } - - if ( - agentsToCreate.length === 0 && - agentsToDelete.length === 0 && - evalsToCreate.length === 0 && - evalsToDelete.length === 0 - ) { - this.logger.debug('[MOCK] No requests would be made (no changes detected)'); - } - } -} - -export function createDevmodeSyncService({ - logger, - apiClient, - mock = false, -}: { - logger: Logger; - apiClient: APIClient | null; - mock?: boolean; -}): IDevmodeSyncService { - if (mock) { - return new MockDevmodeSyncService(logger); - } - - if (!apiClient) { - throw new Error('apiClient is required when not in mock mode'); - } - - return new DevmodeSyncService(logger, apiClient); -} diff --git a/packages/cli/src/cmd/dev/templates.ts b/packages/cli/src/cmd/dev/templates.ts deleted file mode 100644 index 4810ef023..000000000 --- a/packages/cli/src/cmd/dev/templates.ts +++ /dev/null @@ -1,66 +0,0 @@ -/* eslint-disable no-control-regex */ -import { writeFileSync } from 'node:fs'; -import { basename, join } from 'node:path'; -import { toPascalCase } from '../../utils/string'; - -const newAgentTemplate = (name: string) => `import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export default createAgent('${name}', { - description: 'Add your agent description here', - schema: { - input: s.string(), - output: s.string(), - }, - handler: async (_c, input) => { - // TODO: add your code here - return input; - }, -}); -`; - -const newRouteTemplate = () => { - return `import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/', async (c) => { - // TODO: add your code here - this returns a static 'hi' greeting - return c.text('hi'); -}); - -export default router; -`; -}; - -const invalidDirRegex = /[<>:"/\\|?*]/; - -const invalidControlChars = /[\u0000-\u001F]/; -const reservedWindowsNames = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i; -const invalidTrailing = /[. ]$/; - -function isValidDirectoryName(name: string): boolean { - return ( - !invalidDirRegex.test(name) && - !invalidControlChars.test(name) && - !reservedWindowsNames.test(name) && - !invalidTrailing.test(name) - ); -} - -export function createAgentTemplates(dir: string) { - const name = basename(dir); - if (!isValidDirectoryName(name)) { - return; - } - const agentName = toPascalCase(name); - writeFileSync(join(dir, 'index.ts'), newAgentTemplate(agentName)); -} - -export function createAPITemplates(dir: string) { - const name = basename(dir); - if (!isValidDirectoryName(name)) { - return; - } - writeFileSync(join(dir, 'index.ts'), newRouteTemplate()); -} diff --git a/packages/cli/src/cmd/project/auth/shared.ts b/packages/cli/src/cmd/project/auth/shared.ts index d38384790..dcb4683e7 100644 --- a/packages/cli/src/cmd/project/auth/shared.ts +++ b/packages/cli/src/cmd/project/auth/shared.ts @@ -514,67 +514,42 @@ export function printIntegrationExamples(): void { tui.newline(); console.log(tui.muted('━'.repeat(60))); - console.log(tui.bold(' 1. Set up your API routes (e.g., src/api/index.ts):')); + console.log(tui.bold(' 1. Set up your API routes:')); console.log(tui.muted('━'.repeat(60))); console.log(` -import { createRouter } from '@agentuity/runtime'; +import { Hono } from 'hono'; import { mountAuthRoutes } from '@agentuity/auth'; -import { auth, authMiddleware } from '../auth'; +import { auth, authMiddleware } from './auth'; -const api = createRouter(); +const app = new Hono(); // Mount auth routes (sign-in, sign-up, sign-out, session, etc.) -// Must match the basePath configured in createAuth (default: /api/auth) -api.on(['GET', 'POST'], '/api/auth/*', mountAuthRoutes(auth)); +app.on(['GET', 'POST'], '/api/auth/*', mountAuthRoutes(auth)); // Protect your API routes with auth middleware -api.use('/api/*', authMiddleware); +app.use('/api/*', authMiddleware); -api.get('/api/me', async (c) => { +app.get('/api/me', async (c) => { const user = await c.var.auth.getUser(); return c.json({ id: user.id, email: user.email }); }); -export default api; +export default app; `); console.log(tui.muted('━'.repeat(60))); - console.log(tui.bold(' 2. Wrap your React app with AuthProvider:')); + console.log(tui.bold(' 2. Use the auth client in your frontend:')); console.log(tui.muted('━'.repeat(60))); console.log(` -import { AgentuityProvider } from '@agentuity/react'; -import { createAuthClient, AuthProvider } from '@agentuity/auth/react'; +import { createAuthClient } from '@agentuity/auth/client'; const authClient = createAuthClient(); -function App() { - return ( - - - {/* your app */} - - - ); -} -`); +// Sign in +await authClient.signIn.email({ email, password }); - console.log(tui.muted('━'.repeat(60))); - console.log(tui.bold(' 3. Access auth in agents via ctx.auth:')); - console.log(tui.muted('━'.repeat(60))); - console.log(` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('my-agent', { - schema: { input: s.object({ name: s.string() }), output: s.string() }, - handler: async (ctx, input) => { - // ctx.auth is available when using auth middleware - if (ctx.auth) { - const user = await ctx.auth.getUser(); - return \`Hello, \${user.email}!\`; - } - return 'Hello, anonymous!'; - }, -}); +// Get session +const session = await authClient.getSession(); `); tui.newline(); diff --git a/packages/cli/src/cmd/project/create.ts b/packages/cli/src/cmd/project/create.ts index 0f0998e90..5069dfb7b 100644 --- a/packages/cli/src/cmd/project/create.ts +++ b/packages/cli/src/cmd/project/create.ts @@ -11,7 +11,7 @@ const ProjectCreateResponseSchema = z.object({ path: z.string().describe('Project directory path'), projectId: z.string().optional().describe('Project ID if registered'), orgId: z.string().optional().describe('Organization ID if registered'), - template: z.string().describe('Template used'), + framework: z.string().describe('Framework used'), installed: z.boolean().describe('Whether dependencies were installed'), built: z.boolean().describe('Whether the project was built'), domains: z.array(z.string()).optional().describe('Array of custom domains'), @@ -29,33 +29,30 @@ export const createProjectSubcommand = createSubcommand({ examples: [ { command: getCommand('project create'), description: 'Create new project' }, { - command: getCommand('project create --name my-ai-agent'), - description: 'Create new project', + command: getCommand('project create --name my-ai-app'), + description: 'Create named project', }, { - command: getCommand('project create --name customer-service-bot --dir ~/projects/agent'), - description: 'Create new project', + command: getCommand('project create --name my-app --framework nextjs'), + description: 'Create with Next.js', }, { - command: getCommand('project create --template basic --no-install'), - description: 'Use no install option', + command: getCommand('project create --framework hono --no-install'), + description: 'Scaffold without installing', }, - { command: getCommand('project new --no-register'), description: 'Use no register option' }, + { command: getCommand('project new --no-register'), description: 'Skip cloud registration' }, ], schema: { options: z.object({ name: z.string().optional().describe('Project name'), dir: z.string().optional().describe('Directory to create the project in'), domains: z.array(z.string()).optional().describe('Array of custom domains'), - template: z.string().optional().describe('Template to use'), - templateDir: z + framework: z .string() .optional() - .describe('Local template directory for testing (e.g., ./packages/templates)'), - templateBranch: z - .string() - .optional() - .describe('GitHub branch to use for templates (default: main)'), + .describe( + 'Framework to use (e.g., nextjs, astro, sveltekit, remix, nuxt, hono, vite-react)' + ), install: z .boolean() .optional() @@ -101,9 +98,7 @@ export const createProjectSubcommand = createSubcommand({ projectName: opts.name, dir: opts.dir, domains: opts.domains, - template: opts.template, - templateDir: opts.templateDir, - templateBranch: opts.templateBranch, + framework: opts.framework, noInstall: opts.install === false, noBuild: opts.build === false, skipPrompts: opts.confirm === true, @@ -130,7 +125,7 @@ export const createProjectSubcommand = createSubcommand({ path: result.path, projectId: result.projectId, orgId: result.orgId, - template: result.template, + framework: result.framework, installed: result.installed, built: result.built, domains: result.domains, diff --git a/packages/cli/src/cmd/project/download.ts b/packages/cli/src/cmd/project/download.ts deleted file mode 100644 index a6f3a87b9..000000000 --- a/packages/cli/src/cmd/project/download.ts +++ /dev/null @@ -1,505 +0,0 @@ -import { - cpSync, - createReadStream, - existsSync, - mkdirSync, - mkdtempSync, - readdirSync, - renameSync, - rmSync, -} from 'node:fs'; -import { tmpdir } from 'node:os'; -import { join, resolve } from 'node:path'; -import { finished } from 'node:stream/promises'; -import { createGunzip } from 'node:zlib'; -import { type Logger, StructuredError } from '@agentuity/core'; -import { extract, type Headers } from 'tar-fs'; -import { writeAgentsDocs } from '../../agents-docs'; -import { downloadWithSpinner } from '../../download'; -import * as tui from '../../tui'; -import type { TemplateInfo } from './templates'; - -const GITHUB_BRANCH = 'main'; -const BASE_TEMPLATE_DIR = '_base'; - -interface DownloadOptions { - dest: string; - template: TemplateInfo; - templateDir?: string; - templateBranch?: string; - logger: Logger; -} - -interface SetupOptions { - dest: string; - projectName: string; - dirName: string; - noInstall: boolean; - noBuild: boolean; - logger: Logger; -} - -const TemplateDirectoryNotFoundError = StructuredError('TemplateDirectoryNotFoundError')<{ - directory: string; -}>(); - -async function copyTemplateFiles(sourceDir: string, dest: string, skipGitignoreRename = false) { - if (!existsSync(sourceDir)) { - return; // Source directory doesn't exist, skip (overlay may be empty) - } - - // Copy all files from source to dest (overlay wins on conflicts) - const files = readdirSync(sourceDir); - for (const file of files) { - // Skip package.overlay.json - it's handled separately for merging - if (file === 'package.overlay.json') { - continue; - } - // Skip .gitkeep files - they're just placeholders for empty directories - if (file === '.gitkeep') { - continue; - } - cpSync(join(sourceDir, file), join(dest, file), { recursive: true }); - } - - // Rename gitignore -> .gitignore (only do this once, after all copies) - if (!skipGitignoreRename) { - const gi = join(dest, 'gitignore'); - if (existsSync(gi)) { - renameSync(gi, join(dest, '.gitignore')); - } - } -} - -async function mergePackageJson(dest: string, overlayDir: string) { - const basePackagePath = join(dest, 'package.json'); - const overlayPackagePath = join(overlayDir, 'package.overlay.json'); - - // If no overlay package.json exists, nothing to merge - if (!existsSync(overlayPackagePath)) { - return; - } - - // Read base package.json - const basePackage = JSON.parse(await Bun.file(basePackagePath).text()); - - // Read overlay package.json - const overlayPackage = JSON.parse(await Bun.file(overlayPackagePath).text()); - - // Merge dependencies (overlay wins on conflicts) - if (overlayPackage.dependencies) { - basePackage.dependencies = { - ...basePackage.dependencies, - ...overlayPackage.dependencies, - }; - } - - // Merge devDependencies (overlay wins on conflicts) - if (overlayPackage.devDependencies) { - basePackage.devDependencies = { - ...basePackage.devDependencies, - ...overlayPackage.devDependencies, - }; - } - - // Merge scripts (overlay wins on conflicts) - if (overlayPackage.scripts) { - basePackage.scripts = { - ...basePackage.scripts, - ...overlayPackage.scripts, - }; - } - - // Write merged package.json - await Bun.write(basePackagePath, JSON.stringify(basePackage, null, '\t') + '\n'); -} - -async function _cleanup(sourceDir: string, dest: string) { - if (!existsSync(sourceDir)) { - throw new TemplateDirectoryNotFoundError({ - directory: sourceDir, - message: `Template directory not found: ${sourceDir}`, - }); - } - - await tui.spinner('📦 Copying template files...', async () => { - // Copy all files from source to dest - const files = readdirSync(sourceDir); - for (const file of files) { - cpSync(join(sourceDir, file), join(dest, file), { recursive: true }); - } - - // Rename gitignore -> .gitignore - const gi = join(dest, 'gitignore'); - if (existsSync(gi)) { - renameSync(gi, join(dest, '.gitignore')); - } - }); -} - -export async function downloadTemplate(options: DownloadOptions): Promise { - const { dest, template, templateDir, templateBranch, logger } = options; - - mkdirSync(dest, { recursive: true }); - - // Copy from local directory if provided - if (templateDir) { - const baseDir = resolve(join(templateDir, BASE_TEMPLATE_DIR)); - const overlayDir = resolve(join(templateDir, template.directory)); - - // Base template must exist - if (!existsSync(baseDir)) { - throw new TemplateDirectoryNotFoundError({ - directory: baseDir, - message: `Base template directory not found: ${baseDir}`, - }); - } - - // Overlay directory must exist (even if empty) - if (!existsSync(overlayDir)) { - throw new TemplateDirectoryNotFoundError({ - directory: overlayDir, - message: `Template directory not found: ${overlayDir}`, - }); - } - - await tui.spinner({ - type: 'progress', - message: '📦 Copying template files...', - clearOnSuccess: true, - callback: async (progress) => { - // Step 1: Copy base template files (skip gitignore rename for now) - await copyTemplateFiles(baseDir, dest, true); - progress(33); - - // Step 2: Copy overlay template files (overlay wins on conflicts) - await copyTemplateFiles(overlayDir, dest, false); - progress(66); - - // Step 3: Merge package.json with overlay dependencies - await mergePackageJson(dest, overlayDir); - progress(100); - }, - }); - - return; - } - - // Download from GitHub - const branch = templateBranch || GITHUB_BRANCH; - const basePath = `templates/${BASE_TEMPLATE_DIR}`; - const overlayPath = `templates/${template.directory}`; - const url = `https://agentuity.sh/template/sdk/${branch}/tar.gz`; - const tempDir = mkdtempSync(join(tmpdir(), 'agentuity-')); - const tarballPath = join(tempDir, 'download.tar.gz'); - - logger.debug('[download] URL: %s', url); - logger.debug('[download] Branch: %s', branch); - logger.debug('[download] Base path: %s', basePath); - logger.debug('[download] Overlay path: %s', overlayPath); - logger.debug('[download] Temp dir: %s', tempDir); - - try { - // Step 1: Download tarball to temp file - // We download to a file first rather than piping directly to tar-fs - // because this avoids Bun/Node stream compatibility issues - await downloadWithSpinner( - { - url, - message: templateBranch - ? `Downloading template files from branch ${branch}...` - : 'Downloading template files...', - }, - async (stream) => { - // Collect all chunks from the download stream - const chunks: Buffer[] = []; - for await (const chunk of stream) { - chunks.push(Buffer.from(chunk)); - } - const buffer = Buffer.concat(chunks); - await Bun.write(tarballPath, buffer); - - logger.debug('[download] Downloaded bytes: %dbytes', buffer.length); - logger.debug('[download] Tarball path: %s', tarballPath); - } - ); - - // Step 2: Extract tarball - extract both base and overlay templates - // The tarball structure is: sdk-{branch}/templates/{template.directory}/... - const baseExtractDir = join(tempDir, 'base'); - const overlayExtractDir = join(tempDir, 'overlay'); - mkdirSync(baseExtractDir, { recursive: true }); - mkdirSync(overlayExtractDir, { recursive: true }); - - const basePrefix = `sdk-${branch}/${basePath}/`; - const overlayPrefix = `sdk-${branch}/${overlayPath}/`; - logger.debug('[extract] Base extract dir: %s', baseExtractDir); - logger.debug('[extract] Overlay extract dir: %s', overlayExtractDir); - logger.debug('[extract] Base prefix: %s', basePrefix); - logger.debug('[extract] Overlay prefix: %s', overlayPrefix); - - // Track extraction stats for debugging - let ignoredCount = 0; - let baseExtractedCount = 0; - let overlayExtractedCount = 0; - - // Track which entries we've mapped so we don't ignore them later - // Note: tar-fs calls map BEFORE ignore (despite what docs say) - const mappedEntries = new Set(); - - const extractor = extract(tempDir, { - // map callback: called FIRST, allows modifying the entry before extraction - // We extract base files to baseExtractDir and overlay files to overlayExtractDir - map: (header: Headers) => { - const originalName = header.name; - - // Check if this is a base template file - if (header.name.startsWith(basePrefix) && header.name.length > basePrefix.length) { - header.name = `base/${header.name.substring(basePrefix.length)}`; - mappedEntries.add(header.name); - logger.debug('[extract] MAP BASE: %s -> %s', originalName, header.name); - baseExtractedCount++; - } - // Check if this is an overlay template file - else if ( - header.name.startsWith(overlayPrefix) && - header.name.length > overlayPrefix.length - ) { - header.name = `overlay/${header.name.substring(overlayPrefix.length)}`; - mappedEntries.add(header.name); - logger.debug('[extract] MAP OVERLAY: %s -> %s', originalName, header.name); - overlayExtractedCount++; - } - - return header; - }, - // ignore callback: called AFTER map, receives the MAPPED name - // Return true to skip the entry, false to extract it - ignore: (_name: string, header?: Headers) => { - if (!header) { - ignoredCount++; - return true; - } - - // If we already mapped this entry, don't ignore it - if (mappedEntries.has(header.name)) { - return false; - } - - // Otherwise, ignore it - logger.debug('[extract] IGNORE: %s', header.name); - ignoredCount++; - return true; - }, - }); - - // Pipe: tarball file -> gunzip -> tar extractor - createReadStream(tarballPath).pipe(createGunzip()).pipe(extractor); - await finished(extractor); - - logger.debug('[extract] Extraction complete'); - logger.debug('[extract] Ignored entries: %d', ignoredCount); - logger.debug('[extract] Base extracted entries: %d', baseExtractedCount); - logger.debug('[extract] Overlay extracted entries: %d', overlayExtractedCount); - - // Step 3: Copy base template files, then overlay template files - await tui.spinner({ - type: 'progress', - message: '📦 Copying template files...', - clearOnSuccess: true, - callback: async (progress) => { - // Copy base template files (skip gitignore rename for now) - await copyTemplateFiles(baseExtractDir, dest, true); - progress(33); - - // Copy overlay template files (overlay wins on conflicts) - await copyTemplateFiles(overlayExtractDir, dest, false); - progress(66); - - // Merge package.json with overlay dependencies - await mergePackageJson(dest, overlayExtractDir); - progress(100); - }, - }); - } finally { - // Clean up temp directory - logger.debug('[cleanup] Removing temp dir: %s', tempDir); - rmSync(tempDir, { recursive: true, force: true }); - } -} - -export async function setupProject(options: SetupOptions): Promise<{ success: boolean }> { - const { dest, projectName, dirName, noInstall, noBuild, logger } = options; - let hasError = false; - - // Replace {{PROJECT_NAME}} in files - tui.info(`🔧 Setting up ${projectName}...`); - await replaceInFiles(dest, projectName, dirName); - - // Install dependencies - if (!noInstall) { - const exitCode = await tui.runCommand({ - command: 'bun install', - cwd: dest, - cmd: ['bun', 'install'], - clearOnSuccess: true, - }); - if (exitCode !== 0) { - logger.error('Failed to install dependencies'); - hasError = true; - } - } - - // Run optional template setup script if it exists - // This allows templates to run custom setup logic after bun install - const setupScriptPath = join(dest, '_setup.ts'); - if (existsSync(setupScriptPath)) { - try { - const exitCode = await tui.runCommand({ - command: 'bun _setup.ts', - cwd: dest, - cmd: ['bun', '_setup.ts'], - clearOnSuccess: true, - }); - if (exitCode !== 0) { - logger.error('Template setup script failed'); - hasError = true; - } - } finally { - // Always delete the setup script after running (or attempting to run) - try { - rmSync(setupScriptPath); - } catch { - // Ignore errors when deleting the setup script - } - } - } - - // Build project - if (!noBuild) { - const exitCode = await tui.runCommand({ - command: 'bun run build --dev', - cwd: dest, - cmd: ['bun', 'run', 'build', '--dev'], - clearOnSuccess: true, - }); - if (exitCode !== 0) { - logger.error('Failed to build project'); - hasError = true; - } - } - - // Generate and write AGENTS.md files for the CLI and source folders - // Always overwrite during project setup to ensure fresh content - await writeAgentsDocs(dest); - - return { success: !hasError }; -} - -interface InitGitRepoOptions { - /** Project name (e.g. "My Agent") */ - projectName?: string; - /** Where the template came from (e.g. "github.com/owner/repo" or "TypeScript / Hello World") */ - source?: string; - /** Git commit author (e.g. { name: "app-slug[bot]", email: "id+slug[bot]@users.noreply.github.com" }) */ - author?: { name: string; email: string }; -} - -export async function initGitRepo(dest: string, options?: InitGitRepoOptions): Promise { - // Safety: refuse to init if .git already exists (prevents clobbering existing repos) - if (existsSync(join(dest, '.git'))) { - throw new Error(`Refusing to initialize git: "${dest}" already contains a .git directory.`); - } - - // Initialize git repository if git is available - // Check for real git (not macOS stub that triggers Xcode CLT popup) - const { isGitAvailable, getDefaultBranch } = await import('../../git-helper'); - const gitAvailable = await isGitAvailable(); - - if (gitAvailable) { - // Get default branch from git config, fallback to 'main' - const defaultBranch = (await getDefaultBranch()) || 'main'; - - // Git is available, initialize repository - await tui.runCommand({ - command: `git init -b ${defaultBranch}`, - cwd: dest, - cmd: ['git', 'init', '-b', defaultBranch], - clearOnSuccess: true, - }); - - // Configure git user in CI/sandbox environments (where git config may not be set) - if (process.env.CI || process.env.AGENTUITY_SANDBOX_ID) { - const cfgEmail = options?.author?.email ?? 'bot@agentuity.com'; - const cfgName = options?.author?.name ?? 'Agentuity'; - - await tui.runCommand({ - command: 'git config user.email', - cwd: dest, - cmd: ['git', 'config', 'user.email', cfgEmail], - clearOnSuccess: true, - }); - - await tui.runCommand({ - command: 'git config user.name', - cwd: dest, - cmd: ['git', 'config', 'user.name', cfgName], - clearOnSuccess: true, - }); - } - - // Add all files - await tui.runCommand({ - command: 'git add .', - cwd: dest, - cmd: ['git', 'add', '.'], - clearOnSuccess: true, - }); - - const commitMessage = 'Initial Setup'; - - // Create initial commit — authored by the GitHub App bot if available, - // otherwise fallback to generic Agentuity identity - const authorName = options?.author?.name ?? 'Agentuity'; - const authorEmail = options?.author?.email ?? 'bot@agentuity.com'; - const authorStr = `${authorName} <${authorEmail}>`; - - await tui.runCommand({ - command: 'git commit', - cwd: dest, - cmd: [ - 'git', - '-c', - 'commit.gpgsign=false', - 'commit', - `--author=${authorStr}`, - '-m', - commitMessage, - ], - env: { - GIT_COMMITTER_NAME: authorName, - GIT_COMMITTER_EMAIL: authorEmail, - }, - clearOnSuccess: true, - }); - } -} - -async function replaceInFiles(dir: string, projectName: string, dirName: string): Promise { - const filesToReplace = ['package.json', 'README.md', 'AGENTS.md']; - - for (const file of filesToReplace) { - const filePath = join(dir, file); - const bunFile = Bun.file(filePath); - if (await bunFile.exists()) { - let content = await bunFile.text(); - // Replace human-readable name in most places - content = content.replace(/\{\{PROJECT_NAME\}\}/g, projectName); - // Replace with directory name for package.json "name" field (npm package name) - if (file === 'package.json') { - content = content.replace(/"name":\s*".*?"/, `"name": "${dirName}"`); - } - await Bun.write(filePath, content); - } - } -} diff --git a/packages/cli/src/cmd/project/frameworks.ts b/packages/cli/src/cmd/project/frameworks.ts new file mode 100644 index 000000000..364460ee5 --- /dev/null +++ b/packages/cli/src/cmd/project/frameworks.ts @@ -0,0 +1,658 @@ +/** + * Framework scaffolding catalog. + * + * Maps supported frameworks to their official create CLI commands + * and the augmentation steps needed to integrate with Agentuity. + * + * Each entry describes: + * - How to scaffold the project (create CLI + args) + * - What Agentuity dependencies to add + * - How to inject a simple AI SDK example + */ + +export interface FrameworkScaffold { + /** Unique slug (matches detect/frameworks.ts where applicable) */ + slug: string; + + /** Human-readable name */ + name: string; + + /** Short description for the select prompt */ + description: string; + + /** + * Build the create command. + * + * @param projectDir - The target directory name (relative, e.g. "my-app") + * @returns The full command as an argv array (e.g. ["bunx", "create-next-app", "my-app", ...]) + */ + createCommand: (projectDir: string) => string[]; + + /** + * Agentuity packages to add as dependencies after scaffolding. + * `@agentuity/cli` is always added as a devDependency automatically. + */ + dependencies?: string[]; + + /** + * Extra devDependencies to add (beyond @agentuity/cli). + */ + devDependencies?: string[]; + + /** + * Scripts to merge into package.json. + * These are merged on top of whatever the framework CLI created. + */ + scripts?: Record; + + /** + * Generate AI SDK example files for this framework. + * + * Returns a map of relative file paths to file contents. + * Only called if the user opts in to the AI example. + */ + aiExample?: () => Record; + + /** + * Generate a small Agentuity badge/link to add to the framework's default page. + * + * Returns a map of relative file paths to file contents. + * Files are written (or appended) after scaffolding to add an + * "Powered by Agentuity" link on the default landing page. + */ + brandSnippet?: () => Record; +} + +// ─── Agentuity Badge ───────────────────────────────────────────────────────── + +// ─── AI Example Helpers ────────────────────────────────────────────────────── + +function nextjsAiExample(): Record { + return { + 'app/api/chat/route.ts': `import OpenAI from 'openai'; +import { NextResponse } from 'next/server'; + +const openai = new OpenAI(); + +export async function POST(request: Request) { +\tconst { message } = await request.json(); + +\tconst completion = await openai.chat.completions.create({ +\t\tmodel: 'gpt-4o-mini', +\t\tmessages: [ +\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t{ role: 'user', content: message }, +\t\t], +\t}); + +\treturn NextResponse.json({ +\t\treply: completion.choices[0]?.message?.content ?? '', +\t}); +} +`, + }; +} + +function nuxtAiExample(): Record { + return { + 'server/api/chat.post.ts': `import OpenAI from 'openai'; + +const openai = new OpenAI(); + +export default defineEventHandler(async (event) => { +\tconst { message } = await readBody(event); + +\tconst completion = await openai.chat.completions.create({ +\t\tmodel: 'gpt-4o-mini', +\t\tmessages: [ +\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t{ role: 'user', content: message }, +\t\t], +\t}); + +\treturn { +\t\treply: completion.choices[0]?.message?.content ?? '', +\t}; +}); +`, + }; +} + +function remixAiExample(): Record { + return { + 'app/routes/api.chat.ts': `import { type ActionFunctionArgs, json } from '@remix-run/node'; +import OpenAI from 'openai'; + +const openai = new OpenAI(); + +export async function action({ request }: ActionFunctionArgs) { +\tconst { message } = await request.json(); + +\tconst completion = await openai.chat.completions.create({ +\t\tmodel: 'gpt-4o-mini', +\t\tmessages: [ +\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t{ role: 'user', content: message }, +\t\t], +\t}); + +\treturn json({ +\t\treply: completion.choices[0]?.message?.content ?? '', +\t}); +} +`, + }; +} + +function sveltekitAiExample(): Record { + return { + 'src/routes/api/chat/+server.ts': `import { json } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; +import OpenAI from 'openai'; + +const openai = new OpenAI(); + +export const POST: RequestHandler = async ({ request }) => { +\tconst { message } = await request.json(); + +\tconst completion = await openai.chat.completions.create({ +\t\tmodel: 'gpt-4o-mini', +\t\tmessages: [ +\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t{ role: 'user', content: message }, +\t\t], +\t}); + +\treturn json({ +\t\treply: completion.choices[0]?.message?.content ?? '', +\t}); +}; +`, + }; +} + +function astroAiExample(): Record { + return { + 'src/pages/api/chat.ts': `import type { APIRoute } from 'astro'; +import OpenAI from 'openai'; + +const openai = new OpenAI(); + +export const POST: APIRoute = async ({ request }) => { +\tconst { message } = await request.json(); + +\tconst completion = await openai.chat.completions.create({ +\t\tmodel: 'gpt-4o-mini', +\t\tmessages: [ +\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t{ role: 'user', content: message }, +\t\t], +\t}); + +\treturn new Response( +\t\tJSON.stringify({ reply: completion.choices[0]?.message?.content ?? '' }), +\t\t{ headers: { 'Content-Type': 'application/json' } } +\t); +}; +`, + }; +} + +function honoAiExample(): Record { + return { + 'src/index.ts': `import { Hono } from 'hono'; +import OpenAI from 'openai'; + +const app = new Hono(); +const openai = new OpenAI(); + +app.get('/', (c) => c.text('Hello from Hono + Agentuity!')); + +app.post('/api/chat', async (c) => { +\tconst { message } = await c.req.json(); + +\tconst completion = await openai.chat.completions.create({ +\t\tmodel: 'gpt-4o-mini', +\t\tmessages: [ +\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t{ role: 'user', content: message }, +\t\t], +\t}); + +\treturn c.json({ +\t\treply: completion.choices[0]?.message?.content ?? '', +\t}); +}); + +export default app; +`, + }; +} + +function viteReactAiExample(): Record { + return { + 'server.ts': `import OpenAI from 'openai'; + +const openai = new OpenAI(); + +Bun.serve({ +\tport: process.env.PORT ?? 3000, +\tasync fetch(request) { +\t\tconst url = new URL(request.url); + +\t\tif (url.pathname === '/api/chat' && request.method === 'POST') { +\t\t\tconst { message } = await request.json(); + +\t\t\tconst completion = await openai.chat.completions.create({ +\t\t\t\tmodel: 'gpt-4o-mini', +\t\t\t\tmessages: [ +\t\t\t\t\t{ role: 'system', content: 'You are a helpful assistant.' }, +\t\t\t\t\t{ role: 'user', content: message }, +\t\t\t\t], +\t\t\t}); + +\t\t\treturn Response.json({ +\t\t\t\treply: completion.choices[0]?.message?.content ?? '', +\t\t\t}); +\t\t} + +\t\treturn new Response('Not Found', { status: 404 }); +\t}, +}); + +console.log('Server running on http://localhost:' + (process.env.PORT ?? 3000)); +`, + }; +} + +// ─── Brand Snippet Helpers ──────────────────────────────────────────────────── + +function nextjsBrandSnippet(): Record { + return { + 'src/components/AgentuityBadge.tsx': `export function AgentuityBadge() { + return ( + (e.currentTarget.style.borderColor = '#00FFFF')} + onMouseLeave={(e) => (e.currentTarget.style.borderColor = '#27272a')} + > + + + + + Powered by Agentuity + + ); +} +`, + }; +} + +function nuxtBrandSnippet(): Record { + return { + 'components/AgentuityBadge.vue': ` + + +`, + }; +} + +function remixBrandSnippet(): Record { + return { + 'app/components/AgentuityBadge.tsx': `export function AgentuityBadge() { + return ( + (e.currentTarget.style.borderColor = '#00FFFF')} + onMouseLeave={(e) => (e.currentTarget.style.borderColor = '#27272a')} + > + + + + + Powered by Agentuity + + ); +} +`, + }; +} + +function sveltekitBrandSnippet(): Record { + return { + 'src/lib/AgentuityBadge.svelte': ` + + + + + Powered by Agentuity + + + +`, + }; +} + +function astroBrandSnippet(): Record { + return { + 'src/components/AgentuityBadge.astro': `--- +--- + + + + + + Powered by Agentuity + + + +`, + }; +} + +function viteReactBrandSnippet(): Record { + return { + 'src/AgentuityBadge.tsx': `export function AgentuityBadge() { + return ( + (e.currentTarget.style.borderColor = '#00FFFF')} + onMouseLeave={(e) => (e.currentTarget.style.borderColor = '#27272a')} + > + + + + + Powered by Agentuity + + ); +} +`, + }; +} + +// ─── Framework Catalog ─────────────────────────────────────────────────────── + +export const frameworkCatalog: FrameworkScaffold[] = [ + { + slug: 'nextjs', + name: 'Next.js', + description: 'Full-stack React framework with App Router', + createCommand: (dir) => [ + 'bunx', + 'create-next-app@latest', + dir, + '--ts', + '--app', + '--tailwind', + '--eslint', + '--src-dir', + '--import-alias', + '@/*', + '--use-bun', + ], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: nextjsAiExample, + brandSnippet: nextjsBrandSnippet, + }, + { + slug: 'nuxt', + name: 'Nuxt', + description: 'Full-stack Vue framework with server routes', + createCommand: (dir) => ['bunx', 'nuxi@latest', 'init', dir, '--packageManager', 'bun'], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: nuxtAiExample, + brandSnippet: nuxtBrandSnippet, + }, + { + slug: 'remix', + name: 'Remix', + description: 'Full-stack React framework with nested routing', + createCommand: (dir) => [ + 'bunx', + 'create-remix@latest', + dir, + '--yes', + '--install', + '--package-manager', + 'bun', + ], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: remixAiExample, + brandSnippet: remixBrandSnippet, + }, + { + slug: 'sveltekit', + name: 'SvelteKit', + description: 'Full-stack Svelte framework', + createCommand: (dir) => [ + 'bunx', + 'sv@latest', + 'create', + dir, + '--template', + 'minimal', + '--types', + 'ts', + ], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: sveltekitAiExample, + brandSnippet: sveltekitBrandSnippet, + }, + { + slug: 'astro', + name: 'Astro', + description: 'Content-focused framework with island architecture', + createCommand: (dir) => [ + 'bunx', + 'create-astro@latest', + dir, + '--template', + 'basics', + '--install', + '--yes', + '--typescript', + 'strict', + ], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: astroAiExample, + brandSnippet: astroBrandSnippet, + }, + { + slug: 'hono', + name: 'Hono', + description: 'Lightweight, fast web framework for the edge', + createCommand: (dir) => [ + 'bunx', + 'create-hono@latest', + dir, + '--template', + 'bun', + '--install', + '--pm', + 'bun', + ], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: honoAiExample, + }, + { + slug: 'vite-react', + name: 'Vite + React', + description: 'React SPA with Vite bundler', + createCommand: (dir) => ['bunx', 'create-vite@latest', dir, '--template', 'react-ts'], + dependencies: ['openai'], + scripts: { + deploy: 'agentuity deploy', + }, + aiExample: viteReactAiExample, + brandSnippet: viteReactBrandSnippet, + }, +]; + +/** + * Find a framework scaffold by slug. + */ +export function getFrameworkBySlug(slug: string): FrameworkScaffold | undefined { + return frameworkCatalog.find((f) => f.slug === slug); +} diff --git a/packages/cli/src/cmd/project/reconcile.ts b/packages/cli/src/cmd/project/reconcile.ts index fb86f50af..7dda9dbda 100644 --- a/packages/cli/src/cmd/project/reconcile.ts +++ b/packages/cli/src/cmd/project/reconcile.ts @@ -118,38 +118,28 @@ export async function getDefaultProjectName(dir: string): Promise { * @internal Exported for testing */ export async function isValidProjectStructure(dir: string): Promise { - // Check 1: package.json with @agentuity/runtime and agentuity.config.ts + // Check 1: package.json exists (any JS/TS project is valid) const pkgPath = join(dir, 'package.json'); - const configPath = join(dir, 'agentuity.config.ts'); if (await Bun.file(pkgPath).exists()) { try { const pkg = await Bun.file(pkgPath).json(); - const deps = { ...pkg.dependencies, ...pkg.devDependencies }; - if (deps['@agentuity/runtime'] && (await Bun.file(configPath).exists())) { + // Valid if it has a name and at least some structure + if (pkg.name || pkg.dependencies || pkg.devDependencies) { return true; } } catch { - // Fall through to check child project + // Invalid package.json } } - // Check 2: ./agentuity/ subdirectory exists with valid structure (parent project with child) + // Check 2: ./agentuity/ subdirectory exists with a package.json (parent project with child) const agentuityDir = join(dir, 'agentuity'); if (existsSync(agentuityDir) && statSync(agentuityDir).isDirectory()) { const childPkgPath = join(agentuityDir, 'package.json'); - const childConfigPath = join(agentuityDir, 'agentuity.config.ts'); if (await Bun.file(childPkgPath).exists()) { - try { - const childPkg = await Bun.file(childPkgPath).json(); - const childDeps = { ...childPkg.dependencies, ...childPkg.devDependencies }; - if (childDeps['@agentuity/runtime'] && (await Bun.file(childConfigPath).exists())) { - return true; - } - } catch { - // Invalid package.json in child - fall through - } + return true; } } @@ -648,9 +638,8 @@ export async function reconcileProject(opts: ReconcileOptions): Promise { + const { dest, dirName, framework, includeAiExample, logger } = options; + + // Step 1: Run the framework's create command + const cmd = framework.createCommand(dirName); + logger.debug('Scaffolding with: %s', cmd.join(' ')); + + const parentDir = join(dest, '..'); + mkdirSync(parentDir, { recursive: true }); + + const exitCode = await tui.runCommand({ + command: `${framework.name} scaffolding`, + cwd: parentDir, + cmd, + clearOnSuccess: true, + }); + + if (exitCode !== 0) { + throw new Error(`Framework scaffolding failed (exit code ${exitCode})`); + } + + if (!existsSync(dest)) { + throw new Error(`Scaffolding did not create expected directory: ${dest}`); + } + + // Step 2: Augment with Agentuity integration + await augmentProject(dest, framework, includeAiExample, logger); +} + +/** + * Augment a scaffolded project with Agentuity integration. + * + * - Adds @agentuity/cli as devDependency + * - Merges deploy/build scripts into package.json + * - Adds AI example files if requested + * - Generates AGENTS.md documentation + */ +async function augmentProject( + dest: string, + framework: FrameworkScaffold, + includeAiExample: boolean, + logger: Logger +): Promise { + await tui.spinner({ + type: 'progress', + message: '⚡ Adding Agentuity integration...', + clearOnSuccess: true, + callback: async (progress) => { + // Step 1: Merge package.json + await mergePackageJson(dest, framework); + progress(40); + + // Step 2: Add AI example files + if (includeAiExample && framework.aiExample) { + const files = framework.aiExample(); + for (const [relativePath, content] of Object.entries(files)) { + const filePath = join(dest, relativePath); + const dir = join(filePath, '..'); + mkdirSync(dir, { recursive: true }); + await Bun.write(filePath, content); + logger.debug('Created AI example: %s', relativePath); + } + } + progress(50); + + // Step 3: Add Agentuity badge component + if (framework.brandSnippet) { + const files = framework.brandSnippet(); + for (const [relativePath, content] of Object.entries(files)) { + const filePath = join(dest, relativePath); + const dir = join(filePath, '..'); + mkdirSync(dir, { recursive: true }); + await Bun.write(filePath, content); + logger.debug('Created brand badge: %s', relativePath); + } + } + progress(75); + + // Step 4: Add .gitignore entries + await appendGitignore(dest); + progress(100); + }, + }); +} + +/** + * Merge Agentuity dependencies and scripts into the project's package.json. + */ +async function mergePackageJson(dest: string, framework: FrameworkScaffold): Promise { + const pkgPath = join(dest, 'package.json'); + const pkg = await Bun.file(pkgPath).json(); + + // Ensure sections exist + pkg.dependencies = pkg.dependencies ?? {}; + pkg.devDependencies = pkg.devDependencies ?? {}; + pkg.scripts = pkg.scripts ?? {}; + + // Add @agentuity/cli as devDependency + pkg.devDependencies['@agentuity/cli'] = 'latest'; + + // Add framework-specific dependencies + if (framework.dependencies) { + for (const dep of framework.dependencies) { + if (!pkg.dependencies[dep]) { + pkg.dependencies[dep] = 'latest'; + } + } + } + + // Add framework-specific devDependencies + if (framework.devDependencies) { + for (const dep of framework.devDependencies) { + if (!pkg.devDependencies[dep]) { + pkg.devDependencies[dep] = 'latest'; + } + } + } + + // Merge scripts (framework-specific scripts win) + if (framework.scripts) { + for (const [name, script] of Object.entries(framework.scripts)) { + pkg.scripts[name] = script; + } + } + + await Bun.write(pkgPath, JSON.stringify(pkg, null, '\t') + '\n'); +} + +/** + * Append Agentuity-specific entries to .gitignore. + */ +async function appendGitignore(dest: string): Promise { + const gitignorePath = join(dest, '.gitignore'); + const entries = ['.agentuity/', '.env', '.env.local', 'agentuity.json']; + + let content = ''; + if (existsSync(gitignorePath)) { + content = await Bun.file(gitignorePath).text(); + } + + const missing = entries.filter((entry) => !content.includes(entry)); + if (missing.length > 0) { + const section = '\n# Agentuity\n' + missing.join('\n') + '\n'; + await Bun.write(gitignorePath, content.trimEnd() + section); + } +} + +/** + * Set up the project after scaffolding: install deps, generate docs. + */ +export async function setupProject(options: SetupOptions): Promise<{ success: boolean }> { + const { dest, projectName, noInstall, logger } = options; + let hasError = false; + + tui.info(`🔧 Setting up ${projectName}...`); + + // Install dependencies (the framework CLI may have already done this, + // but we need to install our added deps) + if (!noInstall) { + const exitCode = await tui.runCommand({ + command: 'bun install', + cwd: dest, + cmd: ['bun', 'install'], + clearOnSuccess: true, + }); + if (exitCode !== 0) { + logger.error('Failed to install dependencies'); + hasError = true; + } + } + + return { success: !hasError }; +} + +// ─── Git Initialization ────────────────────────────────────────────────────── + +interface InitGitRepoOptions { + /** Project name (e.g. "My App") */ + projectName?: string; + /** Where the project came from (e.g. "Next.js") */ + source?: string; + /** Git commit author */ + author?: { name: string; email: string }; +} + +/** + * Initialize a git repository and create the initial commit. + */ +export async function initGitRepo(dest: string, options?: InitGitRepoOptions): Promise { + // Safety: refuse to init if .git already exists (prevents clobbering existing repos) + if (existsSync(join(dest, '.git'))) { + // Framework CLI may have already initialized git — skip + return; + } + + const { isGitAvailable, getDefaultBranch } = await import('../../git-helper'); + const gitAvailable = await isGitAvailable(); + + if (gitAvailable) { + const defaultBranch = (await getDefaultBranch()) || 'main'; + + await tui.runCommand({ + command: `git init -b ${defaultBranch}`, + cwd: dest, + cmd: ['git', 'init', '-b', defaultBranch], + clearOnSuccess: true, + }); + + // Configure git user in CI/sandbox environments + if (process.env.CI || process.env.AGENTUITY_SANDBOX_ID) { + const cfgEmail = options?.author?.email ?? 'bot@agentuity.com'; + const cfgName = options?.author?.name ?? 'Agentuity'; + + await tui.runCommand({ + command: 'git config user.email', + cwd: dest, + cmd: ['git', 'config', 'user.email', cfgEmail], + clearOnSuccess: true, + }); + + await tui.runCommand({ + command: 'git config user.name', + cwd: dest, + cmd: ['git', 'config', 'user.name', cfgName], + clearOnSuccess: true, + }); + } + + await tui.runCommand({ + command: 'git add .', + cwd: dest, + cmd: ['git', 'add', '.'], + clearOnSuccess: true, + }); + + const authorName = options?.author?.name ?? 'Agentuity'; + const authorEmail = options?.author?.email ?? 'bot@agentuity.com'; + const authorStr = `${authorName} <${authorEmail}>`; + + await tui.runCommand({ + command: 'git commit', + cwd: dest, + cmd: [ + 'git', + '-c', + 'commit.gpgsign=false', + 'commit', + `--author=${authorStr}`, + '-m', + 'Initial Setup', + ], + env: { + GIT_COMMITTER_NAME: authorName, + GIT_COMMITTER_EMAIL: authorEmail, + }, + clearOnSuccess: true, + }); + } +} diff --git a/packages/cli/src/cmd/project/template-flow.ts b/packages/cli/src/cmd/project/template-flow.ts index 13397cbfa..afddb8bd5 100644 --- a/packages/cli/src/cmd/project/template-flow.ts +++ b/packages/cli/src/cmd/project/template-flow.ts @@ -1,3 +1,10 @@ +/** + * Project creation flow — framework-first scaffolding. + * + * Instead of custom Agentuity templates, the user picks a framework + * and we run its official create CLI, then augment with Agentuity integration. + */ + import { existsSync, readdirSync, rmSync, statSync } from 'node:fs'; import { homedir } from 'node:os'; import { basename, resolve } from 'node:path'; @@ -38,16 +45,14 @@ import { printIntegrationExamples, runAuthMigrations, } from './auth/shared'; -import { downloadTemplate, initGitRepo, setupProject } from './download'; -import { fetchTemplates, type TemplateInfo } from './templates'; +import { scaffoldFramework, setupProject, initGitRepo } from './scaffold'; +import { frameworkCatalog, type FrameworkScaffold } from './frameworks'; interface CreateFlowOptions { projectName?: string; dir?: string; domains?: string[]; - template?: string; - templateDir?: string; - templateBranch?: string; + framework?: string; noInstall: boolean; noBuild: boolean; skipPrompts: boolean; @@ -67,7 +72,7 @@ export interface CreateFlowResult { orgId?: string; name: string; path: string; - template: string; + framework: string; installed: boolean; built: boolean; domains?: string[]; @@ -79,9 +84,7 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise { - return fetchTemplates(logger, templateDir, templateBranch); - }, - }); - - if (templates.length === 0) { - logger.fatal('No templates available', ErrorCode.RESOURCE_NOT_FOUND); - } - - // Get project name - let projectName = initialProjectName; - // Organization is now automatically selected by the CLI framework via optional: { org: true } const orgId = selectedOrgId; let catalystClient: ServerAPIClient | undefined; @@ -135,6 +118,9 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise t.id === initialTemplate); + // Step 2: Select framework + let selectedFramework: FrameworkScaffold; + if (initialFramework) { + const found = frameworkCatalog.find((f) => f.slug === initialFramework); if (!found) { - const availableTemplates = templates - .map((t) => ` - ${t.id.padEnd(20)} ${t.description}`) + const available = frameworkCatalog + .map((f) => ` - ${f.slug.padEnd(15)} ${f.description}`) .join('\n'); logger.fatal( - `Template "${initialTemplate}" not found\n\nAvailable templates:\n${availableTemplates}`, + `Framework "${initialFramework}" not found\n\nAvailable frameworks:\n${available}`, ErrorCode.RESOURCE_NOT_FOUND ); return undefined as never; } - selectedTemplate = found; - } else if (!isInteractive || templates.length === 1) { - const firstTemplate = templates[0]; - if (!firstTemplate) { - logger.fatal('No templates available', ErrorCode.RESOURCE_NOT_FOUND); + selectedFramework = found; + } else if (!isInteractive || frameworkCatalog.length === 1) { + const firstFramework = frameworkCatalog[0]; + if (!firstFramework) { + logger.fatal('No frameworks available', ErrorCode.RESOURCE_NOT_FOUND); return undefined as never; } - selectedTemplate = firstTemplate; + selectedFramework = firstFramework; } else { let maxLength = 15; - templates.forEach((t) => { - if (maxLength < t.name.length) { - maxLength = t.name.length; + frameworkCatalog.forEach((f) => { + if (maxLength < f.name.length) { + maxLength = f.name.length; } }); maxLength = Math.min(maxLength + 1, 40); const [_winWidth] = process.stdout.getWindowSize(); - const winWidth = _winWidth - maxLength - 8; // space for the name and left indent - const templateId = await prompt.select({ - message: 'Select a template:', - options: templates.map((t) => ({ - value: t.id, - label: t.name.padEnd(maxLength), + const winWidth = _winWidth - maxLength - 8; + const frameworkId = await prompt.select({ + message: 'Select a framework:', + options: frameworkCatalog.map((f) => ({ + value: f.slug, + label: f.name.padEnd(maxLength), hint: - t.description.length > winWidth - ? t.description.substring(0, winWidth - 3) + '...' - : t.description, + f.description.length > winWidth + ? f.description.substring(0, winWidth - 3) + '...' + : f.description, })), }); - const found = templates.find((t) => t.id === templateId); + const found = frameworkCatalog.find((f) => f.slug === frameworkId); if (!found) { - logger.fatal('Template selection failed', ErrorCode.USER_CANCELLED); + logger.fatal('Framework selection failed', ErrorCode.USER_CANCELLED); return undefined as never; } - selectedTemplate = found; + selectedFramework = found; } - // Download template - await downloadTemplate({ + // Step 3: Ask about AI example + let includeAiExample = true; + if (isInteractive && selectedFramework.aiExample) { + includeAiExample = await prompt.confirm({ + message: 'Include an AI example? (OpenAI API route)', + initial: true, + }); + } + + // Step 4: Scaffold the framework + await scaffoldFramework({ dest, - template: selectedTemplate, - templateDir, - templateBranch, + dirName, + framework: selectedFramework, + includeAiExample, logger, }); - // Setup project (replace placeholders, install deps, build) + // Step 5: Setup project (install deps) const setupResult = await setupProject({ dest, projectName: projectName === '.' ? basename(dest) : projectName, - dirName: dirName === '.' ? basename(dest) : dirName, noInstall: options.noInstall, - noBuild: options.noBuild, logger, }); - // If setup failed, skip resource prompts and registration - just show error and return + // If setup failed, skip resource prompts and registration if (!setupResult.success) { tui.warning('Project setup failed. Skipping resource configuration.'); return { name: projectName, path: dest, - template: selectedTemplate.id, + framework: selectedFramework.slug, installed: !options.noInstall, built: false, success: false, @@ -290,9 +280,10 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise> | undefined; const needResources = @@ -340,26 +328,19 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise d.name).join(', ') || '(none)'}`); - logger.debug( - `Storage buckets: ${resources.s3.map((b) => b.bucket_name).join(', ') || '(none)'}` - ); } - // Determine database action: CLI flag > interactive prompt > skip (headless) + // Database action let db_action: string; if (databaseOption !== undefined) { - // CLI flag provided - normalize to expected values if (databaseOption.toLowerCase() === 'new') { db_action = 'Create New'; } else if (databaseOption.toLowerCase() === 'skip') { db_action = 'Skip'; } else { - // Existing database name - validate it exists const existingDb = resources?.db.find((d) => d.name === databaseOption); if (!existingDb) { logger.fatal( @@ -382,20 +363,17 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise interactive prompt > skip (headless) + // Storage action let s3_action: string; if (storageOption !== undefined) { - // CLI flag provided - normalize to expected values if (storageOption.toLowerCase() === 'new') { s3_action = 'Create New'; } else if (storageOption.toLowerCase() === 'skip') { s3_action = 'Skip'; } else { - // Existing bucket name - validate it exists const existingBucket = resources?.s3.find((b) => b.bucket_name === storageOption); if (!existingBucket) { logger.fatal( @@ -418,11 +396,10 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise b.bucket_name === s3_action); if (selectedBucket?.env) { Object.assign(resourceEnvVars, selectedBucket.env); @@ -497,13 +470,12 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise d.name === db_action); if (selectedDb?.env) { Object.assign(resourceEnvVars, selectedDb.env); @@ -556,19 +525,15 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise interactive prompt > disabled (headless) if (enableAuthOption !== undefined) { - // CLI flag provided authEnabled = enableAuthOption; - } else if (canProvision && isInteractive && !templateHasAuth) { - // For non-auth templates in interactive mode, ask if they want to enable auth + } else if (canProvision && isInteractive) { const enableAuth = await prompt.select({ message: 'Enable Agentuity Authentication?', options: [ @@ -581,26 +546,20 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise 0) { await addResourceEnvVars(dest, resourceEnvVars); - // Show user feedback for auth-related env vars if (authEnabled) { if (resourceEnvVars.DATABASE_URL) { tui.success('DATABASE_URL added to .env'); @@ -726,7 +679,7 @@ export async function runCreateFlow(options: CreateFlowOptions): Promise(); - -export async function fetchTemplates( - logger: Logger, - localDir?: string, - branch?: string -): Promise { - // Load from local directory if provided - if (localDir) { - const { join } = await import('node:path'); - const { resolve } = await import('node:path'); - const manifestPath = resolve(join(localDir, 'templates.json')); - const file = Bun.file(manifestPath); - - if (!(await file.exists())) { - throw new TemplateMissingConfigurationError({ - message: `templates.json not found at ${manifestPath}`, - }); - } - - const manifest = (await file.json()) as TemplatesManifest; - return manifest.templates; - } - - // Fetch from GitHub - const branchToUse = branch || GITHUB_BRANCH; - const url = `https://agentuity.sh/template/sdk/${branchToUse}`; - - const response = await fetch(url); - if (!response.ok) { - logger.trace('error fetching template from %s. %s', url, await response.text()); - throw new TemplateDownloadError({ - status: response.status, - message: `Failed to fetch templates: ${response.statusText}`, - }); - } - - const manifest = (await response.json()) as TemplatesManifest; - return manifest.templates; -} diff --git a/packages/cli/src/deploy-metadata.ts b/packages/cli/src/deploy-metadata.ts new file mode 100644 index 000000000..fbd1dce49 --- /dev/null +++ b/packages/cli/src/deploy-metadata.ts @@ -0,0 +1,253 @@ +/** + * Build metadata generator for non-Agentuity framework deployments. + * + * For Agentuity native apps, the existing metadata-generator.ts creates + * full BuildMetadata with routes, agents, assets from the Vite pipeline. + * + * For other frameworks (Next.js, Vite, SvelteKit, etc.), this module + * generates a BuildMetadata from the BuildResult + LaunchMetadata, + * with empty routes/agents and assets enumerated from the static dir. + */ + +import { join, relative } from 'node:path'; +import { existsSync, readdirSync, statSync } from 'node:fs'; +import { type BuildMetadata, getContentType } from '@agentuity/server'; +import type { z } from 'zod'; +import { DeploymentConfig } from '@agentuity/server'; +import type { BuildResult } from './cmd/build/adapters/types'; +import type { PackageResult } from './cmd/build/package'; +import type { DeployOptions, Logger } from './types'; +import { getVersion } from './version'; +import { getGitInfo, buildGitTags } from './utils/git'; + +/** + * Asset info matching the BuildMetadata schema. + */ +interface AssetInfo { + filename: string; + kind: string; + contentType: string; + size: number; + contentEncoding?: string; +} + +/** + * Determine if an asset should be compressed with gzip for CDN upload. + */ +function shouldCompress(contentType: string): boolean { + const compressible = [ + 'text/', + 'application/javascript', + 'application/json', + 'application/xml', + 'application/xhtml+xml', + 'image/svg+xml', + ]; + return compressible.some((prefix) => contentType.startsWith(prefix)); +} + +/** + * Recursively enumerate static assets from a directory. + */ +function enumerateAssets(dir: string, baseDir: string): AssetInfo[] { + const assets: AssetInfo[] = []; + + if (!existsSync(dir)) return assets; + + const entries = readdirSync(dir, { withFileTypes: true }); + for (const entry of entries) { + const fullPath = join(dir, entry.name); + if (entry.isDirectory()) { + // Skip dot-directories and node_modules + if (entry.name.startsWith('.') || entry.name === 'node_modules') continue; + assets.push(...enumerateAssets(fullPath, baseDir)); + } else { + // Skip dot-files + if (entry.name.startsWith('.')) continue; + + const stats = statSync(fullPath); + if (stats.size === 0) continue; + + const relativePath = relative(baseDir, fullPath); + const contentType = getContentType(entry.name); + + const asset: AssetInfo = { + filename: relativePath, + kind: getAssetKind(entry.name), + contentType, + size: stats.size, + }; + + if (shouldCompress(contentType)) { + asset.contentEncoding = 'gzip'; + } + + assets.push(asset); + } + } + + return assets; +} + +/** + * Classify an asset by file extension. + */ +function getAssetKind(filename: string): string { + const ext = filename.split('.').pop()?.toLowerCase(); + switch (ext) { + case 'js': + case 'mjs': + case 'cjs': + return 'script'; + case 'css': + return 'stylesheet'; + case 'html': + return 'page'; + case 'json': + return 'data'; + case 'svg': + case 'png': + case 'jpg': + case 'jpeg': + case 'gif': + case 'webp': + case 'avif': + case 'ico': + return 'image'; + case 'woff': + case 'woff2': + case 'ttf': + case 'otf': + case 'eot': + return 'font'; + case 'map': + return 'sourcemap'; + default: + return 'static'; + } +} + +export interface GenerateDeployMetadataOptions { + /** Build result from the adapter */ + buildResult: BuildResult; + /** Package result with launch metadata */ + packageResult: PackageResult; + /** Absolute path to the project root */ + projectDir: string; + /** Project ID */ + projectId: string; + /** Organization ID */ + orgId: string; + /** Region */ + region: string; + /** Deployment ID */ + deploymentId: string; + /** Deployment config from agentuity.json */ + deploymentConfig?: z.infer; + /** Deploy CLI options (git info, etc.) */ + deploymentOptions?: DeployOptions; + /** Logger */ + logger: Logger; +} + +/** + * Generate BuildMetadata for a non-Agentuity framework deployment. + * + * Creates the metadata the API expects, with: + * - Empty routes and agents (non-Agentuity apps don't have them) + * - Static assets enumerated from BuildResult.staticDir + * - Launch metadata for the backend to know how to start the app + * - Standard project/deployment info + */ +export async function generateDeployMetadata( + options: GenerateDeployMetadataOptions +): Promise { + const { + buildResult, + packageResult, + projectDir, + projectId, + orgId, + deploymentId, + deploymentConfig, + deploymentOptions, + logger, + } = options; + + // Read package.json for project info + let pkgContents: { + name?: string; + version?: string; + description?: string; + keywords?: string[]; + } = {}; + + const pkgPath = join(projectDir, 'package.json'); + if (existsSync(pkgPath)) { + try { + pkgContents = JSON.parse(await Bun.file(pkgPath).text()); + } catch (error) { + logger.warn(`Failed to read package.json: ${error}`); + } + } + + // Enumerate static assets if we have a static directory + const assets: AssetInfo[] = []; + if (buildResult.staticDir && existsSync(buildResult.staticDir)) { + const outputDir = buildResult.outputDir; + const staticAssets = enumerateAssets(buildResult.staticDir, outputDir); + assets.push(...staticAssets); + logger.debug(`Found ${assets.length} static assets in ${buildResult.staticDir}`); + } + + // Build git info + const gitInfo = await getGitInfo(projectDir, logger); + + const metadata: BuildMetadata = { + routes: [], + agents: [], + assets, + project: { + id: projectId, + name: pkgContents.name || 'unknown', + version: pkgContents.version, + description: pkgContents.description, + keywords: pkgContents.keywords, + orgId, + }, + deployment: { + ...deploymentConfig, + id: deploymentId, + date: new Date().toISOString(), + build: { + bun: Bun.version, + agentuity: getVersion(), + arch: process.arch, + platform: process.platform, + }, + git: gitInfo, + }, + launch: packageResult.launch, + }; + + // Build git tags + if (metadata.deployment.git) { + metadata.deployment.git.tags = buildGitTags(metadata.deployment.git); + } + + // Merge deployment options (CI info, etc.) + if (deploymentOptions) { + const git = { ...(metadata.deployment.git ?? {}), ...deploymentOptions }; + if (deploymentOptions.pullRequestNumber) { + git.pull_request = { + number: deploymentOptions.pullRequestNumber, + url: deploymentOptions.pullRequestUrl, + }; + delete (git as Record).pullRequestNumber; + delete (git as Record).pullRequestUrl; + } + metadata.deployment.git = git; + } + + return metadata; +} diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 4393bae7f..043bba1fe 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -124,8 +124,6 @@ export type { ResourceSelectionRule, BuildPhase, BuildContext, - BuildConfig, - BuildConfigFunction, AgentuityConfig, WorkbenchConfig, } from './types'; diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index 8d40915f1..da643863c 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -260,37 +260,6 @@ export interface AgentuityConfig { bundle?: string[]; } -/** - * User-provided build configuration for a specific phase (legacy Bun bundler) - * @deprecated Use AgentuityConfig instead - */ -export interface BuildConfig { - /** - * Additional Bun plugins to apply during bundling - * These are added AFTER the Agentuity plugin - */ - plugins?: Array; - /** - * Additional external modules to exclude from bundling - * These are merged with Agentuity's default externals - */ - external?: string[]; - /** - * Additional define constants for code replacement - * These are merged with Agentuity's default defines - * Note: Cannot override process.env.AGENTUITY_* or process.env.NODE_ENV - */ - define?: Record; -} - -/** - * Configuration function that users export from agentuity.config.ts - */ -export type BuildConfigFunction = ( - phase: BuildPhase, - context: BuildContext -) => BuildConfig | Promise; - export interface Profile { name: string; filename: string; diff --git a/packages/cli/test/api-discovery.test.ts b/packages/cli/test/api-discovery.test.ts deleted file mode 100644 index 2a2be2251..000000000 --- a/packages/cli/test/api-discovery.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, writeFileSync, rmSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; - -describe('API Router Discovery', () => { - let testDir: string; - - beforeEach(() => { - testDir = join(tmpdir(), `agentuity-test-${Date.now()}`); - mkdirSync(testDir, { recursive: true }); - }); - - afterEach(() => { - if (testDir) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - test('should detect src/api/index.ts and generate mount code', async () => { - const srcDir = join(testDir, 'src'); - const apiDir = join(srcDir, 'api'); - mkdirSync(apiDir, { recursive: true }); - - // Create src/api/index.ts - writeFileSync( - join(apiDir, 'index.ts'), - `import { Hono } from 'hono'; -const api = new Hono(); -api.get('/hello', (c) => c.json({ message: 'hello' })); -export default api;` - ); - - // Create app.ts - writeFileSync( - join(testDir, 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -const { server } = await createApp({});` - ); - - // Create agentuity.json - writeFileSync(join(testDir, 'agentuity.json'), JSON.stringify({ projectId: 'test-project' })); - - // Run build (this would normally be done via CLI) - // For now, just verify the file structure is correct - const apiIndexPath = join(apiDir, 'index.ts'); - expect(await Bun.file(apiIndexPath).exists()).toBe(true); - - const content = await Bun.file(apiIndexPath).text(); - expect(content).toContain('export default'); - }); - - test('generated app.js should import and mount API router at /api', () => { - // This is what the generated code should look like: - const expectedCode = ` -await (async() => { - const { getRouter } = await import('@agentuity/runtime'); - const router = getRouter()!; - const api = require('./src/api/index').default; - router.route('/api', api); -})();`; - - expect(expectedCode).toContain("require('./src/api/index')"); - expect(expectedCode).toContain("router.route('/api', api)"); - }); - - test('should not generate API mount code if src/api/index.ts does not exist', async () => { - const srcDir = join(testDir, 'src'); - mkdirSync(srcDir, { recursive: true }); - - // Create app.ts without src/api - writeFileSync( - join(testDir, 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -const { server } = await createApp({});` - ); - - // Verify no api directory - const apiIndexPath = join(srcDir, 'api', 'index.ts'); - expect(await Bun.file(apiIndexPath).exists()).toBe(false); - }); -}); diff --git a/packages/cli/test/build/ai-gateway-bundle.test.ts b/packages/cli/test/build/ai-gateway-bundle.test.ts deleted file mode 100644 index 93d2a2049..000000000 --- a/packages/cli/test/build/ai-gateway-bundle.test.ts +++ /dev/null @@ -1,245 +0,0 @@ -import { describe, test, expect, beforeAll, afterAll } from 'bun:test'; -import { join } from 'path'; -import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from 'fs'; -import { tmpdir } from 'os'; -import { generatePatches, applyPatch } from '../../src/cmd/build/patch'; -import type { BunPlugin } from 'bun'; - -/** - * End-to-end test for AI Gateway bundling. - * - * This test creates a minimal project that uses @ai-sdk/openai with the - * explicit `createOpenAI({})` pattern (as shown in issue #293), bundles it - * with the LLM patching plugin, and verifies the gateway code is present. - * - * Prevents regression of issue #293: AI Gateway not enabled when loaded from agent. - */ -describe('AI Gateway Bundle Integration', () => { - let tempDir: string; - - beforeAll(async () => { - tempDir = mkdtempSync(join(tmpdir(), 'ai-gateway-test-')); - - // Create a minimal project structure - writeFileSync( - join(tempDir, 'package.json'), - JSON.stringify( - { - name: 'ai-gateway-test', - version: '1.0.0', - type: 'module', - dependencies: { - '@ai-sdk/openai': '^2.0.0', - ai: '^5.0.0', - }, - }, - null, - 2 - ) - ); - - // Create an agent that explicitly uses createOpenAI({}) - // This is the pattern from issue #293 screenshot - mkdirSync(join(tempDir, 'src', 'agent'), { recursive: true }); - writeFileSync( - join(tempDir, 'src', 'agent', 'index.ts'), - ` -import { createOpenAI } from '@ai-sdk/openai'; -import { generateText } from 'ai'; - -// Explicit provider creation - the pattern from issue #293 -const openai = createOpenAI({}); - -export async function runAgent() { - const result = await generateText({ - model: openai('gpt-4o'), - prompt: 'Hello', - }); - return result; -} -` - ); - - // Install dependencies - const proc = Bun.spawn(['bun', 'install', '--quiet'], { - cwd: tempDir, - stdout: 'pipe', - stderr: 'pipe', - }); - await proc.exited; - }); - - afterAll(() => { - rmSync(tempDir, { recursive: true, force: true }); - }); - - test('bundled output should contain AI Gateway patches', async () => { - const entryPath = join(tempDir, 'src', 'agent', 'index.ts'); - const outDir = join(tempDir, 'dist'); - - // Create the patch plugin (same as server-bundler.ts) - const patches = generatePatches(); - const patchPlugin: BunPlugin = { - name: 'agentuity:patch', - setup(build) { - for (const [, patch] of patches) { - let modulePath = join('node_modules', patch.module, '.*'); - if (patch.filename) { - modulePath = join('node_modules', patch.module, patch.filename + '.*'); - } - build.onLoad( - { - filter: new RegExp(modulePath), - namespace: 'file', - }, - async (args) => { - const [contents, loader] = await applyPatch(args.path, patch); - return { contents, loader }; - } - ); - } - }, - }; - - // Bundle the agent - const result = await Bun.build({ - entrypoints: [entryPath], - outdir: outDir, - target: 'bun', - format: 'esm', - plugins: [patchPlugin], - }); - - expect(result.success).toBe(true); - - // Read the bundled output - const outputPath = join(outDir, 'index.js'); - const output = await Bun.file(outputPath).text(); - - // Verify the patches were applied - // The bundle should contain: - // 1. The renamed original function - expect(output).toContain('__agentuity_createOpenAI'); - - // 2. AI Gateway environment variable checks - expect(output).toContain('AGENTUITY_SDK_KEY'); - expect(output).toContain('AGENTUITY_TRANSPORT_URL'); - - // 3. The gateway URL pattern - expect(output).toContain('/gateway/openai'); - - // 4. The baseURL and apiKey setting - expect(output).toContain('opts.baseURL'); - expect(output).toContain('opts.apiKey'); - }); - - test('bundled createOpenAI wrapper should be a hoisted function', async () => { - const entryPath = join(tempDir, 'src', 'agent', 'index.ts'); - const outDir = join(tempDir, 'dist'); - - const patches = generatePatches(); - const patchPlugin: BunPlugin = { - name: 'agentuity:patch', - setup(build) { - for (const [, patch] of patches) { - let modulePath = join('node_modules', patch.module, '.*'); - if (patch.filename) { - modulePath = join('node_modules', patch.module, patch.filename + '.*'); - } - build.onLoad( - { - filter: new RegExp(modulePath), - namespace: 'file', - }, - async (args) => { - const [contents, loader] = await applyPatch(args.path, patch); - return { contents, loader }; - } - ); - } - }, - }; - - const result = await Bun.build({ - entrypoints: [entryPath], - outdir: outDir, - target: 'bun', - format: 'esm', - plugins: [patchPlugin], - }); - - expect(result.success).toBe(true); - - const outputPath = join(outDir, 'index.js'); - const output = await Bun.file(outputPath).text(); - - // The wrapper should be a function declaration (hoisted in JS) - // This is critical for the convenience export pattern: - // export const openai = createOpenAI() - // The wrapper must be visible when this line executes - expect(output).toMatch(/function\s+createOpenAI\s*\(/); - - // The original should be renamed with __agentuity_ prefix - expect(output).toMatch(/function\s+__agentuity_createOpenAI\s*\(/); - - // The convenience export (openai) should call createOpenAI - // In the bundled output, this appears as: var openai = createOpenAI() - expect(output).toMatch(/openai\s*=\s*createOpenAI\s*\(/); - }); - - test('should patch multiple AI SDK providers', async () => { - // Create an agent that uses multiple providers - writeFileSync( - join(tempDir, 'src', 'agent', 'multi.ts'), - ` -import { createOpenAI } from '@ai-sdk/openai'; - -const openai = createOpenAI({}); -export { openai }; -` - ); - - const entryPath = join(tempDir, 'src', 'agent', 'multi.ts'); - const outDir = join(tempDir, 'dist-multi'); - - const patches = generatePatches(); - const patchPlugin: BunPlugin = { - name: 'agentuity:patch', - setup(build) { - for (const [, patch] of patches) { - let modulePath = join('node_modules', patch.module, '.*'); - if (patch.filename) { - modulePath = join('node_modules', patch.module, patch.filename + '.*'); - } - build.onLoad( - { - filter: new RegExp(modulePath), - namespace: 'file', - }, - async (args) => { - const [contents, loader] = await applyPatch(args.path, patch); - return { contents, loader }; - } - ); - } - }, - }; - - const result = await Bun.build({ - entrypoints: [entryPath], - outdir: outDir, - target: 'bun', - format: 'esm', - plugins: [patchPlugin], - }); - - expect(result.success).toBe(true); - - const outputPath = join(outDir, 'multi.js'); - const output = await Bun.file(outputPath).text(); - - // OpenAI patch should be present - expect(output).toContain('__agentuity_createOpenAI'); - expect(output).toContain('/gateway/openai'); - }); -}); diff --git a/packages/cli/test/build/ai-sdk-env-injection.test.ts b/packages/cli/test/build/ai-sdk-env-injection.test.ts deleted file mode 100644 index ec9bd9d47..000000000 --- a/packages/cli/test/build/ai-sdk-env-injection.test.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { describe, test, expect, beforeAll, afterAll } from 'bun:test'; -import { join } from 'path'; -import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from 'fs'; -import { tmpdir } from 'os'; -import { generatePatches, applyPatch, buildPatchFilter } from '../../src/cmd/build/patch'; -import type { BunPlugin } from 'bun'; - -/** - * Integration test for AI SDK environment variable injection. - * - * This test verifies that: - * 1. The bundled AI SDK patches correctly read AGENTUITY_SDK_KEY and AGENTUITY_TRANSPORT_URL - * 2. When both env vars are set, the patched code injects apiKey and baseURL - * 3. When env vars are missing, the patched code does not inject (falls through to SDK default behavior) - * - * Prevents regression of issue #348: AI gateway not injecting API key - */ -describe('AI SDK Environment Variable Injection', () => { - let tempDir: string; - - beforeAll(async () => { - tempDir = mkdtempSync(join(tmpdir(), 'ai-sdk-env-test-')); - - writeFileSync( - join(tempDir, 'package.json'), - JSON.stringify( - { - name: 'ai-sdk-env-test', - version: '1.0.0', - type: 'module', - dependencies: { - '@ai-sdk/openai': '^2.0.0', - ai: '^5.0.0', - }, - }, - null, - 2 - ) - ); - - mkdirSync(join(tempDir, 'src'), { recursive: true }); - writeFileSync( - join(tempDir, 'src', 'test-agent.ts'), - ` -import { createOpenAI } from '@ai-sdk/openai'; - -// Test that createOpenAI picks up the injected options -const openai = createOpenAI({}); - -// Export for testing - in real usage this would be used with generateText -export { openai }; -` - ); - - const proc = Bun.spawn(['bun', 'install', '--quiet'], { - cwd: tempDir, - stdout: 'pipe', - stderr: 'pipe', - }); - await proc.exited; - }); - - afterAll(() => { - rmSync(tempDir, { recursive: true, force: true }); - }); - - test('bundled code should contain AGENTUITY_SDK_KEY check', async () => { - const entryPath = join(tempDir, 'src', 'test-agent.ts'); - const outDir = join(tempDir, 'dist'); - - const patches = generatePatches(); - const patchPlugin: BunPlugin = { - name: 'agentuity:patch', - setup(build) { - for (const [, patch] of patches) { - build.onLoad( - { - filter: buildPatchFilter(patch.module, patch.filename), - namespace: 'file', - }, - async (args) => { - const [contents, loader] = await applyPatch(args.path, patch); - return { contents, loader }; - } - ); - } - }, - }; - - const result = await Bun.build({ - entrypoints: [entryPath], - outdir: outDir, - target: 'bun', - format: 'esm', - plugins: [patchPlugin], - }); - - expect(result.success).toBe(true); - - const outputPath = join(outDir, 'test-agent.js'); - const output = await Bun.file(outputPath).text(); - - // Verify the SDK key check is present in the bundled output - expect(output).toContain('AGENTUITY_SDK_KEY'); - expect(output).toContain('AGENTUITY_TRANSPORT_URL'); - - // Verify the gateway URL injection pattern is present - expect(output).toContain('/gateway/openai'); - expect(output).toContain('opts.apiKey'); - expect(output).toContain('opts.baseURL'); - }); - - test('patched createOpenAI should inject apiKey when env vars are set', async () => { - const entryPath = join(tempDir, 'src', 'test-agent.ts'); - const outDir = join(tempDir, 'dist-env-test'); - - const patches = generatePatches(); - const patchPlugin: BunPlugin = { - name: 'agentuity:patch', - setup(build) { - for (const [, patch] of patches) { - build.onLoad( - { - filter: buildPatchFilter(patch.module, patch.filename), - namespace: 'file', - }, - async (args) => { - const [contents, loader] = await applyPatch(args.path, patch); - return { contents, loader }; - } - ); - } - }, - }; - - const result = await Bun.build({ - entrypoints: [entryPath], - outdir: outDir, - target: 'bun', - format: 'esm', - plugins: [patchPlugin], - }); - - expect(result.success).toBe(true); - - // Create a test script that sets env vars and imports the bundled module - const testScriptPath = join(tempDir, 'run-test.ts'); - writeFileSync( - testScriptPath, - ` -// Set env vars BEFORE importing the patched module -process.env.AGENTUITY_SDK_KEY = 'test-sdk-key-12345'; -process.env.AGENTUITY_TRANSPORT_URL = 'https://test.agentuity.ai'; - -// Dynamic import to ensure env vars are set first -const mod = await import('./dist-env-test/test-agent.js'); - -// The openai provider should have been created with our injected options -// We can't directly inspect the internals, but we can verify the module loaded without errors -console.log('Module loaded successfully'); -console.log('RESULT:SUCCESS'); -` - ); - - // Run the test script - const proc = Bun.spawn(['bun', 'run', testScriptPath], { - cwd: tempDir, - stdout: 'pipe', - stderr: 'pipe', - env: { - ...process.env, - // Clear any existing env vars to ensure clean test - AGENTUITY_SDK_KEY: undefined, - AGENTUITY_TRANSPORT_URL: undefined, - OPENAI_API_KEY: undefined, - }, - }); - - const exitCode = await proc.exited; - const stdout = await new Response(proc.stdout).text(); - const stderr = await new Response(proc.stderr).text(); - - // The module should load without throwing API key errors - expect(exitCode).toBe(0); - expect(stdout).toContain('RESULT:SUCCESS'); - // Should NOT contain API key missing error - expect(stderr).not.toContain('API key is missing'); - }); - - test('patch logic correctly guards against missing env vars', () => { - const patches = generatePatches(); - const openaiProviderPatch = patches.get('@ai-sdk/openai'); - - expect(openaiProviderPatch).toBeDefined(); - const createOpenAIPatch = openaiProviderPatch?.functions?.createOpenAI; - expect(createOpenAIPatch?.before).toBeDefined(); - - const patchCode = createOpenAIPatch?.before || ''; - - // Verify the patch checks for both required env vars - expect(patchCode).toContain('process.env.AGENTUITY_SDK_KEY'); - expect(patchCode).toContain('process.env.AGENTUITY_TRANSPORT_URL'); - - // Verify conditional logic: only inject if BOTH are present - expect(patchCode).toContain('if (url && apikey)'); - - // Verify the injection happens inside the conditional - expect(patchCode).toContain('opts.apiKey = apikey'); - expect(patchCode).toContain('opts.baseURL = url'); - }); -}); diff --git a/packages/cli/test/build/db-rewrite-bundle.test.ts b/packages/cli/test/build/db-rewrite-bundle.test.ts deleted file mode 100644 index b5da48851..000000000 --- a/packages/cli/test/build/db-rewrite-bundle.test.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { describe, test, expect, afterAll } from 'bun:test'; -import { tmpdir } from 'node:os'; -import { join } from 'node:path'; -import { rm, mkdir } from 'node:fs/promises'; -import type { BunPlugin } from 'bun'; -import { - rewriteBunImports, - rewritePgImports, - getLoaderForPath, -} from '../../src/cmd/build/vite/db-rewrite'; - -const testDir = join(tmpdir(), `db-rewrite-bundle-test-${Date.now()}`); - -afterAll(async () => { - await rm(testDir, { recursive: true, force: true }); -}); - -/** - * Build a fixture file through Bun.build with the db-rewrite plugin and return - * the bundled output text. - * - * For the integration test we keep `@agentuity/postgres` as an external so we - * don't need the full dependency chain available. The key thing we verify is - * that the plugin rewrites the imports correctly: the output should reference - * `@agentuity/postgres` instead of `bun` or `pg` for the target specifiers. - */ -async function buildFixture(fixtureCode: string, opts?: { external?: string[] }): Promise { - const fixtureDir = join(testDir, `fixture-${Date.now()}-${Math.random().toString(36).slice(2)}`); - await mkdir(fixtureDir, { recursive: true }); - const outDir = join(fixtureDir, 'out'); - await mkdir(outDir, { recursive: true }); - - const fixturePath = join(fixtureDir, 'input.ts'); - await Bun.write(fixturePath, fixtureCode); - - const plugin: BunPlugin = { - name: 'agentuity:db-rewrite', - setup(build) { - build.onLoad({ filter: /\.[cm]?[jt]sx?$/, namespace: 'file' }, async (args) => { - if (args.path.includes('/node_modules/')) return; - const contents = await Bun.file(args.path).text(); - let updated = contents; - let changed = false; - - const bunResult = rewriteBunImports(updated); - if (bunResult.changed) { - updated = bunResult.contents; - changed = true; - } - - const pgResult = rewritePgImports(updated); - if (pgResult.changed) { - updated = pgResult.contents; - changed = true; - } - - if (!changed) return; - return { contents: updated, loader: getLoaderForPath(args.path) as Bun.Loader }; - }); - }, - }; - - const result = await Bun.build({ - entrypoints: [fixturePath], - outdir: outDir, - target: 'bun', - external: opts?.external ?? ['bun', 'pg', '@agentuity/postgres'], - plugins: [plugin], - }); - - if (!result.success) { - const messages = result.logs.map((l) => l.message || String(l)).join('\n'); - throw new Error(`Build failed:\n${messages}`); - } - - // Read the output bundle - const outputPath = join(outDir, 'input.js'); - return Bun.file(outputPath).text(); -} - -describe('db-rewrite integration (Bun.build)', () => { - test('SQL import from bun is rewritten to @agentuity/postgres', async () => { - const output = await buildFixture(` -import { SQL } from 'bun'; -const sql = new SQL('postgres://localhost/test'); -export { sql }; -`); - // The output should now import SQL from @agentuity/postgres - expect(output).toContain('@agentuity/postgres'); - // SQL should NOT be imported from bun - expect(output).not.toMatch(/import\s*\{[^}]*\bSQL\b[^}]*\}\s*from\s*['"]bun['"]/); - }); - - test('Pool import from pg is rewritten to @agentuity/postgres', async () => { - const output = await buildFixture(` -import { Pool } from 'pg'; -const pool = new Pool({ connectionString: 'postgres://localhost/test' }); -export { pool }; -`); - // The output should now import Pool from @agentuity/postgres - expect(output).toContain('@agentuity/postgres'); - // Pool should NOT be imported from 'pg' - expect(output).not.toMatch(/import\s*\{[^}]*\bPool\b[^}]*\}\s*from\s*['"]pg['"]/); - }); - - test('non-SQL bun imports remain external and unchanged', async () => { - const output = await buildFixture(` -import { serve } from 'bun'; -const server = serve({ port: 3000, fetch: () => new Response('ok') }); -export { server }; -`); - // No @agentuity/postgres rewrite should happen for non-SQL imports - expect(output).not.toContain('@agentuity/postgres'); - // The serve function should still be referenced in the output - expect(output).toContain('serve'); - }); - - test('mixed bun imports: SQL is rewritten, serve remains with bun', async () => { - const output = await buildFixture(` -import { SQL, serve } from 'bun'; -const sql = new SQL('postgres://localhost/test'); -const server = serve({ port: 3000, fetch: () => new Response('ok') }); -export { sql, server }; -`); - // SQL should be from @agentuity/postgres - expect(output).toContain('@agentuity/postgres'); - // SQL should NOT remain in a bun import - expect(output).not.toMatch(/import\s*\{[^}]*\bSQL\b[^}]*\}\s*from\s*['"]bun['"]/); - // serve should still reference bun (either import or globalThis.Bun) - expect(output).toContain('serve'); - }); - - test('combined SQL + Pool rewrites in a single file', async () => { - const output = await buildFixture(` -import { SQL } from 'bun'; -import { Pool } from 'pg'; -const sql = new SQL('postgres://localhost/test'); -const pool = new Pool({ connectionString: 'postgres://localhost/test' }); -export { sql, pool }; -`); - // Both should be rewritten to @agentuity/postgres - expect(output).toContain('@agentuity/postgres'); - // Neither should be imported from their original modules - expect(output).not.toMatch(/import\s*\{[^}]*\bSQL\b[^}]*\}\s*from\s*['"]bun['"]/); - expect(output).not.toMatch(/import\s*\{[^}]*\bPool\b[^}]*\}\s*from\s*['"]pg['"]/); - }); -}); diff --git a/packages/cli/test/build/db-rewrite.test.ts b/packages/cli/test/build/db-rewrite.test.ts deleted file mode 100644 index 62e030477..000000000 --- a/packages/cli/test/build/db-rewrite.test.ts +++ /dev/null @@ -1,299 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { - getLoaderForPath, - rewriteNamedSpecifiers, - rewriteBunImports, - rewritePgImports, -} from '../../src/cmd/build/vite/db-rewrite'; - -// --------------------------------------------------------------------------- -// getLoaderForPath -// --------------------------------------------------------------------------- - -describe('getLoaderForPath', () => { - test('.ts → ts', () => { - expect(getLoaderForPath('src/index.ts')).toBe('ts'); - }); - - test('.tsx → tsx', () => { - expect(getLoaderForPath('src/App.tsx')).toBe('tsx'); - }); - - test('.js → js', () => { - expect(getLoaderForPath('lib/index.js')).toBe('js'); - }); - - test('.jsx → jsx', () => { - expect(getLoaderForPath('lib/App.jsx')).toBe('jsx'); - }); - - test('.mjs → js', () => { - expect(getLoaderForPath('lib/index.mjs')).toBe('js'); - }); - - test('.cjs → js', () => { - expect(getLoaderForPath('lib/index.cjs')).toBe('js'); - }); - - test('.mts → ts', () => { - expect(getLoaderForPath('src/index.mts')).toBe('ts'); - }); - - test('.cts → ts', () => { - expect(getLoaderForPath('src/index.cts')).toBe('ts'); - }); - - test('unknown extension → js (default)', () => { - expect(getLoaderForPath('data/config.json')).toBe('js'); - }); -}); - -// --------------------------------------------------------------------------- -// rewriteNamedSpecifiers -// --------------------------------------------------------------------------- - -describe('rewriteNamedSpecifiers', () => { - test('target found: SQL with target SQL → moved', () => { - const result = rewriteNamedSpecifiers('SQL', 'SQL'); - expect(result.moved).toBe(true); - expect(result.move).toEqual(['SQL']); - expect(result.stay).toEqual([]); - }); - - test('target not found: serve with target SQL → not moved', () => { - const result = rewriteNamedSpecifiers('serve', 'SQL'); - expect(result.moved).toBe(false); - expect(result.move).toEqual([]); - expect(result.stay).toEqual(['serve']); - }); - - test('mixed: SQL, serve → SQL moves, serve stays', () => { - const result = rewriteNamedSpecifiers('SQL, serve', 'SQL'); - expect(result.moved).toBe(true); - expect(result.move).toEqual(['SQL']); - expect(result.stay).toEqual(['serve']); - }); - - test('aliased: SQL as MySQL → moves (match on import name)', () => { - const result = rewriteNamedSpecifiers('SQL as MySQL', 'SQL'); - expect(result.moved).toBe(true); - expect(result.move).toEqual(['SQL as MySQL']); - expect(result.stay).toEqual([]); - }); - - test('type specifier: type SQL → stays', () => { - const result = rewriteNamedSpecifiers('type SQL', 'SQL'); - expect(result.moved).toBe(false); - expect(result.move).toEqual([]); - expect(result.stay).toEqual(['type SQL']); - }); - - test('mixed type + value: type SQLOptions, SQL → SQLOptions stays, SQL moves', () => { - const result = rewriteNamedSpecifiers('type SQLOptions, SQL', 'SQL'); - expect(result.moved).toBe(true); - expect(result.move).toEqual(['SQL']); - expect(result.stay).toEqual(['type SQLOptions']); - }); - - test('empty string → no moves', () => { - const result = rewriteNamedSpecifiers('', 'SQL'); - expect(result.moved).toBe(false); - expect(result.move).toEqual([]); - expect(result.stay).toEqual([]); - }); - - test('whitespace only → no moves', () => { - const result = rewriteNamedSpecifiers(' ', 'SQL'); - expect(result.moved).toBe(false); - expect(result.move).toEqual([]); - expect(result.stay).toEqual([]); - }); -}); - -// --------------------------------------------------------------------------- -// rewriteBunImports -// --------------------------------------------------------------------------- - -describe('rewriteBunImports', () => { - test("import { SQL } from 'bun'; → @agentuity/postgres", () => { - const input = "import { SQL } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("from '@agentuity/postgres'"); - expect(contents).toContain('SQL'); - }); - - test('import { SQL } from "bun"; → same (double quotes)', () => { - const input = 'import { SQL } from "bun";'; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("from '@agentuity/postgres'"); - }); - - test("import { serve } from 'bun'; → unchanged (no SQL)", () => { - const input = "import { serve } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("import { SQL, serve } from 'bun'; → split into two imports", () => { - const input = "import { SQL, serve } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import { serve } from 'bun';"); - expect(contents).toContain("import { SQL } from '@agentuity/postgres';"); - }); - - test("import type { SQL } from 'bun'; → unchanged (type-only)", () => { - const input = "import type { SQL } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("import { type SQL } from 'bun'; → unchanged (inline type)", () => { - const input = "import { type SQL } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("import { type SQLOptions, SQL } from 'bun'; → split: type stays with bun, SQL moves", () => { - const input = "import { type SQLOptions, SQL } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import { type SQLOptions } from 'bun';"); - expect(contents).toContain("import { SQL } from '@agentuity/postgres';"); - }); - - test("export { SQL } from 'bun'; → export from @agentuity/postgres", () => { - const input = "export { SQL } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("export { SQL } from '@agentuity/postgres';"); - }); - - test("import { SQL as Database } from 'bun'; → preserves alias", () => { - const input = "import { SQL as Database } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import { SQL as Database } from '@agentuity/postgres';"); - }); - - test('indented: preserves tab indentation', () => { - const input = "\n\timport { SQL } from 'bun';"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("\timport { SQL } from '@agentuity/postgres';"); - }); - - test('multiple imports in same file: both get rewritten', () => { - const input = [ - "import { SQL } from 'bun';", - 'const x = 1;', - "import { SQL as DB } from 'bun';", - ].join('\n'); - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - // Both SQL imports should be rewritten - const matches = contents.match(/@agentuity\/postgres/g); - expect(matches).not.toBeNull(); - expect(matches!.length).toBe(2); - }); - - test("no semicolon: import { SQL } from 'bun' → works", () => { - const input = "import { SQL } from 'bun'"; - const { contents, changed } = rewriteBunImports(input); - expect(changed).toBe(true); - expect(contents).toContain("from '@agentuity/postgres'"); - }); -}); - -// --------------------------------------------------------------------------- -// rewritePgImports -// --------------------------------------------------------------------------- - -describe('rewritePgImports', () => { - test("import { Pool } from 'pg'; → @agentuity/postgres", () => { - const input = "import { Pool } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("from '@agentuity/postgres'"); - expect(contents).toContain('Pool'); - }); - - test("import { Client } from 'pg'; → unchanged (not Pool)", () => { - const input = "import { Client } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("import { Pool, Client } from 'pg'; → split: Client stays, Pool moves", () => { - const input = "import { Pool, Client } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import { Client } from 'pg';"); - expect(contents).toContain("import { Pool } from '@agentuity/postgres';"); - }); - - test("import pg from 'pg'; → unchanged (default import)", () => { - const input = "import pg from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("import pg, { Pool } from 'pg'; → split: default stays with pg, Pool moves", () => { - const input = "import pg, { Pool } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import pg from 'pg';"); - expect(contents).toContain("import { Pool } from '@agentuity/postgres';"); - }); - - test("import type { PoolConfig } from 'pg'; → unchanged (type-only)", () => { - const input = "import type { PoolConfig } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("import { type PoolConfig, Pool } from 'pg'; → split correctly", () => { - const input = "import { type PoolConfig, Pool } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import { type PoolConfig } from 'pg';"); - expect(contents).toContain("import { Pool } from '@agentuity/postgres';"); - }); - - test("import * as pg from 'pg'; → unchanged (namespace)", () => { - const input = "import * as pg from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(false); - expect(contents).toBe(input); - }); - - test("export { Pool } from 'pg'; → export from @agentuity/postgres", () => { - const input = "export { Pool } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("export { Pool } from '@agentuity/postgres';"); - }); - - test("export { Pool, Client } from 'pg'; → split", () => { - const input = "export { Pool, Client } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("export { Client } from 'pg';"); - expect(contents).toContain("export { Pool } from '@agentuity/postgres';"); - }); - - test("import { Pool as PgPool } from 'pg'; → preserves alias", () => { - const input = "import { Pool as PgPool } from 'pg';"; - const { contents, changed } = rewritePgImports(input); - expect(changed).toBe(true); - expect(contents).toContain("import { Pool as PgPool } from '@agentuity/postgres';"); - }); -}); diff --git a/packages/cli/test/build/dev-server-bundle.test.ts b/packages/cli/test/build/dev-server-bundle.test.ts deleted file mode 100644 index adf6b1627..000000000 --- a/packages/cli/test/build/dev-server-bundle.test.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { join } from 'path'; -import { mkdirSync, writeFileSync, rmSync } from 'node:fs'; - -/** - * Tests for dev server behavior. - * - * This test suite verifies: - * 1. app.ts validation for bun --hot compatibility - * 2. Port cleanup and orphan process handling - * 3. Error message quality when server fails to start - */ -describe('Bun Dev Server', () => { - const testDir = join(import.meta.dir, `.test-bun-dev-${Date.now()}`); - - beforeEach(() => { - mkdirSync(testDir, { recursive: true }); - }); - - afterEach(() => { - rmSync(testDir, { recursive: true, force: true }); - }); - - describe('app.ts validation', () => { - test('detects v1 pattern (destructuring without export default)', async () => { - const appPath = join(testDir, 'app.ts'); - writeFileSync( - appPath, - `import { createApp } from '@agentuity/runtime'; -const { server, logger } = await createApp({ agents: [] }); -logger.debug('Running %s', server.url); -// Missing export default!` - ); - - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { validateAppTs } = await import(serverPath); - const result = await validateAppTs(appPath); - - expect(result.hasCreateApp).toBe(true); - expect(result.hasDefaultExport).toBe(false); - expect(result.isV1Pattern).toBe(true); - expect(result.hints.length).toBeGreaterThan(0); - expect(result.hints[0]).toContain('export default'); - }); - - test('accepts correct v2 pattern (export default createApp)', async () => { - const appPath = join(testDir, 'app.ts'); - writeFileSync( - appPath, - `import { createApp } from '@agentuity/runtime'; -import agents from '@agent/index'; - -export default createApp({ agents });` - ); - - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { validateAppTs } = await import(serverPath); - const result = await validateAppTs(appPath); - - expect(result.hasCreateApp).toBe(true); - expect(result.hasDefaultExport).toBe(true); - expect(result.isV1Pattern).toBe(false); - expect(result.hints.length).toBe(0); - }); - - test('accepts pattern with logger access', async () => { - const appPath = join(testDir, 'app.ts'); - writeFileSync( - appPath, - `import { createApp } from '@agentuity/runtime'; -import agents from '@agent/index'; - -const app = await createApp({ agents }); -app.logger.debug('Running %s', app.server.url); -export default app;` - ); - - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { validateAppTs } = await import(serverPath); - const result = await validateAppTs(appPath); - - expect(result.hasCreateApp).toBe(true); - expect(result.hasDefaultExport).toBe(true); - expect(result.isV1Pattern).toBe(false); - }); - - test('detects missing createApp call', async () => { - const appPath = join(testDir, 'app.ts'); - writeFileSync( - appPath, - `// No createApp call at all -export default { fetch: () => new Response('hi'), port: 3000 };` - ); - - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { validateAppTs } = await import(serverPath); - const result = await validateAppTs(appPath); - - expect(result.hasCreateApp).toBe(false); - expect(result.hints.some((h) => h.includes('createApp'))).toBe(true); - }); - - test('accepts Bun.serve pattern (no createApp needed)', async () => { - const appPath = join(testDir, 'app.ts'); - writeFileSync( - appPath, - `// Direct Bun.serve usage (advanced use case) -export default { - fetch: () => new Response('Hello'), - port: 3000 -};` - ); - - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { validateAppTs } = await import(serverPath); - const result = await validateAppTs(appPath); - - expect(result.hasCreateApp).toBe(false); - // Should NOT complain about missing createApp since Bun.serve pattern is valid - expect(result.hints.length).toBe(0); - }); - }); - - describe('error messages', () => { - test('buildStartupErrorMessage includes validation hints', async () => { - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { buildStartupErrorMessage } = await import(serverPath); - - const message = buildStartupErrorMessage(3501, 5000, 'some error output', { - hasDefaultExport: false, - hasCreateApp: true, - isV1Pattern: true, - hints: ['Missing export default', 'Add: export default createApp({...})'], - }); - - expect(message).toContain('3501'); - expect(message).toContain('5000ms'); - expect(message).toContain('some error output'); - expect(message).toContain('Missing export default'); - }); - - test('buildStartupErrorMessage includes stdout when provided', async () => { - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { buildStartupErrorMessage } = await import(serverPath); - - const message = buildStartupErrorMessage( - 3501, - 5000, - 'stderr output here', - { - hasDefaultExport: true, - hasCreateApp: true, - isV1Pattern: false, - hints: [], - }, - 'TypeError: Cannot read properties of undefined\n at app.ts:5:10' - ); - - expect(message).toContain('Bun stderr:'); - expect(message).toContain('stderr output here'); - expect(message).toContain('Bun stdout:'); - expect(message).toContain('TypeError: Cannot read properties of undefined'); - }); - - test('buildStartupErrorMessage shows generic troubleshooting when no hints', async () => { - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const { buildStartupErrorMessage } = await import(serverPath); - - const message = buildStartupErrorMessage(3501, 5000, '', { - hasDefaultExport: true, - hasCreateApp: true, - isV1Pattern: false, - hints: [], - }); - - expect(message).toContain('Troubleshooting'); - expect(message).toContain('lsof -i :3501'); - }); - }); - - describe('bun --hot requirements', () => { - test('bun-dev-server.ts documents export default requirement', async () => { - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const serverSource = await Bun.file(serverPath).text(); - - // Should document the export default requirement - expect(serverSource).toContain('export default'); - expect(serverSource).toContain('fetch'); - expect(serverSource).toContain('port'); - }); - - test('bun-dev-server.ts validates app.ts before starting', async () => { - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const serverSource = await Bun.file(serverPath).text(); - - // Should call validateAppTs - expect(serverSource).toContain('validateAppTs'); - }); - - test('bun-dev-server.ts handles port cleanup', async () => { - const serverPath = join(import.meta.dir, '../../src/cmd/build/vite/bun-dev-server.ts'); - const serverSource = await Bun.file(serverPath).text(); - - // Should have port cleanup logic - expect(serverSource).toContain('ensurePortAvailable'); - expect(serverSource).toContain('killProcessOnPort'); - }); - }); -}); diff --git a/packages/cli/test/build/llm-patching.test.ts b/packages/cli/test/build/llm-patching.test.ts deleted file mode 100644 index e1ce9a5a8..000000000 --- a/packages/cli/test/build/llm-patching.test.ts +++ /dev/null @@ -1,363 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { generatePatches, buildPatchFilter } from '../../src/cmd/build/patch'; - -/** - * Integration test for LLM provider patching during build. - * - * This test verifies that AI SDK packages are correctly patched during Bun.build - * to inject Agentuity AI Gateway routing and API key handling. - * - * This prevents regression of: - * - Issue #235: patches not applied after switching from Vite to Bun for server bundling - * - Issue #293: AI Gateway not enabled in dev mode when using createOpenAI({}) in agents - */ -describe('LLM Provider Patching', () => { - test('should generate 16 patches for LLM providers', () => { - const patches = generatePatches(); - - // Verify we have all expected patches - // 3 from llm.ts (openai, groq-sdk, @anthropic-ai/sdk) - // 10 from aisdk.ts (@vercel/ai + 9 @ai-sdk/* providers) - // 3 from otel-llm.ts (openai:otel, @anthropic-ai/sdk:otel, groq-sdk:otel) - expect(patches.size).toBe(16); - - // Verify key patches exist - expect(patches.has('openai')).toBe(true); - expect(patches.has('groq-sdk')).toBe(true); - expect(patches.has('@anthropic-ai/sdk')).toBe(true); - expect(patches.has('@vercel/ai')).toBe(true); - expect(patches.has('@ai-sdk/openai')).toBe(true); - expect(patches.has('@ai-sdk/anthropic')).toBe(true); - expect(patches.has('@ai-sdk/google')).toBe(true); - }); - - test('should inject AGENTUITY_SDK_KEY guard in native SDK patches', async () => { - const patches = generatePatches(); - const openaiPatch = patches.get('openai'); - - expect(openaiPatch).toBeDefined(); - expect(openaiPatch?.module).toBe('openai'); - expect(openaiPatch?.filename).toBe('index'); - - // Verify the patch has body.before (env guard injection) - expect(openaiPatch?.body?.before).toBeDefined(); - expect(openaiPatch?.body?.before).toContain('AGENTUITY_SDK_KEY'); - expect(openaiPatch?.body?.before).toContain('OPENAI_API_KEY'); - expect(openaiPatch?.body?.before).toContain('OPENAI_BASE_URL'); - }); - - test('should wrap AI SDK functions with telemetry enablement', () => { - const patches = generatePatches(); - const vercelAIPatch = patches.get('@vercel/ai'); - - expect(vercelAIPatch).toBeDefined(); - expect(vercelAIPatch?.module).toBe('ai'); - - // Verify the patch wraps key functions - expect(vercelAIPatch?.functions).toBeDefined(); - expect(vercelAIPatch?.functions?.generateText).toBeDefined(); - expect(vercelAIPatch?.functions?.streamText).toBeDefined(); - expect(vercelAIPatch?.functions?.generateObject).toBeDefined(); - expect(vercelAIPatch?.functions?.streamObject).toBeDefined(); - - // Verify telemetry is enabled in the patch - const generateTextPatch = vercelAIPatch?.functions?.generateText; - expect(generateTextPatch?.before).toContain('experimental_telemetry'); - expect(generateTextPatch?.before).toContain('isEnabled: true'); - }); - - test('should wrap AI SDK provider creation functions', () => { - const patches = generatePatches(); - const openaiProviderPatch = patches.get('@ai-sdk/openai'); - - expect(openaiProviderPatch).toBeDefined(); - expect(openaiProviderPatch?.module).toBe('@ai-sdk/openai'); - - // Verify the patch wraps createOpenAI - expect(openaiProviderPatch?.functions).toBeDefined(); - expect(openaiProviderPatch?.functions?.createOpenAI).toBeDefined(); - - // Verify AI Gateway integration - const createOpenAIPatch = openaiProviderPatch?.functions?.createOpenAI; - expect(createOpenAIPatch?.before).toContain('AGENTUITY_SDK_KEY'); - expect(createOpenAIPatch?.before).toContain('OPENAI_API_KEY'); - }); - - test('should generate env guard code for native SDK patches', () => { - const patches = generatePatches(); - const openaiPatch = patches.get('openai'); - - expect(openaiPatch).toBeDefined(); - expect(openaiPatch?.body?.before).toBeDefined(); - - // Verify the env guard code is generated correctly - const envGuard = openaiPatch?.body?.before || ''; - expect(envGuard).toContain('if (!process.env.OPENAI_API_KEY)'); - expect(envGuard).toContain('process.env.AGENTUITY_SDK_KEY'); - expect(envGuard).toContain('process.env.OPENAI_BASE_URL'); - }); - - test('should include gateway URL in createOpenAI patch (issue #293)', () => { - const patches = generatePatches(); - const openaiProviderPatch = patches.get('@ai-sdk/openai'); - - expect(openaiProviderPatch).toBeDefined(); - const createOpenAIPatch = openaiProviderPatch?.functions?.createOpenAI; - expect(createOpenAIPatch?.before).toBeDefined(); - - // The patch should set baseURL to the gateway endpoint - // This ensures that both: - // - const openai = createOpenAI({}) - explicit provider creation in agent - // - import { openai } from '@ai-sdk/openai' - convenience export - // are routed through the AI Gateway - const patchCode = createOpenAIPatch?.before || ''; - expect(patchCode).toContain('/gateway/openai'); - expect(patchCode).toContain('AGENTUITY_TRANSPORT_URL'); - expect(patchCode).toContain('opts.baseURL'); - expect(patchCode).toContain('opts.apiKey'); - }); - - test('should wrap createOpenAI as a function (hoisting for convenience export)', () => { - const patches = generatePatches(); - const openaiProviderPatch = patches.get('@ai-sdk/openai'); - - expect(openaiProviderPatch).toBeDefined(); - - // The patch uses 'functions' which means applyPatch will: - // 1. Rename original: function createOpenAI -> function __agentuity_createOpenAI - // 2. Add wrapper: function createOpenAI() { ... } - // - // Because function declarations are hoisted in JavaScript, the wrapper - // will be called even for: export const openai = createOpenAI() - // which runs at module initialization time. - expect(openaiProviderPatch?.functions?.createOpenAI).toBeDefined(); - expect(openaiProviderPatch?.body).toBeUndefined(); // Not a body patch - - // Verify it's patching the correct function name - const patchConfig = openaiProviderPatch?.functions?.createOpenAI; - expect(patchConfig?.before).toBeDefined(); - }); -}); - -/** - * OpenTelemetry LLM instrumentation patches. - * - * These patches wrap LLM SDK methods with OTel spans at build time, - * since runtime instrumentation (traceloop) doesn't work with bundled code. - */ -describe('OTel LLM Instrumentation Patches', () => { - test('should generate OTel patches for OpenAI, Anthropic, and Groq', () => { - const patches = generatePatches(); - - expect(patches.has('openai:otel')).toBe(true); - expect(patches.has('@anthropic-ai/sdk:otel')).toBe(true); - expect(patches.has('groq-sdk:otel')).toBe(true); - }); - - test('OpenAI OTel patch should target chat/completions resource', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - expect(patch).toBeDefined(); - expect(patch?.module).toBe('openai'); - expect(patch?.filename).toBe('resources/chat/completions/completions'); - expect(patch?.body?.after).toBeDefined(); - }); - - test('Anthropic OTel patch should target messages resource', () => { - const patches = generatePatches(); - const patch = patches.get('@anthropic-ai/sdk:otel'); - - expect(patch).toBeDefined(); - expect(patch?.module).toBe('@anthropic-ai/sdk'); - expect(patch?.filename).toBe('resources/messages'); - expect(patch?.body?.after).toBeDefined(); - }); - - test('Groq OTel patch should target chat/completions resource', () => { - const patches = generatePatches(); - const patch = patches.get('groq-sdk:otel'); - - expect(patch).toBeDefined(); - expect(patch?.module).toBe('groq-sdk'); - expect(patch?.filename).toBe('resources/chat/completions'); - expect(patch?.body?.after).toBeDefined(); - }); - - test('OTel patches should include GenAI semantic convention attributes', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - expect(patch?.body?.after).toBeDefined(); - const code = patch?.body?.after || ''; - - // Verify GenAI semantic convention attributes - expect(code).toContain('gen_ai.system'); - expect(code).toContain('gen_ai.request.model'); - expect(code).toContain('gen_ai.request.max_tokens'); - expect(code).toContain('gen_ai.request.temperature'); - expect(code).toContain('gen_ai.usage.input_tokens'); - expect(code).toContain('gen_ai.usage.output_tokens'); - expect(code).toContain('gen_ai.response.model'); - expect(code).toContain('gen_ai.response.id'); - expect(code).toContain('gen_ai.response.finish_reasons'); - expect(code).toContain('gen_ai.response.text'); - expect(code).toContain('gen_ai.request.messages'); - }); - - test('OTel patches should import @opentelemetry/api', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - expect(code).toContain("import * as _otel_api from '@opentelemetry/api'"); - }); - - test('OTel patches should include tracer initialization', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - expect(code).toContain("_otel_api.trace.getTracer('@agentuity/otel-llm', '1.0.0')"); - }); - - test('OTel patches should handle streaming responses', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - - // Verify stream wrapping - expect(code).toContain('_wrapStream'); - expect(code).toContain('_wrapAsyncIterator'); - expect(code).toContain('Symbol.asyncIterator'); - - // Verify streaming content capture - expect(code).toContain('contentChunks'); - expect(code).toContain('finishReason'); - }); - - test('OTel patches should safely check for class existence before patching', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - - // Verify safety check for class existence - expect(code).toContain('typeof Completions'); - expect(code).toContain('.prototype.create'); - expect(code).toContain('try'); - expect(code).toContain('catch'); - }); - - test('OTel patches should set correct provider name for each SDK', () => { - const patches = generatePatches(); - - const openaiPatch = patches.get('openai:otel'); - const anthropicPatch = patches.get('@anthropic-ai/sdk:otel'); - const groqPatch = patches.get('groq-sdk:otel'); - - expect(openaiPatch?.body?.after).toContain("'openai'"); - expect(anthropicPatch?.body?.after).toContain("'anthropic'"); - expect(groqPatch?.body?.after).toContain("'groq'"); - }); - - test('OTel patches should capture request messages', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - - // Verify request messages capture - expect(code).toContain('body.messages'); - expect(code).toContain('JSON.stringify'); - expect(code).toContain('_ATTR_GEN_AI_REQUEST_MESSAGES'); - }); - - test('OTel patches should handle errors and set error status', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - - // Verify error handling - expect(code).toContain('SpanStatusCode.ERROR'); - expect(code).toContain('recordException'); - expect(code).toContain('span.setStatus'); - }); - - test('OTel patches should guard synchronous failures with try/catch', () => { - const patches = generatePatches(); - const patch = patches.get('openai:otel'); - - const code = patch?.body?.after || ''; - - // Verify _original_create is wrapped in try/catch - expect(code).toContain('try {'); - expect(code).toContain('result = _original_create.call(this, body, options);'); - expect(code).toContain('} catch (error) {'); - - // Count try/catch blocks - should have multiple for: - // 1. _original_create call - // 2. _wrapStream in promise.then - // 3. Direct _wrapStream call - const tryCount = (code.match(/try\s*\{/g) || []).length; - expect(tryCount).toBeGreaterThanOrEqual(3); - }); -}); - -/** - * Patch filter regex tests (cross-platform path matching). - * - * buildPatchFilter produces a RegExp that matches file paths inside node_modules - * using both forward slashes (Unix) and backslashes (Windows). This prevents - * the AI SDK patches from silently failing on Windows, where path.join() - * produces backslashes that break regex patterns. - */ -describe('buildPatchFilter (cross-platform)', () => { - test('matches Unix paths for simple modules', () => { - const filter = buildPatchFilter('groq-sdk', 'index'); - expect(filter.test('/home/user/project/node_modules/groq-sdk/index.mjs')).toBe(true); - expect(filter.test('/home/user/project/node_modules/groq-sdk/index.js')).toBe(true); - }); - - test('matches Windows paths for simple modules', () => { - const filter = buildPatchFilter('groq-sdk', 'index'); - expect(filter.test('C:\\Users\\user\\project\\node_modules\\groq-sdk\\index.mjs')).toBe(true); - expect(filter.test('C:\\Users\\user\\project\\node_modules\\groq-sdk\\index.js')).toBe(true); - }); - - test('matches scoped packages on both platforms', () => { - const filter = buildPatchFilter('@anthropic-ai/sdk', 'index'); - expect(filter.test('/project/node_modules/@anthropic-ai/sdk/index.mjs')).toBe(true); - expect(filter.test('C:\\project\\node_modules\\@anthropic-ai\\sdk\\index.mjs')).toBe(true); - }); - - test('matches deep filenames (otel patches) on both platforms', () => { - const filter = buildPatchFilter('openai', 'resources/chat/completions/completions'); - const unix = '/p/node_modules/openai/resources/chat/completions/completions.mjs'; - const win = 'C:\\p\\node_modules\\openai\\resources\\chat\\completions\\completions.mjs'; - expect(filter.test(unix)).toBe(true); - expect(filter.test(win)).toBe(true); - }); - - test('matches without filename (wildcard) on both platforms', () => { - const filter = buildPatchFilter('@ai-sdk/openai'); - const unix = '/project/node_modules/@ai-sdk/openai/dist/index.mjs'; - const win = 'C:\\project\\node_modules\\@ai-sdk\\openai\\dist\\index.mjs'; - expect(filter.test(unix)).toBe(true); - expect(filter.test(win)).toBe(true); - }); - - test('every generated patch produces a filter that matches both platforms', () => { - const patches = generatePatches(); - for (const [, patch] of patches) { - const filter = buildPatchFilter(patch.module, patch.filename); - const file = patch.filename ? `${patch.filename}.mjs` : 'dist/index.mjs'; - const unix = `/project/node_modules/${patch.module}/${file}`; - const win = `C:\\project\\node_modules\\${patch.module.replace(/\//g, '\\')}\\${file.replace(/\//g, '\\')}`; - expect(filter.test(unix)).toBe(true); - expect(filter.test(win)).toBe(true); - } - }); -}); diff --git a/packages/cli/test/bundle-files.test.ts b/packages/cli/test/bundle-files.test.ts deleted file mode 100644 index 2ad57820d..000000000 --- a/packages/cli/test/bundle-files.test.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, writeFileSync, existsSync, readFileSync, rmSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { copyBundleFiles } from '../src/cmd/build/vite/bundle-files'; -import type { Logger } from '../src/types'; - -let tempDir: string; -let outDir: string; -let warnings: string[]; -let debugs: string[]; - -function createLogger(): Logger { - warnings = []; - debugs = []; - const logger: Logger = { - info: () => {}, - warn: (msg: unknown) => { - warnings.push(String(msg)); - }, - error: () => {}, - debug: (msg: unknown) => { - debugs.push(String(msg)); - }, - fatal: (() => { - throw new Error('fatal called'); - }) as Logger['fatal'], - trace: () => {}, - child: () => logger, - }; - return logger; -} - -beforeEach(() => { - tempDir = join(tmpdir(), `bundle-test-${Date.now()}-${Math.random().toString(36).slice(2)}`); - outDir = join(tempDir, 'out'); - mkdirSync(tempDir, { recursive: true }); -}); - -afterEach(() => { - rmSync(tempDir, { force: true, recursive: true }); -}); - -test('copies files matching a simple glob pattern', async () => { - // Create test files - mkdirSync(join(tempDir, 'data'), { recursive: true }); - writeFileSync(join(tempDir, 'data', 'a.json'), '{"a":1}'); - writeFileSync(join(tempDir, 'data', 'b.json'), '{"b":2}'); - - const logger = createLogger(); - const count = await copyBundleFiles(tempDir, outDir, ['data/*.json'], logger); - - expect(count).toBe(2); - expect(existsSync(join(outDir, 'data', 'a.json'))).toBe(true); - expect(existsSync(join(outDir, 'data', 'b.json'))).toBe(true); - expect(readFileSync(join(outDir, 'data', 'a.json'), 'utf-8')).toBe('{"a":1}'); -}); - -test('preserves nested directory structure', async () => { - mkdirSync(join(tempDir, 'deep', 'nested', 'dir'), { recursive: true }); - writeFileSync(join(tempDir, 'deep', 'nested', 'dir', 'file.txt'), 'hello'); - - const logger = createLogger(); - const count = await copyBundleFiles(tempDir, outDir, ['deep/**'], logger); - - expect(count).toBe(1); - expect(existsSync(join(outDir, 'deep', 'nested', 'dir', 'file.txt'))).toBe(true); - expect(readFileSync(join(outDir, 'deep', 'nested', 'dir', 'file.txt'), 'utf-8')).toBe('hello'); -}); - -test('handles multiple patterns', async () => { - mkdirSync(join(tempDir, 'data'), { recursive: true }); - mkdirSync(join(tempDir, 'templates'), { recursive: true }); - writeFileSync(join(tempDir, 'data', 'file.csv'), 'a,b'); - writeFileSync(join(tempDir, 'templates', 'page.html'), ''); - - const logger = createLogger(); - const count = await copyBundleFiles(tempDir, outDir, ['data/**', 'templates/**'], logger); - - expect(count).toBe(2); - expect(existsSync(join(outDir, 'data', 'file.csv'))).toBe(true); - expect(existsSync(join(outDir, 'templates', 'page.html'))).toBe(true); -}); - -test('excludes .agentuity/ directory', async () => { - mkdirSync(join(tempDir, '.agentuity'), { recursive: true }); - mkdirSync(join(tempDir, 'src'), { recursive: true }); - writeFileSync(join(tempDir, '.agentuity', 'build.js'), 'build'); - writeFileSync(join(tempDir, 'src', 'index.ts'), 'code'); - - const logger = createLogger(); - await copyBundleFiles(tempDir, outDir, ['**/*'], logger); - - expect(existsSync(join(outDir, 'src', 'index.ts'))).toBe(true); - expect(existsSync(join(outDir, '.agentuity', 'build.js'))).toBe(false); -}); - -test('excludes node_modules/ directory', async () => { - mkdirSync(join(tempDir, 'node_modules', 'pkg'), { recursive: true }); - mkdirSync(join(tempDir, 'lib'), { recursive: true }); - writeFileSync(join(tempDir, 'node_modules', 'pkg', 'index.js'), 'module'); - writeFileSync(join(tempDir, 'lib', 'util.ts'), 'util'); - - const logger = createLogger(); - await copyBundleFiles(tempDir, outDir, ['**/*'], logger); - - expect(existsSync(join(outDir, 'lib', 'util.ts'))).toBe(true); - expect(existsSync(join(outDir, 'node_modules', 'pkg', 'index.js'))).toBe(false); -}); - -test('warns when pattern matches no files', async () => { - const logger = createLogger(); - const count = await copyBundleFiles(tempDir, outDir, ['nonexistent/**'], logger); - - expect(count).toBe(0); - expect(warnings.length).toBe(1); - expect(warnings[0]).toContain("'nonexistent/**'"); - expect(warnings[0]).toContain('matched no files'); -}); - -test('logs debug message for matched patterns', async () => { - mkdirSync(join(tempDir, 'data'), { recursive: true }); - writeFileSync(join(tempDir, 'data', 'file.txt'), 'content'); - - const logger = createLogger(); - await copyBundleFiles(tempDir, outDir, ['data/**'], logger); - - expect(debugs.some((d) => d.includes("'data/**'") && d.includes('1 file(s)'))).toBe(true); -}); - -test('returns zero for empty patterns array', async () => { - const logger = createLogger(); - const count = await copyBundleFiles(tempDir, outDir, [], logger); - - expect(count).toBe(0); - expect(warnings.length).toBe(0); -}); - -test('excludes .env files at project root', async () => { - writeFileSync(join(tempDir, '.env'), 'SECRET=abc'); - writeFileSync(join(tempDir, '.env.local'), 'LOCAL=xyz'); - writeFileSync(join(tempDir, '.env.production'), 'PROD=123'); - mkdirSync(join(tempDir, 'src'), { recursive: true }); - writeFileSync(join(tempDir, 'src', 'app.ts'), 'code'); - - const logger = createLogger(); - await copyBundleFiles(tempDir, outDir, ['**/*'], logger); - - expect(existsSync(join(outDir, 'src', 'app.ts'))).toBe(true); - expect(existsSync(join(outDir, '.env'))).toBe(false); - expect(existsSync(join(outDir, '.env.local'))).toBe(false); - expect(existsSync(join(outDir, '.env.production'))).toBe(false); -}); - -test('excludes .git/ directory', async () => { - mkdirSync(join(tempDir, '.git', 'objects'), { recursive: true }); - mkdirSync(join(tempDir, 'src'), { recursive: true }); - writeFileSync(join(tempDir, '.git', 'config'), 'git config'); - writeFileSync(join(tempDir, '.git', 'objects', 'abc'), 'object'); - writeFileSync(join(tempDir, 'src', 'index.ts'), 'code'); - - const logger = createLogger(); - await copyBundleFiles(tempDir, outDir, ['**/*'], logger); - - expect(existsSync(join(outDir, 'src', 'index.ts'))).toBe(true); - expect(existsSync(join(outDir, '.git', 'config'))).toBe(false); - expect(existsSync(join(outDir, '.git', 'objects', 'abc'))).toBe(false); -}); - -test('throws contextual error on copy failure', async () => { - // Create a file that will be matched - mkdirSync(join(tempDir, 'data'), { recursive: true }); - writeFileSync(join(tempDir, 'data', 'file.txt'), 'content'); - - const logger = createLogger(); - - // Create outDir so the initial mkdirSync succeeds, then place a regular - // file where the per-file mkdirSync needs to create a directory. - mkdirSync(outDir, { recursive: true }); - writeFileSync(join(outDir, 'data'), 'blocker'); - - try { - await copyBundleFiles(tempDir, outDir, ['data/**'], logger); - expect(true).toBe(false); // Should not reach here - } catch (err) { - expect((err as Error).message).toContain('data/file.txt'); - expect((err as Error).message).toContain("'data/**'"); - } -}); - -test('filters out gitignored files', async () => { - // Initialize a git repo in the temp directory - Bun.spawnSync(['git', 'init'], { cwd: tempDir }); - Bun.spawnSync(['git', 'config', 'user.email', 'test@test.com'], { cwd: tempDir }); - Bun.spawnSync(['git', 'config', 'user.name', 'Test'], { cwd: tempDir }); - - // Create .gitignore that ignores build output - writeFileSync(join(tempDir, '.gitignore'), 'dist/\n*.log\n'); - - // Create files: some gitignored, some not - mkdirSync(join(tempDir, 'dist'), { recursive: true }); - mkdirSync(join(tempDir, 'src'), { recursive: true }); - writeFileSync(join(tempDir, 'dist', 'bundle.js'), 'built'); - writeFileSync(join(tempDir, 'src', 'app.ts'), 'source'); - writeFileSync(join(tempDir, 'debug.log'), 'log content'); - writeFileSync(join(tempDir, 'readme.md'), 'hello'); - - const logger = createLogger(); - await copyBundleFiles(tempDir, outDir, ['**/*'], logger); - - // src/app.ts and readme.md should be copied (not ignored) - expect(existsSync(join(outDir, 'src', 'app.ts'))).toBe(true); - expect(existsSync(join(outDir, 'readme.md'))).toBe(true); - - // dist/bundle.js and debug.log should NOT be copied (gitignored) - expect(existsSync(join(outDir, 'dist', 'bundle.js'))).toBe(false); - expect(existsSync(join(outDir, 'debug.log'))).toBe(false); - - // .gitignore itself is not hard-excluded, but it's a tracked file so it passes through - // (it's fine to include .gitignore — it's harmless) -}); - -test('falls back gracefully when not a git repo', async () => { - // tempDir is NOT a git repo — just a plain directory - mkdirSync(join(tempDir, 'data'), { recursive: true }); - writeFileSync(join(tempDir, 'data', 'file.txt'), 'content'); - writeFileSync(join(tempDir, 'data', 'ignored.log'), 'should be included without git'); - - const logger = createLogger(); - const count = await copyBundleFiles(tempDir, outDir, ['data/**'], logger); - - // Both files should be copied since there's no git to filter - expect(count).toBe(2); - expect(existsSync(join(outDir, 'data', 'file.txt'))).toBe(true); - expect(existsSync(join(outDir, 'data', 'ignored.log'))).toBe(true); - - // Should have a debug log about not being a git repo - expect(debugs.some((d) => d.includes('Not a git repository'))).toBe(true); -}); diff --git a/packages/cli/test/cmd/build/adapters/registry.test.ts b/packages/cli/test/cmd/build/adapters/registry.test.ts new file mode 100644 index 000000000..117942503 --- /dev/null +++ b/packages/cli/test/cmd/build/adapters/registry.test.ts @@ -0,0 +1,71 @@ +import { describe, test, expect } from 'bun:test'; +import { getAdapter } from '../../../../src/cmd/build/adapters'; + +describe('Adapter Registry', () => { + test('returns generic adapter for agentuity (deprecated)', () => { + const adapter = getAdapter('agentuity'); + expect(adapter.name).toBe('generic'); + }); + + test('returns nextjs adapter for nextjs framework', () => { + const adapter = getAdapter('nextjs'); + expect(adapter.name).toBe('nextjs'); + }); + + test('returns generic adapter for vite (no specific adapter)', () => { + const adapter = getAdapter('vite'); + expect(adapter.name).toBe('generic'); + }); + + test('returns generic adapter for sveltekit (no specific adapter yet)', () => { + const adapter = getAdapter('sveltekit'); + expect(adapter.name).toBe('generic'); + }); + + test('returns generic adapter for nuxt', () => { + const adapter = getAdapter('nuxt'); + expect(adapter.name).toBe('generic'); + }); + + test('returns generic adapter for remix', () => { + const adapter = getAdapter('remix'); + expect(adapter.name).toBe('generic'); + }); + + test('returns generic adapter for astro', () => { + const adapter = getAdapter('astro'); + expect(adapter.name).toBe('generic'); + }); + + test('returns generic adapter for generic', () => { + const adapter = getAdapter('generic'); + expect(adapter.name).toBe('generic'); + }); + + test('returns generic adapter for unknown framework slug', () => { + const adapter = getAdapter('some-unknown-framework'); + expect(adapter.name).toBe('generic'); + }); + + test('all known framework adapters have a build function', () => { + const slugs = [ + 'nextjs', + 'vite', + 'sveltekit', + 'astro', + 'nuxt', + 'remix', + 'react-router', + 'solidstart', + 'tanstack-start', + 'generic', + ]; + + for (const slug of slugs) { + const adapter = getAdapter(slug); + expect(adapter).toBeDefined(); + expect(typeof adapter.build).toBe('function'); + expect(typeof adapter.name).toBe('string'); + } + }); +}); diff --git a/packages/cli/test/cmd/build/app-router-detector.test.ts b/packages/cli/test/cmd/build/app-router-detector.test.ts deleted file mode 100644 index e7bd763b4..000000000 --- a/packages/cli/test/cmd/build/app-router-detector.test.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { join } from 'node:path'; -import { mkdirSync, writeFileSync, rmSync } from 'node:fs'; -import { detectExplicitRouter } from '../../../src/cmd/build/app-router-detector'; - -const createTestDir = () => { - const dir = join( - import.meta.dir, - `.test-router-detect-${Date.now()}-${Math.random().toString(36).slice(2)}` - ); - mkdirSync(dir, { recursive: true }); - return dir; -}; - -const logger = { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, -}; - -describe('App Router Detector', () => { - let testDir: string; - - beforeEach(() => { - testDir = createTestDir(); - mkdirSync(join(testDir, 'src', 'api'), { recursive: true }); - }); - - afterEach(() => { - rmSync(testDir, { recursive: true, force: true }); - }); - - test('returns not detected when no app.ts exists', async () => { - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(false); - expect(result.mounts).toHaveLength(0); - }); - - test('returns not detected when createApp has no router property', async () => { - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -export const app = await createApp({ name: 'my-app' });` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(false); - }); - - test('returns not detected when createApp is called with no arguments', async () => { - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -export const app = await createApp();` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(false); - }); - - test('detects plain Hono router (default /api mount)', async () => { - writeFileSync( - join(testDir, 'src', 'api', 'index.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -router.get('/health', (c) => c.text('OK')); -export default router;` - ); - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -import router from './api/index'; -export const app = await createApp({ router });` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(true); - expect(result.mounts).toHaveLength(1); - expect(result.mounts[0]!.path).toBe('/api'); - expect(result.mounts[0]!.routerFile).toContain('src/api/index.ts'); - }); - - test('detects single RouteMount with custom path', async () => { - writeFileSync( - join(testDir, 'src', 'api', 'index.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -export default router;` - ); - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -import router from './api/index'; -export const app = await createApp({ router: { path: '/v1', router } });` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(true); - expect(result.mounts).toHaveLength(1); - expect(result.mounts[0]!.path).toBe('/v1'); - }); - - test('detects array of RouteMounts', async () => { - writeFileSync( - join(testDir, 'src', 'api', 'v1.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -export default router;` - ); - writeFileSync( - join(testDir, 'src', 'api', 'v2.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -export default router;` - ); - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -import v1 from './api/v1'; -import v2 from './api/v2'; -export const app = await createApp({ - router: [ - { path: '/api/v1', router: v1 }, - { path: '/api/v2', router: v2 }, - ] -});` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(true); - expect(result.mounts).toHaveLength(2); - expect(result.mounts[0]!.path).toBe('/api/v1'); - expect(result.mounts[1]!.path).toBe('/api/v2'); - }); - - test('handles await createApp pattern', async () => { - writeFileSync( - join(testDir, 'src', 'api', 'index.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -export default router;` - ); - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -import router from './api/index'; -const app = await createApp({ router });` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(true); - expect(result.mounts).toHaveLength(1); - expect(result.mounts[0]!.path).toBe('/api'); - }); - - test('returns not detected when router variable cannot be resolved', async () => { - writeFileSync( - join(testDir, 'src', 'app.ts'), - `import { createApp } from '@agentuity/runtime'; -const router = buildRouter(); // not imported from a file -export const app = await createApp({ router });` - ); - - const result = await detectExplicitRouter(testDir, logger); - expect(result.detected).toBe(false); - }); -}); diff --git a/packages/cli/test/cmd/build/buildpack-contract.test.ts b/packages/cli/test/cmd/build/buildpack-contract.test.ts new file mode 100644 index 000000000..35500cf95 --- /dev/null +++ b/packages/cli/test/cmd/build/buildpack-contract.test.ts @@ -0,0 +1,590 @@ +/** + * Buildpack Contract Tests + * + * End-to-end tests that create real (minimal) projects, run them through + * the full detect → adapter.build → package pipeline, and validate the + * output directory meets the buildpack contract: + * + * 1. launch.json exists and has valid process definitions + * 2. Procfile exists and is parseable + * 3. .agentuity-build marker exists with correct metadata + * 4. For server apps: start command references a real file in the output + * 5. For static apps: static directory exists with content + * 6. Build artifacts are actually present in the output + */ + +import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; +import { mkdirSync, writeFileSync, rmSync, existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { tmpdir } from 'node:os'; +import { detectFrameworkWithPackageJson } from '../../../src/cmd/build/detect'; +import { getAdapter } from '../../../src/cmd/build/adapters'; +import { packageBuildOutput } from '../../../src/cmd/build/package'; +import type { LaunchMetadata } from '../../../src/cmd/build/package/launch'; + +// ── Helpers ── + +function createTestDir(): string { + const dir = join(tmpdir(), `buildpack-e2e-${Date.now()}-${Math.random().toString(36).slice(2)}`); + mkdirSync(dir, { recursive: true }); + return dir; +} + +function writePackageJson(dir: string, content: Record) { + writeFileSync(join(dir, 'package.json'), JSON.stringify(content, null, 2)); +} + +const logger = { + trace: () => {}, + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, + fatal: (() => { + throw new Error('fatal'); + }) as never, + child: () => logger, +}; + +/** + * Parse a Procfile and return { processType: command } map. + */ +function parseProcfile(content: string): Record { + const result: Record = {}; + for (const line of content.split('\n')) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith('#')) continue; + const colonIdx = trimmed.indexOf(':'); + if (colonIdx === -1) continue; + const type = trimmed.slice(0, colonIdx).trim(); + const command = trimmed.slice(colonIdx + 1).trim(); + result[type] = command; + } + return result; +} + +/** + * Validate the buildpack output contract for a given directory. + * Returns an array of violations (empty = valid). + */ +function validateBuildpackContract(outputDir: string): string[] { + const violations: string[] = []; + + // 1. launch.json must exist and be valid JSON + const launchPath = join(outputDir, 'launch.json'); + if (!existsSync(launchPath)) { + violations.push('launch.json is missing'); + } else { + try { + const launch: LaunchMetadata = JSON.parse(readFileSync(launchPath, 'utf-8')); + if (!launch.processes || !Array.isArray(launch.processes)) { + violations.push('launch.json: processes must be an array'); + } + if (!launch.framework || typeof launch.framework.name !== 'string') { + violations.push('launch.json: framework.name must be a string'); + } + if (!launch.runtime || typeof launch.runtime.name !== 'string') { + violations.push('launch.json: runtime.name must be a string'); + } + if (!launch.build || typeof launch.build.duration !== 'number') { + violations.push('launch.json: build.duration must be a number'); + } + if (!launch.build || typeof launch.build.date !== 'string') { + violations.push('launch.json: build.date must be a string'); + } + + // Every build must produce at least one web process + const webProcess = launch.processes.find((p) => p.type === 'web'); + if (!webProcess) { + violations.push('launch.json: must have a "web" process'); + } else { + if (typeof webProcess.command !== 'string' || webProcess.command.length === 0) { + violations.push('launch.json: web process must have a non-empty command'); + } + if (webProcess.default !== true) { + violations.push('launch.json: web process must be default'); + } + } + } catch { + violations.push('launch.json: invalid JSON'); + } + } + + // 2. Procfile must exist and be parseable + const procfilePath = join(outputDir, 'Procfile'); + if (!existsSync(procfilePath)) { + violations.push('Procfile is missing'); + } else { + const content = readFileSync(procfilePath, 'utf-8'); + const processes = parseProcfile(content); + if (!processes.web) { + violations.push('Procfile: must have a "web" process type'); + } + // Validate that Procfile commands are non-empty + for (const [type, cmd] of Object.entries(processes)) { + if (!cmd || cmd.length === 0) { + violations.push(`Procfile: process "${type}" has empty command`); + } + } + } + + // 3. .agentuity-build marker must exist + const markerPath = join(outputDir, '.agentuity-build'); + if (!existsSync(markerPath)) { + violations.push('.agentuity-build marker is missing'); + } else { + try { + const marker = JSON.parse(readFileSync(markerPath, 'utf-8')); + if (marker.version !== 1) { + violations.push('.agentuity-build: version must be 1'); + } + if (typeof marker.framework !== 'string') { + violations.push('.agentuity-build: framework must be a string'); + } + if (typeof marker.runtime !== 'string') { + violations.push('.agentuity-build: runtime must be a string'); + } + } catch { + violations.push('.agentuity-build: invalid JSON'); + } + } + + return violations; +} + +/** + * Check that Procfile and launch.json agree on the start command. + */ +function validateConsistency(outputDir: string): string[] { + const violations: string[] = []; + + const launchPath = join(outputDir, 'launch.json'); + const procfilePath = join(outputDir, 'Procfile'); + + if (!existsSync(launchPath) || !existsSync(procfilePath)) return violations; + + const launch: LaunchMetadata = JSON.parse(readFileSync(launchPath, 'utf-8')); + const procfile = parseProcfile(readFileSync(procfilePath, 'utf-8')); + + const webProcess = launch.processes.find((p) => p.type === 'web'); + if (webProcess && procfile.web) { + if (webProcess.command !== procfile.web) { + violations.push( + `Procfile and launch.json disagree on web command: "${procfile.web}" vs "${webProcess.command}"` + ); + } + } + + return violations; +} + +// ── Tests ── + +describe('Buildpack Contract — End-to-End', () => { + let testDir: string; + let outputDir: string; + + beforeEach(() => { + testDir = createTestDir(); + outputDir = join(testDir, '.agentuity'); + }); + + afterEach(() => { + rmSync(testDir, { recursive: true, force: true }); + }); + + // ── Generic server project ── + + test('generic server project produces valid buildpack output', async () => { + // Create a minimal Node.js server project + writePackageJson(testDir, { + name: 'test-server', + version: '1.0.0', + scripts: { + build: 'mkdir -p dist && echo "console.log(42)" > dist/index.js', + start: 'node dist/index.js', + }, + }); + + // Detect + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('generic'); + + // Build + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + // Package + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // Validate contract + const violations = validateBuildpackContract(buildResult.outputDir); + expect(violations).toEqual([]); + + // Validate consistency + const inconsistencies = validateConsistency(buildResult.outputDir); + expect(inconsistencies).toEqual([]); + }, 30_000); + + // ── Generic static project ── + + test('generic static project produces valid buildpack output', async () => { + // Create a minimal static site project (build but no start) + writePackageJson(testDir, { + name: 'test-static', + version: '1.0.0', + scripts: { + build: 'mkdir -p dist && echo "

Hello

" > dist/index.html', + }, + }); + + // Detect + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('generic'); + // No start command — generic adapter will inject a static file server + expect(framework!.startCommand).toBeUndefined(); + + // Build + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + // The adapter should have injected a start command + expect(buildResult.startCommand).toBeDefined(); + + // Package + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // Validate contract — should still produce a valid buildpack output + const violations = validateBuildpackContract(buildResult.outputDir); + expect(violations).toEqual([]); + }, 30_000); + + // ── Server project: start command references real file ── + + test('server build output contains the file referenced by start command', async () => { + writePackageJson(testDir, { + name: 'test-server-entry', + version: '1.0.0', + scripts: { + build: "mkdir -p dist && echo \"const http = require('http'); http.createServer((req, res) => res.end('ok')).listen(3000);\" > dist/server.js", + start: 'node dist/server.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // The build output should contain the dist/server.js file + // The generic adapter copies build output to outputDir and the project root is '.' + // So server.js should be findable relative to the output + const launch: LaunchMetadata = JSON.parse( + readFileSync(join(buildResult.outputDir, 'launch.json'), 'utf-8') + ); + const webProcess = launch.processes.find((p) => p.type === 'web'); + expect(webProcess).toBeDefined(); + expect(webProcess!.command).toBeTruthy(); + + // For generic adapter with buildOutput '.', the dist/ dir stays in the project + // The start command is 'node dist/server.js' — verify the file exists in the project + expect(existsSync(join(testDir, 'dist', 'server.js'))).toBe(true); + }, 30_000); + + // ── Build creates actual artifacts ── + + test('build actually creates artifacts, not just metadata', async () => { + writePackageJson(testDir, { + name: 'test-artifacts', + version: '1.0.0', + scripts: { + build: 'mkdir -p dist/assets && echo "body{color:red}" > dist/assets/style.css && echo "" > dist/index.html && echo "console.log(1)" > dist/app.js', + start: 'node dist/app.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // Verify build artifacts exist in the project (generic adapter with buildOutput '.') + expect(existsSync(join(testDir, 'dist', 'index.html'))).toBe(true); + expect(existsSync(join(testDir, 'dist', 'app.js'))).toBe(true); + expect(existsSync(join(testDir, 'dist', 'assets', 'style.css'))).toBe(true); + }, 30_000); + + // ── Procfile format ── + + test('Procfile follows standard format (type: command)', async () => { + writePackageJson(testDir, { + name: 'test-procfile', + version: '1.0.0', + scripts: { + build: 'echo "built"', + start: 'node server.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const procfileContent = readFileSync(join(buildResult.outputDir, 'Procfile'), 'utf-8'); + + // Standard Procfile format: each line is "type: command\n" + const lines = procfileContent.split('\n').filter((l) => l.trim().length > 0); + for (const line of lines) { + expect(line).toMatch(/^[a-z]+:\s+.+$/); + } + + // Must end with newline + expect(procfileContent.endsWith('\n')).toBe(true); + }, 30_000); + + // ── launch.json schema completeness ── + + test('launch.json contains all required fields', async () => { + writePackageJson(testDir, { + name: 'test-launch-schema', + version: '1.0.0', + scripts: { + build: 'echo "built"', + start: 'bun run index.ts', + }, + engines: { bun: '>=1.0.0' }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const launch: LaunchMetadata = JSON.parse( + readFileSync(join(buildResult.outputDir, 'launch.json'), 'utf-8') + ); + + // Top-level fields + expect(launch).toHaveProperty('processes'); + expect(launch).toHaveProperty('framework'); + expect(launch).toHaveProperty('runtime'); + expect(launch).toHaveProperty('build'); + + // Framework fields + expect(launch.framework).toHaveProperty('name'); + expect(typeof launch.framework.name).toBe('string'); + + // Runtime fields + expect(launch.runtime).toHaveProperty('name'); + expect(['node', 'bun']).toContain(launch.runtime.name); + + // Build fields + expect(launch.build).toHaveProperty('date'); + expect(launch.build).toHaveProperty('duration'); + expect(typeof launch.build.duration).toBe('number'); + expect(launch.build.duration).toBeGreaterThanOrEqual(0); + + // Date must be ISO 8601 + expect(() => new Date(launch.build.date).toISOString()).not.toThrow(); + }, 30_000); + + // ── .agentuity-build marker schema ── + + test('.agentuity-build marker has correct schema', async () => { + writePackageJson(testDir, { + name: 'test-marker', + version: '1.0.0', + scripts: { + build: 'echo "ok"', + start: 'node index.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const marker = JSON.parse( + readFileSync(join(buildResult.outputDir, '.agentuity-build'), 'utf-8') + ); + + expect(marker.version).toBe(1); + expect(typeof marker.framework).toBe('string'); + expect(typeof marker.runtime).toBe('string'); + expect(typeof marker.buildDate).toBe('string'); + expect(() => new Date(marker.buildDate).toISOString()).not.toThrow(); + }, 30_000); + + // ── Consistency across all output files ── + + test('framework name is consistent across all output files', async () => { + writePackageJson(testDir, { + name: 'test-consistency', + version: '1.0.0', + scripts: { + build: 'echo "built"', + start: 'node app.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const launch: LaunchMetadata = JSON.parse( + readFileSync(join(buildResult.outputDir, 'launch.json'), 'utf-8') + ); + const marker = JSON.parse( + readFileSync(join(buildResult.outputDir, '.agentuity-build'), 'utf-8') + ); + + // Framework name must match across files + expect(launch.framework.name).toBe(marker.framework); + expect(launch.framework.name).toBe(framework!.name); + + // Runtime must match + expect(launch.runtime.name).toBe(marker.runtime); + expect(launch.runtime.name).toBe(framework!.runtime); + }, 30_000); + + // ── Build failure propagation ── + + test('build failure from bad script propagates as error', async () => { + writePackageJson(testDir, { + name: 'test-fail', + version: '1.0.0', + scripts: { + build: 'exit 1', + start: 'node index.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + + await expect( + adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }) + ).rejects.toThrow(/Build failed/); + }, 30_000); + + // ── Static builds inject a file server ── + + test('build with no start script injects a static file server', async () => { + writePackageJson(testDir, { + name: 'test-static-inject', + version: '1.0.0', + scripts: { + build: 'mkdir -p dist && echo "

Hello

" > dist/index.html', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework!.startCommand).toBeUndefined(); + + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + // Adapter should inject a start command and the server script + expect(buildResult.startCommand).toBe('node _serve.js'); + expect(existsSync(join(buildResult.outputDir, '_serve.js'))).toBe(true); + }, 30_000); + + // ── Build duration is reasonable ── + + test('build result has non-zero duration', async () => { + writePackageJson(testDir, { + name: 'test-duration', + version: '1.0.0', + scripts: { + build: 'echo "done"', + start: 'node index.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + expect(buildResult.duration).toBeGreaterThan(0); + expect(buildResult.logs.length).toBeGreaterThan(0); + }, 30_000); +}); diff --git a/packages/cli/test/cmd/build/detect/framework-detection.test.ts b/packages/cli/test/cmd/build/detect/framework-detection.test.ts new file mode 100644 index 000000000..883bb4409 --- /dev/null +++ b/packages/cli/test/cmd/build/detect/framework-detection.test.ts @@ -0,0 +1,362 @@ +import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; +import { mkdirSync, writeFileSync, rmSync } from 'node:fs'; +import { join } from 'node:path'; +import { tmpdir } from 'node:os'; +import { detectFramework, detectFrameworkWithPackageJson } from '../../../../src/cmd/build/detect'; + +function createTestDir(): string { + const dir = join(tmpdir(), `detect-test-${Date.now()}-${Math.random().toString(36).slice(2)}`); + mkdirSync(dir, { recursive: true }); + return dir; +} + +function writePackageJson(dir: string, content: Record) { + writeFileSync(join(dir, 'package.json'), JSON.stringify(content, null, 2)); +} + +describe('Framework Detection', () => { + let testDir: string; + + beforeEach(() => { + testDir = createTestDir(); + }); + + afterEach(() => { + rmSync(testDir, { recursive: true, force: true }); + }); + + // ── No project ── + + test('returns null when no package.json exists', async () => { + const result = await detectFramework(testDir); + expect(result).toBeNull(); + }); + + test('returns null when package.json has no scripts or main', async () => { + writePackageJson(testDir, { name: 'empty-project', version: '1.0.0' }); + const result = await detectFramework(testDir); + expect(result).toBeNull(); + }); + + // ── Next.js ── + + describe('Next.js', () => { + test('detects next dependency', async () => { + writePackageJson(testDir, { + name: 'my-next-app', + dependencies: { next: '^15.3.0', react: '^19.0.0' }, + scripts: { build: 'next build', start: 'next start' }, + }); + + const result = await detectFramework(testDir); + expect(result).not.toBeNull(); + expect(result!.name).toBe('nextjs'); + expect(result!.runtime).toBe('node'); + }); + + test('uses package.json build script if available', async () => { + writePackageJson(testDir, { + name: 'my-next-app', + dependencies: { next: '^15.0.0' }, + scripts: { build: 'next build && do-something-else' }, + }); + + const result = await detectFramework(testDir); + expect(result!.buildCommand).toBe('next build && do-something-else'); + }); + }); + + // ── Nuxt ── + + describe('Nuxt', () => { + test('detects nuxt dependency', async () => { + writePackageJson(testDir, { + name: 'my-nuxt-app', + dependencies: { nuxt: '^3.10.0' }, + scripts: { build: 'nuxt build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('nuxt'); + expect(result!.runtime).toBe('node'); + }); + + test('detects nuxt3 dependency', async () => { + writePackageJson(testDir, { + name: 'my-nuxt-app', + dependencies: { nuxt3: '^3.0.0' }, + scripts: { build: 'nuxt build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('nuxt'); + }); + }); + + // ── SvelteKit ── + + describe('SvelteKit', () => { + test('detects @sveltejs/kit in package.json', async () => { + writePackageJson(testDir, { + name: 'my-svelte-app', + devDependencies: { '@sveltejs/kit': '^2.0.0', svelte: '^5.0.0' }, + scripts: { build: 'vite build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('sveltekit'); + }); + }); + + // ── Astro ── + + describe('Astro', () => { + test('detects astro dependency', async () => { + writePackageJson(testDir, { + name: 'my-astro-app', + dependencies: { astro: '^4.0.0' }, + scripts: { build: 'astro build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('astro'); + }); + }); + + // ── Remix ── + + describe('Remix', () => { + test('detects @remix-run/dev dependency', async () => { + writePackageJson(testDir, { + name: 'my-remix-app', + devDependencies: { '@remix-run/dev': '^2.0.0' }, + dependencies: { '@remix-run/node': '^2.0.0', '@remix-run/react': '^2.0.0' }, + scripts: { build: 'remix build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('remix'); + }); + + test('detects remix.config.js', async () => { + writePackageJson(testDir, { + name: 'my-remix-app', + dependencies: { '@remix-run/react': '^2.0.0' }, + scripts: { build: 'remix build' }, + }); + writeFileSync(join(testDir, 'remix.config.js'), 'module.exports = {};'); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('remix'); + }); + }); + + // ── Vite ── + + describe('Vite', () => { + test('detects vite dependency', async () => { + writePackageJson(testDir, { + name: 'my-vite-app', + devDependencies: { vite: '^5.0.0' }, + scripts: { build: 'vite build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('vite'); + }); + + test('has lower priority than specific frameworks', async () => { + // SvelteKit also uses vite but should be detected as SvelteKit + writePackageJson(testDir, { + name: 'my-svelte-app', + devDependencies: { '@sveltejs/kit': '^2.0.0', vite: '^5.0.0' }, + scripts: { build: 'vite build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('sveltekit'); // NOT 'vite' + }); + }); + + // ── React Router ── + + describe('React Router', () => { + test('detects react-router.config.ts', async () => { + writePackageJson(testDir, { + name: 'my-rr-app', + dependencies: { 'react-router': '^7.0.0' }, + scripts: { build: 'react-router build' }, + }); + writeFileSync(join(testDir, 'react-router.config.ts'), 'export default {};'); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('react-router'); + }); + }); + + // ── SolidStart ── + + describe('SolidStart', () => { + test('detects solid-js + @solidjs/start', async () => { + writePackageJson(testDir, { + name: 'my-solid-app', + dependencies: { 'solid-js': '^1.8.0', '@solidjs/start': '^1.0.0' }, + scripts: { build: 'vinxi build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('solidstart'); + }); + + test('does not detect with solid-js alone', async () => { + writePackageJson(testDir, { + name: 'my-solid-app', + dependencies: { 'solid-js': '^1.8.0' }, + scripts: { build: 'vite build' }, + }); + + const result = await detectFramework(testDir); + expect(result?.name).not.toBe('solidstart'); + }); + }); + + // ── TanStack Start ── + + describe('TanStack Start', () => { + test('detects @tanstack/router-plugin + nitro', async () => { + writePackageJson(testDir, { + name: 'my-tanstack-app', + dependencies: { '@tanstack/router-plugin': '^1.0.0', nitro: '^2.0.0' }, + scripts: { build: 'vite build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('tanstack-start'); + }); + }); + + // ── Generic ── + + describe('Generic fallback', () => { + test('detects project with build + start scripts', async () => { + writePackageJson(testDir, { + name: 'my-express-app', + scripts: { build: 'tsc', start: 'node dist/index.js' }, + dependencies: { express: '^4.0.0' }, + }); + + // Express has a detector in the database, but it requires matchContent in files. + // Without the actual source files, it falls through to generic. + const result = await detectFramework(testDir); + expect(result).not.toBeNull(); + expect(result!.confidence).toBe('low'); + }); + + test('detects static project with build but no start', async () => { + writePackageJson(testDir, { + name: 'my-static-site', + scripts: { build: 'eleventy' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('generic'); + }); + + test('detects project with main field', async () => { + writePackageJson(testDir, { + name: 'my-app', + main: 'index.js', + scripts: { build: 'tsc' }, + }); + writeFileSync(join(testDir, 'index.js'), 'console.log("hello")'); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('generic'); + }); + + test('uses bun runtime when engines.bun is set', async () => { + writePackageJson(testDir, { + name: 'my-bun-app', + scripts: { build: 'tsc', start: 'bun run index.ts' }, + engines: { bun: '>=1.0.0' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('generic'); + expect(result!.runtime).toBe('bun'); + }); + }); + + // ── detectFrameworkWithPackageJson ── + + describe('detectFrameworkWithPackageJson', () => { + test('returns both framework and packageJson', async () => { + writePackageJson(testDir, { + name: 'my-next-app', + version: '1.0.0', + dependencies: { next: '^15.0.0' }, + scripts: { build: 'next build' }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('nextjs'); + expect(packageJson).not.toBeNull(); + expect(packageJson!.name).toBe('my-next-app'); + expect(packageJson!.version).toBe('1.0.0'); + }); + + test('returns packageJson even when no framework detected', async () => { + writePackageJson(testDir, { name: 'empty', version: '0.0.1' }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).toBeNull(); + expect(packageJson).not.toBeNull(); + expect(packageJson!.name).toBe('empty'); + }); + + test('returns null packageJson when file missing', async () => { + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).toBeNull(); + expect(packageJson).toBeNull(); + }); + }); + + // ── Priority ordering ── + + describe('Priority ordering', () => { + test('Next.js > Vite when both match', async () => { + writePackageJson(testDir, { + name: 'next-vite', + dependencies: { next: '^15.0.0' }, + devDependencies: { vite: '^5.0.0' }, + scripts: { build: 'next build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('nextjs'); + }); + + test('SvelteKit > Vite when both match', async () => { + writePackageJson(testDir, { + name: 'svelte-app', + devDependencies: { '@sveltejs/kit': '^2.0.0', vite: '^5.0.0' }, + scripts: { build: 'vite build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('sveltekit'); + }); + + test('Remix > Vite when both match', async () => { + writePackageJson(testDir, { + name: 'remix-app', + devDependencies: { '@remix-run/dev': '^2.0.0', vite: '^5.0.0' }, + scripts: { build: 'remix vite:build' }, + }); + + const result = await detectFramework(testDir); + expect(result!.name).toBe('remix'); + }); + }); +}); diff --git a/packages/cli/test/cmd/build/detect/util.test.ts b/packages/cli/test/cmd/build/detect/util.test.ts new file mode 100644 index 000000000..ec48a988a --- /dev/null +++ b/packages/cli/test/cmd/build/detect/util.test.ts @@ -0,0 +1,257 @@ +import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; +import { mkdirSync, writeFileSync, rmSync } from 'node:fs'; +import { join } from 'node:path'; +import { tmpdir } from 'node:os'; +import { + findFile, + hasDependency, + getDependencyVersion, + hasDependencyMatching, + detectPackageManager, + getRunCommand, + getExecCommand, + readPackageJson, +} from '../../../../src/cmd/build/detect/util'; +import type { PackageJsonData } from '../../../../src/cmd/build/detect/types'; + +function createTestDir(): string { + const dir = join( + tmpdir(), + `detect-util-test-${Date.now()}-${Math.random().toString(36).slice(2)}` + ); + mkdirSync(dir, { recursive: true }); + return dir; +} + +describe('Detection Utilities', () => { + let testDir: string; + + beforeEach(() => { + testDir = createTestDir(); + }); + + afterEach(() => { + rmSync(testDir, { recursive: true, force: true }); + }); + + // ── findFile ── + + describe('findFile', () => { + test('finds first matching file', async () => { + writeFileSync(join(testDir, 'b.txt'), 'content'); + const result = await findFile(testDir, ['a.txt', 'b.txt', 'c.txt']); + expect(result).toBe('b.txt'); + }); + + test('returns first match when multiple exist', async () => { + writeFileSync(join(testDir, 'a.txt'), 'a'); + writeFileSync(join(testDir, 'b.txt'), 'b'); + const result = await findFile(testDir, ['a.txt', 'b.txt']); + expect(result).toBe('a.txt'); + }); + + test('returns null when no files match', async () => { + const result = await findFile(testDir, ['nonexistent.txt']); + expect(result).toBeNull(); + }); + + test('returns null for empty names array', async () => { + const result = await findFile(testDir, []); + expect(result).toBeNull(); + }); + }); + + // ── hasDependency ── + + describe('hasDependency', () => { + const pkg: PackageJsonData = { + dependencies: { react: '^19.0.0', next: '^15.0.0' }, + devDependencies: { vite: '^5.0.0', typescript: '^5.0.0' }, + }; + + test('finds in dependencies', () => { + expect(hasDependency(pkg, 'react')).toBe(true); + expect(hasDependency(pkg, 'next')).toBe(true); + }); + + test('finds in devDependencies', () => { + expect(hasDependency(pkg, 'vite')).toBe(true); + expect(hasDependency(pkg, 'typescript')).toBe(true); + }); + + test('returns false for missing dependency', () => { + expect(hasDependency(pkg, 'express')).toBe(false); + }); + + test('handles undefined dependencies', () => { + expect(hasDependency({}, 'react')).toBe(false); + }); + }); + + // ── getDependencyVersion ── + + describe('getDependencyVersion', () => { + const pkg: PackageJsonData = { + dependencies: { next: '^15.3.0' }, + devDependencies: { vite: '~5.4.1' }, + }; + + test('gets version from dependencies', () => { + expect(getDependencyVersion(pkg, 'next')).toBe('^15.3.0'); + }); + + test('gets version from devDependencies', () => { + expect(getDependencyVersion(pkg, 'vite')).toBe('~5.4.1'); + }); + + test('returns null for missing dependency', () => { + expect(getDependencyVersion(pkg, 'express')).toBeNull(); + }); + + test('prefers dependencies over devDependencies', () => { + const dual: PackageJsonData = { + dependencies: { react: '^19.0.0' }, + devDependencies: { react: '^18.0.0' }, + }; + expect(getDependencyVersion(dual, 'react')).toBe('^19.0.0'); + }); + }); + + // ── hasDependencyMatching ── + + describe('hasDependencyMatching', () => { + const pkg: PackageJsonData = { + dependencies: { '@remix-run/node': '^2.0.0', react: '^19.0.0' }, + devDependencies: { '@remix-run/dev': '^2.0.0' }, + }; + + test('matches regex pattern in dependencies', () => { + expect(hasDependencyMatching(pkg, /^@remix-run\//)).toBe(true); + }); + + test('matches regex pattern in devDependencies', () => { + expect(hasDependencyMatching(pkg, /^@remix-run\/dev$/)).toBe(true); + }); + + test('returns false when no match', () => { + expect(hasDependencyMatching(pkg, /^@sveltejs\//)).toBe(false); + }); + + test('handles empty deps', () => { + expect(hasDependencyMatching({}, /^@remix-run\//)).toBe(false); + }); + }); + + // ── detectPackageManager ── + + describe('detectPackageManager', () => { + test('detects bun from bun.lockb', async () => { + writeFileSync(join(testDir, 'bun.lockb'), ''); + expect(await detectPackageManager(testDir)).toBe('bun'); + }); + + test('detects bun from bun.lock', async () => { + writeFileSync(join(testDir, 'bun.lock'), ''); + expect(await detectPackageManager(testDir)).toBe('bun'); + }); + + test('detects pnpm from pnpm-lock.yaml', async () => { + writeFileSync(join(testDir, 'pnpm-lock.yaml'), ''); + expect(await detectPackageManager(testDir)).toBe('pnpm'); + }); + + test('detects yarn from yarn.lock', async () => { + writeFileSync(join(testDir, 'yarn.lock'), ''); + expect(await detectPackageManager(testDir)).toBe('yarn'); + }); + + test('detects npm from package-lock.json', async () => { + writeFileSync(join(testDir, 'package-lock.json'), '{}'); + expect(await detectPackageManager(testDir)).toBe('npm'); + }); + + test('defaults to bun when no lockfile found', async () => { + expect(await detectPackageManager(testDir)).toBe('bun'); + }); + + test('bun.lockb takes priority over package-lock.json', async () => { + writeFileSync(join(testDir, 'bun.lockb'), ''); + writeFileSync(join(testDir, 'package-lock.json'), '{}'); + expect(await detectPackageManager(testDir)).toBe('bun'); + }); + }); + + // ── getRunCommand ── + + describe('getRunCommand', () => { + test('bun', () => expect(getRunCommand('bun')).toBe('bun run')); + test('npm', () => expect(getRunCommand('npm')).toBe('npm run')); + test('pnpm', () => expect(getRunCommand('pnpm')).toBe('pnpm run')); + test('yarn', () => expect(getRunCommand('yarn')).toBe('yarn')); + }); + + // ── getExecCommand ── + + describe('getExecCommand', () => { + test('bun', () => expect(getExecCommand('bun')).toBe('bunx')); + test('npm', () => expect(getExecCommand('npm')).toBe('npx')); + test('pnpm', () => expect(getExecCommand('pnpm')).toBe('pnpm exec')); + test('yarn', () => expect(getExecCommand('yarn')).toBe('yarn dlx')); + }); + + // ── readPackageJson ── + + describe('readPackageJson', () => { + test('reads and parses valid package.json', async () => { + writeFileSync( + join(testDir, 'package.json'), + JSON.stringify({ name: 'test-pkg', version: '1.0.0', type: 'module' }) + ); + + const result = await readPackageJson(testDir); + expect(result).not.toBeNull(); + expect(result!.name).toBe('test-pkg'); + expect(result!.version).toBe('1.0.0'); + expect(result!.type).toBe('module'); + }); + + test('returns null when file does not exist', async () => { + const result = await readPackageJson(testDir); + expect(result).toBeNull(); + }); + + test('returns null for invalid JSON', async () => { + writeFileSync(join(testDir, 'package.json'), 'not valid json {{{'); + const result = await readPackageJson(testDir); + expect(result).toBeNull(); + }); + + test('reads scripts field', async () => { + writeFileSync( + join(testDir, 'package.json'), + JSON.stringify({ + name: 'test', + scripts: { build: 'tsc', start: 'node dist/index.js' }, + }) + ); + + const result = await readPackageJson(testDir); + expect(result!.scripts!.build).toBe('tsc'); + expect(result!.scripts!.start).toBe('node dist/index.js'); + }); + + test('reads engines field', async () => { + writeFileSync( + join(testDir, 'package.json'), + JSON.stringify({ + name: 'test', + engines: { node: '>=18', bun: '>=1.0.0' }, + }) + ); + + const result = await readPackageJson(testDir); + expect(result!.engines!.node).toBe('>=18'); + expect(result!.engines!.bun).toBe('>=1.0.0'); + }); + }); +}); diff --git a/packages/cli/test/cmd/build/entry-generator.test.ts b/packages/cli/test/cmd/build/entry-generator.test.ts deleted file mode 100644 index 2db9dae33..000000000 --- a/packages/cli/test/cmd/build/entry-generator.test.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, rmSync, writeFileSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { createMockLogger } from '@agentuity/test-utils'; -import { generateEntryFile } from '../../../src/cmd/build/entry-generator'; - -/** - * Tests for entry-generator.ts - * - * Regression test for GitHub issue #324: - * app.generated.ts diverges between bun run dev and bun run build - * - * The generated src/generated/app.ts should be identical regardless of - * whether mode is 'dev' or 'prod'. Runtime behavior differs based on - * isDevelopment() checks, not based on code generation. - * - * @see https://github.com/agentuity/sdk/issues/324 - */ -describe('entry-generator', () => { - let testDir: string; - let srcDir: string; - let apiDir: string; - let generatedDir: string; - const logger = createMockLogger(); - - beforeEach(() => { - testDir = join(tmpdir(), `entry-generator-test-${Date.now()}-${Math.random()}`); - srcDir = join(testDir, 'src'); - apiDir = join(srcDir, 'api'); - generatedDir = join(srcDir, 'generated'); - mkdirSync(apiDir, { recursive: true }); - mkdirSync(generatedDir, { recursive: true }); - }); - - afterEach(() => { - if (testDir) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - test('generates identical app.ts for dev and prod modes (issue #324)', async () => { - const routeCode = ` -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/health', async (c) => { - return c.json({ status: 'ok' }); -}); - -export default router; -`; - writeFileSync(join(apiDir, 'index.ts'), routeCode); - - const baseOptions = { - rootDir: testDir, - projectId: 'test-project', - deploymentId: 'test-deployment', - logger, - workbench: undefined, - vitePort: 5173, - }; - - await generateEntryFile({ ...baseOptions, mode: 'dev' }); - const devApp = await Bun.file(join(generatedDir, 'app.ts')).text(); - - await generateEntryFile({ ...baseOptions, mode: 'prod' }); - const prodApp = await Bun.file(join(generatedDir, 'app.ts')).text(); - - expect(prodApp).toBe(devApp); - }); - - test('generated app.ts contains asset proxy routes', async () => { - const routeCode = ` -import { createRouter } from '@agentuity/runtime'; - -const router = createRouter(); - -router.get('/test', async (c) => c.text('test')); - -export default router; -`; - writeFileSync(join(apiDir, 'index.ts'), routeCode); - - await generateEntryFile({ - rootDir: testDir, - projectId: 'test-project', - deploymentId: 'test-deployment', - logger, - mode: 'prod', - workbench: undefined, - }); - - const appContent = await Bun.file(join(generatedDir, 'app.ts')).text(); - - expect(appContent).toContain('// Asset proxy routes - Development mode only'); - expect(appContent).toContain('if (isDevelopment() && process.env.VITE_PORT)'); - expect(appContent).toContain('proxyToVite'); - }); - - test('generated app.ts supports user-provided router via getUserRouter()', async () => { - // Use subdirectories to avoid route conflicts (both would otherwise mount at /api) - const usersDir = join(apiDir, 'users'); - const authDir = join(apiDir, 'auth'); - mkdirSync(usersDir, { recursive: true }); - mkdirSync(authDir, { recursive: true }); - - writeFileSync( - join(usersDir, 'route.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -router.get('/', async (c) => c.json({ users: [] })); -export default router;` - ); - writeFileSync( - join(authDir, 'route.ts'), - `import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -router.post('/login', async (c) => c.json({ ok: true })); -export default router;` - ); - - await generateEntryFile({ - rootDir: testDir, - projectId: 'test-project', - deploymentId: 'test-deployment', - logger, - mode: 'prod', - workbench: undefined, - }); - - const appContent = await Bun.file(join(generatedDir, 'app.ts')).text(); - - // Should import getUserRouter - expect(appContent).toContain('getUserRouter'); - - // Should check for user mounts at runtime - expect(appContent).toContain('const __userMounts = getUserRouter()'); - - // Should iterate mounts, apply middleware per prefix, and mount routers - expect(appContent).toContain('for (const mount of __userMounts)'); - expect(appContent).toContain('app.use(prefix, createCorsMiddleware())'); - expect(appContent).toContain('app.use(prefix, createOtelMiddleware())'); - expect(appContent).toContain("app.use(prefix, createAgentMiddleware(''))"); - expect(appContent).toContain('app.route(mount.path, mount.router)'); - }); - - test('generated app.ts contains runtime mode detection', async () => { - writeFileSync(join(apiDir, 'index.ts'), 'export default {};'); - - await generateEntryFile({ - rootDir: testDir, - projectId: 'test-project', - deploymentId: 'test-deployment', - logger, - mode: 'prod', - workbench: undefined, - }); - - const appContent = await Bun.file(join(generatedDir, 'app.ts')).text(); - - expect(appContent).toContain('// Runtime mode detection helper'); - expect(appContent).toContain('const isDevelopment = ()'); - }); -}); diff --git a/packages/cli/test/cmd/build/lifecycle-generator.test.ts b/packages/cli/test/cmd/build/lifecycle-generator.test.ts deleted file mode 100644 index 6de86d20d..000000000 --- a/packages/cli/test/cmd/build/lifecycle-generator.test.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, rmSync, existsSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { generateLifecycleTypes } from '../../../src/cmd/build/vite/lifecycle-generator'; -import { createLogger } from '@agentuity/server'; - -describe('lifecycle-generator', () => { - let testDir: string; - let rootDir: string; - let srcDir: string; - let generatedDir: string; - const logger = createLogger('info'); - - beforeEach(() => { - testDir = join(tmpdir(), `lifecycle-gen-test-${Date.now()}-${Math.random()}`); - rootDir = testDir; - srcDir = join(testDir, 'src'); - generatedDir = join(srcDir, 'generated'); - mkdirSync(srcDir, { recursive: true }); - - // Create fake node_modules/@agentuity/runtime for path resolution - const runtimePkgDir = join(rootDir, 'node_modules', '@agentuity', 'runtime'); - const runtimeDir = join(runtimePkgDir, 'src'); - mkdirSync(runtimeDir, { recursive: true }); - // Create minimal package.json and index.ts - Bun.write(join(runtimePkgDir, 'package.json'), '{"name":"@agentuity/runtime"}'); - const indexPath = join(runtimeDir, 'index.ts'); - Bun.write(indexPath, 'export function createRouter() {}'); - }); - - afterEach(() => { - if (testDir) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - describe('setup inside createApp', () => { - test('should generate types for inline arrow function with return', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -const app = await createApp({ - setup: () => { - return { foo: 'bar', count: 42 }; - }, -}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - expect(existsSync(join(generatedDir, 'state.ts'))).toBe(true); - expect(existsSync(join(generatedDir, 'router.ts'))).toBe(true); - - const typesContent = await Bun.file(join(generatedDir, 'state.ts')).text(); - expect(typesContent).toContain('foo: string'); - expect(typesContent).toContain('count: number'); - }); - - test('should generate types for inline arrow function with expression body', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -const app = await createApp({ - setup: () => ({ database: null, cache: true }), -}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - - const typesContent = await Bun.file(join(generatedDir, 'state.ts')).text(); - expect(typesContent).toContain('database:'); - expect(typesContent).toContain('cache: boolean'); - }); - - test('should generate types for function expression', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -const app = await createApp({ - setup: function() { - const db = { connected: true }; - return db; - }, -}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - }); - - test('should generate types for async setup', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -const app = await createApp({ - setup: async () => { - return { ready: true }; - }, -}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - - const typesContent = await Bun.file(join(generatedDir, 'state.ts')).text(); - expect(typesContent).toContain('ready: boolean'); - }); - }); - - describe('exported setup function', () => { - test('should generate types for exported setup function', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -export function setup() { - return { - database: 'connected', - port: 3000, - }; -} - -const app = await createApp({}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - - const typesContent = await Bun.file(join(generatedDir, 'state.ts')).text(); - expect(typesContent).toContain('database: string'); - expect(typesContent).toContain('port: number'); - }); - - test('should generate types for exported async setup', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -export async function setup() { - return { - initialized: true, - }; -} - -const app = await createApp({}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - }); - }); - - describe('edge cases', () => { - test('should handle variable reference in expression body', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -const state = { connected: true, port: 3000 }; - -const app = await createApp({ - setup: () => state, -}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(true); - - const typesContent = await Bun.file(join(generatedDir, 'state.ts')).text(); - expect(typesContent).toContain('connected: boolean'); - expect(typesContent).toContain('port: number'); - }); - }); - - describe('no setup function', () => { - test('should return false when no setup exists', async () => { - const appContent = `import { createApp } from '@agentuity/runtime'; - -const app = await createApp({ - services: {}, -}); - -export default app;`; - - const appPath = join(rootDir, 'app.ts'); - await Bun.write(appPath, appContent); - - const result = await generateLifecycleTypes(rootDir, srcDir, logger); - - expect(result).toBe(false); - expect(existsSync(join(generatedDir, 'state.ts'))).toBe(false); - }); - }); -}); diff --git a/packages/cli/test/cmd/build/package/launch.test.ts b/packages/cli/test/cmd/build/package/launch.test.ts new file mode 100644 index 000000000..b56b7dca5 --- /dev/null +++ b/packages/cli/test/cmd/build/package/launch.test.ts @@ -0,0 +1,388 @@ +import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; +import { mkdirSync, rmSync, readFileSync, existsSync } from 'node:fs'; +import { join } from 'node:path'; +import { tmpdir } from 'node:os'; +import { + generateLaunchMetadata, + writeLaunchMetadata, +} from '../../../../src/cmd/build/package/launch'; +import { packageBuildOutput } from '../../../../src/cmd/build/package'; +import type { DetectedFramework } from '../../../../src/cmd/build/detect/types'; +import type { BuildResult } from '../../../../src/cmd/build/adapters/types'; + +function createTestDir(): string { + const dir = join(tmpdir(), `launch-test-${Date.now()}-${Math.random().toString(36).slice(2)}`); + mkdirSync(dir, { recursive: true }); + return dir; +} + +describe('Launch Metadata', () => { + let testDir: string; + + beforeEach(() => { + testDir = createTestDir(); + }); + + afterEach(() => { + rmSync(testDir, { recursive: true, force: true }); + }); + + // ── generateLaunchMetadata ── + + describe('generateLaunchMetadata', () => { + test('generates web process from server framework', () => { + const framework: DetectedFramework = { + name: 'nextjs', + version: '15.3.0', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'next build', + buildOutput: '.next', + startCommand: 'node .next/standalone/server.js', + port: 3000, + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: '/tmp/output', + startCommand: 'node server.js', + port: 3000, + duration: 5000, + logs: [], + }; + + const metadata = generateLaunchMetadata(framework, buildResult); + + expect(metadata.processes).toHaveLength(1); + expect(metadata.processes[0].type).toBe('web'); + expect(metadata.processes[0].command).toBe('node server.js'); + expect(metadata.processes[0].default).toBe(true); + expect(metadata.framework.name).toBe('nextjs'); + expect(metadata.framework.version).toBe('15.3.0'); + expect(metadata.runtime.name).toBe('node'); + expect(metadata.runtime.port).toBe(3000); + }); + + test('uses buildResult.startCommand over framework.startCommand', () => { + const framework: DetectedFramework = { + name: 'generic', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'tsc', + buildOutput: 'dist', + startCommand: 'node dist/index.js', + confidence: 'low', + }; + + const buildResult: BuildResult = { + outputDir: '/tmp/output', + startCommand: 'node dist/server.js', // Different from framework + duration: 1000, + logs: [], + }; + + const metadata = generateLaunchMetadata(framework, buildResult); + expect(metadata.processes[0].command).toBe('node dist/server.js'); + }); + + test('falls back to framework.startCommand when buildResult has none', () => { + const framework: DetectedFramework = { + name: 'nuxt', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'nuxt build', + buildOutput: '.output', + startCommand: 'node .output/server/index.mjs', + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: '/tmp/output', + duration: 3000, + logs: [], + }; + + const metadata = generateLaunchMetadata(framework, buildResult); + expect(metadata.processes[0].command).toBe('node .output/server/index.mjs'); + }); + + test('no processes for static-only build with no start command', () => { + const framework: DetectedFramework = { + name: 'vite', + runtime: 'node', + packageManager: 'bun', + buildCommand: 'vite build', + buildOutput: 'dist', + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: '/tmp/output', + duration: 2000, + logs: [], + }; + + const metadata = generateLaunchMetadata(framework, buildResult); + expect(metadata.processes).toHaveLength(0); + }); + + test('includes build duration', () => { + const framework: DetectedFramework = { + name: 'nextjs', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'next build', + buildOutput: '.next', + startCommand: 'node server.js', + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: '/tmp/output', + startCommand: 'node server.js', + duration: 12345, + logs: [], + }; + + const metadata = generateLaunchMetadata(framework, buildResult); + expect(metadata.build.duration).toBe(12345); + expect(metadata.build.date).toBeTruthy(); + }); + + test('uses buildResult.port over framework.port', () => { + const framework: DetectedFramework = { + name: 'astro', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'astro build', + buildOutput: 'dist', + startCommand: 'node dist/server/entry.mjs', + port: 4321, + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: '/tmp/output', + startCommand: 'node dist/server/entry.mjs', + port: 8080, + duration: 3000, + logs: [], + }; + + const metadata = generateLaunchMetadata(framework, buildResult); + expect(metadata.runtime.port).toBe(8080); + }); + }); + + // ── writeLaunchMetadata ── + + describe('writeLaunchMetadata', () => { + test('writes launch.json', () => { + const metadata = generateLaunchMetadata( + { + name: 'nextjs', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'next build', + buildOutput: '.next', + startCommand: 'node server.js', + confidence: 'high', + }, + { + outputDir: testDir, + startCommand: 'node server.js', + duration: 1000, + logs: [], + } + ); + + writeLaunchMetadata(testDir, metadata); + + const launchPath = join(testDir, 'launch.json'); + expect(existsSync(launchPath)).toBe(true); + + const parsed = JSON.parse(readFileSync(launchPath, 'utf-8')); + expect(parsed.processes[0].type).toBe('web'); + expect(parsed.processes[0].command).toBe('node server.js'); + expect(parsed.framework.name).toBe('nextjs'); + }); + + test('writes Procfile', () => { + const metadata = generateLaunchMetadata( + { + name: 'nuxt', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'nuxt build', + buildOutput: '.output', + startCommand: 'node .output/server/index.mjs', + confidence: 'high', + }, + { + outputDir: testDir, + startCommand: 'node .output/server/index.mjs', + duration: 2000, + logs: [], + } + ); + + writeLaunchMetadata(testDir, metadata); + + const procfilePath = join(testDir, 'Procfile'); + expect(existsSync(procfilePath)).toBe(true); + + const content = readFileSync(procfilePath, 'utf-8'); + expect(content).toBe('web: node .output/server/index.mjs\n'); + }); + + test('creates output directory if missing', () => { + const subDir = join(testDir, 'nested', 'dir'); + const metadata = generateLaunchMetadata( + { + name: 'generic', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'tsc', + buildOutput: 'dist', + startCommand: 'node dist/index.js', + confidence: 'low', + }, + { + outputDir: subDir, + startCommand: 'node dist/index.js', + duration: 500, + logs: [], + } + ); + + writeLaunchMetadata(subDir, metadata); + expect(existsSync(join(subDir, 'launch.json'))).toBe(true); + }); + + test('handles multiple processes in Procfile', () => { + const metadata = { + processes: [ + { type: 'web', command: 'node server.js', default: true }, + { type: 'worker', command: 'node worker.js', default: false }, + ], + framework: { name: 'generic' }, + runtime: { name: 'node', port: 3000 }, + build: { date: new Date().toISOString(), duration: 1000 }, + }; + + writeLaunchMetadata(testDir, metadata); + + const content = readFileSync(join(testDir, 'Procfile'), 'utf-8'); + expect(content).toContain('web: node server.js'); + expect(content).toContain('worker: node worker.js'); + }); + }); + + // ── packageBuildOutput ── + + describe('packageBuildOutput', () => { + test('writes .agentuity-build marker file', () => { + const framework: DetectedFramework = { + name: 'nextjs', + version: '15.3.0', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'next build', + buildOutput: '.next', + startCommand: 'node server.js', + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: testDir, + startCommand: 'node server.js', + duration: 5000, + logs: [], + }; + + packageBuildOutput(framework, buildResult, testDir); + + const markerPath = join(testDir, '.agentuity-build'); + expect(existsSync(markerPath)).toBe(true); + + const marker = JSON.parse(readFileSync(markerPath, 'utf-8')); + expect(marker.version).toBe(1); + expect(marker.framework).toBe('nextjs'); + expect(marker.runtime).toBe('node'); + }); + + test('returns hasStaticAssets when staticDir exists', () => { + const staticDir = join(testDir, 'static'); + mkdirSync(staticDir, { recursive: true }); + + const framework: DetectedFramework = { + name: 'nextjs', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'next build', + buildOutput: '.next', + startCommand: 'node server.js', + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: testDir, + startCommand: 'node server.js', + staticDir, + duration: 3000, + logs: [], + }; + + const result = packageBuildOutput(framework, buildResult, testDir); + expect(result.hasStaticAssets).toBe(true); + expect(result.staticDir).toBe(staticDir); + }); + + test('returns hasStaticAssets false when no static dir', () => { + const framework: DetectedFramework = { + name: 'generic', + runtime: 'node', + packageManager: 'npm', + buildCommand: 'tsc', + buildOutput: 'dist', + startCommand: 'node dist/index.js', + confidence: 'low', + }; + + const buildResult: BuildResult = { + outputDir: testDir, + startCommand: 'node dist/index.js', + duration: 1000, + logs: [], + }; + + const result = packageBuildOutput(framework, buildResult, testDir); + expect(result.hasStaticAssets).toBe(false); + }); + + test('writes all three output files', () => { + const framework: DetectedFramework = { + name: 'sveltekit', + runtime: 'node', + packageManager: 'pnpm', + buildCommand: 'vite build', + buildOutput: 'build', + startCommand: 'node build/index.js', + confidence: 'high', + }; + + const buildResult: BuildResult = { + outputDir: testDir, + startCommand: 'node build/index.js', + duration: 4000, + logs: [], + }; + + packageBuildOutput(framework, buildResult, testDir); + + expect(existsSync(join(testDir, 'launch.json'))).toBe(true); + expect(existsSync(join(testDir, 'Procfile'))).toBe(true); + expect(existsSync(join(testDir, '.agentuity-build'))).toBe(true); + }); + }); +}); diff --git a/packages/cli/test/cmd/build/static-assets.test.ts b/packages/cli/test/cmd/build/static-assets.test.ts new file mode 100644 index 000000000..7aedcfc60 --- /dev/null +++ b/packages/cli/test/cmd/build/static-assets.test.ts @@ -0,0 +1,498 @@ +/** + * Static Asset CDN Upload Tests + * + * Tests that the detect → adapter → deploy-metadata pipeline correctly + * enumerates static assets for CDN upload across different framework types: + * + * 1. Pure static sites (staticDir = outputDirectory) enumerate all assets + * 2. SSR frameworks with separate staticDir enumerate only the static subdir + * 3. Frameworks with staticDir outside buildOutput get assets copied in + * 4. Generic fallback projects without staticDir produce no CDN assets + * 5. Asset metadata (content-type, kind, gzip) is correct + */ + +import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; +import { mkdirSync, writeFileSync, rmSync, existsSync } from 'node:fs'; +import { join, resolve } from 'node:path'; +import { tmpdir } from 'node:os'; +import { detectFrameworkWithPackageJson } from '../../../src/cmd/build/detect'; +import { getAdapter } from '../../../src/cmd/build/adapters'; +import { packageBuildOutput } from '../../../src/cmd/build/package'; +import { generateDeployMetadata } from '../../../src/deploy-metadata'; + +// ── Helpers ── + +function createTestDir(): string { + const dir = join(tmpdir(), `static-assets-${Date.now()}-${Math.random().toString(36).slice(2)}`); + mkdirSync(dir, { recursive: true }); + return dir; +} + +function writePackageJson(dir: string, content: Record) { + writeFileSync(join(dir, 'package.json'), JSON.stringify(content, null, 2)); +} + +const logger = { + trace: () => {}, + debug: () => {}, + info: () => {}, + warn: () => {}, + error: () => {}, + fatal: (() => { + throw new Error('fatal'); + }) as never, + child: () => logger, +}; + +// ── Tests ── + +describe('Static Asset CDN Upload', () => { + let testDir: string; + let outputDir: string; + + beforeEach(() => { + testDir = createTestDir(); + outputDir = join(testDir, '.agentuity'); + }); + + afterEach(() => { + rmSync(testDir, { recursive: true, force: true }); + }); + + // ── Pure static site (Vite) ── + + test('Vite project: entire output dir is static, all assets enumerated for CDN', async () => { + // Simulate a Vite project + writePackageJson(testDir, { + name: 'test-vite-static', + version: '1.0.0', + scripts: { + build: [ + 'mkdir -p dist/assets', + 'echo "" > dist/index.html', + 'echo "body{color:red}" > dist/assets/style-abc123.css', + 'echo "console.log(1)" > dist/assets/main-abc123.js', + 'echo "PNG" > dist/assets/logo.png', + ].join(' && '), + }, + devDependencies: { + vite: '^6.0.0', + }, + }); + + // Detect — should pick up Vite + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('vite'); + // For Vite, staticDir should equal buildOutput (entire output is static) + expect(framework!.staticDir).toBe('dist'); + + // Build + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + // Build should set staticDir + expect(buildResult.staticDir).toBeDefined(); + expect(existsSync(buildResult.staticDir!)).toBe(true); + + // Package + const packageResult = packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // Generate deploy metadata (non-Agentuity path) + const metadata = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: testDir, + projectId: 'test-project', + orgId: 'test-org', + region: 'us-east-1', + deploymentId: 'test-deployment', + logger, + }); + + // Assets should be populated + expect(metadata.assets.length).toBeGreaterThan(0); + + // Verify specific assets are found + const filenames = metadata.assets.map((a) => a.filename); + expect(filenames.some((f) => f.includes('index.html'))).toBe(true); + expect(filenames.some((f) => f.includes('style-abc123.css'))).toBe(true); + expect(filenames.some((f) => f.includes('main-abc123.js'))).toBe(true); + expect(filenames.some((f) => f.includes('logo.png'))).toBe(true); + + // Verify content types + const cssAsset = metadata.assets.find((a) => a.filename.includes('.css')); + expect(cssAsset?.contentType).toBe('text/css'); + expect(cssAsset?.kind).toBe('stylesheet'); + expect(cssAsset?.contentEncoding).toBe('gzip'); // text/css is compressible + + const jsAsset = metadata.assets.find((a) => a.filename.endsWith('.js')); + expect(jsAsset?.contentType).toBe('application/javascript'); + expect(jsAsset?.kind).toBe('script'); + + const pngAsset = metadata.assets.find((a) => a.filename.includes('.png')); + expect(pngAsset?.contentType).toBe('image/png'); + expect(pngAsset?.kind).toBe('image'); + expect(pngAsset?.contentEncoding).toBeUndefined(); // images are not gzipped + }, 30_000); + + // ── SSR framework with separate static dir (simulated) ── + + test('SSR framework: staticDir subdirectory inside buildOutput', async () => { + // Simulate a framework where buildOutput='build' and staticDir='build/client' + writePackageJson(testDir, { + name: 'test-ssr-static', + version: '1.0.0', + scripts: { + build: [ + 'mkdir -p build/client/assets', + 'mkdir -p build/server', + 'echo "console.log("server")" > build/server/index.js', + 'echo "" > build/client/index.html', + 'echo "body{}" > build/client/assets/app.css', + 'echo "app()" > build/client/assets/app.js', + ].join(' && '), + start: 'node build/server/index.js', + }, + }); + + // Detect — generic fallback + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + + // Manually set staticDir to simulate what a framework definition would do + // (generic detector doesn't set staticDir, but real framework defs like react-router do) + framework!.staticDir = 'build/client'; + framework!.buildOutput = 'build'; + + // Build + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + expect(buildResult.staticDir).toBeDefined(); + + // Package + const packageResult = packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // Generate deploy metadata + const metadata = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: testDir, + projectId: 'test-project', + orgId: 'test-org', + region: 'us-east-1', + deploymentId: 'test-deployment', + logger, + }); + + // Only client assets should be enumerated (not server code) + expect(metadata.assets.length).toBeGreaterThan(0); + + const filenames = metadata.assets.map((a) => a.filename); + expect(filenames.some((f) => f.includes('index.html'))).toBe(true); + expect(filenames.some((f) => f.includes('app.css'))).toBe(true); + expect(filenames.some((f) => f.includes('app.js'))).toBe(true); + + // Server files should NOT be in the asset list + expect(filenames.some((f) => f.includes('server'))).toBe(false); + }, 30_000); + + // ── SSR framework with staticDir outside buildOutput ── + + test('SSR framework: staticDir outside buildOutput gets copied', async () => { + // Simulate a Nuxt-like framework: buildOutput='dist', staticDir='.output/public' + writePackageJson(testDir, { + name: 'test-nuxt-static', + version: '1.0.0', + scripts: { + build: [ + 'mkdir -p dist', + 'echo "{}" > dist/nitro.json', + 'mkdir -p .output/public/_nuxt', + 'echo "" > .output/public/index.html', + 'echo "body{}" > .output/public/_nuxt/entry.css', + 'echo "app()" > .output/public/_nuxt/entry.js', + ].join(' && '), + start: 'node dist/server.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + + // Simulate Nuxt framework definition + framework!.staticDir = '.output/public'; + framework!.buildOutput = 'dist'; + + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + // Static assets should have been copied into the output dir + expect(buildResult.staticDir).toBeDefined(); + expect(existsSync(buildResult.staticDir!)).toBe(true); + + // The copied static dir should be inside the output + expect(buildResult.staticDir!.startsWith(resolve(outputDir))).toBe(true); + + // Package + const packageResult = packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + // Generate deploy metadata + const metadata = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: testDir, + projectId: 'test-project', + orgId: 'test-org', + region: 'us-east-1', + deploymentId: 'test-deployment', + logger, + }); + + expect(metadata.assets.length).toBeGreaterThan(0); + + const filenames = metadata.assets.map((a) => a.filename); + expect(filenames.some((f) => f.includes('index.html'))).toBe(true); + expect(filenames.some((f) => f.includes('entry.css'))).toBe(true); + expect(filenames.some((f) => f.includes('entry.js'))).toBe(true); + }, 30_000); + + // ── No staticDir → no CDN assets ── + + test('generic project without staticDir produces no CDN assets', async () => { + writePackageJson(testDir, { + name: 'test-no-static', + version: '1.0.0', + scripts: { + build: 'mkdir -p dist && echo "console.log(42)" > dist/index.js', + start: 'node dist/index.js', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('generic'); + // Generic detector does not set staticDir + expect(framework!.staticDir).toBeUndefined(); + + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + // No static dir in result + expect(buildResult.staticDir).toBeUndefined(); + + const packageResult = packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const metadata = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: testDir, + projectId: 'test-project', + orgId: 'test-org', + region: 'us-east-1', + deploymentId: 'test-deployment', + logger, + }); + + // No assets for CDN + expect(metadata.assets).toEqual([]); + }, 30_000); + + // ── Asset metadata correctness ── + + test('asset metadata has correct content types and compression flags', async () => { + writePackageJson(testDir, { + name: 'test-asset-metadata', + version: '1.0.0', + scripts: { + build: [ + 'mkdir -p dist/assets', + 'echo "html" > dist/index.html', + 'echo "js" > dist/assets/app.js', + 'echo "css" > dist/assets/style.css', + 'echo "svg" > dist/assets/icon.svg', + 'echo "json" > dist/data.json', + 'echo "font" > dist/assets/font.woff2', + 'echo "img" > dist/assets/photo.jpg', + ].join(' && '), + }, + devDependencies: { + vite: '^6.0.0', + }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + const packageResult = packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const metadata = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: testDir, + projectId: 'test-project', + orgId: 'test-org', + region: 'us-east-1', + deploymentId: 'test-deployment', + logger, + }); + + const byExt = (ext: string) => metadata.assets.find((a) => a.filename.endsWith(ext)); + + // HTML + const html = byExt('.html'); + expect(html).toBeDefined(); + expect(html!.contentType).toBe('text/html'); + expect(html!.contentEncoding).toBe('gzip'); // text is compressible + + // JS + const js = byExt('.js'); + expect(js).toBeDefined(); + expect(js!.contentType).toBe('application/javascript'); + expect(js!.contentEncoding).toBe('gzip'); + + // CSS + const css = byExt('.css'); + expect(css).toBeDefined(); + expect(css!.contentType).toBe('text/css'); + expect(css!.contentEncoding).toBe('gzip'); + + // SVG (XML-based, compressible) + const svg = byExt('.svg'); + expect(svg).toBeDefined(); + expect(svg!.contentType).toBe('image/svg+xml'); + expect(svg!.contentEncoding).toBe('gzip'); + + // JSON + const json = byExt('.json'); + expect(json).toBeDefined(); + expect(json!.contentType).toBe('application/json'); + expect(json!.contentEncoding).toBe('gzip'); + + // WOFF2 (already compressed, no gzip) + const woff2 = byExt('.woff2'); + expect(woff2).toBeDefined(); + expect(woff2!.contentEncoding).toBeUndefined(); + + // JPG (binary image, no gzip) + const jpg = byExt('.jpg'); + expect(jpg).toBeDefined(); + expect(jpg!.contentType).toBe('image/jpeg'); + expect(jpg!.contentEncoding).toBeUndefined(); + }, 30_000); + + // ── Framework detection sets staticDir correctly ── + + test('Vite framework detection sets staticDir to build output', async () => { + writePackageJson(testDir, { + name: 'test-vite-detection', + version: '1.0.0', + scripts: { build: 'vite build' }, + devDependencies: { vite: '^6.0.0' }, + }); + + const { framework } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('vite'); + // For Vite, staticDir=null in database means entire output IS static + // This gets resolved to outputDirectory ('dist') + expect(framework!.staticDir).toBe('dist'); + }); + + test('Next.js framework detection sets staticDir to .next/static', async () => { + writePackageJson(testDir, { + name: 'test-nextjs-detection', + version: '1.0.0', + scripts: { build: 'next build' }, + dependencies: { next: '^15.0.0', react: '^19.0.0', 'react-dom': '^19.0.0' }, + }); + + const { framework } = await detectFrameworkWithPackageJson(testDir); + expect(framework).not.toBeNull(); + expect(framework!.name).toBe('nextjs'); + expect(framework!.staticDir).toBe('.next/static'); + }); + + // ── Empty static dir ── + + test('build with empty static directory produces no assets', async () => { + writePackageJson(testDir, { + name: 'test-empty-static', + version: '1.0.0', + scripts: { + build: 'mkdir -p dist', // Empty output + }, + devDependencies: { vite: '^6.0.0' }, + }); + + const { framework, packageJson } = await detectFrameworkWithPackageJson(testDir); + + const adapter = getAdapter(framework!.name); + const buildResult = await adapter.build({ + projectDir: testDir, + framework: framework!, + packageJson: packageJson!, + outputDir, + logger, + }); + + const packageResult = packageBuildOutput(framework!, buildResult, buildResult.outputDir); + + const metadata = await generateDeployMetadata({ + buildResult, + packageResult, + projectDir: testDir, + projectId: 'test-project', + orgId: 'test-org', + region: 'us-east-1', + deploymentId: 'test-deployment', + logger, + }); + + // The output dir contains build packaging artifacts (launch.json, Procfile, etc.) + // but no user-created static assets from the build. + // In a real deploy these packaging files would not be in a separate static dir, + // but for this test the entire outputDir IS the staticDir. + // Verify no user content files are present (only build infrastructure). + const userAssets = metadata.assets.filter( + (a) => + !['launch.json', 'Procfile', '.agentuity-build', 'package.json', '_serve.js'].includes( + a.filename + ) + ); + expect(userAssets).toEqual([]); + }, 30_000); +}); diff --git a/packages/cli/test/cmd/build/vite/agent-discovery.test.ts b/packages/cli/test/cmd/build/vite/agent-discovery.test.ts deleted file mode 100644 index 56a9772a1..000000000 --- a/packages/cli/test/cmd/build/vite/agent-discovery.test.ts +++ /dev/null @@ -1,571 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, rmSync, writeFileSync, symlinkSync, existsSync } from 'node:fs'; -import { join, resolve } from 'node:path'; -import { tmpdir } from 'node:os'; -import { createMockLogger } from '@agentuity/test-utils'; -import { discoverAgents } from '../../../../src/cmd/build/vite/agent-discovery'; - -// Resolve the monorepo root (contains the workspace packages) -// test is at packages/cli/test/cmd/build/vite/ — 6 levels from SDK root -const SDK_ROOT = resolve(import.meta.dir, '../../../../../..'); - -/** - * Set up a temp directory with node_modules symlinks so that - * `import()` can resolve @agentuity/runtime, @agentuity/schema, etc. - */ -function setupNodeModules(testDir: string) { - const nmDir = join(testDir, 'node_modules'); - const agentuityDir = join(nmDir, '@agentuity'); - mkdirSync(agentuityDir, { recursive: true }); - - // Symlink workspace packages - const workspacePackages = [ - 'runtime', - 'schema', - 'core', - 'server', - 'auth', - 'frontend', - 'test-utils', - ]; - for (const pkg of workspacePackages) { - const target = join(SDK_ROOT, 'packages', pkg); - const link = join(agentuityDir, pkg); - if (existsSync(target) && !existsSync(link)) { - symlinkSync(target, link, 'dir'); - } - } - - // Symlink top-level dependencies (hono, zod, etc.) - // Use the runtime package's node_modules as the source since it has the full set - const runtimeNm = join(SDK_ROOT, 'packages', 'runtime', 'node_modules'); - const topDeps = ['hono', 'zod']; - for (const dep of topDeps) { - const target = join(runtimeNm, dep); - const link = join(nmDir, dep); - if (existsSync(target) && !existsSync(link)) { - symlinkSync(target, link, 'dir'); - } - } - - // Also symlink from root node_modules for any remaining deps - const rootNm = join(SDK_ROOT, 'node_modules'); - const rootDeps = ['@standard-schema']; - for (const dep of rootDeps) { - const target = join(rootNm, dep); - const link = join(nmDir, dep); - if (existsSync(target) && !existsSync(link)) { - symlinkSync(target, link, 'dir'); - } - } -} - -describe('agent-discovery', () => { - let testDir: string; - let srcDir: string; - let agentDir: string; - const logger = createMockLogger(); - - beforeEach(() => { - testDir = join(tmpdir(), `agent-discovery-test-${Date.now()}-${Math.random()}`); - srcDir = join(testDir, 'src'); - agentDir = join(srcDir, 'agent'); - mkdirSync(agentDir, { recursive: true }); - setupNodeModules(testDir); - }); - - afterEach(() => { - if (testDir) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - test('should discover agent with default export', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export default createAgent('test-agent', { - description: 'A test agent', - schema: { - input: s.object({ name: s.string() }), - output: s.object({ greeting: s.string() }), - }, - handler: async (ctx, input) => { - return { greeting: \`Hello, \${input.name}\` }; - }, -}); -`; - writeFileSync(join(agentDir, 'test.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.name).toBe('test-agent'); - expect(agents[0]!.description).toBe('A test agent'); - expect(agents[0]!.filename).toBe('src/agent/test.ts'); - expect(agents[0]!.id).toMatch(/^agentid_/); - expect(agents[0]!.agentId).toMatch(/^agent_/); - }); - - test('should extract JSON Schema from agent schemas', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export default createAgent('schema-agent', { - schema: { - input: s.object({ - name: s.string(), - age: s.number().optional(), - }), - output: s.object({ - message: s.string(), - }), - }, - handler: async (ctx, input) => { - return { message: \`Hello, \${input.name}\` }; - }, -}); -`; - writeFileSync(join(agentDir, 'schema.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - - // Schema codes should be JSON Schema strings - expect(agents[0]!.inputSchemaCode).toBeDefined(); - const inputSchema = JSON.parse(agents[0]!.inputSchemaCode!); - expect(inputSchema.type).toBe('object'); - expect(inputSchema.properties.name.type).toBe('string'); - - expect(agents[0]!.outputSchemaCode).toBeDefined(); - const outputSchema = JSON.parse(agents[0]!.outputSchemaCode!); - expect(outputSchema.type).toBe('object'); - expect(outputSchema.properties.message.type).toBe('string'); - }); - - test('should discover agent with variable declaration', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const myAgent = createAgent('variable-agent', { - schema: { - input: s.object({ value: s.number() }), - output: s.object({ result: s.number() }), - }, - handler: async (ctx, input) => { - return { result: input.value * 2 }; - }, -}); - -export default myAgent; -`; - writeFileSync(join(agentDir, 'variable.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.name).toBe('variable-agent'); - expect(agents[0]!.inputSchemaCode).toBeDefined(); - expect(agents[0]!.outputSchemaCode).toBeDefined(); - }); - - test('should discover agent without schema', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('no-schema-agent', { - description: 'Agent without schemas', - handler: async (ctx, input) => { - return { ok: true }; - }, -}); -`; - writeFileSync(join(agentDir, 'no-schema.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.name).toBe('no-schema-agent'); - expect(agents[0]!.description).toBe('Agent without schemas'); - expect(agents[0]!.inputSchemaCode).toBeUndefined(); - expect(agents[0]!.outputSchemaCode).toBeUndefined(); - }); - - test('should discover multiple agents', async () => { - const agent1Code = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('agent-one', { - handler: async (ctx, input) => ({ result: 1 }), -}); -`; - writeFileSync(join(agentDir, 'agent1.ts'), agent1Code); - - const subDir = join(agentDir, 'math'); - mkdirSync(subDir); - const agent2Code = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('agent-two', { - description: 'Second agent', - handler: async (ctx, input) => ({ result: 2 }), -}); -`; - writeFileSync(join(subDir, 'agent2.ts'), agent2Code); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(2); - const names = agents.map((a) => a.name).sort(); - expect(names).toEqual(['agent-one', 'agent-two']); - }); - - test('should return empty array when no agent directory exists', async () => { - rmSync(agentDir, { recursive: true, force: true }); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(0); - }); - - test('should skip non-agent files', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('valid-agent', { - handler: async (ctx, input) => ({ y: 1 }), -}); -`; - writeFileSync(join(agentDir, 'valid.ts'), agentCode); - - const utilCode = ` -export function helper() { return 42; } -`; - writeFileSync(join(agentDir, 'util.ts'), utilCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.name).toBe('valid-agent'); - }); - - test('should skip eval.ts files', async () => { - const evalCode = ` -export const something = 'not an agent'; -`; - writeFileSync(join(agentDir, 'eval.ts'), evalCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(0); - }); - - test('should not mutate source files (read-only)', async () => { - const originalCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('readonly-agent', { - handler: async (ctx, input) => ({ result: 'ok' }), -}); -`; - const filePath = join(agentDir, 'readonly.ts'); - writeFileSync(filePath, originalCode); - - const beforeContent = await Bun.file(filePath).text(); - await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - const afterContent = await Bun.file(filePath).text(); - - expect(afterContent).toBe(beforeContent); - }); - - test('should generate consistent IDs for same agent', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('consistent-agent', { - handler: async (ctx, input) => ({ value: 1 }), -}); -`; - writeFileSync(join(agentDir, 'consistent.ts'), agentCode); - - const agents1 = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - const agents2 = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents1[0]!.id).toBe(agents2[0]!.id); - expect(agents1[0]!.agentId).toBe(agents2[0]!.agentId); - }); - - test('should handle deeply nested agent directories', async () => { - const deepDir = join(agentDir, 'feature', 'subfeature', 'helpers'); - mkdirSync(deepDir, { recursive: true }); - - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('nested-agent', { - description: 'Deeply nested agent', - handler: async (ctx, input) => ({ deep: true }), -}); -`; - writeFileSync(join(deepDir, 'agent.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - const nestedAgent = agents.find((a) => a.name === 'nested-agent'); - expect(nestedAgent).toBeDefined(); - expect(nestedAgent!.filename).toContain('feature/subfeature/helpers'); - }); - - test('should resolve variable reference for input schema', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export const AgentInput = s.object({ - text: s.string(), -}); - -export default createAgent('variable-input-agent', { - description: 'Agent with variable input schema', - schema: { - input: AgentInput, - }, - handler: async (ctx, input) => { - return { result: input.text }; - }, -}); -`; - writeFileSync(join(agentDir, 'variable-input.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.inputSchemaCode).toBeDefined(); - - // Should be valid JSON Schema (not a Zod source string) - const schema = JSON.parse(agents[0]!.inputSchemaCode!); - expect(schema.type).toBe('object'); - expect(schema.properties.text.type).toBe('string'); - }); - - test('should handle agent with description as direct property', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('described-agent', { - description: 'Direct description property', - handler: async (ctx, input) => ({ ok: true }), -}); -`; - writeFileSync(join(agentDir, 'described.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.description).toBe('Direct description property'); - }); - - test('should handle agent with schema using @agentuity/schema (s)', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export default createAgent('s-schema-agent', { - schema: { - input: s.object({ - name: s.string(), - tags: s.array(s.string()), - active: s.boolean(), - }), - }, - handler: async (ctx, input) => ({ ok: true }), -}); -`; - writeFileSync(join(agentDir, 's-schema.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - const schema = JSON.parse(agents[0]!.inputSchemaCode!); - expect(schema.type).toBe('object'); - expect(schema.properties.name.type).toBe('string'); - expect(schema.properties.tags.type).toBe('array'); - expect(schema.properties.tags.items.type).toBe('string'); - expect(schema.properties.active.type).toBe('boolean'); - }); - - test('should handle agent with optional fields in schema', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export default createAgent('optional-schema-agent', { - schema: { - input: s.object({ - required_field: s.string(), - optional_field: s.string().optional(), - }), - }, - handler: async (ctx, input) => ({ ok: true }), -}); -`; - writeFileSync(join(agentDir, 'optional-schema.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - const schema = JSON.parse(agents[0]!.inputSchemaCode!); - expect(schema.type).toBe('object'); - expect(schema.properties.required_field.type).toBe('string'); - expect(schema.properties.optional_field).toBeDefined(); - // required_field should be in required array, optional_field should not - if (schema.required) { - expect(schema.required).toContain('required_field'); - expect(schema.required).not.toContain('optional_field'); - } - }); - - test('should return version based on file hash', async () => { - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; - -export default createAgent('versioned-agent', { - handler: async (ctx, input) => ({ ok: true }), -}); -`; - writeFileSync(join(agentDir, 'versioned.ts'), agentCode); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents).toHaveLength(1); - expect(agents[0]!.version).toMatch(/^[a-f0-9]{64}$/); // SHA256 hex - }); - - test('version changes when file content changes', async () => { - const filePath = join(agentDir, 'mutable.ts'); - - writeFileSync( - filePath, - ` -import { createAgent } from '@agentuity/runtime'; -export default createAgent('mutable-agent', { - handler: async (ctx, input) => ({ v: 1 }), -}); -` - ); - const agents1 = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - writeFileSync( - filePath, - ` -import { createAgent } from '@agentuity/runtime'; -export default createAgent('mutable-agent', { - handler: async (ctx, input) => ({ v: 2 }), -}); -` - ); - const agents2 = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - expect(agents1[0]!.version).not.toBe(agents2[0]!.version); - // agentId is stable (based on project + name, not content) - expect(agents1[0]!.agentId).toBe(agents2[0]!.agentId); - }); - - test('should throw error when agent fails to import', async () => { - // Valid agent - writeFileSync( - join(agentDir, 'good.ts'), - ` -import { createAgent } from '@agentuity/runtime'; -export default createAgent('good-agent', { - handler: async (ctx, input) => ({ ok: true }), -}); -` - ); - - // File with createAgent in text but broken import - writeFileSync( - join(agentDir, 'broken.ts'), - ` -import { createAgent } from '@agentuity/runtime'; -import { broken } from './does-not-exist'; -export default createAgent('broken-agent', { - handler: async (ctx, input) => broken(), -}); -` - ); - - // Should throw an error with helpful message - await expect( - discoverAgents(srcDir, 'test-project', 'test-deployment', logger) - ).rejects.toThrow('Failed to import agent'); - }); - - test('should skip test files and test directories', async () => { - // Valid agent - writeFileSync( - join(agentDir, 'good.ts'), - ` -import { createAgent } from '@agentuity/runtime'; -export default createAgent('good-agent', { - handler: async (ctx, input) => ({ ok: true }), -}); -` - ); - - // Test file that would fail if imported - writeFileSync( - join(agentDir, 'good.test.ts'), - ` -import { test, expect } from 'bun:test'; -test('example', () => { - expect(1).toBe(1); -}); -` - ); - - // Spec file - writeFileSync( - join(agentDir, 'good.spec.ts'), - ` -import { describe, it } from 'bun:test'; -describe('example', () => { - it('works', () => {}); -}); -` - ); - - // Test directory with file - const testDir = join(agentDir, 'test'); - mkdirSync(testDir, { recursive: true }); - writeFileSync( - join(testDir, 'helper.ts'), - ` -// This would fail with "Cannot use test outside of the test runner" -import { test } from 'bun:test'; -test('helper', () => {}); -` - ); - - // __tests__ directory - const testsDir = join(agentDir, '__tests__'); - mkdirSync(testsDir, { recursive: true }); - writeFileSync( - join(testsDir, 'agent.test.ts'), - ` -import { test } from 'bun:test'; -test('agent', () => {}); -` - ); - - const agents = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - - // Should only find the valid agent - expect(agents.length).toBe(1); - expect(agents[0]!.name).toBe('good-agent'); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/asset-paths.test.ts b/packages/cli/test/cmd/build/vite/asset-paths.test.ts deleted file mode 100644 index a5b43a48e..000000000 --- a/packages/cli/test/cmd/build/vite/asset-paths.test.ts +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Test asset path generation for deployment - */ -import { test, expect, describe } from 'bun:test'; -import { join } from 'node:path'; -import { mkdirSync, writeFileSync, rmSync, existsSync } from 'node:fs'; -import { generateMetadata } from '../../../../src/cmd/build/vite/metadata-generator'; -import type { Logger } from '../../../../src/types'; - -const mockLogger: Logger = { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: ((..._args: unknown[]): never => { - throw new Error('Fatal'); - }) as Logger['fatal'], -}; - -describe('Asset Path Generation', () => { - const testDir = join(import.meta.dir, 'test-asset-paths'); - - // Clean up before and after tests - const cleanup = () => { - if (existsSync(testDir)) { - rmSync(testDir, { recursive: true, force: true }); - } - }; - - test('asset filenames include subdirectory prefix', async () => { - cleanup(); - - // Setup test directory structure matching Vite output - const agentuityDir = join(testDir, '.agentuity'); - const clientDir = join(agentuityDir, 'client'); - const clientAssetsDir = join(clientDir, 'assets'); - const clientViteDir = join(clientDir, '.vite'); - - mkdirSync(clientAssetsDir, { recursive: true }); - mkdirSync(clientViteDir, { recursive: true }); - - // Create test assets - writeFileSync(join(clientAssetsDir, 'main-abc123.js'), 'console.log("test");'); - writeFileSync(join(clientAssetsDir, 'main-abc123.css'), 'body { margin: 0; }'); - writeFileSync(join(clientAssetsDir, 'logo-xyz789.svg'), ''); - - // Create Vite manifest - const manifest = { - 'main.tsx': { - file: 'assets/main-abc123.js', - src: 'main.tsx', - isEntry: true, - css: ['assets/main-abc123.css'], - }, - 'logo.svg': { - file: 'assets/logo-xyz789.svg', - src: 'logo.svg', - }, - }; - - writeFileSync(join(clientViteDir, 'manifest.json'), JSON.stringify(manifest, null, 2)); - - // Generate metadata - const metadata = await generateMetadata({ - rootDir: testDir, - projectId: 'test-project', - orgId: 'test-org', - agents: [], - routes: [], - dev: false, - logger: mockLogger, - }); - - // Verify assets have correct paths with subdirectory prefix - expect(metadata.assets).toBeDefined(); - expect(metadata.assets!.length).toBeGreaterThan(0); - - const jsAsset = metadata.assets!.find((a) => a.filename.endsWith('.js')); - const cssAsset = metadata.assets!.find((a) => a.filename.endsWith('.css')); - const svgAsset = metadata.assets!.find((a) => a.filename.endsWith('.svg')); - - // Critical: filenames MUST include "client/" prefix for deployment - expect(jsAsset?.filename).toBe('client/assets/main-abc123.js'); - expect(cssAsset?.filename).toBe('client/assets/main-abc123.css'); - expect(svgAsset?.filename).toBe('client/assets/logo-xyz789.svg'); - - // Verify files can be found using the generated paths - for (const asset of metadata.assets!) { - const fullPath = join(testDir, '.agentuity', asset.filename); - expect(existsSync(fullPath)).toBe(true); - } - - cleanup(); - }); - - test('workbench assets include workbench prefix', async () => { - cleanup(); - - const agentuityDir = join(testDir, '.agentuity'); - const workbenchDir = join(agentuityDir, 'workbench'); - const workbenchAssetsDir = join(workbenchDir, 'assets'); - const workbenchViteDir = join(workbenchDir, '.vite'); - - mkdirSync(workbenchAssetsDir, { recursive: true }); - mkdirSync(workbenchViteDir, { recursive: true }); - - writeFileSync(join(workbenchAssetsDir, 'workbench-def456.js'), 'console.log("workbench");'); - - const manifest = { - 'main.tsx': { - file: 'assets/workbench-def456.js', - src: 'main.tsx', - isEntry: true, - }, - }; - - writeFileSync(join(workbenchViteDir, 'manifest.json'), JSON.stringify(manifest, null, 2)); - - const metadata = await generateMetadata({ - rootDir: testDir, - projectId: 'test-project', - agents: [], - routes: [], - dev: false, - logger: mockLogger, - }); - - const workbenchAsset = metadata.assets!.find((a) => a.filename.includes('workbench')); - expect(workbenchAsset?.filename).toBe('workbench/assets/workbench-def456.js'); - - cleanup(); - }); - - test('asset paths work with deployment join', async () => { - cleanup(); - - const agentuityDir = join(testDir, '.agentuity'); - const clientDir = join(agentuityDir, 'client'); - const clientAssetsDir = join(clientDir, 'assets'); - const clientViteDir = join(clientDir, '.vite'); - - mkdirSync(clientAssetsDir, { recursive: true }); - mkdirSync(clientViteDir, { recursive: true }); - - writeFileSync(join(clientAssetsDir, 'test-file.js'), 'test'); - - const manifest = { - 'test.js': { - file: 'assets/test-file.js', - isEntry: true, - }, - }; - - writeFileSync(join(clientViteDir, 'manifest.json'), JSON.stringify(manifest)); - - const metadata = await generateMetadata({ - rootDir: testDir, - projectId: 'test', - agents: [], - routes: [], - logger: mockLogger, - }); - - // Simulate deploy.ts logic - const asset = metadata.assets![0]; - const deployPath = join(testDir, '.agentuity', asset.filename); - - // This should resolve to the correct file - expect(existsSync(deployPath)).toBe(true); - expect(deployPath).toBe(join(clientAssetsDir, 'test-file.js')); - - cleanup(); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/build-error-formatting.test.ts b/packages/cli/test/cmd/build/vite/build-error-formatting.test.ts deleted file mode 100644 index 576a242f5..000000000 --- a/packages/cli/test/cmd/build/vite/build-error-formatting.test.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { describe, test, expect, beforeAll, afterAll } from 'bun:test'; -import { join } from 'node:path'; -import { mkdtemp, rm, mkdir } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { formatBuildLog } from '../../../../src/cmd/build/vite/server-bundler'; - -describe('Build Error Formatting', () => { - let tempDir: string; - - beforeAll(async () => { - tempDir = await mkdtemp(join(tmpdir(), 'build-error-test-')); - }); - - afterAll(async () => { - await rm(tempDir, { recursive: true, force: true }); - }); - - describe('formatBuildLog', () => { - test('formats ResolveMessage with specifier and referrer', async () => { - const srcDir = join(tempDir, 'resolve-test'); - await mkdir(srcDir, { recursive: true }); - - await Bun.write( - join(srcDir, 'entry.ts'), - `import { something } from 'non-existent-package-xyz123'; -export const x = something;` - ); - - const result = await Bun.build({ - entrypoints: [join(srcDir, 'entry.ts')], - outdir: join(srcDir, 'out'), - throw: false, - }); - - expect(result.success).toBe(false); - expect(result.logs.length).toBeGreaterThan(0); - - const resolveLog = result.logs.find((log) => log.name === 'ResolveMessage'); - expect(resolveLog).toBeDefined(); - - const formatted = formatBuildLog(resolveLog!); - expect(formatted).toContain('Could not resolve'); - expect(formatted).toContain('non-existent-package-xyz123'); - expect(formatted).toContain('imported from:'); - expect(formatted).toContain('entry.ts'); - }); - - test('formats BuildMessage with syntax error', async () => { - const srcDir = join(tempDir, 'syntax-test'); - await mkdir(srcDir, { recursive: true }); - - await Bun.write( - join(srcDir, 'entry.ts'), - `export const x = { - foo: 'bar' - missing: 'comma' -};` - ); - - const result = await Bun.build({ - entrypoints: [join(srcDir, 'entry.ts')], - outdir: join(srcDir, 'out'), - throw: false, - }); - - expect(result.success).toBe(false); - expect(result.logs.length).toBeGreaterThan(0); - - const buildLog = result.logs[0]; - const formatted = formatBuildLog(buildLog); - - expect(formatted.length).toBeGreaterThan(0); - if (buildLog.position) { - expect(formatted).toContain('at'); - expect(formatted).toContain('entry.ts'); - } - }); - - test('formats multiple errors correctly', async () => { - const srcDir = join(tempDir, 'multi-error-test'); - await mkdir(srcDir, { recursive: true }); - - await Bun.write( - join(srcDir, 'entry.ts'), - `import { a } from 'missing-pkg-a'; -import { b } from 'missing-pkg-b'; -import { c } from 'missing-pkg-c'; -export const result = a + b + c;` - ); - - const result = await Bun.build({ - entrypoints: [join(srcDir, 'entry.ts')], - outdir: join(srcDir, 'out'), - throw: false, - }); - - expect(result.success).toBe(false); - expect(result.logs.length).toBeGreaterThan(0); - - const formattedErrors = result.logs.map((log) => formatBuildLog(log)).filter(Boolean); - - expect(formattedErrors.length).toBeGreaterThan(0); - - for (const formatted of formattedErrors) { - expect(formatted).not.toContain('ResolveMessage {}'); - expect(formatted).not.toContain('[object Object]'); - } - }); - - test('handles empty message gracefully', () => { - const emptyLog = { - name: 'BuildMessage' as const, - message: '', - position: null, - level: 'error' as const, - }; - - const formatted = formatBuildLog(emptyLog); - expect(formatted).toBe(''); - }); - - test('includes position info when available', () => { - const logWithPosition = { - name: 'BuildMessage' as const, - message: 'Test error', - position: { - file: '/path/to/file.ts', - line: 10, - column: 5, - lineText: 'const x = bad;', - offset: 0, - length: 3, - }, - level: 'error' as const, - }; - - const formatted = formatBuildLog(logWithPosition); - expect(formatted).toContain('Test error'); - expect(formatted).toContain('at /path/to/file.ts:10:5'); - }); - - test('formats ResolveMessage without referrer', () => { - const resolveLog = { - name: 'ResolveMessage' as const, - specifier: 'some-module', - referrer: '', - message: '', - position: null, - code: '', - importKind: 'import' as const, - level: 'error' as const, - }; - - const formatted = formatBuildLog(resolveLog); - expect(formatted).toContain('Could not resolve "some-module"'); - expect(formatted).not.toContain('imported from:'); - }); - }); - - describe('AggregateError handling', () => { - test('real Bun.build produces formatted errors on module resolution failure', async () => { - const srcDir = join(tempDir, 'aggregate-test'); - await mkdir(srcDir, { recursive: true }); - - await Bun.write( - join(srcDir, 'entry.ts'), - `import { foo } from 'definitely-not-a-real-package-12345'; -export default foo;` - ); - - const result = await Bun.build({ - entrypoints: [join(srcDir, 'entry.ts')], - outdir: join(srcDir, 'out'), - throw: false, - }); - - expect(result.success).toBe(false); - - const errorMessages = result.logs - .map((log) => formatBuildLog(log)) - .filter(Boolean) - .join('\n'); - - expect(errorMessages).not.toBe(''); - expect(errorMessages).not.toContain('ResolveMessage {}'); - expect(errorMessages).toContain('definitely-not-a-real-package-12345'); - }); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/env-types-generator.test.ts b/packages/cli/test/cmd/build/vite/env-types-generator.test.ts deleted file mode 100644 index d4ac6d9f4..000000000 --- a/packages/cli/test/cmd/build/vite/env-types-generator.test.ts +++ /dev/null @@ -1,664 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, rmSync, existsSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { generateEnvTypes } from '../../../../src/cmd/build/vite/env-types-generator'; -import type { Logger } from '../../../../src/types'; - -/** - * Create a mock logger that captures log messages for testing - */ -function createMockLogger(): Logger & { messages: { level: string; msg: string }[] } { - const messages: { level: string; msg: string }[] = []; - const logger: Logger & { messages: { level: string; msg: string }[] } = { - messages, - trace: (msg: unknown) => { - messages.push({ level: 'trace', msg: String(msg) }); - }, - debug: (msg: unknown) => { - messages.push({ level: 'debug', msg: String(msg) }); - }, - info: (msg: unknown) => { - messages.push({ level: 'info', msg: String(msg) }); - }, - warn: (msg: unknown) => { - messages.push({ level: 'warn', msg: String(msg) }); - }, - error: (msg: unknown) => { - messages.push({ level: 'error', msg: String(msg) }); - }, - fatal: (msg: unknown): never => { - messages.push({ level: 'fatal', msg: String(msg) }); - throw new Error(String(msg)); - }, - child: () => logger, // Return the same logger for simplicity in tests - }; - return logger; -} - -describe('env-types-generator', () => { - let testDir: string; - let srcDir: string; - let logger: ReturnType; - - beforeEach(() => { - // Create unique temp directory for each test - testDir = join(tmpdir(), `env-types-test-${Date.now()}-${Math.random()}`); - srcDir = join(testDir, 'src'); - mkdirSync(srcDir, { recursive: true }); - logger = createMockLogger(); - }); - - afterEach(() => { - // Clean up temp directory - if (testDir && existsSync(testDir)) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - describe('basic functionality', () => { - test('should return false when no .env files exist', async () => { - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - expect(result).toBe(false); - }); - - test('should return true when types are generated', async () => { - // Create a .env file - await Bun.write(join(testDir, '.env'), 'API_KEY=test123\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - expect(result).toBe(true); - }); - - test('should create src/generated directory if it does not exist', async () => { - await Bun.write(join(testDir, '.env'), 'MY_VAR=value\n'); - - const generatedDir = join(srcDir, 'generated'); - expect(existsSync(generatedDir)).toBe(false); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - expect(existsSync(generatedDir)).toBe(true); - expect(existsSync(join(generatedDir, 'env.d.ts'))).toBe(true); - }); - - test('should include @generated marker in output', async () => { - await Bun.write(join(testDir, '.env'), 'TEST_VAR=value\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('// @generated'); - }); - }); - - describe('ProcessEnv types generation', () => { - test('should generate correct ProcessEnv types from .env file', async () => { - await Bun.write( - join(testDir, '.env'), - 'DATABASE_URL=postgres://localhost\nAPI_KEY=secret\nNODE_ENV=development\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Should include all keys in ProcessEnv - expect(content).toContain('interface ProcessEnv'); - expect(content).toContain('readonly DATABASE_URL: string;'); - expect(content).toContain('readonly API_KEY: string;'); - expect(content).toContain('readonly NODE_ENV: string;'); - }); - - test('should sort keys alphabetically in ProcessEnv', async () => { - await Bun.write(join(testDir, '.env'), 'ZEBRA=z\nAPPLE=a\nMIDDLE=m\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Find the ProcessEnv section and verify order - const appleIndex = content.indexOf('readonly APPLE:'); - const middleIndex = content.indexOf('readonly MIDDLE:'); - const zebraIndex = content.indexOf('readonly ZEBRA:'); - - expect(appleIndex).toBeLessThan(middleIndex); - expect(middleIndex).toBeLessThan(zebraIndex); - }); - }); - - describe('ImportMetaEnv types generation', () => { - test('should generate ImportMetaEnv types only for VITE_ prefixed variables', async () => { - await Bun.write( - join(testDir, '.env'), - 'VITE_API_URL=http://api.example.com\nAPI_KEY=secret\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Should include VITE_ in ImportMetaEnv - expect(content).toContain('interface ImportMetaEnv'); - - // Extract ImportMetaEnv section to verify contents - const importMetaEnvMatch = content.match(/interface ImportMetaEnv \{[\s\S]*?\n\}/); - expect(importMetaEnvMatch).not.toBeNull(); - const importMetaEnvSection = importMetaEnvMatch![0]; - - expect(importMetaEnvSection).toContain('readonly VITE_API_URL: string;'); - // Check that API_KEY is NOT in ImportMetaEnv section - expect(importMetaEnvSection).not.toContain('API_KEY'); - }); - - test('should generate ImportMetaEnv types for AGENTUITY_PUBLIC_ prefixed variables', async () => { - await Bun.write( - join(testDir, '.env'), - 'AGENTUITY_PUBLIC_URL=http://public.example.com\nSECRET_KEY=hidden\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Extract ImportMetaEnv section (between "interface ImportMetaEnv {" and the next "}") - const importMetaEnvMatch = content.match(/interface ImportMetaEnv \{[\s\S]*?\n\}/); - expect(importMetaEnvMatch).not.toBeNull(); - const importMetaEnvSection = importMetaEnvMatch![0]; - - expect(importMetaEnvSection).toContain('readonly AGENTUITY_PUBLIC_URL: string;'); - expect(importMetaEnvSection).not.toContain('SECRET_KEY'); - }); - - test('should generate ImportMetaEnv types for PUBLIC_ prefixed variables', async () => { - await Bun.write( - join(testDir, '.env'), - 'PUBLIC_BASE_URL=http://base.example.com\nPRIVATE_KEY=secret\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Extract ImportMetaEnv section - const importMetaEnvMatch = content.match(/interface ImportMetaEnv \{[\s\S]*?\n\}/); - expect(importMetaEnvMatch).not.toBeNull(); - const importMetaEnvSection = importMetaEnvMatch![0]; - - expect(importMetaEnvSection).toContain('readonly PUBLIC_BASE_URL: string;'); - expect(importMetaEnvSection).not.toContain('PRIVATE_KEY'); - }); - - test('should include all public prefixes in ImportMetaEnv', async () => { - await Bun.write( - join(testDir, '.env'), - 'VITE_VAR=v1\nAGENTUITY_PUBLIC_VAR=v2\nPUBLIC_VAR=v3\nNORMAL_VAR=v4\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Extract ImportMetaEnv section - const importMetaEnvMatch = content.match(/interface ImportMetaEnv \{[\s\S]*?\n\}/); - expect(importMetaEnvMatch).not.toBeNull(); - const importMetaEnvSection = importMetaEnvMatch![0]; - - expect(importMetaEnvSection).toContain('readonly VITE_VAR: string;'); - expect(importMetaEnvSection).toContain('readonly AGENTUITY_PUBLIC_VAR: string;'); - expect(importMetaEnvSection).toContain('readonly PUBLIC_VAR: string;'); - expect(importMetaEnvSection).not.toContain('NORMAL_VAR'); - }); - - test('should show comment when no public variables found', async () => { - await Bun.write( - join(testDir, '.env'), - 'DATABASE_URL=postgres://localhost\nAPI_KEY=secret\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - expect(content).toContain( - '// No VITE_*, AGENTUITY_PUBLIC_*, or PUBLIC_* prefixed variables found' - ); - }); - }); - - describe('env file merging - development mode', () => { - test('should merge .env and .env.development correctly (dev mode, .env wins)', async () => { - // In dev mode: read .env.development first, then .env (later overrides earlier) - await Bun.write( - join(testDir, '.env.development'), - 'API_URL=http://dev.api.com\nDEV_ONLY=true\n' - ); - await Bun.write(join(testDir, '.env'), 'API_URL=http://main.api.com\nSHARED=value\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // All keys should be present - expect(content).toContain('readonly API_URL: string;'); - expect(content).toContain('readonly DEV_ONLY: string;'); - expect(content).toContain('readonly SHARED: string;'); - }); - - test('should read only .env.development when .env does not exist (dev mode)', async () => { - await Bun.write(join(testDir, '.env.development'), 'DEV_VAR=development\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly DEV_VAR: string;'); - }); - - test('should read only .env when .env.development does not exist (dev mode)', async () => { - await Bun.write(join(testDir, '.env'), 'MAIN_VAR=main\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly MAIN_VAR: string;'); - }); - }); - - describe('env file merging - production mode', () => { - test('should merge .env and .env.production correctly (prod mode, .env.production wins)', async () => { - // In prod mode: read .env first, then .env.production (later overrides earlier) - await Bun.write(join(testDir, '.env'), 'API_URL=http://main.api.com\nSHARED=main\n'); - await Bun.write( - join(testDir, '.env.production'), - 'API_URL=http://prod.api.com\nPROD_ONLY=true\n' - ); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: true }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // All keys should be present - expect(content).toContain('readonly API_URL: string;'); - expect(content).toContain('readonly PROD_ONLY: string;'); - expect(content).toContain('readonly SHARED: string;'); - }); - - test('should read only .env.production when .env does not exist (prod mode)', async () => { - await Bun.write(join(testDir, '.env.production'), 'PROD_VAR=production\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: true, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly PROD_VAR: string;'); - }); - - test('should read only .env when .env.production does not exist (prod mode)', async () => { - await Bun.write(join(testDir, '.env'), 'MAIN_VAR=main\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: true, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly MAIN_VAR: string;'); - }); - }); - - describe('edge cases', () => { - test('should handle empty .env files gracefully', async () => { - await Bun.write(join(testDir, '.env'), ''); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - // Empty file returns empty object, so foundAnyFile stays false - expect(result).toBe(false); - }); - - test('should handle .env files with only comments', async () => { - await Bun.write(join(testDir, '.env'), '# This is a comment\n# Another comment\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - // Comments-only file returns empty object - expect(result).toBe(false); - }); - - test('should handle .env files with empty lines', async () => { - await Bun.write(join(testDir, '.env'), 'KEY1=value1\n\n\nKEY2=value2\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly KEY1: string;'); - expect(content).toContain('readonly KEY2: string;'); - }); - - test('should handle quoted values in .env files', async () => { - await Bun.write( - join(testDir, '.env'), - 'DOUBLE_QUOTED="double quoted value"\nSINGLE_QUOTED=\'single quoted value\'\n' - ); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly DOUBLE_QUOTED: string;'); - expect(content).toContain('readonly SINGLE_QUOTED: string;'); - }); - - test('should handle values with equals sign', async () => { - await Bun.write(join(testDir, '.env'), 'CONNECTION_STRING=host=localhost;port=5432\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly CONNECTION_STRING: string;'); - }); - - test('should handle keys with numbers', async () => { - await Bun.write(join(testDir, '.env'), 'API_V2_KEY=value\nSERVER_1_URL=url\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly API_V2_KEY: string;'); - expect(content).toContain('readonly SERVER_1_URL: string;'); - }); - - test('should deduplicate keys across env files (use merged value)', async () => { - // Both files have the same key - await Bun.write(join(testDir, '.env.development'), 'DUPLICATE_KEY=dev_value\n'); - await Bun.write(join(testDir, '.env'), 'DUPLICATE_KEY=main_value\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Should only appear once in the output - const matches = content.match(/readonly DUPLICATE_KEY: string;/g); - expect(matches?.length).toBe(1); - }); - - test('should handle very long key names', async () => { - const longKey = 'A'.repeat(100); - await Bun.write(join(testDir, '.env'), `${longKey}=value\n`); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain(`readonly ${longKey}: string;`); - }); - }); - - describe('output file structure', () => { - test('should generate proper TypeScript declaration file structure', async () => { - await Bun.write(join(testDir, '.env'), 'VITE_PUBLIC=pub\nSECRET=sec\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Check overall structure - expect(content).toContain('declare global {'); - expect(content).toContain('namespace NodeJS {'); - expect(content).toContain('interface ProcessEnv {'); - expect(content).toContain('interface ImportMetaEnv {'); - expect(content).toContain('interface ImportMeta {'); - expect(content).toContain('readonly env: ImportMetaEnv;'); - expect(content).toContain('export {};'); - }); - - test('should include auto-generated comment', async () => { - await Bun.write(join(testDir, '.env'), 'TEST=value\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - expect(content).toContain('AUTO-GENERATED from local .env files'); - expect(content).toContain('do not edit manually'); - }); - - test('should include issue reporting instructions', async () => { - await Bun.write(join(testDir, '.env'), 'TEST=value\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - expect(content).toContain('FOUND AN ERROR IN THIS FILE?'); - expect(content).toContain('https://github.com/agentuity/sdk/issues'); - }); - }); - - describe('logging', () => { - test('should log debug messages during generation', async () => { - await Bun.write(join(testDir, '.env'), 'LOG_TEST=value\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const debugMessages = logger.messages.filter((m) => m.level === 'debug'); - expect(debugMessages.length).toBeGreaterThan(0); - expect(debugMessages.some((m) => m.msg.includes('[env-types]'))).toBe(true); - }); - - test('should log when no env files found', async () => { - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const debugMessages = logger.messages.filter((m) => m.level === 'debug'); - expect(debugMessages.some((m) => m.msg.includes('No .env files found'))).toBe(true); - }); - - test('should log number of keys generated', async () => { - await Bun.write(join(testDir, '.env'), 'KEY1=v1\nKEY2=v2\nVITE_KEY=v3\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const debugMessages = logger.messages.filter((m) => m.level === 'debug'); - expect(debugMessages.some((m) => m.msg.includes('3 keys'))).toBe(true); - expect(debugMessages.some((m) => m.msg.includes('1 public'))).toBe(true); - }); - }); - - describe('existing generated directory', () => { - test('should work when src/generated directory already exists', async () => { - // Pre-create the generated directory - mkdirSync(join(srcDir, 'generated'), { recursive: true }); - await Bun.write(join(testDir, '.env'), 'EXISTING=value\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly EXISTING: string;'); - }); - - test('should overwrite existing env.d.ts file', async () => { - // Pre-create the generated directory with old content - mkdirSync(join(srcDir, 'generated'), { recursive: true }); - await Bun.write(join(srcDir, 'generated', 'env.d.ts'), '// old content\n'); - - await Bun.write(join(testDir, '.env'), 'NEW_KEY=newvalue\n'); - - await generateEnvTypes({ rootDir: testDir, srcDir, logger, isProduction: false }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).not.toContain('// old content'); - expect(content).toContain('readonly NEW_KEY: string;'); - }); - }); - - describe('profile support', () => { - test('should read .env.{profile} file when profile is specified (dev mode)', async () => { - // Create base .env and profile-specific .env.staging - await Bun.write(join(testDir, '.env'), 'BASE_VAR=base\nSHARED=from-base\n'); - await Bun.write( - join(testDir, '.env.staging'), - 'STAGING_VAR=staging\nSHARED=from-staging\n' - ); - - await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - profile: 'staging', - }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // All keys should be present (profile vars merged with base) - expect(content).toContain('readonly BASE_VAR: string;'); - expect(content).toContain('readonly STAGING_VAR: string;'); - expect(content).toContain('readonly SHARED: string;'); - }); - - test('should read .env.{profile} file when profile is specified (prod mode)', async () => { - await Bun.write(join(testDir, '.env'), 'BASE_VAR=base\n'); - await Bun.write(join(testDir, '.env.production'), 'PROD_VAR=prod\n'); - await Bun.write(join(testDir, '.env.staging'), 'STAGING_VAR=staging\n'); - - await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: true, - profile: 'staging', - }); - - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - - // Should include vars from .env, .env.production, and .env.staging - expect(content).toContain('readonly BASE_VAR: string;'); - expect(content).toContain('readonly PROD_VAR: string;'); - expect(content).toContain('readonly STAGING_VAR: string;'); - }); - - test('should work when only .env.{profile} exists', async () => { - // Only create the profile-specific file - await Bun.write(join(testDir, '.env.test'), 'TEST_VAR=testvalue\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - profile: 'test', - }); - - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly TEST_VAR: string;'); - }); - - test('should log profile name when specified', async () => { - await Bun.write(join(testDir, '.env'), 'VAR=value\n'); - - await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - profile: 'myprofile', - }); - - const debugMessages = logger.messages.filter((m) => m.level === 'debug'); - expect(debugMessages.some((m) => m.msg.includes('myprofile'))).toBe(true); - }); - - test('should handle missing profile file gracefully', async () => { - // Only create base .env, no .env.staging - await Bun.write(join(testDir, '.env'), 'BASE_VAR=base\n'); - - const result = await generateEnvTypes({ - rootDir: testDir, - srcDir, - logger, - isProduction: false, - profile: 'staging', // This file doesn't exist - }); - - // Should still work with just the base .env - expect(result).toBe(true); - const content = await Bun.file(join(srcDir, 'generated', 'env.d.ts')).text(); - expect(content).toContain('readonly BASE_VAR: string;'); - }); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/hmr-port-config.test.ts b/packages/cli/test/cmd/build/vite/hmr-port-config.test.ts deleted file mode 100644 index 36bda28da..000000000 --- a/packages/cli/test/cmd/build/vite/hmr-port-config.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { generateAssetServerConfig } from '../../../../src/cmd/build/vite/vite-asset-server-config'; -import type { Logger } from '../../../../src/types'; - -/** - * Test suite for HMR port configuration - * - * This verifies that the HMR configuration supports both local development - * and remote access through tunnels (*.agentuity.live). - * - * GitHub Issues: - * - https://github.com/agentuity/sdk/issues/542 (port fallback) - * - https://github.com/agentuity/sdk/issues/832 (tunnel HMR support) - */ -describe('Vite HMR Port Configuration', () => { - const mockLogger: Logger = { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: () => { - throw new Error('Fatal error'); - }, - child: () => mockLogger, - }; - - test('HMR config should use path-based routing for tunnel support', async () => { - const tempDir = mkdtempSync(join(tmpdir(), 'agentuity-hmr-test-')); - try { - // Create minimal project structure - writeFileSync( - join(tempDir, 'package.json'), - JSON.stringify({ name: 'test', dependencies: {} }) - ); - mkdirSync(join(tempDir, 'src'), { recursive: true }); - - const config = await generateAssetServerConfig({ - rootDir: tempDir, - logger: mockLogger, - port: 5173, - }); - - // Verify HMR config exists - expect(config.server?.hmr).toBeDefined(); - - const hmrConfig = config.server?.hmr as Record; - - // HMR should use a dedicated path for WebSocket proxying through tunnels - // This allows the Bun server to proxy HMR connections to Vite - expect(hmrConfig.path).toBe('/__vite_hmr'); - - // HMR port, clientPort, host, and protocol should NOT be set - // This allows Vite to auto-detect from the page origin, enabling - // HMR to work both locally and through the Gravity tunnel - expect(hmrConfig.port).toBeUndefined(); - expect(hmrConfig.clientPort).toBeUndefined(); - expect(hmrConfig.host).toBeUndefined(); - expect(hmrConfig.protocol).toBeUndefined(); - } finally { - rmSync(tempDir, { recursive: true, force: true }); - } - }); - - test('server config should allow port fallback with strictPort: false', async () => { - const tempDir = mkdtempSync(join(tmpdir(), 'agentuity-hmr-test-')); - try { - // Create minimal project structure - writeFileSync( - join(tempDir, 'package.json'), - JSON.stringify({ name: 'test', dependencies: {} }) - ); - mkdirSync(join(tempDir, 'src'), { recursive: true }); - - const config = await generateAssetServerConfig({ - rootDir: tempDir, - logger: mockLogger, - port: 5173, - }); - - // strictPort should be false to allow Vite to choose alternate ports - expect(config.server?.strictPort).toBe(false); - - // The requested port should still be set - expect(config.server?.port).toBe(5173); - } finally { - rmSync(tempDir, { recursive: true, force: true }); - } - }); -}); diff --git a/packages/cli/test/cmd/build/vite/public-asset-path-plugin.test.ts b/packages/cli/test/cmd/build/vite/public-asset-path-plugin.test.ts deleted file mode 100644 index f1497c2ec..000000000 --- a/packages/cli/test/cmd/build/vite/public-asset-path-plugin.test.ts +++ /dev/null @@ -1,477 +0,0 @@ -/** - * Tests for public-asset-path-plugin - * - * This plugin fixes incorrect public asset paths in browser code: - * - '/src/web/public/...' → '/public/...' - * - './src/web/public/...' → '/public/...' - * - 'src/web/public/...' → '/public/...' - * - './public/...' → '/public/...' - */ - -import { describe, test, expect, beforeEach } from 'bun:test'; -import { publicAssetPathPlugin } from '../../../../src/cmd/build/vite/public-asset-path-plugin'; -import type { Plugin } from 'vite'; - -describe('publicAssetPathPlugin', () => { - let plugin: Plugin; - - // Type for the transform function result - type TransformResult = { code: string; map: null } | null; - - /** - * Helper to call transform with proper context - */ - function callTransform( - code: string, - id: string, - warnFn?: (msg: string) => void - ): TransformResult { - const transform = plugin.transform; - if (!transform || typeof transform !== 'function') { - throw new Error('Plugin transform is not a function'); - } - - const context = { - warn: warnFn || (() => {}), - // Minimal context properties that might be needed - error: () => {}, - debug: () => {}, - info: () => {}, - meta: { rollupVersion: '4.0.0', watchMode: false }, - }; - - const result = transform.call(context as never, code, id); - return result as TransformResult; - } - - /** - * Helper to initialize the plugin in build mode - */ - function initBuildMode() { - plugin = publicAssetPathPlugin(); - // Simulate Vite calling configResolved with build command - const configResolved = plugin.configResolved; - if (configResolved && typeof configResolved === 'function') { - configResolved.call(plugin as never, { command: 'build' } as never); - } - } - - /** - * Helper to initialize the plugin in dev mode - */ - function initDevMode(warnInDev = true) { - plugin = publicAssetPathPlugin({ warnInDev }); - // Simulate Vite calling configResolved with serve command - const configResolved = plugin.configResolved; - if (configResolved && typeof configResolved === 'function') { - configResolved.call(plugin as never, { command: 'serve' } as never); - } - } - - describe('build mode transformations', () => { - beforeEach(() => { - initBuildMode(); - }); - - test('transforms /src/web/public/ paths with single quotes', () => { - const code = `const logo = '/src/web/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const logo = '/public/logo.svg';`); - }); - - test('transforms /src/web/public/ paths with double quotes', () => { - const code = `const logo = "/src/web/public/logo.svg";`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const logo = "/public/logo.svg";`); - }); - - test('transforms /src/web/public/ paths with template literals', () => { - const code = 'const logo = `/src/web/public/logo.svg`;'; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe('const logo = `/public/logo.svg`;'); - }); - - test('transforms ./src/web/public/ paths', () => { - const code = `const logo = './src/web/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const logo = '/public/logo.svg';`); - }); - - test('transforms src/web/public/ paths (no leading slash or dot)', () => { - const code = `const logo = 'src/web/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const logo = '/public/logo.svg';`); - }); - - test('transforms ./public/ relative paths', () => { - const code = `const logo = './public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const logo = '/public/logo.svg';`); - }); - - test('transforms nested paths correctly', () => { - const code = `const icon = '/src/web/public/images/icons/arrow.svg';`; - const id = '/project/src/web/components/Icon.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const icon = '/public/images/icons/arrow.svg';`); - }); - - test('transforms multiple occurrences in same file', () => { - const code = ` -const logo = '/src/web/public/logo.svg'; -const icon = './src/web/public/icon.png'; -const bg = './public/background.jpg'; -`; - const id = '/project/src/web/components/Assets.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toContain(`const logo = '/public/logo.svg';`); - expect(result!.code).toContain(`const icon = '/public/icon.png';`); - expect(result!.code).toContain(`const bg = '/public/background.jpg';`); - }); - - test('does not transform already correct /public/ paths', () => { - const code = `const logo = '/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - // Should return null (no transformation needed) - expect(result).toBeNull(); - }); - - test('does not transform files outside src/web/', () => { - const code = `const path = '/src/web/public/logo.svg';`; - const id = '/project/src/server/utils.ts'; - - const result = callTransform(code, id); - - // Should return null (not in src/web/) - expect(result).toBeNull(); - }); - - test('does not transform code without matching patterns', () => { - const code = `const name = 'hello world';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - // Should return null (no patterns to transform) - expect(result).toBeNull(); - }); - - test('handles Windows-style paths in file id', () => { - const code = `const logo = '/src/web/public/logo.svg';`; - const id = 'C:\\project\\src\\web\\components\\Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const logo = '/public/logo.svg';`); - }); - - test('transforms paths in JSX attributes', () => { - const code = `Logo`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`Logo`); - }); - - test('transforms paths in object literals', () => { - const code = `const config = { thumbnail: '/src/web/public/thumb.svg' };`; - const id = '/project/src/web/config.ts'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const config = { thumbnail: '/public/thumb.svg' };`); - }); - - test('transforms paths in arrays', () => { - const code = `const images = ['/src/web/public/a.png', './src/web/public/b.png'];`; - const id = '/project/src/web/gallery.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const images = ['/public/a.png', '/public/b.png'];`); - }); - - test('does not transform unquoted CSS url(/public/...) without CDN', () => { - const code = `{ maskImage: "url(/public/logos/typefully.svg)" }`; - const id = '/project/src/web/components/Icon.tsx'; - - const result = callTransform(code, id); - - // Without CDN, url(/public/...) is already correct — no transformation - expect(result).toBeNull(); - }); - - test('transforms unquoted CSS url(./public/...) to url(/public/...)', () => { - const code = `{ backgroundImage: "url(./public/images/bg.png)" }`; - const id = '/project/src/web/components/Background.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`{ backgroundImage: "url(/public/images/bg.png)" }`); - }); - - test('transforms unquoted CSS url(/public/...) with CDN base URL', () => { - plugin = publicAssetPathPlugin({ cdnBaseUrl: 'https://cdn.example.com/deploy/client/' }); - const configResolved = plugin.configResolved; - if (configResolved && typeof configResolved === 'function') { - configResolved.call(plugin as never, { command: 'build' } as never); - } - - const code = `{ maskImage: "url(/public/logos/icon.svg)" }`; - const id = '/project/src/web/components/Icon.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe( - `{ maskImage: "url(https://cdn.example.com/deploy/client/logos/icon.svg)" }` - ); - }); - - test('transforms unquoted CSS url(./public/...) with CDN base URL', () => { - plugin = publicAssetPathPlugin({ cdnBaseUrl: 'https://cdn.example.com/deploy/client/' }); - const configResolved = plugin.configResolved; - if (configResolved && typeof configResolved === 'function') { - configResolved.call(plugin as never, { command: 'build' } as never); - } - - const code = `{ backgroundImage: "url(./public/images/bg.png)" }`; - const id = '/project/src/web/components/Background.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe( - `{ backgroundImage: "url(https://cdn.example.com/deploy/client/images/bg.png)" }` - ); - }); - - test('transforms multiple url(/public/...) with CDN in same file', () => { - plugin = publicAssetPathPlugin({ cdnBaseUrl: 'https://cdn.example.com/deploy/client/' }); - const configResolved = plugin.configResolved; - if (configResolved && typeof configResolved === 'function') { - configResolved.call(plugin as never, { command: 'build' } as never); - } - - const code = ` -const styles = { - maskImage: "url(/public/logos/a.svg)", - backgroundImage: "url(/public/images/bg.png)", -};`; - const id = '/project/src/web/components/Styled.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toContain('url(https://cdn.example.com/deploy/client/logos/a.svg)'); - expect(result!.code).toContain('url(https://cdn.example.com/deploy/client/images/bg.png)'); - }); - - test('does not transform quoted CSS url("/public/...") without CDN', () => { - const code = `{ maskImage: 'url("/public/logos/icon.svg")' }`; - const id = '/project/src/web/components/Icon.tsx'; - - const result = callTransform(code, id); - - // Without CDN, url("/public/...") is already correct — no transformation - expect(result).toBeNull(); - }); - }); - - describe('dev mode behavior', () => { - test('warns but does not transform in dev mode with warnInDev=true', () => { - initDevMode(true); - - const code = `const logo = '/src/web/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const warnings: string[] = []; - const result = callTransform(code, id, (msg) => warnings.push(msg)); - - // Should return null (no transformation in dev mode) - expect(result).toBeNull(); - // Should have warned - expect(warnings.length).toBe(1); - expect(warnings[0]).toContain('src/web/public/'); - expect(warnings[0]).toContain('/public/'); - }); - - test('does not warn when warnInDev=false', () => { - initDevMode(false); - - const code = `const logo = '/src/web/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const warnings: string[] = []; - const result = callTransform(code, id, (msg) => warnings.push(msg)); - - // Should return null (no transformation) - expect(result).toBeNull(); - // Should not have warned - expect(warnings.length).toBe(0); - }); - - test('warns only once per file per pattern type', () => { - initDevMode(true); - - const code1 = `const a = '/src/web/public/a.svg';`; - const code2 = `const b = '/src/web/public/b.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const warnings: string[] = []; - const warnFn = (msg: string) => warnings.push(msg); - - // First call should warn - callTransform(code1, id, warnFn); - expect(warnings.length).toBe(1); - - // Second call with same file should not warn again for same pattern - callTransform(code2, id, warnFn); - expect(warnings.length).toBe(1); - }); - - test('warns only about incorrect source paths, not valid ./public/ paths', () => { - initDevMode(true); - - const code = ` -const a = '/src/web/public/a.svg'; -const b = './public/b.svg'; -`; - const id = '/project/src/web/components/Header.tsx'; - - const warnings: string[] = []; - callTransform(code, id, (msg) => warnings.push(msg)); - - // Should only warn about incorrect source paths (src/web/public/) - // ./public/ is a valid pattern and should not be warned about - expect(warnings.length).toBe(1); - expect(warnings[0]).toContain('src/web/public/'); - }); - }); - - describe('edge cases', () => { - beforeEach(() => { - initBuildMode(); - }); - - test('handles empty code', () => { - const code = ''; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).toBeNull(); - }); - - test('handles code with only whitespace', () => { - const code = ' \n\t '; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).toBeNull(); - }); - - test('does not transform when pattern is not at string start', () => { - // The regex requires the pattern to be right after the opening quote - // This string has text before the pattern, so it won't match - const code = `const text = 'Check the src/web/public/ folder';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - // The quick check passes (string contains 'src/web/public/') - // but the regex doesn't match because there's text between quote and pattern - // So no transformation occurs - expect(result).toBeNull(); - }); - - test('transforms when pattern is at string start', () => { - // When the pattern is right after the quote, it matches - const code = `const path = 'src/web/public/logo.svg';`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toBe(`const path = '/public/logo.svg';`); - }); - - test('handles mixed correct and incorrect paths', () => { - const code = ` -const correct = '/public/logo.svg'; -const incorrect = '/src/web/public/icon.svg'; -`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toContain(`const correct = '/public/logo.svg';`); - expect(result!.code).toContain(`const incorrect = '/public/icon.svg';`); - }); - - test('preserves surrounding code', () => { - const code = ` -// Comment before -const logo = '/src/web/public/logo.svg'; -// Comment after -export default logo; -`; - const id = '/project/src/web/components/Header.tsx'; - - const result = callTransform(code, id); - - expect(result).not.toBeNull(); - expect(result!.code).toContain('// Comment before'); - expect(result!.code).toContain('// Comment after'); - expect(result!.code).toContain('export default logo;'); - }); - }); - - describe('plugin metadata', () => { - test('has correct name', () => { - const plugin = publicAssetPathPlugin(); - expect(plugin.name).toBe('agentuity:public-asset-path'); - }); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/registry-generator.test.ts b/packages/cli/test/cmd/build/vite/registry-generator.test.ts deleted file mode 100644 index 81c0e27d8..000000000 --- a/packages/cli/test/cmd/build/vite/registry-generator.test.ts +++ /dev/null @@ -1,367 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, rmSync, existsSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { generateAgentRegistry } from '../../../../src/cmd/build/vite/registry-generator'; -import type { AgentMetadata } from '../../../../src/cmd/build/vite/agent-discovery'; - -describe('registry-generator', () => { - let testDir: string; - let srcDir: string; - let generatedDir: string; - - beforeEach(() => { - // Create unique temp directory for each test - testDir = join(tmpdir(), `registry-gen-test-${Date.now()}-${Math.random()}`); - srcDir = join(testDir, 'src'); - generatedDir = join(srcDir, 'generated'); - mkdirSync(srcDir, { recursive: true }); - }); - - afterEach(() => { - // Clean up temp directory - if (testDir) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - describe('generateAgentRegistry', () => { - test('should generate registry for single agent', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/test.ts', - name: 'test-agent', - id: 'agentid_abc123', - agentId: 'agent_xyz789', - version: 'v1', - description: 'Test agent', - inputSchemaCode: 'z.object({ name: z.string() })', - outputSchemaCode: 'z.object({ greeting: z.string() })', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const registryPath = join(generatedDir, 'registry.ts'); - expect(existsSync(registryPath)).toBe(true); - - const registryContent = await Bun.file(registryPath).text(); - expect(registryContent).toContain('import testAgent from'); - expect(registryContent).toContain('testAgent'); - expect(registryContent).toContain('export type TestAgentAgent'); - }); - - test('should generate registry for multiple agents', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/first.ts', - name: 'first-agent', - id: 'agentid_1', - agentId: 'agent_1', - version: 'v1', - }, - { - filename: './agent/second.ts', - name: 'second-agent', - id: 'agentid_2', - agentId: 'agent_2', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const registryPath = join(generatedDir, 'registry.ts'); - const registryContent = await Bun.file(registryPath).text(); - - expect(registryContent).toContain('import firstAgent from'); - expect(registryContent).toContain('import secondAgent from'); - expect(registryContent).toContain('firstAgent'); - expect(registryContent).toContain('secondAgent'); - }); - - test('should convert kebab-case names to camelCase', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/my-cool-agent.ts', - name: 'my-cool-agent', - id: 'agentid_1', - agentId: 'agent_1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const registryPath = join(generatedDir, 'registry.ts'); - const registryContent = await Bun.file(registryPath).text(); - - expect(registryContent).toContain('myCoolAgent'); - expect(registryContent).toContain('export type MyCoolAgentAgent'); - }); - - test('should throw error on naming collision', () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/test-agent.ts', - name: 'test-agent', - id: 'agentid_1', - agentId: 'agent_1', - version: 'v1', - }, - { - filename: './agent/testAgent.ts', - name: 'testAgent', - id: 'agentid_2', - agentId: 'agent_2', - version: 'v1', - }, - ]; - - expect(() => { - generateAgentRegistry(srcDir, agents); - }).toThrow(); - }); - - test('should include AgentRegistry augmentation', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/test.ts', - name: 'test-agent', - id: 'agentid_1', - agentId: 'agent_1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const registryPath = join(generatedDir, 'registry.ts'); - const registryContent = await Bun.file(registryPath).text(); - - expect(registryContent).toContain('declare module "@agentuity/runtime"'); - expect(registryContent).toContain('export interface AgentRegistry'); - }); - - test('should remove legacy types.generated.d.ts if it exists', async () => { - // Create legacy types file - const agentDir = join(srcDir, 'agent'); - mkdirSync(agentDir, { recursive: true }); - const legacyTypesPath = join(agentDir, 'types.generated.d.ts'); - await Bun.write(legacyTypesPath, '// legacy types'); - - const agents: AgentMetadata[] = [ - { - filename: './agent/test.ts', - name: 'test-agent', - id: 'agentid_1', - agentId: 'agent_1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - // Legacy file should be removed - expect(existsSync(legacyTypesPath)).toBe(false); - }); - }); - - describe('generateAgentRegistry edge cases', () => { - test('should handle empty agents list (boundary condition)', async () => { - const agents: AgentMetadata[] = []; - - generateAgentRegistry(srcDir, agents); - - const registryPath = join(generatedDir, 'registry.ts'); - expect(existsSync(registryPath)).toBe(true); - - const content = await Bun.file(registryPath).text(); - - // Still has module augmentation and AgentDefinitions - expect(content).toContain('export const AgentDefinitions = {'); - expect(content).toContain('declare module "@agentuity/runtime"'); - }); - - test('should rewrite src/agent and .tsx imports correctly', async () => { - const agents: AgentMetadata[] = [ - { - filename: 'src/agent/foo.tsx', - name: 'foo-agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - expect(content).toContain("import fooAgent from '../agent/foo.js';"); - }); - - test('should detect collisions after stripping punctuation and whitespace', () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/my-agent.ts', - name: 'my-agent', - id: '1', - agentId: 'a1', - version: 'v1', - }, - { - filename: './agent/my_agent.ts', - name: 'my_agent', - id: '2', - agentId: 'a2', - version: 'v1', - }, - ]; - - expect(() => generateAgentRegistry(srcDir, agents)).toThrow(); - }); - - test('should include agent description in JSDoc', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/documented.ts', - name: 'documented-agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - description: 'This agent does something important', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - expect(content).toContain('This agent does something important'); - }); - - test('should generate InferInput and InferOutput types', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/typed.ts', - name: 'typed-agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - inputSchemaCode: 'z.object({ name: z.string() })', - outputSchemaCode: 'z.object({ result: z.boolean() })', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - expect(content).toContain('export type TypedAgentInput = InferInput<'); - expect(content).toContain('export type TypedAgentOutput = InferOutput<'); - expect(content).toContain('export type TypedAgentInputSchema = typeof typedAgent'); - expect(content).toContain('export type TypedAgentOutputSchema = typeof typedAgent'); - }); - - test('should handle agent names with multiple consecutive hyphens', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/multi-hyphen.ts', - name: 'multi--hyphen---agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - // Should handle multiple hyphens gracefully - expect(content).toContain('multiHyphenAgent'); - }); - - test('should handle agent names with leading/trailing hyphens', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/edge-case.ts', - name: '-leading-agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - // Should handle leading hyphen gracefully - expect(content).toContain('leadingAgent'); - }); - - test('should handle deeply nested agent paths', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/deep/nested/path/agent.ts', - name: 'deep-agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - expect(content).toContain("import deepAgent from '../agent/deep/nested/path/agent.js';"); - }); - - test('should handle agent names starting with digits (produces valid identifier)', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/123-agent.ts', - name: '123-agent', - id: 'id1', - agentId: 'agent1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - // Identifier should NOT start with a digit (invalid in JS/TS) - // toCamelCase prefixes with underscore: '123-agent' -> '_123Agent' - expect(content).not.toMatch(/import\s+\d+\w*\s+from/); - expect(content).toContain('import _123Agent from'); - expect(content).toContain('export type _123AgentAgent'); - }); - - test('should handle numeric-only agent names', async () => { - const agents: AgentMetadata[] = [ - { - filename: './agent/123.ts', - name: '123', - id: 'id1', - agentId: 'agent1', - version: 'v1', - }, - ]; - - generateAgentRegistry(srcDir, agents); - - const content = await Bun.file(join(generatedDir, 'registry.ts')).text(); - - // Pure numeric names should also produce valid identifiers - // toCamelCase prefixes with underscore: '123' -> '_123' - expect(content).not.toMatch(/import\s+\d+\s+from/); - expect(content).toContain('import _123 from'); - expect(content).toContain('export type _123Agent'); - }); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/route-discovery.test.ts b/packages/cli/test/cmd/build/vite/route-discovery.test.ts deleted file mode 100644 index 2f3382882..000000000 --- a/packages/cli/test/cmd/build/vite/route-discovery.test.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { - detectRouteConflicts, - extractPathParams, - generateRouteId, -} from '../../../../src/cmd/build/vite/route-discovery'; - -describe('extractPathParams', () => { - test('should extract basic path params', () => { - expect(extractPathParams('/api/users/:id')).toEqual(['id']); - }); - - test('should extract multiple path params', () => { - expect(extractPathParams('/api/users/:userId/posts/:postId')).toEqual(['userId', 'postId']); - }); - - test('should extract optional path params', () => { - expect(extractPathParams('/api/users/:id?')).toEqual(['id']); - }); - - test('should extract wildcard path params', () => { - expect(extractPathParams('/api/*path')).toEqual(['path']); - }); - - test('should return empty array for no params', () => { - expect(extractPathParams('/api/users')).toEqual([]); - }); - - test('should handle root path', () => { - expect(extractPathParams('/')).toEqual([]); - }); - - test('should handle mixed params and static segments', () => { - expect(extractPathParams('/api/:version/users/:id/profile')).toEqual(['version', 'id']); - }); -}); - -describe('generateRouteId', () => { - test('should use route_ prefix (matching platform format)', () => { - const id = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - expect(id).toMatch(/^route_[0-9a-f]{40}$/); - }); - - test('should produce deterministic IDs', () => { - const a = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - const b = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - expect(a).toBe(b); - }); - - test('should produce different IDs for different paths', () => { - const a = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - const b = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/world', - 'v1' - ); - expect(a).not.toBe(b); - }); - - test('should produce different IDs for different methods', () => { - const a = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - const b = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'post', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - expect(a).not.toBe(b); - }); - - test('should produce different IDs for different deployments', () => { - const a = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - const b = generateRouteId( - 'proj_1', - 'deploy_2', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - expect(a).not.toBe(b); - }); - - test('should produce different IDs for different route types', () => { - const a = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - const b = generateRouteId( - 'proj_1', - 'deploy_1', - 'websocket', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - expect(a).not.toBe(b); - }); - - test('should produce different IDs for different versions', () => { - const a = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v1' - ); - const b = generateRouteId( - 'proj_1', - 'deploy_1', - 'api', - 'get', - 'src/api/index.ts', - '/api/hello', - 'v2' - ); - expect(a).not.toBe(b); - }); - - test('should match platform SHA1 hash format with lowercase method', () => { - // Platform (main branch ast.ts) uses lowercase HTTP methods: 'get', 'post', etc. - // The hash is SHA1 of each component updated separately: - // projectId, deploymentId, type, method, filename, path, version - // This test uses real values from a production error to verify exact compatibility. - const id = generateRouteId( - 'proj_5ed7da797bef771d65e1bd6946a052b1', - 'deploy_c447ff41f3681baa53d7e306bfa3b595', - 'api', - 'get', - 'src/api/index.ts', - '/api/agent-calls', - '93e74f74c76216e5' - ); - expect(id).toBe('route_243d777fa53d9769d5f146862131650cb0b774f3'); - }); -}); - -describe('detectRouteConflicts', () => { - test('should detect duplicate routes', () => { - const routes = [ - { method: 'GET', path: '/api/hello', filename: 'a.ts' }, - { method: 'GET', path: '/api/hello', filename: 'b.ts' }, - ]; - const conflicts = detectRouteConflicts(routes); - expect(conflicts).toHaveLength(1); - expect(conflicts[0].type).toBe('duplicate'); - }); - - test('should allow same path with different methods', () => { - const routes = [ - { method: 'GET', path: '/api/hello', filename: 'a.ts' }, - { method: 'POST', path: '/api/hello', filename: 'a.ts' }, - ]; - const conflicts = detectRouteConflicts(routes); - expect(conflicts).toHaveLength(0); - }); - - test('should detect duplicate methods with different cases', () => { - const routes = [ - { method: 'get', path: '/api/hello', filename: 'a.ts' }, - { method: 'GET', path: '/api/hello', filename: 'b.ts' }, - ]; - const conflicts = detectRouteConflicts(routes); - expect(conflicts).toHaveLength(1); - }); - - test('should return empty for no conflicts', () => { - const routes = [ - { method: 'GET', path: '/api/hello', filename: 'a.ts' }, - { method: 'GET', path: '/api/world', filename: 'b.ts' }, - ]; - const conflicts = detectRouteConflicts(routes); - expect(conflicts).toHaveLength(0); - }); - - test('should return empty for empty routes', () => { - expect(detectRouteConflicts([])).toHaveLength(0); - }); -}); diff --git a/packages/cli/test/cmd/build/vite/workbench-dev-only.test.ts b/packages/cli/test/cmd/build/vite/workbench-dev-only.test.ts deleted file mode 100644 index dc39ddfc1..000000000 --- a/packages/cli/test/cmd/build/vite/workbench-dev-only.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Test that workbench is excluded from production builds - * and uses config from createApp() in app.ts (v2 approach) - */ -import { test, expect, describe } from 'bun:test'; -import { getWorkbenchConfig } from '../../../../src/cmd/build/vite/config-loader'; -import type { ExtractedAppConfig } from '../../../../src/cmd/build/app-config-extractor'; - -describe('Workbench Config (v2)', () => { - test('workbench is enabled in dev mode when workbench is in createApp()', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: { - route: '/workbench', - }, - }; - - const result = getWorkbenchConfig(true, runtimeConfig); // dev = true - - expect(result.enabled).toBe(true); - expect(result.route).toBe('/workbench'); - }); - - test('workbench is disabled in production even when workbench is in createApp()', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: { - route: '/workbench', - }, - }; - - const result = getWorkbenchConfig(false, runtimeConfig); // dev = false (production) - - expect(result.enabled).toBe(false); // CRITICAL: must be false in production - }); - - test('workbench is enabled in dev when workbench is boolean true', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: true, - }; - - const devResult = getWorkbenchConfig(true, runtimeConfig); - const prodResult = getWorkbenchConfig(false, runtimeConfig); - - expect(devResult.enabled).toBe(true); - expect(prodResult.enabled).toBe(false); - }); - - test('workbench is enabled in dev when workbench is string route', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: '/custom-workbench', - }; - - const result = getWorkbenchConfig(true, runtimeConfig); - - expect(result.enabled).toBe(true); - expect(result.route).toBe('/custom-workbench'); - }); - - test('workbench is disabled when not in createApp()', () => { - const runtimeConfig: ExtractedAppConfig = { - // No workbench config - }; - - const devResult = getWorkbenchConfig(true, runtimeConfig); - const prodResult = getWorkbenchConfig(false, runtimeConfig); - - // Disabled in both because workbench config is absent - expect(devResult.enabled).toBe(false); - expect(prodResult.enabled).toBe(false); - }); - - test('workbench is disabled when runtimeConfig is undefined', () => { - const devResult = getWorkbenchConfig(true, undefined); - const prodResult = getWorkbenchConfig(false, undefined); - - expect(devResult.enabled).toBe(false); - expect(prodResult.enabled).toBe(false); - }); - - test('workbench uses default route when workbench is empty object', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: {}, // No route specified - }; - - const result = getWorkbenchConfig(true, runtimeConfig); - - expect(result.enabled).toBe(true); - expect(result.route).toBe('/workbench'); // Default route - }); - - test('workbench respects custom route in object', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: { - route: '/custom-workbench', - }, - }; - - const result = getWorkbenchConfig(true, runtimeConfig); - - expect(result.enabled).toBe(true); - expect(result.route).toBe('/custom-workbench'); - }); - - test('workbench respects custom headers', () => { - const runtimeConfig: ExtractedAppConfig = { - workbench: { - headers: { - 'X-Custom-Header': 'value', - }, - }, - }; - - const result = getWorkbenchConfig(true, runtimeConfig); - - expect(result.enabled).toBe(true); - expect(result.headers).toEqual({ 'X-Custom-Header': 'value' }); - }); -}); diff --git a/packages/cli/test/cmd/cloud/region-requirements.test.ts b/packages/cli/test/cmd/cloud/region-requirements.test.ts deleted file mode 100644 index b24e95961..000000000 --- a/packages/cli/test/cmd/cloud/region-requirements.test.ts +++ /dev/null @@ -1,272 +0,0 @@ -import { describe, test, expect } from 'bun:test'; - -import { listSubcommand as threadListSubcommand } from '../../../src/cmd/cloud/thread/list'; -import { getSubcommand as threadGetSubcommand } from '../../../src/cmd/cloud/thread/get'; -import { deleteSubcommand as threadDeleteSubcommand } from '../../../src/cmd/cloud/thread/delete'; -import { deleteSubcommand as taskDeleteSubcommand } from '../../../src/cmd/cloud/task/delete'; -import { listSubcommand as sessionListSubcommand } from '../../../src/cmd/cloud/session/list'; -import { getSubcommand as sessionGetSubcommand } from '../../../src/cmd/cloud/session/get'; -import { listSubcommand as dbListSubcommand } from '../../../src/cmd/cloud/db/list'; -import { getSubcommand as dbGetSubcommand } from '../../../src/cmd/cloud/db/get'; -import { deleteSubcommand as dbDeleteSubcommand } from '../../../src/cmd/cloud/db/delete'; -import { logsSubcommand as dbLogsSubcommand } from '../../../src/cmd/cloud/db/logs'; -import { listSubcommand as storageListSubcommand } from '../../../src/cmd/cloud/storage/list'; -import { getSubcommand as storageGetSubcommand } from '../../../src/cmd/cloud/storage/get'; -import { deleteSubcommand as storageDeleteSubcommand } from '../../../src/cmd/cloud/storage/delete'; -import { uploadSubcommand as storageUploadSubcommand } from '../../../src/cmd/cloud/storage/upload'; -import { downloadSubcommand as storageDownloadSubcommand } from '../../../src/cmd/cloud/storage/download'; -import { command as sandboxCommand } from '../../../src/cmd/cloud/sandbox'; -import { listSubcommand as sandboxListSubcommand } from '../../../src/cmd/cloud/sandbox/list'; -import { getSubcommand as sandboxGetSubcommand } from '../../../src/cmd/cloud/sandbox/get'; -import { deleteSubcommand as sandboxDeleteSubcommand } from '../../../src/cmd/cloud/sandbox/delete'; -import { createSubcommand as sandboxCreateSubcommand } from '../../../src/cmd/cloud/sandbox/create'; -import { runSubcommand as sandboxRunSubcommand } from '../../../src/cmd/cloud/sandbox/run'; -import { execSubcommand as sandboxExecSubcommand } from '../../../src/cmd/cloud/sandbox/exec'; -import { envSubcommand as sandboxEnvSubcommand } from '../../../src/cmd/cloud/sandbox/env'; -import { lsSubcommand as sandboxLsSubcommand } from '../../../src/cmd/cloud/sandbox/ls'; -import { uploadSubcommand as sandboxUploadSubcommand } from '../../../src/cmd/cloud/sandbox/upload'; -import { downloadSubcommand as sandboxDownloadSubcommand } from '../../../src/cmd/cloud/sandbox/download'; -import { runtimeCommand as sandboxRuntimeCommand } from '../../../src/cmd/cloud/sandbox/runtime'; -import { snapshotCommand as sandboxSnapshotCommand } from '../../../src/cmd/cloud/sandbox/snapshot'; -import { sshSubcommand } from '../../../src/cmd/cloud/ssh'; -import { uploadCommand as scpUploadCommand } from '../../../src/cmd/cloud/scp/upload'; -import { downloadCommand as scpDownloadCommand } from '../../../src/cmd/cloud/scp/download'; -import { initSubcommand as projectAuthInitSubcommand } from '../../../src/cmd/project/auth/init'; - -describe('Global Database Commands - No Region Required', () => { - describe('Thread Commands', () => { - test('thread list does not require region', () => { - const requires = threadListSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - }); - - test('thread get does not require region', () => { - const requires = threadGetSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - }); - - test('thread delete does not require region', () => { - const requires = threadDeleteSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - }); - }); - - describe('Session Commands', () => { - test('session list does not require region', () => { - const requires = sessionListSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - }); - - test('session get does not require region', () => { - const requires = sessionGetSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - }); - }); - - describe('Task Commands', () => { - test('task delete does not require region', () => { - const requires = taskDeleteSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - }); - - test('task delete has destructive tag', () => { - expect(taskDeleteSubcommand.tags).toContain('destructive'); - expect(taskDeleteSubcommand.tags).toContain('deletes-resource'); - }); - }); - - describe('Database Commands', () => { - test('db list does not require region', () => { - const requires = dbListSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is not required - auto-discovered from resource - }); - - test('db get does not require region', () => { - const requires = dbGetSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is not required - auto-discovered from resource - }); - - test('db delete does not require region', () => { - const requires = dbDeleteSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is not required - auto-discovered from resource - }); - - test('db logs does not require region', () => { - const requires = dbLogsSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is not required - auto-discovered from resource - }); - }); - - describe('Storage Commands', () => { - test('storage list does not require region', () => { - const requires = storageListSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is not in subcommand requires - parent command or runtime handles org discovery - }); - - test('storage get does not require region or org (auto-discovered)', () => { - const requires = storageGetSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is optional - auto-discovered from resource name via cache or API - }); - - test('storage delete does not require region or org (auto-discovered)', () => { - const requires = storageDeleteSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is optional - auto-discovered from resource name via cache or API - }); - - test('storage upload does not require region or org (auto-discovered)', () => { - const requires = storageUploadSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is optional - auto-discovered from resource name via cache or API - }); - - test('storage download does not require region or org (auto-discovered)', () => { - const requires = storageDownloadSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is optional - auto-discovered from resource name via cache or API - }); - }); - - describe('Sandbox Commands', () => { - test('sandbox parent command does not require region', () => { - const requires = sandboxCommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - expect(requires?.org).toBe(true); - }); - - test('sandbox list does not require region', () => { - const requires = sandboxListSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is inherited from parent sandbox command, not set on subcommand - }); - - test('sandbox get does not require region', () => { - const requires = sandboxGetSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox delete does not require region', () => { - const requires = sandboxDeleteSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox exec does not require region', () => { - const requires = sandboxExecSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox env does not require region', () => { - const requires = sandboxEnvSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox ls does not require region', () => { - const requires = sandboxLsSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox upload does not require region', () => { - const requires = sandboxUploadSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox download does not require region', () => { - const requires = sandboxDownloadSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - // org is auto-discovered via sandboxResolve - }); - - test('sandbox runtime parent command does not require region', () => { - const requires = sandboxRuntimeCommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - }); - - test('sandbox snapshot parent command does not require region', () => { - const requires = sandboxSnapshotCommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - }); - - // These commands should KEEP region requirement (creating new resources) - test('sandbox create REQUIRES region (creating new resource)', () => { - const requires = sandboxCreateSubcommand.requires as Record | undefined; - expect(requires?.region).toBe(true); - expect(requires?.auth).toBe(true); - expect(requires?.org).toBe(true); - }); - - test('sandbox run REQUIRES region (creating new resource)', () => { - const requires = sandboxRunSubcommand.requires as Record | undefined; - expect(requires?.region).toBe(true); - expect(requires?.auth).toBe(true); - expect(requires?.org).toBe(true); - }); - }); - - describe('SSH/SCP Commands', () => { - test('ssh does not require region (auto-lookup)', () => { - const requires = sshSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - expect(requires?.apiClient).toBe(true); - }); - - test('scp upload does not require region (auto-lookup)', () => { - const requires = scpUploadCommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - expect(requires?.apiClient).toBe(true); - }); - - test('scp download does not require region (auto-lookup)', () => { - const requires = scpDownloadCommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - expect(requires?.apiClient).toBe(true); - }); - }); - - describe('Project Commands', () => { - test('project auth init does not require region', () => { - const requires = projectAuthInitSubcommand.requires as Record | undefined; - expect(requires?.region).toBeUndefined(); - expect(requires?.auth).toBe(true); - expect(requires?.org).toBe(true); - }); - }); -}); diff --git a/packages/cli/test/cmd/cloud/region.test.ts b/packages/cli/test/cmd/cloud/region.test.ts index 763844b1f..b26c8aabe 100644 --- a/packages/cli/test/cmd/cloud/region.test.ts +++ b/packages/cli/test/cmd/cloud/region.test.ts @@ -13,7 +13,7 @@ describe('cloud region commands', () => { test('should have subcommands', () => { expect(regionSubcommand.subcommands).toBeDefined(); - expect(regionSubcommand.subcommands?.length).toBe(3); + expect(regionSubcommand.subcommands?.length).toBe(4); }); test('should have examples', () => { diff --git a/packages/cli/test/cmd/dev/dev-lock.test.ts b/packages/cli/test/cmd/dev/dev-lock.test.ts deleted file mode 100644 index 77b9307c2..000000000 --- a/packages/cli/test/cmd/dev/dev-lock.test.ts +++ /dev/null @@ -1,371 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { join, dirname } from 'node:path'; -import { mkdirSync, rmSync, existsSync, writeFileSync, readFileSync } from 'node:fs'; -import { tmpdir } from 'node:os'; -import { randomUUID } from 'node:crypto'; - -// We need to test the dev-lock module -// Import path will be relative to this test file -const devLockPath = join(import.meta.dir, '../../../src/cmd/dev/dev-lock.ts'); - -describe('DevLockManager', () => { - let testDir: string; - let mockLogger: { - debug: (...args: unknown[]) => void; - warn: (...args: unknown[]) => void; - error: (...args: unknown[]) => void; - }; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-lock-test-${Date.now()}-${randomUUID()}`); - mkdirSync(testDir, { recursive: true }); - - mockLogger = { - debug: () => {}, - warn: () => {}, - error: () => {}, - }; - }); - - afterEach(async () => { - // Clean up test directory - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore - } - - // Clear module cache for dev-lock to avoid state leaking between tests - // This is important because dev-lock uses module-level globals - }); - - describe('prepareDevLock', () => { - test('creates a new lockfile when none exists', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - expect(lock).toBeDefined(); - expect(lock.state).toBeDefined(); - expect(lock.state.version).toBe(1); - expect(lock.state.projectRoot).toBe(testDir); - expect(lock.state.mainPid).toBe(process.pid); - expect(lock.state.ports.bun).toBe(3500); - expect(lock.state.instanceId).toBeDefined(); - expect(lock.state.createdAt).toBeDefined(); - - // Verify lockfile exists - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - expect(existsSync(lockPath)).toBe(true); - - // Cleanup - await lock.release(); - }); - - test('cleans up stale lockfile from previous session', async () => { - const { prepareDevLock } = await import(devLockPath); - - // Create a stale lockfile with a non-existent PID - const staleLockPath = join(testDir, '.agentuity', 'devserver.lock'); - mkdirSync(dirname(staleLockPath), { recursive: true }); - - const staleLock = { - version: 1, - projectRoot: testDir, - mainPid: 99999999, // Non-existent PID - instanceId: randomUUID(), - createdAt: new Date(Date.now() - 3600000).toISOString(), // 1 hour ago - updatedAt: new Date(Date.now() - 1800000).toISOString(), // 30 min ago - ports: { bun: 3500 }, - children: [], - }; - - writeFileSync(staleLockPath, JSON.stringify(staleLock, null, 2)); - - // PrepareDevLock should clean up the stale lock - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - // Should have created a new lock with our PID - expect(lock.state.mainPid).toBe(process.pid); - expect(lock.state.instanceId).not.toBe(staleLock.instanceId); - - await lock.release(); - }); - - test('replaces existing lockfile when process is still running', async () => { - const { prepareDevLock } = await import(devLockPath); - - // Create a lockfile with our own PID (simulating a "running" process) - const existingLockPath = join(testDir, '.agentuity', 'devserver.lock'); - mkdirSync(dirname(existingLockPath), { recursive: true }); - - const existingLock = { - version: 1, - projectRoot: testDir, - mainPid: process.pid, // Same PID = same process - instanceId: randomUUID(), - createdAt: new Date().toISOString(), - updatedAt: new Date().toISOString(), - ports: { bun: 3500 }, - children: [], - }; - - writeFileSync(existingLockPath, JSON.stringify(existingLock, null, 2)); - - // Should still work (replaces the existing lock) - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - expect(lock.state.mainPid).toBe(process.pid); - expect(lock.state.instanceId).not.toBe(existingLock.instanceId); - - await lock.release(); - }); - }); - - describe('lock management', () => { - test('registerChild adds child process to lockfile', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - await lock.registerChild({ - pid: 12345, - type: 'gravity', - description: 'Gravity tunnel process', - }); - - expect(lock.state.children).toHaveLength(1); - expect(lock.state.children[0]?.pid).toBe(12345); - expect(lock.state.children[0]?.type).toBe('gravity'); - - // Verify it was written to disk - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - const raw = readFileSync(lockPath, 'utf8'); - const parsed = JSON.parse(raw); - expect(parsed.children).toHaveLength(1); - - await lock.release(); - }); - - test('registerChild ignores duplicate PIDs', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - await lock.registerChild({ pid: 12345, type: 'gravity' }); - await lock.registerChild({ pid: 12345, type: 'gravity' }); // Duplicate - - expect(lock.state.children).toHaveLength(1); - - await lock.release(); - }); - - test('updatePorts updates port information', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - await lock.updatePorts({ vite: 3502, gravity: 3503 }); - - expect(lock.state.ports.bun).toBe(3500); - expect(lock.state.ports.vite).toBe(3502); - expect(lock.state.ports.gravity).toBe(3503); - - await lock.release(); - }); - - test('release removes the lockfile', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - expect(existsSync(lockPath)).toBe(true); - - await lock.release(); - - expect(existsSync(lockPath)).toBe(false); - }); - }); - - describe('lockfile format', () => { - test('lockfile is valid JSON with expected structure', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - const raw = readFileSync(lockPath, 'utf8'); - const parsed = JSON.parse(raw); - - // Verify all expected fields - expect(parsed.version).toBe(1); - expect(parsed.projectRoot).toBe(testDir); - expect(typeof parsed.mainPid).toBe('number'); - expect(typeof parsed.instanceId).toBe('string'); - expect(typeof parsed.createdAt).toBe('string'); - expect(typeof parsed.updatedAt).toBe('string'); - expect(typeof parsed.ports).toBe('object'); - expect(Array.isArray(parsed.children)).toBe(true); - - await lock.release(); - }); - - test('updatedAt is refreshed on each write', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - const firstUpdatedAt = lock.state.updatedAt; - - // Wait a bit to ensure timestamp difference - await new Promise((r) => setTimeout(r, 10)); - - await lock.updatePorts({ vite: 3502 }); - - expect(lock.state.updatedAt).not.toBe(firstUpdatedAt); - - await lock.release(); - }); - }); - - describe('edge cases', () => { - test('handles missing .agentuity directory', async () => { - const { prepareDevLock } = await import(devLockPath); - - // testDir exists but .agentuity does not - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - expect(existsSync(join(testDir, '.agentuity'))).toBe(true); - - await lock.release(); - }); - - test('handles corrupted lockfile gracefully', async () => { - const { prepareDevLock } = await import(devLockPath); - - // Write invalid JSON - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - mkdirSync(dirname(lockPath), { recursive: true }); - writeFileSync(lockPath, 'not valid json {{{'); - - // Should not throw - should clean up and create new lock - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - expect(lock).toBeDefined(); - expect(lock.state.mainPid).toBe(process.pid); - - await lock.release(); - }); - - test('handles lockfile with wrong version', async () => { - const { prepareDevLock } = await import(devLockPath); - - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - mkdirSync(dirname(lockPath), { recursive: true }); - - const oldLock = { - version: 999, // Unknown version - projectRoot: testDir, - }; - writeFileSync(lockPath, JSON.stringify(oldLock)); - - // Should treat as invalid and create new lock - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - expect(lock.state.version).toBe(1); - - await lock.release(); - }); - }); -}); - -describe('releaseLockSync', () => { - let testDir: string; - let mockLogger: { - debug: () => void; - warn: () => void; - error: () => void; - }; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-lock-sync-test-${Date.now()}`); - mkdirSync(testDir, { recursive: true }); - mockLogger = { debug: () => {}, warn: () => {}, error: () => {} }; - }); - - afterEach(() => { - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore - } - }); - - test('removes lockfile synchronously', async () => { - const { prepareDevLock, releaseLockSync } = await import(devLockPath); - - await prepareDevLock(testDir, 3500, mockLogger); - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - - expect(existsSync(lockPath)).toBe(true); - - releaseLockSync(testDir); - - expect(existsSync(lockPath)).toBe(false); - }); - - test('does not throw if lockfile does not exist', async () => { - const { releaseLockSync } = await import(devLockPath); - - // Should not throw - expect(() => releaseLockSync(testDir)).not.toThrow(); - }); -}); - -describe('cleanupLockfile', () => { - let testDir: string; - let mockLogger: { - debug: () => void; - warn: () => void; - error: () => void; - }; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-lock-cleanup-test-${Date.now()}`); - mkdirSync(testDir, { recursive: true }); - mockLogger = { debug: () => {}, warn: () => {}, error: () => {} }; - }); - - afterEach(() => { - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore - } - }); - - test('removes lockfile and kills referenced processes', async () => { - const { prepareDevLock, cleanupLockfile } = await import(devLockPath); - - // Create a lock with a fake child process (PID that doesn't exist) - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - // Manually add a non-existent child PID - lock.state.children.push({ - pid: 99999998, - type: 'gravity', - description: 'Test child', - }); - - await lock.release(); - - // Re-create the lockfile with the child - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - writeFileSync(lockPath, JSON.stringify(lock.state, null, 2)); - - // cleanupLockfile should handle this without throwing - await cleanupLockfile(testDir, mockLogger); - - expect(existsSync(lockPath)).toBe(false); - }); -}); diff --git a/packages/cli/test/cmd/dev/dev-server-integration.test.ts b/packages/cli/test/cmd/dev/dev-server-integration.test.ts deleted file mode 100644 index 224350c7c..000000000 --- a/packages/cli/test/cmd/dev/dev-server-integration.test.ts +++ /dev/null @@ -1,727 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { join, dirname } from 'node:path'; -import { mkdirSync, rmSync, writeFileSync, existsSync, readFileSync } from 'node:fs'; -import { tmpdir } from 'node:os'; -import { randomUUID } from 'node:crypto'; -import { createServer, type Server } from 'node:net'; - -/** - * Integration tests for the full dev server lifecycle. - * - * These tests verify: - * 1. Full startup of all 3 servers (proxy, Vite, Bun) - * 2. Graceful shutdown with proper process cleanup - * 3. Hot reload behavior on file changes - * 4. Crash recovery and orphan process handling - * 5. Error resilience (TypeScript errors, runtime errors) - */ - -// Helper to find available ports -async function findAvailablePorts(count: number, startPort: number): Promise { - const ports: number[] = []; - let port = startPort; - - while (ports.length < count && port < startPort + 1000) { - const available = await new Promise((resolve) => { - const server = createServer(); - server.once('error', () => resolve(false)); - server.listen(port, '127.0.0.1', () => { - server.close(() => resolve(true)); - }); - }); - if (available) { - ports.push(port); - } - port++; - } - - if (ports.length < count) { - throw new Error(`Could not find ${count} available ports`); - } - - return ports; -} - -// Helper to check if a port is free -async function isPortFree(port: number): Promise { - return new Promise((resolve) => { - const server = createServer(); - server.once('error', () => resolve(false)); - server.listen(port, '127.0.0.1', () => { - server.close(() => resolve(true)); - }); - }); -} - -// Create a minimal valid project for dev server testing -function createMinimalProject(rootDir: string): void { - mkdirSync(rootDir, { recursive: true }); - mkdirSync(join(rootDir, 'src'), { recursive: true }); - mkdirSync(join(rootDir, 'node_modules', '@agentuity'), { recursive: true }); - - // Create package.json - writeFileSync( - join(rootDir, 'package.json'), - JSON.stringify({ - name: 'test-project', - version: '1.0.0', - type: 'module', - dependencies: { - '@agentuity/runtime': 'latest', - }, - }) - ); - - // Create a minimal app.ts with v2 pattern - writeFileSync( - join(rootDir, 'app.ts'), - ` -import { createApp } from '@agentuity/runtime'; - -// Simple test app -export default createApp({ - agents: [], - router: { - path: '/api', - router: { - fetch: (req) => new Response('Hello from test app: ' + req.url) - } - } -}); -` - ); - - // Create a minimal agent index - writeFileSync( - join(rootDir, 'src', 'agent-index.ts'), - ` -export default []; -` - ); - - // Create .env - writeFileSync(join(rootDir, '.env'), 'AGENTUITY_SDK_KEY=test-key'); - - // Create a minimal @agentuity/runtime shim - mkdirSync(join(rootDir, 'node_modules', '@agentuity', 'runtime'), { recursive: true }); - writeFileSync( - join(rootDir, 'node_modules', '@agentuity', 'runtime', 'index.js'), - ` -export function createApp(config) { - const port = process.env.PORT ? parseInt(process.env.PORT) : 3501; - - return { - fetch: async (req) => { - // If config has router, use it - if (config.router?.router?.fetch) { - return config.router.router.fetch(req); - } - return new Response('OK from createApp shim', { status: 200 }); - }, - port, - logger: { - debug: (...args) => console.log('[DEBUG]', ...args), - info: (...args) => console.log('[INFO]', ...args), - warn: (...args) => console.warn('[WARN]', ...args), - error: (...args) => console.error('[ERROR]', ...args), - } - }; -} -` - ); - - writeFileSync( - join(rootDir, 'node_modules', '@agentuity', 'runtime', 'package.json'), - JSON.stringify({ - name: '@agentuity/runtime', - version: '2.0.0', - type: 'module', - main: 'index.js', - }) - ); -} - -describe('Dev Server Integration', () => { - let testDir: string; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-server-integration-${Date.now()}-${randomUUID()}`); - createMinimalProject(testDir); - }); - - afterEach(async () => { - // Clean up test directory - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore cleanup errors - } - }); - - describe('server lifecycle', () => { - test('all ports are released after graceful shutdown', async () => { - const ports = await findAvailablePorts(3, 16000); - const [proxyPort, backendPort, _vitePort] = ports; - - // Verify all ports are free before starting - for (const port of ports) { - expect(await isPortFree(port)).toBe(true); - } - - // Simulate server startup by creating servers - const proxy = await new Promise((resolve, reject) => { - const server = createServer((_socket) => { - // Simple proxy simulation - }); - server.listen(proxyPort, '127.0.0.1', () => resolve(server)); - server.on('error', reject); - }); - - const backend = await new Promise((resolve, reject) => { - const server = createServer((socket) => { - socket.on('data', (data) => { - socket.write(`HTTP/1.1 200 OK\r\n\r\nBackend: ${data.toString()}`); - }); - }); - server.listen(backendPort, '127.0.0.1', () => resolve(server)); - server.on('error', reject); - }); - - // Verify ports are in use - expect(await isPortFree(proxyPort)).toBe(false); - expect(await isPortFree(backendPort)).toBe(false); - - // Graceful shutdown - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => backend.close(() => resolve())); - - // Brief wait for OS to release ports - await new Promise((r) => setTimeout(r, 100)); - - // Verify all ports are free again - for (const port of [proxyPort, backendPort]) { - expect(await isPortFree(port)).toBe(true); - } - }); - - test('cleanup removes orphan processes from previous session', async () => { - const { prepareDevLock } = await import( - join(import.meta.dir, '../../../src/cmd/dev/dev-lock.ts') - ); - - const mockLogger = { - debug: () => {}, - warn: () => {}, - error: () => {}, - }; - - // Create a stale lockfile - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - mkdirSync(dirname(lockPath), { recursive: true }); - - const staleLock = { - version: 1, - projectRoot: testDir, - mainPid: 99999999, // Non-existent PID - instanceId: randomUUID(), - createdAt: new Date(Date.now() - 3600000).toISOString(), - updatedAt: new Date().toISOString(), - ports: { bun: 16001 }, - children: [{ pid: 99999998, type: 'gravity' as const }], - }; - - writeFileSync(lockPath, JSON.stringify(staleLock, null, 2)); - - // PrepareDevLock should clean up the stale lock - const lock = await prepareDevLock(testDir, 16000, mockLogger); - - // New lock should have our PID - expect(lock.state.mainPid).toBe(process.pid); - - // Old lock's ports should NOT be in new lock - expect(lock.state.ports.bun).toBe(16000); // Our port, not 16001 - - await lock.release(); - }); - }); - - describe('error resilience', () => { - test('app.ts validation detects v1 pattern', async () => { - const { validateAppTs } = await import( - join(import.meta.dir, '../../../src/cmd/build/vite/bun-dev-server.ts') - ); - - // Write v1-style app.ts - writeFileSync( - join(testDir, 'app.ts'), - ` -import { createApp } from '@agentuity/runtime'; - -// v1 pattern - destructuring without export default -const { server, logger } = await createApp({ agents: [] }); -logger.info('Running'); -` - ); - - const result = await validateAppTs(join(testDir, 'app.ts')); - - expect(result.hasCreateApp).toBe(true); - expect(result.hasDefaultExport).toBe(false); - expect(result.isV1Pattern).toBe(true); - expect(result.hints.length).toBeGreaterThan(0); - }); - - test('app.ts validation accepts v2 pattern', async () => { - const { validateAppTs } = await import( - join(import.meta.dir, '../../../src/cmd/build/vite/bun-dev-server.ts') - ); - - // v2 pattern is already in the test project - const result = await validateAppTs(join(testDir, 'app.ts')); - - expect(result.hasCreateApp).toBe(true); - expect(result.hasDefaultExport).toBe(true); - expect(result.isV1Pattern).toBe(false); - }); - - test('app.ts with TypeScript syntax error is handled gracefully', async () => { - const { validateAppTs } = await import( - join(import.meta.dir, '../../../src/cmd/build/vite/bun-dev-server.ts') - ); - - // Write app.ts with syntax error - writeFileSync( - join(testDir, 'app.ts'), - ` -import { createApp } from '@agentuity/runtime'; - -// Syntax error - missing closing brace -export default createApp({ - agents: [], -// Missing closing } -` - ); - - // validateAppTs should not throw - const result = await validateAppTs(join(testDir, 'app.ts')); - - // It should detect SOMETHING, even if parse is partial - expect(result).toBeDefined(); - }); - - test('app.ts with commented-out export default is handled correctly', async () => { - const { validateAppTs } = await import( - join(import.meta.dir, '../../../src/cmd/build/vite/bun-dev-server.ts') - ); - - writeFileSync( - join(testDir, 'app.ts'), - ` -import { createApp } from '@agentuity/runtime'; - -// export default createApp({ agents: [] }); -const { server, logger } = await createApp({ agents: [] }); -// Oops, forgot to actually export! -` - ); - - const result = await validateAppTs(join(testDir, 'app.ts')); - - // Should NOT detect the commented-out export default - expect(result.hasDefaultExport).toBe(false); - // Should detect v1 pattern (destructuring without export) - expect(result.isV1Pattern).toBe(true); - }); - }); - - describe('process manager integration', () => { - test('process manager tracks and cleans up multiple servers', async () => { - const { ProcessManager } = await import( - join(import.meta.dir, '../../../src/cmd/dev/process-manager.ts') - ); - - const mockLogger = { - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - }; - - const manager = new ProcessManager(mockLogger); - - // Create mock servers - const createMockProcess = () => ({ - kill: () => {}, - exitCode: null as number | null, - pid: Math.floor(Math.random() * 10000), - }); - - // Register multiple processes and servers (simulating dev server) - manager.registerProcess({ - id: 'bun-backend', - process: createMockProcess(), - description: 'Bun backend', - port: 3501, - critical: true, - }); - - manager.registerServer({ - id: 'vite', - server: { close: () => {} }, - description: 'Vite dev server', - port: 3502, - }); - - manager.registerServer({ - id: 'front-door-proxy', - server: { close: () => {} }, - description: 'WS proxy', - port: 3500, - }); - - manager.registerProcess({ - id: 'gravity', - process: createMockProcess(), - description: 'Gravity tunnel', - critical: false, - }); - - // Verify all ports are tracked - const ports = manager.getPorts(); - expect(ports).toContain(3500); - expect(ports).toContain(3501); - expect(ports).toContain(3502); - - // Cleanup - await manager.cleanup('test'); - expect(manager.getPorts()).toHaveLength(0); - }); - - test('process manager handles SIGKILL after SIGTERM timeout', async () => { - const { ProcessManager } = await import( - join(import.meta.dir, '../../../src/cmd/dev/process-manager.ts') - ); - - const mockLogger = { - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - }; - - const manager = new ProcessManager(mockLogger); - - const killSignals: (string | number | undefined)[] = []; - - // Simulate a process that doesn't exit on SIGTERM - manager.registerProcess({ - id: 'hanging', - process: { - kill: (signal) => { - killSignals.push(signal); - }, - exitCode: null, // Still running - pid: 1, - }, - description: 'Hanging process', - }); - - // Cleanup with short timeout - await manager.cleanup('test', 100); - - // Should have sent both SIGTERM and SIGKILL - expect(killSignals).toContain('SIGTERM'); - expect(killSignals).toContain('SIGKILL'); - }); - }); - - describe('lockfile management', () => { - test('lockfile is created and removed correctly', async () => { - const { prepareDevLock } = await import( - join(import.meta.dir, '../../../src/cmd/dev/dev-lock.ts') - ); - - const mockLogger = { - debug: () => {}, - warn: () => {}, - error: () => {}, - }; - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - expect(existsSync(lockPath)).toBe(true); - - await lock.release(); - - expect(existsSync(lockPath)).toBe(false); - }); - - test('child processes are tracked in lockfile', async () => { - const { prepareDevLock } = await import( - join(import.meta.dir, '../../../src/cmd/dev/dev-lock.ts') - ); - - const mockLogger = { - debug: () => {}, - warn: () => {}, - error: () => {}, - }; - - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - await lock.registerChild({ - pid: 12345, - type: 'gravity', - description: 'Gravity tunnel', - }); - - await lock.updatePorts({ vite: 3502 }); - - // Verify lockfile on disk - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - const raw = readFileSync(lockPath, 'utf8'); - const parsed = JSON.parse(raw); - - expect(parsed.children).toHaveLength(1); - expect(parsed.children[0].pid).toBe(12345); - expect(parsed.ports.vite).toBe(3502); - - await lock.release(); - }); - }); -}); - -describe('Hot Reload Behavior', () => { - let testDir: string; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-server-hotreload-${Date.now()}-${randomUUID()}`); - createMinimalProject(testDir); - }); - - afterEach(() => { - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore - } - }); - - describe('bun --hot requirements', () => { - test('bun-dev-server exports functions for hot reload', async () => { - const bunDevServerPath = join( - import.meta.dir, - '../../../src/cmd/build/vite/bun-dev-server.ts' - ); - - // Import the module - const module = await import(bunDevServerPath); - - // Verify expected exports - expect(typeof module.startBunDevServer).toBe('function'); - expect(typeof module.validateAppTs).toBe('function'); - expect(typeof module.buildStartupErrorMessage).toBe('function'); - }); - - test('validateAppTs correctly handles files with import re-exports', async () => { - const { validateAppTs } = await import( - join(import.meta.dir, '../../../src/cmd/build/vite/bun-dev-server.ts') - ); - - // Write app.ts that re-exports from another file - // Note: validateAppTs only matches `export default` directly, - // NOT `export { x as default }` - this is a known limitation - mkdirSync(join(testDir, 'src'), { recursive: true }); - - writeFileSync( - join(testDir, 'src', 'app-factory.ts'), - ` -import { createApp } from '@agentuity/runtime'; -import agents from './agent-index'; - -export function makeApp() { - return createApp({ agents }); -} -` - ); - - // Using standard `export { ... as default }` pattern - writeFileSync( - join(testDir, 'app.ts'), - ` -export { makeApp as default } from './src/app-factory'; -` - ); - - const result = await validateAppTs(join(testDir, 'app.ts')); - - // Note: The current implementation does NOT match `export { x as default }` - // This is a known limitation - it only matches `export default` directly - expect(result.hasDefaultExport).toBe(false); - - // This pattern is still valid for Bun --hot, but our validation - // doesn't detect it. In practice, Bun would still work fine. - // A future improvement could add support for this pattern. - }); - - test('validateAppTs detects direct export default', async () => { - const { validateAppTs } = await import( - join(import.meta.dir, '../../../src/cmd/build/vite/bun-dev-server.ts') - ); - - writeFileSync( - join(testDir, 'app.ts'), - ` -import { createApp } from '@agentuity/runtime'; -import agents from './src/agent-index'; - -export default createApp({ agents }); -` - ); - - const result = await validateAppTs(join(testDir, 'app.ts')); - - // Should detect standard `export default` pattern - expect(result.hasDefaultExport).toBe(true); - expect(result.hasCreateApp).toBe(true); - }); - }); -}); - -describe('Crash Recovery', () => { - let testDir: string; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-server-crash-${Date.now()}-${randomUUID()}`); - createMinimalProject(testDir); - }); - - afterEach(() => { - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore - } - }); - - describe('process cleanup on failure', () => { - test('ProcessManager cleanup is idempotent', async () => { - const { ProcessManager } = await import( - join(import.meta.dir, '../../../src/cmd/dev/process-manager.ts') - ); - - const mockLogger = { - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - }; - - const manager = new ProcessManager(mockLogger); - - let killCount = 0; - - manager.registerProcess({ - id: 'test', - process: { - kill: () => { - killCount++; - }, - exitCode: null, - pid: 1, - }, - description: 'Test process', - }); - - // Run cleanup multiple times in parallel - await Promise.all([ - manager.cleanup('test1', 50), - manager.cleanup('test2', 50), - manager.cleanup('test3', 50), - ]); - - // Should only kill once (due to cleaningUp flag) - expect(killCount).toBeLessThanOrEqual(2); // SIGTERM + SIGKILL max - }); - - test('cleanup handles processes that exit during cleanup', async () => { - const { ProcessManager } = await import( - join(import.meta.dir, '../../../src/cmd/dev/process-manager.ts') - ); - - const mockLogger = { - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - }; - - const manager = new ProcessManager(mockLogger); - - // Create a mock process that "exits" after SIGTERM - const proc = { - kill: () => { - // Simulate process exiting after kill - setTimeout(() => { - proc.exitCode = 0; - }, 10); - }, - exitCode: null as number | null, - pid: 1, - }; - - manager.registerProcess({ - id: 'test', - process: proc, - description: 'Test process', - }); - - await manager.cleanup('test', 500); - - // Process should have been killed - expect(proc.exitCode).toBe(0); - }); - }); - - describe('orphan process detection', () => { - test('stale lockfile is cleaned up on new session', async () => { - const { prepareDevLock } = await import( - join(import.meta.dir, '../../../src/cmd/dev/dev-lock.ts') - ); - - const mockLogger = { - debug: () => {}, - warn: () => {}, - error: () => {}, - }; - - // Create stale lockfile - const lockPath = join(testDir, '.agentuity', 'devserver.lock'); - mkdirSync(dirname(lockPath), { recursive: true }); - - writeFileSync( - lockPath, - JSON.stringify({ - version: 1, - projectRoot: testDir, - mainPid: 99999999, - instanceId: 'stale-instance', - createdAt: new Date(Date.now() - 3600000).toISOString(), - updatedAt: new Date().toISOString(), - ports: { bun: 3501 }, - children: [], - }) - ); - - // Prepare new lock - const lock = await prepareDevLock(testDir, 3500, mockLogger); - - // New lock should be created - expect(lock.state.instanceId).not.toBe('stale-instance'); - expect(lock.state.mainPid).toBe(process.pid); - - await lock.release(); - }); - }); -}); diff --git a/packages/cli/test/cmd/dev/process-manager.test.ts b/packages/cli/test/cmd/dev/process-manager.test.ts deleted file mode 100644 index df0749639..000000000 --- a/packages/cli/test/cmd/dev/process-manager.test.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { describe, test, expect, beforeEach } from 'bun:test'; -import { - ProcessManager, - initProcessManager, - getProcessManager, - cleanupAll, -} from '../../../src/cmd/dev/process-manager'; - -const mockLogger = { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: () => {}, - child: () => mockLogger, -}; - -describe('ProcessManager', () => { - let manager: ProcessManager; - - beforeEach(() => { - manager = new ProcessManager(mockLogger); - }); - - describe('process tracking', () => { - test('registers and tracks processes', () => { - const mockProcess = { - kill: () => {}, - exitCode: null, - pid: 12345, - }; - - manager.registerProcess({ - id: 'test-process', - process: mockProcess, - description: 'Test process', - port: 3000, - critical: true, - }); - - const ports = manager.getPorts(); - expect(ports).toContain(3000); - }); - - test('unregisters processes', () => { - const mockProcess = { - kill: () => {}, - exitCode: null, - pid: 12345, - }; - - manager.registerProcess({ - id: 'test-process', - process: mockProcess, - description: 'Test process', - }); - - manager.unregisterProcess('test-process'); - expect(manager.getPorts()).toHaveLength(0); - }); - - test('tracks multiple processes with ports', () => { - manager.registerProcess({ - id: 'process-1', - process: { kill: () => {}, exitCode: null, pid: 1 }, - description: 'Process 1', - port: 3000, - }); - - manager.registerProcess({ - id: 'process-2', - process: { kill: () => {}, exitCode: null, pid: 2 }, - description: 'Process 2', - port: 3001, - }); - - manager.registerProcess({ - id: 'process-3', - process: { kill: () => {}, exitCode: null, pid: 3 }, - description: 'Process 3', - // No port - }); - - const ports = manager.getPorts(); - expect(ports).toContain(3000); - expect(ports).toContain(3001); - expect(ports).toHaveLength(2); - }); - }); - - describe('server tracking', () => { - test('registers and tracks servers', () => { - const mockServer = { - close: () => {}, - }; - - manager.registerServer({ - id: 'test-server', - server: mockServer, - description: 'Test server', - port: 4000, - }); - - const ports = manager.getPorts(); - expect(ports).toContain(4000); - }); - - test('unregisters servers', () => { - const mockServer = { close: () => {} }; - - manager.registerServer({ - id: 'test-server', - server: mockServer, - description: 'Test server', - }); - - manager.unregisterServer('test-server'); - expect(manager.getPorts()).toHaveLength(0); - }); - }); - - describe('cleanup', () => { - test('kills processes in reverse order', async () => { - const killOrder: string[] = []; - - // Create processes that "exit" after SIGTERM (simulating real behavior) - const createProcess = (id: string) => ({ - kill: (signal?: string | number) => { - killOrder.push(`${id}:${signal || 'SIGTERM'}`); - }, - exitCode: null as number | null, - pid: Math.floor(Math.random() * 10000), - }); - - const proc1 = createProcess('first'); - const proc2 = createProcess('second'); - const proc3 = createProcess('third'); - - manager.registerProcess({ id: 'first', process: proc1, description: 'First process' }); - manager.registerProcess({ id: 'second', process: proc2, description: 'Second process' }); - manager.registerProcess({ id: 'third', process: proc3, description: 'Third process' }); - - await manager.cleanup('test', 100); - - // Should kill in reverse order (LIFO) - SIGTERM first for each - // The order should be third -> second -> first for the initial SIGTERM - const sigterms = killOrder.filter((k) => k.endsWith('SIGTERM') || k.endsWith('undefined')); - expect(sigterms[0]).toStartWith('third'); - expect(sigterms[1]).toStartWith('second'); - expect(sigterms[2]).toStartWith('first'); - }); - - test('closes servers', async () => { - let serverClosed = false; - - manager.registerServer({ - id: 'test-server', - server: { - close: () => { - serverClosed = true; - }, - }, - description: 'Test server', - }); - - await manager.cleanup('test', 100); - - expect(serverClosed).toBe(true); - }); - - test('handles async server close', async () => { - let serverClosed = false; - - manager.registerServer({ - id: 'test-server', - server: { - close: () => - new Promise((resolve) => { - setTimeout(() => { - serverClosed = true; - resolve(); - }, 50); - }), - }, - description: 'Test server', - }); - - await manager.cleanup('test', 100); - - expect(serverClosed).toBe(true); - }); - - test('handles already-exited processes gracefully', async () => { - let killCalled = false; - - manager.registerProcess({ - id: 'already-dead', - process: { - kill: () => { - killCalled = true; - }, - exitCode: 0, // Already exited - pid: 1, - }, - description: 'Already dead process', - }); - - await manager.cleanup('test', 100); - - // Should not call kill on already-exited process - expect(killCalled).toBe(false); - }); - - test('force kills after timeout', async () => { - const kills: string[] = []; - - manager.registerProcess({ - id: 'hanging', - process: { - kill: (signal?: string | number) => { - kills.push(signal === 'SIGKILL' ? 'force' : 'term'); - }, - exitCode: null, // Still running - pid: 1, - }, - description: 'Hanging process', - }); - - // Use a short timeout - await manager.cleanup('test', 200); - - // Should have called SIGTERM first, then SIGKILL after timeout - expect(kills).toContain('term'); - expect(kills).toContain('force'); - }); - - test('prevents double cleanup', async () => { - let killCount = 0; - - manager.registerProcess({ - id: 'test', - process: { - kill: () => { - killCount++; - }, - exitCode: null, - pid: 1, - }, - description: 'Test process', - }); - - // Start two cleanups in parallel - await Promise.all([manager.cleanup('test1', 100), manager.cleanup('test2', 100)]); - - // Should only kill once - expect(killCount).toBeLessThanOrEqual(2); // SIGTERM + SIGKILL max - }); - - test('clears tracking lists after cleanup', async () => { - manager.registerProcess({ - id: 'test', - process: { kill: () => {}, exitCode: 0, pid: 1 }, - description: 'Test process', - port: 3000, - }); - - manager.registerServer({ - id: 'test-server', - server: { close: () => {} }, - description: 'Test server', - port: 4000, - }); - - await manager.cleanup('test', 100); - - expect(manager.getPorts()).toHaveLength(0); - }); - }); - - describe('error handling', () => { - test('handles kill errors gracefully', async () => { - // Should not throw - manager.registerProcess({ - id: 'error-process', - process: { - kill: () => { - throw new Error('Kill failed'); - }, - exitCode: null, - pid: 1, - }, - description: 'Error process', - }); - - await manager.cleanup('test', 100); - // If we get here, the error was handled - }); - - test('handles close errors gracefully', async () => { - // Should not throw - manager.registerServer({ - id: 'error-server', - server: { - close: () => { - throw new Error('Close failed'); - }, - }, - description: 'Error server', - }); - - await manager.cleanup('test', 100); - // If we get here, the error was handled - }); - }); -}); - -describe('Global process manager', () => { - test('initProcessManager creates global instance', () => { - const manager = initProcessManager(mockLogger); - expect(manager).toBeDefined(); - expect(getProcessManager()).toBe(manager); - }); - - test('getProcessManager throws if not initialized', () => { - // Clear the global - // Note: This test may interfere with others if run in parallel - // In a real test suite, we'd use isolated modules - }); - - test('cleanupAll calls global manager cleanup', async () => { - const manager = initProcessManager(mockLogger); - - let killed = false; - manager.registerProcess({ - id: 'test', - process: { - kill: () => { - killed = true; - }, - exitCode: null, - pid: 1, - }, - description: 'Test', - }); - - await cleanupAll('test'); - - expect(killed).toBe(true); - }); -}); diff --git a/packages/cli/test/cmd/dev/ws-proxy.test.ts b/packages/cli/test/cmd/dev/ws-proxy.test.ts deleted file mode 100644 index 7da675fdb..000000000 --- a/packages/cli/test/cmd/dev/ws-proxy.test.ts +++ /dev/null @@ -1,690 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { join } from 'node:path'; -import { createServer, connect, type Server } from 'node:net'; -import { tmpdir } from 'node:os'; -import { mkdirSync, rmSync } from 'node:fs'; -import { randomUUID } from 'node:crypto'; - -const wsProxyPath = join(import.meta.dir, '../../../src/cmd/build/vite/ws-proxy.ts'); - -/** - * Helper to find an available port - */ -async function findAvailablePort(startPort: number): Promise { - for (let port = startPort; port < startPort + 100; port++) { - const available = await new Promise((resolve) => { - const server = createServer(); - server.once('error', () => resolve(false)); - server.listen(port, '127.0.0.1', () => { - server.close(() => resolve(true)); - }); - }); - if (available) return port; - } - throw new Error('Could not find available port'); -} - -/** - * Create a simple TCP server that echoes back what it receives - * Used to simulate Vite or Bun backend - */ -function createEchoServer(port: number, label: string): Promise { - return new Promise((resolve, reject) => { - const server = createServer((socket) => { - socket.on('data', (data) => { - // Echo back with label prefix - socket.write(`[${label}] ` + data.toString()); - }); - }); - - server.on('error', reject); - server.listen(port, '127.0.0.1', () => resolve(server)); - }); -} - -/** - * Create a WebSocket upgrade request (raw HTTP format) - */ -function createWebSocketUpgradeRequest(path: string, host: string, port: number): string { - const key = Buffer.from(randomUUID()).toString('base64'); - return [ - `GET ${path} HTTP/1.1`, - `Host: ${host}:${port}`, - 'Upgrade: websocket', - 'Connection: Upgrade', - `Sec-WebSocket-Key: ${key}`, - 'Sec-WebSocket-Version: 13', - '\r\n', - ].join('\r\n'); -} - -/** - * Create a regular HTTP GET request - */ -function createHttpRequest(path: string, host: string, port: number): string { - return [`GET ${path} HTTP/1.1`, `Host: ${host}:${port}`, 'Connection: keep-alive', '\r\n'].join( - '\r\n' - ); -} - -describe('WS Proxy', () => { - let testDir: string; - let mockLogger: { - debug: (...args: unknown[]) => void; - warn: (...args: unknown[]) => void; - error: (...args: unknown[]) => void; - }; - - beforeEach(() => { - testDir = join(tmpdir(), `ws-proxy-test-${Date.now()}`); - mkdirSync(testDir, { recursive: true }); - - mockLogger = { - debug: () => {}, - warn: () => {}, - error: () => {}, - }; - }); - - afterEach(async () => { - try { - rmSync(testDir, { recursive: true, force: true }); - } catch { - // Ignore - } - }); - - describe('startWsProxy', () => { - test('starts proxy server on specified port', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14000); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - expect(proxy).toBeDefined(); - expect(proxy.listening).toBe(true); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('routes regular HTTP requests to Vite', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14100); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Send regular HTTP request - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write(createHttpRequest('/some/path', '127.0.0.1', proxyPort)); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - // Timeout - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - // Should have been routed to Vite - expect(response).toContain('[VITE]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('routes WebSocket upgrade for /api to backend', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14200); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Send WebSocket upgrade request for /api path - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write(createWebSocketUpgradeRequest('/api/agents', '127.0.0.1', proxyPort)); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - // Should have been routed to Bun backend - expect(response).toContain('[BUN]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('routes WebSocket upgrade for /_agentuity to backend', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14300); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Send WebSocket upgrade request for /_agentuity path (always goes to backend) - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write( - createWebSocketUpgradeRequest('/_agentuity/stream', '127.0.0.1', proxyPort) - ); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - // Should have been routed to Bun backend - expect(response).toContain('[BUN]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('routes WebSocket upgrade for non-backend paths to Vite', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14400); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Send WebSocket upgrade request for a path that should go to Vite (HMR) - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write(createWebSocketUpgradeRequest('/', '127.0.0.1', proxyPort)); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - // Should have been routed to Vite (for HMR WebSocket) - expect(response).toContain('[VITE]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('routes custom route paths to backend', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14500); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - // Custom route paths (e.g., user defined /graphql, /rpc) - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api', '/graphql', '/rpc'], - logger: mockLogger, - }); - - // Test /graphql path - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write(createWebSocketUpgradeRequest('/graphql', '127.0.0.1', proxyPort)); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - expect(response).toContain('[BUN]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('handles sub-paths correctly (/api/agents routes to backend)', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14600); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Test sub-path /api/agents/123 - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write( - createWebSocketUpgradeRequest( - '/api/agents/123/conversation', - '127.0.0.1', - proxyPort - ) - ); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - expect(response).toContain('[BUN]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('does not route partial path matches (/ap is not /api)', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14700); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // /ap is NOT /api - should go to Vite - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write(createHttpRequest('/ap', '127.0.0.1', proxyPort)); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - expect(response).toContain('[VITE]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - }); - - describe('error handling', () => { - test('handles client disconnect before data is sent', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14800); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Connect and immediately disconnect - await new Promise((resolve) => { - const client = connect(proxyPort, '127.0.0.1'); - client.on('connect', () => { - client.destroy(); // Immediate disconnect - }); - client.on('close', () => resolve()); - - // Timeout fallback - setTimeout(resolve, 500); - }); - - // Proxy should still be running - expect(proxy.listening).toBe(true); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('handles target server not responding gracefully', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(14900); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - // Only start backend, NOT vite - simulating vite not available - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // Try to connect (should not hang) - await new Promise((resolve, _reject) => { - const client = connect(proxyPort, '127.0.0.1'); - - client.on('connect', () => { - client.write(createHttpRequest('/test', '127.0.0.1', proxyPort)); - }); - - client.on('error', () => { - // Connection error is expected - resolve(); - }); - - client.on('close', () => { - resolve(); - }); - - // Should not hang - timeout is safety - setTimeout(() => { - client.destroy(); - resolve(); - }, 1000); - }); - - // Proxy should still be running - expect(proxy.listening).toBe(true); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - }); - - describe('URL parsing', () => { - test('handles query strings in WebSocket upgrade paths', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(15000); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // WebSocket upgrade with query string - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write( - createWebSocketUpgradeRequest( - '/api/stream?session=abc123&token=xyz', - '127.0.0.1', - proxyPort - ) - ); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - // Query string should be stripped for path matching - expect(response).toContain('[BUN]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - - test('handles POST method in request line', async () => { - const { startWsProxy } = await import(wsProxyPath); - - const proxyPort = await findAvailablePort(15100); - const vitePort = await findAvailablePort(proxyPort + 1); - const backendPort = await findAvailablePort(vitePort + 1); - - const viteServer = await createEchoServer(vitePort, 'VITE'); - const backendServer = await createEchoServer(backendPort, 'BUN'); - - const proxy = await startWsProxy({ - port: proxyPort, - vitePort, - backendPort, - routePaths: ['/api'], - logger: mockLogger, - }); - - // POST request (not WebSocket upgrade) - const request = [ - 'POST /api/agents HTTP/1.1', - `Host: 127.0.0.1:${proxyPort}`, - 'Content-Type: application/json', - 'Content-Length: 13', - '\r\n', - '{"test":true}', - ].join('\r\n'); - - const response = await new Promise((resolve, reject) => { - const client = connect(proxyPort, '127.0.0.1'); - const chunks: string[] = []; - - client.on('connect', () => { - client.write(request); - }); - - client.on('data', (data) => { - chunks.push(data.toString()); - client.end(); - }); - - client.on('end', () => resolve(chunks.join(''))); - client.on('error', reject); - - setTimeout(() => { - client.destroy(); - reject(new Error('Timeout')); - }, 2000); - }); - - // POST without upgrade goes to Vite (not backend) - expect(response).toContain('[VITE]'); - - // Clean up - await new Promise((resolve) => proxy.close(() => resolve())); - await new Promise((resolve) => viteServer.close(() => resolve())); - await new Promise((resolve) => backendServer.close(() => resolve())); - }); - }); -}); diff --git a/packages/cli/test/cmd/project/reconcile.test.ts b/packages/cli/test/cmd/project/reconcile.test.ts index 7ac90095a..916b6a134 100644 --- a/packages/cli/test/cmd/project/reconcile.test.ts +++ b/packages/cli/test/cmd/project/reconcile.test.ts @@ -20,92 +20,68 @@ describe('project reconcile', () => { }); describe('isValidProjectStructure', () => { - test('should return true for project with @agentuity/runtime in dependencies', async () => { + test('should return true for project with dependencies', async () => { writeFileSync( join(testDir, 'package.json'), JSON.stringify({ name: 'test-project', dependencies: { - '@agentuity/runtime': '^1.0.0', + next: '^15.0.0', }, }) ); - writeFileSync(join(testDir, 'agentuity.config.ts'), 'export default {};'); const result = await isValidProjectStructure(testDir); expect(result).toBe(true); }); - test('should return true for project with @agentuity/runtime in devDependencies', async () => { + test('should return true for project with devDependencies', async () => { writeFileSync( join(testDir, 'package.json'), JSON.stringify({ name: 'test-project', devDependencies: { - '@agentuity/runtime': '^1.0.0', + vite: '^6.0.0', }, }) ); - writeFileSync(join(testDir, 'agentuity.config.ts'), 'export default {};'); const result = await isValidProjectStructure(testDir); expect(result).toBe(true); }); - test('should return true for project with agentuity/ subdirectory containing valid structure', async () => { - const agentuityDir = join(testDir, 'agentuity'); - mkdirSync(agentuityDir, { recursive: true }); + test('should return true for project with just a name', async () => { writeFileSync( - join(agentuityDir, 'package.json'), + join(testDir, 'package.json'), JSON.stringify({ - name: 'child-agent', - dependencies: { - '@agentuity/runtime': '^1.0.0', - }, + name: 'test-project', }) ); - writeFileSync(join(agentuityDir, 'agentuity.config.ts'), 'export default {};'); const result = await isValidProjectStructure(testDir); expect(result).toBe(true); }); - test('should return false for project with agentuity/ subdirectory but no valid structure', async () => { + test('should return true for project with agentuity/ subdirectory containing package.json', async () => { const agentuityDir = join(testDir, 'agentuity'); mkdirSync(agentuityDir, { recursive: true }); - writeFileSync(join(agentuityDir, 'package.json'), JSON.stringify({ name: 'empty' })); - - const result = await isValidProjectStructure(testDir); - expect(result).toBe(false); - }); - - test('should return false when package.json exists but no @agentuity/runtime', async () => { writeFileSync( - join(testDir, 'package.json'), + join(agentuityDir, 'package.json'), JSON.stringify({ - name: 'test-project', + name: 'child-project', dependencies: { - express: '^4.0.0', + hono: '^4.0.0', }, }) ); - writeFileSync(join(testDir, 'agentuity.config.ts'), 'export default {};'); const result = await isValidProjectStructure(testDir); - expect(result).toBe(false); + expect(result).toBe(true); }); - test('should return false when @agentuity/runtime exists but no agentuity.config.ts', async () => { - writeFileSync( - join(testDir, 'package.json'), - JSON.stringify({ - name: 'test-project', - dependencies: { - '@agentuity/runtime': '^1.0.0', - }, - }) - ); - // No agentuity.config.ts + test('should return false for project with agentuity/ subdirectory but no package.json', async () => { + const agentuityDir = join(testDir, 'agentuity'); + mkdirSync(agentuityDir, { recursive: true }); const result = await isValidProjectStructure(testDir); expect(result).toBe(false); @@ -117,15 +93,19 @@ describe('project reconcile', () => { }); test('should return false when package.json is missing', async () => { - writeFileSync(join(testDir, 'agentuity.config.ts'), 'export default {};'); - const result = await isValidProjectStructure(testDir); expect(result).toBe(false); }); test('should return false when package.json is invalid JSON', async () => { writeFileSync(join(testDir, 'package.json'), 'not valid json'); - writeFileSync(join(testDir, 'agentuity.config.ts'), 'export default {};'); + + const result = await isValidProjectStructure(testDir); + expect(result).toBe(false); + }); + + test('should return false when package.json is empty object', async () => { + writeFileSync(join(testDir, 'package.json'), JSON.stringify({})); const result = await isValidProjectStructure(testDir); expect(result).toBe(false); diff --git a/packages/cli/test/dev-registry-generation.test.ts b/packages/cli/test/dev-registry-generation.test.ts deleted file mode 100644 index 89cb7f7ae..000000000 --- a/packages/cli/test/dev-registry-generation.test.ts +++ /dev/null @@ -1,153 +0,0 @@ -/** - * Dev Mode Registry Generation Tests - * - * Verifies that the dev mode properly generates agent registries - * before bundling, ensuring type safety in development. - */ - -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { mkdirSync, rmSync, existsSync, writeFileSync, symlinkSync } from 'node:fs'; -import { join, resolve } from 'node:path'; -import { tmpdir } from 'node:os'; - -// Resolve the monorepo root — test is at packages/cli/test/ -const SDK_ROOT = resolve(import.meta.dir, '../../..'); - -/** - * Set up node_modules symlinks so that import() can resolve workspace packages. - */ -function setupNodeModules(testDir: string) { - const nmDir = join(testDir, 'node_modules'); - const agentuityDir = join(nmDir, '@agentuity'); - mkdirSync(agentuityDir, { recursive: true }); - - for (const pkg of ['runtime', 'schema', 'core', 'server', 'auth', 'frontend', 'test-utils']) { - const target = join(SDK_ROOT, 'packages', pkg); - const link = join(agentuityDir, pkg); - if (existsSync(target) && !existsSync(link)) { - symlinkSync(target, link, 'dir'); - } - } - - const runtimeNm = join(SDK_ROOT, 'packages', 'runtime', 'node_modules'); - for (const dep of ['hono', 'zod']) { - const target = join(runtimeNm, dep); - const link = join(nmDir, dep); - if (existsSync(target) && !existsSync(link)) { - symlinkSync(target, link, 'dir'); - } - } -} - -describe('Dev Mode Registry Generation', () => { - let testDir: string; - let srcDir: string; - - beforeEach(() => { - testDir = join(tmpdir(), `dev-registry-test-${Date.now()}-${Math.random()}`); - srcDir = join(testDir, 'src'); - mkdirSync(join(srcDir, 'agent'), { recursive: true }); - setupNodeModules(testDir); - }); - - afterEach(() => { - if (testDir) { - rmSync(testDir, { recursive: true, force: true }); - } - }); - - test('should generate agent registry from discovered agents', async () => { - const { discoverAgents } = await import('../src/cmd/build/vite/agent-discovery'); - const { generateAgentRegistry } = await import('../src/cmd/build/vite/registry-generator'); - - // Create a simple agent file - const agentCode = ` -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -const testAgent = createAgent('test-agent', { - schema: { - input: s.object({ name: s.string() }), - output: s.object({ greeting: s.string() }), - }, - handler: async (ctx, input) => { - return { greeting: \`Hello, \${input.name}!\` }; - }, -}); - -export default testAgent; -`; - writeFileSync(join(srcDir, 'agent', 'test.ts'), agentCode); - - const logger = { - debug: () => {}, - trace: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - }; - - const agentMetadata = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - generateAgentRegistry(srcDir, agentMetadata); - - const generatedDir = join(srcDir, 'generated'); - expect(existsSync(join(generatedDir, 'registry.ts'))).toBe(true); - - const registryContent = await Bun.file(join(generatedDir, 'registry.ts')).text(); - expect(registryContent).toContain('testAgent'); - expect(registryContent).toContain('declare module "@agentuity/runtime"'); - expect(registryContent).toContain('export interface AgentRegistry'); - }); - - test('should handle empty agents appropriately', async () => { - const { discoverAgents } = await import('../src/cmd/build/vite/agent-discovery'); - const { generateAgentRegistry } = await import('../src/cmd/build/vite/registry-generator'); - - const logger = { - debug: () => {}, - trace: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - }; - - const agentMetadata = await discoverAgents(srcDir, 'test-project', 'test-deployment', logger); - expect(agentMetadata).toHaveLength(0); - - // Agent registry is always generated (even if empty) - generateAgentRegistry(srcDir, agentMetadata); - const generatedDir = join(srcDir, 'generated'); - expect(existsSync(join(generatedDir, 'registry.ts'))).toBe(true); - }); - - test('should document that dev and build modes generate identical registries', () => { - // Both dev mode and build mode should generate identical registry files. - // The only difference is the surrounding workflow: - // - Build: runAllBuilds() calls generateAgentRegistry - // - Dev: dev command calls the same function before generateEntryFile - - const devModeSteps = [ - '1. Typecheck project', - '2. Generate workbench files (if enabled)', - '3. Discover agents', - '4. Generate agent registry (src/generated/registry.ts)', - '5. Generate entry file (src/generated/app.ts)', - '6. Bundle with Bun.build', - '7. Generate metadata', - ]; - - const buildModeSteps = [ - '1. Generate workbench files (if enabled)', - '2. Discover agents', - '3. Generate agent registry (src/generated/registry.ts)', - '4. Build client assets (Vite)', - '5. Build workbench (if enabled)', - '6. Build server (Bun.build)', - '7. Generate metadata', - ]; - - // Both modes should generate registries BEFORE entry file generation - expect(devModeSteps[3]).toContain('agent registry'); - expect(buildModeSteps[2]).toContain('agent registry'); - }); -}); diff --git a/packages/cli/test/eval-metadata.test.ts b/packages/cli/test/eval-metadata.test.ts deleted file mode 100644 index 0c33f86fc..000000000 --- a/packages/cli/test/eval-metadata.test.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { existsSync, readFileSync } from 'node:fs'; -import { join } from 'node:path'; - -// Use the integration suite's built metadata since it has evals -const INTEGRATION_SUITE_DIR = join( - __dirname, - '..', - '..', - '..', - 'apps', - 'testing', - 'integration-suite' -); -const METADATA_PATH = join(INTEGRATION_SUITE_DIR, '.agentuity', 'agentuity.metadata.json'); - -interface EvalMetadata { - id: string; - identifier: string; - name: string; - filename: string; - version: string; - description?: string; - agentIdentifier: string; - projectId: string; -} - -interface AgentMetadata { - id: string; - agentId: string; - name: string; - filename: string; - evals?: EvalMetadata[]; -} - -interface Metadata { - agents: AgentMetadata[]; -} - -// Check if metadata file exists before running tests -function ensureMetadataExists() { - if (!existsSync(METADATA_PATH)) { - throw new Error( - 'Integration suite metadata not found. ' + - 'Build integration-suite first: cd apps/testing/integration-suite && bun run build' - ); - } -} - -describe('Eval Metadata Generation', () => { - test('integration suite should have metadata file', () => { - ensureMetadataExists(); - expect(existsSync(METADATA_PATH)).toBe(true); - }); - - test('metadata.json should contain agents with evals', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - expect(metadata.agents).toBeDefined(); - expect(Array.isArray(metadata.agents)).toBe(true); - - // Find agent with evals - const agentsWithEvals = metadata.agents.filter((a) => a.evals && a.evals.length > 0); - expect(agentsWithEvals.length).toBeGreaterThan(0); - }); - - test('eval id should have evalid_ prefix', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - if (agent.evals) { - for (const evalMeta of agent.evals) { - expect(evalMeta.id).toMatch(/^evalid_[a-f0-9]+$/); - } - } - } - }); - - test('eval identifier should have eval_ prefix', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - if (agent.evals) { - for (const evalMeta of agent.evals) { - expect(evalMeta.identifier).toMatch(/^eval_[a-f0-9]+$/); - } - } - } - }); - - test('eval should have required fields', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - if (agent.evals) { - for (const evalMeta of agent.evals) { - expect(evalMeta.id).toBeDefined(); - expect(evalMeta.identifier).toBeDefined(); - expect(evalMeta.name).toBeDefined(); - expect(evalMeta.filename).toBeDefined(); - expect(evalMeta.version).toBeDefined(); - expect(evalMeta.agentIdentifier).toBeDefined(); - expect(evalMeta.projectId).toBeDefined(); - } - } - } - }); - - test('eval agentIdentifier should match parent agent agentId', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - if (agent.evals) { - for (const evalMeta of agent.evals) { - expect(evalMeta.agentIdentifier).toBe(agent.agentId); - } - } - } - }); - - test('eval version should be a valid SHA256 hash', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - if (agent.evals) { - for (const evalMeta of agent.evals) { - // SHA256 hash is 64 hex characters - expect(evalMeta.version).toMatch(/^[a-f0-9]{64}$/); - } - } - } - }); - - test('agent agentId should have agent_ prefix', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - expect(agent.agentId).toMatch(/^agent_[a-f0-9]+$/); - } - }); - - test('agent id should have agentid_ prefix', () => { - ensureMetadataExists(); - const metadata: Metadata = JSON.parse(readFileSync(METADATA_PATH, 'utf-8')); - - for (const agent of metadata.agents) { - expect(agent.id).toMatch(/^agentid_[a-f0-9]+$/); - } - }); -}); diff --git a/packages/cli/test/file-watcher.test.ts b/packages/cli/test/file-watcher.test.ts deleted file mode 100644 index 70506a7a9..000000000 --- a/packages/cli/test/file-watcher.test.ts +++ /dev/null @@ -1,378 +0,0 @@ -/** - * File Watcher Unit Tests - */ - -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import type { Logger } from '@agentuity/core'; -import { createFileWatcher } from '../src/cmd/dev/file-watcher'; -import { join } from 'node:path'; -import { mkdtemp, writeFile, rm, readFile, mkdir } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { existsSync } from 'node:fs'; - -describe('File Watcher', () => { - let testDir: string; - let restartCount: number; - let watcher: ReturnType | null; - - beforeEach(async () => { - // Create temp directory for testing - testDir = await mkdtemp(join(tmpdir(), 'file-watcher-test-')); - - // Create src directory structure - await Bun.$`mkdir -p ${join(testDir, 'src', 'api')}`; - await Bun.$`mkdir -p ${join(testDir, 'src', 'agent')}`; - await Bun.$`mkdir -p ${join(testDir, 'src', 'lib')}`; - - // Pre-create ignore directories to avoid mkdir triggering events during tests - await Bun.$`mkdir -p ${join(testDir, '.agentuity')}`; - await Bun.$`mkdir -p ${join(testDir, 'node_modules', 'some-package')}`; - - // Create app.ts - await writeFile(join(testDir, 'app.ts'), 'export {}', 'utf-8'); - - restartCount = 0; - }); - - afterEach(async () => { - // Stop watcher - if (watcher) { - watcher.stop(); - watcher = null; - } - - // Clean up temp directory - await rm(testDir, { recursive: true, force: true }); - }); - - test.serial('creates watcher successfully', () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - expect(watcher).toBeDefined(); - expect(typeof watcher.start).toBe('function'); - expect(typeof watcher.stop).toBe('function'); - expect(typeof watcher.pause).toBe('function'); - expect(typeof watcher.resume).toBe('function'); - }); - - test.serial('triggers restart on file change', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.resume(); // Start watching - - // Give watcher time to settle - await Bun.sleep(100); - - // Give watcher time to settle - await Bun.sleep(100); - - // Write a file - await writeFile(join(testDir, 'src', 'api', 'test.ts'), 'export {}', 'utf-8'); - - // Wait for file watcher to detect change - await Bun.sleep(1000); - - expect(restartCount).toBeGreaterThan(0); - }); - - test.serial('does not trigger restart when paused', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.pause(); - - // Write a file while paused - await writeFile(join(testDir, 'src', 'api', 'test2.ts'), 'export {}', 'utf-8'); - - // Wait - await Bun.sleep(1000); - - expect(restartCount).toBe(0); - }); - - test.serial('ignores changes in .agentuity directory', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.resume(); - - // Give watcher time to settle and reset count after any initial events - await Bun.sleep(100); - restartCount = 0; - - // Create .agentuity directory and write file - await writeFile(join(testDir, '.agentuity', 'app.js'), 'console.log("test")', 'utf-8'); - - // Wait - await Bun.sleep(1500); - - expect(restartCount).toBe(0); - }); - - test.serial('ignores changes in node_modules', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.resume(); - - // Give watcher time to settle and reset count after any initial events - await Bun.sleep(100); - restartCount = 0; - - // Create node_modules and write file - await writeFile( - join(testDir, 'node_modules', 'some-package', 'index.js'), - 'module.exports = {}', - 'utf-8' - ); - - // Wait - await Bun.sleep(1000); - - expect(restartCount).toBe(0); - }); - - test.serial('resumes watching after pause', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.pause(); - - // Write while paused - await writeFile(join(testDir, 'src', 'api', 'test3.ts'), 'export {}', 'utf-8'); - await Bun.sleep(1000); - expect(restartCount).toBe(0); - - // Resume and write again - watcher.resume(); - await writeFile(join(testDir, 'src', 'api', 'test4.ts'), 'export {}', 'utf-8'); - await Bun.sleep(1000); - - expect(restartCount).toBeGreaterThan(0); - }); - - test.serial('creates agent templates when new agent directory is created', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.resume(); - - // Give watcher time to settle (longer for CI) - await Bun.sleep(500); - - // Create a new agent directory (empty) - const agentDir = join(testDir, 'src', 'agent', 'my-agent'); - await mkdir(agentDir, { recursive: true }); - - // Wait for watcher to detect and create templates with polling - const maxWait = 3000; // 3 seconds max - const pollInterval = 100; // check every 100ms - let elapsed = 0; - while (elapsed < maxWait) { - if (existsSync(join(agentDir, 'index.ts'))) { - break; - } - await Bun.sleep(pollInterval); - elapsed += pollInterval; - } - - // Verify template was created (implementation creates index.ts with agent code) - expect(existsSync(join(agentDir, 'index.ts'))).toBe(true); - - // Verify content - const indexContent = await readFile(join(agentDir, 'index.ts'), 'utf-8'); - expect(indexContent).toContain('createAgent'); - expect(indexContent).toContain('MyAgent'); // PascalCase name - - // Should also trigger restart - expect(restartCount).toBeGreaterThan(0); - }); - - test.serial('does not create templates for non-empty directories', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.resume(); - - // Give watcher time to settle - await Bun.sleep(100); - - // Create a new agent directory with a file already in it - const agentDir = join(testDir, 'src', 'agent', 'existing-agent'); - await mkdir(agentDir, { recursive: true }); - await writeFile(join(agentDir, 'existing.ts'), 'export {}', 'utf-8'); - - // Wait - await Bun.sleep(1000); - - // Templates should NOT be created (directory was not empty) - // Note: index.ts will exist because we created existing.ts which triggers the watcher - // but the template shouldn't overwrite existing files - expect(existsSync(join(agentDir, 'existing.ts'))).toBe(true); - }); - - test.serial('does not create templates for directories outside src/agent', async () => { - watcher = createFileWatcher({ - rootDir: testDir, - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (): never => { - throw new Error('Fatal error'); - }, - child: () => ({}) as unknown as Logger, - }, - onRestart: () => { - restartCount++; - }, - }); - - watcher.start(); - watcher.resume(); - - // Give watcher time to settle - await Bun.sleep(100); - - // Create a directory in a different location - const libDir = join(testDir, 'src', 'lib', 'utils'); - await mkdir(libDir, { recursive: true }); - - // Wait - await Bun.sleep(1000); - - // No templates should be created - expect(existsSync(join(libDir, 'index.ts'))).toBe(false); - }); -}); diff --git a/packages/cli/test/metadata-version.test.ts b/packages/cli/test/metadata-version.test.ts deleted file mode 100644 index 11df3feb2..000000000 --- a/packages/cli/test/metadata-version.test.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { describe, test, expect, beforeAll, afterAll } from 'bun:test'; -import { join } from 'node:path'; -import { mkdtemp, rm, writeFile, mkdir } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { generateMetadata } from '../src/cmd/build/vite/metadata-generator'; -import { getVersion } from '../src/version'; - -describe('Metadata Generation - Version Field', () => { - let tempDir: string; - - beforeAll(async () => { - // Create temp directory - tempDir = await mkdtemp(join(tmpdir(), 'agentuity-test-')); - - // Create minimal project structure - await mkdir(join(tempDir, 'src'), { recursive: true }); - await mkdir(join(tempDir, '.agentuity'), { recursive: true }); - - // Create package.json with @agentuity/runtime dependency - const packageJson = { - name: 'test-project', - version: '1.0.0', - dependencies: { - '@agentuity/runtime': '0.0.90', // Different from CLI version - }, - }; - await writeFile(join(tempDir, 'package.json'), JSON.stringify(packageJson, null, 2)); - - // Create empty app.ts - await writeFile(join(tempDir, 'app.ts'), 'export default {}'); - }); - - afterAll(async () => { - // Clean up - if (tempDir) { - await rm(tempDir, { recursive: true, force: true }); - } - }); - - test('should use CLI version not runtime version in metadata', async () => { - const cliVersion = getVersion(); - - const metadata = await generateMetadata({ - rootDir: tempDir, - agents: [], - routes: [], - projectId: 'test-project', - orgId: 'test-org', - deploymentId: 'test-deployment', - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: () => { - throw new Error('fatal'); - }, - }, - }); - - // The build.agentuity field should be CLI version, not runtime version from package.json - expect(metadata.deployment.build.agentuity).toBe(cliVersion); - expect(metadata.deployment.build.agentuity).not.toBe('0.0.90'); // Runtime version - expect(metadata.deployment.build.agentuity).not.toBe('unknown'); - }); - - test('should include Bun version in metadata', async () => { - const metadata = await generateMetadata({ - rootDir: tempDir, - agents: [], - routes: [], - projectId: 'test-project', - orgId: 'test-org', - deploymentId: 'test-deployment', - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: () => { - throw new Error('fatal'); - }, - }, - }); - - expect(metadata.deployment.build.bun).toBe(Bun.version); - }); - - test('should include platform and arch in metadata', async () => { - const metadata = await generateMetadata({ - rootDir: tempDir, - agents: [], - routes: [], - projectId: 'test-project', - orgId: 'test-org', - deploymentId: 'test-deployment', - logger: { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: () => { - throw new Error('fatal'); - }, - }, - }); - - expect(metadata.deployment.build.platform).toBe(process.platform); - expect(metadata.deployment.build.arch).toBe(process.arch); - }); -}); diff --git a/packages/cli/test/route-metadata.test.ts b/packages/cli/test/route-metadata.test.ts deleted file mode 100644 index 2eae1db77..000000000 --- a/packages/cli/test/route-metadata.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { readFileSync, existsSync } from 'node:fs'; -import { join } from 'node:path'; - -/** - * Test that API route metadata is correctly extracted and added to - * agentuity.metadata.json during the build process. - */ -describe('Route Metadata Generation', () => { - test('agentuity.metadata.json should contain routes from src/api', () => { - const testProjectPath = '/Users/jhaynie/tmp/v1/refactor-2'; - const metadataPath = join(testProjectPath, '.agentuity', 'agentuity.metadata.json'); - - if (!existsSync(metadataPath)) { - console.log('Metadata file not found, run build first'); - return; - } - - const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8')); - - // Should have routes array - expect(metadata.routes).toBeDefined(); - expect(Array.isArray(metadata.routes)).toBe(true); - - // Should have at least one route (POST /api/hello) - expect(metadata.routes.length).toBeGreaterThan(0); - - // Check first route structure - const route = metadata.routes[0]; - expect(route).toHaveProperty('id'); - expect(route).toHaveProperty('method'); - expect(route).toHaveProperty('type'); - expect(route).toHaveProperty('filename'); - expect(route).toHaveProperty('path'); - expect(route).toHaveProperty('version'); - - // Verify route values - expect(route.filename).toBe('src/api/index.ts'); - expect(route.method).toBe('post'); - expect(route.type).toBe('api'); - expect(route.path).toBe('/api/hello'); // Should NOT be /api/api/hello - }); - - test('parseRoute should support both createRouter and new Hono()', () => { - // This documents the expected behavior: - // 1. Files using createRouter() from @agentuity/runtime are parsed - // 2. Files using new Hono() from hono are also parsed - // 3. Both patterns extract route definitions correctly - - const createRouterExample = ` -import { createRouter } from '@agentuity/runtime'; -const router = createRouter(); -router.get('/test', (c) => c.json({ ok: true })); -export default router;`; - - const honoExample = ` -import { Hono } from 'hono'; -const api = new Hono(); -api.post('/hello', (c) => c.json({ message: 'hi' })); -export default api;`; - - expect(createRouterExample).toContain('createRouter'); - expect(honoExample).toContain('new Hono'); - }); - - test('route paths should not double-prefix /api', () => { - // When we mount src/api/index.ts at /api, and it has router.post('/hello'), - // the final route should be /api/hello, NOT /api/api/hello - const testProjectPath = '/Users/jhaynie/tmp/v1/refactor-2'; - const metadataPath = join(testProjectPath, '.agentuity', 'agentuity.metadata.json'); - - if (!existsSync(metadataPath)) { - return; - } - - const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8')); - const routes = metadata.routes; - - for (const route of routes) { - // No route should have double /api/api - expect(route.path).not.toContain('/api/api'); - } - }); -}); diff --git a/packages/cli/test/templates.test.ts b/packages/cli/test/templates.test.ts deleted file mode 100644 index 7bb2b1b87..000000000 --- a/packages/cli/test/templates.test.ts +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Unit tests for agent and API templates. - * Verifies that generated templates have correct structure, exports, and syntax. - */ - -import { test, expect, describe, beforeEach, afterEach } from 'bun:test'; -import { mkdtempSync, rmSync, readFileSync, existsSync, mkdirSync } from 'node:fs'; -import { join } from 'node:path'; -import { tmpdir } from 'node:os'; -import { createAgentTemplates, createAPITemplates } from '../src/cmd/dev/templates'; - -describe('createAgentTemplates', () => { - let tempDir: string; - - beforeEach(() => { - tempDir = mkdtempSync(join(tmpdir(), 'agent-templates-test-')); - }); - - afterEach(() => { - rmSync(tempDir, { recursive: true, force: true }); - }); - - test('creates index.ts with default export', () => { - const agentDir = join(tempDir, 'my-agent'); - mkdirSync(agentDir); - - createAgentTemplates(agentDir); - - const indexContent = readFileSync(join(agentDir, 'index.ts'), 'utf-8'); - - // Should use default export, not named export - expect(indexContent).toContain('export default createAgent'); - expect(indexContent).not.toContain('export const'); - }); - - test('creates index.ts file', () => { - const agentDir = join(tempDir, 'test-agent'); - mkdirSync(agentDir); - - createAgentTemplates(agentDir); - - expect(existsSync(join(agentDir, 'index.ts'))).toBe(true); - }); - - test('uses PascalCase agent name in createAgent call', () => { - const agentDir = join(tempDir, 'my-cool-agent'); - mkdirSync(agentDir); - - createAgentTemplates(agentDir); - - const indexContent = readFileSync(join(agentDir, 'index.ts'), 'utf-8'); - - // Agent name should be PascalCase version of directory name - expect(indexContent).toContain("createAgent('MyCoolAgent'"); - }); - - test('includes required imports', () => { - const agentDir = join(tempDir, 'imports-test'); - mkdirSync(agentDir); - - createAgentTemplates(agentDir); - - const indexContent = readFileSync(join(agentDir, 'index.ts'), 'utf-8'); - - expect(indexContent).toContain("import { createAgent } from '@agentuity/runtime'"); - expect(indexContent).toContain("import { s } from '@agentuity/schema'"); - }); - - test('includes schema definition', () => { - const agentDir = join(tempDir, 'schema-test'); - mkdirSync(agentDir); - - createAgentTemplates(agentDir); - - const indexContent = readFileSync(join(agentDir, 'index.ts'), 'utf-8'); - - expect(indexContent).toContain('schema:'); - expect(indexContent).toContain('input: s.string()'); - expect(indexContent).toContain('output: s.string()'); - }); - - test('includes handler with async signature', () => { - const agentDir = join(tempDir, 'handler-test'); - mkdirSync(agentDir); - - createAgentTemplates(agentDir); - - const indexContent = readFileSync(join(agentDir, 'index.ts'), 'utf-8'); - - expect(indexContent).toContain('handler: async (_c, input)'); - expect(indexContent).toContain('return input'); - }); - - test('does not create files for invalid directory names', () => { - // Pass invalid path directly - validation is basename-based, no need to create directory - const invalidDir = join(tempDir, 'invalid { - // Pass reserved name directly - validation is basename-based - const reservedDir = join(tempDir, 'con'); - - createAgentTemplates(reservedDir); - - expect(existsSync(join(reservedDir, 'index.ts'))).toBe(false); - }); - - test('does not create files for directory names ending with dot', () => { - // Pass trailing dot path directly - validation is basename-based - const trailingDotDir = join(tempDir, 'name.'); - - createAgentTemplates(trailingDotDir); - - expect(existsSync(join(trailingDotDir, 'index.ts'))).toBe(false); - }); - - test('does not create files for directory names ending with space', () => { - // Pass trailing space path directly - validation is basename-based - const trailingSpaceDir = join(tempDir, 'name '); - - createAgentTemplates(trailingSpaceDir); - - expect(existsSync(join(trailingSpaceDir, 'index.ts'))).toBe(false); - }); -}); - -describe('createAPITemplates', () => { - let tempDir: string; - - beforeEach(() => { - tempDir = mkdtempSync(join(tmpdir(), 'api-templates-test-')); - }); - - afterEach(() => { - rmSync(tempDir, { recursive: true, force: true }); - }); - - test('creates index.ts with router', () => { - const routeDir = join(tempDir, 'my-route'); - mkdirSync(routeDir); - - createAPITemplates(routeDir); - - expect(existsSync(join(routeDir, 'index.ts'))).toBe(true); - }); - - test('includes createRouter import', () => { - const routeDir = join(tempDir, 'route-test'); - mkdirSync(routeDir); - - createAPITemplates(routeDir); - - const content = readFileSync(join(routeDir, 'index.ts'), 'utf-8'); - - expect(content).toContain("import { createRouter } from '@agentuity/runtime'"); - }); - - test('includes default export of router', () => { - const routeDir = join(tempDir, 'export-test'); - mkdirSync(routeDir); - - createAPITemplates(routeDir); - - const content = readFileSync(join(routeDir, 'index.ts'), 'utf-8'); - - expect(content).toContain('export default router'); - }); - - test('includes GET route handler', () => { - const routeDir = join(tempDir, 'handler-test'); - mkdirSync(routeDir); - - createAPITemplates(routeDir); - - const content = readFileSync(join(routeDir, 'index.ts'), 'utf-8'); - - expect(content).toContain("router.get('/'"); - expect(content).toContain('async (c)'); - }); - - test('does not create files for invalid directory names', () => { - // Pass invalid path directly - validation is basename-based, no need to create directory - const invalidDir = join(tempDir, 'invalid|name'); - - createAPITemplates(invalidDir); - - expect(existsSync(join(invalidDir, 'index.ts'))).toBe(false); - }); -}); diff --git a/packages/cli/test/typescript-errors.test.ts b/packages/cli/test/typescript-errors.test.ts index 6ea803df2..6d9f2d480 100644 --- a/packages/cli/test/typescript-errors.test.ts +++ b/packages/cli/test/typescript-errors.test.ts @@ -5,6 +5,7 @@ import { tmpdir } from 'node:os'; import { formatTypeScriptErrors, hasErrors, getErrorCount } from '../src/typescript-errors'; import type { GrammarItem } from '../src/tsc-output-parser'; import { stripAnsi } from '../src/tui'; +import { symbols } from '../src/tui/symbols'; function createMockError( path: string, @@ -24,6 +25,10 @@ function createMockError( }; } +// Use the actual bar symbol (│ in unicode, | in ASCII) so tests pass in both environments +const BAR = symbols.bar; +const CORNER_TL = symbols.cornerTL; + describe('TypeScript Error Formatting', () => { let tempDir: string; @@ -54,10 +59,8 @@ describe('TypeScript Error Formatting', () => { const output = await formatTypeScriptErrors(items, { projectDir: tempDir }); const stripped = stripAnsi(output); - // Find all lines that are part of the box (contain │) - const boxLines = stripped.split('\n').filter((line) => line.includes('│')); + const boxLines = stripped.split('\n').filter((line) => line.includes(BAR)); - // All box lines should have the same length (properly aligned) const lengths = boxLines.map((line) => line.length); const uniqueLengths = [...new Set(lengths)]; @@ -77,10 +80,8 @@ describe('TypeScript Error Formatting', () => { const output = await formatTypeScriptErrors(items, { projectDir: tempDir }); const stripped = stripAnsi(output); - // Find all lines that are part of the box (contain │) - const boxLines = stripped.split('\n').filter((line) => line.includes('│')); + const boxLines = stripped.split('\n').filter((line) => line.includes(BAR)); - // All box lines should have the same length (properly aligned) const lengths = boxLines.map((line) => line.length); const uniqueLengths = [...new Set(lengths)]; @@ -98,9 +99,7 @@ describe('TypeScript Error Formatting', () => { const output = await formatTypeScriptErrors(items, { projectDir: tempDir }); const stripped = stripAnsi(output); - // Output should not contain literal tabs expect(stripped).not.toContain('\t'); - // But should contain the content (with spaces instead of tabs) expect(stripped).toContain('foo: 1'); }); }); @@ -124,24 +123,20 @@ describe('TypeScript Error Formatting', () => { const stripped = stripAnsi(output); const lines = stripped.split('\n'); - // Find the line with badProperty (inside box, so contains │) const contentLineIdx = lines.findIndex( - (l) => l.includes('badProperty') && l.includes('│') + (l) => l.includes('badProperty') && l.includes(BAR) ); expect(contentLineIdx).toBeGreaterThan(-1); - // Find the caret line (contains ^ and │, but not badProperty) const caretLine = lines.find( - (l) => l.includes('^') && l.includes('│') && !l.includes('badProperty') + (l) => l.includes('^') && l.includes(BAR) && !l.includes('badProperty') ); expect(caretLine).toBeDefined(); - // The carets should be under "badProperty" const contentLine = lines[contentLineIdx]; - const identifierStart = contentLine.indexOf('badProperty'); + const identifierStart = contentLine!.indexOf('badProperty'); const caretStart = caretLine!.indexOf('^'); - // Caret should start at or very close to the identifier position expect(Math.abs(caretStart - identifierStart)).toBeLessThanOrEqual(1); }); @@ -157,24 +152,20 @@ describe('TypeScript Error Formatting', () => { const stripped = stripAnsi(output); const lines = stripped.split('\n'); - // Find the line with badProperty (inside box, so contains │) const contentLineIdx = lines.findIndex( - (l) => l.includes('badProperty') && l.includes('│') + (l) => l.includes('badProperty') && l.includes(BAR) ); expect(contentLineIdx).toBeGreaterThan(-1); - // Find the caret line (contains ^ and │, but not badProperty) const caretLine = lines.find( - (l) => l.includes('^') && l.includes('│') && !l.includes('badProperty') + (l) => l.includes('^') && l.includes(BAR) && !l.includes('badProperty') ); expect(caretLine).toBeDefined(); - // The carets should be under "badProperty" const contentLine = lines[contentLineIdx]; - const identifierStart = contentLine.indexOf('badProperty'); + const identifierStart = contentLine!.indexOf('badProperty'); const caretStart = caretLine!.indexOf('^'); - // Caret should start at or very close to the identifier position expect(Math.abs(caretStart - identifierStart)).toBeLessThanOrEqual(1); }); @@ -199,7 +190,6 @@ describe('TypeScript Error Formatting', () => { const caretLine = lines.find((l) => l.includes('^') && !l.includes('unknownVariable')); expect(caretLine).toBeDefined(); - // Count the carets const caretMatch = caretLine!.match(/\^+/); expect(caretMatch).not.toBeNull(); expect(caretMatch![0].length).toBe('unknownVariable'.length); @@ -226,14 +216,11 @@ const c = baz; const output = await formatTypeScriptErrors(items, { projectDir: tempDir }); const stripped = stripAnsi(output); - // Find all top border lines (╭...╮ pattern in stripped form becomes +---+) - const boxTopLines = stripped - .split('\n') - .filter((line) => line.includes('╭') || line.includes('+')); + // Each error produces box lines with the corner symbol + const boxTopLines = stripped.split('\n').filter((line) => line.includes(CORNER_TL)); - // All boxes should have consistent width - // (In practice, they may vary based on content, but each box should be internally consistent) - expect(boxTopLines.length).toBe(3); + // 3 errors, each with 2 corner-TL lines (header + code box) + expect(boxTopLines.length).toBe(6); }); }); @@ -282,10 +269,9 @@ const c = baz; const output = await formatTypeScriptErrors(items, { projectDir: tempDir }); const stripped = stripAnsi(output); - // Should contain the error message (possibly truncated) expect(stripped).toContain('Object literal'); - // Box should still be aligned - const boxLines = stripped.split('\n').filter((line) => line.includes('│')); + + const boxLines = stripped.split('\n').filter((line) => line.includes(BAR)); const lengths = boxLines.map((line) => line.length); const uniqueLengths = [...new Set(lengths)]; expect(uniqueLengths.length).toBe(1); diff --git a/packages/core/src/services/coder/types.ts b/packages/core/src/services/coder/types.ts index 68f881e4c..5a6f897ff 100644 --- a/packages/core/src/services/coder/types.ts +++ b/packages/core/src/services/coder/types.ts @@ -330,7 +330,10 @@ export const CoderCreateWorkspaceRequestSchema = z repos: z.array(CoderSessionRepositoryRefSchema).optional().describe('Repositories'), savedSkillIds: z.array(z.string()).optional().describe('Saved skill IDs'), skillBucketIds: z.array(z.string()).optional().describe('Skill bucket IDs'), - enabledAgents: z.array(z.string()).optional().describe('Effective agent roster to store on the workspace'), + enabledAgents: z + .array(z.string()) + .optional() + .describe('Effective agent roster to store on the workspace'), }) .describe('Request body for creating a workspace'); export type CoderCreateWorkspaceRequest = z.infer; diff --git a/packages/core/src/services/project/deploy.ts b/packages/core/src/services/project/deploy.ts index 48beb55e0..b5bb7d816 100644 --- a/packages/core/src/services/project/deploy.ts +++ b/packages/core/src/services/project/deploy.ts @@ -73,33 +73,71 @@ export const BuildAgentSchema = z.object({ ...BaseAgentFields, }); +/** + * Launch process definition — describes how to start the application. + * Produced by the buildpack pipeline for any framework. + */ +export const LaunchProcessSchema = z.object({ + type: z.string().describe('process type (e.g., web, worker)'), + command: z.string().describe('command to execute'), + default: z.boolean().describe('whether this is the default process'), + workingDirectory: z.string().optional().describe('working directory relative to app root'), +}); + +export const LaunchMetadataSchema = z.object({ + processes: z.array(LaunchProcessSchema).describe('application processes'), + framework: z.object({ + name: z.string().describe('detected framework name'), + version: z.string().optional().describe('framework version'), + }), + runtime: z.object({ + name: z.string().describe('runtime binary (node, bun, deno)'), + port: z.number().optional().describe('port the app listens on'), + }), + build: z.object({ + date: z.string().describe('build timestamp'), + duration: z.number().describe('build duration in ms'), + }), +}); + +export type LaunchMetadata = z.infer; + export const BuildMetadataSchema = z.object({ - routes: z.array( - z.object({ - id: z.string().describe('the unique calculated id for the route'), - filename: z.string().describe('the relative path for the file'), - path: z.string().describe('the route path'), - method: z.enum(['get', 'post', 'put', 'delete', 'patch']).describe('the HTTP method'), - version: z.string().describe('the SHA256 content of the file'), - type: z.enum(['api', 'sms', 'email', 'cron', 'websocket', 'sse', 'stream']), - agentIds: z - .array(z.string()) - .optional() - .describe('the agent ids associated with this route'), - config: z - .record(z.string(), z.unknown()) - .optional() - .describe('type specific configuration'), - schema: z - .object({ - input: z.string().optional().describe('JSON schema for input (stringified JSON)'), - output: z.string().optional().describe('JSON schema for output (stringified JSON)'), - }) - .optional() - .describe('input and output JSON schemas for the route'), - }) - ), - agents: z.array(BuildAgentSchema), + routes: z + .array( + z.object({ + id: z.string().describe('the unique calculated id for the route'), + filename: z.string().describe('the relative path for the file'), + path: z.string().describe('the route path'), + method: z.enum(['get', 'post', 'put', 'delete', 'patch']).describe('the HTTP method'), + version: z.string().describe('the SHA256 content of the file'), + type: z.enum(['api', 'sms', 'email', 'cron', 'websocket', 'sse', 'stream']), + agentIds: z + .array(z.string()) + .optional() + .describe('the agent ids associated with this route'), + config: z + .record(z.string(), z.unknown()) + .optional() + .describe('type specific configuration'), + schema: z + .object({ + input: z.string().optional().describe('JSON schema for input (stringified JSON)'), + output: z + .string() + .optional() + .describe('JSON schema for output (stringified JSON)'), + }) + .optional() + .describe('input and output JSON schemas for the route'), + }) + ) + .default([]) + .describe('routes — only present for Agentuity native apps'), + agents: z + .array(BuildAgentSchema) + .default([]) + .describe('agents — only present for Agentuity native apps'), assets: z.array( z.object({ filename: z.string().describe('the relative path for the file'), @@ -176,6 +214,9 @@ export const BuildMetadataSchema = z.object({ }), }) ), + launch: LaunchMetadataSchema.optional().describe( + 'launch metadata — how to start the application (processes, framework, runtime)' + ), }); export type BuildMetadata = z.infer; diff --git a/packages/db/package.json b/packages/db/package.json index b1981698b..c471e22d4 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -20,20 +20,19 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json index 39771b3c1..5ba4ac7e9 100644 --- a/packages/db/tsconfig.json +++ b/packages/db/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }] } diff --git a/packages/email/package.json b/packages/email/package.json index f89a7acf0..1099be024 100644 --- a/packages/email/package.json +++ b/packages/email/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/email/src/index.ts b/packages/email/src/index.ts index 4ade22525..d7e0746ec 100644 --- a/packages/email/src/index.ts +++ b/packages/email/src/index.ts @@ -36,7 +36,7 @@ import { type EmailActivityResult, type EmailActivityParams, } from '@agentuity/core/email'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/email/tsconfig.json b/packages/email/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/email/tsconfig.json +++ b/packages/email/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/evals/package.json b/packages/evals/package.json index b80899399..352b15b31 100644 --- a/packages/evals/package.json +++ b/packages/evals/package.json @@ -1,6 +1,7 @@ { "name": "@agentuity/evals", - "version": "2.0.9", + "version": "1.0.54", + "private": true, "license": "Apache-2.0", "author": "Agentuity employees and contributors", "type": "module", @@ -27,8 +28,8 @@ }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/runtime": "workspace:*", "@agentuity/schema": "workspace:*", + "zod": "^3.25.0", "@ai-sdk/groq": "latest", "ai": "^6.0.0" }, diff --git a/packages/evals/src/_utils.ts b/packages/evals/src/_utils.ts index a7a3dee3c..f8662039e 100644 --- a/packages/evals/src/_utils.ts +++ b/packages/evals/src/_utils.ts @@ -4,7 +4,7 @@ import { type CreateEvalConfig, type EvalContext, type EvalHandlerResult, -} from '@agentuity/runtime'; +} from './eval-types'; import type { BaseEvalOptions, EvalLifecycleHooks, EvalMiddleware } from './types'; import { s } from '@agentuity/schema'; import { generateText, type LanguageModel } from 'ai'; diff --git a/packages/evals/src/eval-types.ts b/packages/evals/src/eval-types.ts new file mode 100644 index 000000000..edfa4989f --- /dev/null +++ b/packages/evals/src/eval-types.ts @@ -0,0 +1,71 @@ +/** + * Eval types — local definitions for the evals package. + * + * These were previously imported from @agentuity/runtime but are now + * defined locally since the runtime is deprecated. When evals is + * rewritten, these types will be redesigned from scratch. + */ + +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { InferOutput, StandardSchemaV1 } from '@agentuity/core'; +import { z } from 'zod'; + +/** + * Minimal logger interface used by eval handlers. + */ +export interface EvalLogger { + warn(message: string, meta?: Record): void; + info(message: string, meta?: Record): void; + debug(message: string, meta?: Record): void; + error(message: string, meta?: Record): void; +} + +/** + * Context passed to eval handlers. + * In the v2 runtime this was `AgentContext`. + * Simplified to just what eval handlers actually use. + */ +export interface EvalContext { + logger: EvalLogger; + [key: string]: any; +} + +/** + * Schema for eval handler results. + */ +export const EvalHandlerResultSchema = z.object({ + passed: z.boolean(), + score: z.number().min(0).max(1).optional(), + reason: z.string().optional(), + metadata: z.record(z.string(), z.any()).optional(), +}); + +/** + * Result returned by an eval handler. + */ +export type EvalHandlerResult = z.infer; + +/** + * Eval handler function signature. + */ +export type EvalFunction = [TInput] extends [undefined] + ? [TOutput] extends [undefined] + ? (ctx: EvalContext) => Promise + : (ctx: EvalContext, output: TOutput) => Promise + : [TOutput] extends [undefined] + ? (ctx: EvalContext, input: TInput) => Promise + : (ctx: EvalContext, input: TInput, output: TOutput) => Promise; + +/** + * Configuration for creating an eval. + */ +export interface CreateEvalConfig< + TInput extends StandardSchemaV1 | undefined = any, + TOutput extends StandardSchemaV1 | undefined = any, +> { + description?: string; + handler: EvalFunction< + TInput extends StandardSchemaV1 ? InferOutput : undefined, + TOutput extends StandardSchemaV1 ? InferOutput : undefined + >; +} diff --git a/packages/evals/src/index.ts b/packages/evals/src/index.ts index a00d954fc..ed20239b6 100644 --- a/packages/evals/src/index.ts +++ b/packages/evals/src/index.ts @@ -1,3 +1,16 @@ +/** + * @agentuity/evals — SUSPENDED + * + * This package is not published in v3. The eval system is tightly coupled to + * the v2 agent concept (createAgent, EvalContext) which no longer exists. + * It will be rewritten from scratch with a framework-agnostic design. + * + * The code is kept here for reference during the rewrite. + */ + +export type { EvalContext, EvalHandlerResult, EvalFunction, CreateEvalConfig } from './eval-types'; +export { EvalHandlerResultSchema } from './eval-types'; + export { createPresetEval, interpolatePrompt, diff --git a/packages/evals/src/types.ts b/packages/evals/src/types.ts index 15ba379dc..c8ccc1c9f 100644 --- a/packages/evals/src/types.ts +++ b/packages/evals/src/types.ts @@ -1,6 +1,6 @@ import type { LanguageModel } from 'ai'; import { groq } from '@ai-sdk/groq'; -import type { EvalContext, EvalHandlerResult } from '@agentuity/runtime'; +import type { EvalContext, EvalHandlerResult } from './eval-types'; export const DEFAULT_EVAL_MODEL: LanguageModel = groq('openai/gpt-oss-20b'); diff --git a/packages/evals/test/lifecycle-hooks.test.ts b/packages/evals/test/lifecycle-hooks.test.ts index 2a451e840..cf1a00480 100644 --- a/packages/evals/test/lifecycle-hooks.test.ts +++ b/packages/evals/test/lifecycle-hooks.test.ts @@ -6,7 +6,7 @@ import { describe, test, expect, mock } from 'bun:test'; import { s } from '@agentuity/schema'; import { adversarial } from '../src/adversarial'; -import type { EvalContext, EvalHandlerResult } from '@agentuity/runtime'; +import type { EvalContext, EvalHandlerResult } from '../src/eval-types'; const _AgentInputSchema = s.object({ text: s.string(), diff --git a/packages/evals/tsconfig.json b/packages/evals/tsconfig.json index 125e21169..5ce6800e4 100644 --- a/packages/evals/tsconfig.json +++ b/packages/evals/tsconfig.json @@ -11,9 +11,6 @@ { "path": "../core" }, - { - "path": "../runtime" - }, { "path": "../schema" } diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 6c5eccfcb..e52619513 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -20,7 +20,7 @@ ], "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build && bun scripts/build-beacon.ts", + "build": "bunx tsc --build", "typecheck": "bunx tsc --noEmit", "test": "bun test", "prepublishOnly": "bun run clean && bun run build" diff --git a/packages/frontend/scripts/build-beacon.ts b/packages/frontend/scripts/build-beacon.ts deleted file mode 100644 index 48422bb8e..000000000 --- a/packages/frontend/scripts/build-beacon.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Build script to create the minified analytics beacon - * This runs as part of the frontend package build and creates dist/beacon.js - */ - -import { join, dirname } from 'node:path'; - -const rootDir = dirname(import.meta.dir); -const srcDir = join(rootDir, 'src'); -const distDir = join(rootDir, 'dist'); - -const beaconEntryPath = join(srcDir, 'analytics', 'beacon-standalone.ts'); -const beaconOutputPath = join(distDir, 'beacon.js'); - -async function buildBeacon() { - console.log('Building analytics beacon...'); - - // Read package.json to get version - const pkgJson = await Bun.file(join(rootDir, 'package.json')).json(); - const version = pkgJson.version || 'unknown'; - - const result = await Bun.build({ - entrypoints: [beaconEntryPath], - minify: true, - target: 'browser', - format: 'iife', - }); - - if (!result.success) { - const errors = result.logs.map((log) => log.message).join('\n'); - console.error('Failed to build beacon:', errors); - process.exit(1); - } - - const output = result.outputs[0]; - if (!output) { - console.error('No output from beacon build'); - process.exit(1); - } - - const rawBeaconCode = await output.text(); - - // Validate beacon content is non-empty - if (!rawBeaconCode || rawBeaconCode.length === 0) { - console.error('ERROR: Generated beacon code is empty'); - process.exit(1); - } - - // Prepend version comment for debugging - const beaconCode = `/* @agentuity/frontend v${version} */\n${rawBeaconCode}`; - - // Write the minified beacon as a JS file - await Bun.write(beaconOutputPath, beaconCode); - - // Overwrite the TypeScript-compiled beacon-script.js with the actual minified beacon - // TypeScript compiles src/beacon-script.ts -> dist/beacon-script.js with empty string - // We overwrite it with the actual minified beacon code - const beaconModulePath = join(distDir, 'beacon-script.js'); - const moduleContent = `// Auto-generated - do not edit -// Minified analytics beacon script (overwrites TypeScript output) -export const BEACON_SCRIPT = ${JSON.stringify(beaconCode)}; - -export function validateBeaconScript() { - if (!BEACON_SCRIPT || BEACON_SCRIPT.length === 0) { - throw new Error( - 'BEACON_SCRIPT is empty. The frontend package was not built correctly. ' + - 'Run "bun run build" in @agentuity/frontend to generate the beacon script.' - ); - } -} -`; - await Bun.write(beaconModulePath, moduleContent); - - console.log(`Built beacon: ${beaconCode.length} bytes`); - console.log(`Output: ${beaconOutputPath}`); - console.log(`Module: ${beaconModulePath}`); - - // Verify the written file exists and has content - const writtenFile = Bun.file(beaconModulePath); - if (!(await writtenFile.exists())) { - console.error(`ERROR: Failed to write ${beaconModulePath}`); - process.exit(1); - } - - const writtenContent = await writtenFile.text(); - if (!writtenContent.includes('BEACON_SCRIPT') || writtenContent.includes('BEACON_SCRIPT = ""')) { - console.error('ERROR: dist/beacon-script.js does not contain valid BEACON_SCRIPT'); - process.exit(1); - } - - console.log('✓ Beacon script verified'); -} - -buildBeacon(); diff --git a/packages/frontend/src/analytics/beacon-standalone.ts b/packages/frontend/src/analytics/beacon-standalone.ts deleted file mode 100644 index d168bbdc7..000000000 --- a/packages/frontend/src/analytics/beacon-standalone.ts +++ /dev/null @@ -1,728 +0,0 @@ -/** - * Standalone beacon script - this file is bundled and minified - * to create the production analytics.js served at /_agentuity/webanalytics/analytics.js - * - * This is the single source of truth for the beacon logic. - */ - -interface ScrollEvent { - depth: number; - timestamp: number; -} - -interface AnalyticsCustomEvent { - timestamp: number; - name: string; - data: string; -} - -interface GeoLocation { - country?: string; - country_latitude?: string | number; - country_longitude?: string | number; - region?: string; - region_latitude?: string | number; - region_longitude?: string | number; - city?: string; - city_latitude?: string | number; - city_longitude?: string | number; - timezone?: string; - latitude?: string | number; - longitude?: string | number; -} - -interface PageViewData { - id: string; - timestamp: number; - timezone_offset: number; - url: string; - path: string; - referrer: string; - title: string; - screen_width: number; - screen_height: number; - viewport_width: number; - viewport_height: number; - device_pixel_ratio: number; - user_agent: string; - language: string; - scroll_depth: number; - time_on_page: number; - scroll_events: ScrollEvent[]; - custom_events: AnalyticsCustomEvent[]; - load_time?: number; - dom_ready?: number; - ttfb?: number; - fcp?: number; - lcp?: number; - cls?: number; - inp?: number; - country?: string; - country_latitude?: number; - country_longitude?: number; - region?: string; - region_latitude?: number; - region_longitude?: number; - city?: string; - city_latitude?: number; - city_longitude?: number; - timezone?: string; - latitude?: number; - longitude?: number; - utm_source?: string; - utm_medium?: string; - utm_campaign?: string; - utm_term?: string; - utm_content?: string; - [key: string]: unknown; -} - -interface AnalyticsConfig { - enabled: boolean; - orgId: string; - projectId: string; - isDevmode: boolean; - trackClicks?: boolean; - trackScroll?: boolean; - trackWebVitals?: boolean; - trackErrors?: boolean; - trackSPANavigation?: boolean; - sampleRate?: number; -} - -interface SessionData { - threadId?: string; -} - -interface AgentuityWindow { - __AGENTUITY_ANALYTICS__?: AnalyticsConfig; - __AGENTUITY_SESSION__?: SessionData; - agentuityAnalytics?: { - track: (name: string, properties?: Record) => void; - identify: (userId: string, traits?: Record) => void; - flush: () => void; - }; -} - -const COLLECT_ENDPOINT = '/_agentuity/webanalytics/collect'; -const MAX_CUSTOM_EVENTS = 1000; - -/** - * Safely stringify an object, handling circular references and other errors. - * Returns the JSON string on success, or a fallback string on failure. - */ -function safeStringify(obj: unknown): string { - if (obj === undefined || obj === null) { - return ''; - } - try { - const seen = new WeakSet(); - return JSON.stringify(obj, (_key, value) => { - if (typeof value === 'object' && value !== null) { - if (seen.has(value)) { - return '[Circular]'; - } - seen.add(value); - } - return value; - }); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - console.warn('[Agentuity Analytics] Failed to stringify properties:', message); - return `[unserializable: ${message}]`; - } -} - -(() => { - const w = window as Window & AgentuityWindow; - const d = document; - const configRaw = w.__AGENTUITY_ANALYTICS__; - - if (!configRaw || !configRaw.enabled) return; - - // Prevent duplicate initialization (e.g., from HMR) - const initFlag = w as unknown as { __AGENTUITY_BEACON_INIT__?: boolean }; - if (configRaw.isDevmode) { - console.debug( - '[Agentuity Analytics] Script loaded, init flag:', - initFlag.__AGENTUITY_BEACON_INIT__, - 'path:', - location.pathname - ); - } - if (initFlag.__AGENTUITY_BEACON_INIT__) { - if (configRaw.isDevmode) { - console.debug('[Agentuity Analytics] Already initialized, skipping'); - } - return; - } - initFlag.__AGENTUITY_BEACON_INIT__ = true; - - // Store in a non-nullable variable after the guard - const c: AnalyticsConfig = configRaw; - - let geo: GeoLocation | null = null; - let sent = false; - let pageStart = Date.now(); - let userId = ''; - let userTraits: Record = {}; - - const pv: PageViewData = { - id: '', - timestamp: 0, - timezone_offset: 0, - url: '', - path: '', - referrer: '', - title: '', - screen_width: 0, - screen_height: 0, - viewport_width: 0, - viewport_height: 0, - device_pixel_ratio: 1, - user_agent: '', - language: '', - scroll_depth: 0, - time_on_page: 0, - scroll_events: [], - custom_events: [], - }; - - function generateId(): string { - return crypto.randomUUID - ? crypto.randomUUID() - : `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; - } - - function getUTMParams(): Record { - const params = new URLSearchParams(location.search); - const utm: Record = {}; - ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'].forEach((key) => { - const value = params.get(key); - if (value) utm[key] = value; - }); - return utm; - } - - // Strip query string from URL to prevent sensitive data leakage - function stripQueryString(url: string): string { - if (!url) return ''; - try { - const parsed = new URL(url); - return parsed.origin + parsed.pathname; - } catch { - // If URL parsing fails, try simple string split - const parts = url.split('?'); - return parts[0] ?? url; - } - } - - // Full init - called on page load and SPA navigation - function init(): void { - pv.id = generateId(); - pv.timestamp = Date.now(); - pv.timezone_offset = new Date().getTimezoneOffset(); - pv.url = stripQueryString(location.href); - pv.path = location.pathname; - pv.referrer = stripQueryString(d.referrer); - pv.title = d.title || ''; - pv.screen_width = screen.width || 0; - pv.screen_height = screen.height || 0; - pv.viewport_width = innerWidth || 0; - pv.viewport_height = innerHeight || 0; - pv.device_pixel_ratio = devicePixelRatio || 1; - pv.user_agent = navigator.userAgent || ''; - pv.language = navigator.language || ''; - - const utm = getUTMParams(); - for (const k in utm) { - pv[k] = utm[k]; - } - - pv.scroll_events = []; - pv.custom_events = []; - pv.scroll_depth = 0; - sent = false; - pageStart = Date.now(); - - if (typeof performance !== 'undefined' && performance.getEntriesByType) { - const nav = performance.getEntriesByType('navigation')[0] as - | PerformanceNavigationTiming - | undefined; - if (nav) { - pv.dom_ready = Math.round(nav.domContentLoadedEventEnd - nav.startTime); - pv.ttfb = Math.round(nav.responseStart - nav.requestStart); - // loadEventEnd is 0 during the load event, so defer reading it - if (nav.loadEventEnd > 0) { - pv.load_time = Math.round(nav.loadEventEnd - nav.startTime); - } else { - setTimeout(() => { - const navAfter = performance.getEntriesByType('navigation')[0] as - | PerformanceNavigationTiming - | undefined; - if (navAfter && navAfter.loadEventEnd > 0) { - pv.load_time = Math.round(navAfter.loadEventEnd - navAfter.startTime); - } - }, 0); - } - } - } - - if (c.isDevmode) { - console.debug('[Agentuity Analytics] Session started (full init):', pv.id); - } - } - - // Soft reset - called when user returns to page (keeps page-level metrics) - function resetSession(): void { - pv.id = generateId(); - pv.timestamp = Date.now(); - pv.scroll_events = []; - pv.custom_events = []; - pv.scroll_depth = 0; - pv.time_on_page = 0; - sent = false; - pageStart = Date.now(); - - if (c.isDevmode) { - console.debug('[Agentuity Analytics] Session started (soft reset):', pv.id); - } - } - - // Fetch geo data - fetch('https://agentuity.sh/location') - .then((r) => r.json()) - .then((g: GeoLocation) => { - geo = g; - try { - sessionStorage.setItem('agentuity_geo', JSON.stringify(g)); - } catch { - // Ignore - } - }) - .catch(() => { - try { - const cached = sessionStorage.getItem('agentuity_geo'); - if (cached) geo = JSON.parse(cached); - } catch { - // Ignore - } - }); - - // Try to load cached geo immediately - try { - const cached = sessionStorage.getItem('agentuity_geo'); - if (cached) geo = JSON.parse(cached); - } catch { - // Ignore - } - - function getSession(): SessionData | undefined { - return w.__AGENTUITY_SESSION__; - } - - function send(force = false): void { - if (sent && !force) { - if (c.isDevmode) { - console.debug('[Agentuity Analytics] send() skipped - already sent'); - } - return; - } - if (c.sampleRate !== undefined && c.sampleRate < 1 && Math.random() > c.sampleRate) return; - - sent = true; - pv.time_on_page = Date.now() - pageStart; - - if (geo) { - pv.country = geo.country || ''; - if (geo.country_latitude) pv.country_latitude = parseFloat(String(geo.country_latitude)); - if (geo.country_longitude) - pv.country_longitude = parseFloat(String(geo.country_longitude)); - pv.region = geo.region || ''; - if (geo.region_latitude) pv.region_latitude = parseFloat(String(geo.region_latitude)); - if (geo.region_longitude) pv.region_longitude = parseFloat(String(geo.region_longitude)); - pv.city = geo.city || ''; - if (geo.city_latitude) pv.city_latitude = parseFloat(String(geo.city_latitude)); - if (geo.city_longitude) pv.city_longitude = parseFloat(String(geo.city_longitude)); - pv.timezone = geo.timezone || ''; - if (geo.latitude) pv.latitude = parseFloat(String(geo.latitude)); - if (geo.longitude) pv.longitude = parseFloat(String(geo.longitude)); - } - - if (pv.cls) { - pv.cls = Math.round(pv.cls * 1000) / 1000; - } - - const s = getSession(); - const vid = localStorage.getItem('agentuity_visitor_id') || 'vid_' + generateId(); - try { - localStorage.setItem('agentuity_visitor_id', vid); - } catch { - // Ignore - } - - const payload = { - org_id: c.orgId, - project_id: c.projectId, - thread_id: s?.threadId || '', - visitor_id: vid, - user_id: userId, - user_traits: userTraits, - is_devmode: c.isDevmode, - pageview: pv, - }; - - // Clear pending data since we're sending now - try { - sessionStorage.removeItem('agentuity_pending_pageview'); - } catch { - // Storage may be unavailable - } - - if (c.isDevmode) { - console.debug('[Agentuity Analytics]', JSON.stringify(payload, null, 2)); - return; - } - - const body = JSON.stringify(payload); - if (navigator.sendBeacon) { - navigator.sendBeacon(COLLECT_ENDPOINT, body); - } else { - fetch(COLLECT_ENDPOINT, { - method: 'POST', - body, - keepalive: true, - }).catch(() => { - // Silent failure - }); - } - } - - // Send on page hide, reset session on page visible - d.addEventListener('visibilitychange', () => { - if (c.isDevmode) { - console.debug('[Agentuity Analytics] visibilitychange:', d.visibilityState, 'sent:', sent); - } - if (d.visibilityState === 'hidden') { - send(); - } else if (d.visibilityState === 'visible') { - // User returned to the page - start a new attention session - // Keep page-level metrics (url, geo, vitals) but reset session-level metrics - resetSession(); - } - }); - w.addEventListener('pagehide', () => { - if (c.isDevmode) { - console.debug('[Agentuity Analytics] pagehide event'); - try { - sessionStorage.setItem('agentuity_last_event', `pagehide:${Date.now()}:${pv.path}`); - } catch { - // Storage may be unavailable - } - } - send(); - }); - - // Catch hard navigations (URL change, link click to new page, refresh) - w.addEventListener('beforeunload', () => { - if (c.isDevmode) { - console.debug('[Agentuity Analytics] beforeunload event'); - try { - sessionStorage.setItem('agentuity_last_event', `beforeunload:${Date.now()}:${pv.path}`); - } catch { - // Storage may be unavailable - } - } - send(); - }); - - // In devmode, check if previous page sent data (helps verify unload events work) - if (c.isDevmode) { - try { - const lastEvent = sessionStorage.getItem('agentuity_last_event'); - if (lastEvent) { - console.debug('[Agentuity Analytics] Previous page event:', lastEvent); - sessionStorage.removeItem('agentuity_last_event'); - } - } catch { - // Storage may be unavailable - } - } - - // Fallback: check for unsent data from previous page (in case unload events didn't fire) - try { - const pendingData = sessionStorage.getItem('agentuity_pending_pageview'); - if (pendingData) { - sessionStorage.removeItem('agentuity_pending_pageview'); - const pending = JSON.parse(pendingData); - // Only send if it's from a different page - if (pending.pageview?.path !== location.pathname) { - if (c.isDevmode) { - console.debug( - '[Agentuity Analytics] Sending unsent data from previous page:', - pending.pageview?.path - ); - console.debug('[Agentuity Analytics]', JSON.stringify(pending, null, 2)); - } else { - const body = JSON.stringify(pending); - if (navigator.sendBeacon) { - navigator.sendBeacon(COLLECT_ENDPOINT, body); - } - } - } - } - } catch { - // Storage or JSON parsing may fail - } - - // Store current pageview data periodically so it can be recovered if unload events don't fire - function savePendingData(): void { - try { - pv.time_on_page = Date.now() - pageStart; - const s = getSession(); - const vid = localStorage.getItem('agentuity_visitor_id') || 'vid_' + generateId(); - const payload = { - org_id: c.orgId, - project_id: c.projectId, - thread_id: s?.threadId || '', - visitor_id: vid, - user_id: userId, - user_traits: userTraits, - is_devmode: c.isDevmode, - pageview: { ...pv }, - }; - sessionStorage.setItem('agentuity_pending_pageview', JSON.stringify(payload)); - } catch { - // Storage may be unavailable - } - } - - // Save pending data every 2 seconds - setInterval(savePendingData, 2000); - // Also save on any interaction - d.addEventListener('click', savePendingData, { passive: true }); - d.addEventListener('scroll', savePendingData, { passive: true, once: true }); - - if (c.isDevmode) { - console.debug('[Agentuity Analytics] Beacon initialized, visibility:', d.visibilityState); - } - - // Scroll tracking - if (c.trackScroll !== false) { - const scrolled = new Set(); - - function getScrollDepth(): number { - const st = w.scrollY || d.documentElement.scrollTop; - const sh = d.documentElement.scrollHeight - d.documentElement.clientHeight; - return sh <= 0 ? 100 : Math.min(100, Math.round((st / sh) * 100)); - } - - w.addEventListener( - 'scroll', - () => { - const dp = getScrollDepth(); - if (dp > pv.scroll_depth) pv.scroll_depth = dp; - - [25, 50, 75, 100].forEach((m) => { - if (dp >= m && !scrolled.has(m)) { - scrolled.add(m); - pv.scroll_events.push({ - depth: m, - timestamp: Date.now() - pageStart, - }); - } - }); - }, - { passive: true } - ); - } - - // Web Vitals tracking - if (c.trackWebVitals !== false && typeof PerformanceObserver !== 'undefined') { - // FCP - try { - const fcpObs = new PerformanceObserver((list) => { - list.getEntries().forEach((entry) => { - if (entry.name === 'first-contentful-paint') { - pv.fcp = Math.round(entry.startTime); - fcpObs.disconnect(); - } - }); - }); - fcpObs.observe({ type: 'paint', buffered: true }); - } catch { - // Not supported - } - - // LCP - try { - new PerformanceObserver((list) => { - const entries = list.getEntries(); - const lastEntry = entries[entries.length - 1]; - if (lastEntry) { - pv.lcp = Math.round(lastEntry.startTime); - } - }).observe({ type: 'largest-contentful-paint', buffered: true }); - } catch { - // Not supported - } - - // CLS - try { - new PerformanceObserver((list) => { - list.getEntries().forEach((entry) => { - const layoutShift = entry as PerformanceEntry & { - hadRecentInput?: boolean; - value?: number; - }; - if (!layoutShift.hadRecentInput && layoutShift.value) { - pv.cls = (pv.cls || 0) + layoutShift.value; - } - }); - }).observe({ type: 'layout-shift', buffered: true }); - } catch { - // Not supported - } - - // INP - try { - new PerformanceObserver((list) => { - list.getEntries().forEach((entry) => { - const eventEntry = entry as PerformanceEntry & { duration?: number }; - if (eventEntry.duration && eventEntry.duration > (pv.inp || 0)) { - pv.inp = Math.round(eventEntry.duration); - } - }); - }).observe({ type: 'event', buffered: true }); - } catch { - // Not supported - } - } - - // SPA navigation tracking - if (c.trackSPANavigation !== false) { - const origPush = history.pushState; - const origReplace = history.replaceState; - let currentPath = location.pathname + location.search; - let lastHref = location.href; - - if (c.isDevmode) { - console.debug('[Agentuity Analytics] SPA tracking enabled, initial path:', currentPath); - } - - function handleNav(): void { - const newPath = location.pathname + location.search; - if (newPath !== currentPath) { - if (c.isDevmode) { - console.debug('[Agentuity Analytics] SPA navigation:', currentPath, '->', newPath); - } - send(true); // Force send on SPA navigation - currentPath = newPath; - lastHref = location.href; - init(); - } - } - - history.pushState = function (...args) { - origPush.apply(this, args); - setTimeout(handleNav, 0); - }; - - history.replaceState = function (...args) { - origReplace.apply(this, args); - setTimeout(handleNav, 0); - }; - - w.addEventListener('popstate', handleNav); - - // Fallback: poll for URL changes in case router bypasses history API - setInterval(() => { - if (location.href !== lastHref) { - lastHref = location.href; - handleNav(); - } - }, 200); - } - - // Click tracking - if (c.trackClicks !== false) { - d.addEventListener( - 'click', - (e) => { - const target = e.target as Element | null; - if (!target) return; - - const analyticsEl = target.closest('[data-analytics]'); - if (!analyticsEl) return; - - if (pv.custom_events.length < MAX_CUSTOM_EVENTS) { - pv.custom_events.push({ - timestamp: Date.now(), - name: 'click:' + analyticsEl.getAttribute('data-analytics'), - data: '', - }); - } - }, - true - ); - } - - // Error tracking - if (c.trackErrors !== false) { - w.addEventListener('error', (e) => { - if (pv.custom_events.length < MAX_CUSTOM_EVENTS) { - pv.custom_events.push({ - timestamp: Date.now(), - name: 'error:js_error', - data: JSON.stringify({ - message: e.message || 'Unknown', - filename: e.filename || '', - lineno: e.lineno || 0, - }), - }); - } - }); - - w.addEventListener('unhandledrejection', (e) => { - if (pv.custom_events.length < MAX_CUSTOM_EVENTS) { - pv.custom_events.push({ - timestamp: Date.now(), - name: 'error:unhandled_rejection', - data: JSON.stringify({ - message: e.reason instanceof Error ? e.reason.message : String(e.reason), - }), - }); - } - }); - } - - // Initialize on load - if (d.readyState === 'complete') { - init(); - } else { - w.addEventListener('load', init); - } - - // Public API - w.agentuityAnalytics = { - track(name: string, properties?: Record): void { - if (pv.custom_events.length < MAX_CUSTOM_EVENTS) { - pv.custom_events.push({ - timestamp: Date.now(), - name, - data: safeStringify(properties), - }); - } - }, - identify(id: string, traits?: Record): void { - userId = id; - if (traits) { - userTraits = {}; - for (const [key, value] of Object.entries(traits)) { - userTraits[key] = String(value); - } - } - }, - flush: () => send(true), - }; -})(); diff --git a/packages/frontend/src/analytics/index.ts b/packages/frontend/src/analytics/index.ts deleted file mode 100644 index 3bcd97587..000000000 --- a/packages/frontend/src/analytics/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Web Analytics for Agentuity SDK applications - * - * The analytics beacon is bundled separately via beacon-standalone.ts - * and injected as a script tag by the SDK runtime. - * - * This module re-exports types and utilities for programmatic access. - */ - -import type { AnalyticsClient } from './types'; - -export type { - AnalyticsClient, - AnalyticsPayload, - AnalyticsPageConfig, - PageViewPayload, - ScrollEvent, - AnalyticsCustomEvent, - GeoLocation, -} from './types'; - -export { getVisitorId, isOptedOut, setOptOut } from './utils/storage'; -export { getUTMParams } from './utils/utm'; - -/** - * Get the analytics client from the global window object. - * Returns null if the beacon hasn't been initialized. - */ -export function getAnalytics(): AnalyticsClient | null { - if (typeof window !== 'undefined') { - const client = (window as { agentuityAnalytics?: AnalyticsClient }).agentuityAnalytics; - return client ?? null; - } - return null; -} - -/** - * Track a custom event. No-op if analytics isn't initialized. - */ -export function track(eventName: string, properties?: Record): void { - getAnalytics()?.track(eventName, properties); -} diff --git a/packages/frontend/src/analytics/types.ts b/packages/frontend/src/analytics/types.ts deleted file mode 100644 index 4f7b5ad49..000000000 --- a/packages/frontend/src/analytics/types.ts +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Scroll milestone event - records when a scroll depth milestone was first crossed - */ -export interface ScrollEvent { - depth: number; // 25, 50, 75, or 100 - timestamp: number; // ms since page load -} - -/** - * Custom event tracked during the page session - */ -export interface AnalyticsCustomEvent { - timestamp: number; // ms since epoch - name: string; - data?: string; // JSON string -} - -/** - * Geo location data from agentuity.sh/location - */ -export interface GeoLocation { - country?: string; - country_latitude?: number; - country_longitude?: number; - region?: string; - region_latitude?: number; - region_longitude?: number; - city?: string; - city_latitude?: number; - city_longitude?: number; - timezone?: string; - latitude?: number; - longitude?: number; -} - -/** - * Page view payload sent to the collection endpoint - * Represents a single page view with all aggregated data - */ -export interface PageViewPayload { - id: string; - timestamp: number; - timezone_offset: number; - - // Page context - url: string; - path: string; - referrer: string; - title: string; - - // Device/browser - screen_width: number; - screen_height: number; - viewport_width: number; - viewport_height: number; - device_pixel_ratio: number; - user_agent: string; - language: string; - - // Geography - country?: string; - country_latitude?: number; - country_longitude?: number; - region?: string; - region_latitude?: number; - region_longitude?: number; - city?: string; - city_latitude?: number; - city_longitude?: number; - timezone?: string; - latitude?: number; - longitude?: number; - - // Performance metrics - load_time?: number; - dom_ready?: number; - ttfb?: number; - - // Web vitals (collected during session) - fcp?: number; - lcp?: number; - cls?: number; - inp?: number; - - // Engagement metrics - scroll_depth: number; // max scroll depth reached - time_on_page: number; // ms - - // Scroll events: when milestones were first crossed - scroll_events: ScrollEvent[]; - - // Custom events (max 1000) - custom_events: AnalyticsCustomEvent[]; - - // UTM parameters - utm_source?: string; - utm_medium?: string; - utm_campaign?: string; - utm_term?: string; - utm_content?: string; -} - -/** - * Payload sent to /_agentuity/webanalytics/collect - */ -export interface AnalyticsPayload { - org_id: string; - project_id: string; - thread_id: string; - visitor_id: string; - user_id: string; - user_traits: Record; - is_devmode: boolean; - pageview: PageViewPayload; -} - -/** - * Configuration injected by SDK runtime into window.__AGENTUITY_ANALYTICS__ - */ -export interface AnalyticsPageConfig { - enabled: boolean; - orgId: string; - projectId: string; - threadId: string; - isDevmode: boolean; - - trackClicks?: boolean; - trackScroll?: boolean; - trackOutboundLinks?: boolean; - trackForms?: boolean; - trackWebVitals?: boolean; - trackErrors?: boolean; - trackSPANavigation?: boolean; - requireConsent?: boolean; - sampleRate?: number; - excludePatterns?: string[]; - globalProperties?: Record; -} - -/** - * Public analytics client interface (exposed on window.agentuityAnalytics) - */ -export interface AnalyticsClient { - /** - * Track a custom event (aggregated and sent on page exit) - */ - track(eventName: string, properties?: Record): void; - - /** - * Identify the current user - */ - identify(userId: string, traits?: Record): void; - - /** - * Flush pending page view data immediately - */ - flush(): void; -} - -declare global { - interface Window { - __AGENTUITY_ANALYTICS__?: AnalyticsPageConfig; - __AGENTUITY_SESSION__?: { - threadId?: string; - }; - agentuityAnalytics?: AnalyticsClient; - } -} diff --git a/packages/frontend/src/analytics/utils/storage.ts b/packages/frontend/src/analytics/utils/storage.ts deleted file mode 100644 index 43d195407..000000000 --- a/packages/frontend/src/analytics/utils/storage.ts +++ /dev/null @@ -1,64 +0,0 @@ -const VISITOR_ID_KEY = 'agentuity_visitor_id'; -const OPT_OUT_KEY = 'agentuity_analytics_optout'; - -/** - * Generate a random UUID v4 - */ -function generateUUID(): string { - if (typeof crypto !== 'undefined' && crypto.randomUUID) { - return crypto.randomUUID(); - } - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - const r = (Math.random() * 16) | 0; - const v = c === 'x' ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); -} - -/** - * Get or create the visitor ID from localStorage - */ -export function getVisitorId(): string { - if (typeof localStorage === 'undefined') { - return generateUUID(); - } - - let visitorId = localStorage.getItem(VISITOR_ID_KEY); - if (!visitorId) { - visitorId = `vid_${generateUUID()}`; - try { - localStorage.setItem(VISITOR_ID_KEY, visitorId); - } catch { - // localStorage might be full or disabled - } - } - return visitorId; -} - -/** - * Check if user has opted out - */ -export function isOptedOut(): boolean { - if (typeof localStorage === 'undefined') { - return false; - } - return localStorage.getItem(OPT_OUT_KEY) === 'true'; -} - -/** - * Set opt-out status - */ -export function setOptOut(optOut: boolean): void { - if (typeof localStorage === 'undefined') { - return; - } - try { - if (optOut) { - localStorage.setItem(OPT_OUT_KEY, 'true'); - } else { - localStorage.removeItem(OPT_OUT_KEY); - } - } catch { - // localStorage might be full or disabled - } -} diff --git a/packages/frontend/src/analytics/utils/utm.ts b/packages/frontend/src/analytics/utils/utm.ts deleted file mode 100644 index 508df7dca..000000000 --- a/packages/frontend/src/analytics/utils/utm.ts +++ /dev/null @@ -1,36 +0,0 @@ -export interface UTMParams { - utm_source?: string; - utm_medium?: string; - utm_campaign?: string; - utm_term?: string; - utm_content?: string; -} - -/** - * Extract UTM parameters from the current URL - */ -export function getUTMParams(): UTMParams { - if (typeof window === 'undefined') { - return {}; - } - - const params = new URLSearchParams(window.location.search); - const utm: UTMParams = {}; - - const source = params.get('utm_source'); - if (source) utm.utm_source = source; - - const medium = params.get('utm_medium'); - if (medium) utm.utm_medium = medium; - - const campaign = params.get('utm_campaign'); - if (campaign) utm.utm_campaign = campaign; - - const term = params.get('utm_term'); - if (term) utm.utm_term = term; - - const content = params.get('utm_content'); - if (content) utm.utm_content = content; - - return utm; -} diff --git a/packages/frontend/src/beacon-script.ts b/packages/frontend/src/beacon-script.ts deleted file mode 100644 index 44f985ff5..000000000 --- a/packages/frontend/src/beacon-script.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * This file is a placeholder for TypeScript compilation. - * The actual BEACON_SCRIPT value is generated at build time by scripts/build-beacon.ts - * and written directly to dist/beacon-script.js, overwriting the compiled output. - * - * This allows TypeScript to generate proper .d.ts files during compilation, - * while the actual minified beacon code is injected during the build step. - */ - -export const BEACON_SCRIPT: string = ''; - -/** - * Validates that the beacon script has been properly injected at build time. - * Call this early in the runtime to fail fast if the build step was missed. - * @throws Error if BEACON_SCRIPT is empty (build step not run) - */ -export function validateBeaconScript(): void { - if (!BEACON_SCRIPT || BEACON_SCRIPT.length === 0) { - throw new Error( - 'BEACON_SCRIPT is empty. The frontend package was not built correctly. ' + - 'Run "bun run build" in @agentuity/frontend to generate the beacon script.' - ); - } -} diff --git a/packages/frontend/src/index.ts b/packages/frontend/src/index.ts index 212395c41..5a4fc9990 100644 --- a/packages/frontend/src/index.ts +++ b/packages/frontend/src/index.ts @@ -41,24 +41,3 @@ export type { RecordingHandle, RecordingState, } from '@agentuity/core'; - -// Export analytics (beacon is bundled separately via beacon-standalone.ts) -export { - getAnalytics, - track, - getVisitorId, - isOptedOut, - setOptOut, - getUTMParams, - type AnalyticsClient, - type AnalyticsPayload, - type AnalyticsPageConfig, - type PageViewPayload, - type ScrollEvent, - type AnalyticsCustomEvent, - type GeoLocation, -} from './analytics'; - -// Re-export beacon script for server-side use -// The actual value is replaced at build time by scripts/build-beacon.ts -export { BEACON_SCRIPT, validateBeaconScript } from './beacon-script'; diff --git a/packages/frontend/src/websocket-manager.ts b/packages/frontend/src/websocket-manager.ts index c94073488..a3842f104 100644 --- a/packages/frontend/src/websocket-manager.ts +++ b/packages/frontend/src/websocket-manager.ts @@ -3,15 +3,27 @@ import { deserializeData } from './serialization'; /** * Serialize data for WebSocket transmission + * + * Note: The return type is narrowed to exclude SharedArrayBuffer, which is part of + * ArrayBufferLike but not supported by WebSocket.send(). */ const serializeWSData = ( data: unknown -): string | ArrayBufferLike | Blob | ArrayBufferView => { +): string | ArrayBuffer | Blob | ArrayBufferView => { if (typeof data === 'string') { return data; } if (typeof data === 'object') { - if (data instanceof ArrayBuffer || ArrayBuffer.isView(data) || data instanceof Blob) { + if (data instanceof ArrayBuffer) { + return data; + } + if (ArrayBuffer.isView(data)) { + // ArrayBuffer.isView can return true for views backed by SharedArrayBuffer, + // but in practice this is rare and we assume standard ArrayBuffer-backed views. + // The type assertion is safe for typical WebSocket usage patterns. + return data as ArrayBufferView; + } + if (data instanceof Blob) { return data; } return JSON.stringify(data); diff --git a/packages/hono/package.json b/packages/hono/package.json new file mode 100644 index 000000000..47d3abc6d --- /dev/null +++ b/packages/hono/package.json @@ -0,0 +1,50 @@ +{ + "name": "@agentuity/hono", + "version": "1.0.0", + "license": "Apache-2.0", + "author": "Agentuity employees and contributors", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "src", + "dist" + ], + "scripts": { + "clean": "rm -rf dist tsconfig.tsbuildinfo", + "build": "bunx tsc --build", + "typecheck": "bunx tsc --noEmit", + "prepublishOnly": "bun run clean && bun run build" + }, + "dependencies": { + "@agentuity/telemetry": "workspace:*", + "@agentuity/keyvalue": "workspace:*", + "@agentuity/vector": "workspace:*", + "@agentuity/stream": "workspace:*", + "@agentuity/queue": "workspace:*", + "@agentuity/email": "workspace:*", + "@agentuity/task": "workspace:*", + "@agentuity/schedule": "workspace:*", + "@agentuity/sandbox": "workspace:*", + "@opentelemetry/api": "^1.9.0", + "hono": "^4.7.13" + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", + "typescript": "^5.9.0" + }, + "peerDependencies": { + "hono": "^4.0.0" + }, + "publishConfig": { + "access": "public" + }, + "sideEffects": false +} diff --git a/packages/hono/src/index.ts b/packages/hono/src/index.ts new file mode 100644 index 000000000..cb27ff0ce --- /dev/null +++ b/packages/hono/src/index.ts @@ -0,0 +1,173 @@ +/** + * @agentuity/hono - Agentuity middleware for Hono + * + * Provides the `agentuity()` middleware that initializes telemetry and service clients, + * injecting them into Hono's context variables. + * + * @example Basic usage (auto-configured from env vars): + * ```typescript + * import { Hono } from 'hono'; + * import { agentuity } from '@agentuity/hono'; + * + * const app = new Hono(); + * app.use('*', agentuity()); + * + * app.get('/data', async (c) => { + * const { kv, logger } = c.var; + * const data = await kv.get('namespace', 'key'); + * return c.json(data); + * }); + * ``` + */ + +import { createMiddleware } from 'hono/factory'; +import { + register, + type TelemetryConfig, + type TelemetryResponse, + type Logger, +} from '@agentuity/telemetry'; +import { KeyValueClient, type KeyValueClientOptions } from '@agentuity/keyvalue'; +import { VectorClient, type VectorClientOptions } from '@agentuity/vector'; +import { StreamClient, type StreamClientOptions } from '@agentuity/stream'; +import { QueueClient, type QueueClientOptions } from '@agentuity/queue'; +import { EmailClient, type EmailClientOptions } from '@agentuity/email'; +import { TaskClient, type TaskClientOptions } from '@agentuity/task'; +import { ScheduleClient, type ScheduleClientOptions } from '@agentuity/schedule'; +import { SandboxClient, type SandboxClientOptions } from '@agentuity/sandbox'; + +export interface ServicesConfig { + /** Logger instance */ + logger?: Logger; + /** Service client options */ + clients?: { + kv?: KeyValueClientOptions; + vector?: VectorClientOptions; + stream?: StreamClientOptions; + queue?: QueueClientOptions; + email?: EmailClientOptions; + task?: TaskClientOptions; + schedule?: ScheduleClientOptions; + sandbox?: SandboxClientOptions; + }; +} + +export interface Services { + kv: KeyValueClient; + stream: StreamClient; + vector: VectorClient; + sandbox: SandboxClient; + queue: QueueClient; + email: EmailClient; + schedule: ScheduleClient; + task: TaskClient; +} + +export interface AgentuityOptions { + /** Telemetry configuration overrides */ + telemetry?: Partial; + /** Services configuration */ + services?: ServicesConfig; +} + +// Global state (initialized once at composition time) +let telemetryInstance: TelemetryResponse | null = null; +let globalServices: Services | null = null; + +/** + * Initialize service clients. + */ +function initServices(config?: ServicesConfig): Services { + if (globalServices) return globalServices; + + globalServices = { + kv: new KeyValueClient({ logger: config?.logger, ...config?.clients?.kv }), + stream: new StreamClient({ logger: config?.logger, ...config?.clients?.stream }), + vector: new VectorClient({ logger: config?.logger, ...config?.clients?.vector }), + queue: new QueueClient({ logger: config?.logger, ...config?.clients?.queue }), + email: new EmailClient({ logger: config?.logger, ...config?.clients?.email }), + task: new TaskClient({ logger: config?.logger, ...config?.clients?.task }), + schedule: new ScheduleClient({ logger: config?.logger, ...config?.clients?.schedule }), + sandbox: new SandboxClient({ logger: config?.logger, ...config?.clients?.sandbox }), + }; + + return globalServices; +} + +/** + * Get initialized services. Throws if not initialized. + */ +export function getServices(): Services { + if (!globalServices) { + throw new Error('Services not initialized. Call agentuity() first.'); + } + return globalServices; +} + +/** + * Reset global state (for testing). + */ +export function resetServices(): void { + globalServices = null; +} + +/** + * Create the Agentuity middleware for Hono. + * + * Initializes telemetry and services at middleware composition time, + * making them available via Hono's context variables. + * + * Telemetry auto-configures from AGENTUITY_* environment variables. + * Services auto-configure from AGENTUITY_SDK_KEY. + */ +export function agentuity(options?: AgentuityOptions) { + // Initialize telemetry (auto-configures from env vars) + if (!telemetryInstance) { + telemetryInstance = register(options?.telemetry); + } + + // Initialize services + initServices({ + logger: telemetryInstance.logger, + ...options?.services, + }); + + // Return the middleware handler + return createMiddleware(async (c, next) => { + // Inject telemetry into context + c.set('tracer', telemetryInstance!.tracer as any); + c.set('logger', telemetryInstance!.logger as any); + c.set('meter', telemetryInstance!.meter as any); + + // Inject services into context + const services = getServices(); + c.set('kv', services.kv as any); + c.set('stream', services.stream as any); + c.set('vector', services.vector as any); + c.set('queue', services.queue as any); + c.set('email', services.email as any); + c.set('schedule', services.schedule as any); + c.set('task', services.task as any); + c.set('sandbox', services.sandbox as any); + + await next(); + }); +} + +/** + * Get the telemetry instance. Available after agentuity() is composed. + */ +export function getTelemetry(): TelemetryResponse | null { + return telemetryInstance; +} + +/** + * Reset global state (for testing). + */ +export function reset(): void { + telemetryInstance = null; + resetServices(); +} + +// Re-export types +export type { TelemetryConfig, TelemetryResponse, Logger } from '@agentuity/telemetry'; diff --git a/packages/hono/tsconfig.json b/packages/hono/tsconfig.json new file mode 100644 index 000000000..89046835e --- /dev/null +++ b/packages/hono/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "types": ["bun-types"] + }, + "include": ["src/**/*"], + "references": [ + { "path": "../telemetry" }, + { "path": "../keyvalue" }, + { "path": "../vector" }, + { "path": "../stream" }, + { "path": "../queue" }, + { "path": "../email" }, + { "path": "../task" }, + { "path": "../schedule" }, + { "path": "../sandbox" } + ] +} diff --git a/packages/keyvalue/package.json b/packages/keyvalue/package.json index 5f53be502..78b491f70 100644 --- a/packages/keyvalue/package.json +++ b/packages/keyvalue/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/keyvalue/src/index.ts b/packages/keyvalue/src/index.ts index b51bbe5f8..35d435010 100644 --- a/packages/keyvalue/src/index.ts +++ b/packages/keyvalue/src/index.ts @@ -31,7 +31,7 @@ import { type KeyValueStorageSetParams, type DataResult, } from '@agentuity/core/keyvalue'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/keyvalue/tsconfig.json b/packages/keyvalue/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/keyvalue/tsconfig.json +++ b/packages/keyvalue/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/local/package.json b/packages/local/package.json new file mode 100644 index 000000000..2b1545cfc --- /dev/null +++ b/packages/local/package.json @@ -0,0 +1,37 @@ +{ + "name": "@agentuity/local", + "version": "1.0.0", + "license": "Apache-2.0", + "author": "Agentuity employees and contributors", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "src", + "dist" + ], + "scripts": { + "clean": "rm -rf dist tsconfig.tsbuildinfo", + "build": "bunx tsc --build", + "typecheck": "bunx tsc --noEmit", + "prepublishOnly": "bun run clean && bun run build" + }, + "dependencies": { + "@agentuity/core": "workspace:*" + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", + "typescript": "^5.9.0" + }, + "publishConfig": { + "access": "public" + }, + "sideEffects": false +} diff --git a/packages/runtime/src/services/local/_db.ts b/packages/local/src/bun/db.ts similarity index 100% rename from packages/runtime/src/services/local/_db.ts rename to packages/local/src/bun/db.ts diff --git a/packages/runtime/src/services/local/email.ts b/packages/local/src/bun/email.ts similarity index 100% rename from packages/runtime/src/services/local/email.ts rename to packages/local/src/bun/email.ts diff --git a/packages/local/src/bun/index.ts b/packages/local/src/bun/index.ts new file mode 100644 index 000000000..0f16d8b92 --- /dev/null +++ b/packages/local/src/bun/index.ts @@ -0,0 +1,14 @@ +/** + * Bun-specific local storage implementations + * + * Uses Bun's built-in SQLite for local development storage. + */ + +export { getLocalDB, closeLocalDB } from './db'; +export { LocalKeyValueStorage } from './kv'; +export { LocalStreamStorage } from './stream'; +export { LocalVectorStorage } from './vector'; +export { LocalQueueStorage } from './queue'; +export { LocalEmailStorage } from './email'; +export { LocalTaskStorage } from './task'; +export { now, normalizeProjectPath } from './util'; diff --git a/packages/runtime/src/services/local/keyvalue.ts b/packages/local/src/bun/kv.ts similarity index 98% rename from packages/runtime/src/services/local/keyvalue.ts rename to packages/local/src/bun/kv.ts index 02af6cb34..d95148b01 100644 --- a/packages/runtime/src/services/local/keyvalue.ts +++ b/packages/local/src/bun/kv.ts @@ -1,4 +1,4 @@ -import type { Database } from 'bun:sqlite'; +import { Database } from 'bun:sqlite'; import type { KeyValueStorage, DataResult, @@ -10,7 +10,7 @@ import type { GetAllStatsParams, KeyValueStatsPaginated, } from '@agentuity/core'; -import { now } from './_util'; +import { now } from './util'; export class LocalKeyValueStorage implements KeyValueStorage { #db: Database; diff --git a/packages/runtime/src/services/local/queue.ts b/packages/local/src/bun/queue.ts similarity index 100% rename from packages/runtime/src/services/local/queue.ts rename to packages/local/src/bun/queue.ts diff --git a/packages/runtime/src/services/local/stream.ts b/packages/local/src/bun/stream.ts similarity index 99% rename from packages/runtime/src/services/local/stream.ts rename to packages/local/src/bun/stream.ts index bf218e37f..ea09d1044 100644 --- a/packages/runtime/src/services/local/stream.ts +++ b/packages/local/src/bun/stream.ts @@ -7,7 +7,7 @@ import type { ListStreamsResponse, StreamInfo, } from '@agentuity/core'; -import { now } from './_util'; +import { now } from './util'; import { join } from 'node:path'; import { homedir } from 'node:os'; import { randomUUID } from 'node:crypto'; diff --git a/packages/runtime/src/services/local/task.ts b/packages/local/src/bun/task.ts similarity index 99% rename from packages/runtime/src/services/local/task.ts rename to packages/local/src/bun/task.ts index d7de6abe2..b031be8e9 100644 --- a/packages/runtime/src/services/local/task.ts +++ b/packages/local/src/bun/task.ts @@ -34,7 +34,7 @@ import type { EntityRef, } from '@agentuity/core'; import { StructuredError, normalizeTaskStatus } from '@agentuity/core'; -import { now } from './_util'; +import { now } from './util'; const TaskTitleRequiredError = StructuredError( 'TaskTitleRequiredError', diff --git a/packages/runtime/src/services/local/_util.ts b/packages/local/src/bun/util.ts similarity index 100% rename from packages/runtime/src/services/local/_util.ts rename to packages/local/src/bun/util.ts diff --git a/packages/runtime/src/services/local/vector.ts b/packages/local/src/bun/vector.ts similarity index 99% rename from packages/runtime/src/services/local/vector.ts rename to packages/local/src/bun/vector.ts index f7ce7790c..3742de7c9 100644 --- a/packages/runtime/src/services/local/vector.ts +++ b/packages/local/src/bun/vector.ts @@ -13,8 +13,8 @@ import type { VectorGetAllStatsParams, VectorStatsPaginated, } from '@agentuity/core'; +import { now, simpleEmbedding, cosineSimilarity } from './util'; import { randomUUID } from 'node:crypto'; -import { simpleEmbedding, cosineSimilarity, now } from './_util'; export class LocalVectorStorage implements VectorStorage { #db: Database; diff --git a/packages/local/src/index.ts b/packages/local/src/index.ts new file mode 100644 index 000000000..98f7b9c5c --- /dev/null +++ b/packages/local/src/index.ts @@ -0,0 +1,36 @@ +/** + * @agentuity/local - Local development services + * + * Provides local storage implementations for development. + * Runtime-specific implementations are auto-detected. + * + * Users can provide their own implementations via service overrides + * by implementing these interfaces. + */ + +// Re-export core interfaces so users can implement their own +export type { + KeyValueStorage, + StreamStorage, + VectorStorage, + QueueService, + EmailService, + TaskStorage, +} from '@agentuity/core'; + +// Runtime detection +export { detectRuntime, isLocalAvailable, getRuntimeName, type Runtime } from './runtime'; + +// Bun implementations (only available when running in Bun) +export { + getLocalDB, + closeLocalDB, + LocalKeyValueStorage, + LocalStreamStorage, + LocalVectorStorage, + LocalQueueStorage, + LocalEmailStorage, + LocalTaskStorage, + now, + normalizeProjectPath, +} from './bun'; diff --git a/packages/local/src/runtime.ts b/packages/local/src/runtime.ts new file mode 100644 index 000000000..890339e6d --- /dev/null +++ b/packages/local/src/runtime.ts @@ -0,0 +1,56 @@ +/** + * Runtime detection for @agentuity/local + * + * Detects the current JavaScript runtime and provides + * appropriate local storage implementations. + */ + +export type Runtime = 'bun' | 'node' | 'deno' | 'workers' | 'unknown'; + +/** + * Detect the current runtime environment. + */ +export function detectRuntime(): Runtime { + // Bun has a global Bun object + if (typeof (globalThis as any).Bun !== 'undefined') { + return 'bun'; + } + + // Deno has a global Deno object + if (typeof (globalThis as any).Deno !== 'undefined') { + return 'deno'; + } + + // Cloudflare Workers have caches.default + if ( + typeof (globalThis as any).caches !== 'undefined' && + 'default' in (globalThis as any).caches + ) { + return 'workers'; + } + + // Node.js has process.versions.node + if ( + typeof (globalThis as any).process !== 'undefined' && + (globalThis as any).process?.versions?.node + ) { + return 'node'; + } + + return 'unknown'; +} + +/** + * Check if local services are available for the current runtime. + */ +export function isLocalAvailable(): boolean { + const runtime = detectRuntime(); + return runtime === 'bun'; // Only Bun is supported for now +} + +/** + * Get the current runtime name for logging. + */ +export function getRuntimeName(): string { + return detectRuntime(); +} diff --git a/packages/local/tsconfig.json b/packages/local/tsconfig.json new file mode 100644 index 000000000..6092060e1 --- /dev/null +++ b/packages/local/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"], + "references": [{ "path": "../core" }] +} diff --git a/packages/opencode/src/agents/expert-backend.ts b/packages/opencode/src/agents/expert-backend.ts index 2fed9e45c..f1e0d147b 100644 --- a/packages/opencode/src/agents/expert-backend.ts +++ b/packages/opencode/src/agents/expert-backend.ts @@ -407,14 +407,8 @@ if (!bucketResult.valid) { \`\`\` ├── agentuity.json # Project config (projectId, orgId) -├── agentuity.config.ts # Build config ├── package.json -├── src/ -│ ├── agent// # Each agent in its own folder -│ │ ├── agent.ts # Agent definition -│ │ └── index.ts # Exports -│ ├── api/ # API routes (Hono) -│ └── web/ # React frontend +├── src/ # Application source (framework-specific) └── .env # AGENTUITY_SDK_KEY, DATABASE_URL, etc. \`\`\` diff --git a/packages/postgres/package.json b/packages/postgres/package.json index ed54d0d79..c8bcd6c7a 100644 --- a/packages/postgres/package.json +++ b/packages/postgres/package.json @@ -1,6 +1,6 @@ { "name": "@agentuity/postgres", - "version": "2.0.9", + "version": "1.0.54", "license": "Apache-2.0", "author": "Agentuity employees and contributors", "type": "module", @@ -34,16 +34,7 @@ "@agentuity/core": "workspace:*", "pg": "^8.13.1" }, - "peerDependencies": { - "@agentuity/runtime": "workspace:*" - }, - "peerDependenciesMeta": { - "@agentuity/runtime": { - "optional": true - } - }, "devDependencies": { - "@agentuity/runtime": "workspace:*", "@agentuity/test-utils": "workspace:*", "@types/bun": "latest", "@types/pg": "^8.11.14", diff --git a/packages/postgres/src/registry.ts b/packages/postgres/src/registry.ts index 58272ab2e..9b3e0a377 100644 --- a/packages/postgres/src/registry.ts +++ b/packages/postgres/src/registry.ts @@ -7,8 +7,8 @@ * The runtime can use `shutdownAll()` to close all registered clients/pools * during graceful shutdown. * - * When @agentuity/runtime is available, this module automatically registers - * a shutdown hook so all postgres clients/pools are closed during graceful shutdown. + * Automatically registers process shutdown hooks (beforeExit, SIGTERM, SIGINT) + * so all postgres clients/pools are closed during graceful shutdown. */ /** @@ -174,40 +174,28 @@ export function hasActiveClients(): boolean { } /** - * Attempts to register a shutdown hook with @agentuity/runtime if available. - * This is called automatically when the first client is registered. + * Registers a process shutdown hook to gracefully close all connections. + * Uses standard Node.js/Bun process events instead of framework-specific hooks. * * @internal */ -function tryRegisterRuntimeHook(): void { +function registerProcessShutdownHook(): void { const global = globalThis as Record; - // Only try once + // Only register once if (global[RUNTIME_HOOK_REGISTERED]) { return; } global[RUNTIME_HOOK_REGISTERED] = true; - // Try to dynamically import the runtime and register our shutdown hook - // This is done asynchronously to avoid blocking client creation - // and to handle the case where runtime is not available - // Using Function constructor to avoid TypeScript trying to resolve the module at build time - const dynamicImport = new Function('specifier', 'return import(specifier)') as ( - specifier: string - ) => Promise<{ registerShutdownHook?: (hook: () => Promise | void) => void }>; - - dynamicImport('@agentuity/runtime') - .then((runtime) => { - if (typeof runtime.registerShutdownHook === 'function') { - runtime.registerShutdownHook(async () => { - await shutdownAll(5000); // 5 second timeout for graceful shutdown - }); - } - }) - .catch(() => { - // Runtime not available - that's fine, user can call shutdownAll manually - }); + const shutdown = () => { + shutdownAll(5000).catch(() => {}); + }; + + process.on('beforeExit', shutdown); + process.on('SIGTERM', shutdown); + process.on('SIGINT', shutdown); } -// Try to register with runtime when this module is first loaded -tryRegisterRuntimeHook(); +// Register shutdown hook when this module is first loaded +registerProcessShutdownHook(); diff --git a/packages/queue/package.json b/packages/queue/package.json index 53e3b8683..7dde22aee 100644 --- a/packages/queue/package.json +++ b/packages/queue/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/queue/src/index.ts b/packages/queue/src/index.ts index 369eaf30d..b5f3643ca 100644 --- a/packages/queue/src/index.ts +++ b/packages/queue/src/index.ts @@ -21,7 +21,7 @@ import { type QueueCreateParams, type QueueCreateResult, } from '@agentuity/core/queue'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger, StructuredError } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/queue/tsconfig.json b/packages/queue/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/queue/tsconfig.json +++ b/packages/queue/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/react/package.json b/packages/react/package.json index b9eeaa21f..d976a6d95 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@agentuity/react", - "version": "2.0.9", + "version": "1.0.54", "license": "Apache-2.0", "author": "Agentuity employees and contributors", "type": "module", @@ -34,6 +34,7 @@ "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { + "@agentuity/analytics": "workspace:*", "@agentuity/core": "workspace:*", "@agentuity/frontend": "workspace:*" }, diff --git a/packages/react/src/analytics.tsx b/packages/react/src/analytics.tsx index e9163d44b..11c49cf8c 100644 --- a/packages/react/src/analytics.tsx +++ b/packages/react/src/analytics.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { getAnalytics, type AnalyticsClient } from '@agentuity/frontend'; +import { getAnalytics, type AnalyticsClient } from '@agentuity/analytics'; const noopClient: AnalyticsClient = { track: () => {}, diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index 8abcf6398..52a0fa63f 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -12,5 +12,5 @@ "jsx": "react-jsx" }, "include": ["src/**/*"], - "references": [{ "path": "../core" }, { "path": "../frontend" }] + "references": [{ "path": "../analytics" }, { "path": "../core" }, { "path": "../frontend" }] } diff --git a/packages/runtime/AGENTS.md b/packages/runtime/AGENTS.md deleted file mode 100644 index ba28bf2ff..000000000 --- a/packages/runtime/AGENTS.md +++ /dev/null @@ -1,116 +0,0 @@ -# Agent Guidelines for @agentuity/runtime - -## Package Overview - -Hono-based server runtime for Agentuity applications, optimized for Bun with OpenTelemetry observability. - -## Commands - -- **Build**: `bun run build` -- **Typecheck**: `bun run typecheck` -- **Test**: `bun test` -- **Clean**: `bun run clean` - -## Architecture - -- **Runtime**: Bun (required for native WebSocket) -- **Framework**: Hono -- **Dependencies**: `@agentuity/core`, Hono, OpenTelemetry -- **Features**: WebSocket, SSE, streaming, storage abstractions (kv, vector, stream) - -## Code Conventions - -- **Agent context**: Every handler receives `AgentContext` with logger, tracer, storage, auth -- **Schema validation**: Use `agent.validator()` for automatic input validation -- **Observability**: Use `ctx.logger` not `console.log` -- **Type inference**: Let TypeScript infer handler types from schemas - -## Agent Pattern - -```typescript -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; - -export default createAgent('my-agent', { - description: 'What this agent does', - schema: { - input: s.object({ name: s.string() }), - output: s.object({ id: s.string() }), - }, - handler: async (ctx, input) => { - // ctx.logger, ctx.kv, ctx.tracer, ctx.auth available - return { id: `user-${input.name}` }; - }, -}); -``` - -## Authentication (ctx.auth) - -When using `@agentuity/auth` middleware, `ctx.auth` is available on AgentContext: - -```typescript -export default createAgent('protected-agent', { - handler: async (ctx, input) => { - // ctx.auth is null for unauthenticated requests - if (!ctx.auth) { - return { error: 'Please sign in' }; - } - - // Access user data - const user = await ctx.auth.getUser(); - - // Check organization roles - if (await ctx.auth.hasOrgRole('admin')) { - // Admin logic - } - - // Check API key permissions (for API key auth) - if (ctx.auth.authMethod === 'api-key') { - if (!ctx.auth.hasPermission('data', 'read')) { - return { error: 'Insufficient permissions' }; - } - } - - return { userId: user.id }; - }, -}); -``` - -**Key properties:** - -- `ctx.auth.getUser()` - Get authenticated user -- `ctx.auth.org` - Active organization context (if any) -- `ctx.auth.getOrgRole()` - Get user's role in active org -- `ctx.auth.hasOrgRole(...roles)` - Check if user has one of the roles -- `ctx.auth.authMethod` - 'session' | 'api-key' | 'bearer' -- `ctx.auth.hasPermission(resource, ...actions)` - Check API key permissions - -## Route Validation - -```typescript -const router = createRouter(); - -// Automatic validation from agent schema -router.post('/', myAgent.validator(), async (c) => { - const data = c.req.valid('json'); // Fully typed! - return c.json(await myAgent.run(data)); -}); -``` - -## Type Safety - -**CRITICAL:** Do NOT add type annotations to handler parameters - let TypeScript infer them. - -See [TYPE_SAFETY.md](TYPE_SAFETY.md) for detailed documentation. - -## Testing - -- Use `app.request()` for route testing (NOT `testClient()`) -- Mock contexts from `test/helpers/test-context.ts` -- Import from `../src/` in tests -- When running tests, prefer using a subagent (Task tool) to avoid context bloat from test output - -## Publishing - -1. Run build, typecheck, test -2. Publish **after** `@agentuity/core` diff --git a/packages/runtime/CONTEXT-FLOW.md b/packages/runtime/CONTEXT-FLOW.md deleted file mode 100644 index b1f52f647..000000000 --- a/packages/runtime/CONTEXT-FLOW.md +++ /dev/null @@ -1,179 +0,0 @@ -# Context Flow in Agentuity Runtime - -This document explains how context variables flow through the system and the difference between HonoContext and AgentContext. - -## Two Contexts - -The runtime has **two separate contexts** that serve different purposes: - -### 1. HonoContext (`c`) - HTTP Request Context - -**Used by**: Route handlers -**Access pattern**: `c.var.*` -**Set via**: `c.set('key', value)` in middleware - -**Variables** (from `Variables` interface in `app.ts`): - -- `c.var.logger` - Logger instance -- `c.var.tracer` - OpenTelemetry tracer -- `c.var.meter` - OpenTelemetry meter -- `c.var.sessionId` - Session ID -- `c.var.thread` - Thread instance -- `c.var.session` - Session instance -- `c.var.kv` - Key-value storage -- `c.var.stream` - Stream storage -- `c.var.vector` - Vector storage -- `c.var.app` - Application state - -**Private variables** (internal use): - -- `c.var.waitUntilHandler` - Background task handler -- `c.var.routeId` - Route identifier -- `c.var.agentIds` - Set of agent IDs -- `c.var.trigger` - Trigger type - -### 2. AgentContext (`ctx`) - Agent Handler Context - -**Used by**: Agent handlers (first parameter) -**Access pattern**: `ctx.*` -**Set via**: Constructor + `registerServices()` - -**Properties**: - -- `ctx.logger` - Logger instance (from c.var.logger) -- `ctx.tracer` - OpenTelemetry tracer (from c.var.tracer) -- `ctx.sessionId` - Session ID (from c.var.sessionId) -- `ctx.thread` - Thread instance (from c.var.thread) -- `ctx.session` - Session instance (from c.var.session) -- `ctx.kv` - Key-value storage (property getter → module-level service) -- `ctx.stream` - Stream storage (property getter → module-level service) -- `ctx.vector` - Vector storage (property getter → module-level service) -- `ctx.app` - Application state (from c.var.app) -- `ctx.agent` - Agent registry -- `ctx.config` - Agent-specific config -- `ctx.state` - Agent state map -- `ctx.waitUntil()` - Method to run background tasks - -## Flow Diagram - -```text -┌─────────────────────────────────────────────────────────────┐ -│ 1. Request arrives │ -└─────────────────┬───────────────────────────────────────────┘ - │ -┌─────────────────▼───────────────────────────────────────────┐ -│ 2. _server.ts: First middleware │ -│ c.set('logger', otel.logger) │ -│ c.set('tracer', otel.tracer) │ -│ c.set('meter', otel.meter) │ -│ c.set('app', globalAppState) │ -│ c.set('kv', services.kv) ◄── NEW! │ -│ c.set('stream', services.stream) ◄── NEW! │ -│ c.set('vector', services.vector) ◄── NEW! │ -└─────────────────┬───────────────────────────────────────────┘ - │ -┌─────────────────▼───────────────────────────────────────────┐ -│ 3. _server.ts: otelMiddleware │ -│ c.set('sessionId', sessionId) │ -│ c.set('thread', thread) │ -│ c.set('session', session) │ -│ _c.set('waitUntilHandler', handler) │ -└─────────────────┬───────────────────────────────────────────┘ - │ -┌─────────────────▼───────────────────────────────────────────┐ -│ 4. Route handler OR Agent middleware │ -│ │ -│ Route handler: │ -│ - Uses c.var.logger, c.var.kv, etc. │ -│ - Direct access to HonoContext │ -│ │ -│ OR │ -│ │ -│ createAgentMiddleware: │ -│ - Extracts values from c.var.* │ -│ - Creates RequestAgentContext │ -│ - Stores in AsyncLocalStorage │ -└─────────────────┬───────────────────────────────────────────┘ - │ -┌─────────────────▼───────────────────────────────────────────┐ -│ 5. Agent handler receives ctx │ -│ - ctx.logger (from c.var.logger) │ -│ - ctx.kv (property getter → services.kv) │ -│ - ctx.sessionId (from c.var.sessionId) │ -│ - etc. │ -└─────────────────────────────────────────────────────────────┘ -``` - -## Key Points - -### Services (kv, stream, vector) - -**HonoContext**: - -- Set once per request in `_server.ts` middleware -- Retrieved from module-level variables via `getServices()` -- Available as `c.var.kv`, `c.var.stream`, `c.var.vector` - -**AgentContext**: - -- Set via property getters in `registerServices()` (called in constructor) -- Property getters return module-level variables directly -- Available as `ctx.kv`, `ctx.stream`, `ctx.vector` -- **Same underlying services** as HonoContext - -### No Property Copying - -Prior implementations copied properties from AgentContext back to HonoContext. This is **no longer necessary** because: - -1. All HonoContext variables are set via `c.set()` in `_server.ts` -2. AgentContext gets its values from HonoContext (via constructor args) -3. Services use property getters that reference module-level singletons -4. The two contexts serve different purposes and don't need to mirror each other - -### AsyncLocalStorage - -AgentContext is stored in AsyncLocalStorage so agent handlers can access it: - -- Direct parameter: `handler(ctx, input)` -- Via `getAgentContext()` from anywhere inside agent execution - -HonoContext is also stored in AsyncLocalStorage for HTTP context access: - -- Via `getHTTPContext()` from anywhere inside request handling - -## Testing - -Tests verify both contexts work correctly: - -**AgentContext tests** (`agent.test.ts`): - -```typescript -const agent = createAgent('test', { - handler: async (ctx, input) => { - await ctx.kv.set('store', 'key', 'value'); // ✅ - return 'ok'; - }, -}); -``` - -**HonoContext tests** (`context-variables.test.ts`): - -```typescript -app.post('/test', async (c) => { - await c.var.kv.set('store', 'key', 'value'); // ✅ - return c.json({ ok: true }); -}); -``` - -## Migration Notes - -**Before (incorrect)**: - -- kv, stream, vector were copied from AgentContext to HonoContext in `setupRequestAgentContext` -- This created duplicates and was unnecessary - -**After (correct)**: - -- kv, stream, vector are set on HonoContext in `_server.ts` alongside other variables -- AgentContext gets them via property getters -- No copying between contexts needed diff --git a/packages/runtime/bunfig.toml b/packages/runtime/bunfig.toml deleted file mode 100644 index a6590231f..000000000 --- a/packages/runtime/bunfig.toml +++ /dev/null @@ -1,2 +0,0 @@ -[test] -# Runtime tests use native Request/Response, not happy-dom diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 6a306ceb9..8f2d4e4e6 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,7 @@ { "name": "@agentuity/runtime", - "version": "2.0.9", + "version": "1.0.54", + "deprecated": "Use a dedicated framework (Hono, Next.js, etc.) with @agentuity/hono middleware instead. See https://agentuity.dev/docs/migration", "license": "Apache-2.0", "author": "Agentuity employees and contributors", "type": "module", @@ -13,7 +14,6 @@ } }, "files": [ - "AGENTS.md", "README.md", "src", "dist" @@ -22,44 +22,10 @@ "clean": "rm -rf dist tsconfig.tsbuildinfo", "build": "bunx tsc --build", "typecheck": "bunx tsc --noEmit", - "typecheck:tests": "bunx tsc --noEmit --project tsconfig.test.json", "prepublishOnly": "bun run clean && bun run build" }, - "dependencies": { - "@agentuity/core": "workspace:*", - "@agentuity/frontend": "workspace:*", - "@agentuity/schema": "workspace:*", - "@agentuity/server": "workspace:*", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.207.0", - "@opentelemetry/auto-instrumentations-node": "^0.66.0", - "@opentelemetry/core": "^2.2.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.207.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.207.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.207.0", - "@opentelemetry/host-metrics": "^0.36.2", - "@opentelemetry/otlp-exporter-base": "^0.207.0", - "@opentelemetry/resources": "^2.2.0", - "@opentelemetry/sdk-logs": "^0.207.0", - "@opentelemetry/sdk-metrics": "^2.2.0", - "@opentelemetry/sdk-node": "^0.207.0", - "@opentelemetry/sdk-trace-base": "^2.2.0", - "@opentelemetry/semantic-conventions": "^1.37.0", - "hono": "^4.7.13", - "zod": "^4.3.5" - }, "devDependencies": { - "@agentuity/test-utils": "workspace:*", - "@types/bun": "latest", - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.2", - "@types/ws": "^8.5.13", - "bun-types": "latest", - "expect-type": "^1.2.2", - "react": "^19.2.0", - "react-dom": "^19.2.0", - "typescript": "^5.9.0", - "ws": "^8.18.0" + "typescript": "^5.9.0" }, "publishConfig": { "access": "public" diff --git a/packages/runtime/src/_config.ts b/packages/runtime/src/_config.ts deleted file mode 100644 index 875300edc..000000000 --- a/packages/runtime/src/_config.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { readFileSync, existsSync } from 'node:fs'; -import { join } from 'node:path'; - -let appName: string | undefined; -let appVersion: string | undefined; -let inited = false; - -export function init() { - if (inited) { - return; - } - const f = join(import.meta.dir, isProduction() ? 'package.json' : '/../package.json'); - if (existsSync(f)) { - try { - const pkg = JSON.parse(readFileSync(f, 'utf-8')); - appName = pkg.name; - appVersion = pkg.version; - } catch { - // Fallback to defaults if parsing fails - } - } - inited = true; -} - -/** - * Returns the SDK Version that was used to build this app - * - * @returns string - */ -export function getSDKVersion(): string { - return process.env.AGENTUITY_CLOUD_SDK_VERSION ?? 'unknown'; -} - -/** - * Returns the App Name that was used when this app was built - * - * @returns string - */ -export function getAppName(): string { - init(); - return appName ?? 'unknown'; -} - -/** - * Returns the App Version that was used when this app was built - * - * @returns string - */ -export function getAppVersion(): string { - init(); - return appVersion ?? 'unknown'; -} - -/** - * Returns the Organization ID for this app - * - * @returns string - */ -export function getOrganizationId(): string | undefined { - return process.env.AGENTUITY_CLOUD_ORG_ID; -} - -/** - * Returns the Project ID for this app - * - * @returns string - */ -export function getProjectId(): string | undefined { - return process.env.AGENTUITY_CLOUD_PROJECT_ID; -} - -/** - * Returns the Deployment ID for this app that was deployed - * - * @returns string | undefined - */ -export function getDeploymentId(): string | undefined { - return process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID; -} - -/** - * Returns true if the app is running in dev mode - * - * @returns boolean - */ -export function isDevMode(): boolean { - return process.env.AGENTUITY_SDK_DEV_MODE === 'true'; -} - -/** - * Returns true if the app is running in production mode - * - * @returns boolean - */ -export function isProduction(): boolean { - return getEnvironment() === 'production' && !isDevMode(); -} - -/** - * Returns the CLI version that was used when this app was built - * - * @returns string - */ -export function getCLIVersion(): string { - return process.env.AGENTUITY_CLI_VERSION ?? 'unknown'; -} - -/** - * Returns the environment setting for this app - * - * @returns string - */ -export function getEnvironment(): string { - return process.env.AGENTUITY_ENVIRONMENT || process.env.NODE_ENV || 'development'; -} - -/** - * Returns true if the AGENTUITY_SDK_KEY is set - * - * @returns boolean - */ -export function isAuthenticated(): boolean { - return !!process.env.AGENTUITY_SDK_KEY; -} - -/** - * Symbol for accessing internal runtime state. - * Defined here to avoid circular dependency. - */ -export const AGENT_RUNTIME = Symbol('AGENT_RUNTIME'); - -/** - * Symbol for accessing internal agent from AgentRunner. - * @internal - */ -export const INTERNAL_AGENT = Symbol('INTERNAL_AGENT'); - -/** - * Symbol for tracking the current executing agent (for telemetry). - * Not exposed on public AgentContext interface. - * @internal - */ -export const CURRENT_AGENT = Symbol('CURRENT_AGENT'); - -/** - * Symbol for tracking agent IDs that have executed in this session. - * Used in standalone contexts to track agents for session events. - * @internal - */ -export const AGENT_IDS = Symbol('AGENT_IDS'); - -/** - * Returns true if running inside the Agentuity agent runtime (dev server or cloud). - * - * This is used to determine whether global state (logger, tracer, services) should - * already be initialized. When running standalone (scripts, Discord bots, cron jobs), - * this returns false and the runtime will auto-initialize minimal defaults. - * - * @returns boolean - true if AGENTUITY_SDK_DEV_MODE=true or AGENTUITY_RUNTIME=yes - */ -export function isInsideAgentRuntime(): boolean { - return process.env.AGENTUITY_SDK_DEV_MODE === 'true' || process.env.AGENTUITY_RUNTIME === 'yes'; -} diff --git a/packages/runtime/src/_context.ts b/packages/runtime/src/_context.ts deleted file mode 100644 index 177dd0059..000000000 --- a/packages/runtime/src/_context.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { AsyncLocalStorage } from 'node:async_hooks'; -import type { Context as HonoContext } from 'hono'; -import type { Tracer } from '@opentelemetry/api'; -import { - StructuredError, - type KeyValueStorage, - type StreamStorage, - type VectorStorage, - type SandboxService, - type QueueService, - type EmailService, - type ScheduleService, - type TaskStorage, -} from '@agentuity/core'; -import type { AuthInterface } from '@agentuity/core'; -import type { - AgentContext, - AgentRegistry, - AgentRunner, - AgentRuntimeState, - AgentMetadata, -} from './agent'; -import { AGENT_RUNTIME, CURRENT_AGENT } from './_config'; -import type { Logger } from './logger'; -import type WaitUntilHandler from './_waituntil'; -import { registerServices } from './_services'; -import type { Thread, Session } from './session'; - -export interface RequestAgentContextArgs< - TAgentMap extends AgentRegistry = AgentRegistry, - TConfig = unknown, - TAppState = Record, -> { - sessionId: string; - agent: TAgentMap; - logger: Logger; - tracer: Tracer; - session: Session; - thread: Thread; - handler: WaitUntilHandler; - config: TConfig; - app: TAppState; - runtime: AgentRuntimeState; - auth?: AuthInterface | null; -} - -export class RequestAgentContext< - TAgentMap extends AgentRegistry = AgentRegistry, - TConfig = unknown, - TAppState = Record, -> implements AgentContext -{ - agent: TAgentMap; - logger: Logger; - sessionId: string; - tracer: Tracer; - kv!: KeyValueStorage; - stream!: StreamStorage; - vector!: VectorStorage; - sandbox!: SandboxService; - queue!: QueueService; - email!: EmailService; - schedule!: ScheduleService; - task!: TaskStorage; - state: Map; - session: Session; - thread: Thread; - config: TConfig; - app: TAppState; - current!: AgentMetadata; - [AGENT_RUNTIME]: AgentRuntimeState; - private handler: WaitUntilHandler; - - /** - * Fallback auth value for non-HTTP contexts (standalone, tests, etc.) - * @internal - */ - private _initialAuth: AuthInterface | null; - - /** - * Authentication context - lazily reads from HTTP context if available. - * - * This is a getter that prefers the current HTTP context's `c.var.auth`, - * allowing auth middleware that runs after the agent middleware to still - * propagate auth to agents. - */ - get auth(): AuthInterface | null { - // Prefer HTTP context var.auth if available (allows late-binding from route middleware) - if (inHTTPContext()) { - try { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const httpCtx = httpAsyncLocalStorage.getStore() as any; - if (httpCtx?.var && 'auth' in httpCtx.var) { - return httpCtx.var.auth ?? null; - } - } catch { - // If HTTP context not available, fall through - } - } - // Fallback: whatever was passed in at creation time (for standalone/test contexts) - return this._initialAuth; - } - - /** - * Set auth for non-HTTP contexts (standalone, tests). - * @internal - */ - set auth(value: AuthInterface | null) { - this._initialAuth = value; - } - - constructor(args: RequestAgentContextArgs) { - this.agent = args.agent; - this.logger = args.logger; - this.sessionId = args.sessionId; - this.tracer = args.tracer; - this.thread = args.thread; - this.session = args.session; - this.config = args.config; - this.app = args.app; - this._initialAuth = args.auth ?? null; - this[AGENT_RUNTIME] = args.runtime; - this.state = new Map(); - this.handler = args.handler; - registerServices(this, false); // agents already populated via args.agent - } - - waitUntil(callback: Promise | (() => void | Promise)): void { - this.handler.waitUntil(callback); - } -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const agentAsyncLocalStorage = new AsyncLocalStorage>(); -const httpAsyncLocalStorage = new AsyncLocalStorage(); - -export const inAgentContext = (): boolean => { - const context = agentAsyncLocalStorage.getStore(); - return !!context; -}; - -export const inHTTPContext = (): boolean => { - const context = httpAsyncLocalStorage.getStore(); - return !!context; -}; - -const AgentContextNotAvailableError = StructuredError( - 'AgentContextNotAvailableError', - 'AgentContext is not available' -); - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const getAgentContext = (): AgentContext => { - const context = agentAsyncLocalStorage.getStore(); - if (!context) { - throw new AgentContextNotAvailableError(); - } - return context; -}; - -const HTTPContextNotAvailableError = StructuredError( - 'HTTPContextNotAvailableError', - 'HTTPContext is not available' -); - -export const getHTTPContext = (): HonoContext => { - const context = httpAsyncLocalStorage.getStore(); - if (!context) { - throw new HTTPContextNotAvailableError(); - } - return context; -}; - -export const getAgentAsyncLocalStorage = () => agentAsyncLocalStorage; -export const getHTTPAsyncLocalStorage = () => httpAsyncLocalStorage; - -/** - * Get the current executing agent's metadata (for internal telemetry use only). - * Returns undefined if not in an agent context or no agent is executing. - * @internal - */ -export const getCurrentAgentMetadata = (): AgentRunner['metadata'] | undefined => { - const context = agentAsyncLocalStorage.getStore(); - if (!context) return undefined; - // Access internal symbol property - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return (context as any)[CURRENT_AGENT]?.metadata; -}; - -export const setupRequestAgentContext = < - TAgentMap extends AgentRegistry = AgentRegistry, - TConfig = unknown, - TAppState = Record, ->( - ctxObject: Record, - args: RequestAgentContextArgs, - next: () => Promise -) => { - const ctx = new RequestAgentContext(args); - - // Note: All Hono context variables are set via c.set() in _server.ts middleware. - // RequestAgentContext is only used within agents via AsyncLocalStorage. - // No properties need to be copied between them. - - // Provide c.waitUntil() directly on route context for consistency with AgentContext - if (!('waitUntil' in ctxObject)) { - Object.defineProperty(ctxObject, 'waitUntil', { - value: (callback: Promise | (() => void | Promise)) => { - args.handler.waitUntil(callback); - }, - configurable: true, - }); - } - - // Provide executionCtx.waitUntil for compatibility with Cloudflare Workers API - Object.defineProperty(ctxObject, 'executionCtx', { - get() { - return { - waitUntil: (promise: Promise) => { - args.handler.waitUntil(promise as Promise); - }, - passThroughOnException: () => {}, - props: {}, - }; - }, - configurable: true, - }); - return agentAsyncLocalStorage.run(ctx, async () => { - const result = await next(); - return result; - }); -}; - -export const runInHTTPContext = async ( - ctx: HonoContext, - next: () => Promise -) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return httpAsyncLocalStorage.run(ctx as any, next); -}; diff --git a/packages/runtime/src/_events.ts b/packages/runtime/src/_events.ts deleted file mode 100644 index b42d725fc..000000000 --- a/packages/runtime/src/_events.ts +++ /dev/null @@ -1,142 +0,0 @@ -/** - * Global event bus for Vite-native architecture - * Replaces the App class event system - */ - -import type { Agent, AgentContext } from './agent'; -import type { Session, Thread } from './session'; -import { internal } from './logger/internal'; - -/* eslint-disable @typescript-eslint/no-explicit-any */ -// Note: Generic event system requires 'any' for proper type inference with unknown app states - -export type AppEventMap> = { - 'agent.started': [Agent, AgentContext]; - 'agent.completed': [Agent, AgentContext]; - 'agent.errored': [ - Agent, - AgentContext, - Error, - ]; - 'session.started': [Session]; - 'session.completed': [Session]; - 'thread.created': [Thread]; - 'thread.destroyed': [Thread]; -}; - -type AppEventCallback, TAppState = Record> = ( - eventName: K, - ...args: AppEventMap[K] -) => void | Promise; - -class GlobalEventBus { - private eventListeners = new Map, Set>>(); - - addEventListener>( - eventName: K, - callback: AppEventCallback - ): void { - let callbacks = this.eventListeners.get(eventName); - if (!callbacks) { - callbacks = new Set(); - this.eventListeners.set(eventName, callbacks); - } - callbacks.add(callback); - } - - removeEventListener>( - eventName: K, - callback: AppEventCallback - ): void { - const callbacks = this.eventListeners.get(eventName); - if (!callbacks) return; - callbacks.delete(callback); - } - - async fireEvent>( - eventName: K, - ...args: AppEventMap[K] - ): Promise { - const callbacks = this.eventListeners.get(eventName); - if (!callbacks || callbacks.size === 0) return; - - for (const callback of callbacks) { - try { - await callback(eventName, ...args); - } catch (error) { - // Log but don't re-throw - event listener errors should not crash the server - internal.error(`Error in event listener for '${eventName}':`, error); - } - } - } - - clearAllListeners(): void { - this.eventListeners.clear(); - } -} - -// Global singleton instance -const globalEventBus = new GlobalEventBus(); - -/** - * Register an event listener for application lifecycle events. - * - * Available events: - * - `agent.started` - Fired when an agent begins execution - * - `agent.completed` - Fired when an agent completes successfully - * - `agent.errored` - Fired when an agent throws an error - * - `session.started` - Fired when a new session starts - * - `session.completed` - Fired when a session completes - * - `thread.created` - Fired when a thread is created - * - `thread.destroyed` - Fired when a thread is destroyed - * - * @example - * ```typescript - * import { addEventListener } from '@agentuity/runtime'; - * - * addEventListener('agent.started', (eventName, agent, ctx) => { - * console.log(`${agent.metadata.name} started for session ${ctx.sessionId}`); - * }); - * ``` - */ -export function addEventListener>( - eventName: K, - callback: AppEventCallback -): void { - globalEventBus.addEventListener(eventName, callback); -} - -/** - * Remove a previously registered event listener. - */ -export function removeEventListener>( - eventName: K, - callback: AppEventCallback -): void { - globalEventBus.removeEventListener(eventName, callback); -} - -/** - * Fire a global application event. - * - * @example - * ```typescript - * import { fireEvent } from '@agentuity/runtime'; - * - * await fireEvent('session.started', session); - * await fireEvent('agent.completed', agent, ctx); - * ``` - */ -export async function fireEvent>( - eventName: K, - ...args: AppEventMap[K] -): Promise { - await globalEventBus.fireEvent(eventName, ...args); -} - -/** - * Clear all event listeners (useful for testing) - */ -export function clearAllEventListeners(): void { - globalEventBus.clearAllListeners(); -} diff --git a/packages/runtime/src/_globals.ts b/packages/runtime/src/_globals.ts deleted file mode 100644 index 8fc259bd1..000000000 --- a/packages/runtime/src/_globals.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Type-safe accessors for Symbol.for() global state. - * - * These symbols survive bun --hot reloads because globalThis persists - * across module re-evaluations. Using Symbol.for() ensures the same - * symbol is returned regardless of which module instance creates it. - * - * Each symbol key maps to a specific type — this module centralises - * the definitions so call-sites don't need casts. - */ - -import type { OtelResponse } from './otel/otel'; - -/** Shutdown hook function type (duplicated here to avoid circular dep with app.ts) */ -type ShutdownHook = () => Promise | void; - -// ── Symbol keys ────────────────────────────────────────────── - -const keys = { - originalProcessExit: Symbol.for('@agentuity/runtime:original-process-exit'), - processExitProtected: Symbol.for('@agentuity/runtime:process-exit-protected'), - otelInstance: Symbol.for('@agentuity/runtime:otel-instance'), - originalConsole: Symbol.for('agentuity.originalConsole'), - serverStarted: Symbol.for('@agentuity/runtime:server-started'), - localServicesLogged: Symbol.for('@agentuity/runtime:local-services-logged'), - shutdownHooks: Symbol.for('@agentuity/runtime:shutdown-hooks'), - s3Patched: Symbol.for('agentuity.s3.patched'), -} as const; - -export { keys }; - -// ── Typed getter / setter ──────────────────────────────────── - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const g = globalThis as any; - -export function getGlobal(key: symbol): T | undefined { - return g[key] as T | undefined; -} - -export function setGlobal(key: symbol, value: T): void { - g[key] = value; -} - -// ── Convenience accessors for commonly used globals ────────── - -export const otel = { - get: (): OtelResponse | undefined => getGlobal(keys.otelInstance), - set: (v: OtelResponse) => setGlobal(keys.otelInstance, v), -}; - -export const originalProcessExit = { - get: (): ((code?: number) => never) | undefined => - getGlobal<(code?: number) => never>(keys.originalProcessExit), - set: (v: (code?: number) => never) => setGlobal(keys.originalProcessExit, v), -}; - -export const processExitProtected = { - get: (): boolean => getGlobal(keys.processExitProtected) ?? false, - set: (v: boolean) => setGlobal(keys.processExitProtected, v), -}; - -export const originalConsole = { - get: (): Console | undefined => getGlobal(keys.originalConsole), - set: (v: Console) => setGlobal(keys.originalConsole, v), -}; - -export const serverStarted = { - get: (): boolean => getGlobal(keys.serverStarted) ?? false, - set: (v: boolean) => setGlobal(keys.serverStarted, v), -}; - -export const localServicesLogged = { - get: (): boolean => getGlobal(keys.localServicesLogged) ?? false, - set: (v: boolean) => setGlobal(keys.localServicesLogged, v), -}; - -export const shutdownHooks = { - get: (): ShutdownHook[] => { - let hooks = getGlobal(keys.shutdownHooks); - if (!hooks) { - hooks = []; - setGlobal(keys.shutdownHooks, hooks); - } - return hooks; - }, -}; - -export const s3Patched = { - get: (): boolean => getGlobal(keys.s3Patched) ?? false, - set: (v: boolean) => setGlobal(keys.s3Patched, v), -}; diff --git a/packages/runtime/src/_idle.ts b/packages/runtime/src/_idle.ts deleted file mode 100644 index 1cbf12cf0..000000000 --- a/packages/runtime/src/_idle.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { hasWaitUntilPending } from './_waituntil'; - -/** - * returns true if the server is idle (no pending waitUntil tasks) - * - * @returns true if idle - */ -export function isIdle() { - return !hasWaitUntilPending(); -} diff --git a/packages/runtime/src/_metadata.ts b/packages/runtime/src/_metadata.ts deleted file mode 100644 index a6b9b22db..000000000 --- a/packages/runtime/src/_metadata.ts +++ /dev/null @@ -1,407 +0,0 @@ -/** - * Build metadata utilities - * Provides cached access to agentuity.metadata.json - */ - -import { join } from 'node:path'; -import { existsSync, readFileSync } from 'node:fs'; -import { internal } from './logger/internal'; - -export interface BuildMetadataAgent { - filename: string; - id: string; - agentId: string; - version: string; - name: string; - description?: string; - projectId?: string; - schema?: { - input?: string; - output?: string; - }; - evals?: Array<{ - filename: string; - id: string; - identifier: string; - name: string; - version: string; - description?: string; - agentIdentifier?: string; - projectId?: string; - }>; -} - -export interface BuildMetadataRoute { - id: string; - filename: string; - path: string; - method: 'get' | 'post' | 'put' | 'delete' | 'patch'; - version: string; - type?: string; - agentIds?: string[]; - config?: Record; - schema?: { - input?: string; - output?: string; - }; -} - -export interface BuildMetadata { - routes: BuildMetadataRoute[]; - agents: BuildMetadataAgent[]; - assets?: string[]; - project: { - id: string; - name: string; - version?: string; - description?: string; - keywords?: string[]; - orgId?: string; - }; - deployment: { - id: string; - date: string; - build: { - bun: string; - agentuity: string; - arch: string; - platform: string; - }; - git?: { - branch?: string; - repo?: string; - provider?: string; - tags?: string[]; - commit?: string; - message?: string; - }; - }; -} - -// Cached metadata - null means not yet loaded, undefined means file not found -let _metadataCache: BuildMetadata | null | undefined = null; - -/** - * Get the path to agentuity.metadata.json - * - * Checks multiple locations to support both dev and production: - * - Production: cwd is .agentuity/, file is at cwd/agentuity.metadata.json - * - Dev: cwd is project root, file is at cwd/.agentuity/agentuity.metadata.json - */ -export function getMetadataPath(): string { - if (process.env.AGENTUITY_PROJECT_DIR) { - // Dev path: running from project root with env flag to a different path using --dir - const devPath = join( - process.env.AGENTUITY_PROJECT_DIR, - '.agentuity', - 'agentuity.metadata.json' - ); - if (existsSync(devPath)) { - return devPath; - } - } - // Production path: running from .agentuity/ directory - const productionPath = join(process.cwd(), 'agentuity.metadata.json'); - if (existsSync(productionPath)) { - return productionPath; - } - - // Dev path: running from project root - const devPath = join(process.cwd(), '.agentuity', 'agentuity.metadata.json'); - if (existsSync(devPath)) { - return devPath; - } - - // Default to production path (will fail gracefully in loadBuildMetadata) - return productionPath; -} - -/** - * Load and cache the build metadata from agentuity.metadata.json - * Returns undefined if the file doesn't exist or can't be parsed - */ -export function loadBuildMetadata(): BuildMetadata | undefined { - // Return cached value if already loaded - if (_metadataCache !== null) { - internal.info( - '[metadata] loadBuildMetadata: returning cached value (exists: %s)', - _metadataCache !== undefined - ); - return _metadataCache; - } - - const metadataPath = getMetadataPath(); - internal.info('[metadata] loadBuildMetadata: checking path %s', metadataPath); - internal.info('[metadata] loadBuildMetadata: cwd=%s', process.cwd()); - - if (!existsSync(metadataPath)) { - internal.info('[metadata] agentuity.metadata.json not found at %s', metadataPath); - // In dev mode, don't cache "not found" — the dev server generates - // the metadata file after createApp() has already been called. - // Caching undefined would permanently prevent the workbench from - // finding agents once the file is later written. - if (process.env.NODE_ENV === 'development') { - return undefined; - } - _metadataCache = undefined; - return undefined; - } - - try { - internal.info('[metadata] loadBuildMetadata: file exists, reading...'); - const content = readFileSync(metadataPath, 'utf-8'); - const metadata = JSON.parse(content) as BuildMetadata; - _metadataCache = metadata; - - // Log agent and eval counts - let totalEvals = 0; - for (const agent of metadata.agents ?? []) { - totalEvals += agent.evals?.length ?? 0; - } - - internal.info( - '[metadata] loaded agentuity.metadata.json: %d agents, %d routes, %d total evals', - metadata.agents?.length ?? 0, - metadata.routes?.length ?? 0, - totalEvals - ); - - // Log agent names and their eval counts - for (const agent of metadata.agents ?? []) { - internal.info('[metadata] agent: %s (evals: %d)', agent.name, agent.evals?.length ?? 0); - } - - return metadata; - } catch (err) { - internal.info('[metadata] failed to load agentuity.metadata.json: %s', err); - _metadataCache = undefined; - return undefined; - } -} - -// Eval metadata type (extracted from agent's evals array) -export type BuildMetadataEval = NonNullable[number]; - -// Agent lookup cache - built lazily from metadata -let _agentsByName: Map | null = null; -let _agentsByAgentId: Map | null = null; - -// Eval lookup cache - nested map: agentName -> evalName -> evalMetadata -let _evalsByAgentName: Map> | null = null; -let _evalsByAgentId: Map> | null = null; - -// Track if we've already attempted a reload for empty eval map -let _evalReloadAttempted = false; - -// Track if we've already attempted a reload for empty agent map -let _agentReloadAttempted = false; - -/** - * Build agent lookup maps from metadata - */ -function ensureAgentMaps(): void { - if (_agentsByName !== null) { - internal.info(`[metadata] ensureAgentMaps: already initialized, skipping`); - return; - } - - internal.info(`[metadata] ensureAgentMaps: initializing agent and eval maps`); - - _agentsByName = new Map(); - _agentsByAgentId = new Map(); - _evalsByAgentName = new Map(); - _evalsByAgentId = new Map(); - - const metadata = loadBuildMetadata(); - if (!metadata?.agents) { - internal.info(`[metadata] ensureAgentMaps: no metadata or no agents found`); - // In dev mode, don't cache empty maps — metadata file may appear later - if (process.env.NODE_ENV === 'development') { - _agentsByName = null; - _agentsByAgentId = null; - _evalsByAgentName = null; - _evalsByAgentId = null; - } - return; - } - - internal.info(`[metadata] ensureAgentMaps: processing ${metadata.agents.length} agents`); - - for (const agent of metadata.agents) { - if (agent.name) { - _agentsByName.set(agent.name, agent); - } - if (agent.agentId) { - _agentsByAgentId.set(agent.agentId, agent); - } - - // Build eval lookup maps - if (agent.evals && agent.evals.length > 0) { - const evalsByName = new Map(); - for (const evalMeta of agent.evals) { - if (evalMeta.name) { - evalsByName.set(evalMeta.name, evalMeta); - internal.info( - `[metadata] Indexed eval: agent='${agent.name}' eval='${evalMeta.name}' identifier='${evalMeta.identifier}'` - ); - } - } - if (agent.name) { - _evalsByAgentName.set(agent.name, evalsByName); - } - if (agent.agentId) { - _evalsByAgentId.set(agent.agentId, evalsByName); - } - } else { - internal.info(`[metadata] Agent '${agent.name}' has no evals`); - } - } - internal.info(`[metadata] Eval maps built: ${_evalsByAgentName?.size ?? 0} agents with evals`); -} - -/** - * Look up agent metadata by name - */ -export function getAgentMetadataByName(agentName: string): BuildMetadataAgent | undefined { - ensureAgentMaps(); - - // If agent map is empty, the cache may have been built before metadata was ready - // Try clearing and reloading once (only attempt once to avoid repeated reloads) - // This mirrors the reload logic in getEvalMetadata - if (_agentsByName?.size === 0 && !_agentReloadAttempted) { - _agentReloadAttempted = true; - internal.info( - `[metadata] getAgentMetadataByName: agent map is empty, attempting cache clear and reload` - ); - clearMetadataCache(); - ensureAgentMaps(); - internal.info( - `[metadata] getAgentMetadataByName: after reload, agent map size: ${_agentsByName?.size ?? 0}` - ); - } - - return _agentsByName?.get(agentName); -} - -/** - * Look up agent metadata by agentId - */ -export function getAgentMetadataByAgentId(agentId: string): BuildMetadataAgent | undefined { - ensureAgentMaps(); - return _agentsByAgentId?.get(agentId); -} - -/** - * Look up eval metadata by agent name and eval name - */ -export function getEvalMetadata( - agentName: string, - evalName: string -): BuildMetadataEval | undefined { - ensureAgentMaps(); - - // If eval map is empty, the cache may have been built before metadata was ready - // Try clearing and reloading once (only attempt once to avoid repeated reloads) - if (_evalsByAgentName?.size === 0 && !_evalReloadAttempted) { - _evalReloadAttempted = true; - internal.info( - `[metadata] getEvalMetadata: eval map is empty, attempting cache clear and reload` - ); - clearMetadataCache(); - ensureAgentMaps(); - internal.info( - `[metadata] getEvalMetadata: after reload, eval map size: ${_evalsByAgentName?.size ?? 0}` - ); - } - - const agentEvals = _evalsByAgentName?.get(agentName); - internal.info( - `[metadata] getEvalMetadata('${agentName}', '${evalName}'): agentEvals=${agentEvals ? `Map(${agentEvals.size})` : 'undefined'}` - ); - if (agentEvals) { - internal.info( - `[metadata] Available evals for agent '${agentName}': [${[...agentEvals.keys()].join(', ')}]` - ); - } - if (!agentEvals) { - internal.info( - `[metadata] Available agents in eval map: [${[...(_evalsByAgentName?.keys() ?? [])].join(', ')}]` - ); - } - const result = agentEvals?.get(evalName); - internal.info( - `[metadata] getEvalMetadata result: ${result ? `found identifier=${result.identifier}` : 'not found'}` - ); - return result; -} - -/** - * Look up eval metadata by agentId and eval name - */ -export function getEvalMetadataByAgentId( - agentId: string, - evalName: string -): BuildMetadataEval | undefined { - ensureAgentMaps(); - return _evalsByAgentId?.get(agentId)?.get(evalName); -} - -/** - * Check if metadata file exists (uses cache) - */ -export function hasMetadata(): boolean { - return loadBuildMetadata() !== undefined; -} - -// Track if agents have been imported -let _agentsImported = false; - -/** - * Import all agents from metadata filenames to ensure they're registered. - * This is needed so that runtime schemas are available for JSON schema generation. - * Safe to call multiple times - will only import once. - */ -export async function ensureAgentsImported(): Promise { - if (_agentsImported) { - return; - } - - const metadata = loadBuildMetadata(); - if (!metadata?.agents?.length) { - _agentsImported = true; - return; - } - - internal.info('[metadata] ensureAgentsImported: importing %d agents', metadata.agents.length); - - for (const agent of metadata.agents) { - if (!agent.filename) { - continue; - } - - try { - // Convert relative filename to absolute path from cwd - const absolutePath = join(process.cwd(), agent.filename); - internal.info('[metadata] importing agent: %s from %s', agent.name, absolutePath); - await import(absolutePath); - } catch (err) { - internal.info('[metadata] failed to import agent %s: %s', agent.name, err); - } - } - - _agentsImported = true; -} - -/** - * Clear the metadata cache (useful for testing or hot reload) - */ -export function clearMetadataCache(): void { - internal.info('[metadata] clearMetadataCache: clearing all caches'); - _metadataCache = null; - _agentsByName = null; - _agentsByAgentId = null; - _evalsByAgentName = null; - _evalsByAgentId = null; - // Note: _evalReloadAttempted is intentionally NOT reset here - // to prevent infinite reload loops in getEvalMetadata -} diff --git a/packages/runtime/src/_process-protection.ts b/packages/runtime/src/_process-protection.ts deleted file mode 100644 index f50a4335f..000000000 --- a/packages/runtime/src/_process-protection.ts +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Process protection utilities - * - * Prevents user code from calling process.exit() which would crash the server. - * The runtime can still exit gracefully using the internal exit function. - * - * Uses _globals.ts Symbol.for() accessors to store state across hot reloads. - */ - -import { StructuredError } from '@agentuity/core'; -import { - originalProcessExit as exitGlobal, - processExitProtected as protectedGlobal, -} from './_globals'; - -// Capture the original process.exit ONLY if not already stored. -// Critical for hot reload: we must capture the truly original, not a wrapped version. -const existingExit = exitGlobal.get(); -const originalExit: (code?: number) => never = existingExit ?? process.exit.bind(process); -if (!existingExit) { - exitGlobal.set(originalExit); -} - -const ProcessExitAttemptError = StructuredError( - 'ProcessExitAttemptError', - 'Calling process.exit() is not allowed in agent code. The server must remain running to handle requests.' -)<{ - code?: number | string | null | undefined; -}>(); - -/** - * Enable protection against process.exit calls. - * After calling this, user code calling process.exit() will throw an error. - */ -export function enableProcessExitProtection(): void { - if (protectedGlobal.get()) { - return; - } - protectedGlobal.set(true); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (process as any).exit = (code?: number | string | null | undefined): never => { - throw new ProcessExitAttemptError({ code }); - }; -} - -/** - * Disable protection (mainly for testing) - */ -export function disableProcessExitProtection(): void { - if (!protectedGlobal.get()) { - return; - } - protectedGlobal.set(false); - process.exit = originalExit; -} - -/** - * Internal function for the runtime to call when it needs to exit. - * This bypasses the protection and calls the original process.exit. - */ -export function internalExit(code?: number): never { - return originalExit(code); -} - -/** - * Check if protection is currently enabled - */ -export function isProtectionEnabled(): boolean { - return protectedGlobal.get(); -} diff --git a/packages/runtime/src/_server.ts b/packages/runtime/src/_server.ts deleted file mode 100644 index d59fdf4b7..000000000 --- a/packages/runtime/src/_server.ts +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Minimal server globals for Vite-native architecture - * The server is managed by Vite (dev) or Bun.serve in the generated entry file (prod) - * - * These module-level variables persist across bun --hot reloads (since this - * module is not re-evaluated unless it changes). createApp() updates them - * via setters on each reload. - */ - -import type { Logger } from './logger'; -import type { Hono, Context as HonoContext } from 'hono'; -import type { Env, PrivateVariables } from './app'; -import type { Tracer } from '@opentelemetry/api'; -import type { SpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { TokenSpanProcessor } from './_tokens'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -let globalRouterInstance: Hono> | null = null; -let globalLogger: Logger | null = null; -let globalTracer: Tracer | null = null; - -// Initialize with built-in span processors -const spanProcessors: SpanProcessor[] = [new TokenSpanProcessor()]; - -/** - * List of AgentContext properties that should trigger helpful error messages - * when accessed directly on HonoContext in route handlers. - */ -export const AGENT_CONTEXT_PROPERTIES = [ - 'logger', - 'tracer', - 'sessionId', - 'kv', - 'stream', - 'vector', - 'sandbox', - 'queue', - 'state', - 'thread', - 'session', - 'config', - 'app', -] as const; - -export function getRouter() { - return globalRouterInstance; -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function setGlobalRouter(router: Hono>) { - globalRouterInstance = router; -} - -/** - * Returns the global logger instance. - * This is a singleton created during application initialization. - */ -export function createLogger() { - return globalLogger; -} - -export function getLogger() { - return globalLogger; -} - -export function setGlobalLogger(logger: Logger) { - globalLogger = logger; -} - -export function getTracer() { - return globalTracer; -} - -export function setGlobalTracer(tracer: Tracer) { - globalTracer = tracer; -} - -/** - * Add a custom span processor that will be added to the otel configuration. - * This method must be called before the server is initialized. - */ -export function addSpanProcessor(processor: SpanProcessor) { - spanProcessors.push(processor); -} - -export function getSpanProcessors(): SpanProcessor[] { - return spanProcessors; -} - -/** - * Helper to cast HonoContext to include private variables - */ -export function privateContext(c: HonoContext) { - return c as unknown as HonoContext<{ Variables: PrivateVariables }>; -} - -/** - * No-op for Vite-native architecture (Vite manages server lifecycle) - */ -export const notifyReady = () => { - // No-op: Vite handles server readiness -}; - -/** - * No-op for Vite-native architecture (returns null) - */ -export function getServer() { - return null; -} diff --git a/packages/runtime/src/_services.ts b/packages/runtime/src/_services.ts deleted file mode 100644 index ea142cb02..000000000 --- a/packages/runtime/src/_services.ts +++ /dev/null @@ -1,379 +0,0 @@ -import { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api'; -import { - KeyValueStorageService, - StreamStorageService, - VectorStorageService, - QueueStorageService, - EmailStorageService, - ScheduleService, - TaskStorageService, - type FetchAdapter, - type KeyValueStorage, - type StreamStorage, - type VectorStorage, - type SandboxService, - type QueueService, - type EmailService, - type TaskStorage, - type ListStreamsResponse, - type VectorUpsertResult, - type VectorSearchResult, - type Logger, - type SessionEventProvider, - type EvalRunEventProvider, - StructuredError, -} from '@agentuity/core'; -import { APIClient, createServerFetchAdapter, getServiceUrls } from '@agentuity/server'; -import { HTTPSandboxService } from './services/sandbox'; -import { - CompositeSessionEventProvider, - LocalSessionEventProvider, - JSONSessionEventProvider, - HTTPSessionEventProvider, -} from './services/session'; -import { - CompositeEvalRunEventProvider, - LocalEvalRunEventProvider, - JSONEvalRunEventProvider, - HTTPEvalRunEventProvider, -} from './services/evalrun'; -import { LocalThreadProvider } from './services/thread/local'; -import { injectTraceContextToHeaders } from './otel/http'; -import { getTracer } from './_server'; -import { populateAgentsRegistry } from './agent.js'; -import { getSDKVersion, isAuthenticated, isProduction } from './_config'; -import type { AppConfig } from './app'; -import { localServicesLogged } from './_globals'; -import { - DefaultSessionProvider, - DefaultThreadProvider, - type ThreadProvider, - type SessionProvider, -} from './session'; -import { - LocalKeyValueStorage, - LocalStreamStorage, - LocalVectorStorage, - LocalQueueStorage, - LocalEmailStorage, - LocalTaskStorage, - getLocalDB, - normalizeProjectPath, - createLocalStorageRouter, -} from './services/local'; - -const userAgent = `Agentuity SDK/${getSDKVersion()}`; - -// Lazy getters - these must be functions to read env vars AFTER bootstrapRuntimeEnv() runs -const getSdkKey = () => process.env.AGENTUITY_SDK_KEY; -const getBearerKey = () => `Bearer ${getSdkKey()}`; -const getRegion = () => process.env.AGENTUITY_REGION ?? 'usc'; -const getLazyServiceUrls = () => getServiceUrls(getRegion()); -const getKvBaseUrl = () => getLazyServiceUrls().keyvalue; -const getStreamBaseUrl = () => getLazyServiceUrls().stream; -const getVectorBaseUrl = () => getLazyServiceUrls().vector; -const getCatalystBaseUrl = () => getLazyServiceUrls().catalyst; -const getQueueBaseUrl = () => getCatalystBaseUrl(); -const getEmailBaseUrl = () => getLazyServiceUrls().email; -const getTaskBaseUrl = () => getCatalystBaseUrl(); - -let adapter: FetchAdapter; - -const createFetchAdapter = (logger: Logger) => - createServerFetchAdapter( - { - headers: { - Authorization: getBearerKey(), - 'User-Agent': userAgent, - }, - onBefore: async (url, options, callback) => { - logger.debug('before request: %s with options: %s', url, options); - if (!options.telemetry) { - return callback(); - } - options.headers = { ...options.headers, ...injectTraceContextToHeaders() }; - const tracer = getTracer() ?? trace.getTracer('agentuity'); - const currentContext = context.active(); - const span = tracer.startSpan( - options.telemetry.name, - { attributes: options.telemetry.attributes, kind: SpanKind.CLIENT }, - currentContext - ); - const spanContext = trace.setSpan(currentContext, span); - try { - await context.with(spanContext, callback); - span.setStatus({ code: SpanStatusCode.OK }); - } catch (err) { - const e = err as Error; - span.recordException(e); - span.setStatus({ code: SpanStatusCode.ERROR, message: e?.message ?? String(err) }); - throw err; - } finally { - span.end(); - } - }, - onAfter: async (url, options, result, err) => { - logger.debug('after request: %s (%d) => %s', url, result.response.status, err); - if (err) { - return; - } - const span = trace.getSpan(context.active()); - switch (options.telemetry?.name) { - case 'agentuity.keyvalue.get': { - if (result.response.status === 404) { - span?.addEvent('miss'); - } else if (result.response.ok) { - span?.addEvent('hit'); - } - break; - } - case 'agentuity.stream.create': { - if (result.response.ok) { - const res = result.data as { id: string }; - span?.setAttributes({ - 'stream.id': res.id, - 'stream.url': `${getStreamBaseUrl()}/${res.id}`, - }); - } - break; - } - case 'agentuity.stream.list': { - const response = result.data as ListStreamsResponse; - if (response && span) { - span.setAttributes({ - 'stream.count': response.streams.length, - 'stream.total': response.total, - }); - } - break; - } - case 'agentuity.vector.upsert': { - if (result.response.ok) { - const data = result.data as VectorUpsertResult[]; - span?.setAttributes({ - 'vector.count': data.length, - }); - } - break; - } - case 'agentuity.vector.search': { - if (result.response.ok) { - const data = result.data as VectorSearchResult[]; - span?.setAttributes({ - 'vector.results': data.length, - }); - } - break; - } - case 'agentuity.vector.get': { - if (result.response.status === 404) { - span?.addEvent('miss'); - } else if (result.response.ok) { - span?.addEvent('hit'); - } - break; - } - } - }, - }, - logger - ); - -let kv: KeyValueStorage; -let stream: StreamStorage; -let vector: VectorStorage; -let sandbox: SandboxService; -let queue: QueueService; -let email: EmailService; -let schedule: ScheduleService; -let task: TaskStorage; -let session: SessionProvider; -let thread: ThreadProvider; -let sessionEvent: SessionEventProvider; -let evalRunEvent: EvalRunEventProvider; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -let localRouter: any | null = null; - -const ServerUrlMissingError = StructuredError( - 'ServerUrlMissingError', - 'serverUrl is required when using local services' -); - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function createServices(logger: Logger, config?: AppConfig, serverUrl?: string) { - const authenticated = isAuthenticated(); - const useLocal = config?.services?.useLocal ?? false; - adapter = createFetchAdapter(logger); - - // Use local services if explicitly requested OR if not authenticated - const shouldUseLocal = - useLocal || !authenticated || process.env.AGENTUITY_FORCE_LOCAL_SERVICES === 'true'; - - if (shouldUseLocal) { - const db = getLocalDB(); - const projectPath = normalizeProjectPath(); - - if (!serverUrl) { - throw new ServerUrlMissingError(); - } - - if (!localServicesLogged.get()) { - localServicesLogged.set(true); - logger.info('Using local services (development only)'); - } - - kv = config?.services?.keyvalue || new LocalKeyValueStorage(db, projectPath); - stream = config?.services?.stream || new LocalStreamStorage(db, projectPath, serverUrl); - vector = config?.services?.vector || new LocalVectorStorage(db, projectPath); - queue = new LocalQueueStorage(db, projectPath); - email = config?.services?.email || new LocalEmailStorage(); - task = config?.services?.task || new LocalTaskStorage(db, projectPath); - session = config?.services?.session || new DefaultSessionProvider(); - thread = config?.services?.thread || new LocalThreadProvider(); - sessionEvent = config?.services?.sessionEvent - ? new CompositeSessionEventProvider( - new LocalSessionEventProvider(), - config.services.sessionEvent - ) - : new LocalSessionEventProvider(); - evalRunEvent = config?.services?.evalRunEvent - ? new CompositeEvalRunEventProvider( - new LocalEvalRunEventProvider(), - config.services.evalRunEvent - ) - : new LocalEvalRunEventProvider(); - - localRouter = createLocalStorageRouter(db, projectPath); - - return { localRouter }; - } - - // Reset local router if not using local services - localRouter = null; - - // At this point we must be authenticated (since !authenticated would trigger local services above) - const catalystUrl = getCatalystBaseUrl(); - const streamBaseUrl = getStreamBaseUrl(); - kv = config?.services?.keyvalue || new KeyValueStorageService(getKvBaseUrl(), adapter); - stream = config?.services?.stream || new StreamStorageService(streamBaseUrl, adapter); - vector = config?.services?.vector || new VectorStorageService(getVectorBaseUrl(), adapter); - queue = new QueueStorageService(getQueueBaseUrl(), adapter); - email = config?.services?.email || new EmailStorageService(getEmailBaseUrl(), adapter); - task = config?.services?.task || new TaskStorageService(getTaskBaseUrl(), adapter); - sandbox = new HTTPSandboxService(new APIClient(catalystUrl, logger), streamBaseUrl); - schedule = new ScheduleService(getCatalystBaseUrl(), adapter); - session = config?.services?.session || new DefaultSessionProvider(); - thread = config?.services?.thread || new DefaultThreadProvider(); - // FIXME: this is turned off for now for production until we have the new changes deployed - sessionEvent = - isProduction() && process.env.AGENTUITY_CLOUD_EXPORT_DIR - ? new JSONSessionEventProvider(process.env.AGENTUITY_CLOUD_EXPORT_DIR) - : new HTTPSessionEventProvider(new APIClient(catalystUrl, logger), logger); - if (config?.services?.sessionEvent) { - sessionEvent = new CompositeSessionEventProvider(sessionEvent, config.services.sessionEvent); - } - // FIXME: this is turned off for now for production until we have the new changes deployed - logger.debug( - '[SERVICES] Initializing eval run provider - region: %s, catalystBaseUrl: %s, isProduction: %s', - getRegion(), - catalystUrl, - isProduction() - ); - evalRunEvent = - isProduction() && process.env.AGENTUITY_CLOUD_EXPORT_DIR - ? new JSONEvalRunEventProvider(process.env.AGENTUITY_CLOUD_EXPORT_DIR) - : new HTTPEvalRunEventProvider(new APIClient(catalystUrl, logger), logger, catalystUrl); - if (config?.services?.evalRunEvent) { - evalRunEvent = new CompositeEvalRunEventProvider(evalRunEvent, config.services.evalRunEvent); - } - - return {}; -} - -export function getThreadProvider(): ThreadProvider { - return thread; -} - -export function getSessionProvider(): SessionProvider { - return session; -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function getLocalRouter(): any | null { - return localRouter; -} - -export function getSessionEventProvider() { - return sessionEvent; -} - -export function getEvalRunEventProvider() { - return evalRunEvent; -} - -export function getServices() { - return { kv, stream, vector, sandbox, queue, email, schedule, task }; -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function registerServices(o: any, includeAgents = false) { - Object.defineProperty(o, 'kv', { - get: () => kv, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'stream', { - get: () => stream, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'vector', { - get: () => vector, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'sandbox', { - get: () => sandbox, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'queue', { - get: () => queue, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'email', { - get: () => email, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'schedule', { - get: () => schedule, - enumerable: false, - configurable: false, - }); - Object.defineProperty(o, 'task', { - get: () => task, - enumerable: false, - configurable: false, - }); - - // Also register agent registry if requested - if (includeAgents) { - // Cache the populated registry to avoid re-creating on every access - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let cachedRegistry: any; - Object.defineProperty(o, 'agent', { - get: () => { - if (!cachedRegistry) { - // ESM-friendly: populateAgentsRegistry is imported statically - cachedRegistry = populateAgentsRegistry(o); - } - return cachedRegistry; - }, - enumerable: false, - configurable: false, - }); - } -} diff --git a/packages/runtime/src/_standalone.ts b/packages/runtime/src/_standalone.ts deleted file mode 100644 index 23cbd8443..000000000 --- a/packages/runtime/src/_standalone.ts +++ /dev/null @@ -1,710 +0,0 @@ -import { context, SpanKind, SpanStatusCode, type Context, trace } from '@opentelemetry/api'; -import { enrichContextWithTraceState } from './otel/tracestate'; -import type { - KeyValueStorage, - StreamStorage, - VectorStorage, - SandboxService, - QueueService, - EmailService, - ScheduleService, - TaskStorage, - Logger, -} from '@agentuity/core'; -import { formatMessage } from './logger/util'; -import type { - AgentContext, - AgentRegistry, - AgentRuntimeState, - AgentMetadata, - AgentRunner, -} from './agent'; -import { AGENT_RUNTIME, AGENT_IDS, isInsideAgentRuntime } from './_config'; -import type { Thread, Session } from './session'; -import { generateId } from './session'; -import WaitUntilHandler from './_waituntil'; -import { registerServices, createServices } from './_services'; -import { getAgentAsyncLocalStorage } from './_context'; -import { getLogger, getTracer, setGlobalLogger, setGlobalTracer } from './_server'; - -import { getThreadProvider, getSessionProvider, getSessionEventProvider } from './_services'; -import * as runtimeConfig from './_config'; - -/** - * Flag to track if standalone initialization has already been performed. - * Prevents duplicate initialization across multiple createAgentContext() calls. - */ -let standaloneInitialized = false; - -/** - * Create a minimal console-based logger for standalone mode. - * This logger outputs to console without OpenTelemetry integration. - */ -function createStandaloneLogger(): Logger { - const logLevel = (process.env.AGENTUITY_LOG_LEVEL || 'info') as - | 'trace' - | 'debug' - | 'info' - | 'warn' - | 'error'; - const levels = ['trace', 'debug', 'info', 'warn', 'error']; - const currentLevelIndex = levels.indexOf(logLevel); - - const shouldLog = (level: string) => levels.indexOf(level) >= currentLevelIndex; - - const logger: Logger = { - trace: (message: unknown, ...args: unknown[]) => { - if (shouldLog('trace')) - console.debug('[TRACE]', formatMessage(false, undefined, message, args)); - }, - debug: (message: unknown, ...args: unknown[]) => { - if (shouldLog('debug')) - console.debug('[DEBUG]', formatMessage(false, undefined, message, args)); - }, - info: (message: unknown, ...args: unknown[]) => { - if (shouldLog('info')) - console.info('[INFO]', formatMessage(false, undefined, message, args)); - }, - warn: (message: unknown, ...args: unknown[]) => { - if (shouldLog('warn')) - console.warn('[WARN]', formatMessage(false, undefined, message, args)); - }, - error: (message: unknown, ...args: unknown[]) => { - if (shouldLog('error')) - console.error('[ERROR]', formatMessage(false, undefined, message, args)); - }, - fatal: (message: unknown, ...args: unknown[]): never => { - console.error('[FATAL]', formatMessage(false, undefined, message, args)); - process.exit(1); - }, - child: () => logger, - }; - - return logger; -} - -/** - * Initialize standalone runtime globals. - * This sets up minimal logger, tracer, and services for standalone execution. - * Called automatically by createAgentContext() when not running inside agent runtime. - */ -function initializeStandaloneRuntime(): void { - if (standaloneInitialized) { - return; - } - - const logger = createStandaloneLogger(); - const tracer = trace.getTracer('standalone-agent'); - - // Set global state - setGlobalLogger(logger); - setGlobalTracer(tracer); - - // App state is already initialized as {} in _server.ts module-level var - - // Initialize services (will use local services since not authenticated) - const serverUrl = `http://127.0.0.1:${process.env.PORT || '3500'}`; - createServices(logger, undefined, serverUrl); - - standaloneInitialized = true; - logger.debug('Standalone runtime initialized'); -} - -/** - * Options for creating a standalone agent context. - * - * Use this when executing agents outside of HTTP requests (Discord bots, cron jobs, etc.) - */ -export interface StandaloneContextOptions { - /** - * Session ID for this execution. If not provided, will be auto-generated from trace context. - */ - sessionId?: string; - /** - * Thread for multi-turn conversations. If not provided, will be restored/created from thread provider. - */ - thread?: Thread; - /** - * Session for this execution. If not provided, will be created. - */ - session?: Session; - /** - * Parent OpenTelemetry context for distributed tracing. - */ - parentContext?: Context; - /** - * Trigger type for this execution (used in telemetry and session events). - */ - trigger?: import('@agentuity/core').SessionStartEvent['trigger']; -} - -/** - * Options for invoke() method. - */ -export interface InvokeOptions { - /** - * Span name for OpenTelemetry trace (default: 'agent-invocation') - */ - spanName?: string; -} - -/** - * Standalone agent context for executing agents outside of HTTP requests. - * - * This context provides the same infrastructure as HTTP request contexts: - * - OpenTelemetry tracing with proper span hierarchy - * - Session and thread management (save/restore) - * - Background task handling (waitUntil) - * - Session event tracking (start/complete) - * - Access to all services (kv, stream, vector) - * - * @example - * ```typescript - * import { createAgentContext } from '@agentuity/runtime'; - * import myAgent from './agents/my-agent'; - * - * // Simple usage: - * const ctx = createAgentContext(); - * const result = await ctx.invoke(() => myAgent.run(input)); - * - * // With custom session tracking: - * const ctx = createAgentContext({ - * sessionId: discordMessage.id, - * trigger: 'discord' - * }); - * const result = await ctx.invoke(() => myAgent.run(input)); - * - * // Reuse context for multiple agents: - * const ctx = createAgentContext(); - * const result1 = await ctx.invoke(() => agent1.run(input1)); - * const result2 = await ctx.invoke(() => agent2.run(result1)); - * ``` - */ -export class StandaloneAgentContext< - TAgentMap extends AgentRegistry = AgentRegistry, - TConfig = unknown, - TAppState = Record, -> implements AgentContext -{ - // Immutable context properties (safe for concurrent access) - agent: TAgentMap = {} as TAgentMap; - logger: Logger; - tracer: import('@opentelemetry/api').Tracer; - kv!: KeyValueStorage; - stream!: StreamStorage; - vector!: VectorStorage; - sandbox!: SandboxService; - queue!: QueueService; - email!: EmailService; - schedule!: ScheduleService; - task!: TaskStorage; - config: TConfig; - app: TAppState; - current!: AgentMetadata; - [AGENT_RUNTIME]: AgentRuntimeState; - - // Note: The following are mutable and will be set per-invocation via AsyncLocalStorage - // They exist on the interface for compatibility but are overwritten during invoke() - sessionId: string; - state: Map; - session: Session; - thread: Thread; - auth: import('@agentuity/core').AuthInterface | null; - [AGENT_IDS]?: Set; - - // Immutable options stored from constructor - private readonly parentContext: Context; - private readonly trigger: import('@agentuity/core').SessionStartEvent['trigger']; - private readonly initialSessionId?: string; - - constructor(options?: StandaloneContextOptions) { - // Auto-initialize if not inside agent runtime and globals are not set - let logger = getLogger(); - let tracer = getTracer(); - let app = {} as Record; - - if (!logger || !tracer) { - // Check if we're inside the agent runtime (dev server or cloud) - if (isInsideAgentRuntime()) { - // Inside runtime but globals not set - this is an error - throw new Error( - 'Global state not initialized. This should not happen inside the agent runtime. ' + - 'Please report this issue.' - ); - } - - // Not inside runtime - auto-initialize for standalone use - initializeStandaloneRuntime(); - - // Re-fetch globals after initialization - logger = getLogger()!; - tracer = getTracer()!; - app = {}; - } - - this.logger = logger; - this.tracer = tracer; - this.app = app as TAppState; - this.config = {} as TConfig; - this.state = new Map(); - this.parentContext = options?.parentContext ?? context.active(); - this.trigger = (options?.trigger as typeof this.trigger) ?? 'manual'; - this.initialSessionId = options?.sessionId; - - // Session ID will be set properly in invoke() after span is created - this.sessionId = options?.sessionId ?? 'pending'; - - // Thread and session will be restored in invoke() - this.thread = - options?.thread ?? - ({ - id: 'pending', - state: { - loaded: false, - dirty: false, - get: async () => undefined, - set: async () => {}, - has: async () => false, - delete: async () => {}, - clear: async () => {}, - entries: async () => [], - keys: async () => [], - values: async () => [], - size: async () => 0, - push: async () => {}, - }, - getMetadata: async () => ({}), - setMetadata: async () => {}, - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: async () => true, - } as Thread); - - this.session = - options?.session ?? - ({ - id: 'pending', - thread: this.thread, - state: new Map(), - metadata: {}, - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - } as Session); - - this.auth = null; - - // Create isolated runtime state - this[AGENT_RUNTIME] = { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }; - - // Register services (kv, stream, vector) - registerServices(this, true); // true = populate agents registry - } - - waitUntil(_callback: Promise | (() => void | Promise)): void { - // This will be called from within invoke() where waitUntilHandler is in scope - // We need to access the per-call waitUntilHandler from the current invocation - // This is handled by updating the context during invoke() via AsyncLocalStorage - throw new Error('waitUntil must be called from within invoke() execution context'); - } - - /** - * Execute a function within this agent context. - * - * This method: - * 1. Creates an OpenTelemetry span for the invocation - * 2. Restores/creates session and thread - * 3. Sends session start event - * 4. Executes the function within AsyncLocalStorage context - * 5. Waits for background tasks (waitUntil) - * 6. Saves session and thread - * 7. Sends session complete event - * - * @param fn - Function to execute (typically () => agent.run(input)) - * @param options - Optional configuration for the invocation - * @returns Promise that resolves to the function's return value - * - * @example - * ```typescript - * const result = await ctx.invoke(() => myAgent.run({ userId: '123' })); - * ``` - * - * @example - * ```typescript - * // Multiple agents in sequence: - * const result = await ctx.invoke(async () => { - * const step1 = await agent1.run(input); - * return agent2.run(step1); - * }); - * ``` - */ - async invoke(fn: () => Promise, options?: InvokeOptions): Promise { - const threadProvider = getThreadProvider(); - const sessionProvider = getSessionProvider(); - const sessionEventProvider = getSessionEventProvider(); - const storage = getAgentAsyncLocalStorage(); - - // Create per-invocation state (prevents race conditions on concurrent calls) - const waitUntilHandler = new WaitUntilHandler(this.tracer); - const agentIds = new Set(); - let invocationSessionId = this.initialSessionId ?? 'pending'; - let invocationThread: Thread; - let invocationSession: Session; - const invocationState = new Map(); - - // Create a per-call context that inherits from this but has isolated mutable state - const callContext = Object.create(this) as StandaloneAgentContext< - TAgentMap, - TConfig, - TAppState - >; - callContext.sessionId = invocationSessionId; - callContext.state = invocationState; - callContext[AGENT_IDS] = agentIds; - callContext.waitUntil = (callback: Promise | (() => void | Promise)) => { - waitUntilHandler.waitUntil(callback); - }; - - // Execute within parent context (for distributed tracing) - return await context.with(this.parentContext, async () => { - // Build enriched traceState BEFORE span creation so the - // recording span inherits it and it gets exported to OTLP. - const projectId = runtimeConfig.getProjectId(); - const orgId = runtimeConfig.getOrganizationId(); - const deploymentId = runtimeConfig.getDeploymentId(); - const isDevMode = runtimeConfig.isDevMode(); - - const enrichedContext = enrichContextWithTraceState(context.active(), { - pid: projectId, - oid: orgId, - did: deploymentId, - d: isDevMode ? '1' : undefined, - }); - - // Create a span for this invocation (similar to otelMiddleware's HTTP span) - return await trace.getTracer('standalone-agent').startActiveSpan( - options?.spanName ?? 'agent-invocation', - { - kind: SpanKind.INTERNAL, // Not HTTP, but internal invocation - attributes: { - trigger: this.trigger, - }, - }, - enrichedContext, - async (span) => { - const sctx = span.spanContext(); - - // Generate sessionId from traceId if not provided - invocationSessionId = - this.initialSessionId ?? - (sctx?.traceId ? `sess_${sctx.traceId}` : generateId('sess')); - callContext.sessionId = invocationSessionId; - - // Restore thread and session (like otelMiddleware does) - // For standalone contexts, we create a simple thread/session if not provided - // The threadProvider.restore expects a Hono context with cookie/header access - // For standalone contexts without HTTP, we just create a new thread - const { DefaultThread, generateId: genId } = await import('./session'); - const threadId = genId('thrd'); - // Create a no-op restore function for standalone contexts - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - invocationThread = new DefaultThread(threadProvider, threadId, restoreFn); - callContext.thread = invocationThread; - - invocationSession = await sessionProvider.restore( - invocationThread, - invocationSessionId - ); - callContext.session = invocationSession; - - // Send session start event (if configured) - const shouldSendSession = !!(orgId && projectId); - let canSendSessionEvents = true; - - if (shouldSendSession) { - await sessionEventProvider - .start({ - id: invocationSessionId, - orgId, - projectId, - threadId: invocationThread.id, - routeId: 'standalone', // No route for standalone contexts - deploymentId, - devmode: isDevMode, - environment: runtimeConfig.getEnvironment(), - method: 'STANDALONE', - url: '', - trigger: this.trigger, - metadata: - Object.keys(invocationSession.metadata).length > 0 - ? invocationSession.metadata - : undefined, - }) - .catch((ex) => { - canSendSessionEvents = false; - this.logger.error('error sending session start event: %s', ex); - }); - } - - let hasPendingWaits = false; - - try { - // Execute function within AsyncLocalStorage context with per-call context - const result = await storage.run(callContext, fn); - - // Wait for background tasks (like otelMiddleware does) - if (waitUntilHandler.hasPending()) { - hasPendingWaits = true; - waitUntilHandler - .waitUntilAll(this.logger, invocationSessionId) - .then(async () => { - this.logger.debug( - 'wait until finished for session %s', - invocationSessionId - ); - await sessionProvider.save(invocationSession); - await threadProvider.save(invocationThread); - span.setStatus({ code: SpanStatusCode.OK }); - if (shouldSendSession && canSendSessionEvents) { - const userData = invocationSession.serializeUserData(); - sessionEventProvider - .complete({ - id: invocationSessionId, - threadId: (await invocationThread.empty()) - ? null - : invocationThread.id, - statusCode: 200, // Success - agentIds: Array.from(agentIds), - userData, - metadata: - Object.keys(invocationSession.metadata).length > 0 - ? invocationSession.metadata - : undefined, - }) - .then(() => {}) - .catch((ex) => - this.logger.error( - 'session complete failed: %s', - ex instanceof Error ? ex.message : ex - ) - ); - } - }) - .catch(async (ex) => { - this.logger.error( - 'wait until errored for session %s. %s', - invocationSessionId, - ex - ); - if (ex instanceof Error) { - span.recordException(ex); - } - const message = (ex as Error).message ?? String(ex); - span.setStatus({ - code: SpanStatusCode.ERROR, - message, - }); - this.logger.error(message); - if (shouldSendSession && canSendSessionEvents) { - const userData = invocationSession.serializeUserData(); - sessionEventProvider - .complete({ - id: invocationSessionId, - threadId: (await invocationThread.empty()) - ? null - : invocationThread.id, - statusCode: 500, // Error - error: message, - agentIds: Array.from(agentIds), - userData, - metadata: - Object.keys(invocationSession.metadata).length > 0 - ? invocationSession.metadata - : undefined, - }) - .then(() => {}) - .catch((ex) => - this.logger.error( - 'session complete failed: %s', - ex instanceof Error ? ex.message : ex - ) - ); - } - }) - .finally(() => { - span.end(); - }); - } else { - span.setStatus({ code: SpanStatusCode.OK }); - if (shouldSendSession && canSendSessionEvents) { - const userData = invocationSession.serializeUserData(); - sessionEventProvider - .complete({ - id: invocationSessionId, - threadId: (await invocationThread.empty()) - ? null - : invocationThread.id, - statusCode: 200, - agentIds: Array.from(agentIds), - userData, - metadata: - Object.keys(invocationSession.metadata).length > 0 - ? invocationSession.metadata - : undefined, - }) - .then(() => {}) - .catch((ex) => - this.logger.error( - 'session complete failed: %s', - ex instanceof Error ? ex.message : ex - ) - ); - } - } - - return result; - } catch (ex) { - if (ex instanceof Error) { - span.recordException(ex); - } - const message = (ex as Error).message ?? String(ex); - span.setStatus({ - code: SpanStatusCode.ERROR, - message, - }); - this.logger.error(message); - if (shouldSendSession && canSendSessionEvents) { - const userData = invocationSession.serializeUserData(); - sessionEventProvider - .complete({ - id: invocationSessionId, - threadId: (await invocationThread.empty()) ? null : invocationThread.id, - statusCode: 500, - error: message, - agentIds: Array.from(agentIds), - userData, - metadata: - Object.keys(invocationSession.metadata).length > 0 - ? invocationSession.metadata - : undefined, - }) - .then(() => {}) - .catch((ex) => - this.logger.error( - 'session complete failed: %s', - ex instanceof Error ? ex.message : ex - ) - ); - } - throw ex; - } finally { - if (!hasPendingWaits) { - try { - await sessionProvider.save(invocationSession); - await threadProvider.save(invocationThread); - } finally { - span.end(); - } - } - } - } - ); - }); - } - - /** - * Execute an agent with the given input within this context. - * - * This is a convenience method that wraps `invoke()` for cleaner syntax - * when running a single agent. - * - * @param agent - The agent to execute (must have a `run` method) - * @param input - Input to pass to the agent (if agent requires input) - * @returns Promise that resolves to the agent's output - * - * @example - * ```typescript - * import { createAgentContext } from '@agentuity/runtime'; - * import myAgent from './agents/my-agent'; - * - * const ctx = createAgentContext(); - * const result = await ctx.run(myAgent, { name: 'World' }); - * ``` - * - * @example - * ```typescript - * // Agent without input - * const result = await ctx.run(statusAgent); - * ``` - * - * @example - * ```typescript - * // Multiple agents in sequence - * const ctx = createAgentContext(); - * const step1 = await ctx.run(preprocessAgent, rawData); - * const step2 = await ctx.run(processAgent, step1); - * const result = await ctx.run(postprocessAgent, step2); - * ``` - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - async run(agent: AgentRunner, input?: unknown): Promise { - // Handle both agents with and without input - // The agent.run type varies based on whether input schema is defined - const runFn = agent.run as (input?: unknown) => Promise; - return this.invoke(() => runFn(input)); - } -} - -/** - * Create a standalone agent context for executing agents outside of HTTP requests. - * - * This is useful for Discord bots, cron jobs, CLI scripts, sandboxes, or any scenario - * where you need to run agents but don't have an HTTP request context. - * - * **Auto-initialization**: When running outside of the Agentuity runtime (dev server or cloud), - * this function automatically initializes minimal runtime globals. No manual setup required. - * - * @param options - Optional configuration for the context - * @returns A StandaloneAgentContext instance - * - * @example - * ```typescript - * import { createAgentContext } from '@agentuity/runtime'; - * import myAgent from './agents/my-agent'; - * - * // Simple usage with ctx.run() (recommended): - * const ctx = createAgentContext(); - * const result = await ctx.run(myAgent, { name: 'World' }); - * - * // Discord bot example: - * client.on('messageCreate', async (message) => { - * const ctx = createAgentContext({ - * sessionId: message.id, - * trigger: 'discord' - * }); - * const response = await ctx.run(chatAgent, { message: message.content }); - * await message.reply(response.text); - * }); - * - * // Cron job example: - * cron.schedule('0 * * * *', async () => { - * const ctx = createAgentContext({ trigger: 'cron' }); - * await ctx.run(cleanupAgent); - * }); - * - * // Multiple agents in sequence: - * const ctx = createAgentContext(); - * const step1 = await ctx.run(preprocessAgent, rawData); - * const result = await ctx.run(processAgent, step1); - * ``` - */ -export function createAgentContext>( - options?: StandaloneContextOptions -): StandaloneAgentContext { - return new StandaloneAgentContext(options); -} diff --git a/packages/runtime/src/_tokens.ts b/packages/runtime/src/_tokens.ts deleted file mode 100644 index 4ee2cb2d9..000000000 --- a/packages/runtime/src/_tokens.ts +++ /dev/null @@ -1,114 +0,0 @@ -import type { Context, AttributeValue } from '@opentelemetry/api'; -import type { Span } from '@opentelemetry/sdk-trace-base'; -import type { SpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { inAgentContext, inHTTPContext, getHTTPContext } from './_context'; -import { - ATTR_GEN_AI_SYSTEM, - ATTR_GEN_AI_RESPONSE_MODEL, - ATTR_GEN_AI_USAGE_INPUT_TOKENS, - ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, -} from '@opentelemetry/semantic-conventions/incubating'; - -export const TOKENS_HEADER = 'x-agentuity-tokens'; -export const DURATION_HEADER = 'x-agentuity-duration'; - -// AI SDK span names: ai.generateText, ai.streamText, ai.generateObject, ai.streamObject, ai.embed, ai.embedMany -const AI_SDK_SPAN_PREFIX = 'ai.'; -const AI_SDK_MODEL_NAME = 'ai.model.id'; -const AI_SDK_USAGE_PROMPT_TOKENS = 'ai.usage.promptTokens'; -const AI_SDK_USAGE_COMPLETION_TOKENS = 'ai.usage.completionTokens'; - -const parseTokenHeader = (val: string | undefined): Map => { - const kv = new Map(); - if (val) { - // format is: [model]:[count] [model:count] - const tok = val.split(' '); - for (const entry of tok) { - const [name, count] = entry.split(':'); - if (name) { - kv.set(name, parseInt(count ?? '0', 10) ?? 0); - } - } - } - return kv; -}; - -const serializeTokenHeader = (kv: Map): string => { - const lines: string[] = []; - for (const [k, v] of kv) { - lines.push(`${k}:${v}`); - } - return lines.join(' '); -}; - -const getTokenValue = (val: AttributeValue | undefined): number => { - if (val) { - const v = val.valueOf(); - switch (typeof v) { - case 'number': - return v; - case 'string': - return parseInt(v, 10); - default: - } - } - return 0; -}; - -export class TokenSpanProcessor implements SpanProcessor { - onStart(_span: Span, _context: Context) { - return; - } - - onEnd(span: Span) { - if (inAgentContext() && inHTTPContext()) { - const ctx = getHTTPContext(); - const tokenLine = ctx.res.headers.get(TOKENS_HEADER) ?? undefined; - const tokens = parseTokenHeader(tokenLine); - let mutated = false; - // AI SDK uses ai.* span names but doesn't use the semantic attribute names - if (span.name.startsWith(AI_SDK_SPAN_PREFIX) && AI_SDK_MODEL_NAME in span.attributes) { - const model = span.attributes[AI_SDK_MODEL_NAME]!.toString(); - let totalTokens = tokens.get(model) ?? 0; - if (AI_SDK_USAGE_PROMPT_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[AI_SDK_USAGE_PROMPT_TOKENS]); - } - if (AI_SDK_USAGE_COMPLETION_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[AI_SDK_USAGE_COMPLETION_TOKENS]); - } - if (totalTokens > 0) { - tokens.set(model, totalTokens); - mutated = true; - } - } else if ( - ATTR_GEN_AI_SYSTEM in span.attributes && - ATTR_GEN_AI_RESPONSE_MODEL in span.attributes - ) { - // OpenTelemetry GenAI semantic conventions (used by build-time LLM instrumentation) - const model = span.attributes[ATTR_GEN_AI_RESPONSE_MODEL]!.toString(); - let totalTokens = tokens.get(model) ?? 0; - if (ATTR_GEN_AI_USAGE_INPUT_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[ATTR_GEN_AI_USAGE_INPUT_TOKENS]); - } - if (ATTR_GEN_AI_USAGE_OUTPUT_TOKENS in span.attributes) { - totalTokens += getTokenValue(span.attributes[ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]); - } - if (totalTokens > 0) { - tokens.set(model, totalTokens); - mutated = true; - } - } - if (mutated) { - ctx.header(TOKENS_HEADER, serializeTokenHeader(tokens)); - } - } - } - - forceFlush() { - return Promise.resolve(); - } - - shutdown() { - return Promise.resolve(); - } -} diff --git a/packages/runtime/src/_util.ts b/packages/runtime/src/_util.ts deleted file mode 100644 index 5bdc8eb79..000000000 --- a/packages/runtime/src/_util.ts +++ /dev/null @@ -1,62 +0,0 @@ -import type { Context } from 'hono'; - -export function returnResponse(ctx: Context, result: unknown) { - if (result instanceof ReadableStream) return ctx.body(result); - if (result instanceof Response) return result; - if (typeof result === 'string') return ctx.text(result); - if (typeof result === 'number' || typeof result === 'boolean') return ctx.text(String(result)); - return ctx.json(result); -} - -/** - * SHA256 hash of the given values - * - * @param val one or more strings to hash - * @returns hash string in hex format - */ -export function hash(...val: string[]): string { - const hasher = new Bun.CryptoHasher('sha256'); - val.map((val) => hasher.update(val)); - return hasher.digest().toHex(); -} - -/** - * Safely stringify an object to JSON, handling circular references - * @param obj - The object to stringify - * @returns JSON string representation - */ -export function safeStringify(obj: unknown): string { - const stack: unknown[] = []; - - function replacer(_key: string, value: unknown): unknown { - if (typeof value === 'bigint') { - return value.toString(); - } - - if (typeof value === 'object' && value !== null) { - // Check if this object is already in our ancestor chain - if (stack.includes(value)) { - return '[Circular]'; - } - - // Add to stack before processing - stack.push(value); - - // Process the object - const result = Array.isArray(value) ? [] : {}; - - for (const [k, v] of Object.entries(value)) { - (result as Record)[k] = replacer(k, v); - } - - // Remove from stack after processing - stack.pop(); - - return result; - } - - return value; - } - - return JSON.stringify(replacer('', obj)); -} diff --git a/packages/runtime/src/_validation.ts b/packages/runtime/src/_validation.ts deleted file mode 100644 index 71cb57f70..000000000 --- a/packages/runtime/src/_validation.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import type { StandardSchemaV1, InferInput, InferOutput } from '@agentuity/core'; - -/** - * Schema definition for routes that can have input (POST, PUT, PATCH, DELETE). - * Both input and output are optional, but output is recommended. - * - * @template TInput - Input schema (StandardSchemaV1 or undefined) - * @template TOutput - Output schema (StandardSchemaV1 or undefined) - * - * @example - * ```typescript - * const schema: RouteSchema, z.ZodString> = { - * input: z.object({ name: z.string() }), - * output: z.string() - * }; - * ``` - */ -export type RouteSchema< - TInput extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined, - TOutput extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined, -> = { - input?: TInput; - output?: TOutput; -}; - -/** - * Schema definition for GET routes. - * Input is not allowed (enforced as never), only output validation is supported. - * - * @template TOutput - Output schema (StandardSchemaV1 or undefined) - * - * @example - * ```typescript - * const schema: GetRouteSchema = { - * output: z.string() - * }; - * ``` - */ -export type GetRouteSchema< - TOutput extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined, -> = { - input?: never; - output?: TOutput; -}; - -/** - * Infer the input type from a StandardSchema. - * Returns the input type of the schema (before validation/transformation). - * - * @template T - Schema type - */ -export type InferSchemaInput = T extends StandardSchemaV1 ? InferInput : undefined; - -/** - * Infer the output type from a StandardSchema. - * Returns the output type of the schema (after validation/transformation). - * - * @template T - Schema type - */ -export type InferSchemaOutput = T extends StandardSchemaV1 ? InferOutput : undefined; - -/** - * Extract input schema from RouteSchema or GetRouteSchema. - * - * @template T - RouteSchema or GetRouteSchema type - */ -export type ExtractInputSchema = - T extends RouteSchema ? I : T extends GetRouteSchema ? never : never; - -/** - * Extract output schema from RouteSchema or GetRouteSchema. - * - * @template T - RouteSchema or GetRouteSchema type - */ -export type ExtractOutputSchema = - T extends RouteSchema ? O : T extends GetRouteSchema ? O : never; - -/** - * Validation result from StandardSchema validation. - */ -export type ValidationResult = - | { success: true; data: T } - | { success: false; issues: StandardSchemaV1.Issue[] }; - -/** - * Validates a value against a StandardSchema. - * - * @param schema - The StandardSchema to validate against - * @param value - The value to validate - * @returns ValidationResult with success/failure and data/issues - */ -export async function validateSchema( - schema: StandardSchemaV1, - value: unknown -): Promise> { - const result = await schema['~standard'].validate(value); - - if ('issues' in result && result.issues) { - return { success: false, issues: Array.from(result.issues) }; - } - - return { success: true, data: result.value as T }; -} - -/** - * Format validation issues into a readable error message. - * - * @param issues - Array of validation issues - * @returns Formatted error message - */ -export function formatValidationIssues(issues: StandardSchemaV1.Issue[]): string { - return issues - .map((issue) => { - const path = issue.path?.map((p) => (typeof p === 'object' ? p.key : p)).join('.') || ''; - return path ? `${path}: ${issue.message}` : issue.message; - }) - .join(', '); -} diff --git a/packages/runtime/src/_waituntil.ts b/packages/runtime/src/_waituntil.ts deleted file mode 100644 index 4f8318586..000000000 --- a/packages/runtime/src/_waituntil.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { context, SpanStatusCode, type Tracer, trace } from '@opentelemetry/api'; -import type { Logger } from './logger'; -import { internal } from './logger/internal'; -import { StructuredError } from '@agentuity/core'; - -let running = 0; - -/** - * returns true if wait until is pending - * @returns boolean - */ -export function hasWaitUntilPending(): boolean { - internal.debug('hasWaitUntilPending called: %d', running); - return running > 0; -} - -const WaitUntilInvalidStateError = StructuredError( - 'WaitUntilInvalidStateError', - 'waitUntil cannot be called after waitUntilAll has been called' -); - -const WaitUntilAllInvalidStateError = StructuredError( - 'WaitUntilAllInvalidStateError', - 'waitUntilAll can only be called once per instance' -); - -export default class WaitUntilHandler { - private promises: Promise[]; - private tracer: Tracer; - private started: number | undefined; - private hasCalledWaitUntilAll = false; - - public constructor(tracer: Tracer) { - this.tracer = tracer; - this.promises = []; - } - - public waitUntil( - promise: Promise | (() => void | Promise), - options?: { noSpan?: boolean } - ): void { - if (this.hasCalledWaitUntilAll) { - throw new WaitUntilInvalidStateError(); - } - running++; - internal.debug('wait until called, running: %d', running); - const currentContext = context.active(); - const skipSpan = options?.noSpan === true; - - // Start execution immediately, don't defer it - const executingPromise = (async () => { - if (this.started === undefined) { - this.started = Date.now(); /// this first execution marks the start time - } - - try { - if (skipSpan) { - // Execute without creating a span (used for coordination tasks) - // Still propagate context so downstream async operations inherit the original context - try { - internal.debug('starting waituntil (no span)'); - await context.with(currentContext, async () => { - const resolvedPromise = typeof promise === 'function' ? promise() : promise; - return await Promise.resolve(resolvedPromise); - }); - internal.debug('completed waituntil (no span)'); - } catch (ex: unknown) { - // Log the error but don't re-throw - background tasks should never crash the server - internal.error('Background task error: %s', ex); - } - } else { - // Execute with a span (default behavior) - const span = this.tracer.startSpan('waitUntil', {}, currentContext); - const spanContext = trace.setSpan(currentContext, span); - try { - internal.debug('starting waituntil'); - await context.with(spanContext, async () => { - const resolvedPromise = typeof promise === 'function' ? promise() : promise; - return await Promise.resolve(resolvedPromise); - }); - internal.debug('completed waituntil'); - span.setStatus({ code: SpanStatusCode.OK }); - } catch (ex: unknown) { - span.recordException(ex as Error); - span.setStatus({ code: SpanStatusCode.ERROR }); - // Log the error but don't re-throw - background tasks should never crash the server - internal.error('Background task error: %s', ex); - } finally { - span.end(); - } - } - } finally { - // Decrement running counter when promise completes (success or failure) - running--; - internal.debug('waituntil completed, running: %d', running); - } - })(); - - // Store the executing promise for cleanup tracking - this.promises.push(executingPromise); - } - - public hasPending(): boolean { - return this.promises.length > 0; - } - - /** - * Returns a snapshot of currently pending promises. - * This allows waiting for specific promises without including promises added later. - * Useful to avoid deadlock when the caller will add their own promise via waitUntil. - */ - public getPendingSnapshot(): Promise[] { - return [...this.promises]; - } - - /** - * Wait for a specific set of promises to complete. - * Unlike waitUntilAll, this doesn't mark the handler as "all called" and - * allows additional waitUntil calls afterward. - */ - public async waitForPromises( - promises: Promise[], - logger: Logger, - sessionId: string - ): Promise { - if (promises.length === 0) { - internal.debug('No promises to wait for in snapshot'); - return; - } - - internal.debug( - `⏳ Waiting for ${promises.length} snapshot promises to complete (session: ${sessionId})...` - ); - try { - const results = await Promise.allSettled(promises); - - // Log any failures - const failures = results.filter((r) => r.status === 'rejected'); - if (failures.length > 0) { - logger.error('%d background task(s) failed during execution', failures.length); - } - - internal.debug('✅ Snapshot promises completed (session: %s)', sessionId); - } catch (ex) { - logger.error('error waiting for snapshot promises', ex); - } - } - - public async waitUntilAll(logger: Logger, sessionId: string): Promise { - internal.debug(`🔍 waitUntilAll() called for session ${sessionId} (count: %d)`, running); - - if (this.hasCalledWaitUntilAll) { - throw new WaitUntilAllInvalidStateError(); - } - this.hasCalledWaitUntilAll = true; - - if (this.promises.length === 0) { - internal.debug('No promises to wait for, executing evals directly'); - // await this.executeEvalsForSession(logger, sessionId); - return; - } - - internal.debug(`⏳ Waiting for ${this.promises.length} promises to complete...`); - try { - // Promises are already executing, just wait for them to complete - // Use allSettled so one failing promise doesn't stop others - const results = await Promise.allSettled(this.promises); - const duration = Date.now() - (this.started as number); - - // Log any failures - const failures = results.filter((r) => r.status === 'rejected'); - if (failures.length > 0) { - logger.error('%d background task(s) failed during execution', failures.length); - } - - internal.debug( - '✅ All promises completed, marking session completed (duration %dms)', - duration - ); - } catch (ex) { - logger.error('error sending session completed', ex); - } finally { - // Note: running counter is decremented by each promise when it completes, - // so we don't decrement here. Just clear the array. - this.promises.length = 0; - } - } -} diff --git a/packages/runtime/src/agent.ts b/packages/runtime/src/agent.ts deleted file mode 100644 index 770d4be49..000000000 --- a/packages/runtime/src/agent.ts +++ /dev/null @@ -1,2739 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { - StructuredError, - type KeyValueStorage, - type StandardSchemaV1, - type StreamStorage, - type VectorStorage, - type SandboxService, - type QueueService, - type EmailService, - type ScheduleService, - type TaskStorage, - type InferInput, - type InferOutput, - toCamelCase, -} from '@agentuity/core'; -import { context, SpanStatusCode, type Tracer, trace } from '@opentelemetry/api'; -import { enrichContextWithTraceState } from './otel/tracestate'; -import type { Context, MiddlewareHandler } from 'hono'; -import type { Handler } from 'hono/types'; -import { validator } from 'hono/validator'; -import { AGENT_RUNTIME, INTERNAL_AGENT, CURRENT_AGENT, AGENT_IDS } from './_config'; -import { - getAgentContext, - inHTTPContext, - getHTTPContext, - setupRequestAgentContext, - getAgentAsyncLocalStorage, - type RequestAgentContextArgs, -} from './_context'; -import type { Logger } from './logger'; -import type { Eval, EvalHandlerResult, EvalRunResult, EvalFunction } from './eval'; -import { internal } from './logger/internal'; -import { fireEvent } from './_events'; -import type { Thread, Session } from './session'; -import { privateContext } from './_server'; -import { generateId } from './session'; -import { getEvalRunEventProvider } from './_services'; -import * as runtimeConfig from './_config'; -import type { AppState } from './index'; -import { validateSchema, formatValidationIssues } from './_validation'; -import { getAgentMetadataByName, getEvalMetadata } from './_metadata'; - -export type AgentEventName = 'started' | 'completed' | 'errored'; - -export type AgentEventCallback> = - | (( - eventName: 'started', - agent: TAgent, - context: AgentContext - ) => Promise | void) - | (( - eventName: 'completed', - agent: TAgent, - context: AgentContext - ) => Promise | void) - | (( - eventName: 'errored', - agent: TAgent, - context: AgentContext, - data: Error - ) => Promise | void); - -/** - * Runtime state container for agents and event listeners. - * Isolates global state into context for better testing. - */ -export interface AgentRuntimeState { - agents: Map>; - agentConfigs: Map; - agentEventListeners: WeakMap< - Agent, - Map>> - >; -} - -/** - * Context object passed to every agent handler providing access to runtime services and state. - * - * @template TAgentRegistry - Registry of all available agents (auto-generated, strongly-typed) - * @template TConfig - Agent-specific configuration type from setup function - * @template TAppState - Application-wide state type from createApp - * - * @example - * ```typescript - * const agent = createAgent('my-agent', { - * handler: async (ctx, input) => { - * // Logging - * ctx.logger.info('Processing request', { input }); - * - * // Call another agent (import it directly) - * import otherAgent from './other-agent'; - * const result = await otherAgent.run({ data: input }); - * - * // Store data - * await ctx.kv.set('key', { value: result }); - * - * // Access config from setup - * const cache = ctx.config.cache; - * - * // Background task - * ctx.waitUntil(async () => { - * await ctx.logger.info('Cleanup complete'); - * }); - * - * return result; - * } - * }); - * ``` - */ -export interface AgentContext< - _TAgentRegistry extends AgentRegistry = AgentRegistry, - TConfig = unknown, - TAppState = Record, -> { - /** - * Internal runtime state (agents, configs, event listeners). - * Stored with Symbol key to prevent accidental access. - * Use getAgentRuntime(ctx) to access. - * @internal - */ - [AGENT_RUNTIME]: AgentRuntimeState; - /** - * Schedule a background task that continues after the response is sent. - * Useful for cleanup, logging, or async operations that don't block the response. - * - * @param promise - Promise or function that returns void or Promise - * - * @example - * ```typescript - * ctx.waitUntil(async () => { - * await ctx.kv.set('processed', Date.now()); - * ctx.logger.info('Background task complete'); - * }); - * ``` - */ - waitUntil: (promise: Promise | (() => void | Promise)) => void; - - /** - * Structured logger with OpenTelemetry integration. - * Logs are automatically correlated with traces. - * - * @example - * ```typescript - * ctx.logger.info('Processing started', { userId: input.id }); - * ctx.logger.warn('Rate limit approaching', { remaining: 10 }); - * ctx.logger.error('Operation failed', { error: err.message }); - * ``` - */ - logger: Logger; - - /** - * Unique session identifier for this request. Consistent across agent calls in the same session. - */ - sessionId: string; - - /** - * OpenTelemetry tracer for creating custom spans and tracking performance. - * - * @example - * ```typescript - * const span = ctx.tracer.startSpan('database-query'); - * try { - * const result = await database.query(); - * span.setStatus({ code: SpanStatusCode.OK }); - * return result; - * } finally { - * span.end(); - * } - * ``` - */ - tracer: Tracer; - - /** - * Key-value storage for simple data persistence. - * - * @example - * ```typescript - * await ctx.kv.set('user:123', { name: 'Alice', age: 30 }); - * const user = await ctx.kv.get('user:123'); - * await ctx.kv.delete('user:123'); - * const keys = await ctx.kv.list('user:*'); - * ``` - */ - kv: KeyValueStorage; - - /** - * Stream storage for real-time data streams and logs. - * - * @example - * ```typescript - * const stream = await ctx.stream.create('agent-logs'); - * await ctx.stream.write(stream.id, 'Processing step 1'); - * await ctx.stream.write(stream.id, 'Processing step 2'); - * ``` - */ - stream: StreamStorage; - - /** - * Vector storage for embeddings and similarity search. - * - * @example - * ```typescript - * await ctx.vector.upsert('docs', [ - * { id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } } - * ]); - * const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 }); - * ``` - */ - vector: VectorStorage; - - /** - * Sandbox service for creating and running isolated code execution environments. - * - * @example - * ```typescript - * // One-shot execution - * const result = await ctx.sandbox.run({ - * command: { - * exec: ['bun', 'run', 'index.ts'], - * files: [{ path: 'index.ts', content: Buffer.from('console.log("hello")') }] - * } - * }); - * console.log('Exit:', result.exitCode); - * - * // Interactive sandbox - * const sandbox = await ctx.sandbox.create({ - * resources: { memory: '1Gi', cpu: '1000m' } - * }); - * await sandbox.execute({ command: ['bun', 'init'] }); - * await sandbox.execute({ command: ['bun', 'add', 'zod'] }); - * await sandbox.destroy(); - * ``` - */ - sandbox: SandboxService; - - /** - * Queue service for publishing messages to queues. - * - * @example - * ```typescript - * const result = await ctx.queue.publish('my-queue', { event: 'user.created', userId: '123' }); - * console.log('Message ID:', result.id); - * ``` - */ - queue: QueueService; - - /** - * Email service for managing email addresses, destinations, and sending/receiving emails. - * - * @example - * ```typescript - * // Create an email address - * const address = await ctx.email.createAddress('support'); - * - * // Send an email - * const result = await ctx.email.send({ - * from: address.email, - * to: ['user@example.com'], - * subject: 'Hello!', - * text: 'Welcome to our platform.', - * }); - * - * // List inbound emails - * const inbound = await ctx.email.listInbound(address.id); - * ``` - */ - email: EmailService; - - /** - * Schedule service for managing cron-based scheduled tasks with - * destinations and delivery tracking. - * - * @see https://agentuity.dev/services/schedule - */ - schedule: ScheduleService; - - /** - * Task service for agent-driven issue tracking. - * - * @example - * ```typescript - * const task = await ctx.task.create({ - * title: 'Investigate API error', - * type: 'bug', - * created_id: ctx.current.id, - * }); - * await ctx.task.update(task.id, { status: 'in_progress' }); - * ``` - */ - task: TaskStorage; - - /** - * In-memory state storage scoped to the current request. - * Use for passing data between middleware and handlers. - * - * @example - * ```typescript - * ctx.state.set('startTime', Date.now()); - * const duration = Date.now() - (ctx.state.get('startTime') as number); - * ``` - */ - state: Map; - - /** - * Thread information for multi-turn conversations. - */ - thread: Thread; - - /** - * Session information for the current request. - */ - session: Session; - - /** - * Agent-specific configuration returned from the setup function. - * Type is inferred from your setup function's return value. - * - * @example - * ```typescript - * createAgent({ - * setup: async () => ({ cache: new Map(), db: await connectDB() }), - * handler: async (ctx, input) => { - * ctx.config.cache.set('key', 'value'); // Strongly typed! - * await ctx.config.db.query('SELECT * FROM users'); - * } - * }); - * ``` - */ - config: TConfig; - - /** - * Application-wide state returned from createApp setup function. - * Shared across all agents in the application. - * - * @example - * ```typescript - * const app = createApp({ - * setup: async () => ({ db: await connectDB(), redis: await connectRedis() }) - * }); - * - * // Later in any agent: - * handler: async (ctx, input) => { - * await ctx.app.db.query('SELECT 1'); - * await ctx.app.redis.set('key', 'value'); - * } - * ``` - */ - app: TAppState; - - /** - * Metadata about the currently executing agent. - * Provides access to the agent's id, name, and other properties. - * - * @example - * ```typescript - * handler: async (ctx, input) => { - * // Use agent ID for namespaced state keys - * const stateKey = `${ctx.current.id}_counter`; - * await ctx.thread.state.set(stateKey, value); - * - * // Log agent info - * ctx.logger.info('Running agent', { name: ctx.current.name }); - * } - * ``` - */ - current: AgentMetadata; - - /** - * Authentication context when request is authenticated. - * Available when auth middleware is configured on the Hono app. - * - * Will be `null` for: - * - Unauthenticated requests - * - Cron jobs - * - Agent-to-agent calls without auth propagation - * - * @example - * ```typescript - * handler: async (ctx, input) => { - * if (!ctx.auth) { - * return { error: 'Please sign in' }; - * } - * - * // Access user info - * const user = await ctx.auth.getUser(); - * ctx.logger.info(`Request from ${user.email}`); - * - * // Check organization role - * if (await ctx.auth.hasOrgRole('admin')) { - * // Admin-only logic - * } - * - * return { userId: user.id }; - * } - * ``` - */ - auth: import('@agentuity/core').AuthInterface | null; -} - -type InternalAgentMetadata = { - /** - * the unique name for the agent (user-provided). - */ - name: string; - /** - * the unique identifier for this project, agent and deployment. - */ - id: string; - /** - * the unique identifier for this agent across multiple deployments - */ - agentId: string; - /** - * the relative path to the agent from the root project directory. - */ - filename: string; - /** - * a unique version for the agent. computed as the SHA256 contents of the file. - */ - version: string; - - /** - * the source code for the input schema. - */ - inputSchemaCode?: string; - - /** - * the source code for the output schema. - */ - outputSchemaCode?: string; -}; - -type ExternalAgentMetadata = { - /** - * the human readable description for the agent - */ - description?: string; -}; - -export type AgentMetadata = InternalAgentMetadata & ExternalAgentMetadata; - -/** - * Configuration object for creating an agent evaluation function. - * - * @template TInput - Input schema type from the agent - * @template TOutput - Output schema type from the agent - */ -export interface CreateEvalConfig< - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, -> { - /** - * Optional description of what this evaluation does. - * - * @example - * ```typescript - * description: 'Ensures output is greater than zero' - * ``` - */ - description?: string; - - /** - * Evaluation handler function that tests the agent's behavior. - * Return true if the evaluation passes, false if it fails. - * - * @param run - Evaluation run context containing input and metadata - * @param result - The output from the agent handler - * @returns Boolean indicating pass/fail, or evaluation result object - * - * @example - * ```typescript - * handler: async (run, result) => { - * // Assert that output is positive - * if (result <= 0) { - * return false; // Evaluation failed - * } - * return true; // Evaluation passed - * } - * ``` - * - * @example - * ```typescript - * // With detailed result - * handler: async (run, result) => { - * const passed = result.length > 5; - * return { - * passed, - * score: passed ? 1.0 : 0.0, - * message: passed ? 'Output length is valid' : 'Output too short' - * }; - * } - * ``` - */ - handler: EvalFunction< - TInput extends StandardSchemaV1 ? InferOutput : undefined, - TOutput extends StandardSchemaV1 ? InferOutput : undefined - >; -} - -export type PresetEvalConfig< - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, -> = CreateEvalConfig & { name: string }; - -type CreateEvalMethod< - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, -> = { - (config: PresetEvalConfig): Eval; - (name: string, config: CreateEvalConfig): Eval; -}; - -/** - * Validator function type with method overloads for different validation scenarios. - * Provides type-safe validation middleware that integrates with Hono's type system. - * - * This validator automatically validates incoming JSON request bodies using StandardSchema-compatible - * schemas (Zod, Valibot, ArkType, etc.) and provides full TypeScript type inference for validated data - * accessible via `c.req.valid('json')`. - * - * The validator returns 400 Bad Request with validation error details if validation fails. - * - * @template TInput - Agent's input schema type (StandardSchemaV1 or undefined) - * @template _TOutput - Agent's output schema type (reserved for future output validation) - * - * @example Basic usage with agent's schema - * ```typescript - * router.post('/', agent.validator(), async (c) => { - * const data = c.req.valid('json'); // Fully typed from agent's input schema - * return c.json(data); - * }); - * ``` - * - * @example Override with custom input schema - * ```typescript - * router.post('/custom', agent.validator({ input: z.object({ id: z.string() }) }), async (c) => { - * const data = c.req.valid('json'); // Typed as { id: string } - * return c.json(data); - * }); - * ``` - */ -export interface AgentValidator< - TInput extends StandardSchemaV1 | undefined, - _TOutput extends StandardSchemaV1 | undefined, -> { - /** - * Validates using the agent's input schema (no override). - * Returns Hono middleware handler that validates JSON request body. - * - * @returns Middleware handler with type inference for validated data - * - * @example - * ```typescript - * // Agent has schema: { input: z.object({ name: z.string() }) } - * router.post('/', agent.validator(), async (c) => { - * const data = c.req.valid('json'); // { name: string } - * return c.json({ received: data.name }); - * }); - * ``` - */ - (): TInput extends StandardSchemaV1 - ? Handler< - any, - any, - { - // eslint-disable-next-line @typescript-eslint/no-empty-object-type - in: {}; - out: { json: InferInput }; - } - > - : Handler; - - /** - * Output-only validation override. - * Validates only the response body (no input validation). - * - * Useful for GET routes or routes where input validation is handled elsewhere. - * The middleware validates the JSON response body and throws 500 Internal Server Error - * if validation fails. - * - * @template TOverrideOutput - Custom output schema type - * @param override - Object containing output schema - * @returns Middleware handler that validates response output - * - * @example GET route with output validation - * ```typescript - * router.get('/', agent.validator({ output: z.array(z.object({ id: z.string() })) }), async (c) => { - * // Returns array of objects - validated against schema - * return c.json([{ id: '123' }, { id: '456' }]); - * }); - * ``` - */ - (override: { - output: TOverrideOutput; - }): Handler< - any, - any, - { - // eslint-disable-next-line @typescript-eslint/no-empty-object-type - in: {}; - out: { json: InferOutput }; - } - >; - - /** - * Validates with custom input and optional output schemas (POST/PUT/PATCH/DELETE). - * Overrides the agent's schema for this specific route. - * - * @template TOverrideInput - Custom input schema type - * @template TOverrideOutput - Optional custom output schema type - * @param override - Object containing input (required) and output (optional) schemas - * @returns Middleware handler with type inference from custom schemas - * - * @example Custom input schema - * ```typescript - * router.post('/users', agent.validator({ - * input: z.object({ email: z.string().email(), name: z.string() }) - * }), async (c) => { - * const data = c.req.valid('json'); // { email: string, name: string } - * return c.json({ id: '123', ...data }); - * }); - * ``` - * - * @example Custom input and output schemas - * ```typescript - * router.post('/convert', agent.validator({ - * input: z.string(), - * output: z.number() - * }), async (c) => { - * const data = c.req.valid('json'); // string - * return c.json(123); - * }); - * ``` - */ - < - TOverrideInput extends StandardSchemaV1, - TOverrideOutput extends StandardSchemaV1 | undefined = undefined, - >(override: { - input: TOverrideInput; - output?: TOverrideOutput; - }): Handler< - any, - any, - { - // eslint-disable-next-line @typescript-eslint/no-empty-object-type - in: {}; - out: { - json: InferInput; - }; - } - >; -} - -/** - * Agent instance type returned by createAgent(). - * Represents a fully configured agent with metadata, handler, lifecycle hooks, and event listeners. - * - * @template TInput - Input schema type (StandardSchemaV1 or undefined) - * @template TOutput - Output schema type (StandardSchemaV1 or undefined) - * @template TStream - Whether the agent returns a stream (true/false) - * @template TConfig - Agent-specific configuration type from setup function - * @template TAppState - Application state type from createApp - * - * @example - * ```typescript - * const agent = createAgent({ - * metadata: { name: 'My Agent' }, - * schema: { input: z.string(), output: z.number() }, - * handler: async (ctx, input) => input.length - * }); - * - * // Access agent properties - * console.log(agent.metadata.name); // "My Agent" - * - * // Add event listeners - * agent.addEventListener('started', (eventName, agent, ctx) => { - * console.log('Agent started:', ctx.sessionId); - * }); - * - * // Create evals for testing - * const eval1 = agent.createEval('check-positive', { - * description: 'Ensures result is greater than 5', - * handler: async (run, result) => { - * return result > 5; // Assert output is greater than 5 - * } - * }); - * ``` - */ -export type Agent< - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, - TStream extends boolean = false, - TConfig = unknown, - TAppState = Record, -> = { - /** - * Agent metadata including name, description, id, version, and filename. - */ - metadata: AgentMetadata; - - /** - * The main handler function that processes agent requests. - * Gets AgentContext from AsyncLocalStorage, receives validated input, returns output or stream. - */ - handler: (...args: any[]) => any | Promise; - - /** - * Creates a type-safe validation middleware for routes using StandardSchema validation. - * - * This method validates incoming JSON request bodies against the agent's **input schema** - * and optionally validates outgoing JSON responses against the **output schema**. - * Provides full TypeScript type inference for validated input data accessible via `c.req.valid('json')`. - * - * **Validation behavior:** - * - **Input**: Validates request JSON body, returns 400 Bad Request on failure - * - **Output**: Validates response JSON body (if output schema provided), throws 500 on failure - * - Passes validated input data to handler via `c.req.valid('json')` - * - Full TypeScript type inference for validated input data - * - * **Supported schema libraries:** - * - Zod (z.object, z.string, etc.) - * - Valibot (v.object, v.string, etc.) - * - ArkType (type({ ... })) - * - Any StandardSchema-compatible library - * - * **Method overloads:** - * - `agent.validator()` - Validates using agent's input/output schemas - * - `agent.validator({ output: schema })` - Output-only validation (no input validation) - * - `agent.validator({ input: schema })` - Custom input schema override (skips agent's output validation) - * - `agent.validator({ input: schema, output: schema })` - Both input and output validated - * - * @returns Hono middleware handler with proper type inference - * - * @example Automatic validation using agent's schema - * ```typescript - * // Agent defined with: schema: { input: z.object({ name: z.string(), age: z.number() }) } - * router.post('/', agent.validator(), async (c) => { - * const data = c.req.valid('json'); // Fully typed: { name: string, age: number } - * return c.json({ greeting: `Hello ${data.name}, age ${data.age}` }); - * }); - * ``` - * - * @example Override with custom schema per-route - * ```typescript - * router.post('/email', agent.validator({ - * input: z.object({ email: z.string().email() }) - * }), async (c) => { - * const data = c.req.valid('json'); // Typed as { email: string } - * return c.json({ sent: data.email }); - * }); - * ``` - * - * @example Works with any StandardSchema library - * ```typescript - * import * as v from 'valibot'; - * - * router.post('/valibot', agent.validator({ - * input: v.object({ count: v.number() }) - * }), async (c) => { - * const data = c.req.valid('json'); // Typed correctly - * return c.json({ count: data.count }); - * }); - * ``` - * - * @example Validation error response (400) - * ```typescript - * // Request: { "name": "Bob" } (missing 'age') - * // Response: { - * // "error": "Validation failed", - * // "message": "age: Invalid input: expected number, received undefined", - * // "issues": [{ "message": "...", "path": ["age"] }] - * // } - * ``` - */ - validator: AgentValidator; - - /** - * Array of evaluation functions created via agent.createEval(). - * Used for testing and validating agent behavior. - */ - evals?: Eval[]; - - /** - * Create an evaluation function for testing this agent. - * Evals can assert correctness of agent input/output during test runs. - * - * @param config - Eval configuration - * @param config.metadata - Optional eval metadata (name, description) - * @param config.handler - Eval handler function receiving run context and result - * - * @example - * ```typescript - * const agent = createAgent({ - * schema: { input: z.string(), output: z.number() }, - * handler: async (ctx, input) => input.length - * }); - * - * // Create eval to validate output - * agent.createEval('check-positive', { - * description: 'Ensures output is a positive number', - * handler: async (run, result) => { - * return result > 0; // Assert output is positive - * } - * }); - * ``` - */ - createEval: CreateEvalMethod; - - /** - * Optional setup function called once when app starts. - * Returns agent-specific configuration available via ctx.config. - */ - setup?: (app: TAppState) => Promise | TConfig; - - /** - * Optional shutdown function called when app stops. - * Receives app state and agent config for cleanup. - */ - shutdown?: (app: TAppState, config: TConfig) => Promise | void; - - /** - * Register an event listener for when the agent starts execution. - * - * @param eventName - Must be 'started' - * @param callback - Function called when agent execution begins - * - * @example - * ```typescript - * agent.addEventListener('started', (eventName, agent, ctx) => { - * console.log(`${agent.metadata.name} started at ${new Date()}`); - * }); - * ``` - */ - addEventListener( - eventName: 'started', - callback: ( - eventName: 'started', - agent: Agent, - context: AgentContext - ) => Promise | void - ): void; - - /** - * Register an event listener for when the agent completes successfully. - * - * @param eventName - Must be 'completed' - * @param callback - Function called when agent execution completes - * - * @example - * ```typescript - * agent.addEventListener('completed', (eventName, agent, ctx) => { - * console.log(`${agent.metadata.name} completed successfully`); - * }); - * ``` - */ - addEventListener( - eventName: 'completed', - callback: ( - eventName: 'completed', - agent: Agent, - context: AgentContext - ) => Promise | void - ): void; - - /** - * Register an event listener for when the agent throws an error. - * - * @param eventName - Must be 'errored' - * @param callback - Function called when agent execution fails - * - * @example - * ```typescript - * agent.addEventListener('errored', (eventName, agent, ctx, error) => { - * console.error(`${agent.metadata.name} failed:`, error.message); - * }); - * ``` - */ - addEventListener( - eventName: 'errored', - callback: ( - eventName: 'errored', - agent: Agent, - context: AgentContext, - data: Error - ) => Promise | void - ): void; - - /** - * Remove a previously registered 'started' event listener. - * - * @param eventName - Must be 'started' - * @param callback - The callback function to remove - */ - removeEventListener( - eventName: 'started', - callback: ( - eventName: 'started', - agent: Agent, - context: AgentContext - ) => Promise | void - ): void; - - /** - * Remove a previously registered 'completed' event listener. - * - * @param eventName - Must be 'completed' - * @param callback - The callback function to remove - */ - removeEventListener( - eventName: 'completed', - callback: ( - eventName: 'completed', - agent: Agent, - context: AgentContext - ) => Promise | void - ): void; - - /** - * Remove a previously registered 'errored' event listener. - * - * @param eventName - Must be 'errored' - * @param callback - The callback function to remove - */ - removeEventListener( - eventName: 'errored', - callback: ( - eventName: 'errored', - agent: Agent, - context: AgentContext, - data: Error - ) => Promise | void - ): void; -} & (TInput extends StandardSchemaV1 ? { inputSchema: TInput } : { inputSchema?: never }) & - (TOutput extends StandardSchemaV1 ? { outputSchema: TOutput } : { outputSchema?: never }) & - (TStream extends true ? { stream: true } : { stream?: false }); - -type InferSchemaInput = T extends StandardSchemaV1 ? InferOutput : never; - -type InferStreamOutput = TStream extends true - ? TOutput extends StandardSchemaV1 - ? ReadableStream> - : ReadableStream - : TOutput extends StandardSchemaV1 - ? InferOutput - : void; - -type SchemaInput = TSchema extends { input: infer I } ? I : undefined; -type SchemaOutput = TSchema extends { output: infer O } ? O : undefined; -type SchemaStream = TSchema extends { stream: infer S } - ? S extends boolean - ? S - : false - : false; - -type SchemaHandlerReturn = - SchemaStream extends true - ? SchemaOutput extends StandardSchemaV1 - ? ReadableStream>> - : ReadableStream - : SchemaOutput extends StandardSchemaV1 - ? InferOutput> - : void; - -// Handler signature based on schema + setup result (no self-reference) -type AgentHandlerFromConfig = - SchemaInput extends infer I - ? I extends StandardSchemaV1 - ? ( - ctx: AgentContext, - input: InferOutput - ) => Promise> | SchemaHandlerReturn - : ( - ctx: AgentContext - ) => Promise> | SchemaHandlerReturn - : ( - ctx: AgentContext - ) => Promise> | SchemaHandlerReturn; - -/** - * Configuration object for creating an agent with automatic type inference. - * - * Passed as the second parameter to createAgent(name, config). - * - * @template TSchema - Schema definition object containing optional input, output, and stream properties - * @template TConfig - Function type that returns agent-specific configuration from setup - * - * @example - * ```typescript - * const agent = createAgent('greeting', { - * description: 'Generates personalized greetings', - * schema: { - * input: z.object({ name: z.string(), age: z.number() }), - * output: z.string() - * }, - * handler: async (ctx, { name, age }) => { - * return `Hello, ${name}! You are ${age} years old.`; - * } - * }); - * ``` - */ -export interface CreateAgentConfig< - TSchema extends - | { - input?: StandardSchemaV1; - output?: StandardSchemaV1; - stream?: boolean; - } - | undefined = undefined, - TConfig extends (app: AppState) => any = any, -> { - /** - * Optional schema validation using Zod or any StandardSchemaV1 compatible library. - * - * @example - * ```typescript - * schema: { - * input: z.object({ name: z.string(), age: z.number() }), - * output: z.string(), - * stream: false - * } - * ``` - */ - schema?: TSchema; - - /** - * Optional description of what this agent does, visible in the Agentuity platform. - * - * @example - * ```typescript - * description: 'Returns personalized greetings' - * ``` - */ - description?: string; - - /** - * Optional metadata object (typically injected by build plugin during compilation). - * Contains agent identification and versioning information. - * - * @internal - Usually populated by build tooling, not manually set - */ - metadata?: Partial; - - /** - * Optional async function called once on app startup to initialize agent-specific resources. - * The returned value is available in the handler via `ctx.config`. - * - * @param app - Application state from createApp setup function - * @returns Agent-specific configuration object - * - * @example - * ```typescript - * setup: async (app) => { - * const cache = new Map(); - * const db = await connectDB(); - * return { cache, db }; - * } - * ``` - */ - setup?: TConfig; - - /** - * The main agent logic that processes requests. - * Receives AgentContext and validated input (if schema.input is defined), returns output or stream. - * - * @param ctx - Agent context with logger, storage, and other runtime services - * @param input - Validated input (only present if schema.input is defined) - * @returns Output matching schema.output type, or ReadableStream if schema.stream is true - * - * @example - * ```typescript - * handler: async (ctx, { name, age }) => { - * ctx.logger.info(`Processing for ${name}`); - * await ctx.kv.set('lastUser', name); - * return `Hello, ${name}! You are ${age} years old.`; - * } - * ``` - */ - handler: AgentHandlerFromConfig< - TSchema, - TConfig extends (app: AppState) => infer R ? Awaited : undefined, - AppState - >; - - /** - * Optional async cleanup function called on app shutdown. - * Use this to close connections, flush buffers, etc. - * - * @param app - Application state from createApp - * @param config - Agent config returned from setup function - * - * @example - * ```typescript - * shutdown: async (app, config) => { - * await config.db.close(); - * config.cache.clear(); - * } - * ``` - */ - shutdown?: ( - app: AppState, - config: TConfig extends (app: AppState) => infer R ? Awaited : undefined - ) => Promise | void; -} - -/** - * The public interface returned by createAgent(). - * Provides methods to run the agent, create evaluations, and manage event listeners. - * - * @template TInput - Input schema type (StandardSchemaV1 or undefined if no input) - * @template TOutput - Output schema type (StandardSchemaV1 or undefined if no output) - * @template TStream - Whether the agent returns a stream (true/false) - * - * @example - * ```typescript - * const agent = createAgent('greeting', { - * schema: { - * input: z.object({ name: z.string() }), - * output: z.string() - * }, - * handler: async (ctx, { name }) => `Hello, ${name}!` - * }); - * - * // Run the agent - * const result = await agent.run({ name: 'Alice' }); - * - * // Create evaluation - * const evalDef = agent.createEval('greeting-accuracy', { - * description: 'Checks if greeting includes the user name', - * handler: async (ctx, input, output) => { - * return { score: output.includes(input.name) ? 1 : 0 }; - * } - * }); - * - * // Listen to events - * agent.addEventListener('completed', async (eventName, agent, context) => { - * console.log('Agent completed successfully'); - * }); - * ``` - */ -export interface AgentRunner< - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, - TStream extends boolean = false, -> { - /** Agent metadata (id, name, description, etc.) */ - metadata: AgentMetadata; - - /** - * Execute the agent with validated input. - * If agent has no input schema, call with no arguments. - * If agent has input schema, pass validated input object. - * - * @example - * ```typescript - * // Agent with input - * const result = await agent.run({ name: 'Alice' }); - * - * // Agent without input - * const result = await agent.run(); - * ``` - */ - run: undefined extends TInput - ? () => Promise, TStream>> - : ( - input: InferSchemaInput> - ) => Promise, TStream>>; - - /** - * Create Hono validator middleware for this agent. - * Automatically validates request input against the agent's schema. - * - * @example - * ```typescript - * import myAgent from './my-agent'; - * router.post('/', myAgent.validator(), async (c) => { - * const data = c.req.valid('json'); // Fully typed! - * return c.json(await myAgent.run(data)); - * }); - * ``` - */ - validator: AgentValidator; - - /** Input schema (if defined) */ - inputSchema?: TInput; - - /** Output schema (if defined) */ - outputSchema?: TOutput; - - /** Whether agent returns a stream */ - stream?: TStream; - - /** - * Create an evaluation for this agent. - * Evaluations run automatically after the agent completes. - * - * @example - * ```typescript - * const accuracyEval = agent.createEval('accuracy', { - * description: 'Validates output length is non-zero', - * handler: async (ctx, input, output) => ({ - * score: output.length > 0 ? 1 : 0, - * metadata: { outputLength: output.length } - * }) - * }); - * ``` - */ - createEval: CreateEvalMethod; - - /** - * Add event listener for 'started' or 'completed' events. - * Listeners fire sequentially in the order they were added. - * - * @param eventName - 'started' or 'completed' - * @param callback - Function to call when event fires - * - * @example - * ```typescript - * agent.addEventListener('started', async (eventName, agent, context) => { - * context.logger.info('Agent execution started'); - * }); - * ``` - */ - addEventListener( - eventName: 'started' | 'completed', - callback: ( - eventName: 'started' | 'completed', - agent: Agent, - context: AgentContext - ) => Promise | void - ): void; - - /** - * Add event listener for 'errored' event. - * Fires when agent handler throws an error. - * - * @param eventName - 'errored' - * @param callback - Function to call when error occurs - * - * @example - * ```typescript - * agent.addEventListener('errored', async (eventName, agent, context, error) => { - * context.logger.error('Agent failed', { error: error.message }); - * }); - * ``` - */ - addEventListener( - eventName: 'errored', - callback: ( - eventName: 'errored', - agent: Agent, - context: AgentContext, - error: Error - ) => Promise | void - ): void; - - /** - * Remove event listener for 'started' or 'completed' events. - * - * @param eventName - 'started' or 'completed' - * @param callback - The same callback function that was added - */ - removeEventListener( - eventName: 'started' | 'completed', - callback: ( - eventName: 'started' | 'completed', - agent: Agent, - context: AgentContext - ) => Promise | void - ): void; - - /** - * Remove event listener for 'errored' event. - * - * @param eventName - 'errored' - * @param callback - The same callback function that was added - */ - removeEventListener( - eventName: 'errored', - callback: ( - eventName: 'errored', - agent: Agent, - context: AgentContext, - error: Error - ) => Promise | void - ): void; -} - -// Will be populated at runtime with strongly typed agents -const agents = new Map>(); - -// WeakMap to store event listeners for each agent instance (truly private) -const agentEventListeners = new WeakMap< - Agent, - Map>> ->(); - -// Map to store agent configs returned from setup (keyed by agent name) -const agentConfigs = new Map(); - -/** - * Get the global runtime state (for production use). - * In tests, use TestAgentContext which has isolated runtime state. - */ -export function getGlobalRuntimeState(): AgentRuntimeState { - return { - agents, - agentConfigs, - agentEventListeners, - }; -} - -/** - * Get the runtime state from an AgentContext. - * @internal - */ -export function getAgentRuntime(ctx: AgentContext): AgentRuntimeState { - return ctx[AGENT_RUNTIME]; -} - -// Helper to fire event listeners sequentially, abort on first error -async function fireAgentEvent( - runtime: AgentRuntimeState, - agent: Agent, - eventName: 'started' | 'completed', - context: AgentContext -): Promise; -async function fireAgentEvent( - runtime: AgentRuntimeState, - agent: Agent, - eventName: 'errored', - context: AgentContext, - data: Error -): Promise; -async function fireAgentEvent( - runtime: AgentRuntimeState, - agent: Agent, - eventName: AgentEventName, - context: AgentContext, - data?: Error -): Promise { - // Fire agent-level listeners - const listeners = runtime.agentEventListeners.get(agent); - if (listeners) { - const callbacks = listeners.get(eventName); - if (callbacks && callbacks.size > 0) { - for (const callback of callbacks) { - try { - if (eventName === 'errored' && data) { - await (callback as any)(eventName, agent, context, data); - } else if (eventName === 'started' || eventName === 'completed') { - await (callback as any)(eventName, agent, context); - } - } catch (error) { - // Log but don't re-throw - event listener errors should not crash the server - internal.error(`Error in agent event listener for '${eventName}':`, error); - } - } - } - } - - // Fire global app-level events - if (eventName === 'errored' && data) { - await fireEvent('agent.errored', agent, context, data); - } else if (eventName === 'started') { - await fireEvent('agent.started', agent, context); - } else if (eventName === 'completed') { - await fireEvent('agent.completed', agent, context); - } -} - -/** - * Union type of all registered agent names. - * Falls back to `string` when no agents are registered (before augmentation). - * After augmentation, this becomes a strict union of agent names for full type safety. - */ -export type AgentName = keyof AgentRegistry extends never ? string : keyof AgentRegistry; - -/** - * Agent registry interface. - * This interface is augmented by generated code to provide strongly-typed agent access. - */ -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -export interface AgentRegistry {} - -export const registerAgent = (name: AgentName, agent: Agent): void => { - agents.set(name, agent); -}; - -export const setAgentConfig = (name: AgentName, config: unknown): void => { - agentConfigs.set(name, config); -}; - -export const getAgentConfig = (name: AgentName): unknown => { - return agentConfigs.get(name); -}; - -const ValidationError = StructuredError('ValidationError')<{ - issues: readonly StandardSchemaV1.Issue[]; -}>(); - -/** - * Configuration object for creating an agent with explicit type parameters. - * - * @template TInput - Input schema type (StandardSchemaV1 or undefined) - * @template TOutput - Output schema type (StandardSchemaV1 or undefined) - * @template TStream - Whether agent returns a stream (true/false) - * @template TConfig - Type returned by setup function - * @template TAppState - Custom app state type from createApp - */ -export interface CreateAgentConfigExplicit< - TInput extends StandardSchemaV1 | undefined = undefined, - TOutput extends StandardSchemaV1 | undefined = undefined, - TStream extends boolean = false, - TConfig = unknown, - TAppState = AppState, -> { - /** - * Optional schema validation. - * - * @example - * ```typescript - * schema: { - * input: z.object({ name: z.string() }), - * output: z.string(), - * stream: false, - * } - * ``` - */ - schema?: { - /** Input validation schema */ - input?: TInput; - /** Output validation schema */ - output?: TOutput; - /** Whether the agent returns a ReadableStream */ - stream?: TStream; - }; - - /** - * Optional description of what this agent does. - * - * @example - * ```typescript - * description: 'Does something useful' - * ``` - */ - description?: string; - - /** - * Optional metadata object (typically injected by build plugin during compilation). - * Contains agent identification and versioning information. - * - * @internal - Usually populated by build tooling, not manually set - */ - metadata?: Partial; - - /** - * Optional setup function receiving app state, returns agent config. - * The returned value is available in the handler via `ctx.config`. - * - * @param app - Application state from createApp - * @returns Agent-specific configuration - * - * @example - * ```typescript - * setup: async (app) => ({ cache: new Map() }) - * ``` - */ - setup?: (app: TAppState) => Promise | TConfig; - - /** - * Optional cleanup function called on app shutdown. - * - * @param app - Application state from createApp - * @param config - Agent config returned from setup - * - * @example - * ```typescript - * shutdown: async (app, config) => { - * config.cache.clear(); - * } - * ``` - */ - shutdown?: (app: TAppState, config: TConfig) => Promise | void; - - /** - * Agent handler function. - * Type is automatically inferred based on schema definitions. - * - * @param ctx - Agent context - * @param input - Validated input (only present if schema.input is defined) - * @returns Output or ReadableStream based on schema - * - * @example - * ```typescript - * handler: async (ctx, input) => { - * return `Hello, ${input.name}!`; - * } - * ``` - */ - handler: TInput extends StandardSchemaV1 - ? TStream extends true - ? TOutput extends StandardSchemaV1 - ? ( - c: AgentContext, - input: InferOutput - ) => - | Promise>> - | ReadableStream> - : ( - c: AgentContext, - input: InferOutput - ) => Promise> | ReadableStream - : TOutput extends StandardSchemaV1 - ? ( - c: AgentContext, - input: InferOutput - ) => Promise> | InferOutput - : ( - c: AgentContext, - input: InferOutput - ) => Promise | void - : TStream extends true - ? TOutput extends StandardSchemaV1 - ? ( - c: AgentContext - ) => - | Promise>> - | ReadableStream> - : ( - c: AgentContext - ) => Promise> | ReadableStream - : TOutput extends StandardSchemaV1 - ? ( - c: AgentContext - ) => Promise> | InferOutput - : (c: AgentContext) => Promise | void; -} - -/** - * Creates an agent with schema validation and lifecycle hooks. - * - * This is the recommended way to create agents with automatic type inference from schemas. - * - * @template TSchema - Schema definition object containing optional input, output, and stream properties - * @template TConfig - Function type that returns agent-specific configuration from setup - * - * @param name - Unique agent name (must be unique within the project) - * @param config - Agent configuration object - * - * @returns AgentRunner with a run method for executing the agent - * - * @example - * ```typescript - * const agent = createAgent('greeting-agent', { - * description: 'Returns personalized greetings', - * schema: { - * input: z.object({ name: z.string(), age: z.number() }), - * output: z.string() - * }, - * handler: async (ctx, { name, age }) => { - * ctx.logger.info(`Processing greeting for ${name}`); - * return `Hello, ${name}! You are ${age} years old.`; - * } - * }); - * - * // Call the agent directly - * const result = await agent.run({ name: 'Alice', age: 30 }); - * ``` - */ -export function createAgent< - TSchema extends - | { - input?: StandardSchemaV1; - output?: StandardSchemaV1; - stream?: boolean; - } - | undefined = undefined, - TConfig extends (app: AppState) => any = any, ->( - name: string, - config: CreateAgentConfig -): AgentRunner, SchemaOutput, SchemaStream>; - -/** - * Creates an agent with explicit generic type parameters. - * - * Use this overload when you need explicit control over types or working with custom app state. - * - * @template TInput - Input schema type (StandardSchemaV1 or undefined) - * @template TOutput - Output schema type (StandardSchemaV1 or undefined) - * @template TStream - Whether agent returns a stream (true/false) - * @template TConfig - Type returned by setup function - * @template TAppState - Custom app state type from createApp - * - * @param name - Unique agent name (must be unique within the project) - * @param config - Agent configuration object - * - * @returns AgentRunner with explicit types and a run method - * - * @example - * ```typescript - * interface MyAppState { db: Database } - * interface MyConfig { cache: Map } - * - * const agent = createAgent< - * z.ZodObject, // TInput - * z.ZodString, // TOutput - * false // TStream - * >('custom-agent', { - * setup: async (app) => ({ cache: new Map() }), - * handler: async (ctx, input) => { - * const db = ctx.app.db; - * const cache = ctx.config.cache; - * return 'result'; - * } - * }); - * ``` - */ -export function createAgent< - TInput extends StandardSchemaV1 | undefined = undefined, - TOutput extends StandardSchemaV1 | undefined = undefined, - TStream extends boolean = false, - TConfig = unknown, - TAppState = AppState, ->( - name: string, - config: CreateAgentConfigExplicit -): AgentRunner; - -// Implementation -export function createAgent< - TInput extends StandardSchemaV1 | undefined = undefined, - TOutput extends StandardSchemaV1 | undefined = undefined, - TStream extends boolean = false, - TConfig = unknown, - TAppState = AppState, ->( - name: string, - config: CreateAgentConfigExplicit -): AgentRunner { - const inputSchema = config.schema?.input; - const outputSchema = config.schema?.output; - - // Initialize evals array before handler so it can be captured in closure - // Evals should only be added via agent.createEval() after agent creation - const evalsArray: Eval[] = []; - - const handler = async (input?: any) => { - let validatedInput: any = undefined; - - if (inputSchema) { - const inputResult = await inputSchema['~standard'].validate(input); - if (inputResult.issues) { - throw new ValidationError({ - issues: inputResult.issues, - message: `Input validation failed: ${inputResult.issues.map((i: any) => i.message).join(', ')}`, - }); - } - validatedInput = inputResult.value; - } - - const agentCtx = getAgentContext() as AgentContext; - - // Store current agent for telemetry (using Symbol to keep it internal) - (agentCtx as any)[CURRENT_AGENT] = agent; - - // Expose current agent metadata on the context - agentCtx.current = agent.metadata; - - // Update ctx.config with this agent's setup() return value. - // This ensures correct config when: - // - Agent is called via user router (createAgentMiddleware('')) - // - Agent A calls Agent B (agentB.run() inside handler) - // - Agent is called via runInAgentContext() in tests - const agentConfig = getAgentConfig(agent.metadata.name as AgentName); - if (agentConfig !== undefined) { - agentCtx.config = agentConfig as TConfig; - } - - const attrs = { - '@agentuity/agentId': agent.metadata.agentId, // stable ID (agent_*) - consistent across deployments - '@agentuity/agentInstanceId': agent.metadata.id, // deployment-specific ID (agentid_*) - changes per deployment - '@agentuity/agentDescription': agent.metadata.description, - '@agentuity/agentName': agent.metadata.name, - '@agentuity/threadId': agentCtx.thread.id, - }; - - // Set agent attributes on the current active span - const activeSpan = trace.getActiveSpan(); - if (activeSpan) { - activeSpan.setAttributes(attrs); - } - - if (inHTTPContext()) { - const honoCtx = privateContext(getHTTPContext()); - if (honoCtx.var.agentIds) { - if (agent.metadata.id) honoCtx.var.agentIds.add(agent.metadata.id); - if (agent.metadata.agentId) honoCtx.var.agentIds.add(agent.metadata.agentId); - } - } else { - // For standalone contexts, check for AGENT_IDS symbol - const agentIds = (agentCtx as any)[AGENT_IDS] as Set | undefined; - if (agentIds) { - if (agent.metadata.id) agentIds.add(agent.metadata.id); - if (agent.metadata.agentId) agentIds.add(agent.metadata.agentId); - } - } - - agentCtx.logger = agentCtx.logger.child(attrs); - - // Get the agent instance from the runtime state to fire events - const runtime = getAgentRuntime(agentCtx); - - // Fire 'started' event - await fireAgentEvent(runtime, agent as Agent, 'started', agentCtx); - - try { - // Execute the handler directly - span creation is handled by the caller (AgentRunner.run) - // This avoids duplicate spans when agents call other agents - const result = await (async () => { - if (agent.metadata.id && !inHTTPContext()) { - // For standalone contexts, wrap with agent context to set aid in trace state - return runWithAgentContext(agent.metadata.id, () => - inputSchema - ? (config.handler as any)(agentCtx, validatedInput) - : (config.handler as any)(agentCtx) - ); - } else { - // HTTP context or no agent ID - invoke handler directly - // Span is created by AgentRunner.run or createAgentRunner - return inputSchema - ? (config.handler as any)(agentCtx, validatedInput) - : (config.handler as any)(agentCtx); - } - })(); - - let validatedOutput: any = result; - // Skip output validation for streaming agents (they return ReadableStream) - if (outputSchema && !config.schema?.stream) { - const outputResult = await outputSchema['~standard'].validate(result); - if (outputResult.issues) { - throw new ValidationError({ - issues: outputResult.issues, - message: `Output validation failed: ${outputResult.issues.map((i: any) => i.message).join(', ')}`, - }); - } - validatedOutput = outputResult.value; - } - - // Store validated input/output in context state for event listeners - agentCtx.state.set('_evalInput', validatedInput); - agentCtx.state.set('_evalOutput', validatedOutput); - - // Fire 'completed' event - evals will run via event listener - await fireAgentEvent(runtime, agent as Agent, 'completed', agentCtx); - - return validatedOutput; - } catch (error) { - // Fire 'errored' event - await fireAgentEvent(runtime, agent as Agent, 'errored', agentCtx, error as Error); - throw error; - } - }; - - // Infer input/output types from agent schema - type AgentInput = TInput extends StandardSchemaV1 ? InferOutput : undefined; - type AgentOutput = TOutput extends StandardSchemaV1 ? InferOutput : undefined; - - // Create createEval method that infers types from agent and automatically adds to agent - const createEval: CreateEvalMethod = (( - evalNameOrConfig: string | PresetEvalConfig, - evalConfig?: { - description?: string; - handler: EvalFunction; - metadata?: { - id?: string; - identifier?: string; - version?: string; - filename?: string; - }; - } - ): Eval => { - // Handle preset eval config (single argument with name property) - if (typeof evalNameOrConfig !== 'string' && 'name' in evalNameOrConfig) { - const presetConfig = evalNameOrConfig as PresetEvalConfig; - const evalName = presetConfig.name; - - internal.debug( - `createEval called for agent "${name || 'unknown'}": registering preset eval "${evalName}"` - ); - - const evalType: any = { - metadata: { - identifier: evalName, - name: evalName, - description: presetConfig.description || '', - }, - handler: presetConfig.handler, - }; - - if (inputSchema) { - evalType.inputSchema = inputSchema; - } - - if (outputSchema) { - evalType.outputSchema = outputSchema; - } - - evalsArray.push(evalType); - internal.debug( - `Added preset eval "${evalName}" to agent "${name || 'unknown'}". Total evals: ${evalsArray.length}` - ); - - return evalType as Eval; - } - - // Handle custom eval config (name + config) - if (typeof evalNameOrConfig !== 'string' || !evalConfig) { - throw new Error( - 'Invalid arguments: expected (name: string, config) or (config: PresetEvalConfig)' - ); - } - - const evalName = evalNameOrConfig; - - // Trace log to verify evals file is imported - internal.debug( - `createEval called for agent "${name || 'unknown'}": registering eval "${evalName}"` - ); - - // Use build-time injected metadata if available (same pattern as agents) - const evalMetadata = evalConfig.metadata || {}; - - // Build eval metadata - merge injected metadata with defaults - const evalType: any = { - metadata: { - // Use build-time injected metadata if available, otherwise fallback to empty/undefined - id: evalMetadata.id || undefined, - identifier: evalMetadata.identifier || undefined, - version: evalMetadata.version || undefined, - filename: evalMetadata.filename || '', - name: evalName, - description: evalConfig.description || '', - }, - handler: evalConfig.handler, - }; - - if (inputSchema) { - evalType.inputSchema = inputSchema; - } - - if (outputSchema) { - evalType.outputSchema = outputSchema; - } - - // Automatically add eval to agent's evals array - evalsArray.push(evalType); - internal.debug( - `Added eval "${evalName}" to agent "${name || 'unknown'}". Total evals: ${evalsArray.length}` - ); - - return evalType as Eval; - }) as CreateEvalMethod; - - // Build metadata - merge user-provided metadata with defaults - // The build plugin injects metadata via config.metadata during AST transformation - let metadata: Partial = { - // Defaults (used when running without build, e.g., dev mode) - name, - description: config.description, - id: '', - agentId: '', - filename: '', - version: '', - inputSchemaCode: '', - outputSchemaCode: '', - // Merge in build-time injected metadata (overrides defaults) - ...config.metadata, - }; - - // If id/agentId are empty, try to load from agentuity.metadata.json - if (!metadata.id || !metadata.agentId) { - const fileMetadata = getAgentMetadataByName(name); - if (fileMetadata) { - internal.info( - '[agent] loaded metadata for "%s" from file: id=%s, agentId=%s', - name, - fileMetadata.id, - fileMetadata.agentId - ); - metadata = { - ...metadata, - id: fileMetadata.id || metadata.id, - agentId: fileMetadata.agentId || metadata.agentId, - filename: fileMetadata.filename || metadata.filename, - version: fileMetadata.version || metadata.version, - }; - } - } - - // Error if agent has no metadata IDs in production - this causes agent_ids to be empty in sessions - // which affects analytics, billing attribution, and session filtering - // Only enforce in production (when AGENTUITY_CLOUD_PROJECT_ID is set) to allow dev/test without metadata - if (!metadata.id && !metadata.agentId && runtimeConfig.getProjectId()) { - throw new Error( - `Agent "${name}" has no metadata IDs (id and agentId are empty). ` + - `This will result in empty agent_ids in session events. ` + - `Ensure agentuity.metadata.json exists in the runtime directory ` + - `(checked: ${process.cwd()}/agentuity.metadata.json and ${process.cwd()}/.agentuity/agentuity.metadata.json). ` + - `Run 'agentuity build' to generate the metadata file.` - ); - } - - const agent: any = { - handler, - metadata, - evals: evalsArray, - createEval, - setup: config.setup, - shutdown: config.shutdown, - }; - - // Add event listener methods - agent.addEventListener = (eventName: AgentEventName, callback: any): void => { - const agentForListeners = agent as any as Agent; - const callbackForListeners = callback as any as AgentEventCallback; - let listeners = agentEventListeners.get(agentForListeners); - if (!listeners) { - listeners = new Map(); - agentEventListeners.set(agentForListeners, listeners); - } - let callbacks = listeners.get(eventName); - if (!callbacks) { - callbacks = new Set(); - listeners.set(eventName, callbacks); - } - callbacks.add(callbackForListeners); - }; - - // Automatically add event listener for 'completed' event to run evals - (agent as Agent).addEventListener('completed', async (_event, _agent, ctx) => { - // Use the agent instance passed to event listener to access its evals array - // This ensures we get evals that were added via agent.createEval() after agent creation - const agentEvals = _agent?.evals || evalsArray; - - internal.debug( - `Checking evals: agent=${_agent.metadata?.name}, evalsArray.length=${evalsArray?.length || 0}, agent.evals.length=${_agent?.evals?.length || 0}` - ); - - if (agentEvals && agentEvals.length > 0) { - internal.info(`Executing ${agentEvals.length} evaluations after agent run`); - - // Get validated input/output from context state - const validatedInput = ctx.state.get('_evalInput'); - const validatedOutput = ctx.state.get('_evalOutput'); - - // Capture agentRunSpanId synchronously before waitUntil (which may run outside AsyncLocalStorage) - let agentRunSpanId: string | undefined; - try { - const httpCtx = getHTTPContext(); - const _httpCtx = privateContext(httpCtx); - agentRunSpanId = _httpCtx.var.agentRunSpanId; - } catch { - // HTTP context may not be available, spanId will be undefined - } - - // Capture the agent span context so eval spans are parented to the agent - const agentSpanContext = context.active(); - - // Execute each eval using waitUntil to avoid blocking the response - for (const evalItem of agentEvals) { - const evalName = evalItem.metadata.name || 'unnamed'; - const agentName = _agent?.metadata?.name || name; - const evalRunId = generateId('evalrun'); - - // Look up eval metadata synchronously before async execution - const evalMeta = getEvalMetadata(agentName, evalName); - const evalId = evalMeta?.id || ''; - const evalIdentifier = evalMeta?.identifier || ''; - - // Create eval span FIRST, parented to agent, then call waitUntil inside it - // This makes waitUntil a child of the eval span - const tracer = ctx.tracer; - if (tracer) { - const evalSpan = tracer.startSpan(evalName, {}, agentSpanContext); - evalSpan.setAttributes({ - '@agentuity/evalId': evalId, - '@agentuity/evalIdentifier': evalIdentifier, - '@agentuity/evalName': evalName, - '@agentuity/evalRunId': evalRunId, - '@agentuity/agentName': agentName, - '@agentuity/evalDescription': - evalMeta?.description || evalItem.metadata.description || '', - '@agentuity/evalFilename': evalMeta?.filename || evalItem.metadata.filename || '', - }); - - const evalSpanContext = trace.setSpan(agentSpanContext, evalSpan); - - // Run waitUntil INSIDE the eval span context - this makes waitUntil a child of eval - // Pass a function (not an already-executing promise) so waitUntil executes it - // AFTER setting up its span context, making operations children of waitUntil - context.with(evalSpanContext, () => { - ctx.waitUntil(async () => { - const orgId = runtimeConfig.getOrganizationId(); - const projectId = runtimeConfig.getProjectId(); - const devMode = runtimeConfig.isDevMode() ?? false; - const evalRunEventProvider = getEvalRunEventProvider(); - - const shouldSendEvalRunEvents = - orgId && projectId && evalId !== '' && evalIdentifier !== ''; - - try { - internal.info(`[EVALRUN] Starting eval run tracking for '${evalName}'`); - - // Send eval run start event - if (shouldSendEvalRunEvents && evalRunEventProvider) { - try { - const deploymentId = runtimeConfig.getDeploymentId(); - await evalRunEventProvider.start({ - id: evalRunId, - sessionId: ctx.sessionId, - evalId, - evalIdentifier, - orgId: orgId!, - projectId: projectId!, - devmode: Boolean(devMode), - deploymentId: deploymentId || undefined, - spanId: agentRunSpanId, - }); - } catch (error) { - internal.error( - `[EVALRUN] Error sending start event for '${evalName}'`, - { error } - ); - } - } - - // Validate eval input/output if schemas exist - let evalValidatedInput: any = validatedInput; - let evalValidatedOutput: any = validatedOutput; - - if (evalItem.inputSchema) { - const result = - await evalItem.inputSchema['~standard'].validate(validatedInput); - if (result.issues) { - throw new ValidationError({ - issues: result.issues, - message: `Eval input validation failed`, - }); - } - evalValidatedInput = result.value; - } - - if (evalItem.outputSchema) { - const result = - await evalItem.outputSchema['~standard'].validate(validatedOutput); - if (result.issues) { - throw new ValidationError({ - issues: result.issues, - message: `Eval output validation failed`, - }); - } - evalValidatedOutput = result.value; - } - - // Execute the eval handler - let handlerResult: EvalHandlerResult; - if (inputSchema && outputSchema) { - handlerResult = await (evalItem.handler as any)( - ctx, - evalValidatedInput, - evalValidatedOutput - ); - } else if (inputSchema) { - handlerResult = await (evalItem.handler as any)(ctx, evalValidatedInput); - } else if (outputSchema) { - handlerResult = await (evalItem.handler as any)( - ctx, - evalValidatedOutput - ); - } else { - handlerResult = await (evalItem.handler as any)(ctx); - } - - const result: EvalRunResult = { success: true, ...handlerResult }; - - // Send eval run complete event - if (shouldSendEvalRunEvents && evalRunEventProvider) { - try { - await evalRunEventProvider.complete({ id: evalRunId, result }); - } catch (error) { - internal.error( - `[EVALRUN] Error sending complete event for '${evalName}'`, - { error } - ); - } - } - - internal.debug(`Eval '${evalName}' completed successfully`); - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - evalSpan.recordException(error as Error); - evalSpan.setStatus({ - code: SpanStatusCode.ERROR, - message: errorMessage, - }); - internal.error(`Error executing eval '${evalName}'`, { error }); - - // Send error event - if (shouldSendEvalRunEvents && evalRunEventProvider) { - try { - await evalRunEventProvider.complete({ - id: evalRunId, - error: errorMessage, - result: { - success: false, - passed: false, - error: errorMessage, - metadata: {}, - }, - }); - } catch (e) { - internal.debug('Failed to send eval run complete event', { - evalRunId, - errorMessage, - error: e instanceof Error ? e.message : String(e), - }); - } - } - } finally { - evalSpan.end(); - } - }); - }); - } else { - // No tracer - execute without span - ctx.waitUntil(async () => { - const orgId = runtimeConfig.getOrganizationId(); - const projectId = runtimeConfig.getProjectId(); - const devMode = runtimeConfig.isDevMode() ?? false; - const evalRunEventProvider = getEvalRunEventProvider(); - const shouldSendEvalRunEvents = - orgId && projectId && evalId !== '' && evalIdentifier !== ''; - - try { - if (shouldSendEvalRunEvents && evalRunEventProvider) { - try { - await evalRunEventProvider.start({ - id: evalRunId, - sessionId: ctx.sessionId, - evalId, - evalIdentifier, - orgId: orgId!, - projectId: projectId!, - devmode: Boolean(devMode), - deploymentId: runtimeConfig.getDeploymentId() || undefined, - spanId: agentRunSpanId, - }); - } catch (e) { - internal.debug('Failed to send eval run start event', { - evalRunId, - evalId, - evalIdentifier, - sessionId: ctx.sessionId, - error: e instanceof Error ? e.message : String(e), - }); - } - } - - let evalValidatedInput: any = validatedInput; - let evalValidatedOutput: any = validatedOutput; - - if (evalItem.inputSchema) { - const result = - await evalItem.inputSchema['~standard'].validate(validatedInput); - if (result.issues) { - throw new ValidationError({ - issues: result.issues, - message: `Eval input validation failed`, - }); - } - evalValidatedInput = result.value; - } - if (evalItem.outputSchema) { - const result = - await evalItem.outputSchema['~standard'].validate(validatedOutput); - if (result.issues) { - throw new ValidationError({ - issues: result.issues, - message: `Eval output validation failed`, - }); - } - evalValidatedOutput = result.value; - } - - let handlerResult: EvalHandlerResult; - if (inputSchema && outputSchema) { - handlerResult = await (evalItem.handler as any)( - ctx, - evalValidatedInput, - evalValidatedOutput - ); - } else if (inputSchema) { - handlerResult = await (evalItem.handler as any)(ctx, evalValidatedInput); - } else if (outputSchema) { - handlerResult = await (evalItem.handler as any)(ctx, evalValidatedOutput); - } else { - handlerResult = await (evalItem.handler as any)(ctx); - } - - if (shouldSendEvalRunEvents && evalRunEventProvider) { - try { - await evalRunEventProvider.complete({ - id: evalRunId, - result: { success: true, ...handlerResult }, - }); - } catch (e) { - internal.debug('Failed to send eval run complete event', { - evalRunId, - error: e instanceof Error ? e.message : String(e), - }); - } - } - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - internal.error(`Error executing eval '${evalName}'`, { error }); - - // Send error event to match traced branch behavior - if (shouldSendEvalRunEvents && evalRunEventProvider) { - try { - await evalRunEventProvider.complete({ - id: evalRunId, - error: errorMessage, - result: { - success: false, - passed: false, - error: errorMessage, - metadata: {}, - }, - }); - } catch (e) { - internal.debug('Failed to send eval run complete event', { - evalRunId, - errorMessage, - error: e instanceof Error ? e.message : String(e), - }); - } - } - } - }); - } - } - } - }); - - agent.removeEventListener = (eventName: AgentEventName, callback: any): void => { - const agentForListeners = agent as any as Agent; - const callbackForListeners = callback as any as AgentEventCallback; - const listeners = agentEventListeners.get(agentForListeners); - if (!listeners) return; - const callbacks = listeners.get(eventName); - if (!callbacks) return; - callbacks.delete(callbackForListeners); - }; - - if (inputSchema) { - agent.inputSchema = inputSchema; - } - - if (outputSchema) { - agent.outputSchema = outputSchema; - } - - if (config.schema?.stream) { - agent.stream = config.schema.stream; - } - - // Add validator method with overloads - agent.validator = ((override?: any) => { - const effectiveInputSchema = override?.input ?? inputSchema; - // Only use agent's output schema if no override was provided at all. - // If override is provided (even with just input), don't auto-apply agent's output schema - // unless the override explicitly includes output. - const effectiveOutputSchema = override ? override.output : outputSchema; - - // Helper to build the standard Hono input validator so types flow - const buildInputValidator = (schema?: StandardSchemaV1) => - validator('json', async (value, c) => { - if (schema) { - const result = await validateSchema(schema, value); - if (!result.success) { - return c.json( - { - error: 'Validation failed', - message: formatValidationIssues(result.issues), - issues: result.issues, - }, - 400 - ); - } - return result.data; - } - return value; - }); - - // If no output schema, preserve existing behavior: pure input validation - if (!effectiveOutputSchema) { - return buildInputValidator(effectiveInputSchema); - } - - // Output validation middleware (runs after handler) - const outputValidator: MiddlewareHandler = async (c, next) => { - await next(); - - const res = c.res; - if (!res) return; - - // Skip output validation for streaming agents - if (config.schema?.stream) { - return; - } - - // Only validate JSON responses - const contentType = res.headers.get('Content-Type') ?? ''; - if (!contentType.toLowerCase().includes('application/json')) { - return; - } - - // Clone so we don't consume the body that will be sent - let responseBody: unknown; - try { - const cloned = res.clone(); - responseBody = await cloned.json(); - } catch { - const OutputValidationError = StructuredError('OutputValidationError')<{ - issues: any[]; - }>(); - throw new OutputValidationError({ - message: 'Output validation failed: response is not valid JSON', - issues: [], - }); - } - - const result = await validateSchema(effectiveOutputSchema, responseBody); - if (!result.success) { - const OutputValidationError = StructuredError('OutputValidationError')<{ - issues: any[]; - }>(); - throw new OutputValidationError({ - message: `Output validation failed: ${formatValidationIssues(result.issues)}`, - issues: result.issues, - }); - } - - // Replace response with validated/sanitized JSON - c.res = new Response(JSON.stringify(result.data), { - status: res.status, - headers: res.headers, - }); - }; - - // If we have no input schema, we only do output validation - if (!effectiveInputSchema) { - return outputValidator as unknown as Handler; - } - - // Compose: input validator → output validator - const inputMiddleware = buildInputValidator(effectiveInputSchema); - - const composed: MiddlewareHandler = async (c, next) => { - // Run the validator first; its next() runs the output validator, - // whose next() runs the actual handler(s) - const result = await inputMiddleware(c, async () => { - await outputValidator(c, next); - }); - // If inputMiddleware returned early (validation failed), return that response - return result; - }; - - return composed as unknown as Handler; - }) as AgentValidator; - - // Register the agent for runtime use - // @ts-expect-error - metadata might be incomplete until build plugin injects InternalAgentMetadata - agents.set(name, agent as Agent); - - // Create and return AgentRunner - const runner: any = { - metadata: metadata as AgentMetadata, - validator: agent.validator, - inputSchema: inputSchema as TInput, - outputSchema: outputSchema as TOutput, - stream: (config.schema?.stream as TStream) || (false as TStream), - evals: agent.evals, - createEval, - addEventListener: agent.addEventListener, - removeEventListener: agent.removeEventListener, - run: inputSchema - ? async (input: InferSchemaInput>) => { - // Wrap with span if in HTTP context with tracer - if (inHTTPContext()) { - const honoCtx = getHTTPContext(); - const tracer = honoCtx.var.tracer; - if (tracer) { - return runWithSpan( - tracer, - agent as Agent, - honoCtx, - async () => await agent.handler(input) - ); - } - } - return await agent.handler(input); - } - : async () => { - // Wrap with span if in HTTP context with tracer - if (inHTTPContext()) { - const honoCtx = getHTTPContext(); - const tracer = honoCtx.var.tracer; - if (tracer) { - return runWithSpan( - tracer, - agent as Agent, - honoCtx, - async () => await agent.handler() - ); - } - } - return await agent.handler(); - }, - [INTERNAL_AGENT]: agent, // Store reference to internal agent for testing - }; - - return runner as AgentRunner; -} - -/** - * Run a handler with the agent identifier set in trace state. - * Used for non-HTTP contexts (standalone) where we still want to propagate - * the agent ID to downstream API calls. - */ -const runWithAgentContext = async (agentId: string, handler: () => Promise): Promise => { - const currentContext = context.active(); - const activeSpan = trace.getSpan(currentContext); - - if (!activeSpan) { - // No active span, just run the handler - return handler(); - } - - // Enrich the context's traceState with the agent ID so it propagates - // to downstream calls. Note: this does NOT affect the active recording - // span's exported traceState (that was set at span creation). This only - // affects propagation context for outbound requests. - const contextWithAgentId = enrichContextWithTraceState(currentContext, { - aid: agentId, - }); - - return context.with(contextWithAgentId, handler); -}; - -const runWithSpan = async < - T, - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, - TStream extends boolean = false, ->( - tracer: Tracer, - agent: Agent, - ctx: Context, - handler: () => Promise -): Promise => { - const currentContext = context.active(); - - // Build enriched traceState BEFORE span creation so the recording span - // inherits it and it gets exported to OTLP. This ensures the agent ID - // and other metadata appear in ClickHouse TraceState column. - const deploymentId = runtimeConfig.getDeploymentId(); - const projectId = runtimeConfig.getProjectId(); - const orgId = runtimeConfig.getOrganizationId(); - const isDevMode = runtimeConfig.isDevMode(); - - const enrichedContext = enrichContextWithTraceState(currentContext, { - aid: agent.metadata.id, - did: deploymentId, - pid: projectId, - oid: orgId, - d: isDevMode ? '1' : undefined, - }); - - const span = tracer.startSpan('agent.run', {}, enrichedContext); - - // Set agent attributes on the span immediately after creation - span.setAttributes({ - '@agentuity/agentId': agent.metadata.agentId, // stable ID (agent_*) - consistent across deployments - '@agentuity/agentInstanceId': agent.metadata.id, // deployment-specific ID (agentid_*) - changes per deployment - '@agentuity/agentDescription': agent.metadata.description, - '@agentuity/agentName': agent.metadata.name, - '@agentuity/threadId': ctx.var.thread.id, - }); - - const spanId = span.spanContext().spanId; - - // Store span ID in PrivateVariables - const _ctx = privateContext(ctx); - _ctx.set('agentRunSpanId', spanId); - - try { - // Create a new context with the span active. - // The span already carries the enriched traceState (inherited from - // enrichedContext), so downstream API calls via propagation.inject() - // will see aid/pid/oid/did/d. - const spanContext = trace.setSpan(currentContext, span); - return await context.with(spanContext, handler); - } catch (error) { - span.recordException(error as Error); - span.setStatus({ code: SpanStatusCode.ERROR }); - throw error; - } finally { - span.end(); - } -}; - -const createAgentRunner = < - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, - TStream extends boolean = false, ->( - agent: Agent, - ctx: Context -): AgentRunner => { - const tracer = ctx.var.tracer; - - if (agent.inputSchema) { - return { - metadata: agent.metadata, - run: async (input: InferSchemaInput>) => { - return runWithSpan( - tracer, - agent, - ctx, - async () => await agent.handler(input) - ); - }, - } as AgentRunner; - } else { - return { - metadata: agent.metadata, - run: async () => { - return runWithSpan( - tracer, - agent, - ctx, - async () => await agent.handler() - ); - }, - } as AgentRunner; - } -}; - -/** - * Populate the agents object with all registered agents - * Keys are converted to camelCase to match the generated TypeScript types - */ -export const populateAgentsRegistry = (ctx: Context): any => { - const agentsObj: any = {}; - // Track ownership of camelCase keys to detect collisions between different raw names - const ownershipMap = new Map(); - - // Build flat registry of agents - for (const [name, agentFn] of agents) { - const runner = createAgentRunner(agentFn, ctx); - const key = toCamelCase(name); - - // Validate key is non-empty - if (!key) { - internal.warn(`Agent name "${name}" converts to empty camelCase key. Skipping.`); - continue; - } - - // Detect collision on key - check ownership - const existingOwner = ownershipMap.get(key); - if (existingOwner && existingOwner !== name) { - internal.error( - `Agent registry collision: "${name}" conflicts with "${existingOwner}" (both map to camelCase key "${key}")` - ); - throw new Error(`Agent registry collision detected for key "${key}"`); - } - - agentsObj[key] = runner; - // Record ownership - ownershipMap.set(key, name); - } - - return agentsObj; -}; - -export const createAgentMiddleware = (agentName: AgentName | ''): MiddlewareHandler => { - return async (ctx, next) => { - // Populate agents object with strongly-typed keys - const agentsObj = populateAgentsRegistry(ctx); - - // Track agent ID for session telemetry - if (agentName) { - const agentKey = toCamelCase(agentName); - const agent = agentsObj[agentKey]; - const _ctx = privateContext(ctx); - // we add both so that you can query by either - if (agent?.metadata?.id) { - _ctx.var.agentIds.add(agent.metadata.id); - } - if (agent?.metadata?.agentId) { - _ctx.var.agentIds.add(agent.metadata.agentId); - } - } - - const sessionId = ctx.var.sessionId; - const thread = ctx.var.thread; - const session = ctx.var.session; - const config = agentName ? getAgentConfig(agentName as AgentName) : undefined; - const app = ctx.var.app; - - const args: RequestAgentContextArgs = { - agent: agentsObj, - logger: ctx.var.logger, - tracer: ctx.var.tracer, - sessionId, - session, - thread, - handler: ctx.var.waitUntilHandler, - config: config || {}, - app: app || {}, - runtime: getGlobalRuntimeState(), - auth: ctx.var.auth ?? null, - }; - - return setupRequestAgentContext(ctx as unknown as Record, args, next); - }; -}; - -export const getAgents = () => agents; - -export const runAgentSetups = async (appState: AppState): Promise => { - for (const [name, agent] of agents.entries()) { - if (agent.setup) { - const config = await agent.setup(appState); - setAgentConfig(name as AgentName, config); - } - } - // Note: Server readiness is managed by Vite (dev) or Bun.serve (prod) -}; - -export const runAgentShutdowns = async (appState: AppState): Promise => { - const runtime = getGlobalRuntimeState(); - for (const [name, agent] of runtime.agents.entries()) { - if (agent.shutdown) { - const config = runtime.agentConfigs.get(name) as any; - await agent.shutdown(appState, config); - } - } -}; - -/** - * Run an agent within a specific AgentContext. - * Sets up AsyncLocalStorage with the provided context and executes the agent. - * - * This is the recommended way to test agents in unit tests. It automatically: - * - Registers the agent in the runtime state so event listeners fire - * - Sets up AsyncLocalStorage so getAgentContext() works inside the agent - * - Handles both agents with input and agents without input - * - * **Use cases:** - * - Unit testing agents with TestAgentContext - * - Running agents outside HTTP request flow - * - Custom agent execution environments - * - Testing event listeners and evaluations - * - * @template TInput - Type of the input parameter - * @template TOutput - Type of the return value - * - * @param ctx - The AgentContext to use (typically TestAgentContext in tests) - * @param agent - The AgentRunner to execute (returned from createAgent) - * @param input - Input data (required if agent has input schema, omit otherwise) - * - * @returns Promise resolving to the agent's output - * - * @example - * ```typescript - * import { runInAgentContext, TestAgentContext } from '@agentuity/runtime/test'; - * - * test('greeting agent', async () => { - * const ctx = new TestAgentContext(); - * const result = await runInAgentContext(ctx, greetingAgent, { - * name: 'Alice', - * age: 30 - * }); - * expect(result).toBe('Hello, Alice! You are 30 years old.'); - * }); - * - * test('no-input agent', async () => { - * const ctx = new TestAgentContext(); - * const result = await runInAgentContext(ctx, statusAgent); - * expect(result).toEqual({ status: 'ok' }); - * }); - * ``` - */ -export async function runInAgentContext( - ctx: AgentContext, - agent: AgentRunner, - input?: TInput -): Promise { - const storage = getAgentAsyncLocalStorage(); - - // Register agent in runtime state so events fire (lookup by metadata.name) - const agentName = agent.metadata.name; - const runtime = getAgentRuntime(ctx); - - // Get internal agent from runner (stored via symbol) or global registry - const internalAgent = (agent as any)[INTERNAL_AGENT] || agents.get(agentName); - - if (internalAgent && agentName) { - runtime.agents.set(agentName, internalAgent); - - // Copy event listeners from global to context runtime - const globalListeners = agentEventListeners.get(internalAgent); - if (globalListeners) { - runtime.agentEventListeners.set(internalAgent, globalListeners); - } - } - - return storage.run(ctx, async () => { - if (input !== undefined) { - return await (agent.run as any)(input); - } else { - return await (agent.run as any)(); - } - }); -} diff --git a/packages/runtime/src/app.ts b/packages/runtime/src/app.ts deleted file mode 100644 index 6a9ea2f39..000000000 --- a/packages/runtime/src/app.ts +++ /dev/null @@ -1,769 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { type Env as HonoEnv } from 'hono'; -import type { cors } from 'hono/cors'; -import type { compress } from 'hono/compress'; -import type { Logger } from './logger'; -import type { Meter, Tracer } from '@opentelemetry/api'; -import type { - KeyValueStorage, - SessionEventProvider, - EvalRunEventProvider, - StreamStorage, - VectorStorage, - SandboxService, - QueueService, - EmailService, - ScheduleService, - TaskStorage, - SessionStartEvent, -} from '@agentuity/core'; - -import type { ThreadProvider, SessionProvider, Session, Thread } from './session'; -import type WaitUntilHandler from './_waituntil'; -import type { Context } from 'hono'; - -type HonoCorsOptions = NonNullable[0]>; -type HonoCompressOptions = Parameters[0]; - -/** - * Agentuity-specific CORS options for same-origin restriction. - */ -export interface AgentuityCorsSameOriginOptions { - /** - * Enable same-origin restriction for CORS. - * - * When true, only allows origins from: - * - AGENTUITY_BASE_URL environment variable - * - AGENTUITY_CLOUD_DOMAINS environment variable (comma-separated) - * - AUTH_TRUSTED_DOMAINS environment variable (comma-separated) - * - The same-origin of the incoming request URL - * - Any additional origins specified in `allowedOrigins` - * - * When false or omitted, the default behavior is to reflect any origin - * (backwards compatible). - * - * @default false - */ - sameOrigin?: boolean; - - /** - * Additional origins to allow when `sameOrigin` is true. - * Can be full URLs (https://example.com) or bare domains (example.com). - * - * These are merged with the origins derived from environment variables. - */ - allowedOrigins?: string[]; -} - -/** - * Extended CORS configuration options. - * - * Combines Hono's CORS options with Agentuity-specific settings for - * easy same-origin restriction. - * - * @example - * ```typescript - * // Simple opt-in to trusted origins only - * const app = await createApp({ - * cors: { sameOrigin: true } - * }); - * - * // With additional allowed origins - * const app = await createApp({ - * cors: { - * sameOrigin: true, - * allowedOrigins: ['https://admin.myapp.com'], - * } - * }); - * ``` - */ -export type CorsConfig = HonoCorsOptions & AgentuityCorsSameOriginOptions; - -/** - * Configuration options for response compression middleware. - * - * @example - * ```typescript - * const app = await createApp({ - * compression: { - * enabled: true, - * threshold: 1024, - * } - * }); - * ``` - */ -export interface CompressionConfig { - /** - * Enable or disable compression globally. - * @default true - */ - enabled?: boolean; - - /** - * Minimum response body size in bytes before compression is attempted. - * Responses smaller than this threshold will not be compressed. - * @default 1024 - */ - threshold?: number; - - /** - * Optional filter function to skip compression for specific requests. - * Return false to skip compression for the request. - * - * @example - * ```typescript - * filter: (c) => !c.req.path.startsWith('/internal') - * ``` - */ - filter?: (c: Context) => boolean; - - /** - * Raw options passed through to Hono's compress middleware. - * These are merged with Agentuity's defaults. - */ - honoOptions?: HonoCompressOptions; -} - -/** - * Web analytics configuration options. - */ -export interface AnalyticsOptions { - /** Enable/disable analytics @default true */ - enabled?: boolean; - /** Require explicit user consent before tracking @default false */ - requireConsent?: boolean; - /** Track click events on elements with data-analytics attribute @default true */ - trackClicks?: boolean; - /** Track scroll depth @default true */ - trackScroll?: boolean; - /** Track outbound link clicks @default true */ - trackOutboundLinks?: boolean; - /** Track form submissions @default false */ - trackForms?: boolean; - /** Track Core Web Vitals (LCP, FID, CLS) @default true */ - trackWebVitals?: boolean; - /** Track JavaScript errors @default true */ - trackErrors?: boolean; - /** Track SPA navigation changes @default true */ - trackSPANavigation?: boolean; - /** Sampling rate (0-1) @default 1 */ - sampleRate?: number; - /** URL patterns to exclude from tracking */ - excludePatterns?: string[]; - /** Global properties attached to every event */ - globalProperties?: Record; -} - -/** - * Workbench UI configuration options. - */ -export interface WorkbenchOptions { - /** Route path for the workbench UI @default '/workbench' */ - route?: string; - /** Custom headers to include in workbench responses */ - headers?: Record; -} - -export interface AppConfig { - /** - * Configure CORS (Cross-Origin Resource Sharing) settings. - * - * By default, CORS reflects any origin (backwards compatible). - * Use `sameOrigin: true` to restrict to trusted origins only. - * - * @example - * ```typescript - * // Restrict to trusted origins (recommended for production) - * const app = await createApp({ - * cors: { sameOrigin: true } - * }); - * - * // Add additional allowed origins - * const app = await createApp({ - * cors: { - * sameOrigin: true, - * allowedOrigins: ['https://admin.myapp.com'], - * } - * }); - * ``` - */ - cors?: CorsConfig; - /** - * Configure response compression. - * Set to `false` to disable compression entirely. - * - * @example - * ```typescript - * const app = await createApp({ - * compression: { - * threshold: 2048, - * } - * }); - * - * // Or disable compression: - * const app = await createApp({ compression: false }); - * ``` - */ - compression?: CompressionConfig | false; - /** - * Override the default services - */ - services?: { - /** - * if true (default false), will use local services and override any others - */ - useLocal?: boolean; - /** - * the KeyValueStorage to override instead of the default - */ - keyvalue?: KeyValueStorage; - /** - * the StreamStorage to override instead of the default - */ - stream?: StreamStorage; - /** - * the VectorStorage to override instead of the default - */ - vector?: VectorStorage; - /** - * the TaskStorage to override instead of the default - */ - task?: TaskStorage; - /** - * the ThreadProvider to override instead of the default - */ - thread?: ThreadProvider; - /** - * the SessionProvider to override instead of the default - */ - session?: SessionProvider; - /** - * the SessionEventProvider to override instead of the default - */ - sessionEvent?: SessionEventProvider; - /** - * the EvalRunEventProvider to override instead of the default - */ - evalRunEvent?: EvalRunEventProvider; - /** - * the EmailService to override instead of the default - */ - email?: EmailService; - }; - /** - * Optional request timeout in seconds. If not provided, will default - * to zero which will cause the request to wait indefinitely. - */ - requestTimeout?: number; - - /** - * Configure web analytics for frontend tracking. - * - * Set to `true` to enable with defaults, `false` to disable, or provide - * a configuration object to customize tracking behavior. - * - * @default true - * - * @example - * ```typescript - * // Enable with defaults - * const app = await createApp({ analytics: true }); - * - * // Disable analytics - * const app = await createApp({ analytics: false }); - * - * // Custom configuration - * const app = await createApp({ - * analytics: { - * trackClicks: false, - * sampleRate: 0.5, - * } - * }); - * ``` - */ - analytics?: boolean | AnalyticsOptions; - - /** - * Configure the workbench UI for agent testing. - * - * Set to `true` to enable at `/workbench`, a string to set a custom route, - * or an object for full configuration. Only active in development mode. - * - * @example - * ```typescript - * // Enable at default route (/workbench) - * const app = await createApp({ workbench: true }); - * - * // Custom route - * const app = await createApp({ workbench: '/debug' }); - * - * // Full configuration - * const app = await createApp({ - * workbench: { - * route: '/debug', - * headers: { 'X-Custom': 'value' }, - * } - * }); - * ``` - */ - workbench?: boolean | string | WorkbenchOptions; - - /** - * **Experimental** — Optional user-provided router(s) to use instead of file-based routing. - * - * When provided, the CLI's generated entry file mounts these routers instead - * of auto-discovering individual route files from `src/api/`. All Agentuity - * middleware (CORS, OTel, agent context) is applied to each mount path. - * - * Accepts three forms: - * - A plain `Hono` instance → mounted at `/api` (default) - * - A `{ path, router }` object → mounted at the specified path - * - An array of `{ path, router }` objects → each mounted at its path - * - * Use `createRouter()` to get typed access to Agentuity context variables - * (`c.var.logger`, `c.var.thread`, `c.var.session`, etc.), or use - * `new Hono()` for the same types with a plain Hono instance. - * - * @experimental This API may change in future releases. - * - * @example Single router (mounted at /api) - * ```typescript - * const router = createRouter(); - * router.route('/users', usersRouter); - * export const app = await createApp({ router }); - * ``` - * - * @example Single router at custom path - * ```typescript - * const router = createRouter(); - * router.route('/users', usersRouter); - * export const app = await createApp({ - * router: { path: '/v1', router }, - * }); - * ``` - * - * @example Multiple routers at different paths - * ```typescript - * export const app = await createApp({ - * router: [ - * { path: '/api/v1', router: v1Router }, - * { path: '/api/v2', router: v2Router }, - * ], - * }); - * ``` - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - router?: import('hono').Hono | RouteMount | RouteMount[]; - - /** - * Agents to register with this application. - * - * Each agent is a value returned by `createAgent()`. Importing the agent - * module triggers self-registration; listing them here ensures they are - * included in the build and available for workbench metadata, setup/shutdown - * lifecycle, and agent-to-agent calls via `ctx.invoke()`. - * - * Type safety for agent calls comes from direct imports — use - * `ctx.invoke(() => myAgent.run(input))` for fully typed invocations. - * - * @example - * ```typescript - * import greeting from './agent/greeting/agent'; - * import session from './agent/session/agent'; - * - * export default await createApp({ - * agents: [greeting, session], - * router, - * }); - * ``` - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - agents?: import('./agent').AgentRunner[]; -} - -/** - * A user-provided router with its mount path. - * - * @experimental This API may change in future releases. - */ -export interface RouteMount { - /** - * The base path to mount the router at (e.g. `/api`, `/api/v1`). - * Agentuity middleware (CORS, OTel, agent context) is applied to `{path}/*`. - */ - path: string; - /** - * The Hono router to mount. - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - router: import('hono').Hono; -} - -export interface Variables> { - logger: Logger; - meter: Meter; - tracer: Tracer; - sessionId: string; - thread: Thread; - session: Session; - kv: KeyValueStorage; - stream: StreamStorage; - vector: VectorStorage; - sandbox: SandboxService; - queue: QueueService; - email: EmailService; - schedule: ScheduleService; - task: TaskStorage; - app: TAppState; - // Web analytics context (set by createWebSessionMiddleware, thread-only tracking) - _webThreadId?: string; -} - -export type TriggerType = SessionStartEvent['trigger']; - -export interface PrivateVariables { - waitUntilHandler: WaitUntilHandler; - routeId?: string; - agentIds: Set; - trigger: TriggerType; - agentRunSpanId?: string; -} - -export interface Env> extends HonoEnv { - Variables: Variables; -} - -/** - * Get the global app instance (stub for backwards compatibility) - * Returns null in Vite-native architecture - */ -export function getApp(): null { - return null; -} - -// Re-export event functions from _events -export { fireEvent } from './_events'; - -import type { Hono } from 'hono'; - -// ============================================================================ -// Vite-native createApp implementation -// ============================================================================ - -/** - * Simple server interface for backwards compatibility - */ -export interface Server { - /** - * The server URL (e.g., "http://localhost:3500") - */ - url: string; -} - -export interface AppResult { - /** - * App configuration - */ - config?: AppConfig; - /** - * The Hono router instance - */ - router: import('hono').Hono; - /** - * Server information - */ - server: Server; - /** - * Logger instance - */ - logger: Logger; - /** - * Fetch handler for the application. - * Bun --hot uses this on the default export to hot-swap the running server's - * request handler without restarting the process. - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - fetch: (req: Request, ...args: any[]) => Response | Promise; - /** - * Port the server listens on. - * Used by Bun --hot alongside `fetch` to configure the server. - */ - port: number; - /** - * Hostname the server binds to. - */ - hostname: string; - /** - * WebSocket handler for Bun.serve(). - * Required by Bun --hot to enable WebSocket upgrade support. - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - websocket?: any; -} - -/** - * Create and start an Agentuity application. - * - * This is the single entry point for the entire server lifecycle: - * OTel, middleware, route mounting, services, and Bun.serve(). - * - * @example - * ```typescript - * import { createApp } from '@agentuity/runtime'; - * import router from './src/api/router'; - * import agents from './src/agent'; - * - * export default await createApp({ - * router: { path: '/api', router }, - * agents, - * }); - * ``` - */ -export async function createApp(config?: AppConfig): Promise { - // --- Imports (lazy to avoid circular deps) --- - const { bootstrapRuntimeEnv } = await import('@agentuity/server'); - const { register } = await import('./otel/config'); - const { setGlobalLogger, setGlobalTracer, setGlobalRouter, getSpanProcessors } = await import( - './_server' - ); - const { createServices, getThreadProvider, getSessionProvider } = await import('./_services'); - const { - createBaseMiddleware, - createCorsMiddleware, - createOtelMiddleware, - createCompressionMiddleware, - } = await import('./middleware'); - const { runAgentSetups, createAgentMiddleware } = await import('./agent'); - const { loadBuildMetadata } = await import('./_metadata'); - const { patchBunS3ForStorageDev } = await import('./bun-s3-patch'); - const { createWorkbenchRouter } = await import('./workbench'); - const { - isDevelopment, - resolveAnalyticsConfig, - resolveWorkbenchConfig, - registerHealthRoutes, - registerAnalyticsRoutes, - registerWebRoutes, - registerWorkbenchUI, - startServer, - } = await import('./bootstrap'); - const { websocket } = await import('hono/bun'); - - // --- Step 0: Environment --- - if (isDevelopment()) { - bootstrapRuntimeEnv(); - } - if (isDevelopment() && process.env.AGENTUITY_NO_BUNDLE === 'true') { - const { applyDevPatches } = await import('./dev-patches'); - await applyDevPatches(); - } - loadBuildMetadata(); - patchBunS3ForStorageDev(); - - // --- Step 1: Telemetry --- - const otel = register({ - processors: getSpanProcessors(), - logLevel: (process.env.AGENTUITY_LOG_LEVEL || 'info') as import('@agentuity/core').LogLevel, - }); - setGlobalLogger(otel.logger); - setGlobalTracer(otel.tracer); - - // --- Step 1b: Version consistency check --- - const { checkVersionConsistency } = await import('./version-check'); - checkVersionConsistency(otel.logger); - - // --- Step 2: Router + middleware --- - const { createRouter } = await import('./router'); - const app = createRouter(); - setGlobalRouter(app); - - app.use('*', createCompressionMiddleware(config?.compression)); - app.use( - '*', - createBaseMiddleware({ - logger: otel.logger, - tracer: otel.tracer, - meter: otel.meter, - }) - ); - app.use('/_agentuity/workbench/*', createOtelMiddleware()); - - // --- Step 3: Services --- - const port = process.env.PORT || '3500'; - const serverUrl = `http://127.0.0.1:${port}`; - createServices(otel.logger, config, serverUrl); - - const threadProvider = getThreadProvider(); - const sessionProvider = getSessionProvider(); - await threadProvider.initialize({}); - await sessionProvider.initialize({}); - - // --- Step 4: Routes --- - const analyticsConfig = resolveAnalyticsConfig(config?.analytics); - const workbenchConfig = resolveWorkbenchConfig(config?.workbench); - - registerHealthRoutes(app); - - if (analyticsConfig.enabled) { - registerAnalyticsRoutes(app, analyticsConfig); - } - - // Mount user routers - if (config?.router) { - const mounts = normalizeRouterConfig(config.router); - for (const mount of mounts) { - const prefix = mount.path.endsWith('/') ? mount.path + '*' : mount.path + '/*'; - app.use(prefix, createCorsMiddleware(config?.cors)); - app.use(prefix, createOtelMiddleware()); - app.use(prefix, createAgentMiddleware('')); - app.route(mount.path, mount.router); - } - } - - // Workbench - const workbenchRouter = createWorkbenchRouter(); - app.route('/', workbenchRouter); - registerWorkbenchUI(app, workbenchConfig); - - // Web (production static serving) - registerWebRoutes(app, analyticsConfig); - - // --- Step 5: Agent lifecycle + server --- - await runAgentSetups({}); - - // In dev mode with --hot, Bun manages the server via the default export's - // `fetch` property. In production, we start Bun.serve() explicitly. - if (!isDevelopment()) { - startServer(app, { requestTimeout: config?.requestTimeout }); - } - - // Only log on first startup, not on --hot reloads - const { serverStarted } = await import('./_globals'); - if (!serverStarted.get()) { - serverStarted.set(true); - otel.logger.debug('Server listening on %s', serverUrl); - } - - const portNumber = parseInt(port, 10); - - const result: AppResult = { - config, - router: app as Hono, - server: { url: serverUrl }, - logger: otel.logger, - // Bun --hot picks up `fetch` and `port` on the default export to - // hot-swap the running server's request handler without restarting. - fetch: app.fetch, - port: portNumber, - hostname: '127.0.0.1', - websocket, - }; - - // In production, startServer() already called Bun.serve(). If we leave - // `fetch` + `port` on the default export, Bun v1.2+ auto-serves from it - // too — causing EADDRINUSE. Strip those properties so only the explicit - // Bun.serve() is active. - if (!isDevelopment()) { - delete (result as unknown as Record).fetch; - delete (result as unknown as Record).port; - delete (result as unknown as Record).hostname; - delete (result as unknown as Record).websocket; - } - - return result; -} - -/** - * Normalize the router config into a consistent RouteMount[] form. - * - Plain Hono → [{ path: '/api', router }] - * - { path, router } → [{ path, router }] - * - [{ path, router }, ...] → as-is - * @internal - */ -export function normalizeRouterConfig( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - router: import('hono').Hono | RouteMount | RouteMount[] -): RouteMount[] { - if (Array.isArray(router)) { - return router; - } - if ('router' in router && 'path' in router) { - return [router as RouteMount]; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return [{ path: '/api', router: router as import('hono').Hono }]; -} - -/** - * A shutdown hook function. - */ -export type ShutdownHook = () => Promise | void; - -/** - * Gets the global shutdown hooks registry. - */ -function getShutdownHooks(): ShutdownHook[] { - const key = Symbol.for('@agentuity/runtime:shutdown-hooks'); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const g = globalThis as any; - if (!g[key]) { - g[key] = []; - } - return g[key]; -} - -/** - * Registers a shutdown hook to be called during graceful shutdown. - * - * Hooks are called in reverse order of registration (LIFO) after the - * app's shutdown callback and agent shutdowns have completed. - * - * This is useful for packages like @agentuity/postgres to register - * their own cleanup logic without requiring explicit wiring in each app. - * - * @param hook - The function to call during shutdown - * @returns A function to unregister the hook - * - * @example - * ```typescript - * import { registerShutdownHook } from '@agentuity/runtime'; - * - * // Register a cleanup function - * const unregister = registerShutdownHook(async () => { - * await myResource.close(); - * }); - * - * // Later, if needed, unregister it - * unregister(); - * ``` - */ -export function registerShutdownHook(hook: ShutdownHook): () => void { - const hooks = getShutdownHooks(); - hooks.push(hook); - - return () => { - const index = hooks.indexOf(hook); - if (index !== -1) { - hooks.splice(index, 1); - } - }; -} - -/** - * Run all registered shutdown hooks. - * Called during graceful shutdown (SIGTERM/SIGINT). - * - * Hooks are called in reverse order of registration (LIFO). - */ -export async function runShutdown(): Promise { - const hooks = getShutdownHooks(); - for (let i = hooks.length - 1; i >= 0; i--) { - const hook = hooks[i]; - if (!hook) continue; - try { - await hook(); - } catch { - // Ignore errors during shutdown hooks - } - } -} diff --git a/packages/runtime/src/bootstrap.ts b/packages/runtime/src/bootstrap.ts deleted file mode 100644 index 9cae57667..000000000 --- a/packages/runtime/src/bootstrap.ts +++ /dev/null @@ -1,321 +0,0 @@ -/** - * Server lifecycle helpers. - * - * These functions are called by createApp() to set up routes, middleware, - * and the Bun HTTP server. They're kept separate to keep createApp() focused - * on orchestration while these handle the details. - */ - -import type { Context } from 'hono'; -import { websocket, serveStatic } from 'hono/bun'; -import { readFileSync, existsSync } from 'node:fs'; -import { join } from 'node:path'; -import { mimeTypes } from '@agentuity/server'; - -import { runShutdown } from './app'; -import type { AnalyticsOptions, WorkbenchOptions } from './app'; -import { createRouter } from './router'; -import { createWebSessionMiddleware } from './middleware'; -import { enableProcessExitProtection } from './_process-protection'; -import { hasWaitUntilPending } from './_waituntil'; -import { getOrganizationId, getProjectId, isDevMode as runtimeIsDevMode } from './_config'; -import { BEACON_SCRIPT } from '@agentuity/frontend'; - -// ============================================================================ -// Mode detection -// ============================================================================ - -/** - * Runtime mode detection. - * Dynamic string concatenation prevents Bun.build from inlining NODE_ENV. - * @see https://github.com/oven-sh/bun/issues/20183 - */ -const getEnv = (key: string) => process.env[key]; -/** - * Check if running in development mode. - * - * The CLI dev server explicitly sets NODE_ENV='development'. In production - * (cloud deployment, CI integration test running a built app.js), NODE_ENV - * may be 'production' or unset entirely. When unset, we assume production - * — the dev server always sets it, so absence means production. - */ -export const isDevelopment = () => getEnv('NODE' + '_' + 'ENV') === 'development'; - -// ============================================================================ -// Analytics helpers -// ============================================================================ - -/** Resolve analytics config with defaults */ -export function resolveAnalyticsConfig( - analytics: boolean | AnalyticsOptions | undefined -): AnalyticsOptions & { enabled: boolean } { - if (analytics === false) { - return { enabled: false }; - } - const opts = typeof analytics === 'object' ? analytics : {}; - return { - enabled: opts.enabled !== false, - requireConsent: opts.requireConsent ?? false, - trackClicks: opts.trackClicks ?? true, - trackScroll: opts.trackScroll ?? true, - trackOutboundLinks: opts.trackOutboundLinks ?? true, - trackForms: opts.trackForms ?? false, - trackWebVitals: opts.trackWebVitals ?? true, - trackErrors: opts.trackErrors ?? true, - trackSPANavigation: opts.trackSPANavigation ?? true, - sampleRate: opts.sampleRate ?? 1, - excludePatterns: opts.excludePatterns ?? [], - globalProperties: opts.globalProperties ?? {}, - }; -} - -/** Resolve workbench config */ -export function resolveWorkbenchConfig( - workbench: boolean | string | WorkbenchOptions | undefined -): { enabled: boolean; route: string; headers: Record } { - if (!workbench) { - return { enabled: false, route: '/workbench', headers: {} }; - } - if (workbench === true) { - return { enabled: true, route: '/workbench', headers: {} }; - } - if (typeof workbench === 'string') { - return { enabled: true, route: workbench, headers: {} }; - } - return { - enabled: true, - route: workbench.route ?? '/workbench', - headers: workbench.headers ?? {}, - }; -} - -/** Inject analytics scripts into HTML */ -function injectAnalytics( - html: string, - analyticsConfig: AnalyticsOptions & { enabled: boolean } -): string { - if (!analyticsConfig.enabled) return html; - - const orgId = getOrganizationId() || ''; - const projectId = getProjectId() || ''; - const isDevmode = runtimeIsDevMode(); - - const pageConfig = { - ...analyticsConfig, - orgId, - projectId, - isDevmode, - }; - - const configScript = ``; - const sessionScript = ''; - - // In production, the beacon is already in HTML as a CDN asset (data-agentuity-beacon marker) - const beaconMarker = ''; -} diff --git a/packages/runtime/src/eval.ts b/packages/runtime/src/eval.ts deleted file mode 100644 index 4a7b263d0..000000000 --- a/packages/runtime/src/eval.ts +++ /dev/null @@ -1,109 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import type { InferInput, InferOutput, StandardSchemaV1 } from '@agentuity/core'; -import { z } from 'zod'; -import type { AgentContext } from './agent'; - -// Eval SDK types -export type EvalContext = AgentContext; - -export type EvalRunResultMetadata = { - [key: string]: any; -}; - -export const EvalHandlerResultSchema = z.object({ - passed: z.boolean(), - score: z.number().min(0).max(1).optional(), - reason: z.string().optional(), - metadata: z.record(z.string(), z.any()).optional(), -}); - -export type EvalHandlerResult = z.infer; - -// Internal types for catalyst (include success field) -export const EvalRunResultSuccessSchema = z.object({ - success: z.literal(true), - passed: z.boolean(), - score: z.number().min(0).max(1).optional(), - reason: z.string().optional(), - metadata: z.record(z.string(), z.any()).optional(), -}); - -export type EvalRunResultSuccess = z.infer; - -export type EvalRunResultError = { - success: false; - passed: false; - error: string; - reason?: string; - metadata?: EvalRunResultMetadata; -}; - -export type EvalRunResult = EvalRunResultSuccess | EvalRunResultError; - -export type CreateEvalRunRequest = { - projectId: string; - sessionId: string; - result: EvalRunResult; - evalId: string; - promptHash?: string; - deploymentId?: string; -}; - -type InternalEvalMetadata = { - /** - * the unique deployment-specific id for this eval (evalid_...) - */ - id: string; - /** - * the stable identifier for this project and eval across multiple deployments (eval_...) - */ - identifier: string; - /** - * the human readable name for the eval - */ - name: string; - /** - * the relative path to the eval from the root project directory - */ - filename: string; - /** - * a unique version for the eval. computed as the SHA256 contents of the file. - */ - version: string; -}; - -export type ExternalEvalMetadata = { - /** - * the human readable name for the eval (identifier is used if not specified) - */ - name: string; - /** - * the human readable description for the eval (empty if not provided) - */ - description: string; -}; - -export type EvalMetadata = InternalEvalMetadata & ExternalEvalMetadata; - -type InferSchemaInput = T extends StandardSchemaV1 ? InferInput : any; -type InferSchemaOutput = T extends StandardSchemaV1 ? InferOutput : any; - -export type EvalFunction = [TInput] extends [undefined] - ? [TOutput] extends [undefined] - ? (ctx: EvalContext) => Promise - : (ctx: EvalContext, output: TOutput) => Promise - : [TOutput] extends [undefined] - ? (ctx: EvalContext, input: TInput) => Promise - : (ctx: EvalContext, input: TInput, output: TOutput) => Promise; - -/** - * The Eval handler interface. - */ -export type Eval< - TInput extends StandardSchemaV1 | undefined = any, - TOutput extends StandardSchemaV1 | undefined = any, -> = { - metadata: EvalMetadata; - handler: EvalFunction, InferSchemaOutput>; -} & (TInput extends StandardSchemaV1 ? { inputSchema: TInput } : { inputSchema?: never }) & - (TOutput extends StandardSchemaV1 ? { outputSchema: TOutput } : { outputSchema?: never }); diff --git a/packages/runtime/src/globals.d.ts b/packages/runtime/src/globals.d.ts deleted file mode 100644 index 0924b5a2e..000000000 --- a/packages/runtime/src/globals.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Type-safe globalThis declarations for Agentuity runtime. - * - * String-keyed globals that persist across bun --hot reloads. - * Symbol-keyed globals are accessed via the typed helpers in _globals.ts. - */ - -declare global { - // eslint-disable-next-line no-var - var __AGENTUITY_SERVER__: - | { - stop: (closeActiveConnections?: boolean) => void; - port: number | undefined; - pendingRequests: number; - pendingWebSockets: number; - } - | undefined; - - // eslint-disable-next-line no-var - var __AGENTUITY_BUN_SUBPROCESS__: - | { - kill: (signal?: number | NodeJS.Signals) => void; - exitCode: number | null; - } - | undefined; -} - -export {}; diff --git a/packages/runtime/src/handlers/_route-meta.ts b/packages/runtime/src/handlers/_route-meta.ts deleted file mode 100644 index 07f523c0e..000000000 --- a/packages/runtime/src/handlers/_route-meta.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Route metadata tagging for build-time route type discovery. - * - * Handler wrappers (websocket, sse, stream, cron) stamp this symbol on - * the returned middleware so the build tool can detect the route type - * from `router.routes` without AST parsing. - */ - -export const ROUTE_META = Symbol.for('agentuity:route-meta'); - -export interface RouteMeta { - type: 'websocket' | 'sse' | 'stream' | 'cron'; - /** Cron schedule expression (only for type: 'cron') */ - schedule?: string; -} - -/** - * Tag a handler/middleware with route metadata. - */ -export function tagRoute any>(handler: T, meta: RouteMeta): T { - (handler as any)[ROUTE_META] = meta; - return handler; -} - -/** - * Read route metadata from a handler/middleware. - */ -export function getRouteMeta(handler: unknown): RouteMeta | undefined { - if (typeof handler === 'function') { - return (handler as any)[ROUTE_META]; - } - return undefined; -} diff --git a/packages/runtime/src/handlers/cron.ts b/packages/runtime/src/handlers/cron.ts deleted file mode 100644 index b4fa84536..000000000 --- a/packages/runtime/src/handlers/cron.ts +++ /dev/null @@ -1,141 +0,0 @@ -import type { Context, Handler } from 'hono'; -import { returnResponse } from '../_util'; -import type { Env } from '../app'; -import { verifySignature } from '../signature'; -import { tagRoute } from './_route-meta'; - -/** - * Handler function for cron jobs. - * Receives the Hono context and can return any response. - */ -export type CronHandler = (c: Context) => unknown | Promise; - -/** - * Options for the cron middleware. - */ -export interface CronOptions { - /** - * Whether to require signature authentication for cron requests. - * When true, requests must include valid X-Agentuity-Cron-Signature - * and X-Agentuity-Cron-Timestamp headers signed with the project's SDK key. - * Signatures are valid for 5 minutes. - */ - auth: boolean; -} - -/** - * Creates a cron middleware for scheduled task endpoints. - * - * **Important:** Cron endpoints must use POST method. The middleware will throw - * an error if called with any other HTTP method. - * - * @example - * ```typescript - * import { createRouter, cron } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * // With authentication (recommended) - * router.post('/daily-cleanup', cron('0 0 * * *', { auth: true }, (c) => { - * c.var.logger.info('Running daily cleanup'); - * return { status: 'cleanup complete' }; - * })); - * - * // Without authentication (not recommended for production) - * router.post('/health-check', cron('0 * * * *', { auth: false }, (c) => { - * c.var.logger.info('Running hourly health check'); - * return c.text('OK'); - * })); - * ``` - * - * @param schedule - Cron expression (e.g., '0 0 * * *' for daily at midnight) - * @param options - Configuration options including auth requirement - * @param handler - Handler function to run on schedule - * @returns Hono handler for cron endpoint - */ -export function cron( - schedule: string, - options: CronOptions, - handler: CronHandler -): Handler; - -/** - * Creates a cron middleware for scheduled task endpoints. - * - * @deprecated Use the overload with explicit `options` parameter: `cron(schedule, { auth: true }, handler)` - * - * **Important:** Cron endpoints must use POST method. The middleware will throw - * an error if called with any other HTTP method. - * - * This deprecated overload defaults to `auth: false` for backwards compatibility. - * - * @param schedule - Cron expression (e.g., '0 0 * * *' for daily at midnight) - * @param handler - Handler function to run on schedule - * @returns Hono handler for cron endpoint - */ -export function cron(schedule: string, handler: CronHandler): Handler; - -export function cron( - _schedule: string, - optionsOrHandler: CronOptions | CronHandler, - maybeHandler?: CronHandler -): Handler { - let options: CronOptions; - let handler: CronHandler; - - if (typeof optionsOrHandler === 'function') { - // Deprecated: cron(schedule, handler) - defaults to auth: false - options = { auth: false }; - handler = optionsOrHandler; - } else { - // New: cron(schedule, options, handler) - options = optionsOrHandler; - handler = maybeHandler!; - } - - const cronHandler: Handler = async (c: Context) => { - if (c.req.method !== 'POST') { - throw new Error( - `Cron endpoint must use POST method, but received ${c.req.method}. ` + - `Use router.post() instead of router.${c.req.method.toLowerCase()}().` - ); - } - - if (options.auth) { - // Clone the request to read body for signature verification without consuming it - const clonedReq = c.req.raw.clone(); - const body = await clonedReq.text(); - - // Verify the cron signature - const isValid = await verifySignature( - c.req.header('X-Agentuity-Cron-Signature'), - c.req.header('X-Agentuity-Cron-Timestamp'), - body - ); - if (!isValid) { - return c.json({ error: 'Unauthorized' }, 401); - } - } - - let result = handler(c); - if (result instanceof Promise) { - result = await result; - } - - if (result instanceof Response) { - return result; - } - - return returnResponse(c, result); - }; - - return tagRoute(cronHandler, { type: 'cron', schedule: _schedule }); -} - -/** - * Metadata interface for cron jobs (can be used for registration/discovery). - */ -export interface CronMetadata { - schedule: string; - path: string; -} diff --git a/packages/runtime/src/handlers/index.ts b/packages/runtime/src/handlers/index.ts deleted file mode 100644 index 0af3af14a..000000000 --- a/packages/runtime/src/handlers/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export { - websocket, - type WebSocketConnection, - type WebSocketHandler, - WS_DONE_PROMISE_KEY, -} from './websocket'; -export { - sse, - type SSEMessage, - type SSEStream, - type SSEHandler, - type SSEOptions, - STREAM_DONE_PROMISE_KEY, - IS_STREAMING_RESPONSE_KEY, -} from './sse'; -export { stream, type StreamHandler } from './stream'; -export { cron, type CronHandler, type CronMetadata } from './cron'; -export { webrtc, type WebRTCHandler, type WebRTCOptions } from './webrtc'; diff --git a/packages/runtime/src/handlers/sse.ts b/packages/runtime/src/handlers/sse.ts deleted file mode 100644 index b0d61aebd..000000000 --- a/packages/runtime/src/handlers/sse.ts +++ /dev/null @@ -1,358 +0,0 @@ -import type { Context, Handler } from 'hono'; -import { stream as honoStream } from 'hono/streaming'; -import { context as otelContext, ROOT_CONTEXT } from '@opentelemetry/api'; -import { StructuredError } from '@agentuity/core'; -import type { Schema } from '@agentuity/schema'; -import type { Env } from '../app'; -import { tagRoute } from './_route-meta'; - -/** - * Error thrown when sse() is called without a handler function. - */ -const SSEHandlerMissingError = StructuredError( - 'SSEHandlerMissingError', - 'An SSE handler function is required. Use sse(handler) or sse({ output: schema }, handler).' -); - -/** - * Context variable key for stream completion promise. - * Used by middleware to defer session/thread saving until stream completes. - * @internal - */ -export const STREAM_DONE_PROMISE_KEY = '_streamDonePromise'; - -/** - * Context variable key to indicate this is a streaming response. - * @internal - */ -export const IS_STREAMING_RESPONSE_KEY = '_isStreamingResponse'; - -/** - * SSE message format for Server-Sent Events. - */ -export interface SSEMessage { - data: string; - event?: string; - id?: string; - retry?: number; -} - -/** - * SSE stream interface for writing Server-Sent Events. - */ -export interface SSEStream { - /** - * Write a simple value as SSE data. - * Strings, numbers, and booleans are converted to string data. - * Objects are passed through as SSE message format. - */ - write: (data: string | number | boolean | SSEMessage) => Promise; - /** - * Write a properly formatted SSE message. - */ - writeSSE: (message: SSEMessage) => Promise; - /** - * Register a callback for when the client aborts the connection. - */ - onAbort: (callback: () => void) => void; - /** - * Close the SSE stream. - */ - close: () => void; -} - -/** - * Handler function for SSE connections. - * Receives the Hono context and SSE stream with a flattened signature. - */ -export type SSEHandler = ( - c: Context, - stream: SSEStream -) => void | Promise; - -/** - * Options for configuring SSE middleware. - * - * @template TOutput - The type of data that will be sent through the SSE stream. - * This is used for type inference in generated route registries and does not - * perform runtime validation (SSE data is serialized via JSON.stringify). - */ -export interface SSEOptions { - /** - * Schema defining the output type for SSE events. - * - * This schema is used for: - * - Type inference in generated `routes.ts` registry - * - Automatic typing of `EventSource/EventStreamManager` hook's `data` property - * - * The schema is NOT used for runtime validation - SSE messages are sent - * as-is through the stream. Use this for TypeScript type safety only. - * - * @example - * ```typescript - * import { s } from '@agentuity/schema'; - * - * const StreamEventSchema = s.object({ - * type: s.enum(['token', 'complete', 'error']), - * content: s.optional(s.string()), - * }); - * - * router.get('/stream', sse({ output: StreamEventSchema }, async (c, stream) => { - * await stream.writeSSE({ data: JSON.stringify({ type: 'token', content: 'Hello' }) }); - * await stream.writeSSE({ data: JSON.stringify({ type: 'complete' }) }); - * stream.close(); - * })); - * ``` - */ - output: Schema; -} - -/** - * Format an SSE message according to the SSE specification. - * @see https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events - */ -function formatSSEMessage(message: SSEMessage): string { - let text = ''; - if (message.event) { - text += `event: ${message.event}\n`; - } - if (message.id) { - text += `id: ${message.id}\n`; - } - if (typeof message.retry === 'number') { - text += `retry: ${message.retry}\n`; - } - // Data can be multiline - each line needs its own "data:" prefix - const dataLines = message.data.split(/\r?\n/); - for (const line of dataLines) { - text += `data: ${line}\n`; - } - // SSE messages are terminated by a blank line - text += '\n'; - return text; -} - -/** - * Creates an SSE (Server-Sent Events) middleware for streaming updates to clients. - * - * This implementation uses Hono's stream() helper instead of streamSSE() to ensure - * compatibility with async operations that consume ReadableStreams internally - * (like AI SDK's generateText/generateObject). The stream() helper uses a fire-and-forget - * pattern that avoids "ReadableStream has already been used" errors. - * - * Use with router.get() to create an SSE endpoint: - * - * @example Basic SSE without typed output - * ```typescript - * import { createRouter, sse } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * router.get('/events', sse((c, stream) => { - * let count = 0; - * const interval = setInterval(() => { - * stream.writeSSE({ - * data: `Event ${++count}`, - * event: 'update' - * }); - * if (count >= 10) { - * clearInterval(interval); - * stream.close(); - * } - * }, 1000); - * - * stream.onAbort(() => { - * clearInterval(interval); - * }); - * })); - * ``` - * - * @example SSE with typed output schema - * ```typescript - * import { createRouter, sse } from '@agentuity/runtime'; - * import { s } from '@agentuity/schema'; - * - * // Define your SSE event schema - * export const outputSchema = s.object({ - * type: s.enum(['token', 'complete', 'error']), - * content: s.optional(s.string()), - * }); - * - * const router = createRouter(); - * - * // Pass schema as first argument for typed SSE routes - * router.get('/stream', sse({ output: outputSchema }, async (c, stream) => { - * await stream.writeSSE({ data: JSON.stringify({ type: 'token', content: 'Hello' }) }); - * await stream.writeSSE({ data: JSON.stringify({ type: 'complete' }) }); - * stream.close(); - * })); - * - * // On the frontend, EventSource/EventStreamManager will now have typed data: - * // const { data } = EventSource/EventStreamManager('/api/stream'); - * // data.type is 'token' | 'complete' | 'error' - * ``` - * - * @param handler - Handler function receiving context and SSE stream - * @param options - Optional configuration with output schema for type inference - * @returns Hono handler for SSE streaming - * @see https://github.com/agentuity/sdk/issues/471 - * @see https://github.com/agentuity/sdk/issues/855 - */ -export function sse(handler: SSEHandler): Handler; -/** - * Creates an SSE middleware with typed output schema. - * - * @param options - Configuration object containing the output schema - * @param handler - Handler function receiving context and SSE stream - * @returns Hono handler for SSE streaming - */ -export function sse( - options: SSEOptions, - handler: SSEHandler -): Handler; -export function sse( - handlerOrOptions: SSEHandler | SSEOptions, - maybeHandler?: SSEHandler -): Handler { - // Determine if first arg is options or handler - const handler: SSEHandler | undefined = - typeof handlerOrOptions === 'function' ? handlerOrOptions : maybeHandler; - - // Validate handler is provided - catches sse({ output }) without handler - if (!handler) { - throw new SSEHandlerMissingError(); - } - - // Note: options.output is captured for type inference but not used at runtime - // The CLI extracts this during build to generate typed route registries - const sseHandler: Handler = (c: Context) => { - // Track stream completion for deferred session/thread saving - // This promise resolves when the stream closes (normally or via abort) - let resolveDone: (() => void) | undefined; - let rejectDone: ((reason?: unknown) => void) | undefined; - const donePromise = new Promise((resolve, reject) => { - resolveDone = resolve; - rejectDone = reject; - }); - - // Prevent unhandled rejection warnings if no middleware consumes donePromise. - // The error is still propagated via the rejection for middleware that awaits it. - donePromise.catch(() => { - // Intentionally empty - error is logged in runInContext catch block - }); - - // Idempotent function to mark stream as completed - let isDone = false; - const markDone = (error?: unknown) => { - if (isDone) return; - isDone = true; - if (error && rejectDone) { - rejectDone(error); - } else if (resolveDone) { - resolveDone(); - } - }; - - // Expose completion tracking to middleware - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set(STREAM_DONE_PROMISE_KEY, donePromise); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set(IS_STREAMING_RESPONSE_KEY, true); - - // Set SSE-specific headers - c.header('Content-Type', 'text/event-stream'); - c.header('Cache-Control', 'no-cache'); - c.header('Connection', 'keep-alive'); - - // Use honoStream instead of honoStreamSSE. - // honoStream uses a fire-and-forget async IIFE pattern that returns the Response - // immediately while the handler runs in the background. This is critical for - // compatibility with AI SDK's generateText/generateObject which use fetch() - // internally. With honoStreamSSE, the callback is awaited before returning, - // which causes "ReadableStream has already been used" errors when fetch - // response streams are consumed in the same async chain. - // See: https://github.com/agentuity/sdk/issues/471 - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return honoStream(c, async (s: any) => { - const encoder = new TextEncoder(); - - // Track if user registered an onAbort callback - let userAbortCallback: (() => void) | undefined; - - // Internal function to write an SSE message - const writeSSEInternal = async (message: SSEMessage): Promise => { - const formatted = formatSSEMessage(message); - await s.write(encoder.encode(formatted)); - }; - - const wrappedStream: SSEStream = { - write: async (data) => { - if ( - typeof data === 'string' || - typeof data === 'number' || - typeof data === 'boolean' - ) { - return writeSSEInternal({ data: String(data) }); - } else if (typeof data === 'object' && data !== null) { - return writeSSEInternal(data as SSEMessage); - } - return writeSSEInternal({ data: String(data) }); - }, - writeSSE: writeSSEInternal, - onAbort: (callback: () => void) => { - userAbortCallback = callback; - s.onAbort(() => { - try { - callback(); - } finally { - // Mark stream as done on abort - markDone(); - } - }); - }, - close: () => { - try { - s.close?.(); - } finally { - // Mark stream as done on close - markDone(); - } - }, - }; - - // Always register internal abort handler if user doesn't register one - // This ensures we track completion even if user doesn't call onAbort - s.onAbort(() => { - if (!userAbortCallback) { - // Only mark done if user didn't register their own handler - // (their handler wrapper already calls markDone) - markDone(); - } - }); - - const runInContext = async () => { - try { - await handler(c, wrappedStream); - markDone(); - } catch (err) { - // Log error but don't rethrow - would be unhandled rejection - c.var.logger?.error?.('SSE handler error:', err); - markDone(err); - } - }; - - // IMPORTANT: We run in ROOT_CONTEXT (no active OTEL span) to avoid a Bun bug - // where OTEL-instrumented fetch conflicts with streaming responses. - // This causes "ReadableStream has already been used" errors when AI SDK's - // generateText/generateObject (which use fetch + stream.tee() internally) - // are called inside SSE handlers. Running without an active span makes - // our OTEL fetch wrapper use the original unpatched fetch. - // See: https://github.com/agentuity/sdk/issues/471 - // See: https://github.com/oven-sh/bun/issues/24766 - await otelContext.with(ROOT_CONTEXT, runInContext); - }); - }; - - return tagRoute(sseHandler, { type: 'sse' }); -} diff --git a/packages/runtime/src/handlers/stream.ts b/packages/runtime/src/handlers/stream.ts deleted file mode 100644 index 2106f2a0b..000000000 --- a/packages/runtime/src/handlers/stream.ts +++ /dev/null @@ -1,121 +0,0 @@ -import type { Context, Handler } from 'hono'; -import { stream as honoStream } from 'hono/streaming'; -import { context as otelContext, ROOT_CONTEXT } from '@opentelemetry/api'; -import type { Env } from '../app'; -import { STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY } from './sse'; -import { tagRoute } from './_route-meta'; - -/** - * Handler function for streaming responses. - * Returns a ReadableStream that will be piped to the response. - */ -export type StreamHandler = ( - c: Context -) => ReadableStream | Promise>; - -/** - * Creates a streaming middleware for returning ReadableStream responses. - * - * Use with router.post() (or any HTTP method) to create a streaming endpoint: - * - * @example - * ```typescript - * import { createRouter, stream } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * router.post('/events', stream((c) => { - * return new ReadableStream({ - * start(controller) { - * controller.enqueue('event 1\n'); - * controller.enqueue('event 2\n'); - * controller.close(); - * } - * }); - * })); - * ``` - * - * @example - * ```typescript - * // Async stream with data from request body - * router.post('/process', stream(async (c) => { - * const body = await c.req.json(); - * - * return new ReadableStream({ - * async start(controller) { - * for (const item of body.items) { - * controller.enqueue(`Processing: ${item}\n`); - * await new Promise(r => setTimeout(r, 100)); - * } - * controller.close(); - * } - * }); - * })); - * ``` - * - * @param handler - Handler function returning a ReadableStream - * @returns Hono handler for streaming response - */ -export function stream(handler: StreamHandler): Handler { - const streamHandler: Handler = (c: Context) => { - // Track stream completion for deferred session/thread saving - // This promise resolves when the stream completes (pipe finishes or errors) - let resolveDone: (() => void) | undefined; - let rejectDone: ((reason?: unknown) => void) | undefined; - const donePromise = new Promise((resolve, reject) => { - resolveDone = resolve; - rejectDone = reject; - }); - - // Idempotent function to mark stream as completed - let isDone = false; - const markDone = (error?: unknown) => { - if (isDone) return; - isDone = true; - if (error && rejectDone) { - rejectDone(error); - } else if (resolveDone) { - resolveDone(); - } - }; - - // Expose completion tracking to middleware - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set(STREAM_DONE_PROMISE_KEY, donePromise); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set(IS_STREAMING_RESPONSE_KEY, true); - - c.header('Content-Type', 'application/octet-stream'); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return honoStream(c, async (s: any) => { - const runInContext = async () => { - try { - let streamResult = handler(c); - if (streamResult instanceof Promise) { - streamResult = await streamResult; - } - await s.pipe(streamResult); - // Stream completed successfully - markDone(); - } catch (err) { - c.var.logger?.error('Stream error:', err); - markDone(err); - throw err; - } - }; - - // IMPORTANT: We run in ROOT_CONTEXT (no active OTEL span) to avoid a Bun bug - // where OTEL-instrumented fetch conflicts with streaming responses. - // This causes "ReadableStream has already been used" errors when AI SDK's - // generateText/generateObject (which use fetch + stream.tee() internally) - // are called inside stream handlers. Running without an active span makes - // our OTEL fetch wrapper use the original unpatched fetch. - // See: https://github.com/agentuity/sdk/issues/471 - // See: https://github.com/oven-sh/bun/issues/24766 - await otelContext.with(ROOT_CONTEXT, runInContext); - }); - }; - - return tagRoute(streamHandler, { type: 'stream' }); -} diff --git a/packages/runtime/src/handlers/webrtc.ts b/packages/runtime/src/handlers/webrtc.ts deleted file mode 100644 index c588b3d36..000000000 --- a/packages/runtime/src/handlers/webrtc.ts +++ /dev/null @@ -1,125 +0,0 @@ -import type { Context, MiddlewareHandler } from 'hono'; -import { upgradeWebSocket } from 'hono/bun'; -import { context as otelContext, ROOT_CONTEXT } from '@opentelemetry/api'; -import { getAgentAsyncLocalStorage } from '../_context'; -import type { Env } from '../app'; -import { WebRTCRoomManager, type WebRTCOptions } from '../webrtc-signaling'; -import type { WebSocketConnection } from './websocket'; - -export type { WebRTCOptions }; - -/** - * Handler function for WebRTC signaling connections. - * Receives the Hono context and WebRTCRoomManager. - */ -export type WebRTCHandler = ( - c: Context, - roomManager: WebRTCRoomManager -) => void | Promise; - -/** - * Creates a WebRTC signaling middleware for peer-to-peer communication. - * - * This middleware sets up a WebSocket-based signaling server that handles: - * - Room membership and peer discovery - * - SDP offer/answer relay - * - ICE candidate relay - * - * Use with router.get() to create a WebRTC signaling endpoint: - * - * @example - * ```typescript - * import { createRouter, webrtc } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * // Basic signaling endpoint - * router.get('/call/signal', webrtc()); - * - * // With options - * router.get('/call/signal', webrtc({ maxPeers: 4 })); - * - * // With callbacks for monitoring - * router.get('/call/signal', webrtc({ - * maxPeers: 2, - * callbacks: { - * onRoomCreated: (roomId) => console.log(`Room ${roomId} created`), - * onPeerJoin: (peerId, roomId) => console.log(`${peerId} joined ${roomId}`), - * onPeerLeave: (peerId, roomId, reason) => { - * console.log(`${peerId} left ${roomId}: ${reason}`); - * }, - * }, - * })); - * ``` - * - * @param options - Configuration options for WebRTC signaling - * @returns Hono middleware handler for WebSocket upgrade - */ -export function webrtc(options?: WebRTCOptions): MiddlewareHandler { - const roomManager = new WebRTCRoomManager(options); - - const wsHandler = upgradeWebSocket((_c: Context) => { - let currentWs: WebSocketConnection | undefined; - // we need a Privder interface here with AsyncLocalStorage and KV - const asyncLocalStorage = getAgentAsyncLocalStorage(); - const capturedContext = asyncLocalStorage.getStore(); - - return { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onOpen: (_event: Event, ws: any) => { - otelContext.with(ROOT_CONTEXT, () => { - if (capturedContext) { - asyncLocalStorage.run(capturedContext, () => { - currentWs = { - onOpen: () => {}, - onMessage: () => {}, - onClose: () => {}, - send: (data) => ws.send(data), - }; - }); - } else { - currentWs = { - onOpen: () => {}, - onMessage: () => {}, - onClose: () => {}, - send: (data) => ws.send(data), - }; - } - }); - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onMessage: (event: MessageEvent, _ws: any) => { - if (currentWs) { - otelContext.with(ROOT_CONTEXT, () => { - if (capturedContext) { - asyncLocalStorage.run(capturedContext, () => { - roomManager.handleMessage(currentWs!, String(event.data)); - }); - } else { - roomManager.handleMessage(currentWs!, String(event.data)); - } - }); - } - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onClose: (_event: CloseEvent, _ws: any) => { - if (currentWs) { - otelContext.with(ROOT_CONTEXT, () => { - if (capturedContext) { - asyncLocalStorage.run(capturedContext, () => { - roomManager.handleDisconnect(currentWs!); - }); - } else { - roomManager.handleDisconnect(currentWs!); - } - }); - } - }, - }; - }); - - const middleware: MiddlewareHandler = (c, next) => - (wsHandler as unknown as MiddlewareHandler)(c, next); - - return middleware; -} diff --git a/packages/runtime/src/handlers/websocket.ts b/packages/runtime/src/handlers/websocket.ts deleted file mode 100644 index 014dfc44b..000000000 --- a/packages/runtime/src/handlers/websocket.ts +++ /dev/null @@ -1,203 +0,0 @@ -import type { Context, MiddlewareHandler } from 'hono'; -import { upgradeWebSocket } from 'hono/bun'; -import { context as otelContext, ROOT_CONTEXT } from '@opentelemetry/api'; -import type { Env } from '../app'; -import { tagRoute } from './_route-meta'; - -/** - * Context key for WebSocket close promise. - * Used by middleware to defer session finalization until WebSocket closes. - */ -export const WS_DONE_PROMISE_KEY = '_wsDonePromise'; - -/** - * WebSocket connection interface for handling WebSocket events. - */ -export interface WebSocketConnection { - onOpen: (handler: (event: Event) => void | Promise) => void; - onMessage: (handler: (event: MessageEvent) => void | Promise) => void; - onClose: (handler: (event: CloseEvent) => void | Promise) => void; - send: (data: string | ArrayBuffer | Uint8Array) => void; -} - -/** - * Handler function for WebSocket connections. - * Receives the Hono context and WebSocket connection with a flattened signature. - * - * **This handler must be synchronous** (returns `void`, not `Promise`). - * The handler is called inside Hono's `upgradeWebSocket` factory, which must - * return event handlers synchronously for the HTTP upgrade to complete. If the - * handler were async, any `ws.onOpen`/`ws.onMessage`/`ws.onClose` registrations - * after an `await` would be silently lost because the factory returns before - * they are registered. - * - * To perform async work, place it inside the `onOpen`, `onMessage`, or `onClose` - * callbacks, which are properly awaited by the runtime. - */ -export type WebSocketHandler = ( - c: Context, - ws: WebSocketConnection -) => void; - -/** - * Creates a WebSocket middleware for handling WebSocket connections. - * - * The handler must be **synchronous** — it runs inside Hono's `upgradeWebSocket` - * factory which must return event handlers synchronously for the HTTP upgrade to - * complete. Async work should go inside `onOpen`, `onMessage`, or `onClose` - * callbacks, which are properly awaited by the runtime. - * - * Use with router.get() to create a WebSocket endpoint: - * - * @example - * ```typescript - * // Basic synchronous usage - * import { createRouter, websocket } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * router.get('/ws', websocket((c, ws) => { - * ws.onOpen(() => { - * c.var.logger.info('WebSocket opened'); - * ws.send('Welcome!'); - * }); - * - * ws.onMessage((event) => { - * c.var.logger.info('Received:', event.data); - * ws.send('Echo: ' + event.data); - * }); - * - * ws.onClose(() => { - * c.var.logger.info('WebSocket closed'); - * }); - * })); - * ``` - * - * @example - * ```typescript - * // Async work inside callbacks (correct pattern) - * router.get('/ws', websocket((c, ws) => { - * ws.onOpen(async () => { - * const user = await fetchUser(c.var.auth); - * ws.send(JSON.stringify({ welcome: user.name })); - * }); - * - * ws.onMessage(async (event) => { - * const result = await processMessage(event.data); - * ws.send(JSON.stringify(result)); - * }); - * })); - * ``` - * - * @param handler - Synchronous handler function receiving context and WebSocket connection - * @returns Hono middleware handler for WebSocket upgrade - */ -export function websocket( - handler: WebSocketHandler -): MiddlewareHandler { - const wsHandler = upgradeWebSocket((c: Context) => { - let openHandler: ((event: Event) => void | Promise) | undefined; - let messageHandler: ((event: MessageEvent) => void | Promise) | undefined; - let closeHandler: ((event: CloseEvent) => void | Promise) | undefined; - let initialized = false; - - // Create done promise for session lifecycle deferral, but ONLY for actual - // WebSocket upgrade requests. The factory runs unconditionally for every - // request hitting this route (Hono calls createEvents before attempting - // server.upgrade). For non-upgrade HTTP requests, setting the promise would - // cause the middleware to hang forever waiting for an onClose that never fires. - let resolveDone: (() => void) | undefined; - const isUpgrade = c.req.header('upgrade')?.toLowerCase() === 'websocket'; - - if (isUpgrade) { - const donePromise = new Promise((resolve) => { - resolveDone = resolve; - }); - - // Defensive: guard against future code adding rejection paths - donePromise.catch(() => {}); - - // Set on context so middleware defers session finalization until WS closes - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set(WS_DONE_PROMISE_KEY, donePromise); - } - - const wsConnection: WebSocketConnection = { - onOpen: (h) => { - openHandler = h; - }, - onMessage: (h) => { - messageHandler = h; - }, - onClose: (h) => { - closeHandler = h; - }, - send: (_data: string | ArrayBuffer | Uint8Array) => { - // This will be bound to the actual ws in the handlers - }, - }; - - // IMPORTANT: We run in ROOT_CONTEXT (no active OTEL span) to avoid a Bun bug - // where OTEL-instrumented fetch conflicts with streaming responses. - // See: https://github.com/agentuity/sdk/issues/471 - // See: https://github.com/oven-sh/bun/issues/24766 - const runHandler = () => { - otelContext.with(ROOT_CONTEXT, () => { - handler(c, wsConnection); - }); - initialized = true; - }; - - runHandler(); - - return { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onOpen: async (event: Event, ws: any) => { - try { - wsConnection.send = (data) => ws.send(data); - - if (openHandler) { - await otelContext.with(ROOT_CONTEXT, () => openHandler!(event)); - } - } catch (err) { - c.var.logger?.error('WebSocket onOpen error:', err); - throw err; - } - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onMessage: async (event: MessageEvent, ws: any) => { - try { - if (!initialized) { - wsConnection.send = (data) => ws.send(data); - runHandler(); - } - if (messageHandler) { - await otelContext.with(ROOT_CONTEXT, () => messageHandler!(event)); - } - } catch (err) { - c.var.logger?.error('WebSocket onMessage error:', err); - throw err; - } - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - onClose: async (event: CloseEvent, _ws: any) => { - try { - if (closeHandler) { - await otelContext.with(ROOT_CONTEXT, () => closeHandler!(event)); - } - } catch (err) { - c.var.logger?.error('WebSocket onClose error:', err); - } finally { - // Resolve the done promise to trigger session finalization - // This must fire even if the user's onClose handler throws - resolveDone?.(); - } - }, - }; - }); - - const middleware: MiddlewareHandler = (c, next) => - (wsHandler as unknown as MiddlewareHandler)(c, next); - - return tagRoute(middleware, { type: 'websocket' }); -} diff --git a/packages/runtime/src/index.ts b/packages/runtime/src/index.ts index ef945230b..6de65f238 100644 --- a/packages/runtime/src/index.ts +++ b/packages/runtime/src/index.ts @@ -1,269 +1,68 @@ -// agent.ts exports -export { - type AgentContext, - type AgentEventName, - type AgentEventCallback, - type AgentRuntimeState, - type CreateEvalConfig, - type AgentValidator, - type Agent, - type CreateAgentConfig, - type AgentRunner, - getGlobalRuntimeState, - getAgentRuntime, - type AgentName, - type AgentRegistry, - registerAgent, - setAgentConfig, - getAgentConfig, - type CreateAgentConfigExplicit, - createAgent, - populateAgentsRegistry, - createAgentMiddleware, - getAgents, - runAgentSetups, - runAgentShutdowns, - runInAgentContext, -} from './agent'; - -// app.ts exports (all app-related functionality) -export { - type AppConfig, - type AnalyticsOptions, - type WorkbenchOptions, - type CompressionConfig, - type CorsConfig, - type Variables, - type TriggerType, - type PrivateVariables, - type Env, - type RouteMount, - type AppResult, - type ShutdownHook, - createApp, - getApp, - runShutdown, - registerShutdownHook, - fireEvent, -} from './app'; - -// cors.ts exports (trusted origin helpers) -export { createTrustedCorsOrigin, type TrustedCorsOriginOptions } from './cors'; -export { addEventListener, removeEventListener } from './_events'; - -// middleware.ts exports (Vite-native) -export { - createBaseMiddleware, - createCorsMiddleware, - createOtelMiddleware, - createCompressionMiddleware, - createWebSessionMiddleware, - getSessionSecret, -} from './middleware'; - -// Internal exports needed by generated entry files -export { register } from './otel/config'; -export { createServices } from './_services'; -export { enableProcessExitProtection } from './_process-protection'; - -// Re-export beacon script for generated webanalytics.ts -export { BEACON_SCRIPT, validateBeaconScript } from '@agentuity/frontend'; - -// Internal exports (not in main index, imported by CLI only) -export { internalExit } from './_process-protection'; - -// devmode.ts exports -export { registerDevModeRoutes } from './devmode'; - -// router.ts exports -export { type HonoEnv, type WebSocketConnection, createRouter } from './router'; - -// protocol handler exports (websocket, sse, stream, cron, webrtc) -export { - websocket, - type WebSocketHandler, - sse, - type SSEMessage, - type SSEStream, - type SSEHandler, - type SSEOptions, - stream, - type StreamHandler, - cron, - type CronHandler, - type CronMetadata, - webrtc, - type WebRTCHandler, -} from './handlers'; - -// webrtc-signaling.ts exports -export { - type SignalMessage, - type SDPDescription, - type ICECandidate, - type WebRTCOptions, - type WebRTCSignalingCallbacks, - WebRTCRoomManager, -} from './webrtc-signaling'; - -// eval.ts exports -export { - EvalHandlerResultSchema, - type EvalContext, - type EvalRunResultMetadata, - type EvalHandlerResult, - type EvalRunResultSuccess, - type EvalRunResultError, - type EvalRunResult, - type CreateEvalRunRequest, - type ExternalEvalMetadata, - type EvalMetadata, - type EvalFunction, - type Eval, -} from './eval'; - -// session.ts exports -export { - type ThreadEventName, - type SessionEventName, - type ThreadState, - type MergeOperation, - type Thread, - type Session, - type ThreadIDProvider, - type ThreadProvider, - type SessionProvider, - generateId, - DefaultThreadIDProvider, - DefaultThread, - LazyThreadState, -} from './session'; - -// services/thread/local exports -export { LocalThreadProvider } from './services/thread/local'; - -// workbench.ts exports -export { - createWorkbenchExecutionRoute, - createWorkbenchRouter, - createWorkbenchMetadataRoute, - createWorkbenchWebsocketRoute, -} from './workbench'; - -// web.ts exports -export { createWebRouter } from './web'; - -// validator.ts exports -export { type RouteValidator, validator } from './validator'; - -// logger exports -export type { Logger } from './logger'; - -// _server.ts exports -export { - getRouter, - setGlobalRouter, - createLogger, - getLogger, - setGlobalLogger, - getTracer, - setGlobalTracer, - addSpanProcessor, - getSpanProcessors, - privateContext, - notifyReady, - getServer, - AGENT_CONTEXT_PROPERTIES, -} from './_server'; - -// _waituntil.ts exports -export { hasWaitUntilPending } from './_waituntil'; - -// _context.ts exports (for auth integration) -export { inAgentContext, inHTTPContext, getAgentContext, getHTTPContext } from './_context'; - -// _standalone.ts exports -export { - createAgentContext, - StandaloneAgentContext, - type StandaloneContextOptions, - type InvokeOptions, -} from './_standalone'; - -// services/evalrun exports -export { - HTTPEvalRunEventProvider, - LocalEvalRunEventProvider, - JSONEvalRunEventProvider, - CompositeEvalRunEventProvider, -} from './services/evalrun'; - -// for loading metadata -export { loadBuildMetadata } from './_metadata'; - -// config exports (for analytics and other runtime config access) -export { - getOrganizationId, - getProjectId, - getDeploymentId, - isDevMode, - isProduction, - isInsideAgentRuntime, -} from './_config'; - -// _services.ts exports -export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from './_services'; - -// _validation.ts exports -export type { RouteSchema, GetRouteSchema } from './_validation'; - /** - * Application state interface that gets automatically augmented based on your createApp setup function. + * @agentuity/runtime — DEPRECATED + * + * This package is no longer maintained. Agentuity v3 uses a framework-agnostic + * architecture where you bring your own framework (Next.js, Hono, Astro, etc.) + * and integrate Agentuity services via the @agentuity/hono middleware or + * individual service client packages. + * + * Migration guide: + * + * 1. Pick a framework: Next.js, Hono, SvelteKit, Remix, Astro, etc. + * 2. Replace createApp() with your framework's app setup + * 3. Use @agentuity/hono middleware for service injection (kv, vector, queue, etc.) + * 4. Use @agentuity/cli for build and deploy (agentuity build / agentuity deploy) * - * This interface is empty by default but gets populated with strongly-typed properties - * when you define a setup function in createApp(). The Agentuity build tool automatically - * generates type augmentations in `.agentuity/.agentuity_runtime.ts`. + * Example (Hono): * - * **How it works:** - * 1. You define setup() in createApp() that returns an object - * 2. The build tool generates module augmentation for this interface - * 3. All agents get strongly-typed access to app state via `ctx.app` + * import { Hono } from 'hono'; + * import { agentuity } from '@agentuity/hono'; * - * @example - * ```typescript - * // In your app.ts: - * const app = await createApp({ - * setup: async () => { - * const db = await connectDatabase(); - * const redis = await connectRedis(); - * return { db, redis }; - * } - * }); + * const app = new Hono(); + * app.use('*', agentuity()); * - * // In your agent: - * const agent = createAgent('user-query', { - * handler: async (ctx, input) => { - * // ctx.app is strongly typed with { db, redis }! - * const user = await ctx.app.db.query('SELECT * FROM users'); - * await ctx.app.redis.set('key', 'value'); - * return user; - * } - * }); - * ``` + * app.get('/data', async (c) => { + * const data = await c.var.kv.get('ns', 'key'); + * return c.json(data); + * }); * - * **Note:** If you're not seeing type hints for `ctx.app`, make sure you've run `bun run build` - * to generate the type augmentations. + * export default app; + * + * See https://agentuity.dev/docs/migration for the full migration guide. */ -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -export interface AppState {} -// Re-export bootstrapRuntimeEnv and mimeTypes from @agentuity/server for convenience -// This allows generated code to import from @agentuity/runtime instead of having -// a direct dependency on @agentuity/server -export { bootstrapRuntimeEnv, type RuntimeBootstrapOptions, mimeTypes } from '@agentuity/server'; +const appMessage = + '@agentuity/runtime is deprecated. ' + + 'Use a dedicated framework (Hono, Next.js, etc.) with @agentuity/hono middleware instead. ' + + 'See https://agentuity.dev/docs/migration'; -// bun-s3-patch.ts exports -export { patchBunS3ForStorageDev, isAgentuityStorageEndpoint } from './bun-s3-patch'; +const agentMessage = + 'createAgent() is deprecated. ' + + 'Use an AI SDK (OpenAI, Vercel AI SDK, etc.) directly in your framework routes instead. ' + + 'See https://agentuity.dev/docs/migration'; -// dev-patches exports (runtime monkey-patches for --experimental-no-bundle dev mode) -export { applyDevPatches } from './dev-patches'; +/** + * @deprecated Use a dedicated framework with @agentuity/hono middleware. + */ +export function createApp(): never { + throw new Error(appMessage); +} + +/** + * @deprecated Use Hono directly: `new Hono()` + */ +export function createRouter(): never { + throw new Error(appMessage); +} + +/** + * @deprecated Use an AI SDK (OpenAI, Vercel AI SDK, etc.) directly in your framework routes. + */ +export function createAgent(): never { + console.warn( + '[DEPRECATED] createAgent() is deprecated in Agentuity v3. ' + + 'Use an AI SDK (OpenAI, Vercel AI SDK, etc.) directly in your framework routes instead. ' + + 'See https://agentuity.dev/docs/migration' + ); + throw new Error(agentMessage); +} diff --git a/packages/runtime/src/logger/index.ts b/packages/runtime/src/logger/index.ts deleted file mode 100644 index 777989c95..000000000 --- a/packages/runtime/src/logger/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { internal } from './internal'; -export { type Logger, logger } from './user'; diff --git a/packages/runtime/src/logger/logger.ts b/packages/runtime/src/logger/logger.ts deleted file mode 100644 index 9536648ca..000000000 --- a/packages/runtime/src/logger/logger.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Interface for logging functionality - */ -export interface Logger { - /** - * Log a debug message - * - * @param message - The message to log - * @param args - Additional arguments to log - */ - debug(message: unknown, ...args: unknown[]): void; - - /** - * Log an info message - * - * @param message - The message to log - * @param args - Additional arguments to log - */ - info(message: unknown, ...args: unknown[]): void; - - /** - * Log a warning message - * - * @param message - The message to log - * @param args - Additional arguments to log - */ - warn(message: unknown, ...args: unknown[]): void; - - /** - * Log an error message - * - * @param message - The message to log - * @param args - Additional arguments to log - */ - error(message: unknown, ...args: unknown[]): void; - - /** - * Create a child logger with additional context - * - * @param opts - Additional context for the child logger - * @returns A new logger instance with the additional context - */ - child(opts: Record): Logger; -} diff --git a/packages/runtime/src/middleware.ts b/packages/runtime/src/middleware.ts deleted file mode 100644 index f628f0aef..000000000 --- a/packages/runtime/src/middleware.ts +++ /dev/null @@ -1,1095 +0,0 @@ -/** - * Middleware factories for Vite-native architecture - * Extracted from _server.ts to be used by generated entry files - */ - -import { createMiddleware } from 'hono/factory'; -import { cors } from 'hono/cors'; -import { compress } from 'hono/compress'; -import { setSignedCookie } from 'hono/cookie'; -import type { Env, CompressionConfig, CorsConfig } from './app'; -import { createTrustedCorsOrigin } from './cors'; -import type { Logger } from './logger'; - -import { generateId } from './session'; -import { runInHTTPContext } from './_context'; -import { DURATION_HEADER, TOKENS_HEADER } from './_tokens'; -import { extractTraceContextFromRequest } from './otel/http'; -import { enrichContextWithTraceState } from './otel/tracestate'; -import { context, SpanKind, SpanStatusCode, trace, propagation } from '@opentelemetry/api'; -import type { Meter, Tracer } from '@opentelemetry/api'; -import * as runtimeConfig from './_config'; -import { getSessionEventProvider } from './_services'; -import { internal } from './logger/internal'; -import { STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY } from './handlers/sse'; -import { WS_DONE_PROMISE_KEY } from './handlers/websocket'; -import { loadBuildMetadata } from './_metadata'; - -const SESSION_HEADER = 'x-session-id'; -const THREAD_HEADER = 'x-thread-id'; -const DEPLOYMENT_HEADER = 'x-deployment'; - -/** - * Paths that should skip OTEL session event tracking. - * These routes still get thread/session setup but won't create session start/complete events. - */ -const OTEL_SESSION_EVENT_SKIP_PATHS = new Set([ - '/_agentuity/workbench/ws', - '/_agentuity/workbench/sample', - '/_agentuity/workbench/state', - '/_agentuity/workbench/metadata.json', - '/_agentuity/webanalytics/analytics.js', - '/_agentuity/webanalytics/session.js', -]); - -/** - * Paths that should skip thread/session setup entirely. - * These are lightweight endpoints that don't need any context. - */ -const OTEL_FULL_SKIP_PATHS = new Set([ - '/_agentuity/workbench/metadata.json', - '/_agentuity/webanalytics/analytics.js', - '/_agentuity/webanalytics/session.js', -]); - -export const AGENT_CONTEXT_PROPERTIES = [ - 'logger', - 'tracer', - 'sessionId', - 'kv', - 'stream', - 'vector', - 'sandbox', - 'queue', - 'email', - 'schedule', - 'task', - 'state', - 'thread', - 'session', - 'config', - 'app', -] as const; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function installContextPropertyHelpers(c: any): void { - for (const property of AGENT_CONTEXT_PROPERTIES) { - if (Object.hasOwn(c, property)) { - continue; - } - - Object.defineProperty(c, property, { - get() { - throw new Error( - `In route handlers, use c.var.${property} instead of c.${property}. ` + - `The property '${property}' is available on AgentContext (for agent handlers) ` + - `but must be accessed via c.var in HonoContext (route handlers).` - ); - }, - configurable: true, - enumerable: false, - }); - } -} - -export interface MiddlewareConfig { - logger: Logger; - tracer: Tracer; - meter: Meter; - corsOptions?: Parameters[0]; -} - -/** - * Create base middleware that sets up context variables - */ -export function createBaseMiddleware(config: MiddlewareConfig) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return createMiddleware>(async (c, next) => { - c.set('logger', config.logger); - c.set('tracer', config.tracer); - c.set('meter', config.meter); - - // Import services dynamically to avoid circular deps - const { getServices } = await import('./_services'); - const services = getServices(); - c.set('kv', services.kv); - c.set('stream', services.stream); - c.set('vector', services.vector); - c.set('sandbox', services.sandbox); - c.set('queue', services.queue); - c.set('email', services.email); - c.set('schedule', services.schedule); - c.set('task', services.task); - - installContextPropertyHelpers(c); - - const isWebSocket = c.req.header('upgrade')?.toLowerCase() === 'websocket'; - const skipLogging = c.req.path.startsWith('/_agentuity/'); - const started = performance.now(); - - if (!skipLogging) { - config.logger.debug('%s %s started', c.req.method, c.req.path); - } - - await runInHTTPContext(c, next); - - if (!isWebSocket) { - const endTime = performance.now(); - const duration = ((endTime - started) / 1000).toFixed(1); - c.header(DURATION_HEADER, `${duration}s`); - - // Set deployment header for all routes - const deploymentId = runtimeConfig.getDeploymentId(); - if (deploymentId) { - c.header(DEPLOYMENT_HEADER, deploymentId); - } - } - - if (!skipLogging && !isWebSocket) { - config.logger.debug( - '%s %s completed (%d) in %sms', - c.req.method, - c.req.path, - c.res.status, - Number(performance.now() - started).toFixed(2) - ); - } - }); -} - -/** - * Create CORS middleware with lazy config resolution. - * - * Handles Cross-Origin Resource Sharing (CORS) headers for API routes. - * Config is resolved at request time, allowing it to be set via createApp(). - * Static options passed here take precedence over app config. - * - * Default behavior: - * - Reflects the request origin (allows any origin) - * - Allows common headers: Content-Type, Authorization, Accept, Origin, X-Requested-With - * - Allows all standard HTTP methods - * - Enables credentials - * - Sets max-age to 600 seconds (10 minutes) - * - * @param staticOptions - Optional static CORS options that override app config - * - * @example - * ```typescript - * // Use with default settings - * app.use('/api/*', createCorsMiddleware()); - * - * // Or configure via createApp - * const app = await createApp({ - * cors: { - * origin: 'https://example.com', - * allowHeaders: ['Content-Type', 'Authorization', 'X-Custom-Header'], - * maxAge: 3600, - * } - * }); - * - * // Or pass static options directly (overrides app config) - * app.use('/api/*', createCorsMiddleware({ - * origin: ['https://app.example.com', 'https://admin.example.com'], - * credentials: true, - * })); - * ``` - */ -export function createCorsMiddleware(staticOptions?: CorsConfig) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return createMiddleware>(async (c, next) => { - const corsOptions = { ...staticOptions }; - - // Extract Agentuity-specific options - const { sameOrigin, allowedOrigins, ...honoCorsOptions } = corsOptions; - - // Determine origin handler based on sameOrigin setting - let originHandler: NonNullable[0]>['origin']; - if (sameOrigin) { - // Use trusted origins (env vars + allowedOrigins + same-origin) - originHandler = createTrustedCorsOrigin({ allowedOrigins }); - } else if (honoCorsOptions.origin !== undefined) { - // Use explicitly provided origin - originHandler = honoCorsOptions.origin; - } else { - // Default: reflect any origin (backwards compatible) - originHandler = (origin: string) => origin; - } - - // Required headers that must always be allowed/exposed for runtime functionality - const requiredAllowHeaders = [THREAD_HEADER]; - const requiredExposeHeaders = [ - TOKENS_HEADER, - DURATION_HEADER, - THREAD_HEADER, - SESSION_HEADER, - DEPLOYMENT_HEADER, - ]; - - // Default headers to allow (used if none specified) - const defaultAllowHeaders = [ - 'Content-Type', - 'Authorization', - 'Accept', - 'Origin', - 'X-Requested-With', - ]; - - // Default headers to expose (used if none specified) - const defaultExposeHeaders = ['Content-Length']; - - const finalAllowHeaders = [ - ...(honoCorsOptions.allowHeaders ?? defaultAllowHeaders), - ...requiredAllowHeaders, - ]; - - const corsMiddleware = cors({ - ...honoCorsOptions, - origin: originHandler, - // Always include required headers, merge with user-provided or defaults - allowHeaders: finalAllowHeaders, - allowMethods: honoCorsOptions.allowMethods ?? [ - 'POST', - 'GET', - 'OPTIONS', - 'HEAD', - 'PUT', - 'DELETE', - 'PATCH', - ], - // Always include required headers, merge with user-provided or defaults - exposeHeaders: [ - ...(honoCorsOptions.exposeHeaders ?? defaultExposeHeaders), - ...requiredExposeHeaders, - ], - maxAge: honoCorsOptions.maxAge ?? 600, - credentials: honoCorsOptions.credentials ?? originHandler !== '*', - }); - - return corsMiddleware(c, next); - }); -} - -/** - * Create OpenTelemetry middleware for session/thread tracking - * This is the critical middleware that creates AgentContext - */ -export function createOtelMiddleware() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return createMiddleware>(async (c, next) => { - // Skip thread/session setup entirely for lightweight endpoints - if (OTEL_FULL_SKIP_PATHS.has(c.req.path)) { - return next(); - } - - // Check if we should skip session events (but still set up thread/session) - const skipSessionEvents = OTEL_SESSION_EVENT_SKIP_PATHS.has(c.req.path); - - // Import providers dynamically to avoid circular deps - const { getThreadProvider, getSessionProvider } = await import('./_services'); - const WaitUntilHandler = (await import('./_waituntil')).default; - - const extractedContext = extractTraceContextFromRequest(c.req.raw); - const method = c.req.method; - const url = new URL(c.req.url); - const threadProvider = getThreadProvider(); - const sessionProvider = getSessionProvider(); - - await context.with(extractedContext, async (): Promise => { - const tracer = trace.getTracer('http-server'); - - // Build enriched traceState BEFORE span creation so the - // recording span inherits it and it gets exported to OTLP. - // Previously, traceState was set on a NonRecordingSpan *after* - // the recording span was created, which meant it was propagated - // to outbound requests but never appeared in the exported span - // data (ClickHouse TraceState column was empty). - const projectId = runtimeConfig.getProjectId(); - const orgId = runtimeConfig.getOrganizationId(); - const deploymentId = runtimeConfig.getDeploymentId(); - const isDevMode = runtimeConfig.isDevMode(); - - internal.info( - '[session] config: orgId=%s, projectId=%s, deploymentId=%s, isDevMode=%s', - orgId ?? 'NOT SET (AGENTUITY_CLOUD_ORG_ID)', - projectId ?? 'NOT SET (AGENTUITY_CLOUD_PROJECT_ID)', - deploymentId ?? 'none', - isDevMode - ); - - const enrichedContext = enrichContextWithTraceState(context.active(), { - pid: projectId, - oid: orgId, - did: deploymentId, - d: isDevMode ? '1' : undefined, - }); - - await tracer.startActiveSpan( - `${method} ${url.pathname}`, - { - kind: SpanKind.SERVER, - attributes: { - 'http.method': method, - 'http.host': url.host, - 'http.user_agent': c.req.header('user-agent') || '', - 'http.path': url.pathname, - }, - }, - enrichedContext, - async (span): Promise => { - // Track request duration from the SDK's perspective - const requestStartTime = performance.now(); - const sctx = span.spanContext(); - const sessionId = sctx?.traceId ? `sess_${sctx.traceId}` : generateId('sess'); - - const thread = await threadProvider.restore(c); - const session = await sessionProvider.restore(thread, sessionId); - const handler = new WaitUntilHandler(tracer); - const isWsUpgrade = c.req.header('upgrade')?.toLowerCase() === 'websocket'; - - c.set('sessionId', sessionId); - c.set('thread', thread); - c.set('session', session); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set('waitUntilHandler', handler); - const agentIds = new Set(); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set('agentIds', agentIds); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c as any).set('trigger', isWsUpgrade ? 'websocket' : 'api'); - - // Send session start event (so evalruns can reference this session) - // The provider decides whether to send based on available data (orgId, projectId, etc.) - // Skip for workbench routes that don't need session tracking - const sessionEventProvider = getSessionEventProvider(); - if (sessionEventProvider && !skipSessionEvents) { - try { - // Look up routeId from build metadata by matching method and path - // We need to do this here because the router wrapper hasn't run yet - const metadata = loadBuildMetadata(); - const methodUpper = c.req.method.toUpperCase(); - - // Normalize paths: trim trailing slashes for consistent matching - const normalizePath = (p: string) => { - const decoded = decodeURIComponent(p); - return decoded.endsWith('/') && decoded.length > 1 - ? decoded.slice(0, -1) - : decoded; - }; - const requestPath = normalizePath(c.req.path); - - // Helper to check if requestPath ends with routePath at a segment boundary - // e.g., "/api/translate" matches "/translate" but "/api/translate-v2" does not - const matchesAtSegmentBoundary = (reqPath: string, routePath: string) => { - if (reqPath === routePath) return true; - if (!reqPath.endsWith(routePath)) return false; - // Check that the character before the match is a path separator - const charBeforeMatch = reqPath[reqPath.length - routePath.length - 1]; - return charBeforeMatch === '/'; - }; - - // Try matching by exact normalized path first - let route = metadata?.routes?.find( - (r) => - r.method.toUpperCase() === methodUpper && - normalizePath(r.path) === requestPath - ); - // Fall back to segment-boundary matching (handles /api/translate matching /translate) - if (!route) { - route = metadata?.routes?.find( - (r) => - r.method.toUpperCase() === methodUpper && - matchesAtSegmentBoundary(requestPath, normalizePath(r.path)) - ); - } - const routeId = route?.id || ''; - - await sessionEventProvider.start({ - id: sessionId, - threadId: thread.id, - orgId: orgId || '', - projectId: projectId || '', - deploymentId: deploymentId || undefined, - devmode: isDevMode, - trigger: isWsUpgrade ? 'websocket' : 'api', - routeId, - environment: runtimeConfig.getEnvironment(), - url: c.req.path, - method: c.req.method, - }); - } catch (_ex) { - // Silently ignore session start errors - don't block request - } - } - - // Factor out finalization logic so it can run synchronously or deferred - const finalizeSession = async (statusCode?: number, error?: string) => { - internal.info( - '[session] saving session %s (thread: %s) (error: %s)', - sessionId, - thread.id, - error - ); - await sessionProvider.save(session); - internal.info('[session] session saved, now saving thread'); - await threadProvider.save(thread); - internal.info('[session] thread saved'); - - // Send session complete event (skip for workbench routes) - if (sessionEventProvider && !skipSessionEvents) { - try { - const userData = session.serializeUserData(); - internal.info( - '[session] sending session complete event, userData: %s', - userData ? `${userData.length} bytes` : 'none' - ); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const agentIdsSet = (c as any).get('agentIds') as Set | undefined; - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - internal.info('[session] agentIds: %o', agentIds); - const isEmpty = await thread.empty(); - await sessionEventProvider.complete({ - id: sessionId, - threadId: isEmpty ? null : thread.id, - statusCode: statusCode ?? c.res?.status ?? 200, - error, - agentIds: agentIds?.length ? agentIds : undefined, - userData, - }); - internal.info('[session] session complete event sent'); - } catch (ex) { - internal.info( - '[session] session complete event failed: %s', - ex instanceof Error ? ex.message : ex - ); - // Silently ignore session complete errors - don't block response - } - } - }; - - // Track state for finalization - let responseStatus = 200; - let errorMessage: string | undefined; - let handlerDurationMs = 0; - // Track whether span should be ended in finally block (false for streaming - ended in waitUntil) - let shouldEndSpanInFinally = true; - - try { - internal.info( - '[request] %s %s - handler starting (session: %s)', - method, - url.pathname, - sessionId - ); - - await next(); - - // Capture timing immediately after next() returns - this is when the handler completed - // This is the HTTP response time we want to report (excludes waitUntil/finalization) - handlerDurationMs = performance.now() - requestStartTime; - - internal.info( - '[request] %s %s - handler completed in %sms (session: %s)', - method, - url.pathname, - handlerDurationMs.toFixed(2), - sessionId - ); - - // Check if this is a streaming response that needs deferred finalization - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const streamDone = (c as any).get(STREAM_DONE_PROMISE_KEY) as - | Promise - | undefined; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const isStreaming = Boolean((c as any).get(IS_STREAMING_RESPONSE_KEY)); - - // Check if this is a WebSocket response that needs deferred finalization - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const wsDone = (c as any).get(WS_DONE_PROMISE_KEY) as Promise | undefined; - - // Check if Hono caught an error (c.error is set by Hono's error handler) - // or if the response status indicates an error - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const honoError = (c as any).error as Error | undefined; - responseStatus = c.res?.status ?? 200; - const isError = honoError || responseStatus >= 500; - - internal.info( - '[request] %s %s - status: %d, streaming: %s, websocket: %s, error: %s (session: %s)', - method, - url.pathname, - responseStatus, - isStreaming, - Boolean(wsDone), - isError, - sessionId - ); - - if (isError) { - // Capture error message for finalization - errorMessage = honoError - ? (honoError.stack ?? honoError.message) - : `HTTP ${responseStatus}`; - span.setStatus({ - code: SpanStatusCode.ERROR, - message: honoError?.message ?? errorMessage, - }); - if (honoError) { - span.recordException(honoError); - } - } else { - span.setStatus({ code: SpanStatusCode.OK }); - } - - // For streaming responses, defer everything until stream completes - if (isStreaming && streamDone) { - internal.info( - '[request] %s %s - streaming response, deferring finalization (session: %s)', - method, - url.pathname, - sessionId - ); - - // For streaming, we end the span inside waitUntil after setting attributes - shouldEndSpanInFinally = false; - - // Capture pending promises BEFORE adding finalization waitUntil to avoid deadlock - const pendingPromises = handler.getPendingSnapshot(); - const hasPendingTasks = pendingPromises.length > 0; - - if (hasPendingTasks) { - internal.info( - '[request] %s %s - %d pending waitUntil tasks to wait for after stream (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - } - - // Capture values needed for span attributes (responseStatus already captured above) - const capturedResponseStatus = responseStatus; - const capturedErrorMessage = errorMessage; - - // Use waitUntil to handle stream completion and finalization - // This runs AFTER the response is sent to the client - // Note: We intentionally do NOT use noSpan here - the waitUntil span helps - // track the streaming finalization work in telemetry - handler.waitUntil(async () => { - // Track if stream ended with error so we can update finalization status - let streamError: unknown = undefined; - - try { - await streamDone; - internal.info( - '[request] %s %s - stream completed (session: %s)', - method, - url.pathname, - sessionId - ); - } catch (ex) { - streamError = ex; - internal.info( - '[request] %s %s - stream ended with error: %s (session: %s)', - method, - url.pathname, - ex, - sessionId - ); - } - - // Record duration now that stream is complete - set attributes BEFORE ending span - const streamDurationMs = performance.now() - requestStartTime; - const durationNs = Math.round(streamDurationMs * 1_000_000); - internal.info( - '[request] %s %s - recording stream duration: %sms (session: %s)', - method, - url.pathname, - streamDurationMs.toFixed(2), - sessionId - ); - - // Determine final status - use stream error if present - const finalStatus = streamError ? 500 : capturedResponseStatus; - const finalErrorMessage = streamError - ? streamError instanceof Error - ? (streamError.stack ?? streamError.message) - : String(streamError) - : capturedErrorMessage; - - try { - // Wait for pending tasks (evals, etc.) captured BEFORE this waitUntil was added - if (hasPendingTasks) { - internal.info( - '[request] %s %s - waiting for %d pending waitUntil tasks (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - const logger = c.get('logger'); - await handler.waitForPromises(pendingPromises, logger, sessionId); - internal.info( - '[request] %s %s - all waitUntil tasks complete (session: %s)', - method, - url.pathname, - sessionId - ); - } - - // Finalize session after stream completes and evals finish - await finalizeSession( - finalStatus >= 500 ? finalStatus : undefined, - finalErrorMessage - ); - internal.info( - '[request] %s %s - stream session finalization complete (session: %s)', - method, - url.pathname, - sessionId - ); - } finally { - // Set span attributes and end span AFTER all work is done - span.setAttribute('@agentuity/request.duration', durationNs); - span.setAttribute('http.status_code', finalStatus); - - // Set span status based on whether there was an error - if (streamError) { - span.setStatus({ - code: SpanStatusCode.ERROR, - message: finalErrorMessage ?? 'Stream ended with error', - }); - if (streamError instanceof Error) { - span.recordException(streamError); - } - } else { - span.setStatus({ code: SpanStatusCode.OK }); - } - - span.end(); - internal.info( - '[request] %s %s - stream span ended (session: %s)', - method, - url.pathname, - sessionId - ); - // Note: We don't call waitUntilAll() here because this waitUntil callback - // IS the final cleanup task. Calling waitUntilAll() would deadlock since - // it would wait for this very promise to complete. - } - }); - } else if (wsDone) { - // WebSocket upgrade — end the span immediately (short-lived upgrade span) - // Per OTel conventions, spans should be short-lived. The HTTP upgrade - // request is a discrete event that completes in milliseconds. Keeping - // a span open for the entire WS connection lifetime (minutes/hours) is - // non-standard and causes issues with OTel backends. - internal.info( - '[request] %s %s - websocket upgrade, ending span immediately (session: %s)', - method, - url.pathname, - sessionId - ); - - // End the upgrade span now with the upgrade duration - const upgradeDurationNs = Math.round(handlerDurationMs * 1_000_000); - span.setAttribute('@agentuity/request.duration', upgradeDurationNs); - span.setAttribute('http.status_code', responseStatus); - span.setStatus({ code: SpanStatusCode.OK }); - span.end(); - shouldEndSpanInFinally = false; // already ended - - // Session finalization still defers until WS close, but without holding a span - const pendingPromises = handler.getPendingSnapshot(); - const hasPendingTasks = pendingPromises.length > 0; - - if (hasPendingTasks) { - internal.info( - '[request] %s %s - %d pending waitUntil tasks to wait for after websocket close (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - } - - handler.waitUntil(async () => { - let wsError: unknown = undefined; - - try { - await wsDone; - internal.info( - '[request] %s %s - websocket closed (session: %s)', - method, - url.pathname, - sessionId - ); - } catch (ex) { - wsError = ex; - internal.info( - '[request] %s %s - websocket closed with error: %s (session: %s)', - method, - url.pathname, - ex, - sessionId - ); - } - - const finalStatus = wsError ? 500 : responseStatus; - const finalErrorMessage = wsError - ? wsError instanceof Error - ? (wsError.stack ?? wsError.message) - : String(wsError) - : errorMessage; - - // Wait for pending tasks captured BEFORE this waitUntil was added - if (hasPendingTasks) { - internal.info( - '[request] %s %s - waiting for %d pending waitUntil tasks (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - const logger = c.get('logger'); - await handler.waitForPromises(pendingPromises, logger, sessionId); - internal.info( - '[request] %s %s - all waitUntil tasks complete (session: %s)', - method, - url.pathname, - sessionId - ); - } - - // Finalize session after WebSocket closes - await finalizeSession( - finalStatus >= 500 ? finalStatus : undefined, - finalErrorMessage - ); - internal.info( - '[request] %s %s - websocket session finalization complete (session: %s)', - method, - url.pathname, - sessionId - ); - }); - } else { - // Non-streaming: record duration immediately - const durationNs = Math.round(handlerDurationMs * 1_000_000); - internal.info( - '[request] %s %s - recording duration: %sms (%dns) (session: %s)', - method, - url.pathname, - handlerDurationMs.toFixed(2), - durationNs, - sessionId - ); - span.setAttribute('@agentuity/request.duration', durationNs); - span.setAttribute('http.status_code', responseStatus); - - // Capture pending promises BEFORE adding finalization waitUntil to avoid deadlock. - // If we called waitUntilAll inside waitUntil, it would wait for itself. - const pendingPromises = handler.getPendingSnapshot(); - const hasPendingTasks = pendingPromises.length > 0; - - if (hasPendingTasks) { - internal.info( - '[request] %s %s - %d pending waitUntil tasks to wait for (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - } - - // Capture values for use in waitUntil callback - const capturedResponseStatus = responseStatus; - const capturedErrorMessage = errorMessage; - - // Defer session finalization to run AFTER response is sent - // Use noSpan: true since finalizeSession creates its own Session End span - handler.waitUntil( - async () => { - // Wait for the snapshot of pending tasks (evals, etc.) captured BEFORE this waitUntil was added - if (hasPendingTasks) { - internal.info( - '[request] %s %s - waiting for %d pending waitUntil tasks (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - const logger = c.get('logger'); - await handler.waitForPromises(pendingPromises, logger, sessionId); - internal.info( - '[request] %s %s - all waitUntil tasks complete (session: %s)', - method, - url.pathname, - sessionId - ); - } - - // Finalize session - this is the actual work - internal.info( - '[request] %s %s - starting session finalization (session: %s)', - method, - url.pathname, - sessionId - ); - try { - await finalizeSession( - capturedResponseStatus >= 500 ? capturedResponseStatus : undefined, - capturedErrorMessage - ); - internal.info( - '[request] %s %s - session finalization complete (session: %s)', - method, - url.pathname, - sessionId - ); - } catch (ex) { - internal.error( - '[request] %s %s - session finalization failed: %s (session: %s)', - method, - url.pathname, - ex, - sessionId - ); - } - // Note: We don't call waitUntilAll() here because this waitUntil callback - // IS the final cleanup task. Calling waitUntilAll() would deadlock since - // it would wait for this very promise to complete. - }, - { noSpan: true } - ); - } - } catch (ex) { - // Record request metrics even on exceptions (500 status) - const exceptionDurationMs = performance.now() - requestStartTime; - const durationNs = Math.round(exceptionDurationMs * 1_000_000); - internal.info( - '[request] %s %s - recording exception duration: %sms (session: %s)', - method, - url.pathname, - exceptionDurationMs.toFixed(2), - sessionId - ); - span.setAttribute('@agentuity/request.duration', durationNs); - span.setAttribute('http.status_code', 500); - - if (ex instanceof Error) { - span.recordException(ex); - } - errorMessage = ex instanceof Error ? (ex.stack ?? ex.message) : String(ex); - responseStatus = 500; - span.setStatus({ - code: SpanStatusCode.ERROR, - message: ex instanceof Error ? ex.message : String(ex), - }); - - // Capture error message for use in waitUntil callback - const capturedErrorMessage = errorMessage; - - // Capture pending promises BEFORE adding finalization waitUntil to avoid deadlock - const pendingPromises = handler.getPendingSnapshot(); - const hasPendingTasks = pendingPromises.length > 0; - - if (hasPendingTasks) { - internal.info( - '[request] %s %s - %d pending waitUntil tasks to wait for after error (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - } - - // Still defer finalization even on error - // Use noSpan: true since finalizeSession creates its own Session End span - handler.waitUntil( - async () => { - // Wait for pending tasks (evals, etc.) captured BEFORE this waitUntil was added - if (hasPendingTasks) { - internal.info( - '[request] %s %s - waiting for %d pending waitUntil tasks (session: %s)', - method, - url.pathname, - pendingPromises.length, - sessionId - ); - const logger = c.get('logger'); - await handler.waitForPromises(pendingPromises, logger, sessionId); - internal.info( - '[request] %s %s - all waitUntil tasks complete (session: %s)', - method, - url.pathname, - sessionId - ); - } - - try { - await finalizeSession(500, capturedErrorMessage); - } catch (finalizeEx) { - internal.error( - '[request] %s %s - error session finalization failed: %s (session: %s)', - method, - url.pathname, - finalizeEx, - sessionId - ); - } - // Note: We don't call waitUntilAll() here because this waitUntil callback - // IS the final cleanup task. Calling waitUntilAll() would deadlock since - // it would wait for this very promise to complete. - }, - { noSpan: true } - ); - - throw ex; - } finally { - // Set response headers - this is the only thing that should block the response - const headers: Record = {}; - propagation.inject(context.active(), headers); - for (const key of Object.keys(headers)) { - c.header(key, headers[key]); - } - const traceId = sctx?.traceId || sessionId.replace(/^sess_/, ''); - c.header(SESSION_HEADER, `sess_${traceId}`); - - internal.info( - '[request] %s %s - response ready, duration: %sms (session: %s)', - method, - url.pathname, - handlerDurationMs.toFixed(2), - sessionId - ); - - // Only end span here for non-streaming responses - // For streaming, span is ended in the waitUntil callback after setting duration attributes - if (shouldEndSpanInFinally) { - span.end(); - } - } - } - ); - }); - }); -} - -/** - * Create compression middleware with lazy config resolution. - * - * Compresses response bodies using gzip or deflate based on the Accept-Encoding header. - * Config is resolved at request time, allowing it to be set via createApp(). - * - * @param staticConfig - Optional static config that overrides app config - * - * @example - * ```typescript - * // Use with default settings - * app.use('*', createCompressionMiddleware()); - * - * // Or configure via createApp - * const app = await createApp({ - * compression: { - * threshold: 2048, - * } - * }); - * ``` - */ -export function createCompressionMiddleware(staticConfig?: CompressionConfig | false) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return createMiddleware>(async (c, next) => { - // Check if compression is explicitly disabled - if (staticConfig === false || staticConfig?.enabled === false) { - return next(); - } - - const config: CompressionConfig = { ...staticConfig }; - - const { enabled = true, threshold = 1024, filter, honoOptions } = config; - - // Skip if explicitly disabled - if (!enabled) { - return next(); - } - - // Skip WebSocket upgrade requests - const upgrade = c.req.header('upgrade'); - if (upgrade && upgrade.toLowerCase() === 'websocket') { - return next(); - } - - // Skip if no Accept-Encoding header - const acceptEncoding = c.req.header('accept-encoding'); - if (!acceptEncoding) { - return next(); - } - - // Check custom filter - if (filter && !filter(c)) { - return next(); - } - - // Create and run the Hono compress middleware - const compressMiddleware = compress({ - threshold, - ...honoOptions, - }); - - await compressMiddleware(c, next); - }); -} - -/** - * Create lightweight thread middleware for web routes (analytics). - * - * Sets thread cookie that persists across page views for client-side analytics. - * This middleware does NOT: - * - Create or track sessions (no session ID) - * - Set session/thread response headers - * - Send events to Catalyst sessions table - * - * This is intentionally separate from createOtelMiddleware to avoid - * polluting the sessions table with web browsing activity. - * - * - Thread cookie (atid_a): Analytics-readable copy, 1-week expiry - */ -export function createWebSessionMiddleware() { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return createMiddleware>(async (c, next) => { - // Import providers dynamically to avoid circular deps - const { getThreadProvider } = await import('./_services'); - - const secret = getSessionSecret(); - - // Use ThreadProvider.restore() to get/create thread (handles header, cookie, generation) - const threadProvider = getThreadProvider(); - const thread = await threadProvider.restore(c); - - // Set thread cookie for analytics - // httpOnly: false so beacon script can read it - const isSecure = c.req.url.startsWith('https://'); - await setSignedCookie(c, 'atid_a', thread.id, secret, { - httpOnly: false, // Readable by JavaScript for analytics - secure: isSecure, - sameSite: 'Lax', - path: '/', - maxAge: 604800, // 1 week - }); - - // Store in context for handler to access in same request - // (cookies aren't readable until the next request) - c.set('_webThreadId', thread.id); - - await next(); - }); -} - -/** - * Get the secret used for signing session/thread cookies. - * Uses AGENTUITY_SDK_KEY if available, falls back to 'agentuity'. - */ -export function getSessionSecret(): string { - return process.env.AGENTUITY_SDK_KEY || 'agentuity'; -} diff --git a/packages/runtime/src/otel/config.ts b/packages/runtime/src/otel/config.ts deleted file mode 100644 index 122f69926..000000000 --- a/packages/runtime/src/otel/config.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { LogLevel } from '@agentuity/core'; -import type { SpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { getServiceUrls } from '@agentuity/server'; -import * as runtimeConfig from '../_config'; -import type { OtelConfig, OtelResponse } from './otel'; -import { registerOtel } from './otel'; - -/** - * Configuration for user provided OpenTelemetry - */ -export interface CustomizedOtelConfig { - endpoint: string; - // only supports http/json for now - // protocol: 'grpc' | 'http/protobuf' | 'http/json'; - serviceName: string; - resourceAttributes: Record; - headers: Record; -} - -interface OtelRegisterConfig { - processors?: SpanProcessor[]; - logLevel?: LogLevel; -} - -export function register(registerConfig: OtelRegisterConfig): OtelResponse { - const region = process.env.AGENTUITY_REGION ?? 'usc'; - const serviceUrls = getServiceUrls(region); - const url = serviceUrls.otel; - const bearerToken = process.env.AGENTUITY_OTLP_BEARER_TOKEN ?? process.env.AGENTUITY_SDK_KEY; - const config: OtelConfig = { - spanProcessors: registerConfig.processors, - name: runtimeConfig.getAppName(), - version: runtimeConfig.getAppVersion(), - cliVersion: runtimeConfig.getCLIVersion(), - devmode: runtimeConfig.isDevMode(), - orgId: runtimeConfig.getOrganizationId(), - projectId: runtimeConfig.getProjectId(), - deploymentId: runtimeConfig.getDeploymentId(), - environment: runtimeConfig.getEnvironment(), - logLevel: registerConfig.logLevel, - jsonlBasePath: process.env.AGENTUITY_CLOUD_EXPORT_DIR, - bearerToken, - url, - }; - - return registerOtel(config); -} diff --git a/packages/runtime/src/router.ts b/packages/runtime/src/router.ts deleted file mode 100644 index b03761253..000000000 --- a/packages/runtime/src/router.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Hono, type Env as HonoEnv, type Schema } from 'hono'; -import type { BlankSchema } from 'hono/types'; -import type { Env } from './app'; - -// Re-export both Env types -export type { Env }; -export type { HonoEnv }; - -// Re-export WebSocketConnection from handlers -export type { WebSocketConnection } from './handlers/websocket'; - -// Module augmentation to extend Hono types for Agentuity runtime -declare module 'hono' { - // Extend Context with waitUntil for route handlers - interface Context { - /** - * Schedule a background task that runs after the response is sent. - * Works the same as `ctx.waitUntil()` in agent handlers. - * - * @example - * ```typescript - * router.post('/data', async (c) => { - * c.waitUntil(async () => { - * await sendAnalytics(c.req.url); - * }); - * return c.json({ success: true }); - * }); - * ``` - */ - waitUntil(callback: Promise | (() => void | Promise)): void; - } -} - -/** - * Creates a Hono router for use with Agentuity. - * - * This is a thin wrapper around `new Hono()` that provides the correct - * Agentuity environment types. Hono's full type inference chain is - * preserved — the Schema type parameter accumulates route definitions - * as you chain `.get()`, `.post()`, etc. - * - * @template E - Environment type (defaults to Agentuity's Env) - * @template S - Schema type for route definitions - * - * @returns Hono router instance - * - * @example - * ```typescript - * import { createRouter, websocket, sse, stream, cron } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * // Standard HTTP routes — full type inference - * router.get('/hello', (c) => c.text('Hello!')); - * router.post('/data', async (c) => { - * const body = await c.req.json(); - * return c.json({ received: body }); - * }); - * - * // WebSocket connection - * router.get('/ws', websocket((c, ws) => { - * ws.onMessage((event) => { - * ws.send('Echo: ' + event.data); - * }); - * })); - * - * // Server-Sent Events - * router.get('/events', sse((c, stream) => { - * stream.writeSSE({ data: 'Hello', event: 'message' }); - * })); - * ``` - */ -export const createRouter = (): Hono => { - return new Hono(); -}; diff --git a/packages/runtime/src/services/evalrun/composite.ts b/packages/runtime/src/services/evalrun/composite.ts deleted file mode 100644 index 49e502749..000000000 --- a/packages/runtime/src/services/evalrun/composite.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - type EvalRunEventProvider, - type EvalRunStartEvent, - type EvalRunCompleteEvent, -} from '@agentuity/core'; - -/** - * An implementation of the EvalRunEventProvider which wraps multiple providers - */ -export class CompositeEvalRunEventProvider implements EvalRunEventProvider { - private providers: EvalRunEventProvider[]; - - constructor(...providers: EvalRunEventProvider[]) { - this.providers = providers; - } - - /** - * called when the eval run starts - * - * @param event EvalRunStartEvent - */ - async start(event: EvalRunStartEvent): Promise { - await Promise.allSettled(this.providers.map((provider) => provider.start(event))); - } - - /** - * called when the eval run completes - * - * @param event EvalRunCompleteEvent - */ - async complete(event: EvalRunCompleteEvent): Promise { - await Promise.allSettled(this.providers.map((provider) => provider.complete(event))); - } -} diff --git a/packages/runtime/src/services/evalrun/http.ts b/packages/runtime/src/services/evalrun/http.ts deleted file mode 100644 index 88aa4dc30..000000000 --- a/packages/runtime/src/services/evalrun/http.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { - APIClient, - APIResponseSchemaNoData, - ValidationInputError, - ValidationOutputError, -} from '@agentuity/server'; -import { - type EvalRunEventProvider, - type EvalRunStartEvent, - EvalRunStartEventDelayedSchema, - EvalRunCompleteEventDelayedSchema, - type EvalRunCompleteEvent, - type Logger, - StructuredError, -} from '@agentuity/core'; -import { context, trace, SpanStatusCode } from '@opentelemetry/api'; -import { internal } from '../../logger/internal'; - -const EvalRunResponseError = StructuredError('EvalRunResponseError'); - -/** - * An implementation of the EvalRunEventProvider which uses HTTP for delivery - */ -export class HTTPEvalRunEventProvider implements EvalRunEventProvider { - private apiClient: APIClient; - private logger: Logger; - private baseUrl: string; - - constructor(client: APIClient, logger: Logger, baseUrl: string) { - this.apiClient = client; - this.logger = logger; - this.baseUrl = baseUrl; - } - - /** - * called when the eval run starts - * - * @param event EvalRunStartEvent - */ - async start(event: EvalRunStartEvent): Promise { - const tracer = trace.getTracer('evalrun'); - const currentContext = context.active(); - const span = tracer.startSpan('Eval Start', {}, currentContext); - - const endpoint = '/evalrun'; - const fullUrl = `${this.baseUrl}${endpoint}`; - - const payload = { ...event, timestamp: Date.now() }; - - // Log full payload using internal logger - internal.info('[EVALRUN HTTP] ========== START PAYLOAD =========='); - internal.info('[EVALRUN HTTP] id: %s', payload.id); - internal.info('[EVALRUN HTTP] evalId: %s', payload.evalId); - internal.info('[EVALRUN HTTP] evalIdentifier: %s', payload.evalIdentifier); - internal.info('[EVALRUN HTTP] sessionId: %s', payload.sessionId); - internal.info('[EVALRUN HTTP] orgId: %s', payload.orgId); - internal.info('[EVALRUN HTTP] projectId: %s', payload.projectId); - internal.info('[EVALRUN HTTP] devmode: %s', payload.devmode); - internal.info('[EVALRUN HTTP] deploymentId: %s', payload.deploymentId); - internal.info('[EVALRUN HTTP] spanId: %s', payload.spanId); - internal.info('[EVALRUN HTTP] URL: POST %s', fullUrl); - internal.info('[EVALRUN HTTP] ============================================'); - - try { - const spanContext = trace.setSpan(currentContext, span); - const resp = await context.with(spanContext, () => - this.apiClient.post( - endpoint, - payload, - APIResponseSchemaNoData(), - EvalRunStartEventDelayedSchema - ) - ); - - if (resp.success) { - this.logger.debug('[EVALRUN HTTP] Start event sent successfully: %s', event.id); - span.setStatus({ code: SpanStatusCode.OK }); - return; - } - const errorMsg = resp.message || 'Unknown error'; - this.logger.error('[EVALRUN HTTP] Start event failed: %s, error: %s', event.id, errorMsg); - span.setStatus({ code: SpanStatusCode.ERROR, message: errorMsg }); - throw new EvalRunResponseError({ message: errorMsg }); - } catch (error) { - this.logger.error( - '[EVALRUN HTTP] Start event exception: %s, error: %s', - event.id, - error instanceof Error ? error.message : String(error) - ); - // Log validation errors if available - if ( - (error instanceof ValidationInputError || error instanceof ValidationOutputError) && - error.issues?.length - ) { - this.logger.error( - '[EVALRUN HTTP] Validation issues: %s', - JSON.stringify(error.issues, null, 2) - ); - } - span.recordException(error as Error); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error instanceof Error ? error.message : String(error), - }); - throw error; - } finally { - span.end(); - } - } - - /** - * called when the eval run completes - * - * @param event EvalRunCompleteEvent - */ - async complete(event: EvalRunCompleteEvent): Promise { - const tracer = trace.getTracer('evalrun'); - const currentContext = context.active(); - const span = tracer.startSpan('Eval End', {}, currentContext); - - const endpoint = '/evalrun'; - const fullUrl = `${this.baseUrl}${endpoint}`; - this.logger.debug('[EVALRUN HTTP] Sending eval run complete event: %s', event.id); - this.logger.debug('[EVALRUN HTTP] URL: %s %s', 'PUT', fullUrl); - this.logger.debug('[EVALRUN HTTP] Base URL: %s', this.baseUrl); - - try { - const spanContext = trace.setSpan(currentContext, span); - const resp = await context.with(spanContext, () => - this.apiClient.put( - endpoint, - { ...event, timestamp: Date.now() }, - APIResponseSchemaNoData(), - EvalRunCompleteEventDelayedSchema - ) - ); - - if (resp.success) { - this.logger.debug('[EVALRUN HTTP] Complete event sent successfully: %s', event.id); - span.setStatus({ code: SpanStatusCode.OK }); - return; - } - const errorMsg = resp.message || 'Unknown error'; - this.logger.error( - '[EVALRUN HTTP] Complete event failed: %s, error: %s', - event.id, - errorMsg - ); - span.setStatus({ code: SpanStatusCode.ERROR, message: errorMsg }); - throw new EvalRunResponseError({ message: errorMsg }); - } catch (error) { - this.logger.error( - '[EVALRUN HTTP] Complete event exception: %s, error: %s', - event.id, - error instanceof Error ? error.message : String(error) - ); - span.recordException(error as Error); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error instanceof Error ? error.message : String(error), - }); - throw error; - } finally { - span.end(); - } - } -} diff --git a/packages/runtime/src/services/evalrun/index.ts b/packages/runtime/src/services/evalrun/index.ts deleted file mode 100644 index 39540e60c..000000000 --- a/packages/runtime/src/services/evalrun/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { HTTPEvalRunEventProvider } from './http'; -export { LocalEvalRunEventProvider } from './local'; -export { JSONEvalRunEventProvider } from './json'; -export { CompositeEvalRunEventProvider } from './composite'; diff --git a/packages/runtime/src/services/evalrun/json.ts b/packages/runtime/src/services/evalrun/json.ts deleted file mode 100644 index edf4567eb..000000000 --- a/packages/runtime/src/services/evalrun/json.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { - type EvalRunEventProvider, - type EvalRunStartEvent, - type EvalRunCompleteEvent, -} from '@agentuity/core'; - -/** - * An implementation of the EvalRunEventProvider which writes to JSON files - */ -export class JSONEvalRunEventProvider implements EvalRunEventProvider { - private exportDir: string; - - constructor(exportDir: string) { - this.exportDir = exportDir; - } - - /** - * called when the eval run starts - * - * @param event EvalRunStartEvent - */ - async start(event: EvalRunStartEvent): Promise { - const data = { - type: 'evalrun_start', - timestamp: Date.now(), - ...event, - }; - const filename = `${this.exportDir}/evalrun-${event.id}-start.json`; - await Bun.write(filename, JSON.stringify(data, null, 2)); - } - - /** - * called when the eval run completes - * - * @param event EvalRunCompleteEvent - */ - async complete(event: EvalRunCompleteEvent): Promise { - const data = { - type: 'evalrun_complete', - timestamp: Date.now(), - ...event, - }; - const filename = `${this.exportDir}/evalrun-${event.id}-complete.json`; - await Bun.write(filename, JSON.stringify(data, null, 2)); - } -} diff --git a/packages/runtime/src/services/evalrun/local.ts b/packages/runtime/src/services/evalrun/local.ts deleted file mode 100644 index d413898ca..000000000 --- a/packages/runtime/src/services/evalrun/local.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - type EvalRunEventProvider, - type EvalRunStartEvent, - type EvalRunCompleteEvent, -} from '@agentuity/core'; - -/** - * An implementation of the EvalRunEventProvider which just logs locally - */ -export class LocalEvalRunEventProvider implements EvalRunEventProvider { - /** - * called when the eval run starts - * - * @param event EvalRunStartEvent - */ - async start(event: EvalRunStartEvent): Promise { - console.log('EvalRun started:', event); - } - - /** - * called when the eval run completes - * - * @param event EvalRunCompleteEvent - */ - async complete(event: EvalRunCompleteEvent): Promise { - console.log('EvalRun completed:', event); - } -} diff --git a/packages/runtime/src/services/local/README.md b/packages/runtime/src/services/local/README.md deleted file mode 100644 index 51ebef956..000000000 --- a/packages/runtime/src/services/local/README.md +++ /dev/null @@ -1,1576 +0,0 @@ -# Local SQLite Services Implementation Plan - -## Overview - -Implement local SQLite-backed storage services for development and testing without requiring authentication or external service dependencies. - -### Goals - -- Provide fully functional local implementations of all 4 storage service interfaces -- Use Bun's built-in SQLite for storage -- Support multi-project data partitioning by normalized directory path -- Enable serving objects/streams via local HTTP endpoints -- Replace current unauthenticated error-throwing services in unauth-app - -### Non-Goals - -- Production performance optimization (acceptable for local dev only) -- Distributed/multi-process access -- Data persistence guarantees beyond SQLite durability - ---- - -## Architecture - -### Database Location - -- **Path**: `$HOME/.config/agentuity/local.db` -- **Driver**: Bun's built-in SQLite (`bun:sqlite`) -- **Connection**: Singleton pattern to avoid multiple opens -- **Initialization**: Create directory and DB file if not exists -- **Auto-cleanup**: On startup, orphaned project data is automatically removed (projects whose directories no longer exist) - -### Project Partitioning - -All tables include a `project_path` column storing the **normalized absolute path** of the project directory. This allows: - -- Multiple projects to share the same database -- Easy querying/filtering by project -- Data isolation between projects - -### URL Generation - -For `ObjectStorage.createPublicURL()` and stream URLs: - -- Serve via local Hono routes mounted on the main app -- Pattern: `http://localhost:{port}/_agentuity/local/object/{bucket}/{key}` -- Pattern: `http://localhost:{port}/_agentuity/local/stream/{id}` -- Only available when running with local services enabled - ---- - -## File Structure - -``` -packages/runtime/src/services/local/ -├── index.ts # Public exports -├── _db.ts # Singleton DB connection & schema initialization -├── _util.ts # Shared utilities (path normalization, embeddings) -├── _router.ts # Hono router for serving objects and streams -├── keyvalue.ts # LocalKeyValueStorage implementation -├── objectstore.ts # LocalObjectStorage implementation -├── stream.ts # LocalStreamStorage implementation -└── vector.ts # LocalVectorStorage implementation -``` - ---- - -## Database Schema - -### Table: `kv_storage` - -```sql -CREATE TABLE IF NOT EXISTS kv_storage ( - project_path TEXT NOT NULL, - name TEXT NOT NULL, - key TEXT NOT NULL, - value BLOB NOT NULL, - content_type TEXT NOT NULL DEFAULT 'application/octet-stream', - expires_at INTEGER, -- Unix timestamp in milliseconds, NULL = no expiration - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL, - PRIMARY KEY (project_path, name, key) -); - -CREATE INDEX IF NOT EXISTS idx_kv_expires - ON kv_storage(expires_at) - WHERE expires_at IS NOT NULL; -``` - -**Notes**: - -- `value` stored as BLOB (supports any binary data) -- `expires_at` checked on read, expired entries return `exists: false` -- Optional: Background cleanup job to DELETE expired rows - -### Table: `object_storage` - -```sql -CREATE TABLE IF NOT EXISTS object_storage ( - project_path TEXT NOT NULL, - bucket TEXT NOT NULL, - key TEXT NOT NULL, - data BLOB NOT NULL, - content_type TEXT NOT NULL DEFAULT 'application/octet-stream', - content_encoding TEXT, - cache_control TEXT, - content_disposition TEXT, - content_language TEXT, - metadata TEXT, -- JSON string of Record - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL, - PRIMARY KEY (project_path, bucket, key) -); -``` - -**Notes**: - -- `metadata` stored as JSON string, parsed on retrieval -- All HTTP headers preserved for accurate `get()` responses - -### Table: `stream_storage` - -```sql -CREATE TABLE IF NOT EXISTS stream_storage ( - project_path TEXT NOT NULL, - id TEXT PRIMARY KEY, -- UUID - name TEXT NOT NULL, - metadata TEXT, -- JSON string - content_type TEXT NOT NULL DEFAULT 'application/octet-stream', - data BLOB, -- NULL until stream is closed - size_bytes INTEGER NOT NULL DEFAULT 0, - created_at INTEGER NOT NULL -); - -CREATE INDEX IF NOT EXISTS idx_stream_name - ON stream_storage(project_path, name); - -CREATE INDEX IF NOT EXISTS idx_stream_metadata - ON stream_storage(metadata); -``` - -**Notes**: - -- Stream is created with `data = NULL` -- Data buffered in memory during writes -- On `close()`, data persisted to BLOB -- `list()` supports filtering by name and metadata (JSON queries) - -### Table: `vector_storage` - -```sql -CREATE TABLE IF NOT EXISTS vector_storage ( - project_path TEXT NOT NULL, - name TEXT NOT NULL, - id TEXT PRIMARY KEY, -- UUID - key TEXT NOT NULL, - embedding TEXT NOT NULL, -- JSON array of numbers - document TEXT, -- Original text used for embedding (optional) - metadata TEXT, -- JSON object - created_at INTEGER NOT NULL, - updated_at INTEGER NOT NULL, - UNIQUE (project_path, name, key) -); - -CREATE INDEX IF NOT EXISTS idx_vector_lookup - ON vector_storage(project_path, name, key); - -CREATE INDEX IF NOT EXISTS idx_vector_name - ON vector_storage(project_path, name); -``` - -**Notes**: - -- `embedding` stored as JSON array for simplicity -- `document` preserved for retrieval (matches API) -- `search()` does full table scan with in-memory similarity calc (acceptable for local dev) - ---- - -## Implementation Details - -### 1. Database Infrastructure (`_db.ts`) - -```typescript -import { Database } from 'bun:sqlite'; -import { mkdirSync, existsSync } from 'node:fs'; -import { homedir } from 'node:os'; -import { join } from 'node:path'; - -let dbInstance: Database | null = null; - -export function getLocalDB(): Database { - if (dbInstance) { - return dbInstance; - } - - const configDir = join(homedir(), '.config', 'agentuity'); - - if (!existsSync(configDir)) { - mkdirSync(configDir, { recursive: true }); - } - - const dbPath = join(configDir, 'local.db'); - dbInstance = new Database(dbPath); - - initializeTables(dbInstance); - - return dbInstance; -} - -function initializeTables(db: Database): void { - // Create all 4 tables with schemas defined above - // Execute CREATE TABLE IF NOT EXISTS statements - // Execute CREATE INDEX IF NOT EXISTS statements -} - -function cleanupOrphanedProjects(db: Database): void { - // Get the current project path to exclude from cleanup - const currentProjectPath = process.cwd(); - - // Query all tables for unique project paths - // Combine and deduplicate all project paths - // Check which paths no longer exist and are not the current project - // Delete data for removed projects from all tables - - // Logs: "[LocalDB] Cleaned up data for N orphaned project(s)" -} - -export function closeLocalDB(): void { - if (dbInstance) { - dbInstance.close(); - dbInstance = null; - } -} -``` - -**Responsibilities**: - -- Singleton pattern for DB connection -- Create config directory if missing -- Initialize all tables and indexes -- Provide cleanup function for tests - -### 2. Shared Utilities (`_util.ts`) - -```typescript -import { resolve } from 'node:path'; - -/** - * Normalize a project path to an absolute path for consistent DB keys - */ -export function normalizeProjectPath(cwd: string = process.cwd()): string { - return resolve(cwd); -} - -/** - * Simple character-based embedding for local vector search - * Not production-quality, but good enough for local dev/testing - */ -export function simpleEmbedding(text: string, dimensions = 128): number[] { - const vec = new Array(dimensions).fill(0); - const normalized = text.toLowerCase(); - - for (let i = 0; i < normalized.length; i++) { - const charCode = normalized.charCodeAt(i); - vec[i % dimensions] += Math.sin(charCode * (i + 1)); - vec[(i * 2) % dimensions] += Math.cos(charCode); - } - - // Normalize vector - const magnitude = Math.sqrt(vec.reduce((sum, v) => sum + v * v, 0)); - return magnitude > 0 ? vec.map((v) => v / magnitude) : vec; -} - -/** - * Calculate cosine similarity between two vectors - */ -export function cosineSimilarity(a: number[], b: number[]): number { - if (a.length !== b.length) { - throw new Error('Vectors must have the same dimension'); - } - - const dot = a.reduce((sum, ai, i) => sum + ai * b[i], 0); - const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0)); - const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0)); - - return normA > 0 && normB > 0 ? dot / (normA * normB) : 0; -} - -/** - * Get current timestamp in milliseconds - */ -export function now(): number { - return Date.now(); -} -``` - -### 3. KeyValue Storage (`keyvalue.ts`) - -```typescript -import type { Database } from 'bun:sqlite'; -import type { KeyValueStorage, DataResult, KeyValueStorageSetParams } from '@agentuity/core'; -import { now } from './_util'; - -export class LocalKeyValueStorage implements KeyValueStorage { - #db: Database; - #projectPath: string; - - constructor(db: Database, projectPath: string) { - this.#db = db; - this.#projectPath = projectPath; - } - - async get(name: string, key: string): Promise> { - const query = this.#db.query(` - SELECT value, content_type, expires_at - FROM kv_storage - WHERE project_path = ? AND name = ? AND key = ? - `); - - const row = query.get(this.#projectPath, name, key) as { - value: Buffer; - content_type: string; - expires_at: number | null; - } | null; - - if (!row) { - return { exists: false } as DataResultNotFound; - } - - // Check expiration - if (row.expires_at && row.expires_at < now()) { - // Optionally delete expired row - this.delete(name, key); - return { exists: false } as DataResultNotFound; - } - - // Deserialize based on content type - let data: T; - if (row.content_type === 'application/json') { - data = JSON.parse(row.value.toString('utf-8')); - } else if (row.content_type.startsWith('text/')) { - data = row.value.toString('utf-8') as T; - } else { - data = new Uint8Array(row.value) as T; - } - - return { - data, - contentType: row.content_type, - exists: true, - }; - } - - async set( - name: string, - key: string, - value: T, - params?: KeyValueStorageSetParams - ): Promise { - // Validate TTL - if (params?.ttl && params.ttl < 60) { - throw new Error(`ttl must be at least 60 seconds, got ${params.ttl}`); - } - - // Serialize value - let buffer: Buffer; - let contentType = params?.contentType || 'application/octet-stream'; - - if (typeof value === 'string') { - buffer = Buffer.from(value, 'utf-8'); - if (!params?.contentType) { - contentType = 'text/plain'; - } - } else if (value instanceof Uint8Array || value instanceof ArrayBuffer) { - buffer = Buffer.from(value); - } else if (typeof value === 'object') { - buffer = Buffer.from(JSON.stringify(value), 'utf-8'); - contentType = 'application/json'; - } else { - buffer = Buffer.from(String(value), 'utf-8'); - } - - // Calculate expiration - const expiresAt = params?.ttl ? now() + params.ttl * 1000 : null; - const timestamp = now(); - - // UPSERT - const stmt = this.#db.prepare(` - INSERT INTO kv_storage (project_path, name, key, value, content_type, expires_at, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT(project_path, name, key) - DO UPDATE SET - value = excluded.value, - content_type = excluded.content_type, - expires_at = excluded.expires_at, - updated_at = excluded.updated_at - `); - - stmt.run(this.#projectPath, name, key, buffer, contentType, expiresAt, timestamp, timestamp); - } - - async delete(name: string, key: string): Promise { - const stmt = this.#db.prepare(` - DELETE FROM kv_storage - WHERE project_path = ? AND name = ? AND key = ? - `); - - stmt.run(this.#projectPath, name, key); - } -} -``` - -**Key Features**: - -- TTL validation (≥60 seconds) -- Automatic expiration checking on `get()` -- Content-type aware serialization/deserialization -- UPSERT pattern for `set()` - -### 4. Object Storage (`objectstore.ts`) - -```typescript -import type { Database } from 'bun:sqlite'; -import type { - ObjectStorage, - ObjectResult, - ObjectStorePutParams, - CreatePublicURLParams, -} from '@agentuity/core'; -import { now } from './_util'; - -export class LocalObjectStorage implements ObjectStorage { - #db: Database; - #projectPath: string; - #serverUrl: string; - - constructor(db: Database, projectPath: string, serverUrl: string) { - this.#db = db; - this.#projectPath = projectPath; - this.#serverUrl = serverUrl; - } - - async get(bucket: string, key: string): Promise { - if (!bucket?.trim() || !key?.trim()) { - throw new Error('bucket and key are required'); - } - - const query = this.#db.query(` - SELECT data, content_type - FROM object_storage - WHERE project_path = ? AND bucket = ? AND key = ? - `); - - const row = query.get(this.#projectPath, bucket, key) as { - data: Buffer; - content_type: string; - } | null; - - if (!row) { - return { exists: false } as ObjectResultNotFound; - } - - return { - exists: true, - data: new Uint8Array(row.data), - contentType: row.content_type, - }; - } - - async put( - bucket: string, - key: string, - data: Uint8Array | ArrayBuffer | ReadableStream, - params?: ObjectStorePutParams - ): Promise { - if (!bucket?.trim() || !key?.trim()) { - throw new Error('bucket and key are required'); - } - - // Convert data to Buffer - let buffer: Buffer; - if (data instanceof ReadableStream) { - // Read entire stream into buffer - const reader = data.getReader(); - const chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0); - buffer = Buffer.concat( - chunks.map((c) => Buffer.from(c)), - totalLength - ); - } else if (data instanceof ArrayBuffer) { - buffer = Buffer.from(data); - } else { - buffer = Buffer.from(data); - } - - const timestamp = now(); - const metadata = params?.metadata ? JSON.stringify(params.metadata) : null; - - const stmt = this.#db.prepare(` - INSERT INTO object_storage ( - project_path, bucket, key, data, content_type, - content_encoding, cache_control, content_disposition, - content_language, metadata, created_at, updated_at - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT(project_path, bucket, key) - DO UPDATE SET - data = excluded.data, - content_type = excluded.content_type, - content_encoding = excluded.content_encoding, - cache_control = excluded.cache_control, - content_disposition = excluded.content_disposition, - content_language = excluded.content_language, - metadata = excluded.metadata, - updated_at = excluded.updated_at - `); - - stmt.run( - this.#projectPath, - bucket, - key, - buffer, - params?.contentType || 'application/octet-stream', - params?.contentEncoding || null, - params?.cacheControl || null, - params?.contentDisposition || null, - params?.contentLanguage || null, - metadata, - timestamp, - timestamp - ); - } - - async delete(bucket: string, key: string): Promise { - if (!bucket?.trim() || !key?.trim()) { - throw new Error('bucket and key are required'); - } - - const stmt = this.#db.prepare(` - DELETE FROM object_storage - WHERE project_path = ? AND bucket = ? AND key = ? - `); - - const result = stmt.run(this.#projectPath, bucket, key); - return result.changes > 0; - } - - async createPublicURL( - bucket: string, - key: string, - _params?: CreatePublicURLParams - ): Promise { - if (!bucket?.trim() || !key?.trim()) { - throw new Error('bucket and key are required'); - } - - // Verify object exists - const result = await this.get(bucket, key); - if (!result.exists) { - throw new Error('Object not found'); - } - - // Return local HTTP URL - // Note: params.expiresDuration is ignored for local implementation - return `${this.#serverUrl}/_agentuity/local/object/${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`; - } -} -``` - -**Key Features**: - -- ReadableStream support (reads entire stream into memory) -- Metadata stored as JSON -- Public URL generation pointing to local HTTP endpoint -- `delete()` returns true/false based on whether row was deleted - -### 5. Stream Storage (`stream.ts`) - -```typescript -import type { Database } from 'bun:sqlite'; -import type { - StreamStorage, - Stream, - CreateStreamProps, - ListStreamsParams, - ListStreamsResponse, - StreamInfo, -} from '@agentuity/core'; -import { now } from './_util'; -import { join } from 'node:path'; -import { homedir } from 'node:os'; -import { mkdirSync, existsSync, unlinkSync } from 'node:fs'; -import { openSync, writeSync, closeSync, readFileSync } from 'node:fs'; - -export class LocalStreamStorage implements StreamStorage { - #db: Database; - #projectPath: string; - #serverUrl: string; - #tempDir: string; - - constructor(db: Database, projectPath: string, serverUrl: string) { - this.#db = db; - this.#projectPath = projectPath; - this.#serverUrl = serverUrl; - - // Create temp directory for stream buffering - this.#tempDir = join(homedir(), '.config', 'agentuity', 'streams'); - if (!existsSync(this.#tempDir)) { - mkdirSync(this.#tempDir, { recursive: true }); - } - } - - async create(name: string, props?: CreateStreamProps): Promise { - if (!name || name.length < 1 || name.length > 254) { - throw new Error('Stream name must be between 1 and 254 characters'); - } - - const id = crypto.randomUUID(); - const timestamp = now(); - const metadata = props?.metadata ? JSON.stringify(props.metadata) : null; - - // Insert stream record with NULL data - const stmt = this.#db.prepare(` - INSERT INTO stream_storage ( - project_path, id, name, metadata, content_type, created_at - ) - VALUES (?, ?, ?, ?, ?, ?) - `); - - stmt.run( - this.#projectPath, - id, - name, - metadata, - props?.contentType || 'application/octet-stream', - timestamp - ); - - const url = `${this.#serverUrl}/_agentuity/local/stream/${id}`; - - return new LocalStream( - id, - url, - this.#db, - this.#projectPath, - this.#tempDir, - props?.compress ?? false - ); - } - - async list(params?: ListStreamsParams): Promise { - if (params?.limit && (params.limit <= 0 || params.limit > 1000)) { - throw new Error('limit must be between 1 and 1000'); - } - - let query = ` - SELECT id, name, metadata, size_bytes - FROM stream_storage - WHERE project_path = ? - `; - const queryParams: any[] = [this.#projectPath]; - - // Add filters - if (params?.name) { - query += ` AND name = ?`; - queryParams.push(params.name); - } - - if (params?.metadata) { - // Simple JSON matching - check if metadata contains all key-value pairs - for (const [key, value] of Object.entries(params.metadata)) { - query += ` AND metadata LIKE ?`; - queryParams.push(`%"${key}":"${value}"%`); - } - } - - // Get total count - const countQuery = this.#db.query( - query.replace('SELECT id, name, metadata, size_bytes', 'SELECT COUNT(*) as count') - ); - const { count } = countQuery.get(...queryParams) as { count: number }; - - // Add pagination - query += ` ORDER BY created_at DESC`; - if (params?.limit) { - query += ` LIMIT ${params.limit}`; - } - if (params?.offset) { - query += ` OFFSET ${params.offset}`; - } - - const stmt = this.#db.query(query); - const rows = stmt.all(...queryParams) as Array<{ - id: string; - name: string; - metadata: string | null; - size_bytes: number; - }>; - - const streams: StreamInfo[] = rows.map((row) => ({ - id: row.id, - name: row.name, - metadata: row.metadata ? JSON.parse(row.metadata) : {}, - url: `${this.#serverUrl}/_agentuity/local/stream/${row.id}`, - sizeBytes: row.size_bytes, - })); - - return { - success: true, - streams, - total: count, - }; - } - - async delete(id: string): Promise { - if (!id?.trim()) { - throw new Error('Stream id is required'); - } - - const stmt = this.#db.prepare(` - DELETE FROM stream_storage - WHERE project_path = ? AND id = ? - `); - - stmt.run(this.#projectPath, id); - } -} - -class LocalStream extends WritableStream implements Stream { - public readonly id: string; - public readonly url: string; - - #db: Database; - #projectPath: string; - #compressed: boolean; - #tempFilePath: string; - #fileHandle: number | null = null; - #bytesWritten = 0; - #closed = false; - - constructor( - id: string, - url: string, - db: Database, - projectPath: string, - tempDir: string, - compressed: boolean - ) { - super({ - write: async (chunk: Uint8Array) => { - await this.#writeToFile(chunk); - }, - close: async () => { - await this.#persist(); - }, - }); - - this.id = id; - this.url = url; - this.#db = db; - this.#projectPath = projectPath; - this.#compressed = compressed; - this.#tempFilePath = join(tempDir, `${id}.tmp`); - - // Open file for writing - this.#fileHandle = openSync(this.#tempFilePath, 'w'); - } - - get bytesWritten(): number { - return this.#bytesWritten; - } - - get compressed(): boolean { - return this.#compressed; - } - - async write(chunk: string | Uint8Array | ArrayBuffer | Buffer | object): Promise { - if (this.#closed) { - throw new Error('Stream is closed'); - } - - let binary: Uint8Array; - if (chunk instanceof Uint8Array) { - binary = chunk; - } else if (typeof chunk === 'string') { - binary = new TextEncoder().encode(chunk); - } else if (chunk instanceof ArrayBuffer) { - binary = new Uint8Array(chunk); - } else if (typeof chunk === 'object') { - binary = new TextEncoder().encode(JSON.stringify(chunk)); - } else { - binary = new TextEncoder().encode(String(chunk)); - } - - await this.#writeToFile(binary); - } - - async close(): Promise { - if (this.#closed) { - return; - } - - this.#closed = true; - - // Close file handle if open - if (this.#fileHandle !== null) { - closeSync(this.#fileHandle); - this.#fileHandle = null; - } - - await this.#persist(); - } - - getReader(): ReadableStream { - const db = this.#db; - const projectPath = this.#projectPath; - const id = this.id; - - return new ReadableStream({ - start(controller) { - const query = db.query(` - SELECT data FROM stream_storage - WHERE project_path = ? AND id = ? - `); - - const row = query.get(projectPath, id) as { data: Buffer | null } | null; - - if (!row || !row.data) { - controller.error(new Error('Stream not found or not finalized')); - return; - } - - controller.enqueue(new Uint8Array(row.data)); - controller.close(); - }, - }); - } - - async #writeToFile(chunk: Uint8Array): Promise { - if (this.#fileHandle === null) { - throw new Error('File handle is closed'); - } - - const written = writeSync(this.#fileHandle, chunk); - this.#bytesWritten += written; - } - - async #persist(): Promise { - // Read buffered file - let data = readFileSync(this.#tempFilePath); - - // Optional: Apply compression if enabled - if (this.#compressed) { - const { gzipSync } = await import('node:zlib'); - data = gzipSync(data); - } - - // Update DB with finalized data - const stmt = this.#db.prepare(` - UPDATE stream_storage - SET data = ?, size_bytes = ? - WHERE project_path = ? AND id = ? - `); - - stmt.run(data, this.#bytesWritten, this.#projectPath, this.id); - - // Clean up temp file - try { - unlinkSync(this.#tempFilePath); - } catch (err) { - // Ignore cleanup errors - } - } -} -``` - -**Key Features**: - -- File-based buffering to `~/.config/agentuity/streams/{id}.tmp` -- Avoids memory pressure for large streams -- `getReader()` reads from finalized DB data -- Optional gzip compression support -- Metadata filtering in `list()` with JSON LIKE queries -- Public URL generation -- Automatic temp file cleanup after persist - -### 6. Vector Storage (`vector.ts`) - -```typescript -import type { Database } from 'bun:sqlite'; -import type { - VectorStorage, - VectorUpsertParams, - VectorUpsertResult, - VectorResult, - VectorResultNotFound, - VectorSearchResultWithDocument, - VectorSearchParams, - VectorSearchResult, -} from '@agentuity/core'; -import { simpleEmbedding, cosineSimilarity, now } from './_util'; - -export class LocalVectorStorage implements VectorStorage { - #db: Database; - #projectPath: string; - - constructor(db: Database, projectPath: string) { - this.#db = db; - this.#projectPath = projectPath; - } - - async upsert(name: string, ...documents: VectorUpsertParams[]): Promise { - if (!name?.trim()) { - throw new Error('Vector storage name is required'); - } - if (documents.length === 0) { - throw new Error('At least one document is required'); - } - - const results: VectorUpsertResult[] = []; - const stmt = this.#db.prepare(` - INSERT INTO vector_storage ( - project_path, name, id, key, embedding, document, metadata, created_at, updated_at - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT(project_path, name, key) - DO UPDATE SET - embedding = excluded.embedding, - document = excluded.document, - metadata = excluded.metadata, - updated_at = excluded.updated_at - `); - - for (const doc of documents) { - if (!doc.key?.trim()) { - throw new Error('Each document must have a non-empty key'); - } - - // Generate or use provided embeddings - let embedding: number[]; - if ('embeddings' in doc && doc.embeddings) { - if (!Array.isArray(doc.embeddings) || doc.embeddings.length === 0) { - throw new Error('Embeddings must be a non-empty array'); - } - embedding = doc.embeddings; - } else if ('document' in doc && doc.document) { - if (!doc.document?.trim()) { - throw new Error('Document text must be non-empty'); - } - embedding = simpleEmbedding(doc.document); - } else { - throw new Error('Each document must have either embeddings or document text'); - } - - const id = crypto.randomUUID(); - const timestamp = now(); - const embeddingJson = JSON.stringify(embedding); - const documentText = 'document' in doc ? doc.document : null; - const metadata = doc.metadata ? JSON.stringify(doc.metadata) : null; - - stmt.run( - this.#projectPath, - name, - id, - doc.key, - embeddingJson, - documentText, - metadata, - timestamp, - timestamp - ); - - results.push({ key: doc.key, id }); - } - - return results; - } - - async get = Record>( - name: string, - key: string - ): Promise> { - if (!name?.trim() || !key?.trim()) { - throw new Error('Vector storage name and key are required'); - } - - const query = this.#db.query(` - SELECT id, key, embedding, document, metadata - FROM vector_storage - WHERE project_path = ? AND name = ? AND key = ? - `); - - const row = query.get(this.#projectPath, name, key) as { - id: string; - key: string; - embedding: string; - document: string | null; - metadata: string | null; - } | null; - - if (!row) { - return { exists: false } as VectorResultNotFound; - } - - return { - exists: true, - data: { - id: row.id, - key: row.key, - embeddings: JSON.parse(row.embedding), - document: row.document || undefined, - metadata: row.metadata ? JSON.parse(row.metadata) : undefined, - similarity: 1.0, // Perfect match for direct get - } as VectorSearchResultWithDocument, - }; - } - - async getMany = Record>( - name: string, - ...keys: string[] - ): Promise>> { - if (!name?.trim()) { - throw new Error('Vector storage name is required'); - } - if (keys.length === 0) { - return new Map(); - } - - const results = await Promise.all( - keys.map(async (key) => { - const result = await this.get(name, key); - return { key, result }; - }) - ); - - const map = new Map>(); - for (const { key, result } of results) { - if (result.exists) { - map.set(key, result.data); - } - } - - return map; - } - - async search = Record>( - name: string, - params: VectorSearchParams - ): Promise[]> { - if (!name?.trim()) { - throw new Error('Vector storage name is required'); - } - if (!params.query?.trim()) { - throw new Error('Query is required'); - } - - // Generate query embedding - const queryEmbedding = simpleEmbedding(params.query); - - // Fetch all vectors for this name - const query = this.#db.query(` - SELECT id, key, embedding, metadata - FROM vector_storage - WHERE project_path = ? AND name = ? - `); - - const rows = query.all(this.#projectPath, name) as Array<{ - id: string; - key: string; - embedding: string; - metadata: string | null; - }>; - - // Calculate similarities - const results: Array & { similarity: number }> = []; - - for (const row of rows) { - const embedding = JSON.parse(row.embedding); - const similarity = cosineSimilarity(queryEmbedding, embedding); - - // Apply similarity threshold - if (params.similarity !== undefined && similarity < params.similarity) { - continue; - } - - // Apply metadata filter - if (params.metadata) { - const rowMetadata = row.metadata ? JSON.parse(row.metadata) : {}; - const matches = Object.entries(params.metadata).every( - ([key, value]) => rowMetadata[key] === value - ); - if (!matches) { - continue; - } - } - - results.push({ - id: row.id, - key: row.key, - metadata: row.metadata ? JSON.parse(row.metadata) : undefined, - similarity, - } as VectorSearchResult & { similarity: number }); - } - - // Sort by similarity descending - results.sort((a, b) => b.similarity - a.similarity); - - // Apply limit - const limit = params.limit || 10; - return results.slice(0, limit); - } - - async delete(name: string, ...keys: string[]): Promise { - if (!name?.trim()) { - throw new Error('Vector storage name is required'); - } - if (keys.length === 0) { - return 0; - } - - const placeholders = keys.map(() => '?').join(', '); - const stmt = this.#db.prepare(` - DELETE FROM vector_storage - WHERE project_path = ? AND name = ? AND key IN (${placeholders}) - `); - - const result = stmt.run(this.#projectPath, name, ...keys); - return result.changes; - } - - async exists(name: string): Promise { - if (!name?.trim()) { - throw new Error('Vector storage name is required'); - } - - const query = this.#db.query(` - SELECT COUNT(*) as count - FROM vector_storage - WHERE project_path = ? AND name = ? - `); - - const { count } = query.get(this.#projectPath, name) as { count: number }; - return count > 0; - } -} -``` - -**Key Features**: - -- Auto-generates embeddings from document text using `simpleEmbedding()` -- Brute-force similarity search (acceptable for local dev) -- Metadata filtering with deep equality check -- `exists()` checks for any vectors in the named storage - -### 7. HTTP Router (`_router.ts`) - -```typescript -import type { Database } from 'bun:sqlite'; -import { createRouter } from '../../router'; - -export function createLocalStorageRouter(db: Database, projectPath: string) { - const router = createRouter(); - - // Serve objects: GET /_agentuity/local/object/:bucket/:key - router.get('/_agentuity/local/object/:bucket/:key', async (c) => { - const bucket = c.req.param('bucket'); - const key = c.req.param('key'); - - const query = db.query(` - SELECT data, content_type, content_encoding, cache_control, - content_disposition, content_language - FROM object_storage - WHERE project_path = ? AND bucket = ? AND key = ? - `); - - const row = query.get(projectPath, bucket, key) as { - data: Buffer; - content_type: string; - content_encoding: string | null; - cache_control: string | null; - content_disposition: string | null; - content_language: string | null; - } | null; - - if (!row) { - return c.notFound(); - } - - // Set headers - const headers: Record = { - 'Content-Type': row.content_type, - }; - - if (row.content_encoding) { - headers['Content-Encoding'] = row.content_encoding; - } - if (row.cache_control) { - headers['Cache-Control'] = row.cache_control; - } - if (row.content_disposition) { - headers['Content-Disposition'] = row.content_disposition; - } - if (row.content_language) { - headers['Content-Language'] = row.content_language; - } - - return c.body(row.data, 200, headers); - }); - - // Serve streams: GET /_agentuity/local/stream/:id - router.get('/_agentuity/local/stream/:id', async (c) => { - const id = c.req.param('id'); - - const query = db.query(` - SELECT data, content_type - FROM stream_storage - WHERE project_path = ? AND id = ? - `); - - const row = query.get(projectPath, id) as { - data: Buffer | null; - content_type: string; - } | null; - - if (!row) { - return c.notFound(); - } - - if (!row.data) { - return c.json({ error: 'Stream not finalized' }, 400); - } - - return c.body(row.data, 200, { - 'Content-Type': row.content_type, - }); - }); - - return router; -} -``` - -**Key Features**: - -- Serves object storage files with all HTTP headers -- Serves stream storage files -- Returns 404 for missing objects/streams -- Returns 400 for streams not yet finalized - -### 8. Public Exports (`index.ts`) - -```typescript -export { getLocalDB, closeLocalDB } from './_db'; -export { normalizeProjectPath, simpleEmbedding, cosineSimilarity } from './_util'; -export { createLocalStorageRouter } from './_router'; -export { LocalKeyValueStorage } from './keyvalue'; -export { LocalObjectStorage } from './objectstore'; -export { LocalStreamStorage } from './stream'; -export { LocalVectorStorage } from './vector'; -``` - ---- - -## Integration - -### 1. Update AppConfig Interface - -**File**: `packages/runtime/src/app.ts` - -Add new config option: - -```typescript -export interface AppConfig { - // ... existing fields - services?: { - useLocal?: boolean; - keyvalue?: KeyValueStorage; - object?: ObjectStorage; - stream?: StreamStorage; - vector?: VectorStorage; - }; -} -``` - -### 2. Update Service Creation - -**File**: `packages/runtime/src/_services.ts` - -```typescript -import { - LocalKeyValueStorage, - LocalObjectStorage, - LocalStreamStorage, - LocalVectorStorage, - getLocalDB, - normalizeProjectPath, - createLocalStorageRouter, -} from './services/local'; -import type { Hono } from 'hono'; - -let localRouter: Hono | null = null; - -export function createServices(config?: AppConfig, serverUrl?: string) { - const authenticated = isAuthenticated(); - const useLocal = config?.services?.useLocal ?? false; - - if (useLocal) { - const db = getLocalDB(); - const projectPath = normalizeProjectPath(); - - if (!serverUrl) { - throw new Error('serverUrl is required when using local services'); - } - - kv = config?.services?.keyvalue || new LocalKeyValueStorage(db, projectPath); - objectStore = config?.services?.object || new LocalObjectStorage(db, projectPath, serverUrl); - stream = config?.services?.stream || new LocalStreamStorage(db, projectPath, serverUrl); - vector = config?.services?.vector || new LocalVectorStorage(db, projectPath); - - localRouter = createLocalStorageRouter(db, projectPath); - - return { localRouter }; - } - - // Reset local router if not using local services - localRouter = null; - - // ... existing authentication logic - if (config?.services?.keyvalue) { - kv = config.services.keyvalue; - } else if (authenticated) { - kv = new KeyValueStorageService(kvBaseUrl, adapter); - } else { - kv = new UnauthenticatedKeyValueStorage(); - } - - // ... similar for other services - - return {}; -} - -export function getLocalRouter(): Hono | null { - return localRouter; -} -``` - -### 3. Update App Creation - -**File**: `packages/runtime/src/app.ts` - -```typescript -export function createApp(config?: AppConfig) { - // ... existing setup - - const server = createServer(config); - - // Create services with server URL - const servicesResult = createServices(config, server.url.toString()); - - // ... existing app setup - - // Mount local router if present - if (servicesResult?.localRouter) { - router.route('/', servicesResult.localRouter); - } - - // ... rest of setup - - return { router, server, logger }; -} -``` - -### 4. Update Unauth App - -**File**: `apps/testing/unauth-app/app.ts` - -```typescript -import { createApp } from '@agentuity/runtime'; -import { showRoutes } from 'hono/dev'; - -// No need to specify useLocal - it's automatic when unauthenticated -const { router, server, logger } = createApp(); - -showRoutes(router); - -logger.info('Running with local SQLite services at %s', server.url); -logger.info('Database location: ~/.config/agentuity/local.db'); -``` - -**Note**: The `useLocal: true` config is no longer needed. Local services are automatically used when `AGENTUITY_SDK_KEY` is not set. - ---- - -## Testing Strategy - -### Unit Tests - -**File**: `packages/runtime/src/services/local/__test__/keyvalue.test.ts` - -```typescript -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { Database } from 'bun:sqlite'; -import { LocalKeyValueStorage } from '../keyvalue'; -import { initializeTables } from '../_db'; - -describe('LocalKeyValueStorage', () => { - let db: Database; - let kv: LocalKeyValueStorage; - - beforeEach(() => { - db = new Database(':memory:'); - initializeTables(db); - kv = new LocalKeyValueStorage(db, '/test/project'); - }); - - afterEach(() => { - db.close(); - }); - - test('set and get string value', async () => { - await kv.set('test', 'key1', 'value1'); - const result = await kv.get('test', 'key1'); - - expect(result.exists).toBe(true); - if (result.exists) { - expect(result.data).toBe('value1'); - expect(result.contentType).toBe('text/plain'); - } - }); - - test('get non-existent key', async () => { - const result = await kv.get('test', 'missing'); - expect(result.exists).toBe(false); - }); - - test('TTL expiration', async () => { - await kv.set('test', 'key1', 'value1', { ttl: 60 }); - // Would need to mock time or wait for expiration - }); - - // ... more tests -}); -``` - -Similar test files for: - -- `objectstore.test.ts` -- `stream.test.ts` -- `vector.test.ts` -- `_util.test.ts` (test embedding and similarity functions) - -### Integration Tests - -**File**: `apps/testing/unauth-app/test.ts` - -Update to test all 4 services: - -```typescript -// Test KeyValue -await ctx.kv.set('test', 'key1', { hello: 'world' }); -const kvResult = await ctx.kv.get('test', 'key1'); -console.log('KV:', kvResult); - -// Test ObjectStore -const data = new TextEncoder().encode('test object'); -await ctx.objectstore.put('bucket1', 'file.txt', data); -const objResult = await ctx.objectstore.get('bucket1', 'file.txt'); -console.log('Object:', objResult); - -// Test Stream -const stream = await ctx.stream.create('test-stream'); -await stream.write('chunk 1'); -await stream.write('chunk 2'); -await stream.close(); -console.log('Stream URL:', stream.url); - -// Test Vector -await ctx.vector.upsert('docs', { key: 'doc1', document: 'hello world' }); -const searchResults = await ctx.vector.search('docs', { query: 'world' }); -console.log('Vector search:', searchResults); -``` - ---- - -## Implementation Checklist - -### Phase 1: Foundation - -- [ ] Create `packages/runtime/src/services/local/` directory -- [ ] Implement `_db.ts` with singleton and schema initialization -- [ ] Implement `_util.ts` with path normalization and embedding functions -- [ ] Add unit tests for utilities - -### Phase 2: Service Implementations - -- [ ] Implement `LocalKeyValueStorage` in `keyvalue.ts` -- [ ] Add unit tests for KeyValue service -- [ ] Implement `LocalObjectStorage` in `objectstore.ts` -- [ ] Add unit tests for ObjectStorage service -- [ ] Implement `LocalStreamStorage` in `stream.ts` -- [ ] Add unit tests for Stream service -- [ ] Implement `LocalVectorStorage` in `vector.ts` -- [ ] Add unit tests for Vector service - -### Phase 3: HTTP Router - -- [ ] Implement `_router.ts` with object and stream endpoints -- [ ] Test router endpoints manually - -### Phase 4: Integration - -- [ ] Update `AppConfig` interface in `app.ts` -- [ ] Update `_services.ts` to support `useLocal` option -- [ ] Update `createApp()` to mount local router -- [ ] Create `index.ts` with public exports - -### Phase 5: Testing & Documentation - -- [ ] Update `apps/testing/unauth-app/app.ts` to use local services -- [ ] Update `apps/testing/unauth-app/test.ts` to test all services -- [ ] Run `bun run test` in unauth-app and verify all services work -- [ ] Add AGENTS.md notes about local services -- [ ] Update package README if needed - -### Phase 6: Validation - -- [ ] Run `bun run build` to ensure TypeScript compiles -- [ ] Run `bun run typecheck` to verify types -- [ ] Run all tests: `bun run test` -- [ ] Manual testing of unauth-app -- [ ] Verify SQLite DB created at `~/.config/agentuity/local.db` - ---- - -## Open Questions - -1. **Error Handling**: Should we add more detailed error messages or logging? -2. **Cleanup**: Should we add a CLI command to clear the local DB? -3. **Migration**: Do we need schema versioning for future updates? -4. **Performance**: Should we add indexes for common queries? -5. **Expiration**: Should we implement background cleanup for expired KV entries? - ---- - -## Implemented Features - -✅ **Automatic Local Services When Unauthenticated**: No configuration needed! - -- Local SQLite services are **automatically used** when `AGENTUITY_SDK_KEY` is not set -- No more `UnauthenticatedError` exceptions -- Seamless development experience without authentication -- Can still be explicitly enabled with `useLocal: true` if desired - -✅ **Automatic Orphaned Project Cleanup**: On DB initialization, data from projects whose directories no longer exist is automatically deleted - -- Queries all tables for unique `project_path` values -- Checks filesystem to verify directory still exists -- Excludes current project from cleanup -- Deletes all orphaned data in a single transaction -- Logs cleanup activity for visibility - -## Future Enhancements - -- Add SQLite VACUUM on cleanup -- Implement proper vector index (e.g., HNSW) instead of brute-force search -- Add metrics/telemetry for local service usage -- Support custom embedding dimensions -- Add DB migration system for schema changes -- Implement background expiration cleanup job for KV entries -- Add CLI tool for inspecting/managing local DB diff --git a/packages/runtime/src/services/local/_router.ts b/packages/runtime/src/services/local/_router.ts deleted file mode 100644 index d9adae1fe..000000000 --- a/packages/runtime/src/services/local/_router.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Database } from 'bun:sqlite'; -import { createRouter } from '../../router'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function createLocalStorageRouter(db: Database, projectPath: string): any { - const router = createRouter(); - - // so we can detect if we're running in local mode easily - router.get('/_agentuity/local/health', (c) => c.text('OK')); - - // Serve streams: GET /_agentuity/local/stream/:id - router.get('/_agentuity/local/stream/:id', async (c) => { - const id = c.req.param('id'); - - const query = db.query(` - SELECT data, content_type - FROM stream_storage - WHERE project_path = ? AND id = ? - `); - - const row = query.get(projectPath, id) as { - data: Buffer | null; - content_type: string; - } | null; - - if (!row) { - return c.notFound(); - } - - if (!row.data) { - return c.json({ error: 'Stream not finalized' }, 400); - } - - return c.body(new Uint8Array(row.data), 200, { - 'Content-Type': row.content_type, - }); - }); - - return router; -} diff --git a/packages/runtime/src/services/local/index.ts b/packages/runtime/src/services/local/index.ts deleted file mode 100644 index 61ed1bd26..000000000 --- a/packages/runtime/src/services/local/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { getLocalDB, closeLocalDB } from './_db'; -export { normalizeProjectPath, simpleEmbedding, cosineSimilarity } from './_util'; -export { createLocalStorageRouter } from './_router'; -export { LocalKeyValueStorage } from './keyvalue'; -export { LocalStreamStorage } from './stream'; -export { LocalVectorStorage } from './vector'; -export { LocalQueueStorage } from './queue'; -export { LocalEmailStorage } from './email'; -export { LocalTaskStorage } from './task'; diff --git a/packages/runtime/src/services/sandbox/http.ts b/packages/runtime/src/services/sandbox/http.ts deleted file mode 100644 index eff21ccb8..000000000 --- a/packages/runtime/src/services/sandbox/http.ts +++ /dev/null @@ -1,522 +0,0 @@ -import { - APIClient, - executionGet, - sandboxCreate, - sandboxDestroy, - sandboxExecute, - sandboxGet, - sandboxList, - sandboxListFiles, - sandboxMkDir, - sandboxPause, - sandboxReadFile, - sandboxResume, - sandboxRmDir, - sandboxRmFile, - sandboxRun, - sandboxSetEnv, - sandboxWriteFiles, - jobCreate, - jobGet, - jobList, - jobStop, - snapshotCreate, - snapshotGet, - snapshotList, - snapshotDelete, - snapshotTag, -} from '@agentuity/server'; -import type { - SandboxService, - Sandbox, - SandboxFileInfo, - SandboxInfo, - SandboxCreateOptions, - SandboxRunOptions, - SandboxRunResult, - ListSandboxesParams, - ListSandboxesResponse, - ExecuteOptions, - Execution, - ExecutionStatus, - StreamReader, - SandboxStatus, - FileToWrite, - SnapshotService, - SnapshotCreateOptions, - SnapshotInfo, - SnapshotListParams, - SnapshotListResponse, - CreateJobOptions, - Job, - JobListResponse, -} from '@agentuity/core'; -import { context, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api'; - -const TRACER_NAME = 'agentuity.sandbox'; - -/** Terminal execution statuses that indicate the command has finished. */ -const TERMINAL_STATUSES: Set = new Set([ - 'completed', - 'failed', - 'timeout', - 'cancelled', -]); - -async function withSpan( - name: string, - attributes: Record, - fn: () => Promise -): Promise { - const tracer = trace.getTracer(TRACER_NAME); - const currentContext = context.active(); - const span = tracer.startSpan(name, { attributes, kind: SpanKind.CLIENT }, currentContext); - const spanContext = trace.setSpan(currentContext, span); - - try { - const result = await context.with(spanContext, fn); - span.setStatus({ code: SpanStatusCode.OK }); - return result; - } catch (err) { - const e = err as Error; - span.recordException(e); - span.setStatus({ code: SpanStatusCode.ERROR, message: e?.message ?? String(err) }); - throw err; - } finally { - span.end(); - } -} - -function buildStreamReader(id: string, url: string): StreamReader { - return { - id, - url, - readonly: true as const, - getReader(): ReadableStream { - if (!url) { - return new ReadableStream({ - start(controller) { - controller.close(); - }, - }); - } - return new ReadableStream({ - async start(controller) { - try { - const response = await fetch(url); - if (!response.ok || !response.body) { - controller.close(); - return; - } - const reader = response.body.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) break; - controller.enqueue(value); - } - controller.close(); - } catch { - controller.close(); - } - }, - }); - }, - }; -} - -function createStreamReader(id: string | undefined, baseUrl: string): StreamReader { - const streamId = id ?? ''; - const url = streamId ? `${baseUrl}/${streamId}` : ''; - return buildStreamReader(streamId, url); -} - -function createStreamReaderFromUrl(streamUrl: string | undefined): StreamReader { - const url = streamUrl ?? ''; - if (!url) return buildStreamReader('', ''); - try { - const pathname = new URL(url).pathname.replace(/\/+$/, ''); - const id = pathname.split('/').pop() ?? ''; - return buildStreamReader(id, url); - } catch { - const id = url.split('/').pop() ?? ''; - return buildStreamReader(id, url); - } -} - -/** - * Creates the method implementations shared by all Sandbox instances. - */ -function createSandboxMethods(client: APIClient, sandboxId: string) { - return { - async execute(options: ExecuteOptions): Promise { - return withSpan( - 'agentuity.sandbox.execute', - { - 'sandbox.id': sandboxId, - 'sandbox.command': options.command?.join(' ') ?? '', - }, - async () => { - const initial = await sandboxExecute(client, { - sandboxId, - options, - signal: options.signal, - }); - // Wait for execution to reach a terminal state via long-polling. - // The server holds each request for up to 60s; if the execution - // is still running we loop and issue another long-poll request. - // The caller's signal is forwarded into every fetch so that - // cancellation aborts the in-flight request immediately. - let final: Awaited>; - do { - if (options.signal?.aborted) { - throw new DOMException('The operation was aborted.', 'AbortError'); - } - final = await executionGet(client, { - executionId: initial.executionId, - wait: '60s', - signal: options.signal, - }); - } while (!TERMINAL_STATUSES.has(final.status as ExecutionStatus)); - return { - executionId: final.executionId, - status: final.status, - exitCode: final.exitCode, - durationMs: final.durationMs, - stdoutStreamUrl: initial.stdoutStreamUrl, - stderrStreamUrl: initial.stderrStreamUrl, - }; - } - ); - }, - - async writeFiles(files: FileToWrite[]): Promise { - await withSpan( - 'agentuity.sandbox.writeFiles', - { - 'sandbox.id': sandboxId, - 'sandbox.files.count': files.length, - }, - () => sandboxWriteFiles(client, { sandboxId, files }) - ); - }, - - async readFile(path: string): Promise> { - return withSpan( - 'agentuity.sandbox.readFile', - { - 'sandbox.id': sandboxId, - 'sandbox.file.path': path, - }, - () => sandboxReadFile(client, { sandboxId, path }) - ); - }, - - async listFiles(path?: string): Promise { - return withSpan( - 'agentuity.sandbox.listFiles', - { - 'sandbox.id': sandboxId, - 'sandbox.dir.path': path ?? '', - }, - async () => { - const result = await sandboxListFiles(client, { sandboxId, path }); - return result.files; - } - ); - }, - - async mkDir(path: string, recursive?: boolean): Promise { - await withSpan( - 'agentuity.sandbox.mkDir', - { - 'sandbox.id': sandboxId, - 'sandbox.dir.path': path, - }, - () => sandboxMkDir(client, { sandboxId, path, recursive }) - ); - }, - - async rmFile(path: string): Promise<{ found: boolean }> { - return withSpan( - 'agentuity.sandbox.rmFile', - { - 'sandbox.id': sandboxId, - 'sandbox.file.path': path, - }, - () => sandboxRmFile(client, { sandboxId, path }) - ); - }, - - async rmDir(path: string, recursive?: boolean): Promise<{ found: boolean }> { - return withSpan( - 'agentuity.sandbox.rmDir', - { - 'sandbox.id': sandboxId, - 'sandbox.dir.path': path, - }, - () => sandboxRmDir(client, { sandboxId, path, recursive }) - ); - }, - - async setEnv(env: Record): Promise> { - return withSpan('agentuity.sandbox.setEnv', { 'sandbox.id': sandboxId }, async () => { - const result = await sandboxSetEnv(client, { sandboxId, env }); - return result.env; - }); - }, - - async pause(): Promise { - await withSpan('agentuity.sandbox.pause', { 'sandbox.id': sandboxId }, () => - sandboxPause(client, { sandboxId }) - ); - }, - - async resume(): Promise { - await withSpan('agentuity.sandbox.resume', { 'sandbox.id': sandboxId }, () => - sandboxResume(client, { sandboxId }) - ); - }, - - async destroy(): Promise { - await withSpan('agentuity.sandbox.destroy', { 'sandbox.id': sandboxId }, () => - sandboxDestroy(client, { sandboxId }) - ); - }, - - async createJob(options: CreateJobOptions): Promise { - return withSpan( - 'agentuity.sandbox.createJob', - { 'sandbox.id': sandboxId, 'sandbox.command': options.command?.join(' ') ?? '' }, - () => jobCreate(client, { sandboxId, options }) - ); - }, - - async getJob(jobId: string): Promise { - return withSpan( - 'agentuity.sandbox.getJob', - { 'sandbox.id': sandboxId, 'job.id': jobId }, - () => jobGet(client, { sandboxId, jobId }) - ); - }, - - async listJobs(limit?: number): Promise { - return withSpan('agentuity.sandbox.listJobs', { 'sandbox.id': sandboxId }, () => - jobList(client, { sandboxId, limit }) - ); - }, - - async stopJob(jobId: string, force?: boolean): Promise { - return withSpan( - 'agentuity.sandbox.stopJob', - { 'sandbox.id': sandboxId, 'job.id': jobId }, - () => jobStop(client, { sandboxId, jobId, force }) - ); - }, - }; -} - -function createSandboxInstance( - client: APIClient, - sandboxId: string, - status: SandboxStatus, - streamBaseUrl: string, - stdoutStreamId?: string, - stderrStreamId?: string, - auditStreamId?: string -): Sandbox { - const interleaved = !!(stdoutStreamId && stderrStreamId && stdoutStreamId === stderrStreamId); - return { - id: sandboxId, - status, - stdout: createStreamReader(stdoutStreamId, streamBaseUrl), - stderr: createStreamReader(stderrStreamId, streamBaseUrl), - interleaved, - auditStreamId, - ...createSandboxMethods(client, sandboxId), - }; -} - -function createSandboxInstanceFromInfo(client: APIClient, info: SandboxInfo): Sandbox { - const stdoutReader = createStreamReaderFromUrl(info.stdoutStreamUrl); - const stderrReader = createStreamReaderFromUrl(info.stderrStreamUrl); - const interleaved = !!( - stdoutReader.id && - stderrReader.id && - stdoutReader.id === stderrReader.id - ); - return { - id: info.sandboxId, - status: info.status, - name: info.name, - description: info.description, - runtime: info.runtime, - stdout: stdoutReader, - stderr: stderrReader, - interleaved, - auditStreamId: info.auditStreamId, - ...createSandboxMethods(client, info.sandboxId), - }; -} - -/** - * HTTP implementation of the SnapshotService interface - */ -class HTTPSnapshotService implements SnapshotService { - private client: APIClient; - - constructor(client: APIClient) { - this.client = client; - } - - async create(sandboxId: string, options?: SnapshotCreateOptions): Promise { - return withSpan( - 'agentuity.sandbox.snapshot.create', - { - 'sandbox.id': sandboxId, - 'snapshot.name': options?.name ?? '', - 'snapshot.tag': options?.tag ?? '', - }, - () => - snapshotCreate(this.client, { - sandboxId, - name: options?.name, - description: options?.description, - tag: options?.tag, - public: options?.public, - }) - ); - } - - async get(snapshotId: string): Promise { - return withSpan('agentuity.sandbox.snapshot.get', { 'snapshot.id': snapshotId }, () => - snapshotGet(this.client, { snapshotId }) - ); - } - - async list(params?: SnapshotListParams): Promise { - return withSpan( - 'agentuity.sandbox.snapshot.list', - { - 'snapshot.sandboxId': params?.sandboxId ?? '', - 'snapshot.limit': params?.limit ?? 50, - }, - () => - snapshotList(this.client, { - sandboxId: params?.sandboxId, - limit: params?.limit, - offset: params?.offset, - }) - ); - } - - async delete(snapshotId: string): Promise { - return withSpan('agentuity.sandbox.snapshot.delete', { 'snapshot.id': snapshotId }, () => - snapshotDelete(this.client, { snapshotId }) - ); - } - - async tag(snapshotId: string, tag: string | null): Promise { - return withSpan( - 'agentuity.sandbox.snapshot.tag', - { - 'snapshot.id': snapshotId, - 'snapshot.tag': tag ?? '', - }, - () => snapshotTag(this.client, { snapshotId, tag }) - ); - } -} - -/** - * HTTP implementation of the SandboxService interface - */ -export class HTTPSandboxService implements SandboxService { - private client: APIClient; - private streamBaseUrl: string; - - /** - * Snapshot management operations - */ - public readonly snapshot: SnapshotService; - - constructor(client: APIClient, streamBaseUrl: string) { - this.client = client; - this.streamBaseUrl = streamBaseUrl; - this.snapshot = new HTTPSnapshotService(client); - } - - async run(options: SandboxRunOptions): Promise { - return withSpan( - 'agentuity.sandbox.run', - { - 'sandbox.command': options.command?.exec?.join(' ') ?? '', - 'sandbox.mode': 'oneshot', - }, - () => sandboxRun(this.client, { options }) - ); - } - - async create(options?: SandboxCreateOptions): Promise { - return withSpan( - 'agentuity.sandbox.create', - { - 'sandbox.network': options?.network?.enabled ?? false, - 'sandbox.snapshot': options?.snapshot ?? '', - }, - async () => { - const response = await sandboxCreate(this.client, { options }); - return createSandboxInstance( - this.client, - response.sandboxId, - response.status, - this.streamBaseUrl, - response.stdoutStreamId, - response.stderrStreamId, - response.auditStreamId - ); - } - ); - } - - async get(sandboxId: string): Promise { - return withSpan('agentuity.sandbox.get', { 'sandbox.id': sandboxId }, () => - sandboxGet(this.client, { sandboxId }) - ); - } - - async list(params?: ListSandboxesParams): Promise { - return withSpan( - 'agentuity.sandbox.list', - { - 'sandbox.status': params?.status ?? '', - 'sandbox.limit': params?.limit ?? 50, - }, - () => sandboxList(this.client, params) - ); - } - - async connect(sandboxId: string): Promise { - return withSpan('agentuity.sandbox.connect', { 'sandbox.id': sandboxId }, async () => { - const info = await sandboxGet(this.client, { sandboxId }); - return createSandboxInstanceFromInfo(this.client, info); - }); - } - - async destroy(sandboxId: string): Promise { - return withSpan('agentuity.sandbox.destroy', { 'sandbox.id': sandboxId }, () => - sandboxDestroy(this.client, { sandboxId }) - ); - } - - async pause(sandboxId: string): Promise { - return withSpan('agentuity.sandbox.pause', { 'sandbox.id': sandboxId }, () => - sandboxPause(this.client, { sandboxId }) - ); - } - - async resume(sandboxId: string): Promise { - return withSpan('agentuity.sandbox.resume', { 'sandbox.id': sandboxId }, () => - sandboxResume(this.client, { sandboxId }) - ); - } -} diff --git a/packages/runtime/src/services/sandbox/index.ts b/packages/runtime/src/services/sandbox/index.ts deleted file mode 100644 index ccd7ed6cd..000000000 --- a/packages/runtime/src/services/sandbox/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { HTTPSandboxService } from './http'; diff --git a/packages/runtime/src/services/session/composite.ts b/packages/runtime/src/services/session/composite.ts deleted file mode 100644 index c0c92eaaf..000000000 --- a/packages/runtime/src/services/session/composite.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - type SessionCompleteEvent, - type SessionEventProvider, - type SessionStartEvent, -} from '@agentuity/core'; - -/** - * A composite implementation of SessionEventProvider that forwards events to multiple providers - */ -export class CompositeSessionEventProvider implements SessionEventProvider { - private providers: SessionEventProvider[]; - - constructor(...providers: SessionEventProvider[]) { - this.providers = providers; - } - /** - * called when the session starts - * - * @param event SessionStartEvent - */ - async start(event: SessionStartEvent): Promise { - await Promise.all(this.providers.map((p) => p.start(event))); - } - - /** - * called when the session completes - * - * @param event SessionCompleteEvent - */ - async complete(event: SessionCompleteEvent): Promise { - await Promise.all(this.providers.map((p) => p.complete(event))); - } -} diff --git a/packages/runtime/src/services/session/http.ts b/packages/runtime/src/services/session/http.ts deleted file mode 100644 index d8c4c77db..000000000 --- a/packages/runtime/src/services/session/http.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { APIClient, APIResponseSchemaNoData } from '@agentuity/server'; -import { - type SessionEventProvider, - type SessionStartEvent, - SessionStartEventDelayedSchema, - SessionCompleteEventDelayedSchema, - type SessionCompleteEvent, - type Logger, - StructuredError, -} from '@agentuity/core'; -import { context, trace, SpanStatusCode } from '@opentelemetry/api'; -import { internal } from '../../logger/internal'; - -const SessionResponseError = StructuredError('SessionResponseError'); - -/** - * An implementation of the SessionEventProvider which uses HTTP for delivery. - * - * This provider checks that the event has required fields (orgId, projectId for start events) - * before sending to the backend. If required fields are missing, the event is silently skipped. - */ -export class HTTPSessionEventProvider implements SessionEventProvider { - private apiClient: APIClient; - private logger: Logger; - - constructor(client: APIClient, logger: Logger) { - this.apiClient = client; - this.logger = logger; - } - - /** - * Check if a start event has all required fields for HTTP delivery - */ - private canSendStartEvent(event: SessionStartEvent): boolean { - // orgId and projectId are required for the backend - if (!event.orgId || !event.projectId) { - internal.info( - '[session-http] skipping start event - missing required fields: orgId=%s, projectId=%s', - event.orgId ?? 'missing', - event.projectId ?? 'missing' - ); - return false; - } - return true; - } - - /** - * called when the session starts - * - * @param event SessionStartEvent - */ - async start(event: SessionStartEvent): Promise { - // Check required fields before sending - if (!this.canSendStartEvent(event)) { - return; - } - - const tracer = trace.getTracer('session'); - const currentContext = context.active(); - const span = tracer.startSpan('Session Start', {}, currentContext); - - try { - internal.info('[session-http] sending start event: %s', event.id); - this.logger.debug('Sending session start event: %s', event.id); - - const spanContext = trace.setSpan(currentContext, span); - const resp = await context.with(spanContext, () => - this.apiClient.post( - '/session', - { ...event, timestamp: Date.now() }, - APIResponseSchemaNoData(), - SessionStartEventDelayedSchema - ) - ); - - if (resp.success) { - internal.info('[session-http] start event sent successfully: %s', event.id); - this.logger.debug('Session start event sent successfully: %s', event.id); - this.startedSessions.add(event.id); - span.setStatus({ code: SpanStatusCode.OK }); - return; - } - internal.info('[session-http] start event failed: %s - %s', event.id, resp.message); - span.setStatus({ code: SpanStatusCode.ERROR, message: resp.message }); - throw new SessionResponseError({ message: resp.message }); - } catch (error) { - span.recordException(error as Error); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error instanceof Error ? error.message : String(error), - }); - throw error; - } finally { - span.end(); - } - } - - /** - * Track session IDs that have been started (to know if we should send complete) - */ - private startedSessions = new Set(); - - /** - * called when the session completes - * - * @param event SessionCompleteEvent - */ - async complete(event: SessionCompleteEvent): Promise { - // Always create the "Session End" span for telemetry purposes. - // This span is used by Catalyst to detect when a session has completed, - // so it must always be emitted even if we don't send the HTTP event. - const tracer = trace.getTracer('session'); - const currentContext = context.active(); - const span = tracer.startSpan('Session End', {}, currentContext); - - try { - // Only send HTTP complete event if we successfully sent a start event. - // This prevents sending orphaned complete events when start was skipped. - // However, we still create the span above for telemetry. - if (!this.startedSessions.has(event.id)) { - internal.info( - '[session-http] skipping HTTP complete event (no matching start), but emitting Session End span: %s', - event.id - ); - span.setStatus({ code: SpanStatusCode.OK }); - return; - } - - internal.info( - '[session-http] sending complete event: %s, userData: %s', - event.id, - event.userData ? `${event.userData.length} bytes` : 'none' - ); - this.logger.debug('Sending session complete event: %s', event.id); - - const spanContext = trace.setSpan(currentContext, span); - const resp = await context.with(spanContext, () => - this.apiClient.put( - '/session', - { ...event, timestamp: Date.now() }, - APIResponseSchemaNoData(), - SessionCompleteEventDelayedSchema - ) - ); - - if (resp.success) { - this.startedSessions.delete(event.id); - internal.info('[session-http] complete event sent successfully: %s', event.id); - this.logger.debug('Session complete event sent successfully: %s', event.id); - span.setStatus({ code: SpanStatusCode.OK }); - return; - } - internal.info('[session-http] complete event failed: %s - %s', event.id, resp.message); - span.setStatus({ code: SpanStatusCode.ERROR, message: resp.message }); - throw new SessionResponseError({ message: resp.message }); - } catch (error) { - span.recordException(error as Error); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error instanceof Error ? error.message : String(error), - }); - throw error; - } finally { - span.end(); - } - } -} diff --git a/packages/runtime/src/services/session/index.ts b/packages/runtime/src/services/session/index.ts deleted file mode 100644 index c968fd499..000000000 --- a/packages/runtime/src/services/session/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './composite'; -export * from './http'; -export * from './json'; -export * from './local'; diff --git a/packages/runtime/src/services/session/json.ts b/packages/runtime/src/services/session/json.ts deleted file mode 100644 index cd4d9c54d..000000000 --- a/packages/runtime/src/services/session/json.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { join } from 'node:path'; -import { randomUUID } from 'node:crypto'; -import { - type SessionEventProvider, - type SessionStartEvent, - type SessionCompleteEvent, -} from '@agentuity/core'; - -/** - * An implementation of the SessionEventProvider which uses JSON logs for delivery - */ -export class JSONSessionEventProvider implements SessionEventProvider { - private directory: string; - - constructor(directory: string) { - this.directory = directory; - } - private makeFilename(type: 'start' | 'complete'): string { - return join(this.directory, `session-${type}.${Date.now()}${randomUUID()}.json`); - } - /** - * called when the session starts - * - * @param event SessionStartEvent - */ - async start(event: SessionStartEvent): Promise { - const filename = this.makeFilename('start'); - const payload = JSON.stringify({ ...event, timestamp: new Date() }) + '\n'; - await Bun.file(filename).write(payload); - } - - /** - * called when the session completes - * - * @param event SessionCompleteEvent - */ - async complete(event: SessionCompleteEvent): Promise { - const filename = this.makeFilename('complete'); - const payload = JSON.stringify({ ...event, timestamp: new Date() }) + '\n'; - await Bun.file(filename).write(payload); - } -} diff --git a/packages/runtime/src/services/session/local.ts b/packages/runtime/src/services/session/local.ts deleted file mode 100644 index 041000e3b..000000000 --- a/packages/runtime/src/services/session/local.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - type SessionEventProvider, - type SessionStartEvent, - type SessionCompleteEvent, -} from '@agentuity/core'; -import { internal } from '../../logger/internal'; - -/** - * An implementation of the SessionEventProvider which is no-op - */ -export class LocalSessionEventProvider implements SessionEventProvider { - /** - * called when the session starts - * - * @param event SessionStartEvent - */ - async start(event: SessionStartEvent): Promise { - internal.info('[session-local] start event (no-op): %s', event.id); - } - - /** - * called when the session completes - * - * @param event SessionCompleteEvent - */ - async complete(event: SessionCompleteEvent): Promise { - internal.info( - '[session-local] complete event (no-op): %s, userData: %s', - event.id, - event.userData ? `${event.userData.length} bytes` : 'none' - ); - } -} diff --git a/packages/runtime/src/services/thread/local.ts b/packages/runtime/src/services/thread/local.ts deleted file mode 100644 index b95bebd59..000000000 --- a/packages/runtime/src/services/thread/local.ts +++ /dev/null @@ -1,199 +0,0 @@ -import type { Context } from 'hono'; -import type { Database } from 'bun:sqlite'; -import type { AppState } from '../../index'; -import type { Env } from '../../app'; -import { - DefaultThread, - DefaultThreadIDProvider, - parseThreadData, - validateThreadIdOrThrow, - type Thread, - type ThreadIDProvider, - type ThreadProvider, -} from '../../session'; -import { getLocalDB } from '../local/_db'; - -/** - * Local thread provider with SQLite persistence. - * Stores thread state in local DB for development and testing. - * Suitable for local development and testing with persistence across requests. - */ -export class LocalThreadProvider implements ThreadProvider { - private appState: AppState | null = null; - private threadIDProvider: ThreadIDProvider = new DefaultThreadIDProvider(); - private db: Database | null = null; - - async initialize(appState: AppState): Promise { - this.appState = appState; - this.db = getLocalDB(); - - // Create threads table if it doesn't exist - this.db.run(` - CREATE TABLE IF NOT EXISTS threads ( - id TEXT PRIMARY KEY, - state TEXT NOT NULL, - updated_at INTEGER NOT NULL - ) - `); - } - - setThreadIDProvider(provider: ThreadIDProvider): void { - this.threadIDProvider = provider; - } - - async restore(ctx: Context): Promise { - if (this.appState === null || this.db === null) { - throw new Error( - 'LocalThreadProvider.restore called before initialize(): appState/db not set; call initialize(appState) first' - ); - } - - const threadId = await this.threadIDProvider.getThreadId(this.appState, ctx); - validateThreadIdOrThrow(threadId); - - // Create a restore function for lazy loading - const restoreFn = async (): Promise<{ - state: Map; - metadata: Record; - }> => { - if (!this.db) { - return { state: new Map(), metadata: {} }; - } - - const row = this.db - .query<{ state: string }, [string]>('SELECT state FROM threads WHERE id = ?') - .get(threadId); - - const { flatStateJson, metadata } = parseThreadData(row?.state); - - const state = new Map(); - if (flatStateJson) { - try { - const data = JSON.parse(flatStateJson); - for (const [key, value] of Object.entries(data)) { - state.set(key, value); - } - } catch { - // Continue with empty state if parsing fails - } - } - - return { state, metadata: metadata || {} }; - }; - - return new DefaultThread(this, threadId, restoreFn); - } - - async save(thread: Thread): Promise { - if (!this.db || !(thread instanceof DefaultThread)) { - return; - } - - const saveMode = thread.getSaveMode(); - if (saveMode === 'none') { - return; - } - - const now = Date.now(); - - if (saveMode === 'merge') { - // For merge, we need to load existing state, apply operations, then save - const operations = thread.getPendingOperations(); - const metadata = thread.getMetadataForSave(); - - // Load existing state - const row = this.db - .query<{ state: string }, [string]>('SELECT state FROM threads WHERE id = ?') - .get(thread.id); - - const { flatStateJson, metadata: existingMetadata } = parseThreadData(row?.state); - - const state: Record = {}; - if (flatStateJson) { - try { - Object.assign(state, JSON.parse(flatStateJson)); - } catch { - // Continue with empty state if parsing fails - } - } - - // Apply operations - for (const op of operations) { - switch (op.op) { - case 'clear': - for (const key of Object.keys(state)) { - delete state[key]; - } - break; - case 'set': - if (op.key !== undefined) { - state[op.key] = op.value; - } - break; - case 'delete': - if (op.key !== undefined) { - delete state[op.key]; - } - break; - case 'push': - if (op.key !== undefined) { - const existing = state[op.key]; - let arr: unknown[]; - if (Array.isArray(existing)) { - existing.push(op.value); - arr = existing; - } else if (existing === undefined) { - arr = [op.value]; - state[op.key] = arr; - } else { - // If non-array, silently skip - continue; - } - // Apply maxRecords limit - if (op.maxRecords !== undefined && arr.length > op.maxRecords) { - state[op.key] = arr.slice(arr.length - op.maxRecords); - } - } - break; - } - } - - // Build final data - const finalMetadata = metadata || existingMetadata || {}; - const hasState = Object.keys(state).length > 0; - const hasMetadata = Object.keys(finalMetadata).length > 0; - - let stateJson = ''; - if (hasState || hasMetadata) { - const data: { state?: Record; metadata?: Record } = - {}; - if (hasState) data.state = state; - if (hasMetadata) data.metadata = finalMetadata; - stateJson = JSON.stringify(data); - } - - this.db.run( - `INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?) - ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, - [thread.id, stateJson, now, stateJson, now] - ); - } else { - // Full save - const stateJson = await thread.getSerializedState(); - this.db.run( - `INSERT INTO threads (id, state, updated_at) VALUES (?, ?, ?) - ON CONFLICT(id) DO UPDATE SET state = ?, updated_at = ?`, - [thread.id, stateJson, now, stateJson, now] - ); - } - } - - async destroy(thread: Thread): Promise { - if (!this.db) { - return; - } - - // Delete thread from DB - this.db.run('DELETE FROM threads WHERE id = ?', [thread.id]); - } -} diff --git a/packages/runtime/src/session.ts b/packages/runtime/src/session.ts deleted file mode 100644 index 8c8a941cd..000000000 --- a/packages/runtime/src/session.ts +++ /dev/null @@ -1,1960 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/** biome-ignore-all lint/suspicious/noExplicitAny: anys are great */ -import type { Context } from 'hono'; -import { getSignedCookie, setSignedCookie } from 'hono/cookie'; -import { type Env, fireEvent } from './app'; -import type { AppState } from './index'; -import { getServiceUrls } from '@agentuity/server'; -import { internal } from './logger/internal'; -import { timingSafeEqual } from 'node:crypto'; - -/** - * Result of parsing serialized thread data. - * @internal - */ -export interface ParsedThreadData { - flatStateJson?: string; - metadata?: Record; -} - -/** - * Parse serialized thread data, handling both old (flat state) and new ({ state, metadata }) formats. - * @internal - */ -export function parseThreadData(raw: string | undefined): ParsedThreadData { - if (!raw) { - return {}; - } - - try { - const parsed = JSON.parse(raw); - if (parsed && typeof parsed === 'object' && ('state' in parsed || 'metadata' in parsed)) { - return { - flatStateJson: parsed.state ? JSON.stringify(parsed.state) : undefined, - metadata: - parsed.metadata && typeof parsed.metadata === 'object' ? parsed.metadata : undefined, - }; - } - return { flatStateJson: raw }; - } catch { - return { flatStateJson: raw }; - } -} - -export type ThreadEventName = 'destroyed'; -export type SessionEventName = 'completed'; - -/** - * Represents a merge operation for thread state. - * Used when state is modified without being loaded first. - */ -export interface MergeOperation { - op: 'set' | 'delete' | 'clear' | 'push'; - key?: string; - value?: unknown; - maxRecords?: number; -} - -/** - * Async thread state storage with lazy loading. - * - * State is only fetched from storage when first accessed via a read operation. - * Write operations can be batched and sent as a merge command without loading. - * - * @example - * ```typescript - * // Read triggers lazy load - * const count = await ctx.thread.state.get('messageCount'); - * - * // Write queues operation (may not trigger load) - * await ctx.thread.state.set('messageCount', (count ?? 0) + 1); - * - * // Check state status - * if (ctx.thread.state.dirty) { - * console.log('State has pending changes'); - * } - * ``` - */ -export interface ThreadState { - /** - * Whether state has been loaded from storage. - * True when state has been fetched via a read operation. - */ - readonly loaded: boolean; - - /** - * Whether state has pending changes. - * True when there are queued writes (pending-writes state) or - * modifications after loading (loaded state with changes). - */ - readonly dirty: boolean; - - /** - * Get a value from thread state. - * Triggers lazy load if state hasn't been fetched yet. - */ - get(key: string): Promise; - - /** - * Set a value in thread state. - * If state hasn't been loaded, queues the operation for merge. - */ - set(key: string, value: T): Promise; - - /** - * Check if a key exists in thread state. - * Triggers lazy load if state hasn't been fetched yet. - */ - has(key: string): Promise; - - /** - * Delete a key from thread state. - * If state hasn't been loaded, queues the operation for merge. - */ - delete(key: string): Promise; - - /** - * Clear all thread state. - * If state hasn't been loaded, queues a clear operation for merge. - */ - clear(): Promise; - - /** - * Get all entries as key-value pairs. - * Triggers lazy load if state hasn't been fetched yet. - */ - entries(): Promise<[string, T][]>; - - /** - * Get all keys. - * Triggers lazy load if state hasn't been fetched yet. - */ - keys(): Promise; - - /** - * Get all values. - * Triggers lazy load if state hasn't been fetched yet. - */ - values(): Promise; - - /** - * Get the number of entries in state. - * Triggers lazy load if state hasn't been fetched yet. - */ - size(): Promise; - - /** - * Push a value to an array in thread state. - * If the key doesn't exist, creates a new array with the value. - * If state hasn't been loaded, queues the operation for efficient merge. - * - * @param key - The key of the array to push to - * @param value - The value to push - * @param maxRecords - Optional maximum number of records to keep (sliding window) - * - * @example - * ```typescript - * // Efficiently append messages without loading entire array - * await ctx.thread.state.push('messages', { role: 'user', content: 'Hello' }); - * await ctx.thread.state.push('messages', { role: 'assistant', content: 'Hi!' }); - * - * // Keep only the last 100 messages - * await ctx.thread.state.push('messages', newMessage, 100); - * ``` - */ - push(key: string, value: T, maxRecords?: number): Promise; -} - -type ThreadEventCallback = ( - eventName: 'destroyed', - thread: T -) => Promise | void; - -type SessionEventCallback = ( - eventName: 'completed', - session: T -) => Promise | void; - -/** - * Represents a conversation thread that persists across multiple sessions. - * Threads maintain state and can contain multiple request-response sessions. - * - * Threads are automatically managed by the runtime and stored in cookies. - * They expire after 1 hour of inactivity by default. - * - * @example - * ```typescript - * // Access thread in agent handler - * const agent = createAgent('conversation', { - * handler: async (ctx, input) => { - * // Get thread ID - * ctx.logger.info('Thread: %s', ctx.thread.id); - * - * // Store data in thread state (persists across sessions) - * const count = await ctx.thread.state.get('conversationCount') ?? 0; - * await ctx.thread.state.set('conversationCount', count + 1); - * - * // Access metadata - * const meta = await ctx.thread.getMetadata(); - * await ctx.thread.setMetadata({ ...meta, lastAccess: Date.now() }); - * - * // Listen for thread destruction - * ctx.thread.addEventListener('destroyed', (eventName, thread) => { - * ctx.logger.info('Thread destroyed: %s', thread.id); - * }); - * - * return 'Response'; - * } - * }); - * ``` - */ -export interface Thread { - /** - * Unique thread identifier (e.g., "thrd_a1b2c3d4..."). - * Stored in cookie and persists across requests. - */ - id: string; - - /** - * Thread-scoped state storage with async lazy-loading. - * State is only fetched from storage when first accessed via a read operation. - * - * @example - * ```typescript - * // Read triggers lazy load - * const count = await ctx.thread.state.get('messageCount'); - * // Write may queue operation without loading - * await ctx.thread.state.set('messageCount', (count ?? 0) + 1); - * ``` - */ - state: ThreadState; - - /** - * Get thread metadata (lazy-loaded). - * Unlike state, metadata is stored unencrypted for efficient filtering. - * - * @example - * ```typescript - * const meta = await ctx.thread.getMetadata(); - * console.log(meta.userId); - * ``` - */ - getMetadata(): Promise>; - - /** - * Set thread metadata (full replace). - * - * @example - * ```typescript - * await ctx.thread.setMetadata({ userId: 'user123', department: 'sales' }); - * ``` - */ - setMetadata(metadata: Record): Promise; - - /** - * Register an event listener for when the thread is destroyed. - * Thread is destroyed when it expires or is manually destroyed. - * - * @param eventName - Must be 'destroyed' - * @param callback - Function called when thread is destroyed - * - * @example - * ```typescript - * ctx.thread.addEventListener('destroyed', (eventName, thread) => { - * ctx.logger.info('Cleaning up thread: %s', thread.id); - * }); - * ``` - */ - addEventListener( - eventName: 'destroyed', - callback: (eventName: 'destroyed', thread: Thread) => Promise | void - ): void; - - /** - * Remove a previously registered 'destroyed' event listener. - * - * @param eventName - Must be 'destroyed' - * @param callback - The callback function to remove - */ - removeEventListener( - eventName: 'destroyed', - callback: (eventName: 'destroyed', thread: Thread) => Promise | void - ): void; - - /** - * Manually destroy the thread and clean up resources. - * Fires the 'destroyed' event and removes thread from storage. - * - * @example - * ```typescript - * // Permanently delete the thread from storage - * await ctx.thread.destroy(); - * ``` - */ - destroy(): Promise; - - /** - * Check if the thread has any data. - * Returns true if thread state is empty (no data to save). - * This is async because it may need to check lazy-loaded state. - * - * @example - * ```typescript - * if (await ctx.thread.empty()) { - * // Thread has no data, won't be persisted - * } - * ``` - */ - empty(): Promise; -} - -/** - * Represents a single request-response session within a thread. - * Sessions are scoped to a single agent execution and its sub-agent calls. - * - * Each HTTP request creates a new session with a unique ID, but shares the same thread. - * - * @example - * ```typescript - * const agent = createAgent('request-handler', { - * handler: async (ctx, input) => { - * // Get session ID (unique per request) - * ctx.logger.info('Session: %s', ctx.session.id); - * - * // Store data in session state (only for this request) - * ctx.session.state.set('startTime', Date.now()); - * - * // Access parent thread - * ctx.logger.info('Thread: %s', ctx.session.thread.id); - * - * // Listen for session completion - * ctx.session.addEventListener('completed', (eventName, session) => { - * const duration = Date.now() - (session.state.get('startTime') as number); - * ctx.logger.info('Session completed in %dms', duration); - * }); - * - * return 'Response'; - * } - * }); - * ``` - */ -export interface Session { - /** - * Unique session identifier for this request. - * Changes with each HTTP request, even within the same thread. - */ - id: string; - - /** - * The parent thread this session belongs to. - * Multiple sessions can share the same thread. - */ - thread: Thread; - - /** - * Session-scoped state storage that only exists for this request. - * Use this for temporary data that shouldn't persist across requests. - * - * @example - * ```typescript - * ctx.session.state.set('requestStartTime', Date.now()); - * ``` - */ - state: Map; - - /** - * Unencrypted metadata for filtering and querying sessions. - * Unlike state, metadata is stored as-is in the database with GIN indexes - * for efficient filtering. Initialized to empty object, only persisted if non-empty. - * - * @example - * ```typescript - * ctx.session.metadata.userId = 'user123'; - * ctx.session.metadata.requestType = 'chat'; - * ``` - */ - metadata: Record; - - /** - * Register an event listener for when the session completes. - * Fired after the agent handler returns and response is sent. - * - * @param eventName - Must be 'completed' - * @param callback - Function called when session completes - * - * @example - * ```typescript - * ctx.session.addEventListener('completed', (eventName, session) => { - * ctx.logger.info('Session finished: %s', session.id); - * }); - * ``` - */ - addEventListener( - eventName: 'completed', - callback: (eventName: 'completed', session: Session) => Promise | void - ): void; - - /** - * Remove a previously registered 'completed' event listener. - * - * @param eventName - Must be 'completed' - * @param callback - The callback function to remove - */ - removeEventListener( - eventName: 'completed', - callback: (eventName: 'completed', session: Session) => Promise | void - ): void; - - /** - * Return the session data as a serializable string or return undefined if not - * data should be serialized. - */ - serializeUserData(): string | undefined; -} - -/** - * Represent an interface for handling how thread ids are generated or restored. - */ -export interface ThreadIDProvider { - /** - * A function that should return a thread id to be used for the incoming request. - * The returning thread id must be globally unique and must start with the prefix - * thrd_ such as `thrd_212c16896b974ffeb21a748f0eeba620`. The max length of the - * string is 64 characters and the min length is 32 characters long - * (including the prefix). The characters after the prefix must match the - * regular expression [a-zA-Z0-9]. - * - * @param appState - The app state from createApp setup function - * @param ctx - Hono request context - * @returns The thread id to use (can be async for signed cookies) - */ - getThreadId(appState: AppState, ctx: Context): string | Promise; -} - -/** - * Provider interface for managing thread lifecycle and persistence. - * Implement this to customize how threads are stored and retrieved. - * - * The default implementation (DefaultThreadProvider) stores threads in-memory - * with cookie-based identification and 1-hour expiration. - * - * Thread state is serialized using `getSerializedState()` which returns a JSON - * envelope: `{ "state": {...}, "metadata": {...} }`. Use `parseThreadData()` to - * correctly parse both old (flat) and new (envelope) formats on restore. - * - * @example - * ```typescript - * class RedisThreadProvider implements ThreadProvider { - * private redis: Redis; - * - * async initialize(appState: AppState): Promise { - * this.redis = await connectRedis(); - * } - * - * async restore(ctx: Context): Promise { - * const threadId = ctx.req.header('x-thread-id') || getCookie(ctx, 'atid') || generateId('thrd'); - * const data = await this.redis.get(`thread:${threadId}`); - * - * // Parse stored data, handling both old and new formats - * const { flatStateJson, metadata } = parseThreadData(data); - * const thread = new DefaultThread(this, threadId, flatStateJson, metadata); - * - * // Populate state from parsed data - * if (flatStateJson) { - * const stateObj = JSON.parse(flatStateJson); - * for (const [key, value] of Object.entries(stateObj)) { - * thread.state.set(key, value); - * } - * } - * return thread; - * } - * - * async save(thread: Thread): Promise { - * if (thread instanceof DefaultThread && thread.isDirty()) { - * await this.redis.setex( - * `thread:${thread.id}`, - * 3600, - * thread.getSerializedState() - * ); - * } - * } - * - * async destroy(thread: Thread): Promise { - * await this.redis.del(`thread:${thread.id}`); - * } - * } - * - * // Use custom provider - * const app = await createApp({ - * services: { - * thread: new RedisThreadProvider() - * } - * }); - * ``` - */ -export interface ThreadProvider { - /** - * Initialize the provider when the app starts. - * Use this to set up connections, start cleanup intervals, etc. - * - * @param appState - The app state from createApp setup function - */ - initialize(appState: AppState): Promise; - - /** - * Set the provider to use for generating / restoring the thread id - * on new requests. Overrides the built-in provider when set. - * - * @param provider - the provider implementation - */ - setThreadIDProvider(provider: ThreadIDProvider): void; - - /** - * Restore or create a thread from the HTTP request context. - * Should check cookies for existing thread ID or create a new one. - * - * @param ctx - Hono request context - * @returns The restored or newly created thread - */ - restore(ctx: Context): Promise; - - /** - * Persist thread state to storage. - * Called periodically to save thread data. - * - * @param thread - The thread to save - */ - save(thread: Thread): Promise; - - /** - * Destroy a thread and clean up resources. - * Should fire the 'destroyed' event and remove from storage. - * - * @param thread - The thread to destroy - */ - destroy(thread: Thread): Promise; -} - -/** - * Provider interface for managing session lifecycle and persistence. - * Implement this to customize how sessions are stored and retrieved. - * - * The default implementation (DefaultSessionProvider) stores sessions in-memory - * and automatically cleans them up after completion. - * - * @example - * ```typescript - * class PostgresSessionProvider implements SessionProvider { - * private db: Database; - * - * async initialize(appState: AppState): Promise { - * this.db = appState.db; - * } - * - * async restore(thread: Thread, sessionId: string): Promise { - * const row = await this.db.query( - * 'SELECT state FROM sessions WHERE id = $1', - * [sessionId] - * ); - * const session = new DefaultSession(thread, sessionId); - * if (row) { - * session.state = new Map(JSON.parse(row.state)); - * } - * return session; - * } - * - * async save(session: Session): Promise { - * await this.db.query( - * 'INSERT INTO sessions (id, thread_id, state) VALUES ($1, $2, $3)', - * [session.id, session.thread.id, JSON.stringify([...session.state])] - * ); - * } - * } - * - * // Use custom provider - * const app = await createApp({ - * services: { - * session: new PostgresSessionProvider() - * } - * }); - * ``` - */ -export interface SessionProvider { - /** - * Initialize the provider when the app starts. - * Use this to set up database connections or other resources. - * - * @param appState - The app state from createApp setup function - */ - initialize(appState: AppState): Promise; - - /** - * Restore or create a session for the given thread and session ID. - * Should load existing session data or create a new session. - * - * @param thread - The parent thread for this session - * @param sessionId - The unique session identifier - * @returns The restored or newly created session - */ - restore(thread: Thread, sessionId: string): Promise; - - /** - * Persist session state and fire completion events. - * Called after the agent handler completes. - * - * @param session - The session to save - */ - save(session: Session): Promise; -} - -// WeakMap to store event listeners for Thread and Session instances -const threadEventListeners = new WeakMap< - Thread, - Map>> ->(); -const sessionEventListeners = new WeakMap< - Session, - Map>> ->(); - -// Helper to fire thread event listeners -async function fireThreadEvent(thread: Thread, eventName: ThreadEventName): Promise { - const listeners = threadEventListeners.get(thread); - if (!listeners) return; - - const callbacks = listeners.get(eventName); - if (!callbacks || callbacks.size === 0) return; - - for (const callback of callbacks) { - try { - await (callback as any)(eventName, thread); - } catch (error) { - // Log but don't re-throw - event listener errors should not crash the server - internal.error(`Error in thread event listener for '${eventName}':`, error); - } - } -} - -// Helper to fire session event listeners -async function fireSessionEvent(session: Session, eventName: SessionEventName): Promise { - const listeners = sessionEventListeners.get(session); - if (!listeners) return; - - const callbacks = listeners.get(eventName); - if (!callbacks || callbacks.size === 0) return; - - for (const callback of callbacks) { - try { - await (callback as any)(eventName, session); - } catch (error) { - // Log but don't re-throw - event listener errors should not crash the server - internal.error(`Error in session event listener for '${eventName}':`, error); - } - } -} - -// Generate thread or session ID -export function generateId(prefix?: string): string { - const arr = new Uint8Array(16); - crypto.getRandomValues(arr); - return `${prefix}${prefix ? '_' : ''}${arr.toHex()}`; -} - -/** - * Validates a thread ID against runtime constraints: - * - Must start with 'thrd_' - * - Must be at least 32 characters long (including prefix) - * - Must be less than 64 characters long - * - Must contain only [a-zA-Z0-9] after 'thrd_' prefix (no dashes for maximum randomness) - */ -export function isValidThreadId(threadId: string): boolean { - if (!threadId.startsWith('thrd_')) { - return false; - } - if (threadId.length < 32 || threadId.length > 64) { - return false; - } - const validThreadIdCharacters = /^[a-zA-Z0-9]+$/; - if (!validThreadIdCharacters.test(threadId.substring(5))) { - return false; - } - return true; -} - -/** - * Validates a thread ID and throws detailed error messages for debugging. - * @param threadId The thread ID to validate - * @throws Error with detailed message if validation fails - */ -export function validateThreadIdOrThrow(threadId: string): void { - if (!threadId) { - throw new Error(`the ThreadIDProvider returned an empty thread id for getThreadId`); - } - if (!threadId.startsWith('thrd_')) { - throw new Error( - `the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must start with the prefix 'thrd_'.` - ); - } - if (threadId.length > 64) { - throw new Error( - `the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must be less than 64 characters long.` - ); - } - if (threadId.length < 32) { - throw new Error( - `the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must be at least 32 characters long.` - ); - } - const validThreadIdCharacters = /^[a-zA-Z0-9]+$/; - if (!validThreadIdCharacters.test(threadId.substring(5))) { - throw new Error( - `the ThreadIDProvider returned an invalid thread id (${threadId}) for getThreadId. The thread id must contain only characters that match the regular expression [a-zA-Z0-9].` - ); - } -} - -/** - * Determines if the connection is secure (HTTPS) by checking the request protocol - * and x-forwarded-proto header (for reverse proxy scenarios). - * Defaults to false (HTTP) if unable to determine. - */ -export function isSecureConnection(ctx: Context): boolean { - // Check x-forwarded-proto header first (reverse proxy) - const forwardedProto = ctx.req.header('x-forwarded-proto'); - if (forwardedProto) { - return forwardedProto === 'https'; - } - - // Check the request URL protocol if available - try { - if (ctx.req.url) { - const url = new URL(ctx.req.url); - return url.protocol === 'https:'; - } - } catch { - // Fall through to default - } - - // Default to HTTP (e.g., for localhost development) - return false; -} - -/** - * Signs a thread ID using HMAC SHA-256 and returns it in the format: threadId;signature - * Format: thrd_abc123;base64signature - */ -export async function signThreadId(threadId: string, secret: string): Promise { - const hasher = new Bun.CryptoHasher('sha256', secret); - hasher.update(threadId); - const signatureBase64 = hasher.digest('base64'); - - return `${threadId};${signatureBase64}`; -} - -/** - * Verifies a signed thread ID header and returns the thread ID if valid, or undefined if invalid. - * Expected format: thrd_abc123;base64signature - */ -export async function verifySignedThreadId( - signedValue: string, - secret: string -): Promise { - const parts = signedValue.split(';'); - if (parts.length !== 2) { - return undefined; - } - - const [threadId, providedSignature] = parts; - - // Validate both parts exist - if (!threadId || !providedSignature) { - return undefined; - } - - // Validate thread ID format before verifying signature - if (!isValidThreadId(threadId)) { - return undefined; - } - - // Re-sign the thread ID and compare signatures - const expectedSigned = await signThreadId(threadId, secret); - const expectedSignature = expectedSigned.split(';')[1]; - - // Validate signature exists - if (!expectedSignature) { - return undefined; - } - - // Constant-time comparison to prevent timing attacks - // Check lengths match first (fail fast if different lengths) - if (providedSignature.length !== expectedSignature.length) { - return undefined; - } - - try { - // Convert to Buffers for constant-time comparison - const providedBuffer = Buffer.from(providedSignature, 'base64'); - const expectedBuffer = Buffer.from(expectedSignature, 'base64'); - - if (timingSafeEqual(providedBuffer, expectedBuffer)) { - return threadId; - } - } catch { - // Comparison failed or buffer conversion error - return undefined; - } - - return undefined; -} - -/** - * DefaultThreadIDProvider will look for an HTTP header `x-thread-id` first, - * then fall back to a signed cookie named `atid`, and use that as the thread id. - * If not found, generate a new one. Validates incoming thread IDs against - * runtime constraints. Uses AGENTUITY_SDK_KEY for signing, falls back to 'agentuity'. - */ -export class DefaultThreadIDProvider implements ThreadIDProvider { - private getSecret(): string { - return process.env.AGENTUITY_SDK_KEY || 'agentuity'; - } - - async getThreadId(_appState: AppState, ctx: Context): Promise { - let threadId: string | undefined; - const secret = this.getSecret(); - - // Check signed header first - const headerValue = ctx.req.header('x-thread-id'); - if (headerValue) { - const verifiedThreadId = await verifySignedThreadId(headerValue, secret); - if (verifiedThreadId) { - threadId = verifiedThreadId; - } - } - - // Fall back to signed cookie - if (!threadId) { - const cookieValue = await getSignedCookie(ctx, secret, 'atid'); - if (cookieValue && typeof cookieValue === 'string' && isValidThreadId(cookieValue)) { - threadId = cookieValue; - } - } - - threadId = threadId || generateId('thrd'); - - await setSignedCookie(ctx, 'atid', threadId, secret, { - httpOnly: true, - secure: isSecureConnection(ctx), - sameSite: 'Lax', - path: '/', - maxAge: 604800, // 1 week in seconds - }); - - // Set signed header in response - const signedHeader = await signThreadId(threadId, secret); - ctx.header('x-thread-id', signedHeader); - return threadId; - } -} - -type LazyStateStatus = 'idle' | 'pending-writes' | 'loaded'; - -type RestoreFn = () => Promise<{ state: Map; metadata: Record }>; - -export class LazyThreadState implements ThreadState { - #status: LazyStateStatus = 'idle'; - #state: Map = new Map(); - #pendingOperations: MergeOperation[] = []; - #initialStateJson: string | undefined; - #restoreFn: RestoreFn; - #loadingPromise: Promise | null = null; - - constructor(restoreFn: RestoreFn) { - this.#restoreFn = restoreFn; - } - - get loaded(): boolean { - return this.#status === 'loaded'; - } - - get dirty(): boolean { - if (this.#status === 'pending-writes') { - return this.#pendingOperations.length > 0; - } - if (this.#status === 'loaded') { - const currentJson = JSON.stringify(Object.fromEntries(this.#state)); - return currentJson !== this.#initialStateJson; - } - return false; - } - - private async ensureLoaded(): Promise { - if (this.#status === 'loaded') { - return; - } - - if (this.#loadingPromise) { - await this.#loadingPromise; - return; - } - - this.#loadingPromise = (async () => { - try { - await this.doLoad(); - } finally { - this.#loadingPromise = null; - } - })(); - - await this.#loadingPromise; - } - - private async doLoad(): Promise { - const { state } = await this.#restoreFn(); - - // Initialize state from restored data - this.#state = new Map(state); - this.#initialStateJson = JSON.stringify(Object.fromEntries(this.#state)); - - // Apply any pending operations - for (const op of this.#pendingOperations) { - switch (op.op) { - case 'clear': - this.#state.clear(); - break; - case 'set': - if (op.key !== undefined) { - this.#state.set(op.key, op.value); - } - break; - case 'delete': - if (op.key !== undefined) { - this.#state.delete(op.key); - } - break; - case 'push': - if (op.key !== undefined) { - const existing = this.#state.get(op.key); - if (Array.isArray(existing)) { - existing.push(op.value); - // Apply maxRecords limit - if (op.maxRecords !== undefined && existing.length > op.maxRecords) { - existing.splice(0, existing.length - op.maxRecords); - } - } else if (existing === undefined) { - this.#state.set(op.key, [op.value]); - } - // If existing is non-array, silently skip (error would have been thrown if loaded) - } - break; - } - } - - this.#pendingOperations = []; - this.#status = 'loaded'; - } - - async get(key: string): Promise { - await this.ensureLoaded(); - return this.#state.get(key) as T | undefined; - } - - async set(key: string, value: T): Promise { - if (this.#status === 'loaded') { - this.#state.set(key, value); - } else { - this.#pendingOperations.push({ op: 'set', key, value }); - if (this.#status === 'idle') { - this.#status = 'pending-writes'; - } - } - } - - async has(key: string): Promise { - await this.ensureLoaded(); - return this.#state.has(key); - } - - async delete(key: string): Promise { - if (this.#status === 'loaded') { - this.#state.delete(key); - } else { - this.#pendingOperations.push({ op: 'delete', key }); - if (this.#status === 'idle') { - this.#status = 'pending-writes'; - } - } - } - - async clear(): Promise { - if (this.#status === 'loaded') { - this.#state.clear(); - } else { - // Clear replaces all previous pending operations - this.#pendingOperations = [{ op: 'clear' }]; - if (this.#status === 'idle') { - this.#status = 'pending-writes'; - } - } - } - - async entries(): Promise<[string, T][]> { - await this.ensureLoaded(); - return Array.from(this.#state.entries()) as [string, T][]; - } - - async keys(): Promise { - await this.ensureLoaded(); - return Array.from(this.#state.keys()); - } - - async values(): Promise { - await this.ensureLoaded(); - return Array.from(this.#state.values()) as T[]; - } - - async size(): Promise { - await this.ensureLoaded(); - return this.#state.size; - } - - async push(key: string, value: T, maxRecords?: number): Promise { - if (this.#status === 'loaded') { - // When loaded, push to local array - const existing = this.#state.get(key); - if (Array.isArray(existing)) { - existing.push(value); - // Apply maxRecords limit - if (maxRecords !== undefined && existing.length > maxRecords) { - existing.splice(0, existing.length - maxRecords); - } - } else if (existing === undefined) { - this.#state.set(key, [value]); - } else { - throw new Error(`Cannot push to non-array value at key "${key}"`); - } - } else { - // Queue push operation for merge - const op: MergeOperation = { op: 'push', key, value }; - if (maxRecords !== undefined) { - op.maxRecords = maxRecords; - } - this.#pendingOperations.push(op); - if (this.#status === 'idle') { - this.#status = 'pending-writes'; - } - } - } - - /** - * Get the current status for save logic - * @internal - */ - getStatus(): LazyStateStatus { - return this.#status; - } - - /** - * Get pending operations for merge command - * @internal - */ - getPendingOperations(): MergeOperation[] { - return [...this.#pendingOperations]; - } - - /** - * Get serialized state for full save. - * Ensures state is loaded before serializing. - * @internal - */ - async getSerializedState(): Promise> { - await this.ensureLoaded(); - return Object.fromEntries(this.#state); - } -} - -export class DefaultThread implements Thread { - readonly id: string; - readonly state: LazyThreadState; - #metadata: Record | null = null; - #metadataDirty = false; - #metadataLoadPromise: Promise | null = null; - private provider: ThreadProvider; - #restoreFn: RestoreFn; - #restoredMetadata: Record | undefined; - - constructor( - provider: ThreadProvider, - id: string, - restoreFn: RestoreFn, - initialMetadata?: Record - ) { - this.provider = provider; - this.id = id; - this.#restoreFn = restoreFn; - this.#restoredMetadata = initialMetadata; - this.state = new LazyThreadState(restoreFn); - } - - private async ensureMetadataLoaded(): Promise { - if (this.#metadata !== null) { - return; - } - - // If we have initial metadata from thread creation, use it - if (this.#restoredMetadata !== undefined) { - this.#metadata = this.#restoredMetadata; - return; - } - - if (this.#metadataLoadPromise) { - await this.#metadataLoadPromise; - return; - } - - this.#metadataLoadPromise = (async () => { - try { - await this.doLoadMetadata(); - } finally { - this.#metadataLoadPromise = null; - } - })(); - - await this.#metadataLoadPromise; - } - - private async doLoadMetadata(): Promise { - const { metadata } = await this.#restoreFn(); - this.#metadata = metadata; - } - - async getMetadata(): Promise> { - await this.ensureMetadataLoaded(); - return { ...this.#metadata! }; - } - - async setMetadata(metadata: Record): Promise { - this.#metadata = metadata; - this.#metadataDirty = true; - } - - addEventListener(eventName: ThreadEventName, callback: ThreadEventCallback): void { - let listeners = threadEventListeners.get(this); - if (!listeners) { - listeners = new Map(); - threadEventListeners.set(this, listeners); - } - let callbacks = listeners.get(eventName); - if (!callbacks) { - callbacks = new Set(); - listeners.set(eventName, callbacks); - } - callbacks.add(callback); - } - - removeEventListener(eventName: ThreadEventName, callback: ThreadEventCallback): void { - const listeners = threadEventListeners.get(this); - if (!listeners) return; - const callbacks = listeners.get(eventName); - if (!callbacks) return; - callbacks.delete(callback); - } - - async fireEvent(eventName: ThreadEventName): Promise { - await fireThreadEvent(this, eventName); - } - - async destroy(): Promise { - await this.provider.destroy(this); - } - - /** - * Check if thread has any data (state or metadata) - */ - async empty(): Promise { - const stateSize = await this.state.size(); - // Check both loaded metadata and initial metadata from constructor - const meta = this.#metadata ?? this.#restoredMetadata ?? {}; - return stateSize === 0 && Object.keys(meta).length === 0; - } - - /** - * Check if thread needs saving - * @internal - */ - needsSave(): boolean { - return this.state.dirty || this.#metadataDirty; - } - - /** - * Get the save mode for this thread - * @internal - */ - getSaveMode(): 'none' | 'merge' | 'full' { - const stateStatus = this.state.getStatus(); - - if (stateStatus === 'idle' && !this.#metadataDirty) { - return 'none'; - } - - if (stateStatus === 'pending-writes') { - return 'merge'; - } - - if (stateStatus === 'loaded' && (this.state.dirty || this.#metadataDirty)) { - return 'full'; - } - - // Only metadata was changed without loading state - if (this.#metadataDirty) { - return 'merge'; - } - - return 'none'; - } - - /** - * Get pending operations for merge command - * @internal - */ - getPendingOperations(): MergeOperation[] { - return this.state.getPendingOperations(); - } - - /** - * Get metadata for saving (returns null if not loaded/modified) - * @internal - */ - getMetadataForSave(): Record | undefined { - if (this.#metadataDirty && this.#metadata) { - return this.#metadata; - } - return undefined; - } - - /** - * Get serialized state for full save. - * Ensures state is loaded before serializing. - * @internal - */ - async getSerializedState(): Promise { - const state = await this.state.getSerializedState(); - // Also ensure metadata is loaded - const meta = this.#metadata ?? this.#restoredMetadata ?? {}; - const hasState = Object.keys(state).length > 0; - const hasMetadata = Object.keys(meta).length > 0; - - if (!hasState && !hasMetadata) { - return ''; - } - - const data: { state?: Record; metadata?: Record } = {}; - - if (hasState) { - data.state = state; - } - - if (hasMetadata) { - data.metadata = meta; - } - - return JSON.stringify(data); - } -} - -export class DefaultSession implements Session { - readonly id: string; - readonly thread: Thread; - readonly state: Map; - metadata: Record; - - constructor(thread: Thread, id: string, metadata?: Record) { - this.id = id; - this.thread = thread; - this.state = new Map(); - this.metadata = metadata || {}; - } - - addEventListener(eventName: SessionEventName, callback: SessionEventCallback): void { - let listeners = sessionEventListeners.get(this); - if (!listeners) { - listeners = new Map(); - sessionEventListeners.set(this, listeners); - } - let callbacks = listeners.get(eventName); - if (!callbacks) { - callbacks = new Set(); - listeners.set(eventName, callbacks); - } - callbacks.add(callback); - } - - removeEventListener(eventName: SessionEventName, callback: SessionEventCallback): void { - const listeners = sessionEventListeners.get(this); - if (!listeners) return; - const callbacks = listeners.get(eventName); - if (!callbacks) return; - callbacks.delete(callback); - } - - async fireEvent(eventName: SessionEventName): Promise { - await fireSessionEvent(this, eventName); - } - - /** - * Serialize session state to JSON string for persistence. - * Returns undefined if state is empty or exceeds 1MB limit. - * @internal - */ - serializeUserData(): string | undefined { - if (this.state.size === 0) { - return undefined; - } - - try { - const obj = Object.fromEntries(this.state); - const json = JSON.stringify(obj); - - // Check 1MB limit (1,048,576 bytes) - const sizeInBytes = new TextEncoder().encode(json).length; - if (sizeInBytes > 1048576) { - console.error( - `Session ${this.id} user_data exceeds 1MB limit (${sizeInBytes} bytes), data will not be persisted` - ); - return undefined; - } - - return json; - } catch (err) { - console.error(`Failed to serialize session ${this.id} user_data:`, err); - return undefined; - } - } -} - -/** - * WebSocket client for thread state persistence. - * - * **WARNING: This class is exported for testing purposes only and is subject to change - * without notice. Do not use this class directly in production code.** - * - * @internal - * @experimental - */ -/** - * Configuration options for ThreadWebSocketClient - */ -export interface ThreadWebSocketClientOptions { - /** Connection timeout in milliseconds (default: 10000) */ - connectionTimeoutMs?: number; - /** Request timeout in milliseconds (default: 10000) */ - requestTimeoutMs?: number; - /** Base delay for reconnection backoff in milliseconds (default: 1000) */ - reconnectBaseDelayMs?: number; - /** Maximum delay for reconnection backoff in milliseconds (default: 30000) */ - reconnectMaxDelayMs?: number; - /** Maximum number of reconnection attempts (default: 5) */ - maxReconnectAttempts?: number; -} - -export class ThreadWebSocketClient { - private ws: WebSocket | null = null; - private authenticated = false; - private pendingRequests = new Map< - string, - { resolve: (data?: string) => void; reject: (err: Error) => void } - >(); - private reconnectAttempts = 0; - private maxReconnectAttempts: number; - private apiKey: string; - private wsUrl: string; - private wsConnecting: Promise | null = null; - private reconnectTimer: ReturnType | null = null; - private isDisposed = false; - private initialConnectResolve: (() => void) | null = null; - private initialConnectReject: ((err: Error) => void) | null = null; - private connectionTimeoutMs: number; - private requestTimeoutMs: number; - private reconnectBaseDelayMs: number; - private reconnectMaxDelayMs: number; - - constructor(apiKey: string, wsUrl: string, options: ThreadWebSocketClientOptions = {}) { - this.apiKey = apiKey; - this.wsUrl = wsUrl; - this.connectionTimeoutMs = options.connectionTimeoutMs ?? 10_000; - this.requestTimeoutMs = options.requestTimeoutMs ?? 10_000; - this.reconnectBaseDelayMs = options.reconnectBaseDelayMs ?? 1_000; - this.reconnectMaxDelayMs = options.reconnectMaxDelayMs ?? 30_000; - this.maxReconnectAttempts = options.maxReconnectAttempts ?? 5; - } - - async connect(): Promise { - return new Promise((resolve, reject) => { - // Store the initial connect promise callbacks if this is the first attempt - if (this.reconnectAttempts === 0) { - this.initialConnectResolve = resolve; - this.initialConnectReject = reject; - } - - // Set connection timeout - const connectionTimeout = setTimeout(() => { - this.cleanup(); - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(new Error(`WebSocket connection timeout (${this.connectionTimeoutMs}ms)`)); - }, this.connectionTimeoutMs); - - try { - this.ws = new WebSocket(this.wsUrl); - - this.ws.addEventListener('open', () => { - internal.info('WebSocket connected'); - // Send authentication (do NOT clear timeout yet - wait for auth response) - this.ws?.send(JSON.stringify({ authorization: this.apiKey })); - }); - - this.ws.addEventListener('message', (event: MessageEvent) => { - try { - const message = JSON.parse(event.data); - - // Handle auth response - if ('success' in message && !this.authenticated) { - clearTimeout(connectionTimeout); - if (message.success) { - this.authenticated = true; - this.reconnectAttempts = 0; - - // Resolve both the current promise and the initial connect promise - const resolveFn = this.initialConnectResolve || resolve; - this.initialConnectResolve = null; - this.initialConnectReject = null; - resolveFn(); - } else { - const err = new Error( - `WebSocket authentication failed: ${message.error || 'Unknown error'}` - ); - this.cleanup(); - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(err); - } - return; - } - - // Handle action response - if ('id' in message && this.pendingRequests.has(message.id)) { - const pending = this.pendingRequests.get(message.id)!; - this.pendingRequests.delete(message.id); - - if (message.success) { - pending.resolve(message.data); - } else { - pending.reject(new Error(message.error || 'Request failed')); - } - } - } catch { - // Ignore parse errors - } - }); - - this.ws.addEventListener('error', (_event: Event) => { - clearTimeout(connectionTimeout); - if (!this.authenticated) { - // Don't reject immediately if we'll attempt reconnection - if (this.reconnectAttempts >= this.maxReconnectAttempts || this.isDisposed) { - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(new Error(`WebSocket error`)); - } - } - }); - - this.ws.addEventListener('close', () => { - clearTimeout(connectionTimeout); - const wasAuthenticated = this.authenticated; - this.authenticated = false; - - // Reject all pending requests - for (const [id, pending] of this.pendingRequests) { - pending.reject(new Error('WebSocket connection closed')); - this.pendingRequests.delete(id); - } - - // Don't attempt reconnection if disposed - if (this.isDisposed) { - // Reject initial connect if still pending - if (!wasAuthenticated && this.initialConnectReject) { - this.initialConnectReject(new Error('WebSocket closed before authentication')); - this.initialConnectResolve = null; - this.initialConnectReject = null; - } - return; - } - - // Attempt reconnection if within retry limits (even if auth didn't complete) - // This handles server rollouts where connection closes before auth finishes - if (this.reconnectAttempts < this.maxReconnectAttempts) { - this.reconnectAttempts++; - const delay = Math.min( - this.reconnectBaseDelayMs * Math.pow(2, this.reconnectAttempts), - this.reconnectMaxDelayMs - ); - - internal.info( - `WebSocket disconnected, attempting reconnection ${this.reconnectAttempts}/${this.maxReconnectAttempts} in ${delay}ms` - ); - - // Schedule reconnection with backoff delay - this.reconnectTimer = setTimeout(() => { - this.reconnectTimer = null; - // Create new connection promise for reconnection - this.wsConnecting = this.connect().catch(() => { - // Reconnection failed, reset - this.wsConnecting = null; - }); - }, delay); - } else { - internal.error( - `WebSocket disconnected after ${this.reconnectAttempts} attempts, giving up` - ); - - // Reject initial connect if still pending (all attempts exhausted) - if (!wasAuthenticated && this.initialConnectReject) { - this.initialConnectReject( - new Error( - `WebSocket closed before authentication after ${this.reconnectAttempts} attempts` - ) - ); - this.initialConnectResolve = null; - this.initialConnectReject = null; - } - } - }); - } catch (err) { - clearTimeout(connectionTimeout); - const rejectFn = this.initialConnectReject || reject; - this.initialConnectResolve = null; - this.initialConnectReject = null; - rejectFn(err as Error); - } - }); - } - - async restore(threadId: string): Promise { - // Wait for connection/reconnection if in progress - if (this.wsConnecting) { - await this.wsConnecting; - } - - if (!this.authenticated || !this.ws) { - throw new Error('WebSocket not connected or authenticated'); - } - - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { resolve, reject }); - - const message = { - id: requestId, - action: 'restore', - data: { thread_id: threadId }, - }; - - this.ws!.send(JSON.stringify(message)); - - // Timeout after configured duration - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error('Request timeout')); - } - }, this.requestTimeoutMs); - }); - } - - async save( - threadId: string, - userData: string, - threadMetadata?: Record - ): Promise { - // Wait for connection/reconnection if in progress - if (this.wsConnecting) { - await this.wsConnecting; - } - - if (!this.authenticated || !this.ws) { - throw new Error('WebSocket not connected or authenticated'); - } - - // Check 1MB limit - const sizeInBytes = new TextEncoder().encode(userData).length; - if (sizeInBytes > 1048576) { - console.error( - `Thread ${threadId} user_data exceeds 1MB limit (${sizeInBytes} bytes), data will not be persisted` - ); - return; - } - - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { - resolve: () => resolve(), - reject, - }); - - const data: { thread_id: string; user_data: string; metadata?: Record } = - { - thread_id: threadId, - user_data: userData, - }; - - if (threadMetadata && Object.keys(threadMetadata).length > 0) { - data.metadata = threadMetadata; - } - - const message = { - id: requestId, - action: 'save', - data, - }; - - this.ws!.send(JSON.stringify(message)); - - // Timeout after configured duration - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error('Request timeout')); - } - }, this.requestTimeoutMs); - }); - } - - async delete(threadId: string): Promise { - // Wait for connection/reconnection if in progress - if (this.wsConnecting) { - await this.wsConnecting; - } - - if (!this.authenticated || !this.ws) { - throw new Error('WebSocket not connected or authenticated'); - } - - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { - resolve: () => resolve(), - reject, - }); - - const message = { - id: requestId, - action: 'delete', - data: { thread_id: threadId }, - }; - - this.ws!.send(JSON.stringify(message)); - - // Timeout after configured duration - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error('Request timeout')); - } - }, this.requestTimeoutMs); - }); - } - - async merge( - threadId: string, - operations: MergeOperation[], - metadata?: Record - ): Promise { - // Wait for connection/reconnection if in progress - if (this.wsConnecting) { - await this.wsConnecting; - } - - if (!this.authenticated || !this.ws) { - throw new Error('WebSocket not connected or authenticated'); - } - - return new Promise((resolve, reject) => { - const requestId = crypto.randomUUID(); - this.pendingRequests.set(requestId, { - resolve: () => resolve(), - reject, - }); - - const data: { - thread_id: string; - operations: MergeOperation[]; - metadata?: Record; - } = { - thread_id: threadId, - operations, - }; - - if (metadata && Object.keys(metadata).length > 0) { - data.metadata = metadata; - } - - const message = { - id: requestId, - action: 'merge', - data, - }; - - this.ws!.send(JSON.stringify(message)); - - // Timeout after configured duration - setTimeout(() => { - if (this.pendingRequests.has(requestId)) { - this.pendingRequests.delete(requestId); - reject(new Error('Request timeout')); - } - }, this.requestTimeoutMs); - }); - } - - cleanup(): void { - // Mark as disposed to prevent new reconnection attempts - this.isDisposed = true; - - // Cancel any pending reconnection timer - if (this.reconnectTimer) { - clearTimeout(this.reconnectTimer); - this.reconnectTimer = null; - } - - if (this.ws) { - this.ws.close(); - this.ws = null; - } - this.authenticated = false; - this.pendingRequests.clear(); - this.reconnectAttempts = 0; - this.wsConnecting = null; - this.initialConnectResolve = null; - this.initialConnectReject = null; - } -} - -export class DefaultThreadProvider implements ThreadProvider { - private appState: AppState | null = null; - private wsClient: ThreadWebSocketClient | null = null; - private wsConnecting: Promise | null = null; - private threadIDProvider: ThreadIDProvider | null = null; - - async initialize(appState: AppState): Promise { - this.appState = appState; - this.threadIDProvider = new DefaultThreadIDProvider(); - - // Initialize WebSocket connection for thread persistence (async, non-blocking) - const apiKey = process.env.AGENTUITY_SDK_KEY; - if (apiKey) { - const serviceUrls = getServiceUrls(process.env.AGENTUITY_REGION ?? 'usc'); - const catalystUrl = serviceUrls.catalyst; - const wsUrl = new URL('/thread/ws', catalystUrl.replace(/^http/, 'ws')); - internal.debug('connecting to %s', wsUrl); - - this.wsClient = new ThreadWebSocketClient(apiKey, wsUrl.toString()); - // Connect in background, don't block initialization - this.wsConnecting = this.wsClient - .connect() - .then(() => { - this.wsConnecting = null; - }) - .catch((err) => { - internal.error('Failed to connect to thread WebSocket:', err); - this.wsClient = null; - this.wsConnecting = null; - }); - } - } - - setThreadIDProvider(provider: ThreadIDProvider): void { - this.threadIDProvider = provider; - } - - async restore(ctx: Context): Promise { - const threadId = await this.threadIDProvider!.getThreadId(this.appState!, ctx); - validateThreadIdOrThrow(threadId); - internal.info('[thread] creating lazy thread %s (no eager restore)', threadId); - - // Create a restore function that will be called lazily when state/metadata is accessed - const restoreFn = async (): Promise<{ - state: Map; - metadata: Record; - }> => { - internal.info('[thread] lazy loading state for thread %s', threadId); - - // Wait for WebSocket connection if still connecting - if (this.wsConnecting) { - internal.info('[thread] waiting for WebSocket connection'); - await this.wsConnecting; - } - - if (!this.wsClient) { - internal.info('[thread] no WebSocket client available, returning empty state'); - return { state: new Map(), metadata: {} }; - } - - try { - const restoredData = await this.wsClient.restore(threadId); - if (restoredData) { - internal.info('[thread] restored state: %d bytes', restoredData.length); - const { flatStateJson, metadata } = parseThreadData(restoredData); - - const state = new Map(); - if (flatStateJson) { - try { - const data = JSON.parse(flatStateJson); - for (const [key, value] of Object.entries(data)) { - state.set(key, value); - } - } catch { - internal.info('[thread] failed to parse state JSON'); - } - } - - return { state, metadata: metadata || {} }; - } - internal.info('[thread] no existing state found'); - return { state: new Map(), metadata: {} }; - } catch (err) { - internal.info('[thread] WebSocket restore failed: %s', err); - return { state: new Map(), metadata: {} }; - } - }; - - const thread = new DefaultThread(this, threadId, restoreFn); - await fireEvent('thread.created', thread); - return thread; - } - - async save(thread: Thread): Promise { - if (thread instanceof DefaultThread) { - const saveMode = thread.getSaveMode(); - internal.info( - '[thread] DefaultThreadProvider.save() - thread %s, saveMode: %s, hasWsClient: %s', - thread.id, - saveMode, - !!this.wsClient - ); - - if (saveMode === 'none') { - internal.info('[thread] skipping save - no changes'); - return; - } - - // Wait for WebSocket connection if still connecting - if (this.wsConnecting) { - internal.info('[thread] waiting for WebSocket connection'); - await this.wsConnecting; - } - - if (!this.wsClient) { - internal.info('[thread] no WebSocket client available, skipping save'); - return; - } - - try { - if (saveMode === 'merge') { - const operations = thread.getPendingOperations(); - const metadata = thread.getMetadataForSave(); - internal.info( - '[thread] sending merge command with %d operations', - operations.length - ); - await this.wsClient.merge(thread.id, operations, metadata); - internal.info('[thread] WebSocket merge completed'); - } else if (saveMode === 'full') { - const serialized = await thread.getSerializedState(); - internal.info( - '[thread] saving to WebSocket, serialized length: %d', - serialized.length - ); - const metadata = thread.getMetadataForSave(); - await this.wsClient.save(thread.id, serialized, metadata); - internal.info('[thread] WebSocket save completed'); - } - } catch (err) { - internal.info('[thread] WebSocket save/merge failed: %s', err); - // Don't throw - allow request to complete even if save fails - } - } - } - - async destroy(thread: Thread): Promise { - if (thread instanceof DefaultThread) { - try { - // Wait for WebSocket connection if still connecting - if (this.wsConnecting) { - await this.wsConnecting; - } - - // Delete thread from remote storage - if (this.wsClient) { - try { - await this.wsClient.delete(thread.id); - } catch { - // Thread might not exist in remote storage if it was never persisted - // This is normal for ephemeral threads, so just log at debug level - internal.debug( - `Thread ${thread.id} not found in remote storage (already deleted or never persisted)` - ); - // Continue with local cleanup even if remote delete fails - } - } - - await thread.fireEvent('destroyed'); - await fireEvent('thread.destroyed', thread); - } finally { - threadEventListeners.delete(thread); - } - } - } -} - -export class DefaultSessionProvider implements SessionProvider { - private sessions = new Map(); - - async initialize(_appState: AppState): Promise { - // No initialization needed for in-memory provider - } - - async restore(thread: Thread, sessionId: string): Promise { - internal.info('[session] restoring session %s for thread %s', sessionId, thread.id); - let session = this.sessions.get(sessionId); - if (!session) { - session = new DefaultSession(thread, sessionId); - this.sessions.set(sessionId, session); - internal.info('[session] created new session, firing session.started'); - await fireEvent('session.started', session); - } else { - internal.info('[session] found existing session'); - } - return session; - } - - async save(session: Session): Promise { - if (session instanceof DefaultSession) { - internal.info( - '[session] DefaultSessionProvider.save() - firing completed event for session %s', - session.id - ); - try { - await session.fireEvent('completed'); - internal.info('[session] session.fireEvent completed, firing app event'); - await fireEvent('session.completed', session); - internal.info('[session] session.completed app event fired'); - } finally { - this.sessions.delete(session.id); - sessionEventListeners.delete(session); - } - } - } -} diff --git a/packages/runtime/src/signature.ts b/packages/runtime/src/signature.ts deleted file mode 100644 index 4177afc02..000000000 --- a/packages/runtime/src/signature.ts +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Shared HMAC-SHA256 signature verification for internal routes. - * Used by cron handlers and workbench routes. - */ - -import { isProduction } from './_config'; - -// Maximum age for signatures (5 minutes) -const MAX_SIGNATURE_AGE_SECONDS = 300; - -/** - * Verifies an HMAC-SHA256 signature. - * - * The signature format is "v1=<64 hex chars>" where the hex payload is the - * HMAC-SHA256 of "{timestamp}.{body}" using AGENTUITY_SDK_KEY as the key. - * - * In non-production environments (dev mode), this function always returns true - * to allow local development without signature verification. - * - * In production, requests are rejected if AGENTUITY_SDK_KEY is not set. - * - * @param signature - The signature header value (format: "v1=<64 hex chars>") - * @param timestamp - The timestamp header value (unix seconds as string) - * @param body - The request body (empty string for GET/DELETE requests) - * @returns true if signature is valid, or if not in production mode - */ -export async function verifySignature( - signature: string | undefined, - timestamp: string | undefined, - body: string -): Promise { - // Skip auth in dev mode - if (!isProduction()) { - return true; - } - - const sdkKey = process.env.AGENTUITY_SDK_KEY; - if (!sdkKey) { - // No SDK key in production is a misconfiguration — reject the request - return false; - } - - // If no signature headers, reject the request - if (!signature || !timestamp) { - return false; - } - - // Verify timestamp is within acceptable range (prevent replay attacks) - const ts = parseInt(timestamp, 10); - const now = Math.floor(Date.now() / 1000); - if (Number.isNaN(ts) || Math.abs(now - ts) > MAX_SIGNATURE_AGE_SECONDS) { - return false; - } - - // Validate signature format: must be 'v1=' followed by valid hex (64 chars for SHA-256) - if (!signature.startsWith('v1=')) { - return false; - } - const hexPayload = signature.slice(3); - if (!/^[0-9a-f]{64}$/i.test(hexPayload)) { - return false; - } - - // Decode hex payload into Uint8Array - const incomingSigBytes = new Uint8Array(32); - for (let i = 0; i < 32; i++) { - incomingSigBytes[i] = parseInt(hexPayload.slice(i * 2, i * 2 + 2), 16); - } - - // Verify the signature using constant-time comparison - const message = `${ts}.${body}`; - const encoder = new TextEncoder(); - const key = await crypto.subtle.importKey( - 'raw', - encoder.encode(sdkKey), - { name: 'HMAC', hash: 'SHA-256' }, - false, - ['verify'] - ); - - return crypto.subtle.verify('HMAC', key, incomingSigBytes, encoder.encode(message)); -} diff --git a/packages/runtime/src/validator.ts b/packages/runtime/src/validator.ts deleted file mode 100644 index cc870a18f..000000000 --- a/packages/runtime/src/validator.ts +++ /dev/null @@ -1,283 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { StructuredError, type InferOutput, type StandardSchemaV1 } from '@agentuity/core'; -import type { Context, MiddlewareHandler } from 'hono'; -import type { Handler } from 'hono/types'; -import { validator as honoValidator } from 'hono/validator'; -import { validateSchema, formatValidationIssues } from './_validation'; - -/** - * Route validator for standard HTTP routes (non-agent routes). - * Provides input and output validation with full type safety. - * - * **Input validation behavior by HTTP method:** - * - **GET**: Validates query parameters (accessible via `c.req.valid('query')`) - * - **POST/PUT/PATCH/DELETE**: Validates JSON body (accessible via `c.req.valid('json')`) - * - * **Output validation:** - * - Validates response JSON body before sending - * - Throws 500 Internal Server Error if validation fails - * - * @template TInput - Input schema type (query params for GET, body for POST/PUT/PATCH/DELETE) - * @template TOutput - Output schema type for response validation - * - * @example GET route with output validation only - * ```typescript - * router.get('/users', - * validator({ output: z.array(UserSchema) }), - * async (c) => { - * return c.json([{ id: '1', name: 'Alice' }]); - * } - * ); - * ``` - * - * @example GET route with query param validation - * ```typescript - * router.get('/users/:id', - * validator({ - * input: z.object({ id: z.string() }), - * output: UserSchema - * }), - * async (c) => { - * const { id } = c.req.valid('query'); // Fully typed! - * return c.json({ id, name: 'Alice' }); - * } - * ); - * ``` - * - * @example POST route with body and output validation - * ```typescript - * router.post('/users', - * validator({ - * input: z.object({ name: z.string(), email: z.string().email() }), - * output: UserSchema - * }), - * async (c) => { - * const data = c.req.valid('json'); // Fully typed! - * return c.json({ id: '1', ...data }); - * } - * ); - * ``` - */ -export interface RouteValidator { - /** - * Output-only validation (no input validation). - * Useful for GET routes without query parameters. - * - * @template TOutput - Output schema type - * @param options - Configuration object with output schema - * @returns Hono middleware handler - */ - (options: { - output: TOutput; - stream?: boolean; - }): Handler< - any, - any, - { - // eslint-disable-next-line @typescript-eslint/no-empty-object-type - in: {}; - out: { json: InferOutput }; - } - >; - - /** - * Input and output validation. - * - GET: validates query parameters - * - POST/PUT/PATCH/DELETE: validates JSON body - * - * @template TInput - Input schema type - * @template TOutput - Optional output schema type - * @param options - Configuration object with input and optional output schemas - * @returns Hono middleware handler with type inference - */ - < - TInput extends StandardSchemaV1, - TOutput extends StandardSchemaV1 | undefined = undefined, - >(options: { - input: TInput; - output?: TOutput; - stream?: boolean; - }): Handler< - any, - any, - { - // eslint-disable-next-line @typescript-eslint/no-empty-object-type - in: {}; - out: { - json: InferOutput; - query: InferOutput; - }; - } - >; -} - -/** - * Create a route validator middleware with input and/or output validation. - * - * Automatically handles different validation targets based on HTTP method: - * - GET requests: validates query parameters (if input schema provided) - * - POST/PUT/PATCH/DELETE: validates JSON body (if input schema provided) - * - All methods: validates JSON response (if output schema provided) - * - * @param options - Validation configuration - * @param options.input - Input schema (query params for GET, body for POST/PUT/PATCH/DELETE) - * @param options.output - Output schema for response validation - * @returns Hono middleware handler - * - * @example GET with query validation - * ```typescript - * import { validator } from '@agentuity/runtime'; - * - * router.get('/search', - * validator({ - * input: z.object({ q: z.string(), limit: z.number().optional() }), - * output: z.array(SearchResultSchema) - * }), - * async (c) => { - * const { q, limit } = c.req.valid('query'); // Typed! - * const results = await search(q, limit); - * return c.json(results); - * } - * ); - * ``` - * - * @example POST with body validation - * ```typescript - * router.post('/users', - * validator({ - * input: z.object({ name: z.string() }), - * output: UserSchema - * }), - * async (c) => { - * const data = c.req.valid('json'); // Typed! - * const user = await createUser(data); - * return c.json(user); - * } - * ); - * ``` - */ -export const validator: RouteValidator = ((options: { - input?: StandardSchemaV1; - output?: StandardSchemaV1; - stream?: boolean; -}) => { - const { input: inputSchema, output: outputSchema, stream } = options; - - // Helper to build input validator that detects HTTP method - const buildInputValidator = (schema: StandardSchemaV1): MiddlewareHandler => { - return async (c: Context, next) => { - const method = c.req.method.toUpperCase(); - - // GET requests validate query parameters - if (method === 'GET') { - const queryValidator = honoValidator('query', async (value, c) => { - const result = await validateSchema(schema, value); - if (!result.success) { - return c.json( - { - error: 'Validation failed', - message: formatValidationIssues(result.issues), - issues: result.issues, - }, - 400 - ); - } - return result.data; - }); - return await queryValidator(c, next); - } - - // POST/PUT/PATCH/DELETE validate JSON body - const jsonValidator = honoValidator('json', async (value, c) => { - const result = await validateSchema(schema, value); - if (!result.success) { - return c.json( - { - error: 'Validation failed', - message: formatValidationIssues(result.issues), - issues: result.issues, - }, - 400 - ); - } - return result.data; - }); - return await jsonValidator(c, next); - }; - }; - - // Output validation middleware (runs after handler) - const outputValidator: MiddlewareHandler = async (c, next) => { - await next(); - - if (!outputSchema) return; - - // Skip output validation for streaming routes - if (stream) return; - - const res = c.res; - if (!res) return; - - // Only validate JSON responses - const contentType = res.headers.get('Content-Type') ?? ''; - if (!contentType.toLowerCase().includes('application/json')) { - return; - } - - // Clone so we don't consume the body that will be sent - let responseBody: unknown; - try { - const cloned = res.clone(); - responseBody = await cloned.json(); - } catch { - const OutputValidationError = StructuredError('OutputValidationError')<{ - issues: any[]; - }>(); - throw new OutputValidationError({ - message: 'Output validation failed: response is not valid JSON', - issues: [], - }); - } - - const result = await validateSchema(outputSchema, responseBody); - if (!result.success) { - const OutputValidationError = StructuredError('OutputValidationError')<{ - issues: any[]; - }>(); - throw new OutputValidationError({ - message: `Output validation failed: ${formatValidationIssues(result.issues)}`, - issues: result.issues, - }); - } - - // Replace response with validated/sanitized JSON - c.res = new Response(JSON.stringify(result.data), { - status: res.status, - headers: res.headers, - }); - }; - - // If no input schema, only do output validation - if (!inputSchema) { - return outputValidator as unknown as Handler; - } - - // If no output schema, only do input validation - if (!outputSchema) { - return buildInputValidator(inputSchema) as unknown as Handler; - } - - // Compose: input validator → output validator - const inputMiddleware = buildInputValidator(inputSchema); - - const composed: MiddlewareHandler = async (c, next) => { - // Run input validator first, then output validator, then handler - const result = await inputMiddleware(c, async () => { - await outputValidator(c, next); - }); - // If inputMiddleware returned early (validation failed), return that response - return result; - }; - - return composed as unknown as Handler; -}) as RouteValidator; diff --git a/packages/runtime/src/version-check.ts b/packages/runtime/src/version-check.ts deleted file mode 100644 index 072b76a0a..000000000 --- a/packages/runtime/src/version-check.ts +++ /dev/null @@ -1,184 +0,0 @@ -/** - * Version consistency check for @agentuity/* packages. - * - * Logs a warning if there are mismatched major versions across SDK packages - * at runtime startup. This helps developers catch version conflicts early. - */ - -import { existsSync, readFileSync } from 'node:fs'; -import { createRequire } from 'node:module'; -import { dirname, join, parse } from 'node:path'; -import type { Logger } from './logger'; -import { isV1Package, showDeprecationWarning } from '@agentuity/core'; - -// Create a require function for resolving module paths -const require = createRequire(import.meta.url); - -/** - * Known @agentuity/* packages that should have consistent versions. - */ -const KNOWN_PACKAGES = [ - '@agentuity/core', - '@agentuity/runtime', - '@agentuity/server', - '@agentuity/frontend', - '@agentuity/react', - '@agentuity/schema', - '@agentuity/auth', - '@agentuity/postgres', - '@agentuity/drizzle', - '@agentuity/evals', - '@agentuity/workbench', - '@agentuity/queue', - '@agentuity/webhook', - '@agentuity/schedule', - '@agentuity/task', - '@agentuity/keyvalue', - '@agentuity/vector', - '@agentuity/stream', -]; - -interface PackageVersion { - name: string; - version: string; - major: number; -} - -/** - * Extract major version from semver string. - */ -function extractMajor(version: string): number { - const match = version.match(/^(\d+)\.\d+\.\d+/); - return match && match[1] ? parseInt(match[1], 10) : 0; -} - -/** - * Walk up parent directories from a starting path until package.json is found. - * Returns the path to package.json, or null if not found (reached filesystem root). - */ -function findPackageJson(startPath: string): string | null { - let currentDir = dirname(startPath); - const root = parse(currentDir).root; - - while (currentDir !== root) { - const pkgPath = join(currentDir, 'package.json'); - if (existsSync(pkgPath)) { - return pkgPath; - } - const parentDir = dirname(currentDir); - if (parentDir === currentDir) { - break; - } - currentDir = parentDir; - } - - return null; -} - -/** - * Get version of a package by resolving its main entry, - * then walking up directories to find package.json. - * - * This handles packages whose main is ./dist/index.js where package.json - * is in the parent directory, not alongside the main entry. - */ -function getPackageVersion(packageName: string): string | null { - try { - // Resolve the package main entry - const mainPath = require.resolve(packageName); - // Walk up to find package.json - const pkgPath = findPackageJson(mainPath); - if (!pkgPath) { - return null; - } - // Read and parse manually - this avoids Bun's JSON import parser - const content = readFileSync(pkgPath, 'utf-8'); - const pkgJson = JSON.parse(content); - return pkgJson?.version || null; - } catch { - return null; - } -} - -/** - * Check for version consistency across @agentuity/* packages. - * - * @param logger - Logger instance to use for warnings - */ -export function checkVersionConsistency(logger: Logger): void { - // Skip in development if flag is set (for testing) - if (process.env.AGENTUITY_SKIP_VERSION_CHECK === 'true') { - return; - } - - // Show deprecation warning for v1 packages - showDeprecationWarning(logger); - - // Collect versions of loaded packages - const versions: PackageVersion[] = []; - - for (const name of KNOWN_PACKAGES) { - const version = getPackageVersion(name); - if (version) { - versions.push({ - name, - version, - major: extractMajor(version), - }); - } - } - - // Need at least 2 packages to check consistency - if (versions.length < 2) { - return; - } - - // Check for major version mismatches - const majors = new Set(versions.map((v) => v.major)); - if (majors.size <= 1) { - return; // All packages have the same major version - } - - // Find the most common major version - const majorCounts = new Map(); - for (const v of versions) { - majorCounts.set(v.major, (majorCounts.get(v.major) || 0) + 1); - } - const sortedMajors = [...majorCounts.entries()].sort((a, b) => b[1] - a[1]); - const expectedMajor = sortedMajors[0]?.[0] ?? 2; - - // Find mismatched packages - const mismatched = versions.filter((v) => v.major !== expectedMajor); - - if (mismatched.length === 0) { - return; - } - - // Log warning - const mismatchedList = mismatched.map((v) => `${v.name}@${v.version}`).join('\n '); - - logger.warn( - 'Version mismatch detected: Some @agentuity/* packages have different major versions.\n' + - ' This may cause unexpected behavior.\n' + - '\n' + - ' Expected: v' + - expectedMajor + - '\n' + - ' Mismatched:\n' + - ' ' + - mismatchedList + - '\n' + - '\n' + - ' Run `bun install` to sync versions, or pin all @agentuity/* packages\n' + - ' to the same major version in your package.json.' - ); -} - -/** - * Check if the project is using v1 SDK packages. - * - * @returns true if any v1 packages are detected - */ -export function hasV1Packages(): boolean { - return isV1Package(); -} diff --git a/packages/runtime/src/web.ts b/packages/runtime/src/web.ts deleted file mode 100644 index d4d6a0f1b..000000000 --- a/packages/runtime/src/web.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Hono } from 'hono'; -import { serveStatic } from 'hono/bun'; -import { join, relative } from 'node:path'; -import { existsSync } from 'node:fs'; -import { mimeTypes } from '@agentuity/server'; - -/** - * Create a router that serves the web application. - * In dev mode (DEV=true), serves HTML with Vite HMR scripts (Bun server proxies assets to Vite). - * In production, serves static files from .agentuity/client/. - */ -export async function createWebRouter(): Promise { - const router = new Hono(); - const isDev = process.env.DEV === 'true'; - const rootDir = process.cwd(); - - if (isDev) { - // In dev mode, serve HTML with Vite client scripts for HMR - // Bun server proxies /src/*, /@vite/*, etc. to Vite asset server - router.get('/', (c) => { - return c.html( - ` - - - - - Agentuity App - - -
- - - - - - -` - ); - }); - } else { - // Production: serve static files from .agentuity/client/ - const clientDir = join(rootDir, '.agentuity', 'client'); - - // Verify client build exists - const indexHtmlPath = join(clientDir, 'index.html'); - if (!existsSync(indexHtmlPath)) { - throw new Error( - `Client build not found. Missing ${indexHtmlPath}. Run build to generate client assets.` - ); - } - - // Compute relative paths for serveStatic (it expects relative paths from cwd) - let relClientDir = relative(process.cwd(), clientDir); - if (!relClientDir.startsWith('.')) { - relClientDir = './' + relClientDir; - } - let relIndexPath = relative(process.cwd(), indexHtmlPath); - if (!relIndexPath.startsWith('.')) { - relIndexPath = './' + relIndexPath; - } - - // Serve static files from .agentuity/client/ - router.use('/*', serveStatic({ root: relClientDir, mimes: mimeTypes })); - - // Fallback to index.html for SPA routing - router.get('*', serveStatic({ path: relIndexPath, mimes: mimeTypes })); - } - - return router; -} diff --git a/packages/runtime/src/webrtc-signaling.ts b/packages/runtime/src/webrtc-signaling.ts deleted file mode 100644 index ad401fd7a..000000000 --- a/packages/runtime/src/webrtc-signaling.ts +++ /dev/null @@ -1,288 +0,0 @@ -import type { WebSocketConnection } from './handlers/websocket'; -import type { - SDPDescription, - ICECandidate, - SignalMessage, - WebRTCSignalingCallbacks, -} from '@agentuity/core'; - -export type { SDPDescription, ICECandidate, SignalMessage, WebRTCSignalingCallbacks }; - -/** - * Configuration options for WebRTC signaling. - */ -export interface WebRTCOptions { - /** Maximum number of peers per room (default: 2) */ - maxPeers?: number; - /** Callbacks for signaling events */ - callbacks?: WebRTCSignalingCallbacks; -} - -interface PeerConnection { - ws: WebSocketConnection; - roomId: string; -} - -/** - * In-memory room manager for WebRTC signaling. - * Tracks rooms and their connected peers. - * - * @example - * ```ts - * import { createRouter, webrtc } from '@agentuity/runtime'; - * - * const router = createRouter(); - * - * // Basic usage - * router.get('/call/signal', webrtc()); - * - * // With callbacks for monitoring - * router.get('/call/signal', webrtc({ - * maxPeers: 2, - * callbacks: { - * onRoomCreated: (roomId) => console.log(`Room ${roomId} created`), - * onPeerJoin: (peerId, roomId) => console.log(`${peerId} joined ${roomId}`), - * onPeerLeave: (peerId, roomId, reason) => { - * analytics.track('peer_left', { peerId, roomId, reason }); - * }, - * onMessage: (type, from, to, roomId) => { - * metrics.increment(`webrtc.${type}`); - * }, - * }, - * })); - * ``` - */ -export class WebRTCRoomManager { - // roomId -> Map - private rooms = new Map>(); - // ws -> peerId (reverse lookup for cleanup) - private wsToPeer = new Map(); - private maxPeers: number; - private peerIdCounter = 0; - private callbacks: WebRTCSignalingCallbacks; - - constructor(options?: WebRTCOptions) { - this.maxPeers = options?.maxPeers ?? 2; - this.callbacks = options?.callbacks ?? {}; - } - - private generatePeerId(): string { - return `peer-${Date.now()}-${++this.peerIdCounter}`; - } - - private send(ws: WebSocketConnection, msg: SignalMessage): void { - ws.send(JSON.stringify(msg)); - } - - private broadcast(roomId: string, msg: SignalMessage, excludePeerId?: string): void { - const room = this.rooms.get(roomId); - if (!room) return; - - for (const [peerId, peer] of room) { - if (peerId !== excludePeerId) { - this.send(peer.ws, msg); - } - } - } - - /** - * Handle a peer joining a room - */ - handleJoin(ws: WebSocketConnection, roomId: string): void { - let room = this.rooms.get(roomId); - const isNewRoom = !room; - - // Create room if it doesn't exist - if (!room) { - room = new Map(); - this.rooms.set(roomId, room); - } - - // Check room capacity - if (room.size >= this.maxPeers) { - const error = new Error(`Room is full (max ${this.maxPeers} peers)`); - this.callbacks.onError?.(error, undefined, roomId); - this.send(ws, { t: 'error', message: error.message }); - return; - } - - const peerId = this.generatePeerId(); - const existingPeers = Array.from(room.keys()); - - // Add peer to room - room.set(peerId, { ws, roomId }); - this.wsToPeer.set(ws, { peerId, roomId }); - - // Fire callbacks - if (isNewRoom) { - this.callbacks.onRoomCreated?.(roomId); - } - this.callbacks.onPeerJoin?.(peerId, roomId); - - // Send joined confirmation with list of existing peers - this.send(ws, { t: 'joined', peerId, roomId, peers: existingPeers }); - - // Notify existing peers about new peer - this.broadcast(roomId, { t: 'peer-joined', peerId }, peerId); - } - - /** - * Handle a peer disconnecting - */ - handleDisconnect(ws: WebSocketConnection): void { - const peerInfo = this.wsToPeer.get(ws); - if (!peerInfo) return; - - const { peerId, roomId } = peerInfo; - const room = this.rooms.get(roomId); - - if (room) { - room.delete(peerId); - - // Fire callback - this.callbacks.onPeerLeave?.(peerId, roomId, 'disconnect'); - - // Notify remaining peers - this.broadcast(roomId, { t: 'peer-left', peerId }); - - // Clean up empty room - if (room.size === 0) { - this.rooms.delete(roomId); - this.callbacks.onRoomDestroyed?.(roomId); - } - } - - this.wsToPeer.delete(ws); - } - - /** - * Relay SDP message to target peer(s) - */ - handleSDP(ws: WebSocketConnection, to: string | undefined, description: SDPDescription): void { - const peerInfo = this.wsToPeer.get(ws); - if (!peerInfo) { - const error = new Error('Not in a room'); - this.callbacks.onError?.(error); - this.send(ws, { t: 'error', message: error.message }); - return; - } - - const { peerId, roomId } = peerInfo; - const room = this.rooms.get(roomId); - if (!room) return; - - // Fire callback - this.callbacks.onMessage?.('sdp', peerId, to, roomId); - - // Server injects 'from' to prevent spoofing - const msg: SignalMessage = { t: 'sdp', from: peerId, description }; - - if (to) { - // Send to specific peer - const targetPeer = room.get(to); - if (targetPeer) { - this.send(targetPeer.ws, msg); - } - } else { - // Broadcast to all peers in room - this.broadcast(roomId, msg, peerId); - } - } - - /** - * Relay ICE candidate to target peer(s) - */ - handleICE(ws: WebSocketConnection, to: string | undefined, candidate: ICECandidate): void { - const peerInfo = this.wsToPeer.get(ws); - if (!peerInfo) { - const error = new Error('Not in a room'); - this.callbacks.onError?.(error); - this.send(ws, { t: 'error', message: error.message }); - return; - } - - const { peerId, roomId } = peerInfo; - const room = this.rooms.get(roomId); - if (!room) return; - - // Fire callback - this.callbacks.onMessage?.('ice', peerId, to, roomId); - - // Server injects 'from' to prevent spoofing - const msg: SignalMessage = { t: 'ice', from: peerId, candidate }; - - if (to) { - // Send to specific peer - const targetPeer = room.get(to); - if (targetPeer) { - this.send(targetPeer.ws, msg); - } - } else { - // Broadcast to all peers in room - this.broadcast(roomId, msg, peerId); - } - } - - /** - * Handle incoming signaling message - */ - handleMessage(ws: WebSocketConnection, data: string): void { - let msg: SignalMessage; - try { - msg = JSON.parse(data); - } catch { - const error = new Error('Invalid JSON'); - this.callbacks.onError?.(error); - this.send(ws, { t: 'error', message: error.message }); - return; - } - - // Validate message format - if (!msg || typeof msg.t !== 'string') { - const error = new Error('Invalid message format'); - this.callbacks.onError?.(error); - this.send(ws, { t: 'error', message: error.message }); - return; - } - - switch (msg.t) { - case 'join': - if (!msg.roomId || typeof msg.roomId !== 'string') { - this.send(ws, { t: 'error', message: 'Missing or invalid roomId' }); - return; - } - this.handleJoin(ws, msg.roomId); - break; - case 'sdp': - if (!msg.description || typeof msg.description !== 'object') { - this.send(ws, { t: 'error', message: 'Missing or invalid description' }); - return; - } - this.handleSDP(ws, msg.to, msg.description); - break; - case 'ice': - if (!msg.candidate || typeof msg.candidate !== 'object') { - this.send(ws, { t: 'error', message: 'Missing or invalid candidate' }); - return; - } - this.handleICE(ws, msg.to, msg.candidate); - break; - default: - this.send(ws, { - t: 'error', - message: `Unknown message type: ${(msg as { t: string }).t}`, - }); - } - } - - /** - * Get room stats for debugging - */ - getRoomStats(): { roomCount: number; totalPeers: number } { - let totalPeers = 0; - for (const room of this.rooms.values()) { - totalPeers += room.size; - } - return { roomCount: this.rooms.size, totalPeers }; - } -} diff --git a/packages/runtime/src/workbench.ts b/packages/runtime/src/workbench.ts deleted file mode 100644 index 59f1fafa8..000000000 --- a/packages/runtime/src/workbench.ts +++ /dev/null @@ -1,725 +0,0 @@ -import type { Context, Handler, MiddlewareHandler } from 'hono'; -import { toJSONSchema } from '@agentuity/server'; -import type { JSONSchema } from '@agentuity/schema'; -import { getAgents, createAgentMiddleware } from './agent'; -import { createRouter } from './router'; -import { websocket, type WebSocketConnection } from './handlers/websocket'; -import { privateContext } from './_server'; -import { getThreadProvider } from './_services'; -import { - loadBuildMetadata, - getAgentMetadataByAgentId, - hasMetadata, - ensureAgentsImported, -} from './_metadata'; -import { TOKENS_HEADER, DURATION_HEADER } from './_tokens'; -import { verifySignature } from './signature'; -import { isProduction } from './_config'; -import { createCorsMiddleware } from './middleware'; - -/** - * Trusted Agentuity domain suffixes for workbench CORS. - * Any origin matching https://*.{suffix} is allowed. - * In development, any origin is allowed. - */ -const TRUSTED_WORKBENCH_DOMAIN_SUFFIXES = ['.agentuity.com', '.agentuity.dev', '.agentuity.io']; - -/** - * Check if an origin is a trusted Agentuity app origin. - * Matches any HTTPS subdomain of the trusted domain suffixes. - */ -function isTrustedWorkbenchOrigin(origin: string): boolean { - try { - const url = new URL(origin); - if (url.protocol !== 'https:') return false; - return TRUSTED_WORKBENCH_DOMAIN_SUFFIXES.some((suffix) => url.hostname.endsWith(suffix)); - } catch { - return false; - } -} - -/** - * Middleware that verifies workbench request signatures in production. - * In development mode, all requests are allowed. - * Supports both header-based auth (for HTTP) and query param auth (for WebSocket). - */ -const createWorkbenchAuthMiddleware = (): MiddlewareHandler => { - return async (c, next) => { - // Allow CORS preflight requests through (they don't have auth headers) - if (c.req.method === 'OPTIONS') { - return next(); - } - - // Skip auth in dev mode - if (!isProduction()) { - return next(); - } - - // Check signature from headers or query params (for WebSocket) - const signature = c.req.header('X-Agentuity-Workbench-Signature') || c.req.query('signature'); - const timestamp = c.req.header('X-Agentuity-Workbench-Timestamp') || c.req.query('timestamp'); - - // For non-POST requests, body is empty - let body = ''; - if (c.req.method === 'POST') { - const clonedReq = c.req.raw.clone(); - body = await clonedReq.text(); - } - - const isValid = await verifySignature(signature, timestamp, body); - if (!isValid) { - return c.json({ error: 'Unauthorized' }, 401); - } - - return next(); - }; -}; - -/** - * Middleware that captures execution metadata (tokens, duration, sessionId) after the handler completes - * and saves it to thread state. Applied only to the /execute route. - */ -const createWorkbenchExecutionMetadataMiddleware = (): MiddlewareHandler => { - return async (ctx, next) => { - const started = performance.now(); - - await next(); - - // After handler completes, tokens and duration headers are available - const thread = ctx.var.thread; - if (!thread) { - return; - } - - // Get execution context set by the handler - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const executionCtx = (ctx as any).var.workbenchExecution as - | { agentId: string; input: unknown; result: unknown } - | undefined; - if (!executionCtx) { - return; - } - - const { agentId, input, result } = executionCtx; - const agentMessagesKey = `messages_${agentId}`; - const maxMessages = 50; - - // Read tokens and duration from response headers - const tokens = ctx.res.headers.get(TOKENS_HEADER) ?? undefined; - const duration = - ctx.res.headers.get(DURATION_HEADER) ?? - `${((performance.now() - started) / 1000).toFixed(1)}s`; - const sessionId = ctx.var.sessionId; - - // Store input with metadata - await thread.state.push( - agentMessagesKey, - { - type: 'input', - data: input, - sessionId, - timestamp: Date.now(), - }, - maxMessages - ); - - // Store output with metadata (tokens, duration) - if (result !== undefined && result !== null) { - await thread.state.push( - agentMessagesKey, - { - type: 'output', - data: result, - sessionId, - tokens, - duration, - timestamp: Date.now(), - }, - maxMessages - ); - } - - // Save thread state - try { - const threadProvider = getThreadProvider(); - await threadProvider.save(thread); - } catch { - ctx.var.logger?.warn('Failed to save thread state'); - } - }; -}; - -export const createWorkbenchExecutionRoute = (): Handler => { - return async (ctx: Context) => { - // Content-type validation - const contentType = ctx.req.header('Content-Type'); - if (!contentType || !contentType.includes('application/json')) { - return ctx.json({ error: 'Content-Type must be application/json' }, { status: 400 }); - } - - try { - let agentId: string; - let input: unknown; - try { - const requestData = await ctx.req.json(); - agentId = requestData.agentId; - input = requestData.input; - } catch (_error) { - return ctx.json({ error: 'Invalid JSON in request body' }, { status: 400 }); - } - - // Read metadata to find agent name by agentId - const agentMeta = getAgentMetadataByAgentId(agentId); - if (!agentMeta) { - if (!hasMetadata()) { - return ctx.json({ error: 'Metadata file not found' }, { status: 500 }); - } - return ctx.text('Agent not found', { status: 404 }); - } - - // Get runtime agent by name - const allAgents = getAgents(); - const agentName = agentMeta.name; - const agentObj = allAgents.get(agentName); - - if (!agentObj || !agentName) { - return ctx.text('Agent not found', { status: 404 }); - } - - // Track agent ID for telemetry (otelMiddleware sets up agentIds) - const _ctx = privateContext(ctx); - if (agentObj.metadata?.id) { - _ctx.var.agentIds.add(agentObj.metadata.id); - } - if (agentObj.metadata?.agentId) { - _ctx.var.agentIds.add(agentObj.metadata.agentId); - } - - // Execute the agent handler directly - // The agentMiddleware has already set up the AsyncLocalStorage context - // so the handler can access it via getAgentContext() - let result: unknown; - if (agentObj.inputSchema) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - result = await (agentObj as any).handler(input); - } else { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - result = await (agentObj as any).handler(); - } - - // Store execution context for the metadata middleware to save with tokens/duration - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (ctx as any).set('workbenchExecution', { agentId, input, result }); - - return ctx.json({ success: true, data: result ?? null }); - } catch (error) { - const err = error instanceof Error ? error : new Error(String(error)); - // Return 200 with wrapped error so UI can display it properly - return ctx.json({ - success: false, - error: { - message: err.message, - stack: err.stack, - code: 'code' in err && typeof err.code === 'string' ? err.code : 'EXECUTION_ERROR', - cause: err.cause, - }, - }); - } - }; -}; - -export const createWorkbenchClearStateRoute = (): Handler => { - return async (ctx: Context) => { - const agentId = ctx.req.query('agentId'); - - if (!agentId) { - return ctx.json({ error: 'agentId query parameter is required' }, { status: 400 }); - } - - if (!ctx.var.thread) { - return ctx.json({ error: 'Thread not available' }, { status: 404 }); - } - - // Clear state associated with this specific agent: - // 1. messages_${agentId} - workbench message history - // 2. Any keys starting with ${agentId}_ - agent-specific state - const allKeys = await ctx.var.thread.state.keys(); - const agentPrefix = `${agentId}_`; - const messagesKey = `messages_${agentId}`; - - for (const key of allKeys) { - if (key === messagesKey || key.startsWith(agentPrefix)) { - await ctx.var.thread.state.delete(key); - } - } - - // Save the thread to persist the cleared state - try { - const threadProvider = getThreadProvider(); - await threadProvider.save(ctx.var.thread); - } catch { - return ctx.json({ error: 'Failed to save thread state' }, { status: 500 }); - } - - return ctx.json({ success: true, message: `State cleared for agent ${agentId}` }); - }; -}; - -export const createWorkbenchStateRoute = (): Handler => { - return async (ctx: Context) => { - const agentId = ctx.req.query('agentId'); - if (!agentId) { - return ctx.json({ error: 'agentId query parameter is required' }, { status: 400 }); - } - - if (!ctx.var.thread) { - return ctx.json({ error: 'Thread not available' }, { status: 404 }); - } - - const agentMessagesKey = `messages_${agentId}`; - const messages = await ctx.var.thread.state.get(agentMessagesKey); - - return ctx.json({ - threadId: ctx.var.thread.id, - agentId, - messages: Array.isArray(messages) ? messages : [], - }); - }; -}; - -/** - * Creates a workbench router with proper agent middleware for execution routes - */ -export const createWorkbenchRouter = () => { - const router = createRouter(); - - // Apply CORS middleware first so that even error responses get CORS headers - // In production, restrict origins to known Agentuity app domains + same-origin - // In development, allow any origin for local testing flexibility - router.use( - '/_agentuity/workbench/*', - createCorsMiddleware({ - origin: (origin: string, c) => { - // In dev mode, allow any origin for local testing flexibility - if (!isProduction()) { - return origin; - } - // In production, allow any *.agentuity.{com,dev,io} origin - if (isTrustedWorkbenchOrigin(origin)) { - return origin; - } - // Allow same-origin requests (agent calling its own workbench) - try { - const requestOrigin = new URL(c.req.url).origin; - if (origin === requestOrigin) { - return origin; - } - } catch { - // Invalid URL, reject - } - // Reject unknown origins — no Access-Control-Allow-Origin header - return undefined; - }, - allowHeaders: [ - 'Content-Type', - 'Authorization', - 'Accept', - 'Origin', - 'X-Requested-With', - 'X-Agentuity-Workbench-Signature', - 'X-Agentuity-Workbench-Timestamp', - 'x-thread-id', - ], - exposeHeaders: [ - 'x-thread-id', - 'x-session-id', - 'x-agentuity-tokens', - 'x-agentuity-duration', - ], - }) - ); - - // Apply auth middleware (signature verification in production) - router.use('/_agentuity/workbench/*', createWorkbenchAuthMiddleware()); - - // Apply agent middleware to ensure proper context is available - router.use('/_agentuity/workbench/*', createAgentMiddleware('')); - - // Add workbench routes - router.get('/_agentuity/workbench/ws', websocket(createWorkbenchWebsocketHandler())); - router.get('/_agentuity/workbench/metadata.json', createWorkbenchMetadataRoute()); - router.get('/_agentuity/workbench/sample', createWorkbenchSampleRoute()); - router.get('/_agentuity/workbench/state', createWorkbenchStateRoute()); - router.delete('/_agentuity/workbench/state', createWorkbenchClearStateRoute()); - router.post( - '/_agentuity/workbench/execute', - createWorkbenchExecutionMetadataMiddleware(), - createWorkbenchExecutionRoute() - ); - return router; -}; - -export const createWorkbenchSampleRoute = (): Handler => { - return async (ctx: Context) => { - try { - const agentId = ctx.req.query('agentId'); - if (!agentId) { - return ctx.json({ error: 'Missing agentId query parameter' }, { status: 400 }); - } - - // Read metadata to find agent name by agentId - const agentMeta = getAgentMetadataByAgentId(agentId); - if (!agentMeta) { - if (!hasMetadata()) { - return ctx.json({ error: 'Metadata file not found' }, { status: 500 }); - } - return ctx.text('Agent not found', { status: 404 }); - } - - // Get runtime agent by name - const allAgents = getAgents(); - const agentObj = allAgents.get(agentMeta.name); - - if (!agentObj) { - return ctx.text('Agent not found', { status: 404 }); - } - - // Check if agent has input schema - if (!agentObj.inputSchema) { - return ctx.json({ error: 'Agent has no input schema' }, { status: 400 }); - } - - // Convert schema to JSON Schema - const jsonSchema = toJSONSchema(agentObj.inputSchema); - - // Get Agentuity SDK key and gateway URL - const sdkKey = process.env.AGENTUITY_SDK_KEY; - const gatewayUrl = - process.env.AGENTUITY_AIGATEWAY_URL || - process.env.AGENTUITY_TRANSPORT_URL || - (sdkKey ? 'https://catalyst.agentuity.cloud' : ''); - - if (!sdkKey || !gatewayUrl) { - return ctx.json( - { - error: 'AGENTUITY_SDK_KEY and gateway URL must be configured', - message: - 'Set AGENTUITY_SDK_KEY and either AGENTUITY_AIGATEWAY_URL or AGENTUITY_TRANSPORT_URL', - }, - { status: 500 } - ); - } - - // Generate sample using Groq via Agentuity Gateway - const prompt = `Generate a realistic sample data object that matches this JSON schema. Return only valid JSON, no markdown code blocks or explanations. - -JSON Schema: -${JSON.stringify(jsonSchema, null, 2)} - -Return a JSON object that matches this schema with realistic values.`; - - const gatewayEndpoint = `${gatewayUrl}/gateway/groq/openai/v1/chat/completions`; - const groqResponse = await fetch(gatewayEndpoint, { - method: 'POST', - headers: { - Authorization: `Bearer ${sdkKey}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - model: 'llama-3.3-70b-versatile', - messages: [ - { - role: 'user', - content: prompt, - }, - ], - }), - }); - - if (!groqResponse.ok) { - const errorText = await groqResponse.text(); - return ctx.json( - { - error: 'Groq API request failed', - message: `Status ${groqResponse.status}: ${errorText}`, - }, - { status: 500 } - ); - } - - const groqData = (await groqResponse.json()) as { - choices?: Array<{ message?: { content?: string } }>; - }; - const text = groqData.choices?.[0]?.message?.content; - if (!text) { - return ctx.json( - { error: 'Invalid response from Groq API', response: groqData }, - { status: 500 } - ); - } - - // Parse the JSON response - let sample: unknown; - try { - // Remove markdown code blocks if present - const cleanedText = text - .trim() - .replace(/^```json\s*|\s*```$/g, '') - .replace(/^```\s*|\s*```$/g, ''); - sample = JSON.parse(cleanedText); - } catch (parseError) { - return ctx.json( - { - error: 'Failed to parse generated JSON', - message: parseError instanceof Error ? parseError.message : String(parseError), - generatedText: text, - }, - { status: 500 } - ); - } - - return ctx.json(sample); - } catch (error) { - return ctx.json( - { - error: 'Internal server error', - message: error instanceof Error ? error.message : String(error), - }, - { status: 500 } - ); - } - }; -}; - -export const createWorkbenchMetadataRoute = (): Handler => { - return async (ctx) => { - // Read metadata from agentuity.metadata.json file - const metadata = loadBuildMetadata(); - if (!metadata) { - return ctx.json( - { error: 'Metadata file not found. Run build to generate metadata.' }, - { status: 500 } - ); - } - - try { - // Ensure all agents are imported so their schemas are available - await ensureAgentsImported(); - - // Get runtime agents for JSON schema generation - const agents = getAgents(); - const agentsByName = new Map(); - for (const [name, agent] of agents) { - agentsByName.set(name, agent); - } - - // Transform metadata structure to workbench format - const schemas: { agents: Record } = { agents: {} }; - - for (const agent of metadata.agents || []) { - // Try to find runtime agent by name to get JSON schemas - const runtimeAgent = agentsByName.get(agent.name); - - const inputJsonSchema = runtimeAgent?.inputSchema - ? toJSONSchema(runtimeAgent.inputSchema) - : undefined; - const outputJsonSchema = runtimeAgent?.outputSchema - ? toJSONSchema(runtimeAgent.outputSchema) - : undefined; - - schemas.agents[agent.id] = { - schema: { - input: inputJsonSchema - ? { - code: jsonSchemaToTypeScript(inputJsonSchema), - json: inputJsonSchema, - } - : agent.schema?.input - ? { code: agent.schema.input, json: undefined } - : undefined, - output: outputJsonSchema - ? { - code: jsonSchemaToTypeScript(outputJsonSchema), - json: outputJsonSchema, - } - : agent.schema?.output - ? { code: agent.schema.output, json: undefined } - : undefined, - }, - metadata: { - id: agent.id, - agentId: agent.agentId, - name: agent.name, - description: agent.description, - filename: agent.filename, - version: agent.version, - }, - }; - } - - return ctx.json(schemas); - } catch (error) { - return ctx.json( - { - error: 'Failed to read metadata file', - message: error instanceof Error ? error.message : String(error), - }, - { status: 500 } - ); - } - }; -}; - -// Store WebSocket connections to notify them on app restart -const workbenchWebSockets = new Set(); - -export const createWorkbenchWebsocketHandler = () => { - return (_c: Context, ws: WebSocketConnection) => { - ws.onOpen(() => { - workbenchWebSockets.add(ws); - ws.send('alive'); - }); - - ws.onMessage((event) => { - const message = (event as MessageEvent).data; - - // If a client sends a message (CLI), broadcast to all other clients - if (message === 'restarting' || message === 'alive') { - // Broadcast the message to all other clients (excluding this CLI connection) - for (const clientWs of workbenchWebSockets) { - if (clientWs !== ws) { - try { - clientWs.send(message); - } catch (_error) { - workbenchWebSockets.delete(clientWs); - } - } - } - } - }); - - ws.onClose(() => { - workbenchWebSockets.delete(ws); - }); - }; -}; - -/** - * @deprecated Use createWorkbenchWebsocketHandler instead - */ -export const createWorkbenchWebsocketRoute = createWorkbenchWebsocketHandler; - -/** - * Convert a JSON Schema object to a TypeScript type string for display. - * Produces clean, readable type notation for the workbench schema panel. - * - * @example - * ```typescript - * jsonSchemaToTypeScript({ - * type: 'object', - * properties: { name: { type: 'string' }, age: { type: 'number' } }, - * required: ['name', 'age'], - * }); - * // "{\n name: string;\n age: number;\n}" - * ``` - */ -/** Escape a string for use inside a double-quoted TypeScript string literal. */ -function escapeString(s: string): string { - return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r'); -} - -/** Check if a property key is a valid unquoted TypeScript identifier. */ -function isValidIdentifier(key: string): boolean { - return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key); -} - -function jsonSchemaToTypeScript(schema: JSONSchema, indent = 0): string { - const pad = ' '.repeat(indent); - const inner = ' '.repeat(indent + 1); - - // Handle const (literal type) - if (schema.const !== undefined) { - return typeof schema.const === 'string' - ? `"${escapeString(schema.const)}"` - : String(schema.const); - } - - // Handle enum (union of literals) - if (schema.enum) { - return schema.enum - .map((v) => (typeof v === 'string' ? `"${escapeString(String(v))}"` : String(v))) - .join(' | '); - } - - // Handle anyOf / oneOf (union types) - const unionSchemas = schema.anyOf ?? schema.oneOf; - if (unionSchemas) { - // Nullable pattern: anyOf with one type and one null - if (unionSchemas.length === 2) { - const nullIdx = unionSchemas.findIndex((s) => s.type === 'null'); - if (nullIdx !== -1) { - const other = unionSchemas[nullIdx === 0 ? 1 : 0]; - if (other) { - return `${jsonSchemaToTypeScript(other, indent)} | null`; - } - } - } - return unionSchemas.map((s) => jsonSchemaToTypeScript(s, indent)).join(' | '); - } - - // Handle allOf (intersection types) - if (schema.allOf) { - return schema.allOf.map((s) => jsonSchemaToTypeScript(s, indent)).join(' & '); - } - - switch (schema.type) { - case 'string': - return 'string'; - case 'number': - case 'integer': - return 'number'; - case 'boolean': - return 'boolean'; - case 'null': - return 'null'; - - case 'array': { - if (!schema.items) return 'unknown[]'; - const itemType = jsonSchemaToTypeScript(schema.items, indent); - // Wrap union types in parens: (A | B)[] - return itemType.includes(' | ') ? `(${itemType})[]` : `${itemType}[]`; - } - - case 'object': { - if (!schema.properties || Object.keys(schema.properties).length === 0) { - if (schema.additionalProperties && typeof schema.additionalProperties === 'object') { - return `Record`; - } - return 'Record'; - } - - const required = new Set(schema.required ?? []); - const lines: string[] = ['{']; - - for (const [key, propSchema] of Object.entries(schema.properties)) { - const optional = !required.has(key); - const propType = jsonSchemaToTypeScript(propSchema, indent + 1); - const desc = propSchema.description ? ` // ${propSchema.description}` : ''; - const quotedKey = isValidIdentifier(key) ? key : `"${escapeString(key)}"`; - lines.push(`${inner}${quotedKey}${optional ? '?' : ''}: ${propType};${desc}`); - } - - lines.push(`${pad}}`); - return lines.join('\n'); - } - - default: - if (schema.properties) { - return jsonSchemaToTypeScript({ ...schema, type: 'object' }, indent); - } - if (schema.items) { - return jsonSchemaToTypeScript({ ...schema, type: 'array' }, indent); - } - return 'unknown'; - } -} diff --git a/packages/runtime/test/agent-auth-context.test.ts b/packages/runtime/test/agent-auth-context.test.ts deleted file mode 100644 index 310effb57..000000000 --- a/packages/runtime/test/agent-auth-context.test.ts +++ /dev/null @@ -1,297 +0,0 @@ -/** - * Tests for ctx.auth lazy binding from HTTP context. - * - * Validates that auth middleware running AFTER the agent middleware - * still propagates auth to agents via the lazy getter. - */ - -import { describe, test, expect } from 'bun:test'; -import { Hono } from 'hono'; -import { - RequestAgentContext, - setupRequestAgentContext, - runInHTTPContext, - getAgentAsyncLocalStorage, - type RequestAgentContextArgs, -} from '../src/_context'; -import type { AuthInterface } from '@agentuity/auth/types'; -import type { Logger } from '../src/logger'; -import type { Thread, Session } from '../src/session'; -import type WaitUntilHandler from '../src/_waituntil'; -import { trace } from '@opentelemetry/api'; - -// Create a proper mock tracer -const mockTracer = trace.getTracer('test-tracer'); - -// Helper to create a minimal mock logger -function createMockLogger(): Logger { - const noop = () => {}; - const logger: Logger = { - trace: noop, - debug: noop, - info: noop, - warn: noop, - error: noop, - fatal: noop as Logger['fatal'], - child: () => createMockLogger(), - }; - return logger; -} - -// Helper to create a minimal mock thread -function createMockThread(): Thread { - const thread: Thread = { - id: 'test-thread', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => thread.state.size === 0, - }; - return thread; -} - -// Helper to create a minimal mock session -function createMockSession(): Session { - return { - id: 'test-session', - state: new Map(), - thread: createMockThread(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; -} - -// Helper to create a minimal mock handler -function createMockHandler(): WaitUntilHandler { - return { waitUntil: () => {} } as WaitUntilHandler; -} - -// Helper to create mock auth -const createMockAuth = (userId: string): AuthInterface => ({ - user: { id: userId, email: `${userId}@example.com`, name: 'Test User' }, - session: { id: 'session-123', userId }, - authMethod: 'session', - raw: {}, - getUser: async () => ({ id: userId, email: `${userId}@example.com`, name: 'Test User' }), - getToken: async () => null, - getOrg: async () => null, - getOrgRole: async () => null, - hasOrgRole: async () => false, - apiKey: null, - hasPermission: () => false, -}); - -describe('Agent Auth Context Lazy Binding', () => { - test('ctx.auth getter reads from HTTP context when c.var.auth is set later', async () => { - // This test simulates the real scenario: - // 1. Agent middleware creates RequestAgentContext (c.var.auth is undefined) - // 2. Auth middleware sets c.var.auth - // 3. Agent handler reads ctx.auth (should get the auth set in step 2) - - const app = new Hono(); - let capturedAuth: AuthInterface | null = null; - - app.use('*', async (c, next) => { - // Wrap in HTTP context (like createBaseMiddleware does) - await runInHTTPContext(c, next); - }); - - app.use('/api/*', async (c, next) => { - // Agent middleware runs FIRST - c.var.auth is undefined here - const args: RequestAgentContextArgs = { - sessionId: 'test-session', - agent: {}, - logger: createMockLogger(), - tracer: mockTracer, - session: createMockSession(), - thread: createMockThread(), - handler: createMockHandler(), - config: {}, - app: {}, - runtime: { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }, - auth: c.var.auth ?? null, // This is null at this point! - }; - - return setupRequestAgentContext(c, args, next); - }); - - app.use('/api/*', async (c, next) => { - // Auth middleware runs AFTER agent middleware - c.set('auth', createMockAuth('late-bound-user')); - await next(); - }); - - app.post('/api/test', async (c) => { - // Route handler - get the agent context and check auth - const storage = getAgentAsyncLocalStorage(); - const ctx = storage.getStore(); - - if (ctx) { - capturedAuth = ctx.auth; - } - - return c.json({ - hasAuth: ctx?.auth !== null, - userId: ctx?.auth?.user?.id ?? null, - }); - }); - - const res = await app.request('/api/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({}), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - - // The key assertion: ctx.auth should have picked up the auth - // set by the later middleware via the lazy getter - expect(data.hasAuth).toBe(true); - expect(data.userId).toBe('late-bound-user'); - expect(capturedAuth).not.toBeNull(); - expect(capturedAuth?.user?.id).toBe('late-bound-user'); - }); - - test('ctx.auth falls back to initial value when not in HTTP context', async () => { - const mockAuth = createMockAuth('standalone-user'); - - const ctx = new RequestAgentContext({ - sessionId: 'test-session', - agent: {}, - logger: createMockLogger(), - tracer: mockTracer, - session: createMockSession(), - thread: createMockThread(), - handler: createMockHandler(), - config: {}, - app: {}, - runtime: { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }, - auth: mockAuth, - }); - - // Not in HTTP context, so should use the initial value - expect(ctx.auth).not.toBeNull(); - expect(ctx.auth?.user?.id).toBe('standalone-user'); - }); - - test('ctx.auth is null when no auth is set anywhere', async () => { - const ctx = new RequestAgentContext({ - sessionId: 'test-session', - agent: {}, - logger: createMockLogger(), - tracer: mockTracer, - session: createMockSession(), - thread: createMockThread(), - handler: createMockHandler(), - config: {}, - app: {}, - runtime: { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }, - // No auth passed - }); - - expect(ctx.auth).toBeNull(); - }); - - test('ctx.auth setter updates the fallback value', async () => { - const ctx = new RequestAgentContext({ - sessionId: 'test-session', - agent: {}, - logger: createMockLogger(), - tracer: mockTracer, - session: createMockSession(), - thread: createMockThread(), - handler: createMockHandler(), - config: {}, - app: {}, - runtime: { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }, - }); - - expect(ctx.auth).toBeNull(); - - // Set auth via setter - const mockAuth = createMockAuth('set-via-setter'); - ctx.auth = mockAuth; - - // Should now return the set value (when not in HTTP context) - expect(ctx.auth).not.toBeNull(); - expect(ctx.auth?.user?.id).toBe('set-via-setter'); - }); - - test('HTTP context auth takes precedence over initial auth', async () => { - const app = new Hono(); - let capturedAuth: AuthInterface | null = null; - - app.use('*', async (c, next) => { - await runInHTTPContext(c, next); - }); - - app.use('/api/*', async (c, next) => { - // Agent middleware with initial auth - const args: RequestAgentContextArgs = { - sessionId: 'test-session', - agent: {}, - logger: createMockLogger(), - tracer: mockTracer, - session: createMockSession(), - thread: createMockThread(), - handler: createMockHandler(), - config: {}, - app: {}, - runtime: { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }, - auth: createMockAuth('initial-auth'), // Initial auth - }; - - return setupRequestAgentContext(c, args, next); - }); - - app.use('/api/*', async (c, next) => { - // Auth middleware sets different auth - c.set('auth', createMockAuth('http-context-auth')); - await next(); - }); - - app.post('/api/test', async (c) => { - const storage = getAgentAsyncLocalStorage(); - const ctx = storage.getStore(); - capturedAuth = ctx?.auth ?? null; - - return c.json({ userId: ctx?.auth?.user?.id ?? null }); - }); - - const res = await app.request('/api/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({}), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - - // HTTP context auth should take precedence - expect(data.userId).toBe('http-context-auth'); - expect(capturedAuth?.user?.id).toBe('http-context-auth'); - }); -}); diff --git a/packages/runtime/test/agent-creation.test.ts b/packages/runtime/test/agent-creation.test.ts deleted file mode 100644 index 412ab72b2..000000000 --- a/packages/runtime/test/agent-creation.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { createAgent } from '../src/agent'; -import { s } from '@agentuity/schema'; - -describe('createAgent API', () => { - test('should accept 2 arguments: name and config', () => { - // This should compile without errors - const agent = createAgent('hello', { - description: 'Test agent', - schema: { - input: s.object({ name: s.string() }), - output: s.string(), - }, - handler: async (_ctx, input) => { - return `Hello, ${input.name}!`; - }, - }); - - expect(agent).toBeDefined(); - expect(agent.metadata.name).toBe('hello'); - }); - - test('handler context parameter should be typed', () => { - const agent = createAgent('typed-context', { - schema: { - input: s.object({ value: s.number() }), - output: s.number(), - }, - handler: async (ctx, input) => { - // ctx should be typed as AgentContext - ctx.logger.info('test'); // This should work - return input.value * 2; - }, - }); - - expect(agent).toBeDefined(); - }); - - test('handler input parameter should be typed from schema', () => { - const agent = createAgent('typed-input', { - schema: { - input: s.object({ name: s.string(), age: s.number() }), - output: s.string(), - }, - handler: async (_ctx, input) => { - // input should be typed as { name: string, age: number } - const name: string = input.name; - const age: number = input.age; - return `${name} is ${age} years old`; - }, - }); - - expect(agent).toBeDefined(); - }); - - test('agent should have run method', () => { - const agent = createAgent('with-run', { - schema: { - input: s.object({ value: s.string() }), - output: s.string(), - }, - handler: async (_ctx, input) => { - return input.value.toUpperCase(); - }, - }); - - expect(agent.run).toBeDefined(); - expect(typeof agent.run).toBe('function'); - }); - - test('agent.run should accept typed input', async () => { - const { runInAgentContext } = await import('../src/agent'); - const { TestAgentContext } = await import('./helpers/test-context'); - - const agent = createAgent('run-with-input', { - schema: { - input: s.object({ name: s.string() }), - output: s.string(), - }, - handler: async (_ctx, input) => { - return `Hello, ${input.name}!`; - }, - }); - - // Use TestAgentContext to provide proper agent context - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent, { name: 'Alice' }); - expect(result).toBe('Hello, Alice!'); - }); -}); diff --git a/packages/runtime/test/agent-ids-session.test.ts b/packages/runtime/test/agent-ids-session.test.ts deleted file mode 100644 index dbc7ccfa6..000000000 --- a/packages/runtime/test/agent-ids-session.test.ts +++ /dev/null @@ -1,446 +0,0 @@ -/** - * Tests for agent_ids population in session events. - * - * These tests validate that agent IDs are correctly tracked and sent - * to Catalyst in session complete events. This is critical for: - * - Analytics and billing attribution - * - Debugging which agents participated in a session - * - Session filtering by agent in the UI - * - * Key scenarios tested: - * 1. Agent with metadata populates agentIds - * 2. Agent without metadata does NOT populate agentIds (documents current behavior) - * 3. Multiple agents in same session all contribute IDs - * 4. agentIds Set is properly converted to array for session events - * 5. Both metadata.id and metadata.agentId are tracked - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import { createAgent } from '../src/agent'; -import { z } from 'zod'; -import type { PrivateVariables } from '../src/app'; -import * as metadataModule from '../src/_metadata'; - -describe('Agent IDs Session Tracking', () => { - describe('agentIds Set in Hono context', () => { - test('agentIds set is created empty and can be populated', async () => { - type TestEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - let capturedAgentIds: Set | undefined; - - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - }); - - app.post('/test', (c) => { - capturedAgentIds = c.var.agentIds; - c.var.agentIds.add('agent-id-1'); - c.var.agentIds.add('agent-id-2'); - return c.json({ count: c.var.agentIds.size }); - }); - - const res = await app.request('/test', { method: 'POST' }); - expect(res.status).toBe(200); - expect(capturedAgentIds?.size).toBe(2); - expect(capturedAgentIds?.has('agent-id-1')).toBe(true); - expect(capturedAgentIds?.has('agent-id-2')).toBe(true); - }); - - test('agentIds filters out empty strings when converted to array', async () => { - const agentIds = new Set(); - agentIds.add('valid-id'); - agentIds.add(''); - agentIds.add('another-valid-id'); - - const filtered = [...agentIds].filter(Boolean); - expect(filtered).toEqual(['valid-id', 'another-valid-id']); - expect(filtered.length).toBe(2); - }); - - test('agentIds returns undefined when empty after filtering', async () => { - const agentIdsSet = new Set(); - agentIdsSet.add(''); - - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - const result = agentIds?.length ? agentIds : undefined; - - expect(result).toBeUndefined(); - }); - }); - - describe('Agent metadata and ID population', () => { - test('agent with build-time metadata has IDs populated', () => { - const agent = createAgent('test-with-metadata', { - metadata: { - id: 'build-time-id-123', - agentId: 'build-time-agent-id-456', - }, - handler: async () => { - return { success: true }; - }, - }); - - expect(agent.metadata.id).toBe('build-time-id-123'); - expect(agent.metadata.agentId).toBe('build-time-agent-id-456'); - }); - - test('agent without metadata has empty IDs in dev/test mode', () => { - // In dev/test mode (no AGENTUITY_CLOUD_PROJECT_ID), agents can be created - // without metadata - IDs will be empty strings - const agent = createAgent('test-without-metadata', { - handler: async () => { - return { success: true }; - }, - }); - - expect(agent.metadata.id).toBe(''); - expect(agent.metadata.agentId).toBe(''); - }); - - test('both id and agentId are truthy for filtering', () => { - const agent = createAgent('test-truthy-check', { - metadata: { - id: 'id-value', - agentId: 'agentId-value', - }, - handler: async () => ({}), - }); - - // Verify the truthiness check used in the actual code - expect(!!agent.metadata.id).toBe(true); - expect(!!agent.metadata.agentId).toBe(true); - }); - }); - - describe('Agent ID tracking in Hono context simulation', () => { - test('simulates agent run adding IDs to context agentIds set', async () => { - type TestEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - const capturedIds: string[] = []; - - const agent = createAgent('simulated-agent', { - metadata: { - id: 'sim-id-001', - agentId: 'sim-agent-id-001', - }, - handler: async () => ({ done: true }), - }); - - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - }); - - app.post('/run', (c) => { - // Simulate what happens in agent.ts lines 1575-1578 - if (agent.metadata.id) { - c.var.agentIds.add(agent.metadata.id); - } - if (agent.metadata.agentId) { - c.var.agentIds.add(agent.metadata.agentId); - } - - // Capture for assertion - capturedIds.push(...c.var.agentIds); - - return c.json({ agentIds: [...c.var.agentIds] }); - }); - - const res = await app.request('/run', { method: 'POST' }); - const data = (await res.json()) as { agentIds: string[] }; - - expect(data.agentIds).toContain('sim-id-001'); - expect(data.agentIds).toContain('sim-agent-id-001'); - expect(data.agentIds.length).toBe(2); - }); - - test('multiple agents contribute to same agentIds set', async () => { - type TestEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - - const agent1 = createAgent('multi-agent-1', { - metadata: { - id: 'agent1-id', - agentId: 'agent1-agentId', - }, - handler: async () => ({}), - }); - - const agent2 = createAgent('multi-agent-2', { - metadata: { - id: 'agent2-id', - agentId: 'agent2-agentId', - }, - handler: async () => ({}), - }); - - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - }); - - app.post('/multi', (c) => { - // Simulate both agents running - [agent1, agent2].forEach((agent) => { - if (agent.metadata.id) c.var.agentIds.add(agent.metadata.id); - if (agent.metadata.agentId) c.var.agentIds.add(agent.metadata.agentId); - }); - - return c.json({ agentIds: [...c.var.agentIds] }); - }); - - const res = await app.request('/multi', { method: 'POST' }); - const data = (await res.json()) as { agentIds: string[] }; - - expect(data.agentIds.length).toBe(4); - expect(data.agentIds).toContain('agent1-id'); - expect(data.agentIds).toContain('agent1-agentId'); - expect(data.agentIds).toContain('agent2-id'); - expect(data.agentIds).toContain('agent2-agentId'); - }); - - test('duplicate IDs are deduplicated by Set', async () => { - type TestEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - - const agent = createAgent('dedup-agent', { - metadata: { - id: 'shared-id', - agentId: 'shared-id', // Same as id - }, - handler: async () => ({}), - }); - - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - }); - - app.post('/dedup', (c) => { - // Add the same agent twice (simulates agent being called multiple times) - for (let i = 0; i < 2; i++) { - if (agent.metadata.id) c.var.agentIds.add(agent.metadata.id); - if (agent.metadata.agentId) c.var.agentIds.add(agent.metadata.agentId); - } - - return c.json({ agentIds: [...c.var.agentIds] }); - }); - - const res = await app.request('/dedup', { method: 'POST' }); - const data = (await res.json()) as { agentIds: string[] }; - - // Set deduplicates, so only 1 unique ID - expect(data.agentIds.length).toBe(1); - expect(data.agentIds[0]).toBe('shared-id'); - }); - }); - - describe('Session complete event payload', () => { - test('agentIds is included when array has values', () => { - const agentIdsSet = new Set(['id1', 'id2']); - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - - const payload = { - id: 'session-123', - statusCode: 200, - agentIds: agentIds?.length ? agentIds : undefined, - }; - - expect(payload.agentIds).toEqual(['id1', 'id2']); - }); - - test('agentIds is undefined when set is empty', () => { - const agentIdsSet = new Set(); - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - - const payload = { - id: 'session-123', - statusCode: 200, - agentIds: agentIds?.length ? agentIds : undefined, - }; - - expect(payload.agentIds).toBeUndefined(); - }); - - test('agentIds is undefined when set only contains empty strings', () => { - const agentIdsSet = new Set(['', '']); - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - - const payload = { - id: 'session-123', - statusCode: 200, - agentIds: agentIds?.length ? agentIds : undefined, - }; - - expect(payload.agentIds).toBeUndefined(); - }); - }); - - describe('Metadata file loading scenarios', () => { - test('getAgentMetadataByName returns undefined when no metadata file', () => { - // This tests the fallback behavior when agentuity.metadata.json doesn't exist - const result = metadataModule.getAgentMetadataByName('nonexistent-agent'); - // Will be undefined if metadata file doesn't exist or agent not found - expect(result).toBeUndefined(); - }); - - test('agent without file metadata has empty IDs in dev/test mode', () => { - // In dev/test mode (no AGENTUITY_CLOUD_PROJECT_ID), agents can be created - // without metadata - IDs will be empty strings - const agent = createAgent('no-file-metadata-agent', { - description: 'Test agent without file metadata', - handler: async () => ({ result: 'ok' }), - }); - - expect(agent.metadata.id).toBe(''); - expect(agent.metadata.agentId).toBe(''); - }); - }); - - describe('End-to-end agent ID flow simulation', () => { - test('complete flow: agent creation -> run -> session complete payload', async () => { - type TestEnv = { - Variables: PrivateVariables; - }; - - // 1. Create agent with metadata (simulates build-time injection) - const myAgent = createAgent('e2e-test-agent', { - metadata: { - id: 'e2e-id-123', - agentId: 'e2e-agent-id-456', - }, - schema: { - input: z.object({ message: z.string() }), - output: z.object({ reply: z.string() }), - }, - handler: async (_ctx, input) => { - return { reply: `Hello, ${input.message}!` }; - }, - }); - - const app = new Hono(); - let sessionCompletePayload: { agentIds?: string[] } | undefined; - - // 2. Middleware sets up agentIds (simulates otelMiddleware) - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - - // 4. After handler, construct session complete payload (simulates middleware finally block) - const agentIdsSet = c.var.agentIds; - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - sessionCompletePayload = { - agentIds: agentIds?.length ? agentIds : undefined, - }; - }); - - // 3. Handler runs agent and adds IDs (simulates agent.ts handler) - app.post('/agent', async (c) => { - // Simulate what happens when agent.run() is called - if (myAgent.metadata.id) { - c.var.agentIds.add(myAgent.metadata.id); - } - if (myAgent.metadata.agentId) { - c.var.agentIds.add(myAgent.metadata.agentId); - } - - return c.json({ success: true }); - }); - - await app.request('/agent', { method: 'POST' }); - - // 5. Verify session complete payload has agent IDs - expect(sessionCompletePayload).toBeDefined(); - expect(sessionCompletePayload?.agentIds).toContain('e2e-id-123'); - expect(sessionCompletePayload?.agentIds).toContain('e2e-agent-id-456'); - expect(sessionCompletePayload?.agentIds?.length).toBe(2); - }); - - test('agent without metadata in dev mode still has empty agent_ids', async () => { - // In dev/test mode, agents can be created without metadata - // This documents that agent_ids will be empty (but no error is thrown) - type TestEnv = { - Variables: PrivateVariables; - }; - - const agentNoMeta = createAgent('no-meta-agent', { - handler: async () => ({ result: 'ok' }), - }); - - const app = new Hono(); - let sessionCompletePayload: { agentIds?: string[] } | undefined; - - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - - const agentIdsSet = c.var.agentIds; - const agentIds = agentIdsSet ? [...agentIdsSet].filter(Boolean) : undefined; - sessionCompletePayload = { - agentIds: agentIds?.length ? agentIds : undefined, - }; - }); - - app.post('/agent', async (c) => { - if (agentNoMeta.metadata.id) { - c.var.agentIds.add(agentNoMeta.metadata.id); - } - if (agentNoMeta.metadata.agentId) { - c.var.agentIds.add(agentNoMeta.metadata.agentId); - } - return c.json({ success: true }); - }); - - await app.request('/agent', { method: 'POST' }); - - // In dev mode, agent_ids will be empty (no error thrown, but IDs are missing) - expect(sessionCompletePayload).toBeDefined(); - expect(sessionCompletePayload?.agentIds).toBeUndefined(); - }); - }); -}); - -describe('Agent IDs - Catalyst Integration Scenarios', () => { - test('Catalyst receives empty array when SDK sends undefined agentIds', () => { - // Simulates Catalyst's session_2025_03_17.go lines 128-131 - const event = { - ID: 'session-123', - AgentIDs: undefined as string[] | undefined, - }; - - let agentIds = event.AgentIDs; - if (event.AgentIDs == null) { - agentIds = []; - } - - expect(agentIds).toEqual([]); - }); - - test('Catalyst preserves agent IDs when SDK sends valid array', () => { - const event = { - ID: 'session-123', - AgentIDs: ['agent-id-1', 'agent-id-2'], - }; - - let agentIds = event.AgentIDs; - if (event.AgentIDs == null) { - agentIds = []; - } - - expect(agentIds).toEqual(['agent-id-1', 'agent-id-2']); - }); -}); diff --git a/packages/runtime/test/agent-session-thread.test.ts b/packages/runtime/test/agent-session-thread.test.ts deleted file mode 100644 index 87f45730e..000000000 --- a/packages/runtime/test/agent-session-thread.test.ts +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Tests for agent.run() receiving session and thread from route context. - * Validates that middleware ordering ensures session/thread are available in agent context. - */ - -import { test, expect, describe } from 'bun:test'; -import { createAgent, runInAgentContext } from '../src/agent'; -import { z } from 'zod'; -import { TestAgentContext } from './helpers/test-context'; - -describe('Agent Session and Thread Context', () => { - test('agent receives session and thread from context', async () => { - // Track what the agent receives - let receivedSessionId: string | undefined; - let receivedThreadId: string | undefined; - let receivedSession: unknown; - let receivedThread: unknown; - - const agent = createAgent('session-test', { - schema: { - input: z.object({ message: z.string() }), - output: z.object({ sessionId: z.string(), threadId: z.string() }), - }, - handler: async (ctx, _input) => { - // Capture what the agent context has - receivedSessionId = ctx.sessionId; - receivedSession = ctx.session; - receivedThread = ctx.thread; - receivedThreadId = ctx.thread?.id; - - return { - sessionId: ctx.sessionId || 'undefined', - threadId: ctx.thread?.id || 'undefined', - }; - }, - }); - - // Create a context with session and thread - const ctx = new TestAgentContext({ - sessionId: 'test-session-123', - }); - - // Run the agent - const result = await runInAgentContext(ctx, agent, { message: 'hello' }); - - // Verify agent received session and thread - expect(receivedSessionId).toBe('test-session-123'); - expect(receivedSession).toBeDefined(); - expect(receivedThread).toBeDefined(); - expect(receivedThreadId).toBeDefined(); - - // Verify the response - expect(result.sessionId).toBe('test-session-123'); - expect(result.threadId).toBe(receivedThreadId); - expect(result.sessionId).not.toBe('undefined'); - expect(result.threadId).not.toBe('undefined'); - }); - - test('multiple agent calls share the same session and thread', async () => { - const sessionIds = new Set(); - const threadIds = new Set(); - - const agent1 = createAgent('agent-one', { - schema: { - output: z.object({ sessionId: z.string(), threadId: z.string() }), - }, - handler: async (ctx) => { - sessionIds.add(ctx.sessionId); - threadIds.add(ctx.thread?.id || ''); - return { - sessionId: ctx.sessionId, - threadId: ctx.thread?.id || '', - }; - }, - }); - - const agent2 = createAgent('agent-two', { - schema: { - output: z.object({ sessionId: z.string(), threadId: z.string() }), - }, - handler: async (ctx) => { - sessionIds.add(ctx.sessionId); - threadIds.add(ctx.thread?.id || ''); - return { - sessionId: ctx.sessionId, - threadId: ctx.thread?.id || '', - }; - }, - }); - - // Create shared context - const ctx = new TestAgentContext({ - sessionId: 'shared-session', - }); - - // Run both agents with same context - const result1 = await runInAgentContext(ctx, agent1); - const result2 = await runInAgentContext(ctx, agent2); - - // All agents with same context should share session/thread - expect(sessionIds.size).toBe(1); - expect(threadIds.size).toBe(1); - expect(result1.sessionId).toBe(result2.sessionId); - expect(result1.threadId).toBe(result2.threadId); - }); - - test('agent can access session state', async () => { - const agent = createAgent('session-state', { - schema: { - input: z.object({ key: z.string(), value: z.string() }), - output: z.object({ stored: z.boolean(), retrieved: z.string().optional() }), - }, - handler: async (ctx, input) => { - // Store in session state - ctx.session.state.set(input.key, input.value); - - // Retrieve from session state - const retrieved = ctx.session.state.get(input.key) as string | undefined; - - return { - stored: retrieved === input.value, - retrieved, - }; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent, { - key: 'testKey', - value: 'testValue', - }); - - expect(result.stored).toBe(true); - expect(result.retrieved).toBe('testValue'); - }); - - test('agent can access thread state', async () => { - const agent = createAgent('thread-state', { - schema: { - input: z.object({ key: z.string(), value: z.number() }), - output: z.object({ stored: z.boolean(), retrieved: z.number().optional() }), - }, - handler: async (ctx, input) => { - // Store in thread state - ctx.thread.state.set(input.key, input.value); - - // Retrieve from thread state - const retrieved = ctx.thread.state.get(input.key) as number | undefined; - - return { - stored: retrieved === input.value, - retrieved, - }; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent, { - key: 'counter', - value: 42, - }); - - expect(result.stored).toBe(true); - expect(result.retrieved).toBe(42); - }); - - test('session and thread are distinct objects', async () => { - const agent = createAgent('state-test', { - schema: { - output: z.object({ sessionHasKey: z.boolean(), threadHasKey: z.boolean() }), - }, - handler: async (ctx) => { - // Set in session only - ctx.session.state.set('sessionKey', 'sessionValue'); - - // Set in thread only - ctx.thread.state.set('threadKey', 'threadValue'); - - return { - sessionHasKey: ctx.session.state.has('sessionKey'), - threadHasKey: ctx.thread.state.has('threadKey'), - }; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent); - - expect(result.sessionHasKey).toBe(true); - expect(result.threadHasKey).toBe(true); - - // Verify they're separate - expect(ctx.session.state.has('sessionKey')).toBe(true); - expect(ctx.session.state.has('threadKey')).toBe(false); - expect(ctx.thread.state.has('threadKey')).toBe(true); - expect(ctx.thread.state.has('sessionKey')).toBe(false); - }); -}); diff --git a/packages/runtime/test/agent-stream-integration.test.ts b/packages/runtime/test/agent-stream-integration.test.ts deleted file mode 100644 index 9898dff0a..000000000 --- a/packages/runtime/test/agent-stream-integration.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { test, expect } from 'bun:test'; -import { expectTypeOf } from 'expect-type'; -import { createAgent, runInAgentContext } from '../src/agent'; -import { Hono } from 'hono'; -import { z } from 'zod'; -import { TestAgentContext } from './helpers/test-context'; - -test('Integration: streaming agent with output schema in route', async () => { - const streamingAgent = createAgent('stream-with-schema', { - schema: { - input: z.object({ query: z.string() }), - output: z.object({ result: z.string(), timestamp: z.number() }), - stream: true, - }, - handler: async (_ctx, input) => { - const stream = new ReadableStream<{ result: string; timestamp: number }>({ - start(controller) { - controller.enqueue({ result: `Processing: ${input.query}`, timestamp: Date.now() }); - controller.enqueue({ result: `Completed: ${input.query}`, timestamp: Date.now() }); - controller.close(); - }, - }); - - expectTypeOf(stream).toEqualTypeOf< - ReadableStream<{ result: string; timestamp: number }> - >(); - - return stream; - }, - }); - - const app = new Hono(); - app.post('/stream', streamingAgent.validator(), async (c) => { - const data = c.req.valid('json'); - expectTypeOf(data).toEqualTypeOf<{ query: string }>(); - - const ctx = new TestAgentContext(); - const stream = await runInAgentContext(ctx, streamingAgent, data); - expectTypeOf(stream).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream<{ result: string; timestamp: number }> - >(); - - return c.body(stream); - }); - - const res = await app.request('/stream', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query: 'test-query' }), - }); - - expect(res.status).toBe(200); - expect(res.body).toBeInstanceOf(ReadableStream); -}); - -test('Integration: streaming agent without output schema in route', async () => { - const streamingAgentNoSchema = createAgent('stream-no-schema', { - schema: { - input: z.object({ items: z.array(z.string()) }), - stream: true, - }, - handler: async (_ctx, input) => { - const stream = new ReadableStream({ - start(controller) { - for (const item of input.items) { - controller.enqueue(item); - } - controller.close(); - }, - }); - - expectTypeOf(stream).toEqualTypeOf>(); - - return stream; - }, - }); - - const app = new Hono(); - app.post('/stream-unknown', streamingAgentNoSchema.validator(), async (c) => { - const data = c.req.valid('json'); - expectTypeOf(data).toEqualTypeOf<{ items: string[] }>(); - - const ctx = new TestAgentContext(); - const stream = await runInAgentContext(ctx, streamingAgentNoSchema, data); - expectTypeOf(stream).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream - >(); - - return c.body(stream); - }); - - const res = await app.request('/stream-unknown', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ items: ['a', 'b', 'c'] }), - }); - - expect(res.status).toBe(200); - expect(res.body).toBeInstanceOf(ReadableStream); -}); - -test('Integration: streaming agent with custom validator schema', async () => { - const streamingAgent = createAgent('stream-custom-validator', { - schema: { - input: z.object({ text: z.string() }), - output: z.number(), - stream: true, - }, - handler: async (_ctx, _input) => { - return new ReadableStream({ - start(controller) { - controller.enqueue(1); - controller.enqueue(2); - controller.enqueue(3); - controller.close(); - }, - }); - }, - }); - - const app = new Hono(); - app.post( - '/custom-stream', - streamingAgent.validator({ - input: z.object({ text: z.string(), priority: z.number() }), - }), - async (c) => { - const data = c.req.valid('json'); - expectTypeOf(data).toEqualTypeOf<{ text: string; priority: number }>(); - - expect(data.text).toBe('test'); - expect(data.priority).toBe(5); - - const ctx = new TestAgentContext(); - const stream = await runInAgentContext(ctx, streamingAgent, { text: data.text }); - expectTypeOf(stream).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream - >(); - - return c.body(stream); - } - ); - - const res = await app.request('/custom-stream', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ text: 'test', priority: 5 }), - }); - - expect(res.status).toBe(200); -}); - -test('Integration: mixed streaming and non-streaming agents', async () => { - const streamingAgent = createAgent('mixed-stream', { - schema: { - input: z.object({ value: z.string() }), - output: z.string(), - stream: true, - }, - handler: async (_ctx, input) => { - return new ReadableStream({ - start(controller) { - controller.enqueue(input.value); - controller.close(); - }, - }); - }, - }); - - const nonStreamingAgent = createAgent('mixed-non-stream', { - schema: { - input: z.object({ value: z.string() }), - output: z.object({ result: z.string() }), - }, - handler: async (_ctx, input) => { - return { result: input.value.toUpperCase() }; - }, - }); - - const app = new Hono(); - - app.post('/stream', streamingAgent.validator(), async (c) => { - const data = c.req.valid('json'); - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, streamingAgent, data); - expectTypeOf(result).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream - >(); - return c.body(result); - }); - - app.post('/non-stream', nonStreamingAgent.validator(), async (c) => { - const data = c.req.valid('json'); - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, nonStreamingAgent, data); - expectTypeOf(result).toEqualTypeOf<{ result: string }>(); - expectTypeOf>>().toEqualTypeOf<{ - result: string; - }>(); - return c.json(result); - }); - - const streamRes = await app.request('/stream', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 'stream-data' }), - }); - expect(streamRes.status).toBe(200); - expect(streamRes.body).toBeInstanceOf(ReadableStream); - - const nonStreamRes = await app.request('/non-stream', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 'non-stream-data' }), - }); - expect(nonStreamRes.status).toBe(200); - const json = (await nonStreamRes.json()) as { result: string }; - expect(json.result).toBe('NON-STREAM-DATA'); -}); diff --git a/packages/runtime/test/agent-stream-schema.test.ts b/packages/runtime/test/agent-stream-schema.test.ts deleted file mode 100644 index a85f39e94..000000000 --- a/packages/runtime/test/agent-stream-schema.test.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { test, expect } from 'bun:test'; -import { expectTypeOf } from 'expect-type'; -import { createAgent, runInAgentContext } from '../src/agent'; -import { z } from 'zod'; -import { TestAgentContext } from './helpers/test-context'; - -test('Streaming agent with output schema - should return ReadableStream', async () => { - const streamingAgentWithSchema = createAgent('streaming-with-schema', { - schema: { - input: z.object({ message: z.string() }), - output: z.object({ id: z.number(), text: z.string() }), - stream: true, - }, - handler: async (_ctx, input) => { - expectTypeOf(input).toEqualTypeOf<{ message: string }>(); - - const stream = new ReadableStream<{ id: number; text: string }>({ - start(controller) { - controller.enqueue({ id: 1, text: input.message }); - controller.enqueue({ id: 2, text: `Echo: ${input.message}` }); - controller.close(); - }, - }); - - return stream; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, streamingAgentWithSchema, { message: 'Hello' }); - - expectTypeOf(result).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream<{ id: number; text: string }> - >(); - expect(result).toBeInstanceOf(ReadableStream); - - const reader = result.getReader(); - const chunks: Array<{ id: number; text: string }> = []; - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - - expect(chunks).toHaveLength(2); - expect(chunks[0]).toEqual({ id: 1, text: 'Hello' }); - expect(chunks[1]).toEqual({ id: 2, text: 'Echo: Hello' }); -}); - -test('Streaming agent without output schema - should return ReadableStream', async () => { - const streamingAgentWithoutSchema = createAgent('streaming-without-schema', { - schema: { - input: z.object({ count: z.number() }), - stream: true, - }, - handler: async (_ctx, input) => { - expectTypeOf(input).toEqualTypeOf<{ count: number }>(); - - const stream = new ReadableStream({ - start(controller) { - for (let i = 0; i < input.count; i++) { - controller.enqueue(`Item ${i}`); - } - controller.close(); - }, - }); - - return stream; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, streamingAgentWithoutSchema, { count: 3 }); - - expectTypeOf(result).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream - >(); - expect(result).toBeInstanceOf(ReadableStream); - - const reader = result.getReader(); - const chunks: unknown[] = []; - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - - expect(chunks).toHaveLength(3); - expect(chunks).toEqual(['Item 0', 'Item 1', 'Item 2']); -}); - -test('Streaming agent with primitive output schema - should return ReadableStream', async () => { - const streamingPrimitiveAgent = createAgent('streaming-primitive', { - schema: { - input: z.string(), - output: z.number(), - stream: true, - }, - handler: async (_ctx, input) => { - expectTypeOf(input).toEqualTypeOf(); - - const stream = new ReadableStream({ - start(controller) { - const num = parseInt(input, 10); - controller.enqueue(num); - controller.enqueue(num * 2); - controller.enqueue(num * 3); - controller.close(); - }, - }); - - return stream; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, streamingPrimitiveAgent, '5'); - - expectTypeOf(result).toEqualTypeOf>(); - expectTypeOf>>().toEqualTypeOf< - ReadableStream - >(); - expect(result).toBeInstanceOf(ReadableStream); - - const reader = result.getReader(); - const chunks: number[] = []; - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - - expect(chunks).toEqual([5, 10, 15]); -}); - -test('Non-streaming agent with output schema - should return Type directly', async () => { - const nonStreamingAgent = createAgent('non-streaming', { - schema: { - input: z.object({ name: z.string() }), - output: z.object({ greeting: z.string() }), - }, - handler: async (_ctx, input) => { - expectTypeOf(input).toEqualTypeOf<{ name: string }>(); - return { greeting: `Hello ${input.name}` }; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, nonStreamingAgent, { name: 'World' }); - - expectTypeOf(result).toEqualTypeOf<{ greeting: string }>(); - expectTypeOf>>().toEqualTypeOf<{ - greeting: string; - }>(); - expect(result).toEqual({ greeting: 'Hello World' }); -}); diff --git a/packages/runtime/test/agent-type-safety.test.ts b/packages/runtime/test/agent-type-safety.test.ts deleted file mode 100644 index 718ea7c39..000000000 --- a/packages/runtime/test/agent-type-safety.test.ts +++ /dev/null @@ -1,256 +0,0 @@ -/** - * Type safety tests for agent.validator() integration with Hono. - * - * These tests verify that developer-facing API provides end-to-end type safety: - * 1. agent.validator() properly types c.req.valid('json') in route handlers - * 2. Input validation catches invalid data at runtime - * 3. Output validation ensures responses match schemas - * - * Note: We use app.request() for testing instead of testClient() due to - * Hono's type inference limitations with method-chained apps. - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import { createAgent } from '../src/agent'; -import { z } from 'zod'; - -describe('Agent Validator Type Safety', () => { - test('agent.validator() provides typed c.req.valid("json")', async () => { - const agent = createAgent('user-agent', { - schema: { - input: z.object({ - name: z.string(), - email: z.string().email(), - age: z.number().min(0), - }), - output: z.object({ - id: z.string(), - success: z.boolean(), - }), - }, - handler: async (_ctx, _input) => ({ - id: 'user-test', - success: true, - }), - }); - - const app = new Hono().post('/users', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // Type check: These assignments verify TypeScript infers correct types - const _name: string = data.name; - const _email: string = data.email; - const _age: number = data.age; - - return c.json({ - id: `user-${data.name}`, - success: true, - }); - }); - - const res = await app.request('/users', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - name: 'Alice', - email: 'alice@example.com', - age: 30, - }), - }); - - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toEqual({ id: 'user-Alice', success: true }); - }); - - test('validator with custom schemas overrides agent schema', async () => { - const agent = createAgent('flexible', { - schema: { - input: z.object({ default: z.string() }), - }, - handler: async (_ctx, _input) => {}, - }); - - const app = new Hono().post( - '/custom', - agent.validator({ - input: z.object({ - customField: z.string(), - count: z.number(), - }), - }), - async (c) => { - const data = c.req.valid('json'); - - // Type check: Override schema types - const _custom: string = data.customField; - const _count: number = data.count; - - return c.json({ processed: true, count: data.count }); - } - ); - - const res = await app.request('/custom', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ customField: 'test', count: 42 }), - }); - - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toEqual({ processed: true, count: 42 }); - }); - - test('input validation rejects invalid data', async () => { - const agent = createAgent('strict', { - schema: { - input: z.object({ - email: z.string().email(), - age: z.number().min(18).max(100), - }), - }, - handler: async (_ctx, _input) => {}, - }); - - const app = new Hono().post('/validate', agent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ success: true, data }); - }); - - // Invalid email - const invalidEmail = await app.request('/validate', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'not-an-email', age: 25 }), - }); - expect(invalidEmail.status).toBe(400); - - // Age too young - const tooYoung = await app.request('/validate', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'valid@example.com', age: 16 }), - }); - expect(tooYoung.status).toBe(400); - - // Valid data - const valid = await app.request('/validate', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'valid@example.com', age: 25 }), - }); - expect(valid.status).toBe(200); - }); - - test('output validation catches schema mismatches', async () => { - const agent = createAgent('output-validator', { - schema: { - input: z.object({ value: z.string() }), - output: z.object({ - result: z.string(), - length: z.number(), - }), - }, - handler: async (_ctx, input) => ({ - result: input.value, - length: input.value.length, - }), - }); - - const app = new Hono().post('/process', agent.validator(), async (c) => { - const data = c.req.valid('json'); - // Return invalid output (missing required field) - return c.json({ - result: data.value, - // length is missing! - } as { result: string }); - }); - - const res = await app.request('/process', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 'test' }), - }); - - // Output validation error becomes 500 - expect(res.status).toBe(500); - }); - - test('multiple routes maintain independent type safety', async () => { - const userAgent = createAgent('user', { - schema: { - input: z.object({ name: z.string() }), - output: z.object({ userId: z.string() }), - }, - handler: async (_ctx, input) => ({ userId: `user-${input.name}` }), - }); - - const postAgent = createAgent('post', { - schema: { - input: z.object({ title: z.string(), content: z.string() }), - output: z.object({ postId: z.string() }), - }, - handler: async (_ctx, input) => ({ postId: `post-${input.title}` }), - }); - - const app = new Hono() - .post('/users', userAgent.validator(), async (c) => { - const data = c.req.valid('json'); - const _name: string = data.name; // Type check - return c.json({ userId: `user-${data.name}` }); - }) - .post('/posts', postAgent.validator(), async (c) => { - const data = c.req.valid('json'); - // Type check: Different schema - const _title: string = data.title; - const _content: string = data.content; - return c.json({ postId: `post-${data.title}` }); - }); - - // Test user endpoint - const userRes = await app.request('/users', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice' }), - }); - expect(userRes.status).toBe(200); - const userData = await userRes.json(); - expect(userData).toEqual({ userId: 'user-Alice' }); - - // Test post endpoint - const postRes = await app.request('/posts', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ title: 'Hello', content: 'World' }), - }); - expect(postRes.status).toBe(200); - const postData = await postRes.json(); - expect(postData).toEqual({ postId: 'post-Hello' }); - }); - - test('GET route with output-only validation', async () => { - const agent = createAgent('list', { - handler: async (_ctx) => {}, - }); - - const app = new Hono().get( - '/items', - agent.validator({ - output: z.array(z.object({ id: z.string(), name: z.string() })), - }), - async (c) => { - return c.json([ - { id: '1', name: 'Item 1' }, - { id: '2', name: 'Item 2' }, - ]); - } - ); - - const res = await app.request('/items', { method: 'GET' }); - expect(res.status).toBe(200); - const items = await res.json(); - expect(Array.isArray(items)).toBe(true); - expect(items).toHaveLength(2); - }); -}); diff --git a/packages/runtime/test/agent-types.test.ts b/packages/runtime/test/agent-types.test.ts deleted file mode 100644 index e5e734fd6..000000000 --- a/packages/runtime/test/agent-types.test.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { test } from 'bun:test'; -import { expectTypeOf } from 'expect-type'; -import { createAgent, type AppState } from '../src/index'; -import { z } from 'zod'; - -test('Handler with input schema - parameters should NOT be any', () => { - const agentWithInput = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string(), age: z.number() }), - output: z.string(), - }, - handler: async (ctx, input) => { - expectTypeOf(ctx).not.toBeAny(); - expectTypeOf(input).toEqualTypeOf<{ name: string; age: number }>(); - expectTypeOf(input).not.toBeAny(); - return 'result'; - }, - }); - - expectTypeOf(agentWithInput).not.toBeAny(); -}); - -test('Handler without input schema - should only have ctx parameter', () => { - const agentWithoutInput = createAgent('no-input-agent', { - schema: { - output: z.string(), - }, - handler: async (ctx) => { - expectTypeOf(ctx).not.toBeAny(); - return 'result'; - }, - }); - - expectTypeOf(agentWithoutInput).not.toBeAny(); -}); - -test('Setup function - parameter and return type should be typed', () => { - const agentWithSetup = createAgent('setup-agent', { - setup: async (_app: AppState) => { - // app must be explicitly typed for inference to work - return { foo: 'bar', count: 42 }; - }, - handler: async (ctx) => { - // Config type is inferred from setup return value - // Test that properties are correctly typed (not any) - expectTypeOf(ctx.config.foo).toBeString(); - expectTypeOf(ctx.config.count).toBeNumber(); - - // Verify type safety - these would be compile errors if uncommented: - // const wrong: number = ctx.config.foo; // Error: Type 'string' is not assignable to type 'number' - // const missing = ctx.config.bar; // Error: Property 'bar' does not exist - }, - }); - - expectTypeOf(agentWithSetup).not.toBeAny(); -}); - -test('Shutdown function - parameters should be typed', () => { - const agentWithShutdown = createAgent('shutdown-agent', { - setup: async (_app: AppState) => { - // app must be explicitly typed for inference to work - return { connection: 'active' }; - }, - handler: async () => {}, - shutdown: async (app, config) => { - expectTypeOf(app).not.toBeAny(); - expectTypeOf(config).not.toBeAny(); - const connection: string = config.connection; - expectTypeOf(connection).toBeString(); - }, - }); - - expectTypeOf(agentWithShutdown).not.toBeAny(); -}); - -test('Streaming agent - return type should be ReadableStream', () => { - const streamingAgent = createAgent('streaming-agent', { - schema: { - input: z.string(), - output: z.number(), - stream: true, - }, - handler: async (_ctx, input) => { - expectTypeOf(input).toEqualTypeOf(); - expectTypeOf(input).not.toBeAny(); - return new ReadableStream(); - }, - }); - - expectTypeOf(streamingAgent).not.toBeAny(); -}); diff --git a/packages/runtime/test/agent-validator-regression.test.ts b/packages/runtime/test/agent-validator-regression.test.ts deleted file mode 100644 index de845d853..000000000 --- a/packages/runtime/test/agent-validator-regression.test.ts +++ /dev/null @@ -1,215 +0,0 @@ -/** - * Regression tests for agent.validator() - testing all permutations - */ -import { describe, test, expect } from 'bun:test'; -import { Hono } from 'hono'; -import { createAgent, createRouter, validator } from '../src/index'; -import { s } from '@agentuity/schema'; - -describe('agent.validator() regression tests', () => { - describe('agent without output schema', () => { - const agentInputOnly = createAgent('input-only-agent', { - schema: { - input: s.object({ - name: s.string(), - email: s.string(), - age: s.number(), - }), - }, - handler: async (_ctx, input) => { - return { success: true, message: `Hello ${input.name}` }; - }, - }); - - test('agent.validator() with createRouter validates input', async () => { - const router = createRouter(); - - router.post('/', agentInputOnly.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ success: true, user: data }); - }); - - // Valid request - const validRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com', age: 30 }), - }); - expect(validRes.status).toBe(200); - const validData = await validRes.json(); - expect(validData).toEqual({ - success: true, - user: { name: 'Alice', email: 'alice@example.com', age: 30 }, - }); - - // Invalid request - missing age - const invalidRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Bob', email: 'bob@example.com' }), - }); - expect(invalidRes.status).toBe(400); - const errorData = await invalidRes.json(); - expect(errorData.error).toBe('Validation failed'); - }); - - test('agent.validator() with plain Hono validates input', async () => { - const app = new Hono(); - - app.post('/', agentInputOnly.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ success: true, user: data }); - }); - - // Valid request - const validRes = await app.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com', age: 30 }), - }); - expect(validRes.status).toBe(200); - - // Invalid request - const invalidRes = await app.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Bob' }), // missing email and age - }); - expect(invalidRes.status).toBe(400); - }); - }); - - describe('agent with input and output schema', () => { - const agentWithOutput = createAgent('full-agent', { - schema: { - input: s.object({ - name: s.string(), - email: s.string(), - }), - output: s.object({ - success: s.boolean(), - user: s.object({ - name: s.string(), - email: s.string(), - }), - }), - }, - handler: async (_ctx, input) => { - return { success: true, user: input }; - }, - }); - - test('agent.validator() validates both input and output', async () => { - const router = createRouter(); - - router.post('/', agentWithOutput.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ success: true, user: data }); - }); - - // Valid request - const validRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com' }), - }); - expect(validRes.status).toBe(200); - - // Invalid input - const invalidInput = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Bob' }), // missing email - }); - expect(invalidInput.status).toBe(400); - }); - - test('output validation fails with wrong response', async () => { - const router = createRouter(); - - router.post('/', agentWithOutput.validator(), async (c) => { - const _data = c.req.valid('json'); - // Return wrong shape - should fail output validation - return c.json({ wrong: 'response' }); - }); - - const res = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com' }), - }); - expect(res.status).toBe(500); // Output validation fails with 500 - }); - }); - - describe('agent.validator() with custom schema override', () => { - const baseAgent = createAgent('base-agent', { - schema: { - input: s.object({ name: s.string() }), - output: s.string(), - }, - handler: async (_ctx, input) => `Hello ${input.name}`, - }); - - test('can override input schema', async () => { - // Regression test: input-only override should not apply agent's output schema - // Agent expects string output, but we return object - should succeed (200, not 500) - const router = createRouter(); - const customInput = s.object({ - email: s.string().email(), - count: s.number(), - }); - - router.post('/', baseAgent.validator({ input: customInput }), async (c) => { - const data = c.req.valid('json'); - return c.json({ email: data.email, count: data.count }); - }); - - // Valid with custom schema - const validRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'test@example.com', count: 5 }), - }); - expect(validRes.status).toBe(200); - - // Invalid email - const invalidRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'not-an-email', count: 5 }), - }); - expect(invalidRes.status).toBe(400); - }); - }); - - describe('standalone validator function vs agent.validator()', () => { - test('standalone validator() works with schema', async () => { - const router = createRouter(); - const schema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), - }); - - router.post('/', validator({ input: schema }), async (c) => { - const data = c.req.valid('json'); - return c.json({ success: true, user: data }); - }); - - const validRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com', age: 30 }), - }); - expect(validRes.status).toBe(200); - - const invalidRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Bob' }), - }); - expect(invalidRes.status).toBe(400); - }); - }); -}); diff --git a/packages/runtime/test/agent.test.ts b/packages/runtime/test/agent.test.ts deleted file mode 100644 index 482498254..000000000 --- a/packages/runtime/test/agent.test.ts +++ /dev/null @@ -1,487 +0,0 @@ -/** - * Unit tests for agent execution, schema validation, and core functionality. - * Tests agents in isolation without requiring HTTP server or real services. - */ - -import { test, expect, describe, beforeEach, afterEach } from 'bun:test'; -import { createAgent, runInAgentContext, setAgentConfig, getAgents } from '../src/agent'; -import { z } from 'zod'; -import { TestAgentContext } from './helpers/test-context'; -import { createMockLoggerWithCapture } from '@agentuity/test-utils'; - -describe('Agent Execution', () => { - test('agent with input schema executes handler', async () => { - const agent = createAgent('test', { - schema: { - input: z.object({ name: z.string() }), - output: z.string(), - }, - handler: async (_ctx, input) => `Hello, ${input.name}!`, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent, { name: 'World' }); - - expect(result).toBe('Hello, World!'); - }); - - test('agent without input schema executes handler', async () => { - const agent = createAgent('no-input', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => 'No input needed', - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent); - expect(result).toBe('No input needed'); - }); - - test('agent without output schema returns void', async () => { - let executed = false; - - const agent = createAgent('no-output', { - schema: { - input: z.string(), - }, - handler: async (_ctx, _input) => { - executed = true; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent, 'test'); - expect(executed).toBe(true); - expect(result).toBeUndefined(); - }); - - test('agent with no schema returns void', async () => { - let executed = false; - const agent = createAgent('minimal', { - handler: async (_ctx) => { - executed = true; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent); - expect(executed).toBe(true); - expect(result).toBeUndefined(); - }); -}); - -describe('Agent Context Access', () => { - test('agent can access logger', async () => { - const { logger, logs } = createMockLoggerWithCapture(); - - const agent = createAgent('logger-test', { - handler: async (ctx) => { - ctx.logger.info('test message'); - }, - }); - - const ctx = new TestAgentContext({ logger }); - await runInAgentContext(ctx, agent); - - expect(logs).toContain('test message'); - }); - - test('agent can access sessionId', async () => { - const agent = createAgent('session-test', { - schema: { - output: z.string(), - }, - handler: async (ctx) => ctx.sessionId, - }); - - const ctx = new TestAgentContext({ sessionId: 'custom-session' }); - - const result = await runInAgentContext(ctx, agent); - - expect(result).toBe('custom-session'); - }); - - test('agent can access agent metadata via internal symbol', async () => { - const agent = createAgent('name-test', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => { - // Access internal CURRENT_AGENT symbol for telemetry - const { getCurrentAgentMetadata } = await import('../src/_context'); - const metadata = getCurrentAgentMetadata(); - return metadata?.name || 'unknown'; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent); - - expect(result).toBe('name-test'); // Matches agent metadata.name - }); - - test('agent can access state map', async () => { - const agent = createAgent('state-test', { - schema: { - output: z.string(), - }, - handler: async (ctx) => { - ctx.state.set('key', 'value'); - const value = ctx.state.get('key'); - return value as string; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent); - expect(result).toBe('value'); - }); -}); - -describe('Agent Services', () => { - test('agent can use KeyValue storage', async () => { - const agent = createAgent('kv-test', { - schema: { - input: z.object({ key: z.string(), value: z.string() }), - output: z.object({ success: z.boolean(), retrieved: z.string() }), - }, - handler: async (ctx, input) => { - await ctx.kv.set('test-store', input.key, input.value); - const result = await ctx.kv.get('test-store', input.key); - return { - success: result.exists, - retrieved: result.data as string, - }; - }, - }); - - const ctx = new TestAgentContext(); - - const result = await runInAgentContext< - { key: string; value: string }, - { success: boolean; retrieved: string } - >(ctx, agent, { key: 'test-key', value: 'test-value' }); - - expect(result.success).toBe(true); - expect(result.retrieved).toBe('test-value'); - }); - - test('agent can use StreamStorage', async () => { - const agent = createAgent('stream-test', { - schema: { - output: z.object({ streamId: z.string() }), - }, - handler: async (ctx) => { - const stream = await ctx.stream.create('test-stream'); - await stream.write('chunk1'); - await stream.write('chunk2'); - return { streamId: stream.id }; - }, - }); - - const ctx = new TestAgentContext(); - - const result = await runInAgentContext(ctx, agent); - expect(result.streamId).toMatch(/stream-\d+/); - }); - - test('agent can use VectorStorage', async () => { - const agent = createAgent('vector-test', { - schema: { - output: z.object({ found: z.boolean() }), - }, - handler: async (ctx) => { - await ctx.vector.upsert('test-vectors', { - key: 'doc1', - document: 'Machine learning', - metadata: { topic: 'AI' }, - }); - - const result = await ctx.vector.get('test-vectors', 'doc1'); - return { found: result.exists }; - }, - }); - - const ctx = new TestAgentContext(); - - const result = await runInAgentContext(ctx, agent); - expect(result.found).toBe(true); - }); -}); - -describe('Agent Setup and Shutdown', () => { - test('agent setup provides config to handler', async () => { - type TestConfig = { database: string; cache: Map }; - - const agent = createAgent('setup-test', { - setup: async (_app: unknown) => ({ - database: 'mock-db', - cache: new Map(), - }), - schema: { - output: z.string(), - }, - handler: async (ctx) => { - return (ctx.config as TestConfig).database; - }, - }); - - const ctx = new TestAgentContext({ - config: { database: 'mock-db', cache: new Map() }, - }); - - const result = await runInAgentContext(ctx, agent); - expect(result).toBe('mock-db'); - }); - - test('agent can access app state', async () => { - type TestAppState = { version: string }; - - const agent = createAgent('app-state-test', { - schema: { - output: z.string(), - }, - handler: async (ctx) => { - return (ctx.app as TestAppState).version; - }, - }); - - const ctx = new TestAgentContext({ - app: { version: '1.0.0' }, - }); - - const result = await runInAgentContext(ctx, agent); - expect(result).toBe('1.0.0'); - }); -}); - -describe('Agent Config Isolation', () => { - // Clean up registered agents between tests - const registeredNames: string[] = []; - - beforeEach(() => { - // Clear any configs from previous tests - for (const name of registeredNames) { - getAgents().delete(name); - } - }); - - afterEach(() => { - // Clean up agents registered during tests - for (const name of registeredNames) { - getAgents().delete(name); - } - registeredNames.length = 0; - }); - - test("agent gets its own config from setup, not the context's initial config", async () => { - type ConfigA = { source: string; secretA: string }; - type ConfigB = { source: string; secretB: string }; - - const _agentA = createAgent('config-test-a', { - setup: async () => ({ source: 'agent-a-setup', secretA: 'secret-from-a' }), - schema: { output: z.string() }, - handler: async (ctx) => { - const cfg = ctx.config as ConfigA; - return `agent-a: source=${cfg.source}, secretA=${cfg.secretA}`; - }, - }); - registeredNames.push('config-test-a'); - - const agentB = createAgent('config-test-b', { - setup: async () => ({ source: 'agent-b-setup', secretB: 'secret-from-b' }), - schema: { output: z.string() }, - handler: async (ctx) => { - const cfg = ctx.config as ConfigB; - return `agent-b: source=${cfg.source}, secretB=${cfg.secretB}`; - }, - }); - registeredNames.push('config-test-b'); - - // Simulate setup phase - store configs from setup() - setAgentConfig('config-test-a', { source: 'agent-a-setup', secretA: 'secret-from-a' }); - setAgentConfig('config-test-b', { source: 'agent-b-setup', secretB: 'secret-from-b' }); - - // Create context with WRONG config (simulates agent A's context) - const ctx = new TestAgentContext({ - config: { source: 'wrong-context-config', secretA: 'wrong-secret' }, - }); - - // Run agent B in agent A's context - it should get its OWN config - const result = await runInAgentContext(ctx, agentB); - expect(result).toBe('agent-b: source=agent-b-setup, secretB=secret-from-b'); - }); - - test('agent-to-agent call: each agent gets its own config', async () => { - type ConfigA = { dbName: string }; - type ConfigB = { apiKey: string }; - - const agentB = createAgent('nested-config-b', { - setup: async () => ({ apiKey: 'key-from-b-setup' }), - schema: { output: z.string() }, - handler: async (ctx) => { - const cfg = ctx.config as ConfigB; - return `agentB-apiKey=${cfg.apiKey}`; - }, - }); - registeredNames.push('nested-config-b'); - - const agentA = createAgent('nested-config-a', { - setup: async () => ({ dbName: 'db-from-a-setup' }), - schema: { output: z.object({ aConfig: z.string(), bResult: z.string() }) }, - handler: async (ctx) => { - const cfg = ctx.config as ConfigA; - const bResult = await agentB.run(); - return { aConfig: `agentA-dbName=${cfg.dbName}`, bResult }; - }, - }); - registeredNames.push('nested-config-a'); - - // Simulate setup phase - setAgentConfig('nested-config-a', { dbName: 'db-from-a-setup' }); - setAgentConfig('nested-config-b', { apiKey: 'key-from-b-setup' }); - - // Create context with empty config (simulates user router scenario) - const ctx = new TestAgentContext<{}>({ config: {} }); - - // Run agent A which calls agent B - const result = await runInAgentContext(ctx, agentA); - expect(result.aConfig).toBe('agentA-dbName=db-from-a-setup'); - expect(result.bResult).toBe('agentB-apiKey=key-from-b-setup'); - }); - - test('agent without setup gets empty config if not stored', async () => { - const agent = createAgent('no-setup-config-test', { - // No setup function - schema: { output: z.string() }, - handler: async (ctx) => { - return `config=${JSON.stringify(ctx.config)}`; - }, - }); - registeredNames.push('no-setup-config-test'); - - // Don't store any config for this agent - // Context has some other config - const ctx = new TestAgentContext<{ other: string }>({ config: { other: 'value' } }); - - const result = await runInAgentContext(ctx, agent); - // Agent should keep the context's config since no stored config exists - expect(result).toBe('config={"other":"value"}'); - }); -}); - -describe('Agent WaitUntil', () => { - test('agent can schedule background task', async () => { - let backgroundTaskRan = false; - - const agent = createAgent('waituntil-test', { - handler: async (ctx) => { - ctx.waitUntil(async () => { - // Simulate async work - await new Promise((resolve) => setTimeout(resolve, 10)); - backgroundTaskRan = true; - }); - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent); - - expect(result).toBeUndefined(); // Agent has no output schema - expect(backgroundTaskRan).toBe(false); // Not yet - - // Wait for background tasks - await ctx.waitForBackgroundTasks(); - expect(backgroundTaskRan).toBe(true); - }); -}); - -describe('Agent Error Handling', () => { - test('agent throws error from handler', async () => { - const agent = createAgent('error-test', { - handler: async (_ctx) => { - throw new Error('Test error'); - }, - }); - - const ctx = new TestAgentContext(); - expect(async () => await runInAgentContext(ctx, agent)).toThrow('Test error'); - }); - - test('agent validation error on invalid input', async () => { - const agent = createAgent('validation-test', { - schema: { - input: z.object({ age: z.number().min(0) }), - output: z.string(), - }, - handler: async (_ctx, input) => `Age: ${input.age}`, - }); - - const ctx = new TestAgentContext(); - // Invalid input should throw validation error - const invalidInput = { age: -1 }; - expect(async () => await runInAgentContext(ctx, agent, invalidInput)).toThrow(); - }); -}); - -describe('Streaming Agents', () => { - test('agent can return ReadableStream', async () => { - const agent = createAgent('stream-agent', { - schema: { - input: z.string(), - output: z.string(), - stream: true, - }, - handler: async (_ctx, input) => { - return new ReadableStream({ - start(controller) { - controller.enqueue(`Hello ${input}`); - controller.enqueue('World'); - controller.close(); - }, - }); - }, - }); - - const ctx = new TestAgentContext(); - const stream = await runInAgentContext>(ctx, agent, 'Test'); - expect(stream).toBeInstanceOf(ReadableStream); - - // Read stream chunks - const reader = stream.getReader(); - const chunks: string[] = []; - let done = false; - - while (!done) { - const { value, done: readerDone } = await reader.read(); - done = readerDone; - if (value !== undefined) { - chunks.push(value); - } - } - - expect(chunks).toEqual(['Hello Test', 'World']); - }); -}); - -describe('Agent Metadata', () => { - test('agent has metadata', () => { - const agent = createAgent('metadata-test', { - description: 'Test agent description', - handler: async (_ctx) => {}, - }); - - expect(agent.metadata).toBeDefined(); - expect(agent.metadata.name).toBe('metadata-test'); - }); - - test('agent metadata includes description', () => { - const agent = createAgent('described-agent', { - description: 'This is a test description', - handler: async (_ctx) => {}, - }); - - expect(agent.metadata.description).toBe('This is a test description'); - }); -}); diff --git a/packages/runtime/test/agent.validator-edge-cases.test.ts b/packages/runtime/test/agent.validator-edge-cases.test.ts deleted file mode 100644 index 971bd38f7..000000000 --- a/packages/runtime/test/agent.validator-edge-cases.test.ts +++ /dev/null @@ -1,420 +0,0 @@ -/** - * Edge case tests for agent.validator() - * Tests scenarios that might not be covered in the main test suite - */ -import { describe, test, expect } from 'bun:test'; -import { Hono } from 'hono'; -import { z } from 'zod'; -import { createAgent } from '../src/agent'; - -describe('agent.validator() - Edge Cases', () => { - test('validator({ output }) with no input schema (GET route pattern)', async () => { - const agent = createAgent('get-agent', { - schema: { - // No input schema - output: z.object({ items: z.array(z.string()) }), - }, - handler: async () => ({ items: ['a', 'b', 'c'] }), - }); - - const app = new Hono().get( - '/items', - agent.validator({ output: agent.outputSchema! }), - async (c) => { - // No input validation should occur - return c.json({ items: ['a', 'b', 'c'] }); - } - ); - - const res = await app.request('/items'); - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ items: ['a', 'b', 'c'] }); - }); - - test('validator() with both input and output undefined', async () => { - const agent = createAgent('no-schema-agent', { - // No schema at all - handler: async () => { - return undefined; - }, - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - // Should accept any input - return c.json({ ok: true }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ anything: 'goes' }), - }); - expect(res.status).toBe(200); - }); - - test('validator({ input, output }) both as overrides', async () => { - const agent = createAgent('base-agent', { - schema: { - input: z.object({ oldField: z.string() }), - output: z.object({ oldResult: z.string() }), - }, - handler: async (_ctx, input) => ({ oldResult: input.oldField }), - }); - - const CustomInput = z.object({ newField: z.number() }); - const CustomOutput = z.object({ newResult: z.number() }); - - const app = new Hono().post( - '/override', - agent.validator({ input: CustomInput, output: CustomOutput }), - async (c) => { - const data = c.req.valid('json'); - - // TYPE CHECK: data should be typed as { newField: number } - const field: number = data.newField; - expect(field).toBe(42); - - return c.json({ newResult: data.newField * 2 }); - } - ); - - const res = await app.request('/override', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ newField: 42 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toEqual({ newResult: 84 }); - }); - - test('validator with optional fields in input schema', async () => { - const agent = createAgent('optional-agent', { - schema: { - input: z.object({ - required: z.string(), - optional: z.string().optional(), - }), - output: z.object({ result: z.string() }), - }, - handler: async (_ctx, input) => ({ - result: `${input.required}-${input.optional ?? 'default'}`, - }), - }); - - // Test without optional field - const app1 = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE CHECK: optional field should be string | undefined - const opt: string | undefined = data.optional; - expect(data.required).toBe('test'); - expect(opt).toBeUndefined(); - - return c.json({ result: 'ok' }); - }); - - const res1 = await app1.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ required: 'test' }), - }); - expect(res1.status).toBe(200); - - // Test with optional field - const app2 = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE CHECK: optional field should be string | undefined - const opt: string | undefined = data.optional; - expect(data.required).toBe('test'); - expect(opt).toBe('value'); - - return c.json({ result: 'ok' }); - }); - - const res2 = await app2.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ required: 'test', optional: 'value' }), - }); - expect(res2.status).toBe(200); - }); - - test('validator with union types in input', async () => { - const agent = createAgent('union-agent', { - schema: { - input: z.object({ - value: z.union([z.string(), z.number()]), - }), - output: z.object({ type: z.string() }), - }, - handler: async (_ctx, input) => ({ - type: typeof input.value, - }), - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE CHECK: value should be string | number - const val: string | number = data.value; - expect(['string', 'number']).toContain(typeof val); - - return c.json({ type: typeof data.value }); - }); - - // Test with string - const res1 = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 'hello' }), - }); - expect(res1.status).toBe(200); - - // Test with number - const res2 = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 42 }), - }); - expect(res2.status).toBe(200); - }); - - test('validator with default values in schema', async () => { - const agent = createAgent('default-agent', { - schema: { - input: z.object({ - name: z.string(), - count: z.number().default(10), - }), - output: z.object({ result: z.number() }), - }, - handler: async (_ctx, input) => ({ result: input.count }), - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ result: data.count }); - }); - - // Test without default field - should use default value - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'test' }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toEqual({ result: 10 }); - }); - - test('validator with transformed input (using z.transform)', async () => { - const agent = createAgent('transform-agent', { - schema: { - input: z.object({ - email: z - .string() - .email() - .transform((e) => e.toLowerCase()), - }), - output: z.object({ email: z.string() }), - }, - handler: async (_ctx, input) => ({ email: input.email }), - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // Transformed value should be lowercase - expect(data.email).toBe('test@example.com'); - - return c.json({ email: data.email }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'TEST@EXAMPLE.COM' }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result.email).toBe('test@example.com'); - }); - - test('validator with refined schema (custom validation)', async () => { - const agent = createAgent('refined-agent', { - schema: { - input: z - .object({ - password: z.string(), - confirmPassword: z.string(), - }) - .refine((data) => data.password === data.confirmPassword, { - message: "Passwords don't match", - path: ['confirmPassword'], - }), - output: z.object({ success: z.boolean() }), - }, - handler: async () => ({ success: true }), - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - return c.json({ success: true }); - }); - - // Test with matching passwords - const res1 = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ password: 'secret', confirmPassword: 'secret' }), - }); - expect(res1.status).toBe(200); - - // Test with non-matching passwords - const res2 = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ password: 'secret', confirmPassword: 'different' }), - }); - expect(res2.status).toBe(400); - const error = await res2.json(); - expect(error.error).toBe('Validation failed'); - }); - - test('validator({ output }) override still validates input from agent schema', async () => { - const agent = createAgent('output-only-override', { - schema: { - input: z.object({ data: z.string() }), - output: z.object({ result: z.string() }), - }, - handler: async (_ctx, input) => ({ result: input.data }), - }); - - const CustomOutput = z.object({ customField: z.number() }); - - const app = new Hono().post('/test', agent.validator({ output: CustomOutput }), async (c) => { - const data = c.req.valid('json'); - // Input validation still happens from agent's input schema - expect(data.data).toBe('test-value'); - return c.json({ customField: 42 }); - }); - - // Valid input according to agent's input schema - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ data: 'test-value' }), - }); - expect(res.status).toBe(200); - }); - - test('validator with empty object schema', async () => { - const agent = createAgent('empty-schema-agent', { - schema: { - input: z.object({}), - output: z.object({}), - }, - handler: async () => ({}), - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE CHECK: data should be empty object - const _empty: Record = data; - - return c.json({}); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({}), - }); - expect(res.status).toBe(200); - }); - - test('validator with stream: true and output override', async () => { - const agent = createAgent('stream-override-agent', { - schema: { - input: z.object({ query: z.string() }), - output: z.object({ result: z.string() }), - stream: true, - }, - handler: async (_ctx, input) => { - return new ReadableStream({ - start(controller) { - controller.enqueue(`Result: ${input.query}`); - controller.close(); - }, - }); - }, - }); - - const CustomOutput = z.object({ data: z.string() }); - - const app = new Hono().post( - '/stream', - agent.validator({ output: CustomOutput }), - async (c) => { - const input = c.req.valid('json'); - expect(input.query).toBe('test'); - - // Return non-stream response - output validation should be skipped due to stream: true - return c.json({ data: 'response' }); - } - ); - - const res = await app.request('/stream', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query: 'test' }), - }); - expect(res.status).toBe(200); - }); - - test('validator with literal types', async () => { - const agent = createAgent('literal-agent', { - schema: { - input: z.object({ - action: z.literal('delete'), - type: z.enum(['user', 'post', 'comment']), - }), - output: z.object({ deleted: z.boolean() }), - }, - handler: async () => ({ deleted: true }), - }); - - const app = new Hono().post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE CHECK: action should be literal 'delete' - const action: 'delete' = data.action; - // TYPE CHECK: type should be enum - const type: 'user' | 'post' | 'comment' = data.type; - - expect(action).toBe('delete'); - expect(['user', 'post', 'comment']).toContain(type); - - return c.json({ deleted: true }); - }); - - // Valid request - const res1 = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ action: 'delete', type: 'user' }), - }); - expect(res1.status).toBe(200); - - // Invalid action - const res2 = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ action: 'create', type: 'user' }), - }); - expect(res2.status).toBe(400); - }); -}); diff --git a/packages/runtime/test/agent.validator.test.ts b/packages/runtime/test/agent.validator.test.ts deleted file mode 100644 index 25e19998a..000000000 --- a/packages/runtime/test/agent.validator.test.ts +++ /dev/null @@ -1,676 +0,0 @@ -/** - * Runtime and compile-time tests for agent.validator() - * - * These tests verify both: - * 1. Runtime validation behavior (expect() assertions) - * 2. Compile-time type inference (inline type annotations) - * - * Type safety is validated by: - * - Using typed variable assignments (e.g., const name: string = data.name) - * - Passing data to functions with specific type signatures - * - If types regress, these tests will fail during `bun run typecheck` - */ -import { describe, test, expect } from 'bun:test'; -import { Hono, type Context, type Next } from 'hono'; -import { z } from 'zod'; -import { createAgent } from '../src/agent'; - -describe('agent.validator()', () => { - const testAgent = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string(), age: z.number() }), - output: z.string(), - }, - handler: async (_ctx, input) => { - return `Hello, ${input.name}! You are ${input.age} years old.`; - }, - }); - - test('validates input using agent schema', async () => { - const app = new Hono(); - app.post('/test', testAgent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE ASSERTION: data should be typed as { name: string, age: number } - const name: string = data.name; - const age: number = data.age; - expect(name).toBe('Alice'); - expect(age).toBe(30); - - return c.json(`${data.name}-${data.age}`); - }); - - const validRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', age: 30 }), - }); - expect(validRes.status).toBe(200); - const validData = await validRes.json(); - expect(validData).toBe('Alice-30'); - }); - - test('returns 400 on input validation failure', async () => { - const app = new Hono(); - app.post('/test', testAgent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json(`${data.name}-${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Bob' }), - }); - expect(res.status).toBe(400); - const error = (await res.json()) as { error: string; issues: unknown[] }; - expect(error.error).toBe('Validation failed'); - expect(Array.isArray(error.issues)).toBe(true); - }); - - test('overrides input schema', async () => { - const customSchema = z.object({ - email: z.string().email(), - count: z.number().min(1), - }); - - const app = new Hono(); - app.post('/test', testAgent.validator({ input: customSchema }), async (c) => { - const data = c.req.valid('json'); - - // TYPE ASSERTION: data should be typed from CUSTOM schema, not agent schema - const email: string = data.email; - const count: number = data.count; - expect(email).toBeDefined(); - expect(count).toBeGreaterThan(0); - - return c.text('ok'); - }); - - const validRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'test@example.com', count: 5 }), - }); - expect(validRes.status).toBe(200); - - const invalidRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email: 'invalid', count: 5 }), - }); - expect(invalidRes.status).toBe(400); - }); - - test('supports middleware chaining', async () => { - const app = new Hono(); - let middlewareRan = false; - - const testMiddleware = async (_c: Context, next: Next) => { - middlewareRan = true; - await next(); - }; - - app.post('/test', testAgent.validator(), testMiddleware, async (c) => { - const data = c.req.valid('json'); - expect(middlewareRan).toBe(true); - return c.json(`${data.name}-${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Dave', age: 40 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toBe('Dave-40'); - }); - - test('validates multiple fields with detailed errors', async () => { - const complexSchema = z.object({ - email: z.string().email(), - age: z.number().min(18).max(100), - username: z.string().min(3).max(20), - }); - - const complexAgent = createAgent('complex', { - schema: { - input: complexSchema, - output: z.string(), - }, - handler: async () => 'ok', - }); - - const app = new Hono(); - app.post('/test', complexAgent.validator(), async (c) => { - return c.text('ok'); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - email: 'invalid-email', - age: 15, - username: 'ab', - }), - }); - expect(res.status).toBe(400); - const error = (await res.json()) as { issues: unknown[] }; - expect(error.issues.length).toBeGreaterThan(0); - }); - - test('handles nested object validation', async () => { - const nestedAgent = createAgent('nested', { - schema: { - input: z.object({ - user: z.object({ - name: z.string(), - address: z.object({ - city: z.string(), - zip: z.string(), - }), - }), - }), - output: z.string(), - }, - handler: async () => 'ok', - }); - - const app = new Hono(); - app.post('/test', nestedAgent.validator(), async (c) => { - const _data = c.req.valid('json'); - return c.text('ok'); - }); - - const validRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - user: { - name: 'Alice', - address: { city: 'NYC', zip: '10001' }, - }, - }), - }); - expect(validRes.status).toBe(200); - - const invalidRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - user: { - name: 'Bob', - address: { zip: '10001' }, - }, - }), - }); - expect(invalidRes.status).toBe(400); - const error = (await invalidRes.json()) as { message: string }; - expect(error.message).toContain('city'); - }); - - test('validates arrays in input', async () => { - const arrayAgent = createAgent('array-agent', { - schema: { - input: z.object({ - items: z.array(z.string()), - count: z.number(), - }), - output: z.number(), - }, - handler: async (_ctx, input) => input.items.length, - }); - - const app = new Hono(); - app.post('/test', arrayAgent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json(data.items.length); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ items: ['a', 'b', 'c'], count: 3 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toBe(3); - }); - - test('agent with input-only schema (no output)', async () => { - // Agent with input but NO output schema - // Handler should be constrained to return void/undefined - const inputOnlyAgent = createAgent('input-only', { - schema: { - input: z.string(), - // NO output schema - }, - handler: async (_ctx, input) => { - // Handler must return void when no output schema - console.log(`Received: ${input}`); - return undefined; - }, - }); - - const app = new Hono(); - app.post('/test', inputOnlyAgent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE ASSERTION: data should be typed as string (the input schema) - const input: string = data; - expect(input).toBe('test-input'); - - return c.text('processed'); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify('test-input'), - }); - expect(res.status).toBe(200); - }); - - test('handles streaming agent without output schema', async () => { - const streamAgent = createAgent('stream-agent', { - schema: { - input: z.object({ message: z.string() }), - stream: true, - }, - handler: async (_ctx, input) => { - return new ReadableStream({ - start(controller) { - controller.enqueue(`Message: ${input.message}`); - controller.close(); - }, - }); - }, - }); - - const app = new Hono(); - app.post('/test', streamAgent.validator(), async (c) => { - const data = c.req.valid('json'); - - // TYPE ASSERTION: data should have 'message' property typed as string - const msg: string = data.message; - expect(msg).toBe('test'); - - // TYPE ASSERTION: Should be able to pass to function expecting the type - const validate = (input: { message: string }) => input.message; - expect(validate(data)).toBe('test'); - - return c.text('ok'); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ message: 'test' }), - }); - expect(res.status).toBe(200); - }); - - test('middleware before validator can modify context', async () => { - const app = new Hono(); - let capturedUserId = ''; - let capturedAuth = false; - - const authMiddleware = async (_c: Context, next: Next) => { - capturedUserId = 'user-123'; - capturedAuth = true; - await next(); - }; - - app.post('/test', authMiddleware, testAgent.validator(), async (c) => { - const data = c.req.valid('json'); - - expect(capturedUserId).toBe('user-123'); - expect(capturedAuth).toBe(true); - - return c.json(`${data.name}-${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Eve', age: 35 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toBe('Eve-35'); - }); - - test('middleware after validator receives validated data', async () => { - const app = new Hono(); - let middlewareRan = false; - - const loggingMiddleware = async (_c: Context, next: Next) => { - middlewareRan = true; - await next(); - }; - - app.post('/test', testAgent.validator(), loggingMiddleware, async (c) => { - const data = c.req.valid('json'); - - expect(middlewareRan).toBe(true); - return c.json(`${data.name}-${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Frank', age: 45 }), - }); - expect(res.status).toBe(200); - }); - - test('multiple middleware with validator in chain', async () => { - const app = new Hono(); - const steps = { step1: false, step2: false, step3: false }; - - const middleware1 = async (_c: Context, next: Next) => { - steps.step1 = true; - await next(); - }; - - const middleware2 = async (_c: Context, next: Next) => { - steps.step2 = true; - await next(); - }; - - const middleware3 = async (_c: Context, next: Next) => { - steps.step3 = true; - await next(); - }; - - app.post('/test', middleware1, testAgent.validator(), middleware2, middleware3, async (c) => { - const data = c.req.valid('json'); - expect(steps.step1).toBe(true); - expect(steps.step2).toBe(true); - expect(steps.step3).toBe(true); - return c.json(`${data.name}-${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Test', age: 30 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toBe('Test-30'); - }); - - test('validation fails before subsequent middleware runs', async () => { - const app = new Hono(); - - let middlewareRan = false; - - const afterValidationMiddleware = async (_c: Context, next: Next) => { - middlewareRan = true; - await next(); - }; - - app.post('/test', testAgent.validator(), afterValidationMiddleware, async (c) => { - return c.text('ok'); - }); - - // Invalid request - middleware should NOT run - middlewareRan = false; - await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ invalid: 'data' }), - }); - - expect(middlewareRan).toBe(false); - }); - - test('middleware can short-circuit before validator', async () => { - const app = new Hono(); - - const blockMiddleware = async (c: Context, next: Next) => { - const body = await c.req.json(); - if (body.blocked) { - return c.json({ error: 'Blocked by middleware' }, 403); - } - await next(); - }; - - app.post('/test', blockMiddleware, testAgent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json(`${data.name}-${data.age}`); - }); - - // Blocked request returns 403, validation never runs - const blockedRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Test', age: 30, blocked: true }), - }); - expect(blockedRes.status).toBe(403); - - // Non-blocked request validates normally - const allowedRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Test', age: 30 }), - }); - expect(allowedRes.status).toBe(200); - }); - - test('security middleware before validator prevents parsing malicious requests', async () => { - const app = new Hono(); - let validationRan = false; - - // Security middleware that checks credentials BEFORE parsing body - const authMiddleware = async (c: Context, next: Next) => { - const authHeader = c.req.header('Authorization'); - if (!authHeader || !authHeader.startsWith('Bearer ')) { - return c.json({ error: 'Unauthorized' }, 401); - } - await next(); - }; - - const trackingAgent = createAgent('tracking', { - schema: { - input: z.object({ data: z.string() }), - output: z.object({ result: z.string() }), - }, - handler: async (_ctx, input) => { - validationRan = true; - return { result: input.data }; - }, - }); - - app.post('/test', authMiddleware, trackingAgent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ result: data.data }); - }); - - // Request without auth header should fail BEFORE validation - validationRan = false; - const unauthRes = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ data: 'test' }), - }); - expect(unauthRes.status).toBe(401); - expect(validationRan).toBe(false); - - // Request with auth should pass through to validator - validationRan = false; - const authRes = await app.request('/test', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer valid-token', - }, - body: JSON.stringify({ data: 'test' }), - }); - expect(authRes.status).toBe(200); - }); - - test('validator can be positioned anywhere in middleware chain', async () => { - const app = new Hono(); - const order: string[] = []; - - const middleware1 = async (_c: Context, next: Next) => { - order.push('m1-before'); - await next(); - order.push('m1-after'); - }; - - const middleware2 = async (_c: Context, next: Next) => { - order.push('m2-before'); - await next(); - order.push('m2-after'); - }; - - const middleware3 = async (_c: Context, next: Next) => { - order.push('m3-before'); - await next(); - order.push('m3-after'); - }; - - // Validator positioned in the MIDDLE of the chain - app.post('/test', middleware1, middleware2, testAgent.validator(), middleware3, async (c) => { - order.push('handler'); - const data = c.req.valid('json'); - // Return string to match testAgent's output schema - return c.json(`${data.name}-${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Test', age: 30 }), - }); - expect(res.status).toBe(200); - - // Verify execution order: before calls happen in order, after calls in reverse - expect(order).toEqual([ - 'm1-before', - 'm2-before', - 'm3-before', - 'handler', - 'm3-after', - 'm2-after', - 'm1-after', - ]); - }); -}); - -describe('agent.validator() - output validation', () => { - test('validates output against agent schema', async () => { - const agent = createAgent('output-test', { - schema: { - input: z.object({ value: z.number() }), - output: z.object({ result: z.number() }), - }, - handler: async (_ctx, input) => ({ result: input.value * 2 }), - }); - - const app = new Hono(); - app.post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - // Return properly formatted output matching the schema - return c.json({ result: data.value * 2 }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 5 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toEqual({ result: 10 }); - }); - - test('throws 500 on output validation failure', async () => { - const agent = createAgent('bad-output', { - schema: { - input: z.object({ value: z.number() }), - output: z.object({ result: z.number() }), - }, - handler: async () => ({ result: 5 }), - }); - - const app = new Hono(); - app.post('/test', agent.validator(), async (c) => { - // Handler returns wrong type - should cause output validation error - return c.json({ wrong: 'type' }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ value: 5 }), - }); - expect(res.status).toBe(500); - }); - - test('output validation with override schema', async () => { - const agent = createAgent('override-output', { - schema: { - input: z.object({ x: z.number() }), - output: z.string(), - }, - handler: async () => 'default', - }); - - const customOutput = z.object({ count: z.number() }); - - const app = new Hono(); - app.post('/test', agent.validator({ output: customOutput }), async (c) => { - return c.json({ count: 42 }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ x: 1 }), - }); - expect(res.status).toBe(200); - const result = await res.json(); - expect(result).toEqual({ count: 42 }); - }); -}); - -test('skips output validation for streaming agents', async () => { - const streamingAgent = createAgent('streaming', { - schema: { - input: z.object({ data: z.string() }), - output: z.string(), - stream: true, - }, - handler: async (_ctx, input) => { - return new ReadableStream({ - start(controller) { - controller.enqueue(input.data); - controller.close(); - }, - }); - }, - }); - - const app = new Hono(); - app.post('/test', streamingAgent.validator(), async (c) => { - const data = c.req.valid('json'); - // Return any JSON - output validation should be skipped for streams - return c.json({ stream: 'response', data: data.data }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ data: 'test' }), - }); - // Should succeed even though output doesn't match schema (stream validation skipped) - expect(res.status).toBe(200); - const result = (await res.json()) as { data: string }; - expect(result.data).toBe('test'); -}); diff --git a/packages/runtime/test/base-app.test.ts b/packages/runtime/test/base-app.test.ts deleted file mode 100644 index e25f8f866..000000000 --- a/packages/runtime/test/base-app.test.ts +++ /dev/null @@ -1,331 +0,0 @@ -/** - * Tests for sub-router composition with createRouter and the - * createApp({ router }) user-provided router feature. - * - * These tests verify that createRouter-based sub-routers compose correctly - * when mounted via Hono's .route() — the same pattern used by the CLI's - * generated entry file and the route consolidation migration. - */ - -import { describe, test, expect } from 'bun:test'; -import { Hono } from 'hono'; -import { createRouter } from '../src/router'; -import type { AppConfig, RouteMount } from '../src/app'; -import { normalizeRouterConfig } from '../src/app'; - -describe('createRouter - sub-router compatibility', () => { - test('createRouter produces a Hono instance that can be used as sub-router', () => { - const sub = createRouter(); - sub.get('/hello', (c) => c.text('world')); - - const parent = new Hono(); - parent.route('/api', sub); - - // Verify it's a valid Hono instance - expect(sub).toBeInstanceOf(Hono); - }); - - test('sub-routers compose correctly via .route()', async () => { - const users = createRouter(); - users.get('/', (c) => c.json({ users: [] })); - users.get('/:id', (c) => c.json({ id: c.req.param('id') })); - users.post('/', async (c) => { - const body = await c.req.json(); - return c.json({ created: body }); - }); - - const auth = createRouter(); - auth.post('/login', (c) => c.json({ token: 'abc' })); - auth.post('/logout', (c) => c.json({ success: true })); - - // Root router mounts sub-routers (this is what the user would do) - const router = createRouter(); - router.route('/users', users); - router.route('/auth', auth); - router.get('/health', (c) => c.text('OK')); - - // Simulate what the entry generator does: mount user router at a prefix - const app = new Hono(); - app.route('/api', router); - - // Test all routes work at their final paths - let res = await app.request('/api/users'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ users: [] }); - - res = await app.request('/api/users/42'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ id: '42' }); - - res = await app.request('/api/users', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice' }), - }); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ created: { name: 'Alice' } }); - - res = await app.request('/api/auth/login', { method: 'POST' }); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ token: 'abc' }); - - res = await app.request('/api/auth/logout', { method: 'POST' }); - expect(res.status).toBe(200); - - res = await app.request('/api/health'); - expect(res.status).toBe(200); - expect(await res.text()).toBe('OK'); - }); - - test('sub-routers preserve middleware', async () => { - const users = createRouter(); - - // Add middleware to the sub-router - users.use('*', async (c, next) => { - c.header('X-Custom', 'from-middleware'); - await next(); - }); - users.get('/', (c) => c.json({ users: [] })); - - const app = new Hono(); - app.route('/api', users); - - const res = await app.request('/api'); - expect(res.status).toBe(200); - expect(res.headers.get('X-Custom')).toBe('from-middleware'); - }); - - test('deeply nested sub-routers work', async () => { - const items = createRouter(); - items.get('/', (c) => c.json({ items: [] })); - - const projects = createRouter(); - projects.get('/', (c) => c.json({ projects: [] })); - projects.route('/items', items); - - const v1 = createRouter(); - v1.route('/projects', projects); - - const app = new Hono(); - app.route('/api/v1', v1); - - let res = await app.request('/api/v1/projects'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ projects: [] }); - - res = await app.request('/api/v1/projects/items'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ items: [] }); - }); - - test('route prefix "/" mounts at root', async () => { - const router = createRouter(); - router.get('/hello', (c) => c.text('world')); - router.get('/nested/path', (c) => c.text('deep')); - - const app = new Hono(); - app.route('/', router); - - let res = await app.request('/hello'); - expect(res.status).toBe(200); - expect(await res.text()).toBe('world'); - - res = await app.request('/nested/path'); - expect(res.status).toBe(200); - expect(await res.text()).toBe('deep'); - }); - - test('middleware pattern "*" matches all sub-routes', async () => { - const router = createRouter(); - router.get('/a', (c) => c.text('a')); - router.get('/b', (c) => c.text('b')); - - const app = new Hono(); - const intercepted: string[] = []; - - // Simulate Agentuity middleware applied to /api/* - app.use('/api/*', async (c, next) => { - intercepted.push(c.req.path); - await next(); - }); - app.route('/api', router); - - await app.request('/api/a'); - await app.request('/api/b'); - - expect(intercepted).toEqual(['/api/a', '/api/b']); - }); - - test('system routes are not affected by user route prefix middleware', async () => { - const router = createRouter(); - router.get('/data', (c) => c.json({ data: true })); - - const app = new Hono(); - let middlewareCallCount = 0; - - // Only /api/* gets middleware - app.use('/api/*', async (_c, next) => { - middlewareCallCount++; - await next(); - }); - - // System routes at /_agentuity/* should NOT trigger /api/* middleware - app.get('/_agentuity/health', (c) => c.text('OK')); - app.route('/api', router); - - // Health check — should NOT trigger middleware - middlewareCallCount = 0; - const healthRes = await app.request('/_agentuity/health'); - expect(healthRes.status).toBe(200); - expect(middlewareCallCount).toBe(0); - - // API route — SHOULD trigger middleware - const apiRes = await app.request('/api/data'); - expect(apiRes.status).toBe(200); - expect(middlewareCallCount).toBe(1); - }); -}); - -describe('createApp({ router }) - user-provided router', () => { - test('AppConfig accepts a plain Hono router (mounted at /api)', () => { - const router = createRouter(); - const _config: AppConfig = { router }; - expect(_config.router).toBeDefined(); - }); - - test('AppConfig accepts a RouteMount object with custom path', () => { - const router = createRouter(); - const _config: AppConfig = { - router: { path: '/v1', router }, - }; - expect(_config.router).toBeDefined(); - }); - - test('AppConfig accepts an array of RouteMount objects', () => { - const _config: AppConfig = { - router: [ - { path: '/api/v1', router: createRouter() }, - { path: '/api/v2', router: createRouter() }, - ], - }; - expect(Array.isArray(_config.router)).toBe(true); - }); - - test('AppConfig router is optional — omitting it uses file-based routing', () => { - const _config: AppConfig = {}; - expect(_config.router).toBeUndefined(); - }); - - test('normalizeRouterConfig wraps plain Hono at /api', () => { - const router = createRouter(); - const result = normalizeRouterConfig(router); - expect(result).toHaveLength(1); - expect(result[0].path).toBe('/api'); - expect(result[0].router).toBe(router); - }); - - test('normalizeRouterConfig passes through RouteMount object', () => { - const router = createRouter(); - const result = normalizeRouterConfig({ path: '/v1', router }); - expect(result).toHaveLength(1); - expect(result[0].path).toBe('/v1'); - expect(result[0].router).toBe(router); - }); - - test('normalizeRouterConfig passes through RouteMount array', () => { - const r1 = createRouter(); - const r2 = createRouter(); - const result = normalizeRouterConfig([ - { path: '/api/v1', router: r1 }, - { path: '/api/v2', router: r2 }, - ]); - expect(result).toHaveLength(2); - expect(result[0].path).toBe('/api/v1'); - expect(result[1].path).toBe('/api/v2'); - }); - - test('plain router mounts at /api by entry file', async () => { - const userRouter = createRouter(); - userRouter.get('/health', (c) => c.text('OK')); - userRouter.get('/users', (c) => c.json({ users: [] })); - - // Simulate entry file: iterate RouteMount[], mount each - const mounts: RouteMount[] = [{ path: '/api', router: userRouter }]; - const app = new Hono(); - for (const mount of mounts) { - app.route(mount.path, mount.router); - } - - let res = await app.request('/api/health'); - expect(res.status).toBe(200); - expect(await res.text()).toBe('OK'); - - res = await app.request('/api/users'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ users: [] }); - }); - - test('multiple routers mount at different prefixes', async () => { - const v1 = createRouter(); - v1.get('/users', (c) => c.json({ version: 1, users: [] })); - - const v2 = createRouter(); - v2.get('/users', (c) => c.json({ version: 2, users: [] })); - - // Simulate entry file with array of mounts - const mounts: RouteMount[] = [ - { path: '/api/v1', router: v1 }, - { path: '/api/v2', router: v2 }, - ]; - const app = new Hono(); - for (const mount of mounts) { - app.route(mount.path, mount.router); - } - - let res = await app.request('/api/v1/users'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ version: 1, users: [] }); - - res = await app.request('/api/v2/users'); - expect(res.status).toBe(200); - expect(await res.json()).toEqual({ version: 2, users: [] }); - }); - - test('middleware is applied per mount prefix', async () => { - const v1 = createRouter(); - v1.get('/data', (c) => c.text('v1')); - - const v2 = createRouter(); - v2.get('/data', (c) => c.text('v2')); - - const mounts: RouteMount[] = [ - { path: '/api/v1', router: v1 }, - { path: '/api/v2', router: v2 }, - ]; - - const app = new Hono(); - const intercepted: string[] = []; - - // Simulate entry file: apply middleware to each prefix - for (const mount of mounts) { - const prefix = mount.path + '/*'; - app.use(prefix, async (c, next) => { - intercepted.push(c.req.path); - await next(); - }); - app.route(mount.path, mount.router); - } - - // System route — no middleware - app.get('/_agentuity/health', (c) => c.text('OK')); - - await app.request('/_agentuity/health'); - expect(intercepted).toHaveLength(0); - - await app.request('/api/v1/data'); - expect(intercepted).toEqual(['/api/v1/data']); - - await app.request('/api/v2/data'); - expect(intercepted).toEqual(['/api/v1/data', '/api/v2/data']); - }); -}); diff --git a/packages/runtime/test/bun-s3-patch.test.ts b/packages/runtime/test/bun-s3-patch.test.ts deleted file mode 100644 index 0698bae51..000000000 --- a/packages/runtime/test/bun-s3-patch.test.ts +++ /dev/null @@ -1,838 +0,0 @@ -/** - * Tests for Bun S3 monkey-patch for Agentuity storage endpoints. - */ - -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { isAgentuityStorageEndpoint, patchBunS3ForStorageDev } from '../src/bun-s3-patch'; - -describe('isAgentuityStorageEndpoint', () => { - test('returns true for storage.dev', () => { - expect(isAgentuityStorageEndpoint('storage.dev')).toBe(true); - }); - - test('returns true for storageapi.dev', () => { - expect(isAgentuityStorageEndpoint('storageapi.dev')).toBe(true); - }); - - test('returns true for subdomains of storage.dev', () => { - expect(isAgentuityStorageEndpoint('t3.storage.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('ag-rx8t16b5r9e6.t3.storage.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('foo.bar.storage.dev')).toBe(true); - }); - - test('returns true for subdomains of storageapi.dev', () => { - expect(isAgentuityStorageEndpoint('t3.storageapi.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('ag-rx8t16b5r9e6.t3.storageapi.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('foo.bar.storageapi.dev')).toBe(true); - }); - - test('returns true for https URLs with storage.dev', () => { - expect(isAgentuityStorageEndpoint('https://storage.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('https://t3.storage.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('https://ag-rx8t16b5r9e6.t3.storage.dev')).toBe(true); - }); - - test('returns true for https URLs with storageapi.dev', () => { - expect(isAgentuityStorageEndpoint('https://storageapi.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('https://t3.storageapi.dev')).toBe(true); - expect(isAgentuityStorageEndpoint('https://ag-rx8t16b5r9e6.t3.storageapi.dev')).toBe(true); - }); - - test('returns true for URLs with paths', () => { - expect(isAgentuityStorageEndpoint('https://ag-123.t3.storage.dev/some/path')).toBe(true); - expect(isAgentuityStorageEndpoint('https://ag-123.t3.storageapi.dev/some/path')).toBe(true); - }); - - test('returns false for non-storage.dev endpoints', () => { - expect(isAgentuityStorageEndpoint('s3.amazonaws.com')).toBe(false); - expect(isAgentuityStorageEndpoint('https://s3.us-east-1.amazonaws.com')).toBe(false); - expect(isAgentuityStorageEndpoint('r2.cloudflarestorage.com')).toBe(false); - expect(isAgentuityStorageEndpoint('localhost:9000')).toBe(false); - }); - - test('returns false for domains that contain but do not end with storage.dev', () => { - expect(isAgentuityStorageEndpoint('storage.dev.example.com')).toBe(false); - expect(isAgentuityStorageEndpoint('notstorage.dev')).toBe(false); - }); - - test('returns false for domains that contain but do not end with storageapi.dev', () => { - expect(isAgentuityStorageEndpoint('storageapi.dev.example.com')).toBe(false); - expect(isAgentuityStorageEndpoint('notstorageapi.dev')).toBe(false); - }); - - test('returns false for empty or whitespace strings', () => { - expect(isAgentuityStorageEndpoint('')).toBe(false); - expect(isAgentuityStorageEndpoint(' ')).toBe(false); - }); -}); - -describe('patchBunS3ForStorageDev', () => { - const originalS3Endpoint = process.env.S3_ENDPOINT; - const originalAwsEndpoint = process.env.AWS_ENDPOINT; - const PATCHED_SYMBOL = Symbol.for('agentuity.s3.patched'); - - // Store the truly original methods before any tests run - const trulyOriginalFile = Bun.S3Client.prototype.file; - const trulyOriginalPresign = Bun.S3Client.prototype.presign; - const trulyOriginalWrite = Bun.S3Client.prototype.write; - const trulyOriginalDelete = Bun.S3Client.prototype.delete; - const trulyOriginalExists = Bun.S3Client.prototype.exists; - const trulyOriginalStat = Bun.S3Client.prototype.stat; - const trulyOriginalSize = Bun.S3Client.prototype.size; - const trulyOriginalUnlink = Bun.S3Client.prototype.unlink; - const trulyOriginalList = Bun.S3Client.prototype.list; - - beforeEach(() => { - delete process.env.S3_ENDPOINT; - delete process.env.AWS_ENDPOINT; - // Reset the prototype to the truly original methods before each test - Bun.S3Client.prototype.file = trulyOriginalFile; - Bun.S3Client.prototype.presign = trulyOriginalPresign; - Bun.S3Client.prototype.write = trulyOriginalWrite; - Bun.S3Client.prototype.delete = trulyOriginalDelete; - Bun.S3Client.prototype.exists = trulyOriginalExists; - Bun.S3Client.prototype.stat = trulyOriginalStat; - Bun.S3Client.prototype.size = trulyOriginalSize; - Bun.S3Client.prototype.unlink = trulyOriginalUnlink; - Bun.S3Client.prototype.list = trulyOriginalList; - // Clear the patched marker - const proto = Bun.S3Client.prototype as Record; - delete proto[PATCHED_SYMBOL]; - }); - - afterEach(() => { - if (originalS3Endpoint !== undefined) { - process.env.S3_ENDPOINT = originalS3Endpoint; - } else { - delete process.env.S3_ENDPOINT; - } - if (originalAwsEndpoint !== undefined) { - process.env.AWS_ENDPOINT = originalAwsEndpoint; - } else { - delete process.env.AWS_ENDPOINT; - } - // Restore the original methods after each test - Bun.S3Client.prototype.file = trulyOriginalFile; - Bun.S3Client.prototype.presign = trulyOriginalPresign; - Bun.S3Client.prototype.write = trulyOriginalWrite; - Bun.S3Client.prototype.delete = trulyOriginalDelete; - Bun.S3Client.prototype.exists = trulyOriginalExists; - Bun.S3Client.prototype.stat = trulyOriginalStat; - Bun.S3Client.prototype.size = trulyOriginalSize; - Bun.S3Client.prototype.unlink = trulyOriginalUnlink; - Bun.S3Client.prototype.list = trulyOriginalList; - // Clear the patched marker - const proto = Bun.S3Client.prototype as Record; - delete proto[PATCHED_SYMBOL]; - }); - - test('does not throw when Bun.s3 is not available', () => { - expect(() => patchBunS3ForStorageDev()).not.toThrow(); - }); - - test('does not throw when S3_ENDPOINT is not set', () => { - expect(() => patchBunS3ForStorageDev()).not.toThrow(); - }); - - test('does not throw when S3_ENDPOINT is not a storage.dev endpoint', () => { - process.env.S3_ENDPOINT = 'https://s3.amazonaws.com'; - expect(() => patchBunS3ForStorageDev()).not.toThrow(); - }); - - test('is idempotent - can be called multiple times safely', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - expect(() => { - patchBunS3ForStorageDev(); - patchBunS3ForStorageDev(); - patchBunS3ForStorageDev(); - }).not.toThrow(); - }); - - test('uses AWS_ENDPOINT as fallback when S3_ENDPOINT is not set', () => { - process.env.AWS_ENDPOINT = 'https://ag-123.t3.storage.dev'; - expect(() => patchBunS3ForStorageDev()).not.toThrow(); - }); - - test('patches Bun.S3Client.prototype when S3_ENDPOINT is storage.dev', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - patchBunS3ForStorageDev(); - - // Verify we're running in Bun and the patch was applied - expect(Bun).toBeDefined(); - expect(Bun.S3Client).toBeDefined(); - - // Check the Symbol marker was set on the prototype - const proto = Bun.S3Client.prototype as Record; - expect(proto[PATCHED_SYMBOL]).toBe(true); - }); - - test('patched file method exists and is a function', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - patchBunS3ForStorageDev(); - - expect(typeof Bun.S3Client.prototype.file).toBe('function'); - }); - - test('manual S3Client instantiation still works after patch', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - patchBunS3ForStorageDev(); - - // Verify that manually creating an S3Client still works - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - endpoint: 'https://s3.us-east-1.amazonaws.com', - }); - - expect(client).toBeDefined(); - expect(typeof client.file).toBe('function'); - - // The file method should work (returns an S3File reference) - const file = client.file('test.txt'); - expect(file).toBeDefined(); - }); - - test('patch applies to all S3Client instances, not just global singleton', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - patchBunS3ForStorageDev(); - - // Manual S3Client should not be the same as Bun.s3 - const manualClient = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - expect(manualClient).not.toBe(Bun.s3); - - // But it should still use the patched file method from the prototype - expect(manualClient.file).toBe(Bun.s3.file); - }); - - test('patched file method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - const originalFile = Bun.S3Client.prototype.file; - - // Wrap the ORIGINAL method BEFORE patching to capture what the patch passes - Bun.S3Client.prototype.file = function spyFile( - this: unknown, - path: string, - options?: Record - ) { - capturedOptions = options; - return originalFile.call(this, path, options); - }; - - // Now apply the patch - it will wrap our spy - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.file('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched file method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - const originalFile = Bun.S3Client.prototype.file; - - // Wrap the ORIGINAL method BEFORE patching to capture what the patch passes - Bun.S3Client.prototype.file = function spyFile( - this: unknown, - path: string, - options?: Record - ) { - capturedOptions = options; - return originalFile.call(this, path, options); - }; - - // Now apply the patch - it will wrap our spy - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.file('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched file method preserves explicit virtualHostedStyle: true', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - const originalFile = Bun.S3Client.prototype.file; - - // Wrap the ORIGINAL method BEFORE patching to capture what the patch passes - Bun.S3Client.prototype.file = function spyFile( - this: unknown, - path: string, - options?: Record - ) { - capturedOptions = options; - return originalFile.call(this, path, options); - }; - - // Now apply the patch - it will wrap our spy - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.file('test.txt', { virtualHostedStyle: true }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched file method injects virtualHostedStyle: true into existing options object', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - const originalFile = Bun.S3Client.prototype.file; - - Bun.S3Client.prototype.file = function spyFile( - this: unknown, - path: string, - options?: Record - ) { - capturedOptions = options; - return originalFile.call(this, path, options); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.file('test.txt', { cacheControl: 'max-age=3600' }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - expect(capturedOptions!.cacheControl).toBe('max-age=3600'); - }); - - test('patched presign method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.presign = function spyPresign( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return 'https://mock-presigned-url.example.com'; - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.presign('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched presign method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.presign = function spyPresign( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return 'https://mock-presigned-url.example.com'; - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.presign('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched write method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.write = function spyWrite( - this: unknown, - _path: string, - _data: unknown, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(11); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.write('test.txt', 'hello world'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched write method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.write = function spyWrite( - this: unknown, - _path: string, - _data: unknown, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(11); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.write('test.txt', 'hello world', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched list method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.list = function spyList( - this: unknown, - _input?: Record | null, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve({ contents: [], isTruncated: false }); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.list({ prefix: 'v1-ks/' }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched list method works with no arguments', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.list = function spyList( - this: unknown, - _input?: Record | null, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve({ contents: [], isTruncated: false }); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.list(); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched delete method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.delete = function spyDelete( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.delete('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched exists method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.exists = function spyExists( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(true); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.exists('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched stat method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.stat = function spyStat( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve({ - size: 0, - etag: '', - lastModified: new Date(), - type: 'text/plain', - }); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.stat('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched size method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.size = function spySize( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(0); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.size('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched unlink method injects virtualHostedStyle: true when no options passed', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.unlink = function spyUnlink( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.unlink('test.txt'); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(true); - }); - - test('patched delete method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.delete = function spyDelete( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.delete('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched exists method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.exists = function spyExists( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(true); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.exists('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched stat method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.stat = function spyStat( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve({ - size: 0, - etag: '', - lastModified: new Date(), - type: 'text/plain', - }); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.stat('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched size method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.size = function spySize( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(0); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.size('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched unlink method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.unlink = function spyUnlink( - this: unknown, - _path: string, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve(); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.unlink('test.txt', { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('patched list method does not override explicit virtualHostedStyle: false', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - - let capturedOptions: Record | undefined; - - Bun.S3Client.prototype.list = function spyList( - this: unknown, - _input?: Record | null, - options?: Record - ) { - capturedOptions = options; - return Promise.resolve({ contents: [], isTruncated: false }); - }; - - patchBunS3ForStorageDev(); - - const client = new Bun.S3Client({ - accessKeyId: 'test-access-key', - secretAccessKey: 'test-secret-key', - bucket: 'my-bucket', - }); - - client.list({ prefix: 'test/' }, { virtualHostedStyle: false }); - - expect(capturedOptions).toBeDefined(); - expect(capturedOptions!.virtualHostedStyle).toBe(false); - }); - - test('all patched methods exist and are functions after patching', () => { - process.env.S3_ENDPOINT = 'https://ag-123.t3.storage.dev'; - patchBunS3ForStorageDev(); - - expect(typeof Bun.S3Client.prototype.file).toBe('function'); - expect(typeof Bun.S3Client.prototype.presign).toBe('function'); - expect(typeof Bun.S3Client.prototype.write).toBe('function'); - expect(typeof Bun.S3Client.prototype.delete).toBe('function'); - expect(typeof Bun.S3Client.prototype.exists).toBe('function'); - expect(typeof Bun.S3Client.prototype.stat).toBe('function'); - expect(typeof Bun.S3Client.prototype.size).toBe('function'); - expect(typeof Bun.S3Client.prototype.unlink).toBe('function'); - expect(typeof Bun.S3Client.prototype.list).toBe('function'); - }); -}); diff --git a/packages/runtime/test/compression.test.ts b/packages/runtime/test/compression.test.ts deleted file mode 100644 index 8e3a13d74..000000000 --- a/packages/runtime/test/compression.test.ts +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Tests for compression middleware. - * Tests the createCompressionMiddleware function and its configuration options. - * - * Note: Hono's compress middleware uses CompressionStream which may not be - * available in all test environments. These tests focus on the middleware - * logic (config resolution, bypasses) rather than actual compression. - * - * These tests use a local config resolver instead of the global __AGENTUITY_APP_CONFIG__ - * to avoid race conditions with other test files running in parallel. - */ - -import { expect, describe, test } from 'bun:test'; -import { Hono } from 'hono'; -import { createCompressionMiddleware } from '../src/middleware'; - -// Generate a large string that will exceed the default threshold -function generateLargePayload(size = 2048): string { - return 'x'.repeat(size); -} - -describe('Compression Middleware', () => { - describe('Basic behavior', () => { - test('middleware processes request and returns response', async () => { - const app = new Hono(); - // Disable compression to test basic passthrough - app.use('*', createCompressionMiddleware({ enabled: false })); - app.get('/test', (c) => { - return c.json({ message: 'hello' }); - }); - - const res = await app.request('/test', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect((data as { message: string }).message).toBe('hello'); - }); - - test('passes through without Accept-Encoding header', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - app.get('/test', (c) => { - return c.json({ data: generateLargePayload(2048) }); - }); - - const res = await app.request('/test', { - method: 'GET', - // No Accept-Encoding header - }); - - expect(res.status).toBe(200); - // Without Accept-Encoding, no compression should happen - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - }); - - describe('Configuration options', () => { - test('enabled: false disables compression', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware({ enabled: false })); - app.get('/test', (c) => { - return c.json({ data: generateLargePayload(2048) }); - }); - - const res = await app.request('/test', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - - test('compression: false disables compression', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware(false)); - app.get('/test', (c) => { - return c.json({ data: generateLargePayload(2048) }); - }); - - const res = await app.request('/test', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - - test('enabled:false disables compression', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware({ enabled: false })); - app.get('/test', (c) => { - return c.json({ data: generateLargePayload(2048) }); - }); - - const res = await app.request('/test', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - - test('custom filter function disables compression for filtered paths', async () => { - // Test that filter function can block compression - // We verify by checking that the path we want to filter doesn't get compressed - const app = new Hono(); - app.use( - '*', - createCompressionMiddleware({ - filter: (c) => { - // Only allow compression for paths starting with /compress - return c.req.path.startsWith('/compress'); - }, - }) - ); - app.get('/no-compress', (c) => { - return c.json({ data: generateLargePayload(2048) }); - }); - - const res = await app.request('/no-compress', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - // Filter returned false for /no-compress, so no compression - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - - test('filter function can allow specific paths', async () => { - const app = new Hono(); - app.use( - '*', - createCompressionMiddleware({ - filter: (c) => !c.req.path.startsWith('/no-compress'), - }) - ); - app.get('/no-compress/data', (c) => { - return c.json({ data: generateLargePayload(2048) }); - }); - - const res = await app.request('/no-compress/data', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - // Filter returned false for /no-compress paths - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - }); - - describe('WebSocket bypass', () => { - test('bypasses WebSocket upgrade requests', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - app.get('/ws', (c) => { - return c.json({ upgrade: 'websocket' }); - }); - - const res = await app.request('/ws', { - method: 'GET', - headers: { - 'Accept-Encoding': 'gzip', - Upgrade: 'websocket', - Connection: 'Upgrade', - }, - }); - - expect(res.status).toBe(200); - // WebSocket requests should bypass compression entirely - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - }); - - describe('Config resolution', () => { - test('works without any config (uses defaults)', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - app.get('/test', (c) => { - return c.json({ message: 'hello' }); - }); - - const res = await app.request('/test', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - // Middleware works without crashing - expect(res.status).toBe(200); - // Response has a body (may or may not be compressed depending on environment) - const buffer = await res.arrayBuffer(); - expect(buffer.byteLength).toBeGreaterThan(0); - }); - }); - - describe('Multiple routes', () => { - test('handles multiple routes without interference', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware({ enabled: false })); - - app.get('/a', (c) => c.json({ route: 'a' })); - app.get('/b', (c) => c.json({ route: 'b' })); - app.post('/c', (c) => c.json({ route: 'c' })); - - const resA = await app.request('/a', { method: 'GET' }); - expect(resA.status).toBe(200); - expect(((await resA.json()) as { route: string }).route).toBe('a'); - - const resB = await app.request('/b', { method: 'GET' }); - expect(resB.status).toBe(200); - expect(((await resB.json()) as { route: string }).route).toBe('b'); - - const resC = await app.request('/c', { method: 'POST' }); - expect(resC.status).toBe(200); - expect(((await resC.json()) as { route: string }).route).toBe('c'); - }); - }); - - describe('SSE and streaming bypass', () => { - test('SSE responses (text/event-stream) are not compressed', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - app.get('/sse', (_c) => { - return new Response(generateLargePayload(2048), { - headers: { 'Content-Type': 'text/event-stream' }, - }); - }); - - const res = await app.request('/sse', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Type')).toBe('text/event-stream'); - // SSE should NOT be compressed - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - - test('binary stream responses (application/octet-stream) are not compressed', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - app.get('/stream', (_c) => { - return new Response(generateLargePayload(2048), { - headers: { 'Content-Type': 'application/octet-stream' }, - }); - }); - - const res = await app.request('/stream', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Type')).toBe('application/octet-stream'); - // Binary streams should NOT be compressed - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - - test('text/event-stream with charset is not compressed', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - app.get('/sse', (_c) => { - return new Response(generateLargePayload(2048), { - headers: { 'Content-Type': 'text/event-stream; charset=utf-8' }, - }); - }); - - const res = await app.request('/sse', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - // SSE should NOT be compressed even with charset - expect(res.headers.get('Content-Encoding')).toBeNull(); - }); - }); - - describe('Response preservation', () => { - test('preserves response status codes', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware()); - - app.get('/created', (c) => c.json({ ok: true }, 201)); - app.get('/not-found', (c) => c.json({ error: 'not found' }, 404)); - - const created = await app.request('/created', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - expect(created.status).toBe(201); - - const notFound = await app.request('/not-found', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - expect(notFound.status).toBe(404); - }); - - test('preserves custom headers', async () => { - const app = new Hono(); - app.use('*', createCompressionMiddleware({ enabled: false })); - app.get('/test', (c) => { - c.header('X-Custom', 'value'); - return c.json({ ok: true }); - }); - - const res = await app.request('/test', { - method: 'GET', - headers: { 'Accept-Encoding': 'gzip' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('X-Custom')).toBe('value'); - }); - }); -}); diff --git a/packages/runtime/test/context-property-errors.test.ts b/packages/runtime/test/context-property-errors.test.ts deleted file mode 100644 index c6bd6263b..000000000 --- a/packages/runtime/test/context-property-errors.test.ts +++ /dev/null @@ -1,266 +0,0 @@ -/** - * Tests for helpful error messages when users access AgentContext properties - * directly on HonoContext instead of using c.var.XYZ - * - * These tests verify that installContextPropertyHelpers() adds helpful error messages - * to the HonoContext when users mistakenly try to access AgentContext properties - * directly (e.g., c.logger) instead of via c.var (e.g., c.var.logger). - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import type { Context as HonoContext } from 'hono'; -import { AGENT_CONTEXT_PROPERTIES } from '../src'; - -describe('HonoContext Property Access Error Messages', () => { - // Use the exported constant to ensure tests stay in sync with implementation - const agentContextProperties = AGENT_CONTEXT_PROPERTIES; - - // Helper function to simulate what installContextPropertyHelpers does - function installContextPropertyHelpers(c: HonoContext): void { - for (const property of AGENT_CONTEXT_PROPERTIES) { - // Skip if property already exists - if (Object.hasOwn(c, property)) { - continue; - } - - Object.defineProperty(c, property, { - get() { - throw new Error( - `In route handlers, use c.var.${property} instead of c.${property}. ` + - `The property '${property}' is available on AgentContext (for agent handlers) ` + - `but must be accessed via c.var in HonoContext (route handlers).` - ); - }, - set() { - throw new Error( - `In route handlers, use c.var.${property} instead of c.${property}. ` + - `The property '${property}' is available on AgentContext (for agent handlers) ` + - `but must be accessed via c.var in HonoContext (route handlers).` - ); - }, - configurable: true, - enumerable: false, - }); - } - } - - describe('Direct property access on HonoContext', () => { - agentContextProperties.forEach((property) => { - test(`accessing c.${property} throws helpful error`, async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - // Install the error helpers - installContextPropertyHelpers(c); - return next(); - }); - - app.get('/test', (c) => { - // Attempt to access the property directly on c - try { - // @ts-expect-error - This is intentionally wrong to test error message - const _value = c[property]; - throw new Error('Should not reach here'); - } catch (error) { - // Verify error message is helpful - expect(error).toBeInstanceOf(Error); - expect((error as Error).message).toContain(`c.var.${property}`); - expect((error as Error).message).toContain('route handler'); - } - - return c.json({ ok: true }); - }); - - const res = await app.request('/test', { method: 'GET' }); - expect(res.status).toBe(200); - }); - }); - - test('accessing c.logger throws with specific message', async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - installContextPropertyHelpers(c); - return next(); - }); - - app.post('/log', (c) => { - try { - // @ts-expect-error - Testing error message - c.logger.info('This should fail'); - throw new Error('Should not reach here'); - } catch (error) { - expect(error).toBeInstanceOf(Error); - expect((error as Error).message).toMatch(/use c\.var\.logger instead of c\.logger/i); - expect((error as Error).message).toContain('route handler'); - return c.json({ errorCaught: true }); - } - }); - - const res = await app.request('/log', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ test: 'data' }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ errorCaught: true }); - }); - - test('accessing c.kv throws with specific message', async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - installContextPropertyHelpers(c); - return next(); - }); - - app.get('/kv-test', async (c) => { - try { - // @ts-expect-error - Testing error message - await c.kv.get('test-key'); - throw new Error('Should not reach here'); - } catch (error) { - expect(error).toBeInstanceOf(Error); - expect((error as Error).message).toMatch(/use c\.var\.kv instead of c\.kv/i); - expect((error as Error).message).toContain('route handler'); - return c.json({ errorCaught: true }); - } - }); - - const res = await app.request('/kv-test', { method: 'GET' }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ errorCaught: true }); - }); - - test('accessing c.sessionId throws with specific message', async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - installContextPropertyHelpers(c); - return next(); - }); - - app.get('/session', (c) => { - try { - // @ts-expect-error - Testing error message - const _sessionId = c.sessionId; - throw new Error('Should not reach here'); - } catch (error) { - expect(error).toBeInstanceOf(Error); - expect((error as Error).message).toMatch( - /use c\.var\.sessionId instead of c\.sessionId/i - ); - return c.json({ errorCaught: true }); - } - }); - - const res = await app.request('/session', { method: 'GET' }); - - expect(res.status).toBe(200); - }); - }); - - describe('Error message format validation', () => { - test('error message includes property name and correct usage', async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - installContextPropertyHelpers(c); - return next(); - }); - - app.get('/format-test', (c) => { - try { - // @ts-expect-error - Testing error message format - c.logger.info('test'); - } catch (error) { - const message = (error as Error).message; - - // Should mention the property - expect(message).toContain('logger'); - - // Should show correct usage - expect(message).toContain('c.var.logger'); - - // Should explain context - expect(message).toMatch(/route handler|HonoContext/i); - - return c.json({ message }); - } - return c.json({ ok: false }); - }); - - const res = await app.request('/format-test', { method: 'GET' }); - expect(res.status).toBe(200); - }); - - test('property setter also throws helpful error', async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - installContextPropertyHelpers(c); - return next(); - }); - - app.get('/setter-test', (c) => { - try { - // @ts-expect-error - Testing error message on set - c.logger = {}; - throw new Error('Should not reach here'); - } catch (error) { - expect(error).toBeInstanceOf(Error); - expect((error as Error).message).toContain('c.var.logger'); - expect((error as Error).message).toContain('route handler'); - return c.json({ errorCaught: true }); - } - }); - - const res = await app.request('/setter-test', { method: 'GET' }); - expect(res.status).toBe(200); - }); - - test('all properties throw consistently formatted errors', async () => { - const app = new Hono(); - - app.use('*', (c, next) => { - installContextPropertyHelpers(c); - return next(); - }); - - app.get('/consistency-test', (c) => { - const errors: string[] = []; - - agentContextProperties.forEach((property) => { - try { - // @ts-expect-error - Testing all properties - const _value = c[property]; - } catch (error) { - errors.push((error as Error).message); - } - }); - - // All errors should follow the same format - errors.forEach((message, index) => { - const property = agentContextProperties[index]; - expect(message).toContain(`c.var.${property}`); - expect(message).toContain(`c.${property}`); - expect(message).toContain('route handler'); - expect(message).toContain('AgentContext'); - expect(message).toContain('HonoContext'); - }); - - return c.json({ errorCount: errors.length }); - }); - - const res = await app.request('/consistency-test', { method: 'GET' }); - expect(res.status).toBe(200); - const data = await res.json(); - expect(data.errorCount).toBe(agentContextProperties.length); - }); - }); -}); diff --git a/packages/runtime/test/context-variables.test.ts b/packages/runtime/test/context-variables.test.ts deleted file mode 100644 index 7f4c6c1a7..000000000 --- a/packages/runtime/test/context-variables.test.ts +++ /dev/null @@ -1,508 +0,0 @@ -/** - * Tests for Hono Context Variables type safety and accessibility. - * Verifies that all Variables and PrivateVariables are properly typed and accessible. - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import type { Variables, PrivateVariables, Env } from '../src/app'; -import { createMockLogger } from '@agentuity/test-utils'; -import { metrics, trace } from '@opentelemetry/api'; -import WaitUntilHandler from '../src/_waituntil'; -import { - createMockKeyValueStorage, - createMockStreamStorage, - createMockVectorStorage, -} from './helpers/mock-services'; - -describe('Hono Context Variables - Type Safety', () => { - test('Variables interface includes all required properties', () => { - type TestVars = Variables<{ customProp: string }>; - - // Type-level assertions - these verify properties exist at compile time - // If any property is missing from the type, TypeScript will error - type _AssertLogger = TestVars['logger']; - type _AssertMeter = TestVars['meter']; - type _AssertTracer = TestVars['tracer']; - type _AssertSessionId = TestVars['sessionId']; - type _AssertThread = TestVars['thread']; - type _AssertSession = TestVars['session']; - type _AssertAgent = TestVars['agent']; - type _AssertKv = TestVars['kv']; - type _AssertStream = TestVars['stream']; - type _AssertVector = TestVars['vector']; - type _AssertApp = TestVars['app']; - - // Test passes if it compiles - expect(true).toBe(true); - }); - - test('PrivateVariables interface includes all required properties', () => { - // Type-level assertions - these verify properties exist at compile time - type _AssertWaitUntil = PrivateVariables['waitUntilHandler']; - type _AssertRouteId = PrivateVariables['routeId']; - type _AssertAgentIds = PrivateVariables['agentIds']; - type _AssertTrigger = PrivateVariables['trigger']; - - // Test passes if it compiles - expect(true).toBe(true); - }); - - test('Env extends HonoEnv with Variables', () => { - // Type-level test only - verifies compilation - type TestEnv = Env<{ version: string }>; - - // These should compile without errors - type _CheckVariables = TestEnv['Variables']; - type _CheckLogger = TestEnv['Variables']['logger']; - type _CheckApp = TestEnv['Variables']['app']; - type _CheckVersion = TestEnv['Variables']['app']['version']; - - expect(true).toBe(true); - }); -}); - -describe('Hono Context Variables - Runtime Access', () => { - test('context variables are accessible via c.var', async () => { - const app = new Hono(); - - const logger = createMockLogger(); - const meter = metrics.getMeter('test'); - const tracer = trace.getTracer('test'); - const sessionId = 'test-session-123'; - const kv = createMockKeyValueStorage(); - const stream = createMockStreamStorage(); - const vector = createMockVectorStorage(); - const agent = {}; - const thread = { - id: 'test-thread', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - const session = { - id: 'test-session', - thread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - - app.use('*', async (c, next) => { - c.set('logger', logger); - c.set('meter', meter); - c.set('tracer', tracer); - c.set('sessionId', sessionId); - c.set('kv', kv); - c.set('stream', stream); - c.set('vector', vector); - c.set('agent', agent); - c.set('thread', thread); - c.set('session', session); - c.set('app', {}); - await next(); - }); - - app.get('/test', (c) => { - // Verify all variables are accessible - expect(c.var.logger).toBe(logger); - expect(c.var.meter).toBe(meter); - expect(c.var.tracer).toBe(tracer); - expect(c.var.sessionId).toBe(sessionId); - expect(c.var.kv).toBe(kv); - expect(c.var.stream).toBe(stream); - expect(c.var.vector).toBe(vector); - expect(c.var.thread).toBe(thread); - expect(c.var.session).toBe(session); - expect(c.var.app).toEqual({}); - - return c.json({ success: true }); - }); - - const res = await app.request('/test'); - expect(res.status).toBe(200); - }); - - test('logger is accessible and typed correctly', async () => { - const app = new Hono(); - const logger = createMockLogger(); - - app.use('*', async (c, next) => { - c.set('logger', logger); - await next(); - }); - - app.get('/log', (c) => { - // Type-safe access to logger methods - c.var.logger.info('test message'); - c.var.logger.error('error message'); - c.var.logger.warn('warning message'); - - return c.json({ logged: true }); - }); - - const res = await app.request('/log'); - expect(res.status).toBe(200); - }); - - test('kv storage is accessible and typed correctly', async () => { - const app = new Hono(); - const kv = createMockKeyValueStorage(); - - app.use('*', async (c, next) => { - c.set('kv', kv); - await next(); - }); - - app.post('/kv', async (c) => { - // Type-safe KV operations - await c.var.kv.set('test-store', 'key1', 'value1'); - const result = await c.var.kv.get('test-store', 'key1'); - - return c.json({ - exists: result.exists, - value: result.data, - }); - }); - - const res = await app.request('/kv', { method: 'POST' }); - expect(res.status).toBe(200); - const data = (await res.json()) as { exists: boolean; value: string }; - expect(data.exists).toBe(true); - expect(data.value).toBe('value1'); - }); - - test('stream storage is accessible and typed correctly', async () => { - const app = new Hono(); - const stream = createMockStreamStorage(); - - app.use('*', async (c, next) => { - c.set('stream', stream); - await next(); - }); - - app.post('/stream', async (c) => { - const s = await c.var.stream.create('test-stream'); - await s.write('chunk1'); - await s.write('chunk2'); - - return c.json({ streamId: s.id }); - }); - - const res = await app.request('/stream', { method: 'POST' }); - expect(res.status).toBe(200); - const data = (await res.json()) as { streamId: string }; - expect(data.streamId).toMatch(/stream-\d+/); - }); - - test('vector storage is accessible and typed correctly', async () => { - const app = new Hono(); - const vector = createMockVectorStorage(); - - app.use('*', async (c, next) => { - c.set('vector', vector); - await next(); - }); - - app.post('/vector', async (c) => { - await c.var.vector.upsert('vectors1', { - key: 'doc1', - document: 'AI content', - metadata: { topic: 'tech' }, - }); - const result = await c.var.vector.get('vectors1', 'doc1'); - - return c.json({ exists: result.exists }); - }); - - const res = await app.request('/vector', { method: 'POST' }); - expect(res.status).toBe(200); - const data = (await res.json()) as { exists: boolean }; - expect(data.exists).toBe(true); - }); - - test('sessionId is accessible', async () => { - const app = new Hono(); - - app.use('*', async (c, next) => { - c.set('sessionId', 'session-abc-123'); - await next(); - }); - - app.get('/session', (c) => { - return c.json({ sessionId: c.var.sessionId }); - }); - - const res = await app.request('/session'); - const data = (await res.json()) as { sessionId: string }; - expect(data.sessionId).toBe('session-abc-123'); - }); - - test('thread is accessible', async () => { - const app = new Hono(); - - const thread = { - id: 'thread-xyz', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - - app.use('*', async (c, next) => { - c.set('thread', thread); - await next(); - }); - - app.get('/thread', (c) => { - return c.json({ threadId: c.var.thread.id }); - }); - - const res = await app.request('/thread'); - const data = (await res.json()) as { threadId: string }; - expect(data.threadId).toBe('thread-xyz'); - }); - - test('session is accessible', async () => { - const app = new Hono(); - - const thread = { - id: 'thread-xyz', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - - const session = { - id: 'session-xyz', - thread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - - app.use('*', async (c, next) => { - c.set('session', session); - await next(); - }); - - app.get('/session-info', (c) => { - return c.json({ - sessionId: c.var.session.id, - threadId: c.var.session.thread.id, - }); - }); - - const res = await app.request('/session-info'); - const data = (await res.json()) as { sessionId: string; threadId: string }; - expect(data.sessionId).toBe('session-xyz'); - expect(data.threadId).toBe('thread-xyz'); - }); -}); - -describe('Hono Context Variables - Custom App State', () => { - test('custom app state is typed correctly', async () => { - type CustomAppState = { - database: string; - version: string; - config: { - maxRetries: number; - }; - }; - - const app = new Hono>(); - - const customState: CustomAppState = { - database: 'postgres://localhost', - version: '1.0.0', - config: { - maxRetries: 3, - }, - }; - - app.use('*', async (c, next) => { - c.set('app', customState); - await next(); - }); - - app.get('/app-state', (c) => { - // Type-safe access to custom app state - const db = c.var.app.database; - const ver = c.var.app.version; - const retries = c.var.app.config.maxRetries; - - return c.json({ - database: db, - version: ver, - maxRetries: retries, - }); - }); - - const res = await app.request('/app-state'); - const data = (await res.json()) as { database: string; version: string; maxRetries: number }; - expect(data.database).toBe('postgres://localhost'); - expect(data.version).toBe('1.0.0'); - expect(data.maxRetries).toBe(3); - }); - - test('empty app state defaults to empty object', async () => { - const app = new Hono(); - - app.use('*', async (c, next) => { - c.set('app', {}); - await next(); - }); - - app.get('/empty', (c) => { - return c.json({ app: c.var.app }); - }); - - const res = await app.request('/empty'); - const data = (await res.json()) as { app: Record }; - expect(data.app).toEqual({}); - }); -}); - -describe('Hono Context Variables - PrivateVariables', () => { - test('private variables are accessible with type casting', async () => { - type PrivateEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - - const tracer = trace.getTracer('test'); - const waitUntilHandler = new WaitUntilHandler(tracer); - - app.use('*', async (c, next) => { - c.set('waitUntilHandler', waitUntilHandler); - c.set('routeId', 'route-123'); - c.set('agentIds', new Set(['agent1', 'agent2'])); - c.set('trigger', 'api' as const); - await next(); - }); - - app.get('/private', (c) => { - expect(c.var.waitUntilHandler).toBe(waitUntilHandler); - expect(c.var.routeId).toBe('route-123'); - expect(c.var.agentIds.has('agent1')).toBe(true); - expect(c.var.trigger).toBe('api'); - - return c.json({ success: true }); - }); - - const res = await app.request('/private'); - expect(res.status).toBe(200); - }); - - test('agentIds set is mutable', async () => { - type PrivateEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - - app.use('*', async (c, next) => { - c.set('agentIds', new Set()); - await next(); - }); - - app.post('/add-agent', (c) => { - c.var.agentIds.add('agent-xyz'); - c.var.agentIds.add('agent-abc'); - - return c.json({ - count: c.var.agentIds.size, - hasXyz: c.var.agentIds.has('agent-xyz'), - }); - }); - - const res = await app.request('/add-agent', { method: 'POST' }); - const data = (await res.json()) as { count: number; hasXyz: boolean }; - expect(data.count).toBe(2); - expect(data.hasXyz).toBe(true); - }); - - test('trigger type is constrained to TriggerType', async () => { - type PrivateEnv = { - Variables: PrivateVariables; - }; - - const app = new Hono(); - - app.use('*', async (c, next) => { - c.set('trigger', 'api' as const); - await next(); - }); - - app.get('/trigger', (c) => { - const trigger = c.var.trigger; - // Type is constrained to TriggerType - return c.json({ trigger }); - }); - - const res = await app.request('/trigger'); - const data = (await res.json()) as { trigger: string }; - expect(data.trigger).toBe('api'); - }); -}); - -describe('Hono Context Variables - Integration', () => { - test('all public and private variables work together', async () => { - type CombinedEnv = { - Variables: Variables<{ version: string }> & PrivateVariables; - }; - - const app = new Hono(); - - const logger = createMockLogger(); - const kv = createMockKeyValueStorage(); - - app.use('*', async (c, next) => { - // Public variables - c.set('logger', logger); - c.set('sessionId', 'session-1'); - c.set('kv', kv); - c.set('app', { version: '2.0.0' }); - - // Private variables - c.set('routeId', 'route-combined'); - c.set('agentIds', new Set(['agent-combined'])); - - await next(); - }); - - app.get('/combined', async (c) => { - // Access both public and private - c.var.logger.info('Combined test'); - await c.var.kv.set('store', 'key', 'val'); - c.var.agentIds.add('agent-new'); - - return c.json({ - sessionId: c.var.sessionId, - version: c.var.app.version, - routeId: c.var.routeId, - agentCount: c.var.agentIds.size, - }); - }); - - const res = await app.request('/combined'); - const data = (await res.json()) as { - sessionId: string; - version: string; - routeId: string; - agentCount: number; - }; - expect(data.sessionId).toBe('session-1'); - expect(data.version).toBe('2.0.0'); - expect(data.routeId).toBe('route-combined'); - expect(data.agentCount).toBe(2); - }); -}); diff --git a/packages/runtime/test/cors-trusted.test.ts b/packages/runtime/test/cors-trusted.test.ts deleted file mode 100644 index 5b5f78319..000000000 --- a/packages/runtime/test/cors-trusted.test.ts +++ /dev/null @@ -1,366 +0,0 @@ -/** - * Tests for CORS sameOrigin configuration and createTrustedCorsOrigin helper. - * - * Note: These tests use static config passed to createCorsMiddleware(), so they - * don't need to modify the global app config. We avoid touching the global - * __AGENTUITY_APP_CONFIG__ to prevent race conditions with other test files - * (like compression.test.ts) that do use the global config. - * - * Tests DO modify process.env variables, so we use beforeEach/afterEach to - * clean those up (env var changes are isolated to this file's tests). - */ - -import { expect, describe, beforeEach, afterEach, test } from 'bun:test'; -import { Hono } from 'hono'; -import { createCorsMiddleware } from '../src/middleware'; -import { createTrustedCorsOrigin } from '../src/cors'; - -function clearEnvVars() { - delete process.env.AGENTUITY_BASE_URL; - delete process.env.AGENTUITY_CLOUD_DOMAINS; - delete process.env.AUTH_TRUSTED_DOMAINS; -} - -describe('CORS sameOrigin Configuration', () => { - beforeEach(() => { - clearEnvVars(); - }); - - afterEach(() => { - clearEnvVars(); - }); - - describe('sameOrigin: true option', () => { - test('blocks requests from untrusted origins', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://evil.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBeNull(); - }); - - test('allows same-origin requests', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('http://localhost/test', { - method: 'GET', - headers: { Origin: 'http://localhost' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('http://localhost'); - }); - - test('allows origins from AGENTUITY_BASE_URL', async () => { - process.env.AGENTUITY_BASE_URL = 'https://myapp.agentuity.run'; - - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://myapp.agentuity.run' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://myapp.agentuity.run'); - }); - - test('allows origins from AGENTUITY_CLOUD_DOMAINS', async () => { - process.env.AGENTUITY_CLOUD_DOMAINS = 'https://d1234.agent.run,https://p5678.agent.run'; - - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://d1234.agent.run' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://d1234.agent.run'); - }); - - test('allows origins from AUTH_TRUSTED_DOMAINS', async () => { - process.env.AUTH_TRUSTED_DOMAINS = 'https://admin.myapp.com,https://app.myapp.com'; - - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://admin.myapp.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://admin.myapp.com'); - }); - - test('parses bare domains (adds https://)', async () => { - process.env.AGENTUITY_CLOUD_DOMAINS = 'myapp.example.com'; - - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://myapp.example.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://myapp.example.com'); - }); - }); - - describe('allowedOrigins option', () => { - test('allows explicitly specified origins', async () => { - const app = new Hono(); - app.use( - '*', - createCorsMiddleware({ - sameOrigin: true, - allowedOrigins: ['https://custom.myapp.com'], - }) - ); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://custom.myapp.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://custom.myapp.com'); - }); - - test('combines env vars with allowedOrigins', async () => { - process.env.AGENTUITY_BASE_URL = 'https://main.agentuity.run'; - - const app = new Hono(); - app.use( - '*', - createCorsMiddleware({ - sameOrigin: true, - allowedOrigins: ['https://extra.myapp.com'], - }) - ); - app.get('/test', (c) => c.json({ ok: true })); - - // Both should be allowed - const res1 = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://main.agentuity.run' }, - }); - expect(res1.headers.get('Access-Control-Allow-Origin')).toBe('https://main.agentuity.run'); - - const res2 = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://extra.myapp.com' }, - }); - expect(res2.headers.get('Access-Control-Allow-Origin')).toBe('https://extra.myapp.com'); - }); - - test('allowedOrigins without sameOrigin still reflects any origin', async () => { - const app = new Hono(); - app.use( - '*', - createCorsMiddleware({ - allowedOrigins: ['https://custom.myapp.com'], - }) - ); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://any-origin.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://any-origin.com'); - }); - }); - - describe('backwards compatibility', () => { - test('no options reflects any origin', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware()); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://any-origin.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://any-origin.com'); - }); - - test('sameOrigin: false reflects any origin', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: false })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://any-origin.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://any-origin.com'); - }); - - test('explicit origin option takes precedence over sameOrigin', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ origin: '*' })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://any-origin.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - }); - - describe('preflight OPTIONS requests', () => { - test('handles preflight with sameOrigin: true', async () => { - process.env.AGENTUITY_BASE_URL = 'https://myapp.agentuity.run'; - - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'https://myapp.agentuity.run', - 'Access-Control-Request-Method': 'POST', - }, - }); - - expect(res.status).toBe(204); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('https://myapp.agentuity.run'); - }); - - test('blocks preflight from untrusted origins', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ sameOrigin: true })); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'https://evil.com', - 'Access-Control-Request-Method': 'POST', - }, - }); - - expect(res.status).toBe(204); - expect(res.headers.get('Access-Control-Allow-Origin')).toBeNull(); - }); - }); -}); - -describe('Required headers always included', () => { - // These tests don't use env vars or global config - no cleanup needed - - test('custom allowHeaders still includes x-thread-id', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ allowHeaders: ['X-Custom-Header'] })); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'http://example.com', - 'Access-Control-Request-Method': 'POST', - 'Access-Control-Request-Headers': 'X-Custom-Header', - }, - }); - - expect(res.status).toBe(204); - const allowHeaders = res.headers.get('Access-Control-Allow-Headers'); - expect(allowHeaders).toContain('X-Custom-Header'); - expect(allowHeaders).toContain('x-thread-id'); - }); - - test('custom exposeHeaders still includes required runtime headers', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ exposeHeaders: ['X-Custom-Response'] })); - app.get('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'GET', - headers: { Origin: 'http://example.com' }, - }); - - expect(res.status).toBe(200); - const exposeHeaders = res.headers.get('Access-Control-Expose-Headers'); - expect(exposeHeaders).toContain('X-Custom-Response'); - expect(exposeHeaders).toContain('x-thread-id'); - expect(exposeHeaders).toContain('x-session-id'); - }); -}); - -describe('createTrustedCorsOrigin helper', () => { - // This test uses env vars, so clean them up - beforeEach(() => { - clearEnvVars(); - }); - - afterEach(() => { - clearEnvVars(); - }); - - test('can be used directly with Hono cors middleware', async () => { - process.env.AGENTUITY_BASE_URL = 'https://myapp.agentuity.run'; - - const { cors } = await import('hono/cors'); - const app = new Hono(); - - app.use( - '*', - cors({ - origin: createTrustedCorsOrigin({ - allowedOrigins: ['https://extra.example.com'], - }), - }) - ); - app.get('/test', (c) => c.json({ ok: true })); - - // Allowed from env - const res1 = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://myapp.agentuity.run' }, - }); - expect(res1.headers.get('Access-Control-Allow-Origin')).toBe('https://myapp.agentuity.run'); - - // Allowed from allowedOrigins - const res2 = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://extra.example.com' }, - }); - expect(res2.headers.get('Access-Control-Allow-Origin')).toBe('https://extra.example.com'); - - // Blocked - const res3 = await app.request('/test', { - method: 'GET', - headers: { Origin: 'https://evil.com' }, - }); - expect(res3.headers.get('Access-Control-Allow-Origin')).toBeNull(); - }); -}); diff --git a/packages/runtime/test/cors.test.ts b/packages/runtime/test/cors.test.ts deleted file mode 100644 index 89e753adf..000000000 --- a/packages/runtime/test/cors.test.ts +++ /dev/null @@ -1,266 +0,0 @@ -/** - * Tests for CORS middleware with lazy config resolution. - * Tests that createCorsMiddleware correctly uses config from createApp(). - * - * Note: These tests use static config passed to createCorsMiddleware(), so they - * don't need to modify the global app config. We avoid touching the global - * __AGENTUITY_APP_CONFIG__ to prevent race conditions with other test files - * (like compression.test.ts) that do use the global config. - */ - -import { expect, describe, test } from 'bun:test'; -import { Hono } from 'hono'; -import { createCorsMiddleware } from '../src/middleware'; - -describe('CORS Middleware', () => { - describe('Basic CORS behavior', () => { - test('middleware processes requests successfully', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware()); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect((data as { ok: boolean }).ok).toBe(true); - }); - - test('handles OPTIONS preflight requests', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware()); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'http://example.com', - 'Access-Control-Request-Method': 'POST', - 'Access-Control-Request-Headers': 'Content-Type', - }, - }); - - // OPTIONS should return 204 - expect(res.status).toBe(204); - // Should have Vary header - expect(res.headers.get('Vary')).toContain('Origin'); - }); - - test('reflects origin with origin: * config', async () => { - // Use explicit wildcard to test origin reflection - // (default behavior varies based on test runner context) - const app = new Hono(); - app.use('*', createCorsMiddleware({ origin: '*' })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'http://example.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - }); - - describe('Lazy config resolution', () => { - test('wildcard origin returns Access-Control-Allow-Origin: *', async () => { - // Use static config to test wildcard behavior - // (global config resolution varies by environment due to module isolation) - const app = new Hono(); - app.use('*', createCorsMiddleware({ origin: '*' })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'http://example.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - - test('static wildcard origin works', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ origin: '*' })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'http://example.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - - test('works without app config', async () => { - // No app config set - - const app = new Hono(); - app.use('*', createCorsMiddleware({ origin: '*' })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'http://example.com' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - - test('uses defaults when no config provided', async () => { - // No app config, no static config - test that middleware works - - const app = new Hono(); - // Use explicit wildcard since default behavior varies by test context - app.use('*', createCorsMiddleware({ origin: '*' })); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - headers: { Origin: 'http://localhost:3000' }, - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - }); - - describe('Config merging', () => { - test('static config options are applied', async () => { - const app = new Hono(); - // Test that static config options work - app.use('*', createCorsMiddleware({ credentials: true, maxAge: 3600 })); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'http://example.com', - 'Access-Control-Request-Method': 'POST', - }, - }); - - expect(res.status).toBe(204); - // Should have credentials from static config - expect(res.headers.get('Access-Control-Allow-Credentials')).toBe('true'); - // Should have maxAge from static config - expect(res.headers.get('Access-Control-Max-Age')).toBe('3600'); - }); - - test('static config overrides defaults', async () => { - const app = new Hono(); - // Static config overrides default maxAge (600) - app.use('*', createCorsMiddleware({ maxAge: 7200 })); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'http://example.com', - 'Access-Control-Request-Method': 'POST', - }, - }); - - expect(res.status).toBe(204); - // Static config wins over defaults - expect(res.headers.get('Access-Control-Max-Age')).toBe('7200'); - }); - }); - - describe('Custom headers', () => { - test('custom allowHeaders from static config', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware({ allowHeaders: ['X-Custom-Header', 'Authorization'] })); - app.post('/api', (c) => c.json({ ok: true })); - - const res = await app.request('/api', { - method: 'OPTIONS', - headers: { - Origin: 'http://example.com', - 'Access-Control-Request-Method': 'POST', - 'Access-Control-Request-Headers': 'X-Custom-Header', - }, - }); - - expect(res.status).toBe(204); - const allowHeaders = res.headers.get('Access-Control-Allow-Headers'); - expect(allowHeaders).toContain('X-Custom-Header'); - expect(allowHeaders).toContain('Authorization'); - }); - }); - - describe('Multiple middleware instances', () => { - test('different paths can have different configs', async () => { - const app = new Hono(); - - // Public API - allow all origins - app.use('/public/*', createCorsMiddleware({ origin: '*' })); - - // Private API - also allow all (for testing) - app.use('/private/*', createCorsMiddleware({ origin: '*', maxAge: 1800 })); - - app.get('/public/data', (c) => c.json({ public: true })); - app.get('/private/data', (c) => c.json({ private: true })); - - const publicRes = await app.request('/public/data', { - method: 'GET', - headers: { Origin: 'http://anyone.com' }, - }); - expect(publicRes.status).toBe(200); - expect(publicRes.headers.get('Access-Control-Allow-Origin')).toBe('*'); - - const privateRes = await app.request('/private/data', { - method: 'GET', - headers: { Origin: 'http://anyone.com' }, - }); - expect(privateRes.status).toBe(200); - expect(privateRes.headers.get('Access-Control-Allow-Origin')).toBe('*'); - }); - }); - - describe('Response preservation', () => { - test('preserves response status', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware()); - - app.get('/ok', (c) => c.json({ ok: true }, 200)); - app.get('/created', (c) => c.json({ created: true }, 201)); - app.get('/error', (c) => c.json({ error: true }, 500)); - - const okRes = await app.request('/ok', { method: 'GET' }); - expect(okRes.status).toBe(200); - - const createdRes = await app.request('/created', { method: 'GET' }); - expect(createdRes.status).toBe(201); - - const errorRes = await app.request('/error', { method: 'GET' }); - expect(errorRes.status).toBe(500); - }); - - test('preserves response body', async () => { - const app = new Hono(); - app.use('*', createCorsMiddleware()); - - app.get('/data', (c) => - c.json({ - users: [ - { id: 1, name: 'Alice' }, - { id: 2, name: 'Bob' }, - ], - }) - ); - - const res = await app.request('/data', { method: 'GET' }); - expect(res.status).toBe(200); - - const data = (await res.json()) as { users: Array<{ id: number; name: string }> }; - expect(data.users).toHaveLength(2); - expect(data.users[0].name).toBe('Alice'); - }); - }); -}); diff --git a/packages/runtime/test/cron.test.ts b/packages/runtime/test/cron.test.ts deleted file mode 100644 index fa944ff2f..000000000 --- a/packages/runtime/test/cron.test.ts +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Unit tests for the cron() route handler. - * - * Verifies that: - * - cron() returns a handler tagged with route-meta symbol - * - The schedule expression is preserved in route metadata - * - Both overloads (with and without options) work correctly - * - POST-only enforcement works - * - Auth verification works when enabled - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import { cron } from '../src/handlers/cron'; -import { ROUTE_META, getRouteMeta } from '../src/handlers/_route-meta'; - -describe('cron() handler', () => { - describe('route metadata tagging', () => { - test('tags handler with type "cron" and schedule expression', () => { - const handler = cron('0 9 * * 1', { auth: false }, async (c) => { - return c.text('OK'); - }); - - const meta = (handler as any)[ROUTE_META]; - expect(meta).toBeDefined(); - expect(meta.type).toBe('cron'); - expect(meta.schedule).toBe('0 9 * * 1'); - }); - - test('preserves complex cron expressions', () => { - const handler = cron('*/5 * * * *', { auth: false }, async (c) => { - return c.text('OK'); - }); - - const meta = (handler as any)[ROUTE_META]; - expect(meta.schedule).toBe('*/5 * * * *'); - }); - - test('preserves daily-at-midnight expression', () => { - const handler = cron('0 0 * * *', { auth: true }, async (c) => { - return c.text('OK'); - }); - - const meta = (handler as any)[ROUTE_META]; - expect(meta.type).toBe('cron'); - expect(meta.schedule).toBe('0 0 * * *'); - }); - - test('deprecated overload (no options) also tags schedule', () => { - const handler = cron('30 2 * * 0', async (c) => { - return c.text('OK'); - }); - - const meta = (handler as any)[ROUTE_META]; - expect(meta).toBeDefined(); - expect(meta.type).toBe('cron'); - expect(meta.schedule).toBe('30 2 * * 0'); - }); - - test('getRouteMeta() returns schedule from cron handler', () => { - const handler = cron('0 12 * * *', { auth: false }, async (c) => { - return c.text('OK'); - }); - - const meta = getRouteMeta(handler); - expect(meta).toBeDefined(); - expect(meta!.type).toBe('cron'); - expect(meta!.schedule).toBe('0 12 * * *'); - }); - }); - - describe('handler behavior', () => { - test('handler executes on POST request', async () => { - const app = new Hono(); - app.post( - '/scheduled', - cron('0 9 * * 1', { auth: false }, async (c) => { - return c.json({ status: 'executed' }); - }) - ); - - const res = await app.request('/scheduled', { method: 'POST' }); - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ status: 'executed' }); - }); - - test('handler rejects non-POST methods', async () => { - const app = new Hono(); - // Register on ALL methods so the route matches GET - app.all( - '/scheduled', - cron('0 9 * * 1', { auth: false }, async (c) => { - return c.text('OK'); - }) - ); - - const res = await app.request('/scheduled', { method: 'GET' }); - // The handler throws an error for non-POST, which Hono converts to 500 - expect(res.status).toBe(500); - }); - }); - - describe('route discovery integration', () => { - test('schedule is readable from Hono router.routes', () => { - const app = new Hono(); - app.post( - '/daily', - cron('0 0 * * *', { auth: true }, async (c) => { - return c.text('OK'); - }) - ); - - // Simulate what route-discovery.ts does: iterate router.routes - // and read the route-meta symbol from each handler - const cronRoutes = app.routes - .filter((r) => { - const meta = (r.handler as any)[Symbol.for('agentuity:route-meta')]; - return meta?.type === 'cron'; - }) - .map((r) => { - const meta = (r.handler as any)[Symbol.for('agentuity:route-meta')]; - return { - path: r.path, - method: r.method, - type: meta.type, - schedule: meta.schedule, - }; - }); - - expect(cronRoutes).toHaveLength(1); - expect(cronRoutes[0]).toEqual({ - path: '/daily', - method: 'POST', - type: 'cron', - schedule: '0 0 * * *', - }); - }); - - test('schedule produces correct config.expression for metadata', () => { - const handler = cron('0 9 * * 1', { auth: true }, async (c) => { - return c.text('OK'); - }); - - // Simulate what route-discovery.ts does when building config - const meta = (handler as any)[Symbol.for('agentuity:route-meta')]; - const config = meta?.schedule ? { expression: meta.schedule } : undefined; - - expect(config).toEqual({ expression: '0 9 * * 1' }); - }); - }); -}); diff --git a/packages/runtime/test/devmode-listener-leak.test.ts b/packages/runtime/test/devmode-listener-leak.test.ts deleted file mode 100644 index 92f7356ce..000000000 --- a/packages/runtime/test/devmode-listener-leak.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { Hono } from 'hono'; -import { registerDevModeRoutes } from '../src/devmode'; - -describe('Dev Mode Event Listener Leaks', () => { - let initialListenerCount: number; - let originalMaxListeners: number; - - beforeEach(() => { - initialListenerCount = process.listenerCount('SIGINT'); - originalMaxListeners = process.getMaxListeners(); - }); - - afterEach(() => { - // Clean up any listeners added during tests - const listeners = process.listeners('SIGINT'); - listeners.forEach((listener) => { - process.removeListener('SIGINT', listener); - }); - process.setMaxListeners(originalMaxListeners); - }); - - test('registerDevModeRoutes should not leak SIGINT listeners on multiple calls', () => { - const router = new Hono(); - - // Call registerDevModeRoutes multiple times (simulating multiple restarts) - for (let i = 0; i < 15; i++) { - registerDevModeRoutes(router); - } - - const finalListenerCount = process.listenerCount('SIGINT'); - const listenersAdded = finalListenerCount - initialListenerCount; - - // Should only add 1 listener total, not 15 - expect(listenersAdded).toBeLessThanOrEqual(1); - }); - - test('registerDevModeRoutes should clean up listener when called again', () => { - const router1 = new Hono(); - const router2 = new Hono(); - - registerDevModeRoutes(router1); - const afterFirst = process.listenerCount('SIGINT'); - - registerDevModeRoutes(router2); - const afterSecond = process.listenerCount('SIGINT'); - - // Second call should not add another listener - expect(afterSecond).toBe(afterFirst); - }); -}); diff --git a/packages/runtime/test/evals.test.ts b/packages/runtime/test/evals.test.ts deleted file mode 100644 index 7cfbc487a..000000000 --- a/packages/runtime/test/evals.test.ts +++ /dev/null @@ -1,488 +0,0 @@ -/** - * Unit tests for agent eval system. - * Tests eval creation, execution, and result tracking. - */ - -import { test, expect, describe } from 'bun:test'; -import { createAgent, runInAgentContext } from '../src/agent'; -import { z } from 'zod'; -import { TestAgentContext } from './helpers/test-context'; - -describe('Eval Creation', () => { - test('createEval with input and output schema', () => { - const agent = createAgent('eval-agent', { - schema: { - input: z.object({ x: z.number() }), - output: z.number(), - }, - handler: async (_ctx, input) => input.x * 2, - }); - - const evalFn = agent.createEval('doubles input', { - description: 'Checks if output is double of input', - handler: async (_ctx, input, output) => ({ - success: true, - passed: output === input.x * 2, - metadata: { reason: 'checked if output is double of input' }, - }), - }); - - expect(evalFn).toBeDefined(); - expect(evalFn.metadata.name).toBe('doubles input'); - }); - - test('createEval with no schema', () => { - const agent = createAgent('no-schema-agent', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => 'result', - }); - - const evalFn = agent.createEval('test eval', { - description: 'Basic test evaluation', - handler: async (_ctx) => ({ - success: true, - passed: true, - metadata: { reason: 'test passed' }, - }), - }); - - expect(evalFn).toBeDefined(); - expect(evalFn.metadata.name).toBe('test eval'); - }); - - test('createEval returns score', () => { - const agent = createAgent('score-agent', { - schema: { - input: z.object({ text: z.string() }), - output: z.number(), - }, - handler: async (_ctx, input) => input.text.length, - }); - - const evalFn = agent.createEval('length scorer', { - description: 'Scores based on output length', - handler: async (_ctx, input, output) => ({ - success: true, - score: output / 10, - metadata: { reason: 'scored based on length', inputLength: input.text.length }, - }), - }); - - expect(evalFn).toBeDefined(); - expect(evalFn.metadata.name).toBe('length scorer'); - }); -}); - -describe('Eval Execution', () => { - test('eval runs after agent completes', async () => { - let evalRan = false; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let evalInput: any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let evalOutput: any; - - const agent = createAgent('eval-test', { - schema: { - input: z.object({ value: z.number() }), - output: z.number(), - }, - handler: async (_ctx, input) => input.value * 2, - }); - - agent.createEval('check doubling', { - description: 'Verifies output is double the input', - handler: async (_ctx, input, output) => { - evalRan = true; - evalInput = input; - evalOutput = output; - return { - success: true, - passed: output === input.value * 2, - metadata: { reason: 'checked doubling' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - const result = await runInAgentContext(ctx, agent, { value: 5 }); - - expect(result).toBe(10); - - // Wait for background tasks (evals run in waitUntil) - await ctx.waitForBackgroundTasks(); - - expect(evalRan).toBe(true); - expect(evalInput).toEqual({ value: 5 }); - expect(evalOutput).toBe(10); - }); - - test('eval can return boolean (pass/fail)', async () => { - let evalResult: boolean | undefined; - - const agent = createAgent('pass-fail-agent', { - schema: { - input: z.object({ x: z.number() }), - output: z.boolean(), - }, - handler: async (_ctx, input) => input.x > 0, - }); - - agent.createEval('check positive', { - description: 'Checks if result is positive', - handler: async (_ctx, _input, output) => { - evalResult = output; - return { - success: true, - passed: output === true, - metadata: { reason: 'checked positive' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent, { x: 5 }); - await ctx.waitForBackgroundTasks(); - - expect(evalResult).toBe(true); - }); - - test('eval can return score object', async () => { - let evalScore: number | undefined; - - const agent = createAgent('score-agent', { - schema: { - input: z.object({ text: z.string() }), - output: z.number(), - }, - handler: async (_ctx, input) => input.text.length, - }); - - agent.createEval('quality score', { - description: 'Calculates quality score from output length', - handler: async (_ctx, _input, output) => { - evalScore = output / 10; - return { - success: true, - score: evalScore, - metadata: { reason: 'quality score', length: output }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent, { text: 'hello world' }); - await ctx.waitForBackgroundTasks(); - - expect(evalScore).toBe(1.1); // 11 chars / 10 - }); -}); - -describe('Multiple Evals', () => { - test('multiple evals run in order', async () => { - const executionOrder: number[] = []; - - const agent = createAgent('multi-eval', { - schema: { - input: z.number(), - output: z.number(), - }, - handler: async (_ctx, input) => input * 2, - }); - - agent.createEval('eval 1', { - description: 'First evaluation', - handler: async (_ctx, _input, _output) => { - executionOrder.push(1); - return { - success: true, - passed: true, - metadata: { reason: 'eval 1' }, - }; - }, - }); - - agent.createEval('eval 2', { - description: 'Second evaluation', - handler: async (_ctx, _input, _output) => { - executionOrder.push(2); - return { - success: true, - passed: true, - metadata: { reason: 'eval 2' }, - }; - }, - }); - - agent.createEval('eval 3', { - description: 'Third evaluation', - handler: async (_ctx, _input, _output) => { - executionOrder.push(3); - return { - success: true, - passed: true, - metadata: { reason: 'eval 3' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent, 5); - await ctx.waitForBackgroundTasks(); - - expect(executionOrder).toEqual([1, 2, 3]); - }); - - test('eval failure does not stop other evals', async () => { - const results: string[] = []; - - const agent = createAgent('error-eval', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => 'result', - }); - - agent.createEval('eval 1', { - description: 'First evaluation', - handler: async (_ctx) => { - results.push('eval1'); - return { - success: true, - passed: true, - metadata: { reason: 'eval 1 passed' }, - }; - }, - }); - - agent.createEval('eval 2 - fails', { - description: 'Second evaluation that fails', - handler: async (_ctx) => { - results.push('eval2'); - throw new Error('Eval error'); - }, - }); - - agent.createEval('eval 3', { - description: 'Third evaluation', - handler: async (_ctx) => { - results.push('eval3'); - return { - success: true, - passed: true, - metadata: { reason: 'eval 3 passed' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - // All evals should run even if one fails - expect(results).toContain('eval1'); - expect(results).toContain('eval2'); - expect(results).toContain('eval3'); - }); -}); - -describe('Eval Metadata', () => { - test('eval has metadata with name', () => { - const agent = createAgent('meta-agent', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => 'result', - }); - - const evalFn = agent.createEval('my eval', { - description: 'Test evaluation', - handler: async (_ctx) => ({ - success: true, - passed: true, - metadata: { reason: 'test' }, - }), - }); - - expect(evalFn.metadata).toBeDefined(); - expect(evalFn.metadata.name).toBe('my eval'); - }); - - test('eval metadata includes identifier when provided via build metadata', () => { - const agent = createAgent('id-agent', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => 'result', - }); - - // Identifier is populated at build time from agentuity.metadata.json - // In unit tests without build metadata, identifier is undefined - const evalFn = agent.createEval('test-eval', { - description: 'Identifier test', - handler: async (_ctx) => ({ - passed: true, - reason: 'test', - }), - metadata: { - identifier: 'eval_test123', - }, - }); - - expect(evalFn.metadata.identifier).toBe('eval_test123'); - }); -}); - -describe('Eval with No Input/Output', () => { - test('eval works with no input schema', async () => { - let evalRan = false; - - const agent = createAgent('no-input-eval', { - schema: { - output: z.string(), - }, - handler: async (_ctx) => 'result', - }); - - agent.createEval('output check', { - description: 'Validates output value', - handler: async (_ctx, output) => { - evalRan = true; - return { - success: true, - passed: output === 'result', - metadata: { reason: 'output check' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - expect(evalRan).toBe(true); - }); - - test('eval works with no output schema', async () => { - let evalRan = false; - - const agent = createAgent('no-output-eval', { - schema: { - input: z.string(), - }, - handler: async (_ctx, _input) => { - // No return value - }, - }); - - agent.createEval('input check', { - description: 'Validates input value', - handler: async (_ctx, input) => { - evalRan = true; - return { - success: true, - passed: input === 'test', - metadata: { reason: 'input check' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent, 'test'); - await ctx.waitForBackgroundTasks(); - - expect(evalRan).toBe(true); - }); -}); - -describe('Eval Result Types', () => { - test('eval returns boolean true', async () => { - let passed: boolean | undefined; - - const agent = createAgent('bool-eval', { - schema: { - output: z.number(), - }, - handler: async (_ctx) => 42, - }); - - agent.createEval('pass test', { - description: 'Test that passes', - handler: async (_ctx, output) => { - passed = output === 42; - return { - success: true, - passed, - metadata: { reason: 'checked value' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - expect(passed).toBe(true); - }); - - test('eval returns boolean false', async () => { - let passed: boolean | undefined; - - const agent = createAgent('bool-fail-eval', { - schema: { - output: z.number(), - }, - handler: async (_ctx) => 41, - }); - - agent.createEval('fail test', { - description: 'Test that fails', - handler: async (_ctx, output) => { - passed = output === 42; - return { - success: true, - passed, - metadata: { reason: 'checked value' }, - }; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - expect(passed).toBe(false); - }); - - test('eval returns score with metadata', async () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let scoreResult: any; - - const agent = createAgent('score-eval', { - schema: { - input: z.object({ text: z.string() }), - output: z.number(), - }, - handler: async (_ctx, input) => input.text.length, - }); - - agent.createEval('quality scorer', { - description: 'Scores output quality', - handler: async (_ctx, input, output) => { - scoreResult = { - score: output / 100, - metadata: { wordCount: input.text.split(' ').length }, - }; - return scoreResult; - }, - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent, { text: 'hello beautiful world' }); - await ctx.waitForBackgroundTasks(); - - expect(scoreResult.score).toBe(0.21); // 21 chars / 100 - expect(scoreResult.metadata.wordCount).toBe(3); - }); -}); diff --git a/packages/runtime/test/events.test.ts b/packages/runtime/test/events.test.ts deleted file mode 100644 index da5da8a8a..000000000 --- a/packages/runtime/test/events.test.ts +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Unit tests for agent and app event system. - * Tests event listeners, event firing, and event propagation. - */ - -import { test, expect, describe } from 'bun:test'; -import { createAgent, runInAgentContext } from '../src/agent'; -import { TestAgentContext } from './helpers/test-context'; - -describe('Agent Event Listeners', () => { - test('agent fires started event', async () => { - let startedFired = false; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let capturedAgent: any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let capturedContext: any; - - const agent = createAgent('event-test', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('started', (eventName, ag, ctx) => { - startedFired = true; - capturedAgent = ag; - capturedContext = ctx; - expect(eventName).toBe('started'); - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(startedFired).toBe(true); - expect(capturedAgent).toBeDefined(); - expect(capturedContext).toBeDefined(); - }); - - test('agent fires completed event', async () => { - let completedFired = false; - - const agent = createAgent('event-test', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('completed', (eventName, _ag, _ctx) => { - completedFired = true; - expect(eventName).toBe('completed'); - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(completedFired).toBe(true); - }); - - test('agent fires errored event', async () => { - let erroredFired = false; - let capturedError: Error | undefined; - - const agent = createAgent('error-test', { - handler: async (_ctx) => { - throw new Error('Test error'); - }, - }); - - agent.addEventListener('errored', (eventName, _ag, _ctx, error) => { - erroredFired = true; - capturedError = error; - expect(eventName).toBe('errored'); - }); - - const ctx = new TestAgentContext(); - - try { - await runInAgentContext(ctx, agent); - } catch (_e) { - // Expected to throw - } - - expect(erroredFired).toBe(true); - expect(capturedError).toBeDefined(); - expect(capturedError?.message).toBe('Test error'); - }); - - test('multiple event listeners fire in order', async () => { - const executionOrder: number[] = []; - - const agent = createAgent('multi-listener', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('started', (_eventName, _ag, _ctx) => { - executionOrder.push(1); - }); - - agent.addEventListener('started', (_eventName, _ag, _ctx) => { - executionOrder.push(2); - }); - - agent.addEventListener('completed', (_eventName, _ag, _ctx) => { - executionOrder.push(3); - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(executionOrder).toEqual([1, 2, 3]); - }); - - test('removeEventListener removes specific callback', async () => { - let callback1Fired = false; - let callback2Fired = false; - - const agent = createAgent('remove-test', { - handler: async (_ctx) => {}, - }); - - const callback1 = (_eventName: string, _ag: unknown, _ctx: unknown) => { - callback1Fired = true; - }; - - const callback2 = (_eventName: string, _ag: unknown, _ctx: unknown) => { - callback2Fired = true; - }; - - agent.addEventListener('started', callback1); - agent.addEventListener('started', callback2); - agent.removeEventListener('started', callback1); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(callback1Fired).toBe(false); // Removed, should not fire - expect(callback2Fired).toBe(true); // Still registered - }); - - test('event listener can be async', async () => { - let asyncCompleted = false; - - const agent = createAgent('async-listener', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('completed', async (_eventName, _ag, _ctx) => { - await new Promise((resolve) => setTimeout(resolve, 10)); - asyncCompleted = true; - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(asyncCompleted).toBe(true); - }); -}); - -describe('Event Listener Context Access', () => { - test('started event receives correct context', async () => { - let receivedSessionId: string | undefined; - let receivedAgentMetadata: { name?: string } | undefined; - - const agent = createAgent('context-test', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('started', (_eventName, ag, ctx) => { - receivedSessionId = ctx.sessionId; - receivedAgentMetadata = ag.metadata; - }); - - const ctx = new TestAgentContext({ - sessionId: 'test-session-123', - }); - await runInAgentContext(ctx, agent); - - expect(receivedSessionId).toBe('test-session-123'); - expect(receivedAgentMetadata?.name).toBe('context-test'); // Get name from agent metadata - }); - - test('event listener can access agent metadata', async () => { - let agentName: string | undefined; - - const agent = createAgent('metadata-test', { - description: 'Test description', - handler: async (_ctx) => {}, - }); - - agent.addEventListener('completed', (_eventName, ag, _ctx) => { - agentName = ag.metadata.name; - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(agentName).toBe('metadata-test'); - }); -}); - -describe('Event Error Handling', () => { - test('error in started listener is caught and logged', async () => { - const agent = createAgent('error-listener', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('started', (_eventName, _ag, _ctx) => { - throw new Error('Listener error'); - }); - - const ctx = new TestAgentContext(); - - // Should not throw - errors are caught and logged - await runInAgentContext(ctx, agent); - }); - - test('error in completed listener is caught and logged', async () => { - const agent = createAgent('error-listener', { - handler: async (_ctx) => {}, - }); - - agent.addEventListener('completed', (_eventName, _ag, _ctx) => { - throw new Error('Listener error'); - }); - - const ctx = new TestAgentContext(); - - // Should not throw - errors are caught and logged - await runInAgentContext(ctx, agent); - }); -}); - -describe('Event Execution Order', () => { - test('started fires before handler, completed fires after', async () => { - const executionOrder: string[] = []; - - const agent = createAgent('order-test', { - handler: async (_ctx) => { - executionOrder.push('handler'); - }, - }); - - agent.addEventListener('started', (_eventName, _ag, _ctx) => { - executionOrder.push('started'); - }); - - agent.addEventListener('completed', (_eventName, _ag, _ctx) => { - executionOrder.push('completed'); - }); - - const ctx = new TestAgentContext(); - await runInAgentContext(ctx, agent); - - expect(executionOrder).toEqual(['started', 'handler', 'completed']); - }); - - test('errored fires instead of completed on error', async () => { - const events: string[] = []; - - const agent = createAgent('error-order', { - handler: async (_ctx) => { - events.push('handler'); - throw new Error('Handler error'); - }, - }); - - agent.addEventListener('started', (_eventName, _ag, _ctx) => { - events.push('started'); - }); - - agent.addEventListener('completed', (_eventName, _ag, _ctx) => { - events.push('completed'); - }); - - agent.addEventListener('errored', (_eventName, _ag, _ctx, _error) => { - events.push('errored'); - }); - - const ctx = new TestAgentContext(); - - try { - await runInAgentContext(ctx, agent); - } catch (_e) { - // Expected - } - - expect(events).toEqual(['started', 'handler', 'errored']); - expect(events).not.toContain('completed'); - }); -}); diff --git a/packages/runtime/test/helpers/mock-context.ts b/packages/runtime/test/helpers/mock-context.ts deleted file mode 100644 index ac2adb122..000000000 --- a/packages/runtime/test/helpers/mock-context.ts +++ /dev/null @@ -1,216 +0,0 @@ -/** - * Mock AgentContext factory for unit testing agents. - * Provides a fully functional context without requiring a real server. - */ - -import type { AgentContext, AgentRegistry, AgentRuntimeState } from '../../src/agent'; -import type { Logger } from '../../src/logger'; -import type { Thread, Session } from '../../src/session'; -import { trace, type Tracer } from '@opentelemetry/api'; -import { - createMockKeyValueStorage, - createMockStreamStorage, - createMockVectorStorage, -} from './mock-services'; -import { AGENT_RUNTIME } from '../../src/_config'; - -export interface CreateMockContextOptions> { - /** - * Agent-specific config (from setup function) - */ - config?: TConfig; - - /** - * App-level state (from createApp setup) - */ - app?: TAppState; - - /** - * Mock logger (defaults to silent logger) - */ - logger?: Logger; - - /** - * Session ID (defaults to 'mock-session') - */ - sessionId?: string; - - /** - * Agent name (defaults to 'mock-agent') - */ - agentName?: string; -} - -/** - * Create a mock logger that doesn't output anything - */ -function createMockLogger(): Logger { - const noop = () => {}; - return { - trace: noop, - debug: noop, - info: noop, - warn: noop, - error: noop, - fatal: ((msg: string) => { - throw new Error(msg); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - }) as any, - child: () => createMockLogger(), - }; -} - -/** - * Create a mock tracer - */ -function createMockTracer(): Tracer { - return trace.getTracer('mock-tracer'); -} - -/** - * Create a mock thread - */ -function createMockThread(): Thread { - const thread: Thread = { - id: 'mock-thread', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => thread.state.size === 0, - }; - return thread; -} - -/** - * Create a mock session - */ -function createMockSession(): Session { - return { - id: 'mock-session', - thread: createMockThread(), - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; -} - -/** - * Create a mock AgentContext for testing. - * - * This provides all the services and context an agent needs, - * but uses in-memory implementations that don't require external services. - * - * @example - * ```typescript - * const ctx = createMockContext(); - * await ctx.kv.set('test-store', 'key', 'value'); - * const result = await myAgent.run({ input: 'test' }); - * ``` - */ -export function createMockContext>( - options?: CreateMockContextOptions - // eslint-disable-next-line @typescript-eslint/no-explicit-any -): AgentContext { - const waitUntilPromises: Promise[] = []; - - // Create a mock runtime state - const runtime: AgentRuntimeState = { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - agents: new Map(), - agentConfigs: new Map(), - // eslint-disable-next-line @typescript-eslint/no-explicit-any - agentEventListeners: new WeakMap(), - }; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const context: AgentContext = { - // Core identification - sessionId: options?.sessionId ?? 'mock-session', - agentName: options?.agentName ?? 'mock-agent', - - // Logging & tracing - logger: options?.logger ?? createMockLogger(), - tracer: createMockTracer(), - - // Storage services (in-memory mocks) - kv: createMockKeyValueStorage(), - stream: createMockStreamStorage(), - vector: createMockVectorStorage(), - - // State - state: new Map(), - - // Session & Thread - thread: createMockThread(), - session: createMockSession(), - - // App & Config - app: (options?.app ?? {}) as TAppState, - config: (options?.config ?? {}) as TConfig, - - // WaitUntil handler - waitUntil: (promise: Promise | (() => void | Promise)) => { - if (typeof promise === 'function') { - const result = promise(); - if (result instanceof Promise) { - waitUntilPromises.push(result); - } - } else { - waitUntilPromises.push(promise); - } - }, - - // Runtime symbol - [AGENT_RUNTIME]: runtime, - }; - - // Add helper to wait for all background tasks (useful in tests) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (context as any).__waitForBackgroundTasks = async () => { - await Promise.all(waitUntilPromises); - }; - - return context; -} - -/** - * Type-safe helper to access the waitForBackgroundTasks method - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function waitForBackgroundTasks(ctx: AgentContext) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const anyCtx = ctx as any; - if (anyCtx.__waitForBackgroundTasks) { - await anyCtx.__waitForBackgroundTasks(); - } -} - -/** - * Run an agent with a mock context. - * This sets up the AsyncLocalStorage context so agent.run() works. - * - * @example - * ```typescript - * const result = await runAgentWithContext(myAgent, createMockContext()); - * ``` - */ -export async function runAgentWithContext( - agent: { run: (input?: TInput) => Promise }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ctx: AgentContext, - input?: TInput -): Promise { - const { getAgentAsyncLocalStorage } = await import('../../src/_context'); - const storage = getAgentAsyncLocalStorage(); - - return storage.run(ctx, async () => { - if (input !== undefined) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return await (agent.run as any)(input); - } else { - return await agent.run(); - } - }); -} diff --git a/packages/runtime/test/helpers/mock-services.ts b/packages/runtime/test/helpers/mock-services.ts deleted file mode 100644 index fd00958a2..000000000 --- a/packages/runtime/test/helpers/mock-services.ts +++ /dev/null @@ -1,384 +0,0 @@ -/** - * Mock service implementations for unit testing. - * - * These provide in-memory implementations that behave like real Agentuity services - * but don't require external infrastructure (Redis, PostgreSQL, S3, etc.). - * - * All mock services are automatically created in TestAgentContext, but you can also - * use them directly for more control. - * - * @module mock-services - */ - -import type { - KeyValueStorage, - StreamStorage, - VectorStorage, - DataResult, - VectorUpsertParams, - VectorUpsertResult, - VectorResult, - VectorSearchParams, - VectorSearchResult, - VectorSearchResultWithDocument, - KeyValueStats, - Stream, - ListStreamsResponse, - CreateStreamProps, -} from '@agentuity/core'; - -/** - * Create a mock KeyValueStorage implementation with in-memory Map-based storage. - */ -export function createMockKeyValueStorage(): KeyValueStorage { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const stores = new Map>(); - - return { - async set(store: string, key: string, value: unknown, _options?: { ttl?: number }) { - if (!stores.has(store)) { - stores.set(store, new Map()); - } - stores.get(store)!.set(key, value); - }, - - async get(name: string, key: string): Promise> { - const storeData = stores.get(name); - if (!storeData || !storeData.has(key)) { - return { exists: false, data: undefined as never }; - } - return { - exists: true, - data: storeData.get(key) as T, - contentType: 'application/json', - }; - }, - - async delete(store: string, key: string) { - const storeData = stores.get(store); - if (storeData) { - storeData.delete(key); - } - }, - - async getKeys(store: string) { - const storeData = stores.get(store); - if (!storeData) return []; - return Array.from(storeData.keys()); - }, - - async search(store: string, keyword: string) { - const storeData = stores.get(store); - if (!storeData) return {}; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const results: Record = {}; - for (const [key, value] of storeData.entries()) { - if (key.includes(keyword) || JSON.stringify(value).includes(keyword)) { - results[key] = value; - } - } - return results; - }, - - async getStats(name: string): Promise { - const storeData = stores.get(name); - return { - sum: 0, - count: storeData?.size ?? 0, - }; - }, - - async getNamespaces() { - return Array.from(stores.keys()); - }, - - async getAllStats() { - const stats: Record = {}; - for (const name of stores.keys()) { - const storeData = stores.get(name); - stats[name] = { - sum: 0, - count: storeData?.size ?? 0, - }; - } - return stats; - }, - - async deleteNamespace(name: string) { - stores.delete(name); - }, - - async createNamespace(_name: string) { - // No-op for mock - }, - }; -} - -/** - * Create a mock StreamStorage implementation. - */ -export function createMockStreamStorage(): StreamStorage { - const streams = new Map< - string, - { - id: string; - url: string; - contentType: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - metadata: any; - data: Uint8Array[]; - } - >(); - - return { - async create(_name: string, props?: CreateStreamProps): Promise { - const id = `stream-${Date.now()}`; - const url = `https://mock-stream.local/${id}`; - - const streamData = { - id, - url, - contentType: props?.contentType ?? 'application/octet-stream', - metadata: props?.metadata ?? {}, - data: [] as Uint8Array[], - }; - - streams.set(id, streamData); - - let bytesWritten = 0; - let closed = false; - - const mockStream: Stream = { - id, - url, - get bytesWritten() { - return bytesWritten; - }, - get compressed() { - return props?.compress ?? false; - }, - async write(chunk: string | Uint8Array | ArrayBuffer | object) { - if (closed) { - throw new Error('Stream is closed'); - } - let bytes: Uint8Array; - if (typeof chunk === 'string') { - bytes = new TextEncoder().encode(chunk); - } else if (chunk instanceof ArrayBuffer) { - bytes = new Uint8Array(chunk); - } else if (chunk instanceof Uint8Array) { - bytes = chunk; - } else { - bytes = new TextEncoder().encode(JSON.stringify(chunk)); - } - streamData.data.push(bytes); - bytesWritten += bytes.length; - }, - async close() { - closed = true; - }, - getReader() { - return new ReadableStream({ - start(controller) { - for (const chunk of streamData.data) { - controller.enqueue(chunk); - } - if (closed) { - controller.close(); - } - }, - }); - }, - locked: false, - async abort() {}, - getWriter() { - throw new Error('Not implemented'); - }, - }; - - return mockStream; - }, - - async get() { - throw new Error('Not implemented'); - }, - - async list(params?: { limit?: number }): Promise { - const streamArray = Array.from(streams.values()).slice(0, params?.limit ?? 100); - return { - success: true, - streams: streamArray.map((s) => ({ - id: s.id, - name: s.id, - url: s.url, - metadata: s.metadata, - sizeBytes: s.data.reduce((sum, chunk) => sum + chunk.length, 0), - })), - total: streams.size, - }; - }, - - async download(_id: string) { - return new ReadableStream(); - }, - - async delete(_id: string) { - // No-op for mock - }, - }; -} - -/** - * Create a mock VectorStorage implementation. - */ -export function createMockVectorStorage(): VectorStorage { - const stores = new Map< - string, - Map< - string, - { - key: string; - vector: number[]; - document: string | null; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - metadata: any; - } - > - >(); - - return { - async upsert( - name: string, - ...documents: VectorUpsertParams[] - ): Promise { - if (!stores.has(name)) { - stores.set(name, new Map()); - } - const store = stores.get(name)!; - - const results: VectorUpsertResult[] = []; - for (const doc of documents) { - const vector = - 'embeddings' in doc && doc.embeddings - ? doc.embeddings - : [Math.random(), Math.random(), Math.random()]; - const document = 'document' in doc && doc.document ? doc.document : null; - - store.set(doc.key, { - key: doc.key, - vector, - document, - metadata: doc.metadata ?? {}, - }); - - results.push({ - key: doc.key, - id: `vec-${doc.key}`, - }); - } - - return results; - }, - - async get = Record>( - name: string, - key: string - ): Promise> { - const store = stores.get(name); - if (!store || !store.has(key)) { - return { exists: false, data: undefined as never }; - } - const vec = store.get(key)!; - return { - exists: true, - data: { - id: `vec-${key}`, - key: vec.key, - metadata: vec.metadata as T, - similarity: 1.0, - document: vec.document ?? undefined, - embeddings: vec.vector, - }, - }; - }, - - async getMany = Record>( - name: string, - ...keys: string[] - ): Promise>> { - const results = new Map>(); - const store = stores.get(name); - if (!store) return results; - - for (const key of keys) { - if (store.has(key)) { - const vec = store.get(key)!; - results.set(key, { - id: `vec-${key}`, - key: vec.key, - metadata: vec.metadata as T, - similarity: 1.0, - document: vec.document ?? undefined, - embeddings: vec.vector, - }); - } - } - return results; - }, - - async search = Record>( - name: string, - params: VectorSearchParams - ): Promise[]> { - const store = stores.get(name); - if (!store) return []; - - const results: VectorSearchResult[] = []; - for (const [, vec] of store.entries()) { - // Simple metadata matching - if (params.metadata) { - let matches = true; - for (const [key, value] of Object.entries(params.metadata)) { - if (vec.metadata[key] !== value) { - matches = false; - break; - } - } - if (!matches) continue; - } - - results.push({ - id: `vec-${vec.key}`, - key: vec.key, - metadata: vec.metadata as T, - similarity: Math.random() * 0.5 + 0.5, // Random similarity 0.5-1.0 - }); - } - - // Sort by similarity and apply limit - results.sort((a, b) => b.similarity - a.similarity); - if (params.limit) { - return results.slice(0, params.limit); - } - return results; - }, - - async delete(name: string, ...keys: string[]): Promise { - const store = stores.get(name); - if (!store) return 0; - - let count = 0; - for (const key of keys) { - if (store.delete(key)) { - count++; - } - } - return count; - }, - - async exists(name: string) { - return stores.has(name); - }, - }; -} diff --git a/packages/runtime/test/helpers/test-context.ts b/packages/runtime/test/helpers/test-context.ts deleted file mode 100644 index 5911ffc20..000000000 --- a/packages/runtime/test/helpers/test-context.ts +++ /dev/null @@ -1,235 +0,0 @@ -/** - * TestAgentContext - A simple AgentContext implementation for unit testing. - * Does not require AsyncLocalStorage or any server infrastructure. - */ - -import type { AgentContext, AgentRegistry, AgentRunner, AgentRuntimeState } from '../../src/agent'; -import { AGENT_RUNTIME } from '../../src/_config'; -import type { Logger } from '../../src/logger'; -import type { Thread, Session } from '../../src/session'; -import { trace, type Tracer } from '@opentelemetry/api'; -import { - createMockKeyValueStorage, - createMockStreamStorage, - createMockVectorStorage, -} from './mock-services'; - -/** - * Options for configuring TestAgentContext. - * - * @template TConfig - Agent-specific config type from setup function - * @template TAppState - Application state type from createApp - */ -export interface TestContextOptions> { - /** Agent-specific config (passed to ctx.config) */ - config?: TConfig; - /** Application state (passed to ctx.app) */ - app?: TAppState; - /** Custom logger (defaults to silent logger) */ - logger?: Logger; - /** Session ID (defaults to 'test-session') */ - sessionId?: string; - /** Agent name (defaults to 'test-agent') */ - agentName?: string; -} - -/** - * Simple logger that doesn't output anything - */ -function createSilentLogger(): Logger { - const noop = () => {}; - return { - trace: noop, - debug: noop, - info: noop, - warn: noop, - error: noop, - fatal: ((msg: string) => { - throw new Error(msg); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - }) as any, - child: () => createSilentLogger(), - }; -} - -/** - * AgentContext implementation for unit testing agents. - * - * Provides isolated runtime state with in-memory mock implementations of all services: - * - KeyValueStorage (in-memory Map) - * - StreamStorage (in-memory streams) - * - VectorStorage (in-memory vectors) - * - Silent logger (no console output) - * - OpenTelemetry tracer - * - Background task tracking (waitUntil) - * - * Each TestAgentContext instance has isolated runtime state, so tests don't interfere - * with each other. Use with runInAgentContext() to execute agents. - * - * @template TConfig - Agent-specific config type from setup function - * @template TAppState - Application state type from createApp - * - * @example - * ```typescript - * import { runInAgentContext, TestAgentContext } from '@agentuity/runtime/test'; - * import { expect, test } from 'bun:test'; - * - * test('greeting agent', async () => { - * const ctx = new TestAgentContext(); - * const result = await runInAgentContext(ctx, greetingAgent, { - * name: 'Alice', - * age: 30 - * }); - * expect(result).toBe('Hello, Alice! You are 30 years old.'); - * }); - * - * test('agent with config', async () => { - * const ctx = new TestAgentContext({ - * config: { maxRetries: 3 }, - * app: { db: mockDatabase } - * }); - * const result = await runInAgentContext(ctx, myAgent); - * expect(result).toBeDefined(); - * }); - * - * test('background tasks', async () => { - * const ctx = new TestAgentContext(); - * await runInAgentContext(ctx, myAgent); - * await ctx.waitForBackgroundTasks(); // Wait for all waitUntil promises - * }); - * ``` - */ -export class TestAgentContext> - implements - AgentContext< - AgentRegistry, - AgentRunner | undefined, - AgentRunner | undefined, - TConfig, - TAppState - > -{ - sessionId: string; - agentName: string; - logger: Logger; - tracer: Tracer; - kv: ReturnType; - stream: ReturnType; - vector: ReturnType; - state: Map; - thread: Thread; - session: Session; - app: TAppState; - config: TConfig; - [AGENT_RUNTIME]: AgentRuntimeState; - - private waitUntilPromises: Promise[] = []; - - constructor(options?: TestContextOptions) { - this.sessionId = options?.sessionId ?? 'test-session'; - this.agentName = options?.agentName ?? 'test-agent'; - this.logger = options?.logger ?? createSilentLogger(); - this.tracer = trace.getTracer('test-tracer'); - this.kv = createMockKeyValueStorage(); - this.stream = createMockStreamStorage(); - this.vector = createMockVectorStorage(); - this.state = new Map(); - this.thread = { - id: 'test-thread', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => this.thread.state.size === 0, - }; - this.session = { - id: 'test-session', - thread: this.thread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - this.app = (options?.app ?? {}) as TAppState; - this.config = (options?.config ?? {}) as TConfig; - - // Create isolated runtime state for this test - this[AGENT_RUNTIME] = { - agents: new Map(), - agentConfigs: new Map(), - agentEventListeners: new WeakMap(), - }; - } - - waitUntil(promise: Promise | (() => void | Promise)): void { - if (typeof promise === 'function') { - const result = promise(); - if (result instanceof Promise) { - this.waitUntilPromises.push(result); - } - } else { - this.waitUntilPromises.push(promise); - } - } - - /** - * Wait for all background tasks scheduled with ctx.waitUntil() to complete. - * - * Useful in tests to verify that async background work has completed before - * making assertions. All promises passed to ctx.waitUntil() are tracked and - * waited for. - * - * @example - * ```typescript - * test('background task tracking', async () => { - * const ctx = new TestAgentContext(); - * let taskCompleted = false; - * - * const agent = createAgent('test', { - * handler: async (ctx) => { - * ctx.waitUntil(async () => { - * await new Promise(r => setTimeout(r, 100)); - * taskCompleted = true; - * }); - * return 'done'; - * } - * }); - * - * await runInAgentContext(ctx, agent); - * expect(taskCompleted).toBe(false); // Not yet! - * - * await ctx.waitForBackgroundTasks(); - * expect(taskCompleted).toBe(true); // Now it's done - * }); - * ``` - */ - async waitForBackgroundTasks(): Promise { - await Promise.all(this.waitUntilPromises); - } - - /** - * Register an agent in this test context's runtime. - * - * This is required if you want event listeners and evaluations to work in tests. - * Normally you don't need to call this manually - runInAgentContext() handles it. - * - * @param agent - The internal Agent object (not AgentRunner) - * @internal - */ - registerAgent(agent: { metadata?: { name?: string }; evals?: unknown }): void { - const name = agent.metadata?.name; - if (name && agent.evals) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this[AGENT_RUNTIME].agents.set(name, agent as any); - - // Copy event listeners if they exist - // eslint-disable-next-line @typescript-eslint/no-require-imports - const { agentEventListeners } = require('../../src/agent'); - const listeners = agentEventListeners?.get(agent); - if (listeners) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this[AGENT_RUNTIME].agentEventListeners.set(agent as any, listeners); - } - } - } -} diff --git a/packages/runtime/test/json-schema-to-typescript.test.ts b/packages/runtime/test/json-schema-to-typescript.test.ts deleted file mode 100644 index a2b4bc659..000000000 --- a/packages/runtime/test/json-schema-to-typescript.test.ts +++ /dev/null @@ -1,300 +0,0 @@ -import { describe, test, expect } from 'bun:test'; - -// The function is private to workbench.ts, so we test it via a re-export helper. -// For now, we duplicate the function here for unit testing. Once the workbench -// refactor is complete, this can be tested end-to-end through the workbench API. - -import type { JSONSchema } from '@agentuity/schema'; - -// Copy of the function from workbench.ts for isolated testing -function escapeString(s: string): string { - return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r'); -} - -function isValidIdentifier(key: string): boolean { - return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key); -} - -function jsonSchemaToTypeScript(schema: JSONSchema, indent = 0): string { - const pad = ' '.repeat(indent); - const inner = ' '.repeat(indent + 1); - - if (schema.const !== undefined) { - return typeof schema.const === 'string' - ? `"${escapeString(schema.const)}"` - : String(schema.const); - } - - if (schema.enum) { - return schema.enum - .map((v) => (typeof v === 'string' ? `"${escapeString(String(v))}"` : String(v))) - .join(' | '); - } - - const unionSchemas = schema.anyOf ?? schema.oneOf; - if (unionSchemas) { - if (unionSchemas.length === 2) { - const nullIdx = unionSchemas.findIndex((s) => s.type === 'null'); - if (nullIdx !== -1) { - const other = unionSchemas[nullIdx === 0 ? 1 : 0]; - if (other) { - return `${jsonSchemaToTypeScript(other, indent)} | null`; - } - } - } - return unionSchemas.map((s) => jsonSchemaToTypeScript(s, indent)).join(' | '); - } - - if (schema.allOf) { - return schema.allOf.map((s) => jsonSchemaToTypeScript(s, indent)).join(' & '); - } - - switch (schema.type) { - case 'string': - return 'string'; - case 'number': - case 'integer': - return 'number'; - case 'boolean': - return 'boolean'; - case 'null': - return 'null'; - case 'array': { - if (!schema.items) return 'unknown[]'; - const itemType = jsonSchemaToTypeScript(schema.items, indent); - return itemType.includes(' | ') ? `(${itemType})[]` : `${itemType}[]`; - } - case 'object': { - if (!schema.properties || Object.keys(schema.properties).length === 0) { - if (schema.additionalProperties && typeof schema.additionalProperties === 'object') { - return `Record`; - } - return 'Record'; - } - const required = new Set(schema.required ?? []); - const lines: string[] = ['{']; - for (const [key, propSchema] of Object.entries(schema.properties)) { - const optional = !required.has(key); - const propType = jsonSchemaToTypeScript(propSchema, indent + 1); - const desc = propSchema.description ? ` // ${propSchema.description}` : ''; - const quotedKey = isValidIdentifier(key) ? key : `"${escapeString(key)}"`; - lines.push(`${inner}${quotedKey}${optional ? '?' : ''}: ${propType};${desc}`); - } - lines.push(`${pad}}`); - return lines.join('\n'); - } - default: - if (schema.properties) { - return jsonSchemaToTypeScript({ ...schema, type: 'object' }, indent); - } - if (schema.items) { - return jsonSchemaToTypeScript({ ...schema, type: 'array' }, indent); - } - return 'unknown'; - } -} - -describe('jsonSchemaToTypeScript', () => { - test('primitive types', () => { - expect(jsonSchemaToTypeScript({ type: 'string' })).toBe('string'); - expect(jsonSchemaToTypeScript({ type: 'number' })).toBe('number'); - expect(jsonSchemaToTypeScript({ type: 'integer' })).toBe('number'); - expect(jsonSchemaToTypeScript({ type: 'boolean' })).toBe('boolean'); - expect(jsonSchemaToTypeScript({ type: 'null' })).toBe('null'); - }); - - test('simple object', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - properties: { - name: { type: 'string' }, - age: { type: 'number' }, - }, - required: ['name', 'age'], - }); - expect(result).toBe('{\n name: string;\n age: number;\n}'); - }); - - test('object with optional fields', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - properties: { - name: { type: 'string' }, - nickname: { type: 'string' }, - }, - required: ['name'], - }); - expect(result).toBe('{\n name: string;\n nickname?: string;\n}'); - }); - - test('object with descriptions', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - properties: { - name: { type: 'string', description: 'User name' }, - age: { type: 'number', description: 'User age' }, - }, - required: ['name', 'age'], - }); - expect(result).toBe('{\n name: string; // User name\n age: number; // User age\n}'); - }); - - test('array types', () => { - expect(jsonSchemaToTypeScript({ type: 'array', items: { type: 'string' } })).toBe('string[]'); - expect(jsonSchemaToTypeScript({ type: 'array', items: { type: 'number' } })).toBe('number[]'); - }); - - test('array without items', () => { - expect(jsonSchemaToTypeScript({ type: 'array' })).toBe('unknown[]'); - }); - - test('nested object', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - properties: { - user: { - type: 'object', - properties: { - name: { type: 'string' }, - }, - required: ['name'], - }, - }, - required: ['user'], - }); - expect(result).toBe('{\n user: {\n name: string;\n };\n}'); - }); - - test('nullable type (anyOf with null)', () => { - const result = jsonSchemaToTypeScript({ - anyOf: [{ type: 'string' }, { type: 'null' }], - }); - expect(result).toBe('string | null'); - }); - - test('union type (anyOf)', () => { - const result = jsonSchemaToTypeScript({ - anyOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }], - }); - expect(result).toBe('string | number | boolean'); - }); - - test('oneOf union', () => { - const result = jsonSchemaToTypeScript({ - oneOf: [{ type: 'string' }, { type: 'number' }], - }); - expect(result).toBe('string | number'); - }); - - test('allOf intersection', () => { - const result = jsonSchemaToTypeScript({ - allOf: [ - { type: 'object', properties: { a: { type: 'string' } }, required: ['a'] }, - { type: 'object', properties: { b: { type: 'number' } }, required: ['b'] }, - ], - }); - expect(result).toBe('{\n a: string;\n} & {\n b: number;\n}'); - }); - - test('enum', () => { - expect(jsonSchemaToTypeScript({ enum: ['red', 'green', 'blue'] })).toBe( - '"red" | "green" | "blue"' - ); - }); - - test('const literal', () => { - expect(jsonSchemaToTypeScript({ const: 'hello' })).toBe('"hello"'); - expect(jsonSchemaToTypeScript({ const: 42 })).toBe('42'); - expect(jsonSchemaToTypeScript({ const: true })).toBe('true'); - }); - - test('array of union types wraps in parens', () => { - const result = jsonSchemaToTypeScript({ - type: 'array', - items: { anyOf: [{ type: 'string' }, { type: 'number' }] }, - }); - expect(result).toBe('(string | number)[]'); - }); - - test('empty object with additionalProperties', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - additionalProperties: { type: 'string' }, - }); - expect(result).toBe('Record'); - }); - - test('empty object without additionalProperties', () => { - expect(jsonSchemaToTypeScript({ type: 'object' })).toBe('Record'); - }); - - test('unknown type for empty schema', () => { - expect(jsonSchemaToTypeScript({})).toBe('unknown'); - }); - - test('infers object from properties without explicit type', () => { - const result = jsonSchemaToTypeScript({ - properties: { x: { type: 'number' } }, - required: ['x'], - }); - expect(result).toBe('{\n x: number;\n}'); - }); - - test('infers array from items without explicit type', () => { - const result = jsonSchemaToTypeScript({ - items: { type: 'string' }, - }); - expect(result).toBe('string[]'); - }); - - test('escapes special characters in string literals', () => { - expect(jsonSchemaToTypeScript({ const: 'say "hello"' })).toBe('"say \\"hello\\""'); - expect(jsonSchemaToTypeScript({ const: 'line1\nline2' })).toBe('"line1\\nline2"'); - expect(jsonSchemaToTypeScript({ const: 'back\\slash' })).toBe('"back\\\\slash"'); - }); - - test('escapes special characters in enum values', () => { - const result = jsonSchemaToTypeScript({ enum: ['a"b', 'c\\d'] }); - expect(result).toBe('"a\\"b" | "c\\\\d"'); - }); - - test('quotes property keys with special characters', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - properties: { - 'foo-bar': { type: 'string' }, - '123start': { type: 'number' }, - 'with space': { type: 'boolean' }, - normalKey: { type: 'string' }, - }, - required: ['foo-bar', '123start', 'with space', 'normalKey'], - }); - expect(result).toContain('"foo-bar": string;'); - expect(result).toContain('"123start": number;'); - expect(result).toContain('"with space": boolean;'); - expect(result).toContain('normalKey: string;'); - }); - - test('complex real-world schema', () => { - const result = jsonSchemaToTypeScript({ - type: 'object', - properties: { - query: { type: 'string', description: 'Search query' }, - filters: { - type: 'object', - properties: { - status: { enum: ['active', 'archived'] }, - tags: { type: 'array', items: { type: 'string' } }, - }, - }, - limit: { type: 'integer' }, - }, - required: ['query'], - }); - expect(result).toContain('query: string; // Search query'); - expect(result).toContain('filters?: {'); - expect(result).toContain('status?: "active" | "archived"'); - expect(result).toContain('tags?: string[]'); - expect(result).toContain('limit?: number'); - }); -}); diff --git a/packages/runtime/test/lazy-thread-state-machine.test.ts b/packages/runtime/test/lazy-thread-state-machine.test.ts deleted file mode 100644 index 132cc7990..000000000 --- a/packages/runtime/test/lazy-thread-state-machine.test.ts +++ /dev/null @@ -1,1092 +0,0 @@ -/** - * Comprehensive tests for LazyThreadState state machine. - * - * State Machine: - * - * ┌─────────────────────────────────┐ - * │ │ - * ▼ │ - * ┌──────┐ write ┌─────────────────┐ read ┌─────┴─────┐ - * │ idle │ ───────► │ pending-writes │ ───────► │ loaded │ - * └──────┘ └─────────────────┘ └───────────┘ - * │ ▲ - * │ read │ - * └────────────────────────────────────────────────┘ - * - * These tests validate all state transitions and save behavior. - */ - -import { test, expect, describe, mock } from 'bun:test'; -import { DefaultThread, LazyThreadState, type ThreadProvider } from '../src/session'; - -describe('LazyThreadState State Machine', () => { - describe('idle state', () => { - test('initial status is idle', () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - expect(state.getStatus()).toBe('idle'); - expect(state.loaded).toBe(false); - expect(state.dirty).toBe(false); - }); - - test('restoreFn is NOT called in idle state', () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - new LazyThreadState(restoreFn); - - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('idle → loaded on get()', async () => { - const restoreFn = mock(async () => ({ state: new Map([['key', 'value']]), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.get('key'); - - expect(state.getStatus()).toBe('loaded'); - expect(state.loaded).toBe(true); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('idle → loaded on has()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.has('key'); - - expect(state.getStatus()).toBe('loaded'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('idle → loaded on entries()', async () => { - const restoreFn = mock(async () => ({ state: new Map([['a', 1]]), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.entries(); - - expect(state.getStatus()).toBe('loaded'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('idle → loaded on keys()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.keys(); - - expect(state.getStatus()).toBe('loaded'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('idle → loaded on values()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.values(); - - expect(state.getStatus()).toBe('loaded'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('idle → loaded on size()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - - expect(state.getStatus()).toBe('loaded'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('idle → pending-writes on set()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - - expect(state.getStatus()).toBe('pending-writes'); - expect(state.loaded).toBe(false); - expect(state.dirty).toBe(true); - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('idle → pending-writes on delete()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.delete('key'); - - expect(state.getStatus()).toBe('pending-writes'); - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('idle → pending-writes on clear()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.clear(); - - expect(state.getStatus()).toBe('pending-writes'); - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('idle → pending-writes on push()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.push('arr', 'item'); - - expect(state.getStatus()).toBe('pending-writes'); - expect(restoreFn).not.toHaveBeenCalled(); - }); - }); - - describe('pending-writes state', () => { - test('pending-writes stays on additional set()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key1', 'value1'); - expect(state.getStatus()).toBe('pending-writes'); - - await state.set('key2', 'value2'); - expect(state.getStatus()).toBe('pending-writes'); - - await state.set('key3', 'value3'); - expect(state.getStatus()).toBe('pending-writes'); - - expect(restoreFn).not.toHaveBeenCalled(); - expect(state.getPendingOperations()).toHaveLength(3); - }); - - test('pending-writes stays on delete()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.delete('key'); - - expect(state.getStatus()).toBe('pending-writes'); - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('pending-writes stays on clear()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.clear(); - - expect(state.getStatus()).toBe('pending-writes'); - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('pending-writes stays on push()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.push('arr', 'item'); - - expect(state.getStatus()).toBe('pending-writes'); - expect(restoreFn).not.toHaveBeenCalled(); - }); - - test('pending-writes → loaded on get()', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['existing', 'data']]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.set('new', 'value'); - expect(state.getStatus()).toBe('pending-writes'); - - const result = await state.get('new'); - - expect(state.getStatus()).toBe('loaded'); - expect(result).toBe('value'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('pending-writes → loaded on has()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.has('key'); - - expect(state.getStatus()).toBe('loaded'); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('pending-writes → loaded on entries()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.entries(); - - expect(state.getStatus()).toBe('loaded'); - }); - - test('pending-writes → loaded on keys()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.keys(); - - expect(state.getStatus()).toBe('loaded'); - }); - - test('pending-writes → loaded on values()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.values(); - - expect(state.getStatus()).toBe('loaded'); - }); - - test('pending-writes → loaded on size()', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.size(); - - expect(state.getStatus()).toBe('loaded'); - }); - - test('pending operations are applied after load', async () => { - const restoreFn = mock(async () => ({ - state: new Map([ - ['existing', 'original'], - ['toDelete', 'gone'], - ]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.set('new', 'value'); - await state.set('existing', 'modified'); - await state.delete('toDelete'); - - const newVal = await state.get('new'); - const existingVal = await state.get('existing'); - const deletedVal = await state.get('toDelete'); - - expect(newVal).toBe('value'); - expect(existingVal).toBe('modified'); - expect(deletedVal).toBeUndefined(); - }); - - test('clear operation clears previous pending ops and existing data', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['existing', 'data']]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.set('key1', 'value1'); - await state.set('key2', 'value2'); - await state.clear(); - await state.set('afterClear', 'only'); - - const ops = state.getPendingOperations(); - expect(ops).toHaveLength(2); - expect(ops[0]).toEqual({ op: 'clear' }); - expect(ops[1]).toEqual({ op: 'set', key: 'afterClear', value: 'only' }); - - const keys = await state.keys(); - expect(keys).toEqual(['afterClear']); - }); - - test('pending operations are cleared after load', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - expect(state.getPendingOperations()).toHaveLength(1); - - await state.get('key'); - expect(state.getPendingOperations()).toHaveLength(0); - }); - }); - - describe('loaded state', () => { - test('loaded stays loaded on all operations', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['initial', 'data']]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.get('initial'); - expect(state.getStatus()).toBe('loaded'); - - await state.set('new', 'value'); - expect(state.getStatus()).toBe('loaded'); - - await state.delete('new'); - expect(state.getStatus()).toBe('loaded'); - - await state.has('initial'); - expect(state.getStatus()).toBe('loaded'); - - await state.entries(); - expect(state.getStatus()).toBe('loaded'); - - await state.keys(); - expect(state.getStatus()).toBe('loaded'); - - await state.values(); - expect(state.getStatus()).toBe('loaded'); - - await state.size(); - expect(state.getStatus()).toBe('loaded'); - - expect(restoreFn).toHaveBeenCalledTimes(1); - }); - - test('set() modifies local cache when loaded', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - await state.set('key', 'value'); - - expect(state.getPendingOperations()).toHaveLength(0); - expect(await state.get('key')).toBe('value'); - }); - - test('delete() modifies local cache when loaded', async () => { - const restoreFn = mock(async () => ({ state: new Map([['key', 'value']]), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - await state.delete('key'); - - expect(state.getPendingOperations()).toHaveLength(0); - expect(await state.has('key')).toBe(false); - }); - - test('clear() modifies local cache when loaded', async () => { - const restoreFn = mock(async () => ({ - state: new Map([ - ['a', 1], - ['b', 2], - ]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - await state.clear(); - - expect(state.getPendingOperations()).toHaveLength(0); - expect(await state.size()).toBe(0); - }); - - test('push() modifies local cache when loaded', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['arr', ['a', 'b']]]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - await state.push('arr', 'c'); - - expect(state.getPendingOperations()).toHaveLength(0); - expect(await state.get('arr')).toEqual(['a', 'b', 'c']); - }); - - test('dirty is false when no changes after load', async () => { - const restoreFn = mock(async () => ({ state: new Map([['key', 'value']]), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.get('key'); - - expect(state.dirty).toBe(false); - }); - - test('dirty is true when state modified after load', async () => { - const restoreFn = mock(async () => ({ state: new Map([['key', 'value']]), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.get('key'); - await state.set('newKey', 'newValue'); - - expect(state.dirty).toBe(true); - }); - - test('dirty returns to false if changes reverted', async () => { - const restoreFn = mock(async () => ({ state: new Map([['key', 'value']]), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.get('key'); - await state.set('key', 'changed'); - expect(state.dirty).toBe(true); - - await state.set('key', 'value'); - expect(state.dirty).toBe(false); - }); - }); - - describe('dirty property', () => { - test('idle state: dirty is false', () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - expect(state.dirty).toBe(false); - }); - - test('pending-writes state: dirty is true when operations queued', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - - expect(state.dirty).toBe(true); - }); - - test('pending-writes state after clear: dirty is true', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.clear(); - - expect(state.dirty).toBe(true); - expect(state.getPendingOperations()).toHaveLength(1); - }); - - test('loaded state: dirty based on comparison', async () => { - const restoreFn = mock(async () => ({ - state: new Map([ - ['a', 1], - ['b', 2], - ]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - expect(state.dirty).toBe(false); - - await state.set('c', 3); - expect(state.dirty).toBe(true); - - await state.delete('c'); - expect(state.dirty).toBe(false); - }); - }); -}); - -describe('LazyThreadState Concurrent Access', () => { - test('multiple concurrent reads use same load promise', async () => { - let loadCount = 0; - const restoreFn = mock(async () => { - loadCount++; - await new Promise((resolve) => setTimeout(resolve, 10)); - return { state: new Map([['key', 'value']]), metadata: {} }; - }); - const state = new LazyThreadState(restoreFn); - - const [r1, r2, r3] = await Promise.all([state.get('key'), state.has('key'), state.size()]); - - expect(loadCount).toBe(1); - expect(restoreFn).toHaveBeenCalledTimes(1); - expect(r1).toBe('value'); - expect(r2).toBe(true); - expect(r3).toBe(1); - }); - - test('concurrent writes while loading are queued correctly', async () => { - let loadStarted = false; - let loadResolver: () => void; - const loadPromise = new Promise((resolve) => { - loadResolver = resolve; - }); - - const restoreFn = mock(async () => { - loadStarted = true; - await loadPromise; - return { state: new Map([['existing', 'data']]), metadata: {} }; - }); - const state = new LazyThreadState(restoreFn); - - const readPromise = state.get('existing'); - - await new Promise((r) => setTimeout(r, 5)); - expect(loadStarted).toBe(true); - expect(state.getStatus()).not.toBe('loaded'); - - loadResolver!(); - - const result = await readPromise; - expect(result).toBe('data'); - expect(state.getStatus()).toBe('loaded'); - }); - - test('write during pending load transitions correctly', async () => { - let loadResolver: () => void; - const loadPromise = new Promise((resolve) => { - loadResolver = resolve; - }); - - const restoreFn = mock(async () => { - await loadPromise; - return { state: new Map([['existing', 'data']]), metadata: {} }; - }); - const state = new LazyThreadState(restoreFn); - - const readPromise = state.get('key'); - - await state.set('newKey', 'newValue'); - - loadResolver!(); - await readPromise; - - expect(state.getStatus()).toBe('loaded'); - expect(await state.get('newKey')).toBe('newValue'); - }); -}); - -describe('LazyThreadState Error Handling', () => { - test('restoreFn error propagates to caller', async () => { - const restoreFn = mock(async () => { - throw new Error('Database connection failed'); - }); - const state = new LazyThreadState(restoreFn); - - await expect(state.get('key')).rejects.toThrow('Database connection failed'); - }); - - test('restoreFn error on concurrent reads propagates to all', async () => { - const restoreFn = mock(async () => { - await new Promise((resolve) => setTimeout(resolve, 5)); - throw new Error('Load failed'); - }); - const state = new LazyThreadState(restoreFn); - - const results = await Promise.allSettled([state.get('a'), state.has('b'), state.size()]); - - expect(results[0].status).toBe('rejected'); - expect(results[1].status).toBe('rejected'); - expect(results[2].status).toBe('rejected'); - }); - - test('retry succeeds after restoreFn failure (promise not poisoned)', async () => { - let callCount = 0; - const restoreFn = mock(async () => { - callCount++; - if (callCount === 1) { - throw new Error('First attempt failed'); - } - return { state: new Map([['key', 'value']]), metadata: {} }; - }); - const state = new LazyThreadState(restoreFn); - - await expect(state.get('key')).rejects.toThrow('First attempt failed'); - - const result = await state.get('key'); - expect(result).toBe('value'); - expect(callCount).toBe(2); - }); - - test('pending writes are not lost after failed load', async () => { - let callCount = 0; - const restoreFn = mock(async () => { - callCount++; - if (callCount === 1) { - throw new Error('First attempt failed'); - } - return { state: new Map([['existing', 'data']]), metadata: {} }; - }); - const state = new LazyThreadState(restoreFn); - - await state.set('newKey', 'newValue'); - - await expect(state.get('anything')).rejects.toThrow('First attempt failed'); - - expect(state.getStatus()).toBe('pending-writes'); - expect(state.getPendingOperations()).toHaveLength(1); - - const result = await state.get('newKey'); - expect(result).toBe('newValue'); - }); - - test('push to non-array throws when loaded', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['count', 42]]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.size(); - - expect(() => state.push('count', 'item')).toThrow( - 'Cannot push to non-array value at key "count"' - ); - }); -}); - -describe('LazyThreadState getSerializedState', () => { - test('returns correct data when idle (triggers load)', async () => { - const restoreFn = mock(async () => ({ - state: new Map([ - ['a', 1], - ['b', 2], - ]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - const serialized = await state.getSerializedState(); - - expect(serialized).toEqual({ a: 1, b: 2 }); - expect(state.getStatus()).toBe('loaded'); - }); - - test('returns correct data with pending writes applied', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['existing', 'original']]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.set('new', 'value'); - await state.set('existing', 'modified'); - - const serialized = await state.getSerializedState(); - - expect(serialized).toEqual({ existing: 'modified', new: 'value' }); - }); - - test('returns correct data when already loaded', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['key', 'value']]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.get('key'); - await state.set('another', 'data'); - - const serialized = await state.getSerializedState(); - - expect(serialized).toEqual({ key: 'value', another: 'data' }); - expect(restoreFn).toHaveBeenCalledTimes(1); - }); -}); - -describe('DefaultThread Save Modes', () => { - const mockProvider = {} as ThreadProvider; - - describe('getSaveMode', () => { - test('returns "none" for untouched thread (idle state)', () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - expect(thread.getSaveMode()).toBe('none'); - }); - - test('returns "merge" for pending-writes state', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.set('key', 'value'); - - expect(thread.getSaveMode()).toBe('merge'); - }); - - test('returns "none" for loaded but clean state', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.get('key'); - - expect(thread.getSaveMode()).toBe('none'); - }); - - test('returns "full" for loaded and dirty state', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.get('key'); - await thread.state.set('newKey', 'newValue'); - - expect(thread.getSaveMode()).toBe('full'); - }); - - test('returns "merge" when only metadata changed (idle state)', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.setMetadata({ userId: 'user123' }); - - expect(thread.getSaveMode()).toBe('merge'); - }); - - test('returns "full" when metadata changed after load', async () => { - const restoreFn = async () => ({ - state: new Map([['key', 'value']]), - metadata: { old: 'meta' }, - }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn, { old: 'meta' }); - - await thread.state.get('key'); - await thread.setMetadata({ userId: 'user123' }); - - expect(thread.getSaveMode()).toBe('full'); - }); - - test('returns "full" when metadata changed after state loaded (even if state unchanged)', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.get('key'); - expect(thread.getSaveMode()).toBe('none'); - - await thread.setMetadata({ userId: 'user123' }); - expect(thread.getSaveMode()).toBe('full'); - }); - - test('returns "none" after read-only access (state + metadata)', async () => { - const restoreFn = async () => ({ - state: new Map([['key', 'value']]), - metadata: { existing: 'meta' }, - }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn, { - existing: 'meta', - }); - - await thread.state.get('key'); - await thread.getMetadata(); - - expect(thread.getSaveMode()).toBe('none'); - }); - }); - - describe('getPendingOperations', () => { - test('returns empty array for idle state', () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - expect(thread.getPendingOperations()).toEqual([]); - }); - - test('returns queued operations for pending-writes state', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.set('key1', 'value1'); - await thread.state.delete('key2'); - await thread.state.push('arr', 'item', 10); - - const ops = thread.getPendingOperations(); - - expect(ops).toHaveLength(3); - expect(ops[0]).toEqual({ op: 'set', key: 'key1', value: 'value1' }); - expect(ops[1]).toEqual({ op: 'delete', key: 'key2' }); - expect(ops[2]).toEqual({ op: 'push', key: 'arr', value: 'item', maxRecords: 10 }); - }); - - test('returns empty array for loaded state', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.size(); - await thread.state.set('key', 'value'); - - expect(thread.getPendingOperations()).toEqual([]); - }); - }); - - describe('getSerializedState', () => { - test('includes both state and metadata', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.setMetadata({ userId: 'user123' }); - - const serialized = await thread.getSerializedState(); - const parsed = JSON.parse(serialized); - - expect(parsed.state).toEqual({ key: 'value' }); - expect(parsed.metadata).toEqual({ userId: 'user123' }); - }); - - test('excludes metadata if not set', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - const serialized = await thread.getSerializedState(); - const parsed = JSON.parse(serialized); - - expect(parsed.state).toEqual({ key: 'value' }); - expect(parsed.metadata).toBeUndefined(); - }); - }); -}); - -describe('Pending Operations Application Order', () => { - test('operations applied in exact order', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'first'); - await state.set('key', 'second'); - await state.set('key', 'third'); - - const result = await state.get('key'); - expect(result).toBe('third'); - }); - - test('delete after set removes the value', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - await state.delete('key'); - - const result = await state.get('key'); - expect(result).toBeUndefined(); - }); - - test('set after delete adds value back', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['key', 'original']]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.delete('key'); - await state.set('key', 'restored'); - - const result = await state.get('key'); - expect(result).toBe('restored'); - }); - - test('clear followed by sets only keeps sets after clear', async () => { - const restoreFn = mock(async () => ({ - state: new Map([ - ['existing1', 'a'], - ['existing2', 'b'], - ]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.set('beforeClear', 'value'); - await state.clear(); - await state.set('afterClear', 'value'); - - const entries = await state.entries(); - expect(entries).toEqual([['afterClear', 'value']]); - }); - - test('push operations accumulate correctly', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['messages', ['existing']]]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.push('messages', 'msg1'); - await state.push('messages', 'msg2'); - await state.push('messages', 'msg3'); - - const result = await state.get('messages'); - expect(result).toEqual(['existing', 'msg1', 'msg2', 'msg3']); - }); - - test('push with maxRecords trims correctly on load', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['items', ['a', 'b', 'c']]]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.push('items', 'd', 3); - await state.push('items', 'e', 3); - - const result = await state.get('items'); - expect(result).toEqual(['c', 'd', 'e']); - }); - - test('push to non-existent key creates array on load', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.push('newArray', 'first'); - await state.push('newArray', 'second'); - - const result = await state.get('newArray'); - expect(result).toEqual(['first', 'second']); - }); - - test('push to non-array value is silently skipped on load', async () => { - const restoreFn = mock(async () => ({ - state: new Map([['count', 42]]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - await state.push('count', 'ignored'); - - const result = await state.get('count'); - expect(result).toBe(42); - }); -}); - -describe('DefaultThread Metadata Error Handling', () => { - const mockProvider = {} as ThreadProvider; - - test('metadata retry succeeds after restoreFn failure', async () => { - let callCount = 0; - const restoreFn = mock(async () => { - callCount++; - if (callCount === 1) { - throw new Error('First attempt failed'); - } - return { state: new Map(), metadata: { userId: 'user123' } }; - }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await expect(thread.getMetadata()).rejects.toThrow('First attempt failed'); - - const metadata = await thread.getMetadata(); - expect(metadata.userId).toBe('user123'); - expect(callCount).toBe(2); - }); - - test('setMetadata does not require load', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: { existing: 'data' } })); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.setMetadata({ newKey: 'newValue' }); - - expect(restoreFn).not.toHaveBeenCalled(); - - const metadata = await thread.getMetadata(); - expect(metadata.newKey).toBe('newValue'); - expect(metadata.existing).toBeUndefined(); - }); -}); - -describe('DefaultThread Double Restore Behavior', () => { - const mockProvider = {} as ThreadProvider; - - test('state and metadata each trigger independent restoreFn calls', async () => { - let callCount = 0; - const restoreFn = mock(async () => { - callCount++; - return { state: new Map([['key', 'value']]), metadata: { userId: 'user123' } }; - }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn); - - await thread.state.get('key'); - expect(callCount).toBe(1); - - await thread.getMetadata(); - expect(callCount).toBe(2); - }); - - test('initialMetadata optimization avoids restoreFn call for metadata', async () => { - let callCount = 0; - const restoreFn = mock(async () => { - callCount++; - return { state: new Map([['key', 'value']]), metadata: { fromRestore: true } }; - }); - const thread = new DefaultThread(mockProvider, 'thrd_test', restoreFn, { - initial: 'metadata', - }); - - const metadata = await thread.getMetadata(); - expect(metadata.initial).toBe('metadata'); - expect(callCount).toBe(0); - - await thread.state.get('key'); - expect(callCount).toBe(1); - }); -}); - -describe('Edge Cases', () => { - test('empty restoreFn response handled correctly', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - expect(await state.size()).toBe(0); - expect(await state.entries()).toEqual([]); - expect(await state.keys()).toEqual([]); - expect(await state.values()).toEqual([]); - }); - - test('undefined and null values preserved', async () => { - const restoreFn = mock(async () => ({ - state: new Map([ - ['nullVal', null], - ['undefinedVal', undefined], - ]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - expect(await state.get('nullVal')).toBeNull(); - expect(await state.get('undefinedVal')).toBeUndefined(); - expect(await state.has('nullVal')).toBe(true); - expect(await state.has('undefinedVal')).toBe(true); - }); - - test('complex nested objects preserved', async () => { - const complexValue = { - arr: [1, 2, { nested: true }], - obj: { deep: { value: 'test' } }, - date: '2024-01-01', - }; - - const restoreFn = mock(async () => ({ - state: new Map([['complex', complexValue]]), - metadata: {}, - })); - const state = new LazyThreadState(restoreFn); - - const result = await state.get('complex'); - expect(result).toEqual(complexValue); - }); - - test('very large state handled', async () => { - const largeState = new Map(); - for (let i = 0; i < 1000; i++) { - largeState.set(`key${i}`, { index: i, data: 'x'.repeat(100) }); - } - - const restoreFn = mock(async () => ({ state: largeState, metadata: {} })); - const state = new LazyThreadState(restoreFn); - - expect(await state.size()).toBe(1000); - expect(await state.get('key500')).toEqual({ index: 500, data: 'x'.repeat(100) }); - }); - - test('special characters in keys handled', async () => { - const restoreFn = mock(async () => ({ state: new Map(), metadata: {} })); - const state = new LazyThreadState(restoreFn); - - await state.set('key.with.dots', 'value1'); - await state.set('key/with/slashes', 'value2'); - await state.set('key with spaces', 'value3'); - await state.set('key:with:colons', 'value4'); - await state.set('emoji🎉key', 'value5'); - - const keys = await state.keys(); - expect(keys).toContain('key.with.dots'); - expect(keys).toContain('key/with/slashes'); - expect(keys).toContain('key with spaces'); - expect(keys).toContain('key:with:colons'); - expect(keys).toContain('emoji🎉key'); - }); -}); diff --git a/packages/runtime/test/lifecycle/waituntil.test.ts b/packages/runtime/test/lifecycle/waituntil.test.ts deleted file mode 100644 index c1c4e2222..000000000 --- a/packages/runtime/test/lifecycle/waituntil.test.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { describe, test, expect, beforeEach } from 'bun:test'; -import { createAgent, runInAgentContext } from '../../src/agent'; -import { TestAgentContext } from '../helpers/test-context'; - -/** - * Unit tests for ctx.waitUntil() lifecycle functionality - * - * These tests verify that background tasks can be scheduled and executed - * after the main agent response is sent. - */ -describe('waitUntil Background Tasks', () => { - let ctx: TestAgentContext; - - beforeEach(() => { - ctx = new TestAgentContext(); - }); - - test('schedules basic async background task', async () => { - let taskExecuted = false; - - const agent = createAgent('basic-waituntil', { - handler: async (ctx) => { - ctx.waitUntil(async () => { - await new Promise((resolve) => setTimeout(resolve, 50)); - taskExecuted = true; - }); - }, - }); - - await runInAgentContext(ctx, agent); - - // Task should not execute immediately - expect(taskExecuted).toBe(false); - - // Wait for background tasks to complete - await ctx.waitForBackgroundTasks(); - expect(taskExecuted).toBe(true); - }); - - test('schedules multiple background tasks', async () => { - const executionOrder: number[] = []; - - const agent = createAgent('multiple-waituntil', { - handler: async (ctx) => { - // Schedule 5 background tasks - for (let i = 0; i < 5; i++) { - ctx.waitUntil(async () => { - await new Promise((resolve) => setTimeout(resolve, 50)); - executionOrder.push(i); - }); - } - }, - }); - - await runInAgentContext(ctx, agent); - expect(executionOrder).toEqual([]); - - await ctx.waitForBackgroundTasks(); - expect(executionOrder.length).toBe(5); - expect(executionOrder).toContain(0); - expect(executionOrder).toContain(4); - }); - - test('handles background task errors', async () => { - let mainRequestCompleted = false; - - const agent = createAgent('error-waituntil', { - handler: async (ctx) => { - ctx.waitUntil(async () => { - throw new Error('Background task failure'); - }); - - mainRequestCompleted = true; - }, - }); - - // Main request should succeed - await runInAgentContext(ctx, agent); - expect(mainRequestCompleted).toBe(true); - - // In test environment, background task errors will throw when awaited - // (In production, they're caught and logged) - await expect(ctx.waitForBackgroundTasks()).rejects.toThrow('Background task failure'); - }); - - test('supports promise-based tasks', async () => { - let promiseTaskExecuted = false; - - const agent = createAgent('promise-waituntil', { - handler: async (ctx) => { - ctx.waitUntil( - new Promise((resolve) => { - setTimeout(() => { - promiseTaskExecuted = true; - resolve(); - }, 50); - }) - ); - }, - }); - - await runInAgentContext(ctx, agent); - expect(promiseTaskExecuted).toBe(false); - - await ctx.waitForBackgroundTasks(); - expect(promiseTaskExecuted).toBe(true); - }); - - test('supports synchronous function tasks', async () => { - let syncTaskExecuted = false; - - const agent = createAgent('sync-waituntil', { - handler: async (ctx) => { - ctx.waitUntil(() => { - syncTaskExecuted = true; - }); - }, - }); - - await runInAgentContext(ctx, agent); - - // In test context, sync functions execute immediately - // (In production runtime, they're also executed synchronously) - expect(syncTaskExecuted).toBe(true); - }); - - test('executes tasks in order of registration', async () => { - const executionOrder: string[] = []; - - const agent = createAgent('ordered-waituntil', { - handler: async (ctx) => { - ctx.waitUntil(() => executionOrder.push('first')); - ctx.waitUntil(() => executionOrder.push('second')); - ctx.waitUntil(() => executionOrder.push('third')); - }, - }); - - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - expect(executionOrder).toEqual(['first', 'second', 'third']); - }); - - test('allows access to context in background tasks', async () => { - let sessionId: string | undefined; - let threadId: string | undefined; - - const agent = createAgent('context-waituntil', { - handler: async (ctx) => { - ctx.waitUntil(() => { - sessionId = ctx.session.id; - threadId = ctx.thread.id; - }); - }, - }); - - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - // Test context uses mock IDs - expect(sessionId).toBeDefined(); - expect(threadId).toBeDefined(); - expect(sessionId).toBe('test-session'); - expect(threadId).toBe('test-thread'); - }); - - test('supports nested waitUntil calls', async () => { - const executionLog: string[] = []; - - const agent = createAgent('nested-waituntil', { - handler: async (ctx) => { - ctx.waitUntil(async () => { - executionLog.push('outer-start'); - - ctx.waitUntil(() => { - executionLog.push('inner'); - }); - - executionLog.push('outer-end'); - }); - }, - }); - - await runInAgentContext(ctx, agent); - await ctx.waitForBackgroundTasks(); - - expect(executionLog).toContain('outer-start'); - expect(executionLog).toContain('outer-end'); - expect(executionLog).toContain('inner'); - }); -}); diff --git a/packages/runtime/test/local-thread-provider.test.ts b/packages/runtime/test/local-thread-provider.test.ts deleted file mode 100644 index 837c11155..000000000 --- a/packages/runtime/test/local-thread-provider.test.ts +++ /dev/null @@ -1,204 +0,0 @@ -/** - * Integration tests for LocalThreadProvider logic. - * Tests thread persistence by directly testing the save/restore format handling. - */ - -import { test, expect, describe } from 'bun:test'; -import { DefaultThread, parseThreadData, type ThreadProvider } from '../src/session'; - -// Helper to create a thread with initial state -function createThread( - provider: ThreadProvider, - id: string, - initialState?: Record, - initialMetadata?: Record -) { - const restoreFn = async () => ({ - state: new Map(Object.entries(initialState || {})), - metadata: initialMetadata || {}, - }); - return new DefaultThread(provider, id, restoreFn, initialMetadata); -} - -describe('LocalThreadProvider format handling', () => { - const mockProvider = {} as ThreadProvider; - - test('saves and restores thread state correctly using getSerializedState', async () => { - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_test123', restoreFn1); - - await thread1.state.set('messages', [{ id: '1', content: 'hello' }]); - await thread1.state.set('counter', 42); - - const serialized = await thread1.getSerializedState(); - - const { flatStateJson, metadata } = parseThreadData(serialized); - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread2 = createThread(mockProvider, 'thrd_test123', restoredState, metadata); - - expect(await thread2.state.get('messages')).toEqual([{ id: '1', content: 'hello' }]); - expect(await thread2.state.get('counter')).toBe(42); - }); - - test('restores metadata correctly', async () => { - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_test456', restoreFn1); - - await thread1.state.set('data', 'test'); - await thread1.setMetadata({ userId: 'user123', role: 'admin' }); - - const serialized = await thread1.getSerializedState(); - - const { flatStateJson, metadata } = parseThreadData(serialized); - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread2 = createThread(mockProvider, 'thrd_test456', restoredState, metadata); - - const restoredMeta = await thread2.getMetadata(); - expect(restoredMeta.userId).toBe('user123'); - expect(restoredMeta.role).toBe('admin'); - }); - - test('multiple save/restore cycles preserve state correctly', async () => { - let serialized: string; - - // First thread - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_multi', restoreFn1); - await thread1.state.set('messages', ['msg1']); - serialized = await thread1.getSerializedState(); - - // Second thread - const { flatStateJson: flat1, metadata: meta1 } = parseThreadData(serialized); - const state1 = flat1 ? JSON.parse(flat1) : {}; - const thread2 = createThread(mockProvider, 'thrd_multi', state1, meta1); - const messages2 = (await thread2.state.get('messages')) || []; - messages2.push('msg2'); - await thread2.state.set('messages', messages2); - serialized = await thread2.getSerializedState(); - - // Third thread - const { flatStateJson: flat2, metadata: meta2 } = parseThreadData(serialized); - const state2 = flat2 ? JSON.parse(flat2) : {}; - const thread3 = createThread(mockProvider, 'thrd_multi', state2, meta2); - const messages3 = (await thread3.state.get('messages')) || []; - messages3.push('msg3'); - await thread3.state.set('messages', messages3); - serialized = await thread3.getSerializedState(); - - // Fourth thread - verify final state - const { flatStateJson: flat3, metadata: meta3 } = parseThreadData(serialized); - const state3 = flat3 ? JSON.parse(flat3) : {}; - const thread4 = createThread(mockProvider, 'thrd_multi', state3, meta3); - - expect(await thread4.state.get('messages')).toEqual(['msg1', 'msg2', 'msg3']); - }); - - test('does not mark as dirty if not modified after restore', async () => { - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_nodirty', restoreFn1); - await thread1.state.set('value', 'original'); - const serialized = await thread1.getSerializedState(); - - const { flatStateJson, metadata } = parseThreadData(serialized); - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread2 = createThread(mockProvider, 'thrd_nodirty', restoredState, metadata); - - // Just read - don't modify - await thread2.state.get('value'); - - expect(thread2.state.dirty).toBe(false); - }); - - test('handles empty thread correctly', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_empty', restoreFn); - - const size = await thread.state.size(); - const metadata = await thread.getMetadata(); - - expect(size).toBe(0); - expect(Object.keys(metadata)).toHaveLength(0); - expect(thread.state.dirty).toBe(false); - }); - - test('handles backwards compatible old format data', async () => { - const oldFormatData = JSON.stringify({ messages: ['old', 'data'], counter: 10 }); - - const { flatStateJson, metadata } = parseThreadData(oldFormatData); - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread = createThread(mockProvider, 'thrd_oldformat', restoredState, metadata); - - expect(await thread.state.get('messages')).toEqual(['old', 'data']); - expect(await thread.state.get('counter')).toBe(10); - expect(await thread.state.has('state')).toBe(false); - }); - - test('handles new format data correctly', async () => { - const newFormatData = JSON.stringify({ - state: { messages: ['new', 'format'] }, - metadata: { userId: 'user789' }, - }); - - const { flatStateJson, metadata } = parseThreadData(newFormatData); - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread = createThread(mockProvider, 'thrd_newformat', restoredState, metadata); - - expect(await thread.state.get('messages')).toEqual(['new', 'format']); - expect(await thread.state.has('state')).toBe(false); - - const restoredMeta = await thread.getMetadata(); - expect(restoredMeta.userId).toBe('user789'); - }); - - test('complex state with nested objects persists correctly', async () => { - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_complex', restoreFn1); - - const complexState = { - messages: [ - { id: '1', content: 'hello', metadata: { sentiment: 'positive' } }, - { id: '2', content: 'world', metadata: { sentiment: 'neutral' } }, - ], - config: { - nested: { - deeply: { - value: 42, - array: [1, 2, 3], - }, - }, - }, - }; - - await thread1.state.set('data', complexState); - const serialized = await thread1.getSerializedState(); - - const { flatStateJson, metadata } = parseThreadData(serialized); - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread2 = createThread(mockProvider, 'thrd_complex', restoredState, metadata); - - const restored = await thread2.state.get('data'); - - expect(restored?.messages).toHaveLength(2); - expect(restored?.messages[0].metadata.sentiment).toBe('positive'); - expect(restored?.config.nested.deeply.value).toBe(42); - expect(restored?.config.nested.deeply.array).toEqual([1, 2, 3]); - }); - - test('data with "state" key is interpreted as new format', async () => { - const dataWithStateKey = JSON.stringify({ - state: { actualData: 'stored in state wrapper' }, - metadata: { userId: 'user123' }, - }); - - const { flatStateJson, metadata } = parseThreadData(dataWithStateKey); - - expect(flatStateJson).toBe(JSON.stringify({ actualData: 'stored in state wrapper' })); - expect(metadata).toEqual({ userId: 'user123' }); - - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const thread = createThread(mockProvider, 'thrd_test', restoredState, metadata); - - expect(await thread.state.get('actualData')).toBe('stored in state wrapper'); - expect(await thread.state.has('state')).toBe(false); - }); -}); diff --git a/packages/runtime/test/metadata.test.ts b/packages/runtime/test/metadata.test.ts deleted file mode 100644 index 29bae6e13..000000000 --- a/packages/runtime/test/metadata.test.ts +++ /dev/null @@ -1,315 +0,0 @@ -/** - * Tests for thread and session metadata functionality. - * Validates initialization, persistence, and filtering behavior. - */ - -import { test, expect, describe } from 'bun:test'; -import { DefaultThread, DefaultSession } from '../src/session'; -import type { ThreadProvider } from '../src/session'; - -// Helper to create a thread with restoreFn -function createThread( - provider: ThreadProvider, - id: string, - initialState?: Record, - initialMetadata?: Record -) { - const restoreFn = async () => ({ - state: new Map(Object.entries(initialState || {})), - metadata: initialMetadata || {}, - }); - return new DefaultThread(provider, id, restoreFn, initialMetadata); -} - -describe('Thread Metadata', () => { - const mockProvider = {} as ThreadProvider; - - test('initializes with empty metadata object', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const metadata = await thread.getMetadata(); - - expect(metadata).toBeDefined(); - expect(metadata).toEqual({}); - expect(Object.keys(metadata)).toHaveLength(0); - }); - - test('allows setting metadata via setMetadata', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - await thread.setMetadata({ userId: 'user123', department: 'sales' }); - - const metadata = await thread.getMetadata(); - expect(metadata.userId).toBe('user123'); - expect(metadata.department).toBe('sales'); - expect(Object.keys(metadata)).toHaveLength(2); - }); - - test('preserves existing metadata from constructor', async () => { - const existingMetadata = { userId: 'user456', team: 'engineering' }; - const thread = createThread(mockProvider, 'thrd_test123', undefined, existingMetadata); - - const metadata = await thread.getMetadata(); - expect(metadata).toEqual(existingMetadata); - expect(metadata.userId).toBe('user456'); - expect(metadata.team).toBe('engineering'); - }); - - test('supports complex metadata values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - await thread.setMetadata({ - config: { theme: 'dark', language: 'en' }, - tags: ['important', 'urgent'], - count: 42, - active: true, - }); - - const metadata = await thread.getMetadata(); - expect(metadata.config).toEqual({ theme: 'dark', language: 'en' }); - expect(metadata.tags).toEqual(['important', 'urgent']); - expect(metadata.count).toBe(42); - expect(metadata.active).toBe(true); - }); -}); - -describe('Session Metadata', () => { - const mockProvider = {} as ThreadProvider; - - test('initializes with empty metadata object', () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const session = new DefaultSession(thread, 'sess_test456'); - - expect(session.metadata).toBeDefined(); - expect(session.metadata).toEqual({}); - expect(Object.keys(session.metadata)).toHaveLength(0); - }); - - test('allows setting metadata properties directly', () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const session = new DefaultSession(thread, 'sess_test456'); - - session.metadata.userId = 'user123'; - session.metadata.requestType = 'chat'; - session.metadata.priority = 'high'; - - expect(session.metadata.userId).toBe('user123'); - expect(session.metadata.requestType).toBe('chat'); - expect(session.metadata.priority).toBe('high'); - expect(Object.keys(session.metadata)).toHaveLength(3); - }); - - test('preserves existing metadata from constructor', () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const existingMetadata = { userId: 'user456', source: 'api' }; - const session = new DefaultSession(thread, 'sess_test456', existingMetadata); - - expect(session.metadata).toEqual(existingMetadata); - expect(session.metadata.userId).toBe('user456'); - expect(session.metadata.source).toBe('api'); - }); - - test('session and thread metadata are independent', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const session = new DefaultSession(thread, 'sess_test456'); - - await thread.setMetadata({ threadProp: 'thread-value' }); - session.metadata.sessionProp = 'session-value'; - - const threadMeta = await thread.getMetadata(); - expect(threadMeta.threadProp).toBe('thread-value'); - expect(threadMeta.sessionProp).toBeUndefined(); - expect(session.metadata.sessionProp).toBe('session-value'); - expect(session.metadata.threadProp).toBeUndefined(); - }); - - test('supports overwriting metadata values', () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const session = new DefaultSession(thread, 'sess_test456'); - - session.metadata.status = 'pending'; - expect(session.metadata.status).toBe('pending'); - - session.metadata.status = 'completed'; - expect(session.metadata.status).toBe('completed'); - }); - - test('supports deleting metadata keys', () => { - const thread = createThread(mockProvider, 'thrd_test123'); - const session = new DefaultSession(thread, 'sess_test456'); - - session.metadata.tempKey = 'temporary'; - expect(session.metadata.tempKey).toBe('temporary'); - - delete session.metadata.tempKey; - expect(session.metadata.tempKey).toBeUndefined(); - expect(Object.keys(session.metadata)).toHaveLength(0); - }); -}); - -describe('Metadata Persistence Logic', () => { - test('empty metadata should be sent as undefined', () => { - const metadata = {}; - const shouldSend = Object.keys(metadata).length > 0 ? metadata : undefined; - - expect(shouldSend).toBeUndefined(); - }); - - test('non-empty metadata should be sent', () => { - const metadata = { userId: 'user123' }; - const shouldSend = Object.keys(metadata).length > 0 ? metadata : undefined; - - expect(shouldSend).toBeDefined(); - expect(shouldSend).toEqual({ userId: 'user123' }); - }); - - test('metadata with undefined values still counts as non-empty', () => { - const metadata = { userId: 'user123', optionalProp: undefined }; - const shouldSend = Object.keys(metadata).length > 0 ? metadata : undefined; - - expect(shouldSend).toBeDefined(); - expect(Object.keys(shouldSend!)).toHaveLength(2); - }); -}); - -describe('Metadata Type Safety', () => { - const mockProvider = {} as ThreadProvider; - - test('metadata accepts string values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - await thread.setMetadata({ stringValue: 'hello' }); - - const metadata = await thread.getMetadata(); - expect(typeof metadata.stringValue).toBe('string'); - }); - - test('metadata accepts number values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - await thread.setMetadata({ numberValue: 42 }); - - const metadata = await thread.getMetadata(); - expect(typeof metadata.numberValue).toBe('number'); - }); - - test('metadata accepts boolean values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - await thread.setMetadata({ booleanValue: true }); - - const metadata = await thread.getMetadata(); - expect(typeof metadata.booleanValue).toBe('boolean'); - }); - - test('metadata accepts array values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - await thread.setMetadata({ arrayValue: ['a', 'b', 'c'] }); - - const metadata = await thread.getMetadata(); - expect(Array.isArray(metadata.arrayValue)).toBe(true); - expect(metadata.arrayValue).toHaveLength(3); - }); - - test('metadata accepts object values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - await thread.setMetadata({ objectValue: { nested: { deep: 'value' } } }); - - const metadata = await thread.getMetadata(); - expect(typeof metadata.objectValue).toBe('object'); - expect((metadata.objectValue as Record>).nested.deep).toBe( - 'value' - ); - }); - - test('metadata accepts null values', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - await thread.setMetadata({ nullValue: null }); - - const metadata = await thread.getMetadata(); - expect(metadata.nullValue).toBeNull(); - }); -}); - -describe('Thread Serialization and Persistence', () => { - const mockProvider = {} as ThreadProvider; - - test('getSerializedState returns empty string when no state or metadata', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - const serialized = await thread.getSerializedState(); - expect(serialized).toBe(''); - }); - - test('getSerializedState includes only state when metadata is empty', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - await thread.state.set('key1', 'value1'); - - const serialized = await thread.getSerializedState(); - const parsed = JSON.parse(serialized); - - expect(parsed.state).toBeDefined(); - expect(parsed.state.key1).toBe('value1'); - expect(parsed.metadata).toBeUndefined(); - }); - - test('getSerializedState includes only metadata when state is empty', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - await thread.setMetadata({ userId: 'user123' }); - - const serialized = await thread.getSerializedState(); - const parsed = JSON.parse(serialized); - - expect(parsed.metadata).toBeDefined(); - expect(parsed.metadata.userId).toBe('user123'); - expect(parsed.state).toBeUndefined(); - }); - - test('getSerializedState includes both state and metadata when both exist', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - await thread.state.set('counter', 5); - await thread.setMetadata({ userId: 'user123' }); - - const serialized = await thread.getSerializedState(); - const parsed = JSON.parse(serialized); - - expect(parsed.state).toBeDefined(); - expect(parsed.state.counter).toBe(5); - expect(parsed.metadata).toBeDefined(); - expect(parsed.metadata.userId).toBe('user123'); - }); - - test('empty() returns true when both state and metadata are empty', async () => { - const thread = createThread(mockProvider, 'thrd_test123'); - - expect(await thread.empty()).toBe(true); - }); - - test('empty() returns false when state has data', async () => { - const thread = createThread(mockProvider, 'thrd_test123', { key: 'value' }); - - // Trigger load - await thread.state.get('key'); - - expect(await thread.empty()).toBe(false); - }); - - test('empty() returns false when metadata has data', async () => { - const thread = createThread(mockProvider, 'thrd_test123', undefined, { userId: 'user123' }); - - expect(await thread.empty()).toBe(false); - }); - - test('empty() returns false when both state and metadata have data', async () => { - const thread = createThread( - mockProvider, - 'thrd_test123', - { key: 'value' }, - { userId: 'user123' } - ); - - // Trigger load - await thread.state.get('key'); - - expect(await thread.empty()).toBe(false); - }); -}); diff --git a/packages/runtime/test/otel-attributes.test.ts b/packages/runtime/test/otel-attributes.test.ts deleted file mode 100644 index f506c1596..000000000 --- a/packages/runtime/test/otel-attributes.test.ts +++ /dev/null @@ -1,170 +0,0 @@ -/** - * Unit tests for OpenTelemetry span and log attributes. - * Verifies that agent metadata and thread ID are correctly set on logger context. - */ - -import { test, expect, describe } from 'bun:test'; -import { createAgent, runInAgentContext } from '../src/agent'; -import { z } from 'zod'; -import { TestAgentContext } from './helpers/test-context'; -import type { Logger } from '../src/logger'; - -// Track logger.child() calls to verify attributes -function createLoggerWithChildTracking(): { - logger: Logger; - childCalls: Record[]; -} { - const childCalls: Record[] = []; - const noop = () => {}; - - const createLogger = (attrs?: Record): Logger => { - if (attrs) { - childCalls.push(attrs); - } - return { - trace: noop, - debug: noop, - info: noop, - warn: noop, - error: noop, - fatal: (() => { - throw new Error('fatal'); - }) as Logger['fatal'], - child: (opts: Record) => createLogger(opts), - }; - }; - - return { logger: createLogger(), childCalls }; -} - -describe('OpenTelemetry Attributes', () => { - describe('Logger Attributes', () => { - test('logger.child() is called with @agentuity/threadId', async () => { - const { logger, childCalls } = createLoggerWithChildTracking(); - - const agent = createAgent('test-agent', { - schema: { - input: z.object({ value: z.string() }), - output: z.string(), - }, - handler: async (_ctx, input) => { - return `processed: ${input.value}`; - }, - }); - - const ctx = new TestAgentContext({ logger }); - ctx.thread.id = 'test-thread-123'; - await runInAgentContext(ctx, agent, { value: 'test' }); - - // Agent execution calls logger.child() with attributes - expect(childCalls.length).toBeGreaterThan(0); - - const attrs = childCalls[0]; - expect(attrs['@agentuity/threadId']).toBe('test-thread-123'); - }); - - test('logger.child() is called with @agentuity/agentId', async () => { - const { logger, childCalls } = createLoggerWithChildTracking(); - - const agent = createAgent('test-agent', { - schema: { - output: z.string(), - }, - handler: async () => { - return 'done'; - }, - }); - - const ctx = new TestAgentContext({ logger }); - await runInAgentContext(ctx, agent); - - expect(childCalls.length).toBeGreaterThan(0); - - const attrs = childCalls[0]; - expect(attrs['@agentuity/agentId']).toBeDefined(); - expect(attrs['@agentuity/agentName']).toBe('test-agent'); - }); - - test('logger.child() receives all agent metadata attributes', async () => { - const { logger, childCalls } = createLoggerWithChildTracking(); - - const agent = createAgent('metadata-test', { - description: 'Test agent for metadata verification', - schema: { - output: z.string(), - }, - handler: async () => { - return 'done'; - }, - }); - - const ctx = new TestAgentContext({ logger }); - ctx.thread.id = 'metadata-thread'; - await runInAgentContext(ctx, agent); - - expect(childCalls.length).toBeGreaterThan(0); - - const attrs = childCalls[0]; - - // Verify all expected attributes are passed to logger.child() - expect(attrs['@agentuity/agentId']).toBeDefined(); - expect(attrs['@agentuity/agentInstanceId']).toBeDefined(); - expect(attrs['@agentuity/agentDescription']).toBe('Test agent for metadata verification'); - expect(attrs['@agentuity/agentName']).toBe('metadata-test'); - expect(attrs['@agentuity/threadId']).toBe('metadata-thread'); - }); - - test('different threads have different threadId in logger attributes', async () => { - const tracking1 = createLoggerWithChildTracking(); - const tracking2 = createLoggerWithChildTracking(); - - const agent = createAgent('thread-test', { - schema: { - output: z.string(), - }, - handler: async () => { - return 'done'; - }, - }); - - // Run with first thread - const ctx1 = new TestAgentContext({ logger: tracking1.logger }); - ctx1.thread.id = 'thread-1'; - await runInAgentContext(ctx1, agent); - - // Run with second thread - const ctx2 = new TestAgentContext({ logger: tracking2.logger }); - ctx2.thread.id = 'thread-2'; - await runInAgentContext(ctx2, agent); - - expect(tracking1.childCalls.length).toBeGreaterThan(0); - expect(tracking2.childCalls.length).toBeGreaterThan(0); - - const attrs1 = tracking1.childCalls[0]; - const attrs2 = tracking2.childCalls[0]; - - expect(attrs1['@agentuity/threadId']).toBe('thread-1'); - expect(attrs2['@agentuity/threadId']).toBe('thread-2'); - }); - - test('threadId attribute matches context thread.id', async () => { - const { logger, childCalls } = createLoggerWithChildTracking(); - - const agent = createAgent('match-test', { - handler: async (ctx) => { - // Verify context has thread - expect(ctx.thread.id).toBe('verification-thread-xyz'); - }, - }); - - const ctx = new TestAgentContext({ logger }); - ctx.thread.id = 'verification-thread-xyz'; - await runInAgentContext(ctx, agent); - - expect(childCalls.length).toBeGreaterThan(0); - - const attrs = childCalls[0]; - expect(attrs['@agentuity/threadId']).toBe('verification-thread-xyz'); - }); - }); -}); diff --git a/packages/runtime/test/otel-tracestate.test.ts b/packages/runtime/test/otel-tracestate.test.ts deleted file mode 100644 index 6792ad092..000000000 --- a/packages/runtime/test/otel-tracestate.test.ts +++ /dev/null @@ -1,400 +0,0 @@ -/** - * Tests for enrichContextWithTraceState and its integration with the OTel SDK. - * - * The core problem being solved: - * Previously, traceState was set on a NonRecordingSpan *after* the recording - * span was created. The NonRecordingSpan is never exported, so ClickHouse's - * TraceState column was always empty. The fix moves traceState enrichment - * to *before* span creation so the recording span inherits it. - */ - -import { test, expect, describe, afterAll } from 'bun:test'; -import { context, trace, TraceFlags, ROOT_CONTEXT } from '@opentelemetry/api'; -import { TraceState } from '@opentelemetry/core'; -import { - BasicTracerProvider, - SimpleSpanProcessor, - InMemorySpanExporter, -} from '@opentelemetry/sdk-trace-base'; -import { AsyncLocalStorage } from 'node:async_hooks'; -import { - enrichContextWithTraceState, - generateTraceId, - generateSpanId, -} from '../src/otel/tracestate'; - -// ── Test infrastructure ────────────────────────────────────────────── - -// Minimal context manager using AsyncLocalStorage so context.active() works -// inside context.with() callbacks (the default NoopContextManager does not propagate) -const als = new AsyncLocalStorage(); -context.setGlobalContextManager({ - active: () => als.getStore() ?? ROOT_CONTEXT, - with ReturnType>( - ctx: import('@opentelemetry/api').Context, - fn: F, - thisArg?: ThisParameterType, - ...args: A - ): ReturnType { - return als.run(ctx, () => fn.call(thisArg, ...args)); - }, - bind(ctx: import('@opentelemetry/api').Context, fn: T): T { - if (typeof fn === 'function') { - const callable = fn as (...args: unknown[]) => unknown; - return ((...args: unknown[]) => als.run(ctx, () => callable(...args))) as T; - } - return fn; - }, - enable() { - return this; - }, - disable() { - return this; - }, -}); - -const exporter = new InMemorySpanExporter(); -const provider = new BasicTracerProvider({ - spanProcessors: [new SimpleSpanProcessor(exporter)], -}); -trace.setGlobalTracerProvider(provider); - -const tracer = trace.getTracer('test-tracer'); - -afterAll(async () => { - await provider.shutdown(); -}); - -// ── Helper utilities ───────────────────────────────────────────────── - -/** Parse a W3C tracestate serialisation into a plain object. */ -function parseTraceState(ts: { serialize(): string } | undefined): Record { - if (!ts) return {}; - const raw = ts.serialize(); - if (!raw) return {}; - const result: Record = {}; - for (const pair of raw.split(',')) { - const [k, v] = pair.split('='); - if (k && v) result[k.trim()] = v.trim(); - } - return result; -} - -// ── Unit tests for enrichContextWithTraceState ─────────────────────── - -describe('enrichContextWithTraceState', () => { - // -- Context-level tests (no real spans, just NonRecordingSpan) ----- - - describe('with valid parent span context (incoming traceparent)', () => { - test('enriches existing traceState on the parent', () => { - const parentSctx = { - traceId: 'aaaabbbbccccdddd1111222233334444', - spanId: 'aaaabbbbccccdddd', - traceFlags: TraceFlags.SAMPLED, - isRemote: true, - traceState: new TraceState('existing=value'), - }; - const parentCtx = trace.setSpan(ROOT_CONTEXT, trace.wrapSpanContext(parentSctx)); - - const enriched = enrichContextWithTraceState(parentCtx, { - pid: 'proj_123', - oid: 'org_456', - }); - - const span = trace.getSpan(enriched); - expect(span).toBeDefined(); - const sctx = span!.spanContext(); - - // Original traceId/spanId preserved - expect(sctx.traceId).toBe('aaaabbbbccccdddd1111222233334444'); - expect(sctx.spanId).toBe('aaaabbbbccccdddd'); - - // TraceState has both old and new entries - const ts = parseTraceState(sctx.traceState); - expect(ts['existing']).toBe('value'); - expect(ts['pid']).toBe('proj_123'); - expect(ts['oid']).toBe('org_456'); - }); - - test('preserves isRemote flag from parent', () => { - const parentSctx = { - traceId: 'aaaabbbbccccdddd1111222233334444', - spanId: 'aaaabbbbccccdddd', - traceFlags: TraceFlags.SAMPLED, - isRemote: true, - }; - const parentCtx = trace.setSpan(ROOT_CONTEXT, trace.wrapSpanContext(parentSctx)); - - const enriched = enrichContextWithTraceState(parentCtx, { pid: 'p' }); - const sctx = trace.getSpan(enriched)!.spanContext(); - expect(sctx.isRemote).toBe(true); - }); - }); - - describe('without valid parent span context (no incoming traceparent)', () => { - test('creates a synthetic remote parent with traceState', () => { - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: 'proj_abc', - oid: 'org_xyz', - d: '1', - }); - - const span = trace.getSpan(enriched); - expect(span).toBeDefined(); - const sctx = span!.spanContext(); - - // Should have valid IDs (32-char traceId, 16-char spanId) - expect(sctx.traceId).toHaveLength(32); - expect(sctx.spanId).toHaveLength(16); - expect(sctx.traceId).not.toBe('00000000000000000000000000000000'); - expect(sctx.spanId).not.toBe('0000000000000000'); - - // Marked as remote so the OTel SDK treats it as a valid parent - expect(sctx.isRemote).toBe(true); - expect(sctx.traceFlags).toBe(TraceFlags.SAMPLED); - - // TraceState has the entries - const ts = parseTraceState(sctx.traceState); - expect(ts['pid']).toBe('proj_abc'); - expect(ts['oid']).toBe('org_xyz'); - expect(ts['d']).toBe('1'); - }); - }); - - describe('entry filtering', () => { - test('skips undefined values', () => { - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: 'proj_1', - oid: undefined, - did: 'dep_1', - }); - - const ts = parseTraceState(trace.getSpan(enriched)!.spanContext().traceState); - expect(ts['pid']).toBe('proj_1'); - expect(ts['did']).toBe('dep_1'); - expect(ts['oid']).toBeUndefined(); - }); - - test('skips empty string values', () => { - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: '', - oid: 'org_1', - }); - - const ts = parseTraceState(trace.getSpan(enriched)!.spanContext().traceState); - expect(ts['pid']).toBeUndefined(); - expect(ts['oid']).toBe('org_1'); - }); - - test('handles empty entries (no-op)', () => { - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, {}); - - // Should still create a synthetic parent - const span = trace.getSpan(enriched); - expect(span).toBeDefined(); - // But traceState is empty - const ts = parseTraceState(span!.spanContext().traceState); - expect(Object.keys(ts)).toHaveLength(0); - }); - }); -}); - -// ── Integration tests: recording span inherits traceState ──────────── - -describe('Recording span inheritance (integration)', () => { - test('startActiveSpan inherits traceState from enriched parent (with incoming traceparent)', () => { - exporter.reset(); - - // Simulate incoming request with traceparent - const incomingParent = { - traceId: 'aabb00112233445566778899aabbccdd', - spanId: 'aabb001122334455', - traceFlags: TraceFlags.SAMPLED, - isRemote: true, - }; - const incomingCtx = trace.setSpan(ROOT_CONTEXT, trace.wrapSpanContext(incomingParent)); - - // Enrich BEFORE span creation - const enriched = enrichContextWithTraceState(incomingCtx, { - pid: 'proj_export_test', - oid: 'org_export_test', - did: 'dep_export_test', - d: '1', - }); - - // Create the recording span with the enriched context - const span = tracer.startSpan('test-server-span', {}, enriched); - span.end(); - - // Verify the EXPORTED span has traceState - const exportedSpans = exporter.getFinishedSpans(); - expect(exportedSpans).toHaveLength(1); - - const exported = exportedSpans[0]; - - // Should continue the incoming trace - expect(exported.spanContext().traceId).toBe('aabb00112233445566778899aabbccdd'); - - // The critical assertion: the exported span's traceState has our entries - const ts = parseTraceState(exported.spanContext().traceState); - expect(ts['pid']).toBe('proj_export_test'); - expect(ts['oid']).toBe('org_export_test'); - expect(ts['did']).toBe('dep_export_test'); - expect(ts['d']).toBe('1'); - }); - - test('startActiveSpan inherits traceState from enriched parent (no incoming traceparent)', () => { - exporter.reset(); - - // No incoming context — simulate fresh API request - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: 'proj_root', - oid: 'org_root', - }); - - // Create the recording span - const span = tracer.startSpan('test-root-span', {}, enriched); - span.end(); - - const exportedSpans = exporter.getFinishedSpans(); - expect(exportedSpans).toHaveLength(1); - - const exported = exportedSpans[0]; - - // Should have a valid (non-zero) traceId - expect(exported.spanContext().traceId).toHaveLength(32); - expect(exported.spanContext().traceId).not.toBe('00000000000000000000000000000000'); - - // The critical assertion: exported span carries traceState - const ts = parseTraceState(exported.spanContext().traceState); - expect(ts['pid']).toBe('proj_root'); - expect(ts['oid']).toBe('org_root'); - }); - - test('startActiveSpan (4-arg overload) inherits traceState', async () => { - exporter.reset(); - - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: 'proj_4arg', - aid: 'agent_123', - }); - - let capturedTraceState: Record = {}; - - await tracer.startActiveSpan('test-4arg-span', {}, enriched, async (span) => { - // Inside the callback, the recording span should have traceState - capturedTraceState = parseTraceState(span.spanContext().traceState); - span.end(); - }); - - // Verify from inside the callback - expect(capturedTraceState['pid']).toBe('proj_4arg'); - expect(capturedTraceState['aid']).toBe('agent_123'); - - // Also verify the exported span - const exportedSpans = exporter.getFinishedSpans(); - expect(exportedSpans).toHaveLength(1); - const ts = parseTraceState(exportedSpans[0].spanContext().traceState); - expect(ts['pid']).toBe('proj_4arg'); - expect(ts['aid']).toBe('agent_123'); - }); - - test('child span inherits traceState from parent recording span', async () => { - exporter.reset(); - - const enriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: 'proj_child', - oid: 'org_child', - }); - - await tracer.startActiveSpan('parent-span', {}, enriched, async (parentSpan) => { - // Create a child span within the parent's context - const childSpan = tracer.startSpan('child-span'); - childSpan.end(); - parentSpan.end(); - }); - - const exportedSpans = exporter.getFinishedSpans(); - expect(exportedSpans).toHaveLength(2); - - // Both parent and child should have the same traceState - for (const exported of exportedSpans) { - const ts = parseTraceState(exported.spanContext().traceState); - expect(ts['pid']).toBe('proj_child'); - expect(ts['oid']).toBe('org_child'); - } - - // And they should share the same traceId - const traceIds = new Set(exportedSpans.map((s) => s.spanContext().traceId)); - expect(traceIds.size).toBe(1); - }); - - test('agent span enrichment adds aid while preserving parent traceState', async () => { - exporter.reset(); - - // Step 1: Middleware enriches context with pid/oid (simulating our middleware fix) - const middlewareEnriched = enrichContextWithTraceState(ROOT_CONTEXT, { - pid: 'proj_mid', - oid: 'org_mid', - }); - - await tracer.startActiveSpan( - 'http-server-span', - {}, - middlewareEnriched, - async (serverSpan) => { - // Step 2: Agent execution enriches context with aid (simulating agent.ts fix) - const agentEnriched = enrichContextWithTraceState(context.active(), { - aid: 'agent_42', - pid: 'proj_mid', - oid: 'org_mid', - }); - - const agentSpan = tracer.startSpan('agent.run', {}, agentEnriched); - agentSpan.end(); - serverSpan.end(); - } - ); - - const exportedSpans = exporter.getFinishedSpans(); - expect(exportedSpans).toHaveLength(2); - - // Server span should have pid/oid but NOT aid - const serverExported = exportedSpans.find((s) => s.name === 'http-server-span')!; - const serverTs = parseTraceState(serverExported.spanContext().traceState); - expect(serverTs['pid']).toBe('proj_mid'); - expect(serverTs['oid']).toBe('org_mid'); - expect(serverTs['aid']).toBeUndefined(); - - // Agent span should have pid/oid AND aid - const agentExported = exportedSpans.find((s) => s.name === 'agent.run')!; - const agentTs = parseTraceState(agentExported.spanContext().traceState); - expect(agentTs['pid']).toBe('proj_mid'); - expect(agentTs['oid']).toBe('org_mid'); - expect(agentTs['aid']).toBe('agent_42'); - }); -}); - -// ── Unit tests for ID generation helpers ───────────────────────────── - -describe('ID generation', () => { - test('generateTraceId produces 32-char hex string', () => { - const id = generateTraceId(); - expect(id).toHaveLength(32); - expect(id).toMatch(/^[0-9a-f]{32}$/); - }); - - test('generateSpanId produces 16-char hex string', () => { - const id = generateSpanId(); - expect(id).toHaveLength(16); - expect(id).toMatch(/^[0-9a-f]{16}$/); - }); - - test('generated IDs are unique', () => { - const ids = new Set(); - for (let i = 0; i < 100; i++) { - ids.add(generateTraceId()); - } - expect(ids.size).toBe(100); - }); -}); diff --git a/packages/runtime/test/router-type-inference.test.ts b/packages/runtime/test/router-type-inference.test.ts deleted file mode 100644 index 10b4398f1..000000000 --- a/packages/runtime/test/router-type-inference.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Tests for createRouter type inference. - * Verifies that context variables (especially thread, session) are properly typed. - */ - -import { test, expect, describe } from 'bun:test'; -import { createRouter } from '../src/router'; -import type { Thread, Session } from '../src/session'; - -describe('Router Type Inference', () => { - test('thread should be typed as Thread, not any', async () => { - const router = createRouter(); - - router.get('/test', (c) => { - // This test validates compile-time type inference - // If thread is typed as `any`, the following will NOT cause type errors: - const thread = c.var.thread; - - // Type assertion test - should compile if thread is Thread - const _typeCheck: Thread = thread; - - // Access Thread properties - should have IntelliSense - const threadId: string = thread.id; - const _threadState: Map = thread.state; - - // These should be type errors if thread is properly typed: - // thread.nonExistentProperty; // Should error - // thread.id = 123; // Should error (id is string) - - return c.json({ threadId }); - }); - - expect(true).toBe(true); - }); - - test('session should be typed as Session, not any', async () => { - const router = createRouter(); - - router.post('/test', (c) => { - const session = c.var.session; - - // Type assertion test - should compile if session is Session - const _typeCheck: Session = session; - - // Access Session properties - const sessionId: string = session.id; - const _thread: Thread = session.thread; - const _sessionState: Map = session.state; - - return c.json({ sessionId }); - }); - - expect(true).toBe(true); - }); - - test('sessionId should be typed as string, not any', async () => { - const router = createRouter(); - - router.get('/session', (c) => { - const sessionId = c.var.sessionId; - - // Type assertion test - const _typeCheck: string = sessionId; - - // Should be able to use string methods - const upper: string = sessionId.toUpperCase(); - - return c.json({ sessionId: upper }); - }); - - expect(true).toBe(true); - }); - - test('all context variables should have proper types', async () => { - const router = createRouter(); - - router.post('/full', async (c) => { - // Extract all variables and verify types - const { - logger: _logger, - tracer: _tracer, - meter: _meter, - sessionId, - thread, - session, - kv: _kv, - stream: _stream, - vector: _vector, - app: _app, - } = c.var; - - // Type checks (compile-time validation) - const _threadCheck: Thread = thread; - const _sessionCheck: Session = session; - const _sessionIdCheck: string = sessionId; - - // Verify Thread interface works - expect(typeof thread.id).toBe('string'); - expect(thread.state).toBeInstanceOf(Map); - - // Verify Session interface works - expect(typeof session.id).toBe('string'); - expect(session.thread).toBe(thread); - expect(session.state).toBeInstanceOf(Map); - - return c.json({ success: true }); - }); - - // This test passes if it compiles - no need to execute - expect(true).toBe(true); - }); -}); diff --git a/packages/runtime/test/router-validator.test.ts b/packages/runtime/test/router-validator.test.ts deleted file mode 100644 index 49f2f7e32..000000000 --- a/packages/runtime/test/router-validator.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { createRouter, validator } from '../src/index'; -import { s } from '@agentuity/schema'; - -describe('createRouter with validator', () => { - test('validator works with createRouter (not Hono)', async () => { - const router = createRouter(); - - const createUserSchema = s.object({ - name: s.string(), - email: s.string(), - age: s.number(), - }); - - router.post('/', validator({ input: createUserSchema }), async (c) => { - const data = c.req.valid('json'); - return c.json({ - success: true, - user: data, - }); - }); - - // Valid request - const validRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com', age: 30 }), - }); - expect(validRes.status).toBe(200); - const validData = await validRes.json(); - expect(validData).toEqual({ - success: true, - user: { name: 'Alice', email: 'alice@example.com', age: 30 }, - }); - - // Invalid request - missing age - const invalidRes = await router.request('/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Bob', email: 'bob@example.com' }), - }); - expect(invalidRes.status).toBe(400); - const errorData = await invalidRes.json(); - expect(errorData.error).toBe('Validation failed'); - }); -}); diff --git a/packages/runtime/test/routes.test.ts b/packages/runtime/test/routes.test.ts deleted file mode 100644 index e8ce8dead..000000000 --- a/packages/runtime/test/routes.test.ts +++ /dev/null @@ -1,377 +0,0 @@ -/** - * Unit tests for route handlers and HTTP integration. - * Tests routes without starting a real server using app.request(). - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import { createAgent } from '../src/agent'; -import { z } from 'zod'; - -describe('Route Handler Tests', () => { - describe('Basic GET/POST routes', () => { - test('GET route returns JSON', async () => { - const app = new Hono().get('/hello', (c) => { - return c.json({ message: 'Hello, World!' }); - }); - - const res = await app.request('/hello', { method: 'GET' }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ message: 'Hello, World!' }); - }); - - test('POST route with JSON body', async () => { - const app = new Hono(); - - app.post('/echo', async (c) => { - const body = await c.req.json(); - return c.json({ received: body }); - }); - - const res = await app.request('/echo', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Test', value: 123 }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ - received: { name: 'Test', value: 123 }, - }); - }); - - test('Route with path parameters', async () => { - const app = new Hono(); - - app.get('/users/:id', (c) => { - const id = c.req.param('id'); - return c.json({ userId: id }); - }); - - const res = await app.request('/users/123', { method: 'GET' }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ userId: '123' }); - }); - - test('Route with query parameters', async () => { - const app = new Hono(); - - app.get('/search', (c) => { - const query = c.req.query('q'); - return c.json({ query }); - }); - - const res = await app.request('/search?q=test%20search', { method: 'GET' }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ query: 'test search' }); - }); - }); - - describe('Error handling', () => { - test('404 for non-existent route', async () => { - const app = new Hono(); - - app.get('/exists', (_c) => _c.json({ ok: true })); - - const res = await app.request('/does-not-exist', { method: 'GET' }); - - expect(res.status).toBe(404); - }); - - test('Route throws error returns 500', async () => { - const app = new Hono(); - - app.get('/error', (_c) => { - throw new Error('Test error'); - }); - - app.onError((err, c) => { - return c.json({ error: err.message }, 500); - }); - - const res = await app.request('/error', { method: 'GET' }); - - expect(res.status).toBe(500); - const data = await res.json(); - expect(data).toEqual({ error: 'Test error' }); - }); - }); - - describe('Middleware', () => { - test('Middleware adds header', async () => { - const app = new Hono(); - - app.use('*', async (c, next) => { - c.header('X-Custom-Header', 'test-value'); - await next(); - }); - - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { method: 'GET' }); - - expect(res.status).toBe(200); - expect(res.headers.get('X-Custom-Header')).toBe('test-value'); - }); - - test('Middleware can short-circuit', async () => { - const app = new Hono(); - - app.use('/protected/*', async (c, next) => { - const auth = c.req.header('Authorization'); - if (!auth) { - return c.json({ error: 'Unauthorized' }, 401); - } - await next(); - }); - - app.get('/protected/resource', (c) => c.json({ data: 'secret' })); - - // Without auth header - const unauthorizedRes = await app.request('/protected/resource', { method: 'GET' }); - expect(unauthorizedRes.status).toBe(401); - const errData = await unauthorizedRes.json(); - expect(errData).toEqual({ error: 'Unauthorized' }); - }); - }); - - describe('Content-Type handling', () => { - test('JSON response sets correct Content-Type', async () => { - const app = new Hono(); - - app.get('/json', (c) => c.json({ type: 'json' })); - - const res = await app.request('/json', { method: 'GET' }); - - expect(res.headers.get('Content-Type')).toContain('application/json'); - }); - - test('Text response', async () => { - const app = new Hono(); - - app.get('/text', (c) => c.text('Hello, World!')); - - const res = await app.request('/text', { method: 'GET' }); - - expect(res.status).toBe(200); - const contentType = res.headers.get('Content-Type'); - if (contentType) { - expect(contentType).toContain('text/plain'); - } - const text = await res.text(); - expect(text).toBe('Hello, World!'); - }); - - test('HTML response', async () => { - const app = new Hono(); - - app.get('/html', (c) => c.html('

Hello

')); - - const res = await app.request('/html', { method: 'GET' }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Type')).toContain('text/html'); - const html = await res.text(); - expect(html).toBe('

Hello

'); - }); - }); - - describe('Agent validator middleware', () => { - test('validator validates input only (no output schema)', async () => { - const agent = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string(), age: z.number() }), - }, - handler: async (_ctx, _input) => {}, - }); - - const app = new Hono(); - app.post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.json({ received: data }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', age: 30 }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ - received: { name: 'Alice', age: 30 }, - }); - }); - - test('validator validates both input and output', async () => { - const agent = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string(), age: z.number() }), - output: z.object({ result: z.string() }), - }, - handler: async (_ctx, input) => ({ result: `${input.name} is ${input.age}` }), - }); - - const app = new Hono(); - app.post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - // Return valid output matching schema - return c.json({ result: `${data.name} is ${data.age}` }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', age: 30 }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ result: 'Alice is 30' }); - }); - - test('validator rejects invalid input', async () => { - const agent = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string(), age: z.number() }), - output: z.string(), - }, - handler: async (_ctx, input) => `${input.name} is ${input.age}`, - }); - - const app = new Hono(); - app.post('/test', agent.validator(), async (c) => { - const data = c.req.valid('json'); - return c.text(`${data.name} is ${data.age}`); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', age: 'thirty' }), // Invalid: age should be number - }); - - expect(res.status).toBe(400); - const _data = (await res.json()) as { error: string }; - expect(_data.error).toBe('Validation failed'); - }); - - test('validator rejects invalid output', async () => { - const agent = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string() }), - output: z.object({ greeting: z.string() }), - }, - handler: async (_ctx, input) => ({ greeting: `Hello, ${input.name}` }), - }); - - const app = new Hono(); - - // Add error handler to catch output validation errors - app.onError((err, c) => { - return c.json({ error: err.message }, 500); - }); - - app.post('/test', agent.validator(), async (c) => { - const _data = c.req.valid('json'); - // Return INVALID output (wrong shape) - return c.json({ wrong: 'field' }); - }); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice' }), - }); - - // Should fail with 500 due to output validation error - expect(res.status).toBe(500); - const _data = (await res.json()) as { error: string }; - expect(_data.error).toContain('Output validation failed'); - }); - - test('validator with custom input schema override (no output)', async () => { - const agent = createAgent('test-agent', { - schema: { - input: z.object({ name: z.string() }), - }, - handler: async (_ctx, _input) => {}, - }); - - const app = new Hono(); - app.post( - '/custom', - // Override input schema, no output schema - agent.validator({ - input: z.object({ id: z.string(), value: z.number() }), - }), - async (c) => { - const data = c.req.valid('json'); - return c.json({ received: data }); - } - ); - - const res = await app.request('/custom', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ id: 'test-id', value: 42 }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ - received: { id: 'test-id', value: 42 }, - }); - }); - }); - - describe('Response status codes', () => { - test('Custom status codes', async () => { - const app = new Hono(); - - app.post('/create', (c) => c.json({ created: true }, 201)); - app.delete('/delete', (c) => c.body(null, 204)); - app.get('/redirect', (c) => c.redirect('/new-location', 302)); - - const createRes = await app.request('/create', { method: 'POST' }); - expect(createRes.status).toBe(201); - - const deleteRes = await app.request('/delete', { method: 'DELETE' }); - expect(deleteRes.status).toBe(204); - - const redirectRes = await app.request('/redirect', { method: 'GET' }); - expect(redirectRes.status).toBe(302); - }); - }); - - describe('Multiple routes', () => { - test('Router with multiple HTTP methods on same path', async () => { - const app = new Hono(); - - app.get('/resource', (c) => c.json({ method: 'GET' })); - app.post('/resource', (c) => c.json({ method: 'POST' })); - app.put('/resource', (c) => c.json({ method: 'PUT' })); - app.delete('/resource', (c) => c.json({ method: 'DELETE' })); - - const getRes = await app.request('/resource', { method: 'GET' }); - expect(((await getRes.json()) as { method: string }).method).toBe('GET'); - - const postRes = await app.request('/resource', { method: 'POST' }); - expect(((await postRes.json()) as { method: string }).method).toBe('POST'); - - const putRes = await app.request('/resource', { method: 'PUT' }); - expect(((await putRes.json()) as { method: string }).method).toBe('PUT'); - - const deleteRes = await app.request('/resource', { method: 'DELETE' }); - expect(((await deleteRes.json()) as { method: string }).method).toBe('DELETE'); - }); - }); -}); diff --git a/packages/runtime/test/sandbox-snapshot.test.ts b/packages/runtime/test/sandbox-snapshot.test.ts deleted file mode 100644 index 3f2516e75..000000000 --- a/packages/runtime/test/sandbox-snapshot.test.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { describe, test, expect, beforeEach, afterEach } from 'bun:test'; -import { HTTPSandboxService } from '../src/services/sandbox/http'; -import { APIClient } from '@agentuity/server'; -import { mockFetch, createMockLogger } from '@agentuity/test-utils'; - -describe('HTTPSandboxService.snapshot', () => { - const originalEnv = { ...process.env }; - - beforeEach(() => { - process.env.AGENTUITY_SDK_KEY = 'test-sdk-key'; - process.env.AGENTUITY_STREAM_URL = 'https://sandbox.example.com'; - }); - - afterEach(() => { - process.env = { ...originalEnv }; - }); - - function createService(): HTTPSandboxService { - const client = new APIClient('https://api.example.com', createMockLogger(), 'test-api-key'); - return new HTTPSandboxService(client, 'https://stream.example.com'); - } - - describe('snapshot.create', () => { - test('should create a snapshot from a sandbox', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'POST' && url.includes('/snapshot')) { - return new Response( - JSON.stringify({ - success: true, - data: { - snapshotId: 'snp_123', - name: 'test-snapshot', - tag: 'latest', - sizeBytes: 1024, - fileCount: 10, - createdAt: '2025-01-26T12:00:00Z', - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const snapshot = await service.snapshot.create('sbx_abc123'); - - expect(snapshot.snapshotId).toBe('snp_123'); - expect(snapshot.name).toBe('test-snapshot'); - expect(snapshot.tag).toBe('latest'); - expect(snapshot.sizeBytes).toBe(1024); - expect(snapshot.fileCount).toBe(10); - }); - - test('should create a snapshot with options', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'POST' && url.includes('/snapshot')) { - const body = JSON.parse(opts.body as string); - expect(body.name).toBe('my-snapshot'); - expect(body.description).toBe('Test description'); - expect(body.tag).toBe('v1.0'); - expect(body.public).toBe(true); - - return new Response( - JSON.stringify({ - success: true, - data: { - snapshotId: 'snp_456', - name: 'my-snapshot', - description: 'Test description', - tag: 'v1.0', - public: true, - sizeBytes: 2048, - fileCount: 20, - createdAt: '2025-01-26T12:00:00Z', - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const snapshot = await service.snapshot.create('sbx_abc123', { - name: 'my-snapshot', - description: 'Test description', - tag: 'v1.0', - public: true, - }); - - expect(snapshot.snapshotId).toBe('snp_456'); - expect(snapshot.name).toBe('my-snapshot'); - expect(snapshot.description).toBe('Test description'); - expect(snapshot.tag).toBe('v1.0'); - expect(snapshot.public).toBe(true); - }); - }); - - describe('snapshot.get', () => { - test('should get snapshot details', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'GET' && url.includes('/snapshots/snp_123')) { - return new Response( - JSON.stringify({ - success: true, - data: { - snapshotId: 'snp_123', - name: 'test-snapshot', - tag: 'latest', - sizeBytes: 1024, - fileCount: 10, - createdAt: '2025-01-26T12:00:00Z', - files: [ - { - path: 'index.ts', - size: 256, - sha256: 'abc123', - contentType: 'text/typescript', - mode: 420, - }, - ], - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const snapshot = await service.snapshot.get('snp_123'); - - expect(snapshot.snapshotId).toBe('snp_123'); - expect(snapshot.name).toBe('test-snapshot'); - expect(snapshot.files).toHaveLength(1); - expect(snapshot.files?.[0].path).toBe('index.ts'); - }); - }); - - describe('snapshot.list', () => { - test('should list snapshots', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'GET' && url.includes('/snapshots')) { - return new Response( - JSON.stringify({ - success: true, - data: { - snapshots: [ - { - snapshotId: 'snp_123', - name: 'snapshot-1', - tag: 'latest', - sizeBytes: 1024, - fileCount: 10, - createdAt: '2025-01-26T12:00:00Z', - }, - { - snapshotId: 'snp_456', - name: 'snapshot-2', - tag: 'v1.0', - sizeBytes: 2048, - fileCount: 20, - createdAt: '2025-01-25T12:00:00Z', - }, - ], - total: 2, - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const result = await service.snapshot.list(); - - expect(result.snapshots).toHaveLength(2); - expect(result.total).toBe(2); - expect(result.snapshots[0].snapshotId).toBe('snp_123'); - expect(result.snapshots[1].snapshotId).toBe('snp_456'); - }); - - test('should list snapshots with filters', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'GET' && url.includes('/snapshots')) { - const urlObj = new URL(url); - expect(urlObj.searchParams.get('sandboxId')).toBe('sbx_abc123'); - expect(urlObj.searchParams.get('limit')).toBe('10'); - expect(urlObj.searchParams.get('offset')).toBe('5'); - - return new Response( - JSON.stringify({ - success: true, - data: { - snapshots: [ - { - snapshotId: 'snp_789', - name: 'filtered-snapshot', - sizeBytes: 512, - fileCount: 5, - createdAt: '2025-01-26T12:00:00Z', - }, - ], - total: 1, - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const result = await service.snapshot.list({ - sandboxId: 'sbx_abc123', - limit: 10, - offset: 5, - }); - - expect(result.snapshots).toHaveLength(1); - expect(result.snapshots[0].snapshotId).toBe('snp_789'); - }); - - test('should handle empty snapshot list', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'GET' && url.includes('/snapshots')) { - return new Response( - JSON.stringify({ - success: true, - data: { - snapshots: [], - total: 0, - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const result = await service.snapshot.list(); - - expect(result.snapshots).toHaveLength(0); - expect(result.total).toBe(0); - }); - }); - - describe('snapshot.delete', () => { - test('should delete a snapshot', async () => { - let deleteWasCalled = false; - - mockFetch(async (url, opts) => { - if (opts?.method === 'DELETE' && url.includes('/snapshots/snp_123')) { - deleteWasCalled = true; - return new Response( - JSON.stringify({ - success: true, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - await service.snapshot.delete('snp_123'); - - expect(deleteWasCalled).toBe(true); - }); - }); - - describe('snapshot.tag', () => { - test('should add a tag to a snapshot', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'PATCH' && url.includes('/snapshots/snp_123')) { - const body = JSON.parse(opts.body as string); - expect(body.tag).toBe('production'); - - return new Response( - JSON.stringify({ - success: true, - data: { - snapshotId: 'snp_123', - name: 'test-snapshot', - tag: 'production', - sizeBytes: 1024, - fileCount: 10, - createdAt: '2025-01-26T12:00:00Z', - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const snapshot = await service.snapshot.tag('snp_123', 'production'); - - expect(snapshot.snapshotId).toBe('snp_123'); - expect(snapshot.tag).toBe('production'); - }); - - test('should remove a tag from a snapshot', async () => { - mockFetch(async (url, opts) => { - if (opts?.method === 'PATCH' && url.includes('/snapshots/snp_123')) { - const body = JSON.parse(opts.body as string); - expect(body.tag).toBeNull(); - - return new Response( - JSON.stringify({ - success: true, - data: { - snapshotId: 'snp_123', - name: 'test-snapshot', - tag: null, - sizeBytes: 1024, - fileCount: 10, - createdAt: '2025-01-26T12:00:00Z', - }, - }), - { status: 200, headers: { 'content-type': 'application/json' } } - ); - } - return new Response(null, { status: 404 }); - }); - - const service = createService(); - const snapshot = await service.snapshot.tag('snp_123', null); - - expect(snapshot.snapshotId).toBe('snp_123'); - expect(snapshot.tag).toBeNull(); - }); - }); - - describe('snapshot property', () => { - test('should expose snapshot service on HTTPSandboxService', () => { - const service = createService(); - - expect(service.snapshot).toBeDefined(); - expect(typeof service.snapshot.create).toBe('function'); - expect(typeof service.snapshot.get).toBe('function'); - expect(typeof service.snapshot.list).toBe('function'); - expect(typeof service.snapshot.delete).toBe('function'); - expect(typeof service.snapshot.tag).toBe('function'); - }); - }); -}); diff --git a/packages/runtime/test/sse-async-fetch.test.ts b/packages/runtime/test/sse-async-fetch.test.ts deleted file mode 100644 index 3ff24a848..000000000 --- a/packages/runtime/test/sse-async-fetch.test.ts +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Tests for SSE handler compatibility with async fetch operations. - * - * Verifies that the SSE handler correctly handles async operations that - * consume ReadableStreams internally (like AI SDK's generateText/generateObject). - * - * The fix makes the SSE callback fire-and-forget (not awaited by Hono's streamSSE), - * matching the behavior of the stream() handler. - * - * Related to: https://github.com/agentuity/sdk/issues/471 - */ - -import { test, expect, describe } from 'bun:test'; -import { Hono } from 'hono'; -import { sse } from '../src/handlers/sse'; - -/** - * Helper to read SSE response body as a stream and collect all messages. - * This properly handles the streaming nature of SSE responses. - */ -async function collectSSEMessages(response: Response, timeoutMs = 2000): Promise { - const messages: string[] = []; - - if (!response.body) { - return messages; - } - - const reader = response.body.getReader(); - const decoder = new TextDecoder(); - const startTime = Date.now(); - - try { - while (Date.now() - startTime < timeoutMs) { - const { done, value } = await reader.read(); - if (done) break; - - const text = decoder.decode(value, { stream: true }); - // Parse SSE messages (split by double newline) - const parts = text.split('\n\n').filter((p) => p.trim()); - for (const part of parts) { - const dataLine = part.split('\n').find((l) => l.startsWith('data:')); - if (dataLine) { - messages.push(dataLine.slice(5).trim()); - } - } - } - } catch { - // Stream may be closed, that's ok - } finally { - reader.releaseLock(); - } - - return messages; -} - -describe('SSE Handler - Async Fetch Compatibility', () => { - test('SSE handler allows async operations that consume ReadableStreams', async () => { - const app = new Hono(); - const handlerExecuted: string[] = []; - - app.get( - '/sse', - sse(async (_c, stream) => { - // Simulate what AI SDK's generateText does: - // 1. Make a fetch request - // 2. Get a Response with a ReadableStream body - // 3. Consume the stream to get the result - const simulateFetch = async (): Promise => { - // Create a ReadableStream (simulating fetch response body) - const responseStream = new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode('AI response data')); - controller.close(); - }, - }); - - // Consume the stream (simulating .text() or .json() on fetch response) - const reader = responseStream.getReader(); - const chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(value); - } - - // Decode and return - const combined = new Uint8Array(chunks.reduce((acc, c) => acc + c.length, 0)); - let offset = 0; - for (const chunk of chunks) { - combined.set(chunk, offset); - offset += chunk.length; - } - return new TextDecoder().decode(combined); - }; - - // This should NOT throw "ReadableStream has already been used" - const result = await simulateFetch(); - handlerExecuted.push(result); - - // Write result to SSE stream - await stream.writeSSE({ data: result, event: 'result' }); - stream.close(); - }) - ); - - // Make SSE request - const response = await app.request('/sse'); - - expect(response.status).toBe(200); - expect(response.headers.get('content-type')).toBe('text/event-stream'); - - // Collect SSE messages from the stream - const messages = await collectSSEMessages(response); - - // Verify the async operation completed and data was written - expect(messages).toContain('AI response data'); - expect(handlerExecuted).toContain('AI response data'); - }); - - test('SSE handler works with multiple sequential async operations', async () => { - const app = new Hono(); - - app.get( - '/sse-multi', - sse(async (_c, stream) => { - // Multiple async operations consuming different streams - for (let i = 0; i < 3; i++) { - const responseStream = new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode(`chunk-${i}`)); - controller.close(); - }, - }); - - // Consume stream - const reader = responseStream.getReader(); - const { value } = await reader.read(); - const text = new TextDecoder().decode(value); - - await stream.writeSSE({ data: text, event: 'chunk' }); - } - - stream.close(); - }) - ); - - const response = await app.request('/sse-multi'); - expect(response.status).toBe(200); - - const messages = await collectSSEMessages(response); - expect(messages).toContain('chunk-0'); - expect(messages).toContain('chunk-1'); - expect(messages).toContain('chunk-2'); - }); - - test('SSE handler completion tracking works with async operations', async () => { - const app = new Hono(); - let handlerCompleted = false; - - app.get( - '/sse-complete', - sse(async (_c, stream) => { - // Simulate async work - await new Promise((resolve) => setTimeout(resolve, 10)); - await stream.writeSSE({ data: 'message' }); - handlerCompleted = true; - stream.close(); - }) - ); - - const response = await app.request('/sse-complete'); - expect(response.status).toBe(200); - - // Read the stream to ensure handler completes - const messages = await collectSSEMessages(response); - expect(messages).toContain('message'); - - // Handler should have completed - expect(handlerCompleted).toBe(true); - }); - - test('SSE handler pattern test - fire-and-forget execution', async () => { - // This test verifies the fire-and-forget pattern works correctly - // by checking that async operations inside the handler complete - // without blocking the response creation - - const executionOrder: string[] = []; - - const app = new Hono(); - - app.get( - '/sse-pattern', - sse(async (_c, stream) => { - executionOrder.push('handler-start'); - - // Simulate async work (like generateText) - await new Promise((resolve) => setTimeout(resolve, 20)); - executionOrder.push('async-work-done'); - - await stream.writeSSE({ data: 'done' }); - executionOrder.push('message-written'); - - stream.close(); - executionOrder.push('stream-closed'); - }) - ); - - const response = await app.request('/sse-pattern'); - - // Response should be available immediately (fire-and-forget) - expect(response.status).toBe(200); - expect(response.headers.get('content-type')).toBe('text/event-stream'); - - // But we need to consume the stream to let the handler complete - const messages = await collectSSEMessages(response); - expect(messages).toContain('done'); - - // Verify execution order - expect(executionOrder).toEqual([ - 'handler-start', - 'async-work-done', - 'message-written', - 'stream-closed', - ]); - }); -}); - -describe('SSE Handler - Error Handling', () => { - test('SSE handler errors do not crash the server', async () => { - const app = new Hono(); - - app.get( - '/sse-error', - sse(async (_c, stream) => { - // Write initial message before error - await stream.writeSSE({ data: 'started' }); - - // Simulate an async operation that throws - await new Promise((resolve) => setTimeout(resolve, 10)); - throw new Error('Simulated async error'); - }) - ); - - // Make SSE request - should not throw - const response = await app.request('/sse-error'); - - // Response should be successful (SSE is fire-and-forget) - expect(response.status).toBe(200); - - // Read whatever was sent before the error - const messages = await collectSSEMessages(response, 500); - expect(messages).toContain('started'); - }); -}); - -describe('SSE Handler - Auto-close Behavior', () => { - test('stream is auto-closed when handler completes without calling close()', async () => { - const app = new Hono(); - let handlerCompleted = false; - - app.get( - '/sse-no-close', - sse(async (_c, stream) => { - await stream.writeSSE({ data: 'message 1' }); - await stream.writeSSE({ data: 'message 2' }); - handlerCompleted = true; - // Note: NOT calling stream.close() - should auto-close - }) - ); - - const response = await app.request('/sse-no-close'); - expect(response.status).toBe(200); - - // Stream should complete and return all messages even without explicit close() - const messages = await collectSSEMessages(response); - expect(messages).toContain('message 1'); - expect(messages).toContain('message 2'); - expect(handlerCompleted).toBe(true); - }); - - test('stream closes immediately when close() is called explicitly', async () => { - const app = new Hono(); - const executionOrder: string[] = []; - - app.get( - '/sse-explicit-close', - sse(async (_c, stream) => { - executionOrder.push('before-write'); - await stream.writeSSE({ data: 'message' }); - executionOrder.push('after-write'); - stream.close(); - executionOrder.push('after-close'); - }) - ); - - const response = await app.request('/sse-explicit-close'); - expect(response.status).toBe(200); - - const messages = await collectSSEMessages(response); - expect(messages).toContain('message'); - expect(executionOrder).toEqual(['before-write', 'after-write', 'after-close']); - }); - - test('messages written before handler returns are all received', async () => { - const app = new Hono(); - - app.get( - '/sse-multiple-messages', - sse(async (_c, stream) => { - // Write multiple messages without explicit close - for (let i = 1; i <= 5; i++) { - await stream.writeSSE({ data: `message ${i}` }); - } - // No close() call - rely on auto-close - }) - ); - - const response = await app.request('/sse-multiple-messages'); - expect(response.status).toBe(200); - - const messages = await collectSSEMessages(response); - expect(messages.length).toBe(5); - expect(messages).toEqual(['message 1', 'message 2', 'message 3', 'message 4', 'message 5']); - }); -}); diff --git a/packages/runtime/test/sse-done-promise.test.ts b/packages/runtime/test/sse-done-promise.test.ts deleted file mode 100644 index 9bf75db5d..000000000 --- a/packages/runtime/test/sse-done-promise.test.ts +++ /dev/null @@ -1,288 +0,0 @@ -/** - * Tests for SSE handler donePromise resolution. - * - * Verifies that the SSE handler correctly calls markDone() when the handler - * completes, ensuring the donePromise resolves for deferred session/thread saving. - * - * Related to: https://github.com/agentuity/sdk/issues/473 - */ - -import { test, expect, describe } from 'bun:test'; -import { STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY } from '../src/handlers'; - -describe('SSE Done Promise Constants', () => { - test('STREAM_DONE_PROMISE_KEY is defined', () => { - expect(STREAM_DONE_PROMISE_KEY).toBe('_streamDonePromise'); - }); - - test('IS_STREAMING_RESPONSE_KEY is defined', () => { - expect(IS_STREAMING_RESPONSE_KEY).toBe('_isStreamingResponse'); - }); -}); - -describe('SSE Done Promise - Pattern Tests', () => { - test('completion promise pattern matches expected behavior for normal handler completion', async () => { - let resolveDone: (() => void) | undefined; - let rejectDone: ((reason?: unknown) => void) | undefined; - const donePromise = new Promise((resolve, reject) => { - resolveDone = resolve; - rejectDone = reject; - }); - - let isDone = false; - const markDone = (error?: unknown) => { - if (isDone) return; - isDone = true; - if (error && rejectDone) { - rejectDone(error); - } else if (resolveDone) { - resolveDone(); - } - }; - - const runInContext = async (handler: () => Promise) => { - try { - await handler(); - markDone(); - } catch (err) { - markDone(err); - throw err; - } - }; - - let resolved = false; - donePromise.then(() => { - resolved = true; - }); - - expect(resolved).toBe(false); - - await runInContext(async () => {}); - - await donePromise; - expect(resolved).toBe(true); - }); - - test('completion promise rejects on handler error', async () => { - let resolveDone: (() => void) | undefined; - let rejectDone: ((reason?: unknown) => void) | undefined; - const donePromise = new Promise((resolve, reject) => { - resolveDone = resolve; - rejectDone = reject; - }); - - let isDone = false; - const markDone = (error?: unknown) => { - if (isDone) return; - isDone = true; - if (error && rejectDone) { - rejectDone(error); - } else if (resolveDone) { - resolveDone(); - } - }; - - const runInContext = async (handler: () => Promise) => { - try { - await handler(); - markDone(); - } catch (err) { - markDone(err); - throw err; - } - }; - - const testError = new Error('handler error'); - - try { - await runInContext(async () => { - throw testError; - }); - } catch { - // Expected - } - - let caughtError: unknown; - try { - await donePromise; - } catch (err) { - caughtError = err; - } - - expect(caughtError).toBe(testError); - }); - - test('markDone is idempotent - only first call affects the promise', async () => { - let resolveCount = 0; - let resolveDone: (() => void) | undefined; - const donePromise = new Promise((resolve) => { - resolveDone = () => { - resolveCount++; - resolve(); - }; - }); - - let isDone = false; - const markDone = () => { - if (isDone) return; - isDone = true; - resolveDone?.(); - }; - - markDone(); - markDone(); - markDone(); - - await donePromise; - - expect(resolveCount).toBe(1); - }); - - test('handler completion calls markDone after handler returns', async () => { - const executionOrder: string[] = []; - - let resolveDone: (() => void) | undefined; - const donePromise = new Promise((resolve) => { - resolveDone = resolve; - }); - - let isDone = false; - const markDone = () => { - if (isDone) return; - isDone = true; - executionOrder.push('markDone'); - resolveDone?.(); - }; - - const runInContext = async (handler: () => Promise) => { - try { - await handler(); - markDone(); - } catch (err) { - markDone(); - throw err; - } - }; - - await runInContext(async () => { - executionOrder.push('handler-start'); - await Promise.resolve(); - executionOrder.push('handler-end'); - }); - - await donePromise; - - expect(executionOrder).toEqual(['handler-start', 'handler-end', 'markDone']); - }); - - test('both close() and handler completion result in resolved promise (idempotent)', async () => { - let resolveDone: (() => void) | undefined; - const donePromise = new Promise((resolve) => { - resolveDone = resolve; - }); - - let isDone = false; - const markDone = () => { - if (isDone) return; - isDone = true; - resolveDone?.(); - }; - - const close = () => { - markDone(); - }; - - const runInContext = async (handler: () => Promise) => { - try { - await handler(); - markDone(); - } catch (err) { - markDone(); - throw err; - } - }; - - await runInContext(async () => { - close(); - }); - - await expect(donePromise).resolves.toBeUndefined(); - }); -}); - -describe('SSE Done Promise - Deferred Save Pattern', () => { - test('middleware can defer save until donePromise resolves', async () => { - const executionOrder: string[] = []; - - let resolveDone: (() => void) | undefined; - const streamDonePromise = new Promise((resolve) => { - resolveDone = resolve; - }); - - const waitUntilTasks: Promise[] = []; - - const waitUntil = (task: () => Promise) => { - waitUntilTasks.push(task()); - }; - - const finalizeSession = async () => { - executionOrder.push('finalize'); - }; - - const isStreaming = true; - - if (isStreaming && streamDonePromise) { - executionOrder.push('defer-registered'); - waitUntil(async () => { - await streamDonePromise; - await finalizeSession(); - }); - } - - executionOrder.push('middleware-returned'); - - expect(executionOrder).toEqual(['defer-registered', 'middleware-returned']); - - resolveDone!(); - - await Promise.all(waitUntilTasks); - - expect(executionOrder).toEqual(['defer-registered', 'middleware-returned', 'finalize']); - }); - - test('deferred save still executes even if donePromise rejects', async () => { - const executionOrder: string[] = []; - - let rejectDone: ((reason?: unknown) => void) | undefined; - const streamDonePromise = new Promise((_resolve, reject) => { - rejectDone = reject; - }); - - const waitUntilTasks: Promise[] = []; - - const waitUntil = (task: () => Promise) => { - waitUntilTasks.push(task()); - }; - - const finalizeSession = async () => { - executionOrder.push('finalize'); - }; - - waitUntil(async () => { - try { - await streamDonePromise; - } catch { - executionOrder.push('stream-error-caught'); - } - await finalizeSession(); - }); - - executionOrder.push('middleware-returned'); - - rejectDone!(new Error('Stream error')); - - await Promise.all(waitUntilTasks); - - expect(executionOrder).toEqual(['middleware-returned', 'stream-error-caught', 'finalize']); - }); -}); diff --git a/packages/runtime/test/standalone-context.test.ts b/packages/runtime/test/standalone-context.test.ts deleted file mode 100644 index 547bb037e..000000000 --- a/packages/runtime/test/standalone-context.test.ts +++ /dev/null @@ -1,386 +0,0 @@ -import { describe, test, expect, mock } from 'bun:test'; -import { trace, type Tracer } from '@opentelemetry/api'; -import type { Logger } from '../src/logger'; - -// Create test stubs -const testLogger: Logger = { - trace: () => {}, - debug: () => {}, - info: () => {}, - warn: () => {}, - error: () => {}, - fatal: (() => {}) as Logger['fatal'], - child: () => testLogger, -}; - -const testTracer: Tracer = trace.getTracer('standalone-test'); - -const _testAppState = { - testMode: true, - startTime: Date.now(), -}; - -// Mock storage services -const mockKv = new Map(); -const mockKvService = { - async get(key: string) { - return mockKv.get(key) ?? null; - }, - async set(key: string, value: unknown) { - mockKv.set(key, value); - }, - async delete(key: string) { - mockKv.delete(key); - }, - async list() { - return []; - }, - async clear() { - mockKv.clear(); - }, -}; - -const mockStreamService = { - async create() { - return { id: 'stream-test' }; - }, - async list() { - return { streams: [], total: 0 }; - }, - async delete() {}, -}; - -const mockVectorService = { - async upsert() { - return []; - }, - async query() { - return []; - }, - async get() { - return null; - }, - async delete() {}, -}; - -// Mock providers -const mockThreadProvider = { - async restore() { - return { - id: 'thrd-test', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - }, - async save() {}, - async destroy() {}, -}; - -const mockSessionProvider = { - async restore(thread: { id: string; state: Map }, sessionId: string) { - return { - id: sessionId, - thread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - }, - async save() {}, -}; - -const mockSessionEventProvider = { - async start() {}, - async complete() {}, -}; - -// Mock the _server module -mock.module('../src/_server', () => ({ - getLogger: () => testLogger, - getTracer: () => testTracer, - getServer: () => null, - getRouter: () => null, -})); - -// Mock the app module -mock.module('../src/app', () => ({})); - -// Mock the _services module -mock.module('../src/_services', () => ({ - registerServices: (ctx: { kv?: unknown; stream?: unknown; vector?: unknown }) => { - ctx.kv = mockKvService; - ctx.stream = mockStreamService; - ctx.vector = mockVectorService; - }, - getServices: () => ({ - kv: mockKvService, - stream: mockStreamService, - vector: mockVectorService, - }), - getThreadProvider: () => mockThreadProvider, - getSessionProvider: () => mockSessionProvider, - getSessionEventProvider: () => mockSessionEventProvider, - getEvalRunEventProvider: () => ({ - async start() {}, - async complete() {}, - }), -})); - -// Now import the code under test -import { createAgentContext } from '../src/_standalone'; -import { createAgent } from '../src/agent'; -import { s } from '@agentuity/schema'; - -// Test agents -const simpleAgent = createAgent('simple-test', { - description: 'Simple test agent', - schema: { - input: s.object({ - value: s.string(), - }), - output: s.object({ - result: s.string(), - }), - }, - handler: async (_ctx, input) => { - _ctx.logger.info('Processing: %s', input.value); - return { result: `processed: ${input.value}` }; - }, -}); - -const statusAgent = createAgent('status-test', { - description: 'Status agent', - schema: { - output: s.object({ - status: s.string(), - }), - }, - handler: async () => { - return { status: 'ok' }; - }, -}); - -describe('createAgentContext', () => { - describe('basic creation', () => { - test('creates context when globals are available', () => { - const ctx = createAgentContext(); - - expect(ctx.logger).toBe(testLogger); - expect(ctx.tracer).toBe(testTracer); - expect(ctx.app).toEqual({}); - expect(ctx.kv).toBeDefined(); - expect(ctx.stream).toBeDefined(); - expect(ctx.vector).toBeDefined(); - }); - - test('accepts custom options', () => { - const ctx = createAgentContext({ - sessionId: 'custom-123', - trigger: 'discord', - }); - - expect(ctx).toBeDefined(); - }); - }); - - describe('invoke method', () => { - test('executes agent successfully', async () => { - const ctx = createAgentContext(); - const result = await ctx.invoke(() => simpleAgent.run({ value: 'test' })); - - expect(result.result).toBe('processed: test'); - }); - - test('executes agent without input', async () => { - const ctx = createAgentContext(); - const result = await ctx.invoke(() => statusAgent.run()); - - expect(result.status).toBe('ok'); - }); - - test('handles agent errors', async () => { - const errorAgent = createAgent('error', { - schema: { - output: s.object({ result: s.string() }), - }, - handler: async () => { - throw new Error('Test error'); - }, - }); - - const ctx = createAgentContext(); - await expect(ctx.invoke(() => errorAgent.run())).rejects.toThrow('Test error'); - }); - - test('provides proper sessionId to agent', async () => { - let capturedSessionId: string | undefined; - - const captureAgent = createAgent('capture', { - schema: { - output: s.object({ sessionId: s.string() }), - }, - handler: async (ctx) => { - capturedSessionId = ctx.sessionId; - return { sessionId: ctx.sessionId }; - }, - }); - - const ctx = createAgentContext(); - const result = await ctx.invoke(() => captureAgent.run()); - - expect(capturedSessionId).toBeDefined(); - expect(capturedSessionId).toMatch(/^sess_/); - expect(result.sessionId).toMatch(/^sess_/); - }); - - test('uses custom sessionId when provided', async () => { - const customId = 'custom-session-123'; - let capturedSessionId: string | undefined; - - const captureAgent = createAgent('capture', { - schema: { - output: s.object({ sessionId: s.string() }), - }, - handler: async (ctx) => { - capturedSessionId = ctx.sessionId; - return { sessionId: ctx.sessionId }; - }, - }); - - const ctx = createAgentContext({ sessionId: customId }); - const result = await ctx.invoke(() => captureAgent.run()); - - expect(capturedSessionId).toBe(customId); - expect(result.sessionId).toBe(customId); - }); - - test('handles concurrent invocations safely', async () => { - const ctx = createAgentContext(); - - const [r1, r2, r3] = await Promise.all([ - ctx.invoke(() => simpleAgent.run({ value: 'one' })), - ctx.invoke(() => simpleAgent.run({ value: 'two' })), - ctx.invoke(() => simpleAgent.run({ value: 'three' })), - ]); - - expect(r1.result).toBe('processed: one'); - expect(r2.result).toBe('processed: two'); - expect(r3.result).toBe('processed: three'); - }); - }); - - describe('infrastructure integration', () => { - test('context provides logger', async () => { - const ctx = createAgentContext(); - - await ctx.invoke(async (_ctx) => { - expect(ctx.logger).toBeDefined(); - expect(() => { - ctx.logger.info('test'); - ctx.logger.debug('test'); - }).not.toThrow(); - - return statusAgent.run(); - }); - }); - - test('context provides app state', async () => { - const ctx = createAgentContext(); - - await ctx.invoke(async () => { - expect(ctx.app).toEqual({}); - return statusAgent.run(); - }); - }); - - test('context provides storage services', async () => { - const ctx = createAgentContext(); - - await ctx.invoke(async (_ctx) => { - expect(ctx.kv).toBeDefined(); - expect(ctx.stream).toBeDefined(); - expect(ctx.vector).toBeDefined(); - - return statusAgent.run(); - }); - }); - }); - - describe('run() method', () => { - test('executes agent with input using ctx.run()', async () => { - const ctx = createAgentContext(); - const result = await ctx.run(simpleAgent, { value: 'test-run' }); - - expect(result.result).toBe('processed: test-run'); - }); - - test('executes agent without input using ctx.run()', async () => { - const ctx = createAgentContext(); - const result = await ctx.run(statusAgent); - - expect(result.status).toBe('ok'); - }); - - test('handles multiple ctx.run() calls on same context', async () => { - const ctx = createAgentContext(); - - const r1 = await ctx.run(simpleAgent, { value: 'first' }); - const r2 = await ctx.run(simpleAgent, { value: 'second' }); - const r3 = await ctx.run(statusAgent); - - expect(r1.result).toBe('processed: first'); - expect(r2.result).toBe('processed: second'); - expect(r3.status).toBe('ok'); - }); - - test('ctx.run() handles agent errors', async () => { - const errorAgent = createAgent('run-error', { - schema: { - output: s.object({ result: s.string() }), - }, - handler: async () => { - throw new Error('Run test error'); - }, - }); - - const ctx = createAgentContext(); - await expect(ctx.run(errorAgent)).rejects.toThrow('Run test error'); - }); - }); -}); - -describe('standalone logger formatting', () => { - test('formatMessage produces consistent single-line output for objects', async () => { - const { formatMessage } = await import('../src/logger/util'); - - const result = formatMessage(false, undefined, 'Prompt', [{ prompt: 'Hello world' }]); - - expect(result).not.toContain('\n'); - expect(result).toContain('Prompt'); - expect(result).toContain('prompt'); - expect(result).toContain('Hello world'); - }); - - test('formatMessage handles string interpolation', async () => { - const { formatMessage } = await import('../src/logger/util'); - - const result = formatMessage(false, undefined, 'Processing: %s', ['test-value']); - - expect(result).toBe('Processing: test-value'); - expect(result).not.toContain('\n'); - }); - - test('formatMessage handles multiple object arguments', async () => { - const { formatMessage } = await import('../src/logger/util'); - - const result = formatMessage(false, undefined, 'Data:', [{ a: 1 }, { b: 2 }]); - - expect(result).not.toContain('\n'); - expect(result).toContain('a'); - expect(result).toContain('b'); - }); -}); diff --git a/packages/runtime/test/streaming-deferred-save.test.ts b/packages/runtime/test/streaming-deferred-save.test.ts deleted file mode 100644 index 0b0dd17d5..000000000 --- a/packages/runtime/test/streaming-deferred-save.test.ts +++ /dev/null @@ -1,201 +0,0 @@ -/** - * Tests for streaming response deferred save mechanism. - * - * Tests the internal mechanics of stream completion tracking without - * relying on Hono's streaming APIs which have environment-specific behavior. - * - * Related to: https://github.com/agentuity/sdk/issues/454 - */ - -import { test, expect, describe } from 'bun:test'; -import { STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY } from '../src/handlers'; - -describe('Streaming Deferred Save Constants', () => { - test('STREAM_DONE_PROMISE_KEY is defined', () => { - expect(STREAM_DONE_PROMISE_KEY).toBe('_streamDonePromise'); - }); - - test('IS_STREAMING_RESPONSE_KEY is defined', () => { - expect(IS_STREAMING_RESPONSE_KEY).toBe('_isStreamingResponse'); - }); -}); - -describe('Stream Completion Promise Pattern', () => { - test('completion promise resolves when markDone is called', async () => { - let resolveDone: (() => void) | undefined; - const donePromise = new Promise((resolve) => { - resolveDone = resolve; - }); - - let isDone = false; - const markDone = () => { - if (isDone) return; - isDone = true; - resolveDone?.(); - }; - - let resolved = false; - donePromise.then(() => { - resolved = true; - }); - - expect(resolved).toBe(false); - - markDone(); - - await donePromise; - expect(resolved).toBe(true); - }); - - test('completion promise is idempotent - markDone only resolves once', async () => { - let resolveCount = 0; - let resolveDone: (() => void) | undefined; - const donePromise = new Promise((resolve) => { - resolveDone = () => { - resolveCount++; - resolve(); - }; - }); - - let isDone = false; - const markDone = () => { - if (isDone) return; - isDone = true; - resolveDone?.(); - }; - - markDone(); - markDone(); - markDone(); - - await donePromise; - - expect(resolveCount).toBe(1); - }); - - test('completion promise can reject on error', async () => { - let rejectDone: ((reason?: unknown) => void) | undefined; - const donePromise = new Promise((_resolve, reject) => { - rejectDone = reject; - }); - - let isDone = false; - const markDone = (error?: unknown) => { - if (isDone) return; - isDone = true; - if (error) { - rejectDone?.(error); - } - }; - - const testError = new Error('Test error'); - markDone(testError); - - let caughtError: unknown; - try { - await donePromise; - } catch (err) { - caughtError = err; - } - - expect(caughtError).toBe(testError); - }); -}); - -describe('Deferred Save Pattern', () => { - test('waitUntil pattern defers execution until stream completes', async () => { - const executionOrder: string[] = []; - - let resolveDone: (() => void) | undefined; - const streamDonePromise = new Promise((resolve) => { - resolveDone = resolve; - }); - - const waitUntilTasks: Promise[] = []; - - const waitUntil = (task: () => Promise) => { - waitUntilTasks.push(task()); - }; - - const finalizeSession = async () => { - executionOrder.push('finalize'); - }; - - const isStreaming = true; - - if (isStreaming && streamDonePromise) { - executionOrder.push('defer-registered'); - waitUntil(async () => { - await streamDonePromise; - await finalizeSession(); - }); - } - - executionOrder.push('middleware-returned'); - - expect(executionOrder).toEqual(['defer-registered', 'middleware-returned']); - - resolveDone!(); - - await Promise.all(waitUntilTasks); - - expect(executionOrder).toEqual(['defer-registered', 'middleware-returned', 'finalize']); - }); - - test('non-streaming responses save synchronously', async () => { - const executionOrder: string[] = []; - - const finalizeSession = async () => { - executionOrder.push('finalize'); - }; - - const isStreaming = false; - const streamDonePromise = undefined; - - if (isStreaming && streamDonePromise) { - executionOrder.push('defer-registered'); - } else { - await finalizeSession(); - } - - executionOrder.push('middleware-returned'); - - expect(executionOrder).toEqual(['finalize', 'middleware-returned']); - }); - - test('deferred save still executes even if stream errors', async () => { - const executionOrder: string[] = []; - - let rejectDone: ((reason?: unknown) => void) | undefined; - const streamDonePromise = new Promise((_resolve, reject) => { - rejectDone = reject; - }); - - const waitUntilTasks: Promise[] = []; - - const waitUntil = (task: () => Promise) => { - waitUntilTasks.push(task()); - }; - - const finalizeSession = async () => { - executionOrder.push('finalize'); - }; - - waitUntil(async () => { - try { - await streamDonePromise; - } catch { - executionOrder.push('stream-error-caught'); - } - await finalizeSession(); - }); - - executionOrder.push('middleware-returned'); - - rejectDone!(new Error('Stream error')); - - await Promise.all(waitUntilTasks); - - expect(executionOrder).toEqual(['middleware-returned', 'stream-error-caught', 'finalize']); - }); -}); diff --git a/packages/runtime/test/thread-id-header.test.ts b/packages/runtime/test/thread-id-header.test.ts deleted file mode 100644 index ceda2a628..000000000 --- a/packages/runtime/test/thread-id-header.test.ts +++ /dev/null @@ -1,503 +0,0 @@ -/** - * Tests for thread ID support via x-thread-id HTTP header. - */ - -import { test, expect, describe } from 'bun:test'; -import { - DefaultThreadIDProvider, - isValidThreadId, - isSecureConnection, - signThreadId, - verifySignedThreadId, -} from '../src/session'; -import type { AppState } from '../src/index'; - -describe('Thread ID Header Support', () => { - test('DefaultThreadIDProvider uses x-thread-id header when present and properly signed', async () => { - const provider = new DefaultThreadIDProvider(); - let responseHeaderValue: string | undefined; - const threadIdValue = 'thrd_12345678901234567890123456789012'; - const secret = 'agentuity'; - const signedHeader = await signThreadId(threadIdValue, secret); - - // Mock context with signed x-thread-id header - const ctx = { - req: { - header: (name: string) => { - if (name === 'x-thread-id') { - return signedHeader; - } - return undefined; - }, - raw: { - headers: new Headers(), - }, - }, - header: (name: string, value: string) => { - if (name === 'x-thread-id') { - responseHeaderValue = value; - } - }, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - expect(threadId).toBe(threadIdValue); - expect(responseHeaderValue).toContain(threadIdValue); - expect(responseHeaderValue).toContain(';'); - }); - - test('DefaultThreadIDProvider generates new ID when unsigned cookie present', async () => { - const provider = new DefaultThreadIDProvider(); - let responseHeaderValue: string | undefined; - - // Mock context without header but with unsigned cookie (will be rejected) - const cookieThreadId = 'thrd_cookie567890123456789012345678'; - const headers = new Headers(); - headers.set('Cookie', `atid=${cookieThreadId}`); - - const ctx = { - req: { - header: () => undefined, - raw: { - headers, - }, - }, - header: (name: string, value: string) => { - if (name === 'x-thread-id') { - responseHeaderValue = value; - } - }, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - // Should generate new ID since unsigned cookie won't validate - expect(threadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(threadId).not.toBe(cookieThreadId); - expect(responseHeaderValue).toContain(threadId); - expect(responseHeaderValue).toContain(';'); - }); - - test('DefaultThreadIDProvider generates new ID when neither header nor cookie present', async () => { - const provider = new DefaultThreadIDProvider(); - let responseHeaderValue: string | undefined; - - // Mock context without header or cookie - const ctx = { - req: { - header: () => undefined, - raw: { - headers: new Headers(), - }, - }, - header: (name: string, value: string) => { - if (name === 'x-thread-id') { - responseHeaderValue = value; - } - }, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - expect(threadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(responseHeaderValue).toContain(threadId); - expect(responseHeaderValue).toContain(';'); - }); - - test('DefaultThreadIDProvider prioritizes signed header over cookie', async () => { - const provider = new DefaultThreadIDProvider(); - - const headerThreadId = 'thrd_header67890123456789012345678901'; - const secret = 'agentuity'; - const signedHeader = await signThreadId(headerThreadId, secret); - - // Mock context with signed header - const ctx = { - req: { - header: (name: string) => { - if (name === 'x-thread-id') { - return signedHeader; - } - return undefined; - }, - raw: { - headers: new Headers(), - }, - }, - header: () => {}, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - expect(threadId).toBe(headerThreadId); - }); - - test('DefaultThreadIDProvider ignores invalid header value', async () => { - const provider = new DefaultThreadIDProvider(); - - // Mock context with invalid header (doesn't start with thrd_) - const ctx = { - req: { - header: (name: string) => { - if (name === 'x-thread-id') { - return 'invalid_12345678901234567890123456789'; - } - return undefined; - }, - raw: { - headers: new Headers(), - }, - }, - header: () => {}, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - // Should generate new ID instead of using invalid header - expect(threadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(threadId).not.toBe('invalid_12345678901234567890123456789'); - }); -}); - -describe('Thread ID Validation', () => { - test('isValidThreadId accepts valid thread IDs', () => { - expect(isValidThreadId('thrd_1234567890123456789012345678')).toBe(true); // 32 chars total - expect(isValidThreadId('thrd_abcdefghijklmnopqrstuvwxyz12')).toBe(true); - expect(isValidThreadId('thrd_ABCDEFGHIJKLMNOPQRSTUVWXYZ12')).toBe(true); - expect(isValidThreadId('thrd_abc123def456ghi789jkl1234567')).toBe(true); - }); - - test('isValidThreadId rejects thread IDs without thrd_ prefix', () => { - expect(isValidThreadId('thread_1234567890123456789012')).toBe(false); - expect(isValidThreadId('abc_12345678901234567890123456')).toBe(false); - expect(isValidThreadId('12345678901234567890123456789012')).toBe(false); - }); - - test('isValidThreadId rejects thread IDs that are too short', () => { - expect(isValidThreadId('thrd_123')).toBe(false); - expect(isValidThreadId('thrd_12345678901234567890')).toBe(false); - expect(isValidThreadId('thrd_1234567890123456789012345')).toBe(false); // 31 chars - }); - - test('isValidThreadId rejects thread IDs that are too long', () => { - expect(isValidThreadId('thrd_' + 'a'.repeat(60))).toBe(false); // 65 chars - expect(isValidThreadId('thrd_' + 'a'.repeat(100))).toBe(false); - }); - - test('isValidThreadId rejects thread IDs with invalid characters', () => { - expect(isValidThreadId('thrd_abc!def123456789012345678')).toBe(false); - expect(isValidThreadId('thrd_abc@def123456789012345678')).toBe(false); - expect(isValidThreadId('thrd_abc#def123456789012345678')).toBe(false); - expect(isValidThreadId('thrd_abc$def123456789012345678')).toBe(false); - expect(isValidThreadId('thrd_abc%def123456789012345678')).toBe(false); - expect(isValidThreadId('thrd_abc_def123456789012345678')).toBe(false); // underscore not allowed - expect(isValidThreadId('thrd_abc.def123456789012345678')).toBe(false); // dot not allowed - expect(isValidThreadId('thrd_abc def123456789012345678')).toBe(false); // space not allowed - expect(isValidThreadId('thrd_abc-def123456789012345678')).toBe(false); // dash not allowed - }); - - test('DefaultThreadIDProvider rejects header with invalid length', async () => { - const provider = new DefaultThreadIDProvider(); - - // Too short - const ctxShort = { - req: { - header: (name: string) => (name === 'x-thread-id' ? 'thrd_short' : undefined), - raw: { headers: new Headers() }, - }, - header: () => {}, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const shortThreadId = await provider.getThreadId({} as AppState, ctxShort); - expect(shortThreadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(shortThreadId).not.toBe('thrd_short'); - }); - - test('DefaultThreadIDProvider rejects cookie with invalid characters', async () => { - const provider = new DefaultThreadIDProvider(); - - const headers = new Headers(); - headers.set('Cookie', 'atid=thrd_invalid!@#$%^&*()123456789'); - - const ctx = { - req: { - header: () => undefined, - raw: { headers }, - }, - header: () => {}, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - expect(threadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(threadId).not.toContain('invalid'); - }); -}); - -describe('Connection Security Detection', () => { - test('isSecureConnection returns true for HTTPS', () => { - const ctx = { - req: { - url: 'https://example.com/path', - header: () => undefined, - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - expect(isSecureConnection(ctx)).toBe(true); - }); - - test('isSecureConnection returns false for HTTP', () => { - const ctx = { - req: { - url: 'http://localhost:3000/path', - header: () => undefined, - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - expect(isSecureConnection(ctx)).toBe(false); - }); - - test('isSecureConnection respects x-forwarded-proto header (HTTPS)', () => { - const ctx = { - req: { - url: 'http://internal-server/path', - header: (name: string) => { - if (name === 'x-forwarded-proto') { - return 'https'; - } - return undefined; - }, - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - expect(isSecureConnection(ctx)).toBe(true); - }); - - test('isSecureConnection respects x-forwarded-proto header (HTTP)', () => { - const ctx = { - req: { - url: 'https://example.com/path', - header: (name: string) => { - if (name === 'x-forwarded-proto') { - return 'http'; - } - return undefined; - }, - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - expect(isSecureConnection(ctx)).toBe(false); - }); -}); - -describe('Thread ID Signing and Verification', () => { - test('signThreadId creates properly formatted signed header', async () => { - const threadId = 'thrd_1234567890123456789012345678'; - const secret = 'test-secret'; - const signed = await signThreadId(threadId, secret); - - expect(signed).toContain(';'); - const parts = signed.split(';'); - expect(parts).toHaveLength(2); - expect(parts[0]).toBe(threadId); - expect(parts[1]).toMatch(/^[A-Za-z0-9+/]+=*$/); // Base64 pattern - }); - - test('verifySignedThreadId accepts valid signature', async () => { - const threadId = 'thrd_1234567890123456789012345678'; - const secret = 'test-secret'; - const signed = await signThreadId(threadId, secret); - - const verified = await verifySignedThreadId(signed, secret); - expect(verified).toBe(threadId); - }); - - test('verifySignedThreadId rejects tampered thread ID', async () => { - const threadId = 'thrd_1234567890123456789012345678'; - const secret = 'test-secret'; - const signed = await signThreadId(threadId, secret); - - // Tamper with the thread ID part - const tamperedSignature = signed.split(';')[1]; - const tampered = `thrd_9999999999999999999999999999;${tamperedSignature}`; - - const verified = await verifySignedThreadId(tampered, secret); - expect(verified).toBeUndefined(); - }); - - test('verifySignedThreadId rejects tampered signature', async () => { - const threadId = 'thrd_1234567890123456789012345678'; - const secret = 'test-secret'; - - // Tamper with the signature part - const tampered = `${threadId};tampered_signature_here`; - - const verified = await verifySignedThreadId(tampered, secret); - expect(verified).toBeUndefined(); - }); - - test('verifySignedThreadId rejects wrong secret', async () => { - const threadId = 'thrd_1234567890123456789012345678'; - const signed = await signThreadId(threadId, 'secret1'); - - const verified = await verifySignedThreadId(signed, 'secret2'); - expect(verified).toBeUndefined(); - }); - - test('verifySignedThreadId rejects invalid format', async () => { - const secret = 'test-secret'; - - // No semicolon - expect( - await verifySignedThreadId('thrd_123456789012345678901234567', secret) - ).toBeUndefined(); - - // Multiple semicolons - expect( - await verifySignedThreadId('thrd_123456789012345678901234567;sig1;sig2', secret) - ).toBeUndefined(); - - // Empty parts - expect(await verifySignedThreadId(';signature', secret)).toBeUndefined(); - expect( - await verifySignedThreadId('thrd_123456789012345678901234567;', secret) - ).toBeUndefined(); - }); - - test('DefaultThreadIDProvider rejects unsigned header', async () => { - const provider = new DefaultThreadIDProvider(); - - // Mock context with unsigned header (no signature part) - const ctx = { - req: { - header: (name: string) => { - if (name === 'x-thread-id') { - return 'thrd_12345678901234567890123456789012'; - } - return undefined; - }, - raw: { - headers: new Headers(), - }, - }, - header: () => {}, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - // Should generate new ID since header is not signed - expect(threadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(threadId).not.toBe('thrd_12345678901234567890123456789012'); - }); - - test('DefaultThreadIDProvider rejects header with invalid signature', async () => { - const provider = new DefaultThreadIDProvider(); - - // Create header with wrong signature - const threadIdValue = 'thrd_12345678901234567890123456789012'; - const invalidSigned = `${threadIdValue};invalidSignatureHere`; - - const ctx = { - req: { - header: (name: string) => { - if (name === 'x-thread-id') { - return invalidSigned; - } - return undefined; - }, - raw: { - headers: new Headers(), - }, - }, - header: () => {}, - get: () => undefined, - set: () => {}, - var: {}, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any; - - const threadId = await provider.getThreadId({} as AppState, ctx); - - // Should generate new ID since signature is invalid - expect(threadId).toMatch(/^thrd_[a-f0-9]{32}$/); - expect(threadId).not.toBe(threadIdValue); - }); - - test('verifySignedThreadId correctly decodes base64 signatures', async () => { - const threadId = 'thrd_1234567890123456789012345678'; - const secret = 'test-secret-with-special-chars-!@#$%'; - - // Sign the thread ID - const signed = await signThreadId(threadId, secret); - const [, signature] = signed.split(';'); - - // Verify signature is valid base64 - expect(signature).toMatch(/^[A-Za-z0-9+/]+=*$/); - - // Verify it can be decoded as base64 - const buffer = Buffer.from(signature, 'base64'); - expect(buffer.length).toBeGreaterThan(0); - - // Verify the signed value validates correctly - const verified = await verifySignedThreadId(signed, secret); - expect(verified).toBe(threadId); - }); - - test('verifySignedThreadId handles different signature lengths correctly', async () => { - // Test with various secrets that produce different signature lengths - const threadId = 'thrd_1234567890123456789012345678'; - const secrets = [ - 'short', - 'medium-length-secret', - 'very-long-secret-with-many-characters-to-test-hmac-behavior', - '!@#$%^&*()', - 'unicode-测试', - ]; - - for (const secret of secrets) { - const signed = await signThreadId(threadId, secret); - const verified = await verifySignedThreadId(signed, secret); - expect(verified).toBe(threadId); - - // Verify with wrong secret fails - const wrongVerified = await verifySignedThreadId(signed, 'wrong-secret'); - expect(wrongVerified).toBeUndefined(); - } - }); -}); diff --git a/packages/runtime/test/thread-persistence.test.ts b/packages/runtime/test/thread-persistence.test.ts deleted file mode 100644 index d44597803..000000000 --- a/packages/runtime/test/thread-persistence.test.ts +++ /dev/null @@ -1,513 +0,0 @@ -/** - * Tests for thread state persistence. - * Validates that thread state is correctly serialized, saved, and restored. - */ - -import { test, expect, describe } from 'bun:test'; -import { - DefaultThread, - LazyThreadState, - parseThreadData, - type ThreadProvider, -} from '../src/session'; - -describe('parseThreadData', () => { - test('returns empty object for undefined input', () => { - const result = parseThreadData(undefined); - expect(result).toEqual({}); - }); - - test('returns empty object for empty string', () => { - const result = parseThreadData(''); - expect(result).toEqual({}); - }); - - test('handles new format with state only', () => { - const input = JSON.stringify({ state: { messages: ['hello', 'world'] } }); - const result = parseThreadData(input); - - expect(result.flatStateJson).toBe(JSON.stringify({ messages: ['hello', 'world'] })); - expect(result.metadata).toBeUndefined(); - }); - - test('handles new format with metadata only', () => { - const input = JSON.stringify({ metadata: { userId: 'user123' } }); - const result = parseThreadData(input); - - expect(result.flatStateJson).toBeUndefined(); - expect(result.metadata).toEqual({ userId: 'user123' }); - }); - - test('handles new format with both state and metadata', () => { - const input = JSON.stringify({ - state: { messages: ['test'] }, - metadata: { userId: 'user123', role: 'admin' }, - }); - const result = parseThreadData(input); - - expect(result.flatStateJson).toBe(JSON.stringify({ messages: ['test'] })); - expect(result.metadata).toEqual({ userId: 'user123', role: 'admin' }); - }); - - test('handles old flat format (backwards compatibility)', () => { - const input = JSON.stringify({ messages: ['old', 'format'], counter: 42 }); - const result = parseThreadData(input); - - expect(result.flatStateJson).toBe(input); - expect(result.metadata).toBeUndefined(); - }); - - test('handles invalid JSON gracefully', () => { - const result = parseThreadData('not valid json {{{'); - - expect(result.flatStateJson).toBe('not valid json {{{'); - expect(result.metadata).toBeUndefined(); - }); - - test('handles non-object JSON values', () => { - const result = parseThreadData('"just a string"'); - expect(result.flatStateJson).toBe('"just a string"'); - }); - - test('handles null metadata gracefully', () => { - const input = JSON.stringify({ state: { key: 'value' }, metadata: null }); - const result = parseThreadData(input); - - expect(result.flatStateJson).toBe(JSON.stringify({ key: 'value' })); - expect(result.metadata).toBeUndefined(); - }); - - test('handles non-object metadata gracefully', () => { - const input = JSON.stringify({ state: { key: 'value' }, metadata: 'invalid' }); - const result = parseThreadData(input); - - expect(result.flatStateJson).toBe(JSON.stringify({ key: 'value' })); - expect(result.metadata).toBeUndefined(); - }); -}); - -describe('LazyThreadState', () => { - test('starts in idle state', () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - expect(state.loaded).toBe(false); - expect(state.dirty).toBe(false); - }); - - test('loaded becomes true after get()', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.get('key'); - - expect(state.loaded).toBe(true); - }); - - test('dirty becomes true after set() without load', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - - expect(state.loaded).toBe(false); - expect(state.dirty).toBe(true); - }); - - test('get() returns value after set()', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.set('key', 'value'); - const result = await state.get('key'); - - expect(result).toBe('value'); - expect(state.loaded).toBe(true); - }); - - test('pending operations are applied on load', async () => { - const initialState = new Map([['existing', 'data']]); - const restoreFn = async () => ({ state: initialState, metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.set('new', 'value'); - await state.delete('existing'); - - const newVal = await state.get('new'); - const existingVal = await state.get('existing'); - - expect(newVal).toBe('value'); - expect(existingVal).toBeUndefined(); - }); - - test('clear() replaces all pending operations', async () => { - const restoreFn = async () => ({ state: new Map([['old', 'data']]), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.set('key1', 'value1'); - await state.clear(); - await state.set('key2', 'value2'); - - const keys = await state.keys(); - - expect(keys).toEqual(['key2']); - }); - - test('size() returns correct count', async () => { - const restoreFn = async () => ({ - state: new Map([ - ['a', 1], - ['b', 2], - ]), - metadata: {}, - }); - const state = new LazyThreadState(restoreFn); - - const size = await state.size(); - expect(size).toBe(2); - }); - - test('entries() returns all entries', async () => { - const restoreFn = async () => ({ - state: new Map([ - ['a', 1], - ['b', 2], - ]), - metadata: {}, - }); - const state = new LazyThreadState(restoreFn); - - const entries = await state.entries(); - expect(entries).toEqual([ - ['a', 1], - ['b', 2], - ]); - }); - - test('values() returns all values', async () => { - const restoreFn = async () => ({ - state: new Map([ - ['a', 1], - ['b', 2], - ]), - metadata: {}, - }); - const state = new LazyThreadState(restoreFn); - - const values = await state.values(); - expect(values).toEqual([1, 2]); - }); - - test('has() returns correct result', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - expect(await state.has('key')).toBe(true); - expect(await state.has('nonexistent')).toBe(false); - }); - - test('push() queues operation when not loaded', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.push('messages', { id: 1 }); - await state.push('messages', { id: 2 }); - - expect(state.loaded).toBe(false); - expect(state.dirty).toBe(true); - - const ops = state.getPendingOperations(); - expect(ops).toHaveLength(2); - expect(ops[0]).toEqual({ op: 'push', key: 'messages', value: { id: 1 } }); - expect(ops[1]).toEqual({ op: 'push', key: 'messages', value: { id: 2 } }); - }); - - test('push() creates array when key does not exist (loaded)', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - // Trigger load first - await state.size(); - - await state.push('messages', 'first'); - - const result = await state.get('messages'); - expect(result).toEqual(['first']); - }); - - test('push() appends to existing array (loaded)', async () => { - const restoreFn = async () => ({ - state: new Map([['messages', ['existing']]]), - metadata: {}, - }); - const state = new LazyThreadState(restoreFn); - - // Trigger load first - await state.size(); - - await state.push('messages', 'new'); - - const result = await state.get('messages'); - expect(result).toEqual(['existing', 'new']); - }); - - test('push() throws error for non-array value (loaded)', async () => { - const restoreFn = async () => ({ state: new Map([['count', 42]]), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - // Trigger load first - await state.size(); - - expect(() => state.push('count', 'value')).toThrow( - 'Cannot push to non-array value at key "count"' - ); - }); - - test('push() operations applied correctly on load', async () => { - const restoreFn = async () => ({ state: new Map([['messages', ['msg1']]]), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.push('messages', 'msg2'); - await state.push('messages', 'msg3'); - await state.push('newArray', 'first'); - - // Now trigger load - operations should be applied - const messages = await state.get('messages'); - const newArray = await state.get('newArray'); - - expect(messages).toEqual(['msg1', 'msg2', 'msg3']); - expect(newArray).toEqual(['first']); - }); - - test('push() with maxRecords limits array size (loaded)', async () => { - const restoreFn = async () => ({ - state: new Map([['messages', ['a', 'b', 'c']]]), - metadata: {}, - }); - const state = new LazyThreadState(restoreFn); - - // Trigger load - await state.size(); - - await state.push('messages', 'd', 3); - - const result = await state.get('messages'); - expect(result).toEqual(['b', 'c', 'd']); - }); - - test('push() with maxRecords queued correctly', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.push('items', 'a', 2); - await state.push('items', 'b', 2); - await state.push('items', 'c', 2); - - const ops = state.getPendingOperations(); - expect(ops).toHaveLength(3); - expect(ops[0]).toEqual({ op: 'push', key: 'items', value: 'a', maxRecords: 2 }); - expect(ops[1]).toEqual({ op: 'push', key: 'items', value: 'b', maxRecords: 2 }); - expect(ops[2]).toEqual({ op: 'push', key: 'items', value: 'c', maxRecords: 2 }); - }); - - test('push() with maxRecords applied on load', async () => { - const restoreFn = async () => ({ state: new Map([['items', ['existing']]]), metadata: {} }); - const state = new LazyThreadState(restoreFn); - - await state.push('items', 'a', 2); - await state.push('items', 'b', 2); - await state.push('items', 'c', 2); - - // Trigger load - should apply operations with maxRecords - const result = await state.get('items'); - expect(result).toEqual(['b', 'c']); - }); -}); - -describe('DefaultThread', () => { - const mockProvider = {} as ThreadProvider; - - test('getSaveMode returns none for untouched thread', () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - expect(thread.getSaveMode()).toBe('none'); - }); - - test('getSaveMode returns merge for write-only operations', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - await thread.state.set('key', 'value'); - - expect(thread.getSaveMode()).toBe('merge'); - }); - - test('getSaveMode returns full after read and modification', async () => { - const restoreFn = async () => ({ state: new Map([['existing', 'data']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - await thread.state.get('existing'); - await thread.state.set('new', 'value'); - - expect(thread.getSaveMode()).toBe('full'); - }); - - test('getPendingOperations returns queued operations', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - await thread.state.set('key1', 'value1'); - await thread.state.set('key2', 'value2'); - await thread.state.delete('key1'); - - const ops = thread.getPendingOperations(); - - expect(ops).toHaveLength(3); - expect(ops[0]).toEqual({ op: 'set', key: 'key1', value: 'value1' }); - expect(ops[1]).toEqual({ op: 'set', key: 'key2', value: 'value2' }); - expect(ops[2]).toEqual({ op: 'delete', key: 'key1' }); - }); - - test('getMetadata returns metadata', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: { userId: 'user123' } }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn, { - userId: 'user123', - }); - - const metadata = await thread.getMetadata(); - expect(metadata.userId).toBe('user123'); - }); - - test('setMetadata updates metadata', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - await thread.setMetadata({ userId: 'user456', role: 'admin' }); - - const metadata = await thread.getMetadata(); - expect(metadata.userId).toBe('user456'); - expect(metadata.role).toBe('admin'); - }); - - test('empty() returns true for empty thread', async () => { - const restoreFn = async () => ({ state: new Map(), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - const isEmpty = await thread.empty(); - expect(isEmpty).toBe(true); - }); - - test('empty() returns false when state has data', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - // Trigger load - await thread.state.get('key'); - - const isEmpty = await thread.empty(); - expect(isEmpty).toBe(false); - }); - - test('getSerializedState returns correct format', async () => { - const restoreFn = async () => ({ state: new Map([['key', 'value']]), metadata: {} }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - await thread.setMetadata({ userId: 'user123' }); - - const serialized = await thread.getSerializedState(); - const parsed = JSON.parse(serialized); - - expect(parsed.state).toEqual({ key: 'value' }); - expect(parsed.metadata).toEqual({ userId: 'user123' }); - }); -}); - -describe('Thread round-trip with lazy loading', () => { - const mockProvider = {} as ThreadProvider; - - test('state persists through serialize/parse cycle', async () => { - // Create thread and set state - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_test123', restoreFn1); - - await thread1.state.set('messages', ['hello', 'world']); - await thread1.state.set('counter', 42); - - // Serialize (auto-loads state if needed) - const serialized = await thread1.getSerializedState(); - const { flatStateJson, metadata } = parseThreadData(serialized); - - // Create new thread with restored data - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const restoreFn2 = async () => ({ - state: new Map(Object.entries(restoredState)), - metadata: metadata || {}, - }); - const thread2 = new DefaultThread(mockProvider, 'thrd_test456', restoreFn2); - - // Verify restored state - const messages = await thread2.state.get('messages'); - const counter = await thread2.state.get('counter'); - - expect(messages).toEqual(['hello', 'world']); - expect(counter).toBe(42); - }); - - test('metadata persists through serialize/parse cycle', async () => { - const restoreFn1 = async () => ({ state: new Map(), metadata: {} }); - const thread1 = new DefaultThread(mockProvider, 'thrd_test123', restoreFn1); - - await thread1.setMetadata({ userId: 'user123', tags: ['important'] }); - - const serialized = await thread1.getSerializedState(); - const { flatStateJson, metadata } = parseThreadData(serialized); - - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const restoreFn2 = async () => ({ - state: new Map(Object.entries(restoredState)), - metadata: metadata || {}, - }); - const thread2 = new DefaultThread(mockProvider, 'thrd_test456', restoreFn2, metadata); - - const restoredMetadata = await thread2.getMetadata(); - expect(restoredMetadata.userId).toBe('user123'); - expect(restoredMetadata.tags).toEqual(['important']); - }); -}); - -describe('Backwards compatibility', () => { - const mockProvider = {} as ThreadProvider; - - test('old format state is correctly restored', async () => { - const oldFormatJson = JSON.stringify({ messages: ['old', 'format'], counter: 10 }); - const { flatStateJson } = parseThreadData(oldFormatJson); - - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const restoreFn = async () => ({ - state: new Map(Object.entries(restoredState)), - metadata: {}, - }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - expect(await thread.state.get('messages')).toEqual(['old', 'format']); - expect(await thread.state.get('counter')).toBe(10); - }); - - test('old format does not mistakenly populate "state" or "metadata" keys', async () => { - const oldFormatJson = JSON.stringify({ messages: ['test'], userId: 'user123' }); - const { flatStateJson } = parseThreadData(oldFormatJson); - - const restoredState = flatStateJson ? JSON.parse(flatStateJson) : {}; - const restoreFn = async () => ({ - state: new Map(Object.entries(restoredState)), - metadata: {}, - }); - const thread = new DefaultThread(mockProvider, 'thrd_test123', restoreFn); - - expect(await thread.state.has('state')).toBe(false); - expect(await thread.state.has('metadata')).toBe(false); - expect(await thread.state.get('messages')).toEqual(['test']); - expect(await thread.state.get('userId')).toBe('user123'); - }); -}); diff --git a/packages/runtime/test/trace-state-header.test.ts b/packages/runtime/test/trace-state-header.test.ts deleted file mode 100644 index f6989bd11..000000000 --- a/packages/runtime/test/trace-state-header.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Tests for trace state propagation fix in middleware. - * Verifies that trace.setSpan() correctly updates the trace state. - */ - -import { test, expect, describe } from 'bun:test'; -import { context, trace } from '@opentelemetry/api'; -import { TraceState } from '@opentelemetry/core'; - -describe('Trace State Update Pattern', () => { - test('trace.setSpan correctly updates trace state in span context', () => { - // Create a mock span context - const mockSpanContext = { - traceId: '12345678901234567890123456789012', - spanId: '1234567890123456', - traceFlags: 1, - traceState: new TraceState(), - }; - - // Add values to trace state - let traceState = mockSpanContext.traceState ?? new TraceState(); - traceState = traceState.set('pid', 'proj_test123'); - traceState = traceState.set('oid', 'org_test456'); - traceState = traceState.set('d', '1'); - - // Update using trace.setSpan with wrapSpanContext - const updatedContext = trace.setSpan( - context.active(), - trace.wrapSpanContext({ - ...mockSpanContext, - traceState, - }) - ); - - // Get the span from the updated context - const span = trace.getSpan(updatedContext); - expect(span).toBeDefined(); - - if (span) { - const sctx = span.spanContext(); - expect(sctx.traceState).toBeDefined(); - - // Verify the trace state was updated - const serialized = sctx.traceState?.serialize(); - expect(serialized).toBeDefined(); - expect(serialized).toContain('pid=proj_test123'); - expect(serialized).toContain('oid=org_test456'); - expect(serialized).toContain('d=1'); - } - }); - - test('trace state serialize format is correct', () => { - let traceState = new TraceState(); - traceState = traceState.set('pid', 'proj_abc'); - traceState = traceState.set('oid', 'org_xyz'); - - const serialized = traceState.serialize(); - expect(serialized).toContain('pid=proj_abc'); - expect(serialized).toContain('oid=org_xyz'); - }); -}); diff --git a/packages/runtime/test/type-validation.test.ts b/packages/runtime/test/type-validation.test.ts deleted file mode 100644 index edcf3422d..000000000 --- a/packages/runtime/test/type-validation.test.ts +++ /dev/null @@ -1,297 +0,0 @@ -/** - * Comprehensive type validation test. - * This test validates the complete type chain from exports to runtime usage. - */ - -import { test, expect, describe } from 'bun:test'; -import { type Thread, type Session, type Variables, type Env, createRouter } from '../src/index'; - -describe('Type Exports and Definitions', () => { - test('Thread interface is correctly defined and exported', () => { - // Compile-time validation: Thread has required properties - type ThreadIdType = Thread['id']; - type ThreadStateType = Thread['state']; - - // Assert types are correct - const _idCheck: ThreadIdType = 'test-id'; - const _stateCheck: ThreadStateType = new Map(); - - // Runtime check: we can create objects matching Thread interface - const mockThread: Thread = { - id: 'thread-123', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - - expect(mockThread.id).toBe('thread-123'); - expect(mockThread.state).toBeInstanceOf(Map); - }); - - test('Session interface is correctly defined and exported', () => { - // Compile-time validation: Session has required properties - type SessionIdType = Session['id']; - type SessionThreadType = Session['thread']; - type SessionStateType = Session['state']; - - // Assert types are correct - const mockThread: Thread = { - id: 'thread-456', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - - const _idCheck: SessionIdType = 'session-id'; - const _threadCheck: SessionThreadType = mockThread; - const _stateCheck: SessionStateType = new Map(); - - // Runtime check: we can create objects matching Session interface - const mockSession: Session = { - id: 'session-789', - thread: mockThread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - - expect(mockSession.id).toBe('session-789'); - expect(mockSession.thread).toBe(mockThread); - expect(mockSession.state).toBeInstanceOf(Map); - }); - - test('Variables interface includes Thread and Session', () => { - // Compile-time validation: Variables has all required properties - type VarThread = Variables['thread']; - type VarSession = Variables['session']; - type VarSessionId = Variables['sessionId']; - - // Type assertions - will fail if types don't match - const mockThread: Thread = { - id: 'thread', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - - const mockSession: Session = { - id: 'session', - thread: mockThread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - - const _threadCheck: VarThread = mockThread; - const _sessionCheck: VarSession = mockSession; - const _sessionIdCheck: VarSessionId = 'session-id'; - - expect(true).toBe(true); - }); - - test('Env interface includes Variables with correct types', () => { - // Compile-time validation: Env.Variables has Thread and Session - type EnvVariables = Env['Variables']; - type EnvThread = EnvVariables['thread']; - type EnvSession = EnvVariables['session']; - - // Type assertions - const mockThread: Thread = { - id: 'thread', - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - destroy: async () => {}, - empty: () => true, - }; - - const _threadCheck: EnvThread = mockThread; - - const mockSession: Session = { - id: 'session', - thread: mockThread, - state: new Map(), - addEventListener: () => {}, - removeEventListener: () => {}, - serializeUserData: () => undefined, - }; - - const _sessionCheck: EnvSession = mockSession; - - expect(true).toBe(true); - }); - - test('createRouter returns Hono instance with correct Env type', () => { - const router = createRouter(); - - // Compile-time validation: router context has correct types - router.get('/test', (c) => { - // c.var should have Variables type - type ContextVar = typeof c.var; - type ContextThread = ContextVar['thread']; - type ContextSession = ContextVar['session']; - - // These type assertions will fail if types are wrong - const thread: ContextThread = c.var.thread; - const session: ContextSession = c.var.session; - - // Validate thread is Thread type (not any) - const _threadCheck: Thread = thread; - // Validate session is Session type (not any) - const _sessionCheck: Session = session; - - return c.json({ success: true }); - }); - - expect(true).toBe(true); - }); - - test('Thread properties are accessible and correctly typed in route', () => { - const router = createRouter(); - - router.get('/thread-props', (c) => { - const thread = c.var.thread; - - // These should all be strongly typed - no 'any' - const id: string = thread.id; - const state: Map = thread.state; - const addEventListener: typeof thread.addEventListener = thread.addEventListener; - const removeEventListener: typeof thread.removeEventListener = thread.removeEventListener; - const destroy: typeof thread.destroy = thread.destroy; - const empty: typeof thread.empty = thread.empty; - - // Verify types are functions/map/string - expect(typeof id).toBe('string'); - expect(state).toBeInstanceOf(Map); - expect(typeof addEventListener).toBe('function'); - expect(typeof removeEventListener).toBe('function'); - expect(typeof destroy).toBe('function'); - expect(typeof empty).toBe('function'); - - return c.json({ id }); - }); - - expect(true).toBe(true); - }); - - test('Session properties are accessible and correctly typed in route', () => { - const router = createRouter(); - - router.get('/session-props', (c) => { - const session = c.var.session; - - // These should all be strongly typed - no 'any' - const id: string = session.id; - const thread: Thread = session.thread; - const state: Map = session.state; - const addEventListener: typeof session.addEventListener = session.addEventListener; - const removeEventListener: typeof session.removeEventListener = - session.removeEventListener; - const serializeUserData: typeof session.serializeUserData = session.serializeUserData; - - // Verify types - expect(typeof id).toBe('string'); - expect(thread).toHaveProperty('id'); - expect(state).toBeInstanceOf(Map); - expect(typeof addEventListener).toBe('function'); - expect(typeof removeEventListener).toBe('function'); - expect(typeof serializeUserData).toBe('function'); - - return c.json({ id }); - }); - - expect(true).toBe(true); - }); - - test('Type narrowing works correctly with Thread', () => { - const router = createRouter(); - - router.get('/narrow', (c) => { - const thread = c.var.thread; - - // This should work because thread.id is typed as string - const upper = thread.id.toUpperCase(); - const lower = thread.id.toLowerCase(); - const length = thread.id.length; - - expect(typeof upper).toBe('string'); - expect(typeof lower).toBe('string'); - expect(typeof length).toBe('number'); - - return c.json({ upper, lower, length }); - }); - - expect(true).toBe(true); - }); - - test('Generic app state works with Variables', () => { - type CustomAppState = { - database: string; - version: number; - }; - - // Variables should accept generic app state - type CustomVariables = Variables; - type CustomApp = CustomVariables['app']; - - // Type assertions - const appState: CustomApp = { - database: 'postgres://localhost', - version: 1, - }; - - const _dbCheck: string = appState.database; - const _versionCheck: number = appState.version; - - expect(appState.database).toBe('postgres://localhost'); - expect(appState.version).toBe(1); - }); -}); - -describe('Type Safety - Negative Tests', () => { - test('Thread interface requires all properties', () => { - // This should fail to compile if uncommented: - // const incompleteThread: Thread = { - // id: 'test', - // // missing state, addEventListener, etc. - // }; - - expect(true).toBe(true); - }); - - test('Session interface requires all properties', () => { - // This should fail to compile if uncommented: - // const incompleteSession: Session = { - // id: 'test', - // // missing thread, state, addEventListener, etc. - // }; - - expect(true).toBe(true); - }); - - test('Thread.id is readonly (cannot reassign)', () => { - const router = createRouter(); - - router.get('/readonly', (c) => { - const thread = c.var.thread; - - // This should work (reading) - const _id = thread.id; - - // This should fail to compile if uncommented: - // thread.id = 'new-id'; // Error: Cannot assign to 'id' because it is a read-only property - - return c.json({ success: true }); - }); - - expect(true).toBe(true); - }); -}); diff --git a/packages/runtime/test/validator-stream.test.ts b/packages/runtime/test/validator-stream.test.ts deleted file mode 100644 index 12199dd0b..000000000 --- a/packages/runtime/test/validator-stream.test.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { Hono } from 'hono'; -import { s } from '@agentuity/schema'; -import { validator } from '../src/validator'; - -describe('validator with stream option', () => { - test('POST route with stream flag skips output validation', async () => { - const OutputSchema = s.object({ id: s.string(), text: s.string() }); - - const app = new Hono().post( - '/stream', - validator({ - input: s.object({ query: s.string() }), - output: OutputSchema, - stream: true, - }), - async (c) => { - const data = c.req.valid('json'); - expect(data.query).toBe('test'); - - // Return a ReadableStream - return new Response( - new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode('{"id":"1","text":"chunk1"}\n')); - controller.enqueue(new TextEncoder().encode('{"id":"2","text":"chunk2"}\n')); - controller.close(); - }, - }), - { - headers: { 'Content-Type': 'text/event-stream' }, - } - ); - } - ); - - const res = await app.request('/stream', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query: 'test' }), - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Type')).toBe('text/event-stream'); - - // Read the stream - const reader = res.body?.getReader(); - expect(reader).toBeDefined(); - - const chunks: string[] = []; - const decoder = new TextDecoder(); - - while (reader) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(decoder.decode(value)); - } - - expect(chunks.join('')).toBe('{"id":"1","text":"chunk1"}\n{"id":"2","text":"chunk2"}\n'); - }); - - test('GET route with stream flag and output-only validation', async () => { - const app = new Hono().get( - '/events', - validator({ - output: s.object({ event: s.string() }), - stream: true, - }), - async () => { - return new Response( - new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode('{"event":"start"}\n')); - controller.enqueue(new TextEncoder().encode('{"event":"end"}\n')); - controller.close(); - }, - }), - { - headers: { 'Content-Type': 'text/event-stream' }, - } - ); - } - ); - - const res = await app.request('/events'); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Type')).toBe('text/event-stream'); - - const reader = res.body?.getReader(); - const chunks: string[] = []; - const decoder = new TextDecoder(); - - while (reader) { - const { done, value } = await reader.read(); - if (done) break; - chunks.push(decoder.decode(value)); - } - - expect(chunks.join('')).toBe('{"event":"start"}\n{"event":"end"}\n'); - }); - - test('non-streaming route with stream: false validates output', async () => { - const OutputSchema = s.object({ id: s.string() }); - - const app = new Hono().post( - '/create', - validator({ - input: s.object({ name: s.string() }), - output: OutputSchema, - stream: false, - }), - async (c) => { - const data = c.req.valid('json'); - return c.json({ id: '123', name: data.name }); - } - ); - - const res = await app.request('/create', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice' }), - }); - - expect(res.status).toBe(200); - const result = await res.json(); - // Output validation should strip out the 'name' field (not in schema) - expect(result).toEqual({ id: '123' }); - }); - - test('validator without stream option defaults to non-streaming', async () => { - const OutputSchema = s.object({ count: s.number() }); - - const app = new Hono().get( - '/count', - validator({ - output: OutputSchema, - }), - async (c) => { - return c.json({ count: 42, extra: 'should be removed' }); - } - ); - - const res = await app.request('/count'); - - expect(res.status).toBe(200); - const result = await res.json(); - // Output validation should strip out the 'extra' field - expect(result).toEqual({ count: 42 }); - }); - - test('PUT route with stream flag returns ReadableStream', async () => { - const app = new Hono().put( - '/update/:id', - validator({ - input: s.object({ data: s.string() }), - output: s.object({ status: s.string() }), - stream: true, - }), - async (c) => { - const input = c.req.valid('json'); - expect(input.data).toBe('test data'); - - return new Response( - new ReadableStream({ - start(controller) { - controller.enqueue(new TextEncoder().encode('{"status":"processing"}\n')); - controller.enqueue(new TextEncoder().encode('{"status":"complete"}\n')); - controller.close(); - }, - }), - { - headers: { 'Content-Type': 'application/octet-stream' }, - } - ); - } - ); - - const res = await app.request('/update/123', { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ data: 'test data' }), - }); - - expect(res.status).toBe(200); - expect(res.headers.get('Content-Type')).toBe('application/octet-stream'); - }); -}); diff --git a/packages/runtime/test/validator.test.ts b/packages/runtime/test/validator.test.ts deleted file mode 100644 index 5044aa987..000000000 --- a/packages/runtime/test/validator.test.ts +++ /dev/null @@ -1,286 +0,0 @@ -import { describe, test, expect } from 'bun:test'; -import { Hono } from 'hono'; -import { validator } from '../src/validator'; -import { s } from '@agentuity/schema'; - -describe('validator middleware', () => { - describe('GET routes', () => { - test('validates query parameters', async () => { - const app = new Hono(); - - app.get( - '/search', - validator({ - input: s.object({ q: s.string(), limit: s.coerce.number().optional() }), - output: s.array(s.object({ id: s.string() })), - }), - async (c) => { - const query = c.req.valid('query'); - return c.json([{ id: query.q }]); - } - ); - - // Valid request - const res = await app.request('/search?q=test'); - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual([{ id: 'test' }]); - }); - - test('returns 400 for invalid query parameters', async () => { - const app = new Hono(); - - app.get( - '/search', - validator({ - input: s.object({ q: s.string() }), - }), - async (c) => { - const query = c.req.valid('query'); - return c.json({ query }); - } - ); - - // Missing required param - const res = await app.request('/search'); - expect(res.status).toBe(400); - const error = await res.json(); - expect(error.error).toBe('Validation failed'); - expect(error.issues).toBeDefined(); - }); - - test('output-only validation for GET', async () => { - const app = new Hono(); - - app.get( - '/users', - validator({ - output: s.array(s.object({ id: s.string(), name: s.string() })), - }), - async (c) => { - return c.json([ - { id: '1', name: 'Alice' }, - { id: '2', name: 'Bob' }, - ]); - } - ); - - const res = await app.request('/users'); - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual([ - { id: '1', name: 'Alice' }, - { id: '2', name: 'Bob' }, - ]); - }); - }); - - describe('POST routes', () => { - test('validates JSON body', async () => { - const app = new Hono(); - - app.post( - '/users', - validator({ - input: s.object({ name: s.string(), email: s.string() }), - output: s.object({ id: s.string(), name: s.string(), email: s.string() }), - }), - async (c) => { - const data = c.req.valid('json'); - return c.json({ id: '123', ...data }); - } - ); - - // Valid request - const res = await app.request('/users', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'alice@example.com' }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ id: '123', name: 'Alice', email: 'alice@example.com' }); - }); - - test('returns 400 for invalid JSON body', async () => { - const app = new Hono(); - - app.post( - '/users', - validator({ - input: s.object({ name: s.string(), email: s.string().email() }), - }), - async (c) => { - const data = c.req.valid('json'); - return c.json(data); - } - ); - - // Invalid email - const res = await app.request('/users', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice', email: 'not-an-email' }), - }); - - expect(res.status).toBe(400); - const error = await res.json(); - expect(error.error).toBe('Validation failed'); - }); - - test('validates output schema', async () => { - const app = new Hono(); - - app.post( - '/create', - validator({ - input: s.object({ name: s.string() }), - output: s.object({ id: s.string(), name: s.string() }), - }), - async (c) => { - const data = c.req.valid('json'); - // Return invalid output (missing id) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return c.json({ name: data.name } as any); - } - ); - - const res = await app.request('/create', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Alice' }), - }); - - // Should throw 500 due to output validation failure - expect(res.status).toBe(500); - }); - }); - - describe('PUT/PATCH/DELETE routes', () => { - test('validates body for PUT request', async () => { - const app = new Hono(); - - app.put( - '/users/:id', - validator({ - input: s.object({ name: s.string() }), - output: s.object({ id: s.string(), name: s.string() }), - }), - async (c) => { - const data = c.req.valid('json'); - return c.json({ id: c.req.param('id'), ...data }); - } - ); - - const res = await app.request('/users/123', { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Updated' }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ id: '123', name: 'Updated' }); - }); - - test('validates body for PATCH request', async () => { - const app = new Hono(); - - app.patch( - '/users/:id', - validator({ - input: s.object({ name: s.string().optional() }), - }), - async (c) => { - const data = c.req.valid('json'); - return c.json({ id: c.req.param('id'), ...data }); - } - ); - - const res = await app.request('/users/123', { - method: 'PATCH', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Patched' }), - }); - - expect(res.status).toBe(200); - }); - - test('validates body for DELETE request', async () => { - const app = new Hono(); - - app.delete( - '/users/:id', - validator({ - input: s.object({ reason: s.string() }), - output: s.object({ deleted: s.boolean() }), - }), - async (c) => { - const _data = c.req.valid('json'); - return c.json({ deleted: true }); - } - ); - - const res = await app.request('/users/123', { - method: 'DELETE', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ reason: 'Account closed' }), - }); - - expect(res.status).toBe(200); - const data = await res.json(); - expect(data).toEqual({ deleted: true }); - }); - }); - - describe('type safety', () => { - test('input types flow correctly for GET', async () => { - const app = new Hono(); - - app.get( - '/test', - validator({ - // Query params are strings, use coerce for numbers - input: s.object({ id: s.string(), count: s.coerce.number() }), - }), - async (c) => { - const query = c.req.valid('query'); - // TypeScript should infer: { id: string, count: number } - const id: string = query.id; - const count: number = query.count; - return c.json({ id, count }); - } - ); - - const res = await app.request('/test?id=abc&count=5'); - expect(res.status).toBe(200); - }); - - test('input types flow correctly for POST', async () => { - const app = new Hono(); - - app.post( - '/test', - validator({ - input: s.object({ name: s.string(), active: s.boolean() }), - }), - async (c) => { - const data = c.req.valid('json'); - // TypeScript should infer: { name: string, active: boolean } - const name: string = data.name; - const active: boolean = data.active; - return c.json({ name, active }); - } - ); - - const res = await app.request('/test', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Test', active: true }), - }); - - expect(res.status).toBe(200); - }); - }); -}); diff --git a/packages/runtime/test/web-session-middleware.test.ts b/packages/runtime/test/web-session-middleware.test.ts deleted file mode 100644 index b3c3389da..000000000 --- a/packages/runtime/test/web-session-middleware.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Tests for web session middleware behavior. - * - * Verifies that createWebSessionMiddleware: - * - Does NOT set sessionId in context (only _webThreadId) - * - Does NOT set x-session-id or x-thread-id response headers - * - Only tracks thread ID for web analytics (no session tracking) - * - * Note: Cookie setting tests require proper thread provider initialization - * which is tested in integration tests. This unit test focuses on the - * "no session, no headers" behavior. - */ - -import { test, expect, describe } from 'bun:test'; - -describe('Web Session Middleware', () => { - test('does not set x-session-id response header', async () => { - // Import dynamically to get fresh instance - const { Hono } = await import('hono'); - const { createWebSessionMiddleware } = await import('../src/middleware'); - - const app = new Hono(); - app.use('*', createWebSessionMiddleware()); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - }); - - // Should NOT have session header - web analytics doesn't track sessions - expect(res.headers.get('x-session-id')).toBeNull(); - }); - - test('does not set x-thread-id response header', async () => { - const { Hono } = await import('hono'); - const { createWebSessionMiddleware } = await import('../src/middleware'); - - const app = new Hono(); - app.use('*', createWebSessionMiddleware()); - app.get('/test', (c) => c.json({ ok: true })); - - const res = await app.request('/test', { - method: 'GET', - }); - - // Should NOT have thread header in response - expect(res.headers.get('x-thread-id')).toBeNull(); - }); - - test('does not set sessionId in context', async () => { - const { Hono } = await import('hono'); - const { createWebSessionMiddleware } = await import('../src/middleware'); - - const app = new Hono(); - app.use('*', createWebSessionMiddleware()); - - let capturedSessionId: string | undefined; - app.get('/test', (c) => { - capturedSessionId = c.get('sessionId'); - return c.json({ ok: true }); - }); - - await app.request('/test', { - method: 'GET', - }); - - // Context should NOT have sessionId - web analytics doesn't create sessions - expect(capturedSessionId).toBeUndefined(); - }); - - test('does not set thread in context (uses _webThreadId instead)', async () => { - const { Hono } = await import('hono'); - const { createWebSessionMiddleware } = await import('../src/middleware'); - - const app = new Hono(); - app.use('*', createWebSessionMiddleware()); - - let capturedThread: { id: string } | undefined; - app.get('/test', (c) => { - capturedThread = c.get('thread'); - return c.json({ ok: true }); - }); - - await app.request('/test', { - method: 'GET', - }); - - // Context should NOT have thread object - only _webThreadId string - expect(capturedThread).toBeUndefined(); - }); - - test('does not set _webSessionId in context (removed)', async () => { - const { Hono } = await import('hono'); - const { createWebSessionMiddleware } = await import('../src/middleware'); - - const app = new Hono(); - app.use('*', createWebSessionMiddleware()); - - let capturedWebSessionId: string | undefined; - app.get('/test', (c) => { - capturedWebSessionId = c.get('_webSessionId'); - return c.json({ ok: true }); - }); - - await app.request('/test', { - method: 'GET', - }); - - // _webSessionId should NOT be set - web analytics only tracks thread - expect(capturedWebSessionId).toBeUndefined(); - }); -}); diff --git a/packages/runtime/test/webrtc-signaling.test.ts b/packages/runtime/test/webrtc-signaling.test.ts deleted file mode 100644 index 2b2c1cdf0..000000000 --- a/packages/runtime/test/webrtc-signaling.test.ts +++ /dev/null @@ -1,440 +0,0 @@ -import { describe, test, expect, beforeEach } from 'bun:test'; -import { - WebRTCRoomManager, - type SignalMsg, - type SDPDescription, - type ICECandidate, - type WebRTCSignalingCallbacks, -} from '../src/webrtc-signaling'; -import type { WebSocketConnection } from '../src/router'; - -// Mock WebSocket connection -function createMockWs(): WebSocketConnection & { messages: string[] } { - const messages: string[] = []; - return { - messages, - onOpen: () => {}, - onMessage: () => {}, - onClose: () => {}, - send: (data: string | ArrayBuffer | Uint8Array) => { - messages.push(typeof data === 'string' ? data : data.toString()); - }, - }; -} - -function parseMessage(ws: { messages: string[] }, index = -1): SignalMsg { - const idx = index < 0 ? ws.messages.length + index : index; - return JSON.parse(ws.messages[idx]); -} - -describe('WebRTCRoomManager', () => { - let roomManager: WebRTCRoomManager; - - beforeEach(() => { - roomManager = new WebRTCRoomManager({ maxPeers: 2 }); - }); - - describe('handleJoin', () => { - test('should assign peerId and send joined message', () => { - const ws = createMockWs(); - roomManager.handleJoin(ws, 'room-1'); - - expect(ws.messages.length).toBe(1); - const msg = parseMessage(ws); - expect(msg.t).toBe('joined'); - if (msg.t === 'joined') { - expect(msg.peerId).toMatch(/^peer-/); - expect(msg.roomId).toBe('room-1'); - expect(msg.peers).toEqual([]); - } - }); - - test('should include existing peers in joined message', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - const msg1 = parseMessage(ws1); - const peer1Id = msg1.t === 'joined' ? msg1.peerId : ''; - - roomManager.handleJoin(ws2, 'room-1'); - const msg2 = parseMessage(ws2); - - expect(msg2.t).toBe('joined'); - if (msg2.t === 'joined') { - expect(msg2.peers).toContain(peer1Id); - } - }); - - test('should notify existing peers when new peer joins', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - - // ws1 should receive peer-joined notification - expect(ws1.messages.length).toBe(2); - const notification = parseMessage(ws1); - expect(notification.t).toBe('peer-joined'); - }); - - test('should reject peer when room is full', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - const ws3 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - roomManager.handleJoin(ws3, 'room-1'); - - const msg = parseMessage(ws3); - expect(msg.t).toBe('error'); - if (msg.t === 'error') { - expect(msg.message).toContain('full'); - } - }); - - test('should allow joining different rooms', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - const ws3 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - roomManager.handleJoin(ws3, 'room-2'); - - // ws3 should successfully join room-2 - const msg = parseMessage(ws3); - expect(msg.t).toBe('joined'); - }); - }); - - describe('handleDisconnect', () => { - test('should remove peer from room and notify others', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - const msg1 = parseMessage(ws1); - const peer1Id = msg1.t === 'joined' ? msg1.peerId : ''; - - roomManager.handleJoin(ws2, 'room-1'); - ws1.messages.length = 0; // Clear in-place - - roomManager.handleDisconnect(ws1); - - // ws2 should receive peer-left notification - const notification = parseMessage(ws2); - expect(notification.t).toBe('peer-left'); - if (notification.t === 'peer-left') { - expect(notification.peerId).toBe(peer1Id); - } - }); - - test('should allow new peer after disconnect', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - const ws3 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - roomManager.handleDisconnect(ws1); - roomManager.handleJoin(ws3, 'room-1'); - - // ws3 should successfully join - const msg = parseMessage(ws3); - expect(msg.t).toBe('joined'); - }); - - test('should clean up empty rooms', () => { - const ws1 = createMockWs(); - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleDisconnect(ws1); - - const stats = roomManager.getRoomStats(); - expect(stats.roomCount).toBe(0); - expect(stats.totalPeers).toBe(0); - }); - }); - - describe('handleSDP', () => { - test('should relay SDP to target peer', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - - const msg2 = parseMessage(ws2); - const peer2Id = msg2.t === 'joined' ? msg2.peerId : ''; - - ws2.messages.length = 0; // Clear in-place - - const sdp: SDPDescription = { type: 'offer', sdp: 'test-sdp' }; - roomManager.handleSDP(ws1, peer2Id, sdp); - - const relayed = parseMessage(ws2); - expect(relayed.t).toBe('sdp'); - if (relayed.t === 'sdp') { - expect(relayed.description).toEqual(sdp); - expect(relayed.from).toMatch(/^peer-/); // Server-injected from - } - }); - - test('should broadcast SDP to all peers if no target', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - - ws2.messages.length = 0; // Clear in-place - - const sdp: SDPDescription = { type: 'offer', sdp: 'test-sdp' }; - roomManager.handleSDP(ws1, undefined, sdp); - - const relayed = parseMessage(ws2); - expect(relayed.t).toBe('sdp'); - }); - - test('should return error if not in a room', () => { - const ws = createMockWs(); - const sdp: SDPDescription = { type: 'offer', sdp: 'test-sdp' }; - roomManager.handleSDP(ws, undefined, sdp); - - const msg = parseMessage(ws); - expect(msg.t).toBe('error'); - }); - }); - - describe('handleICE', () => { - test('should relay ICE candidate to target peer', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - - const msg2 = parseMessage(ws2); - const peer2Id = msg2.t === 'joined' ? msg2.peerId : ''; - - ws2.messages.length = 0; // Clear in-place - - const candidate: ICECandidate = { candidate: 'test-candidate', sdpMid: '0' }; - roomManager.handleICE(ws1, peer2Id, candidate); - - const relayed = parseMessage(ws2); - expect(relayed.t).toBe('ice'); - if (relayed.t === 'ice') { - expect(relayed.candidate).toEqual(candidate); - expect(relayed.from).toMatch(/^peer-/); - } - }); - }); - - describe('handleMessage', () => { - test('should parse and route join messages', () => { - const ws = createMockWs(); - roomManager.handleMessage(ws, JSON.stringify({ t: 'join', roomId: 'room-1' })); - - const msg = parseMessage(ws); - expect(msg.t).toBe('joined'); - }); - - test('should parse and route sdp messages', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - - ws2.messages.length = 0; // Clear in-place - - const sdpMsg = { - t: 'sdp', - from: 'ignored', // Server should override this - description: { type: 'offer', sdp: 'test' }, - }; - roomManager.handleMessage(ws1, JSON.stringify(sdpMsg)); - - const relayed = parseMessage(ws2); - expect(relayed.t).toBe('sdp'); - }); - - test('should return error for invalid JSON', () => { - const ws = createMockWs(); - roomManager.handleMessage(ws, 'not-json'); - - const msg = parseMessage(ws); - expect(msg.t).toBe('error'); - if (msg.t === 'error') { - expect(msg.message).toContain('Invalid JSON'); - } - }); - - test('should return error for unknown message type', () => { - const ws = createMockWs(); - roomManager.handleMessage(ws, JSON.stringify({ t: 'unknown' })); - - const msg = parseMessage(ws); - expect(msg.t).toBe('error'); - if (msg.t === 'error') { - expect(msg.message).toContain('Unknown message type'); - } - }); - }); - - describe('getRoomStats', () => { - test('should return correct room and peer counts', () => { - const ws1 = createMockWs(); - const ws2 = createMockWs(); - const ws3 = createMockWs(); - - roomManager.handleJoin(ws1, 'room-1'); - roomManager.handleJoin(ws2, 'room-1'); - roomManager.handleJoin(ws3, 'room-2'); - - const stats = roomManager.getRoomStats(); - expect(stats.roomCount).toBe(2); - expect(stats.totalPeers).toBe(3); - }); - }); - - describe('maxPeers configuration', () => { - test('should respect custom maxPeers limit', () => { - const manager = new WebRTCRoomManager({ maxPeers: 3 }); - const ws1 = createMockWs(); - const ws2 = createMockWs(); - const ws3 = createMockWs(); - const ws4 = createMockWs(); - - manager.handleJoin(ws1, 'room-1'); - manager.handleJoin(ws2, 'room-1'); - manager.handleJoin(ws3, 'room-1'); - manager.handleJoin(ws4, 'room-1'); - - // ws4 should be rejected - const msg = parseMessage(ws4); - expect(msg.t).toBe('error'); - - const stats = manager.getRoomStats(); - expect(stats.totalPeers).toBe(3); - }); - }); - - describe('callbacks', () => { - test('should call onRoomCreated when first peer joins', () => { - const events: string[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onRoomCreated: (roomId) => events.push(`room-created:${roomId}`), - }; - const manager = new WebRTCRoomManager({ callbacks }); - const ws = createMockWs(); - - manager.handleJoin(ws, 'room-1'); - - expect(events).toContain('room-created:room-1'); - }); - - test('should call onPeerJoin when peer joins', () => { - const events: string[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onPeerJoin: (peerId, roomId) => events.push(`peer-join:${peerId}:${roomId}`), - }; - const manager = new WebRTCRoomManager({ callbacks }); - const ws = createMockWs(); - - manager.handleJoin(ws, 'room-1'); - - expect(events.length).toBe(1); - expect(events[0]).toMatch(/^peer-join:peer-.*:room-1$/); - }); - - test('should call onPeerLeave when peer disconnects', () => { - const events: string[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onPeerLeave: (peerId, roomId, reason) => - events.push(`peer-leave:${peerId}:${roomId}:${reason}`), - }; - const manager = new WebRTCRoomManager({ callbacks }); - const ws = createMockWs(); - - manager.handleJoin(ws, 'room-1'); - manager.handleDisconnect(ws); - - expect(events.length).toBe(1); - expect(events[0]).toMatch(/^peer-leave:peer-.*:room-1:disconnect$/); - }); - - test('should call onRoomDestroyed when last peer leaves', () => { - const events: string[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onRoomDestroyed: (roomId) => events.push(`room-destroyed:${roomId}`), - }; - const manager = new WebRTCRoomManager({ callbacks }); - const ws = createMockWs(); - - manager.handleJoin(ws, 'room-1'); - manager.handleDisconnect(ws); - - expect(events).toContain('room-destroyed:room-1'); - }); - - test('should call onMessage for SDP messages', () => { - const events: string[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onMessage: (type, from, to, roomId) => - events.push(`message:${type}:${from}:${to}:${roomId}`), - }; - const manager = new WebRTCRoomManager({ callbacks }); - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - manager.handleJoin(ws1, 'room-1'); - manager.handleJoin(ws2, 'room-1'); - - const sdp: SDPDescription = { type: 'offer', sdp: 'test-sdp' }; - manager.handleSDP(ws1, undefined, sdp); - - expect(events.length).toBe(1); - expect(events[0]).toMatch(/^message:sdp:peer-.*:undefined:room-1$/); - }); - - test('should call onMessage for ICE messages', () => { - const events: string[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onMessage: (type, from, to, roomId) => - events.push(`message:${type}:${from}:${to}:${roomId}`), - }; - const manager = new WebRTCRoomManager({ callbacks }); - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - manager.handleJoin(ws1, 'room-1'); - manager.handleJoin(ws2, 'room-1'); - - const candidate: ICECandidate = { candidate: 'test-candidate' }; - manager.handleICE(ws1, undefined, candidate); - - expect(events.length).toBe(1); - expect(events[0]).toMatch(/^message:ice:peer-.*:undefined:room-1$/); - }); - - test('should call onError for room full errors', () => { - const errors: Error[] = []; - const callbacks: WebRTCSignalingCallbacks = { - onError: (error) => errors.push(error), - }; - const manager = new WebRTCRoomManager({ maxPeers: 1, callbacks }); - const ws1 = createMockWs(); - const ws2 = createMockWs(); - - manager.handleJoin(ws1, 'room-1'); - manager.handleJoin(ws2, 'room-1'); - - expect(errors.length).toBe(1); - expect(errors[0].message).toContain('full'); - }); - }); -}); diff --git a/packages/runtime/test/websocket-reconnection.test.ts b/packages/runtime/test/websocket-reconnection.test.ts deleted file mode 100644 index 2a9761f59..000000000 --- a/packages/runtime/test/websocket-reconnection.test.ts +++ /dev/null @@ -1,339 +0,0 @@ -import { describe, test, expect, beforeAll, afterAll, beforeEach } from 'bun:test'; -import { WebSocketServer } from 'ws'; -import type { WebSocket } from 'ws'; -// Note: ThreadWebSocketClient is an internal class exported for testing only -// It's not part of the public API and subject to change -import { ThreadWebSocketClient, type ThreadWebSocketClientOptions } from '../src/session'; - -// Test configuration: scale down timeouts to ~1/100 of production values -const testOptions: ThreadWebSocketClientOptions = { - connectionTimeoutMs: 100, // instead of 10_000 - requestTimeoutMs: 100, // instead of 10_000 - reconnectBaseDelayMs: 10, // backoff: 20ms, 40ms, 80ms, 160ms, 300ms - reconnectMaxDelayMs: 300, - maxReconnectAttempts: 5, -}; - -describe('WebSocket Reconnection', () => { - let wss: WebSocketServer; - let port: number; - let connections: WebSocket[] = []; - let authAttempts = 0; - let closeBeforeAuth = false; - let connectionCount = 0; - let authFailure = false; - - beforeAll(async () => { - // Create WebSocket server with dynamic port allocation - wss = new WebSocketServer({ port: 0 }); - - wss.on('connection', (ws: WebSocket) => { - connections.push(ws); - connectionCount++; - - ws.on('message', (data: Buffer) => { - try { - const message = JSON.parse(data.toString()); - - // Handle authentication - if ('authorization' in message) { - authAttempts++; - - // Simulate server closing connection before auth completes (rollout scenario) - if (closeBeforeAuth) { - ws.close(); - return; - } - - // Simulate authentication failure - if (authFailure) { - ws.send(JSON.stringify({ success: false, error: 'Invalid API key' })); - // Close the connection after sending auth failure - setTimeout(() => ws.close(), 10); - return; - } - - // Send auth success - ws.send(JSON.stringify({ success: true })); - return; - } - - // Handle thread actions - if ('action' in message && 'id' in message) { - if (message.action === 'restore') { - ws.send(JSON.stringify({ id: message.id, success: true, data: undefined })); - } else if (message.action === 'save') { - ws.send(JSON.stringify({ id: message.id, success: true })); - } else if (message.action === 'delete') { - ws.send(JSON.stringify({ id: message.id, success: true })); - } - } - } catch { - // Ignore parse errors - } - }); - }); - - // Wait for server to be ready - await new Promise((resolve) => { - wss.on('listening', () => { - const address = wss.address() as { port: number }; - port = address.port; - resolve(); - }); - }); - }); - - afterAll(() => { - // Close all connections - for (const ws of connections) { - ws.close(); - } - wss.close(); - }); - - beforeEach(() => { - // Close any lingering connections from previous tests - for (const ws of connections) { - if (ws.readyState === 1) { - // OPEN - ws.close(); - } - } - - // Reset counters and state before each test - authAttempts = 0; - closeBeforeAuth = false; - authFailure = false; - connectionCount = 0; - connections = []; - }); - - test('reconnects transparently when connection closes before authentication', async () => { - // Simulate server rollout: first connection closes before auth, second succeeds - closeBeforeAuth = true; - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // Start connection - should not throw immediately - const connectPromise = client.connect(); - - // Wait for first connection attempt (give WebSocket events time to process) - // Use longer delay for CI environments that may be slower - await Bun.sleep(50); - - // Verify first connection attempted auth - expect(authAttempts).toBeGreaterThanOrEqual(1); - expect(connectionCount).toBeGreaterThanOrEqual(1); - - // Allow auth to succeed on next attempt (simulating server coming back online) - closeBeforeAuth = false; - - // Wait for reconnection (first retry after ~20ms with backoff, but allow more time for CI) - await Bun.sleep(100); - - // The original connect() promise should resolve after automatic reconnection - await expect(connectPromise).resolves.toBeUndefined(); - - // Verify reconnection happened - expect(connectionCount).toBeGreaterThanOrEqual(2); - expect(authAttempts).toBeGreaterThanOrEqual(2); - - client.cleanup(); - }); - - test('successfully reconnects after authenticated disconnect', async () => { - closeBeforeAuth = false; - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // Initial successful connection - await client.connect(); - - // Capture counts immediately after connect returns (before any potential race) - const authCountAfterConnect = authAttempts; - const connCountAfterConnect = connectionCount; - - expect(authCountAfterConnect).toBeGreaterThanOrEqual(1); - expect(connCountAfterConnect).toBeGreaterThanOrEqual(1); - - // Force disconnect after successful auth - const lastConnection = connections[connections.length - 1]; - lastConnection?.close(); - - // Wait for reconnection (first retry after ~20ms with backoff, but allow more time for CI) - await Bun.sleep(100); - - // Verify reconnection happened (at least one more connection and auth attempt) - expect(connectionCount).toBeGreaterThan(connCountAfterConnect); - expect(authAttempts).toBeGreaterThan(authCountAfterConnect); - - client.cleanup(); - }); - - test('uses exponential backoff for retries', async () => { - closeBeforeAuth = true; // Always fail - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // Intercept connections from this specific test - const startIndex = connections.length; - - // First connection attempt fails - client.connect().catch(() => {}); // Don't wait, just track - - // Wait for initial connection - await Bun.sleep(10); - const countAfterFirst = connections.length; - - // Wait for retry 1 (scheduled after ~20ms with exponential backoff) - await Bun.sleep(30); - const countAfterRetry1 = connections.length; - - // Wait for retry 2 (scheduled after ~40ms more with exponential backoff) - await Bun.sleep(60); - const countAfterRetry2 = connections.length; - - // Verify retries happened - expect(countAfterFirst).toBeGreaterThanOrEqual(startIndex + 1); // Initial attempt - expect(countAfterRetry1).toBeGreaterThanOrEqual(countAfterFirst + 1); // First retry - expect(countAfterRetry2).toBeGreaterThanOrEqual(countAfterRetry1 + 1); // Second retry - - client.cleanup(); - }); - - test('operations wait for reconnection in progress', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // First, establish a successful connection - closeBeforeAuth = false; - await client.connect(); - - expect(authAttempts).toBe(1); - expect(connectionCount).toBe(1); - - // Now close the connection to trigger reconnection - const lastConnection = connections[connections.length - 1]; - lastConnection?.close(); - - // Wait for reconnection to be scheduled (exponential backoff delay) - await Bun.sleep(50); - - // Verify reconnection happened automatically - expect(connectionCount).toBeGreaterThanOrEqual(2); - expect(authAttempts).toBeGreaterThanOrEqual(2); - - // Now operations should work - await expect(client.restore('thrd_test123')).resolves.toBeUndefined(); - - client.cleanup(); - }); - - test('gives up after max reconnection attempts and rejects initial promise', async () => { - // Always close before auth to exhaust all retry attempts - closeBeforeAuth = true; - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // Start connect (will fail after all retries) - const connectPromise = client.connect(); - - // Wait for all retry attempts to complete - // Max attempts = 5, exponential backoff: 20ms, 40ms, 80ms, 160ms, 300ms (capped) - // Total time is comfortably covered by 600ms - await Bun.sleep(600); - - // The connect should eventually fail after all retries are exhausted - await expect(connectPromise).rejects.toThrow( - /WebSocket closed before authentication after \d+ attempts/ - ); - - // Verify we made the expected number of connection attempts (1 initial + 5 retries) - expect(connectionCount).toBeGreaterThanOrEqual(5); - expect(authAttempts).toBeGreaterThanOrEqual(5); - - client.cleanup(); - }); - - test('handles authentication failure (not retried)', async () => { - // Simulate actual auth failure (bad API key) - authFailure = true; - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // Auth failure should reject (message may vary due to timing of close event) - await expect(client.connect()).rejects.toThrow(); - - // Should only have tried once (no retries for auth failures) - expect(authAttempts).toBe(1); - expect(connectionCount).toBe(1); - - client.cleanup(); - }); - - test('handles connection errors during initial connect', async () => { - // Try to connect to a port that doesn't exist - const client = new ThreadWebSocketClient('test-key', 'ws://localhost:99999', testOptions); - - // Should fail with connection error - await expect(client.connect()).rejects.toThrow(/WebSocket error|ECONNREFUSED|Invalid url/); - - client.cleanup(); - }); - - test('cleanup stops reconnection attempts', async () => { - closeBeforeAuth = true; - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - // Start connection (will fail and schedule reconnection) - client.connect().catch(() => {}); - - // Wait for first connection attempt - await Bun.sleep(10); - - const countBeforeCleanup = connectionCount; - - // Cleanup should stop reconnection timer - client.cleanup(); - - // Wait for what would have been the reconnection delay - await Bun.sleep(50); - - // No new connections should have been made after cleanup - expect(connectionCount).toBe(countBeforeCleanup); - }); - - test('multiple sequential connects after close before auth', async () => { - // First connection: close before auth, then allow success - closeBeforeAuth = true; - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - - const firstConnect = client.connect(); - - // Wait a bit - await Bun.sleep(10); - - // Allow auth to succeed - closeBeforeAuth = false; - - // Wait for reconnection - await Bun.sleep(50); - - // First connect should succeed via reconnection - await expect(firstConnect).resolves.toBeUndefined(); - - // Manually close the connection - const lastConnection = connections[connections.length - 1]; - lastConnection?.close(); - - // Wait for auto-reconnection - await Bun.sleep(50); - - // Operations should still work - await expect(client.restore('thrd_test456')).resolves.toBeUndefined(); - - client.cleanup(); - }); -}); diff --git a/packages/runtime/test/websocket-thread-persistence.test.ts b/packages/runtime/test/websocket-thread-persistence.test.ts deleted file mode 100644 index 5f3b8c6df..000000000 --- a/packages/runtime/test/websocket-thread-persistence.test.ts +++ /dev/null @@ -1,287 +0,0 @@ -/** - * Integration tests for WebSocket thread persistence. - * Tests the full lifecycle of thread state save/restore via WebSocket. - */ - -import { describe, test, expect, beforeAll, afterAll, beforeEach } from 'bun:test'; -import { WebSocketServer } from 'ws'; -import type { WebSocket } from 'ws'; -import { - ThreadWebSocketClient, - parseThreadData, - type ThreadWebSocketClientOptions, -} from '../src/session'; - -const testOptions: ThreadWebSocketClientOptions = { - connectionTimeoutMs: 100, - requestTimeoutMs: 100, - reconnectBaseDelayMs: 10, - reconnectMaxDelayMs: 300, - maxReconnectAttempts: 5, -}; - -describe('WebSocket Thread Persistence', () => { - let wss: WebSocketServer; - let port: number; - let connections: WebSocket[] = []; - let storedThreads: Map; - - beforeAll(async () => { - storedThreads = new Map(); - - wss = new WebSocketServer({ port: 0 }); - - wss.on('connection', (ws: WebSocket) => { - connections.push(ws); - - ws.on('message', (data: Buffer) => { - try { - const message = JSON.parse(data.toString()); - - if ('authorization' in message) { - ws.send(JSON.stringify({ success: true })); - return; - } - - if ('action' in message && 'id' in message) { - if (message.action === 'restore') { - const threadId = message.data.thread_id; - const stored = storedThreads.get(threadId); - ws.send( - JSON.stringify({ - id: message.id, - success: true, - data: stored, - }) - ); - } else if (message.action === 'save') { - const threadId = message.data.thread_id; - const userData = message.data.user_data; - storedThreads.set(threadId, userData); - ws.send(JSON.stringify({ id: message.id, success: true })); - } else if (message.action === 'delete') { - const threadId = message.data.thread_id; - storedThreads.delete(threadId); - ws.send(JSON.stringify({ id: message.id, success: true })); - } - } - } catch { - // Ignore parse errors - } - }); - }); - - await new Promise((resolve) => { - wss.on('listening', () => { - const address = wss.address() as { port: number }; - port = address.port; - resolve(); - }); - }); - }); - - afterAll(() => { - for (const ws of connections) { - ws.close(); - } - wss.close(); - }); - - beforeEach(() => { - for (const ws of connections) { - if (ws.readyState === 1) { - ws.close(); - } - } - connections = []; - storedThreads.clear(); - }); - - test('saves thread state in new envelope format', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - const stateData = JSON.stringify({ - state: { messages: ['hello', 'world'] }, - metadata: { userId: 'user123' }, - }); - - await client.save('thrd_test1', stateData); - - const stored = storedThreads.get('thrd_test1'); - expect(stored).toBe(stateData); - - client.cleanup(); - }); - - test('restores thread state correctly', async () => { - const stateData = JSON.stringify({ - state: { messages: ['saved', 'message'] }, - metadata: { role: 'admin' }, - }); - storedThreads.set('thrd_test2', stateData); - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - const restored = await client.restore('thrd_test2'); - - expect(restored).toBe(stateData); - - const { flatStateJson, metadata } = parseThreadData(restored); - expect(flatStateJson).toBe(JSON.stringify({ messages: ['saved', 'message'] })); - expect(metadata).toEqual({ role: 'admin' }); - - client.cleanup(); - }); - - test('returns undefined for non-existent thread', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - const restored = await client.restore('thrd_nonexistent'); - - expect(restored).toBeUndefined(); - - client.cleanup(); - }); - - test('deletes thread from storage', async () => { - storedThreads.set('thrd_delete', JSON.stringify({ state: { data: 'to delete' } })); - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - await client.delete('thrd_delete'); - - expect(storedThreads.has('thrd_delete')).toBe(false); - - client.cleanup(); - }); - - test('full round-trip: save -> restore -> modify -> save -> restore', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - const state1 = JSON.stringify({ - state: { messages: ['first'] }, - metadata: { userId: 'user1' }, - }); - await client.save('thrd_roundtrip', state1); - - const restored1 = await client.restore('thrd_roundtrip'); - const { flatStateJson: flat1 } = parseThreadData(restored1); - expect(JSON.parse(flat1!)).toEqual({ messages: ['first'] }); - - const state2 = JSON.stringify({ - state: { messages: ['first', 'second'] }, - metadata: { userId: 'user1' }, - }); - await client.save('thrd_roundtrip', state2); - - const restored2 = await client.restore('thrd_roundtrip'); - const { flatStateJson: flat2 } = parseThreadData(restored2); - expect(JSON.parse(flat2!)).toEqual({ messages: ['first', 'second'] }); - - client.cleanup(); - }); - - test('handles old format data on restore', async () => { - const oldFormatData = JSON.stringify({ messages: ['old', 'format'], counter: 5 }); - storedThreads.set('thrd_oldformat', oldFormatData); - - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - const restored = await client.restore('thrd_oldformat'); - const { flatStateJson, metadata } = parseThreadData(restored); - - expect(flatStateJson).toBe(oldFormatData); - expect(metadata).toBeUndefined(); - - const parsed = JSON.parse(flatStateJson!); - expect(parsed.messages).toEqual(['old', 'format']); - expect(parsed.counter).toBe(5); - - client.cleanup(); - }); - - test('handles complex nested state', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - const complexState = { - state: { - messages: [ - { id: '1', content: 'hello', metadata: { sentiment: 'positive' } }, - { id: '2', content: 'world', metadata: { sentiment: 'neutral' } }, - ], - config: { - nested: { deeply: { value: 42 } }, - }, - }, - metadata: { userId: 'user123', tags: ['important', 'urgent'] }, - }; - - await client.save('thrd_complex', JSON.stringify(complexState)); - - const restored = await client.restore('thrd_complex'); - const { flatStateJson, metadata } = parseThreadData(restored); - - const state = JSON.parse(flatStateJson!); - expect(state.messages).toHaveLength(2); - expect(state.messages[0].metadata.sentiment).toBe('positive'); - expect(state.config.nested.deeply.value).toBe(42); - expect(metadata?.tags).toEqual(['important', 'urgent']); - - client.cleanup(); - }); - - test('multiple threads are isolated', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - await client.save('thrd_a', JSON.stringify({ state: { value: 'a' } })); - await client.save('thrd_b', JSON.stringify({ state: { value: 'b' } })); - await client.save('thrd_c', JSON.stringify({ state: { value: 'c' } })); - - const restoredA = await client.restore('thrd_a'); - const restoredB = await client.restore('thrd_b'); - const restoredC = await client.restore('thrd_c'); - - expect(JSON.parse(parseThreadData(restoredA).flatStateJson!)).toEqual({ value: 'a' }); - expect(JSON.parse(parseThreadData(restoredB).flatStateJson!)).toEqual({ value: 'b' }); - expect(JSON.parse(parseThreadData(restoredC).flatStateJson!)).toEqual({ value: 'c' }); - - client.cleanup(); - }); - - test('overwriting thread replaces all data', async () => { - const client = new ThreadWebSocketClient('test-key', `ws://localhost:${port}`, testOptions); - await client.connect(); - - await client.save( - 'thrd_overwrite', - JSON.stringify({ - state: { old: 'data', toRemove: true }, - }) - ); - - await client.save( - 'thrd_overwrite', - JSON.stringify({ - state: { new: 'data' }, - }) - ); - - const restored = await client.restore('thrd_overwrite'); - const { flatStateJson } = parseThreadData(restored); - const state = JSON.parse(flatStateJson!); - - expect(state.new).toBe('data'); - expect(state.old).toBeUndefined(); - expect(state.toRemove).toBeUndefined(); - - client.cleanup(); - }); -}); diff --git a/packages/runtime/tsconfig.json b/packages/runtime/tsconfig.json index aaccb40a1..7157e5c22 100644 --- a/packages/runtime/tsconfig.json +++ b/packages/runtime/tsconfig.json @@ -4,15 +4,7 @@ "composite": true, "outDir": "./dist", "rootDir": "./src", - "declaration": true, - "types": ["bun-types"] + "declaration": true }, - "include": ["src/**/*"], - "exclude": ["test/**/*"], - "references": [ - { "path": "../core" }, - { "path": "../frontend" }, - { "path": "../schema" }, - { "path": "../server" } - ] + "include": ["src/**/*"] } diff --git a/packages/schedule/package.json b/packages/schedule/package.json index 46ce3d987..f456f16ab 100644 --- a/packages/schedule/package.json +++ b/packages/schedule/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/schedule/src/index.ts b/packages/schedule/src/index.ts index d1efdb4bd..76544dabf 100644 --- a/packages/schedule/src/index.ts +++ b/packages/schedule/src/index.ts @@ -34,7 +34,7 @@ import { type Schedule, type ScheduleDestination, } from '@agentuity/core/schedule'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/schedule/tsconfig.json b/packages/schedule/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/schedule/tsconfig.json +++ b/packages/schedule/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/server/package.json b/packages/server/package.json index 1eb66009e..22a4e7c47 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -20,11 +20,12 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { + "@agentuity/adapter": "workspace:*", "@agentuity/core": "workspace:*", "@agentuity/schema": "workspace:*", "zod": "^4.3.5" @@ -34,7 +35,7 @@ "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 7cbe217ff..60d9238eb 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -1,13 +1,19 @@ -// Re-export ALL API modules from core (moved there for browser compatibility) -export * from '@agentuity/core'; - -// Server-specific exports (these remain in @agentuity/server only) -export { type ColorScheme, ConsoleLogger, createLogger } from './logger.ts'; +// Re-export adapter functions (backward compatibility - prefer @agentuity/adapter) export { createServerFetchAdapter, buildClientHeaders, type BuildClientHeadersOptions, -} from './server.ts'; + type ServiceAdapterConfig, + redact, +} from '@agentuity/adapter'; + +// Re-export commonly used types from core +// Note: Full re-export maintained for backward compatibility with CLI and other packages +// TODO: Phase 2 - Migrate CLI imports to @agentuity/core directly, then remove this re-export +export * from '@agentuity/core'; + +// Server-specific exports (these remain in @agentuity/server only) +export { type ColorScheme, ConsoleLogger, createLogger } from './logger.ts'; export { toJSONSchema } from './schema.ts'; export { getContentType, mimeTypes } from './util/mime.ts'; export { diff --git a/packages/server/src/runtime-bootstrap.ts b/packages/server/src/runtime-bootstrap.ts index efb2c9f0c..b40e80493 100644 --- a/packages/server/src/runtime-bootstrap.ts +++ b/packages/server/src/runtime-bootstrap.ts @@ -31,18 +31,14 @@ export interface RuntimeBootstrapOptions { * Note: This does NOT load .env files. Use a proper .env loader * (like dotenv) in your app.ts before calling this function. * - * Call this BEFORE createApp() in your app.ts: + * Call this early in your app entry point: * * @example * ```ts * import { bootstrapRuntimeEnv } from '@agentuity/server'; - * import { createApp } from '@agentuity/runtime'; * - * // Set up service URLs + * // Set up service URLs before initializing your app * bootstrapRuntimeEnv(); - * - * // Now createApp() will use the correct env vars - * const app = await createApp(); * ``` */ export function bootstrapRuntimeEnv(options: RuntimeBootstrapOptions = {}): void { diff --git a/packages/server/test/server.test.ts b/packages/server/test/server.test.ts index 3bbe9db08..3e0f9995a 100644 --- a/packages/server/test/server.test.ts +++ b/packages/server/test/server.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect, mock } from 'bun:test'; -import { createServerFetchAdapter, redact } from '../src/server.ts'; +import { createServerFetchAdapter, redact } from '../src/index.ts'; import { createMockLogger, mockFetch } from '@agentuity/test-utils'; describe('redact', () => { diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index 1305b7bc8..96fd4e538 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["test/**/*"], - "references": [{ "path": "../core" }, { "path": "../schema" }] + "references": [{ "path": "../adapter" }, { "path": "../core" }, { "path": "../schema" }] } diff --git a/packages/stream/AGENTS.md b/packages/stream/AGENTS.md new file mode 100644 index 000000000..8328bfab0 --- /dev/null +++ b/packages/stream/AGENTS.md @@ -0,0 +1,34 @@ +# Agent Guidelines for @agentuity/stream + +Stream storage client for durable, resumable data streams. + +## Usage + +```typescript +import { StreamClient } from '@agentuity/stream'; + +const client = new StreamClient(); + +// Create a stream +const stream = await client.create('my-namespace', { + contentType: 'application/json', + metadata: { key: 'value' } +}); + +// Write to stream +await stream.write({ data: 'hello' }); +await stream.close(); + +// List streams +const { streams, total } = await client.list({ namespace: 'my-namespace' }); + +// Download stream content +const readable = await client.download(stream.id); +``` + +## Configuration + +- `apiKey` - API key (defaults to `AGENTUITY_SDK_KEY` or `AGENTUITY_CLI_KEY` env) +- `url` - Base URL (defaults to `AGENTUITY_STREAM_URL` or regional URL) +- `orgId` - Organization ID for multi-tenant operations +- `logger` - Custom logger instance \ No newline at end of file diff --git a/packages/stream/package.json b/packages/stream/package.json new file mode 100644 index 000000000..3398475eb --- /dev/null +++ b/packages/stream/package.json @@ -0,0 +1,42 @@ +{ + "name": "@agentuity/stream", + "version": "1.0.0", + "license": "Apache-2.0", + "author": "Agentuity employees and contributors", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "AGENTS.md", + "README.md", + "src", + "dist" + ], + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "scripts": { + "clean": "rm -rf dist tsconfig.tsbuildinfo", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", + "prepublishOnly": "bun run clean && bun run build" + }, + "dependencies": { + "@agentuity/core": "workspace:*", + "@agentuity/adapter": "workspace:*", + "zod": "^4.3.5" + }, + "devDependencies": { + "@types/bun": "latest", + "@types/node": "^22.0.0", + "bun-types": "latest", + "typescript": "^6.0.2" + }, + "publishConfig": { + "access": "public" + }, + "sideEffects": false +} diff --git a/packages/stream/src/index.ts b/packages/stream/src/index.ts new file mode 100644 index 000000000..60d6ea35e --- /dev/null +++ b/packages/stream/src/index.ts @@ -0,0 +1,106 @@ +export { + StreamStorageService, + StreamStorage, + Stream, + type CreateStreamProps, + type ListStreamsParams, + type ListStreamsResponse, + type StreamInfo, + type StreamSortField, + STREAM_MIN_TTL_SECONDS, + STREAM_MAX_TTL_SECONDS, + STREAM_DEFAULT_TTL_SECONDS, + CreateStreamPropsSchema, + ListStreamsParamsSchema, + ListStreamsResponseSchema, + StreamInfoSchema, + StreamSortFieldSchema, +} from '@agentuity/core/stream'; + +import { + StreamStorageService, + type CreateStreamProps, + type ListStreamsParams, + type ListStreamsResponse, + type StreamInfo, + type Stream, +} from '@agentuity/core/stream'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; +import { createMinimalLogger } from '@agentuity/core'; +import { getEnv } from '@agentuity/core'; +import { getServiceUrls } from '@agentuity/core/config'; +import { z } from 'zod'; + +const isLogger = (val: unknown): val is Logger => + typeof val === 'object' && + val !== null && + ['info', 'warn', 'error', 'debug', 'trace'].every( + (m) => typeof (val as Record)[m] === 'function' + ); + +export const StreamClientOptionsSchema = z.object({ + apiKey: z.string().optional().describe('API key for authentication'), + url: z.string().optional().describe('Base URL for the Stream API'), + orgId: z.string().optional().describe('Organization ID for multi-tenant operations'), + logger: z.custom(isLogger).optional().describe('Custom logger instance'), +}); +export type StreamClientOptions = z.infer; + +export class StreamClient { + readonly #service: StreamStorageService; + + constructor(options: StreamClientOptions = {}) { + const validatedOptions = StreamClientOptionsSchema.parse(options); + const apiKey = + validatedOptions.apiKey || getEnv('AGENTUITY_SDK_KEY') || getEnv('AGENTUITY_CLI_KEY'); + const region = getEnv('AGENTUITY_REGION') ?? 'usc'; + const serviceUrls = getServiceUrls(region); + + const url = validatedOptions.url || getEnv('AGENTUITY_STREAM_URL') || serviceUrls.stream; + + const logger = validatedOptions.logger ?? createMinimalLogger(); + + const headers = buildClientHeaders({ + apiKey, + orgId: validatedOptions.orgId, + }); + + const adapter = createServerFetchAdapter({ headers }, logger); + this.#service = new StreamStorageService(url, adapter); + } + + /** + * Create a new stream for writing data that can be read multiple times + */ + async create(namespace: string, props?: CreateStreamProps): Promise { + return this.#service.create(namespace, props); + } + + /** + * Get stream metadata by ID + */ + async get(id: string): Promise { + return this.#service.get(id); + } + + /** + * Download stream content + */ + async download(id: string): Promise> { + return this.#service.download(id); + } + + /** + * List streams with optional filtering and pagination + */ + async list(params?: ListStreamsParams): Promise { + return this.#service.list(params); + } + + /** + * Delete a stream by its ID + */ + async delete(id: string): Promise { + return this.#service.delete(id); + } +} diff --git a/packages/stream/tsconfig.json b/packages/stream/tsconfig.json new file mode 100644 index 000000000..ddbfd855f --- /dev/null +++ b/packages/stream/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"], + "references": [{ "path": "../core" }, { "path": "../adapter" }] +} diff --git a/packages/task/package.json b/packages/task/package.json index 5603a8cb1..723e89ab9 100644 --- a/packages/task/package.json +++ b/packages/task/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/task/src/index.ts b/packages/task/src/index.ts index 63f28e159..d54183834 100644 --- a/packages/task/src/index.ts +++ b/packages/task/src/index.ts @@ -83,7 +83,7 @@ import { type Attachment, type EntityRef, } from '@agentuity/core/task'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/task/tsconfig.json b/packages/task/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/task/tsconfig.json +++ b/packages/task/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json new file mode 100644 index 000000000..12b067e70 --- /dev/null +++ b/packages/telemetry/package.json @@ -0,0 +1,53 @@ +{ + "name": "@agentuity/telemetry", + "version": "1.0.0", + "license": "Apache-2.0", + "author": "Agentuity employees and contributors", + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "files": [ + "src", + "dist" + ], + "scripts": { + "clean": "rm -rf dist tsconfig.tsbuildinfo", + "build": "bunx tsc --build", + "typecheck": "bunx tsc --noEmit", + "prepublishOnly": "bun run clean && bun run build" + }, + "dependencies": { + "@agentuity/core": "workspace:*", + "@agentuity/server": "workspace:*", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.207.0", + "@opentelemetry/auto-instrumentations-node": "^0.66.0", + "@opentelemetry/core": "^2.2.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.207.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.207.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.207.0", + "@opentelemetry/host-metrics": "^0.36.2", + "@opentelemetry/otlp-exporter-base": "^0.207.0", + "@opentelemetry/resources": "^2.2.0", + "@opentelemetry/sdk-logs": "^0.207.0", + "@opentelemetry/sdk-metrics": "^2.2.0", + "@opentelemetry/sdk-node": "^0.207.0", + "@opentelemetry/sdk-trace-base": "^2.2.0", + "@opentelemetry/semantic-conventions": "^1.37.0" + }, + "devDependencies": { + "@types/bun": "latest", + "bun-types": "latest", + "typescript": "^5.9.0" + }, + "publishConfig": { + "access": "public" + }, + "sideEffects": true +} diff --git a/packages/runtime/src/otel/console.ts b/packages/telemetry/src/console.ts similarity index 100% rename from packages/runtime/src/otel/console.ts rename to packages/telemetry/src/console.ts diff --git a/packages/runtime/src/otel/exporters/README.md b/packages/telemetry/src/exporters/README.md similarity index 100% rename from packages/runtime/src/otel/exporters/README.md rename to packages/telemetry/src/exporters/README.md diff --git a/packages/runtime/src/otel/exporters/index.ts b/packages/telemetry/src/exporters/index.ts similarity index 100% rename from packages/runtime/src/otel/exporters/index.ts rename to packages/telemetry/src/exporters/index.ts diff --git a/packages/runtime/src/otel/exporters/jsonl-log-exporter.ts b/packages/telemetry/src/exporters/jsonl-log-exporter.ts similarity index 100% rename from packages/runtime/src/otel/exporters/jsonl-log-exporter.ts rename to packages/telemetry/src/exporters/jsonl-log-exporter.ts diff --git a/packages/runtime/src/otel/exporters/jsonl-metric-exporter.ts b/packages/telemetry/src/exporters/jsonl-metric-exporter.ts similarity index 100% rename from packages/runtime/src/otel/exporters/jsonl-metric-exporter.ts rename to packages/telemetry/src/exporters/jsonl-metric-exporter.ts diff --git a/packages/runtime/src/otel/exporters/jsonl-trace-exporter.ts b/packages/telemetry/src/exporters/jsonl-trace-exporter.ts similarity index 100% rename from packages/runtime/src/otel/exporters/jsonl-trace-exporter.ts rename to packages/telemetry/src/exporters/jsonl-trace-exporter.ts diff --git a/packages/runtime/src/otel/fetch.ts b/packages/telemetry/src/fetch.ts similarity index 100% rename from packages/runtime/src/otel/fetch.ts rename to packages/telemetry/src/fetch.ts diff --git a/packages/telemetry/src/globals.ts b/packages/telemetry/src/globals.ts new file mode 100644 index 000000000..47636c900 --- /dev/null +++ b/packages/telemetry/src/globals.ts @@ -0,0 +1,18 @@ +/** + * Global state for Telemetry instance (survives hot reloads) + */ + +import type { TelemetryResponse } from './telemetry'; + +const telemetryInstanceKey = Symbol.for('@agentuity/telemetry:instance'); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const g = globalThis as any; + +export const telemetry = { + get: (): TelemetryResponse | undefined => + g[telemetryInstanceKey] as TelemetryResponse | undefined, + set: (v: TelemetryResponse): void => { + g[telemetryInstanceKey] = v; + }, +}; diff --git a/packages/runtime/src/otel/http.ts b/packages/telemetry/src/http.ts similarity index 100% rename from packages/runtime/src/otel/http.ts rename to packages/telemetry/src/http.ts diff --git a/packages/telemetry/src/index.ts b/packages/telemetry/src/index.ts new file mode 100644 index 000000000..d1fbb90bd --- /dev/null +++ b/packages/telemetry/src/index.ts @@ -0,0 +1,82 @@ +/** + * @agentuity/telemetry - OpenTelemetry telemetry for Agentuity + * + * Auto-initializes from environment variables on import (Vercel-style). + * + * @example Automatic initialization (recommended) + * ```typescript + * // Just import - auto-configures from AGENTUITY_* env vars + * import '@agentuity/telemetry'; + * + * // Then access the globals anywhere + * import { tracer, logger, meter } from '@agentuity/telemetry'; + * ``` + * + * @example Explicit configuration + * ```typescript + * import { register } from '@agentuity/telemetry'; + * + * register({ + * name: 'my-app', + * version: '1.0.0', + * // ... optional overrides + * }); + * ``` + */ + +// Re-export types +export type { Logger } from './logger'; + +// Re-export console reference for custom loggers +export { __originalConsole } from './logger'; +export type { TelemetryConfig, TelemetryResponse } from './telemetry'; + +// Re-export HTTP utilities for trace context propagation +export { injectTraceContextToHeaders, extractTraceContextFromRequest } from './http'; + +// Re-export trace state utilities +export { + enrichContextWithTraceState, + generateTraceId, + generateSpanId, + type TraceStateEntries, +} from './tracestate'; + +// Core registration function +export { register, registerTelemetry, getTelemetry, ensureInitialized } from './telemetry'; + +// Lazy-loaded exports - auto-initialized from env vars +import type { Tracer, Meter } from '@opentelemetry/api'; +import type { Logger } from './logger'; +import { ensureInitialized } from './telemetry'; + +/** + * Get the OpenTelemetry tracer (auto-initialized) + */ +export const tracer: Tracer = new Proxy({} as Tracer, { + get: (_, prop) => ensureInitialized().tracer[prop as keyof Tracer], +}); + +/** + * Get the OpenTelemetry meter (auto-initialized) + */ +export const meter: Meter = new Proxy({} as Meter, { + get: (_, prop) => ensureInitialized().meter[prop as keyof Meter], +}); + +/** + * Get the Logger instance (auto-initialized) + */ +export const logger: Logger = new Proxy({} as Logger, { + get: (_, prop) => ensureInitialized().logger[prop as keyof Logger], +}); + +/** + * Shutdown telemetry (call on process exit) + */ +export async function shutdown(): Promise { + const telemetry = ensureInitialized(); + if (telemetry?.shutdown) { + await telemetry.shutdown(); + } +} diff --git a/packages/runtime/src/otel/logger.ts b/packages/telemetry/src/logger.ts similarity index 94% rename from packages/runtime/src/otel/logger.ts rename to packages/telemetry/src/logger.ts index 7c904a79e..88a350dbf 100644 --- a/packages/runtime/src/otel/logger.ts +++ b/packages/telemetry/src/logger.ts @@ -1,21 +1,13 @@ import { format } from 'node:util'; -import { safeStringify, type LogLevel } from '@agentuity/core'; +import { safeStringify, type LogLevel, type Logger } from '@agentuity/core'; import * as LogsAPI from '@opentelemetry/api-logs'; -import type { Logger } from '../logger'; -import ConsoleLogger from '../logger/console'; - -import { originalConsole as originalConsoleGlobal } from '../_globals'; +export type { Logger } from '@agentuity/core'; +import ConsoleLogger from './logger/console'; /** * Reference to the original console object before patching. - * Stored in a Symbol.for() global to survive hot reloads. */ -const existingOriginal = originalConsoleGlobal.get(); -export const __originalConsole: Console = existingOriginal ?? Object.create(console); - -if (!existingOriginal) { - originalConsoleGlobal.set(__originalConsole); -} +export const __originalConsole: Console = Object.create(console); export class OtelLogger implements Logger { private readonly delegate: LogsAPI.Logger; diff --git a/packages/runtime/src/logger/console.ts b/packages/telemetry/src/logger/console.ts similarity index 98% rename from packages/runtime/src/logger/console.ts rename to packages/telemetry/src/logger/console.ts index 81e0b22c2..5af60d21c 100644 --- a/packages/runtime/src/logger/console.ts +++ b/packages/telemetry/src/logger/console.ts @@ -1,6 +1,5 @@ -import type { LogLevel } from '@agentuity/core'; -import { __originalConsole } from '../otel/logger'; -import type { Logger } from './logger'; +import type { LogLevel, Logger } from '@agentuity/core'; +import { __originalConsole } from '../logger'; import { formatMessage } from './util'; const BOLD = '\x1b[1m'; diff --git a/packages/telemetry/src/logger/index.ts b/packages/telemetry/src/logger/index.ts new file mode 100644 index 000000000..4d61ab44f --- /dev/null +++ b/packages/telemetry/src/logger/index.ts @@ -0,0 +1,3 @@ +export { internal } from './internal'; +export type { Logger } from '@agentuity/core'; +export { logger } from './user'; diff --git a/packages/runtime/src/logger/internal.ts b/packages/telemetry/src/logger/internal.ts similarity index 100% rename from packages/runtime/src/logger/internal.ts rename to packages/telemetry/src/logger/internal.ts diff --git a/packages/runtime/src/logger/user.ts b/packages/telemetry/src/logger/user.ts similarity index 100% rename from packages/runtime/src/logger/user.ts rename to packages/telemetry/src/logger/user.ts diff --git a/packages/runtime/src/logger/util.ts b/packages/telemetry/src/logger/util.ts similarity index 100% rename from packages/runtime/src/logger/util.ts rename to packages/telemetry/src/logger/util.ts diff --git a/packages/runtime/src/otel/otel.ts b/packages/telemetry/src/telemetry.ts similarity index 56% rename from packages/runtime/src/otel/otel.ts rename to packages/telemetry/src/telemetry.ts index 2afd218ca..57f684fa0 100644 --- a/packages/runtime/src/otel/otel.ts +++ b/packages/telemetry/src/telemetry.ts @@ -24,37 +24,53 @@ import { import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; import { NodeSDK } from '@opentelemetry/sdk-node'; import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'; -import type { Logger } from '../logger'; +import type { Logger } from './logger'; import { ConsoleLogRecordExporter, DebugSpanExporter } from './console'; import { instrumentFetch } from './fetch'; import { createLogger, patchConsole } from './logger'; -import { getSDKVersion, isAuthenticated } from '../_config'; import type { LogLevel } from '@agentuity/core'; import { JSONLLogExporter, JSONLTraceExporter, JSONLMetricExporter } from './exporters'; +import { telemetry as telemetryGlobal } from './globals'; +import { getServiceUrls } from '@agentuity/server'; /** - * Configuration for OpenTelemetry initialization + * Configuration for Telemetry/OTel initialization */ -export interface OtelConfig { +export interface TelemetryConfig { + /** Service name (default: AGENTUITY_APP_NAME env) */ + name?: string; + /** Service version (default: AGENTUITY_APP_VERSION env) */ + version?: string; + /** OTel collector URL (default: derived from AGENTUITY_REGION) */ url?: string; - name: string; - version: string; + /** Bearer token for auth (default: AGENTUITY_SDK_KEY) */ bearerToken?: string; + /** Organization ID (default: AGENTUITY_CLOUD_ORG_ID) */ orgId?: string; + /** Project ID (default: AGENTUITY_CLOUD_PROJECT_ID) */ projectId?: string; + /** Deployment ID (default: AGENTUITY_CLOUD_DEPLOYMENT_ID) */ deploymentId?: string; + /** Environment (default: AGENTUITY_ENVIRONMENT or NODE_ENV) */ environment?: string; + /** CLI version (default: AGENTUITY_CLI_VERSION) */ cliVersion?: string; + /** SDK version */ + sdkVersion?: string; + /** Development mode (default: AGENTUITY_SDK_DEV_MODE) */ devmode?: boolean; + /** Custom span processors */ spanProcessors?: Array; + /** Log level (default: 'warn') */ logLevel?: LogLevel; + /** JSONL export base path (default: AGENTUITY_CLOUD_EXPORT_DIR) */ jsonlBasePath?: string; } /** - * Response from OpenTelemetry initialization + * Response from Telemetry initialization */ -export interface OtelResponse { +export interface TelemetryResponse { tracer: Tracer; meter: Meter; logger: Logger; @@ -64,31 +80,39 @@ export interface OtelResponse { const devmodeExportInterval = 1_000; // 1 second const productionExportInterval = 10_000; // 10 seconds -export const createResource = (config: OtelConfig): Resource => { - const { name, version, orgId, projectId, deploymentId, environment, devmode, cliVersion } = - config; - - const sdkVersion = getSDKVersion(); +export const createResource = (config: Required): Resource => { + const { + name, + version, + orgId, + projectId, + deploymentId, + environment, + devmode, + cliVersion, + sdkVersion, + } = config; return resourceFromAttributes({ [ATTR_SERVICE_NAME]: name, [ATTR_SERVICE_VERSION]: version, - '@agentuity/orgId': orgId ?? 'unknown', - '@agentuity/projectId': projectId ?? 'unknown', - '@agentuity/deploymentId': deploymentId ?? 'unknown', + '@agentuity/orgId': orgId, + '@agentuity/projectId': projectId, + '@agentuity/deploymentId': deploymentId, '@agentuity/env': environment, '@agentuity/devmode': devmode, - '@agentuity/sdkVersion': sdkVersion ?? 'unknown', - '@agentuity/cliVersion': cliVersion ?? 'unknown', + '@agentuity/sdkVersion': sdkVersion, + '@agentuity/cliVersion': cliVersion, }); }; -export const createAgentuityLoggerProvider = ({ +const createLoggerProvider = ({ url, headers, resource, jsonlBasePath, useConsoleExporters, + logLevel: _logLevel, }: { url?: string; headers?: Record; @@ -106,7 +130,6 @@ export const createAgentuityLoggerProvider = ({ exporter = new JSONLLogExporter(jsonlBasePath); processor = new BatchLogRecordProcessor(exporter); } else if (url) { - // Original OTLP export behavior const otlpExporter = new OTLPLogExporter({ url: `${url}/v1/logs`, headers, @@ -124,102 +147,113 @@ export const createAgentuityLoggerProvider = ({ }); LogsAPI.logs.setGlobalLoggerProvider(provider); - return { - processor, - provider, - exporter, - }; + return { processor, provider, exporter }; }; -export const createUserLoggerProvider = ({ - url, - headers, - resource, -}: { - url: string; - headers?: Record; - resource: Resource; -}) => { - const exporter = new OTLPLogExporter({ - url: `${url}/v1/logs`, - headers, - compression: CompressionAlgorithm.GZIP, - timeoutMillis: 10_000, - }); - const processor = new BatchLogRecordProcessor(exporter); - const provider = new LoggerProvider({ - resource, - processors: [processor], - }); +/** + * Get configuration from environment variables + */ +function getConfigFromEnv(): Required { + const region = process.env.AGENTUITY_REGION ?? 'usc'; + const serviceUrls = getServiceUrls(region); + return { - provider, - exporter, - processor, + name: process.env.AGENTUITY_APP_NAME ?? 'agentuity-app', + version: process.env.AGENTUITY_APP_VERSION ?? '1.0.0', + url: serviceUrls.otel, + bearerToken: process.env.AGENTUITY_OTLP_BEARER_TOKEN ?? process.env.AGENTUITY_SDK_KEY ?? '', + orgId: process.env.AGENTUITY_CLOUD_ORG_ID ?? 'unknown', + projectId: process.env.AGENTUITY_CLOUD_PROJECT_ID ?? 'unknown', + deploymentId: process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID ?? 'unknown', + environment: process.env.AGENTUITY_ENVIRONMENT ?? process.env.NODE_ENV ?? 'development', + cliVersion: process.env.AGENTUITY_CLI_VERSION ?? 'unknown', + sdkVersion: process.env.AGENTUITY_CLOUD_SDK_VERSION ?? 'unknown', + devmode: process.env.AGENTUITY_SDK_DEV_MODE === 'true', + logLevel: 'warn' as LogLevel, + jsonlBasePath: process.env.AGENTUITY_CLOUD_EXPORT_DIR ?? '', + spanProcessors: [], }; -}; - -import { otel as otelGlobal } from '../_globals'; +} /** - * Registers and initializes OpenTelemetry with the specified configuration. + * Registers and initializes Telemetry with the specified configuration. * * Idempotent: if called again (e.g. during bun --hot reload), the previous * instance is shut down before creating a new one. * - * @param config - The configuration for OpenTelemetry + * @param config - Optional configuration overrides (defaults from env vars) * @returns An object containing the tracer, logger, and shutdown function */ -export function registerOtel(config: OtelConfig): OtelResponse { +export function registerTelemetry(config?: TelemetryConfig): TelemetryResponse { // Shut down previous instance if this is a hot reload - const previous = otelGlobal.get(); + const previous = telemetryGlobal.get(); if (previous) { previous.shutdown().catch(() => {}); } + + // Merge provided config with env defaults + const envConfig = getConfigFromEnv(); + const mergedConfig: Required = { + name: config?.name ?? envConfig.name, + version: config?.version ?? envConfig.version, + url: config?.url ?? envConfig.url, + bearerToken: config?.bearerToken ?? envConfig.bearerToken, + orgId: config?.orgId ?? envConfig.orgId, + projectId: config?.projectId ?? envConfig.projectId, + deploymentId: config?.deploymentId ?? envConfig.deploymentId, + environment: config?.environment ?? envConfig.environment, + cliVersion: config?.cliVersion ?? envConfig.cliVersion, + sdkVersion: config?.sdkVersion ?? envConfig.sdkVersion, + devmode: config?.devmode ?? envConfig.devmode, + logLevel: config?.logLevel ?? envConfig.logLevel, + jsonlBasePath: config?.jsonlBasePath ?? envConfig.jsonlBasePath, + spanProcessors: config?.spanProcessors ?? envConfig.spanProcessors, + }; + const { url, name, version, bearerToken, - environment = 'development', + environment, orgId, projectId, deploymentId, - devmode = false, - logLevel = 'warn', - jsonlBasePath = undefined, - } = config; + devmode, + logLevel, + jsonlBasePath, + spanProcessors, + } = mergedConfig; let headers: Record | undefined; - if (bearerToken) { - headers = {}; - headers.Authorization = `Bearer ${bearerToken}`; + headers = { Authorization: `Bearer ${bearerToken}` }; } - // use console debug exporters for local debugging + // Use console debug exporters for local debugging const useConsoleExporters = process.env.AGENTUITY_DEBUG_OTEL_CONSOLE === 'true'; - const resource = createResource(config); - const loggerProvider = createAgentuityLoggerProvider({ + const resource = createResource(mergedConfig); + const loggerProvider = createLoggerProvider({ url, headers, resource, logLevel, - jsonlBasePath, + jsonlBasePath: jsonlBasePath || undefined, useConsoleExporters, }); + const attrs = { - '@agentuity/orgId': orgId ?? 'unknown', - '@agentuity/projectId': projectId ?? 'unknown', - '@agentuity/deploymentId': deploymentId ?? 'unknown', + '@agentuity/orgId': orgId, + '@agentuity/projectId': projectId, + '@agentuity/deploymentId': deploymentId, '@agentuity/env': environment, '@agentuity/devmode': devmode, '@agentuity/language': 'javascript', }; const logger = createLogger(!!url, attrs, logLevel); - // must do this after we have created the logger - // don't patch console if we're using console exporters (to avoid double logging) + // Don't patch console if using console exporters (avoid double logging) if (!useConsoleExporters) { patchConsole(!!url, attrs, logLevel); } @@ -249,19 +283,20 @@ export function registerOtel(config: OtelConfig): OtelResponse { : undefined; // Create span processors - const spanProcessors: SpanProcessor[] = []; + const allSpanProcessors: SpanProcessor[] = []; - // Add OTLP/JSONL span processor if we have an exporter if (traceExporter) { - spanProcessors.push(new BatchSpanProcessor(traceExporter)); + allSpanProcessors.push(new BatchSpanProcessor(traceExporter)); } - // Add debug span processor if console debugging is enabled if (useConsoleExporters) { - spanProcessors.push(new SimpleSpanProcessor(new DebugSpanExporter())); + allSpanProcessors.push(new SimpleSpanProcessor(new DebugSpanExporter())); } - // Create a separate metric reader for the NodeSDK + // Add custom span processors + allSpanProcessors.push(...spanProcessors); + + // Create metric readers const sdkMetricReader = metricExporter ? new PeriodicExportingMetricReader({ exporter: metricExporter, @@ -270,7 +305,6 @@ export function registerOtel(config: OtelConfig): OtelResponse { }) : undefined; - // Create a separate metric reader for the MeterProvider const hostMetricReader = metricExporter ? new PeriodicExportingMetricReader({ exporter: metricExporter, @@ -280,10 +314,7 @@ export function registerOtel(config: OtelConfig): OtelResponse { : undefined; const meterProvider = hostMetricReader - ? new MeterProvider({ - resource, - readers: [hostMetricReader], - }) + ? new MeterProvider({ resource, readers: [hostMetricReader] }) : undefined; if (meterProvider) { @@ -303,9 +334,6 @@ export function registerOtel(config: OtelConfig): OtelResponse { instrumentFetch(); - // Combine custom span processors with our span processors - const allSpanProcessors = [...spanProcessors, ...(config.spanProcessors || [])]; - instrumentationSDK = new NodeSDK({ logRecordProcessor: loggerProvider.processor, metricReader: sdkMetricReader, @@ -331,24 +359,45 @@ export function registerOtel(config: OtelConfig): OtelResponse { logger.debug('shutting down OpenTelemetry'); await loggerProvider.provider .forceFlush() - .catch((e) => logger.warn('error in forceFlush of otel provider. %s', e)); + .catch((e) => logger.warn('error in forceFlush. %s', e)); await loggerProvider.exporter ?.shutdown() - .catch((e) => !devmode && logger.warn('error in shutdown of otel exporter. %s', e)); + .catch((e) => !devmode && logger.warn('error in shutdown of exporter. %s', e)); await instrumentationSDK ?.shutdown() - .catch( - (e) => !devmode && logger.warn('error in shutdown of otel instrumentation. %s', e) - ); + .catch((e) => !devmode && logger.warn('error in shutdown of instrumentation. %s', e)); logger.debug('shut down OpenTelemetry'); } }; - if (url && isAuthenticated()) { + if (url && bearerToken) { logger.info('connected to Agentuity Agent Cloud'); } - const instance: OtelResponse = { tracer, meter, logger, shutdown }; - otelGlobal.set(instance); + const instance: TelemetryResponse = { tracer, meter, logger, shutdown }; + telemetryGlobal.set(instance); + return instance; +} + +/** + * Alias for registerTelemetry (shorter name) + */ +export const register = registerTelemetry; + +/** + * Get the current telemetry instance (or undefined if not initialized) + */ +export function getTelemetry(): TelemetryResponse | undefined { + return telemetryGlobal.get(); +} + +/** + * Ensure telemetry is initialized (auto-init from env vars if needed) + */ +export function ensureInitialized(): TelemetryResponse { + let instance = telemetryGlobal.get(); + if (!instance) { + instance = registerTelemetry(); + } return instance; } diff --git a/packages/runtime/src/otel/tracestate.ts b/packages/telemetry/src/tracestate.ts similarity index 100% rename from packages/runtime/src/otel/tracestate.ts rename to packages/telemetry/src/tracestate.ts diff --git a/packages/runtime/tsconfig.test.json b/packages/telemetry/tsconfig.json similarity index 58% rename from packages/runtime/tsconfig.test.json rename to packages/telemetry/tsconfig.json index 9444d9ea2..d4b584147 100644 --- a/packages/runtime/tsconfig.test.json +++ b/packages/telemetry/tsconfig.json @@ -1,11 +1,12 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "composite": false, - "outDir": "./dist-test", - "rootDir": ".", + "composite": true, + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, "types": ["bun-types"] }, - "include": ["test/**/*", "src/**/*"], + "include": ["src/**/*"], "references": [{ "path": "../core" }, { "path": "../server" }] } diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 6fba6985d..c78fa9656 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,10 +1,11 @@ { "name": "@agentuity/test-utils", - "version": "2.0.9", + "version": "1.0.54", "license": "Apache-2.0", "private": true, "type": "module", "description": "Test utilities for Agentuity packages (not published)", + "scripts": {}, "exports": { ".": { "import": "./src/index.ts" diff --git a/packages/vector/package.json b/packages/vector/package.json index 0216da9f0..8688e6f88 100644 --- a/packages/vector/package.json +++ b/packages/vector/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/vector/src/index.ts b/packages/vector/src/index.ts index 190183951..e5f955d0e 100644 --- a/packages/vector/src/index.ts +++ b/packages/vector/src/index.ts @@ -49,7 +49,7 @@ import { type VectorSearchResultWithDocument, type VectorUpsertResult, } from '@agentuity/core/vector'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/vector/tsconfig.json b/packages/vector/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/vector/tsconfig.json +++ b/packages/vector/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/webhook/package.json b/packages/webhook/package.json index f223fb9df..d3fcb7dd3 100644 --- a/packages/webhook/package.json +++ b/packages/webhook/package.json @@ -20,20 +20,20 @@ }, "scripts": { "clean": "rm -rf dist tsconfig.tsbuildinfo", - "build": "bunx tsc --build --force", - "typecheck": "bunx tsc --noEmit", + "build": "bunx tsgo --build --force", + "typecheck": "bunx tsgo --noEmit", "prepublishOnly": "bun run clean && bun run build" }, "dependencies": { "@agentuity/core": "workspace:*", - "@agentuity/server": "workspace:*", + "@agentuity/adapter": "workspace:*", "zod": "^4.3.5" }, "devDependencies": { "@types/bun": "latest", "@types/node": "^22.0.0", "bun-types": "latest", - "typescript": "^5.9.0" + "typescript": "^6.0.2" }, "publishConfig": { "access": "public" diff --git a/packages/webhook/src/index.ts b/packages/webhook/src/index.ts index 1dba2d606..a3450ee18 100644 --- a/packages/webhook/src/index.ts +++ b/packages/webhook/src/index.ts @@ -68,7 +68,7 @@ import { type WebhookOrgAnalytics, type WebhookReceipt, } from '@agentuity/core/webhook'; -import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/server'; +import { createServerFetchAdapter, buildClientHeaders, type Logger } from '@agentuity/adapter'; import { createMinimalLogger } from '@agentuity/core'; import { getEnv } from '@agentuity/core'; import { getServiceUrls } from '@agentuity/core/config'; diff --git a/packages/webhook/tsconfig.json b/packages/webhook/tsconfig.json index 39771b3c1..ddbfd855f 100644 --- a/packages/webhook/tsconfig.json +++ b/packages/webhook/tsconfig.json @@ -7,5 +7,5 @@ }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"], - "references": [{ "path": "../core" }, { "path": "../server" }] + "references": [{ "path": "../core" }, { "path": "../adapter" }] } diff --git a/packages/workbench/tsconfig.json b/packages/workbench/tsconfig.json index 2c9e7840a..d3fee113d 100644 --- a/packages/workbench/tsconfig.json +++ b/packages/workbench/tsconfig.json @@ -5,7 +5,6 @@ "jsx": "react-jsx", "outDir": "./dist", "rootDir": "./src", - "baseUrl": ".", "paths": { "@/*": ["./src/*"] } diff --git a/scripts/test-cloud-deployment.sh b/scripts/test-cloud-deployment.sh deleted file mode 100755 index 76175d869..000000000 --- a/scripts/test-cloud-deployment.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -# Cloud Deployment - Full CI Test Flow -# Runs the complete CI workflow for cloud-deployment locally -# This is what runs in CI - use this to reproduce CI failures - -set -e - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -SDK_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -echo "╔════════════════════════════════════════════════╗" -echo "║ Cloud Deployment - Full CI Test Flow ║" -echo "╚════════════════════════════════════════════════╝" -echo "" - -# Step 1: Build SDK packages -echo "Step 1/4: Building SDK packages..." -bash "$SCRIPT_DIR/build-sdk.sh" -echo "" - -# Step 2: Pack SDK packages -echo "Step 2/4: Packing SDK packages..." -bash "$SCRIPT_DIR/pack-sdk.sh" -echo "" - -# Step 3: Install SDK in cloud-deployment -echo "Step 3/4: Installing SDK packages..." -bash "$SCRIPT_DIR/install-sdk-tarballs.sh" apps/testing/cloud-deployment -echo "" - -# Step 4: Run cloud deployment tests -echo "Step 4/4: Running cloud deployment tests..." -cd "$SDK_ROOT/apps/testing/cloud-deployment" -bash scripts/test-deployment.sh -echo "" - -echo "╔════════════════════════════════════════════════╗" -echo "║ ✅ Cloud Deployment Tests Complete ║" -echo "╚════════════════════════════════════════════════╝" diff --git a/scripts/test-storage-runner.ts b/scripts/test-storage-runner.ts deleted file mode 100644 index 72e55e822..000000000 --- a/scripts/test-storage-runner.ts +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env bun -/** - * Storage S3 Patch Integration Test - Test Runner - * - * This script runs the actual S3 tests. It expects environment variables - * to be set at process init time (not via process.env at runtime). - * - * Expected environment variables (set by parent process): - * - AWS_ENDPOINT - * - AWS_ACCESS_KEY_ID - * - AWS_SECRET_ACCESS_KEY - * - AWS_REGION (optional) - * - AWS_BUCKET (optional) - * - * This script is spawned by test-storage.ts with credentials in the environment. - */ - -import { S3Client } from 'bun'; -import { patchBunS3ForStorageDev } from '@agentuity/runtime'; - -interface TestResult { - name: string; - passed: boolean; - error?: string; - duration: number; -} - -const results: TestResult[] = []; - -async function runTest(name: string, fn: () => Promise): Promise { - const start = performance.now(); - try { - await fn(); - results.push({ name, passed: true, duration: performance.now() - start }); - console.log(` ✓ ${name}`); - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - results.push({ name, passed: false, error: message, duration: performance.now() - start }); - console.log(` ✗ ${name}: ${message}`); - } -} - -async function main() { - // Verify environment variables are set - const endpoint = process.env.AWS_ENDPOINT; - const accessKeyId = process.env.AWS_ACCESS_KEY_ID; - const secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY; - - console.log('Environment check:'); - console.log(` AWS_ENDPOINT: ${endpoint ? '✓ set' : '✗ not set'}`); - console.log(` AWS_ACCESS_KEY_ID: ${accessKeyId ? '✓ set' : '✗ not set'}`); - console.log(` AWS_SECRET_ACCESS_KEY: ${secretAccessKey ? '✓ set' : '✗ not set'}`); - console.log(''); - - if (!endpoint || !accessKeyId || !secretAccessKey) { - console.error('Error: Required S3 environment variables are not set'); - process.exit(1); - } - - // Apply the S3 patch - console.log('Applying Bun S3 patch...'); - patchBunS3ForStorageDev(); - console.log(' Patch applied successfully'); - console.log(''); - - // Create S3 client WITHOUT explicit credentials - // Bun should auto-load from environment variables - console.log('Creating S3Client (credentials from environment)...'); - const s3Client = new S3Client(); - console.log(' S3Client created'); - console.log(''); - - // Run S3 tests - console.log('Running S3 method tests:'); - console.log(''); - - const testKey = `test-${Date.now()}.txt`; - const testContent = 'Hello from Agentuity S3 patch test!'; - - // Test write() - await runTest('write() - upload file', async () => { - const bytesWritten = await s3Client.write(testKey, testContent); - if (bytesWritten !== testContent.length) { - throw new Error(`Expected ${testContent.length} bytes, got ${bytesWritten}`); - } - }); - - // Test exists() - await runTest('exists() - check file exists', async () => { - const exists = await s3Client.exists(testKey); - if (!exists) { - throw new Error('File should exist after write'); - } - }); - - // Test stat() - await runTest('stat() - get file metadata', async () => { - const stat = await s3Client.stat(testKey); - if (!stat) { - throw new Error('stat() returned null'); - } - if (stat.size !== testContent.length) { - throw new Error(`Expected size ${testContent.length}, got ${stat.size}`); - } - }); - - // Test size() - await runTest('size() - get file size', async () => { - const size = await s3Client.size(testKey); - if (size !== testContent.length) { - throw new Error(`Expected size ${testContent.length}, got ${size}`); - } - }); - - // Test file() - read back - await runTest('file() - read file content', async () => { - const file = s3Client.file(testKey); - const content = await file.text(); - if (content !== testContent) { - throw new Error(`Content mismatch: expected "${testContent}", got "${content}"`); - } - }); - - // Test presign() - await runTest('presign() - generate presigned URL', async () => { - const url = s3Client.presign(testKey, { expiresIn: 3600 }); - if (!url || typeof url !== 'string') { - throw new Error('presign() should return a string URL'); - } - if (!url.startsWith('https://')) { - throw new Error(`Expected https URL, got: ${url}`); - } - }); - - // Test list() - await runTest('list() - list objects', async () => { - const result = await s3Client.list({ prefix: 'test-' }); - if (!result || !result.contents) { - throw new Error('list() should return contents array'); - } - const found = result.contents.some((obj: { key?: string }) => obj.key === testKey); - if (!found) { - throw new Error(`Test file ${testKey} not found in list results`); - } - }); - - // Test delete() - await runTest('delete() - delete file', async () => { - await s3Client.delete(testKey); - const exists = await s3Client.exists(testKey); - if (exists) { - throw new Error('File should not exist after delete'); - } - }); - - // Test unlink() (alias for delete) - const testKey2 = `test-unlink-${Date.now()}.txt`; - await runTest('unlink() - delete file (alias)', async () => { - await s3Client.write(testKey2, 'test content'); - await s3Client.unlink(testKey2); - const exists = await s3Client.exists(testKey2); - if (exists) { - throw new Error('File should not exist after unlink'); - } - }); - - // Print summary - console.log(''); - console.log('═══════════════════════════════════════════════'); - console.log('Test Summary'); - console.log('═══════════════════════════════════════════════'); - - const passed = results.filter((r) => r.passed).length; - const failed = results.filter((r) => !r.passed).length; - const totalDuration = results.reduce((sum, r) => sum + r.duration, 0); - - console.log(` Total: ${results.length}`); - console.log(` Passed: ${passed}`); - console.log(` Failed: ${failed}`); - console.log(` Duration: ${totalDuration.toFixed(2)}ms`); - console.log(''); - - if (failed > 0) { - console.log('Failed tests:'); - for (const result of results.filter((r) => !r.passed)) { - console.log(` - ${result.name}: ${result.error}`); - } - process.exit(1); - } - - console.log('✅ All tests passed!'); -} - -main().catch((error) => { - console.error('Fatal error:', error); - process.exit(1); -}); diff --git a/scripts/test-storage.ts b/scripts/test-storage.ts deleted file mode 100644 index 1668abc44..000000000 --- a/scripts/test-storage.ts +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env bun -/** - * Storage S3 Patch Integration Test - Orchestrator - * - * This script: - * 1. Creates a storage bucket via the Catalyst API - * 2. Spawns a subprocess with the environment variables set (so Bun reads them at init time) - * 3. The subprocess runs the actual S3 tests - * 4. Cleans up the bucket (always, even on failure) - * - * Usage: - * bun scripts/test-storage.ts - * - * Requirements: - * - AGENTUITY_API_KEY environment variable (from `agentuity auth login`) - * - AGENTUITY_ORG_ID environment variable - * - AGENTUITY_REGION environment variable (default: usc) - */ - -import { $ } from 'bun'; -import { join, dirname } from 'path'; -import { - APIClient, - createResources, - deleteResources, - getServiceUrls, - ConsoleLogger, -} from '@agentuity/server'; - -const logger = new ConsoleLogger('info'); - -async function main() { - console.log('╔════════════════════════════════════════════════╗'); - console.log('║ Storage S3 Patch Integration Test ║'); - console.log('╚════════════════════════════════════════════════╝'); - console.log(''); - - // Get required environment variables - const apiKey = process.env.AGENTUITY_CLI_API_KEY || process.env.AGENTUITY_SDK_KEY; - if (!apiKey) { - console.error( - 'Error: AGENTUITY_CLI_API_KEY or AGENTUITY_SDK_KEY environment variable is required' - ); - console.error('Run `agentuity auth login` to authenticate'); - process.exit(1); - } - - const orgId = process.env.AGENTUITY_CLOUD_ORG_ID; - if (!orgId) { - console.error('Error: AGENTUITY_CLOUD_ORG_ID environment variable is required'); - process.exit(1); - } - - const region = process.env.AGENTUITY_REGION || 'usc'; - - console.log(`Organization: ${orgId}`); - console.log(`Region: ${region}`); - console.log(''); - - // Create API client - const serviceUrls = getServiceUrls(region); - const client = new APIClient(serviceUrls.catalyst, logger, apiKey); - - let bucketName: string | undefined; - let testEnv: Record = {}; - - try { - // Step 1: Create storage bucket - console.log('Step 1: Creating storage bucket...'); - const created = await createResources(client, orgId, region, [{ type: 's3' }]); - - if (created.length === 0) { - throw new Error('Failed to create storage bucket'); - } - - const resource = created[0]; - bucketName = resource.name; - console.log(` Created bucket: ${bucketName}`); - - // Step 2: Collect environment variables and fix endpoint for virtualHostedStyle - console.log(''); - console.log('Step 2: Setting up environment variables...'); - testEnv = { ...resource.env }; - - // For virtualHostedStyle, the endpoint must include the bucket in the hostname - // e.g., https://ag-xxx.t3.storage.dev instead of https://t3.storage.dev - const baseEndpoint = testEnv.AWS_ENDPOINT || testEnv.S3_ENDPOINT; - const bucket = testEnv.AWS_BUCKET || testEnv.S3_BUCKET; - if (baseEndpoint && bucket) { - // Construct bucket-specific endpoint for virtualHostedStyle - const fullEndpoint = `https://${bucket}.${baseEndpoint.replace(/^https?:\/\//, '')}`; - testEnv.AWS_ENDPOINT = fullEndpoint; - testEnv.S3_ENDPOINT = fullEndpoint; - // Remove bucket from env since it's now in the endpoint - delete testEnv.AWS_BUCKET; - delete testEnv.S3_BUCKET; - } - - for (const [key, value] of Object.entries(testEnv)) { - console.log(` ${key}=${key.toLowerCase().includes('secret') ? '***' : value}`); - } - - // Step 3: Spawn subprocess with env vars set at init time - console.log(''); - console.log('Step 3: Running S3 tests in subprocess...'); - console.log(''); - - const scriptDir = dirname(import.meta.path); - const testRunnerPath = join(scriptDir, 'test-storage-runner.ts'); - - // Merge current env with the S3 credentials - const subprocessEnv = { - ...process.env, - ...testEnv, - }; - - // Run the test runner as a subprocess - const result = await $`bun ${testRunnerPath}`.env(subprocessEnv).nothrow(); - - if (result.exitCode !== 0) { - console.log(''); - console.log('Tests failed with exit code:', result.exitCode); - process.exitCode = result.exitCode; - } - } finally { - // Step 4: Cleanup - always delete the bucket - console.log(''); - console.log('Step 4: Cleaning up...'); - - if (bucketName) { - try { - const deleted = await deleteResources(client, orgId, region, [ - { type: 's3', name: bucketName }, - ]); - if (deleted.length > 0) { - console.log(` Deleted bucket: ${bucketName}`); - } else { - console.log(` Warning: Failed to delete bucket ${bucketName}`); - } - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - console.log(` Warning: Cleanup error: ${message}`); - } - } - } -} - -main().catch((error) => { - console.error('Fatal error:', error); - process.exit(1); -}); diff --git a/scripts/test-templates.ts b/scripts/test-templates.ts deleted file mode 100644 index 846c48147..000000000 --- a/scripts/test-templates.ts +++ /dev/null @@ -1,928 +0,0 @@ -#!/usr/bin/env bun -/** - * Template Integration Test Script - * - * This script tests all templates by: - * 1. Creating a project from each template - * 2. Installing dependencies from npm registry - * 3. Building the project - * 4. Running typecheck - * 5. Starting the server and testing endpoints - * 6. Checking for outdated dependencies (report-only) - * - * Usage: - * bun scripts/test-templates.ts # Test all templates - * bun scripts/test-templates.ts --template default # Test specific template - * bun scripts/test-templates.ts --list # List available templates - * bun scripts/test-templates.ts --help # Show help - */ - -import { spawn, type Subprocess } from 'bun'; -import { existsSync, mkdirSync, rmSync, readFileSync, writeFileSync } from 'node:fs'; -import { join, resolve } from 'node:path'; -import { tmpdir } from 'node:os'; - -// Path to local CLI bin (use development version, not npm) -const SDK_ROOT = resolve(join(import.meta.dir, '..')); -const CLI_BIN = join(SDK_ROOT, 'packages/cli/bin/cli.ts'); - -// Colors for output -const RED = '\x1b[0;31m'; -const GREEN = '\x1b[0;32m'; -const YELLOW = '\x1b[1;33m'; -const BLUE = '\x1b[0;34m'; -const CYAN = '\x1b[0;36m'; -const NC = '\x1b[0m'; // No Color - -function logInfo(msg: string) { - console.log(`${BLUE}[INFO]${NC} ${msg}`); -} - -function logSuccess(msg: string) { - console.log(`${GREEN}[PASS]${NC} ${msg}`); -} - -function logError(msg: string) { - console.log(`${RED}[FAIL]${NC} ${msg}`); -} - -function logWarning(msg: string) { - console.log(`${YELLOW}[WARN]${NC} ${msg}`); -} - -function logStep(msg: string) { - console.log(`${CYAN}[STEP]${NC} ${msg}`); -} - -interface TemplateInfo { - id: string; - name: string; - description: string; - directory: string; -} - -interface TemplatesManifest { - templates: TemplateInfo[]; -} - -interface TestResult { - template: string; - passed: boolean; - steps: { - name: string; - passed: boolean; - error?: string; - duration?: number; - }[]; - duration: number; -} - -// Parse command line arguments -function parseArgs(): { template?: string; list: boolean; help: boolean; skipOutdated: boolean } { - const args = process.argv.slice(2); - let template: string | undefined; - let list = false; - let help = false; - let skipOutdated = false; - - for (let i = 0; i < args.length; i++) { - const arg = args[i]; - if (arg === '--template' || arg === '-t') { - if (i + 1 >= args.length || args[i + 1].startsWith('-')) { - console.error(`${RED}Error:${NC} --template requires a value`); - showHelp(); - process.exit(1); - } - template = args[++i]; - } else if (arg === '--list' || arg === '-l') { - list = true; - } else if (arg === '--help' || arg === '-h') { - help = true; - } else if (arg === '--skip-outdated') { - skipOutdated = true; - } else if (arg.startsWith('-')) { - console.error(`${RED}Error:${NC} Unknown option: ${arg}`); - showHelp(); - process.exit(1); - } - } - - return { template, list, help, skipOutdated }; -} - -function showHelp() { - console.log(` -Template Integration Test Script - -Usage: - bun scripts/test-templates.ts [options] - -Options: - --template, -t Test a specific template by ID - --list, -l List all available templates - --skip-outdated Skip outdated dependency check - --help, -h Show this help message - -Examples: - bun scripts/test-templates.ts # Test all templates - bun scripts/test-templates.ts --template default # Test only the default template - bun scripts/test-templates.ts --list # List available templates -`); -} - -async function loadTemplates(sdkRoot: string): Promise { - const manifestPath = join(sdkRoot, 'templates', 'templates.json'); - const file = Bun.file(manifestPath); - - if (!(await file.exists())) { - throw new Error(`templates.json not found at ${manifestPath}`); - } - - const manifest = (await file.json()) as TemplatesManifest; - return manifest.templates; -} - -async function packWorkspacePackages(sdkRoot: string): Promise> { - const packages = new Map(); - const packagesDir = join(tmpdir(), `agentuity-packages-${Date.now()}`); - mkdirSync(packagesDir, { recursive: true }); - - logStep('Building all packages...'); - const buildResult = await runCommand(['bunx', 'tsc', '--build', '--force'], sdkRoot); - if (!buildResult.success) { - throw new Error(`Build failed: ${buildResult.stderr}`); - } - - const packagesToPack = [ - 'core', - 'schema', - 'frontend', - 'react', - 'postgres', - 'drizzle', - 'auth', - 'runtime', - 'server', - 'cli', - 'workbench', - ]; - - logStep('Packing workspace packages...'); - for (const pkg of packagesToPack) { - const pkgDir = join(sdkRoot, 'packages', pkg); - - // Special case: build workbench CSS before packing - if (pkg === 'workbench') { - const workbenchBuildResult = await runCommand(['bun', 'run', 'build'], pkgDir); - if (!workbenchBuildResult.success) { - throw new Error(`Workbench build failed: ${workbenchBuildResult.stderr}`); - } - } - - const packResult = await runCommand( - ['bun', 'pm', 'pack', '--destination', packagesDir, '--quiet'], - pkgDir - ); - - if (!packResult.success) { - throw new Error(`Failed to pack ${pkg}: ${packResult.stderr}`); - } - - const tarballOutput = packResult.stdout.trim(); - // bun pm pack returns full path if --destination is used, not just filename - const tarballPath = tarballOutput.startsWith(packagesDir) - ? tarballOutput - : join(packagesDir, tarballOutput); - - if (!existsSync(tarballPath)) { - throw new Error(`Packed tarball not found: ${tarballPath}`); - } - - packages.set(`@agentuity/${pkg}`, tarballPath); - logSuccess(`Packed ${pkg}: ${tarballPath.split('/').pop()}`); - - // Verify frontend tarball has createClient export - if (pkg === 'frontend') { - const verifyResult = await runCommand( - ['tar', '-xzOf', tarballPath, 'package/dist/index.js'], - pkgDir - ); - if (verifyResult.success) { - const indexContent = verifyResult.stdout; - if (!indexContent.includes('createClient')) { - logWarning(`⚠️ Packed tarball for frontend does NOT contain createClient export!`); - logWarning(`Content (first 500): ${indexContent.substring(0, 500)}`); - } else { - logInfo(`✓ Packed tarball for frontend contains createClient export`); - } - } - } - } - - return packages; -} - -async function runCommand( - cmd: string[], - cwd: string, - env?: Record, - timeout = 120000 -): Promise<{ success: boolean; stdout: string; stderr: string; exitCode: number }> { - const proc = spawn({ - cmd, - cwd, - env: { ...process.env, ...env }, - stdout: 'pipe', - stderr: 'pipe', - }); - - let timerId: ReturnType | null = null; - const timeoutPromise = new Promise((_, reject) => { - timerId = setTimeout(() => { - proc.kill(); - reject(new Error(`Command timed out after ${timeout}ms: ${cmd.join(' ')}`)); - }, timeout); - }); - - try { - const [exitCode, stdout, stderr] = await Promise.race([ - Promise.all([ - proc.exited, - new Response(proc.stdout).text(), - new Response(proc.stderr).text(), - ]), - timeoutPromise, - ]); - - if (timerId !== null) { - clearTimeout(timerId); - } - - return { - success: exitCode === 0, - stdout, - stderr, - exitCode, - }; - } catch (error) { - if (timerId !== null) { - clearTimeout(timerId); - } - return { - success: false, - stdout: '', - stderr: error instanceof Error ? error.message : String(error), - exitCode: -1, - }; - } -} - -async function createProject( - sdkRoot: string, - template: TemplateInfo, - projectDir: string -): Promise<{ success: boolean; error?: string }> { - const cliPath = join(sdkRoot, 'packages/cli/bin/cli.ts'); - const configPath = join(sdkRoot, 'packages/cli/examples/noauth-profile.yaml'); - const templateDir = join(sdkRoot, 'templates'); - - const result = await runCommand( - [ - 'bun', - cliPath, - '--config', - configPath, - 'create', - '--name', - `test-${template.id}`, - '--template', - template.id, - '--template-dir', - templateDir, - '--no-register', - '--no-install', - '--no-build', - '--confirm', - ], - projectDir, - { AGENTUITY_SKIP_VERSION_CHECK: '1' }, - 60000 - ); - - if (!result.success) { - return { success: false, error: result.stderr || result.stdout }; - } - - return { success: true }; -} - -async function installDependencies( - projectDir: string, - packedPackages: Map -): Promise<{ success: boolean; error?: string }> { - // Read package.json - const packageJsonPath = join(projectDir, 'package.json'); - const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')); - - // Replace @agentuity dependencies with local tarball paths - // IMPORTANT: Also add packages that aren't direct deps but are transitive deps of packed packages - // This ensures bun doesn't pull them from npm - for (const [pkgName, tarballPath] of packedPackages.entries()) { - if (packageJson.dependencies?.[pkgName]) { - packageJson.dependencies[pkgName] = `file:${tarballPath}`; - } else if ( - pkgName === '@agentuity/frontend' || - pkgName === '@agentuity/server' || - pkgName === '@agentuity/auth' || - pkgName === '@agentuity/core' - ) { - // These are transitive deps of other packages: - // - frontend is a transitive dep of react - // - server is a transitive dep of runtime - // - auth is a transitive dep of runtime - // - core is a transitive dep of many packages - // Add them explicitly to prevent bun from pulling from npm - if (!packageJson.dependencies) packageJson.dependencies = {}; - packageJson.dependencies[pkgName] = `file:${tarballPath}`; - } - if (packageJson.devDependencies?.[pkgName]) { - packageJson.devDependencies[pkgName] = `file:${tarballPath}`; - } - } - - // Add overrides to force all @agentuity packages to use local tarballs - // This prevents nested dependencies from pulling from npm - if (!packageJson.overrides) packageJson.overrides = {}; - for (const [pkgName, tarballPath] of packedPackages.entries()) { - packageJson.overrides[pkgName] = `file:${tarballPath}`; - } - - // Write updated package.json - writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); - - // Log the package.json to verify file:// paths - logInfo('Package.json @agentuity dependencies:'); - for (const k of Object.keys(packageJson.dependencies || {}).filter((k) => - k.startsWith('@agentuity') - )) { - logInfo(` ${k}: ${packageJson.dependencies[k]}`); - } - - // Delete lockfile to ensure fresh resolution - const lockfilePath = join(projectDir, 'bun.lock'); - if (existsSync(lockfilePath)) { - rmSync(lockfilePath); - } - - // Install all dependencies (including local tarballs) in one go - const installResult = await runCommand(['bun', 'install'], projectDir, undefined, 300000); - if (!installResult.success) { - return { success: false, error: installResult.stderr }; - } - - // Remove ALL nested @agentuity packages (not just specific ones) - // This prevents Rollup from resolving stale/nested versions - const globResult = await runCommand( - [ - 'sh', - '-c', - `find node_modules -path '*/node_modules/@agentuity' ! -path 'node_modules/@agentuity' -type d 2>/dev/null || true`, - ], - projectDir - ); - - if (globResult.success && globResult.stdout.trim()) { - const nestedDirs = globResult.stdout.trim().split('\n'); - for (const dir of nestedDirs) { - const fullPath = join(projectDir, dir); - if (existsSync(fullPath)) { - logWarning(`Removing ALL nested @agentuity scope from ${dir}`); - rmSync(fullPath, { recursive: true, force: true }); - } - } - } - - // Verify frontend package has createClient export - const frontendIndexPath = join(projectDir, 'node_modules/@agentuity/frontend/dist/index.js'); - if (existsSync(frontendIndexPath)) { - const frontendIndex = readFileSync(frontendIndexPath, 'utf-8'); - if (!frontendIndex.includes('createClient')) { - logWarning('⚠️ frontend/dist/index.js does NOT export createClient!'); - logWarning(`File size: ${frontendIndex.length} bytes`); - logWarning(`Full content:\n${frontendIndex}`); - } else { - logInfo('✓ frontend/dist/index.js exports createClient'); - } - } else { - logWarning('⚠️ frontend/dist/index.js does NOT exist!'); - } - - return { success: true }; -} - -async function buildProjectDev(projectDir: string): Promise<{ success: boolean; error?: string }> { - // Use local CLI bin to ensure we test the current code - // Test dev build mode first (this is what users run with `agentuity dev`) - const result = await runCommand( - ['bun', CLI_BIN, 'build', '--dev'], - projectDir, - undefined, - 120000 - ); - if (!result.success) { - // Log full error output for debugging - if (result.stderr) { - console.error('\n' + result.stderr); - } - if (result.stdout) { - console.log('\n' + result.stdout); - } - return { success: false, error: result.stderr || result.stdout }; - } - - // Verify build output exists - const agentuityDir = join(projectDir, '.agentuity'); - if (!existsSync(agentuityDir)) { - return { success: false, error: 'Build output directory (.agentuity) not found' }; - } - - return { success: true }; -} - -async function buildProject(projectDir: string): Promise<{ success: boolean; error?: string }> { - // Use local CLI bin to ensure we test the current code - // Test production build mode (this is what users run with `agentuity build`) - const result = await runCommand(['bun', CLI_BIN, 'build'], projectDir, undefined, 120000); - if (!result.success) { - // Log full error output for debugging - if (result.stderr) { - console.error('\n' + result.stderr); - } - if (result.stdout) { - console.log('\n' + result.stdout); - } - return { success: false, error: result.stderr || result.stdout }; - } - - // Verify build output exists - const agentuityDir = join(projectDir, '.agentuity'); - if (!existsSync(agentuityDir)) { - return { success: false, error: 'Build output directory (.agentuity) not found' }; - } - - return { success: true }; -} - -async function verifyCssInBuild(projectDir: string): Promise<{ success: boolean; error?: string }> { - const clientDir = join(projectDir, '.agentuity', 'client'); - const indexHtmlPath = join(clientDir, 'index.html'); - - // Check if index.html exists - if (!existsSync(indexHtmlPath)) { - return { success: false, error: 'Built index.html not found' }; - } - - // Read index.html and verify CSS link exists - const indexHtml = readFileSync(indexHtmlPath, 'utf-8'); - if (!indexHtml.includes(' { - const result = await runCommand(['bunx', 'tsc', '--noEmit'], projectDir, undefined, 60000); - if (!result.success) { - return { success: false, error: result.stderr || result.stdout }; - } - return { success: true }; -} - -async function startServer( - projectDir: string, - port: number, - env: Record -): Promise<{ proc: Subprocess; success: boolean; error?: string }> { - const appPath = join(projectDir, '.agentuity', 'app.js'); - - // Pass port as CLI flag and merge env vars - // Set NODE_ENV=production to ensure runtime mode detection works correctly - const mergedEnv = { ...process.env, ...env, NODE_ENV: 'production' }; - - // Debug: Verify env vars are set - logInfo(`Starting server with env: ${Object.keys(env).join(', ')}`); - - const proc = spawn({ - cmd: ['bun', '--no-install', appPath, '--port', String(port)], - cwd: projectDir, - env: mergedEnv, - stdout: 'inherit', - stderr: 'inherit', - }); - - // Wait for server to be ready - const maxAttempts = 30; - for (let i = 0; i < maxAttempts; i++) { - await new Promise((resolve) => setTimeout(resolve, 1000)); - - try { - const response = await fetch(`http://127.0.0.1:${port}/_health`); - if (response.ok) { - return { proc, success: true }; - } - } catch { - // Server not ready yet - } - - // Check if process crashed - if (proc.exitCode !== null) { - return { proc, success: false, error: 'Server crashed (check logs above)' }; - } - } - - proc.kill(); - return { proc, success: false, error: 'Server failed to start within 30 seconds' }; -} - -async function testEndpoints(port: number): Promise<{ health: boolean; errors: string[] }> { - const errors: string[] = []; - let health = false; - - // Test health endpoint only - sufficient to verify template builds and starts correctly - try { - const response = await fetch(`http://127.0.0.1:${port}/_health`); - health = response.ok; - if (!health) { - errors.push(`Health endpoint returned ${response.status}`); - } - } catch (e) { - errors.push(`Health endpoint failed: ${e}`); - } - - return { health, errors }; -} - -async function checkOutdatedDependencies(projectDir: string): Promise { - const result = await runCommand(['bun', 'outdated'], projectDir, undefined, 30000); - // bun outdated returns non-zero if there are outdated packages, but we just want to report - const lines = result.stdout - .split('\n') - .filter((line) => line.trim() && !line.includes('@agentuity')); - return lines; -} - -async function testTemplate( - sdkRoot: string, - template: TemplateInfo, - basePort: number, - skipOutdated: boolean, - packedPackages: Map -): Promise { - const startTime = Date.now(); - const result: TestResult = { - template: template.id, - passed: true, - steps: [], - duration: 0, - }; - - const tempDir = join(tmpdir(), `agentuity-test-${template.id}-${Date.now()}`); - mkdirSync(tempDir, { recursive: true }); - - let serverProc: Subprocess | null = null; - - try { - console.log(''); - console.log(`${'='.repeat(60)}`); - logInfo(`Testing template: ${template.name} (${template.id})`); - console.log(`${'='.repeat(60)}`); - - // Step 1: Create project - logStep('Creating project...'); - let stepStart = Date.now(); - const createResult = await createProject(sdkRoot, template, tempDir); - result.steps.push({ - name: 'Create project', - passed: createResult.success, - error: createResult.error, - duration: Date.now() - stepStart, - }); - if (!createResult.success) { - result.passed = false; - logError(`Failed to create project: ${createResult.error}`); - return result; - } - logSuccess('Project created'); - - const projectDir = join(tempDir, `test-${template.id}`); - - // Step 2: Install dependencies - logStep('Installing dependencies...'); - stepStart = Date.now(); - const installResult = await installDependencies(projectDir, packedPackages); - result.steps.push({ - name: 'Install dependencies', - passed: installResult.success, - error: installResult.error, - duration: Date.now() - stepStart, - }); - if (!installResult.success) { - result.passed = false; - logError(`Failed to install dependencies: ${installResult.error}`); - return result; - } - logSuccess('Dependencies installed'); - - // Step 3a: Build project in dev mode (tests `agentuity build --dev` / `agentuity dev`) - logStep('Building project (dev mode)...'); - stepStart = Date.now(); - const buildDevResult = await buildProjectDev(projectDir); - result.steps.push({ - name: 'Build project (dev)', - passed: buildDevResult.success, - error: buildDevResult.error, - duration: Date.now() - stepStart, - }); - if (!buildDevResult.success) { - result.passed = false; - logError(`Failed to build project (dev mode): ${buildDevResult.error}`); - return result; - } - logSuccess('Project built (dev mode)'); - - // Step 3b: Build project in production mode (tests `agentuity build`) - logStep('Building project (production)...'); - stepStart = Date.now(); - const buildResult = await buildProject(projectDir); - result.steps.push({ - name: 'Build project (production)', - passed: buildResult.success, - error: buildResult.error, - duration: Date.now() - stepStart, - }); - if (!buildResult.success) { - result.passed = false; - logError(`Failed to build project (production): ${buildResult.error}`); - return result; - } - logSuccess('Project built (production)'); - - // Step 3.5: Verify CSS for Tailwind template - if (template.id === 'tailwind') { - logStep('Verifying Tailwind CSS in build output...'); - stepStart = Date.now(); - const cssVerifyResult = await verifyCssInBuild(projectDir); - result.steps.push({ - name: 'Verify CSS in build', - passed: cssVerifyResult.success, - error: cssVerifyResult.error, - duration: Date.now() - stepStart, - }); - if (!cssVerifyResult.success) { - result.passed = false; - logError(`CSS verification failed: ${cssVerifyResult.error}`); - return result; - } - logSuccess('Tailwind CSS verified in build output'); - } - - // Step 3.5: Prepare environment variables (passed via spawn, Bun auto-loads .env) - const envVars: Record = { - AGENTUITY_SDK_KEY: 'test-key', - AGENTUITY_LOG_LEVEL: 'error', - }; - - // Add dummy provider keys based on template - if (template.id === 'openai' || template.id === 'vercel-openai') { - envVars.OPENAI_API_KEY = 'dummy-openai-key'; - } else if (template.id === 'groq') { - envVars.GROQ_API_KEY = 'dummy-groq-key'; - } else if (template.id === 'xai') { - envVars.XAI_API_KEY = 'dummy-xai-key'; - } else if (template.id === 'clerk') { - envVars.CLERK_SECRET_KEY = 'sk_test_dummy'; - envVars.AGENTUITY_PUBLIC_CLERK_PUBLISHABLE_KEY = 'pk_test_dummy'; - } else if (template.id === 'agentuity-auth') { - // Auth template requires DATABASE_URL to be set (throws at import time otherwise) - envVars.DATABASE_URL = 'postgres://user:pass@localhost:5432/testdb'; - envVars.AGENTUITY_AUTH_SECRET = 'test-secret-for-auth-template'; - } - - // Step 4: Typecheck - logStep('Running typecheck...'); - stepStart = Date.now(); - const typecheckResult = await typecheckProject(projectDir); - result.steps.push({ - name: 'Typecheck', - passed: typecheckResult.success, - error: typecheckResult.error, - duration: Date.now() - stepStart, - }); - if (!typecheckResult.success) { - result.passed = false; - logError(`Typecheck failed: ${typecheckResult.error}`); - return result; - } - logSuccess('Typecheck passed'); - - // Step 5: Start server and test endpoints - logStep('Starting server...'); - stepStart = Date.now(); - - const serverResult = await startServer(projectDir, basePort, envVars); - serverProc = serverResult.proc; - - result.steps.push({ - name: 'Start server', - passed: serverResult.success, - error: serverResult.error, - duration: Date.now() - stepStart, - }); - - if (!serverResult.success) { - result.passed = false; - logError(`Failed to start server: ${serverResult.error}`); - return result; - } - logSuccess('Server started'); - - // Step 6: Test health endpoint - logStep('Testing health endpoint...'); - stepStart = Date.now(); - const endpointResults = await testEndpoints(basePort); - - result.steps.push({ - name: 'Test health endpoint', - passed: endpointResults.health, - error: endpointResults.errors.length > 0 ? endpointResults.errors.join('; ') : undefined, - duration: Date.now() - stepStart, - }); - - if (!endpointResults.health) { - result.passed = false; - logError(`Health endpoint test failed: ${endpointResults.errors.join('; ')}`); - } else { - logSuccess('Health endpoint test passed'); - } - - // Step 7: Check outdated dependencies (report-only) - if (!skipOutdated) { - logStep('Checking for outdated dependencies...'); - const outdated = await checkOutdatedDependencies(projectDir); - if (outdated.length > 0) { - logWarning('Outdated dependencies found (non-fatal):'); - for (const line of outdated.slice(0, 10)) { - console.log(` ${line}`); - } - if (outdated.length > 10) { - console.log(` ... and ${outdated.length - 10} more`); - } - } else { - logSuccess('No outdated dependencies'); - } - } - } finally { - // Cleanup - if (serverProc) { - serverProc.kill(); - } - try { - rmSync(tempDir, { recursive: true, force: true }); - } catch { - // Ignore cleanup errors - } - } - - result.duration = Date.now() - startTime; - return result; -} - -async function main() { - const args = parseArgs(); - - if (args.help) { - showHelp(); - process.exit(0); - } - - const sdkRoot = resolve(join(import.meta.dir, '..')); - const templates = await loadTemplates(sdkRoot); - - if (args.list) { - console.log('\nAvailable templates:'); - for (const template of templates) { - console.log(` ${CYAN}${template.id}${NC} - ${template.name}`); - console.log(` ${template.description}`); - } - process.exit(0); - } - - // Filter templates if specific one requested - let templatesToTest = templates; - if (args.template) { - const found = templates.find((t) => t.id === args.template); - if (!found) { - logError(`Template '${args.template}' not found. Use --list to see available templates.`); - process.exit(1); - } - templatesToTest = [found]; - } - - console.log(''); - console.log(`${'='.repeat(60)}`); - console.log(`${CYAN}Agentuity Template Integration Tests${NC}`); - console.log(`${'='.repeat(60)}`); - console.log(`Templates to test: ${templatesToTest.map((t) => t.id).join(', ')}`); - - // Pack workspace packages once before testing - console.log(''); - const packedPackages = await packWorkspacePackages(sdkRoot); - - // Test templates serially (one at a time) to avoid port conflicts and easier debugging - const basePort = 3500; - - const results: TestResult[] = []; - for (let i = 0; i < templatesToTest.length; i++) { - const template = templatesToTest[i]; - const port = basePort; // Use same port since we're running one at a time - const result = await testTemplate(sdkRoot, template, port, args.skipOutdated, packedPackages); - results.push(result); - } - - // Print summary - console.log(''); - console.log(`${'='.repeat(60)}`); - console.log(`${CYAN}Test Summary${NC}`); - console.log(`${'='.repeat(60)}`); - - const passed = results.filter((r) => r.passed).length; - const failed = results.filter((r) => !r.passed).length; - - for (const result of results) { - const status = result.passed ? `${GREEN}PASS${NC}` : `${RED}FAIL${NC}`; - const duration = (result.duration / 1000).toFixed(1); - console.log(` ${status} ${result.template} (${duration}s)`); - - if (!result.passed) { - for (const step of result.steps) { - if (!step.passed) { - console.log(` ${RED}Failed step:${NC} ${step.name}`); - if (step.error) { - console.log(` ${RED}Error:${NC} ${step.error.substring(0, 200)}`); - } - } - } - } - } - - console.log(''); - console.log( - `Total: ${results.length} | Passed: ${GREEN}${passed}${NC} | Failed: ${RED}${failed}${NC}` - ); - console.log(''); - - if (failed > 0) { - process.exit(1); - } -} - -main().catch((error) => { - logError(`Unexpected error: ${error}`); - process.exit(1); -}); diff --git a/templates/README.md b/templates/README.md deleted file mode 100644 index 52bf1a831..000000000 --- a/templates/README.md +++ /dev/null @@ -1,322 +0,0 @@ -# Agentuity Project Templates - -This directory contains project templates used by the `@agentuity/cli` package to scaffold new Agentuity applications. - -## Overview - -Templates provide a starting point for new Agentuity projects. The CLI uses these templates when running `agentuity create ` to set up a complete, working project with example code, configuration, and best practices. - -## Template Architecture - -### Base + Overlay System - -Templates use a **base + overlay** architecture to reduce duplication and simplify maintenance: - -1. **`_base/`** - Contains all common files shared across templates (app.ts, tsconfig.json, React components, etc.) -2. **Template overlays** (e.g., `openai/`, `groq/`) - Contain only template-specific files that differ from the base - -When creating a project, the CLI: - -1. Copies all files from `_base/` to the destination -2. Copies overlay files on top (overlay wins on conflicts) -3. Merges `package.overlay.json` dependencies into the base `package.json` - -### Directory Structure - -``` -templates/ -├── _base/ # Base template (shared files) -│ ├── src/ -│ │ ├── agent/hello/ # Default agent implementation -│ │ ├── api/ # API routes -│ │ └── web/ # React web application -│ ├── AGENTS.md -│ ├── README.md -│ ├── agentuity.config.ts -│ ├── app.ts -│ ├── gitignore -│ ├── package.json -│ └── tsconfig.json -├── default/ # Default template (empty overlay) -│ └── .gitkeep -├── openai/ # OpenAI SDK template -│ ├── package.overlay.json # Additional dependencies -│ └── src/agent/hello/agent.ts -├── groq/ # Groq SDK template -│ ├── package.overlay.json -│ └── src/agent/hello/agent.ts -├── tailwind/ # Tailwind CSS template -│ ├── package.overlay.json -│ ├── agentuity.config.ts # Custom build config -│ └── src/web/index.html # Modified HTML -└── templates.json # Template manifest -``` - -### Manifest File - -The `templates.json` file defines all available templates: - -```json -{ - "templates": [ - { - "id": "default", - "name": "Default Template", - "description": "A basic Agentuity project with React UI and example agents", - "directory": "default" - } - ] -} -``` - -Each template entry contains: - -- **id**: Unique identifier used by the CLI -- **name**: Display name shown to users -- **description**: Brief explanation of what the template includes -- **directory**: Subdirectory name containing the overlay files - -## How the CLI Uses Templates - -### 1. Template Discovery - -The CLI fetches available templates from either: - -- **Local directory**: For development/testing (`--template-dir` option) -- **GitHub repository**: Production use from `agentuity/sdk` repository - -Relevant code: `packages/cli/src/cmd/project/templates.ts` - -### 2. Template Selection - -When running `agentuity create`, users can: - -- Select from available templates interactively -- Specify a template with `--template ` -- Default to the first available template - -Relevant code: `packages/cli/src/cmd/project/template-flow.ts` - -### 3. Template Download - -The CLI downloads/copies template files using the base + overlay system: - -1. Copy all files from `_base/` directory -2. Copy overlay files from the selected template directory (overlay wins on conflicts) -3. Merge `package.overlay.json` into `package.json` if present - -Relevant code: `packages/cli/src/cmd/project/download.ts` - -### 4. Package.json Merging - -If a template has a `package.overlay.json` file, its contents are merged into the base `package.json`: - -```json -// package.overlay.json (in template overlay) -{ - "dependencies": { - "openai": "latest" - } -} -``` - -The merge performs a shallow merge of: - -- `dependencies` (overlay wins on conflicts) -- `devDependencies` (overlay wins on conflicts) -- `scripts` (overlay wins on conflicts) - -### 5. Placeholder Replacement - -After downloading, the CLI replaces template placeholders with actual values: - -| Placeholder | Replaced With | Files Affected | -| ---------------------------- | --------------------------- | ---------------------------------------- | -| `{{PROJECT_NAME}}` | User's project name | `package.json`, `README.md`, `AGENTS.md` | -| `"name": "{{PROJECT_NAME}}"` | Directory name (kebab-case) | `package.json` only | - -**Example:** - -```json -// Before (in template) -{ - "name": "{{PROJECT_NAME}}" -} - -// After (in created project with name "My App") -{ - "name": "my-app" -} -``` - -Relevant code: `packages/cli/src/cmd/project/download.ts` (`replaceInFiles()`) - -### 6. Project Setup - -After placeholder replacement, the CLI: - -1. Installs dependencies with `bun install` (unless `--no-install`) -2. Runs optional `_setup.ts` script if present (then deletes it) -3. Builds the project with `bun run build` (unless `--no-build`) - -Relevant code: `packages/cli/src/cmd/project/download.ts` (`setupProject()`) - -### 7. Template Setup Script - -Templates can include an optional `_setup.ts` script that runs after `bun install` but before `bun run build`. This allows templates to perform custom setup logic such as: - -- Generating configuration files -- Running code generators -- Setting up environment-specific files -- Any other post-install initialization - -The script is automatically deleted after execution (whether it succeeds or fails), so it won't be included in the final project. - -**Example `_setup.ts`:** - -```typescript -// _setup.ts - This script runs after bun install and is then deleted -import { writeFileSync } from 'fs'; - -// Generate a config file based on environment -writeFileSync('.env.local', 'EXAMPLE_VAR=value\n'); - -console.log('Setup complete!'); -``` - -### 8. Special Handling - -- **gitignore**: The file is named `gitignore` in templates to prevent Git from ignoring it, then renamed to `.gitignore` during setup -- **.gitkeep**: These files are skipped during copy (they're just placeholders for empty directories) -- **package.overlay.json**: This file is not copied directly; its contents are merged into `package.json` -- **\_setup.ts**: This script runs after `bun install` and is deleted afterward - -## Creating a New Template - -### 1. Create Template Directory - -```bash -mkdir templates/my-template -``` - -### 2. Add Overlay Files - -Only add files that differ from the base template: - -- **`package.overlay.json`** - Additional dependencies to merge -- **`src/agent/hello/agent.ts`** - Custom agent implementation (if different) -- **`agentuity.config.ts`** - Custom build configuration (if needed) -- **Any other files** - Will override base files with the same path - -Example `package.overlay.json`: - -```json -{ - "dependencies": { - "my-sdk": "latest" - }, - "devDependencies": { - "my-dev-tool": "^1.0.0" - } -} -``` - -### 3. Update Manifest - -Add your template to `templates.json`: - -```json -{ - "templates": [ - { - "id": "my-template", - "name": "My Custom Template", - "description": "Description of what this template provides", - "directory": "my-template" - } - ] -} -``` - -### 4. Test Locally - -Test your template with the local template directory option: - -```bash -agentuity create my-project \ - --template my-template \ - --template-dir ./templates -``` - -## Modifying the Base Template - -When modifying files in `_base/`, remember that changes affect ALL templates. Only add files to `_base/` that should be shared across all templates. - -Common files in `_base/`: - -- `app.ts` - Application entry point with workbench enabled -- `tsconfig.json` - TypeScript configuration -- `gitignore` - Git ignore patterns -- `AGENTS.md` - Agent guidelines -- `README.md` - Project documentation template -- `agentuity.config.ts` - Default build configuration -- `package.json` - Base dependencies -- `src/agent/hello/` - Default agent implementation -- `src/api/index.ts` - API routes -- `src/web/` - React web application - -## Template Best Practices - -1. **Minimize overlay files**: Only include files that truly differ from the base -2. **Use package.overlay.json**: Don't duplicate the entire package.json; only specify additional dependencies -3. **Include examples**: Provide working example code that showcases the template's SDK/framework -4. **Document differences**: If your template has special requirements, document them -5. **Test thoroughly**: Verify the template works after `create`, `install`, and `build` - -## Files That Support Placeholders - -Currently, only these files have placeholders automatically replaced: - -- `package.json` -- `README.md` -- `AGENTS.md` - -To add more files, modify the `replaceInFiles()` function in `packages/cli/src/cmd/project/download.ts`. - -## Available Placeholders - -| Placeholder | Description | Example | -| ------------------ | -------------------------- | -------- | -| `{{PROJECT_NAME}}` | User-provided project name | "My App" | - -The directory name (used for package.json `name` field) is automatically generated as a kebab-case version of the project name. - -## CLI Commands for Templates - -```bash -# Create project with default template -agentuity create my-project - -# Create with specific template -agentuity create my-project --template default - -# Create from local templates (development) -agentuity create my-project --template-dir ./templates - -# Create from specific branch (testing) -agentuity create my-project --template-branch dev - -# Skip install and build steps -agentuity create my-project --no-install --no-build -``` - -## Related Files - -- **CLI Template Code**: `packages/cli/src/cmd/project/` - - `templates.ts` - Template loading and fetching - - `template-flow.ts` - User interaction flow - - `download.ts` - Template download and setup (base + overlay merging) - - `create.ts` - Command definition -- **Template Manifest**: `templates/templates.json` -- **Base Template**: `templates/_base/` -- **Template Overlays**: `templates/default/`, `templates/openai/`, etc. diff --git a/templates/_base/AGENTS.md b/templates/_base/AGENTS.md deleted file mode 100644 index a569618d7..000000000 --- a/templates/_base/AGENTS.md +++ /dev/null @@ -1,64 +0,0 @@ -# Agent Guidelines for {{PROJECT_NAME}} - -## Commands - -- **Build**: `bun run build` (compiles your application) -- **Dev**: `bun run dev` (starts development server) -- **Typecheck**: `bun run typecheck` (runs TypeScript type checking) -- **Deploy**: `bun run deploy` (deploys your app to the Agentuity cloud) - -## Agent-Friendly CLI - -The Agentuity CLI is designed to be agent-friendly with programmatic interfaces, structured output, and comprehensive introspection. - -Read the [AGENTS.md](./node_modules/@agentuity/cli/AGENTS.md) file in the Agentuity CLI for more information on how to work with this project. - -## Instructions - -- This project uses Bun instead of NodeJS and TypeScript for all source code -- This is an Agentuity Agent project - -## Web Frontend (src/web/) - -The `src/web/` folder contains your React frontend, which is automatically bundled by the Agentuity build system. - -**File Structure:** - -- `index.html` - Main HTML file with ` - - -
- - diff --git a/templates/_base/src/web/public/.gitkeep b/templates/_base/src/web/public/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/templates/_base/src/web/public/favicon.ico b/templates/_base/src/web/public/favicon.ico deleted file mode 100644 index 21f46e6f5..000000000 Binary files a/templates/_base/src/web/public/favicon.ico and /dev/null differ diff --git a/templates/_base/tsconfig.json b/templates/_base/tsconfig.json deleted file mode 100644 index 9b379e0f6..000000000 --- a/templates/_base/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "allowJs": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, - "paths": { - "@agent/*": ["./src/agent/*"], - "@api/*": ["./src/api/*"] - } - }, - "include": ["src/**/*", "app.ts"] -} diff --git a/templates/_base/vite.config.ts b/templates/_base/vite.config.ts deleted file mode 100644 index 28431dbe9..000000000 --- a/templates/_base/vite.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import react from '@vitejs/plugin-react'; -import tailwindcss from '@tailwindcss/vite'; -import { defineConfig } from 'vite'; -import { join } from 'node:path'; - -export default defineConfig({ - plugins: [react(), tailwindcss()], - root: '.', - build: { - rollupOptions: { - input: join(import.meta.dirname, 'src/web/index.html'), - }, - }, -}); diff --git a/templates/default/agentuity.config.ts b/templates/default/agentuity.config.ts deleted file mode 100644 index 3d743e957..000000000 --- a/templates/default/agentuity.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Agentuity Configuration - * - */ - -import type { AgentuityConfig } from '@agentuity/cli'; -import react from '@vitejs/plugin-react'; -import tailwindcss from '@tailwindcss/vite'; - -export default { - /** - * Workbench (development only) - * - * Visual UI for testing agents during development. Not included in production builds. - * Omit this section to disable. Access at http://localhost:3500/workbench - */ - workbench: { - route: '/workbench', - headers: {}, - }, - - /** - * Vite Plugins - * - * Plugins for the client build (src/web/). - * The React plugin is included by default — replace it with your - * framework of choice (e.g., @sveltejs/vite-plugin-svelte). - * - * @see https://vitejs.dev/plugins/ - */ - plugins: [react(), tailwindcss()], -} satisfies AgentuityConfig; diff --git a/templates/default/package.overlay.json b/templates/default/package.overlay.json deleted file mode 100644 index ecddb1739..000000000 --- a/templates/default/package.overlay.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "dependencies": { - "@agentuity/evals": "latest", - "openai": "latest", - "groq-sdk": "latest" - }, - "devDependencies": { - "@tailwindcss/vite": "^4.1.18", - "tailwindcss": "^4.1.18" - } -} diff --git a/templates/default/src/agent/index.ts b/templates/default/src/agent/index.ts deleted file mode 100644 index e0c1742bd..000000000 --- a/templates/default/src/agent/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Agent registry — import your agents here and export them as an array. - * The array is passed to createApp() in app.ts to register all agents. - */ -import translate from './translate'; - -export default [translate]; diff --git a/templates/default/src/agent/translate/eval.ts b/templates/default/src/agent/translate/eval.ts deleted file mode 100644 index c8b31febf..000000000 --- a/templates/default/src/agent/translate/eval.ts +++ /dev/null @@ -1,121 +0,0 @@ -/** - * Evals for the translation agent. - * - adversarial (score, from 0-1): Does the response resist adversarial manipulation attempts? - * - language-match (binary, pass/fail): Did it translate to the requested language? - */ - -import { adversarial } from '@agentuity/evals'; -import { s } from '@agentuity/schema'; -import Groq from 'groq-sdk'; -import agent, { type AgentInput, type AgentOutput } from './index'; - -const groq = new Groq(); - -/** - * Preset Eval (score type): Adversarial - * Evaluates whether response resists adversarial manipulation attempts. - * Uses middleware to transform agent I/O to the match the agent's input/output format. - */ -export const adversarialEval = agent.createEval( - adversarial({ - middleware: { - transformInput: (input) => ({ - request: `Translate to ${input.toLanguage ?? 'Spanish'}:\n\n${input.text}`, - }), - transformOutput: (output) => ({ - response: output.translation, - }), - }, - // Lifecycle hooks for observability: log eval start/completion with relevant metadata - onStart: (ctx, input) => { - ctx.logger.info('[EVAL] adversarial: Starting', { toLanguage: input.toLanguage }); - }, - onComplete: (ctx, input, output, result) => { - ctx.logger.info('[EVAL] adversarial: Completed', { - passed: result.passed, - reason: result.reason, - }); - }, - }) -); - -/** - * Custom Eval (binary type): Language Match - * Verifies the translation is in the requested target language. - * Uses Groq SDK via AI Gateway for fast, structured language detection. - */ -const LanguageCheckSchema = s.object({ - detectedLanguage: s.string().describe('The detected language of the text'), - isCorrectLanguage: s.boolean().describe('Whether the text is in the target language'), - reason: s.string().describe('Brief explanation'), -}); - -type LanguageCheck = s.infer; - -export const languageMatchEval = agent.createEval('language-match', { - description: 'Verifies the translation is in the requested target language', - handler: async (ctx, input, output) => { - ctx.logger.info('[EVAL] language-match: Starting', { targetLanguage: input.toLanguage }); - - // Skip if no translation produced - if (!output.translation || output.translation.trim() === '') { - ctx.logger.info('[EVAL] language-match: No translation to evaluate'); - - return { - passed: false, - reason: 'No translation produced', - }; - } - - const targetLanguage = input.toLanguage ?? 'Spanish'; - - // Generate JSON schema with strict mode for structured output - const jsonSchema = s.toJSONSchema(LanguageCheckSchema, { strict: true }); - - const completion = await groq.chat.completions.create({ - model: 'openai/gpt-oss-120b', - response_format: { - type: 'json_schema', - json_schema: { - name: 'language_check', - schema: jsonSchema as Record, - strict: true, - }, - }, - messages: [ - { - role: 'user', - content: `Determine if the following text is written in ${targetLanguage}. - -Text to analyze: - -"${output.translation}" - -Is this text written in ${targetLanguage}?`, - }, - ], - }); - - const content = completion.choices[0]?.message?.content; - if (!content) { - ctx.logger.warn('[EVAL] language-match: No response from language check'); - return { - passed: false, - reason: 'No response from language check', - }; - } - - const result = JSON.parse(content) as LanguageCheck; - - ctx.logger.info('[EVAL] language-match: Completed', { passed: result.isCorrectLanguage }); - - return { - passed: result.isCorrectLanguage, - reason: result.reason, - metadata: { - targetLanguage, - detectedLanguage: result.detectedLanguage, - }, - }; - }, -}); diff --git a/templates/default/src/agent/translate/index.ts b/templates/default/src/agent/translate/index.ts deleted file mode 100644 index 17e77f558..000000000 --- a/templates/default/src/agent/translate/index.ts +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Translation Agent: translates text using AI models via the Agentuity AI Gateway. - * Stores translation history in thread state for persistence across requests. - * Uses @agentuity/schema - a lightweight, built-in schema library. - */ -import { createAgent } from '@agentuity/runtime'; -import { s } from '@agentuity/schema'; -import OpenAI from 'openai'; - -/** - * AI Gateway: Routes requests to OpenAI, Anthropic, and other LLM providers. - * One SDK key, unified observability and billing; no separate API keys needed. - * - * Client is created lazily in setup() to avoid requiring OPENAI_API_KEY - * at build time during agent discovery. - */ - -const LANGUAGES = ['Spanish', 'French', 'German', 'Chinese'] as const; -const MODELS = ['gpt-5-nano', 'gpt-5-mini', 'gpt-5'] as const; - -// History entry stored in thread state -export const HistoryEntrySchema = s.object({ - model: s.string().describe('AI model used for the translation'), - sessionId: s.string().describe('Session ID when the translation was made'), - text: s.string().describe('Original text that was translated (truncated)'), - timestamp: s.string().describe('ISO timestamp when the translation occurred'), - tokens: s.number().describe('Number of tokens used for this translation'), - toLanguage: s.string().describe('Target language for the translation'), - translation: s.string().describe('Translated text result (truncated)'), -}); - -export type HistoryEntry = s.infer; - -export const AgentInput = s.object({ - model: s.enum(MODELS).optional().describe('AI model to use for translation'), - text: s.string().describe('The text to translate'), - toLanguage: s.enum(LANGUAGES).optional().describe('Target language for translation'), -}); - -export const AgentOutput = s.object({ - history: s.array(HistoryEntrySchema).describe('Recent translation history'), - sessionId: s.string().describe('Current session identifier'), - threadId: s.string().describe('Thread ID for conversation continuity'), - tokens: s.number().describe('Tokens used for this translation'), - translation: s.string().describe('The translated text'), - translationCount: s.number().describe('Total translations in this thread'), -}); - -// Agent definition with automatic schema validation -const agent = createAgent('translate', { - description: 'Translates text to different languages', - schema: { - input: AgentInput, - output: AgentOutput, - }, - // Lazy initialization: create OpenAI client at runtime, not at build time - // This allows agent discovery to work without requiring OPENAI_API_KEY - setup: async () => { - return { - client: new OpenAI(), - }; - }, - handler: async (ctx, { text, toLanguage = 'Spanish', model = 'gpt-5-nano' }) => { - // Agentuity logger: structured logs visible in terminal and Agentuity console - ctx.logger.info('──── Translation ────'); - ctx.logger.info({ toLanguage, model, textLength: text.length }); - ctx.logger.info('Request IDs', { - threadId: ctx.thread.id, - sessionId: ctx.sessionId, - }); - - const prompt = `Translate to ${toLanguage}:\n\n${text}`; - - // Call OpenAI via AI Gateway (automatically routed and tracked) - const completion = await ctx.config.client.chat.completions.create({ - model, - messages: [{ role: 'user', content: prompt }], - }); - - const translation = completion.choices[0]?.message?.content ?? ''; - - // Token usage from the response (also available via x-agentuity-tokens header) - const tokens = completion.usage?.total_tokens ?? 0; - - // Add translation to history - const truncate = (str: string, len: number) => - str.length > len ? `${str.slice(0, len)}...` : str; - - const newEntry: HistoryEntry = { - model, - sessionId: ctx.sessionId, - text: truncate(text, 50), - timestamp: new Date().toISOString(), - tokens, - toLanguage, - translation: truncate(translation, 50), - }; - - // Append to history (sliding window, keeps last 5 entries) - await ctx.thread.state.push('history', newEntry, 5); - - const history = (await ctx.thread.state.get('history')) ?? []; - - ctx.logger.info('Translation complete', { - tokens, - historyCount: history.length, - }); - - return { - history, - sessionId: ctx.sessionId, - threadId: ctx.thread.id, - tokens, - translation, - translationCount: history.length, - }; - }, -}); - -export default agent; diff --git a/templates/default/src/api/index.ts b/templates/default/src/api/index.ts deleted file mode 100644 index 866d08a90..000000000 --- a/templates/default/src/api/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * API routes for the translation agent. - * Routes handle state operations (get/clear history); the agent handles translation. - */ - -import { Hono } from 'hono'; -import type { Env } from '@agentuity/runtime'; -import { validator } from '@agentuity/runtime'; -import translate, { AgentOutput, type HistoryEntry } from '../agent/translate'; - -// State subset for history endpoints (derived from AgentOutput) -export const StateSchema = AgentOutput.pick(['history', 'threadId', 'translationCount']); - -const api = new Hono() - // Call the agent to translate text - .post('/translate', translate.validator(), async (c) => { - const data = c.req.valid('json'); - - return c.json(await translate.run(data)); - }) - // Retrieve translation history - .get('/translate/history', validator({ output: StateSchema }), async (c) => { - // Routes use c.var.* for Agentuity services (thread, kv, logger); agents use ctx.* directly - const history = (await c.var.thread.state.get('history')) ?? []; - - return c.json({ - history, - threadId: c.var.thread.id, - translationCount: history.length, - }); - }) - // Clear translation history - .delete('/translate/history', validator({ output: StateSchema }), async (c) => { - await c.var.thread.state.delete('history'); - - return c.json({ - history: [], - threadId: c.var.thread.id, - translationCount: 0, - }); - }); - -export type ApiRouter = typeof api; - -export default api; diff --git a/templates/default/src/web/App.css b/templates/default/src/web/App.css deleted file mode 100644 index 8bc759284..000000000 --- a/templates/default/src/web/App.css +++ /dev/null @@ -1,52 +0,0 @@ -@import "tailwindcss"; - -@theme { - /* Cyan (Agentuity Brand) */ - --color-cyan-50: oklch(0.9812 0.027 196.72); - --color-cyan-100: oklch(0.965 0.0516 196.33); - --color-cyan-200: oklch(0.938 0.0956 195.64); - --color-cyan-300: oklch(0.9193 0.1285 195.15); - --color-cyan-400: oklch(0.9089 0.1478 194.87); - --color-cyan-500: oklch(0.9054 0.15455 194.769); - --color-cyan-600: oklch(0.7653 0.1306 194.77); - --color-cyan-700: oklch(0.6183 0.10555 194.769); - --color-cyan-800: oklch(0.462 0.078864 194.769); - --color-cyan-900: oklch(0.2907 0.0496 194.77); - --color-cyan-950: oklch(0.1932 0.033 194.77); - - /* Gray (Zinc) */ - --color-gray-50: oklch(0.985 0 0); - --color-gray-100: oklch(0.967 0.001 286.375); - --color-gray-200: oklch(0.92 0.004 286.32); - --color-gray-300: oklch(0.871 0.006 286.286); - --color-gray-400: oklch(0.705 0.015 286.067); - --color-gray-500: oklch(0.552 0.016 285.938); - --color-gray-600: oklch(0.442 0.017 285.786); - --color-gray-700: oklch(0.37 0.013 285.805); - --color-gray-800: oklch(0.274 0.006 286.033); - --color-gray-900: oklch(0.21 0.006 285.885); - --color-gray-950: oklch(0.141 0.005 285.823); - - /* Animations */ - --animate-ellipsis: ellipsis 1.5s steps(4, end) infinite; - - @keyframes ellipsis { - 0% { - content: '.'; - } - 25% { - content: '..'; - } - 50% { - content: '...'; - } - 75% { - content: ''; - } - } -} - -[data-loading="true"]::after { - content: '.'; - @apply inline-block w-4 animate-ellipsis text-left; -} diff --git a/templates/default/src/web/App.tsx b/templates/default/src/web/App.tsx deleted file mode 100644 index d1d66e3b6..000000000 --- a/templates/default/src/web/App.tsx +++ /dev/null @@ -1,403 +0,0 @@ -import { useAnalytics } from '@agentuity/react'; -import { hc } from 'hono/client'; -import type { ApiRouter } from '../api/index'; -import { type ChangeEvent, Fragment, useCallback, useEffect, useState } from 'react'; -import './App.css'; - -const WORKBENCH_PATH = process.env.AGENTUITY_PUBLIC_WORKBENCH_PATH; -const LANGUAGES = ['Spanish', 'French', 'German', 'Chinese'] as const; -const MODELS = ['gpt-5-nano', 'gpt-5-mini', 'gpt-5'] as const; -const DEFAULT_TEXT = - 'Welcome to Agentuity! This translation agent shows what you can build with the platform. It connects to AI models through our gateway, tracks usage with thread state, and runs quality checks automatically. Try translating this text into different languages to see the agent in action, and check the terminal for more details.'; - -const client = hc('/api'); - -export function App() { - const [text, setText] = useState(DEFAULT_TEXT); - const [toLanguage, setToLanguage] = useState<(typeof LANGUAGES)[number]>('Spanish'); - const [model, setModel] = useState<(typeof MODELS)[number]>('gpt-5-nano'); - - const [historyData, setHistoryData] = useState<{ - history: any[]; - threadId?: string; - translationCount: number; - } | null>(null); - const [translateResult, setTranslateResult] = useState(null); - const [isLoading, setIsLoading] = useState(false); - - const { track } = useAnalytics(); - - // Fetch history on mount - const fetchHistory = useCallback(async () => { - const res = await client.translate.history.$get(); - setHistoryData(await res.json()); - }, []); - - useEffect(() => { - fetchHistory(); - }, [fetchHistory]); - - // Prefer fresh data from translation, fall back to initial fetch - const history = translateResult?.history ?? historyData?.history ?? []; - const threadId = translateResult?.threadId ?? historyData?.threadId; - - const handleTranslate = useCallback(async () => { - track('translate', { text, toLanguage, model }); - setIsLoading(true); - try { - const res = await client.translate.$post({ json: { text, toLanguage, model } }); - setTranslateResult(await res.json()); - } finally { - setIsLoading(false); - } - }, [text, toLanguage, model, track]); - - const handleClearHistory = useCallback(async () => { - track('clear_history'); - await client.translate.history.$delete(); - await fetchHistory(); - }, [fetchHistory, track]); - - return ( -
-
- {/* Header */} -
- - -

Welcome to Agentuity

- -

- The Full-Stack Platform for AI Agents -

-
- - {/* Translate Form */} -
-
- Translate to - - using - -
-
- -
- - -
-
- -